commit 75e64c9ee91b32bffbd3ad9b6e114df608612eb6 Author: michael Date: Mon Jun 17 20:33:38 2024 +0800 init src 1d072180a diff --git a/CHANGES b/CHANGES new file mode 100644 index 00000000..a692ed7b --- /dev/null +++ b/CHANGES @@ -0,0 +1,10564 @@ +2021.02.4, released August 10th, 2021 + + Important / security related fixes. + + Toolchain: Disable PIC/PIE for Microblaze (like for NIOS II) + as it is not currently working. + + binutils: fix linker assert failure on OpenRisc, or1k build + issue with gcc < 5 + + gdb: Enable on NIOS II + + utils/scanpypi: Various improvements + + Defconfigs: stm32f469_disco: Fix kernel boot issue, Microchip + sam9x60ek mmc_dev: Add missing toolchain/system options + + Updated/fixed packages: apache, arm-trusted-firmware, audit, + avahi, bind, binutils, bird, bluez5_utils, boinc, busybox, + chrony, clamav, cryptsetup, cwiid, dnsmasq, docker-cli, + docker-engine, dovecot, dovecot-pigeonhole, e2fsprogs, exiv2, + fail2ban, fb-test-app, feh, fetchmail, flac, fluxbox, gawk, + gcc, gcr, gdb, gdk-pixbuf, gesftpserver, glibc, go, gptfdisk, + granite, grub2, gqrx, guile, hdparm, heirloom-mailx, + ibrcommon, ibrdtn, ibrdtn-tools, ibrdtnd, intel-microcode, + iodine, irqbalance, keepalived, libass, libconfig, libcurl, + libfreeimage, libfuse3, libgcrypt, libgtk3, libgudev, libhtp, + libjson, libkrb5, libloki, libmodsecurity, libndp, + libnetfilter-log, libnfnetlink, libnice, libodb, libodb-boost, + libodb-mysql, libodb-pgsql, libpcap, libqmi, libressl, + librsvg, libtasn1, libtirpc, libuci, libxmlrpc, + linux-firmware, linuxptp, lrzsz, ltp-testsuite, lvm2, mariadb, + mbedtls, monit, mono, mosquitto, mpd, mpg123, mpv, nbd, neard, + netsnmp, nettle, nginx-modsecurity, nmap, nodejs, ntp, + openntpd, openpgm, openswan, pango, pcre2, + perl-crypt-openssl-rsa, php, pixman, polkit, postgresql, + proxychains-ng, putty, python, python-django, + python-dataproperty, python-pysftp, python-urllib3, python3, + qpdf, redis, ripgrep, ruby, samba4, spice, slirp, suricata, + sysdig, tcpdump, tftpd, thrift, tor, tpm2-tools, trinity, + uboot, uboot-tools, uclibc, util-linux, vlc, wireless-regdb, + wireshark, wolfssl, xapp_fonttosfnt, xlib_libX11, + xlib_libxshmfence, xserver_xorg-server + + Issues resolved (http://bugs.uclibc.org): + + #13586: grub failure with BR2_OPTIMIZE_3 + #13661: host-python2 build fails on aarch64 + #13836: package build failure when target install set to no.. + #13846: BR2_PACKAGE_LVM2_STANDARD_INSTALL should be default to.. + +2021.02.3, released June 12th, 2021 + + Important / security related fixes. + + CPE meta data has been added for a large number of packages + + Updated/fixed packages: acpid, apache, apcupsd, assimp, bird, + bitcoin, blktrace, boost, capnproto, chrony, dc3dd, dhcp, + directfb, dmalloc, docker-engine, ebtables, efibootmgr, + enlightenment, enscript, environment-setup, exempi, expat, + findutils, flatcc, fluidsynth, frr, gdb, go, gptfdisk, grpc, + gst1-plugins-bad, gst1-rtsp-server, gstreamer1, gupnp, + hostapd, hwloc, i2c-tools, iftop, imagemagick, imx-gpu-viv, + intel-mediadriver, intel-microcode, jquery-validation, + keepalived, kodi, less, libcamera, libcurl, libcutl, libesmtp, + libeXosip2, libffi, libfuse, libfuse3, libgeos, libgtk2, + libgtk3, libical, libidn, libidn2, libkcapi, libldns, libmms, + libmodbus, libmspack, libnids, libopenh264, liboping, libraw, + librelp, libsamplerate, libtirpc, libusb, libuv, libxcb, + libxml2, libxslt, live555, llvm, lmbench, localedef, + lttng-tools, lvm2, lz4, mesa3d, mimic, mini-snmpd, minidlna, + minissdpd, minizip, mono-gtksharp3, mpg123, mpv, msmtp, musl, + mutt, nasm, nbd, netperf, netsurf, nginx, odb, opencv3, + openssh, opentyrian, oprofile, p7zip, paho-mqtt-c, perl, + php-imagick, pifmrds, picocom, pigz, pngquant, poco, + postgresql, prosody, proxychains-ng, pulseaudio, putty, pwgen, + python-autobahn, python-bluezero, python-engineio, + python-keyring, python-pillow, python-requests, python-tqdm, + qemu, qpdf, qt5base, redis, refpolicy, rt-tests, runc, + shellinabox, squid, strace, supervisor, synergy, taglib, + tclap, terminology, thermald, tini, tinyproxy, tinyxml2, + tpm2-tss, uclibc, udisks, uhd, unscd, vlc, waylandpp, + webkitgtk, weston, wireshark, wpa_supplicant, wpewebkit, + xlib_libdmx, xlib_libFS, xlib_libICE, xlib_libX11, + xlib_libXcursor, xlib_libXdmcp, xlib_libXext, xlib_libXfixes, + xlib_libXfont2, xlib_libXinerama, xlib_libXpm, xlib_libXres, + xlib_libXt, xlib_libXtst, xlib_libXxf86dga, xlib_libXxf86vm, + xterm + + Issues resolved (http://bugs.uclibc.org): + + #13781: isc dhcp-server package don't create file /usr/bin/dhcpd + #13801: toolchainfile.cmake CMAKE_BUILD_TYPE + #13806: Building host-localedef fails on fedora 34/gcc 11 + +2021.02.2, released May 12th, 2021 + + Important / security related fixes. + + Toolchain: Add logic to mark toolchains affected by binutils + bug 27597 (Nios II). + + support/scripts/cve.py: Use the (significantly) faster yajl2 + ijson backend for older (< 2.5) ijson versions rather than the + slow python default, speeding up pkg-stats by ~2x. + + CMake infrastructure: Use CMAKE_EXE_LINKER_FLAGS rather than + CMAKE_CXX_FLAGS to link with libatomic to fix an compatibility + issue with poppler. + + Infrastructure: Expose CONFIG_DIR to post-build/post-image + scripts, so they can call the Buildroot Makefile in the + correct directory for both in-tree / out-of-tree builds. + + Updated/fixed packages: at91bootstrap, avahi, bash, bind, + bridge-utils, boost, cegui, cifs-utils, clamav, cmake, + coremark-pro, coreutils, cryptsetup, dmalloc, dnsmasq, + docker-cli, docker-engine, domoticz, efl, exim, ffmpeg, flex, + gcc, genext2fs, go, gst1-interpipe, haproxy, hostapd, + i2c-tools, imx-vpu, kexec, kf5-kcoreaddons, kismet, libcamera, + libcurl, libdrm, libfreefare, libfuse3, libgeos, libgpiod, + libnpupnp, libopenssl, libp11, librsync, libtomcrypt, libupnp, + localedef, lvm2, lxc, m4, makedevs, mender, mesa3d, + mesa3d-headers, mkpasswd, mkpimage, modem-manager, monkey, + mpd, ncurses, nettle, network-manager, nginx, numactl, + openjdk, openjdk-bin, openldap, openvpn, php, pipewire, + python-aioconsole, python-asgiref, python-botocore, + python-django, python-dnspython, python-flup, python-httplib2, + python-markdown2, python-mbrstrdecoder, python3, quickjs, + readline, rsyslog, ruby, rust, samba4, sconeserver, snort, + sox, systemd, tar, timescaledb, tio, tor, usb_modeswitch, + wpa_supplicant, xdriver_xf86-video-ati, xen, xlib_libXaw, + xserver_xorg-server + + Issues resolved (http://bugs.uclibc.org): + + #13271: systemd-resolved: /etc/resolv.conf link broken on per-pa.. + #13551: 2021.02.rc2: Unicode not work on qt 5.15.2 + #13651: pkg-golang cannot build when main.go is in the root + #13661: host-python2 build fails on aarch64 + #13721: c-stack.c:55:26: error: missing binary operator before .. + #13731: Readline Patch is missing Author Information + #13741: genext2fs does not allow to set perms of root node + #13751: libopenssl (static): huge drop in performance in newer .. + #13771: package htop has undeclared dependency on host python + +2021.02.1, released April 7, 2021 + + Important / security related fixes. + + Dependencies: Explicitly detect and bail out if PATH contains + spaces or tabs. A number of packages fail to build in such + setups, so explicitly inform about this. + + utils/scanpypi: Explicitly use python3 for compatibility with + packages using python3 syntax in setup.py + + support/download: Fix tarball generation (from git/svn repos) + including symlinks pointing to ./. Fix svn download + for <1.9 clients or repos using CVS-style keywords. + + Meson: Use correct C++ host compiler (rather than C compiler) + + Toolchain: Add logic to work around binutils bug 21464, + affecting OpenRISC, and drop the now longer applicable bug + 19615 / 20006 handling. + + Python{,3}: Fix byte compiling python files with short (single + character before .py) file names. + + CPE meta data has been added for a large number of packages + + Defconfigs: Correct Beaglebone QT file system overlay + + Updated/fixed packages: alsa-utils, at91bootstrap3, + batman-adv, binutils, botan, bridge-utils, busybox, + ca-certificates, cog, coreutils, diffutils, dmidecode, + docker-cli, docker-containerd, docker-engine, efivar, + fetchmail, frr, genimage, git, gnutls, go, grub2, gst-omx, + gst1-devtools, gst1-libav, gst1-plugins-bad, + gst1-plugins-base, gst1-plugins-good, gst1-plugins-ugly, + gst1-python, gst1-rtsp-server, gst1-vaapi, gstreamer1, + gstreamer1-editing-services, haproxy, haserl, hwloc, + irqbalance, jasper, kexec, kexec-lite, kismet, kodi, libcurl, + libfreeglut, libgcrypt, libgeos, libglib2, libopenssl, libqmi, + libressl, libupnp, libvips, libvpx, libwebsockets, linux, + lldpd, logrotate, lttng-libust, lttng-tools, mariadb, mbedtls, + mcelog, mender, micropython, mongoose, mosquitto, mpd, + netsnmp, nodejs, openmpi, openssh, openvpn, opkg-utils, + optee-client, optee-test, perl, php, proftpd, protobuf, + python-django, python-jinja2, python-lxml, python-paramiko, + python-py, python-pygments, python-rpi-ws281x, python-urllib3, + python3, qt5webkit, qwt, rpm, samba4, sconeserver, sdl2, shim, + sqlcipher, squid, sysklogd, syslinux, sysvinit, tor, + transmission, tzdata, uboot, uclibc, upx, webkitgtk, + wireshark, wpebackend-fdo, wpewebkit, xen, zstd + + New packages: perl-parse-yapp + + Issues resolved (http://bugs.uclibc.org): + + #13516: utils/scanpypi: Failure when parsing diffoscope + #13576: Issues compiling buildroot for 5x86 + #13601: Gen image :Iappropriate ioctl error + #13616: tar file from git repository generation issue + #13641: glibc on raspberrypi + #13646: Gen image version 14 error : no sub -section title/.. + #13671: openSSH server closes connection before authentication.. + +2021.02, released March 6th, 2021 + + Various fixes. + + Toolchain: Correct Bootlin xtensa-lx60 dependencies + + Updated/fixed packages: asterisk, belle-sip, bustle, dhcpcd, + dovecot, dovecot-pigeonhole, gnuchess, gnuradio, + gst1-plugins-bad, haproxy, jasper, kismet, libebml, + libeXosip2, libgeos, libhtp, libjpeg, libopenssl, libshout, + libstrophe, mosquitto, openblas, openssh, perl, privoxy, + prosody, python-pyyaml, python3-pyyaml, quagga, redis, + rust-bin, sox, suricata, tpm2-pkcs11, uclibc-ng-test, ushare, + util-linux, wolfssl, wpa_supplicant + + Issues resolved (http://bugs.uclibc.org): + + #13501: 2021.02.rc2: Unicode not work on qt 5.15.2 + #13581: jpegsrc.v9d.tar.gz has changed hash + +2021.02-rc3, released February 27th, 2021 + + Fixes all over the tree. + + utils/scanpypi: Explicitly use python3 to ensure compatiblity + with packages having python3-only code in setup.py + + support/download: Ensure sub-second timestamp precision is + dropped when creating a tarball from a (subversion) repo, as + that is not representable in the PAX tar format + + Updated/fixed packages: babeltrace2, bind, botan, brltty, + cegui, elfutils, fakeroot, imagemagick, intel-mediasdk, + irqbalance, libglib2, libselinux, libusb, libuwsc, nodejs, + open62541, openldap, ply, python-aiohttp, python-django, + python3, qemu, readline, rust, screen, taglib, unbound, xterm + + Issues resolved (http://bugs.uclibc.org): + + #13516: utils/scanpypi: Failure when parsing diffoscope + #13541: 2021.02.rc2: irqbalance: Daemon couldn't be bound to... + #13561: Create a new user defining users-table.txt not working.. + +2021.02-rc2, released February 16th, 2021 + + Fixes all over the tree. + + Vulnerability scanning: cpedb.py: Drop CPE XML database + caching, as it did not speed up processing much and uses a lot + of additional memory. + pkg-stats: include information about ignored CVEs in JSON + output + + Fakeroot: Fix compatibility issue with glibc 2.33 + + Updated/fixed packages: can-utils, collectd, dnsmaqs, + docker-cli, docker-engine, ebtables, fakeroot, flashrom, + gdk-pixbuf, go, gst1-python, jasper, kodi, + kodi-inputstream-adaptive, lcms2, libgeos, libgpg-error, + libopenssl, mongoose, mpd, ne10, netopeer2, openblas, orc, + perl-gd, ply, postgresql, protobuf, subversion, tcpdump, + tzdate, uboot-tools, wireshark, webkitgtk, wpewebkit, xterm + + New packages: perl-extutils-pkgconfig + + Issues resolved (http://bugs.uclibc.org): + + #11706: binman (U-boot tool) cannot find libfdt "binman: No mod.. + +2021.02-rc1, released February 9th, 2021 + + Fixes all over the tree and new features. + + Toolchain: Default to binutils 2.35.2, add 2.36.1, drop + 2.33.x. Fix GCC 10.x ARC adc/sbc pattern handling, Update ARM + toolchains to 10.2-2020.11 release. + + Architectures: ARC: add support for generic HS48 processor, + PPC: drop PPC601 support, which was removed from Linux 5.10. + + Vulnerability scanning: The CVE checking logic has been + extended to match packages based on CPE (Common Platform + Enumeration) IDs for more accurate matching, and CPE + identifiers have been added for a large amount of packages. + + Download: Rework the tarball creation logic (E.G. when a + package is fetched from a git/svn repo) to no longer require a + host-tar <= 1.29. To differ between the old and the new + format, the new tarballs have gained a -br1 suffix + (--br1.tar.gz). + + SELinux support: A significant number of packages now pull in + the relevant refpolicy modules when enabled. + + New defconfigs: arrow avenger96, bananapi M1+, microchip + sam9x60ek, pine64 rock64 + + Removed defconfigs: QEMU ppc virtex-ml507 + + New packages: balena-engine, casync, coremark, coremark-pro, + datatables, datatables-buttons, datatables-fixedcolumns, + datatables-responsive, delve, frotz, gkrellm, inih, jszip, + libgeos, libiec61850, libmdbx, lualdap, neofetch, + nvidia-modprobe, open62541, perl-devel-cycle, perl-devel-size, + perl-math-int64, ply, popperjs, python-bleak, + python-defusedxml, python-pycups, python-pytest-asyncio, + python-typing-extensions, qcom-db410c-firmware, qt5coap, + qt5knx, qt5mqtt, quickjs, rcw-smarc-sal28, screenfetch, + ssdp-responder, tpm2-pkcs11, wqy-zenhei, xorcurses + + Removed packages: audiofile, boa, ipsec-tools, libupnp18, + ti-sgx-libgdbm + + Renamed rcw package to qoriq-rcw + + Issues resolved (http://bugs.uclibc.org): + + #13316: beaglebone_qt5_defconfig: PowerVR fails to start + #13416: dhcpcd start warning message: no such user dhcpcd + #13456: ccache prevents build + #13471: package/mpd/mpd.conf make use of path not created + #13506: BR2_PACKAGE_DHCPCD missing directory creation + +2020.11.3, released February 17th, 2021 + + meson: Fix ccache detection handling when per-package builds + are used. + + Fakeroot: Fix compatibility issue with glibc 2.33 + + Updated/fixed packages: atftp, binutils, busybox, cereal, + chartjs, connman, dhcpcd, dnsmasq, docker-cli, docker-engine, + ebtables, fakeroot, flashrom, go, gst1-python, guile, + intel-mediadriver, intel-microcode, jasper, + kodi-inputstream-adaptive, lcms2, libbsd, libopenssl, + makedumpfile, memtester, mosquitto, ne10, openblas, orc, php, + postgresql, privoxy, pugixml, python-bottle, python-django, + python3, rauc, sox, stress-ng, subversion, tzdata, + uboot-tools, uclibc, webkitgtk, wireguard-linux-compat, + wireshark, wpa_supplicant, wpewebkit, xenomai, + xserver_xorg-server, xterm + + Issues resolved (http://bugs.uclibc.org): + + #11706: binman (U-boot tool) cannot find libfdt "binman: No mod.. + #13506: BR2_PACKAGE_DHCPCD missing directory creation + +2020.11.2, released January 31st, 2021 + + Important / security related fixes. + + Download: Ensure git submodules are correctly fetched if + enabled for a package with _GIT_SUBMODULES = YES and the + host variant is downloaded first. + + Toolchain: Mark CodeSourcery Aarch64 2014.11 toolchain as not + having libatomic. Bootlin PowerPC-440 FP toolchain updated for + SecurePLT fix. + + pkg-stats: Fix python 3.8+ deprecation warning. + + meson: Ensure ccache is not detected and used, as it may + conflict with the ccache handling in Buildroot. + + Updated/fixed packages: barebox, boost, brltty, dbus, + docker-containerd, dovecot, dovecot-pigeonhole, + environment-setup, firmware-imx, gcc, gerbera, glibc, + gmrender-resurrect, igd2-for-linux, kodi-pvr-zattoo, libclc, + libfuse3, libllcp, libodb-mysql, libtorrent-rasterbar, + libupnp, lpc32xxcdl, luarocks, mpd, multipath-tools, mutt, + nfs-utils, nodejs, openjpeg, openldap, opentracing-cpp, + openvpn, p11-kit, paho-mqtt-c, php, poppler, postgresql, + python3, redis, resiprocate, rpm, runc, socat, sslh, sudo, + sunxi-mali-mainline-driver, syslog-ng, systemd, tini, + tpm2-tss, trace-cmd, tzdata, uboot-tools, uhd, ushare, + util-linux, vlc, wavpack, wireguard-linux-compat, wolfssl, + xapp_xload, xorriso, zic + + Removed packages: libupnp18 + + Issues resolved (http://bugs.uclibc.org): + + #13471: package/mpd/mpd.conf make use of path not created + +2020.11.1, released December 27th, 2020 + + Important / security related fixes. + + Infrastructure: + - cmake: fix host ccache handling for CMake 3.19 + - meson: Forcibly disable binary stripping for + target builds, enable for host builds + - golang: Fix HOST / TARGET directories for per-package builds + + Defconfigs: Beaglebone Qt5: Fix ti-sgx related issues + + Updated/fixed packages: apitrace, arm-trusted-firmware, + ca-certificates, cryptopp, dhcpcd, dtv-scan-tables, + flare-engine, ghostscript, go, haproxy, imagemagick, + imx-gpu-viv, jasper, kismet, libcurl, libglib2, libhtp, + libopenssl, libressl, libuv, libuvw, lua, mbedtls, mongodb, + mutt, ncurses, netsnmp, nodejs, opencv3, openldap, opkg-utils, + paho-mqtt-c, python-crc16, python-lxml, python-pyparsing, + python-pyqt5, qt5base, rauc, shadowsocks-libev, sqlcipher, + suricata, ti-sgx-demos, tinycbor, uclibc-ng-test, unbound, + webkitgtk, wpewebkit, wireshark, x11vnc, xen, + xserver_xorg-server + + Issues resolved (http://bugs.uclibc.org): + + #13316: beaglebone_qt5_defconfig: PowerVR fails to start + #13416: dhcpcd start warning message: no such user dhcpcd + +2020.11, released December 2nd, 2020 + + Various fixes. + + Updated/fixed packages: bustle, docker-containerd, gnuplot, + gst1-plugins-good, jemalloc, kmsxx, libcap, libplist, + libuhttpd, libxkbcommon, lynx, mariadb, netsurf, privoxy, + s390-tools, setserial, xserver_xorg-server + + Issues resolved (http://bugs.uclibc.org): + + #13276: libcap builds libcap.pc incorrectly + +2020.11-rc3, released November 28th, 2020 + + Fixes all over the tree. + + Updated/fixed packages: c-ares, cage, cdrkit, + dovecot-pigeonhole, efl, gvfs, harfbuzz, jpeg-turbo, + libcamera, libkrb5, libpam-tacplus, libxkbcommon, minidlna, + modem-manager, monkey, musl, ncurses, numactl, openntpd, + openrc, postgresql, proftpd, python-flask-cors, python-pip, + qemu, raptor, redis, slirp, spandsp, thermald, uhd, vsftpd, + webkitgtk, wireless-regdb, wlroots, wpewebkit, xen, xinetd, + xorriso + + Issues resolved (http://bugs.uclibc.org): + + #13296: host-libcap failed to build + #13331: openrc-0.42.1 compilation failure on gcc-10 + #13336: thermald-1.9.1 compilation failure with musl 1.2.1 + #13341: Mistake in /etc/init.d/S70vsftpd + +2020.11-rc2, released November 14th, 2020 + + Fixes all over the tree. + + cve-checker script dropped. Instead the pkg-stats logic has + been extended to be able to only generate stats for the + configured packages using 'make pkg-stats' + + Removed defconfigs: rock64 + + Updated/fixed packages: apparmor, asterisk, bitcoin, busybox, + cups-filters, cryptsetup, davfs2, domoticz, elf2flt, freetype, + ghostscript, glmark2, go, gst1-plugins-bad, guile, jsoncpp, + libcap, libexif, libnetfilter_conntrack, libpam-tacplus, + libsigrokdecode, linux-backports, linux-firmware, mesa3d, + modem-manager, mp4v2, oniguruma, openntpd, python3, + python-lmdb, python-m2crypto, rauc, s390-tools, slirp, + stress-ng, suricata, systemd, tcpdump, tmux, tor, webkitgtk, + wireguard-linux-compat, wpewebkit, xen + + Issues resolved (http://bugs.uclibc.org): + + #13281: Raspberry Pi 2: overlays folder missing in genimage-ra.. + #13291: BR2_DL_DIR is ignored when creating defconfig + #13306: wpewebkit build problem in 2020-11-rc1 + +2020.11-rc1, released November 4th, 2020 + + Fixes all over the tree and new features. + + Architectures: Support for IBM s390x + + Toolchain: use Secure-PLT rather than BSS-PLT for PowerPC + 32. Binutils 2.35.1 added, now defaulting to 2.34. ARC + 2020.09-release toolchain. GCC 7.x dropped. RISC-V support for + uclibc-ng. Support for Bootlin external toolchains. + + SELinux support improvements: File security contexts are now + set when the file systems are created, so there is no need to + run restorecon on first boot / read only rootfs is supported. + An optimized / stripped refpolicy SELinux policy is now + used. Packages can enable additional refpolicy modules using + _SELINUX_MODULES. + + support/scripts/cve-checker: Utility script to check for known + CVEs in just the packages enabled in a Buildroot configuration + rather than all packages, by passing the output of 'make + show-info' to it. + + Go: Modules handling. The module name must be specified using + _GOMOD. + + BR2_EXTERNAL: Support for defining skeleton and init system + packages in external trees. + + meson: Correct SDK cross-compilation.conf file when + per-package builds were used to build SDK. + + systemd: Use /run rather than /var/run for PID files in units. + + Fakeroot scripts (BR2_ROOTFS_POST_FAKEROOT_SCRIPT) are now run + after all finalization hooks (including pre-rootfs) to ensure + they can override any late configuration done by packages. + + support/script/pycompile: Rework logic to ensure .pyc files + contain absolute target paths, fixing code inspection at + runtime when executed with cwd != '/'. + + support/scripts/setlocalversion: Correct Mercurial output to + match behaviour with Git. + + support/scripts/apply-patches.sh: Use patch + --no-backup-if-mismatch, so we no longer blindly have to + remove *.orig files after patching, fixing issues with + packages containing such files. + + New defconfigs: Acer chromebook elm, Friendlyarm nanopc-t4 and + nanopi-m4, Hardkernel odroid-c2, Kontron SMARC-sAL28, NXP + imx8mqevk, Orangepi RK3399 and zero+, PCengines APU2, Pine64 + rockpro64, QEMU s390x, Raxda rockpi-n8, + + New packages: altera-stapl, asn1c, babeltrace2, cukinia, + easyframes, environment-setup, frr, graphicsmagick, htpdate, + ipcalc, libbacktrace, libblockdev, libbytesize, librelp, + libuev, makedumpfile, meson-tools, mg, mrp, multipath-tools, + netcalc, odroidc2-firmware, php-xdebug, python-aiofiles, + python-ansicolors, python-boto3, python-botocore, + python-bsdiff4, python-crayons, python-iniconfig, + python-intelhex, python-ipdb, python-jmespath, + python-m2crypto, python-opcua-asyncio, python-packaging, + python-piexif, python-pluggy, python-pytest, + python-s3transfer, python-xmodem, qprint, qt5lottie, + qt5remoteobjects, re2, redir, s390-tools, sentry-cli, + sentry-native, timescaledb, tinyhttpd, uhd, uredir, watchdog, + wayland-utils, weston-imx + + Removed packages: amd-catalyst, bellagio, gqview, libcroco, + nvidia-tegra23, opencv + + Issues resolved (http://bugs.uclibc.org): + + #11811: lsblk (util-linux) should depend on libudev if available + #11931: Bugs in support/scripts/apply-patches.sh + #12301: systemd-journal-gatewayd: config options broken + #12911: usb_modeswitch installation race condition + #13236: Can't compile linux 5.4.8 (with gcc 10 on host) + #13286: The system hangs in vmware workstation on the line.. + +2020.08.3, released December 27th, 2020 + + Important / security related fixes. + + Infrastructure: + - cmake: fix host ccache handling for CMake 3.19 + - meson: Forcibly disable binary stripping for + target builds, enable for host builds + - golang: Fix HOST / TARGET directories for per-package builds + + Defconfigs: Beaglebone Qt5: Fix ti-sgx related issues + + Updated/fixed packages: apitrace, arm-trusted-firmware, + bustle, c-ares, ca-certificates, cage, cdrkit, cryptopp, + dhcpcd, docker-containerd, dtv-scan-tables, flare-engine, + ghostscript, gvfs, haproxy, imagemagick, imx-gpu-viv, jasper, + jemalloc, jpeg-turbo, libcamera, libcap, libcurl, libglib2, + libgpiod, libkrb5, libopenssl, libplist, libressl, libuv, + libuvw, lynx, mariadb, mbedtls, minidlna, mongodb, monkey, + musl, mutt, ncurses, netsnmp, netsurf, nodejs, opencv3, + openldap, openrc, opkg-utils, paho-mqtt-c, php, privoxy, + proftpd, python-crc16, python-flask-cors, python-lxml, + python-pip, python-pyparsing, python-pyqt5, qemu, qt5base, + raptor, rauc, ruby, setserial, shadowsocks-libev, slirp, + sqlcipher, thermald, ti-sgx-demos, tinycbor, unbound, vsftpd, + wireless-regdb, wireshark, wlroots, x11vnc, xen, xinetd, + xserver_xorg-server + + Issues resolved (http://bugs.uclibc.org): + + #13276: libcap builds libcap.pc incorrectly + #13316: beaglebone_qt5_defconfig: PowerVR fails to start + #13336: thermald-1.9.1 compilation failure with musl 1.2.1 + #13341: Mistake in /etc/init.d/S70vsftpd + #13416: dhcpcd start warning message: no such user dhcpcd + +2020.08.2, released November 16th, 2020 + + Important / security related fixes. + + Toolchain-wrapper: Pass -fno-tree-loop-distribute-patterns to + fix kernel build on microblaze with gcc 10.x when + optimizations are enabled. + + Updated/fixed packages: apparmor, argp-standalone, asterisk, + bandwidthd, binutils, bitcoin, busybox, collectd, cryptsetup, + cups-filters, darkhttpd, davfs2, docker-cli, + docker-containerd, docker-engine, dovecot-pigeonhole, + dvb-apps, elf2flt, fastd, fbset, fbtft, freetype, gcc, + ghostscript, grpc, gst1-plugins-bad, jsoncpp, + kernel-module-imx-gpu-viv, keepalived, kmscube, libass, + libexif, libiqrf, libnetfilter_conntrack, libpam-tacplus, + libraw, linux-backports, linux-firmware, lzlib, mp4v2, + netsnmp, nginx, numactl, oniguruma, opencv3, openntpd, + patchelf, php, pistache, postgresql, python-pyqt5, qemu, + qt5base, rauc, redis, samba4, slirp, systemd, tcpdump, + tinyproxy, tmux, tor, waf, webkitgtk, wine, + wireguard-linux-compat, wireshark, wpewebkit, xen, xorriso, + xvisor, zeromq, zxing-cpp + + Issues resolved (http://bugs.uclibc.org): + + #11931: Bugs in support/scripts/apply-patches.sh + +2020.08.1, released October 12th, 2020 + + Important / security related fixes. + + Fixes for various compilation issues with GCC 10.x. + + meson: Correct SDK cross-compilation.conf file when + per-package builds were used to build SDK. + + systemd: Use /run rather than /var/run for PID files in units. + + Toolchain: use Secure-PLT rather than BSS-PLT for PowerPC 32. + + Fakeroot scripts (BR2_ROOTFS_POST_FAKEROOT_SCRIPT) are now run + after all finalization hooks (including pre-rootfs) to ensure + they can override any late configuration done by packages. + + support/script/pycompile: Rework logic to ensure .pyc files + contain absolute target paths, fixing code inspection at + runtime when executed with cwd != '/'. + + support/scripts/setlocalversion: Correct Mercurial output to + match behaviour with Git. + + support/scripts/apply-patches.sh: Use patch + --no-backup-if-mismatch, so we no longer blindly have to + remove *.orig files after patching, fixing issues with + packages containing such files. + + fs/jffs2: Now correctly handles xattrs + + Updated/fixed packages: acpica, afboot-stm32, alsa-utils, + apparmor, bandwidthd, barebox, bash, bison, brotli, + cifs-utils, cups, dhcpcd, dhcpdump, docker-cli, docker-engine, + ecryptfs-utils, efl, fail2ban, fbterm, ffmpeg, fontconfig, + freetype, gcc, gdb, ghostscript, gnupg2, gnutls, go, gqview, + gst1-plugins-base, gst1-plugins-ugly, ipmitool, jbig2dec, + kexec, lcdproc, libcamera, libhtp, libnetconf2, libraw, + libssh, libxml2, libxml-parser-perl, libzip, linux-headers, + live555, localedef, ltp-testsuite, lua, matchbox, memcached, + memtester, mesa3d, meson, minidlna, mongodb, mongrel2, motion, + mraa, mtd, musepack, neardal, netatalk, netperf, netsniff-ng, + nginx, nodejs, nss-pam-ldapd, open-plc-utils, openswan, + opentyrian, openvmtools, php, postgresql, python, + python-aenum, python-cycler, python-engineio, python-fire, + python-pymodbus, python-scapy, python-semver, + python-sentry-sdk, python-socketio, python-texttable, + python-tinyrpc, python-txtorcon, python3, qt5base, quagga, + read-edid, redis, rsh-redone, runc, samba4, socketcand, + strace, supertux, suricata, systemd, ti-utils, trinity, + uclibc, usb_modeswitch, vlc, vsftpd, wampcc, + wayland-protocols, wireguard-linux-compat, wireshark, wlroots, + wolfssl, w_scan, xerces, xfsprogs, xdriver-xf86-video-ati, + xserver_xorg-server, ympd, zeromq, zlib-ng, zstd + + Issues resolved (http://bugs.uclibc.org): + + #12911: usb_modeswitch installation race condition + #13236: Can't compile linux 5.4.8 (with gcc 10 on host) + +2020.08, released September 1st, 2020 + + Various fixes. + + Updated/fixed packages: am33x-cm3, avahi, bluez-tools, + busybox, chocolate-doom, collectd, dhcp, docker-cli, domoticz, + gobject-introspection, graphite2, haproxy, ibm-sw-tpm2, + imagemagick, libeXosip2, libressl, lxc, mbedtls, menu-cache, + mongodb, mosquitto, nvidia-driver, paho-mqtt-c, pixz, + postgresql, python-django, rtty, squid, stress-ng, systemd, + trousers, uclibc, wireshark, wolfssl, zbar + +2020.08-rc3, released August 28th, 2020 + + Fixes all over the tree. + + Infrastructure: Ensure RPATH entries that may be needed for + dlopen() are not dropped by patchelf. + + Toolchain: Drop old GCC 6 based external Sourcery AMD64 + toolchain. + + Updated/fixed packages: assimp, davfs2, dillo, glibc, + gnuradio, hostapd, ibm-sw-tpm2, ipmitool, json-c, libroxml, + linux, mender, netopeer2, openal, openjpeg, python-matplotlib, + ripgrep, shadowsocks-libev, trousers, xlib_libX11, + xserver_xorg-server + + Issues resolved (http://bugs.uclibc.org): + + #13141: Target-finalize fail with "depmod: ERROR: Bad version passed" + +2020.08-rc2, released August 24th, 2020 + + Fixes all over the tree, including a number of fixes for + compilation with GCC-10. + + Toolchain: Disallow building uClibc-ng for RISC-V 64-bit, + because of issues with a missing __riscv_flush_icache() + implementation. + + Defconfigs: CI20: Use mainline Linux and U-boot. Update + Microchip sama5d27_wlsom1_ek_mmc_dev to use bluez5-utils + instead of (the removed) legacy bluez-utils + + Updated/fixed packages: 18xx-ti-utils, aircrack-ng, apache, + atest, bandwidthd, bellagio, bind, bird, bluez-alsa, boost, + c-periphery, capnproto, chrony, collectd, cpio, cvs, + dieharder, domoticz, dovecot, dovecot-pigeonhole, drbd-utils, + dump1090, efl, elixir, f2fs-tools, feh, fluidsynth, fping, + gdbm, gdk-pixbuf, ghostscript, gst1-plugins-bad, + gstreamer1-editing-services, htop, ibm-sw-tpm2, ifplugd, + iftop, igd2-for-linux, ima-evm-utils, iprutils, iputils, + keepalived, kmsxx, libabseil-cpp, libcamera, libcurl, + libfuse3, libnss, librtlsdr, libubox, libunwind, live555, + lttng-tools, luabitop, mender-artifact, minizip, + mjpg-streamer, mpd, mpv, mtd, ncftp, open-lldp, openal, + opencv, opencv3, openfpgaloader, optee-os, owfs, php, + pistache, prosody, pulseview, python-decorator, + python-gunicorn, python-rpi-gpio, python-spidev, + python3-decorator, python3-mako, python3-pyselftools, qt5, + qt5webengine, rauc, redis, ripgrep, rtl8188eu, rtl8821au, + setools, smstools3, supertux, tftpd, tpm2-abrmd, + wpa_supplicant, xen, xlib_libX11, xserver_xorg-server + + New packages: python3-cython, python3-pycryptodomex + + Issues resolved (http://bugs.uclibc.org): + + #12876: nodejs fails to build when host-icu has been built before + #13111: python-gunicorn: missing dependency on python-setuptools + #13121: wpa_supplicant fails to build without libopenssl enabled + #13146: raspberrypi3_defconfig: "Inappropriate ioctl for device".. + #13156: package live555 new license + #13166: python-rpi-gpio: does not work against aarch64, unint.. + +2020.08-rc1, released August 6th, 2020 + + Toolchain: + + - GCC 10.x added, GCC 9.x is the default + - binutils 2.34 added, binutils 2.33 is the default, binutils + 2.31 removed + - glibc updated to 2.31 + - ARC toolchain components updated to 2020.03-release. + - Enable uClibc-ng usage for RISC-V 64-bit + + Infrastructure: + + - qmake-package was fixed to be compatible with + BR2_PER_PACKAGE_DIRECTORIES + - complete rewrite of the Gitlab CI Yaml configuration file, + now generated directly by the Gitlab CI pipeline itselfs + + Misc: + + - cargo and cargo-bin packages removed, as cargo is now part + of Rust itself + + Filesystem: ubinize configuration files can now use + BINARIES_DIR to refer to the $(O)/images directory. + + New packages: bitwise, earlyoom, fuse-overlayfs, gloox, + kodi-pvr-octonet, kodi-pvr-zattoo, libabseil-cpp, libcutl, + libnids, libnpupnp, libodb, libodb-boost, libodb-mysql, + libodb-pgsql, mbpfan, netopeer2, odb, parprouted, + python-colorzero, python-gpiozero, python-pybind, python-yatl, + python3-decorator, qt5quicktimeline, resiprocate, ttyd, + unclutter-xfixes, urandom-scripts, + + New defconfigs: bananapi_m2_zero, freescale_imx8mnevk, + globalscale_espressobin, imx6ullevk, + microchip_sama5d27_wlsom1_ek, rock_pi_4, rock_pi_n10 + + Removed packages: cargo, cargo-bin, + kodi-peripheral-steamcontroller + + Issues resolved (http://bugs.uclibc.org): + + #12941: Python GObject fails to build when using BR2_PER_PACKAGE_DIRECTORIES + #12946: Grub: Decompressor is too big. + #12986: Mtools: Error converting to codepage 850 + #13001: openjdk-bin replaces libfreetype.so from host-freetype + #13011: Incorrect selection of gcc version + #13021: Minor code error when building granite-0.4.1 + #13026: rpi-firmware: must not rename start files + #13046: Optimize for fast -Ofast is not compliant + #13081: host-e2fsprogs attempts to create udev rules.d on build host if not exists + #13101: BR audit2allow support + +2020.05.3, released October 12th, 2020 + + Important / security related fixes. + + meson: Correct SDK cross-compilation.conf file when + per-package builds were used to build SDK. + + systemd: Use /run rather than /var/run for PID files in units. + + Toolchain: use Secure-PLT rather than BSS-PLT for PowerPC 32. + + Fakeroot scripts (BR2_ROOTFS_POST_FAKEROOT_SCRIPT) are now run + after all finalization hooks (including pre-rootfs) to ensure + they can override any late configuration done by packages. + + support/script/pycompile: Rework logic to ensure .pyc files + contain absolute target paths, fixing code inspection at + runtime when executed with cwd != '/'. + + support/scripts/setlocalversion: Correct Mercurial output to + match behaviour with Git. + + support/scripts/apply-patches.sh: Use patch + --no-backup-if-mismatch, so we no longer blindly have to + remove *.orig files after patching, fixing issues with + packages containing such files. + + Updated/fixed packages: alsa-utils, apparmor, avahi, + bandwidthd, barebox, bash, bison, brotli, busybox, cifs-utils, + cryptsetup, cups, dhcpcd, dhcpdump, docker-cli, docker-engine, + ecryptfs-utils, efl, fail2ban, freetype, gcc, gdb, + ghostscript, gnutls, go, graphite2, gst1-plugins-base, + gst1-plugins-ugly, imagemagick, ipmitool, jbig2dec, libhtp, + libraw, libssh, libxml2, libxml-parser-perl, linux-headers, + localedef, lua, mbedtls, memcached, mesa3d, meson, minidlna, + mongodb, nginx, nodejs, nss-pam-ldapd, openvmtools, + paho-mqtt-c, php, postgresql, python, python-aenum, + python-django, python-engineio, python-fire, python-pymodbus, + python-scapy, python-semver, python-sentry-sdk, + python-socketio, python-texttable, python-tinyrpc, + python-txtorcon, python3, qt5base, rsh-redone, runc, samba4, + strace, supertux, suricata, systemd, uclibc, usb_modeswitch, + vlc, vsftpd, wayland-protocols, wireguard-linux-compat, + wireshark, wlroots, wolfssl, xserver_xorg-server, ympd, + zeromq, zstd + + Issues resolved (http://bugs.uclibc.org): + + #12911: usb_modeswitch installation race condition + #13251: cryptsetup does not work on branch 2020.02 following.. + +2020.05.2, released August 29th, 2020 + + Important / security related fixes. + + Infrastructure: Ensure RPATH entries that may be needed for + dlopen() are not dropped by patchelf. + + BR_VERSION_FULL/setlocalversion (used by make print-version + and /etc/os-release): Properly handle local git tags + + Updated/fixed packages: apache, assimp, at91bootstrap3, bind, + boost, busybox, capnproto, cegui, chrony, collectd, cpio, + cryptsetup, cups, cvs, dbus, docker-engine, domoticz, dovecot, + dovecot-pigeonhole, dropbear, efl, elixir, f2fs-tools, ffmpeg, + gd, gdk-pixbuf, ghostscript, glibc, gnuradio, grub2, + gst1-plugins-bad, gstreamer1-editing-services, hostapd, + ibm-sw-tpm2, iputils, jasper, json-c, libcurl, libressl, + libwebsockets, linux, live555, mesa3d, mongodb, mosquitto, + mpv, nodejs, opencv, opencv3, openfpgaloader, openjpeg, + patchelf, perl, php, postgresql, prosody, python-django, + python-gunicorn, python-matplotlib, ripgrep, rtl8188eu, + rtl8821au, ruby, shadowsocks-libev, squid, systemd, + tpm2-abrmd, tpm2-tools, trousers, uboot, webkitgtk, wireshark, + wolfssl, wpa_supplicant, wpewebkit, xen, xlib_libX11, + xserver_xorg-server + + Issues resolved (http://bugs.uclibc.org): + + #12876: nodejs fails to build when host-icu has been built before + #13111: python-gunicorn: missing dependency on python-setuptools + #13121: wpa_supplicant fails to build without libopenssl enabled + #13141: Target-finalize fail with "depmod: ERROR: Bad version passed" + #13156: package live555 new license + +2020.05.1, released July 25th, 2020 + + Important / security related fixes. + + Toolchain: + - Make external toolchain version check also work for + toolchains configured with --with-gcc-major-version-only + + - Do not handle SOURCE_DATE_EPOCH in toolchain wrapper if the + compiler supports it, fixing an issue with precompiled + headers + + - Ensure debug libs from external toolchains are not installed + into target if debugging is disabled + + Download: + - Correct reproducibility issue in handling of git submodules + for older git versions. + + - Fix file locking over NFS + + fs: Ensure cpio archive element order is reproducible + + Br2-external: Fix error reporting for invalid br2-external trees + + Per-package: + - Fix an issue with python3 sysconfig data not getting + correctly expanded + + - Fix per-package building for packages using the qmake + infrastructure + + Updated/fixed packages: a10disp, asterisk, bind, brltty, + cdrkit, clamav, cryptodev-linux, dbus, docker-cli, + docker-engine, dvb-apps, e2fsprogs, exim, exiv2, freerdp, gdb, + gdk-pixbuf, gerbera, gnutls, go, granite, grub2, gssdp, + gst1-plugins-good, gst1-plugins-ugly, gupnp, intel-microcode, + iproute2, irrlicht, iwd, jq, kodi, libcamera, libcec, + libconfuse, libcurl, libevdev, libhttpserver, libmicrohttpd, + libnss, libressl, libvncserver, libxml2, libxmlrpc, lxc, + mbedtls, mediastreamer, mesa3d, meson, minizip, mongodb, + mtools, mutt, nano, network-manager, nghttp2, ngircd, nodejs, + ntp, open-plc-utils, open2300, openjdk-bin, openssh, + oracle-mysql, paho-mqtt-c, pango, php, poco, prosody, putty, + python-greenlet, python-urllib3, python-validators, python3, + readline, redis, rpi-firmware, rtl8821au, samba4, sdl2, + sqlite, squid, strace, sunxi-mali-mainline-driver, syslog-ng, + systemd, tcpreplay, tinydtls, upmpdcli, upx, vlc, webkitgtk, + wireguard-linux-compat, wireshark, wpebackend-fdo, wpewebkit, + x11vnc, znc, zstd + + Issues resolved (http://bugs.uclibc.org): + + #12941: Python GObject fails to build when using BR2_PER_PACKAGE_.. + #12946: Grub: Decompressor is too big. + #12986: Mtools: Error converting to codepage 850 + #13001: openjdk-bin replaces libfreetype.so from host-freetype + #13011: Incorrect selection of gcc version + #13021: Minor code error when building granite-0.4.1 + #13026: rpi-firmware: must not rename start files + #13031: nodejs: RangeError at new ArrayBuffer() + #13046: Optimize for fast -Ofast is not compliant + +2020.05, released June 1st, 2020 + + Various fixes. + + Updated/fixed packages: arm-trusted-firmware, gcc, mp4v2, fmc, + fmlib, glib-networking, libusb-compat, linux, qt5webengine, + sysrepo, wampcc, xen + +2020.05-rc3, released May 29th, 2020 + + Fixes all over the tree. + + Infrastructure: Support checking download hashes for packages + coming from Subversion. + + Defconfigs: Increase boot partition size to 64MB for Freescale + boards to allow space for bigger kernels. + + Updated/fixed packages: audit, bind, dovecot, efl, erlang, + ffmpeg, fio, gerbera, gnupg, leveldb, lrzip, ltrace, matio, + mesa3d, mp4v2, prosody, qemu, qt5declarative, speexdsp, + systemd, tremor, uboot-tools, unbound, wireshark + + Removed packages: wiringpi + + Issues resolved (http://bugs.uclibc.org): + + #12361: Init system (systemd) kills login on Raspberry Pi Zero + #12686: recipe for target 'install_dev' failed (libcrypto.so..) + +2020.05-rc2, released May 22nd 2020 + + Fixes all over the tree. + + U-Boot: Support building with Python 3.x instead of Python + 2.x. Since U-Boot 2020.01, various U-Boot build scripts use + Python 3.x instead of Python 2.x, so add an option to pull in + host-python3 rather than host-python. Also fix a number of + defconfigs to use this new option. + + Updated/fixed packages: apparmor, binutils, bison, brltty, + c-icap, cegui, checkpolicy, clamav, crda, cvs, docker-cli, + docker-engine, domoticz, elf2flt, exfatprogs, fakeroot, + ffmpeg, freerdp, gcc, glibc, gnuconfig, irrlicht, kmod, + libexif, libpam-tacplus, libssh2, libv4l, libvncserver, + localedef, lrzip, mariadb, matchbox, mbuffer, mesa3d, + mesa3d-headers, meson, netsniff-ng, openldap, openocd, + optee-os, p7zip, paho-mqtt-c, php, piglit, pigz, + python-argon2-cffi, python-attrs, python-future, + python-markdown, python-pycryptodomex, python-pyqt5, qt5base, + rpi-firmware, rustc, squashfs, squid, stella, suricata, + systemd, uacme, uclibc, util-linux, vboot-utils + + New packages: python3-pyelftools + + Removed packages: ezxml, mtdev2tuio, python-pycrypto + + Issues resolved (http://bugs.uclibc.org): + + #10551: PowerPC SPE and Musl + #12256: package tar is outdated (1.29 is 3 years old) + #12271: python-iptables runtime dependencies + #12321: host-generic-package: PKG_DL_OPTS not used for host package + #12391: CMake-based host package fails to include output/host/include + #12431: ethernet no detected on nanopi neo 2 + #12521: RISCV RV32IA selected, RV64GC output + #12586: avahi failure + #12596: host-e2fsprogs: tune2fs incompatibility on older glibc.. + #12611: ntp hash is not matching with upstream 4.2.8p13 + #12626: PHP missing header files within 2020.02 + #12631: glibc support Power-PC SPE + #12656: bison fails to relocate with relocate-sdk.sh + #12661: cups problems in buildroot + #12686: recipe for target 'install_dev' failed (libcrypto.so:.. + #12691: host-rust build fails + #12761: Buildroot fails when building GCNano binaries for the STM.. + #12786: Systemd spawns two getty processes when the getty port.. + #12806: There are multiple issues in buildroot that faults cups.. + #12826: nodejs-12.16.1: error: 'uv_sleep' was not declared in.. + #12831: RPI-firmware package: DTB-overlay dependency + #12836: libunwind: package does not show up in menuconfig for.. + #12841: util-linux/sfdisk 2.35.1 fails on sector-size header + #12866: should we be disabling bash executable path caching? + #12886: GMP built in wrong order (?) + #12891: QEMU, libvirt-bin, qemu-kvm Package Support required + #12901: GStreamer doesn't build on 2020-05 rc1 with GObject.. + #12906: qt PrefixPath is wrong on 2020.05-rc1 + #12921: nodejs-12.16.1: error: overriding 'virtual icu_65::.. + +2020.05-rc1, released May 7th 2020 + + Addition of support for gobject-introspection: both the + gobject-introspection package itself, but also introspection + support was enabled in a number of other packages. + + Support for Qt 5.6 was dropped as its support was dropped + upstream, only one version of Qt is supported at the moment: + Qt 5.14.2. + + Addition of support for the apparmor Linux security module, by + adding the necessary user-space packages. + + Addition of a qmake package infrastructure, now used by most + Qt-related packages. + + The Luarocks package infrastructure has been extended to + support build host packages. + + The package infrastructure was improved to allow each package + to indicate the Linux kernel configuration options it needs. + + Addition of support for generating filesystem images using the + EROFS filesystem. + + The logic that calculates the list of files installed by each + package was reworked to be compatible with the top-level + parallel build functionality. + + Addition of a package for a pre-compiled ARM32 bare-metal + toolchain, which can be used to build ARM32 code in ARM64 + configurations, such as firmware/bootloader code. + + The Qemu defconfigs are now boot-tested in Qemu as part of the + Gitlab continuous integration. + + Toolchain: gcc 9.x bumped to 9.3.0, gcc 8.x bumped to 8.4.0, + gdb bumped to 8.3.1. + + New packages: apcupsd, apparmor, arm-gnu-a-toolchain, bearssl, + belle-sip, belr, cage, chartjs, erofs-utils, exfatprogs, + gobject-introspection, ibm-sw-tpm2, imx-seco, jbig2dec, + libapparmor, libiberty, libfuse3, libtextstyle, libudfread, + libuhttpd, libuwsc, lua-lyaml, matio, mbuffer, netdata, + openfpgaloader, perl-i18n, perl-locale-maketext-lexicon, + perl-lwp-protocol-https, + perl-mojolicious-plugin-authorization, + perl-mojolicious-plugin-cspheader, + perl-mojolicious-plugin-i18n, + perl-mojolicious-plugin-securityheader, perl-mozilla-ca, + perl-path-class, pistache, pkcs11-helper, prelink-cross, + python-argon2-cffi, python-canopen, python-cbor2, + python-filelock, python-flatbuffers, python-greenlet, + python-modbus-tk, python-pyalsa, python-pysftp, python-regex, + python-snappy, rtty, tinyproxy, udev-gentoo-scripts, unbound, + vuejs, wlroots. + + New defconfigs: freescale_imx6ullevk, freescale_imx8qmmek, + nanopi_neo4, nanopi_r1, nitrogen8mm, nitrogen8mn, olpc_xo1, + olpc_xo175, roc_rk3399_pc, stm32mp157a_dk1, zynq_qmtech + + Issues resolved (http://bugs.uclibc.org): + + #10386: Add an option to put all compiled executables that + show up on target/ in staging/ as well + #11866: iniramfs file system fails to boot using Grub on EFI x86_64 + #12666: Doesn't pick up a custom bash profile + #12696: Uboot 2020.01 Problem loading Linux kernel on Nano PI NEO + #12701: [patch] wpa_supplicant must depend on openssl + #12711: host-localedef 2.30-20 fails to compile on fedora 32 (gcc 10.0.1) + #12716: bio.h not found + #12726: systemctl preset-all failed for ctrl-alt-del.target + #12731: rtl8188eu not buildung for banana pi M1 (glib, systemd, 4.18.12) + #12746: "sysdig" package description points to + http://sysdig.org, which bounces to malware site + #12751: OpenJdk package installation issues on target + #12796: Update OpenSSL to Version 1.1.1g to patch CVE-2020-1967 + #12811: bootstrap stuck and no login prompt + +2020.02.11, released February 17, 2021 + + Important / security related fixes. + + meson: Fix ccache detection handling when per-package builds + are used. + + Fakeroot: Fix compatibility issue with glibc 2.33 + + Updated/fixed packages: atftp, busybox, cereal, connman, + dhcpcd, dnsmasq, docker-cli, docker-engine, fakeroot, + intel-mediadriver, intel-microcode, jasper, + kodi-inputstream-adaptive, libbsd, libopenssl, linux-headers, + mosquitto, orc, php, postgresql, privoxy, pugixml, + python-bottle, python-django, python3, rauc, sox, subversion, + tzdata, wireguard-linux-compat, wpa_supplicant, xenomai, xterm + + Issues resolved (http://bugs.uclibc.org): + + #13506: BR2_PACKAGE_DHCPCD missing directory creation + +2020.02.10, released January 31st, 2021 + + Important / security related fixes. + + Download: Ensure git submodules are correctly fetched if + enabled for a package with _GIT_SUBMODULES = YES and the + host variant is downloaded first. + + Toolchain: Mark CodeSourcery Aarch64 2014.11 toolchain as not + having libatomic. + + pkg-stats: Fix python 3.8+ deprecation warning. + + meson: Ensure ccache is not detected and used, as it may + conflict with the ccache handling in Buildroot. + + New packages: libnpupnp + + Updated/fixed packages: bctoolbox, brltty, dbus, dovecot, + dovecot-pigeonhole, gcc, gerbera, gmrender-resurrect, gst-omx, + gst1-plugins-bad, gst1-plugins-base, gst1-plugins-good, + gst1-plugins-ugly, gst1-rtsp-server, gst1-vaapi, + gst1-validate, gstreamer1, gstreamer1-editing-services, + igd2-for-linux, libclc, libllcp, libtorrent-rasterbar, + libupnp, libupnpp, lpc32xxcdl, luarocks, mpd, nfs-utils, + nodejs, openjpeg, openldap, opentracing-cpp, openvpn, p11-kit, + paho-mqtt-c, php, poppler, postgresql, python3, runc, sudo, + syslog-ng, systemd, tini, trace-cmd, tzdata, ushare, vlc, + wavpack, wireguard-linux-compat, wolfssl, xapp_xload, xorriso, + zic + + Removed packages: libupnp18 + + Issues resolved (http://bugs.uclibc.org): + + #13471: package/mpd/mpd.conf make use of path not created + +2020.02.9, released December 27th, 2020 + + Important / security related fixes. + + Infrastructure: + - cmake: fix host ccache handling for CMake 3.19 + - meson: Forcibly disable binary stripping for + target builds, enable for host builds + - golang: Fix HOST / TARGET directories for per-package builds + + Defconfigs: Beaglebone Qt5: Fix ti-sgx related issues + + Updated/fixed packages: apitrace, arm-trusted-firmware, + bustle, c-ares, ca-certificates, cdrkit, cryptopp, dhcpcd, + docker-containerd, dtv-scan-tables, flare-engine, ghostscript, + haproxy, imagemagick, imx-gpu-viv, jasper, jemalloc, + jpeg-turbo, libcap, libcurl, libglib2, libgpiod, libkrb5, + libopenssl, libplist, libressl, libuv, libuvw, lynx, mariadb, + mbedtls, minidlna, monkey, musl, mutt, ncurses, netsnmp, + nodejs, opencv3, openldap, openrc, opkg-utils, paho-mqtt-c, + php, privoxy, proftpd, python-crc16, python-flask-cors, + python-lxml, python-pip, python-pyparsing, python-pyqt5, qemu, + qt5base, raptor, rauc, ruby, setserial, shadowsocks-libev, + slirp, sqlcipher, ti-sgx-demos, tinycbor, vsftpd, + wireless-regdb, wireshark, x11vnc, xen, xinetd, + xserver_xorg-server + + Issues resolved (http://bugs.uclibc.org): + + #13276: libcap builds libcap.pc incorrectly + #13316: beaglebone_qt5_defconfig: PowerVR fails to start + #13341: Mistake in /etc/init.d/S70vsftpd + +2020.02.8, released November 16th, 2020 + + Important / security related fixes. + + Updated/fixed packages: angularjs, argp-standalone, asterisk, + bandwidthd, bitcoin, busybox, cryptsetup, darkhttpd, davfs2, + docker-cli, docker-containerd, docker-engine, + dovecot-pigeonhole, fastd, fbset, fbtft, freetype, gcc, + ghostscript, gnuradio, grpc, gst1-plugins-bad, jsoncpp, + keepalived, libass, libexif, libiqrf, libpam-tacplus, libraw, + linux-backports, linux-firmware, lzlib, netsnmp, nginx, + oniguruma, opencv3, openntpd, patchelf, php, postgresql, + python-pyqt5, qt5base, rauc, redis, samba4, slirp, systemd, + tcpdump, tmux, tor, webkitgtk, wireguard-linux-compat, + wireshark, wpewebkit, xen, xorriso, zeromq, zxing-cpp + + Issues resolved (http://bugs.uclibc.org): + + #11931: Bugs in support/scripts/apply-patches.sh + +2020.02.7, released October 12th, 2020 + + Important / security related fixes. + + meson: Correct SDK cross-compilation.conf file when + per-package builds were used to build SDK. + + systemd: Use /run rather than /var/run for PID files in units. + + Toolchain: use Secure-PLT rather than BSS-PLT for PowerPC 32. + + support/script/pycompile: Rework logic to ensure .pyc files + contain absolute target paths, fixing code inspection at + runtime when executed with cwd != '/'. + + support/scripts/setlocalversion: Correct Mercurial output to + match behaviour with Git. + + support/scripts/apply-patches.sh: Use patch + --no-backup-if-mismatch, so we no longer blindly have to + remove *.orig files after patching, fixing issues with + packages containing such files. + + Updated/fixed packages: bandwidthd, barebox, bash, bison, + brotli, cifs-utils, cryptsetup, dhcpcd, dhcpdump, docker-cli, + docker-engine, ecryptfs-utils, efl, fail2ban, freetype, gcc, + gdb, ghostscript, gnutls, go, gst1-plugins-base, + gst1-plugins-ugly, ipmitool, libhtp, libraw, libssh, libxml2, + libxml-parser-perl, localedef, lua, memcached, mesa3d, meson, + minidlna, nginx, nodejs, nss-pam-ldapd, openvmtools, php, + postgresql, python, python-aenum, python-autobahn, + python-engineio, python-fire, python-pymodbus, python-scapy, + python-semver, python-sentry-sdk, python-socketio, + python-texttable, python-tinyrpc, python-txtorcon, python3, + qt5base, runc, samba4, strace, supertux, suricata, systemd, + vlc, wayland-protocols, wireguard-linux-compat, wireshark, + xserver_xorg-server, zeromq, zstd + + Issues resolved (http://bugs.uclibc.org): + + #12911: usb_modeswitch installation race condition + #13251: cryptsetup does not work on branch 2020.02 following.. + +2020.02.6, released September 5th, 2020 + + Important / security related fixes. + + Fix a 2020.02.5 build regression in busybox when systemd (and + not less) are enabled because of missing infrastructure. + + Updated/fixed packages: alsa-utils, avahi, busybox, cups, + docker-cli, graphite2, imagemagick, libeXosip2, mbedtls, + nvidia-driver, paho-mqtt-c, python-django, systemd, uclibc, + usb_modeswitch, wolfssl + + Issues resolved (http://bugs.uclibc.org): + + #12911: usb_modeswitch installation race condition + +2020.02.5, released August 29th, 2020 + + Important / security related fixes. + + Infrastructure: Ensure RPATH entries that may be needed for + dlopen() are not dropped by patchelf. + + BR_VERSION_FULL/setlocalversion (used by make print-version + and /etc/os-release): Properly handle local git tags + + Updated/fixed packages: apache, at91bootstrap3, bind, boost, + busybox, capnproto, chrony, collectd, cpio, cryptsetup, cups, + cvs, dbus, docker-engine, domoticz, dovecot, + dovecot-pigeonhole, dropbear, efl, elixir, f2fs-tools, ffmpeg, + gd, gdk-pixbuf, ghostscript, glibc, grub2, gst1-plugins-bad, + hostapd, iputils, jasper, json-c, libcurl, libwebsockets, + linux, live555, mesa3d, mosquitto, mpv, nodejs, opencv, + opencv3, openjpeg, patchelf, perl, php, postgresql, + python-django, python-gunicorn, python-matplotlib, ripgrep, + rtl8188eu, rtl8821au, ruby, shadowsocks-libev, squid, + tpm2-abrmd, tpm2-tools, trousers, uacme, webkitgtk, wireshark, + wolfssl, wpa_supplicant, wpewebkit, xen, xlib_libX11, + xserver_xorg-server + + Issues resolved (http://bugs.uclibc.org): + + #12876: nodejs fails to build when host-icu has been built before + #13111: python-gunicorn: missing dependency on python-setuptools + #13121: wpa_supplicant fails to build without libopenssl enabled + #13141: Target-finalize fail with "depmod: ERROR: Bad version passed" + #13156: package live555 new license + +2020.02.4, released July 26th, 2020 + + Important / security related fixes. + + Toolchain: + - Make external toolchain version check also work for + toolchains configured with --with-gcc-major-version-only + + - Do not handle SOURCE_DATE_EPOCH in toolchain wrapper if the + compiler supports it, fixing an issue with precompiled + headers + + - Ensure debug libs from external toolchains are not installed + into target if debugging is disabled + + Download: + - Correct reproducibility issue in handling of git submodules + for older git versions. + + - Fix file locking over NFS + + fs: Ensure cpio archive element order is reproducible + + Br2-external: Fix error reporting for invalid br2-external trees + + Per-package: + - Fix an issue with python3 sysconfig data not getting + correctly expanded + + - Fix per-package building for packages using the qmake + infrastructure + + Updated/fixed packages: a10disp, asterisk, bind, cdrkit, + checkpolicy, clamav, dbus, docker-cli, docker-engine, + dvb-apps, e2fsprogs, exim, exiv2, freerdp, gnutls, go, grub2, + gssdp, gst1-plugins-good, gst1-plugins-ugly, gupnp, + intel-microcode, iproute2, irrlicht, iwd, jq, kodi, libcamera, + libconfuse, libcurl, libglib2, libhttpserver, libmicrohttpd, + libopenssl, libvncserver, libxml2, libxmlrpc, lxc, mbedtls, + mesa3d, meson, mongodb, mtools, mutt, nghttp2, ngircd, nodejs, + ntp, open-plc-utils, open2300, openjdk-bin, openssh, + oracle-mysql, paho-mqtt-c, pcre, php, poco, prosody, putty, + python-twisted, python-urllib3, python-validators, python3, + qt5xmlpatterns, redis, rpi-firmware, rtl8821au, samba4, sdl2, + sqlite, squid, syslog-ng, systemd, tcpreplay, tinydtls, + upmpdcli, upx, vlc, webkitgtk, wireguard-linux-compat, + wireshark, wpebackend-fdo, wpewebkit, zstd + + Issues resolved (http://bugs.uclibc.org): + + #12941: Python GObject fails to build when using BR2_PER_PACKAGE_.. + #12946: Grub: Decompressor is too big. + #12986: Mtools: Error converting to codepage 850 + #13001: openjdk-bin replaces libfreetype.so from host-freetype + #13011: Incorrect selection of gcc version + #13026: rpi-firmware: must not rename start files + #13031: nodejs: RangeError at new ArrayBuffer() + #13046: Optimize for fast -Ofast is not compliant + +2020.02.3, released June 3rd, 2020 + + Important / security related fixes. + + Fix various build issues of host packages on hosts using GCC + 10. + + Updated/fixed packages: arm-trusted-firmware, audit, bind, + binutils, bison, clamav, crda, dovecot, dtc, efl, elf2flt, + erlang, fakeroot, ffmpeg, fmc, fmlib, freerdp, gcc, git, + glib-networking, gnupg, leveldb, libexif, libssh2, + libusb-compat, linux-headers, lrzip, ltrace, mariadb, mesa3d, + mp4v2, openldap, openocd, perl, php, prosody, + python-pycryptodomex, python-pyqt5, qemu, rpi-firmware, rustc, + speexdsp, sysrepo, systemd, tremor, vboot-utils, wireshark, + xen + + Removed packages: python-pycrypto + + Issues resolved (http://bugs.uclibc.org): + + #12361: Init system (systemd) kills login on Raspberry Pi Zero + #12656: bison fails to relocate with relocate-sdk.sh + #12671: leveldb won't detect that snappy is present (static.. + #12691: host-rust build fails + #12831: RPI-firmware package: DTB-overlay dependency + +2020.02.2, released May 12th, 2020 + + Important / security related fixes. + + Musl: Disallow on PPC64 cores without AltiVec support + (E.G. e5500). + + fs/cpio: Correctly handle booting with 'console=' + + release: Ensure temporary .br2-external.* files are not + included in the release tarball + + Defconfigs: Fix various mistyped config options, or config + options where the dependencies were no longer met. + + Updated/fixed packages: apache, azure-iot-sdk-c, binutils, + boinc, c-ares, cvs, docker-cli, docker-containerd, + docker-engine, domoticz, e2fsprogs, efl, evtest, exim, ffmpeg, + freerdp, gcc, gflags, glibc, gnuconfig, haproxy, imx-gpu-2d, + irrlicht, jpeg kodi-pvr-vuplus, libarchive, libcoap, + libfpm-extra, libglib2, libhtp, libid3tag, libinput, libmad, + libopenssl, libsepol, libssh, libv4l, libvncserver, libwpe, + localedef, mariadb, matchbox, mbedtls, mc, mesa3d-headers, + meson, midori, msgpack, netsnmp, nginx, ogre, openjdk, + openldap, openvpn, p7zip, paho-mqtt-c, php, polkit, python, + python-attrs, python-crossbar, python-dpkt, python-flask, + python-future, python-iptables, python-jedi, python-markdown2, + python3, qemu, qpdf, qt5, samba4, squashfs, squid, strongswan, + suricata, tzdata, util-linux, vlc, wget, webkitgtk, + wireguard-linux-compat, wireshark, wpebackend-fdo, wpewebkit, + zic + + Issues resolved (http://bugs.uclibc.org): + + #11866: initramfs file system fails to boot using Grub on EFI x86_64 + #12271: python-iptables runtime dependencies + #12726: systemctl preset-all failed for ctrl-alt-del.target + #12751: OpenJdk package installation issues on target + #12796: Update OpenSSL to Version 1.1.1g to patch CVE-2020-1967 + #12811: bootstrap stuck and no login prompt + #12841: util-linux/sfdisk 2.35.1 fails on sector-size header + +2020.02.1, released April 10th, 2020 + + Important / security related fixes. + + core: Also fixup /lib references in libtool .la files, similar + to how it is done for /usr/*. + + Various fixes for builds with per-package target/host + directories. + + toolchain: Fix kernel headers validation check for external + toolchains. Fix make 4.3+ compatibility in external toolchain + logic. + + fs/initramfs: fix show-info so it also shows the usual + rootfs-related variables. + + Updated/fixed packages: arm-trusted-firmware, barebox-aux, + bluez5_utils, bubblewrap, busybox, civetweb, cog, collectd, + ffmpeg, gcc, gnutls, gssdp, gvfs, haproxy, hiredis, hostapd, + kmscube, kodi-screensaver-rsxs, libical, libinput, libexif, + libopenssl, libsndfile, linux, linux-tools, llvm, localedef, + mcrypt, mesa3d, meson, monit, nftables, ntp, opencv3, + oprofile, php, pinentry, polkit, pure-ftpd, python-pyyaml, + qt5, quagga, radvd, rcw, redis, rocksdb, samba4, screen, + sdbusplus, swupdate, sysdig, sysklogd, syslinux, syslog-ng, + tor, tslib, uacme, util-linux, vala, vlc, + wireguard-linux-compat, wireguard-tools, wireshark, + wpa_supplicant, xserver_xorg-server + + Issues resolved (http://bugs.uclibc.org): + + #12711: host-localedef 2.30-20 fails to compile on fedora 32 + #12746: "sysdig" package description points to http://sysdig.org, .. + +2020.02, released March 8th, 2020 + + Various fixes. + + br2-external: Fix compatibility with make 4.3+ + + Updated/fixed packages: bash, bcm2835, binutils, cups, + erlang-p1-acme, fbgrab, gr-osmosdr, gst1-plugins-base, + gst1-validate, gstreamer1, guile, jhead, libdrm, libevdev, + libinput, libnss, libsndfile, libvncserver, linux-firmware, + mesa3d, nodejs, openjdk-bin, openvmtools, optee-test, patch, + php, piglit, pppd, python-django, qemu, qt5base, ruby, + ser2net, swupdate, thrift, zziplib + + Removed packages: classpath, jamvm + + Issues resolved (http://bugs.uclibc.org): + + #12606: fbgrab location has changed + +2020.02-rc3, released March 2nd, 2020 + + Fixes all over the tree. + + Infrastructure: Rework file list handling to fix race + conditions when building with per-package target and host + directories and top-level parallel builds. + + Updated/fixed packages: aufs, binutils, blktrace, brltty, + cairo, dnsmasq, docker-compose, elf2flt, exim, exiv2, git, + kodi-inputstream-adaptive, libarchive, libcgroup, libgdiplus, + libssh2, libvncserver, libvorbis, linknx, linux-firmware, lxc, + lz4, mosquitto, openjpeg, openrc, poco, proftpd, pure-ftpd, + python3, python-multidict, python-setuptools-scm-git-archive, + qpdf, qt5tools, rdesktop, rocksdb, shellinabox, squid, + suricata, swig, systemd, taglib, util-linux, wireshark, zsh + + Issues resolved (http://bugs.uclibc.org): + + #12571: ltp-testsuite : Build failure + #12576: 2020.02-RC1: error while loading shared libraries: ... + #12581: 2020.02-rc1 glibc failing to build on fedora 31 + +2020.02-rc2, released February 26th, 2020 + + Fixes all over the tree. + + Toolchain: Ensure strong SSP can only be enabled if the + (external) toolchain supports it. + + Fix a race condition related to creating the output/staging + symlink on systems with coreutils < 8.27. + + Drop support for the (end of life) Qt 5.6 variant. + + Updated/fixed packages: at, armadillo, audiofile, bash, + busybox, erlang, fail2ban, fluidsynth, ipsec-tools, jpeg-turbo, + kvm-unit-tests, libftdi1, libinput, libsvgtiny, libtomcrypt, + libupnpp, libxml2, linux-tools, luv, mbedtls, mesa3d, minicom, + openvmtools, php, qt5, qt5webengine, qwt, radvd, rcw, + sdbusplus, systemd, tpm2-tss, vorbis-tools + + Issues resolved (http://bugs.uclibc.org): + + #12581: 2020.02-rc1 glibc failing to build on fedora 31 + +2020.02-rc1, released February 18th, 2020 + + Fixes all over the tree and new features. + + Add experimental support for building with a per-package + target and host directory. This still has some rough edges, + but brings a number of advantages: + + - Packages will only be able to access the explicitly listed + dependencies and not any other packages that happen to be + built before, ensuring correct dependency information in + Buildroot. + + - Possibility for top-level parallel builds, speeding up + builds on multicore machines. + + Core: Ensure package-file-lists data is correct after + incremental builds as well. + + Architecture: Add support for ARC-HS38 with 64bit multiplier + variant, allow building glibc for big endian ARC, handle 16KB + MMU page size for ARC in toolchain wrapper. + + Toolchain: Add binutils 2.33.1, GCC 7.5.0, Arm 9.2-2019.12 + toolchains, ARC 2019.09 toolchain. Allow using custom kernel + headers newer than what is known by Buildroot. + + pkg-stats: Support for CVE vulnerability reporting by + comparing to NVD database. + + Reproducible builds: The go -trimpath option is now used to + get rid of absolute build paths, __FILE__ and __BASE_FILE__ + defines are now handled in the toolchain wrapper. + + Systemd: Build host variant and use systemctl to automatically + enable unit files rather than manually managing symlinks. + + Util-linux: Ensure that hwclock is built without GPLv3 + code. Notice that builds with hwclock has contained + GPLv3-licensed code since util-linux 2.30 (Buildroot 2017.08+) + + New defconfigs: Beelink GS1, Raspberrypi4 64bit + + New packages: alura, avro-c, bubblewrap, cctz, cereal, + cpuburn-arm, elixir, erlang-base64url, erlang-idna, + erlang-jose, erlang-p1-acme, erlang-p1-mqtree, + erlang-p1-yconf, fluid-soundfont, fluidsynth, gcnano-binaries, + gensio, glslsandbox-player, libargon2, libmodsecurity, + libpam-nfc, libtelnet, lua-codegen, lua-livr, lua-livr-extra, + lua-rotas, lua-silva, mfoc, network-manager-openvpn, + nginx-modsecurity, perl-crypt-openssl-aes, + perl-math-prime-util, pipewire, ptm2human, python-aenum, + python-aiohttp-debugtoolbar, python-aiohttp-mako, + python-aiologstash, python-aiosignal, python-aiozipkin, + python-async-lru, python-avro, python-bunch, python-crontab, + python-dnspython, python-entrypoints, python-esptool, + python-frozenlist, python-future, python-gitdb, python-janus, + python-lockfile, python-logstash, python-nested-dict, + python-pbr, python-pyaes, python-pydantic, python-smmap2, + python-sockjs, python-zc-lockfile, raspi-gpio, rocksdb, + sdbusplus, spidermonkey, thermald, ti-sgx-libgbm, tinyssh, + tio, umtprd, weston-imx, wireguard-linux-compat, + wireguard-tools, xdg-dbus-proxy + + Removed packages: bluez_utils, celt051, erlang-p1-iconv, fis, + gadgetfs-test, libplayer, gstreamer, gst-ffmpeg, + gst-fsl-plugins, gst-omapfb, gst-plugins-bad, + gst-plugins-base, gst-plugins-good, gst-plugins-ugly, + perl-digest-md5, perl-mime-base64, perl-net-ping, + python-scapy3k, wireguard + + Issues resolved (http://bugs.uclibc.org): + + #11906: the new version of mesa3d cannot support etnaviv when.. + #11996: opencv3 SIGILL on Cortex-A5 with VFPv4-D16 + #12121: PyQt5.QtSerialPort and other modules not being built + #12256: package tar is outdated (1.29 is 3 years old + #12286: Can't import gobject in python 3.8 + #12376: python-scapy3k is deprecated + #12386: carriage return issue when "make menuconfig" + #12441: qt5webengine build error: asm/errno.h: No such file or.. + #12446: Buildroot fails to finish installing packages + #12456: qtvirtualkeyboard: No such file or directory + #12461: libglib2 build files with deep directory structure + #12481: minicom fails when output directory path contains "m4" + #12501: libnss-3.49.1: ld error: multiple definition of `gcm_.. + #12526: host-nodejs 12.14.1: configure fail: AttributeError: .. + #12536: Linux-Headers extracting failure + #12546: Ninja 1.10 build Error + +2019.11.3, released April 10th, 2020 + + Important / security related fixes. + + core: Fix compatibility with make 4.3+. Also fixup /lib + references in libtool .la files, similar to how it is done for + /usr/*. + + toolchain: Fix kernel headers validation check for external + toolchains. + + fs/initramfs: fix show-info so it also shows the usual + rootfs-related variables. + + Updated/fixed packages: barebox-aux, bluez5_utils, busybox, + civetweb, cog, collectd, ffmpeg, gcc, gnutls, gssdp, gvfs, haproxy, + hiredis, hostapd, kmscube, libical, libopenssl, libsndfile, + linux-tools, llvm, monit, ntp, php, pure-ftpd, radvd, redis, + samba4, screen, sysdig, syslinux, syslog-ng, tor, uacme, + util-linux, vala, vlc, wpa_supplicant, xserver_xorg-server + + Issues resolved (http://bugs.uclibc.org): + + #12746: "sysdig" package description points to http://sysdig.org, .. + +2019.11.2, released March 16th, 2020 + + Important / security related fixes. + + Core: Ensure package-file-lists data is correct after + incremental builds as well. + + Fix a race condition related to creating the output/staging + symlink on systems with coreutils < 8.27. + + Toolchain: ARC tools bumped to arc-2019.09. + + Br2-external: Fix patch handling when external linux-extension + packages are used. Fix compatibility with make 4.3+ + + Util-linux: Ensure that hwclock is built without GPLv3 + code. Notice that builds with hwclock has contained + GPLv3-licensed code since util-linux 2.30 (Buildroot 2017.08+) + + Updated/fixed packages: armadillo, at, bcm2835, binutils, + blktrace, bluez-alsa, bootstrap, brltty, busybox, cairo, + clamav, cog, cups, czmq, dnsmasq, docker-containerd, dovecot, + dovecot-pigeonhole, e2fsprogs, elf2flt, eudev, exim, exiv2, + fbgrab, gettext-tiny, glibc, go, grep, gst1-validate, guile, + imagemagick, jhead, jpeg-turbo, kvm-unit-tests, lapack, + libarchive, libcgroup, libdrm, libevent, libexif, libftdi1, + libgdiplus, libjpeg, libsigrok, libsndfile, libssh2, + libsvgtiny, libvncserver, libvorbis, libxml2, libxslt, linknx, + lxc, lz4, mariadb, mbedtls, meson, mongoose, mosquitto, musl, + ncurses, nodejs, ntfs-3g, ogre, opencv3, openjdk, openjpeg, + openrc, openswan, openvmtools, optee-test, patch, php, piglet, + postgresql, pppd, proftpd, pure-ftpd, python-django, + python-pyqt5, python-setuptools-scm-git-archive, python3, + qemu, qt5base, qt5tools, qt5virtualkeyboard, qt5webengine, + qwt, rdesktop, ruby, runc, samba4, shellinabox, + skeleton-init-openrc, smartmontools, spdlog, sqlcipher, squid, + suricata, swig, swupdate, sysklogd, taglib, thrift, + ti-cgt-pru, uclibc, util-linux, vorbis-tools, webkitgtk, + wireshark, wpebackend-fdo, wpewebkit, xen, + xserver_xorg-server, zeromq, zsh, zziplib + + Issues resolved (http://bugs.uclibc.org): + + #11996: opencv3 SIGILL on Cortex-A5 with VFPv4-D16 + #12331: meson issue + #12456: qtvirtualkeyboard: No such file or directory + #12461: libglib2 build files with deep directory structure + #12481: minicom fails when output directory path contains "m4" + #12606: fbgrab location has changed + +2019.11.1, released January 12th, 2020 + + Important / security related fixes. + + Infrastructure: kconfig: Fix reconfigure logic, python: Ensure + correct compiler and linker flags are used for compiled code + + utils/scanpypi: Remind users to update DEVELOPERS + + Defconfigs: imx6-sabresd: Fix the Qt5 display names, + imx8: Drop extra copy of U-Boot DTB + + Updated/fixed packages: acsccid, bitcoin, boost, busybox, + cc-tool, cmocka, cpio, cups, dante, dialog, dillo, docker-cli, + docker-containerd, docker-engine, easy-rsa, ebtables, + ecryptfs-utils, efl, ffmpeg, gdb, git, glibc, gnupg2, go, + gpsd, grpc, gst1-plugins-bad, iputils, jasper, + kf5-kcoreaddons, leveldb, libarchive, libfribi, libgit2, + libkrb5, libp11, librsvg, libssh, libtomcrypt, libuio, libv4l, + lirc-tools, log4cplus, lrzip, lvm2, mali-t76x, + matchbox-desktop, mender-grubenv, mmc-utils, mosquitto, + nodejs, ntp, openipmi, opencv3, openpowerlink, openrc, pango, + perl-sys-cpu, pimd, postgresql, pulseaudio, python-brotli, + python-coherence, python-crc16, python-django, python-dpkt, + python-gobject, python-pyasn-modules, python-pypcap, + python-pyqt5, python-subprocess32, python3, qpdf, + qt-webkit-kiosk, qt5virtualkeyboard, qt5webengine, quota, + rabbitmq-c, rauc, rpcbind, rtl8821au, runc, rygel, samba4, + sdl2, setserial, snort, spidev_test, + sunxi-mali-mainline-driver, syslog-ng, sysrepo, tcllib, tftpd, + usbmount, w_scan, wavpack, wsapi, wsapi-fcgi, wsapi-xavante, + x265, xserver_xorg-server, ytree, zip + + Issues resolved (http://bugs.uclibc.org): + + #12121: PyQt5.QtSerialPort and other modules not being built + #12286: Can't import gobject in python 3.8 + +2019.11, released December 1st, 2019 + + Various fixes. + + Infrastructure: Make HOST__DL_OPTS inherit from + _DL_OPTS by default, just like it is done for a number of + other package variables. + + Add _KEEP_PY_FILES to exclude specific python .py files + from the removal done by BR2_PACKAGE_PYTHON{,3}_PYC_ONLY for + the (rare) case where the .py files are needed at runtime + rather than .pyc. + + Updated/fixed packages: am33x-cm3, bind, collectd, go, gob2, + gst1-plugins-bad, haproxy, jasper, jpeg-turbo, libdrm, + libftdi, libftdi1, libnss, libselinux, libstrophe, lzma, + minicom, network-manager, nodejs, oniguruma, opencv3, + openvmtools, perl-gdgraph, perl-gdtextutil, prosody, + python-cchardet, systemd, tiff, wolfssl, + + Issues resolved (http://bugs.uclibc.org): + + #11416: check-uniq-files staging issue + #12146: Oprofile runtime issue + #12166: Compiling nodejs for SAMA5D3 always crash with illegal inst.. + #12171: Python-opencv needs config.py and config-3.7.py to run.. + #12196: duma package + #12211: host-nodejs 10.15.3 package fail to build + #12316: tzdata fails to install with empty "default local time" + #12326: network-manager build fails with missing glib error + #12366: Gstreamer1 gst1-plugins-bad do not compile with RPI-Userland + +2019.11-rc3, released November 24th, 2019 + + Fixes all over the tree. + + Updated/fixed packages: asterisk, clamav, domoticz, faifa, + gerbera, kmod, kvm-unit-tests, libupnp18, linux-serial-test, + lsof, ltp-testsuite, lxc, mesa3d, mesa3d-headers, perl, php, + postgresql, qemu, rauc, redis, rpcbind, spice, spice-protocol, + systemd, tftpd, waylandpp, webkitgtk, zip + +2019.11-rc2, released November 16th, 2019 + + Fixes all over the tree. + + Toolchain: ARC tools bumped to arc-2019.09-rc1, ensure + external toolchain kernel headers version check correctly stop + the build on mismatch + + Meson: Fix generation of global cross-compilation.conf + + Download: Also use the package download method for extra + downloads from the same site, so it does not get confused by + URLs containing '+' + + Defconfigs: Fix boot issue for beaglebone + + Updated/fixed packages: bird, chrony, connman, dhcp, domoticz, + dropwatch, dtc, elf2flt, gettext-tiny, glog, intel-microcode, + ipsec-tools, jailhouse, kodi, libfribi, libmbim, libressl, + libsigrokdecode, libsvgtiny, linux-serial-test, ltp-testsuite, + lvm2, lxc, mariadb, mesa3d, minizip, ndisc6, neardal, ninja, + ofono, openvmtools, oracle-mysql, qt5wayland, safeclib, socat, + sudo, systemd, wpewebkit, xserver_xorg-server + +2019.11-rc1, released November 5th, 2019 + + Fixes all over the tree and new features. + + Dependencies: Gcc/g++ 4.8 or newer is now required on the + build host. + Ensure host has JSON::PP perl module installed if + webkitgtk/wpewebkit packages are enabled as it is needed + during their build process. + + Toolchain: Add support for the D programming language (GCC + 9.x, Glibc). + GCC 9.x updated to 9.2.0, Glibc updated to 2.30, Musl updated + to 1.1.24, uClibc-ng updated to 1.0.32, ARC toolchain updated + to arc-2019.09-eng002. + Musl: Add a patch to add support for + sched_{get,set}scheduler() and sched_{get,set}param() for + compatibility. + Generate check-headers program under BUILD_DIR rather than + /tmp to fix issues with distributions mounting /tmp noexec. + Also copy libssp.so for external toolchains if SSP + to handle toolchains providing SSP support in libssp rather + than in the C library + + New defconfigs: Beaglebone AI, FriendlyARM Nanopi NEO Plus2, + Libre Computer "La Frite", QEMU Armv7-A with trustzone/OP-TEE, + STM32MP157 Discovery Kit + + Arch: RISC-V: Default to a sensible floating point ABI based + on the selected ISA extensions rather than always defaulting + to ILP32/64 + + Graph-size: Package sizes are now shown in human readable form + (Kib/Mib/Gib) rather than always in Kib. Binary (KB/MB/GB) + format can be selected using the --binary option. The cut-off + limit for classifying packages as "other" is now configurable + using the --size-limit option. + + Br2-external: Linux kernel extensions can now also be provided + in an external tree by adding packages under + linux/linux-ext-*.mk. See the manual for details. + + Fakeroot now works correctly under Microsoft Windows 10 + Services for Linux, which does not provide SYSV IPC support + + The check-uniq-files logic which would complain if multiple + packages would touch the same files has been removed as it + causes issues in certain situations (when packages are + rebuilt) and the issue is no longer considered a problem for + toplevel parallel builds as those will use a per-package + staging/target directory. + With this removed, Python is no longer required for a basic + build (only for optional scripts). + + support/scripts/genimage.sh will no longer make a copy of + TARGET_DIR, speeding up post-build/image scripts. + + The runtime test logic now uses Python 3.x. + + A 'v' prefix has been dropped from the _SOURCE variable + for a number of packages to match the version numbers used by + https://release-monitoring.org + + New packages: caps, collectl, dav1d, fstrcmp, ima-evm-utils, + jitterentropy-library, kodi-vfs-rar, kodi-vfs-sftp, libavl, + libhttpserver, libmspack, libnetconf2, libolm, libyang, + linux-serial-test, lrzip, mdevd, minimodem, musl-fts, netifrc, + ogre, openlayers, python-aioredis, python-asgiref, + python-backports-functools-lru-cache, python-bluezero, + python-brotli, python-channels, python-channels-redis, + python-colorlog, python-daphne, python-django-enumfields, + python-jaraco-functools, python-kiwisolver, python-msgfy, + python-rpi-ws281x, python-setuptools-scm-git-archive, + python-simplelogging, python-soupsieve, python-sqliteschema, + python-sqlparse, python-tqdm, python-webencodings, qt5webview, + restclient-cpp, ripgrep, snmpclitools, sunwait, sysrepo, + uacme, utf8proc, uvw, ytree + + Removed packages: alljoyn, alljoyn-base, alljoyn-tcl-base, + devmem2, eventlog, kodi-audiodecoder-opus, + kodi-screensaver-planestate, kodi-visualisation-waveforhue, + python-pysnmp-apps, riscv-pk, ustr + + Issues resolved (http://bugs.uclibc.org): + + #9881: systemd-resolved not setting resolv.conf link + #10171: devmem2 w (word) is 8 bytes in x86 64 systems + #10586: musl gcc has ifunc enabled when musl doesn't support it + #10806: Allow nfs-utils to use ipv6 + #11366: [2018.08] SysV IPC not available for fakeroot on WSL + #11411: check-uniq-files target issue + #11766: Console (getty) issues with systemd + #11781: mariadb build error + #12031: Build of cups-filters fails while linking, apparently due.. + #12116: console prompt does not appear after login + #12141: eudev package is missing "render" and "kvm" groups + #12181: dropbear: norootlogin (-w) no longer works when PAM is enabled + #12186: Raspberry Pi Zero-W build fails on newer kernel versions + #12191: cmake BUILDDIR + #12241: Permission denied while running "make" + #12261: sudo versions prior to 1.8.28 are affected. + #12276: make clean/distclean does not remove BR2_DL_DIR and BR2_HOST_DIR + #12281: Custom configuration fails to build (based on raspberrypi3_.. + +2019.08.3, released December 7th, 2019 + + Important / security related fixes. + + Infrastructure: Make HOST__DL_OPTS inherit from + _DL_OPTS by default, just like it is done for a number of + other package variables + + Add _KEEP_PY_FILES to exclude specific python .py files + from the removal done by BR2_PACKAGE_PYTHON{,3}_PYC_ONLY for + the (rare) case where the .py files are needed at runtime + rather than .pyc. + + Fix -reconfigure handling for packages using the kconfig + infrastructure. + + Toolchain: ensure external toolchain kernel headers version + check correctly stop the build on mismatch + + Deconfigs: beaglebone: fix boot issue + + Updated/fixed packages: am33x-cm3, asterisk, bind, chrony, + clamav, cmocka, collectd, connman, dhcp, dropwatch, faifa, + gettext-tiny, gob2, haproxy, intel-microcode, ipsec-tools, + jailhouse, jasper, jpeg-turbo, kodi, kvm-unit-tests, libftdi, + libftdi1, libnss, libressl, libstrophe, libsvgtiny, lvm2, + lzma, mariadb, minicom, mosquitto, neardal, ninja, nodejs, + oniguruma, openvmtools, oracle-mysql, perl-gdgraph, + perl-gdtextutil, php, postgresql, prosody, python-cchardet, + python-django, qt5wayland, rabbitmq, rauc, redis, rpcbind, + socat, spice, spice-protocol, tftpd, tiff, webkitgtk + + New packages: libmspack + + Issues resolved (http://bugs.uclibc.org): + + #12166: Compiling nodejs for SAMA5D3 always crash with illegal inst.. + #12171: Python-opencv needs config.py and config-3.7.py to run.. + #12211: host-nodejs 10.15.3 package fail to build + #12316: tzdata fails to install with empty "default local time" + +2019.08.2, released November 9th, 2019 + + Important / security related fixes. + + Toolchain: Also copy libssp.so for external toolchains if SSP + to handle toolchains providing SSP support in libssp rather + than in the C library + + Download: Also use the package download method for extra + downloads from the same site, so it does not get confused by + URLs containing '+' + + Fakeroot now works correctly under Microsoft Windows 10 + Services for Linux, which does not provide SYSV IPC support + + utils/test-pkg: ensure to exit with an error upon failure + + Updated/fixed packages: asterisk, azmq, binutils, + cups-filters, domoticz, dtc, duma, elf2flt, eudev, exfat, + exfat-utils, fakeroot, fdk-aac, file, freerdp, gcc, gd, + ghostscript, go, gpsd, grpc, gst1-plugins-base, gvfs, icu, + intel-microcode, kvm-unit-tests, libfribidi, libnspr, libnss, + libopenssl, libpcap, libpciaccess, librsvg, libseccomp, + libsigrok, libtorrent, libunwind, libva, linux-tools, + lua-sdl2, lxc, minizip, mjpegtools, mongoose, mono, nbd, + nfs-utils, php, piglit, python, python-autobahn, + python-pysnmp-apps, python-tornado, python3, qemu, qt5base, + ruby, safeclib, samba4, sdl_mixer, sox, sudo, suricata, + systemd, tcpdump, unscd, util-linux, vdr-plugin-vnsiserver, + vtun, wireshark, xvisor, yaffs2utils + + Issues resolved (http://bugs.uclibc.org): + + #11366: [2018.08] SysV IPC not available for fakeroot on WSL + #12261: sudo versions prior to 1.8.28 are affected + +2019.08.1, released October 3rd, 2019 + + Important / security related fixes. + + Defconfigs: AArch64-efi: Fix grub configuration, Beaglebone: + Use default console settings + + Dependencies: Ensure host has JSON::PP perl module installed + if webkitgtk/wpewebkit packages are enabled as it is needed + during their build process. + + Toolchain: Generate check-headers program under BUILD_DIR + rather than /tmp to fix issues with distributions mounting + /tmp noexec. + + Updated/fixed packages: asterisk, augeas, axel, bind, bwm-ng, + cups, cups-filters, docker-cli, docker-engine, docker-proxy, + e2fsprogs, eudev, exim, expat, gcc, go, haveged, ifplugd, joe, + kf5-extra-cmake-modules, kf5-modemmanager-qt, + kf5-networkmanager-qt, libcamera, libcurl, libgcrypt, + libglib2, libgpg-error, libnspr, libnss, libopenssl, + logrotate, luksmeta, mariadb, mbedtls, mongodb, mosquitto, + ncurses, nfs-utils, nghttp2, nodejs, openvmtools, php, + protobuf, putty, qemu, samba4, snort, swupdate, + systemd-bootchart, thttpd, uclibc, unzip, util-linux, + wireshark + + Issues resolved (http://bugs.uclibc.org): + + #10806: Allow nfs-utils to use ipv6 + #11781: mariadb build error + #12031: Build of cups-filters fails while linking, apparently due.. + #12141: eudev package is missing "render" and "kvm" groups + #12241: Permission denied while running "make" + +2019.08, released September 1st, 2019 + + Various fixes. + + Defconfigs: Removed nanopc t4, nanopi m4 and neo4, pine64 + rockpro64 and raxda rock pi4 as they rely on a ARM32 toolchain + on the build host to build ATF. These defconfigs will be added + back once a package providing such toolchain is + available. Also dropped ts4800 defconfig as it does not build + with GCC >= 8.x. + + Updated/fixed packages: libxcb, php, python-numpy, webkitgtk, + wpewebkit, xfont_font-util + + Issues resolved (http://bugs.uclibc.org): + + #12156: buildroot-2019.08-rc3 does not build for Pi Zero W + +2019.08-rc3, released August 28th, 2019 + + Fixes all over the tree. + + Updated/fixed packages: clamav, dovecot, dovecot-pigeonhole, + gcc, intel-microcode, libmicrohttpd, libmodplug, mpg123, + nginx, openldap, python, qemu, samba4, squid, strace, vlc + + Issues resolved (http://bugs.uclibc.org): + + #11686: fbdev_drv.so: undefined symbol: shadowUpdatePackedWeak,.. + +2019.08-rc2, released August 20th, 2019 + + Fixes all over the tree. + + Compile fixes for a number of defconfigs. + + Updated/fixed packages: apache, autofs, batctl, batman-adv, + bind, collectd, cwiid, dahdi-linux, dahdi-tools, daq, + dehydrated, dhcp, dtc, efl, enlightenment, evtest, giflib, + gnutls, go, gst-plugins-bad, gst-plugins-base, + gst1-plugins-bad, gst1-plugins-base, gst1-rtsp-server, gtkmm3, + gupnp, harfbuzz, imagemagick, lftp, libbsd, libcpprestsdk, + libdnet, libfm, libgit2, libgtk2, libgtk3, libpri, librsvg, + libss7, libssh2, libwpe, lua-cqueues, metacity, micropython, + mpd, mpg123, musl, mpv, openblas, openbox, opencv, pango, + pcmanfm, piglit, pigpio, pinentry, postgresql, qemu, qt5base, + qt5enginio, qt5multimedia, qt5serialbus, quagga, quazip, + rrdtool, rygel, samba4, stellarium, tcpreplay, ti-gfx, vte, + wampcc, wilink-bt-firmware, wireless-regdb, wpebackend-fdo, + xscreensaver + + Removed packages: libamcodec, odroid-mali, odroid-scripts + + Issues resolved (http://bugs.uclibc.org): + + #9481: NetworkManager/Ping unable to resolve domains + #10566: php.mk is missing option --with-pgsql + #10861: Package batman_adv Makefile is missing include header direct.. + #11641: linux kernel .config timestamp always out of date fixed with.. + #11671: russian locale ru_RU:145: LC_TIME: syntax error + #11701: recuuring of usr and in bin shortcuts are created + #11741: pigpio does not build host-pigpio + #11876: automount using host mount/umount + #11881: Build breaks with lftp package enabled and libexpat1-dev inst.. + #11921: dahdi fails to build + #11936: libcpprestsdk should install to staging + #11946: wilink-bt-firmware: moved from github to http://git.ti.com/ti-bt + #11961: libpri build failure + #12086: dhcp shared libraries not installed to target + #12096: tcpreplay: build fails if libdumbnet-dev is installed in the.. + #12106: daq: build fails if libdumbnet-dev is installed in the host + #12126: vc4 has neon as hard dependency + +2019.08-rc1, released August 9th, 2019 + + Fixes all over the tree and new features. + + toolchain: ARC toolchain updated to 2019.03 (binutils 2.32.51 + / GCC 8.3.1 / glibc 2.29), ARM AAarch64/ARM toolchains updated + to 2019.03. Add GCC 9.1.0, remove GCC 4.9 and 6.5, add GDB + 8.3, remove GDB 7.12 and 8.0.1, default to GDB 8.2, GCC + 8.3.0. Musl updated to 1.1.23, bringing support for RISC-V 64. + + Architectures: Internal toolchain support for C-SKY, support + for ARC HS48 v3.1 and HS38 with Quad MAC & FPU, support for + ARM A76, A76/A55 big.LITTLE, emag, neoverse-N1, phecda and + tsv110. + + Filesystems: Pass extra pax options to tar for binary + reproducibility. Build host-cpio for the --reproducible option + support when BR2_REPRODUCIBLE is enabled. Genimage updated to + version 11, bringing GPT support. + + Br2-external: Add support for injecting additional options to + the list of preconfigured external toolchains and libjpeg and + openssl providers using files under provides/. See the manual + for details. + + Ensure custom _OVERRIDE_SRCDIR_RSYNC_EXCLUSIONS are + passed before the standard exclusions so they are not ignored + by rsync when using override-srcdir. + + Gnuconfig updated to 2019-05-28, adding C-SKY support. + + test-pkg: Correct long option handling and clean output dir + after a successful build to save disk space. + + support/testing: Emulate a machine with 256MB RAM to fix + issues with certain tests running out of memory, use + virtio-rng to provide needed entrophy. + + pkg-stats: support outputting in JSON format with --json for + easier post processing. The classic HTML output is still + available with --html. Parallelize access to + release-monitoring.org to speed up runtime. + + Drop non-conventional version prefix/suffix/separators for + packages for better compatibility with release-monitoring.org + + Packages: + Init systems: Add basic openrc support and + _INSTALL_INIT_OPENRC variable in the infrastructure to + install openrc service scripts if enabled. + + busybox: Build each applet as a separate binary when SELinux + is enabled for more finegrained policy control. Use daemon + mode for mdev rather than legacy hotplug. + + linux: Workaround -Werror related build failure on powerpc, + by forcing CONFIG_PPC_DISABLE_WERROR on. + + Defconfigs: QEMU: use 'rootwait' kernel option to ensure root + partition is available before mounting. + + New defconfigs: HiFive Unleashed, I.MX8MM EVK and Pico, Nanopi + m4 and neo4, Nanopc t4, Olimex A33 olinuxino, Pine64 + Rockpro64, PowerPC mac99, QEMU C-SKY 610/807/810/860 virt, + Raspberry Pi 4, Raxda rock pi4, Solidrun Clearfog GT-8K + + Removed defconfigs: Odroid C2 + + New packages: bitcoin, c-capnproto, fatcat, ifmetric, jack1, + jailhouse, libubootenv, luasyslog, mender-grubenv, + murata-cyw-fw, openrc, piglit, python-colorama, python-cycler, + python-hiredis, python-ifaddr, python-inflection, + python-iptables, python-matplotlib, python-periphery, + python-pycairo, python-redis, python-termcolor, + python-tinyrpc, python-txdbus, skeleton-init-openrc, spdlog, + sshguard, stellarium, zziplib + + Removed packages: xapp_mkfontdir + + Issues resolved (http://bugs.uclibc.org): + + #11096: Upgrade from glibc 2.26 to 2.27 broke some locales... + #11271: utils/check-package fails with exception depending on.. + #11991: [numpy] segfault when compiling for RPi3 64bits + #12016: Grub fails to boot bzImage after upgrade to 2019.05 + #12046: Can’t login as root user after upgrading to buildroot.. + #12051: package/dhcp installs libtool wrapper scripts on tar... + #12076: Patchelf can link against an incompatible libc++ ver... + +2019.05.3, Released October 3rd, 2019 + + Important / security related fixes. + + Defconfigs: AArch64-efi: Fix grub configuration, Beaglebone: + Use default console settings + + Dependencies: Ensure host has JSON::PP perl module installed + if webkitgtk/wpewebkit packages are enabled as it is needed + during their build process. + + Toolchain: Generate check-headers program under BUILD_DIR + rather than /tmp to fix issues with distributions mounting + /tmp noexec. + + Updated/fixed packages: asterisk, augeas, bind, bwm-ng, cups, + cups-filters, docker-cli, docker-engine, docker-proxy, + e2fsprogs, eudev, exim, expat, gcc, go, haveged, ifplugd, + iptables, joe, kf5-extra-cmake-modules, kf5-modemmanager-qt, + kf5-networkmanager-qtlibcamera, libcurl, libgcrypt, + libgpg-error, libnftl, libnspr, libnss, libopenssl, + libtorrent-rasterbar, luksmeta, mariadb, mbedtls, mongodb, + mosquitto, ncurses, nfs-utils, nghttp2, nodejs, openvmtools, + php, protobuf, putty, qemu, samba4, swupdate, + systemd-bootchart, thttpd, uclibc, unzip, util-linux, + wireshark + + Issues resolved (http://bugs.uclibc.org): + + #10806: Allow nfs-utils to use ipv6 + #11781: mariadb build error + #12031: Build of cups-filters fails while linking, apparently due.. + #12141: eudev package is missing "render" and "kvm" groups + #12241: Permission denied while running "make" + +2019.05.2, Released September 3rd, 2019 + + Important / security related fixes. + + Filesystems: Pass extra pax options to tar for binary + reproducibility. + + Updated/fixed packages: apache, arm-trusted-firmware, + asterisk, atk, autofs, batctl, batman-adv, berkeleydb, + busybox, bzip2, clamav, cloop, cmake, collectd, connman-gtk, + dahdi-linux, dahdi-tools, daq, dehydrated, dhcp, dovecot, + dovecot-pigeonhole,, elfutils, evtest, exim, expect, giflib, + git, glib-networking, glibc, gnupg2, gnutls, go, + gst1-rtsp-server, gtkperf, gupnp-tools, gvfs, imagemagick, + imx-uuc, intel-microcode, json-glib, lftp, libbsd, libcurl, + libgit2, libgtk2, libgtk3, libmodplug, libnss, libpri, + libshout, libss7, libssh2, libvips, libxcb, linux-headers, + mdadm, mesa3d, metacity, mpg123, mosquitto, musl, nginx, + oniguruma, openblas, opencv3, openjdk, openjdk-bin, openldap, + openvmtools, pcmanfm, php, pigpio, postgresql, prboom, + proftpd, proj, python, python-django, python-idna, + python-numpy, python-urllib3, python3, qemu, qt5, qt5base, + qt5enginio, quagga, rygel, squid, subversion, tcpreplay, + unzip, vlc, vte, webkitgtk, wireless-regdb, xen, + xfont_font-util, xlib_libICE, xlib_libXfont, xlib_libXfont2, + yad, zeromq + + Issues resolved (http://bugs.uclibc.org): + + #11741: pigpio does not build host-pigpio + #11876: automount using host mount/umount + #11881: Build breaks with lftp package enabled and libexpat1-dev inst.. + #11921: dahdi fails to build + #11961: libpri build failure + #12086: (dhcpd-missing-libs) - dhcp shared libraries not installed to.. + #12096: tcpreplay: build fails if libdumbnet-dev is installed in the.. + #12106: daq: build fails if libdumbnet-dev is installed in the host + #12126: vc4 has neon as hard dependency + +2019.05.1, Released July 7th, 2019 + + Important / security related fixes. + + arch: x86: Fix typo breaking 'core-avx2' variant + + linux: Workaround -Werror related build failure on powerpc, + by forcing CONFIG_PPC_DISABLE_WERROR on. + + support/testing: Emulate a machine with 256MB RAM to fix + issues with certain tests running out of memory. + + test-pkg: Correct long option handling and clean output dir + after a successful build to save disk space. + + Defconfigs: QEMU: use 'rootwait' kernel option to ensure root + partition is available before mounting. + + Updated/fixed packages: barebox, busybox, bzip2, davfs2, + dialog, docker-cli, docker-engine, exim, expat, faad2, + haveged, irssi, libcamera, libcdaudio, libcurl, libglib2, + libressl, libsecret, lmbench, meson, monit, php, postgresql, + psplash, python-django, qt5base, tvheadend, webkitgtk, + xserver_xorg-server, znc + +2019.05, released June 2nd, 2019 + + Various fixes. + + Toolchain: Ensure pre-built Andes toolchains can only be + selected when x86 32bit support is available on the host. + Disallow PowerPC SPE ABI for GCC >= 8.x, as it is no longer + supported. + + Infra: pkg-config: Use a dedicated timestamp file rather than + .config as that gets touched by linux-4.19+, causing repeated + builds. + + Add C-SKY support to our config.sub (gnuconfig) + + Updated/fixed packages: dosfstools, botan, brotli, dropbear, + flare-engine, gst1-plugins-bad, libhtp, libnss, libopenssl, + linuxptp, matchbox-panel, mender, mutt, netsurf, + network-manager, opencv3, openjdk, openmpi, php, + python-cython, qt5multimedia, qtwayland, qt5webkit-examples, + supertux, suricata, tpm2-totp, v4l2loopback, wireshark, + wpewebkit + +2019.05-rc3, released May 25th, 2019 + + Fixes all over the tree. + + check-bin-arch: Ignore /usr/lib/grub, similar to how /lib/grub + is ignored. + + check-package: Warn about utf-8 characters in .mk files + + Linux: Default to 5.1.x series + + Updated/fixed packages: assimp, atop, chocolate-doom, cjson, + ddrescue, dhcp, ffmpeg, gerbera, glibmm, gpsd, gst-ffmpeg, + intel-microcode, jasper, keepalived, kismet, libcpprestsdk, + libcurl, libssh2, libupnp18, luarocks, mono-gtksharp3, opus, + postgresql, pcsc-lite, python, tslib, webkitgtk, + wpebackend-fdo, wpewebkit + +2019.05-rc2, released May 15th, 2019 + + Fixes all over the tree. + + Updated/fixed packages: bind, bullet, ca-certificates, + collectd, cracklib, dhcp, gdb, libinput, libtorrent-rasterbar, + linknx, lynx, mono, netsurf, optee-os, postgresql, qt5enginio, + qt5multimedia, rpm, samba4, sqlite, strace, uclibc, woff2 + + Issues resolved (http://bugs.uclibc.org): + + #11841: grub-efi.cfg not used when building EFI disk image + +2019.05-rc1, Released May 8th, 2019 + + Fixes all over the tree and new features. + + Architecture: Andes 32-bit (nds32) support added. + + Only build host-lzip / host-xz when really needed by packages, + not just when not available on the build host. + + Toolchain: Glibc bumped to 2.29, musl bumped to 1.1.22, + binutils 2.32 added, 2.28/2.29 removed, default changed to + 2.31.1. + + fs: Set FAKEROOTDONTTRYCHOWN environment variable to not + forward {f,l,}chown calls to libc when running under fakeroot + to fix issues when building in restricted environments + (E.G. user namespace with bubblewrap). + + Linux: Also build default make target to ensure extra files + like the gdb scripts enabled by CONFIG_GDB_SCRIPTS are also + built. Notice: This may mean that extra host utilities like + uboot-mkimage are needed. + + Infrastructure: show-info and -show-info make targets + added to output package metadata in JSON format for external + use. + + pkg-generic: Only tweak .la files needing it to ensure they + are not included in subsequent package file lists. + + test-pkg: Generate a basic package config if none is + specified. + + Gettext-tiny package added as an lightweight replacement for + GNU gettext for situations where NLS support is not needed. + + New defconfigs: Andes AE3XX, Freescale imx8mpico / imx8qxpmek + / T2080 QDS RDB, Licheepi zero, Orangepi R1 + + Removed defconfigs: Olimx A20 Olinuxino Lime legacy + + New packages: bats-core, bayer2rgb-neon, brickd, cog, dacapo, + enet, gettext-tiny, gli, gst1-plugins-bayer2rgb-neon, + imx-sc-firmware, intel-mediadriver, intel-mediasdk, libcamera, + libhtp, libp11, libwpe, lua-binaryheap, lua-gd, lua-lunitx, + mender-artifact, most, oniguruma, openjdk, openjdk-bin, + opensbi, optee-benchmark, optee-client, optee-examples, + optee-os, optee-test, paho-mqtt-cpp, python-aioblescan, + python-aioconsole, python-aiohttp-cors, python-aiomonitor, + python-backcall, python-jedi, python-parso, python-pyjwt, + python-terminaltables, suricata, tpm2-totp, uftp, + wpebackend-fdo, wpewebkit + + Removed packages: libump, lunit, sunxi-mali + + Issues resolved (http://bugs.uclibc.org): + + #11716: Typo on website, saying latest release is 2018.2.11 + #11756: package/syslinux: MBR's don't fit because of binutils.. + #11761: Building custom kernel 5.1-rc3 or later breaks on objtool + #11816: Only selected coreutils binaries are installed + +2019.02.11, released April 9th, 2020 + + Important / security related fixes. + + core: Fix compatibility with make 4.3+. Also fixup /lib + references in libtool .la files, similar to how it is done for + /usr/*. + + toolchain: Fix kernel headers validation check for external + toolchains. + + Updated/fixed packages: barebox-aux, bluez5_utils, busybox, + civetweb, collectd, ffmpeg, gcc, gnutls, gvfs, haproxy, + hiredis, kmscube, libical, libopenssl, libsndfile, + linux-tools, ntp, php, pure-ftpd, screen, sysdig, tor, + util-linux, vala, vlc, xserver_xorg-server + + Issues resolved (http://bugs.uclibc.org): + + #12746: "sysdig" package description points to http://sysdig.org, .. + +2019.02.10, released March 16th, 2020 + + Important / security related fixes. + + Core: Ensure package-file-lists data is correct after + incremental builds as well. + + Fix a race condition related to creating the output/staging + symlink on systems with coreutils < 8.27. + + Br2-external: Fix compatibility with make 4.3+ + + Util-linux: Ensure that hwclock is built without GPLv3 + code. Notice that builds with hwclock has contained + GPLv3-licensed code since util-linux 2.30 (Buildroot 2017.08+) + + Updated/fixed packages: armadillo, at, binutils, blktrace, + bootstrap, busybox, cairo, cups, czmq, dnsmasq, + docker-containerd, dovecot, dovecot-pigeonhole, e2fsprogs, + eudev, exim, exiv2, fbgrab, grep, gst1-validate, guile, + imagemagick, jhead, kvm-unit-tests, lapack, libcgroup, + libftdi1, libjpeg, libsigrok, libsndfile, libssh2, libsvgtiny, + libvncserver, libvorbis, libxml2, libxslt, linux, lz4, + mariadb, mbedtls, meson, mfgtools, mongoose, ncurses, ntfs-3g, + opencv3, openjpeg, openswan, openvmtools, patch, php, + postgresql, pppd, proftpd, pure-ftpd, python-django, + python-pyqt5, python3, qemu, qt5base, qt5webengine, qwt, + rdesktop, ruby, runc, samba4, shellinabox, smartmontools, + sqlcipher, squid, swupdate, sysklogd, taglib, thrift, + ti-cgt-pru, uboot, util-linux, vorbis-tools, webkitgtk, + wireshark, xen, xserver_xorg-server, zeromq, zsh + + Issues resolved (http://bugs.uclibc.org): + + #11996: opencv3 SIGILL on Cortex-A5 with VFPv4-D16 + #12331: meson issue + #12461: libglib2 build files with deep directory structure + #12606: fbgrab location has changed + +2019.02.9, released January 12th, 2020 + + Important / security related fixes. + + pkg-python infrastructure: Ensure correct compiler and linker + flags are used for compiled code + + utils/scanpypi: Remind users to update DEVELOPERS + + Updated/fixed packages: busybox, cc-tool, cpio, cups, dante, + dillo, docker-cli, docker-containerd, docker-engine, easy-rsa, + ecryptfs-utils, efl, git, glibc, gnupg2, gst1-plugins-bad, + kf5-kcoreaddons, libarchive, libgit2, libkrb5, librsvg, + libssh, libtomcrypt, libuio, lirc-tools, lvm2, + matchbox-desktop, nodejs, ntp, opencv3, openpowerlink, + python-django, python-ecdsa, python-pyasn-modules, + python-pyqt5, python-subprocess32, python3, qpdf, runc, rygel, + samba4, sdl2, wavpack, xserver_xorg-server, zip + + Issues resolved (http://bugs.uclibc.org): + + #12121: PyQt5.QtSerialPort and other modules not being built + +2019.02.8, released December 7th, 2019 + + Important / security related fixes. + + Infrastructure: Make HOST__DL_OPTS inherit from + _DL_OPTS by default, just like it is done for a number of + other package variables + + Add _KEEP_PY_FILES to exclude specific python .py files + from the removal done by BR2_PACKAGE_PYTHON{,3}_PYC_ONLY for + the (rare) case where the .py files are needed at runtime + rather than .pyc. + + Fix -reconfigure handling for packages using the kconfig + infrastructure. + + Toolchain: ensure external toolchain kernel headers version + check correctly stop the build on mismatch + + Deconfigs: beaglebone: fix boot issue + + Updated/fixed packages: am33x-cm3, asterisk, bind, chrony, + clamav, collectd, connman, faifa, gob2, haproxy, + intel-microcode, ipsec-tools, jasper, jpeg-turbo, kodi, + kvm-unit-tests, libftdi, libftdi1, libnss, libstrophe, + libsvgtiny, lvm2, lzma, mariadb, minicom, neardal, nodejs, + opencv3, openvmtools, oracle-mysql, perl-gdgraph, + perl-gdtextutil, php, postgresql, prosody, python-django, + rabbitmq-c, rauc, redis, rpcbind, socat, spice, + spice-protocol, tftpd, tiff, webkitgtk + + New packages: libmspack + + Issues resolved (http://bugs.uclibc.org): + + #12166: Compiling nodejs for SAMA5D3 always crash with illegal inst.. + #12171: Python-opencv needs config.py and config-3.7.py to run.. + #12211: host-nodejs 10.15.3 package fail to build + #12316: tzdata fails to install with empty "default local time" + +2019.02.7, Released November 10th, 2019 + + Important / security related fixes. + + support/testing: use a kernel with HW_RANDOM_VIRTIO to work + around issues with lack of entrophy + + Toolchain: Also copy libssp.so for external toolchains if SSP + is enabled to handle toolchains providing SSP support in + libssp rather than in the C library + + Download: Also use the package download method for extra + downloads from the same site, so it does not get confused by + URLs containing '+' + + Fakeroot now works correctly under Microsoft Windows 10 + Services for Linux, which does not provide SYSV IPC support + + utils/test-pkg: ensure to exit with an error upon failure + + Updated/fixed packages: asterisk, azmq, cups-filters, + domoticz, duma, elf2flt, eudev, exfat, exfat-utils, fakeroot, + file, freerdp, gd, ghostscript, go, gvfs, intel-microcode, + kvm-unit-tests, libarchive, libnspr, libnss, libopenssl, + libpcap, libpciaccess, librsvg, libseccomp, libsigrok, + libtorrent, libunwind, linux-tools, lua-sdl2, lxc, minizip, + mjpegtools, mongoose, php, python, python-pysnmp-apps, + python3, qemu, qt5base, ruby, safeclib, samba4, sdl_mixer, + sox, sudo, systemd, tcpdump, unscd, util-lkinux, vtun, xvisor, + yaffs2utils + + Issues resolved (http://bugs.uclibc.org): + + #11366: [2018.08] SysV IPC not available for fakeroot on WSL + #12261: sudo versions prior to 1.8.28 are affected + +2019.02.6, Released October 3rd, 2019 + + Important / security related fixes. + + Defconfigs: AArch64-efi: Fix grub configuration, Beaglebone: + Use default console settings + + Dependencies: Ensure host has JSON::PP perl module installed + if webkitgtk/wpewebkit packages are enabled as it is needed + during their build process. + + Toolchain: Generate check-headers program under BUILD_DIR + rather than /tmp to fix issues with distributions mounting + /tmp noexec. + + Updated/fixed packages: asterisk, augeas, bind, bwm-ng, cups, + cups-filters, docker-cli, docker-engine, docker-proxy, + dropbear, e2fsprogs, eudev, exim, expat, gcc, go, ifplugd, + haveged, iptables, joe, kf5-extra-cmake-modules, + kf5-modemmanager-qt, kf5-networkmanager-qt, libcurl, + libgcrypt, libgpg-error, libnftl, libnspr, libnss, libopenssl, + luksmeta, mariadb, mbedtls, mongodb, mosquitto, ncurses, + nfs-utils, nghttp2, nodejs, openvmtools, php, protobuf, putty, + qemu, qt5base, samba4, swupdate, systemd-bootchart, thttpd, + uclibc, unzip, util-linux, wireshark + + Issues resolved (http://bugs.uclibc.org): + + #10806: Allow nfs-utils to use ipv6 + #11781: mariadb build error + #12031: Build of cups-filters fails while linking, apparently due.. + #12141: eudev package is missing "render" and "kvm" groups + #12181: dropbear: norootlogin (-w) no longer works when PAM is enabled + #12241: Permission denied while running "make" + +2019.02.5, Released September 2nd, 2019 + + Important / security related fixes. + + Filesystems: Pass extra pax options to tar for binary + reproducibility. + + Updated/fixed packages: apache, arm-trusted-firmware, + asterisk, atk, autofs, batctl, batman-adv, berkeleydb, brotli, + busybox, bzip2, clamav, cloop, cmake, collectd, connman-gtk, + cryptopp, dahdi-linux, dahdi-tools, daq, dehydrated, dovecot, + dovecot-pigeonhole,, elfutils, evtest, exim, expect, giflib, + git, glib-networking, glibc, gnupg2, gnutls, go, + gst1-rtsp-server, gtkperf, gupnp-tools, gvfs, imagemagick, + imx-uuc, intel-microcode, json-glib, lftp, libbsd, libcurl, + libgit2, libgtk3, libmodplug, libnss, libpri, libshout, + libss7, libssh2, libvips, libxcb, linux-headers, mdadm, + mesa3d, metacity, mpg123, mosquitto, musl, nginx, openblas, + opencv3, openldap, openvmtools, pcmanfm, php, pigpio, + postgresql, prboom, proftpd, proj, python, python-django, + python-idna, python-numpy, python-urllib3, python3, qemu, qt5, + qt5base, qt5enginio, quagga, rygel, squid, subversion, + tcpreplay, unzip, vlc, vte, webkitgtk, weston, wireless-regdb, + xen, xfont_font-util, xlib_libICE, xlib_libXfont, + xlib_libXfont2, yad, zeromq + + Issues resolved (http://bugs.uclibc.org): + + #11741: pigpio does not build host-pigpio + #11876: automount using host mount/umount + #11881: Build breaks with lftp package enabled and libexpat1-dev inst.. + #11921: dahdi fails to build + #11961: libpri build failure + #12096: tcpreplay: build fails if libdumbnet-dev is installed in the.. + #12106: daq: build fails if libdumbnet-dev is installed in the host + #12126: vc4 has neon as hard dependency + +2019.02.4, Released July 10th, 2019 + + Important / security related fixes. + + arch: x86: Fix typo breaking 'core-avx2' variant, add Westmere + variant. + + linux: Workaround -Werror related build failure on powerpc, + by forcing CONFIG_PPC_DISABLE_WERROR on. + + support/testing: Emulate a machine with 256MB RAM to fix + issues with certain tests running out of memory. + + test-pkg: Correct long option handling and clean output dir + after a successful build to save disk space. + + Ensure custom _OVERRIDE_SRCDIR_RSYNC_EXCLUSIONS are + passed before the standard exclusions so they are not ignored + by rsync when using override-srcdir. + + Defconfigs: QEMU: use 'rootwait' kernel option to ensure root + partition is available before mounting. + + Updated/fixed packages: barebox, bzip2, davfs2, dbus, dialog, + docker-cli, docker-engine, expat, faad2, ffmpeg, freeswitch, + gerbera, haveged, irssi, libcdadio, libgit2, libglib2, + libsecret, libvncserver, lmbench, logrotate, mariadb, meson, + mongoose, monit, mpd, openblas, php, postgresql, psplash, + python, python-django, python3, qt5base, samba4, taglib, + tvheadend, vlc, webkitgtk, xserver_xorg-server, znc + +2019.02.3, Released June 7th, 2019 + + Important / security related fixes. + + Infra: pkg-config: Use a dedicated timestamp file rather than + .config as that gets touched by linux-4.19+, causing repeated + builds. + + check-bin-arch: Also ignore /usr/lib/grub to support merged + /usr setups, similar to how /lib/grub is ignored. + + gnuconfig/config.sub: Add C-SKY architecture support. + + Updated/fixed packages: assimp, atftp, atop, botan, busybox, + ca-certificates, chocolate-doom, cjson, coreutils, cracklib, + ddrescue, dhcp, docker-cli, docker-containerd, docker-engine, + dosfstools, dovecot, dovecot-pigeonhole, dropbear, exim, + ffmpeg, flare-engine, gcc, gdb, gerbera, glibmm, go, gpsd, + gst-ffmpeg, gst1-plugins-bad, gst1-plugins-base, imagemagick, + intel-microcode, jasper, kf5-kcoreaddons, kismet, libcurl, + libglib2, libnss, libopenssl, libsigrok, libssh2, libupnp18, + linuxptp, luajit, lynx, matchbox-panel, mender, + netcat-openbsd, netsurf, nfs-utils, opus, orc, owfs, + pcsc-lite, php, popt, postgresql, python, python-cython, + python-django, python-ply, qt5enginio, rpm, runc, samba4, + sqlite, subversion, supertux, systemd, tslib, uclibc, + v4l2loopback, webkitgtk, woff2 + + Issues resolved (http://bugs.uclibc.org): + + #11816: Only selected coreutils binaries are installed + #11841: grub-efi.cfg not used when building EFI disk image + #11911: systemd v240 memory leak in systemd-journald + +2019.02.2, Released April 29th, 2019 + + Important / security related fixes. + + Only build host-lzip / host-xz when really needed by packages, + not just when not available on the build host. + + fs: Set FAKEROOTDONTTRYCHOWN environment variable to not + forward {f,l,}chown calls to libc when running under fakeroot + to fix issues when building in restricted environments + (E.G. user namespace with bubblewrap). + + Linux: Also build default make target to ensure extra files + like the gdb scripts enabled by CONFIG_GDB_SCRIPTS are also + built. Notice: This may mean that extra host utilities like + uboot-mkimage are needed. + + Defconfigs: ASUS tinker and Amarula vyasa rk3822: Support + larger kernel images, Atmel SAM5D27, SAM5D2,3,4 xplained: + Increase rootfs size to fit utilities, Raspberry Pi 64bit: + Include overlays in sdcard image + + Updated/fixed packages: android-tools, apache, bind, binutils, + busybox, civetweb, cjson, copas, davfs2, docker-cli, + docker-containerd, docker-engine, dovecot, dovecot-pigeonhole, + freerdp, gerbera, ghostscript, git, gnutls, go, gst-omx, + gst1-plugins-base, gst1-plugins-ugly, haproxy, hostapd, + ipsec-tools, libfreefare, libfuse, libkrb5, libpng, libxml2, + libxslt, linknx, linux, linux-firmware, linux-tools, live555, + lldp, lrzsz, lynx, madplay, make, minicom, mongodb, msmtp, + musl, mutt, neon, netsnmp, numactl, opus, perl, php, + postgresql, pure-ftpd, python-urllib3, python3, qt5base, + rapidxml, rpm, rsyslog, ruby, runc, samba4, sane-backends, + softether, stunnel, sysklogd, syslinux, syslog-ng, + systemd-bootchart, thttpd, thrift, tiff, tor, tpm2-tools, + tpm2-tss, webkitgtk, yaffs2utils, wget, wpa_supplicant, wsapi, + xapp_xfd, xapp_xload, xlib_libXpm, xserver_xorg-server, xz, + znc + + Issues resolved (http://bugs.uclibc.org): + + #11756: package/syslinux: MBR's don't fit because of binutils.. + #11761: Building custom kernel 5.1-rc3 or later breaks on objtool + +2019.02.1, Released March 29th, 2019 + + Important / security related fixes. + + pkg-generic: Only tweak .la files needing it to ensure they + are not included in subsequent package file lists. + + test-pkg: Generate a basic package config if none is + specified. + + Updated/fixed packages: asterisk, avahi, bash, beecrypt, + binutils, busybox, clamav, cups, efl, eigen, fetchmail, file, + flashrom, fltk, gerbera, git, glibc, gnuradio, go, + gst-plugins-bad, intel-gmmlib, jq, kexec, kf5-modemmanager-qt, + leveldb, libcurl, libdrm, libftdi1, libglib2, libiio, libpcap, + libseccomp, libssh2, log4cplus, lvm2, mariadb, mender, + mongodb, mosquitto, musl, nodejs, ntp, openjpeg, owfs, php, + pure-ftpd, putty, python-aiojobs, qt5webkit, rdesktop, samba4, + sunxi-tools, supertux, swupdate, tpm2-abrmd, tpm2-tss, + wavemon, wireshark, vsftpd, xapp_xdm, xen, + xdriver_xf86-video-fbdev, xlib_libXdmcp + + Issues resolved (http://bugs.uclibc.org): + + #11716: Typo on website, saying latest release is 2018.2.11 + +2019.02, released March 4th, 2019 + + Minor fixes. + + Libressl support added for Qt 5.6 as a replacement for + openssl, as 5.6 is not compatible with openssl 1.1.x. + + Updated/fixed packages: cutelyst, devmem2, gqrx, + gst-plugins-bad, libraw, libsoxr, qt5base, runc, systemd, tor + +2019.02-rc3, released March 1st, 2019 + + Fixes all over the tree. + + Openssl support dropped from Qt 5.6, as it isn't compatible + with openssl 1.1.x. + + Toolchain: GCC 8.x updated to 8.3.0, fixing a number of + issues. + + Dependencies: Require CMake 3.8 or newer to fix compilation + issue with certain packages. If not available, host-cmake will + instead be built. + + Printvars: Fix performance regression since 2018.02 + + Scanypi: Correctly handle underscores in python package names. + + Updated/fixed packages: botan, clamav, cryptopp, i2pd, + ibrcommon, iproute2, libcpprestsdk, libssh, lua-curl, + luaexpat, qt5base, runc, stress-ng, syslinux, systemd, + upmpdcli, zbar + + Issues resolved (http://bugs.uclibc.org): + + #9966: util-linux-2.30/.stamp_built' failed + #11696: possible typo in board/pc/post-build.sh + +2019.02-rc2, released February 23th, 2019 + + Fixes all over the tree. + + Removed zynq_zybo defconfig, as it hasn't seen any update + since it was added in 2016, and uses a U-Boot version not + compatible with openssl-1.1.x. + + Linux: Ignore user supplied downloadable hashes, as no hash + checksums are available for those. + + Updated/fixed packages: bind, cryptopp, docker-containerd, + dtc, efivar, gdb, imagemagick, ipmiutil, libcpprestsdk, + libcurl, libgpiod, libid3tag, libv4l, log4cplus, luvi, + madplay, mender, mosquitto, poco, postgresql, proftpd, + pulseaudio, python-django, qemu, qt5base, qwt, rabbitmq-c, + reaver, safeclip, stress-ng, swupdate, syslog-ng, systemd, + tor, unzip, xenomai + + Issues resolved (http://bugs.uclibc.org): + + #11501: compile sdl2 with enable wayland + #11681: .. unable to initialize decompress status for section.. + +2019.02-rc1, released February 13th, 2019 + + Fixes all over the tree and new features. + + + Dependencies: + + Require Python >= 2.7 as it is needed for E.G. building + libglib2. + + Ensure GNU gzip is used for reproducible tarballs (instead of + pigz) + + + Infrastucture: + + Ensure the PLATFORM and OS environment variables are not set, + as they cause build issues for some packages. + + The package list infrastructure now correctly handles packages + installing files with old mtime. + + Add a config option to force all optional host utilities to be + built, even if suitable versions are available on the build + machine. + + graph-build-time: Also show time spent downloading + + Download: fixes for SSH/SCP support + + Ensure user provided permissions override permissions from + packages. + + SDK: Fix handling of relative symlinks (targets starting with + '.' or '..') + + BR2_SYSTEM_DEFAULT_PATH setting to customize the default path + for processes. + + The custom skeleton logic will now populate the needed /bin, + /lib, /sbin directories/symlinks if not present. Merged /usr + can now be used with a custom skeleton. + + Rootfs overlays can now override symbolic links from + packages. This was disabled to ensure the correct symbolic + links are present when merged /usr is used. Instead validate + that the rootfs overlays do not include invalid /bin, /sbin + and /lib entries. + + The waf infrastructure now support the _SUBDIR variable, + similar to the other package types. + + cmake: Also set CMAKE_SYSTEM_VERSION in toolchainfile.cmake + + Various improvements to the meson infrastructure. + + Luarocks: A Buildroot addon has been added to automate + creating a Buildroot package from luarocks, similar to + scancpan and scanpypi. + + scanpypi: protect against zip-slip vulnerability in zip/tar + handling + + check-package: fix Python 3 support + + get-developers: Fix behaviour when called from elsewhere than + the toplevel directory. + + pkg-stats: Show latest upstream version of each package, based + on data from release-monitoring.org + + kconfig: Fix for make linux-menuconfig / uboot-menuconfig from + a clean tree when ccache is enabled. + + Default to sha256 password encoding, drop md5 support. + + + Architecture: + + Support for RISC-V 32bit architecture, ARM A55, 75 and Saphira + variants, MIPS support for mips32r3, mips64r3 and Marvell + Octeon II/III variants. + + + Toolchain: + + ARC toolchain 2018.09, ARM 8.2-2018.11, Codescape IMG/MTI MIPS + 2018.09-02, MUSL 1.1.21, GCC 6.5.0 / 7.4.0, GDB 8.2.1 + + + Packages: + + openssl: Bump to 1.1.1x series, bringing TLSv1.3 support and + long term support. + + fftw: Split into fftw-{single,double,long-double,quad} + packages for the different data precision options. + + libcurl: Now has explicit TLS backend selection options. + + linux: Support building device tree blobs with the -@ option + for device tree overlays. + + weston: The weston-imx i.MX variant is now used when + imx-gpu-viv is enabled + + pkgconf: Update to 1.5.3, which brings support for + --define-prefix (used by GStreamer) + + Add host-python3-setuptools package to handle host python + packages needing python3 with setuptools support. + + + New defconfigs: Aarch64 EFI, Orangepi one plus, Orangepi lite + 2, QEMU RISC-V 32bit virt, Rock64 + + + New packages: brcm-patchram-plus, clinfo, cunit, docker-cli, + erlang-p1-eimp, exempi, fail2ban, fftw-double, + fftw-double-long, fftw-quad, fftw-single, gerbera, grpc, + gst1-shark, intel-gmmlib, iwd, kf5-kcoreaddons, libeastl, + libpackagekite, libtorrent-rasterbar, lua-std-debug, + lua-std-normalize, mini-snmpd, netsurf, pamtester, pcm-tools, + python-aiodns, python-aiohttp, python-aiohttp-jinja2, + python-aiohttp-remotes, python-aiohttp-security, + python-aiohttp-session, python-aiohttpd-sse, python-aiojobs, + python-cchardet, python-pycares, python-sentry-sdk, + python-wtforms, python3-setuptools, rcw, rtc-tools, shim, + utp_com, vmtouch, websocketpp + + Removed packages: fftw, lua 5.2.x, luacrypto, perl-time-hires, + python-pyqt, qt, qtuio, tn5250 + + Issues resolved (http://bugs.uclibc.org): + + #10851: Patch to handle numpad Enter key properly + #11066: x11r7 X11 S40xorg leads to a black screen on QEMU x86.. + #11126: Bash Shell Programming using Buildroot + #11426: pps-tools bash dependency + #11476: stdio2.h error invalid use of __builtin_va_arg_pack + #11536: dt-utils building fails with glibc 2.28 + #11546: open-vm-tools with glibc 2.28 + #11566: Fix init script + #11576: Unable to start apache with event MPM on raspberry pi 3 + #11591: [pkgconf 1.5.3] xserver OpenGL support is missing + #11606: libjpeg has no Config.in + #11616: 2018.02.09 fails to build libzlib with full RELRO.. + #11656: Custom device tree and u-boot boot.scr not integrated.. + #11666: Touchscreen with (Py)Qt5 should use tslib instead of evdev + +2018.11.4, Released March 28th, 2019 + + Important / security related fixes. + + Updated/fixed packages: avahi, beecrypt, binutils, botan, + busybox, clamav, cups, devmem2, efl, fetchmail, file, fltk, + gcc, gdb, git, go, gst-plugins-bad, iproute2, jq, + kf5-modemmanager-qt, leveldb, libopenssl, libraw, libseccomp, + libsoxr, libssh2, mariadb, mosquitto, nodejs, ntp, openjpeg, + perl, php, putty, qt5webkit, rdesktop, runc, samba4, swupdate, + systemd, tor, vsftpd, wireshark, xapp_xdm, xen, xlib_libXdmcp + +2018.11.3, Released February 23th, 2019 + + Important / security related fixes. + + Ensure the PLATFORM and OS environment variables are not set, + as they cause build issues for some packages. + + The package list infrastructure now correctly handles packages + installing files with old mtime. + + Linux: Skip hash checks for user supplied downloadable + patches, as no hash checksums are available for those. + + scanpypi: protect against zip-slip vulnerability in zip/tar + handling + + Download: fixes for SSH/SCP support + + SDK: Fix handling of relative symlinks (targets starting with + '.' or '..') + + Updated/fixed packages: bind, dhcpcd, docker-compose, + docker-containerd, docker-engine, dovecot, dovecot-pigeonhole, + dtc, efivar, ghostscript, gnuradio, imagemagick, jpeg-turbo, + libarchive, libb64, libcurl, libgeotiff, libgpiod, libid3tag, + libupnp18, log4cplus, madplay, meson, mosquitto, openssh, php, + poco, postgresql, proftpd, pulseaudio, python, python-django, + python3, qt5base, reaver, runc, sg3_utils, sqlcipher, + swupdate, systemd, unzip, webkitgtk, xenomai + +2018.11.2, Released January 30th, 2019 + + Important / security related fixes. + + Defconfigs: Fixes for imx6slevk, imx7dsabresd, imx8mqevk, Lego + EV3, QEMU AArch64-virt + + Download: Fix scp download handling + + check-package: fix Python 3 support + + get-developers: Fix behaviour when called from elsewhere than + the toplevel directory. + + kconfig: Fix for make linux-menuconfig / uboot-menuconfig from + a clean tree when ccache is enabled. + + cmake: Also set CMAKE_SYSTEM_VERSION in toolchainfile.cmake + + Updated/fixed packages: acpica, apache, apr, avrdude, cargo, + cc-tool, dash, dhcpdump, dmalloc, docker-containerd, efivar, + fwts, glibc, gnuchess, gnupg2, go, leveldb, libarchive, + libassuan, libftdi1, libgpg-error, libhttpparser, libkcapi, + libmad, libsndfile, libsquish, liburiparser, libwebsock, + libxml2, lighttpd, llvm, lm-sensors, lua-msgpack-native, lxc, + mariadb, mbedtls, meson, mosquitto, netatalk, nodejs, odhcp6c, + openresolv, openssh, pango, patchelf, php, python-django, + python-numpy, python-pyyaml, rauc, rp-pppoe, s6-networking, + samba4, sdl_sound, shairport-sync, sqlite, subversion, + sunxi-cedarx, swupdate, systemd, tcpreplay, tekui, tmp2-abrmd, + tpm2-tools, tpm2-tss, udisks, unixodbc, usb_modeswitch, + webkitgtk, wireshark, wolfssl, xapp_rgb, xenomai, xerces + + Issues resolved (http://bugs.uclibc.org): + + #11576: Unable to start apache with event MPM on raspberry pi 3 + +2018.11.1, Released December 20th, 2018 + + Important / security related fixes. + + defconfigs: Fixes for bananapi m2 ultra, ci20 + + Download wrapper: Fix for urlencode handling + + Updated/fixed packages: asterisk, docker-compose, + docker-engine, dt-utils, gnutls, go, grub, libbsd, libcurl, + libpgpme, libiscsi, liblo, libmpd, libopenssl, liboping, + libpam-tacplus, libpjsip, linux-firmware, liquid-dsp, + lua-cqueue, luvi, lxc, lynx, nginx, nodejs, openzwave, php, + pps-tools, proftpd, prosody, sdl2_net, squashfs, swupdate, + uclibc, vtu, webkitgtk, wine, xen + + New packages: docker-cli + + Issues resolved (http://bugs.uclibc.org): + + #11426: pps-tools bash dependency + #11536: dt-utils building fails with glibc 2.28 + +2018.11, Released December 1st, 2018 + + Minor fixes. + + Updated/fixed packages: c-ares, quagga, squid + +2018.11-rc3, released November 30th, 2018 + + Fixes all over the tree. + + Defconfigs: Fixes for Armadeus APF27, imx6sabre, Olimex A20 + olinuxino lime legacy, Orangepi zero plus 2, PC, Riotboard. + + graph-depends: Fix for package names starting with a non-alpha + character. + + Updated/fixed packages: alsa-utils, botan, dante, domoticz, + dtc, freetype, gauche, gcc, gdb, ghostscript, glibc, + imx-usb-loader, libbsd, libid3tag, libkrb5, libmicrohttpd, + libopenssl, libsoxr, linux, motion, msgpack, mtd, + perl-net-ssleay, php, popt, python-numpy, qt5declarative, + samba4, shadowsocks-libev, stress-ng, systemd, usb_modeswitch, + webkitgtk, valgrind, weston, xfsprogs + +2018.11-rc2, released November 21th, 2018 + + Fixes all over the tree. + + fs: Drop intermediate tarball from the filesystem handling to + fix an issue with xattrs handling related to fakeroot. Ensure + tarball target includes xattrs. + + download: Fix confusion in git submodule handling if dl/ is a + symlink. + + genrandconfig: Fix missing newline in BR2_WGET handling, + causing the following line to be ignored. This would affect + BR2_ENABLE_DEBUG, BR2_INIT_BUSYBOX, BR2_INIT_SYSTEMD, + BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV, BR2_STATIC_LIBS or + BR2_PACKAGE_PYTHON_PY_ONLY depending on the randomization. + + show-build-order: Also include the dependencies of + rootfs-common. + + Fix a number of build issues in packages for the recently + merged RISC-V architecture support. + + Updated/fixed packages: dt-utils, easydbus, elfutils, + flare-engine, flatcc, glibc, gstreamer, gstreamer1, imx-uuc, + libassuan, libcorrect, libiscsi, libkrb5, libmicrohttpd, + libnftnl, libnspr, libnss, libsemanage, libsigsegv, libv4l, + ltp-testsuite, luv, luvi, make, ncmpc, netplug, openocd, + prosody, qemu, rpm, sconeserver, shadowsocks-libev, + supertuxcart, syslinux, systemd, trace-cmd, uclibc, + uclibc-ng-test, vtun, webkitgtk, weston, wireshark, xen, + xlib_libfontenc + + Issues resolved (http://bugs.uclibc.org): + + #11086: download/git submodule breaks on symlinked dl folder + #11216: Capabilities not applied to filesystem + +2018.11-rc1, released November 9th, 2018 + + Fixes all over the tree and new features. + + Architecture: RISC-V support (64bit) added. + + Toolchain: Glibc bumped to 2.28. Fortran support for external + toolchains. ARM (Linaro) toolchains updated to 8.2-2018.08. + + Hardening flags (RELRO) are now handled by the toolchain + wrapper instead of explicitly through CFLAGS/LDFLAGS, fixing a + number of issues. + + Filesystems: Support for creating btrfs and f2fs filesystems + added. + + Add a number of patches to fix build errors for host utilities + on modern distributions using glibc-2.28. + + mkusers: Ensure existing group members are preserved when a + group is reprocessed. + + printvars: Fix issue with exceeding shell command line length + limits for certain setups. + + Workaround added for incompatibility issues between host-dtc + and older U-Boot and Linux kernel versions. + + Detect and reject build paths containing '@', as this confuses + a number of packages, including GCC. + + utils/diffconfig: Make it work for (non-Buildroot) config + files not using the BR2_ prefix. + + New defconfigs: Amarula a64-relic, Bananapi m2 ultra, Embest + riotboard, Hardkernel Odroid XU-4, QEMU riscv64-virt. + olimex_a20_olinuxion_lime_mali is renamed to _legacy. + + OpenCL infrastructure support added, similar to how OpenGL is + handled. + + Linux-headers: Support for kernel headers from a custom + tarball / git repo added. + + New packages: bird, bluez5_utils-headers, btrfs-progs, + checksec, davici, duktape, ell, haproxy, libclc, libcorrect, + libopencl, libopenresolv, nss-myhostname, + perl-apache-logformat-compiler, perl-appconfig, + perl-astro-suntime, perl-class-inspector, perl-class-load, + perl-class-method-modifiers, perl-class-std, + perl-class-std-fast, perl-cookie-baker, perl-data-dump, + perl-data-optlist, perl-data-uuid, perl-data-manip, + perl-dbd-mysql, perl-dbi, perl-devel-globaldestruction, + perl-devel-stacktrace, perl-devel-stacktrace-ashtml, + perl-device-serialport, perl-dist-checkconflicts, + perl-exporter-tiny, perl-file-sharedir, perl-file-slurp, + perl-filesys-notify-simple, perl-hash-multivalue, + perl-http-entity-parser, perl-http-headers-fast, + perl-http-multipartparser, perl-io-interface, + perl-io-socket-multicast, perl-json-maybexs, perl-mime-tools, + perl-module-implementation, perl-module-runtime, perl-moo, + perl-number-bytes-human, perl-package-stash, perl-params-util, + perl-plack, perl-posix-strftime-compiler, perl-role-tiny, + perl-streams-buffered, perl-sub-exporter-progressive, + perl-sub-install, perl-sub-quote, perl-sys-cpu, + perl-sys-meminfo, perl-sys-mmap, perl-time-parsedate, + perl-type-tiny, perl-www-form-urlencoded, perl-x10, pigpio, + python-async-timeout, python-falcon, python-fire, + python-mimeparse, python-multidict, python-passlib, + python-pigpio, python-pip, python-ply, python-py, + python-pyasn1, python-pyasn1-modules, python-pycryptodomex, + python-pyhamcrest, python-pysmi, python-scapy, python-semver, + python-serial-asyncio, python-typing, python-uvloop, + pythonwrapt, python-yarl, python-zeroconf, riscv-pk, sedutil, + spandsp, tini, waffle, xapian + + Removed packages: bootutils, dsp-tools, expedite, gst-dsp, + xloader + + Issues resolved (http://bugs.uclibc.org): + + #11116: Buildroot should set PYTHON_EGG_CACHE instead of writing .. + #11156: In python3 module 'socket' has no attribute 'AF_BLUETOOTH' + #11166: Erlang bad argument on valid uint64 when crosscompiled on.. + #11206: zlib: fails to build with Linaro toolchain, BR2_RELRO_FULL.. + #11241: ACPID shouldn't depend on BR2_x86_64 || BR2_i386 + #11251: Util scanpypi failes when package change - to _ in tar file + #11266: qt5base-5.11.1 does not compile with musl, complains about.. + #11286: python-rpi-gpio only should depend on BR2_arm || BR2_aarch64 + #11321: Latest master fails to build readline with RELRO FULL + #11326: sysvinit fails to build in latest GIT master + #11331: Internal application no longer builds with latest GIT master + #11336: nfs-utils fails to build in latest GIT master + #11351: build root-2018-08, linaro aarch64 compile error + #11376: mdmon binary missing + #11391: Valgind availability on ARM + #11396: uboot environment image checksum invalid if target is big endian + #11421: GCC error message for ARM Cortex-A9/ARM.V7 + #11451: Can't find libmpfr.so.4 when using external toolchain on ubuntu.. + #11481: Docs: Is external.desc required? + +2018.08.4, Released December 20th, 2018 + + Important / security related fixes. + + Defconfigs: Fixes for ci20, orangepi zero plus 2 + + Download wrapper: Fix for urlencode handling + + Updated/fixed packages: c-ares, dante, docker-compose, + domoticz, freetype, ghostscript, gnutls, libcurl, libgpgme, + libid3tag, libiscsi, libmpd, libopenssl, liboping, libpjsip, + linux-firmware, liquid-dsp, luvi, lynx, msgpack, nginx, + nodejs, php, popt, pps-tools, prosody, python-numpy, + python-requests, samba4, sdl2_net, squashfs, swupdate, + systemd, uclibc, vte, webkitgtk, wine, xfsprogs + + Issues resolved (http://bugs.uclibc.org): + + #11426: pps-tools bash dependency + +2018.08.3, Released November 26th, 2018 + + Important / security related fixes. + + fs: Drop intermediate tarball from the filesystem handling to + fix an issue with xattrs handling related to fakeroot. Ensure + tarball target includes xattrs. + + download: Fix confusion in git submodule handling if dl/ is a + symlink. + + toolchain: Only allow enabling stack protection on + architectures with control flow integrity (CFI) support. Only + allow FORTIFY_SOURCE support on gcc >= 6. + + genrandconfig: Fix missing newline in BR2_WGET handling, + causing the following line to be ignored. This would affect + BR2_ENABLE_DEBUG, BR2_INIT_BUSYBOX, BR2_INIT_SYSTEMD, + BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV, BR2_STATIC_LIBS or + BR2_PACKAGE_PYTHON_PY_ONLY depending on the randomization. + + show-build-order: Also include the dependencies of + rootfs-common. + + Defconfigs: Fixes for Armadeus APF27, imx6sabre, Olimex A20 + olinuxino lime legacy, Orangepi zero plus 2. + + graph-depends: Fix for package names starting with a non-alpha + character. + + Updated/fixed packages: attr, audit, bind, brotli, busybox, + dtc, easydbus, elfutils, flare-engine, flatcc, gauche, gcc, + giflib, gpsd, lcdproc, libcurl, libiscsi, libkcapi, libnfs, + libnspr, libnss, libsemanage, liburiparser, lighttpd, + lua-curl, mariadb, mmc, mosquitto, mysql, ncmpc, neardal, + netplug, network-manager, nfs-utils, nginx, openocd, openswan, + p11-kit, postgresql, prosody, qemu, qt, rpm, ruby, samba4, + squid, supertuxkart, systemd, tar, trace-cmd, traceroute, + twolame, uclibc, usb_modeswitch, vtun, webkitgtk, weston, + xdriver_xf86-video-geode, xlib_libfontenc, xserver_xorg-server + + Issues resolved (http://bugs.uclibc.org): + + #11086: download/git submodule breaks on symlinked dl folder + #11481: Docs: Is external.desc required? + +2018.08.2, Released October 25th, 2018 + + Important / security related fixes. + + Workaround added for incompatibility issues between host-dtc + and older U-Boot and Linux kernel versions. + + Detect and reject build paths containing '@', as this confuses + a number of packages, including GCC. + + utils/get-developers: Add -e option for use with git + send-email. + + utils/diffconfig: Make it work for (non-Buildroot) config + files not using the BR2_ prefix. + + u-boot: Fix for environment image handling on big endian + systems. + + Updated/fixed packages: binutils, ca-certificates, + cups-filters, dtc, erlang, file, freetype, gcc, git, gvfs, + jasper, leveldb, libarchive, libssh, live555, ljlinenoise, + mariadb, mongoose, netsnmp, nmap, nodejs, ntp, open-plc-utils, + poco, psmisc, ptpd2, python-enum34, qemu, qt, qt5base, + setools, spice, spice-protocol, tinc, ustr, wireshark, + + Issues resolved (http://bugs.uclibc.org): + + #11396: uboot environment image checksum invalid if target is big endian + +2018.08.1, Released October 7th, 2018 + + Important / security related fixes. + + Add a number of patches to fix build errors for host utilities + on modern distributions using glibc-2.28. + + mkusers: Ensure existing group members are preserved when a + group is reprocessed. + + printvars: Fix issue with exceeding shell command line length + limits for certain setups. + + Updated/fixed packages: acpid, android-tools, apache, + arp-scan, bandwidthd, bind, brltty, clamav, connman, cppcms, + domoticz, dtc, fio, gcc, gdb, ghostscript, gnupg, httpping, + igmpproxy, imlib2, ipsec-tools, libesmtp, libnfs, libxslt, + links, lua, mosquitto, nilfs-utils, ocrad, parted, php, + python-django, screen, shairport-sync, strongswan, + vboot-utils, webkitgtk, wireguard, x265 xen, xlib_libXdmcp, + xlib_libXfont, xlib_libXft, xlib_libxshmfence, + xutil_makedepend, zeromq + +2018.08, Released September 6th, 2018 + + Minor fixes. + + Known issues: + + - Glibc 2.28 on the build host breaks compilation of a number + of host packages. 2018.08 contains fixes for some of these + packages, but not all. Consider building on hosts (or in + containers) using older Glibc versions. + + - host-dtc 1.4.7 breaks compilation of older U-Boot and Linux + kernel configurations using FDT/DTC. Consider updating the + Linux kernel to >= 4.17 and U-Boot to >= 2018.07 or + backporting commit 9130ba8846 (scripts/dtc: Update to + upstream version v1.4.6-9-gaadd0b65c987) for the Linux + kernel / commit db405d1980 for U-Boot. + Alternatively revert commit 7b929ddcf0 (dtc: bump version to + 1.4.7) and ensure your build host does not have the libfdt + development headers installed. + + Updated/fixed packages: busybox, chipmunk, cutelyst, + domoticz, gcc, imagemagick, lcms2, libcurl, mediastreamer, + moarvm, php, qt, qt5virtualkeyboard, qt5webengine, screen, + sdl2, squashfs, uboot, xen + + Issues resolved (http://bugs.uclibc.org): + + #11261: ccache using wrong cached objects + #11276: Understanding the patch for kernel-4.9 and other.. + +2018.08-rc3, Released August 31th, 2018 + + Fixes all over the tree. + + linux: additional improvements to the flex / bison dependency + handling, use system provided variant if available. Ensure + toolchain is available when configuring for 4.18+ support. + + Download: Fix handling of primary sites using file:// + + Toolchain: Correct external toolchain musl detection for + static toolchains. + + Updated/fixed packages: aircrack-ng, bison, brltty, busybox, + cutelyst, dropbear, gr-osmosdr, i2c-tools, json-c, libconfuse, + libkcapi, libsoup, libssh, liburiparser, mbedtls, mender, + mesa3d, minicom, mjpegtools, mutt, openpowerlink, openssh, + oracle-mysql, php, postgresql, pv, qt5base, qt5quickcontrols, + rauc, shairport-sync, systemd, xlib_libX11, zeromq, + + Issues resolved (http://bugs.uclibc.org): + + #11091: BR2_PRIMARY_SITE doesn't work (wget is selected... + #11141: WF111 package no longer available + #11211: Internal compiler error: Killed (program cc1plus).. + #11236: util-linux fails to build on Travis CI when python.. + #11246: Glibc 2.28 - fails to build host-bison and host-m4 + #11256: Add python-falcon and python-mimeparse packages + +2018.08-rc2, Released August 20th, 2018 + + Fixes all over the tree. + + pkg-kconfig: Support dependencies needed to run the + configurator, E.G. recent Linux kernel versions needing flex + and bison. + + Defconfigs: ARM Juno: Bump ATF to fix a build + issue. Raspberrypi2: Bump rootfs size. Snps_archs38_vdk: + Correct /etc/inittab. Technologic ts7680: Correct genimage + configuration. Orange PI PC / Zero, Sheevaplug: Bump U-boot to + 2018.07 to fix build issue. Ensure host-openssl is pulled in + for kernel builds where needed. + + Updated/fixed packages: aircrack-ng, bind, boost, + boot-wrapper-aarch64, bzip2, busybox, chrony, cryptsetup, + dahdi-tools, dbus, domoticz, eigen, ipsec-tools, libarchive, + libfuse, libgit2, libopenssl, libselinux, lighttpd, lvm2, m4, + makedevs, mariadb, mesa3d-headers, mono, ncmpc, ncurses, + nodejs, php, python-django, python-pyqt5, qt5base, + qt5serialbus, ruby, samba4, uboot-tools, uclibc, vlc, + waylandpp, wireless_tools, wireshark, wpa_supplicant, mtd, + xdriver_xf86-video-ati, xserver_xorg-server + + Issues resolved (http://bugs.uclibc.org): + + #10781: cryptsetup luksOpen container_file container causes.. + #10996: bogus musl ARM toolchain + #11191: xattr and check-package issue + +2018.08-rc1, Released August 5th, 2018 + + Toolchain: + + - add support for gcc 8.x, switch to gcc 7.x as the default + version + - add support for gdb 8.1, switch to gdb 8.0 as the default + and remove gdb 7.10/7.11 + - add support for binutils 2.31 + - NIOSII CodeSourcery toolchain updated + - Linaro AArch64 BE toolchain added, and other Linaro + toolchains updated + - Synopsys ARC pre-built toolchain updated + + Architecture: add support for ARM Cortex-M7 + + Major updates: + + - systemd bumped to 239 + - Qt5 bumped to 5.11.1 + - Rust bumped to 1.27 + - GStreamer stack bumped to 1.14.2 + - X.org server bumped to 1.20, and all X.org proto packages + replaced by the single xorgproto package + - i.MX6 support packages bumped to 6.2.4 + - i.MX Vivante graphics version bumped to 6.2.4.p1.2, + adding support for Wayland and i.MX8MQ platforms + + Linux: bumped to 4.17 by default. + + Infrastructure: new package infrastructure added for packages + using the Meson build system + + New packages: at-spi2-atk, at-spi2-core, capnproto, cmocka, + corkscrew, cutelyst, davfs2, flatcc, libidn2, libgit2, + libopusenc, mender, nghttp2, perl-convert-asn1, perl-crypt-blowfish, + perl-crypt-cbc, perl-digest-md5, perl-mime-base64-urlsafe, + perl-mojolicious-plugin-authentication, perl-net-ping, + perl-net-snmp, perl-net-ssh2, perl-net-telnet, pigz, + python-reentry, python-request-id, python-validators, + python-webob, shadowsocks-libev, speexdsp, xorgproto, wampcc + + New defconfigs: NXP i.MX7D SDB, Boundary Devices Nitrogen 8M, + Olimex A10 OLinuxino, ZynqMP ZCU106 + + Removed packages: all xproto_* have been removed and replaced + by xorgproto + + Issues resolved (http://bugs.uclibc.org): + + #9411: MUSL build with RT Error relocating /lib/libgcc_s.so.1: + __cpu_indicator_init: symbol not found + #9921: lockfile module within python-daemon not available + #10341: gdb install of py files when using buildroot toolchain + includes build path + #10661: /etc/init.d/S29netplug starts multiple instances of netplugd + #10751: Missing dependency in pulseaudio package + #10811: kodi-17.6-Krypton does not compile for freescale_* devices + #10856: openblas on qemu_x86_64_defconfig fails with + "sgemm_kernel.o: No such file or directory" + #11056: Compiling a file that uses libdrm headers fails with: + fatal error: drm.h: No such file or directory + #11061: support/download: git version=master broken + #11071: Building postgresql package on Debian 9.4 x64 for armel target fails + #11076: Docker containerd installed to incorrect path + #11101: host-patchelf Endian Issue with relative RPATH + #11111: raspberry pi 3 b+: missing BSP for 64-bit kernel + #11121: statfs call corrupts memory struct statfs too small + #11181: Switching toolchain does not work + +2018.05.3, Released October 6th, 2018 + + Important / security related fixes. + + Add a number of patches to fix build errors for host utilities + on modern distributions using glibc-2.28. + + mkusers: Ensure existing group members are preserved when a + group is reprocessed. + + printvars: Fix issue with exceeding shell command line length + limits for certain setups. + + Updated/fixed packages: acpid, android-tools, apache, + arp-scan, bandwidthd, bind, bison, brltty, chipmunk, connman, + cppcms, fio, gcc, ghostscript, gnupg, httping, igmpproxy, + imagemagick, imlib2, ipsec-tools, lcm2, libcurl, libesmtp, + libnfs, libssh, libxslt, links, mediastreamer, minicom, + moarvm, nilfs-utils, ocrad, parted, php, postgresql, pv, + python-django, qt, qt5quickcontrols, qt5webengine, screen, + sdl2, shairport-sync, squashfs, strongswan, vboot-utils, + webkitgtk, wireguard, x265, xen, xlib_libXfont, xlib_libXft, + xlib_libxshmfence, zeromq + +2018.05.2, Released August 28th, 2018 + + Important / security related fixes. + + Defconfigs: Raspberrypi2: Bump rootfs size, T7680: Fix + genimage.cfg issue, ARM Juno: Bump ATF to v1.3 to fix build + issue. + + Updated/fixed packages: acl, attr, apache, bind, + boot-wrapper-aarch64, brltty, bzip2, chrony, crda, cryptsetup, + dahdi-tools, dmidecode, dropbear, eigen, ffmpeg, gawk, gcc, + ghostscript, gnutls, imx-gpu-viv, ipsec-tools, libarchive, + libfuse, libglib2, libopenssl, libselinux, libsoup, lighttpd, + linuxptp, lttng-modules, lttng-tools, lua-flu, lvm2, m4, + makedevs, mariadb, mbedtls, mesa3d-heders, mtd, ncurses, + nodejs, openssh, php, python-django, rauc, ruby, samba4, + stress-ng, ti-utils, uboot-tools, uclibc, vim, waylandpp, + wireless_tools, wireless-regdb, wireshark, wpa_supplicant, + xorriso, znc + + Issues resolved (http://bugs.uclibc.org): + + #10781: cryptsetup luksOpen container_file container causes.. + #10986: Installing package attr when already supplied by.. + #11191: xattr and check-package issue + +2018.05.1, Released July 20th, 2018 + + Important / security related fixes. + + U-Boot: Ensure host version of ncurses is picked up and not + host-ncurses built by buildroot, as that otherwise causes + widechar/non-widechar conflicts and corrupted menuconfig + menus. + + Linux: Enable CONFIG_PERF_EVENTS when perf is enabled. + + Toolchain: ARC tools updated to arc-2018.03. + + pkg-stats: Fix python 3.x compatibility. + + dl-wrapper: Fix support for URIs containing '+', fix + no-check-hash for inferred site method. + + Defconfigs: Raspberrypi3: Bump rootfs size, Minnowboard-max: + Support ethernet on Turbot variant. + + Updated/fixed packages: audit, bind, btrfs-progs, cifs-utils, + clamav, collectd, coreutils, docker-containerd, dos2unix, + edid-decode, file, gcc, gdb, gnupg, gnupg2, heimdal, hidapi, + imagemagick, libcurl, libgcrypt, libglib2, liblogging, + libostree, libressl, libsoup, libv4l, libvncserver, libvorbis, + libwebsockets, libxslt, lm-sensors, mariadb, mpg123, ncurses, + network-manager, nodejs, patchelf, perl, php-amqp, pinentry, + pixiewps, qpdf, qt53d, qt5base, qt5charts, qt5script, redis, + systemd, triggerhappy, uboot, wireguard, wireless-regdb, + wireshark + +2018.05, Released June 1st, 2018 + + Minor fixes. + + Download: Work around for hanging connections for packages + from CVS, by adding a 10 minute max timeout. + + Updated/fixed packages: binutils, clang, dash, expect, git, + glibc, jpeg-turbo, libjpeg, log4cplus, openvmtools, xen, + + Issues resolved (http://bugs.uclibc.org): + + #11051: runtime issue on STM32 with usage of binutils 2.29.x + +2018.05-rc3, Released May 28th, 2018 + + Fixes all over the tree. + + Toolchain: ARC tools updated to arc-2018.03-rc2. + + Fs: Ensure hard links in TARGET_DIR are correctly copied for + filesystem input. With the recent changes to the file system + generation logic, hard links were "expanded" in file system + images leading to bloated rootfs images for setups with hard + links. + + Infrastructure: Error out for packages using the 'local' + method but forgetting to specify _SITE. + + Build rpcgen for the host when needed to support distributions + no longer shipping rpcgen with glibc (E.G. recent Fedora). + + Updated/fixed packages: autofs, bash-completion, binutils, + busybox, cjson, elf2flt, libcoap, libcurl, libtirpc, lrzsz, + poppler, procps-ng, qt-webkit-kiosk, quota, samba4, xfsprogs + + Issues resolved (http://bugs.uclibc.org): + + #11031: ld-elf2flt: host/bin/ld.real': execvp: No such file.. + #11036: C compiler cannot create executables + #11046: Git package binaries are ~180MB (compared to ~20MB in.. + +2018.05-rc2, Released May 22nd, 2018 + + Fixes all over the tree. + + Dependencies: Check that the current working directory (.) + isn't listed in PATH as that causes various build issues. + + Manual: Clarify that git branch names may not be used as + version identifiers. This has never been supported, but was + kind of working (with some limitations) before the git + download rework - Now it does not work at all. + + Linux: Ensure host version of ncurses is picked up and not + host-ncurses built by buildroot, as that otherwise causes + widechar/non-widechar conflicts and corrupted menuconfig + menus. + + Packages: Renamed a number of package options not prefixed + with BR2_PACKAGE_ for consstency. + + Download infrastructure: Fix file:// protocol handling after + download rework. + + Updated/fixed packages: acl, apr-util, asterisk, attr, + bluez5_utils, cifs-utils, clamav, clang, cups-filters, + dahdi-linux, exim, faketime, gdb, go, gst1-plugins-bad, + imx-mkimage, ipsec-tools, jamvm, janus-gateway, + jquery-ui-themes, libcap, libcurl, libftdi, libkcapi, libkrb5, + libmediaart, libmodbus, libmodplug, libmpd, + libnetfilter_cthelper, libnetfilter_cttimeout, libnfc, + libnfnetlink, libnss, liboauth, libogg, libosip2, + libpam-radius-auth, libpcap, libpciaccess, llvm, log4cplus, + ltrace, lynx, mbedtls, modem-manager, nfs-utils, + python-cython, python-websockets, qt5cinex, qt5wayland, rauc, + snort, strace, ti-sgx-km, transmission, wavpack, wget, woff2, + xen, zmqpp, znc, zstd + + Issues resolved (http://bugs.uclibc.org): + + #10986: Installing package attr when already supplied by... + #11011: BUildroot for Raspberry Pi 2 + #11016: Wrong compiler used for external user host packages + +2018.05-rc1, Released May 9th, 2018 + + Toolchain: glibc bumped to 2.27, musl bumped to 1.1.19, + uClibc-ng 1.0.30, Linux kernel headers bumped to 4.16.x. + + Architecture: support for the Blackfin architecture has been + removed, as it was removed from Linux upstream, poorly + maintained in binutils/gdb, and abandoned by Analog Devices. + + Numerous packages updated to have hashes for their license + files. + + Systemd can now be built with uClibc toolchains. + + Linux: addition of BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF and + BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL to support building Linux + kernel configurations that need libelf on the host or openssl + on the host. + + Coding style: + - all Python scripts are now verified with flake8 + - check-package extended to check all Config.in and .mk files + in tree, not only the ones in package/ + + Infrastructure: + + - The download infrastructure has seen a major overhaul, with + the main visible new feature being Git caching: a package + fetched from Git no longer needs to be re-cloned entirely + everytime its version is changed. Anoter visible change is + that the download folder now has subfolders per package. See + http://lists.busybox.net/pipermail/buildroot/2018-April/217923.html + for more details about those changes. + + - The logic that generates the root filesystem images has been + reworked, with the main goal of allowing several filesystem + images to be produced in parallel, also a requirement for + top-level parallel build. Now, a .tar filesystem image is + always created, and re-extracted in a private directory to + create each format-specific filesystem image. + + - A new package infrastructure was introduced for Go-based + packages: golang-package. + + - Dependencies on extraction tools are now handled as proper + per-package dependencies, using + _EXTRACT_DEPENDENCIES. Beyond a cleanup, this is also a + preparation step for top-level parallel build support. + + - When a file being downloaded is part of a package with a + .hash file, but there is no hash listed for this file, the + file is now preserved in the download directory rather than + removed. This helps when updating a package, as it gives the + ability to easily calculate the hash of the file. + + - Addition of '-show-recursive-depends' and + '-show-recursive-rdepends' make targets, to + respectively display the recursive list of dependencies and + the recursive list of reverse dependencies of a given + package. + + - The /etc/shells file is now automatically generated with the + list of shell programs installed on the system. + + - Addition of -Ofast optimization level as an available + option. + + Major updates: Go updated to 1.10, Erlang bumped to 20.3, Qt5 + bumped to 5.10.1. + + New packages: 18xx-ti-utils, abootimg, bluez-alsa, brotli, + chipmunk, clang, docker-compose, docker-proxy, flare-engine, + flare-game, gst1-interpipe, gstreamer1-editing-services, + hackrf, i2pd, imx-alsa-plugins, imx-mkimage, libcdio-paranoia, + libkrb5, llvm, pixiewps, python-backports-ssl-match-hostname, + python-cached-property, python-cython, python-docker, + python-dockerpty, python-docker-pycreds, + python-flask-sqlalchemy, python-functools32, python-influxdb, + python-json-models, python-libusb1, python-networkx, + python-psycopg2, python-pymodbus, python-sqlalchemy, + python-subprocess32, python-texttable, + python-websocket-client, python-yieldfrom, quotatool, reaver, + snort, sunxi-mali-mainline, sunxi-mali-mainline-driver, tk, + tpm2-abrmd, tpm2-tools, tpm2-tss, udftools, vte, woff2. + + New defconfigs: ARC HS Development Kit, Arcturus ucls1012a, + Freescale i.MX6UL EVK (with vendor kernel), Freescale i.MX6 + SoloLite EVK (with vendor kernel), Freescale i.MX31 3Stack, + Freescale i.MX8Q EVK Freescale p1025twr, Freescale t1040d4rdb, + Qemu PPC64 E5500, SolidRun ClearFog Base, Tinker RK3288, Vyasa + RK3288, + + Removed packages: iqvlinux, kodi-adsp-*, mplayer + + Removed defconfigs: ci40, firefly_rk3288, + freescale_p1010rdb_pa, freescale_mpc8315erdb, riotboard, + teliv_evk_pro3 + + Issues resolved (http://bugs.uclibc.org): + + #10151: toolchain eclipse register : fails with a custom + BR2_HOST_DIR + #10511: Packages get downloaded uncompressed with wget + #10531: QtWebengine doesn't build if the host hasn't a 32 bits + C++ compiler working + #10846: error in compiling gnutls + #10886: openssl-1.0.2n fails to build + #10896: /bin/sh not in /etc/shells + #10961: Grub2 fails to build for x86_64 when BR2_SSP_ALL is + enabled + +2018.02.12, Released March 29th, 2019 + + Important / security related fixes. + + Updated/fixed packages: avahi, beecrypt, busybox, clamav, + cups, devmem2, fetchmail, file, fltk, gcc, gdb, git, jq, + leveldb, libopenssl, libraw, libseccomp, libssh2, + libunistring, mariadb, mosquitto, nodejs, ntp, openjpeg, perl, + php, putty, qt5webkit, rdesktop, systemd, wireshark, vsftpd, + xapp_xdm, xlib_libXdmcp + +2018.02.11, Released February 23th, 2019 + + Important / security related fixes. + + Ensure the PLATFORM and OS environment variables are not set, + as they cause build issues for some packages. + + The package list infrastructure now correctly handles packages + installing files with old mtime. + + Linux: Skip hash checks for user supplied downloadable + patches, as no hash checksums are available for those. + + scanpypi: protect against zip-slip vulnerability in zip/tar + handling + + Updated/fixed packages: bind, dhcpcd, dovecot, ghostscript, + gnuradio, imagemagick, jpeg-turbo, libarchive, libb64, + libcurl, libid3tag, madplay, mosquitto, openssh, php, + postgresql, proftpd, python, python-django, python3, qt5base, + sqlcipher, swupdate, systemd, unzip, webkitgtk + +2018.02.10, Released January 31th, 2019 + + Important / security related fixes. + + Defconfigs: Fixes for Lego EV3, QEMU AArch64-virt + + check-package: fix Python 3 support + + get-developers: Fix behaviour when called from elsewhere than + the toplevel directory. + + cmake: Also set CMAKE_SYSTEM_VERSION in toolchainfile.cmake + + Updated/fixed packages: acpica, apache, apr, asterisk, + avrdude, cargo, cc-tool, dash, dhcpdump, dmalloc, gnuchess, + gnupg2, leveldb, libarchive, libassuan, libftdi1, + libgpg-error, libhttpparser, libmad, libsndfile, libsquish, + liburiparser, libwebsock, libxml2, lighttpd, lm-sensors, + lua-msgpack-native, mbedtls, mosquitto, netatalk, nodejs, + openssh, pango, patchelf, php, python-django, python-pyyaml, + rauc, rp-pppoe, s6-networking, samba4, sdl_sound, + shairport-sync, sqlite, subversion, sunxi-cedarx, tcpreplay, + tekui, usb_modeswitch, webkitgtk, wireshark, wolfssl, + xapp_rgb, xenomai, xerces + + Issues resolved (http://bugs.uclibc.org): + + #11576: Unable to start apache with event MPM on raspberry pi 3 + +2018.02.9, Released December 20th, 2018 + + Important / security related fixes. + + defconfigs: Fixes for ci20 + + Updated/fixed packages: c-ares, dante, freetype, ghostscript, + glibc, gnutls, go, libcurl, libgpgme, libid3tag, libiscsi, + libmpd, libopenssl, libpjsip, linux, liquid-dsp, luvi, lynx, + msgpack, nginx, nodejs, php, popt, pps-tools, python-numpy, + python-requests, samba4, sdl2_net, squashfs, swupdate, uclibc, + wine, webkitgtk, xfsprogs + + Issues resolved (http://bugs.uclibc.org): + + #11426: pps-tools bash dependency + +2018.02.8, Released November 26th, 2018 + + Important / security related fixes. + + fs: Drop intermediate tarball from the filesystem handling to + fix an issue with xattrs handling related to fakeroot. Ensure + tarball target includes xattrs. + + download: Fix confusion in git submodule handling if dl/ is a + symlink. + + toolchain: Only allow enabling stack protection on + architectures with control flow integrity (CFI) support. Only + allow FORTIFY_SOURCE support on gcc >= 6. + + genrandconfig: Fix missing newline in BR2_WGET handling, + causing the following line to be ignored. This would affect + BR2_ENABLE_DEBUG, BR2_INIT_BUSYBOX, BR2_INIT_SYSTEMD, + BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV, BR2_STATIC_LIBS or + BR2_PACKAGE_PYTHON_PY_ONLY depending on the randomization. + + show-build-order: Also include the dependencies of + rootfs-common. + + Defconfigs: Fixes for Armadeus APF27, imx6sabre. + + graph-depends: Fix for package names starting with a non-alpha + character. + + Updated/fixed packages: attr, audit, bind, brotli, easydbus, + elfutils, gauche, gcc, giflib, gpsd, lcdproc, libcurl, + libiscsi, libnfs, libnspr, libnss, libkcapi, libsemanage, + liburiparser, lighttpd, linux, lua-curl, mariadb, mmc-utils, + mosquitto, mysql, neardal, netplug, network-manager, + nfs-utils, nginx, openocd, openswan, p11-kit, postgresql, + prosody, qemu, qt, rpm, ruby, samba4, squid, supertuxkart, + systemd, tar, trace-cmd, traceroute, twolame, uclibc, + usb_modeswitch, vtun, webkitgtk, xdriver_xf86-video-geode, + xlib_libfontenc, xproto_inputproto, xserver_xorg-server + + Issues resolved (http://bugs.uclibc.org): + + #11086: download/git submodule breaks on symlinked dl folder + #11251: Util scanpypi failes when package change - to _ in.. + #11476: stdio2.h error invalid use of __builtin_va_arg_pack + #11481: Docs: Is external.desc required? + +2018.02.7, Released October 25th, 2018 + + Important / security related fixes. + + Detect and reject build paths containing '@', as this confuses + a number of packages, including GCC. + + utils/get-developers: Add -e option for use with git + send-email. + + utils/diffconfig: Make it work for (non-Buildroot) config + files not using the BR2_ prefix. + + u-boot: Fix for environment image handling on big endian + systems. + + Updated/fixed packages: binutils, ca-certificates, + cups-filters, erlang, file, freetype, gcc, git, gvfs, leveldb, + libarchive, libcurl, libssh, live555, ljlinenoise, mariadb, + mongoose, netsnmp, nmap, nodejs, ntp, open-plc-utils, poco, + psmisc, ptpd2, python-enum34, qemu, qt, qt5base, setools, + spice, spice-protocol, tinc, ustr, wireshark + + Issues resolved (http://bugs.uclibc.org): + + #11396: uboot environment image checksum invalid if target is big endian + +2018.02.6, Released October 7th, 2018 + + Important / security related fixes. + + Add a number of patches to fix build errors for host utilities + on modern distributions using glibc-2.28. + + mkusers: Ensure existing group members are preserved when a + group is reprocessed. + + printvars: Fix issue with exceeding shell command line length + limits for certain setups. + + Updated/fixes packages: acpid, android-tools, apache, + arp-scan, bandwidthd, bind, bison, clamav, connman, cppcms, + cramfs, fio, gcc, ghostscript, glibc, gnupg, httping, + igmpproxy, imagemagick, imlib2, ipsec-tools, lcms2, libcurl, + libesmtp, libnfs, libssh, libxslt, links, linuxptp, + mediastreamer, minicom, moarvm, nilfs-utils, ocrad, parted, + php, pv, python-django, qt, qt5quickcontrols, qt5webengine, + screen, sdl2, shairport-sync, squashfs, strongswan, + vboot-utils, webkitgtk, wireguard, x265, xen, xlib_libXfont, + xlib_libXft + + New packages: brotli, woff2 + +2018.02.5, Released August 29th, 2018 + + Important / security related fixes. + + Defconfigs: Raspberrypi2: Bump rootfs size, T7680: Fix + genimage.cfg issue, ARM Juno: Bump ATF to v1.3 to fix build + issue. + + Updated/fixed packages: acl, apache, attr, bind, + boot-wrapper-aarch64, brltty, bzip2, chrony, crda, cryptsetup, + dahdi-tools, dmidecode, dropbear, eigen, erlang, ffmpeg, gawk, + gcc, ghostscript, gnutls, ipsec-tools, libarchive, libfuse, + libopenssl, libselinux, libsoup, lighttpd, linuxptp, + lttng-modules, lttng-tools, lua-flu, lvm2, m4, makedevs, + mariadb, mbedtls, mesa3d-headers, mtd, ncurses, nodejs, + openssh, php, postgresql, python-django, qt5xmlpatterns, ruby, + samba4, shairport-sync, stress-ng, ti-utils, uboot-tools, vim, + waylandpp, wireless_tools, wireshark, wpa_supplicant, xorriso, + znc + + Issues resolved (http://bugs.uclibc.org): + + #10781: cryptsetup luksOpen container_file container causes.. + #10986: Installing package attr when already supplied by.. + #11191: xattr and check-package issue + +2018.02.4, Released July 21th, 2018 + + Important / security related fixes. + + U-Boot: Ensure host version of ncurses is picked up and not + host-ncurses built by buildroot, as that otherwise causes + widechar/non-widechar conflicts and corrupted menuconfig + menus. + + Linux: Enable CONFIG_PERF_EVENTS when perf is enabled. + + Defconfigs: Raspberrypi3: Bump rootfs size, Minnowboard-max: + Support ethernet on Turbot variant. + + Updated/fixed packages: bind, clamav, collectd, dos2unix, + edid-decode, gcc, gdb, heimdal, hidapi, imx-gpu-viv, libcurl, + libglib2, liblogging, libostree, libsoup, libv4l, lm-sensors, + ncurses, network-manager, patchelf, pinentry, procps-ng, qpdf, + qt5, qt53d, qt5base, qt5charts, qt5script, qt5serialport, + systemd, wireguard, wireless-regdb + + Issues resolved (http://bugs.uclibc.org): + + #11101: host-patchelf Endian Issue with relative RPATH + +2018.02.3, Released June 18th, 2018 + + Important / security related fixes. + + Various fixes for building on modern distributions (GCC 8.x, + no rpcgen utility). + + ARM: Default to binutils 2.28 and warn about newer binutils + versions, which are known to cause boot failures for Linux + kernels built in thumb mode. + + Busybox/mdev: Fix module autoloading. + + Busybox/sysvinit: inittab: Add /dev/{stdin,stdout,stderr} + symlinks, call swapon -a to activate any configured swap + devices. + + Dependencies: Check that PATH does not contain current working + directory, which triggers a number of build failures. + + Infrastructure: Error out for packages erroneously using the + 'local' site method but not defining a _SITE. + + Linux: Fix cuImage. / simpleImage. handling. Ensure + kconfig uses ncurses from the host to fix a ncurses/ncursesw + mixup, causing menuconfig display corruption. + + Toolchain: Workarounds for fix-rpath issues with binutils and + elf2flt. + + Util-linux: Fix blocking on getrandom() issue with recent + kernels. + + Remove broken freescale_imx31_3stack, + freescale_imx6sololiteevk and freescale_imx6ulevk defconfigs. + + Updated/fixed packages: apr-util, asterisk, attr, audit, + autofs, binutils, busybox, cifs-utils, cups-filters, dash, + ebtables, exim, expect, f2fs-tools, faketime, file, gdb, git, + glibc, gnupg, gnupg2, gst1-plugins-bad, imagemagick, jamvm, + jpeg-turbo, libcap, libcoap, libcurl, libgcrypt, libjpeg, + libnss, libressl, libtirpc, libvncserver, libvorbis, libxslt, + log4cplus, lrzsz, ltrace, lynx, mariadb, mbedtls, mpg123, + nasm, netplug, network-manager, nfs-utils, nodejs, + openvmtools, patch, perl, php-amqp, poppler, procps-ng, + python, python-websockets, quota, redis, samba4, sysvinit, + transmission, triggerhappy, util-linux, wavpack, wget, + wireshark, xen, zmqpp + + Issues resolved (http://bugs.uclibc.org): + + #10986: Installing package attr when already supplied by busybox.. + #11031: ld-elf2flt: host/bin/ld.real': execvp: No such file or.. + +2018.02.2, Released May 4th, 2018 + + Important / security related fixes. + + Tweak package size/file instrumentation to better handle + package rebuilds. + + Revert /etc/shells creation when bash is enabled. + + Exclude /lib/firmware from the rpath fixup logic, as it may + contain non-native ELF files. + + Scanpypi: Support the new PyPi infrastructure. + + Handle GCC 8.x on the host. + + Ensure timestamp of /usr is updated to support the systemd + ConditionNeedsUpdate option. + + Updated/fixed packages: bluez5_utils, flann, gdb, gnupg2, + grub2, libcec, libcgi, libglib2, libgpg-error, libgpgme, + libtomcrypt, mbedtls, mkpasswd, php, python, python-requests, + python-watchdog, qt53d, qt5websockets, sdl2, sdl2_image, + syslog-ng, systemd, tcl, tcllib, uclibc, usb_modeswitch, + wireguard, wmctrl + + Issues resolved (http://bugs.uclibc.org): + + #10896: /bin/sh not in /etc/shells + #10961: Grub2 fails to build for x86_64 when BR2_SSP_ALL is enabled + +2018.02.1, Released April 9th, 2018 + + Important / security related fixes. + + Removed unmaintained defconfigs: Creator Ci40, Firefly rk3288, + Freescale mpc8315erdb / p1010rdb_pa, Riotboard, Teliv EVK + Pro3. + + Infrastructure: Speed up instrumentation for package size by + comparing timestamps instead of md5 checksums, as doing + checksums could lead to up to 25% longer build time for big + configurations. + + Rename the internal _BASE_NAME variable to _NASENAME + to avoid name clashes with packages ending on '-base'. + + Add a better fix for build issues for autotools based packages + checking for C++ support on toolchains without C++ support. + + Build host-tar if tar is older than 1.27 on the build machine + to work around reproducibility issues with git archives + containing long paths. + + check-unique-files: Fix for filenames not representable in the + users' locale. + + Check-bin-arch: Add support for per-package ignore paths + (_BIN_ARCH_EXCLUDE). + + Toolchain: Fix SSP support detection for external toolchains. + + linux: Add _NEEDS_HOST_OPENSSL / LIBELF options to ensure + these dependencies are available for Linux configurations + needed these dependencies, similar to how it is done for + U-Boot. + + Support custom (not in tree) device tree files in addition to + in-tree ones. + + U-Boot / uboot-tools: Fix header conflict with libfdt-devel + installed on host. + + Updated/fixed packages: apache, busybox, c-ares, cmake, + docker-engine, enlightenment, eudev, fbgrab, freescale-imx, + gtest, imagemagick, intel-microcode, irssi, jimtcl, kmod, + kodi, ktap, libcoap, libcurl, libfcgi, libhttpparser, + libminiupnpc, libopenssl, libpjsip, libss7, libssh2, libupnp + libupnpp, libuv, libvorbis, memcached, motion, musl, nodejs, + ntp, openblas, opencv3, openocd, opus-tools, patch, php, + pkgconf, postgresql, powerpc-utils, python-jsonschema, + python-webpy, qemu, qt5bsae, qt5script, qt5webkit, rapidjson, + rauc, sam-ba, samba4, sngrep, systemd, tremor, uboot-tools, + uclibc-ng-test, upmpdcli, wireshark, xerces, xterm, zstd + + New packages: docker-proxy, python-functools32 + + Issues resolved (http://bugs.uclibc.org): + + #10766: upmpdcli: Segmentation fault + #10776: ktap fails to build + #10846: error in compiling gnutls + #10856: openblas on qemu_x86_64_defconfig fails with "sgemm_.. + +2018.02, Released March 4th, 2018 + + Fixes all over the tree. + + Issues with systemd with a readonly rootfs and DBus fixed. + + Instructure: + - check-uniq-files: fix Python 2.6 compatibility. + - dependencies.sh: check for external argparse module for + Python 2.6. + - Add infrastructure to detect and use a UTF-8 locale on the + host, needed by systemd. + + Update/fixed packages: clamav, dash, dhcp, dovecot, efl, + ffmpeg, libv4l, mono, mosquitto, php, postgresql, qt, + scanpypi, sdl2, systemd, tor, tvheadend, uboot, wavpack + + Issues resolved (http://bugs.uclibc.org): + + #10831: qemu_x86_64_defconfig build fails on linux-headers.. + +2018.02-rc3, Released February 27th, 2018 + + Fixes all over the tree. + + check-bin-arch: skip /lib/modules to allow 32-bit userland + with 64bit kernel. + + dependencies: Blacklist tar 1.30+ and build our own host-tar + if needed as tar 1.30+ changed the --numeric-owner output for + long path names. Build host-tar before other host-dependencies + as they need it to extract their source tarballs. + + Update/fixed packages: asterisk, azmq, bluez5_utils, domoticz, + e2fsprogs, erlang, exim, glibc, gpsd, jq, libglib2, libvorbis, + mariadb, mbedtls, mesa3d, mesa3d-headers, mpv, patch, pcre2, + php, qt5, qt5multimedia, qt5wayland, qt5webengine, qt5webkit, + systemd, quagga, rustc, uboot, wireguard, zic, zlib-ng + + Issues resolved (http://bugs.uclibc.org): + + #10726: Current libglib2.mk creates broken libglib2 binary... + #10786: Linux fails to build unless make linux-menuconfig... + #10796: Cannot generate cpio image without selecting CON... + +2018.02-rc2, Released February 15th, 2018 + + Fixes all over the tree. + + Dependencies: Ensure C++ support is available like for C + support for packages needing 32bit host support. + + utils/genrandconfig: Check host dependencies for config. + + Updated/fixed packages: busybox, dnsmasq, dropbear, ffmpeg, + glibc, keepalived, libcpprestsdk, libgpiod, libmaxminddb, + librsvg, libtasn1, libv4l, libxml2, lightning, ltp-testsuite, + mesa3d, mesa3d-demos, mesa3d-headers, nftables, open-lldp, + php, postgresql, python-crossbar, qt5, qt53d, qt5enginio, + qt5tools, qt5webengine, qt5webkit, rsync, rust-bin, rustc, + systemd + + Issues resolved (http://bugs.uclibc.org): + + #9781: ti-sgx-km build on kernel >4.1 + #10141: Squashfs extended attribute failures + +2018.02-rc1, Released February 5th, 2018 + + The global source-check and per-package -source-check + targets have been removed. + + Architecture: Add x86 Silvermont variant. Add several new ARM + variants, rework MIPS NaN logic. Support mainline binutils/gcc + for ARC. + + Toolchains: Linaro toolchains upgraded to 2017.11 release, ARC + external toolchains upgraded to arc-2017.09. Libatomic is now + also copied for external musl based toolchains. + Add binutils 2.30.x and switch to binutils 2.29.x by default. + + Added hardening options to build with RELRO and FORTITY. + + New defconfigs: Bananapi M64, FriendlyARM Nanopi A64 & NEO2, + imx6slevk, imx6sx-sdb, imx6ulevk, Olimex A64-OLinuXino, + Orangepi lite / pc plus / pc / prime / win / win plus / zero + plus2, Pine64, Solidrun MacchiatoBin. Sopine. + + Add utils/diffconfig, a simple utility for comparing + configuration files - Adapted from the version in the + Linux kernel. + + Infrastructure: Check that the same file is not touched by + multiple packages, as a preparation for toplevel parallel + builds. + + Hashes for the license files for a large number of packages + have been added, ensuring that license changes will not be + missed when packages are bumped. + + Fix build issue for autotools based packages checking for C++ + support on toolchains without C++ support and on a distro + lacking /lib/cpp (E.G. Arch Linux). + + Support for the meson build system. + + Pie charts generated by 'graph-build' or 'graph-size' are now + sorted according to the size of each piece. + + System: Only show getty options when busybox init or sysvinit + are used. + + ARM-trusted-firmware: Support ATF bundled in U-Boot as + well as U-Boot bundled in ATF. + + Zlib is now a virtual package, provided by either libzlib or + zlib-ng, similar to openssl. + + Support for the Rust programming language. + + New packages: aoetools, armbian-firmware, binaries-marvell, + brltty, cargo, cargo-bin, cups-filters, curlpp, daq, + flatbuffers, gconf, glorytun, gstreamer1-mm, imx-m4fwloader, + imx-gpu-g2d, json-for-modern-cpp, libcpprestsdk, libgta, + libostree, libupnp18, luadbi, luadbi-sqlite3, lua-utf8, lynx, + meson, mv-ddr-marvell, nilfs-utils, opentracing-cpp, + open-lldp, pimd, proj, python-flask-cors, + python-jaraco-classes, python-more-itertools, python-oauthlib, + python-raven, python-remi, python-requests-oauthlib, + python-schedule, python-secretstorage, python-see, + python-tabledata, python-txtorcon, python-xlib, qt5charts, + rtl8189fs, rtl8723bu, rust, rustc, rust-bin, rygel, safeclib, + solatus, tcf-agent, traceroute, waylandpp, wolfssl, + zisofs-tools, zlib-ng + + Removed packages: eeprog + +2017.11.2, Released January 21st, 2018 + + Important / security related fixes. + + External toolchain: libatomic is now also copied for musl + based toolchains. + + nconfig: Fix for ncurses/ncursesw linking issue causing crashes. + + System: Only show getty options when busybox init or sysvinit + are used. + + Infrastructure: Fix build issue for autotools based packages + checking for C++ support on toolchains without C++ support and + on a distro lacking /lib/cpp (E.G. Arch Linux). + + Pie charts generated by 'graph-build' or 'graph-size' are now + sorted according to the size of each piece. + + Updated/fixed packages: asterisk, avahi, bind, busybox, + coreutils, eeprog, intel-microcode, iputils, irssi, kmsxx, + libiio, linux-firmware, lz4, mariadb, matchbox-lib, mcookie, + ntp, php, pound, rpcbind, tar, ti-cgt-pru, webkitgtk, xen, + xlib_libXpm + + Issues resolved (http://bugs.buildroot.org): + + #9996: lz4 package does not install lz4 binaries in target + #10176: Rsyslog's S01logging is deleted by Busybox.mk from... + #10216: package/x11r7/mcookie/mcookie.c:207: bad size ? + #10301: systemd/getty unused options + #10331: kmsxx, host installation fails with BR2_SHARED_... + #10556: Building ntp package with SSL library libressl... + #10641: avahi-autoipd not starting when using systemd-tmpfiles + +2017.11.1, Released December 31th, 2017 + + Important / security related fixes. + + Updated/fixed packages: asterisk, checkpolicy, dhcp, flann, + gdb, glibc, heimdal, kodi-pvr-mediaportal-tvserver, + kodi-pvr-stalker, libcue, libopenssl, libpqxx, libsoxr, + linknx, linux-tools, lldpd, ltp-testsuite, mariadb, mfgtools, + nodejs, nut, pulseaudio, python-cffi, qemu, rsync, tor, uboot, + uboot-tools, vlc, webkitgtk, weston, wireguard, wireshark, + xenomai, xfsprogs + +2017.11, Released November 30, 2017 + + Fixes all over the tree. + + Toolchain: Use github mirror for Glibc. + + Defconfigs: Correct boot.cmd for bananapi-m1. + + Makefiles: Workaround include order issues for certain make + versions by explicitly sorting the result of wildcard where it + matters. + + Download: Ensure subversion runs in non-interactive mode. + + Updated/fixed packages: asterisk, boost, chrony, dovecot, + dvb-apps, exim, feh, freerdp, fwup, google-breakpad, jose, + kvm-unit-test, lftp, libcurl, libevent, libfastjson, libpjsip, + libupnp, linphone, localedef, lttng-tools, mp4v2, mtools, + ndisc6, oracle-mysql, parted, pdbg, qt, qt5connectivity, + qt5declarative, qt5webkit, rauc, runc, samba4, shairport-sync, + systemd-bootchart, webkitgtk, wireguard, xlib_libXcursor, + xlib_libXfont, xlib_libXfont2, + + Issues resolved (http://bugs.buildroot.org): + + 10501: host-localedef fails to compile on Ubuntu 17.10 + 10506: Changed kernel image type (e.g. zImage to uImage)... + +2017.11-rc2, Released November 13th, 2017 + + Fixes all over the tree. + + Updated/fixed packages: collectd, ffmpeg, freerdp, + go-bootstrap, imagemagick, jimtcl, libpjsip, libplist, libuv, + mesa3d, nodejs, ntp, openjpeg, postgresql, python-numpy, ruby, + snmp++, usb_modeswitch, util-linux, vboot-utils, webkitgtk, + wireshark, wpa_supplicant, xapp_xdriinfo + + Issues resolved (http://bugs.buildroot.org): + + #10326: mesa3d package fails to build when BR2_SHARED_STATIC_LIBS=y + #10491: Cannot output security warning when compiled with buildroot.. + +2017.11-rc1, Released November 6th, 2017 + + Fixes all over the tree and new features. + + Openssl is now a virtual package, which may be provided by + OpenSSL (now renamed to libopenssl) or LibreSSL. + + libssh2: there is now an explicit choice of the backend to use + (mbedtls, gnutls or openssl). Previously, the choice was implicit + based on the TLS library that was selected. Now, it is possible to + choose the backend, which is important if several TLS libraries are + selected. + + netsnmp: all MIB files are now installed, making the target filesystem a + bit bigger than before. To remove unneeded MIBS, you should use a + post-build script. + + Toolchain: Linaro toolchains updated to 2017.08, ARC toolchain + updated to 2017.09, Glibc updated to 2.26, Glibc support for + ARCv2. The toolchain wrapper now handles SOURCE_DATE_EPOCH for + older (pre-gcc7.x) toolchains for BR2_REPRODUCIBLE. + + New defconfigs: Atmel SAM45D27, Bananapi M1 and M2 Plus, + Engicam i.CoreM6 Qt5 configuration, i.MX6 sabreauto (mainline + kernel/u-boot), i.MX6Q sabresd Qt5 configuration, i.MX7d-pico, + QEMU ppc64le, Raspberry pi3 Qt5 webengine configuration, + Technologic TS-7680. + + New packages: asterisk, azmq, bcg729, boinc, dahdi-linux, + dahdi-tools, freeswitch-mod-bcg729, fscryptctl, libb64, + libpri, libss7, lua-basexx, lua-compat53, lua-cqueues, + lua-curl, lua-datafile, lua-fifo, lua-httpd, + lua-lpeg-patterns, lua-markdown, lua-sailor, lua-value, + luksmeta, minetest, minetest-game, pdmenu, prosody, + python-aiocoap, python-automat, python-ibmiotf, + python-iso8601, python-m2r, python-simplesqlite, + python-websockets, python-xmltodict, qt5wayland, qt5webengine, + restorecond, selinux-python, semodule-utils, uhubctl, + wireguard, wsapi-fcgi, wsapi-xavante + + Removed packages: aiccu, rfkill, sepolgen + + Issues resolved (http://bugs.buildroot.org): + + #10281: lsblk does not compile for util-linux + #10336: lttng compilation fails : linking error + #10351: glibc missing in rootfs + #10356: nfs-utils missing header + #10361: python3 python-config script generates invalid includes + #10366: dropbear download url has changed + #10391: WiringPi retrieves wrong (old) version + #10406: Beaglebone black: Buggy SGX driver version, swapped... + #10426: uboot-tools' fw_setenv does not update the redundant... + #10451: libpcap 1.8.x and 1.7x does not compile on PPC + +2017.08.2, Released November 28th, 2017 + + Important / security related fixes. + + Qt: 5.6 version updated to 5.6.3. + + Reproducible: Do not override SOURCE_DATE_EPOCH if already set + in the environment. + + Makefiles: Workaround include order issues for certain make + versions by explicitly sorting the result of wildcard where it + matters. + + Updated/fixed packages: apr, apr-util, arqp-standalone, + azure-iot-sdk-c, collectd, dvb-apps, ffmpeg, go-bootstrap, + google-breakpad, gstreamer, imagemagick, irssi, jimtcl, + kvm-unit-test, libcurl, libfastjson, libglib2, libidn, + libpjsip, libplist, localedef, lttng-tools, luajit, mesa3d, + moarvm, mp4v2, openssh, openssl, oracle-mysql, postgresql, + python3, python-pyqt5, qt, qt5base, qt5canvas3d, + qt5connectivity, qt5declarative, qt5engineio, + qt5graphicaleffects, qt5imageformats, qt5location, + qt5multimedia, qt5quickcontrols, qt5quickcontrols2, qt5script, + qt5sensors, qt5serialbus, qt5serialport, qt5svg, qt5tools, + qt5webchannel, qt5webkit, qt5websockets, qt5x11extras, + qt5xmlpatterns, quagga, redis, ruby, samba4, sdl2, snmppp, + swupdate, ti-gfx, uboot-tools, usb_modeswitch, vboot-utils, + webkitgtk, wget, wireshark, xapp_xdriinfo. + + Issues resolved (http://bugs.buildroot.org): + + 10326: mesa3d package fails to build when BR2_SHARED_STATIC_LIBS=y + 10361: python3 python-config script generates invalid includes + 10501: host-localedef fails to compile on Ubuntu 17.10 + +2017.08.1, Released October 23rd, 2017 + + Important / security related fixes. + + Webkitgtk bumped to the 2.18.x series, fixing a large number + of security issues. + + Defconfigs: galileo: fix ext4 related kernel config, bump + kernel for gcc 6.x compatibility, enable wchar support for + grub2. wandboard: correct rootfs offset + + support: Ensure gzip compression level 6 is used for git + tarballs. check-bin-arch: Correctly handle (ignore) symbolic + links. check-rpath: Also handle PIE binaries + + External toolchain: Correctly handle glibc Buildroot + toolchains built with merged /usr + + musl: fix ARMv4 build with binutils 2.27.51+, fix for + CVE-2017-15650 + + Updated/fixed packages: apache, augeas, bind, bluez5_utils, + busybox, bzip2, cmake, dnsmasq, ejabberd, gcc, git, go, ffmpeg, file, + flashrom, gd, gdk-pixbug, gnupg2, hostapd, ifupdown-scripts, + imagemagick, iucode-tool, kernel-module-imx-gpu-viv, lame, + libarchive, libcurl, libffi, libidn, libmbim, libnspr, libnss, + libressl, librsync, libsoup, libxml2, libzip, mbedtls, musl, + netplug, nginx, openvpn, pkgconf, poppler, proxychains-ng, + qemu, qt, rpi-userland, syslog, ruby, samba4, softether, + sqlite, strongswan, subversion, supertuxkart, supervisor, tcpdump, + tor, unrar, urq, vboot-utils, webkitgtk, wpa_supplicant, xen, + xmlstarlet, xlib_libXfont, xlib_libXfont2, + xserver_xorg-server, zsh + +2017.08, Released September 1st, 2017 + + Minor fixes. + + Toolchain: Don't allow internal toolchain builds for MIPS + M6201/P6600, as support for these are not yet in mainline GCC. + + Updated/fixed packages: bcusdk, connman, dialog, dnsmasq, + gnupg, grub2, iostat, iucode-tool, libgcrypt, libkcapi, + libphidget, libv4l, linux-tools, mediastreamer, minidlna, + nss-pam-ldapd, nvidia-driver, qt-webkit-kiosk, rpcbind, squid, + transmission, vde2, vim + + Updated/fixed defconfigs: + + Removed packages: simicfs. + + Issues resolved (http://bugs.buildroot.org): + + #10261: Grub2 fails to build for x86_64 + +2017.08-rc3, Released August 23rd, 2017 + + Fixes all over the tree. + + Updated/fixed packages: alsa-lib, alsa-utils, cc-tool, + dbus-cpp, e2fsprogs, elf2flt, faad2, fakeroot, gcc, git, gpsd, + gst1-validate, kvmtool, libconfuse, libepoxy, librsync, + libspatialindex, libunwind, linux, linux-headers, lua, + mariadb, mesa3d, mtd, openocd, python3, syslinux, sysvinit, + whois, xen, zmqpp. + + Updated/fixed defconfigs: ci20, socrates_cyclone5, + toradex_apalis_imx6. + + Removed defconfig: Armadeus APF9328. + + skeleton-* packages introduced in -rc1 have been renamed to + skeleton-init-* instead. + + Issues resolved (http://bugs.buildroot.org): + + #10141: Squashfs extended attribute failures + +2017.08-rc2, Released August 11th, 2017 + + Fixes all over the tree. + + Updated/fixed packages: bind, dbus, erlang-p1-xml, faad2, + ficl, gcc, gdb, glibc, jack2, libcurl, linux, linux-headers, + lua, mutt, nvme, qt5base, skeleton-common, snappy, stella, + swupdate, uclibc, valgrind, webkitgtk. + + Updated/fixed defconfigs: beaglebone_qt5, minnowboard_max, + nanopi_m1{, _plus}, olimex_a20_olinuxino_lime, qemu_sparc, + qemu_sparc64. + + The cmake-package infrastructure for host packages has been + fixed to not incorrectly detect target packages through + pkg-config. + + Issues resolved (http://bugs.buildroot.org): + + #9926: systemd-resolved.service: Failed at step NAMESPACE (systemd 233) + #10021: libqeglfs-viv-integration.so file is missing for qt5 on armv7 + #10026: lua-5.3.4: fix lua linker error in swupdate + #10146: package/skeleton-common fix recursive variable + #10156: glibc compilation fails for X86 32bits (i386) + #10201: toolchain-wrapper.c:192: (error) Memory leak: + #10221: Buildroot Support + +2017.08-rc1, Released August 2nd, 2017 + + Infrastructure: + + - The skeleton package has been split into multiple packages: + skeleton-sysv (when Busybox or SysV init are used), + skeleton-systemd (when systemd is used), skeleton-none (when + no init system is used) and skeleton-custom (when a custom + skeleton is used). Those packages, except skeleton-custom, + share common logic and data in a new package called + skeleton-common. The skeleton package becomes a virtual + package. This change allows to generate a filesystem that is + compliant with systemd expectations. + + - Support for using a read-only filesystem with systemd has + been fixed. + + - Major revamp of the gettext handling, with user-visible + effect: + + - prior to this revamp, when BR2_ENABLE_LOCALE=y, each + package could decide to enable or not NLS support. When + BR2_ENABLE_LOCALE was disabled, NLS support was forced off + by passing --disable-nls to packages. + + - after this revamp, a new BR2_SYSTEM_ENABLE_NLS option + controls whether NLS support should be enabled or not in + packages. This option defaults to disabled, which means + that now, NLS support is by default disabled in all + packages. + + Therefore, if you need NLS support in packages, you must now + explicitly enable the BR2_SYSTEM_ENABLE_NLS option. + + - The host directory no longer has a usr/ component. This + makes it much more natural to use that directory as an + externally used toolchain. For compatibility with existing + scripts, a usr -> . link is still added. + + - Hashes are now checked on tarballs by Buildroot when a + package is sourced from a Git repository. + + - Patches are no longer being downloaded from Github, since + auto-generated patches could change over time, and break + hashes. All patches that were downloaded from Github are now + stored in their respective package directories. + + - Hash files in packages can now contain hashes for the + license files contained in the package source code. This + allows to detect changes in such license files. + + - Binaries in $(TARGET_DIR) are now cleaned up from invalid + RPATHs at the end of the build. + + - A new "make sdk" target prepares $(HOST_DIR) to be + relocatable: turns RPATHs in host binaries into relocatable + ones, removes bogus RPATHs from staging binaries/libraries, + and provides a relocate-sdk script that can be executed to + relocate the SDK after installation. + + - Addition of utils/genrandconfig which generates a random + configuration based on a set of pre-defined toolchain + configurations (support/config-fragments/autobuild/) and a + random selection of packages. It is now used by the + autobuilders to generate the random configurations. + + Filesystems: + + - ext2/3/4 filesystems are now generated using mkfs.ext from + e2fsprogs instead of using genext2fs. + + Architecture: + + - Addition of support for ARM big.LITTLE variants + - Improved MIPS support, with options to select NaN encoding + and FP32 mode. + + Toolchain: + + - Switch to gcc 6.x as the default gcc version, add support + for gcc 7.x, remove support for gcc 4.8 + - Switch to binutils 2.28 as the default binutils version, add + support for binutils 2.29, remove support for binutils 2.26 + - Support added for gdb 8.0 + - uClibc-ng bumped to 1.0.26 + - CodeSourcery toolchains for x86 and SuperH have been + removed, they were using a too old glibc version + (2.17). External toolchains with glibc 2.17 or earlier are + no longer supported. + - The version selection in the glibc package has been + removed. Like musl and uClibc-ng, we now use the latest + glibc version. + - Improved support for Xtensa toolchain overlays, which can + now be downloaded. + + Tools: + + - Numerous improvements to the runtime test infrastructure + - Tests are now executed by Gitlab CI on a regular basis + - Tools that are directly useful to the user have been moved + from support/scripts/ to utils/: brmake, check-package, + get-developers, scancpan, scanpipy, size-stats-compare, + test-pkg. + + New defconfigs: A13 Olinuxino, Engicam platforms (i.CoreM6 + Solo/Dual/DualLite/Quad, RQS SOM, GEAM6UL SOM, Is.IoT MX6UL + SOM), Nano Pi M1 (Plus), OrangePi Zero and Plus. + + New packages: azure-iot-sdk-c, cracklib, dt-utils, easy-rsa, + erlang-jiffy, erlang-p1-oauth2, erlang-p1-xmpp, + ifupdown-scripts, irrlicht, kodi-inputstream-adaptive, + kodi-inputstream-rtmp, kvazaar, let-me-create, libloki, + libpwquality, libressl, libspatialindex, libva-utils, + linuxconsoletools, linuxptp, luaossl, lua-sdl2, lua-stdlib, + lsscsi, paxtest, pcre2, pixz, python-asn1crypto, + python-backports-shutil-get-terminal-size, python-bcrypt, + python-cheroot, python-h2, python-hpack, python-hyperframe, + python-hyperlink, python-ipython-genutils, python-pathlib2, + python-pickleshare, python-priority, python-portend, + python-scandir, python-systemd, python-tempora, + python-traitlets, python-typepy, qt5virtualkeyboard, + ratpoison, rauc, refpolicy, rhash, sdl2_mixer, sdl2_net, + xr819-xradio, zstd + + Removed packages: cloog, input-tools, mke2img + + Issues resolved (http://bugs.buildroot.org): + + #7892: systemd-journald is broken + #9341: avahi-utils does not compile with uClibc + libglib2 + #9441: Link BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY to + BR2_ENABLE_DEBUG + #9746: ext4 image generated by Buildroot is not working + properly with U-Boot + #9886: Build fails with "unexpected EOF while looking for + matching `"'" if PATH contains a newline + #9891: parted 3.1 => 3.2? + #9911: qt5 does not build on sparc + #9916: qt5 does not build on + arm-buildroot-linux-uclibcgnueabihf for ARMv8 cores + #9936: Host QEMU does not build with SDL support because of + pkg-config + #9941: nodejs option disappears for arm + #9951: SCANCPAN failure + #9966: util-linux-2.30/.stamp_built' failed + #9976: License file for package 'rtl8821au' incorrect + #9991: SGX Error implicit declaration of function + ‘dmac_map_area’ + #10011: wget does not work from Buildroot + #10036: Buildroot builds Raspbian Jessie headless image + presenting incorrect prompt + #10051: make: *** No rule to make target + 'raspberrpi3_defconfig'. Stop reported with Buildroot + v2017.05.1 + #10056: No .config file was produced in /buildroot folder + #10061: gcc5.4 buildroot toolchain for powerpc libsanitizer + failure + #10071: fakeroot: replace hard-coded paths in post install + #10076: Makefile:4113: recipe for target 'all-gcc' failed + #10091: gcc7.1 does not build with graphite support due to old + isl + #10121: webkit without the multimedia option causes build + error + +2017.05.2, Released July 27th, 2017 + + Important / security related fixes. + + Webkitgtk bumped to the 2.16.x series, fixing a large number + of security issues. + + host-aespipe compile fix for Debian/Gentoo/Ubuntu toolchains + which default to PIE mode. + + Updated/fixed packages: aespipe, apache, bind, binutils, + busybox, ccache, collectd, dieharder, efibootmgr, efivar, + expat, ffmpeg, gcc, heimdal, iproute2, irssi, libglib2, + libmemcached, libosip2, libtirpc, libxml-parser-perl, + linux-fusion, linux-zigbee, mpg123, orc, pcre, php, protobuf, + pulseaudio, python-setproctitle, qt5base, rpi-firmware, + samba4, syslinux, systemd, spice, tcpdump, tiff, uboot-tools, + webkitgtk, x265, xserver_xorg-server, xvisor + + Issues resolved (http://bugs.buildroot.org): + + #10061: gcc5.4 buildroot toolchain for powerpc libsanitizer... + +2017.05.1, Released July 4th, 2017 + + Important / security related fixes. + + Update support/scripts/scancpan to use METACPAN v1 API as v0 + has been shutdown. + + Update support/scripts/mkusers to handle setups where + /etc/shadow is a symlink. + + External toolchain: Don't create musl dynamic loader symlink + for static builds. + + Setlocalversion: Correct detection of mercurial revisions for + non-tagged versions. + + Defconfigs: at91sam9x5ek_mmc: workaround boot rom issue. + + Updated/fixed packages: apache, automake, bind, botan, c-ares, + dhcp, expat, fcgiwrap, gcc, gdb, gesftpserver, glibc, glmark2, + gnutls, gst1-plugins-bad, imagemagick, imx-uuc, intltool, + iperf, ipsec-tools, irssi, kmod, libcurl, libgcrypt, libmad, + libnl, lugaro, mosquitto, mpg123, ncurses, nodejs, ntp, + openssh, openvpn, pngquant, python-simplegeneric, qt5base, + qt5multimedia, rtl8821au, socat, spice, systemd, tor, trinity, + tslib, vlc, x264, xen, xlib_libxshmfenc, xserver_xorg-server + + Issues resolved (http://bugs.buildroot.org): + + #9976: License file for package 'rtl8821au' incorrect + +2017.05, Released May 31st, 2017 + + Minor fixes. + + External toolchain: musl dynamic linker symlink for mips-sf + corrected. + + Updated/fixed packages: agentpp, bash, exim, hans, madplay, + qpid-proton, rtl8188eu, snmppp, stm32flash, strongswan, sudo, + xen + + Issues resolved (http://bugs.buildroot.org): + + #9906: genimage: Disk full + +2017.05-rc3, Released May 30th, 2017 + + Fixes all over the tree. + + ARC toolchain bumped to 2017.03 + + Runtime testing improvements and cleanups. + + Updated/fixed packages: acpica, armadillo, audiofile, c-icap, + cppcms, dhcp, docker-engine, dropbear, elfutils, erlang, + fbgrab, ffmpeg, flashrom, ftop, gnutls, google-breakpad, + keepalived, kodi, libcdio, libepoxy, libev, libminiupnpc, + libqmi, libtasn1, libv4l, mariadb, mono, mosh, mosquitto, + mxml, ntp, opencv, openpowerlink, oracle-mysql, popt, + pulseview, python-enum34, rabbitmq-c, redis, samba4, stella, + xen + + Removed packages: firejail, ola + + Issues resolved (http://bugs.buildroot.org): + + #9871: fbgrab 1.3 won't build with BR2_REPRODUCIBLE set + #9876: aarch64 support with gcc 4.8 toolchain + #9896: host-gcc-initial error downloading because incorrect URL + +2017.05-rc2, Released May 17th, 2017 + + Fixes all over the tree. + + ARC toolchain bumped to 2017.03-rc2 + + Updated/fixed packages: bluez_utils, boost, clamav, daemon, + efibootmgr, efl, espeak, expedite, faketime, ffmpeg, fxload, + git, gpsd, kvm-unit-tests, libcdio, libv4l, lua, mke2img, + mpir, mpv, odroid-scripts, openblas, opencv3, openvpn, php, + postgresql, protobuf, qt5declarative, qwt, radvd, rpcbind, + rtmpdump, strongswan, sudo, ltp-testsuite, uclibc-ng-test, + vlc, x11vnc, xfsprogs + + Issues resolved (http://bugs.buildroot.org): + + #9796: source-check broken for Git downloads + #9866: BASE_DIR usage + +2017.05-rc1, Released May 8th, 2017 + + Fixes all over the tree and new features. + + Infrastructure: + + - Installed binaries are now checked for correct architecture + to catch natively built binaries or binaries built for other + architecture variants. + + - Luarocks infrastructure improvements to extraction handling, + support for upstream name != Buildroot package name. + + - 'make printvars' output format has changed to make it easier + to use in scripts. It now has options to quote the variables + and to show the expanded/unexpanded values. + + - Automatic ext2 rootfs size calculation has been removed. The + logic was not working working reliable in all setups as it + depends on the host filesystem behaviour, so instead now the + size has to be specified explicitly (defaults to 60MB). + + - The git download infrastructure now ensures that GNU format + tar files are created. + + - Fixed a variable clashing issue in the mkusers script with + internal bash variables. + + - Fakeroot now links against libacl to fix issues on + distributions using acls. + + - Correct permissions for /dev/pts/ptmx when systemd is used + with recent glibc versions. + + - br2-external: Improve error reporting. + + - A wrapper script for genimage has been added in + support/scripts/genimage.sh for easy use of genimage from + post-image scripts. + + - A script to check for common style issues in new packages + before submitting has been added in support/scripts/check-package + + - Defconfigs are now tested by gitlab-CI instead of Travis: + https://gitlab.com/buildroot.org/buildroot + + - Infrastructure for runtime testing has been added to + support/testing + + Toolchain: + + - External linaro toolchains updated to 2017.02, ARC toolchain + updated to 2017.03-rc1, NIOSII CodeSourcery to 2017.05 + + - A number of fixes and improvements to the external toolchain + handling, including C library detection, multilib and ld.so + handling + + - Glibc 2.25 and uClibc-ng 1.0.24 added, wordexp support enabled + for uClibc-ng + + - Binutils 2.28 added and default changed to 2.27 + + + Architectures: + + - Support for the C-SKY architecture has been added. + + + License handling: + + - The package license markings for legal info now uses the + SPDX short identifiers for the license string where possible. + + - License info has been improved / added for a number of packages. + + + Misc: + + - Cmake 3.7.x installed on the host is no longer ignored as a + workaround for the RPATH issues has been implemented. + + - Docker-engine can now be built statically on an otherwise + dynamic linked build for docker-in-docker setups. + + - U-Boot now supports out-of-tree device trees, similar to + Linux + + - Nodejs 0.10.x support (and with it, support for -source-check fixed for packages from git. + + External toolchain: musl dynamic linker symlink for mips-sf + corrected. + + Updated/fixed packages: armadillo, audiofile, bash, + bluez_utils, cppcms, dbus, dhcp, dropbear, efibootmgr, efl, + elfutils, faketime, fbgrab, flashrom, ftop, gdb, git, + google-breakpad, gpsd, hans, kvm-unit-tests, kyua, libev, + libmicrohttpd, libminiupnpc, libtasn1, libubox, ltp-testsuite, + lua, madplay, mariadb, mono, mosquitto, mxml, ntp, + nvidia-driver, openblas, openvpn, oracle-mysql, picocom, popt, + postgresql, pulseview, qt5base, qwt, rabbitmq-c, redis, + rpcbind, rtmpdump, samba4, strongswan, sudo, vlc + + Issues resolved (http://bugs.buildroot.org): + + #9796: source-check broken for Git downloads + #9871: fbgrab 1.3 won't build with BR2_REPRODUCIBLE set + +2017.02.2, Released May 1st, 2017 + + Important / security related fixes. + + Use HTTPS for the Codesourcery external toolchains as the HTTP + URLs no longer work. + + Updated/fixed packages: bind, busybox, dovecot, freetype, + ghostscript, glibc, granite, hiredis, icu, imagemagick, + gst-plugins-base, gst1-plugins-base, libcroco, libcurl, libnl, + libnspr, libnss, libsamplerate, libsndfile, libunwind, + minicom, mplayer, mpv, nodejs, python-django, python-pyyaml, + python-web2py, samba4, syslinux, systemd, tiff, trinity, + uboot, wireshark, xen + + Issues resolved (http://bugs.buildroot.org): + + #9791: Python searches for packages in the user site directory + +2017.02.1, Released April 4th, 2017 + + Important / security related fixes. + + Fix a variable clashing issue in the mkusers script with + internal bash variables. + + Improve external toolchain version detection. + + Correct permissions for /dev/pts/ptmx when systemd is used + with recent glibc versions. + + Fix python module name clash for graph-depends. + + Fakeroot now links against libacl to fix issues on + distributions using acls. + + Ensure that the git download infrastructure creates GNU format + tar files. + + br2-external: Improve error reporting. + + Updated/fixed packages: acl, apr, audiofile, busybox, cairo, + dbus-cpp, dbus-glib, dbus-triggerd, domoticz, elfutils, + fakeroot, filemq, fmc, gdb, git, gnutls, gst-ffmpeg, + gst1-plygins-bad, harfbuzz, htop, imagemagick, jasper, libcec, + libiio, libplatform, librsvg, libselinux, libsidplay2, libsoc, + libwebsockets, libxkbcommon, linux-firmware, logrotate, + lpt-testsuite, lttng-libust, mariadb, mbedtls, memcached, + mesa3d, mpd, mplayer, nbd, ncftp, ntp, openssh, opentyrian, + pcre, perl-gd, python, qt5base, rpi-userland, rpm, samba4, + skalibs, slang, sngrep, squashfs, syslog-ng, taglib, + tcpreplay, tor, upmpdcli, wget, wireshark, + xdriver_xf86-video-vmware, xlib_libXv, zmqpp + + Issues resolved (http://bugs.buildroot.org): + + #9456: mkusers script bash errors + +2017.02, Released February 28th, 2017 + + Minor fixes, mainly fixing autobuilder issues. + + Don't use cmake 3.7.x from the build host as it is also + affected by the RPATH handling issues, and instead build our + own if needed. + + Updated/fixed packages: assimp, classpath, genimage, mplayer, + mpv, openocd, python-libconfig, qt5base, qt5quickcontrols, + vlc, xterm + +2017.02-rc3, Released February 26th, 2017 + + Fixes all over the tree. + + Cmake reverted to version 3.6.3 to workaround regressions + related to RPATH handling. + + Updated/fixed packages: bctoolbox, berkeleydb, binutils, + btrfs-progs, classpath, directfb, glibc, gstreamer1, + gst1-plugins-{base,good,bad,ugly}, gst1-libav, + gst1-rtsp-server, gst1-validate, gst-omx, htop, libcurl, + libepoxy, libimxvpuapi, libpcap, libuv, ncurses, openssh, + oracle-mysql, poco, python, qt5base, qt5webkit, sslh, synergy, + trousers, uclibc-ng-test, util-linux, vlc, xfsprogs + + Issues resolved (http://bugs.buildroot.org): + + #9251: Shared C++ libraries for Microblaze results in Segmentation... + #9456: mkusers script bash errors + #9506: Collectd 5.7.0 fails to build with libcrypt + #9581: VagrantFile provisioning step fails due to issue with grub-pc + #9586: usbmount: usbmount slows down the system... to a state of... + #9616: CMake host packages cannot provide CONF_ENV + #9641: Need raptor package installed in staging + #9671: stunnel build error + +2017.02-rc2, Released February 20th, 2017 + + Fixes all over the tree. + + Support for SOURCE_DATE_EPOCH in the toolchain wrapper for + older gcc versions for reproducible builds has been + (temporarily) reverted because of licensing compatiblity + concerns. + + Defconfigs: SD card generation fix for the Udoo Neo board + + Infrastructure to handle .lz compressed tarballs added, and + affected packages updated to use it. + + Updated/fixed packages: bctoolbox, bind, canelloni, + cbootimage, ccache, classpath, cups, dbus, ddrescue, directfb, + ed, erlang, gcc, gdb, glmark2, gstreamer, gstreamer1, hiredis, + kmod, kmsxx, lcdapi, libasplib, libgpiod, libnss, libraw, + libv4l, mesa3d-headers, mosquitto, mpd, mpv, musl, ntfs-3g, + ocrad, openswan, postgresql, qt5base, qt5quickcontrols, redis, + riemann-c-client, samba4, sunxi-mali, tcping, trousers, + uclibc, util-linux, vim, wavpack, wget, wiringpi, xfsprogs, + xserver_xorg-server + + Issues resolved (http://bugs.buildroot.org): + + #8941: Valgrind fails to build with stack protection turned on + #9291: perl: SysV message queues not configured, even if available + #9651: libxcb-1.12 built Error + #9656: util-linux: schedutils doesn't build on target w/o enabl... + #9666: qt5quickcontrols install fails + +2017.02-rc1, Released February 11th, 2017 + + Fixes all over the tree and new features. + + Infrastructure: + + - numerous improvements to support reproducible builds + + - new waf-package package infrastructure to support packages + that use the Waf build system. 6 packages converted to + this infrastructure. + + - add option _PREFER_INSTALLER to the perl package + infrastructure + + Architecture: + + - add support for the OpenRISC CPU architecture + + - merge description of the ARM and ARM64 options, and add + support for selecting a specific ARM64 core + + Toolchain: + + - major rework of the external toolchain support. It is now + split into several packages, one per external toolchain, + and a common infrastructure. + + - important fix for musl to prevent a conflict between musl + and kernel headers (fixes the build of numerous packages + with musl) + + - uClibc-ng bumped to 1.0.22, and therefore enable uClibc + for ARM64, mips32r6 and mips64r6 + + - add gdb 7.12.1, and switch to gdb 7.11 as the default + + - Linaro toolchains updated to 2016.11, ARC toolchain + components updated to arc-2016.09, MIPS Codescape + toolchains bumped to 2016.05-06, CodeSourcery AMD64 and + NIOS2 toolchains bumped + + - remove Analog Devices toolchain for the Blackfin + architecture, remove pre-built musl toolchains from + musl.codu.org + + New defconfigs: Freescale i.MX23EVK, Qemu OpenRISC emulation, + Qemu NIOS2 emulation, Grinn chiliBoard, Freescale i.MX6Q + SabreSD, BeagleBoard X15, OrangePi One, ARC HS38 HAPS + + New packages: angular-websocket, aubio, bctoolbox, darkhttpd, + ddrescue, easydbus, fakedate, git-crypt, hiredis, ifenslave, + jsmn, libgpiod, libgsm, linux-syscall-support, mariadb, mimic, + nginx-dav-ext, nmon, opkg-utils, policycoreutils, + pru-software-support, python-arrow, python-attrs, + python-babel, python-bitstring, python-chardet, + python-constantly, python-flask-babel, python-gunicorn, + python-incremental, python-jsonschema, python-logbook, + python-markdown2, python-mbstrdecoder, python-mutagen, + python-pathpy, python-pudb, python-pyqrcode, + python-pytablereader, python-setuptools-scm, python-sh, + python-toml, python-vcversioner, python-whoosh, + raspberrypi-usbboot, riemann-c-client, rtl8723bs, skalibs, + sslh, sngrep, ti-cgt-pru, uclibc-ng-test, udpxy, uhttpd, + upower, ustream-ssl, waf, xlib_libXfont2 + + Removed packages: perl-db-file, snowball-hdmiservice, + snowball-init + + Tooling: addition of a test-pkg script to help contributors + build test their package. + + Issues resolved (http://bugs.buildroot.org): + + #8946: Valgrind fails to build with stack protection turned on + #9461: odroidc2 - toolchain Linaro AArch64 2016.11 compile error + #9466: VIM_REMOVE_DOCS removes rgb.txt + #9486: xorg-server 1.19 fails to compile for glibc with systemd init (x86_64) + #9501: eudev fails to build with older kernel headers + #9526: Embedded NPM fails to start with "no such file or directory" error + #9541: Platform drivers autoloading from info in device tree does not work + #9546: seems BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS do nothing + #9551: Coreutils fails to build target src/src_libsinglebin_pinky_a-pinky.o + #9566: [kmod] Compilation fails with uclibc + #9571: buildroot fails while building opencv for arm64 platform + #9576: External tree with BR 2016.11 does not work anymore + #9606: xorg-server cannot build for ARM target + +2016.11.3, Released March 9th, 2017 + + Important / security related fixes. + + Updated/fixed packages: bind, dbus, gnutls, imagemagick, + lcms2, libcurl, ntfs-3g, ntp, openssl, php, quagga, redis, + squid, stunnel, tcpdump, vim, wavpack, wireshark, xlib_libXpm + +2016.11.2, Released January 25th, 2017 + + Important / security related fixes. + + A fix for BR2_EXTERNAL trees referenced using relative paths, + which broke in 2016.11. + + Updated/fixed packages: bind, docker-engine, gd, gnutls, go, + imagemagick, irssi, libpng, libvncserver, musl, opus, php, + php-imagick, rabbitmq-server, runc, wireshark, + + Issues resolved (http://bugs.buildroot.org): + + #9576: External tree with BR 2016.11 does not work anymore + +2016.11.1, Released December 29th, 2016 + + Important / security related fixes. + + Updated/fixed packages: apache, cryptopp, docker-engine, + dovecot, exim, gdk-pixbuf, libcurl, libupnp, links, monit, + nodejs, openssh, php, python, python-bottle, samba4, squid, + uboot, vim, wireshark, xorg-server uboot + + Issues resolved (http://bugs.buildroot.org): + + #9466: VIM_REMOVE_DOCS removes rgb.txt + +2016.11, Released November 30th, 2016 + + Minor fixes. + + Updated/fixed packages: bzip2, gcc, jasper, sane-backends, + uboot, uclibc + + Issues resolved (http://bugs.buildroot.org): + + #9451: packages/postgresql/postgresql.mk contains wrong POST... + +2016.11-rc3, Released November 28th, 2016 + + Fixes all over the tree, including a number of security fixes. + + The move from fakeroot to pseudo unfortunately brought a + number of issues. The SELinux issue described in #9386 which + triggered the move to pseudo has been investigated further and + a workaround implemented and the pseudo changes reverted. + + Linux kernel: update default to 4.8.11. + + Defconfigs: Updates/fixes for imx28ek, mx6udoo, imx6ulpico, + olimex a20 olinuxino lime mali, roseapplepi, synopsis aarch64 + vdk, axs101, axs103 and hs38 smd vdk. + + Updated/fixed packages: autossh, chrony, dosfstools, + dtv-scan-tables, e2fsprogs, gcc, gdb, gnuchess, gnuradio, + gpsd, gst1-plugins-bad, gst1-plugins-good, imagemagick, + kvm-unit-tests, libfribi, libuv, mesa3d, mpfr, mplayer, mpv, + ntp, ola, olsr, openblas, openjpeg, openssh, postgresql, + ptpd2python3, qemu, qextserialport, qt5base, quagga, xqwt, + taskd, tiff, tremor, trousers, udisks, uclibc, wireshark, + xapp_xload, xenomai, xmlstarlet + + Issues resolved (http://bugs.buildroot.org): + + #9386: ubinize fails with or without custom config + #9431: A misspelling + #9446: make raspberrypi3_defconfig compilation failure + +2016.11-rc2, Released November 13th, 2016 + + Fixes all over the tree. + + Architecture: add support for MIPS XBurst cores; remove MIPS + support for M5100 cores. + + Updated/fixed packages: mesa3d, lttng-babeltrace, tinyalsa, pseudo, + czmq, libxml2, makedevs, binutils, kvm-unit-tests, libnss, privoxy, + qemu, ser2net, net-tools, ffmpeg, assimp, libmpeg2, ccache, mpv, + libxslt, python, python3, php, valgrind, guile, domoticz, efl, + jasper, kvmtool, go, wget, sane-backends, weston, tinymembench, + strace, openjpeg, lcms2, quota. + + Linux kernel: update default to 4.8.7. + + CMake support: fix cmake wrapper to properly pass NDEBUG flag. + + Filesystems: use a wrapper to pseudo, to better mimick the behaviour + of fakeroot; makedevs no longer breaks of the destination already + exists and is of the correct type/major/minor. + + Defconfigs: a few legacy and broken defconfigs have been removed + because they now fail to build: kb9202_defconfig, mini2440_defconfig, + freescale_p2020ds, qmx6, calao*, atmel_sama5d4ek. Other defconfigs + have been updated: nanopi-neo, olimex_a20_olinuxino_lime_mali, + armadeus_apf51, armadeus_apf28, freescale_imx31_3stack, ci20, + olimex_a20_olinuxino_lime2, atmel_at91sam9260eknf, + atmel_at91sam9rlek, atmel_at91sam9g20dfc, atmel_at91sam9g45m10ek, + atmel_sama5d3xek. + +2016.11-rc1, Released November 3rd, 2016 + + Fixes all over the tree and new features. + + It is now possible to specify multiple BR2_EXTERNAL + directories. The required files in a BR2_EXTERNAL directory + have changed to accomodate this feature. Refer to the + documentation for details of how to update them. External + trees now have a name and a description. Also, it is possible + to override a defconfig in the external tree. + + The default skeleton now uses UID 65534 for the "nobody" + user instead of UID 99, like most distros do. See + https://lwn.net/Articles/695478/ for a complete discussion. + Programs and configuration files that explicitly refer to UID + 99 will have to be updated. + + When the build environment already has a suitable cmake version + (3.1 or later), that one will be used instead of building + host-cmake. This can speed up the build significantly. + + The ExtUtils::MakeMaker perl module is now required in the + build environment. + + An additional check is done during the build that files are + not installed in the output directory within the output + directory. This happens e.g. when the target directory is + contained both in --prefix and in DESTDIR. The build will + terminate with an error message that specifies which package + and which file caused the failure. + + The concept of "deprecated packages" and the BR2_DEPRECATED + option have been removed. Instead, packages are removed + immediately. Packages are only removed when they don't work + for some reason. If you still need a removed package and + you have a solution for the problem(s) that caused the + removal, please contribute it. + + Architecture: support for sh64 removed, improved support for + MIPS core selection. + + Toolchain: support for musl powerpc64le, mips64 and mipsr6 + toolchains, ARC toolchain components updates, gcc 6.x series + bumped to 6.2.0, default binutils version switched to 2.26, + default gcc version switched to gcc 5.x, Linaro toolchains + updated, uclibc-ng bumped to 1.0.19. GCC is now always built + with TLS support. Checking of unsafe compiler options (that + point to host directories) has been extended with -isystem, + -idirafter and -iquote. + + Package infrastructure: new variable $(PKG)_DL_OPTS, addition + of -show-rdepends to list reverse dependencies, and + -graph-rdepends to graph reverse dependencies. Linux tools + are now in a separate linux-tools package instead of in the + kernel build. Fakeroot has been replaced by pseudo. + + CMake support: the toolchainfile.cmake file now provides a + definition of the CMAKE_BUILD_TYPE variable. The + toolchainfile.cmake also no longer forces the compiler/linker + flags defined by Buildroot. + + New defconfigs: WaRP7, Solidrun's MX6 Cubox/Hummingboard, + TS-4900, Grinn's liteBoard, Udoo MX6Q/DL, Qemu ARM noMMU, + BeagleBone Qt5 demo, Digilent Zybo, FriendlyARM Nanopi NEO. + + New packages: arm-trusted-firmware, amd-catalyst, atop, aufs, + aufs-util, fwts, gst1-rtsp-server, libglob, libite, mfgtools, + mksh, motion, paho-mqtt-c, php-amqp, pseudo, python-couchdb, + python-crcmod, python-cssutils, python-docutils, + python-futures, python-mwclient, python-mwscrape, + python-mwscrape2slob, python-pyelftools, python-pyicu, + python-pylru, python-pyqt5, python-requests-toolbelt, + python-simpleaudio, python-slob, rabbitmq-server, shapelib, + vdr, vdr-plugin-vnsiserver, vexpress-firmware, xvisor, iio and + gpio linux tools. + + Removed packages: binutils 2.24, fakeroot, gcc 4.7, ipkg, + kodi-addon-xvdr, libgail, sstrip, torsmo, webkit, webkitgtk24, + wvdial, wvstreams. + + Documentation: the list of packages that was present in the + Buildroot manual has been removed. + + Legal info: the "licenses.txt" file that concatenates all + license texts is no longer generated - it was not considered + useful. The manifest.csv contains an empty cell instead of + "not saved" when no license file is available. + + Other: addition of a DEVELOPERS file listing developers taking + care of packages or architectures. + + Issues resolved (http://bugs.buildroot.org): + + #7802: host-python build hangs compiling getbuildinfo.o + #8206: mplayer uses host xorg development files + #8516: mkcubiecard.sh uses outdated sfdisk switch -D + #8536: Building sudo with PAM results in unusable sudo + #8646: check-host-rpath script returns false positives when rpath + contains symlink + #8696: xdriver_xf86-input-mouse install header files in target + directory + #8811: rp-pppoe - generated scripts commands use HOST pathnames, + not necessarily TARGET + #8846: Orphaned/missing toolchain borks eclipse plugin + #8856: python tornado runtime wasn't met on buildroot 2016.02 + #8901: gcc failes to build if fortran is enabled + #8916: LDFLAGS pass to openssh + #8941: "ls" of an NFSv4 share only works when pumped through strace + #8946: Valgrind fails to build with stack protection turned on + #9021: Kodi - Broken: Illegal instruction (core dumped) + #9096: rootfs.ubi not created + #9111: glibc 2.23: libmvec.so not copied + #9176: minnowboard : USB not mounted + #9196: raspberry pi 3 default build seem broken + #9201: Permission denied make: *** [core-dependencies] Error 126 in + Buildroot-2015.08.1 + #9216: log4cpp package build fails to build within install + #9221: Kodi needs "Python .py and .pyc support" otherwise it crashes when + pressing buttons. + #9229: Firefly boot fails with: "failed to find part:boot" + #9256: [Config file] New device: Odroid-U2/U3 + #9296: Buildroot Fails on applying patches + #9301: U-boot fails to build with default zynq_zed_defconfig configuration + #9316: U-boot fails to build if libssl-dev is not installed + #9321: Vanilla libcrypt++ v5.6.3 doesn't allow to work Nvidia Tegra's + flash utility (tegrarcm) + #9326: Odroid-C2 build results in non-bootable image + #9336: Improve iconv support for external toolchain based builds + #9356: gdb package + #9366: no link rootfs.ext4 -> rootfs.ext2 + #9371: openssl: download failes with "Only allow downloads from primary + download site" + local server + #9381: check-host-rpath issues + #9386: ubinize fails with or without custom config + +2016.08, Released September 1st, 2016 + + Minor fixes. + + Toolchain: ARC tools updated to arc-2016.09-eng010. + + Updated/fixed packages: libshout, luajit, mpd, mplayer + + Issues resolved (http://bugs.buildroot.org): + + #7520: CodeSourcery toolchain ARM: C++11 std::exception_ptr.. + #8341: Getting EGL Error: Could not create the egl surface:.. + #9121: gst1-imx for i.MX6 compile failed, cannot find PXP, .. + +2016.08-rc3, Released August 29th, 2016 + + Fixes all over the tree. + + Toolchain: C++ support for the internal blackfin toolchain + re-enabled. + + Architecture: Default to bf532 CPU variant for blackfin, + Fix flat one memory region support for m68k and disable flat + seperate data support because of compatibility issues. + + Defconfigs: Minnowboard and Raspberrypi: Fix errors with + post-build scripts when systemd is used. + Zynq microzed/zc706/zed: Fix u-booot configuration. + + netbsd-queue package extended and renamed to + musl-compat-headers. With this, a number of musl compatibility + patches are no longer needed. + + Updated/fixed packages: aircrack-ng, android-tools, babeld, + bcusdk, binutils, boa, busybox, connman, cpupower, + docker-engine, domoticz, elf2flt, ffmpeg, fwup, gcc, + glib-networking, gnupg, hplip, igd2-for-linux, imagemagick, + imx-uuc, iputils, jack2, kismet, kmsxx, libaio, libamcodec, + libconfuse, libffi, libfreeimage, libgcrypt, libgpg-error, + libiio, libraw, libsepol, libserialport, libxmlrpc, linknx, + linux-pam, lirc-tools, lldpd, logrotate, lshw, musl, ncurses, + neon, nettle, norm, ntfs-3g, openblas, openmpi, openswan, + pinentry, pixman, protobuf, python-meld3, qlibc, qt, qt5base, + quagga, rpcbind, rt-tests, runc, sane-backends, sconeserver, + squeezelite, stella, tftpd, tinycbor, tinydtls, trace-cmd, + trousers, tstools, uboot-tools, uclibc, ulogd, ustr, vlc, + webkitgtk, wireshark, xdriver_xf86-video-intel + + Issues resolved (http://bugs.buildroot.org): + + #9101: Error on support/download/git with system git older than 1.8.4 + #9181: Compiling linux kernel fails if BR2_LINUX_KERNEL_TOOL_CPU.. + +2016.08-rc2, Released August 17th, 2016 + + Fixes all over the tree. + + Toolchain: disable broken C++ support for internal blackfin + toolchains, ARC toolchain bumped to arc-2016.09-eng008 (GCC 6) + to fix various issues. + + System: Zoneinfo is available for the musl C library as well. + + Updated/fixed packages: am33x-cm3, axel, barebox, bdwgc, + blktrace, cairo, dante, enlightenment, fbterm, ffmpeg, flex, + fontconfig, gcc, gmp, gnuplot, gnuradio, gst1-imx, hidapi, + inotify_tools, iproute2, kmsxx, lftp, libaio, libcofi, + libical, libpjsip, libsidplay2, libunwindow, libxml2, + linux-zigbee, lttng-libust, mpv, mtd, ncdu, netplug, ntp, + openblas, openipmi, owfs, php, poco, procps, qt, quota, + sg3_utils, spidev_test, systemd-bootchart, thrift, + uboot-tools, uclibc, webrtc-audio-processing, wayland, weston, + xdriver_xf86-video-savage, xserver_xorg-server, xen + + Issues resolved (http://bugs.buildroot.org): + + #9136: make graph-size fails with "ValueError: too many values to.. + #9151: qt: fix build with ALSA >= 1.1.x + #9156: qt: Fix missing runtime Qt3Support dependency + #9161: modsetting patch not applied to xserver 1.18.4 + #9166: Missing overlays directory in VFAT image for raspberry pi 3 + +2016.08-rc1, Released August 6th, 2016 + + Fixes all over the tree and new features. + + Toolchain: Fortran support added. eglibc support removed, musl + support no longer experimental. Blackfin and Microblaze + support for internal uClibc-ng toolchain, m68k/coldfire + improvements. The check for unsafe (build host) directories + access (/usr/include and /usr/lib) is now enabled by default. + Unused locales are now purged by default to save space (and + the default list of locales shrunk). The option to control + this has now moved from the toolchain menu to system + configuration. + + Legal info improvements: sources are now hardlinked instead of + copied if possible to save space. Patches and extra downloads + are also saved. + + An experimental configuration knob (BR2_REPRODUCIBLE) has been + added to make the builds more reproducible (E.G. less + differences in the binary output between builds of the same + configuration). This is still work in progress. + + An option to execute a custom script inside the fakeroot + environment used to the generate the filesystem (E.G. to tweak + permissions or similar) has been added. + + Git support now supports git submodules if + _GIT_SUBMODULES is enabled. + + Hash files for integritry validation have been added for all + packages. + + Scanpypi utility to help creating packages from the Python + package index (pypi) has been added. + + The makedevs utility now has support for adding file + capabilities using extended attributes. + + New defconfigs: Arcturus uCP1020, Atmel sama5d{2,3,4} xplained + development configs, Blackfin GDB simulator, Linksprite + pcDuino, Minnow Board Max graphical demo, NXP i.MX25 PDK, + i.MX51 EVK, i.MX6UL Pico, i.MX7 sabresd, QEMU MIPS32r6{,el} and + MIPS64r6{,el} malta, Roseapple Pi, Samsung Snow chromebook, + Toradex Apalis i.MX6 COM, TS-4800, x86-64 PC BIOS and EFI + demos. A number of defconfigs have been updated and extended + to generate SD card images. Synopsys HS38 VDK defconfig removed. + + New packages: 4th, acpica, acpitool, alljoyn, alljoyn-base, + alljoyn-tcl, alljoyn-tcl-base, argparse, babeld, batman-adv, + circus, dante, docker-containerd, docker-engine, domoticz, + efibootmgr, efivar, ficl, fwup, gsettings-desktop-schemas, + gtksourceview, gupnp-dlna, gupnp-tools, igd2-for-linux, + jemalloc, kmsxx, lapack, lft, libaacs, libamcodec, libbdplus, + libcoap, libdvdcss, libebur128, libfastjson, libminiupnpc, + libnatpmp, libpqxx, libuio, libvdpau, log4cpp, minissdpd, + mxsldr, nginx-nasxi, nginx-upload, ninja, nodm, odroid-mali, + odroid-scripts, omxplayer, openblas, openmpi, openzwave, + p7zip, pdbg, python-argh, python-dataproperty, + python-dateutil, python-dialog3, python-dicttoxml, + python-dominate, python-engineio, python-flask-jsonrpc, + python-flask-login, python-humanize, python-pathtools, + python-pathvalidate, python-pillow, python-prompt-toolkit, + python-pytablewriter, python-pytz, python-scapy3k, + python-sdnotify, python-socketio, python-tomako, + python-ubjson, python-u-msgpack, python-watchdog, + python-wcwidth, python-xlrd, python-xlsxwriter, + python-xlutils, python-xlwt, rs485conf, runc, sdl2_gfx, + sdl2_image, sdl2_ttf, shellinabox, sphinxbase, stella, + supertuxkart, systemd-bootchart, tekui, terminology, tinycbor, + tinydtls, ti-sgx-demos, ti-sgx-km, ti-sgx-um, tunctl, wavemon, + wiringpi, xen + + Deprecated packages: ipkg, sstrip + + Removed packages: sunxi-mali-prop + + Issues resolved (http://bugs.buildroot.org): + + #8931: segment fault when compile argp-help.c using aarch64-bu... + #8966: eglfs error. buildroot don't compile the library libeglfs.so + #8971: build for beaglebone fails + #8986: qt5imageformats fails to build on AArch64 + #8991: grub2 fails to compile + #9001: Nodejs option not available + #9006: gcc with c++ support v4 and v5 fail to compile on fedora 24 + #9016: arceb-buildroot-linux-uclibc ld uses incorrect default format + #9066: 8139TOO - faulty behaviour + #9086: Syntax Error (missing ")" in boot/uboot/uboot.mk on line 203) + #9091: U-Boot fails to boot with large ramdisk + +2016.05, Released May 31st, 2016 + + Minor fixes. + + External toolchain: Fix for symlink handling when copying + links to target. + + Updated/fixed packages: gcc, grantlee, gst-ffmpeg, + ipsec-tools, iptraf-ng, libcurl, libdrm, libsigsegv, ltris, + lttng-babeltrace, mbedtls, mesa3d, moarvm, mplayer, mtools, + net-tools, openpowerlink, pulseview, rpm, tinyalsa, + xdriver_xf86-video-fbturbo, xserver_xorg-server + +2016.05-rc3, Released May 26th, 2016 + + Fixes all over the tree. + + Tweaks for SSP handling for external toolchains. + + Updated/fixed packages: aircrack-ng, bluez5_utils, connman, + cups, erlang-p1-stringprep, expat, ffmpeg, flann, flannel, go, + gst1-libav, hidapi, hplip, iptraf-ng, jamvm, kodi, + kodi-screensaver-matrixtrails, libcurl, libepoxy, libgpgme, + libsemanage, libxslt, liquid-dsp, ltris, lxc, mesa3d, midori, + mpg123, mtr, openpgm, openpowerlink, oprofile, php, + postgresql, putty, python-service-identity, python-treq, + qlibc, qt5serialbus, ruby, stress-ng, strongswan, time, tinc, + ustr, valgrind, webkitgtk, libxml2, xorriso, + xserver_xorg-server + + Issues resolved (http://bugs.uclibc.org): + + #8936: Aircrack-ng - Alot of missing dependencies + +2016.05-rc2, Released May 17th, 2016 + + Fixes all over the tree. + + Rootfs overlay handling now refuses to overwrite + /{usr,bin,sbin,lib} symlinks from BR2_ROOTFS_MERGED_USR option + even if these directories are present in the overlay. + + External toolchain: Unbreak user provided libraries deployment + (BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS) handling after refactoring. + + QEMU coldfire: Fix for signal handling kernel issue, enable + networking support. + + Updated/fixed packages: android-tools, assimp, boost, gcc, + glibc, glmark2, gmrender-resurrect, go, go-bootstrap, iputils, + jack2, kodi-screensaver-asterwave, kodi-screensaver-rsxs, + kodi-visualisation-shadertoy, libarchive, libinput, libpjsip, + mali-t76x, mtr, nginx, opencv, openvpn, python-coherence, + qt5multimeda, quagga, samba4, sg3-utils, stress-ng, turbolua + +2016.05-rc1, Released May 10th, 2016 + + Fixes all over the tree and new features. + + Architectures: new ARM variants: Cortex A17 and M4, improved + nonmmu (cortex-M) support, m68k has been re-enabled with + support for ColdFire. For x86, support for the i386 variant + has been dropped. + + Toolchain: Add GCC 6 support, remove GCC 4.5, mark GCC 4.7 as + deprecated. Go programming language support, Add Binutils 2.26 + support. Old Sourcery PowerPC external toolchains removed, + Sourcery MIPS 2016.06-8, AMD64 2015.11-139, NiosII 2015.11-130 + added, Linaro ARM/ARMeb/Aarch64 toolchains updated. + + New defconfigs: Firefly RK3288, Boundary Devices i.MX7 Nitrogen7, + STM32F429 and STM32F469 Discovery boards, Hardkernel ODROID-C2, + Raspberry Pi Zero and Raspberry Pi 3. Some Qemu defconfigs were + added for m68k, eXtensa-nommu and ColdFire. + + Linux: use zImage by default on ARM, subversion repository + support (for u-boot as well). + + New packages: aer-inject, android-tools, cannelloni, + cbootimage, cgroupfs-mount, connman-gtk, crudini, dt, + gmrender-resurrect, flannel, font-awesome, freeswitch, go, + go-bootstrap, gr-osmosdr, granite, i7z, imx-uuc, + kodi-adsp-basic, kodi-adsp-freesurround, + kodi-audiodecoder-opus, kodi-pvr-hdhomerun, + kodi-screensaver-asterwave, kodi-screensaver-cpblobs, + kodi-screensaver-matrixtrails, kodi-screensaver-planestate, + kodi-screensaver-rsxs, kodi-visualisation-fishbmc, + kodi-visualisation-fountain, kodi-visualisation-goom, libgee, + libimxvpuapi, libpjsip, libtomcrypt, libtommath, libusbgx, + lksctp-tools, mali-t76x, mkpimage, mpv, msr-tools, nload, + norm, nvme, owfs, pound, privoxy, procrank_linux, putty, + python-autobahn, python-characteristic, python-crossbar, + python-cryptography, python-iniparse, python-iowait, + python-lmdb, python-pexpect, python-ptyprocess, + python-pyasn-modules, python-pygments, python-pymysql, + python-pynacl, python-pyopenssl, python-pysocks, + python-pytrie, python-rpi-gpio, python-service-identity, + python-setproctitle, python-shutilwhich, python-treq, + python-txaio, python-ujson, python-wsaccel, qt5canvas3d, + qt5location, qt5quickcontrols2, qt5serialbus, qt5tools, + raptor, scrub, taskd, tegrarcm, turbolua, valijson, + wayland-protocols, webkitgtk, wilc1000-firmware, wpan-tools, + xdriver_xf86-video-amdgpu + + Removed packages: foomatic-filters, python-m2crypto, + qt5quick1, qt5webkit-examples, samba, xdriver_xf86-input-void + + Issues resolved (http://bugs.buildroot.org): + + #6830: Qt5: no fonts are installed + #7562: musl buildroot-toolchain and BR2_MIPS_SOFT_FLOAT break + #7580: Invalid filesystem in Pandaboard defconfig + #8346: wf111 package removes all kernel module dependencies + #8436: xserver_xorg-server Segmentation fault + #8736: IPV6 forced on in busybox + #8746: At startup system stops with 'cannot set terminal proces.. + #8751: make fail [fio does not build on sh] + #8766: Compiling host-gcc-final-4.9.3 broken on i386 + #8771: make savedefconfig modifies sources + #8781: Unable to build uboot for imx28evk + #8786: gdb fails to build with xz and expat support at the same + #8801: Compilation of Buildroot 2016.2 for Raspberry Pi with... + #8806: Buildroot 2016.2 for Raspberry Pi requires that ext4... + #8836: Can't select Vim in menuconfig + #8851: Make sure fio can compile with libaio support if it... + #8861: With buildroot 2016.02 trying to build for corei7-avx + fails while trying to build host-binutils + #8866: Making an USB flash bootable with extlinux build with + buildroot does not work + +2016.02, Released March 1st, 2016 + + Minor fixes, mostly security related. + + Circular dependency issue with same-as-kernel linux-headers + option fixed. + + Updated/fixed packages: bluez5_utils, heirloom-mailx, + imx-gpu-viv, kodi-pvr-argustv, kodi-pvr-mediaportal-tvserver, + kodi-pvr-nextpvr, libfcgi, openssl, pifmrds, powerpc-utils, + python-m2crypto, slang, sox, squid, tn5250, xerces, zsh + +2016.02-rc3, Released February 27th, 2016 + + Fixes all over the tree. + + Defconfigs: Ensure EABIhf is correctly enabled for ARM cores + where VFP is optional (but present on the specific hw). Fix + ARM variant selection for freescale_imx31_3stack_defconfig. + + Ensure tarballs of downloaded git trees do not contain a + timestamp. + + Clarify license of patches in COPYING. + + Updated/fixed package: avahi, binutils, cairo, can-festival, + chrony, cifs-utils, dnsmasq, dvdauthor, e2fsprogs, efl, + erlang-rebar, eudev, fbterm, gawk, gnupg2, gnuradio, gpm, + gst1-plugins-good, hostapd, imagemagick, iproute2, iputils, + jack2, kexec, kismet, lftp, libarchive, libeXosip2, libfm, + libglib2, libsoil, libssh, libssh2, libuci, links, lshw, lxc, + mediastreamer, mono, mraa, mutt, nfs-utils, numactl, ofono, + omniorb, openipmi, openobex, patch, pax-utils, perf, + pulseaudio, pure-ftp, qhull, qt, quagga, quota, sdl_sound, + shairport-sync, spice, sysklogd, syslog-ng, trace-cmd, + trousers, tvheadend, util-linux, vim, webkitgtk24, wireshark, + wpa_supplicant, xerces, zsh + + Issues resolved (http://bugs.uclibc.org): + + #8651: libMonoPosixHelper.so wrong link reference in buildroot.. + +2016.02-rc2, Released February 18th, 2016 + + Fixes all over the tree. + + Toolchain: PR19405 backport to binutils 2.25.1 to fix NIOS ld + crash, backport of Xtensa .init/.fini literals handling. + glibc security patches for CVE-2014-8121, CVE-2015-1781 + and CVE-2015-7547. + + Defconfigs for Acmesystems Arietta g25 added. + + Updated/fixed packages: binutils, boost, chrony, dovecot, + e2fsprogs, fio, gdb, glibc, graphite2, icu, kbd, libbsd, + libcue, libgcrypt, libraw, links, mc, mosquitto, nodejs, + postgresql, pptp-linux, pulseaudio, samba4, spice, squid, + sysklogd, systemd, tiff, uclibc, ulogd, util-linux, valgrind. + + Issues resolved (http://bugs.uclibc.org): + + #8576: Building embedded Linux for Atmel SAMA5D4_Xplained... + #8606: Problem compiling on Arch Linux + #8681: kbd 2.0.3 does not build on rpi + +2016.02-rc1, Released February 10th, 2016 + + Fixes all over the tree and new features. + + Toolchain: Support for GCC 5.3.x. ARC toolchain updated to + arc-2015.12. Support for legacy uClibc dropped, default to + uClibc-ng instead. Added sys/queue.h implementation for MUSL + for compatibility. Updated versions of Code sourcery and + Linaro toolchains. MIPS Codescape toolchains added. Version + selection for preconfigured external toolchains removed. + + New Defconfigs: ARM Juno r0/r1 development boards, Freescale + i.MX6UL Evaluation Kit, Intel Galileo Gen 2, Orange Pi PC. + A number of defconfigs have been extended to generate complete + system images using genimage. + + Linux: Automatically patch timeconst.pl for <3.9 kernels, + which isn't compatible with modern perl versions, breaking the + build when building on recent (Fedora 23, Debian + Testing/Unstable, ..) distributions. + + Makedevs utility now accepts textual (non-numerical) user and + group names. + + Vagrant file to easily setup a working development environment + in a VM has been added. + + Size-stats-compare script to compare rootfs sizes between + builds has been added. + + Infozip package renamed to zip. EFL packages restructured. + + Updated/fixed packages: aespipe, aiccu, alsa-lib, alsa-utils, + angularjs, apache, apr, argp-standalone, armadillo, arptables, + at, atk, audiofile, aumix, autoconf-archive, avahi, bash, bc, + bcache-tools, bdwgc, beecrypt, bind, binutils, bluez5_utils, + bluez_utils, bonnie, boost, busybox, cairo, cdrkit, chrony, + clamav, cmake, collectd, connman, coreutils, cppcms, crda, + cryptodev-linux, cryptsetup, cups, cwiid, cxxtest, dbus, + dbus-cpp, dbus-glib, debianutils, dhcp, dhcpcd, dhrystone, + dillo, directfb, directfb-examples, dmraid, dnsmasq, doom-wad, + dovecot, dovecot-pigeonhole, dropbear, dtv-scan-tables, + dvb-apps, dvbsnoop, ecryptfs-utils, eigen, ejabberd, + elementary, elfutils, enlightenment, erlang, espeak, eudev, + eventlog, exfat, exfat-utils, exiv2, expedite, faifa, + fakeroot, fastd, fbgrab, fetchmail, ffmpeg, findutils, fio, + firmware-imx, flann, flashrom, flite, flot, fmlib, freerdp, + freescale-imx, freetype, gauche, gawk, gcc, gcc-final, gcr, + gdb, gdk-pixbuf, geoip, gesftpserver, gettext, giflib, git, + glibc, glibmm, glog, gmp, gnupg, gnupg2, gnutls, gob2, gpsd, + gptfdisk, grep, gst1-libav, gst1-plugins-{bad,base,good,ugly}, + gst-ffmpeg, gst-plugins-{bad,base,good,ugly}, gstreamer, + gstreamer1, guile, gvfs, gzip, harfbuzz, haserl, hiawatha, + hostapd, hplip, icu, ifupdown, imagemagick, imx-gpu-viv, + imx-kobs, imx-lib, input-tools, intel-microcode, iperf3, + ipmitool, iproute2, iprutils, ipsec-tools, ipset, iptables, + iputils, irda-utils, irssi, iucode-tool, jack2, janus-gateway, + jpeg-turbo, jquery-datetimepicker, jquery-keyboard, + jquery-sparkline, jquery-ui, jquery-ui-themes, + jquery-validation, json-c, kbd, kernel-module-imx-gpu-viv, + keyutils, kmod, knock, kodi, lcdproc, lcms2, leafnode2, + leafpad, libass, libatomic_ops, libbroadvoice, libbsd, + libcap-ng, libcdaudio, libcue, libcurl, libdrm, libecore, + libedbus, libedit, libedje, libeet, libefreet, libeina, + libeio, libelementary, libembryo, libepoxy, libethumb, libev, + libevas, libevas-generic-loaders, libevdev, libevent, libffi, + libfm, libfribidi, libfslcodec, libfslparser, libfslvpuwrap, + libftdi, libfuse, libgail, libglew, libglib2, libgtk2, + libgtk3, libgudev, libhttpparser, libidn, libinput, libiscsi, + libjpeg, liblinear, libmbim, libmicrohttpd, libndp, libnspr, + libnss, liboauth, liboping, libpciaccess, libplist, libpng, + libraw, libraw1394, librsvg, libseccomp, libsecret, + libserialport, libsigc, libsigrok, libsigrokdecode, + libsndfile, libsoc, libsodium, libsoup, libssh2, libsvg, + libsvg-cairo, libtasn1, libtirpc, libtorrent, libungif, + libunwind, libupnpp, liburcu, libuv, libv4l, libva, + libva-intel-driver, libvips, libvncserver, libxml2, libxmlpp, + lightning, lighttpd, linknx, linux-firmware, linux-fusion, + linux-headers, liquid-dsp, lirc-tools, live555, lm-sensors, + lockdev, lshw, ltp-testsuite, ltrace, lttng-babeltrace, + lttng-libust, lttng-modules, lttng-tools, lua, luabitop, + luarocks, luv, lvm2, lxc, makedevs, mc, memcached, memtest86, + mesa3d, mesa3d-demos, mesa3d-headers, micropython, + micropython-lib, minicom, minidlna, mjpg-streamer, mke2img, + moarvm, modem-manager, mongoose, mongrel2, monkey, mono, + monolite, mosh, mosquitto, mpd, mplayer, msgpack, mtdev2tuio, + musepack, musl, mysql, nano, nasm, nbd, neard, netatalk, + netsnmp, nettle, net-tools, network-manager, nfs-utils, nginx, + nmap, nodejs, ntfs-3g, ntp, numactl, nut, nvidia-driver, + odhcp6c, ofono, ola, olsr, omniorb, opencv, opencv3, openipmi, + openldap, openntpd, openobex, openocd, openpgm, + open-plc-utils, openpowerlink, openssh, openssl, openswan, + openvpn, opkg, oprofile, opus, opusfile, p11-kit, package, + pango, pax-utils, pciutils, pcmanfm, perl, perl-db-file, + perl-io-socket-ssl, perl-libwww-perl, perl-net-dns, perl-uri, + perl-xml-libxml, php, php-ssh2, picocom, pinentry, pixman, + polarssl, popt, portaudio, pppd, procps-ng, proftpd, protobuf, + psmisc, ptpd2, pulseaudio, pulseview, pv, python, python3, + python-alsaaudio, python-can, python-cffi, python-cherrypy, + python-httplib2, python-jinja2, python-lxml, python-m2crypto, + python-mako, python-msgpack, python-psutil, python-pyasn, + python-pycparser, python-pydal, python-pyftpdlib, + python-pyroute2, python-pyxml, python-pyzmq, python-requests, + python-serial, python-setuptools, python-six, python-spidev, + python-tornado, python-twisted, python-web2py, python-webpy, + python-werkzeug, python-zope-interface, qemu, qhull, qpdf, qt, + qt5, qt5base, qt5connectivity, qt5declarative, qt5enginio, + qt5graphicaleffects, qt5imageformats, qt5multimedia, + qt5quick1, qt5quickcontrols, qt5script, qt5sensors, + qt5serialport, qt5svg, qt5webchannel, qt5webkit, + qt5webkit-examples, qt5websockets, qt5x11extras, + qt5xmlpatterns, qt-webkit-kiosk, racehound, radvd, read-edid, + readline, redis, rpcbind, rpi-firmware, rpi-userland, rrdtool, + rsync, rsyslog, rtai, rtorrent, rt-tests, rubix, ruby, samba4, + sconeserver, setools, shairport-sync, sigrok-cli, skeleton, + smack, snowball-init, socat, sp-oops-extract, sqlite, + squashfs, squeezelite, squid, sredird, sshfs, + start-stop-daemon, strace, strongswan, stunnel, subversion, + sunxi-tools, swig, sysdig, syslog-ng, sysstat, systemd, + sysvinit, taglib, tcl, tcpreplay, thrift, ti-gfx, tinyalsa, + tor, torsmo, trace-cmd, transmission, tremor, triggerhappy, + trinity, tvheadend, tzdata, uboot-tools, uclibc, udisks, + udpcast, unionfs, upmpdcli, usb_modeswitch, + usb_modeswitch_data, ustr, util-linux, vala, valgrind, + vboot-utils, vde2, vlc, vnstat, webkit, webkitgtk24, weston, + wget, whetstone, whois, wine, wipe, wireless-regdb, wireshark, + wpa_supplicant, w_scan, x11r7, xapp_xbacklight, xapp_xcompmgr, + xapp_xinput, xapp_xkbcomp, xdriver_xf86-input-evdev, + xdriver_xf86-input-libinput, xdriver_xf86-input-synaptics, + xdriver_xf86-video-ati, xdriver_xf86-video-fbturbo, + xdriver_xf86-video-imx-viv, xdriver_xf86-video-intel, + xfont_encodings, xfont_font-adobe-100dpi, + xfont_font-adobe-75dpi, xfont_font-adobe-utopia-100dpi, + xfont_font-adobe-utopia-75dpi, xfont_font-adobe-utopia-type1, + xfont_font-alias, xfont_font-arabic-misc, + xfont_font-bh-100dpi, xfont_font-bh-75dpi, + xfont_font-bh-lucidatypewriter-100dpi, + xfont_font-bh-lucidatypewriter-75dpi, xfont_font-bh-ttf, + xfont_font-bh-type1, xfont_font-bitstream-100dpi, + xfont_font-bitstream-75dpi, xfont_font-bitstream-type1, + xfont_font-cronyx-cyrillic, xfont_font-cursor-misc, + xfont_font-daewoo-misc, xfont_font-dec-misc, + xfont_font-ibm-type1, xfont_font-isas-misc, + xfont_font-jis-misc, xfont_font-micro-misc, + xfont_font-misc-cyrillic, xfont_font-misc-ethiopic, + xfont_font-misc-meltho, xfont_font-misc-misc, + xfont_font-mutt-misc, xfont_font-schumacher-misc, + xfont_font-screen-cyrillic, xfont_font-sony-misc, + xfont_font-sun-misc, xfont_font-winitzki-cyrillic, + xfont_font-xfree86-type1, xfsprogs, xkeyboard-config, xl2tp, + xlib_libfontenc, xlib_libXi, xmlstarlet, xscreensaver, + xserver_xorg-server, xtables-addons, xvkbd, xz, yad, yasm, + ympd, zeromq, zic, znc, zsh, + + New packages: acsccid, assimp, atkmm, autofs, bcm2835, + cairomm, cantarell, chocolate-doom, comix-cursors, cxxtest, + edid-decode, emlog, gcr, gtkmm3, hidapi, jquery-sidebar, + kernel-module-imx-gpu-viv, libasplib, libcroco, libdvbpsi, + libfreeglut, libgdiplus, libglfw, libhdhomerun, libnet, + libsoil, lldpd, luvi, mbedtls, minizip, miraclecast, mongodb, + mraa, netbsd-queue, netsniff-ng, nss-pam-ldapd, + obsidian-cursors, openal, openbox, pangomm, + python-backports-abc, python-beautifulsoup4, python-cbor, + python-click, python-cssselect, python-ecdsa, python-html5lib, + python-idna, python-ipaddress, python-mistune, python-netaddr, + python-paho-mqtt, python-paramiko, python-pyparted, + python-pysmb, python-pyudev, python-singledispatch, + python-smbus-cffi, python-urllib3, qt53d, rabbitmq-c, rfkill, + sbc, spi-tools, tpm-tools, trousers, ubus, unrar, unscd, + unzip, v4l2grab, xdriver_xf86-video-nouveau, xdotool, zbar + + Removed packages: libungif, python-pyxml, + + Issues resolved (http://bugs.uclibc.org): + + #7886: gettext: link failure with locally-installed libxml2 + #7892: systemd-journald is broken + #8066: nodejs crashes when built with gcc 4.9 + #8296: nodejs 0.12.7 - npm crashes (seg core dump) + #8501: gunzip fails to uncompress files + #8541: fail to build host-fakeroot-1.20.2 + #8546: build instructions for raspberry pi don't work + #8571: strace for ARC compile error + #8581: pciutils.mk PCIUTILS_MAKE_OPTS typo + #8616: Fail to build for raspberrypi_defconfig with big endian + #8621: sqlite package, properly enable readline + +2015.11, Released November 30th, 2015 + + Minor fixes. + + Merged/seperate /usr handling is now also performed for + staging so cross-gdb / gdbserver can find the libraries. + + Updated/fixed packages: autossh, conntrack-tools, dcron, + espeak, gcc, glmark2, gpsd, gstreamer1, libglib2, libsigsegv, + libsoc, libv4l, minidlna, mongrel2, opencv, polarssl, + rpi-userland, rubix, skeleton, tovid, uemacs, valgrind, yad, + zmqpp + + Issues resolved (http://bugs.uclibc.org): + + #8441: Invalid directory for X11 fonts in target (RPi2) + #8491: libglib2 2.46.1 not Building for armv5 on 2015.11-rc3 + +2015.11-rc3, Released November 26th, 2015 + + Fixes all over the tree. + + We have a new modern website! + + Updated/fixed packages: apitrace, audiofile, autossh, bullet, + c-ares, collectd, conntrack-tools, cryptodev-linux, dropbear, + fastd, gmp, gpsd, gst-plugins-bad, gst-plugins-base, + gst-plugins-good, gst-plugins-ugly, gstreamer, gstreamer1, + guile, iodine, iproute2, jimtcl, kompexsqlite, libethumb, + libfreeimage, libgsasl, libgtk3, libxml2, localedef, + lttng-tools, macchanger, mongrel2, mpd, openntpd, openssl, + oprofile, pcre, qt5base, quagga, rpi-userland, sconeserver, + sdl, spidev_test, sqlite, strongswan, ustr, xapp_sessreg, + yajl, zmqpp + + Issues resolved (http://bugs.uclibc.org): + + #6872: gpsd: disabled on microblaze + #8321: invalid opcode error with minidlna and ffmpeg + #8336: Default systemd configuration fails to boot correctly in 2015-08 + #8446: rpi-userland failed to build with glibc 2.22 + +2015.11-rc2, Released November 19th, 2015 + + Fixes all over the tree. + + LD_LIBRARY_PATH is no longer used to ensure host binaries find + their libraries, fixing issues on recent Fedora. + + Toolchain fixes for powerpc e5500 / e6500. Fix for an issue + with ${TARGET}-cc after the move to use a toolchain wrapper + for the internal toolchain. + + Appy-patches.sh now correctly applies all files listed in + series files. + + Fixes for merged /usr handling when a custom skeleton is used. + + Updated/fixed packages: axfsutils, boost, busybox, dhcp, + directfb, dropbear, ebtables, fastd, ffmpeg, gauche, gcc, + gettext, gst1-plugins-bad, hostapd, ibrdtnd, libcurl, + libecore, libgudev, libnss, libpng, libserial, libssh2, + libuecc, libxml2, linux-headers, liquid-dsp, ltris, + lua-periphery, minidlna, mongrel2, mpd, mpg123, mplayer, + mysql, opencv, opencv3, package, perl-file-util, php-ssh2, + polarssl, pulseaudio, python-protobuf, qemu, qt5base, ranger, + ruby, skeleton, slang, squeezelite, strongswan, tovid, uclibc, + ushare, wine, wpa_supplicant, x265, + xdriver_xf86-video-siliconmotion, zxing-cpp + + Issues resolved (http://bugs.uclibc.org): + + #4790: Running udhcpc on a system with NFS root kills NFS + #8456: Building host-pkgconf on Fedora 23 fails due to.. + +2015.11-rc1, Released November, 7th 2015 + + Fixes all over the tree and new features. + + Architectures: + + - Support for sparc64 added (internal toolchain with glibc + only). + + - Support for mips32r6 and mips64r6 added. + + - Support for Intel Quark X1000 CPU. + + - Switch to EABIhf by default on ARM when a VFP is available. + + Toolchains: + + - glibc 2.22, gdb 7.10, use gdb 7.9 by default, musl 1.1.12, + uclibc-ng 1.0.8, host-gdb enabled on AArch64. + + - The toolchain wrapper which was used only for external + toolchains is now also used for Buildroot internal + toolchains. This allowed to fix the ccache support, prepare + the way for top-level parallel build support and remove gcc + patches used to detect header/library path poisoning. + + - Remove Analog Devices Blackfin toolchain 2012R2. + + - Fix several Xtensa build failures by switching from + text-section-literals to auto-litpools. + + - Enable MIPS64 support in uClibc-ng, use uClibc on ARC + rather than a specific fork. + + - Linaro toolchains for ARM, ARMeb and AArch64 updated to + 2015.08. 2014.09 version is kept since 2015.08 only runs on + x86_64 hosts. + + Bootloaders: + + - Fix ARM64 support in U-Boot. + + Defconfigs: + + - Added: ARC HS38 VDK virtual boards, Avnet Microzed, Boundary + Devices Nitrogen SoloX, Freescale i.MX6 SoloX Sabre SD, + OLinuxino A20 Lime2, Qemu Sparc64, Qemu SuperH 4 big endian, + Synopsys AArch64 VDK virtual platform. + + - Updated: calao_qil_a9260, calao_usb_a9g20_lpw, ci20, + cubieboad, freescale_imx6_*, imx53loco, imx6_vab820, + mpc8315erdb, qmx6, p1010rdb, qemu, raspberrypi, + raspberrypi2, riotboard, snps_axs10*, wandboard. + + - Removed: at91rm9200df, at91sam9260dfc, at91sam9263ek, + calao_snowball_defconfig, gnublin, integrator926_defconfig. + + Infrastructure: + + - Support for fetching from Mercurial tags fixed. + + - Introduce LINUX_NEEDS_MODULES, which allows to enforce + module support to be enabled in the kernel when a package + builds out-of-tree kernel modules (through the + pkg-kernel-module infrastructure or on its own). + + - Improve the perl package infrastructure to automatically add + the dependency to the perl interpreter to target perl module + packages. + + - Remove trailing slashes in _SITE and addition of a + check to ensure such trailing slashes are no longer added. + + - Extend the legal infrastructure to allow packages to declare + their actual source code. This is useful for packages for + which _SOURCE points to pre-built binaries (as is the + case for external toolchains). The new _ACTUAL_SOURCE + variable allows to point to the source code in such cases. + + - Improved ccache support, thanks to the usage of a toolchain + wrapper for internal toolchain. Now a single cache directory + can be shared between different Buildroot builds. + + - Addition of a 'graph-size' make targets, which generates a + PDF graph of per-package size of the root filesystem. + + - Addition of _EXCLUDES so that packages can request + certain parts of the source code tarball to not be + extracted. This feature is currently used by gcc and + toolchain-external. + + - Packages can now use the _PKGDIR variable, provided by + the package infrastructure, to reference their package + directory, instead of explicitly using package//. + + Filesystems: + + - Add high lz4 compression to squashfs. + + - Simplification of shell profile files in the default + skeleton. + + - Remove ftp user and /home/ftp from the skeleton, and let ftp + server packages create these when needed. + + - Add support for /bin, /sbin and /lib to be symlinks to their + corresponding directories in /usr. This is enforced for + systemd configurations, and optional for other + configurations. + + - Support for AXFS filesystem image generation added. + + - New options to add extra space/inodes to ext2/3/4 images. + + Updated/fixed packages: + + adwaita-icon-theme, apache, apitrace, atk, audit, avahi, + barebox, bash, batctl, bind, binutils, bluez_utils, boost, + bridge-utils, cairo, ccache, chrony, clapack, cloog, cmake, + collectd, connman, conntrack-tools, coreutils, cpio, + cryptsetup, dbus, dbus-cpp, devmem2, dhcp, dhcpcd, dhcpdump, + dhrystone, dillo, directfb, directfb-examples, dmraid, + dos2unix, dovecot, dovecot-pigeonhole, drbd-utils, dropbear, + dropwatch, dtc, e2fsprogs, ebtables, efl, eigen, ejabberd, + elf2flt, elfutils, erlang, ethtool, eudev, evemu, exfat, + exfat-utils, expat, faifa, fbterm, fdk-aac, feh, ffmpeg, file, + flashrom, fping, freerdp, freescale-imx, freetype, gdk-pixbuf, + genimage, gettext, git, glib-networking, glmark2, gnupg2, + gnuradio, gnutls, gpsd, grep, grub2, gst1-imx, gst1-libav, + gst1-plugins-bad, gst1-plugins-base, gst1-plugins-good, + gst1-plugins-ugly, gst1-validate, gst-fsl-plugins, + gst-plugins-bad, gstreamer1, guile, gvfs, harfbuzz, haveged, + hostapd, icu, imagemagick, impiutil, imx-gpu-viv, imx-vpu, + inadyn, intltool, iostat, iperf3, ipmiutil, iproute2, + iptables, iw, jpeg-turbo, jq, jsoncpp, kexec-lite, kmod, kodi, + kodi-audioencoder-flac, kodi-pvr-argustv, kodi-pvr-filmon, + kodi-pvr-hts, kodi-pvr-mythtv, kodi-pvr-pctv, + kodi-pvr-stalker, kodi-pvr-vbox, + kodi-visualisation-waveforhue, less, lftp, libbluray, + libcgroup, libconfuse, libcurl, libdcadec, libdrm, libevdev, + libffi, libfribidi, libfslcodec, libfslparser, libfslvpuwrap, + libgcrypt, libglew, libglib2, libgtk3, libidn, liblinear, + liblockfile, libmicrohttpd, libnetfilter_conntrack, libnfs, + libnftnl, libnl, libnspr, libnss, libpcap, libpfm4, libpng, + libselinux, libserial, libsoup, libsoxr, libstrophe, libtasn1, + libtirpc, libtorrent, libupnpp, liburcu, libusb-compat, libuv, + libv4l, libva, libva-intel-driver, libxcb, lighttpd, links, + linux, linux-firmware, linux-fusion, linux-headers, + lirc-tools, localedef, lpeg, lsof, ltp-testsuite, + lttng-libust, lttng-tools, lua-periphery, luaposix, lvm2, lxc, + lz4, mdadm, mesa3d, mesa3d-headers, minicom, minidlna, moarvm, + modem-manager, mosquitto, mpd, mpdecimal, mpg123, mplayer, + mrouted, msmtp, mtd, mutt, nettle, network-manager, nfs-utils, + nftables, nginx, nodejs, noip, ntp, ofono, opencv3, openpgm, + openssl, openswan, openvpn, pango, parted, perl, perl-cross, + perl-crypt-openssl-random, perl-http-message, + perl-io-socket-ssl, perl-module-build, perl-mojolicious, + perl-netaddr-ip, perl-net-dns, perl-net-http, perl-net-ssleay, + perl-uri, perl-xml-libxml, php, picocom, pixman, pkgconf, + poco, polarssl, portaudio, portmap, postgresql, proftpd, + protobuf, protobuf-c, pulseaudio, python-configshell-fb, + python-networkmanager, python-numpy, python-pyparsing, + python-pypcap, python-rtslib-fb, python-spidev, python-urwid, + python-web2py, qemu, qt5base, redis, rngtools, rng-tools, + rpi-firmware, rpi-userland, rtmpdump, rtorrent, ruby, samba, + samba4, sane-backends, sconeserver, sdl, sed, setools, + shairport-sync, shared-mime-info, sland, smartmontools, + softether, spice-protocol, sqlcipher, sqlite, squid, + strongswan, stunnel, subversion, sudo, sunxi-tools, + supervisor, systemd, tar, targetcli-fb, tcpdump, tiff, tor, + tvheadend, tzdata, uboot-tools, udisks, unionfs, upmpdcli, + util-linux, vala, valgrind, vim, vlc, vorbis-tools, vsftpd, + vtun, wavpack, webkitgtk24, weston, whois, wireless-regdb, + wireshark, wpa_supplicant, xdriver_xf86-input-vmmouse, + xdriver_xf86-video-imx-viv, xdriver_xf86-video-intel, + xdriver_xf86-video-sis, xlib_libXi, xorg-server, + xtables-addons, xterm, xz, zic, znc, zsh + + New packages: + + axfsutils, bitstream, check, dvblast, eventlog, fastd, gauche, + gmock, graphite2, gssdp, gupnp, gupnp-av, ibrcommon, ibrdtn, + ibrdtnd, ibrdtn-tools, imx-kobs, iqvlinux, irssi, + kompexsqlite, libbroadvoice, libcddb, libcodec2, libcrossguid, + libg7221, libhttpparser, libilbc, libldns, libmng, + libopenh264, libpam-radius-auth, libpam-tacplus, libsilk, + libsoundtouch, libssh, libuecc, libyuv, liquid-dsp, luv, + micropython, micropython-libs, python-pyratemp, + python-pyroute2, python-ranger, rapidxml, scrypt, sdl2, + sp-oops-extract, squeezelite, stress-ng, swupdate, syslog-ng, + x265, xdriver_xf86-video-fbturbo, xxhash, yad, zxing-cpp + + Removed packages: + + blackbox (was deprecated), divine (merged in directfb), + kobs-ng (replaced by imx-kobs), mediactl (merged in libv4l), + sawman (merged in directfb), schifra (marked broken since a + long time), texinfo (host variant only, no longer used), zxing + (replaced by zxing-cpp), + + Issues resolved (http://bugs.uclibc.org): + + #4099: cut utility from GNU coreutils works incorrect + #7772: libxml-parser-perl build failure: missing dependency + ExtUtils/MakeMaker + #7931: Default configuration for Cubieboard v1 is outdated + #8116: 2015.05-rc2 raspberrypi2_defconfig network interface + not coming up + #8246: X.org DRI2 build issue + #8256: pointing to /usr/bin/objcopy old version (x86) instead + of the generated one + #8266: mplayer build issue + #8281: pyrexc fails to run when path is too long + #8316: lttng-tools and lttng-babeltrace executables contain + bad RPATH pointing to host machine + #8331: kexec wants shutdown in /sbin, but systemd installs it + in /usr/sbin + #8361: Buildroot 2015.08.1 skeleton inittab overwritten by + busybox's version + #8366: libevent does not build + #8386: build failed with external toolchain + #8391: Node.js 0.12.7 fails to build on raspberry_pi defconfig + #8396: CCACHE initialization + #8401: gpsd 3.15 NMEA support + #8416: cups depends on BR2_DEPRECATED_SINCE_2015_05 + #8421: util-linux installs systemd files in output/target/home/ + +2015.08, Released August 31st, 2015 + + Minor fixes. + + OpenCV 3.x package renamed to opencv3. OpenCV 2.4.x + reintroduced as opencv. + + Updated/fixed packages: bootutils, canfestival, cppcms, + curlftpfs, dhcpdump, dropbear, erlang-p1-tls, exfat, gnuradio, + ipkg, libgudev, libmbim, libwebsock, linux-pam, lm-sensors, + ltrace, midori, network-manager, openssh, perl-file-listing, + perl-http-cookies, perl-http-daemon, perl-http-negotiate, + perl-www-robotrules, python-can, qt5base, qt5multimedia, + setools, sysvinit, tinyalsa, tn5250, tvheadend, uboot, vlc, + x264, xserver_xorg-server, zyre + +2015.08-rc2, Released August, 24th 2015 + + Fixes all over the tree. + + Toolchain: fix gcc build on NIOS-II. + + Infrastructure: add _POST_GEN_HOOKS mechanism to fix + hybrid ISO image generation. + + Architectures: add arm1136j-s variant. + + Updated/fixed packages: apitrace, audit, bcusdk, bdwgc, + beecrypt, boost, bwm-ng, cdrkit, c-icap, cifs-utils, clapack, + c-periphery, cpio, cramfs, czmq, dawgdic, dnsmasq, dosfstools, + dropbear, elfutils, empty, eudev, fan-ctrl, filemq, gnutls, + guile, haveged, imlib2, libcec, libepoxy, libev, libgpgme, + libiio, libnetfilter_queue, libnfnetlink, libpfm4, libpthsem, + librtas, libselinux, libsigsegv, libsodium, libv4l, lightning, + linux, lirc-tools, lrzsz, mono, mosh, mpd, msmtp, nbd, + netatalk, nodejs, ola, opencv, oprofile, php, poco, + postgresql, powertop, protobuf, protobuf-c, qt5base, + qt5quickcontrols, rapidjson, rng-tools, squid, sysdig, + sysstat, tftpd, tinc, tz, util-linux, webkitgtk24, weston, + wireshark, wvstreams, xdriver_xf86-input-synaptics, zyre. + + Issues resolved (http://bugs.uclibc.org): + + #8276: package/dropbear: symlink resolution incorrect + #8286: Error with buildroot + #8301: ldconfig parameter in Makefile + +2015.08-rc1, Released August, 5th 2015 + + Fixes all over the tree and new features. + + Architectures: + + - Refactor how the availability of an MMU is described. + - Minimal support for Cortex-M3 + - Minimal support for AArch64 big-endian + + Toolchains: + + - Add CodeSourcery MIPS 2015.05, remove MIPS 2013.11 + - Use uClibc-ng as the default uClibc version, instead of the + official uClibc, which hasn't done any release since 3+ + years + - eglibc is now marked as deprecated + - GCC: gcc 4.9.x is now the default and was updated to 4.9.3, + support for gcc 5.x added. + - Binutils: use Binutils 2.24 as the default, 2.25.x series + bumped to 2.25.1, remove old Binutils 2.22. + - Update ARC toolchain components to 2015.06 + - Add support for Fortran when building gcc + + Bootloaders: + + - Support for using the kconfig configuration system in + U-Boot + + New Defconfigs: + + - VIA VAB-820/AMOS-820 + - OLimex OLinuxino A20 Lime + - Many new defconfigs for Atmel evaluation boards: + at91sam9rlek, at91sam9x5ek, sama5d3xek, sama5d4ek, sama5d4 + Xplained Ultra, sama5d3 Xplained. + - ACME Systems Aria G25 + - WarPboard + - Altera Cyclone 5 Development Board + - Xilinx zc706 + - ARC AXS101 and AXS103 Software Development Platforms + - Significant updates to Raspberry Pi / Raspberry Pi 2 + + Infrastructure: + + - Buildroot takes better care now of generating predictable + permissions in the target filesystem. However, existing + permissions on a custom skeleton or rootfs overlay will no + longer be preserved. Therefore, it is necessary to add a + permission table (BR2_ROOTFS_DEVICE_TABLE) to set the + required permissions. + - Add support for kconfig fragments. + - No longer pass --{enable,disable}-debug to autotools + packages depending on the value of + BR2_ENABLE_DEBUG. BR2_ENABLE_DEBUG now only controls + whether we build with -g or not. + - Support for extracting archives in .lzma in the generic + package infrastructure. + - Remove random-seed file from the default skeleton, since + seeding the entropy pool with a known seed makes more harm + than good. + - In the CVS download helper, add support to use a date as + the version. + - Add support for a per-package _STRIP_COMPONENTS + variable, which packages can use to specify how many path + components should be stripped when extracting the tarball. + - Addition of a 'kernel-module' package infrastructure, which + simplifies the packaging of external kernel modules. Many + existing packages are converted to use it. + - Allow bootloaders to be implemented in $(BR2_EXTERNAL) + - Remove /etc/securetty from the default skeleton. + - Migration of sysV initscripts from the default skeleton to + a package called 'initscripts', installed only when Busbox + init or sysvinit are used. + - Migration of the skeleton logic to a proper 'skeleton' + package. + - Addition of a 'linux-tools' infrastructure in the 'linux' + package, to support building user-space tools bundled + within the Linux kernel sources, such as perf and cpupower. + - Usage of backticks instead of make $(shell ...) to execute + shell commands. This allows to delay the evaluation of such + commands when actually needed, and not when expanding the + variables. It is useful to make 'make printvars' less + noisy, and as a preparation to support top-level parallel + build. + - Libtool .la files are not mungled for all package types, + instead of being handled only for packages using the + autotools-package infrastructure. + - Add mechanism to allow packages to express a dependency on + gcc versions. This is needed for packages that use C++11 or + C11 support for example. + + Important package updates: + + - Complete rework of the matchbox packaging + - Lots of fixes in packages for compatibility with musl and + gcc 5. + - Hash files added to a large number of packages. + - Update a significant number of packages to use a new + hosting, after the announcement of Google Code and + Gitorious closing. + - Major packages needed for SELinux support have been merged, + but the support is not complete yet. + - Significant update of OpenCV to version 3.0, and addition + of lots of eatures. + - Significant update of all packages supporting the GPU and + VPU of i.MX ARM processors. + - Addition of systemd support in a significant number of + packages. + - Qt5 updated to 5.5.0 + - Use modular X.org server by default instead of KDrive + + Filesystems: + + - Complete overhaul of the iso9660 support. Now allows to use + directly IS9660 as the root filesystem format and not only + an initrd, and supports Grub 2 and isolinux in addition to + Grub. + + Updated packages: a10disp, agentpp, apache, at91bootstrap3, + audit, barebox, bc, bind, bmon, boost, btrfs-progs, + ca-certificates, can-utils, ccache, cloog, collectd, connman, + coreutils, c-periphery, cryptsetup, dado, dbus, dejavu, + dhcpcd, dnsmasq, dosfstools, dovecot, dovecot-pigeonhole, + e2fsprogs, ejabberd, erlang-p1-cache-tab, erlang-p1-sip, + erlang-p1-stringprep, erlang-p1-stun, erlang-p1-tls, + erlang-p1-utils, erlang-p1-xml, erlang-p1-yaml, ethtool, + eudev, evtest, exim, expect, explorercanvas, feh, ffmpeg, + file, flashrom, freescale-imx, freetype, gawk, gcc, gdb, + gettext, git, glib-networking, gnupg2, gnutls, gpsd, gptfdisk, + gpu-viv-bin-mx6q, gst-fsl-plugins, harfbuzz, hdparm, heimdal, + i2c-tools, imagemagick, imx-vpu, iproute2, ipset, isl, iw, + kodi, kodi-addon-xvdr, kodi-audioencoder-flac, + kodi-audioencoder-lame, kodi-audioencoder-vorbis, + kodi-audioencoder-wav, lftp, libass, libassuan, libcec, + libconfi, libcurl, libdrm, libevdev, libfreefare, libfslcodec, + libfslparser, libfslvpuwrap, libfuse, libglib2, libgpgme, + libgtk2, libgtk3, libical, libidn, libiio, libinput, libiscsi, + libllcp, libmicrohttpd, libnfc, libnss, libpcap, libpciaccess, + libpng, libserialport, libsigrok, libsoc, libtirpc, libubox, + libunistring, libupnp, libuv, libv4l, libva, + libva-intel-driver, libXrandr, lighttpd, linenoise, linux, + linux-firmware, linux-headers, live555, ltrace, lua, + lua-csnappy, lua-ev, luajit, lua-messagepack, luaperiphery, + lvm2, lxc, lzo, mesa3d, mesa3d-headers, midori, mmc-utils, + modem-manager, mono, mosquitto, mpd, mpd-mpc, mpfr, mpg123, + mtd, musl, nano, netperf, network-manager, nfs-utils, nginx, + nodejs, ntp, ola, opencv, openldap, openssh, openssl, + openswan, openvmtools, openvpn, opkg, orbit, orc, pcmanfm, + perl-cross, perl-encode-locale, perl-io-socket-ssl, + perl-mojolicious, perl-net-ssleay, perl-path-tiny, perl-uri, + perl-xml-libxml, php, pinentry, polarssl, postgresql, + pulseview, pure-ftpd, python, python-dpkt, python-lxml, + python-networkmanager, python-pyinotify, python-pypcap, + python-tornado, qextserialport, qt, qt5, rapidjson, redis, + rpcbind, rpi-firmware, rpi-userland, samba4, shairport-sync, + snmpp, sqlite, squid, strongswan, stunnel, sudo, sunxi-boards, + sunxi-mali, sysdig, sysstat, systemd, tcpdump, tiff, tmux, + tor, txheadend, tzdata, uboot, uclibc, ulogd, upmpdcli, + usb_modeswitch, usb_modeswitch_data, vala, vsftpd, wayland, + weston, whois, wireless-regdb, wireshark, x264, xapp_xvinfo, + xdriver_xf86-input-libinput, xdriver_xf86-input-vmmouse, + xdriver_xf86-video-cirrus, xdriver_xf86-video-geode, + xdriver_xf86-video-imx-viv, xdriver_xf86-video-mach64, + xdriver_xf86-video-neomagic, xdriver_xf86-video-r128, + xdriver_xf86-video-savage, xdriver_xf86-video-siliconmotion, + xdriver_xf86-video-vesa, xkeyboard-config, xlib_libfontenc, + xlib_libFS, xlib_libXaw, xlib_libxkbfile, xlib_libXrender, + xlib_libXt, xproto_kbproto, xproto_xproto, xproto_xrandrproto, + xscreensaver, xserver_xorg-server, xtables-addons, yaml-cpp, + zic. + + New packages: angularjs, atf, audit, c-icap, c-icap-modules, + cpio, dawgdic, faketime, fcgiwrap, gflags, glog, initscripts, + jquery-datetimepicker, kodi-audioencoder-modplug, + kodi-audioencoder-nosefar, kodi-audioencoder-sidplay, + kodi-audioencoder-snesapu, kodi-audioencoder-stsound, + kodi-audioencoder-timidity, kodi-audioencoder-vgmstream, + kodi-platform, kodi-pvr-argustv, kodi-pvr-dvblink, + kodi-pvr-dvbviewer, kodi-pvr-filmon, kodi-pvr-hts, + kodi-pvr-iptvsimple, kodi-pvr-mediaportal-tvserver, + kodi-pvr-mythtv, kodi-pvr-nextpvr, kodi-pvr-njoy, + kodi-pvr-pctv, kodi-pvr-stalker, kodi-pvr-vbox, + kodi-pvr-vdr-vnsi, kodi-pvr-vuplus, kodi-pvr-wmc, + kodi-screensaver-asteroids, kodi-screensaver-biogenesis, + kodi-screensaver-crystalmorph, kodi-screensaver-greynetic, + kodi-screensaver-pingpong, kodi-screensaver-pyro, + kodi-screensaver-stars, kodi-visualisation-shadertoy, + kodi-visualisation-spectrum, kodi-visualisation-waveforhue, + kodi-visualisation-waveform, kvmtool, kyua, libfm, + libfm-extra, libplatform, librtas, libsodium, libsquish, + libucl, libump, linux-backports, lua-iconv, lutok, menu-cache, + moarvm, monkey, mono-gtksharp3, mosh, openipmi, python-can, + python-pycli, python-pydal, python-pyyaml, python-web2py, + qpid-proton, qt5webchannel, quazip, racehound, rtl8188eu, + rtl8821au, sepolgen, setools, skeleton, stm32flash, + webkitgtk24, xdriver_xf86-video-qxl, zynq-boot-bin. + + Deprecated packages: webkitgtk, libgail, eglibc support in + glibc package. + + Issues resolved (http://bugs.uclibc.org): + + #4291: Segmentation fault with all binaries that use threads + when compiled with gcc 4.6 + #6944: building toolchain for sh4 fails + #7592: Buildroot GCC: -lto requires plugin support in ranlib + #7628: Python SSL does not get built for Raspberry Pi + #7682: Missing dependencies for NFS + #7742: dhcp lacks important features when BR2_ENABLE_DEBUG + #7754: make: *** [/..../buildroot-2014.11/output/build/host-gcc-initial-4.8.3/.stamp_built] Error 2 + #7946: libglib2-2.42.2 fails to build for sparc-buildroot-linux-gnu + #7956: glibc 2.20 and 2.21 fail to build for sh64-buildroot-linux-gnu + #7971: python-flask, python-werkzeug. No module named zlib + #7981: Target file system skeleton permissions hazard + #8006: rpcdebug in nfs-utils built for the host + #8036: alsa-lib headers problem that prevents to compile alsa + dependent projects + #8081: systemd init system: /tmp is not mode 1777 + #8121: php opcache extension doesn't get installed + #8151: x86-64 make fails with ncurses 5.9 + #8156: pkg-kconfig infra broken for *-update-{config, defconfig} + #8161: default /bin/sh symlink to busybox is full path and not relative + #8171: glamor missing + #8191: Request update support for the cubieboard series + #8201: Important security upgrades for node.js + +2015.05, Released May 31st, 2015 + + Minor fixes. + + Updated/fixed packages: conntrack-tools, directfb, fio, flite, + gptfdisk, ipmiutil, iproute2, janus-gateway, keyutils, knock, + libelementary, libgcrypt, libgsasl, libjpeg, libstrophe, + lttng-libust, nbd, ncurses, nmap, php, postgresql, python, + python3, sconeserver, udpcast, upmpdcli + +2015.05-rc3, Released May 22nd, 2015 + + Several fixes, mainly related to static linking. + + Updated/fixed packages: acl, alsa-utils, apr, armadillo, attr, + autoconf-archive, binutils, boost, czmq, dhcpcd, duma, + enlightenment, exim, fbterm, freerdp, gcc, gdk-pixbuf, + google-breakpad, gpsd, heirloom-mailx, hwloc, ipmiutil, + iproute2, jack2, jasper, kmod, lcdproc, leafnode2, libcap-ng, + libftdi1, libmatroska, libmemcached, libmodbus, libnftnl, + libsigrok, libupnpp, libuv, libxml-parser-perl, linux, + linux-headers, lirc-tools, lua-periphery, lxc, mongoose, mono, + mpg123, mosquitto, neardal, newt, ntp, ola, openldap, opencv, + php, postgresql, protobuf, pulseaudio, python-pyqt, qemu, qt, + qt5base, rpi-userland, rsyslog, snmppp, sqlite, tiff, + tinyxml2, uboot-tools, unionfs, ux5000-firmware, usbredir, + ushare, vpnc, vsftpd, wavpack, wireless_tools, wsapi, + wvstreams, xmlstarlet, zeromq, zmqpp + + New packages: c-periphery + + Issues resolved (http://bugs.uclibc.org): + + #8106: mkfs.jffs2 uses the --pagesize parameter incorrectly + #8111: 2015.05.rc2 LIBFOO_CONF_OPTS not working + #8126: exim lacks plaintext and cram-md5 auth + +2015.05-rc2, Released May 11th, 2015 + + Minor fixes. + + Toolchain: PR56780 backport to GCC 4.8.4 to fix GDB linking + issues. Context functions enabled for uClibc snapshot / + uClibc-NG. + + Architectures: Endian handling symbol for Xtensa, binutils + fixes. + + Infrastructure: Fix for kernel module stripping when + localversion contains spaces. + + Updated/fixed packages: at, autoconf-archive, binutils, + cc-tool, cryptsetup, dstat, expedite, freerdp, giflib, + gnuchess, guile, ipmiutil, iproute2, mono, monolite, neard, + ola, poppler, postgresql, python-qt, qt, sqlite, valgrind, + xlib_libXfont + + Issues resolved (http://bugs.uclibc.org): + + #8086: Cannot select systemd as init with Linaro 2014.09... + +2015.05-rc1, Released May 4th, 2015 + + Fixes all over the tree and new features. + + Architectures: Removed AVR32 support, deprecate SH64, added + support for steamroller, corei7-avx and core-avx2 x86 + variants. + + Toolchains: IPv6 and Largefile support now enforced for + uClibc. Corresponding Kconfig symbols removed. + + External CodeSourcery AMD64 2014.05, MUSL-cross 1.1.6 added, + CS sh2, Xilinx microblaze v2/14.3 removed. Distro-class + external toolchains are now detected and blacklisted. + + Internal toolchain support for Nios2 added, Blackfin + removed. Aarch64 and sh musl support. uClibc-ng support added. + + Libatomic is now handled for internal and external + toolchains. Link time optimization (LTO) support. + + New Defconfigs: Freescale i.MX28 EVK, i.MX31 PDK and SABRE + Auto, Raspberry Pi 2, RIoTboard, + + Infrastructure: Hashes for a large number of packages have + been added. Missing hashes now stop the build unless + explicitly disabled. + + Spaces and colons (:) are now supported in package + versions. Dependencies can now be listed for the patch step + (_PATCH_DEPENDENCIES). Kconfig and Linux kernel + extensions infrastructure has been added. + + Makedevs now has a recursive (r) option. + + The variable containing the list of packages to build has been + renamed from TARGETS to PACKAGES. + + Make external-deps / legal-info / source / source-check have + been reimplemented using the package infrastructure, so their + output/behaviour may differ from earlier (some packages were + not included in the past). + + The old insecure DES password encoding is no longer supported. + + U-Boot patch option now support direct references to patch + files and URLs in addition to directories of patches. The + i.MX28 SD format (u-boot.sd) is now supported. + + Updated/fixed packages: agentpp, aircrack-ng, alsa-lib, + alsa-utils, apr-util, apr, atk, autossh, avahi, avrdude, + bcusdk, bdwgc, bind, binutils, bmon, boost, botan, + btrfs-progs, busybox, ca-certificates, cairo, can-utils, + canfestival, ccache, chrony, civetweb, clamav, cmake, + collectd, connman, copas, crda, cryptodev-linux, cryptsetup, + cups, czmq, dbus-cpp, dbus-glib, dbus-python, dbus, dfu-util, + dhcp, dhcpcd, dialog, dillo, dmraid, dnsmasq, dos2unix, + dosfstools, dovecot-pigeonhole, dovecot, dropbear, dropwatch, + dtv-scan-tables, dvdauthor, e2fsprogs, ecryptfs-utils, + libevas, elfutils, enscript, erlang, espeak, eudev, evemu, + exfat-utils, exim, f2fs-tools, feh, ffmpeg, fftw, flickcurl, + fltk, fluxbox, fmlib, fmtools, freeradius-client, freerdp, + gamin, gawk, gcc-final, gcc, gd, gdb, gengetopt, geoip, git, + glib-networking, gnu-efi, gnuchess, gnutls, gpsd, gptfdisk, + gpu-viv-bin-mx6q, gst-plugin-bad, gstreamer, gstreamer1, + gtest, gvfs, harfbuzz, haserl, haveged, hiawatha, + hicolor-icon-theme, hostapd, hplip, httping, i2c-tools, icu, + ifplugd, imagemagick, imlib2, iozone, iproute2, iptables, + iputils, irqbalance, iw, jack2, jhead, jimtcl, json-c, kexec, + kismet, kmod, kodi-audioencoder-flac, + kodi-audioencoder-vorbis, kodi-pvr-addons, kodi, ktap, lcms2, + libass, libatomic_ops, libbluray, libcap, libcgroup, libcurl, + libdrm, libdvbsi, libebml, libecore, libedit, liberation, + libev, libevas, libevdev, libftdi, libgcrypt, libglib2, + libgpgme, libgtk2, libgtk3, libiconv, libidn, libiio, + libinput, libiscsi, libksba, liblinear, libmatroska, + libmicrohttpd, libmodbus, libmpdclient, libnice, libnl, + libnspr, libnss, libpcap, libpciaccess, libphidget, libplayer, + libpthsem, libqmi, librsvg, libseccomp, libsigrok, libsoup, + libsrtp, libssh2, libtasn1, libtool, libunistring, liburcu, + libusb, libuv, libva-intel-driver, libva, libvncserver, + libvorbis, libvpx, libwebsockets, libxml2, libzip, lightning, + lighttpd, linknx, linphone, linux-firmware, linux-headers, + linux-pam, live555, ljsyscall, lmbench, lockdev, logrotate, + lpc3250loader, lpeg, lsof, lttng-libust, lttng-modules, + lttng-tools, lua, luacrypto, luafilesystem, luajit, luaposix, + luarocks, lvm2, lxc, make, + matchbox-{common,desktop,fakekey,keyboard,lib,startup-monitor,vm}, + matchbox, mcelog, memcached, memstat, memtest86, mesa3d, + minidlna, mjpegtools, mjpg-streamer, modem-manager, mongoose, + monit, mono, monolite, mp4v2, mpc, mpd, mpdecimal, mpg123, + mplayer, musl, nano, nbd, ncftp, ncmpc, ncurses, ne10, neard, + neardal, net-tools, netatalk, netsnmp, network-manager, nginx, + nodejs, ntfs-3g, ntp, numactl, odhcp6c, ofono, open2300, + opencv, openldap, openntpd, openocd, openssh, openssl, + openswan, opentyrian, openvmtools, openvpn, oprofile, p11-kit, + pango, patch, patchelf, pciutils, pcre, perf, perl-gdgraph, + perl-io-socket-ssl, perl-json-tiny, perl-module-build, + perl-mojolicious, perl-net-ssleay, perl-path-tiny, + perl-xml-libxml, perl, phidgetwebservice, php-gnupg, php, + pkgconf, polarssl, poppler, popt, postgresql, powerpc-utils, + pppd, prboom, procps-ng, proftpd, psplash, ptpd2, + python-{cheetah,coherence,django,markdown,netifaces,pam,six}, + python-tornado, python-twisted, python-zope-interface, python, + python3, qemu, qt, qt5, qt5base, qt5multimedia, + qt5xmlpatterns, qt5cinex, quagga, qwt, radvd, readline, + rng-tools, rpcbind, rpi-firmware, rpi-userland, rsync, + rsyslog, rtai, rtmpdump, ruby, sam-ba, samba, samba4, + sane-backends, sconeserver, shairport-sync, sigrok-cli, slang, + smcroute, snmppp, socat, socketcand, sofia-sip, sox, + spawn-fcgi, speex, sqlcipher, sqlite, squid, strace, + strongswan, stunnel, sudo, sunxi-boards, swig, sysstat, + systemd, tcpdump, tftpd, thrift, thttpd, ti-gfx, ti-utils, + tiff, tinyalsa, tn5250, transmission, trinity, tslib, + tvheadend, tzdata, uboot-tools, uclibc, ulogd, usb_modeswitch, + usbutils, ustr, util-linux, vala, valgrind, vlc, wayland, + webp, weston, wget, which, whois, wireless-regdb, + wireless_tools, wireshark, wpa_supplicant, wvstreams, + xapp_{bdftopcf,bitmap,fonttosfnt,fslsfonts}, + xapp_{fstobdf,iceauth,mkfontscale,oclock,rgb,sessreg,setxkbmap}, + xapp_{showfont,smproxy,twm,x11perf,xcalc,xclipboard,xcmsdb}, + xapp_{xdbedizzy,xditview,xdpyinfo,xdriinfo,xedit,xev,xeyes}, + xapp_{xf86dga,xfsinfo,xgamma,xgc,xhost,xinit,xinput,xkbcomp}, + xapp_{xkbevd,xkbprint,xlsatoms,xlsfonts,xmag,xman,xmh,xmodmap}, + xapp_xmore, xcb-util-image, xcb-util-keysyms, + xdata_xcursor-themes, + xdriver_xf86-input-{evdev,keyboard,synaptics,void}, + xdriver_xf86-video-{ati,cirrus,geode,mach64,mga,neomagic}, + xdriver_xf86-video-{r128,savage,siliconmotion,sis,tdfx}, + xdriver_xf86-video-{trident,vmware,voodoo}, xenomai, + xfont_font-util, xkeyboard-config, + xlib_lib{ICE,X11,Xdmcp,Xfont,Xpm,XvMC}, + xlib_lib{Xxf86vm,xshmfence,xtrans}, xproto_randrproto, + xproto_xproto, xserver_xorg-server, x11vnc, x264, xerces, + xorriso, xterm, xz, yaml-cpp, zeromq, zic, zmqpp + + New packages: apache, autoconf-archive, batctl, + bitstream-vera, bullet, cc-tool, doxygen, drbd-utils, + dvdrw-tools, gnuradio, gst1-imx, hans, hwloc, ijs, + imx-usb-loader, inconsolata, iodine, iotop, ipmiutil, jsoncpp, + leveldb, libdcadec, libdri2, libfreeimage, libftdi1, + libsidplay2, lirc-tools, lua-periphery, mc, mesa3d-headers, + mosquitto, nvidia-driver, nvidia-tegra23{,-binaries,-codecs}, + openjpeg, opusfile, perl-crypt-openssl-{random,rsa}, + perl-db-file, perl-digest-{hmac,sha1}, + perl-encode-{detect,locale}, perl-file-{listing,util}, + perl-html-{parser,tagset}, perl-http-cookies, + perl-http-{daemon,date,message,negotiate}, perl-io-html, + perl-libwww-perl, perl-lwp-mediatypes, perl-mail-dkim, + perl-mailtools, perl-mime-base64, perl-net-{dns,http}, + perl-netaddr-ip, perl-time-hires, perl-timedate, perl-uri, + perl-www-robotrules, powertop, pulseview, + python-{cherrypy,lxml,mako,pyqt,pyxml,sip,spidev,ws4py}, qpdf, + qt-webkit-kiosk, sl, softether, sysdig, tinyxml2, tor, tovid, + unixodbc, wf111, wine, libepoxy, xapp_xcompmgr, + xapp_xfindproxy, xcb-util-cursor, xcb-util-renderutil, + xdriver_xf86-input-libinput, xdriver_xf86-video-imx{,-viv}, + xproto_xproxymanagementprotocol + + Removed packages: gtk2-theme-hicolor + + Deprecated packages: samba + + Issues resolved (http://bugs.uclibc.org): + + #7478: Multiple chosen python modules are not built due to... + #7508: Use of BR2_EXTERNAL and dependencies to existing packages + #7676: Package procps-ng installs binaries to nonsensical folder + #7724: Startx is not installed in the target + #7760: botan: wrong prefix in botan-1.10.pc + #7826: Building of cdparanoia + #7844: Lua with hard-float on MIPS by buildroot doesn't work + #7874: X.org configure error + #7941: glibc-2.20 fails to build for sparc-buildroot-linux-gnu + #7951: gcc 4.9.2 fails to build for sparc-buildroot-linux-gnu + #7961: Qt5 fails to build for xtensa-buildroot-linux-uclibc + #7976: mkuser script fails with: user already exists with... + #8011: When building only busybox and strace, strace fails... + #8016: collectd fails to build, network.c:171:19: error:... + #8041: error on building libcurl7.42.0 + +2015.02, Released March 1st, 2015 + + Minor fixes. + + Updated/fixed packages: civetweb, ding-libs, + directfb-examples, glibc, gnupg, gnupg2, gpm, + gst-plugins-good, gst1-plugins-good, freetype, libao, libevas, + libevent, libfribidi, libgcrypt, libgtk2, libshout, libsrtp, + libtheora, libupnpp, libxmlrpc, linux, make, opus, pinentry, + rpi-firmware, shared-mime-info, vlc, vorbis-tools, + xcb-util-keysyms + + Removed packages: libgc + +2015.02-rc3, Released February 24th, 2015 + + Minor fixes. + + Cmake and rebar (erlang) infrastructure fixes. + + Updated/fixed packages: bind, btrfs-progs, busybox, e2fsprogs, + evtest, ffmpeg, fltk, gnutls, i2c-tools, imagemagick, libxcb, + make, mjpg-streamer, netsnmp, opentyrian, php, polarssl, + qt5base, samba, samba4, sudo, util-linux, xserver_xorg-server + +2015.02-rc2, Released February 15th, 2015 + + Minor fixes. + + raspberrypi: fix kernel sha1 for DT variant. + + Updated/fixed packages: dbus, dvdauthor, git, libsemanage, + libsepol, libssh2, mplayer, ntp, openvmtools, python3, + qt5base, qt5connectivity, xserver_xorg-server + +2015.02-rc1, Released February 8th, 2015 + + Fixes all over the tree and new features. + + Static/shared library handling reworked. This is now a + tristate (shared only / shared and static / static + only). Default is now shared only to speed up the + build. BR2_PREFER_STATIC_LIB is now called BR2_STATIC_LIBS. + + The toolchain (internal and external) will now warn when an + unsafe library or header path is used (such as /usr/include or + /usr/lib). If BR2_COMPILER_PARANOID_UNSAFE_PATH is enabled + under build options this instead becomes an error. + + A installation path issue with the internal musl toolchain + support has been fixed so it is now possible to reuse it as an + external toolchain. + + Architectures: Freescale E5500 and E6500 PowerPC support + added, deprecated MIPS 1/2/3/4 support removed. + + New defconfigs: Freescale p2020ds, MIPS creator CI20, + Raspberrypi with DT, UDOO Quad. + + 'make _defconfig' now saves the path to the defconfig in + the .config, so a 'make savedefconfig' automatically updates + it. + + Infrastructure for packages using the Erland rebar tool has + been added. + + Hashes for a large number of packages have been added. Hashes + are now checked for both target and host packages. + + The system menu now has an option to automatically configure a + network interface through DHCP at bootup. + + The default filesystem skeleton now uses a separate tmpfs for + /run instead of a symlink to /tmp/ for security reasons / to + protect against conflicts with user generated temporary files. + + BR2_EXTERNAL is now exported to post-build and post-image + scripts. + + New packages: bdwgc, benejson, blktrace, bootstrap, cgic, + ding-libs, dvdauthor, ejabberd, erlang-goldrush, erlang-lager, + erlang-p1-cache-tab, erlang-p1-iconv, erlang-p1-sip, + erlang-p1-stringprep, erlang-p1-stun, erlang-p1-tls, + erlang-p1-utils, erlang-p1-xml, erlang-p1-yaml, + erlang-p1-zlib, exiv2, freeradius-client, gengetopt, glmark2, + gpu-amd-bin-mx51, guile, host-qemu, ifupdown, iperf3, + janus-gateway, kodi, kodi-audioencoder-flac, + kodi-audioencoder-lame, kodi-audioencoder-vorbis, + kodi-audioencoder-wav, libcli, libiio, liblinear, libnice, + libselinux, libsemanage, libserialport, libsigro, + libsigrokdecode, libsrtp, liburiparser, libvips, libwebsock, + libz160, libzip, lightning, mcelog, memtest86, mjpegtools, + mjpg-streamer, mke2img, mpd-mpc, netsurf-buildsystem, odhcp6c, + openldap, python-alsaaudio, python-certifi, python-cheetah, + python-coherence, python-django, python-docopt, python-enum, + python-enum34, python-flask, python-gobject, python-httplib2, + python-ipaddr, python-itsdangerous, python-jinja, + python-markdown, python-markupsafe, python-networkmanager, + python-pam, python-psutil, python-pyftpdlib, python-pyinotify, + python-pysendfile, python-pyxb, python-requests, python-six, + python-twisted, python-webpy, python-werkzeug, + python-zope-interface, qt5cinex, sigrok-cli, sofia-sip, + start-stop-daemon, szip, triggerhappy, ustr, vnstat, xorriso, + xtables-addons + + Removed packages (target): bison, distcc, gob2, m4 + + Issues resolved (http://bugs.uclibc.org): + + #7556: make interactive CLI optional for nftables + #7730: Error while connecting Qt Cretaor to device + #7766: logrotate default gzip path is usually wrong + #7790: Invalid ext4 image generated by Buildroot + +2014.11, Released December 1st, 2014 + + Minor fixes. + + Infrastructure: LD_LIBRARY_PATH handling tweak to ensure + current working directory isn't searched. + + Updated/fixed packages: gd, gdb, libwebsockets, luajit, mono, + parted, shairport-sync, util-linux, xapp_bdftopcf, + xserver_xorg-server + +2014.11-rc3, Released November 28th, 2014 + + Fixes all over the tree. + + System: File permissions of /etc/random-seed made more + restrictive. + + Toolchain: Various fixes related to locale handling, a fix for + building the toolchain wrapper on MIPS. + + Updated/fixed packages: bind, binutils. botan, btrfsprogs, + clamav, czmq, dhcp, dillo, dovecot, erlang, flac, gd, glibc, + gptfdisk, gst1-validate, heirloom-mailx, lame, libksba, + libllcp, libnspr, libpng, libshairplay, libtirpc, linux, + linux-headers, mpdecimal, mpg123, network-manager, nfstables, + nfs-utils, openssl, pcituils, qt, radvd, rtai, sqlcipher, + sstrip, tcpdump, uclibc, uemacs, ushare, wayland, weston, + xl2tp, xserver_xorg-server + + Issues resolved (http://bugs.uclibc.org): + + #7670: Fails to build mpc-1.0.2 on latest Cygwin + +2014.11-rc2, Released November 21st, 2014 + + Fixes all over the tree. + + Inittab tweaks for shutdown handling (busybox and sysvinit). + + Updated/fixed packages: aircrack-ng, botan, canfestival, + clamav, coreutils, czmq, dbus, dovecot, duma, e2fsprogs, + erlang, gcc, iputils, libcap, libgcrypt, libmemcached, + libssh2, libunwind, libv4l, linux-headers, mesa3d-demos, mutt, + mysql, ndisc6, nodejs, omniorb, perl-cross, php, + python-tornado, python3, qemu, qt5base, qt5webkit, rpm, + rt-tests, ruby, schifra, sdl_sound, shairport-sync, sysvinit, + tstools, tzdata, wireshark, x264 + + Issues resolved (http://bugs.uclibc.org): + + #7646: strftime on datetime not works on python3 + +2014.11-rc1, Released November 12th, 2014 + + Fixes all over the tree and new features. + + Toolchains: Use -mcpu / -march instead of -mtune. Support + additional ARC and sparc variants. Updated Code sourcery + and Linaro external toolchains. + + Defconfigs: Freescale iMX6DL SabreSD, Minnowboard MAX, QEMU + powerpc64 pseries added and a number of updates to the + existing configurations. + + Infrastructure: Buildroot is now less noisy when built with + the silent option (make -s). + A number of package infrastructure variables have been renamed + from *_OPT to *_OPTS for constency. Buildroot will complain if + the old names are used to assist in updating out of tree + packages. + Fixes for host systems where bash isn't located in /bin, and + older systems not supporting mktemp --tmpdir. + Various cleanups of users/groups in the default skeleton. + There is now an option to choose what shell /bin/sh points to. + + Documentation: Various updates to the user manual. The + asciidoc documentation handling has now been extended so it + can be used by (BR2_EXTERNAL) packages. + + Updated/fixed packages: acl, acpid, agentpp, aircrack-ng, + alsa-lib, alsamixergui, alsa-utils, apitrace, apr, apr-util, + argus, arptables, at, atftp, atk, attr, audiofile, aumix, + automake, autossh, avahi, avrdude, axel, bandwidthd, bash, + bcusdk, beecrypt, bind, binutils, blackbox, bluez5_utils, + bluez_utils, bmon, boost, bootutils, bridge-utils, + btrfs-progs, busybox, bwm-ng, bzip2, ca-certificates, cairo, + ccache, ccid, ccrypt, cdrkit, cegui06, celt051, chrony, + cifs-utils, civetweb, cjson, clapack, classpath, cloog, cmake, + collectd, connman, copas, coreutils, coxpcall, cppcms, cppdb, + cppzmq, cramfs, crda, cryptsetup, ctorrent, cups, cvs, cwiid, + czmq, dash, dbus, dbus-cpp, dbus-glib, dbus-python, dejavu, + dhcp, dhcpcd, dhcpdump, dialog, dillo, directfb, distcc, + dmalloc, dmidecode, dmraid, dnsmasq, doc-asciidoc.mk, + dosfstools, dropbear, dropwatch, dstat, dtach, dtc, dvbsnoop, + e2fsprogs, ecryptfs-utils, ed, efl, eigen, elf2flt, elfutils, + enlightenment, enscript, erlang, espeak, ethtool, eudev, + evemu, evtest, exfat, exfat-utils, exim, expat, expect, + explorercanvas, faifa, fakeroot, fan-ctrl, fbdump, + fb-test-app, fetchmail, ffmpeg, file, filemq, findutils, flac, + flann, flickcurl, flite, fltk, fluxbox, fmc, fmlib, + fontconfig, foomatic-filters, freerdp, freescale-imx, + freetype, ftop, fxload, gamin, gcc, gd, gdb, gdk-pixbuf, + genimage, genpart, genromfs, geoip, gettext, giblib, git, + glibc, glib-networking, gmp, gmpc, gnu-efi, gnupg, gnupg2, + gnuplot, gnutls, google-breakpad, gpm, gpsd, gptfdisk, + gpu-viv-bin-mx6q, grantlee, grep, gsl, gst1-libav, + gst1-plugins-{bad,base,good,ugly}, gst-ffmpeg, + gst-fsl-plugins, gst-omx, gst-plugins-{bad,base,good,ugly}, + gst-plugin-x170, gstreamer, gstreamer1, gtest, gtk2-engines, + gutenprint, gvfs, harfbuzz, haserl, haveged, hdparm, heimdal, + heirloom-mailx, hiawatha, hostapd, hplip, htop, httping, + hwdata, i2c-tools, icu, ifplugd, igh-ethercat, imagemagick, + imlib2, imx-lib, imx-vpu, inadyn, inotify-tools, input-tools, + intltool, iperf, iproute2, iprutils, ipsec-tools, ipset, + iptables, iputils, iw, jamvm, jansson, jasper, jimtcl, joe, + jpeg-turbo, jq, jquery-keyboard, jquery-mobile, jquery-ui, + jquery-ui-themes, jquery-validation, jsmin, json-c, + json-javascript, kbd, kexec, kexec-lite, keyutils, kismet, + kmod, knock, ktap, lame, lbase64, lbreakout2, lcdproc, lcms2, + lesstif, lftp, libaio, libao, libarchive, libargtable2, + libass, libassuan, libatasmart, libbluray, libbsd, libcap, + libcap-ng, libcdio, libcec, libcgicc, libcgroup, libcofi, + libconfig, libconfuse, libcurl, libdaemon, libdnet, libdrm, + libdvdnav, libecore, libedbus, libedit, libedje, libeet, + libelementary, libelf, libenca, libethumb, libevas, + libevas-generic-loaders, libevent, libexif, libeXosip2, + libffi, libftdi, libfuse, libgail, libgcrypt, libgeotiff, + libglade, libglib2, libgpgme, libgtk2, libhid, libidn, + libinput, libiscsi, libjson, libksba, liblockfile, + liblog4c-localtime, liblogging, libmad, libmatroska, libmbim, + libmemcached, libmicrohttpd, libmpdclient, libmpeg2, libndp, + libnfc, libnfs, libnftnl, libnl, libnspr, libnss, liboauth, + libogg, liboping, libosip2, libpcap, libpciaccess, libpfm4, + libplayer, libplist, libpng, libpthsem, libqmi, libqrencode, + libraw, libreplaygain, libroxml, librsvg, librtlsdr, + libsamplerate, libseccomp, libsecret, libshairplay, libsoc, + libsoup, libsoxr, libssh2, libstrophe, libsvg, libsvg-cairo, + libtasn1, libtheora, libtirpc, libtorrent, libubox, libuci, + libungif, liburcu, libusb, libuv, libv4l, libva, + libva-intel-driver, libvncserver, libvorbis, libvpx, + libwebsockets, libxcb, libxml2, libxml-parser-perl, libxmlrpc, + libxslt, lighttpd, linenoise, linknx, links, linphone, + linux-firmware, linux-fusion, linux-headers, linux-pam, + linux-zigbee, lite, live555, ljlinenoise, lmbench, lm-sensors, + localedef, lockdev, lockfile-progs, log4cxx, lpty, lrandom, + lrzsz, lshw, lsof, lsqlite3, ltp-testsuite, ltrace, ltris, + lttng-babeltrace, lttng-libust, lttng-modules, lttng-tools, + lua, luabitop, lua-coat, lua-coatpersistent, lua-csnappy, + lua-ev, luajit, luajson, lualogging, lua-messagepack, + lua-msgpack-native, luaposix, luarocks, luasec, luasocket, + luasql-sqlite3, lua-testmore, lunit, lvm2, lxc, lz4, lzlib, + lzma, m4, madplay, make, makedevs, Makefile.in, + matchbox-common, matchbox-desktop, matchbox-fakekey, + matchbox-keyboard, matchbox-lib, matchbox-panel, + matchbox-startup-monitor, matchbox-wm, mcrypt, mdadm, + media-ctl, mediastreamer, memcached, memstat, memtester, + mesa3d, metacity, midori, mii-diag, minidlna, mmc-utils, + modem-manager, mongoose, mongrel2, monit, mpc, mpd, mpdecimal, + mpfr, mpg123, mplayer, mrouted, msmtp, mtd, mtools, mtr, + musepack, musl, mutt, mxml, mysql, nano, nanocom, nbd, ncftp, + ncurses, ndisc6, ne10, neard, neon, netatalk, netperf, + netsnmp, nettle, net-tools, network-manager, newt, nfs-utils, + ngrep, nmap, nodejs, nss-mdns, ntfs-3g, ntp, numactl, nut, + nuttcp, ofono, ola, omap-u-boot-utils, omniorb, + on2-8170-modules, opencore-amr, opencv, openntpd, openobex, + openocd, openpowerlink, openssh, openssl, openswan, + opentyrian, opentyrian-data, openvpn, opkg, oprofile, opus, + opus-tools, orbit, orc, ortp, p11-kit, pango, parted, + pciutils, pcmanfm, pcre, pcsc-lite, perf, perl, perl-gd, + perl-gdgraph, perl-io-socket-ssl, perl-json-tiny, + perl-module-build, perl-mojolicious, perl-net-ssleay, + perl-path-tiny, perl-xml-libxml, perl-xml-parser, php, + php-geoip, php-gnupg, php-imagick, php-memcached, php-ssh2, + php-yaml, php-zmq, picocom, pifmrds, pinentry, pixman, + pkg-autotools.mk, pkg-cmake.mk, pkg-download.mk, + pkg-generic.mk, pkg-kconfig.mk, pkg-luarocks.mk, pkg-perl.mk, + pkg-python.mk, pkg-utils.mk, poco, polarssl, polkit, poppler, + popt, portaudio, portmap, postgresql, powerpc-utils, pppd, + pptp-linux, prboom, procps-ng, proftpd, protobuf, protobuf-c, + psmisc, ptpd2, pulseaudio, pv, pwgen, python, python3, + python-dialog, python-ipy, python-keyring, python-mad, + python-netifaces, python-numpy, python-protobuf, python-pyasn, + python-pyparsing, python-pyro, python-pyusb, python-serial, + python-setuptools, qdecoder, qemu, qextserialport, qjson, qt, + qt5, qt5base, qt5connectivity, qt5declarative, qt5enginio, + qt5graphicaleffects, qt5imageformats, qt5multimedia, + qt5quick1, qt5quickcontrols, qt5script, qt5sensors, + qt5serialport, qt5svg, qt5webkit, qt5webkit-examples, + qt5websockets, qt5x11extras, qt5xmlpatterns, qtuio, quagga, + quota, qwt, radvd, rapidjson, rdesktop, redis, rings, rpcbind, + rpi-firmware, rpi-userland, rpm, rp-pppoe, rrdtool, + rsh-redone, rsync, rsyslog, rtai, rtmpdump, rt-tests, rubix, + ruby, samba, sam-ba, samba4, sane-backends, schifra, + sconeserver, scons, screen, sdl, sdl_gfx, sdl_image, + sdl_mixer, sdl_net, sdl_sound, sdl_ttf, sed, ser2net, + setserial, sg3_utils, shared-mime-info, simicsfs, sispmctl, + slang, slirp, smcroute, smstools3, snmppp, + snowball-hdmiservice, socat, socketcand, sox, spawn-fcgi, + speex, spice, spice-protocol, sqlcipher, sqlite, squashfs, + squid, sredird, startup-notification, strace, stress, + strongswan, stunnel, subversion, sudo, sunxi-boards, + sunxi-cedarx, swig, sylpheed, synergy, sysklogd, sysstat, + systemd, sysvinit, taglib, tar, tcl, tcllib, tcpdump, + tcpreplay, texinfo, tftpd, thrift, thttpd, tiff, ti-utils, + tn5250, torsmo, trace-cmd, transmission, tslib, tstools, + tvheadend, twolame, tz, uboot-tools, uclibc, udisks, ulogd, + upmpdcli, upx, urg, usb_modeswitch, usbmount, usbredir, + usbutils, util-linux, valgrind, vde2, vim, vlc, vo-aacenc, + vorbis-tools, vpnc, vsftpd, vtun, wayland, webkit, webp, + webrtc-audio-processing, weston, wget, whois, wireless-regdb, + wireshark, wpa_supplicant, wvstreams, x11r7, x11vnc, + xapp_xcalc, xapp_xdm, xapp_xdpyinfo, xapp_xf86dga, xapp_xfs, + xapp_xinit, xapp_xkbevd, xapp_xmh, xapp_xrandr, xapp_xsm, + xbmc, xbmc-pvr-addons, xcb-proto, xcursor-transparent-theme, + xdriver_xf86-input-mouse, xdriver_xf86-video-{ast,intel}, + xdriver_xf86-video-vmware, xenomai, xerces, + xfont_font-adobe-{100,75}dpi, + xfont_font-adobe-utopia-{100dpi,75dpi,type1}, + xfont_font-alias, xfont_font-arabic-misc, + xfont_font-bh-100dpi, xfont_font-bh-75dpi, + xfont_font-bh-lucidatypewriter-100dpi, + xfont_font-bh-lucidatypewriter-75dpi, xfont_font-bh-ttf, + xfont_font-bh-type1, xfont_font-bitstream-100dpi, + xfont_font-bitstream-75dpi, xfont_font-bitstream-type1, + xfont_font-cronyx-cyrillic, xfont_font-cursor-misc, + xfont_font-daewoo-misc, xfont_font-dec-misc, + xfont_font-ibm-type1, xfont_font-isas-misc, + xfont_font-jis-misc, xfont_font-micro-misc, + xfont_font-misc-cyrillic, xfont_font-misc-ethiopic, + xfont_font-misc-meltho, xfont_font-misc-misc, + xfont_font-mutt-misc, xfont_font-schumacher-misc, + xfont_font-screen-cyrillic, xfont_font-sony-misc, + xfont_font-sun-misc, xfont_font-winitzki-cyrillic, + xfont_font-xfree86-type1, xfsprogs, xinetd, xkeyboard-config, + xlib_libdmx, xlib_libFS, xlib_libpciaccess, xlib_libSM, + xlib_libX11, xlib_libXaw, xlib_libXext, xlib_libXfont, + xlib_libXi, xlib_libXinerama, xlib_libXrandr, xlib_libXrender, + xlib_libXres, xlib_libXScrnSaver, xlib_libXt, xlib_libXv, + xlib_libXvMC, xlib_libXxf86dga, xlib_libXxf86vm, xmlstarlet, + xproto_xcmiscproto, xproto_xextproto, xscreensaver, + xserver_xorg-server, xterm, xz, zeromq, zlib, zlog, zmqpp, + znc, zsh, zxing + + New packages: adwaita-icon-theme, am335x-pru-package, + bcache-tools, biosdevname, botan, canfestival, clamav, + cppunit, dos2unix, dovecot, dovecot-pigeonhole, getent, glm, + gst1-validate, hicolor-icon-theme, ipmitool, leafnode2, + libdvbcsa, libgtk3, libphidget, libshout, libunistring, + libupnpp, mesa3d-demos, modplugtools, mono, monolite, mp4v2, + netcat-openbsd, nginx, odhcploc, openvmtools, + phidgetwebservice, pps-tools, pure-ftpd, + python-configshell-fb, python-rtslib-fb, python-urwid, qlibc, + qt5location, shairport-sync, spidev_test, targetcli-fb, + tinyalsa, trinity, x264, yaml-cpp, ympd + + Removed packages: libelf + + Issues resolved (http://bugs.uclibc.org): + + #261: New package: wxWidgets + #325: New package: ratpoison + #405: New package: OpenVZ tools + #1309: New package: rdiff-backup + #3427: New package: nginx + #3655: New package: libav + #3991: New Package: open-vm-tools (Vmware Tools) + #6878: dmraid: disabled on ARC + #6950: Full unicode support in ncurses + #7010: jamvm builds and runs fine under mips (be) + #7088: elfutils on Blackfin doesn't build + #7142: ecryptfs needs getent to run + #7280: CMake toolchain file uses the FORCE attribute on CMAKE_CXX_FLAGS + #7346: [2014.08rc3] vim-8ae50e3ef8bf.tar.gz can not be downloaded, ... + #7352: [2014.08-rc3] diffutils-3.3 failed on building + #7358: rpi-userland: linking with bcm_host doesn't give vc_dispmanx_* + #7364: monit builds a static application, even though BR2_PREFER_... + #7370: ngrep - requires --with-pcap-includes fully defined to find... + #7442: rootfs remount does not work as expected with sysvinit + #7448: Having export MACHINE="something" breaks glibc build on IMX6... + #7568: musl buildroot-toolchain does not put libgcc_s.so.1 into place + #7574: quota-4.01 fails to build statically + +2014.08, Released September 1st, 2014 + + Minor manual fixes/additions. + + Updated/fixed packages: btrfs-progs, cmake, cppcms, exim, + lftp, libdaemon, libev, libgpgme, libiqrf, libnl, libplist, + libroxml, libwebsockets, mesa3d, mpd, mtdev2tuio, musepack, + perl-gd, php-geoip, php-gnupg, php-imagick, php-memcached, + php-ssh2, php-yaml, php-zmq, polarssl, ruby, systemd, taglib, + uboot-tools, upmpdcli, webkit, xapp_xfs, xapp_luit, + xscreensaver, yajl + + Issues resolved (http://bugs.uclibc.org): + + #7346: vim-8ae50e3ef8bf.tar.gz can not be downloaded, 404 not found + +2014.08-rc3, Released August 26th, 2014 + + Minor fixes. + + User manual update / restructuring. + + Updated/fixed packages: cairo, ecryptfs-utils, gettext, + gstreamer, gstreamer1, gutenprint, icu, imagemagick, jack2, + lbreakout2, libevas-generic-loaders, libftdi, libinput, + libtorrent, ltris, msgpack, ntp, php, procps-ng, pulseaudio, + thrift, tvheadend, usb_modeswitch, xmlstarlet, + + Issues resolved (http://bugs.uclibc.org): + + #7136: ecryptfs-utils needs gettext to run when glibc/eglibc... + #7322: libgomp dependency issue with imagemagick + #7328: Git dl of versions in x/y broken + +2014.08-rc2, Released August 18th, 2014 + + Fixes all over the tree. + + User manual restructured / reworked. + + Toolchain: Fix for C++ exceptions / pthread_exit() on + uClibc/glibc, C++-11 features with uClibc. + + Updated/fixed packages: bandwidthd, bluez5_utils, empty, + espeak, fbv, ffmpeg, gd, gnupg2, gst1-plugin-good, iftop, + infozip, libcuefile, libeml, libnftl, localedef, ltrace, + matchbox, mpd, network-manager, nftables, ngrep, nut, openssl, + oprofile, perl, perl-net-ssleay, postgresql, pppd, procps-ng, + qt, subversion, synergy, systemd, tar, tftpd, webkit, + xapp_rstart, xbmc, xbmc-pvr-addons + + Issues resolved (http://bugs.uclibc.org): + + #7124: Use BR toolchain externally results a non-bootable... + #7208: Glibc C++ aplications crash if they use exceptions + #7250: Cannot build with -std=c++11 + #7262: Generating locale en_US.UTF-8 fails on 64bit fedora.. + #7286: systemd 215 doesn't build + +2014.08-rc1, Released August 8th, 2014 + + Fixes all over the tree and new features. + + Architecture: Powerpc64 BE/LE added, AVR32 deprecated. + Improved altivec / SPE /atomic instructions + handling. Additional PowerPC CPU variants added. + + Defconfigs: Atmel SAMA5D3, Congatec QMX6, Lego ev3, TS-5x00, + qemu-system-xtensa, qemu-aarch64-virt added. A number of + tweaks to existing ones. lpc32xx defconfigs removed. + + Toolchain: Microblaze support for internal musl toolchain. + Default to GCC 4.8 for internal toolchain, remove deprecated + 4.3 and 4.6 versions. + External CodeSourcery / Linaro toolchain updates, option to + copy gconv libraries for external toolchains. + + Infrastructure: graph-depends: misc fixes, transitive + dependencies are not drawn by default. Download handling is + now done using helper scripts. Integrity of downloads can now + be verified using sha* hashes. Subversion download now uses + peg revisions for robustness. + Legal-info: License info of local or overridden packages are + saved as well. Toolchain packages are also taken into account. + autotools: Static linking with libtool / v1.5 improvements. + Gettextize support, similar to autoreconf. + kconfig package infrastructure added. + + Misc: Version selection for busybox dropped. + + Updated/fixed packages: aespipe, aiccu, alsa-lib, alsa-utils, + alsamixergui, argus, armadillo, at, atftp, atk, avahi, + avrdude, axel, b43-firmware, b43-fwcutter, bandwidthd, bc, + bcusdk, beecrypt, bind, binutils, blackbox, bluez5_utils, + bmon, boa, bonnie, bootutils, bsdiff, btrfs-progs, bustle, + busybox, bwm-ng, bzip2, ca-certificates, cairo, can-utils, + ccache, ccrypt, chrony, cifs-utils, classpath, cloog, cmake, + collectd, connman, coreutils, cosmo, cppcms, cramfs, crda, + cryptodev-linux, cryptodev, ctorrent, cvs, dbus-cpp, + dbus-glib, dbus-python, dbus, dcron, dejavu, devmem2, + dfu-util, dhcp, dhcpcd, dhcpdump, dhrystone, dialog, dillo, + distcc, dmidecode, dmraid, dnsmasq, doom-wad, dropbear, + dropwatch, dsp-tools, dtv-scan-tables, dvb-apps, e2fsprogs, + e2tools, eeprog, eigen, elf2flt, elftosb, enlightenment, + enscript, espeak, ethtool, eudev, evemu, exim, expedite, + explorercanvas, ezxml, faifa, fan-ctrl, fconfig, feh, + fetchmail, ffmpeg, fftw, file, fio, fis, flann, flashrom, + flex, flot, fltk, fontconfig, freerdp, freescale-imx, + freetype, ftop, gcc, gd, gdb, genimage, genromfs, gettext, + giblib, glib-networking, glibc, gmp, gnupg, gnutls, gpm, gpsd, + gptfdisk, gpu-viv-bin-imx6q, gqview, grantlee, gst-ffmpeg, + gst-fsl-plugins, gst1-libav, gst1-plugins-bad, + gst1-plugins-ugly, gtk2-engines, gtk2-theme-hicolor, gtkperf, + gvfs, haserl, hdparm, hostapd, httping, i2c-tools, icu, + imagemagick, imx-lib, inadyn, inotify-tools, input-tools, + ipkg, iproute2, iputils, irda-utils, iw, jack2, jpeg, jquery, + jquery-keyboard, jquery-mobile, jquery-validation, jsmin, kbd, + kexec, kmod, knock, latencytop, lcdapi, leafpad, lesstif, + lftp, libaio, libarchive, libargtable2, libart, libatasmart, + libatomic_ops, libbsd, libcap-ng, libcec, libcgicc, libcgroup, + libconfuse, libcurl, libdrm, libdvdnav, libdvdread, + libeXosip2, libedit, liberation, libesmtp, libev, libevas, + libevdev, libevent, libfcgi, libffi, libfreefare, libfslcodec, + libfslparser, libfslvpuwrap, libgail, libgcrypt, libglade, + libglib2, libgpgme, libgtk2, libhid, libical, libiconv, + libiqrf, libjpeg, liblog4c-localtime, libmbus, libmicrohttpd, + libmms, libndp, libnftnl, libnl, libnspr, libnss, liboauth, + libpcap, libpng, libpthsem, libqmi, libraw, libraw1394, + librsvg, libsoc, libsoup, libsvgtiny, libsysfs, libtasn1, + libtirpc, libtorrent, libusb, libv4l, libwebsockets, libxcb, + libxml2, libyaml, links, linux-firmware, linux-fusion, + linux-headers, linux-pam, lite, live555, lm-sensors, + lockfile-progs, lpc3250loader, lshw, lsof, lsuio, ltrace, + ltris, lua-messagepack, luainterpreter, luajit, luaposix, + luarocks, lvm2, lxc, lz4, lzo, make, makedevs, mdadm, + mediastreamer, mesa3d, metacity, minidlna, mkpasswd, + modem-manager, mongoose, mpd, mpg123, msgpack, mtd, mtools, + mtr, musepack, musl, mysql, nano, nasm, nbd, ncurses, ndisc6, + netatalk, netplug, network-manager, nftables, ngircd, nodejs, + nss-mdns, ntp, nut, olsr, open2300, opencv, openntpd, openocd, + openpgm, openpowerlink, openssh, openssl, openswan, openvpn, + opkg, oprofile, opus-tools, orc, p910nd, pango, parted, + pax-utils, pcmanfm, perf, perl, perl-module-build, php, + pixman, pkgconf, poco, polarssl, popt, portmap, postgresql, + prboom, protobuf-c, proxychains-ng, psmisc, psplash, ptpd2, + python, + python-{bottle,dpkt,id3,mad,msgpack,nfc,pygame,pyzmq,simplejson}, + python3, qhull, qt, qt5base, qt5connectivity, qt5declarative, + qt5graphicaleffects, qt5multimedia, qt5quickcontrols, + qt5sensors, qt5svg, qt5webkit, quagga, quota, radvd, rdesktop, + read-edid, rpcbind, rpi-firmware, rpi-userland, rpm, + rsh-redone, rsync, rt-tests, rtmpdump, rtorrent, rubix, ruby, + samba, samba4, sane-backends, sawman, sconeserver, setserial, + sg3_utils, shared-mime-info, smartmontools, smcroute, snappy, + socketcand, spawn-fcgi, sqlite, squashfs, squid, sredird, + startup-notification, statserial, strongswan, stunnel, + sunxi-mali, supervisor, synergy, sysklogd, sysprof, sysstat, + systemd, tcpdump, tcpreplay, texinfo, thrift, thttpd, ti-gfx, + ti-utils, tinyhttpd, torsmo, trace-cmd, transmission, tslib, + tstools, tvheadend, tzdata, uboot-tools, uclibc, udev, + udpcast, usb_modeswitch, usbmount, util-linux, valgrind, vim, + vlc, w_scan, wayland, webrtc-audio-processing, weston, wget, + wireless-regdb, wireless_tools, wireshark, wpa_supplicant, + xapp_{twm,xconsole,xcursorgen,xedit,xfs,xinit,xrandr}, + xdriver_xf86-video-intel, xlib_lib{FS,ICE,Xext,Xfont,Xft,Xi}, + xproto_fontsproto, xproto_inputproto, xserver_xorg-server, + x11vnc, xbmc, xbmc-addon-xvdr, xbmc-pvr-addons, xterm, xvkbd, + xz + + New packages: flickcurl, fmc, fmlib, geoip, gnupg2, + google-breakpad, imx-vpu, isl, kexec-lite, libglew, libglu, + libinput, libksba, libmemcached, libmpdclient, librtlsdr, + libuv, libva, libva-intel-driver, linux-zigbee, memcached, + mpdecimal, ncmpc, opencore-amr, patchelf, perl-datetime-tiny, + perl-gd, perl-gdgraph, perl-gdtextutil, perl-io-socket-ssl, + perl-json-tiny, perl-mojolicious, perl-net-ssleay, + perl-path-tiny, perl-try-tiny, perl-xml-libxml, + perl-xml-namespacesupport, perl-xml-sax, perl-xml-sax-base, + php-geoip, php-memcached, pifmrds, pinentry, powerpc-utils, + procps-ng, pwgen, python-cffi, python-daemon, python-flup, + python-ipython, python-numpy, qt5enginio, qt5webkit-examples, + qt5websockets, simicsfs, sispmctl, sox, sshpass, tclap, + twolame, upmpdcli, whois, xlib_libxshmfence, xproto_dri3proto + + Removed packages: procps + + Issues resolved (http://bugs.uclibc.org): + + #5750: Doing a Buildroot build from /usr doesn't work + #5900: config flags to the Xenomai build system + #6230: Cannot compile gcc without threads (uClibc-based) + #6626: procps Unknown HZ value! (XX) Assume 100 + #7118: Package "thrift" requires atomic operations + #7154: Local uClibc config file gets overwritten using ... + #7160: host-xz not built + #7166: hostapd: segfault when using RT5370 + #7172: Name collision of rpath token expansion and internal.. + #7178: NTPd package cannot sync time without a proper ntp.conf + #7184: supervisord depends on libxml2 implicitly + #7196: Unable to build on UBUNTU13.10 + #7268: python 2.7 compilation issue on a Debian/Ubuntu ... + +2014.05, Released May 31st, 2014 + + Minor fixes. + + Minor manual fixes. U-Boot now defaults to spl/u-boot-spl.bin + for the spl file. + + Updated/fixed packages: exim, glibc, gnutls, libfribidi, + qt5base, qt5webkit, sysklogd, thrift, u-boot + +2014.05-rc3, Released May 28th, 2014 + + Minor fixes. + + Updated/fixed packages: acl, attr, connman, dosfstools, + dropbear, dvb-apps, exim, flite, gdb, httping, hwdata, + lesstif, libnss, libv4l, lttng-babeltrace, midori, monit, + mplayer, php, python2, rdesktop, rpi-userland, ruby, samba, + samba4, slang, xbmc + + Issues resolved (http://bugs.uclibc.org): + + #7100: license info for package 'acl' missing + #7106: license info for package 'attr' missing + #7112: license info for package 'hwdata' + +2014.05-rc2, Released May 21st, 2014 + + Fixes all over the tree. + + Stripping using sstrip has been deprecated. + + BR2_EXTERNAL can now also be used to implement custom + filesystem types. + + The newly added BR2_GRAPH_DEPTH variable to limit the depth of + the generated dependency graph has been renamed to + BR2_GRAPH_DEPS_OPTS, so additional options can be supported in + the future. + + The virtual package infrastructure will now error out early + if multiple packages providing the same virtual package has + been enabled (E.G. opengl). This change requires that the + packages explicitly declare what virtual package(s) they + provide. + + Updated/fixed packages: acpid, armadillo, avahi, bellagio, + btrfs-progs, cairo, clapack, directfb, duma, ecryptfs-utils, + elfutils, eudev, fbgrab, fio, flann, fluxbox, gdb, gpm, + gpu-viv-bin-mx6q, gst1-plugins-good, gst-plugins-good, + imagemagick, iprutils, ipsec-tools, jack2, libdvdnav, + libdvdread, libnss, libunwind, linux-headers, lsof, lua, + luajit, matchbox-keyboard, mesa3d, mpd, mplayer, mtr, mysql, + netsnmp, nodejs, openpowerlink, openvpn, pciutils, + php-imagick, postgresql, pulseaudio, qt5quick1, rpi-userland, + rsyslog, samba, samba4, sane-backends, sunxi-mali, systemd, + ti-gfx, tstools, udev, webkit, wpa_supplicant, xbmc, + xlib_libXpm, xserver_xorg-server, zyre + + Issues resolved (http://bugs.uclibc.org): + + #5396: Boot hangs when starting samba if BR2_ENABLE_LOCALE... + #7016: Git issues in resulting buildroot tar + #7094: pciutils doesn't build on Blackfin + +2014.05-rc1, Released May 13th, 2014 + + Fixes all over the tree and new features. + + Architectures: Support for MIPS o32 ABI on MIPS-64 targets has + been removed. Building o32 ELF files for MIPS64 is an exotic + configuration that nobody should be using. If o32 is required, + then is better if it's built for MIPS 32-bit cores so only + 32-bit instructions will be used leading to a more efficient + o32 usage. + Support for the ARM A12 variant and Intel corei7. + + Configs: Minnowboard and Altera SoCkit added, QEMU updates. + + Bootloaders: Grub2 and gummiboot support, syslinux support + extended. + + Toolchains: GCC 4.9. Glibc 2.19. Support for the musl C + library for internal and external toolchains. 4.8-R3 support + for ARC, Internal toolchain support for Aarch64 and + Microblaze. Environment variable to control debug output of + toolchain wrapper renamed to BR2_DEBUG_WRAPPER to match the + other variables. Toolchain tuple vendor name can now be + customized. Updated external Linaro ARM/Aarch64 + toolchains. Added external Linaro ARMEB toolchain. + A GDB gdbinit file is now generated for external toolchains to + automatically set the correct sysroot. + + Kconfig handling for minimum kernel headers version required + for packages. Now packages needing specific kernel header + features can specify these requirements in Kconfig. + + Infrastructure: Support for (but disabled as it leads to + unreproducible builds) toplevel parallel builds. See the + comment at the top of Makefile for details about how to enable + it and what the problems are if you want to test it. + Python package infrastructure extended to support Python 3.x + Perl and virtual package infrastructure support added. + PRE_*_HOOKS support for all build steps. + + Updated/fixed packages: acpid, agentpp, aiccu, apr, avahi, + barebox, bash, beecrypt, bellagio, binutils, boost, + boot-wrapper-aarch64, bustle, busybox, ca-certificates, cairo, + ccache, ccid, cgilua, chrony, cifs-utils, civetweb, cmake, + collectd, connman, coreutils, coxpcall, cppcms, cppzmq, crda, + cryptodev, cryptsetup, cups, czmq, dbus, dhcpdump, directfb, + dmalloc, dmraid, dnsmasq, dosfstools, dsp-tools, dtc, + dvb-apps, ebtables, ecryptfs-utils, eigen, erlang, ethtool, + evemu, evtest, f2fs-tools, fdk-aac, feh, ffmpeg, file, filemq, + flac, flot, fmtools, fping, freetype, fswebcam, gcc, gd, gdb, + gettext, giblib, git, glibc, glibmm, glib-networking, gmp, + gnutls, gpm, gpsd, gpu-viv-bin-mx6q, grep, gst1-libav, + gst1-plugins-bad, gst1-plugins-base, gst1-plugins-good, + gst1-plugins-ugly, gst-ffmpeg, gst-fsl-plugins, gst-omx, + gst-plugins-good, gstreamer1, gvfs, harfbuzz, haveged, + hostapd, htop, httping, ifplugd, iftop, igmpproxy, + imagemagick, imlib2, imx-lib, infozip, intltool, iproute2, + ipsec-tools, ipset, jansson, jpeg, jpeg-turbo, jquery, + jquery-keyboard, jquery-ui, jquery-ui-themes, json-glib, + json-javascript, kexec, kmod, lame, lbase64, lbreakout2, + lcdproc, lftp, libao, libatasmart, libatomic_ops, libcap, + libcdio, libcec, libcgicc, libcgroup, libcurl, libdrm, + libdvdnav, libdvdread, libegl, libeio, libenca, libesmtp, + libevas, libevdev, libfribidi, libfslcodec, libfslparser, + libfslvpuwrap, libgail, libgles, libglib2, libgtk2, libhid, + libjpeg, libmbim, libmicrohttpd, libmodplug, libnftnl, + libnspr, libogg, libopenmax, libopenvg, libpcap, libplayer, + libpng, libpthread-stubs, librsvg, libsigsegv, libsocketcan, + libsoup, libtasn1, libtool, libtpl, libunwind, liburcu, + libusb, libwebsockets, libxcb, libxml2, libxmlpp, libyaml, + lighttpd, linphone, linux-firmware, linux-headers, ljsyscall, + lmbench, lsof, ltp-testsuite, ltris, lttng-babeltrace, + lttng-libust, lttng-modules, lttng-tools, lua, lua-cjson, + luacrypto, lua-ev, luaexpat, luaexpatutils, luafilesystem, + luainterpreter, luajit, lua-msgpack-native, luaposix, + luarocks, luasec, luasocket, luasql-sqlite3, lvm2, macchanger, + memstat, mesa3d, metacity, minidlna, mmc-utils, + mobile-broadband-provider-info, modem-manager, mongrel2, + monit, mpd, mplayer, msmtp, mtd, mtools, mutt, mysql, nasm, + ncurses, ne10, netatalk, netsnmp, nettle, network-manager, + newt, nfs-utils, nmap, nodejs, ntfs-3g, ntp, nut, ofono, ola, + olsr, omniorb, opencv, opengl, openpgm, openssh, openssl, + openswan, openvpn, orbit, orc, p11-kit, pango, parted, + pciutils, pcre, pcsc-lite, perf, perl, perl-xml-parser, php, + picocom, pixman, pkgconf, poppler, popt, portmap, powervr, + pppd, pptp-linux, proftpd, protobuf, protobuf-c, ptpd2, + pulseaudio, python, python3, python-bottle, python-m2crypto, + python-netifaces, python-pyasn, python-pycrypto, + python-pygame, python-pysnmp, python-pysnmp-apps, + python-pysnmp-mibs, python-serial, python-setuptools, + qextserialport, qt, qt5, qt5base, qt5connectivity, + qt5declarative, qt5graphicaleffects, qt5imageformats, + qt5multimedia, qt5quick1, qt5quickcontrols, qt5script, + qt5sensors, qt5serialport, qt5svg, qt5webkit, qt5x11extras, + qt5xmlpatterns, qtuio, qwt, radvd, readline, rings, + rpi-firmware, rpi-userland, rsh-redone, rsync, rsyslog, rtai, + rtmpdump, rt-tests, ruby, samba, sconeserver, scons, sdl, + sdl_image, sdl_mixer, sg3_utils, slang, smstools3, snmppp, + socat, speex, sqlcipher, sqlite, squashfs, squid, strongswan, + stunnel, sunxi-boards, sunxi-mali, sunxi-tools, sylpheed, + syslinux, sysstat, systemd, taglib, tcl, tcllib, tcpreplay, + tidsp-binaries, ti-gfx, tmux, tvheadend, tzdata, uboot, + uboot-tools, uclibc, udev, udisks, ulogd, usb_modeswitch, + usb_modeswitch_data, usbmount, util-linux, valgrind, vlc, + webkit, weston, wget, wireshark, wpa_supplicant, wsapi, + w_scan, xapp_appres, xapp_bdftopcf, xapp_beforelight, + xapp_bitmap, xapp_editres, xapp_fslsfonts, xapp_fstobdf, + xapp_iceauth, xapp_ico, xapp_mkfontscale, xapp_rgb, + xapp_rstart, xapp_sessreg, xapp_showfont, xapp_twm, + xapp_viewres, xapp_xauth, xapp_xbacklight, xapp_xcalc, + xapp_xclock, xapp_xditview, xapp_xdpyinfo, xapp_xdriinfo, + xapp_xev, xapp_xfd, xapp_xfontsel, xapp_xfs, xapp_xfsinfo, + xapp_xgc, xapp_xhost, xapp_xinit, xapp_xkbutils, xapp_xkill, + xapp_xload, xapp_xlsclients, xapp_xlsfonts, xapp_xmag, + xapp_xman, xapp_xmessage, xapp_xmodmap, xapp_xprop, + xapp_xrandr, xapp_xrdb, xapp_xrefresh, xapp_xset, + xapp_xsetroot, xapp_xsm, xapp_xstdcmap, xapp_xvidtune, + xapp_xvinfo, xapp_xwd, xapp_xwininfo, xcb-util-wm, + xdriver_xf86-input-evdev, xdriver_xf86-input-joystick, + xdriver_xf86-input-keyboard, xdriver_xf86-input-mouse, + xdriver_xf86-input-synaptics, xdriver_xf86-input-vmmouse, + xdriver_xf86-video-ark, xdriver_xf86-video-ast, + xdriver_xf86-video-ati, xdriver_xf86-video-cirrus, + xdriver_xf86-video-dummy, xdriver_xf86-video-fbdev, + xdriver_xf86-video-geode, xdriver_xf86-video-glide, + xdriver_xf86-video-glint, xdriver_xf86-video-i128, + xdriver_xf86-video-intel, xdriver_xf86-video-mach64, + xdriver_xf86-video-mga, xdriver_xf86-video-neomagic, + xdriver_xf86-video-newport, xdriver_xf86-video-nv, + xdriver_xf86-video-openchrome, xdriver_xf86-video-r128, + xdriver_xf86-video-savage, xdriver_xf86-video-siliconmotion, + xdriver_xf86-video-sis, xdriver_xf86-video-tdfx, + xdriver_xf86-video-tga, xdriver_xf86-video-trident, + xdriver_xf86-video-vesa, xdriver_xf86-video-vmware, + xdriver_xf86-video-voodoo, xenomai, xerces, xl2tp, xlib_libFS, + xlib_xtrans, xproto_xproto, xserver_xorg-server, + xutil_util-macros, zeromq, zic, zmqpp, zyre + + New packages: armadillo, btrfs-progs, clapack, cosmo, dado, + dbus-triggerd, dtv-scan-tables, e2tools, eudev, exim, expect, + fetchmail, flann, flite, gnu-efi, grub2, gummiboot, heimdal, + iprutils, iptraf-ng, jack2, jquery-mobile, libee, libestr, + libgc, libgl, liblogging, libndp, libsoxr, libstrophe, + libubox, libuci, libxmlrpc, ljlinenoise, lpeg, lpty, lrandom, + lsqlite3, lua-coat, lua-coatpersistent, lua-csnappy, luajson, + lualogging, lua-messagepack, lua-testmore, lunit, lzip, lzlib, + musl, nftables, opentyrian, opentyrian-data, + perl-module-build, php-gnupg, php-imagick, php-ssh2, php-yaml, + php-zmq, postgresql, python-libconfig, python-pypcap, + python-pyrex, qdecoder, qhull, samba4, smack, tz, tzdump, ucl, + upx, vo-aacenc, xbmc, xbmc-addon-xvdr, xbmc-pvr-addons, + yaffs2utils, zlog, znc + + Removed packages: crosstool-ng, python-distutilscross, vala + + Issues resolved (http://bugs.uclibc.org): + + #6842: Checking external toolchain for eabihf + #6956: Packaging libsoxr + #6986: Make legal-info fails on uboot versions before 2014.01 + #6992: Incorrect installation rights on external kernel module.. + +2014.02, Released February 27th, 2014 + + Minor fixes. + + Updated/fixed packages: cegui06, cppdb, e2fsprogs, gcc, gdb, + gst1-plugins-bad, gstreamer, gstreamer1, haserl, imagemagick, + libpng, libxml2, lua, luajit, luarock, ncftp, openswan, + pcsc-lite, qt5connectivity, ramsmp, strongswan, vlc + + Issues resolved (http://bugs.uclibc.org): + + #6938: mkuser script generates wrong password for new user in.. + +2014.02-rc3, Released February 25th, 2014 + + Minor fixes. + + Updated/fixed packages: aiccu, ala-lib, alsa-utils, binutils, + cairo, coreutils, dhcpcd, distcc, efl, evas, iputils, gdb, + gpsd, gst-fsl-plugins, icu, libcec, libcgi, libplayer, + libsecret, libsepol, libsigsegv, libtool, libv4l, + linux-headers, matchbox-lib, mpg123, ncftp, opencv, pcmanfm, + pixman, pv, qt, rt-tests, sawman, sconeserver, sdl, thrift, + tvheadend, util-linux, webkit, xscreensaver + + Issues resolved (http://bugs.uclibc.org): + + #4706: Removing .stamp_target_installed does not trigger... + #5030: busybox built fails if we use an override src dir... + #5420: Dbus and /var/run management + #5768: Not able to build ALSA-Lib for static build + #5774: Not able to build ALSA-Utils for static build + #6542: external python modules fail to compile to pyc if... + #6764: Support for kernel signed modules + #6794: Busybox compiled from buildroot hangs on pass from... + +2014.02-rc2, Released February 20th, 2014 + + Fixes all over the tree. Static linking / nommu fixes and + annotations for several packages. + + Updated/fixed packages: boost, busybox, collectd, coreutils, + dropbear, elfutils, feh, gcc, gst1-libav, imagemagick, iozone, + jimtcl, kexec, libvncserver, lvm2, lxc, mplayer, netsnmp, nut, + opencv, python, python3, qtuio, systemd, thrift, transmission, + uclibc, vlc, webkit + + Issues resolved (http://bugs.uclibc.org): + + #5450: AT91SAM9260 Bootstrap compilation problem + #5582: libiconv 1.14 failed to build + #5624: When building directfb, BR2_TARGET_LDFLAGS not used by.. + #5852: [2012.11] usb_modeswitch should depends of "BR2_PACK.. + #6218: binutils-2.23.2/gas fails with undefined reference to.. + #6236: binutils-2.23.2/bfd fails with undefined reference to.. + #6470: If the build directory is a child of /usr, the build.. + #6776: systemd error: static declaration of 'execvpe' follows.. + #6818: toolchainfile.cmake has absolut path references + +2014.02-rc1, Released February 11th, 2014 + + Fixes all over the tree and new features. + + Support for external packages/defconfigs (BR2_EXTERNAL). See + user manual for details. + + Cleanup of environment variable names for consistency. The + download directory location override (BUILDROOT_DL_DIR) is now + called BR2_DL_DIR. Likewise the name of the current .config is + renamed from BUILDROOT_CONFIG to BR2_CONFIG. Please update + your post build scripts if you use this! BUILD_DIR is now also + exported to the post build/image scripts. + + Toolchain: GCC 4.8 fix for ARM stack corruption, reverted + uClibc pread/pwrite backport as they cause issues on certain + architectures, new Linaro and Sourcery Codebench toolchains. + x86: Support for AMD Jaguar cores, SSE4.x, SH: SH2/SH3/SH3EB + variants removed, Microblaze: Internal toolchain support + + Legal infrastructure: Info is now split between host and + target packages, large number of license annotations. + + Lua: selection between lua 5.1 / 5.2, luarocks support + + Python: package infrastructure, many new packages. + + Defconfigs: Armadeus APF51 + Zedboard added, apf27, apf28, + beaglebone, microblaze, pandaboard, qemu, raspberry pi + updated. + + Updated/fixed packages: aiccu, alsa-lib, alsa-utils, + am33x-cm3, aumix, autoconf, automake, barebox, bellagio, + berkeleydb, binutils, bison, blackbox, bluez_utils, boost, + bustle, busybox, cairo, can-utils, ccache, ccid, cgilua, + cifs-utils, civetweb, cmake, collectd, connman, copas, + coreutils, coxpcall, cppzmq, cramfs, crda, cryptodev-linux, + cryptsetup, cups, czmq, dhcpcd, dhcpdump, dhrystone, dialog, + dmraid, dnsmasq, dosfstools, dropbear, dropwatch, dtc, duma, + dvb-apps, e2fsprogs, eglibc, eigen, elf2flt, erlang, ethtool, + f2fs-tools, ffmpeg, file, filemq, fio, flashrom, flex, + fluxbox, fontconfig freerdp, freetype, gadgetfs-test, gawk, + gcc, gdb, gdbm, gettext, git, glibc, gnupg, gnutls, gob2, + gpsd, grep, grub, gst-ffmpeg, gst-plugins-good, + gst1-plugins-bad, gst1-plugins-base, gst1-plugins-good, + gst1-plugins-ugly, gstreamer, gstreamer1, gtest, icu, iftop, + imagemagick, inadyn, infozip, iozone, iproute2, iptables, iw, + jpeg, jpeg-turbo, jq, kexec, kmod, knock, lbase64, lcdapi, + lftp, libcdaudio, libcgi, libcgicc, libcuefile, libcurl, + libdmtx, libdrm, libdvdnav, libdvdread, libegl, libevent, + libexif, libfcgi, libfreefare, libgles, libglib2, libllcp, + libmicrohttpd, libmpd, libnfc, libnl, libnss, libopenmax, + libopenvg, libpcap, libpfm4, libplayer, libpng, libqmi, + libreplaygain, libroxml, libsamplerate, libsexy, libsigsegv, + libsndfile, libsoc, libtasn1, libtorrent, libtpl, libupnp, + libusb, libusb-compat, libvorbis, libxcb, libxml2, libxmlpp, + libyaml, lighttpd, linknx, linux-firmware, linux-pam, live555, + lm_sensors, lmbench, lockdev, logrotate, lrzsz, ltrace, lua, + lua-ev, lua-msgpack-native, luabitop, luaexpat, luaexpatutils, + luafilesystem, luajit, luaposix, luasec, luasocket, + luasql-sqlite3, m4, matchbox, mdadm, minicom, mongrel2, mpc, + mpd, mpg123, mplayer, mtd, mysql, lvm2, mxml, ncurses, ne10, + neard, neardal, netsnmp, netstat-nat, network-manager, nodejs, + numactl, ofone, ola, olsr, omniorb, open2300, opencv, + openpowerlink, openssh, openssl, openvpn, oprofile, opus, + opus-tools, orbit, p11-kit, parted, pcre, pcsc-lite, perl, + php, poco, poppler, powervr, protobuf-c, psplash, python, + python-bottle, + python-{crc16,distutilscross,dpkt,id3,ipy,m2crypto,mad,meld}, + python-{netifaces,nfc,protobuf,pygame,pyparsing,pyro,pyzmq}, + python-{serial,setuptools}, qt, qt5base, qt5connectivity, + qt5declarative, qt5graphicaleffects, qt5jsbackend, + qt5multimedia, qt5quick1, qt5quickcontrols, qt5script, + qt5webkit, radvd, redis, rings, rng-tools, rpcbind, + rpi-firmware, rpi-userland, rt-tests, sam-ba, samba, sawman, + sconeserver, scons, sdl, sg3_utils, snappy, snmppp, + socketcand, spice, spice-protocol, sqlcipher, sqlite, squid, + sshfs, strace, subversion, sunxi-mali, supervisor, sysklogd, + sysprof, sysstat, systemd, sysvinit, taglib, tar, tcpdump, + ti-gfx, ti-utils, tinymembench, tn5250, trace-cmd, + transmission, tvheadend, tzdata, zxing, uboot, uboot-tools, + uclibc, udev, udpcast, ulogd, urg, usb_modeswitch_data, + util-linux, vala, valgrind, vorbis-tools, wavpack, wayland, + weston, wget, wireless-regdb, wireshark, wpa_supplicant, + wsapi, xavante, xapp_xdpyinfo, xapp_xrandr, xcb-proto, + xdriver_xf86-video-intel, xenomai, xkeyboard-config, xl2tp, + xlib_lib{FS,SM,X11}, + xlib_libX{au,aw,composite,cursor,damage,ext,fixes,font,i}, + xlib_libX{inerama,mu,pm,randr,render,res,t,tst,v,xf86dga}, + xlib_libXxf86vm, xlib_libdmx, xlib_libfontenc, + xlib_libpciaccess, xlib_xtrans, xproto_dri2proto, + xproto_{glproto,inputproto,presentproto,randrproto,videoproto}, + xproto_xextproto, xproto_xproto, xutil_util-macros, + xutil_makedepend, zic, zmqpp, zxing, zsh, zyre + + New packages: apitrace, avrdude, c-ares, ca-certificates, + cwiid, dbus-cpp, evemu, fping, fswebcam, gpm, gst1-libav, + haveged, intel-microcode, iucode-tools, jasper, joe, ktap, + lbreakout2, libass, libbluray, libcdio, libenca, libevdev, + libmbim, libmodplug, libnfs, libnftnl, libplist, libshairplay, + libsocketcan, ljsyscall, log4cplus, ltris, luainterpreter, + luarocks, minidlna, mmc-utils, modemmanager, mtr, net-tools, + python-configobj, python-dialog, python-json-schema-validator, + python-keyring, python-msgpack, python-posix-ipc, + python-pyasn, python-pycrypto, python-pysnmp, + python-pysnmp-apps, python-pysnmp-mibs, python-pyusb, + python-simplejson, python-tornado, python-versiontools, + rtmpdump, rtptools, smcroute, smstools3, tcpreplay, thrift, + ti-uim, tinyxml, tmux, vlc, wmctrl, xconsole + + Removed packages: autoconf, automake, ccache, cpanminus, lzma, + netkitbase, netkittelnet, pkg-config, squashfs3, ttcp, xstroke + + Issues resolved (http://bugs.uclibc.org): + + #65: new package: dbus c++ language bindings + #769: Update configuration menu for MIPS target + #2419: Add a bundle of Lua modules + #2629: Segmentation faults and division by zero in Grub on ext2 + #3811: Added auto-mount for USB and SD Card (mdev) (for 2011.05) + #4339: Allow override of DL_DIR in extract step + #4363: Make sure that copied linux and busybox defconfig are... + #4454: There should be simple way to update image, when chang... + #5024: grub fails to build for x86_64 target architecture + #5066: New-Package: net-tools + #5072: ncurses: add ncurses-progs to target + #5294: uclibc build ignores target CFLAGS and LDFLAGS + #5366: Login doesn't work with util-linux versions of login/agetty + #5378: dropbear Makefile broken + #5390: System banner - change to empty doesn't remove /etc/issue + #5780: spurious build failure because it cannot remove ubinize.cfg + #5798: ncurses-5.9 fails to compile statically + #5810: Buildroot 2012.11: Additional GCC option "-msoft-float" ... + #6080: Git fetch caching + #6092: Bootable ISO image creation seems to have stopped working.. + #6272: coreutils build fails + #6434: apply-patches.sh does not work recursively + #6446: eglibc doesn't install ldconfig to target + #6484: Add c-ares + #6596: Slow bootup if mdev is chosen + #6656: Build Qt5 with ccache + #6662: internal compiler error: Segmentation fault during making.. + #6722: Usage of $($(PKG)_DIR_PREFIX) is an issue with linux package + #6752: genext2fs: e2fsck must run before tunefs -U random + #6770: openssl 1.0.1f fails with ccache + #6830: Qt5: no fonts are installed + #6848: Qt5: no text shown in simple QWidget / frame-buffer setup + #6854: Update to Qt 5.2.1 + +2013.11, Released November 30th, 2013: + + Minor fixes. + + Updated/fixed packages: apr, binutils, dbus-python, dropwatch, + ecryptfs-utils, eglibc, gdb, gpsd, grantlee, hostapd, + iptables, qlibiscsi, libnspr, libnss, libpfm4, libtool, + lua-ev, lvm2, mplayer, qt, qt5, quagga, ruby, tinymembench, + tvheadend, util-linux, wpa_supplicant + + Issues resolved (http://bugs.uclibc.org): + + #1279: Buildroot compiled Busybox and Coreutils LFS issues + #2995: -fstack-protector-all causes ssh to SIGSEGV + #5570: Cannot compile software on the target machine + #6428: util-linux libmount segfaults with patch from buildroot + #6500: php fails to build for armel + #6554: gdb needs to dependents on host texinfo + #6692: GNU nano fails to compile for x86_64 + #6704: wpa_supplicant: fix wrong path to executable file in D-Bus + +2013.11-rc3, Released November 26th, 2013 + + Fixes all over the tree. + + Architecture: Mark MIPS I, II, III and IV as deprecated. + + Updated/fixed packages: beecrypt, dbus, e2fsprogs, libcap-ng, + libglib2, libroxml, libsigsegv, libvncserver, lxc, mdadm, + mongoose, nut, ola, omniorb, openssl, pcre, php, poco, + protobuf-c, pv, qt5base, ruby, schifra, squid, sunxi-mail, + swig, ti-gfx, tinymembench, uclibc, udisks, vim + +2013.11-rc2, Released November 18th, 2013 + + Fixes all over the tree. + + Defconfigs: qemu_arm_versatile, qemu_arm_nuri, sheevaplug: + Adjust kernel versions. + + Toolchain: avr32: fix for modern kernel headers + + Bootloader: Barebox updated to 2013.10.1 + + Updated/fixed packages: dhcp, e2fsprogs, gst1-plugins-bad, + libcurl, libvncserver, nano, pc, qt5base, squashfs, ttcp, + wayland, wvstreams + + Issues resolved (http://bugs.uclibc.org): + + #3601: DHCPD S80dhcp-server startup script issues + #6320: Fix kernel compile issue if BR2_LINUX_KERNEL_CUSTOM_GIT_VERS.. + #6416: Xenomai package, patch alternative + #6590: directfb-examples build failed whit linaro toolchain + +2013.11-rc1, Released November 12th, 2013 + + Architectures: Nios-II support, MIPS arch handling fixes + + Defconfigs: cubieboard2, freescale i.MX 6sololite evk, + sabre-sd, wandboard added, rpi renamed to raspberrypi_defconfig + + Toolchain: glibc support, upstream uClibc fixes, uClibc 0.9.31 + for avr32, crosstool-ng backend removed, external musl + toolchain support, gcc 4.8.2, updated Linaro external + toolchains. Fortran and objective-C support deprecated, + mudflap support + + Bootloaders: U-Boot: u-boot.imx support, version bumps + + Linux: use kmod instead of module-init-tools + + System: default to devtmpfs for /dev + + Infrastructure: Make 3.82 fixes, locales generation fixes, CVS + download support, post-rsync hooks + + Fs: u-boot image support for cpio + + Updated/fixed packages: aircrack-ng, alsamixergui, apr, + apr-util, atk, automake, bellagio, berkeleydb, bind, binutils, + bison, boost, busybox, can-utils, ccache, ccid, cgilua, + chrony, cifs-utils, cjson, collectd, connman, conntrack-tools, + copas, cppcms, cppzmq, czmq, dash, dbus, dhcpcd, diffutils, + directfb, dmidecode, dnsmaqs, docker, dosfstools, dropbear, + dropwatch, ebtables, eglibc, elf2flt, empty, enchant, erlang, + ethtool, fbgrab, fbv, fdk-aac, feh, ffmpeg, file, findutils, + fltk, fmtools, freetype, gdk-pixbuf, gettext, git, + glib-networking, gmp, gnupg, gnutls, gpu-viv-bin-mx6q, gsl, + gstreamer, gstreamer1, gst1-plugins-{bad,base,good,ugly}, + gtest, gutenprint, hplip, i2c-tools, icu, ifplugd, + imagemagick, iozone, iproute2, ipset, iptables, iw, jamvm, + jansson, jpeg-turbo, kismet, kmod, lcms2, libassuan, libcap, + libcap-ng, libcdaudio, libcec, libcue, libcurl, libdrm, + libedit, libevas, libevent, libfreefare, libfuse, + libgpg-error, libiconv, liblog4c-localtime, libmicrohttpd, + libmnl, libmodbus, + libnetfilter_{acct,conntrack,cthelper,cttimeout,log,queue}, + libnfnetlink, libnl, libpng, libqmi, libqrencode, libroxml, + libsecret, libsigsegv, libsoup, libtirpc, libunwind, libusb, + libvpx, lighttpd, linphone, linux-pam, lmbench, + lockfile-progs, log4cxx, logrotate, logsurfer, ltp-testsuite, + ltrace, luacrypto, luaposix, lvm2, m4, matchbox-lib, + media-ctl, mediastreamer, minicom, minidlna, mongoose, monit, + mpc, mpd, mpg123, mplayer, mrouted, mtdev, mutt, mysql_client, + nano, ncftp, ndisc6, neard, neardal, neon, net-snmp, netatalk, + netcat, netkitbase, netperf, netplug, nettle, nfacct, + nfs-utils, ngircd, ngrep, noip, nuttcp, olsr, openssh, opkg, + oprofile, opus-tools, orc, ortp, pciutils, pcre, pcsc-lite, + perf, perl, perl-cross, php, picocom, pkgconf, polarssl, + poppler, pppd, proftpd, protobuf, proxychains-ng, pulseaudio, + pv, qemu, qt, qt5base, qt5webkit, quagga, radvd, redis, + rpi-{firmware,userland}, rrdtool, rsync, rtorrent, ruby, + samba, scons, screen, sdl_sound, ser2net, setserial, + smartmontools, socat, socketcand, sqlcipher, sqlite, squid, + stress, strongswan, stunnel, sudo, syslinux, systemd, + sysvinit, tcl, ti-gfx, time, transmission, tremor, tslib, + tstools, tvheadend, tzdata, uboot-tools, uclibc, udpcast, + uemacs, ulogd, usb_modeswitch{,_data}, util-linux, vala, + valgrind, vde2, vorbus-tools, vpnc, vsftpd, vtun, wayland, + webkit, webp, webrtc-audio-processing, weston, wget, + wireshark, wsapi, xavante, xdriver_xf86-video-geode, xenomai, + xinetd, xlib_libpthread-stubs, xl2tp, xmlstarlet, + xserver_xorg-server, xz, zeromq, zic, zmqpp + + New packages: aiccu, autossh, bc, civetweb, cppdb, cryptsetup, + duma, eigen, harfbuzz, igmpproxy, iputils, jq, knock, kobs-ng, + lesstif, libcgroup, libsepol, libsoc, libssh2, luasec, luasql, + lxc, nut, ola, omniorb, openpowerlink, orbit, p910nd, psplash, + python-crc16, python-ipy, python-pyzmq, qt5sensors, + qt5serialport, qt5x11extras, snmppp, subversion, tcping, + trace-cmd, xscreensaver, zsh + + Removed packages: module-init-tools + + Issues resolved (http://bugs.uclibc.org): + + #1138: Buildroot fails to build packages if BR2_GCC_SHARED_LIBGCC=y + #5408: qt build failure with Sourcery CodeBench ARM 2010.09 + #5630: makefile error with toolchain helpers.mk + #5672: htop: remove X11 stuff + #5678: linux.mk: linux-menuconfig fails + #5696: python3 installation is too large, patches from python2 needed + #5978: Erlang does not build for arm in 2013.02-rc3 + #6392: Extended ARM uImage kernel options + #6404: Buildroot's coreutils 'uname -p' reports 'Unknown' on recent.. + #6428: util-linux libmount segfaults with patch from buildroot + #6452: eglibc from Linaro 2013.07 not copied to target correctly + #6566: PHP segfault when crosscompiled to mips64 - patch included + #6572: [PowerPC] Buildroot uses wrong external toolchain libraries.. + #6578: udisks package broken + #6602: ebtables 64 bit kernel + 32 bit userland alignment error.. + #6608: ebtables missing ethertypes - fix included + #6620: Sysvinit package missing killall5 and symlinks - patch included + #6632: CMake use host pkg-config + #6638: pkgconf doesn't download + #6644: "all" target doesn't work in out-of-tree builds + #6650: Segmentation fault when trying to build latest buildroot + #6668: iptables limit module alignment problem on mips64 + +2013.08, Released August 31th, 2013: + + Minor fixes. + + Documentation build fixed. + + Updated/fixed packages: ltrace, strongswan + +2013.08-rc3, Released August 29th, 2013: + + Fixes all over the tree. + + External toolchain lib32/lib64 handling, ABI name for EABIhf, + misc fixes for generatelocales, apply-patches and module + stripping. + + Top level menu names reordered and renamed for clarity. + + Updated/fixed packages: acl, attr, bash, dbus, directfb, + dvb-apps, kexec, kmod, libbsd, linux-fusion, mesa3d, minidlna, + openssh, openssl, pulseaudio, python-setuptools, qt5, + qt5webkit, redis, strongswan, sunxi-mali + + Issues resolved (http://bugs.uclibc.org): + + #6464: dbus-daemon-launch-helper needs setuid + +2013.08-rc2, Released August 16th 2013: + + Documentation improvements. + + External toolchains fixes. + + Updated/fixed packages: aircrack-ng, bash, boost, cairo, + cppcms, eglibc, ffmpeg, gcc, git, gnupg, imagemagick, libcec, + libffi, libgcrypt, linux, linux-headers, ltrace, netatalk, + opencv, opengl, readline, samba, strongswan, sunxi-cedarx, + uclibc, udev, wayland, webkit, zeromq. + + Issues resolved (http://bugs.uclibc.org): + + #6440: typo in ffmpeg makefile + +2013.08-rc1, Released August 5th, 2013: + + Architectures: + - improved support for floating point on ARM and Thumb/Thumb2 + - support for ARM OABI removed + + Toolchains: + - support added for Sourcery CodeBench ARM and MIPS 2013.05 + - Linaro ARM and Aarch64 toolchains updated + - support added for the Arago ARMv5 and ARMv7 toolchains + - gcc 4.8.x version bumped + - support for installing both FDPIC and FLAT libraries on + Blackfin + - support for uClibc 0.9.31 removed, + - convert the internal toolchain backend to use the package + infrastructure + - support added for eglibc in the internal toolchain backend + - toolchain components for the ARC architecture updated and + gdb for ARC added. + - support for Blackfin in the internal toolchain fixed + + Defconfigs: beaglebone_defconfig updated, new defconfig for + CubieBoard, for Olimex mx233 Olinuxino, for Calao Systems + TNY-A9G20-LPW. + + A number of packages have been fixed to use the + _CONFIG_SCRIPTS mechanism to get their -config shell + script installed and modified properly. Licensing informations + has been added to a number of packages. + + Use XZ tarballs for a number of packages. + + Noticeable package changes/additions: + - The glib2/libgtk2/webkit stack has been updated to recent + versions. + - Support for Gstreamer 1.x has been added. + - OpenGL support for TI OMAP platforms has been added. + - OpenGL support for Allwinner platforms has been added. + - OpenMAX support for RasberryPi has been added. + + Updated/fixed packages: acl, attr, autoconf, avahi, barebox, + bind, binutils, busybox, bwm-ng, bzip2, cifs-utils, colletctd, + cpanminus, cups, curl, dash, dbus, dhcp, directfb, + directfb-examples, dnsmasq, dosfstools, dropbear, dtc, + e2fsprogs, ed, efl, enlightenment, erlang, ethtool, fbgrab, + fftw, firmware-imx, flot, fltk, freetype, gawk, gdk-pixbuf, + gettext, gmp, gnutls, gsl, gutenprint, gvfs, gzip, haserl, + hiawatha, httping, icu, imagemagick, imlib2, imx-lib, + intltool, iozone, ipset, iptables, jquery, jquery-keyboard, + jquery-sparkline, kmod, less, libart, libcdaudio, libcgicc, + libesmtp, libftdi, libfuse, libglib2, libgtk, libgtk2, libidn, + libiqrf, liblog4c-localtime, libnspr, libnss, libpcap, + libroxml, libserial, libsigsev, libsoup, libtool, libtpl, + libvncserver, libxml2, linphone, lm_sensors, logrotate, + ltrace, lttng, luafilesystem, luajit, minicom, monit, mpg123, + mtd, mutt, mxml, neard, netatask, netsnmp, nettle, + network-manager, nodejs, nss-mdns, openssh, openswan, openvpn, + opkg, opus, pcre, perl-cross, php, pixman, poco, polarssl, + pulseaudio, pv, python, python3, qt, qt5, qt5declarative, + qt5jsbackend, qt5quick1, readline, rpi-firmware, ruby, samba, + sane-backends, sconeserver, sdl_image, sdparm, ser2net, + socketcand, sqlite, squid, strace, tcl, tcpdump, tinyhttpd, + tvheadend, tzdata, uboot, udpcast, usb_modeswitch, + usb_modeswitch_data, usbutils, webkit, wireshark, wvstreams, + xapp_luit, xapp_xmodmap, xenomai, xfsprogs, xlib_libX11, zic, + zlib. + + New packages: a10disp, aespipe, am33x-cm3, cppcms, dhcpcd, + dropwatch, dtc, ecryptfs-utils, eglibc, elf2flt, fdk-aac, + gcc-final, gcc-initial, gcc-intermediate, git, + gpu-viv-bin-mx6q, gst1-plugins-bad, gst1-plugins-base, + gst1-plugins-good, gst1-plugins-ugly, gst-omx, + gst-plugin-x170, gstreamer1, jimtcl, lbase64, libassuan, + libbsd, libcec, libdvbsi, libedit, libgpgme, libqmi, + libqrencode, libsvg, libsvg-cairo, libunwind, libvpx, + linux-headers, lockdev, luabitop, luacrypto, lua-ev, + luaexpatutils, msgpack, ocrad, on2-8170-libs, + on2-8170-modules, p11-kit, pax-utils, ptpd, ptpd2, + python-pyro, ramspeed/smp, snappy, strongswan, sunxi-boards, + sunxi-cedarx, sunxi-mali, sunxi-tools, ti-gfx, tinymembench, + tree, tstools, uclibc, w_scan. + + Issues resolved (http://bugs.uclibc.org): + + #4718: python (built for powerpc) distutils has paths to host + compiler toolchain + #5516: appended device tree blobs on uImage fails + #6302: Versions of packages retrieved from github.com are wrong + #6308: dosfstools download link is wrong + #6326: Dropbear: Add options to allow better config for + different target devices (e.g. routers) + #6338: Wrong download link for minicom package + #6344: Wrong handling of license text files with same name and + different directory + #6374: gnutls package broken if linux cryptodev module + selected + #6410: omap3_beagle has uimage error load address error + +2013.05, Released May 31th, 2013: + + Minor fixes. + + External toolchain wrapper fix for if host/usr/bin is placed + in the patch. + + Updated/fixed packages: acpid, at91bootstrap, czmq, elf2flt, + flex, jamvm, kmod, libplayer, libtirpc, libv4, + lttng-babeltrace, opengl, qt5jsbackend, udpcast, wvstreams + + Issues resolved (http://bugs.uclibc.org): + + #4868: Buildroot compile failure for toolchain/gdb-7.4/intl/reloc... + #4988: flex and m4 problems + #5912: obsolete CVS files + +2013.05-rc3, Released May 25th, 2013: + + Minor fixes. + + Updated/fixed packages: aircrack-ng, bellagio, boost, crda, + dvb-apps, flot, libatomic_ops, libeXosip2, libosip2, libxml2, + mongrel2, poco, portaudio, pptp-linux, tvheadend, urg, weston, + wireshark + +2013.05-rc2, Released May 15th, 2013: + + Fixes all over the tree. + + Default number of parallel jobs is now number of CPUs + 1. + + Defconfigs: Add Telit EVK-PRO3, AT91SAM9260-EK Nand flash. + + Updated/fixed packages: aircrack-ng, busybox, cairo, + classpath, curlftpfs, czmq, dbus, f2fs-tools, fan-ctrl, + filemq, gst-plugin-bad, gutenprint, hplip, json-c, + libatomic_ops, libcurl, libdrm, libglib2, libnspr, libnss, + libsha1, libsigsegv, libxcb, linknx, linux-pam, lttng-modules, + lttng-tools, matchbox-lib, mcookie, mesa3d, neon, pixman, + pulseaudio, python-nfc, qt5imageformats, quota, openssl, + sconeserver, strace, sylpheed, wvstreams, + xapp_{appres,bdftopcf,beforelight,bitmap,edires,fonttosfnt}, + xapp_{fslsfonts,fstobdf,iceauth,ico,listres,luit,mkfontdir}, + xapp_{mkfontscale,oclock,rgb,rstart,scripts,sessreg,setxkbmap}, + xapp_{showfont,smproxy,twm,viewres,x11perf,xauth,xbacklight}, + xapp_x{biff,calc,clipboard,clock,cmsdb,cursorgen,dbedizzy,ditview}, + xapp_x{dm,dpyinfo,driinfo,edit,ev,eyes,f86dga,fd,fontsel,fs,fsinfo}, + xapp_x{gamma,gc,host,input-calibrator,input,kbcomp,kbevd,kbprint}, + xapp_x{kbutils,kill,load,logo,lsatoms,lsclients,lsfonts,mag,man}, + xapp_x{message,mh,modmap,more,pr,prop,randr,rdb,refresh,set,setmode}, + xapp_x{setpointer,setroot,sm,stdcmap,vidtune,vinfo,wd,wininfo,wud}, + xcb-util, xcursor-transparent-theme, xdata_xbitmaps, + xdata_xcursor-themes, + xdriver_xf86-input-{evdev,joystick,keyboard,mouse,synaptics}, + xdriver_xf86-input-{tslib,vmmouse,void}, + xdriver_xf86-video-{ark,ast,ati,cirrus,dummy,fbdev,geode,glide}, + xdriver_xf86-video-{glint,i128,intel,mach64,mga,neomagic,newport}, + xdriver_xf86-video-{nv,openchrome,r128,savage,siliconmotion,sis}, + xdriver_xf86-video-{tdfx,tga,trident,v4l,vesa,vmware,voodoo,wsfb}, + xfont_encodings, xfont_font-adobe-{100,75}dpi, + xfont_font-utopia-{100dpi,75dpi,type1}, + xfont_font-{alias,arabic-misc,bh-100dpi,bh-75dpi}, + xfont_font-bh-lucidatypewriter-{100,75}dpi, xfont_font-bh-{ttf,type1}, + xfont_font-bitstream-{100dpi,75dpi,type1}, xfont_font-cronyx-cyrillic, + xfont_font-{cursor,daewoo,dec,isas,jis,micro}-misc, + xfont_font-ibm-type1, xfont_font-misc-{cyrillic,ethiopic,meltho,misc}, + xfont_font-{mutt,schumacher}-misc, + xfont_font-{screen-cyrillic,sony-misc,sun-misc,util}, + xfont_font-winitzki-cyrillic, xfont_font-xfree86-type1, + xlib_lib{FS,ICE,SM,X11,XScrnSaver,Xau,Xaw,Xcomposite,Xcursor}, + xlib_libX{damage,dmcp,ext,fixes,font,ft,i,inerama,mu,pm,randr}, + xlib_libX{render,res,t,tst,v,vMC,xf86dga,xf86vm}, + xlib_lib{dmx,fontenc,pciaccess,pthread-stubs,xkbfile}, xlib_xtrans, + xproto_{applewm,bigreqs,composite,damage,dmx,dri2,fixes}proto, + xproto_{fontcache,font,gl,input,kb,randr,record,render}proto, + xproto_{resource,scrnsaver,video,windowswm,xcmisc,xext}proto, + xproto_{xf86bigfont,xf86dga,xf86dri,xf86vidmode,xinerama,x}proto, + xserver_xorg-server, xutil_{makedepend,util-macros} + + Readded Packages: xapp_xinit + + Issues resolved (http://bugs.uclibc.org): + + #5054: amd64: cannot find init - due to missing /lib64 folder + +2013.05-rc1, Released May 8th, 2013: + + Architectures: ARC support, Blackfin support, FLAT binary + format, ARM: Drop old CPU variants, add fa526/626, Marvell PJ4 + + Toolchains: Add new Microblaze external toolchains, Linaro + ARM/Aarch64 updates, GCC 4.6.4 / 4.7.3 / 4.8.0 added to + internal toolchain, default to GCC 4.7.x. Internal + Crosstool-ng backend deprecated. + + Defconfigs: Add Atmel at91sam9g45m10ek, freescale mpc8315erdb + & p1010rdb, Armadeus apf27 / apf28, Openblocks A6, Raspberry + pi, gnublin board. + + FS: LZO and XZ compression methods, extra ubifs options, + ext2 rev 0/1 and ext3/4 support. + + Patch handling: apply-patches now has .patch.xz support, + Patch logic reworked as discussed during Febrary dev days: + http://elinux.org/Buildroot:DeveloperDaysFOSDEM2013 + + -rsync now excludes version control files. + + linux: uImage load address for ARM multiplatform kernels + + Infrastructure for multiple OpenGL / ES / EGL / OpenVG + providers, similar to how libjpeg / libjpeg-turbo is handled. + + Infrastructure for packages to add system users. + + kconfig: updated to 3.9-rc2, support make olddefconfig + + Updated/fixed packages: alsa-lib, alsa-utils, apr, apr-util, + argp-standalone, at, at91bootstrap, audiofile, aumix, avahi, + bash, blackbox, bind, binutils, bison, boost, bridge-utils, + busybox, ccache, cifs-utils, cmake, collectd, connman, + conntrack-tools, cpanminus, crosstool-ng, diffutils, directfb, + directfb-examples, divine, dmalloc, dnsmasq, dosfstools, + dropbear, e2fsprogs, ebtables, eeprog, erlang, ethtool, + fb-test-app, fbset, feh, ffmpeg, file, flex, flot, foomatic, + fxload, gd, gdb, gdisk, genimage, gettext, gmp, gnuchess, + gnutls, gob2, gperf, gpsd, gstreamer, haserl, hiawatha, htop, + httping, icu, inotify-tools, intltool, iproute2, ipset, + iptables, iw, jpeg, jquery, jquery-{sparkline,validation}, + json-c, kbd, kexec, kismet, kmod, lcdproc, libarchive, + libatasmart, libcap, libconfig, libconfuse, libcurl, libdrm, + libeet, libev, libevas, libeXosip2, libffi, libfribi, libfuse, + libgcrypt, libglib2, libgtk2, libid3tag, libmicrohttpd, + libnetfilter_acct, libnetfilter_conntrack, libnl, libpcap, + libplayer, libsigc, libv4l, libxcb, linenoise, linux-pam, + lm_sensors, ltp-testsuite, luajit, lzop, madplay, make, mdadm, + mediastreamer, memtester, mesa3d, + mobile-broadband-provider-info, monit, mpd, mpfr, mpg123, + mrouted, msmtp, nbd, ncurses, ndisc6, neard, neardal, neon, + netperf, netsnmp, nettle, nfacct, ntfs-3g, ofono, olsr, + omap-u-boot-utils, openssh, openssl, openswan, openvpn, + oprofile, orc, patch, pciutils, pcre, perl, php, poco, + polarssl, proftpd, psmisc, pulseaudio, python, + python-{bottle,netifaces,serial,setuptools}, qt, quagga, + quota, radvd, rpi-firmware, rpi-userland, rt-tests, sam-ba, + samba, sawman, sdl, ser2net, smartmontools, socat, socketcand, + speex, squid, stress, stunnel, sudo, syslinux, sysstat, + sysvinit, tcl, tcprelay, tinyhttpd, tslib, tvheadend, + uboot-tools, udev, ulogd, util-linux, vala, vtun, webkit, + xapp_{iceauth,luit,makefontscale,sessreg,setxkbmap,smproxy}, + xapp_{xauth,xcmsdb,xdpyinfo,xev,xgamma,xhost,xinput,xkbcomp}, + xapp_{xkbevd,xlsatoms,xlsclients,xmodmap,xpr,xprop,xrandr,xrdb}, + xapp_{xset,xwd,xwininfo}, xcb-{proto,util}, + xdriver_xf86-input-{evdev,joystick,keyboard,mouse,synptics}, + xdriver_xf86-input-{tslib,vmmouse,void}, + xdriver_xf86-video-{ark,ast,ati,cirrus,dummy,geode,glide,glint}, + xdriver_xf86-video-{i128,intel,mach64,mga,neomagic,newport}, + xdriver_xf86-video-{openchrome,r128,savage,siliconmotion,sis}, + xdriver_xf86-video-{tdfx,trident,vesa,vmware,wsfb}, xenomai, + xfont, xinetd, xkeyboard-config, xlib_lib{FS,ICE,SM,X11}, + xlib_libX{scrnSaver,au,aw,cursor,dmcp,ext,fixes,font,ft,i}, + xlib_libX{inerama,mu,pm,randr,res,tst,v,vMC,xf86dga,xf86vm}, + xlib_lib{dmx,fontenc,pciaccess,xkbfile}, xlib_xtrans, + xproto_{applevm,bigreqs,dri2,fonts,gl,input,kbd,record}proto, + xproto_{resource,scrnsaver,xcmisc,xext,x}proto, + xserver_xorg-server, xutil_makedepend, xz, zeromq + + New packages: aircrack-ng, bcusdk, chrony, crda, + cryptodev-linux, cppzmq, czmq, dtach, enscript, exfat, + exfat-utils, f2fs-tools, fan-ctrl, filemq, foomatic-filters, + genimage, genpart, glibmm, gnuplot, gtest, gutenprint, hplip, + iozone, jansson, jhead, jquery-keyboard, jquery-ui, + jquery-ui-themes, json-glib, json-javascript, lcms2, libpfm4, + libpthsem, libserial, libsigsegv, libtasn1, libwebsockets, + libxkbcommon, libxml++, linknx, log4cxx, mongoose, mongrel2, + mtools, ne10, nmap, nodejs, openobex, openpgm, poppler, + protobuf-c, python-m2crypto, python-thrift, qjson, qt5base, + qt5declarative, qt5graphicaleffects, qt5imageformats, + qt5jsbackend, qt5multimedia, qt5quick1, qt5script, qt5svg, + qt5webkit qt5xmlpatterns, rapidjson, redis, swig, texinfo, + tzdata, urg, ussp-push, wayland, webp, weston, wireless-regdb, + wireshark, wvdial, wvstreams, xcb-util-image, xcb-util-wm, + xcursor-transparent-theme, zic, zmqpp, zyre + + Removed packages: microperl, ocf-linux, xapp_xinit, + xapp_xplsprinters, xapp_xprehashprinterlist, + xfont_font-bitstream-speedo, + xlib_lib{Xfontcache,XprintAppUtil,XprintUtil,Xp,oldX,xkbui}, + xproto_{print,xf86rush}proto + + Deprecated packages: vala + + Issues resolved (http://bugs.uclibc.org): + + #1291: Add support for Faraday 526 arm processor (fa526) + #2683: cups does not install correctly to target + #3313: mesa3d fails to build + #5186: initramfs/cpio should support lzo compression + #5636: agetty - cannot get controlling tty error - need updated... + #5906: collectd client headers not exported + #5966: bison unnecessarily required as build dependency + #6140: --enable-fileinfo not applied for php package + #6164: openvpn usage of ip tool from Busybox + +2013.02, Released February 28th, 2013: + + Misc manual updates. + + Updated/fixed packages: busybox, collectd, flashbench, + libgtk2, libupnp, mii-diag, quota + +2013.02-rc3, Released February 26th, 2013 + + Minor fixes. + + Updated/fixed packages: conntrack-tools, dialog, + enlightenment, haserl, keyutils, libfif, libmad, + linux-firmware, linux-fusion, matchbox-desktop, matchbox-wm, + ruby, spawn-fcgi, vtun + + Issues resolved (http://bugs.uclibc.org): + + #5960: fusion.ko driver does not install to target rootfs + +2013.02-rc2, Released February 19th, 2013 + + Fixes all over the tree. + + Various manual updates and fixes. + + Updated/fixed packages: busybox, collectd, gesftpserver, + glib-networking, gnutls, inotify-tools, libcurl, libffi, + libglib2, libtorrent, libvorbis, neard, network-manager, + ntfs-3g, openssl, qt, rpi-userland, rtorrent, thttpd, vim. + + Issues resolved (http://bugs.uclibc.org): + + #5906: collectd client headers not exported + +2013.02-rc1, Released February 10th, 2013 + + Toolchain: Crosstool-ng 1.17.0, default to GCC 4.6.3, target + libraries install fixed. Add Linaro ARM + 2012.11/2012.12/2013.01, AArch64 12.11/12.12/13.01. Sourcery + CodeBench MIPS 2012.03/09. Infrastructure to warn about + missing 32bit support for binary toolchains. Toolchain wrapper + is now relocatable. Add GDB 7.5.1 / Remove 6.8 / 7.0 / + 7.1. Deprecate uClibc 0.9.31. + + Architecture: Xtensa fixes, add missing powerpc variants, arm + 1136jf-s rev1, add A5/A15, neon support toggle, OABI + deprecated. Sparc: drop old unused variants + + Bootloaders: At91bootstap: fix upstream URL, Barebox: add + 2012.12/2013.01/2013.02, remove 2012.08/09/10, lzop fixes, + environment image support, U-Boot: add 2013.01.01 + + Linux: fix appended dtb handling for v3.8+ kernels, support + multiple device trees + + Defconfigs: calao USB-A9260, snowball, QEMU PPC440 on ML507 + board, QEMU ARM Exynos4210, Kernel version in QEMU defconfigs + updated, at91rm9200df: misc fixes. Lock kernel headers to + match kernel. + + Infrastructure: Git download fixes. Toolchain make target + renamed from 'cross' to 'toolchain'. Eclipse integration + support. Option to set root password, post image scripts, + config scripts handling. + + Updated/fixed packages: alsa-lib, argp-standalone, argus, + arptables, atk, audiofile, axel, beecrypt, bind, bison, + bluez_utils, boost, cairo, can-utils, bmon, boa, busybox, + cairo, ccache, cdrkit, cifs-utils, cjson, cmake, collectd, + connman, coreutils, cpanminus, cups, dbus, dhcp, dialog, + diffutils, directfb, distcc, divine, dnsmasq, docker, + dosfstools, dstat, e2fsprogs, ebtables, ed, empty, ethtool, + expedite, fbset, fbv, ffmpeg, flex, fltk, fluxbox, freetype, + gadget-test, gawk, gdb, genext2fs, gettext, giblib, + glib-networking, gmp, gmpc, gnupg, gnutls, gpsd, + gst-plugins-{bad,base,good}, gstreamer, gzip, haserl, hdparm, + heirloom-mailx, hiawanta, hostapd, icu, imagemagick, imlib2, + inadyn, infozip, iproute2, ipset, iptables, iw, jpeg, jquery, + jquery-sparklines, jqeury-validation, kismet, kmod, lame, + libao, libcap, libcurl, libdvdnav, libdvdread, libecore, + libedbus, libedje, libeet, libefreet, libeina, libeio, + liberation, libelementary, libembryo, libethumb, libev, + libevas, libffi, libfribidi, libfuse, libgcrypt, libglib2, + libgpg-error, libgtk2, libhid, libidn, libmicrohttpd, libmpd, + libnl, libnspr, libnss, libogg, libpcap, libplayer, libpng, + libroxml, librsvg, libseccomp, libsigc, libsndfile, libungif, + libupnp, liburcu, libusb-compat, libvncserver, libvorbis, + libxml2, libxslt, lighttpd, links, linux-firmware, + linux-fusion, ltp-testsuite, ltrace, + lttng-{babel,libust,modules,tools}, lvm2, lua, luajit, lzop, + matchbox-{desktop,lib}, mdadm, metacity, midori, minicom, mpd, + mpfr, mplayer, mtd, mysql_client, ncurses, neon, netatalk, + networkmanager, nspr, ntfs-3g, nuttcp, ofone, olsr, openssl, + openvpn, opkg, oprofile, opus, opus-tools, orc, ortp, pango, + pciutils, pcmanfm, pcre, pcsc-lite, perl, php, pixman, + pkgconf, polarssl, pptp-linux, proxychains, pulseaudio, + python, python3, qemu, qextserialport, qt, quagga, radvd, + readline, rng-tools, rt-tests, rubix, ruby, sam-ba, samba, + sane-backends, sconeserver, scons, screen, sdl, sdl_gfx, + sdl_mixer, sdl_ttf, sdparm, sed, ser2net, smartmontools, + speex, sqlite, squid, sshfs, strace, sudo, sylpheed, tn5250, + taglib, tar, torsmo, transmission, tslib, uboot-tools, ulogd, + usb_modeswitch, util-linux, valgrind, vim, vsftpd, wavpack, + webkit, wipe, wireless_tools, wpa_supplicant, xapp_xinit, + xapp_xinput-calibrator, xapp_xman, xapp_xmh, xlib_libX11, + xlib_libXdmcp, xlib_libXft, xlib_libpthread-stubs, + xlib_xtrans, xproto_xcmiscproto, xproto_xextproto, + xserver_xorg-server, xstroke, xvkbd, xz + + New packages: b43-firmware, b43-fwcutter, bustle, + cache-calibrator, cegui06, celt051, classpath, curlftpfs, + dvb-apps, dvbsnoop, elfutils, enlightenment, firmware-imx, + flashbench, gd, gesftpserver, gst-fsl-plugins, httping, iftop, + imx-lib, jamvm, jpeg-turbo, keyutils, libatasmart, libcofi, + libebml, libevas-generic-loaders, libfslcodec, libfslparser, + libfslvpuwrap, libgsasl, libiscsi, libmatroska, libmcrypt, + libmhash, libqwt, libseccomp, libsha1, linenoise, mcrypt, + media-ctl, ncdu, neard, neardal, nettle, perf, polkit, + proxychains, python-bottle, python-pyparsing, rpi-firmware, + rpi-userland, sg3_utils, slirp, snowball-hdmiservice, spice, + spice-protocol, tcllib, tvheadend, udisks, usbredir + ux500-firmware, vde2, xcb-utils-keysyms, yavta, + zd1211-firmware + + Removed packages: customize, xdriver_xf86-input-{acecad,aiptek}, + xdriver_xf86-video-{apm,chips,i740,rendition,s3,s3virge,sisusb}, + xdriver_xf86-video-sun{cg14,cg3,cg6,ffb,leo,tcx}, + xdriver_xf86-video-{tsend,xgi,xgixp} + + Deprecated packages: xstroke + + Issues resolved (http://bugs.uclibc.org): + + #4237: building shared openssl w/-Os fails due to gcc bug + #5690: python3 does not obey to BR2_PACKAGE_PYTHON3_PYC_ONLY=y + #5602: python3 should install a "python" symbolic link + #5846: Extra slash added to last slash in URL + +2012.11.1, Released January 3rd, 2013: + + Toolchain: Fixed non-largefile builds on recent Ubuntu + versions. + + Arch: fix missing x86/generic handling, Build for Xtensa with + longcalls option. + + Updated/fixed packages: dosfstools, qt + +2012.11, Released December 2nd, 2012: + + Git shallow clone fix for older git version. + + Updated/fixed packages: ctuio, libtool + + Issues resolved (http://bugs.uclibc.org): + + #5726: List all the available hook points + +2012.11-rc2, Released November 30th, 2012: + + Minor fixes around the tree. + + Various manual updates and fixes. + + Add checks for legacy features. + + Updated/fixed packages: acpid, alsa-lib, arptables, binutils, + busybox, ccache, cjson, cramfs, directfb, flex, fluxbox, gdb, + hiawatha, igh-ethercat, imagemagick, imlib2, lcdproc, + libdaemon, libecore, libhid, libmad, libpcap, libsigc, libusb, + linux-fusion, matchbox, ocf-linux, owl-linux, python, rrdtool, + scons, strace, sylpheed + + Issues resolved (http://bugs.uclibc.org): + + #5732: Error : package/alsa-lib/alsa-lib.mk + +2012.11-rc1, Released November 17th, 2012 + + Fixes all over the tree and new features. + + Defconfigs: use u-boot 2012.10 on at91 and beaglebone, + sheevaplug + qemu: bump kernel version, add qemu-mips64-malta + + nitrogen6x defconfigs. + + Bootloaders: add u-boot 2012.07/10, ais target format, add + barebox 2012.08/09/10/11, linker overlap issue fix for + at91bootstrap, mxs-bootlets updated for new Barebox versions. + + Toolchains: binutils 2.23.1, gcc 4.7.2, default to gcc 4.6.x, + Codebench arm/sh/x86 2012.03/09, Linaro 2012.08/09/10. + Libtirpc support for modern glibc variants. Toolchain on + target has been deprecated. + + Initial Aarch64 support, Xtensa support re-added. + + Infrastructure: Use shallow git clone when possible, use + tarballs rather than git URLs for github. Moved to pkgconf + rather than pkg-config. System directory added, default + skeleton/device tables moved. More than 1 post-build script + can now be used. output/target now contains a + THIS_IS_NOT_YOUR_ROOT_FILESYSTEM warning, to help people + understand how to (not) use it. + + Manual has been reworked and extended. + + Legal-info: Lots of package annotations, CSV file fixes, + _LICENSE / _REDISTRIBUTE splitup, per-package hooks. + + Updated/fixed packages: acpid, alsa-lib, alsa-utils, + alsamixergui, attr, autoconf, automake, bash, bind, binutils, + bison, blackbox, bluez-utils, busybox, cairo, can-utils, + cifs-utils, cjson, cmake, collectd, connman, conntrack-tools, + coreutils, cups, cvs, dbus, dhcp, directfb, dmalloc, dnsmasq, + dropbear, e2fsprogs, ethtool, fbdump, feh, fftw, file, + flashrom, fluxbox, gdb, gdisk, gdk-pixbuf, genext2fs, gettext, + gnutls, gpsd, gqview, grep, gsl, gst-plugins-{bad,good}, + hdparm, hiawatha, hostapd, input-tools, iproute2, ipset, + iptables, iw, json-c, kexec, kmod, lcdproc, leafpad, less, + libcurl, libdrm, libdvdnav, libdvdread, libffi, libfuse, + libglib2, libhid, liblockfile, libmad, libmbus, libmnl, + libnetfilter_{acct,conntrack,cthelper,cttimeout,queue}, + libnfc, libnfc-llcp, libnfnetlink, libnl, libnspr, libnss, + libpcap, libplayer, libtool, libtorrent, liburcu, libv4l, + libxcb, libxml2, libxslt, links, linux-firmware, lm-sensors, + lmbench, lockfile-progs, logrotate, lshw, lsof, + lttng-babeltrace, lttng-tools, lua, luajit, mesa3d, microperl, + mii-diag, module-init-tools, mpc, mpd, mpg123, mplayer, + mtd-utils, mysql_client, nbd, ncurses, netatalk, netkitbase, + netkittelnet, netsnmp, newt, nfs-utils, openntpd, openssh, + openssl, opkg, patch, pciutils, pcre, php, poco, polarssl, + popt, portmap, pppd, procps, pulseaudio, python, python-nfc, + python-protobuf, qt, quota, rp-pppoe, rtorrent, sam-ba, samba, + scons, sdl_gfx, smartmontools, sqlite, squid, strace, sudo, + sylpheed, tcpdump, tremor, ttcp, tiff, unionfs, + usb_modeswitch, usbutils, util-linux, vala, valgrind, vpnc, + vsftpd, webkit, wget, which, wpa_supplicant, x11vnc, xapp_*, + xdriver_*, xenomai, xfont_*, xinetd, xl2tp, xlib_*, xlsclient, + xproto_*, xserver_xorg-server, xutil_util-macros, xz, zeromq + + New packages: arptables, at91bootstrap3, boot-wrapper-aarch64, + ccid, cpanminus, cpuload, erlang, evtest, fb-test-apps, + fxload, gdbm, gnupg, googlefontdirectory, grantlee, gsl, + lcdapi, liblo, liblog4c-localtime, libtirpc, linux-pam, + lua-msgpack-native, macchanger, mtdev, mtdev2tuio, nfacct, + opus, opus-tools, pcsc-lite, perl, pkgconf, python-meld3, + python3, qemu, qextserialport, qtuio, rpcbind, schifra, + sconeserver, supervisor, time, ulogd, usb_modeswitch_data, + yasm + + Deprecated packages: netkitbase, netkittelnet + + Issues resolved (http://bugs.uclibc.org): + + #807: [PATCH] samba - make iconv and smbd optional + #3049: binutils have a sysroot bug in ld + #5330: update vsftpd to 3.0.0 + #5486: libglib2 build fails on: libs/libglib-2.0.so: undefined... + #5666: Fails to build python 2.7.2 for 2440 arm + +2012.08, Release August 31th, 2012 + + Updated/fixed packages: microperl, cups, luajit, rrdtool, + prboom, oprofile. + + Added license information for: sqlite. + + Changed the source URLs of all packages located on Sourceforge + in order to use the automatic mirror selection URL + downloads.sourceforge.net, and get rid of the + BR2_SOURCEFORGE_MIRROR option. + +2012.08-rc3, Released August 25th, 2012 + + Updated/fixed packages: libglib2, netsnmp, freetype, libfuse, + libpng, x11vnc, zlib, gpsd, ifplugd, bash, distcc. + + Added license informations for: barebox, grub, syslinux, + uboot, xloader, yajl, zlib, zxing, alsa-lib, alsa-utils, + faad2, nano, fbdump, rsync, librsync, fontconfig, + inotify-tools, + +2012.08-rc2, Released August 15th, 2012 + + Updated/fixed packages: imagemagick, sudo, crosstool-ng. + + Added license informations for: mxml, nanocom, empty, expat, + lua, lucjson, xinetd, cjson, luaexpat, lmbench, bwm-ng, + input-event-daemon, luajit, cgilua, copas, coxpcall, + luafilesystem, luasocket, rings, wsapi, xavante, libtpl, + avahi, busybox, libfcgi, ifplugd, libcgicc, libcurl, + libdaemon, libdnet, libgpg-error, libpcap, libpng, lighttpd, + mtd, openssl, psmisc, socat, spawn-fcgi. + + Fixes to Microblaze external toolchains + configuration. Improvements of the pkg-stats + script. Out-of-tree fix for the graph-depends script. + + Kernel headers version bump. + +2012.08-rc1, Released August 1st, 2012 + + Fixes all over the tree and new features. + + Integration of a legal information reporting infrastructure, + which allows to generate detailed informations about the + licenses and source code of all components of a system + generated by Buildroot. License information will progressively + be added on packages. + + Default configuration files added for Calao-systems USB-A9263 + and Calao-systems USB-A9G20-LPW. + + External toolchains update: allow download of a custom + toolchain, add Linaro 2012.05 and 2012.06 for ARM, add + Blackfin toolchain 2012R1-BETA1, add Sourcery CodeBench MIPS + 2011.09. + + Allow the restriction of downloads to the primary site only. + This is useful for project developers who want to ensure that + the project can be built even if the upstream tarball + locations disappear. + + Add a 'System configuration' choice to select between 3 + different init systems: Busybox init, SysV init and Systemd + init. + + Cleanups to the package infrastructure. The visible change to + developers is that $(eval $(call AUTOTARGETS)) is now $(eval + $(autotools-package)), and similarly for other package + infrastructures and host packages. Refer to the documentation + for details. + + By default, automatic detection of the number of compilation + jobs to use, depending on the number of CPUs available. + + Improvements to generate systems with static libraries only + (infrastructure and package fixes). + + Add proper support in the Linux kernel package to generate + Device Tree Blobs or combined Device Tree / Kernel + images. This will be useful on Microblaze, PowerPC and ARM, + which are architectures making extensive use of the Device + Tree. + + Updated/fixed packages: audiofile, autoconf, automake, axel, + barebox, bash, beecrypt, berkeleydb, bind, bison, bluez_utils, + bonnie, boost, busybox, bsdiff, bwm-ng, bzip2, cifs-utils, + cgilua, cmake, connman, conntrack-tools, crosstool-ng, cups, + dbus, dhcp, dnsmasq, e2fsprogs, eeprog, ethtool, faad2, fbv, + ffmpeg, freetype, gmp, gnutls, gob2, gpsd, grep, + gst-plugins-base, gst-plugins-good, gzip, hiawatha, hostapd, + htop, icu, igh-ethercat, imagemagick, input-tools, iostat, + iproute2, ipset, iptables, iw, kmod, less, libcap, libgci, + libconfig, libcurl, libelf, libevas, libeXosip2, libexif, + libfuse, libidn, libmad, libmbus, libmnl, + libnetfilter-conntrack, libnl, libnspr, libnss, libogg, + libosip2, libpcap, libpng, libroxml, liburcu, libusb, libxml2, + libxslt, lighttpd, linux, ltrace, lttng-libust, lttng-modules, + lttng-tools, lua, m4, memtester, midori, mii-diag, + module-init-tools, mpfr, mpg123, mrouted, msmtp, mtd, mxml, + mysql_client, nasm, nbd, ncurses, nfs-utils, opencv, openocd, + openssl, pciutils, php, polarssl, portaudio, pppd, + pthread-stubs, pulseaudio, qt, quagga, quota, radvd, rpm, + rrdtool, samba, sam-ba, scons, sdl_gfx, sdl_sound, speex, + sqlite, squashfs, squid, sudo, synergy, syslinux, systemd, + tar, tcpdump, tcpreplay, udev, usbutils, valgrind, wget, + wpa_supplicant, wsapi, xavante, xserver_xorg-server, zlib + + New packages: cjson, collectd, dfu-util, dmidecode, elftosb, + fbterm, flashrom, freerdp, inadyn, libfreefare, + libnetfilter_cttimeout, libnfc, libnfc-llcp, liboping, + libtorrent, linphone, logsurfer, lshw, luacjson, luaexpat, + luajit, mediastreamer, mobile-broadband-provider-info, monit, + mxs-bootlets, nanocom, nss-mdns, ofone, omap-u-boot-utils, + opkg, ortp, owl-linux, python-id3, python-nfc, quota, + ramspeed, rtorrent, sound-theme-borealis, + sound-theme-freedesktop, sysprof, webrtc-audio-processing, + xinetd, zxing + + Issues resolved (http://bugs.uclibc.org): + + #1315: Allow use of older external toolchains without sysroot + support [won't fix] + #5276: Hiawatha needs to manage IPV6 if so [fixed] + #5360: buildroot fails when building "host-libglib2 2.30.2 + Building" [won't fix, upstream problem] + #5384: Can't build packages relying on gets on newer glibc + [fixed] + +2012.05, Released May 30th, 2012: + + Updated/fixed packages: busybox, netsnmp, pptp-linux + +2012.05-rc3, Released May 25th, 2012: + + Minor fixes around the tree. + + Infra: Fix for DOWNLOAD macro when using primary mirrors with + scp targets. + + Toolchain: Kernel headers 3.2.18 / 3.3.7. + + Updated/fixed packages: binutils, bison, busybox, cifs-utils, + gnuchess, gpsd, iperf, libmpeg2, mtd, ntfs-3g, oprofile, + xserver-xorg + +2012.05-rc2, Released May 18th, 2012: + + Fixes all over the tree. + + Toolchain: uClibc: Use 0.9.33.2, Crosstool-ng: fix gperf + dependency, disable decimal floats support, Linux 3.2.17 / + 3.3.6 kernel headers. Fix sysroot copy handling for toolchains + without C++ support. + + Updated/fixed packages: apr, apr-util, ccache, dnsmasq, + heirloom-mailx, gdb, ndisc6, opencv, openssl, socat, vala + +2012.05-rc1, Released May 10th, 2012: + + Fixes all over the tree and new features. + + Use /etc/os-release for version info rather than + /etc/br-version. + + CMake toolchain file moved to $HOST_DIR/usr/share/buildroot. + + Apply-patches.sh: cleanups, archived patches handling fixes, + support series files. + + Defconfigs: beaglebone, mx53qsb, pandaboard, qemu configs for + arm-vexpress/microblaze/ppc-mpc88544ds, use 3.2.x for + atngw100, use 3.3.x for qemu configs. + + Menu structure: Libraries moved out of multimedia section + + Atom processor support. Prescott fix, blackfin ABI fix, + Microblaze architecture support (using ext toolchain). Cleanup + architecture names, deprecate Xtensa support. + + Toolchain: Add GCC 4.4.7, 4.6.3, 4.7.0. uClibc 0.9.33.1, + default to uClibc 0.9.33.x, enable + UCLIBC_SUPPORT_AI_ADDRCONFIG by default, static and 64bit + fixes for external toolchains, linaro ext toolchains, new + sourcery codebench ext toolchains, GDB 7.4.1, crosstool-ng + 1.15.2. + + Bootloaders: U-Boot: add 2012.04.01, SPL and u-boot.img + support. Barebox: add 2012.04, remove 2011.12. + + Updated/fixed packages: alsa-lib, alsa-utils, at, atk, avahi, + barebox, berkeleydb, bind, bluez_utils, boost, busybox, + can-utils, ccache, cifs-utils, coreutils, cups, dbus, dhcp, + directfb, dnsmasq, doom-wad, dosfstools, e2fsprogs, expat, + fakeroot, feh, ffmpeg, file, fis, freetype, gamin, gawk, + gdk-pixbuf, gettext, giblib, glib-networking, gmp, gnutls, + gpsd, grep, gstreamer, gst-plugins-{bad,base,good,ugly}, + haserl, hdparm, imagemagick, iproute2, iptable, iw, kexec, + kmod, lame, libaio, libarchive, libatomic_ops, libconfig, + libcurl, libdvdnav, libdvdread, libedbus, libethumb, libffi, + libfuse, libglib2, libgtk2, libhid, libmad, libmbus, libmpeg2, + libnl, libplayer, libpng, libsigc, libsoup, libupnp, liburcu, + libusb, libusb-compat, libxml2, libxml-parser-perl, libxslt, + lighttpd, linux-firmware, linux-fusion, lite, lsof, ltrace, + lttng-libust, lua, m4, makedevs, microperl, mpd, mpfr, mpg123, + mrouted, mtd, mysql_client, nbd, ncftp, ncurses, neon, + netsnmp, network-manager, nfs-utils, ngrep, ntfs-3g, openntpd, + openssh, openssl, parted, pango, pcre, php, pixman, poco, + psmisc, pulseaudio, python, qt, quagga, radvd, rpm, rsync, + ruby, samba, sam-ba, sane-backends, sawman, screen, sdl_net, + smartmontools, speex, sqlite, squashfs3, squid, sshfs, sudo, + syslinux, sysstat, taglib, tcpdump, tftp-hpa, transmission, + tiff, tinyhttpd, uboot-tools, udev, uemacs, unionfs, usbutils, + util-linux, vala, valgrind, vim, vsftpd, wget, wipe, + wpa_supplicant, xdriver_xf86-{input-vmmouse,video-fbdev}, + xfsprogs, zlib + + New packages: apr, apr-util, audiofile, bellagio, + conntrack-tools, empty, fmtools, glib-networking, + heirloom-mailx, hiawatha, latencytop, lcdproc, libcap-ng, + libdmtx, libfcgi, libnetfilter_conntrack, libnfnetlink, + libtpl, localedef, minicom, msmtp, ndisc6, netatalk, + ocf-linux, openswan, parted, polarssl, protobuf, read-edid, + socketcand, stress, systemd, ushare, zeromq + + Deprecated packages: ttcp + + Removed packages: ntfsprogs + + Issues resolved (http://bugs.uclibc.org): + + #2353: [lua] fix build with 2010.08-rc1 + #2503: Microperl fails build on MIPSel or with Fedora13.x86_64 + #2557: [PATCH] mkfs.xfs complains about missing libxfs.so.0 + #2881: Can't build project statically with external toolchain + #3751: MIPS: fix BR2_GCC_TARGET_ABI for MIPS n64 + #4808: ccache may build against wrong zlib + #4880: New package lcdproc + #4886: New package protobuf + #4892: build fails on ltp-testsuite-20101031/testcases/kernel/fs/... + #4898: * make: [target-finalize] Error 1 (ignored)* + #4985: Qt 4.7.4 build crashes with Linux 2.6.29 + #4970: udev 181 fails to build if kernel version 3.3 is selected + #5018: dialog broken: exits with assert in uClibc + #5102: qt package moc, uic, rcc read from wrong place + #5144: Patch to fix ixon bug in uemacs + #5198: Line graphics output is broken in GNU Screen + #5204: Missing terminfo file(s) for GNU screen terminal type + +2012.02, Released February 29th, 2012: + + Updated/fixed packages: libecore + +2012.02-rc3, Released February 27th, 2012: + + Fixes all over the tree. + + Automatic host dependencies handling for cmake packages + fixed. Customize package deprecated as using a post-build + script is nowadays the preferred way of adding extra stuff to + the rootfs. + + Linux-headers 3.0.x / 3.2.x stable version bumped. + + QEMU defconfigs updated to 3.2.x kernels and readme fixed. + + Updated/fixed packages: dropbear, ffmpeg, libpng + +2012.02-rc2, Released February 19th, 2012: + + Fixes all over the tree. + + Toolchain: uClibc: Added upstream post-0.9.33 fixes, Bump + linux-headers 3.0.x / 3.2.x stable versions. + + Documentation: Added makedev / _DEVICES / + _PERMISSIONS documentation. + + Updated/fixed packages: busybox, ffmpeg, gst-dsp, libecore, + libvncserver, mxml, python. + +2012.02-rc1, Released February 12th, 2012: + + Fixes all over the tree and new features. + + Toolchain: Default to GCC 4.5.x, add binutils 2.22. Java + support removed, Powerpc SPE ABI support. GDB ELF support fix, + GDB 7.4, crosstool-NG 1.13.4. + + Gentargets: scp and mercurial support. + Autotools: derive host dependencies from target by default. + Packages can now declare device table snippets. + + Host utilities menu with commonly used host tools. + + defconfigs: qemu configs for x86-64, mips and sparc, at91 + defconfigs now use modern U-Boot / mainline Linux, added + lpc3250 defconfigs. + + uClibc: remove 0.9.30, backport unshare() support, add + 0.9.32.1 / 0.9.33, use same config for ctng. + + Bootloaders: U-Boot: add 2011.12, remove 2010.xx versions, + Barebox: add 2012.01/02, remove 2011.10/11, LPC32xx + bootloaders added. + + Various manual updates. Release tarballs now contain generated + manual in text/html/pdf formats. + + Buildroot now calls the stop function of scripts in + /etc/init.d at shutdown. + + Updated/fixed packages: atk, avahi, barebox, bash, beecrypt, + bind, binutils, bison, bluez_utils, bzip2, busybox, cairo, + ccache, cdrkit, coreutils, cramfs, dbus, dbus-glib, dialog, + diffutils, dmalloc, dropbear, e2fsprogs, ebtables, ed, + ethtool, expat, ffmpeg, file, fis, flex, fluxbox, fontconfig, + freetype, gawk, grep, gst-dsp, gst-ffmpeg, gst-plugins-base, + hdparm, hostapd, htop, i2c-tools, icu, iproute2, ipsec-tools, + ipset, iptables, iw, jpeg, kismet, lame, libcap, libcgi, + libev, libeXosip2, libffi, libftdi, libgpg-error, libgtk2, + libidn, libmms, libmnl, libmodbus, libnl, libogg, libosip, + libpcap, libpng, libraw1394, libroxml, libusb, libusb-compat, + libv4l, libvorbis, libxcb, libxml-parser-perl, libxslt, + lighttpd, links, lm-sensors, lua, m4, module-init-tools, mpc, + mesa3d, mpd, mpfr, mplayer, mtd-utils, nano, nbd, ncurses, + netperf, netsnmp, ntp, opencv, openocd, openssl, openvpn, orc, + pciutils, pcre, pixman, pkg-config, poco, popt, proftpd, + python, python-serial, qt, ruby, samba, sdl, sdparm, + squashfs3, sshfs, sqlite, squid, sudo, syslinux, tcl, tcpdump, + ti-utils, tiff, tremor, uboot, uboot-tools, udev, usbmount, + util-linux, vala, valgrind, vsftpd, wpa_supplicant, + xapp_{bdftopcf,mkfontdir,mkfontscale,xkbcomp,xcursorgen,xinit}, + xapp_xinput, xapp_xman, xcb-util, xdm, xenomai, + xf86-video-sis, xfont_{encodings,font-util}, + xlib_lib{fontenc,X11,Xau,Xcursor,Xdmcp,Xfixes,Xfont,Xrender}, + xlib_libxkbfile, xterm, xutil_makedepend, yajl + + New packages: boost, connman, dstat, expedite, explorercanvas, + feh, flot, giblib, igh-ethercat, imlib2, jquery, + jquery-sparklines, jquery-validation, jsmin, kmod, libecore, + libedbus, libedje, libeet, libeina, libelementary, libesmtp, + libethumb, libevas, libical, libmbus, liboauth, liburcu, + libvncserver, linux-firmware, + lttng-{babeltrace,libust,modules,tools}, NetworkManager, + open2300, python-distutilscross, python-dpkt, + python-netifaces, python-pygame, python-setuptools, rt-tests, + sam-ba, sane-backends, sqlcipher, transmission, unionfs, + xf86-input-tslib, xinput-calibrator + + Issues resolved (http://bugs.uclibc.org): + + #743: Add Transmission bit torrent option to buildroot + #755: Add Boost libraries as a package + #2299: Add crypto support to libsoup + #2617: Pixman 0.19.2 & Cairo 1.10.0 + #3403: libgpg-error: bump to version 1.10 + #3409: libgpg-error: download from gnupg.org + #3421: nano: make tiny flag optional + #3691: New EFL packages + #4664: Cannot patch AT91Bootstrap + #4700: setlocalversion not working for combination svn/ubuntu 11.10... + #4760: Qt: add host-pkg-config to dependency-list + +2011.11, Released November 30th, 2011: + + Fixes all over the tree. + + Bump kernel headers / default Linux version to 3.1.4. + + Updated/fixed packages: ruby + +2011.11-rc3, Released November 26th, 2011: + + Fixes all over the tree. + + Toolchain: Fix gdb dependencies for external toolchains, + adjust uClibc patches so they don't confuse modern versions of + patch, bump crosstool-ng, kernel headers and linux versions. + + Updated/fixed packages: busybox, freetype, mplayer, opencv, + php, rsyslog, ruby, thttpd, xapp_xf86dga + + Issues resolved (http://bugs.uclibc.org): + + #4357: Prevent patch commands from accessing source control + #4369: Fix permissions on untared lsof archive + +2011.11-rc2, Released November 18th, 2011: + + Fixes all over the tree and new features. + + Updated asciidoc documentation + + Toolchain: Bumped 3.x stable kernel headers, use wget in + crosstool-ng as well, bump crosstool-ng version, gdb fixes, + uClibc sparc fix. + + Updated/fixed packages: distcc, file, gst-plugins-bad, libxcb, + mplayer, newt, qt, rpm, rrdtool, tar, tftpd + + Issues resolved (http://bugs.uclibc.org): + + #3355: mplayer fails to build + #4021: uClibc: undefined reference to `__GI___errno_location' + #4297: Qt's qmake uses wrong pkg-config + +2011.11-rc1, Released November 11th, 2011: + + Fixes all over the tree and new features. + + Moved misc scripts and support stuff to support/. Renamed + patch-kernel.sh to support/scripts/apply-patches.sh. + + Documentation: Moved to asciidoc format, make targets to + generate text/html/pdf/epub output added. + + Defconfigs: Qemu configs updated to 3.1 kernel and readmes + added. + + Bootloaders: Add support for custom git tree / tarballs for + barebox, similar to how it's handled for u-boot. Clean up + menuconfig options. + + Toolchain: Update external codesourcery toolchain download + URLs after Codesourcery got bought by Mentor, add x86 + toolchain, update toolchain versions and optimize toolchain + sysroot copying. Fix uClibc 0.9.32 builds for e500 PPC, + updated GDB versions / download URLs. Binutils + libbfd/libopcodes static/dynamic linking fix. GCC 4.6.2 added, + use ctng-1.13.0. + + Package infrastructure: Support for local packages / + overrides, package dir / name arguments dropped from + {GEN,AUTO,CMAKE}TARGETS. + + Linux: Kernel extensions infrastructure support, Xenomai + + RTAI support. + + Updated/fixed packages: acpid, bind, busybox, dash, dbus, + dbus-glib, directfb, dnsmasq, drystone, e2fsprogs, ethtool, + fakeroot, fbdump, file, freetype, fuse, gamin, gmp, gmpc, + gnutls, gob2, gst-plugins-{base,bad,good,ugly}, gstreamer, + hostapd, ifplugd, imagemagick, intltool, ipsec-tools, ipset, + iptables, iw, jpeg, kexec, leafpad, less, libargtable2, libao, + libconfuse, libcuefile, libcurl, libdaemon, libevent, + libglib2, libiconv, libmpd, libreplaygain, libroxml, + libsamplerate, libsndfile, libsoup, libsvgtiny, libtool, + libxcb, lighttpd, links, linux-fusion, lite, lrzsz, lsof, lzo, + lzop, makedevs, mcookie, mpg123, mpd, mpfr, mtd, musepack, + mutt, mysql_client, ncftp, ncurses, neon, netcat, netsnmp, + ntfs-3g, ntfsprogs, ntp, openntpd, openssh, openssl, oprofile, + orc, pciutils, psmisc, python, qt, quagga, radvd, rpm, rsync, + samba, sawman, sdl_sound, smartmontools, sqlite, squid, + stunnel, sudo, sylpheed, sysstat, taglib, tar, tcpreplay, + tslib, usbutils, util-linux, valgrind, wget, whetstone, which, + wpa-supplicant, xdata_xcursor-themes, xmlstarlet, xterm + + New packages: bluez-utils, cifs-utils, fftw, fluxbox, json-c, + libev, libftdi, libgeotiff, libmodbus, libplayer, live555, + ngrep, noip, opencv, openocd, picocom, poco, portaudio, + pulseaudio, pv, rtai, vala, xenomai. + + Removed packages: liboil, sfdisk, swfdec, webif + + Issues resolved (http://bugs.uclibc.org): + + #505: live555: new package + #507: Enable live and tv options in MPlayer-1.0rc2 + #531: let e2fsprogs package to export headers to staging dir if needed + #1171: Linuxthreads new cannot find sysdep.h + #1357: Add bluez to buildroot system + #2107: New package: input-event-daemon + #2599: New package: orc (Oil Runtime Compiler) + #2605: gstreamer: Update to 0.10.30 + #2677: introducing util-linux-ng as replacement for util-linux + #2917: Qt: Add declarative module + #3145: jffs2 image generation fails + #3271: netperf-2.4.5 fails to compile + #3331: xdata_xcursor-themes depends on xcursorgen + #3343: Add file:// download SITE_METHOD + #3391: Add support for specifying an external kernel tree + #3631: Error while compiling with Xorg + #3709: oprofile doesn't build for mipsel + #3925: midori not getting compile + #4045: Add support for downloading i386 toolchains from codesourcery + #4165: lrzsz-fix-symlink-at-rebuild.patch + #4171: makedevs-unused-but-set-variable.patch + #4183: Codesourcery toolchain download site has changed + #4231: libneon.so: undefined reference to `SSL_SESSION_cmp' + #4381: Add option to lighttpd to enable Lua support + #4387: Make sure that dest dir exists before installing mtd files + +2011.08, Released August 31th, 2011: + + Fixes all over the tree. + + Toolchain: Fix codesourcery 2009q3 ARM download, Linux 3.0.4 + kernel headers. + + Updated/fixed packages: ipset, python + +2011.08-rc2, Released August 29th, 2011: + + Fixes all over the tree. + + Toolchain: crosstool-NG 1.12.1, use binutils 2.21 on + mips/sh/older uClibc, disallow uClibc 0.9.32 on avr32/sh + (broken). + + Defconfigs: kernel updates, fix mini2440 serial port config, + remove old arm toolchain configs. + + Bootloaders: Fix grub patching, add barebox-{n,x,menuconfig} + targets similar to linux/busybox. + + Updated/fixed packages: barebox, directfb, libsoup, + libxml-parser-perl, mtd, ncurses, python, ti-utils, udev, + usbmount, util-linux, xfont_font-misc-misc + + Issues resolved (http://bugs.uclibc.org): + + #3685: ncurses installation hangs due to old version of tic + #4093: Grub fails to install bz2 patch after conversion to... + +2011.08-rc1, Released August 4th, 2011: + + Fixes all over the tree and new features. + + Toolchain: uClibc 0.9.32 / NPTL support, 0.9.29 removed, + ext-toolchain-wrapper improvements, improved non-MMU + support. GCC 4.3.6 / 4.6.1. + + GENTARGETS infrastructure extended to cover bootloaders and + Linux kernel as well. Options to retrive Linux/U-Boot from a + custom git repo instead of upstream tarballs. + Support for Linux 3.x and release candidate tarballs. + X-Loader bootloader for omap added. + + Make source/external-deps now also works for external + toolchains / crosstool-ng backend. + + Updated/fixed packages: autoconf, berkeleydb, bind, binutils, + bmon, bridge-utils, busybox, cmake, dbus, dbus-glib, + e2fsprogs, ethtool, ffmpeg, gst-plugins-{bad,base,good,ugly}, + gvfs, hostapd, iproute2, iptables, iw, jpeg, lame, libarchive, + libdnet, libdrm, libgcrypt, libgtk2, libmpeg2, libpng, + libsoup, lighttpd, linux-fusion, lzo, midori, mtd-utils, + nfs-utils, openvpn, oprofile, orc, pkg-config, proftpd, qt, + ruby, samba, sdl, shared-mime-info, sudo, sqlite, squid, + synergy, udev, usbmount, usbutils, util-linux, valgrind, + webkit, xorg-xserver, xz, zlib + + New packages: acl, attr, ebtables, gnutls, inotify-tools, + ipset, libargtable2, libiqrf, libmnl, libnspr, libnss, + libroxml, libyaml, live555, mxml, orc, rsyslog, sredird, + statserial, stunnel, ti-utils, uboot-tools, yajl + + Deprecated packages: liboil, swfdec + + Removed packages: hal + + Issues resolved (http://bugs.uclibc.org): + + #3559: libnspr: Add new package + #3595: patch to add libroxml + #3565: libnss: Add new package + #3583: xfonts_font-adobe-100dpi fails due to missing map file + #3649: [PATCH] Add mapdir to existing pkg-config patch + #3907: 2011.05 - Qt 4.7.3 not building on ARM + #3961: Nfs-utils: Remove SUSv3-function index + #3985: "help" target's defconfig list needs sort + #3997: bump libroxml to v2.1.0 + +2011.05, Released May 27th, 2011: + + Updated/fixed packages: makedevs + +2011.05-rc2, Released May 24th, 2011: + + Fixes all over the tree. + + Toolchain: Code sourcery ARM 2009q1 download URL fixed / + 2009q3 external toolchains added. Crosstool-NG bumped to + 1.11.3, eglic/glibc configuration fixes. Linux kernel 2.6.38.x + bumped to 2.6.38.7. + + Updated/fixed packages: bind, fakeroot, kbd, psmisc, qt + +2011.05-rc1, Released May 18th, 2011: + + Fixes all over the tree and new features. + + External toolchain improvements: We now build a binary + toolchain wrapper and install it into HOST_DIR/usr/bin, which + enforces the correct compiler arguments, making an external + toolchain as easy to use outside of Buildroot as the internal + ones are. This also brought a cleanup of CFLAGS, making the + Buildroot build output easier to read. + + Rootfs device handling improvements: Choice between static + /dev, devtmpfs and devtmpfs with either mdev or udev. + + Toolchain: More preconfigured codesourcery external + toolchains, improved Crosstool-NG support, fix for GCC + snapshot versions, GCC 4.4.6 / 4.5.3, experimental GCC 4.6.0 + support, target-GCC fixes, uClibc fixes, 0.9.32-rc3 support. + + Bootloaders: U-boot 2011.03, Barebox 2011.05.0 + + Linux: support for custom kernel image targets, E.G. for + powerpc builds with embedded device trees. + + Misc fixes for qemu defconfigs, ensuring correct serial + terminal setup out of the box. + + Misc gentarget / autotools handling fixes. + + Updated/fixed packages: alsa-lib, alsa-utils, alsamixergui, + atk, avahi, bind, bison, busybox, copas, dbus-glib, dhcp, + dhcpdump, dnsmasq, dropbear, ethtool, fakeroot, ffmpeg, file, + gamin, gnuconfig, gst-ffmpeg, gst-plugins-good, gtk2-engines, + haserl, hostapd, icu, imagemagick, iproute2, iw, kismet, less, + libcap, libdnet, libglade, libglib2, libgtk2, libnl, libpng, + libxml2, libxml2, libxslt, lighttpd, lockfile-progs, makedevs, + midori, mpg123, mpc, mpd, mpfr, mplayer, mtd-utils, ncurses, + netsnmp, openssh, openssl, openvpn, pango, pkg-config, popt, + procps, proftpd, qt, quagga, readline, rsync, samba, sdl, + socat, squashfs, squid, sudo, tslib, udev, usbutils, webkit, + wpa_supplicant, xerces, xfont_font-misc-misc, xlib_libX11, + xlib_libXfont, xlib_xtrans, xorg-server, xterm, xz + + New packages: bonnie++, can-utils, gdisk, htop, + input-event-daemon, libexif, libraw, libv4l, ngircd + + Removed packages: festival + + Issues resolved (http://bugs.uclibc.org): + + #2131: Add OpenMP support to the toolchain + #3379: New Package: bonnie++ + #3445: Not working openssl-10.0.0d on 386sx + #3451: fakeroot package: wrong FAKEROOT_SITE variable + #3457: alsamixergui: broken URL + #3475: Calling sync on large filesystems when not always necessary + #3511: make busybox-menuconfig does not download busybox package + #3541: Quotes in the top Makefile:217 break buildroot/kernel config... + #3571: u-boot: fw_printenv does not build + #3643: popt source url is not responding + #3733: dropbear: make zlib optional + #3757: Buildroot can't build mplayer with libmad + +2011.02, Released February 28th, 2011: + + Fixes all over the tree. + + Updated/fixed packages: alsamixergui, avahi, ffmpeg, icu, mpd, + nuttcp, qt, slang, squashfs, sylpheed, synergy, xerces + + Deprecated packages: devmem2, webif + + Issues resolved (http://bugs.uclibc.org): + + #2911: Qt: Disable qt3support-option, if gui-module isn't selected + #3259: Unable to build webkit (on arm) + #3295: slang fails to build on mipsel + #3325: ffmpeg fails to build + +2011.02-rc2, Released February 24th, 2011: + + Fixes all over the tree. + + Festival packages marked as broken. Unless someone steps up + to support them, they will be removed during the 2011.05 + development cycle. + + Updated/fixed packages: atk, avahi, bind, cairo, dbus, + enchant, fakeroot, gmpc, gpsd, gvfs, iperf, jpeg, libarchive, + libcgicc, libdaemon, libdrm, libevent, libgail, libglib2, + libgpg-error, libmicrohttpd, librsvg, libsoup, libxcp, + makedevs, matchbox-fakekey, matchbox-startup-monitor, mdadm, + metacity, mpd, nasm, nfs-utils, olsr, openssl, popt, + pthread-stubs, quagga, rpm, samba, sdl, sdl_gfx, sdl_image, + sdl_mixer, sdl_sound, sdl_ttf, squashfs, synergy, taglib, + tcpreplay, tiff, wpa_supplicant, xcb-util, + xdriver_xf86-input-{acepad,aiptek,evdev,joystick,keyboard}, + xdriver_xf86-input-{mouse,synaptics,void}, + xdriver_xf86-video-{chips,dummy,geode,glide,intel,nv,wsfb}, + xlib_lib{ICE,SM,XScrnSaver,Xau,Xcursor,Xdmcp,Xi,Xinerama}, + xlib_lib{Xrandr,Xt,Xtst,Xxf86dga,Xxf86vm,dmx,fontenc,pciaccess}, + xserver_xorg-server, xz + + Removed packages: ace_of_penguins, vlc + + Issues resolved (http://bugs.uclibc.org): + + #3205: Failing chmod when running "make" in buildroot (openssl)... + #3277: quagga fails to build with SNMP support + #3283: See why nfs-utils needs fakeroot, and convert to autotools + #3307: synergy fails to build due to missing XTest library + +2011.02-rc1, Released February 14th, 2011: + + Fixes all over the tree and new features. + + External toolchain improvements: clarification of the options, + and introduction of the toolchain profile concept, for + well-known toolchains. Buildroot is now capable of + automatically downloading and extracting well-known toolchains + (for the moment, CodeSourcery ARM, PowerPC, MIPS and SuperH + toolchains are supported). Crosstool-NG backend updated and + improved. + + Complete rework of how hardware boards are supported. + Each board now only has a single defconfig file, and all + board-specific options have been removed. See + docs/buildroot.html#board_support for details. + + Added support for the following boards: Mini2440, Qemu ARM + Versatile, Qemu MIPSel Malta, Qemu PowerPC G3beige, Qemu SH4 + r2d and Qemu x86. The Qemu boards support allows to easily + build systems that are known to work under Qemu. + + Initial support for Blackfin processors. + + Staging directory moved into $(O)/host/usr//sysroot, in + preparation for support of SDK. For the same reason, the + toolchain binaries (cross-compiler and other related tools) + are now installed in $(O)/host/usr/bin/. The cross pkg-config + now also automatically returns correct values for cross + compilation, without needing any environment variables to be + set. + + Ccache support reworked. Now used for both host and target + compilation, and cache is stored in ~/.buildroot-ccache. + + Toolchain: uClibc 0.9.32-rc2, several components moved to + normal AUTOTARGET packages. + + Generic cmake infrastructure, similar to the existing + GENTARGETS/AUTOTARGETS. + + Support for bzr downloads, next to the existing git/svn support. + + Kconfig infrastructure rebased against 2.6.38-rc3, bringing + misc fixes. 'xconfig' now uses Qt4 rather than Qt3. + + EXT2 file system size handling improved, UBI image support, fs + configuration options cleanup, U-Boot/Barebox version bumps. + + Updated/fixed packages: alsa-utils, at, autoconf, automake, + bash, binutils, bison, busybox, bzip2, cdrkit, cloop, cmake, + coreutils, cups, dbus, dbus-python, dhcp, directfb, + direcfb-examples, dmalloc, dnsmasq, dosfstools, e2fsprogs, ed, + fbset, ffmpeg, findutils, flac, freetype, gdk-pixbuf, gmp, + grep, gperf, gst-ffmpeg, gst-plugins-bad, gst-plugins-base, + gst-plugins-good, gst-plugins-ugly, gstreamer, gvfs, hdparm, + hostapd, i2c-tools, icu, imagemagick, input-tools, iproute2, + iptables, iw, jpeg, kexec, libaio, libart, libcap, libconfig, + libfuse, libglib2, libidn, libmad, libogg, libpcap, libpng, + libsndfile, libtheora, libtool, libusb-compat, libvorbis, + libxcb, libxml2, libxslt, links, linux-fusion, lm-sensors, + lsof, ltp-testsuite, ltrace, lvm2, lzo, m4, makedevs, + memtester, mesa3d, mii-diag, mpc, mpfr, mpg123, mplayer, + mrouted, mtd-utils, nano, netperf, netplug, ntfs-3g, ntp, + openssh, openssl, openvpn, oprofile, pango, patch, pciutils, + php, pkgconfig, portmap, psmisc, python, qt, rsync, ruby, + sawman, screen, sdl_gfx, sdl_sound, smartmontools, socat, + sqlite, squid, sshfs, sstrip, sysklogd, sysstat, sysvinit, + tar, tcpdump, tslib, udev, usbutils, vim, vtun, webkit, wipe, + x11vnc, xapp_xlogo, xcb-proto, xfont_font-util, + xkeyboard-config, xlib_libX11, xz, zlib + + New packages: dhrystone, dsp-tools, faad2, fbgrab, gst-dsp, + gst-omapfb, irda-utils, lame, libao, libcue, libcuefile, + libffi, libhid, libreplaygain, libsamplerate, libsigc++, + lsuio, mpd, musepack, python-mad, python-serial, rsh-redone, + sdparm, tidsp-binaries, vorbis-tools, wavpack, whetstone, + xl2tp, xmlstarlet + + Removed packages: hotplug, l2tp, libfloat, microcom, + ng-spice-rework + + Issues resolved (http://bugs.uclibc.org): + + #267: The make target: cross fails because toolchain_build_... + #415: Berkeley DB: mut_pthread.o: relocation R_X86_64_32 against... + #561: ltp-testsuite failed to install + #1447: Installing gfortran on PowerPC + #1651: Build fail caused by ccache in module-init-tools + #1681: Cross-compiled binaries shouldn't be installed into staging + #1723: [PATCH] axel: convert to generic package infrastructure and... + #1735: [PATCH] mplayer: convert to autotools infrastructure + #2551: [PATCH] native toolchain in the target filesystem fails + #2623: buildroot-snapshot-20100922 fails when compiling development... + #2647: makedevs package lacks support for 16-bit major/minor numbers + #2371: QT MYSQL Module does not build when MySQL installed on the host + #2839: compile fails in various packages with a odd message "error:... + #2887: tar "buffer overflow detected" error + #2893: Broken "make source" with external toolchain + #2905: Qt: Speed up compilation, if gui-module isn't selected + #2929: genext2fs: couldn't allocate a block (no free space) + #2935: Ntpdate isn't installed + #2965: Broken linkage to xkbcomp (blocking X server startup) + #2983: xlib_libX11 build failed + #3007: kexec doesn't build: Missing regdef.h file + #3085: Init scripts are not compatible with sysVinit (when busybox... + #3103: make external-deps wants to download gcc-.tar.bz2 when... + #3109: abnormal `make busybox-menuconfig` + #3115: How about board specific makefiles? + #3169: python patch has typo, aborts build in scenario + #3181: dhcp.mk copies S80dhcp-server to etc/init.d, not etc/init.d/ + +2010.11, Released November 30th, 2010: + + Fixes all over the tree. + + Updated/fixed packages: libgcrypt, qt, squid, sysstat, tcpdump, + xserver-xorg + + Issues resolved (http://bugs.uclibc.org): + + #2773: squid with openssl support needs openssl on the host + #2857: OBJDUMP definition is missing from TARGET_CONFIGURE_OPTS + +2010.11-rc2, Released November 25th, 2010: + + Fixes all over the tree. + + Add support for LEON Sparc architecture variants. Fix make + source/external-deps for host packages. + + Updated/fixed packages: bash, bind, busybox, dialog, gpsd, + libglib2, libcurl, libmad, lrzsz, midori, module-init-tools, + mtd-utils, openssh, openssl, pciutils, php, qt, sqlite, + sysstat, webkit, zlib + + Issues resolved (http://bugs.uclibc.org): + + #759: Sysstat build broken without libintl + #2479: host-module-init-tools 3.11 fails to build + #2725: Buildroot overrides kernel config + #2785: mtd-utils build fails due to missing libmtd + #2791: Added PHP-Process Control to the PHP-Package + #2797: pciutils dependencies on zlib not taken into account + #2809: failed to compile libglib2 + #2821: [PATCH] Patch for JavaScriptCore in QtWebKit module + #2827: qt-4.7.0-pthread_getattr_np.patch invalid for qt 4.6... + #2833: Failed to compile webkit without X11 + +2010.11-rc1, Released November 8th, 2010: + + Fixes all over the tree and new features. + + Kconfig infrastructure rebased against 2.6.36-rc1, bringing + misc fixes + nconfig and savedefconfig targets. + + Toolchain: ARM cortex A9 support, experimental crosstool-ng + backend, GCC 4.5.x. + + Fs: Squashfs 4.1 with lzo support + + Old-style package hooks (*_HOOK_POST_*) removed. Use the more + generic new-style ones instead. + + Download handling reworked and support for git/svn downloads + added. + + Removed experimental shared config.cache support, as it is + too unreliable. + + A convenience Makefile wrapper is created when using + out-of-tree building, similar to how it is done for the kernel. + + Alpha, Cris, IA64 and Sparc64 architecture support removed. + + New packages: argp-standalone, gdk-pixbuf, gpsd, gst-ffmpeg, + libmpeg2, kbd, librsvg, nuttcp, rng-tools, rrdtool, xz + + Updated/fixed packages: acpid, alsa-lib, argus, at, autoconf, + automake, avahi, axel, beecrypt, berkeleydb, bind, bmon, boa, + bootutils, bridge-utils, bsdiff, busybox, cvs, dbus, directfb, + dmraid, docker, dosfstools, dropbear, e2fsprogs, ethtool, + expat, ezxml, fbset, fconfig, ffmpeg, freetype, gadgetfs-test, + gamin, gawk, genext2fs, gperf, gst-plugins-base, + gst-plugins-ugly, gtk2-themes, gtkperf, gvfs, haserl, hdparm, + hostapd, hwdata, ifplugd, imagemagick, iperf, ipsec-tools, + iproute2, iptables, iw, jpeg, kexec, kismet, less, libcgi, + libcurl, libdaemon, libdnet, liberation, libevent, libeXosip2, + libglade, libgtk2, libiconv, libidn, libintl, libmms, libmpd, + libnl, liboil, libosip2, libpcap, libpng, libtool, libungif, + libxml2, libxslt, lighttpd, lite, lm-sensors, lockfile-progs, + logrotate, m4, matchbox, mdadm, mesa3d, metacity, mplayer, + mtd-utils, mysql_client, nano, nbd, ncftp, neon, netperf, + netsnmp, ng-spice-rework, ntfsprogs, ntp, openntpd, openssh, + openssl, openvpn, oprofile, pango, patch, pcre, php, + pkg-config, portmap, pppd, pptp-linux, prboom, proftpd, radvd, + rdesktop, readline, rp-pppoe, ruby, qt, quagga, samba, sawman, + sdl_mixer, sdl_sound, sed, setserial, shared-mime-info, slang, + speex, sqlite, squashfs, startup-notification, strace, + sylpheed, sysstat, taglib, tcpdump, thttpd, tiff, tn5250, + torsmo, tslib, udev, udpcast, usbmount, usbutils, vsftpd, + vtun, which, wireless-tools, wpa_supplicant, xapp_twm, + xapp_xbacklight, xapp_xcursorgen, xapp_xinit, xapp_xinput, + xapp_xmore, + xdriver_xf86-input-{acecad,aiptek,evdev,joystick,keyboard}, + xdriver-xf86-input-{mouse,synaptics,vmmouse,void}, + xdriver-xf86-video-{apm,ark,ast,ati,chips,cirrus,dummy,fbdev}, + xdriver-xf86-video-{geode,glide,glint,i128,i740,intel,mach64}, + xdriver-xf86-video-{mga,neomagic,newport,nv,openchrome,r128}, + xdriver-xf86-video-{rendition,s3,s3virge,savage,siliconmotion}, + xdriver-xf86-video-{sis,sisusb,suncg3,suncg6,suncg14,sunffb}, + xdriver-xf86-video-{sunleo,suntcx,tdfx,tga,trident,v4l,vesa}, + xdriver-xf86-video-{vmware,voodeo,wsfb,xgi,xgixp}, + xkeyboard-config, xlib_libX11, xserver_xorg-server, xstroke, + xterm, xvkbd, zlib + + Deprecated packages: hotplug, lzma, ng-spice-rework, sfdisk + + Removed packages: dillo, libglib12, libgtk12, microwin, + pcmcia + + Issues resolved (http://bugs.uclibc.org): + + #901: new package: gpsd + #2389: Generate a Makefile wrapper in $(O) + #2461: wireless_tools: install shared library if needed + #2521: Can't compile sdl_mixer, mikmod.h can't be found + #2533: xserver_xorg-server: Enable glx, if mesa3d is built + #2563: [PATCH] cairo: Expose the configure option to disable some... + #2581: libmms: Update to 0.6, and patch to work on architectures... + #2707: Can't compile linux kernel using buildroot + crosstool-ng + #2731: Build order + #2737: buildroot configuration tool crashing when the path exceeds... + #2767: Build for lsof broken in buildroot-2010.08 + +2010.08: Released August 31th, 2010: + + Fixes all over the tree. + + Updated/fixed packages: atk, xstroke + + Removed packages: lxdoom + +2010.08-rc2, Released August 30th, 2010: + + Fixes all over the tree. + + Mark the combination of uClibc 0.9.31, gcc 4.2.x, C++ and + locale support as broken. Remove deprecated GCC 4.2.[1-3] + versions. + + Mark CRIS architecture as deprecated, as it is discontinued + upstream. + + Marked shared config.cache as experimental and disabled by + default as it is known to break with certain package + combinations. + + Toolchain: fixed gcc 4.2.x build after uClibc NPTL support got + added. + + fs: old-style squashfs for big endian archs fixed. + + Updated/fixed packages: busybox, gst-plugins-base, + imagemagick, kismet, libgail, libglib2, libgtk2, lua, + luafilesystem, lzo, ncurses, netcat, pango, php, pppd, + proftpd, qt, samba, startup-notification, swfdec, sysvinit, + util-linux + + Removed packages: stunnel + + Issues resolved (http://bugs.uclibc.org): + + #635: util-linux fails to build in 2009.08 + #2239: netcat package installs its binary to target as avr32-linux... + #2395: libglib2-2.24.1 and libxml2-2.7.7 fails build on MIPS because... + #2443: Initramfs: Don't overwrite $(TARGET_DIR)/init if it exists + #2449: Minor fixes for squashfs makefile and correct PowerPC e500 ... + +2010.08-rc1, Released July 30th, 2010: + + Fixes all over the tree and new features. + + Toolchain: GCC 4.3.5, older 4.3.x versions removed. GCC 4.1.2 + and non-sysroot support removed. Added support for (snapshot) + NPTL in uClibc, 0.9.28.3 removed, + + Bootloaders: Various cleanups, moved to boot/, added Barebox, + removed yaboot. Support building u-boot from custom tarball, + u-boot 2010.06. + + New GTK-based configurator, usable using 'make gconfig'. + + Java packages marked as broken. Unless someone steps up to + support this, they will be removed during the 2010.11 + development cycle. + + Alpha, IA64 and Sparc64 architectures marked as deprecated. + GTK+ on DirectFB has also been marked as deprecated, as it is + not supported in recent GTK+ versions, and more and more + packages depends on the new versions. + Unless someone steps up to support them, they will be removed + during the 2010.11 development cycle. + + New packages: cgilua, copas, coxpcall, ffmpeg, libsvgtiny, + libgail, luafilesystem, luasocket, rings, wsapi, xavante, xterm + + Updated/fixed packages: alsa-lib, alsamixergui, at, atk, + avahi, berkeleydb, bash, blackbox, busybox, bzip2, cairo, + cdrkit, cmake, dash, dhcp, dialog, diffutils, distcc, dmalloc, + dnsmasq, dropbear, e2fsprogs, fbv, file, flex, fontconfig, + gawk, gmpc, gnuchess, gst-plugins-base, gst-plugins-good, + gstreamer, gzip, icu, intltool, iostat, ipsec-tools, iptables, + iw, libart, libcgi, libcurl, libdrm, libeXosip, libfuse, + libglib2, libgpg-error, libiconv, libidn, liblockfile, libpng, + libsoup, lighttpd, links, linux-fusion, lmbench, lrzsz, + ltrace, make, midori, module-init-tools, mplayer, + mysql_client, nbd, ncurses, neon, netcat, netperf, netsnmp, + ntfsprogs, openssl, oprofile, pango, php, qt, quagga, samba, + setserial, sdl, sdl_mixer, sdl_sound, sdl_ttf, speech-tools, + sqlite, squashfs, swfdec, tftpd, thttpd, tn5250, tremor, + usbutils, webif, webkit, wireless_tools, xerces, + xkeyboard-config, xserver_xorg-server, xvkbd, zlib + + Removed packages: modutils, portage, rxvt + + Deprecated packages: dillo, libglib12, libgtk12, microwin, pcmcia + + Issues resolved (http://bugs.uclibc.org): + + #321: alsa-lib uses host include files for python which breaks ... + #361: linux kernel configuration choice works incorrectly + #387: Tremor not installed to toolchain + #401: new package: ffmpeg + #475: uImage target for U-boot failed generating + #543: ATK requires X11 on DirectFB target + #575: webkit: Buildroot Libtool Patch Fails + #583: build fails with external x86_64 toolchain + #729: sstrip creates corrupted headers + #829: Webkit r44552 needs libXt + #835: Package Dataflashboot-1.05 does not compile with buildroot... + #847: Compiling target-gcc v4.4 fails with "libc.so.0: cannot open... + #859: Add (head of) nptl branch to list of uClibc versions + #949: compile with debug info + #955: Grub fails to build with External Toolchain + #1051: Webkit doesn't compile (Linuxthreads new, x86) + #1213: Move .config into output directory + #1225: Buildroot fails to account for "nof" subdirectory (no float... + #1231: (sparc) Linux kernel fails to build + #1261: The getline() in output/build/linux-2.6.28/scripts/unifdef.c... + #1339: Busybox needs -fno-strict-aliasing to compile cleanly + #1393: neon config fails libxml/parser.h: libxml2 requires, but not ... + #1405: WebKit fails to build because pthread_getattr_np is not impl... + #1675: GMP Error during buildroot make process + #1741: external toolchain linking error + #1753: lmbench: convert to generic package infrastructure + #1771: Fakeroot and the target/generic/device_table.txt create bad... + #1807: LZMA 4.32.7, Required header file(s) are missing + #1813: xkeyboard-config fails to build because of intltool problem + #1879: Bump iptables to 1.4.8 + #1885: Add a bunch of lua modules + #1897: Bump libusb to 1.0.7 + #1903: Bump tn5250 to 0.17.4 and migrate to autotargets + #1909: netperf-2.4.5 fails to build because of undeclared SOCK_DCCP + #1927: Bump file to 5.03 and migrate to autotargets + #1933: Bump gawk to 3.1.8 and migrate to autotargets + #1945: PHP: add sqlite3 dependency when using external lib + #1951: Bump openssl to 0.9.8o + #1957: Bump sqlite to 3.6.23.1 + #1975: Package removal/deprecation + #1981: zlib: bump to 1.2.5 + #1987: intltool: Fix spelling mistake + #1993: Bump bash to 4.1.7(1) and migrate to autotargets + #1999: Typo in path checking + #2005: Bump dnsmasq to 2.55 and migrate to gentargets + #2035: ipsec-tools-0.7.2 fails to build with gcc-4.4.x + #2038: Bump ncurses to 5.7 + #2095: make gconfig: undefined reference to symbol 'dlsym@@GLIBC_2.2.5' + #2101: blackbox depends on locale support + #2119: Tries to build kernel, although disabled in config + #2125: libXfont build fail + #2143: buildroot compiler generates segfaulting statically linked exe.. + #2149: xterm build failure + #2155: Compression lzo don't set for ubifs + #2161: [SECURITY] Update libpng to 1.2.44 + #2167: Bump busybox to 1.17.0, convert to gentargets, drop 1.12, ... + #2181: pixman can't apply pixman-0.10.0-no-tests.patch + #2191: linux-fusion build fail + #2221: Qt does not compile (dependencies not taken into account?) + #2233: Atmel atstk target skeletons have /etc/mtab as a file, not ... + #2245: Netcat does not work due to incorrect assumptions about signed.. + #2251: directory output/build after make *_defconfig not found + #2257: Convert netsnmp package to autotargets + #2263: Bump samba to 3.3.13 + #2269: setserial causes make error + +2010.05, Released May 30th, 2010: + + Fixes all over the tree. + + Updated/fixed packages: coreutils, hal, libcap, + lockfile-progs, ncftp, xserver_xorg-server + + Issues resolved (http://bugs.uclibc.org): + + #1789: binutils fails to build for i386 + #1843: Fix libcap build failure + #1855: XORG Keyboard driver fails to compile + +2010.05-rc3, Released May 27th, 2010: + + Fixes all over the tree. + + Updated/fixed packages: aumix, atk, avahi, bmon, busybox, cairo, + cdrkit, dbus-glib, dbus-python, docker, enchant, fltk, gamin, + gettext, gmpc, gob2, grep, gstreamer, gst-plugins-bad, + gst-plugins-base, gvfs, hal, iconv, icu, iperf, libcgicc, + libdvdnav, libdvdread, libglade, libglib2, libgtk2, libidn, + libmms, libmpd, libpcap, libsoup, lmbench, lsof, ltrace, lvm2, + make, metacity, microperl, mtd-utils, mutt, nbd, netsnmp, + ntfsprogs, ntp, olsr, pango, pciutils, pcmanfm, php, + pkg-config, psmisc, qt, samba, shared-mime-info, squashfs, + squashfs3, sshfs, startup-notification, swfdec, sylpheed, + uemacs, util-linux, valgrind, vpnc, vsftpd, webkit, xstroke + + Issues resolved (http://bugs.uclibc.org): + + #75: arm buildroot "unrecognized option" error + #699: Buildroot fails to copy libstdc++ to target when using external... + #1693: NTP trys IPV6 even if not configured error: 'IPV6_MULTICAST... + #1729: alsamixergui fails to build + #1801: Avahi-autoipd doesn't create TARGET_DIR/var/lib + #1819: pciutils small bugs + #2065: Internal toolchain: bump gcc 4.3.x series to 4.3.5 + +2010.05-rc2, Released May 11th, 2010: + + Fixes all over the tree. + + Updated/fixed packages: busybox, customize, gawk, gnuchess, + hal, hostapd, less, libgcrypt, libnl, libxcb, linux-fusion, + ltp-testsuite, mplayer, netplug, pciutils, php, sed, + shared-mime-info usb_modeswitch, usbutils, vlc wpa_supplicant, + xapp_bdftopcf, xapp_mkfontdir, xdriver_xf86-video-openchrome, + xfont_encodings, xlib_libX11, xlib_libXfont, xlib_xtrans, + xproto_fontcacheproto, xproto_fontsproto, xvkbd + + Removed packages: vice + + Issues resolved (http://bugs.uclibc.org): + + #849: "customize" package copies files to wrong place in target tree + #985: Bump usb_modeswitch package to 1.1.0 + #1135: Package customize. Wrong copying + #1525: Package hal deletes a whole /etc/rc.d directory + #1531: libxcb 1.5 build fails, due to missing xcbgen Python module + #1669: Busybox failed to compile when using an external toolchain + #1699: Fix usbutils dependencies and bump + #1705: Fix pciutils broken cross compiling + #1717: External toolchain fixes for hostapd & wpa_supplicant + +2010.05-rc1, Released May 3rd, 2010: + + Cleaned up / restructured package menu. + + Toolchain: uClibc 0.9.30.3 / 0.9.31, older 0.9.30.x removed. + 2.6.33 kernel headers, binutils 2.20.1, GCC 4.4.4, + removed broken nios2 support, ppc e300cX/e500mc support, + improved external toolchain support, GDB 7.x support. + + X.org updated to 7.5. + + New packages: cdrkit, cramfs, genext2fs, genromfs, + libatomic_ops, librsync, libusb-compat, lmbench, netperf, + squashfs, squashfs3, squid + + Updated/fixed packages: alsa-utils, argus, autoconf, bison, + busybox, bzip2, directfb, dnsmasq, dosfstools, e2fsprogs, + eeprog, fakeroot, fbv, findutils, freetype, haserl, hostapd, + iperf, iptables, iw, less, libaio, libcgi, libcgicc, libdrm, + libgcrypt, libglib2, libid3tag, libmad, liboil, libosip2, + libpng, libraw1394, libsysfs, libxml2, libxslt, linux-fusion, + ltrace, lua, lzma, madplay, makedevs, matchbox, mdadm, + memstat, mesa3d, mtd-utils, nano, ncurses, openssl, patch, + pciutils, php, pixman, portage, pppd, pthread-stubs, python, + qt, radvd, samba, setserial, smartmontools, tar, tslib, + udpcast, usb_modeswith, vtun, wget, xdata_xcursor-themes, + xdriver_xf86-video-intel, xkeyboard-config, xlib_libX11, + xlib_libXaw, xlib_libXfont, xlib_libXfontcache, + xlib_libXxf86misc, xlib_libXtst, xlib_libpciaccess, + xproto_dri2proto, xproto_eviext, xproto_fontcacheproto, + xproto_xf86miscproto, xserver_xorg-server + + Removed packages: xapp_xtrap, xlib_libXTrap, xlib_libXevie, + xlib_libXxf86misc, xxproto_evieext, proto_trapproto, + xproto_xf86miscproto + + Issues resolved (http://bugs.uclibc.org): + + #513: Add new squid package + #661: lmbench: new package + #719: Add lua option to haserl + #800: [PATCH] iperf update to 2.0.4 + #803: [PATCH] lua - add shared library patch and config option for... + #805: [PATCH] mdadm - version update + #817: integrator926_defconfig uses unsupported uboot board name + #851: Add option to specify --sysroot value for external toolchain + #1093: Upgrade libusb to v1.0.3 and add new libusb-compat + package for compatibility with old packages that expect + the pre-1.0 API. + #1105: Add new netperf package + #1111: Bump wget to 1.12 and migrate to Makefile.autotools.in + #1117: Bump nano to 2.2.3 and migrate to Makefile.autotools.in + #1123: Bump less to 436 and migrate to Makefile.autotools.in + #1129: Bump memstat to 0.8 and migrate to Makefile.package.in + #1189: Wrong u-boot configuration name for integrator926 target + #1219: kernel headers not correctly installed into toolchain/staging + #1267: Wrong BR2_EXTRA_VERSION + #1273: BR2_INET_IPV6 does not enable IPv6 in pppd + #1303: Add librsync package + #1321: Busybox link fails due to lack of --sysroot option + #1327: mtd-utils compile failure due to lack of --sysroot in CFLAGS + #1345: Bump pppd to 2.4.5 and convert to Makefile.autotools.in + #1369: cannot build radvd (flex problem) + #1387: xlib_libX11-1.3.2 can't find libjpeg + #1411: [SECURITY] Update openssl package to 0.9.8n + #1417: Bump iptables to 1.4.7 + #1423: Bump e2fsprogs to 1.41.11 + #1429: [SECURITY] Update php to 5.2.13 + #1441: Add binutils 2.20.1 + #1447: Package installation on target with debug symbols is broken + #1459: Misc QA fixes + #1489: radvd update to 1.6 + #1513: Enable powerpc e300c2, e300c3 and e500mc optimization + #1537: dev entries not created anymore + #1555: Fix default uclibc-0.9.31 configuration + #1561: [SECURITY] Update samba to 3.3.12 + #1567: openssl0.9.8n fails to compile + #1573: Alsa-utils alsactl/init/* not installed to target + #1591: portmap fails to compile + #1615: Convert eeprog package to gentargets + #1645: Bump hostapd package to 0.7.2 + +2010.02, Release February 26th, 2010: + + Fixes all over the tree. + + Updated/fixed packages: avahi, busybox, cramfs, ipsec-tools, libcgicc, + libgtk2, libraw1394, madplay, netsnmp, pango, squashfs, sylpheed, qt, + xfont_font-util + + Removed packages: hostap, openmotif, xpdf + + Issues resolved (http://bugs.uclibc.org): + + #165: openmotif does not build + #1147: Remove obsolete hostap package + #1183: make source fails to download gmp, mpfr and patches + +2010.02-rc2, Released February 23th, 2010: + + Fixes all over the tree and new features. + + New packages: intltool + + Updated/fixed packages: ace_of_penguins, alsa-lib, alsa-utils, argus, + at, automake, ccache, dosfstools, e2fsprogs, flex, gob2, gmpc, + gst-plugins-good, imagemagick, iw, kexec, libeXosip, libgtk2, + libpcap, libpng, libsoup, libxcb, libxml-parser-perl, libxml2, + libxslt, lvm2, matchbox, mplayer, rsync, rubix, shared-mime-info, + tcl, webkit, xapp_mkfontscale, xfont_encodings, xfont_font-util, + xlib_libfontenc, xproto_trapproto, zlib + + Removed package: xboard + + Issues resolved (http://bugs.uclibc.org): + + #335: atk looks for the path to the gnome library on the host + #355: Please update WebKit - it doesn't compile! + #453: libglib2 autoreconf + #457: e2fsprogs link problem + #459: libgtk2 autoreconf + #469: build of libgtk2 for host incorrectly assumes that X.org ... + #671: Bash fails to build when building buildront on Ubuntu 9.04 + #711: WebKit host dependencies problems + #821: cp: illegal operation + #1039: Not compiled on ubuntu karmic + #1069: [PATCH] The AT91BOOTSTRAP makefile contains a typo + +2010.02-rc1, Released February 9th, 2010: + + Fixes all over the tree and new features. + + Generalized autotools infrastructure to be usable for + non-autotools packages, see package/Makefile.package.in for + details. + + Cleaned up avr32 toolchain config, external source-based + toolchain support is gone. + + Dependency checks: Also check for makeinfo, only print output + on errors. + + Toolchain: uClibc 0.9.30.2, gcc 4.4.3 + + New packages: libcdaudio, libdvdnav, libdvdread, hostapd, ser2net, + tcpreplay + + Updated/fixed packages: alsa-lib, alsa-utils, at, autoconf, bash, + bind, binutils, bootutils, busybox, dbus, directfb, dnsmasq, + e2fsprogs, gstreamer, gperf, gst-plugins-bad, gvfs, fbdump, flex, + hal, iptables, iw, jpeg, kismet, libfuse, libglib2, liboil, libpcap, + libungif, libxml2, libxslt, lighttpd, mesa, mpg123, mtd-utils, nbd, + neon, netstat-nat, newt, openvpn, pcre, php, qt, rdesktop, readline, + rpm, sawman, sdl, sdl_ttf, sqlite, sshfs, tremor, u-boot, + usb_modeswitch, usbutils, webkit, wpa_supplicant, xfsprogs, zlib + + Removed package: asterisk, openswan + + Issues resolved (http://bugs.uclibc.org): + + #515: tcpreplay: new package + #553: Wrong DirectFB ps2mouse limitation + #559: mesa3d build fails + #679: Autoconf cannot find M4 + #739: New/updated hostapd package + #749: Bump usbutils package to version 0.86 + #751: Kernel 2.6 snapshot fetch fail + #753: Bump lighttpd package to 1.4.25 + #757: U-Boot: mkimage cannot be installed using external toolchain + #761: Add binutils 2.20 to toolchain options + #763: [SECURITY] Update pcre to 7.9 + #765: Add buildroot branding to gcc + #767: Bump iw package to 0.9.18 + #773: [SECURITY] Update bind to 9.5.2-P1 + #795: Minor edits to fix typos, grammar, spelling, usage in documen... + #813: Drop not very useful generic package selection options ... + #823: Editor backup files (~) is copied from the target_skeleton + #827: Bump mtd-utils package to version 1.2.0 + #841: Build error + #913: Bump iptables to 1.4.6 + #919: Bump usb_modeswitch package to 1.0.7 + #925: Bump wpa_supplicant package to 0.6.10 + #931: Bump kismet package to 2010-01-R1 + #937: Bump openvpn package to 2.1.1 + #943: Bump sqlite package to 3.6.22 + #961: Bump dnsmasq to 2.52 + #967: Bump netstat-nat to 1.4.10 + #973: Bump iw to 0.9.19 + #1003: DHCP options disabled with busybox-1.16.0 + #1009: [SECURITY] Bump php to 5.2.12 + #1015: [SECURITY] Bump bind to 9.5.1-P2 + #1027: Busybox flash commands conflict with those from mtd-utils + #1063: [SECURITY] Update lighttpd to 1.4.26 + +2009.11, Released December 1st, 2009: + + Additional fixes and cleanups. + + Updated/fixed packages: alsamixergui, autoconf, coreutils, fltk, + microperl, ncurses, vim + + Issues resolved (http://bugs.uclibc.org): + + #707: Cant configure fltk-1.1.7. configure: error: Configure could ... + +2009.11-rc2, Released November 29th, 2009: + + Additional fixes and cleanups. + + Updated/fixed packages: busybox, dbus, fltk, gvfs, ltrace + +2009.11-rc1, Released November 23rd, 2009: + + Fixes all over the tree and new features. + + Cleaned up / Simplified build directory layout. Refer to + docs/buildroot.html#using for details. + + Target defconfig files moved to configs/ and listed in 'make help' + output. + + Fixed *clean targets. Now clean removes everything generated, + so you can do a fresh rebuild. Distclean furthermore removes + kbuild tools and .config, bringing the source tree back in a + pristine state. + + Toolchain: ARM cortex A8 support, GCC 4.4.2, sensible default + soft / hardfloat setting for architecture, ensure target-ldd + gets installed. + + New packages: divine, gvfs, libarchive, libmicrohttpd, + sdl_sound, swfdec, sysstat + + Updated/fixed packages: alsa-lib, alsamixergui, autoconf, bootutils, + busybox, gcc, directfb, dnsmasq, e2fsprogs, festival, gamin, gperf, + gqview, gstreamer, gst-plugins-bad, gst-plugins-base, gst-plugins-good, + imagemagick, ipkg, iptables, iw, kernel-headers, kismet, leafpad, + libelf, libevent, libglib2, libidn, liblockfile, libmad, libpcap, + libupnp, libuuid, libxml2, lighttpd, ltrace, lua, lzma, magiccube4d, + matchbox, mdadm, nbd, ncftp, ncurses, netkittelnet, netsnmp, + ng-spice-rework, ntfs-3g, openntp, openssl, pcmanfm, php, psmisc, + python, quagga, radvd, rpm, rsync, rubix, samba, sawman, sdl, sdl_image, + shared-mime-info, sfdisk, spawn-fcgi, speech-tools, sqlite, squashfs, + synergy, syslinux, sysklogd, target-binutils, tcpdump, torsmo, u-boot, + udpcast, util-linux, valgrind, vsftpd, wipe, wpa-supplicant, x11vnc, + xdata_xcursor-themes, xboard, xfsprogs, xstroke, zlib[5~ + + Removed package: mdnsresponder, mpatrol, gcc 3.4.6 + 4.0.4, vice + + Issues resolved (http://bugs.uclibc.org): + + #301: allow to install libsmbclient + #303: add gvfs package + #477: Add sdl_sound package + #487: Make kismet package sexier + #511: New package usb_modeswitch + #527: misc fixes for dnsmasq package + #565: libevent: Bump version and clean up makefile + #587: Use iptables multipurpose binaries and bump to 1.4.4 + #593: Missing early check for patch(1) + #597: (REOP) Selecting busybox in buildroot's config clobbers ar ... + #609: libmicrohttpd: New package + #615: python: Don't delete .py files unless asked + #617: netkit/inetd requires RPC and fails to build if RPC is disabled + #619: netkittelnet requires netkitbase to install, but there's no ... + #645: allow to build nbd-server with NBD package + #653: [SECURITY] Update php package to version 5.2.11 + #655: Update sqlite package to version 3.6.18 + #657: Bug in imagemagick-clean target + #663: Add option for NAND flash with 512B Page and 16 kB erasesize ... + #665: [PATCH] Samba package + #667: [PATCH] e2fsprogs + #683: SDL-dfb does not select directfb + #701: make install problem with unstripped binaries + #703: [SECURITY] Update openssl package to 0.9.8l + #705: Bump spawn-fcgi package to 1.6.3 + #709: Bump lighttpd package to 1.4.24 + #713: Migrate openntpd package to Makefile.autotools.in + #715: Bump libidn package to 1.15 and other fixes + #717: Bump dnsmasq to 2.51 and introduce new IDN option + #731: Bump iw package to 0.9.17 + +2009.08, Released August 31th, 2009: + + Additional fixes and cleanups. + + Updated/fixed packages: ctorrent, saveconfig/getconfig, + sdl_net, util-linux. + + Issues resolved (http://bugs.uclibc.org): + + #529: util-linux doesn't find headers and include libs correctly + #557: Build ctorrent with SSL support if available + +2009.08-rc3, Released August 26th, 2009: + + Additional fixes and cleanups. + + Updated/fixed packages: alsa-utils, berkeleydb, busybox, dbus, + directfb, enchant, kernel headers. + + Issues resolved (http://bugs.uclibc.org): + + #471: Allow directfb compilation with debug + #541: Removal of CVS directories in target filesystem broken + #547: berkeleydb: Update config.{sub, guess} + #549: enchant: Fix dependencies. + #569: Fix alsa-utils build for x86 on x86-64 + +2009.08-rc2, Released August 6th, 2009: + + Additional fixes and new features. + + New packages: libuuid, gcc 4.3.4. + + Updated/fixed packages: busybox, classpath, gzip, ipsec-tools, + jamvm, libusb, microperl, neon, popt, sed, webkit. + + Fixed issue with 'make oldconfig' + + Issues resolved (http://bugs.uclibc.org): + + #525: sed broken with external toolchain + #537: Fix gzip build with recent glibc + +2009.08-rc1, Released August 2nd, 2009: + + Fixes all over the tree and new features. + + Improvement of external toolchain support: + - Support for glibc toolchains. + - The toolchain configuration announced to Buildroot is + verified against the real toolchain configuration. + - Fixes, documentation. + + Cleanup X.org support: clarified configuration options, and + removed mandatory dependency on useless libraries such as + libXt or libXaw. + + New QT-based configurator, usable using 'make xconfig'. + + Support for the Xtensa architecture. + + Toolchain: GCC 4.4.1, 2.6.30 kernel headers, removed < 2.6.26 + headers. + + New packages: bmon, ctorrent, dosfstools, enchant, + gst-plugins-bad, iw, libmms, libnl, netstat-nat, ntfsprogs, + sdl_gfx, spawn-fcgi. + + Updated packages: bind, busybox, coreutils, sqlite, directfb, + expat, gamin, gnuconfig, haserl, ipsec-tools, classpath, + libcurl, libglib2, liblockfile, libpng, libsoup, libxml2, + lighttpd, ltp-testsuite, lvm2, matchbox, memstat, + gst-plugins-good, gstreamer, libogg, libvorbis, mplayer, + neon, openssl, pciutils, php, qt, ruby, sawman, webkit, + wpa-supplicant, xdriver_xf86-input-synaptics, + xdriver_xf86-video-intel, xlib_libXfont, xlib_libXft, + xlib_libXt, xproto_xproto, xserver-xorg, xutil_makedepend, + xutil_util-macros. + + Issues resolved (http://bugs.uclibc.org): + + #83: liblockfile fails to compile due to eaccess redefinition + #163: Xtensa architecture port + #171: xorg-server / kernel headers 2.6.26 - vm86.c compilation issue + #241: device mapper + lvm2: build together + #243: ctorrent: new package + #247: ntfsprogs: new package + #271: Library 'libgcc_s.so.1' not installed in search path + #287: New package libnl + #289: New package iw + #331: Update MPlayer to version 1.0rc2 + #333: Bump sqlite package to 3.6.15 + #349: update libsoup to version 2.26.2 + #357: New package netstat-nat + #359,#413: Upgrade openvpn to Makefile.autotools.in + #367: linux kernel compile error for arm926t + #369: Add SDL_gfx package + #373: Support for building gstreamer without libxml + #379: update DirectFB to version 1.4.0 + #383: gst-plugins-good: Allow soup plugin to be configured + #385: neon: Fix pkgconfig dependency + #387: Tremor not installed to toolchain + #389: New package bmon + #391: gstreamer: Bump version to 0.10.23 + #393: gst-plugins-base: Bump version to 0.10.23 + #395: gst-plugins-bad: New package + #403: Error while building iso9660 image + #409: Bump php package to 5.2.10 + #411: ipsec-tools: Bump version to 0.7.2 + #417: New package spawn-fcgi + #419: Bump lighttpd package to 1.4.23 + #421: toolchain: Clean up toolchain locale support menu + #427: webkit: Update to WebKit svn r44552 + #437: ltp-testsuite: Bump version to 20090630 + #451: Upgrade from unmaintained dosfstools-2.11 to dosfstools-3.0.3 + #467: DirectFB 1.4.1 + #473: memstat_0.5.tar.gz has install with -D and that fails "make" + #491: libxml2: Bump version to 0.7.3 + #495: Bump bind package to 9.5.1-P3 (security) + #497: OpenSSL RSA key generation hangs on x86_64 + #509: Bump sqlite package to 3.6.16 + #523: pciutils broken with external toolchain + #533: Update gamin to 0.1.10 to fix compilation + +2009.05, Released June 1st, 2009: + + Fixes for dropbear & diffutils, bump linux-advanced 2.6.29.x + version and marked ubifsroot as broken. + +2009.05-rc3, Released May 27th, 2009: + + Fixes for toolchain (gcc arm pr37436), stable kernel versions, + busybox, curl, libusb, readline, python and strace. + + Issues resolved (http://bugs.uclibc.org): + + #345: libcurl package needs a urandom fix + +2009.05-rc2, Released May 19th, 2009: + + Fixes for toolchain (gcc w/softfloat on ppc, 3.4.6 buildfix + for newer hosts), stable kernel versions, busybox, cups, + dmraid, docker, mesa3d, rsync and updated defconfigs. + + xserver marked as broken on AVR32 and atngw100-expanded + config removed. + + Issues resolved (http://bugs.uclibc.org): + + #167: metacity does not build + #295: gamin installs python support even if python is disabled + #323: gen_matypes fails to execute during build of Mesa when us... + +2009.05-rc1, Released May 5th, 2009: + + Fixes all over the tree, further conversion of packages to + Makefile.autotools.in and we now build host versions of + packages where needed for build time dependencies instead of + relying on the correct versions being available on the build + host. Ancient toolchain / busybox versions have furthermore + been removed as announced in the 2009.02 release notes. + + New packages: flac, gob2, lzop, taglib, wpa_supplicant + + Updated packages: avahi, bind, binutils, busybox, dbus, dbus-glib, + directfb, dnsmasq, freetype, gcc, gmp, gstreamer, iptables, kernel + headers, kexec, libglib2, libpng, libsndfile, lua, mpfr, ntfs-3g, + openssl, php, qtopia4, rsync, samba, sqlite, tar, uboot, uclibc, + util-linux, xorg7, xerces + + Issues resolved (http://bugs.uclibc.org): + + #5,#77,#141,#143: Convert php package to Makefile.autotools.in + and a ton of other improvements + #19: page.h missing by util-linux + #37: update libglib2 to version 2.18.4 + #61: tslib puts staging_dir into pkgconfig file + #69: tar refuses to build + #71,#175: ./wchar.h:41:12: error: empty filename in #include + #73: Bump openssl package to the latest version + #81: New package wpa_supplicant + #99: new package: flac + #101: update gstreamer packages + #105,#313: menuconfig segfaults on tinyx if wchar is not + selected + #107: convert libvorbis to Makefile.autotools.in + #109: Make pppd package avoid bsd err + #111: binutils 2.17 fails to build when texinfo >= 4.10 + #133: Modify ncurses5-config to get correct include path + #137: Bump php to version 5.2.9 + #139: Bump sqlite to 3.6.11 and convert to + Makefile.autotools.in + #145: Bump bind package to 9.5.1-P1 (security) + #147: buildroot toolchain fails to build w/binutils-2.19.1 + #151: openssl package trivial fixes + #161: vim fails on patching with errors in configure.patch + #169: blackbox-0.70.1 does not build + #177: xdriver_xf86-input-keyboard does not build + #179: Upgrade dropbear to Makefile.autotools.in + #181: Update to Xorg 7.4 + #187: ntfs-3g: could not build cross + #191: alsa-lib ARM binaries always built with EABI + #213: Bump wpa_supplicant package to version 0.6.9 + #217: Bump openssl package to 0.9.8k (security) + #219: Toolchain build fails on m4 + #225: m4 macros are out of place + #233: make ipv6 optional in iptables + #237: ncftp: convert to Makefile.autotools.in + #239: ntfs-3g: convert to Makefile.autotools.in + #245: lzop: new package + #271: Bump bind package to 9.5.1-P2 (security) + #277: Bump sqlite package to 3.6.16 + #279: update libglib2 to version 2.20.1 + #281: update DirectFB to version 1.2.8 + #283: add taglib + #285: compilation of samba fails if IPV6 support is missing + #293: update samba to version 3.3.3 + #299: add shared-mime-info package + #307: make openssl package respect build flags diff --git a/COPYING b/COPYING new file mode 100644 index 00000000..0c018b03 --- /dev/null +++ b/COPYING @@ -0,0 +1,355 @@ +With the exceptions below, Buildroot is distributed under the terms of +the GNU General Public License, reproduced below; either version 2 of +the License, or (at your option) any later version. + +Some files in Buildroot contain a different license statement. Those +files are licensed under the license contained in the file itself. + +Buildroot also bundles patch files, which are applied to the sources +of the various packages. Those patches are not covered by the license +of Buildroot. Instead, they are covered by the license of the software +to which the patches are applied. When said software is available +under multiple licenses, the Buildroot patches are only provided under +the publicly accessible licenses. + +----------------------------------------------------------------- + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, 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 Lesser 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 Street, 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 Lesser General +Public License instead of this License. diff --git a/Config.in b/Config.in new file mode 100644 index 00000000..48c373af --- /dev/null +++ b/Config.in @@ -0,0 +1,900 @@ +# + +mainmenu "Buildroot $BR2_VERSION Configuration" + +config BR2_HAVE_DOT_CONFIG + bool + default y + +config BR2_VERSION + string + option env="BR2_VERSION_FULL" + +config BR2_HOSTARCH + string + option env="HOSTARCH" + +config BR2_BASE_DIR + string + option env="BASE_DIR" + +# br2-external paths definitions +source "$BR2_BASE_DIR/.br2-external.in.paths" + +# Hidden config symbols for packages to check system gcc version +config BR2_HOST_GCC_VERSION + string + option env="HOST_GCC_VERSION" + +config BR2_HOST_GCC_AT_LEAST_4_9 + bool + default y if BR2_HOST_GCC_VERSION = "4 9" + +config BR2_HOST_GCC_AT_LEAST_5 + bool + default y if BR2_HOST_GCC_VERSION = "5" + select BR2_HOST_GCC_AT_LEAST_4_9 + +config BR2_HOST_GCC_AT_LEAST_6 + bool + default y if BR2_HOST_GCC_VERSION = "6" + select BR2_HOST_GCC_AT_LEAST_5 + +config BR2_HOST_GCC_AT_LEAST_7 + bool + default y if BR2_HOST_GCC_VERSION = "7" + select BR2_HOST_GCC_AT_LEAST_6 + +config BR2_HOST_GCC_AT_LEAST_8 + bool + default y if BR2_HOST_GCC_VERSION = "8" + select BR2_HOST_GCC_AT_LEAST_7 + +config BR2_HOST_GCC_AT_LEAST_9 + bool + default y if BR2_HOST_GCC_VERSION = "9" + select BR2_HOST_GCC_AT_LEAST_8 + +# When adding new entries above, be sure to update +# the HOSTCC_MAX_VERSION variable in the Makefile. + +# Hidden boolean selected by packages in need of Java in order to build +# (example: kodi) +config BR2_NEEDS_HOST_JAVA + bool + +# Hidden boolean selected by pre-built packages for x86, when they +# need to run on x86-64 machines (example: pre-built external +# toolchains, binary tools like SAM-BA, etc.). +config BR2_HOSTARCH_NEEDS_IA32_LIBS + bool + +# Hidden boolean selected by packages that need to build 32 bits +# binaries with the host compiler, even on 64 bits build machines (e.g +# bootloaders). +config BR2_HOSTARCH_NEEDS_IA32_COMPILER + bool + +# Hidden boolean selected by packages that need the host to have an +# UTF8 locale. +config BR2_NEEDS_HOST_UTF8_LOCALE + bool + +# Hidden boolean selected by packages that need the host to have +# support for building gcc plugins +config BR2_NEEDS_HOST_GCC_PLUGIN_SUPPORT + bool + +source "arch/Config.in" + +menu "Build options" + +menu "Commands" + +config BR2_WGET + string "Wget command" + default "wget --passive-ftp -nd -t 3" + +config BR2_SVN + string "Subversion (svn) command" + default "svn --non-interactive" + +config BR2_BZR + string "Bazaar (bzr) command" + default "bzr" + +config BR2_GIT + string "Git command" + default "git" + +config BR2_CVS + string "CVS command" + default "cvs" + +config BR2_LOCALFILES + string "Local files retrieval command" + default "cp" + +config BR2_SCP + string "Secure copy (scp) command" + default "scp" + +config BR2_HG + string "Mercurial (hg) command" + default "hg" + +config BR2_ZCAT + string "zcat command" + default "gzip -d -c" + help + Command to be used to extract a gzip'ed file to stdout. zcat + is identical to gunzip -c except that the former may not be + available on your system. + Default is "gzip -d -c" + Other possible values include "gunzip -c" or "zcat". + +config BR2_BZCAT + string "bzcat command" + default "bzcat" + help + Command to be used to extract a bzip2'ed file to stdout. + bzcat is identical to bunzip2 -c except that the former may + not be available on your system. + Default is "bzcat" + Other possible values include "bunzip2 -c" or "bzip2 -d -c". + +config BR2_XZCAT + string "xzcat command" + default "xzcat" + help + Command to be used to extract a xz'ed file to stdout. + Default is "xzcat" + +config BR2_LZCAT + string "lzcat command" + default "lzip -d -c" + help + Command to be used to extract a lzip'ed file to stdout. + Default is "lzip -d -c" + +config BR2_TAR_OPTIONS + string "Tar options" + default "" + help + Options to pass to tar when extracting the sources. + E.g. " -v --exclude='*.svn*'" to exclude all .svn internal + files and to be verbose. + +endmenu + +config BR2_DEFCONFIG_FROM_ENV + string + option env="BR2_DEFCONFIG" + +config BR2_DEFCONFIG + string "Location to save buildroot config" + default BR2_DEFCONFIG_FROM_ENV if BR2_DEFCONFIG_FROM_ENV != "" + default "$(CONFIG_DIR)/defconfig" + help + When running 'make savedefconfig', the defconfig file will be + saved in this location. + +config BR2_DL_DIR + string "Download dir" + default "$(TOPDIR)/dl" + help + Directory to store all the source files that we need to fetch. + If the Linux shell environment has defined the BR2_DL_DIR + environment variable, then this overrides this configuration + item. + The directory is organized with a subdirectory for each + package. Each package has its own $(LIBFOO_DL_DIR) variable + that can be used to find the correct path. + + The default is $(TOPDIR)/dl + +config BR2_HOST_DIR + string "Host dir" + default "$(BASE_DIR)/host" + help + Directory to store all the binary files that are built for the + host. This includes the cross compilation toolchain when + building the internal buildroot toolchain. + + The default is $(BASE_DIR)/host + +menu "Mirrors and Download locations" + +config BR2_PRIMARY_SITE + string "Primary download site" + default "" + help + Primary site to download from. If this option is set then + buildroot will try to download package source first from this + site and try the default if the file is not found. + Valid URIs are: + - URIs recognized by $(WGET) + - local URIs of the form file://absolutepath + - scp URIs of the form scp://[user@]host:path. + +config BR2_PRIMARY_SITE_ONLY + bool "Only allow downloads from primary download site" + depends on BR2_PRIMARY_SITE != "" + help + If this option is enabled, downloads will only be attempted + from the primary download site. Other locations, like the + package's official download location or the backup download + site, will not be considered. Therefore, if the package is not + present on the primary site, the download fails. + + This is useful for project developers who want to ensure that + the project can be built even if the upstream tarball + locations disappear. + +if !BR2_PRIMARY_SITE_ONLY + +config BR2_BACKUP_SITE + string "Backup download site" + default "http://sources.buildroot.net" + help + Backup site to download from. If this option is set then + buildroot will fall back to download package sources from here + if the normal location fails. + +config BR2_KERNEL_MIRROR + string "Kernel.org mirror" + default "https://cdn.kernel.org/pub" + help + kernel.org is mirrored on a number of servers around the + world. The following allows you to select your preferred + mirror. By default, a CDN is used, which automatically + redirects to a mirror geographically close to you. + + Have a look on the kernel.org site for a list of mirrors, then + enter the URL to the base directory. Examples: + + http://www.XX.kernel.org/pub (XX = country code) + http://mirror.aarnet.edu.au/pub/ftp.kernel.org + +config BR2_GNU_MIRROR + string "GNU Software mirror" + default "http://ftpmirror.gnu.org" + help + GNU has multiple software mirrors scattered around the + world. The following allows you to select your preferred + mirror. By default, a generic address is used, which + automatically selects an up-to-date and local mirror. + + Have a look on the gnu.org site for a list of mirrors, then + enter the URL to the base directory. Examples: + + http://ftp.gnu.org/pub/gnu + http://mirror.aarnet.edu.au/pub/gnu + +config BR2_LUAROCKS_MIRROR + string "LuaRocks mirror" + default "http://rocks.moonscript.org" + help + LuaRocks repository. + + See http://luarocks.org + +config BR2_CPAN_MIRROR + string "CPAN mirror (Perl packages)" + default "http://cpan.metacpan.org" + help + CPAN (Comprehensive Perl Archive Network) is a repository of + Perl packages. It has multiple software mirrors scattered + around the world. This option allows you to select a mirror. + + The list of mirrors is available at: + http://search.cpan.org/mirror + +endif + +endmenu + +config BR2_JLEVEL + int "Number of jobs to run simultaneously (0 for auto)" + default "0" + help + Number of jobs to run simultaneously. If 0, determine + automatically according to number of CPUs on the host system. + +config BR2_CCACHE + bool "Enable compiler cache" + help + This option will enable the use of ccache, a compiler cache. + It will cache the result of previous builds to speed up future + builds. By default, the cache is stored in + $HOME/.buildroot-ccache. + + Note that Buildroot does not try to invalidate the cache + contents when the compiler changes in an incompatible way. + Therefore, if you make a change to the compiler version and/or + configuration, you are responsible for purging the ccache + cache by removing the $HOME/.buildroot-ccache directory. + +if BR2_CCACHE + +config BR2_CCACHE_DIR + string "Compiler cache location" + default "$(HOME)/.buildroot-ccache" + help + Where ccache should store cached files. + If the Linux shell environment has defined the BR2_CCACHE_DIR + environment variable, then this overrides this configuration + item. + +config BR2_CCACHE_INITIAL_SETUP + string "Compiler cache initial setup" + help + Initial ccache settings to apply, such as --max-files or + --max-size. + + For example, if your project is known to require more space + than the default max cache size, then you might want to + increase the cache size to a suitable amount using the -M + (--max-size) option. + + The string you specify here is passed verbatim to ccache. + Refer to ccache documentation for more details. + + These initial settings are applied after ccache has been + compiled. + +config BR2_CCACHE_USE_BASEDIR + bool "Use relative paths" + default y + help + Allow ccache to convert absolute paths within the output + directory into relative paths. + + During the build, many -I include directives are given with an + absolute path. These absolute paths end up in the hashes that + are computed by ccache. Therefore, when you build from a + different directory, the hash will be different and the cached + object will not be used. + + To improve cache performance, set this option to y. This + allows ccache to rewrite absolute paths within the output + directory into relative paths. Note that only paths within the + output directory will be rewritten; therefore, if you change + BR2_HOST_DIR to point outside the output directory and + subsequently move it to a different location, this will lead + to cache misses. + + This option has as a result that the debug information in the + object files also has only relative paths. Therefore, make + sure you cd to the build directory before starting gdb. See + the section "COMPILING IN DIFFERENT DIRECTORIES" in the ccache + manual for more information. + +endif + +config BR2_ENABLE_DEBUG + bool "build packages with debugging symbols" + help + Build packages with debugging symbols enabled. All libraries + and binaries in the 'staging' directory will have debugging + symbols, which allows remote debugging even if libraries and + binaries are stripped on the target. Whether libraries and + binaries are stripped on the target is controlled by the + BR2_STRIP_* options below. + +if BR2_ENABLE_DEBUG +choice + prompt "gcc debug level" + default BR2_DEBUG_2 + help + Set the debug level for gcc + +config BR2_DEBUG_1 + bool "debug level 1" + help + Debug level 1 produces minimal information, enough for making + backtraces in parts of the program that you don't plan to + debug. This includes descriptions of functions and external + variables, but no information about local variables and no + line numbers. + +config BR2_DEBUG_2 + bool "debug level 2" + help + The default gcc debug level is 2 + +config BR2_DEBUG_3 + bool "debug level 3" + help + Level 3 includes extra information, such as all the macro + definitions present in the program. Some debuggers support + macro expansion when you use -g3. +endchoice +endif + +config BR2_STRIP_strip + bool "strip target binaries" + default y + depends on !BR2_PACKAGE_HOST_ELF2FLT + help + Binaries and libraries in the target filesystem will be + stripped using the normal 'strip' command. This allows to save + space, mainly by removing debugging symbols. Debugging symbols + on the target are needed for native debugging, but not when + remote debugging is used. + +config BR2_STRIP_EXCLUDE_FILES + string "executables that should not be stripped" + default "" + depends on BR2_STRIP_strip + help + You may specify a space-separated list of binaries and + libraries here that should not be stripped on the target. + +config BR2_STRIP_EXCLUDE_DIRS + string "directories that should be skipped when stripping" + default "" + depends on BR2_STRIP_strip + help + You may specify a space-separated list of directories that + should be skipped when stripping. Binaries and libraries in + these directories will not be touched. The directories should + be specified relative to the target directory, without leading + slash. + +choice + prompt "gcc optimization level" + default BR2_OPTIMIZE_S + help + Set the optimization level for gcc + +config BR2_OPTIMIZE_0 + bool "optimization level 0" + help + Do not optimize. + +config BR2_OPTIMIZE_1 + bool "optimization level 1" + help + Optimize. Optimizing compilation takes somewhat more time, and + a lot more memory for a large function. With -O, the compiler + tries to reduce code size and execution time, without + performing any optimizations that take a great deal of + compilation time. -O turns on the following optimization + flags: -fdefer-pop -fdelayed-branch -fguess-branch-probability + -fcprop-registers -floop-optimize -fif-conversion + -fif-conversion2 -ftree-ccp -ftree-dce -ftree-dominator-opts + -ftree-dse -ftree-ter -ftree-lrs -ftree-sra -ftree-copyrename + -ftree-fre -ftree-ch -funit-at-a-time -fmerge-constants. -O + also turns on -fomit-frame-pointer on machines where doing so + does not interfere with debugging. + +config BR2_OPTIMIZE_2 + bool "optimization level 2" + help + Optimize even more. GCC performs nearly all supported + optimizations that do not involve a space-speed tradeoff. The + compiler does not perform loop unrolling or function inlining + when you specify -O2. As compared to -O, this option increases + both compilation time and the performance of the generated + code. -O2 turns on all optimization flags specified by -O. It + also turns on the following optimization flags: + -fthread-jumps -fcrossjumping -foptimize-sibling-calls + -fcse-follow-jumps -fcse-skip-blocks -fgcse -fgcse-lm + -fexpensive-optimizations -fstrength-reduce + -frerun-cse-after-loop -frerun-loop-opt -fcaller-saves + -fpeephole2 -fschedule-insns -fschedule-insns2 + -fsched-interblock -fsched-spec -fregmove -fstrict-aliasing + -fdelete-null-pointer-checks -freorder-blocks + -freorder-functions -falign-functions -falign-jumps + -falign-loops -falign-labels -ftree-vrp -ftree-pre. Please + note the warning under -fgcse about invoking -O2 on programs + that use computed gotos. + +config BR2_OPTIMIZE_3 + bool "optimization level 3" + help + Optimize yet more. -O3 turns on all optimizations specified by + -O2 and also turns on the -finline-functions, -funswitch-loops + and -fgcse-after-reload options. + +config BR2_OPTIMIZE_G + bool "optimize for debugging" + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + help + Optimize for debugging. This enables optimizations that do not + interfere with debugging. It should be the optimization level + of choice for the standard edit-compile-debug cycle, offering + a reasonable level of optimization while maintaining fast + compilation and a good debugging experience. + +config BR2_OPTIMIZE_S + bool "optimize for size" + help + Optimize for size. -Os enables all -O2 optimizations that do + not typically increase code size. It also performs further + optimizations designed to reduce code size. -Os disables the + following optimization flags: -falign-functions -falign-jumps + -falign-loops -falign-labels -freorder-blocks + -freorder-blocks-and-partition -fprefetch-loop-arrays + -ftree-vect-loop-version + This is the default. + +config BR2_OPTIMIZE_FAST + bool "optimize for fast (may break packages!)" + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_6 + help + Optimize for fast. Disregard strict standards + compliance. -Ofast enables all -O3 optimizations. It also + enables optimizations that are not valid for all + standard-compliant programs, so be careful, as it may break + some packages. It turns on -ffast-math and the + Fortran-specific -fstack-arrays, unless -fmax-stack-var-size + is specified, and -fno-protect-parens. + +endchoice + +config BR2_GOOGLE_BREAKPAD_ENABLE + bool "Enable google-breakpad support" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11 + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on (BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_UCLIBC) + depends on BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GOOGLE_BREAKPAD_ARCH_SUPPORTS + select BR2_PACKAGE_GOOGLE_BREAKPAD + help + This option will enable the use of google breakpad, a library + and tool suite that allows you to distribute an application to + users with compiler-provided debugging information removed, + record crashes in compact "minidump" files, send them back to + your server and produce C and C++ stack traces from these + minidumps. Breakpad can also write minidumps on request for + programs that have not crashed. + +if BR2_GOOGLE_BREAKPAD_ENABLE + +config BR2_GOOGLE_BREAKPAD_INCLUDE_FILES + string "List of executables and libraries to extract symbols from" + default "" + help + You may specify a space-separated list of binaries and + libraries with full paths relative to $(TARGET_DIR) of which + debug symbols will be dumped for further use with google + breakpad. + + A directory structure that can be used by minidump-stackwalk + will be created at: + + $(STAGING_DIR)/usr/share/google-breakpad-symbols + +endif + +choice + bool "libraries" + default BR2_SHARED_LIBS if BR2_BINFMT_SUPPORTS_SHARED + default BR2_STATIC_LIBS if !BR2_BINFMT_SUPPORTS_SHARED + help + Select the type of libraries you want to use on the target. + + The default is to build dynamic libraries and use those on the + target filesystem, except when the architecture and/or the + selected binary format does not support shared libraries. + +config BR2_STATIC_LIBS + bool "static only" + help + Build and use only static libraries. No shared libraries will + be installed on the target. This potentially increases your + code size and should only be used if you know what you are + doing. Note that some packages may not be available when this + option is enabled, due to their need for dynamic library + support. + +config BR2_SHARED_LIBS + bool "shared only" + depends on BR2_BINFMT_SUPPORTS_SHARED + help + Build and use only shared libraries. This is the recommended + solution as it saves space and build time. + +config BR2_SHARED_STATIC_LIBS + bool "both static and shared" + depends on BR2_BINFMT_SUPPORTS_SHARED + help + Build both shared and static libraries, but link executables + dynamically. While building both shared and static libraries + take more time and more disk space, having static libraries + may be useful to link some of the applications statically. + +endchoice + +config BR2_PACKAGE_OVERRIDE_FILE + string "location of a package override file" + default "$(CONFIG_DIR)/local.mk" + help + A package override file is a short makefile that contains + variable definitions of the form _OVERRIDE_SRCDIR, which + allows to tell Buildroot to use an existing directory as the + source directory for a particular package. See the Buildroot + documentation for more details on this feature. + +config BR2_GLOBAL_PATCH_DIR + string "global patch directories" + help + You may specify a space separated list of one or more + directories containing global package patches. For a specific + version of a specific package , + patches are applied as follows: + + First, the default Buildroot patch set for the package is + applied from the package's directory in Buildroot. + + Then for every directory - - that exists in + BR2_GLOBAL_PATCH_DIR, if the directory + /// exists, + then all *.patch files in this directory will be applied. + + Otherwise, if the directory / + exists, then all *.patch files in the directory will be + applied. + +menu "Advanced" + +config BR2_COMPILER_PARANOID_UNSAFE_PATH + bool "paranoid check of library/header paths" + default y + help + By default, when this option is disabled, when the Buildroot + cross-compiler will encounter an unsafe library or header path + (such as /usr/include, or /usr/lib), the compiler will display + a warning. + + By enabling this option, this warning is turned into an error, + which will completely abort the build when such unsafe paths + are encountered. + + Note that this mechanism is available for both the internal + toolchain (through the toolchain wrapper and binutils patches) + and external toolchain backends (through the toolchain + wrapper). + +config BR2_FORCE_HOST_BUILD + bool "Force the building of host dependencies" + help + Build all available host dependencies, even if they are + already installed on the system. + + This option can be used to ensure that the download cache of + source archives for packages remain consistent between + different build hosts. + + This option will increase build time. + +config BR2_REPRODUCIBLE + bool "Make the build reproducible (experimental)" + # SOURCE_DATE_EPOCH support in toolchain-wrapper requires GCC 4.4 + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_4 + help + This option will remove all sources of non-reproducibility + from the build process. For a given Buildroot configuration, + this allows to generate exactly identical binaries from one + build to the other, including on different machines. + + The current implementation is restricted to builds with the + same output directory. Many (absolute) paths are recorded in + intermediary files, and it is very likely that some of these + paths leak into the target rootfs. If you build with the + same O=... path, however, the result is identical. + + This is labeled as an experimental feature, as not all + packages behave properly to ensure reproducibility. + +config BR2_PER_PACKAGE_DIRECTORIES + bool "Use per-package directories (experimental)" + help + This option will change the build process of Buildroot + package to use per-package target and host directories. + + This is useful for two related purposes: + + - Cleanly isolate the build of each package, so that a + given package only "sees" the dependencies it has + explicitly expressed, and not other packages that may + have by chance been built before. + + - Enable top-level parallel build. + + This is labeled as an experimental feature, as not all + packages behave properly with per-package directories. + +endmenu + +comment "Security Hardening Options" + +config BR2_PIC_PIE_ARCH_SUPPORTS + bool + default y + # Microblaze glibc toolchains don't work with PIC/PIE enabled + depends on !BR2_microblaze + # Nios2 toolchains produce non working binaries with -fPIC + depends on !BR2_nios2 + +config BR2_PIC_PIE + bool "Build code with PIC/PIE" + depends on BR2_PIC_PIE_ARCH_SUPPORTS + depends on BR2_SHARED_LIBS + depends on BR2_TOOLCHAIN_SUPPORTS_PIE + help + Generate Position-Independent Code (PIC) and link + Position-Independent Executables (PIE). + +comment "PIC/PIE needs a toolchain w/ PIE" + depends on BR2_PIC_PIE_ARCH_SUPPORTS + depends on BR2_SHARED_LIBS + depends on !BR2_TOOLCHAIN_SUPPORTS_PIE + +choice + bool "Stack Smashing Protection" + default BR2_SSP_ALL if BR2_ENABLE_SSP # legacy + depends on BR2_TOOLCHAIN_HAS_SSP + help + Enable stack smashing protection support using GCC's + -fstack-protector option family. + + See + http://www.linuxfromscratch.org/hints/downloads/files/ssp.txt + for details. + + Note that this requires the toolchain to have SSP support. + This is always the case for glibc and eglibc toolchain, but is + optional in uClibc toolchains. + +config BR2_SSP_NONE + bool "None" + help + Disable stack-smashing protection. + +config BR2_SSP_REGULAR + bool "-fstack-protector" + help + Emit extra code to check for buffer overflows, such as stack + smashing attacks. This is done by adding a guard variable to + functions with vulnerable objects. This includes functions + that call alloca, and functions with buffers larger than 8 + bytes. The guards are initialized when a function is entered + and then checked when the function exits. If a guard check + fails, an error message is printed and the program exits. + +config BR2_SSP_STRONG + bool "-fstack-protector-strong" + depends on BR2_TOOLCHAIN_HAS_SSP_STRONG + help + Like -fstack-protector but includes additional functions to be + protected - those that have local array definitions, or have + references to local frame addresses. + + -fstack-protector-strong officially appeared in gcc 4.9, but + some vendors have backported -fstack-protector-strong to older + versions of gcc. + +config BR2_SSP_ALL + bool "-fstack-protector-all" + help + Like -fstack-protector except that all functions are + protected. This option might have a significant performance + impact on the compiled binaries. + +endchoice + +config BR2_SSP_OPTION + string + default "-fstack-protector" if BR2_SSP_REGULAR + default "-fstack-protector-strong" if BR2_SSP_STRONG + default "-fstack-protector-all" if BR2_SSP_ALL + +comment "Stack Smashing Protection needs a toolchain w/ SSP" + depends on !BR2_TOOLCHAIN_HAS_SSP + +choice + bool "RELRO Protection" + depends on BR2_SHARED_LIBS + help + Enable a link-time protection know as RELRO (RELocation Read + Only) which helps to protect from certain type of exploitation + techniques altering the content of some ELF sections. + +config BR2_RELRO_NONE + bool "None" + help + Disables Relocation link-time protections. + +config BR2_RELRO_PARTIAL + bool "Partial" + help + This option makes the dynamic section not writeable after + initialization (with almost no performance penalty). + +config BR2_RELRO_FULL + bool "Full" + depends on BR2_PIC_PIE_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_SUPPORTS_PIE + select BR2_PIC_PIE + help + This option includes the partial configuration, but also marks + the GOT as read-only at the cost of initialization time during + program loading, i.e every time an executable is started. + +comment "RELRO Full needs a toolchain w/ PIE" + depends on BR2_PIC_PIE_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_SUPPORTS_PIE + +endchoice + +comment "RELocation Read Only (RELRO) needs shared libraries" + depends on !BR2_SHARED_LIBS + +choice + bool "Buffer-overflow Detection (FORTIFY_SOURCE)" + depends on BR2_TOOLCHAIN_USES_GLIBC + depends on !BR2_OPTIMIZE_0 + 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. + + NOTE: This feature requires an optimization level of s/1/2/3/g + + Support for this feature has been present since GCC 4.x. + +config BR2_FORTIFY_SOURCE_NONE + bool "None" + help + Disables additional checks to detect buffer-overflows. + +config BR2_FORTIFY_SOURCE_1 + bool "Conservative" + # gcc bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61164 + depends on !BR2_TOOLCHAIN_BUILDROOT || BR2_TOOLCHAIN_GCC_AT_LEAST_6 + help + This option sets _FORTIFY_SOURCE to 1 and only introduces + checks that shouldn't change the behavior of conforming + programs. Adds checks at compile-time only. + +config BR2_FORTIFY_SOURCE_2 + bool "Aggressive" + # gcc bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61164 + depends on !BR2_TOOLCHAIN_BUILDROOT || BR2_TOOLCHAIN_GCC_AT_LEAST_6 + help + This option sets _FORTIFY_SOURCES to 2 and some more + checking is added, but some conforming programs might fail. + Also adds checks at run-time (detected buffer overflow + terminates the program) + +endchoice + +comment "Fortify Source needs a glibc toolchain and optimization" + depends on (!BR2_TOOLCHAIN_USES_GLIBC || BR2_OPTIMIZE_0) +endmenu + +source "toolchain/Config.in" + +source "system/Config.in" + +source "linux/Config.in" + +source "package/Config.in" + +source "fs/Config.in" + +source "boot/Config.in" + +source "package/Config.in.host" + +source "Config.in.legacy" + +# br2-external menus definitions +source "$BR2_BASE_DIR/.br2-external.in.menus" diff --git a/Config.in.legacy b/Config.in.legacy new file mode 100644 index 00000000..530c2ba8 --- /dev/null +++ b/Config.in.legacy @@ -0,0 +1,4076 @@ +# +# Config.in.legacy - support for backward compatibility +# +# When an existing Config.in symbol is removed, it should be added again in +# this file, and take appropriate action to approximate backward compatibility. +# This will make the transition for the user more convenient. +# +# When adding legacy symbols to this file, add them to the front. The oldest +# symbols will be removed again after about two years. +# +# The symbol should be copied as-is from the place where it was previously +# defined, but the help text should be removed or replaced with something that +# explains how to fix it. +# +# For bool options, the old symbol should select BR2_LEGACY, so that the user +# is informed at build-time about selected legacy options. +# If there is an equivalent (set of) new symbols, these should be select'ed by +# the old symbol for backwards compatibility. +# It is not possible to select an option that is part of a choice. In that +# case, the new option should use the old symbol as default. This requires a +# change outside of Config.in.legacy, and this should be clearly marked as such +# in a comment, so that removal of legacy options also include the removal of +# these external references. +# +# [Example: renaming a bool option that is part of a choice from FOO to BAR] +# original choice: +# choice +# prompt "Choose foobar" +# config BR2_FOO_1 +# bool "foobar 1" +# config BR2_FOO_2 +# bool "foobar 2" +# endchoice +# +# becomes: +# choice +# prompt "Choose foobar" +# default BR2_BAR_1 if BR2_FOO_1 # legacy +# default BR2_BAR_2 if BR2_FOO_2 # legacy +# config BR2_BAR_1 +# bool "foobar 1" +# config BR2_BAR_2 +# bool "foobar 2" +# endchoice +# +# and in Config.in.legacy: +# config BR2_FOO_1 +# bool "foobar 1 has been renamed" +# help +# +# # Note: BR2_FOO_1 is still referenced from package/foo/Config.in +# config BR2_FOO_2 +# bool "foobar 2 has been renamed" +# help +# +# # Note: BR2_FOO_2 is still referenced from package/foo/Config.in +# +# [End of example] +# +# For string options, it is not possible to directly select another symbol. In +# this case, a hidden wrap bool option has to be added, that defaults to y if +# the old string is not set at its default value. The wrap symbol should select +# BR2_LEGACY. +# If the original symbol has been renamed, the new symbol should use the value +# of the old symbol as default. Like for choice options, a comment should be +# added to flag that the symbol is still used in another file. +# +# [Example: renaming a string option from FOO to BAR] +# original symbol: +# config BR2_FOO_STRING +# string "Some foo string" +# +# becomes: +# config BR2_BAR_STRING +# string "Some bar string" +# default BR2_FOO_STRING if BR2_FOO_STRING != "" # legacy +# +# and in Config.in.legacy: +# config BR2_FOO_STRING +# string "The foo string has been renamed" +# help +# +# +# config BR2_FOO_STRING_WRAP +# bool +# default y if BR2_FOO_STRING != "" +# select BR2_LEGACY +# +# # Note: BR2_FOO_STRING is still referenced from package/foo/Config.in +# +# [End of example] + +config BR2_SKIP_LEGACY + bool + option env="SKIP_LEGACY" + +if !BR2_SKIP_LEGACY + +config BR2_LEGACY + bool + help + This option is selected automatically when your old .config + uses an option that no longer exists in current buildroot. In + that case, the build will fail. Look for config options which + are selected in the menu below: they no longer exist and + should be replaced by something else. + +# This comment fits exactly in a 80-column display +comment "Legacy detected: check the content of the menu below" + depends on BR2_LEGACY + +menu "Legacy config options" + +if BR2_LEGACY +comment "----------------------------------------------------" +comment "Your old configuration uses legacy options that no " +comment "longer exist in buildroot, as indicated in the menu " +comment "below. As long as these options stay selected, or in" +comment "case of string options are non-empty, the build " +comment "will fail. " +comment "* " +comment "Where possible, an automatic conversion from old to " +comment "new symbols has been performed. Before making any " +comment "change in this legacy menu, make sure to exit the " +comment "configuration editor a first time and save the " +comment "configuration. Otherwise, the automatic conversion " +comment "of symbols will be lost. " +comment "* " +comment "After this initial save, reopen the configuration " +comment "editor, inspect the options selected below, read " +comment "their help texts, and verify/update the new " +comment "configuration in the corresponding configuration " +comment "menus. When everything is ok, you can disable the " +comment "legacy options in the menu below. Once you have " +comment "disabled all legacy options, this text will " +comment "disappear and you will be able to start the build. " +comment "* " +comment "Note: legacy options older than 5 years have been " +comment "removed, and configuration files that still have " +comment "those options set, will fail to build, or run in " +comment "unpredictable ways. " +comment "----------------------------------------------------" +endif + +############################################################################### + +comment "Legacy options removed in 2021.02" + +config BR2_PACKAGE_SCONESERVER_HTTP_SCONESITE_IMAGE + bool "sconeserver http::sconesite::image removed" + select BR2_LEGACY + help + Sconeserver cannot be built with ImageMagick - it uses the + "transofrm" function which is removed from public API. + +config BR2_PACKAGE_XSERVER_XORG_SERVER_KDRIVE_EVDEV + bool "KDrive/TinyX evdev input driver removed" + select BR2_LEGACY + help + The evdev input driver in KDrive was removed. + +config BR2_PACKAGE_XSERVER_XORG_SERVER_KDRIVE_KBD + bool "KDrive/TinyX kbd input driver removed" + select BR2_LEGACY + help + The kbd input driver in KDrive was removed. + +config BR2_PACKAGE_XSERVER_XORG_SERVER_KDRIVE_MOUSE + bool "KDrive/TinyX mouse input driver removed" + select BR2_LEGACY + help + The mouse input driver in KDrive was removed. + +config BR2_PACKAGE_MPD_AUDIOFILE + bool "mpd audiofile support removed" + select BR2_LEGACY + help + The audiofile support was removed from mpd as audiofile is + affected by multiple CVEs and is not maintained anymore (no + release since 2013). + +config BR2_PACKAGE_AUDIOFILE + bool "audiofile package removed" + select BR2_LEGACY + help + The audiofile package was removed as it is affected by + multiple CVEs and is not maintained anymore (no release since + 2013). + +config BR2_BINUTILS_VERSION_2_33_X + bool "binutils 2.33.x has been removed" + select BR2_LEGACY + help + binutils 2.33.x has been removed, use a newer version. + +config BR2_PACKAGE_LIBUPNP18 + bool "libupnp18 package removed" + select BR2_LEGACY + select BR2_PACKAGE_LIBUPNP + help + Version 1.8.x of libupnp (i.e. libupnp18) has been removed + because it will never be fixed against CallStranger a.k.a. + CVE-2020-12695. The libupnp package (which has been updated to + version 1.14.x) has been selected instead. + +config BR2_PACKAGE_BOA + bool "boa package removed" + select BR2_LEGACY + help + The boa package was removed as it is affected by multiple + CVEs and is not maintained anymore (no release since 2005). + +config BR2_PACKAGE_LINUX_FIRMWARE_IMX_SDMA + bool "imx sdma firmware is provided by firmware-imx" + select BR2_LEGACY + select BR2_PACKAGE_FREESCALE_IMX + select BR2_PACKAGE_FIRMWARE_IMX + help + linux-firmware provide the same firmware as firmware-imx. + We prefer using firmware-imx as the only provider. + +config BR2_GDB_VERSION_8_2 + bool "gdb 8.2.x has been removed" + select BR2_LEGACY + help + gdb 8.2 support has been removed, you can use a newer + version such as 8.3 or more recent. + +config BR2_PACKAGE_HOST_RCW + bool "rcw package was renamed to qoriq-rcw" + select BR2_PACKAGE_HOST_QORIQ_RCW + select BR2_LEGACY + help + The rcw package was specific to the QorIQ platform, so it has + been renamed to qoriq-rcw, to leave room for other *-rcw + packages for other platforms. + +config BR2_KERNEL_HEADERS_5_9 + bool "kernel headers version 5.9.x are no longer supported" + select BR2_LEGACY + help + Version 5.9.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_KERNEL_HEADERS_5_8 + bool "kernel headers version 5.8.x are no longer supported" + select BR2_LEGACY + help + Version 5.8.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_powerpc_601 + bool "PowerPC 601 support removed" + select BR2_LEGACY + help + The support for the PowerPC 601 processors has been removed. + +config BR2_PACKAGE_TI_SGX_LIBGBM + bool "ti-sgx-libgbm support removed" + select BR2_LEGACY + help + TI has merged the ti-sgx-libgbm package with the ti-sgx-um + package + +config BR2_PACKAGE_IPSEC_TOOLS + bool "ipsec-tools package was removed" + select BR2_LEGACY + help + This package has been removed as it has security issues and + has been abandoned since 2014. + +comment "Legacy options removed in 2020.11" + +config BR2_PACKAGE_OPENCV + bool "opencv package was removed" + select BR2_LEGACY + help + This package has been removed, use opencv3 instead. + +config BR2_PACKAGE_LIBCROCO + bool "libcroco package was removed" + select BR2_LEGACY + help + This package has been removed as it is affected by several + security issues such as CVE-2020-12825 which will never be + fixed as libcroco has been archived. + +config BR2_PACKAGE_BELLAGIO + bool "bellagio package was removed" + select BR2_LEGACY + help + This package has been removed as it is not maintained anymore + (no release since 2011). + +config BR2_PACKAGE_SYSTEMD_JOURNAL_GATEWAY + bool "systemd-journal-gatewayd now in systemd-journal-remote" + select BR2_LEGACY + select BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE + help + All system journal remote programs are now enabled using + BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE. + +config BR2_TARGET_UBOOT_BOOT_SCRIPT + bool "u-boot script generation was moved" + select BR2_LEGACY + select BR2_PACKAGE_HOST_UBOOT_TOOLS + select BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT + help + Migrated U-Boot script generation to uboot-tools + +# Note: BR2_TARGET_UBOOT_BOOT_SCRIPT_SOURCE is still referenced from +# package/uboot-tools/Config.in +config BR2_TARGET_UBOOT_BOOT_SCRIPT_SOURCE + string "The uboot script source string has been renamed" + depends on BR2_TARGET_UBOOT_BOOT_SCRIPT + help + Migrated U-Boot script generation to uboot-tools. + New option is named + BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE + +config BR2_TARGET_UBOOT_ENVIMAGE + bool "u-boot env generation was moved" + select BR2_LEGACY + select BR2_PACKAGE_HOST_UBOOT_TOOLS + select BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE + help + Migrated U-Boot env generation to uboot-tools + +# Note: BR2_TARGET_UBOOT_ENVIMAGE_SOURCE is still referenced from +# package/uboot-tools/Config.in +config BR2_TARGET_UBOOT_ENVIMAGE_SOURCE + string "The uboot env image source string has been renamed" + depends on BR2_TARGET_UBOOT_ENVIMAGE + help + Migrated U-Boot env generation to uboot-tools. + New option is named + BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SOURCE + +# Note: BR2_TARGET_UBOOT_ENVIMAGE_SIZE is still referenced from +# package/uboot-tools/Config.in +config BR2_TARGET_UBOOT_ENVIMAGE_SIZE + string "The uboot env image size string has been renamed" + depends on BR2_TARGET_UBOOT_ENVIMAGE + help + Migrated U-Boot env generation to uboot-tools. + New option is named BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SIZE + +config BR2_TARGET_UBOOT_ENVIMAGE_REDUNDANT + bool "u-boot env generation was moved" + depends on BR2_TARGET_UBOOT_ENVIMAGE + select BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_REDUNDANT + help + Migrated U-Boot env generation to uboot-tools + +config BR2_PACKAGE_KISMET_CLIENT + bool "kismet client support was removed" + select BR2_LEGACY + help + Kismet client support was removed since version 2019-04-R1. + +config BR2_PACKAGE_KISMET_DRONE + bool "kismet drone support was removed" + select BR2_LEGACY + help + Kismet drone support was removed since version 2019-04-R1. + +config BR2_GCC_VERSION_7_X + bool "gcc 7.x support removed" + select BR2_LEGACY + help + Support for gcc version 7.x has been removed. The current + default version (9.x or later) has been selected instead. + +config BR2_PACKAGE_GST1_VALIDATE + bool "gst1-validate was moved to gst1-devtools" + select BR2_PACKAGE_GST1_DEVTOOLS + select BR2_LEGACY + help + This package has been removed, use gst1-devtools instead. + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_YADIF + bool "gst1-plugins-bad yadif plugin was removed" + select BR2_LEGACY + select BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_DEINTERLACE + help + This plugin was removed with gst1-plugins-bad-1.18.0, the + same functionality has moved to gst1-plugins-good + deinterlace plugin (method=yadif). + +config BR2_PACKAGE_GQVIEW + bool "gqview package was removed" + select BR2_LEGACY + help + This package has been removed as it is not maintained anymore + (no release since 2006). + +config BR2_PACKAGE_WESTON_IMX + bool "weston-imx package was removed" + select BR2_LEGACY + help + This package has been removed, use weston instead. + +config BR2_KERNEL_HEADERS_5_7 + bool "kernel headers version 5.7.x are no longer supported" + select BR2_LEGACY + help + Version 5.7.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_PACKAGE_TINYHTTPD + bool "tinyhttpd package removed" + select BR2_LEGACY + help + The tinyhttpd package was removed as it is affected by + CVE-2002-1819 and is not maintained anymore (no release since + 2001). + +config BR2_PACKAGE_XSERVER_XORG_SERVER_AIGLX + bool "X.org Enable AIGLX Extension" + select BR2_LEGACY + help + AIGLX Extension was removed in X.org X server version 1.19.0 + +config BR2_PACKAGE_AMD_CATALYST + bool "amd-catalyst" + select BR2_LEGACY + help + Current X.org server is incompatible with this driver. + +config BR2_PACKAGE_NVIDIA_TEGRA23 + bool "nvidia-tegra23 package removed" + select BR2_LEGACY + help + Current X.org server is incompatible with this driver. + +config BR2_GDB_VERSION_8_1 + bool "gdb 8.1.x has been removed" + select BR2_LEGACY + help + The 8.1.x version of gdb has been removed. Use a newer + version instead. + +comment "Legacy options removed in 2020.08" + +config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_AMD64 + bool "toolchain-external-codesourcery-amd64 removed" + select BR2_LEGACY + help + The CodeSourcery toolchain for AMD64, in version 2016.11 was + dropped, due to it using a too old gcc 6.2.0 compiler which + caused issues compiling a number of recent packages + (e.g. Boost). CodeSourcery has stopped making newer versions + of this toolchain publicly available, so it was not possible + to update it. + +config BR2_KERNEL_HEADERS_5_6 + bool "kernel headers version 5.6.x are no longer supported" + select BR2_LEGACY + help + Version 5.6.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_KERNEL_HEADERS_5_5 + bool "kernel headers version 5.5.x are no longer supported" + select BR2_LEGACY + help + Version 5.5.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_BINUTILS_VERSION_2_31_X + bool "binutils version 2.31.1 support removed" + select BR2_LEGACY + help + Support for binutils version 2.31.1 has been removed. The + current default version (2.33.1 or later) has been selected + instead. + +config BR2_PACKAGE_KODI_PERIPHERAL_STEAMCONTROLLER + bool "kodi-peripheral-steamcontroller package was removed" + select BR2_LEGACY + help + This package is broken. + +comment "Legacy options removed in 2020.05" + +config BR2_PACKAGE_WIRINGPI + bool "wiringpi package removed" + select BR2_LEGACY + help + The author of wiringpi has deprecated the package, and + completely removed the git tree that was serving the + sources, with this message: + Please look for alternatives for wiringPi + +config BR2_PACKAGE_PYTHON_PYCRYPTO + bool "python-pycrypto package removed" + select BR2_LEGACY + help + This package has been removed, use python-pycryptodomex + instead. + +config BR2_PACKAGE_MTDEV2TUIO + bool "mtdev2tuio package removed" + select BR2_LEGACY + help + The mtdev2tuio package was removed as it breaks the builds + every now and then and is not maintained upstream. + +config BR2_PACKAGE_EZXML + bool "ezxml package removed" + select BR2_LEGACY + help + The ezXML package was removed as it is affected by several + CVEs and is not maintained anymore (no release since 2006). + +config BR2_PACKAGE_COLLECTD_LVM + bool "lvm support in collectd was removed" + select BR2_LEGACY + help + collectd removed LVM plugin, liblvm2app has been deprecated + +config BR2_PACKAGE_PYTHON_PYASN + bool "duplicate python-pyasn1 package removed" + select BR2_LEGACY + select BR2_PACKAGE_PYTHON_PYASN1 + help + This package was a duplicate of python-pyasn1. + +config BR2_PACKAGE_PYTHON_PYASN_MODULES + bool "duplicate python-pyasn1-modules package removed" + select BR2_LEGACY + select BR2_PACKAGE_PYTHON_PYASN1_MODULES + help + This package was a duplicate of python-pyasn1-modules. + +config BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_10K_QCA6174 + bool "duplicate QCA6174 firmware symbol removed" + select BR2_LEGACY + select BR2_PACKAGE_LINUX_FIRMWARE_QUALCOMM_6174 + help + This config symbol duplicates existing symbol for QCA6174 + firmware. + +config BR2_PACKAGE_QT5CANVAS3D + bool "qt5canvas3d was removed" + select BR2_LEGACY + help + This Qt5 module was removed by the upstream Qt project since + Qt 5.13, so the corresponding Buildroot package was removed + as well. + +config BR2_PACKAGE_KODI_LIBTHEORA + bool "libtheora support in Kodi was removed" + select BR2_LEGACY + help + Kodi does not need libtheora + +config BR2_PACKAGE_CEGUI06 + bool "BR2_PACKAGE_CEGUI06 was renamed" + select BR2_PACKAGE_CEGUI + select BR2_LEGACY + help + The BR2_PACKAGE_CEGUI06 config symbol was renamed to + BR2_PACKAGE_CEGUI. + +config BR2_GCC_VERSION_5_X + bool "gcc 5.x support removed" + select BR2_LEGACY + help + Support for gcc version 5.x has been removed. The current + default version (8.x or later) has been selected instead. + +comment "Legacy options removed in 2020.02" + +config BR2_PACKAGE_JAMVM + bool "jamvm removed" + select BR2_LEGACY + help + JamVM has not had a release since 2014 and is unmaintained. + +config BR2_PACKAGE_CLASSPATH + bool "classpath removed" + select BR2_LEGACY + help + GNU Classpath package was removed. The last upstream + release was in 2012 and there hasn't been a commit + since 2016. + +config BR2_PACKAGE_QT5_VERSION_5_6 + bool "qt 5.6 support removed" + select BR2_LEGACY + help + Support for Qt 5.6 is EOL and has been removed. The current + version (5.12 or later) has been selected instead. + +config BR2_PACKAGE_CURL + bool "BR2_PACKAGE_CURL was renamed" + select BR2_PACKAGE_LIBCURL_CURL + select BR2_LEGACY + help + The BR2_PACKAGE_CURL config symbol was renamed to + BR2_PACKAGE_LIBCURL_CURL. + +config BR2_PACKAGE_GSTREAMER + bool "gstreamer-0.10 removed" + select BR2_LEGACY + help + Gstreamer-0.10 package was removed. It has been deprecated + upstream since 2012, and is missing a lot of features and + fixes compared to gstreamer-1.x. + +config BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_GSTREAMER_PLUGINS + bool "nvidia-tegra23 binaries gstreamer 0.10.x support removed" + select BR2_LEGACY + help + Gstreamer 0.10.x is no longer available in Buildroot, so + neither is the support in nvidia-tegra23 binaries. + +config BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_NV_SAMPLE_APPS + bool "nvidia-tegra23 binaries sample apps removed" + select BR2_LEGACY + help + Gstreamer 0.10.x is no longer available in Buildroot, so + neither is the support in nvidia-tegra23 binaries. + +config BR2_PACKAGE_FREERDP_GSTREAMER + bool "freerdp gstreamer 0.10.x support removed" + select BR2_LEGACY + help + Gstreamer 0.10.x is no longer available in Buildroot, so + neither is the support in freerdp. + +config BR2_PACKAGE_OPENCV3_WITH_GSTREAMER + bool "opencv3 gstreamer 0.10.x support removed" + select BR2_LEGACY + help + Gstreamer 0.10.x is no longer available in Buildroot, so + neither is the support in opencv3. + +config BR2_PACKAGE_OPENCV_WITH_GSTREAMER + bool "opencv gstreamer 0.10.x support removed" + select BR2_LEGACY + help + Gstreamer 0.10.x is no longer available in Buildroot, so + neither is the support in opencv. + +config BR2_PACKAGE_LIBPLAYER + bool "libplayer package was removed" + select BR2_LEGACY + help + The libplayer package was removed. The latest release is + from 2010 and none of the backends are available in + Buildroot any more. + +config BR2_GCC_VERSION_OR1K + bool "gcc 5.x fork for or1k has been removed" + select BR2_LEGACY + help + Support for gcc 5.x for or1k has been removed. The current + default version (9.x or later) has been selected instead. + +config BR2_PACKAGE_BLUEZ_UTILS + bool "bluez-utils was removed" + select BR2_LEGACY + select BR2_PACKAGE_BLUEZ5_UTILS if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4 \ + && BR2_TOOLCHAIN_HAS_SYNC_4 + help + The bluez-utils (BlueZ 4.x) package was removed as it is + deprecated since a long time. As an alternative, the + bluez5-utils (BlueZ 5.x) has been automatically selected in + your configuration. + +config BR2_PACKAGE_GADGETFS_TEST + bool "gadgetfs-test was removed" + select BR2_LEGACY + help + The gadgetfs-test package was removed. Gadgetfs has been + deprecated in favour of functionfs. Consider using + gadget-tool (gt) instead. + +config BR2_PACKAGE_FIS + bool "fis was removed" + select BR2_LEGACY + help + The fis package was removed. + +config BR2_PACKAGE_REFPOLICY_POLICY_VERSION + string "refpolicy policy version" + help + The refpolicy policy version option has been moved to the + libsepol package. + +config BR2_PACKAGE_REFPOLICY_POLICY_VERSION_WRAP + bool + default y if BR2_PACKAGE_REFPOLICY_POLICY_VERSION != "" + select BR2_LEGACY + +config BR2_PACKAGE_CELT051 + bool "celt051 package was removed" + select BR2_LEGACY + select BR2_PACKAGE_OPUS + help + The celt051 package was removed as it is now obsolete since + the CELT codec has been merged into the IETF Opus codec. As + a result, the opus package has been automatically selected + in your configuration. + +config BR2_PACKAGE_WIREGUARD + bool "wireguard package renamed" + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10 + select BR2_LEGACY + select BR2_PACKAGE_WIREGUARD_LINUX_COMPAT if BR2_LINUX_KERNEL + select BR2_PACKAGE_WIREGUARD_TOOLS + help + The wireguard package has been renamed to wireguard-tools + for the userspace tooling and wireguard-linux-compat for the + kernel side for legacy (<5.6) kernels to match upstream. + +config BR2_PACKAGE_PERL_NET_PING + bool "perl-net-ping was removed" + select BR2_LEGACY + help + Net::Ping is a Perl core module (ie. bundled with perl). + +config BR2_PACKAGE_PERL_MIME_BASE64 + bool "perl-mime-base64 was removed" + select BR2_LEGACY + help + MIME::Base64 is a Perl core module (ie. bundled with perl). + +config BR2_PACKAGE_PERL_DIGEST_MD5 + bool "perl-digest-md5 was removed" + select BR2_LEGACY + help + Digest::MD5 is a Perl core module (ie. bundled with perl). + +config BR2_PACKAGE_ERLANG_P1_ICONV + bool "erlang-p1-iconv has been removed" + select BR2_LEGACY + help + The erlang-p1-iconv package was no longer used by ejabberd, + and was no longer maintained upstream, so it was removed. + +config BR2_KERNEL_HEADERS_5_3 + bool "kernel headers version 5.3.x are no longer supported" + select BR2_LEGACY + help + Version 5.3.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_PACKAGE_PYTHON_SCAPY3K + bool "python-scapy3k is replaced by python-scapy" + select BR2_LEGACY + select BR2_PACKAGE_PYTHON_SCAPY + help + python-scapy3k has been deprecated, since python-scapy has + gained Python 3 support. Use BR2_PACKAGE_PYTHON_SCAPY + instead. + +config BR2_BINUTILS_VERSION_2_30_X + bool "binutils version 2.30 support removed" + select BR2_LEGACY + help + Support for binutils version 2.30 has been removed. The + current default version (2.31 or later) has been selected + instead. + +config BR2_PACKAGE_RPI_USERLAND_START_VCFILED + bool "rpi-userland start vcfiled was removed" + select BR2_LEGACY + help + The vcfiled support was removed upstream. + +comment "Legacy options removed in 2019.11" + +config BR2_PACKAGE_OPENVMTOOLS_PROCPS + bool "openvmtools' procps support was removed" + select BR2_LEGACY + help + Upstream stopped supporting this option a while ago. + +config BR2_PACKAGE_ALLJOYN + bool "alljoyn was removed" + select BR2_LEGACY + help + The alljoyn framework is dead + +config BR2_PACKAGE_ALLJOYN_BASE + bool "alljoyn-base was removed" + select BR2_LEGACY + help + The alljoyn framework is dead + +config BR2_PACKAGE_ALLJOYN_BASE_CONTROLPANEL + bool "alljoyn-base control panel was removed" + select BR2_LEGACY + help + The alljoyn framework is dead + +config BR2_PACKAGE_ALLJOYN_BASE_NOTIFICATION + bool "alljoyn-base notification was removed" + select BR2_LEGACY + help + The alljoyn framework is dead + +config BR2_PACKAGE_ALLJOYN_BASE_ONBOARDING + bool "alljoyn-base onboarding was removed" + select BR2_LEGACY + help + The alljoyn framework is dead + +config BR2_PACKAGE_ALLJOYN_TCL_BASE + bool "alljoyn-tcl-base was removed" + select BR2_LEGACY + help + The alljoyn framework is dead + +config BR2_PACKAGE_ALLJOYN_TCL + bool "alljoyn-tcl was removed" + select BR2_LEGACY + help + The alljoyn framework is dead + +config BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS + string "toolchain-external extra libs option has been renamed" + help + The option BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS has + been renamed to BR2_TOOLCHAIN_EXTRA_LIBS. + +config BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS_WRAP + bool + default y if BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS != "" + select BR2_LEGACY + +config BR2_PACKAGE_PYTHON_PYSNMP_APPS + bool "python-pysnmp-apps was removed" + select BR2_LEGACY + select BR2_PACKAGE_SNMPCLITOOLS + help + Following upstream changes, the python-pysnmp-apps package + has been removed, and snmpclitools should be used as a + replacement. + +config BR2_KERNEL_HEADERS_5_2 + bool "kernel headers version 5.2.x are no longer supported" + select BR2_LEGACY + help + Version 5.2.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_TARGET_RISCV_PK + bool "riscv-pk was removed" + select BR2_LEGACY + help + The RISC-V Proxy Kernel (pk) and Berkley Boot Loader (BBL) + have been replaced with OpenSBI. + +config BR2_PACKAGE_SQLITE_STAT3 + bool "sqlite stat3 support was removed" + select BR2_LEGACY + help + Upstream removed the support for stat3. + +config BR2_KERNEL_HEADERS_5_1 + bool "kernel headers version 5.1.x are no longer supported" + select BR2_LEGACY + help + Version 5.1.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_PACKAGE_DEVMEM2 + bool "devmem2 package was removed" + select BR2_LEGACY + help + Use the the Busybox devmem utility, instead, which provides + the same functionality. + +config BR2_PACKAGE_USTR + bool "ustr package removed" + select BR2_LEGACY + help + The 'ustr' package was only used by SELinux libsemanage, but + since SELinux 2.7, ustr is no longer used. Therefore, we + removed this package from Buildroot. + +config BR2_PACKAGE_KODI_SCREENSAVER_PLANESTATE + bool "kodi-screensaver-planestate package was removed" + select BR2_LEGACY + help + This package is incompatible with Kodi 18.x. + +config BR2_PACKAGE_KODI_VISUALISATION_WAVEFORHUE + bool "kodi-visualisation-waveforhue package was removed" + select BR2_LEGACY + help + This package is incompatible with Kodi 18.x. + +config BR2_PACKAGE_KODI_AUDIODECODER_OPUS + bool "kodi-audiodecoder-opus package was removed" + select BR2_LEGACY + help + This package is incompatible with Kodi 18.x. + +config BR2_PACKAGE_MESA3D_OSMESA + bool "mesa OSMesa option renamed" + select BR2_PACKAGE_MESA3D_OSMESA_CLASSIC if BR2_PACKAGE_MESA3D_DRI_DRIVER_SWRAST + select BR2_LEGACY + help + The option was renamed in order to match the naming used + by the meson buildsystem. + +config BR2_PACKAGE_HOSTAPD_DRIVER_RTW + bool "hostapd rtl871xdrv driver removed" + select BR2_LEGACY + help + Since the update of hostapd to 2.9, the patch provided for + the rtl871xdrv no longer works, although it + applies. Moreover, AP support for Realtek chips is broken + anyway in kernels > 4.9. Therefore, this option has been + removed. + +config BR2_PACKAGE_WPA_SUPPLICANT_DBUS_NEW + bool "new dbus support option in wpa_supplicant was renamed" + select BR2_PACKAGE_WPA_SUPPLICANT_DBUS if BR2_TOOLCHAIN_HAS_THREADS + select BR2_LEGACY + help + The new dbus support option was renamed. + +config BR2_PACKAGE_WPA_SUPPLICANT_DBUS_OLD + bool "old dbus support in wpa_supplicant was removed" + select BR2_LEGACY + help + The old dbus support was removed. + +comment "Legacy options removed in 2019.08" + +config BR2_TARGET_TS4800_MBRBOOT + bool "ts4800-mbrboot package was removed" + select BR2_LEGACY + help + The defconfig for the TS4800 platform has been removed, so + the ts4800-mbrboot package, containing the boot code for + this specific platform has been removed as welL. + +config BR2_PACKAGE_LIBAMCODEC + bool "liamcodec package was removed" + select BR2_LEGACY + help + Support for odroidc2 based systems was removed, making the + libamcodec package useless. + +config BR2_PACKAGE_ODROID_SCRIPTS + bool "odroid-scripts package was removed" + select BR2_LEGACY + help + Support for odroidc2 based systems was removed, making the + odroid-scripts package useless. + +config BR2_PACKAGE_ODROID_MALI + bool "odroid-mali package was removed" + select BR2_LEGACY + help + Support for odroidc2 based systems was removed, making the + odroid-mali package useless. + +config BR2_PACKAGE_KODI_PLATFORM_AML + bool "Kodi AMLogic support was removed" + select BR2_LEGACY + help + Support for AMLogic was removed due to the removal of the + odroidc2 defconfig. + +config BR2_GCC_VERSION_6_X + bool "gcc 6.x support removed" + select BR2_LEGACY + help + Support for gcc version 6.x has been removed. The current + default version (8.x or later) has been selected instead. + +config BR2_GCC_VERSION_4_9_X + bool "gcc 4.9.x support removed" + select BR2_LEGACY + help + Support for gcc version 4.9.x has been removed. The current + default version (8.x or later) has been selected instead. + +config BR2_GDB_VERSION_7_12 + bool "gdb 7.12.x has been removed" + select BR2_LEGACY + help + The 7.12.x version of gdb has been removed. Use a newer + version instead. + +config BR2_PACKAGE_XAPP_MKFONTDIR + bool "mkfontdir is now included in xapp_mkfontscale" + select BR2_PACKAGE_XAPP_MKFONTSCALE + select BR2_LEGACY + help + xapp_mkfontscale now includes the mkfontdir script previously + distributed separately for compatibility with older X11 + versions. + +config BR2_GDB_VERSION_8_0 + bool "gdb 8.0.x has been removed" + select BR2_LEGACY + help + The 8.0.x version of gdb has been removed. Use a newer + version instead. + +config BR2_KERNEL_HEADERS_4_20 + bool "kernel headers version 4.20.x are no longer supported" + select BR2_LEGACY + help + Version 4.20.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_KERNEL_HEADERS_5_0 + bool "kernel headers version 5.0.x are no longer supported" + select BR2_LEGACY + help + Version 5.0.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +comment "Legacy options removed in 2019.05" + +config BR2_CSKY_DSP + bool "C-SKY DSP support removed" + select BR2_LEGACY + help + C-SKY DSP instruction support for ck810 / ck807 was removed, + as it was no longer supported in C-SKY gcc. Perhaps the VDSP + instructions should be used instead, using the BR2_CSKY_VDSP + option. + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_COMPOSITOR + bool "compositor moved to gst1-plugins-base" + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_COMPOSITOR + select BR2_LEGACY + help + The gst1-plugins-bad compositor plugin has moved + to gst1-plugins-base. + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_IQA + bool "gst-plugins-bad IQA option was removed" + select BR2_LEGACY + help + The gst1-plugins-bad IQA option was removed. + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_OPENCV + bool "gst-plugins-bad opencv option was removed" + select BR2_LEGACY + help + The gst1-plugins-bad opencv option was removed because + buildroot does not have the opencv_contrib package which + is required for the bgsegm module which gst1-plugins-bad + now requires along with opencv3. + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_STEREO + bool "stereo was merged into audiofx in gst1-plugins-good" + select BR2_LEGACY + select BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_AUDIOFX + help + The gst1-plugins-bad stereo plugin has merged with the + gst1-plugins-base audiofx plugin. + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VCD + bool "gst-plugins-bad vcd plugin was removed." + select BR2_LEGACY + help + The gst1-plugins-bad vcd plugin was removed. + +config BR2_PACKAGE_LUNIT + bool "lunit package removed" + select BR2_LEGACY + select BR2_PACKAGE_LUA_LUNITX + help + The lunit package was removed in favor of its fork lunitx, + which supports all versions of Lua. + +config BR2_PACKAGE_FFMPEG_FFSERVER + bool "ffmpeg ffserver removed" + select BR2_LEGACY + help + On July 10th, 2016, ffserver program has been dropped. + +config BR2_PACKAGE_LIBUMP + bool "libump package removed" + select BR2_LEGACY + help + The libump package was removed, it was only used as a + dependency of sunxi-mali, which itself was removed. + +config BR2_PACKAGE_SUNXI_MALI + bool "sunxi-mali package removed" + select BR2_LEGACY + select BR2_PACKAGE_SUNXI_MALI_MAINLINE + help + The sunxi-mali package was removed, as the + sunxi-mali-mainline package replaces it for mainline + kernels on Allwinner platforms. + +config BR2_BINUTILS_VERSION_2_29_X + bool "binutils version 2.29 support removed" + select BR2_LEGACY + help + Support for binutils version 2.29 has been removed. The + current default version (2.31 or later) has been selected + instead. + +config BR2_BINUTILS_VERSION_2_28_X + bool "binutils version 2.28 support removed" + select BR2_LEGACY + help + Support for binutils version 2.28 has been removed. The + current default version (2.31 or later) has been selected + instead. + +config BR2_PACKAGE_GST_PLUGINS_BAD_PLUGIN_APEXSINK + bool "gst-plugins-bad apexsink option removed" + select BR2_LEGACY + help + The gst-plugins-bad apexsink option was removed. + +comment "Legacy options removed in 2019.02" + +config BR2_PACKAGE_QT + bool "qt package removed" + select BR2_LEGACY + help + The qt package was removed. + +config BR2_PACKAGE_QTUIO + bool "qtuio package removed" + select BR2_LEGACY + help + The qtuio package was removed. + +config BR2_PACKAGE_PINENTRY_QT4 + bool "pinentry-qt4 option removed" + select BR2_LEGACY + help + The pinentry-qt4 option was removed. + +config BR2_PACKAGE_POPPLER_QT + bool "poppler qt option removed" + select BR2_LEGACY + help + The poppler qt option was removed. + +config BR2_PACKAGE_OPENCV3_WITH_QT + bool "opencv3 qt backend option removed" + select BR2_LEGACY + help + The opencv3 qt backend option was removed. + +config BR2_PACKAGE_OPENCV_WITH_QT + bool "opencv qt backend option removed" + select BR2_LEGACY + help + The opencv qt backend option was removed. + +config BR2_PACKAGE_AMD_CATALYST_CCCLE + bool "catalyst control center option removed" + select BR2_LEGACY + help + The AMD Catalyst Control Center option was removed. + +config BR2_PACKAGE_SDL_QTOPIA + bool "sdl qtopia video driver option removed" + select BR2_LEGACY + help + The SDL QTopia video driver option was removed. + +config BR2_PACKAGE_PYTHON_PYQT + bool "python-pyqt package removed" + select BR2_LEGACY + help + The python-pyqt package was removed. Consider python-pyqt5 + instead. + +config BR2_PACKAGE_LUACRYPTO + bool "luacrypto package removed" + select BR2_LEGACY + help + The luacrypto package was removed. Consider luaossl instead. + +config BR2_PACKAGE_TN5250 + bool "tn5250 package removed" + select BR2_LEGACY + help + The tn5250 package was removed. + +config BR2_PACKAGE_BOOST_SIGNALS + bool "Boost signals removed" + select BR2_LEGACY + help + Its removal was announced in boost 1.68 and its deprecation + was announced in 1.54. Users are encouraged to use Signals2 + instead. + +config BR2_PACKAGE_FFTW_PRECISION_SINGLE + bool "single" + select BR2_LEGACY + select BR2_PACKAGE_FFTW_SINGLE + help + This option has been removed in favor of + BR2_PACKAGE_FFTW_SINGLE. + +config BR2_PACKAGE_FFTW_PRECISION_DOUBLE + bool "double" + select BR2_LEGACY + select BR2_PACKAGE_FFTW_DOUBLE + help + This option has been removed in favor of + BR2_PACKAGE_FFTW_DOUBLE. + +config BR2_PACKAGE_FFTW_PRECISION_LONG_DOUBLE + bool "long double" + depends on !(BR2_TOOLCHAIN_BUILDROOT_UCLIBC && \ + (BR2_arm || BR2_mips || BR2_mipsel)) + select BR2_LEGACY + select BR2_PACKAGE_FFTW_LONG_DOUBLE + help + This option has been removed in favor of + BR2_PACKAGE_FFTW_LONG_DOUBLE. + +config BR2_PACKAGE_FFTW_PRECISION_QUAD + bool "quad" + depends on (BR2_i386 || BR2_x86_64) && BR2_USE_WCHAR + select BR2_LEGACY + select BR2_PACKAGE_FFTW_QUAD + help + This option has been removed in favor of + BR2_PACKAGE_FFTW_QUAD. + +config BR2_PACKAGE_LUA_5_2 + bool "Lua 5.2.x version removed" + select BR2_LEGACY + select BR2_PACKAGE_LUA_5_3 + help + The Lua 5.2.x version was removed. + +config BR2_TARGET_GENERIC_PASSWD_MD5 + bool "target passwd md5 format support has been removed" + select BR2_LEGACY + help + The default has been moved to SHA256 and all C libraries + now support that method by default + +comment "Legacy options removed in 2018.11" + +config BR2_TARGET_XLOADER + bool "xloader has been removed" + select BR2_LEGACY + help + The package has been removed as u-boot SPL provides + similar functionality + +config BR2_PACKAGE_TIDSP_BINARIES + bool "tidsp-binaries package removed" + select BR2_LEGACY + help + The tidsp-binaries package was removed. + +config BR2_PACKAGE_DSP_TOOLS + bool "dsp-tools package removed" + select BR2_LEGACY + help + The dsp-tools package was removed. + +config BR2_PACKAGE_GST_DSP + bool "gst-dsp package removed" + select BR2_LEGACY + help + The gst-dsp package was removed. + +config BR2_PACKAGE_BOOTUTILS + bool "bootutils package removed" + select BR2_LEGACY + help + The bootutils package was removed. + +config BR2_PACKAGE_EXPEDITE + bool "expedite package has been removed" + select BR2_LEGACY + help + expedite is not actively maintained anymore. + https://sourceforge.net/p/enlightenment/mailman/message/36428571 + +config BR2_PACKAGE_MESA3D_OPENGL_TEXTURE_FLOAT + bool "mesa3d opengl texture float option removed" + select BR2_LEGACY + help + mesa3d now unconditionally enables floating-point textures, + as the corresponding patent has expired. + +config BR2_KERNEL_HEADERS_4_10 + bool "kernel headers version 4.10.x are no longer supported" + select BR2_LEGACY + help + Version 4.10.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_KERNEL_HEADERS_4_11 + bool "kernel headers version 4.11.x are no longer supported" + select BR2_LEGACY + help + Version 4.11.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_KERNEL_HEADERS_4_12 + bool "kernel headers version 4.12.x are no longer supported" + select BR2_LEGACY + help + Version 4.12.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_KERNEL_HEADERS_4_13 + bool "kernel headers version 4.13.x are no longer supported" + select BR2_LEGACY + help + Version 4.13.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_KERNEL_HEADERS_4_15 + bool "kernel headers version 4.15.x are no longer supported" + select BR2_LEGACY + help + Version 4.15.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_KERNEL_HEADERS_4_17 + bool "kernel headers version 4.17.x are no longer supported" + select BR2_LEGACY + help + Version 4.17.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_PACKAGE_LIBNFTNL_XML + bool "libnftl no longer supports XML output" + select BR2_LEGACY + help + libnftnl removed integration with libmxml. + +config BR2_KERNEL_HEADERS_3_2 + bool "kernel headers version 3.2.x are no longer supported" + select BR2_LEGACY + help + Version 3.2.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_KERNEL_HEADERS_4_1 + bool "kernel headers version 4.1.x are no longer supported" + select BR2_LEGACY + help + Version 4.1.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_KERNEL_HEADERS_4_16 + bool "kernel headers version 4.16.x are no longer supported" + select BR2_LEGACY + help + Version 4.16.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_KERNEL_HEADERS_4_18 + bool "kernel headers version 4.18.x are no longer supported" + select BR2_LEGACY + help + Version 4.18.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +############################################################################### +comment "Legacy options removed in 2018.08" + +config BR2_PACKAGE_DOCKER_ENGINE_STATIC_CLIENT + bool "docker-engine static client option renamed" + select BR2_LEGACY + select BR2_PACKAGE_DOCKER_CLI_STATIC + help + BR2_PACKAGE_DOCKER_ENGINE_STATIC_CLIENT has been renamed to + BR2_PACKAGE_DOCKER_CLI_STATIC, following the package split of + docker-engine and docker-cli. + +config BR2_PACKAGE_XPROTO_APPLEWMPROTO + bool "xproto-applewmproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-applewmproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_BIGREQSPROTO + bool "xproto-bigreqsproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-bigreqsproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_COMPOSITEPROTO + bool "xproto-compositeproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-compositeproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_DAMAGEPROTO + bool "xproto-dameproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-dameproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_DMXPROTO + bool "xproto-dmxproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-dmxproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_DRI2PROTO + bool "xproto-dri2proto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-dri2proto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_DRI3PROTO + bool "xproto-dri3proto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-dri3proto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_FIXESPROTO + bool "xproto-fixesproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-fixesproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_FONTCACHEPROTO + bool "xproto-fontcacheproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-fontcacheproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_FONTSPROTO + bool "xproto-fontsproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-fontsproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_GLPROTO + bool "xproto-glproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-glproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_INPUTPROTO + bool "xproto-inputproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-inputproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_KBPROTO + bool "xproto-kbproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-kbproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_PRESENTPROTO + bool "xproto-presentproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-presentproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_RANDRPROTO + bool "xproto-randrproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-randrproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_RECORDPROTO + bool "xproto-recordproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-recordproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_RENDERPROTO + bool "xproto-renderproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-renderproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_RESOURCEPROTO + bool "xproto-resourceproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-resourceproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_SCRNSAVERPROTO + bool "xproto-scrnsaverprot package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-scrnsaverprot package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_VIDEOPROTO + bool "xproto-videoproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-videoproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_WINDOWSWMPROTO + bool "xproto-windowswmproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-windowswmproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_XCMISCPROTO + bool "xproto-xcmiscproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-xcmiscproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_XEXTPROTO + bool "xproto-xextproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-xextproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_XF86BIGFONTPROTO + bool "xproto-xf86bigfontproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-xf86bigfontproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_XF86DGAPROTO + bool "xproto-xf86dgaproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-xf86dgaproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_XF86DRIPROTO + bool "xproto-xf86driproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-xf86driproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_XF86VIDMODEPROTO + bool "xproto-xf86vidmodeproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-xf86vidmodeproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_XINERAMAPROTO + bool "xproto-xineramaproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-xineramaproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_XPROTO + bool "xproto-xproto package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-xproto package has been replaced by the + xorgproto package, which combines all xproto_* packages. + +config BR2_PACKAGE_XPROTO_XPROXYMANAGEMENTPROTOCOL + bool "xproto-xproxymanagementprotocol package replaced by xorgproto" + select BR2_LEGACY + select BR2_PACKAGE_XORGPROTO + help + The xproto-xproxymanagementprotocol package has been + replaced by the xorgproto package, which combines all + xproto_* packages. + +config BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_OPENGL + bool "gst1-plugins-bad opengl option moved to gst1-plugins-base" + select BR2_LEGACY + select BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_OPENGL + help + The opengl option has been moved from gst1-plugins-bad to + gst1-plugins-base. + +config BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_GLES2 + bool "gst1-plugins-bad gles2 option moved to gst1-plugins-base" + select BR2_LEGACY + select BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_GLES2 + help + The gles2 option has been moved from gst1-plugins-bad to + gst1-plugins-base. + +config BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_GLX + bool "gst1-plugins-bad glx option moved to gst1-plugins-base" + select BR2_LEGACY + select BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_GLX + help + The glx option has been moved from gst1-plugins-bad to + gst1-plugins-base. + +config BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_EGL + bool "gst1-plugins-bad egl option moved to gst1-plugins-base" + select BR2_LEGACY + select BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_EGL + help + The egl option has been moved from gst1-plugins-bad to + gst1-plugins-base. + +config BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_X11 + bool "gst1-plugins-bad x11 option moved to gst1-plugins-base" + select BR2_LEGACY + select BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_X11 + help + The x11 option has been moved from gst1-plugins-bad to + gst1-plugins-base. + +config BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_WAYLAND + bool "gst1-plugins-bad wayland option moved to gst1-plugins-base" + select BR2_LEGACY + select BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_WAYLAND + help + The wayland option has been moved from gst1-plugins-bad to + gst1-plugins-base. + +config BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_DISPMANX + bool "gst1-plugins-bad dispmanx option moved to gst1-plugins-base" + select BR2_LEGACY + select BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_DISPMANX + help + The dispmanx option has been moved from gst1-plugins-mad to + gst1-plugins-base. + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_AUDIOMIXER + bool "gst1-plugins-bad audiomixer option moved to gst1-plugins-base" + select BR2_LEGACY + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIOMIXER + help + The audiomixer option has been moved from gst1-plugins-bad to + gst1-plugins-base. + +config BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_LAME + bool "gst1-plugins-ugly lame option moved to gst1-plugins-good" + select BR2_LEGACY + select BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_LAME + help + The lame option has been moved from gst1-plugins-ugly to + gst1-plugins-good. + +config BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_MPG123 + bool "gst1-plugins-ugly mpg123 option moved to gst1-plugins-good" + select BR2_LEGACY + select BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_MPG123 + help + The mpg123 option has been moved from gst1-plugins-ugly to + gst1-plugins-good. + +config BR2_GDB_VERSION_7_11 + bool "gdb 7.11 has been removed" + select BR2_LEGACY + help + The 7.11 version of gdb has been removed. Use a newer version + instead. + +config BR2_GDB_VERSION_7_10 + bool "gdb 7.10 has been removed" + select BR2_LEGACY + help + The 7.10 version of gdb has been removed. Use a newer version + instead. + +############################################################################### +comment "Legacy options removed in 2018.05" + +config BR2_PACKAGE_MEDIAART_BACKEND_NONE + bool "libmediaart none backend option renamed" + select BR2_LEGACY + help + For consistency reasons, the option + BR2_PACKAGE_MEDIAART_BACKEND_NONE has been renamed to + BR2_PACKAGE_LIBMEDIAART_BACKEND_NONE + +config BR2_PACKAGE_MEDIAART_BACKEND_GDK_PIXBUF + bool "libmediaart gdk-pixbuf backend option renamed" + select BR2_LEGACY + help + For consistency reasons, the option + BR2_PACKAGE_MEDIAART_BACKEND_GDK_PIXBUF has been renamed to + BR2_PACKAGE_LIBMEDIAART_BACKEND_GDK_PIXBUF + +config BR2_PACKAGE_MEDIAART_BACKEND_GDK_PIXBUF + bool "libmediaart qt backend option renamed" + select BR2_LEGACY + help + For consistency reasons, the option + BR2_PACKAGE_MEDIAART_BACKEND_QT has been renamed to + BR2_PACKAGE_LIBMEDIAART_BACKEND_QT + +# Note: BR2_PACKAGE_TI_SGX_AM335X is still referenced from +# package/ti-sgx-km/Config.in +config BR2_PACKAGE_TI_SGX_AM335X + bool "ti-sgx-km AM335X option renamed" + select BR2_LEGACY + help + For consistency reasons, the option + BR2_PACKAGE_TI_SGX_AM335X has been renamed to + BR2_PACKAGE_TI_SGX_KM_AM335X. + +# Note: BR2_PACKAGE_TI_SGX_AM437X is still referenced from +# package/ti-sgx-km/Config.in +config BR2_PACKAGE_TI_SGX_AM437X + bool "ti-sgx-km AM437X option renamed" + select BR2_LEGACY + help + For consistency reasons, the option + BR2_PACKAGE_TI_SGX_AM437X has been renamed to + BR2_PACKAGE_TI_SGX_KM_AM437X. + +# Note: BR2_PACKAGE_TI_SGX_AM4430 is still referenced from +# package/ti-sgx-km/Config.in +config BR2_PACKAGE_TI_SGX_AM4430 + bool "ti-sgx-km AM4430 option renamed" + select BR2_LEGACY + help + For consistency reasons, the option + BR2_PACKAGE_TI_SGX_AM4430 has been renamed to + BR2_PACKAGE_TI_SGX_KM_AM4430. + +# Note: BR2_PACKAGE_TI_SGX_AM5430 is still referenced from +# package/ti-sgx-km/Config.in +config BR2_PACKAGE_TI_SGX_AM5430 + bool "ti-sgx-km AM5430 option renamed" + select BR2_LEGACY + help + For consistency reasons, the option + BR2_PACKAGE_TI_SGX_AM5430 has been renamed to + BR2_PACKAGE_TI_SGX_KM_AM5430. + +config BR2_PACKAGE_JANUS_AUDIO_BRIDGE + bool "janus-gateway audio-bridge option renamed" + select BR2_LEGACY + select BR2_PACKAGE_JANUS_GATEWAY_AUDIO_BRIDGE + help + For consistency reasons, the janus-gateway option + BR2_PACKAGE_JANUS_AUDIO_BRIDGE has been renamed to + BR2_PACKAGE_JANUS_GATEWAY_AUDIO_BRIDGE. + +config BR2_PACKAGE_JANUS_ECHO_TEST + bool "janus-gateway echo-test option renamed" + select BR2_LEGACY + select BR2_PACKAGE_JANUS_GATEWAY_ECHO_TEST + help + For consistency reasons, the janus-gateway option + BR2_PACKAGE_JANUS_ECHO_TEST has been renamed to + BR2_PACKAGE_JANUS_GATEWAY_ECHO_TEST. + +config BR2_PACKAGE_JANUS_RECORDPLAY + bool "janus-gateway recordplay option renamed" + select BR2_LEGACY + select BR2_PACKAGE_JANUS_GATEWAY_RECORDPLAY + help + For consistency reasons, the janus-gateway option + BR2_PACKAGE_JANUS_RECORDPLAY has been renamed to + BR2_PACKAGE_JANUS_GATEWAY_RECORDPLAY. + +config BR2_PACKAGE_JANUS_SIP_GATEWAY + bool "janus-gateway sip-gateway option renamed" + select BR2_LEGACY + select BR2_PACKAGE_JANUS_GATEWAY_SIP_GATEWAY + help + For consistency reasons, the janus-gateway option + BR2_PACKAGE_JANUS_SIP_GATEWAY has been renamed to + BR2_PACKAGE_JANUS_GATEWAY_SIP_GATEWAY. + +config BR2_PACKAGE_JANUS_STREAMING + bool "janus-gateway streaming option renamed" + select BR2_LEGACY + select BR2_PACKAGE_JANUS_GATEWAY_STREAMING + help + For consistency reasons, the janus-gateway option + BR2_PACKAGE_JANUS_STREAMING has been renamed to + BR2_PACKAGE_JANUS_GATEWAY_STREAMING. + +config BR2_PACKAGE_JANUS_TEXT_ROOM + bool "janus-gateway text-room option renamed" + select BR2_LEGACY + select BR2_PACKAGE_JANUS_GATEWAY_TEXT_ROOM + help + For consistency reasons, the janus-gateway option + BR2_PACKAGE_JANUS_TEXT_ROOM has been renamed to + BR2_PACKAGE_JANUS_GATEWAY_TEXT_ROOM. + +config BR2_PACKAGE_JANUS_VIDEO_CALL + bool "janus-gateway video-call option renamed" + select BR2_LEGACY + select BR2_PACKAGE_JANUS_GATEWAY_VIDEO_CALL + help + For consistency reasons, the janus-gateway option + BR2_PACKAGE_JANUS_VIDEO_CALL has been renamed to + BR2_PACKAGE_JANUS_GATEWAY_VIDEO_CALL. + +config BR2_PACKAGE_JANUS_VIDEO_ROOM + bool "janus-gateway video-room option renamed" + select BR2_LEGACY + select BR2_PACKAGE_JANUS_GATEWAY_VIDEO_ROOM + help + For consistency reasons, the janus-gateway option + BR2_PACKAGE_JANUS_VIDEO_ROOM has been renamed to + BR2_PACKAGE_JANUS_GATEWAY_VIDEO_ROOM. + +config BR2_PACKAGE_JANUS_MQTT + bool "janus-gateway mqtt option renamed" + select BR2_LEGACY + select BR2_PACKAGE_JANUS_GATEWAY_MQTT + help + For consistency reasons, the janus-gateway option + BR2_PACKAGE_JANUS_MQTT has been renamed to + BR2_PACKAGE_JANUS_GATEWAY_MQTT. + +config BR2_PACKAGE_JANUS_RABBITMQ + bool "janus-gateway rabbitmq option renamed" + select BR2_LEGACY + select BR2_PACKAGE_JANUS_GATEWAY_RABBITMQ + help + For consistency reasons, the janus-gateway option + BR2_PACKAGE_JANUS_RABBITMQ has been renamed to + BR2_PACKAGE_JANUS_GATEWAY_RABBITMQ. + +config BR2_PACKAGE_JANUS_REST + bool "janus-gateway rest option renamed" + select BR2_LEGACY + select BR2_PACKAGE_JANUS_GATEWAY_REST + help + For consistency reasons, the janus-gateway option + BR2_PACKAGE_JANUS_REST has been renamed to + BR2_PACKAGE_JANUS_GATEWAY_REST. + +config BR2_PACKAGE_JANUS_UNIX_SOCKETS + bool "janus-gateway unix-sockets option renamed" + select BR2_LEGACY + select BR2_PACKAGE_JANUS_GATEWAY_UNIX_SOCKETS + help + For consistency reasons, the janus-gateway option + BR2_PACKAGE_JANUS_UNIX_SOCKETS has been renamed to + BR2_PACKAGE_JANUS_GATEWAY_UNIX_SOCKETS. + +config BR2_PACKAGE_JANUS_WEBSOCKETS + bool "janus-gateway websockets option renamed" + select BR2_LEGACY + select BR2_PACKAGE_JANUS_GATEWAY_WEBSOCKETS + help + For consistency reasons, the janus-gateway option + BR2_PACKAGE_JANUS_WEBSOCKETS has been renamed to + BR2_PACKAGE_JANUS_GATEWAY_WEBSOCKETS. + +config BR2_PACKAGE_IPSEC_SECCTX_DISABLE + bool "ipsec-tools security context disable option renamed" + select BR2_LEGACY + help + For consistency reasons, the option + BR2_PACKAGE_IPSEC_SECCTX_DISABLE was renamed to + BR2_PACKAGE_IPSEC_TOOLS_SECCTX_DISABLE. + +config BR2_PACKAGE_IPSEC_SECCTX_ENABLE + bool "ipsec-tools SELinux security context enable option renamed" + select BR2_LEGACY + help + For consistency reasons, the option + BR2_PACKAGE_IPSEC_SECCTX_ENABLE was renamed to + BR2_PACKAGE_IPSEC_TOOLS_SECCTX_ENABLE. + +config BR2_PACKAGE_IPSEC_SECCTX_KERNEL + bool "ipsec-tools kernel security context enable option renamed" + select BR2_LEGACY + help + For consistency reasons, the option + BR2_PACKAGE_IPSEC_SECCTX_KERNEL was renamed to + BR2_PACKAGE_IPSEC_TOOLS_SECCTX_KERNEL. + +config BR2_PACKAGE_LIBTFDI_CPP + bool "libftdi C++ bindings option renamed" + select BR2_LEGACY + select BR2_PACKAGE_LIBFTDI_CPP + help + The option BR2_PACKAGE_LIBTFDI_CPP was renamed to + BR2_PACKAGE_LIBFTDI_CPP in order to fix a typo in the option + name. + +config BR2_PACKAGE_JQUERY_UI_THEME_BLACK_TIE + bool "jquery-ui-themes option black-tie renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + black-tie theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_BLACK_TIE to + BR2_PACKAGE_JQUERY_UI_THEMES_BLACK_TIE. + +config BR2_PACKAGE_JQUERY_UI_THEME_BLITZER + bool "jquery-ui-themes option blitzer renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + blitzer theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_BLITZER to + BR2_PACKAGE_JQUERY_UI_THEMES_BLITZER. + +config BR2_PACKAGE_JQUERY_UI_THEME_CUPERTINO + bool "jquery-ui-themes option cupertino renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + cupertino theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_CUPERTINO to + BR2_PACKAGE_JQUERY_UI_THEMES_CUPERTINO. + +config BR2_PACKAGE_JQUERY_UI_THEME_DARK_HIVE + bool "jquery-ui-themes option dark-hive renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + dark-hive theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_DARK_HIVE to + BR2_PACKAGE_JQUERY_UI_THEMES_DARK_HIVE. + +config BR2_PACKAGE_JQUERY_UI_THEME_DOT_LUV + bool "jquery-ui-themes option dot-luv renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + dot-luv theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_DOT_LUV to + BR2_PACKAGE_JQUERY_UI_THEMES_DOT_LUV. + +config BR2_PACKAGE_JQUERY_UI_THEME_EGGPLANT + bool "jquery-ui-themes option eggplant renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + eggplant theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_EGGPLANT to + BR2_PACKAGE_JQUERY_UI_THEMES_EGGPLANT. + +config BR2_PACKAGE_JQUERY_UI_THEME_EXCITE_BIKE + bool "jquery-ui-themes option excite-bike renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + excite-bike theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_EXCITE_BIKE to + BR2_PACKAGE_JQUERY_UI_THEMES_EXCITE_BIKE. + +config BR2_PACKAGE_JQUERY_UI_THEME_FLICK + bool "jquery-ui-themes option flick renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + flick theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_FLICK to + BR2_PACKAGE_JQUERY_UI_THEMES_FLICK. + +config BR2_PACKAGE_JQUERY_UI_THEME_HOT_SNEAKS + bool "jquery-ui-themes option hot-sneaks renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + hot-sneaks theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_HOT_SNEAKS to + BR2_PACKAGE_JQUERY_UI_THEMES_HOT_SNEAKS. + +config BR2_PACKAGE_JQUERY_UI_THEME_HUMANITY + bool "jquery-ui-themes option humanity renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + humanity theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_HUMANITY to + BR2_PACKAGE_JQUERY_UI_THEMES_HUMANITY. + +config BR2_PACKAGE_JQUERY_UI_THEME_LE_FROG + bool "jquery-ui-themes option le-frog renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + le-frog theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_LE_FROG to + BR2_PACKAGE_JQUERY_UI_THEMES_LE_FROG. + +config BR2_PACKAGE_JQUERY_UI_THEME_MINT_CHOC + bool "jquery-ui-themes option mint-choc renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + mint-choc theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_MINT_CHOC to + BR2_PACKAGE_JQUERY_UI_THEMES_MINT_CHOC. + +config BR2_PACKAGE_JQUERY_UI_THEME_OVERCAST + bool "jquery-ui-themes option overcast renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + overcast theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_OVERCAST to + BR2_PACKAGE_JQUERY_UI_THEMES_OVERCAST. + +config BR2_PACKAGE_JQUERY_UI_THEME_PEPPER_GRINDER + bool "jquery-ui-themes option pepper-grinder renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + pepper-grinder theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_PEPPER_GRINDER to + BR2_PACKAGE_JQUERY_UI_THEMES_PEPPER_GRINDER. + +config BR2_PACKAGE_JQUERY_UI_THEME_REDMOND + bool "jquery-ui-themes option redmond renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + redmond theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_REDMOND to + BR2_PACKAGE_JQUERY_UI_THEMES_REDMOND. + +config BR2_PACKAGE_JQUERY_UI_THEME_SMOOTHNESS + bool "jquery-ui-themes option smoothness renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + smoothness theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_SMOOTHNESS to + BR2_PACKAGE_JQUERY_UI_THEMES_SMOOTHNESS. + +config BR2_PACKAGE_JQUERY_UI_THEME_SOUTH_STREET + bool "jquery-ui-themes option south-street renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + south-street theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_SOUTH_STREET to + BR2_PACKAGE_JQUERY_UI_THEMES_SOUTH_STREET. + +config BR2_PACKAGE_JQUERY_UI_THEME_START + bool "jquery-ui-themes option start renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + start theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_START to + BR2_PACKAGE_JQUERY_UI_THEMES_START. + +config BR2_PACKAGE_JQUERY_UI_THEME_SUNNY + bool "jquery-ui-themes option sunny renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + sunny theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_SUNNY to + BR2_PACKAGE_JQUERY_UI_THEMES_SUNNY. + +config BR2_PACKAGE_JQUERY_UI_THEME_SWANKY_PURSE + bool "jquery-ui-themes option swanky-purse renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + swanky-purse theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_SWANKY_PURSE to + BR2_PACKAGE_JQUERY_UI_THEMES_SWANKY_PURSE. + +config BR2_PACKAGE_JQUERY_UI_THEME_TRONTASTIC + bool "jquery-ui-themes option trontastic renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + trontastic theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_TRONTASTIC to + BR2_PACKAGE_JQUERY_UI_THEMES_TRONTASTIC. + +config BR2_PACKAGE_JQUERY_UI_THEME_UI_DARKNESS + bool "jquery-ui-themes option ui-darkness renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + ui-darkness theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_UI_DARKNESS to + BR2_PACKAGE_JQUERY_UI_THEMES_UI_DARKNESS. + +config BR2_PACKAGE_JQUERY_UI_THEME_UI_LIGHTNESS + bool "jquery-ui-themes option ui-lightness renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + ui-lightness theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_UI_LIGHTNESS to + BR2_PACKAGE_JQUERY_UI_THEMES_UI_LIGHTNESS. + +config BR2_PACKAGE_JQUERY_UI_THEME_VADER + bool "jquery-ui-themes option vader renamed" + select BR2_LEGACY + help + For consistency reasons, the jquery-ui-themes option for the + vader theme has been renamed from + BR2_PACKAGE_JQUERY_UI_THEME_VADER to + BR2_PACKAGE_JQUERY_UI_THEMES_VADER. + +config BR2_PACKAGE_BLUEZ5_PLUGINS_HEALTH + bool "bluez5-utils health plugin option renamed" + select BR2_LEGACY + select BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_HEALTH + help + For consistency reasons, the option + BR2_PACKAGE_BLUEZ5_PLUGINS_HEALTH has been renamed to + BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_HEALTH. + +config BR2_PACKAGE_BLUEZ5_PLUGINS_MIDI + bool "bluez5-utils midi plugin option renamed" + select BR2_LEGACY + select BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_MIDI + help + For consistency reasons, the option + BR2_PACKAGE_BLUEZ5_PLUGINS_MIDI has been renamed to + BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_MIDI. + +config BR2_PACKAGE_BLUEZ5_PLUGINS_NFC + bool "bluez5-utils nfc plugin option renamed" + select BR2_LEGACY + select BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_NFC + help + For consistency reasons, the option + BR2_PACKAGE_BLUEZ5_PLUGINS_NFC has been renamed to + BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_NFC. + +config BR2_PACKAGE_BLUEZ5_PLUGINS_SAP + bool "bluez5-utils sap plugin option renamed" + select BR2_LEGACY + select BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_SAP + help + For consistency reasons, the option + BR2_PACKAGE_BLUEZ5_PLUGINS_SAP has been renamed to + BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_SAP. + +config BR2_PACKAGE_BLUEZ5_PLUGINS_SIXAXIS + bool "bluez5-utils sixaxis plugin option renamed" + select BR2_LEGACY + select BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_SIXAXIS + help + For consistency reasons, the option + BR2_PACKAGE_BLUEZ5_PLUGINS_SIXAXIS has been renamed to + BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_SIXAXIS. + +config BR2_PACKAGE_TRANSMISSION_REMOTE + bool "transmission remote tool option removed" + select BR2_LEGACY + select BR2_PACKAGE_TRANSMISSION_DAEMON + help + Upstream does not provide a separate configure option for + the tool transmission-remote, it is built when the + transmission daemon has been enabled. Therefore, Buildroot + has automatically enabled BR2_PACKAGE_TRANSMISSION_DAEMON + for you. + +config BR2_PACKAGE_LIBKCAPI_APPS + bool "libkcapi test applications removed" + select BR2_LEGACY + select BR2_PACKAGE_LIBKCAPI_HASHER if !BR2_STATIC_LIBS + select BR2_PACKAGE_LIBKCAPI_RNGAPP + select BR2_PACKAGE_LIBKCAPI_SPEED + select BR2_PACKAGE_LIBKCAPI_TEST + help + Test applications (hasher, rng read, speed-test, test) now + have their own configuration options in the libkcapi menu. + +config BR2_PACKAGE_MPLAYER + bool "mplayer package removed" + select BR2_LEGACY + help + The mplayer package was removed. + +config BR2_PACKAGE_MPLAYER_MPLAYER + bool "mplayer package removed" + select BR2_LEGACY + help + The mplayer package was removed. + +config BR2_PACKAGE_MPLAYER_MENCODER + bool "mplayer package removed" + select BR2_LEGACY + help + The mplayer package was removed. + +config BR2_PACKAGE_LIBPLAYER_MPLAYER + bool "mplayer support in libplayer removed" + select BR2_LEGACY + help + The mplayer package was removed. + +config BR2_PACKAGE_IQVLINUX + bool "iqvlinux package removed" + select BR2_LEGACY + help + This package contained a kernel module from Intel, which + could only be used together with Intel userspace tools + provided under NDA, which also come with the same kernel + module. The copy of the kernel module available on + SourceForge is provided only to comply with the GPLv2 + requirement. Intel engineers were even surprised it even + built and were not willing to make any effort to fix their + tarball naming to contain a version number. Therefore, it + does not make sense for Buildroot to provide such a package. + + See https://sourceforge.net/p/e1000/bugs/589/ for the + discussion. + +config BR2_BINFMT_FLAT_SEP_DATA + bool "binfmt FLAT with separate code and data removed" + select BR2_LEGACY + help + This FLAT binary format was only used on Blackfin, which has + been removed. + +config BR2_bfin + bool "Blackfin architecture support removed" + select BR2_LEGACY + help + Following the removal of Blackfin support for the upstream + Linux kernel, Buildroot has removed support for this CPU + architecture. + +config BR2_PACKAGE_KODI_ADSP_BASIC + bool "kodi-adsp-basic package removed" + select BR2_LEGACY + help + kodi-adsp-basic is unmaintained + +config BR2_PACKAGE_KODI_ADSP_FREESURROUND + bool "kodi-adsp-freesurround package removed" + select BR2_LEGACY + help + kodi-adsp-freesurround is unmaintained + +############################################################################### +comment "Legacy options removed in 2018.02" + +config BR2_KERNEL_HEADERS_3_4 + bool "kernel headers version 3.4.x are no longer supported" + select BR2_LEGACY + help + Version 3.4.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_KERNEL_HEADERS_3_10 + bool "kernel headers version 3.10.x are no longer supported" + select BR2_LEGACY + help + Version 3.10.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_KERNEL_HEADERS_3_12 + bool "kernel headers version 3.12.x are no longer supported" + select BR2_LEGACY + help + Version 3.12.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_BINUTILS_VERSION_2_27_X + bool "binutils version 2.27 support removed" + select BR2_LEGACY + help + Support for binutils version 2.27 has been removed. The + current default version (2.29 or later) has been selected + instead. + +config BR2_PACKAGE_EEPROG + bool "eeprog package removed" + select BR2_LEGACY + select BR2_PACKAGE_I2C_TOOLS + select BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + The eeprog program is now provided by the i2c-tools package. + +config BR2_PACKAGE_GNUPG2_GPGV2 + bool "gnupg2 gpgv2 option removed" + select BR2_LEGACY + select BR2_PACKAGE_GNUPG2_GPGV + help + The gpgv2 executable is now named gpgv. The config option + has been renamed accordingly. + +config BR2_PACKAGE_IMX_GPU_VIV_APITRACE + bool "Vivante apitrace tool option removed" + select BR2_LEGACY + help + The apitrace tool for Vivante is not provided by the + imx-gpu-viv package any longer. + +config BR2_PACKAGE_IMX_GPU_VIV_G2D + bool "Vivante G2D libraries from imx-gpu-viv removed" + select BR2_LEGACY + select BR2_PACKAGE_IMX_GPU_G2D + help + The G2D libraries are now provided by the imx-gpu-g2d package. + +############################################################################### +comment "Legacy options removed in 2017.11" + +config BR2_PACKAGE_RFKILL + bool "rfkill package removed" + select BR2_LEGACY + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_RFKILL + help + The rfkill program is now provided by the util-linux package. + +config BR2_PACKAGE_UTIL_LINUX_RESET + bool "util-linux reset option removed" + select BR2_LEGACY + help + The util-linux package no longer offers a "reset" command. Use + either the reset command provided by BusyBox or select ncurses + programs, which will install a symlink from "tset" to reset. + +config BR2_PACKAGE_POLICYCOREUTILS_AUDIT2ALLOW + bool "policycoreutils audit2allow option removed" + select BR2_LEGACY + select BR2_PACKAGE_SELINUX_PYTHON + select BR2_PACKAGE_SELINUX_PYTHON_AUDIT2ALLOW + help + The policycoreutils package no longer offers audit2allow + as a option. This package has been moved into the + selinux-python package by the SELinux maintainers. + +config BR2_PACKAGE_POLICYCOREUTILS_RESTORECOND + bool "policycoreutils restorecond option removed" + select BR2_LEGACY + select BR2_PACKAGE_RESTORECOND + help + The policycoreutils package no longer offers restorecond + as a option. This package has been moved into a seperate + package maintained by the SELinux maintainers. + +config BR2_PACKAGE_SEPOLGEN + bool "sepolgen package has been removed" + select BR2_LEGACY + select BR2_PACKAGE_SELINUX_PYTHON + select BR2_PACKAGE_SELINUX_PYTHON_SEPOLGEN + help + Sepolgen is no longer a individual package, but instead has + been moved into the selinux-python package by the SELinux + maintainers. + +config BR2_PACKAGE_OPENOBEX_BLUEZ + bool "openobex bluez option removed" + select BR2_LEGACY + select BR2_PACKAGE_BLUEZ_UTILS + help + The OpenOBEX package no longer offers an option to enable or + disable BlueZ support. Instead, BlueZ support is always + included when the bluez5_utils or bluez_utils package is + selected. + +config BR2_PACKAGE_OPENOBEX_LIBUSB + bool "openobex libusb option removed" + select BR2_LEGACY + select BR2_PACKAGE_LIBUSB + help + The OpenOBEX package no longer offers an option to enable or + disable libusb support. Instead, USB support is always + included when the libusb package is selected. + +config BR2_PACKAGE_OPENOBEX_APPS + bool "openobex apps option removed" + select BR2_LEGACY + help + The OpenOBEX package no longer offers an option to enable or + disable apps support. + +config BR2_PACKAGE_OPENOBEX_SYSLOG + bool "openobex syslog option removed" + select BR2_LEGACY + help + The OpenOBEX package no longer offers an option to enable or + disable syslog support. + +config BR2_PACKAGE_OPENOBEX_DUMP + bool "openobex dump option removed" + select BR2_LEGACY + help + The OpenOBEX package no longer offers an option to enable or + disable dump support. + +config BR2_PACKAGE_AICCU + bool "aiccu utility removed" + select BR2_LEGACY + help + As the SixXS project has ceased its operation on 2017-06-06, + the AICCU utility has no use anymore and has been removed. + + https://www.sixxs.net/sunset/ + +config BR2_PACKAGE_UTIL_LINUX_LOGIN_UTILS + bool "util-linux login utilities option removed" + select BR2_LEGACY + select BR2_PACKAGE_UTIL_LINUX_LAST + select BR2_PACKAGE_UTIL_LINUX_LOGIN + select BR2_PACKAGE_UTIL_LINUX_RUNUSER + select BR2_PACKAGE_UTIL_LINUX_SU + select BR2_PACKAGE_UTIL_LINUX_SULOGIN + help + Login utilities (last, login, runuser, su, sulogin) now have + their own configuration options in the util-linux menu. + +############################################################################### +comment "Legacy options removed in 2017.08" + +config BR2_TARGET_GRUB + bool "grub (aka grub-legacy) has been removed" + select BR2_LEGACY + help + grub-legacy is no longer maintained, and no longer builds with + recent binutils versions. + + Use grub2 or syslinux instead. + +config BR2_PACKAGE_SIMICSFS + bool "simicsfs support removed" + select BR2_LEGACY + help + Support for simicsfs kernel driver that provides access to a + host computer's local filesystem when the target is + executing within a SIMICS simulation has been removed. + + Simics is now moving away from the simicsfs kernel module, + as the kernel module has required too much maintenance + work. Users should move to the user mode Simics agent + instead. + +config BR2_BINUTILS_VERSION_2_26_X + bool "binutils version 2.26 support removed" + select BR2_LEGACY + help + Support for binutils version 2.26 has been removed. The + current default version (2.28 or later) has been selected + instead. + +config BR2_XTENSA_OVERLAY_DIR + string "The BR2_XTENSA_OVERLAY_DIR option has been removed" + help + The BR2_XTENSA_OVERLAY_DIR has been removed in favour of + BR2_XTENSA_OVERLAY_FILE. You must now pass the complete + path to the overlay file, not to the directory containing + it. + +config BR2_XTENSA_OVERLAY_DIR_WRAP + bool + default y if BR2_XTENSA_OVERLAY_DIR != "" + select BR2_LEGACY + +config BR2_XTENSA_CUSTOM_NAME + string "The BR2_XTENSA_CUSTOM_NAME option has been removed" + help + The BR2_XTENSA_CUSTOM_NAME option has been removed. + +config BR2_XTENSA_CUSTOM_NAME_WRAP + bool + default y if BR2_XTENSA_CUSTOM_NAME != "" + select BR2_LEGACY + +config BR2_PACKAGE_HOST_MKE2IMG + bool "host mke2img has been removed" + select BR2_LEGACY + help + We now call mkfs directly to generate ext2/3/4 filesystem + image, so mke2img is no longer necessary. + +config BR2_TARGET_ROOTFS_EXT2_BLOCKS + int "exact size in blocks has been removed" + default 0 + help + This option has been removed in favor of + BR2_TARGET_ROOTFS_EXT2_SIZE. It has been set automatically + to the value you had before. Set to 0 here to remove the + warning. + +config BR2_TARGET_ROOTFS_EXT2_BLOCKS_WRAP + bool + default y if BR2_TARGET_ROOTFS_EXT2_BLOCKS != 0 && \ + BR2_TARGET_ROOTFS_EXT2_BLOCKS != 61440 # deprecated default value + select BR2_LEGACY + +# Note: BR2_TARGET_ROOTFS_EXT2_BLOCKS_WRAP still referenced in fs/ext2/Config.in + +config BR2_TARGET_ROOTFS_EXT2_EXTRA_INODES + int "ext2 extra inodes has been removed" if BR2_TARGET_ROOTFS_EXT2_INODES = 0 + default 0 + help + Buildroot now uses mkfs.ext2/3/4 to generate ext2/3/4 + images. It now automatically selects the number of inodes + based on the image size. The extra number of inodes can no + longer be provided; instead, provide the total number of + inodes needed in BR2_TARGET_ROOTFS_EXT2_INODES. + +config BR2_TARGET_ROOTFS_EXT2_EXTRA_INODES_WRAP + bool + default y if BR2_TARGET_ROOTFS_EXT2_EXTRA_INODES != 0 + select BR2_LEGACY + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_CDXAPARSE + bool "cdxaparse removed" + select BR2_LEGACY + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DATAURISRC + bool "dataurisrc moved to gstreamer1" + select BR2_LEGACY + help + Dataurisrc has moved to gstreamer core and is always built. + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DCCP + bool "dccp removed" + select BR2_LEGACY + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_HDVPARSE + bool "hdvparse removed" + select BR2_LEGACY + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MVE + bool "mve removed" + select BR2_LEGACY + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_NUVDEMUX + bool "nuvdemux removed" + select BR2_LEGACY + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_PATCHDETECT + bool "patchdetect removed" + select BR2_LEGACY + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SDI + bool "sdi removed" + select BR2_LEGACY + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_TTA + bool "tta removed" + select BR2_LEGACY + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VIDEOMEASURE + bool "videomeasure removed" + select BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_IQA + select BR2_LEGACY + help + videomeasure plugin has been removed and has been replaced by + iqa, which has automatically been enabled. + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_APEXSINK + bool "apexsink removed" + select BR2_LEGACY + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SDL + bool "sdl removed" + select BR2_LEGACY + +config BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_MAD + bool "mad (*.mp3 audio) removed" + select BR2_LEGACY + +config BR2_STRIP_none + bool "Strip command 'none' has been removed" + select BR2_LEGACY + help + The strip command choice has been changed into a single + boolean option. Please check that the new setting is + correct (in the "Build options" sub-menu) + +config BR2_PACKAGE_BEECRYPT_CPP + bool "C++ support removed in beecrypt" + select BR2_LEGACY + help + Support for C++ depends on icu. The beecrypt package is + incompatible with icu 59+. + +config BR2_PACKAGE_SPICE_CLIENT + bool "spice client support removed" + select BR2_LEGACY + help + Spice client support has been removed upstream. The + functionality now lives in the spice-gtk widget and + virt-viewer. + +config BR2_PACKAGE_SPICE_GUI + bool "spice gui support removed" + select BR2_LEGACY + help + Spice gui support has been removed upstream. The + functionality now lives in the spice-gtk widget and + virt-viewer. + +config BR2_PACKAGE_SPICE_TUNNEL + bool "spice network redirection removed" + select BR2_LEGACY + help + Spice network redirection, aka tunnelling has been removed + upstream. + +config BR2_PACKAGE_INPUT_TOOLS + bool "input-tools removed" + select BR2_LEGACY + select BR2_PACKAGE_LINUXCONSOLETOOLS + help + input-tools has been removed, it is replaced by + linuxconsoletools, which has automatically been enabled. + +config BR2_PACKAGE_INPUT_TOOLS_INPUTATTACH + bool "inputattach moved to linuxconsoletools" + select BR2_LEGACY + select BR2_PACKAGE_LINUXCONSOLETOOLS + select BR2_PACKAGE_LINUXCONSOLETOOLS_INPUTATTACH + help + input-tools has been removed, inputattach is now part + of linuxconsoletools, which has automatically been + enabled. + +config BR2_PACKAGE_INPUT_TOOLS_JSCAL + bool "jscal moved to linuxconsoletools" + select BR2_LEGACY + select BR2_PACKAGE_LINUXCONSOLETOOLS + select BR2_PACKAGE_LINUXCONSOLETOOLS_JOYSTICK + help + input-tools has been removed, jscal is now part + of linuxconsoletools, which has automatically been + enabled. + +config BR2_PACKAGE_INPUT_TOOLS_JSTEST + bool "jstest moved to linuxconsoletools" + select BR2_LEGACY + select BR2_PACKAGE_LINUXCONSOLETOOLS + select BR2_PACKAGE_LINUXCONSOLETOOLS_JOYSTICK + help + input-tools has been removed, jstest is now part + of linuxconsoletools, which has automatically been + enabled. + +config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH + bool "SH Sourcery toolchain has been removed" + select BR2_LEGACY + help + The Sourcery CodeBench toolchain for the sh architecture has + been removed, since it uses glibc older than 2.17 that + requires -lrt to link executables using clock_* system calls. + This makes this toolchain difficult to maintain over time. + +config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_X86 + bool "x86 Sourcery toolchain has been removed" + select BR2_LEGACY + help + The Sourcery CodeBench toolchain for the x86 architecture has + been removed, since it uses glibc older than 2.17 that + requires -lrt to link executables using clock_* system calls. + This makes this toolchain difficult to maintain over time. + +config BR2_GCC_VERSION_4_8_X + bool "gcc 4.8.x support removed" + select BR2_LEGACY + help + Support for gcc version 4.8.x has been removed. The current + default version (5.x or later) has been selected instead. + +############################################################################### +comment "Legacy options removed in 2017.05" + +config BR2_PACKAGE_SUNXI_MALI_R2P4 + bool "sunxi-mali r2p4 removed" + select BR2_LEGACY + help + sunxi-mali libMali for r2p4 Mali kernel module has been + removed since the libump package only provides libUMP.so.3. + libMali for r2p4 Mali kernel module requires libUMP.so.2. + +config BR2_PACKAGE_NODEJS_MODULES_COFFEESCRIPT + bool "CoffeeScript option has been removed" + select BR2_LEGACY + help + The option to enable NodeJS CoffeeScript has been removed. + To continue using it, add "coffee-script" to + BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL. + +config BR2_PACKAGE_NODEJS_MODULES_EXPRESS + bool "Express web application framework option has been removed" + select BR2_LEGACY + help + The option to enable the NodeJS Express web application + framework has been removed. To continue using it, add + "express" to BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL. + +config BR2_PACKAGE_BLUEZ5_UTILS_GATTTOOL + bool "bluez5_utils gatttool install option removed" + select BR2_PACKAGE_BLUEZ5_UTILS_DEPRECATED + help + The option to install gatttool specifically has been removed. + Since version 5.44 gatttool is in the list of deprecated + tools. The option to build and install deprecated tools has + been automatically enabled. + +config BR2_PACKAGE_OPENOCD_FT2XXX + bool "openocd ft2232 support has been removed" + select BR2_PACKAGE_OPENOCD_FTDI + select BR2_LEGACY + help + FT2232 support in OpenOCD has been removed, it's replaced by + FDTI support, which has automatically been enabled. + +config BR2_PACKAGE_KODI_RTMPDUMP + bool "kodi rtmp has been removed" + select BR2_LEGACY + select BR2_PACKAGE_KODI_INPUTSTREAM_RTMP + help + Internal rtmp support was removed from Kodi. + +config BR2_PACKAGE_KODI_VISUALISATION_FOUNTAIN + bool "kodi-visualisation-fountain has been removed" + select BR2_LEGACY + help + According to upstream 'the visualization is not currently + in a working shape.' + +config BR2_PACKAGE_PORTMAP + bool "portmap has been removed" + select BR2_LEGACY + select BR2_PACKAGE_RPCBIND + help + The portmap upstream tarball is removed, no releases since + ten years and latest change in upstream git in 2014. + You should better use rpcbind as a RPC portmapper. + +config BR2_BINUTILS_VERSION_2_25_X + bool "binutils version 2.25 support removed" + select BR2_LEGACY + help + Support for binutils version 2.25 has been removed. The + current default version (2.27 or later) has been selected + instead. + +config BR2_TOOLCHAIN_BUILDROOT_INET_RPC + bool "uclibc RPC support has been removed" + select BR2_LEGACY + help + uClibc-ng removed internal RPC implementation in 1.0.23. You + should use libtirpc instead. + +config BR2_TARGET_ROOTFS_EXT2_EXTRA_BLOCKS + int "extra size in blocks has been removed" + default 0 + help + Since the support for auto calculation of the filesystem size + has been removed, this option is now useless and must be 0. + You may want to check that BR2_TARGET_ROOTFS_EXT2_BLOCKS + matchs your needs. + +config BR2_TARGET_ROOTFS_EXT2_EXTRA_BLOCKS_WRAP + bool + default y if BR2_TARGET_ROOTFS_EXT2_EXTRA_BLOCKS != 0 + select BR2_LEGACY + +config BR2_PACKAGE_SYSTEMD_KDBUS + bool "systemd-kdbus has been removed" + select BR2_LEGACY + help + --enable/disable-kdbus configure option has been removed since + systemd-231. + +config BR2_PACKAGE_POLARSSL + bool "polarssl has been removed" + select BR2_LEGACY + help + The polarssl crypto library has been removed since the 1.2.x + release branch is no longer maintained. Newer upstream + branches/releases (mbedtls) have API changes so they're not + drop-in replacements. + +config BR2_NBD_CLIENT + bool "nbd client option was renamed" + select BR2_LEGACY + select BR2_PACKAGE_NBD_CLIENT + help + The nbd client option has been renamed to + BR2_PACKAGE_NBD_CLIENT. + +config BR2_NBD_SERVER + bool "nbd server option was renamed" + select BR2_LEGACY + select BR2_PACKAGE_NBD_SERVER + help + The nbd server option has been renamed to + BR2_PACKAGE_NBD_SERVER. + +config BR2_PACKAGE_GMOCK + bool "gmock merged into gtest package" + select BR2_LEGACY + select BR2_PACKAGE_GTEST + select BR2_PACKAGE_GTEST_GMOCK + help + GMock is now a suboption of the GTest package. + +config BR2_KERNEL_HEADERS_4_8 + bool "kernel headers version 4.8.x are no longer supported" + select BR2_LEGACY + help + Version 4.8.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_KERNEL_HEADERS_3_18 + bool "kernel headers version 3.18.x are no longer supported" + select BR2_LEGACY + help + Version 3.18.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_GLIBC_VERSION_2_22 + bool "glibc 2.22 removed" + select BR2_LEGACY + help + Support for glibc version 2.22 has been removed. The current + default version has been selected instead. + +############################################################################### +comment "Legacy options removed in 2017.02" + +config BR2_PACKAGE_PERL_DB_FILE + bool "perl-db-file removed" + select BR2_LEGACY + select BR2_PACKAGE_BERKELEYDB + select BR2_PACKAGE_PERL + help + DB_File can be built as a core Perl module, so the separate + perl-db-file package has been removed. + +config BR2_KERNEL_HEADERS_4_7 + bool "kernel headers version 4.7.x are no longer supported" + select BR2_LEGACY + help + Version 4.7.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_KERNEL_HEADERS_4_6 + bool "kernel headers version 4.6.x are no longer supported" + select BR2_LEGACY + help + Version 4.6.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_KERNEL_HEADERS_4_5 + bool "kernel headers version 4.5.x are no longer supported" + select BR2_LEGACY + help + Version 4.5.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_KERNEL_HEADERS_3_14 + bool "kernel headers version 3.14.x are no longer supported" + select BR2_LEGACY + help + Version 3.14.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_TOOLCHAIN_EXTERNAL_MUSL_CROSS + bool "musl-cross 1.1.12 toolchain removed" + select BR2_LEGACY + help + The support for the prebuilt toolchain based on the Musl C + library provided by the musl-cross project has been removed. + Upstream doesn't provide any prebuilt toolchain anymore, use + the Buildroot toolchain instead. + +config BR2_UCLIBC_INSTALL_TEST_SUITE + bool "uClibc tests now in uclibc-ng-test" + select BR2_LEGACY + select BR2_PACKAGE_UCLIBC_NG_TEST + help + The test suite of the uClibc C library has been moved into a + separate package, uclibc-ng-test. + +config BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX + bool "Blackfin.uclinux.org 2014R1 toolchain removed" + select BR2_LEGACY + help + The ADI Blackfin toolchain has many bugs which are fixed in + more recent gcc and uClibc-ng releases. Use the Buildroot + toolchain instead. + +config BR2_PACKAGE_MAKEDEVS + bool "makedevs removed" + select BR2_LEGACY + help + The makedevs tool is part of busybox. The Buildroot fork + should not be used outside of the Buildroot infrastructure. + +config BR2_TOOLCHAIN_EXTERNAL_ARAGO_ARMV7A + bool "Arago ARMv7 2011.09 removed" + select BR2_LEGACY + help + The Arago toolchains are every old and not updated anymore. + +config BR2_TOOLCHAIN_EXTERNAL_ARAGO_ARMV5TE + bool "Arago ARMv5 2011.09 removed" + select BR2_LEGACY + help + The Arago toolchains are every old and not updated anymore. + +config BR2_PACKAGE_SNOWBALL_HDMISERVICE + bool "snowball-hdmiservice removed" + select BR2_LEGACY + help + We no longer have support for the Snowball platform in + Buildroot, so this package was no longer useful. + +config BR2_PACKAGE_SNOWBALL_INIT + bool "snowball-init removed" + select BR2_LEGACY + help + We no longer have support for the Snowball platform in + Buildroot, so this package was no longer useful. + +config BR2_GDB_VERSION_7_9 + bool "gdb 7.9 has been removed" + select BR2_LEGACY + help + The 7.9 version of gdb has been removed. Use a newer version + instead. + +############################################################################### +comment "Legacy options removed in 2016.11" + +config BR2_PACKAGE_PHP_SAPI_CLI_CGI + bool "PHP CGI and CLI options are now seperate" + select BR2_PACKAGE_PHP_SAPI_CLI + select BR2_PACKAGE_PHP_SAPI_CGI + select BR2_LEGACY + help + The PHP Interface options have been split up into a + separate option for each interface. + +config BR2_PACKAGE_PHP_SAPI_CLI_FPM + bool "PHP CLI and FPM options are now separate" + select BR2_PACKAGE_PHP_SAPI_CLI + select BR2_PACKAGE_PHP_SAPI_FPM + select BR2_LEGACY + help + The PHP Interface options have been split up into a + separate option for each interface. + +config BR2_PACKAGE_WVSTREAMS + bool "wvstreams removed" + select BR2_LEGACY + help + wvstreams is not maintained anymore since about 2009. It also + doesn't build anymore with recent compilers (GCC 5+). + +config BR2_PACKAGE_WVDIAL + bool "wvdial removed" + select BR2_LEGACY + help + wvdial is not maintained anymore since about 2009. It also + doesn't build anymore with recent compilers (GCC 5+). + +config BR2_PACKAGE_WEBKITGTK24 + bool "webkitgtk 2.4.x removed" + select BR2_LEGACY + help + This legacy package only existed because some other packages + depended on that specific version of webkitgtk. However, the + other packages have been fixed. webkitgtk 2.4 is full of + security issues so it needs to be removed. + +config BR2_PACKAGE_TORSMO + bool "torsmo removed" + select BR2_LEGACY + help + torsmo has been unmaintained for a long time, and nobody + seems to be interested in it. + +config BR2_PACKAGE_SSTRIP + bool "sstrip removed" + select BR2_LEGACY + help + sstrip is unmaintained and potentially harmful. It doesn't + save so much compared to normal binutils strip, and there is + a big risk of binaries that don't work. Use normal strip + instead. + +config BR2_KERNEL_HEADERS_4_3 + bool "kernel headers version 4.3.x are no longer supported" + select BR2_LEGACY + help + Version 4.3.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_KERNEL_HEADERS_4_2 + bool "kernel headers version 4.2.x are no longer supported" + select BR2_LEGACY + help + Version 4.2.x of the Linux kernel headers are no longer + maintained upstream and are now removed. + +config BR2_PACKAGE_KODI_ADDON_XVDR + bool "kodi-addon-xvdr removed" + select BR2_LEGACY + help + According to the github project page: + https://github.com/pipelka/xbmc-addon-xvdr + this package is discontinued. + +config BR2_PACKAGE_IPKG + bool "ipkg removed" + select BR2_LEGACY + help + ipkg dates back to the early 2000s when Compaq started the + handhelds.org project and it hasn't seen development since + 2006. Use opkg as a replacement. + +config BR2_GCC_VERSION_4_7_X + bool "gcc 4.7.x support removed" + select BR2_LEGACY + help + Support for gcc version 4.7.x has been removed. The current + default version (4.9.x or later) has been selected instead. + +config BR2_BINUTILS_VERSION_2_24_X + bool "binutils version 2.24 support removed" + select BR2_LEGACY + help + Support for binutils version 2.24 has been removed. The + current default version (2.26 or later) has been selected + instead. + +config BR2_PACKAGE_WESTON_RPI + bool "Weston propietary RPI support is gone" + select BR2_LEGACY + help + Upstream decided the propietary (rpi-userland) weston composer + support wasn't worth the effort so it was removed. Switch to + the open VC4 support. + +config BR2_LINUX_KERNEL_TOOL_CPUPOWER + bool "linux-tool cpupower" + depends on BR2_LINUX_KERNEL + select BR2_LEGACY + select BR2_PACKAGE_LINUX_TOOLS_CPUPOWER + help + Linux tool cpupower option was renamed. + +config BR2_LINUX_KERNEL_TOOL_PERF + bool "linux-tool perf" + depends on BR2_LINUX_KERNEL + select BR2_LEGACY + select BR2_PACKAGE_LINUX_TOOLS_PERF + help + Linux tool perf option was renamed. + +config BR2_LINUX_KERNEL_TOOL_SELFTESTS + bool "linux-tool selftests" + depends on BR2_LINUX_KERNEL + select BR2_LEGACY + select BR2_PACKAGE_LINUX_TOOLS_SELFTESTS + help + Linux tool selftests option was renamed. + +config BR2_GCC_VERSION_4_8_ARC + bool "gcc arc option renamed" + select BR2_LEGACY + select BR2_GCC_VERSION_ARC + help + The option that selects the gcc version for the ARC + architecture has been renamed to BR2_GCC_VERSION_ARC. + +config BR2_KERNEL_HEADERS_4_0 + bool "kernel headers version 4.0.x are no longer supported" + select BR2_LEGACY + help + Version 4.0.x of the Linux kernel headers have been deprecated + for more than four buildroot releases and are now removed. + +config BR2_KERNEL_HEADERS_3_19 + bool "kernel headers version 3.19.x are no longer supported" + select BR2_LEGACY + help + Version 3.19.x of the Linux kernel headers have been + deprecated for more than four buildroot releases and are now + removed. + +config BR2_PACKAGE_LIBEVAS_GENERIC_LOADERS + bool "libevas-generic-loaders package removed" + select BR2_LEGACY + select BR2_PACKAGE_EFL + help + With EFL 1.18, libevas-generic-loaders is now provided by the + efl package. + +config BR2_PACKAGE_ELEMENTARY + bool "elementary package removed" + select BR2_LEGACY + select BR2_PACKAGE_EFL + help + With EFL 1.18, elementary is now provided by the efl package. + +config BR2_LINUX_KERNEL_CUSTOM_LOCAL + bool "Linux kernel local directory option removed" + help + The option to select a local directory as the source of the + Linux kernel has been removed. It hurts reproducibility of + builds. + + In case you were using this option during development of your + Linux kernel, use the override mechanism instead. + +############################################################################### +comment "Legacy options removed in 2016.08" + +config BR2_PACKAGE_EFL_JP2K + bool "libevas jp2k loader has been removed" + select BR2_LEGACY + help + JP2K support in EFL requires openjpeg 1.x (libopenjpeg1.pc) + while Buildroot only packages openjpeg 2.x. Therefore, the + JP2K loader has been removed from EFL. + +config BR2_PACKAGE_SYSTEMD_COMPAT + bool "systemd compatibility libraries have been removed" + select BR2_LEGACY + help + The systemd option to enable the compatibility libraries has + been removed. Theses libraries have been useless since a few + version, and have been fully dropped from the source since + v230. + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_LIVEADDER + bool "gst1-plugins-bad liveadder plugin removed" + select BR2_LEGACY + select BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_AUDIOMIXER + help + The functionality of the liveadder plugin of the + gst1-plugins-bad package has been merged into audiomixer. + +config BR2_PACKAGE_LIBFSLVPUWRAP + bool "libfslvpuwrap has been renamed to imx-vpuwrap" + select BR2_LEGACY + select BR2_PACKAGE_IMX_VPUWRAP + help + The libfslvpuwrap has been renamed to match the renamed + package. + +config BR2_PACKAGE_LIBFSLPARSER + bool "libfslparser has been renamed to imx-parser" + select BR2_LEGACY + select BR2_PACKAGE_IMX_PARSER + help + The libfslparser has been renamed to match the renamed + package. + +config BR2_PACKAGE_LIBFSLCODEC + bool "libfslcodec has been renamed to imx-codec" + select BR2_LEGACY + select BR2_PACKAGE_IMX_CODEC + help + The libfslcodec has been renamed to match the renamed package. + +config BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE_FIT_SIGNATURE_SUPPORT + bool "FIT support in uboot-tools has been refactored" + select BR2_LEGACY + select BR2_PACKAGE_DTC + select BR2_PACKAGE_DTC_PROGRAMS + select BR2_PACKAGE_UBOOT_TOOLS_FIT_SUPPORT + select BR2_PACKAGE_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT + select BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE + help + This option has been removed in favor of a more fine-grained + configuration, which is recommended. Selecting this option + enables FIT and FIT signature support for the target packages. + It will also select the dtc and openssl packages. + +config BR2_PTHREADS_OLD + bool "linuxthreads (stable/old)" + select BR2_LEGACY + help + Linuxthreads have been reworked, BR2_PTHREADS_OLD is now + BR2_PTHREADS and the old BR2_PTHREADS - LT.new got removed. + +config BR2_BINUTILS_VERSION_2_23_X + bool "binutils 2.23 removed" + select BR2_LEGACY + help + Binutils 2.23 has been removed, using a newer version is + recommended. + +config BR2_TOOLCHAIN_BUILDROOT_EGLIBC + bool "eglibc support has been removed" + select BR2_LEGACY + help + The eglibc project no longer exists, as it has been merged + back into the glibc project. Therefore, support for eglibc + has been removed, and glibc should be used instead. + +config BR2_GDB_VERSION_7_8 + bool "gdb 7.8 has been removed" + select BR2_LEGACY + help + The 7.8 version of gdb has been removed. Use a newer version + instead. + +############################################################################### +comment "Legacy options removed in 2016.05" + +config BR2_PACKAGE_OPENVPN_CRYPTO_POLARSSL + bool "openvpn polarssl crypto backend removed" + select BR2_LEGACY + help + The OpenVPN polarssl crypto backend option has been removed. + Version from 2.3.10 onwards need polarssl >= 1.3.8 but aren't + compatible with mbedtls (polarssl) series 2.x which is the + version provided in buildroot. And both can't coexist. + It now uses OpenSSL as the only option. + +config BR2_PACKAGE_NGINX_HTTP_SPDY_MODULE + bool "nginx http spdy module removed" + select BR2_LEGACY + select BR2_PACKAGE_NGINX_HTTP_V2_MODULE + help + The ngx_http_spdy_module has been superseded by the + ngx_http_v2_module since nginx v1.9.5. The + ngx_http_v2_module modules has been automatically selected + in your configuration. + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_RTP + bool "gst1-plugins-bad rtp plugin moved to good" + select BR2_LEGACY + help + The rtp plugin has been moved from gst1-plugins-base to + gst1-plugins-good. + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MPG123 + bool "gst1-plugins-bad mpg123 plugin moved to ugly" + select BR2_LEGACY + help + The mpg123 plugin has been moved from gst1-plugins-bad to + gst1-plugins-ugly. + +config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC + bool "PowerPC Sourcery toolchain has been removed" + select BR2_LEGACY + help + The Sourcery CodeBench toolchain for the PowerPC + architecture has been removed, as it was very old, not + maintained, and causing numerous build failures with modern + userspace packages. + +config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC_E500V2 + bool "PowerPC Sourcery E500v2 toolchain has been removed" + select BR2_LEGACY + help + The Sourcery CodeBench toolchain for the PowerPC E500v2 + architecture has been removed, as it was very old, not + maintained, and causing numerous build failures with modern + userspace packages. + +config BR2_x86_i386 + bool "x86 i386 support removed" + select BR2_LEGACY + help + The support for the i386 processors of the x86 architecture + has been removed. + +config BR2_PACKAGE_QT5QUICK1 + bool "qt5quick1 package removed" + select BR2_LEGACY + help + The qt5quick1 package has been removed, since it was removed + from upstream starting from Qt 5.6. + +config BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR + string "uboot custom patch dir has been removed" + help + The uboot custom patch directory option has been removed. Use + the improved BR2_TARGET_UBOOT_PATCH option instead. + +config BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR_WRAP + bool + default y if BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR != "" + select BR2_LEGACY + +# Note: BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR is still referenced from +# boot/uboot/Config.in + +config BR2_PACKAGE_XDRIVER_XF86_INPUT_VOID + bool "xf86-input-void removed" + select BR2_LEGACY + help + The xf86-input-void package has been removed, there's no need + for it in any modern (post-2007) xorg server. + +config BR2_KERNEL_HEADERS_3_17 + bool "kernel headers version 3.17.x are no longer supported" + select BR2_LEGACY + help + Version 3.17.x of the Linux kernel headers have been + deprecated for more than four buildroot releases and are now + removed. + +config BR2_GDB_VERSION_7_7 + bool "gdb 7.7 has been removed" + select BR2_LEGACY + help + The 7.7 version of gdb has been removed. Use a newer version + instead. + +config BR2_PACKAGE_FOOMATIC_FILTERS + bool "foomatic-filters" + select BR2_LEGACY + help + The foomatic-filters package was removed. + +config BR2_PACKAGE_SAMBA + bool "samba" + select BR2_LEGACY + help + The samba package was removed in favour of samba4 since the + 3.x series isn't supported by upstream any longer. + +config BR2_PACKAGE_KODI_WAVPACK + bool "wavpack" + select BR2_LEGACY + help + wavpack support was removed in favour of ffmpeg: + https://github.com/xbmc/xbmc/commit/7916902c9e6f7a523265594f3ad7f921f93f1cd4 + +config BR2_PACKAGE_KODI_RSXS + bool "rsxs support in Kodi was moved to an addon" + select BR2_LEGACY + select BR2_PACKAGE_KODI_SCREENSAVER_RSXS + help + rsxs support in Kodi was moved to an addon + +config BR2_PACKAGE_KODI_GOOM + bool "Goom support in Kodi was moved to an addon" + select BR2_LEGACY + select BR2_PACKAGE_KODI_VISUALISATION_GOOM + help + Goom support in Kodi was moved to an addon + +config BR2_PACKAGE_SYSTEMD_ALL_EXTRAS + bool "systemd all extras option has been removed" + select BR2_LEGACY + select BR2_PACKAGE_XZ + select BR2_PACKAGE_LIBGCRYPT + help + The systemd option to enable "all extras" has been + removed. To get the same features, the libgcrypt and xz + package should now be enabled. + +config BR2_GCC_VERSION_4_5_X + bool "gcc 4.5.x has been removed" + select BR2_LEGACY + help + The 4.5.x version of gcc has been removed. Use a newer + version instead. + +config BR2_PACKAGE_SQLITE_READLINE + bool "sqlite command-line editing support was updated" + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_READLINE + select BR2_LEGACY + help + This option was removed in favour of the sqlite package + deciding itself depending on the enabled packages whether + command-line editing should be enabled, it also also takes + libedit into account. + +############################################################################### +comment "Legacy options removed in 2016.02" + +config BR2_PACKAGE_DOVECOT_BZIP2 + bool "bzip2 support option has been removed" + select BR2_LEGACY + select BR2_PACKAGE_BZIP2 + help + Bzip2 support is built if the bzip2 package is selected. + +config BR2_PACKAGE_DOVECOT_ZLIB + bool "zlib support option has been removed" + select BR2_LEGACY + select BR2_PACKAGE_ZLIB + help + Zlib support is built if the zlib package is selected. + +config BR2_PACKAGE_E2FSPROGS_FINDFS + bool "e2fsprogs findfs option has been removed" + select BR2_LEGACY + help + This option attempted to enable findfs capabilities from + e2fsprogs but has not worked since July 2015 (due to + packaging changes). One can use BusyBox's findfs support or + enable the BR2_PACKAGE_UTIL_LINUX_BINARIES option. + +config BR2_PACKAGE_OPENPOWERLINK_DEBUG_LEVEL + bool "openpowerlink debug option has been removed" + select BR2_LEGACY + help + This option depends on BR2_ENABLE_DEBUG which should not be + used by packages anymore. + +config BR2_PACKAGE_OPENPOWERLINK_KERNEL_MODULE + bool "openpowerlink package has been updated" + select BR2_LEGACY + select BR2_PACKAGE_OPENPOWERLINK_STACK_KERNEL_STACK_LIB + help + openpowerlink kernel modules are built if the + kernel stack library is selected. + +config BR2_PACKAGE_OPENPOWERLINK_LIBPCAP + bool "openpowerlink package has been updated" + select BR2_LEGACY + select BR2_PACKAGE_OPENPOWERLINK_STACK_USERSPACE_DAEMON_LIB + help + The user space support has been split in two part: + - a monolitic user space library + - a user spae deamon driver + +config BR2_LINUX_KERNEL_SAME_AS_HEADERS + bool "using the linux headers version for the kernel has been removed" + select BR2_LEGACY + help + The option to use the version of the kernel headers for the + kernel to build has been removed. + + There is now the converse, better-suited and more versatile + option to use the kernel version for the linux headers. + +config BR2_PACKAGE_CUPS_PDFTOPS + bool "Pdftops support has been removed from Cups" + select BR2_PACKAGE_CUPS_FILTERS + select BR2_LEGACY + help + Pdftops support has been removed from the cups package + It is now part of the cups-filters package. + +config BR2_KERNEL_HEADERS_3_16 + bool "kernel headers version 3.16.x are no longer supported" + select BR2_LEGACY + help + Version 3.16.x of the Linux kernel headers have been + deprecated for more than four buildroot releases and are now + removed. + +config BR2_PACKAGE_PYTHON_PYXML + bool "python-pyxml package has been removed" + select BR2_LEGACY + help + PyXML is obsolete and its functionality is covered either via + native Python XML support or python-lxml package. + +# BR2_ENABLE_SSP is still referenced in Config.in (default in choice) +config BR2_ENABLE_SSP + bool "Stack Smashing protection now has different levels" + help + The protection offered by SSP can now be selected from + different protection levels. Be sure to review the SSP level + in the build options menu. + +config BR2_PACKAGE_DIRECTFB_CLE266 + bool "cle266 driver for directfb removed" + select BR2_LEGACY + help + The cle266 directfb driver support has been removed. + It doesn't build in the latest version and it's unlikely + anyone has any use for it. + +config BR2_PACKAGE_DIRECTFB_UNICHROME + bool "unichrome driver for directfb removed" + select BR2_LEGACY + help + The unichrome directfb driver support has been removed. + It doesn't build in the latest version and it's unlikely + anyone has any use for it. + +config BR2_PACKAGE_LIBELEMENTARY + bool "libelementary has been renamed to elementary" + select BR2_LEGACY + select BR2_PACKAGE_ELEMENTARY + help + The libelementary package has been renamed to match the + upstream name. + +config BR2_PACKAGE_LIBEINA + bool "libeina package has been removed" + select BR2_LEGACY + select BR2_PACKAGE_EFL + help + With EFL 1.15, libeina is now provided by the efl package. + +config BR2_PACKAGE_LIBEET + bool "libeet package has been removed" + select BR2_LEGACY + select BR2_PACKAGE_EFL + help + With EFL 1.15, libeet is now provided by the efl package. + +config BR2_PACKAGE_LIBEVAS + bool "libevas package has been removed" + select BR2_LEGACY + select BR2_PACKAGE_EFL + help + With EFL 1.15, libevas is now provided by the efl package. + +config BR2_PACKAGE_LIBECORE + bool "libecore package has been removed" + select BR2_LEGACY + select BR2_PACKAGE_EFL + help + With EFL 1.15, libecore is now provided by the efl package. + +config BR2_PACKAGE_LIBEDBUS + bool "libedbus package has been removed" + select BR2_LEGACY + select BR2_PACKAGE_EFL + help + With EFL 1.15, libedbus is now provided by the efl package. + +config BR2_PACKAGE_LIBEFREET + bool "libefreet package has been removed" + select BR2_LEGACY + select BR2_PACKAGE_EFL + help + With EFL 1.15, libefreet is now provided by the efl package. + +config BR2_PACKAGE_LIBEIO + bool "libeio package has been removed" + select BR2_LEGACY + select BR2_PACKAGE_EFL + help + With EFL 1.15, libeio is now provided by the efl package. + +config BR2_PACKAGE_LIBEMBRYO + bool "libembryo package has been removed" + select BR2_LEGACY + select BR2_PACKAGE_EFL + help + With EFL 1.15, libembryo is now provided by the efl package. + +config BR2_PACKAGE_LIBEDJE + bool "libedje package has been removed" + select BR2_LEGACY + select BR2_PACKAGE_EFL + help + With EFL 1.15, libedje is now provided by the efl package. + +config BR2_PACKAGE_LIBETHUMB + bool "libethumb package has been removed" + select BR2_LEGACY + select BR2_PACKAGE_EFL + help + With EFL 1.15, libethumb is now provided by the efl package. + +config BR2_PACKAGE_INFOZIP + bool "infozip option has been renamed to zip" + select BR2_LEGACY + select BR2_PACKAGE_ZIP + help + Info-Zip's Zip package has been renamed from infozip to zip, + to avoid ambiguities with Info-Zip's UnZip which has been + added in the unzip package. + +config BR2_BR2_PACKAGE_NODEJS_0_10_X + bool "nodejs 0.10.x option removed" + select BR2_LEGACY + select BR2_PACKAGE_NODEJS + help + nodejs 0.10.x option has been removed. 0.10.x is now + automatically chosen for ARMv5 architectures only and the + latest nodejs for all other supported architectures. The + correct nodejs version has been automatically selected in your + configuration. + +config BR2_BR2_PACKAGE_NODEJS_0_12_X + bool "nodejs version 0.12.x has been removed" + select BR2_LEGACY + select BR2_PACKAGE_NODEJS + help + nodejs version 0.12.x has been removed. As an alternative, + the latest nodejs version has been automatically selected in + your configuration. + +config BR2_BR2_PACKAGE_NODEJS_4_X + bool "nodejs version 4.x has been removed" + select BR2_LEGACY + select BR2_PACKAGE_NODEJS + help + nodejs version 4.x has been removed. As an alternative, + the latest nodejs version has been automatically selected in + your configuration. + +############################################################################### +comment "Legacy options removed in 2015.11" + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_REAL + bool "gst1-plugins-bad real plugin has been removed" + select BR2_LEGACY + help + The real plugin from GStreamer 1 bad plugins has been + removed. + +config BR2_PACKAGE_MEDIA_CTL + bool "media-ctl package has been removed" + select BR2_LEGACY + select BR2_PACKAGE_LIBV4L + select BR2_PACKAGE_LIBV4L_UTILS + help + media-ctl source and developement have been moved to v4l-utils + since June 2014. For an up-to-date media-ctl version select + BR2_PACKAGE_LIBV4L and BR2_PACKAGE_LIBV4L_UTILS. + +config BR2_PACKAGE_SCHIFRA + bool "schifra package has been removed" + select BR2_LEGACY + help + Schifra package has been maked broken since 2014.11 release + and haven't been fixed since then. + +config BR2_PACKAGE_ZXING + bool "zxing option has been renamed" + select BR2_LEGACY + select BR2_PACKAGE_ZXING_CPP + help + ZXing no longer provides the cpp bindings, it has been renamed + to BR2_PACKAGE_ZXING_CPP which uses a new upstream. + +# Since FreeRDP has new dependencies, protect this legacy to avoid the +# infamous "unmet direct dependencies" kconfig error. +config BR2_PACKAGE_FREERDP_CLIENT + bool "freerdp client option renamed" + depends on BR2_PACKAGE_FREERDP + select BR2_LEGACY + select BR2_PACKAGE_FREERDP_CLIENT_X11 + +config BR2_PACKAGE_BLACKBOX + bool "blackbox package has been removed" + select BR2_LEGACY + help + Upstream is dead and the package has been deprecated for + some time. There are other alternative maintained WMs. + +config BR2_KERNEL_HEADERS_3_0 + bool "kernel headers version 3.0.x are no longer supported" + select BR2_LEGACY + help + Version 3.0.x of the Linux kernel headers have been deprecated + for more than four buildroot releases and are now removed. + +config BR2_KERNEL_HEADERS_3_11 + bool "kernel headers version 3.11.x are no longer supported" + select BR2_LEGACY + help + Version 3.11.x of the Linux kernel headers have been + deprecated for more than four buildroot releases and are now + removed. + +config BR2_KERNEL_HEADERS_3_13 + bool "kernel headers version 3.13.x are no longer supported" + select BR2_LEGACY + help + Version 3.13.x of the Linux kernel headers have been + deprecated for more than four buildroot releases and are now + removed. + +config BR2_KERNEL_HEADERS_3_15 + bool "kernel headers version 3.15.x are no longer supported" + select BR2_LEGACY + help + Version 3.15.x of the Linux kernel headers have been + deprecated for more than four buildroot releases and are now + removed. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_ANDI + bool "DirectFB example df_andi has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_BLTLOAD + bool "DirectFB example df_bltload has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_CPULOAD + bool "DirectFB example df_cpuload has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_DATABUFFER + bool "DirectFB example df_databuffer has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_DIOLOAD + bool "DirectFB example df_dioload has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_DOK + bool "DirectFB example df_dok has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_DRIVERTEST + bool "DirectFB example df_drivertest has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_FIRE + bool "DirectFB example df_fire has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_FLIP + bool "DirectFB example df_flip has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_FONTS + bool "DirectFB example df_fonts has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_INPUT + bool "DirectFB example df_input has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_JOYSTICK + bool "DirectFB example df_joystick has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_KNUCKLES + bool "DirectFB example df_knuckles has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_LAYER + bool "DirectFB example df_layer has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_MATRIX + bool "DirectFB example df_matrix has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_MATRIX_WATER + bool "DirectFB example df_matrix_water has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_NEO + bool "DirectFB example df_neo has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_NETLOAD + bool "DirectFB example df_netload has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_PALETTE + bool "DirectFB example df_palette has been removed" + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_PARTICLE + bool "DirectFB example df_particle has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_PORTER + bool "DirectFB example df_porter has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_STRESS + bool "DirectFB example df_stress has been removed" + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_TEXTURE + bool "DirectFB example df_texture has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_VIDEO + bool "DirectFB example df_video has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_VIDEO_PARTICLE + bool "DirectFB example df_video_particle has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_DIRECTFB_EXAMPLES_WINDOW + bool "DirectFB example df_window has been removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_EXAMPLES + help + The per-DirectFB example options have been removed. The + BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all + examples. + +config BR2_PACKAGE_KOBS_NG + bool "kobs-ng was replaced by imx-kobs" + select BR2_LEGACY + select BR2_PACKAGE_IMX_KOBS + help + The outdated kobs-ng has been replaced by the Freescale- + maintained imx-kobs package. + +config BR2_PACKAGE_SAWMAN + bool "sawman package removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_SAWMAN + help + This option has been removed because the sawman package no + longer exists: it was merged inside DirectFB itself. This + feature can now be enabled using the + BR2_PACKAGE_DIRECTFB_SAWMAN option. + +config BR2_PACKAGE_DIVINE + bool "divine package removed" + select BR2_LEGACY + select BR2_PACKAGE_DIRECTFB_DIVINE + help + This option has been removed because the divine package no + longer exists: it was merged inside DirectFB itself. This + feature can now be enabled using the + BR2_PACKAGE_DIRECTFB_DIVINE option. + +############################################################################### +comment "Legacy options removed in 2015.08" + +config BR2_PACKAGE_KODI_PVR_ADDONS + bool "Kodi PVR addon was split" + select BR2_LEGACY + select BR2_PACKAGE_KODI_PVR_ARGUSTV + select BR2_PACKAGE_KODI_PVR_DVBLINK + select BR2_PACKAGE_KODI_PVR_DVBVIEWER + select BR2_PACKAGE_KODI_PVR_FILMON + select BR2_PACKAGE_KODI_PVR_HTS + select BR2_PACKAGE_KODI_PVR_IPTVSIMPLE + select BR2_PACKAGE_KODI_PVR_MEDIAPORTAL_TVSERVER + select BR2_PACKAGE_KODI_PVR_MYTHTV + select BR2_PACKAGE_KODI_PVR_NEXTPVR + select BR2_PACKAGE_KODI_PVR_NJOY + select BR2_PACKAGE_KODI_PVR_PCTV + select BR2_PACKAGE_KODI_PVR_STALKER + select BR2_PACKAGE_KODI_PVR_VBOX + select BR2_PACKAGE_KODI_PVR_VDR_VNSI + select BR2_PACKAGE_KODI_PVR_VUPLUS + select BR2_PACKAGE_KODI_PVR_WMC + help + Kodi PVR addon was split into seperate modules + +config BR2_BINUTILS_VERSION_2_23_2 + bool "binutils 2.23 option renamed" + select BR2_LEGACY + help + Binutils 2.23.2 has been removed, using a newer version is + recommended. + +config BR2_BINUTILS_VERSION_2_24 + bool "binutils 2.24 option renamed" + select BR2_LEGACY + select BR2_BINUTILS_VERSION_2_24_X + help + The binutils version option has been renamed to match the + same patchlevel logic used by gcc. The new option is now + BR2_BINUTILS_VERSION_2_24_X. + +config BR2_BINUTILS_VERSION_2_25 + bool "binutils 2.25 option renamed" + select BR2_LEGACY + select BR2_BINUTILS_VERSION_2_25_X + help + The binutils version option has been renamed to match the + same patchlevel logic used by gcc. The new option is now + BR2_BINUTILS_VERSION_2_25_X. + +config BR2_PACKAGE_PERF + bool "perf option has been renamed" + select BR2_LEGACY + select BR2_LINUX_KERNEL_TOOL_PERF + help + The perf package has been moved as a Linux tools package, + and the option to enable it is now + BR2_LINUX_KERNEL_TOOL_PERF. + +config BR2_BINUTILS_VERSION_2_22 + bool "binutils 2.22 removed" + select BR2_LEGACY + help + Binutils 2.22 has been removed, using a newer version is + recommended. + +config BR2_PACKAGE_GPU_VIV_BIN_MX6Q + bool "gpu-viv-bin-mx6q" + select BR2_LEGACY + select BR2_PACKAGE_IMX_GPU_VIV + help + Vivante graphics libraries have been renamed to + BR2_PACKAGE_IMX_GPU_VIV to be aligned with upstream package + name. + +config BR2_PACKAGE_LIBSEMANAGE_PYTHON_BINDINGS + bool "libsemanage python bindings removed" + depends on BR2_PACKAGE_PYTHON + select BR2_LEGACY + help + This option has been removed, since the libsemanage Python + bindings on the target were not useful. + +config BR2_TARGET_UBOOT_NETWORK + bool "U-Boot custom network settings removed" + select BR2_LEGACY + help + U-Boot's custom network settings options have been removed. + +endmenu + +endif # !SKIP_LEGACY diff --git a/DEVELOPERS b/DEVELOPERS new file mode 100644 index 00000000..3b18c568 --- /dev/null +++ b/DEVELOPERS @@ -0,0 +1,2835 @@ +# Syntax: +# +# N: Firstname Lastname +# F: file pattern or directory +# F: file pattern or directory +# +# The "F" entries can be: +# +# - A directory, in which case all patches touching any file in this +# directory or its subdirectories will be CC'ed to the developer. +# - A pattern, in which case the pattern will be expanded, and then +# all files/directories (and their subdirectories) will be +# considered when matching against a patch +# +# Notes: +# +# - When a developer adds an "arch/Config.in." file to its list +# of files, he is considered a developer of this architecture. He +# will receive e-mail notifications about build failures occuring on +# this architecture. Not more than one e-mail per day is sent. +# - When a developer adds a directory that contains one or several +# packages, this developer will be notified when build failures +# occur. Not more than one e-mail per day is sent. +# - When a developer adds an "package/pkg-.mk" file to its list +# of files, he is considered interested by this package +# infrastructure, and will be CC'ed on all patches that add or +# modify packages that use this infrastructure. + +N: Adam Heinrich +F: package/jack1/ + +N: Adrian Perez de Castro +F: package/brotli/ +F: package/bubblewrap/ +F: package/cage/ +F: package/cog/ +F: package/libepoxy/ +F: package/libwpe/ +F: package/webkitgtk/ +F: package/wlroots/ +F: package/woff2/ +F: package/wpebackend-fdo/ +F: package/wpewebkit/ +F: package/xdg-dbus-proxy/ + +N: Adrien Gallouët +F: package/bird/ +F: package/glorytun/ + +N: Alejandro González +F: package/qprint/ +F: package/watchdog/ + +N: Aleksander Morgado +F: package/libmbim/ +F: package/libqmi/ +F: package/modem-manager/ + +N: Alex Michel +F: package/network-manager-openvpn/ + +N: Alex Suykov +F: board/chromebook/snow/ +F: configs/chromebook_snow_defconfig +F: package/vboot-utils/ + +N: Alexander Clouter +F: package/odhcp6c/ + +N: Alexander Dahl +F: package/fastd/ +F: package/libuecc/ +F: package/putty/ + +N: Alexander Egorenkov +F: package/makedumpfile/ +F: package/multipath-tools/ + +N: Alexander Egorenkov +F: arch/Config.in.s390x +F: board/qemu/s390x/ +F: configs/qemu_s390x_defconfig +F: package/s390-tools/ + +N: Alexander Kurz +F: package/minimodem/ + +N: Alexander Lukichev +F: package/openpgm/ + +N: Alexander Mukhin +F: package/tinyproxy/ + +N: Alexander Sverdlin +F: package/mini-snmpd/ + +N: Alexander Varnin +F: package/liblog4c-localtime/ + +N: Alexandre Belloni +F: package/tz/ + +N: Alexandre Esse +F: package/kvazaar/ +F: package/v4l2loopback/ + +N: Alexey Brodkin +F: board/cubietech/cubieboard2/ +F: configs/cubieboard2_defconfig + +N: Alistair Francis +F: board/sifive/ +F: boot/opensbi/ +F: configs/hifive_unleashed_defconfig +F: package/xen/ + +N: Alvaro G. M +F: package/dcron/ +F: package/libxmlrpc/ +F: package/python-docopt/ + +N: Anders Darander +F: package/ktap/ + +N: André Zwing +F: package/libkrb5/ +F: package/openal/ +F: package/p7zip/ +F: package/wine/ + +N: Andreas Klinger +F: package/ply/ + +N: Andrey Smirnov +F: package/python-backports-shutil-get-terminal-size/ +F: package/python-decorator/ +F: package/python-ipython-genutils/ +F: package/python-pathlib2/ +F: package/python-pickleshare/ +F: package/python-scandir/ +F: package/python-simplegeneric/ +F: package/python-systemd/ +F: package/python-traitlets/ +F: package/zstd/ + +N: Andrey Yurovsky +F: package/rauc/ + +N: Angelo Compagnucci +F: package/apparmor/ +F: package/corkscrew/ +F: package/cups/ +F: package/cups-filters/ +F: package/fail2ban/ +F: package/grep/ +F: package/htpdate/ +F: package/i2c-tools/ +F: package/jq/ +F: package/libapparmor/ +F: package/libb64/ +F: package/mender/ +F: package/mender-artifact/ +F: package/mono/ +F: package/mono-gtksharp3/ +F: package/monolite/ +F: package/openjpeg/ +F: package/python-can/ +F: package/python-pillow/ +F: package/python-pydal/ +F: package/python-spidev/ +F: package/python-web2py/ +F: package/qt5/qt5coap/ +F: package/qt5/qt5knx/ +F: package/qt5/qt5mqtt/ +F: package/sam-ba/ +F: package/sshguard/ +F: package/sunwait/ +F: package/sysdig/ + +N: Andy Shevchenko +F: package/fb-test-app/ + +N: Anisse Astier +F: package/go/ +F: package/nghttp2/ +F: package/pkg-golang.mk + +N: Anthony Viallard +F: package/gnuplot/ + +N: Antoine Tenart +F: package/libselinux/ +F: package/refpolicy/ +F: support/testing/tests/core/test_selinux/ +F: support/testing/tests/core/test_selinux.py +F: support/testing/tests/init/test_systemd_selinux/ +F: support/testing/tests/init/test_systemd_selinux.py + +N: Antony Pavlov +F: package/lsscsi/ + +N: ARC Maintainers +F: arch/Config.in.arc +F: board/synopsys/ +F: configs/snps_arc700_axs101_defconfig +F: configs/snps_archs38_axs103_defconfig +F: configs/snps_archs38_haps_defconfig +F: configs/snps_archs38_hsdk_defconfig +F: configs/snps_archs38_vdk_defconfig + +N: Ariel D'Alessandro +F: package/axfsutils/ +F: package/mali-t76x/ + +N: Arnaud Aujon +F: package/espeak/ + +N: Arnout Vandecappelle +F: package/arp-scan/ +F: package/dehydrated/ +F: package/freescale-imx/firmware-imx/ +F: package/freescale-imx/imx-lib/ +F: package/libpagekite/ +F: package/lua-bit32/ +F: package/owfs/ +F: package/python-bottle/ +F: package/sqlcipher/ +F: package/stress/ + +N: Arthur Courtel +F: board/raspberrypi/genimage-raspberrypi4-64.cfg +F: configs/raspberrypi4_64_defconfig + +N: Asaf Kahlon +F: package/collectd/ +F: package/libfuse3/ +F: package/libuv/ +F: package/python* +F: package/snmpclitools/ +F: package/spdlog/ +F: package/uftp/ +F: package/uvw/ +F: package/zeromq/ + +N: Ash Charles +F: package/pru-software-support/ +F: package/ti-cgt-pru/ + +N: Assaf Inbal +F: package/lbase64/ +F: package/luabitop/ +F: package/luaexpatutils/ +F: package/luaposix/ +F: package/luasec/ +F: package/lua-ev/ +F: package/orbit/ + +N: Attila Wagner +F: package/python-canopen/ + +N: Bartosz Bilas +F: board/stmicroelectronics/stm32mp157a-dk1/ +F: configs/stm32mp157a_dk1_defconfig +F: package/python-esptool/ +F: package/python-pyaes/ +F: package/ttyd/ +F: package/qt5/qt5scxml/ +F: package/qt5/qt5webview/ + +N: Bartosz Golaszewski +F: package/autoconf-archive/ +F: package/doxygen/ +F: package/libgpiod/ +F: package/libserialport/ +F: package/libsigrok/ +F: package/libsigrokdecode/ +F: package/libzip/ +F: package/pulseview/ +F: package/sigrok-cli/ + +N: Baruch Siach +F: board/solidrun/clearfog_gt_8k/ +F: configs/solidrun_clearfog_gt_8k_defconfig +F: package/18xx-ti-utils/ +F: package/cpuburn-arm/ +F: package/daemon/ +F: package/dropbear/ +F: package/ebtables/ +F: package/i2c-tools/ +F: package/libcurl/ +F: package/libpcap/ +F: package/openipmi/ +F: package/socat/ +F: package/strace/ +F: package/tcpdump/ +F: package/ti-uim/ +F: package/uhubctl/ + +N: Ben Boeckel +F: package/taskd/ + +N: Benjamin Kamath +F: package/lapack/ + +N: Bernd Kuhls +F: package/alsa-lib/ +F: package/alsa-utils/ +F: package/apache/ +F: package/apr/ +F: package/apr-util/ +F: package/bcg729/ +F: package/bitcoin/ +F: package/bluez-tools/ +F: package/boinc/ +F: package/clamav/ +F: package/dav1d/ +F: package/dovecot/ +F: package/dovecot-pigeonhole/ +F: package/dtv-scan-tables/ +F: package/eudev/ +F: package/exim/ +F: package/fetchmail/ +F: package/ffmpeg/ +F: package/flac/ +F: package/freeswitch/ +F: package/freeswitch-mod-bcg729/ +F: package/freetype/ +F: package/fstrcmp/ +F: package/ghostscript/ +F: package/giflib/ +F: package/gkrellm/ +F: package/gli/ +F: package/glmark2/ +F: package/gpsd/ +F: package/gptfdisk/ +F: package/hdparm/ +F: package/inih/ +F: package/intel-gmmlib/ +F: package/intel-mediadriver/ +F: package/intel-mediasdk/ +F: package/jsoncpp/ +F: package/kodi* +F: package/lame/ +F: package/leafnode2/ +F: package/libaacs/ +F: package/libasplib/ +F: package/libass/ +F: package/libbdplus/ +F: package/libbluray/ +F: package/libbroadvoice/ +F: package/libcdio/ +F: package/libcec/ +F: package/libcodec2/ +F: package/libcrossguid/ +F: package/libdcadec/ +F: package/libdrm/ +F: package/libdvbcsa/ +F: package/libdvdcss/ +F: package/libdvdnav/ +F: package/libdvdread/ +F: package/libebur128/ +F: package/libfreeglut/ +F: package/libg7221/ +F: package/libglew/ +F: package/libglfw/ +F: package/libglu/ +F: package/libhdhomerun/ +F: package/libilbc/ +F: package/libldns/ +F: package/libmicrohttpd/ +F: package/libminiupnpc/ +F: package/libmspack/ +F: package/libnatpmp/ +F: package/libnpth/ +F: package/libogg/ +F: package/libopenh264/ +F: package/libpciaccess/ +F: package/libplatform/ +F: package/libpng/ +F: package/libsidplay2/ +F: package/libsilk/ +F: package/libsndfile/ +F: package/libsoil/ +F: package/libsoundtouch/ +F: package/libsquish/ +F: package/libudfread/ +F: package/liburiparser/ +F: package/libva/ +F: package/libva-intel-driver/ +F: package/libva-utils/ +F: package/libvorbis/ +F: package/libvpx/ +F: package/libyuv/ +F: package/mesa3d/ +F: package/minidlna/ +F: package/mjpg-streamer/ +F: package/perl-crypt-openssl-guess/ +F: package/perl-crypt-openssl-random/ +F: package/perl-crypt-openssl-rsa/ +F: package/perl-digest-sha1/ +F: package/perl-encode-detect/ +F: package/perl-encode-locale/ +F: package/perl-file-listing/ +F: package/perl-html-parser/ +F: package/perl-html-tagset/ +F: package/perl-http-cookies/ +F: package/perl-http-daemon/ +F: package/perl-http-date/ +F: package/perl-http-message/ +F: package/perl-http-negotiate/ +F: package/perl-io-html/ +F: package/perl-lwp-mediatypes/ +F: package/perl-mail-dkim/ +F: package/perl-mailtools/ +F: package/perl-net-dns/ +F: package/perl-net-http/ +F: package/perl-netaddr-ip/ +F: package/perl-timedate/ +F: package/perl-uri/ +F: package/perl-www-robotrules/ +F: package/php/ +F: package/pixman/ +F: package/pngquant/ +F: package/pound/ +F: package/pulseaudio/ +F: package/pure-ftpd/ +F: package/python-couchdb/ +F: package/python-cssutils/ +F: package/python-futures/ +F: package/python-mwclient/ +F: package/python-mwscrape/ +F: package/python-mwscrape2slob/ +F: package/python-mako/ +F: package/python-oauthlib/ +F: package/python-pyicu/ +F: package/python-pylru/ +F: package/python-requests-oauthlib/ +F: package/python-slob/ +F: package/rtmpdump/ +F: package/samba4/ +F: package/softether/ +F: package/spandsp/ +F: package/sqlite/ +F: package/stellarium/ +F: package/taglib/ +F: package/tinyxml2/ +F: package/tor/ +F: package/transmission/ +F: package/tvheadend/ +F: package/unixodbc/ +F: package/utf8proc/ +F: package/vdr/ +F: package/vdr-plugin-vnsiserver/ +F: package/vlc/ +F: package/vnstat/ +F: package/waylandpp/ +F: package/x11r7/ +F: package/x264/ +F: package/x265/ +F: package/ytree/ +F: package/znc/ +F: support/testing/tests/package/test_perl_html_parser.py + +N: Biagio Montaruli +F: board/acmesystems/ +F: configs/acmesystems_* + +N: Bilal Wasim +F: board/chromebook/elm/ +F: configs/chromebook_elm_defconfig + +N: Bogdan Radulescu +F: package/iftop/ +F: package/ncdu/ + +N: Brandon Maier +F: package/vmtouch/ + +N: Brock Williams +F: package/pdmenu/ + +N: Carlo Caione +F: package/jailhouse/ +F: package/sunxi-boards/ + +N: Carsten Schoenert +F: package/dvbsnoop/ +F: package/libdvbsi/ +F: package/libsvg/ +F: package/libsvg-cairo/ + +N: Cédric Chépied +F: package/znc/ + +N: Chris Packham +F: package/coremark/ +F: package/coremark-pro/ +F: package/gstreamer1/gst1-shark/ +F: package/micropython/ +F: package/micropython-lib/ +F: package/syslog-ng/ + +N: Christian Kellermann +F: package/python-pylibftdi/ + +N: Christian Stewart +F: package/batman-adv/ +F: package/delve/ +F: package/docker-cli/ +F: package/docker-containerd/ +F: package/docker-engine/ +F: package/docker-proxy/ +F: package/fuse-overlayfs/ +F: package/go/ +F: package/mbpfan/ +F: package/mosh/ +F: package/pkg-golang.mk +F: package/rtl8821au/ +F: package/runc/ +F: package/tini/ + +N: Christophe Priouzeau +F: board/stmicroelectronics/stm32f429-disco/ +F: board/stmicroelectronics/stm32f469-disco/ +F: configs/stm32f429_disco_defconfig +F: configs/stm32f469_disco_defconfig + +N: Christophe Vu-Brugier +F: package/drbd-utils/ +F: package/iotop/ +F: package/python-configshell-fb/ +F: package/python-rtslib-fb/ +F: package/python-urwid/ +F: package/targetcli-fb/ + +N: Christopher McCrory +F: package/perl-appconfig/ +F: package/perl-astro-suntime/ +F: package/perl-class-load/ +F: package/perl-class-std/ +F: package/perl-class-std-fast/ +F: package/perl-data-dump/ +F: package/perl-data-optlist/ +F: package/perl-data-uuid/ +F: package/perl-date-manip/ +F: package/perl-dbd-mysql/ +F: package/perl-dbi/ +F: package/perl-device-serialport/ +F: package/perl-dist-checkconflicts/ +F: package/perl-file-slurp/ +F: package/perl-io-interface/ +F: package/perl-io-socket-multicast/ +F: package/perl-json-maybexs/ +F: package/perl-mime-tools/ +F: package/perl-module-implementation/ +F: package/perl-module-runtime/ +F: package/perl-number-bytes-human/ +F: package/perl-package-stash/ +F: package/perl-params-util/ +F: package/perl-sub-install/ +F: package/perl-sys-cpu/ +F: package/perl-sys-meminfo/ +F: package/perl-sys-mmap/ +F: package/perl-time-parsedate/ +F: package/perl-x10/ + +N: Clayton Shotwell +F: package/audit/ +F: package/checkpolicy/ +F: package/cpio/ +F: package/libcgroup/ +F: package/libee/ +F: package/libestr/ +F: package/liblogging/ +F: package/libselinux/ +F: package/libsemanage/ +F: package/libsepol/ +F: package/policycoreutils/ + +N: Clément Péron +F: board/beelink/gs1/ +F: configs/beelink_gs1_defconfig + +N: Corentin Guillevic +F: package/libloki/ + +N: Cyril Bur +F: arch/Config.in.powerpc +F: package/kvm-unit-tests + +N: Dagg Stompler +F: board/hardkernel/odroidc2/ +F: configs/odroidc2_defconfig +F: package/meson-tools/ +F: package/odroidc2-firmware/ + +N: Daniel J. Leach +F: package/dacapo/ + +N: Damien Lanson +F: package/libvdpau/ +F: package/log4cpp/ + +N: Daniel Nicoletti +F: package/cutelyst/ + +N: Daniel Price +F: package/nodejs/ +F: package/redis/ + +N: Daniel Sangue +F: package/libftdi1/ + +N: Danilo Bargen +F: board/pcengines/apu2/ +F: configs/pcengines_apu2_defconfig + +N: Danomi Manchego +F: package/cjson/ +F: package/jq/ +F: package/libwebsockets/ +F: package/ljsyscall/ +F: package/lua-cjson/ +F: package/luaexpat/ +F: package/xinetd/ + +N: David Bachelart +F: package/ccrypt/ +F: package/dos2unix/ +F: package/ipmiutil/ +F: package/jsmn/ +F: package/python-daemon/ +F: package/sslh/ +F: package/udpxy/ + +N: David Bender +F: package/benejson/ +F: package/cgic/ +F: package/freeradius-client/ +F: package/openldap/ + +N: David du Colombier <0intro@gmail.com> +F: package/x264/ + +N: David GOUARIN +F: package/librelp/ + +N: David Lechner +F: board/lego/ev3/ +F: configs/lego_ev3_defconfig +F: linux/linux-ext-ev3dev-linux-drivers.mk +F: package/brickd/ +F: package/ev3dev-linux-drivers/ + +N: Davide Viti +F: board/friendlyarm/nanopi-r1/ +F: configs/friendlyarm_nanopi_r1_defconfig +F: package/flann/ +F: package/python-paho-mqtt/ +F: package/qhull/ +F: package/tcllib/ + +N: Denis Bodor +F: package/libstrophe/ + +N: Derrick Lyndon Pallas +F: package/ipcalc/ + +N: Dick Olsson +F: package/bearssl/ +F: package/bitcoin/ +F: package/execline/ +F: package/mdevd/ +F: package/s6-dns/ +F: package/s6-linux-init/ +F: package/s6-linux-utils/ +F: package/s6-networking/ +F: package/s6-portable-utils/ +F: package/s6-rc/ +F: package/s6/ +F: package/skalibs/ + +N: Dimitrios Siganos +F: package/wireless-regdb/ + +N: Dominik Faessler +F: package/logsurfer/ +F: package/python-id3/ + +N: Doug Kehn +F: package/nss-pam-ldapd/ +F: package/sp-oops-extract/ +F: package/unscd/ + +N: Dushara Jayasinghe +F: package/prosody/ + +N: Eloi Bail +F: package/bayer2rgb-neon/ +F: package/gstreamer1/gst1-plugins-bayer2rgb-neon/ + +N: Eric Le Bihan +F: docs/manual/adding-packages-meson.txt +F: package/adwaita-icon-theme/ +F: package/darkhttpd/ +F: package/eudev/ +F: package/execline/ +F: package/hicolor-icon-theme/ +F: package/jemalloc/ +F: package/mdevd/ +F: package/meson/ +F: package/ninja/ +F: package/pkg-meson.mk +F: package/rust-bin/ +F: package/rust/ +F: package/s6/ +F: package/s6-dns/ +F: package/s6-linux-init/ +F: package/s6-linux-utils/ +F: package/s6-networking/ +F: package/s6-portable-utils/ +F: package/s6-rc/ +F: package/skalibs/ +F: package/smack/ +F: package/xvisor/ + +N: Eric Limpens +F: package/pifmrds/ +F: package/ympd/ + +N: Erico Nunes +F: board/aarch64-efi/ +F: configs/aarch64_efi_defconfig +F: package/acpica/ +F: package/acpitool/ +F: package/efibootmgr/ +F: package/efivar/ +F: package/fwts/ +F: package/spi-tools/ +F: package/xdotool/ +F: configs/pc_x86_64_* + +N: Erik Larsson +F: package/imx-mkimage/ + +N: Erik Stromdahl +F: package/mxsldr/ + +N: Ernesto L. Williams Jr +F: package/szip/ + +N: Esben Haabendal +F: boot/gummiboot/ +F: package/python-kiwisolver/ + +N: Etienne Carriere +F: boot/optee-os/ +F: package/optee-benchmark/ +F: package/optee-client/ +F: package/optee-examples/ +F: package/optee-test/ + +N: Eugene Tarassov +F: package/tcf-agent/ + +N: Evan Zelkowitz +F: package/sdl_gfx/ + +N: Ezequiel Garcia +F: board/ci20/ +F: configs/ci20_defconfig +F: arch/Config.in.nios2 +F: package/fio/ +F: package/iptraf-ng/ +F: package/jimtcl/ +F: package/mimic/ +F: package/nodm/ +F: package/openbox/ +F: package/rtl8723bs/ +F: package/supertuxkart/ + +N: Fabio Estevam +F: board/freescale/warpboard/ +F: board/warp7/ +F: configs/freescale_imx* +F: configs/imx23evk_defconfig +F: configs/imx6-sabre* +F: configs/imx6slevk_defconfig +F: configs/imx6sx-sdb_defconfig +F: configs/imx6ulevk_defconfig +F: configs/imx6ullevk_defconfig +F: configs/imx6ulpico_defconfig +F: configs/imx7d-sdb_defconfig +F: configs/imx7dpico_defconfig +F: configs/imx8mqevk_defconfig +F: configs/mx25pdk_defconfig +F: configs/mx51evk_defconfig +F: configs/mx53loco_defconfig +F: configs/mx6cubox_defconfig +F: configs/mx6sx_udoo_neo_defconfig +F: configs/mx6udoo_defconfig +F: configs/wandboard_defconfig +F: configs/warp7_defconfig +F: configs/warpboard_defconfig +F: package/atest/ +F: package/kmscube/ + +N: Fabio Porcedda +F: package/netsurf-buildsystem/ + +N: Fabio Urquiza +F: package/bitcoin/ + +N: Fabrice Fontaine +F: package/domoticz/ +F: package/libmediaart/ +F: package/libmaxminddb/ +F: package/openzwave/ + +N: Fabrice Fontaine +F: package/bearssl/ +F: package/belle-sip/ +F: package/belr/ +F: package/boinc/ +F: package/cairo/ +F: package/duktape/ +F: package/expat/ +F: package/flatbuffers/ +F: package/gerbera/ +F: package/gtksourceview/ +F: package/gssdp/ +F: package/gupnp/ +F: package/gupnp-dlna/ +F: package/gupnp-tools/ +F: package/haproxy/ +F: package/hiredis/ +F: package/i2pd/ +F: package/igd2-for-linux/ +F: package/json-c/ +F: package/lcms2/ +F: package/lftp/ +F: package/libcap-ng/ +F: package/libcdio-paranoia/ +F: package/libcgicc/ +F: package/libconfig/ +F: package/libcue/ +F: package/libebml/ +F: package/libgee/ +F: package/libglib2/ +F: package/libgtk2/ +F: package/libgtk3/ +F: package/libhtp/ +F: package/libidn/ +F: package/libidn2/ +F: package/libjpeg/ +F: package/liblockfile/ +F: package/libmatroska/ +F: package/libmpdclient/ +F: package/libnetfilter_conntrack/ +F: package/libnetfilter_queue/ +F: package/libnpupnp/ +F: package/liboping/ +F: package/libpfm4/ +F: package/libraw/ +F: package/libraw1394/ +F: package/libroxml/ +F: package/librsvg/ +F: package/librsync/ +F: package/libsoup/ +F: package/libsoxr/ +F: package/libupnp/ +F: package/libv4l/ +F: package/libxslt/ +F: package/mbedtls/ +F: package/minissdpd/ +F: package/minizip/ +F: package/mongodb/ +F: package/motion/ +F: package/mutt/ +F: package/ncmpc/ +F: package/oniguruma/ +F: package/oprofile/ +F: package/pcmanfm/ +F: package/perl-extutils-pkgconfig/ +F: package/python-backcall/ +F: package/python-jedi/ +F: package/python-parso/ +F: package/python-yatl/ +F: package/rocksdb/ +F: package/rygel/ +F: package/safeclib/ +F: package/suricata/ +F: package/tinycbor/ +F: package/tinydtls/ +F: package/tinymembench/ +F: package/whois/ + +N: Fabrice Goucem +F: board/freescale/imx6ullevk/ +F: configs/freescale_imx6ullevk_defconfig + +N: Falco Hyfing +F: package/python-pymodbus/ + +N: Filip Skoneczny +F: board/sinovoip/m1-plus +F: configs/bananapi_m1_plus_defconfig + +N: Floris Bos +F: package/ipmitool/ +F: package/odhcploc/ + +N: Francisco Gonzalez +F: package/ser2net/ + +N: Francois Perrad +F: board/olimex/a20_olinuxino +F: board/olimex/imx233_olinuxino/ +F: configs/olimex_a20_olinuxino_* +F: configs/olimex_imx233_olinuxino_defconfig +F: package/4th/ +F: package/cgilua/ +F: package/chipmunk/ +F: package/cog/ +F: package/collectl/ +F: package/copas/ +F: package/coxpcall/ +F: package/dado/ +F: package/ficl/ +F: package/libtomcrypt/ +F: package/libtommath/ +F: package/libwpe/ +F: package/linenoise/ +F: package/ljlinenoise/ +F: package/lpeg/ +F: package/lpty/ +F: package/lrandom/ +F: package/lsqlite3/ +F: package/lua* +F: package/lzlib/ +F: package/moarvm/ +F: package/netsurf/ +F: package/perl* +F: package/pkg-perl.mk +F: package/pkg-luarocks.mk +F: package/quickjs/ +F: package/rings/ +F: package/tekui/ +F: package/wpebackend-fdo/ +F: package/wpewebkit/ +F: package/wsapi/ +F: package/wsapi-fcgi/ +F: package/wsapi-xavante/ +F: package/xavante/ +F: support/testing/tests/package/test_lua* +F: utils/scancpan + +N: Frank Hunleth +F: package/am335x-pru-package/ +F: package/libconfuse/ +F: package/libdmtx/ +F: package/libsodium/ +F: package/php-amqp/ +F: package/python-cherrypy/ +F: package/rabbitmq-server/ +F: package/sane-backends/ +F: package/ucl/ +F: package/upx/ +F: package/zxing-cpp/ + +N: Frank Vanbever +F: package/elixir/ +F: package/libmodsecurity/ +F: package/nginx-modsecurity/ + +N: Gaël Portay +F: package/qt5/qt5virtualkeyboard/ +F: package/qt5/qt5webengine/ +F: package/qt5/qt5webkit/ +F: package/qt5/qt5webkit-examples/ + +N: Gao Xiang +F: package/erofs-utils/ + +N: Gary Bisson +F: board/boundarydevices/ +F: configs/nitrogen* +F: package/freescale-imx/ +F: package/gstreamer1/gst1-imx/ +F: package/libimxvpuapi/ +F: package/mfgtools/ +F: package/sshpass/ +F: package/x11r7/xdriver_xf86-video-imx-viv/ + +N: Geoff Levand +F: package/flannel/ + +N: Geoffrey Ragot +F: package/python-pycli/ +F: package/python-pyyaml/ + +N: Gerome Burlats +F: board/qemu/ +F: configs/qemu_* + +N: Gilles Talis +F: board/freescale/imx8mmevk/ +F: configs/freescale_imx8mmevk_defconfig +F: package/cctz/ +F: package/faad2/ +F: package/fdk-aac/ +F: package/httping/ +F: package/iozone/ +F: package/leptonica/ +F: package/libeXosip2/ +F: package/libolm/ +F: package/libosip2/ +F: package/ocrad/ +F: package/opusfile/ +F: package/restclient-cpp/ +F: package/tesseract-ocr/ +F: package/webp/ +F: package/xapian/ + +N: Giulio Benetti +F: package/at/ +F: package/libfuse3/ +F: package/libnspr/ +F: package/libnss/ +F: package/minicom/ +F: package/nfs-utils/ +F: package/sunxi-mali-mainline/ +F: package/sunxi-mali-mainline-driver/ +F: package/udisks/ + +N: Gregory Dymarek +F: package/ding-libs/ +F: package/gengetopt/ +F: package/janus-gateway/ +F: package/libnice/ +F: package/libsrtp/ +F: package/libwebsock/ +F: package/sofia-sip/ + +N: Grzegorz Blach +F: fs/f2fs/ +F: package/bluez5_utils-headers/ +F: package/f2fs-tools/ +F: package/graphicsmagick/ +F: package/pigpio/ +F: package/python-aioblescan/ +F: package/python-bluezero/ +F: package/python-crontab/ +F: package/python-falcon/ +F: package/python-ifaddr/ +F: package/python-hiredis/ +F: package/python-mimeparse/ +F: package/python-pigpio/ +F: package/python-pyjwt/ +F: package/python-redis/ +F: package/python-rpi-ws281x/ +F: package/python-wtforms/ + +N: Guillaume William Brs +F: package/libnids/ +F: package/liquid-dsp/ +F: package/pixiewps/ +F: package/python-pybind/ +F: package/reaver/ + +N: Guo Ren +F: arch/Config.in.csky +F: board/csky/ +F: board/qemu/csky +F: configs/csky_* +F: configs/qemu_csky* + +N: Gustavo Heinz +F: package/python-m2crypto/ + +N: Gustavo Pimentel +F: configs/arm_juno_defconfig +F: board/arm/juno/ + +N: Gwenhael Goavec-Merou +F: package/gnuradio/ +F: package/gqrx/ +F: package/gr-osmosdr/ +F: package/librtlsdr/ +F: package/libusbgx/ +F: package/matio/ +F: package/python-cheetah/ +F: package/python-markdown/ +F: package/python-remi/ +F: package/python-sip/ +F: package/uhd/ + +N: Heiko Thiery +F: package/altera-stapl/ +F: package/ipmitool/ +F: package/libnetconf2/ +F: package/libyang/ +F: package/linuxptp/ +F: package/netopeer2/ +F: package/sysrepo/ + +N: Henrique Camargo +F: package/json-glib/ + +N: Hiroshi Kawashima +F: package/gauche/ +F: package/gmrender-resurrect/ +F: package/squeezelite/ + +N: Horatiu Vultur +F: package/easyframes/ +F: package/mrp/ + +N: Ian Haylock +F: package/python-rpi-gpio/ + +N: Ignacy Gawędzki +F: package/angularjs/ + +N: Ilias Apalodimas +F: package/keepalived/ + +N: Ilya Averyanov +F: package/exempi/ + +N: Ismael Luceno +F: package/axel/ + +N: Jagan Teki +F: board/amarula/ +F: board/asus/ +F: board/bananapi/ +F: board/engicam/ +F: board/friendlyarm/nanopi-a64/ +F: board/friendlyarm/nanopi-neo2/ +F: board/olimex/a33_olinuxino/ +F: board/olimex/a64-olinuxino/ +F: board/orangepi/orangepi-lite2/ +F: board/orangepi/orangepi-one-plus +F: board/orangepi/orangepi-pc2/ +F: board/orangepi/orangepi-prime/ +F: board/orangepi/orangepi-win/ +F: board/orangepi/orangepi-zero-plus2/ +F: board/pine64/ +F: configs/amarula_a64_relic_defconfig +F: configs/amarula_vyasa_rk3288_defconfig +F: configs/asus_tinker_rk3288_defconfig +F: configs/bananapi_m1_defconfig +F: configs/bananapi_m64_defconfig +F: configs/engicam_imx6qdl_icore_defconfig +F: configs/engicam_imx6qdl_icore_qt5_defconfig +F: configs/engicam_imx6qdl_icore_rqs_defconfig +F: configs/engicam_imx6ul_geam_defconfig +F: configs/engicam_imx6ul_isiot_defconfig +F: configs/friendlyarm_nanopi_a64_defconfig +F: configs/friendlyarm_nanopi_neo2_defconfig +F: configs/olimex_a33_olinuxino_defconfig +F: configs/olimex_a64_olinuxino_defconfig +F: configs/orangepi_lite2_defconfig +F: configs/orangepi_one_plus_defconfig +F: configs/orangepi_pc2_defconfig +F: configs/orangepi_prime_defconfig +F: configs/orangepi_win_defconfig +F: configs/orangepi_zero_plus2_defconfig +F: configs/pine64_defconfig +F: configs/pine64_sopine_defconfig + +N: James Hilliard +F: package/apcupsd/ +F: package/exfatprogs/ +F: package/gensio/ +F: package/lua-std-debug/ +F: package/lua-std-normalize/ +F: package/pipewire/ +F: package/python-aioconsole/ +F: package/python-aiodns/ +F: package/python-aiohttp/ +F: package/python-aiohttp-cors/ +F: package/python-aiohttp-debugtoolbar/ +F: package/python-aiohttp-jinja2/ +F: package/python-aiohttp-mako/ +F: package/python-aiohttp-remotes/ +F: package/python-aiohttp-security/ +F: package/python-aiohttp-session/ +F: package/python-aiohttp-sse/ +F: package/python-aiologstash/ +F: package/python-aiomonitor/ +F: package/python-aiojobs/ +F: package/python-aiorwlock/ +F: package/python-aiosignal/ +F: package/python-aiozipkin/ +F: package/python-argon2-cffi/ +F: package/python-async-lru/ +F: package/python-async-timeout/ +F: package/python-brotli/ +F: package/python-cbor2/ +F: package/python-cchardet/ +F: package/python-flatbuffers/ +F: package/python-frozenlist/ +F: package/python-greenlet/ +F: package/python-janus/ +F: package/python-logstash/ +F: package/python-multidict/ +F: package/python-pycares/ +F: package/python-snappy/ +F: package/python-sockjs/ +F: package/python-terminaltables/ +F: package/python-yarl/ + +N: James Knight +F: package/atkmm/ +F: package/cairomm/ +F: package/google-material-design-icons/ +F: package/glibmm/ +F: package/gtkmm3/ +F: package/libpqxx/ +F: package/pangomm/ +F: package/rpm/ +F: package/yad/ + +N: Jan Heylen +F: package/opentracing-cpp/ + +N: Jan Kraval +F: board/orangepi/orangepi-lite +F: configs/orangepi_lite_defconfig + +N: Jan Kundrát +F: configs/solidrun_clearfog_defconfig +F: board/solidrun/clearfog/ +F: package/libnetconf2/ +F: package/libyang/ +F: package/sysrepo/ + +N: Jan Pedersen +F: package/zip/ + +N: Jarkko Sakkinen +F: package/quota/ + +N: Jason Pruitt +F: package/librtlsdr/ + +N: Jean Burgat +F: package/openfpgaloader/ + +N: Jens Kleintje +F: package/gcnano-binaries/ + +N: Jens Rosenboom +F: package/sl/ + +N: Jens Zettelmeyer +F: package/batctl/ + +N: Jeremy Rosen +F: package/fxload/ + +N: Jérôme Oufella +F: package/libdri2/ +F: package/qt-webkit-kiosk/ + +N: Jérôme Pouiller +F: package/apitrace/ +F: package/freescale-imx/gpu-amd-bin-mx51/ +F: package/freescale-imx/libz160/ +F: package/lxc/ +F: package/strongswan/ +F: package/wmctrl/ +F: package/x11r7/xdriver_xf86-video-imx/ +F: package/x11r7/xdriver_xf86-video-imx-viv/ + +N: Jianhui Zhao +F: package/libuhttpd/ +F: package/libuwsc/ +F: package/rtty/ + +N: Joachim Wiberg +F: configs/globalscale_espressobin_defconfig +F: board/globalscale/espressobin/ +F: package/mg/ +F: package/netcalc/ +F: package/ssdp-responder/ +F: package/sysklogd/ + +N: Joao Pinto +F: board/synopsys/vdk/ +F: configs/snps_aarch64_vdk_defconfig + +N: Jochen Baltes +F: package/altera-stapl + +N: Joel Carlson +F: package/c-capnproto/ +F: package/capnproto/ +F: package/cmocka/ +F: package/flatcc/ +F: package/libcorrect/ + +N: Joel Stanley +F: package/pdbg/ +F: board/qemu/ppc64le-pseries/ +F: configs/qemu_ppc64le_pseries_defconfig +F: board/qemu/ppc-mac99/ +F: configs/qemu_ppc_mac99_defconfig + +N: Johan Derycke +F: package/python-libconfig/ + +N: Johan Oudinet +F: package/ejabberd/ +F: package/erlang-base64url/ +F: package/erlang-eimp/ +F: package/erlang-goldrush/ +F: package/erlang-idna/ +F: package/erlang-jiffy/ +F: package/erlang-jose/ +F: package/erlang-lager/ +F: package/erlang-p1-acme/ +F: package/erlang-p1-cache-tab/ +F: package/erlang-p1-mqtree/ +F: package/erlang-p1-oauth2/ +F: package/erlang-p1-pkix/ +F: package/erlang-p1-sip/ +F: package/erlang-p1-stringprep/ +F: package/erlang-p1-stun/ +F: package/erlang-p1-tls/ +F: package/erlang-p1-utils/ +F: package/erlang-p1-xml/ +F: package/erlang-p1-xmpp/ +F: package/erlang-p1-yaml/ +F: package/erlang-p1-yconf/ +F: package/erlang-p1-zlib/ +F: package/nginx-dav-ext/ +F: package/vuejs/ + +N: John Stile +F: package/dhcpcd/ + +N: John Faith +F: package/python-inflection/ +F: package/sdbusplus/ + +N: Jonathan Ben Avraham +F: arch/Config.in.xtensa +F: package/autofs/ +F: package/dawgdic/ +F: package/libphidget/ +F: package/phidgetwebservice/ +F: package/rapidxml/ +F: package/sphinxbase/ + +N: Joris Offouga +F: package/python-colorlog/ +F: package/python-simplelogging/ + +N: Jörg Krause +F: board/lemaker/bananapro/ +F: configs/bananapro_defconfig +F: package/augeas/ +F: package/bluez-alsa/ +F: package/caps/ +F: package/freescale-imx/imx-alsa-plugins/ +F: package/libopusenc/ +F: package/libupnpp/ +F: package/luv/ +F: package/luvi/ +F: package/mpd/ +F: package/shairport-sync/ +F: package/swupdate/ +F: package/upmpdcli/ +F: package/wavemon/ + +N: Joris Lijssens +F: package/emlog/ +F: package/libcoap/ +F: package/libnet/ +F: package/libuio/ +F: package/netsniff-ng/ +F: package/rabbitmq-c/ + +N: Joseph Kogut +F: package/at-spi2-atk/ +F: package/at-spi2-core/ +F: package/clang/ +F: package/earlyoom/ +F: package/gconf/ +F: package/libnss/ +F: package/lld/ +F: package/llvm/ +F: package/python-cython/ +F: package/python-pycups/ +F: package/python-raven/ +F: package/python-schedule/ +F: package/python-sentry-sdk/ +F: package/python-websockets/ +F: package/python-xlib/ +F: package/sentry-cli/ +F: package/sentry-native/ +F: package/unclutter-xfixes/ + +N: Joshua Henderson +F: package/qt5/qt5wayland/ + +N: Jugurtha BELKALEM +F: package/python-aiofiles/ +F: package/python-crayons/ +F: package/python-cycler/ +F: package/python-matplotlib/ +F: package/python-opcua-asyncio/ +F: package/python-piexif/ + +N: Juha Rantanen +F: package/acsccid/ + +N: Julian Scheel +F: package/bitstream/ +F: package/cbootimage/ +F: package/cryptopp/ +F: package/dvblast/ +F: package/tegrarcm/ + +N: Julien Boibessot +F: board/armadeus/ +F: configs/armadeus* +F: package/abootimg/ +F: package/gpm/ +F: package/lbreakout2/ +F: package/libcddb/ +F: package/libmodbus/ +F: package/ltris/ +F: package/opentyrian/ +F: package/python-pygame/ + +N: Julien Corjon +F: package/qt5/ + +N: Julien Grossholtz +F: board/technologic/ts7680/ +F: configs/ts7680_defconfig +F: package/paho-mqtt-c + +N: Julien Olivain +F: board/qmtech/zynq/ +F: board/technexion/imx8mmpico/ +F: board/technexion/imx8mpico/ +F: configs/imx8mmpico_defconfig +F: configs/imx8mpico_defconfig +F: configs/zynq_qmtech_defconfig +F: package/fluid-soundfont/ +F: package/fluidsynth/ +F: package/glslsandbox-player/ +F: package/ptm2human/ +F: package/python-pyalsa/ + +N: Julien Viard de Galbert +F: package/dieharder/ +F: package/easy-rsa/ + +N: Justin Maggard +F: package/dtach/ + +N: Kamel Bouhara +F: package/libodb-boost/ +F: package/libodb-mysql/ + +N: Karoly Kasza +F: package/irqbalance/ +F: package/openvmtools/ + +N: Kelvin Cheung +F: package/cpuload/ +F: package/bwm-ng/ +F: package/ramsmp/ + +N: Kieran Bingham +F: package/libcamera/ + +N: Klaus Heinrich Kiwi +F: package/wqy-zenhei/ + +N: Koen Martens +F: package/capnproto/ +F: package/linuxconsoletools/ + +N: Kurt Van Dijck +F: package/bcusdk/ +F: package/libpthsem/ +F: package/nilfs-utils/ + +N: Laurent Cans +F: package/aircrack-ng/ + +N: Laurent Charpentier +F: package/open-lldp/ + +N: Lee Jones +F: boot/afboot-stm32/ + +N: Leon Anavi +F: board/olimex/a10_olinuxino +F: configs/olimex_a10_olinuxino_lime_defconfig + +N: Leonid Yuriev +F: package/libmdbx/ + +N: Lionel Flandrin +F: package/python-babel/ +F: package/python-daemonize/ +F: package/python-flask/ +F: package/python-flask-babel/ +F: package/python-gunicorn/ + +N: Lionel Orry +F: package/mongrel2/ + +N: Lothar Felten +F: board/bananapi/bananapi-m2-ultra/ +F: board/beaglebone/ +F: configs/bananapi_m2_ultra_defconfig +F: configs/beaglebone_defconfig +F: configs/beaglebone_qt5_defconfig +F: package/ti-sgx-demos/ +F: package/ti-sgx-km/ +F: package/ti-sgx-um/ + +N: Louis Aussedat +F: board/friendlyarm/nanopi-neo-plus2/ +F: configs/friendlyarm_nanopi_neo_plus2_defconfig +F: package/mfoc +F: package/libpam-nfc +F: package/python-dnspython/ +F: package/python-future/ +F: package/python-huepy/ +F: package/python-tqdm/ + +N: Louis-Paul Cordier +F: package/intel-gmmlib/ +F: package/intel-mediadriver/ +F: package/intel-mediasdk/ + +N: Luca Ceresoli +F: board/olimex/a20_olinuxino/ +F: board/zynq/ +F: board/zynqmp/ +F: configs/olimex_a20_olinuxino_* +F: configs/zynq_microzed_defconfig +F: configs/zynq_zed_defconfig +F: configs/zynq_zc706_defconfig +F: configs/zynqmp_zcu106_defconfig +F: package/agentpp/ +F: package/exim/ +F: package/libpjsip/ +F: package/qpid-proton/ +F: package/rtl8188eu/ +F: package/snmppp/ +F: package/stm32flash/ +F: package/unzip/ +F: support/legal-info/ + +N: Lucas De Marchi +F: package/fswebcam/ + +N: Lubomir Rintel +F: board/olpc/ +F: configs/olpc_xo1_defconfig +F: configs/olpc_xo175_defconfig + +N: Ludovic Desroches +F: board/atmel/ +F: board/microchip/ +F: configs/at91* +F: configs/atmel_* +F: configs/microchip_* +F: package/fb-test-app/ +F: package/python-json-schema-validator/ +F: package/python-keyring/ +F: package/python-simplejson/ +F: package/python-versiontools/ +F: package/wilc1000-firmware/ + +N: Maeva Manuel +F: board/freescale/imx8qmmek/ +F: configs/freescale_imx8qmmek_defconfig +F: package/freescale-imx/imx-seco/ + +N: Mahyar Koshkouei +F: package/ffmpeg/ +F: package/mpv/ +F: package/rpi-firmware/ +F: package/rpi-userland/ + +N: Manuel Vögele +F: package/python-pyqt5/ +F: package/python-requests-toolbelt/ + +N: Marcin Bis +F: package/bluez5_utils/ +F: package/cc-tool/ +F: package/ecryptfs-utils/ + +N: Marcin Niestroj +F: board/grinn/ +F: board/orangepi/orangepi-zero-plus/ +F: configs/grinn_* +F: configs/orangepi_zero_plus_defconfig +F: package/argparse/ +F: package/dt-utils/ +F: package/easydbus/ +F: package/lua-flu/ +F: package/lua-stdlib/ +F: package/luaossl/ +F: package/murata-cyw-fw/ +F: package/netdata/ +F: package/python-ansicolors/ +F: package/python-bleak/ +F: package/python-iniconfig/ +F: package/python-intelhex/ +F: package/python-packaging/ +F: package/python-pluggy/ +F: package/python-pytest/ +F: package/python-pytest-asyncio/ +F: package/python-typing-extensions/ +F: package/python-xmodem/ +F: package/rs485conf/ +F: package/turbolua/ +F: support/testing/tests/package/sample_python_pytest.py +F: support/testing/tests/package/sample_python_pytest_asyncio.py +F: support/testing/tests/package/test_netdata.py +F: support/testing/tests/package/test_python_pytest.py +F: support/testing/tests/package/test_python_pytest_asyncio.py + +N: Marcus Folkesson +F: package/libostree/ +F: package/libselinux/ +F: package/libsemanage/ +F: package/libsepol/ +F: package/selinux-python/ +F: utils/config +F: utils/diffconfig + +N: Marek Belisko +F: board/friendlyarm/nanopi-neo4/ +F: configs/friendlyarm_nanopi_neo4_defconfig +F: package/libatasmart/ +F: package/polkit/ +F: package/sg3_utils/ +F: package/udisks/ + +N: Mario Lang +F: package/brltty/ +F: package/lynx/ + +N: Mario Rugiero +F: package/ratpoison/ + +N: Mark Corbin +F: arch/arch.mk.riscv +F: arch/Config.in.riscv +F: board/qemu/riscv32-virt/ +F: board/qemu/riscv64-virt/ +F: configs/qemu_riscv32_virt_defconfig +F: configs/qemu_riscv64_virt_defconfig + +N: Martin Bark +F: board/raspberrypi/ +F: configs/raspberrypi3_defconfig +F: package/ca-certificates/ +F: package/connman/ +F: package/nodejs/ +F: package/rpi-bt-firmware/ +F: package/rpi-firmware/ +F: package/rpi-wifi-firmware/ +F: package/tzdata/ +F: package/zic/ + +N: Martin Hicks +F: package/cryptsetup/ + +N: Martin Kepplinger +F: package/tslib/ +F: package/x11r7/xdriver_xf86-input-tslib/ +F: package/x11vnc/ + +N: Masahiro Yamada +F: board/arm/foundation-v8/ +F: configs/arm_foundationv8_defconfig + +N: Mathieu Audat +F: board/technologic/ts4900/ +F: configs/ts4900_defconfig +F: package/ts4900-fpga/ + +N: Matt Weber +F: board/freescale/p* +F: board/freescale/t* +F: board/qemu/ppc64-e5500/ +F: configs/freescale_p* +F: configs/freescale_t* +F: configs/qemu_ppc64_e5500_defconfig +F: package/argp-standalone/ +F: package/aufs/ +F: package/aufs-util/ +F: package/bc/ +F: package/bridge-utils/ +F: package/checkpolicy/ +F: package/checksec/ +F: package/cgroupfs-mount/ +F: package/crda/ +F: package/cunit/ +F: package/dacapo/ +F: package/davici/ +F: package/dnsmasq/ +F: package/dosfstools/ +F: package/eigen/ +F: package/ethtool/ +F: package/flashbench/ +F: package/fmc/ +F: package/fmlib/ +F: package/git/ +F: package/gnutls/ +F: package/hostapd/ +F: package/i2c-tools/ +F: package/ifplugd/ +F: package/igmpproxy/ +F: package/iperf/ +F: package/iperf3/ +F: package/iputils/ +F: package/iw/ +F: package/jitterentropy-library/ +F: package/kvm-unit-tests/ +F: package/kvmtool/ +F: package/libcsv/ +F: package/libcurl/ +F: package/libeastl/ +F: package/libfcgi/ +F: package/libopenssl/ +F: package/libselinux/ +F: package/libsemanage/ +F: package/libsepol/ +F: package/libssh2/ +F: package/libqmi/ +F: package/lighttpd/ +F: package/logrotate/ +F: package/makedevs/ +F: package/memtester/ +F: package/mii-diag/ +F: package/mrouted/ +F: package/mtd/ +F: package/mtools/ +F: package/nginx-upload/ +F: package/omniorb/ +F: package/openresolv/ +F: package/paxtest/ +F: package/picocom/ +F: package/policycoreutils/ +F: package/proftpd/ +F: package/protobuf-c/ +F: package/protobuf/ +F: package/python-bunch/ +F: package/python-colorama/ +F: package/python-filelock/ +F: package/python-flask-cors/ +F: package/python-iptables/ +F: package/python-ipy/ +F: package/python-posix-ipc/ +F: package/python-pycairo/ +F: package/python-pypcap/ +F: package/python-pyrex/ +F: package/python-pysftp/ +F: package/python-tinyrpc/ +F: package/python-txdbus/ +F: package/qoriq-rcw/ +F: package/raptor/ +F: package/rng-tools/ +F: package/rsyslog/ +F: package/setools/ +F: package/smcroute/ +F: package/tclap/ +F: package/tini/ +F: package/uboot-tools/ +F: package/unionfs/ +F: package/valijson/ +F: package/wpa_supplicant/ +F: package/wireless_tools/ +F: package/xen/ +F: support/testing/tests/package/br2-external/openjdk/ +F: support/testing/tests/package/test_openjdk.py +F: support/testing/tests/package/test_opkg/ +F: support/testing/tests/package/test_opkg.py + +N: Mauro Condarelli +F: package/mc/ +F: package/python-autobahn/ +F: package/python-cbor/ +F: package/python-characteristic/ +F: package/python-click/ +F: package/python-crossbar/ +F: package/python-lmdb/ +F: package/python-mistune/ +F: package/python-netaddr/ +F: package/python-pygments/ +F: package/python-pynacl/ +F: package/python-pytrie/ +F: package/python-service-identity/ +F: package/python-setproctitle/ +F: package/python-shutilwhich/ +F: package/python-treq/ +F: package/python-txaio/ +F: package/python-ujson/ +F: package/python-wsaccel/ + +N: Max Filippov +F: arch/Config.in.xtensa + +N: Maxim Kochetkov +F: package/timescaledb/ + +N: Maxime Hadjinlian +F: package/babeld/ +F: package/dante/ +F: package/faifa/ +F: package/initscripts/ +F: package/intel-microcode/ +F: package/iucode-tool/ +F: package/jasper/ +F: package/kodi/ +F: package/libass/ +F: package/libbluray/ +F: package/libcdio/ +F: package/libcofi/ +F: package/libenca/ +F: package/libmodplug/ +F: package/libnfs/ +F: package/libplist/ +F: package/libshairplay/ +F: package/linux-zigbee/ +F: package/netcat-openbsd/ +F: package/open-plc-utils/ +F: package/rpi-firmware/ +F: package/rpi-userland/ +F: package/rtmpdump/ +F: package/skeleton/ +F: package/systemd/ +F: package/systemd-bootchart/ +F: package/tinyalsa/ +F: package/tinyxml/ + +N: Michael Durrant +F: board/arcturus/ +F: configs/arcturus_ucp1020_defconfig +F: configs/arcturus_ucls1012a_defconfig + +N: Michael Fischer +F: package/gnuplot/ +F: package/sdl2/ + +N: Michael Nosthoff +F: package/grpc/ +F: package/gtest/ +F: package/libabseil-cpp/ +F: package/protobuf/ +F: package/re2/ + +N: Michael Rommel +F: package/knock/ +F: package/python-crc16/ +F: package/python-pyzmq/ + +N: Michael Trimarchi +F: package/python-spidev/ + +N: Michael Vetter +F: package/jasper/ +F: package/libstrophe/ + +N: Michael Walle +F: board/kontron/smarc-sal28/ +F: configs/kontron_smarc_sal28_defconfig +F: package/libavl/ +F: package/rcw-smarc-sal28/ + +N: Michał Łyszczek +F: board/altera/socrates_cyclone5/ +F: board/pine64/rock64 +F: configs/rock64_defconfig +F: configs/socrates_cyclone5_defconfig +F: package/netifrc/ +F: package/openrc/ +F: package/skeleton-init-openrc/ + +N: Michel Stempin +F: board/licheepi/ +F: configs/licheepi_zero_defconfig + +N: Mike Frampton +F: package/qcom-db410c-firmware/ + +N: Mike Harmony +F: board/sinovoip/m2-plus/ +F: configs/bananapi_m2_plus_defconfig + +N: Mikhail Boiko +F: package/libfribidi/ + +N: Min Xu +F: package/shadowsocks-libev/ + +N: Mircea Gliga +F: package/mbuffer/ + +N: Mirza Krak +F: package/mender/ +F: package/mender-artifact/ + +N: Murat Demirten +F: package/jpeg-turbo/ +F: package/libgeotiff/ + +N: Mylène Josserand +F: package/rtl8723bu/ + +N: Nathaniel Roach +F: package/bandwidthd/ +F: package/libgudev/ + +N: Naumann Andreas +F: package/evemu/ +F: package/libevdev/ +F: package/pkg-qmake.mk + +N: Nicola Di Lieto +F: package/uacme/ + +N: Nicholas Sielicki +F: board/intel/galileo/ +F: configs/galileo_defconfig + +N: Nicolas Carrier +F: package/php-xdebug/ + +N: Nicolas Cavallari +F: package/libgit2/ + +N: Nicolas Serafini +F: package/exiv2/ +F: package/ofono/ + +N: Nikolay Dimitrov +F: board/embest/riotboard/ +F: configs/riotboard_defconfig + +N: Nimai Mahajan +F: package/libucl/ + +N: Noé Rubinstein +F: package/tpm-tools/ +F: package/trousers/ + +N: Norbert Lange +F: package/systemd/ +F: package/tcf-agent/ + +N: Nylon Chen +F: arch/Config.in.nds32 +F: board/andes +F: configs/andes_ae3xx_defconfig +F: toolchain/toolchain-external/toolchain-external-andes-nds32/ + +N: Olaf Rempel +F: package/ctorrent/ + +N: Oleksandr Zhadan +F: board/arcturus/ +F: configs/arcturus_ucp1020_defconfig +F: configs/arcturus_ucls1012a_defconfig + +N: Oli Vogt +F: package/python-django/ +F: package/python-flup/ + +N: Olivier Matz +F: package/python-pyelftools/ + +N: Olivier Schonken +F: package/cups/ +F: package/cups-filters/ +F: package/ijs/ +F: package/poppler/ +F: package/qpdf/ +F: package/openjpeg/ + +N: Olivier Singla +F: package/shellinabox/ + +N: Parnell Springmeyer +F: package/scrypt/ + +N: Pascal de Bruijn +F: package/libargon2/ +F: package/linux-tools/S10hyperv +F: package/linux-tools/hyperv*.service +F: package/linux-tools/linux-tool-hv.mk.in + +N: Pascal Huerst +F: package/google-breakpad/ + +N: Patrick Gerber +F: package/yavta/ + +N: Patrick Havelange +F: support/testing/tests/package/test_lxc.py +F: support/testing/tests/package/test_lxc/ + +N: Paul Cercueil +F: package/libiio/ +F: package/lightning/ +F: package/umtprd/ + +N: Pedro Aguilar +F: package/libunistring/ + +N: Peter Korsgaard +F: board/arrow/avenger96/ +F: board/beagleboneai/ +F: board/minnowboard/ +F: board/librecomputer/lafrite/ +F: board/nexbox/a95x/ +F: board/openblocks/a6/ +F: board/orangepi/ +F: board/pandaboard/ +F: board/roseapplepi/ +F: boot/shim/ +F: configs/avenger96_defconfig +F: configs/beagleboneai_defconfig +F: configs/lafrite_defconfig +F: configs/minnowboard_max-graphical_defconfig +F: configs/minnowboard_max_defconfig +F: configs/nexbox_a95x_defconfig +F: configs/openblocks_a6_defconfig +F: configs/orangepi_pc_defconfig +F: configs/orangepi_r1_defconfig +F: configs/pandaboard_defconfig +F: configs/roseapplepi_defconfig +F: configs/sheevaplug_defconfig +F: package/bats-core/ +F: package/docker-compose/ +F: package/dump1090/ +F: package/fatcat/ +F: package/flickcurl/ +F: package/fscryptctl/ +F: package/ifmetric/ +F: package/jo/ +F: package/jose/ +F: package/libfastjson/ +F: package/luksmeta/ +F: package/lzop/ +F: package/memtool/ +F: package/mosquitto/ +F: package/python-alsaaudio/ +F: package/python-backports-ssl-match-hostname/ +F: package/python-cached-property/ +F: package/python-docker/ +F: package/python-dockerpty/ +F: package/python-docker-pycreds/ +F: package/python-enum/ +F: package/python-enum34/ +F: package/python-functools32/ +F: package/python-ipaddr/ +F: package/python-pam/ +F: package/python-psutil/ +F: package/python-request-id/ +F: package/python-semver/ +F: package/python-texttable/ +F: package/python-validators/ +F: package/python-webob/ +F: package/python-websocket-client/ +F: package/sedutil/ +F: package/tpm2-totp/ +F: package/triggerhappy/ +F: package/wireguard-linux-compat/ +F: package/wireguard-tools/ +F: support/testing/tests/package/test_docker_compose.py + +N: Peter Seiderer +F: board/raspberrypi/ +F: configs/raspberrypi*_defconfig +F: package/assimp/ +F: package/bcm2835/ +F: package/ddrescue/ +F: package/dejavu/ +F: package/dillo/ +F: package/edid-decode/ +F: package/ell/ +F: package/ghostscript-fonts/ +F: package/gstreamer1/gst1-devtools/ +F: package/gstreamer1/gst1-interpipe/ +F: package/gstreamer1/gstreamer1-editing-services/ +F: package/iwd/ +F: package/libevdev/ +F: package/libuev/ +F: package/log4cplus/ +F: package/postgresql/ +F: package/python-colorzero/ +F: package/python-gpiozero/ +F: package/qt5/ +F: package/quotatool/ +F: package/racehound/ +F: package/redir/ +F: package/uredir/ +F: package/wayland-utils/ + +N: Peter Thompson +F: package/sdl2_gfx/ +F: package/sdl2_image/ +F: package/sdl2_ttf/ + +N: Petr Kulhavy +F: package/linuxptp/ + +N: Petr Vorel +F: package/ima-evm-utils/ +F: package/iproute2/ +F: package/iputils/ +F: package/libtirpc/ +F: package/linux-backports/ +F: package/ltp-testsuite/ +F: package/nfs-utils/ +F: package/rpcbind/ +F: support/kconfig/ + +N: Phil Eichinger +F: package/libqrencode/ +F: package/psplash/ +F: package/sispmctl/ +F: package/zsh/ + +N: Philipp Richter +F: package/libtorrent-rasterbar/ + +N: Philippe Proulx +F: package/babeltrace2/ +F: package/lttng-babeltrace/ +F: package/lttng-libust/ +F: package/lttng-modules/ +F: package/lttng-tools/ +F: package/python-ipython/ +F: package/liburcu/ + +N: Philippe Reynes +F: package/ibm-sw-tpm2/ + +N: Pierre Crokaert +F: board/hardkernel/odroidxu4/ +F: configs/odroidxu4_defconfig + +N: Pierre Ducroquet +F: package/kf5/ + +N: Pierre Floury +F: package/trace-cmd/ + +N: Pierre-Jean Texier +F: package/fping/ +F: package/genimage/ +F: package/haveged/ +F: package/ipset/ +F: package/libarchive/ +F: package/libevent/ +F: package/libubootenv/ +F: package/libxml2/ +F: package/mongoose/ +F: package/mxml/ +F: package/numactl/ +F: package/python-modbus-tk/ +F: package/python-periphery/ +F: package/raspi-gpio/ +F: package/sbc/ +F: package/stunnel/ +F: package/tree/ + +N: Pieter De Gendt +F: package/libvips/ + +N: Pieterjan Camerlynck +F: package/libdvbpsi/ +F: package/mraa/ +F: package/synergy/ + +N: Rafal Susz +F: board/avnet/s6lx9_microboard/ +F: configs/s6lx9_microboard_defconfig + +N: Rahul Bedarkar +F: package/cxxtest/ +F: package/gflags/ +F: package/glog/ +F: package/gssdp/ +F: package/gupnp/ +F: package/gupnp-av/ +F: package/let-me-create/ +F: package/nanomsg/ + +N: Ramon Fried +F: package/bitwise/ + +N: Raphaël Mélotte +F: package/jbig2dec/ +F: package/python-boto3/ +F: package/python-botocore/ +F: package/python-jmespath/ +F: package/python-s3transfer/ + +N: Refik Tuzakli +F: package/freescale-imx/ +F: package/paho-mqtt-cpp/ + +N: Rémi Rérolle +F: package/libfreeimage/ + +N: Renaud Aubin +F: package/libhttpparser/ + +N: Ricardo Martincoski +F: package/atop/ +F: package/thermald/ + +N: Ricardo Martincoski +F: support/testing/infra/ +F: support/testing/run-tests +F: support/testing/tests/core/test_file_capabilities.py +F: support/testing/tests/download/ +F: support/testing/tests/package/*_python*.py +F: support/testing/tests/package/test_atop.py +F: support/testing/tests/package/test_syslog_ng.py +F: support/testing/tests/package/test_tmux.py +F: support/testing/tests/utils/test_check_package.py +F: utils/check-package +F: utils/checkpackagelib/ + +N: Richard Braun +F: package/curlftpfs/ +F: package/tzdata/ + +N: RJ Ascani +F: package/azmq/ + +N: Robert Rose +F: package/grpc/ + +N: Rodrigo Rebello +F: package/chocolate-doom/ +F: package/irssi/ +F: package/vnstat/ + +N: Romain Naour +F: board/qemu/ +F: configs/qemu_* +F: package/alure/ +F: package/aubio/ +F: package/binutils/ +F: package/bullet/ +F: package/clang/ +F: package/clinfo/ +F: package/efl/ +F: package/enet/ +F: package/enlightenment/ +F: package/flare-engine/ +F: package/flare-game/ +F: package/gcc/ +F: package/glibc/ +F: package/irrlicht/ +F: package/liblinear/ +F: package/lensfun/ +F: package/libclc/ +F: package/libgta/ +F: package/libiec61850/ +F: package/libspatialindex/ +F: package/linux-syscall-support/ +F: package/llvm/ +F: package/lugaru/ +F: package/mcelog/ +F: package/mesa3d/ +F: package/minetest/ +F: package/minetest-game/ +F: package/ogre/ +F: package/openpowerlink/ +F: package/physfs/ +F: package/piglit/ +F: package/qemu/ +F: package/solarus/ +F: package/stress-ng/ +F: package/supertux/ +F: package/supertuxkart/ +F: package/terminology/ +F: package/tk/ +F: package/upower/ +F: package/waffle/ +F: package/xenomai/ +F: package/zziplib/ +F: support/testing/tests/package/test_glxinfo.py +F: support/testing/tests/package/test_openssh.py +F: toolchain/ + +N: Roman Gorbenkov +F: package/davfs2/ + +N: Ryan Barnett +F: package/atftp/ +F: package/c-periphery/ +F: package/miraclecast/ +F: package/opkg/ +F: package/opkg-utils/ +F: package/python-pysnmp/ +F: package/python-pysnmp-mibs/ +F: package/python-tornado/ +F: package/resiprocate/ +F: package/websocketpp/ + +N: Ryan Wilkins +F: package/biosdevname/ + +N: Sam Lancia +F: package/lrzip/ + +N: Samuel Martin +F: package/armadillo/ +F: package/canfestival/ +F: package/clapack/ +F: package/cwiid/ +F: package/flite/ +F: package/nginx/ +F: package/opencv3/ +F: package/openobex/ +F: package/pkg-cmake.mk +F: package/python-numpy/ +F: package/scrub/ +F: package/urg/ +F: package/ussp-push/ +F: support/misc/toolchainfile.cmake.in + +N: Sam Voss +F: package/ripgrep/ + +N: Santosh Multhalli +F: package/valijson/ + +N: Sébastien Szymanski +F: package/mmc-utils/ +F: package/python-flask-jsonrpc/ +F: package/python-flask-login/ +F: package/qt5/qt5charts/ + +N: Semyon Kolganov +F: package/fmt/ +F: package/libbson/ +F: package/lua-resty-http/ +F: package/mpir/ + +N: Sergey Matyukevich +F: boot/arm-trusted-firmware/ +F: board/linksprite/pcduino +F: board/orangepi/orangepi-zero +F: board/orangepi/orangepi-one +F: board/orangepi/orangepi-pc-plus/ +F: configs/linksprite_pcduino_defconfig +F: configs/orangepi_one_defconfig +F: configs/orangepi_pc_plus_defconfig +F: configs/orangepi_zero_defconfig +F: package/armbian-firmware/ +F: package/hostapd/ +F: package/rtl8189fs/ +F: package/wpa_supplicant/ +F: package/xr819-xradio/ + +N: Sergio Prado +F: board/toradex/apalis-imx6/ +F: configs/toradex_apalis_imx6_defconfig +F: package/aoetools/ +F: package/asn1c/ +F: package/azure-iot-sdk-c/ +F: package/curlpp/ +F: package/daq/ +F: package/libgdiplus/ +F: package/pimd/ +F: package/snort/ +F: package/stella/ +F: package/tio/ +F: package/traceroute/ +F: package/tunctl/ +F: package/ubus/ +F: package/wolfssl/ + +N: Shyam Saini +F: package/cukinia/ + +N: Simon Dawson +F: boot/at91bootstrap3/ +F: package/cppzmq/ +F: package/czmq/ +F: package/filemq/ +F: package/googlefontdirectory/ +F: package/jansson/ +F: package/jquery-ui/ +F: package/jquery-ui-themes/ +F: package/json-javascript/ +F: package/lcdapi/ +F: package/libfreefare/ +F: package/libjson/ +F: package/libnfc/ +F: package/libnfc/ +F: package/libserial/ +F: package/libsigsegv/ +F: package/macchanger/ +F: package/minicom/ +F: package/minidlna/ +F: package/msgpack/ +F: package/nanocom/ +F: package/neard/ +F: package/neardal/ +F: package/owl-linux/ +F: package/python-nfc/ +F: package/rapidjson/ +F: package/sconeserver/ +F: package/sound-theme-borealis/ +F: package/sound-theme-freedesktop/ +F: package/vlc/ +F: package/xscreensaver/ +F: package/zmqpp/ +F: package/zyre/ + +N: Spenser Gilliland +F: arch/Config.in.microblaze +F: package/a10disp/ +F: package/glmark2/ +F: package/libvpx/ +F: package/mesa3d-demos/ +F: package/ti-gfx/ + +N: Stefan Ott +F: package/unbound/ + +N: Stefan Sørensen +F: package/cracklib/ +F: package/libpwquality/ +F: package/libscrypt/ + +N: Stephan Hoffmann +F: package/cache-calibrator/ +F: package/gtest/ +F: package/libhttpserver/ +F: package/mtdev/ + +N: Stephane Viau +F: board/freescale/imx8mnevk/ +F: configs/freescale_imx8mnevk_defconfig + +N: Steve Calfee +F: package/python-pymysql/ +F: package/python-pyratemp/ + +N: Steve James +F: package/leveldb/ +F: package/libcli/ + +N: Steve Kenton +F: package/dvdauthor/ +F: package/dvdrw-tools/ +F: package/memtest86/ +F: package/mjpegtools/ +F: package/tovid/ +F: package/udftools/ +F: package/xorriso/ + +N: Steven Noonan +F: package/hwloc/ +F: package/powertop/ + +N: Suniel Mahesh +F: board/firefly/ +F: board/friendlyarm/nanopc-t4 +F: board/friendlyarm/nanopi-m4 +F: board/orangepi/orangepi-rk3399 +F: board/pine64/rockpro64 +F: board/radxa/rockpi-4 +F: board/radxa/rockpi-n8 +F: board/radxa/rockpi-n10 +F: configs/friendlyarm_nanopc_t4_defconfig +F: configs/friendlyarm_nanopi_m4_defconfig +F: configs/orangepi_rk3399_defconfig +F: configs/roc_pc_rk3399_defconfig +F: configs/rock_pi_4_defconfig +F: configs/rock_pi_n8_defconfig +F: configs/rock_pi_n10_defconfig +F: configs/rockpro64_defconfig +F: package/arm-gnu-a-toolchain/ + +N: Sven Fischer +F: package/qt5/qt5remoteobjects/ + +N: Sven Haardiek +F: package/lcdproc/ +F: package/python-influxdb/ + +N: Sven Oliver Moll +F: package/most/ + +N: Theo Debrouwere +F: board/beagleboardx15/ +F: configs/beagleboardx15_defconfig +F: package/pugixml/ + +N: Thierry Bultel +F: package/mpd-mpc/ + +N: Thijs Vermeir +F: package/ranger/ +F: package/x265/ + +N: Thomas Claveirole +F: package/fcgiwrap/ +F: package/openlayers/ + +N: Thomas De Schampheleire +F: docs/manual/ +F: package/cereal/ +F: package/chartjs/ +F: package/datatables/ +F: package/datatables-buttons/ +F: package/datatables-fixedcolumns/ +F: package/datatables-responsive/ +F: package/jszip/ +F: package/libtelnet/ +F: package/opkg-utils/ +F: package/perl-convert-asn1/ +F: package/perl-crypt-blowfish/ +F: package/perl-crypt-cbc/ +F: package/perl-crypt-openssl-aes/ +F: package/perl-devel-cycle/ +F: package/perl-devel-size/ +F: package/perl-i18n/ +F: package/perl-locale-maketext-lexicon/ +F: package/perl-lwp-protocol-https/ +F: package/perl-math-int64/ +F: package/perl-math-prime-util/ +F: package/perl-mime-base64-urlsafe/ +F: package/perl-mojolicious-plugin-authentication/ +F: package/perl-mojolicious-plugin-authorization/ +F: package/perl-mojolicious-plugin-cspheader/ +F: package/perl-mojolicious-plugin-i18n/ +F: package/perl-mojolicious-plugin-securityheader/ +F: package/perl-mozilla-ca/ +F: package/perl-net-snmp/ +F: package/perl-net-ssh2/ +F: package/perl-net-telnet/ +F: package/perl-path-class/ +F: package/pigz/ +F: package/popperjs/ +F: package/xenomai/ +F: support/scripts/size-stats +F: support/testing/tests/package/test_perl_lwp_protocol_https.py +F: utils/size-stats-compare +F: toolchain/ + +N: Thomas Huth +F: package/ascii-invaders/ +F: package/frotz/ +F: package/xorcurses/ + +N: Thomas Petazzoni +F: arch/Config.in.arm +F: board/stmicroelectronics/stm32mp157c-dk2/ +F: boot/boot-wrapper-aarch64/ +F: boot/grub2/ +F: boot/gummiboot/ +F: configs/stm32mp157c_dk2_defconfig +F: package/android-tools/ +F: package/b43-firmware/ +F: package/b43-fwcutter/ +F: package/c-periphery/ +F: package/cdrkit/ +F: package/cifs-utils/ +F: package/cloop/ +F: package/cmake/ +F: package/cramfs/ +F: package/dmidecode/ +F: package/flashrom/ +F: package/gcc/ +F: package/genext2fs/ +F: package/genromfs/ +F: package/getent/ +F: package/gnu-efi/ +F: package/heirloom-mailx/ +F: package/hiawatha/ +F: package/igh-ethercat/ +F: package/intltool/ +F: package/libcap/ +F: package/libffi/ +F: package/libsha1/ +F: package/libtirpc/ +F: package/libxkbcommon/ +F: package/libxml-parser-perl/ +F: package/localedef/ +F: package/log4cxx/ +F: package/monit/ +F: package/mpdecimal/ +F: package/msmtp/ +F: package/musl/ +F: package/musl-fts/ +F: package/ne10/ +F: package/pkg-python.mk +F: package/pkg-autotools.mk +F: package/pkg-generic.mk +F: package/python/ +F: package/python3/ +F: package/python-mad/ +F: package/python-serial/ +F: package/qextserialport/ +F: package/rpcbind/ +F: package/rt-tests/ +F: package/rtc-tools/ +F: package/sam-ba/ +F: package/scons/ +F: package/squashfs/ +F: package/wayland/ +F: package/weston/ +F: support/testing/tests/boot/test_syslinux.py +F: toolchain/ + +N: Timo Ketola +F: package/fbgrab/ + +N: Titouan Christophe +F: package/avro-c/ +F: package/mosquitto/ +F: package/python-avro/ +F: package/redis/ +F: package/waf/ +F: support/testing/tests/package/test_crudini.py +F: support/testing/tests/package/test_redis.py + +N: Tudor Holton +F: package/openjdk/ + +N: Tzu-Jung Lee +F: package/dropwatch/ +F: package/tstools/ + +N: Vadim Kochan +F: package/brcm-patchram-plus/ +F: package/frr/ +F: package/gettext-tiny/ +F: package/tinyssh/ + +N: Valentin Korenblit +F: package/clang/ +F: package/clinfo/ +F: package/libclc/ +F: package/llvm/ + +N: Vanya Sergeev +F: package/lua-periphery/ + +N: Victor Huesca +F: support/testing/tests/core/test_root_password.py + +N: Vincent Prince +F: package/nss-myhostname/ +F: package/utp_com/ + +N: Vincent Stehlé +F: board/bananapi/bananapi-m2-zero/ +F: configs/bananapi_m2_zero_defconfig +F: package/i7z/ +F: package/msr-tools/ +F: package/pixz/ + +N: Vinicius Tinti +F: package/python-thrift/ + +N: Vivien Didelot +F: board/technologic/ts5500/ +F: configs/ts5500_defconfig + +N: Volkov Viacheslav +F: package/v4l2grab/ +F: package/zbar/ + +N: Wade Berrier +F: package/ngrep/ + +N: Waldemar Brodkorb +F: package/mksh/ +F: package/ruby/ +F: package/uclibc/ +F: package/uclibc-ng-test/ + +N: Will Newton +F: package/enchant/ +F: package/erlang/ +F: package/libmicrohttpd/ +F: package/sysprof/ +F: package/time/ + +N: Will Wagner +F: package/yaffs2utils/ + +N: Wojciech M. Zabolotny +F: package/avrdude/ +F: package/jack2/ +F: package/python-msgpack/ +F: package/python-pyusb/ + +N: Wojciech Niziński +F: package/fwup/ + +N: Yair Ben Avraham +F: package/casync/ +F: package/gloox/ +F: package/tpm2-pkcs11/ + +N: Yann E. MORIN +F: board/friendlyarm/nanopi-neo/ +F: configs/friendlyarm_nanopi_neo_defconfig +F: fs/squashfs/ +F: package/asterisk/ +F: package/cegui/ +F: package/dahdi-linux/ +F: package/dahdi-tools/ +F: package/dtc/ +F: package/dtv-scan-tables/ +F: package/dvb-apps/ +F: package/freerdp/ +F: package/keyutils/ +F: package/libbsd/ +F: package/libedit/ +F: package/libgsm/ +F: package/libiberty/ +F: package/libinput/ +F: package/libiscsi/ +F: package/libpri/ +F: package/libseccomp/ +F: package/libss7/ +F: package/linux-firmware/ +F: package/linux-tools/ +F: package/matchbox* +F: package/mesa3d-headers/ +F: package/nbd/ +F: package/nut/ +F: package/nvidia-driver/ +F: package/omxplayer/ +F: package/python-pyparsing/ +F: package/pkg-download.mk +F: package/pkg-waf.mk +F: package/slirp/ +F: package/snappy/ +F: package/spice/ +F: package/spice-protocol/ +F: package/systemd/ +F: package/systemd-bootchart/ +F: package/tmux/ +F: package/tvheadend/ +F: package/usbredir/ +F: package/vde2/ +F: package/w_scan/ +F: package/wayland/ +F: package/weston/ +F: package/zisofs-tools/ +F: support/download/ + +N: Yegor Yefremov +F: configs/beaglebone_defconfig +F: configs/beaglebone_qt5_defconfig +F: package/acl/ +F: package/attr/ +F: package/boost/ +F: package/bootstrap/ +F: package/cannelloni/ +F: package/can-utils/ +F: package/circus/ +F: package/dhcpcd/ +F: package/feh/ +F: package/giblib/ +F: package/imlib2/ +F: package/jquery-datetimepicker/ +F: package/jquery-sidebar/ +F: package/kmod/ +F: package/libftdi1/ +F: package/libical/ +F: package/libmbim/ +F: package/libndp/ +F: package/libnftnl/ +F: package/libsoc/ +F: package/libsocketcan/ +F: package/libubox/ +F: package/libuci/ +F: package/linux-firmware/ +F: package/linux-serial-test/ +F: package/modem-manager/ +F: package/nftables/ +F: package/nuttcp/ +F: package/parted/ +F: package/phytool/ +F: package/poco/ +F: package/python* +F: package/ser2net/ +F: package/socketcand/ +F: package/swig/ +F: package/qt5/qt5serialbus/ +F: package/sdparm/ +F: package/ti-utils/ +F: package/x11r7/xapp_xconsole/ +F: package/x11r7/xapp_xinput-calibrator/ +F: package/zlog/ +F: support/testing/tests/package/test_libftdi1.py +F: support/testing/tests/package/test_python_can.py +F: utils/scanpypi + +N: Zoltan Gyarmati +F: package/crudini/ +F: package/grantlee/ +F: package/libusb/ +F: package/libusb-compat/ +F: package/proj/ +F: package/python-configobj/ +F: package/python-iniparse/ +F: package/qjson/ +F: package/quazip/ +F: package/shapelib/ +F: package/tinc/ diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..fbd9e57c --- /dev/null +++ b/Makefile @@ -0,0 +1,1279 @@ +# Makefile for buildroot +# +# Copyright (C) 1999-2005 by Erik Andersen +# Copyright (C) 2006-2014 by the Buildroot developers +# Copyright (C) 2014-2020 by the Buildroot developers +# +# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +#-------------------------------------------------------------- +# Just run 'make menuconfig', configure stuff, then run 'make'. +# You shouldn't need to mess with anything beyond this point... +#-------------------------------------------------------------- + +# Delete default rules. We don't use them. This saves a bit of time. +.SUFFIXES: + +# we want bash as shell +SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ + else if [ -x /bin/bash ]; then echo /bin/bash; \ + else echo sh; fi; fi) + +# Set O variable if not already done on the command line; +# or avoid confusing packages that can use the O= syntax for out-of-tree +# build by preventing it from being forwarded to sub-make calls. +ifneq ("$(origin O)", "command line") +O := $(CURDIR)/output +endif + +# Check if the current Buildroot execution meets all the pre-requisites. +# If they are not met, Buildroot will actually do its job in a sub-make meeting +# its pre-requisites, which are: +# 1- Permissive enough umask: +# Wrong or too restrictive umask will prevent Buildroot and packages from +# creating files and directories. +# 2- Absolute canonical CWD (i.e. $(CURDIR)): +# Otherwise, some packages will use CWD as-is, others will compute its +# absolute canonical path. This makes harder tracking and fixing host +# machine path leaks. +# 3- Absolute canonical output location (i.e. $(O)): +# For the same reason as the one for CWD. + +# Remove the trailing '/.' from $(O) as it can be added by the makefile wrapper +# installed in the $(O) directory. +# Also remove the trailing '/' the user can set when on the command line. +override O := $(patsubst %/,%,$(patsubst %.,%,$(O))) +# Make sure $(O) actually exists before calling realpath on it; this is to +# avoid empty CANONICAL_O in case on non-existing entry. +CANONICAL_O := $(shell mkdir -p $(O) >/dev/null 2>&1)$(realpath $(O)) + +# gcc fails to build when the srcdir contains a '@' +ifneq ($(findstring @,$(CANONICAL_O)),) +$(error The build directory can not contain a '@') +endif + +CANONICAL_CURDIR = $(realpath $(CURDIR)) + +REQ_UMASK = 0022 + +# Make sure O= is passed (with its absolute canonical path) everywhere the +# toplevel makefile is called back. +EXTRAMAKEARGS := O=$(CANONICAL_O) + +# Check Buildroot execution pre-requisites here. +ifneq ($(shell umask):$(CURDIR):$(O),$(REQ_UMASK):$(CANONICAL_CURDIR):$(CANONICAL_O)) +.PHONY: _all $(MAKECMDGOALS) + +$(MAKECMDGOALS): _all + @: + +_all: + @umask $(REQ_UMASK) && \ + $(MAKE) -C $(CANONICAL_CURDIR) --no-print-directory \ + $(MAKECMDGOALS) $(EXTRAMAKEARGS) + +else # umask / $(CURDIR) / $(O) + +# This is our default rule, so must come first +all: +.PHONY: all + +# Set and export the version string +export BR2_VERSION := 2021.02.4 +# Actual time the release is cut (for reproducible builds) +BR2_VERSION_EPOCH = 1628627000 + +# Save running make version since it's clobbered by the make package +RUNNING_MAKE_VERSION := $(MAKE_VERSION) + +# Check for minimal make version (note: this check will break at make 10.x) +MIN_MAKE_VERSION = 3.81 +ifneq ($(firstword $(sort $(RUNNING_MAKE_VERSION) $(MIN_MAKE_VERSION))),$(MIN_MAKE_VERSION)) +$(error You have make '$(RUNNING_MAKE_VERSION)' installed. GNU make >= $(MIN_MAKE_VERSION) is required) +endif + +# absolute path +TOPDIR := $(CURDIR) +CONFIG_CONFIG_IN = Config.in +CONFIG = support/kconfig +DATE := $(shell date +%Y%m%d) + +# Compute the full local version string so packages can use it as-is +# Need to export it, so it can be got from environment in children (eg. mconf) + +BR2_LOCALVERSION := $(shell $(TOPDIR)/support/scripts/setlocalversion) +ifeq ($(BR2_LOCALVERSION),) +export BR2_VERSION_FULL := $(BR2_VERSION) +else +export BR2_VERSION_FULL := $(BR2_LOCALVERSION) +endif + +# List of targets and target patterns for which .config doesn't need to be read in +noconfig_targets := menuconfig nconfig gconfig xconfig config oldconfig randconfig \ + defconfig %_defconfig allyesconfig allnoconfig alldefconfig syncconfig release \ + randpackageconfig allyespackageconfig allnopackageconfig \ + print-version olddefconfig distclean manual manual-% check-package check-flake8 + +# Some global targets do not trigger a build, but are used to collect +# metadata, or do various checks. When such targets are triggered, +# some packages should not do their configuration sanity +# checks. Provide them a BR_BUILDING variable set to 'y' when we're +# actually building and they should do their sanity checks. +# +# We're building in two situations: when MAKECMDGOALS is empty +# (default target is to build), or when MAKECMDGOALS contains +# something else than one of the nobuild_targets. +nobuild_targets := source %-source \ + legal-info %-legal-info external-deps _external-deps \ + clean distclean help show-targets graph-depends \ + %-graph-depends %-show-depends %-show-version \ + graph-build graph-size list-defconfigs \ + savedefconfig update-defconfig printvars +ifeq ($(MAKECMDGOALS),) +BR_BUILDING = y +else ifneq ($(filter-out $(nobuild_targets),$(MAKECMDGOALS)),) +BR_BUILDING = y +endif + +# We call make recursively to build packages. The command-line overrides that +# are passed to Buildroot don't apply to those package build systems. In +# particular, we don't want to pass down the O= option for out-of-tree +# builds, because the value specified on the command line will not be correct +# for packages. +MAKEOVERRIDES := + +# Include some helper macros and variables +include support/misc/utils.mk + +# Set variables related to in-tree or out-of-tree build. +# Here, both $(O) and $(CURDIR) are absolute canonical paths. +ifeq ($(O),$(CURDIR)/output) +CONFIG_DIR := $(CURDIR) +NEED_WRAPPER = +else +CONFIG_DIR := $(O) +NEED_WRAPPER = y +endif + +# bash prints the name of the directory on 'cd ' if CDPATH is +# set, so unset it here to not cause problems. Notice that the export +# line doesn't affect the environment of $(shell ..) calls. +export CDPATH := + +BASE_DIR := $(CANONICAL_O) +$(if $(BASE_DIR),, $(error output directory "$(O)" does not exist)) + + +# Handling of BR2_EXTERNAL. +# +# The value of BR2_EXTERNAL is stored in .br-external in the output directory. +# The location of the external.mk makefile fragments is computed in that file. +# On subsequent invocations of make, this file is read in. BR2_EXTERNAL can +# still be overridden on the command line, therefore the file is re-created +# every time make is run. + +BR2_EXTERNAL_FILE = $(BASE_DIR)/.br2-external.mk +-include $(BR2_EXTERNAL_FILE) +$(shell support/scripts/br2-external -d '$(BASE_DIR)' $(BR2_EXTERNAL)) +BR2_EXTERNAL_ERROR = +include $(BR2_EXTERNAL_FILE) +ifneq ($(BR2_EXTERNAL_ERROR),) +$(error $(BR2_EXTERNAL_ERROR)) +endif + +# Workaround bug in make-4.3: https://savannah.gnu.org/bugs/?57676 +$(BASE_DIR)/.br2-external.mk:; + +# To make sure that the environment variable overrides the .config option, +# set this before including .config. +ifneq ($(BR2_DL_DIR),) +DL_DIR := $(BR2_DL_DIR) +endif +ifneq ($(BR2_CCACHE_DIR),) +BR_CACHE_DIR := $(BR2_CCACHE_DIR) +endif + +# Need that early, before we scan packages +# Avoids doing the $(or...) everytime +BR_GRAPH_OUT := $(or $(BR2_GRAPH_OUT),pdf) + +BUILD_DIR := $(BASE_DIR)/build +BINARIES_DIR := $(BASE_DIR)/images +BASE_TARGET_DIR := $(BASE_DIR)/target +PER_PACKAGE_DIR := $(BASE_DIR)/per-package +# initial definition so that 'make clean' works for most users, even without +# .config. HOST_DIR will be overwritten later when .config is included. +HOST_DIR := $(BASE_DIR)/host +GRAPHS_DIR := $(BASE_DIR)/graphs + +LEGAL_INFO_DIR = $(BASE_DIR)/legal-info +REDIST_SOURCES_DIR_TARGET = $(LEGAL_INFO_DIR)/sources +REDIST_SOURCES_DIR_HOST = $(LEGAL_INFO_DIR)/host-sources +LICENSE_FILES_DIR_TARGET = $(LEGAL_INFO_DIR)/licenses +LICENSE_FILES_DIR_HOST = $(LEGAL_INFO_DIR)/host-licenses +LEGAL_MANIFEST_CSV_TARGET = $(LEGAL_INFO_DIR)/manifest.csv +LEGAL_MANIFEST_CSV_HOST = $(LEGAL_INFO_DIR)/host-manifest.csv +LEGAL_WARNINGS = $(LEGAL_INFO_DIR)/.warnings +LEGAL_REPORT = $(LEGAL_INFO_DIR)/README + +BR2_CONFIG = $(CONFIG_DIR)/.config + +# Pull in the user's configuration file +ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),) +-include $(BR2_CONFIG) +endif + +ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),) +# Disable top-level parallel build if per-package directories is not +# used. Indeed, per-package directories is necessary to guarantee +# determinism and reproducibility with top-level parallel build. +.NOTPARALLEL: +endif + +# timezone and locale may affect build output +ifeq ($(BR2_REPRODUCIBLE),y) +export TZ = UTC +export LANG = C +export LC_ALL = C +endif + +# To put more focus on warnings, be less verbose as default +# Use 'make V=1' to see the full commands +ifeq ("$(origin V)", "command line") + KBUILD_VERBOSE = $(V) +endif +ifndef KBUILD_VERBOSE + KBUILD_VERBOSE = 0 +endif + +ifeq ($(KBUILD_VERBOSE),1) + Q = +ifndef VERBOSE + VERBOSE = 1 +endif +export VERBOSE +else + Q = @ +endif + +# kconfig uses CONFIG_SHELL +CONFIG_SHELL := $(SHELL) + +export SHELL CONFIG_SHELL Q KBUILD_VERBOSE + +ifndef HOSTAR +HOSTAR := ar +endif +ifndef HOSTAS +HOSTAS := as +endif +ifndef HOSTCC +HOSTCC := gcc +HOSTCC := $(shell which $(HOSTCC) || type -p $(HOSTCC) || echo gcc) +endif +HOSTCC_NOCCACHE := $(HOSTCC) +ifndef HOSTCXX +HOSTCXX := g++ +HOSTCXX := $(shell which $(HOSTCXX) || type -p $(HOSTCXX) || echo g++) +endif +HOSTCXX_NOCCACHE := $(HOSTCXX) +ifndef HOSTCPP +HOSTCPP := cpp +endif +ifndef HOSTLD +HOSTLD := ld +endif +ifndef HOSTLN +HOSTLN := ln +endif +ifndef HOSTNM +HOSTNM := nm +endif +ifndef HOSTOBJCOPY +HOSTOBJCOPY := objcopy +endif +ifndef HOSTRANLIB +HOSTRANLIB := ranlib +endif +HOSTAR := $(shell which $(HOSTAR) || type -p $(HOSTAR) || echo ar) +HOSTAS := $(shell which $(HOSTAS) || type -p $(HOSTAS) || echo as) +HOSTCPP := $(shell which $(HOSTCPP) || type -p $(HOSTCPP) || echo cpp) +HOSTLD := $(shell which $(HOSTLD) || type -p $(HOSTLD) || echo ld) +HOSTLN := $(shell which $(HOSTLN) || type -p $(HOSTLN) || echo ln) +HOSTNM := $(shell which $(HOSTNM) || type -p $(HOSTNM) || echo nm) +HOSTOBJCOPY := $(shell which $(HOSTOBJCOPY) || type -p $(HOSTOBJCOPY) || echo objcopy) +HOSTRANLIB := $(shell which $(HOSTRANLIB) || type -p $(HOSTRANLIB) || echo ranlib) +SED := $(shell which sed || type -p sed) -i -e + +export HOSTAR HOSTAS HOSTCC HOSTCXX HOSTLD +export HOSTCC_NOCCACHE HOSTCXX_NOCCACHE + +# Determine the userland we are running on. +# +# Note that, despite its name, we are not interested in the actual +# architecture name. This is mostly used to determine whether some +# of the binary tools (e.g. pre-built external toolchains) can run +# on the current host. So we need to know if the userland we're +# running on can actually run those toolchains. +# +# For example, a 64-bit prebuilt toolchain will not run on a 64-bit +# kernel if the userland is 32-bit (e.g. in a chroot for example). +# +# So, we extract the first part of the tuple the host gcc was +# configured to generate code for; we assume this is our userland. +# +export HOSTARCH := $(shell LC_ALL=C $(HOSTCC_NOCCACHE) -v 2>&1 | \ + sed -e '/^Target: \([^-]*\).*/!d' \ + -e 's//\1/' \ + -e 's/i.86/x86/' \ + -e 's/sun4u/sparc64/' \ + -e 's/arm.*/arm/' \ + -e 's/sa110/arm/' \ + -e 's/ppc64/powerpc64/' \ + -e 's/ppc/powerpc/' \ + -e 's/macppc/powerpc/' \ + -e 's/sh.*/sh/' ) + +# When adding a new host gcc version in Config.in, +# update the HOSTCC_MAX_VERSION variable: +HOSTCC_MAX_VERSION := 9 + +HOSTCC_VERSION := $(shell V=$$($(HOSTCC_NOCCACHE) --version | \ + sed -n -r 's/^.* ([0-9]*)\.([0-9]*)\.([0-9]*)[ ]*.*/\1 \2/p'); \ + [ "$${V%% *}" -le $(HOSTCC_MAX_VERSION) ] || V=$(HOSTCC_MAX_VERSION); \ + printf "%s" "$${V}") + +# For gcc >= 5.x, we only need the major version. +ifneq ($(firstword $(HOSTCC_VERSION)),4) +HOSTCC_VERSION := $(firstword $(HOSTCC_VERSION)) +endif + +ifeq ($(BR2_NEEDS_HOST_UTF8_LOCALE),y) +# First, we try to use the user's configured locale (as that's the +# language they'd expect messages to be displayed), then we favour +# a non language-specific locale like C.UTF-8 if one is available, +# so we sort with the C locale to get it at the top. +# This is guaranteed to not be empty, because of the check in +# support/dependencies/dependencies.sh +HOST_UTF8_LOCALE := $(shell \ + ( echo $${LC_ALL:-$${LC_MESSAGES:-$${LANG}}}; \ + locale -a 2>/dev/null | LC_ALL=C sort \ + ) \ + | grep -i -E 'utf-?8$$' \ + | head -n 1) +HOST_UTF8_LOCALE_ENV := LC_ALL=$(HOST_UTF8_LOCALE) +endif + +# Make sure pkg-config doesn't look outside the buildroot tree +HOST_PKG_CONFIG_PATH := $(PKG_CONFIG_PATH) +unexport PKG_CONFIG_PATH +unexport PKG_CONFIG_SYSROOT_DIR +unexport PKG_CONFIG_LIBDIR + +# Having DESTDIR set in the environment confuses the installation +# steps of some packages. +unexport DESTDIR + +# Causes breakage with packages that needs host-ruby +unexport RUBYOPT + +include package/pkg-utils.mk +include package/doc-asciidoc.mk + +ifeq ($(BR2_HAVE_DOT_CONFIG),y) + +################################################################################ +# +# Hide troublesome environment variables from sub processes +# +################################################################################ +unexport CROSS_COMPILE +unexport ARCH +unexport CC +unexport LD +unexport AR +unexport CXX +unexport CPP +unexport RANLIB +unexport CFLAGS +unexport CXXFLAGS +unexport GREP_OPTIONS +unexport TAR_OPTIONS +unexport CONFIG_SITE +unexport QMAKESPEC +unexport TERMINFO +unexport MACHINE +unexport O +unexport GCC_COLORS +unexport PLATFORM +unexport OS + +GNU_HOST_NAME := $(shell support/gnuconfig/config.guess) + +PACKAGES := +PACKAGES_ALL := + +# silent mode requested? +QUIET := $(if $(findstring s,$(filter-out --%,$(MAKEFLAGS))),-q) + +# Strip off the annoying quoting +ARCH := $(call qstrip,$(BR2_ARCH)) + +KERNEL_ARCH := $(shell echo "$(ARCH)" | sed -e "s/-.*//" \ + -e s/i.86/i386/ -e s/sun4u/sparc64/ \ + -e s/arcle/arc/ \ + -e s/arceb/arc/ \ + -e s/arm.*/arm/ -e s/sa110/arm/ \ + -e s/aarch64.*/arm64/ \ + -e s/nds32.*/nds32/ \ + -e s/or1k/openrisc/ \ + -e s/parisc64/parisc/ \ + -e s/powerpc64.*/powerpc/ \ + -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \ + -e s/riscv.*/riscv/ \ + -e s/sh.*/sh/ \ + -e s/s390x/s390/ \ + -e s/microblazeel/microblaze/) + +ZCAT := $(call qstrip,$(BR2_ZCAT)) +BZCAT := $(call qstrip,$(BR2_BZCAT)) +XZCAT := $(call qstrip,$(BR2_XZCAT)) +LZCAT := $(call qstrip,$(BR2_LZCAT)) +TAR_OPTIONS = $(call qstrip,$(BR2_TAR_OPTIONS)) -xf + +ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y) +HOST_DIR = $(if $(PKG),$(PER_PACKAGE_DIR)/$($(PKG)_NAME)/host,$(call qstrip,$(BR2_HOST_DIR))) +TARGET_DIR = $(if $(ROOTFS),$(ROOTFS_$(ROOTFS)_TARGET_DIR),$(if $(PKG),$(PER_PACKAGE_DIR)/$($(PKG)_NAME)/target,$(BASE_TARGET_DIR))) +else +HOST_DIR := $(call qstrip,$(BR2_HOST_DIR)) +TARGET_DIR = $(if $(ROOTFS),$(ROOTFS_$(ROOTFS)_TARGET_DIR),$(BASE_TARGET_DIR)) +endif + +ifneq ($(HOST_DIR),$(BASE_DIR)/host) +HOST_DIR_SYMLINK = $(BASE_DIR)/host +$(HOST_DIR_SYMLINK): | $(BASE_DIR) + ln -snf $(HOST_DIR) $(HOST_DIR_SYMLINK) +endif + +STAGING_DIR_SYMLINK = $(BASE_DIR)/staging +$(STAGING_DIR_SYMLINK): | $(BASE_DIR) + ln -snf $(STAGING_DIR) $(STAGING_DIR_SYMLINK) + +# Quotes are needed for spaces and all in the original PATH content. +BR_PATH = "$(HOST_DIR)/bin:$(HOST_DIR)/sbin:$(PATH)" + +# Location of a file giving a big fat warning that output/target +# should not be used as the root filesystem. +TARGET_DIR_WARNING_FILE = $(TARGET_DIR)/THIS_IS_NOT_YOUR_ROOT_FILESYSTEM + +ifeq ($(BR2_CCACHE),y) +CCACHE = $(HOST_DIR)/bin/ccache +BR_CACHE_DIR ?= $(call qstrip,$(BR2_CCACHE_DIR)) +export BR_CACHE_DIR +HOSTCC = $(CCACHE) $(HOSTCC_NOCCACHE) +HOSTCXX = $(CCACHE) $(HOSTCXX_NOCCACHE) +else +export BR_NO_CCACHE +endif + +# Scripts in support/ or post-build scripts may need to reference +# these locations, so export them so it is easier to use +export BR2_CONFIG +export BR2_REPRODUCIBLE +export TARGET_DIR +export STAGING_DIR +export HOST_DIR +export BINARIES_DIR +export BASE_DIR + +################################################################################ +# +# You should probably leave this stuff alone unless you know +# what you are doing. +# +################################################################################ + +all: world + +# Include legacy before the other things, because package .mk files +# may rely on it. +include Makefile.legacy + +include system/system.mk +include package/Makefile.in +# arch/arch.mk must be after package/Makefile.in because it may need to +# complement variables defined therein, like BR_NO_CHECK_HASH_FOR. +include arch/arch.mk +include support/dependencies/dependencies.mk + +include $(sort $(wildcard toolchain/*.mk)) +include $(sort $(wildcard toolchain/*/*.mk)) + +ifeq ($(BR2_REPRODUCIBLE),y) +# If SOURCE_DATE_EPOCH has not been set then use the commit date, or the last +# release date if the source tree is not within a Git repository. +# See: https://reproducible-builds.org/specs/source-date-epoch/ +BR2_VERSION_GIT_EPOCH := $(shell $(GIT) log -1 --format=%at 2> /dev/null) +export SOURCE_DATE_EPOCH ?= $(or $(BR2_VERSION_GIT_EPOCH),$(BR2_VERSION_EPOCH)) +endif + +# Include the package override file if one has been provided in the +# configuration. +PACKAGE_OVERRIDE_FILE = $(call qstrip,$(BR2_PACKAGE_OVERRIDE_FILE)) +ifneq ($(PACKAGE_OVERRIDE_FILE),) +-include $(PACKAGE_OVERRIDE_FILE) +endif + +include $(sort $(wildcard package/*/*.mk)) + +include boot/common.mk +include linux/linux.mk +include fs/common.mk + +# If using a br2-external tree, the BR2_EXTERNAL_$(NAME)_PATH variables +# are also present in the .config file. Since .config is included after +# we defined them in the Makefile, the values for those variables are +# quoted. We just include the generated Makefile fragment .br2-external.mk +# a third time, which will set those variables to the un-quoted values. +include $(BR2_EXTERNAL_FILE) + +# Nothing to include if no BR2_EXTERNAL tree in use +include $(BR2_EXTERNAL_MKS) + +# Now we are sure we have all the packages scanned and defined. We now +# check for each package in the list of enabled packages, that all its +# dependencies are indeed enabled. +# +# Only trigger the check for default builds. If the user forces building +# a package, even if not enabled in the configuration, we want to accept +# it. However; we also want to be able to force checking the dependencies +# if the user so desires. Forcing a dependency check is useful in the case +# of test-pkg, as we want to make sure during testing, that a package has +# all the dependencies selected in the config file. +# +ifeq ($(MAKECMDGOALS),) +BR_FORCE_CHECK_DEPENDENCIES = YES +endif + +ifeq ($(BR_FORCE_CHECK_DEPENDENCIES),YES) + +define CHECK_ONE_DEPENDENCY +ifeq ($$($(2)_TYPE),target) +ifeq ($$($(2)_IS_VIRTUAL),) +ifneq ($$($$($(2)_KCONFIG_VAR)),y) +$$(error $$($(2)_NAME) is in the dependency chain of $$($(1)_NAME) that \ +has added it to its _DEPENDENCIES variable without selecting it or \ +depending on it from Config.in) +endif +endif +endif +endef + +$(foreach pkg,$(call UPPERCASE,$(PACKAGES)),\ + $(foreach dep,$(call UPPERCASE,$($(pkg)_FINAL_ALL_DEPENDENCIES)),\ + $(eval $(call CHECK_ONE_DEPENDENCY,$(pkg),$(dep))$(sep)))) + +endif + +$(BUILD_DIR)/buildroot-config/auto.conf: $(BR2_CONFIG) + $(MAKE1) $(EXTRAMAKEARGS) HOSTCC="$(HOSTCC_NOCCACHE)" HOSTCXX="$(HOSTCXX_NOCCACHE)" syncconfig + +.PHONY: prepare +prepare: $(BUILD_DIR)/buildroot-config/auto.conf + +.PHONY: world +world: target-post-image + +.PHONY: prepare-sdk +prepare-sdk: world + @$(call MESSAGE,"Rendering the SDK relocatable") + PER_PACKAGE_DIR=$(PER_PACKAGE_DIR) $(TOPDIR)/support/scripts/fix-rpath host + PER_PACKAGE_DIR=$(PER_PACKAGE_DIR) $(TOPDIR)/support/scripts/fix-rpath staging + $(INSTALL) -m 755 $(TOPDIR)/support/misc/relocate-sdk.sh $(HOST_DIR)/relocate-sdk.sh + mkdir -p $(HOST_DIR)/share/buildroot + echo $(HOST_DIR) > $(HOST_DIR)/share/buildroot/sdk-location + +BR2_SDK_PREFIX ?= $(GNU_TARGET_NAME)_sdk-buildroot +.PHONY: sdk +sdk: prepare-sdk $(BR2_TAR_HOST_DEPENDENCY) + @$(call MESSAGE,"Generating SDK tarball") + $(if $(BR2_SDK_PREFIX),,$(error BR2_SDK_PREFIX can not be empty)) + $(Q)mkdir -p $(BINARIES_DIR) + $(TAR) czf "$(BINARIES_DIR)/$(BR2_SDK_PREFIX).tar.gz" \ + --owner=0 --group=0 --numeric-owner \ + --transform='s#^$(patsubst /%,%,$(HOST_DIR))#$(BR2_SDK_PREFIX)#' \ + -C / $(patsubst /%,%,$(HOST_DIR)) + +RSYNC_VCS_EXCLUSIONS = \ + --exclude .svn --exclude .git --exclude .hg --exclude .bzr \ + --exclude CVS + +# When stripping, obey to BR2_STRIP_EXCLUDE_DIRS and +# BR2_STRIP_EXCLUDE_FILES +STRIP_FIND_COMMON_CMD = \ + find $(TARGET_DIR) \ + $(if $(call qstrip,$(BR2_STRIP_EXCLUDE_DIRS)), \ + \( $(call finddirclauses,$(TARGET_DIR),$(call qstrip,$(BR2_STRIP_EXCLUDE_DIRS))) \) \ + -prune -o \ + ) \ + $(if $(call qstrip,$(BR2_STRIP_EXCLUDE_FILES)), \ + -not \( $(call findfileclauses,$(call qstrip,$(BR2_STRIP_EXCLUDE_FILES))) \) ) + +# Regular stripping for everything, except libpthread, ld-*.so and +# kernel modules: +# - libpthread.so: a non-stripped libpthread shared library is needed for +# proper debugging of pthread programs using gdb. +# - ld.so: a non-stripped dynamic linker library is needed for valgrind +# - kernel modules (*.ko): do not function properly when stripped like normal +# applications and libraries. Normally kernel modules are already excluded +# by the executable permission check, so the explicit exclusion is only +# done for kernel modules with incorrect permissions. +STRIP_FIND_CMD = \ + $(STRIP_FIND_COMMON_CMD) \ + -type f \( -perm /111 -o -name '*.so*' \) \ + -not \( $(call findfileclauses,libpthread*.so* ld-*.so* *.ko) \) \ + -print0 + +# Special stripping (only debugging symbols) for libpthread and ld-*.so. +STRIP_FIND_SPECIAL_LIBS_CMD = \ + $(STRIP_FIND_COMMON_CMD) \ + \( -name 'ld-*.so*' -o -name 'libpthread*.so*' \) \ + -print0 + +ifeq ($(BR2_ECLIPSE_REGISTER),y) +define TOOLCHAIN_ECLIPSE_REGISTER + ./support/scripts/eclipse-register-toolchain `readlink -f $(O)` \ + $(notdir $(TARGET_CROSS)) $(BR2_ARCH) +endef +TARGET_FINALIZE_HOOKS += TOOLCHAIN_ECLIPSE_REGISTER +endif + +# Generate locale data. Basically, we call the localedef program +# (built by the host-localedef package) for each locale. The input +# data comes preferably from the toolchain, or if the toolchain does +# not have them (Linaro toolchains), we use the ones available on the +# host machine. +ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),y) +GLIBC_GENERATE_LOCALES = $(call qstrip,$(BR2_GENERATE_LOCALE)) +ifneq ($(GLIBC_GENERATE_LOCALES),) +PACKAGES += host-localedef + +define GENERATE_GLIBC_LOCALES + $(Q)mkdir -p $(TARGET_DIR)/usr/lib/locale/ + $(Q)for locale in $(GLIBC_GENERATE_LOCALES) ; do \ + inputfile=`echo $${locale} | cut -f1 -d'.'` ; \ + charmap=`echo $${locale} | cut -f2 -d'.' -s` ; \ + if test -z "$${charmap}" ; then \ + charmap="UTF-8" ; \ + fi ; \ + echo "Generating locale $${inputfile}.$${charmap}" ; \ + I18NPATH=$(STAGING_DIR)/usr/share/i18n:/usr/share/i18n \ + $(HOST_DIR)/bin/localedef \ + --prefix=$(TARGET_DIR) \ + --$(call LOWERCASE,$(BR2_ENDIAN))-endian \ + -i $${inputfile} -f $${charmap} \ + $${locale} ; \ + done +endef +TARGET_FINALIZE_HOOKS += GENERATE_GLIBC_LOCALES +endif +endif + +ifeq ($(BR2_ENABLE_LOCALE_PURGE),y) +LOCALE_WHITELIST = $(BUILD_DIR)/locales.nopurge +LOCALE_NOPURGE = $(call qstrip,$(BR2_ENABLE_LOCALE_WHITELIST)) + +# This piece of junk does the following: +# First collect the whitelist in a file. +# Then go over all the locale dirs and for each subdir, check if it exists +# in the whitelist file. If it doesn't, kill it. +# Finally, specifically for X11, regenerate locale.dir from the whitelist. +define PURGE_LOCALES + printf '%s\n' $(LOCALE_NOPURGE) locale-archive > $(LOCALE_WHITELIST) + + for dir in $(addprefix $(TARGET_DIR),/usr/share/locale /usr/share/X11/locale /usr/lib/locale); \ + do \ + if [ ! -d $$dir ]; then continue; fi; \ + for langdir in $$dir/*; \ + do \ + if [ -e "$${langdir}" ]; \ + then \ + grep -qx "$${langdir##*/}" $(LOCALE_WHITELIST) || rm -rf $$langdir; \ + fi \ + done; \ + done + if [ -d $(TARGET_DIR)/usr/share/X11/locale ]; \ + then \ + for lang in $(LOCALE_NOPURGE); \ + do \ + if [ -f $(TARGET_DIR)/usr/share/X11/locale/$$lang/XLC_LOCALE ]; \ + then \ + echo "$$lang/XLC_LOCALE: $$lang"; \ + fi \ + done > $(TARGET_DIR)/usr/share/X11/locale/locale.dir; \ + fi +endef +TARGET_FINALIZE_HOOKS += PURGE_LOCALES +endif + +$(TARGETS_ROOTFS): target-finalize + +# Avoid the rootfs name leaking down the dependency chain +target-finalize: ROOTFS= + +TARGET_DIR_FILES_LISTS = $(sort $(wildcard $(BUILD_DIR)/*/.files-list.txt)) +HOST_DIR_FILES_LISTS = $(sort $(wildcard $(BUILD_DIR)/*/.files-list-host.txt)) +STAGING_DIR_FILES_LISTS = $(sort $(wildcard $(BUILD_DIR)/*/.files-list-staging.txt)) + +.PHONY: host-finalize +host-finalize: $(PACKAGES) $(HOST_DIR) $(HOST_DIR_SYMLINK) + @$(call MESSAGE,"Finalizing host directory") + $(call per-package-rsync,$(sort $(PACKAGES)),host,$(HOST_DIR)) + +.PHONY: staging-finalize +staging-finalize: $(STAGING_DIR_SYMLINK) + +.PHONY: target-finalize +target-finalize: $(PACKAGES) $(TARGET_DIR) host-finalize + @$(call MESSAGE,"Finalizing target directory") + $(call per-package-rsync,$(sort $(PACKAGES)),target,$(TARGET_DIR)) + $(foreach hook,$(TARGET_FINALIZE_HOOKS),$($(hook))$(sep)) + rm -rf $(TARGET_DIR)/usr/include $(TARGET_DIR)/usr/share/aclocal \ + $(TARGET_DIR)/usr/lib/pkgconfig $(TARGET_DIR)/usr/share/pkgconfig \ + $(TARGET_DIR)/usr/lib/cmake $(TARGET_DIR)/usr/share/cmake \ + $(TARGET_DIR)/usr/doc + find $(TARGET_DIR)/usr/{lib,share}/ -name '*.cmake' -print0 | xargs -0 rm -f + find $(TARGET_DIR)/lib/ $(TARGET_DIR)/usr/lib/ $(TARGET_DIR)/usr/libexec/ \ + \( -name '*.a' -o -name '*.la' -o -name '*.prl' \) -print0 | xargs -0 rm -f + +ifeq ($(BR2_PACKAGE_GIT_INFO_LSGD),y) + rm -r ./output/build/git_info_lsgd/.stamp* +endif + +ifneq ($(BR2_PACKAGE_GDB),y) + rm -rf $(TARGET_DIR)/usr/share/gdb +endif +ifneq ($(BR2_PACKAGE_BASH),y) + rm -rf $(TARGET_DIR)/usr/share/bash-completion + rm -rf $(TARGET_DIR)/etc/bash_completion.d +endif +ifneq ($(BR2_PACKAGE_ZSH),y) + rm -rf $(TARGET_DIR)/usr/share/zsh +endif + rm -rf $(TARGET_DIR)/usr/man $(TARGET_DIR)/usr/share/man + rm -rf $(TARGET_DIR)/usr/info $(TARGET_DIR)/usr/share/info + rm -rf $(TARGET_DIR)/usr/doc $(TARGET_DIR)/usr/share/doc + rm -rf $(TARGET_DIR)/usr/share/gtk-doc + rmdir $(TARGET_DIR)/usr/share 2>/dev/null || true +ifneq ($(BR2_ENABLE_DEBUG):$(BR2_STRIP_strip),y:) + rm -rf $(TARGET_DIR)/lib/debug $(TARGET_DIR)/usr/lib/debug +endif + $(STRIP_FIND_CMD) | xargs -0 $(STRIPCMD) 2>/dev/null || true + $(STRIP_FIND_SPECIAL_LIBS_CMD) | xargs -0 -r $(STRIPCMD) $(STRIP_STRIP_DEBUG) 2>/dev/null || true + + mkdir -p $(TARGET_DIR)/etc + ( \ + echo "NAME=LoongOS(GD)"; \ + echo "VERSION=$(BR2_VERSION_FULL)"; \ + echo "ID=LoongOS"; \ + echo "VERSION_ID=$(BR2_VERSION)"; \ + echo "PRETTY_NAME=\"LoongOS $(BR2_VERSION)\"" \ + ) > $(TARGET_DIR)/usr/lib/os-release + ln -sf ../usr/lib/os-release $(TARGET_DIR)/etc + + @$(call MESSAGE,"Sanitizing RPATH in target tree") + PER_PACKAGE_DIR=$(PER_PACKAGE_DIR) $(TOPDIR)/support/scripts/fix-rpath target + +# For a merged /usr, ensure that /lib, /bin and /sbin and their /usr +# counterparts are appropriately setup as symlinks ones to the others. +ifeq ($(BR2_ROOTFS_MERGED_USR),y) + + $(foreach d, $(call qstrip,$(BR2_ROOTFS_OVERLAY)), \ + @$(call MESSAGE,"Sanity check in overlay $(d)")$(sep) \ + $(Q)not_merged_dirs="$$(support/scripts/check-merged-usr.sh $(d))"; \ + test -n "$$not_merged_dirs" && { \ + echo "ERROR: The overlay in $(d) is not" \ + "using a merged /usr for the following directories:" \ + $$not_merged_dirs; \ + exit 1; \ + } || true$(sep)) + +endif # merged /usr + + $(foreach d, $(call qstrip,$(BR2_ROOTFS_OVERLAY)), \ + @$(call MESSAGE,"Copying overlay $(d)")$(sep) \ + $(Q)$(call SYSTEM_RSYNC,$(d),$(TARGET_DIR))$(sep)) +ifeq ($(BR2_PACKAGE_LOONGSON_BUILD_ESSENTIAL),y) + $(foreach d, $(call qstrip,$(BUILD_DIR)/loongson_build_essential), \ + @$(call MESSAGE,"Copying loongson_build_essential $(d)")$(sep) \ + $(Q)$(call SYSTEM_RSYNC,$(d),$(TARGET_DIR))$(sep)) +endif + $(Q)$(if $(TARGET_DIR_FILES_LISTS), \ + cat $(TARGET_DIR_FILES_LISTS)) > $(BUILD_DIR)/packages-file-list.txt + $(Q)$(if $(HOST_DIR_FILES_LISTS), \ + cat $(HOST_DIR_FILES_LISTS)) > $(BUILD_DIR)/packages-file-list-host.txt + $(Q)$(if $(STAGING_DIR_FILES_LISTS), \ + cat $(STAGING_DIR_FILES_LISTS)) > $(BUILD_DIR)/packages-file-list-staging.txt + + $(foreach s, $(call qstrip,$(BR2_ROOTFS_POST_BUILD_SCRIPT)), \ + @$(call MESSAGE,"Executing post-build script $(s)")$(sep) \ + $(Q)$(EXTRA_ENV) $(s) $(TARGET_DIR) $(call qstrip,$(BR2_ROOTFS_POST_SCRIPT_ARGS))$(sep)) + + touch $(TARGET_DIR)/usr + +.PHONY: target-post-image +target-post-image: $(TARGETS_ROOTFS) target-finalize staging-finalize + @rm -f $(ROOTFS_COMMON_TAR) + $(Q)mkdir -p $(BINARIES_DIR) + @$(foreach s, $(call qstrip,$(BR2_ROOTFS_POST_IMAGE_SCRIPT)), \ + $(call MESSAGE,"Executing post-image script $(s)"); \ + $(EXTRA_ENV) $(s) $(BINARIES_DIR) $(call qstrip,$(BR2_ROOTFS_POST_SCRIPT_ARGS))$(sep)) + +.PHONY: source +source: $(foreach p,$(PACKAGES),$(p)-all-source) + +.PHONY: _external-deps external-deps +_external-deps: $(foreach p,$(PACKAGES),$(p)-all-external-deps) +external-deps: + @$(MAKE1) -Bs $(EXTRAMAKEARGS) _external-deps | sort -u + +.PHONY: legal-info-clean +legal-info-clean: + @rm -fr $(LEGAL_INFO_DIR) + +.PHONY: legal-info-prepare +legal-info-prepare: $(LEGAL_INFO_DIR) + @$(call MESSAGE,"Buildroot $(BR2_VERSION_FULL) Collecting legal info") + @$(call legal-license-file,buildroot,buildroot,support/legal-info/buildroot.hash,COPYING,COPYING,HOST) + @$(call legal-manifest,TARGET,PACKAGE,VERSION,LICENSE,LICENSE FILES,SOURCE ARCHIVE,SOURCE SITE,DEPENDENCIES WITH LICENSES) + @$(call legal-manifest,HOST,PACKAGE,VERSION,LICENSE,LICENSE FILES,SOURCE ARCHIVE,SOURCE SITE,DEPENDENCIES WITH LICENSES) + @$(call legal-manifest,HOST,buildroot,$(BR2_VERSION_FULL),GPL-2.0+,COPYING,not saved,not saved) + @$(call legal-warning,the Buildroot source code has not been saved) + @cp $(BR2_CONFIG) $(LEGAL_INFO_DIR)/buildroot.config + +.PHONY: legal-info +legal-info: legal-info-clean legal-info-prepare $(foreach p,$(PACKAGES),$(p)-all-legal-info) \ + $(REDIST_SOURCES_DIR_TARGET) $(REDIST_SOURCES_DIR_HOST) + @cat support/legal-info/README.header >>$(LEGAL_REPORT) + @if [ -r $(LEGAL_WARNINGS) ]; then \ + cat support/legal-info/README.warnings-header \ + $(LEGAL_WARNINGS) >>$(LEGAL_REPORT); \ + cat $(LEGAL_WARNINGS); fi + @rm -f $(LEGAL_WARNINGS) + @(cd $(LEGAL_INFO_DIR); \ + find * -type f -exec sha256sum {} + | LC_ALL=C sort -k2 \ + >.legal-info.sha256; \ + mv .legal-info.sha256 legal-info.sha256) + @echo "Legal info produced in $(LEGAL_INFO_DIR)" + +.PHONY: show-targets +show-targets: + @echo $(sort $(PACKAGES)) $(sort $(TARGETS_ROOTFS)) + +.PHONY: show-build-order +show-build-order: $(patsubst %,%-show-build-order,$(PACKAGES)) + +.PHONY: graph-build +graph-build: $(O)/build/build-time.log + @install -d $(GRAPHS_DIR) + $(foreach o,name build duration,./support/scripts/graph-build-time \ + --type=histogram --order=$(o) --input=$(<) \ + --output=$(GRAPHS_DIR)/build.hist-$(o).$(BR_GRAPH_OUT) \ + $(if $(BR2_GRAPH_ALT),--alternate-colors)$(sep)) + $(foreach t,packages steps,./support/scripts/graph-build-time \ + --type=pie-$(t) --input=$(<) \ + --output=$(GRAPHS_DIR)/build.pie-$(t).$(BR_GRAPH_OUT) \ + $(if $(BR2_GRAPH_ALT),--alternate-colors)$(sep)) + +.PHONY: graph-depends-requirements +graph-depends-requirements: + @dot -? >/dev/null 2>&1 || \ + { echo "ERROR: The 'dot' program from Graphviz is needed for graph-depends" >&2; exit 1; } + +.PHONY: graph-depends +graph-depends: graph-depends-requirements + @$(INSTALL) -d $(GRAPHS_DIR) + @cd "$(CONFIG_DIR)"; \ + $(TOPDIR)/support/scripts/graph-depends $(BR2_GRAPH_DEPS_OPTS) \ + --direct -o $(GRAPHS_DIR)/$(@).dot + dot $(BR2_GRAPH_DOT_OPTS) -T$(BR_GRAPH_OUT) \ + -o $(GRAPHS_DIR)/$(@).$(BR_GRAPH_OUT) \ + $(GRAPHS_DIR)/$(@).dot + +.PHONY: graph-size +graph-size: + $(Q)mkdir -p $(GRAPHS_DIR) + $(Q)$(TOPDIR)/support/scripts/size-stats --builddir $(BASE_DIR) \ + --graph $(GRAPHS_DIR)/graph-size.$(BR_GRAPH_OUT) \ + --file-size-csv $(GRAPHS_DIR)/file-size-stats.csv \ + --package-size-csv $(GRAPHS_DIR)/package-size-stats.csv \ + $(BR2_GRAPH_SIZE_OPTS) + +.PHONY: check-dependencies +check-dependencies: + @cd "$(CONFIG_DIR)"; \ + $(TOPDIR)/support/scripts/graph-depends -C + +.PHONY: show-info +show-info: + @: + $(info $(call clean-json, \ + { $(foreach p, \ + $(sort $(foreach i,$(PACKAGES) $(TARGETS_ROOTFS), \ + $(i) \ + $($(call UPPERCASE,$(i))_FINAL_RECURSIVE_DEPENDENCIES) \ + ) \ + ), \ + $(call json-info,$(call UPPERCASE,$(p)))$(comma) \ + ) } \ + ) \ + ) + +.PHONY: pkg-stats +pkg-stats: + @cd "$(CONFIG_DIR)" ; \ + $(TOPDIR)/support/scripts/pkg-stats -c \ + --json $(O)/pkg-stats.json \ + --html $(O)/pkg-stats.html \ + --nvd-path $(DL_DIR)/buildroot-nvd + +else # ifeq ($(BR2_HAVE_DOT_CONFIG),y) + +# Some subdirectories are also package names. To avoid that "make linux" +# on an unconfigured tree produces "Nothing to be done", add an explicit +# rule for it. +# Also for 'all' we error out and ask the user to configure first. +.PHONY: linux toolchain +linux toolchain all: outputmakefile + $(error Please configure Buildroot first (e.g. "make menuconfig")) + @exit 1 + +endif # ifeq ($(BR2_HAVE_DOT_CONFIG),y) + +# configuration +# --------------------------------------------------------------------------- + +HOSTCFLAGS = $(CFLAGS_FOR_BUILD) +export HOSTCFLAGS + +$(BUILD_DIR)/buildroot-config/%onf: + mkdir -p $(@D)/lxdialog + PKG_CONFIG_PATH="$(HOST_PKG_CONFIG_PATH)" $(MAKE) CC="$(HOSTCC_NOCCACHE)" HOSTCC="$(HOSTCC_NOCCACHE)" \ + obj=$(@D) -C $(CONFIG) -f Makefile.br $(@F) + +DEFCONFIG = $(call qstrip,$(BR2_DEFCONFIG)) + +# We don't want to fully expand BR2_DEFCONFIG here, so Kconfig will +# recognize that if it's still at its default $(CONFIG_DIR)/defconfig +COMMON_CONFIG_ENV = \ + BR2_DEFCONFIG='$(call qstrip,$(value BR2_DEFCONFIG))' \ + KCONFIG_AUTOCONFIG=$(BUILD_DIR)/buildroot-config/auto.conf \ + KCONFIG_AUTOHEADER=$(BUILD_DIR)/buildroot-config/autoconf.h \ + KCONFIG_TRISTATE=$(BUILD_DIR)/buildroot-config/tristate.config \ + BR2_CONFIG=$(BR2_CONFIG) \ + HOST_GCC_VERSION="$(HOSTCC_VERSION)" \ + BASE_DIR=$(BASE_DIR) \ + SKIP_LEGACY= + +xconfig: $(BUILD_DIR)/buildroot-config/qconf outputmakefile + @$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN) + +gconfig: $(BUILD_DIR)/buildroot-config/gconf outputmakefile + @$(COMMON_CONFIG_ENV) srctree=$(TOPDIR) $< $(CONFIG_CONFIG_IN) + +menuconfig: $(BUILD_DIR)/buildroot-config/mconf outputmakefile + @$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN) + +nconfig: $(BUILD_DIR)/buildroot-config/nconf outputmakefile + @$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN) + +config: $(BUILD_DIR)/buildroot-config/conf outputmakefile + @$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN) + +# For the config targets that automatically select options, we pass +# SKIP_LEGACY=y to disable the legacy options. However, in that case +# no values are set for the legacy options so a subsequent oldconfig +# will query them. Therefore, run an additional olddefconfig. + +randconfig allyesconfig alldefconfig allnoconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile + @$(COMMON_CONFIG_ENV) SKIP_LEGACY=y $< --$@ $(CONFIG_CONFIG_IN) + @$(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN) >/dev/null + +randpackageconfig allyespackageconfig allnopackageconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile + @grep -v BR2_PACKAGE_ $(BR2_CONFIG) > $(CONFIG_DIR)/.config.nopkg + @$(COMMON_CONFIG_ENV) SKIP_LEGACY=y \ + KCONFIG_ALLCONFIG=$(CONFIG_DIR)/.config.nopkg \ + $< --$(subst package,,$@) $(CONFIG_CONFIG_IN) + @rm -f $(CONFIG_DIR)/.config.nopkg + @$(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN) >/dev/null + +oldconfig syncconfig olddefconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile + @$(COMMON_CONFIG_ENV) $< --$@ $(CONFIG_CONFIG_IN) + +defconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile + @$(COMMON_CONFIG_ENV) $< --defconfig$(if $(DEFCONFIG),=$(DEFCONFIG)) $(CONFIG_CONFIG_IN) + +define percent_defconfig +# Override the BR2_DEFCONFIG from COMMON_CONFIG_ENV with the new defconfig +%_defconfig: $(BUILD_DIR)/buildroot-config/conf $(1)/configs/%_defconfig outputmakefile + @$$(COMMON_CONFIG_ENV) BR2_DEFCONFIG=$(1)/configs/$$@ \ + $$< --defconfig=$(1)/configs/$$@ $$(CONFIG_CONFIG_IN) +endef +$(eval $(foreach d,$(call reverse,$(TOPDIR) $(BR2_EXTERNAL_DIRS)),$(call percent_defconfig,$(d))$(sep))) + +update-defconfig: savedefconfig + +savedefconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile + @$(COMMON_CONFIG_ENV) $< \ + --savedefconfig=$(if $(DEFCONFIG),$(DEFCONFIG),$(CONFIG_DIR)/defconfig) \ + $(CONFIG_CONFIG_IN) + @$(SED) '/^BR2_DEFCONFIG=/d' $(if $(DEFCONFIG),$(DEFCONFIG),$(CONFIG_DIR)/defconfig) + +.PHONY: defconfig savedefconfig update-defconfig + +################################################################################ +# +# Cleanup and misc junk +# +################################################################################ + +# staging and target directories do NOT list these as +# dependencies anywhere else +$(BUILD_DIR) $(BASE_TARGET_DIR) $(HOST_DIR) $(BINARIES_DIR) $(LEGAL_INFO_DIR) $(REDIST_SOURCES_DIR_TARGET) $(REDIST_SOURCES_DIR_HOST) $(PER_PACKAGE_DIR): + @mkdir -p $@ + +# outputmakefile generates a Makefile in the output directory, if using a +# separate output directory. This allows convenient use of make in the +# output directory. +.PHONY: outputmakefile +outputmakefile: +ifeq ($(NEED_WRAPPER),y) + $(Q)$(TOPDIR)/support/scripts/mkmakefile $(TOPDIR) $(O) +endif + +# printvars prints all the variables currently defined in our +# Makefiles. Alternatively, if a non-empty VARS variable is passed, +# only the variables matching the make pattern passed in VARS are +# displayed. +.PHONY: printvars +printvars: + @: + $(foreach V, \ + $(sort $(filter $(VARS),$(.VARIABLES))), \ + $(if $(filter-out environment% default automatic, \ + $(origin $V)), \ + $(if $(QUOTED_VARS),\ + $(info $V='$(subst ','\'',$(if $(RAW_VARS),$(value $V),$($V)))'), \ + $(info $V=$(if $(RAW_VARS),$(value $V),$($V)))))) +# ' Syntax colouring... + +.PHONY: clean +clean: + rm -rf $(BASE_TARGET_DIR) $(BINARIES_DIR) $(HOST_DIR) $(HOST_DIR_SYMLINK) \ + $(BUILD_DIR) $(BASE_DIR)/staging \ + $(LEGAL_INFO_DIR) $(GRAPHS_DIR) $(PER_PACKAGE_DIR) + +.PHONY: distclean +distclean: clean +ifeq ($(O),$(CURDIR)/output) + rm -rf $(O) +endif + rm -rf $(TOPDIR)/dl $(BR2_CONFIG) $(CONFIG_DIR)/.config.old $(CONFIG_DIR)/..config.tmp \ + $(CONFIG_DIR)/.auto.deps $(BASE_DIR)/.br2-external.* + +.PHONY: help +help: + @echo 'Cleaning:' + @echo ' clean - delete all files created by build' + @echo ' distclean - delete all non-source files (including .config)' + @echo + @echo 'Build:' + @echo ' all - make world' + @echo ' toolchain - build toolchain' + @echo ' sdk - build relocatable SDK' + @echo + @echo 'Configuration:' + @echo ' menuconfig - interactive curses-based configurator' + @echo ' nconfig - interactive ncurses-based configurator' + @echo ' xconfig - interactive Qt-based configurator' + @echo ' gconfig - interactive GTK-based configurator' + @echo ' oldconfig - resolve any unresolved symbols in .config' + @echo ' syncconfig - Same as oldconfig, but quietly, additionally update deps' + @echo ' olddefconfig - Same as syncconfig but sets new symbols to their default value' + @echo ' randconfig - New config with random answer to all options' + @echo ' defconfig - New config with default answer to all options;' + @echo ' BR2_DEFCONFIG, if set on the command line, is used as input' + @echo ' savedefconfig - Save current config to BR2_DEFCONFIG (minimal config)' + @echo ' update-defconfig - Same as savedefconfig' + @echo ' allyesconfig - New config where all options are accepted with yes' + @echo ' allnoconfig - New config where all options are answered with no' + @echo ' alldefconfig - New config where all options are set to default' + @echo ' randpackageconfig - New config with random answer to package options' + @echo ' allyespackageconfig - New config where pkg options are accepted with yes' + @echo ' allnopackageconfig - New config where package options are answered with no' + @echo + @echo 'Package-specific:' + @echo ' - Build and install and all its dependencies' + @echo ' -source - Only download the source files for ' + @echo ' -extract - Extract sources' + @echo ' -patch - Apply patches to ' + @echo ' -depends - Build '\''s dependencies' + @echo ' -configure - Build up to the configure step' + @echo ' -build - Build up to the build step' + @echo ' -show-info - generate info about , as a JSON blurb' + @echo ' -show-depends - List packages on which depends' + @echo ' -show-rdepends - List packages which have as a dependency' + @echo ' -show-recursive-depends' + @echo ' - Recursively list packages on which depends' + @echo ' -show-recursive-rdepends' + @echo ' - Recursively list packages which have as a dependency' + @echo ' -graph-depends - Generate a graph of '\''s dependencies' + @echo ' -graph-rdepends - Generate a graph of '\''s reverse dependencies' + @echo ' -dirclean - Remove build directory' + @echo ' -reconfigure - Restart the build from the configure step' + @echo ' -rebuild - Restart the build from the build step' + @echo ' -reinstall - Restart the build from the install step' + $(foreach p,$(HELP_PACKAGES), \ + @echo $(sep) \ + @echo '$($(p)_NAME):' $(sep) \ + $($(p)_HELP_CMDS)$(sep)) + @echo + @echo 'Documentation:' + @echo ' manual - build manual in all formats' + @echo ' manual-html - build manual in HTML' + @echo ' manual-split-html - build manual in split HTML' + @echo ' manual-pdf - build manual in PDF' + @echo ' manual-text - build manual in text' + @echo ' manual-epub - build manual in ePub' + @echo ' graph-build - generate graphs of the build times' + @echo ' graph-depends - generate graph of the dependency tree' + @echo ' graph-size - generate stats of the filesystem size' + @echo ' list-defconfigs - list all defconfigs (pre-configured minimal systems)' + @echo + @echo 'Miscellaneous:' + @echo ' source - download all sources needed for offline-build' + @echo ' external-deps - list external packages used' + @echo ' legal-info - generate info about license compliance' + @echo ' show-info - generate info about packages, as a JSON blurb' + @echo ' pkg-stats - generate info about packages as JSON and HTML' + @echo ' printvars - dump internal variables selected with VARS=...' + @echo + @echo ' make V=0|1 - 0 => quiet build (default), 1 => verbose build' + @echo ' make O=dir - Locate all output files in "dir", including .config' + @echo + @echo 'For further details, see README, generate the Buildroot manual, or consult' + @echo 'it on-line at http://buildroot.org/docs.html' + @echo + +# List the defconfig files +# $(1): base directory +# $(2): br2-external name, empty for bundled +define list-defconfigs + @first=true; \ + for defconfig in $(1)/configs/*_defconfig; do \ + [ -f "$${defconfig}" ] || continue; \ + if $${first}; then \ + if [ "$(2)" ]; then \ + printf 'External configs in "$(call qstrip,$(2))":\n'; \ + else \ + printf "Built-in configs:\n"; \ + fi; \ + first=false; \ + fi; \ + defconfig="$${defconfig##*/}"; \ + printf " %-35s - Build for %s\n" "$${defconfig}" "$${defconfig%_defconfig}"; \ + done; \ + $${first} || printf "\n" +endef + +# We iterate over BR2_EXTERNAL_NAMES rather than BR2_EXTERNAL_DIRS, +# because we want to display the name of the br2-external tree. +.PHONY: list-defconfigs +list-defconfigs: + $(call list-defconfigs,$(TOPDIR)) + $(foreach name,$(BR2_EXTERNAL_NAMES),\ + $(call list-defconfigs,$(BR2_EXTERNAL_$(name)_PATH),\ + $(BR2_EXTERNAL_$(name)_DESC))$(sep)) + +release: OUT = buildroot-$(BR2_VERSION) + +# Create release tarballs. We need to fiddle a bit to add the generated +# documentation to the git output +release: + git archive --format=tar --prefix=$(OUT)/ HEAD > $(OUT).tar + $(MAKE) O=$(OUT) manual-html manual-text manual-pdf + $(MAKE) O=$(OUT) distclean + tar rf $(OUT).tar $(OUT) + gzip -9 -c < $(OUT).tar > $(OUT).tar.gz + bzip2 -9 -c < $(OUT).tar > $(OUT).tar.bz2 + rm -rf $(OUT) $(OUT).tar + +print-version: + @echo $(BR2_VERSION_FULL) + +check-flake8: + $(Q)git ls-tree -r --name-only HEAD \ + | xargs file \ + | grep 'Python script' \ + | cut -d':' -f1 \ + | xargs -- python3 -m flake8 --statistics + +check-package: + find $(TOPDIR) -type f \( -name '*.mk' -o -name '*.hash' -o -name 'Config.*' \) \ + -exec ./utils/check-package {} + + +include docs/manual/manual.mk +-include $(foreach dir,$(BR2_EXTERNAL_DIRS),$(sort $(wildcard $(dir)/docs/*/*.mk))) + +list-configs: + @echo '1.全量系统的编译配置' + @echo '板卡配置名 对应适用板卡' + @echo 'loongson2k1000_jinlong_defconfig ls2k1000mips版本的星云板卡或者其他ls2k1000mips版本的板卡通用配置' + @echo 'loongson2k1000la_jinlong_defconfig ls2k1000LA版本的星云板卡或者其他ls2k1000LA版本的板卡通用配置' + @echo 'loongson2k500_defconfig ls2k500板卡通用配置(串口2作为调试串口)' + @echo 'loongson2k500_mini_dp_defconfig ls2k500先锋板卡通用配置(串口2作为调试串口)' + @echo '' + @echo '2.小型系统的编译配置' + @echo '板卡配置名 对应适用板卡' + @echo 'loongson2k1000_jinlong_mini_defconfig ls2k1000mips版本的星云板卡或者其他ls2k1000mips版本的板卡小型系统通用配置' + @echo 'loongson2k1000la_jinlong_mini_defconfig ls2k1000LA版本的星云板卡或者其他ls2k1000LA版本的板卡小型系统通用配置' + @echo 'loongson2k500_mini_defconfig ls2k500板卡小型系统通用配置(串口2作为调试串口)' + @echo 'loongson2k500_mini_dp_mini_defconfig ls2k500先锋板卡小型系统通用配置(串口2作为调试串口)' + @echo '' + @echo '3.ramdisk的编译配置' + @echo '板卡配置名 对应适用板卡' + @echo 'loongson2k1000la_jinlong_ramdisk_defconfig ls2k1000LA版本的星云板卡或者其他ls2k1000LA版本的板卡ramdisk编译通用配置' + @echo 'loongson2k500_ramdisk_defconfig ls2k500板卡ramdisk编译通用配置(串口2作为调试串口)' + @echo '' + @echo '4.快速启动系统的编译配置' + @echo '板卡配置名 对应适用板卡' + @echo 'loongson2k1000la_jinlong_fastboot_defconfig ls2k1000LA版本的星云板卡或者其他ls2k1000LA版本的板卡快速启动系统通用配置' + @echo 'loongson2k500_fastboot_defconfig ls2k500板卡快速启动系统通用配置(串口2作为调试串口)' + @echo 'loongson2k500_mini_dp_fastboot_defconfig ls2k500先锋板卡快速启动系统通用配置(串口2作为调试串口)' + @echo '' + @echo '5.最小化纯busybox的编译配置((整个系统大小:8.9M))' + @echo '板卡配置名 对应适用板卡' + @echo 'loongson2k1000la_jinlong_pure_busybox_defconfig ls2k1000LA星云板卡或者其他ls2k1000LA版本的板卡编译通用配置' + @echo 'loongson2k500__pure_busybox_defconfig ls2k500先锋板卡编译通用配置' + @echo '' + @echo '6.python3的编译配置' + @echo '板卡配置名 对应适用板卡' + @echo 'loongson2k1000la_jinlong_py3_defconfig ls2k1000LA版本的星云板卡或者其他ls2k1000LA版本的板卡编译python3配置' + @echo 'loongson2k500_mini_dp_py3_defconfig ls2k500板卡编译python3配置(串口2作为调试串口)' + +.PHONY: $(noconfig_targets) + +endif #umask / $(CURDIR) / $(O) diff --git a/Makefile.legacy b/Makefile.legacy new file mode 100644 index 00000000..800c0892 --- /dev/null +++ b/Makefile.legacy @@ -0,0 +1,59 @@ +# +# Makefile.legacy - support for backward compatibility +# +# This file contains placeholders to detect backward-compatibility problems. +# When a buildroot "API" feature is being deprecated, a rule should be added +# here that issues an error when the old feature is used. + +ifeq ($(BR2_LEGACY),y) +$(error "You have legacy configuration in your .config! Please check your configuration.") +endif + +# +# Legacy options from 2014.02 +# + +# The BUILDROOT_DL_DIR environment variable was renamed by BR2_DL_DIR. We +# want to detect someone using the old variable, _except_ if also the new +# variable was set. By the time we get here, however, we no longer have +# access to the BR2_DL_DIR environment variable (because it has been overridden +# by the .config inclusion). However, the environment variable (if defined) was +# saved in DL_DIR, so we can use that. +ifneq ($(BUILDROOT_DL_DIR),) +ifneq ($(BUILDROOT_DL_DIR),$(DL_DIR)) +$(error "The BUILDROOT_DL_DIR environment variable was renamed to BR2_DL_DIR.") +endif +endif + +# If a script is using the deprecated BUILDROOT_CONFIG, make sure it fails. +# Add some directories in front just in case someone used dirname on it. +BUILDROOT_CONFIG_FAKE = /tmp/deprecated/The-BUILDROOT_CONFIG-environment-variable-was-renamed-to-BR2_CONFIG + +# Similar to above for BUILDROOT_CONFIG, but here we have no .config equivalent. +ifneq ($(BUILDROOT_CONFIG),) +ifneq ($(BUILDROOT_CONFIG),$(BR2_CONFIG)) +ifneq ($(BUILDROOT_CONFIG),$(BUILDROOT_CONFIG_FAKE)) +$(error "The BUILDROOT_CONFIG environment variable was renamed to BR2_CONFIG.") +endif +endif +endif + +BUILDROOT_CONFIG = $(BUILDROOT_CONFIG_FAKE) +export BUILDROOT_CONFIG + +# +# Legacy options from 2012.08 +# + +host-pkg-config: + @$(call MESSAGE,host-pkg-config is replaced by host-pkgconf) + @$(call MESSAGE,please update your .mk files) + @false +.PHONY: host-pkg-config + +# +# Legacy options from 2012.05 +# +GENTARGETS = $$(error The GENTARGETS macro no longer exists; use $$$$(eval $$$$(generic-package)) or $$$$(eval $$$$(host-generic-package))) +AUTOTARGETS = $$(error The AUTOTARGETS macro no longer exists; use $$$$(eval $$$$(autotools-package)) or $$$$(eval $$$$(host-autotools-package))) +CMAKETARGETS = $$(error The CMAKETARGETS macro no longer exists; use $$$$(eval $$$$(cmake-package)) or $$$$(eval $$$$(host-cmake-package))) diff --git a/README.md b/README.md new file mode 100644 index 00000000..b993a64d --- /dev/null +++ b/README.md @@ -0,0 +1,113 @@ +Buildroot is a simple, efficient and easy-to-use tool to generate embedded +Linux systems through cross-compilation. + +The documentation can be found in docs/manual. You can generate a text +document with 'make manual-text' and read output/docs/manual/manual.text. +Online documentation can be found at http://buildroot.org/docs.html + +To build and use the buildroot stuff, do the following: + +1) run 'make menuconfig' +2) select the target architecture and the packages you wish to compile +3) run 'make' +4) wait while it compiles +5) find the kernel, bootloader, root filesystem, etc. in output/images + +You do not need to be root to build or run buildroot. Have fun! + +Buildroot comes with a basic configuration for a number of boards. Run +'make list-defconfigs' to view the list of provided configurations. + +Please feed suggestions, bug reports, insults, and bribes back to the +buildroot mailing list: buildroot@buildroot.org +You can also find us on #buildroot on OFTC IRC. + +If you would like to contribute patches, please read +https://buildroot.org/manual.html#submitting-patches + +以上是buildroot官方的README内容 + +下面将是广东龙芯针对buildroot做出的修改而修订的README内容 + +此份buildroot源码包括以下**功能的修改/新增:** + +* 添加广东龙芯系列板卡的文件系统编译配置 +* 添加对LoongArch64的架构的支持 +* 添加部分源码包的编译(minigui环境支持、lvgl环境支持等) +* 添加龙芯嵌入式测试软件的包 +* 添加龙芯SSD下的文件系统部署所用到的ramdisk编译支持 + +本源码需要在x86上的linux环境下编译 +推荐编译条件为: + +| 环境 | 推荐 | +| ------------- | ---------------- | +| 操作系统 | ubuntu 18.04 | +| 交叉编译工具链 | loongarch64: toolchain-loongarch64-linux-gnu-gcc8-host-x86_64-2022-07-18
mips64el:mips64el-linux-gcc-8.x
部署于/opt下,可从资料包中获取 | +| 硬盘容量 | 需要预留**20G或以上的空间**给buildroot存放编译中间文件 | +| 运行机器 | x86 机器,建议为多核,推荐在服务器上编译,个人电脑编译时间较长且占用大量空间 | + +关于依赖环境,可以参考下面的命令进行安装,如果还是存在不能编译的情况,还请按照实际情况进行依赖环境的准备。 +``` +sudo apt -y install make git gcc g++ bison flex libncurses5-dev libssl-dev libelf-dev +sudo apt -y install cmake tree build-essential tcl-dev automake libtool +``` + +通过上述的官方说明可以清楚编译的流程是: + +1. 生效要编译的配置(make XXX_defconfig) +2. make -j24 (-j24 指调用多少cpu核进行编译,根据实际的cpu核数而定,也可以只是make) +3. 前往./output/image 文件夹得到产出的文件系统进行文件 + +编译产出的文件为文件系统的镜像文件 +可用的是rootfs.tar.gz 和 rootfs.ubi + +| 文件 | 说明 | +| ------------- | ---------------- | +| rootfs.tar.gz | ssd要用的文件系统镜像 | +| rootfs.ubi | nand要用的文件系统镜像,根据龙芯板卡的烧录规则,还需要**改名为rootfs-ubifs-ze.img** | + +关于如何定制buildroot的内容本处不再赘述,可以查看用户手册的 **12.2.1.1. buildroot简述** 一节,当然还推荐直接查阅官方手册。 + +编译产出的系统分为以下几种 + +| 系统类型 | 说明 | +| --------------- | --------------------- | +| 全量系统 | 和用户手册中说的busybox系统是一个概念,集成了相当部分的软件包 | +| 小型系统 | 只保留部分软件包,例如可用于外围电路测试软件,网络测试软件的系统,可用于验证板卡功能 | +| ramdisk | 和广东龙芯板卡相关的SSD中系统的安装引导系统的构建
本质是一个busybox系统启动时运行安装系统的程序 | +| 快速启动系统 | 和全量系统一致,但是改为busybox启动,同时第一次启动之后的启动都会不启动其他服务
为了加快从内核到文件系统的速度
实测在ls2k500,如果busybox启动下,全部服务启动则需要4s,禁用服务之后,只需要1.8s
如果想恢复服务,那么请把/root/init.d-bak里面的内容复制到/etc/init.d即可 | + + +全量系统的编译配置 + +| 板卡配置名 | 对应适用板卡 | +| -------------------------------------------- | --------------------- | +| loongson2k1000_jinlong_defconfig | ls2k1000mips版本的金龙板卡
或者其他ls2k1000mips版本的板卡
通用配置(以后可能改名) | +| loongson2k1000_LA_jinlong_defconfig | ls2k1000LA版本的金龙板卡
或者其他ls2k1000LA版本的板卡
通用配置(以后可能改名) | +| loongson2k500_defconfig | ls2k500的板卡
通用配置(串口2作为调试串口) | +| loongson2k500_mini_dp_defconfig | ls2k500的mini开发板卡
通用配置(串口2作为调试串口) | + +小型系统的编译配置 + +| 板卡配置名 | 对应适用板卡 | +| -------------------------------------------- | --------------------- | +| loongson2k1000_jinlong_mini_defconfig | ls2k1000mips版本的金龙板卡
或者其他ls2k1000mips版本的板卡
小型系统通用配置(以后可能改名) | +| loongson2k1000_LA_jinlong_mini_defconfig | ls2k1000LA版本的金龙板卡
或者其他ls2k1000LA版本的板卡
小型系统通用配置(以后可能改名) | +| loongson2k500_mini_defconfig | ls2k500的板卡
小型系统通用配置(串口2作为调试串口) | +| loongson2k500_mini_dp_mini_defconfig | ls2k500的mini开发板卡
小型系统通用配置(串口2作为调试串口) | + +ramdisk的编译配置 + +| 板卡配置名 | 对应适用板卡 | +| -------------------------------------------- | --------------------- | +| loongson2k1000_LA_jinlong_ramdisk_defconfig | ls2k1000LA版本的金龙板卡
或者其他ls2k1000LA版本的板卡
ramdisk编译通用配置(以后可能改名) | +| loongson2k500_ramdisk_defconfig | ls2k500的板卡
ramdisk编译通用配置(串口2作为调试串口) | + +快速启动系统的编译配置 + +| 板卡配置名 | 对应适用板卡 | +| -------------------------------------------- | --------------------- | +| loongson2k1000_LA_jinlong_fastboot_defconfig | ls2k1000LA版本的金龙板卡
或者其他ls2k1000LA版本的板卡
快速启动系统通用配置(以后可能改名) | +| loongson2k500_fastboot_defconfig | ls2k500的板卡
快速启动系统通用配置(串口2作为调试串口) | +| loongson2k500_mini_dp_fastboot_defconfig | ls2k500的mini开发板卡
快速启动系统通用配置(串口2作为调试串口) | diff --git a/arch/Config.in b/arch/Config.in new file mode 100644 index 00000000..3d522534 --- /dev/null +++ b/arch/Config.in @@ -0,0 +1,500 @@ +menu "Target options" + +config BR2_ARCH_IS_64 + bool + +config BR2_KERNEL_64_USERLAND_32 + bool + +config BR2_SOFT_FLOAT + bool + +config BR2_ARCH_HAS_MMU_MANDATORY + bool + +config BR2_ARCH_HAS_MMU_OPTIONAL + bool + +choice + prompt "Target Architecture" + default BR2_i386 + help + Select the target architecture family to build for. + +config BR2_arcle + bool "ARC (little endian)" + select BR2_ARCH_HAS_MMU_MANDATORY + help + Synopsys' DesignWare ARC Processor Cores are a family of + 32-bit CPUs that can be used from deeply embedded to high + performance host applications. Little endian. + +config BR2_arceb + bool "ARC (big endian)" + select BR2_ARCH_HAS_MMU_MANDATORY + help + Synopsys' DesignWare ARC Processor Cores are a family of + 32-bit CPUs that can be used from deeply embedded to high + performance host applications. Big endian. + +config BR2_arm + bool "ARM (little endian)" + # MMU support is set by the subarchitecture file, arch/Config.in.arm + help + ARM is a 32-bit reduced instruction set computer (RISC) + instruction set architecture (ISA) developed by ARM Holdings. + Little endian. + http://www.arm.com/ + http://en.wikipedia.org/wiki/ARM + +config BR2_armeb + bool "ARM (big endian)" + # MMU support is set by the subarchitecture file, arch/Config.in.arm + help + ARM is a 32-bit reduced instruction set computer (RISC) + instruction set architecture (ISA) developed by ARM Holdings. + Big endian. + http://www.arm.com/ + http://en.wikipedia.org/wiki/ARM + +config BR2_aarch64 + bool "AArch64 (little endian)" + select BR2_ARCH_IS_64 + select BR2_ARCH_HAS_MMU_MANDATORY + help + Aarch64 is a 64-bit architecture developed by ARM Holdings. + http://www.arm.com/products/processors/instruction-set-architectures/armv8-architecture.php + http://en.wikipedia.org/wiki/ARM + +config BR2_aarch64_be + bool "AArch64 (big endian)" + select BR2_ARCH_IS_64 + select BR2_ARCH_HAS_MMU_MANDATORY + help + Aarch64 is a 64-bit architecture developed by ARM Holdings. + http://www.arm.com/products/processors/instruction-set-architectures/armv8-architecture.php + http://en.wikipedia.org/wiki/ARM + +config BR2_csky + bool "csky" + select BR2_ARCH_HAS_MMU_MANDATORY + # Most variants are supported by gcc-9+, except one that is + # handled as a special exception in package/gcc/Config.in.host + select BR2_ARCH_NEEDS_GCC_AT_LEAST_9 + help + csky is processor IP from china. + http://www.c-sky.com/ + http://www.github.com/c-sky + +config BR2_i386 + bool "i386" + select BR2_ARCH_HAS_MMU_MANDATORY + help + Intel i386 architecture compatible microprocessor + http://en.wikipedia.org/wiki/I386 + +config BR2_m68k + bool "m68k" + # MMU support is set by the subarchitecture file, arch/Config.in.m68k + help + Motorola 68000 family microprocessor + http://en.wikipedia.org/wiki/M68k + +config BR2_microblazeel + bool "Microblaze AXI (little endian)" + select BR2_ARCH_HAS_MMU_MANDATORY + help + Soft processor core designed for Xilinx FPGAs from Xilinx. AXI + bus based architecture (little endian) + http://www.xilinx.com + http://en.wikipedia.org/wiki/Microblaze + +config BR2_microblazebe + bool "Microblaze non-AXI (big endian)" + select BR2_ARCH_HAS_MMU_MANDATORY + help + Soft processor core designed for Xilinx FPGAs from Xilinx. PLB + bus based architecture (non-AXI, big endian) + http://www.xilinx.com + http://en.wikipedia.org/wiki/Microblaze + +config BR2_mips + bool "MIPS (big endian)" + select BR2_ARCH_HAS_MMU_MANDATORY + help + MIPS is a RISC microprocessor from MIPS Technologies. Big + endian. + http://www.mips.com/ + http://en.wikipedia.org/wiki/MIPS_Technologies + +config BR2_mipsel + bool "MIPS (little endian)" + select BR2_ARCH_HAS_MMU_MANDATORY + help + MIPS is a RISC microprocessor from MIPS Technologies. Little + endian. + http://www.mips.com/ + http://en.wikipedia.org/wiki/MIPS_Technologies + +config BR2_mips64 + bool "MIPS64 (big endian)" + select BR2_ARCH_IS_64 + select BR2_ARCH_HAS_MMU_MANDATORY + help + MIPS is a RISC microprocessor from MIPS Technologies. Big + endian. + http://www.mips.com/ + http://en.wikipedia.org/wiki/MIPS_Technologies + +config BR2_mips64el + bool "MIPS64 (little endian)" + select BR2_ARCH_IS_64 + select BR2_ARCH_HAS_MMU_MANDATORY + help + MIPS is a RISC microprocessor from MIPS Technologies. Little + endian. + http://www.mips.com/ + http://en.wikipedia.org/wiki/MIPS_Technologies + +config BR2_loongarch64 + bool "loongarch64" + select BR2_ARCH_IS_64 + select BR2_ARCH_HAS_MMU_MANDATORY + help + Loongarch 64 + +config BR2_nds32 + bool "nds32" + select BR2_ARCH_HAS_NO_TOOLCHAIN_BUILDROOT + select BR2_ARCH_HAS_MMU_MANDATORY + help + nds32 is a 32-bit architecture developed by Andes Technology. + https://en.wikipedia.org/wiki/Andes_Technology + +config BR2_nios2 + bool "Nios II" + select BR2_ARCH_HAS_MMU_MANDATORY + help + Nios II is a soft core processor from Altera Corporation. + http://www.altera.com/ + http://en.wikipedia.org/wiki/Nios_II + +config BR2_or1k + bool "OpenRISC" + select BR2_ARCH_HAS_MMU_MANDATORY + help + OpenRISC is a free and open processor for embedded system. + http://openrisc.io + +config BR2_powerpc + bool "PowerPC" + select BR2_ARCH_HAS_MMU_MANDATORY + help + PowerPC is a RISC architecture created by Apple-IBM-Motorola + alliance. Big endian. + http://www.power.org/ + http://en.wikipedia.org/wiki/Powerpc + +config BR2_powerpc64 + bool "PowerPC64 (big endian)" + select BR2_ARCH_IS_64 + select BR2_ARCH_HAS_MMU_MANDATORY + help + PowerPC is a RISC architecture created by Apple-IBM-Motorola + alliance. Big endian. + http://www.power.org/ + http://en.wikipedia.org/wiki/Powerpc + +config BR2_powerpc64le + bool "PowerPC64 (little endian)" + select BR2_ARCH_IS_64 + select BR2_ARCH_HAS_MMU_MANDATORY + help + PowerPC is a RISC architecture created by Apple-IBM-Motorola + alliance. Little endian. + http://www.power.org/ + http://en.wikipedia.org/wiki/Powerpc + +config BR2_riscv + bool "RISCV" + select BR2_ARCH_HAS_MMU_MANDATORY + select BR2_ARCH_NEEDS_GCC_AT_LEAST_7 + help + RISC-V is an open, free Instruction Set Architecture created + by the UC Berkeley Architecture Research group and supported + and promoted by RISC-V Foundation. + https://riscv.org/ + https://en.wikipedia.org/wiki/RISC-V + +config BR2_s390x + bool "s390x" + select BR2_ARCH_IS_64 + select BR2_ARCH_HAS_MMU_MANDATORY + help + s390x is a big-endian architecture made by IBM. + http://www.ibm.com/ + http://en.wikipedia.org/wiki/IBM_System/390 + +config BR2_sh + bool "SuperH" + select BR2_ARCH_HAS_MMU_OPTIONAL + help + SuperH (or SH) is a 32-bit reduced instruction set computer + (RISC) instruction set architecture (ISA) developed by + Hitachi. + http://www.hitachi.com/ + http://en.wikipedia.org/wiki/SuperH + +config BR2_sparc + bool "SPARC" + select BR2_ARCH_HAS_MMU_MANDATORY + help + SPARC (from Scalable Processor Architecture) is a RISC + instruction set architecture (ISA) developed by Sun + Microsystems. + http://www.oracle.com/sun + http://en.wikipedia.org/wiki/Sparc + +config BR2_sparc64 + bool "SPARC64" + select BR2_ARCH_IS_64 + select BR2_ARCH_HAS_MMU_MANDATORY + help + SPARC (from Scalable Processor Architecture) is a RISC + instruction set architecture (ISA) developed by Sun + Microsystems. + http://www.oracle.com/sun + http://en.wikipedia.org/wiki/Sparc + +config BR2_x86_64 + bool "x86_64" + select BR2_ARCH_IS_64 + select BR2_ARCH_HAS_MMU_MANDATORY + help + x86-64 is an extension of the x86 instruction set (Intel i386 + architecture compatible microprocessor). + http://en.wikipedia.org/wiki/X86_64 + +config BR2_xtensa + bool "Xtensa" + # MMU support is set by the subarchitecture file, arch/Config.in.xtensa + help + Xtensa is a Tensilica processor IP architecture. + http://en.wikipedia.org/wiki/Xtensa + http://www.tensilica.com/ + +endchoice + +# For some architectures or specific cores, our internal toolchain +# backend is not suitable (like, missing support in upstream gcc, or +# no ChipCo fork exists...) +config BR2_ARCH_HAS_NO_TOOLCHAIN_BUILDROOT + bool + +config BR2_ARCH_HAS_TOOLCHAIN_BUILDROOT + bool + default y if !BR2_ARCH_HAS_NO_TOOLCHAIN_BUILDROOT + +# The following symbols are selected by the individual +# Config.in.$ARCH files +config BR2_ARCH_NEEDS_GCC_AT_LEAST_4_8 + bool + +config BR2_ARCH_NEEDS_GCC_AT_LEAST_4_9 + bool + select BR2_ARCH_NEEDS_GCC_AT_LEAST_4_8 + +config BR2_ARCH_NEEDS_GCC_AT_LEAST_5 + bool + select BR2_ARCH_NEEDS_GCC_AT_LEAST_4_9 + +config BR2_ARCH_NEEDS_GCC_AT_LEAST_6 + bool + select BR2_ARCH_NEEDS_GCC_AT_LEAST_5 + +config BR2_ARCH_NEEDS_GCC_AT_LEAST_7 + bool + select BR2_ARCH_NEEDS_GCC_AT_LEAST_6 + +config BR2_ARCH_NEEDS_GCC_AT_LEAST_8 + bool + select BR2_ARCH_NEEDS_GCC_AT_LEAST_7 + +config BR2_ARCH_NEEDS_GCC_AT_LEAST_9 + bool + select BR2_ARCH_NEEDS_GCC_AT_LEAST_8 + +config BR2_ARCH_NEEDS_GCC_AT_LEAST_10 + bool + select BR2_ARCH_NEEDS_GCC_AT_LEAST_9 + +# The following string values are defined by the individual +# Config.in.$ARCH files +config BR2_ARCH + string + +config BR2_ENDIAN + string + +config BR2_GCC_TARGET_ARCH + string + +config BR2_GCC_TARGET_ABI + string + +config BR2_GCC_TARGET_NAN + string + +config BR2_GCC_TARGET_FP32_MODE + string + +config BR2_GCC_TARGET_CPU + string + +# The value of this option will be passed as --with-fpu= when +# building gcc (internal backend) or -mfpu= in the toolchain +# wrapper (external toolchain) +config BR2_GCC_TARGET_FPU + string + +# The value of this option will be passed as --with-float= when +# building gcc (internal backend) or -mfloat-abi= in the toolchain +# wrapper (external toolchain) +config BR2_GCC_TARGET_FLOAT_ABI + string + +# The value of this option will be passed as --with-mode= when +# building gcc (internal backend) or -m in the toolchain +# wrapper (external toolchain) +config BR2_GCC_TARGET_MODE + string + +# Must be selected by binary formats that support shared libraries. +config BR2_BINFMT_SUPPORTS_SHARED + bool + +# Must match the name of the architecture from readelf point of view, +# i.e the "Machine:" field of readelf output. See get_machine_name() +# in binutils/readelf.c for the list of possible values. +config BR2_READELF_ARCH_NAME + string + +# Set up target binary format +choice + prompt "Target Binary Format" + default BR2_BINFMT_ELF if BR2_USE_MMU + default BR2_BINFMT_FLAT + +config BR2_BINFMT_ELF + bool "ELF" + depends on BR2_USE_MMU + select BR2_BINFMT_SUPPORTS_SHARED + help + ELF (Executable and Linkable Format) is a format for libraries + and executables used across different architectures and + operating systems. + +config BR2_BINFMT_FLAT + bool "FLAT" + depends on !BR2_USE_MMU + help + FLAT binary is a relatively simple and lightweight executable + format based on the original a.out format. It is widely used + in environment where no MMU is available. + +endchoice + +# Set up flat binary type +choice + prompt "FLAT Binary type" + default BR2_BINFMT_FLAT_ONE + depends on BR2_BINFMT_FLAT + +config BR2_BINFMT_FLAT_ONE + bool "One memory region" + help + All segments are linked into one memory region. + +config BR2_BINFMT_FLAT_SHARED + bool "Shared binary" + depends on BR2_m68k + # Even though this really generates shared binaries, there is no libdl + # and dlopen() cannot be used. So packages that require shared + # libraries cannot be built. Therefore, we don't select + # BR2_BINFMT_SUPPORTS_SHARED and therefore force BR2_STATIC_LIBS. + # Although this adds -static to the compilation, that's not a problem + # because the -mid-shared-library option overrides it. + help + Allow to load and link indiviual FLAT binaries at run time. + +endchoice + +if BR2_arcle || BR2_arceb +source "arch/Config.in.arc" +endif + +if BR2_arm || BR2_armeb || BR2_aarch64 || BR2_aarch64_be +source "arch/Config.in.arm" +endif + +if BR2_csky +source "arch/Config.in.csky" +endif + +if BR2_m68k +source "arch/Config.in.m68k" +endif + +if BR2_microblazeel || BR2_microblazebe +source "arch/Config.in.microblaze" +endif + +if BR2_mips || BR2_mips64 || BR2_mipsel || BR2_mips64el +source "arch/Config.in.mips" +endif + +if BR2_loongarch64 +source "arch/Config.in.loongarch64" +endif + +if BR2_nds32 +source "arch/Config.in.nds32" +endif + +if BR2_nios2 +source "arch/Config.in.nios2" +endif + +if BR2_or1k +source "arch/Config.in.or1k" +endif + +if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le +source "arch/Config.in.powerpc" +endif + +if BR2_riscv +source "arch/Config.in.riscv" +endif + +if BR2_s390x +source "arch/Config.in.s390x" +endif + +if BR2_sh +source "arch/Config.in.sh" +endif + +if BR2_sparc || BR2_sparc64 +source "arch/Config.in.sparc" +endif + +if BR2_i386 || BR2_x86_64 +source "arch/Config.in.x86" +endif + +if BR2_xtensa +source "arch/Config.in.xtensa" +endif + +endmenu # Target options diff --git a/arch/Config.in.arc b/arch/Config.in.arc new file mode 100644 index 00000000..f7a6d920 --- /dev/null +++ b/arch/Config.in.arc @@ -0,0 +1,126 @@ +choice + prompt "Target CPU" + default BR2_arc770d + depends on BR2_arc + help + Specific CPU to use + +config BR2_arc750d + bool "ARC 750D" + +config BR2_arc770d + bool "ARC 770D" + +config BR2_archs38 + bool "ARC HS38" + help + Generic ARC HS capable of running Linux, i.e. with MMU, + caches and 32-bit multiplier. Also it corresponds to the + default configuration in older GNU toolchain versions. + +config BR2_archs38_64mpy + bool "ARC HS38 with 64-bit mpy" + help + Fully featured ARC HS capable of running Linux, i.e. with + MMU, caches and 64-bit multiplier. + + If you're not sure which version of ARC HS core you build + for use this one. + +config BR2_archs38_full + bool "ARC HS38 with Quad MAC & FPU" + help + Fully featured ARC HS with additional support for + - Dual- and quad multiply and MC oprations + - Double-precision FPU + + It corresponds to "hs38_slc_full" ARC HS template in + ARChitect. + +config BR2_archs4x_rel31 + bool "ARC HS48 rel 31" + help + Build for HS48 release 3.1 + +config BR2_archs4x + bool "ARC HS48" + help + Latest release of HS48 processor + - Dual and Quad multiply and MAC operations + - Double-precision FPU + +endchoice + +# Choice of atomic instructions presence +config BR2_ARC_ATOMIC_EXT + bool "Atomic extension (LLOCK/SCOND instructions)" + default y if BR2_arc770d + default y if BR2_archs38 || BR2_archs38_64mpy || BR2_archs38_full + default y if BR2_archs4x_rel31 || BR2_archs4x + +config BR2_ARCH + default "arc" if BR2_arcle + default "arceb" if BR2_arceb + +config BR2_arc + bool + default y if BR2_arcle || BR2_arceb + +config BR2_ENDIAN + default "LITTLE" if BR2_arcle + default "BIG" if BR2_arceb + +config BR2_GCC_TARGET_CPU + default "arc700" if BR2_arc750d + default "arc700" if BR2_arc770d + default "archs" if BR2_archs38 + default "hs38" if BR2_archs38_64mpy + default "hs38_linux" if BR2_archs38_full + default "hs4x_rel31" if BR2_archs4x_rel31 + default "hs4x" if BR2_archs4x + +config BR2_READELF_ARCH_NAME + default "ARCompact" if BR2_arc750d || BR2_arc770d + default "ARCv2" if BR2_archs38 || BR2_archs38_64mpy || BR2_archs38_full + default "ARCv2" if BR2_archs4x_rel31 || BR2_archs4x + +choice + prompt "MMU Page Size" + default BR2_ARC_PAGE_SIZE_8K + help + MMU starting from version 3 (found in ARC 770) and now + version 4 (found in ARC HS38) allows the selection of the + page size during ASIC design creation. + + The following options are available for MMU v3 and v4: 4kB, + 8kB and 16 kB. + + The default is 8 kB (that really matches the only page size + in MMU v2). It is important to build a toolchain with page + size matching the hardware configuration. Otherwise + user-space applications will fail at runtime. + +config BR2_ARC_PAGE_SIZE_4K + bool "4KB" + depends on !BR2_arc750d + +config BR2_ARC_PAGE_SIZE_8K + bool "8KB" + help + This is the one and only option available for MMUv2 and + default value for MMU v3 and v4. + +config BR2_ARC_PAGE_SIZE_16K + bool "16KB" + depends on !BR2_arc750d + +endchoice + +config BR2_ARC_PAGE_SIZE + string + default "4K" if BR2_ARC_PAGE_SIZE_4K + default "8K" if BR2_ARC_PAGE_SIZE_8K + default "16K" if BR2_ARC_PAGE_SIZE_16K + +# vim: ft=kconfig +# -*- mode:kconfig; -*- diff --git a/arch/Config.in.arm b/arch/Config.in.arm new file mode 100644 index 00000000..4c0910e4 --- /dev/null +++ b/arch/Config.in.arm @@ -0,0 +1,934 @@ +# arm cpu features +config BR2_ARM_CPU_HAS_NEON + bool + +# for some cores, NEON support is optional +config BR2_ARM_CPU_MAYBE_HAS_NEON + bool + +# For some cores, the FPU is optional +config BR2_ARM_CPU_MAYBE_HAS_FPU + bool + +config BR2_ARM_CPU_HAS_FPU + bool + +# for some cores, VFPv2 is optional +config BR2_ARM_CPU_MAYBE_HAS_VFPV2 + bool + select BR2_ARM_CPU_MAYBE_HAS_FPU + +config BR2_ARM_CPU_HAS_VFPV2 + bool + select BR2_ARM_CPU_HAS_FPU + +# for some cores, VFPv3 is optional +config BR2_ARM_CPU_MAYBE_HAS_VFPV3 + bool + select BR2_ARM_CPU_MAYBE_HAS_VFPV2 + +config BR2_ARM_CPU_HAS_VFPV3 + bool + select BR2_ARM_CPU_HAS_VFPV2 + +# for some cores, VFPv4 is optional +config BR2_ARM_CPU_MAYBE_HAS_VFPV4 + bool + select BR2_ARM_CPU_MAYBE_HAS_VFPV3 + +config BR2_ARM_CPU_HAS_VFPV4 + bool + select BR2_ARM_CPU_HAS_VFPV3 + +# FPv4 is always optional +config BR2_ARM_CPU_MAYBE_HAS_FPV4 + bool + select BR2_ARM_CPU_MAYBE_HAS_FPU + +config BR2_ARM_CPU_HAS_FPV4 + bool + select BR2_ARM_CPU_HAS_FPU + +# FPv5 is always optional +config BR2_ARM_CPU_MAYBE_HAS_FPV5 + bool + select BR2_ARM_CPU_MAYBE_HAS_FPV4 + +config BR2_ARM_CPU_HAS_FPV5 + bool + select BR2_ARM_CPU_HAS_FPV4 + +config BR2_ARM_CPU_HAS_FP_ARMV8 + bool + select BR2_ARM_CPU_HAS_VFPV4 + +config BR2_ARM_CPU_HAS_ARM + bool + +config BR2_ARM_CPU_HAS_THUMB + bool + +config BR2_ARM_CPU_HAS_THUMB2 + bool + +config BR2_ARM_CPU_ARMV4 + bool + +config BR2_ARM_CPU_ARMV5 + bool + +config BR2_ARM_CPU_ARMV6 + bool + +config BR2_ARM_CPU_ARMV7A + bool + +config BR2_ARM_CPU_ARMV7M + bool + +config BR2_ARM_CPU_ARMV8A + bool + +choice + prompt "Target Architecture Variant" + default BR2_cortex_a53 if BR2_ARCH_IS_64 + default BR2_arm926t + help + Specific CPU variant to use + +if !BR2_ARCH_IS_64 +comment "armv4 cores" +config BR2_arm920t + bool "arm920t" + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_HAS_THUMB + select BR2_ARM_CPU_ARMV4 + select BR2_ARCH_HAS_MMU_OPTIONAL +config BR2_arm922t + bool "arm922t" + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_HAS_THUMB + select BR2_ARM_CPU_ARMV4 + select BR2_ARCH_HAS_MMU_OPTIONAL +config BR2_fa526 + bool "fa526/626" + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_ARMV4 + select BR2_ARCH_HAS_MMU_OPTIONAL +config BR2_strongarm + bool "strongarm sa110/sa1100" + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_ARMV4 + select BR2_ARCH_HAS_MMU_OPTIONAL + +comment "armv5 cores" +config BR2_arm926t + bool "arm926t" + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_MAYBE_HAS_VFPV2 + select BR2_ARM_CPU_HAS_THUMB + select BR2_ARM_CPU_ARMV5 + select BR2_ARCH_HAS_MMU_OPTIONAL +config BR2_iwmmxt + bool "iwmmxt" + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_ARMV5 + select BR2_ARCH_HAS_MMU_OPTIONAL +config BR2_xscale + bool "xscale" + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_HAS_THUMB + select BR2_ARM_CPU_ARMV5 + select BR2_ARCH_HAS_MMU_OPTIONAL + +comment "armv6 cores" +config BR2_arm1136j_s + bool "arm1136j-s" + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_HAS_THUMB + select BR2_ARM_CPU_ARMV6 + select BR2_ARCH_HAS_MMU_OPTIONAL +config BR2_arm1136jf_s + bool "arm1136jf-s" + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_HAS_VFPV2 + select BR2_ARM_CPU_HAS_THUMB + select BR2_ARM_CPU_ARMV6 + select BR2_ARCH_HAS_MMU_OPTIONAL +config BR2_arm1176jz_s + bool "arm1176jz-s" + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_HAS_THUMB + select BR2_ARM_CPU_ARMV6 + select BR2_ARCH_HAS_MMU_OPTIONAL +config BR2_arm1176jzf_s + bool "arm1176jzf-s" + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_HAS_VFPV2 + select BR2_ARM_CPU_HAS_THUMB + select BR2_ARM_CPU_ARMV6 + select BR2_ARCH_HAS_MMU_OPTIONAL +config BR2_arm11mpcore + bool "mpcore" + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_MAYBE_HAS_VFPV2 + select BR2_ARM_CPU_HAS_THUMB + select BR2_ARM_CPU_ARMV6 + select BR2_ARCH_HAS_MMU_OPTIONAL + +comment "armv7a cores" +config BR2_cortex_a5 + bool "cortex-A5" + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_MAYBE_HAS_NEON + select BR2_ARM_CPU_MAYBE_HAS_VFPV4 + select BR2_ARM_CPU_HAS_THUMB2 + select BR2_ARM_CPU_ARMV7A + select BR2_ARCH_HAS_MMU_OPTIONAL +config BR2_cortex_a7 + bool "cortex-A7" + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_HAS_NEON + select BR2_ARM_CPU_HAS_VFPV4 + select BR2_ARM_CPU_HAS_THUMB2 + select BR2_ARM_CPU_ARMV7A + select BR2_ARCH_HAS_MMU_OPTIONAL +config BR2_cortex_a8 + bool "cortex-A8" + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_HAS_NEON + select BR2_ARM_CPU_HAS_VFPV3 + select BR2_ARM_CPU_HAS_THUMB2 + select BR2_ARM_CPU_ARMV7A + select BR2_ARCH_HAS_MMU_OPTIONAL +config BR2_cortex_a9 + bool "cortex-A9" + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_MAYBE_HAS_NEON + select BR2_ARM_CPU_MAYBE_HAS_VFPV3 + select BR2_ARM_CPU_HAS_THUMB2 + select BR2_ARM_CPU_ARMV7A + select BR2_ARCH_HAS_MMU_OPTIONAL +config BR2_cortex_a12 + bool "cortex-A12" + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_HAS_NEON + select BR2_ARM_CPU_HAS_VFPV4 + select BR2_ARM_CPU_HAS_THUMB2 + select BR2_ARM_CPU_ARMV7A + select BR2_ARCH_HAS_MMU_OPTIONAL +config BR2_cortex_a15 + bool "cortex-A15" + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_HAS_NEON + select BR2_ARM_CPU_HAS_VFPV4 + select BR2_ARM_CPU_HAS_THUMB2 + select BR2_ARM_CPU_ARMV7A + select BR2_ARCH_HAS_MMU_OPTIONAL +config BR2_cortex_a15_a7 + bool "cortex-A15/A7 big.LITTLE" + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_HAS_NEON + select BR2_ARM_CPU_HAS_VFPV4 + select BR2_ARM_CPU_HAS_THUMB2 + select BR2_ARM_CPU_ARMV7A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_4_9 +config BR2_cortex_a17 + bool "cortex-A17" + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_HAS_NEON + select BR2_ARM_CPU_HAS_VFPV4 + select BR2_ARM_CPU_HAS_THUMB2 + select BR2_ARM_CPU_ARMV7A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_5 +config BR2_cortex_a17_a7 + bool "cortex-A17/A7 big.LITTLE" + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_HAS_NEON + select BR2_ARM_CPU_HAS_VFPV4 + select BR2_ARM_CPU_HAS_THUMB2 + select BR2_ARM_CPU_ARMV7A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_5 +config BR2_pj4 + bool "pj4" + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_HAS_VFPV3 + select BR2_ARM_CPU_ARMV7A + select BR2_ARCH_HAS_MMU_OPTIONAL + +comment "armv7m cores" +config BR2_cortex_m3 + bool "cortex-M3" + select BR2_ARM_CPU_HAS_THUMB2 + select BR2_ARM_CPU_ARMV7M +config BR2_cortex_m4 + bool "cortex-M4" + select BR2_ARM_CPU_HAS_THUMB2 + select BR2_ARM_CPU_MAYBE_HAS_FPV4 + select BR2_ARM_CPU_ARMV7M +config BR2_cortex_m7 + bool "cortex-M7" + select BR2_ARM_CPU_HAS_THUMB2 + select BR2_ARM_CPU_MAYBE_HAS_FPV5 + select BR2_ARM_CPU_ARMV7M + select BR2_ARCH_NEEDS_GCC_AT_LEAST_5 +endif # !BR2_ARCH_IS_64 + +comment "armv8 cores" +config BR2_cortex_a32 + bool "cortex-A32" + depends on !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_ARM + select BR2_ARM_CPU_HAS_NEON + select BR2_ARM_CPU_HAS_THUMB2 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_6 +config BR2_cortex_a35 + bool "cortex-A35" + select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_6 +config BR2_cortex_a53 + bool "cortex-A53" + select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL +config BR2_cortex_a57 + bool "cortex-A57" + select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL +config BR2_cortex_a57_a53 + bool "cortex-A57/A53 big.LITTLE" + select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_6 +config BR2_cortex_a72 + bool "cortex-A72" + select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_5 +config BR2_cortex_a72_a53 + bool "cortex-A72/A53 big.LITTLE" + select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_6 +config BR2_cortex_a73 + bool "cortex-A73" + select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_7 +config BR2_cortex_a73_a35 + bool "cortex-A73/A35 big.LITTLE" + select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_7 +config BR2_cortex_a73_a53 + bool "cortex-A73/A53 big.LITTLE" + select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_7 +config BR2_emag + bool "emag" + depends on BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_9 +config BR2_exynos_m1 + bool "exynos-m1" + select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_5 +config BR2_falkor + bool "falkor" + depends on BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_7 +config BR2_phecda + bool "phecda" + depends on BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_9 +config BR2_qdf24xx + bool "qdf24xx" + depends on BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_6 +config BR2_thunderx + bool "thunderx (aka octeontx)" + depends on BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_5 +config BR2_thunderxt81 + bool "thunderxt81 (aka octeontx81)" + depends on BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_7 +config BR2_thunderxt83 + bool "thunderxt83 (aka octeontx83)" + depends on BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_7 +config BR2_thunderxt88 + bool "thunderxt88" + depends on BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_7 +config BR2_thunderxt88p1 + bool "thunderxt88p1" + depends on BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_7 +config BR2_xgene1 + bool "xgene1" + select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_5 + +comment "armv8.1a cores" +config BR2_thunderx2t99 + bool "thunderx2t99" + depends on BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_7 +config BR2_thunderx2t99p1 + bool "thunderx2t99p1" + depends on BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_7 +config BR2_vulcan + bool "vulcan" + depends on BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_7 + +comment "armv8.2a cores" +config BR2_cortex_a55 + bool "cortex-A55" + depends on BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_8 +config BR2_cortex_a75 + bool "cortex-A75" + depends on BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_8 +config BR2_cortex_a75_a55 + bool "cortex-A75/A55 big.LITTLE" + depends on BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_8 +config BR2_cortex_a76 + bool "cortex-A76" + select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_9 +config BR2_cortex_a76_a55 + bool "cortex-A76/A55 big.LITTLE" + select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_9 +config BR2_neoverse_n1 + bool "neoverse-N1 (aka ares)" + select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_9 +config BR2_tsv110 + bool "tsv110" + depends on BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_9 + +comment "armv8.4a cores" +config BR2_saphira + bool "saphira" + depends on BR2_ARCH_IS_64 + select BR2_ARM_CPU_HAS_FP_ARMV8 + select BR2_ARM_CPU_ARMV8A + select BR2_ARCH_HAS_MMU_OPTIONAL + select BR2_ARCH_NEEDS_GCC_AT_LEAST_8 +endchoice + +config BR2_ARM_ENABLE_NEON + bool "Enable NEON SIMD extension support" + depends on BR2_ARM_CPU_MAYBE_HAS_NEON + select BR2_ARM_CPU_HAS_NEON + help + For some CPU cores, the NEON SIMD extension is optional. + Select this option if you are certain your particular + implementation has NEON support and you want to use it. + +config BR2_ARM_ENABLE_VFP + bool "Enable VFP extension support" + depends on BR2_ARM_CPU_MAYBE_HAS_FPU + select BR2_ARM_CPU_HAS_FPV5 if BR2_ARM_CPU_MAYBE_HAS_FPV5 + select BR2_ARM_CPU_HAS_FPV4 if BR2_ARM_CPU_MAYBE_HAS_FPV4 + select BR2_ARM_CPU_HAS_VFPV4 if BR2_ARM_CPU_MAYBE_HAS_VFPV4 + select BR2_ARM_CPU_HAS_VFPV3 if BR2_ARM_CPU_MAYBE_HAS_VFPV3 + select BR2_ARM_CPU_HAS_VFPV2 if BR2_ARM_CPU_MAYBE_HAS_VFPV2 + help + For some CPU cores, the VFP extension is optional. Select + this option if you are certain your particular + implementation has VFP support and you want to use it. + +choice + prompt "Target ABI" + default BR2_ARM_EABIHF if BR2_ARM_CPU_HAS_FPU + default BR2_ARM_EABI + depends on BR2_arm || BR2_armeb + help + Application Binary Interface to use. The Application Binary + Interface describes the calling conventions (how arguments + are passed to functions, how the return value is passed, how + system calls are made, etc.). + +config BR2_ARM_EABI + bool "EABI" + help + The EABI is currently the standard ARM ABI, which is used in + most projects. It supports both the 'soft' floating point + model (in which floating point instructions are emulated in + software) and the 'softfp' floating point model (in which + floating point instructions are executed using an hardware + floating point unit, but floating point arguments to + functions are passed in integer registers). + + The 'softfp' floating point model is link-compatible with + the 'soft' floating point model, i.e you can link a library + built 'soft' with some other code built 'softfp'. + + However, passing the floating point arguments in integer + registers is a bit inefficient, so if your ARM processor has + a floating point unit, and you don't have pre-compiled + 'soft' or 'softfp' code, using the EABIhf ABI will provide + better floating point performances. + + If your processor does not have a floating point unit, then + you must use this ABI. + +config BR2_ARM_EABIHF + bool "EABIhf" + depends on BR2_ARM_CPU_HAS_FPU + help + The EABIhf is an extension of EABI which supports the 'hard' + floating point model. This model uses the floating point + unit to execute floating point instructions, and passes + floating point arguments in floating point registers. + + It is more efficient than EABI for floating point related + workload. However, it does not allow to link against code + that has been pre-built for the 'soft' or 'softfp' floating + point models. + + If your processor has a floating point unit, and you don't + depend on existing pre-compiled code, this option is most + likely the best choice. + +endchoice + +choice + prompt "Floating point strategy" + default BR2_ARM_FPU_FP_ARMV8 if BR2_ARM_CPU_HAS_FP_ARMV8 + default BR2_ARM_FPU_FPV5D16 if BR2_ARM_CPU_HAS_FPV5 + default BR2_ARM_FPU_FPV4D16 if BR2_ARM_CPU_HAS_FPV4 + default BR2_ARM_FPU_VFPV4D16 if BR2_ARM_CPU_HAS_VFPV4 + default BR2_ARM_FPU_VFPV3D16 if BR2_ARM_CPU_HAS_VFPV3 + default BR2_ARM_FPU_VFPV2 if BR2_ARM_CPU_HAS_VFPV2 + default BR2_ARM_SOFT_FLOAT if !BR2_ARM_CPU_HAS_FPU + +config BR2_ARM_SOFT_FLOAT + bool "Soft float" + depends on BR2_ARM_EABI + select BR2_SOFT_FLOAT + help + This option allows to use software emulated floating + point. It should be used for ARM cores that do not include a + Vector Floating Point unit, such as ARMv5 cores (ARM926 for + example) or certain ARMv6 cores. + +config BR2_ARM_FPU_VFPV2 + bool "VFPv2" + depends on BR2_ARM_CPU_HAS_VFPV2 + help + This option allows to use the VFPv2 floating point unit, as + available in some ARMv5 processors (ARM926EJ-S) and some + ARMv6 processors (ARM1136JF-S, ARM1176JZF-S and ARM11 + MPCore). + + Note that this option is also safe to use for newer cores + such as Cortex-A, because the VFPv3 and VFPv4 units are + backward compatible with VFPv2. + +config BR2_ARM_FPU_VFPV3 + bool "VFPv3" + depends on BR2_ARM_CPU_HAS_VFPV3 + help + This option allows to use the VFPv3 floating point unit, as + available in some ARMv7 processors (Cortex-A{8, 9}). This + option requires a VFPv3 unit that has 32 double-precision + registers, which is not necessarily the case in all SOCs + based on Cortex-A{8, 9}. If you're unsure, use VFPv3-D16 + instead, which is guaranteed to work on all Cortex-A{8, 9}. + + Note that this option is also safe to use for newer cores + that have a VFPv4 unit, because VFPv4 is backward compatible + with VFPv3. They must of course also have 32 + double-precision registers. + +config BR2_ARM_FPU_VFPV3D16 + bool "VFPv3-D16" + depends on BR2_ARM_CPU_HAS_VFPV3 + help + This option allows to use the VFPv3 floating point unit, as + available in some ARMv7 processors (Cortex-A{8, 9}). This + option requires a VFPv3 unit that has 16 double-precision + registers, which is generally the case in all SOCs based on + Cortex-A{8, 9}, even though VFPv3 is technically optional on + Cortex-A9. This is the safest option for those cores. + + Note that this option is also safe to use for newer cores + such that have a VFPv4 unit, because the VFPv4 is backward + compatible with VFPv3. + +config BR2_ARM_FPU_VFPV4 + bool "VFPv4" + depends on BR2_ARM_CPU_HAS_VFPV4 + help + This option allows to use the VFPv4 floating point unit, as + available in some ARMv7 processors (Cortex-A{5, 7, 12, + 15}). This option requires a VFPv4 unit that has 32 + double-precision registers, which is not necessarily the + case in all SOCs based on Cortex-A{5, 7, 12, 15}. If you're + unsure, you should probably use VFPv4-D16 instead. + + Note that if you want binary code that works on all ARMv7 + cores, including the earlier Cortex-A{8, 9}, you should + instead select VFPv3. + +config BR2_ARM_FPU_VFPV4D16 + bool "VFPv4-D16" + depends on BR2_ARM_CPU_HAS_VFPV4 + help + This option allows to use the VFPv4 floating point unit, as + available in some ARMv7 processors (Cortex-A{5, 7, 12, + 15}). This option requires a VFPv4 unit that has 16 + double-precision registers, which is always available on + Cortex-A12 and Cortex-A15, but optional on Cortex-A5 and + Cortex-A7. + + Note that if you want binary code that works on all ARMv7 + cores, including the earlier Cortex-A{8, 9}, you should + instead select VFPv3-D16. + +config BR2_ARM_FPU_NEON + bool "NEON" + depends on BR2_ARM_CPU_HAS_NEON + help + This option allows to use the NEON SIMD unit, as available + in some ARMv7 processors, as a floating-point unit. It + should however be noted that using NEON for floating point + operations doesn't provide a complete compatibility with the + IEEE 754. + +config BR2_ARM_FPU_NEON_VFPV4 + bool "NEON/VFPv4" + depends on BR2_ARM_CPU_HAS_VFPV4 + depends on BR2_ARM_CPU_HAS_NEON + help + This option allows to use both the VFPv4 and the NEON SIMD + units for floating point operations. Note that some ARMv7 + cores do not necessarily have VFPv4 and/or NEON support, for + example on Cortex-A5 and Cortex-A7, support for VFPv4 and + NEON is optional. + +config BR2_ARM_FPU_FPV4D16 + bool "FPv4-D16" + depends on BR2_ARM_CPU_HAS_FPV4 + help + This option allows to use the FPv4-SP (single precision) + floating point unit, as available in some ARMv7m processors + (Cortex-M4). + +config BR2_ARM_FPU_FPV5D16 + bool "FPv5-D16" + depends on BR2_ARM_CPU_HAS_FPV5 + select BR2_ARCH_NEEDS_GCC_AT_LEAST_5 + help + This option allows to use the FPv5-SP (single precision) + floating point unit, as available in some ARMv7m processors + (Cortex-M7). + + Note that if you want binary code that works on the earlier + Cortex-M4, you should instead select FPv4-D16. + +config BR2_ARM_FPU_FPV5DPD16 + bool "FPv5-DP-D16" + depends on BR2_ARM_CPU_HAS_FPV5 + select BR2_ARCH_NEEDS_GCC_AT_LEAST_5 + help + This option allows to use the FPv5-DP (double precision) + floating point unit, as available in some ARMv7m processors + (Cortex-M7). + + Note that if you want binary code that works on the earlier + Cortex-M4, you should instead select FPv4-D16. + +config BR2_ARM_FPU_FP_ARMV8 + bool "FP-ARMv8" + depends on BR2_ARM_CPU_HAS_FP_ARMV8 + help + This option allows to use the ARMv8 floating point unit. + +config BR2_ARM_FPU_NEON_FP_ARMV8 + bool "NEON/FP-ARMv8" + depends on BR2_ARM_CPU_HAS_FP_ARMV8 + depends on BR2_ARM_CPU_HAS_NEON + help + This option allows to use both the ARMv8 floating point unit + and the NEON SIMD unit for floating point operations. + +endchoice + +choice + prompt "ARM instruction set" + depends on BR2_arm || BR2_armeb + +config BR2_ARM_INSTRUCTIONS_ARM + bool "ARM" + depends on BR2_ARM_CPU_HAS_ARM + help + This option instructs the compiler to generate regular ARM + instructions, that are all 32 bits wide. + +config BR2_ARM_INSTRUCTIONS_THUMB + bool "Thumb" + depends on BR2_ARM_CPU_HAS_THUMB + # Thumb-1 and VFP are not compatible + depends on BR2_ARM_SOFT_FLOAT + help + This option instructions the compiler to generate Thumb + instructions, which allows to mix 16 bits instructions and + 32 bits instructions. This generally provides a much smaller + compiled binary size. + +comment "Thumb1 is not compatible with VFP" + depends on BR2_ARM_CPU_HAS_THUMB + depends on !BR2_ARM_SOFT_FLOAT + +config BR2_ARM_INSTRUCTIONS_THUMB2 + bool "Thumb2" + depends on BR2_ARM_CPU_HAS_THUMB2 + help + This option instructions the compiler to generate Thumb2 + instructions, which allows to mix 16 bits instructions and + 32 bits instructions. This generally provides a much smaller + compiled binary size. + +endchoice + +config BR2_ARCH + default "arm" if BR2_arm + default "armeb" if BR2_armeb + default "aarch64" if BR2_aarch64 + default "aarch64_be" if BR2_aarch64_be + +config BR2_ENDIAN + default "LITTLE" if (BR2_arm || BR2_aarch64) + default "BIG" if (BR2_armeb || BR2_aarch64_be) + +config BR2_GCC_TARGET_CPU + # armv4 + default "arm920t" if BR2_arm920t + default "arm922t" if BR2_arm922t + default "fa526" if BR2_fa526 + default "strongarm" if BR2_strongarm + # armv5 + default "arm926ej-s" if BR2_arm926t + default "iwmmxt" if BR2_iwmmxt + default "xscale" if BR2_xscale + # armv6 + default "arm1136j-s" if BR2_arm1136j_s + default "arm1136jf-s" if BR2_arm1136jf_s + default "arm1176jz-s" if BR2_arm1176jz_s + default "arm1176jzf-s" if BR2_arm1176jzf_s + default "mpcore" if BR2_arm11mpcore && BR2_ARM_CPU_HAS_VFPV2 + default "mpcorenovfp" if BR2_arm11mpcore + # armv7a + default "cortex-a5" if BR2_cortex_a5 + default "cortex-a7" if BR2_cortex_a7 + default "cortex-a8" if BR2_cortex_a8 + default "cortex-a9" if BR2_cortex_a9 + default "cortex-a12" if BR2_cortex_a12 + default "cortex-a15" if BR2_cortex_a15 + default "cortex-a15.cortex-a7" if BR2_cortex_a15_a7 + default "cortex-a17" if BR2_cortex_a17 + default "cortex-a17.cortex-a7" if BR2_cortex_a17_a7 + default "marvell-pj4" if BR2_pj4 + # armv7m + default "cortex-m3" if BR2_cortex_m3 + default "cortex-m4" if BR2_cortex_m4 + default "cortex-m7" if BR2_cortex_m7 + # armv8a + default "cortex-a32" if BR2_cortex_a32 + default "cortex-a35" if BR2_cortex_a35 + default "cortex-a53" if BR2_cortex_a53 + default "cortex-a57" if BR2_cortex_a57 + default "cortex-a57.cortex-a53" if BR2_cortex_a57_a53 + default "cortex-a72" if BR2_cortex_a72 + default "cortex-a72.cortex-a53" if BR2_cortex_a72_a53 + default "cortex-a73" if BR2_cortex_a73 + default "cortex-a73.cortex-a35" if BR2_cortex_a73_a35 + default "cortex-a73.cortex-a53" if BR2_cortex_a73_a53 + default "emag" if BR2_emag + default "exynos-m1" if BR2_exynos_m1 + default "falkor" if BR2_falkor + default "phecda" if BR2_phecda + default "qdf24xx" if BR2_qdf24xx + default "thunderx" if BR2_thunderx && !BR2_TOOLCHAIN_GCC_AT_LEAST_9 + default "octeontx" if BR2_thunderx && BR2_TOOLCHAIN_GCC_AT_LEAST_9 + default "thunderxt81" if BR2_thunderxt81 && !BR2_TOOLCHAIN_GCC_AT_LEAST_9 + default "octeontx81" if BR2_thunderxt81 && BR2_TOOLCHAIN_GCC_AT_LEAST_9 + default "thunderxt83" if BR2_thunderxt83 && !BR2_TOOLCHAIN_GCC_AT_LEAST_9 + default "octeontx83" if BR2_thunderxt83 && BR2_TOOLCHAIN_GCC_AT_LEAST_9 + default "thunderxt88" if BR2_thunderxt88 + default "thunderxt88p1" if BR2_thunderxt88p1 + default "xgene1" if BR2_xgene1 + # armv8.1a + default "thunderx2t99" if BR2_thunderx2t99 + default "thunderx2t99p1" if BR2_thunderx2t99p1 + default "vulcan" if BR2_vulcan + # armv8.2a + default "cortex-a55" if BR2_cortex_a55 + default "cortex-a75" if BR2_cortex_a75 + default "cortex-a75.cortex-a55" if BR2_cortex_a75_a55 + default "cortex-a76" if BR2_cortex_a76 + default "cortex-a76.cortex-a55" if BR2_cortex_a76_a55 + default "neoverse-n1" if BR2_neoverse_n1 + default "tsv110" if BR2_tsv110 + # armv8.4a + default "saphira" if BR2_saphira + +config BR2_GCC_TARGET_ABI + default "aapcs-linux" if BR2_arm || BR2_armeb + default "lp64" if BR2_aarch64 || BR2_aarch64_be + +config BR2_GCC_TARGET_FPU + default "vfp" if BR2_ARM_FPU_VFPV2 + default "vfpv3" if BR2_ARM_FPU_VFPV3 + default "vfpv3-d16" if BR2_ARM_FPU_VFPV3D16 + default "vfpv4" if BR2_ARM_FPU_VFPV4 + default "vfpv4-d16" if BR2_ARM_FPU_VFPV4D16 + default "neon" if BR2_ARM_FPU_NEON + default "neon-vfpv4" if BR2_ARM_FPU_NEON_VFPV4 + default "fpv4-sp-d16" if BR2_ARM_FPU_FPV4D16 + default "fpv5-sp-d16" if BR2_ARM_FPU_FPV5D16 + default "fpv5-d16" if BR2_ARM_FPU_FPV5DPD16 + default "fp-armv8" if BR2_ARM_FPU_FP_ARMV8 + default "neon-fp-armv8" if BR2_ARM_FPU_NEON_FP_ARMV8 + depends on BR2_arm || BR2_armeb + +config BR2_GCC_TARGET_FLOAT_ABI + default "soft" if BR2_ARM_SOFT_FLOAT + default "softfp" if !BR2_ARM_SOFT_FLOAT && BR2_ARM_EABI + default "hard" if !BR2_ARM_SOFT_FLOAT && BR2_ARM_EABIHF + +config BR2_GCC_TARGET_MODE + default "arm" if BR2_ARM_INSTRUCTIONS_ARM + default "thumb" if BR2_ARM_INSTRUCTIONS_THUMB || BR2_ARM_INSTRUCTIONS_THUMB2 + +config BR2_READELF_ARCH_NAME + default "ARM" if BR2_arm || BR2_armeb + default "AArch64" if BR2_aarch64 || BR2_aarch64_be + +# vim: ft=kconfig +# -*- mode:kconfig; -*- diff --git a/arch/Config.in.csky b/arch/Config.in.csky new file mode 100644 index 00000000..7e2029f7 --- /dev/null +++ b/arch/Config.in.csky @@ -0,0 +1,49 @@ +choice + prompt "Target Architecture Variant" + default BR2_ck610 + help + Specific CPU variant to use + +config BR2_ck610 + # Not supported by upstream gcc <= 9, and handled as a special + # exception in package/gcc/Config.in.host + bool "ck610" + +config BR2_ck807 + bool "ck807" + +config BR2_ck810 + bool "ck810" + +config BR2_ck860 + bool "ck860" + +endchoice + +config BR2_CSKY_FPU + bool "Enable FPU coprocessor" + depends on BR2_ck810 || BR2_ck807 || BR2_ck860 + help + You can say N here if your C-SKY CPU doesn't have a + Floating-Point Coprocessor or if you don't need FPU support + for your user-space programs. + +config BR2_CSKY_VDSP + bool "Enable VDSP enhanced instructions Co-processor" + depends on BR2_CSKY_FPU + +config BR2_GCC_TARGET_FLOAT_ABI + default "soft" if !BR2_CSKY_FPU + default "hard" if BR2_CSKY_FPU + +config BR2_ARCH + default "csky" + +config BR2_ENDIAN + default "LITTLE" + +config BR2_READELF_ARCH_NAME + default "CSKY" + +# vim: ft=kconfig +# -*- mode:kconfig; -*- diff --git a/arch/Config.in.loongarch64 b/arch/Config.in.loongarch64 new file mode 100644 index 00000000..7407883b --- /dev/null +++ b/arch/Config.in.loongarch64 @@ -0,0 +1,18 @@ +#-march=??? +config BR2_ARCH + default "loongarch64" if BR2_loongarch64 + +config BR2_ENDIAN + default "LITTLE" if BR2_loongarch64 + +config BR2_GCC_TARGET_ARCH + default "loongarch64" if BR2_loongarch64 + +config BR2_GCC_TARGET_ABI + default "lp64" if BR2_loongarch64 + +config BR2_READELF_ARCH_NAME + default "LoongArch" + +# vim: ft=kconfig +# -*- mode:kconfig; -*- diff --git a/arch/Config.in.m68k b/arch/Config.in.m68k new file mode 100644 index 00000000..275f47f1 --- /dev/null +++ b/arch/Config.in.m68k @@ -0,0 +1,43 @@ +config BR2_ARCH + default "m68k" if BR2_m68k + +config BR2_ENDIAN + default "BIG" + +# symbols used to distinguish between m68k and coldfire +# for gcc multilib +config BR2_m68k_m68k + bool + +config BR2_m68k_cf + bool + +# coldfire variants will be added later +choice + prompt "Target CPU" + default BR2_m68k_68040 + depends on BR2_m68k + help + Specific CPU variant to use + +config BR2_m68k_68040 + bool "68040" + select BR2_m68k_m68k + select BR2_ARCH_HAS_MMU_MANDATORY + +config BR2_m68k_cf5208 + bool "5208" + select BR2_m68k_cf + select BR2_SOFT_FLOAT + +endchoice + +config BR2_GCC_TARGET_CPU + default "68040" if BR2_m68k_68040 + default "5208" if BR2_m68k_cf5208 + +config BR2_READELF_ARCH_NAME + default "MC68000" + +# vim: ft=kconfig +# -*- mode:kconfig; -*- diff --git a/arch/Config.in.microblaze b/arch/Config.in.microblaze new file mode 100644 index 00000000..5fe2906d --- /dev/null +++ b/arch/Config.in.microblaze @@ -0,0 +1,17 @@ +config BR2_ARCH + default "microblazeel" if BR2_microblazeel + default "microblaze" if BR2_microblazebe + +config BR2_ENDIAN + default "LITTLE" if BR2_microblazeel + default "BIG" if BR2_microblazebe + +config BR2_READELF_ARCH_NAME + default "Xilinx MicroBlaze" + +config BR2_microblaze + bool + default y if BR2_microblazeel || BR2_microblazebe + +# vim: ft=kconfig +# -*- mode:kconfig; -*- diff --git a/arch/Config.in.mips b/arch/Config.in.mips new file mode 100644 index 00000000..619456c2 --- /dev/null +++ b/arch/Config.in.mips @@ -0,0 +1,276 @@ +# mips default CPU ISAs +config BR2_MIPS_CPU_MIPS32 + bool + select BR2_MIPS_NAN_LEGACY +config BR2_MIPS_CPU_MIPS32R2 + bool + select BR2_MIPS_NAN_LEGACY +config BR2_MIPS_CPU_MIPS32R3 + bool + select BR2_MIPS_NAN_LEGACY +config BR2_MIPS_CPU_MIPS32R5 + bool + select BR2_ARCH_NEEDS_GCC_AT_LEAST_5 +config BR2_MIPS_CPU_MIPS32R6 + bool + select BR2_MIPS_NAN_2008 + select BR2_ARCH_NEEDS_GCC_AT_LEAST_5 +config BR2_MIPS_CPU_MIPS64 + bool + select BR2_MIPS_NAN_LEGACY +config BR2_MIPS_CPU_MIPS64R2 + bool + select BR2_MIPS_NAN_LEGACY +config BR2_MIPS_CPU_MIPS64R3 + bool + select BR2_MIPS_NAN_LEGACY +config BR2_MIPS_CPU_MIPS64R5 + bool + select BR2_ARCH_NEEDS_GCC_AT_LEAST_5 +config BR2_MIPS_CPU_MIPS64R6 + bool + select BR2_MIPS_NAN_2008 + select BR2_ARCH_NEEDS_GCC_AT_LEAST_5 + +choice + prompt "Target Architecture Variant" + default BR2_mips_32 if BR2_mips || BR2_mipsel + default BR2_mips_64 if BR2_mips64 || BR2_mips64el + depends on BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el + help + Specific CPU variant to use + + 64bit capable: 64, 64r2, 64r3, 64r5, 64r6 + non-64bit capable: 32, 32r2, 32r3, 32r5, 32r6 + +config BR2_mips_32 + bool "Generic MIPS32" + depends on !BR2_ARCH_IS_64 + select BR2_MIPS_CPU_MIPS32 +config BR2_mips_32r2 + bool "Generic MIPS32R2" + depends on !BR2_ARCH_IS_64 + select BR2_MIPS_CPU_MIPS32R2 +config BR2_mips_32r3 + bool "Generic MIPS32R3" + depends on !BR2_ARCH_IS_64 + select BR2_MIPS_CPU_MIPS32R3 +config BR2_mips_32r5 + bool "Generic MIPS32R5" + depends on !BR2_ARCH_IS_64 + select BR2_MIPS_CPU_MIPS32R5 +config BR2_mips_32r6 + bool "Generic MIPS32R6" + depends on !BR2_ARCH_IS_64 + select BR2_MIPS_CPU_MIPS32R6 +config BR2_mips_interaptiv + bool "interAptiv" + depends on !BR2_ARCH_IS_64 + select BR2_MIPS_CPU_MIPS32R2 + select BR2_ARCH_NEEDS_GCC_AT_LEAST_6 +config BR2_mips_m5150 + bool "M5150" + depends on !BR2_ARCH_IS_64 + select BR2_MIPS_CPU_MIPS32R5 + select BR2_MIPS_NAN_2008 + select BR2_ARCH_NEEDS_GCC_AT_LEAST_6 +config BR2_mips_m6250 + bool "M6250" + depends on !BR2_ARCH_IS_64 + select BR2_ARCH_HAS_NO_TOOLCHAIN_BUILDROOT + select BR2_MIPS_CPU_MIPS32R6 +config BR2_mips_p5600 + bool "P5600" + depends on !BR2_ARCH_IS_64 + select BR2_MIPS_CPU_MIPS32R5 + select BR2_MIPS_NAN_2008 +config BR2_mips_xburst + bool "XBurst" + depends on !BR2_ARCH_IS_64 + select BR2_MIPS_CPU_MIPS32R2 + help + The Ingenic XBurst is a MIPS32R2 microprocessor. It has a + bug in the FPU that can generate incorrect results in + certain cases. The problem shows up when you have several + fused madd instructions in sequence with dependant + operands. This requires the -mno-fused-madd compiler option + to be used in order to prevent emitting these instructions. + + See http://www.ingenic.com/en/?xburst.html +config BR2_mips_64 + bool "Generic MIPS64" + depends on BR2_ARCH_IS_64 + select BR2_MIPS_CPU_MIPS64 +config BR2_mips_64r2 + bool "Generic MIPS64R2" + depends on BR2_ARCH_IS_64 + select BR2_MIPS_CPU_MIPS64R2 +config BR2_mips_64r3 + bool "Generic MIPS64R3" + depends on BR2_ARCH_IS_64 + select BR2_MIPS_CPU_MIPS64R3 +config BR2_mips_64r5 + bool "Generic MIPS64R5" + depends on BR2_ARCH_IS_64 + select BR2_MIPS_CPU_MIPS64R5 +config BR2_mips_64r6 + bool "Generic MIPS64R6" + depends on BR2_ARCH_IS_64 + select BR2_MIPS_CPU_MIPS64R6 +config BR2_mips_i6400 + bool "I6400" + depends on BR2_ARCH_IS_64 + select BR2_MIPS_CPU_MIPS64R6 + select BR2_ARCH_NEEDS_GCC_AT_LEAST_6 +config BR2_mips_octeon2 + bool "Octeon II" + depends on BR2_ARCH_IS_64 + select BR2_MIPS_CPU_MIPS64R2 + help + Marvell (formerly Cavium Networks) Octeon II CN60XX + processors. +config BR2_mips_octeon3 + bool "Octeon III" + depends on BR2_ARCH_IS_64 + select BR2_MIPS_CPU_MIPS64R3 + help + Marvell (formerly Cavium Networks) Octeon III CN7XXX + processors. +config BR2_mips_p6600 + bool "P6600" + depends on BR2_ARCH_IS_64 + select BR2_ARCH_HAS_NO_TOOLCHAIN_BUILDROOT + select BR2_MIPS_CPU_MIPS64R6 +endchoice + +choice + prompt "Target ABI" + default BR2_MIPS_NABI32 + depends on BR2_mips64 || BR2_mips64el + + help + Application Binary Interface to use + +config BR2_MIPS_NABI32 + bool "n32" + depends on BR2_ARCH_IS_64 + select BR2_KERNEL_64_USERLAND_32 +config BR2_MIPS_NABI64 + bool "n64" + depends on BR2_ARCH_IS_64 +endchoice + +config BR2_MIPS_SOFT_FLOAT + bool "Use soft-float" + default y + depends on !BR2_mips_octeon3 # hard-float only + select BR2_SOFT_FLOAT + help + If your target CPU does not have a Floating Point Unit (FPU) + or a kernel FPU emulator, but you still wish to support + floating point functions, then everything will need to be + compiled with soft floating point support (-msoft-float). + +choice + prompt "FP mode" + default BR2_MIPS_FP32_MODE_XX + depends on !BR2_ARCH_IS_64 && !BR2_MIPS_SOFT_FLOAT + help + MIPS32 supports different FP modes (32,xx,64). Information + about FP modes can be found here: + https://sourceware.org/binutils/docs/as/MIPS-Options.html + https://dmz-portal.imgtec.com/wiki/MIPS_O32_ABI_-_FR0_and_FR1_Interlinking#5._Generating_modeless_code + +config BR2_MIPS_FP32_MODE_32 + bool "32" + depends on !BR2_MIPS_CPU_MIPS32R6 + +config BR2_MIPS_FP32_MODE_XX + bool "xx" + select BR2_ARCH_NEEDS_GCC_AT_LEAST_5 + +config BR2_MIPS_FP32_MODE_64 + bool "64" + depends on !BR2_MIPS_CPU_MIPS32 +endchoice + +config BR2_GCC_TARGET_FP32_MODE + default "32" if BR2_MIPS_FP32_MODE_32 + default "xx" if BR2_MIPS_FP32_MODE_XX + default "64" if BR2_MIPS_FP32_MODE_64 + +config BR2_MIPS_NAN_LEGACY + bool + +config BR2_MIPS_NAN_2008 + bool + select BR2_ARCH_NEEDS_GCC_AT_LEAST_4_9 + +choice + prompt "Target NaN" + default BR2_MIPS_ENABLE_NAN_2008 + depends on BR2_mips_32r5 || BR2_mips_64r5 + help + MIPS supports two different NaN encodings, legacy and 2008. + Information about MIPS NaN encodings can be found here: + https://sourceware.org/binutils/docs/as/MIPS-NaN-Encodings.html + +config BR2_MIPS_ENABLE_NAN_LEGACY + bool "legacy" + select BR2_MIPS_NAN_LEGACY + +config BR2_MIPS_ENABLE_NAN_2008 + bool "2008" + depends on !BR2_MIPS_SOFT_FLOAT + select BR2_MIPS_NAN_2008 +endchoice + +config BR2_GCC_TARGET_NAN + default "legacy" if BR2_MIPS_NAN_LEGACY + default "2008" if BR2_MIPS_NAN_2008 + +config BR2_ARCH + default "mips" if BR2_mips + default "mipsel" if BR2_mipsel + default "mips64" if BR2_mips64 + default "mips64el" if BR2_mips64el + +config BR2_ENDIAN + default "LITTLE" if BR2_mipsel || BR2_mips64el + default "BIG" if BR2_mips || BR2_mips64 + +config BR2_GCC_TARGET_ARCH + default "mips32" if BR2_mips_32 + default "mips32r2" if BR2_mips_32r2 + default "mips32r3" if BR2_mips_32r3 + default "mips32r5" if BR2_mips_32r5 + default "mips32r6" if BR2_mips_32r6 + default "interaptiv" if BR2_mips_interaptiv + default "m5101" if BR2_mips_m5150 + default "m6201" if BR2_mips_m6250 + default "p5600" if BR2_mips_p5600 + default "mips32r2" if BR2_mips_xburst + default "mips64" if BR2_mips_64 + default "mips64r2" if BR2_mips_64r2 + default "mips64r3" if BR2_mips_64r3 + default "mips64r5" if BR2_mips_64r5 + default "mips64r6" if BR2_mips_64r6 + default "i6400" if BR2_mips_i6400 + default "octeon2" if BR2_mips_octeon2 + default "octeon3" if BR2_mips_octeon3 + default "p6600" if BR2_mips_p6600 + +config BR2_MIPS_OABI32 + bool + default y if BR2_mips || BR2_mipsel + +config BR2_GCC_TARGET_ABI + default "32" if BR2_MIPS_OABI32 + default "n32" if BR2_MIPS_NABI32 + default "64" if BR2_MIPS_NABI64 + +config BR2_READELF_ARCH_NAME + default "MIPS R3000" + +# vim: ft=kconfig +# -*- mode:kconfig; -*- diff --git a/arch/Config.in.nds32 b/arch/Config.in.nds32 new file mode 100644 index 00000000..322ff49f --- /dev/null +++ b/arch/Config.in.nds32 @@ -0,0 +1,14 @@ +config BR2_ARCH + default "nds32le" + +config BR2_GCC_TARGET_ARCH + default "v3" + +config BR2_ENDIAN + default "LITTLE" + +config BR2_READELF_ARCH_NAME + default "Andes Technology compact code size embedded RISC processor family" + +# vim: ft=kconfig +# -*- mode:kconfig; -*- diff --git a/arch/Config.in.nios2 b/arch/Config.in.nios2 new file mode 100644 index 00000000..aae435fa --- /dev/null +++ b/arch/Config.in.nios2 @@ -0,0 +1,11 @@ +config BR2_ARCH + default "nios2" + +config BR2_ENDIAN + default "LITTLE" + +config BR2_READELF_ARCH_NAME + default "Altera Nios II" + +# vim: ft=kconfig +# -*- mode:kconfig; -*- diff --git a/arch/Config.in.or1k b/arch/Config.in.or1k new file mode 100644 index 00000000..abdf498f --- /dev/null +++ b/arch/Config.in.or1k @@ -0,0 +1,11 @@ +config BR2_ARCH + default "or1k" + +config BR2_ENDIAN + default "BIG" + +config BR2_READELF_ARCH_NAME + default "OpenRISC 1000" + +# vim: ft=kconfig +# -*- mode:kconfig; -*- diff --git a/arch/Config.in.powerpc b/arch/Config.in.powerpc new file mode 100644 index 00000000..ba56c9c7 --- /dev/null +++ b/arch/Config.in.powerpc @@ -0,0 +1,209 @@ +config BR2_POWERPC_CPU_HAS_ALTIVEC + bool + +config BR2_POWERPC_CPU_HAS_SPE + bool + +choice + prompt "Target Architecture Variant" + default BR2_generic_powerpc + help + Specific CPU variant to use +config BR2_generic_powerpc + bool "generic" +config BR2_powerpc_401 + bool "401" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_403 + bool "403" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_405 + bool "405" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_405fp + bool "405 with FPU" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_440 + bool "440" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_440fp + bool "440 with FPU" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_464 + bool "464" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_464fp + bool "464 with FPU" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_476 + bool "476" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_476fp + bool "476 with FPU" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_505 + bool "505" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_602 + bool "602" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_603 + bool "603" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_603e + bool "603e" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_604 + bool "604" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_604e + bool "604e" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_620 + bool "620" +config BR2_powerpc_630 + bool "630" +config BR2_powerpc_740 + bool "740" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_7400 + bool "7400" + depends on !BR2_ARCH_IS_64 + select BR2_POWERPC_CPU_HAS_ALTIVEC +config BR2_powerpc_7450 + bool "7450" + depends on !BR2_ARCH_IS_64 + select BR2_POWERPC_CPU_HAS_ALTIVEC +config BR2_powerpc_750 + bool "750" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_821 + bool "821" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_823 + bool "823" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_860 + bool "860" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_970 + bool "970" + select BR2_POWERPC_CPU_HAS_ALTIVEC +config BR2_powerpc_8540 + bool "8540 / e500v1" + depends on !BR2_ARCH_IS_64 + select BR2_POWERPC_CPU_HAS_SPE +config BR2_powerpc_8548 + bool "8548 / e500v2" + depends on !BR2_ARCH_IS_64 + select BR2_POWERPC_CPU_HAS_SPE +config BR2_powerpc_e300c2 + bool "e300c2" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_e300c3 + bool "e300c3" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_e500mc + bool "e500mc" + depends on !BR2_ARCH_IS_64 +config BR2_powerpc_e5500 + bool "e5500" + depends on !BR2_powerpc64le +config BR2_powerpc_e6500 + bool "e6500" + depends on !BR2_powerpc64le + select BR2_POWERPC_CPU_HAS_ALTIVEC +config BR2_powerpc_power4 + bool "power4" +config BR2_powerpc_power5 + bool "power5" +config BR2_powerpc_power6 + bool "power6" + select BR2_POWERPC_CPU_HAS_ALTIVEC +config BR2_powerpc_power7 + bool "power7" + select BR2_POWERPC_CPU_HAS_ALTIVEC +config BR2_powerpc_power8 + bool "power8" + select BR2_POWERPC_CPU_HAS_ALTIVEC +endchoice + +choice + prompt "Target ABI" + default BR2_powerpc_SPE if BR2_POWERPC_CPU_HAS_SPE + default BR2_powerpc_CLASSIC + help + Application Binary Interface to use + +config BR2_powerpc_CLASSIC + bool "Classic" + depends on !BR2_POWERPC_CPU_HAS_SPE +config BR2_powerpc_SPE + bool "SPE" + depends on BR2_POWERPC_CPU_HAS_SPE +endchoice + +config BR2_POWERPC_SOFT_FLOAT + bool "Use soft-float" + select BR2_SOFT_FLOAT + help + If your target CPU does not have a Floating Point Unit (FPU) + or a kernel FPU emulator, but you still wish to support + floating point functions, then everything will need to be + compiled with soft floating point support (-msoft-float). + +config BR2_ARCH + default "powerpc" if BR2_powerpc + default "powerpc64" if BR2_powerpc64 + default "powerpc64le" if BR2_powerpc64le + +config BR2_ENDIAN + default "BIG" if BR2_powerpc || BR2_powerpc64 + default "LITTLE" if BR2_powerpc64le + +config BR2_GCC_TARGET_CPU + default "401" if BR2_powerpc_401 + default "403" if BR2_powerpc_403 + default "405" if BR2_powerpc_405 + default "405fp" if BR2_powerpc_405fp + default "440" if BR2_powerpc_440 + default "440fp" if BR2_powerpc_440fp + default "464" if BR2_powerpc_464 + default "464fp" if BR2_powerpc_464fp + default "476" if BR2_powerpc_476 + default "476fp" if BR2_powerpc_476fp + default "505" if BR2_powerpc_505 + default "602" if BR2_powerpc_602 + default "603" if BR2_powerpc_603 + default "603e" if BR2_powerpc_603e + default "604" if BR2_powerpc_604 + default "604e" if BR2_powerpc_604e + default "620" if BR2_powerpc_620 + default "630" if BR2_powerpc_630 + default "740" if BR2_powerpc_740 + default "7400" if BR2_powerpc_7400 + default "7450" if BR2_powerpc_7450 + default "750" if BR2_powerpc_750 + default "821" if BR2_powerpc_821 + default "823" if BR2_powerpc_823 + default "860" if BR2_powerpc_860 + default "970" if BR2_powerpc_970 + default "8540" if BR2_powerpc_8540 + default "8548" if BR2_powerpc_8548 + default "e300c2" if BR2_powerpc_e300c2 + default "e300c3" if BR2_powerpc_e300c3 + default "e500mc" if BR2_powerpc_e500mc + default "e5500" if BR2_powerpc_e5500 + default "e6500" if BR2_powerpc_e6500 + default "power4" if BR2_powerpc_power4 + default "power5" if BR2_powerpc_power5 + default "power6" if BR2_powerpc_power6 + default "power7" if BR2_powerpc_power7 + default "power8" if BR2_powerpc_power8 + +config BR2_READELF_ARCH_NAME + default "PowerPC" if BR2_powerpc + default "PowerPC64" if BR2_powerpc64 || BR2_powerpc64le + +# vim: ft=kconfig +# -*- mode:kconfig; -*- diff --git a/arch/Config.in.riscv b/arch/Config.in.riscv new file mode 100644 index 00000000..1fc20e5d --- /dev/null +++ b/arch/Config.in.riscv @@ -0,0 +1,134 @@ +# RISC-V CPU ISA extensions. + +config BR2_RISCV_ISA_RVI + bool + +config BR2_RISCV_ISA_RVM + bool + +config BR2_RISCV_ISA_RVA + bool + +config BR2_RISCV_ISA_RVF + bool + +config BR2_RISCV_ISA_RVD + bool + +config BR2_RISCV_ISA_RVC + bool + +choice + prompt "Target Architecture Variant" + default BR2_riscv_g + +config BR2_riscv_g + bool "General purpose (G)" + select BR2_RISCV_ISA_RVI + select BR2_RISCV_ISA_RVM + select BR2_RISCV_ISA_RVA + select BR2_RISCV_ISA_RVF + select BR2_RISCV_ISA_RVD + help + General purpose (G) is equivalent to IMAFD. + +config BR2_riscv_custom + bool "Custom architecture" + select BR2_RISCV_ISA_RVI + select BR2_RISCV_ISA_CUSTOM_RVA + +endchoice + +if BR2_riscv_custom + +comment "Instruction Set Extensions" + +config BR2_RISCV_ISA_CUSTOM_RVM + bool "Integer Multiplication and Division (M)" + select BR2_RISCV_ISA_RVM + +config BR2_RISCV_ISA_CUSTOM_RVA + bool "Atomic Instructions (A)" + select BR2_RISCV_ISA_RVA + +config BR2_RISCV_ISA_CUSTOM_RVF + bool "Single-precision Floating-point (F)" + select BR2_RISCV_ISA_RVF + +config BR2_RISCV_ISA_CUSTOM_RVD + bool "Double-precision Floating-point (D)" + depends on BR2_RISCV_ISA_RVF + select BR2_RISCV_ISA_RVD + +config BR2_RISCV_ISA_CUSTOM_RVC + bool "Compressed Instructions (C)" + select BR2_RISCV_ISA_RVC +endif + +choice + prompt "Target Architecture Size" + default BR2_RISCV_64 + +config BR2_RISCV_32 + bool "32-bit" + +config BR2_RISCV_64 + bool "64-bit" + select BR2_ARCH_IS_64 + +endchoice + +choice + prompt "Target ABI" + default BR2_RISCV_ABI_ILP32D if !BR2_ARCH_IS_64 && BR2_RISCV_ISA_RVD + default BR2_RISCV_ABI_ILP32F if !BR2_ARCH_IS_64 && BR2_RISCV_ISA_RVF + default BR2_RISCV_ABI_ILP32 if !BR2_ARCH_IS_64 + default BR2_RISCV_ABI_LP64D if BR2_ARCH_IS_64 && BR2_RISCV_ISA_RVD + default BR2_RISCV_ABI_LP64F if BR2_ARCH_IS_64 && BR2_RISCV_ISA_RVF + default BR2_RISCV_ABI_LP64 if BR2_ARCH_IS_64 + +config BR2_RISCV_ABI_ILP32 + bool "ilp32" + depends on !BR2_ARCH_IS_64 + +config BR2_RISCV_ABI_ILP32F + bool "ilp32f" + depends on !BR2_ARCH_IS_64 && BR2_RISCV_ISA_RVF + +config BR2_RISCV_ABI_ILP32D + bool "ilp32d" + depends on !BR2_ARCH_IS_64 && BR2_RISCV_ISA_RVD + +config BR2_RISCV_ABI_LP64 + bool "lp64" + depends on BR2_ARCH_IS_64 + +config BR2_RISCV_ABI_LP64F + bool "lp64f" + depends on BR2_ARCH_IS_64 && BR2_RISCV_ISA_RVF + +config BR2_RISCV_ABI_LP64D + bool "lp64d" + depends on BR2_ARCH_IS_64 && BR2_RISCV_ISA_RVD +endchoice + +config BR2_ARCH + default "riscv32" if !BR2_ARCH_IS_64 + default "riscv64" if BR2_ARCH_IS_64 + +config BR2_ENDIAN + default "LITTLE" + +config BR2_GCC_TARGET_ABI + default "ilp32" if BR2_RISCV_ABI_ILP32 + default "ilp32f" if BR2_RISCV_ABI_ILP32F + default "ilp32d" if BR2_RISCV_ABI_ILP32D + default "lp64" if BR2_RISCV_ABI_LP64 + default "lp64f" if BR2_RISCV_ABI_LP64F + default "lp64d" if BR2_RISCV_ABI_LP64D + +config BR2_READELF_ARCH_NAME + default "RISC-V" + +# vim: ft=kconfig +# -*- mode:kconfig; -*- diff --git a/arch/Config.in.s390x b/arch/Config.in.s390x new file mode 100644 index 00000000..ad866b42 --- /dev/null +++ b/arch/Config.in.s390x @@ -0,0 +1,29 @@ +choice + prompt "Target Architecture Variant" + help + Specific CPU variant to use + +config BR2_s390x_z13 + bool "z13" + +config BR2_s390x_z14 + bool "z14" + +config BR2_s390x_z15 + bool "z15" + +endchoice + +config BR2_ARCH + default "s390x" if BR2_s390x + +config BR2_ENDIAN + default "BIG" + +config BR2_GCC_TARGET_ARCH + default "arch11" if BR2_s390x_z13 + default "arch12" if BR2_s390x_z14 + default "arch13" if BR2_s390x_z15 + +config BR2_READELF_ARCH_NAME + default "IBM S/390" if BR2_s390x diff --git a/arch/Config.in.sh b/arch/Config.in.sh new file mode 100644 index 00000000..b5cce18e --- /dev/null +++ b/arch/Config.in.sh @@ -0,0 +1,35 @@ +choice + prompt "Target Architecture Variant" + default BR2_sh4 + depends on BR2_sh + help + Specific CPU variant to use + +config BR2_sh2a + bool "sh2a (SH2A big endian)" +config BR2_sh4 + bool "sh4 (SH4 little endian)" +config BR2_sh4eb + bool "sh4eb (SH4 big endian)" +config BR2_sh4a + bool "sh4a (SH4A little endian)" +config BR2_sh4aeb + bool "sh4aeb (SH4A big endian)" +endchoice + +config BR2_ARCH + default "sh2a" if BR2_sh2a + default "sh4" if BR2_sh4 + default "sh4eb" if BR2_sh4eb + default "sh4a" if BR2_sh4a + default "sh4aeb" if BR2_sh4aeb + +config BR2_ENDIAN + default "LITTLE" if BR2_sh4 || BR2_sh4a + default "BIG" if BR2_sh2a || BR2_sh4eb || BR2_sh4aeb + +config BR2_READELF_ARCH_NAME + default "Renesas / SuperH SH" + +# vim: ft=kconfig +# -*- mode:kconfig; -*- diff --git a/arch/Config.in.sparc b/arch/Config.in.sparc new file mode 100644 index 00000000..4c4dc617 --- /dev/null +++ b/arch/Config.in.sparc @@ -0,0 +1,37 @@ +choice + prompt "Target Architecture Variant" + default BR2_sparc_v8 if BR2_sparc + default BR2_sparc_v9 if BR2_sparc64 + depends on BR2_sparc || BR2_sparc64 + help + Specific CPU variant to use + +config BR2_sparc_v8 + bool "v8" + depends on BR2_sparc +config BR2_sparc_leon3 + bool "leon3" + depends on BR2_sparc +config BR2_sparc_v9 + bool "v9" + depends on BR2_sparc64 +endchoice + +config BR2_ARCH + default "sparc" if BR2_sparc + default "sparc64" if BR2_sparc64 + +config BR2_ENDIAN + default "BIG" + +config BR2_GCC_TARGET_CPU + default "leon3" if BR2_sparc_leon3 + default "v8" if BR2_sparc_v8 + default "ultrasparc" if BR2_sparc_v9 + +config BR2_READELF_ARCH_NAME + default "Sparc" if BR2_sparc + default "Sparc v9" if BR2_sparc64 + +# vim: ft=kconfig +# -*- mode:kconfig; -*- diff --git a/arch/Config.in.x86 b/arch/Config.in.x86 new file mode 100644 index 00000000..7aae3caf --- /dev/null +++ b/arch/Config.in.x86 @@ -0,0 +1,312 @@ +# i386/x86_64 cpu features +config BR2_X86_CPU_HAS_MMX + bool +config BR2_X86_CPU_HAS_3DNOW + bool +config BR2_X86_CPU_HAS_SSE + bool +config BR2_X86_CPU_HAS_SSE2 + bool +config BR2_X86_CPU_HAS_SSE3 + bool +config BR2_X86_CPU_HAS_SSSE3 + bool +config BR2_X86_CPU_HAS_SSE4 + bool +config BR2_X86_CPU_HAS_SSE42 + bool +config BR2_X86_CPU_HAS_AVX + bool +config BR2_X86_CPU_HAS_AVX2 + bool + +choice + prompt "Target Architecture Variant" + default BR2_x86_i586 if BR2_i386 + depends on BR2_i386 || BR2_x86_64 + help + Specific CPU variant to use + +config BR2_x86_i486 + bool "i486" + depends on !BR2_x86_64 +config BR2_x86_i586 + bool "i586" + depends on !BR2_x86_64 +config BR2_x86_x1000 + bool "x1000" + depends on !BR2_x86_64 + help + The Intel X1000 is a Pentium class microprocessor in the + Quark (sub-Atom) Product Line. The X1000 has a bug on the + lock prefix requiring that prefix must be stripped at build + time. + + See https://en.wikipedia.org/wiki/Intel_Quark + +config BR2_x86_i686 + bool "i686" + depends on !BR2_x86_64 +config BR2_x86_pentiumpro + bool "pentium pro" + depends on !BR2_x86_64 +config BR2_x86_pentium_mmx + bool "pentium MMX" + depends on !BR2_x86_64 + select BR2_X86_CPU_HAS_MMX +config BR2_x86_pentium_m + bool "pentium mobile" + depends on !BR2_x86_64 + select BR2_X86_CPU_HAS_MMX + select BR2_X86_CPU_HAS_SSE +config BR2_x86_pentium2 + bool "pentium2" + depends on !BR2_x86_64 + select BR2_X86_CPU_HAS_MMX +config BR2_x86_pentium3 + bool "pentium3" + depends on !BR2_x86_64 + select BR2_X86_CPU_HAS_MMX + select BR2_X86_CPU_HAS_SSE +config BR2_x86_pentium4 + bool "pentium4" + depends on !BR2_x86_64 + select BR2_X86_CPU_HAS_MMX + select BR2_X86_CPU_HAS_SSE + select BR2_X86_CPU_HAS_SSE2 +config BR2_x86_prescott + bool "prescott" + depends on !BR2_x86_64 + select BR2_X86_CPU_HAS_MMX + select BR2_X86_CPU_HAS_SSE + select BR2_X86_CPU_HAS_SSE2 + select BR2_X86_CPU_HAS_SSE3 +config BR2_x86_nocona + bool "nocona" + select BR2_X86_CPU_HAS_MMX + select BR2_X86_CPU_HAS_SSE + select BR2_X86_CPU_HAS_SSE2 + select BR2_X86_CPU_HAS_SSE3 +config BR2_x86_core2 + bool "core2" + select BR2_X86_CPU_HAS_MMX + select BR2_X86_CPU_HAS_SSE + select BR2_X86_CPU_HAS_SSE2 + select BR2_X86_CPU_HAS_SSE3 + select BR2_X86_CPU_HAS_SSSE3 +config BR2_x86_corei7 + bool "corei7" + select BR2_X86_CPU_HAS_MMX + select BR2_X86_CPU_HAS_SSE + select BR2_X86_CPU_HAS_SSE2 + select BR2_X86_CPU_HAS_SSE3 + select BR2_X86_CPU_HAS_SSSE3 + select BR2_X86_CPU_HAS_SSE4 + select BR2_X86_CPU_HAS_SSE42 +config BR2_x86_westmere + bool "westmere" + select BR2_X86_CPU_HAS_MMX + select BR2_X86_CPU_HAS_SSE + select BR2_X86_CPU_HAS_SSE2 + select BR2_X86_CPU_HAS_SSE3 + select BR2_X86_CPU_HAS_SSSE3 + select BR2_X86_CPU_HAS_SSE4 + select BR2_X86_CPU_HAS_SSE42 +config BR2_x86_corei7_avx + bool "corei7-avx" + select BR2_X86_CPU_HAS_MMX + select BR2_X86_CPU_HAS_SSE + select BR2_X86_CPU_HAS_SSE2 + select BR2_X86_CPU_HAS_SSE3 + select BR2_X86_CPU_HAS_SSSE3 + select BR2_X86_CPU_HAS_SSE4 + select BR2_X86_CPU_HAS_SSE42 + select BR2_X86_CPU_HAS_AVX +config BR2_x86_core_avx2 + bool "core-avx2" + select BR2_X86_CPU_HAS_MMX + select BR2_X86_CPU_HAS_SSE + select BR2_X86_CPU_HAS_SSE2 + select BR2_X86_CPU_HAS_SSE3 + select BR2_X86_CPU_HAS_SSSE3 + select BR2_X86_CPU_HAS_SSE4 + select BR2_X86_CPU_HAS_SSE42 + select BR2_X86_CPU_HAS_AVX + select BR2_X86_CPU_HAS_AVX2 +config BR2_x86_atom + bool "atom" + select BR2_X86_CPU_HAS_MMX + select BR2_X86_CPU_HAS_SSE + select BR2_X86_CPU_HAS_SSE2 + select BR2_X86_CPU_HAS_SSE3 + select BR2_X86_CPU_HAS_SSSE3 +config BR2_x86_silvermont + bool "silvermont" + select BR2_X86_CPU_HAS_MMX + select BR2_X86_CPU_HAS_SSE + select BR2_X86_CPU_HAS_SSE2 + select BR2_X86_CPU_HAS_SSE3 + select BR2_X86_CPU_HAS_SSSE3 + select BR2_X86_CPU_HAS_SSE4 + select BR2_X86_CPU_HAS_SSE42 +config BR2_x86_k6 + bool "k6" + depends on !BR2_x86_64 + select BR2_X86_CPU_HAS_MMX +config BR2_x86_k6_2 + bool "k6-2" + depends on !BR2_x86_64 + select BR2_X86_CPU_HAS_MMX + select BR2_X86_CPU_HAS_3DNOW +config BR2_x86_athlon + bool "athlon" + depends on !BR2_x86_64 + select BR2_X86_CPU_HAS_MMX + select BR2_X86_CPU_HAS_3DNOW +config BR2_x86_athlon_4 + bool "athlon-4" + depends on !BR2_x86_64 + select BR2_X86_CPU_HAS_MMX + select BR2_X86_CPU_HAS_SSE + select BR2_X86_CPU_HAS_3DNOW +config BR2_x86_opteron + bool "opteron" + select BR2_X86_CPU_HAS_MMX + select BR2_X86_CPU_HAS_SSE + select BR2_X86_CPU_HAS_SSE2 +config BR2_x86_opteron_sse3 + bool "opteron w/ SSE3" + select BR2_X86_CPU_HAS_MMX + select BR2_X86_CPU_HAS_SSE + select BR2_X86_CPU_HAS_SSE2 + select BR2_X86_CPU_HAS_SSE3 +config BR2_x86_barcelona + bool "barcelona" + select BR2_X86_CPU_HAS_MMX + select BR2_X86_CPU_HAS_SSE + select BR2_X86_CPU_HAS_SSE2 + select BR2_X86_CPU_HAS_SSE3 +config BR2_x86_jaguar + bool "jaguar" + select BR2_X86_CPU_HAS_MMX + select BR2_X86_CPU_HAS_SSE + select BR2_X86_CPU_HAS_SSE2 + select BR2_X86_CPU_HAS_SSE3 + select BR2_X86_CPU_HAS_SSSE3 + select BR2_X86_CPU_HAS_SSE4 + select BR2_X86_CPU_HAS_SSE42 +config BR2_x86_steamroller + bool "steamroller" + select BR2_X86_CPU_HAS_MMX + select BR2_X86_CPU_HAS_SSE + select BR2_X86_CPU_HAS_SSE2 + select BR2_X86_CPU_HAS_SSE3 + select BR2_X86_CPU_HAS_SSSE3 + select BR2_X86_CPU_HAS_SSE4 + select BR2_X86_CPU_HAS_SSE42 +config BR2_x86_geode + bool "geode" + # Don't include MMX support because there several variant of geode + # processor, some with MMX support, some without. + # See: http://en.wikipedia.org/wiki/Geode_%28processor%29 + depends on !BR2_x86_64 +config BR2_x86_c3 + bool "Via/Cyrix C3 (Samuel/Ezra cores)" + depends on !BR2_x86_64 + select BR2_X86_CPU_HAS_MMX + select BR2_X86_CPU_HAS_3DNOW +config BR2_x86_c32 + bool "Via C3-2 (Nehemiah cores)" + depends on !BR2_x86_64 + select BR2_X86_CPU_HAS_MMX + select BR2_X86_CPU_HAS_SSE +config BR2_x86_winchip_c6 + bool "IDT Winchip C6" + depends on !BR2_x86_64 + select BR2_X86_CPU_HAS_MMX +config BR2_x86_winchip2 + bool "IDT Winchip 2" + depends on !BR2_x86_64 + select BR2_X86_CPU_HAS_MMX +endchoice + +config BR2_ARCH + default "i486" if BR2_x86_i486 + default "i586" if BR2_x86_i586 + default "i586" if BR2_x86_x1000 + default "i586" if BR2_x86_pentium_mmx + default "i586" if BR2_x86_geode + default "i586" if BR2_x86_c3 + default "i686" if BR2_x86_c32 + default "i586" if BR2_x86_winchip_c6 + default "i586" if BR2_x86_winchip2 + default "i686" if BR2_x86_i686 + default "i686" if BR2_x86_pentium2 + default "i686" if BR2_x86_pentium3 + default "i686" if BR2_x86_pentium4 + default "i686" if BR2_x86_pentium_m + default "i686" if BR2_x86_pentiumpro + default "i686" if BR2_x86_prescott + default "i686" if BR2_x86_nocona && BR2_i386 + default "i686" if BR2_x86_core2 && BR2_i386 + default "i686" if BR2_x86_corei7 && BR2_i386 + default "i686" if BR2_x86_westmere && BR2_i386 + default "i686" if BR2_x86_corei7_avx && BR2_i386 + default "i686" if BR2_x86_core_avx2 && BR2_i386 + default "i686" if BR2_x86_atom && BR2_i386 + default "i686" if BR2_x86_silvermont && BR2_i386 + default "i686" if BR2_x86_opteron && BR2_i386 + default "i686" if BR2_x86_opteron_sse3 && BR2_i386 + default "i686" if BR2_x86_barcelona && BR2_i386 + default "i686" if BR2_x86_jaguar && BR2_i386 + default "i686" if BR2_x86_steamroller && BR2_i386 + default "i686" if BR2_x86_k6 + default "i686" if BR2_x86_k6_2 + default "i686" if BR2_x86_athlon + default "i686" if BR2_x86_athlon_4 + default "x86_64" if BR2_x86_64 + +config BR2_ENDIAN + default "LITTLE" + +config BR2_GCC_TARGET_ARCH + default "i486" if BR2_x86_i486 + default "i586" if BR2_x86_i586 + default "i586" if BR2_x86_x1000 + default "pentium-mmx" if BR2_x86_pentium_mmx + default "i686" if BR2_x86_i686 + default "pentiumpro" if BR2_x86_pentiumpro + default "pentium-m" if BR2_x86_pentium_m + default "pentium2" if BR2_x86_pentium2 + default "pentium3" if BR2_x86_pentium3 + default "pentium4" if BR2_x86_pentium4 + default "prescott" if BR2_x86_prescott + default "nocona" if BR2_x86_nocona + default "core2" if BR2_x86_core2 + default "corei7" if BR2_x86_corei7 + default "corei7-avx" if BR2_x86_corei7_avx + default "core-avx2" if BR2_x86_core_avx2 + default "atom" if BR2_x86_atom + default "westmere" if BR2_x86_westmere + default "silvermont" if BR2_x86_silvermont + default "k8" if BR2_x86_opteron + default "k8-sse3" if BR2_x86_opteron_sse3 + default "barcelona" if BR2_x86_barcelona + default "btver2" if BR2_x86_jaguar + default "bdver3" if BR2_x86_steamroller + default "k6" if BR2_x86_k6 + default "k6-2" if BR2_x86_k6_2 + default "athlon" if BR2_x86_athlon + default "athlon-4" if BR2_x86_athlon_4 + default "winchip-c6" if BR2_x86_winchip_c6 + default "winchip2" if BR2_x86_winchip2 + default "c3" if BR2_x86_c3 + default "c3-2" if BR2_x86_c32 + default "geode" if BR2_x86_geode + +config BR2_READELF_ARCH_NAME + default "Intel 80386" if BR2_i386 + default "Advanced Micro Devices X86-64" if BR2_x86_64 + +# vim: ft=kconfig +# -*- mode:kconfig; -*- diff --git a/arch/Config.in.xtensa b/arch/Config.in.xtensa new file mode 100644 index 00000000..a79d9069 --- /dev/null +++ b/arch/Config.in.xtensa @@ -0,0 +1,55 @@ +choice + prompt "Target Architecture Variant" + default BR2_xtensa_fsf + depends on BR2_xtensa + +config BR2_XTENSA_CUSTOM + bool "Custom Xtensa processor configuration" + select BR2_ARCH_HAS_MMU_OPTIONAL + +config BR2_xtensa_fsf + bool "fsf - Default configuration" + select BR2_ARCH_HAS_MMU_MANDATORY + +endchoice + +config BR2_XTENSA_OVERLAY_FILE + string "Overlay file for custom configuration" + depends on BR2_XTENSA_CUSTOM + help + Enter the path to the overlay tarball for a custom processor + configuration. + + These overlay files are tar packages with updated + configuration files for various toolchain packages and Xtensa + processor configurations. They are provided by the processor + vendor or directly from Tensilica. + + The path can be either absolute, or relative to the top + directory of buildroot. + +choice + prompt "Target Architecture Endianness" + default BR2_XTENSA_LITTLE_ENDIAN + depends on BR2_XTENSA_CUSTOM + +config BR2_XTENSA_LITTLE_ENDIAN + bool "Little endian" + +config BR2_XTENSA_BIG_ENDIAN + bool "Big endian" + +endchoice + +config BR2_ENDIAN + default "LITTLE" if BR2_XTENSA_LITTLE_ENDIAN + default "BIG" if BR2_xtensa_fsf || BR2_XTENSA_BIG_ENDIAN + +config BR2_ARCH + default "xtensa" if BR2_xtensa + +config BR2_READELF_ARCH_NAME + default "Tensilica Xtensa Processor" + +# vim: ft=kconfig +# -*- mode:kconfig; -*- diff --git a/arch/arch.mk b/arch/arch.mk new file mode 100644 index 00000000..289c5a11 --- /dev/null +++ b/arch/arch.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# Architecture-specific definitions +# +################################################################################ + +# Allow GCC target configuration settings to be optionally +# overwritten by architecture specific makefiles. + +# Makefiles must use the GCC_TARGET_* variables below instead +# of the BR2_GCC_TARGET_* versions. +GCC_TARGET_ARCH := $(call qstrip,$(BR2_GCC_TARGET_ARCH)) +GCC_TARGET_ABI := $(call qstrip,$(BR2_GCC_TARGET_ABI)) +GCC_TARGET_NAN := $(call qstrip,$(BR2_GCC_TARGET_NAN)) +GCC_TARGET_FP32_MODE := $(call qstrip,$(BR2_GCC_TARGET_FP32_MODE)) +GCC_TARGET_CPU := $(call qstrip,$(BR2_GCC_TARGET_CPU)) +GCC_TARGET_FPU := $(call qstrip,$(BR2_GCC_TARGET_FPU)) +GCC_TARGET_FLOAT_ABI := $(call qstrip,$(BR2_GCC_TARGET_FLOAT_ABI)) +GCC_TARGET_MODE := $(call qstrip,$(BR2_GCC_TARGET_MODE)) + +# Include any architecture specific makefiles. +-include $(sort $(wildcard arch/arch.mk.*)) diff --git a/arch/arch.mk.arc b/arch/arch.mk.arc new file mode 100644 index 00000000..32b818b0 --- /dev/null +++ b/arch/arch.mk.arc @@ -0,0 +1,17 @@ +ifeq ($(BR2_arc),y) + +# -matomic is always required when the ARC core has the atomic extensions +ifeq ($(BR2_ARC_ATOMIC_EXT),y) +ARCH_TOOLCHAIN_WRAPPER_OPTS = -matomic +endif + +# Explicitly set LD's "max-page-size" instead of relying on some defaults +ifeq ($(BR2_ARC_PAGE_SIZE_4K),y) +ARCH_TOOLCHAIN_WRAPPER_OPTS += -Wl,-z,max-page-size=4096 +else ifeq ($(BR2_ARC_PAGE_SIZE_8K),y) +ARCH_TOOLCHAIN_WRAPPER_OPTS += -Wl,-z,max-page-size=8192 +else ifeq ($(BR2_ARC_PAGE_SIZE_16K),y) +ARCH_TOOLCHAIN_WRAPPER_OPTS += -Wl,-z,max-page-size=16384 +endif + +endif diff --git a/arch/arch.mk.csky b/arch/arch.mk.csky new file mode 100644 index 00000000..fb59ae22 --- /dev/null +++ b/arch/arch.mk.csky @@ -0,0 +1,26 @@ +# +# Configure the GCC_TARGET_ARCH variable and append the +# appropriate C-SKY ISA extensions. +# + +ifeq ($(BR2_csky),y) + +ifeq ($(BR2_ck610),y) +GCC_TARGET_CPU := ck610 +else ifeq ($(BR2_ck807),y) +GCC_TARGET_CPU := ck807 +else ifeq ($(BR2_ck810),y) +GCC_TARGET_CPU := ck810 +else ifeq ($(BR2_ck860),y) +GCC_TARGET_CPU := ck860 +endif + +ifeq ($(BR2_CSKY_FPU),y) +GCC_TARGET_CPU := $(GCC_TARGET_CPU)f +endif + +ifeq ($(BR2_CSKY_VDSP),y) +GCC_TARGET_CPU := $(GCC_TARGET_CPU)v +endif + +endif diff --git a/arch/arch.mk.riscv b/arch/arch.mk.riscv new file mode 100644 index 00000000..f3bf2b34 --- /dev/null +++ b/arch/arch.mk.riscv @@ -0,0 +1,30 @@ +# +# Configure the GCC_TARGET_ARCH variable and append the +# appropriate RISC-V ISA extensions. +# + +ifeq ($(BR2_riscv),y) + +ifeq ($(BR2_RISCV_64),y) +GCC_TARGET_ARCH := rv64i +else +GCC_TARGET_ARCH := rv32i +endif + +ifeq ($(BR2_RISCV_ISA_RVM),y) +GCC_TARGET_ARCH := $(GCC_TARGET_ARCH)m +endif +ifeq ($(BR2_RISCV_ISA_RVA),y) +GCC_TARGET_ARCH := $(GCC_TARGET_ARCH)a +endif +ifeq ($(BR2_RISCV_ISA_RVF),y) +GCC_TARGET_ARCH := $(GCC_TARGET_ARCH)f +endif +ifeq ($(BR2_RISCV_ISA_RVD),y) +GCC_TARGET_ARCH := $(GCC_TARGET_ARCH)d +endif +ifeq ($(BR2_RISCV_ISA_RVC),y) +GCC_TARGET_ARCH := $(GCC_TARGET_ARCH)c +endif + +endif diff --git a/arch/arch.mk.xtensa b/arch/arch.mk.xtensa new file mode 100644 index 00000000..fd410f6b --- /dev/null +++ b/arch/arch.mk.xtensa @@ -0,0 +1,36 @@ +################################################################################ +# This variable can be used by packages that need to extract the overlay. +# +# ARCH_XTENSA_OVERLAY_FILE is the path to the overlay tarball; empty if not +# using any overlay +# +# Example: +# ifneq ($(ARCH_XTENSA_OVERLAY_FILE),) +# tar xf $(ARCH_XTENSA_OVERLAY_FILE) -C $(@D) --strip-components=1 gcc +# endif +################################################################################ +BR_ARCH_XTENSA_OVERLAY_FILE = $(call qstrip,$(BR2_XTENSA_OVERLAY_FILE)) +ifneq ($(filter http://% https://% ftp://% scp://%,$(BR_ARCH_XTENSA_OVERLAY_FILE)),) +ARCH_XTENSA_OVERLAY_URL = $(BR_ARCH_XTENSA_OVERLAY_FILE) +ARCH_XTENSA_OVERLAY_FILE = $($(PKG)_DL_DIR)/$(notdir $(BR_ARCH_XTENSA_OVERLAY_FILE)) +# Do not check that file, we can't know its hash +BR_NO_CHECK_HASH_FOR += $(notdir $(ARCH_XTENSA_OVERLAY_URL)) +else +ARCH_XTENSA_OVERLAY_FILE = $(BR_ARCH_XTENSA_OVERLAY_FILE) +endif + +################################################################################ +# arch-xtensa-overlay-extract -- extract an extensa overlay +# +# argument 1 is the path in which to extract +# argument 2 is the component to extract, one of: gcc, binutils, gdb, linux, +# u-boot +# +# Example: +# $(call arch-xtensa-overlay-extract,/path/to/overlay.tar,$(@D),gcc) +################################################################################ +define arch-xtensa-overlay-extract + $(call suitable-extractor,$(ARCH_XTENSA_OVERLAY_FILE)) \ + $(ARCH_XTENSA_OVERLAY_FILE) | \ + $(TAR) --strip-components=1 -C $(1) $(TAR_OPTIONS) - $(2) +endef diff --git a/board/aarch64-efi/genimage-efi.cfg b/board/aarch64-efi/genimage-efi.cfg new file mode 100644 index 00000000..f93ab9d6 --- /dev/null +++ b/board/aarch64-efi/genimage-efi.cfg @@ -0,0 +1,30 @@ +image efi-part.vfat { + vfat { + file startup.nsh { + image = "efi-part/startup.nsh" + } + file EFI { + image = "efi-part/EFI" + } + file Image { + image = "Image" + } + } + size = 32M +} + +image disk.img { + + hdimage { + } + + partition boot { + partition-type = 0xEF + image = "efi-part.vfat" + } + + partition root { + partition-type = 0x83 + image = "rootfs.ext2" + } +} diff --git a/board/aarch64-efi/grub.cfg b/board/aarch64-efi/grub.cfg new file mode 100644 index 00000000..ab88da91 --- /dev/null +++ b/board/aarch64-efi/grub.cfg @@ -0,0 +1,6 @@ +set default="0" +set timeout="5" + +menuentry "Buildroot" { + linux /Image root=/dev/vda2 rootwait console=ttyAMA0 +} diff --git a/board/aarch64-efi/post-image.sh b/board/aarch64-efi/post-image.sh new file mode 100755 index 00000000..f0214dc8 --- /dev/null +++ b/board/aarch64-efi/post-image.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" + +cp -f ${BOARD_DIR}/grub.cfg ${BINARIES_DIR}/efi-part/EFI/BOOT/grub.cfg diff --git a/board/aarch64-efi/readme.txt b/board/aarch64-efi/readme.txt new file mode 100644 index 00000000..65a6345b --- /dev/null +++ b/board/aarch64-efi/readme.txt @@ -0,0 +1,34 @@ + +The aarch64_efi_defconfig allows to build a minimal Linux system that +can boot on all AArch64 servers providing an EFI firmware and ACPI. + +Building and booting +==================== + +$ make aarch64_efi_defconfig +$ make + +The file output/images/disk.img is a complete disk image that can be +booted, it includes the grub2 bootloader, Linux kernel and root +filesystem. + +Testing under Qemu +================== + +This image can also be tested using Qemu: + +qemu-system-aarch64 \ + -M virt \ + -cpu cortex-a57 \ + -m 512 \ + -nographic \ + -bios \ + -drive file=output/images/disk.img,if=none,format=raw,id=hd0 \ + -device virtio-blk-device,drive=hd0 \ + -netdev user,id=eth0 \ + -device virtio-net-device,netdev=eth0 + +Note that needs to point to a valid aarch64 UEFI +firmware image for qemu. +It may be provided by your distribution as a edk2-aarch64 or AAVMF +package, in path such as /usr/share/edk2/aarch64/QEMU_EFI.fd . diff --git a/board/acmesystems/aria-g25/genimage.cfg b/board/acmesystems/aria-g25/genimage.cfg new file mode 100644 index 00000000..b40ad9ed --- /dev/null +++ b/board/acmesystems/aria-g25/genimage.cfg @@ -0,0 +1,35 @@ +# Minimal SD card image for the Acmesystems Aria G25 + +image boot.vfat { + vfat { + file zImage { + image = "zImage" + } + + file at91-ariag25.dtb { + image = "at91-ariag25.dtb" + } + + file boot.bin { + image = "at91sam9x5_aria-sdcardboot-linux-zimage-dt-3.8.13.bin" + } + } + size = 16M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/acmesystems/aria-g25/readme.txt b/board/acmesystems/aria-g25/readme.txt new file mode 100644 index 00000000..cb9e9abf --- /dev/null +++ b/board/acmesystems/aria-g25/readme.txt @@ -0,0 +1,44 @@ +Acme Systems Aria G25 + +Build instructions +================== + +To build an image for the Aria G25 choose the configuration +corresponding to the Aria variant. + +For 128MB RAM variant type: + +$ make acmesystems_aria_g25_128mb_defconfig + +else for 256MB RAM variant type: + +$ make acmesystems_aria_g25_256mb_defconfig + +To customize the configuration choosed type: + +$ make menuconfig + +When you are ready to start building Buildroot type: + +$ make + +How to write the microSD card +============================= + +Once the build process is finished you will have an image called +"sdcard.img" in the output/images/ directory. + +Write the bootable SD card image "sdcard.img" onto an SD card with +"dd" command: + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + +Assuming your Aria G25 baseboard has a MicroSD socket, for example +with the Terra baseboard, insert the microSD card into the baseboard +slot and power it. + +To get the kernel log messages you can use a DPI cable +(http://www.acmesystems.it/DPI) + +You can find additional informations, tutorials and a very +comprehensive documentation on http://www.acmesystems.it/aria. diff --git a/board/acmesystems/arietta-g25/genimage.cfg b/board/acmesystems/arietta-g25/genimage.cfg new file mode 100644 index 00000000..7c3112dd --- /dev/null +++ b/board/acmesystems/arietta-g25/genimage.cfg @@ -0,0 +1,35 @@ +# Minimal SD card image for the Acmesystems Arietta G25 + +image boot.vfat { + vfat { + file zImage { + image = "zImage" + } + + file acme-arietta.dtb { + image = "at91-ariettag25.dtb" + } + + file boot.bin { + image = "at91sam9x5_arietta-sdcardboot-linux-zimage-dt-3.8.13.bin" + } + } + size = 16M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/acmesystems/arietta-g25/readme.txt b/board/acmesystems/arietta-g25/readme.txt new file mode 100644 index 00000000..f356b0a2 --- /dev/null +++ b/board/acmesystems/arietta-g25/readme.txt @@ -0,0 +1,49 @@ +Acme Systems Arietta G25 + +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the Arietta G25. With the current configuration +it will bring-up the board, and allow access through the serial console. + +You can find additional informations, tutorials and a very comprehensive +documentation on http://www.acmesystems.it/arietta. + +Build instructions +================== + +To build an image for the Arietta G25 choose the configuration +corresponding to the Arietta variant. + +For 128MB RAM variant type: + +$ make acmesystems_arietta_g25_128mb_defconfig + +else for 256MB RAM variant type: + +$ make acmesystems_arietta_g25_256mb_defconfig + +To customize the configuration chosen type: + +$ make menuconfig + +When you are ready to start building Buildroot type: + +$ make + +How to write the microSD card +============================= + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + +Insert the microSD card into the Arietta slot and power it. + +The image just built is fairly basic and the only output +you will get is on serial console, please consider to use a DPI +cable (http://www.acmesystems.it/DPI) diff --git a/board/altera/socrates_cyclone5/boot-env.txt b/board/altera/socrates_cyclone5/boot-env.txt new file mode 100644 index 00000000..ed5b6138 --- /dev/null +++ b/board/altera/socrates_cyclone5/boot-env.txt @@ -0,0 +1,8 @@ +linux_load_address=0x100000 +linux_dtb_load_address=0x100 +linux_dtb=socfpga_cyclone5_socrates.dtb +linux_load=mmc rescan; fatload mmc 0:1 ${linux_load_address} zImage; fatload mmc 0:1 ${linux_dtb_load_address} ${linux_dtb} +bootargs=console=ttyS0,115200 root=/dev/mmcblk0p3 ro rootwait +source_env=fatload mmc 0:1 0x2000000 boot.scr; source 0x2000000 +bootcmd=run linux_load; bootz ${linux_load_address} - ${linux_dtb_load_address} +bootdelay=1 diff --git a/board/altera/socrates_cyclone5/genimage.cfg b/board/altera/socrates_cyclone5/genimage.cfg new file mode 100644 index 00000000..63fef8ba --- /dev/null +++ b/board/altera/socrates_cyclone5/genimage.cfg @@ -0,0 +1,58 @@ +image boot.vfat { + vfat { + files = { + "zImage", + "socfpga_cyclone5_socrates.dtb" + } + } + size = 8M +} + +image uboot.img { + hdimage { + partition-table = "no" + } + + partition spl { + in-partition-table = "no" + image = "u-boot-spl.bin.crc" + offset = 0 + size = 64k + } + + partition uboot-full { + in-partition-table = "no" + image = "u-boot.img" + offset = 256k + } + + size = 1M +} + +image sdcard.img { + hdimage { + } + + partition uboot-env { + in-partition-table = "no" + image = "uboot-env.bin" + offset = 17408 # 512 * 34 -> just after gpt + } + + partition boot { + partition-type = 0xc + bootable = "true" + image = "boot.vfat" + } + + partition uboot { + partition-type = 0xa2 + image = "uboot.img" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext2" + size = 500M + } +} diff --git a/board/altera/socrates_cyclone5/readme.txt b/board/altera/socrates_cyclone5/readme.txt new file mode 100644 index 00000000..4e78feef --- /dev/null +++ b/board/altera/socrates_cyclone5/readme.txt @@ -0,0 +1,52 @@ +EBV SoCrates Evaluation Board + +Intro +===== + +More information about this board can be found here: +https://rocketboards.org/foswiki/Documentation/EBVSoCratesEvaluationBoard + +Build +===== + +First, load socrates config for buildroot + + make socrates_cyclone5_defconfig + +Build everything + + make + +Following files will be generated in output/images + +. +├── boot.vfat +├── rootfs.ext2 +├── rootfs.ext4 -> rootfs.ext2 +├── rootfs.tar +├── sdcard.img +├── socfpga_cyclone5_socrates.dtb +├── u-boot-spl.bin +├── u-boot-spl.bin.crc +├── u-boot.bin +├── u-boot.img +├── uboot-env.bin +├── uboot.img +└── zImage + + +Creating bootable SD card +========================= + +Simply invoke + +dd if=output/images/sdcard.img of=/dev/sdX + +Where X is your SD card device (not partition) + +Booting +======= + +Pins 6:8 on P18 selector is used to determine boot device. To boot socrates from +sdcard set these pins to value 0x5 (101b). Remaining pins are used to determine +how to configure FPGA and are not associated with booting into Linux kernel. diff --git a/board/amarula/a64-relic/extlinux.conf b/board/amarula/a64-relic/extlinux.conf new file mode 100644 index 00000000..9f469846 --- /dev/null +++ b/board/amarula/a64-relic/extlinux.conf @@ -0,0 +1,4 @@ +label linux-4.17.0-rc3 + kernel /Image + devicetree /sun50i-a64-amarula-relic.dtb + append console=ttyS0,115200 earlyprintk root=/dev/mmcblk1p4 rootwait diff --git a/board/amarula/a64-relic/genimage.cfg b/board/amarula/a64-relic/genimage.cfg new file mode 100644 index 00000000..002b6bb4 --- /dev/null +++ b/board/amarula/a64-relic/genimage.cfg @@ -0,0 +1,10 @@ +image boot.vfat { + vfat { + files = { + "Image", + "sun50i-a64-amarula-relic.dtb", + "extlinux" + } + } + size = 64M +} diff --git a/board/amarula/a64-relic/post-build.sh b/board/amarula/a64-relic/post-build.sh new file mode 100755 index 00000000..ec20fca7 --- /dev/null +++ b/board/amarula/a64-relic/post-build.sh @@ -0,0 +1,4 @@ +#!/bin/sh +BOARD_DIR="$(dirname $0)" + +install -m 0644 -D $BOARD_DIR/extlinux.conf $BINARIES_DIR/extlinux/extlinux.conf diff --git a/board/amarula/a64-relic/readme.txt b/board/amarula/a64-relic/readme.txt new file mode 100644 index 00000000..77f79e30 --- /dev/null +++ b/board/amarula/a64-relic/readme.txt @@ -0,0 +1,90 @@ +Amarula A64 Relic +================ + +Amarula A64-Relic is an Allwinner A64 based IoT device, which supports: +- Allwinner A64 Cortex-A53 +- Mali-400MP2 GPU +- AXP803 PMIC +- 1GB DDR3 RAM +- 8GB eMMC +- AP6330 Wifi/BLE +- MIPI-DSI +- CSI: OV5640 sensor +- USB OTG +- 12V DC power supply + +Wiki link: +https://openedev.amarulasolutions.com/display/ODWIKI/Amarual+A64-Relic + +Build +===== + + $ make amarula_a64_relic_defconfig + + $ make + +build files at output/images/: + - sunxi-spl.bin + - u-boot.itb + - Image + - sun50i-a64-amarula-relic.dtb + - boot.vfat + - rootfs.ext4 + +Write eMMC +========= + +The board comes with an operating system preloaded on the eMMC. +To replace it with the Buildroot-built system, take the following +steps + +1. Connect the board UART with host and open minicom(ttyUSBx/115200N8) + +2. Supply 12V DC for power-on the board. + +3. Interrupt U-Boot by pressing enter + +4. Create GPT partitions + => mmc dev 1 + => gpt write mmc 1 $partitions + +5. Connect the board USB-OTG with USB slot on the host. + +6. Initiate fastboot + => fastboot 0 + +7. Write images from host onto eMMC using fastboot + $ cd output/images + $ sudo fastboot -i 0x1f3a flash loader1 sunxi-spl.bin + $ sudo fastboot -i 0x1f3a flash loader2 u-boot.itb + $ sudo fastboot -i 0x1f3a flash esp boot.vfat + $ sudo fastboot -i 0x1f3a flash system rootfs.ext4 + +Update eMMC during Development +============================== + +During development, reflashing the entire filesystem image at every +change is time consuming. A useful alternative is to directly access +over USB the filesystem stored on the eMMC, using the USB Mass Storage +capability of U-Boot. To achieve this: + +1. Build U-Boot by enabling UMS + $ make uboot-menuconfig + (select CONFIG_CMD_USB_MASS_STORAGE=y) + +2. Follow all 6 steps from 'Write eMMC' and mount eMMC on host + => mmc dev 1 + => ums 0 mmc 1 + +WiFi +==== + + # wpa_passphrase ACCESSPOINTNAME >> /etc/wpa_supplicant.conf + (type password and enter) + # wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -B + # udhcpc -i wlan0 + # ping google.com + +-- +Jagan Teki +29-Jun-2018 diff --git a/board/amarula/a64-relic/rootfs_overlay/lib/firmware/brcm/brcmfmac4330-sdio.txt b/board/amarula/a64-relic/rootfs_overlay/lib/firmware/brcm/brcmfmac4330-sdio.txt new file mode 100644 index 00000000..d095f24c --- /dev/null +++ b/board/amarula/a64-relic/rootfs_overlay/lib/firmware/brcm/brcmfmac4330-sdio.txt @@ -0,0 +1,83 @@ +#AP6330_NVRAM_V1.0_20121130 +#Sample variables file for BCM94330 SD FC AGB board +manfid=0x2d0 +prodid=0x0547 +vendid=0x14e4 +devid=0x4360 +boardtype=0x05e1 +boardrev=0x1202 +boardflags=0x0080200 +nocrc=1 +xtalfreq=26000 +boardnum=22 +macaddr=00:90:4c:c5:12:38 +ag0=254 +aa2g=1 +ccode=ALL +pa0itssit=0x20 +pa0b0=5587 +pa0b1=-633 +pa0b2=-158 +rssismf2g=0xa +rssismc2g=0x3 +rssisav2g=0x7 +#rssi params for 5GHz +rssismf5g=0x4 +rssismc5g=0x3 +rssisav5g=0x7 +#PA parameters for lower a-band +pa1lob0=4748 +pa1lob1=-566 +pa1lob2=-180 +#PA parameters for midband +pa1b0=4762 +pa1b1=-593 +pa1b2=-172 +#PA parameters for high band +#pa1hib0=4596 +pa1hib0=4666 +pa1hib1=-619 +pa1hib2=-163 +rxpo5g=0 +maxp2ga0=74 +maxp5ga0=66 +maxp5gla0=66 +maxp5gha0=66 +# 2.4G Tx Power offsets +cck2gpo=0x2222 +ofdm2gpo=0x44444444 +mcs2gpo0=0x6666 +mcs2gpo1=0x6666 +# 5G Tx Power offsets +ofdm5gpo=0x44444444 +ofdm5glpo=0x44444444 +ofdm5ghpo=0x44444444 +mcs5gpo0=0x6666 +mcs5gpo1=0x6666 +mcs5glpo0=0x6666 +mcs5glpo1=0x6666 +mcs5ghpo0=0x6666 +mcs5ghpo1=0x6666 +sromrev=3 +il0macaddr=00:90:4c:c5:12:38 +wl0id=0x431b +cckPwrOffset=4 +swctrlmap_2g=0x44844484,0x42824282,0x40804484,0x18282,0x1ff +triso5g=0 +swctrlmap_5g=0x00100010,0x20202020,0x20202020,0x14202,0x0f0 +rfreg033=0x19 +rfreg033_cck=0x1f +dacrate2g=160 +dacrate5g=160 +txalpfbyp2g=1 +bphyscale=17 +cckPwrIdxCorr=-15 +pacalidx2g=50 +#pacalidx5g=20 +noise_cal_ref_2g=53 +noise_cal_po_2g=0 +noise_cal_ref_5g=52 +noise_cal_po_5g=5,0,0 +# 4330 OOB parameter: High level trigger +muxenab=0x10 + diff --git a/board/amarula/vyasa/extlinux.conf b/board/amarula/vyasa/extlinux.conf new file mode 100644 index 00000000..a8fcc35f --- /dev/null +++ b/board/amarula/vyasa/extlinux.conf @@ -0,0 +1,4 @@ +label Vyasa linux-next + kernel /boot/uImage + devicetree /boot/rk3288-vyasa.dtb + append console=ttyS2,115200n8 root=/dev/mmcblk0p1 rootwait diff --git a/board/amarula/vyasa/genimage.cfg b/board/amarula/vyasa/genimage.cfg new file mode 100644 index 00000000..e7076679 --- /dev/null +++ b/board/amarula/vyasa/genimage.cfg @@ -0,0 +1,22 @@ +image sdcard.img { + hdimage { + } + + partition u-boot-tpl-spl-dtb { + in-partition-table = "no" + image = "u-boot-tpl-spl-dtb.img" + offset = 32K + } + + partition u-boot-dtb { + in-partition-table = "no" + image = "u-boot-dtb.img" + offset = 8M + size = 30M # falcon mode: args @ 16M args, uImage @ 17M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/amarula/vyasa/linux_gmac.fragment b/board/amarula/vyasa/linux_gmac.fragment new file mode 100644 index 00000000..8ebf3835 --- /dev/null +++ b/board/amarula/vyasa/linux_gmac.fragment @@ -0,0 +1,3 @@ +# Currently mainline kernel exhibits issues when running rockchip gmac +# on the board, so enable it as loadable module and insert it later +CONFIG_DWMAC_ROCKCHIP=m diff --git a/board/amarula/vyasa/patches/uboot/0001-include-configs-Increase-CONFIG_SYS_BOOTM_LEN-to-16M.patch b/board/amarula/vyasa/patches/uboot/0001-include-configs-Increase-CONFIG_SYS_BOOTM_LEN-to-16M.patch new file mode 100644 index 00000000..64a147c0 --- /dev/null +++ b/board/amarula/vyasa/patches/uboot/0001-include-configs-Increase-CONFIG_SYS_BOOTM_LEN-to-16M.patch @@ -0,0 +1,35 @@ +From 8ee2b03039cccf64402a72dea2185d7fe1972729 Mon Sep 17 00:00:00 2001 +From: Shyam Saini +Date: Mon, 15 Apr 2019 16:16:16 +0530 +Subject: [PATCH] include: configs: Increase CONFIG_SYS_BOOTM_LEN to 16MB + +The default value of CONFIG_SYS_BOOTM_LEN is 0x800000 i.e, 8MB which +causes board reset because of larger uImage size. + +Error log snippet: + Booting using the fdt blob at 0x1f00000 + Loading Kernel Image ... Image too large: increase CONFIG_SYS_BOOTM_LEN +Must RESET board to recover +resetting ... + +Signed-off-by: Shyam Saini +--- + include/configs/rk3288_common.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/include/configs/rk3288_common.h b/include/configs/rk3288_common.h +index 72a54bc0ab..eab7cf4d86 100644 +--- a/include/configs/rk3288_common.h ++++ b/include/configs/rk3288_common.h +@@ -9,6 +9,8 @@ + #include + #include "rockchip-common.h" + ++#define CONFIG_SYS_BOOTM_LEN (16 << 20) /* 16MB */ ++ + #define CONFIG_SKIP_LOWLEVEL_INIT_ONLY + #define CONFIG_SYS_MALLOC_LEN (32 << 20) + #define CONFIG_SYS_CBSIZE 1024 +-- +2.11.0 + diff --git a/board/amarula/vyasa/post-build.sh b/board/amarula/vyasa/post-build.sh new file mode 100755 index 00000000..ffbbcdeb --- /dev/null +++ b/board/amarula/vyasa/post-build.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +MKIMAGE=$HOST_DIR/bin/mkimage +BOARD_DIR="$(dirname $0)" + +$MKIMAGE -n rk3288 -T rksd -d $BINARIES_DIR/u-boot-tpl.bin $BINARIES_DIR/u-boot-tpl.img +cat $BINARIES_DIR/u-boot-tpl.img $BINARIES_DIR/u-boot-spl-dtb.bin > $BINARIES_DIR/u-boot-tpl-spl-dtb.img + +install -m 0644 -D $BOARD_DIR/extlinux.conf $TARGET_DIR/boot/extlinux/extlinux.conf diff --git a/board/amarula/vyasa/readme.txt b/board/amarula/vyasa/readme.txt new file mode 100644 index 00000000..b95889e8 --- /dev/null +++ b/board/amarula/vyasa/readme.txt @@ -0,0 +1,31 @@ +Vyasa RK3288 +============ + +Vyasa is RK3288 based Single board computer with fully supported opensource software. + +https://openedev.amarulasolutions.com/display/ODWIKI/Vyasa+RK3288 + +How to build it +=============== + + $ make amarula_vyasa_rk3288_defconfig + +Then you can edit the build options using + + $ make menuconfig + +Compile all and build rootfs image: + + $ make + +Prepare your SDCard +=================== + +Buildroot generates a ready-to-use SD card image that you can flash directly to +the card. The image will be in output/images/sdcard.img. +You can write this image directly to an SD card device (i.e. /dev/xxx): + + $ sudo dd if=output/images/sdcard.img of=/dev/xxx + $ sudo sync + +Finally, you can insert the SD card to the Vyasa RK3288 board, close J4 and boot it. diff --git a/board/andes/ae3xx/ae3xx.fragment b/board/andes/ae3xx/ae3xx.fragment new file mode 100644 index 00000000..3b13d107 --- /dev/null +++ b/board/andes/ae3xx/ae3xx.fragment @@ -0,0 +1 @@ +CONFIG_NDS32_BUILTIN_DTB="ae3xx" diff --git a/board/andes/patches/linux/0001-nds32-Fix-boot-messages-garbled.patch b/board/andes/patches/linux/0001-nds32-Fix-boot-messages-garbled.patch new file mode 100644 index 00000000..adb60937 --- /dev/null +++ b/board/andes/patches/linux/0001-nds32-Fix-boot-messages-garbled.patch @@ -0,0 +1,28 @@ +From 90d52d180dcc5d1300dc352ca709eb6453894143 Mon Sep 17 00:00:00 2001 +From: Nylon Chen +Date: Wed, 28 Nov 2018 16:26:46 +0800 +Subject: [PATCH] nds32: Fix boot messages garbled + +In order to display uart correctly we have to pass the correct setting of uart to kernel by bootarg. +This patch will provide such settings to set the correct uart baud rate. + +Signed-off-by: Nylon Chen +--- + arch/nds32/boot/dts/ae3xx.dts | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/arch/nds32/boot/dts/ae3xx.dts b/arch/nds32/boot/dts/ae3xx.dts +index bb39749a6673..aefe2090926a 100644 +--- a/arch/nds32/boot/dts/ae3xx.dts ++++ b/arch/nds32/boot/dts/ae3xx.dts +@@ -6,6 +6,7 @@ + interrupt-parent = <&intc>; + + chosen { ++ bootargs = "memblock=debug earlycon console=ttyS0,38400n8 debug loglevel=7"; + stdout-path = &serial0; + }; + +-- +2.18.0 + diff --git a/board/andes/readme.txt b/board/andes/readme.txt new file mode 100644 index 00000000..0f95c655 --- /dev/null +++ b/board/andes/readme.txt @@ -0,0 +1,49 @@ +Intro +===== + +Andestech(nds32) AE3XX Platform + +The AE3XX prototype demonstrates the AE3XX example platform on the FPGA. +It is composed of one Andestech(nds32) processor and AE3XX. + +How to build it +=============== + +Configure Buildroot +------------------- + +The andes_ae3xx_defconfig configuration is a sample configuration with +all that is required to bring the FPGA Development Board: + + $ make andes_ae3xx_defconfig + +Build everything +---------------- +Note: you will need to have access to the network, since Buildroot will +download the packages' sources. + + $ make + +Result of the build +------------------- + +After building, you should obtain this tree: + +output/images/ + +-- vmlinux + +-- rootfs.cpio + +-- rootfs.tar + +How to run it +============= + +Run +--- + + Setup the Console with the rate 38400/8-N-1. + + $ cd output/images + $ ../host/bin/nds32le-linux-gdb vmlinux + $ target remote [your host] + $ lo + $ c diff --git a/board/arcturus/aarch64-ucls1012a/post-build.sh b/board/arcturus/aarch64-ucls1012a/post-build.sh new file mode 100755 index 00000000..f8ba7809 --- /dev/null +++ b/board/arcturus/aarch64-ucls1012a/post-build.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +mkdir -p ${TARGET_DIR}/lib/firmware +cp -f ${BUILD_DIR}/linux-custom/firmware/ppfe/* ${TARGET_DIR}/lib/firmware/ +cp -f ${BUILD_DIR}/linux-custom/br2-ucls1012a.its ${BINARIES_DIR}/ diff --git a/board/arcturus/aarch64-ucls1012a/post-image.sh b/board/arcturus/aarch64-ucls1012a/post-image.sh new file mode 100755 index 00000000..ccfacd38 --- /dev/null +++ b/board/arcturus/aarch64-ucls1012a/post-image.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +MKIMAGE=${HOST_DIR}/usr/bin/mkimage +MKIMAGE_IN=${BINARIES_DIR}/br2-ucls1012a.its +MKIMAGE_OUT=${BINARIES_DIR}/part0-000000.itb +${MKIMAGE} -f ${MKIMAGE_IN} ${MKIMAGE_OUT} diff --git a/board/arcturus/aarch64-ucls1012a/readme.txt b/board/arcturus/aarch64-ucls1012a/readme.txt new file mode 100644 index 00000000..483d5e9a --- /dev/null +++ b/board/arcturus/aarch64-ucls1012a/readme.txt @@ -0,0 +1,74 @@ +Arcturus uCLS1012A SoM +====================== + +This tutorial describes how to use the predefined Buildroot +configuration for the Arcturus uCLS101A SoM platform. + +Additional information about the uCLS1012A System on Module can be found at +https://www.arcturusnetworks.com/products/ucls1012a +and product support for registered users at +https://www.arcturusnetworks.com/support + +Building +-------- + +Return to the top directory and execute the following commands. + + make arcturus_ucls1012a_defconfig + make + +Result of the build +------------------- + +After building, you should obtain this tree: + + output/images/ + +-- arc-ucls1012a.dtb + +-- Image + +-- part0-000000.itb + +-- rootfs.cpio + +-- rootfs.cpio.gz + +-- rootfs.tar + +-- u-boot.bin + +-- ucls1012a.its + +Flashing +-------- + +You'll need to program the image created by buildroot into the SPI NOR flash. + +1. Reboot your module and via the serial console press to enter the B$ +u-boot shell. + From the shell you will need to update four environment variables replacing the + IPv4 IP Address with ones that will work with your network and tftp server. + + B$ setenv ipaddr 192.168.1.81 + B$ setenv serverip 192.168.1.80 + B$ setenv gatewayip 192.168.1.1 + B$ setenv netmask 255.255.255.0 + B$ saveenv + +2. Enable tftp server to serve the /output/images/ folder. + +3. Program the new U-Boot binary (optional) + If you don't feel confident upgrading your bootloader then don't do it, + it's unnecessary most of the time. + + B$ tftp u-boot.bin + B$ run program_uboot + +4. Program the ITB image (includes Kernel, DTB and Ramdisk) + + B$ tftp part0-000000.itb + B$ run iprogram + +5. Booting your new system + + Reboot your system by reset command + B$ reset + + or + + B$ run bootcmd + +Good Luck ! diff --git a/board/arcturus/aarch64-ucls1012a/rootfs_overlay/etc/init.d/S09modload b/board/arcturus/aarch64-ucls1012a/rootfs_overlay/etc/init.d/S09modload new file mode 100755 index 00000000..c87ffda1 --- /dev/null +++ b/board/arcturus/aarch64-ucls1012a/rootfs_overlay/etc/init.d/S09modload @@ -0,0 +1,14 @@ +#!/bin/sh +# +case "$1" in + start) + modprobe pfe + ;; + stop) + ;; + restart|reload) + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac diff --git a/board/arcturus/ppc-ucp1020/readme.txt b/board/arcturus/ppc-ucp1020/readme.txt new file mode 100644 index 00000000..07986f50 --- /dev/null +++ b/board/arcturus/ppc-ucp1020/readme.txt @@ -0,0 +1,74 @@ +Arcturus uCP1020 SoM +==================== + +This tutorial describes how to use the predefined Buildroot +configuration for the Arcturus uCP1020 SoM platform. + +Additional information about this module can be found at + + +Building +-------- + + make arcturus_ucp1020_defconfig + make + +Result of the build +------------------- + +After building, you should obtain this tree: + + output/images/ + +-- rootfs.jffs2 + +-- rootfs.tar + +-- u-boot.bin + +-- ucp1020.dtb + +-- uImage + +Flashing +-------- + +You'll need to program the files created by buildroot into the NOR flash. + +1. Program the new U-Boot binary (optional) + If you don't feel confident upgrading your bootloader then don't do it, + it's unnecessary most of the time. + + B$ tftp u-boot.bin + B$ protect off 0xeff80000 +$filesize + B$ erase 0xeff80000 +$filesize + B$ cp.b $loadaddr 0xeff80000 $filesize + B$ protect on 0xeff80000 +$filesize + +2. Program the kernel + + B$ tftp uImage + B$ erase 0xec140000 +$filesize + B$ cp.b $loadaddr 0xec140000 $filesize + +3. Program the DTB + + B$ tftp ucp1020.dtb + B$ erase 0xec100000 +$filesize + B$ cp.b $loadaddr 0xec100000 $filesize + +4. Program the jffs2 root filesystem + + B$ tftp rootfs.jffs2 + B$ erase 0xec800000 0xee8fffff + B$ cp.b $loadaddr 0xec800000 $filesize + +5. Booting your new system + + B$ setenv norboot 'setenv bootargs root=/dev/mtdblock1 rootfstype=jffs2 console=$consoledev,$baudrate;bootm 0xec140000 - 0xec100000' + + If you want to set this boot option as default: + + B$ setenv bootcmd 'run norboot' + B$ saveenv + + ...or for a single boot: + + B$ run norboot + +Good Luck ! diff --git a/board/arm/foundation-v8/readme.txt b/board/arm/foundation-v8/readme.txt new file mode 100644 index 00000000..b5106f01 --- /dev/null +++ b/board/arm/foundation-v8/readme.txt @@ -0,0 +1,20 @@ +This is the support for the ARM Foundation v8 machine emulated by the +ARM software simulator of the AArch64 architecture. + +First, one has to download the AArch64 software simulator from: + + https://silver.arm.com/download/download.tm?pv=4807186 + +Then, use the arm_foundationv8_defconfig configuration to build your +Buildroot system. + +Finally, boot your system with: + + ${LOCATION_OF_FOUNDATIONV8_SIMULATOR}/models/Linux64_GCC-6.4/Foundation_Platform \ + --image output/images/linux-system.axf \ + --block-device output/images/rootfs.ext2 \ + --network=nat \ + --cores 4 + +You can get network access from within the simulated environment +by requesting an IP address using DHCP (run the command 'udhcpc'). diff --git a/board/arm/juno/linux-juno-defconfig b/board/arm/juno/linux-juno-defconfig new file mode 100644 index 00000000..64598d21 --- /dev/null +++ b/board/arm/juno/linux-juno-defconfig @@ -0,0 +1,169 @@ +CONFIG_SMP=y +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_FHANDLE=y +CONFIG_AUDIT=y +CONFIG_NO_HZ_IDLE=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_TASKSTATS=y +CONFIG_TASK_DELAY_ACCT=y +CONFIG_TASK_XACCT=y +CONFIG_TASK_IO_ACCOUNTING=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_MEMCG=y +CONFIG_MEMCG_SWAP=y +CONFIG_MEMCG_KMEM=y +CONFIG_CGROUP_HUGETLB=y +CONFIG_SCHED_AUTOGROUP=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_KALLSYMS_ALL=y +CONFIG_PROFILING=y +CONFIG_JUMP_LABEL=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_ARCH_VEXPRESS=y +CONFIG_PCI=y +CONFIG_PCI_MSI=y +CONFIG_PCI_HOST_GENERIC=y +CONFIG_PCIEPORTBUS=y +CONFIG_HOTPLUG_PCI_PCIE=y +CONFIG_HOTPLUG_PCI=y +CONFIG_NR_CPUS=6 +CONFIG_PREEMPT=y +CONFIG_KSM=y +CONFIG_TRANSPARENT_HUGEPAGE=y +CONFIG_CMA=y +CONFIG_CMDLINE="console=ttyAMA0" +CONFIG_COMPAT=y +CONFIG_CPU_IDLE=y +CONFIG_ARM_CPUIDLE=y +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_INTERACTIVE=y +CONFIG_ARM_BIG_LITTLE_CPUFREQ=y +CONFIG_ARM_DT_BL_CPUFREQ=y +CONFIG_ARM_SCPI_CPUFREQ=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_BPF_JIT=y +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_SD=y +CONFIG_ATA=y +CONFIG_SATA_AHCI=y +CONFIG_SATA_AHCI_PLATFORM=y +CONFIG_AHCI_XGENE=y +CONFIG_PATA_PLATFORM=y +CONFIG_PATA_OF_PLATFORM=y +CONFIG_NETDEVICES=y +CONFIG_TUN=y +CONFIG_SKY2=y +CONFIG_SMC91X=y +CONFIG_SMSC911X=y +CONFIG_INPUT_EVDEV=y +CONFIG_SERIO_AMBAKMI=y +CONFIG_LEGACY_PTY_COUNT=16 +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +CONFIG_SERIAL_OF_PLATFORM=y +CONFIG_SERIAL_XILINX_PS_UART=y +CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_DESIGNWARE_PLATFORM=y +CONFIG_I2C_SLAVE=y +CONFIG_SPI=y +CONFIG_SPI_PL022=y +CONFIG_PTP_1588_CLOCK=m +CONFIG_GPIO_PL061=y +CONFIG_GPIO_XGENE=y +CONFIG_POWER_RESET_XGENE=y +CONFIG_POWER_RESET_SYSCON=y +CONFIG_REGULATOR=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_REGULATOR_VEXPRESS=m +CONFIG_DRM=y +CONFIG_DRM_I2C_NXP_TDA998X=y +CONFIG_DRM_ARM=y +CONFIG_DRM_HDLCD=y +CONFIG_DRM_VIRTUAL_HDLCD=y +CONFIG_FB_ARMCLCD=y +CONFIG_LOGO=y +CONFIG_USB=y +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_HCD_PLATFORM=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PLATFORM=y +CONFIG_USB_STORAGE=y +CONFIG_USB_ISP1760=y +CONFIG_NOP_USB_XCEIV=y +CONFIG_USB_ULPI=y +CONFIG_MMC=y +CONFIG_MMC_ARMMMCI=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MMC_SPI=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_EFI=y +CONFIG_RTC_DRV_PL030=y +CONFIG_RTC_DRV_PL031=y +CONFIG_DMADEVICES=y +CONFIG_PL330_DMA=y +CONFIG_COMMON_CLK_SCPI=y +CONFIG_ARM_TIMER_SP804=y +CONFIG_MAILBOX=y +CONFIG_ARM_MHU=y +CONFIG_PHY_XGENE=y +CONFIG_ARM_SCPI_PROTOCOL=y +CONFIG_EXT2_FS=y +CONFIG_EXT3_FS=y +CONFIG_FANOTIFY=y +CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y +CONFIG_QUOTA=y +CONFIG_AUTOFS4_FS=y +CONFIG_FUSE_FS=y +CONFIG_CUSE=y +CONFIG_VFAT_FS=y +CONFIG_TMPFS=y +CONFIG_HUGETLBFS=y +CONFIG_EFIVAR_FS=y +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_ISO8859_1=y +CONFIG_VIRTUALIZATION=y +CONFIG_KVM=y +CONFIG_DYNAMIC_DEBUG=y +CONFIG_DEBUG_INFO=y +CONFIG_DEBUG_FS=y +CONFIG_MAGIC_SYSRQ=y +CONFIG_DEBUG_KERNEL=y +CONFIG_LOCKUP_DETECTOR=y +CONFIG_SECURITY=y +CONFIG_CRYPTO_ANSI_CPRNG=y +CONFIG_ARM64_CRYPTO=y +CONFIG_CRYPTO_SHA1_ARM64_CE=y +CONFIG_CRYPTO_SHA2_ARM64_CE=y +CONFIG_CRYPTO_GHASH_ARM64_CE=y +CONFIG_CRYPTO_AES_ARM64_CE_CCM=y +CONFIG_CRYPTO_AES_ARM64_CE_BLK=y +CONFIG_SOUND=y +CONFIG_SND=y +CONFIG_SND_SOC=y +CONFIG_SND_SIMPLE_CARD=y +CONFIG_SND_DESIGNWARE_I2S=y +CONFIG_CMA=y +CONFIG_CMA_SIZE_MBYTES=64 diff --git a/board/arm/juno/readme.txt b/board/arm/juno/readme.txt new file mode 100644 index 00000000..b292d963 --- /dev/null +++ b/board/arm/juno/readme.txt @@ -0,0 +1,134 @@ +ARM Juno r1/r0 + +Intro +===== + +These instructions apply to all models of the ARM Juno: + - Juno r0 (does not support PCIe) + - Juno r1 (supports PCIe) + - Juno r2 (Big Cluster with A72) + +Buildroot will generate the kernel image, device tree blob, bootloader binaries +and a minimal root filesystem. + +How to build it +=============== + +Configure Buildroot +------------------- + +Configuring Buildroot is pretty simple, just execute: + + $ make arm_juno_defconfig + +Build the rootfs, kernel and DTB +-------------------------------- + +Note: you will need to have access to the network, since Buildroot will +download the packages' sources. + +You may now build your rootfs with: + + $ make + +(This may take a while) + +Result of the build +------------------- + +After building, you should obtain this tree: + + output/images/ + +-- rootfs.tar + +-- juno.dtb (if Juno r0 is used) + +-- juno-r1.dtb (if Juno r1 is used) + +-- juno-r2.dtb (if Juno r2 is used) + +-- Image + +-- bl1.bin + +-- bl2.bin + +-- bl2u.bin + +-- bl31.bin + +-- fip.bin + +-- scp-fw.bin + +-- u-boot.bin + +Preparing your rootfs +====================== + +Format your pen drive as a ext3 filesystem by executing: + + $ mkfs.ext3 /dev/ + +Preparing your rootfs +====================== + +Format your pen drive as a ext3 filesystem by executing: + + $ mkfs.ext3 /dev/ + +Installing your rootfs +====================== + +After mounting the pen drive please execute the following: + + $ sudo tar -xvf output/images/rootfs.tar -C + +When completed make sure to unmount the device: + + $ umount + +Insert the pen drive in one of the ARM Juno' USB type A connectors. + +Configure *.dtb in the boot configuration for Juno r0 +===================================================== + +SITE1/HBI0262B/images.txt +..... +NOR3UPDATE: AUTO ;Image Update:NONE/AUTO/FORCE +NOR3ADDRESS: 0x00C00000 ;Image Flash Address +NOR3FILE: \SOFTWARE\juno.dtb ;Image File Name +NOR3NAME: board.dtb ;Specify Image name to preserve file extension +NOR3LOAD: 00000000 ;Image Load Address +NOR3ENTRY: 00000000 ;Image Entry Point +...... + +Configure *.dtb in the boot configuration for Juno r1 +===================================================== + +SITE1/HBI0262C/images.txt +...... +NOR3UPDATE: AUTO ;Image Update:NONE/AUTO/FORCE +NOR3ADDRESS: 0x00C00000 ;Image Flash Address +NOR3FILE: \SOFTWARE\juno-r1.dtb ;Image File Name +NOR3NAME: board.dtb ;Specify target filename to preserve file extension +NOR3LOAD: 00000000 ;Image Load Address +NOR3ENTRY: 00000000 ;Image Entry Point +...... + +Configure *.dtb in the boot configuration for Juno r2 +===================================================== + +SITE1/HBI0262D/images.txt +...... +NOR3UPDATE: AUTO ;Image Update:NONE/AUTO/FORCE +NOR3ADDRESS: 0x02000000 ;Image Flash Address +NOR3FILE: \SOFTWARE\juno-r2.dtb ;Image File Name +NOR3NAME: board.dtb ;Specify target filename to preserve file extension +NOR3LOAD: 00000000 ;Image Load Address +NOR3ENTRY: 00000000 ;Image Entry Point +...... + +Installing kernel image and DTB +=============================== + +1. Connect to the ARM Juno UART0 and execute USB_ON in the terminal +2. Connect a USB cable between your PC and ARM Juno USB type B connector + A mass storage device should appear in your desktop. +3. Open the software/ folder +4. Copy the 'Image' file to software/ +5. Copy the 'juno-r1.dtb' (r1), 'juno.dtb' (r0) or juno-r2.dtb (r2) file to software/ +6. Copy the bootloader binaries (bl1.bin and fip.bin) to software/ +7. Press the red button in the front pannel of ARM Juno + +At this time, the board will erase the Flash entry for each new item and +replace it with the lastest ones. diff --git a/board/armadeus/apf27/linux-4.12.config b/board/armadeus/apf27/linux-4.12.config new file mode 100644 index 00000000..d0fb5d35 --- /dev/null +++ b/board/armadeus/apf27/linux-4.12.config @@ -0,0 +1,216 @@ +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_CGROUPS=y +CONFIG_EMBEDDED=y +# CONFIG_COMPAT_BRK is not set +CONFIG_SLAB=y +CONFIG_PROFILING=y +CONFIG_OPROFILE=m +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_BLK_DEV_BSG is not set +# CONFIG_IOSCHED_DEADLINE is not set +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_ARCH_MULTI_V7 is not set +CONFIG_ARCH_MXC=y +CONFIG_MACH_IMX27_DT=y +CONFIG_PREEMPT=y +CONFIG_AEABI=y +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_PM_DEBUG=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_DIAG is not set +CONFIG_CAN=m +CONFIG_CAN_VCAN=m +CONFIG_CAN_MCP251X=m +CONFIG_BT=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_HIDP=m +CONFIG_BT_HCIBTUSB=m +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_CFG80211=m +CONFIG_MAC80211=m +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_MTD=y +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_BLOCK=y +CONFIG_MTD_CFI=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set +# CONFIG_MTD_CFI_I2 is not set +CONFIG_MTD_CFI_INTELEXT=y +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_NAND=y +CONFIG_MTD_NAND_MXC=y +CONFIG_MTD_UBI=y +CONFIG_EEPROM_AT24=y +CONFIG_EEPROM_AT25=y +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +CONFIG_NETDEVICES=y +# CONFIG_NET_VENDOR_BROADCOM is not set +# CONFIG_NET_VENDOR_CIRRUS is not set +# CONFIG_NET_VENDOR_FARADAY is not set +# CONFIG_NET_VENDOR_INTEL is not set +# CONFIG_NET_VENDOR_MARVELL is not set +# CONFIG_NET_VENDOR_MICREL is not set +# CONFIG_NET_VENDOR_MICROCHIP is not set +# CONFIG_NET_VENDOR_NATSEMI is not set +# CONFIG_NET_VENDOR_SEEQ is not set +# CONFIG_NET_VENDOR_SMSC is not set +# CONFIG_NET_VENDOR_STMICRO is not set +# CONFIG_NET_VENDOR_WIZNET is not set +CONFIG_SMSC_PHY=y +CONFIG_LIBERTAS=m +CONFIG_LIBERTAS_SDIO=m +CONFIG_RT2X00=m +CONFIG_RT2500USB=m +CONFIG_RT73USB=m +CONFIG_RT2800USB=m +CONFIG_RTL8187=m +CONFIG_RTL8192CU=m +CONFIG_ZD1211RW=m +CONFIG_INPUT_JOYDEV=y +CONFIG_INPUT_EVDEV=y +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_IMX=m +# CONFIG_INPUT_MOUSE is not set +CONFIG_INPUT_JOYSTICK=y +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_LEGACY_PTYS is not set +CONFIG_SERIAL_IMX=y +CONFIG_SERIAL_IMX_CONSOLE=y +# CONFIG_HW_RANDOM is not set +CONFIG_I2C=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_IMX=y +CONFIG_SPI=y +CONFIG_SPI_IMX=y +CONFIG_SPI_SPIDEV=m +CONFIG_GPIO_SYSFS=y +CONFIG_W1=y +CONFIG_W1_MASTER_MXC=y +CONFIG_W1_SLAVE_THERM=y +CONFIG_WATCHDOG=y +CONFIG_IMX2_WDT=y +CONFIG_REGULATOR=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_MEDIA_SUPPORT=m +CONFIG_MEDIA_CAMERA_SUPPORT=y +CONFIG_MEDIA_USB_SUPPORT=y +CONFIG_USB_VIDEO_CLASS=m +CONFIG_USB_PWC=m +CONFIG_V4L_PLATFORM_DRIVERS=y +CONFIG_SOC_CAMERA=m +# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set +CONFIG_FB=y +# CONFIG_FB_MX3 is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +CONFIG_SOUND=m +CONFIG_SND=m +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +# CONFIG_SND_DRIVERS is not set +# CONFIG_SND_ARM is not set +# CONFIG_SND_SPI is not set +# CONFIG_SND_USB is not set +CONFIG_SND_SOC=m +CONFIG_SND_IMX_SOC=m +CONFIG_USB=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_MXC=y +CONFIG_USB_ACM=y +CONFIG_USB_PRINTER=y +CONFIG_USB_STORAGE=y +CONFIG_USB_CHIPIDEA=y +CONFIG_USB_CHIPIDEA_HOST=y +CONFIG_USB_SERIAL=y +CONFIG_USB_SERIAL_FTDI_SIO=y +CONFIG_USB_SERIAL_PL2303=y +CONFIG_USB_ULPI=y +CONFIG_USB_GADGET=y +CONFIG_USB_ETH=m +CONFIG_USB_GADGETFS=m +CONFIG_USB_MASS_STORAGE=m +CONFIG_USB_G_HID=m +CONFIG_MMC=y +CONFIG_MMC_MXC=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_ONESHOT=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_BACKLIGHT=y +CONFIG_LEDS_TRIGGER_CPU=y +CONFIG_LEDS_TRIGGER_GPIO=y +CONFIG_LEDS_TRIGGER_DEFAULT_ON=y +CONFIG_LEDS_TRIGGER_TRANSIENT=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_DS1374=y +CONFIG_RTC_DRV_MXC=m +CONFIG_DMADEVICES=y +CONFIG_IMX_DMA=y +CONFIG_IMX_SDMA=y +# CONFIG_IOMMU_SUPPORT is not set +CONFIG_IIO=y +CONFIG_MAX1027=y +CONFIG_MAX5821=y +CONFIG_PWM=y +CONFIG_PWM_IMX=y +CONFIG_EXT2_FS=y +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_EXT3_FS_SECURITY=y +# CONFIG_DNOTIFY is not set +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +# CONFIG_PROC_PAGE_MONITOR is not set +CONFIG_TMPFS=y +CONFIG_JFFS2_FS=y +CONFIG_UBIFS_FS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V4=y +CONFIG_ROOT_NFS=y +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_850=y +CONFIG_NLS_ISO8859_1=y +CONFIG_NLS_ISO8859_15=m +CONFIG_PRINTK_TIME=y +CONFIG_DEBUG_INFO=y +CONFIG_DEBUG_FS=y +# CONFIG_SCHED_DEBUG is not set +# CONFIG_DEBUG_PREEMPT is not set +# CONFIG_FTRACE is not set +CONFIG_DEBUG_LL=y +CONFIG_EARLY_PRINTK=y +CONFIG_FONTS=y +CONFIG_FONT_8x8=y diff --git a/board/armadeus/apf51/linux-4.4.config b/board/armadeus/apf51/linux-4.4.config new file mode 100644 index 00000000..6957b635 --- /dev/null +++ b/board/armadeus/apf51/linux-4.4.config @@ -0,0 +1,278 @@ +CONFIG_EXPERIMENTAL=y +# CONFIG_LOCALVERSION_AUTO is not set +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_EMBEDDED=y +# CONFIG_COMPAT_BRK is not set +CONFIG_SLAB=y +CONFIG_PROFILING=y +CONFIG_OPROFILE=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_BLK_DEV_BSG is not set +CONFIG_PARTITION_ADVANCED=y +CONFIG_BSD_DISKLABEL=y +# CONFIG_IOSCHED_CFQ is not set +CONFIG_ARCH_MXC=y +CONFIG_MXC_IRQ_PRIOR=y +CONFIG_SOC_IMX51=y +CONFIG_ARM_THUMBEE=y +CONFIG_PREEMPT=y +CONFIG_AEABI=y +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_STAT_DETAILS=y +CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +CONFIG_CPU_FREQ_IMX=y +CONFIG_CPU_IDLE=y +CONFIG_VFP=y +CONFIG_NEON=y +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +# CONFIG_SUSPEND is not set +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_PNP=y +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_LRO is not set +# CONFIG_INET_DIAG is not set +CONFIG_IPV6=y +CONFIG_CAN=m +CONFIG_CAN_RAW=m +CONFIG_CAN_BCM=m +CONFIG_CAN_VCAN=m +CONFIG_CAN_MCP251X=m +CONFIG_BT=m +CONFIG_BT_L2CAP=y +CONFIG_BT_SCO=y +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_HIDP=m +CONFIG_BT_HCIBTUSB=m +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_CFG80211=m +CONFIG_MAC80211=m +CONFIG_MAC80211_RC_PID=y +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_FW_LOADER=m +CONFIG_MTD=y +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +CONFIG_MTD_NAND=y +CONFIG_MTD_NAND_MXC=y +CONFIG_MTD_UBI=y +CONFIG_MISC_DEVICES=y +CONFIG_EEPROM_AT24=y +CONFIG_EEPROM_AT25=y +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +CONFIG_CHR_DEV_ST=y +CONFIG_BLK_DEV_SR=y +CONFIG_CHR_DEV_SG=y +CONFIG_CHR_DEV_SCH=y +CONFIG_SCSI_MULTI_LUN=y +CONFIG_SCSI_LOGGING=y +CONFIG_SCSI_SCAN_ASYNC=y +CONFIG_NETDEVICES=y +CONFIG_MII=y +CONFIG_SMSC_PHY=y +CONFIG_NET_ETHERNET=y +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set +CONFIG_RTL8187=m +CONFIG_LIBERTAS=m +CONFIG_LIBERTAS_SDIO=m +CONFIG_RT2X00=m +CONFIG_RT73USB=m +CONFIG_ZD1211RW=m +CONFIG_INPUT_JOYDEV=y +CONFIG_INPUT_EVDEV=y +CONFIG_KEYBOARD_GPIO=m +CONFIG_KEYBOARD_IMX=m +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_WM831X=y +CONFIG_TOUCHSCREEN_MC13XXX=m +CONFIG_INPUT_MISC=y +CONFIG_INPUT_MC13783_PWRBUTTON=m +CONFIG_INPUT_UINPUT=m +CONFIG_INPUT_WM831X_ON=y +# CONFIG_LEGACY_PTYS is not set +CONFIG_SERIAL_8250=m +CONFIG_SERIAL_IMX=y +CONFIG_SERIAL_IMX_CONSOLE=y +# CONFIG_HW_RANDOM is not set +CONFIG_I2C=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_IMX=y +CONFIG_SPI=y +CONFIG_SPI_IMX=y +CONFIG_SPI_SPIDEV=m +CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_WM831X=m +CONFIG_POWER_SUPPLY=y +CONFIG_WM831X_BACKUP=m +CONFIG_WM831X_POWER=m +CONFIG_HWMON=m +CONFIG_SENSORS_AS1531=m +CONFIG_SENSORS_MC13783_ADC=m +CONFIG_SENSORS_WM831X=m +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_NOWAYOUT=y +CONFIG_WM831X_WATCHDOG=m +CONFIG_IMX2_WDT=y +CONFIG_MFD_MC13XXX_I2C=y +CONFIG_MFD_WM831X_I2C=y +CONFIG_REGULATOR=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_REGULATOR_MC13892=m +CONFIG_IMX_IPUV3_CORE=y +CONFIG_DRM=y +CONFIG_MFD_IMX_IPU_V3=y +CONFIG_MEDIA_SUPPORT=m +CONFIG_VIDEO_DEV=m +# CONFIG_RC_CORE is not set +# CONFIG_MEDIA_TUNER_SIMPLE is not set +# CONFIG_MEDIA_TUNER_TDA8290 is not set +# CONFIG_MEDIA_TUNER_TDA827X is not set +# CONFIG_MEDIA_TUNER_TDA18271 is not set +# CONFIG_MEDIA_TUNER_TDA9887 is not set +# CONFIG_MEDIA_TUNER_TEA5761 is not set +# CONFIG_MEDIA_TUNER_TEA5767 is not set +# CONFIG_MEDIA_TUNER_MT20XX is not set +# CONFIG_MEDIA_TUNER_MT2060 is not set +# CONFIG_MEDIA_TUNER_MT2266 is not set +# CONFIG_MEDIA_TUNER_MT2131 is not set +# CONFIG_MEDIA_TUNER_QT1010 is not set +# CONFIG_MEDIA_TUNER_XC2028 is not set +# CONFIG_MEDIA_TUNER_XC5000 is not set +# CONFIG_MEDIA_TUNER_MXL5005S is not set +# CONFIG_MEDIA_TUNER_MXL5007T is not set +# CONFIG_MEDIA_TUNER_MC44S803 is not set +# CONFIG_MEDIA_TUNER_MAX2165 is not set +# CONFIG_MEDIA_TUNER_TDA18218 is not set +CONFIG_VIDEO_VIVI=m +CONFIG_USB_VIDEO_CLASS=m +# CONFIG_RADIO_ADAPTERS is not set +CONFIG_FB=y +CONFIG_FB_MX5=y +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FONTS=y +CONFIG_FONT_8x8=y +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +CONFIG_SOUND=m +# CONFIG_SOUND_OSS_CORE_PRECLAIM is not set +CONFIG_SND=m +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +# CONFIG_SND_DRIVERS is not set +# CONFIG_SND_ARM is not set +# CONFIG_SND_SPI is not set +# CONFIG_SND_USB is not set +CONFIG_SND_SOC=m +CONFIG_SND_IMX_SOC=m +CONFIG_SND_SOC_APF51_DEV_WM8960=m +CONFIG_USB=y +CONFIG_USB_DEBUG=y +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_DEVICE_CLASS is not set +CONFIG_USB_SUSPEND=y +CONFIG_USB_OTG=y +# CONFIG_USB_OTG_WHITELIST is not set +CONFIG_USB_MON=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_MXC=y +CONFIG_USB_ACM=y +CONFIG_USB_PRINTER=y +CONFIG_USB_WDM=y +CONFIG_USB_STORAGE=y +CONFIG_USB_CHIPIDEA=y +CONFIG_USB_CHIPIDEA_UDC=y +CONFIG_USB_CHIPIDEA_HOST=y +CONFIG_USB_PHY=y +CONFIG_NOP_USB_XCEIV=y +CONFIG_USB_GPIO_VBUS=y +CONFIG_USB_ULPI=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_DEBUG_FILES=y +CONFIG_USB_GADGET_DEBUG_FS=y +CONFIG_USB_ETH=m +CONFIG_USB_MASS_STORAGE=m +CONFIG_USB_G_SERIAL=m +CONFIG_USB_CDC_COMPOSITE=m +CONFIG_USB_G_MULTI=m +CONFIG_USB_G_MULTI_CDC=y +CONFIG_USB_G_HID=m +CONFIG_MMC=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MMC_SDHCI_ESDHC_IMX=y +CONFIG_MMC_SPI=m +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_WM831X_STATUS=m +CONFIG_LEDS_MC13783=m +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_MXC=y +CONFIG_RTC_DRV_WM831X=y +CONFIG_RTC_DRV_MC13XXX=m +CONFIG_STAGING=y +CONFIG_DRM_IMX=y +CONFIG_DRM_IMX_FB_HELPER=y +CONFIG_DRM_IMX_PARALLEL_DISPLAY=y +CONFIG_DRM_IMX_TVE=y +CONFIG_DRM_IMX_IPUV3=y +CONFIG_IIO=m +CONFIG_EXT2_FS=y +CONFIG_EXT2_FS_XATTR=y +CONFIG_EXT2_FS_POSIX_ACL=y +CONFIG_EXT2_FS_SECURITY=y +CONFIG_EXT2_FS_XIP=y +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_EXT3_FS_SECURITY=y +CONFIG_EXT4_FS=y +CONFIG_AUTOFS4_FS=y +CONFIG_ISO9660_FS=y +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_TMPFS=y +CONFIG_UBIFS_FS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +CONFIG_NFS_V4=y +CONFIG_ROOT_NFS=y +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_850=y +CONFIG_NLS_ISO8859_1=y +CONFIG_DEBUG_FS=y +# CONFIG_CRYPTO_ANSI_CPRNG is not set +# CONFIG_CRYPTO_HW is not set diff --git a/board/armadeus/readme.txt b/board/armadeus/readme.txt new file mode 100644 index 00000000..c03508c6 --- /dev/null +++ b/board/armadeus/readme.txt @@ -0,0 +1,84 @@ +Introduction +============ + +Armadeus APFxx are Systems On Module (SOM) based on Freescale/NXP i.MX +processors associated with an FPGA (except on APF28). Non volatile +data are stored in on-module NOR or NAND Flash, depending on the +model. These SOM can be used on Armadeus development boards or with +custom docking boards. + +Supported platforms +=================== + +Buildroot currently supports the following Armadeus platforms with the +associated defconfigs: + + * APF27 SOM + devt board -> armadeus_apf27_defconfig + * APF51 SOM + devt board -> armadeus_apf51_defconfig + * APF28 SOM + devt board -> armadeus_apf28_defconfig + +Vanilla Linux versions are preferred to Freescale's one in these +configurations. + +How to build it +=============== + +Configure Buildroot +------------------- + +Let's say you own an APFxx SOM with it's corresponding development +board, all you have to do is: + + $ make armadeus_apfxx_defconfig + +where "apfxx" is the version of your SOM. + +Launch build +------------ + + $ make + +Result of the build +------------------- + +When the build is finished, you will end up with: + + output/images/ + +-- imx**-apfxxdev.dtb [1] + +-- rootfs.tar + +-- rootfs.ubi + +-- rootfs.ubifs + +-- uImage + +[1] Only if the kernel version used uses a Device Tree. + +Building U-Boot is currently not supported in these configurations. + +Installation +============ + +You will require a serial connection to the board and a TFTP server on +your Host PC. Assuming your server is configured for exporting +/tftpboot/ directory, you will have to copy the generated images to +it: + + $ cp output/images/uImage /tftpboot/apfxx-linux.bin + $ cp output/images/*.dtb /tftpboot/ + $ cp output/images/rootfs.ubi /tftpboot/apfxx-rootfs.ubi + +where "apfxx" is the version of your SOM, as used with _defconfigs. + +Then on your serial terminal, all you have to do is: + +* interrupt the boot process and access U-Boot console by pressing any + key when booting, +* configure board and server IP addresses with "ipaddr" and "serverip" + environment variables, +* if you want to update kernel: + BIOS > run update_kernel +* if you want to update device tree: + BIOS > run update_dtb +* if you want to update rootfs: + BIOS > run update_rootfs + +That's it ! diff --git a/board/arrow/avenger96/overlay/boot/extlinux/extlinux.conf b/board/arrow/avenger96/overlay/boot/extlinux/extlinux.conf new file mode 100644 index 00000000..5d506b3d --- /dev/null +++ b/board/arrow/avenger96/overlay/boot/extlinux/extlinux.conf @@ -0,0 +1,4 @@ +label stm32mp157c-dk2-buildroot + kernel /boot/zImage + devicetree /boot/stm32mp157a-dhcor-avenger96.dtb + append root=/dev/mmcblk1p4 rootwait diff --git a/board/arrow/avenger96/readme.txt b/board/arrow/avenger96/readme.txt new file mode 100644 index 00000000..19ab09eb --- /dev/null +++ b/board/arrow/avenger96/readme.txt @@ -0,0 +1,41 @@ +Arrow Avenger96 + +Intro +===== + +This configuration supports the Arrow Avenger96 board: + +https://wiki.dh-electronics.com/index.php/Avenger96 + +How to build +============ + + $ make avenger96_defconfig + $ make + +How to write the microSD card +============================= + +WARNING! This will destroy all the card content. Use with care! + +Once the build process is finished you will have an image called +"sdcard.img" in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an microSD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + +Boot the board +============== + + (1) Configure the boot switches for boot from microsd: 1-0-1 + + (2) Insert the microSD card in the slot + + (3) Plug a serial adapter (beware: 1v8 levels!) to the low speed + expansion connector + + (4) Plug in power cable + + (5) The system will start, with the console on UART, but also visible + on the screen. diff --git a/board/asus/tinker/extlinux.conf b/board/asus/tinker/extlinux.conf new file mode 100644 index 00000000..136af0de --- /dev/null +++ b/board/asus/tinker/extlinux.conf @@ -0,0 +1,4 @@ +label Tinker linux-next + kernel /boot/uImage + devicetree /boot/rk3288-tinker.dtb + append console=ttyS2,115200n8 root=/dev/mmcblk0p1 rootwait diff --git a/board/asus/tinker/genimage.cfg b/board/asus/tinker/genimage.cfg new file mode 100644 index 00000000..a4b1e8d6 --- /dev/null +++ b/board/asus/tinker/genimage.cfg @@ -0,0 +1,15 @@ +image sdcard.img { + hdimage { + } + + partition u-boot-spl-dtb { + in-partition-table = "no" + image = "u-boot-spl-dtb.img" + offset = 32K + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/asus/tinker/patches/uboot/0001-include-configs-Increase-CONFIG_SYS_BOOTM_LEN-to-16M.patch b/board/asus/tinker/patches/uboot/0001-include-configs-Increase-CONFIG_SYS_BOOTM_LEN-to-16M.patch new file mode 100644 index 00000000..64a147c0 --- /dev/null +++ b/board/asus/tinker/patches/uboot/0001-include-configs-Increase-CONFIG_SYS_BOOTM_LEN-to-16M.patch @@ -0,0 +1,35 @@ +From 8ee2b03039cccf64402a72dea2185d7fe1972729 Mon Sep 17 00:00:00 2001 +From: Shyam Saini +Date: Mon, 15 Apr 2019 16:16:16 +0530 +Subject: [PATCH] include: configs: Increase CONFIG_SYS_BOOTM_LEN to 16MB + +The default value of CONFIG_SYS_BOOTM_LEN is 0x800000 i.e, 8MB which +causes board reset because of larger uImage size. + +Error log snippet: + Booting using the fdt blob at 0x1f00000 + Loading Kernel Image ... Image too large: increase CONFIG_SYS_BOOTM_LEN +Must RESET board to recover +resetting ... + +Signed-off-by: Shyam Saini +--- + include/configs/rk3288_common.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/include/configs/rk3288_common.h b/include/configs/rk3288_common.h +index 72a54bc0ab..eab7cf4d86 100644 +--- a/include/configs/rk3288_common.h ++++ b/include/configs/rk3288_common.h +@@ -9,6 +9,8 @@ + #include + #include "rockchip-common.h" + ++#define CONFIG_SYS_BOOTM_LEN (16 << 20) /* 16MB */ ++ + #define CONFIG_SKIP_LOWLEVEL_INIT_ONLY + #define CONFIG_SYS_MALLOC_LEN (32 << 20) + #define CONFIG_SYS_CBSIZE 1024 +-- +2.11.0 + diff --git a/board/asus/tinker/post-build.sh b/board/asus/tinker/post-build.sh new file mode 100755 index 00000000..8108ed83 --- /dev/null +++ b/board/asus/tinker/post-build.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +MKIMAGE=$HOST_DIR/bin/mkimage +BOARD_DIR="$(dirname $0)" + +$MKIMAGE -n rk3288 -T rksd -d $BINARIES_DIR/u-boot-spl-dtb.bin $BINARIES_DIR/u-boot-spl-dtb.img +cat $BINARIES_DIR/u-boot-dtb.bin >> $BINARIES_DIR/u-boot-spl-dtb.img + +install -m 0644 -D $BOARD_DIR/extlinux.conf $TARGET_DIR/boot/extlinux/extlinux.conf diff --git a/board/asus/tinker/readme.txt b/board/asus/tinker/readme.txt new file mode 100644 index 00000000..7372d295 --- /dev/null +++ b/board/asus/tinker/readme.txt @@ -0,0 +1,37 @@ +Tinker RK3288 +============= + +Tinker Board is a Single Board Computer (SBC) in an ultra-small form +factor that offers class-leading performance while leveraging outstanding +mechanical compatibility. + +Tinker link: +https://www.asus.com/in/Single-Board-Computer/Tinker-Board/ + +Wiki link: +https://openedev.amarulasolutions.com/display/ODWIKI/Tinker+RK3288 + +How to build it +=============== + + $ make asus_tinker_rk3288_defconfig + +Then you can edit the build options using + + $ make menuconfig + +Compile all and build rootfs image: + + $ make + +Prepare your SDCard +=================== + +Buildroot generates a ready-to-use SD card image that you can flash directly to +the card. The image will be in output/images/sdcard.img. +You can write this image directly to an SD card device (i.e. /dev/xxx): + + $ sudo dd if=output/images/sdcard.img of=/dev/xxx + $ sudo sync + +Finally, you can insert the SD card to the Tinker RK3288 board and boot it. diff --git a/board/atmel/at91sam9x5ek_mmc/genimage.cfg b/board/atmel/at91sam9x5ek_mmc/genimage.cfg new file mode 100644 index 00000000..7a552665 --- /dev/null +++ b/board/atmel/at91sam9x5ek_mmc/genimage.cfg @@ -0,0 +1,39 @@ +# Image for SD card boot on Atmel at91sam9x5ek boards +# +image boot.vfat { + vfat { + files = { + "zImage", + "at91sam9g15ek.dtb", + "at91sam9g25ek.dtb", + "at91sam9g35ek.dtb", + "at91sam9x25ek.dtb", + "at91sam9x35ek.dtb", + "boot.bin", + "u-boot.bin" + } + + file uboot.env { + image = "uboot-env.bin" + } + } + size = 16M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 1M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/atmel/at91sam9x5ek_mmc/uboot-env.txt b/board/atmel/at91sam9x5ek_mmc/uboot-env.txt new file mode 100644 index 00000000..568e4bc9 --- /dev/null +++ b/board/atmel/at91sam9x5ek_mmc/uboot-env.txt @@ -0,0 +1,7 @@ +bootargs=console=ttyS0,115200 root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait video=Unknown-1:800x480-16 +bootcmd=fatload mmc 0:1 0x21000000 at91sam9g35ek.dtb; fatload mmc 0:1 0x22000000 zImage; bootz 0x22000000 - 0x21000000 +bootdelay=1 +ethact=gmac0 +stderr=serial +stdin=serial +stdout=serial diff --git a/board/atmel/flasher.sh b/board/atmel/flasher.sh new file mode 100755 index 00000000..a7409ce8 --- /dev/null +++ b/board/atmel/flasher.sh @@ -0,0 +1,145 @@ +#!/usr/bin/env bash + +BUILDIR=$1 +TTY=$2 +BOARD=$3 + +family_at91sam9260ek="at91sam9260ek" +mach_at91sam9260ek="at91sam9260-ek" +dtb_at91sam9260ek="at91sam9260ek.dtb" + +family_at91sam9g45m10ek="at91sam9m10g45ek" +mach_at91sam9g45m10ek="at91sam9m10-g45-ek" +dtb_at91sam9g45m10ek="at91sam9m10g45ek.dtb" + +family_at91sam9rlek="at91sam9rlek" +mach_at91sam9rlek="at91sam9rl64-ek" +dtb_at91sam9rlek="at91sam9rlek.dtb" + +family_at91sam9g15ek="at91sam9x5ek" +mach_at91sam9g15ek="at91sam9g15-ek" +dtb_at91sam9g15ek="at91sam9g15ek.dtb" + +family_at91sam9g20ek="at91sam9g20ek" +mach_at91sam9g20ek="at91sam9g20-ek" +dtb_at91sam9g20ek="at91sam9g20ek.dtb" + +family_at91sam9g25ek="at91sam9x5ek" +mach_at91sam9g25ek="at91sam9g25-ek" +dtb_at91sam9g25ek="at91sam9g25ek.dtb" + +family_at91sam9g35ek="at91sam9x5ek" +mach_at91sam9g35ek="at91sam9g35-ek" +dtb_at91sam9g35ek="at91sam9g35ek.dtb" + +family_at91sam9x25ek="at91sam9x5ek" +mach_at91sam9x25ek="at91sam9x25-ek" +dtb_at91sam9x25ek="at91sam9x25ek.dtb" + +family_at91sam9x35ek="at91sam9x5ek" +mach_at91sam9x35ek="at91sam9x35-ek" +dtb_at91sam9x35ek="at91sam9x35ek.dtb" + +family_sama5d31ek="sama5d3xek" +mach_sama5d31ek="at91sama5d3x-ek" +dtb_sama5d31ek="sama5d31ek.dtb" + +family_sama5d31ek_revc="sama5d3xek" +mach_sama5d31ek_revc="at91sama5d3x-ek" +dtb_sama5d31ek_revc="sama5d31ek_revc.dtb" + +family_sama5d33ek="sama5d3xek" +mach_sama5d33ek="at91sama5d3x-ek" +dtb_sama5d33ek="sama5d33ek.dtb" + +family_sama5d33ek_revc="sama5d3xek" +mach_sama5d33ek_revc="at91sama5d3x-ek" +dtb_sama5d33ek_revc="sama5d33ek_revc.dtb" + +family_sama5d34ek="sama5d3xek" +mach_sama5d34ek="at91sama5d3x-ek" +dtb_sama5d34ek="sama5d34ek.dtb" + +family_sama5d34ek_revc="sama5d3xek" +mach_sama5d34ek_revc="at91sama5d3x-ek" +dtb_sama5d34ek_revc="sama5d34ek_revc.dtb" + +family_sama5d35ek="sama5d3xek" +mach_sama5d35ek="at91sama5d3x-ek" +dtb_sama5d35ek="sama5d35ek.dtb" + +family_sama5d35ek_revc="sama5d3xek" +mach_sama5d35ek_revc="at91sama5d3x-ek" +dtb_sama5d35ek_revc="sama5d35ek_revc.dtb" + +family_sama5d36ek="sama5d3xek" +mach_sama5d36ek="at91sama5d3x-ek" +dtb_sama5d36ek="sama5d36ek.dtb" + +family_sama5d36ek_revc="sama5d3xek" +mach_sama5d36ek_revc="at91sama5d3x-ek" +dtb_sama5d36ek_revc="sama5d36ek_revc.dtb" + +family_sama5d3_xplained="sama5d3_xplained" +mach_sama5d3_xplained="at91sama5d3x-xplained" +dtb_sama5d3_xplained="at91-sama5d3_xplained.dtb" + +family_sama5d4ek="sama5d4ek" +mach_sama5d4ek="at91sama5d4x-ek" +dtb_sama5d4ek="at91-sama5d4ek.dtb" + +family_sama5d4_xplained="sama5d4_xplained" +mach_sama5d4_xplained="at91sama5d4x-ek" +dtb_sama5d4_xplained="at91-sama5d4_xplained.dtb" + +usage() { + cat << EOF +Usage: + $0 + +Available boards: + at91sam9260ek + at91sam9g45m10ek + at91sam9rlek + at91sam9g15ek + at91sam9g20ek + at91sam9g25ek + at91sam9x25ek + at91sam9g35ek + at91sam9x35ek + sama5d31ek + sama5d33ek + sama5d34ek + sama5d35ek + sama5d36ek + sama5d31ek_revc (Until rev. C) + sama5d33ek_revc (Until rev. C) + sama5d34ek_revc (Until rev. C) + sama5d35ek_revc (Until rev. C) + sama5d36ek_revc (Until rev. C) + sama5d3_xplained + sama5d4ek + sama5d4_xplained + +Example: + $0 ./output /dev/ttyACM0 at91sam9g45m10ek +EOF +} + +F="family_$BOARD" +M="mach_$BOARD" +D="dtb_$BOARD" + +if [[ $# != 3 || -z ${!F} ]]; then + usage + exit 1 +fi + +video_mode="video=LVDS-1:800x480-16" +if [[ $BOARD == "*pda4" ]]; then + video_mode="video=LVDS-1:480x272-16" +fi + +echo "Executing: ${!F} O=$1/images $1/host/bin/sam-ba $TTY ${!M} $(dirname $0)/nandflash.tcl -- ${!F} ${!D} $video_mode" +export O=$1/images +$1/host/bin/sam-ba $TTY ${!M} $(dirname $0)/nandflash.tcl -- ${!F} ${!D} $video_mode diff --git a/board/atmel/nandflash.tcl b/board/atmel/nandflash.tcl new file mode 100644 index 00000000..3955b345 --- /dev/null +++ b/board/atmel/nandflash.tcl @@ -0,0 +1,358 @@ +# ---------------------------------------------------------------------------- +# ATMEL Microcontroller +# ---------------------------------------------------------------------------- +# Copyright (c) 2015, Atmel Corporation +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# - Redistributions of source code must retain the above copyright notice, +# this list of conditions and the disclaimer below. +# +# Atmel's name may not be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE +# DISCLAIMED. IN NO EVENT SHALL ATMEL 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. +# ---------------------------------------------------------------------------- + +################################################################################ +# Script data +################################################################################ +# DBGU address for rm9200, 9260/9g20, 9261/9g10, 9rl, 9x5 +set at91_base_dbgu0 0xfffff200 +# DBGU address for 9263, 9g45, sama5d3 +set at91_base_dbgu1 0xffffee00 +# DBGU address for sama5d4 +set at91_base_dbgu2 0xfc069000 + +set arch_exid_offset 0x44 + +# arch id +set arch_id_at91sam9g20 0x019905a0 +set arch_id_at91sam9g45 0x819b05a0 +set arch_id_at91sam9x5 0x819a05a0 +set arch_id_at91sam9n12 0x819a07a0 +set arch_id_sama5d3 0x8a5c07c0 + +## Find out at91sam9x5 variant to load the corresponding dtb file +array set at91sam9x5_variant { + 0x00000000 at91sam9g15 + 0x00000001 at91sam9g35 + 0x00000002 at91sam9x35 + 0x00000003 at91sam9g25 + 0x00000004 at91sam9x25 +} + +## Find out sama5d3 variant to load the corresponding dtb file +array set sama5d3_variant { + 0x00444300 sama5d31 + 0x00414300 sama5d33 + 0x00414301 sama5d34 + 0x00584300 sama5d35 + 0x00004301 sama5d36 +} + +## Find out sama5d4 variant +array set sama5d4_variant { + 0x00000001 sama5d41 + 0x00000002 sama5d42 + 0x00000003 sama5d43 + 0x00000004 sama5d44 +} + +################################################################################ +# proc uboot_env: Convert u-boot variables in a string ready to be flashed +# in the region reserved for environment variables +################################################################################ +proc set_uboot_env {nameOfLstOfVar} { + upvar $nameOfLstOfVar lstOfVar + + # sector size is the size defined in u-boot CFG_ENV_SIZE + set sectorSize [expr 0x20000 - 5] + + set strEnv [join $lstOfVar "\0"] + while {[string length $strEnv] < $sectorSize} { + append strEnv "\0" + } + # \0 between crc and strEnv is the flag value for redundant environment + set strCrc [binary format i [::vfs::crc $strEnv]] + return "$strCrc\0$strEnv" +} + +################################################################################ +proc find_variant_name {boardType} { + global at91_base_dbgu0 + global at91_base_dbgu1 + global at91_base_dbgu2 + global arch_exid_offset + global at91sam9x5_variant + global sama5d3_variant + global sama5d4_variant + set socName "none" + + switch $boardType { + at91sam9x5ek { + set exidAddr [expr {$at91_base_dbgu0 + $arch_exid_offset}] + set chip_variant [format "0x%08x" [read_int $exidAddr]] + + foreach {key value} [array get at91sam9x5_variant] { + if {$key == $chip_variant} { + set socName "$value" + break; + } + } + } + sama5d3xek { + set exidAddr [expr {$at91_base_dbgu1 + $arch_exid_offset}] + set chip_variant [format "0x%08x" [read_int $exidAddr]] + + foreach {key value} [array get sama5d3_variant] { + #puts "-I- === $chip_variant ? $key ($value) ===" + if {$key == $chip_variant} { + set socName "$value" + break; + } + } + } + sama5d3_xplained { + set exidAddr [expr {$at91_base_dbgu1 + $arch_exid_offset}] + set chip_variant [format "0x%08x" [read_int $exidAddr]] + + foreach {key value} [array get sama5d3_variant] { + #puts "-I- === $chip_variant ? $key ($value) ===" + if {$key == $chip_variant} { + set socName "$value" + break; + } + } + } + sama5d4ek { + set exidAddr [expr {$at91_base_dbgu2 + $arch_exid_offset}] + set chip_variant [format "0x%08x" [read_int $exidAddr]] + + foreach {key value} [array get sama5d4_variant] { + #puts "-I- === $chip_variant ? $key ($value) ===" + if {$key == $chip_variant} { + set socName "$value" + break; + } + } + } + sama5d4_xplained { + set exidAddr [expr {$at91_base_dbgu2 + $arch_exid_offset}] + set chip_variant [format "0x%08x" [read_int $exidAddr]] + + foreach {key value} [array get sama5d4_variant] { + #puts "-I- === $chip_variant ? $key ($value) ===" + if {$key == $chip_variant} { + set socName "$value" + break; + } + } + } + } + + return "$socName" +} + +proc find_variant_ecc {boardType} { + set eccType "none" + + switch $boardType { + at91sam9x5ek { + set eccType 0xc0c00405 + } + at91sam9n12ek { + set eccType 0xc0c00405 + } + sama5d3xek { + set eccType 0xc0902405 + } + sama5d3_xplained { + set eccType 0xc0902405 + } + sama5d4ek { + set eccType 0xc1e04e07 + } + sama5d4_xplained { + set eccType 0xc1e04e07 + } + } + + puts "-I- === eccType is $eccType ===" + return $eccType +} + +proc get_kernel_load_addr {boardType} { + set kernel_load_addr 0x22000000 + + switch $boardType { + at91sam9m10g45ek { + set kernel_load_addr 0x72000000 + } + } + + return $kernel_load_addr +} + +proc get_dtb_load_addr {boardType} { + set dtb_load_addr 0x21000000 + + switch $boardType { + at91sam9m10g45ek { + set dtb_load_addr 0x71000000 + } + } + + return $dtb_load_addr +} + +################################################################################ +# Main script: Load the linux demo in NandFlash, +# Update the environment variables +################################################################################ + +################################################################################ + +# check for proper variable initialization +if {! [info exists boardFamily]} { + puts "-I- === Parsing script arguments ===" + if {! [info exists env(O)]} { + puts "-E- === Binaries path not defined ===" + exit + } + + set bootstrapFile "$env(O)/at91bootstrap.bin" + set ubootFile "$env(O)/u-boot.bin" + set kernelFile "$env(O)/zImage" + set rootfsFile "$env(O)/rootfs.ubi" + set build_uboot_env "yes" + + set i 1 + foreach arg $::argv { + puts "argument $i is $arg" + switch $i { + 4 { set boardFamily $arg } + 5 { set dtbFile "$env(O)/$arg" } + 6 { set videoMode $arg } + } + incr i + } +} + +puts "-I- === Board Family is $boardFamily ===" + +set pmeccConfig [find_variant_ecc $boardFamily] + +## Now check for the needed files +if {! [file exists $bootstrapFile]} { + puts "-E- === AT91Bootstrap file not found ===" + exit +} + +if {! [file exists $ubootFile]} { + puts "-E- === U-Boot file not found ===" + exit +} + +if {! [file exists $kernelFile]} { + puts "-E- === Linux kernel file not found ===" + exit +} + +if {! [file exists $dtbFile]} { + puts "-E- === Device Tree binary: $dtbFile file not found ===" + exit +} + +if {! [file exists $rootfsFile]} { + puts "-E- === Rootfs file not found ===" + exit +} + +## NandFlash Mapping +set bootStrapAddr 0x00000000 +set ubootAddr 0x00040000 +set ubootEnvAddr 0x000c0000 +set dtbAddr 0x00180000 +set kernelAddr 0x00200000 +set rootfsAddr 0x00800000 + +## u-boot variable +set kernelLoadAddr [get_kernel_load_addr $boardFamily] +set dtbLoadAddr [get_dtb_load_addr $boardFamily] + +## NandFlash Mapping +set kernelSize [format "0x%08X" [file size $kernelFile]] +set dtbSize [format "0x%08X" [file size $dtbFile]] +set bootCmd "bootcmd=nand read $dtbLoadAddr $dtbAddr $dtbSize; nand read $kernelLoadAddr $kernelAddr $kernelSize; bootz $kernelLoadAddr - $dtbLoadAddr" +set rootfsSize [format "0x%08X" [file size $rootfsFile]] + +lappend u_boot_variables \ + "bootdelay=1" \ + "baudrate=115200" \ + "stdin=serial" \ + "stdout=serial" \ + "stderr=serial" \ + "bootargs=console=ttyS0,115200 mtdparts=atmel_nand:256k(bootstrap)ro,512k(uboot)ro,256k(env),256k(env_redundant),256k(spare),512k(dtb),6M(kernel)ro,-(rootfs) rootfstype=ubifs ubi.mtd=7 root=ubi0:rootfs rw $videoMode" \ + "$bootCmd" + +## Additional files to load +set ubootEnvFile "ubootEnvtFileNandFlash.bin" + + +## Start flashing procedure ################################################## +puts "-I- === Initialize the NAND access ===" +NANDFLASH::Init + +if {$pmeccConfig != "none"} { + puts "-I- === Enable PMECC OS Parameters ===" + NANDFLASH::NandHeaderValue HEADER $pmeccConfig +} + +puts "-I- === Erase all the NAND flash blocs and test the erasing ===" +NANDFLASH::EraseAllNandFlash + +puts "-I- === Load AT91Bootstrap in the first sector ===" +if {$pmeccConfig != "none"} { + NANDFLASH::SendBootFilePmeccCmd $bootstrapFile +} else { + NANDFLASH::sendBootFile $bootstrapFile +} + +puts "-I- === Load u-boot in the next sectors ===" +send_file {NandFlash} "$ubootFile" $ubootAddr 0 + +if {$build_uboot_env == "yes"} { + puts "-I- === Load the u-boot environment variables ===" + set fh [open "$ubootEnvFile" w] + fconfigure $fh -translation binary + puts -nonewline $fh [set_uboot_env u_boot_variables] + close $fh + send_file {NandFlash} "$ubootEnvFile" $ubootEnvAddr 0 +} + +puts "-I- === Load the Kernel image and device tree database ===" +send_file {NandFlash} "$dtbFile" $dtbAddr 0 +send_file {NandFlash} "$kernelFile" $kernelAddr 0 + +if {$pmeccConfig != "none"} { + puts "-I- === Enable trimffs ===" + NANDFLASH::NandSetTrimffs 1 +} + +puts "-I- === Load the linux file system ===" +send_file {NandFlash} "$rootfsFile" $rootfsAddr 0 + +puts "-I- === DONE. ===" diff --git a/board/atmel/readme.txt b/board/atmel/readme.txt new file mode 100644 index 00000000..1f21dd15 --- /dev/null +++ b/board/atmel/readme.txt @@ -0,0 +1,177 @@ +This document explains how to set up a basic Buildroot system on +various Atmel/Microchip boards. Additional details can also be found +on the Linux4SAM website: http://www.linux4sam.org + +This guide covers the following configurations: + - at91sam9g45m10ek_defconfig + - at91sam9rlek_defconfig + - at91sam9x5ek_defconfig (at91sam9g15, at91sam9g25, at91sam9x25, + at91sam9g35 and at91sam9x35) + - atmel_sama5d3xek_defconfig (sama5d31, sama5d33, sama5d34, sama5d35, + sama5d36) + - atmel_sama5d3_xplained_defconfig + - atmel_sama5d3_xplained_dev_defconfig + - atmel_sama5d3_xplained_mmc_defconfig + - atmel_sama5d3_xplained_mmc_dev_defconfig + - atmel_sama5d4_xplained_defconfig + - atmel_sama5d4_xplained_dev_defconfig + - atmel_sama5d4_xplained_mmc_defconfig + - atmel_sama5d4_xplained_mmc_dev_defconfig + - atmel_sama5d2_xplained_mmc_defconfig + - atmel_sama5d2_xplained_mmc_dev_defconfig + - microchip_sama5d27_wlsom1_ek_mmc_defconfig + - microchip_sama5d27_wlsom1_ek_mmc_dev_defconfig + - microchip_sam9x60ek_mmc_defconfig + - microchip_sam9x60ek_mmc_dev_defconfig + +These configurations will use AT91Bootstrap, u-boot and a linux kernel from +the git trees maintained by Atmel. + +The configurations labeled as 'dev' provide a development rootfs with tools to +tests the features of the SoC: +- ALSA tools to test audio +- FFMPEG to record video from the ISI/ISC +- I2C, SPI, CAN, etc. tools +- modetest for LCD screens, HDMI +- Wilc1000/Wilc3000 firmware for the Atmel Wireless sdio module +- SSH for convenience +- GDB/GDB server for debug + +Configuring and building Buildroot +================================== + +For the Xplained/Evaluation Kit boards, the Buildroot configuration is +provided to boot from an SD card. Those configurations are labeled as +'mmc'. In this case, after building Buildroot, follow the instructions +in the "Preparing the SD card" section. + +For the other configurations listed above, the Buildroot configuration +assumes the system will be flashed on NAND. In this case, after +building Buildroot, follow the instructions in the "Flashing the NAND +using SAM-BA" section below. + +To configure and build Buildroot, run: + + make _defconfig + make + +Flashing the NAND using SAM-BA +============================== + +Flashing the board +------------------ + +Connect the board: + o at91sam9g45m10ek: DBGU: J10, USB sam-ba: J14 + o at91sam9rlek: DBGU: J19, USB sam-ba: J21 + o at91sam9x5ek: DBGU: J11, USB sam-ba: J20 + o sama5d3xek: DBGU: J14, USB sam-ba: J20 + o sama5d3 Xplained: DBGU: J23, USB sam-ba: J6 + o sama5d4ek: DBGU: J22 or J24, USB sam-ba: J1 + o sama5d4 Xplained: DBGU: J1, USB sam-ba: J11 + +Start the board in RomBOOT: + o at91sam9g45m10ek: + 1. open JP8, JP10 and JP12 + 2. start the board + 3. close JP8, JP10 and JP12 + + o at91sam9rlek: + 1. J11 on 1-2 (BMS=1), open J12 and J13 + 2. start the board + 3. close J12 and J13 + + o at91sam9x5ek: + 1. open JP9 and: + - Cogent: open *NCS jumper + - Embest: open SW1 + - Ronetix: open J1 and J2 + 2. start the board + 3. close JP9 and: + - Cogent: close *NCS jumper + - Embest: close SW1 (ON position) + - Ronetix: close J1 and J2 + + o sama5d3xek: + 1. start the board + 2. push BP4 and BP1 + 3. release BP1 + 4. release BP4 + + o sama5d3 Xplained: + 1. open JP5 (NANDCS) and JP6 (SPICS) + 2. start the board + 3. close JP5 ans JP6 + + o sama5d4ek: + 1. start the board + 2. push BP3 and BP4 + 3. release BP4 + 4. release BP3 + + o sama5d4 Xplained: + 1. close JP7 (BOOT_DIS) + 2. start the board + 3. open JP7 + +"RomBOOT" should appear on your console (this should be ttyUSBx or ttyACMx) + +Now locate the USB sam-ba interface it should be ttyACMx, usually ttyACM0 +dmesg on your machine should give: +usb 1-2.1.4: New USB device found, idVendor=03eb, idProduct=6124 +usb 1-2.1.4: New USB device strings: Mfr=0, Product=0, SerialNumber=0 +cdc_acm 1-2.1.4:1.0: ttyACM0: USB ACM device + +Look for idVendor=03eb, idProduct=6124, this is the interface you want to use. + +You can then flash the board using the provided flasher.sh script in board/atmel: + +board/atmel/flasher.sh + +For example, for an out of tree build made in +/tmp/atmel_sama5d3_xplained/ for the sama5d3 Xplained, you would use: +board/atmel/flasher.sh /tmp/atmel_sama5d3_xplained/ /dev/ttyACM0 sama5d3_xplained + +Reboot, the system should boot up to the buildroot login invite. + +Preparing the SD card +===================== + +An image named sdcard.img is automatically generated. With this image, +you no longer have to care about the creation of the partition and +copying files to the SD card. + +You need at least a 1GB SD card. All the data on the SD card will be +lost. To copy the image on the SD card: + +/!\ Caution be sure to do it on the right mmcblk device /!\ + +dd if=output/images/sdcard.img of=/dev/mmcblk0 + +Insert your SD card in your Xplained/Evaluation Kit board, and +enjoy. The default U-Boot environment will load properly the kernel +and Device Tree blob from the first partition of the SD card, so +everything works automatically. + +By default a 16MB FAT partition is created. It contains at91bootstrap, +u-boot, the kernel image and all dtb variants for your board. The dtb +used is the basic one: + +U-Boot> print +[...] +bootcmd=fatload mmc 1:1 0x21000000 at91-sama5d2_xplained.dtb; fatload mmc 1:1 0x22000000 zImage; bootz 0x22000000 - 0x21000000 +[...] + +If you want to use a variant such as the _pda7 one, you will have to +update your u-boot environment: + +U-Boot> setenv bootcmd 'fatload mmc 1:1 0x21000000 at91-sama5d2_xplained_pda7.dtb; fatload mmc 1:1 0x22000000 zImage; bootz 0x22000000 - 0x21000000' +U-Boot> save +Saving Environment to FAT... +writing uboot.env +done + +A 512MB ext4 partition is also created to store the rootfs generated. + +If you want to customize the size of the partitions and their content, +take a look at the the genimage.cfg file in the board directory. diff --git a/board/atmel/sama5d27_som1_ek_mmc/genimage.cfg b/board/atmel/sama5d27_som1_ek_mmc/genimage.cfg new file mode 100644 index 00000000..eaa3896f --- /dev/null +++ b/board/atmel/sama5d27_som1_ek_mmc/genimage.cfg @@ -0,0 +1,31 @@ +# Image for SD card boot on Atmel SAMA5D2 Xplained boards +# +image boot.vfat { + vfat { + files = { + "zImage", + "at91-sama5d27_som1_ek.dtb", + "boot.bin", + "u-boot.bin" + } + } + size = 16M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 1M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/atmel/sama5d27_wlsom1_ek_mmc/genimage.cfg b/board/atmel/sama5d27_wlsom1_ek_mmc/genimage.cfg new file mode 100644 index 00000000..dce32524 --- /dev/null +++ b/board/atmel/sama5d27_wlsom1_ek_mmc/genimage.cfg @@ -0,0 +1,31 @@ +# Image for SD card boot on Microchip SAMA5D27 WLSOM1 EK +# +image boot.vfat { + vfat { + files = { + "zImage", + "at91-sama5d27_wlsom1_ek.dtb", + "boot.bin", + "u-boot.bin" + } + } + size = 16M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 1M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/atmel/sama5d2_xplained_mmc/genimage.cfg b/board/atmel/sama5d2_xplained_mmc/genimage.cfg new file mode 100644 index 00000000..3cc8ae2f --- /dev/null +++ b/board/atmel/sama5d2_xplained_mmc/genimage.cfg @@ -0,0 +1,31 @@ +# Image for SD card boot on Atmel SAMA5D2 Xplained boards +# +image boot.vfat { + vfat { + files = { + "zImage", + "at91-sama5d2_xplained.dtb", + "boot.bin", + "u-boot.bin" + } + } + size = 16M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 1M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/atmel/sama5d3_xplained_mmc/genimage.cfg b/board/atmel/sama5d3_xplained_mmc/genimage.cfg new file mode 100644 index 00000000..1b464951 --- /dev/null +++ b/board/atmel/sama5d3_xplained_mmc/genimage.cfg @@ -0,0 +1,31 @@ +# Image for SD card boot on Atmel SAMA5D3 Xplained boards +# +image boot.vfat { + vfat { + files = { + "zImage", + "at91-sama5d3_xplained.dtb", + "boot.bin", + "u-boot.bin" + } + } + size = 16M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 1M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/atmel/sama5d4_xplained_mmc/genimage.cfg b/board/atmel/sama5d4_xplained_mmc/genimage.cfg new file mode 100644 index 00000000..004f2fdd --- /dev/null +++ b/board/atmel/sama5d4_xplained_mmc/genimage.cfg @@ -0,0 +1,31 @@ +# Image for SD card boot on Atmel SAMA5D4 Xplained boards +# +image boot.vfat { + vfat { + files = { + "zImage", + "at91-sama5d4_xplained.dtb", + "boot.bin", + "u-boot.bin" + } + } + size = 16M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 1M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/avnet/s6lx9_microboard/lx9_mmu.dts b/board/avnet/s6lx9_microboard/lx9_mmu.dts new file mode 100644 index 00000000..8ffedd9f --- /dev/null +++ b/board/avnet/s6lx9_microboard/lx9_mmu.dts @@ -0,0 +1,247 @@ +/* + * Device Tree Generator version: 1.3 + * + * (C) Copyright 2007-2008 Xilinx, Inc. + * (C) Copyright 2007-2009 Michal Simek + * + * Michal SIMEK + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * CAUTION: This file is automatically generated by libgen. + * Version: Xilinx EDK 13.2 EDK_O.61xd + * + * XPS project directory: device-tree_bsp_230-orig + */ + +/dts-v1/; +/ { + #address-cells = <1>; + #size-cells = <1>; + compatible = "xlnx,microblaze"; + model = "testing"; + MCB3_LPDDR: memory@80000000 { + device_type = "memory"; + reg = < 0x80000000 0x4000000 >; + } ; + aliases { + ethernet0 = &Ethernet_MAC; + serial0 = &USB_Uart; + } ; + chosen { + bootargs = "console=ttyUL0"; + linux,stdout-path = "/axi@0/serial@40600000"; + } ; + cpus { + #address-cells = <1>; + #cpus = <0x1>; + #size-cells = <0>; + microblaze_0: cpu@0 { + clock-frequency = <66666667>; + compatible = "xlnx,microblaze-8.20.a"; + d-cache-baseaddr = <0x80000000>; + d-cache-highaddr = <0x83ffffff>; + d-cache-line-size = <0x10>; + d-cache-size = <0x2000>; + device_type = "cpu"; + i-cache-baseaddr = <0x80000000>; + i-cache-highaddr = <0x83ffffff>; + i-cache-line-size = <0x10>; + i-cache-size = <0x2000>; + model = "microblaze,8.20.a"; + reg = <0>; + timebase-frequency = <66666667>; + xlnx,addr-tag-bits = <0xd>; + xlnx,allow-dcache-wr = <0x1>; + xlnx,allow-icache-wr = <0x1>; + xlnx,area-optimized = <0x0>; + xlnx,avoid-primitives = <0x0>; + xlnx,branch-target-cache-size = <0x0>; + xlnx,cache-byte-size = <0x2000>; + xlnx,d-axi = <0x1>; + xlnx,d-lmb = <0x1>; + xlnx,d-plb = <0x0>; + xlnx,data-size = <0x20>; + xlnx,dcache-addr-tag = <0xd>; + xlnx,dcache-always-used = <0x1>; + xlnx,dcache-byte-size = <0x2000>; + xlnx,dcache-data-width = <0x0>; + xlnx,dcache-force-tag-lutram = <0x0>; + xlnx,dcache-interface = <0x0>; + xlnx,dcache-line-len = <0x4>; + xlnx,dcache-use-fsl = <0x0>; + xlnx,dcache-use-writeback = <0x0>; + xlnx,dcache-victims = <0x0>; + xlnx,debug-enabled = <0x1>; + xlnx,div-zero-exception = <0x0>; + xlnx,dynamic-bus-sizing = <0x1>; + xlnx,ecc-use-ce-exception = <0x0>; + xlnx,edge-is-positive = <0x1>; + xlnx,endianness = <0x1>; + xlnx,family = "spartan6"; + xlnx,fault-tolerant = <0x0>; + xlnx,fpu-exception = <0x0>; + xlnx,freq = <0x3f940ab>; + xlnx,fsl-data-size = <0x20>; + xlnx,fsl-exception = <0x0>; + xlnx,fsl-links = <0x0>; + xlnx,i-axi = <0x0>; + xlnx,i-lmb = <0x1>; + xlnx,i-plb = <0x0>; + xlnx,icache-always-used = <0x1>; + xlnx,icache-data-width = <0x0>; + xlnx,icache-force-tag-lutram = <0x0>; + xlnx,icache-interface = <0x0>; + xlnx,icache-line-len = <0x4>; + xlnx,icache-streams = <0x0>; + xlnx,icache-use-fsl = <0x0>; + xlnx,icache-victims = <0x0>; + xlnx,ill-opcode-exception = <0x0>; + xlnx,instance = "microblaze_0"; + xlnx,interconnect = <0x2>; + xlnx,interconnect-m-axi-dc-aw-register = <0x0>; + xlnx,interconnect-m-axi-dc-read-issuing = <0x2>; + xlnx,interconnect-m-axi-dc-w-register = <0x0>; + xlnx,interconnect-m-axi-dc-write-issuing = <0x20>; + xlnx,interconnect-m-axi-dp-read-issuing = <0x1>; + xlnx,interconnect-m-axi-dp-write-issuing = <0x1>; + xlnx,interconnect-m-axi-ic-read-issuing = <0x2>; + xlnx,interconnect-m-axi-ip-read-issuing = <0x1>; + xlnx,interrupt-is-edge = <0x0>; + xlnx,lockstep-slave = <0x0>; + xlnx,mmu-dtlb-size = <0x1>; + xlnx,mmu-itlb-size = <0x1>; + xlnx,mmu-privileged-instr = <0x0>; + xlnx,mmu-tlb-access = <0x3>; + xlnx,mmu-zones = <0x2>; + xlnx,number-of-pc-brk = <0x1>; + xlnx,number-of-rd-addr-brk = <0x0>; + xlnx,number-of-wr-addr-brk = <0x0>; + xlnx,opcode-0x0-illegal = <0x0>; + xlnx,optimization = <0x0>; + xlnx,pvr = <0x0>; + xlnx,pvr-user1 = <0x0>; + xlnx,pvr-user2 = <0x0>; + xlnx,reset-msr = <0x0>; + xlnx,sco = <0x0>; + xlnx,stream-interconnect = <0x0>; + xlnx,unaligned-exceptions = <0x0>; + xlnx,use-barrel = <0x1>; + xlnx,use-branch-target-cache = <0x0>; + xlnx,use-dcache = <0x1>; + xlnx,use-div = <0x0>; + xlnx,use-ext-brk = <0x1>; + xlnx,use-ext-nm-brk = <0x1>; + xlnx,use-extended-fsl-instr = <0x0>; + xlnx,use-fpu = <0x0>; + xlnx,use-hw-mul = <0x1>; + xlnx,use-icache = <0x1>; + xlnx,use-interrupt = <0x1>; + xlnx,use-mmu = <0x3>; + xlnx,use-msr-instr = <0x1>; + xlnx,use-pcmp-instr = <0x0>; + xlnx,use-stack-protection = <0x0>; + } ; + } ; + axi4lite_0: axi@0 { + #address-cells = <1>; + #size-cells = <1>; + compatible = "xlnx,axi-interconnect-1.03.a", "simple-bus"; + ranges ; + Ethernet_MAC: ethernet@40e00000 { + compatible = "xlnx,axi-ethernetlite-1.00.a", "xlnx,xps-ethernetlite-1.00.a"; + device_type = "network"; + interrupt-parent = <µblaze_0_intc>; + interrupts = < 2 0 >; + local-mac-address = [ 00 0a 35 aa de 00 ]; +// phy-handle = <&phy0>; + reg = < 0x40e00000 0x10000 >; + xlnx,duplex = <0x1>; + xlnx,family = "spartan6"; + xlnx,include-global-buffers = <0x0>; + xlnx,include-internal-loopback = <0x0>; + xlnx,include-mdio = <0x1>; + xlnx,include-phy-constraints = <0x1>; + xlnx,interconnect-s-axi-read-acceptance = <0x1>; + xlnx,interconnect-s-axi-write-acceptance = <0x1>; + xlnx,rx-ping-pong = <0x0>; + xlnx,s-axi-aclk-period-ps = <0x3a98>; + xlnx,s-axi-id-width = <0x1>; + xlnx,s-axi-supports-narrow-burst = <0x0>; + xlnx,tx-ping-pong = <0x0>; +/* + mdio { + #address-cells = <1>; + #size-cells = <0>; + phy0: phy@7 { + compatible = "marvell,88e1111"; + device_type = "ethernet-phy"; + reg = <7>; + } ; + } ; +*/ + } ; + SPI_FLASH: spi@40a00000 { + compatible = "xlnx,axi-spi-1.01.a", "xlnx,xps-spi-2.00.a"; + interrupt-parent = <µblaze_0_intc>; + interrupts = < 1 2 >; + reg = < 0x40a00000 0x10000 >; + xlnx,family = "spartan6"; + xlnx,fifo-exist = <0x1>; + xlnx,num-ss-bits = <0x1>; + xlnx,num-transfer-bits = <0x8>; + xlnx,sck-ratio = <0x4>; + } ; + USB_Uart: serial@40600000 { + clock-frequency = <66666667>; + compatible = "xlnx,axi-uartlite-1.02.a", "xlnx,xps-uartlite-1.00.a"; + current-speed = <115200>; + device_type = "serial"; + interrupt-parent = <µblaze_0_intc>; + interrupts = < 3 0 >; + port-number = <0>; + reg = < 0x40600000 0x10000 >; + xlnx,baudrate = <0x1c200>; + xlnx,data-bits = <0x8>; + xlnx,family = "spartan6"; + xlnx,odd-parity = <0x1>; + xlnx,s-axi-aclk-freq-hz = <0x3f940ab>; + xlnx,use-parity = <0x0>; + } ; + microblaze_0_intc: interrupt-controller@41200000 { + #interrupt-cells = <0x2>; + compatible = "xlnx,axi-intc-1.01.a", "xlnx,xps-intc-1.00.a"; + interrupt-controller ; + reg = < 0x41200000 0x10000 >; + xlnx,kind-of-intr = <0xc>; + xlnx,num-intr-inputs = <0x4>; + } ; + system_timer: timer@41c00000 { + clock-frequency = <66666667>; + compatible = "xlnx,axi-timer-1.02.a", "xlnx,xps-timer-1.00.a"; + interrupt-parent = <µblaze_0_intc>; + interrupts = < 0 2 >; + reg = < 0x41c00000 0x10000 >; + xlnx,count-width = <0x20>; + xlnx,family = "spartan6"; + xlnx,gen0-assert = <0x1>; + xlnx,gen1-assert = <0x1>; + xlnx,one-timer-only = <0x0>; + xlnx,trig0-assert = <0x1>; + xlnx,trig1-assert = <0x1>; + } ; + } ; +} ; diff --git a/board/avnet/s6lx9_microboard/lx9_mmu_defconfig b/board/avnet/s6lx9_microboard/lx9_mmu_defconfig new file mode 100644 index 00000000..5d01ca00 --- /dev/null +++ b/board/avnet/s6lx9_microboard/lx9_mmu_defconfig @@ -0,0 +1,68 @@ +CONFIG_EXPERIMENTAL=y +CONFIG_SYSVIPC=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="rootfs.cpio" +CONFIG_INITRAMFS_COMPRESSION_GZIP=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_EXPERT=y +CONFIG_KALLSYMS_ALL=y +CONFIG_KALLSYMS_EXTRA_PASS=y +# CONFIG_HOTPLUG is not set +# CONFIG_BASE_FULL is not set +# CONFIG_FUTEX is not set +# CONFIG_EPOLL is not set +# CONFIG_SIGNALFD is not set +# CONFIG_SHMEM is not set +CONFIG_SLAB=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_BLK_DEV_BSG is not set +# CONFIG_OPT_LIB_ASM is not set +CONFIG_KERNEL_BASE_ADDR=0x80000000 +CONFIG_XILINX_MICROBLAZE0_FAMILY="spartan6" +CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR=1 +# CONFIG_XILINX_MICROBLAZE0_USE_PCMP_INSTR is not set +CONFIG_XILINX_MICROBLAZE0_USE_BARREL=1 +CONFIG_XILINX_MICROBLAZE0_USE_HW_MUL=1 +CONFIG_XILINX_MICROBLAZE0_HW_VER="8.20.a" +CONFIG_HZ_100=y +CONFIG_MMU=y +CONFIG_CMDLINE_BOOL=y +CONFIG_CMDLINE_FORCE=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_INET_LRO is not set +# CONFIG_IPV6 is not set +CONFIG_PROC_DEVICETREE=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_NETDEVICES=y +CONFIG_NET_ETHERNET=y +CONFIG_XILINX_EMACLITE=y +# CONFIG_INPUT is not set +# CONFIG_SERIO is not set +# CONFIG_VT is not set +CONFIG_SERIAL_UARTLITE=y +CONFIG_SERIAL_UARTLITE_CONSOLE=y +# CONFIG_HW_RANDOM is not set +# CONFIG_HWMON is not set +# CONFIG_USB_SUPPORT is not set +CONFIG_EXT2_FS=y +# CONFIG_DNOTIFY is not set +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +CONFIG_CIFS=y +CONFIG_CIFS_STATS=y +CONFIG_CIFS_STATS2=y +CONFIG_PARTITION_ADVANCED=y +CONFIG_DEBUG_KERNEL=y +CONFIG_DETECT_HUNG_TASK=y +CONFIG_DEBUG_SLAB=y +CONFIG_DEBUG_SPINLOCK=y +CONFIG_DEBUG_INFO=y +CONFIG_EARLY_PRINTK=y +# CONFIG_CRYPTO_ANSI_CPRNG is not set diff --git a/board/avnet/s6lx9_microboard/readme.txt b/board/avnet/s6lx9_microboard/readme.txt new file mode 100644 index 00000000..3cb2ce98 --- /dev/null +++ b/board/avnet/s6lx9_microboard/readme.txt @@ -0,0 +1,70 @@ +This is the buildroot board support for the Avnet Spartan6 LX9 MicroBoard. + +The Avnet S6LX9 Microboard is a small USB-Stick sized module containing +a Spartan6 FPGA capable of running the Microblaze softcore processor +together with RAM and FLASH memory. + +The board can be bought from Avnet (avnet.com) or from Trenz Electronic +(www.trenz-electronic.de) for a low price. + +To run the Linux built with buildroot you have to install the FPGA bitfile +and u-boot as described in the tutorial AvtS6LX9MicroBoard_SW302_PetaLinux +available on http://www.em.avnet.com/s6microboard + +On this site also is a forum containing information on how to build your own +Microblaze processor for the Microboard. + +The image file (default name is simpleImage.lx9_mmu.ub) has to be copied +to your tftp folder (often /tftpboot/) or can be programmed into the +board's SPI flash. + +Sample session: + +$ make s6lx9_microboard_defconfig +$ make +$ cp build/linux-/arch/microblaze/boot/simpleImage.lx9_mmu.ub /tftpboot/br12.2a.ub +$ minicom + + + Icache:ON + Dcache:ON + U-Boot Start:0x83f00000 +SF: Got idcode 20 ba 18 10 01 +*** Warning - bad CRC, using default environment + +Net: Xilinx_Emaclite +MAC: 00:0a:35:00:63:37 +U-BOOT for Avnet-LX9-Microboard-AXI-tiny-13.1 + +BOOTP broadcast 1 +DHCP client bound to address 192.168.11.122 +Hit any key to stop autoboot: 0 +U-Boot-PetaLinux> tftp br12.2a.ub +Using Xilinx_Emaclite device +TFTP from server 192.168.11.10; our IP address is 192.168.11.122 +Filename 'br12.2a.ub'. +Load address: 0x80002000 +Loading: ################################################################# + ################################################################# + ################################################################# + ################################################################# + ################################################################# + ############################## +done +Bytes transferred = 5207724 (4f76ac hex) +U-Boot-PetaLinux> bootm +## Booting kernel from Legacy Image at 80002000 ... + Image Name: Linux-3.1.0 + Image Type: MicroBlaze Linux Kernel Image (uncompressed) + Data Size: 5207660 Bytes = 5 MB + Load Address: 80000000 + Entry Point: 80000000 + Verifying Checksum ... OK + Loading Kernel Image ... OK +OK +## Transferring control to Linux (at address 80000000), 0x80000000 ramdisk 0x00000000, FDT 0x00000000... +Early console on uartlite at 0x40600000 +..... boot log skipped + +Welcome to Microblaze Buildroot +Microblaze login: diff --git a/board/bananapi/bananapi-m1/boot.cmd b/board/bananapi/bananapi-m1/boot.cmd new file mode 100644 index 00000000..0cf6f4d6 --- /dev/null +++ b/board/bananapi/bananapi-m1/boot.cmd @@ -0,0 +1,7 @@ +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +mmc dev 0 +fatload mmc 0 $kernel_addr_r zImage +fatload mmc 0 $fdt_addr_r sun7i-a20-bananapi.dtb + +bootz $kernel_addr_r - $fdt_addr_r diff --git a/board/bananapi/bananapi-m1/genimage.cfg b/board/bananapi/bananapi-m1/genimage.cfg new file mode 100644 index 00000000..e2e13116 --- /dev/null +++ b/board/bananapi/bananapi-m1/genimage.cfg @@ -0,0 +1,33 @@ +image boot.vfat { + vfat { + files = { + "zImage", + "sun7i-a20-bananapi.dtb", + "boot.scr" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/bananapi/bananapi-m1/readme.txt b/board/bananapi/bananapi-m1/readme.txt new file mode 100644 index 00000000..382ba63c --- /dev/null +++ b/board/bananapi/bananapi-m1/readme.txt @@ -0,0 +1,37 @@ +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the Bananapi M1. With the current configuration +it will bring-up the board, and allow access through the serial console. + +Bananapi M1 link: +http://www.banana-pi.org/m1.html + +Wiki link: +https://openedev.amarulasolutions.com/display/ODWIKI/Bananapi+M1 + +This configuration uses U-Boot mainline and kernel mainline. + +How to build +============ + + $ make bananapi_m1_defconfig + $ make + +Note: you will need access to the internet to download the required +sources. + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + $ sudo sync + +Insert the micro SDcard in your Bananapi M1 and power it up. The console +is on the serial line, 115200 8N1. diff --git a/board/bananapi/bananapi-m2-ultra/boot.cmd b/board/bananapi/bananapi-m2-ultra/boot.cmd new file mode 100644 index 00000000..9c24eabf --- /dev/null +++ b/board/bananapi/bananapi-m2-ultra/boot.cmd @@ -0,0 +1,7 @@ +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +mmc dev 0 +fatload mmc 0 $kernel_addr_r zImage +fatload mmc 0 $fdt_addr_r sun8i-r40-bananapi-m2-ultra.dtb + +bootz $kernel_addr_r - $fdt_addr_r diff --git a/board/bananapi/bananapi-m2-ultra/genimage.cfg b/board/bananapi/bananapi-m2-ultra/genimage.cfg new file mode 100644 index 00000000..675253af --- /dev/null +++ b/board/bananapi/bananapi-m2-ultra/genimage.cfg @@ -0,0 +1,33 @@ +image boot.vfat { + vfat { + files = { + "zImage", + "sun8i-r40-bananapi-m2-ultra.dtb", + "boot.scr" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/bananapi/bananapi-m2-ultra/readme.txt b/board/bananapi/bananapi-m2-ultra/readme.txt new file mode 100644 index 00000000..c3de84f5 --- /dev/null +++ b/board/bananapi/bananapi-m2-ultra/readme.txt @@ -0,0 +1,35 @@ +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the Bananapi M2 ULtra. With the current +configuration it will bring-up the board, and allow access through the +serial console. + +Bananapi M2 Ultra link: +http://www.banana-pi.org/m2u.html + +This configuration uses U-Boot mainline and kernel mainline. + +How to build +============ + + $ make bananapi_m2_ultra_defconfig + $ make + +Note: you will need access to the internet to download the required +sources. + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + $ sudo sync + +Insert the micro SDcard in your Bananapi M2 Ultra and power it up. The console +is on the serial line, 115200 8N1. diff --git a/board/bananapi/bananapi-m2-zero/boot.cmd b/board/bananapi/bananapi-m2-zero/boot.cmd new file mode 100644 index 00000000..08145093 --- /dev/null +++ b/board/bananapi/bananapi-m2-zero/boot.cmd @@ -0,0 +1,7 @@ +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +mmc dev 0 +fatload mmc 0 $kernel_addr_r zImage +fatload mmc 0 $fdt_addr_r sun8i-h2-plus-bananapi-m2-zero.dtb + +bootz $kernel_addr_r - $fdt_addr_r diff --git a/board/bananapi/bananapi-m2-zero/genimage.cfg b/board/bananapi/bananapi-m2-zero/genimage.cfg new file mode 100644 index 00000000..e41f1f93 --- /dev/null +++ b/board/bananapi/bananapi-m2-zero/genimage.cfg @@ -0,0 +1,33 @@ +image boot.vfat { + vfat { + files = { + "zImage", + "sun8i-h2-plus-bananapi-m2-zero.dtb", + "boot.scr" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/bananapi/bananapi-m2-zero/readme.txt b/board/bananapi/bananapi-m2-zero/readme.txt new file mode 100644 index 00000000..9edd477f --- /dev/null +++ b/board/bananapi/bananapi-m2-zero/readme.txt @@ -0,0 +1,34 @@ +Intro +===== + +This default configuration will allow you to start experimenting with the +Buildroot environment for the Bananapi M2 Zero. With the current configuration +it will bring-up the board, and allow access through the serial console. + +Bananapi M2 Zero link: +http://www.banana-pi.org/m2z.html + +This configuration uses U-Boot mainline and kernel mainline. + +How to build +============ + + $ make bananapi_m2_zero_defconfig + $ make + +Note: you will need access to the internet to download the required +sources. + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + $ sync + +Insert the micro SDcard in your Bananapi M2 Zero and power it up. The console +is on the Debug UART on the CON3 header, with serial settings 115200 8N1. diff --git a/board/bananapi/bananapi-m64/boot.cmd b/board/bananapi/bananapi-m64/boot.cmd new file mode 100644 index 00000000..d35c9b0b --- /dev/null +++ b/board/bananapi/bananapi-m64/boot.cmd @@ -0,0 +1,6 @@ +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +fatload mmc 0 $kernel_addr_r Image +fatload mmc 0 $fdt_addr_r sun50i-a64-bananapi-m64.dtb + +booti $kernel_addr_r - $fdt_addr_r diff --git a/board/bananapi/bananapi-m64/genimage.cfg b/board/bananapi/bananapi-m64/genimage.cfg new file mode 100644 index 00000000..9730d8fa --- /dev/null +++ b/board/bananapi/bananapi-m64/genimage.cfg @@ -0,0 +1,39 @@ +image boot.vfat { + vfat { + files = { + "Image", + "sun50i-a64-bananapi-m64.dtb", + "boot.scr" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition spl { + in-partition-table = "no" + image = "sunxi-spl.bin" + offset = 8192 + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot.itb" + offset = 40K + size = 1M # 1MB - 40K + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/bananapi/bananapi-m64/readme.txt b/board/bananapi/bananapi-m64/readme.txt new file mode 100644 index 00000000..0dec3e52 --- /dev/null +++ b/board/bananapi/bananapi-m64/readme.txt @@ -0,0 +1,37 @@ +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the Bananapi M64. With the current configuration +it will bring-up the board, and allow access through the serial console. + +Bananapi M64 link: +http://www.banana-pi.org/m64.html + +Wiki link: +https://openedev.amarulasolutions.com/display/ODWIKI/Bananapi+M64 + +This configuration uses U-Boot mainline and kernel mainline. + +How to build +============ + + $ make bananapi_m64_defconfig + $ make + +Note: you will need access to the internet to download the required +sources. + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + $ sudo sync + +Insert the micro SDcard in your Bananapi M64 and power it up. The console +is on the serial line, 115200 8N1. diff --git a/board/beagleboardx15/genimage.cfg b/board/beagleboardx15/genimage.cfg new file mode 100644 index 00000000..d27eff60 --- /dev/null +++ b/board/beagleboardx15/genimage.cfg @@ -0,0 +1,26 @@ +image boot.vfat { + vfat { + files = { + "MLO", + "u-boot.img" + } + } + size = 4M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/beagleboardx15/readme.txt b/board/beagleboardx15/readme.txt new file mode 100644 index 00000000..5af2c914 --- /dev/null +++ b/board/beagleboardx15/readme.txt @@ -0,0 +1,49 @@ +BeagleBoard X15 + +Intro +===== +This config currently supports the beagleboard x15, +and generates a barebone image. + +The image must be flashed to a SD card to be used. + +How to build it +=============== + + $ make beagleboardx15_defconfig + +Then you can edit the build options using + + $ make menuconfig + +Compile all and build a sdcard image: + + $ make + +Result of the build +------------------- + +After building, you should get a tree like this: + + output/images/ + +-- am57xx-beagle-x15.dtb + +-- am57xx-beagle-x15-revb1.dtb + +-- boot.vfat + +-- MLO + +--rootfs.ext2 + +-- rootfs.ext4 + +-- rootfs.tar + +-- sdcard.img + +-- u-boot.img + +-- u-boot-spl.bin + +-- zImage + +How to write the microSD card +============================= + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX diff --git a/board/beaglebone/genimage.cfg b/board/beaglebone/genimage.cfg new file mode 100644 index 00000000..cfc1039e --- /dev/null +++ b/board/beaglebone/genimage.cfg @@ -0,0 +1,33 @@ +image boot.vfat { + vfat { + files = { + "MLO", + "u-boot.img", + "zImage", + "uEnv.txt", + "am335x-evm.dtb", + "am335x-evmsk.dtb", + "am335x-bone.dtb", + "am335x-boneblack.dtb", + "am335x-bonegreen.dtb", + } + } + size = 16M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/beaglebone/linux-sgx.fragment b/board/beaglebone/linux-sgx.fragment new file mode 100644 index 00000000..58d46f58 --- /dev/null +++ b/board/beaglebone/linux-sgx.fragment @@ -0,0 +1,13 @@ +CONFIG_PREEMPT=y +CONFIG_PREEMPT_COUNT=y +CONFIG_OMAP2_DSS_INIT=y +CONFIG_OMAP_DSS_BASE=y +CONFIG_OMAP2_DSS=y +CONFIG_OMAP2_DSS_DPI=y +CONFIG_DRM_OMAP=y +CONFIG_DRM_OMAP_NUM_CRTCS=2 +CONFIG_DRM_OMAP_WB_M2M=y +CONFIG_DRM_TILCDC=y +CONFIG_DRM_I2C_NXP_TDA998X=y +CONFIG_DRM=y +CONFIG_DRM_LEGACY=y diff --git a/board/beaglebone/patches/linux/0001-keep-jtag-clock-alive-for-debugger.patch b/board/beaglebone/patches/linux/0001-keep-jtag-clock-alive-for-debugger.patch new file mode 100644 index 00000000..8e36d9ab --- /dev/null +++ b/board/beaglebone/patches/linux/0001-keep-jtag-clock-alive-for-debugger.patch @@ -0,0 +1,16 @@ +This patch keeps the debugSS clock alive, it clocks the JTAG macro and enables +access to the SoC via JTAG after the kernel booted. + +Signed-off-by: Lothar Felten +--- +diff -Naur linux-orig/arch/arm/mach-omap2/omap_hwmod_33xx_data.c linux-52c4aa7cdb93d61f8008f380135beaf7b8fa6593/arch/arm/mach-omap2/omap_hwmod_33xx_data.c +--- linux-orig/arch/arm/mach-omap2/omap_hwmod_33xx_data.c 2015-10-02 17:30:56.000000000 +0200 ++++ linux-52c4aa7cdb93d61f8008f380135beaf7b8fa6593/arch/arm/mach-omap2/omap_hwmod_33xx_data.c 2016-08-15 11:28:55.017617612 +0200 +@@ -208,6 +208,7 @@ + .name = "debugss", + .class = &am33xx_debugss_hwmod_class, + .clkdm_name = "l3_aon_clkdm", ++ .flags = (HWMOD_INIT_NO_IDLE|HWMOD_INIT_NO_RESET), /* keep debugSS clock alive for JTAG */ + .main_clk = "trace_clk_div_ck", + .prcm = { + .omap4 = { diff --git a/board/beaglebone/post-build.sh b/board/beaglebone/post-build.sh new file mode 100755 index 00000000..ffdd1913 --- /dev/null +++ b/board/beaglebone/post-build.sh @@ -0,0 +1,4 @@ +#!/bin/sh +BOARD_DIR="$(dirname $0)" + +cp $BOARD_DIR/uEnv.txt $BINARIES_DIR/uEnv.txt diff --git a/board/beaglebone/readme.txt b/board/beaglebone/readme.txt new file mode 100644 index 00000000..231e977a --- /dev/null +++ b/board/beaglebone/readme.txt @@ -0,0 +1,62 @@ +CircuitCo BeagleBone +Texas Instuments AM335x Evaluation Module (TMDXEVM3358) + +Description +=========== + +This configuration will build a complete image for the beaglebone and +the TI AM335x-EVM, the board type is identified by the on-board +EEPROM. The configuration is based on the +ti-processor-sdk-06.01.00.08. Device tree blobs for beaglebone +variants and the evm-sk are built too. + +For Qt5 support support use the beaglebone_qt5_defconfig. + +How to build it +=============== + +Select the default configuration for the target: +$ make beaglebone_defconfig + +Optional: modify the configuration: +$ make menuconfig + +Build: +$ make + +Result of the build +=================== +output/images/ ++-- am335x-boneblack.dtb ++-- am335x-bone.dtb ++-- am335x-evm.dtb ++-- am335x-evmsk.dtb ++-- boot.vfat ++-- MLO ++-- rootfs.ext2 ++-- rootfs.tar ++-- sdcard.img ++-- u-boot.img ++-- uEnv.txt ++-- zImage + +To copy the image file to the sdcard use dd: +$ dd if=output/images/sdcard.img of=/dev/XXX + + +Running Qt5 hellowindow opengl demo: +=================== +# export QT_QPA_EGLFS_KMS_CONFIG=/etc/qt5/eglfs_kms_cfg.json +# export QT_QPA_PLATFORM=eglfs +# export QT_QPA_EGLFS_INTEGRATION=none +# /usr/lib/qt/examples/opengl/hellowindow/hellowindow + + +Tested hardware +=============== +am335x-evm (rev. 1.1A) +beagleboneblack (rev. A5A) +beaglebone (rev. A6) + +2020, Adam Duskett +2016, Lothar Felten diff --git a/board/beaglebone/rootfs_overlay/etc/qt5/eglfs_kms_cfg.json b/board/beaglebone/rootfs_overlay/etc/qt5/eglfs_kms_cfg.json new file mode 100644 index 00000000..76f5e7d3 --- /dev/null +++ b/board/beaglebone/rootfs_overlay/etc/qt5/eglfs_kms_cfg.json @@ -0,0 +1,15 @@ +{ + "device": "/dev/dri/card0", + "hwcursor": false, + "pbuffers": true, + "outputs": [ + { + "name": "VGA1", + "mode": "off" + }, + { + "name": "HDMI1", + "mode": "1024x768" + } + ] +} diff --git a/board/beaglebone/uEnv.txt b/board/beaglebone/uEnv.txt new file mode 100644 index 00000000..8fce54d8 --- /dev/null +++ b/board/beaglebone/uEnv.txt @@ -0,0 +1,11 @@ +bootpart=0:1 +devtype=mmc +bootdir= +bootfile=zImage +bootpartition=mmcblk0p2 +console=ttyS0,115200n8 +loadaddr=0x82000000 +fdtaddr=0x88000000 +set_mmc1=if test $board_name = A33515BB; then setenv bootpartition mmcblk1p2; fi +set_bootargs=setenv bootargs console=${console} root=/dev/${bootpartition} rw rootfstype=ext4 rootwait +uenvcmd=run set_mmc1; run set_bootargs;run loadimage;run loadfdt;printenv bootargs;bootz ${loadaddr} - ${fdtaddr} diff --git a/board/beagleboneai/genimage.cfg b/board/beagleboneai/genimage.cfg new file mode 100644 index 00000000..0bdfa64d --- /dev/null +++ b/board/beagleboneai/genimage.cfg @@ -0,0 +1,29 @@ +image boot.vfat { + vfat { + files = { + "MLO", + "u-boot.img", + "zImage", + "am5729-beagleboneai.dtb", + "uEnv.txt" + } + } + size = 16M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/beagleboneai/patches/uboot/0001-BeagleBone-AI-support.patch b/board/beagleboneai/patches/uboot/0001-BeagleBone-AI-support.patch new file mode 100644 index 00000000..2d9accf9 --- /dev/null +++ b/board/beagleboneai/patches/uboot/0001-BeagleBone-AI-support.patch @@ -0,0 +1,1783 @@ +From 989c27c791a453550ff6c1440b41c55c6e70615d Mon Sep 17 00:00:00 2001 +From: Jason Kridner +Date: Wed, 27 Mar 2019 14:06:24 -0400 +Subject: [PATCH] BeagleBone AI support + +Patch from: +https://github.com/beagleboard/beaglebone-ai/blob/master/SW/buildroot/local/patches/uboot/0001-BeagleBone-AI-support.patch + +Signed-off-by: Peter Korsgaard +--- + arch/arm/dts/Makefile | 1 + + arch/arm/dts/am5729-beagleboneai.dts | 494 +++++++++++++++++++++++++++ + arch/arm/mach-omap2/omap5/hw_data.c | 3 +- + board/ti/am57xx/board.c | 134 +++++++- + board/ti/am57xx/mux_data.h | 390 +++++++++++++++++++++ + configs/am57xx_evm_defconfig | 10 +- + include/configs/am57xx_evm.h | 2 +- + include/configs/ti_armv7_common.h | 357 +++++++++++++++++++ + include/configs/ti_omap5_common.h | 5 + + include/environment/ti/boot.h | 49 +-- + include/environment/ti/mmc.h | 45 ++- + 11 files changed, 1447 insertions(+), 43 deletions(-) + create mode 100644 arch/arm/dts/am5729-beagleboneai.dts + +diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile +index 2a040b20a5..6771d457a4 100644 +--- a/arch/arm/dts/Makefile ++++ b/arch/arm/dts/Makefile +@@ -232,6 +232,7 @@ dtb-$(CONFIG_TARGET_DRA7XX_EVM) += dra72-evm.dtb dra7-evm.dtb \ + dtb-$(CONFIG_TARGET_AM57XX_EVM) += am57xx-beagle-x15.dtb \ + am57xx-beagle-x15-revb1.dtb \ + am57xx-beagle-x15-revc.dtb \ ++ am5729-beagleboneai.dtb \ + am574x-idk.dtb \ + am572x-idk.dtb \ + am571x-idk.dtb +diff --git a/arch/arm/dts/am5729-beagleboneai.dts b/arch/arm/dts/am5729-beagleboneai.dts +new file mode 100644 +index 0000000000..d1afe55751 +--- /dev/null ++++ b/arch/arm/dts/am5729-beagleboneai.dts +@@ -0,0 +1,494 @@ ++/* ++ * Copyright (C) 2014-2018 Texas Instruments Incorporated - http://www.ti.com/ ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++/dts-v1/; ++ ++#include "dra74x.dtsi" ++#include "am57xx-commercial-grade.dtsi" ++#include "dra74x-mmc-iodelay.dtsi" ++#include ++#include ++#include ++ ++/ { ++ model = "BeagleBoard.org BeagleBone AI"; ++ compatible = "beagleboard.org,am57xx-beagleboneai", "ti,am5728", "ti,dra742", "ti,dra74", "ti,dra7"; ++ ++ chosen { ++ stdout-path = &uart1; ++ }; ++ ++ memory@0 { ++ device_type = "memory"; ++ reg = <0x0 0x80000000 0x0 0x40000000>; ++ }; ++ ++ vdd_5v: fixedregulator-vdd_5v { ++ compatible = "regulator-fixed"; ++ regulator-name = "vdd_5v"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ regulator-always-on; ++ regulator-boot-on; ++ }; ++ ++ vtt_fixed: fixedregulator-vtt { ++ /* TPS51200 */ ++ compatible = "regulator-fixed"; ++ regulator-name = "vtt_fixed"; ++ vin-supply = <&vdd_3v3>; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-always-on; ++ regulator-boot-on; ++ }; ++ ++ src_clk_x1: src_clk_x1 { ++ #clock-cells = <0>; ++ compatible = "fixed-clock"; ++ clock-frequency = <20000000>; ++ }; ++ ++ src_clk_osc1: src_clk_osc1 { ++ #clock-cells = <0>; ++ compatible = "fixed-clock"; ++ clock-frequency = <24000000>; ++ }; ++ ++ src_clk_osc4: src_clk_osc4 { ++ #clock-cells = <0>; ++ compatible = "fixed-clock"; ++ clock-frequency = <24000000>; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ led0 { ++ label = "beaglebone:green:usr0"; ++ gpios = <&gpio3 14 GPIO_ACTIVE_HIGH>; ++ linux,default-trigger = "heartbeat"; ++ default-state = "off"; ++ }; ++ ++ led1 { ++ label = "beaglebone:green:usr1"; ++ gpios = <&gpio3 15 GPIO_ACTIVE_HIGH>; ++ linux,default-trigger = "mmc0"; ++ default-state = "off"; ++ }; ++ ++ led2 { ++ label = "beaglebone:green:usr2"; ++ gpios = <&gpio5 5 GPIO_ACTIVE_HIGH>; ++ linux,default-trigger = "cpu"; ++ default-state = "off"; ++ }; ++ ++ led3 { ++ label = "beaglebone:green:usr3"; ++ gpios = <&gpio3 17 GPIO_ACTIVE_HIGH>; ++ linux,default-trigger = "mmc1"; ++ default-state = "off"; ++ }; ++ }; ++}; ++ ++&i2c1 { ++ status = "okay"; ++ clock-frequency = <400000>; ++ ++ tps659038: tps659038@58 { ++ compatible = "ti,tps659038"; ++ reg = <0x58>; ++ interrupts-extended = <&gpio6 16 IRQ_TYPE_LEVEL_HIGH ++ &dra7_pmx_core 0x418>; ++ ++ #interrupt-cells = <2>; ++ interrupt-controller; ++ ++ ti,system-power-controller; ++ ti,palmas-override-powerhold; ++ ++ tps659038_pmic { ++ compatible = "ti,tps659038-pmic"; ++ ++ smps12-in-supply = <&vdd_5v>; ++ smps3-in-supply = <&vdd_5v>; ++ smps45-in-supply = <&vdd_5v>; ++ smps6-in-supply = <&vdd_5v>; ++ smps7-in-supply = <&vdd_5v>; ++ mps3-in-supply = <&vdd_5v>; ++ smps8-in-supply = <&vdd_5v>; ++ smps9-in-supply = <&vdd_5v>; ++ ldo1-in-supply = <&vdd_5v>; ++ ldo2-in-supply = <&vdd_5v>; ++ ldo3-in-supply = <&vdd_5v>; ++ ldo4-in-supply = <&vdd_5v>; ++ ldo9-in-supply = <&vdd_5v>; ++ ldoln-in-supply = <&vdd_5v>; ++ ldousb-in-supply = <&vdd_5v>; ++ ldortc-in-supply = <&vdd_5v>; ++ ++ regulators { ++ vdd_mpu: smps12 { ++ /* VDD_MPU */ ++ regulator-name = "smps12"; ++ regulator-min-microvolt = <850000>; ++ regulator-max-microvolt = <1250000>; ++ regulator-always-on; ++ regulator-boot-on; ++ }; ++ ++ vdd_ddr: smps3 { ++ /* VDD_DDR EMIF1 EMIF2 */ ++ regulator-name = "smps3"; ++ regulator-min-microvolt = <1350000>; ++ regulator-max-microvolt = <1350000>; ++ regulator-always-on; ++ regulator-boot-on; ++ }; ++ ++ vdd_dspeve: smps45 { ++ /* VDD_DSPEVE on AM572 */ ++ /* VDD_IVA + VDD_DSP on AM571 */ ++ regulator-name = "smps45"; ++ regulator-min-microvolt = <850000>; ++ regulator-max-microvolt = <1250000>; ++ regulator-always-on; ++ regulator-boot-on; ++ }; ++ ++ vdd_gpu: smps6 { ++ /* VDD_GPU */ ++ regulator-name = "smps6"; ++ regulator-min-microvolt = <850000>; ++ regulator-max-microvolt = <1250000>; ++ regulator-always-on; ++ regulator-boot-on; ++ }; ++ ++ vdd_core: smps7 { ++ /* VDD_CORE */ ++ regulator-name = "smps7"; ++ regulator-min-microvolt = <850000>; /*** 1.15V */ ++ regulator-max-microvolt = <1150000>; ++ regulator-always-on; ++ regulator-boot-on; ++ }; ++ ++ vdd_iva: smps8 { ++ /* 5728 - VDD_IVAHD */ /*** 1.06V */ ++ /* 5718 - N.C. test point */ ++ regulator-name = "smps8"; ++ }; ++ ++ vdd_3v3: smps9 { ++ /* VDD_3V3 */ ++ regulator-name = "smps9"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-always-on; ++ regulator-boot-on; ++ }; ++ ++ vdd_sd: ldo1 { ++ /* VDDSHV8 - VSDMMC */ ++ regulator-name = "ldo1"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ vdd_1v8: ldo2 { ++ /* VDDSH18V */ ++ regulator-name = "ldo2"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-always-on; ++ regulator-boot-on; ++ }; ++ ++ vdd_1v8_phy_ldo3: ldo3 { ++ /* R1.3a 572x V1_8PHY_LDO3: USB, SATA */ ++ regulator-name = "ldo3"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-always-on; ++ regulator-boot-on; ++ }; ++ ++ vdd_1v8_phy_ldo4: ldo4 { ++ /* R1.3a 572x V1_8PHY_LDO4: PCIE, HDMI*/ ++ regulator-name = "ldo4"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-always-on; ++ regulator-boot-on; ++ }; ++ ++ /* LDO5-8 unused */ ++ ++ vdd_rtc: ldo9 { ++ /* VDD_RTC */ ++ regulator-name = "ldo9"; ++ regulator-min-microvolt = <840000>; ++ regulator-max-microvolt = <1160000>; ++ regulator-always-on; ++ regulator-boot-on; ++ }; ++ ++ vdd_1v8_pll: ldoln { ++ /* VDDA_1V8_PLL */ ++ regulator-name = "ldoln"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-always-on; ++ regulator-boot-on; ++ }; ++ ++ ldousb_reg: ldousb { ++ /* VDDA_3V_USB: VDDA_USBHS33 */ ++ regulator-name = "ldousb"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-always-on; ++ regulator-boot-on; ++ }; ++ ++ ldortc_reg: ldortc { ++ /* VDDA_RTC */ ++ regulator-name = "ldortc"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-always-on; ++ regulator-boot-on; ++ }; ++ ++ regen1: regen1 { ++ /* VDD_3V3_ON */ ++ regulator-name = "regen1"; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ regen2: regen2 { ++ /* Needed for PMIC internal resource */ ++ regulator-name = "regen2"; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ }; ++ }; ++ ++ tps659038_rtc: tps659038_rtc { ++ compatible = "ti,palmas-rtc"; ++ interrupt-parent = <&tps659038>; ++ interrupts = <8 IRQ_TYPE_EDGE_FALLING>; ++ wakeup-source; ++ }; ++ ++ tps659038_pwr_button: tps659038_pwr_button { ++ compatible = "ti,palmas-pwrbutton"; ++ interrupt-parent = <&tps659038>; ++ interrupts = <1 IRQ_TYPE_EDGE_FALLING>; ++ wakeup-source; ++ ti,palmas-long-press-seconds = <12>; ++ }; ++ ++ tps659038_gpio: tps659038_gpio { ++ compatible = "ti,palmas-gpio"; ++ gpio-controller; ++ #gpio-cells = <2>; ++ }; ++ ++ extcon_usb2: tps659038_usb { ++ compatible = "ti,palmas-usb-vid"; ++ }; ++ ++ }; ++ ++ eeprom: eeprom@50 { ++ compatible = "atmel,24c32"; ++ reg = <0x50>; ++ }; ++}; ++ ++&i2c2 { ++ status = "okay"; ++ clock-frequency = <400000>; ++}; ++ ++&i2c3 { ++ status = "okay"; ++ clock-frequency = <400000>; ++}; ++ ++&i2c4 { ++ status = "okay"; ++ clock-frequency = <100000>; ++}; ++ ++&i2c5 { ++ status = "okay"; ++ clock-frequency = <100000>; ++}; ++ ++&cpu0 { ++ vdd-supply = <&vdd_mpu>; ++ voltage-tolerance = <1>; ++}; ++ ++&uart1 { ++ status = "okay"; ++ interrupts-extended = <&crossbar_mpu GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>, ++ <&dra7_pmx_core 0x3e0>; ++}; ++ ++&uart3 { ++ status = "okay"; ++ interrupts-extended = <&crossbar_mpu GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>, ++ <&dra7_pmx_core 0x3f8>; ++}; ++ ++&davinci_mdio { ++ reset-gpios = <&gpio2 23 GPIO_ACTIVE_LOW>; ++ reset-delay-us = <2>; ++ ++ phy0: ethernet-phy@1 { ++ reg = <4>; ++ }; ++}; ++ ++&mac { ++ slaves = <1>; ++ status = "okay"; ++ //dual_emac; ++}; ++ ++&cpsw_emac0 { ++ phy-handle = <&phy0>; ++ phy-mode = "rgmii"; ++ //dual_emac_res_vlan = <1>; ++}; ++ ++&mmc1 { ++ status = "okay"; ++ vmmc-supply = <&vdd_3v3>; ++ vmmc_aux-supply = <&vdd_sd>; ++ vqmmc-supply = <&vdd_sd>; /* IO Line Power */ ++ bus-width = <4>; ++ max-frequency = <24000000>; ++ cd-gpios = <&gpio6 27 GPIO_ACTIVE_LOW>; /* gpio 219 */ ++ ++ pinctrl-names = "default", "hs", "sdr12", "sdr25", "sdr50", "ddr50", "sdr104"; ++ pinctrl-0 = <&mmc1_pins_default>; ++ pinctrl-1 = <&mmc1_pins_hs>; ++ pinctrl-2 = <&mmc1_pins_sdr12>; ++ pinctrl-3 = <&mmc1_pins_sdr25>; ++ pinctrl-4 = <&mmc1_pins_sdr50>; ++ pinctrl-5 = <&mmc1_pins_ddr50 &mmc1_iodelay_ddr_rev20_conf>; ++ pinctrl-6 = <&mmc1_pins_sdr104 &mmc1_iodelay_sdr104_rev20_conf>; ++}; ++ ++&mmc2 { ++ status = "okay"; ++ vmmc-supply = <&vdd_3v3>; ++ //FUTURE: vqmmc-supply = <&vdd_3v3>; /* IO Line Power */ ++ bus-width = <8>; ++ ti,non-removable; ++ non-removable; ++ max-frequency = <96000000>; ++ no-1-8-v; ++ /delete-property/ mmc-hs200-1_8v; ++ ++ pinctrl-names = "default", "hs"; ++ pinctrl-0 = <&mmc2_pins_default>; ++ pinctrl-1 = <&mmc2_pins_hs>; ++}; ++ ++&usb2_phy1 { ++ phy-supply = <&ldousb_reg>; ++}; ++ ++&usb2_phy2 { ++ phy-supply = <&ldousb_reg>; ++}; ++ ++&usb1 { ++ dr_mode = "host"; ++}; ++ ++&omap_dwc3_2 { ++ extcon = <&extcon_usb2>; ++}; ++ ++&usb2 { ++ dr_mode = "peripheral"; ++}; ++ ++&cpu_trips { ++ cpu_alert1: cpu_alert1 { ++ temperature = <50000>; /* millicelsius */ ++ hysteresis = <2000>; /* millicelsius */ ++ type = "active"; ++ }; ++}; ++ ++&cpu_cooling_maps { ++ map1 { ++ trip = <&cpu_alert1>; ++ }; ++}; ++ ++&thermal_zones { ++ board_thermal: board_thermal { ++ polling-delay-passive = <1250>; /* milliseconds */ ++ polling-delay = <1500>; /* milliseconds */ ++ ++ board_trips: trips { ++ board_alert0: board_alert { ++ temperature = <40000>; /* millicelsius */ ++ hysteresis = <2000>; /* millicelsius */ ++ type = "active"; ++ }; ++ ++ board_crit: board_crit { ++ temperature = <105000>; /* millicelsius */ ++ hysteresis = <0>; /* millicelsius */ ++ type = "critical"; ++ }; ++ }; ++ ++ board_cooling_maps: cooling-maps { ++ map0 { ++ trip = <&board_alert0>; ++ }; ++ }; ++ }; ++}; ++ ++&mailbox5 { ++ status = "okay"; ++ mbox_ipu1_ipc3x: mbox_ipu1_ipc3x { ++ status = "okay"; ++ }; ++ mbox_dsp1_ipc3x: mbox_dsp1_ipc3x { ++ status = "okay"; ++ }; ++}; ++ ++&mailbox6 { ++ status = "okay"; ++ mbox_ipu2_ipc3x: mbox_ipu2_ipc3x { ++ status = "okay"; ++ }; ++ mbox_dsp2_ipc3x: mbox_dsp2_ipc3x { ++ status = "okay"; ++ }; ++}; +diff --git a/arch/arm/mach-omap2/omap5/hw_data.c b/arch/arm/mach-omap2/omap5/hw_data.c +index c4a41db92a..57b23b93b5 100644 +--- a/arch/arm/mach-omap2/omap5/hw_data.c ++++ b/arch/arm/mach-omap2/omap5/hw_data.c +@@ -418,8 +418,10 @@ void enable_basic_clocks(void) + (*prcm)->cm_l3init_hsmmc2_clkctrl, + (*prcm)->cm_l4per_gptimer2_clkctrl, + (*prcm)->cm_wkup_wdtimer2_clkctrl, ++ (*prcm)->cm_l4per_uart1_clkctrl, + (*prcm)->cm_l4per_uart3_clkctrl, + (*prcm)->cm_l4per_i2c1_clkctrl, ++ (*prcm)->cm_l4per_i2c4_clkctrl, + #ifdef CONFIG_DRIVER_TI_CPSW + (*prcm)->cm_gmac_gmac_clkctrl, + #endif +@@ -493,7 +495,6 @@ void enable_basic_uboot_clocks(void) + (*prcm)->cm_l4per_mcspi1_clkctrl, + (*prcm)->cm_l4per_i2c2_clkctrl, + (*prcm)->cm_l4per_i2c3_clkctrl, +- (*prcm)->cm_l4per_i2c4_clkctrl, + #if defined(CONFIG_DRA7XX) + (*prcm)->cm_ipu_i2c5_clkctrl, + #else +diff --git a/board/ti/am57xx/board.c b/board/ti/am57xx/board.c +index 7063345dcc..47a8391de8 100644 +--- a/board/ti/am57xx/board.c ++++ b/board/ti/am57xx/board.c +@@ -30,6 +30,8 @@ + #include + #include + #include ++#include ++#include + + #include "../common/board_detect.h" + #include "mux_data.h" +@@ -46,6 +48,7 @@ + #define board_is_am574x_idk() board_ti_is("AM574IDK") + #define board_is_am572x_idk() board_ti_is("AM572IDK") + #define board_is_am571x_idk() board_ti_is("AM571IDK") ++#define board_is_bbai() board_ti_is("BBBBAI__") //no EEPROM... + + #ifdef CONFIG_DRIVER_TI_CPSW + #include +@@ -75,6 +78,12 @@ DECLARE_GLOBAL_DATA_PTR; + #define TPS65903X_PRIMARY_SECONDARY_PAD2 0xFB + #define TPS65903X_PAD2_POWERHOLD_MASK 0x20 + ++#define CAPE_EEPROM_BUS_NUM 3 ++#define CAPE_EEPROM_ADDR0 0x54 ++#define CAPE_EEPROM_ADDR3 0x57 ++ ++#define CAPE_EEPROM_ADDR_LEN 0x10 ++ + const struct omap_sysinfo sysinfo = { + "Board: UNKNOWN(BeagleBoard X15?) REV UNKNOWN\n" + }; +@@ -84,6 +93,12 @@ static const struct dmm_lisa_map_regs beagle_x15_lisa_regs = { + .is_ma_present = 0x1 + }; + ++static const struct dmm_lisa_map_regs bbai_lisa_regs = { ++ ///FIXME: Document, where this magic number come from? ++ .dmm_lisa_map_3 = 0x80640100, ++ .is_ma_present = 0x1 ++}; ++ + static const struct dmm_lisa_map_regs am571x_idk_lisa_regs = { + .dmm_lisa_map_3 = 0x80640100, + .is_ma_present = 0x1 +@@ -101,6 +116,8 @@ void emif_get_dmm_regs(const struct dmm_lisa_map_regs **dmm_lisa_regs) + *dmm_lisa_regs = &am571x_idk_lisa_regs; + else if (board_is_am574x_idk()) + *dmm_lisa_regs = &am574x_idk_lisa_regs; ++ else if (board_is_bbai()) ++ *dmm_lisa_regs = &bbai_lisa_regs; + else + *dmm_lisa_regs = &beagle_x15_lisa_regs; + } +@@ -502,8 +519,30 @@ void do_board_detect(void) + + rc = ti_i2c_eeprom_am_get(CONFIG_EEPROM_BUS_ADDRESS, + CONFIG_EEPROM_CHIP_ADDRESS); +- if (rc) ++ if (rc) { + printf("ti_i2c_eeprom_init failed %d\n", rc); ++ ti_i2c_eeprom_am_set("BBBBAI__", "A"); ++ }; ++ ++ puts("in do_board_detect\n"); ++ printf("do_board_detect\n"); ++} ++ ++void write_hex (unsigned char i) ++{ ++ char cc; ++ ++ cc = i >> 4; ++ cc &= 0xf; ++ if (cc > 9) ++ serial_putc (cc + 55); ++ else ++ serial_putc (cc + 48); ++ cc = i & 0xf; ++ if (cc > 9) ++ serial_putc (cc + 55); ++ else ++ serial_putc (cc + 48); + } + + #else /* CONFIG_SPL_BUILD */ +@@ -521,6 +560,8 @@ void do_board_detect(void) + + if (board_is_x15()) + bname = "BeagleBoard X15"; ++ else if (board_is_bbai()) ++ bname = "BeagleBone AI"; + else if (board_is_am572x_evm()) + bname = "AM572x EVM"; + else if (board_is_am574x_idk()) +@@ -535,6 +576,23 @@ void do_board_detect(void) + "Board: %s REV %s\n", bname, board_ti_get_rev()); + } + ++void write_hex (unsigned char i) ++{ ++ char cc; ++ ++ cc = i >> 4; ++ cc &= 0xf; ++ if (cc > 9) ++ serial_putc (cc + 55); ++ else ++ serial_putc (cc + 48); ++ cc = i & 0xf; ++ if (cc > 9) ++ serial_putc (cc + 55); ++ else ++ serial_putc (cc + 48); ++} ++ + static void setup_board_eeprom_env(void) + { + char *name = "beagle_x15"; +@@ -557,6 +615,8 @@ static void setup_board_eeprom_env(void) + name = "am57xx_evm_reva3"; + else + name = "am57xx_evm"; ++ } else if (board_is_bbai()) { ++ name = "am5729_beagleboneai"; + } else if (board_is_am574x_idk()) { + name = "am574x_idk"; + } else if (board_is_am572x_idk()) { +@@ -626,7 +686,7 @@ void am57x_idk_lcd_detect(void) + struct udevice *dev; + + /* Only valid for IDKs */ +- if (board_is_x15() || board_is_am572x_evm()) ++ if (board_is_x15() || board_is_am572x_evm() || board_is_bbai()) + return; + + /* Only AM571x IDK has gpio control detect.. so check that */ +@@ -720,6 +780,28 @@ int board_late_init(void) + + am57x_idk_lcd_detect(); + ++ ///FIXME, too late!! But useful for testing function... ++ unsigned char addr; ++ struct udevice *dev; ++ int rc; ++ ++ for ( addr = CAPE_EEPROM_ADDR0; addr <= CAPE_EEPROM_ADDR3; addr++ ) { ++ puts("BeagleBone: cape eeprom: i2c_probe: 0x"); write_hex(addr); puts(":\n"); ++ rc = i2c_get_chip_for_busnum(CAPE_EEPROM_BUS_NUM, addr, 1, &dev); ++ if (rc) { ++ printf("failed to get device for EEPROM at address 0x%x\n", ++ addr); ++// goto out; ++ } ++// out: ++ } ++ ++ if (board_is_bbai()) { ++ env_set("console", "ttyS0,115200n8"); ++ } else { ++ env_set("console", "ttyO2,115200n8"); ++ } ++ + #if !defined(CONFIG_SPL_BUILD) + board_ti_set_ethaddr(2); + #endif +@@ -762,6 +844,13 @@ void recalibrate_iodelay(void) + pconf_sz = ARRAY_SIZE(core_padconf_array_essential_am571x_idk); + iod = iodelay_cfg_array_am571x_idk; + iod_sz = ARRAY_SIZE(iodelay_cfg_array_am571x_idk); ++ } else if (board_is_bbai()) { ++ /* Common for X15/GPEVM */ ++ pconf = core_padconf_array_essential_bbai; ++ pconf_sz = ARRAY_SIZE(core_padconf_array_essential_bbai); ++ /* Since full production should switch to SR2.0 */ ++ iod = iodelay_cfg_array_bbai; ++ iod_sz = ARRAY_SIZE(iodelay_cfg_array_bbai); + } else { + /* Common for X15/GPEVM */ + pconf = core_padconf_array_essential_x15; +@@ -863,12 +952,50 @@ const struct mmc_platform_fixups *platform_fixups_mmc(uint32_t addr) + #endif + + #if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_OS_BOOT) ++ ++//static int eeprom_has_been_read; ++//static struct id_eeprom eeprom; ++ ++struct am335x_cape_eeprom_id { ++ unsigned int header; ++ char eeprom_rev[2]; ++ char board_name[32]; ++ char version[4]; ++ char manufacture[16]; ++ char part_number[16]; ++ char number_of_pins[2]; ++ char serial_number[12]; ++ char pin_usage[140]; ++ char vdd_3v3exp[ 2]; ++ char vdd_5v[ 2]; ++ char sys_5v[2]; ++ char dc_supplied[2]; ++}; ++ + int spl_start_uboot(void) + { + /* break into full u-boot on 'c' */ + if (serial_tstc() && serial_getc() == 'c') + return 1; + ++ //FIXME, i2c doesn't see to be up.. ++ puts("spl_start_uboot\n"); ++ unsigned char addr; ++ struct udevice *dev; ++ int rc; ++ ++ for ( addr = CAPE_EEPROM_ADDR0; addr <= CAPE_EEPROM_ADDR3; addr++ ) { ++ puts("BeagleBone: cape eeprom: i2c_probe: 0x"); write_hex(addr); puts(":\n"); ++ rc = i2c_get_chip_for_busnum(CAPE_EEPROM_BUS_NUM, addr, 1, &dev); ++ if (rc) { ++ printf("failed to get device for EEPROM at address 0x%x\n", ++ addr); ++// goto out; ++ } ++// out: ++ } ++ ++ + #ifdef CONFIG_SPL_ENV_SUPPORT + env_init(); + env_load(); +@@ -1084,6 +1211,9 @@ int board_fit_config_name_match(const char *name) + } else if (board_is_am572x_evm() && + !strcmp(name, "am57xx-beagle-x15")) { + return 0; ++ } else if (board_is_bbai() && ++ !strcmp(name, "am5729-beagleboneai")) { ++ return 0; + } else if (board_is_am572x_idk() && !strcmp(name, "am572x-idk")) { + return 0; + } else if (board_is_am574x_idk() && !strcmp(name, "am574x-idk")) { +diff --git a/board/ti/am57xx/mux_data.h b/board/ti/am57xx/mux_data.h +index d4a15ae93d..9b8ee944f8 100644 +--- a/board/ti/am57xx/mux_data.h ++++ b/board/ti/am57xx/mux_data.h +@@ -233,6 +233,272 @@ const struct pad_conf_entry core_padconf_array_essential_x15[] = { + {RSTOUTN, (M0 | PIN_OUTPUT)}, /* rstoutn.rstoutn */ + }; + ++const struct pad_conf_entry core_padconf_array_essential_bbai[] = { ++ {GPMC_AD0, (M2 | PIN_INPUT | MANUAL_MODE)}, /* gpmc_ad0.vin3a_d0 */ ++ {GPMC_AD1, (M2 | PIN_INPUT | MANUAL_MODE)}, /* gpmc_ad1.vin3a_d1 */ ++ {GPMC_AD2, (M2 | PIN_INPUT | MANUAL_MODE)}, /* gpmc_ad2.vin3a_d2 */ ++ {GPMC_AD3, (M2 | PIN_INPUT | MANUAL_MODE)}, /* gpmc_ad3.vin3a_d3 */ ++ {GPMC_AD4, (M2 | PIN_INPUT | MANUAL_MODE)}, /* gpmc_ad4.vin3a_d4 */ ++ {GPMC_AD5, (M2 | PIN_INPUT | MANUAL_MODE)}, /* gpmc_ad5.vin3a_d5 */ ++ {GPMC_AD6, (M2 | PIN_INPUT | MANUAL_MODE)}, /* gpmc_ad6.vin3a_d6 */ ++ {GPMC_AD7, (M2 | PIN_INPUT | MANUAL_MODE)}, /* gpmc_ad7.vin3a_d7 */ ++ {GPMC_AD8, (M2 | PIN_INPUT | MANUAL_MODE)}, /* gpmc_ad8.vin3a_d8 */ ++ {GPMC_AD9, (M2 | PIN_INPUT | MANUAL_MODE)}, /* gpmc_ad9.vin3a_d9 */ ++ {GPMC_AD10, (M2 | PIN_INPUT | MANUAL_MODE)}, /* gpmc_ad10.vin3a_d10 */ ++ {GPMC_AD11, (M2 | PIN_INPUT | MANUAL_MODE)}, /* gpmc_ad11.vin3a_d11 */ ++ {GPMC_AD12, (M2 | PIN_INPUT | MANUAL_MODE)}, /* gpmc_ad12.vin3a_d12 */ ++ {GPMC_AD13, (M2 | PIN_INPUT | MANUAL_MODE)}, /* gpmc_ad13.vin3a_d13 */ ++ {GPMC_AD14, (M2 | PIN_INPUT | MANUAL_MODE)}, /* gpmc_ad14.vin3a_d14 */ ++ {GPMC_AD15, (M2 | PIN_INPUT | MANUAL_MODE)}, /* gpmc_ad15.vin3a_d15 */ ++ ++ /* Cape Bus i2c */ ++ {GPMC_A0, (M7 | PIN_INPUT_PULLUP)}, /* R6_GPIO7_3: gpmc_a0.i2c4_scl (Shared with F4_UART10_RTSN) */ ++ {GPMC_A1, (M7 | PIN_INPUT_PULLUP)}, /* T9_GPIO7_4: gpmc_a1.i2c4_sda (Shared with D2_UART10_CTSN) */ ++ ++ {GPMC_A2, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* gpmc_a2.vin3a_d18 */ ++ {GPMC_A3, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* gpmc_a3.vin3a_d19 */ ++ {GPMC_A4, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* gpmc_a4.vin3a_d20 */ ++ {GPMC_A5, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* gpmc_a5.vin3a_d21 */ ++ {GPMC_A6, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* gpmc_a6.vin3a_d22 */ ++ {GPMC_A7, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* gpmc_a7.vin3a_d23 */ ++ {GPMC_A8, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* gpmc_a8.vin3a_hsync0 */ ++ {GPMC_A9, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* gpmc_a9.vin3a_vsync0 */ ++ {GPMC_A10, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* gpmc_a10.vin3a_de0 */ ++ {GPMC_A11, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* gpmc_a11.vin3a_fld0 */ ++ {GPMC_A12, (M14 | PIN_INPUT_PULLUP)}, /* gpmc_a12.gpio2_2 */ ++ {GPMC_A13, (M14 | PIN_INPUT_PULLDOWN)}, /* gpmc_a13.gpio2_3 */ ++ {GPMC_A14, (M14 | PIN_INPUT_PULLUP)}, /* gpmc_a14.gpio2_4 */ ++ {GPMC_A15, (M14 | PIN_INPUT_PULLDOWN)}, /* gpmc_a15.gpio2_5 */ ++ {GPMC_A16, (M14 | PIN_INPUT_PULLDOWN)}, /* gpmc_a16.gpio2_6 */ ++ {GPMC_A17, (M14 | PIN_INPUT_PULLDOWN)}, /* gpmc_a17.gpio2_7 */ ++ {GPMC_A18, (M14 | PIN_INPUT_PULLUP)}, /* gpmc_a18.gpio2_8 */ ++ ++ /* eMMC */ ++ {GPMC_A19, (M1 | PIN_INPUT_PULLUP)}, /* K7: gpmc_a19.mmc2_dat4 */ ++ {GPMC_A20, (M1 | PIN_INPUT_PULLUP)}, /* M7: gpmc_a20.mmc2_dat5 */ ++ {GPMC_A21, (M1 | PIN_INPUT_PULLUP)}, /* J5: gpmc_a21.mmc2_dat6 */ ++ {GPMC_A22, (M1 | PIN_INPUT_PULLUP)}, /* K6: gpmc_a22.mmc2_dat7 */ ++ {GPMC_A23, (M1 | PIN_INPUT_PULLUP)}, /* J7: gpmc_a23.mmc2_clk */ ++ {GPMC_A24, (M1 | PIN_INPUT_PULLUP)}, /* J4: gpmc_a24.mmc2_dat0 */ ++ {GPMC_A25, (M1 | PIN_INPUT_PULLUP)}, /* J6: gpmc_a25.mmc2_dat1 */ ++ {GPMC_A26, (M1 | PIN_INPUT_PULLUP)}, /* H4: gpmc_a26.mmc2_dat2 */ ++ {GPMC_A27, (M1 | PIN_INPUT_PULLUP)}, /* H5: gpmc_a27.mmc2_dat3 */ ++ {GPMC_CS1, (M1 | PIN_INPUT_PULLUP)}, /* H6: gpmc_cs1.mmc2_cmd */ ++ ++ {GPMC_CS0, (M14 | PIN_INPUT_PULLDOWN)}, /* gpmc_cs0.gpio2_19 */ ++ {GPMC_CS2, (M14 | PIN_INPUT_PULLUP)}, /* gpmc_cs2.gpio2_20 */ ++ {GPMC_CS3, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* gpmc_cs3.vin3a_clk0 */ ++ {GPMC_CLK, (M9 | PIN_INPUT_PULLDOWN)}, /* gpmc_clk.dma_evt1 */ ++ {GPMC_ADVN_ALE, (M14 | PIN_INPUT_PULLUP)}, /* gpmc_advn_ale.gpio2_23 */ ++ {GPMC_OEN_REN, (M14 | PIN_INPUT_PULLUP)}, /* gpmc_oen_ren.gpio2_24 */ ++ {GPMC_WEN, (M14 | PIN_INPUT_PULLUP)}, /* gpmc_wen.gpio2_25 */ ++ {GPMC_BEN0, (M9 | PIN_INPUT_PULLDOWN)}, /* gpmc_ben0.dma_evt3 */ ++ {GPMC_BEN1, (M9 | PIN_INPUT_PULLDOWN)}, /* gpmc_ben1.dma_evt4 */ ++ {GPMC_WAIT0, (M14 | PIN_INPUT_PULLUP | SLEWCONTROL)}, /* gpmc_wait0.gpio2_28 */ ++ {VIN1A_CLK0, (M14 | PIN_INPUT)}, /* vin1a_clk0.gpio2_30 */ ++ {VIN1B_CLK1, (M14 | PIN_INPUT_SLEW)}, /* vin1b_clk1.gpio2_31 */ ++ {VIN1A_D2, (M14 | PIN_INPUT_PULLDOWN)}, /* vin1a_d2.gpio3_6 */ ++ {VIN1A_D3, (M14 | PIN_INPUT_PULLDOWN)}, /* vin1a_d3.gpio3_7 */ ++ {VIN1A_D4, (M14 | PIN_INPUT_PULLDOWN)}, /* vin1a_d4.gpio3_8 */ ++ {VIN1A_D5, (M14 | PIN_INPUT_PULLDOWN)}, /* vin1a_d5.gpio3_9 */ ++ {VIN1A_D6, (M14 | PIN_INPUT_PULLDOWN)}, /* vin1a_d6.gpio3_10 */ ++ {VIN1A_D7, (M14 | PIN_INPUT_PULLDOWN)}, /* vin1a_d7.gpio3_11 */ ++ {VIN1A_D8, (M14 | PIN_INPUT_PULLDOWN)}, /* vin1a_d8.gpio3_12 */ ++ {VIN1A_D10, (M14 | PIN_INPUT_PULLDOWN)}, /* vin1a_d10.gpio3_14 */ ++ {VIN1A_D11, (M14 | PIN_INPUT_PULLDOWN)}, /* vin1a_d11.gpio3_15 */ ++ {VIN1A_D12, (M14 | PIN_INPUT_PULLDOWN)}, /* vin1a_d12.gpio3_16 */ ++ {VIN1A_D14, (M14 | PIN_INPUT_PULLDOWN)}, /* vin1a_d14.gpio3_18 */ ++ {VIN1A_D16, (M14 | PIN_INPUT_PULLDOWN)}, /* vin1a_d16.gpio3_20 */ ++ {VIN1A_D19, (M14 | PIN_INPUT_PULLDOWN)}, /* vin1a_d19.gpio3_23 */ ++ {VIN1A_D20, (M14 | PIN_INPUT_PULLDOWN)}, /* vin1a_d20.gpio3_24 */ ++ {VIN1A_D22, (M14 | PIN_INPUT_PULLDOWN)}, /* vin1a_d22.gpio3_26 */ ++ {VIN2A_CLK0, (M14 | PIN_INPUT_PULLDOWN)}, /* vin2a_clk0.gpio3_28 */ ++ {VIN2A_DE0, (M14 | PIN_INPUT_PULLDOWN)}, /* vin2a_de0.gpio3_29 */ ++ {VIN2A_FLD0, (M14 | PIN_INPUT_PULLDOWN)}, /* vin2a_fld0.gpio3_30 */ ++ {VIN2A_HSYNC0, (M11 | PIN_INPUT_PULLUP)}, /* vin2a_hsync0.pr1_uart0_cts_n */ ++ {VIN2A_VSYNC0, (M11 | PIN_OUTPUT_PULLUP)}, /* vin2a_vsync0.pr1_uart0_rts_n */ ++ {VIN2A_D0, (M11 | PIN_INPUT_PULLUP)}, /* vin2a_d0.pr1_uart0_rxd */ ++ {VIN2A_D1, (M11 | PIN_OUTPUT)}, /* vin2a_d1.pr1_uart0_txd */ ++ {VIN2A_D2, (M8 | PIN_INPUT_PULLUP)}, /* vin2a_d2.uart10_rxd */ ++ {VIN2A_D3, (M8 | PIN_OUTPUT)}, /* vin2a_d3.uart10_txd */ ++ ++ /* Cape Bus i2c (gpio shared) */ ++ {VIN2A_D4, (M15 | PIN_INPUT)}, /* D2_UART10_CTSN: vin2a_d4.uart10_ctsn (Shared with T9_GPIO7_4) */ ++ {VIN2A_D5, (M15 | PIN_INPUT)}, /* F4_UART10_RTSN: vin2a_d5.uart10_rtsn (Shared with R6_GPIO7_3) */ ++ ++ {VIN2A_D6, (M14 | PIN_INPUT_PULLDOWN)}, /* vin2a_d6.gpio4_7 */ ++ {VIN2A_D7, (M14 | PIN_INPUT_PULLDOWN)}, /* vin2a_d7.gpio4_8 */ ++ {VIN2A_D8, (M14 | PIN_INPUT_PULLDOWN)}, /* vin2a_d8.gpio4_9 */ ++ {VIN2A_D9, (M14 | PIN_INPUT_PULLDOWN)}, /* vin2a_d9.gpio4_10 */ ++ {VIN2A_D10, (M10 | PIN_OUTPUT_PULLDOWN)}, /* vin2a_d10.ehrpwm2B */ ++ {VIN2A_D11, (M10 | PIN_INPUT_PULLDOWN)}, /* vin2a_d11.ehrpwm2_tripzone_input */ ++ {VIN2A_D12, (M3 | PIN_OUTPUT | MANUAL_MODE)}, /* vin2a_d12.rgmii1_txc */ ++ {VIN2A_D13, (M3 | PIN_OUTPUT | MANUAL_MODE)}, /* vin2a_d13.rgmii1_txctl */ ++ {VIN2A_D14, (M3 | PIN_OUTPUT | MANUAL_MODE)}, /* vin2a_d14.rgmii1_txd3 */ ++ {VIN2A_D15, (M3 | PIN_OUTPUT | MANUAL_MODE)}, /* vin2a_d15.rgmii1_txd2 */ ++ {VIN2A_D16, (M3 | PIN_OUTPUT | MANUAL_MODE)}, /* vin2a_d16.rgmii1_txd1 */ ++ {VIN2A_D17, (M3 | PIN_OUTPUT | MANUAL_MODE)}, /* vin2a_d17.rgmii1_txd0 */ ++ {VIN2A_D18, (M3 | PIN_INPUT | MANUAL_MODE)}, /* vin2a_d18.rgmii1_rxc */ ++ {VIN2A_D19, (M3 | PIN_INPUT | MANUAL_MODE)}, /* vin2a_d19.rgmii1_rxctl */ ++ {VIN2A_D20, (M3 | PIN_INPUT | MANUAL_MODE)}, /* vin2a_d20.rgmii1_rxd3 */ ++ {VIN2A_D21, (M3 | PIN_INPUT | MANUAL_MODE)}, /* vin2a_d21.rgmii1_rxd2 */ ++ {VIN2A_D22, (M3 | PIN_INPUT | MANUAL_MODE)}, /* vin2a_d22.rgmii1_rxd1 */ ++ {VIN2A_D23, (M3 | PIN_INPUT | MANUAL_MODE)}, /* vin2a_d23.rgmii1_rxd0 */ ++ {VOUT1_CLK, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_clk.vout1_clk */ ++ {VOUT1_DE, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_de.vout1_de */ ++ {VOUT1_FLD, (M14 | PIN_INPUT)}, /* vout1_fld.gpio4_21 */ ++ {VOUT1_HSYNC, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_hsync.vout1_hsync */ ++ {VOUT1_VSYNC, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_vsync.vout1_vsync */ ++ {VOUT1_D0, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d0.vout1_d0 */ ++ {VOUT1_D1, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d1.vout1_d1 */ ++ {VOUT1_D2, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d2.vout1_d2 */ ++ {VOUT1_D3, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d3.vout1_d3 */ ++ {VOUT1_D4, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d4.vout1_d4 */ ++ {VOUT1_D5, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d5.vout1_d5 */ ++ {VOUT1_D6, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d6.vout1_d6 */ ++ {VOUT1_D7, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d7.vout1_d7 */ ++ {VOUT1_D8, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d8.vout1_d8 */ ++ {VOUT1_D9, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d9.vout1_d9 */ ++ {VOUT1_D10, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d10.vout1_d10 */ ++ {VOUT1_D11, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d11.vout1_d11 */ ++ {VOUT1_D12, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d12.vout1_d12 */ ++ {VOUT1_D13, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d13.vout1_d13 */ ++ {VOUT1_D14, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d14.vout1_d14 */ ++ {VOUT1_D15, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d15.vout1_d15 */ ++ {VOUT1_D16, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d16.vout1_d16 */ ++ {VOUT1_D17, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d17.vout1_d17 */ ++ {VOUT1_D18, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d18.vout1_d18 */ ++ {VOUT1_D19, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d19.vout1_d19 */ ++ {VOUT1_D20, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d20.vout1_d20 */ ++ {VOUT1_D21, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d21.vout1_d21 */ ++ {VOUT1_D22, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d22.vout1_d22 */ ++ {VOUT1_D23, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* vout1_d23.vout1_d23 */ ++ {MDIO_MCLK, (M0 | PIN_OUTPUT | SLEWCONTROL)}, /* mdio_mclk.mdio_mclk */ ++ {MDIO_D, (M0 | PIN_INPUT | SLEWCONTROL)}, /* mdio_d.mdio_d */ ++ {RMII_MHZ_50_CLK, (M14 | PIN_INPUT_PULLUP)}, /* RMII_MHZ_50_CLK.gpio5_17 */ ++ {UART3_RXD, (M14 | PIN_INPUT_SLEW)}, /* uart3_rxd.gpio5_18 */ ++ {UART3_TXD, (M14 | PIN_INPUT_SLEW)}, /* uart3_txd.gpio5_19 */ ++ {RGMII0_TXC, (M0 | PIN_OUTPUT | MANUAL_MODE)}, /* rgmii0_txc.rgmii0_txc */ ++ {RGMII0_TXCTL, (M0 | PIN_OUTPUT | MANUAL_MODE)}, /* rgmii0_txctl.rgmii0_txctl */ ++ {RGMII0_TXD3, (M0 | PIN_OUTPUT | MANUAL_MODE)}, /* rgmii0_txd3.rgmii0_txd3 */ ++ {RGMII0_TXD2, (M0 | PIN_OUTPUT | MANUAL_MODE)}, /* rgmii0_txd2.rgmii0_txd2 */ ++ {RGMII0_TXD1, (M0 | PIN_OUTPUT | MANUAL_MODE)}, /* rgmii0_txd1.rgmii0_txd1 */ ++ {RGMII0_TXD0, (M0 | PIN_OUTPUT | MANUAL_MODE)}, /* rgmii0_txd0.rgmii0_txd0 */ ++ {RGMII0_RXC, (M0 | PIN_INPUT | MANUAL_MODE)}, /* rgmii0_rxc.rgmii0_rxc */ ++ {RGMII0_RXCTL, (M0 | PIN_INPUT | MANUAL_MODE)}, /* rgmii0_rxctl.rgmii0_rxctl */ ++ {RGMII0_RXD3, (M0 | PIN_INPUT | MANUAL_MODE)}, /* rgmii0_rxd3.rgmii0_rxd3 */ ++ {RGMII0_RXD2, (M0 | PIN_INPUT | MANUAL_MODE)}, /* rgmii0_rxd2.rgmii0_rxd2 */ ++ {RGMII0_RXD1, (M0 | PIN_INPUT | MANUAL_MODE)}, /* rgmii0_rxd1.rgmii0_rxd1 */ ++ {RGMII0_RXD0, (M0 | PIN_INPUT | MANUAL_MODE)}, /* rgmii0_rxd0.rgmii0_rxd0 */ ++ {USB1_DRVVBUS, (M0 | PIN_OUTPUT | SLEWCONTROL)}, /* usb1_drvvbus.usb1_drvvbus */ ++ {USB2_DRVVBUS, (M0 | PIN_OUTPUT_PULLDOWN | SLEWCONTROL)}, /* usb2_drvvbus.usb2_drvvbus */ ++ {GPIO6_14, (M10 | PIN_INPUT_PULLUP)}, /* gpio6_14.timer1 */ ++ {GPIO6_15, (M10 | PIN_INPUT_PULLUP)}, /* gpio6_15.timer2 */ ++ {GPIO6_16, (M10 | PIN_INPUT_PULLUP)}, /* gpio6_16.timer3 */ ++ {XREF_CLK0, (M9 | PIN_OUTPUT_PULLDOWN)}, /* xref_clk0.clkout2 */ ++ {XREF_CLK1, (M14 | PIN_INPUT_PULLDOWN)}, /* xref_clk1.gpio6_18 */ ++ {XREF_CLK2, (M14 | PIN_INPUT_PULLDOWN)}, /* xref_clk2.gpio6_19 */ ++ {XREF_CLK3, (M9 | PIN_OUTPUT_PULLDOWN)}, /* xref_clk3.clkout3 */ ++ {MCASP1_ACLKX, (M10 | PIN_INPUT_PULLUP)}, /* mcasp1_aclkx.i2c3_sda */ ++ {MCASP1_FSX, (M10 | PIN_INPUT_PULLUP | SLEWCONTROL)}, /* mcasp1_fsx.i2c3_scl */ ++ {MCASP1_ACLKR, (M10 | PIN_INPUT_PULLUP)}, /* mcasp1_aclkr.i2c4_sda */ ++ {MCASP1_FSR, (M10 | PIN_INPUT_PULLUP)}, /* mcasp1_fsr.i2c4_scl */ ++ {MCASP1_AXR0, (M10 | PIN_INPUT_PULLUP | SLEWCONTROL)}, /* mcasp1_axr0.i2c5_sda */ ++ {MCASP1_AXR1, (M10 | PIN_INPUT_PULLUP | SLEWCONTROL)}, /* mcasp1_axr1.i2c5_scl */ ++ {MCASP1_AXR2, (M14 | PIN_INPUT_PULLDOWN)}, /* mcasp1_axr2.gpio5_4 */ ++ {MCASP1_AXR3, (M14 | PIN_INPUT_PULLDOWN)}, /* mcasp1_axr3.gpio5_5 */ ++ {MCASP1_AXR4, (M14 | PIN_INPUT_PULLDOWN)}, /* mcasp1_axr4.gpio5_6 */ ++ {MCASP1_AXR5, (M14 | PIN_INPUT_PULLDOWN)}, /* mcasp1_axr5.gpio5_7 */ ++ {MCASP1_AXR6, (M14 | PIN_INPUT_PULLDOWN)}, /* mcasp1_axr6.gpio5_8 */ ++ {MCASP1_AXR7, (M14 | PIN_INPUT_PULLDOWN)}, /* mcasp1_axr7.gpio5_9 */ ++ {MCASP1_AXR8, (M14 | PIN_INPUT | SLEWCONTROL)}, /* mcasp1_axr8.gpio5_10 */ ++ {MCASP1_AXR9, (M14 | PIN_INPUT | SLEWCONTROL)}, /* mcasp1_axr9.gpio5_11 */ ++ {MCASP1_AXR10, (M14 | PIN_INPUT | SLEWCONTROL)}, /* mcasp1_axr10.gpio5_12 */ ++ {MCASP1_AXR11, (M14 | PIN_INPUT_PULLUP | SLEWCONTROL)}, /* mcasp1_axr11.gpio4_17 */ ++ {MCASP1_AXR12, (M1 | PIN_INPUT_SLEW | VIRTUAL_MODE10)}, /* mcasp1_axr12.mcasp7_axr0 */ ++ {MCASP1_AXR13, (M1 | PIN_INPUT_SLEW | VIRTUAL_MODE10)}, /* mcasp1_axr13.mcasp7_axr1 */ ++ {MCASP1_AXR14, (M1 | PIN_INPUT_SLEW | VIRTUAL_MODE10)}, /* mcasp1_axr14.mcasp7_aclkx */ ++ {MCASP1_AXR15, (M1 | PIN_INPUT_SLEW | VIRTUAL_MODE10)}, /* mcasp1_axr15.mcasp7_fsx */ ++ {MCASP3_ACLKX, (M0 | PIN_INPUT_PULLDOWN)}, /* mcasp3_aclkx.mcasp3_aclkx */ ++ {MCASP3_FSX, (M0 | PIN_INPUT_SLEW)}, /* mcasp3_fsx.mcasp3_fsx */ ++ {MCASP3_AXR0, (M0 | PIN_INPUT_SLEW)}, /* mcasp3_axr0.mcasp3_axr0 */ ++ {MCASP3_AXR1, (M0 | PIN_INPUT_SLEW)}, /* mcasp3_axr1.mcasp3_axr1 */ ++ {MCASP4_ACLKX, (M3 | PIN_INPUT_PULLUP)}, /* mcasp4_aclkx.uart8_rxd */ ++ {MCASP4_FSX, (M3 | PIN_OUTPUT)}, /* mcasp4_fsx.uart8_txd */ ++ {MCASP4_AXR0, (M3 | PIN_INPUT_PULLUP)}, /* mcasp4_axr0.uart8_ctsn */ ++ {MCASP4_AXR1, (M3 | PIN_OUTPUT_PULLUP)}, /* mcasp4_axr1.uart8_rtsn */ ++ {MCASP5_ACLKX, (M3 | PIN_INPUT_PULLUP)}, /* mcasp5_aclkx.uart9_rxd */ ++ {MCASP5_FSX, (M3 | PIN_OUTPUT)}, /* mcasp5_fsx.uart9_txd */ ++ {MCASP5_AXR0, (M3 | PIN_INPUT_PULLUP)}, /* mcasp5_axr0.uart9_ctsn */ ++ {MCASP5_AXR1, (M3 | PIN_OUTPUT_PULLUP)}, /* mcasp5_axr1.uart9_rtsn */ ++ ++ /* microSD Socket */ ++ {MMC1_CLK, (M0 | PIN_INPUT_PULLUP)}, /* W6: mmc1_clk.mmc1_clk */ ++ {MMC1_CMD, (M0 | PIN_INPUT_PULLUP)}, /* Y6: mmc1_cmd.mmc1_cmd */ ++ {MMC1_DAT0, (M0 | PIN_INPUT_PULLUP)}, /* AA6: mmc1_dat0.mmc1_dat0 */ ++ {MMC1_DAT1, (M0 | PIN_INPUT_PULLUP)}, /* Y4: mmc1_dat1.mmc1_dat1 */ ++ {MMC1_DAT2, (M0 | PIN_INPUT_PULLUP)}, /* AA5: mmc1_dat2.mmc1_dat2 */ ++ {MMC1_DAT3, (M0 | PIN_INPUT_PULLUP)}, /* Y3: mmc1_dat3.mmc1_dat3 */ ++ {MMC1_SDCD, (M14 | PIN_INPUT_PULLUP | SLEWCONTROL)}, /* W7: mmc1_sdcd.gpio6_27 */ ++ ++ {GPIO6_10, (M10 | PIN_OUTPUT_PULLDOWN)}, /* gpio6_10.ehrpwm2A */ ++ {GPIO6_11, (M0 | PIN_INPUT_PULLUP)}, /* gpio6_11.gpio6_11 */ ++ {MMC3_CLK, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)}, /* mmc3_clk.mmc3_clk */ ++ {MMC3_CMD, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)}, /* mmc3_cmd.mmc3_cmd */ ++ {MMC3_DAT0, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)}, /* mmc3_dat0.mmc3_dat0 */ ++ {MMC3_DAT1, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)}, /* mmc3_dat1.mmc3_dat1 */ ++ {MMC3_DAT2, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)}, /* mmc3_dat2.mmc3_dat2 */ ++ {MMC3_DAT3, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)}, /* mmc3_dat3.mmc3_dat3 */ ++ {MMC3_DAT4, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)}, /* mmc3_dat4.mmc3_dat4 */ ++ {MMC3_DAT5, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)}, /* mmc3_dat5.mmc3_dat5 */ ++ {MMC3_DAT6, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)}, /* mmc3_dat6.mmc3_dat6 */ ++ {MMC3_DAT7, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)}, /* mmc3_dat7.mmc3_dat7 */ ++ {SPI1_SCLK, (M14 | PIN_INPUT_PULLDOWN)}, /* spi1_sclk.gpio7_7 */ ++ {SPI1_D1, (M14 | PIN_INPUT_PULLDOWN)}, /* spi1_d1.gpio7_8 */ ++ {SPI1_D0, (M14 | PIN_INPUT_PULLDOWN)}, /* spi1_d0.gpio7_9 */ ++ {SPI1_CS0, (M14 | PIN_INPUT)}, /* spi1_cs0.gpio7_10 */ ++ {SPI1_CS1, (M14 | PIN_INPUT)}, /* spi1_cs1.gpio7_11 */ ++ {SPI1_CS2, (M14 | PIN_INPUT_SLEW)}, /* spi1_cs2.gpio7_12 */ ++ {SPI1_CS3, (M6 | PIN_INPUT | SLEWCONTROL)}, /* spi1_cs3.hdmi1_cec */ ++ {SPI2_SCLK, (M14 | PIN_INPUT_PULLDOWN)}, /* spi2_sclk.gpio7_14 */ ++ {SPI2_D1, (M14 | PIN_INPUT_SLEW)}, /* spi2_d1.gpio7_15 */ ++ {SPI2_D0, (M14 | PIN_INPUT_PULLUP | SLEWCONTROL)}, /* spi2_d0.gpio7_16 */ ++ {SPI2_CS0, (M14 | PIN_INPUT_PULLUP | SLEWCONTROL)}, /* spi2_cs0.gpio7_17 */ ++ {DCAN1_TX, (M0 | PIN_OUTPUT | SLEWCONTROL)}, /* dcan1_tx.dcan1_tx */ ++ {DCAN1_RX, (M0 | PIN_INPUT | SLEWCONTROL)}, /* dcan1_rx.dcan1_rx */ ++ ++ /* BeagleBone AI: Debug UART */ ++ {UART1_RXD, (M0 | PIN_INPUT_PULLUP | SLEWCONTROL)}, /* uart1_rxd.uart1_rxd */ ++ {UART1_TXD, (M0 | PIN_OUTPUT | SLEWCONTROL)}, /* uart1_txd.uart1_txd */ ++ ++ {UART1_CTSN, (M14 | PIN_INPUT_PULLDOWN)}, /* uart1_ctsn.gpio7_24 */ ++ {UART1_RTSN, (M14 | PIN_INPUT)}, /* uart1_rtsn.gpio7_25 */ ++ {UART2_RXD, (M14 | PIN_INPUT_PULLDOWN)}, /* uart2_rxd.gpio7_26 */ ++ {UART2_TXD, (M14 | PIN_INPUT_PULLDOWN)}, /* uart2_txd.gpio7_27 */ ++ {UART2_CTSN, (M2 | PIN_INPUT_PULLUP)}, /* uart2_ctsn.uart3_rxd */ ++ {UART2_RTSN, (M1 | PIN_OUTPUT)}, /* uart2_rtsn.uart3_txd */ ++ {I2C1_SDA, (M0 | PIN_INPUT_PULLUP)}, /* i2c1_sda.i2c1_sda */ ++ {I2C1_SCL, (M0 | PIN_INPUT_PULLUP)}, /* i2c1_scl.i2c1_scl */ ++ {I2C2_SDA, (M1 | PIN_INPUT_PULLUP)}, /* i2c2_sda.hdmi1_ddc_scl */ ++ {I2C2_SCL, (M1 | PIN_INPUT_PULLUP)}, /* i2c2_scl.hdmi1_ddc_sda */ ++ {WAKEUP0, (M0 | PIN_INPUT)}, /* Wakeup0.Wakeup0 */ ++ {WAKEUP1, (M0 | PIN_INPUT)}, /* Wakeup1.Wakeup1 */ ++ {WAKEUP2, (M0 | PIN_INPUT)}, /* Wakeup2.Wakeup2 */ ++ {WAKEUP3, (M0 | PIN_INPUT)}, /* Wakeup3.Wakeup3 */ ++ {ON_OFF, (M0 | PIN_OUTPUT)}, /* on_off.on_off */ ++ {RTC_PORZ, (M0 | PIN_INPUT)}, /* rtc_porz.rtc_porz */ ++ {TMS, (M0 | PIN_INPUT_PULLUP)}, /* tms.tms */ ++ {TDI, (M0 | PIN_INPUT_PULLUP | SLEWCONTROL)}, /* tdi.tdi */ ++ {TDO, (M0 | PIN_OUTPUT)}, /* tdo.tdo */ ++ {TCLK, (M0 | PIN_INPUT_PULLDOWN)}, /* tclk.tclk */ ++ {TRSTN, (M0 | PIN_INPUT)}, /* trstn.trstn */ ++ {RTCK, (M0 | PIN_OUTPUT)}, /* rtck.rtck */ ++ {EMU0, (M0 | PIN_INPUT)}, /* emu0.emu0 */ ++ {EMU1, (M0 | PIN_INPUT)}, /* emu1.emu1 */ ++ {NMIN_DSP, (M0 | PIN_INPUT)}, /* nmin_dsp.nmin_dsp */ ++ {RSTOUTN, (M0 | PIN_OUTPUT)}, /* rstoutn.rstoutn */ ++}; ++ + const struct pad_conf_entry core_padconf_array_delta_x15_sr1_1[] = { + {MMC1_SDWP, (M14 | PIN_INPUT | SLEWCONTROL)}, /* mmc1_sdwp.gpio6_28 */ + {VOUT1_CLK, (M0 | PIN_OUTPUT | SLEWCONTROL)}, /* vout1_clk.vout1_clk */ +@@ -998,6 +1264,17 @@ const struct pad_conf_entry early_padconf[] = { + {UART2_RTSN, (M1 | PIN_INPUT_SLEW)}, /* uart2_rtsn.uart3_txd */ + {I2C1_SDA, (PIN_INPUT_PULLUP | M0)}, /* I2C1_SDA */ + {I2C1_SCL, (PIN_INPUT_PULLUP | M0)}, /* I2C1_SCL */ ++ ++ /* BeagleBone AI: Debug UART */ ++ {UART1_RXD, (M0 | PIN_INPUT_SLEW)}, /* UART1_RXD */ ++ {UART1_TXD, (M0 | PIN_INPUT_SLEW)}, /* UART1_TXD */ ++ ++ /* Cape Bus i2c */ ++ {GPMC_A0, (M7 | PIN_INPUT_PULLUP)}, /* R6_GPIO7_3: gpmc_a0.i2c4_scl (Shared with F4_UART10_RTSN) */ ++ {GPMC_A1, (M7 | PIN_INPUT_PULLUP)}, /* T9_GPIO7_4: gpmc_a1.i2c4_sda (Shared with D2_UART10_CTSN) */ ++ /* Cape Bus i2c (gpio shared) */ ++ {VIN2A_D4, (M14 | PIN_INPUT_PULLUP)}, /* D2_UART10_CTSN: vin2a_d4.uart10_ctsn (Shared with T9_GPIO7_4) */ ++ {VIN2A_D5, (M14 | PIN_INPUT_PULLUP)}, /* F4_UART10_RTSN: vin2a_d5.uart10_rtsn (Shared with R6_GPIO7_3) */ + }; + + #ifdef CONFIG_IODELAY_RECALIBRATION +@@ -1199,6 +1476,119 @@ const struct iodelay_cfg_entry iodelay_cfg_array_x15_sr2_0[] = { + {0x0CEC, 2739, 0}, /* CFG_VOUT1_VSYNC_OUT */ + }; + ++const struct iodelay_cfg_entry iodelay_cfg_array_bbai[] = { ++ {0x0114, 2519, 702}, /* CFG_GPMC_A0_IN */ ++ {0x0120, 2435, 411}, /* CFG_GPMC_A10_IN */ ++ {0x012C, 2379, 755}, /* CFG_GPMC_A11_IN */ ++ {0x0198, 2384, 778}, /* CFG_GPMC_A1_IN */ ++ {0x0204, 2499, 1127}, /* CFG_GPMC_A2_IN */ ++ {0x0210, 2455, 1181}, /* CFG_GPMC_A3_IN */ ++ {0x021C, 2486, 1039}, /* CFG_GPMC_A4_IN */ ++ {0x0228, 2456, 938}, /* CFG_GPMC_A5_IN */ ++ {0x0234, 2463, 573}, /* CFG_GPMC_A6_IN */ ++ {0x0240, 2608, 783}, /* CFG_GPMC_A7_IN */ ++ {0x024C, 2430, 656}, /* CFG_GPMC_A8_IN */ ++ {0x0258, 2465, 850}, /* CFG_GPMC_A9_IN */ ++ {0x0264, 2316, 301}, /* CFG_GPMC_AD0_IN */ ++ {0x0270, 2324, 406}, /* CFG_GPMC_AD10_IN */ ++ {0x027C, 2278, 352}, /* CFG_GPMC_AD11_IN */ ++ {0x0288, 2297, 160}, /* CFG_GPMC_AD12_IN */ ++ {0x0294, 2278, 108}, /* CFG_GPMC_AD13_IN */ ++ {0x02A0, 2035, 0}, /* CFG_GPMC_AD14_IN */ ++ {0x02AC, 2279, 378}, /* CFG_GPMC_AD15_IN */ ++ {0x02B8, 2440, 70}, /* CFG_GPMC_AD1_IN */ ++ {0x02C4, 2404, 446}, /* CFG_GPMC_AD2_IN */ ++ {0x02D0, 2343, 212}, /* CFG_GPMC_AD3_IN */ ++ {0x02DC, 2355, 322}, /* CFG_GPMC_AD4_IN */ ++ {0x02E8, 2337, 192}, /* CFG_GPMC_AD5_IN */ ++ {0x02F4, 2270, 314}, /* CFG_GPMC_AD6_IN */ ++ {0x0300, 2339, 259}, /* CFG_GPMC_AD7_IN */ ++ {0x030C, 2308, 577}, /* CFG_GPMC_AD8_IN */ ++ {0x0318, 2334, 166}, /* CFG_GPMC_AD9_IN */ ++ {0x0378, 0, 0}, /* CFG_GPMC_CS3_IN */ ++ {0x0678, 0, 386}, /* CFG_MMC3_CLK_IN */ ++ {0x0680, 605, 0}, /* CFG_MMC3_CLK_OUT */ ++ {0x0684, 0, 0}, /* CFG_MMC3_CMD_IN */ ++ {0x0688, 0, 0}, /* CFG_MMC3_CMD_OEN */ ++ {0x068C, 0, 0}, /* CFG_MMC3_CMD_OUT */ ++ {0x0690, 171, 0}, /* CFG_MMC3_DAT0_IN */ ++ {0x0694, 0, 0}, /* CFG_MMC3_DAT0_OEN */ ++ {0x0698, 0, 0}, /* CFG_MMC3_DAT0_OUT */ ++ {0x069C, 221, 0}, /* CFG_MMC3_DAT1_IN */ ++ {0x06A0, 0, 0}, /* CFG_MMC3_DAT1_OEN */ ++ {0x06A4, 0, 0}, /* CFG_MMC3_DAT1_OUT */ ++ {0x06A8, 0, 0}, /* CFG_MMC3_DAT2_IN */ ++ {0x06AC, 0, 0}, /* CFG_MMC3_DAT2_OEN */ ++ {0x06B0, 0, 0}, /* CFG_MMC3_DAT2_OUT */ ++ {0x06B4, 474, 0}, /* CFG_MMC3_DAT3_IN */ ++ {0x06B8, 0, 0}, /* CFG_MMC3_DAT3_OEN */ ++ {0x06BC, 0, 0}, /* CFG_MMC3_DAT3_OUT */ ++ {0x06C0, 792, 0}, /* CFG_MMC3_DAT4_IN */ ++ {0x06C4, 0, 0}, /* CFG_MMC3_DAT4_OEN */ ++ {0x06C8, 0, 0}, /* CFG_MMC3_DAT4_OUT */ ++ {0x06CC, 782, 0}, /* CFG_MMC3_DAT5_IN */ ++ {0x06D0, 0, 0}, /* CFG_MMC3_DAT5_OEN */ ++ {0x06D4, 0, 0}, /* CFG_MMC3_DAT5_OUT */ ++ {0x06D8, 942, 0}, /* CFG_MMC3_DAT6_IN */ ++ {0x06DC, 0, 0}, /* CFG_MMC3_DAT6_OEN */ ++ {0x06E0, 0, 0}, /* CFG_MMC3_DAT6_OUT */ ++ {0x06E4, 636, 0}, /* CFG_MMC3_DAT7_IN */ ++ {0x06E8, 0, 0}, /* CFG_MMC3_DAT7_OEN */ ++ {0x06EC, 0, 0}, /* CFG_MMC3_DAT7_OUT */ ++ {0x06F0, 260, 0}, /* CFG_RGMII0_RXC_IN */ ++ {0x06FC, 0, 1412}, /* CFG_RGMII0_RXCTL_IN */ ++ {0x0708, 123, 1047}, /* CFG_RGMII0_RXD0_IN */ ++ {0x0714, 139, 1081}, /* CFG_RGMII0_RXD1_IN */ ++ {0x0720, 195, 1100}, /* CFG_RGMII0_RXD2_IN */ ++ {0x072C, 239, 1216}, /* CFG_RGMII0_RXD3_IN */ ++ {0x0740, 89, 0}, /* CFG_RGMII0_TXC_OUT */ ++ {0x074C, 15, 125}, /* CFG_RGMII0_TXCTL_OUT */ ++ {0x0758, 339, 162}, /* CFG_RGMII0_TXD0_OUT */ ++ {0x0764, 146, 94}, /* CFG_RGMII0_TXD1_OUT */ ++ {0x0770, 0, 27}, /* CFG_RGMII0_TXD2_OUT */ ++ {0x077C, 291, 205}, /* CFG_RGMII0_TXD3_OUT */ ++ {0x0A70, 0, 0}, /* CFG_VIN2A_D12_OUT */ ++ {0x0A7C, 219, 101}, /* CFG_VIN2A_D13_OUT */ ++ {0x0A88, 92, 58}, /* CFG_VIN2A_D14_OUT */ ++ {0x0A94, 135, 100}, /* CFG_VIN2A_D15_OUT */ ++ {0x0AA0, 154, 101}, /* CFG_VIN2A_D16_OUT */ ++ {0x0AAC, 78, 27}, /* CFG_VIN2A_D17_OUT */ ++ {0x0AB0, 411, 0}, /* CFG_VIN2A_D18_IN */ ++ {0x0ABC, 0, 382}, /* CFG_VIN2A_D19_IN */ ++ {0x0AD4, 320, 750}, /* CFG_VIN2A_D20_IN */ ++ {0x0AE0, 192, 836}, /* CFG_VIN2A_D21_IN */ ++ {0x0AEC, 294, 669}, /* CFG_VIN2A_D22_IN */ ++ {0x0AF8, 50, 700}, /* CFG_VIN2A_D23_IN */ ++ {0x0B9C, 0, 706}, /* CFG_VOUT1_CLK_OUT */ ++ {0x0BA8, 2313, 0}, /* CFG_VOUT1_D0_OUT */ ++ {0x0BB4, 2199, 0}, /* CFG_VOUT1_D10_OUT */ ++ {0x0BC0, 2266, 0}, /* CFG_VOUT1_D11_OUT */ ++ {0x0BCC, 3159, 0}, /* CFG_VOUT1_D12_OUT */ ++ {0x0BD8, 2100, 0}, /* CFG_VOUT1_D13_OUT */ ++ {0x0BE4, 2229, 0}, /* CFG_VOUT1_D14_OUT */ ++ {0x0BF0, 2202, 0}, /* CFG_VOUT1_D15_OUT */ ++ {0x0BFC, 2084, 0}, /* CFG_VOUT1_D16_OUT */ ++ {0x0C08, 2195, 0}, /* CFG_VOUT1_D17_OUT */ ++ {0x0C14, 2342, 0}, /* CFG_VOUT1_D18_OUT */ ++ {0x0C20, 2463, 0}, /* CFG_VOUT1_D19_OUT */ ++ {0x0C2C, 2439, 0}, /* CFG_VOUT1_D1_OUT */ ++ {0x0C38, 2304, 0}, /* CFG_VOUT1_D20_OUT */ ++ {0x0C44, 2103, 0}, /* CFG_VOUT1_D21_OUT */ ++ {0x0C50, 2145, 0}, /* CFG_VOUT1_D22_OUT */ ++ {0x0C5C, 1932, 0}, /* CFG_VOUT1_D23_OUT */ ++ {0x0C68, 2200, 0}, /* CFG_VOUT1_D2_OUT */ ++ {0x0C74, 2355, 0}, /* CFG_VOUT1_D3_OUT */ ++ {0x0C80, 3215, 0}, /* CFG_VOUT1_D4_OUT */ ++ {0x0C8C, 2314, 0}, /* CFG_VOUT1_D5_OUT */ ++ {0x0C98, 2238, 0}, /* CFG_VOUT1_D6_OUT */ ++ {0x0CA4, 2381, 0}, /* CFG_VOUT1_D7_OUT */ ++ {0x0CB0, 2138, 0}, /* CFG_VOUT1_D8_OUT */ ++ {0x0CBC, 2383, 0}, /* CFG_VOUT1_D9_OUT */ ++ {0x0CC8, 1984, 0}, /* CFG_VOUT1_DE_OUT */ ++ {0x0CE0, 1947, 0}, /* CFG_VOUT1_HSYNC_OUT */ ++ {0x0CEC, 2739, 0}, /* CFG_VOUT1_VSYNC_OUT */ ++}; ++ + const struct iodelay_cfg_entry iodelay_cfg_array_am574x_idk[] = { + {0x0114, 2199, 621}, /* CFG_GPMC_A0_IN */ + {0x0120, 0, 0}, /* CFG_GPMC_A10_IN */ +diff --git a/configs/am57xx_evm_defconfig b/configs/am57xx_evm_defconfig +index 3e2c166e0d..b1e2960a9f 100644 +--- a/configs/am57xx_evm_defconfig ++++ b/configs/am57xx_evm_defconfig +@@ -27,14 +27,20 @@ CONFIG_SPL_DMA_SUPPORT=y + CONFIG_SPL_OS_BOOT=y + CONFIG_SPL_SPI_LOAD=y + CONFIG_SPL_YMODEM_SUPPORT=y ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_AUTOBOOT_PROMPT="Press SPACE to abort autoboot in %d seconds\n" ++CONFIG_AUTOBOOT_DELAY_STR="d" ++CONFIG_AUTOBOOT_STOP_STR=" " + CONFIG_CMD_SPL=y + # CONFIG_CMD_FLASH is not set + # CONFIG_CMD_SETEXPR is not set + # CONFIG_CMD_PMIC is not set ++CONFIG_CMD_BTRFS=y + CONFIG_OF_CONTROL=y + CONFIG_SPL_OF_CONTROL=y +-CONFIG_DEFAULT_DEVICE_TREE="am572x-idk" +-CONFIG_OF_LIST="am57xx-beagle-x15 am57xx-beagle-x15-revb1 am57xx-beagle-x15-revc am572x-idk am571x-idk am574x-idk" ++CONFIG_DEFAULT_DEVICE_TREE="am5729-beagleboneai" ++CONFIG_OF_LIST="am57xx-beagle-x15 am57xx-beagle-x15-revb1 am57xx-beagle-x15-revc am5729-beagleboneai am572x-idk am571x-idk am574x-idk" ++# CONFIG_ENV_IS_IN_FAT is not set + CONFIG_ENV_IS_IN_MMC=y + CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y + CONFIG_DM=y +diff --git a/include/configs/am57xx_evm.h b/include/configs/am57xx_evm.h +index 70aa425060..fcc6ac7f8f 100644 +--- a/include/configs/am57xx_evm.h ++++ b/include/configs/am57xx_evm.h +@@ -24,7 +24,7 @@ + #define CONFIG_ENV_OFFSET_REDUND (CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE) + #define CONFIG_SYS_REDUNDAND_ENVIRONMENT + +-#define CONSOLEDEV "ttyO2" ++//#define CONSOLEDEV "ttyO2" + #define CONFIG_SYS_NS16550_COM1 UART1_BASE /* Base EVM has UART0 */ + #define CONFIG_SYS_NS16550_COM2 UART2_BASE /* UART2 */ + #define CONFIG_SYS_NS16550_COM3 UART3_BASE /* UART3 */ +diff --git a/include/configs/ti_armv7_common.h b/include/configs/ti_armv7_common.h +index 1e2a62dd6f..47f641165d 100644 +--- a/include/configs/ti_armv7_common.h ++++ b/include/configs/ti_armv7_common.h +@@ -80,6 +80,363 @@ + #define CONFIG_SYS_I2C + #endif + ++#define EEPROM_PROGRAMMING \ ++ "eeprom_dump=i2c dev 0; " \ ++ "i2c md 0x50 0x00.2 20; " \ ++ "\0" \ ++ "eeprom_blank=i2c dev 0; " \ ++ "i2c mw 0x50 0x00.2 ff; " \ ++ "i2c mw 0x50 0x01.2 ff; " \ ++ "i2c mw 0x50 0x02.2 ff; " \ ++ "i2c mw 0x50 0x03.2 ff; " \ ++ "i2c mw 0x50 0x04.2 ff; " \ ++ "i2c mw 0x50 0x05.2 ff; " \ ++ "i2c mw 0x50 0x06.2 ff; " \ ++ "i2c mw 0x50 0x07.2 ff; " \ ++ "i2c mw 0x50 0x08.2 ff; " \ ++ "i2c mw 0x50 0x09.2 ff; " \ ++ "i2c mw 0x50 0x0a.2 ff; " \ ++ "i2c mw 0x50 0x0b.2 ff; " \ ++ "i2c mw 0x50 0x0c.2 ff; " \ ++ "i2c mw 0x50 0x0d.2 ff; " \ ++ "i2c mw 0x50 0x0e.2 ff; " \ ++ "i2c mw 0x50 0x0f.2 ff; " \ ++ "i2c mw 0x50 0x10.2 ff; " \ ++ "i2c mw 0x50 0x11.2 ff; " \ ++ "i2c mw 0x50 0x12.2 ff; " \ ++ "i2c mw 0x50 0x13.2 ff; " \ ++ "i2c mw 0x50 0x14.2 ff; " \ ++ "i2c mw 0x50 0x15.2 ff; " \ ++ "i2c mw 0x50 0x16.2 ff; " \ ++ "i2c mw 0x50 0x17.2 ff; " \ ++ "i2c mw 0x50 0x18.2 ff; " \ ++ "i2c mw 0x50 0x19.2 ff; " \ ++ "i2c mw 0x50 0x1a.2 ff; " \ ++ "i2c mw 0x50 0x1b.2 ff; " \ ++ "i2c mw 0x50 0x1c.2 ff; " \ ++ "i2c mw 0x50 0x1d.2 ff; " \ ++ "i2c mw 0x50 0x1e.2 ff; " \ ++ "i2c mw 0x50 0x1f.2 ff; " \ ++ "i2c md 0x50 0x00.2 20; " \ ++ "\0" \ ++ "eeprom_x15_b1=i2c dev 0; " \ ++ "i2c mw 0x50 0x00.2 aa; " \ ++ "i2c mw 0x50 0x01.2 55; " \ ++ "i2c mw 0x50 0x02.2 33; " \ ++ "i2c mw 0x50 0x03.2 ee; " \ ++ "i2c mw 0x50 0x04.2 42; " \ ++ "i2c mw 0x50 0x05.2 42; " \ ++ "i2c mw 0x50 0x06.2 52; " \ ++ "i2c mw 0x50 0x07.2 44; " \ ++ "i2c mw 0x50 0x08.2 58; " \ ++ "i2c mw 0x50 0x09.2 31; " \ ++ "i2c mw 0x50 0x0a.2 35; " \ ++ "i2c mw 0x50 0x0b.2 5f; " \ ++ "i2c mw 0x50 0x0c.2 42; " \ ++ "i2c mw 0x50 0x0d.2 2e; " \ ++ "i2c mw 0x50 0x0e.2 31; " \ ++ "i2c mw 0x50 0x0f.2 30; " \ ++ "i2c mw 0x50 0x10.2 57; " \ ++ "i2c mw 0x50 0x11.2 57; " \ ++ "i2c mw 0x50 0x12.2 59; " \ ++ "i2c mw 0x50 0x13.2 59; " \ ++ "i2c mw 0x50 0x14.2 34; " \ ++ "i2c mw 0x50 0x15.2 50; " \ ++ "i2c mw 0x50 0x16.2 35; " \ ++ "i2c mw 0x50 0x17.2 35; " \ ++ "i2c mw 0x50 0x18.2 30; " \ ++ "i2c mw 0x50 0x19.2 30; " \ ++ "i2c mw 0x50 0x1a.2 30; " \ ++ "i2c mw 0x50 0x1b.2 30; " \ ++ "i2c mw 0x50 0x1c.2 ff; " \ ++ "i2c mw 0x50 0x1d.2 ff; " \ ++ "i2c mw 0x50 0x1e.2 ff; " \ ++ "i2c mw 0x50 0x1f.2 ff; " \ ++ "i2c md 0x50 0x00.2 20; " \ ++ "\0" \ ++ "eeprom_x15_c=i2c dev 0; " \ ++ "i2c mw 0x50 0x00.2 aa; " \ ++ "i2c mw 0x50 0x01.2 55; " \ ++ "i2c mw 0x50 0x02.2 33; " \ ++ "i2c mw 0x50 0x03.2 ee; " \ ++ "i2c mw 0x50 0x04.2 42; " \ ++ "i2c mw 0x50 0x05.2 42; " \ ++ "i2c mw 0x50 0x06.2 52; " \ ++ "i2c mw 0x50 0x07.2 44; " \ ++ "i2c mw 0x50 0x08.2 58; " \ ++ "i2c mw 0x50 0x09.2 31; " \ ++ "i2c mw 0x50 0x0a.2 35; " \ ++ "i2c mw 0x50 0x0b.2 5f; " \ ++ "i2c mw 0x50 0x0c.2 43; " \ ++ "i2c mw 0x50 0x0d.2 2e; " \ ++ "i2c mw 0x50 0x0e.2 30; " \ ++ "i2c mw 0x50 0x0f.2 30; " \ ++ "i2c mw 0x50 0x10.2 79; " \ ++ "i2c mw 0x50 0x11.2 79; " \ ++ "i2c mw 0x50 0x12.2 77; " \ ++ "i2c mw 0x50 0x13.2 77; " \ ++ "i2c mw 0x50 0x14.2 50; " \ ++ "i2c mw 0x50 0x15.2 58; " \ ++ "i2c mw 0x50 0x16.2 31; " \ ++ "i2c mw 0x50 0x17.2 35; " \ ++ "i2c mw 0x50 0x18.2 6e; " \ ++ "i2c mw 0x50 0x19.2 6e; " \ ++ "i2c mw 0x50 0x1a.2 6e; " \ ++ "i2c mw 0x50 0x1b.2 6e; " \ ++ "i2c mw 0x50 0x1c.2 ff; " \ ++ "i2c mw 0x50 0x1d.2 ff; " \ ++ "i2c mw 0x50 0x1e.2 ff; " \ ++ "i2c mw 0x50 0x1f.2 ff; " \ ++ "i2c md 0x50 0x00.2 20; " \ ++ "\0" \ ++ ++#define EEWIKI_MMC_BOOT \ ++ "mmc_boot=${devtype} dev ${mmcdev}; ${devtype} part; " \ ++ "if ${devtype} rescan; then " \ ++ "echo Scanning ${devtype} device ${mmcdev};" \ ++ "setenv bootpart ${mmcdev}:1; " \ ++ "echo Checking for: /uEnv.txt ...;" \ ++ "if test -e ${devtype} ${bootpart} /uEnv.txt; then " \ ++ "load ${devtype} ${bootpart} ${loadaddr} /uEnv.txt;" \ ++ "env import -t ${loadaddr} ${filesize};" \ ++ "echo Loaded environment from /uEnv.txt;" \ ++ "echo Checking if uenvcmd is set ...;" \ ++ "if test -n ${uenvcmd}; then " \ ++ "echo Running uenvcmd ...;" \ ++ "run uenvcmd;" \ ++ "fi;" \ ++ "fi; " \ ++ "echo Checking for: /boot/uEnv.txt ...;" \ ++ "for i in 1 2 3 4 5 6 7 ; do " \ ++ "setenv mmcpart ${i};" \ ++ "setenv bootpart ${mmcdev}:${mmcpart};" \ ++ "if test -e ${devtype} ${bootpart} /boot/uEnv.txt; then " \ ++ "load ${devtype} ${bootpart} ${loadaddr} /boot/uEnv.txt;" \ ++ "env import -t ${loadaddr} ${filesize};" \ ++ "echo Loaded environment from /boot/uEnv.txt;" \ ++ "if test -n ${dtb}; then " \ ++ "setenv fdtfile ${dtb};" \ ++ "echo debug: [dtb=${fdtfile}] ...;" \ ++ "fi;" \ ++ "echo Checking if uname_r is set in /boot/uEnv.txt ...;" \ ++ "if test -n ${uname_r}; then " \ ++ "echo debug: [uname_r=${uname_r}] ...;" \ ++ "setenv oldroot /dev/mmcblk${mmcdev}p${mmcpart};" \ ++ "run uname_boot;" \ ++ "fi;" \ ++ "fi;" \ ++ "done;" \ ++ "fi;\0" \ ++ ++#define EEWIKI_SCSI_BOOT \ ++ "scsi_boot=${devtype} reset ; " \ ++ "if ${devtype} dev ${mmcdev}; then " \ ++ "echo Scanning ${devtype} device ${mmcdev};" \ ++ "setenv bootpart ${mmcdev}:1; " \ ++ "echo Checking for: /uEnv.txt ...;" \ ++ "if test -e ${devtype} ${bootpart} /uEnv.txt; then " \ ++ "load ${devtype} ${bootpart} ${loadaddr} /uEnv.txt;" \ ++ "env import -t ${loadaddr} ${filesize};" \ ++ "echo Loaded environment from /uEnv.txt;" \ ++ "echo Checking if uenvcmd is set ...;" \ ++ "if test -n ${uenvcmd}; then " \ ++ "echo Running uenvcmd ...;" \ ++ "run uenvcmd;" \ ++ "fi;" \ ++ "fi; " \ ++ "echo Checking for: /boot/uEnv.txt ...;" \ ++ "for i in 1 2 3 4 ; do " \ ++ "setenv mmcpart ${i};" \ ++ "setenv bootpart ${mmcdev}:${mmcpart};" \ ++ "if test -e ${devtype} ${bootpart} /boot/uEnv.txt; then " \ ++ "load ${devtype} ${bootpart} ${loadaddr} /boot/uEnv.txt;" \ ++ "env import -t ${loadaddr} ${filesize};" \ ++ "echo Loaded environment from /boot/uEnv.txt;" \ ++ "if test -n ${dtb}; then " \ ++ "setenv fdtfile ${dtb};" \ ++ "echo debug: [dtb=${fdtfile}] ...;" \ ++ "fi;" \ ++ "echo Checking if uname_r is set in /boot/uEnv.txt ...;" \ ++ "if test -n ${uname_r}; then " \ ++ "echo debug: [uname_r=${uname_r}] ...;" \ ++ "setenv oldroot /dev/sda${mmcpart};" \ ++ "run uname_boot;" \ ++ "fi;" \ ++ "fi;" \ ++ "done;" \ ++ "fi;\0" \ ++ ++#define EEWIKI_USB_BOOT \ ++ "usb_boot=${devtype} reset ; " \ ++ "if ${devtype} dev ${mmcdev}; then " \ ++ "echo Scanning ${devtype} device ${mmcdev};" \ ++ "setenv bootpart ${mmcdev}:1; " \ ++ "echo Checking for: /uEnv.txt ...;" \ ++ "if test -e ${devtype} ${bootpart} /uEnv.txt; then " \ ++ "load ${devtype} ${bootpart} ${loadaddr} /uEnv.txt;" \ ++ "env import -t ${loadaddr} ${filesize};" \ ++ "echo Loaded environment from /uEnv.txt;" \ ++ "echo Checking if uenvcmd is set in /uEnv.txt ...;" \ ++ "if test -n ${uenvcmd}; then " \ ++ "echo Running uenvcmd ...;" \ ++ "run uenvcmd;" \ ++ "fi;" \ ++ "fi; " \ ++ "echo Checking for: /boot/uEnv.txt ...;" \ ++ "for i in 1 2 3 4 ; do " \ ++ "setenv mmcpart ${i};" \ ++ "setenv bootpart ${mmcdev}:${mmcpart};" \ ++ "if test -e ${devtype} ${bootpart} /boot/uEnv.txt; then " \ ++ "load ${devtype} ${bootpart} ${loadaddr} /boot/uEnv.txt;" \ ++ "env import -t ${loadaddr} ${filesize};" \ ++ "echo Loaded environment from /boot/uEnv.txt;" \ ++ "if test -n ${dtb}; then " \ ++ "setenv fdtfile ${dtb};" \ ++ "echo debug: [dtb=${fdtfile}] ...;" \ ++ "fi;" \ ++ "echo Checking if uname_r is set in /boot/uEnv.txt ...;" \ ++ "if test -n ${uname_r}; then " \ ++ "echo debug: [uname_r=${uname_r}] ...;" \ ++ "setenv oldroot /dev/sda${mmcpart};" \ ++ "run uname_boot;" \ ++ "fi;" \ ++ "fi;" \ ++ "done;" \ ++ "fi;\0" \ ++ ++#define EEWIKI_UNAME_BOOT \ ++ "uname_boot="\ ++ "setenv bootdir /boot; " \ ++ "setenv bootfile vmlinuz-${uname_r}; " \ ++ "if test -e ${devtype} ${bootpart} ${bootdir}/${bootfile}; then " \ ++ "echo loading ${bootdir}/${bootfile} ...; "\ ++ "run loadimage;" \ ++ "setenv fdtdir /boot/dtbs/${uname_r}; " \ ++ "if test -e ${devtype} ${bootpart} ${fdtdir}/${fdtfile}; then " \ ++ "run loadfdt;" \ ++ "else " \ ++ "setenv fdtdir /usr/lib/linux-image-${uname_r}; " \ ++ "if test -e ${devtype} ${bootpart} ${fdtdir}/${fdtfile}; then " \ ++ "run loadfdt;" \ ++ "else " \ ++ "setenv fdtdir /lib/firmware/${uname_r}/device-tree; " \ ++ "if test -e ${devtype} ${bootpart} ${fdtdir}/${fdtfile}; then " \ ++ "run loadfdt;" \ ++ "else " \ ++ "setenv fdtdir /boot/dtb-${uname_r}; " \ ++ "if test -e ${devtype} ${bootpart} ${fdtdir}/${fdtfile}; then " \ ++ "run loadfdt;" \ ++ "else " \ ++ "setenv fdtdir /boot/dtbs; " \ ++ "if test -e ${devtype} ${bootpart} ${fdtdir}/${fdtfile}; then " \ ++ "run loadfdt;" \ ++ "else " \ ++ "setenv fdtdir /boot/dtb; " \ ++ "if test -e ${devtype} ${bootpart} ${fdtdir}/${fdtfile}; then " \ ++ "run loadfdt;" \ ++ "else " \ ++ "setenv fdtdir /boot; " \ ++ "if test -e ${devtype} ${bootpart} ${fdtdir}/${fdtfile}; then " \ ++ "run loadfdt;" \ ++ "else " \ ++ "echo; echo unable to find ${fdtfile} ...; echo booting legacy ...;"\ ++ "run args_mmc;" \ ++ "echo debug: [${bootargs}] ... ;" \ ++ "echo debug: [bootz ${loadaddr}] ... ;" \ ++ "bootz ${loadaddr}; " \ ++ "fi;" \ ++ "fi;" \ ++ "fi;" \ ++ "fi;" \ ++ "fi;" \ ++ "fi;" \ ++ "fi; " \ ++ "if test -n ${enable_uboot_overlays}; then " \ ++ "setenv fdt_buffer 0x60000;" \ ++ "if test -n ${uboot_fdt_buffer}; then " \ ++ "setenv fdt_buffer ${uboot_fdt_buffer};" \ ++ "fi;" \ ++ "echo uboot_overlays: [fdt_buffer=${fdt_buffer}] ... ;" \ ++ "if test -n ${uboot_overlay_addr0}; then " \ ++ "setenv uboot_overlay ${uboot_overlay_addr0}; " \ ++ "run capeloadoverlay;" \ ++ "fi;" \ ++ "if test -n ${uboot_overlay_addr1}; then " \ ++ "setenv uboot_overlay ${uboot_overlay_addr1}; " \ ++ "run capeloadoverlay;" \ ++ "fi;" \ ++ "if test -n ${uboot_overlay_addr2}; then " \ ++ "setenv uboot_overlay ${uboot_overlay_addr2}; " \ ++ "run capeloadoverlay;" \ ++ "fi;" \ ++ "if test -n ${uboot_overlay_addr3}; then " \ ++ "setenv uboot_overlay ${uboot_overlay_addr3}; " \ ++ "run capeloadoverlay;" \ ++ "fi;" \ ++ "if test -n ${uboot_overlay_addr4}; then " \ ++ "setenv uboot_overlay ${uboot_overlay_addr4}; " \ ++ "run capeloadoverlay;" \ ++ "fi;" \ ++ "if test -n ${uboot_overlay_addr5}; then " \ ++ "setenv uboot_overlay ${uboot_overlay_addr5}; " \ ++ "run capeloadoverlay;" \ ++ "fi;" \ ++ "if test -n ${uboot_overlay_addr6}; then " \ ++ "setenv uboot_overlay ${uboot_overlay_addr6}; " \ ++ "run capeloadoverlay;" \ ++ "fi;" \ ++ "if test -n ${uboot_overlay_addr7}; then " \ ++ "setenv uboot_overlay ${uboot_overlay_addr7}; " \ ++ "run capeloadoverlay;" \ ++ "fi;" \ ++ "if test -n ${uboot_overlay_pru}; then " \ ++ "setenv uboot_overlay ${uboot_overlay_pru}; " \ ++ "run virtualloadoverlay;" \ ++ "fi;" \ ++ "else " \ ++ "echo uboot_overlays: add [enable_uboot_overlays=1] to /boot/uEnv.txt to enable...;" \ ++ "fi;" \ ++ "setenv rdfile initrd.img-${uname_r}; " \ ++ "if test -e ${devtype} ${bootpart} ${bootdir}/${rdfile}; then " \ ++ "echo loading ${bootdir}/${rdfile} ...; "\ ++ "run loadrd;" \ ++ "if test -n ${netinstall_enable}; then " \ ++ "run args_netinstall; run message;" \ ++ "echo debug: [${bootargs}] ... ;" \ ++ "echo debug: [bootz ${loadaddr} ${rdaddr}:${rdsize} ${fdtaddr}] ... ;" \ ++ "bootz ${loadaddr} ${rdaddr}:${rdsize} ${fdtaddr}; " \ ++ "fi;" \ ++ "if test -n ${uenv_root}; then " \ ++ "run args_uenv_root;" \ ++ "echo debug: [${bootargs}] ... ;" \ ++ "echo debug: [bootz ${loadaddr} ${rdaddr}:${rdsize} ${fdtaddr}] ... ;" \ ++ "bootz ${loadaddr} ${rdaddr}:${rdsize} ${fdtaddr}; " \ ++ "fi;" \ ++ "if test -n ${uuid}; then " \ ++ "run args_mmc_uuid;" \ ++ "echo debug: [${bootargs}] ... ;" \ ++ "echo debug: [bootz ${loadaddr} ${rdaddr}:${rdsize} ${fdtaddr}] ... ;" \ ++ "bootz ${loadaddr} ${rdaddr}:${rdsize} ${fdtaddr}; " \ ++ "else " \ ++ "run args_mmc_old;" \ ++ "echo debug: [${bootargs}] ... ;" \ ++ "echo debug: [bootz ${loadaddr} ${rdaddr}:${rdsize} ${fdtaddr}] ... ;" \ ++ "bootz ${loadaddr} ${rdaddr}:${rdsize} ${fdtaddr}; " \ ++ "fi;" \ ++ "else " \ ++ "if test -n ${uenv_root}; then " \ ++ "run args_uenv_root;" \ ++ "echo debug: [${bootargs}] ... ;" \ ++ "echo debug: [bootz ${loadaddr} - ${fdtaddr}] ... ;" \ ++ "bootz ${loadaddr} - ${fdtaddr}; " \ ++ "fi;" \ ++ "run args_mmc_old;" \ ++ "echo debug: [${bootargs}] ... ;" \ ++ "echo debug: [bootz ${loadaddr} - ${fdtaddr}] ... ;" \ ++ "bootz ${loadaddr} - ${fdtaddr}; " \ ++ "fi;" \ ++ "fi;\0" \ ++ + /* + * The following are general good-enough settings for U-Boot. We set a + * large malloc pool as we generally have a lot of DDR, and we opt for +diff --git a/include/configs/ti_omap5_common.h b/include/configs/ti_omap5_common.h +index ba57c40182..93368cdc51 100644 +--- a/include/configs/ti_omap5_common.h ++++ b/include/configs/ti_omap5_common.h +@@ -63,6 +63,11 @@ + DEFAULT_FIT_TI_ARGS \ + DEFAULT_COMMON_BOOT_TI_ARGS \ + DEFAULT_FDT_TI_ARGS \ ++ EEWIKI_USB_BOOT \ ++ EEWIKI_SCSI_BOOT \ ++ EEWIKI_MMC_BOOT \ ++ EEWIKI_UNAME_BOOT \ ++ EEPROM_PROGRAMMING \ + DFUARGS \ + NETARGS \ + +diff --git a/include/environment/ti/boot.h b/include/environment/ti/boot.h +index 05bdbbc23e..b0254b064a 100644 +--- a/include/environment/ti/boot.h ++++ b/include/environment/ti/boot.h +@@ -64,32 +64,18 @@ + "bootpart=0:2\0" \ + "bootdir=/boot\0" \ + "bootfile=zImage\0" \ ++ "board_eeprom_header=undefined\0" \ + "usbtty=cdc_acm\0" \ + "vram=16M\0" \ + AVB_VERIFY_CMD \ + "partitions=" PARTS_DEFAULT "\0" \ + "optargs=\0" \ + "dofastboot=0\0" \ +- "emmc_linux_boot=" \ +- "echo Trying to boot Linux from eMMC ...; " \ +- "setenv mmcdev 1; " \ +- "setenv bootpart 1:2; " \ +- "setenv mmcroot /dev/mmcblk0p2 rw; " \ +- "run mmcboot;\0" \ +- "emmc_android_boot=" \ +- "echo Trying to boot Android from eMMC ...; " \ +- "run update_to_fit; " \ +- "setenv eval_bootargs setenv bootargs $bootargs; " \ +- "run eval_bootargs; " \ +- "setenv mmcdev 1; " \ +- "setenv machid fe6; " \ +- "mmc dev $mmcdev; " \ +- "mmc rescan; " \ +- AVB_VERIFY_CHECK \ +- "part start mmc ${mmcdev} boot boot_start; " \ +- "part size mmc ${mmcdev} boot boot_size; " \ +- "mmc read ${loadaddr} ${boot_start} ${boot_size}; " \ +- "bootm ${loadaddr}#${fdtfile};\0 " ++ "read_board_eeprom="\ ++ "if test $board_eeprom_header = beagle_x15_revb1_blank; then " \ ++ "run eeprom_dump; run eeprom_x15_b1; reset; fi; " \ ++ "if test $board_eeprom_header = beagle_x15_revc_blank; then " \ ++ "run eeprom_dump; run eeprom_x15_c; reset; fi; \0 " + + #ifdef CONFIG_OMAP54XX + +@@ -127,20 +113,17 @@ + "echo WARNING: Could not determine device tree to use; fi; \0" + + #define CONFIG_BOOTCOMMAND \ +- "if test ${dofastboot} -eq 1; then " \ +- "echo Boot fastboot requested, resetting dofastboot ...;" \ +- "setenv dofastboot 0; saveenv;" \ +- "echo Booting into fastboot ...; " \ +- "fastboot " __stringify(CONFIG_FASTBOOT_USB_DEV) "; " \ +- "fi;" \ +- "if test ${boot_fit} -eq 1; then " \ +- "run update_to_fit;" \ +- "fi;" \ ++ "run read_board_eeprom; " \ + "run findfdt; " \ +- "run envboot; " \ +- "run mmcboot;" \ +- "run emmc_linux_boot; " \ +- "run emmc_android_boot; " \ ++ "setenv mmcdev 0; " \ ++ "setenv devtype usb; " \ ++ "echo usb_boot is currently disabled;" \ ++ "setenv devtype scsi; " \ ++ "echo scsi_boot is currently disabled;" \ ++ "setenv devtype mmc; " \ ++ "run mmc_boot;" \ ++ "setenv mmcdev 1; " \ ++ "run mmc_boot;" \ + "" + + #endif /* CONFIG_OMAP54XX */ +diff --git a/include/environment/ti/mmc.h b/include/environment/ti/mmc.h +index 785fc15345..6481682fc7 100644 +--- a/include/environment/ti/mmc.h ++++ b/include/environment/ti/mmc.h +@@ -11,11 +11,33 @@ + #define DEFAULT_MMC_TI_ARGS \ + "mmcdev=0\0" \ + "mmcrootfstype=ext4 rootwait\0" \ +- "finduuid=part uuid mmc ${bootpart} uuid\0" \ ++ "finduuid=part uuid ${devtype} ${bootpart} uuid\0" \ + "args_mmc=run finduuid;setenv bootargs console=${console} " \ + "${optargs} " \ +- "root=PARTUUID=${uuid} rw " \ +- "rootfstype=${mmcrootfstype}\0" \ ++ "root=PARTUUID=${uuid} ro " \ ++ "rootfstype=${mmcrootfstype} " \ ++ "${cmdline}\0" \ ++ "args_mmc_old=setenv bootargs console=${console} " \ ++ "${optargs} " \ ++ "root=${oldroot} ro " \ ++ "rootfstype=${mmcrootfstype} " \ ++ "${cmdline}\0" \ ++ "args_mmc_uuid=setenv bootargs console=${console} " \ ++ "${optargs} " \ ++ "root=UUID=${uuid} ro " \ ++ "rootfstype=${mmcrootfstype} " \ ++ "${cmdline}\0" \ ++ "args_uenv_root=setenv bootargs console=${console} " \ ++ "${optargs} " \ ++ "root=${uenv_root} ro " \ ++ "rootfstype=${mmcrootfstype} " \ ++ "${musb} ${cmdline}\0" \ ++ "args_netinstall=setenv bootargs ${netinstall_bootargs} " \ ++ "${optargs} " \ ++ "${cape_disable} " \ ++ "${cape_enable} " \ ++ "root=/dev/ram rw " \ ++ "${cmdline}\0" \ + "loadbootscript=load mmc ${mmcdev} ${loadaddr} boot.scr\0" \ + "bootscript=echo Running bootscript from mmc${mmcdev} ...; " \ + "source ${loadaddr}\0" \ +@@ -24,7 +46,22 @@ + "env import -t ${loadaddr} ${filesize}\0" \ + "loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenvfile}\0" \ + "loadimage=load ${devtype} ${bootpart} ${loadaddr} ${bootdir}/${bootfile}\0" \ +- "loadfdt=load ${devtype} ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile}\0" \ ++ "loadrd=load ${devtype} ${bootpart} ${rdaddr} ${bootdir}/${rdfile}; setenv rdsize ${filesize}\0" \ ++ "loadfdt=echo loading ${fdtdir}/${fdtfile} ...; load ${devtype} ${bootpart} ${fdtaddr} ${fdtdir}/${fdtfile}\0" \ ++ "loadoverlay=echo uboot_overlays: loading ${uboot_overlay} ...; " \ ++ "load ${devtype} ${bootpart} ${rdaddr} ${uboot_overlay}; " \ ++ "fdt addr ${fdtaddr}; fdt resize ${fdt_buffer}; " \ ++ "fdt apply ${rdaddr}; fdt resize ${fdt_buffer};\0" \ ++ "virtualloadoverlay=if test -e ${devtype} ${bootpart} ${uboot_overlay}; then " \ ++ "run loadoverlay;" \ ++ "else " \ ++ "echo uboot_overlays: unable to find [${devtype} ${bootpart} ${uboot_overlay}]...;" \ ++ "fi;\0" \ ++ "capeloadoverlay=if test -e ${devtype} ${bootpart} ${uboot_overlay}; then " \ ++ "run loadoverlay;" \ ++ "else " \ ++ "echo uboot_overlays: unable to find [${devtype} ${bootpart} ${uboot_overlay}]...;" \ ++ "fi;\0" \ + "envboot=mmc dev ${mmcdev}; " \ + "if mmc rescan; then " \ + "echo SD/MMC found on device ${mmcdev};" \ +-- +2.17.1 + diff --git a/board/beagleboneai/post-build.sh b/board/beagleboneai/post-build.sh new file mode 100755 index 00000000..34a86cc7 --- /dev/null +++ b/board/beagleboneai/post-build.sh @@ -0,0 +1,4 @@ +#!/bin/sh +BOARD_DIR="$(dirname $0)" + +cp board/beagleboneai/uEnv.txt $BINARIES_DIR/uEnv.txt diff --git a/board/beagleboneai/readme.txt b/board/beagleboneai/readme.txt new file mode 100644 index 00000000..f4c798f5 --- /dev/null +++ b/board/beagleboneai/readme.txt @@ -0,0 +1,28 @@ +Intro +===== + +This configuration will build a basic image for the BeagleBoard.org +BeagleBone AI. For more details about the board, visit: + +https://beagleboard.org/ai + +How to build it +=============== + +Configure Buildroot: + + $ make beagleboneai_defconfig + +Compile everything and build the USB flash drive image: + + $ make + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX diff --git a/board/beagleboneai/uEnv.txt b/board/beagleboneai/uEnv.txt new file mode 100644 index 00000000..d38df772 --- /dev/null +++ b/board/beagleboneai/uEnv.txt @@ -0,0 +1,6 @@ +bootpart=0:1 +bootdir=/ +bootargs=console=ttyS0,115200n8 root=/dev/mmcblk0p2 ro rootwait +devtype=mmc +fdtfile=am5729-beagleboneai.dtb +uenvcmd=run loadimage; run loadfdt; printenv bootargs; bootz ${loadaddr} - ${fdtaddr} diff --git a/board/beelink/gs1/extlinux.conf b/board/beelink/gs1/extlinux.conf new file mode 100644 index 00000000..046681f7 --- /dev/null +++ b/board/beelink/gs1/extlinux.conf @@ -0,0 +1,4 @@ +label linux + kernel /Image + devicetree /sun50i-h6-beelink-gs1.dtb + append console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait diff --git a/board/beelink/gs1/genimage.cfg b/board/beelink/gs1/genimage.cfg new file mode 100644 index 00000000..88bbd265 --- /dev/null +++ b/board/beelink/gs1/genimage.cfg @@ -0,0 +1,33 @@ +image boot.vfat { + vfat { + files = { + "Image", + "sun50i-h6-beelink-gs1.dtb", + "extlinux" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/beelink/gs1/post-build.sh b/board/beelink/gs1/post-build.sh new file mode 100755 index 00000000..ec20fca7 --- /dev/null +++ b/board/beelink/gs1/post-build.sh @@ -0,0 +1,4 @@ +#!/bin/sh +BOARD_DIR="$(dirname $0)" + +install -m 0644 -D $BOARD_DIR/extlinux.conf $BINARIES_DIR/extlinux/extlinux.conf diff --git a/board/boundarydevices/common/boot.cmd b/board/boundarydevices/common/boot.cmd new file mode 100644 index 00000000..dbc3b3c3 --- /dev/null +++ b/board/boundarydevices/common/boot.cmd @@ -0,0 +1,157 @@ +setenv bootargs '' + +setenv initrd_high 0xffffffff +m4='' +kernelimage=zImage +bootcommand=bootz +a_base=0x10000000 +if itest.s x51 == "x${imx_cpu}" ; then + a_base=0x90000000 +elif itest.s x53 == "x${imx_cpu}"; then + a_base=0x70000000 +elif itest.s x6SX == "x${imx_cpu}" || itest.s x6ULL == "x${imx_cpu}" || itest.s x7D == "x${imx_cpu}"; then + a_base=0x80000000 +elif itest.s x8MQ == "x${imx_cpu}" || itest.s x8MM == "x${imx_cpu}" || itest.s x8MMQ == "x${imx_cpu}" || itest.s x8MNano == "x${imx_cpu}"; then + a_base=0x40000000 + kernelimage=Image + bootcommand=booti +fi +if itest.s "x1" == "x${m4enabled}" ; then + run m4boot; + m4='-m4'; +fi + +setexpr a_script ${a_base} + 0x00800000 +setexpr a_zImage ${a_base} + 0x00800000 +setexpr a_fdt ${a_base} + 0x03000000 +setexpr a_ramdisk ${a_base} + 0x03800000 +setexpr a_initrd ${a_base} + 0x03a00000 +setexpr a_reset_cause_marker ${a_base} + 0x80 +setexpr a_reset_cause ${a_base} + 0x84 + +if itest.s "x" == "x${board}" ; then + echo "!!!! Error: Your u-boot is outdated. Please upgrade."; + exit; +fi + +if itest.s "x" == "x${fdt_file}" ; then + if itest.s x6SOLO == "x${imx_cpu}" ; then + fdt_file=imx6dl-${board}.dtb; + elif itest.s x6DL == "x${imx_cpu}" ; then + fdt_file=imx6dl-${board}.dtb; + elif itest.s x6QP == "x${imx_cpu}" ; then + fdt_file=imx6qp-${board}.dtb; + elif itest.s x6SX == "x${imx_cpu}" ; then + fdt_file=imx6sx-${board}${m4}.dtb; + elif itest.s x6ULL == "x${imx_cpu}" ; then + fdt_file=imx6ull-${board}.dtb; + elif itest.s x7D == "x${imx_cpu}" ; then + fdt_file=imx7d-${board}${m4}.dtb; + elif itest.s x8MQ == "x${imx_cpu}" ; then + fdt_file=imx8mq-${board}${m4}.dtb; + elif itest.s x8MM == "x${imx_cpu}" ; then + fdt_file=imx8mm-${board}${m4}.dtb; + elif itest.s x8MMQ == "x${imx_cpu}" ; then + fdt_file=imx8mm-${board}${m4}.dtb; + elif itest.s x8MNano == "x${imx_cpu}" ; then + fdt_file=imx8mn-${board}${m4}.dtb; + elif itest.s x51 == "x${imx_cpu}" ; then + fdt_file=imx51-${board}.dtb; + elif itest.s x53 == "x${imx_cpu}" ; then + fdt_file=imx53-${board}.dtb; + else + fdt_file=imx6q-${board}.dtb; + fi +fi + +if itest.s x${distro_bootpart} == x ; then + distro_bootpart=1 +fi + +if load ${devtype} ${devnum}:${distro_bootpart} ${a_script} uEnv.txt ; then + env import -t ${a_script} ${filesize} +fi +setenv bootargs ${bootargs} console=${console},115200 vmalloc=400M consoleblank=0 rootwait fixrtc cpu=${imx_cpu} board=${board} + +if load ${devtype} ${devnum}:${distro_bootpart} ${a_fdt} ${prefix}${fdt_file} ; then + fdt addr ${a_fdt} + setenv fdt_high 0xffffffff +else + echo "!!!! Error loading ${prefix}${fdt_file}"; + exit; +fi + +fdt resize 4096 +if itest.s "x" != "x${cmd_board}" ; then + run cmd_board +fi +if itest.s "x" != "x${cmd_custom}" ; then + run cmd_custom +fi +if itest.s "x" != "x${cmd_hdmi}" ; then + run cmd_hdmi + if itest.s x != x${allow_noncea} ; then + setenv bootargs ${bootargs} mxc_hdmi.only_cea=0; + echo "non-CEA modes allowed on HDMI, audio may be affected"; + fi +fi +if itest.s "x" != "x${cmd_lcd}" ; then + run cmd_lcd +fi +if itest.s "x" != "x${cmd_lcd2}" ; then + run cmd_lcd2 +fi +if itest.s "x" != "x${cmd_lvds}" ; then + run cmd_lvds +fi +if itest.s "x" != "x${cmd_lvds2}" ; then + run cmd_lvds2 +fi +if itest.s "x" != "x${cmd_mipi}" ; then + run cmd_mipi +fi + +if test "sata" = "${devtype}" ; then + setenv bootargs "${bootargs} root=/dev/sda${distro_bootpart}" ; +elif test "usb" = "${devtype}" ; then + setenv bootargs "${bootargs} root=/dev/sda${distro_bootpart}" ; +else + setenv bootargs "${bootargs} root=/dev/mmcblk${devnum}p${distro_bootpart}" +fi + +if itest.s "x" != "x${disable_msi}" ; then + setenv bootargs ${bootargs} pci=nomsi +fi; + +if itest.s "x" != "x${disable_giga}" ; then + setenv bootargs ${bootargs} fec.disable_giga=1 +fi + +if itest.s "x" != "x${wlmac}" ; then + setenv bootargs ${bootargs} wlcore.mac=${wlmac} +fi + +if itest.s "x" != "x${gpumem}" ; then + setenv bootargs ${bootargs} galcore.contiguousSize=${gpumem} +fi + +if itest.s "x" != "x${cma}" ; then + setenv bootargs ${bootargs} cma=${cma} +fi + +if itest.s "x" != "x${loglevel}" ; then + setenv bootargs ${bootargs} loglevel=${loglevel} +fi + +if itest.s "x" != "x${show_fdt}" ; then + fdt print / +fi + +if itest.s "x" != "x${show_env}" ; then + printenv +fi + +if load ${devtype} ${devnum}:${distro_bootpart} ${a_zImage} ${prefix}${kernelimage} ; then + ${bootcommand} ${a_zImage} - ${a_fdt} +fi +echo "Error loading kernel image" diff --git a/board/boundarydevices/common/genimage.cfg b/board/boundarydevices/common/genimage.cfg new file mode 100644 index 00000000..a383fb75 --- /dev/null +++ b/board/boundarydevices/common/genimage.cfg @@ -0,0 +1,18 @@ +# Minimal SD card image for Boundary Devices platforms +# +# It does not need a boot section for a bootloader since it is booted +# from its NOR flash memory. +# +# To update the bootloader, execute the following from U-Boot prompt: +# => run upgradeu + +image sdcard.img { + hdimage { + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/boundarydevices/common/post-build.sh b/board/boundarydevices/common/post-build.sh new file mode 100755 index 00000000..161ec064 --- /dev/null +++ b/board/boundarydevices/common/post-build.sh @@ -0,0 +1,29 @@ +#!/bin/sh +# post-build fixups +# for further details, see +# +# http://boundarydevices.com/u-boot-on-i-mx6/ +# + +BOARD_DIR="$(dirname $0)" +UBOOT_DEFCONFIG="$(grep BR2_TARGET_UBOOT_BOARD_DEFCONFIG ${BR2_CONFIG} | sed 's/.*\"\(.*\)\"/\1/')" + +if grep -Eq "^BR2_aarch64=y$" ${BR2_CONFIG}; then + MKIMAGE_ARCH=arm64 + UBOOT_BINARY=imx8-boot-sd.bin +else + MKIMAGE_ARCH=arm + UBOOT_BINARY=u-boot.imx +fi + +# bd u-boot looks for standard bootscript +$HOST_DIR/bin/mkimage -A $MKIMAGE_ARCH -O linux -T script -C none -a 0 -e 0 \ + -n "boot script" -d $BOARD_DIR/boot.cmd $TARGET_DIR/boot/boot.scr + +# u-boot / update script for bd upgradeu command +if [ -e $BINARIES_DIR/$UBOOT_BINARY ]; then + install -D -m 0644 $BINARIES_DIR/$UBOOT_BINARY \ + $TARGET_DIR/u-boot.$UBOOT_DEFCONFIG + $HOST_DIR/bin/mkimage -A $MKIMAGE_ARCH -O linux -T script -C none -a 0 -e 0 \ + -n "upgrade script" -d $BOARD_DIR/upgrade.cmd $TARGET_DIR/upgrade.scr +fi diff --git a/board/boundarydevices/common/post-image.sh b/board/boundarydevices/common/post-image.sh new file mode 100755 index 00000000..5c70d98e --- /dev/null +++ b/board/boundarydevices/common/post-image.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +support/scripts/genimage.sh -c $(dirname $0)/genimage.cfg + +exit $? diff --git a/board/boundarydevices/common/readme.txt b/board/boundarydevices/common/readme.txt new file mode 100644 index 00000000..307cfb55 --- /dev/null +++ b/board/boundarydevices/common/readme.txt @@ -0,0 +1,48 @@ +Buildroot for Boundary Devices platforms: + +https://boundarydevices.com/nitrogen-sbcs-and-soms/ + +Here is the list of targeted platforms per defconfig: + +- nitrogen6x_defconfig + - BD-SL-i.MX6 (SABRE-Lite) + - Nitrogen6X + - Nitrogen6_Lite + - Nitrogen6_MAX + - Nitrogen6_VM + - Nitrogen6_SOM + - Nitrogen6_SOMv2 + +- nitrogen6sx_defconfig + - Nitrogen6_SoloX + +- nitrogen7_defconfig + - Nitrogen7 + +- nitrogen8m_defconfig + - Nitrogen8M + - Nitrogen8M_SOM + +- nitrogen8mm_defconfig + - Nitrogen8MMini + - Nitrogen8MMini_SOM + +- nitrogen8mn_defconfig + - Nitrogen8MNano + - Nitrogen8MNano_SOM + +To install, simply copy the image to your storage (SD, eMMC, USB): + +$ sudo dd if=output/images/sdcard.img of=/dev/sdX + +Where 'sdX' is the device node of the uSD partition. + +To upgrade u-boot, cancel autoboot and type: + +> run upgradeu + +See Boundary Devices's buildroot-external-boundary project +for additional and advanced defconfigs using Qt5, gstreamer, +NXP proprietary packages with demo applications: + +https://github.com/boundarydevices/buildroot-external-boundary diff --git a/board/boundarydevices/common/upgrade.cmd b/board/boundarydevices/common/upgrade.cmd new file mode 100644 index 00000000..ce32d77b --- /dev/null +++ b/board/boundarydevices/common/upgrade.cmd @@ -0,0 +1,221 @@ +if itest.s a$uboot_defconfig == a; then + echo "Please set uboot_defconfig to the appropriate value" + exit +fi + +offset=0x400 +erase_size=0xC0000 +qspi_offset=0x0 +a_base=0x12000000 +block_size=0x200 + +if itest.s x51 == "x${imx_cpu}"; then + a_base=0x92000000 +elif itest.s x53 == "x${imx_cpu}"; then + a_base=0x72000000 +elif itest.s x6SX == "x${imx_cpu}" || itest.s x6ULL == "x${imx_cpu}" || itest.s x7D == "x${imx_cpu}"; then + a_base=0x82000000 +elif itest.s x8MQ == "x${imx_cpu}" || itest.s x8MM == "x${imx_cpu}" || itest.s x8MMQ == "x${imx_cpu}"; then + a_base=0x42000000 + offset=0x8400 +elif itest.s x8MNano == "x${imx_cpu}"; then + a_base=0x42000000 + offset=0x8000 +fi + +qspi_match=1 +setexpr a_qspi1 ${a_base} +setexpr a_qspi2 ${a_qspi1} + 0x400000 +setexpr a_uImage1 ${a_qspi1} + 0x400 +setexpr a_uImage2 ${a_qspi2} + 0x400 +setexpr a_script ${a_base} + +setenv stdout serial,vga + +if itest.s "x${sfname}" == "x" ; then +# U-Boot resides in (e)MMC +if itest.s "x${env_dev}" == "x" || itest.s "x${env_part}" == "x"; then + echo "Please set env_dev/part to the appropriate values" + exit +fi + +# Load bootloader binary for this board +if ${fs}load ${devtype} ${devnum}:${distro_bootpart} ${a_uImage1} u-boot.$uboot_defconfig ; then +else + echo "File u-boot.$uboot_defconfig not found on SD card" ; + exit +fi + +# Compute block count for filesize and offset +setexpr cntoffset ${offset} / ${block_size} +setexpr cntfile ${filesize} / ${block_size} +# Add 1 in case the $filesize is not a multiple of $block_size +setexpr cntfile ${cntfile} + 1 + +# Select media partition (if different from main partition) +mmc dev ${env_dev} ${env_part} + +# Read and compare current U-Boot +mmc read ${a_uImage2} ${cntoffset} ${cntfile} +if cmp.b ${a_uImage1} ${a_uImage2} ${filesize} ; then + echo "------- U-Boot versions match" ; + echo "------- U-Boot upgrade NOT needed" ; + exit ; +fi + +echo "Need U-Boot upgrade" ; +echo "Program in 5 seconds" ; +for n in 5 4 3 2 1 ; do + echo $n ; + sleep 1 ; +done +mmc write ${a_uImage1} ${cntoffset} ${cntfile} + +# Make sure to boot from the proper partition +if itest ${env_part} != 0 ; then + mmc partconf ${env_dev} 1 ${env_part} 0 +fi + +# Switch back to main eMMC partition (to avoid confusion) +mmc dev ${env_dev} + +else +# U-Boot resides in NOR flash +if sf probe || sf probe || sf probe 1 27000000 || sf probe 1 27000000 ; then + echo "probed SPI ROM" ; +else + echo "Error initializing EEPROM" + exit +fi + +if itest.s "x${sfname}" == "xat45db041d" ; then + erase_size=0x7e000 +fi + +if itest.s x7D == "x${imx_cpu}"; then + echo "check qspi parameter block" ; + if ${fs}load ${devtype} ${devnum}:${distro_bootpart} ${a_qspi1} qspi-${sfname}.${uboot_defconfig} ; then + else + echo "parameter file qspi-${sfname}.${uboot_defconfig} not found on SD card" + exit + fi + if itest ${filesize} != 0x200 ; then + echo "------- qspi-${sfname}.${uboot_defconfig} 0x${filesize} != 0x200 bytes" ; + exit + fi + setexpr a_marker ${a_qspi1} + 0x1fc + if itest *${a_marker} != c0ffee01 ; then + echo "------- qspi-${sfname}.${uboot_defconfig} c0ffee01 marker missing" ; + exit + fi + if sf read ${a_qspi2} ${qspi_offset} 0x200 ; then + else + echo "Error reading qspi parameter from EEPROM" + exit + fi + if cmp.b ${a_qspi1} ${a_qspi2} 0x200 ; then + echo "------- qspi parameters match" + else + echo "------- qspi parameters mismatch" + qspi_match=0 + fi +fi + +echo "check U-Boot" ; + +if ${fs}load ${devtype} ${devnum}:${distro_bootpart} ${a_uImage1} u-boot.$uboot_defconfig ; then +else + echo "File u-boot.$uboot_defconfig not found on SD card" ; + exit +fi +echo "read $filesize bytes from SD card" ; +if sf read ${a_uImage2} $offset $filesize ; then +else + echo "Error reading boot loader from EEPROM" ; + exit +fi + +if cmp.b ${a_uImage1} ${a_uImage2} $filesize ; then + echo "------- U-Boot versions match" ; + if itest.s "${qspi_match}" == "1" ; then + echo "------- U-Boot upgrade NOT needed" ; + if itest.s "x" != "x${next}" ; then + if ${fs}load ${devtype} ${devnum}:${distro_bootpart} ${a_script} ${next} ; then + source ${a_script} + else + echo "${next} not found on SD card" + fi + fi + exit + fi + erase_size=0x1000 + if itest.s xMX25L6405D == "x${sfname}"; then + erase_size=0x10000 + fi + setexpr filesize ${erase_size} - ${offset} +fi + +echo "Need U-Boot upgrade" ; +echo "Program in 5 seconds" ; +for n in 5 4 3 2 1 ; do + echo $n ; + sleep 1 ; +done +echo "erasing" ; +sf erase 0 ${erase_size} ; + +# two steps to prevent bricking +echo "programming" ; +setexpr a1 ${a_uImage1} + 0x400 +setexpr o1 ${offset} + 0x400 +setexpr s1 ${filesize} - 0x400 +sf write ${a1} ${o1} ${s1} ; +sf write ${a_uImage1} $offset 0x400 ; + +if itest.s x7D == "x${imx_cpu}"; then + sf write ${a_qspi1} ${qspi_offset} 0x200 +fi + +echo "verifying" ; +if sf read ${a_uImage2} $offset $filesize ; then +else + echo "Error re-reading EEPROM" ; + exit +fi +if cmp.b ${a_uImage1} ${a_uImage2} $filesize ; then +else + echo "Read verification error" ; + exit +fi + +if itest.s x7D == "x${imx_cpu}"; then + if sf read ${a_qspi2} ${qspi_offset} 0x200 ; then + else + echo "Error re-reading qspi" ; + exit + fi + if cmp.b ${a_qspi1} ${a_qspi2} 0x200 ; then + else + echo "qspi parameter block verification error" ; + exit + fi +fi + +if itest.s "x" != "x${next}" ; then + if ${fs}load ${devtype} ${devnum}:${distro_bootpart} ${a_script} ${next} ; then + source ${a_script} + else + echo "${next} not found on ${devtype} ${devnum}:${distro_bootpart}" + fi +fi +fi + +if itest.s "xno" == "x${reset}" ; then + while echo "---- U-Boot upgraded. Please reset the board" ; do + sleep 120 + done +fi +echo "---- U-Boot upgraded. The board will now reset." +sleep 1 +reset +done diff --git a/board/chromebook/elm/kernel.args b/board/chromebook/elm/kernel.args new file mode 100644 index 00000000..848e179d --- /dev/null +++ b/board/chromebook/elm/kernel.args @@ -0,0 +1 @@ +root=PARTUUID=%U/PARTNROFF=1 rootwait rw noinitrd kern_guid=%U console=tty0 diff --git a/board/chromebook/elm/kernel.its b/board/chromebook/elm/kernel.its new file mode 100644 index 00000000..bc4b09ea --- /dev/null +++ b/board/chromebook/elm/kernel.its @@ -0,0 +1,38 @@ +/dts-v1/; + +/ { + description = "Chrome OS kernel image with FDT"; + #address-cells = <1>; + + images { + kernel-1 { + data = /incbin/("Image"); + type = "kernel_noload"; + arch = "arm64"; + os = "linux"; + compression = "none"; + load = <0>; + entry = <0>; + }; + + fdt-1 { + description = "mt8173-elm.dtb"; + data = /incbin/("mt8173-elm.dtb"); + type = "flat_dt"; + arch = "arm64"; + compression = "none"; + + hash-1 { + algo = "sha1"; + }; + }; + }; + + configurations { + default = "conf-1"; + conf-1 { + kernel = "kernel-1"; + fdt = "fdt-1"; + }; + }; +}; diff --git a/board/chromebook/elm/linux.config b/board/chromebook/elm/linux.config new file mode 100644 index 00000000..50402eae --- /dev/null +++ b/board/chromebook/elm/linux.config @@ -0,0 +1,453 @@ +CONFIG_SYSVIPC=y +CONFIG_NO_HZ_IDLE=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_PREEMPT=y +CONFIG_IRQ_TIME_ACCOUNTING=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_NUMA_BALANCING=y +CONFIG_MEMCG=y +CONFIG_BLK_CGROUP=y +CONFIG_CGROUP_PIDS=y +CONFIG_CGROUP_HUGETLB=y +CONFIG_CPUSETS=y +CONFIG_CGROUP_DEVICE=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_CGROUP_PERF=y +CONFIG_USER_NS=y +CONFIG_SCHED_AUTOGROUP=y +CONFIG_RELAY=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_KALLSYMS_ALL=y +# CONFIG_COMPAT_BRK is not set +CONFIG_SLAB=y +CONFIG_PROFILING=y +CONFIG_ARCH_MEDIATEK=y +CONFIG_ARM64_VA_BITS_48=y +CONFIG_SCHED_MC=y +CONFIG_SCHED_SMT=y +CONFIG_NR_CPUS=4 +CONFIG_NUMA=y +CONFIG_SECCOMP=y +CONFIG_PARAVIRT=y +CONFIG_CRASH_DUMP=y +CONFIG_COMPAT=y +CONFIG_RANDOMIZE_BASE=y +# CONFIG_EFI is not set +# CONFIG_SUSPEND is not set +CONFIG_PM=y +CONFIG_PM_DEBUG=y +CONFIG_PM_ADVANCED_DEBUG=y +CONFIG_CPU_IDLE=y +CONFIG_CPU_IDLE_GOV_LADDER=y +CONFIG_ARM_CPUIDLE=y +CONFIG_ARM_PSCI_CPUIDLE=y +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_STAT=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y +CONFIG_CPUFREQ_DT=y +CONFIG_ARM_SCPI_CPUFREQ=y +CONFIG_ARM_MEDIATEK_CPUFREQ=y +CONFIG_ARM_SCPI_PROTOCOL=y +CONFIG_JUMP_LABEL=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_BLK_DEBUG_FS is not set +# CONFIG_MQ_IOSCHED_KYBER is not set +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +CONFIG_KSM=y +CONFIG_MEMORY_FAILURE=y +CONFIG_TRANSPARENT_HUGEPAGE=y +CONFIG_CMA=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_UNIX_DIAG=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_INET_UDP_DIAG=y +# CONFIG_IPV6 is not set +CONFIG_CFG80211=y +# CONFIG_CFG80211_DEFAULT_PS is not set +CONFIG_MAC80211=y +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_FW_LOADER_USER_HELPER=y +CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y +CONFIG_BRCMSTB_GISB_ARB=y +CONFIG_VEXPRESS_CONFIG=y +CONFIG_MTD=y +CONFIG_MTD_BLOCK=y +CONFIG_MTD_CFI=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_INTELEXT=y +CONFIG_MTD_CFI_AMDSTD=y +CONFIG_MTD_CFI_STAA=y +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_OF=y +CONFIG_MTD_DATAFLASH=y +CONFIG_MTD_SST25L=y +CONFIG_MTD_RAW_NAND=y +CONFIG_MTD_NAND_DENALI_DT=y +CONFIG_MTD_SPI_NOR=y +CONFIG_SPI_CADENCE_QUADSPI=y +CONFIG_OF_OVERLAY=y +# CONFIG_BLK_DEV is not set +CONFIG_SRAM=y +CONFIG_EEPROM_AT24=m +CONFIG_EEPROM_AT25=m +CONFIG_RAID_ATTRS=m +CONFIG_SCSI=y +# CONFIG_SCSI_PROC_FS is not set +CONFIG_BLK_DEV_SD=y +CONFIG_SCSI_SAS_LIBSAS=y +CONFIG_SCSI_UFSHCD=y +CONFIG_SCSI_UFSHCD_PLATFORM=y +CONFIG_MD=y +CONFIG_BLK_DEV_MD=m +CONFIG_BLK_DEV_DM=m +CONFIG_DM_MIRROR=m +CONFIG_DM_ZERO=m +CONFIG_NETDEVICES=y +# CONFIG_ETHERNET is not set +CONFIG_USB_RTL8152=y +CONFIG_USB_USBNET=y +# CONFIG_USB_NET_AX88179_178A is not set +# CONFIG_USB_NET_NET1080 is not set +# CONFIG_USB_NET_CDC_SUBSET is not set +# CONFIG_USB_NET_ZAURUS is not set +# CONFIG_WLAN_VENDOR_ADMTEK is not set +# CONFIG_WLAN_VENDOR_ATH is not set +# CONFIG_WLAN_VENDOR_ATMEL is not set +# CONFIG_WLAN_VENDOR_BROADCOM is not set +# CONFIG_WLAN_VENDOR_CISCO is not set +# CONFIG_WLAN_VENDOR_INTEL is not set +# CONFIG_WLAN_VENDOR_INTERSIL is not set +CONFIG_MWIFIEX=m +CONFIG_MWIFIEX_SDIO=m +# CONFIG_WLAN_VENDOR_MEDIATEK is not set +# CONFIG_WLAN_VENDOR_RALINK is not set +# CONFIG_WLAN_VENDOR_REALTEK is not set +# CONFIG_WLAN_VENDOR_RSI is not set +# CONFIG_WLAN_VENDOR_ST is not set +# CONFIG_WLAN_VENDOR_TI is not set +# CONFIG_WLAN_VENDOR_ZYDAS is not set +# CONFIG_WLAN_VENDOR_QUANTENNA is not set +CONFIG_INPUT_POLLDEV=m +CONFIG_INPUT_EVDEV=y +CONFIG_KEYBOARD_ADC=m +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_CROS_EC=y +CONFIG_MOUSE_ELAN_I2C=y +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_ATMEL_MXT=m +CONFIG_TOUCHSCREEN_ELAN=y +CONFIG_INPUT_MISC=y +# CONFIG_SERIO_SERPORT is not set +CONFIG_SERIO_AMBAKMI=y +CONFIG_LEGACY_PTY_COUNT=16 +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +CONFIG_SERIAL_8250_DW=y +CONFIG_SERIAL_8250_MT6577=y +CONFIG_SERIAL_OF_PLATFORM=y +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +CONFIG_SERIAL_XILINX_PS_UART=y +CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y +CONFIG_SERIAL_FSL_LPUART=y +CONFIG_SERIAL_FSL_LPUART_CONSOLE=y +CONFIG_SERIAL_FSL_LINFLEXUART=y +CONFIG_SERIAL_FSL_LINFLEXUART_CONSOLE=y +CONFIG_SERIAL_DEV_BUS=y +CONFIG_VIRTIO_CONSOLE=y +CONFIG_IPMI_HANDLER=m +CONFIG_IPMI_DEVICE_INTERFACE=m +CONFIG_IPMI_SI=m +CONFIG_TCG_TPM=y +CONFIG_TCG_TIS_I2C_INFINEON=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_MUX_PCA954x=y +CONFIG_I2C_DESIGNWARE_PLATFORM=y +CONFIG_I2C_GPIO=m +CONFIG_I2C_MT65XX=y +CONFIG_I2C_RK3X=y +CONFIG_I2C_CROS_EC_TUNNEL=y +CONFIG_I2C_SLAVE=y +CONFIG_SPI=y +CONFIG_SPI_NXP_FLEXSPI=y +CONFIG_SPI_GPIO=y +CONFIG_SPI_MT65XX=y +CONFIG_SPI_PL022=y +CONFIG_SPI_ROCKCHIP=y +CONFIG_SPI_SPIDEV=y +CONFIG_PINCTRL_SINGLE=y +CONFIG_PINCTRL_MAX77620=y +CONFIG_GPIO_ALTERA=m +CONFIG_GPIO_DWAPB=y +CONFIG_GPIO_MB86S7X=y +CONFIG_GPIO_PL061=y +CONFIG_GPIO_XGENE=y +CONFIG_GPIO_MAX732X=y +CONFIG_GPIO_PCA953X=y +CONFIG_GPIO_PCA953X_IRQ=y +CONFIG_GPIO_BD9571MWV=m +CONFIG_GPIO_MAX77620=y +CONFIG_POWER_AVS=y +CONFIG_POWER_RESET_BRCMSTB=y +CONFIG_POWER_RESET_XGENE=y +CONFIG_POWER_RESET_SYSCON=y +CONFIG_SYSCON_REBOOT_MODE=y +CONFIG_BATTERY_SBS=m +CONFIG_BATTERY_BQ27XXX=y +CONFIG_SENSORS_ARM_SCPI=y +CONFIG_SENSORS_LM90=m +CONFIG_SENSORS_PWM_FAN=m +CONFIG_SENSORS_INA2XX=m +CONFIG_SENSORS_INA3221=m +CONFIG_THERMAL=y +CONFIG_CPU_THERMAL=y +CONFIG_DEVFREQ_THERMAL=y +CONFIG_THERMAL_EMULATION=y +CONFIG_WATCHDOG=y +CONFIG_MEDIATEK_WATCHDOG=y +CONFIG_MFD_BD9571MWV=y +CONFIG_MFD_AXP20X_I2C=y +CONFIG_MFD_HI6421_PMIC=y +CONFIG_MFD_MAX77620=y +CONFIG_MFD_MT6397=y +CONFIG_MFD_RK808=y +CONFIG_MFD_SEC_CORE=y +CONFIG_MFD_ROHM_BD718XX=y +CONFIG_REGULATOR_DEBUG=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_REGULATOR_AXP20X=y +CONFIG_REGULATOR_BD718XX=y +CONFIG_REGULATOR_BD9571MWV=y +CONFIG_REGULATOR_DA9211=y +CONFIG_REGULATOR_FAN53555=y +CONFIG_REGULATOR_GPIO=y +CONFIG_REGULATOR_HI6421V530=y +CONFIG_REGULATOR_MAX77620=y +CONFIG_REGULATOR_MAX8973=y +CONFIG_REGULATOR_MT6397=y +CONFIG_REGULATOR_PFUZE100=y +CONFIG_REGULATOR_PWM=y +CONFIG_REGULATOR_RK808=y +CONFIG_REGULATOR_S2MPS11=y +CONFIG_REGULATOR_VCTRL=m +CONFIG_MEDIA_SUPPORT=y +CONFIG_MEDIA_CAMERA_SUPPORT=y +CONFIG_MEDIA_ANALOG_TV_SUPPORT=y +CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y +CONFIG_MEDIA_SDR_SUPPORT=y +CONFIG_VIDEO_V4L2_SUBDEV_API=y +CONFIG_MEDIA_USB_SUPPORT=y +CONFIG_USB_VIDEO_CLASS=m +CONFIG_DRM=y +CONFIG_DRM_I2C_CH7006=m +CONFIG_DRM_I2C_SIL164=m +CONFIG_DRM_I2C_NXP_TDA998X=m +CONFIG_DRM_MALI_DISPLAY=m +CONFIG_DRM_PANEL_LVDS=m +CONFIG_DRM_PANEL_SIMPLE=y +CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA=m +CONFIG_DRM_DISPLAY_CONNECTOR=y +CONFIG_DRM_PARADE_PS8640=y +CONFIG_DRM_SII902X=m +CONFIG_DRM_THINE_THC63LVD1024=m +CONFIG_DRM_TI_SN65DSI86=m +CONFIG_DRM_ANALOGIX_ANX78XX=y +CONFIG_DRM_I2C_ADV7511=m +CONFIG_DRM_MEDIATEK=y +CONFIG_DRM_MEDIATEK_HDMI=y +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_SIMPLE=y +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_BACKLIGHT_PWM=y +CONFIG_BACKLIGHT_LP855X=y +CONFIG_SOUND=y +CONFIG_SND=y +CONFIG_SND_SOC=y +CONFIG_SND_SOC_MT8173=y +CONFIG_SND_SOC_MT8173_RT5650_RT5676=y +CONFIG_I2C_HID=m +CONFIG_USB_CONN_GPIO=y +CONFIG_USB=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_HCD_PLATFORM=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PLATFORM=y +CONFIG_USB_STORAGE=y +CONFIG_USB_MTU3=y +CONFIG_USB_MUSB_HDRC=y +CONFIG_USB_DWC3=y +CONFIG_USB_DWC2=y +CONFIG_USB_CHIPIDEA=y +CONFIG_USB_CHIPIDEA_UDC=y +CONFIG_USB_CHIPIDEA_HOST=y +CONFIG_USB_ISP1760=y +CONFIG_USB_SERIAL=y +CONFIG_USB_SERIAL_CONSOLE=y +CONFIG_USB_SERIAL_PL2303=y +CONFIG_USB_HSIC_USB3503=y +CONFIG_NOP_USB_XCEIV=y +CONFIG_USB_ULPI=y +CONFIG_USB_GADGET=y +CONFIG_USB_SNP_UDC_PLAT=y +CONFIG_USB_BDC_UDC=y +CONFIG_USB_ETH=m +CONFIG_USB_ETH_EEM=y +CONFIG_TYPEC=m +CONFIG_TYPEC_TCPM=m +CONFIG_TYPEC_FUSB302=m +CONFIG_MMC=y +CONFIG_MMC_BLOCK_MINORS=32 +CONFIG_MMC_ARMMMCI=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MMC_SDHCI_OF_ARASAN=y +CONFIG_MMC_SDHCI_CADENCE=y +CONFIG_MMC_SDHCI_F_SDH30=y +CONFIG_MMC_SPI=y +CONFIG_MMC_DW=y +CONFIG_MMC_DW_EXYNOS=y +CONFIG_MMC_DW_HI3798CV200=y +CONFIG_MMC_DW_K3=y +CONFIG_MMC_MTK=y +CONFIG_MMC_SDHCI_XENON=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_PWM=y +CONFIG_LEDS_SYSCON=y +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_CPU=y +CONFIG_LEDS_TRIGGER_DEFAULT_ON=y +CONFIG_LEDS_TRIGGER_PANIC=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_DS1307=m +CONFIG_RTC_DRV_MAX77686=y +CONFIG_RTC_DRV_RK808=m +CONFIG_RTC_DRV_PCF85363=m +CONFIG_RTC_DRV_RX8581=m +CONFIG_RTC_DRV_S5M=y +CONFIG_RTC_DRV_DS3232=y +CONFIG_RTC_DRV_PCF2127=m +CONFIG_RTC_DRV_CROS_EC=y +CONFIG_RTC_DRV_PL031=y +CONFIG_DMADEVICES=y +CONFIG_FSL_EDMA=y +CONFIG_MV_XOR_V2=y +CONFIG_PL330_DMA=y +CONFIG_MTK_CQDMA=y +CONFIG_QCOM_HIDMA_MGMT=y +CONFIG_QCOM_HIDMA=y +# CONFIG_VIRTIO_MENU is not set +CONFIG_MFD_CROS_EC=y +CONFIG_CROS_EC_I2C=y +CONFIG_CROS_EC_SPI=y +CONFIG_COMMON_CLK_RK808=y +CONFIG_COMMON_CLK_SCPI=y +CONFIG_COMMON_CLK_CS2000_CP=y +CONFIG_COMMON_CLK_S2MPS11=y +CONFIG_CLK_QORIQ=y +CONFIG_COMMON_CLK_XGENE=y +CONFIG_COMMON_CLK_PWM=y +CONFIG_COMMON_CLK_VC5=y +CONFIG_COMMON_CLK_MT6797_MMSYS=y +CONFIG_COMMON_CLK_MT6797_IMGSYS=y +CONFIG_COMMON_CLK_MT6797_VDECSYS=y +CONFIG_COMMON_CLK_MT6797_VENCSYS=y +CONFIG_HWSPINLOCK=y +CONFIG_ARM_MHU=y +CONFIG_PLATFORM_MHU=y +CONFIG_ARM_SMMU=y +CONFIG_ARM_SMMU_V3=y +CONFIG_MTK_IOMMU=y +CONFIG_REMOTEPROC=y +CONFIG_MTK_CMDQ=y +CONFIG_MTK_PMIC_WRAP=y +CONFIG_EXTCON_USB_GPIO=y +CONFIG_EXTCON_USBC_CROS_EC=y +CONFIG_IIO=y +CONFIG_MAX9611=m +CONFIG_IIO_CROS_EC_SENSORS_CORE=m +CONFIG_IIO_CROS_EC_SENSORS=m +CONFIG_IIO_CROS_EC_LIGHT_PROX=m +CONFIG_SENSORS_ISL29018=m +CONFIG_IIO_CROS_EC_BARO=m +CONFIG_MPL3115=m +CONFIG_PWM=y +CONFIG_PWM_CROS_EC=m +CONFIG_PWM_MTK_DISP=y +CONFIG_PWM_MEDIATEK=y +CONFIG_PHY_XGENE=y +CONFIG_PHY_FSL_IMX8MQ_USB=y +CONFIG_PHY_MTK_TPHY=y +CONFIG_PHY_QCOM_USB_HS=y +CONFIG_PHY_SAMSUNG_USB2=y +CONFIG_EXT2_FS=y +CONFIG_EXT3_FS=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_FANOTIFY=y +CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y +CONFIG_QUOTA=y +CONFIG_AUTOFS4_FS=y +CONFIG_FUSE_FS=m +CONFIG_CUSE=m +CONFIG_OVERLAY_FS=y +CONFIG_OVERLAY_FS_INDEX=y +CONFIG_OVERLAY_FS_XINO_AUTO=y +CONFIG_OVERLAY_FS_METACOPY=y +CONFIG_VFAT_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_HUGETLBFS=y +CONFIG_CONFIGFS_FS=y +CONFIG_PSTORE=y +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_ISO8859_1=y +CONFIG_SECURITY=y +CONFIG_CRYPTO_CRYPTD=y +CONFIG_CRYPTO_DH=m +CONFIG_CRYPTO_ECDH=m +CONFIG_CRYPTO_SEQIV=y +CONFIG_CRYPTO_ECHAINIV=y +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_ECB=y +CONFIG_CRYPTO_XXHASH=m +CONFIG_CRYPTO_SHA1=y +CONFIG_CRYPTO_SHA3=m +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_ANSI_CPRNG=y +CONFIG_CRYPTO_DEV_CCREE=m +CONFIG_PACKING=y +CONFIG_INDIRECT_PIO=y +CONFIG_CRC_CCITT=m +CONFIG_CRC_T10DIF=y +CONFIG_LIBCRC32C=m +CONFIG_DMA_CMA=y +CONFIG_CMA_SIZE_MBYTES=32 +CONFIG_IRQ_POLL=y +CONFIG_PRINTK_TIME=y +CONFIG_DEBUG_INFO=y +CONFIG_MAGIC_SYSRQ=y +CONFIG_DEBUG_FS=y +CONFIG_DEBUG_KERNEL=y +# CONFIG_SCHED_DEBUG is not set +# CONFIG_DEBUG_PREEMPT is not set +CONFIG_STACKTRACE=y +# CONFIG_FTRACE is not set +# CONFIG_STRICT_DEVMEM is not set \ No newline at end of file diff --git a/board/chromebook/elm/patches/linux/0001-drm-bridge_connector-Set-default-status-connected-fo.patch b/board/chromebook/elm/patches/linux/0001-drm-bridge_connector-Set-default-status-connected-fo.patch new file mode 100644 index 00000000..f0373918 --- /dev/null +++ b/board/chromebook/elm/patches/linux/0001-drm-bridge_connector-Set-default-status-connected-fo.patch @@ -0,0 +1,35 @@ +From 510d0ad0ce1b51c072309ba12dfb024fc2c3dbac Mon Sep 17 00:00:00 2001 +From: Enric Balletbo i Serra +Date: Wed, 26 Aug 2020 10:15:22 +0200 +Subject: [PATCH 1/5] drm/bridge_connector: Set default status connected for + eDP connectors + +In an eDP application, HPD is not required and on most bridge chips +useless. If HPD is not used, we need to set initial status as connected, +otherwise the connector created by the drm_bridge_connector API remains +in an unknown state. + +Reviewed-by: Laurent Pinchart +Acked-by: Sam Ravnborg +Signed-off-by: Enric Balletbo i Serra +Reviewed-by: Bilal Wasim +Tested-by: Bilal Wasim +--- + drivers/gpu/drm/drm_bridge_connector.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/gpu/drm/drm_bridge_connector.c b/drivers/gpu/drm/drm_bridge_connector.c +index c6994fe673f3..a58cbde59c34 100644 +--- a/drivers/gpu/drm/drm_bridge_connector.c ++++ b/drivers/gpu/drm/drm_bridge_connector.c +@@ -187,6 +187,7 @@ drm_bridge_connector_detect(struct drm_connector *connector, bool force) + case DRM_MODE_CONNECTOR_DPI: + case DRM_MODE_CONNECTOR_LVDS: + case DRM_MODE_CONNECTOR_DSI: ++ case DRM_MODE_CONNECTOR_eDP: + status = connector_status_connected; + break; + default: +-- +2.25.1 + diff --git a/board/chromebook/elm/patches/linux/0002-drm-bridge-ps8640-Get-the-EDID-from-eDP-control.patch b/board/chromebook/elm/patches/linux/0002-drm-bridge-ps8640-Get-the-EDID-from-eDP-control.patch new file mode 100644 index 00000000..5f7517c7 --- /dev/null +++ b/board/chromebook/elm/patches/linux/0002-drm-bridge-ps8640-Get-the-EDID-from-eDP-control.patch @@ -0,0 +1,50 @@ +From cc0f2fea61fb34ca84e4812a615e0035d812aa8b Mon Sep 17 00:00:00 2001 +From: Enric Balletbo i Serra +Date: Wed, 26 Aug 2020 10:15:23 +0200 +Subject: [PATCH 2/5] drm/bridge: ps8640: Get the EDID from eDP control + +The PS8640 DSI-to-eDP bridge can retrieve the EDID, so implement the +.get_edid callback and set the flag to indicate the core to use it. + +Reviewed-by: Laurent Pinchart +Acked-by: Sam Ravnborg +Signed-off-by: Enric Balletbo i Serra +--- + drivers/gpu/drm/bridge/parade-ps8640.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/drivers/gpu/drm/bridge/parade-ps8640.c b/drivers/gpu/drm/bridge/parade-ps8640.c +index 4b099196afeb..13755d278db6 100644 +--- a/drivers/gpu/drm/bridge/parade-ps8640.c ++++ b/drivers/gpu/drm/bridge/parade-ps8640.c +@@ -242,8 +242,18 @@ static int ps8640_bridge_attach(struct drm_bridge *bridge, + return ret; + } + ++static struct edid *ps8640_bridge_get_edid(struct drm_bridge *bridge, ++ struct drm_connector *connector) ++{ ++ struct ps8640 *ps_bridge = bridge_to_ps8640(bridge); ++ ++ return drm_get_edid(connector, ++ ps_bridge->page[PAGE0_DP_CNTL]->adapter); ++} ++ + static const struct drm_bridge_funcs ps8640_bridge_funcs = { + .attach = ps8640_bridge_attach, ++ .get_edid = ps8640_bridge_get_edid, + .post_disable = ps8640_post_disable, + .pre_enable = ps8640_pre_enable, + }; +@@ -294,6 +304,8 @@ static int ps8640_probe(struct i2c_client *client) + + ps_bridge->bridge.funcs = &ps8640_bridge_funcs; + ps_bridge->bridge.of_node = dev->of_node; ++ ps_bridge->bridge.ops = DRM_BRIDGE_OP_EDID; ++ ps_bridge->bridge.type = DRM_MODE_CONNECTOR_eDP; + + ps_bridge->page[PAGE0_DP_CNTL] = client; + +-- +2.25.1 + diff --git a/board/chromebook/elm/patches/linux/0003-drm-bridge-ps8640-Return-an-error-for-incorrect-atta.patch b/board/chromebook/elm/patches/linux/0003-drm-bridge-ps8640-Return-an-error-for-incorrect-atta.patch new file mode 100644 index 00000000..5f52c454 --- /dev/null +++ b/board/chromebook/elm/patches/linux/0003-drm-bridge-ps8640-Return-an-error-for-incorrect-atta.patch @@ -0,0 +1,35 @@ +From 62afc499fc46c8018f40733c31a675b28f0717d8 Mon Sep 17 00:00:00 2001 +From: Enric Balletbo i Serra +Date: Wed, 26 Aug 2020 10:15:24 +0200 +Subject: [PATCH 3/5] drm/bridge: ps8640: Return an error for incorrect attach + flags + +Bridge drivers that implement the new model only shall return an error +from their attach() handler when the DRM_BRIDGE_ATTACH_NO_CONNECTOR flag +is not set. So make sure we return an error because only the new +drm_bridge model is supported. + +Reviewed-by: Sam Ravnborg +Signed-off-by: Enric Balletbo i Serra +--- + drivers/gpu/drm/bridge/parade-ps8640.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/drivers/gpu/drm/bridge/parade-ps8640.c b/drivers/gpu/drm/bridge/parade-ps8640.c +index 13755d278db6..ce3e8b2da8c9 100644 +--- a/drivers/gpu/drm/bridge/parade-ps8640.c ++++ b/drivers/gpu/drm/bridge/parade-ps8640.c +@@ -200,6 +200,10 @@ static int ps8640_bridge_attach(struct drm_bridge *bridge, + .channel = 0, + .node = NULL, + }; ++ ++ if (!(flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR)) ++ return -EINVAL; ++ + /* port@0 is ps8640 dsi input port */ + in_ep = of_graph_get_endpoint_by_regs(dev->of_node, 0, -1); + if (!in_ep) +-- +2.25.1 + diff --git a/board/chromebook/elm/patches/linux/0004-drm-bridge-ps8640-Print-an-error-if-VDO-control-fail.patch b/board/chromebook/elm/patches/linux/0004-drm-bridge-ps8640-Print-an-error-if-VDO-control-fail.patch new file mode 100644 index 00000000..4ef074a6 --- /dev/null +++ b/board/chromebook/elm/patches/linux/0004-drm-bridge-ps8640-Print-an-error-if-VDO-control-fail.patch @@ -0,0 +1,58 @@ +From 4897262a71cbf55d726d9174f5f646897dc13704 Mon Sep 17 00:00:00 2001 +From: Enric Balletbo i Serra +Date: Wed, 26 Aug 2020 10:15:25 +0200 +Subject: [PATCH 4/5] drm/bridge: ps8640: Print an error if VDO control fails + +Print an error message inside ps8640_bridge_vdo_control() function when +it fails so we can simplify a bit the callers, they will only need to +check the error code. + +Reviewed-by: Sam Ravnborg +Signed-off-by: Enric Balletbo i Serra +--- + drivers/gpu/drm/bridge/parade-ps8640.c | 13 ++++++------- + 1 file changed, 6 insertions(+), 7 deletions(-) + +diff --git a/drivers/gpu/drm/bridge/parade-ps8640.c b/drivers/gpu/drm/bridge/parade-ps8640.c +index ce3e8b2da8c9..9f7b7a9c53c5 100644 +--- a/drivers/gpu/drm/bridge/parade-ps8640.c ++++ b/drivers/gpu/drm/bridge/parade-ps8640.c +@@ -82,8 +82,11 @@ static int ps8640_bridge_vdo_control(struct ps8640 *ps_bridge, + ret = i2c_smbus_write_i2c_block_data(client, PAGE3_SET_ADD, + sizeof(vdo_ctrl_buf), + vdo_ctrl_buf); +- if (ret < 0) ++ if (ret < 0) { ++ DRM_ERROR("failed to %sable VDO: %d\n", ++ ctrl == ENABLE ? "en" : "dis", ret); + return ret; ++ } + + return 0; + } +@@ -150,10 +153,8 @@ static void ps8640_pre_enable(struct drm_bridge *bridge) + } + + ret = ps8640_bridge_vdo_control(ps_bridge, ENABLE); +- if (ret) { +- DRM_ERROR("failed to enable VDO: %d\n", ret); ++ if (ret) + goto err_regulators_disable; +- } + + /* Switch access edp panel's edid through i2c */ + ret = i2c_smbus_write_byte_data(client, PAGE2_I2C_BYPASS, +@@ -175,9 +176,7 @@ static void ps8640_post_disable(struct drm_bridge *bridge) + struct ps8640 *ps_bridge = bridge_to_ps8640(bridge); + int ret; + +- ret = ps8640_bridge_vdo_control(ps_bridge, DISABLE); +- if (ret < 0) +- DRM_ERROR("failed to disable VDO: %d\n", ret); ++ ps8640_bridge_vdo_control(ps_bridge, DISABLE); + + gpiod_set_value(ps_bridge->gpio_reset, 1); + gpiod_set_value(ps_bridge->gpio_powerdown, 1); +-- +2.25.1 + diff --git a/board/chromebook/elm/patches/linux/0005-drm-bridge-ps8640-Rework-power-state-handling.patch b/board/chromebook/elm/patches/linux/0005-drm-bridge-ps8640-Rework-power-state-handling.patch new file mode 100644 index 00000000..f682600d --- /dev/null +++ b/board/chromebook/elm/patches/linux/0005-drm-bridge-ps8640-Rework-power-state-handling.patch @@ -0,0 +1,162 @@ +From 5bb60fe7c748a0aae2bdbab10e73b2dc48c09dda Mon Sep 17 00:00:00 2001 +From: Enric Balletbo i Serra +Date: Wed, 26 Aug 2020 10:15:26 +0200 +Subject: [PATCH 5/5] drm/bridge: ps8640: Rework power state handling + +The get_edid() callback can be triggered anytime by an ioctl, i.e + + drm_mode_getconnector (ioctl) + -> drm_helper_probe_single_connector_modes + -> drm_bridge_connector_get_modes + -> ps8640_bridge_get_edid + +Actually if the bridge pre_enable() function was not called before +get_edid(), the driver will not be able to get the EDID properly and +display will not work until a second get_edid() call is issued and if +pre_enable() is called before. The side effect of this, for example, is +that you see anything when `Frecon` starts, neither the splash screen, +until the graphical session manager starts. + +To fix this we need to make sure that all we need is enabled before +reading the EDID. This means the following: + +1. If get_edid() is called before having the device powered we need to + power on the device. In such case, the driver will power off again the + device. + +2. If get_edid() is called after having the device powered, all should + just work. We added a powered flag in order to avoid recurrent calls + to ps8640_bridge_poweron() and unneeded delays. + +3. This seems to be specific for this device, but we need to make sure + the panel is powered on before do a power on cycle on this device. + Otherwise the device fails to retrieve the EDID. + +Signed-off-by: Enric Balletbo i Serra +--- + drivers/gpu/drm/bridge/parade-ps8640.c | 64 +++++++++++++++++++++++--- + 1 file changed, 58 insertions(+), 6 deletions(-) + +diff --git a/drivers/gpu/drm/bridge/parade-ps8640.c b/drivers/gpu/drm/bridge/parade-ps8640.c +index 9f7b7a9c53c5..c5d76e209bda 100644 +--- a/drivers/gpu/drm/bridge/parade-ps8640.c ++++ b/drivers/gpu/drm/bridge/parade-ps8640.c +@@ -65,6 +65,7 @@ struct ps8640 { + struct regulator_bulk_data supplies[2]; + struct gpio_desc *gpio_reset; + struct gpio_desc *gpio_powerdown; ++ bool powered; + }; + + static inline struct ps8640 *bridge_to_ps8640(struct drm_bridge *e) +@@ -91,13 +92,15 @@ static int ps8640_bridge_vdo_control(struct ps8640 *ps_bridge, + return 0; + } + +-static void ps8640_pre_enable(struct drm_bridge *bridge) ++static void ps8640_bridge_poweron(struct ps8640 *ps_bridge) + { +- struct ps8640 *ps_bridge = bridge_to_ps8640(bridge); + struct i2c_client *client = ps_bridge->page[PAGE2_TOP_CNTL]; + unsigned long timeout; + int ret, status; + ++ if (ps_bridge->powered) ++ return; ++ + ret = regulator_bulk_enable(ARRAY_SIZE(ps_bridge->supplies), + ps_bridge->supplies); + if (ret < 0) { +@@ -164,6 +167,8 @@ static void ps8640_pre_enable(struct drm_bridge *bridge) + goto err_regulators_disable; + } + ++ ps_bridge->powered = true; ++ + return; + + err_regulators_disable: +@@ -171,12 +176,12 @@ static void ps8640_pre_enable(struct drm_bridge *bridge) + ps_bridge->supplies); + } + +-static void ps8640_post_disable(struct drm_bridge *bridge) ++static void ps8640_bridge_poweroff(struct ps8640 *ps_bridge) + { +- struct ps8640 *ps_bridge = bridge_to_ps8640(bridge); + int ret; + +- ps8640_bridge_vdo_control(ps_bridge, DISABLE); ++ if (!ps_bridge->powered) ++ return; + + gpiod_set_value(ps_bridge->gpio_reset, 1); + gpiod_set_value(ps_bridge->gpio_powerdown, 1); +@@ -184,6 +189,28 @@ static void ps8640_post_disable(struct drm_bridge *bridge) + ps_bridge->supplies); + if (ret < 0) + DRM_ERROR("cannot disable regulators %d\n", ret); ++ ++ ps_bridge->powered = false; ++} ++ ++static void ps8640_pre_enable(struct drm_bridge *bridge) ++{ ++ struct ps8640 *ps_bridge = bridge_to_ps8640(bridge); ++ int ret; ++ ++ ps8640_bridge_poweron(ps_bridge); ++ ++ ret = ps8640_bridge_vdo_control(ps_bridge, DISABLE); ++ if (ret < 0) ++ ps8640_bridge_poweroff(ps_bridge); ++} ++ ++static void ps8640_post_disable(struct drm_bridge *bridge) ++{ ++ struct ps8640 *ps_bridge = bridge_to_ps8640(bridge); ++ ++ ps8640_bridge_vdo_control(ps_bridge, DISABLE); ++ ps8640_bridge_poweroff(ps_bridge); + } + + static int ps8640_bridge_attach(struct drm_bridge *bridge, +@@ -249,9 +276,34 @@ static struct edid *ps8640_bridge_get_edid(struct drm_bridge *bridge, + struct drm_connector *connector) + { + struct ps8640 *ps_bridge = bridge_to_ps8640(bridge); ++ bool poweroff = !ps_bridge->powered; ++ struct edid *edid; ++ ++ /* ++ * When we end calling get_edid() triggered by an ioctl, i.e ++ * ++ * drm_mode_getconnector (ioctl) ++ * -> drm_helper_probe_single_connector_modes ++ * -> drm_bridge_connector_get_modes ++ * -> ps8640_bridge_get_edid ++ * ++ * We need to make sure that what we need is enabled before reading ++ * EDID, for this chip, we need to do a full poweron, otherwise it will ++ * fail. ++ */ ++ drm_bridge_chain_pre_enable(bridge); + +- return drm_get_edid(connector, ++ edid = drm_get_edid(connector, + ps_bridge->page[PAGE0_DP_CNTL]->adapter); ++ ++ /* ++ * If we call the get_edid() function without having enabled the chip ++ * before, return the chip to its original power state. ++ */ ++ if (poweroff) ++ drm_bridge_chain_post_disable(bridge); ++ ++ return edid; + } + + static const struct drm_bridge_funcs ps8640_bridge_funcs = { +-- +2.25.1 + diff --git a/board/chromebook/elm/patches/linux/0006-Revert-drm-mediatek-dsi-Fix-scrolling-of-panel-with-.patch b/board/chromebook/elm/patches/linux/0006-Revert-drm-mediatek-dsi-Fix-scrolling-of-panel-with-.patch new file mode 100644 index 00000000..43bffe52 --- /dev/null +++ b/board/chromebook/elm/patches/linux/0006-Revert-drm-mediatek-dsi-Fix-scrolling-of-panel-with-.patch @@ -0,0 +1,41 @@ +From 51109530891c981b681816152bd205724deabcca Mon Sep 17 00:00:00 2001 +From: Jitao Shi +Date: Sat, 10 Oct 2020 15:09:09 +0800 +Subject: [PATCH] Revert "drm/mediatek: dsi: Fix scrolling of panel with small + hfp or hbp" + +This reverts commit 35bf948f1edbf507f6e57e0879fa6ea36d2d2930. + +Signed-off-by: Jitao Shi +Reviewed-by: Bilal Wasim +Tested-by: Bilal Wasim +--- + drivers/gpu/drm/mediatek/mtk_dsi.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c +index 80b7a082e874..16fd99dcdacf 100644 +--- a/drivers/gpu/drm/mediatek/mtk_dsi.c ++++ b/drivers/gpu/drm/mediatek/mtk_dsi.c +@@ -466,13 +466,14 @@ static void mtk_dsi_config_vdo_timing(struct mtk_dsi *dsi) + horizontal_sync_active_byte = (vm->hsync_len * dsi_tmp_buf_bpp - 10); + + if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_SYNC_PULSE) +- horizontal_backporch_byte = vm->hback_porch * dsi_tmp_buf_bpp; ++ horizontal_backporch_byte = ++ (vm->hback_porch * dsi_tmp_buf_bpp - 10); + else +- horizontal_backporch_byte = (vm->hback_porch + vm->hsync_len) * +- dsi_tmp_buf_bpp; ++ horizontal_backporch_byte = ((vm->hback_porch + vm->hsync_len) * ++ dsi_tmp_buf_bpp - 10); + + data_phy_cycles = timing->lpx + timing->da_hs_prepare + +- timing->da_hs_zero + timing->da_hs_exit; ++ timing->da_hs_zero + timing->da_hs_exit + 3; + + if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_BURST) { + if ((vm->hfront_porch + vm->hback_porch) * dsi_tmp_buf_bpp > +-- +2.25.1 + diff --git a/board/chromebook/elm/readme.txt b/board/chromebook/elm/readme.txt new file mode 100644 index 00000000..b63e7e8b --- /dev/null +++ b/board/chromebook/elm/readme.txt @@ -0,0 +1,56 @@ +Mediatek MT8173 aka Chromebook Elm +================================== + +This file describes booting the Chromebook from an SD card containing +Buildroot kernel and rootfs, using the original bootloader. This is +the least invasive way to get Buildroot onto the devices and a good +starting point. + +The bootloader will only boot a kernel from a GPT partition marked +bootable with cgpt tool from vboot-utils package. +The kernel image must be signed using futility from the same package. +The signing part is done by sign.sh script in this directory. + +It does not really matter where rootfs is as long as the kernel is able +to find it, but this particular configuration assumes the kernel is on +partition 1 and rootfs is on partition 2 of the SD card. +Make sure to check kernel.args if you change this. + +Making the boot media +--------------------- +Start by configuring and building the images. + + make chromebook_elm_defconfig + make menuconfig # if necessary + make + +The important files are: + + uImage.kpart (kernel and device tree, signed) + rootfs.tar + bootsd.img (SD card image containing both kernel and rootfs) + +Write the image directly to some SD card. +WARNING: make sure there is nothing important on that card, +and double-check the device name! + + SD=/dev/mmcblk1 # may be /dev/sdX on some hosts + dd if=output/images/bootsd.img of=$SD + +Switching to developer mode and booting from SD +----------------------------------------------- +Power Chromebook down, then power it up while holding Esc+F3. +BEWARE: switching to developer mode deletes all user data. +Create backups if you need them. + +While in developer mode, Chromebook will boot into a white screen saying +"OS verification is off". + +Press Ctrl-D at this screen to boot Chromium OS from eMMC. +Press Ctrl-U at this screen to boot from SD (or USB) +Press Power to power it off. +Do NOT press Space unless you mean it. +This will switch it back to normal mode. + +The is no way to get rid of the white screen without re-flashing the bootloader. + diff --git a/board/chromebook/elm/sign.sh b/board/chromebook/elm/sign.sh new file mode 100755 index 00000000..af1f9d21 --- /dev/null +++ b/board/chromebook/elm/sign.sh @@ -0,0 +1,41 @@ +#!/bin/sh + +# This script creates u-boot FIT image containing the kernel and the DT, +# then signs it using futility from vboot-utils. +# The resulting file is called uImage.kpart. + +BOARD_DIR=$(dirname $0)/${BOARD_NAME} +mkimage=$HOST_DIR/bin/mkimage +futility=$HOST_DIR/bin/futility +devkeys=$HOST_DIR/share/vboot/devkeys + +run() { echo "$@"; "$@"; } +die() { echo "$@" >&2; exit 1; } +test -f $BINARIES_DIR/Image || \ + die "No kernel image found" +test -x $mkimage || \ + die "No mkimage found (host-uboot-tools has not been built?)" +test -x $futility || \ + die "No futility found (host-vboot-utils has not been built?)" + +# kernel.its references Image and mt8173-elm.dtb, and all three +# files must be in current directory for mkimage. +run cp $BOARD_DIR/kernel.its $BINARIES_DIR/kernel.its || exit 1 +echo "# entering $BINARIES_DIR for the next command" +(cd $BINARIES_DIR && run $mkimage -f kernel.its uImage.itb) || exit 1 + +# futility requires non-empty file to be supplied with --bootloader +# even if it does not make sense for the target platform. +echo > $BINARIES_DIR/dummy.txt + +run $futility vbutil_kernel \ + --keyblock $devkeys/kernel.keyblock \ + --signprivate $devkeys/kernel_data_key.vbprivk \ + --arch aarch64 \ + --version 1 \ + --config $BOARD_DIR/kernel.args \ + --vmlinuz $BINARIES_DIR/uImage.itb \ + --bootloader $BINARIES_DIR/dummy.txt \ + --pack $BINARIES_DIR/uImage.kpart || exit 1 + +rm -f $BINARIES_DIR/kernel.its $BINARIES_DIR/dummy.txt diff --git a/board/chromebook/mksd.sh b/board/chromebook/mksd.sh new file mode 100755 index 00000000..cba1578e --- /dev/null +++ b/board/chromebook/mksd.sh @@ -0,0 +1,69 @@ +#!/bin/sh + +# This scripts makes a minimal bootable SD card image for the Chromebook. +# The resulting file is called bootsd.img. It should be written directly +# to the card: +# +# SD=/dev/mmcblk1 # check your device name! +# dd if=output/images/bootsd.img of=$SD +# +# The partitions are created just large enough to hold the kernel and +# the rootfs image. Most of the card will be empty, and the secondary +# GPT will not be in its proper location. + +# cgpt does not create protective MBR, and the kernel refuses to read +# GPT unless there's some kind of MBR in sector 0. So we need parted +# to write that single sector before doing anything with the GPT. +cgpt=$HOST_DIR/bin/cgpt +parted=$HOST_DIR/sbin/parted +kernel=$BINARIES_DIR/uImage.kpart +rootfs=$BINARIES_DIR/rootfs.ext2 + +run() { echo "$@"; "$@"; } +die() { echo "$@" >&2; exit 1; } +test -f $kernel || die "No kernel image found" +test -f $rootfs || die "No rootfs image found" +test -x $cgpt || die "cgpt not found (host-vboot-utils have not been built?)" + +# True file sizes in bytes +kernelsize=`stat -t $kernel | cut -d\ -f2` +rootfssize=`stat -t $rootfs | cut -d\ -f2` + +# The card is partitioned in sectors of 8KB. +# 4 sectors are reserved for MBR+GPT. Their actual size turns out +# to be 33 512-blocks which is just over 2 sectors, but we align +# it to a nice round number. +sec=8192 +kernelsec=$(((kernelsize+8191)>>13)) +rootfssec=$(((rootfssize+8191)>>13)) +headersec=4 + +# There is also a copy of MBR+GPT at the end of the image. +# It's going to be useless but both tools assume it's there. +imagesec=$((2*headersec+kernelsec+rootfssec)) +bootsd="$BINARIES_DIR/bootsd.img" +run dd bs=$sec count=$imagesec if=/dev/zero of=$bootsd + +# cgpt needs offsets and sizes in 512-blocks. +block=512 +kernelstart=$((headersec<<4)) +kernelblocks=$((kernelsec<<4)) +rootfsblocks=$((rootfssec<<4)) +rootfsstart=$((kernelstart+kernelblocks)) + +# This command initializes both GPT and MBR +run $parted -s $bootsd mklabel gpt + +# The kernel partition must be marked as bootable, that's why -S -T -P +run $cgpt add -i 1 -b $kernelstart -s $kernelblocks \ + -t kernel -l kernel \ + -S 1 -T 1 -P 10 $bootsd + +# It does not really matter where the rootfs partition is located as long +# as the kernel can find it. +# However, if anything is changed here, kernel.args must be updated as well. +run $cgpt add -i 2 -b $rootfsstart -s $rootfsblocks \ + -t data -l rootfs $bootsd + +run dd bs=$block if=$kernel of=$bootsd seek=$kernelstart +run dd bs=$block if=$rootfs of=$bootsd seek=$rootfsstart diff --git a/board/chromebook/snow/kernel.args b/board/chromebook/snow/kernel.args new file mode 100644 index 00000000..1220bf84 --- /dev/null +++ b/board/chromebook/snow/kernel.args @@ -0,0 +1 @@ +console=tty1 clk_ignore_unused root=/dev/mmcblk1p2 rootfstype=ext4 ro diff --git a/board/chromebook/snow/kernel.its b/board/chromebook/snow/kernel.its new file mode 100644 index 00000000..c8766ef9 --- /dev/null +++ b/board/chromebook/snow/kernel.its @@ -0,0 +1,37 @@ +/dts-v1/; + +/ { + description = "Buildroot kernel for Chromebook Snow"; + images { + kernel@1 { + description = "kernel"; + data = /incbin/("zImage"); + type = "kernel_noload"; + arch = "arm"; + os = "linux"; + compression = "none"; + load = <0>; + entry = <0>; + hash@1 { + algo = "sha1"; + }; + }; + fdt@1{ + description = "exynos5250-snow.dtb"; + data = /incbin/("exynos5250-snow.dtb"); + type = "flat_dt"; + arch = "arm"; + compression = "none"; + hash@1 { + algo = "sha1"; + }; + }; + }; + configurations { + default = "conf@1"; + conf@1{ + kernel = "kernel@1"; + fdt = "fdt@1"; + }; + }; +}; diff --git a/board/chromebook/snow/linux-4.15-dts-tpm.patch b/board/chromebook/snow/linux-4.15-dts-tpm.patch new file mode 100644 index 00000000..c71ff1b5 --- /dev/null +++ b/board/chromebook/snow/linux-4.15-dts-tpm.patch @@ -0,0 +1,27 @@ +Some versions of u-boot for this Chromebook check for tpm node +in the device tree and fail badly (reboot) if it is not found. + +While not exactly correct, it is much easier to patch the mainline +device tree to match u-boot expectations than to fix u-boot on +this device. + +See https://code.google.com/p/chromium/issues/detail?id=220169 +and https://lkml.org/lkml/2013/3/4/242 + +Signed-off-by: Alex Suykov + +--- a/arch/arm/boot/dts/exynos5250-snow-common.dtsi ++++ b/arch/arm/boot/dts/exynos5250-snow-common.dtsi +@@ -466,6 +466,11 @@ + status = "okay"; + samsung,i2c-sda-delay = <100>; + samsung,i2c-max-bus-freq = <66000>; ++ ++ tpm { ++ compatible = "infineon,slb9635tt"; ++ reg = <0x20>; ++ }; + }; + + &i2c_5 { + diff --git a/board/chromebook/snow/linux-4.15.fragment b/board/chromebook/snow/linux-4.15.fragment new file mode 100644 index 00000000..e2786dac --- /dev/null +++ b/board/chromebook/snow/linux-4.15.fragment @@ -0,0 +1,2 @@ +CONFIG_MWIFIEX=m +CONFIG_MWIFIEX_SDIO=m diff --git a/board/chromebook/snow/readme.txt b/board/chromebook/snow/readme.txt new file mode 100644 index 00000000..1afd9498 --- /dev/null +++ b/board/chromebook/snow/readme.txt @@ -0,0 +1,137 @@ +Samsung XE303C12 aka Chromebook Snow +==================================== + +This file describes booting the Chromebook from an SD card containing +Buildroot kernel and rootfs, using the original bootloader. This is +the least invasive way to get Buildroot onto the devices and a good +starting point. + +The bootloader will only boot a kernel from a GPT partition marked +bootable with cgpt tool from vboot-utils package. +The kernel image must be signed using futility from the same package. +The signing part is done by sign.sh script in this directory. + +It does not really matter where rootfs is as long as the kernel is able +to find it, but this particular configuration assumes the kernel is on +partition 1 and rootfs is on partition 2 of the SD card. +Make sure to check kernel.args if you change this. + +Making the boot media +--------------------- +Start by configuring and building the images. + + make chromebook_snow_defconfig + make menuconfig # if necessary + make + +The important files are: + + uImage.kpart (kernel and device tree, signed) + rootfs.tar + bootsd.img (SD card image containing both kernel and rootfs) + +Write the image directly to some SD card. +WARNING: make sure there is nothing important on that card, +and double-check the device name! + + SD=/dev/mmcblk1 # may be /dev/sdX on some hosts + dd if=output/images/bootsd.img of=$SD + +Switching to developer mode and booting from SD +----------------------------------------------- +Power Chromebook down, then power it up while holding Esc+F3. +BEWARE: switching to developer mode deletes all user data. +Create backups if you need them. + +While in developer mode, Chromebook will boot into a white screen saying +"OS verification is off". + +Press Ctrl-D at this screen to boot Chromium OS from eMMC. +Press Ctrl-U at this screen to boot from SD (or USB) +Press Power to power it off. +Do NOT press Space unless you mean it. +This will switch it back to normal mode. + +The is no way to get rid of the white screen without re-flashing the bootloader. + +Troubleshooting +--------------- +Loud *BEEP* after pressing Ctrl-U means there's no valid partition to boot from. +Which in turn means either bad GPT or improperly signed kernel. + +Return to the OS verification screen without any sounds means the code managed +to reboot the board. May indicate properly signed but invalid image. + +Blank screen means the image is valid and properly signed but cannot boot +for some reason, like missing or incorrect DT. + +In case the board becomes unresponsive: + +* Press Esc+F3+Power. The board should reboot instantly. + Remove SD card to prevent it from attempting a system recovery. + +* Hold Power button for around 10s. The board should shut down into + its soft-off mode. Press Power button again or open the lid to turn in on. + +* If that does not work, disconnect the charger and push a hidden + button on the underside with a pin of some sort. The board should shut + down completely. Opening the lid and pressing Power button will not work. + To turn it back on, connect the charger. + +Partitioning SD card manually +----------------------------- +Check mksd.sh for partitioning commands. + +Use parted and cgpt on a real device, and calculate the partition +sizes properly. The kernel partition may be as small as 4MB, but +you will probably want the rootfs to occupy the whole remaining space. + +cgpt may be used to check current layout: + + output/host/bin/cgpt show $SD + +All sizes and all offsets are in 512-byte blocks. + +Writing kernel and rootfs to a partitioned SD card +-------------------------------------------------- +Write .kpart directly to the bootable partition: + + dd if=output/images/uImage.kpart of=${SD}1 + +Make a new filesystem on the rootfs partition, and unpack rootfs.tar there: + + mkfs.ext4 ${SD}2 + mount ${SD2} /mnt/ + tar -xvf output/images/rootfs.tar -C /mnt/ + umount /mnt/ + +This will require root permissions even if you can write to $SD. + +Kernel command line +------------------- +The command line is taken from board/chromebook/snow/kernel.args and stored +in the vboot header (which also holds the signature). + +The original bootloader prepends "cros_secure console= " to the supplied +command line. The only way to suppress this is to enable CMDLINE_FORCE +in the kernel config, disabling external command line completely. + +That's not necessary however. The mainline kernel ignores cros_secure, +and supplying console=tty1 in kernel.args undoes the effect of console= + +Booting with console= suppresses all kernel output. +As a side effect, it makes /dev/console unusable, which the init in use must +be able to handle. + +WiFi card +--------- +Run modprobe mwifiex_sdio to load the driver. +The name of the device should be mlan0. + +Further reading +--------------- +https://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook +http://linux-exynos.org/wiki/Samsung_Chromebook_XE303C12/Installing_Linux +http://archlinuxarm.org/platforms/armv7/samsung/samsung-chromebook +http://www.de7ec7ed.com/2013/05/application-processor-ap-uart-samsung.html +http://www.de7ec7ed.com/2013/05/embedded-controller-ec-uart-samsung.html diff --git a/board/chromebook/snow/sign.sh b/board/chromebook/snow/sign.sh new file mode 100755 index 00000000..e8f111ff --- /dev/null +++ b/board/chromebook/snow/sign.sh @@ -0,0 +1,41 @@ +#!/bin/sh + +# This script creates u-boot FIT image containing the kernel and the DT, +# then signs it using futility from vboot-utils. +# The resulting file is called uImage.kpart. + +BOARD_DIR=$(dirname $0) +mkimage=$HOST_DIR/bin/mkimage +futility=$HOST_DIR/bin/futility +devkeys=$HOST_DIR/share/vboot/devkeys + +run() { echo "$@"; "$@"; } +die() { echo "$@" >&2; exit 1; } +test -f $BINARIES_DIR/zImage || \ + die "No kernel image found" +test -x $mkimage || \ + die "No mkimage found (host-uboot-tools has not been built?)" +test -x $futility || \ + die "No futility found (host-vboot-utils has not been built?)" + +# kernel.its references zImage and exynos5250-snow.dtb, and all three +# files must be in current directory for mkimage. +run cp $BOARD_DIR/kernel.its $BINARIES_DIR/kernel.its || exit 1 +echo "# entering $BINARIES_DIR for the next command" +(cd $BINARIES_DIR && run $mkimage -f kernel.its uImage.itb) || exit 1 + +# futility requires non-empty file to be supplied with --bootloader +# even if it does not make sense for the target platform. +echo > $BINARIES_DIR/dummy.txt + +run $futility vbutil_kernel \ + --keyblock $devkeys/kernel.keyblock \ + --signprivate $devkeys/kernel_data_key.vbprivk \ + --arch arm \ + --version 1 \ + --config $BOARD_DIR/kernel.args \ + --vmlinuz $BINARIES_DIR/uImage.itb \ + --bootloader $BINARIES_DIR/dummy.txt \ + --pack $BINARIES_DIR/uImage.kpart || exit 1 + +rm -f $BINARIES_DIR/kernel.its $BINARIES_DIR/dummy.txt diff --git a/board/ci20/genimage.cfg b/board/ci20/genimage.cfg new file mode 100644 index 00000000..5f8a16c6 --- /dev/null +++ b/board/ci20/genimage.cfg @@ -0,0 +1,28 @@ +image sdcard.img { + hdimage { + } + + partition uboot-spl { + in-partition-table = "no" + image = "u-boot-spl.bin" + offset = 512 + } + + partition uboot { + in-partition-table = "no" + image = "u-boot.img" + offset = 14k + } + + partition uboot-env { + in-partition-table = "no" + image = "uboot-env.bin" + offset = 526k + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + offset = 2M + } +} diff --git a/board/ci20/patches/uboot/0001-mips-Remove-default-endiannes.patch b/board/ci20/patches/uboot/0001-mips-Remove-default-endiannes.patch new file mode 100644 index 00000000..a6191804 --- /dev/null +++ b/board/ci20/patches/uboot/0001-mips-Remove-default-endiannes.patch @@ -0,0 +1,66 @@ +From b3a1e97498e7987073775d49a703932c20f2df1d Mon Sep 17 00:00:00 2001 +From: Ezequiel Garcia +Date: Mon, 12 Nov 2018 14:04:46 -0300 +Subject: [PATCH] mips: Remove default endiannes + +Currently, trying to build ci20_mmc fails on little-endian +toolchains. The problem seems to be that some targets don't +have CONFIG_SYS_LITTLE_ENDIAN properly set, and therefore +the default -EB switch is selected. + +Let's get rid of the default switch entirely, and fix this problem. +While this may be a hack, it is a quick solution until +U-Boot gets CI20 proper support. + +make ARCH=mips CROSS_COMPILE=mips-linux-gnu- ci20_mmc +Configuring for ci20_mmc - Board: ci20, Options: SPL_MMC_SUPPORT,ENV_IS_IN_MMC +make +make[1]: Entering directory '/home/zeta/repos/u-boot-ci20' +Generating include/autoconf.mk +Generating include/autoconf.mk.dep +mips-linux-gnu-gcc: error: may not use both -EB and -EL +mips-linux-gnu-gcc: error: may not use both -EB and -EL +Generating include/spl-autoconf.mk +mips-linux-gnu-gcc: error: may not use both -EB and -EL +Generating include/tpl-autoconf.mk +mips-linux-gnu-gcc: error: may not use both -EB and -EL +mips-linux-gnu-gcc -DDO_DEPS_ONLY \ + -g -Os -ffunction-sections -fdata-sections -D__KERNEL__ -I/home/zeta/repos/u-boot-ci20/include -fno-builtin -ffreestanding -nostdinc -isystem /home/zeta/repos/buildroot/mips/output/host/opt/ext-toolchain/bin/../lib/gcc/mips-linux-gnu/5.3.0/include -pipe -DCONFIG_MIPS -D__MIPS__ -G 0 -EB -msoft-float -fpic -mabicalls -march=mips32 -mabi=32 -DCONFIG_32BIT -mno-branch-likely -Wall -Wstrict-prototypes \ + -o lib/asm-offsets.s lib/asm-offsets.c -c -S +if [ -f arch/mips/cpu/xburst/jz4780/asm-offsets.c ];then \ + mips-linux-gnu-gcc -DDO_DEPS_ONLY \ + -g -Os -ffunction-sections -fdata-sections -D__KERNEL__ -I/home/zeta/repos/u-boot-ci20/include -fno-builtin -ffreestanding -nostdinc -isystem /home/zeta/repos/buildroot/mips/output/host/opt/ext-toolchain/bin/../lib/gcc/mips-linux-gnu/5.3.0/include -pipe -DCONFIG_MIPS -D__MIPS__ -G 0 -EB -msoft-float -fpic -mabicalls -march=mips32 -mabi=32 -DCONFIG_32BIT -mno-branch-likely -Wall -Wstrict-prototypes \ + -o arch/mips/cpu/xburst/jz4780/asm-offsets.s arch/mips/cpu/xburst/jz4780/asm-offsets.c -c -S; \ +else \ + touch arch/mips/cpu/xburst/jz4780/asm-offsets.s; \ +fi +mips-linux-gnu-gcc: error: may not use both -EB and -EL +make[1]: *** [Makefile:747: lib/asm-offsets.s] Error 1 +make[1]: *** Waiting for unfinished jobs.... +make[1]: Leaving directory '/home/zeta/repos/u-boot-ci20' +make: *** [.boards.depend:463: ci20_mmc] Error 2 + +Signed-off-by: Ezequiel Garcia +--- +https://github.com/MIPS/CI20_u-boot/pull/19 + + arch/mips/config.mk | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/arch/mips/config.mk b/arch/mips/config.mk +index c89279025507..43560abbc0e1 100644 +--- a/arch/mips/config.mk ++++ b/arch/mips/config.mk +@@ -20,9 +20,6 @@ ifdef CONFIG_SYS_BIG_ENDIAN + ENDIANNESS := -EB + endif + +-# Default to EB if no endianess is configured +-ENDIANNESS ?= -EB +- + PLATFORM_CPPFLAGS += -DCONFIG_MIPS -D__MIPS__ + + # +-- +2.19.1 + diff --git a/board/ci20/readme.txt b/board/ci20/readme.txt new file mode 100644 index 00000000..71d50706 --- /dev/null +++ b/board/ci20/readme.txt @@ -0,0 +1,46 @@ +********************* +* MIPS Creator CI20 * +********************* + +Introduction +============ + +The 'ci20_defconfig' will create a root filesystem and a kernel image +under the 'output/images/' directory. This document will try to explain how +to use them in order to run Buildroot in the MIPS Creator CI20 board. + +How to build it +=============== + +Configure Buildroot +------------------- + + $ make ci20_defconfig + +Build the rootfs +---------------- + +Note: you will need to have access to the network, since Buildroot will +download the packages' sources. + +You may now build your rootfs with: + + $ make + +(This may take a while, consider getting yourself a coffee ;-) ) + +How to write the SD card +======================== + +Once the build process is finished you will have an image called +"sdcard.img" in the output/images/ directory. + +Make sure the SD card is not mounted then copy the bootable "sdcard.img" onto +it with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + +Insert the SDcard into your ci20, and power it up. Your new system +should come up now and start a console on the UART HEADER. + +see: https://elinux.org/CI20_Hardware#Dedicated_UART_header diff --git a/board/ci20/uboot-env.txt b/board/ci20/uboot-env.txt new file mode 100644 index 00000000..3093496c --- /dev/null +++ b/board/ci20/uboot-env.txt @@ -0,0 +1,10 @@ +baudrate=115200 +board_mfr=NP +bootargs=console=ttyS4,115200 console=tty0 mem=256M@0x0 mem=768M@0x30000000 rootwait root=/dev/mmcblk0p1 devtmpfs.mount=1 ip=dhcp +bootcmd=run ethargs; ext4load mmc 0:1 0x88000000 /boot/uImage; bootm 0x88000000 +bootdelay=1 +ethargs=env set bootargs ${bootargs} +loads_echo=1 +stderr=eserial0,eserial4 +stdin=eserial0,eserial4 +stdout=eserial0,eserial4 diff --git a/board/csky/gx6605s/gdbinit b/board/csky/gx6605s/gdbinit new file mode 100644 index 00000000..d602aad4 --- /dev/null +++ b/board/csky/gx6605s/gdbinit @@ -0,0 +1,25 @@ +tar jtag jtag://127.0.0.1:1025 +reset + +# setup CCR (Cache Config Reg) +# 0-1:MP,2:IE,3:DE,4:WB,5:RS,6:Z,7:BE +set $cr18 = 0x7d + +# vendor custom setup, double cache line & preload +set $cr30 = 0xc + +# pin mux for serial8250 +set *(unsigned int *) 0xa030a14c |= (1 << 22) | (1 << 23) + +# pass devicetree blob +# r2 is magic +# r3 is address +set $r2 = 0x20150401 +set $r3 = 0x92000000 +restore gx6605s.dtb binary 0x92000000 + +# flush cache +set $cr17 = 0x33 + +load + diff --git a/board/csky/gx6605s/gx6605s.dts b/board/csky/gx6605s/gx6605s.dts new file mode 100644 index 00000000..e4d46f59 --- /dev/null +++ b/board/csky/gx6605s/gx6605s.dts @@ -0,0 +1,155 @@ +/dts-v1/; +#include +#include + +/ { + model = "C-SKY gx6605s"; + compatible = "csky,gx6605s"; + #address-cells = <1>; + #size-cells = <1>; + + memory { + device_type = "memory"; + reg = <0x10000000 0x04000000>; + }; + + soc { + #address-cells = <1>; + #size-cells = <1>; + compatible = "simple-bus"; + ranges; + + dummy_apb: apb-clock { + compatible = "fixed-clock"; + clock-frequency = <27000000>; + clock-output-names = "dummy_apb"; + #clock-cells = <0>; + }; + + intc: interrupt-controller@500000 { + compatible = "csky,gx6605s-intc"; + reg = <0x00500000 0x400>; + interrupt-controller; + #interrupt-cells = <1>; + }; + + timer@20a000 { + compatible = "csky,gx6605s-timer"; + reg = <0x0020a000 0x400>; + clocks = <&dummy_apb>; + interrupts = <10>; + interrupt-parent = <&intc>; + }; + + ehci-hcd@900000 { + compatible = "generic-ehci"; + reg = <0x00900000 0x400>; + interrupt-parent = <&intc>; + interrupts = <59>; + }; + + ohci-hcd0@a00000 { + compatible = "generic-ohci"; + reg = <0x00a00000 0x400>; + interrupt-parent = <&intc>; + interrupts = <58>; + }; + + ohci-hcd1@b00000 { + compatible = "generic-ohci"; + reg = <0x00b00000 0x400>; + interrupt-parent = <&intc>; + interrupts = <57>; + }; + + serial@403000 { + compatible = "ns16550a"; + reg = <0x00403000 0x400>; + interrupt-parent = <&intc>; + interrupts = <15>; + clock-frequency = <29491200>; + baud = <115200>; + reg-shift = <2>; + reg-io-width = <1>; + }; + + gpio0: gpio@305000 { + compatible = "wd,mbl-gpio"; + reg-names = "dirout", "dat", "set", "clr"; + reg = <0x305000 4>, <0x305004 4>, <0x305008 4>, <0x30500c 4>; + bgpio-base = <0>; + #gpio-cells = <2>; + gpio-controller; + }; + + gpio_buttons { + compatible = "gpio-keys-polled"; + #address-cells = <1>; + #size-cells = <0>; + poll-interval = <100>; + autorepeat; + + button0 { + label = "button8"; + linux,code = ; + gpios = <&gpio0 8 GPIO_ACTIVE_LOW>; + }; + + button1 { + label = "button6"; + linux,code = ; + gpios = <&gpio0 6 GPIO_ACTIVE_LOW>; + }; + + button2 { + label = "button5"; + linux,code = ; + gpios = <&gpio0 5 GPIO_ACTIVE_LOW>; + }; + + button3 { + label = "button9"; + linux,code = ; + gpios = <&gpio0 9 GPIO_ACTIVE_LOW>; + }; + + button4 { + label = "button7"; + linux,code = ; + gpios = <&gpio0 7 GPIO_ACTIVE_LOW>; + }; + }; + + gpio_leds { + compatible = "gpio-leds"; + + led0 { + label = "led10"; + gpios = <&gpio0 10 GPIO_ACTIVE_LOW>; + linux,default-trigger = "heartbeat"; + }; + + led1 { + label = "led11"; + gpios = <&gpio0 11 GPIO_ACTIVE_LOW>; + linux,default-trigger = "timer"; + }; + + led2 { + label = "led12"; + gpios = <&gpio0 12 GPIO_ACTIVE_LOW>; + linux,default-trigger = "default-on"; + }; + + led3 { + label = "led13"; + gpios = <&gpio0 13 GPIO_ACTIVE_LOW>; + linux,default-trigger = "default-on"; + }; + }; + }; + + chosen { + bootargs = "console=ttyS0,115200 init=/sbin/init root=/dev/sda2 rw rootwait"; + }; +}; diff --git a/board/csky/readme.txt b/board/csky/readme.txt new file mode 100644 index 00000000..dc82dcc1 --- /dev/null +++ b/board/csky/readme.txt @@ -0,0 +1,88 @@ +C-SKY Development Kit + +Intro +===== + +C-SKY is a CPU Architecture from www.c-sky.com and has it own instruction set. +Just like arm and mips in linux/arch, it named as 'csky'. + +gx6605s develop board is made by Hangzhou Nationalchip and C-SKY. + +Hardware Spec: + * CPU: ck610 up to 594Mhz + * Integrate with 64MB ddr2 in SOC. + * Integrate with hardware Jtag. + * Integrate with usb-to-serial chip. + * USB ehci controller in SOC. + * Power Supply: DC 5V from two micro-usb. + +How to build it +=============== + +Configure Buildroot +------------------- + +The csky_gx6605s_defconfig configuration is a sample configuration with +all that is required to bring the gx6605s Development Board: + + $ make csky_gx6605s_defconfig + +Build everything +---------------- + +Note: you will need to have access to the network, since Buildroot will +download the packages' sources. + + $ make + +Result of the build +------------------- + +After building, you should obtain this tree: + + output/images/ + +-- vmlinux + +-- rootfs.ext2 + +-- .dtb + +How to run it +============= + +Prepare Jtag-Server +------------------- + + Download the Jtag-Server here: + + https://github.com/c-sky/tools/raw/master/DebugServerConsole-linux-x86_64-V4.2.00-20161213.tar.gz + + Go to the unpacked directory: + + $./DebugServerConsole -ddc -rstwait 1000 -prereset -port 1025 + + Perhaps you need to use "sudo", which need libusb to detect c510:b210 + + $ sudo ./DebugServerConsole -ddc -rstwait 1000 -prereset -port 1025 + +Prepare USB drive +----------------- + + You sould determine which device associated to the usb drive + carefully. eg: + + $ cat /proc/partitions + 8 48 1971712 sdd + 8 49 976720 sdd1 + + $ sudo dd if=rootfs.ext2 of=/dev/sdd1 + $ sudo sync + +Run +--- + + Plug the usb drive on gx6605s dev board. + + Setup the Console with the rate 115200/8-N-1. + + $ cd output/images + $ ../host/bin/csky-linux-gdb -x ../../board/csky/gx6605s/gdbinit vmlinux + diff --git a/board/cubietech/cubieboard2/boot.cmd b/board/cubietech/cubieboard2/boot.cmd new file mode 100644 index 00000000..a9ae0e24 --- /dev/null +++ b/board/cubietech/cubieboard2/boot.cmd @@ -0,0 +1,5 @@ +setenv fdt_high ffffffff +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait +fatload mmc 0 $kernel_addr_r zImage +fatload mmc 0 $fdt_addr_r sun7i-a20-cubieboard2.dtb +bootz $kernel_addr_r - $fdt_addr_r diff --git a/board/cubietech/cubieboard2/genimage.cfg b/board/cubietech/cubieboard2/genimage.cfg new file mode 100644 index 00000000..b082ab0d --- /dev/null +++ b/board/cubietech/cubieboard2/genimage.cfg @@ -0,0 +1,37 @@ +# Minimal SD card image for the Cubieboard2 +# Based in the Orange Pi genimage.cfg + +image boot.vfat { + vfat { + files = { + "zImage", + "sun7i-a20-cubieboard2.dtb", + "boot.scr" + } + } + size = 10M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/cubietech/cubieboard2/post-image.sh b/board/cubietech/cubieboard2/post-image.sh new file mode 100755 index 00000000..9cca1b17 --- /dev/null +++ b/board/cubietech/cubieboard2/post-image.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" +GENIMAGE_CFG="${BOARD_DIR}/genimage.cfg" +GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp" + +rm -rf "${GENIMAGE_TMP}" + +genimage \ + --rootpath "${TARGET_DIR}" \ + --tmppath "${GENIMAGE_TMP}" \ + --inputpath "${BINARIES_DIR}" \ + --outputpath "${BINARIES_DIR}" \ + --config "${GENIMAGE_CFG}" + +exit $? diff --git a/board/embest/riotboard/genimage.cfg b/board/embest/riotboard/genimage.cfg new file mode 100644 index 00000000..1221c83b --- /dev/null +++ b/board/embest/riotboard/genimage.cfg @@ -0,0 +1,17 @@ +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot.imx" + offset = 1024 + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext2" + offset = 1M + size = 60M + } +} diff --git a/board/embest/riotboard/readme.txt b/board/embest/riotboard/readme.txt new file mode 100644 index 00000000..4ba836fa --- /dev/null +++ b/board/embest/riotboard/readme.txt @@ -0,0 +1,38 @@ +Buildroot for Embest RIoTboard +============================== + +This is a small development board, based on Freescale IMX6 Solo SoC +(single core ARM Cortex-A9). + +More details about the board can be found at: + + http://www.embest-tech.com/riotboard + +1. Compiling buildroot +---------------------- + +$ make riotboard_defconfig +$ make + +2. Installing buildroot +----------------------- + +Prepare an SD-card and plug it into your card reader. Always double +check the block device before writing to it, as writing to the wrong +block device can cause irrecoverable data loss. Now you can write the +image to your SD-card: + +sudo dd if=output/images/sdcard.img of=/dev/ bs=1M + +3. Running buildroot +-------------------- + +Position the board so you can read the label "RIoTboard" on the right +side of SW1 DIP switches. Configure the SW1 swiches like this: + +1 0 1 0 0 1 0 1 +ON OFF ON OFF OFF ON OFF ON + +Now plug your prepared SD-card in slot J6. Connect a serial console +(115200, 8, N, 1) to header J18. Connect a 5V/1A power supply to the +board and enjoy. diff --git a/board/embest/riotboard/rootfs_overlay/boot/extlinux/extlinux.conf b/board/embest/riotboard/rootfs_overlay/boot/extlinux/extlinux.conf new file mode 100644 index 00000000..23e48a0d --- /dev/null +++ b/board/embest/riotboard/rootfs_overlay/boot/extlinux/extlinux.conf @@ -0,0 +1,6 @@ +default buildroot + +label buildroot +kernel /boot/zImage +devicetree /boot/imx6dl-riotboard.dtb +append console=ttymxc1,115200 root=/dev/mmcblk1p1 rw diff --git a/board/engicam/geam6ul/genimage.cfg b/board/engicam/geam6ul/genimage.cfg new file mode 100644 index 00000000..fcca6e17 --- /dev/null +++ b/board/engicam/geam6ul/genimage.cfg @@ -0,0 +1,38 @@ +image boot.vfat { + vfat { + files = { + "uImage", + "imx6ul-geam-kit.dtb" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition SPL { + in-partition-table = "no" + image = "SPL" + offset = 1024 + } + + partition u-boot-dtb { + in-partition-table = "no" + image = "u-boot-dtb.img" + offset = 69K + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 8M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext2" + } +} diff --git a/board/engicam/geam6ul/readme.txt b/board/engicam/geam6ul/readme.txt new file mode 100644 index 00000000..ace993a6 --- /dev/null +++ b/board/engicam/geam6ul/readme.txt @@ -0,0 +1,66 @@ +******************************************** +Buildroot for Engicam GEAM6UL SOM platforms: +******************************************** + +This file documents the Buildroot support for all Engicam GEAM6UL +SOM platform boards. + +GEAM6UL SOM Starter kits: +https://www.engicam.com/vis-prod/101115 + +This configuration uses U-Boot mainline and kernel mainline. + +Build +===== + +First, configure Buildroot for the Engicam GEAM6UL SOM: + +- for GEAM6UL SOM: + + make engicam_imx6ul_geam_defconfig + +Build all components: + + make + +You will find the following files in output/images/: + - imx6ul-geam-kit.dtb + - rootfs.ext4 + - rootfs.tar + - sdcard.img + - SPL + - u-boot-dtb.img + - uImage + +Create a bootable SD card +========================= + +To determine the device associated to the SD card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on a SD card. Launch the following +command as root: + + dd if=output/images/sdcard.img of=/dev/ + sync + +*** WARNING! This will destroy all the card content. Use with care! *** + +For details about the medium image layout, see the definition in +board/engicam/geam6ul/genimage.cfg + +Boot the GEAM6UL boards with SD boot: +==================================== + +To boot your newly created system: +- insert the SD card in the SD slot of the board; +- connect 3-wire RS232 serial port J28 on board, and connect with other + serial end or USB cable(if serial-to-usb converter used) using + a terminal emulator at 115200 bps, 8n1; +- close JM3 for sd boot. +- power on the board. + +Enjoy! diff --git a/board/engicam/icorem6/genimage.cfg b/board/engicam/icorem6/genimage.cfg new file mode 100644 index 00000000..835d9058 --- /dev/null +++ b/board/engicam/icorem6/genimage.cfg @@ -0,0 +1,41 @@ +image boot.vfat { + vfat { + files = { + "uImage", + "imx6dl-icore.dtb", + "imx6q-icore.dtb", + "imx6q-icore-ofcap10.dtb", + "imx6q-icore-ofcap12.dtb" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition SPL { + in-partition-table = "no" + image = "SPL" + offset = 1024 + } + + partition u-boot-dtb { + in-partition-table = "no" + image = "u-boot-dtb.img" + offset = 69K + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 8M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext2" + } +} diff --git a/board/engicam/icorem6/linux_qt5.fragment b/board/engicam/icorem6/linux_qt5.fragment new file mode 100644 index 00000000..5c0505e5 --- /dev/null +++ b/board/engicam/icorem6/linux_qt5.fragment @@ -0,0 +1,4 @@ +# Currently kernel mainline exhibits issues when running cpufreq as ondemand +# governor on mx6. +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y diff --git a/board/engicam/icorem6/readme.txt b/board/engicam/icorem6/readme.txt new file mode 100644 index 00000000..bd78c5a5 --- /dev/null +++ b/board/engicam/icorem6/readme.txt @@ -0,0 +1,93 @@ +********************************************* +Buildroot for Engicam i.CoreM6 SOM platforms: +********************************************* + +This file documents the Buildroot support for Engicam i.CoreM6 +platform boards. + +i.CoreM6 Quad/Dual/DualLite/Solo SOM Starter kits: +https://www.engicam.com/vis-prod/101120 +i.CoreM6 Quad/Dual/DualLite/Solo Open Frame 10.1 C.TOUCH kits: +https://www.engicam.com/vis-prod/101133 + +This configuration uses U-Boot mainline and kernel mainline. + +Build +===== + +First, configure Buildroot for the Engicam i.CoreM6: + + make engicam_imx6qdl_icore_defconfig + +Build all components: + + make + +You will find the following files in output/images/: + - imx6q-icore.dtb (for i.CoreM6 Quad/Dual) + - imx6dl-icore.dtb (for i.CoreM6 DualLite/Solo) + - imx6q-icore-ofcap10.dtb (for i.CoreM6 Quad/Dual ofcap 10) + - imx6q-icore-ofcap12.dtb (for i.CoreM6 Quad/Dual ofcap 12) + - rootfs.ext4 + - rootfs.tar + - sdcard.img + - SPL + - u-boot-dtb.img + - uImage + +Create a bootable SD card +========================= + +To determine the device associated to the SD card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on a SD card. Launch the following +command as root: + + dd if=output/images/sdcard.img of=/dev/ + sync + +*** WARNING! This will destroy all the card content. Use with care! *** + +For details about the medium image layout, see the definition in +board/engicam/icorem6/genimage.cfg + +Boot the i.CoreM6 boards with SD boot: +===================================== + +To boot your newly created system: +- insert the SD card in the SD slot of the board; +- connect 3-wire RS232 serial port J28 on board, and connect with other + serial end or USB cable(if serial-to-usb converter used) using + a terminal emulator at 115200 bps, 8n1; +- close JM3 for sd boot. +- power on the board. + +Testing graphics on i.CoreM6: +============================ + +Build with support for Etnaviv, Qt5 and demo applications: + + make engicam_imx6qdl_icore_qt5_defconfig + make + +Running kmscube +# kmscube -D /dev/dri/card1 + +Running glmark2-es2-drm +# glmark2-es2-drm + +Running Qt5 Cinematic Demo: +- for i.CoreM6 Starter Kit +# export QT_QPA_EGLFS_KMS_CONFIG=/root/imx6qdl-icore.json +- for i.CoreM6 ofcap10 +# export QT_QPA_EGLFS_KMS_CONFIG=/root/imx6qdl-icore-ofcap10.json +- for i.CoreM6 ofcap12 +# export QT_QPA_EGLFS_KMS_CONFIG=/root/imx6qdl-icore-ofcap12.json + +# CinematicExperience-demo + +Enjoy! diff --git a/board/engicam/icorem6/rootfs_overlay/root/imx6qdl-icore-ofcap10.json b/board/engicam/icorem6/rootfs_overlay/root/imx6qdl-icore-ofcap10.json new file mode 100644 index 00000000..3bfe4a23 --- /dev/null +++ b/board/engicam/icorem6/rootfs_overlay/root/imx6qdl-icore-ofcap10.json @@ -0,0 +1,11 @@ +{ + "device": "/dev/dri/card1", + "hwcursor": false, + "pbuffers": true, + "outputs": [ + { + "name": "LVDS1", + "mode": "1280x800" + } + ] +} diff --git a/board/engicam/icorem6/rootfs_overlay/root/imx6qdl-icore-ofcap12.json b/board/engicam/icorem6/rootfs_overlay/root/imx6qdl-icore-ofcap12.json new file mode 100644 index 00000000..ea5ce6f9 --- /dev/null +++ b/board/engicam/icorem6/rootfs_overlay/root/imx6qdl-icore-ofcap12.json @@ -0,0 +1,11 @@ +{ + "device": "/dev/dri/card1", + "hwcursor": false, + "pbuffers": true, + "outputs": [ + { + "name": "LVDS1", + "mode": "1280x480" + } + ] +} diff --git a/board/engicam/icorem6/rootfs_overlay/root/imx6qdl-icore.json b/board/engicam/icorem6/rootfs_overlay/root/imx6qdl-icore.json new file mode 100644 index 00000000..b4fa359b --- /dev/null +++ b/board/engicam/icorem6/rootfs_overlay/root/imx6qdl-icore.json @@ -0,0 +1,11 @@ +{ + "device": "/dev/dri/card1", + "hwcursor": false, + "pbuffers": true, + "outputs": [ + { + "name": "LVDS1", + "mode": "800x480" + } + ] +} diff --git a/board/engicam/icorem6_rqs/genimage.cfg b/board/engicam/icorem6_rqs/genimage.cfg new file mode 100644 index 00000000..967d10b1 --- /dev/null +++ b/board/engicam/icorem6_rqs/genimage.cfg @@ -0,0 +1,39 @@ +image boot.vfat { + vfat { + files = { + "uImage", + "imx6dl-icore-rqs.dtb", + "imx6q-icore-rqs.dtb" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition SPL { + in-partition-table = "no" + image = "SPL" + offset = 1024 + } + + partition u-boot-dtb { + in-partition-table = "no" + image = "u-boot-dtb.img" + offset = 69K + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 8M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext2" + } +} diff --git a/board/engicam/icorem6_rqs/readme.txt b/board/engicam/icorem6_rqs/readme.txt new file mode 100644 index 00000000..a0bf6f50 --- /dev/null +++ b/board/engicam/icorem6_rqs/readme.txt @@ -0,0 +1,69 @@ +************************************************* +Buildroot for Engicam i.CoreM6 RQS SOM platforms: +************************************************* + +This file documents the Buildroot support for Engicam i.CoreM6 RQS +SOM platform boards. + +i.CoreM6 Quad/Dual/DualLite/Solo RQS SOM Starter kits: +https://www.engicam.com/vis-prod/101124 + +This configuration uses U-Boot mainline and kernel mainline. + +Build +===== + +First, configure Buildroot for the Engicam i.CoreM6 RQS: + +- for i.CoreM6 RQS Quad/Dual/DualLite/Solo: + + make engicam_imx6qdl_icore_rqs_defconfig + +Build all components: + + make + +You will find the following files in output/images/: +- for i.CoreM6 Quad/Dual RQS: + - imx6q-icore-rqs.dtb +- for i.CoreM6 DualLite/Solo RQS: + - imx6dl-icore-rqs.dtb + - rootfs.ext4 + - rootfs.tar + - sdcard.img + - SPL + - u-boot-dtb.img + - uImage + +Create a bootable SD card +========================= + +To determine the device associated to the SD card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on a SD card. Launch the following +command as root: + + dd if=output/images/sdcard.img of=/dev/ + sync + +*** WARNING! This will destroy all the card content. Use with care! *** + +For details about the medium image layout, see the definition in +board/engicam/icorem6_rqs/genimage.cfg + +Boot the i.CoreM6 RQS boards with SD boot: +========================================= + +To boot your newly created system: +- insert the SD card in the SD slot of the board; +- connect 3-wire RS232 serial port J7 on board, and connect with other + serial end or USB cable(if serial-to-usb converter used) using + a terminal emulator at 115200 bps, 8n1; +- close JM2 for sd boot. +- power on the board. + +Enjoy! diff --git a/board/engicam/isiot/genimage.cfg b/board/engicam/isiot/genimage.cfg new file mode 100644 index 00000000..dc8c20db --- /dev/null +++ b/board/engicam/isiot/genimage.cfg @@ -0,0 +1,38 @@ +image boot.vfat { + vfat { + files = { + "uImage", + "imx6ul-isiot-emmc.dtb" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition SPL { + in-partition-table = "no" + image = "SPL" + offset = 1024 + } + + partition u-boot-dtb { + in-partition-table = "no" + image = "u-boot-dtb.img" + offset = 69K + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 8M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext2" + } +} diff --git a/board/engicam/isiot/readme.txt b/board/engicam/isiot/readme.txt new file mode 100644 index 00000000..5394007c --- /dev/null +++ b/board/engicam/isiot/readme.txt @@ -0,0 +1,66 @@ +******************************************** +Buildroot for Engicam Is.IoT SOM platforms: +******************************************** + +This file documents the Buildroot support for all Engicam Is.IoT MX6UL +SOM platform boards. + +Is.IoT MX6UL SOM Starter kits: +https://www.engicam.com/vis-prod/101122 + +This configuration uses U-Boot mainline and kernel mainline. + +Build +===== + +First, configure Buildroot for the Engicam Is.IoT MX6UL SOM: + +- for Is.IoT MX6UL SOM: + + make engicam_imx6ul_isiot_defconfig + +Build all components: + + make + +You will find the following files in output/images/: + - imx6ul-isiot-emmc.dtb + - rootfs.ext4 + - rootfs.tar + - sdcard.img + - SPL + - u-boot-dtb.img + - uImage + +Create a bootable SD card +========================= + +To determine the device associated to the SD card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on a SD card. Launch the following +command as root: + + dd if=output/images/sdcard.img of=/dev/ + sync + +*** WARNING! This will destroy all the card content. Use with care! *** + +For details about the medium image layout, see the definition in +board/engicam/isiot/genimage.cfg + +Boot the Is.IoT MX6UL boards with SD boot: +========================================= + +To boot your newly created system: +- insert the SD card in the SD slot of the board; +- connect 3-wire RS232 serial port J28 on board, and connect with other + serial end or USB cable(if serial-to-usb converter used) using + a terminal emulator at 115200 bps, 8n1; +- close JM3 for sd boot. +- power on the board. + +Enjoy! diff --git a/board/firefly/roc-rk3399-pc/extlinux.conf b/board/firefly/roc-rk3399-pc/extlinux.conf new file mode 100644 index 00000000..50a358fa --- /dev/null +++ b/board/firefly/roc-rk3399-pc/extlinux.conf @@ -0,0 +1,4 @@ +label RK3399RocPC linux + kernel /boot/Image + devicetree /boot/rk3399-roc-pc.dtb + append earlycon=uart8250,mmio32,0xff1a0000 root=/dev/mmcblk0p1 rootwait diff --git a/board/firefly/roc-rk3399-pc/genimage.cfg b/board/firefly/roc-rk3399-pc/genimage.cfg new file mode 100644 index 00000000..966c8692 --- /dev/null +++ b/board/firefly/roc-rk3399-pc/genimage.cfg @@ -0,0 +1,22 @@ +image sdcard.img { + hdimage { + } + + partition u-boot-tpl-spl-dtb { + in-partition-table = "no" + image = "idbloader.img" + offset = 32K + } + + partition u-boot-dtb { + in-partition-table = "no" + image = "u-boot.itb" + offset = 8M + size = 30M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/firefly/roc-rk3399-pc/post-build.sh b/board/firefly/roc-rk3399-pc/post-build.sh new file mode 100755 index 00000000..1f5ff6a6 --- /dev/null +++ b/board/firefly/roc-rk3399-pc/post-build.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" + +install -m 0644 -D $BOARD_DIR/extlinux.conf $TARGET_DIR/boot/extlinux/extlinux.conf diff --git a/board/firefly/roc-rk3399-pc/readme.txt b/board/firefly/roc-rk3399-pc/readme.txt new file mode 100644 index 00000000..8a6f1cde --- /dev/null +++ b/board/firefly/roc-rk3399-pc/readme.txt @@ -0,0 +1,40 @@ +Libre Computer Board ROC-RK3399-PC +=================================== + +Build: + + $ make roc_pc_rk3399_defconfig + $ make + +Files created in output directory +================================= + +output/images + +├── bl31.elf +├── idbloader.img +├── Image +├── rk3399-roc-pc.dtb +├── rootfs.ext2 +├── rootfs.ext4 -> rootfs.ext2 +├── rootfs.tar +├── sdcard.img +├── u-boot.bin +└── u-boot.itb + +Creating bootable SD card: +========================== + +Simply invoke (as root) + +sudo dd if=output/images/sdcard.img of=/dev/sdX && sync + +Where X is your SD card device + +Serial console +-------------- + +Baudrate for this board is 1500000 + +Wiki link: +https://wiki.amarulasolutions.com/bsp/rockchip/rk3399/roc-rk3399-pc.html diff --git a/board/freescale/common/imx/genimage.cfg.template b/board/freescale/common/imx/genimage.cfg.template new file mode 100644 index 00000000..61b09bde --- /dev/null +++ b/board/freescale/common/imx/genimage.cfg.template @@ -0,0 +1,41 @@ +# Minimal SD card image for the Freescale boards Template +# +# We mimic the .sdcard Freescale's image format: +# * the SD card must have 1 kB free space at the beginning, +# * U-Boot is dumped as is, +# * a FAT partition at offset 8 MB is containing zImage/uImage and DTB files +# * a single root filesystem partition is required (ext2, ext3 or ext4) +# + +image boot.vfat { + vfat { + label = "boot" + files = { + %FILES% + } + } + size = 16M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "%UBOOTBIN%" + offset = 1024 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 8M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext2" + } +} diff --git a/board/freescale/common/imx/genimage.cfg.template_imx8 b/board/freescale/common/imx/genimage.cfg.template_imx8 new file mode 100644 index 00000000..56892050 --- /dev/null +++ b/board/freescale/common/imx/genimage.cfg.template_imx8 @@ -0,0 +1,41 @@ +# Minimal SD card image for the Freescale iMX8 boards +# +# We mimic the .sdcard Freescale's image format: +# * the SD card must have 33 kB free space at the beginning, +# * U-Boot is integrated into imx8-boot-sd.bin and is dumped as is, +# * a FAT partition at offset 8MB is containing Image and DTB files +# * a single root filesystem partition is required (ext2, ext3 or ext4) +# + +image boot.vfat { + vfat { + label = "boot" + files = { + %FILES% + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition imx-boot { + in-partition-table = "no" + image = "imx8-boot-sd.bin" + offset = %IMXOFFSET% + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 8M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext2" + } +} diff --git a/board/freescale/common/imx/genimage.cfg.template_no_boot_part_spl b/board/freescale/common/imx/genimage.cfg.template_no_boot_part_spl new file mode 100644 index 00000000..c2903257 --- /dev/null +++ b/board/freescale/common/imx/genimage.cfg.template_no_boot_part_spl @@ -0,0 +1,30 @@ +# Minimal SD card image for the Freescale boards Template for SPL Boot +# +# We mimic the .sdcard Freescale's image format: +# * the SD card must have 1 kB free space at the beginning, +# * SPL is at the offset expected by ROM, +# * U-Boot is at the offset expected by SPL, +# * The first partition is expected to be an ext2 and have a /boot directory. +# + +image sdcard.img { + hdimage { + } + + partition spl { + in-partition-table = "no" + image = "SPL" + offset = 1024 + } + + partition u-boot { + in-partition-table = "no" + image = "%UBOOTBIN%" + offset = 69K + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext2" + } +} diff --git a/board/freescale/common/imx/genimage.cfg.template_spl b/board/freescale/common/imx/genimage.cfg.template_spl new file mode 100644 index 00000000..3b0667c3 --- /dev/null +++ b/board/freescale/common/imx/genimage.cfg.template_spl @@ -0,0 +1,47 @@ +# Minimal SD card image for the Freescale boards Template for SPL Boot +# +# We mimic the .sdcard Freescale's image format: +# * the SD card must have 1 kB free space at the beginning, +# * U-Boot is dumped as is, +# * a FAT partition at offset 8MB is containing zImage/uImage and DTB files +# * a single root filesystem partition is required (ext2, ext3 or ext4) +# + +image boot.vfat { + vfat { + label = "boot" + files = { + %FILES% + } + } + size = 16M +} + +image sdcard.img { + hdimage { + } + + partition spl { + in-partition-table = "no" + image = "SPL" + offset = 1024 + } + + partition u-boot { + in-partition-table = "no" + image = "%UBOOTBIN%" + offset = 69K + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 8M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext2" + } +} diff --git a/board/freescale/common/imx/imx8-bootloader-prepare.sh b/board/freescale/common/imx/imx8-bootloader-prepare.sh new file mode 100755 index 00000000..cb7c37bf --- /dev/null +++ b/board/freescale/common/imx/imx8-bootloader-prepare.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash + +main () +{ + UBOOT_DTB=$2 + if [ ! -e "$UBOOT_DTB" ]; then + echo "ERROR: couldn't find dtb: $UBOOT_DTB" + exit 1 + fi + + if grep -Eq "^BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M=y$" ${BR2_CONFIG}; then + cat ${BINARIES_DIR}/u-boot-spl.bin ${BINARIES_DIR}/ddr_fw.bin > ${BINARIES_DIR}/u-boot-spl-ddr.bin + BL31=${BINARIES_DIR}/bl31.bin BL33=${BINARIES_DIR}/u-boot-nodtb.bin ATF_LOAD_ADDR=0x00910000 ${HOST_DIR}/bin/mkimage_fit_atf.sh ${UBOOT_DTB} > ${BINARIES_DIR}/u-boot.its + ${HOST_DIR}/bin/mkimage -E -p 0x3000 -f ${BINARIES_DIR}/u-boot.its ${BINARIES_DIR}/u-boot.itb + rm -f ${BINARIES_DIR}/u-boot.its + + ${HOST_DIR}/bin/mkimage_imx8 -fit -signed_hdmi ${BINARIES_DIR}/signed_hdmi_imx8m.bin -loader ${BINARIES_DIR}/u-boot-spl-ddr.bin 0x7E1000 -second_loader ${BINARIES_DIR}/u-boot.itb 0x40200000 0x60000 -out ${BINARIES_DIR}/imx8-boot-sd.bin + elif grep -Eq "^BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MM=y$" ${BR2_CONFIG}; then + cat ${BINARIES_DIR}/u-boot-spl.bin ${BINARIES_DIR}/ddr_fw.bin > ${BINARIES_DIR}/u-boot-spl-ddr.bin + BL31=${BINARIES_DIR}/bl31.bin BL33=${BINARIES_DIR}/u-boot-nodtb.bin ATF_LOAD_ADDR=0x00920000 ${HOST_DIR}/bin/mkimage_fit_atf.sh ${UBOOT_DTB} > ${BINARIES_DIR}/u-boot.its + ${HOST_DIR}/bin/mkimage -E -p 0x3000 -f ${BINARIES_DIR}/u-boot.its ${BINARIES_DIR}/u-boot.itb + rm -f ${BINARIES_DIR}/u-boot.its + + ${HOST_DIR}/bin/mkimage_imx8 -fit -loader ${BINARIES_DIR}/u-boot-spl-ddr.bin 0x7E1000 -second_loader ${BINARIES_DIR}/u-boot.itb 0x40200000 0x60000 -out ${BINARIES_DIR}/imx8-boot-sd.bin + elif grep -Eq "^BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MN=y$" ${BR2_CONFIG}; then + cat ${BINARIES_DIR}/u-boot-spl.bin ${BINARIES_DIR}/ddr_fw.bin > ${BINARIES_DIR}/u-boot-spl-ddr.bin + BL31=${BINARIES_DIR}/bl31.bin BL33=${BINARIES_DIR}/u-boot-nodtb.bin ATF_LOAD_ADDR=0x00960000 ${HOST_DIR}/bin/mkimage_fit_atf.sh ${UBOOT_DTB} > ${BINARIES_DIR}/u-boot.its + ${HOST_DIR}/bin/mkimage -E -p 0x3000 -f ${BINARIES_DIR}/u-boot.its ${BINARIES_DIR}/u-boot.itb + rm -f ${BINARIES_DIR}/u-boot.its + + ${HOST_DIR}/bin/mkimage_imx8 -v v2 -fit -loader ${BINARIES_DIR}/u-boot-spl-ddr.bin 0x912000 -second_loader ${BINARIES_DIR}/u-boot.itb 0x40200000 0x60000 -out ${BINARIES_DIR}/imx8-boot-sd.bin + else + ${HOST_DIR}/bin/mkimage_imx8 -commit > ${BINARIES_DIR}/mkimg.commit + cat ${BINARIES_DIR}/u-boot.bin ${BINARIES_DIR}/mkimg.commit > ${BINARIES_DIR}/u-boot-hash.bin + cp ${BINARIES_DIR}/bl31.bin ${BINARIES_DIR}/u-boot-atf.bin + dd if=${BINARIES_DIR}/u-boot-hash.bin of=${BINARIES_DIR}/u-boot-atf.bin bs=1K seek=128 + if grep -Eq "^BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8=y$" ${BR2_CONFIG}; then + ${HOST_DIR}/bin/mkimage_imx8 -soc QM -rev B0 -append ${BINARIES_DIR}/ahab-container.img -c -scfw ${BINARIES_DIR}/mx8qm-mek-scfw-tcm.bin -ap ${BINARIES_DIR}/u-boot-atf.bin a53 0x80000000 -out ${BINARIES_DIR}/imx8-boot-sd.bin + else + ${HOST_DIR}/bin/mkimage_imx8 -soc QX -rev B0 -append ${BINARIES_DIR}/ahab-container.img -c -scfw ${BINARIES_DIR}/mx8qx-mek-scfw-tcm.bin -ap ${BINARIES_DIR}/u-boot-atf.bin a35 0x80000000 -out ${BINARIES_DIR}/imx8-boot-sd.bin + fi + fi + + exit $? +} + +main $@ diff --git a/board/freescale/common/imx/post-image.sh b/board/freescale/common/imx/post-image.sh new file mode 100755 index 00000000..06ccaac3 --- /dev/null +++ b/board/freescale/common/imx/post-image.sh @@ -0,0 +1,107 @@ +#!/usr/bin/env bash + +# +# dtb_list extracts the list of DTB files from BR2_LINUX_KERNEL_INTREE_DTS_NAME +# in ${BR_CONFIG}, then prints the corresponding list of file names for the +# genimage configuration file +# +dtb_list() +{ + local DTB_LIST="$(sed -n 's/^BR2_LINUX_KERNEL_INTREE_DTS_NAME="\([\/a-z0-9 \-]*\)"$/\1/p' ${BR2_CONFIG})" + + for dt in $DTB_LIST; do + echo -n "\"`basename $dt`.dtb\", " + done +} + +# +# linux_image extracts the Linux image format from BR2_LINUX_KERNEL_UIMAGE in +# ${BR_CONFIG}, then prints the corresponding file name for the genimage +# configuration file +# +linux_image() +{ + if grep -Eq "^BR2_LINUX_KERNEL_UIMAGE=y$" ${BR2_CONFIG}; then + echo "\"uImage\"" + elif grep -Eq "^BR2_LINUX_KERNEL_IMAGE=y$" ${BR2_CONFIG}; then + echo "\"Image\"" + else + echo "\"zImage\"" + fi +} + +genimage_type() +{ + if grep -Eq "^BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8=y$" ${BR2_CONFIG}; then + echo "genimage.cfg.template_imx8" + elif grep -Eq "^BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M=y$" ${BR2_CONFIG}; then + echo "genimage.cfg.template_imx8" + elif grep -Eq "^BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MM=y$" ${BR2_CONFIG}; then + echo "genimage.cfg.template_imx8" + elif grep -Eq "^BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MN=y$" ${BR2_CONFIG}; then + echo "genimage.cfg.template_imx8" + elif grep -Eq "^BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8X=y$" ${BR2_CONFIG}; then + echo "genimage.cfg.template_imx8" + elif grep -Eq "^BR2_LINUX_KERNEL_INSTALL_TARGET=y$" ${BR2_CONFIG}; then + if grep -Eq "^BR2_TARGET_UBOOT_SPL=y$" ${BR2_CONFIG}; then + echo "genimage.cfg.template_no_boot_part_spl" + fi + elif grep -Eq "^BR2_TARGET_UBOOT_SPL=y$" ${BR2_CONFIG}; then + echo "genimage.cfg.template_spl" + else + echo "genimage.cfg.template" + fi +} + +imx_offset() +{ + if grep -Eq "^BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M=y$" ${BR2_CONFIG}; then + echo "33K" + elif grep -Eq "^BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MM=y$" ${BR2_CONFIG}; then + echo "33K" + else + echo "32K" + fi +} + +uboot_image() +{ + if grep -Eq "^BR2_TARGET_UBOOT_FORMAT_DTB_IMX=y$" ${BR2_CONFIG}; then + echo "u-boot-dtb.imx" + elif grep -Eq "^BR2_TARGET_UBOOT_FORMAT_IMX=y$" ${BR2_CONFIG}; then + echo "u-boot.imx" + elif grep -Eq "^BR2_TARGET_UBOOT_FORMAT_DTB_IMG=y$" ${BR2_CONFIG}; then + echo "u-boot-dtb.img" + elif grep -Eq "^BR2_TARGET_UBOOT_FORMAT_IMG=y$" ${BR2_CONFIG}; then + echo "u-boot.img" + fi +} + +main() +{ + local FILES="$(dtb_list) $(linux_image)" + local IMXOFFSET="$(imx_offset)" + local UBOOTBIN="$(uboot_image)" + local GENIMAGE_CFG="$(mktemp --suffix genimage.cfg)" + local GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp" + + sed -e "s/%FILES%/${FILES}/" \ + -e "s/%IMXOFFSET%/${IMXOFFSET}/" \ + -e "s/%UBOOTBIN%/${UBOOTBIN}/" \ + board/freescale/common/imx/$(genimage_type) > ${GENIMAGE_CFG} + + rm -rf "${GENIMAGE_TMP}" + + genimage \ + --rootpath "${TARGET_DIR}" \ + --tmppath "${GENIMAGE_TMP}" \ + --inputpath "${BINARIES_DIR}" \ + --outputpath "${BINARIES_DIR}" \ + --config "${GENIMAGE_CFG}" + + rm -f ${GENIMAGE_CFG} + + exit $? +} + +main $@ diff --git a/board/freescale/common/mxs/genimage.cfg.template b/board/freescale/common/mxs/genimage.cfg.template new file mode 100644 index 00000000..c9da4528 --- /dev/null +++ b/board/freescale/common/mxs/genimage.cfg.template @@ -0,0 +1,40 @@ +# Minimal SD card image for the Freescale MX23/MX28 Template +# +# We mimic the .sdcard Freescale's MX23/MX28 image format: +# * u-boot.sb is placed at offset 1M, +# * a FAT partition at offset 16 MB is containing zImage/uImage and DTB files +# * a single root filesystem partition is required (ext2, ext3 or ext4) +# + +image boot.vfat { + vfat { + label = "boot" + files = { + %FILES% + } + } + size = 16M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + partition-type = 0x53 + image = "u-boot.sd" + offset = 1M + size = 16M + } + + partition kernel { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext2" + } +} diff --git a/board/freescale/common/mxs/post-image.sh b/board/freescale/common/mxs/post-image.sh new file mode 100755 index 00000000..0bfb835c --- /dev/null +++ b/board/freescale/common/mxs/post-image.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash + +# +# dtb_list extracts the list of DTB files from BR2_LINUX_KERNEL_INTREE_DTS_NAME +# in ${BR_CONFIG}, then prints the corresponding list of file names for the +# genimage configuration file +# +dtb_list() +{ + local DTB_LIST="$(sed -n 's/^BR2_LINUX_KERNEL_INTREE_DTS_NAME="\([a-z0-9 \-]*\)"$/\1/p' ${BR2_CONFIG})" + + for dt in $DTB_LIST; do + echo -n "\"$dt.dtb\", " + done +} + +# +# linux_image extracts the Linux image format from BR2_LINUX_KERNEL_UIMAGE in +# ${BR_CONFIG}, then prints the corresponding file name for the genimage +# configuration file +# +linux_image() +{ + if grep -Eq "^BR2_LINUX_KERNEL_UIMAGE=y$" ${BR2_CONFIG}; then + echo "\"uImage\"" + else + echo "\"zImage\"" + fi +} + +main() +{ + local FILES="$(dtb_list) $(linux_image)" + local GENIMAGE_CFG="$(mktemp --suffix genimage.cfg)" + local GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp" + + sed -e "s/%FILES%/${FILES}/" \ + board/freescale/common/mxs/genimage.cfg.template > ${GENIMAGE_CFG} + + rm -rf "${GENIMAGE_TMP}" + + genimage \ + --rootpath "${TARGET_DIR}" \ + --tmppath "${GENIMAGE_TMP}" \ + --inputpath "${BINARIES_DIR}" \ + --outputpath "${BINARIES_DIR}" \ + --config "${GENIMAGE_CFG}" + + rm -f ${GENIMAGE_CFG} + + exit $? +} + +main $@ diff --git a/board/freescale/imx23evk/readme.txt b/board/freescale/imx23evk/readme.txt new file mode 100644 index 00000000..6574577d --- /dev/null +++ b/board/freescale/imx23evk/readme.txt @@ -0,0 +1,48 @@ +************************** +Freescale i.MX23 EVK board +************************** + +This file documents the Buildroot support for the Freescale i.MX23 EVK board. + +Build +===== + +First, configure Buildroot for your i.MX23 EVK board: + + make imx23evk_defconfig + +Build all components: + + make + +You will find in output/images/ directory the following files: + - imx23-evk.dtb + - rootfs.tar + - u-boot.sd + - zImage + +Create a bootable SD card +========================= + +To determine the device associated to the SD card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Then, run the following command: + +*** WARNING! The command will destroy all the card content. Use with care! *** + + sudo dd if=output/images/sdcard.img of=/dev/ + +Boot the i.MX23 EVK board +========================= + +- Put the Boot Mode Select jumper as 1 0 0 1 so that it can boot + from the SD card +- Insert the SD card in the SD Card slot of the board; +- Connect an RS232 UART cable to the Debug UART Port and connect using a + terminal emulator at 115200 bps, 8n1; +- power on the board. + +Enjoy! diff --git a/board/freescale/imx25pdk/readme.txt b/board/freescale/imx25pdk/readme.txt new file mode 100644 index 00000000..1aece6c9 --- /dev/null +++ b/board/freescale/imx25pdk/readme.txt @@ -0,0 +1,54 @@ +************************** +Freescale i.MX25 PDK board +************************** + +This file documents the Buildroot support for the Freescale i.MX25 PDK board. + +Build +===== + +First, configure Buildroot for the i.MX25 PDK board: + + make mx25pdk_defconfig + +Build all components: + + make + +You will find in output/images/ the following files: + - imx25-pdk.dtb + - rootfs.ext4 + - rootfs.tar + - sdcard.img + - u-boot.imx + - zImage + +Create a bootable SD card +========================= + +To determine the device associated to the SD card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on a SD card. Launch the following +command as root: + + dd if=output/images/sdcard.img of=/dev/ + +*** WARNING! This will destroy all the card content. Use with care! *** + +For details about the medium image layout, see the definition in +board/freescale/common/imx/genimage.cfg.template. + +Boot the i.MX25 PDK board +========================= + +To boot your newly created system: +- insert the SD card in the SD slot of the board; +- put a USB cable into the Debug USB Port and connect using a terminal + emulator at 115200 bps, 8n1; +- power on the board. + +Enjoy! diff --git a/board/freescale/imx28evk/readme.txt b/board/freescale/imx28evk/readme.txt new file mode 100644 index 00000000..2920cb04 --- /dev/null +++ b/board/freescale/imx28evk/readme.txt @@ -0,0 +1,57 @@ +************************** +Freescale i.MX28 EVK board +************************** + +This file documents the Buildroot support for the Freescale i.MX28 EVK board. + +Read the i.MX28 Evaluation Kit Quick Start Guide [1] for an introduction to the +board. + +Build +===== + +First, configure Buildroot for your i.MX28 EVK board: + + make freescale_imx28evk_defconfig + +Build all components: + + make + +You will find in ./output/images/ the following files: + - imx28-evk.dtb + - rootfs.tar + - u-boot.sd + - zImage + +Create a bootable SD card +========================= + +To determine the device associated to the SD card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Then, run the following command as root: + +*** WARNING! The command will destroy all the card content. Use with care! *** + + sudo dd if=output/images/sdcard.img of=/dev/ + +Boot the i.MX28 EVK board +========================= + +To boot your newly created system (refer to the i.MX28 EVK Quick Start Guide +[1] for guidance): +- insert the SD card in the SD Card Socket 0 of the board; +- verify that your i.MX28 EVK board jumpers and switches are set as mentioned + in the i.MX28 EVK Quick Start Guide [1]; +- connect an RS232 UART cable to the Debug UART Port and connect using a + terminal emulator at 115200 bps, 8n1; +- power on the board. + +Enjoy! + +References +========== +[1] http://cache.freescale.com/files/32bit/doc/user_guide/EVK_imx28_QuickStart.pdf diff --git a/board/freescale/imx51evk/readme.txt b/board/freescale/imx51evk/readme.txt new file mode 100644 index 00000000..d67a3fd7 --- /dev/null +++ b/board/freescale/imx51evk/readme.txt @@ -0,0 +1,54 @@ +************************** +Freescale i.MX51 EVK board +************************** + +This file documents the Buildroot support for the Freescale i.MX51 EVK board. + +Build +===== + +First, configure Buildroot for the i.MX51 EVK board: + + make mx51evk_defconfig + +Build all components: + + make + +You will find in output/images/ the following files: + - imx51-babbage.dtb + - rootfs.ext4 + - rootfs.tar + - sdcard.img + - u-boot.imx + - zImage + +Create a bootable SD card +========================= + +To determine the device associated to the SD card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on a SD card. Launch the following +command as root: + + dd if=output/images/sdcard.img of=/dev/ + +*** WARNING! This will destroy all the card content. Use with care! *** + +For details about the medium image layout, see the definition in +board/freescale/common/imx/genimage.cfg.template. + +Boot the i.MX51 EVK board +========================= + +To boot your newly created system: +- insert the SD card in the SD slot of the board; +- put a micro USB cable into the Debug USB Port and connect using a terminal + emulator at 115200 bps, 8n1; +- power on the board. + +Enjoy! diff --git a/board/freescale/imx6-sabresd/linux_qt5.fragment b/board/freescale/imx6-sabresd/linux_qt5.fragment new file mode 100644 index 00000000..ffa5f63e --- /dev/null +++ b/board/freescale/imx6-sabresd/linux_qt5.fragment @@ -0,0 +1,4 @@ +# Currently mx6sabresd exhibits touchscreen issues when running cpufreq as +# ondemand governor with a mainline kernel. +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y diff --git a/board/freescale/imx6-sabresd/readme.txt b/board/freescale/imx6-sabresd/readme.txt new file mode 100644 index 00000000..292dab72 --- /dev/null +++ b/board/freescale/imx6-sabresd/readme.txt @@ -0,0 +1,111 @@ +******************************* +Freescale i.MX6 Sabre SD boards +******************************* + +This file documents the Buildroot support for the Freescale i.MX6 Sabre SD +boards based on i.MX6Q, i.MX6DL and iMX6QP. + +Thanks to the SPL support in U-Boot it is possible to run a single +sdcard.img in all i.MX6 Sabre SD board variants. + +This configuration uses U-Boot mainline and kernel mainline. + +Build +===== + +First, configure Buildroot for the i.MX6 Sabre SD board: + + make imx6-sabresd_defconfig + +Build all components: + + make + +You will find the following files in output/images/ : + - imx6q-sabresd.dtb + - imx6dl-sabresd.dtb + - imx6qp-sabresd.dtb + - rootfs.ext4 + - rootfs.tar + - sdcard.img + - u-boot.imx + - zImage + +Create a bootable SD card +========================= + +To determine the device associated to the SD card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on a SD card. Launch the following +command as root: + + dd if=output/images/sdcard.img of=/dev/ + +*** WARNING! This will destroy all the card content. Use with care! *** + +For details about the medium image layout, see the definition in +board/freescale/common/imx/genimage.cfg.template. + +Boot the i.MX6 Sabre SD board +============================= + +To boot your newly created system: +- insert the SD card in the SD3 slot of the board (close to the HDMI connector); +- put a micro USB cable into the Debug USB Port and connect using a terminal + emulator at 115200 bps, 8n1; +- power on the board. + +Testing graphics on the i.MX6 Sabre SD board +============================================ + +The imx6-sabresd_qt5_defconfig allows to quickly test the graphics +capabilities of i.MX6 using the opensource Etnaviv graphics stack +and kernel mainline. + +In order to build it: + +make imx6-sabresd_qt5_defconfig +make + +Then flash the SD card as explained above. + +Running kmscube application: + +# kmscube + +Running Qt5 Cinematic Demo: + +# export QT_QPA_EGLFS_KMS_CONFIG=/root/sabresd.json +# export QT_QPA_EGLFS_ALWAYS_SET_MODE=1 +# /usr/share/Qt5/CinematicExperience/Qt5_CinematicExperience + +Running gl2mark benchmark: + +# glmark2-es2-drm + +Testing video playback on the i.MX6 Sabre SD board +================================================== + +As the mx6sabresd has two display outputs (LVDS and HDMI), it is necessary to +know what is the connector that corresponds to the HDMI output. + +This information can be found by running: + +# modetest + +And search for the HDMI connector number. In our case it shows up as 37. + +In the mx6sabresd prompt run the following Gstreamer pipeline: + +# gst-launch-1.0 filesrc location=/root/trailer_1080p_h264_mp3.avi ! avidemux ! \ +h264parse ! v4l2video1dec capture-io-mode=dmabuf ! kmssink connector-id=37 \ +name=imx-drm sync=0 + +(The video used on this example was retrieved from: +http://linode.boundarydevices.com/videos/trailer_1080p_h264_mp3.avi) + +Enjoy! diff --git a/board/freescale/imx6-sabresd/rootfs_overlay/root/sabresd.json b/board/freescale/imx6-sabresd/rootfs_overlay/root/sabresd.json new file mode 100644 index 00000000..fe92ce5b --- /dev/null +++ b/board/freescale/imx6-sabresd/rootfs_overlay/root/sabresd.json @@ -0,0 +1,15 @@ +{ + "device": "/dev/dri/card0", + "hwcursor": false, + "pbuffers": true, + "outputs": [ + { + "name": "HDMI1", + "mode": "off" + }, + { + "name": "LVDS1", + "mode": "1024x768" + } + ] +} diff --git a/board/freescale/imx6sabre/patches/uboot/0001-mx6qsabre_common-boot-Linux-to-init-in-mfgtools-mode.patch b/board/freescale/imx6sabre/patches/uboot/0001-mx6qsabre_common-boot-Linux-to-init-in-mfgtools-mode.patch new file mode 100644 index 00000000..a9f88c26 --- /dev/null +++ b/board/freescale/imx6sabre/patches/uboot/0001-mx6qsabre_common-boot-Linux-to-init-in-mfgtools-mode.patch @@ -0,0 +1,37 @@ +From e9a88fddc149fc52cdc5a8997f9fd3a29416c643 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Vincent=20Stehl=C3=A9?= +Date: Tue, 12 Aug 2014 10:17:31 +0200 +Subject: [PATCH] mx6qsabre_common: boot Linux to /init in mfgtools mode +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Buildroot supplies a nice /init wrapper script to use when booting from a +ramdisk. + +This patch tells u-boot to tell the kernel to boot into /init (instead of +/linuxrc) on i.MX6, when booting in mfgtools mode. This way we can boot a +buildroot system entirely through USB. + +Signed-off-by: Vincent Stehlé +Signed-off-by: Julien Olivain +--- + include/configs/imx_env.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/include/configs/imx_env.h b/include/configs/imx_env.h +index c03748d93f..aa1a8bf488 100644 +--- a/include/configs/imx_env.h ++++ b/include/configs/imx_env.h +@@ -29,7 +29,7 @@ + + #define CONFIG_MFG_ENV_SETTINGS_DEFAULT \ + "mfgtool_args=setenv bootargs console=${console},${baudrate} " \ +- "rdinit=/linuxrc " \ ++ "rdinit=/init " \ + "clk_ignore_unused "\ + "\0" \ + "kboot="MFG_BOOT_CMD"\0"\ +-- +2.26.2 + diff --git a/board/freescale/imx6sabre/readme.txt b/board/freescale/imx6sabre/readme.txt new file mode 100644 index 00000000..4b8db523 --- /dev/null +++ b/board/freescale/imx6sabre/readme.txt @@ -0,0 +1,171 @@ +******************************************************** +Freescale i.MX6 Q, DL and SoloX SABRE development boards +******************************************************** + +This file documents the Buildroot support for the Freescale SABRE Board +for Smart Devices Based on the i.MX 6 and i.MX 6SoloX Series (SABRESD), +as well as the Freescale SABRE Board for Automotive Infotainment. + +Read the i.MX 6 SABRESD Quick Start Guide for an introduction to the +board: +http://cache.freescale.com/files/32bit/doc/quick_start_guide/SABRESDB_IMX6_QSG.pdf + +Read the i.MX 6 SoloX SABRESD Quick Start Guide for an introduction to +the board: +http://cache.freescale.com/files/32bit/doc/user_guide/IMX6SOLOXQSG.pdf + +Read the SABRE for Automotive Infotainment Quick Start Guide for an +introduction to the board: +http://cache.freescale.com/files/32bit/doc/user_guide/IMX6SABREINFOQSG.pdf + +Building with NXP kernel and NXP U-Boot +======================================= + +First, configure Buildroot for your SABRE board. +For i.MX6Q SABRE SD board: + + make freescale_imx6qsabresd_defconfig + +For i.MX6DL SABRE SD board: + + make freescale_imx6dlsabresd_defconfig + +For i.MX6 SoloX SABRE SD board: + + make freescale_imx6sxsabresd_defconfig + +For i.MX6Q SABRE Auto board: + + make freescale_imx6qsabreauto_defconfig + +For i.MX6DL SABRE Auto board: + + make freescale_imx6dlsabreauto_defconfig + +Build all components: + + make + +You will find in ./output/images/ the following files: + - imx6dl-sabresd.dtb or imx6q-sabresd.dtb or imx6sx-sdb.dtb or + imx6q-sabreauto.dtb or imx6dl-sabreauto.dtb + - rootfs.ext2 + - rootfs.tar + - u-boot.imx + - uImage, or zImage for i.MX6 SoloX + +Building with mainline kernel and mainline U-Boot +================================================= + +Mainline U-Boot uses SPL and can support the three +variants of mx6sabreauto boards: mx6q, mx6dl and mx6qp. + +First, configure Buildroot for your mx6sabreauto board + + make imx6-sabreauto_defconfig + +Build all components: + + make + +You will find in output/images/ the following files: + - imx6dl-sabresd.dtb, imx6q-sabresd.dtb, imx6q-sabresd.dtb + - rootfs.ext2 + - SPL and u-boot.img + - u-boot.imx + - zImage + +Create a bootable SD card +========================= + +To determine the device associated to the SD card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on a microSD card. Launch the following +command as root: + + dd if=./output/images/sdcard.img of=/dev/ + +*** WARNING! The script will destroy all the card content. Use with care! *** + +For details about the medium image layout, see the definition in +board/freescale/common/imx/genimage.cfg.template. + +Boot the SABRE board +==================== + +i.MX6 SABRE SD +-------------- + +To boot your newly created system on an i.MX6 SABRE SD Board (refer to +the i.MX6 SABRE SD Quick Start Guide for guidance): +- insert the SD card in the SD3 slot of the board; +- locate the BOOT dip switches (SW6), set dips 2 and 7 to ON, all others to OFF; +- connect a Micro USB cable to Debug Port and connect using a terminal emulator + at 115200 bps, 8n1; +- power on the board. + +i.MX6 SoloX SABRE SD +-------------------- + +To boot your newly created system on an i.MX6 SoloX SABRE SD Board +(refer to the i.MX6 SoloX SABRE SD Quick Start Guide for guidance): +- insert the SD card in the J4-SD4 socket at the bottom of the board; +- Set the SW10, SW11 and SW12 DIP switches at the top of the board in + their default position, to boot from SD card. Reference configuration: + + SW10 + 1 2 3 4 5 6 7 8 + off off off off off off off off + + SW11 + 1 2 3 4 5 6 7 8 + off off ON ON ON off off off + + SW12 + 1 2 3 4 5 6 7 8 + off ON off off off off off off + +- connect a Micro USB cable to the J16 Debug Port at the bottom of the + board. This is a dual UART debug port; connect to the first tty using + a terminal emulator at 115200 bps, 8n1; +- power on the board with the SW1-PWR switch at the top of the board. + +SABRE Auto +---------- + +To boot your newly created system on a SABRE Auto Board (refer to the SABRE for +Automotive Infotainment Quick Start Guide for guidance): +- insert the SD card in the CPU card SD card socket J14; +- Set the S1, S2 and S3 DIP switches and J3 jumper to boot from SD on CPU card. + Reference configuration: + + S1 + 1 2 3 4 5 6 7 8 9 10 + off ON off off ON off off off off off + + S2 + 1 2 3 4 + off off ON off + + S3 + 1 2 3 4 + off off ON ON + + J3: 1-2 + +- connect an RS-232 UART cable to CPU card debug port J18 UART DB9 and + connect using a terminal emulator at 115200 bps, 8n1; +- power on the board. + +Enjoy! + +References +========== + +https://community.freescale.com/docs/DOC-95015 +https://community.freescale.com/docs/DOC-95017 +https://community.freescale.com/docs/DOC-99218 diff --git a/board/freescale/imx6slevk/readme.txt b/board/freescale/imx6slevk/readme.txt new file mode 100644 index 00000000..424380e3 --- /dev/null +++ b/board/freescale/imx6slevk/readme.txt @@ -0,0 +1,14 @@ +NXP i.MX6SL EVK board +--------------------- + +To build a minimal support for this board: + +$ make imx6slevk_defconfig +$ make + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be flashed into the SD card: + +$ sudo dd if=output/images/sdcard.img of=/dev/; sync + +Then insert the SD card into the SD2 slot and boot the board. diff --git a/board/freescale/imx6sxsdb/readme.txt b/board/freescale/imx6sxsdb/readme.txt new file mode 100644 index 00000000..2779075f --- /dev/null +++ b/board/freescale/imx6sxsdb/readme.txt @@ -0,0 +1,14 @@ +NXP i.MX6SX SDB board +--------------------- + +To build a minimal support for this board: + +$ make imx6sx-sdb_defconfig +$ make + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be flashed into the SD card: + +$ sudo dd if=output/images/sdcard.img of=/dev/; sync + +Then insert the SD card into the SD4 boot slot and boot the board. diff --git a/board/freescale/imx6ulevk/readme.txt b/board/freescale/imx6ulevk/readme.txt new file mode 100644 index 00000000..90355f35 --- /dev/null +++ b/board/freescale/imx6ulevk/readme.txt @@ -0,0 +1,74 @@ +*************************** +Freescale i.MX6UL EVK board +*************************** + +This file documents the Buildroot support for the Freescale i.MX6UL EVK board. + +Please read the i.MX6UL Evaluation Kit Quick Start Guide [1] for an +introduction to the board. + +Build +===== + +First, configure Buildroot for your i.MX6UL EVK board: + +In order to to do so there are two supported options: + + make freescale_imx6ulevk_defconfig + +if you plan to use NXP provided U-Boot and kernel. + +or + + make imx6ulevk_defconfig + +if you plan to use mainline U-Boot and mainline kernel. + +Build all components: + + make + +You will find in ./output/images/ the following files: + - imx6ul-14x14-evk.dtb + - rootfs.ext4 + - rootfs.tar + - sdcard.img + - u-boot.imx + - zImage + +Create a bootable microSD card +============================== + +To determine the device associated to the microSD card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on a microSD card. Launch the following +command as root: + + dd if=./output/images/sdcard.img of=/dev/ + +*** WARNING! This will destroy all the card content. Use with care! *** + +For details about the medium image layout, see the definition in +board/freescale/common/imx/genimage.cfg.template. + +Boot the i.MX6UL EVK board +========================= + +To boot your newly created system (refer to the i.MX6UL EVK Quick Start Guide +[1] for guidance): +- insert the microSD card in the microSD slot of the board; +- verify that your i.MX6UL EVK board jumpers and switches are set as mentioned + in the i.MX6UL EVK Quick Start Guide [1]; +- put a micro USB cable into the Debug USB Port and connect using a terminal + emulator at 115200 bps, 8n1; +- power on the board. + +Enjoy! + +References +========== +[1] http://cache.freescale.com/files/32bit/doc/quick_start_guide/IMX6ULTRALITEQSG.pdf diff --git a/board/freescale/imx6ullevk/readme.txt b/board/freescale/imx6ullevk/readme.txt new file mode 100644 index 00000000..77acec26 --- /dev/null +++ b/board/freescale/imx6ullevk/readme.txt @@ -0,0 +1,71 @@ +**************************** +Freescale i.MX6ULL EVK board +**************************** + +This file documents the Buildroot support for the Freescale i.MX6ULL EVK board. + +Build +===== + +First, configure Buildroot for your i.MX6ULL EVK board: + +In order to to do so there are two supported options: + + make freescale_imx6ullevk_defconfig + +if you plan to use NXP provided U-Boot and kernel. + +or + + make imx6ullevk_defconfig + +if you plan to use mainline U-Boot and mainline kernel. + +Build all components: + + make + +You will find in output/images/ the following files: + - boot.vfat + - imx6ull-14x14-evk.dtb + - rootfs.ext2 + - rootfs.ext4 + - rootfs.tar + - sdcard.img + - u-boot.bin + - u-boot.imx + - zImage + +Create a bootable SD card +========================= + +To determine the device associated to the SD card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on a SD card. Launch the following +command as root: + + dd if=./output/images/sdcard.img of=/dev/ + +*** WARNING! This will destroy all the card content. Use with care! *** + +For details about the medium image layout, see the definition in +board/freescale/common/imx/genimage.cfg.template. + +Boot the i.MX6ULL EVK board +=========================== + +To boot your newly created system (refer to the i.MX 6ULL EVK Quick Start Guide [1] for guidance): +- insert the SD card in the micro SD slot of the board; +- put a micro USB cable into the Debug USB Port and connect using a terminal + emulator at 115200 bps, 8n1; +- power on the board. + +Enjoy! + +References +========== +[1] https://www.nxp.com/files-static/32bit/doc/brochure/IMX6ULLQSG.pdf diff --git a/board/freescale/imx7dsdb/readme.txt b/board/freescale/imx7dsdb/readme.txt new file mode 100644 index 00000000..c6030f69 --- /dev/null +++ b/board/freescale/imx7dsdb/readme.txt @@ -0,0 +1,54 @@ +*************************** +Freescale i.MX7D SDB board +*************************** + +This file documents the Buildroot support for the Freescale i.MX7D SDB board. + +Build +===== + +First, configure Buildroot for your i.MX7D SDB board: + + make freescale_imx7dsabresd_defconfig + +Build all components: + + make + +You will find in output/images/ the following files: + - imx7d-sdb.dtb + - rootfs.ext4 + - rootfs.tar + - sdcard.img + - u-boot.imx + - zImage + +Create a bootable SD card +========================= + +To determine the device associated to the SD card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on a SD card. Launch the following +command as root: + + dd if=./output/images/sdcard.img of=/dev/ + +*** WARNING! This will destroy all the card content. Use with care! *** + +For details about the medium image layout, see the definition in +board/freescale/common/imx/genimage.cfg.template. + +Boot the i.MX7D SDB board +========================= + +To boot your newly created system: +- insert the SD card in the SD slot of the board; +- put a micro USB cable into the Debug USB Port and connect using a terminal + emulator at 115200 bps, 8n1; +- power on the board. + +Enjoy! diff --git a/board/freescale/imx8mmevk/readme.txt b/board/freescale/imx8mmevk/readme.txt new file mode 100644 index 00000000..7b69405d --- /dev/null +++ b/board/freescale/imx8mmevk/readme.txt @@ -0,0 +1,71 @@ +*************************** +Freescale i.MX8MM EVK board +*************************** + +This file documents the Buildroot support for the Freescale i.MX8MM +EVK board. + +Build +===== + +First, configure Buildroot for the i.MX8MM EVK board: + + make freescale_imx8mmevk_defconfig + +Build all components: + + make + +You will find in output/images/ the following files: + - bl31.bin + - boot.vfat + - fsl-imx8mm-evk.dtb + - Image + - imx8-boot-sd.bin + - lpddr4_pmu_train_fw.bin + - rootfs.ext2 + - rootfs.ext4 + - rootfs.tar + - sdcard.img + - u-boot.bin + - u-boot.imx + - u-boot-nodtb.bin + - u-boot-spl-ddr.bin + +Create a bootable SD card +========================= + +To determine the device associated to the SD card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on a SD card. Launch the following +command as root: + + dd if=output/images/sdcard.img of=/dev/ + +*** WARNING! This will destroy all the card content. Use with care! *** + +For details about the medium image layout, see the definition in +board/freescale/common/imx/genimage.cfg.template_imx8. + +Boot the i.MX8MM EVK board +========================== + +To boot your newly created system (refer to the i.MX8MMini EVK Quick Start Guide +[1] for guidance): +- insert the SD card in the SD slot of the board; +- Configure the switches as follows: +SW1101: 0110110010 [D1-D10] +SW1102: 0001101000 [D1-D10] +- put a micro USB cable into the Debug USB Port and connect using a terminal + emulator at 115200 bps, 8n1; +- power on the board. + +Enjoy! + +References +========== +[1] https://www.nxp.com/document/guide/Get-Started-with-the-i.MX-8M-Mini-EVK:GS-iMX-8M-Mini-EVK diff --git a/board/freescale/imx8mnevk/readme.txt b/board/freescale/imx8mnevk/readme.txt new file mode 100644 index 00000000..d7700568 --- /dev/null +++ b/board/freescale/imx8mnevk/readme.txt @@ -0,0 +1,73 @@ +*************************** +Freescale i.MX8MN EVK board +*************************** + +This file documents the Buildroot support for the i.MX8M Nano EVK board. + +Build +===== + +First, configure Buildroot for the i.MX8MN EVK board: + + make freescale_imx8mnevk_defconfig + +Build all components: + + make + +You will find in output/images/ the following files: + - bl31.bin + - boot.vfat + - ddr4_201810_fw.bin + - ddr_fw.bin + - fsl-imx8mn-ddr4-evk.dtb + - Image + - imx8-boot-sd.bin + - rootfs.ext2 + - rootfs.ext4 + - rootfs.tar + - sdcard.img + - u-boot.bin + - u-boot.imx + - u-boot.itb + - u-boot-nodtb.bin + - u-boot-spl.bin + - u-boot-spl-ddr.bin + +Create a bootable SD card +========================= + +To determine the device associated to the SD card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on a SD card. Launch the following +command as root: + + dd if=output/images/sdcard.img of=/dev/ + +*** WARNING! This will destroy all the card content. Use with care! *** + +For details about the medium image layout, see the definition in +board/freescale/common/imx/genimage.cfg.template_imx8. + +Boot the i.MX8MN EVK board +========================== + +To boot your newly created system (refer to the i.MX8MNano EVK Quick Start Guide +[1] for guidance): +- insert the SD card in the SD slot of the board; +- Configure the switches as follows (X = "don't care"): +SW1101: 1100XXXXXX [D1-D10] +SW1102: XXXXXXXXXX [D1-D10] +- put a micro USB cable into the Debug USB Port and connect using a terminal + emulator at 115200 bps, 8n1; +- power on the board. + +Enjoy! + +References +========== +[1] https://www.nxp.com/design/development-boards/i-mx-evaluation-and-development-boards/evaluation-kit-for-the-i-mx-8m-nano-applications-processor:8MNANOD4-EVK diff --git a/board/freescale/imx8mqevk/readme.txt b/board/freescale/imx8mqevk/readme.txt new file mode 100644 index 00000000..61fb2bc8 --- /dev/null +++ b/board/freescale/imx8mqevk/readme.txt @@ -0,0 +1,86 @@ +*************************** +Freescale i.MX8MQ EVK board +*************************** + +This file documents the Buildroot support for the Freescale i.MX8MQ +EVK board. + +Build +===== + +First, configure Buildroot for the i.MX8MQ EVK board: + +If you want to use the NXP kernel: + + make freescale_imx8mqevk_defconfig + +Or if you want to use a mainline kernel: + + make imx8mqevk_defconfig + +Build all components: + + make + +You will find in output/images/ the following files: + - bl31.bin + - boot.vfat + - fsl-imx8mq-evk.dtb + - Image + - imx8-boot-sd.bin + - lpddr4_pmu_train_fw.bin + - rootfs.ext2 + - rootfs.ext4 + - rootfs.tar + - sdcard.img + - signed_hdmi_imx8m.bin + - u-boot.bin + - u-boot.imx + - u-boot-nodtb.bin + - u-boot-spl-ddr.bin + +Create a bootable SD card +========================= + +To determine the device associated to the SD card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on a SD card. Launch the following +command as root: + + dd if=output/images/sdcard.img of=/dev/ + +*** WARNING! This will destroy all the card content. Use with care! *** + +For details about the medium image layout, see the definition in +board/freescale/common/imx/genimage.cfg.template_imx8. + +Boot the i.MX8MQ EVK board +========================== + +To boot your newly created system: +- insert the SD card in the SD slot of the board; +- Configure the switches as follows: +SW801: ON ON OFF OFF +SW802: ON OFF +- put a micro USB cable into the Debug USB Port and connect using a terminal + emulator at 115200 bps, 8n1; +- power on the board. + +Enable HDMI output +================== + +To enable HDMI output at boot you must provide the video kernel boot +argument. To set the video boot argument from U-Boot run after +stopping in U-Boot prompt: + +setenv mmcargs 'setenv bootargs console=${console} root=${mmcroot} video=HDMI-A-1:1920x1080-32@60' +saveenv +reset + +Change screen resolution to suit your connected display. + +Enjoy! diff --git a/board/freescale/imx8qmmek/readme.txt b/board/freescale/imx8qmmek/readme.txt new file mode 100644 index 00000000..b6bb3c47 --- /dev/null +++ b/board/freescale/imx8qmmek/readme.txt @@ -0,0 +1,76 @@ +*************************** +Freescale i.MX8QM MEK board +*************************** + +This file documents the Buildroot support for the NXP i.MX8QM MEK board. + +You will find a reference to the board on nxp.com: +https://www.nxp.com/design/development-boards/i.mx-evaluation-and-development-boards/i.mx-8quadmax-multisensory-enablement-kit-mek:MCIMX8QM-CPU + +You can also find the get started guide here: +https://www.nxp.com/document/guide/get-started-with-the-i.mx-8quadmax-mek:GS-iMX-8QM-MEK + +Build +===== + +First, configure Buildroot for the i.MX8QM MEK board: + +$ make freescale_imx8qmmek_defconfig + +Build all components: + +$ make + +You will find in output/images/ the following files: + - ahab-container.img + - bl31.bin + - boot.vfat + - fsl-imx8qm-mek.dtb + - Image + - imx8-boot-sd.bin + - mkimg.commit + - mx8qm-mek-scfw-tcm.bin + - mx8qm-val-scfw-tcm.bin + - mx8qm-a0-ddr4-scfw-tcm.bin + - mx8qm-a0-mek-scfw-tcm.bin + - mx8qm-a0-val-scfw-tcm.bin + - mx8qm-ddr4-scfw-tcm.bin + - rootfs.ext2 + - rootfs.ext4 + - rootfs.tar + - sdcard.img + - u-boot-atf.bin + - u-boot.bin + - u-boot-hash.bin + +Create a bootable SD card +========================= + +To determine the device associated to the SD card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on a SD card. Launch the following +command as root: + + dd if=output/images/sdcard.img of=/dev/ + +*** WARNING! This will destroy all the card content. Use with care! *** + +For details about the medium image layout, see the definition in +board/freescale/common/imx/genimage.cfg.template_imx8. + +Boot the i.MX8QM MEK board +========================== + +To boot your newly created system: +- insert the SD card in the SD slot of the board; +- Configure the boot switch as follows: +SW2: OFF OFF ON ON OFF OFF +- put a micro USB cable into the Debug USB Port and connect using a terminal + emulator at 115200 bps, 8n1; +- power on the board. + +Enjoy! diff --git a/board/freescale/imx8qxpmek/readme.txt b/board/freescale/imx8qxpmek/readme.txt new file mode 100644 index 00000000..45f7915f --- /dev/null +++ b/board/freescale/imx8qxpmek/readme.txt @@ -0,0 +1,67 @@ +*************************** +Freescale i.MX8QXP MEK board +*************************** + +This file documents the Buildroot support for the Freescale i.MX8QXP +MEK board. + +Build +===== + +First, configure Buildroot for the i.MX8QXP MEK board: + + make freescale_imx8qxpmek_defconfig + +Build all components: + + make + +You will find in output/images/ the following files: + - ahab-container.img + - bl31.bin + - boot.vfat + - fsl-imx8qxp-mek.dtb + - Image + - imx8-boot-sd.bin + - mkimg.commit + - mx8qx-mek-scfw-tcm.bin + - mx8qx-val-scfw-tcm.bin + - rootfs.ext2 + - rootfs.ext4 + - rootfs.tar + - sdcard.img + - u-boot-atf.bin + - u-boot.bin + - u-boot-hash.bin + +Create a bootable SD card +========================= + +To determine the device associated to the SD card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on a SD card. Launch the following +command as root: + + dd if=output/images/sdcard.img of=/dev/ + +*** WARNING! This will destroy all the card content. Use with care! *** + +For details about the medium image layout, see the definition in +board/freescale/common/imx/genimage.cfg.template_imx8. + +Boot the i.MX8QXP MEK board +========================== + +To boot your newly created system: +- insert the SD card in the SD slot of the board; +- Configure the boot switch as follows: +SW2: ON ON OFF OFF +- put a micro USB cable into the Debug USB Port and connect using a terminal + emulator at 115200 bps, 8n1; +- power on the board. + +Enjoy! diff --git a/board/freescale/p1025twr/readme.txt b/board/freescale/p1025twr/readme.txt new file mode 100644 index 00000000..9179aeac --- /dev/null +++ b/board/freescale/p1025twr/readme.txt @@ -0,0 +1,25 @@ +The bootloader is no longer buildable in the latest Freescale/NXP tree or +upstream. As such, retrieve the "Image: SDK V1.2 e500v2 Binary ISO" from +NXP downloads and follow the release notes for reflashing. + +For programming the kernel and rootfs created by buildroot into the flash. +The fast way is to tftp transfer the files via one of the network interfaces. +Make sure your devkit has ipaddr and serverip defined to reach your tftp +server. + +(Assuming the default u-boot env from NXP) +1. Program the DTB to NOR flash + + => setenv dtbfile p1025twr.dtb + => run dtbflash + +2. Program the kernel and rootfs to NOR flash (reusing orignal rootfs + NOR location, as the kernel location is to small) + + => tftpboot $loadaddr uImage; protect off 0xeeb80000 +$filesize; erase 0xeeb80000 +$filesize; cp.b $loadaddr 0xeeb80000 $filesize; protect on 0xeeb80000 +$filesize; cmp.b $loadaddr 0xefa80000 $filesize + +3. Booting your new system + + => bootm 0xeeb80000 - 0xefe80000 + + You can login with user "root". diff --git a/board/freescale/t1040_t2080/readme.txt b/board/freescale/t1040_t2080/readme.txt new file mode 100644 index 00000000..65695295 --- /dev/null +++ b/board/freescale/t1040_t2080/readme.txt @@ -0,0 +1,51 @@ +For the bootloader, NXP has stablized at SDK2.0 (final release). It is +suggested to download the prebuilt from NXP downloads and follow the +release notes for reflashing. + +To program the kernel and rootfs created by buildroot into the flash. The +fast way is to tftp transfer the files via one of the network interfaces. +Make sure your devkit has ipaddr, netmask, and serverip defined to reach your +tftp server. Verify bootargs are reasonable (console=ttyS0,115200). + +------------------------------------------------------------------------------ + +Devkit: T1040RDB + +(Assuming the default u-boot env from NXP) +1. Program the DTB to NOR flash + + => tftpboot $loadaddr t1040d4rdb.dtb; protect off 0xe8800000 +$filesize; erase 0xe8800000 +$filesize; cp.b $loadaddr 0xe8800000 $filesize; protect on 0xe8800000 +$filesize; cmp.b $loadaddr 0xe8800000 $filesize + +2. Program the kernel and rootfs to NOR flash + + => tftpboot $loadaddr uImage; protect off 0xe8020000 +$filesize; erase 0xe8020000 +$filesize; cp.b $loadaddr 0xe8020000 $filesize; protect on 0xe8020000 +$filesize; cmp.b $loadaddr 0xe8020000 $filesize + => tftpboot $loadaddr rootfs.cpio.uboot; protect off 0xe9300000 +$filesize; erase 0xe9300000 +$filesize; cp.b $loadaddr 0xe9300000 $filesize; protect on 0xe9300000 +$filesize; cmp.b $loadaddr 0xe9300000 $filesize + +3. Booting your new system + + => boot + + You can login with user "root". +------------------------------------------------------------------------------ + +Devkit: T2080 QDS or RDB + +(Assuming the default u-boot env from NXP) +1. Netboot the kernel/rootfs/dtb + + => tftp 0x1000000 uImage && tftp 0x2000000 rootfs.cpio.uboot + + RDB => tftp 0x3000000 t2080rdb.dtb + or + QDS => tftp 0x3000000 t2080qds.dtb + +2. Booting your new system + + => bootm 0x1000000 0x2000000 0x3000000 + + You can login with user "root". + +3. If flashing is desired, a similar approach to the T1040 can be followed + with updated addresses for the flash layout. Example is in the NXP default + env. +------------------------------------------------------------------------------ diff --git a/board/freescale/warpboard/README b/board/freescale/warpboard/README new file mode 100644 index 00000000..67d4e044 --- /dev/null +++ b/board/freescale/warpboard/README @@ -0,0 +1,77 @@ +Build +===== + +First, configure Buildroot for your WarpBoard. + make warpboard_defconfig + +Build all components: + make + +You will find in ./output/images/ the following files: + - imx6sl-warp.dtb + - rootfs.ext4 + - rootfs.tar + - sdcard.img + - u-boot.imx + - zImage + +Update uboot +============ + +- Put warpboard in USB download mode by closing the j2 jumper on the + daugther board + +- Load u-boot.imx in the WarpBoard by using the imx-usb-loader host utility: + + $ ./output/host/bin/imx_usb -c output/host/etc/imx-loader.d/ output/images/u-boot.imx + +- U-Boot will appear in minicom + +- Reset the U-Boot environment to its default: + => env default -f -a + => saveenv + +- Run the DFU command in U-Boot: + => dfu 0 mmc 0 + +- Transfer U-Boot into flash by running this command in host side: + + $ sudo ./output/host/bin/dfu-util -D output/images/u-boot.imx -a boot + +- remove power and put the WarpBoard back into normal boot mode by + opening the j2 jumper. + +Update linux & rootfs +===================== + +Run the 'ums' command from the U-Boot prompt to mount the eMMC as USB mass +storage: + +=> ums 0 mmc 0 + +And then flash the sdcard.img into the eMMC: + + dd if=output/images/sdcard.img of=/dev/ + +*** WARNING! This will destroy all the eMMC content. Use it with care! *** + +Using bluetooth +================ + +Enable the bluez_utils or bluez5_utils package, and then run: + +$ hciattach /dev/ttymxc4 any +$ hciconfig hci0 up + +Using Wifi +========== + +# modprobe brcmfmac +# iwconfig wlan0 essid ACCESSPOINTNAME +# wpa_passphrase ACCESSPOINTNAME > /etc/wpa.conf +(enter the wifi password and press enter) +# wpa_supplicant -Dwext -iwlan0 -c /etc/wpa.conf & +# udhcpc -i wlan0 +# ping buildroot.org + +Enjoy! diff --git a/board/freescale/warpboard/linux.fragment b/board/freescale/warpboard/linux.fragment new file mode 100644 index 00000000..892d0cb7 --- /dev/null +++ b/board/freescale/warpboard/linux.fragment @@ -0,0 +1 @@ +CONFIG_CFG80211_WEXT=y diff --git a/board/freescale/warpboard/rootfs_overlay/lib/firmware/brcm/brcmfmac4330-sdio.txt b/board/freescale/warpboard/rootfs_overlay/lib/firmware/brcm/brcmfmac4330-sdio.txt new file mode 100644 index 00000000..9546246b --- /dev/null +++ b/board/freescale/warpboard/rootfs_overlay/lib/firmware/brcm/brcmfmac4330-sdio.txt @@ -0,0 +1,40 @@ +# bcm94330wlsdgb.txt +manfid=0x2d0 +prodid=0x0552 +vendid=0x14e4 +devid=0x4360 +boardtype=0x0552 +boardrev=0x11 +# this design has 2.4GHz SP3T switch +boardflags=0x00080200 +nocrc=1 +xtalfreq=37400 +boardnum=22 +macaddr=00:90:4c:c5:12:38 +ag0=255 +aa2g=1 +ccode=CN +pa0b0=0x14d0 +pa0b1=0xfd98 +pa0b2=0xff78 +rssismf2g=0xa +rssismc2g=0x3 +rssisav2g=0x7 +maxp2ga0=0x50 +sromrev=3 +il0macaddr=00:90:4c:c5:12:38 +wl0id=0x431b +cckPwrOffset=5 +ofdm2gpo=0x66666666 +mcs2gpo0=0x6666 +mcs2gpo1=0x6666 +swctrlmap_2g=0x04040404,0x02020202,0x02020404,0x10202,0x1ff +swctrlmap_5g=0x00100010,0x00280020,0x00200010,0x14202,0x2f8 +rfreg033=0x19 +rfreg033_cck=0x1f +dacrate2g=160 +txalpfbyp2g=1 +bphyscale=17 +cckPwrIdxCorr=-15 +pacalidx2g=45 +txgaintbl=1 diff --git a/board/friendlyarm/nanopc-t4/extlinux.conf b/board/friendlyarm/nanopc-t4/extlinux.conf new file mode 100644 index 00000000..31c6b30d --- /dev/null +++ b/board/friendlyarm/nanopc-t4/extlinux.conf @@ -0,0 +1,4 @@ +label RK3399_NanoPC_T4 linux + kernel /Image + devicetree /rk3399-nanopc-t4.dtb + append earlycon=uart8250,mmio32,0xff1a0000 root=/dev/mmcblk1p4 rootwait diff --git a/board/friendlyarm/nanopc-t4/genimage.cfg b/board/friendlyarm/nanopc-t4/genimage.cfg new file mode 100644 index 00000000..b3202f75 --- /dev/null +++ b/board/friendlyarm/nanopc-t4/genimage.cfg @@ -0,0 +1,39 @@ +image boot.vfat { + vfat { + files = { + "Image", + "rk3399-nanopc-t4.dtb", + "extlinux" + } + } + size = 64M +} + +image sdcard.img { + + hdimage { + gpt = true + } + + partition loader1 { + image = "idbloader.img" + offset = 32K + } + + partition loader2 { + image = "u-boot.itb" + offset = 8M + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 16M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/friendlyarm/nanopc-t4/post-build.sh b/board/friendlyarm/nanopc-t4/post-build.sh new file mode 100755 index 00000000..ba29375c --- /dev/null +++ b/board/friendlyarm/nanopc-t4/post-build.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" + +install -m 0644 -D $BOARD_DIR/extlinux.conf $BINARIES_DIR/extlinux/extlinux.conf diff --git a/board/friendlyarm/nanopc-t4/readme.txt b/board/friendlyarm/nanopc-t4/readme.txt new file mode 100644 index 00000000..0989c6cc --- /dev/null +++ b/board/friendlyarm/nanopc-t4/readme.txt @@ -0,0 +1,45 @@ +FriendlyARM NANOPC-T4 +===================== + +Build: + + $ make friendlyarm_nanopc_t4_defconfig + $ make + +Files created in output directory +================================= + +output/images + +├── bl31.elf +├── boot.vfat +├── extlinux +├── idbloader.img +├── Image +├── rk3399-nanopc-t4.dtb +├── rootfs.ext2 +├── rootfs.ext4 -> rootfs.ext2 +├── rootfs.tar +├── sdcard.img +├── u-boot.bin +└── u-boot.itb + +Creating bootable SD card: +========================== + +Simply invoke (as root) + +sudo dd if=output/images/sdcard.img of=/dev/sdX && sync + +Where X is your SD card device + +Serial console +-------------- + +Baudrate for this board is 1500000 + +Login: +------ +Apply power and press the PWR button for 3 sec. Enter 'root' as login user, and the prompt is ready. + +https://wiki.amarulasolutions.com/bsp/rockchip/rk3399/npc_t4.html diff --git a/board/friendlyarm/nanopi-a64/boot.cmd b/board/friendlyarm/nanopi-a64/boot.cmd new file mode 100644 index 00000000..446bd856 --- /dev/null +++ b/board/friendlyarm/nanopi-a64/boot.cmd @@ -0,0 +1,6 @@ +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +fatload mmc 0 $kernel_addr_r Image +fatload mmc 0 $fdt_addr_r sun50i-a64-nanopi-a64.dtb + +booti $kernel_addr_r - $fdt_addr_r diff --git a/board/friendlyarm/nanopi-a64/genimage.cfg b/board/friendlyarm/nanopi-a64/genimage.cfg new file mode 100644 index 00000000..66b6c5f4 --- /dev/null +++ b/board/friendlyarm/nanopi-a64/genimage.cfg @@ -0,0 +1,39 @@ +image boot.vfat { + vfat { + files = { + "Image", + "sun50i-a64-nanopi-a64.dtb", + "boot.scr" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition spl { + in-partition-table = "no" + image = "sunxi-spl.bin" + offset = 8192 + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot.itb" + offset = 40K + size = 1M # 1MB - 40K + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/friendlyarm/nanopi-a64/readme.txt b/board/friendlyarm/nanopi-a64/readme.txt new file mode 100644 index 00000000..88c4e661 --- /dev/null +++ b/board/friendlyarm/nanopi-a64/readme.txt @@ -0,0 +1,37 @@ +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the Nanopi A64. With the current configuration +it will bring-up the board, and allow access through the serial console. + +Nanopi A64 link: +http://nanopi.io/nanopi-a64.html + +Wiki link: +https://openedev.amarulasolutions.com/display/ODWIKI/FriendlyARM+Nanopi+A64 + +This configuration uses U-Boot mainline and kernel mainline. + +How to build +============ + + $ make friendlyarm_nanopi_a64_defconfig + $ make + +Note: you will need access to the internet to download the required +sources. + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + $ sudo sync + +Insert the micro SDcard in your Nanopi A64 and power it up. The console +is on the serial line, 115200 8N1. diff --git a/board/friendlyarm/nanopi-m1-plus/boot.cmd b/board/friendlyarm/nanopi-m1-plus/boot.cmd new file mode 100644 index 00000000..35a1d65d --- /dev/null +++ b/board/friendlyarm/nanopi-m1-plus/boot.cmd @@ -0,0 +1,8 @@ +setenv fdt_high ffffffff + +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +fatload mmc 0 $kernel_addr_r zImage +fatload mmc 0 $fdt_addr_r sun8i-h3-nanopi-m1-plus.dtb + +bootz $kernel_addr_r - $fdt_addr_r diff --git a/board/friendlyarm/nanopi-m1-plus/genimage.cfg b/board/friendlyarm/nanopi-m1-plus/genimage.cfg new file mode 100644 index 00000000..fdb3b906 --- /dev/null +++ b/board/friendlyarm/nanopi-m1-plus/genimage.cfg @@ -0,0 +1,35 @@ +# Minimal SD card image for the NanoPi M1 Plus +# +image boot.vfat { + vfat { + files = { + "zImage", + "sun8i-h3-nanopi-m1-plus.dtb", + "boot.scr" + } + } + size = 10M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/friendlyarm/nanopi-m1-plus/readme.txt b/board/friendlyarm/nanopi-m1-plus/readme.txt new file mode 100644 index 00000000..0327dec8 --- /dev/null +++ b/board/friendlyarm/nanopi-m1-plus/readme.txt @@ -0,0 +1,29 @@ +NanoPi M1 Plus + +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the NanoPi M1 Plus. With the current configuration +it will bring-up the board, and allow access through the serial console. + +How to build it +=============== + +Configure Buildroot: + + $ make friendlyarm_nanopi_m1_plus_defconfig + +Compile everything and build the SD card image: + + $ make + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX diff --git a/board/friendlyarm/nanopi-m1/boot.cmd b/board/friendlyarm/nanopi-m1/boot.cmd new file mode 100644 index 00000000..b4d612ed --- /dev/null +++ b/board/friendlyarm/nanopi-m1/boot.cmd @@ -0,0 +1,8 @@ +setenv fdt_high ffffffff + +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +fatload mmc 0 $kernel_addr_r zImage +fatload mmc 0 $fdt_addr_r sun8i-h3-nanopi-m1.dtb + +bootz $kernel_addr_r - $fdt_addr_r diff --git a/board/friendlyarm/nanopi-m1/genimage.cfg b/board/friendlyarm/nanopi-m1/genimage.cfg new file mode 100644 index 00000000..23c9c7dc --- /dev/null +++ b/board/friendlyarm/nanopi-m1/genimage.cfg @@ -0,0 +1,36 @@ +# Minimal SD card image for the NanoPi M1 +# +image boot.vfat { + vfat { + files = { + "zImage", + "sun8i-h3-nanopi-m1.dtb", + "boot.scr" + } + } + size = 10M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/friendlyarm/nanopi-m1/readme.txt b/board/friendlyarm/nanopi-m1/readme.txt new file mode 100644 index 00000000..6a34c423 --- /dev/null +++ b/board/friendlyarm/nanopi-m1/readme.txt @@ -0,0 +1,29 @@ +NanoPi M1 + +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the NanoPi M1. With the current configuration +it will bring-up the board, and allow access through the serial console. + +How to build it +=============== + +Configure Buildroot: + + $ make friendlyarm_nanopi_m1_defconfig + +Compile everything and build the SD card image: + + $ make + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX diff --git a/board/friendlyarm/nanopi-m4/extlinux.conf b/board/friendlyarm/nanopi-m4/extlinux.conf new file mode 100644 index 00000000..fb24f09e --- /dev/null +++ b/board/friendlyarm/nanopi-m4/extlinux.conf @@ -0,0 +1,4 @@ +label RK3399_NANOPI_M4 linux + kernel /Image + devicetree /rk3399-nanopi-m4.dtb + append earlycon=uart8250,mmio32,0xff1a0000 root=/dev/mmcblk1p4 rw rootwait diff --git a/board/friendlyarm/nanopi-m4/genimage.cfg b/board/friendlyarm/nanopi-m4/genimage.cfg new file mode 100644 index 00000000..f14d493a --- /dev/null +++ b/board/friendlyarm/nanopi-m4/genimage.cfg @@ -0,0 +1,39 @@ +image boot.vfat { + vfat { + files = { + "Image", + "rk3399-nanopi-m4.dtb", + "extlinux" + } + } + size = 64M +} + +image sdcard.img { + + hdimage { + gpt = true + } + + partition loader1 { + image = "idbloader.img" + offset = 32K + } + + partition loader2 { + image = "u-boot.itb" + offset = 8M + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 16M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/friendlyarm/nanopi-m4/post-build.sh b/board/friendlyarm/nanopi-m4/post-build.sh new file mode 100755 index 00000000..ba29375c --- /dev/null +++ b/board/friendlyarm/nanopi-m4/post-build.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" + +install -m 0644 -D $BOARD_DIR/extlinux.conf $BINARIES_DIR/extlinux/extlinux.conf diff --git a/board/friendlyarm/nanopi-m4/readme.txt b/board/friendlyarm/nanopi-m4/readme.txt new file mode 100644 index 00000000..0553bf83 --- /dev/null +++ b/board/friendlyarm/nanopi-m4/readme.txt @@ -0,0 +1,45 @@ +FriendlyARM NANOPI-M4 +===================== + +Build: + + $ make friendlyarm_nanopi_m4_defconfig + $ make + +Files created in output directory +================================= + +output/images + +├── bl31.elf +├── boot.vfat +├── extlinux +├── idbloader.img +├── Image +├── rk3399-nanopi-m4.dtb +├── rootfs.ext2 +├── rootfs.ext4 -> rootfs.ext2 +├── rootfs.tar +├── sdcard.img +├── u-boot.bin +└── u-boot.itb + +Creating bootable SD card: +========================== + +Simply invoke (as root) + +sudo dd if=output/images/sdcard.img of=/dev/sdX && sync + +Where X is your SD card device + +Serial console +-------------- + +Baudrate for this board is 1500000 + +Login: +------ +Enter 'root' as login user, and the prompt is ready. + +https://wiki.amarulasolutions.com/bsp/rockchip/rk3399/nanopi_m4.html diff --git a/board/friendlyarm/nanopi-neo-plus2/extlinux.conf b/board/friendlyarm/nanopi-neo-plus2/extlinux.conf new file mode 100644 index 00000000..fcb6f632 --- /dev/null +++ b/board/friendlyarm/nanopi-neo-plus2/extlinux.conf @@ -0,0 +1,4 @@ +label linux + kernel /Image + devicetree /sun50i-h5-nanopi-neo-plus2.dtb + append console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait diff --git a/board/friendlyarm/nanopi-neo-plus2/genimage.cfg b/board/friendlyarm/nanopi-neo-plus2/genimage.cfg new file mode 100644 index 00000000..fb871abd --- /dev/null +++ b/board/friendlyarm/nanopi-neo-plus2/genimage.cfg @@ -0,0 +1,39 @@ +image boot.vfat { + vfat { + files = { + "Image", + "sun50i-h5-nanopi-neo-plus2.dtb", + "extlinux" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition spl { + in-partition-table = "no" + image = "sunxi-spl.bin" + offset = 8192 + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot.itb" + offset = 40K + size = 1M # 1MB - 40K + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/friendlyarm/nanopi-neo-plus2/linux-extras.config b/board/friendlyarm/nanopi-neo-plus2/linux-extras.config new file mode 100644 index 00000000..52b4b4b2 --- /dev/null +++ b/board/friendlyarm/nanopi-neo-plus2/linux-extras.config @@ -0,0 +1,10 @@ +# wireless core +CONFIG_WIRELESS=y +CONFIG_CFG80211=y +CONFIG_MAC80211=y +CONFIG_CFG80211_WEXT=y + +# wireless drivers +CONFIG_WLAN=y +CONFIG_WLAN_VENDOR_BROADCOM=y +CONFIG_BRCMFMAC=m diff --git a/board/friendlyarm/nanopi-neo-plus2/post-build.sh b/board/friendlyarm/nanopi-neo-plus2/post-build.sh new file mode 100755 index 00000000..ec20fca7 --- /dev/null +++ b/board/friendlyarm/nanopi-neo-plus2/post-build.sh @@ -0,0 +1,4 @@ +#!/bin/sh +BOARD_DIR="$(dirname $0)" + +install -m 0644 -D $BOARD_DIR/extlinux.conf $BINARIES_DIR/extlinux/extlinux.conf diff --git a/board/friendlyarm/nanopi-neo-plus2/readme.txt b/board/friendlyarm/nanopi-neo-plus2/readme.txt new file mode 100644 index 00000000..ae599520 --- /dev/null +++ b/board/friendlyarm/nanopi-neo-plus2/readme.txt @@ -0,0 +1,37 @@ +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the Nanopi NEO Plus2. With the current configuration +it will bring-up the board, and allow access through the serial console. + +Nanopi NEO2 link: +http://nanopi.io/nanopi-neo-plus2.html + +Wiki link: +http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO_Plus2 + +This configuration uses U-Boot mainline and kernel mainline. + +How to build +============ + + $ make friendlyarm_nanopi_neo_plus2_defconfig + $ make + +Note: you will need access to the internet to download the required +sources. + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + $ sudo sync + +Insert the micro SDcard in your Nanopi NEO Plus2 and power it up. The console +is on the serial line, 115200 8N1. diff --git a/board/friendlyarm/nanopi-neo-plus2/rootfs_overlay/lib/firmware/brcm/brcmfmac43430-sdio.friendlyarm,nanopi-neo-plus2.txt b/board/friendlyarm/nanopi-neo-plus2/rootfs_overlay/lib/firmware/brcm/brcmfmac43430-sdio.friendlyarm,nanopi-neo-plus2.txt new file mode 100644 index 00000000..740d172e --- /dev/null +++ b/board/friendlyarm/nanopi-neo-plus2/rootfs_overlay/lib/firmware/brcm/brcmfmac43430-sdio.friendlyarm,nanopi-neo-plus2.txt @@ -0,0 +1,53 @@ +#AP6212_NVRAM_V1.0.1_20160606 +# 2.4 GHz, 20 MHz BW mode +# The following parameter values are just placeholders, need to be updated. +manfid=0x2d0 +prodid=0x0726 +vendid=0x14e4 +devid=0x43e2 +boardtype=0x0726 +boardrev=0x1101 +boardnum=22 +macaddr=00:90:4c:c5:12:38 +sromrev=11 +boardflags=0x00404201 +xtalfreq=26000 +nocrc=1 +ag0=255 +aa2g=1 +ccode=ALL + +pa0itssit=0x20 +extpagain2g=0 + +#PA parameters for 2.4GHz, measured at CHIP OUTPUT +pa2ga0=-168,7161,-820 +AvVmid_c0=0x0,0xc8 +cckpwroffset0=5 + +# PPR params +maxp2ga0=90 +txpwrbckof=6 +cckbw202gpo=0x5555 +legofdmbw202gpo=0x77777777 +mcsbw202gpo=0xaaaaaaaa + +# OFDM IIR : +ofdmdigfilttype=7 +# PAPD mode: +papdmode=2 + +il0macaddr=00:90:4c:c5:12:38 +wl0id=0x431b + +#OOB parameters +hostwake=0x40 +hostrdy=0x41 +usbrdy=0x03 +usbrdydelay=100 +deadman_to=0xffffffff +# muxenab: 0x1 for UART enable, 0x10 for Host awake +muxenab=0x10 +# CLDO PWM voltage settings - 0x4 - 1.1 volt +#cldo_pwm=0x4 +glitch_based_crsmin=1 diff --git a/board/friendlyarm/nanopi-neo/boot.cmd b/board/friendlyarm/nanopi-neo/boot.cmd new file mode 100644 index 00000000..78740578 --- /dev/null +++ b/board/friendlyarm/nanopi-neo/boot.cmd @@ -0,0 +1,8 @@ +setenv fdt_high ffffffff + +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +fatload mmc 0 $kernel_addr_r zImage +fatload mmc 0 $fdt_addr_r sun8i-h3-nanopi-neo.dtb + +bootz $kernel_addr_r - $fdt_addr_r diff --git a/board/friendlyarm/nanopi-neo/genimage.cfg b/board/friendlyarm/nanopi-neo/genimage.cfg new file mode 100644 index 00000000..f6adc4af --- /dev/null +++ b/board/friendlyarm/nanopi-neo/genimage.cfg @@ -0,0 +1,33 @@ +image boot.vfat { + vfat { + files = { + "zImage", + "sun8i-h3-nanopi-neo.dtb", + "boot.scr" + } + } + size = 10M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/friendlyarm/nanopi-neo/readme.txt b/board/friendlyarm/nanopi-neo/readme.txt new file mode 100644 index 00000000..84fb9cc4 --- /dev/null +++ b/board/friendlyarm/nanopi-neo/readme.txt @@ -0,0 +1,42 @@ +Intro +===== + +The instructions herein are valid for the FriendlyARM NanoPi NEO, +both the 256MiB and 512MiB versions. They should also work for the +NanoPi NEO Air, but this is untested so far. + +The FriendlyARM Nanopi NEO is a 4x4cm² board with an Allwiner H3 SoC: + - quad-core Cortex-A7 @1.2GHz + - 256 or 512MiB of DDR + - uSDCard as only storage option + - 3x USB 2.0 host (one socket, two on expansion pin-holes) + - 1x USB 2.0 OTG (also used as power source) + - 10/100 ethernet MAC + - GPIOs, SPI, I2c... + +Support for the Nanopi NEO in U-Boot and Linux is very recent, so only +core, basic features are available. + +Unfortunately, support for the ethernet MAC and the USB OTG are not +yet upstream, but are being actively worked on. + + +How to build +============ + + $ make friendlyarm_nanopi_neo_defconfig + $ make + +Note: you will need access to the internet to download the required +sources. + +You will then obtain an image ready to be written to your micro SDcard: + + $ dd if=output/images/sdcard.img of=/dev/sdX bs=1M + +Notes: + - replace 'sdX' with the actual device with your micro SDcard, + - you may need to be root to do that (use 'sudo'). + +Insert the micro SDcard in your NanoPi NEO and power it up. The console +is on the serial line, 115200 8N1. diff --git a/board/friendlyarm/nanopi-neo2/boot.cmd b/board/friendlyarm/nanopi-neo2/boot.cmd new file mode 100644 index 00000000..9a39f4af --- /dev/null +++ b/board/friendlyarm/nanopi-neo2/boot.cmd @@ -0,0 +1,6 @@ +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +fatload mmc 0 $kernel_addr_r Image +fatload mmc 0 $fdt_addr_r sun50i-h5-nanopi-neo2.dtb + +booti $kernel_addr_r - $fdt_addr_r diff --git a/board/friendlyarm/nanopi-neo2/genimage.cfg b/board/friendlyarm/nanopi-neo2/genimage.cfg new file mode 100644 index 00000000..ebe123b7 --- /dev/null +++ b/board/friendlyarm/nanopi-neo2/genimage.cfg @@ -0,0 +1,39 @@ +image boot.vfat { + vfat { + files = { + "Image", + "sun50i-h5-nanopi-neo2.dtb", + "boot.scr" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition spl { + in-partition-table = "no" + image = "sunxi-spl.bin" + offset = 8192 + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot.itb" + offset = 40K + size = 1M # 1MB - 40K + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/friendlyarm/nanopi-neo2/readme.txt b/board/friendlyarm/nanopi-neo2/readme.txt new file mode 100644 index 00000000..0f445e2b --- /dev/null +++ b/board/friendlyarm/nanopi-neo2/readme.txt @@ -0,0 +1,37 @@ +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the Nanopi NEO2. With the current configuration +it will bring-up the board, and allow access through the serial console. + +Nanopi NEO2 link: +http://nanopi.io/nanopi-neo2.html + +Wiki link: +https://openedev.amarulasolutions.com/display/ODWIKI/FriendlyARM+NanoPi+NEO2 + +This configuration uses U-Boot mainline and kernel mainline. + +How to build +============ + + $ make friendlyarm_nanopi_neo2_defconfig + $ make + +Note: you will need access to the internet to download the required +sources. + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + $ sudo sync + +Insert the micro SDcard in your Nanopi NEO2 and power it up. The console +is on the serial line, 115200 8N1. diff --git a/board/friendlyarm/nanopi-neo4/extlinux.conf b/board/friendlyarm/nanopi-neo4/extlinux.conf new file mode 100644 index 00000000..91eef67f --- /dev/null +++ b/board/friendlyarm/nanopi-neo4/extlinux.conf @@ -0,0 +1,4 @@ +label NanoPi Neo4 linux + kernel /boot/Image + devicetree /boot/rk3399-nanopi-neo4.dtb + append earlycon=uart8250,mmio32,0xff1a0000 root=/dev/mmcblk1p1 rootwait diff --git a/board/friendlyarm/nanopi-neo4/genimage.cfg b/board/friendlyarm/nanopi-neo4/genimage.cfg new file mode 100644 index 00000000..966c8692 --- /dev/null +++ b/board/friendlyarm/nanopi-neo4/genimage.cfg @@ -0,0 +1,22 @@ +image sdcard.img { + hdimage { + } + + partition u-boot-tpl-spl-dtb { + in-partition-table = "no" + image = "idbloader.img" + offset = 32K + } + + partition u-boot-dtb { + in-partition-table = "no" + image = "u-boot.itb" + offset = 8M + size = 30M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/friendlyarm/nanopi-neo4/post-build.sh b/board/friendlyarm/nanopi-neo4/post-build.sh new file mode 100755 index 00000000..1f5ff6a6 --- /dev/null +++ b/board/friendlyarm/nanopi-neo4/post-build.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" + +install -m 0644 -D $BOARD_DIR/extlinux.conf $TARGET_DIR/boot/extlinux/extlinux.conf diff --git a/board/friendlyarm/nanopi-neo4/readme.txt b/board/friendlyarm/nanopi-neo4/readme.txt new file mode 100644 index 00000000..7c04a528 --- /dev/null +++ b/board/friendlyarm/nanopi-neo4/readme.txt @@ -0,0 +1,53 @@ +Intro +===== + +NanoPi Neo4 is a RK3399 SoC based ARM64 board. + + +Official wiki: http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO4 +Mainline wiki: https://wiki.amarulasolutions.com/bsp/rockchip/rk3399/neo4.html + +Build +===== + +Run NanoPi Neo4 configuration + + $ make friendlyarm_nanopi_neo4_defconfig + +To build, run make comamnd. + + $ make + +Files created in output directory +================================= + +output/images + +├── bl31.bin +├── bl31.elf +├── Image +├── rk3399-nanopi-neo4.dtb +├── rootfs.ext2 +├── rootfs.ext4 -> rootfs.ext2 +├── rootfs.tar +├── sdcard.img +├── u-boot.bin +├── u-boot.itb +├── u-boot-spl-dtb.bin +├── u-boot-tpl-dtb.bin +├── u-boot-tpl-dtb.img +└── u-boot-tpl-spl-dtb.img + +Creating bootable SD card: +========================= + +Simply invoke (as root) + + # dd if=output/images/sdcard.img of=/dev/sdX && sync + +Where X is your SD card device + +Serial console +-------------- + +Baudrate for this board is 1500000 diff --git a/board/friendlyarm/nanopi-r1/boot.cmd b/board/friendlyarm/nanopi-r1/boot.cmd new file mode 100644 index 00000000..9f0cdbfe --- /dev/null +++ b/board/friendlyarm/nanopi-r1/boot.cmd @@ -0,0 +1,8 @@ +setenv fdt_high ffffffff + +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +fatload mmc 0 $kernel_addr_r zImage +fatload mmc 0 $fdt_addr_r sun8i-h3-nanopi-r1.dtb + +bootz $kernel_addr_r - $fdt_addr_r diff --git a/board/friendlyarm/nanopi-r1/genimage.cfg b/board/friendlyarm/nanopi-r1/genimage.cfg new file mode 100644 index 00000000..6f5f35dc --- /dev/null +++ b/board/friendlyarm/nanopi-r1/genimage.cfg @@ -0,0 +1,36 @@ +# Minimal SD card image for the NanoPi M1 +# +image boot.vfat { + vfat { + files = { + "zImage", + "sun8i-h3-nanopi-r1.dtb", + "boot.scr" + } + } + size = 10M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/friendlyarm/nanopi-r1/kernel/linux-extras.config b/board/friendlyarm/nanopi-r1/kernel/linux-extras.config new file mode 100644 index 00000000..206b3810 --- /dev/null +++ b/board/friendlyarm/nanopi-r1/kernel/linux-extras.config @@ -0,0 +1,2 @@ +# USB ethernet +CONFIG_USB_RTL8152=y diff --git a/board/friendlyarm/nanopi-r1/kernel/sun8i-h3-nanopi-r1.dts b/board/friendlyarm/nanopi-r1/kernel/sun8i-h3-nanopi-r1.dts new file mode 100644 index 00000000..ca15a57b --- /dev/null +++ b/board/friendlyarm/nanopi-r1/kernel/sun8i-h3-nanopi-r1.dts @@ -0,0 +1,170 @@ +/* + * Copyright (C) 2019 Igor Pecovnik + * + * This file is dual-licensed: you can use it either under the terms + * of the GPL or the X11 license, at your option. Note that this dual + * licensing only applies to this file, and not this project as a + * whole. + * + * a) This file 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 file 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. + * + * Or, alternatively, + * + * b) 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. + */ + +#include "sun8i-h3-nanopi.dtsi" + +/ { + model = "FriendlyElec NanoPi-R1"; + compatible = "friendlyarm,nanopi-r1", "allwinner,sun8i-h3"; + + aliases { + serial1 = &uart3; + ethernet0 = &emac; + ethernet1 = &emac; + ethernet2 = &sdio_wifi; + }; + + wifi_pwrseq: wifi_pwrseq { + compatible = "mmc-pwrseq-simple"; + pinctrl-names = "default"; + reset-gpios = <&r_pio 0 7 GPIO_ACTIVE_LOW>; /* PL7 */ + }; + + reg_gmac_3v3: gmac-3v3 { + compatible = "regulator-fixed"; + regulator-name = "gmac-3v3"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + startup-delay-us = <100000>; + enable-active-high; + gpio = <&pio 3 6 GPIO_ACTIVE_HIGH>; + }; + + leds { + /delete-node/ status; + /delete-node/ pwr; + led1 { + label = "LED1"; + gpios = <&pio 0 10 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "heartbeat"; + }; + + led2 { + label = "LED2"; + gpios = <&pio 6 11 GPIO_ACTIVE_HIGH>; + default-state = "off"; + linux,default-trigger = "netdev"; + }; + + led3 { + label = "LED3"; + gpios = <&pio 0 9 GPIO_ACTIVE_HIGH>; + default-state = "off"; + linux,default-trigger = "netdev"; + }; + }; + + r_gpio_keys { + compatible = "gpio-keys"; + input-name = "k1"; + pinctrl-names = "default"; + pinctrl-0 = <&sw_r_npi>; + + /delete-node/ k1; + reset { + label = "reset"; + linux,code = ; + gpios = <&r_pio 0 3 GPIO_ACTIVE_LOW>; + }; + }; +}; + +&emac { + pinctrl-names = "default"; + pinctrl-0 = <&emac_rgmii_pins>; + phy-supply = <®_gmac_3v3>; + phy-handle = <&ext_rgmii_phy>; + phy-mode = "rgmii"; + + status = "okay"; +}; + +&external_mdio { + ext_rgmii_phy: ethernet-phy@1 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <7>; + }; +}; + +&mmc1 { + vmmc-supply = <®_vcc3v3>; + vqmmc-supply = <®_vcc3v3>; + mmc-pwrseq = <&wifi_pwrseq>; + bus-width = <4>; + non-removable; + status = "okay"; + + sdio_wifi: sdio_wifi@1 { + reg = <1>; + compatible = "brcm,bcm4329-fmac"; + interrupt-parent = <&pio>; + interrupts = <6 10 IRQ_TYPE_LEVEL_LOW>; /* PG10 / EINT10 */ + interrupt-names = "host-wake"; + }; +}; + +&mmc2 { + pinctrl-names = "default"; + pinctrl-0 = <&mmc2_8bit_pins>; + vmmc-supply = <®_vcc3v3>; + vqmmc-supply = <®_vcc3v3>; + bus-width = <8>; + non-removable; + status = "okay"; +}; + +&ohci0 { + status = "okay"; +}; + +&ohci1 { + status = "okay"; +}; + +&usb_otg { + dr_mode = "peripheral"; + status = "okay"; +}; + +&usbphy { + status = "okay"; +}; diff --git a/board/friendlyarm/nanopi-r1/readme.txt b/board/friendlyarm/nanopi-r1/readme.txt new file mode 100644 index 00000000..fa3114fc --- /dev/null +++ b/board/friendlyarm/nanopi-r1/readme.txt @@ -0,0 +1,29 @@ +NanoPi R1 + +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the NanoPi R1. With the current configuration +it will bring-up the board, and allow access through the serial console. + +How to build it +=============== + +Configure Buildroot: + + $ make friendlyarm_nanopi_r1_defconfig + +Compile everything and build the SD card image: + + $ make + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX diff --git a/board/friendlyarm/nanopi-r1/uboot/nanopi_r1_defconfig b/board/friendlyarm/nanopi-r1/uboot/nanopi_r1_defconfig new file mode 100644 index 00000000..e028b41a --- /dev/null +++ b/board/friendlyarm/nanopi-r1/uboot/nanopi_r1_defconfig @@ -0,0 +1,22 @@ +CONFIG_ARM=y +CONFIG_ARCH_SUNXI=y +CONFIG_SPL=y +CONFIG_MACH_SUN8I_H3=y +CONFIG_DRAM_CLK=408 +CONFIG_DRAM_ZQ=3881979 +CONFIG_DRAM_ODT_EN=y +CONFIG_MACPWR="PD6" +# CONFIG_VIDEO_DE2 is not set +CONFIG_NR_DRAM_BANKS=1 +# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set +CONFIG_CONSOLE_MUX=y +CONFIG_SYS_CLK_FREQ=480000000 +# CONFIG_CMD_FLASH is not set +# CONFIG_SPL_DOS_PARTITION is not set +# CONFIG_SPL_EFI_PARTITION is not set +CONFIG_DEFAULT_DEVICE_TREE="sun8i-h3-nanopi-r1" +CONFIG_SUN8I_EMAC=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_OHCI_HCD=y +CONFIG_SYS_USB_EVENT_POLL_VIA_INT_QUEUE=y +CONFIG_MMC_SUNXI_SLOT_EXTRA=2 diff --git a/board/friendlyarm/nanopi-r1/uboot/sun8i-h3-nanopi-r1.dts b/board/friendlyarm/nanopi-r1/uboot/sun8i-h3-nanopi-r1.dts new file mode 100644 index 00000000..9c3c574e --- /dev/null +++ b/board/friendlyarm/nanopi-r1/uboot/sun8i-h3-nanopi-r1.dts @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2019 Igor Pecovnik + * + * This file is dual-licensed: you can use it either under the terms + * of the GPL or the X11 license, at your option. Note that this dual + * licensing only applies to this file, and not this project as a + * whole. + * + * a) This file 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 file 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. + * + * Or, alternatively, + * + * b) 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. + */ + +#include "sun8i-h3-nanopi.dtsi" + +/ { + model = "FriendlyARM NanoPi R1"; + compatible = "friendlyarm,nanopi-neo", "allwinner,sun8i-h3"; + + reg_gmac_3v3: gmac-3v3 { + compatible = "regulator-fixed"; + pinctrl-names = "default"; + regulator-name = "gmac-3v3"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + startup-delay-us = <100000>; + enable-active-high; + gpio = <&pio 3 6 GPIO_ACTIVE_HIGH>; + }; + +}; + +&ehci0 { + status = "okay"; +}; + +&pio { + gmac_power_pin_nanopi: gmac_power_pin@0 { + pins = "PD6"; + function = "gpio_out"; + }; +}; + +&ohci0 { + status = "okay"; +}; + +&mmc2 { + pinctrl-names = "default"; + pinctrl-0 = <&mmc2_8bit_pins>; + vmmc-supply = <®_vcc3v3>; + bus-width = <8>; + non-removable; + cap-mmc-hw-reset; + status = "okay"; +}; + +&emac { + pinctrl-names = "default"; + pinctrl-0 = <&emac_rgmii_pins>; + phy-supply = <®_gmac_3v3>; + phy-handle = <&ext_rgmii_phy>; + phy-mode = "rgmii"; + + status = "okay"; +}; + +&external_mdio { + ext_rgmii_phy: ethernet-phy@1 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <7>; + }; +}; diff --git a/board/globalscale/espressobin/genimage.cfg b/board/globalscale/espressobin/genimage.cfg new file mode 100644 index 00000000..360c8f09 --- /dev/null +++ b/board/globalscale/espressobin/genimage.cfg @@ -0,0 +1,11 @@ +# Minimal image, no U-boot since v3/v5 cannot boot from sdcard, see +# readme.txt for details on configuring the on-board u-boot. +image sdcard.img { + hdimage { + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/globalscale/espressobin/linux-extras.config b/board/globalscale/espressobin/linux-extras.config new file mode 100644 index 00000000..7ce0a495 --- /dev/null +++ b/board/globalscale/espressobin/linux-extras.config @@ -0,0 +1,14 @@ +# +# The Espressobin has a switchcore with full support in the kernel. +# This fragment enables DSA and its drivers, inclding VLAN aware bridge +# support to allow users to easily set up a LAN switch + WAN interface. +# +CONFIG_NET_DSA=m +CONFIG_VLAN_8021Q=y + +CONFIG_BRIDGE=m +CONFIG_BRIDGE_IGMP_SNOOPING=y +CONFIG_BRIDGE_VLAN_FILTERING=y + +CONFIG_NET_DSA_MV88E6XXX=m +CONFIG_NET_DSA_MV88E6XXX_PTP=y diff --git a/board/globalscale/espressobin/readme.txt b/board/globalscale/espressobin/readme.txt new file mode 100644 index 00000000..c5af7e3c --- /dev/null +++ b/board/globalscale/espressobin/readme.txt @@ -0,0 +1,90 @@ +Marvell ESPRESSObin +=================== + +This default configuration allows you to quickly get up and running with +the Marvell ESPRESSObin board by Globalscale Technologies Inc. + +The ESPRESSObin is based on the Marvell Armada 88F3720 SoC, coupled with +a Marvell 88E6341 switch core "Topaz", with three exposed gigabit ports. + + _________________________ + |# U W L L U #| + |# S A A A S #| + |# B N N N B #| + |# 0 1 #| + |# Mini #| + |# -PCI #| + |# #| + |# 5 #| + |#__V___usb_PWR_SATA__SW_#| + + Fig 1: Overview of board + +Notice difference in Ethernet port layout compared to the Globalscale +docs. They order the ports; LAN2, LAN1, WAN (left to right in figure +above). For more information, see http://espressobin.net + + +Building +-------- + + $ make globalscale_espressobin_defconfig + $ make + +This generates the kernel image, the devicetree binary, the rootfs as a +tar.gz, and a filesystem image containing everything. + +All build artifacts are located in `output/images/` + + +Booting +------- + +To boot, you need a UART connection, using the on-board micro USB port +set to 115200 8N1. + +By default, the ESPRESSObin comes with a pre-flashed U-Boot set up to +load the kernel, device-tree and rootfs from SPI NOR flash. The board +jumpers can be changed to boot from different sources, see the quick +start guide for each board revision for details: + +- ftp://downloads.globalscaletechnologies.com/Downloads/Espressobin/ESPRESSObin%20V5/ +- ftp://downloads.globalscaletechnologies.com/Downloads/Espressobin/ESPRESSObin%20V7/ + +Note: the v5, and earlier, cannot boot from sdcard, so you have to set +up the factory U-Boot to boot into Buildroot: + +1. Flash rootfs image to sdcard drive, your `of=` device may differ: + + $ sudo dd if=output/images/sdcard.img of=/dev/mmcblk0 bs=1M + $ sync + +2. Boot board from SPI NOR, interrupt boot by pressing any key ... +3. Check with `printenv` that the default setup is OK, otherwise ensure + the following are set, and define `bootcmd` for automatic boot: + + > setenv kernel_addr 0x5000000 + > setenv fdt_addr 0x1800000 + > setenv fdt_name boot/armada-3720-espressobin.dtb + > setenv console console=ttyMV0,115200 earlycon=ar3700_uart,0xd0012000 + > setenv bootcmd 'mmc dev 0; ext4load mmc 0:1 $kernel_addr $image_name;ext4load mmc 0:1 $fdt_addr $fdt_name;setenv bootargs $console root=/dev/mmcblk0p1 rw rootwait; booti $kernel_addr - $fdt_addr' + +4. Call the boot command, or `reset` the board to start: + + > run bootcmd + + +Networking +---------- + +To enable Ethernet networking, load the `mv88e6xxx` kernel module, and +bring up each respective interface needed: + + # modprobe mv88e6xxx + # ifconfig wan up + +A more advanced scenario is setting up switching between the ports using +the Linux bridge. The kernel switchdev layer, and DSA driver, ensure +switch functions are "offloaded" to the HW switch, i.e., all traffic +between LAN ports never reach the CPU. For this you need the iproute2 +suite of tools. diff --git a/board/grinn/chiliboard/genimage.cfg b/board/grinn/chiliboard/genimage.cfg new file mode 100644 index 00000000..ffe027e7 --- /dev/null +++ b/board/grinn/chiliboard/genimage.cfg @@ -0,0 +1,31 @@ +# Minimal microSD card image for Grinn's chiliBoard +# + +image boot.vfat { + vfat { + files = { + "MLO", + "u-boot.img", + "am335x-chiliboard.dtb", + "zImage" + } + } + size = 16M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 1M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/grinn/chiliboard/readme.txt b/board/grinn/chiliboard/readme.txt new file mode 100644 index 00000000..676aa704 --- /dev/null +++ b/board/grinn/chiliboard/readme.txt @@ -0,0 +1,46 @@ +********** +chiliBoard +********** + +Build +===== + +First, configure Buildroot for your chiliBoard: + + make grinn_chiliboard_defconfig + +Build image: + + make + +After building you should get a tree like this: + + output/images/ + ├── am335x-chiliboard.dtb + ├── boot.vfat + ├── MLO + ├── rootfs.ext2 + ├── rootfs.ext4 + ├── rootfs.tar + ├── sdcard.img + ├── u-boot.img + └── zImage + +Create a bootable microSD card +============================== + +Buildroot prepares a bootable microSD card image "sdcard.img" in output/images/ +directory, To flash SD card just run the following command: + + sudo dd if=output/images/sdcard.img of=/dev/ bs=1M + +where can be sdX or mmcblkX + +*** WARNING! This will destroy all contents of device you specify! *** + +Boot chiliBoard +=============== + +- insert the microSD card in the microSD slot of the board; +- plug micro USB cable to provide power and console interface +- use terminal emulator with 115200 bps, 8n1 diff --git a/board/grinn/liteboard/genimage.cfg b/board/grinn/liteboard/genimage.cfg new file mode 100644 index 00000000..cbce2db5 --- /dev/null +++ b/board/grinn/liteboard/genimage.cfg @@ -0,0 +1,48 @@ +# Minimal microSD card image for Grinn's liteBoard +# +# We mimic the .sdcard Freescale's image format for i.MX6UL: +# * the microSD card must have 1 kB free space at the beginning, +# * SPL is dumped as is, +# * U-Boot is dumped at 69K offset, as configured in SPL +# * a FAT partition at offset 8 MB is containing zImage and dtbs, +# * a single root filesystem partition is required (Ext4 in this case). +# + +image boot.vfat { + vfat { + files = { + "imx6ul-liteboard.dtb", + "zImage" + } + } + size = 16M +} + +image sdcard.img { + hdimage { + } + + partition SPL { + in-partition-table = "no" + image = "SPL" + offset = 1K + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot.img" + offset = 69K + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 8M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/grinn/liteboard/readme.txt b/board/grinn/liteboard/readme.txt new file mode 100644 index 00000000..fe1386a0 --- /dev/null +++ b/board/grinn/liteboard/readme.txt @@ -0,0 +1,45 @@ +********* +liteBoard +********* + +Build +===== + +First, configure Buildroot for your liteBoard: + + make grinn_liteboard_defconfig + +Build image: + + make + +After building you should get a tree like this: + + output/images/ + ├── boot.vfat + ├── imx6ul-liteboard.dtb + ├── rootfs.ext2 + ├── rootfs.ext4 + ├── rootfs.tar + ├── sdcard.img + ├── u-boot.imx + └── zImage + +Create a bootable microSD card +============================== + +Buildroot prepares a bootable microSD card image "sdcard.img" in output/images/ +directory, To flash SD card just run the following command: + + sudo dd if=output/images/sdcard.img of=/dev/ bs=1M + +where can be sdX or mmcblkX + +*** WARNING! This will destroy all contents of device you specify! *** + +Boot liteBoard +============== + +- insert the microSD card in the microSD slot of the board; +- plug micro USB cable to provide power and console interface +- use terminal emulator with 115200 bps, 8n1 diff --git a/board/hardkernel/odroidc2/boot.cmd b/board/hardkernel/odroidc2/boot.cmd new file mode 100644 index 00000000..d800a6d4 --- /dev/null +++ b/board/hardkernel/odroidc2/boot.cmd @@ -0,0 +1,11 @@ +setenv kernel_filename "Image" +setenv fdt_filename "meson-gxbb-odroidc2.dtb" +setenv bootargs "console=ttyAML0,115200n8 earlyprintk root=/dev/mmcblk1p2 rootwait rw" + +echo > Loading Kernel... +fatload mmc 0:1 ${kernel_addr_r} ${kernel_filename} +echo > Loading FDT... +fatload mmc 0:1 ${fdt_addr_r} ${fdt_filename} + +echo > Booting System... +booti ${kernel_addr_r} - ${fdt_addr_r} diff --git a/board/hardkernel/odroidc2/genimage.cfg b/board/hardkernel/odroidc2/genimage.cfg new file mode 100644 index 00000000..f49c1dea --- /dev/null +++ b/board/hardkernel/odroidc2/genimage.cfg @@ -0,0 +1,38 @@ +image boot.vfat { + vfat { + files = { + "Image", + "meson-gxbb-odroidc2.dtb", + "boot.scr" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition bl1 { + in-partition-table = "no" + image = "bl1.bin.hardkernel" + offset = 0 + } + + partition u-boot { + in-partition-table = "no" + image = "uboot-odc2.img" + offset = 49664 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/hardkernel/odroidc2/post-image.sh b/board/hardkernel/odroidc2/post-image.sh new file mode 100755 index 00000000..eb6fd4f0 --- /dev/null +++ b/board/hardkernel/odroidc2/post-image.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" + +${HOST_DIR}/bin/fip_create \ + --bl30 ${BINARIES_DIR}/bl30.bin \ + --bl301 ${BINARIES_DIR}/bl301.bin \ + --bl31 ${BINARIES_DIR}/bl31.bin \ + --bl33 ${BINARIES_DIR}/u-boot.bin \ + ${BINARIES_DIR}/fip.bin + +${HOST_DIR}/bin/fip_create --dump ${BINARIES_DIR}/fip.bin + +cat ${BINARIES_DIR}/bl2.package ${BINARIES_DIR}/fip.bin \ + > ${BINARIES_DIR}/boot_new.bin + +${HOST_DIR}/bin/amlbootsig ${BINARIES_DIR}/boot_new.bin ${BINARIES_DIR}/u-boot.img + +dd if=${BINARIES_DIR}/u-boot.img of=${BINARIES_DIR}/uboot-odc2.img bs=512 skip=96 + +support/scripts/genimage.sh -c ${BOARD_DIR}/genimage.cfg diff --git a/board/hardkernel/odroidc2/readme.txt b/board/hardkernel/odroidc2/readme.txt new file mode 100644 index 00000000..24847827 --- /dev/null +++ b/board/hardkernel/odroidc2/readme.txt @@ -0,0 +1,64 @@ +ODROID-C2 + +Intro +===== +To be able to use ODROID-C2 board with the images generated by +Buildroot, you have to prepare the SDCard or eMMC. + +How to build it +=============== + + $ make odroidc2_defconfig + +Then you can edit the build options using + + $ make menuconfig + +Compile all and build rootfs image: + + $ make + +Note: you will need to have access to the network, since Buildroot will +download the packages' sources. + +Result of the build +------------------- + +After building, you should obtain this tree: + + output/images/ + +-- bl1.bin.hardkernel + +-- bl2.package + +-- bl301.bin + +-- bl30.bin + +-- bl31.bin + +-- boot_new.bin + +-- boot.scr [1] + +-- boot.vfat + +-- fip.bin + +-- Image [2] + +-- meson-gxbb-odroidc2.dtb + +-- rootfs.ext2 + +-- rootfs.ext4 + +-- rootfs.tar + +-- sdcard.img + +-- u-boot.bin + +-- u-boot.img + +-- uboot-odc2.img [3] + +[1] This is the ODROID-C2 configuration file used in u-boot. +[2] This is the ODROID-C2 kernel image file which will be booted. +[3] This is the ODROID-C2 signed u-boot image which will be used. + +How to write the SD card or eMMC +================================ + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card or eMMC with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + +Insert the SDcard into your ODROID-C2, and power it up. Your new system +should come up now. diff --git a/board/hardkernel/odroidc2/rootfs_overlay/etc/init.d/S09modload b/board/hardkernel/odroidc2/rootfs_overlay/etc/init.d/S09modload new file mode 100755 index 00000000..8d694a73 --- /dev/null +++ b/board/hardkernel/odroidc2/rootfs_overlay/etc/init.d/S09modload @@ -0,0 +1,23 @@ +#!/bin/sh +# + +load_drivers() +{ + echo "Loading needed modules..." + for file in $(echo "dwmac_generic dwmac-meson8b meson_dw_hdmi meson_gxbb_wdt"); do + modprobe ${file} + done +} + +case "$1" in + start) + load_drivers + ;; + stop) + ;; + restart|reload) + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac diff --git a/board/hardkernel/odroidxu4/boot.ini b/board/hardkernel/odroidxu4/boot.ini new file mode 100644 index 00000000..87ac7ac1 --- /dev/null +++ b/board/hardkernel/odroidxu4/boot.ini @@ -0,0 +1,38 @@ +ODROIDXU-UBOOT-CONFIG + +# U-Boot Parameters +setenv initrd_high "0xffffffff" +setenv fdt_high "0xffffffff" + +setenv macaddr "00:1e:06:61:7a:39" +setenv bootrootfs "console=tty1 root=/dev/mmcblk1p2 rootwait rw fsck.repair=yes net.ifnames=0" +setenv bootcmd "load mmc 0:1 0x40008000 zImage; load mmc 0:1 0x44000000 exynos5422-odroidxu4.dtb; bootz 0x40008000 - 0x44000000" +setenv vout "hdmi" +setenv governor "performance" +setenv HPD "true" + +# TMDS data amplitude control. +setenv hdmi_tx_amp_lvl "31" + +# TMDS data amplitude fine control for each channel. +setenv hdmi_tx_lvl_ch0 "3" +setenv hdmi_tx_lvl_ch1 "3" +setenv hdmi_tx_lvl_ch2 "3" + +# TMDS data pre-emphasis level control. +setenv hdmi_tx_emp_lvl "6" + +# TMDS clock amplitude control. +setenv hdmi_clk_amp_lvl "31" + +# TMDS data source termination resistor control. +setenv hdmi_tx_res "0" + +setenv hdmi_phy_control "hdmi_tx_amp_lvl=${hdmi_tx_amp_lvl} hdmi_tx_lvl_ch0=${hdmi_tx_lvl_ch0} hdmi_tx_lvl_ch1=${hdmi_tx_lvl_ch1} hdmi_tx_lvl_ch2=${hdmi_tx_lvl_ch2} hdmi_tx_emp_lvl=${hdmi_tx_emp_lvl} hdmi_clk_amp_lvl=${hdmi_clk_amp_lvl} hdmi_tx_res=${hdmi_tx_res} HPD=${HPD} vout=${vout}" + +# final boot args +setenv bootargs "${bootrootfs} ${videoconfig} smsc95xx.macaddr=${macaddr} governor=${governor} ${hdmi_phy_control}" + +# Boot the board +boot + diff --git a/board/hardkernel/odroidxu4/genimage.cfg b/board/hardkernel/odroidxu4/genimage.cfg new file mode 100644 index 00000000..e6b85cf2 --- /dev/null +++ b/board/hardkernel/odroidxu4/genimage.cfg @@ -0,0 +1,54 @@ +image boot.vfat { + vfat { + files = { + "boot.ini", + "zImage", + "exynos5422-odroidxu4.dtb" + } + } + size = 32M +} + +image sdcard.img { + hdimage { + } + + partition bl1 { + in-partition-table = "no" + image = "bl1.bin.hardkernel" + offset = 512 + size = 15360 + } + + partition bl2 { + in-partition-table = "no" + image = "bl2.bin.hardkernel.720k_uboot" + offset = 15872 + size = 16384 + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-dtb.bin" + offset = 32256 + size = 720k + } + + partition tzsw { + in-partition-table = "no" + image = "tzsw.bin.hardkernel" + offset = 769536 + size = 256k + } + + partition vfat { + partition-type = 0xC + image = "boot.vfat" + offset = 2097152 + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/hardkernel/odroidxu4/post-image.sh b/board/hardkernel/odroidxu4/post-image.sh new file mode 100755 index 00000000..025906cd --- /dev/null +++ b/board/hardkernel/odroidxu4/post-image.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" +GENIMAGE_CFG="${BOARD_DIR}/genimage.cfg" +GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp" + +cp ${BOARD_DIR}/boot.ini ${BINARIES_DIR}/ + +# The bl1.bin.hardkernel file provided by the uboot hardkernel repository is overwritten +# by the bl2.bin.hardkernel in the sd_fusing.sh script because it is too big. +# In order to implement this in genimage, we need to truncate the bl1.bin file +# so that it does not exceed the available place. +# An issue has been filled about this: https://github.com/hardkernel/u-boot/issues/45 +truncate -s 15360 ${BINARIES_DIR}/bl1.bin.hardkernel + +rm -rf "${GENIMAGE_TMP}" + +genimage \ + --rootpath "${TARGET_DIR}" \ + --tmppath "${GENIMAGE_TMP}" \ + --inputpath "${BINARIES_DIR}" \ + --outputpath "${BINARIES_DIR}" \ + --config "${GENIMAGE_CFG}" + diff --git a/board/hardkernel/odroidxu4/readme.txt b/board/hardkernel/odroidxu4/readme.txt new file mode 100644 index 00000000..e3cba8b0 --- /dev/null +++ b/board/hardkernel/odroidxu4/readme.txt @@ -0,0 +1,37 @@ +Odroid XU-4 board with Samsung Exynos 5422 SoC + +How to build it +=============== + + $ make odroidxu4_defconfig + +Then you can edit the build options using + + $ make menuconfig + +Compile all and build rootfs image: + + $ make + +Note: you will need to have access to the network, since Buildroot will +download the packages' sources. + +Result of the build +------------------- + +After building, you should obtain all output files in output/images/ + + +How to write the SD card or eMMC +================================ + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card or eMMC with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + +Insert the SDcard into your ODROID-XU4, and power it up. Your new system +should come up now. + diff --git a/board/intel/galileo/genimage.cfg b/board/intel/galileo/genimage.cfg new file mode 100644 index 00000000..31add21e --- /dev/null +++ b/board/intel/galileo/genimage.cfg @@ -0,0 +1,31 @@ +# Create an image of the efi partition +image efi-part.vfat { + vfat { + file startup.nsh { + image = "efi-part/startup.nsh" + } + file EFI { + image = "efi-part/EFI" + } + } + size=512K +} + +# Create the sdcard image, pulling in +# * the image created by buildroot +# * the efi-partition created above +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + image = "efi-part.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext2" + size = 512M + } +} diff --git a/board/intel/galileo/grub.cfg b/board/intel/galileo/grub.cfg new file mode 100644 index 00000000..dde2f762 --- /dev/null +++ b/board/intel/galileo/grub.cfg @@ -0,0 +1,11 @@ +set default="0" +set timeout="0" + +menuentry "Buildroot" { + # Grub2 supports ext4, load the kernel from the Linux rootfs partition + # Set root tells grub to search the 2nd partition for the bzImage + set root=(hd0,msdos2) + + # Set Linux to boot from the 2nd partition, SD/MMC support is baked into the kernel + linux /boot/bzImage root=/dev/mmcblk0p2 rootwait console=ttyS1,115200n8 earlycon=uart8250,mmio32,0x9000b000,115200n8 reboot=efi,warm apic=debug rw +} diff --git a/board/intel/galileo/linux-3.14.config b/board/intel/galileo/linux-3.14.config new file mode 100644 index 00000000..e7aa9cf2 --- /dev/null +++ b/board/intel/galileo/linux-3.14.config @@ -0,0 +1,308 @@ +# CONFIG_LOCALVERSION_AUTO is not set +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_FHANDLE=y +CONFIG_KERNEL_LZMA=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=18 +CONFIG_CGROUPS=y +CONFIG_CGROUP_FREEZER=y +CONFIG_CPUSETS=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_RESOURCE_COUNTERS=y +CONFIG_CGROUP_SCHED=y +CONFIG_NAMESPACES=y +CONFIG_RELAY=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_RD_BZIP2=y +CONFIG_RD_LZMA=y +CONFIG_SYSCTL_SYSCALL=y +# CONFIG_PCSPKR_PLATFORM is not set +CONFIG_EMBEDDED=y +# CONFIG_COMPAT_BRK is not set +CONFIG_JUMP_LABEL=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_LBDAF=y +CONFIG_PARTITION_ADVANCED=y +CONFIG_BSD_DISKLABEL=y +# CONFIG_ZONE_DMA is not set +CONFIG_X86_INTEL_QUARK=y +CONFIG_M586TSC=y +CONFIG_X86_GENERIC=y +CONFIG_HPET_TIMER=y +CONFIG_PREEMPT_VOLUNTARY=y +CONFIG_X86_UP_IOAPIC=y +# CONFIG_X86_MCE_AMD is not set +# CONFIG_X86_16BIT is not set +CONFIG_X86_REBOOTFIXUPS=y +CONFIG_MICROCODE=y +CONFIG_X86_MSR=y +CONFIG_X86_CPUID=y +CONFIG_HIGHMEM64G=y +# CONFIG_COMPACTION is not set +# CONFIG_MTRR is not set +# CONFIG_ARCH_RANDOM is not set +CONFIG_EFI=y +CONFIG_EFI_STUB=y +CONFIG_EFI_CAPSULE=m +CONFIG_HZ_100=y +CONFIG_KEXEC=y +CONFIG_PHYSICAL_START=0x400000 +CONFIG_PHYSICAL_ALIGN=0x1000000 +# CONFIG_COMPAT_VDSO is not set +CONFIG_PM_RUNTIME=y +CONFIG_PM_DEBUG=y +CONFIG_PM_TRACE_RTC=y +CONFIG_ACPI_PROCFS=y +CONFIG_ACPI_PROCFS_POWER=y +CONFIG_ACPI_EC_DEBUGFS=y +# CONFIG_ACPI_BATTERY is not set +# CONFIG_ACPI_FAN is not set +CONFIG_ACPI_DEBUG=y +CONFIG_ACPI_PCI_SLOT=y +CONFIG_PCIEPORTBUS=y +CONFIG_PCI_MSI=y +CONFIG_PCI_DEBUG=y +CONFIG_PCI_IOAPIC=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_SYN_COOKIES=y +# CONFIG_IPV6_SIT is not set +CONFIG_IPV6_MULTIPLE_TABLES=y +CONFIG_IPV6_SUBTREES=y +CONFIG_VLAN_8021Q=m +CONFIG_VLAN_8021Q_GVRP=y +CONFIG_CAN=m +# CONFIG_CAN_GW is not set +CONFIG_CAN_J1939=m +CONFIG_CAN_VCAN=m +CONFIG_CAN_SLCAN=m +# CONFIG_CAN_DEV is not set +CONFIG_BT=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m +CONFIG_BT_HCIBTUSB=m +CONFIG_CFG80211=m +CONFIG_CFG80211_WEXT=y +CONFIG_MAC80211=m +CONFIG_MAC80211_LEDS=y +CONFIG_RFKILL=m +CONFIG_RFKILL_INPUT=y +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +# CONFIG_FW_LOADER_USER_HELPER is not set +CONFIG_DEBUG_DEVRES=y +CONFIG_MTD=y +CONFIG_MTD_BLOCK=m +# CONFIG_PNP_DEBUG_MESSAGES is not set +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_LOOP_MIN_COUNT=2 +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=1 +CONFIG_BLK_DEV_RAM_SIZE=81920 +CONFIG_EEPROM_AT24=m +CONFIG_EEPROM_93CX6=m +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +CONFIG_CHR_DEV_SG=y +CONFIG_SCSI_CONSTANTS=y +CONFIG_SCSI_SPI_ATTRS=y +# CONFIG_SCSI_LOWLEVEL is not set +CONFIG_NETDEVICES=y +CONFIG_TUN=y +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_NET_VENDOR_ADAPTEC is not set +# CONFIG_NET_VENDOR_ALTEON is not set +# CONFIG_NET_VENDOR_AMD is not set +# CONFIG_NET_VENDOR_ARC is not set +# CONFIG_NET_VENDOR_ATHEROS is not set +# CONFIG_NET_VENDOR_BROADCOM is not set +# CONFIG_NET_VENDOR_BROCADE is not set +# CONFIG_NET_VENDOR_CHELSIO is not set +# CONFIG_NET_VENDOR_CISCO is not set +# CONFIG_NET_VENDOR_DEC is not set +# CONFIG_NET_VENDOR_DLINK is not set +# CONFIG_NET_VENDOR_EMULEX is not set +# CONFIG_NET_VENDOR_EXAR is not set +# CONFIG_NET_VENDOR_HP is not set +# CONFIG_NET_VENDOR_I825XX is not set +# CONFIG_NET_VENDOR_MARVELL is not set +# CONFIG_NET_VENDOR_MELLANOX is not set +# CONFIG_NET_VENDOR_MICREL is not set +# CONFIG_NET_VENDOR_MICROCHIP is not set +# CONFIG_NET_VENDOR_MYRI is not set +# CONFIG_NET_VENDOR_NATSEMI is not set +# CONFIG_NET_VENDOR_NVIDIA is not set +# CONFIG_NET_VENDOR_OKI is not set +# CONFIG_NET_PACKET_ENGINE is not set +# CONFIG_NET_VENDOR_QLOGIC is not set +# CONFIG_NET_VENDOR_REALTEK is not set +# CONFIG_NET_VENDOR_RDC is not set +# CONFIG_NET_VENDOR_SEEQ is not set +# CONFIG_NET_VENDOR_SILAN is not set +# CONFIG_NET_VENDOR_SIS is not set +# CONFIG_NET_VENDOR_SMSC is not set +CONFIG_STMMAC_ETH=m +# CONFIG_STMMAC_PLATFORM is not set +CONFIG_STMMAC_PCI=m +# CONFIG_NET_VENDOR_SUN is not set +# CONFIG_NET_VENDOR_TEHUTI is not set +# CONFIG_NET_VENDOR_TI is not set +# CONFIG_NET_VENDOR_VIA is not set +# CONFIG_NET_VENDOR_WIZNET is not set +CONFIG_PHYLIB=y +CONFIG_PPP=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_ASYNC=m +# CONFIG_RTL_CARDS is not set +# CONFIG_INPUT_MOUSEDEV is not set +CONFIG_INPUT_EVDEV=m +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_SERIO is not set +CONFIG_VT_HW_CONSOLE_BINDING=y +CONFIG_LEGACY_PTY_COUNT=32 +CONFIG_SERIAL_NONSTANDARD=y +CONFIG_SERIAL_8250=y +# CONFIG_SERIAL_8250_PNP is not set +CONFIG_SERIAL_8250_CONSOLE=y +# CONFIG_SERIAL_8250_PCI is not set +CONFIG_SERIAL_8250_NR_UARTS=8 +CONFIG_SERIAL_8250_RUNTIME_UARTS=2 +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_MANY_PORTS=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +CONFIG_SERIAL_8250_DETECT_IRQ=y +CONFIG_SERIAL_8250_RSA=y +CONFIG_SERIAL_8250_DW=y +CONFIG_SERIAL_SC16IS7XX=m +CONFIG_SERIAL_SC16IS7XX_SPI=m +# CONFIG_HW_RANDOM is not set +CONFIG_HPET=y +# CONFIG_HPET_MMAP is not set +CONFIG_I2C=y +CONFIG_SPI_DEBUG=y +CONFIG_SPI_GPIO=y +CONFIG_SPI_PXA2XX=y +CONFIG_PTP_1588_CLOCK=y +CONFIG_GPIO_SCH=y +CONFIG_GPIO_PCA953X=y +CONFIG_GPIO_PCA953X_IRQ=y +CONFIG_GPIO_PCF857X=y +CONFIG_HWMON=m +CONFIG_SENSORS_LM75=m +# CONFIG_X86_PKG_TEMP_THERMAL is not set +CONFIG_MFD_INTEL_QUARK_HSUART_DMA=y +CONFIG_CY8C9540A=m +CONFIG_MFD_PCA9685=m +CONFIG_INTEL_QRK_GIP=m +CONFIG_INTEL_QRK_GIP_TEST=m +CONFIG_MEDIA_SUPPORT=m +CONFIG_MEDIA_CAMERA_SUPPORT=y +CONFIG_MEDIA_USB_SUPPORT=y +CONFIG_USB_VIDEO_CLASS=m +# CONFIG_USB_GSPCA is not set +# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set +# CONFIG_VGA_ARB is not set +# CONFIG_VGA_CONSOLE is not set +CONFIG_SOUND=m +CONFIG_SND=m +CONFIG_SND_USB_AUDIO=m +CONFIG_USB=m +# CONFIG_USB_DEFAULT_PERSIST is not set +CONFIG_USB_EHCI_HCD=m +CONFIG_USB_OHCI_HCD=m +CONFIG_USB_UHCI_HCD=m +CONFIG_USB_ACM=m +CONFIG_USB_STORAGE=m +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_PL2303=m +CONFIG_USB_GADGET=m +CONFIG_USB_EG20T=m +CONFIG_USB_ZERO=m +CONFIG_USB_ETH=m +CONFIG_USB_MASS_STORAGE=m +CONFIG_USB_G_SERIAL=y +CONFIG_USB_G_ACM_MS=m +CONFIG_MMC=y +CONFIG_MMC_UNSAFE_RESUME=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_PCI=y +CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=m +CONFIG_RTC_CLASS=y +# CONFIG_RTC_SYSTOHC is not set +CONFIG_DMADEVICES=y +CONFIG_DW_DMAC=y +CONFIG_UIO=y +CONFIG_STAGING=y +CONFIG_INTEL_QRK_THERMAL=y +CONFIG_INTEL_QRK_AUDIO_CTRL=m +CONFIG_INTEL_QRK_J1708=m +CONFIG_INTEL_QRK_ESRAM=y +# CONFIG_IOMMU_SUPPORT is not set +CONFIG_IIO=y +CONFIG_IIO_BUFFER_CB=y +CONFIG_IIO_LIS331DLH_INTEL_QRK=y +CONFIG_IIO_ST_ACCEL_3AXIS=y +CONFIG_AD7298=m +CONFIG_ADC1x8S102=m +CONFIG_IIO_SYSFS_TRIGGER=m +CONFIG_IIO_HRTIMER_TRIGGER=m +CONFIG_PWM=y +CONFIG_DMI_SYSFS=y +CONFIG_EFI_VARS=m +# CONFIG_EFI_RUNTIME_MAP is not set +CONFIG_EXT2_FS=y +CONFIG_EXT3_FS=y +# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_EXT3_FS_SECURITY=y +CONFIG_EXT4_FS=y +CONFIG_VFAT_FS=y +CONFIG_PROC_KCORE=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_HUGETLBFS=y +# CONFIG_MISC_FILESYSTEMS is not set +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_850=y +CONFIG_NLS_ASCII=y +CONFIG_NLS_ISO8859_1=y +CONFIG_PRINTK_TIME=y +# CONFIG_ENABLE_WARN_DEPRECATED is not set +CONFIG_FRAME_WARN=2048 +# CONFIG_UNUSED_SYMBOLS is not set +CONFIG_HEADERS_CHECK=y +CONFIG_MAGIC_SYSRQ=y +CONFIG_DEBUG_MEMORY_INIT=y +CONFIG_DEBUG_STACKOVERFLOW=y +CONFIG_TIMER_STATS=y +CONFIG_LATENCYTOP=y +# CONFIG_FTRACE is not set +CONFIG_X86_PTDUMP=y +# CONFIG_DEBUG_RODATA_TEST is not set +CONFIG_DEBUG_SET_MODULE_RONX=y +# CONFIG_DOUBLEFAULT is not set +CONFIG_OPTIMIZE_INLINING=y +CONFIG_KEYS=y +CONFIG_KEYS_DEBUG_PROC_KEYS=y +CONFIG_SECURITY=y +CONFIG_SECURITY_NETWORK=y +# CONFIG_VIRTUALIZATION is not set +CONFIG_CRC_T10DIF=y diff --git a/board/intel/galileo/post-build.sh b/board/intel/galileo/post-build.sh new file mode 100755 index 00000000..2b34cb43 --- /dev/null +++ b/board/intel/galileo/post-build.sh @@ -0,0 +1,2 @@ +#!/bin/sh -e +cp board/intel/galileo/grub.cfg ${BINARIES_DIR}/efi-part/EFI/BOOT/grub.cfg diff --git a/board/intel/galileo/post-image.sh b/board/intel/galileo/post-image.sh new file mode 100755 index 00000000..f9aef0b1 --- /dev/null +++ b/board/intel/galileo/post-image.sh @@ -0,0 +1,13 @@ +#!/bin/sh -e + +GENIMAGE_CFG="board/intel/galileo/genimage.cfg" +GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp" + +rm -rf "${GENIMAGE_TMP}" + +genimage \ + --rootpath "${TARGET_DIR}" \ + --tmppath "${GENIMAGE_TMP}" \ + --inputpath "${BINARIES_DIR}" \ + --outputpath "${BINARIES_DIR}" \ + --config "${GENIMAGE_CFG}" diff --git a/board/intel/galileo/readme.txt b/board/intel/galileo/readme.txt new file mode 100644 index 00000000..7a3abd4f --- /dev/null +++ b/board/intel/galileo/readme.txt @@ -0,0 +1,52 @@ + +Intel Galileo Gen 1/2 + +Intro +============ + +These instructions apply to both the Intel Galileo Gen 1/2 development boards +based on the Intel Quark X1000. + +How to build +============ + +Apply the defconfig for the Intel Galileo Gen 1/2 + + $ make galileo_defconfig + +Add any additional packages required and build. + + $ make + +The build process will create a SD card image and place it in output/images. + + $ ls -lh output/images/sdcard.img + -rw-r--r--. 1 foo foo 11M Nov 17 16:19 output/images/sdcard.img + +Write the image to an mSD card, insert into the Galileo and power on. + + $ dd if=output/images/sdcard.img of=/dev/mmcblk0; sync + +Accessing the console +===================== + +During power-on the console will become available on the Galileo's ttyS1. This +may be accessed as follows. + + * Galileo Gen 1 + + http://clayskits.com/products/galileo-gen-1-serial-cable + + A USB to RS-232 to 3.5mm Jack cable is required. Connect to the 3.5mm + Jack next to the Ethernet Header. + + * Galileo Gen 2 + + http://www.ftdichip.com/Products/Cables/USBTTLSerial.htm + + A FTDI TTL-232R-3V3 cable may be used to connect to the FTDI header + next to the Ethernet connector on the Galileo Gen 2. + +The console should now be visible at 115200 baud. + + $ picocom -b 115200 /dev/ttyUSB0 diff --git a/board/intel/galileo/rootfs_overlay/etc/init.d/S09modload b/board/intel/galileo/rootfs_overlay/etc/init.d/S09modload new file mode 100755 index 00000000..359d607c --- /dev/null +++ b/board/intel/galileo/rootfs_overlay/etc/init.d/S09modload @@ -0,0 +1,33 @@ +#!/bin/sh +# + +load_drivers() +{ + while IFS= read -r line; do + modprobe $line + done < "/etc/modules-load.galileo/$1.conf" +} + +do_board() +{ + board=$(cat /sys/devices/virtual/dmi/id/board_name) + case "$board" in + *"GalileoGen2" ) + load_drivers "galileo_gen2" ;; + *"Galileo" ) + load_drivers "galileo" ;; + esac +} + +case "$1" in + start) + do_board + ;; + stop) + ;; + restart|reload) + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac diff --git a/board/intel/galileo/rootfs_overlay/etc/modules-load.galileo/galileo.conf b/board/intel/galileo/rootfs_overlay/etc/modules-load.galileo/galileo.conf new file mode 100644 index 00000000..b6582619 --- /dev/null +++ b/board/intel/galileo/rootfs_overlay/etc/modules-load.galileo/galileo.conf @@ -0,0 +1,3 @@ +intel_qrk_gip +cy8c9540a +ad7298 diff --git a/board/intel/galileo/rootfs_overlay/etc/modules-load.galileo/galileo_gen2.conf b/board/intel/galileo/rootfs_overlay/etc/modules-load.galileo/galileo_gen2.conf new file mode 100644 index 00000000..4f80a330 --- /dev/null +++ b/board/intel/galileo/rootfs_overlay/etc/modules-load.galileo/galileo_gen2.conf @@ -0,0 +1,4 @@ +intel_qrk_gip +gpio-pca953x +pca9685 +adc1x8s102 diff --git a/board/kontron/smarc-sal28/extlinux.conf b/board/kontron/smarc-sal28/extlinux.conf new file mode 100644 index 00000000..bf60bc37 --- /dev/null +++ b/board/kontron/smarc-sal28/extlinux.conf @@ -0,0 +1,4 @@ +label buildroot + kernel /boot/Image + devicetreedir /boot + append root=PARTUUID=%PARTUUID% rootwait diff --git a/board/kontron/smarc-sal28/genimage.cfg b/board/kontron/smarc-sal28/genimage.cfg new file mode 100644 index 00000000..f3fb77e0 --- /dev/null +++ b/board/kontron/smarc-sal28/genimage.cfg @@ -0,0 +1,23 @@ +image sdcard-emmc.img { + hdimage { + gpt = true + } + + partition rcw { + offset = 4k + in-partition-table = "no" + image = "rcw.bin" + } + + partition u-boot { + offset = 1M + in-partition-table = "no" + image = "u-boot.rom" + } + + partition rootfs { + offset = 2M + image = rootfs.ext4 + partition-uuid = %PARTUUID% + } +} diff --git a/board/kontron/smarc-sal28/post-build.sh b/board/kontron/smarc-sal28/post-build.sh new file mode 100755 index 00000000..bf8861f6 --- /dev/null +++ b/board/kontron/smarc-sal28/post-build.sh @@ -0,0 +1,7 @@ +#!/bin/sh +BOARD_DIR="$(dirname $0)" +PARTUUID="$($HOST_DIR/bin/uuidgen)" + +install -d "$TARGET_DIR/boot/extlinux/" +sed "s/%PARTUUID%/$PARTUUID/g" "$BOARD_DIR/extlinux.conf" > "$TARGET_DIR/boot/extlinux/extlinux.conf" +sed "s/%PARTUUID%/$PARTUUID/g" "$BOARD_DIR/genimage.cfg" > "$BINARIES_DIR/genimage.cfg" diff --git a/board/kontron/smarc-sal28/readme.txt b/board/kontron/smarc-sal28/readme.txt new file mode 100644 index 00000000..bdf2258b --- /dev/null +++ b/board/kontron/smarc-sal28/readme.txt @@ -0,0 +1,88 @@ +Kontron SMARC-sAL28 +=================== + +How to build it +=============== + +Configure Buildroot: + + $ make kontron_smarc_sal28_defconfig + +Change settings to fit your needs (optional): + + $ make menuconfig + +Compile everything and build the rootfs image: + + $ make + +Copying the image to a storage device +===================================== + +Buildroot builds an image which can be written to the internal eMMC +storage, a SD card or an USB thumb drive. You can use the following +command on your host: + + $ sudo dd if=output/images/sdcard-emmc.img of=/dev/sdx bs=1M + +Where /dev/sdx is the corresponding block device of your SD card or USB +thumb drive. To flash it on your internal eMMC use the following command on +the board: + + # dd if=sdcard-emmc.img of=/dev/mmcblk1 bs=1M + +Be sure you have not booted from the internal eMMC in this case! + +Booting the board +================= + +By default the bootloader will search for the first valid image, starting +with the internal eMMC. Consult the vendor documentation on how to use the +DIP switches to select specific boot devices. To use the bootloader +environment set the boot_targets correspondingly. E.g.: + + # setenv boot_targets usb0 + +To boot from an USB thumb drive. + +The device tree is loaded according to the filename in fdtfile. The +following command will set the default device tree, which works on almost +all variants (with less features of course): + + # setenv fdtfile freescale/fsl-ls1028a-kontron-sl28.dtb + +Set this to a device tree which fits your board variant. + +Connect your serial cable to SER1 and open your favorite terminal emulation +program (baudrate 115200, 8n1). E.g.: + + $ picocom -b 115200 /dev/ttyUSB0 + +You will get a warning reported by fdisk when you examine the SD card. +This is because the genimage.cfg file doesn't specify the SD card size +(as people will naturally have different sized cards), so the +secondary GPT header is placed after the rootfs rather than at the end +of the disk where it is expected to be. + +You will see something like this at boot time: + +[ 4.552797] GPT:Primary header thinks Alt. header is not at the end of the disk. +[ 4.560237] GPT:266272 != 7864319 +[ 4.563565] GPT:Alternate GPT header not at the end of the disk. +[ 4.569596] GPT:266272 != 7864319 +[ 4.572925] GPT: Use GNU Parted to correct GPT errors. + +Updating the bootloader +======================= + +Buildroot will automatically build the u-boot bootloader. The resulting +image is called u-boot.rom and you can find it in the images/ directory. + +To update the bootloader on the board you could either copy it to an +USB thumb drive or you could put it on a TFTP server. The following +example assumes you have the bootloader image copied to the root of +a thumb drive: + + # usb start + # load usb 0:1 $loadaddr u-boot.rom + # sf probe 0 && sf update $fileaddr 0x210000 $filesize diff --git a/board/kontron/smarc-sal28/rootfs_overlay/etc/udev/rules.d/70-enetc-networking.rules b/board/kontron/smarc-sal28/rootfs_overlay/etc/udev/rules.d/70-enetc-networking.rules new file mode 100644 index 00000000..8774bc55 --- /dev/null +++ b/board/kontron/smarc-sal28/rootfs_overlay/etc/udev/rules.d/70-enetc-networking.rules @@ -0,0 +1,8 @@ +ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.0", DRIVERS=="fsl_enetc", NAME="eno0" +ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.1", DRIVERS=="fsl_enetc", NAME="eno1" +ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.2", DRIVERS=="fsl_enetc", NAME="eno2" +ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.6", DRIVERS=="fsl_enetc", NAME="eno3" +ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:01.0", DRIVERS=="fsl_enetc_vf", NAME="eno0vf0" +ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:01.1", DRIVERS=="fsl_enetc_vf", NAME="eno0vf1" +ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:01.2", DRIVERS=="fsl_enetc_vf", NAME="eno1vf0" +ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:01.3", DRIVERS=="fsl_enetc_vf", NAME="eno1vf1" diff --git a/board/kontron/smarc-sal28/rootfs_overlay/etc/udev/rules.d/70-felix-networking.rules b/board/kontron/smarc-sal28/rootfs_overlay/etc/udev/rules.d/70-felix-networking.rules new file mode 100644 index 00000000..917c0244 --- /dev/null +++ b/board/kontron/smarc-sal28/rootfs_overlay/etc/udev/rules.d/70-felix-networking.rules @@ -0,0 +1,6 @@ +ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.5", DRIVERS=="mscc_felix", ATTR{phys_port_name}=="p0", NAME="swp0" +ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.5", DRIVERS=="mscc_felix", ATTR{phys_port_name}=="p1", NAME="swp1" +ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.5", DRIVERS=="mscc_felix", ATTR{phys_port_name}=="p2", NAME="swp2" +ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.5", DRIVERS=="mscc_felix", ATTR{phys_port_name}=="p3", NAME="swp3" +ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.5", DRIVERS=="mscc_felix", ATTR{phys_port_name}=="p4", NAME="swp4" +ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.5", DRIVERS=="mscc_felix", ATTR{phys_port_name}=="p5", NAME="swp5" diff --git a/board/kontron/smarc-sal28/rootfs_overlay/etc/udev/rules.d/71-smarc-networking.rules b/board/kontron/smarc-sal28/rootfs_overlay/etc/udev/rules.d/71-smarc-networking.rules new file mode 100644 index 00000000..8c946b05 --- /dev/null +++ b/board/kontron/smarc-sal28/rootfs_overlay/etc/udev/rules.d/71-smarc-networking.rules @@ -0,0 +1,19 @@ +# Map the GBE0 and GBE1 names from the SMARC standard to the network +# interfaces. This depends on the variant of the board. + +# get the variant compatible string +PROGRAM=="/bin/grep '^kontron,sl28-var[1-4]$' /sys/firmware/devicetree/base/compatible", ENV{sl28_compatible}="%c" + +# variant 1 +ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.1", DRIVERS=="fsl_enetc", ENV{sl28_compatible}=="kontron,sl28-var1", NAME="gbe0" + +# variant 2 +ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.5", DRIVERS=="mscc_felix", ATTR{phys_port_name}=="p0", ENV{sl28_compatible}=="kontron,sl28-var2", NAME="gbe0" +ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.5", DRIVERS=="mscc_felix", ATTR{phys_port_name}=="p1", ENV{sl28_compatible}=="kontron,sl28-var2", NAME="gbe1" + +# variant 3 +ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.0", DRIVERS=="fsl_enetc", ENV{sl28_compatible}=="kontron,sl28-var3", NAME="gbe0" + +# variant 4 +ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.0", DRIVERS=="fsl_enetc", ENV{sl28_compatible}=="kontron,sl28-var4", NAME="gbe0" +ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:00.1", DRIVERS=="fsl_enetc", ENV{sl28_compatible}=="kontron,sl28-var4", NAME="gbe1" diff --git a/board/lego/ev3/busybox.fragment b/board/lego/ev3/busybox.fragment new file mode 100644 index 00000000..901274d3 --- /dev/null +++ b/board/lego/ev3/busybox.fragment @@ -0,0 +1,3 @@ +CONFIG_BEEP=y +CONFIG_FEATURE_BEEP_FREQ=440 +CONFIG_FEATURE_BEEP_LENGTH_MS=250 diff --git a/board/lego/ev3/genimage.cfg b/board/lego/ev3/genimage.cfg new file mode 100644 index 00000000..14880e8f --- /dev/null +++ b/board/lego/ev3/genimage.cfg @@ -0,0 +1,65 @@ +# LEGO MINDSTORMS EV3 can boot from a 16MB flash or from a microSD card. +# The U-Boot bootloader from the flash is always used, even when booting +# from a microSD card. + +# The Flash image + +flash nor-16M-256 { + pebsize = 4096 + numpebs = 4096 + minimum-io-unit-size = 256 +} + +image flash.bin { + flash { + } + flashtype = "nor-16M-256" + partition uboot { + image = "u-boot.bin" + size = 256K + } + partition dtb { + image = "da850-lego-ev3.dtb" + size = 64K + offset = 0x40000 + } + partition uimage { + image = "uImage" + size = 4M + offset = 0x50000 + } + partition rootfs { + image = "rootfs.squashfs" + size = 10M + offset = 0x450000 + } +} + +# The SD card image + +image boot.vfat { + vfat { + file uImage { + image = "uImage" + } + file da850-lego-ev3.dtb { + image = "da850-lego-ev3.dtb" + } + } + size = 16M +} + +image sdcard.img { + hdimage { + } + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 4M + } + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext2" + } +} diff --git a/board/lego/ev3/linux.fragment b/board/lego/ev3/linux.fragment new file mode 100644 index 00000000..79efd27d --- /dev/null +++ b/board/lego/ev3/linux.fragment @@ -0,0 +1,68 @@ +CONFIG_ARM_APPENDED_DTB=n +CONFIG_ARCH_DAVINCI_DM644x=n +CONFIG_ARCH_DAVINCI_DM355=n +CONFIG_ARCH_DAVINCI_DM646x=n +CONFIG_ARCH_DAVINCI_DA830=n +CONFIG_ARCH_DAVINCI_DM365=n +CONFIG_MACH_SFFSDR=n +CONFIG_MACH_NEUROS_OSD2=n +CONFIG_MACH_DM355_LEOPARD=n +CONFIG_MACH_MITYOMAPL138=n +CONFIG_MACH_OMAPL138_HAWKBOARD=n +CONFIG_MACH_DAVINCI_DA850_EVM=n +CONFIG_ATA=n +CONFIG_MTD=y +CONFIG_MTD_BLOCK=y +CONFIG_MTD_M25P80=y +CONFIG_MTD_SPI_NOR=y +CONFIG_MTD_UBI=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=1 +CONFIG_BLK_DEV_RAM_SIZE=32768 +CONFIG_INPUT_EVDEV=y +CONFIG_INPUT_PWM_BEEPER=y +CONFIG_SPI_DAVINCI=y +CONFIG_PINCTRL_DA850_PUPD=y +CONFIG_V4L_PLATFORM_DRIVERS=n +CONFIG_SOUND=n +CONFIG_SND=n +CONFIG_SND_SOC=n +CONFIG_SND_EDMA_SOC=n +CONFIG_SND_DAVINCI_SOC_MCASP=n +CONFIG_SND_SOC_TLV320AIC3X=n +CONFIG_SND_SIMPLE_CARD=n +CONFIG_DAVINCI_WATCHDOG=y +CONFIG_USB=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_DAVINCI=y +CONFIG_USB_MUSB_HDRC=y +CONFIG_USB_MUSB_GADGET=y +CONFIG_USB_MUSB_DA8XX=y +CONFIG_NOP_USB_XCEIV=y +CONFIG_USB_GADGET=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_TRIGGER_MTD=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_CPU=y +CONFIG_LEDS_TRIGGER_DEFAULT_ON=y +CONFIG_RTC_DRV_OMAP=y +CONFIG_IIO=y +CONFIG_TI_ADS7950=y +CONFIG_PWM_TIECAP=y +CONFIG_PWM_TIEHRPWM=y +CONFIG_SQUASHFS=y +CONFIG_SQUASHFS_LZ4=y +CONFIG_SQUASHFS_LZO=y +CONFIG_SQUASHFS_XZ=y +CONFIG_DRM=y +CONFIG_DRM_TILCDC=n +CONFIG_DRM_DUMB_VGA_DAC=n +CONFIG_DRM_TINYDRM=y +CONFIG_TINYDRM_ST7586=y +CONFIG_FB_DA8XX=n +CONFIG_COMMON_CLK_PWM=y +CONFIG_BT=y +CONFIG_BT_HS=n +CONFIG_BT_LE=n +CONFIG_RFKILL=y diff --git a/board/lego/ev3/post-image.sh b/board/lego/ev3/post-image.sh new file mode 100755 index 00000000..81626dc3 --- /dev/null +++ b/board/lego/ev3/post-image.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" +GENIMAGE_CFG="${BOARD_DIR}/genimage.cfg" +GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp" + +rm -rf "${GENIMAGE_TMP}" + +genimage \ + --rootpath "${TARGET_DIR}" \ + --tmppath "${GENIMAGE_TMP}" \ + --inputpath "${BINARIES_DIR}" \ + --outputpath "${BINARIES_DIR}" \ + --config "${GENIMAGE_CFG}" diff --git a/board/lego/ev3/readme.txt b/board/lego/ev3/readme.txt new file mode 100644 index 00000000..648bca1e --- /dev/null +++ b/board/lego/ev3/readme.txt @@ -0,0 +1,99 @@ +Lego Mindstorms EV3 + +Intro +===== + +This is the buildroot basic board support for the Lego Mindstorms EV3 +programmable brick. + +The Lego Mindstorms EV3 brick comprises a Texas Instruments AM1808 SoC, with +an ARM 926EJ-S main processor running at 300 MHz. +See: +- https://en.wikipedia.org/wiki/Lego_Mindstorms_EV3 +- http://www.lego.com/en-us/mindstorms/products/ev3/31313-mindstorms-ev3/ +- http://www.ti.com/product/am1808 + +How it works +============ + +Boot process : +-------------- + +The EV3 boots from an EEPROM. This loads whatever is on the built-in 16MB flash +(usually U-Boot) and runs it. The U-Boot from the official LEGO firmware and +mainline U-Boot will attempt to boot a Linux kernel from the external µSD card. +It will try to load a uImage (and optional boot.scr) from the first µSD card +partition, which must be formatted with a FAT filesystem. If no µSD is found or +it does not contain a uImage file, then the EV3 will boot the uImage from the +built-in 16MB flash. + +How to build it +=============== + +Configure Buildroot +------------------- + +The lego_ev3_defconfig configuration provides basic support to boot on the Lego +Mindstorms EV3 programmable brick: + + $ make lego_ev3_defconfig + +Build everything +---------------- + +Note: you will need to have access to the network, since Buildroot will +download the packages' sources. + + $ make + +Result of the build +------------------- + +After building, you should obtain this tree: + + output/images/ + ├── boot.vfat + ├── flash.bin + ├── rootfs.ext2 + ├── rootfs.ext3 -> rootfs.ext2 + ├── rootfs.squashfs + ├── sdcard.img + ├── u-boot.bin + ├── uImage -> uImage.da850-lego-ev3 + └── uImage.da850-lego-ev3 + +Installation +============ + +You can use either flash.bin or the sdcard.img. To load flash.bin, use the +official Lego Mindstorms EV3 programming software firmware update tool to load +the image. To use sdcard.img, use a disk writing tool such as Etcher or dd to +write the image to the µSD card. + +NOTE: The sdcard.img created by lego_ev3_defconfig won't boot if the official +LEGO firmware is installed on the EV3 (it has an old version of U-Boot that +doesn't know about device tree). You must either set the kernel configuration +option to append the device tree to the kernel or you can create a boot.scr +that chainloads a newer U-Boot or you can install a newer U-Boot in the flash +memory (just flashing u-boot.bin is enough). + +Finish +====== + +To have a serial console, you will need a proper USB to Lego serial port +adapter plugged into the EV3 sensors port 1. +See: +- http://botbench.com/blog/2013/08/15/ev3-creating-console-cable/ +- http://botbench.com/blog/2013/08/05/mindsensors-ev3-usb-console-adapter/ + +The serial port config to use is 115200/8-N-1. + +Bluetooth +========= + +To enable Bluetooth: + + # modprobe hci_uart + # /usr/libexec/bluetooth/bluetoothd & + # bluetoothctl + [bluetooth]# power on diff --git a/board/lemaker/bananapro/boot.cmd b/board/lemaker/bananapro/boot.cmd new file mode 100644 index 00000000..439f5b12 --- /dev/null +++ b/board/lemaker/bananapro/boot.cmd @@ -0,0 +1,5 @@ +setenv fdt_high ffffffff +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait +fatload mmc 0 $kernel_addr_r zImage +fatload mmc 0 $fdt_addr_r sun7i-a20-bananapro.dtb +bootz $kernel_addr_r - $fdt_addr_r diff --git a/board/lemaker/bananapro/genimage.cfg b/board/lemaker/bananapro/genimage.cfg new file mode 100644 index 00000000..190a4b1f --- /dev/null +++ b/board/lemaker/bananapro/genimage.cfg @@ -0,0 +1,37 @@ +# Minimal SD card image for the Banana Pro +# Based in the Orange Pi genimage.cfg + +image boot.vfat { + vfat { + files = { + "zImage", + "sun7i-a20-bananapro.dtb", + "boot.scr" + } + } + size = 10M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/lemaker/bananapro/linux-wifi.fragment b/board/lemaker/bananapro/linux-wifi.fragment new file mode 100644 index 00000000..f4ede39f --- /dev/null +++ b/board/lemaker/bananapro/linux-wifi.fragment @@ -0,0 +1,24 @@ +# Networking support +CONFIG_WIRELESS=y +CONFIG_CFG80211=y +CONFIG_CFG80211_WEXT=y +CONFIG_RFKILL=y + +# Network device support +CONFIG_WLAN=y +CONFIG_WLAN_VENDOR_BROADCOM=y +CONFIG_BRCMFMAC=m +# CONFIG_WLAN_VENDOR_ADMTEK is not set +# CONFIG_WLAN_VENDOR_ATH is not set +# CONFIG_WLAN_VENDOR_ATMEL is not set +# CONFIG_WLAN_VENDOR_CISCO is not set +# CONFIG_WLAN_VENDOR_INTEL is not set +# CONFIG_WLAN_VENDOR_INTERSIL is not set +# CONFIG_WLAN_VENDOR_MARVELL is not set +# CONFIG_WLAN_VENDOR_MEDIATEK is not set +# CONFIG_WLAN_VENDOR_RALINK is not set +# CONFIG_WLAN_VENDOR_REALTEK is not set +# CONFIG_WLAN_VENDOR_RSI is not set +# CONFIG_WLAN_VENDOR_ST is not set +# CONFIG_WLAN_VENDOR_TI is not set +# CONFIG_WLAN_VENDOR_ZYDAS is not set diff --git a/board/lemaker/bananapro/patches/linux/0001-arch-arm-boot-dts-sun7i-a20-bananapro.dts-disable-00.patch b/board/lemaker/bananapro/patches/linux/0001-arch-arm-boot-dts-sun7i-a20-bananapro.dts-disable-00.patch new file mode 100644 index 00000000..c8e8c037 --- /dev/null +++ b/board/lemaker/bananapro/patches/linux/0001-arch-arm-boot-dts-sun7i-a20-bananapro.dts-disable-00.patch @@ -0,0 +1,44 @@ +From 896e82ab14e7e4e361ffa7c81def787907c1bf4c Mon Sep 17 00:00:00 2001 +From: Bartosz Bilas +Date: Sun, 19 May 2019 21:04:35 +0200 +Subject: [PATCH] arch/arm/boot/dts/sun7i-a20-bananapro.dts: disable 00B + IRQ for brcm wifi module + + BugLink: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=908438 + +Signed-off-by: Hans de Goede +Signed-off-by: Bartosz Bilas +--- + arch/arm/boot/dts/sun7i-a20-bananapro.dts | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) + +diff --git a/arch/arm/boot/dts/sun7i-a20-bananapro.dts b/arch/arm/boot/dts/sun7i-a20-bananapro.dts +index 0176e9de0..93b3340f5 100644 +--- a/arch/arm/boot/dts/sun7i-a20-bananapro.dts ++++ b/arch/arm/boot/dts/sun7i-a20-bananapro.dts +@@ -160,9 +160,19 @@ + brcmf: wifi@1 { + reg = <1>; + compatible = "brcm,bcm4329-fmac"; +- interrupt-parent = <&pio>; +- interrupts = <7 15 IRQ_TYPE_LEVEL_LOW>; +- interrupt-names = "host-wake"; ++ /* ++ * OOB interrupt support is broken ATM, often the first irq ++ * does not get seen resulting in the drv probe failing with: ++ * ++ * brcmfmac: brcmf_sdio_bus_rxctl: resumed on timeout ++ * brcmfmac: brcmf_bus_started: failed: -110 ++ * brcmfmac: brcmf_attach: dongle is not responding: err=-110 ++ * brcmfmac: brcmf_sdio_firmware_callback: brcmf_attach failed ++ * ++ * interrupt-parent = <&pio>; ++ * interrupts = <7 15 IRQ_TYPE_LEVEL_LOW>; ++ * interrupt-names = "host-wake"; ++ */ + }; + }; + +-- +2.21.0 + diff --git a/board/lemaker/bananapro/post-build.sh b/board/lemaker/bananapro/post-build.sh new file mode 100755 index 00000000..a335310d --- /dev/null +++ b/board/lemaker/bananapro/post-build.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +# Remove all but the brcmfmac43362 firmware files +find $TARGET_DIR/lib/firmware/brcm -type f -not -name "brcmfmac43362*" -delete + +BOARD_DIR="$(dirname $0)" +MKIMAGE=$HOST_DIR/bin/mkimage +BOOT_CMD=$BOARD_DIR/boot.cmd +BOOT_CMD_H=$BINARIES_DIR/boot.scr + +# U-Boot script +$MKIMAGE -C none -A arm -T script -d $BOOT_CMD $BOOT_CMD_H diff --git a/board/lemaker/bananapro/post-image.sh b/board/lemaker/bananapro/post-image.sh new file mode 100755 index 00000000..9cca1b17 --- /dev/null +++ b/board/lemaker/bananapro/post-image.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" +GENIMAGE_CFG="${BOARD_DIR}/genimage.cfg" +GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp" + +rm -rf "${GENIMAGE_TMP}" + +genimage \ + --rootpath "${TARGET_DIR}" \ + --tmppath "${GENIMAGE_TMP}" \ + --inputpath "${BINARIES_DIR}" \ + --outputpath "${BINARIES_DIR}" \ + --config "${GENIMAGE_CFG}" + +exit $? diff --git a/board/lemaker/bananapro/readme.txt b/board/lemaker/bananapro/readme.txt new file mode 100644 index 00000000..27b922e2 --- /dev/null +++ b/board/lemaker/bananapro/readme.txt @@ -0,0 +1,62 @@ +Banana Pro + +Intro +===== + +This default configuration will allow you to start experimenting with the +Buildroot environment for the Banana Pro. With the current configuration +it will bring-up the board, and allow access through the serial console. + +How to build it +=============== + +Configure Buildroot: + + $ make bananapro_defconfig + +Compile everything and build the SD card image: + + $ make + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ dd if=output/images/sdcard.img of=/dev/sdX + +Notes: + - replace 'sdX' with the actual device with your micro SD card + - you may need to be root to do that (use 'sudo') + +Insert the micro SD card in your Banana Pro and power it up. The console +is on the debug TTL UART, 115200 8N1. + +Ethernet +========== + + # udhcpc -i eth0 + +Wifi +========== + + # wpa_passphrase YOUR_SSID >> /etc/wpa_supplicant.conf + (enter the wifi password and press enter) + # wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -B + # udhcpc -i wlan0 + +Note: + - replace 'YOUR_SSID' with the actual SSID from your access point + +Audio +========== + +Connect a headphone to the 3.5mm jack (TRRS). Note, that the Banana Pro +has an on-board microphone, too. + + # amixer cset name='Power Amplifier DAC Playback Switch' on + # amixer cset name='Power Amplifier Mute Switch' on + # amixer cset name='Power Amplifier Volume' 42 diff --git a/board/lemaker/bananapro/rootfs_overlay/lib/firmware/brcm/brcmfmac43362-sdio.lemaker,bananapro.txt b/board/lemaker/bananapro/rootfs_overlay/lib/firmware/brcm/brcmfmac43362-sdio.lemaker,bananapro.txt new file mode 120000 index 00000000..93947975 --- /dev/null +++ b/board/lemaker/bananapro/rootfs_overlay/lib/firmware/brcm/brcmfmac43362-sdio.lemaker,bananapro.txt @@ -0,0 +1 @@ +brcmfmac43362-sdio.txt \ No newline at end of file diff --git a/board/lemaker/bananapro/rootfs_overlay/lib/firmware/brcm/brcmfmac43362-sdio.txt b/board/lemaker/bananapro/rootfs_overlay/lib/firmware/brcm/brcmfmac43362-sdio.txt new file mode 100644 index 00000000..14a554fd --- /dev/null +++ b/board/lemaker/bananapro/rootfs_overlay/lib/firmware/brcm/brcmfmac43362-sdio.txt @@ -0,0 +1,56 @@ +#AP6210_NVRAM_V1.2_03192013 +manfid=0x2d0 +prodid=0x492 +vendid=0x14e4 +devid=0x4343 +boardtype=0x0598 + +# Board Revision is P307, same nvram file can be used for P304, P305, P306 and P307 as the tssi pa params used are same +#Please force the automatic RX PER data to the respective board directory if not using P307 board, for e.g. for P305 boards force the data into the following directory /projects/BCM43362/a1_labdata/boardtests/results/sdg_rev0305 +boardrev=0x1307 +boardnum=777 +xtalfreq=26000 +boardflags=0x80201 +boardflags2=0x80 +sromrev=3 +wl0id=0x431b +macaddr=00:90:4c:07:71:12 +aa2g=1 +ag0=2 +maxp2ga0=74 +cck2gpo=0x2222 +ofdm2gpo=0x44444444 +mcs2gpo0=0x6666 +mcs2gpo1=0x6666 +pa0maxpwr=56 + +#P207 PA params +#pa0b0=5447 +#pa0b1=-658 +#pa0b2=-175 + +#Same PA params for P304,P305, P306, P307 + +pa0b0=5447 +pa0b1=-607 +pa0b2=-160 +pa0itssit=62 +pa1itssit=62 + + +cckPwrOffset=5 +ccode=0 +rssismf2g=0xa +rssismc2g=0x3 +rssisav2g=0x7 +triso2g=0 +noise_cal_enable_2g=0 +noise_cal_po_2g=0 +swctrlmap_2g=0x04040404,0x02020202,0x02020202,0x010101,0x1ff +temp_add=29767 +temp_mult=425 + +btc_flags=0x6 +btc_params0=5000 +btc_params1=1000 +btc_params6=63 diff --git a/board/librecomputer/lafrite/genimage.cfg b/board/librecomputer/lafrite/genimage.cfg new file mode 100644 index 00000000..212f8295 --- /dev/null +++ b/board/librecomputer/lafrite/genimage.cfg @@ -0,0 +1,10 @@ +image usb.img { + hdimage { + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/librecomputer/lafrite/overlay/extlinux/extlinux.conf b/board/librecomputer/lafrite/overlay/extlinux/extlinux.conf new file mode 100644 index 00000000..60aa9d6e --- /dev/null +++ b/board/librecomputer/lafrite/overlay/extlinux/extlinux.conf @@ -0,0 +1,4 @@ +label linux + kernel /boot/Image + devicetree /boot/meson-gxl-s805x-libretech-ac.dtb + append console=ttyAML0,115200 earlyprintk root=/dev/sda1 rootwait diff --git a/board/librecomputer/lafrite/readme.txt b/board/librecomputer/lafrite/readme.txt new file mode 100644 index 00000000..c439c5e9 --- /dev/null +++ b/board/librecomputer/lafrite/readme.txt @@ -0,0 +1,34 @@ +Intro +===== + +Libre Computer "La Frite" is a low cost SBC based around an Amlogic +s805x SoC (quad A53), 512MB/1GB DDR4 and a 16MB SPI NOR flash: + +https://libre.computer/products/boards/aml-s805x-ac/ + +How to build it +=============== + +Configure Buildroot: + + $ make lafrite_defconfig + +Compile everything and build the USB flash drive image: + + $ make + +How to write the USB flash drive image +====================================== + +Once the build process is finished you will have an image called "usb.img" +in the output/images/ directory. + +Copy the bootable "usb.img" onto a USB flash drive with "dd": + + $ sudo dd if=output/images/usb.img of=/dev/sdX + +How to boot +=========== + +Insert flash drive to the USB connector furthest away from the IR +receiver and power up board. The system will boot automatically. diff --git a/board/licheepi/boot.cmd b/board/licheepi/boot.cmd new file mode 100644 index 00000000..383b3473 --- /dev/null +++ b/board/licheepi/boot.cmd @@ -0,0 +1,4 @@ +setenv bootargs console=ttyS0,115200 panic=5 console=tty0 rootwait root=/dev/mmcblk0p2 earlyprintk rw +load mmc 0:1 0x41000000 zImage +load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-dock.dtb +bootz 0x41000000 - 0x41800000 diff --git a/board/licheepi/genimage.cfg b/board/licheepi/genimage.cfg new file mode 100644 index 00000000..0d8540f2 --- /dev/null +++ b/board/licheepi/genimage.cfg @@ -0,0 +1,35 @@ +image boot.vfat { + vfat { + files = { + "zImage", + "sun8i-v3s-licheepi-zero-dock.dtb", + "sun8i-v3s-licheepi-zero.dtb", + "boot.scr" + } + } + size = 8M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 516096 # 512KB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 0 + } +} diff --git a/board/licheepi/readme.txt b/board/licheepi/readme.txt new file mode 100644 index 00000000..6b8bf94b --- /dev/null +++ b/board/licheepi/readme.txt @@ -0,0 +1,62 @@ +Intro +===== + +This directory contains a buildroot configuration for building a +LicheePi Zero. + +How to build it +=============== + +Configure Buildroot +------------------- + + $ make licheepi_zero_defconfig + +Build the rootfs +---------------- + +Note: you will need to have access to the network, since Buildroot +will download the packages' sources. + +You may now build your rootfs with: + + $ make + +(This may take a while, consider getting yourself a coffee ;-) ) + +Result of the build +------------------- + +After building, you should obtain this tree: + + output/images/ + +-- boot.scr + +-- boot.vfat + +-- rootfs.ext2 + +-- rootfs.ext4 -> rootfs.ext2 + +-- rootfs.tar + +-- sdcard.img + +-- sun8i-v3s-licheepi-zero-dock.dtb + +-- sun8i-v3s-licheepi-zero.dtb + +-- u-boot.bin + +-- u-boot-sunxi-with-spl.bin + `-- zImage + +How to write the SD card +======================== + +Once the build process is finished you will have an image called +"sdcard.img" in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + +Alternatively, you can use the Etcher graphical tool to burn the image +to the SD card safely and on any platform: + +https://etcher.io/ + +Once the SD card is burned, insert it into your LicheePi Zero board, +and power it up. Your new system should come up now and start a +console on the UART0 serial port. diff --git a/board/linksprite/pcduino/boot.cmd b/board/linksprite/pcduino/boot.cmd new file mode 100644 index 00000000..0db83635 --- /dev/null +++ b/board/linksprite/pcduino/boot.cmd @@ -0,0 +1,8 @@ +setenv fdt_high ffffffff + +setenv bootargs console=ttyS0,115200 console=tty1 earlyprintk root=/dev/mmcblk0p2 rootwait panic=10 ${extra} + +fatload mmc 0 $kernel_addr_r zImage +fatload mmc 0 $fdt_addr_r sun4i-a10-pcduino.dtb + +bootz $kernel_addr_r - $fdt_addr_r diff --git a/board/linksprite/pcduino/genimage.cfg b/board/linksprite/pcduino/genimage.cfg new file mode 100644 index 00000000..9cbc383d --- /dev/null +++ b/board/linksprite/pcduino/genimage.cfg @@ -0,0 +1,42 @@ +# +# Minimal SD card image for the pcDuino +# + +image boot.vfat { + vfat { + files = { + "zImage", + "sun4i-a10-pcduino.dtb", + "boot.scr" + } + } + size = 16M +} + +# +# Note: u-boot environment is stored between u-boot and boot partitions +# + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 1M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/linksprite/pcduino/linux-extras.config b/board/linksprite/pcduino/linux-extras.config new file mode 100644 index 00000000..670f83fa --- /dev/null +++ b/board/linksprite/pcduino/linux-extras.config @@ -0,0 +1,16 @@ +# spidev +CONFIG_SPI_SPIDEV=y + +# wireless core +CONFIG_CFG80211=m +CONFIG_CFG80211_WEXT=y +CONFIG_MAC80211=m + +# wireless drivers +CONFIG_WLAN=y +CONFIG_RTL_CARDS=m +CONFIG_RTL8192CU=m +CONFIG_RTLWIFI=m +CONFIG_RTLWIFI_USB=m +CONFIG_RTLWIFI_DEBUG=y +CONFIG_RTL8192C_COMMON=m diff --git a/board/linksprite/pcduino/post-build.sh b/board/linksprite/pcduino/post-build.sh new file mode 100755 index 00000000..e1e18776 --- /dev/null +++ b/board/linksprite/pcduino/post-build.sh @@ -0,0 +1,11 @@ +#!/bin/sh +# post-build.sh for pcDuino taken from OrangePi post-build.sh +# 2013, Carlo Caione + +BOARD_DIR="$(dirname $0)" +MKIMAGE=$HOST_DIR/bin/mkimage +BOOT_CMD=$BOARD_DIR/boot.cmd +BOOT_CMD_H=$BINARIES_DIR/boot.scr + +# U-Boot script +$MKIMAGE -C none -A arm -T script -d $BOOT_CMD $BOOT_CMD_H diff --git a/board/linksprite/pcduino/post-image.sh b/board/linksprite/pcduino/post-image.sh new file mode 100755 index 00000000..c82b189f --- /dev/null +++ b/board/linksprite/pcduino/post-image.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" +GENIMAGE_CFG="${BOARD_DIR}/genimage.cfg" +GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp" + +rm -rf "${GENIMAGE_TMP}" + +genimage \ + --rootpath "${TARGET_DIR}" \ + --tmppath "${GENIMAGE_TMP}" \ + --inputpath "${BINARIES_DIR}" \ + --outputpath "${BINARIES_DIR}" \ + --config "${GENIMAGE_CFG}" + +exit $? diff --git a/board/linksprite/pcduino/readme.txt b/board/linksprite/pcduino/readme.txt new file mode 100644 index 00000000..08f380fb --- /dev/null +++ b/board/linksprite/pcduino/readme.txt @@ -0,0 +1,42 @@ +pcDuino v1 boards (http://www.linksprite.com/linksprite-pcduino) + +Intro +===== + +This default configuration will allow you to start experimenting +with the buildroot environment for the LinkSprite pcDuino v1 board +including its flavors pcDuino-Lite and pcDuino-Lite-WiFi. With the +current configuration it will bring-up the board and allow access +through the serial console as well as ethernet and wireless +network interfaces. + +How to build it +=============== + +Configure Buildroot: + + $ make linksprite_pcduino_defconfig + +Modify configuration if needed, e.g. add more packages to target: + + $ make menuconfig + +Compile everything and build the SD card image: + + $ make + +How to write the SD card +======================== + +Once the build process is finished you will have an image +called "sdcard.img" in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + +How to boot new image +===================== + +Insert SD card and reset the board. By default pcDuino board +boots from SD card. diff --git a/board/loongson/README.md b/board/loongson/README.md new file mode 100644 index 00000000..4a41b674 --- /dev/null +++ b/board/loongson/README.md @@ -0,0 +1,84 @@ +下面将是广东龙芯针对buildroot做出的修改而修订的README内容 + +此份buildroot源码包括以下**功能的修改/新增:** + +* 添加广东龙芯系列板卡的文件系统编译配置 +* 添加对LoongArch64的架构的支持 +* 添加部分源码包的编译(minigui环境支持、lvgl环境支持等) +* 添加龙芯嵌入式测试软件的包 +* 添加龙芯SSD下的文件系统部署所用到的ramdisk编译支持 + +本源码需要在x86上的linux环境下编译 +推荐编译条件为: + +| 环境 | 推荐 | +| ------------- | ---------------- | +| 操作系统 | ubuntu 18.04 | +| 交叉编译工具链 | loongarch64: toolchain-loongarch64-linux-gnu-gcc8-host-x86_64-2022-07-18
mips64el:mips64el-linux-gcc-8.x
部署于/opt下,可从资料包中获取 | +| 硬盘容量 | 需要预留**20G或以上的空间**给buildroot存放编译中间文件 | +| 运行机器 | x86 机器,建议为多核,推荐在服务器上编译,个人电脑编译时间较长且占用大量空间 | + +关于依赖环境,可以参考下面的命令进行安装,如果还是存在不能编译的情况,还请按照实际情况进行依赖环境的准备。 +``` +sudo apt -y install make git gcc g++ bison flex libncurses5-dev libssl-dev libelf-dev +sudo apt -y install cmake tree build-essential tcl-dev automake libtool +``` + +通过上述的官方说明可以清楚编译的流程是: + +1. 生效要编译的配置(make XXX_defconfig) +2. make -j24 (-j24 指调用多少cpu核进行编译,根据实际的cpu核数而定,也可以只是make) +3. 前往./output/image 文件夹得到产出的文件系统进行文件 + +编译产出的文件为文件系统的镜像文件 +可用的是rootfs.tar.gz 和 rootfs.ubi + +| 文件 | 说明 | +| ------------- | ---------------- | +| rootfs.tar.gz | ssd要用的文件系统镜像 | +| rootfs.ubi | nand要用的文件系统镜像,根据龙芯板卡的烧录规则,还需要**改名为rootfs-ubifs-ze.img** | + +关于如何定制buildroot的内容本处不再赘述,可以查看用户手册的 **12.2.1.1. buildroot简述** 一节,当然还推荐直接查阅官方手册。 + +编译产出的系统分为以下几种 + +| 系统类型 | 说明 | +| --------------- | --------------------- | +| 全量系统 | 和用户手册中说的busybox系统是一个概念,集成了相当部分的软件包 | +| 小型系统 | 只保留部分软件包,例如可用于外围电路测试软件,网络测试软件的系统,可用于验证板卡功能 | +| ramdisk | 和广东龙芯板卡相关的SSD中系统的安装引导系统的构建
本质是一个busybox系统启动时运行安装系统的程序 | +| 快速启动系统 | 和全量系统一致,但是改为busybox启动,同时第一次启动之后的启动都会不启动其他服务
为了加快从内核到文件系统的速度
实测在ls2k500,如果busybox启动下,全部服务启动则需要4s,禁用服务之后,只需要1.8s
如果想恢复服务,那么请把/root/init.d-bak里面的内容复制到/etc/init.d即可 | + + +全量系统的编译配置 + +| 板卡配置名 | 对应适用板卡 | +| -------------------------------------------- | --------------------- | +| loongson2k1000_jinlong_defconfig | ls2k1000mips版本的金龙板卡
或者其他ls2k1000mips版本的板卡
通用配置(以后可能改名) | +| loongson2k1000la_jinlong_defconfig | ls2k1000LA版本的金龙板卡
或者其他ls2k1000LA版本的板卡
通用配置(以后可能改名) | +| loongson2k500_defconfig | ls2k500的板卡
通用配置(串口2作为调试串口) | +| loongson2k500_mini_dp_defconfig | ls2k500的mini开发板卡
通用配置(串口2作为调试串口) | + +小型系统的编译配置 + +| 板卡配置名 | 对应适用板卡 | +| -------------------------------------------- | --------------------- | +| loongson2k1000_jinlong_mini_defconfig | ls2k1000mips版本的金龙板卡
或者其他ls2k1000mips版本的板卡
小型系统通用配置(以后可能改名) | +| loongson2k1000la_jinlong_mini_defconfig | ls2k1000LA版本的金龙板卡
或者其他ls2k1000LA版本的板卡
小型系统通用配置(以后可能改名) | +| loongson2k500_mini_defconfig | ls2k500的板卡
小型系统通用配置(串口2作为调试串口) | +| loongson2k500_mini_dp_mini_defconfig | ls2k500的mini开发板卡
小型系统通用配置(串口2作为调试串口) | + +ramdisk的编译配置 + +| 板卡配置名 | 对应适用板卡 | +| -------------------------------------------- | --------------------- | +| loongson2k1000la_jinlong_ramdisk_defconfig | ls2k1000LA版本的金龙板卡
或者其他ls2k1000LA版本的板卡
ramdisk编译通用配置(以后可能改名) | +| loongson2k500_ramdisk_defconfig | ls2k500的板卡
ramdisk编译通用配置(串口2作为调试串口) | + +快速启动系统的编译配置 + +| 板卡配置名 | 对应适用板卡 | +| -------------------------------------------- | --------------------- | +| loongson2k1000la_jinlong_fastboot_defconfig | ls2k1000LA版本的金龙板卡
或者其他ls2k1000LA版本的板卡
快速启动系统通用配置(以后可能改名) | +| loongson2k500_fastboot_defconfig | ls2k500的板卡
快速启动系统通用配置(串口2作为调试串口) | +| loongson2k500_mini_dp_fastboot_defconfig | ls2k500的mini开发板卡
快速启动系统通用配置(串口2作为调试串口) | diff --git a/board/loongson/ls1b20-huolong/readme.txt b/board/loongson/ls1b20-huolong/readme.txt new file mode 100644 index 00000000..c1002d14 --- /dev/null +++ b/board/loongson/ls1b20-huolong/readme.txt @@ -0,0 +1,26 @@ +HuoLong + +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the HuoLong. With the current configuration +it will bring-up the board, and allow access through the serial console. + +How to build it +=============== + +Configure Buildroot: + + $ make ls1b20_huolong_volp_defconfig + +Compile everything and build the system: + + $ make + +How to install system +======================== + +you can use {buildroot}/output/images/rootfs.ubi +to install in nand by uboot function +remember rootfs.ubi rename rootfs-ubifs-ze.img diff --git a/board/loongson/ls1b20-huolong/rootfs_4_7_gcc_overlay/boot/.gitignore b/board/loongson/ls1b20-huolong/rootfs_4_7_gcc_overlay/boot/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/board/loongson/ls1b20-huolong/rootfs_4_7_gcc_overlay/etc/profile b/board/loongson/ls1b20-huolong/rootfs_4_7_gcc_overlay/etc/profile new file mode 100644 index 00000000..d4d31662 --- /dev/null +++ b/board/loongson/ls1b20-huolong/rootfs_4_7_gcc_overlay/etc/profile @@ -0,0 +1,19 @@ +export PATH="/bin:/sbin:/usr/bin:/usr/sbin" + +if [ "$PS1" ]; then + if [ "`id -u`" -eq 0 ]; then + export PS1='[\u@\h \W]# ' + else + export PS1='$ ' + fi +fi + +export EDITOR='/bin/vi' + +# Source configuration files from /etc/profile.d +for i in /etc/profile.d/*.sh ; do + if [ -r "$i" ]; then + . $i + fi +done +unset i diff --git a/board/loongson/ls1b20-huolong/rootfs_volp_overlay/boot/.gitignore b/board/loongson/ls1b20-huolong/rootfs_volp_overlay/boot/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/board/loongson/ls1b20-huolong/rootfs_volp_overlay/etc/profile b/board/loongson/ls1b20-huolong/rootfs_volp_overlay/etc/profile new file mode 100644 index 00000000..d4d31662 --- /dev/null +++ b/board/loongson/ls1b20-huolong/rootfs_volp_overlay/etc/profile @@ -0,0 +1,19 @@ +export PATH="/bin:/sbin:/usr/bin:/usr/sbin" + +if [ "$PS1" ]; then + if [ "`id -u`" -eq 0 ]; then + export PS1='[\u@\h \W]# ' + else + export PS1='$ ' + fi +fi + +export EDITOR='/bin/vi' + +# Source configuration files from /etc/profile.d +for i in /etc/profile.d/*.sh ; do + if [ -r "$i" ]; then + . $i + fi +done +unset i diff --git a/board/loongson/ls1b20-huolong/rootfs_volp_overlay/home/volp b/board/loongson/ls1b20-huolong/rootfs_volp_overlay/home/volp new file mode 100755 index 00000000..d9483498 Binary files /dev/null and b/board/loongson/ls1b20-huolong/rootfs_volp_overlay/home/volp differ diff --git a/board/loongson/ls1b20-huolong/rootfs_volp_overlay/usr/share/fonts/wqy-zenhei.ttc b/board/loongson/ls1b20-huolong/rootfs_volp_overlay/usr/share/fonts/wqy-zenhei.ttc new file mode 100644 index 00000000..4a32e87f Binary files /dev/null and b/board/loongson/ls1b20-huolong/rootfs_volp_overlay/usr/share/fonts/wqy-zenhei.ttc differ diff --git a/board/loongson/ls1b20-huolong/ubinize.cfg b/board/loongson/ls1b20-huolong/ubinize.cfg new file mode 100644 index 00000000..5b7e94ea --- /dev/null +++ b/board/loongson/ls1b20-huolong/ubinize.cfg @@ -0,0 +1,8 @@ +[ubifs] + mode=ubi + image=BR2_ROOTFS_UBIFS_PATH + vol_id=0 + vol_size=200MiB + vol_type=dynamic + vol_name=rootfs + vol_flags=autoresize diff --git a/board/loongson/ls2k1000-jinlong/rootfs_mini_overlay/boot/.gitignore b/board/loongson/ls2k1000-jinlong/rootfs_mini_overlay/boot/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/board/loongson/ls2k1000-jinlong/rootfs_mini_overlay/etc/udev/rules.d/80-net-setup-link.rules b/board/loongson/ls2k1000-jinlong/rootfs_mini_overlay/etc/udev/rules.d/80-net-setup-link.rules new file mode 100644 index 00000000..7507a2f2 --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_mini_overlay/etc/udev/rules.d/80-net-setup-link.rules @@ -0,0 +1,13 @@ +# do not edit this file, it will be overwritten on update + +SUBSYSTEM!="net", GOTO="net_setup_link_end" + +IMPORT{builtin}="path_id" + +ACTION=="remove", GOTO="net_setup_link_end" + +IMPORT{builtin}="net_setup_link" + +NAME=="", ENV{ID_NET_NAME}!="", NAME="$env{ID_NET_SLOT}" + +LABEL="net_setup_link_end" diff --git a/board/loongson/ls2k1000-jinlong/rootfs_overlay/boot/.gitignore b/board/loongson/ls2k1000-jinlong/rootfs_overlay/boot/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/board/loongson/ls2k1000-jinlong/rootfs_overlay/etc/ssh/sshd_config b/board/loongson/ls2k1000-jinlong/rootfs_overlay/etc/ssh/sshd_config new file mode 100644 index 00000000..613cf243 --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_overlay/etc/ssh/sshd_config @@ -0,0 +1,117 @@ +# $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $ + +# This is the sshd server system-wide configuration file. See +# sshd_config(5) for more information. + +# This sshd was compiled with PATH=/bin:/sbin:/usr/bin:/usr/sbin + +# The strategy used for options in the default sshd_config shipped with +# OpenSSH is to specify options with their default value where +# possible, but leave them commented. Uncommented options override the +# default value. + +#Port 22 +#AddressFamily any +#ListenAddress 0.0.0.0 +#ListenAddress :: + +#HostKey /etc/ssh/ssh_host_rsa_key +#HostKey /etc/ssh/ssh_host_ecdsa_key +#HostKey /etc/ssh/ssh_host_ed25519_key + +# Ciphers and keying +#RekeyLimit default none + +# Logging +#SyslogFacility AUTH +#LogLevel INFO + +# Authentication: + +#LoginGraceTime 2m +#PermitRootLogin prohibit-password +PermitRootLogin no +#StrictModes yes +#MaxAuthTries 6 +#MaxSessions 10 + +#PubkeyAuthentication yes + +# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 +# but this is overridden so installations will only check .ssh/authorized_keys +AuthorizedKeysFile .ssh/authorized_keys + +#AuthorizedPrincipalsFile none + +#AuthorizedKeysCommand none +#AuthorizedKeysCommandUser nobody + +# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts +#HostbasedAuthentication no +# Change to yes if you don't trust ~/.ssh/known_hosts for +# HostbasedAuthentication +#IgnoreUserKnownHosts no +# Don't read the user's ~/.rhosts and ~/.shosts files +#IgnoreRhosts yes + +# To disable tunneled clear text passwords, change to no here! +#PasswordAuthentication yes +#PermitEmptyPasswords no + +# Change to no to disable s/key passwords +#ChallengeResponseAuthentication yes + +# Kerberos options +#KerberosAuthentication no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes +#KerberosGetAFSToken no + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes + +# Set this to 'yes' to enable PAM authentication, account processing, +# and session processing. If this is enabled, PAM authentication will +# be allowed through the ChallengeResponseAuthentication and +# PasswordAuthentication. Depending on your PAM configuration, +# PAM authentication via ChallengeResponseAuthentication may bypass +# the setting of "PermitRootLogin without-password". +# If you just want the PAM account and session checks to run without +# PAM authentication, then enable this but set PasswordAuthentication +# and ChallengeResponseAuthentication to 'no'. +#UsePAM no + +#AllowAgentForwarding yes +#AllowTcpForwarding yes +#GatewayPorts no +#X11Forwarding no +#X11DisplayOffset 10 +#X11UseLocalhost yes +#PermitTTY yes +#PrintMotd yes +#PrintLastLog yes +#TCPKeepAlive yes +#PermitUserEnvironment no +#Compression delayed +#ClientAliveInterval 0 +#ClientAliveCountMax 3 +#UseDNS no +#PidFile /var/run/sshd.pid +#MaxStartups 10:30:100 +#PermitTunnel no +#ChrootDirectory none +#VersionAddendum none + +# no default banner path +#Banner none + +# override default of no subsystems +Subsystem sftp /usr/libexec/sftp-server + +# Example of overriding settings on a per-user basis +#Match User anoncvs +# X11Forwarding no +# AllowTcpForwarding no +# PermitTTY no +# ForceCommand cvs server diff --git a/board/loongson/ls2k1000-jinlong/rootfs_overlay/etc/udev/rules.d/80-net-setup-link.rules b/board/loongson/ls2k1000-jinlong/rootfs_overlay/etc/udev/rules.d/80-net-setup-link.rules new file mode 100644 index 00000000..7507a2f2 --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_overlay/etc/udev/rules.d/80-net-setup-link.rules @@ -0,0 +1,13 @@ +# do not edit this file, it will be overwritten on update + +SUBSYSTEM!="net", GOTO="net_setup_link_end" + +IMPORT{builtin}="path_id" + +ACTION=="remove", GOTO="net_setup_link_end" + +IMPORT{builtin}="net_setup_link" + +NAME=="", ENV{ID_NET_NAME}!="", NAME="$env{ID_NET_SLOT}" + +LABEL="net_setup_link_end" diff --git a/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/etc/inittab b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/etc/inittab new file mode 100644 index 00000000..37c3ec3b --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/etc/inittab @@ -0,0 +1,40 @@ +# /etc/inittab +# +# Copyright (C) 2001 Erik Andersen +# +# Note: BusyBox init doesn't support runlevels. The runlevels field is +# completely ignored by BusyBox init. If you want runlevels, use +# sysvinit. +# +# Format for each entry: ::: +# +# id == tty to run on, or empty for /dev/console +# runlevels == ignored +# action == one of sysinit, respawn, askfirst, wait, and once +# process == program to run + +# Startup the system +::sysinit:/bin/mount -t proc proc /proc +::sysinit:/bin/mount -o remount,rw / +::sysinit:/bin/mkdir -p /dev/pts /dev/shm +::sysinit:/bin/mount -a +::sysinit:/sbin/swapon -a +null::sysinit:/bin/ln -sf /proc/self/fd /dev/fd +null::sysinit:/bin/ln -sf /proc/self/fd/0 /dev/stdin +null::sysinit:/bin/ln -sf /proc/self/fd/1 /dev/stdout +null::sysinit:/bin/ln -sf /proc/self/fd/2 /dev/stderr +::sysinit:/bin/hostname -F /etc/hostname +# now run any rc scripts +::sysinit:/etc/init.d/rcS + +# Put a getty on the serial port +#ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 # GENERIC_SERIAL +ttyS0::respawn:-/bin/sh + +# Stuff to do for the 3-finger salute +#::ctrlaltdel:/sbin/reboot + +# Stuff to do before rebooting +::shutdown:/etc/init.d/rcK +::shutdown:/sbin/swapoff -a +::shutdown:/bin/umount -a -r diff --git a/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/etc/profile b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/etc/profile new file mode 100755 index 00000000..1606e539 --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/etc/profile @@ -0,0 +1,34 @@ +#!/bin/sh +export PATH="/bin:/sbin:/usr/bin:/usr/sbin" + +echo "Processing /etc/profile..." + +# #id -un是打印输出当前的用户名,例如:root +USER="`id -un`" +LOGNAME=$USER + +#通过/bin/hostname获取主机名 +HOSTNAME=`/bin/hostname` + +#登录后显示的控制台名称,与etc/issue相关? +#形如:“[用户名@主机名 目录]#”,\h引用了HOSTNAME,而在rcS里设置了/bin/hostname xxxx +# \h :仅取主机的第一个名字,例如xx.linux,则 \h=xx +export PS1='[\u@\h:\W]# ' +#PS1="[$USER@$HOSTNAME \$PWD]#" + +export USER LOGNAME HOSTNAME PS1 + +export FIRMWARE=/lib/firmware + +export ALSA_CONFIG_PATH=/home/alsa/share/alsa/alsa.conf + +sleep 3 + +echo "Processing /etc/profile..." +echo "we will run three script symbol three stage" +echo "some stage will waste a few minutes. don't shutdowm until finish!" + +chmod a+x /home/*.sh +chmod a+x /home/mke2fs + +/home/analy_install_or_recover.sh | tee /dev/tty0 diff --git a/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/analy_install_or_recover.sh b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/analy_install_or_recover.sh new file mode 100755 index 00000000..0dd3775b --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/analy_install_or_recover.sh @@ -0,0 +1,25 @@ +#! /bin/sh + +cmdline=""; +flag=""; +recover_flag="recover_system=1" + +read_cmdLine() +{ + cmdline=$(cat "/proc/cmdline") +} + +analy_cmdline() +{ + flag=$(echo $cmdline | tr -s " " | rev | cut -d " " -f1 | rev); + if [ $flag == $recover_flag ]; then + echo "Recover System!!!" + /home/recover_backup.sh + else + echo "Install System To SSD!!!" + /home/install_usb.sh + fi +} + +read_cmdLine; +analy_cmdline; diff --git a/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fdisk.txt b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fdisk.txt new file mode 100644 index 00000000..eadd3d4b --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fdisk.txt @@ -0,0 +1,28 @@ +d +1 +d +2 +d +3 +d +4 + +n +p +3 + ++2G + +n +p +1 + + + +t +3 +82 + +p + +w diff --git a/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/0001part_fstab b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/0001part_fstab new file mode 100644 index 00000000..911860c3 --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/0001part_fstab @@ -0,0 +1,2 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 diff --git a/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/0011part_fstab b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/0011part_fstab new file mode 100644 index 00000000..75318711 --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/0011part_fstab @@ -0,0 +1,9 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda2 /data ext4 rw,relatime,data=ordered 0 1 + +/data/home /home none defaults,bind 0 0 +/data/opt /opt none defaults,bind 0 0 +/data/var /var none defaults,bind 0 0 + + diff --git a/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/0101part_fstab b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/0101part_fstab new file mode 100644 index 00000000..7d6f8271 --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/0101part_fstab @@ -0,0 +1,5 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda3 none swap defaults,pri=-2 0 0 + + diff --git a/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/0111part_fstab b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/0111part_fstab new file mode 100644 index 00000000..6f6ac762 --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/0111part_fstab @@ -0,0 +1,10 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda2 /data ext4 rw,relatime,data=ordered 0 1 +/dev/sda3 none swap defaults,pri=-2 0 0 + +/data/home /home none defaults,bind 0 0 +/data/opt /opt none defaults,bind 0 0 +/data/var /var none defaults,bind 0 0 + + diff --git a/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/1001part_fstab b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/1001part_fstab new file mode 100644 index 00000000..f44066cb --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/1001part_fstab @@ -0,0 +1,3 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 + diff --git a/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/1011part_fstab b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/1011part_fstab new file mode 100644 index 00000000..d77bfee2 --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/1011part_fstab @@ -0,0 +1,7 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda3 none swap defaults,pri=-2 0 0 + +/data/home /home none defaults,bind 0 0 +/data/opt /opt none defaults,bind 0 0 +/data/var /var none defaults,bind 0 0 diff --git a/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/1101part_fstab b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/1101part_fstab new file mode 100644 index 00000000..7d6f8271 --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/1101part_fstab @@ -0,0 +1,5 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda3 none swap defaults,pri=-2 0 0 + + diff --git a/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/1111part_fstab b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/1111part_fstab new file mode 100644 index 00000000..6f6ac762 --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/fstab/1111part_fstab @@ -0,0 +1,10 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda2 /data ext4 rw,relatime,data=ordered 0 1 +/dev/sda3 none swap defaults,pri=-2 0 0 + +/data/home /home none defaults,bind 0 0 +/data/opt /opt none defaults,bind 0 0 +/data/var /var none defaults,bind 0 0 + + diff --git a/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/install_disk.sh b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/install_disk.sh new file mode 100755 index 00000000..f9033a0d --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/install_disk.sh @@ -0,0 +1,202 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 2*********************************" +echo "*******************uzip system and setup it with fstab*******************" +echo "*************************************************************************" +echo " "; +sleep 2; + +usb_partition="/dev/sdb1" +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + +usb_mount_point="/mnt/usb0" +root_mount_point="/mnt/usb1" +data_mount_point="/mnt/usb2" +swap_mount_point="/mnt/usb3" +backup_mount_point="/mnt/usb4" + +#错误信息输出到usb的install文件夹里的error.log +#注意安装系统时install文件夹不要存放error.log +#否则会先改名error.log.bak,多次执行后,这样可能会造成数据丢失 +error_inf_write_usb() +{ + if mountpoint -q $usb_mount_point; then + echo $1 >> $usb_mount_point"/install/error.log"; + else + mount $usb_partition $usb_mount_point; + if mountpoint -q $usb_mount_point; then + echo $1 >> $usb_mount_point"/install/error.log"; + sync; + umount $usb_mount_point; + else + echo "-------------> log error: couldn't mount usb("$usb_partition") <-------------" + fi + fi +} + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + error_inf_write_usb $1 + check_and_umount_for_safe; + exit 1; +} + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#uzip_rootfs 解压文件系统到根文件分区 必要 +#copy_uimage_to_boot 复制内核到/boot目录(没做boot分区)必要 +#copy_file_to_data 复制home opt var到data分区 不一定,根据fstab而定 + +uzip_rootfs() +{ + echo "-------------> stage2.1 unzip system <-------------" + if [ -e $backup_partition ]; then + mount $backup_partition $backup_mount_point + sync; + mount $root_partition $root_mount_point + sync; + echo "can observe process in screen" + pv $backup_mount_point/rootfs.tar.gz 2>/dev/tty0 | tar -xzf - -C $root_mount_point; + if [ $? -ne 0 ]; then + error_inf_print "Error! unzip system failed! Please check rootfs.tar.gz and try again"; + fi + else + mount $root_partition $root_mount_point + sync; + echo "can observe process in screen" + pv $root_mount_point/rootfs.tar.gz 2>/dev/tty0 | tar -xzf - -C $root_mount_point; + if [ $? -ne 0 ]; then + error_inf_print "Error! unzip system failed! Please check rootfs.tar.gz and try again"; + fi + rm -r $root_mount_point/rootfs.tar.gz + fi + check_and_umount_for_safe; + return 0; +} + +copy_uImage_to_boot() +{ + echo "-------------> stage2.2 copy uImage to /boot <-------------" + if [ -e $backup_partition ]; then + mount $backup_partition $backup_mount_point + sync; + mount $root_partition $root_mount_point + sync; + cp -a $backup_mount_point/uImage $root_mount_point/boot + if [ $? -ne 0 ]; then + error_inf_print "Error! copy uImage failed! Please try again"; + fi + else + mount $root_partition $root_mount_point + sync; + mv $root_mount_point/uImage $root_mount_point/boot + if [ $? -ne 0 ]; then + error_inf_print "Error! copy uImage failed! Please try again"; + fi + fi + check_and_umount_for_safe; + return 0; +} + +copy_fstab() +{ + echo "-------------> stage2.3 copy fstab to /etc/fstab <-------------" + sda1_partition_target=0 + sda2_partition_target=0 + sda3_partition_target=0 + sda4_partition_target=0 + if [ -e $root_partition ]; then + sda1_partition_target=1; + fi + if [ -e $data_partition ]; then + sda2_partition_target=1; + fi + if [ -e $swap_partition ]; then + sda3_partition_target=1; + fi + if [ -e $backup_partition ]; then + sda4_partition_target=1; + fi + + mount $root_partition $root_mount_point; + sync; + mv $root_mount_point/etc/fstab $root_mount_point/etc/fstab_ori; + cp "/home/fstab/"$sda4_partition_target$sda3_partition_target$sda2_partition_target$sda1_partition_target"part_fstab" $root_mount_point/etc/fstab; + + check_and_umount_for_safe; + return 0; +} + +copy_file_to_data() +{ + echo "-------------> stage2.4 copy file to data partition <-------------" + mount $data_partition $data_mount_point; + sync; + mount $root_partition $root_mount_point; + sync; + + cp -a $root_mount_point/home/ $data_mount_point; + cp -a $root_mount_point/opt/ $data_mount_point; + cp -a $root_mount_point/var/ $data_mount_point; + sync; + + rm -r $root_mount_point/home/ + rm -r $root_mount_point/opt/ + rm -r $root_mount_point/var/ + sync; + + check_and_umount_for_safe; + return 0; +} + +#防止前面的脚本出现错误,导致没有解除挂载一些已经挂载的分区。 +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q $i; then + sync; + umount $i; + fi + } + done +} + +#相关分区 +#backup分区 +start_stage2() +{ + uzip_rootfs + echo "" + copy_uImage_to_boot + echo "" + copy_fstab; + echo "" + if [ -e $data_partition ]; then + copy_file_to_data + fi +} + +###################start########################## +###################start########################## +###################start########################## + +#防止第一个阶段因未知原因而导致没有解除挂载 +check_and_umount_for_safe; +start_stage2; +check_and_umount_for_safe; + +echo "-------------> stage2 end <-------------" + +/home/install_reboot.sh diff --git a/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/install_fdisk.sh b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/install_fdisk.sh new file mode 100755 index 00000000..c44b70d7 --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/install_fdisk.sh @@ -0,0 +1,129 @@ +#! /bin/sh + +disk_size=0 +disk_size_root=0 +disk_size_data=0 +disk_size_swap=2 +disk_size_backup=4 +disk_size_ex_swap=0 +disk_size_root_and_data=0 + +#读取SSD的大小 +read_disk_size() +{ + disk_size=$(fdisk -l | grep "Disk /dev/sda" | cut -d ' ' -f3); + disk_size_ex_swap=$(($disk_size-$disk_size_swap)); +} + +#不是16G的盘,那么root和data 1 2分(整数) 多的就给root +split_root_and_data() +{ + disk_size_root=0 + disk_size_data=0 + while [ $disk_size_root_and_data -ge 3 ] + do + disk_size_root=$(($disk_size_root+1)) + disk_size_data=$(($disk_size_data+2)) + disk_size_root_and_data=$(($disk_size_root_and_data-3)) + done + disk_size_root=$(($disk_size_root+$disk_size_root_and_data)) +} + +#这是开始格式化分区的函数 +#注意分区的数字需要参数传入,否则不能识别 +fdisk_run_four_part() +{ + fdisk /dev/sda >/dev/null << ! +d +1 +d +2 +d +3 +d +4 + +n +p +1 + ++$1G + +n +p +2 + ++$2G + +n +p +3 + ++$3G + +n +p +4 + + + +t +3 +82 + +p + +w +! +} + + +#分析4分区, 不包括乒乓系统 +analy_four_part() +{ + #16G的特别对待,保证root能装满系统 + if [ $disk_size -le 16 ]; then + disk_size_root=6 + disk_size_data=3 + else + disk_size_root_and_data=$(($disk_size_ex_swap-$disk_size_backup)) + split_root_and_data; + fi +} + +#分析4分区,包括乒乓系统 +analy_pingpang() +{ + if [ $disk_size -le 16 ]; then + disk_size_root=4 + disk_size_data=2 + else + #/2会向下取整,也就是bakcup的大小 >= root+data + disk_size_root_and_data=$(($disk_size_ex_swap/2)) + split_root_and_data; + fi +} + +#fdisk_four_part 不包括4分区 +#fidks_pingpang 包括4分区 +#这两个函数都是接口。 + +fdisk_four_part() +{ + read_disk_size; + analy_four_part; + fdisk_run_four_part $disk_size_root $disk_size_data $disk_size_swap; +} + +fdisk_pingpang() +{ + read_disk_size; + analy_pingpang; + fdisk_run_four_part $disk_size_root $disk_size_data $disk_size_swap; +} + +if [ $1 -eq 0 ]; then + fdisk_four_part; +elif [ $1 -eq 1 ]; then + fdisk_pingpang; +fi \ No newline at end of file diff --git a/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/install_reboot.sh b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/install_reboot.sh new file mode 100755 index 00000000..b8cf3167 --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/install_reboot.sh @@ -0,0 +1,32 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 3*********************************" +echo "*******************this stage for check log and reboot*******************" +echo "*************************************************************************" +echo " "; + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#防止前面的脚本出现错误,导致没有解除挂载一些已经挂载的分区。 +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q i; then + sync; + umount i; + fi + } + done +} + +#防止前面的脚本出现错误,导致没有解除挂载一些已经挂载的分区。 +check_and_umount_for_safe; + +echo "-------------> stage3 install system finish! please reboot or shutdowm! <-------------" +reboot -f + +echo "-------------> stage3 end <-------------" diff --git a/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/install_usb.sh b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/install_usb.sh new file mode 100755 index 00000000..0c1b1892 --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/install_usb.sh @@ -0,0 +1,273 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 1*********************************" +echo "************this stage for format SSD and copy file to backup************" +echo "*************************************************************************" +echo " "; +sleep 2; + +usb_partition="/dev/sdb1" +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + +usb_mount_point="/mnt/usb0" +root_mount_point="/mnt/usb1" +data_mount_point="/mnt/usb2" +swap_mount_point="/mnt/usb3" +backup_mount_point="/mnt/usb4" + +create_all_mount_point() +{ + if [ ! -d $usb_mount_point ]; then + mkdir $usb_mount_point + fi + if [ ! -d $root_mount_point ]; then + mkdir $root_mount_point + fi + if [ ! -d $data_mount_point ]; then + mkdir $data_mount_point + fi + if [ ! -d $swap_mount_point ]; then + mkdir $swap_mount_point + fi + if [ ! -d $backup_mount_point ]; then + mkdir $backup_mount_point + fi +} + +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q $i; then + sync; + umount $i; + fi + } + done +} + +#错误信息输出到usb的install文件夹里的error.log +#注意安装系统时install文件夹不要存放error.log +#否则会先改名error.log.bak,多次执行后,这样可能会造成数据丢失 +error_inf_write_usb() +{ + if mountpoint -q $usb_mount_point; then + echo $1 >> $usb_mount_point"/install/error.log"; + else + mount $usb_partition $usb_mount_point; + if mountpoint -q $usb_mount_point; then + echo $1 >> $usb_mount_point"/install/error.log"; + sync; + umount $usb_mount_point; + else + echo "-------------> log error: couldn't mount usb("$usb_partition") <-------------" + fi + fi +} + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + error_inf_write_usb $1 + check_and_umount_for_safe; + echo "*************************************************************************" + echo "" + exit 1; +} + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#fdisk_SSD 使用fdisk进行分区 必要 +#format_all_partition 格式化所有分区 必要 +#copy_file_to_backup 复制文件到backup分区 必要 + +#检查文件是否齐全 +check_file_for_safe() +{ + #检查是不是缺少部分文件,不然分了区才说没文件系统,那么原来的系统就会丢失。 + #能来这里执行,就代表本来就有uImage + echo "-------------> stage1 check_file_for_safe <-------------" + if [ ! -f $usb_mount_point"/install/rootfs.tar.gz" ]; then + error_inf_print "Error! not found "$usb_mount_point"/install/rootfs.tar.gz please check your USB disk" + exit 1; + fi +} + +#进行分区 +#默认2分区 +#有fdisk.txt按fdisk.txt来分 +#有名字为4part的文件, 那么4分区来分 +#有名字为twosys的文件, 那么按乒乓系统的份额分(backup大点) +fdisk_SSD() +{ + echo "-------------> stage1.1 fdisk disk <-------------" + #分区信息导入 + if [ -f $usb_mount_point"/install/fdisk.txt" ]; then + fdisk /dev/sda < /mnt/usb0/install/fdisk.txt >/dev/null; + elif [ -e $usb_mount_point"/install/4part" ]; then + /home/install_fdisk.sh 0 + elif [ -e $usb_mount_point"/install/twosys" ]; then + /home/install_fdisk.sh 1 + else + echo "" + echo "would split sda to 2 partition! /dev/sda1 and /dev/sda3" + sleep 1; + fdisk /dev/sda < /home/fdisk.txt >/dev/null; + fi + sync; + #查看分区表的变化 + echo "" + fdisk -l | grep "/dev/sda"; + sleep 1; + return 0; +} + +#相关分区 +#所有分区,这是格式化分区的函数 +format_all_partition() +{ + # sda1 / usb1 + # sda2 data usb2 + # sda3 swap usb3 + # sda4 backup usb4 + + #分区格式化 + echo "-------------> stage1.2 format / partition --- start <-------------" + /home/mke2fs -c -t ext4 -L rootfs -F $root_partition -O ^metadata_csum >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format / partition --- success <-------------" + else + error_inf_print "Error! format / partition failed! please check partition info and try again" + exit 1; + fi + sync + + if [ -e $data_partition ]; then + echo "-------------> stage1.2 format data partition --- start <-------------" + /home/mke2fs -c -t ext4 -L data -F $data_partition >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format data partition --- success <-------------" + else + error_inf_print "Error! format data partition failed! please check partition info and try again" + exit 1; + fi + sync + fi + + echo "-------------> stage1.2 format swap partition --- start <-------------" + if [ -e $swap_partition ]; then + mkswap $swap_partition >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format swap partition --- success <-------------" + else + error_inf_print "Error! format swap partition failed! please check partition info and try again" + exit 1; + fi + sync + fi + + if [ -e $backup_partition ]; then + echo "-------------> stage1.2 format backup partition --- start <-------------" + /home/mke2fs -c -t ext4 -L rootfs -F $backup_partition -O ^metadata_csum >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format backup partition --- success <-------------" + else + error_inf_print "Error! format backup partition failed! please check partition info and try again" + exit 1; + fi + sync + fi + + sleep 1; + return 0; +} + +#相关分区 +#存放rootfs.tar.gz的分区 sda1或者sda4 +#U盘 +#把U盘里面的内核和文件系统复制到SSD +copy_file_to_SSD() +{ + echo "-------------> stage1.3: copy file to SSD <-------------" + + mount $1 $2; + if mountpoint -q $2; then + sleep 1; + #检查是否存在用于恢复用的busybox制作的系统 + #如果有,那么就把系统复制到备份分区,并且改名ramdisk.gz(和Recovery System对应) + #如果没有,那么就会提示找不到,然后到时候Recovery System则无法使用,可以人为手动加备份分区只要名字是ramdisk.gz即可 + if [ -e $backup_partition ]; then + cp -pv /mnt/usb0/install/ramdisk.gz $2/ramdisk.gz + wait $! + sync; + fi + + echo " -----> copy uImage" + cp -pv $usb_mount_point/install/uImage $2 + wait $! + + echo " -----> copy rootfs.tar.gz (wait a few minutes)" + rsync -P $usb_mount_point/install/rootfs.tar.gz $2 + wait $! + sync + + umount $2; + else + error_inf_print "Error! mount "$1" failed! Counldn't copy file to SSD! Please try again" + exit 1; + fi +} + +#相关分区 +#U盘 +start_stage1() +{ + #挂载U盘 + mount -t vfat -o utf8 $usb_partition $usb_mount_point; + sleep 1; + if mountpoint -q $usb_mount_point; then + if [ -f $usb_mount_point/install/error.log ]; then + echo "-------------> stage1 warning: found error.log <-------------" + echo "-------------> stage1 warning: backup this error.log <-------------" + mv $usb_mount_point/install/error.log $usb_mount_point/install/error.log.bak + fi + + echo "-------------> stage1 mount /dev/sdb1(usb) success <-------------"; + + check_file_for_safe; + echo "" + fdisk_SSD; + echo "" + format_all_partition; + echo "" + #参数含义:参数1 backup分区的设备 参数2 backup分区的挂载点 + if [ -e $backup_partition ]; then + copy_file_to_SSD $backup_partition $backup_mount_point + else + copy_file_to_SSD $root_partition $root_mount_point + fi + + umount /mnt/usb0; + else + error_inf_print "mount USB disk failed! Please check USB format(fat32?) and try again!" + fi +} + +###################start########################## +###################start########################## +###################start########################## + +create_all_mount_point; +start_stage1; +echo "-------------> stage1 end <-------------" +/home/install_disk.sh diff --git a/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/mke2fs b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/mke2fs new file mode 100755 index 00000000..d956c240 Binary files /dev/null and b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/mke2fs differ diff --git a/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/recover_backup.sh b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/recover_backup.sh new file mode 100755 index 00000000..145c3542 --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/recover_backup.sh @@ -0,0 +1,178 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 1*********************************" +echo "************************this stage for format SSD************************" +echo "*************************************************************************" +echo " "; +sleep 2; + +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + +root_mount_point="/mnt/usb1" +data_mount_point="/mnt/usb2" +swap_mount_point="/mnt/usb3" +backup_mount_point="/mnt/usb4" + +create_all_mount_point() +{ + if [ ! -d $root_mount_point ]; then + mkdir $root_mount_point + fi + if [ ! -d $data_mount_point ]; then + mkdir $data_mount_point + fi + if [ ! -d $swap_mount_point ]; then + mkdir $swap_mount_point + fi + if [ ! -d $backup_mount_point ]; then + mkdir $backup_mount_point + fi +} + +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q $i; then + sync; + umount $i; + fi + } + done +} + +create_all_mount_point() +{ + if [ ! -d $root_mount_point ]; then + mkdir $root_mount_point + fi + if [ ! -d $data_mount_point ]; then + mkdir $data_mount_point + fi + if [ ! -d $swap_mount_point ]; then + mkdir $swap_mount_point + fi + if [ ! -d $backup_mount_point ]; then + mkdir $backup_mount_point + fi +} + +#错误信息输出到backup分区里的error.log +#注意安装系统时backup分区不要存放error.log +#否则会先改名error.log.bak,多次执行后,这样可能会造成数据丢失 +error_inf_write_backup() +{ + if mountpoint -q $backup_mount_point; then + echo $1 >> $backup_mount_point"/error.log"; + else + mount $backup_partition $backup_mount_point; + if mountpoint -q $backup_mount_point; then + echo $1 >> $backup_mount_point"/error.log"; + sync; + umount $backup_mount_point; + else + echo "-------------> log error: couldn't mount backup partition("$backup_partition") <-------------" + fi + fi +} + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + error_inf_write_backup $1 + check_and_umount_for_safe; + echo "*************************************************************************" + echo "" + exit 1; +} + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#format_all_partition 格式化所有分区 必要 + +#检查文件是否齐全 +check_file_for_safe() +{ + echo "-------------> stage1 check_file_for_safe <-------------" + #检查是不是缺少部分文件,不然格式化了才说没文件系统,那么原来的系统就会丢失。 + #能来这里执行,就代表本来就有uImage + if [ ! -f $backup_mount_point"/uImage" ]; then + error_inf_print "Error! not found uImage in backup partition!" + fi + if [ ! -f $backup_mount_point"/rootfs.tar.gz" ]; then + error_inf_print "Error! not found rootfs.tar.gz in backup partition!" + fi +} + +#相关分区 +#所有分区,这是格式化分区的函数 +format_all_partition() +{ + #分区格式化 + if [ -e $root_partition ]; then + echo "-------------> stage1.1 format / partition --- start <-------------" + /home/mke2fs -c -t ext4 -L rootfs -F $root_partition -O ^metadata_csum >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.1 format / partition --- success <-------------" + else + error_inf_print "Error! format / partition failed! Please try again" + fi + sync + fi + + if [ -e $swap_partition ]; then + echo "-------------> stage1.1 format swap partition --- start <-------------" + mkswap $swap_partition >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.1 format swap partition --- success <-------------" + else + error_inf_print "Error! format swap partition failed! Please try again" + fi + sync + fi + return 0; +} + +start_stage1() +{ + sleep 1; + sync; + create_all_mount_point; + mount $backup_partition $backup_mount_point; + if mountpoint -q $backup_mount_point; then + if [ -f $backup_mount_point"/error.log" ]; then + echo "-------------> stage1 warning: found error.log <-------------" + echo "-------------> stage1 warning: rename error.log as error.log.bak <-------------" + mv $backup_mount_point/error.log $backup_mount_point/error.log.bak + fi + + check_file_for_safe; + if [ $? -eq 1 ]; then + exit 1; + fi + umount $backup_mount_point; + fi + format_all_partition; +} + +###################start########################## +###################start########################## +###################start########################## + +check_and_umount_for_safe; +start_stage1; +check_and_umount_for_safe; + +echo "-------------> stage1 end <-------------" + +/home/recover_disk.sh diff --git a/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/recover_disk.sh b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/recover_disk.sh new file mode 100755 index 00000000..8fa8b47c --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/recover_disk.sh @@ -0,0 +1,216 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 2*********************************" +echo "*******************uzip system and setup it with fstab*******************" +echo "*************************************************************************" +echo " "; +sleep 2; + +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + +root_mount_point="/mnt/usb1" +data_mount_point="/mnt/usb2" +swap_mount_point="/mnt/usb3" +backup_mount_point="/mnt/usb4" + +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q $i; then + sync; + umount $i; + fi + } + done +} + +#错误信息输出到backup分区里的error.log +#注意安装系统时backup分区不要存放error.log +#否则会先改名error.log.bak,多次执行后,这样可能会造成数据丢失 +error_inf_write_backup() +{ + if mountpoint -q $backup_mount_point; then + echo $1 >> $backup_mount_point"/error.log"; + else + mount $backup_partition $backup_mount_point; + if mountpoint -q $backup_mount_point; then + echo $1 >> $backup_mount_point"/error.log"; + sync; + umount $backup_mount_point; + else + echo "-------------> log error: couldn't mount backup partition("$backup_partition") <-------------" + fi + fi +} + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + error_inf_write_backup $1 + check_and_umount_for_safe; + echo "*************************************************************************" + echo "" + exit 1; +} + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#uzip_rootfs 解压文件系统到根文件分区 必要 +#copy_uimage_to_boot 复制内核到/boot目录(没做boot分区)必要 +#copy_file_to_data 复制home opt var到data分区 不一定,根据fstab而定 + +uzip_rootfs() +{ + echo "-------------> stage2.1 uzip_rootfs <-------------"; + + mount $root_partition $root_mount_point; + sync; + mount $backup_partition $backup_mount_point; + sync; + + echo "can observe process in screen" + pv $backup_mount_point/rootfs.tar.gz 2>/dev/tty0 | tar -xzf - -C $root_mount_point; + if [ $? -ne 0 ]; then + error_inf_print "Error! unzip rootfs.tar.gz failed!" + fi + + check_and_umount_for_safe; + return 0; +} + +copy_uimage_to_boot() +{ + echo "-------------> stage2.2 copy_uimage_to_boot <-------------"; + + mount $root_partition $root_mount_point; + sync; + mount $backup_partition $backup_mount_point; + sync; + + cp -a $backup_mount_point/uImage $root_mount_point/boot/; + if [ $? -ne 0 ]; then + error_inf_print "Error! copy uImage to /boot/ failed!" + fi + + check_and_umount_for_safe; + return 0; +} + +copy_fstab() +{ + echo "-------------> stage2.3 copy fstab to /etc/fstab <-------------" + sda1_partition_target=0 + sda2_partition_target=0 + sda3_partition_target=0 + sda4_partition_target=0 + if [ -e $root_partition ]; then + sda1_partition_target=1; + fi + if [ -e $data_partition ]; then + sda2_partition_target=1; + fi + if [ -e $swap_partition ]; then + sda3_partition_target=1; + fi + if [ -e $backup_partition ]; then + sda4_partition_target=1; + fi + + mount $root_partition $root_mount_point; + sync; + mv $root_mount_point/etc/fstab $root_mount_point/etc/fstab_ori; + cp "/home/fstab/"$sda4_partition_target$sda3_partition_target$sda2_partition_target$sda1_partition_target"part_fstab" $root_mount_point/etc/fstab; + + check_and_umount_for_safe; + return 0; +} + + +#相关分区 +#data 分区 +#/ 分区 +#/分区里面的/home /opt /var复制到data分区,然后删除自身的/home /opt /var +copy_file_to_data() +{ + echo "-------------> stage2.4 update data partition <-------------"; + + mount $root_partition $root_mount_point + sync + mount $data_partition $data_mount_point + sync + + #必须重置dpkg的记录,否则就会提示什么包都装好了,但是程序提示找不到 + # if [ -d $2/var/lib/dpkg ]; then + # { + # echo "-------------> stage2.3 delete dpkg inf in data partition <-------------" + # rm -r $2/var/lib/dpkg; + # sync; + # } + # fi + # echo "-------------> stage2.3 copy dpkg inf to data partition <-------------" + # cp -a $4/var/lib/dpkg $2/var/lib + # sync; + # sleep 1; + + #先保留mysql的数据,然后删除var,复制var过来,然后再恢复mysql的数据 + if [ -d $data_mount_point/var ]; then + if [ -d $data_mount_point/var/lib/mysql ]; then + echo "-------------> stage2.3 backup mysql data to data partition <-------------"; + cp -a $data_mount_point/var/lib/mysql $data_mount_point/; + sync; + fi + rm -r $data_mount_point/var + fi + cp -a $root_mount_point/var $data_mount_point/var + if [ -d $data_mount_point/mysql ]; then + rm -r $data_mount_point/var/lib/mysql 2>/dev/null + cp -a $data_mount_point/mysql $data_mount_point/var/lib/mysql + fi + rm -r $root_mount_point/var; + sync; + + rm -r $root_mount_point/home; + sync; + + rm -r $root_mount_point/opt; + sync; + + check_and_umount_for_safe; +} + +#相关分区 +#backup分区 +start_stage2() +{ + #执行三个阶段的操作 + uzip_rootfs; + copy_uimage_to_boot; + copy_fstab; + if [ -e $data_partition ]; then + copy_file_to_data; + fi +} + +###################start########################## +###################start########################## +###################start########################## + +#防止第一个阶段因未知原因而导致没有解除挂载 +check_and_umount_for_safe; +start_stage2; +check_and_umount_for_safe; + +echo "-------------> stage2 end <-------------" + +/home/recover_reboot.sh diff --git a/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/recover_reboot.sh b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/recover_reboot.sh new file mode 100755 index 00000000..ce6bfbb0 --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/home/recover_reboot.sh @@ -0,0 +1,33 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 3*********************************" +echo "*******************this stage for check log and reboot*******************" +echo "*************************************************************************" +echo " "; + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#防止前面的脚本出现错误,导致没有解除挂载一些已经挂载的分区。 +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q i; then + { + sync; + umount i; + } + fi + } + done +} + +#防止前面的脚本出现错误,导致没有解除挂载一些已经挂载的分区。 +check_and_umount_for_safe; +echo "-------------> stage3 reboot system <-------------" +#检查是否有错误记录文件,则之前的脚本执行时出错 +reboot -f +echo "-------------> stage3 end <-------------" diff --git a/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/usr/bin/du b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/usr/bin/du new file mode 100755 index 00000000..69193f37 Binary files /dev/null and b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/usr/bin/du differ diff --git a/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/usr/bin/rsync b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/usr/bin/rsync new file mode 100755 index 00000000..6ae084da Binary files /dev/null and b/board/loongson/ls2k1000-jinlong/rootfs_ramdisk_overlay/usr/bin/rsync differ diff --git a/board/loongson/ls2k1000-jinlong/rootfs_test_server_overlay/boot/.gitignore b/board/loongson/ls2k1000-jinlong/rootfs_test_server_overlay/boot/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/board/loongson/ls2k1000-jinlong/rootfs_test_server_overlay/etc/profile b/board/loongson/ls2k1000-jinlong/rootfs_test_server_overlay/etc/profile new file mode 100644 index 00000000..4bacc1b6 --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_test_server_overlay/etc/profile @@ -0,0 +1,21 @@ +export PATH="/bin:/sbin:/usr/bin:/usr/sbin" + +if [ "$PS1" ]; then + if [ "`id -u`" -eq 0 ]; then + export PS1='[\u@\h \W]# ' + else + export PS1='$ ' + fi +fi + +export EDITOR='/bin/vi' + +# Source configuration files from /etc/profile.d +for i in /etc/profile.d/*.sh ; do + if [ -r "$i" ]; then + . $i + fi +done +unset i + +/home/start_test.sh & diff --git a/board/loongson/ls2k1000-jinlong/rootfs_test_server_overlay/etc/udev/rules.d/80-net-setup-link.rules b/board/loongson/ls2k1000-jinlong/rootfs_test_server_overlay/etc/udev/rules.d/80-net-setup-link.rules new file mode 100644 index 00000000..7507a2f2 --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_test_server_overlay/etc/udev/rules.d/80-net-setup-link.rules @@ -0,0 +1,13 @@ +# do not edit this file, it will be overwritten on update + +SUBSYSTEM!="net", GOTO="net_setup_link_end" + +IMPORT{builtin}="path_id" + +ACTION=="remove", GOTO="net_setup_link_end" + +IMPORT{builtin}="net_setup_link" + +NAME=="", ENV{ID_NET_NAME}!="", NAME="$env{ID_NET_SLOT}" + +LABEL="net_setup_link_end" diff --git a/board/loongson/ls2k1000-jinlong/rootfs_test_server_overlay/home/netCon.sh b/board/loongson/ls2k1000-jinlong/rootfs_test_server_overlay/home/netCon.sh new file mode 100755 index 00000000..3b4fdb14 --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_test_server_overlay/home/netCon.sh @@ -0,0 +1,11 @@ +#! /bin/sh + +eth_dev_name="eth0" +head_line_target=`ifconfig -a | grep "lo" | tr -s ' ' | cut -d ' ' -f2` +get_eth_dev_name() +{ + eth_dev_name=`ifconfig -a | grep $head_line_target | grep -v lo | grep -v can | grep -v usb | grep -v sit | tr -s ' ' | cut -d ' ' -f1 | head -$1 | tail -1` +} + +ifconfig $eth_dev_name 10.120.1.136 netmask 255.255.255.0 + diff --git a/board/loongson/ls2k1000-jinlong/rootfs_test_server_overlay/home/start_test.sh b/board/loongson/ls2k1000-jinlong/rootfs_test_server_overlay/home/start_test.sh new file mode 100755 index 00000000..66aca1b6 --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/rootfs_test_server_overlay/home/start_test.sh @@ -0,0 +1,7 @@ +#! /bin/sh + +cd /home +/home/netCon.sh +cd /root/loongson-test-server +./test-server 2 + diff --git a/board/loongson/ls2k1000-jinlong/rootfs_test_server_overlay/home/sys_config_tool b/board/loongson/ls2k1000-jinlong/rootfs_test_server_overlay/home/sys_config_tool new file mode 100755 index 00000000..6f11f868 Binary files /dev/null and b/board/loongson/ls2k1000-jinlong/rootfs_test_server_overlay/home/sys_config_tool differ diff --git a/board/loongson/ls2k1000-jinlong/ubinize-128m.cfg b/board/loongson/ls2k1000-jinlong/ubinize-128m.cfg new file mode 100644 index 00000000..eeb443f4 --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/ubinize-128m.cfg @@ -0,0 +1,9 @@ +[ubifs] + mode=ubi + image=BR2_ROOTFS_UBIFS_PATH + vol_id=0 + vol_size=100MiB + vol_type=dynamic + vol_alignment=1 + vol_name=rootfs + vol_flags=autoresize diff --git a/board/loongson/ls2k1000-jinlong/ubinize.cfg b/board/loongson/ls2k1000-jinlong/ubinize.cfg new file mode 100644 index 00000000..5b7e94ea --- /dev/null +++ b/board/loongson/ls2k1000-jinlong/ubinize.cfg @@ -0,0 +1,8 @@ +[ubifs] + mode=ubi + image=BR2_ROOTFS_UBIFS_PATH + vol_id=0 + vol_size=200MiB + vol_type=dynamic + vol_name=rootfs + vol_flags=autoresize diff --git a/board/loongson/ls2k1000la/custom/rootfs_litong_overlay/boot/.gitignore b/board/loongson/ls2k1000la/custom/rootfs_litong_overlay/boot/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/board/loongson/ls2k1000la/custom/rootfs_litong_overlay/etc/ssh/sshd_config b/board/loongson/ls2k1000la/custom/rootfs_litong_overlay/etc/ssh/sshd_config new file mode 100644 index 00000000..83b371e1 --- /dev/null +++ b/board/loongson/ls2k1000la/custom/rootfs_litong_overlay/etc/ssh/sshd_config @@ -0,0 +1,117 @@ +# $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $ + +# This is the sshd server system-wide configuration file. See +# sshd_config(5) for more information. + +# This sshd was compiled with PATH=/bin:/sbin:/usr/bin:/usr/sbin + +# The strategy used for options in the default sshd_config shipped with +# OpenSSH is to specify options with their default value where +# possible, but leave them commented. Uncommented options override the +# default value. + +#Port 22 +#AddressFamily any +#ListenAddress 0.0.0.0 +#ListenAddress :: + +#HostKey /etc/ssh/ssh_host_rsa_key +#HostKey /etc/ssh/ssh_host_ecdsa_key +#HostKey /etc/ssh/ssh_host_ed25519_key + +# Ciphers and keying +#RekeyLimit default none + +# Logging +#SyslogFacility AUTH +#LogLevel INFO + +# Authentication: + +#LoginGraceTime 2m +#PermitRootLogin prohibit-password +PermitRootLogin yes +#StrictModes yes +#MaxAuthTries 6 +#MaxSessions 10 + +#PubkeyAuthentication yes + +# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 +# but this is overridden so installations will only check .ssh/authorized_keys +AuthorizedKeysFile .ssh/authorized_keys + +#AuthorizedPrincipalsFile none + +#AuthorizedKeysCommand none +#AuthorizedKeysCommandUser nobody + +# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts +#HostbasedAuthentication no +# Change to yes if you don't trust ~/.ssh/known_hosts for +# HostbasedAuthentication +#IgnoreUserKnownHosts no +# Don't read the user's ~/.rhosts and ~/.shosts files +#IgnoreRhosts yes + +# To disable tunneled clear text passwords, change to no here! +#PasswordAuthentication yes +#PermitEmptyPasswords no + +# Change to no to disable s/key passwords +#ChallengeResponseAuthentication yes + +# Kerberos options +#KerberosAuthentication no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes +#KerberosGetAFSToken no + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes + +# Set this to 'yes' to enable PAM authentication, account processing, +# and session processing. If this is enabled, PAM authentication will +# be allowed through the ChallengeResponseAuthentication and +# PasswordAuthentication. Depending on your PAM configuration, +# PAM authentication via ChallengeResponseAuthentication may bypass +# the setting of "PermitRootLogin without-password". +# If you just want the PAM account and session checks to run without +# PAM authentication, then enable this but set PasswordAuthentication +# and ChallengeResponseAuthentication to 'no'. +#UsePAM no + +#AllowAgentForwarding yes +#AllowTcpForwarding yes +#GatewayPorts no +#X11Forwarding no +#X11DisplayOffset 10 +#X11UseLocalhost yes +#PermitTTY yes +#PrintMotd yes +#PrintLastLog yes +#TCPKeepAlive yes +#PermitUserEnvironment no +#Compression delayed +#ClientAliveInterval 0 +#ClientAliveCountMax 3 +#UseDNS no +#PidFile /var/run/sshd.pid +#MaxStartups 10:30:100 +#PermitTunnel no +#ChrootDirectory none +#VersionAddendum none + +# no default banner path +#Banner none + +# override default of no subsystems +Subsystem sftp /usr/libexec/sftp-server + +# Example of overriding settings on a per-user basis +#Match User anoncvs +# X11Forwarding no +# AllowTcpForwarding no +# PermitTTY no +# ForceCommand cvs server diff --git a/board/loongson/ls2k1000la/custom/rootfs_litong_overlay/etc/udev/rules.d/80-net-setup-link.rules b/board/loongson/ls2k1000la/custom/rootfs_litong_overlay/etc/udev/rules.d/80-net-setup-link.rules new file mode 100644 index 00000000..7507a2f2 --- /dev/null +++ b/board/loongson/ls2k1000la/custom/rootfs_litong_overlay/etc/udev/rules.d/80-net-setup-link.rules @@ -0,0 +1,13 @@ +# do not edit this file, it will be overwritten on update + +SUBSYSTEM!="net", GOTO="net_setup_link_end" + +IMPORT{builtin}="path_id" + +ACTION=="remove", GOTO="net_setup_link_end" + +IMPORT{builtin}="net_setup_link" + +NAME=="", ENV{ID_NET_NAME}!="", NAME="$env{ID_NET_SLOT}" + +LABEL="net_setup_link_end" diff --git a/board/loongson/ls2k1000la/custom/rootfs_litong_overlay/usr/bin/libgo.so b/board/loongson/ls2k1000la/custom/rootfs_litong_overlay/usr/bin/libgo.so new file mode 100755 index 00000000..0ae27073 Binary files /dev/null and b/board/loongson/ls2k1000la/custom/rootfs_litong_overlay/usr/bin/libgo.so differ diff --git a/board/loongson/ls2k1000la/rootfs_factory_overlay/boot/.gitignore b/board/loongson/ls2k1000la/rootfs_factory_overlay/boot/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/board/loongson/ls2k1000la/rootfs_factory_overlay/etc/ssh/sshd_config b/board/loongson/ls2k1000la/rootfs_factory_overlay/etc/ssh/sshd_config new file mode 100644 index 00000000..613cf243 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_factory_overlay/etc/ssh/sshd_config @@ -0,0 +1,117 @@ +# $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $ + +# This is the sshd server system-wide configuration file. See +# sshd_config(5) for more information. + +# This sshd was compiled with PATH=/bin:/sbin:/usr/bin:/usr/sbin + +# The strategy used for options in the default sshd_config shipped with +# OpenSSH is to specify options with their default value where +# possible, but leave them commented. Uncommented options override the +# default value. + +#Port 22 +#AddressFamily any +#ListenAddress 0.0.0.0 +#ListenAddress :: + +#HostKey /etc/ssh/ssh_host_rsa_key +#HostKey /etc/ssh/ssh_host_ecdsa_key +#HostKey /etc/ssh/ssh_host_ed25519_key + +# Ciphers and keying +#RekeyLimit default none + +# Logging +#SyslogFacility AUTH +#LogLevel INFO + +# Authentication: + +#LoginGraceTime 2m +#PermitRootLogin prohibit-password +PermitRootLogin no +#StrictModes yes +#MaxAuthTries 6 +#MaxSessions 10 + +#PubkeyAuthentication yes + +# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 +# but this is overridden so installations will only check .ssh/authorized_keys +AuthorizedKeysFile .ssh/authorized_keys + +#AuthorizedPrincipalsFile none + +#AuthorizedKeysCommand none +#AuthorizedKeysCommandUser nobody + +# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts +#HostbasedAuthentication no +# Change to yes if you don't trust ~/.ssh/known_hosts for +# HostbasedAuthentication +#IgnoreUserKnownHosts no +# Don't read the user's ~/.rhosts and ~/.shosts files +#IgnoreRhosts yes + +# To disable tunneled clear text passwords, change to no here! +#PasswordAuthentication yes +#PermitEmptyPasswords no + +# Change to no to disable s/key passwords +#ChallengeResponseAuthentication yes + +# Kerberos options +#KerberosAuthentication no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes +#KerberosGetAFSToken no + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes + +# Set this to 'yes' to enable PAM authentication, account processing, +# and session processing. If this is enabled, PAM authentication will +# be allowed through the ChallengeResponseAuthentication and +# PasswordAuthentication. Depending on your PAM configuration, +# PAM authentication via ChallengeResponseAuthentication may bypass +# the setting of "PermitRootLogin without-password". +# If you just want the PAM account and session checks to run without +# PAM authentication, then enable this but set PasswordAuthentication +# and ChallengeResponseAuthentication to 'no'. +#UsePAM no + +#AllowAgentForwarding yes +#AllowTcpForwarding yes +#GatewayPorts no +#X11Forwarding no +#X11DisplayOffset 10 +#X11UseLocalhost yes +#PermitTTY yes +#PrintMotd yes +#PrintLastLog yes +#TCPKeepAlive yes +#PermitUserEnvironment no +#Compression delayed +#ClientAliveInterval 0 +#ClientAliveCountMax 3 +#UseDNS no +#PidFile /var/run/sshd.pid +#MaxStartups 10:30:100 +#PermitTunnel no +#ChrootDirectory none +#VersionAddendum none + +# no default banner path +#Banner none + +# override default of no subsystems +Subsystem sftp /usr/libexec/sftp-server + +# Example of overriding settings on a per-user basis +#Match User anoncvs +# X11Forwarding no +# AllowTcpForwarding no +# PermitTTY no +# ForceCommand cvs server diff --git a/board/loongson/ls2k1000la/rootfs_factory_overlay/etc/udev/rules.d/80-net-setup-link.rules b/board/loongson/ls2k1000la/rootfs_factory_overlay/etc/udev/rules.d/80-net-setup-link.rules new file mode 100644 index 00000000..7507a2f2 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_factory_overlay/etc/udev/rules.d/80-net-setup-link.rules @@ -0,0 +1,13 @@ +# do not edit this file, it will be overwritten on update + +SUBSYSTEM!="net", GOTO="net_setup_link_end" + +IMPORT{builtin}="path_id" + +ACTION=="remove", GOTO="net_setup_link_end" + +IMPORT{builtin}="net_setup_link" + +NAME=="", ENV{ID_NET_NAME}!="", NAME="$env{ID_NET_SLOT}" + +LABEL="net_setup_link_end" diff --git a/board/loongson/ls2k1000la/rootfs_factory_overlay/opt/ls_system_config/handle_exec_list b/board/loongson/ls2k1000la/rootfs_factory_overlay/opt/ls_system_config/handle_exec_list new file mode 100644 index 00000000..3afcdf43 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_factory_overlay/opt/ls_system_config/handle_exec_list differ diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/boot/.gitignore b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/boot/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/etc/inittab b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/etc/inittab new file mode 100644 index 00000000..37c3ec3b --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/etc/inittab @@ -0,0 +1,40 @@ +# /etc/inittab +# +# Copyright (C) 2001 Erik Andersen +# +# Note: BusyBox init doesn't support runlevels. The runlevels field is +# completely ignored by BusyBox init. If you want runlevels, use +# sysvinit. +# +# Format for each entry: ::: +# +# id == tty to run on, or empty for /dev/console +# runlevels == ignored +# action == one of sysinit, respawn, askfirst, wait, and once +# process == program to run + +# Startup the system +::sysinit:/bin/mount -t proc proc /proc +::sysinit:/bin/mount -o remount,rw / +::sysinit:/bin/mkdir -p /dev/pts /dev/shm +::sysinit:/bin/mount -a +::sysinit:/sbin/swapon -a +null::sysinit:/bin/ln -sf /proc/self/fd /dev/fd +null::sysinit:/bin/ln -sf /proc/self/fd/0 /dev/stdin +null::sysinit:/bin/ln -sf /proc/self/fd/1 /dev/stdout +null::sysinit:/bin/ln -sf /proc/self/fd/2 /dev/stderr +::sysinit:/bin/hostname -F /etc/hostname +# now run any rc scripts +::sysinit:/etc/init.d/rcS + +# Put a getty on the serial port +#ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 # GENERIC_SERIAL +ttyS0::respawn:-/bin/sh + +# Stuff to do for the 3-finger salute +#::ctrlaltdel:/sbin/reboot + +# Stuff to do before rebooting +::shutdown:/etc/init.d/rcK +::shutdown:/sbin/swapoff -a +::shutdown:/bin/umount -a -r diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/etc/profile b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/etc/profile new file mode 100644 index 00000000..343b514c --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/etc/profile @@ -0,0 +1,25 @@ +export PATH="/bin:/sbin:/usr/bin:/usr/sbin" + +if [ "$PS1" ]; then + if [ "`id -u`" -eq 0 ]; then + export PS1='[\u@\h \W]# ' + else + export PS1='$ ' + fi +fi + +export EDITOR='/bin/vi' + +# Source configuration files from /etc/profile.d +for i in /etc/profile.d/*.sh ; do + if [ -r "$i" ]; then + . $i + fi +done +unset i + +sleep 2 +echo "Processing /etc/profile..." +echo "we will run three script symbol three stage" +echo "some stage will waste a few minutes. don't shutdowm until finish!" +/home/handle_judge.sh | tee /dev/tty0 diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/download_system_tftp/download.sh b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/download_system_tftp/download.sh new file mode 100755 index 00000000..b817caf7 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/download_system_tftp/download.sh @@ -0,0 +1,89 @@ +#! /bin/sh + +###1 dont delete +tftp_ip=$1 +rootfs_name=rootfs.tar.gz +md5_name=md5.txt +uImage_name=uImage +recover_name=ramdisk.gz +recover_local_name=ramdisk.gz + +download_mount_point=$2 + +download_rootfs_path="$download_mount_point/$rootfs_name" +download_md5_path="$download_mount_point/$md5_name" +download_uImage_path="$download_mount_point/$uImage_name" +download_recover_path="$download_mount_point/$recover_local_name" + +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + +###2 dont delete + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + sleep 2 + echo "*************************************************************************" + echo "" + exit 1; +} + +#检查文件是否齐全 +check_file_for_safe() +{ + #检查是不是缺少部分文件,不然分了区才说没文件系统,那么原来的系统就会丢失。 + #能来这里执行,就代表本来就有uImage + echo "-------------> stage1 check_file_for_safe <-------------" + if [ ! -f "$download_rootfs_path" ]; then + error_inf_print "Error! not found "$rootfs_name" download failed!" + exit 1; + fi + if [ ! -f "$download_uImage_path" ]; then + error_inf_print "Error! not found "$uImage_name" download failed!" + exit 1; + fi +} + +download_system() +{ + echo "$rootfs_name downloading...." + tftp -l "$download_rootfs_path" -r $rootfs_name -g $tftp_ip -b 65535 + echo "$uImage_name downloading...." + tftp -l "$download_uImage_path" -r $uImage_name -g $tftp_ip -b 4096 + + if [ ! -z $md5_name ]; then + tftp -l "$download_md5_path" -r $md5_name -g $tftp_ip 2>/dev/null + + if [ -f "$download_md5_path" ]; then + if [ -f "$download_rootfs_path" ]; then + ori_md5=$(cat "$download_md5_path" | cut -d ' ' -f1); + local_md5=$(md5sum "$download_rootfs_path" | cut -d ' ' -f1); + + if [ "$ori_md5" == "$local_md5" ]; then + echo "md5 check success!!!"; + else + error_inf_print "md5 check failed!!! remove $rootfs_name"; + rm "$download_rootfs_path" + fi + + rm "$download_md5_path" + fi + fi + fi + + if [ -e $backup_partition ]; then + tftp -l "$download_recover_path" -r $recover_name -g $tftp_ip -b 4096 2>/dev/null + fi + check_file_for_safe; + return $? +} + +download_system +exit $? diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/download_system_tftp/download_fdisk.sh b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/download_system_tftp/download_fdisk.sh new file mode 100755 index 00000000..3ba2ed09 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/download_system_tftp/download_fdisk.sh @@ -0,0 +1,132 @@ +#! /bin/sh + +tftp_ip=$1 +config_name=config.txt +fdisk_name=fdisk.txt + +disk_config="null" + +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + +root_mount_point="/mnt/usb1" +data_mount_point="/mnt/usb2" +swap_mount_point="/mnt/usb3" +backup_mount_point="/mnt/usb4" + +download_partition="/dev/sda4" +download_mount_point="/mnt/usb4" + +head_line_target=`ifconfig -a | grep "lo" | tr -s ' ' | cut -d ' ' -f2` +dev_list_size=0 +eth_dev_name="" + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + sleep 2 + echo "*************************************************************************" + echo "" + exit 1; +} + +get_eth_dev_name() +{ + eth_dev_name=`ifconfig -a | grep $head_line_target | grep -v lo | grep -v can | grep -v usb | grep -v sit | tr -s ' ' | cut -d ' ' -f1 | head -$1 | tail -1` +} + +get_up_eth() +{ + ifconfig $eth_dev_name $1 netmask 255.255.255.0 + echo "wait 10s to let eth up dev_name: $eth_dev_name" + time_count=1 + while [ $time_count -le 10 ]; + do + printf "\r"$time_count"s..." + sleep 1 + time_count=$(($time_count+1)) + done + echo "" + echo "check server connect....." + tftp -r "uImage" -g $tftp_ip -b 8192 2>/dev/null + check_server_result=$? + if [ $check_server_result -ne 0 ]; then + ifconfig $eth_dev_name down + fi + if [ -f "uImage" ]; then + rm uImage + fi + return $check_server_result +} + +connect_tftp_server() +{ + dev_list_size=`ifconfig -a | grep $head_line_target | grep -v lo | grep -v can | grep -v usb | grep -v sit | wc -l` + cur_test_eth_num=1 + while [ $cur_test_eth_num -le $dev_list_size ] + do + get_eth_dev_name $cur_test_eth_num + get_up_eth $1 + if [ $? -eq 0 ]; then + return 0; + fi + echo "$eth_dev_name can t connect tftp server, try other eth!" + cur_test_eth_num=$(($cur_test_eth_num+1)) + done + error_inf_print "Error!!! not connect server, please check your network!!!" + return 1 +} + +run() +{ + connect_tftp_server $2 + if [ $? -ne 0 ]; then + return 1 + fi + echo "start download file by tftp" + tftp -r $fdisk_name -g $tftp_ip -b 4096 2>/dev/null + + if [ $? -eq 0 ]; then + /home/install_fdisk_analysis.sh 1 $fdisk_name + else + tftp -r $config_name -g $tftp_ip -b 4096 2>/dev/null + + if [ -f $config_name ]; then + disk_config=`cat $config_name | head -n1` + /home/install_fdisk_analysis.sh 2 $disk_config + else + /home/install_fdisk_analysis.sh + fi + fi + + sync; + #查看分区表的变化 + echo "" + fdisk -l | grep "/dev/sda"; + sleep 1; + + /home/install_format_all_disk.sh + if [ $? -ne 0 ]; then + return $? + fi + + if [ ! -e $download_partition ]; then + download_partition="/dev/sda1" + download_mount_point="/mnt/usb1" + fi + + mount $download_partition $download_mount_point + /home/download_system_tftp/download.sh $tftp_ip $download_mount_point + result=$? + umount $download_mount_point + return $result +} + +run $1 $2; +exit $?; \ No newline at end of file diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fdisk.txt b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fdisk.txt new file mode 100644 index 00000000..eadd3d4b --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fdisk.txt @@ -0,0 +1,28 @@ +d +1 +d +2 +d +3 +d +4 + +n +p +3 + ++2G + +n +p +1 + + + +t +3 +82 + +p + +w diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/0001part_fstab b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/0001part_fstab new file mode 100644 index 00000000..911860c3 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/0001part_fstab @@ -0,0 +1,2 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/0011part_fstab b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/0011part_fstab new file mode 100644 index 00000000..75318711 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/0011part_fstab @@ -0,0 +1,9 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda2 /data ext4 rw,relatime,data=ordered 0 1 + +/data/home /home none defaults,bind 0 0 +/data/opt /opt none defaults,bind 0 0 +/data/var /var none defaults,bind 0 0 + + diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/0101part_fstab b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/0101part_fstab new file mode 100644 index 00000000..7d6f8271 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/0101part_fstab @@ -0,0 +1,5 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda3 none swap defaults,pri=-2 0 0 + + diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/0111part_fstab b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/0111part_fstab new file mode 100644 index 00000000..6f6ac762 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/0111part_fstab @@ -0,0 +1,10 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda2 /data ext4 rw,relatime,data=ordered 0 1 +/dev/sda3 none swap defaults,pri=-2 0 0 + +/data/home /home none defaults,bind 0 0 +/data/opt /opt none defaults,bind 0 0 +/data/var /var none defaults,bind 0 0 + + diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/1001part_fstab b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/1001part_fstab new file mode 100644 index 00000000..f44066cb --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/1001part_fstab @@ -0,0 +1,3 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 + diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/1011part_fstab b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/1011part_fstab new file mode 100644 index 00000000..d77bfee2 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/1011part_fstab @@ -0,0 +1,7 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda3 none swap defaults,pri=-2 0 0 + +/data/home /home none defaults,bind 0 0 +/data/opt /opt none defaults,bind 0 0 +/data/var /var none defaults,bind 0 0 diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/1101part_fstab b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/1101part_fstab new file mode 100644 index 00000000..7d6f8271 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/1101part_fstab @@ -0,0 +1,5 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda3 none swap defaults,pri=-2 0 0 + + diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/1111part_fstab b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/1111part_fstab new file mode 100644 index 00000000..6f6ac762 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/fstab/1111part_fstab @@ -0,0 +1,10 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda2 /data ext4 rw,relatime,data=ordered 0 1 +/dev/sda3 none swap defaults,pri=-2 0 0 + +/data/home /home none defaults,bind 0 0 +/data/opt /opt none defaults,bind 0 0 +/data/var /var none defaults,bind 0 0 + + diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/handle_judge.sh b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/handle_judge.sh new file mode 100755 index 00000000..e0f599bc --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/handle_judge.sh @@ -0,0 +1,47 @@ +#! /bin/sh + +# 0 install 1 recover +handle_type=0 + +judge_cmdline() +{ + temp_str=$(cat /proc/cmdline | grep ins_way) + if [ ! -z "$temp_str" ]; then + handle_type=0; + return 0; + fi + temp_str=$(cat /proc/cmdline | grep "rec_sys=1") + if [ ! -z "$temp_str" ]; then + handle_type=1; + return 0; + fi + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo "your uboot version maybe not a laster version!" + echo "so this ramdisk.gz will handle install action!" + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + return 1 +} + +start() +{ + judge_cmdline + res=$? + if [ $res -eq 1 ]; then + /home/install_usb.sh + else + if [ $handle_type -eq 0 ]; then + echo "Install System..." + /home/install_usb.sh + elif [ $handle_type -eq 1 ]; then + echo "Recover System..." + /home/recover_backup.sh + else + echo "handle_judge.sh unexpected handle_type: $handle_type" + echo "ramdisk failed! exit!" + return 1 + fi + fi + return 0 +} + +start diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/install_disk.sh b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/install_disk.sh new file mode 100755 index 00000000..23ab8322 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/install_disk.sh @@ -0,0 +1,249 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 2*********************************" +echo "*******************uzip system and setup it with fstab*******************" +echo "*************************************************************************" +echo " "; +sleep 2; + +usb_partition="/dev/sdb1" +usb_partition_bak="/dev/sdb" +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + +usb_mount_point="/mnt/usb0" +root_mount_point="/mnt/usb1" +data_mount_point="/mnt/usb2" +swap_mount_point="/mnt/usb3" +backup_mount_point="/mnt/usb4" + +#错误信息输出到usb的install文件夹里的error.log +#注意安装系统时install文件夹不要存放error.log +#否则会先改名error.log.bak,多次执行后,这样可能会造成数据丢失 +error_inf_write_usb() +{ + if mountpoint -q $usb_mount_point; then + echo $1 >> $usb_mount_point"/install/error.log"; + else + mount $usb_partition $usb_mount_point; + if mountpoint -q $usb_mount_point; then + echo $1 >> $usb_mount_point"/install/error.log"; + sync; + umount $usb_mount_point; + else + echo "-------------> log error: couldn't mount usb("$usb_partition") <-------------" + fi + fi +} + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 +# error_inf_write_usb $1 + check_and_umount_for_safe; + exit 1; +} + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#uzip_rootfs 解压文件系统到根文件分区 必要 +#copy_uimage_to_boot 复制内核到/boot目录(没做boot分区)必要 +#copy_file_to_data 复制home opt var到data分区 不一定,根据fstab而定 + +uzip_rootfs() +{ + echo "-------------> stage2.1 unzip system <-------------" + + if [ -e "/dev/fb0" ]; then + show_process_dev="/dev/tty0" + else + if [ -e "/dev/console" ]; then + show_process_dev="/dev/console" + else + show_process_dev="/dev/tty0" + fi + fi + + if [ -e $backup_partition ]; then + mount $backup_partition $backup_mount_point + sync; + mount $root_partition $root_mount_point + sync; + echo "can observe process in screen" + pv $backup_mount_point/rootfs.tar.gz 2>$show_process_dev | tar -xzf - -C $root_mount_point; + if [ $? -ne 0 ]; then + error_inf_print "Error! unzip system failed! Please check rootfs.tar.gz and try again"; + fi + else + mount $root_partition $root_mount_point + sync; + echo "can observe process in screen" + pv $root_mount_point/rootfs.tar.gz 2>$show_process_dev | tar -xzf - -C $root_mount_point; + if [ $? -ne 0 ]; then + error_inf_print "Error! unzip system failed! Please check rootfs.tar.gz and try again"; + fi + rm -r $root_mount_point/rootfs.tar.gz + fi + check_and_umount_for_safe; + return 0; +} + +copy_uImage_to_boot() +{ + echo "-------------> stage2.2 copy uImage to /boot <-------------" + if [ -e $backup_partition ]; then + mount $backup_partition $backup_mount_point + sync; + mount $root_partition $root_mount_point + sync; + + #保证boot文件存在 + if [ ! -d $root_mount_point/boot ]; then + mkdir $root_mount_point/boot + fi + + cp -a $backup_mount_point/uImage $root_mount_point/boot/ + if [ $? -ne 0 ]; then + error_inf_print "Error! copy uImage failed! Please try again"; + fi + else + mount $root_partition $root_mount_point + sync; + + #保证boot文件存在 + if [ ! -d $root_mount_point/boot ]; then + mkdir $root_mount_point/boot + fi + + mv $root_mount_point/uImage $root_mount_point/boot/ + if [ $? -ne 0 ]; then + error_inf_print "Error! copy uImage failed! Please try again"; + fi + fi + check_and_umount_for_safe; + return 0; +} + +copy_fstab() +{ + echo "-------------> stage2.3 copy fstab to /etc/fstab <-------------" + sda1_partition_target=0 + sda2_partition_target=0 + sda3_partition_target=0 + sda4_partition_target=0 + if [ -e $root_partition ]; then + sda1_partition_target=1; + fi + if [ -e $data_partition ]; then + sda2_partition_target=1; + fi + if [ -e $swap_partition ]; then + sda3_partition_target=1; + fi + if [ -e $backup_partition ]; then + sda4_partition_target=1; + fi + + mount $root_partition $root_mount_point; + sync; + + if [ -f $root_mount_point/etc/fstab ]; then + cp $root_mount_point/etc/fstab $root_mount_point/etc/fstab_ori; + cp "/home/fstab/"$sda4_partition_target$sda3_partition_target$sda2_partition_target$sda1_partition_target"part_fstab" $root_mount_point/etc/fstab; + + echo "" >> $root_mount_point/etc/fstab + cat $root_mount_point/etc/fstab_ori | grep proc >> $root_mount_point/etc/fstab; + cat $root_mount_point/etc/fstab_ori | grep sysfs >> $root_mount_point/etc/fstab; + cat $root_mount_point/etc/fstab_ori | grep tmpfs >> $root_mount_point/etc/fstab; + cat $root_mount_point/etc/fstab_ori | grep devpts >> $root_mount_point/etc/fstab; + else + cp "/home/fstab/"$sda4_partition_target$sda3_partition_target$sda2_partition_target$sda1_partition_target"part_fstab" $root_mount_point/etc/fstab; + fi + + check_and_umount_for_safe; + return 0; +} + +copy_file_to_data() +{ + echo "-------------> stage2.4 copy file to data partition <-------------" + mount $data_partition $data_mount_point; + sync; + mount $root_partition $root_mount_point; + sync; + + cp -a $root_mount_point/home/ $data_mount_point; + cp -a $root_mount_point/opt/ $data_mount_point; + cp -a $root_mount_point/var/ $data_mount_point; + sync; + + rm -r $root_mount_point/home/ + rm -r $root_mount_point/opt/ + rm -r $root_mount_point/var/ + sync; + + check_and_umount_for_safe; + return 0; +} + +#防止前面的脚本出现错误,导致没有解除挂载一些已经挂载的分区。 +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q $i; then + sync; + umount $i; + fi + } + done +} + +#相关分区 +#backup分区 +start_stage2() +{ + uzip_rootfs + echo "" + copy_uImage_to_boot + echo "" + copy_fstab; + echo "" + if [ -e $data_partition ]; then + copy_file_to_data + fi +} + +check_usb_name() +{ + if [ ! -e $usb_partition ]; then + usb_partition=$usb_partition_bak + fi +} + +###################start########################## +###################start########################## +###################start########################## + + +#防止第一个阶段因未知原因而导致没有解除挂载 +if [ $# -eq 1 ]; then + usb_partition=$1 +fi +check_and_umount_for_safe; +check_usb_name; #如果前面有参数 那么 这里的判断等于白做事 +start_stage2; +check_and_umount_for_safe; + +echo "-------------> stage2 end <-------------" + +/home/install_reboot.sh diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/install_fdisk.sh b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/install_fdisk.sh new file mode 100755 index 00000000..75675b59 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/install_fdisk.sh @@ -0,0 +1,413 @@ +#! /bin/sh + +disk_size=0 +disk_size_root=0 +disk_size_data=0 +disk_size_swap=2 +disk_size_backup=4 +disk_size_ex_swap=0 +disk_size_root_and_data=0 +#是disk_size_root_and_data的备份 +disk_size_root_and_data_bak=0 + +swap_exist=1 +backup_exist=1 + +fdisk_part_total=0 + +#读取SSD的大小 +read_disk_size() +{ + disk_size=$(fdisk -l | grep "Disk /dev/sda" | head -n1 | cut -d ' ' -f3); + disk_size_ex_swap=$(($disk_size-$disk_size_swap)); +} + +#$1 是第一个的比例 +#$2 是第二个的比例 +#$3 瓜分总数 +buffer_num1=0; +buffer_num2=0; +spilt_num_to_buffer() +{ + buffer_num1=0 + buffer_num2=0 + count=$(($1+$2)) + total_num=$3 + + if [ $1 -le 0 ]; then + buffer_num2=$3 + return 0 + elif [ $2 -le 0 ]; then + buffer_num1=$3 + return 0 + fi + + while [ $total_num -ge $count ] + do + buffer_num1=$(($buffer_num1+$1)) + buffer_num2=$(($buffer_num2+$2)) + total_num=$(($total_num-$count)) + done + if [ $1 -lt $2 ]; then + buffer_num2=$(($buffer_num2+$total_num)) + else + buffer_num1=$(($buffer_num1+$total_num)) + fi +} + +split_rootdata_and_backup() +{ + spilt_num_to_buffer $1 $2 $3 + disk_size_root_and_data=$buffer_num1 + disk_size_backup=$buffer_num2 + +} + +split_root_and_data() +{ + spilt_num_to_buffer $1 $2 $3 + disk_size_root=$buffer_num1 + disk_size_data=$buffer_num2 +} + +#这是开始格式化分区的函数 +#注意分区的数字需要参数传入,否则不能识别 +fdisk_run_four_part() +{ + fdisk /dev/sda >/dev/null << ! +d +1 +d +2 +d +3 +d +4 + +n +p +1 + ++$1G + +n +p +2 + ++$2G + +n +p +3 + ++$3G + +n +p +4 + + + +t +3 +82 + +p + +w +! +} + +#这是开始格式化分区的函数 +#注意分区的数字需要参数传入,否则不能识别 +fdisk_run_three_part_without_data() +{ + fdisk /dev/sda >/dev/null << ! +d +1 +d +2 +d +3 +d +4 + +n +p +1 + ++$1G + +n +p +3 + ++$2G + +n +p +4 + + + +t +3 +82 + +p + +w +! +} + +fdisk_run_three_part() +{ + fdisk /dev/sda >/dev/null << ! +d +1 +d +2 +d +3 +d +4 + +n +p +$1 + ++$2G + +n +p +$3 + ++$4G + +n +p +$5 + + + +t +3 +82 + +p + +w +! +} + +temp_fdisk_name=temp_fdisk +fdisk_run_delete_all_part() +{ + echo d >> $temp_fdisk_name + echo 1 >> $temp_fdisk_name + echo d >> $temp_fdisk_name + echo 2 >> $temp_fdisk_name + echo d >> $temp_fdisk_name + echo 3 >> $temp_fdisk_name + echo d >> $temp_fdisk_name + echo 4 >> $temp_fdisk_name + echo "" >> $temp_fdisk_name + echo "" >> $temp_fdisk_name +} + +fdisk_run_set_swap_flag() +{ + echo t >> $temp_fdisk_name + echo 82 >> $temp_fdisk_name + echo "" >> $temp_fdisk_name + echo "" >> $temp_fdisk_name +} + +cur_part_num=1 +fdisk_run_set_part_write_file() +{ + echo n >> $temp_fdisk_name + echo p >> $temp_fdisk_name + echo $1 >> $temp_fdisk_name + echo "" >> $temp_fdisk_name + echo $2 >> $temp_fdisk_name + echo "" >> $temp_fdisk_name + echo "" >> $temp_fdisk_name +} + +fdisk_run_set_part() +{ + if [ $cur_part_num -ne 4 ]; then + if [ $cur_part_num -eq $fdisk_part_total ]; then + fdisk_run_set_part_write_file $1 "" + else + fdisk_run_set_part_write_file $1 "+$2G" + fi + else + fdisk_run_set_part_write_file "" "" + fi + cur_part_num=$(($cur_part_num+1)) +} + +fdisk_run_end_file() +{ + echo w >> $temp_fdisk_name +} + +fdisk_run_func() +{ + fdisk_run_delete_all_part + if [ $swap_exist -eq 1 ]; then + fdisk_run_set_part 3 $disk_size_swap + fdisk_run_set_swap_flag; + fi + if [ $backup_exist -eq 2 ]; then + fdisk_run_set_part 4 $disk_size_backup + fi + + fdisk_run_set_part 1 $disk_size_root + + if [ $1 -ne 0 ]; then + fdisk_run_set_part 2 $disk_size_data + fi + + if [ $backup_exist -eq 1 ]; then + fdisk_run_set_part 4 $disk_size_backup + fi + fdisk_run_end_file; + fdisk /dev/sda < $temp_fdisk_name >/dev/null +} + +#分析4分区, 不包括乒乓系统 +analy_four_part() +{ + #16G的特别对待,保证root能装满系统 + if [ $disk_size -le 16 ]; then + disk_size_root=6 + disk_size_data=3 + disk_size_root_and_data=9 + disk_size_root_and_data_bak=9 + else + disk_size_root_and_data=$(($disk_size_ex_swap-$disk_size_backup)) + disk_size_root_and_data_bak=$disk_size_root_and_data + split_root_and_data 1 2 $disk_size_root_and_data; + fi +} + +#分析4分区,包括乒乓系统 +analy_pingpang() +{ + if [ $disk_size -le 16 ]; then + disk_size_root=4 + disk_size_data=2 + disk_size_root_and_data=6 + disk_size_root_and_data_bak=6 + else + #/2会向下取整,也就是bakcup的大小 >= root+data + disk_size_root_and_data=$(($disk_size_ex_swap/2)) + disk_size_root_and_data_bak=$disk_size_root_and_data + split_root_and_data 1 2 $disk_size_root_and_data; + fi +} + +#fdisk_four_part 不包括4分区 +#fidks_pingpang 包括4分区 +#这两个函数都是接口。 + +fdisk_four_part() +{ + read_disk_size; + analy_four_part; + fdisk_run_four_part $disk_size_root $disk_size_data $disk_size_swap; +} + +fdisk_pingpang() +{ + read_disk_size; + analy_pingpang; + fdisk_run_four_part $disk_size_root $disk_size_data $disk_size_swap; +} + +fdisk_three_pingpang() +{ + read_disk_size; + analy_pingpang; + fdisk_run_three_part_without_data $disk_size_root_and_data_bak $disk_size_swap; +} + +fdisk_by_ratio_swap_size() +{ + if [ $1 -eq 0 ]; then + swap_exist=0; + disk_size_swap=0; + else + swap_exist=1 + if [ $disk_size -le 16 ]; then + disk_size_swap=1 + else + disk_size_swap=2 + fi + fi + disk_size_ex_swap=$(($disk_size-$disk_size_swap)) +} + +fdisk_by_ratio_backup_size() +{ + backup_exist=1 + if [ $1 -eq 0 ]; then + backup_exist=0; + disk_size_backup=0; + elif [ $1 -eq -1 ]; then + backup_exist=2 + disk_size_backup=4 + elif [ $1 -eq -2 ]; then + backup_exist=2 + disk_size_backup=5 + fi +} + +fdisk_by_ratio_other_part() +{ + fdisk_part_total=1; + if [ $2 -gt 0 ]; then + fdisk_part_total=$(($fdisk_part_total+1)); + fi + if [ $swap_exist -eq 1 ]; then + fdisk_part_total=$(($fdisk_part_total+1)); + fi + if [ $backup_exist -ne 0 ]; then + fdisk_part_total=$(($fdisk_part_total+1)); + fi + + if [ $backup_exist -eq 0 ]; then + split_root_and_data $1 $2 $disk_size_ex_swap + else + rootdata_ratio=$(($1+$2)) + if [ $backup_exist -eq 2 ]; then + disk_size_root_and_data=$(($disk_size_ex_swap-$disk_size_backup)) + else + split_rootdata_and_backup $rootdata_ratio $3 $disk_size_ex_swap + fi + split_root_and_data $1 $2 $disk_size_root_and_data + fi + + fdisk_run_func $2 +} + +fidks_by_ratio() +{ + read_disk_size; + fdisk_by_ratio_swap_size $3 + fdisk_by_ratio_backup_size $4 + fdisk_by_ratio_other_part $1 $2 $4 +} + +if [ $1 -eq 0 ]; then + fdisk_four_part; +elif [ $1 -eq 1 ]; then + fdisk_pingpang; +elif [ $1 -eq 2 ]; then + fdisk_three_pingpang; +elif [ $1 -eq 3 ]; then + fidks_by_ratio $2 $3 $4 $5 +fi \ No newline at end of file diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/install_fdisk_analysis.sh b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/install_fdisk_analysis.sh new file mode 100755 index 00000000..dd8aebe5 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/install_fdisk_analysis.sh @@ -0,0 +1,130 @@ +#! /bin/sh + +check_num() +{ + result=$(echo $num1 | grep '^-*[1-9][0-9]*$') + if [ -z $result ]; then + return 1 + fi + return 0 +} + +check_dev_part_num_list() +{ + if [ $# -eq 4 ]; then + check_num $1 + if [ $? -ne 0 ]; then + return 1 + fi + check_num $2 + if [ $? -ne 0 ]; then + return 1 + fi + check_num $3 + if [ $? -ne 0 ]; then + return 1 + fi + check_num $4 + if [ $? -ne 0 ]; then + return 1 + fi + else + return 1 + fi + for i in $1 $2 $3 $4; do + if [ $i -gt 5 ]; then + echo "warning!!! $i > 5, this num is a ratio not a real size!!!" + return 1 + fi + done + if [ $1 -le 0 ]; then + echo "error!!! / part must define!!!" + return 1 + fi + if [ $2 -lt 0 ]; then + echo "warning!!! data part not support default size" + return 1 + fi + if [ $3 -ne 0 -a $3 -ne -1 ]; then + echo "warning!!! swap part not support set $3" + echo "warning!!! swap part ratio == 0 stand for not set swap" + echo "warning!!! swap part ratio == -1 stand for set default" + return 1 + fi + if [ $4 -lt -2 ]; then + echo "warning!!! backup part not support set $4" + echo "warning!!! backup part ratio > 0 stand for set backup part by this ratio" + echo "warning!!! backup part ratio == 0 stand for not set backup part" + echo "warning!!! backup part ratio == -1 stand for set 4G" + echo "warning!!! backup part ratio == -2 stand for set 5G" + return 1 + fi + return 0; +} + +fidsk_default_2_part() +{ + echo "" + echo "would split sda to 2 partition! /dev/sda1 and /dev/sda3" + sleep 1; + fdisk /dev/sda < /home/fdisk.txt >/dev/null; +} + +fdisk_config_analy() +{ + if [ "$1" == "4part" ]; then + /home/install_fdisk.sh 0 + elif [ "$1" == "twosys" ]; then + /home/install_fdisk.sh 1 + elif [ "$1" == "twosys_3" ]; then + /home/install_fdisk.sh 2 + else + num1=$(echo $1 | tr -s ' ' | cut -d ' ' -f1) + num2=$(echo $1 | tr -s ' ' | cut -d ' ' -f2) + num3=$(echo $1 | tr -s ' ' | cut -d ' ' -f3) + num4=$(echo $1 | tr -s ' ' | cut -d ' ' -f4) + + if [ ! -z "$num4" ]; then + check_dev_part_num_list $num1 $num2 $num3 $num4 + if [ $? -eq 0 ]; then + /home/install_fdisk.sh 3 $num1 $num2 $num3 $num4 + return 0 + fi + fi + + fidsk_default_2_part; + fi +} + +# arg1 file path +fdisk_file_analy() +{ + first_line="$(cat $1 | head -1)" + + if [ "$first_line" == "d" ]; then + fdisk /dev/sda < $1 >/dev/null; + else + fdisk_config_analy "$first_line" + fi +} + +analy_start() +{ + if [ $# -eq 2 ]; then + if [ $1 -eq 1 ]; then + fdisk_file_analy $2 + elif [ $1 -eq 2 ]; then + fdisk_config_analy $2 + else + fidsk_default_2_part + fi + else + fidsk_default_2_part + fi +} + +if [ $# -eq 2 ]; then + analy_start $1 $2 +else + analy_start +fi \ No newline at end of file diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/install_format_all_disk.sh b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/install_format_all_disk.sh new file mode 100755 index 00000000..78340189 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/install_format_all_disk.sh @@ -0,0 +1,83 @@ +#! /bin/sh + +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + sleep 2 + echo "*************************************************************************" + echo "" + exit 1; +} + +#相关分区 +#所有分区,这是格式化分区的函数 +format_all_partition() +{ + # sda1 / usb1 + # sda2 data usb2 + # sda3 swap usb3 + # sda4 backup usb4 + + #分区格式化 + echo "-------------> stage1.2 format / partition --- start <-------------" + mke2fs -t ext4 -L rootfs -F $root_partition -O ^metadata_csum >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format / partition --- success <-------------" + else + error_inf_print "Error! format / partition failed! please check partition info and try again" + exit 1; + fi + sync + + if [ -e $data_partition ]; then + echo "-------------> stage1.2 format data partition --- start <-------------" + mke2fs -t ext4 -L data -F $data_partition >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format data partition --- success <-------------" + else + error_inf_print "Error! format data partition failed! please check partition info and try again" + exit 1; + fi + sync + fi + + if [ -e $swap_partition ]; then + echo "-------------> stage1.2 format swap partition --- start <-------------" + mkswap $swap_partition >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format swap partition --- success <-------------" + else + error_inf_print "Error! format swap partition failed! please check partition info and try again" + exit 1; + fi + sync + fi + + if [ -e $backup_partition ]; then + echo "-------------> stage1.2 format backup partition --- start <-------------" + mke2fs -t ext4 -L rootfs -F $backup_partition -O ^metadata_csum >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format backup partition --- success <-------------" + else + error_inf_print "Error! format backup partition failed! please check partition info and try again" + exit 1; + fi + sync + fi + + sleep 1; + return 0; +} + +format_all_partition; +exit $? \ No newline at end of file diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/install_reboot.sh b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/install_reboot.sh new file mode 100755 index 00000000..acbcf7b1 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/install_reboot.sh @@ -0,0 +1,33 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 3*********************************" +echo "*******************this stage for check log and reboot*******************" +echo "*************************************************************************" +echo " "; + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#防止前面的脚本出现错误,导致没有解除挂载一些已经挂载的分区。 +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q i; then + sync; + umount i; + fi + } + done +} + +#防止前面的脚本出现错误,导致没有解除挂载一些已经挂载的分区。 +check_and_umount_for_safe; +/home/sys_config_tool + +echo "-------------> stage3 install system finish! please reboot or shutdowm! <-------------" +reboot -f + +echo "-------------> stage3 end <-------------" diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/install_usb.sh b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/install_usb.sh new file mode 100755 index 00000000..ad503d56 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/install_usb.sh @@ -0,0 +1,399 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 1*********************************" +echo "************this stage for format SSD and copy file to backup************" +echo "*************************************************************************" +echo " "; +sleep 2; + +usb_partition="/dev/sdb1" +usb_partition_bak="/dev/sdb" + +mmc_partition="/dev/mmcblk0p1" +mmc_partition_bak="/dev/mmcblk0" + +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + +usb_mount_point="/mnt/usb0" +root_mount_point="/mnt/usb1" +data_mount_point="/mnt/usb2" +swap_mount_point="/mnt/usb3" +backup_mount_point="/mnt/usb4" + +#local_or_network=0 + +uboot_install_fix=0 +install_way=0 + +stage1_result=0; + + +create_all_mount_point() +{ + if [ ! -d $usb_mount_point ]; then + mkdir $usb_mount_point + fi + if [ ! -d $root_mount_point ]; then + mkdir $root_mount_point + fi + if [ ! -d $data_mount_point ]; then + mkdir $data_mount_point + fi + if [ ! -d $swap_mount_point ]; then + mkdir $swap_mount_point + fi + if [ ! -d $backup_mount_point ]; then + mkdir $backup_mount_point + fi +} + +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q $i; then + sync; + umount $i; + fi + } + done +} + +#错误信息输出到usb的install文件夹里的error.log +#注意安装系统时install文件夹不要存放error.log +#否则会先改名error.log.bak,多次执行后,这样可能会造成数据丢失 +error_inf_write_usb() +{ + if mountpoint -q $usb_mount_point; then + echo $1 >> $usb_mount_point"/install/error.log"; + else + mount $usb_partition $usb_mount_point; + if mountpoint -q $usb_mount_point; then + echo $1 >> $usb_mount_point"/install/error.log"; + sync; + umount $usb_mount_point; + else + echo "-------------> log error: couldn't mount usb("$usb_partition") <-------------" + fi + fi +} + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + sleep 2 +# error_inf_write_usb $1 + check_and_umount_for_safe; + echo "*************************************************************************" + echo "" + exit 1; +} + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#fdisk_SSD 使用fdisk进行分区 必要 +#format_all_partition 格式化所有分区 必要 +#copy_file_to_backup 复制文件到backup分区 必要 + +#检查文件是否齐全 +check_file_for_safe() +{ + #检查是不是缺少部分文件,不然分了区才说没文件系统,那么原来的系统就会丢失。 + #能来这里执行,就代表本来就有uImage + echo "-------------> stage1 check_file_for_safe <-------------" + if [ ! -f $usb_mount_point"/install/rootfs.tar.gz" ]; then + error_inf_print "Error! not found "$usb_mount_point"/install/rootfs.tar.gz please check your USB disk" + exit 1; + fi +} + +#进行分区 +#默认2分区 +#有fdisk.txt按fdisk.txt来分 +#有名字为4part的文件, 那么4分区来分 +#有名字为twosys的文件, 那么按乒乓系统的份额分(backup大点) +fdisk_SSD() +{ + echo "-------------> stage1.1 fdisk disk <-------------" + #分区信息导入 + if [ -f $usb_mount_point"/install/fdisk.txt" ]; then + /home/install_fdisk_analysis.sh 1 $usb_mount_point"/install/fdisk.txt" + elif [ -e $usb_mount_point"/install/4part" ]; then + /home/install_fdisk_analysis.sh 2 "4part" + elif [ -e $usb_mount_point"/install/twosys" ]; then + /home/install_fdisk_analysis.sh 2 "twosys" + elif [ -e $usb_mount_point"/install/twosys_3" ]; then + /home/install_fdisk_analysis.sh 2 "twosys_3" + else + /home/install_fdisk_analysis.sh + fi + sync; + #查看分区表的变化 + echo "" + fdisk -l | grep "/dev/sda"; + sleep 1; + return 0; +} + +#相关分区 +#所有分区,这是格式化分区的函数 +format_all_partition() +{ + # sda1 / usb1 + # sda2 data usb2 + # sda3 swap usb3 + # sda4 backup usb4 + + #分区格式化 + echo "-------------> stage1.2 format / partition --- start <-------------" + mke2fs -t ext4 -L rootfs -F $root_partition -O ^metadata_csum >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format / partition --- success <-------------" + else + error_inf_print "Error! format / partition failed! please check partition info and try again" + exit 1; + fi + sync + + if [ -e $data_partition ]; then + echo "-------------> stage1.2 format data partition --- start <-------------" + mke2fs -t ext4 -L data -F $data_partition >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format data partition --- success <-------------" + else + error_inf_print "Error! format data partition failed! please check partition info and try again" + exit 1; + fi + sync + fi + + echo "-------------> stage1.2 format swap partition --- start <-------------" + if [ -e $swap_partition ]; then + mkswap $swap_partition >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format swap partition --- success <-------------" + else + error_inf_print "Error! format swap partition failed! please check partition info and try again" + exit 1; + fi + sync + fi + + if [ -e $backup_partition ]; then + echo "-------------> stage1.2 format backup partition --- start <-------------" + mke2fs -t ext4 -L rootfs -F $backup_partition -O ^metadata_csum >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format backup partition --- success <-------------" + else + error_inf_print "Error! format backup partition failed! please check partition info and try again" + exit 1; + fi + sync + fi + + sleep 1; + return 0; +} + +#相关分区 +#存放rootfs.tar.gz的分区 sda1或者sda4 +#U盘 +#把U盘里面的内核和文件系统复制到SSD +copy_file_to_SSD() +{ + echo "-------------> stage1.3: copy file to SSD <-------------" + + mount $1 $2; + if mountpoint -q $2; then + sleep 1; + #检查是否存在用于恢复用的busybox制作的系统 + #如果有,那么就把系统复制到备份分区,并且改名ramdisk.gz(和Recovery System对应) + #如果没有,那么就会提示找不到,然后到时候Recovery System则无法使用,可以人为手动加备份分区只要名字是ramdisk.gz即可 + #220719 统一 ramdisk,gz 和 ramdisk-bak.gz 之后 此处不应该是复制ramdisk-bak.gz了 + if [ -e $backup_partition ]; then + # if [ -f $usb_mount_point/install/ramdisk-bak.gz ]; then + # cp -pv /mnt/usb0/install/ramdisk-bak.gz $2/ramdisk.gz + # wait $! + # else + # echo "-------------> stage1.3 warning: not found ramdisk-bak.gz <-------------"; + # echo "-------------> stage1.3 warning: it will invalidate Recovery System <-------------"; + # sync; + # fi + cp -pv /mnt/usb0/install/ramdisk.gz $2/ramdisk.gz + fi + + echo " -----> copy uImage" + cp -pv $usb_mount_point/install/uImage $2 + wait $! + + echo " -----> copy rootfs.tar.gz (wait a few minutes)" + rsync -P $usb_mount_point/install/rootfs.tar.gz $2 + wait $! + sync + + umount $2; + else + error_inf_print "Error! mount "$1" failed! Counldn't copy file to SSD! Please try again" + exit 1; + fi +} + +#相关分区 +#U盘 +start_stage1_by_local() +{ + #挂载U盘 + mount $usb_partition $usb_mount_point; + sleep 1; + if mountpoint -q $usb_mount_point; then + if [ -f $usb_mount_point/install/error.log ]; then + echo "-------------> stage1 warning: found error.log <-------------" + echo "-------------> stage1 warning: backup this error.log <-------------" + mv $usb_mount_point/install/error.log $usb_mount_point/install/error.log.bak + fi + + echo "-------------> stage1 mount "$usb_partition" success <-------------"; + + check_file_for_safe; + echo "" + fdisk_SSD; + echo "" + format_all_partition; + echo "" + #参数含义:参数1 backup分区的设备 参数2 backup分区的挂载点 + if [ -e $backup_partition ]; then + copy_file_to_SSD $backup_partition $backup_mount_point + else + copy_file_to_SSD $root_partition $root_mount_point + fi + + umount /mnt/usb0; + else + error_inf_print "mount USB disk failed! Please check USB format(fat32?) and try again!" + fi +} + +check_usb_name() +{ + if [ ! -e $usb_partition ]; then + # echo "warning!!! not found "$usb_partition + # echo "warning!!! will mount "$usb_partition_bak" as UDisk" + usb_partition=$usb_partition_bak + fi +} + +check_mmc_name() +{ + if [ ! -e $mmc_partition ]; then + # echo "warning!!! not found "$mmc_partition + # echo "warning!!! will mount "$mmc_partition_bak" as mmc" + mmc_partition=$mmc_partition_bak + fi +} + +check_install_file() +{ + check_usb_name + check_mmc_name + + if [ ! -e $usb_partition ]; then + usb_partition=$mmc_partition + else + mount $usb_partition $usb_mount_point; + if [ ! -d $usb_mount_point"/install" ]; then + echo "warning!!! not found /install dir in usb" + echo "use tf card install way" + umount $usb_mount_point; + usb_partition=$mmc_partition + else + umount $usb_mount_point; + fi + fi +} + +check_cmdline() +{ + uboot_install_fix=0 + install_way=0 + ins_way=$(cat /proc/cmdline | grep ins_way) + if [ -z "$ins_way" ]; then + return 1; + fi + ins_way=$(cat /proc/cmdline | grep ins_way=usb) + if [ ! -z "$ins_way" ]; then + install_way=1 + uboot_install_fix=1 + check_usb_name + return 0 + fi + ins_way=$(cat /proc/cmdline | grep ins_way=mmc) + if [ ! -z "$ins_way" ]; then + install_way=2 + uboot_install_fix=1 + check_mmc_name + return 0 + fi + ins_way=$(cat /proc/cmdline | grep ins_way=tftp) + if [ ! -z "$ins_way" ]; then + install_way=3 + uboot_install_fix=1 + return 0 + fi +} + +stage1_entrance() +{ + check_cmdline + + if [ $uboot_install_fix -eq 1 ]; then + if [ $install_way -eq 3 ]; then + /home/sys_config_tool 1 + stage1_result=$? + elif [ $install_way -eq 2 ]; then + usb_partition=$mmc_partition + start_stage1_by_local; + stage1_result=$? + elif [ $install_way -eq 1 ]; then + start_stage1_by_local; + stage1_result=$? + else + stage1_result=1 + fi + else + #这是没有在cmdline里面指定安装方式,旧方法,为了兼容 + check_install_file; + if [ ! -e $usb_partition ]; then + echo "*** tip: not found usb or mmc, use network to download system ***" + /home/sys_config_tool 1 + stage1_result=$? + else + start_stage1_by_local; + stage1_result=$? + fi + fi + echo "-------------> stage1 end <-------------" + if [ $stage1_result -ne 0 ]; then + return 1; + fi +} + +###################start########################## +###################start########################## +###################start########################## + +create_all_mount_point; +stage1_entrance; +if [ $? -ne 0 ]; then + exit 1; +fi +/home/install_disk.sh $usb_partitions diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/recover_backup.sh b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/recover_backup.sh new file mode 100755 index 00000000..ccfdfac9 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/recover_backup.sh @@ -0,0 +1,178 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 1*********************************" +echo "************************this stage for format SSD************************" +echo "*************************************************************************" +echo " "; +sleep 2; + +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + +root_mount_point="/mnt/usb1" +data_mount_point="/mnt/usb2" +swap_mount_point="/mnt/usb3" +backup_mount_point="/mnt/usb4" + +create_all_mount_point() +{ + if [ ! -d $root_mount_point ]; then + mkdir $root_mount_point + fi + if [ ! -d $data_mount_point ]; then + mkdir $data_mount_point + fi + if [ ! -d $swap_mount_point ]; then + mkdir $swap_mount_point + fi + if [ ! -d $backup_mount_point ]; then + mkdir $backup_mount_point + fi +} + +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q $i; then + sync; + umount $i; + fi + } + done +} + +create_all_mount_point() +{ + if [ ! -d $root_mount_point ]; then + mkdir $root_mount_point + fi + if [ ! -d $data_mount_point ]; then + mkdir $data_mount_point + fi + if [ ! -d $swap_mount_point ]; then + mkdir $swap_mount_point + fi + if [ ! -d $backup_mount_point ]; then + mkdir $backup_mount_point + fi +} + +#错误信息输出到backup分区里的error.log +#注意安装系统时backup分区不要存放error.log +#否则会先改名error.log.bak,多次执行后,这样可能会造成数据丢失 +error_inf_write_backup() +{ + if mountpoint -q $backup_mount_point; then + echo $1 >> $backup_mount_point"/error.log"; + else + mount $backup_partition $backup_mount_point; + if mountpoint -q $backup_mount_point; then + echo $1 >> $backup_mount_point"/error.log"; + sync; + umount $backup_mount_point; + else + echo "-------------> log error: couldn't mount backup partition("$backup_partition") <-------------" + fi + fi +} + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + error_inf_write_backup $1 + check_and_umount_for_safe; + echo "*************************************************************************" + echo "" + exit 1; +} + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#format_all_partition 格式化所有分区 必要 + +#检查文件是否齐全 +check_file_for_safe() +{ + echo "-------------> stage1 check_file_for_safe <-------------" + #检查是不是缺少部分文件,不然格式化了才说没文件系统,那么原来的系统就会丢失。 + #能来这里执行,就代表本来就有uImage + if [ ! -f $backup_mount_point"/uImage" ]; then + error_inf_print "Error! not found uImage in backup partition!" + fi + if [ ! -f $backup_mount_point"/rootfs.tar.gz" ]; then + error_inf_print "Error! not found rootfs.tar.gz in backup partition!" + fi +} + +#相关分区 +#所有分区,这是格式化分区的函数 +format_all_partition() +{ + #分区格式化 + if [ -e $root_partition ]; then + echo "-------------> stage1.1 format / partition --- start <-------------" + mke2fs -t ext4 -L rootfs -F $root_partition -O ^metadata_csum >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.1 format / partition --- success <-------------" + else + error_inf_print "Error! format / partition failed! Please try again" + fi + sync + fi + + if [ -e $swap_partition ]; then + echo "-------------> stage1.1 format swap partition --- start <-------------" + mkswap $swap_partition >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.1 format swap partition --- success <-------------" + else + error_inf_print "Error! format swap partition failed! Please try again" + fi + sync + fi + return 0; +} + +start_stage1() +{ + sleep 1; + sync; + create_all_mount_point; + mount $backup_partition $backup_mount_point; + if mountpoint -q $backup_mount_point; then + if [ -f $backup_mount_point"/error.log" ]; then + echo "-------------> stage1 warning: found error.log <-------------" + echo "-------------> stage1 warning: rename error.log as error.log.bak <-------------" + mv $backup_mount_point/error.log $backup_mount_point/error.log.bak + fi + + check_file_for_safe; + if [ $? -eq 1 ]; then + exit 1; + fi + umount $backup_mount_point; + fi + format_all_partition; +} + +###################start########################## +###################start########################## +###################start########################## + +check_and_umount_for_safe; +start_stage1; +check_and_umount_for_safe; + +echo "-------------> stage1 end <-------------" + +/home/recover_disk.sh diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/recover_disk.sh b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/recover_disk.sh new file mode 100755 index 00000000..84afef83 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/recover_disk.sh @@ -0,0 +1,226 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 2*********************************" +echo "*******************uzip system and setup it with fstab*******************" +echo "*************************************************************************" +echo " "; +sleep 2; + +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + +root_mount_point="/mnt/usb1" +data_mount_point="/mnt/usb2" +swap_mount_point="/mnt/usb3" +backup_mount_point="/mnt/usb4" + +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q $i; then + sync; + umount $i; + fi + } + done +} + +#错误信息输出到backup分区里的error.log +#注意安装系统时backup分区不要存放error.log +#否则会先改名error.log.bak,多次执行后,这样可能会造成数据丢失 +error_inf_write_backup() +{ + if mountpoint -q $backup_mount_point; then + echo $1 >> $backup_mount_point"/error.log"; + else + mount $backup_partition $backup_mount_point; + if mountpoint -q $backup_mount_point; then + echo $1 >> $backup_mount_point"/error.log"; + sync; + umount $backup_mount_point; + else + echo "-------------> log error: couldn't mount backup partition("$backup_partition") <-------------" + fi + fi +} + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + error_inf_write_backup $1 + check_and_umount_for_safe; + echo "*************************************************************************" + echo "" + exit 1; +} + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#uzip_rootfs 解压文件系统到根文件分区 必要 +#copy_uimage_to_boot 复制内核到/boot目录(没做boot分区)必要 +#copy_file_to_data 复制home opt var到data分区 不一定,根据fstab而定 + +uzip_rootfs() +{ + echo "-------------> stage2.1 uzip_rootfs <-------------"; + + mount $root_partition $root_mount_point; + sync; + mount $backup_partition $backup_mount_point; + sync; + + if [ -e "/dev/fb0" ]; then + show_process_dev="/dev/tty0" + else + if [ -e "/dev/console" ]; then + show_process_dev="/dev/console" + else + show_process_dev="/dev/tty0" + fi + fi + + echo "can observe process in screen" + pv $backup_mount_point/rootfs.tar.gz 2>$show_process_dev | tar -xzf - -C $root_mount_point; + if [ $? -ne 0 ]; then + error_inf_print "Error! unzip rootfs.tar.gz failed!" + fi + + check_and_umount_for_safe; + return 0; +} + +copy_uimage_to_boot() +{ + echo "-------------> stage2.2 copy_uimage_to_boot <-------------"; + + mount $root_partition $root_mount_point; + sync; + mount $backup_partition $backup_mount_point; + sync; + + cp -a $backup_mount_point/uImage $root_mount_point/boot/; + if [ $? -ne 0 ]; then + error_inf_print "Error! copy uImage to /boot/ failed!" + fi + + check_and_umount_for_safe; + return 0; +} + +copy_fstab() +{ + echo "-------------> stage2.3 copy fstab to /etc/fstab <-------------" + sda1_partition_target=0 + sda2_partition_target=0 + sda3_partition_target=0 + sda4_partition_target=0 + if [ -e $root_partition ]; then + sda1_partition_target=1; + fi + if [ -e $data_partition ]; then + sda2_partition_target=1; + fi + if [ -e $swap_partition ]; then + sda3_partition_target=1; + fi + if [ -e $backup_partition ]; then + sda4_partition_target=1; + fi + + mount $root_partition $root_mount_point; + sync; + mv $root_mount_point/etc/fstab $root_mount_point/etc/fstab_ori; + cp "/home/fstab/"$sda4_partition_target$sda3_partition_target$sda2_partition_target$sda1_partition_target"part_fstab" $root_mount_point/etc/fstab; + + check_and_umount_for_safe; + return 0; +} + + +#相关分区 +#data 分区 +#/ 分区 +#/分区里面的/home /opt /var复制到data分区,然后删除自身的/home /opt /var +copy_file_to_data() +{ + echo "-------------> stage2.4 update data partition <-------------"; + + mount $root_partition $root_mount_point + sync + mount $data_partition $data_mount_point + sync + + #必须重置dpkg的记录,否则就会提示什么包都装好了,但是程序提示找不到 + # if [ -d $2/var/lib/dpkg ]; then + # { + # echo "-------------> stage2.3 delete dpkg inf in data partition <-------------" + # rm -r $2/var/lib/dpkg; + # sync; + # } + # fi + # echo "-------------> stage2.3 copy dpkg inf to data partition <-------------" + # cp -a $4/var/lib/dpkg $2/var/lib + # sync; + # sleep 1; + + #先保留mysql的数据,然后删除var,复制var过来,然后再恢复mysql的数据 + if [ -d $data_mount_point/var ]; then + if [ -d $data_mount_point/var/lib/mysql ]; then + echo "-------------> stage2.3 backup mysql data to data partition <-------------"; + cp -a $data_mount_point/var/lib/mysql $data_mount_point/; + sync; + fi + rm -r $data_mount_point/var + fi + cp -a $root_mount_point/var $data_mount_point/var + if [ -d $data_mount_point/mysql ]; then + rm -r $data_mount_point/var/lib/mysql 2>/dev/null + cp -a $data_mount_point/mysql $data_mount_point/var/lib/mysql + fi + rm -r $root_mount_point/var; + sync; + + rm -r $root_mount_point/home; + sync; + + rm -r $root_mount_point/opt; + sync; + + check_and_umount_for_safe; +} + +#相关分区 +#backup分区 +start_stage2() +{ + #执行三个阶段的操作 + uzip_rootfs; + copy_uimage_to_boot; + copy_fstab; + if [ -e $data_partition ]; then + copy_file_to_data; + fi +} + +###################start########################## +###################start########################## +###################start########################## + +#防止第一个阶段因未知原因而导致没有解除挂载 +check_and_umount_for_safe; +start_stage2; +check_and_umount_for_safe; + +echo "-------------> stage2 end <-------------" + +/home/recover_reboot.sh diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/recover_reboot.sh b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/recover_reboot.sh new file mode 100755 index 00000000..70db3c6f --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/recover_reboot.sh @@ -0,0 +1,35 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 3*********************************" +echo "*******************this stage for check log and reboot*******************" +echo "*************************************************************************" +echo " "; + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#防止前面的脚本出现错误,导致没有解除挂载一些已经挂载的分区。 +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q i; then + { + sync; + umount i; + } + fi + } + done +} + +#防止前面的脚本出现错误,导致没有解除挂载一些已经挂载的分区。 +check_and_umount_for_safe; +/home/sys_config_tool + +echo "-------------> stage3 reboot system <-------------" +#检查是否有错误记录文件,则之前的脚本执行时出错 +reboot -f +echo "-------------> stage3 end <-------------" diff --git a/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/sys_config_tool b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/sys_config_tool new file mode 100755 index 00000000..7152bc8a Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_iso_ramdisk_overlay/home/sys_config_tool differ diff --git a/board/loongson/ls2k1000la/rootfs_mini_overlay/boot/.gitignore b/board/loongson/ls2k1000la/rootfs_mini_overlay/boot/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/board/loongson/ls2k1000la/rootfs_mini_overlay/etc/ssh/sshd_config b/board/loongson/ls2k1000la/rootfs_mini_overlay/etc/ssh/sshd_config new file mode 100644 index 00000000..613cf243 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_mini_overlay/etc/ssh/sshd_config @@ -0,0 +1,117 @@ +# $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $ + +# This is the sshd server system-wide configuration file. See +# sshd_config(5) for more information. + +# This sshd was compiled with PATH=/bin:/sbin:/usr/bin:/usr/sbin + +# The strategy used for options in the default sshd_config shipped with +# OpenSSH is to specify options with their default value where +# possible, but leave them commented. Uncommented options override the +# default value. + +#Port 22 +#AddressFamily any +#ListenAddress 0.0.0.0 +#ListenAddress :: + +#HostKey /etc/ssh/ssh_host_rsa_key +#HostKey /etc/ssh/ssh_host_ecdsa_key +#HostKey /etc/ssh/ssh_host_ed25519_key + +# Ciphers and keying +#RekeyLimit default none + +# Logging +#SyslogFacility AUTH +#LogLevel INFO + +# Authentication: + +#LoginGraceTime 2m +#PermitRootLogin prohibit-password +PermitRootLogin no +#StrictModes yes +#MaxAuthTries 6 +#MaxSessions 10 + +#PubkeyAuthentication yes + +# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 +# but this is overridden so installations will only check .ssh/authorized_keys +AuthorizedKeysFile .ssh/authorized_keys + +#AuthorizedPrincipalsFile none + +#AuthorizedKeysCommand none +#AuthorizedKeysCommandUser nobody + +# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts +#HostbasedAuthentication no +# Change to yes if you don't trust ~/.ssh/known_hosts for +# HostbasedAuthentication +#IgnoreUserKnownHosts no +# Don't read the user's ~/.rhosts and ~/.shosts files +#IgnoreRhosts yes + +# To disable tunneled clear text passwords, change to no here! +#PasswordAuthentication yes +#PermitEmptyPasswords no + +# Change to no to disable s/key passwords +#ChallengeResponseAuthentication yes + +# Kerberos options +#KerberosAuthentication no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes +#KerberosGetAFSToken no + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes + +# Set this to 'yes' to enable PAM authentication, account processing, +# and session processing. If this is enabled, PAM authentication will +# be allowed through the ChallengeResponseAuthentication and +# PasswordAuthentication. Depending on your PAM configuration, +# PAM authentication via ChallengeResponseAuthentication may bypass +# the setting of "PermitRootLogin without-password". +# If you just want the PAM account and session checks to run without +# PAM authentication, then enable this but set PasswordAuthentication +# and ChallengeResponseAuthentication to 'no'. +#UsePAM no + +#AllowAgentForwarding yes +#AllowTcpForwarding yes +#GatewayPorts no +#X11Forwarding no +#X11DisplayOffset 10 +#X11UseLocalhost yes +#PermitTTY yes +#PrintMotd yes +#PrintLastLog yes +#TCPKeepAlive yes +#PermitUserEnvironment no +#Compression delayed +#ClientAliveInterval 0 +#ClientAliveCountMax 3 +#UseDNS no +#PidFile /var/run/sshd.pid +#MaxStartups 10:30:100 +#PermitTunnel no +#ChrootDirectory none +#VersionAddendum none + +# no default banner path +#Banner none + +# override default of no subsystems +Subsystem sftp /usr/libexec/sftp-server + +# Example of overriding settings on a per-user basis +#Match User anoncvs +# X11Forwarding no +# AllowTcpForwarding no +# PermitTTY no +# ForceCommand cvs server diff --git a/board/loongson/ls2k1000la/rootfs_mini_overlay/etc/udev/rules.d/80-net-setup-link.rules b/board/loongson/ls2k1000la/rootfs_mini_overlay/etc/udev/rules.d/80-net-setup-link.rules new file mode 100644 index 00000000..7507a2f2 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_mini_overlay/etc/udev/rules.d/80-net-setup-link.rules @@ -0,0 +1,13 @@ +# do not edit this file, it will be overwritten on update + +SUBSYSTEM!="net", GOTO="net_setup_link_end" + +IMPORT{builtin}="path_id" + +ACTION=="remove", GOTO="net_setup_link_end" + +IMPORT{builtin}="net_setup_link" + +NAME=="", ENV{ID_NET_NAME}!="", NAME="$env{ID_NET_SLOT}" + +LABEL="net_setup_link_end" diff --git a/board/loongson/ls2k1000la/rootfs_overlay/boot/.gitignore b/board/loongson/ls2k1000la/rootfs_overlay/boot/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/board/loongson/ls2k1000la/rootfs_overlay/etc/ssh/sshd_config b/board/loongson/ls2k1000la/rootfs_overlay/etc/ssh/sshd_config new file mode 100644 index 00000000..df0c993a --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_overlay/etc/ssh/sshd_config @@ -0,0 +1,117 @@ +# $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $ + +# This is the sshd server system-wide configuration file. See +# sshd_config(5) for more information. + +# This sshd was compiled with PATH=/bin:/sbin:/usr/bin:/usr/sbin + +# The strategy used for options in the default sshd_config shipped with +# OpenSSH is to specify options with their default value where +# possible, but leave them commented. Uncommented options override the +# default value. + +#Port 22 +#AddressFamily any +#ListenAddress 0.0.0.0 +#ListenAddress :: + +#HostKey /etc/ssh/ssh_host_rsa_key +#HostKey /etc/ssh/ssh_host_ecdsa_key +#HostKey /etc/ssh/ssh_host_ed25519_key + +# Ciphers and keying +#RekeyLimit default none + +# Logging +#SyslogFacility AUTH +#LogLevel INFO + +# Authentication: + +#LoginGraceTime 2m +#PermitRootLogin prohibit-password +PermitRootLogin yes +#StrictModes yes +#MaxAuthTries 6 +#MaxSessions 10 + +#PubkeyAuthentication yes + +# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 +# but this is overridden so installations will only check .ssh/authorized_keys +AuthorizedKeysFile .ssh/authorized_keys + +#AuthorizedPrincipalsFile none + +#AuthorizedKeysCommand none +#AuthorizedKeysCommandUser nobody + +# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts +#HostbasedAuthentication no +# Change to yes if you don't trust ~/.ssh/known_hosts for +# HostbasedAuthentication +#IgnoreUserKnownHosts no +# Don't read the user's ~/.rhosts and ~/.shosts files +#IgnoreRhosts yes + +# To disable tunneled clear text passwords, change to no here! +#PasswordAuthentication yes +PermitEmptyPasswords yes + +# Change to no to disable s/key passwords +#ChallengeResponseAuthentication yes + +# Kerberos options +#KerberosAuthentication no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes +#KerberosGetAFSToken no + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes + +# Set this to 'yes' to enable PAM authentication, account processing, +# and session processing. If this is enabled, PAM authentication will +# be allowed through the ChallengeResponseAuthentication and +# PasswordAuthentication. Depending on your PAM configuration, +# PAM authentication via ChallengeResponseAuthentication may bypass +# the setting of "PermitRootLogin without-password". +# If you just want the PAM account and session checks to run without +# PAM authentication, then enable this but set PasswordAuthentication +# and ChallengeResponseAuthentication to 'no'. +#UsePAM no + +#AllowAgentForwarding yes +#AllowTcpForwarding yes +#GatewayPorts no +#X11Forwarding no +#X11DisplayOffset 10 +#X11UseLocalhost yes +#PermitTTY yes +#PrintMotd yes +#PrintLastLog yes +#TCPKeepAlive yes +#PermitUserEnvironment no +#Compression delayed +#ClientAliveInterval 0 +#ClientAliveCountMax 3 +#UseDNS no +#PidFile /var/run/sshd.pid +#MaxStartups 10:30:100 +#PermitTunnel no +#ChrootDirectory none +#VersionAddendum none + +# no default banner path +#Banner none + +# override default of no subsystems +Subsystem sftp /usr/libexec/sftp-server + +# Example of overriding settings on a per-user basis +#Match User anoncvs +# X11Forwarding no +# AllowTcpForwarding no +# PermitTTY no +# ForceCommand cvs server diff --git a/board/loongson/ls2k1000la/rootfs_overlay/etc/udev/rules.d/80-net-setup-link.rules b/board/loongson/ls2k1000la/rootfs_overlay/etc/udev/rules.d/80-net-setup-link.rules new file mode 100644 index 00000000..7507a2f2 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_overlay/etc/udev/rules.d/80-net-setup-link.rules @@ -0,0 +1,13 @@ +# do not edit this file, it will be overwritten on update + +SUBSYSTEM!="net", GOTO="net_setup_link_end" + +IMPORT{builtin}="path_id" + +ACTION=="remove", GOTO="net_setup_link_end" + +IMPORT{builtin}="net_setup_link" + +NAME=="", ENV{ID_NET_NAME}!="", NAME="$env{ID_NET_SLOT}" + +LABEL="net_setup_link_end" diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8192ee_fw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8192ee_fw.bin new file mode 100644 index 00000000..7e5bcc0e Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8192ee_fw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8192eu_fw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8192eu_fw.bin new file mode 100644 index 00000000..7a13280c Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8192eu_fw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8723a_fw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8723a_fw.bin new file mode 100644 index 00000000..b736f91e Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8723a_fw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8723b_fw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8723b_fw.bin new file mode 100644 index 00000000..49b2a26f Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8723b_fw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8723bs_config-OBDA8723.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8723bs_config-OBDA8723.bin new file mode 100644 index 00000000..c20970a3 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8723bs_config-OBDA8723.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8723bs_fw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8723bs_fw.bin new file mode 100644 index 00000000..5f77f80a Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8723bs_fw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8723d_config.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8723d_config.bin new file mode 100644 index 00000000..bb15fcd4 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8723d_config.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8723d_fw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8723d_fw.bin new file mode 100644 index 00000000..0997fd76 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8723d_fw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8761a_fw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8761a_fw.bin new file mode 100644 index 00000000..ee4f2018 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8761a_fw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8812ae_fw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8812ae_fw.bin new file mode 100644 index 00000000..8aca8d28 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8812ae_fw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8821a_fw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8821a_fw.bin new file mode 100644 index 00000000..c7dffe99 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8821a_fw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8821c_config.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8821c_config.bin new file mode 100644 index 00000000..bb15fcd4 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8821c_config.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8821c_fw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8821c_fw.bin new file mode 100644 index 00000000..b30e645f Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8821c_fw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8822b_config.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8822b_config.bin new file mode 100644 index 00000000..b00270ed Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8822b_config.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8822b_fw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8822b_fw.bin new file mode 100644 index 00000000..5a464614 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8822b_fw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8822cs_config.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8822cs_config.bin new file mode 100644 index 00000000..33ee243d Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8822cs_config.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8822cs_fw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8822cs_fw.bin new file mode 100644 index 00000000..cf51ee96 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8822cs_fw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8822cu_config.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8822cu_config.bin new file mode 100644 index 00000000..91d3f440 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8822cu_config.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8822cu_fw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8822cu_fw.bin new file mode 100644 index 00000000..96fd2f06 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8822cu_fw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8852au_config.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8852au_config.bin new file mode 100644 index 00000000..91d3f440 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8852au_config.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8852au_fw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8852au_fw.bin new file mode 100644 index 00000000..7de4f816 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtl_bt/rtl8852au_fw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8188efw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8188efw.bin new file mode 100644 index 00000000..ac9a430a Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8188efw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8188eufw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8188eufw.bin new file mode 100644 index 00000000..4ae7e1c5 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8188eufw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192cfw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192cfw.bin new file mode 100644 index 00000000..77eb1ebe Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192cfw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192cfwU.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192cfwU.bin new file mode 100644 index 00000000..b231e1d6 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192cfwU.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192cfwU_B.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192cfwU_B.bin new file mode 100644 index 00000000..3a3e3867 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192cfwU_B.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192cufw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192cufw.bin new file mode 100644 index 00000000..3aa75065 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192cufw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192cufw_A.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192cufw_A.bin new file mode 100644 index 00000000..9569d0a2 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192cufw_A.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192cufw_B.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192cufw_B.bin new file mode 100644 index 00000000..96089c4c Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192cufw_B.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192cufw_TMSC.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192cufw_TMSC.bin new file mode 100644 index 00000000..d1b84d48 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192cufw_TMSC.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192defw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192defw.bin new file mode 100644 index 00000000..cbb4b887 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192defw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192eefw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192eefw.bin new file mode 100644 index 00000000..4a034d3a Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192eefw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192eu_ap_wowlan.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192eu_ap_wowlan.bin new file mode 100644 index 00000000..f68d10c6 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192eu_ap_wowlan.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192eu_nic.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192eu_nic.bin new file mode 100644 index 00000000..4a034d3a Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192eu_nic.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192eu_wowlan.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192eu_wowlan.bin new file mode 100644 index 00000000..aebcffc3 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192eu_wowlan.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192sefw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192sefw.bin new file mode 100644 index 00000000..ed4afe85 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8192sefw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8712u.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8712u.bin new file mode 100644 index 00000000..3f965a65 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8712u.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723aufw_A.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723aufw_A.bin new file mode 100644 index 00000000..7accded7 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723aufw_A.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723aufw_B.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723aufw_B.bin new file mode 100644 index 00000000..5c374000 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723aufw_B.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723aufw_B_NoBT.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723aufw_B_NoBT.bin new file mode 100644 index 00000000..8e9952cb Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723aufw_B_NoBT.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723befw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723befw.bin new file mode 100644 index 00000000..25e183cb Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723befw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723befw_36.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723befw_36.bin new file mode 100644 index 00000000..1bb9b9c8 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723befw_36.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723bs_ap_wowlan.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723bs_ap_wowlan.bin new file mode 100644 index 00000000..944bc16c Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723bs_ap_wowlan.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723bs_bt.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723bs_bt.bin new file mode 100644 index 00000000..f29df42f Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723bs_bt.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723bs_nic.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723bs_nic.bin new file mode 100644 index 00000000..8d534053 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723bs_nic.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723bs_wowlan.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723bs_wowlan.bin new file mode 100644 index 00000000..473e29c3 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723bs_wowlan.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723bu_ap_wowlan.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723bu_ap_wowlan.bin new file mode 100644 index 00000000..944bc16c Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723bu_ap_wowlan.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723bu_nic.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723bu_nic.bin new file mode 100644 index 00000000..8d534053 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723bu_nic.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723bu_wowlan.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723bu_wowlan.bin new file mode 100644 index 00000000..473e29c3 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723bu_wowlan.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723defw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723defw.bin new file mode 100644 index 00000000..6d2c9539 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723defw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723fw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723fw.bin new file mode 100644 index 00000000..725f2138 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723fw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723fw_B.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723fw_B.bin new file mode 100644 index 00000000..993c7f6e Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8723fw_B.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8812aefw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8812aefw.bin new file mode 100644 index 00000000..90a04098 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8812aefw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8812aefw_wowlan.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8812aefw_wowlan.bin new file mode 100644 index 00000000..4d0cc358 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8812aefw_wowlan.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8821aefw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8821aefw.bin new file mode 100644 index 00000000..4f84cf94 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8821aefw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8821aefw_29.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8821aefw_29.bin new file mode 100644 index 00000000..f0acde46 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8821aefw_29.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8821aefw_wowlan.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8821aefw_wowlan.bin new file mode 100644 index 00000000..115d49f1 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8821aefw_wowlan.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8822befw.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8822befw.bin new file mode 100644 index 00000000..1fcdbeb2 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/firmware/rtlwifi/rtl8822befw.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/build b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/build new file mode 120000 index 00000000..0ca36de1 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/build @@ -0,0 +1 @@ +/home/loongson/datac2/niuyize/linux-5.10 \ No newline at end of file diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/crypto/michael_mic.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/crypto/michael_mic.ko new file mode 100644 index 00000000..c298e5f1 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/crypto/michael_mic.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/bluetooth/btbcm.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/bluetooth/btbcm.ko new file mode 100644 index 00000000..292a4a83 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/bluetooth/btbcm.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/bluetooth/btintel.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/bluetooth/btintel.ko new file mode 100644 index 00000000..aea47b6f Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/bluetooth/btintel.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/bluetooth/btrtl.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/bluetooth/btrtl.ko new file mode 100644 index 00000000..7a8324fe Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/bluetooth/btrtl.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/bluetooth/btusb.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/bluetooth/btusb.ko new file mode 100644 index 00000000..abe7530a Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/bluetooth/btusb.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/a8293.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/a8293.ko new file mode 100644 index 00000000..fdbfa49b Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/a8293.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/af9013.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/af9013.ko new file mode 100644 index 00000000..e41d3575 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/af9013.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/af9033.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/af9033.ko new file mode 100644 index 00000000..3b2df33c Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/af9033.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/ascot2e.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/ascot2e.ko new file mode 100644 index 00000000..f8e5a410 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/ascot2e.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/atbm8830.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/atbm8830.ko new file mode 100644 index 00000000..8be3e08a Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/atbm8830.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/au8522_common.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/au8522_common.ko new file mode 100644 index 00000000..832f78ee Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/au8522_common.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/au8522_decoder.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/au8522_decoder.ko new file mode 100644 index 00000000..df90309b Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/au8522_decoder.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/au8522_dig.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/au8522_dig.ko new file mode 100644 index 00000000..e20f88a9 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/au8522_dig.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/bcm3510.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/bcm3510.ko new file mode 100644 index 00000000..1c33849a Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/bcm3510.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx22700.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx22700.ko new file mode 100644 index 00000000..155b95ec Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx22700.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx22702.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx22702.ko new file mode 100644 index 00000000..fea47d51 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx22702.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx24110.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx24110.ko new file mode 100644 index 00000000..a9c93f07 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx24110.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx24113.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx24113.ko new file mode 100644 index 00000000..0225d216 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx24113.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx24116.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx24116.ko new file mode 100644 index 00000000..10445a75 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx24116.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx24117.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx24117.ko new file mode 100644 index 00000000..c99a8dbb Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx24117.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx24120.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx24120.ko new file mode 100644 index 00000000..a7b4d6cf Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx24120.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx24123.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx24123.ko new file mode 100644 index 00000000..fc4e5a97 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cx24123.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cxd2099.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cxd2099.ko new file mode 100644 index 00000000..90c56c1c Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cxd2099.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cxd2820r.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cxd2820r.ko new file mode 100644 index 00000000..06ac718f Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cxd2820r.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cxd2841er.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cxd2841er.ko new file mode 100644 index 00000000..6e87fd0a Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cxd2841er.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cxd2880/cxd2880.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cxd2880/cxd2880.ko new file mode 100644 index 00000000..3a7faec7 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/cxd2880/cxd2880.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib0070.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib0070.ko new file mode 100644 index 00000000..9f4ee250 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib0070.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib0090.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib0090.ko new file mode 100644 index 00000000..76b4e4c4 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib0090.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib3000mb.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib3000mb.ko new file mode 100644 index 00000000..057c6d8b Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib3000mb.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib3000mc.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib3000mc.ko new file mode 100644 index 00000000..f35ba93b Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib3000mc.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib7000m.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib7000m.ko new file mode 100644 index 00000000..b6fe8b71 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib7000m.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib7000p.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib7000p.ko new file mode 100644 index 00000000..ed1c9d96 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib7000p.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib8000.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib8000.ko new file mode 100644 index 00000000..71c29f1b Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib8000.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib9000.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib9000.ko new file mode 100644 index 00000000..d1e7a8d4 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dib9000.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dibx000_common.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dibx000_common.ko new file mode 100644 index 00000000..1444bf7c Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dibx000_common.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/drx39xyj/drx39xyj.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/drx39xyj/drx39xyj.ko new file mode 100644 index 00000000..fe2dcc2e Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/drx39xyj/drx39xyj.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/drxd.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/drxd.ko new file mode 100644 index 00000000..1c44faf8 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/drxd.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/drxk.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/drxk.ko new file mode 100644 index 00000000..07a39729 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/drxk.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/ds3000.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/ds3000.ko new file mode 100644 index 00000000..f95e22d1 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/ds3000.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dvb-pll.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dvb-pll.ko new file mode 100644 index 00000000..a8e59ce3 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/dvb-pll.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/ec100.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/ec100.ko new file mode 100644 index 00000000..78860f52 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/ec100.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/helene.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/helene.ko new file mode 100644 index 00000000..7dc62ee9 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/helene.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/horus3a.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/horus3a.ko new file mode 100644 index 00000000..78d0e651 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/horus3a.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/isl6405.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/isl6405.ko new file mode 100644 index 00000000..f15badf0 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/isl6405.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/isl6421.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/isl6421.ko new file mode 100644 index 00000000..7db87110 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/isl6421.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/isl6423.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/isl6423.ko new file mode 100644 index 00000000..6ab92716 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/isl6423.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/itd1000.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/itd1000.ko new file mode 100644 index 00000000..1ac51689 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/itd1000.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/ix2505v.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/ix2505v.ko new file mode 100644 index 00000000..36b2ed5d Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/ix2505v.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/l64781.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/l64781.ko new file mode 100644 index 00000000..ee6792e5 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/l64781.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lg2160.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lg2160.ko new file mode 100644 index 00000000..1b6b63af Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lg2160.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lgdt3305.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lgdt3305.ko new file mode 100644 index 00000000..30c0217a Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lgdt3305.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lgdt3306a.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lgdt3306a.ko new file mode 100644 index 00000000..66db87d9 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lgdt3306a.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lgdt330x.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lgdt330x.ko new file mode 100644 index 00000000..e6e5ab30 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lgdt330x.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lgs8gl5.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lgs8gl5.ko new file mode 100644 index 00000000..9178aa37 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lgs8gl5.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lgs8gxx.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lgs8gxx.ko new file mode 100644 index 00000000..baa6e490 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lgs8gxx.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lnbh25.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lnbh25.ko new file mode 100644 index 00000000..0f169232 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lnbh25.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lnbh29.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lnbh29.ko new file mode 100644 index 00000000..7f1f417d Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lnbh29.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lnbp21.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lnbp21.ko new file mode 100644 index 00000000..6ff309c1 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lnbp21.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lnbp22.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lnbp22.ko new file mode 100644 index 00000000..60aec08e Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/lnbp22.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/m88ds3103.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/m88ds3103.ko new file mode 100644 index 00000000..beccbf9d Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/m88ds3103.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/m88rs2000.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/m88rs2000.ko new file mode 100644 index 00000000..351509ba Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/m88rs2000.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mb86a16.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mb86a16.ko new file mode 100644 index 00000000..793c1650 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mb86a16.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mb86a20s.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mb86a20s.ko new file mode 100644 index 00000000..2a4377fc Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mb86a20s.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mn88443x.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mn88443x.ko new file mode 100644 index 00000000..c3105bf4 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mn88443x.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mn88472.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mn88472.ko new file mode 100644 index 00000000..4ddf919c Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mn88472.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mn88473.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mn88473.ko new file mode 100644 index 00000000..fbbb1fce Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mn88473.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mt312.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mt312.ko new file mode 100644 index 00000000..46be77f3 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mt312.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mt352.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mt352.ko new file mode 100644 index 00000000..44e062c7 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mt352.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mxl5xx.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mxl5xx.ko new file mode 100644 index 00000000..284bfabc Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/mxl5xx.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/nxt200x.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/nxt200x.ko new file mode 100644 index 00000000..da4af140 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/nxt200x.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/nxt6000.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/nxt6000.ko new file mode 100644 index 00000000..3f907123 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/nxt6000.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/or51132.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/or51132.ko new file mode 100644 index 00000000..49e9c290 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/or51132.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/or51211.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/or51211.ko new file mode 100644 index 00000000..908f6710 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/or51211.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/rtl2830.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/rtl2830.ko new file mode 100644 index 00000000..abbbed4f Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/rtl2830.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/rtl2832.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/rtl2832.ko new file mode 100644 index 00000000..da2e4560 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/rtl2832.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/rtl2832_sdr.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/rtl2832_sdr.ko new file mode 100644 index 00000000..dbb5f0e0 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/rtl2832_sdr.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/s5h1409.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/s5h1409.ko new file mode 100644 index 00000000..71b4111e Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/s5h1409.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/s5h1411.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/s5h1411.ko new file mode 100644 index 00000000..ffd49bc5 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/s5h1411.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/s5h1420.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/s5h1420.ko new file mode 100644 index 00000000..c563e17e Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/s5h1420.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/s5h1432.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/s5h1432.ko new file mode 100644 index 00000000..2b6ebe8f Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/s5h1432.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/s921.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/s921.ko new file mode 100644 index 00000000..ce477023 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/s921.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/si2165.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/si2165.ko new file mode 100644 index 00000000..91e7d048 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/si2165.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/si2168.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/si2168.ko new file mode 100644 index 00000000..96c00cc2 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/si2168.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/si21xx.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/si21xx.ko new file mode 100644 index 00000000..ea6e724f Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/si21xx.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/sp2.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/sp2.ko new file mode 100644 index 00000000..2ebc894e Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/sp2.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/sp8870.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/sp8870.ko new file mode 100644 index 00000000..64ecc657 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/sp8870.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/sp887x.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/sp887x.ko new file mode 100644 index 00000000..6b464b7b Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/sp887x.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stb0899.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stb0899.ko new file mode 100644 index 00000000..ce898bf4 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stb0899.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stb6000.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stb6000.ko new file mode 100644 index 00000000..c5fbd4ff Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stb6000.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stb6100.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stb6100.ko new file mode 100644 index 00000000..f9af68f2 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stb6100.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv0288.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv0288.ko new file mode 100644 index 00000000..1500d11c Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv0288.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv0297.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv0297.ko new file mode 100644 index 00000000..6ac271cb Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv0297.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv0299.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv0299.ko new file mode 100644 index 00000000..01f395ff Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv0299.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv0367.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv0367.ko new file mode 100644 index 00000000..b40e3faf Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv0367.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv0900.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv0900.ko new file mode 100644 index 00000000..0e380053 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv0900.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv090x.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv090x.ko new file mode 100644 index 00000000..1c03f038 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv090x.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv0910.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv0910.ko new file mode 100644 index 00000000..a34b13b8 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv0910.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv6110.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv6110.ko new file mode 100644 index 00000000..8e8076c5 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv6110.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv6110x.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv6110x.ko new file mode 100644 index 00000000..caea00d9 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv6110x.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv6111.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv6111.ko new file mode 100644 index 00000000..9218c7fa Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/stv6111.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tc90522.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tc90522.ko new file mode 100644 index 00000000..384b854e Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tc90522.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda10021.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda10021.ko new file mode 100644 index 00000000..e1cc3c47 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda10021.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda10023.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda10023.ko new file mode 100644 index 00000000..fa7bbb1f Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda10023.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda10048.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda10048.ko new file mode 100644 index 00000000..c99957b8 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda10048.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda1004x.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda1004x.ko new file mode 100644 index 00000000..509a336a Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda1004x.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda10071.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda10071.ko new file mode 100644 index 00000000..42871cae Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda10071.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda10086.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda10086.ko new file mode 100644 index 00000000..07f6230c Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda10086.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda18271c2dd.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda18271c2dd.ko new file mode 100644 index 00000000..c1ffc622 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda18271c2dd.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda665x.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda665x.ko new file mode 100644 index 00000000..879c13e6 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda665x.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda8083.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda8083.ko new file mode 100644 index 00000000..68579196 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda8083.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda8261.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda8261.ko new file mode 100644 index 00000000..adb71e26 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda8261.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda826x.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda826x.ko new file mode 100644 index 00000000..cd9cca5f Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tda826x.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/ts2020.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/ts2020.ko new file mode 100644 index 00000000..da7ab3c9 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/ts2020.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tua6100.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tua6100.ko new file mode 100644 index 00000000..3b85d0ce Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/tua6100.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/ves1820.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/ves1820.ko new file mode 100644 index 00000000..79bf0146 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/ves1820.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/ves1x93.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/ves1x93.ko new file mode 100644 index 00000000..39192885 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/ves1x93.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/zd1301_demod.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/zd1301_demod.ko new file mode 100644 index 00000000..4cf1caa5 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/zd1301_demod.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/zl10036.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/zl10036.ko new file mode 100644 index 00000000..311850fd Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/zl10036.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/zl10039.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/zl10039.ko new file mode 100644 index 00000000..a2d9fc60 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/zl10039.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/zl10353.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/zl10353.ko new file mode 100644 index 00000000..d834370c Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/dvb-frontends/zl10353.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/spi/cxd2880-spi.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/spi/cxd2880-spi.ko new file mode 100644 index 00000000..a7f917f2 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/spi/cxd2880-spi.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/e4000.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/e4000.ko new file mode 100644 index 00000000..f9624812 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/e4000.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/fc0011.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/fc0011.ko new file mode 100644 index 00000000..02be46bf Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/fc0011.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/fc0012.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/fc0012.ko new file mode 100644 index 00000000..ae3cda28 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/fc0012.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/fc0013.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/fc0013.ko new file mode 100644 index 00000000..12c9dff8 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/fc0013.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/fc2580.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/fc2580.ko new file mode 100644 index 00000000..bf98f1aa Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/fc2580.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/it913x.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/it913x.ko new file mode 100644 index 00000000..744ee7c6 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/it913x.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/m88rs6000t.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/m88rs6000t.ko new file mode 100644 index 00000000..5a4ec3ae Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/m88rs6000t.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/max2165.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/max2165.ko new file mode 100644 index 00000000..6ce87fb6 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/max2165.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mc44s803.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mc44s803.ko new file mode 100644 index 00000000..0d61d049 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mc44s803.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/msi001.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/msi001.ko new file mode 100644 index 00000000..b862091b Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/msi001.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mt2060.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mt2060.ko new file mode 100644 index 00000000..96499faa Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mt2060.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mt2063.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mt2063.ko new file mode 100644 index 00000000..5133d5c5 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mt2063.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mt20xx.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mt20xx.ko new file mode 100644 index 00000000..191bcd9a Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mt20xx.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mt2131.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mt2131.ko new file mode 100644 index 00000000..430fcb35 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mt2131.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mt2266.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mt2266.ko new file mode 100644 index 00000000..de4f1029 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mt2266.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mxl301rf.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mxl301rf.ko new file mode 100644 index 00000000..b873b8a1 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mxl301rf.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mxl5005s.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mxl5005s.ko new file mode 100644 index 00000000..5cbfaeae Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mxl5005s.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mxl5007t.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mxl5007t.ko new file mode 100644 index 00000000..11e9ba41 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/mxl5007t.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/qm1d1b0004.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/qm1d1b0004.ko new file mode 100644 index 00000000..760f1847 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/qm1d1b0004.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/qm1d1c0042.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/qm1d1c0042.ko new file mode 100644 index 00000000..c4c0bd07 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/qm1d1c0042.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/qt1010.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/qt1010.ko new file mode 100644 index 00000000..f0b1e30f Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/qt1010.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/r820t.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/r820t.ko new file mode 100644 index 00000000..cdbe5fd1 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/r820t.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/si2157.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/si2157.ko new file mode 100644 index 00000000..f47aa823 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/si2157.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tda18212.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tda18212.ko new file mode 100644 index 00000000..aeb726db Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tda18212.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tda18218.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tda18218.ko new file mode 100644 index 00000000..42c03306 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tda18218.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tda18250.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tda18250.ko new file mode 100644 index 00000000..b163cac1 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tda18250.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tda18271.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tda18271.ko new file mode 100644 index 00000000..9192aa2e Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tda18271.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tda827x.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tda827x.ko new file mode 100644 index 00000000..5d165f79 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tda827x.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tda8290.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tda8290.ko new file mode 100644 index 00000000..7b7e7957 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tda8290.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tda9887.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tda9887.ko new file mode 100644 index 00000000..68448eeb Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tda9887.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tea5761.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tea5761.ko new file mode 100644 index 00000000..4c7cae7a Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tea5761.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tea5767.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tea5767.ko new file mode 100644 index 00000000..7fdcf728 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tea5767.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tua9001.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tua9001.ko new file mode 100644 index 00000000..20b2dbd4 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tua9001.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tuner-simple.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tuner-simple.ko new file mode 100644 index 00000000..334e3e74 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tuner-simple.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tuner-types.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tuner-types.ko new file mode 100644 index 00000000..b227610a Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tuner-types.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tuner-xc2028.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tuner-xc2028.ko new file mode 100644 index 00000000..010dc28c Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/tuner-xc2028.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/xc4000.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/xc4000.ko new file mode 100644 index 00000000..0a8f6e9f Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/xc4000.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/xc5000.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/xc5000.ko new file mode 100644 index 00000000..3a8b4fa5 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/media/tuners/xc5000.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/misc/eeprom/eeprom_93cx6.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/misc/eeprom/eeprom_93cx6.ko new file mode 100644 index 00000000..4704e139 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/misc/eeprom/eeprom_93cx6.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/ipw2x00/ipw2100.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/ipw2x00/ipw2100.ko new file mode 100644 index 00000000..6a4ec292 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/ipw2x00/ipw2100.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/ipw2x00/ipw2200.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/ipw2x00/ipw2200.ko new file mode 100644 index 00000000..4fe98304 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/ipw2x00/ipw2200.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/ipw2x00/libipw.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/ipw2x00/libipw.ko new file mode 100644 index 00000000..a1c527b4 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/ipw2x00/libipw.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/iwlegacy/iwl3945.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/iwlegacy/iwl3945.ko new file mode 100644 index 00000000..2c0752ee Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/iwlegacy/iwl3945.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/iwlegacy/iwl4965.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/iwlegacy/iwl4965.ko new file mode 100644 index 00000000..89791429 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/iwlegacy/iwl4965.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/iwlegacy/iwlegacy.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/iwlegacy/iwlegacy.ko new file mode 100644 index 00000000..626f6392 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/iwlegacy/iwlegacy.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/iwlwifi/dvm/iwldvm.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/iwlwifi/dvm/iwldvm.ko new file mode 100644 index 00000000..31ca329a Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/iwlwifi/dvm/iwldvm.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko new file mode 100644 index 00000000..041fe31e Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/iwlwifi/mvm/iwlmvm.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/iwlwifi/mvm/iwlmvm.ko new file mode 100644 index 00000000..32122d04 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/intel/iwlwifi/mvm/iwlmvm.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtl818x/rtl8180/rtl818x_pci.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtl818x/rtl8180/rtl818x_pci.ko new file mode 100644 index 00000000..8b1bc673 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtl818x/rtl8180/rtl818x_pci.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtl818x/rtl8187/rtl8187.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtl818x/rtl8187/rtl8187.ko new file mode 100644 index 00000000..6a5b2436 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtl818x/rtl8187/rtl8187.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.ko new file mode 100644 index 00000000..1056be48 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8723d.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8723d.ko new file mode 100644 index 00000000..ae1ae53d Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8723d.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8723de.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8723de.ko new file mode 100644 index 00000000..4e17a9e5 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8723de.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8821c.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8821c.ko new file mode 100644 index 00000000..3aeab861 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8821c.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8821ce.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8821ce.ko new file mode 100644 index 00000000..a30c567c Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8821ce.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822b.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822b.ko new file mode 100644 index 00000000..102c33c1 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822b.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822be.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822be.ko new file mode 100644 index 00000000..a82154ed Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822be.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822c.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822c.ko new file mode 100644 index 00000000..0cc3dfe6 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822c.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822ce.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822ce.ko new file mode 100644 index 00000000..fba19d19 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822ce.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_core.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_core.ko new file mode 100644 index 00000000..0f01e0ee Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_core.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_pci.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_pci.ko new file mode 100644 index 00000000..4ffa7de6 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/drivers/net/wireless/realtek/rtw88/rtw88_pci.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/fs/nfs/flexfilelayout/nfs_layout_flexfiles.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/fs/nfs/flexfilelayout/nfs_layout_flexfiles.ko new file mode 100644 index 00000000..dcb07e5a Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/fs/nfs/flexfilelayout/nfs_layout_flexfiles.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/net/ipv4/tcp_bic.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/net/ipv4/tcp_bic.ko new file mode 100644 index 00000000..0ac93e95 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/net/ipv4/tcp_bic.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/net/ipv4/tcp_htcp.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/net/ipv4/tcp_htcp.ko new file mode 100644 index 00000000..51f3885a Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/net/ipv4/tcp_htcp.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/net/ipv4/tcp_westwood.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/net/ipv4/tcp_westwood.ko new file mode 100644 index 00000000..a9ef0e23 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/net/ipv4/tcp_westwood.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/net/wireless/lib80211_crypt_tkip.ko b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/net/wireless/lib80211_crypt_tkip.ko new file mode 100644 index 00000000..51ea84b3 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/kernel/net/wireless/lib80211_crypt_tkip.ko differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.alias b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.alias new file mode 100644 index 00000000..a6916326 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.alias @@ -0,0 +1,667 @@ +# Aliases extracted from modules themselves. +alias nfs-layouttype4-4 nfs_layout_flexfiles +alias crypto-michael_mic michael_mic +alias michael_mic michael_mic +alias pci:v00008086d00001043sv00008086sd000025A0bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002598bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002596bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002593bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002591bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002592bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002590bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002587bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002586bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002585bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002581bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002583bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002582bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002580bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002570bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002567bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002566bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002565bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002561bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002563bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002562bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002560bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002555bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002554bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002553bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002551bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002550bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd0000252Dbc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd0000252Cbc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd0000252Bbc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002529bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002528bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002527bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002523bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002522bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002526bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002525bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002524bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002521bc*sc*i* ipw2100 +alias pci:v00008086d00001043sv00008086sd00002520bc*sc*i* ipw2100 +alias pci:v00008086d00004224sv*sd*bc*sc*i* ipw2200 +alias pci:v00008086d00004223sv*sd*bc*sc*i* ipw2200 +alias pci:v00008086d00004221sv*sd*bc*sc*i* ipw2200 +alias pci:v00008086d00004220sv*sd*bc*sc*i* ipw2200 +alias pci:v00008086d0000104Fsv*sd*bc*sc*i* ipw2200 +alias pci:v00008086d00001043sv00008086sd00002762bc*sc*i* ipw2200 +alias pci:v00008086d00001043sv00008086sd00002761bc*sc*i* ipw2200 +alias pci:v00008086d00001043sv00008086sd00002754bc*sc*i* ipw2200 +alias pci:v00008086d00001043sv00008086sd00002753bc*sc*i* ipw2200 +alias pci:v00008086d00001043sv00008086sd00002752bc*sc*i* ipw2200 +alias pci:v00008086d00001043sv00008086sd00002751bc*sc*i* ipw2200 +alias pci:v00008086d00001043sv00008086sd00002742bc*sc*i* ipw2200 +alias pci:v00008086d00001043sv0000103Csd00002741bc*sc*i* ipw2200 +alias pci:v00008086d00001043sv00008086sd00002741bc*sc*i* ipw2200 +alias pci:v00008086d00001043sv00008086sd00002732bc*sc*i* ipw2200 +alias pci:v00008086d00001043sv00008086sd00002731bc*sc*i* ipw2200 +alias pci:v00008086d00001043sv00008086sd00002722bc*sc*i* ipw2200 +alias pci:v00008086d00001043sv00008086sd00002721bc*sc*i* ipw2200 +alias pci:v00008086d00001043sv00008086sd00002712bc*sc*i* ipw2200 +alias pci:v00008086d00001043sv00008086sd00002711bc*sc*i* ipw2200 +alias pci:v00008086d00001043sv00008086sd00002702bc*sc*i* ipw2200 +alias pci:v00008086d00001043sv00008086sd00002701bc*sc*i* ipw2200 +alias iwl4965 iwl4965 +alias pci:v00008086d00004230sv*sd*bc*sc*i* iwl4965 +alias pci:v00008086d00004229sv*sd*bc*sc*i* iwl4965 +alias pci:v00008086d00004227sv*sd*bc*sc*i* iwl3945 +alias pci:v00008086d00004222sv*sd*bc*sc*i* iwl3945 +alias pci:v00008086d00004227sv*sd00001014bc*sc*i* iwl3945 +alias pci:v00008086d00004222sv*sd00001044bc*sc*i* iwl3945 +alias pci:v00008086d00004222sv*sd00001034bc*sc*i* iwl3945 +alias pci:v00008086d00004222sv*sd00001005bc*sc*i* iwl3945 +alias pci:v00008086d00007E80sv*sd*bc*sc*i* iwlwifi +alias pci:v00008086d00002729sv*sd*bc*sc*i* iwlwifi +alias pci:v00008086d00007AF0sv*sd00000A10bc*sc*i* iwlwifi +alias pci:v00008086d00007AF0sv*sd00000510bc*sc*i* iwlwifi +alias pci:v00008086d00007AF0sv*sd00000310bc*sc*i* iwlwifi +alias pci:v00008086d00007AF0sv*sd000000B0bc*sc*i* iwlwifi +alias pci:v00008086d00007AF0sv*sd00000098bc*sc*i* iwlwifi +alias pci:v00008086d00007AF0sv*sd00000090bc*sc*i* iwlwifi +alias pci:v00008086d00007A70sv*sd00000A10bc*sc*i* iwlwifi +alias pci:v00008086d00007A70sv*sd00000510bc*sc*i* iwlwifi +alias pci:v00008086d00007A70sv*sd00000310bc*sc*i* iwlwifi +alias pci:v00008086d00007A70sv*sd000000B0bc*sc*i* iwlwifi +alias pci:v00008086d00007A70sv*sd00000098bc*sc*i* iwlwifi +alias pci:v00008086d00007A70sv*sd00000090bc*sc*i* iwlwifi +alias pci:v00008086d00002726sv*sd00004070bc*sc*i* iwlwifi +alias pci:v00008086d00002726sv*sd00002074bc*sc*i* iwlwifi +alias pci:v00008086d00002726sv*sd00000510bc*sc*i* iwlwifi +alias pci:v00008086d00002726sv*sd000000B0bc*sc*i* iwlwifi +alias pci:v00008086d00002726sv*sd00000098bc*sc*i* iwlwifi +alias pci:v00008086d00002726sv*sd00000090bc*sc*i* iwlwifi +alias pci:v00008086d00002726sv*sd0000007Cbc*sc*i* iwlwifi +alias pci:v00008086d00002726sv*sd00000078bc*sc*i* iwlwifi +alias pci:v00008086d00002726sv*sd00000074bc*sc*i* iwlwifi +alias pci:v00008086d00002726sv*sd00000070bc*sc*i* iwlwifi +alias pci:v00008086d00002725sv*sd000000B0bc*sc*i* iwlwifi +alias pci:v00008086d00002725sv*sd00006024bc*sc*i* iwlwifi +alias pci:v00008086d00002725sv*sd00006020bc*sc*i* iwlwifi +alias pci:v00008086d00002725sv*sd00004020bc*sc*i* iwlwifi +alias pci:v00008086d00002725sv*sd0000E024bc*sc*i* iwlwifi +alias pci:v00008086d00002725sv*sd0000E020bc*sc*i* iwlwifi +alias pci:v00008086d00002725sv*sd00000A10bc*sc*i* iwlwifi +alias pci:v00008086d00002725sv*sd00000510bc*sc*i* iwlwifi +alias pci:v00008086d00002725sv*sd00000310bc*sc*i* iwlwifi +alias pci:v00008086d00002725sv*sd00000024bc*sc*i* iwlwifi +alias pci:v00008086d00002725sv*sd00000020bc*sc*i* iwlwifi +alias pci:v00008086d00002725sv*sd00000090bc*sc*i* iwlwifi +alias pci:v00008086d00002723sv*sd*bc*sc*i* iwlwifi +alias pci:v00008086d00002720sv*sd*bc*sc*i* iwlwifi +alias pci:v00008086d0000A0F0sv*sd*bc*sc*i* iwlwifi +alias pci:v00008086d000043F0sv*sd*bc*sc*i* iwlwifi +alias pci:v00008086d00004DF0sv*sd*bc*sc*i* iwlwifi +alias pci:v00008086d00003DF0sv*sd*bc*sc*i* iwlwifi +alias pci:v00008086d000034F0sv*sd*bc*sc*i* iwlwifi +alias pci:v00008086d000006F0sv*sd*bc*sc*i* iwlwifi +alias pci:v00008086d000002F0sv*sd*bc*sc*i* iwlwifi +alias pci:v00008086d0000A370sv*sd*bc*sc*i* iwlwifi +alias pci:v00008086d00009DF0sv*sd*bc*sc*i* iwlwifi +alias pci:v00008086d000031DCsv*sd*bc*sc*i* iwlwifi +alias pci:v00008086d000030DCsv*sd*bc*sc*i* iwlwifi +alias pci:v00008086d0000271Csv*sd*bc*sc*i* iwlwifi +alias pci:v00008086d0000271Bsv*sd*bc*sc*i* iwlwifi +alias pci:v00008086d00002526sv*sd*bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00009074bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00000014bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00000012bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00001012bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00003E01bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00003E02bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00001014bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00000850bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00000950bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00000930bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00000910bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00008130bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00009110bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00000810bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00008010bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00008050bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00008110bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00009010bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00000150bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00000050bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd000010D0bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00001010bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00000130bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00001130bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00001110bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00000110bc*sc*i* iwlwifi +alias pci:v00008086d000024FDsv*sd00000010bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00004010bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00000000bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00000930bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00000950bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00000850bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00000910bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00000810bc*sc*i* iwlwifi +alias pci:v00008086d000024F6sv*sd00000030bc*sc*i* iwlwifi +alias pci:v00008086d000024F5sv*sd00000010bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00000044bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00000004bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00009150bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00009050bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00008150bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00008050bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00009132bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00008132bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00009130bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00008130bc*sc*i* iwlwifi +alias pci:v00008086d000024F4sv*sd0000D030bc*sc*i* iwlwifi +alias pci:v00008086d000024F4sv*sd0000C030bc*sc*i* iwlwifi +alias pci:v00008086d000024F4sv*sd00009030bc*sc*i* iwlwifi +alias pci:v00008086d000024F4sv*sd00008030bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00009110bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00009010bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00008110bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00008010bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd0000B0B0bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd0000D0B0bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd0000D050bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd0000C050bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd0000D010bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd0000C110bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd0000C010bc*sc*i* iwlwifi +alias pci:v00008086d000024F4sv*sd00001030bc*sc*i* iwlwifi +alias pci:v00008086d000024F4sv*sd00000030bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00001150bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00000150bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00001050bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00000250bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00000050bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00001110bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00001012bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00000012bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd000001F0bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00000110bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00001132bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00000132bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00001130bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00000130bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd000010B0bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00001010bc*sc*i* iwlwifi +alias pci:v00008086d000024F3sv*sd00000010bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00009E10bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00009400bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00009000bc*sc*i* iwlwifi +alias pci:v00008086d0000095Bsv*sd0000520Abc*sc*i* iwlwifi +alias pci:v00008086d0000095Bsv*sd00005212bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00005F10bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00005490bc*sc*i* iwlwifi +alias pci:v00008086d0000095Bsv*sd00005290bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00005590bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00005190bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00005090bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00005420bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd0000502Abc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00005020bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00009410bc*sc*i* iwlwifi +alias pci:v00008086d0000095Bsv*sd00009310bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00009510bc*sc*i* iwlwifi +alias pci:v00008086d0000095Bsv*sd00009200bc*sc*i* iwlwifi +alias pci:v00008086d0000095Bsv*sd00009210bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00009112bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00009110bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd0000900Abc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00009012bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00009010bc*sc*i* iwlwifi +alias pci:v00008086d0000095Bsv*sd00005202bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00005102bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00005002bc*sc*i* iwlwifi +alias pci:v00008086d0000095Bsv*sd00005200bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd0000500Abc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00005000bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00001010bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00005400bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00005510bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00005410bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00005412bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00005012bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00005C10bc*sc*i* iwlwifi +alias pci:v00008086d0000095Bsv*sd00005210bc*sc*i* iwlwifi +alias pci:v00008086d0000095Bsv*sd00005302bc*sc*i* iwlwifi +alias pci:v00008086d0000095Bsv*sd00005310bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00005100bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00005110bc*sc*i* iwlwifi +alias pci:v00008086d0000095Asv*sd00005010bc*sc*i* iwlwifi +alias pci:v00008086d000024FBsv*sd00000000bc*sc*i* iwlwifi +alias pci:v00008086d000024FBsv*sd00002150bc*sc*i* iwlwifi +alias pci:v00008086d000024FBsv*sd00002050bc*sc*i* iwlwifi +alias pci:v00008086d000024FBsv*sd00002110bc*sc*i* iwlwifi +alias pci:v00008086d000024FBsv*sd00002010bc*sc*i* iwlwifi +alias pci:v00008086d00003165sv*sd00008110bc*sc*i* iwlwifi +alias pci:v00008086d00003165sv*sd00008010bc*sc*i* iwlwifi +alias pci:v00008086d00003166sv*sd00004210bc*sc*i* iwlwifi +alias pci:v00008086d00003166sv*sd00004310bc*sc*i* iwlwifi +alias pci:v00008086d00003165sv*sd00004110bc*sc*i* iwlwifi +alias pci:v00008086d00003165sv*sd00004510bc*sc*i* iwlwifi +alias pci:v00008086d00003165sv*sd00004410bc*sc*i* iwlwifi +alias pci:v00008086d00003166sv*sd00004212bc*sc*i* iwlwifi +alias pci:v00008086d00003165sv*sd00004012bc*sc*i* iwlwifi +alias pci:v00008086d00003165sv*sd00004010bc*sc*i* iwlwifi +alias pci:v00008086d000008B3sv*sd00001170bc*sc*i* iwlwifi +alias pci:v00008086d000008B3sv*sd00001070bc*sc*i* iwlwifi +alias pci:v00008086d000008B3sv*sd00008570bc*sc*i* iwlwifi +alias pci:v00008086d000008B3sv*sd00008470bc*sc*i* iwlwifi +alias pci:v00008086d000008B4sv*sd00008272bc*sc*i* iwlwifi +alias pci:v00008086d000008B4sv*sd00008370bc*sc*i* iwlwifi +alias pci:v00008086d000008B4sv*sd00008270bc*sc*i* iwlwifi +alias pci:v00008086d000008B3sv*sd00008062bc*sc*i* iwlwifi +alias pci:v00008086d000008B3sv*sd00008060bc*sc*i* iwlwifi +alias pci:v00008086d000008B3sv*sd00008172bc*sc*i* iwlwifi +alias pci:v00008086d000008B3sv*sd00008170bc*sc*i* iwlwifi +alias pci:v00008086d000008B3sv*sd00008072bc*sc*i* iwlwifi +alias pci:v00008086d000008B3sv*sd00008070bc*sc*i* iwlwifi +alias pci:v00008086d000008B4sv*sd00000370bc*sc*i* iwlwifi +alias pci:v00008086d000008B3sv*sd00000472bc*sc*i* iwlwifi +alias pci:v00008086d000008B3sv*sd00000470bc*sc*i* iwlwifi +alias pci:v00008086d000008B4sv*sd00000272bc*sc*i* iwlwifi +alias pci:v00008086d000008B4sv*sd00000270bc*sc*i* iwlwifi +alias pci:v00008086d000008B3sv*sd00000062bc*sc*i* iwlwifi +alias pci:v00008086d000008B3sv*sd00000060bc*sc*i* iwlwifi +alias pci:v00008086d000008B3sv*sd00000172bc*sc*i* iwlwifi +alias pci:v00008086d000008B3sv*sd00000170bc*sc*i* iwlwifi +alias pci:v00008086d000008B3sv*sd00000072bc*sc*i* iwlwifi +alias pci:v00008086d000008B3sv*sd00000070bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000C420bc*sc*i* iwlwifi +alias pci:v00008086d000008B2sv*sd0000C220bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000C02Abc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000C020bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000C360bc*sc*i* iwlwifi +alias pci:v00008086d000008B2sv*sd0000C370bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000C560bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000C570bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000C462bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000C460bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000C472bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000C470bc*sc*i* iwlwifi +alias pci:v00008086d000008B2sv*sd0000C262bc*sc*i* iwlwifi +alias pci:v00008086d000008B2sv*sd0000C26Abc*sc*i* iwlwifi +alias pci:v00008086d000008B2sv*sd0000C260bc*sc*i* iwlwifi +alias pci:v00008086d000008B2sv*sd0000C272bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000CC60bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000CC70bc*sc*i* iwlwifi +alias pci:v00008086d000008B2sv*sd0000C270bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000C760bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000C770bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000C162bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000C062bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000C160bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000C06Abc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000C060bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000C170bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000C072bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000C070bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00004420bc*sc*i* iwlwifi +alias pci:v00008086d000008B2sv*sd00004220bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000402Abc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00004020bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00005770bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00005170bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00005072bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00005070bc*sc*i* iwlwifi +alias pci:v00008086d000008B2sv*sd00004360bc*sc*i* iwlwifi +alias pci:v00008086d000008B2sv*sd00004370bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00004560bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00004570bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00004A6Cbc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00004A6Ebc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00004A70bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000486Ebc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00004870bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00004462bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000446Abc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00004460bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00004472bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00004470bc*sc*i* iwlwifi +alias pci:v00008086d000008B2sv*sd00004262bc*sc*i* iwlwifi +alias pci:v00008086d000008B2sv*sd0000426Abc*sc*i* iwlwifi +alias pci:v00008086d000008B2sv*sd00004260bc*sc*i* iwlwifi +alias pci:v00008086d000008B2sv*sd00004272bc*sc*i* iwlwifi +alias pci:v00008086d000008B2sv*sd00004270bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00004162bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00004062bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00004160bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd0000406Abc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00004060bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00004C70bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00004C60bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00004170bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00004072bc*sc*i* iwlwifi +alias pci:v00008086d000008B1sv*sd00004070bc*sc*i* iwlwifi +alias pci:v00008086d00000892sv*sd00000462bc*sc*i* iwlwifi +alias pci:v00008086d00000893sv*sd00000262bc*sc*i* iwlwifi +alias pci:v00008086d00000892sv*sd00000062bc*sc*i* iwlwifi +alias pci:v00008086d00000894sv*sd00000822bc*sc*i* iwlwifi +alias pci:v00008086d00000894sv*sd00000422bc*sc*i* iwlwifi +alias pci:v00008086d00000895sv*sd00000222bc*sc*i* iwlwifi +alias pci:v00008086d00000894sv*sd00000022bc*sc*i* iwlwifi +alias pci:v00008086d0000088Fsv*sd00005260bc*sc*i* iwlwifi +alias pci:v00008086d0000088Esv*sd00004860bc*sc*i* iwlwifi +alias pci:v00008086d0000088Esv*sd0000446Abc*sc*i* iwlwifi +alias pci:v00008086d0000088Esv*sd00004460bc*sc*i* iwlwifi +alias pci:v00008086d0000088Fsv*sd0000426Abc*sc*i* iwlwifi +alias pci:v00008086d0000088Fsv*sd00004260bc*sc*i* iwlwifi +alias pci:v00008086d0000088Esv*sd0000406Abc*sc*i* iwlwifi +alias pci:v00008086d0000088Esv*sd00004060bc*sc*i* iwlwifi +alias pci:v00008086d00000887sv*sd00004462bc*sc*i* iwlwifi +alias pci:v00008086d00000888sv*sd00004262bc*sc*i* iwlwifi +alias pci:v00008086d00000887sv*sd00004062bc*sc*i* iwlwifi +alias pci:v00008086d00000890sv*sd00004822bc*sc*i* iwlwifi +alias pci:v00008086d00000890sv*sd00004422bc*sc*i* iwlwifi +alias pci:v00008086d00000891sv*sd00004222bc*sc*i* iwlwifi +alias pci:v00008086d00000890sv*sd00004022bc*sc*i* iwlwifi +alias pci:v00008086d00000896sv*sd00005027bc*sc*i* iwlwifi +alias pci:v00008086d00000896sv*sd00005025bc*sc*i* iwlwifi +alias pci:v00008086d00000897sv*sd00005017bc*sc*i* iwlwifi +alias pci:v00008086d00000897sv*sd00005015bc*sc*i* iwlwifi +alias pci:v00008086d00000896sv*sd00005007bc*sc*i* iwlwifi +alias pci:v00008086d00000896sv*sd00005005bc*sc*i* iwlwifi +alias pci:v00008086d000008AEsv*sd00001027bc*sc*i* iwlwifi +alias pci:v00008086d000008AEsv*sd00001025bc*sc*i* iwlwifi +alias pci:v00008086d000008AFsv*sd00001017bc*sc*i* iwlwifi +alias pci:v00008086d000008AFsv*sd00001015bc*sc*i* iwlwifi +alias pci:v00008086d000008AEsv*sd00001007bc*sc*i* iwlwifi +alias pci:v00008086d000008AEsv*sd00001005bc*sc*i* iwlwifi +alias pci:v00008086d00000084sv*sd00001316bc*sc*i* iwlwifi +alias pci:v00008086d00000084sv*sd00001216bc*sc*i* iwlwifi +alias pci:v00008086d00000083sv*sd00001326bc*sc*i* iwlwifi +alias pci:v00008086d00000083sv*sd00001226bc*sc*i* iwlwifi +alias pci:v00008086d00000083sv*sd00001306bc*sc*i* iwlwifi +alias pci:v00008086d00000083sv*sd00001206bc*sc*i* iwlwifi +alias pci:v00008086d00000084sv*sd00001315bc*sc*i* iwlwifi +alias pci:v00008086d00000084sv*sd00001215bc*sc*i* iwlwifi +alias pci:v00008086d00000083sv*sd00001325bc*sc*i* iwlwifi +alias pci:v00008086d00000083sv*sd00001225bc*sc*i* iwlwifi +alias pci:v00008086d00000083sv*sd00001305bc*sc*i* iwlwifi +alias pci:v00008086d00000083sv*sd00001205bc*sc*i* iwlwifi +alias pci:v00008086d00000886sv*sd00001317bc*sc*i* iwlwifi +alias pci:v00008086d00000886sv*sd00001315bc*sc*i* iwlwifi +alias pci:v00008086d00000885sv*sd00001327bc*sc*i* iwlwifi +alias pci:v00008086d00000885sv*sd00001325bc*sc*i* iwlwifi +alias pci:v00008086d00000885sv*sd00001307bc*sc*i* iwlwifi +alias pci:v00008086d00000885sv*sd00001305bc*sc*i* iwlwifi +alias pci:v00008086d00000089sv*sd00001316bc*sc*i* iwlwifi +alias pci:v00008086d00000089sv*sd00001311bc*sc*i* iwlwifi +alias pci:v00008086d00000087sv*sd00001326bc*sc*i* iwlwifi +alias pci:v00008086d00000087sv*sd00001321bc*sc*i* iwlwifi +alias pci:v00008086d00000087sv*sd00001306bc*sc*i* iwlwifi +alias pci:v00008086d00000087sv*sd00001301bc*sc*i* iwlwifi +alias pci:v00008086d00000091sv*sd00005226bc*sc*i* iwlwifi +alias pci:v00008086d00000091sv*sd00005225bc*sc*i* iwlwifi +alias pci:v00008086d00000091sv*sd00005221bc*sc*i* iwlwifi +alias pci:v00008086d00000091sv*sd00005207bc*sc*i* iwlwifi +alias pci:v00008086d00000091sv*sd00005206bc*sc*i* iwlwifi +alias pci:v00008086d00000091sv*sd00005205bc*sc*i* iwlwifi +alias pci:v00008086d00000091sv*sd00005201bc*sc*i* iwlwifi +alias pci:v00008086d00000090sv*sd00005216bc*sc*i* iwlwifi +alias pci:v00008086d00000090sv*sd00005215bc*sc*i* iwlwifi +alias pci:v00008086d00000090sv*sd00005211bc*sc*i* iwlwifi +alias pci:v00008086d0000008Bsv*sd00005317bc*sc*i* iwlwifi +alias pci:v00008086d0000008Bsv*sd00005315bc*sc*i* iwlwifi +alias pci:v00008086d0000008Asv*sd00005327bc*sc*i* iwlwifi +alias pci:v00008086d0000008Asv*sd00005325bc*sc*i* iwlwifi +alias pci:v00008086d0000008Asv*sd00005307bc*sc*i* iwlwifi +alias pci:v00008086d0000008Asv*sd00005305bc*sc*i* iwlwifi +alias pci:v00008086d00000082sv*sd00001305bc*sc*i* iwlwifi +alias pci:v00008086d00000082sv*sd00001304bc*sc*i* iwlwifi +alias pci:v00008086d00000082sv*sd00004820bc*sc*i* iwlwifi +alias pci:v00008086d00000085sv*sd0000C228bc*sc*i* iwlwifi +alias pci:v00008086d00000085sv*sd0000C220bc*sc*i* iwlwifi +alias pci:v00008086d00000082sv*sd0000C020bc*sc*i* iwlwifi +alias pci:v00008086d00000085sv*sd00001316bc*sc*i* iwlwifi +alias pci:v00008086d00000085sv*sd00001318bc*sc*i* iwlwifi +alias pci:v00008086d00000085sv*sd00001311bc*sc*i* iwlwifi +alias pci:v00008086d00000082sv*sd00001328bc*sc*i* iwlwifi +alias pci:v00008086d00000082sv*sd00001326bc*sc*i* iwlwifi +alias pci:v00008086d00000082sv*sd00001321bc*sc*i* iwlwifi +alias pci:v00008086d00000082sv*sd00001308bc*sc*i* iwlwifi +alias pci:v00008086d00000082sv*sd00001307bc*sc*i* iwlwifi +alias pci:v00008086d00000082sv*sd00001306bc*sc*i* iwlwifi +alias pci:v00008086d00000082sv*sd00001301bc*sc*i* iwlwifi +alias pci:v00008086d00004239sv*sd00001316bc*sc*i* iwlwifi +alias pci:v00008086d00004239sv*sd00001311bc*sc*i* iwlwifi +alias pci:v00008086d00004238sv*sd00001118bc*sc*i* iwlwifi +alias pci:v00008086d00004238sv*sd00001111bc*sc*i* iwlwifi +alias pci:v00008086d0000422Csv*sd00001326bc*sc*i* iwlwifi +alias pci:v00008086d0000422Csv*sd00001321bc*sc*i* iwlwifi +alias pci:v00008086d0000422Csv*sd00001307bc*sc*i* iwlwifi +alias pci:v00008086d0000422Csv*sd00001306bc*sc*i* iwlwifi +alias pci:v00008086d0000422Csv*sd00001301bc*sc*i* iwlwifi +alias pci:v00008086d0000422Bsv*sd00001128bc*sc*i* iwlwifi +alias pci:v00008086d0000422Bsv*sd00001121bc*sc*i* iwlwifi +alias pci:v00008086d0000422Bsv*sd00001108bc*sc*i* iwlwifi +alias pci:v00008086d0000422Bsv*sd00001101bc*sc*i* iwlwifi +alias pci:v00008086d0000423Dsv*sd00001316bc*sc*i* iwlwifi +alias pci:v00008086d0000423Dsv*sd00001216bc*sc*i* iwlwifi +alias pci:v00008086d0000423Dsv*sd00001311bc*sc*i* iwlwifi +alias pci:v00008086d0000423Dsv*sd00001211bc*sc*i* iwlwifi +alias pci:v00008086d0000423Csv*sd00001326bc*sc*i* iwlwifi +alias pci:v00008086d0000423Csv*sd00001321bc*sc*i* iwlwifi +alias pci:v00008086d0000423Csv*sd00001221bc*sc*i* iwlwifi +alias pci:v00008086d0000423Csv*sd00001306bc*sc*i* iwlwifi +alias pci:v00008086d0000423Csv*sd00001206bc*sc*i* iwlwifi +alias pci:v00008086d0000423Csv*sd00001301bc*sc*i* iwlwifi +alias pci:v00008086d0000423Csv*sd00001201bc*sc*i* iwlwifi +alias pci:v00008086d0000423Bsv*sd00001011bc*sc*i* iwlwifi +alias pci:v00008086d0000423Asv*sd00001021bc*sc*i* iwlwifi +alias pci:v00008086d0000423Asv*sd00001001bc*sc*i* iwlwifi +alias pci:v00008086d00004236sv*sd00001114bc*sc*i* iwlwifi +alias pci:v00008086d00004236sv*sd00001014bc*sc*i* iwlwifi +alias pci:v00008086d00004236sv*sd00001111bc*sc*i* iwlwifi +alias pci:v00008086d00004236sv*sd00001011bc*sc*i* iwlwifi +alias pci:v00008086d00004235sv*sd00001104bc*sc*i* iwlwifi +alias pci:v00008086d00004235sv*sd00001004bc*sc*i* iwlwifi +alias pci:v00008086d00004235sv*sd00001101bc*sc*i* iwlwifi +alias pci:v00008086d00004235sv*sd00001001bc*sc*i* iwlwifi +alias pci:v00008086d00004235sv*sd00001124bc*sc*i* iwlwifi +alias pci:v00008086d00004235sv*sd00001024bc*sc*i* iwlwifi +alias pci:v00008086d00004235sv*sd00001121bc*sc*i* iwlwifi +alias pci:v00008086d00004235sv*sd00001021bc*sc*i* iwlwifi +alias pci:v00008086d00004237sv*sd00001316bc*sc*i* iwlwifi +alias pci:v00008086d00004237sv*sd00001216bc*sc*i* iwlwifi +alias pci:v00008086d00004237sv*sd00001315bc*sc*i* iwlwifi +alias pci:v00008086d00004237sv*sd00001215bc*sc*i* iwlwifi +alias pci:v00008086d00004237sv*sd00001314bc*sc*i* iwlwifi +alias pci:v00008086d00004237sv*sd00001214bc*sc*i* iwlwifi +alias pci:v00008086d00004237sv*sd00001311bc*sc*i* iwlwifi +alias pci:v00008086d00004237sv*sd00001211bc*sc*i* iwlwifi +alias pci:v00008086d00004232sv*sd00001326bc*sc*i* iwlwifi +alias pci:v00008086d00004232sv*sd00001226bc*sc*i* iwlwifi +alias pci:v00008086d00004232sv*sd00001325bc*sc*i* iwlwifi +alias pci:v00008086d00004232sv*sd00001225bc*sc*i* iwlwifi +alias pci:v00008086d00004232sv*sd00001324bc*sc*i* iwlwifi +alias pci:v00008086d00004232sv*sd00001224bc*sc*i* iwlwifi +alias pci:v00008086d00004232sv*sd00001321bc*sc*i* iwlwifi +alias pci:v00008086d00004232sv*sd00001221bc*sc*i* iwlwifi +alias pci:v00008086d00004232sv*sd00001306bc*sc*i* iwlwifi +alias pci:v00008086d00004232sv*sd00001206bc*sc*i* iwlwifi +alias pci:v00008086d00004232sv*sd00001305bc*sc*i* iwlwifi +alias pci:v00008086d00004232sv*sd00001205bc*sc*i* iwlwifi +alias pci:v00008086d00004232sv*sd00001304bc*sc*i* iwlwifi +alias pci:v00008086d00004232sv*sd00001204bc*sc*i* iwlwifi +alias pci:v00008086d00004232sv*sd00001301bc*sc*i* iwlwifi +alias pci:v00008086d00004232sv*sd00001201bc*sc*i* iwlwifi +alias pci:v00001432d00007106sv*sd*bc*sc*i* rtl818x_pci +alias pci:v00001186d00003301sv*sd*bc*sc*i* rtl818x_pci +alias pci:v00001186d00003300sv*sd*bc*sc*i* rtl818x_pci +alias pci:v00001799d00006020sv*sd*bc*sc*i* rtl818x_pci +alias pci:v00001799d00006001sv*sd*bc*sc*i* rtl818x_pci +alias pci:v000010ECd00008180sv*sd*bc*sc*i* rtl818x_pci +alias pci:v00001799d0000701Fsv*sd*bc*sc*i* rtl818x_pci +alias pci:v00001799d0000700Fsv*sd*bc*sc*i* rtl818x_pci +alias pci:v000010ECd00008185sv*sd*bc*sc*i* rtl818x_pci +alias pci:v000010ECd00008199sv*sd*bc*sc*i* rtl818x_pci +alias usb:v1737p0073d*dc*dsc*dp*ic*isc*ip*in* rtl8187 +alias usb:v1B75p8187d*dc*dsc*dp*ic*isc*ip*in* rtl8187 +alias usb:v18E8p6232d*dc*dsc*dp*ic*isc*ip*in* rtl8187 +alias usb:v13D1pABE6d*dc*dsc*dp*ic*isc*ip*in* rtl8187 +alias usb:v1371p9401d*dc*dsc*dp*ic*isc*ip*in* rtl8187 +alias usb:v114Bp0150d*dc*dsc*dp*ic*isc*ip*in* rtl8187 +alias usb:v0DF6p0029d*dc*dsc*dp*ic*isc*ip*in* rtl8187 +alias usb:v0DF6p0028d*dc*dsc*dp*ic*isc*ip*in* rtl8187 +alias usb:v0DF6p000Dd*dc*dsc*dp*ic*isc*ip*in* rtl8187 +alias usb:v03F0pCA02d*dc*dsc*dp*ic*isc*ip*in* rtl8187 +alias usb:v0846p4260d*dc*dsc*dp*ic*isc*ip*in* rtl8187 +alias usb:v0846p6A00d*dc*dsc*dp*ic*isc*ip*in* rtl8187 +alias usb:v0846p6100d*dc*dsc*dp*ic*isc*ip*in* rtl8187 +alias usb:v0789p010Cd*dc*dsc*dp*ic*isc*ip*in* rtl8187 +alias usb:v0769p11F2d*dc*dsc*dp*ic*isc*ip*in* rtl8187 +alias usb:v0BDAp8198d*dc*dsc*dp*ic*isc*ip*in* rtl8187 +alias usb:v0BDAp8197d*dc*dsc*dp*ic*isc*ip*in* rtl8187 +alias usb:v0BDAp8189d*dc*dsc*dp*ic*isc*ip*in* rtl8187 +alias usb:v0BDAp8187d*dc*dsc*dp*ic*isc*ip*in* rtl8187 +alias usb:v050Dp705Ed*dc*dsc*dp*ic*isc*ip*in* rtl8187 +alias usb:v0B05p171Dd*dc*dsc*dp*ic*isc*ip*in* rtl8187 +alias usb:v7392pA611d*dc*dsc*dp*icFFiscFFipFFin* rtl8xxxu +alias usb:v0BDApB720d*dc*dsc*dp*icFFiscFFipFFin* rtl8xxxu +alias usb:v2357p0109d*dc*dsc*dp*icFFiscFFipFFin* rtl8xxxu +alias usb:v2001p3319d*dc*dsc*dp*icFFiscFFipFFin* rtl8xxxu +alias usb:v2357p0108d*dc*dsc*dp*icFFiscFFipFFin* rtl8xxxu +alias usb:v0BDAp818Bd*dc*dsc*dp*icFFiscFFipFFin* rtl8xxxu +alias usb:v0BDAp0724d*dc*dsc*dp*icFFiscFFipFFin* rtl8xxxu +alias usb:v0BDAp1724d*dc*dsc*dp*icFFiscFFipFFin* rtl8xxxu +alias usb:v0BDAp8724d*dc*dsc*dp*icFFiscFFipFFin* rtl8xxxu +alias pci:v000010ECd0000B822sv*sd*bc*sc*i* rtw88_8822be +alias pci:v000010ECd0000C82Fsv*sd*bc*sc*i* rtw88_8822ce +alias pci:v000010ECd0000C822sv*sd*bc*sc*i* rtw88_8822ce +alias pci:v000010ECd0000D723sv*sd*bc*sc*i* rtw88_8723de +alias pci:v000010ECd0000C821sv*sd*bc*sc*i* rtw88_8821ce +alias spi:msi001 msi001 +alias i2c:mt2060 mt2060 +alias i2c:tda18212 tda18212 +alias i2c:e4000 e4000 +alias i2c:fc2580 fc2580 +alias i2c:tua9001 tua9001 +alias i2c:si2177 si2157 +alias i2c:si2141 si2157 +alias i2c:si2146 si2157 +alias i2c:si2157 si2157 +alias platform:it9133bx-tuner it913x +alias platform:it9133ax-tuner it913x +alias i2c:mxl301rf mxl301rf +alias i2c:qm1d1c0042 qm1d1c0042 +alias i2c:qm1d1b0004 qm1d1b0004 +alias i2c:m88rs6000t m88rs6000t +alias i2c:tda18250 tda18250 +alias i2c:tda665x_earthpt1 dvb_pll +alias i2c:tua6034_friio dvb_pll +alias i2c:dtt7520x dvb_pll +alias i2c:tdee4 dvb_pll +alias i2c:tbmu24112 dvb_pll +alias i2c:tbdu18132 dvb_pll +alias i2c:tdtc9251dh0 dvb_pll +alias i2c:dtos403ih102a dvb_pll +alias i2c:opera1 dvb_pll +alias i2c:sd1878_tda8261 dvb_pll +alias i2c:tbmv dvb_pll +alias i2c:tdhu2 dvb_pll +alias i2c:tded4 dvb_pll +alias i2c:tda665x dvb_pll +alias i2c:tua6034 dvb_pll +alias i2c:env57h1xd5 dvb_pll +alias i2c:tua6010xs dvb_pll +alias i2c:unknown_1 dvb_pll +alias i2c:z201 dvb_pll +alias i2c:dtt759x dvb_pll +alias i2c:dtt7579 dvb_pll +alias i2c:lgdt330x lgdt330x +alias i2c:lgdt3306a lgdt3306a +alias i2c:au8522 au8522_decoder +alias i2c:af9013 af9013 +alias i2c:si2168 si2168 +alias i2c:stv090x stv090x +alias i2c:stv6110x stv6110x +alias i2c:m88ds3103b m88ds3103 +alias i2c:m88rs6000 m88ds3103 +alias i2c:m88ds3103 m88ds3103 +alias i2c:mn88472 mn88472 +alias i2c:mn88473 mn88473 +alias i2c:ts2022 ts2020 +alias i2c:ts2020 ts2020 +alias i2c:cxd2820r cxd2820r +alias i2c:si2165 si2165 +alias i2c:a8293 a8293 +alias i2c:sp2 sp2 +alias i2c:tda10071_cx24118 tda10071 +alias i2c:rtl2830 rtl2830 +alias i2c:rtl2832 rtl2832 +alias i2c:af9033 af9033 +alias i2c:tc90522ter tc90522 +alias i2c:tc90522sat tc90522 +alias of:N*T*Csocionext,mn884434-1C* mn88443x +alias of:N*T*Csocionext,mn884434-1 mn88443x +alias of:N*T*Csocionext,mn884434-0C* mn88443x +alias of:N*T*Csocionext,mn884434-0 mn88443x +alias of:N*T*Csocionext,mn884433C* mn88443x +alias of:N*T*Csocionext,mn884433 mn88443x +alias i2c:mn884434-1 mn88443x +alias i2c:mn884434-0 mn88443x +alias i2c:mn884433 mn88443x +alias i2c:helene helene +alias i2c:cxd2099 cxd2099 +alias of:N*T*Csony,cxd2880C* cxd2880_spi +alias of:N*T*Csony,cxd2880 cxd2880_spi +alias spi:cxd2880 cxd2880_spi +alias usb:v8087p0A5Ad*dc*dsc*dp*ic*isc*ip*in* btusb +alias usb:v0930p*d*dc*dsc*dp*icFFisc01ip01in* btusb +alias usb:v413Cp*d*dc*dsc*dp*icFFisc01ip01in* btusb +alias usb:v13D3p*d*dc*dsc*dp*icFFisc01ip01in* btusb +alias usb:v050Dp*d*dc*dsc*dp*icFFisc01ip01in* btusb +alias usb:v0B05p*d*dc*dsc*dp*icFFisc01ip01in* btusb +alias usb:v0A5Cp*d*dc*dsc*dp*icFFisc01ip01in* btusb +alias usb:v04CAp*d*dc*dsc*dp*icFFisc01ip01in* btusb +alias usb:v0489p*d*dc*dsc*dp*icFFisc01ip01in* btusb +alias usb:v0BB4p*d*dc*dsc*dp*icFFisc01ip01in* btusb +alias usb:v105Bp*d*dc*dsc*dp*icFFisc01ip01in* btusb +alias usb:v19FFp0239d*dc*dsc*dp*ic*isc*ip*in* btusb +alias usb:v413Cp8197d*dc*dsc*dp*ic*isc*ip*in* btusb +alias usb:v0C10p0000d*dc*dsc*dp*ic*isc*ip*in* btusb +alias usb:v0BDBp1002d*dc*dsc*dp*ic*isc*ip*in* btusb +alias usb:v044Ep3002d*dc*dsc*dp*ic*isc*ip*in* btusb +alias usb:v044Ep3001d*dc*dsc*dp*ic*isc*ip*in* btusb +alias usb:v04BFp030Ad*dc*dsc*dp*ic*isc*ip*in* btusb +alias usb:v057Cp3800d*dc*dsc*dp*ic*isc*ip*in* btusb +alias usb:v05ACp8281d*dc*dsc*dp*ic*isc*ip*in* btusb +alias usb:v05ACp821Ad*dc*dsc*dp*ic*isc*ip*in* btusb +alias usb:v05ACp821Fd*dc*dsc*dp*ic*isc*ip*in* btusb +alias usb:v05ACp821Bd*dc*dsc*dp*ic*isc*ip*in* btusb +alias usb:v05ACp8218d*dc*dsc*dp*ic*isc*ip*in* btusb +alias usb:v05ACp8215d*dc*dsc*dp*ic*isc*ip*in* btusb +alias usb:v05ACp8213d*dc*dsc*dp*ic*isc*ip*in* btusb +alias usb:v0A5Cp21E1d*dc*dsc*dp*ic*isc*ip*in* btusb +alias usb:v0E8Dp763Fd*dc*dsc*dp*ic*isc*ip*in* btusb +alias usb:v05ACp*d*dc*dsc*dp*icFFisc01ip01in* btusb +alias usb:v*p*d*dc*dsc*dp*icE0isc01ip01in* btusb +alias usb:v*p*d*dcE0dsc01dp04ic*isc*ip*in* btusb +alias usb:v*p*d*dcE0dsc01dp01ic*isc*ip*in* btusb +alias of:N*T*Cusb4ca,301aC* btusb +alias of:N*T*Cusb4ca,301a btusb +alias of:N*T*Cusbcf3,e300C* btusb +alias of:N*T*Cusbcf3,e300 btusb +alias of:N*T*Cusb1286,204eC* btusb +alias of:N*T*Cusb1286,204e btusb diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.alias.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.alias.bin new file mode 100644 index 00000000..96ec7f63 Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.alias.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.builtin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.builtin new file mode 100644 index 00000000..b2bde006 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.builtin @@ -0,0 +1,436 @@ +kernel/mm/zswap.ko +kernel/mm/zpool.ko +kernel/mm/zbud.ko +kernel/mm/z3fold.ko +kernel/fs/binfmt_script.ko +kernel/fs/binfmt_elf.ko +kernel/fs/mbcache.ko +kernel/fs/nfs_common/nfs_acl.ko +kernel/fs/nfs_common/grace.ko +kernel/fs/nfs_common/nfs_ssc.ko +kernel/fs/configfs/configfs.ko +kernel/fs/fscache/fscache.ko +kernel/fs/ext4/ext4.ko +kernel/fs/ext2/ext2.ko +kernel/fs/jbd2/jbd2.ko +kernel/fs/squashfs/squashfs.ko +kernel/fs/fat/fat.ko +kernel/fs/fat/vfat.ko +kernel/fs/fat/msdos.ko +kernel/fs/exfat/exfat.ko +kernel/fs/isofs/isofs.ko +kernel/fs/nfs/nfs.ko +kernel/fs/nfs/nfsv2.ko +kernel/fs/nfs/nfsv3.ko +kernel/fs/nfs/nfsv4.ko +kernel/fs/nfs/filelayout/nfs_layout_nfsv41_files.ko +kernel/fs/exportfs/exportfs.ko +kernel/fs/nfsd/nfsd.ko +kernel/fs/lockd/lockd.ko +kernel/fs/nls/nls_base.ko +kernel/fs/nls/nls_cp437.ko +kernel/fs/nls/nls_cp936.ko +kernel/fs/nls/nls_ascii.ko +kernel/fs/nls/nls_iso8859-1.ko +kernel/fs/nls/nls_utf8.ko +kernel/fs/ubifs/ubifs.ko +kernel/fs/autofs/autofs4.ko +kernel/fs/overlayfs/overlay.ko +kernel/fs/udf/udf.ko +kernel/crypto/crypto.ko +kernel/crypto/crypto_algapi.ko +kernel/crypto/aead.ko +kernel/crypto/geniv.ko +kernel/crypto/skcipher.ko +kernel/crypto/crypto_hash.ko +kernel/crypto/akcipher.ko +kernel/crypto/kpp.ko +kernel/crypto/dh_generic.ko +kernel/crypto/rsa_generic.ko +kernel/crypto/crypto_acompress.ko +kernel/crypto/cryptomgr.ko +kernel/crypto/cmac.ko +kernel/crypto/hmac.ko +kernel/crypto/crypto_null.ko +kernel/crypto/md5.ko +kernel/crypto/sha1_generic.ko +kernel/crypto/sha256_generic.ko +kernel/crypto/gf128mul.ko +kernel/crypto/ecb.ko +kernel/crypto/cbc.ko +kernel/crypto/ctr.ko +kernel/crypto/gcm.ko +kernel/crypto/ccm.ko +kernel/crypto/aes_generic.ko +kernel/crypto/deflate.ko +kernel/crypto/crc32c_generic.ko +kernel/crypto/lzo.ko +kernel/crypto/lzo-rle.ko +kernel/crypto/rng.ko +kernel/crypto/drbg.ko +kernel/crypto/jitterentropy_rng.ko +kernel/crypto/ghash-generic.ko +kernel/crypto/zstd.ko +kernel/crypto/ecc.ko +kernel/crypto/ecdh_generic.ko +kernel/crypto/asymmetric_keys/asymmetric_keys.ko +kernel/crypto/asymmetric_keys/public_key.ko +kernel/crypto/asymmetric_keys/x509_key_parser.ko +kernel/crypto/asymmetric_keys/pkcs7_message.ko +kernel/block/mq-deadline.ko +kernel/block/kyber-iosched.ko +kernel/block/bfq.ko +kernel/lib/crypto/libaes.ko +kernel/lib/crypto/libarc4.ko +kernel/lib/crypto/libsha256.ko +kernel/lib/bitrev.ko +kernel/lib/linear_ranges.ko +kernel/lib/crc16.ko +kernel/lib/crc-itu-t.ko +kernel/lib/crc32.ko +kernel/lib/libcrc32c.ko +kernel/lib/xxhash.ko +kernel/lib/zlib_inflate/zlib_inflate.ko +kernel/lib/zlib_deflate/zlib_deflate.ko +kernel/lib/bch.ko +kernel/lib/lzo/lzo_compress.ko +kernel/lib/lzo/lzo_decompress.ko +kernel/lib/lz4/lz4_decompress.ko +kernel/lib/zstd/zstd_compress.ko +kernel/lib/zstd/zstd_decompress.ko +kernel/lib/xz/xz_dec.ko +kernel/lib/ts_kmp.ko +kernel/lib/glob.ko +kernel/lib/mpi/mpi.ko +kernel/lib/asn1_decoder.ko +kernel/lib/fonts/font.ko +kernel/lib/oid_registry.ko +kernel/drivers/pinctrl/pinctrl-single.ko +kernel/drivers/gpio/gpio-loongson.ko +kernel/drivers/gpio/gpio-pca953x.ko +kernel/drivers/pwm/pwm-ls.ko +kernel/drivers/pci/hotplug/shpchp.ko +kernel/drivers/video/backlight/backlight.ko +kernel/drivers/video/backlight/gpio_backlight.ko +kernel/drivers/video/backlight/pwm_bl.ko +kernel/drivers/video/fbdev/core/fb.ko +kernel/drivers/video/fbdev/core/cfbfillrect.ko +kernel/drivers/video/fbdev/core/cfbcopyarea.ko +kernel/drivers/video/fbdev/core/cfbimgblt.ko +kernel/drivers/video/fbdev/core/sysfillrect.ko +kernel/drivers/video/fbdev/core/syscopyarea.ko +kernel/drivers/video/fbdev/core/sysimgblt.ko +kernel/drivers/video/fbdev/core/fb_sys_fops.ko +kernel/drivers/video/fbdev/core/fb_ddc.ko +kernel/drivers/video/fbdev/aty/radeonfb.ko +kernel/drivers/dma/virt-dma.ko +kernel/drivers/dma/ls_apbdmac.ko +kernel/drivers/regulator/fixed.ko +kernel/drivers/tty/n_null.ko +kernel/drivers/tty/serial/serial_core.ko +kernel/drivers/tty/serial/8250/8250.ko +kernel/drivers/tty/serial/8250/8250_base.ko +kernel/drivers/tty/serial/8250/8250_of.ko +kernel/drivers/tty/serial/serial_mctrl_gpio.ko +kernel/drivers/tty/serdev/serdev.ko +kernel/drivers/char/hw_random/rng-core.ko +kernel/drivers/gpu/drm/drm_vram_helper.ko +kernel/drivers/gpu/drm/drm_ttm_helper.ko +kernel/drivers/gpu/drm/drm_kms_helper.ko +kernel/drivers/gpu/drm/drm.ko +kernel/drivers/gpu/drm/drm_panel_orientation_quirks.ko +kernel/drivers/gpu/drm/ttm/ttm.ko +kernel/drivers/gpu/drm/loongson/loongson.ko +kernel/drivers/gpu/drm/panel/panel-lvds.ko +kernel/drivers/gpu/drm/bridge/display-connector.ko +kernel/drivers/gpu/drm/bridge/sii902x.ko +kernel/drivers/gpu/drm/bridge/simple-bridge.ko +kernel/drivers/base/firmware_loader/firmware_class.ko +kernel/drivers/base/regmap/regmap-i2c.ko +kernel/drivers/base/regmap/regmap-mmio.ko +kernel/drivers/block/brd.ko +kernel/drivers/block/loop.ko +kernel/drivers/block/cryptoloop.ko +kernel/drivers/misc/eeprom/at24.ko +kernel/drivers/scsi/scsi_mod.ko +kernel/drivers/scsi/sd_mod.ko +kernel/drivers/scsi/sg.ko +kernel/drivers/nvme/host/nvme-core.ko +kernel/drivers/nvme/host/nvme.ko +kernel/drivers/ata/libata.ko +kernel/drivers/ata/ahci.ko +kernel/drivers/ata/libahci.ko +kernel/drivers/ata/ahci_platform.ko +kernel/drivers/ata/libahci_platform.ko +kernel/drivers/ata/pata_atiixp.ko +kernel/drivers/mtd/mtd.ko +kernel/drivers/mtd/parsers/cmdlinepart.ko +kernel/drivers/mtd/parsers/ofpart.ko +kernel/drivers/mtd/mtd_blkdevs.ko +kernel/drivers/mtd/mtdblock.ko +kernel/drivers/mtd/chips/chipreg.ko +kernel/drivers/mtd/devices/block2mtd.ko +kernel/drivers/mtd/nand/nandcore.ko +kernel/drivers/mtd/nand/raw/nand.ko +kernel/drivers/mtd/nand/raw/nand_ecc.ko +kernel/drivers/mtd/nand/raw/ls-nand.ko +kernel/drivers/mtd/spi-nor/spi-nor.ko +kernel/drivers/mtd/ubi/ubi.ko +kernel/drivers/spi/spi-ls.ko +kernel/drivers/net/dummy.ko +kernel/drivers/net/mii.ko +kernel/drivers/net/phy/mdio_devres.ko +kernel/drivers/net/phy/phylink.ko +kernel/drivers/net/phy/libphy.ko +kernel/drivers/net/phy/fixed_phy.ko +kernel/drivers/net/phy/motorcomm.ko +kernel/drivers/net/mdio/of_mdio.ko +kernel/drivers/net/pcs/pcs-xpcs.ko +kernel/drivers/net/veth.ko +kernel/drivers/net/can/can-dev.ko +kernel/drivers/net/can/sja1000/sja1000.ko +kernel/drivers/net/can/sja1000/sja1000_platform.ko +kernel/drivers/net/ethernet/stmicro/stmmac/stmmac.ko +kernel/drivers/net/ethernet/stmicro/stmmac/stmmac-platform.ko +kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-generic.ko +kernel/drivers/net/ethernet/stmicro/stmmac/stmmac-pci.ko +kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.ko +kernel/drivers/net/usb/asix.ko +kernel/drivers/net/usb/ax88179_178a.ko +kernel/drivers/net/usb/cdc_ether.ko +kernel/drivers/net/usb/net1080.ko +kernel/drivers/net/usb/cdc_subset.ko +kernel/drivers/net/usb/zaurus.ko +kernel/drivers/net/usb/usbnet.ko +kernel/drivers/net/usb/cdc_ncm.ko +kernel/drivers/usb/common/usb-common.ko +kernel/drivers/usb/core/usbcore.ko +kernel/drivers/usb/dwc2/dwc2.ko +kernel/drivers/usb/mon/usbmon.ko +kernel/drivers/usb/host/ehci-hcd.ko +kernel/drivers/usb/host/ehci-pci.ko +kernel/drivers/usb/host/ehci-platform.ko +kernel/drivers/usb/host/ohci-hcd.ko +kernel/drivers/usb/host/ohci-platform.ko +kernel/drivers/usb/class/cdc-acm.ko +kernel/drivers/usb/storage/usb-storage.ko +kernel/drivers/usb/serial/usbserial.ko +kernel/drivers/usb/serial/option.ko +kernel/drivers/usb/serial/usb_wwan.ko +kernel/drivers/usb/roles/roles.ko +kernel/drivers/input/serio/serio.ko +kernel/drivers/input/serio/libps2.ko +kernel/drivers/input/input-core.ko +kernel/drivers/input/input-leds.ko +kernel/drivers/input/mousedev.ko +kernel/drivers/input/evdev.ko +kernel/drivers/input/keyboard/atkbd.ko +kernel/drivers/input/keyboard/gpio_keys_polled.ko +kernel/drivers/input/touchscreen/of_touchscreen.ko +kernel/drivers/input/touchscreen/goodix.ko +kernel/drivers/rtc/rtc-ls2x.ko +kernel/drivers/rtc/rtc-sd3078.ko +kernel/drivers/i2c/i2c-core.ko +kernel/drivers/i2c/i2c-dev.ko +kernel/drivers/i2c/i2c-mux.ko +kernel/drivers/i2c/algos/i2c-algo-bit.ko +kernel/drivers/i2c/busses/i2c-gpio.ko +kernel/drivers/i2c/busses/i2c-ocores.ko +kernel/drivers/i2c/busses/i2c-ls2x.ko +kernel/drivers/i2c/muxes/i2c-mux-gpmux.ko +kernel/drivers/i2c/muxes/i2c-mux-reg.ko +kernel/drivers/media/mc/mc.ko +kernel/drivers/media/v4l2-core/videodev.ko +kernel/drivers/media/v4l2-core/v4l2-dv-timings.ko +kernel/drivers/media/dvb-core/dvb-core.ko +kernel/drivers/media/common/videobuf2/videobuf2-common.ko +kernel/drivers/media/common/videobuf2/videobuf2-v4l2.ko +kernel/drivers/media/common/videobuf2/videobuf2-memops.ko +kernel/drivers/media/common/videobuf2/videobuf2-vmalloc.ko +kernel/drivers/media/usb/uvc/uvcvideo.ko +kernel/drivers/media/usb/gspca/gspca_main.ko +kernel/drivers/media/usb/gspca/gspca_benq.ko +kernel/drivers/media/usb/gspca/gspca_conex.ko +kernel/drivers/media/usb/gspca/gspca_cpia1.ko +kernel/drivers/media/usb/gspca/gspca_dtcs033.ko +kernel/drivers/media/usb/gspca/gspca_etoms.ko +kernel/drivers/media/usb/gspca/gspca_finepix.ko +kernel/drivers/media/usb/gspca/gspca_jeilinj.ko +kernel/drivers/media/usb/gspca/gspca_jl2005bcd.ko +kernel/drivers/media/usb/gspca/gspca_konica.ko +kernel/drivers/media/usb/gspca/gspca_mars.ko +kernel/drivers/media/usb/gspca/gspca_mr97310a.ko +kernel/drivers/media/usb/gspca/gspca_nw80x.ko +kernel/drivers/media/usb/gspca/gspca_ov519.ko +kernel/drivers/media/usb/gspca/gspca_ov534.ko +kernel/drivers/media/usb/gspca/gspca_ov534_9.ko +kernel/drivers/media/usb/gspca/gspca_pac207.ko +kernel/drivers/media/usb/gspca/gspca_pac7302.ko +kernel/drivers/media/usb/gspca/gspca_pac7311.ko +kernel/drivers/media/usb/gspca/gspca_se401.ko +kernel/drivers/media/usb/gspca/gspca_sn9c2028.ko +kernel/drivers/media/usb/gspca/gspca_sn9c20x.ko +kernel/drivers/media/usb/gspca/gspca_sonixb.ko +kernel/drivers/media/usb/gspca/gspca_sonixj.ko +kernel/drivers/media/usb/gspca/gspca_spca500.ko +kernel/drivers/media/usb/gspca/gspca_spca501.ko +kernel/drivers/media/usb/gspca/gspca_spca505.ko +kernel/drivers/media/usb/gspca/gspca_spca506.ko +kernel/drivers/media/usb/gspca/gspca_spca508.ko +kernel/drivers/media/usb/gspca/gspca_spca561.ko +kernel/drivers/media/usb/gspca/gspca_spca1528.ko +kernel/drivers/media/usb/gspca/gspca_sq905.ko +kernel/drivers/media/usb/gspca/gspca_sq905c.ko +kernel/drivers/media/usb/gspca/gspca_sq930x.ko +kernel/drivers/media/usb/gspca/gspca_sunplus.ko +kernel/drivers/media/usb/gspca/gspca_stk014.ko +kernel/drivers/media/usb/gspca/gspca_stk1135.ko +kernel/drivers/media/usb/gspca/gspca_stv0680.ko +kernel/drivers/media/usb/gspca/gspca_t613.ko +kernel/drivers/media/usb/gspca/gspca_topro.ko +kernel/drivers/media/usb/gspca/gspca_touptek.ko +kernel/drivers/media/usb/gspca/gspca_tv8532.ko +kernel/drivers/media/usb/gspca/gspca_vc032x.ko +kernel/drivers/media/usb/gspca/gspca_vicam.ko +kernel/drivers/media/usb/gspca/gspca_xirlink_cit.ko +kernel/drivers/media/usb/gspca/gspca_zc3xx.ko +kernel/drivers/media/usb/gspca/m5602/gspca_m5602.ko +kernel/drivers/media/usb/gspca/stv06xx/gspca_stv06xx.ko +kernel/drivers/media/usb/gspca/gl860/gspca_gl860.ko +kernel/drivers/pps/pps_core.ko +kernel/drivers/ptp/ptp.ko +kernel/drivers/power/supply/power_supply.ko +kernel/drivers/thermal/ls2k_thermal.ko +kernel/drivers/watchdog/watchdog.ko +kernel/drivers/watchdog/loongson2_wdt.ko +kernel/drivers/cpufreq/freq_table.ko +kernel/drivers/cpufreq/cpufreq_performance.ko +kernel/drivers/cpufreq/cpufreq_powersave.ko +kernel/drivers/cpufreq/cpufreq_userspace.ko +kernel/drivers/cpufreq/cpufreq_ondemand.ko +kernel/drivers/cpufreq/cpufreq_conservative.ko +kernel/drivers/leds/led-class.ko +kernel/drivers/leds/leds-gpio.ko +kernel/drivers/leds/leds-pwm.ko +kernel/drivers/leds/trigger/ledtrig-heartbeat.ko +kernel/drivers/leds/trigger/ledtrig-default-on.ko +kernel/drivers/leds/trigger/ledtrig-audio.ko +kernel/drivers/hid/hid.ko +kernel/drivers/hid/hid-generic.ko +kernel/drivers/hid/hid-multitouch.ko +kernel/drivers/hid/usbhid/usbhid.ko +kernel/drivers/staging/rtl8188eu/r8188eu.ko +kernel/drivers/devfreq/governor_simpleondemand.ko +kernel/drivers/devfreq/governor_performance.ko +kernel/drivers/devfreq/governor_powersave.ko +kernel/drivers/devfreq/governor_userspace.ko +kernel/drivers/nvmem/nvmem_core.ko +kernel/drivers/mux/mux-core.ko +kernel/sound/soundcore.ko +kernel/sound/core/snd.ko +kernel/sound/core/snd-hwdep.ko +kernel/sound/core/snd-timer.ko +kernel/sound/core/snd-pcm.ko +kernel/sound/core/snd-rawmidi.ko +kernel/sound/pci/hda/snd-hda-codec.ko +kernel/sound/pci/hda/snd-hda-codec-generic.ko +kernel/sound/pci/hda/snd-hda-codec-realtek.ko +kernel/sound/pci/hda/snd-hda-codec-idt.ko +kernel/sound/pci/hda/snd-hda-codec-conexant.ko +kernel/sound/pci/hda/snd-hda-codec-hdmi.ko +kernel/sound/pci/hda/snd-hda-intel.ko +kernel/sound/pci/hda/snd-hda-loongson.ko +kernel/sound/usb/snd-usb-audio.ko +kernel/sound/usb/snd-usbmidi-lib.ko +kernel/sound/hda/snd-hda-core.ko +kernel/sound/hda/snd-intel-dspcfg.ko +kernel/net/netlink/netlink_diag.ko +kernel/net/netfilter/nfnetlink.ko +kernel/net/netfilter/nf_conntrack.ko +kernel/net/netfilter/nf_conntrack_netlink.ko +kernel/net/netfilter/nfnetlink_cttimeout.ko +kernel/net/netfilter/nf_conntrack_amanda.ko +kernel/net/netfilter/nf_conntrack_ftp.ko +kernel/net/netfilter/nf_conntrack_h323.ko +kernel/net/netfilter/nf_conntrack_irc.ko +kernel/net/netfilter/nf_conntrack_broadcast.ko +kernel/net/netfilter/nf_conntrack_netbios_ns.ko +kernel/net/netfilter/nf_conntrack_snmp.ko +kernel/net/netfilter/nf_conntrack_pptp.ko +kernel/net/netfilter/nf_conntrack_sane.ko +kernel/net/netfilter/nf_conntrack_sip.ko +kernel/net/netfilter/nf_conntrack_tftp.ko +kernel/net/netfilter/nf_log_common.ko +kernel/net/netfilter/nf_nat.ko +kernel/net/netfilter/nf_nat_amanda.ko +kernel/net/netfilter/nf_nat_ftp.ko +kernel/net/netfilter/nf_nat_irc.ko +kernel/net/netfilter/nf_nat_sip.ko +kernel/net/netfilter/nf_nat_tftp.ko +kernel/net/netfilter/nf_synproxy_core.ko +kernel/net/netfilter/x_tables.ko +kernel/net/netfilter/xt_tcpudp.ko +kernel/net/netfilter/xt_nat.ko +kernel/net/netfilter/xt_HL.ko +kernel/net/netfilter/xt_NETMAP.ko +kernel/net/netfilter/xt_REDIRECT.ko +kernel/net/netfilter/xt_MASQUERADE.ko +kernel/net/netfilter/xt_ecn.ko +kernel/net/netfilter/xt_hl.ko +kernel/net/ipv4/ip_tunnel.ko +kernel/net/ipv4/tunnel4.ko +kernel/net/ipv4/netfilter/nf_defrag_ipv4.ko +kernel/net/ipv4/netfilter/nf_socket_ipv4.ko +kernel/net/ipv4/netfilter/nf_tproxy_ipv4.ko +kernel/net/ipv4/netfilter/nf_log_arp.ko +kernel/net/ipv4/netfilter/nf_log_ipv4.ko +kernel/net/ipv4/netfilter/nf_reject_ipv4.ko +kernel/net/ipv4/netfilter/nf_nat_h323.ko +kernel/net/ipv4/netfilter/nf_nat_pptp.ko +kernel/net/ipv4/netfilter/nf_nat_snmp_basic.ko +kernel/net/ipv4/netfilter/ip_tables.ko +kernel/net/ipv4/netfilter/iptable_filter.ko +kernel/net/ipv4/netfilter/iptable_mangle.ko +kernel/net/ipv4/netfilter/iptable_nat.ko +kernel/net/ipv4/netfilter/iptable_raw.ko +kernel/net/ipv4/netfilter/iptable_security.ko +kernel/net/ipv4/netfilter/ipt_ah.ko +kernel/net/ipv4/netfilter/ipt_rpfilter.ko +kernel/net/ipv4/netfilter/ipt_CLUSTERIP.ko +kernel/net/ipv4/netfilter/ipt_ECN.ko +kernel/net/ipv4/netfilter/ipt_REJECT.ko +kernel/net/ipv4/netfilter/ipt_SYNPROXY.ko +kernel/net/ipv4/netfilter/arp_tables.ko +kernel/net/ipv4/netfilter/arpt_mangle.ko +kernel/net/ipv4/netfilter/arptable_filter.ko +kernel/net/ipv4/netfilter/nf_dup_ipv4.ko +kernel/net/ipv4/inet_diag.ko +kernel/net/ipv4/tcp_diag.ko +kernel/net/ipv4/udp_diag.ko +kernel/net/ipv4/tcp_cubic.ko +kernel/net/xfrm/xfrm_algo.ko +kernel/net/xfrm/xfrm_user.ko +kernel/net/unix/unix.ko +kernel/net/ipv6/ipv6.ko +kernel/net/ipv6/netfilter/ip6_tables.ko +kernel/net/ipv6/netfilter/ip6table_filter.ko +kernel/net/ipv6/netfilter/nf_defrag_ipv6.ko +kernel/net/ipv6/sit.ko +kernel/net/packet/af_packet.ko +kernel/net/key/af_key.ko +kernel/net/can/can.ko +kernel/net/can/can-raw.ko +kernel/net/can/can-bcm.ko +kernel/net/can/can-gw.ko +kernel/net/bluetooth/bluetooth.ko +kernel/net/sunrpc/sunrpc.ko +kernel/net/sunrpc/auth_gss/auth_rpcgss.ko +kernel/net/rds/rds.ko +kernel/net/wireless/cfg80211.ko +kernel/net/wireless/lib80211.ko +kernel/net/wireless/lib80211_crypt_wep.ko +kernel/net/wireless/lib80211_crypt_ccmp.ko +kernel/net/mac80211/mac80211.ko +kernel/net/rfkill/rfkill.ko +kernel/net/dns_resolver/dns_resolver.ko +kernel/arch/loongarch/crypto/crc32.ko diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.builtin.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.builtin.bin new file mode 100644 index 00000000..d837303a Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.builtin.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.builtin.modinfo b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.builtin.modinfo new file mode 100644 index 00000000..25ef029f Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.builtin.modinfo differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.dep b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.dep new file mode 100644 index 00000000..a73fa272 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.dep @@ -0,0 +1,187 @@ +kernel/fs/nfs/flexfilelayout/nfs_layout_flexfiles.ko: +kernel/crypto/michael_mic.ko: +kernel/drivers/misc/eeprom/eeprom_93cx6.ko: +kernel/drivers/net/wireless/intel/ipw2x00/ipw2100.ko: kernel/drivers/net/wireless/intel/ipw2x00/libipw.ko +kernel/drivers/net/wireless/intel/ipw2x00/ipw2200.ko: kernel/drivers/net/wireless/intel/ipw2x00/libipw.ko +kernel/drivers/net/wireless/intel/ipw2x00/libipw.ko: +kernel/drivers/net/wireless/intel/iwlegacy/iwlegacy.ko: +kernel/drivers/net/wireless/intel/iwlegacy/iwl4965.ko: kernel/drivers/net/wireless/intel/iwlegacy/iwlegacy.ko +kernel/drivers/net/wireless/intel/iwlegacy/iwl3945.ko: kernel/drivers/net/wireless/intel/iwlegacy/iwlegacy.ko +kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko: +kernel/drivers/net/wireless/intel/iwlwifi/dvm/iwldvm.ko: kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko +kernel/drivers/net/wireless/intel/iwlwifi/mvm/iwlmvm.ko: kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko +kernel/drivers/net/wireless/realtek/rtl818x/rtl8180/rtl818x_pci.ko: kernel/drivers/misc/eeprom/eeprom_93cx6.ko +kernel/drivers/net/wireless/realtek/rtl818x/rtl8187/rtl8187.ko: kernel/drivers/misc/eeprom/eeprom_93cx6.ko +kernel/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.ko: +kernel/drivers/net/wireless/realtek/rtw88/rtw88_core.ko: +kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822b.ko: kernel/drivers/net/wireless/realtek/rtw88/rtw88_core.ko +kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822be.ko: kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822b.ko kernel/drivers/net/wireless/realtek/rtw88/rtw88_pci.ko kernel/drivers/net/wireless/realtek/rtw88/rtw88_core.ko +kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822c.ko: kernel/drivers/net/wireless/realtek/rtw88/rtw88_core.ko +kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822ce.ko: kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822c.ko kernel/drivers/net/wireless/realtek/rtw88/rtw88_pci.ko kernel/drivers/net/wireless/realtek/rtw88/rtw88_core.ko +kernel/drivers/net/wireless/realtek/rtw88/rtw88_8723d.ko: kernel/drivers/net/wireless/realtek/rtw88/rtw88_core.ko +kernel/drivers/net/wireless/realtek/rtw88/rtw88_8723de.ko: kernel/drivers/net/wireless/realtek/rtw88/rtw88_8723d.ko kernel/drivers/net/wireless/realtek/rtw88/rtw88_pci.ko kernel/drivers/net/wireless/realtek/rtw88/rtw88_core.ko +kernel/drivers/net/wireless/realtek/rtw88/rtw88_8821c.ko: kernel/drivers/net/wireless/realtek/rtw88/rtw88_core.ko +kernel/drivers/net/wireless/realtek/rtw88/rtw88_8821ce.ko: kernel/drivers/net/wireless/realtek/rtw88/rtw88_8821c.ko kernel/drivers/net/wireless/realtek/rtw88/rtw88_pci.ko kernel/drivers/net/wireless/realtek/rtw88/rtw88_core.ko +kernel/drivers/net/wireless/realtek/rtw88/rtw88_pci.ko: kernel/drivers/net/wireless/realtek/rtw88/rtw88_core.ko +kernel/drivers/media/tuners/tuner-xc2028.ko: +kernel/drivers/media/tuners/tuner-simple.ko: kernel/drivers/media/tuners/tuner-types.ko +kernel/drivers/media/tuners/tuner-types.ko: +kernel/drivers/media/tuners/mt20xx.ko: +kernel/drivers/media/tuners/tda8290.ko: +kernel/drivers/media/tuners/tea5767.ko: +kernel/drivers/media/tuners/tea5761.ko: +kernel/drivers/media/tuners/tda9887.ko: +kernel/drivers/media/tuners/tda827x.ko: +kernel/drivers/media/tuners/tda18271.ko: +kernel/drivers/media/tuners/xc5000.ko: +kernel/drivers/media/tuners/xc4000.ko: +kernel/drivers/media/tuners/msi001.ko: +kernel/drivers/media/tuners/mt2060.ko: +kernel/drivers/media/tuners/mt2063.ko: +kernel/drivers/media/tuners/mt2266.ko: +kernel/drivers/media/tuners/qt1010.ko: +kernel/drivers/media/tuners/mt2131.ko: +kernel/drivers/media/tuners/mxl5005s.ko: +kernel/drivers/media/tuners/mxl5007t.ko: +kernel/drivers/media/tuners/mc44s803.ko: +kernel/drivers/media/tuners/max2165.ko: +kernel/drivers/media/tuners/tda18218.ko: +kernel/drivers/media/tuners/tda18212.ko: +kernel/drivers/media/tuners/e4000.ko: +kernel/drivers/media/tuners/fc2580.ko: +kernel/drivers/media/tuners/tua9001.ko: +kernel/drivers/media/tuners/si2157.ko: +kernel/drivers/media/tuners/fc0011.ko: +kernel/drivers/media/tuners/fc0012.ko: +kernel/drivers/media/tuners/fc0013.ko: +kernel/drivers/media/tuners/it913x.ko: +kernel/drivers/media/tuners/r820t.ko: +kernel/drivers/media/tuners/mxl301rf.ko: +kernel/drivers/media/tuners/qm1d1c0042.ko: +kernel/drivers/media/tuners/qm1d1b0004.ko: +kernel/drivers/media/tuners/m88rs6000t.ko: +kernel/drivers/media/tuners/tda18250.ko: +kernel/drivers/media/dvb-frontends/dvb-pll.ko: +kernel/drivers/media/dvb-frontends/stv0299.ko: +kernel/drivers/media/dvb-frontends/stb0899.ko: +kernel/drivers/media/dvb-frontends/stb6100.ko: +kernel/drivers/media/dvb-frontends/sp8870.ko: +kernel/drivers/media/dvb-frontends/cx22700.ko: +kernel/drivers/media/dvb-frontends/s5h1432.ko: +kernel/drivers/media/dvb-frontends/cx24110.ko: +kernel/drivers/media/dvb-frontends/tda8083.ko: +kernel/drivers/media/dvb-frontends/l64781.ko: +kernel/drivers/media/dvb-frontends/dib3000mb.ko: +kernel/drivers/media/dvb-frontends/dib3000mc.ko: kernel/drivers/media/dvb-frontends/dibx000_common.ko +kernel/drivers/media/dvb-frontends/dibx000_common.ko: +kernel/drivers/media/dvb-frontends/dib7000m.ko: kernel/drivers/media/dvb-frontends/dibx000_common.ko +kernel/drivers/media/dvb-frontends/dib7000p.ko: kernel/drivers/media/dvb-frontends/dibx000_common.ko +kernel/drivers/media/dvb-frontends/dib8000.ko: kernel/drivers/media/dvb-frontends/dibx000_common.ko +kernel/drivers/media/dvb-frontends/dib9000.ko: kernel/drivers/media/dvb-frontends/dibx000_common.ko +kernel/drivers/media/dvb-frontends/mt312.ko: +kernel/drivers/media/dvb-frontends/ves1820.ko: +kernel/drivers/media/dvb-frontends/ves1x93.ko: +kernel/drivers/media/dvb-frontends/tda1004x.ko: +kernel/drivers/media/dvb-frontends/sp887x.ko: +kernel/drivers/media/dvb-frontends/nxt6000.ko: +kernel/drivers/media/dvb-frontends/mt352.ko: +kernel/drivers/media/dvb-frontends/zl10036.ko: +kernel/drivers/media/dvb-frontends/zl10039.ko: +kernel/drivers/media/dvb-frontends/zl10353.ko: +kernel/drivers/media/dvb-frontends/cx22702.ko: +kernel/drivers/media/dvb-frontends/drxd.ko: +kernel/drivers/media/dvb-frontends/tda10021.ko: +kernel/drivers/media/dvb-frontends/tda10023.ko: +kernel/drivers/media/dvb-frontends/stv0297.ko: +kernel/drivers/media/dvb-frontends/nxt200x.ko: +kernel/drivers/media/dvb-frontends/or51211.ko: +kernel/drivers/media/dvb-frontends/or51132.ko: +kernel/drivers/media/dvb-frontends/bcm3510.ko: +kernel/drivers/media/dvb-frontends/s5h1420.ko: +kernel/drivers/media/dvb-frontends/lgdt330x.ko: +kernel/drivers/media/dvb-frontends/lgdt3305.ko: +kernel/drivers/media/dvb-frontends/lgdt3306a.ko: +kernel/drivers/media/dvb-frontends/lg2160.ko: +kernel/drivers/media/dvb-frontends/cx24123.ko: +kernel/drivers/media/dvb-frontends/lnbh25.ko: +kernel/drivers/media/dvb-frontends/lnbh29.ko: +kernel/drivers/media/dvb-frontends/lnbp21.ko: +kernel/drivers/media/dvb-frontends/lnbp22.ko: +kernel/drivers/media/dvb-frontends/isl6405.ko: +kernel/drivers/media/dvb-frontends/isl6421.ko: +kernel/drivers/media/dvb-frontends/tda10086.ko: +kernel/drivers/media/dvb-frontends/tda826x.ko: +kernel/drivers/media/dvb-frontends/tda8261.ko: +kernel/drivers/media/dvb-frontends/dib0070.ko: +kernel/drivers/media/dvb-frontends/dib0090.ko: +kernel/drivers/media/dvb-frontends/tua6100.ko: +kernel/drivers/media/dvb-frontends/s5h1409.ko: +kernel/drivers/media/dvb-frontends/itd1000.ko: +kernel/drivers/media/dvb-frontends/au8522_common.ko: +kernel/drivers/media/dvb-frontends/au8522_dig.ko: kernel/drivers/media/dvb-frontends/au8522_common.ko +kernel/drivers/media/dvb-frontends/au8522_decoder.ko: kernel/drivers/media/dvb-frontends/au8522_common.ko +kernel/drivers/media/dvb-frontends/tda10048.ko: +kernel/drivers/media/dvb-frontends/cx24113.ko: +kernel/drivers/media/dvb-frontends/s5h1411.ko: +kernel/drivers/media/dvb-frontends/lgs8gl5.ko: +kernel/drivers/media/dvb-frontends/tda665x.ko: +kernel/drivers/media/dvb-frontends/lgs8gxx.ko: +kernel/drivers/media/dvb-frontends/atbm8830.ko: +kernel/drivers/media/dvb-frontends/af9013.ko: +kernel/drivers/media/dvb-frontends/cx24116.ko: +kernel/drivers/media/dvb-frontends/cx24117.ko: +kernel/drivers/media/dvb-frontends/cx24120.ko: +kernel/drivers/media/dvb-frontends/si21xx.ko: +kernel/drivers/media/dvb-frontends/si2168.ko: +kernel/drivers/media/dvb-frontends/stv0288.ko: +kernel/drivers/media/dvb-frontends/stb6000.ko: +kernel/drivers/media/dvb-frontends/s921.ko: +kernel/drivers/media/dvb-frontends/stv6110.ko: +kernel/drivers/media/dvb-frontends/stv0900.ko: +kernel/drivers/media/dvb-frontends/stv090x.ko: +kernel/drivers/media/dvb-frontends/stv6110x.ko: +kernel/drivers/media/dvb-frontends/m88ds3103.ko: +kernel/drivers/media/dvb-frontends/mn88472.ko: +kernel/drivers/media/dvb-frontends/mn88473.ko: +kernel/drivers/media/dvb-frontends/isl6423.ko: +kernel/drivers/media/dvb-frontends/ec100.ko: +kernel/drivers/media/dvb-frontends/ds3000.ko: +kernel/drivers/media/dvb-frontends/ts2020.ko: +kernel/drivers/media/dvb-frontends/mb86a16.ko: +kernel/drivers/media/dvb-frontends/drx39xyj/drx39xyj.ko: +kernel/drivers/media/dvb-frontends/mb86a20s.ko: +kernel/drivers/media/dvb-frontends/ix2505v.ko: +kernel/drivers/media/dvb-frontends/stv0367.ko: +kernel/drivers/media/dvb-frontends/cxd2820r.ko: +kernel/drivers/media/dvb-frontends/cxd2841er.ko: +kernel/drivers/media/dvb-frontends/drxk.ko: +kernel/drivers/media/dvb-frontends/tda18271c2dd.ko: +kernel/drivers/media/dvb-frontends/stv0910.ko: +kernel/drivers/media/dvb-frontends/stv6111.ko: +kernel/drivers/media/dvb-frontends/mxl5xx.ko: +kernel/drivers/media/dvb-frontends/si2165.ko: +kernel/drivers/media/dvb-frontends/a8293.ko: +kernel/drivers/media/dvb-frontends/sp2.ko: +kernel/drivers/media/dvb-frontends/tda10071.ko: +kernel/drivers/media/dvb-frontends/rtl2830.ko: +kernel/drivers/media/dvb-frontends/rtl2832.ko: +kernel/drivers/media/dvb-frontends/rtl2832_sdr.ko: +kernel/drivers/media/dvb-frontends/m88rs2000.ko: +kernel/drivers/media/dvb-frontends/af9033.ko: +kernel/drivers/media/dvb-frontends/tc90522.ko: +kernel/drivers/media/dvb-frontends/mn88443x.ko: +kernel/drivers/media/dvb-frontends/horus3a.ko: +kernel/drivers/media/dvb-frontends/ascot2e.ko: +kernel/drivers/media/dvb-frontends/helene.ko: +kernel/drivers/media/dvb-frontends/zd1301_demod.ko: +kernel/drivers/media/dvb-frontends/cxd2099.ko: +kernel/drivers/media/dvb-frontends/cxd2880/cxd2880.ko: +kernel/drivers/media/spi/cxd2880-spi.ko: +kernel/drivers/bluetooth/btusb.ko: kernel/drivers/bluetooth/btrtl.ko kernel/drivers/bluetooth/btbcm.ko kernel/drivers/bluetooth/btintel.ko +kernel/drivers/bluetooth/btintel.ko: +kernel/drivers/bluetooth/btbcm.ko: +kernel/drivers/bluetooth/btrtl.ko: +kernel/net/ipv4/tcp_bic.ko: +kernel/net/ipv4/tcp_westwood.ko: +kernel/net/ipv4/tcp_htcp.ko: +kernel/net/wireless/lib80211_crypt_tkip.ko: diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.dep.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.dep.bin new file mode 100644 index 00000000..a45cb35a Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.dep.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.devname b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.devname new file mode 100644 index 00000000..e69de29b diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.order b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.order new file mode 100644 index 00000000..cab692b1 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.order @@ -0,0 +1,187 @@ +kernel/fs/nfs/flexfilelayout/nfs_layout_flexfiles.ko +kernel/crypto/michael_mic.ko +kernel/drivers/misc/eeprom/eeprom_93cx6.ko +kernel/drivers/net/wireless/intel/ipw2x00/ipw2100.ko +kernel/drivers/net/wireless/intel/ipw2x00/ipw2200.ko +kernel/drivers/net/wireless/intel/ipw2x00/libipw.ko +kernel/drivers/net/wireless/intel/iwlegacy/iwlegacy.ko +kernel/drivers/net/wireless/intel/iwlegacy/iwl4965.ko +kernel/drivers/net/wireless/intel/iwlegacy/iwl3945.ko +kernel/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko +kernel/drivers/net/wireless/intel/iwlwifi/dvm/iwldvm.ko +kernel/drivers/net/wireless/intel/iwlwifi/mvm/iwlmvm.ko +kernel/drivers/net/wireless/realtek/rtl818x/rtl8180/rtl818x_pci.ko +kernel/drivers/net/wireless/realtek/rtl818x/rtl8187/rtl8187.ko +kernel/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.ko +kernel/drivers/net/wireless/realtek/rtw88/rtw88_core.ko +kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822b.ko +kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822be.ko +kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822c.ko +kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822ce.ko +kernel/drivers/net/wireless/realtek/rtw88/rtw88_8723d.ko +kernel/drivers/net/wireless/realtek/rtw88/rtw88_8723de.ko +kernel/drivers/net/wireless/realtek/rtw88/rtw88_8821c.ko +kernel/drivers/net/wireless/realtek/rtw88/rtw88_8821ce.ko +kernel/drivers/net/wireless/realtek/rtw88/rtw88_pci.ko +kernel/drivers/media/tuners/tuner-xc2028.ko +kernel/drivers/media/tuners/tuner-simple.ko +kernel/drivers/media/tuners/tuner-types.ko +kernel/drivers/media/tuners/mt20xx.ko +kernel/drivers/media/tuners/tda8290.ko +kernel/drivers/media/tuners/tea5767.ko +kernel/drivers/media/tuners/tea5761.ko +kernel/drivers/media/tuners/tda9887.ko +kernel/drivers/media/tuners/tda827x.ko +kernel/drivers/media/tuners/tda18271.ko +kernel/drivers/media/tuners/xc5000.ko +kernel/drivers/media/tuners/xc4000.ko +kernel/drivers/media/tuners/msi001.ko +kernel/drivers/media/tuners/mt2060.ko +kernel/drivers/media/tuners/mt2063.ko +kernel/drivers/media/tuners/mt2266.ko +kernel/drivers/media/tuners/qt1010.ko +kernel/drivers/media/tuners/mt2131.ko +kernel/drivers/media/tuners/mxl5005s.ko +kernel/drivers/media/tuners/mxl5007t.ko +kernel/drivers/media/tuners/mc44s803.ko +kernel/drivers/media/tuners/max2165.ko +kernel/drivers/media/tuners/tda18218.ko +kernel/drivers/media/tuners/tda18212.ko +kernel/drivers/media/tuners/e4000.ko +kernel/drivers/media/tuners/fc2580.ko +kernel/drivers/media/tuners/tua9001.ko +kernel/drivers/media/tuners/si2157.ko +kernel/drivers/media/tuners/fc0011.ko +kernel/drivers/media/tuners/fc0012.ko +kernel/drivers/media/tuners/fc0013.ko +kernel/drivers/media/tuners/it913x.ko +kernel/drivers/media/tuners/r820t.ko +kernel/drivers/media/tuners/mxl301rf.ko +kernel/drivers/media/tuners/qm1d1c0042.ko +kernel/drivers/media/tuners/qm1d1b0004.ko +kernel/drivers/media/tuners/m88rs6000t.ko +kernel/drivers/media/tuners/tda18250.ko +kernel/drivers/media/dvb-frontends/dvb-pll.ko +kernel/drivers/media/dvb-frontends/stv0299.ko +kernel/drivers/media/dvb-frontends/stb0899.ko +kernel/drivers/media/dvb-frontends/stb6100.ko +kernel/drivers/media/dvb-frontends/sp8870.ko +kernel/drivers/media/dvb-frontends/cx22700.ko +kernel/drivers/media/dvb-frontends/s5h1432.ko +kernel/drivers/media/dvb-frontends/cx24110.ko +kernel/drivers/media/dvb-frontends/tda8083.ko +kernel/drivers/media/dvb-frontends/l64781.ko +kernel/drivers/media/dvb-frontends/dib3000mb.ko +kernel/drivers/media/dvb-frontends/dib3000mc.ko +kernel/drivers/media/dvb-frontends/dibx000_common.ko +kernel/drivers/media/dvb-frontends/dib7000m.ko +kernel/drivers/media/dvb-frontends/dib7000p.ko +kernel/drivers/media/dvb-frontends/dib8000.ko +kernel/drivers/media/dvb-frontends/dib9000.ko +kernel/drivers/media/dvb-frontends/mt312.ko +kernel/drivers/media/dvb-frontends/ves1820.ko +kernel/drivers/media/dvb-frontends/ves1x93.ko +kernel/drivers/media/dvb-frontends/tda1004x.ko +kernel/drivers/media/dvb-frontends/sp887x.ko +kernel/drivers/media/dvb-frontends/nxt6000.ko +kernel/drivers/media/dvb-frontends/mt352.ko +kernel/drivers/media/dvb-frontends/zl10036.ko +kernel/drivers/media/dvb-frontends/zl10039.ko +kernel/drivers/media/dvb-frontends/zl10353.ko +kernel/drivers/media/dvb-frontends/cx22702.ko +kernel/drivers/media/dvb-frontends/drxd.ko +kernel/drivers/media/dvb-frontends/tda10021.ko +kernel/drivers/media/dvb-frontends/tda10023.ko +kernel/drivers/media/dvb-frontends/stv0297.ko +kernel/drivers/media/dvb-frontends/nxt200x.ko +kernel/drivers/media/dvb-frontends/or51211.ko +kernel/drivers/media/dvb-frontends/or51132.ko +kernel/drivers/media/dvb-frontends/bcm3510.ko +kernel/drivers/media/dvb-frontends/s5h1420.ko +kernel/drivers/media/dvb-frontends/lgdt330x.ko +kernel/drivers/media/dvb-frontends/lgdt3305.ko +kernel/drivers/media/dvb-frontends/lgdt3306a.ko +kernel/drivers/media/dvb-frontends/lg2160.ko +kernel/drivers/media/dvb-frontends/cx24123.ko +kernel/drivers/media/dvb-frontends/lnbh25.ko +kernel/drivers/media/dvb-frontends/lnbh29.ko +kernel/drivers/media/dvb-frontends/lnbp21.ko +kernel/drivers/media/dvb-frontends/lnbp22.ko +kernel/drivers/media/dvb-frontends/isl6405.ko +kernel/drivers/media/dvb-frontends/isl6421.ko +kernel/drivers/media/dvb-frontends/tda10086.ko +kernel/drivers/media/dvb-frontends/tda826x.ko +kernel/drivers/media/dvb-frontends/tda8261.ko +kernel/drivers/media/dvb-frontends/dib0070.ko +kernel/drivers/media/dvb-frontends/dib0090.ko +kernel/drivers/media/dvb-frontends/tua6100.ko +kernel/drivers/media/dvb-frontends/s5h1409.ko +kernel/drivers/media/dvb-frontends/itd1000.ko +kernel/drivers/media/dvb-frontends/au8522_common.ko +kernel/drivers/media/dvb-frontends/au8522_dig.ko +kernel/drivers/media/dvb-frontends/au8522_decoder.ko +kernel/drivers/media/dvb-frontends/tda10048.ko +kernel/drivers/media/dvb-frontends/cx24113.ko +kernel/drivers/media/dvb-frontends/s5h1411.ko +kernel/drivers/media/dvb-frontends/lgs8gl5.ko +kernel/drivers/media/dvb-frontends/tda665x.ko +kernel/drivers/media/dvb-frontends/lgs8gxx.ko +kernel/drivers/media/dvb-frontends/atbm8830.ko +kernel/drivers/media/dvb-frontends/af9013.ko +kernel/drivers/media/dvb-frontends/cx24116.ko +kernel/drivers/media/dvb-frontends/cx24117.ko +kernel/drivers/media/dvb-frontends/cx24120.ko +kernel/drivers/media/dvb-frontends/si21xx.ko +kernel/drivers/media/dvb-frontends/si2168.ko +kernel/drivers/media/dvb-frontends/stv0288.ko +kernel/drivers/media/dvb-frontends/stb6000.ko +kernel/drivers/media/dvb-frontends/s921.ko +kernel/drivers/media/dvb-frontends/stv6110.ko +kernel/drivers/media/dvb-frontends/stv0900.ko +kernel/drivers/media/dvb-frontends/stv090x.ko +kernel/drivers/media/dvb-frontends/stv6110x.ko +kernel/drivers/media/dvb-frontends/m88ds3103.ko +kernel/drivers/media/dvb-frontends/mn88472.ko +kernel/drivers/media/dvb-frontends/mn88473.ko +kernel/drivers/media/dvb-frontends/isl6423.ko +kernel/drivers/media/dvb-frontends/ec100.ko +kernel/drivers/media/dvb-frontends/ds3000.ko +kernel/drivers/media/dvb-frontends/ts2020.ko +kernel/drivers/media/dvb-frontends/mb86a16.ko +kernel/drivers/media/dvb-frontends/drx39xyj/drx39xyj.ko +kernel/drivers/media/dvb-frontends/mb86a20s.ko +kernel/drivers/media/dvb-frontends/ix2505v.ko +kernel/drivers/media/dvb-frontends/stv0367.ko +kernel/drivers/media/dvb-frontends/cxd2820r.ko +kernel/drivers/media/dvb-frontends/cxd2841er.ko +kernel/drivers/media/dvb-frontends/drxk.ko +kernel/drivers/media/dvb-frontends/tda18271c2dd.ko +kernel/drivers/media/dvb-frontends/stv0910.ko +kernel/drivers/media/dvb-frontends/stv6111.ko +kernel/drivers/media/dvb-frontends/mxl5xx.ko +kernel/drivers/media/dvb-frontends/si2165.ko +kernel/drivers/media/dvb-frontends/a8293.ko +kernel/drivers/media/dvb-frontends/sp2.ko +kernel/drivers/media/dvb-frontends/tda10071.ko +kernel/drivers/media/dvb-frontends/rtl2830.ko +kernel/drivers/media/dvb-frontends/rtl2832.ko +kernel/drivers/media/dvb-frontends/rtl2832_sdr.ko +kernel/drivers/media/dvb-frontends/m88rs2000.ko +kernel/drivers/media/dvb-frontends/af9033.ko +kernel/drivers/media/dvb-frontends/tc90522.ko +kernel/drivers/media/dvb-frontends/mn88443x.ko +kernel/drivers/media/dvb-frontends/horus3a.ko +kernel/drivers/media/dvb-frontends/ascot2e.ko +kernel/drivers/media/dvb-frontends/helene.ko +kernel/drivers/media/dvb-frontends/zd1301_demod.ko +kernel/drivers/media/dvb-frontends/cxd2099.ko +kernel/drivers/media/dvb-frontends/cxd2880/cxd2880.ko +kernel/drivers/media/spi/cxd2880-spi.ko +kernel/drivers/bluetooth/btusb.ko +kernel/drivers/bluetooth/btintel.ko +kernel/drivers/bluetooth/btbcm.ko +kernel/drivers/bluetooth/btrtl.ko +kernel/net/ipv4/tcp_bic.ko +kernel/net/ipv4/tcp_westwood.ko +kernel/net/ipv4/tcp_htcp.ko +kernel/net/wireless/lib80211_crypt_tkip.ko diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.softdep b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.softdep new file mode 100644 index 00000000..5554ccca --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.softdep @@ -0,0 +1 @@ +# Soft dependencies extracted from modules themselves. diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.symbols b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.symbols new file mode 100644 index 00000000..647c579c --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.symbols @@ -0,0 +1,498 @@ +# Aliases for symbols, used by symbol_request(). +alias symbol:il_queue_space iwlegacy +alias symbol:mb86a20s_attach mb86a20s +alias symbol:il_send_lq_cmd iwlegacy +alias symbol:libipw_channel_to_index libipw +alias symbol:zd1301_demod_get_i2c_adapter zd1301_demod +alias symbol:libipw_set_geo libipw +alias symbol:dib0090_set_dc_servo dib0090 +alias symbol:btintel_set_event_mask_mfg btintel +alias symbol:il_tx_queue_reset iwlegacy +alias symbol:il_eeprom_query16 iwlegacy +alias symbol:il_cmd_queue_unmap iwlegacy +alias symbol:il_hdl_csa iwlegacy +alias symbol:rtw_bf_remove_bfee_su rtw88_core +alias symbol:il_tx_cmd_complete iwlegacy +alias symbol:il_set_bit iwlegacy +alias symbol:iwl_nvm_fixups iwlwifi +alias symbol:s5h1409_attach s5h1409 +alias symbol:alloc_libipw libipw +alias symbol:rtw_debug_mask rtw88_core +alias symbol:il_init_geos iwlegacy +alias symbol:stv6110_attach stv6110 +alias symbol:ec100_attach ec100 +alias symbol:il_rd_prph iwlegacy +alias symbol:iwl_init_notification_wait iwlwifi +alias symbol:stv0297_attach stv0297 +alias symbol:or51211_attach or51211 +alias symbol:rtw_fw_lps_deep_mode rtw88_core +alias symbol:_il_poll_bit iwlegacy +alias symbol:dib0090_update_rframp_7090 dib0090 +alias symbol:rtw_phy_pwrtrack_need_iqk rtw88_core +alias symbol:__iwl_warn iwlwifi +alias symbol:iwl_read_external_nvm iwlwifi +alias symbol:isl6421_attach isl6421 +alias symbol:libipw_wx_get_encodeext libipw +alias symbol:dib7000p_attach dib7000p +alias symbol:tda9887_attach tda9887 +alias symbol:rtw_unregister_hw rtw88_core +alias symbol:libipw_freq_to_channel libipw +alias symbol:eeprom_93cx6_wren eeprom_93cx6 +alias symbol:tda665x_attach tda665x +alias symbol:max2165_attach max2165 +alias symbol:il_tx_queue_free iwlegacy +alias symbol:rtw_rx_stats rtw88_core +alias symbol:iwl_phy_db_free iwlwifi +alias symbol:il_usecs_to_beacons iwlegacy +alias symbol:il_get_free_ucode_key_idx iwlegacy +alias symbol:rtw8822b_hw_spec rtw88_8822b +alias symbol:iwl_dbg_tlv_del_timers iwlwifi +alias symbol:cxd2880_attach cxd2880 +alias symbol:cx24113_attach cx24113 +alias symbol:il_set_rxon_ht iwlegacy +alias symbol:il_add_station_common iwlegacy +alias symbol:il_irq_handle_error iwlegacy +alias symbol:lg2160_attach lg2160 +alias symbol:rtw_phy_init rtw88_core +alias symbol:il_leds_exit iwlegacy +alias symbol:rtw_pci_probe rtw88_pci +alias symbol:drxk_attach drxk +alias symbol:il_setup_scan_deferred_work iwlegacy +alias symbol:dib7000m_pid_filter dib7000m +alias symbol:btintel_regmap_init btintel +alias symbol:au8522_writereg au8522_common +alias symbol:il_chswitch_done iwlegacy +alias symbol:tda10045_attach tda1004x +alias symbol:or51132_attach or51132 +alias symbol:r820t_attach r820t +alias symbol:dib0070_wbd_offset dib0070 +alias symbol:il_eeprom_free iwlegacy +alias symbol:iwl_write_direct64 iwlwifi +alias symbol:dib7000m_attach dib7000m +alias symbol:dib0090_set_vga dib0090 +alias symbol:eeprom_93cx6_multiread eeprom_93cx6 +alias symbol:iwl_phy_db_init iwlwifi +alias symbol:rtw_power_mode_change rtw88_core +alias symbol:dib3000mc_get_tuner_i2c_master dib3000mc +alias symbol:btintel_enter_mfg btintel +alias symbol:lgs8gxx_attach lgs8gxx +alias symbol:s5h1411_attach s5h1411 +alias symbol:isl6423_attach isl6423 +alias symbol:au8522_init au8522_common +alias symbol:rtw8723d_hw_spec rtw88_8723d +alias symbol:btbcm_patchram btbcm +alias symbol:free_libipw libipw +alias symbol:stv0288_attach stv0288 +alias symbol:iwl_write_prph64_no_grab iwlwifi +alias symbol:rtw_core_init rtw88_core +alias symbol:rtw_pm_ops rtw88_pci +alias symbol:il_rx_queue_alloc iwlegacy +alias symbol:rtw_phy_read_rf_sipi rtw88_core +alias symbol:il_setup_rx_scan_handlers iwlegacy +alias symbol:dib8000_attach dib8000 +alias symbol:il_rx_queue_space iwlegacy +alias symbol:rtw_core_deinit rtw88_core +alias symbol:dib3000mc_i2c_enumeration dib3000mc +alias symbol:il_set_decrypted_flag iwlegacy +alias symbol:iwl_fw_runtime_resume iwlwifi +alias symbol:tda827x_attach tda827x +alias symbol:au8522_get_state au8522_common +alias symbol:iwl_init_paging iwlwifi +alias symbol:_il_apm_stop iwlegacy +alias symbol:__iwl_info iwlwifi +alias symbol:btbcm_finalize btbcm +alias symbol:il_send_rxon_timing iwlegacy +alias symbol:ts2020_attach ts2020 +alias symbol:il_mac_bss_info_changed iwlegacy +alias symbol:iwl_free_fw_paging iwlwifi +alias symbol:rtw_pci_remove rtw88_pci +alias symbol:rtw_rx_fill_rx_status rtw88_core +alias symbol:btintel_set_diag_mfg btintel +alias symbol:cxd2820r_attach cxd2820r +alias symbol:il_tx_queue_unmap iwlegacy +alias symbol:btbcm_setup_patchram btbcm +alias symbol:btintel_read_version_tlv btintel +alias symbol:il_set_rate iwlegacy +alias symbol:iwl_remove_notification iwlwifi +alias symbol:il_restore_stations iwlegacy +alias symbol:dib0090_dcc_freq dib0090 +alias symbol:rtw_coex_write_indirect_reg rtw88_core +alias symbol:lgdt330x_attach lgdt330x +alias symbol:lgdt3306a_attach lgdt3306a +alias symbol:libipw_wx_set_encode libipw +alias symbol:check_hw_ready rtw88_core +alias symbol:btbcm_check_bdaddr btbcm +alias symbol:il_debug_level iwlegacy +alias symbol:mt2266_attach mt2266 +alias symbol:libipw_networks_age libipw +alias symbol:btintel_set_diag btintel +alias symbol:il_power_initialize iwlegacy +alias symbol:il_setup_watchdog iwlegacy +alias symbol:dibx000_init_i2c_master dibx000_common +alias symbol:stv0910_attach stv0910 +alias symbol:rtw_restore_reg rtw88_core +alias symbol:il_eeprom_query_addr iwlegacy +alias symbol:rtw_fw_do_iqk rtw88_core +alias symbol:dib7000m_pid_filter_ctrl dib7000m +alias symbol:tea5761_autodetection tea5761 +alias symbol:helene_attach helene +alias symbol:dib3000mb_attach dib3000mb +alias symbol:btintel_set_event_mask btintel +alias symbol:il_send_cmd_pdu_async iwlegacy +alias symbol:lgs8gl5_attach lgs8gl5 +alias symbol:rtw_rate_size rtw88_core +alias symbol:btintel_set_bdaddr btintel +alias symbol:iwlwifi_mod_params iwlwifi +alias symbol:rtw_ops rtw88_core +alias symbol:iwl_write32 iwlwifi +alias symbol:rtw_phy_set_tx_power_level rtw88_core +alias symbol:il_hdl_error iwlegacy +alias symbol:rtw_phy_load_tables rtw88_core +alias symbol:dib0090_get_wbd_target dib0090 +alias symbol:libipw_wx_get_encode libipw +alias symbol:eeprom_93cx6_readb eeprom_93cx6 +alias symbol:stb0899_attach stb0899 +alias symbol:iwl_set_soc_latency iwlwifi +alias symbol:s5h1432_attach s5h1432 +alias symbol:rtw_phy_cfg_agc rtw88_core +alias symbol:xc5000_attach xc5000 +alias symbol:iwl_fw_dbg_error_collect iwlwifi +alias symbol:il_send_stats_request iwlegacy +alias symbol:dib9000_set_i2c_adapter dib9000 +alias symbol:il_send_cmd_pdu iwlegacy +alias symbol:eeprom_93cx6_write eeprom_93cx6 +alias symbol:dibx000_reset_i2c_master dibx000_common +alias symbol:dib0090_set_switch dib0090 +alias symbol:rtw_phy_pwrtrack_get_pwridx rtw88_core +alias symbol:il_hdl_spectrum_measurement iwlegacy +alias symbol:il_send_cmd_sync iwlegacy +alias symbol:rtw_phy_pwrtrack_get_delta rtw88_core +alias symbol:cx22700_attach cx22700 +alias symbol:rtw_tx_write_data_h2c_get rtw88_core +alias symbol:iwl_write_prph iwlwifi +alias symbol:dib3000mc_pid_control dib3000mc +alias symbol:il_dealloc_bcast_stations iwlegacy +alias symbol:stv0900_attach stv0900 +alias symbol:iwl_poll_bit iwlwifi +alias symbol:btrtl_shutdown_realtek btrtl +alias symbol:__iwl_err iwlwifi +alias symbol:iwl_get_shared_mem_conf iwlwifi +alias symbol:sp887x_attach sp887x +alias symbol:il_full_rxon_required iwlegacy +alias symbol:iwl_fw_start_dbg_conf iwlwifi +alias symbol:dibx000_exit_i2c_master dibx000_common +alias symbol:dib9000_i2c_enumeration dib9000 +alias symbol:il_mac_sta_remove iwlegacy +alias symbol:stb6100_attach stb6100 +alias symbol:dibx000_get_i2c_adapter dibx000_common +alias symbol:cx24117_attach cx24117 +alias symbol:zl10036_attach zl10036 +alias symbol:fc0013_rc_cal_add fc0013 +alias symbol:iwl_fw_dbg_collect_trig iwlwifi +alias symbol:atbm8830_attach atbm8830 +alias symbol:iwl_get_nvm iwlwifi +alias symbol:il_hdl_pm_debug_stats iwlegacy +alias symbol:il_connection_init_rx_config iwlegacy +alias symbol:mxl5007t_attach mxl5007t +alias symbol:iwl_dbg_tlv_time_point iwlwifi +alias symbol:iwl_wait_notification iwlwifi +alias symbol:rtw_bf_enable_bfee_mu rtw88_core +alias symbol:iwl_get_cmd_string iwlwifi +alias symbol:il_pm_ops iwlegacy +alias symbol:mt2131_attach mt2131 +alias symbol:il_bcast_addr iwlegacy +alias symbol:fc0012_attach fc0012 +alias symbol:rtw_coex_read_indirect_reg rtw88_core +alias symbol:mt352_attach mt352 +alias symbol:il_mac_config iwlegacy +alias symbol:iwl_trans_send_cmd iwlwifi +alias symbol:il_get_lowest_plcp iwlegacy +alias symbol:dib0070_set_rf_output dib0070 +alias symbol:dib0090_get_wbd_offset dib0090 +alias symbol:iwl_notification_wait_init iwlwifi +alias symbol:m88ds3103_attach m88ds3103 +alias symbol:il_fill_probe_req iwlegacy +alias symbol:cx24123_attach cx24123 +alias symbol:il_init_scan_params iwlegacy +alias symbol:tda10023_attach tda10023 +alias symbol:libipw_debug_level libipw +alias symbol:m88ds3103_get_agc_pwm m88ds3103 +alias symbol:il_free_geos iwlegacy +alias symbol:il_prep_station iwlegacy +alias symbol:rtw_phy_cfg_bb rtw88_core +alias symbol:iwl_fw_error_print_fseq_regs iwlwifi +alias symbol:dib0070_ctrl_agc_filter dib0070 +alias symbol:iwl_read32 iwlwifi +alias symbol:dib9000_fw_pid_filter dib9000 +alias symbol:rtw8822c_hw_spec rtw88_8822c +alias symbol:drxd_attach drxd +alias symbol:il_alloc_txq_mem iwlegacy +alias symbol:btbcm_setup_apple btbcm +alias symbol:rtw_phy_cfg_mac rtw88_core +alias symbol:libipw_get_channel libipw +alias symbol:cxd2841er_attach_s cxd2841er +alias symbol:mxl5xx_attach mxl5xx +alias symbol:cx24116_attach cx24116 +alias symbol:iwl_fw_dbg_stop_restart_recording iwlwifi +alias symbol:ascot2e_attach ascot2e +alias symbol:rtw_coex_write_scbd rtw88_core +alias symbol:rtw_set_channel_mac rtw88_core +alias symbol:btintel_read_boot_params btintel +alias symbol:au8522_led_ctrl au8522_common +alias symbol:au8522_i2c_gate_ctrl au8522_common +alias symbol:il_free_channel_map iwlegacy +alias symbol:il_send_cmd iwlegacy +alias symbol:au8522_release_state au8522_common +alias symbol:dib0090_fw_register dib0090 +alias symbol:rtw_phy_get_tx_power_index rtw88_core +alias symbol:iwl_fw_dbg_collect_desc iwlwifi +alias symbol:dib0090_gain_control dib0090 +alias symbol:helene_attach_s helene +alias symbol:iwl_read_prph iwlwifi +alias symbol:il_get_single_channel_number iwlegacy +alias symbol:il_is_ht40_tx_allowed iwlegacy +alias symbol:rtw_tx_fill_tx_desc rtw88_core +alias symbol:dib3000mc_attach dib3000mc +alias symbol:zl10353_attach zl10353 +alias symbol:iwl_dump_desc_assert iwlwifi +alias symbol:libipw_xmit libipw +alias symbol:stv6110x_attach stv6110x +alias symbol:il_tx_cmd_protection iwlegacy +alias symbol:fc0013_attach fc0013 +alias symbol:tea5761_attach tea5761 +alias symbol:xc2028_attach tuner_xc2028 +alias symbol:mc44s803_attach mc44s803 +alias symbol:s921_attach s921 +alias symbol:rtw_phy_pwrtrack_thermal_changed rtw88_core +alias symbol:__iwl_crit iwlwifi +alias symbol:il_mac_change_interface iwlegacy +alias symbol:iwl_poll_direct_bit iwlwifi +alias symbol:stb6000_attach stb6000 +alias symbol:il_isr iwlegacy +alias symbol:btrtl_download_firmware btrtl +alias symbol:il_free_txq_mem iwlegacy +alias symbol:au8522_attach au8522_dig +alias symbol:dib9000_fw_pid_filter_ctrl dib9000 +alias symbol:dib0090_get_tune_state dib0090 +alias symbol:tda18218_attach tda18218 +alias symbol:mt2060_attach mt2060 +alias symbol:btintel_download_firmware btintel +alias symbol:btintel_secure_send btintel +alias symbol:cxd2841er_attach_t_c cxd2841er +alias symbol:il_wr_prph iwlegacy +alias symbol:s5h1420_attach s5h1420 +alias symbol:iwl_fw_dbg_collect iwlwifi +alias symbol:iwl_parse_nvm_data iwlwifi +alias symbol:tda8083_attach tda8083 +alias symbol:mt312_attach mt312 +alias symbol:btintel_send_intel_reset btintel +alias symbol:au8522_sleep au8522_common +alias symbol:il_hdl_pm_sleep iwlegacy +alias symbol:tda826x_attach tda826x +alias symbol:mb86a16_attach mb86a16 +alias symbol:il_mac_flush iwlegacy +alias symbol:rtw_phy_cfg_rf rtw88_core +alias symbol:tuner_count tuner_types +alias symbol:btbcm_set_bdaddr btbcm +alias symbol:bcm3510_attach bcm3510 +alias symbol:dib0090_update_tuning_table_7090 dib0090 +alias symbol:il_eeprom_init iwlegacy +alias symbol:il_power_update_mode iwlegacy +alias symbol:libipw_get_geo libipw +alias symbol:dib0090_set_tune_state dib0090 +alias symbol:iwl_parse_eeprom_data iwlwifi +alias symbol:btintel_load_ddc_config btintel +alias symbol:stv0299_attach stv0299 +alias symbol:rtw_fw_c2h_cmd_isr rtw88_core +alias symbol:iwl_send_phy_db_data iwlwifi +alias symbol:il_send_bt_config iwlegacy +alias symbol:libipw_rx libipw +alias symbol:fc0011_attach fc0011 +alias symbol:ves1x93_attach ves1x93 +alias symbol:drx39xxj_attach drx39xyj +alias symbol:rtw_phy_read_rf rtw88_core +alias symbol:tda10046_attach tda1004x +alias symbol:rtw_rate_section rtw88_core +alias symbol:si21xx_attach si21xx +alias symbol:ds3000_attach ds3000 +alias symbol:nxt200x_attach nxt200x +alias symbol:cx24110_attach cx24110 +alias symbol:iwl_set_bits_prph iwlwifi +alias symbol:il_clear_bit iwlegacy +alias symbol:libipw_get_channel_flags libipw +alias symbol:tea5767_attach tea5767 +alias symbol:itd1000_attach itd1000 +alias symbol:lnbp22_attach lnbp22 +alias symbol:fc0013_rc_cal_reset fc0013 +alias symbol:_il_grab_nic_access iwlegacy +alias symbol:il_mac_conf_tx iwlegacy +alias symbol:il_mac_remove_interface iwlegacy +alias symbol:dib9000_firmware_post_pll_init dib9000 +alias symbol:il_scan_cancel_timeout iwlegacy +alias symbol:stv0367ddb_attach stv0367 +alias symbol:lnbh25_attach lnbh25 +alias symbol:sp8870_attach sp8870 +alias symbol:iwl_clear_bits_prph iwlwifi +alias symbol:cx24113_agc_callback cx24113 +alias symbol:il_write_targ_mem iwlegacy +alias symbol:iwl_finish_nic_init iwlwifi +alias symbol:iwl_notification_wait iwlwifi +alias symbol:btbcm_write_pcm_int_params btbcm +alias symbol:il_remove_station iwlegacy +alias symbol:iwl_pnvm_load iwlwifi +alias symbol:dib9000_get_slave_frontend dib9000 +alias symbol:btbcm_initialize btbcm +alias symbol:iwl_fw_lookup_notif_ver iwlwifi +alias symbol:cx22702_attach cx22702 +alias symbol:rtw_bf_phy_init rtw88_core +alias symbol:rtw_tx_report_enqueue rtw88_core +alias symbol:il_set_flags_for_band iwlegacy +alias symbol:btintel_check_bdaddr btintel +alias symbol:stv0367ter_attach stv0367 +alias symbol:cx24120_attach cx24120 +alias symbol:rtw_parse_tbl_txpwr_lmt rtw88_core +alias symbol:rtw_parse_tbl_bb_pg rtw88_core +alias symbol:iwl_opmode_deregister iwlwifi +alias symbol:xc4000_attach xc4000 +alias symbol:iwl_fw_runtime_suspend iwlwifi +alias symbol:iwl_write64 iwlwifi +alias symbol:il_rx_queue_update_write_ptr iwlegacy +alias symbol:rtw_tx_write_data_rsvd_page_get rtw88_core +alias symbol:tea5767_autodetection tea5767 +alias symbol:il_set_rxon_hwcrypto iwlegacy +alias symbol:btrtl_free btrtl +alias symbol:tda18271c2dd_attach tda18271c2dd +alias symbol:iwl_write8 iwlwifi +alias symbol:mxl5005s_attach mxl5005s +alias symbol:lnbp21_attach lnbp21 +alias symbol:dib9000_get_component_bus_interface dib9000 +alias symbol:tda829x_attach tda8290 +alias symbol:zd1301_demod_get_dvb_frontend zd1301_demod +alias symbol:rtw_pci_shutdown rtw88_pci +alias symbol:tda10048_attach tda10048 +alias symbol:iwl_write_direct32 iwlwifi +alias symbol:au8522_readreg au8522_common +alias symbol:ves1820_attach ves1820 +alias symbol:stv0367cab_attach stv0367 +alias symbol:iwl_opmode_register iwlwifi +alias symbol:rtw_parse_tbl_phy_cond rtw88_core +alias symbol:btintel_version_info btintel +alias symbol:dib0090_get_current_gain dib0090 +alias symbol:il_mac_reset_tsf iwlegacy +alias symbol:ix2505v_attach ix2505v +alias symbol:m88rs2000_attach m88rs2000 +alias symbol:nxt6000_attach nxt6000 +alias symbol:il_mac_add_interface iwlegacy +alias symbol:il_mac_tx_last_beacon iwlegacy +alias symbol:dib7000m_get_i2c_master dib7000m +alias symbol:btrtl_initialize btrtl +alias symbol:dib9000_fw_set_component_bus_speed dib9000 +alias symbol:btintel_exit_mfg btintel +alias symbol:microtune_attach mt20xx +alias symbol:il_get_passive_dwell_time iwlegacy +alias symbol:tda18271_attach tda18271 +alias symbol:btintel_version_info_tlv btintel +alias symbol:iwl_fw_dbg_stop_sync iwlwifi +alias symbol:il_scan_cancel iwlegacy +alias symbol:iwl_set_bits_mask_prph iwlwifi +alias symbol:dibx000_i2c_set_speed dibx000_common +alias symbol:il_get_channel_info iwlegacy +alias symbol:tda10021_attach tda10021 +alias symbol:il_tx_queue_init iwlegacy +alias symbol:mt2063_attach mt2063 +alias symbol:iwl_fw_lookup_cmd_ver iwlwifi +alias symbol:lnbh24_attach lnbp21 +alias symbol:rtw_phy_rf_power_2_rssi rtw88_core +alias symbol:il_read_targ_mem iwlegacy +alias symbol:rtw_bf_cfg_csi_rate rtw88_core +alias symbol:dib0090_pwm_gain_reset dib0090 +alias symbol:il_set_tx_power iwlegacy +alias symbol:isl6405_attach isl6405 +alias symbol:il_leds_init iwlegacy +alias symbol:dib3000mc_set_config dib3000mc +alias symbol:btintel_reset_to_bootloader btintel +alias symbol:btintel_read_version btintel +alias symbol:iwl_parse_nvm_mcc_info iwlwifi +alias symbol:il_txq_update_write_ptr iwlegacy +alias symbol:zl10039_attach zl10039 +alias symbol:libipw_txb_free libipw +alias symbol:btrtl_get_uart_settings btrtl +alias symbol:iwl_fw_dbg_read_d3_debug_data iwlwifi +alias symbol:il_init_channel_map iwlegacy +alias symbol:dib9000_attach dib9000 +alias symbol:rtw_phy_write_rf_reg_mix rtw88_core +alias symbol:btrtl_setup_realtek btrtl +alias symbol:iwl_cmd_groups_verify_sorted iwlwifi +alias symbol:iwl_phy_db_set_section iwlwifi +alias symbol:libipw_rx_any libipw +alias symbol:horus3a_attach horus3a +alias symbol:rtw_phy_pwrtrack_avg rtw88_core +alias symbol:il_cmd_queue_free iwlegacy +alias symbol:iwl_read_prph_no_grab iwlwifi +alias symbol:il_apm_init iwlegacy +alias symbol:il_cancel_scan_deferred_work iwlegacy +alias symbol:il_clear_ucode_stations iwlegacy +alias symbol:iwl_read_direct32 iwlwifi +alias symbol:il_set_rxon_channel iwlegacy +alias symbol:tuners tuner_types +alias symbol:dib9000_get_i2c_master dib9000 +alias symbol:libipw_wx_get_scan libipw +alias symbol:simple_tuner_attach tuner_simple +alias symbol:rtw_chip_info_setup rtw88_core +alias symbol:lnbh29_attach lnbh29 +alias symbol:libipw_channel_to_freq libipw +alias symbol:libipw_rx_mgt libipw +alias symbol:dvb_pll_attach dvb_pll +alias symbol:il_get_active_dwell_time iwlegacy +alias symbol:stv6111_attach stv6111 +alias symbol:dib0090_register dib0090 +alias symbol:btbcm_read_pcm_int_params btbcm +alias symbol:rtw_bf_enable_bfee_su rtw88_core +alias symbol:il_add_beacon_time iwlegacy +alias symbol:il_get_cmd_string iwlegacy +alias symbol:rtw_read8_physical_efuse rtw88_core +alias symbol:l64781_attach l64781 +alias symbol:iwl_write_prph_no_grab iwlwifi +alias symbol:rtw8821c_hw_spec rtw88_8821c +alias symbol:il_check_rxon_cmd iwlegacy +alias symbol:eeprom_93cx6_read eeprom_93cx6 +alias symbol:libipw_is_valid_channel libipw +alias symbol:rtw_register_hw rtw88_core +alias symbol:iwl_abort_notification_waits iwlwifi +alias symbol:tda8261_attach tda8261 +alias symbol:dib0070_get_rf_output dib0070 +alias symbol:rtw_bf_remove_bfee_mu rtw88_core +alias symbol:lgdt3305_attach lgdt3305 +alias symbol:il_send_add_sta iwlegacy +alias symbol:tda10086_attach tda10086 +alias symbol:stv090x_attach stv090x +alias symbol:il_apm_stop iwlegacy +alias symbol:qt1010_attach qt1010 +alias symbol:cx24123_get_tuner_i2c_adapter cx24123 +alias symbol:il_poll_bit iwlegacy +alias symbol:s5h1420_get_tuner_i2c_adapter s5h1420 +alias symbol:au8522_analog_i2c_gate_ctrl au8522_common +alias symbol:iwl_read_eeprom iwlwifi +alias symbol:btintel_set_debug_features btintel +alias symbol:il_force_reset iwlegacy +alias symbol:eeprom_93cx6_multireadb eeprom_93cx6 +alias symbol:dib9000_set_gpio dib9000 +alias symbol:il_mac_hw_scan iwlegacy +alias symbol:dib3000mc_pid_parse dib3000mc +alias symbol:dib0070_attach dib0070 +alias symbol:iwl_fw_lookup_assert_desc iwlwifi +alias symbol:btintel_hw_error btintel +alias symbol:btintel_download_firmware_newgen btintel +alias symbol:rtw_phy_config_swing_table rtw88_core +alias symbol:rtw_bf_set_gid_table rtw88_core +alias symbol:iwl_force_nmi iwlwifi +alias symbol:tda829x_probe tda8290 +alias symbol:rtw_fw_c2h_cmd_rx_irqsafe rtw88_core +alias symbol:il_bg_watchdog iwlegacy +alias symbol:rtw_phy_write_rf_reg_sipi rtw88_core +alias symbol:libipw_wx_set_encodeext libipw +alias symbol:btintel_read_debug_features btintel +alias symbol:dib9000_set_slave_frontend dib9000 +alias symbol:tua6100_attach tua6100 +alias symbol:dib9000_get_tuner_interface dib9000 +alias symbol:iwl_fw_runtime_init iwlwifi diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.symbols.bin b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.symbols.bin new file mode 100644 index 00000000..9ff1fadd Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/modules.symbols.bin differ diff --git a/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/source b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/source new file mode 120000 index 00000000..0ca36de1 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_overlay/usr/lib/modules/5.10.0.lsgd+/source @@ -0,0 +1 @@ +/home/loongson/datac2/niuyize/linux-5.10 \ No newline at end of file diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/boot/.gitignore b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/boot/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/etc/inittab b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/etc/inittab new file mode 100644 index 00000000..37c3ec3b --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/etc/inittab @@ -0,0 +1,40 @@ +# /etc/inittab +# +# Copyright (C) 2001 Erik Andersen +# +# Note: BusyBox init doesn't support runlevels. The runlevels field is +# completely ignored by BusyBox init. If you want runlevels, use +# sysvinit. +# +# Format for each entry: ::: +# +# id == tty to run on, or empty for /dev/console +# runlevels == ignored +# action == one of sysinit, respawn, askfirst, wait, and once +# process == program to run + +# Startup the system +::sysinit:/bin/mount -t proc proc /proc +::sysinit:/bin/mount -o remount,rw / +::sysinit:/bin/mkdir -p /dev/pts /dev/shm +::sysinit:/bin/mount -a +::sysinit:/sbin/swapon -a +null::sysinit:/bin/ln -sf /proc/self/fd /dev/fd +null::sysinit:/bin/ln -sf /proc/self/fd/0 /dev/stdin +null::sysinit:/bin/ln -sf /proc/self/fd/1 /dev/stdout +null::sysinit:/bin/ln -sf /proc/self/fd/2 /dev/stderr +::sysinit:/bin/hostname -F /etc/hostname +# now run any rc scripts +::sysinit:/etc/init.d/rcS + +# Put a getty on the serial port +#ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 # GENERIC_SERIAL +ttyS0::respawn:-/bin/sh + +# Stuff to do for the 3-finger salute +#::ctrlaltdel:/sbin/reboot + +# Stuff to do before rebooting +::shutdown:/etc/init.d/rcK +::shutdown:/sbin/swapoff -a +::shutdown:/bin/umount -a -r diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/etc/profile b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/etc/profile new file mode 100644 index 00000000..343b514c --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/etc/profile @@ -0,0 +1,25 @@ +export PATH="/bin:/sbin:/usr/bin:/usr/sbin" + +if [ "$PS1" ]; then + if [ "`id -u`" -eq 0 ]; then + export PS1='[\u@\h \W]# ' + else + export PS1='$ ' + fi +fi + +export EDITOR='/bin/vi' + +# Source configuration files from /etc/profile.d +for i in /etc/profile.d/*.sh ; do + if [ -r "$i" ]; then + . $i + fi +done +unset i + +sleep 2 +echo "Processing /etc/profile..." +echo "we will run three script symbol three stage" +echo "some stage will waste a few minutes. don't shutdowm until finish!" +/home/handle_judge.sh | tee /dev/tty0 diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/download_system_tftp/download.sh b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/download_system_tftp/download.sh new file mode 100755 index 00000000..b817caf7 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/download_system_tftp/download.sh @@ -0,0 +1,89 @@ +#! /bin/sh + +###1 dont delete +tftp_ip=$1 +rootfs_name=rootfs.tar.gz +md5_name=md5.txt +uImage_name=uImage +recover_name=ramdisk.gz +recover_local_name=ramdisk.gz + +download_mount_point=$2 + +download_rootfs_path="$download_mount_point/$rootfs_name" +download_md5_path="$download_mount_point/$md5_name" +download_uImage_path="$download_mount_point/$uImage_name" +download_recover_path="$download_mount_point/$recover_local_name" + +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + +###2 dont delete + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + sleep 2 + echo "*************************************************************************" + echo "" + exit 1; +} + +#检查文件是否齐全 +check_file_for_safe() +{ + #检查是不是缺少部分文件,不然分了区才说没文件系统,那么原来的系统就会丢失。 + #能来这里执行,就代表本来就有uImage + echo "-------------> stage1 check_file_for_safe <-------------" + if [ ! -f "$download_rootfs_path" ]; then + error_inf_print "Error! not found "$rootfs_name" download failed!" + exit 1; + fi + if [ ! -f "$download_uImage_path" ]; then + error_inf_print "Error! not found "$uImage_name" download failed!" + exit 1; + fi +} + +download_system() +{ + echo "$rootfs_name downloading...." + tftp -l "$download_rootfs_path" -r $rootfs_name -g $tftp_ip -b 65535 + echo "$uImage_name downloading...." + tftp -l "$download_uImage_path" -r $uImage_name -g $tftp_ip -b 4096 + + if [ ! -z $md5_name ]; then + tftp -l "$download_md5_path" -r $md5_name -g $tftp_ip 2>/dev/null + + if [ -f "$download_md5_path" ]; then + if [ -f "$download_rootfs_path" ]; then + ori_md5=$(cat "$download_md5_path" | cut -d ' ' -f1); + local_md5=$(md5sum "$download_rootfs_path" | cut -d ' ' -f1); + + if [ "$ori_md5" == "$local_md5" ]; then + echo "md5 check success!!!"; + else + error_inf_print "md5 check failed!!! remove $rootfs_name"; + rm "$download_rootfs_path" + fi + + rm "$download_md5_path" + fi + fi + fi + + if [ -e $backup_partition ]; then + tftp -l "$download_recover_path" -r $recover_name -g $tftp_ip -b 4096 2>/dev/null + fi + check_file_for_safe; + return $? +} + +download_system +exit $? diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/download_system_tftp/download_fdisk.sh b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/download_system_tftp/download_fdisk.sh new file mode 100755 index 00000000..3ba2ed09 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/download_system_tftp/download_fdisk.sh @@ -0,0 +1,132 @@ +#! /bin/sh + +tftp_ip=$1 +config_name=config.txt +fdisk_name=fdisk.txt + +disk_config="null" + +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + +root_mount_point="/mnt/usb1" +data_mount_point="/mnt/usb2" +swap_mount_point="/mnt/usb3" +backup_mount_point="/mnt/usb4" + +download_partition="/dev/sda4" +download_mount_point="/mnt/usb4" + +head_line_target=`ifconfig -a | grep "lo" | tr -s ' ' | cut -d ' ' -f2` +dev_list_size=0 +eth_dev_name="" + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + sleep 2 + echo "*************************************************************************" + echo "" + exit 1; +} + +get_eth_dev_name() +{ + eth_dev_name=`ifconfig -a | grep $head_line_target | grep -v lo | grep -v can | grep -v usb | grep -v sit | tr -s ' ' | cut -d ' ' -f1 | head -$1 | tail -1` +} + +get_up_eth() +{ + ifconfig $eth_dev_name $1 netmask 255.255.255.0 + echo "wait 10s to let eth up dev_name: $eth_dev_name" + time_count=1 + while [ $time_count -le 10 ]; + do + printf "\r"$time_count"s..." + sleep 1 + time_count=$(($time_count+1)) + done + echo "" + echo "check server connect....." + tftp -r "uImage" -g $tftp_ip -b 8192 2>/dev/null + check_server_result=$? + if [ $check_server_result -ne 0 ]; then + ifconfig $eth_dev_name down + fi + if [ -f "uImage" ]; then + rm uImage + fi + return $check_server_result +} + +connect_tftp_server() +{ + dev_list_size=`ifconfig -a | grep $head_line_target | grep -v lo | grep -v can | grep -v usb | grep -v sit | wc -l` + cur_test_eth_num=1 + while [ $cur_test_eth_num -le $dev_list_size ] + do + get_eth_dev_name $cur_test_eth_num + get_up_eth $1 + if [ $? -eq 0 ]; then + return 0; + fi + echo "$eth_dev_name can t connect tftp server, try other eth!" + cur_test_eth_num=$(($cur_test_eth_num+1)) + done + error_inf_print "Error!!! not connect server, please check your network!!!" + return 1 +} + +run() +{ + connect_tftp_server $2 + if [ $? -ne 0 ]; then + return 1 + fi + echo "start download file by tftp" + tftp -r $fdisk_name -g $tftp_ip -b 4096 2>/dev/null + + if [ $? -eq 0 ]; then + /home/install_fdisk_analysis.sh 1 $fdisk_name + else + tftp -r $config_name -g $tftp_ip -b 4096 2>/dev/null + + if [ -f $config_name ]; then + disk_config=`cat $config_name | head -n1` + /home/install_fdisk_analysis.sh 2 $disk_config + else + /home/install_fdisk_analysis.sh + fi + fi + + sync; + #查看分区表的变化 + echo "" + fdisk -l | grep "/dev/sda"; + sleep 1; + + /home/install_format_all_disk.sh + if [ $? -ne 0 ]; then + return $? + fi + + if [ ! -e $download_partition ]; then + download_partition="/dev/sda1" + download_mount_point="/mnt/usb1" + fi + + mount $download_partition $download_mount_point + /home/download_system_tftp/download.sh $tftp_ip $download_mount_point + result=$? + umount $download_mount_point + return $result +} + +run $1 $2; +exit $?; \ No newline at end of file diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fdisk.txt b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fdisk.txt new file mode 100644 index 00000000..eadd3d4b --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fdisk.txt @@ -0,0 +1,28 @@ +d +1 +d +2 +d +3 +d +4 + +n +p +3 + ++2G + +n +p +1 + + + +t +3 +82 + +p + +w diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/0001part_fstab b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/0001part_fstab new file mode 100644 index 00000000..911860c3 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/0001part_fstab @@ -0,0 +1,2 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/0011part_fstab b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/0011part_fstab new file mode 100644 index 00000000..851e52af --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/0011part_fstab @@ -0,0 +1,10 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda2 /data ext4 rw,relatime,data=ordered 0 1 + +/data/root /root none defaults,bind 0 0 +/data/home /home none defaults,bind 0 0 +/data/opt /opt none defaults,bind 0 0 +/data/var /var none defaults,bind 0 0 + + diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/0101part_fstab b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/0101part_fstab new file mode 100644 index 00000000..7d6f8271 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/0101part_fstab @@ -0,0 +1,5 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda3 none swap defaults,pri=-2 0 0 + + diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/0111part_fstab b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/0111part_fstab new file mode 100644 index 00000000..c3a95c68 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/0111part_fstab @@ -0,0 +1,11 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda2 /data ext4 rw,relatime,data=ordered 0 1 +/dev/sda3 none swap defaults,pri=-2 0 0 + +/data/root /root none defaults,bind 0 0 +/data/home /home none defaults,bind 0 0 +/data/opt /opt none defaults,bind 0 0 +/data/var /var none defaults,bind 0 0 + + diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/1001part_fstab b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/1001part_fstab new file mode 100644 index 00000000..f44066cb --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/1001part_fstab @@ -0,0 +1,3 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 + diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/1011part_fstab b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/1011part_fstab new file mode 100644 index 00000000..d7172fad --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/1011part_fstab @@ -0,0 +1,8 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda3 none swap defaults,pri=-2 0 0 + +/data/root /root none defaults,bind 0 0 +/data/home /home none defaults,bind 0 0 +/data/opt /opt none defaults,bind 0 0 +/data/var /var none defaults,bind 0 0 diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/1101part_fstab b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/1101part_fstab new file mode 100644 index 00000000..7d6f8271 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/1101part_fstab @@ -0,0 +1,5 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda3 none swap defaults,pri=-2 0 0 + + diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/1111part_fstab b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/1111part_fstab new file mode 100644 index 00000000..c3a95c68 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/fstab/1111part_fstab @@ -0,0 +1,11 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda2 /data ext4 rw,relatime,data=ordered 0 1 +/dev/sda3 none swap defaults,pri=-2 0 0 + +/data/root /root none defaults,bind 0 0 +/data/home /home none defaults,bind 0 0 +/data/opt /opt none defaults,bind 0 0 +/data/var /var none defaults,bind 0 0 + + diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/handle_judge.sh b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/handle_judge.sh new file mode 100755 index 00000000..e0f599bc --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/handle_judge.sh @@ -0,0 +1,47 @@ +#! /bin/sh + +# 0 install 1 recover +handle_type=0 + +judge_cmdline() +{ + temp_str=$(cat /proc/cmdline | grep ins_way) + if [ ! -z "$temp_str" ]; then + handle_type=0; + return 0; + fi + temp_str=$(cat /proc/cmdline | grep "rec_sys=1") + if [ ! -z "$temp_str" ]; then + handle_type=1; + return 0; + fi + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo "your uboot version maybe not a laster version!" + echo "so this ramdisk.gz will handle install action!" + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + return 1 +} + +start() +{ + judge_cmdline + res=$? + if [ $res -eq 1 ]; then + /home/install_usb.sh + else + if [ $handle_type -eq 0 ]; then + echo "Install System..." + /home/install_usb.sh + elif [ $handle_type -eq 1 ]; then + echo "Recover System..." + /home/recover_backup.sh + else + echo "handle_judge.sh unexpected handle_type: $handle_type" + echo "ramdisk failed! exit!" + return 1 + fi + fi + return 0 +} + +start diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/install_disk.sh b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/install_disk.sh new file mode 100755 index 00000000..cfc27ad2 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/install_disk.sh @@ -0,0 +1,257 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 2*********************************" +echo "*******************uzip system and setup it with fstab*******************" +echo "*************************************************************************" +echo " "; +sleep 2; + +usb_partition="/dev/sdb1" +usb_partition_bak="/dev/sdb" +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + +usb_mount_point="/mnt/usb0" +root_mount_point="/mnt/usb1" +data_mount_point="/mnt/usb2" +swap_mount_point="/mnt/usb3" +backup_mount_point="/mnt/usb4" + +#错误信息输出到usb的install文件夹里的error.log +#注意安装系统时install文件夹不要存放error.log +#否则会先改名error.log.bak,多次执行后,这样可能会造成数据丢失 +error_inf_write_usb() +{ + if mountpoint -q $usb_mount_point; then + echo $1 >> $usb_mount_point"/install/error.log"; + else + mount $usb_partition $usb_mount_point; + if mountpoint -q $usb_mount_point; then + echo $1 >> $usb_mount_point"/install/error.log"; + sync; + umount $usb_mount_point; + else + echo "-------------> log error: couldn't mount usb("$usb_partition") <-------------" + fi + fi +} + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + error_inf_write_usb $1 + check_and_umount_for_safe; + exit 1; +} + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#uzip_rootfs 解压文件系统到根文件分区 必要 +#copy_uimage_to_boot 复制内核到/boot目录(没做boot分区)必要 +#copy_file_to_data 复制home opt var到data分区 不一定,根据fstab而定 + +uzip_rootfs() +{ + echo "-------------> stage2.1 unzip system <-------------" + + if [ -e "/dev/fb0" ]; then + show_process_dev="/dev/tty0" + else + if [ -e "/dev/console" ]; then + show_process_dev="/dev/console" + else + show_process_dev="/dev/tty0" + fi + fi + + if [ -e $backup_partition ]; then + mount $backup_partition $backup_mount_point + sync; + mount $root_partition $root_mount_point + sync; + echo "can observe process in screen" + pv $backup_mount_point/rootfs.tar.gz 2>$show_process_dev | tar -xzf - -C $root_mount_point; + if [ $? -ne 0 ]; then + error_inf_print "Error! unzip system failed! Please check rootfs.tar.gz and try again"; + fi + else + mount $root_partition $root_mount_point + sync; + echo "can observe process in screen" + pv $root_mount_point/rootfs.tar.gz 2>$show_process_dev | tar -xzf - -C $root_mount_point; + if [ $? -ne 0 ]; then + error_inf_print "Error! unzip system failed! Please check rootfs.tar.gz and try again"; + fi + rm -r $root_mount_point/rootfs.tar.gz + fi + check_and_umount_for_safe; + return 0; +} + +copy_uImage_to_boot() +{ + echo "-------------> stage2.2 copy uImage to /boot <-------------" + if [ -e $backup_partition ]; then + mount $backup_partition $backup_mount_point + sync; + mount $root_partition $root_mount_point + sync; + + #保证boot文件存在 + if [ ! -d $root_mount_point/boot ]; then + mkdir $root_mount_point/boot + fi + + cp -a $backup_mount_point/uImage $root_mount_point/boot/ + if [ $? -ne 0 ]; then + error_inf_print "Error! copy uImage failed! Please try again"; + fi + else + mount $root_partition $root_mount_point + sync; + + #保证boot文件存在 + if [ ! -d $root_mount_point/boot ]; then + mkdir $root_mount_point/boot + fi + + mv $root_mount_point/uImage $root_mount_point/boot/ + if [ $? -ne 0 ]; then + error_inf_print "Error! copy uImage failed! Please try again"; + fi + fi + check_and_umount_for_safe; + return 0; +} + +copy_fstab() +{ + echo "-------------> stage2.3 copy fstab to /etc/fstab <-------------" + sda1_partition_target=0 + sda2_partition_target=0 + sda3_partition_target=0 + sda4_partition_target=0 + if [ -e $root_partition ]; then + sda1_partition_target=1; + fi + if [ -e $data_partition ]; then + sda2_partition_target=1; + fi + if [ -e $swap_partition ]; then + sda3_partition_target=1; + fi + if [ -e $backup_partition ]; then + sda4_partition_target=1; + fi + + mount $root_partition $root_mount_point; + sync; + + if [ -f $root_mount_point/etc/fstab ]; then + cp $root_mount_point/etc/fstab $root_mount_point/etc/fstab_ori; + cp "/home/fstab/"$sda4_partition_target$sda3_partition_target$sda2_partition_target$sda1_partition_target"part_fstab" $root_mount_point/etc/fstab; + + echo "" >> $root_mount_point/etc/fstab + cat $root_mount_point/etc/fstab_ori | grep proc >> $root_mount_point/etc/fstab; + cat $root_mount_point/etc/fstab_ori | grep sysfs >> $root_mount_point/etc/fstab; + cat $root_mount_point/etc/fstab_ori | grep tmpfs >> $root_mount_point/etc/fstab; + cat $root_mount_point/etc/fstab_ori | grep devpts >> $root_mount_point/etc/fstab; + else + cp "/home/fstab/"$sda4_partition_target$sda3_partition_target$sda2_partition_target$sda1_partition_target"part_fstab" $root_mount_point/etc/fstab; + fi + + check_and_umount_for_safe; + return 0; +} + +copy_file_to_data() +{ + echo "-------------> stage2.4 copy file to data partition <-------------" + mount $data_partition $data_mount_point; + sync; + mount $root_partition $root_mount_point; + sync; + + cp -a $root_mount_point/root/ $data_mount_point; + cp -a $root_mount_point/home/ $data_mount_point; + cp -a $root_mount_point/opt/ $data_mount_point; + cp -a $root_mount_point/var/ $data_mount_point; + sync; + + rm -r $root_mount_point/root/ + rm -r $root_mount_point/home/ + rm -r $root_mount_point/opt/ + rm -r $root_mount_point/var/ + + mkdir -p $root_mount_point/root/ + mkdir -p $root_mount_point/home/ + mkdir -p $root_mount_point/opt/ + mkdir -p $root_mount_point/var/ + mkdir -p $root_mount_point/data/ + sync; + + check_and_umount_for_safe; + return 0; +} + +#防止前面的脚本出现错误,导致没有解除挂载一些已经挂载的分区。 +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q $i; then + sync; + umount $i; + fi + } + done +} + +#相关分区 +#backup分区 +start_stage2() +{ + uzip_rootfs + echo "" + copy_uImage_to_boot + echo "" + copy_fstab; + echo "" + if [ -e $data_partition ]; then + copy_file_to_data + fi +} + +check_usb_name() +{ + if [ ! -e $usb_partition ]; then + usb_partition=$usb_partition_bak + fi +} + +###################start########################## +###################start########################## +###################start########################## + + +#防止第一个阶段因未知原因而导致没有解除挂载 +if [ $# -eq 1 ]; then + usb_partition=$1 +fi +check_and_umount_for_safe; +check_usb_name; #如果前面有参数 那么 这里的判断等于白做事 +start_stage2; +check_and_umount_for_safe; + +echo "-------------> stage2 end <-------------" + +/home/install_reboot.sh diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/install_fdisk.sh b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/install_fdisk.sh new file mode 100755 index 00000000..75675b59 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/install_fdisk.sh @@ -0,0 +1,413 @@ +#! /bin/sh + +disk_size=0 +disk_size_root=0 +disk_size_data=0 +disk_size_swap=2 +disk_size_backup=4 +disk_size_ex_swap=0 +disk_size_root_and_data=0 +#是disk_size_root_and_data的备份 +disk_size_root_and_data_bak=0 + +swap_exist=1 +backup_exist=1 + +fdisk_part_total=0 + +#读取SSD的大小 +read_disk_size() +{ + disk_size=$(fdisk -l | grep "Disk /dev/sda" | head -n1 | cut -d ' ' -f3); + disk_size_ex_swap=$(($disk_size-$disk_size_swap)); +} + +#$1 是第一个的比例 +#$2 是第二个的比例 +#$3 瓜分总数 +buffer_num1=0; +buffer_num2=0; +spilt_num_to_buffer() +{ + buffer_num1=0 + buffer_num2=0 + count=$(($1+$2)) + total_num=$3 + + if [ $1 -le 0 ]; then + buffer_num2=$3 + return 0 + elif [ $2 -le 0 ]; then + buffer_num1=$3 + return 0 + fi + + while [ $total_num -ge $count ] + do + buffer_num1=$(($buffer_num1+$1)) + buffer_num2=$(($buffer_num2+$2)) + total_num=$(($total_num-$count)) + done + if [ $1 -lt $2 ]; then + buffer_num2=$(($buffer_num2+$total_num)) + else + buffer_num1=$(($buffer_num1+$total_num)) + fi +} + +split_rootdata_and_backup() +{ + spilt_num_to_buffer $1 $2 $3 + disk_size_root_and_data=$buffer_num1 + disk_size_backup=$buffer_num2 + +} + +split_root_and_data() +{ + spilt_num_to_buffer $1 $2 $3 + disk_size_root=$buffer_num1 + disk_size_data=$buffer_num2 +} + +#这是开始格式化分区的函数 +#注意分区的数字需要参数传入,否则不能识别 +fdisk_run_four_part() +{ + fdisk /dev/sda >/dev/null << ! +d +1 +d +2 +d +3 +d +4 + +n +p +1 + ++$1G + +n +p +2 + ++$2G + +n +p +3 + ++$3G + +n +p +4 + + + +t +3 +82 + +p + +w +! +} + +#这是开始格式化分区的函数 +#注意分区的数字需要参数传入,否则不能识别 +fdisk_run_three_part_without_data() +{ + fdisk /dev/sda >/dev/null << ! +d +1 +d +2 +d +3 +d +4 + +n +p +1 + ++$1G + +n +p +3 + ++$2G + +n +p +4 + + + +t +3 +82 + +p + +w +! +} + +fdisk_run_three_part() +{ + fdisk /dev/sda >/dev/null << ! +d +1 +d +2 +d +3 +d +4 + +n +p +$1 + ++$2G + +n +p +$3 + ++$4G + +n +p +$5 + + + +t +3 +82 + +p + +w +! +} + +temp_fdisk_name=temp_fdisk +fdisk_run_delete_all_part() +{ + echo d >> $temp_fdisk_name + echo 1 >> $temp_fdisk_name + echo d >> $temp_fdisk_name + echo 2 >> $temp_fdisk_name + echo d >> $temp_fdisk_name + echo 3 >> $temp_fdisk_name + echo d >> $temp_fdisk_name + echo 4 >> $temp_fdisk_name + echo "" >> $temp_fdisk_name + echo "" >> $temp_fdisk_name +} + +fdisk_run_set_swap_flag() +{ + echo t >> $temp_fdisk_name + echo 82 >> $temp_fdisk_name + echo "" >> $temp_fdisk_name + echo "" >> $temp_fdisk_name +} + +cur_part_num=1 +fdisk_run_set_part_write_file() +{ + echo n >> $temp_fdisk_name + echo p >> $temp_fdisk_name + echo $1 >> $temp_fdisk_name + echo "" >> $temp_fdisk_name + echo $2 >> $temp_fdisk_name + echo "" >> $temp_fdisk_name + echo "" >> $temp_fdisk_name +} + +fdisk_run_set_part() +{ + if [ $cur_part_num -ne 4 ]; then + if [ $cur_part_num -eq $fdisk_part_total ]; then + fdisk_run_set_part_write_file $1 "" + else + fdisk_run_set_part_write_file $1 "+$2G" + fi + else + fdisk_run_set_part_write_file "" "" + fi + cur_part_num=$(($cur_part_num+1)) +} + +fdisk_run_end_file() +{ + echo w >> $temp_fdisk_name +} + +fdisk_run_func() +{ + fdisk_run_delete_all_part + if [ $swap_exist -eq 1 ]; then + fdisk_run_set_part 3 $disk_size_swap + fdisk_run_set_swap_flag; + fi + if [ $backup_exist -eq 2 ]; then + fdisk_run_set_part 4 $disk_size_backup + fi + + fdisk_run_set_part 1 $disk_size_root + + if [ $1 -ne 0 ]; then + fdisk_run_set_part 2 $disk_size_data + fi + + if [ $backup_exist -eq 1 ]; then + fdisk_run_set_part 4 $disk_size_backup + fi + fdisk_run_end_file; + fdisk /dev/sda < $temp_fdisk_name >/dev/null +} + +#分析4分区, 不包括乒乓系统 +analy_four_part() +{ + #16G的特别对待,保证root能装满系统 + if [ $disk_size -le 16 ]; then + disk_size_root=6 + disk_size_data=3 + disk_size_root_and_data=9 + disk_size_root_and_data_bak=9 + else + disk_size_root_and_data=$(($disk_size_ex_swap-$disk_size_backup)) + disk_size_root_and_data_bak=$disk_size_root_and_data + split_root_and_data 1 2 $disk_size_root_and_data; + fi +} + +#分析4分区,包括乒乓系统 +analy_pingpang() +{ + if [ $disk_size -le 16 ]; then + disk_size_root=4 + disk_size_data=2 + disk_size_root_and_data=6 + disk_size_root_and_data_bak=6 + else + #/2会向下取整,也就是bakcup的大小 >= root+data + disk_size_root_and_data=$(($disk_size_ex_swap/2)) + disk_size_root_and_data_bak=$disk_size_root_and_data + split_root_and_data 1 2 $disk_size_root_and_data; + fi +} + +#fdisk_four_part 不包括4分区 +#fidks_pingpang 包括4分区 +#这两个函数都是接口。 + +fdisk_four_part() +{ + read_disk_size; + analy_four_part; + fdisk_run_four_part $disk_size_root $disk_size_data $disk_size_swap; +} + +fdisk_pingpang() +{ + read_disk_size; + analy_pingpang; + fdisk_run_four_part $disk_size_root $disk_size_data $disk_size_swap; +} + +fdisk_three_pingpang() +{ + read_disk_size; + analy_pingpang; + fdisk_run_three_part_without_data $disk_size_root_and_data_bak $disk_size_swap; +} + +fdisk_by_ratio_swap_size() +{ + if [ $1 -eq 0 ]; then + swap_exist=0; + disk_size_swap=0; + else + swap_exist=1 + if [ $disk_size -le 16 ]; then + disk_size_swap=1 + else + disk_size_swap=2 + fi + fi + disk_size_ex_swap=$(($disk_size-$disk_size_swap)) +} + +fdisk_by_ratio_backup_size() +{ + backup_exist=1 + if [ $1 -eq 0 ]; then + backup_exist=0; + disk_size_backup=0; + elif [ $1 -eq -1 ]; then + backup_exist=2 + disk_size_backup=4 + elif [ $1 -eq -2 ]; then + backup_exist=2 + disk_size_backup=5 + fi +} + +fdisk_by_ratio_other_part() +{ + fdisk_part_total=1; + if [ $2 -gt 0 ]; then + fdisk_part_total=$(($fdisk_part_total+1)); + fi + if [ $swap_exist -eq 1 ]; then + fdisk_part_total=$(($fdisk_part_total+1)); + fi + if [ $backup_exist -ne 0 ]; then + fdisk_part_total=$(($fdisk_part_total+1)); + fi + + if [ $backup_exist -eq 0 ]; then + split_root_and_data $1 $2 $disk_size_ex_swap + else + rootdata_ratio=$(($1+$2)) + if [ $backup_exist -eq 2 ]; then + disk_size_root_and_data=$(($disk_size_ex_swap-$disk_size_backup)) + else + split_rootdata_and_backup $rootdata_ratio $3 $disk_size_ex_swap + fi + split_root_and_data $1 $2 $disk_size_root_and_data + fi + + fdisk_run_func $2 +} + +fidks_by_ratio() +{ + read_disk_size; + fdisk_by_ratio_swap_size $3 + fdisk_by_ratio_backup_size $4 + fdisk_by_ratio_other_part $1 $2 $4 +} + +if [ $1 -eq 0 ]; then + fdisk_four_part; +elif [ $1 -eq 1 ]; then + fdisk_pingpang; +elif [ $1 -eq 2 ]; then + fdisk_three_pingpang; +elif [ $1 -eq 3 ]; then + fidks_by_ratio $2 $3 $4 $5 +fi \ No newline at end of file diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/install_fdisk_analysis.sh b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/install_fdisk_analysis.sh new file mode 100755 index 00000000..dd8aebe5 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/install_fdisk_analysis.sh @@ -0,0 +1,130 @@ +#! /bin/sh + +check_num() +{ + result=$(echo $num1 | grep '^-*[1-9][0-9]*$') + if [ -z $result ]; then + return 1 + fi + return 0 +} + +check_dev_part_num_list() +{ + if [ $# -eq 4 ]; then + check_num $1 + if [ $? -ne 0 ]; then + return 1 + fi + check_num $2 + if [ $? -ne 0 ]; then + return 1 + fi + check_num $3 + if [ $? -ne 0 ]; then + return 1 + fi + check_num $4 + if [ $? -ne 0 ]; then + return 1 + fi + else + return 1 + fi + for i in $1 $2 $3 $4; do + if [ $i -gt 5 ]; then + echo "warning!!! $i > 5, this num is a ratio not a real size!!!" + return 1 + fi + done + if [ $1 -le 0 ]; then + echo "error!!! / part must define!!!" + return 1 + fi + if [ $2 -lt 0 ]; then + echo "warning!!! data part not support default size" + return 1 + fi + if [ $3 -ne 0 -a $3 -ne -1 ]; then + echo "warning!!! swap part not support set $3" + echo "warning!!! swap part ratio == 0 stand for not set swap" + echo "warning!!! swap part ratio == -1 stand for set default" + return 1 + fi + if [ $4 -lt -2 ]; then + echo "warning!!! backup part not support set $4" + echo "warning!!! backup part ratio > 0 stand for set backup part by this ratio" + echo "warning!!! backup part ratio == 0 stand for not set backup part" + echo "warning!!! backup part ratio == -1 stand for set 4G" + echo "warning!!! backup part ratio == -2 stand for set 5G" + return 1 + fi + return 0; +} + +fidsk_default_2_part() +{ + echo "" + echo "would split sda to 2 partition! /dev/sda1 and /dev/sda3" + sleep 1; + fdisk /dev/sda < /home/fdisk.txt >/dev/null; +} + +fdisk_config_analy() +{ + if [ "$1" == "4part" ]; then + /home/install_fdisk.sh 0 + elif [ "$1" == "twosys" ]; then + /home/install_fdisk.sh 1 + elif [ "$1" == "twosys_3" ]; then + /home/install_fdisk.sh 2 + else + num1=$(echo $1 | tr -s ' ' | cut -d ' ' -f1) + num2=$(echo $1 | tr -s ' ' | cut -d ' ' -f2) + num3=$(echo $1 | tr -s ' ' | cut -d ' ' -f3) + num4=$(echo $1 | tr -s ' ' | cut -d ' ' -f4) + + if [ ! -z "$num4" ]; then + check_dev_part_num_list $num1 $num2 $num3 $num4 + if [ $? -eq 0 ]; then + /home/install_fdisk.sh 3 $num1 $num2 $num3 $num4 + return 0 + fi + fi + + fidsk_default_2_part; + fi +} + +# arg1 file path +fdisk_file_analy() +{ + first_line="$(cat $1 | head -1)" + + if [ "$first_line" == "d" ]; then + fdisk /dev/sda < $1 >/dev/null; + else + fdisk_config_analy "$first_line" + fi +} + +analy_start() +{ + if [ $# -eq 2 ]; then + if [ $1 -eq 1 ]; then + fdisk_file_analy $2 + elif [ $1 -eq 2 ]; then + fdisk_config_analy $2 + else + fidsk_default_2_part + fi + else + fidsk_default_2_part + fi +} + +if [ $# -eq 2 ]; then + analy_start $1 $2 +else + analy_start +fi \ No newline at end of file diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/install_format_all_disk.sh b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/install_format_all_disk.sh new file mode 100755 index 00000000..78340189 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/install_format_all_disk.sh @@ -0,0 +1,83 @@ +#! /bin/sh + +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + sleep 2 + echo "*************************************************************************" + echo "" + exit 1; +} + +#相关分区 +#所有分区,这是格式化分区的函数 +format_all_partition() +{ + # sda1 / usb1 + # sda2 data usb2 + # sda3 swap usb3 + # sda4 backup usb4 + + #分区格式化 + echo "-------------> stage1.2 format / partition --- start <-------------" + mke2fs -t ext4 -L rootfs -F $root_partition -O ^metadata_csum >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format / partition --- success <-------------" + else + error_inf_print "Error! format / partition failed! please check partition info and try again" + exit 1; + fi + sync + + if [ -e $data_partition ]; then + echo "-------------> stage1.2 format data partition --- start <-------------" + mke2fs -t ext4 -L data -F $data_partition >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format data partition --- success <-------------" + else + error_inf_print "Error! format data partition failed! please check partition info and try again" + exit 1; + fi + sync + fi + + if [ -e $swap_partition ]; then + echo "-------------> stage1.2 format swap partition --- start <-------------" + mkswap $swap_partition >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format swap partition --- success <-------------" + else + error_inf_print "Error! format swap partition failed! please check partition info and try again" + exit 1; + fi + sync + fi + + if [ -e $backup_partition ]; then + echo "-------------> stage1.2 format backup partition --- start <-------------" + mke2fs -t ext4 -L rootfs -F $backup_partition -O ^metadata_csum >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format backup partition --- success <-------------" + else + error_inf_print "Error! format backup partition failed! please check partition info and try again" + exit 1; + fi + sync + fi + + sleep 1; + return 0; +} + +format_all_partition; +exit $? \ No newline at end of file diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/install_reboot.sh b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/install_reboot.sh new file mode 100755 index 00000000..acbcf7b1 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/install_reboot.sh @@ -0,0 +1,33 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 3*********************************" +echo "*******************this stage for check log and reboot*******************" +echo "*************************************************************************" +echo " "; + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#防止前面的脚本出现错误,导致没有解除挂载一些已经挂载的分区。 +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q i; then + sync; + umount i; + fi + } + done +} + +#防止前面的脚本出现错误,导致没有解除挂载一些已经挂载的分区。 +check_and_umount_for_safe; +/home/sys_config_tool + +echo "-------------> stage3 install system finish! please reboot or shutdowm! <-------------" +reboot -f + +echo "-------------> stage3 end <-------------" diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/install_usb.sh b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/install_usb.sh new file mode 100755 index 00000000..11901be9 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/install_usb.sh @@ -0,0 +1,399 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 1*********************************" +echo "************this stage for format SSD and copy file to backup************" +echo "*************************************************************************" +echo " "; +sleep 2; + +usb_partition="/dev/sdb1" +usb_partition_bak="/dev/sdb" + +mmc_partition="/dev/mmcblk0p1" +mmc_partition_bak="/dev/mmcblk0" + +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + +usb_mount_point="/mnt/usb0" +root_mount_point="/mnt/usb1" +data_mount_point="/mnt/usb2" +swap_mount_point="/mnt/usb3" +backup_mount_point="/mnt/usb4" + +#local_or_network=0 + +uboot_install_fix=0 +install_way=0 + +stage1_result=0; + + +create_all_mount_point() +{ + if [ ! -d $usb_mount_point ]; then + mkdir $usb_mount_point + fi + if [ ! -d $root_mount_point ]; then + mkdir $root_mount_point + fi + if [ ! -d $data_mount_point ]; then + mkdir $data_mount_point + fi + if [ ! -d $swap_mount_point ]; then + mkdir $swap_mount_point + fi + if [ ! -d $backup_mount_point ]; then + mkdir $backup_mount_point + fi +} + +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q $i; then + sync; + umount $i; + fi + } + done +} + +#错误信息输出到usb的install文件夹里的error.log +#注意安装系统时install文件夹不要存放error.log +#否则会先改名error.log.bak,多次执行后,这样可能会造成数据丢失 +error_inf_write_usb() +{ + if mountpoint -q $usb_mount_point; then + echo $1 >> $usb_mount_point"/install/error.log"; + else + mount $usb_partition $usb_mount_point; + if mountpoint -q $usb_mount_point; then + echo $1 >> $usb_mount_point"/install/error.log"; + sync; + umount $usb_mount_point; + else + echo "-------------> log error: couldn't mount usb("$usb_partition") <-------------" + fi + fi +} + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + sleep 2 + error_inf_write_usb $1 + check_and_umount_for_safe; + echo "*************************************************************************" + echo "" + exit 1; +} + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#fdisk_SSD 使用fdisk进行分区 必要 +#format_all_partition 格式化所有分区 必要 +#copy_file_to_backup 复制文件到backup分区 必要 + +#检查文件是否齐全 +check_file_for_safe() +{ + #检查是不是缺少部分文件,不然分了区才说没文件系统,那么原来的系统就会丢失。 + #能来这里执行,就代表本来就有uImage + echo "-------------> stage1 check_file_for_safe <-------------" + if [ ! -f $usb_mount_point"/install/rootfs.tar.gz" ]; then + error_inf_print "Error! not found "$usb_mount_point"/install/rootfs.tar.gz please check your USB disk" + exit 1; + fi +} + +#进行分区 +#默认2分区 +#有fdisk.txt按fdisk.txt来分 +#有名字为4part的文件, 那么4分区来分 +#有名字为twosys的文件, 那么按乒乓系统的份额分(backup大点) +fdisk_SSD() +{ + echo "-------------> stage1.1 fdisk disk <-------------" + #分区信息导入 + if [ -f $usb_mount_point"/install/fdisk.txt" ]; then + /home/install_fdisk_analysis.sh 1 $usb_mount_point"/install/fdisk.txt" + elif [ -e $usb_mount_point"/install/4part" ]; then + /home/install_fdisk_analysis.sh 2 "4part" + elif [ -e $usb_mount_point"/install/twosys" ]; then + /home/install_fdisk_analysis.sh 2 "twosys" + elif [ -e $usb_mount_point"/install/twosys_3" ]; then + /home/install_fdisk_analysis.sh 2 "twosys_3" + else + /home/install_fdisk_analysis.sh + fi + sync; + #查看分区表的变化 + echo "" + fdisk -l | grep "/dev/sda"; + sleep 1; + return 0; +} + +#相关分区 +#所有分区,这是格式化分区的函数 +format_all_partition() +{ + # sda1 / usb1 + # sda2 data usb2 + # sda3 swap usb3 + # sda4 backup usb4 + + #分区格式化 + echo "-------------> stage1.2 format / partition --- start <-------------" + mke2fs -t ext4 -L rootfs -F $root_partition -O ^metadata_csum >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format / partition --- success <-------------" + else + error_inf_print "Error! format / partition failed! please check partition info and try again" + exit 1; + fi + sync + + if [ -e $data_partition ]; then + echo "-------------> stage1.2 format data partition --- start <-------------" + mke2fs -t ext4 -L data -F $data_partition >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format data partition --- success <-------------" + else + error_inf_print "Error! format data partition failed! please check partition info and try again" + exit 1; + fi + sync + fi + + echo "-------------> stage1.2 format swap partition --- start <-------------" + if [ -e $swap_partition ]; then + mkswap $swap_partition >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format swap partition --- success <-------------" + else + error_inf_print "Error! format swap partition failed! please check partition info and try again" + exit 1; + fi + sync + fi + + if [ -e $backup_partition ]; then + echo "-------------> stage1.2 format backup partition --- start <-------------" + mke2fs -t ext4 -L rootfs -F $backup_partition -O ^metadata_csum >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format backup partition --- success <-------------" + else + error_inf_print "Error! format backup partition failed! please check partition info and try again" + exit 1; + fi + sync + fi + + sleep 1; + return 0; +} + +#相关分区 +#存放rootfs.tar.gz的分区 sda1或者sda4 +#U盘 +#把U盘里面的内核和文件系统复制到SSD +copy_file_to_SSD() +{ + echo "-------------> stage1.3: copy file to SSD <-------------" + + mount $1 $2; + if mountpoint -q $2; then + sleep 1; + #检查是否存在用于恢复用的busybox制作的系统 + #如果有,那么就把系统复制到备份分区,并且改名ramdisk.gz(和Recovery System对应) + #如果没有,那么就会提示找不到,然后到时候Recovery System则无法使用,可以人为手动加备份分区只要名字是ramdisk.gz即可 + #220719 统一 ramdisk,gz 和 ramdisk-bak.gz 之后 此处不应该是复制ramdisk-bak.gz了 + if [ -e $backup_partition ]; then + # if [ -f $usb_mount_point/install/ramdisk-bak.gz ]; then + # cp -pv /mnt/usb0/install/ramdisk-bak.gz $2/ramdisk.gz + # wait $! + # else + # echo "-------------> stage1.3 warning: not found ramdisk-bak.gz <-------------"; + # echo "-------------> stage1.3 warning: it will invalidate Recovery System <-------------"; + # sync; + # fi + cp -pv /mnt/usb0/install/ramdisk.gz $2/ramdisk.gz + fi + + echo " -----> copy uImage" + cp -pv $usb_mount_point/install/uImage $2 + wait $! + + echo " -----> copy rootfs.tar.gz (wait a few minutes)" + rsync -P $usb_mount_point/install/rootfs.tar.gz $2 + wait $! + sync + + umount $2; + else + error_inf_print "Error! mount "$1" failed! Counldn't copy file to SSD! Please try again" + exit 1; + fi +} + +#相关分区 +#U盘 +start_stage1_by_local() +{ + #挂载U盘 + mount -t vfat -o utf8 $usb_partition $usb_mount_point; + sleep 1; + if mountpoint -q $usb_mount_point; then + if [ -f $usb_mount_point/install/error.log ]; then + echo "-------------> stage1 warning: found error.log <-------------" + echo "-------------> stage1 warning: backup this error.log <-------------" + mv $usb_mount_point/install/error.log $usb_mount_point/install/error.log.bak + fi + + echo "-------------> stage1 mount "$usb_partition" success <-------------"; + + check_file_for_safe; + echo "" + fdisk_SSD; + echo "" + format_all_partition; + echo "" + #参数含义:参数1 backup分区的设备 参数2 backup分区的挂载点 + if [ -e $backup_partition ]; then + copy_file_to_SSD $backup_partition $backup_mount_point + else + copy_file_to_SSD $root_partition $root_mount_point + fi + + umount /mnt/usb0; + else + error_inf_print "mount USB disk failed! Please check USB format(fat32?) and try again!" + fi +} + +check_usb_name() +{ + if [ ! -e $usb_partition ]; then + # echo "warning!!! not found "$usb_partition + # echo "warning!!! will mount "$usb_partition_bak" as UDisk" + usb_partition=$usb_partition_bak + fi +} + +check_mmc_name() +{ + if [ ! -e $mmc_partition ]; then + # echo "warning!!! not found "$mmc_partition + # echo "warning!!! will mount "$mmc_partition_bak" as mmc" + mmc_partition=$mmc_partition_bak + fi +} + +check_install_file() +{ + check_usb_name + check_mmc_name + + if [ ! -e $usb_partition ]; then + usb_partition=$mmc_partition + else + mount -t vfat -o utf8 $usb_partition $usb_mount_point; + if [ ! -d $usb_mount_point"/install" ]; then + echo "warning!!! not found /install dir in usb" + echo "use tf card install way" + umount $usb_mount_point; + usb_partition=$mmc_partition + else + umount $usb_mount_point; + fi + fi +} + +check_cmdline() +{ + uboot_install_fix=0 + install_way=0 + ins_way=$(cat /proc/cmdline | grep ins_way) + if [ -z "$ins_way" ]; then + return 1; + fi + ins_way=$(cat /proc/cmdline | grep ins_way=usb) + if [ ! -z "$ins_way" ]; then + install_way=1 + uboot_install_fix=1 + check_usb_name + return 0 + fi + ins_way=$(cat /proc/cmdline | grep ins_way=mmc) + if [ ! -z "$ins_way" ]; then + install_way=2 + uboot_install_fix=1 + check_mmc_name + return 0 + fi + ins_way=$(cat /proc/cmdline | grep ins_way=tftp) + if [ ! -z "$ins_way" ]; then + install_way=3 + uboot_install_fix=1 + return 0 + fi +} + +stage1_entrance() +{ + check_cmdline + + if [ $uboot_install_fix -eq 1 ]; then + if [ $install_way -eq 3 ]; then + /home/sys_config_tool 1 + stage1_result=$? + elif [ $install_way -eq 2 ]; then + usb_partition=$mmc_partition + start_stage1_by_local; + stage1_result=$? + elif [ $install_way -eq 1 ]; then + start_stage1_by_local; + stage1_result=$? + else + stage1_result=1 + fi + else + #这是没有在cmdline里面指定安装方式,旧方法,为了兼容 + check_install_file; + if [ ! -e $usb_partition ]; then + echo "*** tip: not found usb or mmc, use network to download system ***" + /home/sys_config_tool 1 + stage1_result=$? + else + start_stage1_by_local; + stage1_result=$? + fi + fi + echo "-------------> stage1 end <-------------" + if [ $stage1_result -ne 0 ]; then + return 1; + fi +} + +###################start########################## +###################start########################## +###################start########################## + +create_all_mount_point; +stage1_entrance; +if [ $? -ne 0 ]; then + exit 1; +fi +/home/install_disk.sh $usb_partitions diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/ramdisk_sys_config_tool_ver b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/ramdisk_sys_config_tool_ver new file mode 100644 index 00000000..d02081ec --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/ramdisk_sys_config_tool_ver @@ -0,0 +1 @@ +master-db0d730a diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/recover_backup.sh b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/recover_backup.sh new file mode 100755 index 00000000..ccfdfac9 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/recover_backup.sh @@ -0,0 +1,178 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 1*********************************" +echo "************************this stage for format SSD************************" +echo "*************************************************************************" +echo " "; +sleep 2; + +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + +root_mount_point="/mnt/usb1" +data_mount_point="/mnt/usb2" +swap_mount_point="/mnt/usb3" +backup_mount_point="/mnt/usb4" + +create_all_mount_point() +{ + if [ ! -d $root_mount_point ]; then + mkdir $root_mount_point + fi + if [ ! -d $data_mount_point ]; then + mkdir $data_mount_point + fi + if [ ! -d $swap_mount_point ]; then + mkdir $swap_mount_point + fi + if [ ! -d $backup_mount_point ]; then + mkdir $backup_mount_point + fi +} + +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q $i; then + sync; + umount $i; + fi + } + done +} + +create_all_mount_point() +{ + if [ ! -d $root_mount_point ]; then + mkdir $root_mount_point + fi + if [ ! -d $data_mount_point ]; then + mkdir $data_mount_point + fi + if [ ! -d $swap_mount_point ]; then + mkdir $swap_mount_point + fi + if [ ! -d $backup_mount_point ]; then + mkdir $backup_mount_point + fi +} + +#错误信息输出到backup分区里的error.log +#注意安装系统时backup分区不要存放error.log +#否则会先改名error.log.bak,多次执行后,这样可能会造成数据丢失 +error_inf_write_backup() +{ + if mountpoint -q $backup_mount_point; then + echo $1 >> $backup_mount_point"/error.log"; + else + mount $backup_partition $backup_mount_point; + if mountpoint -q $backup_mount_point; then + echo $1 >> $backup_mount_point"/error.log"; + sync; + umount $backup_mount_point; + else + echo "-------------> log error: couldn't mount backup partition("$backup_partition") <-------------" + fi + fi +} + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + error_inf_write_backup $1 + check_and_umount_for_safe; + echo "*************************************************************************" + echo "" + exit 1; +} + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#format_all_partition 格式化所有分区 必要 + +#检查文件是否齐全 +check_file_for_safe() +{ + echo "-------------> stage1 check_file_for_safe <-------------" + #检查是不是缺少部分文件,不然格式化了才说没文件系统,那么原来的系统就会丢失。 + #能来这里执行,就代表本来就有uImage + if [ ! -f $backup_mount_point"/uImage" ]; then + error_inf_print "Error! not found uImage in backup partition!" + fi + if [ ! -f $backup_mount_point"/rootfs.tar.gz" ]; then + error_inf_print "Error! not found rootfs.tar.gz in backup partition!" + fi +} + +#相关分区 +#所有分区,这是格式化分区的函数 +format_all_partition() +{ + #分区格式化 + if [ -e $root_partition ]; then + echo "-------------> stage1.1 format / partition --- start <-------------" + mke2fs -t ext4 -L rootfs -F $root_partition -O ^metadata_csum >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.1 format / partition --- success <-------------" + else + error_inf_print "Error! format / partition failed! Please try again" + fi + sync + fi + + if [ -e $swap_partition ]; then + echo "-------------> stage1.1 format swap partition --- start <-------------" + mkswap $swap_partition >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.1 format swap partition --- success <-------------" + else + error_inf_print "Error! format swap partition failed! Please try again" + fi + sync + fi + return 0; +} + +start_stage1() +{ + sleep 1; + sync; + create_all_mount_point; + mount $backup_partition $backup_mount_point; + if mountpoint -q $backup_mount_point; then + if [ -f $backup_mount_point"/error.log" ]; then + echo "-------------> stage1 warning: found error.log <-------------" + echo "-------------> stage1 warning: rename error.log as error.log.bak <-------------" + mv $backup_mount_point/error.log $backup_mount_point/error.log.bak + fi + + check_file_for_safe; + if [ $? -eq 1 ]; then + exit 1; + fi + umount $backup_mount_point; + fi + format_all_partition; +} + +###################start########################## +###################start########################## +###################start########################## + +check_and_umount_for_safe; +start_stage1; +check_and_umount_for_safe; + +echo "-------------> stage1 end <-------------" + +/home/recover_disk.sh diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/recover_disk.sh b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/recover_disk.sh new file mode 100755 index 00000000..84afef83 --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/recover_disk.sh @@ -0,0 +1,226 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 2*********************************" +echo "*******************uzip system and setup it with fstab*******************" +echo "*************************************************************************" +echo " "; +sleep 2; + +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + +root_mount_point="/mnt/usb1" +data_mount_point="/mnt/usb2" +swap_mount_point="/mnt/usb3" +backup_mount_point="/mnt/usb4" + +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q $i; then + sync; + umount $i; + fi + } + done +} + +#错误信息输出到backup分区里的error.log +#注意安装系统时backup分区不要存放error.log +#否则会先改名error.log.bak,多次执行后,这样可能会造成数据丢失 +error_inf_write_backup() +{ + if mountpoint -q $backup_mount_point; then + echo $1 >> $backup_mount_point"/error.log"; + else + mount $backup_partition $backup_mount_point; + if mountpoint -q $backup_mount_point; then + echo $1 >> $backup_mount_point"/error.log"; + sync; + umount $backup_mount_point; + else + echo "-------------> log error: couldn't mount backup partition("$backup_partition") <-------------" + fi + fi +} + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + error_inf_write_backup $1 + check_and_umount_for_safe; + echo "*************************************************************************" + echo "" + exit 1; +} + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#uzip_rootfs 解压文件系统到根文件分区 必要 +#copy_uimage_to_boot 复制内核到/boot目录(没做boot分区)必要 +#copy_file_to_data 复制home opt var到data分区 不一定,根据fstab而定 + +uzip_rootfs() +{ + echo "-------------> stage2.1 uzip_rootfs <-------------"; + + mount $root_partition $root_mount_point; + sync; + mount $backup_partition $backup_mount_point; + sync; + + if [ -e "/dev/fb0" ]; then + show_process_dev="/dev/tty0" + else + if [ -e "/dev/console" ]; then + show_process_dev="/dev/console" + else + show_process_dev="/dev/tty0" + fi + fi + + echo "can observe process in screen" + pv $backup_mount_point/rootfs.tar.gz 2>$show_process_dev | tar -xzf - -C $root_mount_point; + if [ $? -ne 0 ]; then + error_inf_print "Error! unzip rootfs.tar.gz failed!" + fi + + check_and_umount_for_safe; + return 0; +} + +copy_uimage_to_boot() +{ + echo "-------------> stage2.2 copy_uimage_to_boot <-------------"; + + mount $root_partition $root_mount_point; + sync; + mount $backup_partition $backup_mount_point; + sync; + + cp -a $backup_mount_point/uImage $root_mount_point/boot/; + if [ $? -ne 0 ]; then + error_inf_print "Error! copy uImage to /boot/ failed!" + fi + + check_and_umount_for_safe; + return 0; +} + +copy_fstab() +{ + echo "-------------> stage2.3 copy fstab to /etc/fstab <-------------" + sda1_partition_target=0 + sda2_partition_target=0 + sda3_partition_target=0 + sda4_partition_target=0 + if [ -e $root_partition ]; then + sda1_partition_target=1; + fi + if [ -e $data_partition ]; then + sda2_partition_target=1; + fi + if [ -e $swap_partition ]; then + sda3_partition_target=1; + fi + if [ -e $backup_partition ]; then + sda4_partition_target=1; + fi + + mount $root_partition $root_mount_point; + sync; + mv $root_mount_point/etc/fstab $root_mount_point/etc/fstab_ori; + cp "/home/fstab/"$sda4_partition_target$sda3_partition_target$sda2_partition_target$sda1_partition_target"part_fstab" $root_mount_point/etc/fstab; + + check_and_umount_for_safe; + return 0; +} + + +#相关分区 +#data 分区 +#/ 分区 +#/分区里面的/home /opt /var复制到data分区,然后删除自身的/home /opt /var +copy_file_to_data() +{ + echo "-------------> stage2.4 update data partition <-------------"; + + mount $root_partition $root_mount_point + sync + mount $data_partition $data_mount_point + sync + + #必须重置dpkg的记录,否则就会提示什么包都装好了,但是程序提示找不到 + # if [ -d $2/var/lib/dpkg ]; then + # { + # echo "-------------> stage2.3 delete dpkg inf in data partition <-------------" + # rm -r $2/var/lib/dpkg; + # sync; + # } + # fi + # echo "-------------> stage2.3 copy dpkg inf to data partition <-------------" + # cp -a $4/var/lib/dpkg $2/var/lib + # sync; + # sleep 1; + + #先保留mysql的数据,然后删除var,复制var过来,然后再恢复mysql的数据 + if [ -d $data_mount_point/var ]; then + if [ -d $data_mount_point/var/lib/mysql ]; then + echo "-------------> stage2.3 backup mysql data to data partition <-------------"; + cp -a $data_mount_point/var/lib/mysql $data_mount_point/; + sync; + fi + rm -r $data_mount_point/var + fi + cp -a $root_mount_point/var $data_mount_point/var + if [ -d $data_mount_point/mysql ]; then + rm -r $data_mount_point/var/lib/mysql 2>/dev/null + cp -a $data_mount_point/mysql $data_mount_point/var/lib/mysql + fi + rm -r $root_mount_point/var; + sync; + + rm -r $root_mount_point/home; + sync; + + rm -r $root_mount_point/opt; + sync; + + check_and_umount_for_safe; +} + +#相关分区 +#backup分区 +start_stage2() +{ + #执行三个阶段的操作 + uzip_rootfs; + copy_uimage_to_boot; + copy_fstab; + if [ -e $data_partition ]; then + copy_file_to_data; + fi +} + +###################start########################## +###################start########################## +###################start########################## + +#防止第一个阶段因未知原因而导致没有解除挂载 +check_and_umount_for_safe; +start_stage2; +check_and_umount_for_safe; + +echo "-------------> stage2 end <-------------" + +/home/recover_reboot.sh diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/recover_reboot.sh b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/recover_reboot.sh new file mode 100755 index 00000000..70db3c6f --- /dev/null +++ b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/recover_reboot.sh @@ -0,0 +1,35 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 3*********************************" +echo "*******************this stage for check log and reboot*******************" +echo "*************************************************************************" +echo " "; + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#防止前面的脚本出现错误,导致没有解除挂载一些已经挂载的分区。 +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q i; then + { + sync; + umount i; + } + fi + } + done +} + +#防止前面的脚本出现错误,导致没有解除挂载一些已经挂载的分区。 +check_and_umount_for_safe; +/home/sys_config_tool + +echo "-------------> stage3 reboot system <-------------" +#检查是否有错误记录文件,则之前的脚本执行时出错 +reboot -f +echo "-------------> stage3 end <-------------" diff --git a/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/sys_config_tool b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/sys_config_tool new file mode 100755 index 00000000..4811ccbf Binary files /dev/null and b/board/loongson/ls2k1000la/rootfs_ramdisk_overlay/home/sys_config_tool differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/boot/.gitignore b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/boot/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/etc/modules b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/etc/modules new file mode 100644 index 00000000..c8de779f --- /dev/null +++ b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/etc/modules @@ -0,0 +1,17 @@ +# /etc/modules: kernel modules to load at boot time. +# +# This file contains the names of kernel modules that should be loaded +# at boot time, one per line. Lines beginning with "#" are ignored. + +#about usb storge +scsi_mod +sd_mod +sg +usbcore +usb-common +ehci-hcd +ehci-platform +ohci-hcd +ohci-platform +usb-storage + diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/etc/ssh/sshd_config b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/etc/ssh/sshd_config new file mode 100644 index 00000000..613cf243 --- /dev/null +++ b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/etc/ssh/sshd_config @@ -0,0 +1,117 @@ +# $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $ + +# This is the sshd server system-wide configuration file. See +# sshd_config(5) for more information. + +# This sshd was compiled with PATH=/bin:/sbin:/usr/bin:/usr/sbin + +# The strategy used for options in the default sshd_config shipped with +# OpenSSH is to specify options with their default value where +# possible, but leave them commented. Uncommented options override the +# default value. + +#Port 22 +#AddressFamily any +#ListenAddress 0.0.0.0 +#ListenAddress :: + +#HostKey /etc/ssh/ssh_host_rsa_key +#HostKey /etc/ssh/ssh_host_ecdsa_key +#HostKey /etc/ssh/ssh_host_ed25519_key + +# Ciphers and keying +#RekeyLimit default none + +# Logging +#SyslogFacility AUTH +#LogLevel INFO + +# Authentication: + +#LoginGraceTime 2m +#PermitRootLogin prohibit-password +PermitRootLogin no +#StrictModes yes +#MaxAuthTries 6 +#MaxSessions 10 + +#PubkeyAuthentication yes + +# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 +# but this is overridden so installations will only check .ssh/authorized_keys +AuthorizedKeysFile .ssh/authorized_keys + +#AuthorizedPrincipalsFile none + +#AuthorizedKeysCommand none +#AuthorizedKeysCommandUser nobody + +# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts +#HostbasedAuthentication no +# Change to yes if you don't trust ~/.ssh/known_hosts for +# HostbasedAuthentication +#IgnoreUserKnownHosts no +# Don't read the user's ~/.rhosts and ~/.shosts files +#IgnoreRhosts yes + +# To disable tunneled clear text passwords, change to no here! +#PasswordAuthentication yes +#PermitEmptyPasswords no + +# Change to no to disable s/key passwords +#ChallengeResponseAuthentication yes + +# Kerberos options +#KerberosAuthentication no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes +#KerberosGetAFSToken no + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes + +# Set this to 'yes' to enable PAM authentication, account processing, +# and session processing. If this is enabled, PAM authentication will +# be allowed through the ChallengeResponseAuthentication and +# PasswordAuthentication. Depending on your PAM configuration, +# PAM authentication via ChallengeResponseAuthentication may bypass +# the setting of "PermitRootLogin without-password". +# If you just want the PAM account and session checks to run without +# PAM authentication, then enable this but set PasswordAuthentication +# and ChallengeResponseAuthentication to 'no'. +#UsePAM no + +#AllowAgentForwarding yes +#AllowTcpForwarding yes +#GatewayPorts no +#X11Forwarding no +#X11DisplayOffset 10 +#X11UseLocalhost yes +#PermitTTY yes +#PrintMotd yes +#PrintLastLog yes +#TCPKeepAlive yes +#PermitUserEnvironment no +#Compression delayed +#ClientAliveInterval 0 +#ClientAliveCountMax 3 +#UseDNS no +#PidFile /var/run/sshd.pid +#MaxStartups 10:30:100 +#PermitTunnel no +#ChrootDirectory none +#VersionAddendum none + +# no default banner path +#Banner none + +# override default of no subsystems +Subsystem sftp /usr/libexec/sftp-server + +# Example of overriding settings on a per-user basis +#Match User anoncvs +# X11Forwarding no +# AllowTcpForwarding no +# PermitTTY no +# ForceCommand cvs server diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/etc/udev/rules.d/80-net-setup-link.rules b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/etc/udev/rules.d/80-net-setup-link.rules new file mode 100644 index 00000000..7507a2f2 --- /dev/null +++ b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/etc/udev/rules.d/80-net-setup-link.rules @@ -0,0 +1,13 @@ +# do not edit this file, it will be overwritten on update + +SUBSYSTEM!="net", GOTO="net_setup_link_end" + +IMPORT{builtin}="path_id" + +ACTION=="remove", GOTO="net_setup_link_end" + +IMPORT{builtin}="net_setup_link" + +NAME=="", ENV{ID_NET_NAME}!="", NAME="$env{ID_NET_SLOT}" + +LABEL="net_setup_link_end" diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/demo/mtd-flash b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/demo/mtd-flash new file mode 100755 index 00000000..6304422a Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/demo/mtd-flash differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/demo/mtd-flash.c b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/demo/mtd-flash.c new file mode 100644 index 00000000..b3793e3a --- /dev/null +++ b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/demo/mtd-flash.c @@ -0,0 +1,124 @@ +// 读写 flash : mtd-flash +// > mtd-flash 4 0x11223344 +// > mtd-flash 4 +// 0x11223344 +// > mtd-flash 1 +// 0x11 + +#include +#include +#include +#include +#include +#include +#include + +#define MAX_LEN 4 +#define BLOCK_SIZE 0x100000 +#define MTD_BLOCK_DEV "/dev/mtdblock7" + +typedef enum { + MTHD_W, + MTHD_R, +} method_e; + +typedef struct cmd_s +{ + method_e method; + unsigned char value[MAX_LEN]; + int size; +} cmd_t; + +static int fdMtd; +unsigned char* mapMtd = NULL; + +void print_array(unsigned char* array, int size) +{ + printf("0x"); + for (int i = 0; i < size; i++) + printf("%02x", array[i]); + printf("\n"); +} + +int open_mtd() +{ + fdMtd = open(MTD_BLOCK_DEV, O_RDWR); + mapMtd = mmap(NULL, BLOCK_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fdMtd, 0); + + return 0; +} + +int close_mtd() +{ + munmap(mapMtd, BLOCK_SIZE); + close(fdMtd); + return 0; +} + +int w_mtd(cmd_t* cmd) +{ + memcpy(mapMtd, cmd->value, cmd->size); + + return 0; +} + +int r_mtd(cmd_t* cmd) +{ + memcpy(cmd->value, mapMtd, cmd->size); + + return 0; +} + +int parse(int argc, char** argv, cmd_t* cmd) +{ + char* eptr; + unsigned int value; + int i = 0; + + switch (argc) + { + case 2: + cmd->method = MTHD_R; + cmd->size = strtol(argv[1], &eptr, 16); + break; + case 3: + cmd->method = MTHD_W; + cmd->size = strtol(argv[1], &eptr, 16); + value = strtoul(argv[2], &eptr, 16); + for (i = 0; i < 4; i++) + cmd->value[3 - i] = ((value >> (i * 8)) & 0xff); + break; + default: + cmd->method = MTHD_R; + cmd->size = MAX_LEN; + break; + } + + if (cmd->size > MAX_LEN){ cmd->size = MAX_LEN;} + + return 0; +} + +int main (int argc, char** argv) +{ + cmd_t cmd = {0}; + + parse(argc, argv, &cmd); + + open_mtd(); + + switch (cmd.method) + { + case MTHD_W: w_mtd(&cmd); + break; + case MTHD_R: r_mtd(&cmd); + print_array(cmd.value, cmd.size); + break; + default: + break; + } + + close_mtd(); + + return 0; +} diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/demo/rtc-ram b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/demo/rtc-ram new file mode 100755 index 00000000..0cdfb861 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/demo/rtc-ram differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/demo/rtc-ram.c b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/demo/rtc-ram.c new file mode 100644 index 00000000..8738c79e --- /dev/null +++ b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/demo/rtc-ram.c @@ -0,0 +1,130 @@ +// 读写 u32 数字 +// > rtc-ram 0x11223344 +// > rtc-ram +// 0x11223344 + +#include +#include +#include +#include +#include +#include +#include + +#define RAM_REG 0x14 +#define RTC_ADDR 0x32 + +typedef enum { + MTHD_W, + MTHD_R, +} method_e; + +typedef struct cmd_s +{ + method_e method; + unsigned int value; +} cmd_t; + +static int fdRtc; + +int open_rtc() +{ + fdRtc = open("/dev/i2c-1", O_RDWR); + ioctl(fdRtc, I2C_SLAVE_FORCE, RTC_ADDR); + return 0; +} + +int close_rtc() +{ + close(fdRtc); + return 0; +} + +int x_rtc(unsigned char* s, int s_l, unsigned char* r, int r_l, int m_n) +{ + struct i2c_rdwr_ioctl_data io = {0}; + struct i2c_msg msg[2] = {0}; + + msg[0].addr = RTC_ADDR; + msg[0].flags = I2C_SMBUS_WRITE; + msg[0].buf = s; + msg[0].len = s_l; + + msg[1].addr = RTC_ADDR; + msg[1].flags = I2C_SMBUS_READ; + msg[1].len = r_l; + msg[1].buf = r; + + io.msgs = msg; + io.nmsgs = m_n; + + return ioctl(fdRtc, I2C_RDWR, (unsigned long)&io); +} + +int w_rtc(cmd_t* cmd) +{ + unsigned char buf[5] = {0}; + int i = 0; + buf[0] = RAM_REG; + for (i = 0; i < 4; i++) + { + buf[i + 1] = ((cmd->value >> (i * 8)) & 0xff); + } + + x_rtc(buf, sizeof(buf), NULL, 0, 1); + + return 0; +} + +int r_rtc(cmd_t* cmd) +{ + unsigned char s[1] = {RAM_REG}; + unsigned char r[4] = {0}; + + x_rtc(s, sizeof(s), r, sizeof(r), 2); + + cmd->value = (r[3] << 24) | (r[2] << 16) | (r[1] << 8) | (r[0]); + + return 0; +} + +int parse(int argc, char** argv, cmd_t* cmd) +{ + char* eptr; + switch (argc) + { + case 2: + cmd->method = MTHD_W; + cmd->value = strtoul(argv[1], &eptr, 16); + break; + default: + cmd->method = MTHD_R; + break; + } + + return 0; +} + + +int main (int argc, char** argv) +{ + cmd_t cmd = {0}; + + parse(argc, argv, &cmd); + + open_rtc(); + + switch (cmd.method) + { + case MTHD_W: w_rtc(&cmd); + break; + case MTHD_R: r_rtc(&cmd); printf("0x%x\n", cmd.value); + break; + default: + break; + } + + close_rtc(); + + return 0; +} diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/Qtver/ls_system_tool_qt b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/Qtver/ls_system_tool_qt new file mode 100755 index 00000000..6c500063 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/Qtver/ls_system_tool_qt differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/install_tool.sh b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/install_tool.sh new file mode 100755 index 00000000..ef0a9f07 --- /dev/null +++ b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/install_tool.sh @@ -0,0 +1,78 @@ +#! /bin/sh + +cmd_version_name="ls_system_tool" +shell_dir_name="shell" +shell_dir="./$shell_dir_name" + +sofeware_target_dir="/usr/bin" +shell_target_dir="/opt/ls_system_config" + +sudo_exist=1; + +check_env() +{ + if [ ! -f $cmd_version_name ]; then + echo "error: not found cmd version ls_system_tool" + echo " cur check dir is : $PWD" + return 1 + fi + if [ ! -d $shell_dir ]; then + echo "warning: not found $shell_dir" + fi + + whereis sudo | grep / + if [ $? -ne 0 ]; then + sudo_exist=0; + fi +} + +install() +{ + if [ -f $cmd_version_name ]; then + echo "install sofeware $cmd_version_name ..." + if [ $sudo_exist -eq 1 ]; then + sudo cp $cmd_version_name $sofeware_target_dir + else + cp $cmd_version_name $sofeware_target_dir + fi + echo "install sofeware finish" + fi + if [ -d $shell_dir ]; then + echo "install $shell_dir to $shell_target_dir ..." + if [ $sudo_exist -eq 1 ]; then + sudo mkdir -p $shell_target_dir + else + mkdir -p $shell_target_dir + fi + + # delete shell dir + if [ -d $shell_target_dir"/$shell_dir_name" ]; then + if [ $sudo_exist -eq 1 ]; then + sudo rm -rf "$shell_target_dir/$shell_dir_name" + else + rm -rf "$shell_target_dir/$shell_dir_name" + fi + fi + + if [ $sudo_exist -eq 1 ]; then + sudo cp -a $shell_dir $shell_target_dir + else + cp -a $shell_dir $shell_target_dir + fi + echo "install $shell_dir finish" + fi +} + +start() +{ + check_env + if [ $? -ne 0 ]; then + return 1 + fi + + install; + + echo "success" +} + +start diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/ls_system_tool b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/ls_system_tool new file mode 100755 index 00000000..5ede228d Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/ls_system_tool differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/shell/modi_hct/DO/DO_config.sh b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/shell/modi_hct/DO/DO_config.sh new file mode 100755 index 00000000..efe712fe --- /dev/null +++ b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/shell/modi_hct/DO/DO_config.sh @@ -0,0 +1,82 @@ +#! /bin/sh + +#shell_info_start +#name:DO output enable +#type:config +#args:1 +#args_tip:enable all DO output +#args:0 +#args_tip:disable all DO output +#board:LS2K500-MODI_HCT +#shell_info_end + +res=0 +o4_gpio_dir="/sys/class/gpio/gpio1" +o1_gpio_dir="/sys/class/gpio/gpio38" +o2_gpio_dir="/sys/class/gpio/gpio37" +o3_gpio_dir="/sys/class/gpio/gpio36" + +export_gpio() +{ + if [ ! -d $1 ]; then + echo $2 > /sys/class/gpio/export + if [ $? -ne 0 ]; then + echo "export gpio $2 failed!" + return 1 + fi + fi +} + +set_output() +{ + if [ -d $1 ]; then + echo out > $1"/direction" + echo $2 > $1"/value" + else + echo "not found $1, setup gpio failed!" + return 1 + fi +} + +config_gpio() +{ + export_gpio $1 $2 + if [ $? -ne 0 ]; then + return 1 + fi + set_output $1 $3 + if [ $? -ne 0 ]; then + return 1 + fi +} + +config_all_gpio() +{ + res=0 + config_gpio $o4_gpio_dir 1 $1 + if [ $? -ne 0 ]; then + res=1 + fi + config_gpio $o1_gpio_dir 38 $1 + if [ $? -ne 0 ]; then + res=1 + fi + config_gpio $o2_gpio_dir 37 $1 + if [ $? -ne 0 ]; then + res=1 + fi + config_gpio $o3_gpio_dir 36 $1 + if [ $? -ne 0 ]; then + res=1 + fi + if [ $res -ne 0 ]; then + return 1 + fi +} + +config_all_gpio $1 +if [ $? -eq 0 ]; then + echo "operate success!" +else + echo "operate failed!" +fi diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/shell/modi_hct/beep_test/beep_test.sh b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/shell/modi_hct/beep_test/beep_test.sh new file mode 100755 index 00000000..e713a855 --- /dev/null +++ b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/shell/modi_hct/beep_test/beep_test.sh @@ -0,0 +1,45 @@ +#! /bin/sh + +#shell_info_start +#name:beep test +#type:interface +#board:LS2K500-MODI_HCT +#shell_info_end + +beep_path="/sys/class/leds/buzz-pwm" +max_value=$beep_path"/max_brightness" +cur_value=$beep_path"/brightness" + +check_env() +{ + if [ ! -d $beep_path ]; then + echo "not find beep control path : $beep_path" + return 1 + fi + return 0 +} + +test() +{ + value=$(cat $max_value) + if [ $value -lt 2 ]; then + echo "error: pwm level($value) not support beep work" + return 1 + fi + value=$(($value / 2)) + echo "beep will work 1s" + echo $value > $cur_value + sleep 1 + echo "beep stop work" + echo 0 > $cur_value + return 0 +} + +check_env +if [ $? -ne 0 ]; then + exit 1 +fi +test +if [ $? -ne 0 ]; then + exit 1 +fi diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/shell/modi_hct/pwm_test/MS8844_setup.sh b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/shell/modi_hct/pwm_test/MS8844_setup.sh new file mode 100755 index 00000000..26fd9852 --- /dev/null +++ b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/shell/modi_hct/pwm_test/MS8844_setup.sh @@ -0,0 +1,112 @@ +#! /bin/sh + +base_num=0 +base_num_pwm=0 + +test_EN1=38 +test_EN2=37 +test_EN3=36 +test_EN4=1 + +test_EN_DO1=1; +test_EN_DO2=1; +test_EN_DO3=1; +test_EN_DO4=1; + +test_DO_mode=1 +pwm_class_dir="/sys/class/pwm/pwmchip0" + +generate_export_num() +{ + test_EN_DO1=$(($test_EN12+$base_num)); + test_EN_DO2=$(($test_EN34+$base_num)); + test_EN_DO3=$(($test_EN56+$base_num)); + test_EN_DO4=$(($test_EN78+$base_num)); +} + +export_gpio_single() +{ + if [ -d "gpio""$1" ]; then + echo $1 > ./unexport + fi + echo $1 > ./export + echo out > ./"gpio""$1"/direction +} + +export_all_gpio() +{ + cd /sys/class/gpio + + export_gpio_single $test_EN_DO1 + export_gpio_single $test_EN_DO2 + export_gpio_single $test_EN_DO3 + export_gpio_single $test_EN_DO4 + + cd - >/dev/null +} + +unexport_gpio_single() +{ + if [ -d "gpio""$1" ]; then + echo $1 > ./unexport + fi +} + +unexport_all_gpio() +{ + cd /sys/class/gpio + + unexport_gpio_single $test_EN_DO1 + unexport_gpio_single $test_EN_DO2 + unexport_gpio_single $test_EN_DO3 + unexport_gpio_single $test_EN_DO4 + + cd - >/dev/null +} + +set_gpio_value_single() +{ + if [ -d "gpio""$1" ]; then + if [ $4 -ne 1 ]; then + echo "set DO"$3" value: "$2 + fi + echo $2 > ./"gpio""$1"/value + else + echo "error! not export DO, couldnt set DO value" + fi +} + +disable_all_output() +{ + cd /sys/class/gpio + + set_gpio_value_single $test_EN_DO1 0 "EN12" 1 + set_gpio_value_single $test_EN_DO2 0 "EN34" 1 + set_gpio_value_single $test_EN_DO3 0 "EN56" 1 + set_gpio_value_single $test_EN_DO4 0 "EN78" 1 + + cd - >/dev/null +} + +enable_all_output() +{ + cd /sys/class/gpio + + set_gpio_value_single $test_EN_DO1 1 "EN12" 1 + set_gpio_value_single $test_EN_DO2 1 "EN34" 1 + set_gpio_value_single $test_EN_DO3 1 "EN56" 1 + set_gpio_value_single $test_EN_DO4 1 "EN78" 1 + + cd - >/dev/null +} + +generate_export_num; +export_all_gpio; + +if [ $1 -eq 1 ]; then + enable_all_output; +else + disable_all_output; +fi + +unexport_all_gpio; diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/shell/modi_hct/pwm_test/pwm_test.sh b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/shell/modi_hct/pwm_test/pwm_test.sh new file mode 100755 index 00000000..ae78c8af --- /dev/null +++ b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/shell/modi_hct/pwm_test/pwm_test.sh @@ -0,0 +1,170 @@ +#! /bin/sh + +#shell_info_start +#name:PWM DO test +#type:interface +#mul:0 +#desc:PWM DO test +#board:LS2K500-MODI_HCT +#shell_info_end + +pwm0_DO_num=1 +pwm0_DO_result=1 +pwmchip0_dir_path="/sys/class/pwm/pwmchip0" +pwm0_dev_path="$pwmchip0_dir_path/pwm0" + +pwm1_DO_num=3 +pwm1_DO_result=1 +pwmchip1_dir_path="/sys/class/pwm/pwmchip1" +pwm1_dev_path="$pwmchip1_dir_path/pwm0" + +pwm2_DO_num=5 +pwm2_DO_result=1 +pwmchip2_dir_path="/sys/class/pwm/pwmchip2" +pwm2_dev_path="$pwmchip2_dir_path/pwm0" + +pwm3_DO_num=7 +pwm3_DO_result=1 +pwmchip3_dir_path="/sys/class/pwm/pwmchip4" +pwm3_dev_path="$pwmchip3_dir_path/pwm0" + +pwm_polarity="normal" + +pwm_tip="1KHz" +pwm_period=1000000 +pwm_duty_cycle_1=0 +pwm_duty_cycle_2=5000 +pwm_duty_cycle_3=250000 +pwm_duty_cycle_4=500000 +pwm_duty_cycle_5=750000 +pwm_duty_cycle_6=1000000 + +export_pwm_single() +{ + echo 0 > $1"/export"; +} + +export_all_pwm() +{ + export_pwm_single $pwmchip0_dir_path; + export_pwm_single $pwmchip1_dir_path; + export_pwm_single $pwmchip2_dir_path; + export_pwm_single $pwmchip3_dir_path; +} + +unexpoer_pwm_single() +{ + echo 0 > $1"/unexport"; +} + +unexport_all_pwm() +{ + if [ -d $pwm0_dev_path ]; then + unexpoer_pwm_single $pwmchip0_dir_path; + fi + if [ -d $pwm1_dev_path ]; then + unexpoer_pwm_single $pwmchip1_dir_path; + fi + if [ -d $pwm2_dev_path ]; then + unexpoer_pwm_single $pwmchip2_dir_path; + fi + if [ -d $pwm3_dev_path ]; then + unexpoer_pwm_single $pwmchip3_dir_path; + fi +} + +enable_pwm() +{ + echo 1 > $1"/enable" 2>/dev/null; +} + +disenale_pwm() +{ + echo 0 > $1"/enable" 2>/dev/null; +} + +set_period() +{ + echo $1 > $2"/period" 2>/dev/null; +} + +set_duty_cycle() +{ + echo $1 > $2"/duty_cycle" 2>/dev/null; +} + +setup_single_pwm_property() +{ + set_duty_cycle 1 $3 + set_period $1 $3 + set_duty_cycle $2 $3 #重复设置,因为会出现大小不符合的时候就会提示错误,重复设置就可以避免因错误而写不进去的问题 + + enable_pwm $3; +} + +setup_all_pwm_property() +{ + echo "" + disenale_pwm $pwm0_dev_path + disenale_pwm $pwm1_dev_path + disenale_pwm $pwm2_dev_path + disenale_pwm $pwm3_dev_path + sleep 1; + + setup_single_pwm_property $1 $2 $pwm0_dev_path + setup_single_pwm_property $1 $2 $pwm1_dev_path + setup_single_pwm_property $1 $2 $pwm2_dev_path + setup_single_pwm_property $1 $2 $pwm3_dev_path + + loop_read=1 + + while [ $loop_read -eq 1 ]; + do + echo -n "observer signal is standard?(y or n): " + read result + + case $result in + "y") + return 0 ;; + "n") + return 1 ;; + esac + done +} + +test_single_duty_cycle() +{ + rate_pwm=`awk 'BEGIN{printf "%.2f%\n",('$2'/'$1')*100}'` + echo "set all pwm duty cycle: "$2" ($rate_pwm)"; + setup_all_pwm_property $1 $2; +} + +start_test() +{ + echo "set all pwm Hz: "$pwm_tip; + echo "set all pwm period: "$pwm_period; + + test_single_duty_cycle $pwm_period $pwm_duty_cycle_1 + test_single_duty_cycle $pwm_period $pwm_duty_cycle_2 + test_single_duty_cycle $pwm_period $pwm_duty_cycle_3 + test_single_duty_cycle $pwm_period $pwm_duty_cycle_4 + test_single_duty_cycle $pwm_period $pwm_duty_cycle_5 + test_single_duty_cycle $pwm_period $pwm_duty_cycle_6 +} + +run() +{ + unexport_all_pwm; + + export_all_pwm; + + start_test; + + unexport_all_pwm; + + echo "test finish" +} + +./MS8844_setup.sh 1 >/dev/null +run; +./MS8844_setup.sh 0 >/dev/null diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/shell/modi_hct/usb_test/test_RW.sh b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/shell/modi_hct/usb_test/test_RW.sh new file mode 100755 index 00000000..4e3fe172 --- /dev/null +++ b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/shell/modi_hct/usb_test/test_RW.sh @@ -0,0 +1,125 @@ +#! /bin/sh + +#通用测试RW指令脚本 +#参数1 测试的类型 这个可以随意 比如我要测SSD 可以是SSD 也可以是SSD2 无所谓 +#参数2 测试的文件夹,为了数据安全,所以需要指定一个测试用的文件夹 +#参数3 测试的设备文件 比如 /dev/sda + +#同时,如果要测试USB,那么这个脚本不包挂载等事项,请上层脚本先挂载好,然后再调用此脚本。 + +test_dir=""; +test_name=""; + +test_base_path="/home" + +md5_file_temp_path=$test_base_path +md5_file_temp=$md5_file_temp_path"/md5_ls_check" + +big_file_prepare_path="$test_base_path""/loongson_pre_test_big_file_dir" +big_file_prepare_other_path="/media/loongson_pre_test_big_file_dir" +big_file_prepare_name=$big_file_prepare_path"/testbig" + +cp_file_cmd() +{ + mode=2; + if [ $mode -eq 1 ]; then + chmod a+x ./cp + ./cp -ig $1 $2 + fi + if [ $mode -eq 2 ]; then + dd if=$1 of="$2" conv=fsync + fi +} + +md5_check_cmd() +{ + md5sum $1 $2 > $md5_file_temp + md5sum -c $md5_file_temp --quiet + md5_res=$? + rm $md5_file_temp + if [ $md5_res -eq 0 ]; then + echo "md5 check success" + return 0 + else + echo "md5 check failed" + return 1 + fi +} + +dd_new_file() +{ + echo "prepare a $2""M file" + if [ -e /dev/urandom ]; then + dd if=/dev/urandom of=$1 conv=fsync bs=1M count=$2 2>/dev/null + else + dd if=/dev/zero of=$1 conv=fsync bs=1M count=$2 2>/dev/null + fi +} + +prepare_file() +{ + if [ ! -d $big_file_prepare_path ]; then + mkdir -p $big_file_prepare_path >/dev/null + fi + dd_new_file $big_file_prepare_name 100 + sync; +} + +test_big_read() +{ + sync; + sleep 1 + cp_file_cmd $test_name $big_file_prepare_name + md5_check_cmd $test_name $big_file_prepare_name + rm $big_file_prepare_name + rm $test_name + sync && echo 3 > /proc/sys/vm/drop_caches + sync; +} + +test_big_write() +{ + sync; + cp_file_cmd $big_file_prepare_name $test_name + md5_check_cmd $test_name $big_file_prepare_name + rm $big_file_prepare_name + sync && echo 3 > /proc/sys/vm/drop_caches + sync +} + +test_mode1_rootfs_big() +{ + if [ $# -eq 3 ]; then + test_dir=$2 + test_name=$test_dir"/testbig" + + if [ ! -d $test_base_path ]; then + mkdir -p $test_base_path + fi + + prepare_file + echo "---------------------------------------" + echo "test big file write" + test_big_write; + echo "---------------------------------------" + echo "test big file read" + test_big_read; + echo "---------------------------------------" + + rm -r $big_file_prepare_path + if [ -d $big_file_prepare_other_path ]; then + rm -r $big_file_prepare_other_path + fi + + # echo "test small file write and read" + # "$PWD/test_small_file.sh" $1 $2 $3 1 + # echo "---------------------------------------" + fi +} + +test_start() +{ + test_mode1_rootfs_big $1 $2 $3 +} + +test_start $1 $2 $3 diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/shell/modi_hct/usb_test/test_small_file.sh b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/shell/modi_hct/usb_test/test_small_file.sh new file mode 100755 index 00000000..9f3a08a3 --- /dev/null +++ b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/shell/modi_hct/usb_test/test_small_file.sh @@ -0,0 +1,119 @@ +#! /bin/sh + +# 1: 测试的设备类型 +# 2: 写的位置 +# 3: 测试的设备名字 +# 4: 测试类型 0R 1W + +test_dev_type="" + +test_dir=""; + +test_dev=""; + +write_dir_path=""; +speed_mark_file_path="/home/loongson_small_file_mark.txt" + +small_file_save_dir_name="loongson_test_small_file_dir" + +small_file_prepare_path="/home/loongson_pre_test_small_file_dir" +small_file_prepare_other_path="/home/loongson_pre_test_small_file_dir" + +small_file_count=1000 + +small_file_pre_file_front_name="$small_file_prepare_path""file_" + +cp_dir_cmd() +{ + mode=1; + if [ $mode -eq 1 ]; then + chmod a+x ./cp + ./cp -r -ig $1 $2 + #cp -r $1 $2 + fi + if [ $mode -eq 2 ]; then + old_path=$PWD + if [ ! -d $2 ]; then + mkdir -p $2 + fi + cd $1 + for file in $(ls) + do + dd if=$file of=$2/$file conv=fsync + done + cd $old_path + fi +} + +dd_new_file() +{ + if [ -e /dev/urandom ]; then + dd if=/dev/urandom of=$1 conv=fsync bs=1M count=$2 2>/dev/null + else + dd if=/dev/zero of=$1 conv=fsync bs=1M count=$2 2>/dev/null + fi +} + +prepare_file() +{ + echo "prepare "$small_file_count" small file" + if [ ! -d $small_file_prepare_path ]; then + mkdir -p "$small_file_prepare_path" + fi + loop=1 + + while [ $loop -le $small_file_count ]; + do + printf "\rprocess: $loop / $small_file_count"; + dd_new_file "$small_file_prepare_path""/file_""$loop" 2 + loop=$(($loop+1)); + done + + echo ""; + + sync; +} + +test_small_write() +{ + echo "test small file write" + cp_dir_cmd "$small_file_prepare_path" $write_dir_path + rm -r "$small_file_prepare_path" + sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches" +} + +test_small_read() +{ + sync; + sleep 1; + echo "test small file read" + cp_dir_cmd $write_dir_path "$small_file_prepare_path" + rm -r "$small_file_prepare_path" + sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches" +} + +if [ $# -eq 4 ]; then + test_dev_type=$1; + test_dir=$2 + test_dev=$3 + + write_dir_path=$test_dir"/"$small_file_save_dir_name"_"$test_dev_type + if [ -d $write_dir_path ]; then + echo "Error! exist path:"$write_dir_path" for data safe, this write test stop!"; + exit 1; + fi + + mkdir -p $write_dir_path; + + prepare_file; + + test_small_write; + + test_small_read; + + rm -r $write_dir_path; + + if [ -d $small_file_prepare_other_path ]; then + rm -r $small_file_prepare_other_path + fi +fi diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/shell/modi_hct/usb_test/test_usb_RW.sh b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/shell/modi_hct/usb_test/test_usb_RW.sh new file mode 100755 index 00000000..5ccc04aa --- /dev/null +++ b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/root/ls_system_tool_install/shell/modi_hct/usb_test/test_usb_RW.sh @@ -0,0 +1,61 @@ +#! /bin/sh + +#shell_info_start +#name:USB transfer test +#args:/dev/sda1 +#args_tip:USB transfer test +#type:interface +#mul:0 +#desc:USB transfer test +#board:LS2K500-MODI_HCT +#shell_info_end + +usb_dev="/dev/sdb1" +usb_mount="/mnt/usb" +test_dir="/mnt/usb/loongson_usb_iotest" + +test_usb_dev() +{ + if [ ! -e $usb_dev ]; then + echo "not found usb! please check usb insert!"; + return 1; + fi + + mountpoint -q $usb_mount + if [ $? -eq 1 ]; then + if [ ! -d $usb_mount ]; then + mkdir -p $usb_mount; + fi + mount $usb_dev $usb_mount; + fi + + mountpoint -q $usb_mount + if [ $? -eq 1 ]; then + echo "mount usb failed!"; + return 1; + fi + return 0; +} + +if [ $# -eq 1 ]; then + usb_dev=$1; + test_usb_dev + if [ $? -eq 1 ]; then + exit 1; + fi + + if [ ! -d $test_dir ]; then + mkdir -p $test_dir; + + ./test_RW.sh usb $test_dir $usb_dev + + rm -r $test_dir + + echo "USB IO test finish!" + + umount $usb_mount; + else + echo "$test_dir is exist in usb! test cancel!"; + umount $usb_mount; + fi +fi diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/build b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/build new file mode 120000 index 00000000..2c9311d1 --- /dev/null +++ b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/build @@ -0,0 +1 @@ +/home/loongson/datac2/niuyize/linux-5.10-la \ No newline at end of file diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/crypto/aes_generic.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/crypto/aes_generic.ko new file mode 100644 index 00000000..38e7a45c Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/crypto/aes_generic.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/crypto/ccm.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/crypto/ccm.ko new file mode 100644 index 00000000..3f35b91c Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/crypto/ccm.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/crypto/cmac.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/crypto/cmac.ko new file mode 100644 index 00000000..d98c5932 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/crypto/cmac.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/crypto/ctr.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/crypto/ctr.ko new file mode 100644 index 00000000..b7b14367 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/crypto/ctr.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/crypto/gcm.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/crypto/gcm.ko new file mode 100644 index 00000000..ab763f1c Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/crypto/gcm.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/crypto/gf128mul.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/crypto/gf128mul.ko new file mode 100644 index 00000000..852adbd6 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/crypto/gf128mul.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/crypto/ghash-generic.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/crypto/ghash-generic.ko new file mode 100644 index 00000000..47f9c55f Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/crypto/ghash-generic.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/base/regmap/regmap-i2c.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/base/regmap/regmap-i2c.ko new file mode 100644 index 00000000..1648588d Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/base/regmap/regmap-i2c.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/gpio/gpio-pca953x.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/gpio/gpio-pca953x.ko new file mode 100644 index 00000000..1e6c4d4b Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/gpio/gpio-pca953x.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/hid/hid-generic.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/hid/hid-generic.ko new file mode 100644 index 00000000..2d0ab662 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/hid/hid-generic.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/hid/hid-multitouch.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/hid/hid-multitouch.ko new file mode 100644 index 00000000..bd9c0d12 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/hid/hid-multitouch.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/hid/hid.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/hid/hid.ko new file mode 100644 index 00000000..075a1f30 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/hid/hid.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/hid/usbhid/usbhid.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/hid/usbhid/usbhid.ko new file mode 100644 index 00000000..08f56c87 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/hid/usbhid/usbhid.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/hid/usbhid/usbkbd.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/hid/usbhid/usbkbd.ko new file mode 100644 index 00000000..a469e1b1 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/hid/usbhid/usbkbd.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/hid/usbhid/usbmouse.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/hid/usbhid/usbmouse.ko new file mode 100644 index 00000000..636e3dad Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/hid/usbhid/usbmouse.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/input/mousedev.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/input/mousedev.ko new file mode 100644 index 00000000..3c9c7f3b Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/input/mousedev.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/misc/eeprom/at24.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/misc/eeprom/at24.ko new file mode 100644 index 00000000..be2de68e Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/misc/eeprom/at24.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/mtd/spi-nor/spi-nor.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/mtd/spi-nor/spi-nor.ko new file mode 100644 index 00000000..9833b9f1 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/mtd/spi-nor/spi-nor.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-generic.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-generic.ko new file mode 100644 index 00000000..4c65b389 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-generic.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.ko new file mode 100644 index 00000000..fef02aad Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac-pci.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac-pci.ko new file mode 100644 index 00000000..e7f47739 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac-pci.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac-platform.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac-platform.ko new file mode 100644 index 00000000..a825a94c Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac-platform.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac.ko new file mode 100644 index 00000000..adc35032 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/mii.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/mii.ko new file mode 100644 index 00000000..aacf4c6a Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/mii.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/pcs/pcs-xpcs.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/pcs/pcs-xpcs.ko new file mode 100644 index 00000000..5944ba09 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/pcs/pcs-xpcs.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/phy/marvell.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/phy/marvell.ko new file mode 100644 index 00000000..dfa4c0dd Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/phy/marvell.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/phy/motorcomm.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/phy/motorcomm.ko new file mode 100644 index 00000000..fa46ad65 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/phy/motorcomm.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/phy/phylink.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/phy/phylink.ko new file mode 100644 index 00000000..c4e5f4a3 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/phy/phylink.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/wireless/ralink/rt2x00/rt2800lib.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/wireless/ralink/rt2x00/rt2800lib.ko new file mode 100644 index 00000000..b144617d Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/wireless/ralink/rt2x00/rt2800lib.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/wireless/ralink/rt2x00/rt2800usb.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/wireless/ralink/rt2x00/rt2800usb.ko new file mode 100644 index 00000000..fbbfd437 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/wireless/ralink/rt2x00/rt2800usb.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/wireless/ralink/rt2x00/rt2x00lib.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/wireless/ralink/rt2x00/rt2x00lib.ko new file mode 100644 index 00000000..b29a614a Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/wireless/ralink/rt2x00/rt2x00lib.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/wireless/ralink/rt2x00/rt2x00usb.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/wireless/ralink/rt2x00/rt2x00usb.ko new file mode 100644 index 00000000..3095ded7 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/net/wireless/ralink/rt2x00/rt2x00usb.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/rtc/rtc-ls2x.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/rtc/rtc-ls2x.ko new file mode 100644 index 00000000..20bef2f7 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/rtc/rtc-ls2x.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/rtc/rtc-sd3078.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/rtc/rtc-sd3078.ko new file mode 100644 index 00000000..3985c4f8 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/rtc/rtc-sd3078.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/scsi/scsi_mod.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/scsi/scsi_mod.ko new file mode 100644 index 00000000..0663169b Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/scsi/scsi_mod.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/scsi/sd_mod.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/scsi/sd_mod.ko new file mode 100644 index 00000000..aaaf9f45 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/scsi/sd_mod.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/scsi/sg.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/scsi/sg.ko new file mode 100644 index 00000000..19bc0225 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/scsi/sg.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/spi/spi-ls.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/spi/spi-ls.ko new file mode 100644 index 00000000..f1a69092 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/spi/spi-ls.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/thermal/ls2k_thermal.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/thermal/ls2k_thermal.ko new file mode 100644 index 00000000..c67e2f54 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/thermal/ls2k_thermal.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/common/usb-common.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/common/usb-common.ko new file mode 100644 index 00000000..fa28f474 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/common/usb-common.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/core/usbcore.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/core/usbcore.ko new file mode 100644 index 00000000..909edd5c Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/core/usbcore.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/dwc3/dwc3-haps.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/dwc3/dwc3-haps.ko new file mode 100644 index 00000000..1d593ba3 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/dwc3/dwc3-haps.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/dwc3/dwc3-of-simple.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/dwc3/dwc3-of-simple.ko new file mode 100644 index 00000000..fe764965 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/dwc3/dwc3-of-simple.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/dwc3/dwc3-pci.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/dwc3/dwc3-pci.ko new file mode 100644 index 00000000..2f2f6fa7 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/dwc3/dwc3-pci.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/dwc3/dwc3.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/dwc3/dwc3.ko new file mode 100644 index 00000000..87b8c176 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/dwc3/dwc3.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/gadget/udc/udc-core.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/gadget/udc/udc-core.ko new file mode 100644 index 00000000..6ea94db2 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/gadget/udc/udc-core.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/host/ehci-hcd.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/host/ehci-hcd.ko new file mode 100644 index 00000000..870c521d Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/host/ehci-hcd.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/host/ehci-pci.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/host/ehci-pci.ko new file mode 100644 index 00000000..f32fe6d3 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/host/ehci-pci.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/host/ehci-platform.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/host/ehci-platform.ko new file mode 100644 index 00000000..8a6e9b90 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/host/ehci-platform.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/host/ohci-hcd.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/host/ohci-hcd.ko new file mode 100644 index 00000000..71c2b3da Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/host/ohci-hcd.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/host/ohci-platform.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/host/ohci-platform.ko new file mode 100644 index 00000000..2b05e113 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/host/ohci-platform.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/mon/usbmon.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/mon/usbmon.ko new file mode 100644 index 00000000..2aac42b4 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/mon/usbmon.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/storage/usb-storage.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/storage/usb-storage.ko new file mode 100644 index 00000000..88f034e5 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/usb/storage/usb-storage.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/watchdog/loongson2_wdt.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/watchdog/loongson2_wdt.ko new file mode 100644 index 00000000..ede06c31 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/watchdog/loongson2_wdt.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/watchdog/watchdog.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/watchdog/watchdog.ko new file mode 100644 index 00000000..04f6d3db Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/drivers/watchdog/watchdog.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/exfat/exfat.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/exfat/exfat.ko new file mode 100644 index 00000000..c1418bed Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/exfat/exfat.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/ext2/ext2.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/ext2/ext2.ko new file mode 100644 index 00000000..b9ed6a77 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/ext2/ext2.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/fat/fat.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/fat/fat.ko new file mode 100644 index 00000000..818237c3 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/fat/fat.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/fat/msdos.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/fat/msdos.ko new file mode 100644 index 00000000..6cc1268d Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/fat/msdos.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/fat/vfat.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/fat/vfat.ko new file mode 100644 index 00000000..06f79be5 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/fat/vfat.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/nls/nls_cp437.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/nls/nls_cp437.ko new file mode 100644 index 00000000..b3e28385 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/nls/nls_cp437.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/nls/nls_cp936.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/nls/nls_cp936.ko new file mode 100644 index 00000000..1b1a5962 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/nls/nls_cp936.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/nls/nls_utf8.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/nls/nls_utf8.ko new file mode 100644 index 00000000..5b902f6e Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/fs/nls/nls_utf8.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/lib/crc-ccitt.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/lib/crc-ccitt.ko new file mode 100644 index 00000000..dc94db27 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/lib/crc-ccitt.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/lib/crypto/libaes.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/lib/crypto/libaes.ko new file mode 100644 index 00000000..7f1f7d8b Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/lib/crypto/libaes.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/lib/crypto/libarc4.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/lib/crypto/libarc4.ko new file mode 100644 index 00000000..928ff404 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/lib/crypto/libarc4.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/mm/z3fold.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/mm/z3fold.ko new file mode 100644 index 00000000..7dfcef28 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/mm/z3fold.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/mm/zbud.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/mm/zbud.ko new file mode 100644 index 00000000..1bffb90e Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/mm/zbud.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/mm/zpool.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/mm/zpool.ko new file mode 100644 index 00000000..0b25f021 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/mm/zpool.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/ipv4/inet_diag.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/ipv4/inet_diag.ko new file mode 100644 index 00000000..39963fe9 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/ipv4/inet_diag.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/ipv4/tcp_diag.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/ipv4/tcp_diag.ko new file mode 100644 index 00000000..488797f0 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/ipv4/tcp_diag.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/ipv4/udp_diag.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/ipv4/udp_diag.ko new file mode 100644 index 00000000..57b8617d Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/ipv4/udp_diag.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/key/af_key.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/key/af_key.ko new file mode 100644 index 00000000..23849a37 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/key/af_key.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/mac80211/mac80211.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/mac80211/mac80211.ko new file mode 100644 index 00000000..3f855471 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/mac80211/mac80211.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/netlink/netlink_diag.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/netlink/netlink_diag.ko new file mode 100644 index 00000000..345282ad Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/netlink/netlink_diag.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/rfkill/rfkill.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/rfkill/rfkill.ko new file mode 100644 index 00000000..b7fa3e7a Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/rfkill/rfkill.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/wireless/cfg80211.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/wireless/cfg80211.ko new file mode 100644 index 00000000..ea38cca5 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/wireless/cfg80211.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/xfrm/xfrm_algo.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/xfrm/xfrm_algo.ko new file mode 100644 index 00000000..e93be72f Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/xfrm/xfrm_algo.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/xfrm/xfrm_user.ko b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/xfrm/xfrm_user.ko new file mode 100644 index 00000000..10103958 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/kernel/net/xfrm/xfrm_user.ko differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.alias b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.alias new file mode 100644 index 00000000..9efddcc1 --- /dev/null +++ b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.alias @@ -0,0 +1,1118 @@ +# Aliases extracted from modules themselves. +alias zpool-z3fold z3fold +alias nls_gb2312 nls_cp936 +alias fs-ext2 ext2 +alias fs-vfat vfat +alias fs-msdos msdos +alias fs-exfat exfat +alias crypto-cmac cmac +alias cmac cmac +alias crypto-ctr ctr +alias ctr ctr +alias crypto-rfc3686 ctr +alias rfc3686 ctr +alias crypto-gcm gcm +alias gcm gcm +alias crypto-rfc4543 gcm +alias rfc4543 gcm +alias crypto-rfc4106 gcm +alias rfc4106 gcm +alias crypto-gcm_base gcm +alias gcm_base gcm +alias crypto-cbcmac ccm +alias cbcmac ccm +alias crypto-ccm ccm +alias ccm ccm +alias crypto-rfc4309 ccm +alias rfc4309 ccm +alias crypto-ccm_base ccm +alias ccm_base ccm +alias crypto-aes-generic aes_generic +alias aes-generic aes_generic +alias crypto-aes aes_generic +alias aes aes_generic +alias crypto-ghash-generic ghash_generic +alias ghash-generic ghash_generic +alias crypto-ghash ghash_generic +alias ghash ghash_generic +alias i2c:xra1202 gpio_pca953x +alias i2c:tca9554 gpio_pca953x +alias i2c:tca9539 gpio_pca953x +alias i2c:tca6424 gpio_pca953x +alias i2c:tca6416 gpio_pca953x +alias i2c:tca6408 gpio_pca953x +alias i2c:pca6107 gpio_pca953x +alias i2c:max7318 gpio_pca953x +alias i2c:max7315 gpio_pca953x +alias i2c:max7313 gpio_pca953x +alias i2c:max7312 gpio_pca953x +alias i2c:max7310 gpio_pca953x +alias i2c:pcal9555a gpio_pca953x +alias i2c:pcal9554b gpio_pca953x +alias i2c:pcal9535 gpio_pca953x +alias i2c:pcal6524 gpio_pca953x +alias i2c:pcal6416 gpio_pca953x +alias i2c:pca9698 gpio_pca953x +alias i2c:pca9575 gpio_pca953x +alias i2c:pca9574 gpio_pca953x +alias i2c:pca9557 gpio_pca953x +alias i2c:pca9556 gpio_pca953x +alias i2c:pca9555 gpio_pca953x +alias i2c:pca9554 gpio_pca953x +alias i2c:pca9539 gpio_pca953x +alias i2c:pca9538 gpio_pca953x +alias i2c:pca9537 gpio_pca953x +alias i2c:pca9536 gpio_pca953x +alias i2c:pca9535 gpio_pca953x +alias i2c:pca9534 gpio_pca953x +alias i2c:pca9505 gpio_pca953x +alias i2c:pca6416 gpio_pca953x +alias acpi*:INT3491:* gpio_pca953x +alias of:N*T*Cexar,xra1202C* gpio_pca953x +alias of:N*T*Cexar,xra1202 gpio_pca953x +alias of:N*T*Connn,pca9655C* gpio_pca953x +alias of:N*T*Connn,pca9655 gpio_pca953x +alias of:N*T*Connn,pca9654C* gpio_pca953x +alias of:N*T*Connn,pca9654 gpio_pca953x +alias of:N*T*Connn,cat9554C* gpio_pca953x +alias of:N*T*Connn,cat9554 gpio_pca953x +alias of:N*T*Cti,tca9539C* gpio_pca953x +alias of:N*T*Cti,tca9539 gpio_pca953x +alias of:N*T*Cti,tca6424C* gpio_pca953x +alias of:N*T*Cti,tca6424 gpio_pca953x +alias of:N*T*Cti,tca6416C* gpio_pca953x +alias of:N*T*Cti,tca6416 gpio_pca953x +alias of:N*T*Cti,tca6408C* gpio_pca953x +alias of:N*T*Cti,tca6408 gpio_pca953x +alias of:N*T*Cti,pca9536C* gpio_pca953x +alias of:N*T*Cti,pca9536 gpio_pca953x +alias of:N*T*Cti,pca6107C* gpio_pca953x +alias of:N*T*Cti,pca6107 gpio_pca953x +alias of:N*T*Cmaxim,max7318C* gpio_pca953x +alias of:N*T*Cmaxim,max7318 gpio_pca953x +alias of:N*T*Cmaxim,max7315C* gpio_pca953x +alias of:N*T*Cmaxim,max7315 gpio_pca953x +alias of:N*T*Cmaxim,max7313C* gpio_pca953x +alias of:N*T*Cmaxim,max7313 gpio_pca953x +alias of:N*T*Cmaxim,max7312C* gpio_pca953x +alias of:N*T*Cmaxim,max7312 gpio_pca953x +alias of:N*T*Cmaxim,max7310C* gpio_pca953x +alias of:N*T*Cmaxim,max7310 gpio_pca953x +alias of:N*T*Cnxp,pcal9555aC* gpio_pca953x +alias of:N*T*Cnxp,pcal9555a gpio_pca953x +alias of:N*T*Cnxp,pcal9554bC* gpio_pca953x +alias of:N*T*Cnxp,pcal9554b gpio_pca953x +alias of:N*T*Cnxp,pcal9535C* gpio_pca953x +alias of:N*T*Cnxp,pcal9535 gpio_pca953x +alias of:N*T*Cnxp,pcal6524C* gpio_pca953x +alias of:N*T*Cnxp,pcal6524 gpio_pca953x +alias of:N*T*Cnxp,pcal6416C* gpio_pca953x +alias of:N*T*Cnxp,pcal6416 gpio_pca953x +alias of:N*T*Cnxp,pca9698C* gpio_pca953x +alias of:N*T*Cnxp,pca9698 gpio_pca953x +alias of:N*T*Cnxp,pca9575C* gpio_pca953x +alias of:N*T*Cnxp,pca9575 gpio_pca953x +alias of:N*T*Cnxp,pca9574C* gpio_pca953x +alias of:N*T*Cnxp,pca9574 gpio_pca953x +alias of:N*T*Cnxp,pca9557C* gpio_pca953x +alias of:N*T*Cnxp,pca9557 gpio_pca953x +alias of:N*T*Cnxp,pca9556C* gpio_pca953x +alias of:N*T*Cnxp,pca9556 gpio_pca953x +alias of:N*T*Cnxp,pca9555C* gpio_pca953x +alias of:N*T*Cnxp,pca9555 gpio_pca953x +alias of:N*T*Cnxp,pca9554C* gpio_pca953x +alias of:N*T*Cnxp,pca9554 gpio_pca953x +alias of:N*T*Cnxp,pca9539C* gpio_pca953x +alias of:N*T*Cnxp,pca9539 gpio_pca953x +alias of:N*T*Cnxp,pca9538C* gpio_pca953x +alias of:N*T*Cnxp,pca9538 gpio_pca953x +alias of:N*T*Cnxp,pca9537C* gpio_pca953x +alias of:N*T*Cnxp,pca9537 gpio_pca953x +alias of:N*T*Cnxp,pca9536C* gpio_pca953x +alias of:N*T*Cnxp,pca9536 gpio_pca953x +alias of:N*T*Cnxp,pca9535C* gpio_pca953x +alias of:N*T*Cnxp,pca9535 gpio_pca953x +alias of:N*T*Cnxp,pca9534C* gpio_pca953x +alias of:N*T*Cnxp,pca9534 gpio_pca953x +alias of:N*T*Cnxp,pca9505C* gpio_pca953x +alias of:N*T*Cnxp,pca9505 gpio_pca953x +alias of:N*T*Cnxp,pca6416C* gpio_pca953x +alias of:N*T*Cnxp,pca6416 gpio_pca953x +alias i2c:at24 at24 +alias i2c:24c2048 at24 +alias i2c:24c1024 at24 +alias i2c:24c512 at24 +alias i2c:24c256 at24 +alias i2c:24c128 at24 +alias i2c:24cs64 at24 +alias i2c:24c64 at24 +alias i2c:24cs32 at24 +alias i2c:24c32 at24 +alias i2c:24cs16 at24 +alias i2c:24c16 at24 +alias i2c:24cs08 at24 +alias i2c:24c08 at24 +alias i2c:24cs04 at24 +alias i2c:24c04 at24 +alias i2c:24c02-vaio at24 +alias i2c:spd at24 +alias i2c:24mac602 at24 +alias i2c:24mac402 at24 +alias i2c:24cs02 at24 +alias i2c:24c02 at24 +alias i2c:24cs01 at24 +alias i2c:24c01 at24 +alias i2c:24c00 at24 +alias of:N*T*Catmel,24c2048C* at24 +alias of:N*T*Catmel,24c2048 at24 +alias of:N*T*Catmel,24c1024C* at24 +alias of:N*T*Catmel,24c1024 at24 +alias of:N*T*Catmel,24c512C* at24 +alias of:N*T*Catmel,24c512 at24 +alias of:N*T*Catmel,24c256C* at24 +alias of:N*T*Catmel,24c256 at24 +alias of:N*T*Catmel,24c128C* at24 +alias of:N*T*Catmel,24c128 at24 +alias of:N*T*Catmel,24cs64C* at24 +alias of:N*T*Catmel,24cs64 at24 +alias of:N*T*Catmel,24c64C* at24 +alias of:N*T*Catmel,24c64 at24 +alias of:N*T*Catmel,24cs32C* at24 +alias of:N*T*Catmel,24cs32 at24 +alias of:N*T*Catmel,24c32C* at24 +alias of:N*T*Catmel,24c32 at24 +alias of:N*T*Catmel,24cs16C* at24 +alias of:N*T*Catmel,24cs16 at24 +alias of:N*T*Catmel,24c16C* at24 +alias of:N*T*Catmel,24c16 at24 +alias of:N*T*Catmel,24cs08C* at24 +alias of:N*T*Catmel,24cs08 at24 +alias of:N*T*Catmel,24c08C* at24 +alias of:N*T*Catmel,24c08 at24 +alias of:N*T*Catmel,24cs04C* at24 +alias of:N*T*Catmel,24cs04 at24 +alias of:N*T*Catmel,24c04C* at24 +alias of:N*T*Catmel,24c04 at24 +alias of:N*T*Catmel,spdC* at24 +alias of:N*T*Catmel,spd at24 +alias of:N*T*Catmel,24mac602C* at24 +alias of:N*T*Catmel,24mac602 at24 +alias of:N*T*Catmel,24mac402C* at24 +alias of:N*T*Catmel,24mac402 at24 +alias of:N*T*Catmel,24cs02C* at24 +alias of:N*T*Catmel,24cs02 at24 +alias of:N*T*Catmel,24c02C* at24 +alias of:N*T*Catmel,24c02 at24 +alias of:N*T*Catmel,24cs01C* at24 +alias of:N*T*Catmel,24cs01 at24 +alias of:N*T*Catmel,24c01C* at24 +alias of:N*T*Catmel,24c01 at24 +alias of:N*T*Catmel,24c00C* at24 +alias of:N*T*Catmel,24c00 at24 +alias acpi*:TPF0001:* at24 +alias acpi*:INT3499:* at24 +alias scsi:t-0x14* sd_mod +alias scsi:t-0x0e* sd_mod +alias scsi:t-0x07* sd_mod +alias scsi:t-0x00* sd_mod +alias block-major-135-* sd_mod +alias block-major-134-* sd_mod +alias block-major-133-* sd_mod +alias block-major-132-* sd_mod +alias block-major-131-* sd_mod +alias block-major-130-* sd_mod +alias block-major-129-* sd_mod +alias block-major-128-* sd_mod +alias block-major-71-* sd_mod +alias block-major-70-* sd_mod +alias block-major-69-* sd_mod +alias block-major-68-* sd_mod +alias block-major-67-* sd_mod +alias block-major-66-* sd_mod +alias block-major-65-* sd_mod +alias block-major-8-* sd_mod +alias char-major-21-* sg +alias of:N*T*Cjedec,spi-norC* spi_nor +alias of:N*T*Cjedec,spi-nor spi_nor +alias spi:mr25h40 spi_nor +alias spi:mr25h10 spi_nor +alias spi:mr25h256 spi_nor +alias spi:mr25h128 spi_nor +alias spi:m25p128-nonjedec spi_nor +alias spi:m25p64-nonjedec spi_nor +alias spi:m25p32-nonjedec spi_nor +alias spi:m25p16-nonjedec spi_nor +alias spi:m25p80-nonjedec spi_nor +alias spi:m25p40-nonjedec spi_nor +alias spi:m25p20-nonjedec spi_nor +alias spi:m25p10-nonjedec spi_nor +alias spi:m25p05-nonjedec spi_nor +alias spi:w25q256 spi_nor +alias spi:w25q128 spi_nor +alias spi:w25q80bl spi_nor +alias spi:w25q32dw spi_nor +alias spi:w25q32 spi_nor +alias spi:w25x32 spi_nor +alias spi:w25x80 spi_nor +alias spi:m25p128 spi_nor +alias spi:m25p64 spi_nor +alias spi:m25p32 spi_nor +alias spi:m25p16 spi_nor +alias spi:m25p80 spi_nor +alias spi:m25p40 spi_nor +alias spi:sst25wf040 spi_nor +alias spi:sst25vf032b spi_nor +alias spi:sst25vf016b spi_nor +alias spi:sst25vf040b spi_nor +alias spi:s25fl064k spi_nor +alias spi:s25fl008k spi_nor +alias spi:s25sl12801 spi_nor +alias spi:s25fl512s spi_nor +alias spi:s25fl256s1 spi_nor +alias spi:n25q512a spi_nor +alias spi:n25q128a13 spi_nor +alias spi:n25q128a11 spi_nor +alias spi:n25q064 spi_nor +alias spi:mx66l51235l spi_nor +alias spi:mx25l25635e spi_nor +alias spi:mx25l12805d spi_nor +alias spi:mx25l6405d spi_nor +alias spi:mx25l1606e spi_nor +alias spi:mx25l4005a spi_nor +alias spi:at26df081a spi_nor +alias spi:at25df641 spi_nor +alias spi:at25df321a spi_nor +alias spi:m25px64 spi_nor +alias spi:m25p10 spi_nor +alias spi:w25x16 spi_nor +alias spi:s25sl064a spi_nor +alias spi:spi-nor spi_nor +alias of:N*T*Cloongson,ls-spiC* spi_ls +alias of:N*T*Cloongson,ls-spi spi_ls +alias mdio:0000000101000001000011101100???? marvell +alias mdio:0000000101000001000011011100???? marvell +alias mdio:0000000101000001000011111001???? marvell +alias mdio:0000000101000001000011110100???? marvell +alias mdio:0000000101000001000011100110???? marvell +alias mdio:0000000101000001000011101010???? marvell +alias mdio:0000000101000001000011101011???? marvell +alias mdio:0000000101000001000011011101???? marvell +alias mdio:0000000101000001000011100100???? marvell +alias mdio:0000000101000001000011101001???? marvell +alias mdio:0000000101000001000011100011???? marvell +alias mdio:0000000101000001000011100101???? marvell +alias mdio:0000000101000001000011001101???? marvell +alias mdio:0000000101000001000011001011???? marvell +alias mdio:0000000101000001000011100001???? marvell +alias mdio:0000000101000001000011001100???? marvell +alias mdio:0000000101000001000011001001???? marvell +alias mdio:0000000101000001000011000110???? marvell +alias mdio:????????????????????000100011010 motorcomm +alias mdio:????????????????????000100101000 motorcomm +alias mdio:????????????????????000100011000 motorcomm +alias mdio:????????????????????000100001010 motorcomm +alias mdio:????????????????????000100001001 motorcomm +alias mdio:????????????????????001100001001 motorcomm +alias of:N*T*Csnps,dwxgmacC* dwmac_generic +alias of:N*T*Csnps,dwxgmac dwmac_generic +alias of:N*T*Csnps,dwxgmac-2.10C* dwmac_generic +alias of:N*T*Csnps,dwxgmac-2.10 dwmac_generic +alias of:N*T*Csnps,dwmacC* dwmac_generic +alias of:N*T*Csnps,dwmac dwmac_generic +alias of:N*T*Csnps,dwmac-4.10aC* dwmac_generic +alias of:N*T*Csnps,dwmac-4.10a dwmac_generic +alias of:N*T*Csnps,dwmac-4.00C* dwmac_generic +alias of:N*T*Csnps,dwmac-4.00 dwmac_generic +alias of:N*T*Csnps,dwmac-3.710C* dwmac_generic +alias of:N*T*Csnps,dwmac-3.710 dwmac_generic +alias of:N*T*Csnps,dwmac-3.70aC* dwmac_generic +alias of:N*T*Csnps,dwmac-3.70a dwmac_generic +alias of:N*T*Csnps,dwmac-3.610C* dwmac_generic +alias of:N*T*Csnps,dwmac-3.610 dwmac_generic +alias of:N*T*Csnps,dwmac-3.50aC* dwmac_generic +alias of:N*T*Csnps,dwmac-3.50a dwmac_generic +alias of:N*T*Csnps,dwmac-3.40aC* dwmac_generic +alias of:N*T*Csnps,dwmac-3.40a dwmac_generic +alias of:N*T*Cst,spear600-gmacC* dwmac_generic +alias of:N*T*Cst,spear600-gmac dwmac_generic +alias pci:v00000014d00007A13sv*sd*bc*sc*i* stmmac_pci +alias pci:v00000014d00007A03sv*sd*bc*sc*i* stmmac_pci +alias pci:v000016C3d00007102sv*sd*bc*sc*i* stmmac_pci +alias pci:v0000104Ad0000CC09sv*sd*bc*sc*i* stmmac_pci +alias pci:v00000700d00001108sv*sd*bc*sc*i* stmmac_pci +alias pci:v00000014d00007A03sv*sd*bc*sc*i* dwmac_loongson +alias usb:v177Fp0165d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v177Fp0163d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DF6p0050d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v148Fp8070d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v148Fp3370d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0471p20DDd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v083ApB512d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v083ApB511d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v2001p3C17d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v050Dp945Bd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0586p343Ed*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0586p341Ed*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0586p341Ad*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0586p3418d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0586p3416d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v5A57p5257d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v5A57p0283d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v5A57p0282d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v5A57p0280d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0CDEp0025d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0CDEp0022d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v157Ep3013d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v157Ep300Ed*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v177Fp0324d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v177Fp0323d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v177Fp0313d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v177Fp0302d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v177Fp0164d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v177Fp0153d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v15A9p0006d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v083ApB522d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v083ApA703d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v083ApA702d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v083ApA701d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v083ApA618d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v083Ap8522d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v083Ap7522d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v083Ap7512d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v083Ap7511d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v083Ap6618d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DF6p0060d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DF6p005Fd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DF6p0051d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DF6p0048d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DF6p0047d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DF6p0042d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DF6p0040d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DF6p003Fd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DF6p003Ed*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DF6p003Dd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DF6p003Bd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DF6p0039d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DF6p002Dd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DF6p002Cd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DF6p002Bd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DF6p0017d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v129Bp1828d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v04E8p2018d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v148Fp3072d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v148Fp3071d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v148Fp3070d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v148Fp2870d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v148Fp2770d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v148Fp2070d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1A32p0304d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v2019pED06d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v2019pAB25d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v2019p5201d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0471p200Fd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1D4Dp0011d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1D4Dp000Ed*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1D4Dp000Cd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1D4Dp0002d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v20B8p8888d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1B75pA200d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1B75p3072d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1B75p3071d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1B75p3070d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DB0p899Ad*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DB0p871Cd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DB0p871Bd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DB0p871Ad*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DB0p870Ad*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DB0p822Cd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DB0p822Bd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DB0p822Ad*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DB0p821Ad*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DB0p6899d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DB0p3871d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DB0p3870d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DB0p3822d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DB0p3821d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0DB0p3820d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v100Dp9031d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0789p0166d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0789p0164d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0789p0163d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0789p0162d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1737p0078d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1737p0077d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1737p0071d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1737p0070d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v13B1p0031d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v04BBp0948d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v04BBp0947d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v04BBp0945d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0E66p0018d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0E66p0017d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0E66p0013d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0E66p000Bd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0E66p0009d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0E66p0003d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0E66p0001d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1044p800Dd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1044p800Bd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v15A9p0012d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1740p9709d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1740p9708d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1740p9707d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1740p9706d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1740p9705d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1740p9703d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1740p9702d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1740p9701d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v203Dp14A9d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v203Dp1480d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v7392p7722d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v7392p7718d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v7392p7717d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v7392p7711d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v7392p4085d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0FE9pB307d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v07FAp7712d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v2001p3C25d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v2001p3C1Bd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v2001p3317d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v07D1p3C17d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v07D1p3C16d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v07D1p3C15d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v07D1p3C13d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v07D1p3C11d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v07D1p3C0Fd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v07D1p3C0Ed*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v07D1p3C0Dd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v07D1p3C0Ad*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v07D1p3C09d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v18C5p0012d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v07AAp003Fd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v07AAp003Cd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v07AAp002Fd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0411p01FDd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0411p01A8d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0411p01EEd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0411p01A2d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0411p016Fd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0411p015Dd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0411p0158d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0411p00E8d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v050Dp935Bd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v050Dp935Ad*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v050Dp825Bd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v050Dp825Ad*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v050Dp815Cd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v050Dp805Cd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v050Dp8053d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v13D3p3321d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v13D3p3307d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v13D3p3305d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v13D3p3273d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v13D3p3247d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1761p0B05d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0B05p1784d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0B05p1742d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0B05p1732d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v0B05p1731d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1690p0740d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v15C5p0008d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v14B2p3C2Cd*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v14B2p3C28d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v14B2p3C27d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v14B2p3C25d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v14B2p3C23d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v14B2p3C12d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v14B2p3C09d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v14B2p3C07d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v14B2p3C06d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v8516p3072d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v8516p3071d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v8516p3070d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v8516p2870d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v8516p2770d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v8516p2070d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1EDAp2310d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1EDAp2210d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1EDAp2012d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v1482p3C09d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v07B8p3072d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v07B8p3071d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v07B8p3070d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v07B8p2770d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias usb:v07B8p2870d*dc*dsc*dp*ic*isc*ip*in* rt2800usb +alias pci:v0000104Ad0000CC00sv*sd*bc*sc*i* ehci_pci +alias pci:v*d*sv*sd*bc0Csc03i20* ehci_pci +alias of:N*T*Ccavium,octeon-6335-ehciC* ehci_platform +alias of:N*T*Ccavium,octeon-6335-ehci ehci_platform +alias of:N*T*Cgeneric-ehciC* ehci_platform +alias of:N*T*Cgeneric-ehci ehci_platform +alias of:N*T*Cwm,prizm-ehciC* ehci_platform +alias of:N*T*Cwm,prizm-ehci ehci_platform +alias of:N*T*Cvia,vt8500-ehciC* ehci_platform +alias of:N*T*Cvia,vt8500-ehci ehci_platform +alias acpi*:PNP0D20:* ehci_platform +alias platform:ehci-platform ehci_platform +alias of:N*T*Cti,ohci-omap3C* ohci_platform +alias of:N*T*Cti,ohci-omap3 ohci_platform +alias of:N*T*Ccavium,octeon-6335-ohciC* ohci_platform +alias of:N*T*Ccavium,octeon-6335-ohci ohci_platform +alias of:N*T*Cgeneric-ohciC* ohci_platform +alias of:N*T*Cgeneric-ohci ohci_platform +alias platform:ohci-platform ohci_platform +alias usb:v*p*d*dc*dsc*dp*ic09isc*ip*in* usbcore +alias usb:v*p*d*dc09dsc*dp*ic*isc*ip*in* usbcore +alias usb:v05E3p*d*dc*dsc*dp*ic09isc*ip*in* usbcore +alias usb:v04B4p6570d*dc*dsc*dp*ic*isc*ip*in* usbcore +alias usb:v0424p5534d*dc*dsc*dp*ic09isc*ip*in* usbcore +alias platform:dwc3 dwc3 +alias acpi*:808622B7:* dwc3 +alias of:N*T*Csynopsys,dwc3C* dwc3 +alias of:N*T*Csynopsys,dwc3 dwc3 +alias of:N*T*Csnps,dwc3C* dwc3 +alias of:N*T*Csnps,dwc3 dwc3 +alias pci:v00001022d00007912sv*sd*bc*sc*i* dwc3_pci +alias pci:v00008086d00007AE1sv*sd*bc*sc*i* dwc3_pci +alias pci:v00008086d00004DEEsv*sd*bc*sc*i* dwc3_pci +alias pci:v00008086d000043EEsv*sd*bc*sc*i* dwc3_pci +alias pci:v00008086d0000A0EEsv*sd*bc*sc*i* dwc3_pci +alias pci:v00008086d00004B7Esv*sd*bc*sc*i* dwc3_pci +alias pci:v00008086d000034EEsv*sd*bc*sc*i* dwc3_pci +alias pci:v00008086d0000A3B0sv*sd*bc*sc*i* dwc3_pci +alias pci:v00008086d0000A36Esv*sd*bc*sc*i* dwc3_pci +alias pci:v00008086d00009DEEsv*sd*bc*sc*i* dwc3_pci +alias pci:v00008086d000031AAsv*sd*bc*sc*i* dwc3_pci +alias pci:v00008086d0000A2B0sv*sd*bc*sc*i* dwc3_pci +alias pci:v00008086d00005AAAsv*sd*bc*sc*i* dwc3_pci +alias pci:v00008086d00001AAAsv*sd*bc*sc*i* dwc3_pci +alias pci:v00008086d00000AAAsv*sd*bc*sc*i* dwc3_pci +alias pci:v00008086d0000A130sv*sd*bc*sc*i* dwc3_pci +alias pci:v00008086d00009D30sv*sd*bc*sc*i* dwc3_pci +alias pci:v00008086d000006EEsv*sd*bc*sc*i* dwc3_pci +alias pci:v00008086d000002EEsv*sd*bc*sc*i* dwc3_pci +alias pci:v00008086d0000119Esv*sd*bc*sc*i* dwc3_pci +alias pci:v00008086d00000F37sv*sd*bc*sc*i* dwc3_pci +alias pci:v00008086d000022B7sv*sd*bc*sc*i* dwc3_pci +alias pci:v000016C3d0000ABCFsv*sd*bc*sc*i* dwc3_haps +alias pci:v000016C3d0000ABCEsv*sd*bc*sc*i* dwc3_haps +alias pci:v000016C3d0000ABCDsv*sd*bc0Csc03i* dwc3_haps +alias of:N*T*Cintel,keembay-dwc3C* dwc3_of_simple +alias of:N*T*Cintel,keembay-dwc3 dwc3_of_simple +alias of:N*T*Chisilicon,hi3670-dwc3C* dwc3_of_simple +alias of:N*T*Chisilicon,hi3670-dwc3 dwc3_of_simple +alias of:N*T*Callwinner,sun50i-h6-dwc3C* dwc3_of_simple +alias of:N*T*Callwinner,sun50i-h6-dwc3 dwc3_of_simple +alias of:N*T*Csprd,sc9860-dwc3C* dwc3_of_simple +alias of:N*T*Csprd,sc9860-dwc3 dwc3_of_simple +alias of:N*T*Ccavium,octeon-7130-usb-uctlC* dwc3_of_simple +alias of:N*T*Ccavium,octeon-7130-usb-uctl dwc3_of_simple +alias of:N*T*Cxlnx,zynqmp-dwc3C* dwc3_of_simple +alias of:N*T*Cxlnx,zynqmp-dwc3 dwc3_of_simple +alias of:N*T*Crockchip,rk3399-dwc3C* dwc3_of_simple +alias of:N*T*Crockchip,rk3399-dwc3 dwc3_of_simple +alias usb:v*p*d*dc*dsc*dp*ic08isc06ip50in* usb_storage +alias usb:v*p*d*dc*dsc*dp*ic08isc05ip50in* usb_storage +alias usb:v*p*d*dc*dsc*dp*ic08isc04ip50in* usb_storage +alias usb:v*p*d*dc*dsc*dp*ic08isc03ip50in* usb_storage +alias usb:v*p*d*dc*dsc*dp*ic08isc02ip50in* usb_storage +alias usb:v*p*d*dc*dsc*dp*ic08isc01ip50in* usb_storage +alias usb:v*p*d*dc*dsc*dp*ic08isc06ip00in* usb_storage +alias usb:v*p*d*dc*dsc*dp*ic08isc05ip00in* usb_storage +alias usb:v*p*d*dc*dsc*dp*ic08isc04ip00in* usb_storage +alias usb:v*p*d*dc*dsc*dp*ic08isc03ip00in* usb_storage +alias usb:v*p*d*dc*dsc*dp*ic08isc02ip00in* usb_storage +alias usb:v*p*d*dc*dsc*dp*ic08isc01ip00in* usb_storage +alias usb:v*p*d*dc*dsc*dp*ic08isc06ip01in* usb_storage +alias usb:v*p*d*dc*dsc*dp*ic08isc05ip01in* usb_storage +alias usb:v*p*d*dc*dsc*dp*ic08isc04ip01in* usb_storage +alias usb:v*p*d*dc*dsc*dp*ic08isc03ip01in* usb_storage +alias usb:v*p*d*dc*dsc*dp*ic08isc02ip01in* usb_storage +alias usb:v*p*d*dc*dsc*dp*ic08isc01ip01in* usb_storage +alias usb:vED10p7636d0001dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:vED06p4500d0001dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:vC251p4003d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v4971p8024d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v4146pBA01d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v4102p1059d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v4102p1020d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v357Dp7788d0114dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v3340pFFFFd0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v2CA3p0031d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v2735p100Bd*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v22B8p6426d0101dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v22B8p3010d0001dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v2116p0320d0001dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v2027pA001d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v1E74p4621d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v1E68p001Bd0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v1DE1pC102d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v1B1Cp1AB5d0200dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v19D2p1225d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v1949p0004d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v1908p3335d0200dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v1908p1320d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v1908p1315d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v1822p0001d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v177Fp0400d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v174Cp55AAd0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v1652p6600d0201dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v1645p0007d01[0-2]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v1645p0007d013[0-3]dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v152Dp9561d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v152Dp2567d0117dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v152Dp2566d0114dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v152Dp2329d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v152Dp0578d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v152Dp0567d011[4-7]dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v14CDp6600d0201dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v13FEp3600d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v13FDp3609d0209dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v1370p6828d0110dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v132Bp000Bd0001dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p143Fd0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p143Ed0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p143Dd0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p143Cd0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p143Bd0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p143Ad0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1439d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1438d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1437d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1436d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1435d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1434d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1433d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1432d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1431d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1430d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p142Fd0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p142Ed0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p142Dd0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p142Cd0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p142Bd0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p142Ad0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1429d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1428d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1427d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1426d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1425d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1424d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1423d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1422d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1421d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1420d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p141Fd0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p141Ed0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p141Dd0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p141Cd0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p141Bd0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p141Ad0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1419d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1418d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1417d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1416d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1415d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1414d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1413d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1412d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1411d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1410d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p140Fd0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p140Ed0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p140Dd0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p140Cd0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p140Bd0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p140Ad0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1409d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1408d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1407d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1406d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1405d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1404d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1403d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1402d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1401d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1004d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1003d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v12D1p1001d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v1210p0003d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v1199p0FFFd*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v1186p3E04d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v10D6p2200d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v1058p070Ad*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v1058p0704d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v1019p0C55d00*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v1019p0C55d010*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v1019p0C55d0110dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0FCEpE092d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0FCEpE031d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0FCEpE030d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0FCEpD0E1d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0FCEpD008d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0FCAp8004d0201dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0F88p042Ed0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0F19p0105d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0F19p0103d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0ED1p7636d0103dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0EA0p6828d0110dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0EA0p2168d0110dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0ED1p6660d0[1-2]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0ED1p6660d0300dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0E21p0520d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0DDAp0301d0012dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0DDAp0001d0012dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0DD8pD202d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0DD8p1060d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0DC4p0073d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0D96p5200d01*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0D96p5200d00[1-9]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0D96p5200d0200dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0D96p5200d000[1-9]dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0D96p410Ad[1-9]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0D96p410Ad0[1-9]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0D96p410Ad00[1-9]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0D96p410Ad000[1-9]dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0C45p1060d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0D49p7310d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0BC2p3332d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0BC2p3010d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0BC2p2300d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0AF0pD357d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0AF0pD257d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0AF0pD157d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0AF0pD058d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0AF0pD057d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0AF0pC100d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0AF0p8304d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0AF0p8302d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0AF0p8300d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0AF0p7A05d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0AF0p7A01d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0AF0p7901d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0AF0p7706d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0AF0p7701d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0AF0p7501d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0AF0p7401d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0AF0p6971d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0ACEp20FFd0101dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0ACEp2011d0101dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0A17p0004d1000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v090Cp6000d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v090Cp3350d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v090Cp1132d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v090Cp1000d1100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v090Ap1200d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v090Ap1050d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v090Ap1001d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v08CAp3103d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v08BDp1100d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v085Ap0028d01[0-2]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v085Ap0028d013[0-3]dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v085Ap0026d01[0-2]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v085Ap0026d013[0-3]dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0851p1543d0200dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0851p1542d0002dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v084Dp0011d0110dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v084BpA001d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0840p0085d0001dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0840p0084d0001dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0840p0082d0001dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0839p000Ad0001dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v07CFp1167d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v07CFp1001d[1-9]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v07C4pA4A5d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v07C4pA400d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v07AFp0006d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v07AFp0005d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v07AFp0004d01[0-2]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v07AFp0004d013[0-3]dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v07ABpFCCDd*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0781p0100d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0781p0002d0009dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0781p0001d0200dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0727p0306d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v071Bp3203d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v071Bp32BBd0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v071Bp3203d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v06CAp2003d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v069Bp3004d0001dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0693p0005d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0686p4017d0001dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0686p4011d0001dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v067Bp3507d00[1-9]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v067Bp3507d010[0-1]dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v067Bp3507d000[1-9]dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v067Bp2507d00[1-9]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v067Bp2507d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v067Bp2507d000[1-9]dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v067Bp2317d0001dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v067Bp1063d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v066Fp8000d0001dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0644p0000d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0636p0003d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v05E3p0723d9451dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v05E3p0702d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v05E3p0701d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v05DCpB002d00*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v05DCpB002d010*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v05DCpB002d011[0-3]dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v05C6p1000d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v05ACp120Ad*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v05ACp1205d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v05ACp1204d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v05ACp1203d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v05ACp1202d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v05ABp0060d1110dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v05ABp0060d110[4-9]dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v059Fp0651d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v059Fp0643d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v059Bp0040d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v059Bp0001d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0595p4343d[0-1]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0595p4343d2[0-1]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0595p4343d220*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0595p4343d2210dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v058Fp6387d0141dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v057Bp0022d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v057Bp0000d0[0-2]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v055Dp2020d0[0-1]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v055Dp2020d020*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v055Dp2020d0210dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp02A5d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp016Ad*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp0099d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp006Dd*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp0069d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp0058d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp0032d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp002Ed0500dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp002Ed02*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp002Ed030*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp002Ed01[1-9]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp002Ed0310dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp002Ed010[6-9]dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp002Dd0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp002Cd1*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp002Cd0[6-9]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp002Cd05[1-9]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp002Cd2000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp002Cd050[1-9]dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp0025d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp0010d05*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp0010d060*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp0010d0610dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp0010d0[2-3]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp0010d04[0-4]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp0010d01[1-9]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp0010d0450dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v054Cp0010d010[6-9]dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v052Bp1911d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v052Bp1905d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v052Bp1807d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v052Bp1804d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v052Bp1801d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0525pA4A5d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0525pA140d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v050Dp0115d0133dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04FCp80C2d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04E8p5136d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04E8p5122d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04E8p507Cd0220dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04E6p0101d0200dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04E6p000Fd*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04E6p000Cd0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04E6p000Bd0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04E6p000Ad0200dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04E6p0009d0200dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04E6p0007d01*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04E6p0007d0200dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04E6p0006d0205dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04E6p0006d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04E6p0005d01*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04E6p0005d020[0-8]dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04E6p0002d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04E6p0001d0200dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04DAp2373d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04DAp2372d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04DAp0D05d0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04DAp0901d01*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04DAp0901d0200dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04CEp0002d026Cdc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04CEp0002d0[0-1]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04CEp0002d02[0-5]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04CEp0002d026[0-9A-B]dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04CBp0100d[0-1]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04CBp0100d2[0-1]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04CBp0100d220*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04CBp0100d2210dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04C5p2028d0001dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04B8p0602d0110dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04B8p0601d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04B3p4001d0110dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04B0p0301d0010dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04A5p3010d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v04A4p0004d0001dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0482p0107d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0482p0103d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0482p0101d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0482p0100d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0480pD010d[1-9]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0480pD010d0[1-9]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v046BpFF40d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v045EpFFFFd0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0457p0151d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0457p0150d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0451p5416d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0436p0005d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0421p06AAd1110dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0421p05AFd0742dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0421p04B9d0350dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0421p0495d0370dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0421p0492d[1-9]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0421p0492d0[5-9]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0421p0492d04[6-9]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0421p0492d045[2-9]dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0421p047Cd0[4-5]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0421p047Cd060*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0421p047Cd03[7-9]*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0421p047Cd0610dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0421p044Ed0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0421p0446d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0421p0444d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0421p0434d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0421p0433d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0421p042Ed0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0421p0019d060*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0421p0019d0610dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0421p0019d059[2-9]dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0420p0001d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0419pAAF6d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0419pAAF5d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0419pAACEd0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0419p0100d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0411p001Cd0113dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v040Dp6205d0003dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v0409p0040d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v03F3p0001d*dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v03F0p4002d0001dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v03F0p070Cd0000dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v03F0p0107d0200dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v03EEp6906d0003dc*dsc*dp*ic*isc*ip*in* usb_storage +alias usb:v03EBp2002d0100dc*dsc*dp*ic*isc*ip*in* usb_storage +alias input:b*v*p*e*-e*1,*3,*k*110,*r*a*0,*1,*m*l*s*f*w* mousedev +alias input:b*v*p*e*-e*1,*3,*k*145,*r*a*0,*1,*18,*1C,*m*l*s*f*w* mousedev +alias input:b*v*p*e*-e*1,*3,*k*14A,*r*a*0,*1,*m*l*s*f*w* mousedev +alias input:b*v*p*e*-e*1,*2,*k*r*8,*a*m*l*s*f*w* mousedev +alias input:b*v*p*e*-e*1,*2,*k*110,*r*0,*1,*a*m*l*s*f*w* mousedev +alias platform:ls2x-rtc rtc_ls2x +alias acpi*:LOON0001:* rtc_ls2x +alias i2c:sd3078 rtc_sd3078 +alias of:N*T*Cwhwave,sd3078C* rtc_sd3078 +alias of:N*T*Cwhwave,sd3078 rtc_sd3078 +alias of:N*T*Cloongson,ls2k-tsensorC* ls2k_thermal +alias of:N*T*Cloongson,ls2k-tsensor ls2k_thermal +alias of:N*T*Cloongson,ls2x-wdtC* loongson2_wdt +alias of:N*T*Cloongson,ls2x-wdt loongson2_wdt +alias hid:b*g*v*p* hid_generic +alias hid:b*g0004v*p* hid_multitouch +alias hid:b*g0002v*p* hid_multitouch +alias hid:b*g*v000018D1p00005028 hid_multitouch +alias hid:b0003g0002v00001477p00001025 hid_multitouch +alias hid:b0003g0002v00001477p00001026 hid_multitouch +alias hid:b0003g0002v00001477p00001024 hid_multitouch +alias hid:b0003g0002v00001477p00001022 hid_multitouch +alias hid:b0003g0002v00001477p00001023 hid_multitouch +alias hid:b0003g0002v00001477p00001021 hid_multitouch +alias hid:b0003g0002v00001477p0000100E hid_multitouch +alias hid:b0003g0002v00001477p00001007 hid_multitouch +alias hid:b0003g0002v00001477p00001006 hid_multitouch +alias hid:b0003g0002v00002505p00000220 hid_multitouch +alias hid:b0003g0002v00000FB8p00001109 hid_multitouch +alias hid:b0003g0002v00000306p0000FF3F hid_multitouch +alias hid:b0003g0002v0000227Dp00000A19 hid_multitouch +alias hid:b0003g0002v0000227Dp00000709 hid_multitouch +alias hid:b0003g0002v00001E5Ep00000313 hid_multitouch +alias hid:b0003g0002v00001784p00000016 hid_multitouch +alias hid:b0018g0004v000006CBp0000CE09 hid_multitouch +alias hid:b0018g0004v000006CBp0000CE08 hid_multitouch +alias hid:b0003g0002v00000483p00003261 hid_multitouch +alias hid:b0003g0002v00000B8Cp00000092 hid_multitouch +alias hid:b0018g0004v000006CBp00008323 hid_multitouch +alias hid:b0003g0002v00000408p00003001 hid_multitouch +alias hid:b0003g0002v00002087p00000703 hid_multitouch +alias hid:b0003g0002v0000093Ap00008003 hid_multitouch +alias hid:b0003g0002v0000093Ap00008002 hid_multitouch +alias hid:b0003g0002v0000093Ap00008001 hid_multitouch +alias hid:b0003g0002v000004DAp0000104D hid_multitouch +alias hid:b0003g0002v000004DAp00001044 hid_multitouch +alias hid:b0018g0004v00001B96p00001B05 hid_multitouch +alias hid:b0003g0002v00000603p00000600 hid_multitouch +alias hid:b0003g0002v0000062Ap00007100 hid_multitouch +alias hid:b0003g0002v00000486p00000186 hid_multitouch +alias hid:b0003g0002v00000486p00000185 hid_multitouch +alias hid:b0003g0004v000017EFp000060B5 hid_multitouch +alias hid:b0003g0004v000017EFp000060A3 hid_multitouch +alias hid:b0018g0001v00001FD2p00007010 hid_multitouch +alias hid:b0003g*v00001FD2p00006007 hid_multitouch +alias hid:b0003g0002v0000222Ap00000001 hid_multitouch +alias hid:b0003g0002v000022EDp00001010 hid_multitouch +alias hid:b0003g0002v00001AADp0000000F hid_multitouch +alias hid:b0005g0002v000025B6p00000002 hid_multitouch +alias hid:b0003g0002v00000DFCp0000E100 hid_multitouch +alias hid:b0003g0002v00000DFCp0000010A hid_multitouch +alias hid:b0003g0002v00000DFCp00000106 hid_multitouch +alias hid:b0003g0002v00000DFCp00000102 hid_multitouch +alias hid:b0003g0002v00000DFCp00000101 hid_multitouch +alias hid:b0003g0002v00000DFCp00000100 hid_multitouch +alias hid:b0003g0002v00000DFCp00000003 hid_multitouch +alias hid:b0003g0002v000010C4p000081B9 hid_multitouch +alias hid:b0003g0002v000025B5p00000002 hid_multitouch +alias hid:b0003g0002v000003FCp000005D8 hid_multitouch +alias hid:b0018g0004v000004F3p0000313A hid_multitouch +alias hid:b0003g0002v00000EEFp0000C002 hid_multitouch +alias hid:b0003g0002v00000EEFp0000A001 hid_multitouch +alias hid:b0003g0002v00000EEFp000073F7 hid_multitouch +alias hid:b0003g0002v00000EEFp00007349 hid_multitouch +alias hid:b0003g0002v00000EEFp00007302 hid_multitouch +alias hid:b0003g0002v00000EEFp000072FA hid_multitouch +alias hid:b0003g*v00000EEFp000072D0 hid_multitouch +alias hid:b0003g*v00000EEFp000072C4 hid_multitouch +alias hid:b0003g0002v00000EEFp000072AA hid_multitouch +alias hid:b0003g0002v00000EEFp000072A1 hid_multitouch +alias hid:b0003g0002v00000EEFp0000726B hid_multitouch +alias hid:b0003g0002v00000EEFp00007262 hid_multitouch +alias hid:b0003g0002v00000EEFp0000725E hid_multitouch +alias hid:b0003g0002v00000EEFp0000722A hid_multitouch +alias hid:b0003g0002v00000EEFp00007224 hid_multitouch +alias hid:b0003g0002v00000EEFp0000720C hid_multitouch +alias hid:b0003g0002v00000EEFp00007207 hid_multitouch +alias hid:b0003g0002v00000EEFp0000480E hid_multitouch +alias hid:b0003g0002v00000EEFp0000480D hid_multitouch +alias hid:b0003g0002v00001FF7p00000013 hid_multitouch +alias hid:b0003g0002v000024B8p00000040 hid_multitouch +alias hid:b0003g0002v000024B8p00000020 hid_multitouch +alias hid:b0003g0002v00002247p00000001 hid_multitouch +alias hid:b0003g0002v00002087p00000F01 hid_multitouch +alias hid:b0003g0002v00002087p00000A01 hid_multitouch +alias hid:b0003g0002v00002453p00000100 hid_multitouch +alias hid:b0003g0002v000003EBp00002118 hid_multitouch +alias hid:b0003g0004v00000B05p0000184A hid_multitouch +alias hid:b0003g0002v00001130p00003101 hid_multitouch +alias hid:b0003g0002v00000596p00000506 hid_multitouch +alias hid:b0003g0002v00000596p00000502 hid_multitouch +alias hid:b0003g0002v00000596p00000500 hid_multitouch +alias usb:v*p*d*dc*dsc*dp*ic03isc*ip*in* usbhid +alias usb:v*p*d*dc*dsc*dp*ic03isc01ip01in* usbkbd +alias usb:v*p*d*dc*dsc*dp*ic03isc01ip02in* usbmouse +alias net-pf-16-proto-4-type-16 netlink_diag +alias net-pf-16-proto-4-type-10 inet_diag +alias net-pf-16-proto-4-type-2 inet_diag +alias net-pf-16-proto-4-type-2-6 tcp_diag +alias net-pf-16-proto-4-type-2-136 udp_diag +alias net-pf-16-proto-4-type-2-17 udp_diag +alias net-pf-16-proto-6 xfrm_user +alias net-pf-16-proto-16-family-nl80211 cfg80211 +alias net-pf-15 af_key +alias devname:rfkill rfkill +alias char-major-10-242 rfkill diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.alias.bin b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.alias.bin new file mode 100644 index 00000000..ff3a4fa0 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.alias.bin differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.builtin b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.builtin new file mode 100644 index 00000000..e18c6fe3 --- /dev/null +++ b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.builtin @@ -0,0 +1,166 @@ +kernel/fs/binfmt_script.ko +kernel/fs/binfmt_elf.ko +kernel/fs/mbcache.ko +kernel/fs/configfs/configfs.ko +kernel/fs/fscache/fscache.ko +kernel/fs/ext4/ext4.ko +kernel/fs/jbd2/jbd2.ko +kernel/fs/exportfs/exportfs.ko +kernel/fs/nls/nls_base.ko +kernel/fs/nls/nls_ascii.ko +kernel/fs/nls/nls_iso8859-1.ko +kernel/fs/ubifs/ubifs.ko +kernel/fs/autofs/autofs4.ko +kernel/crypto/crypto.ko +kernel/crypto/crypto_algapi.ko +kernel/crypto/aead.ko +kernel/crypto/geniv.ko +kernel/crypto/skcipher.ko +kernel/crypto/crypto_hash.ko +kernel/crypto/akcipher.ko +kernel/crypto/kpp.ko +kernel/crypto/dh_generic.ko +kernel/crypto/rsa_generic.ko +kernel/crypto/crypto_acompress.ko +kernel/crypto/cryptomgr.ko +kernel/crypto/hmac.ko +kernel/crypto/crypto_null.ko +kernel/crypto/md5.ko +kernel/crypto/sha1_generic.ko +kernel/crypto/sha256_generic.ko +kernel/crypto/cbc.ko +kernel/crypto/deflate.ko +kernel/crypto/crc32c_generic.ko +kernel/crypto/lzo.ko +kernel/crypto/lzo-rle.ko +kernel/crypto/rng.ko +kernel/crypto/zstd.ko +kernel/crypto/asymmetric_keys/asymmetric_keys.ko +kernel/crypto/asymmetric_keys/public_key.ko +kernel/crypto/asymmetric_keys/x509_key_parser.ko +kernel/crypto/asymmetric_keys/pkcs7_message.ko +kernel/block/mq-deadline.ko +kernel/block/kyber-iosched.ko +kernel/block/bfq.ko +kernel/lib/crypto/libsha256.ko +kernel/lib/bitrev.ko +kernel/lib/crc16.ko +kernel/lib/crc-itu-t.ko +kernel/lib/crc32.ko +kernel/lib/xxhash.ko +kernel/lib/zlib_inflate/zlib_inflate.ko +kernel/lib/zlib_deflate/zlib_deflate.ko +kernel/lib/bch.ko +kernel/lib/lzo/lzo_compress.ko +kernel/lib/lzo/lzo_decompress.ko +kernel/lib/zstd/zstd_compress.ko +kernel/lib/zstd/zstd_decompress.ko +kernel/lib/xz/xz_dec.ko +kernel/lib/mpi/mpi.ko +kernel/lib/asn1_decoder.ko +kernel/lib/fonts/font.ko +kernel/lib/oid_registry.ko +kernel/drivers/pinctrl/pinctrl-single.ko +kernel/drivers/gpio/gpio-loongson.ko +kernel/drivers/pwm/pwm-ls.ko +kernel/drivers/video/backlight/backlight.ko +kernel/drivers/video/backlight/gpio_backlight.ko +kernel/drivers/video/backlight/pwm_bl.ko +kernel/drivers/video/fbdev/core/fb.ko +kernel/drivers/video/fbdev/core/cfbfillrect.ko +kernel/drivers/video/fbdev/core/cfbcopyarea.ko +kernel/drivers/video/fbdev/core/cfbimgblt.ko +kernel/drivers/video/fbdev/core/sysfillrect.ko +kernel/drivers/video/fbdev/core/syscopyarea.ko +kernel/drivers/video/fbdev/core/sysimgblt.ko +kernel/drivers/video/fbdev/core/fb_sys_fops.ko +kernel/drivers/video/fbdev/core/fb_ddc.ko +kernel/drivers/video/fbdev/aty/radeonfb.ko +kernel/drivers/acpi/processor.ko +kernel/drivers/acpi/thermal.ko +kernel/drivers/dma/virt-dma.ko +kernel/drivers/dma/ls_apbdmac.ko +kernel/drivers/tty/n_null.ko +kernel/drivers/tty/serial/serial_core.ko +kernel/drivers/tty/serial/8250/8250.ko +kernel/drivers/tty/serial/8250/8250_base.ko +kernel/drivers/tty/serial/8250/8250_of.ko +kernel/drivers/tty/serial/serial_mctrl_gpio.ko +kernel/drivers/tty/serdev/serdev.ko +kernel/drivers/char/hw_random/rng-core.ko +kernel/drivers/gpu/drm/drm_vram_helper.ko +kernel/drivers/gpu/drm/drm_ttm_helper.ko +kernel/drivers/gpu/drm/drm_kms_helper.ko +kernel/drivers/gpu/drm/drm.ko +kernel/drivers/gpu/drm/drm_panel_orientation_quirks.ko +kernel/drivers/gpu/drm/ttm/ttm.ko +kernel/drivers/gpu/drm/loongson/loongson.ko +kernel/drivers/gpu/drm/panel/panel-lvds.ko +kernel/drivers/gpu/drm/panel/panel-simple.ko +kernel/drivers/gpu/drm/bridge/display-connector.ko +kernel/drivers/gpu/drm/bridge/simple-bridge.ko +kernel/drivers/base/firmware_loader/firmware_class.ko +kernel/drivers/base/regmap/regmap-mmio.ko +kernel/drivers/block/brd.ko +kernel/drivers/block/loop.ko +kernel/drivers/block/cryptoloop.ko +kernel/drivers/mtd/mtd.ko +kernel/drivers/mtd/parsers/cmdlinepart.ko +kernel/drivers/mtd/parsers/ofpart.ko +kernel/drivers/mtd/mtd_blkdevs.ko +kernel/drivers/mtd/mtdblock.ko +kernel/drivers/mtd/chips/chipreg.ko +kernel/drivers/mtd/devices/block2mtd.ko +kernel/drivers/mtd/nand/nandcore.ko +kernel/drivers/mtd/nand/raw/nand.ko +kernel/drivers/mtd/nand/raw/nand_ecc.ko +kernel/drivers/mtd/nand/raw/ls-nand.ko +kernel/drivers/mtd/ubi/ubi.ko +kernel/drivers/net/dummy.ko +kernel/drivers/net/phy/mdio_devres.ko +kernel/drivers/net/phy/libphy.ko +kernel/drivers/net/phy/fixed_phy.ko +kernel/drivers/net/mdio/of_mdio.ko +kernel/drivers/net/can/dev/can-dev.ko +kernel/drivers/net/can/sja1000/sja1000.ko +kernel/drivers/net/can/sja1000/sja1000_platform.ko +kernel/drivers/input/serio/serio.ko +kernel/drivers/input/serio/libps2.ko +kernel/drivers/input/input-core.ko +kernel/drivers/input/input-leds.ko +kernel/drivers/input/evdev.ko +kernel/drivers/input/keyboard/atkbd.ko +kernel/drivers/input/keyboard/gpio_keys_polled.ko +kernel/drivers/input/touchscreen/of_touchscreen.ko +kernel/drivers/input/touchscreen/goodix.ko +kernel/drivers/input/touchscreen/focaltech_touch/focaltech_core.ko +kernel/drivers/i2c/i2c-core.ko +kernel/drivers/i2c/i2c-dev.ko +kernel/drivers/i2c/i2c-mux.ko +kernel/drivers/i2c/algos/i2c-algo-bit.ko +kernel/drivers/i2c/busses/i2c-gpio.ko +kernel/drivers/i2c/busses/i2c-ocores.ko +kernel/drivers/i2c/busses/i2c-ls2x.ko +kernel/drivers/i2c/muxes/i2c-mux-gpmux.ko +kernel/drivers/i2c/muxes/i2c-mux-reg.ko +kernel/drivers/pps/pps_core.ko +kernel/drivers/ptp/ptp.ko +kernel/drivers/leds/led-class.ko +kernel/drivers/leds/leds-gpio.ko +kernel/drivers/leds/leds-pwm.ko +kernel/drivers/leds/trigger/ledtrig-heartbeat.ko +kernel/drivers/leds/trigger/ledtrig-audio.ko +kernel/drivers/iio/industrialio.ko +kernel/drivers/iio/adc/ms518xn-spi.ko +kernel/drivers/iio/buffer/industrialio-triggered-buffer.ko +kernel/drivers/iio/buffer/kfifo_buf.ko +kernel/drivers/nvmem/nvmem_core.ko +kernel/drivers/mux/mux-core.ko +kernel/net/ipv4/tcp_cubic.ko +kernel/net/unix/unix.ko +kernel/net/packet/af_packet.ko +kernel/net/can/can.ko +kernel/net/can/can-raw.ko +kernel/net/can/can-bcm.ko +kernel/net/can/can-gw.ko +kernel/arch/loongarch/crypto/crc32.ko diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.builtin.bin b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.builtin.bin new file mode 100644 index 00000000..f2f655b1 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.builtin.bin differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.builtin.modinfo b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.builtin.modinfo new file mode 100644 index 00000000..453fe7ab Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.builtin.modinfo differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.dep b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.dep new file mode 100644 index 00000000..10a9a099 --- /dev/null +++ b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.dep @@ -0,0 +1,79 @@ +kernel/mm/zpool.ko: +kernel/mm/zbud.ko: +kernel/mm/z3fold.ko: kernel/mm/zpool.ko +kernel/fs/nls/nls_cp437.ko: +kernel/fs/nls/nls_cp936.ko: +kernel/fs/nls/nls_utf8.ko: +kernel/fs/ext2/ext2.ko: +kernel/fs/fat/fat.ko: +kernel/fs/fat/vfat.ko: kernel/fs/fat/fat.ko +kernel/fs/fat/msdos.ko: kernel/fs/fat/fat.ko +kernel/fs/exfat/exfat.ko: +kernel/crypto/cmac.ko: +kernel/crypto/gf128mul.ko: +kernel/crypto/ctr.ko: +kernel/crypto/gcm.ko: +kernel/crypto/ccm.ko: +kernel/crypto/aes_generic.ko: kernel/lib/crypto/libaes.ko +kernel/crypto/ghash-generic.ko: kernel/crypto/gf128mul.ko +kernel/lib/crypto/libaes.ko: +kernel/lib/crypto/libarc4.ko: +kernel/lib/crc-ccitt.ko: +kernel/drivers/gpio/gpio-pca953x.ko: kernel/drivers/base/regmap/regmap-i2c.ko +kernel/drivers/base/regmap/regmap-i2c.ko: +kernel/drivers/misc/eeprom/at24.ko: kernel/drivers/base/regmap/regmap-i2c.ko +kernel/drivers/scsi/scsi_mod.ko: +kernel/drivers/scsi/sd_mod.ko: kernel/drivers/scsi/scsi_mod.ko +kernel/drivers/scsi/sg.ko: kernel/drivers/scsi/scsi_mod.ko +kernel/drivers/mtd/spi-nor/spi-nor.ko: +kernel/drivers/spi/spi-ls.ko: +kernel/drivers/net/phy/phylink.ko: +kernel/drivers/net/phy/marvell.ko: +kernel/drivers/net/phy/motorcomm.ko: +kernel/drivers/net/pcs/pcs-xpcs.ko: +kernel/drivers/net/ethernet/stmicro/stmmac/stmmac.ko: kernel/drivers/net/pcs/pcs-xpcs.ko kernel/drivers/net/phy/phylink.ko +kernel/drivers/net/ethernet/stmicro/stmmac/stmmac-platform.ko: kernel/drivers/net/ethernet/stmicro/stmmac/stmmac.ko kernel/drivers/net/pcs/pcs-xpcs.ko kernel/drivers/net/phy/phylink.ko +kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-generic.ko: kernel/drivers/net/ethernet/stmicro/stmmac/stmmac-platform.ko kernel/drivers/net/ethernet/stmicro/stmmac/stmmac.ko kernel/drivers/net/pcs/pcs-xpcs.ko kernel/drivers/net/phy/phylink.ko +kernel/drivers/net/ethernet/stmicro/stmmac/stmmac-pci.ko: kernel/drivers/net/ethernet/stmicro/stmmac/stmmac.ko kernel/drivers/net/pcs/pcs-xpcs.ko kernel/drivers/net/phy/phylink.ko +kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.ko: kernel/drivers/net/ethernet/stmicro/stmmac/stmmac.ko kernel/drivers/net/pcs/pcs-xpcs.ko kernel/drivers/net/phy/phylink.ko +kernel/drivers/net/wireless/ralink/rt2x00/rt2x00lib.ko: kernel/net/mac80211/mac80211.ko kernel/lib/crypto/libarc4.ko kernel/net/wireless/cfg80211.ko kernel/net/rfkill/rfkill.ko +kernel/drivers/net/wireless/ralink/rt2x00/rt2x00usb.ko: kernel/drivers/usb/core/usbcore.ko kernel/drivers/usb/common/usb-common.ko kernel/drivers/net/wireless/ralink/rt2x00/rt2x00lib.ko kernel/net/mac80211/mac80211.ko kernel/lib/crypto/libarc4.ko kernel/net/wireless/cfg80211.ko kernel/net/rfkill/rfkill.ko +kernel/drivers/net/wireless/ralink/rt2x00/rt2800lib.ko: kernel/lib/crc-ccitt.ko kernel/drivers/net/wireless/ralink/rt2x00/rt2x00lib.ko kernel/net/mac80211/mac80211.ko kernel/lib/crypto/libarc4.ko kernel/net/wireless/cfg80211.ko kernel/net/rfkill/rfkill.ko +kernel/drivers/net/wireless/ralink/rt2x00/rt2800usb.ko: kernel/drivers/net/wireless/ralink/rt2x00/rt2x00usb.ko kernel/drivers/usb/core/usbcore.ko kernel/drivers/usb/common/usb-common.ko kernel/drivers/net/wireless/ralink/rt2x00/rt2800lib.ko kernel/lib/crc-ccitt.ko kernel/drivers/net/wireless/ralink/rt2x00/rt2x00lib.ko kernel/net/mac80211/mac80211.ko kernel/lib/crypto/libarc4.ko kernel/net/wireless/cfg80211.ko kernel/net/rfkill/rfkill.ko +kernel/drivers/net/mii.ko: +kernel/drivers/usb/host/ehci-hcd.ko: kernel/drivers/usb/core/usbcore.ko kernel/drivers/usb/common/usb-common.ko +kernel/drivers/usb/host/ehci-pci.ko: kernel/drivers/usb/host/ehci-hcd.ko kernel/drivers/usb/core/usbcore.ko kernel/drivers/usb/common/usb-common.ko +kernel/drivers/usb/host/ehci-platform.ko: kernel/drivers/usb/host/ehci-hcd.ko kernel/drivers/usb/core/usbcore.ko kernel/drivers/usb/common/usb-common.ko +kernel/drivers/usb/host/ohci-hcd.ko: kernel/drivers/usb/core/usbcore.ko kernel/drivers/usb/common/usb-common.ko +kernel/drivers/usb/host/ohci-platform.ko: kernel/drivers/usb/host/ohci-hcd.ko kernel/drivers/usb/core/usbcore.ko kernel/drivers/usb/common/usb-common.ko +kernel/drivers/usb/common/usb-common.ko: +kernel/drivers/usb/core/usbcore.ko: kernel/drivers/usb/common/usb-common.ko +kernel/drivers/usb/dwc3/dwc3.ko: kernel/drivers/usb/common/usb-common.ko +kernel/drivers/usb/dwc3/dwc3-pci.ko: +kernel/drivers/usb/dwc3/dwc3-haps.ko: +kernel/drivers/usb/dwc3/dwc3-of-simple.ko: +kernel/drivers/usb/mon/usbmon.ko: kernel/drivers/usb/core/usbcore.ko kernel/drivers/usb/common/usb-common.ko +kernel/drivers/usb/storage/usb-storage.ko: kernel/drivers/usb/core/usbcore.ko kernel/drivers/usb/common/usb-common.ko kernel/drivers/scsi/scsi_mod.ko +kernel/drivers/usb/gadget/udc/udc-core.ko: kernel/drivers/usb/common/usb-common.ko +kernel/drivers/input/mousedev.ko: +kernel/drivers/rtc/rtc-ls2x.ko: +kernel/drivers/rtc/rtc-sd3078.ko: kernel/drivers/base/regmap/regmap-i2c.ko +kernel/drivers/thermal/ls2k_thermal.ko: +kernel/drivers/watchdog/watchdog.ko: +kernel/drivers/watchdog/loongson2_wdt.ko: kernel/drivers/watchdog/watchdog.ko +kernel/drivers/hid/hid.ko: +kernel/drivers/hid/hid-generic.ko: kernel/drivers/hid/hid.ko +kernel/drivers/hid/hid-multitouch.ko: kernel/drivers/hid/hid.ko +kernel/drivers/hid/usbhid/usbhid.ko: kernel/drivers/hid/hid.ko kernel/drivers/usb/core/usbcore.ko kernel/drivers/usb/common/usb-common.ko +kernel/drivers/hid/usbhid/usbkbd.ko: kernel/drivers/usb/core/usbcore.ko kernel/drivers/usb/common/usb-common.ko +kernel/drivers/hid/usbhid/usbmouse.ko: kernel/drivers/usb/core/usbcore.ko kernel/drivers/usb/common/usb-common.ko +kernel/net/netlink/netlink_diag.ko: +kernel/net/ipv4/inet_diag.ko: +kernel/net/ipv4/tcp_diag.ko: kernel/net/ipv4/inet_diag.ko +kernel/net/ipv4/udp_diag.ko: kernel/net/ipv4/inet_diag.ko +kernel/net/xfrm/xfrm_algo.ko: +kernel/net/xfrm/xfrm_user.ko: kernel/net/xfrm/xfrm_algo.ko +kernel/net/wireless/cfg80211.ko: kernel/net/rfkill/rfkill.ko +kernel/net/key/af_key.ko: kernel/net/xfrm/xfrm_algo.ko +kernel/net/mac80211/mac80211.ko: kernel/lib/crypto/libarc4.ko kernel/net/wireless/cfg80211.ko kernel/net/rfkill/rfkill.ko +kernel/net/rfkill/rfkill.ko: diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.dep.bin b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.dep.bin new file mode 100644 index 00000000..c6217003 Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.dep.bin differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.devname b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.devname new file mode 100644 index 00000000..904a667e --- /dev/null +++ b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.devname @@ -0,0 +1,2 @@ +# Device nodes to trigger on-demand module loading. +rfkill rfkill c10:242 diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.order b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.order new file mode 100644 index 00000000..548f760f --- /dev/null +++ b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.order @@ -0,0 +1,79 @@ +kernel/mm/zpool.ko +kernel/mm/zbud.ko +kernel/mm/z3fold.ko +kernel/fs/nls/nls_cp437.ko +kernel/fs/nls/nls_cp936.ko +kernel/fs/nls/nls_utf8.ko +kernel/fs/ext2/ext2.ko +kernel/fs/fat/fat.ko +kernel/fs/fat/vfat.ko +kernel/fs/fat/msdos.ko +kernel/fs/exfat/exfat.ko +kernel/crypto/cmac.ko +kernel/crypto/gf128mul.ko +kernel/crypto/ctr.ko +kernel/crypto/gcm.ko +kernel/crypto/ccm.ko +kernel/crypto/aes_generic.ko +kernel/crypto/ghash-generic.ko +kernel/lib/crypto/libaes.ko +kernel/lib/crypto/libarc4.ko +kernel/lib/crc-ccitt.ko +kernel/drivers/gpio/gpio-pca953x.ko +kernel/drivers/base/regmap/regmap-i2c.ko +kernel/drivers/misc/eeprom/at24.ko +kernel/drivers/scsi/scsi_mod.ko +kernel/drivers/scsi/sd_mod.ko +kernel/drivers/scsi/sg.ko +kernel/drivers/mtd/spi-nor/spi-nor.ko +kernel/drivers/spi/spi-ls.ko +kernel/drivers/net/phy/phylink.ko +kernel/drivers/net/phy/marvell.ko +kernel/drivers/net/phy/motorcomm.ko +kernel/drivers/net/pcs/pcs-xpcs.ko +kernel/drivers/net/ethernet/stmicro/stmmac/stmmac.ko +kernel/drivers/net/ethernet/stmicro/stmmac/stmmac-platform.ko +kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-generic.ko +kernel/drivers/net/ethernet/stmicro/stmmac/stmmac-pci.ko +kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.ko +kernel/drivers/net/wireless/ralink/rt2x00/rt2x00lib.ko +kernel/drivers/net/wireless/ralink/rt2x00/rt2x00usb.ko +kernel/drivers/net/wireless/ralink/rt2x00/rt2800lib.ko +kernel/drivers/net/wireless/ralink/rt2x00/rt2800usb.ko +kernel/drivers/net/mii.ko +kernel/drivers/usb/host/ehci-hcd.ko +kernel/drivers/usb/host/ehci-pci.ko +kernel/drivers/usb/host/ehci-platform.ko +kernel/drivers/usb/host/ohci-hcd.ko +kernel/drivers/usb/host/ohci-platform.ko +kernel/drivers/usb/common/usb-common.ko +kernel/drivers/usb/core/usbcore.ko +kernel/drivers/usb/dwc3/dwc3.ko +kernel/drivers/usb/dwc3/dwc3-pci.ko +kernel/drivers/usb/dwc3/dwc3-haps.ko +kernel/drivers/usb/dwc3/dwc3-of-simple.ko +kernel/drivers/usb/mon/usbmon.ko +kernel/drivers/usb/storage/usb-storage.ko +kernel/drivers/usb/gadget/udc/udc-core.ko +kernel/drivers/input/mousedev.ko +kernel/drivers/rtc/rtc-ls2x.ko +kernel/drivers/rtc/rtc-sd3078.ko +kernel/drivers/thermal/ls2k_thermal.ko +kernel/drivers/watchdog/watchdog.ko +kernel/drivers/watchdog/loongson2_wdt.ko +kernel/drivers/hid/hid.ko +kernel/drivers/hid/hid-generic.ko +kernel/drivers/hid/hid-multitouch.ko +kernel/drivers/hid/usbhid/usbhid.ko +kernel/drivers/hid/usbhid/usbkbd.ko +kernel/drivers/hid/usbhid/usbmouse.ko +kernel/net/netlink/netlink_diag.ko +kernel/net/ipv4/inet_diag.ko +kernel/net/ipv4/tcp_diag.ko +kernel/net/ipv4/udp_diag.ko +kernel/net/xfrm/xfrm_algo.ko +kernel/net/xfrm/xfrm_user.ko +kernel/net/wireless/cfg80211.ko +kernel/net/key/af_key.ko +kernel/net/mac80211/mac80211.ko +kernel/net/rfkill/rfkill.ko diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.softdep b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.softdep new file mode 100644 index 00000000..5554ccca --- /dev/null +++ b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.softdep @@ -0,0 +1 @@ +# Soft dependencies extracted from modules themselves. diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.symbols b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.symbols new file mode 100644 index 00000000..c2c638fb --- /dev/null +++ b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.symbols @@ -0,0 +1,900 @@ +# Aliases for symbols, used by symbol_request(). +alias symbol:fat_build_inode fat +alias symbol:ieee80211_chandef_to_operating_class cfg80211 +alias symbol:scsi_add_device scsi_mod +alias symbol:usb_phy_roothub_suspend usbcore +alias symbol:rt2x00mac_get_stats rt2x00lib +alias symbol:stmmac_dvr_probe stmmac +alias symbol:ieee80211_get_mesh_hdrlen cfg80211 +alias symbol:scsi_dev_info_list_add_keyed scsi_mod +alias symbol:rt2x00mac_set_tim rt2x00lib +alias symbol:usb_phy_roothub_init usbcore +alias symbol:usb_speed_string usb_common +alias symbol:usb_gadget_set_selfpowered udc_core +alias symbol:ieee80211_remain_on_channel_expired mac80211 +alias symbol:usb_initialize_gadget udc_core +alias symbol:hid_compare_device_paths hid +alias symbol:fat_dir_empty fat +alias symbol:usb_get_dr_mode usb_common +alias symbol:rt2800_write_tx_data rt2800lib +alias symbol:usb_of_get_interface_node usbcore +alias symbol:ieee80211_get_vht_max_nss cfg80211 +alias symbol:usb_hcd_is_primary_hcd usbcore +alias symbol:usb_unlink_urb usbcore +alias symbol:fat_free_clusters fat +alias symbol:ieee80211_chswitch_done mac80211 +alias symbol:usb_get_status usbcore +alias symbol:scsi_print_command scsi_mod +alias symbol:hid_alloc_report_buf hid +alias symbol:ieee80211_wake_queues mac80211 +alias symbol:cfg80211_rx_unexpected_4addr_frame cfg80211 +alias symbol:phylink_ethtool_ksettings_get phylink +alias symbol:cfg80211_get_station cfg80211 +alias symbol:rt2x00lib_probe_dev rt2x00lib +alias symbol:scsi_ioctl_block_when_processing_errors scsi_mod +alias symbol:usb_get_descriptor usbcore +alias symbol:wiphy_rfkill_start_polling cfg80211 +alias symbol:phylink_ethtool_get_eee phylink +alias symbol:usb_enable_autosuspend usbcore +alias symbol:scsi_is_host_device scsi_mod +alias symbol:cfg80211_chandef_usable cfg80211 +alias symbol:inet_diag_unregister inet_diag +alias symbol:xfrm_aalg_get_byidx xfrm_algo +alias symbol:xfrm_ealg_get_byidx xfrm_algo +alias symbol:usb_queue_reset_device usbcore +alias symbol:phylink_helper_basex_speed phylink +alias symbol:usb_stor_clear_halt usb_storage +alias symbol:usb_urb_ep_type_check usbcore +alias symbol:cfg80211_check_combinations cfg80211 +alias symbol:ieee80211_beacon_get_template mac80211 +alias symbol:hid_debug hid +alias symbol:rt2800_get_survey rt2800lib +alias symbol:usb_control_msg usbcore +alias symbol:usb_debug_root usb_common +alias symbol:cfg80211_unregister_wdev cfg80211 +alias symbol:ieee80211_report_low_ack mac80211 +alias symbol:usb_ep_disable udc_core +alias symbol:usb_interrupt_msg usbcore +alias symbol:rt2x00queue_for_each_entry rt2x00lib +alias symbol:usb_disable_lpm usbcore +alias symbol:usb_hcd_platform_shutdown usbcore +alias symbol:phylink_speed_up phylink +alias symbol:cfg80211_assoc_timeout cfg80211 +alias symbol:rt2x00lib_dmadone rt2x00lib +alias symbol:rt2800_write_beacon rt2800lib +alias symbol:usb_hub_clear_tt_buffer usbcore +alias symbol:rt2800_sta_add rt2800lib +alias symbol:gf128mul_x8_ble gf128mul +alias symbol:usb_sg_cancel usbcore +alias symbol:ieee80211_sta_register_airtime mac80211 +alias symbol:stmmac_get_platform_resources stmmac_platform +alias symbol:ieee80211_send_bar mac80211 +alias symbol:crypto_aes_sbox libaes +alias symbol:sdev_evt_send scsi_mod +alias symbol:cfg80211_ready_on_channel cfg80211 +alias symbol:ieee80211_restart_hw mac80211 +alias symbol:cfg80211_calculate_bitrate cfg80211 +alias symbol:cfg80211_port_authorized cfg80211 +alias symbol:usb_phy_roothub_power_off usbcore +alias symbol:rate_control_set_rates mac80211 +alias symbol:ohci_init_driver ohci_hcd +alias symbol:ehci_setup ehci_hcd +alias symbol:__scsi_device_lookup scsi_mod +alias symbol:rfkill_set_states rfkill +alias symbol:phylink_destroy phylink +alias symbol:scsi_dma_map scsi_mod +alias symbol:cfg80211_cqm_beacon_loss_notify cfg80211 +alias symbol:fat_detach fat +alias symbol:rt2x00usb_probe rt2x00usb +alias symbol:usb_reset_endpoint usbcore +alias symbol:usb_deregister usbcore +alias symbol:ieee80211_beacon_update_cntdwn mac80211 +alias symbol:rt2800_config_pairwise_key rt2800lib +alias symbol:cfg80211_chandef_dfs_required cfg80211 +alias symbol:usb_wakeup_notification usbcore +alias symbol:usb_free_urb usbcore +alias symbol:usb_phy_roothub_exit usbcore +alias symbol:cfg80211_mgmt_tx_status cfg80211 +alias symbol:scsi_is_sdev_device scsi_mod +alias symbol:scsi_eh_restore_cmnd scsi_mod +alias symbol:usb_hcd_pci_remove usbcore +alias symbol:xfrm_aalg_get_byid xfrm_algo +alias symbol:wiphy_rfkill_stop_polling cfg80211 +alias symbol:rt2x00mac_rfkill_poll rt2x00lib +alias symbol:rt2x00mac_get_ringparam rt2x00lib +alias symbol:ieee80211_gtk_rekey_notify mac80211 +alias symbol:fat_getattr fat +alias symbol:ieee80211_calc_tx_airtime mac80211 +alias symbol:rt2800_wait_csr_ready rt2800lib +alias symbol:usb_unanchor_urb usbcore +alias symbol:hid_disconnect hid +alias symbol:cfg80211_vendor_cmd_get_sender cfg80211 +alias symbol:usb_gadget_vbus_disconnect udc_core +alias symbol:ieee80211_bss_get_elem cfg80211 +alias symbol:ieee80211_csa_finish mac80211 +alias symbol:rt2800_watchdog rt2800lib +alias symbol:usb_get_hcd usbcore +alias symbol:fat_flush_inodes fat +alias symbol:hid_quirks_exit hid +alias symbol:ieee80211_get_response_rate cfg80211 +alias symbol:usb_submit_urb usbcore +alias symbol:rt2800_mcu_request rt2800lib +alias symbol:ieee80211_radar_detected mac80211 +alias symbol:usb_remove_hcd usbcore +alias symbol:phylink_mii_c45_pcs_get_state phylink +alias symbol:usb_alloc_coherent usbcore +alias symbol:ieee80211_send_eosp_nullfunc mac80211 +alias symbol:ieee80211_get_key_rx_seq mac80211 +alias symbol:ieee80211_get_hdrlen_from_skb cfg80211 +alias symbol:scsi_get_host_dev scsi_mod +alias symbol:usb_stor_disconnect usb_storage +alias symbol:ieee80211_beacon_loss mac80211 +alias symbol:phylink_ethtool_get_pauseparam phylink +alias symbol:rt2800_efuse_detect rt2800lib +alias symbol:usb_bulk_msg usbcore +alias symbol:ieee80211_get_fils_discovery_tmpl mac80211 +alias symbol:xfrm_count_pfkey_enc_supported xfrm_algo +alias symbol:scsi_eh_prep_cmnd scsi_mod +alias symbol:gf128mul_4k_lle gf128mul +alias symbol:usb_create_shared_hcd usbcore +alias symbol:xfrm_msg_min xfrm_user +alias symbol:watchdog_init_timeout watchdog +alias symbol:rt2800_wait_wpdma_ready rt2800lib +alias symbol:hid_input_report hid +alias symbol:ieee80211_sta_ps_transition mac80211 +alias symbol:scsi_dev_info_add_list scsi_mod +alias symbol:scsi_device_get scsi_mod +alias symbol:usb_hcd_map_urb_for_dma usbcore +alias symbol:rfkill_get_led_trigger_name rfkill +alias symbol:ieee80211_cqm_rssi_notify mac80211 +alias symbol:hidinput_connect hid +alias symbol:rt2x00lib_set_mac_address rt2x00lib +alias symbol:zpool_unregister_driver zpool +alias symbol:hidinput_disconnect hid +alias symbol:cfg80211_ft_event cfg80211 +alias symbol:scsi_vpd_tpg_id scsi_mod +alias symbol:usb_autopm_put_interface_async usbcore +alias symbol:usb_store_new_id usbcore +alias symbol:usb_hcd_end_port_resume usbcore +alias symbol:usb_string usbcore +alias symbol:__scsi_add_device scsi_mod +alias symbol:usb_unregister_notify usbcore +alias symbol:__starget_for_each_device scsi_mod +alias symbol:rt2x00mac_get_antenna rt2x00lib +alias symbol:cfg80211_sched_scan_stopped_rtnl cfg80211 +alias symbol:stmmac_bus_clks_config stmmac +alias symbol:usb_anchor_resume_wakeups usbcore +alias symbol:ehci_resume ehci_hcd +alias symbol:ieee80211_request_smps mac80211 +alias symbol:rt2x00mac_conf_tx rt2x00lib +alias symbol:gf128mul_4k_bbe gf128mul +alias symbol:ieee80211_nullfunc_get mac80211 +alias symbol:scsi_rescan_device scsi_mod +alias symbol:usb_autopm_put_interface usbcore +alias symbol:reg_query_regdb_wmm cfg80211 +alias symbol:rt2x00usb_suspend rt2x00usb +alias symbol:rt2800_config_filter rt2800lib +alias symbol:scsi_kunmap_atomic_sg scsi_mod +alias symbol:scsi_free_host_dev scsi_mod +alias symbol:phylink_set_port_modes phylink +alias symbol:usb_register_driver usbcore +alias symbol:gf128mul_init_64k_bbe gf128mul +alias symbol:usb_unlink_anchored_urbs usbcore +alias symbol:ieee80211_wake_queue mac80211 +alias symbol:hid_hw_stop hid +alias symbol:cfg80211_unlink_bss cfg80211 +alias symbol:ieee80211_get_tx_rates mac80211 +alias symbol:rt2x00mac_remove_interface rt2x00lib +alias symbol:rt2800_check_firmware rt2800lib +alias symbol:hid_bus_type hid +alias symbol:scsi_bios_ptable scsi_mod +alias symbol:usb_lock_device_for_reset usbcore +alias symbol:devm_watchdog_register_device watchdog +alias symbol:usb_get_urb usbcore +alias symbol:usb_wait_anchor_empty_timeout usbcore +alias symbol:phylink_create phylink +alias symbol:scsi_host_complete_all_commands scsi_mod +alias symbol:ieee80211_nan_func_terminated mac80211 +alias symbol:usb_scuttle_anchored_urbs usbcore +alias symbol:cfg80211_rx_spurious_frame cfg80211 +alias symbol:hid_match_device hid +alias symbol:hid_output_report hid +alias symbol:rfkill_set_led_trigger_name rfkill +alias symbol:of_usb_update_otg_caps usb_common +alias symbol:scsi_autopm_get_device scsi_mod +alias symbol:usb_altnum_to_altsetting usbcore +alias symbol:ieee80211_find_sta mac80211 +alias symbol:cfg80211_control_port_tx_status cfg80211 +alias symbol:usb_add_gadget_udc_release udc_core +alias symbol:cfg80211_abandon_assoc cfg80211 +alias symbol:ieee80211_tx_status_ext mac80211 +alias symbol:rt2x00mac_start rt2x00lib +alias symbol:arc4_crypt libarc4 +alias symbol:rfkill_blocked rfkill +alias symbol:usb_find_common_endpoints usbcore +alias symbol:aes_expandkey libaes +alias symbol:cfg80211_remain_on_channel_expired cfg80211 +alias symbol:ieee80211_reserve_tid mac80211 +alias symbol:ieee80211_connection_loss mac80211 +alias symbol:usb_register_dev usbcore +alias symbol:ohci_suspend ohci_hcd +alias symbol:watchdog_set_last_hw_keepalive watchdog +alias symbol:scsi_device_quiesce scsi_mod +alias symbol:usb_gadget_vbus_connect udc_core +alias symbol:ieee80211_get_buffered_bc mac80211 +alias symbol:crc_ccitt_false crc_ccitt +alias symbol:usb_hid_driver usbhid +alias symbol:ieee80211_data_to_8023_exthdr cfg80211 +alias symbol:phylink_mii_c22_pcs_set_advertisement phylink +alias symbol:rt2x00mac_config rt2x00lib +alias symbol:ieee80211_sta_eosp mac80211 +alias symbol:usb_ep_clear_halt udc_core +alias symbol:hid_report_raw_event hid +alias symbol:rfkill_pause_polling rfkill +alias symbol:wiphy_read_of_freq_limits cfg80211 +alias symbol:regulatory_set_wiphy_regd cfg80211 +alias symbol:usb_of_get_companion_dev usb_common +alias symbol:ieee80211_rts_get mac80211 +alias symbol:scsi_dev_info_list_del_keyed scsi_mod +alias symbol:cfg80211_nan_match cfg80211 +alias symbol:cfg80211_gtk_rekey_notify cfg80211 +alias symbol:usb_ep_dequeue udc_core +alias symbol:xfrm_count_pfkey_auth_supported xfrm_algo +alias symbol:usb_hcd_pci_probe usbcore +alias symbol:ohci_restart ohci_hcd +alias symbol:usb_driver_set_configuration usbcore +alias symbol:usb_get_current_frame_number usbcore +alias symbol:ieee80211_scan_completed mac80211 +alias symbol:usb_gadget_clear_selfpowered udc_core +alias symbol:scsi_host_block scsi_mod +alias symbol:cfg80211_cac_event cfg80211 +alias symbol:rt2x00queue_unmap_skb rt2x00lib +alias symbol:scsi_flush_work scsi_mod +alias symbol:scsi_remove_host scsi_mod +alias symbol:rt2800_enable_radio rt2800lib +alias symbol:usb_stor_bulk_transfer_buf usb_storage +alias symbol:scsi_host_busy scsi_mod +alias symbol:ieee80211_tx_dequeue mac80211 +alias symbol:ieee80211_sched_scan_results mac80211 +alias symbol:xfrma_policy xfrm_user +alias symbol:__usb_create_hcd usbcore +alias symbol:cfg80211_sched_scan_stopped cfg80211 +alias symbol:phylink_ethtool_set_pauseparam phylink +alias symbol:usb_driver_release_interface usbcore +alias symbol:ieee80211_channel_to_freq_khz cfg80211 +alias symbol:scsi_report_opcode scsi_mod +alias symbol:spi_nor_scan spi_nor +alias symbol:scsi_target_block scsi_mod +alias symbol:usb_gadget_unmap_request udc_core +alias symbol:phylink_of_phy_connect phylink +alias symbol:scsi_command_normalize_sense scsi_mod +alias symbol:ieee80211_rate_control_register mac80211 +alias symbol:usb_control_msg_send usbcore +alias symbol:usb_hcds_loaded usbcore +alias symbol:spi_nor_restore spi_nor +alias symbol:rt2800_get_tsf rt2800lib +alias symbol:ieee80211_tx_prepare_skb mac80211 +alias symbol:usb_stor_probe2 usb_storage +alias symbol:ieee80211_rx_irqsafe mac80211 +alias symbol:ieee80211_unregister_hw mac80211 +alias symbol:ieee80211_stop_tx_ba_cb_irqsafe mac80211 +alias symbol:ieee80211_proberesp_get mac80211 +alias symbol:inet_diag_register inet_diag +alias symbol:__regmap_init_i2c regmap_i2c +alias symbol:scsi_target_quiesce scsi_mod +alias symbol:usb_stor_transparent_scsi_command usb_storage +alias symbol:reg_initiator_name cfg80211 +alias symbol:inet_diag_find_one_icsk inet_diag +alias symbol:rt2x00usb_register_read_async rt2x00usb +alias symbol:ieee80211_update_mu_groups mac80211 +alias symbol:usb_hc_died usbcore +alias symbol:ieee80211_get_unsol_bcast_probe_resp_tmpl mac80211 +alias symbol:usb_kill_urb usbcore +alias symbol:ieee80211_disable_rssi_reports mac80211 +alias symbol:stmmac_set_mac_addr stmmac +alias symbol:usb_find_interface usbcore +alias symbol:aes_decrypt libaes +alias symbol:scsi_queue_work scsi_mod +alias symbol:hid_parse_report hid +alias symbol:ieee80211_tx_rate_update mac80211 +alias symbol:usb_stor_probe1 usb_storage +alias symbol:inet_diag_msg_attrs_fill inet_diag +alias symbol:hidinput_report_event hid +alias symbol:ieee80211_tkip_add_iv mac80211 +alias symbol:usb_get_maximum_speed usb_common +alias symbol:scsi_remove_device scsi_mod +alias symbol:usb_del_gadget udc_core +alias symbol:usb_stor_access_xfer_buf usb_storage +alias symbol:rt2800_disable_radio rt2800lib +alias symbol:rt2x00queue_start_queues rt2x00lib +alias symbol:rt2x00mac_set_key rt2x00lib +alias symbol:usb_gadget_ep_match_desc udc_core +alias symbol:__hid_request hid +alias symbol:cfg80211_get_p2p_attr cfg80211 +alias symbol:ieee80211_iter_chan_contexts_atomic mac80211 +alias symbol:ieee80211_operating_class_to_band cfg80211 +alias symbol:usb_stor_ctrl_transfer usb_storage +alias symbol:ieee80211_tx_status_irqsafe mac80211 +alias symbol:ieee80211_calc_rx_airtime mac80211 +alias symbol:scsi_print_sense scsi_mod +alias symbol:fat_search_long fat +alias symbol:usb_stor_resume usb_storage +alias symbol:scsi_kmap_atomic_sg scsi_mod +alias symbol:usb_anchor_empty usbcore +alias symbol:cfg80211_sta_opmode_change_notify cfg80211 +alias symbol:hid_hw_start hid +alias symbol:usb_unpoison_anchored_urbs usbcore +alias symbol:ieee80211_free_hw mac80211 +alias symbol:hid_ignore hid +alias symbol:stmmac_suspend stmmac +alias symbol:rfkill_alloc rfkill +alias symbol:scsi_eh_ready_devs scsi_mod +alias symbol:usb_poison_anchored_urbs usbcore +alias symbol:usb_control_msg_recv usbcore +alias symbol:ieee80211_tx_status_8023 mac80211 +alias symbol:rt2800_reset_tuner rt2800lib +alias symbol:scsi_dev_info_remove_list scsi_mod +alias symbol:usb_disabled usbcore +alias symbol:rfkill_init_sw_state rfkill +alias symbol:usb_choose_configuration usbcore +alias symbol:scsi_test_unit_ready scsi_mod +alias symbol:ieee80211_txq_airtime_check mac80211 +alias symbol:phylink_disconnect_phy phylink +alias symbol:cfg80211_iftype_allowed cfg80211 +alias symbol:of_usb_host_tpl_support usb_common +alias symbol:fat_sync_inode fat +alias symbol:rfkill_set_sw_state rfkill +alias symbol:ohci_resume ohci_hcd +alias symbol:mii_ethtool_sset mii +alias symbol:cfg80211_find_vendor_elem cfg80211 +alias symbol:rt2800_txdone_entry rt2800lib +alias symbol:usb_ep_type_string usb_common +alias symbol:usb_alloc_urb usbcore +alias symbol:usb_stor_reset_resume usb_storage +alias symbol:xfrm_ealg_get_byname xfrm_algo +alias symbol:ieee80211_ctstoself_get mac80211 +alias symbol:usb_hub_claim_port usbcore +alias symbol:xfrm_ealg_get_byid xfrm_algo +alias symbol:cfg80211_bss_iter cfg80211 +alias symbol:usb_put_hcd usbcore +alias symbol:usb_gadget_wakeup udc_core +alias symbol:usb_root_hub_lost_power usbcore +alias symbol:usb_hcd_setup_local_mem usbcore +alias symbol:phylink_connect_phy phylink +alias symbol:watchdog_set_restart_priority watchdog +alias symbol:cfg80211_iter_combinations cfg80211 +alias symbol:scsi_is_target_device scsi_mod +alias symbol:sdev_disable_disk_events scsi_mod +alias symbol:usb_gadget_deactivate udc_core +alias symbol:fat_time_unix2fat fat +alias symbol:ieee80211_ie_split_ric cfg80211 +alias symbol:rt2x00usb_vendor_request rt2x00usb +alias symbol:cfg80211_is_element_inherited cfg80211 +alias symbol:usb_of_get_device_node usbcore +alias symbol:scsi_host_get scsi_mod +alias symbol:ieee80211_radiotap_iterator_next cfg80211 +alias symbol:cfg80211_ch_switch_notify cfg80211 +alias symbol:ieee80211_set_key_rx_seq mac80211 +alias symbol:scmd_printk scsi_mod +alias symbol:scsi_report_device_reset scsi_mod +alias symbol:phylink_ethtool_nway_reset phylink +alias symbol:cfg80211_check_station_change cfg80211 +alias symbol:cfg80211_chandef_compatible cfg80211 +alias symbol:ieee80211_txq_may_transmit mac80211 +alias symbol:usb_sg_wait usbcore +alias symbol:cfg80211_classify8021d cfg80211 +alias symbol:rt2800_config_shared_key rt2800lib +alias symbol:ieee80211_stop_tx_ba_session mac80211 +alias symbol:ieee80211_tdls_oper_request mac80211 +alias symbol:mii_check_gmii_support mii +alias symbol:usb_hub_find_child usbcore +alias symbol:hid_add_device hid +alias symbol:cfg80211_report_obss_beacon_khz cfg80211 +alias symbol:usb_wakeup_enabled_descendants usbcore +alias symbol:ieee80211_beacon_cntdwn_is_complete mac80211 +alias symbol:gadget_find_ep_by_name udc_core +alias symbol:rt2x00usb_disconnect rt2x00usb +alias symbol:rt2800_link_stats rt2800lib +alias symbol:hid_hw_open hid +alias symbol:__ieee80211_schedule_txq mac80211 +alias symbol:cfg80211_bss_flush cfg80211 +alias symbol:rt2x00lib_dmastart rt2x00lib +alias symbol:usb_enable_ltm usbcore +alias symbol:wiphy_apply_custom_regulatory cfg80211 +alias symbol:fat_attach fat +alias symbol:crc_ccitt crc_ccitt +alias symbol:gf128mul_init_4k_lle gf128mul +alias symbol:ieee80211_rx_list mac80211 +alias symbol:regulatory_pre_cac_allowed cfg80211 +alias symbol:ieee80211_gtk_rekey_add mac80211 +alias symbol:usb_ep0_reinit usbcore +alias symbol:ieee80211_remove_key mac80211 +alias symbol:regulatory_set_wiphy_regd_sync_rtnl cfg80211 +alias symbol:rt2800_txdone rt2800lib +alias symbol:ehci_reset ehci_hcd +alias symbol:rt2x00queue_pause_queue rt2x00lib +alias symbol:cfg80211_connect_done cfg80211 +alias symbol:usb_add_gadget_udc udc_core +alias symbol:phylink_speed_down phylink +alias symbol:inet_diag_dump_one_icsk inet_diag +alias symbol:usb_find_alt_setting usbcore +alias symbol:rt2x00usb_resume rt2x00usb +alias symbol:hid_check_keys_pressed hid +alias symbol:__cfg80211_send_event_skb cfg80211 +alias symbol:ieee80211_get_tkip_p1k_iv mac80211 +alias symbol:rfkill_register rfkill +alias symbol:watchdog_register_device watchdog +alias symbol:zpool_has_pool zpool +alias symbol:usb_enable_lpm usbcore +alias symbol:usb_pipe_type_check usbcore +alias symbol:ieee80211_queue_delayed_work mac80211 +alias symbol:rt2800_config_intf rt2800lib +alias symbol:usb_find_common_endpoints_reverse usbcore +alias symbol:fat_get_dotdot_entry fat +alias symbol:rt2x00mac_set_antenna rt2x00lib +alias symbol:ieee80211_alloc_hw_nm mac80211 +alias symbol:ieee80211_beacon_get_tim mac80211 +alias symbol:xfrm_calg_get_byid xfrm_algo +alias symbol:inet_diag_dump_icsk inet_diag +alias symbol:usb_gadget_udc_reset udc_core +alias symbol:ieee80211_get_tkip_rx_p1k mac80211 +alias symbol:hid_quirks_init hid +alias symbol:wiphy_register cfg80211 +alias symbol:cfg80211_merge_profile cfg80211 +alias symbol:usb_poison_urb usbcore +alias symbol:rt2x00usb_flush_queue rt2x00usb +alias symbol:scsicam_bios_param scsi_mod +alias symbol:rt2x00queue_stop_queue rt2x00lib +alias symbol:ieee80211_s1g_channel_width cfg80211 +alias symbol:scsi_device_lookup scsi_mod +alias symbol:usb_get_intf usbcore +alias symbol:ieee80211_register_hw mac80211 +alias symbol:scsi_internal_device_unblock_nowait scsi_mod +alias symbol:cfg80211_cqm_pktloss_notify cfg80211 +alias symbol:ieee80211_manage_rx_ba_offl mac80211 +alias symbol:ieee80211_stop_rx_ba_session mac80211 +alias symbol:xfrm_calg_get_byname xfrm_algo +alias symbol:ieee80211_probereq_get mac80211 +alias symbol:ieee80211_sta_block_awake mac80211 +alias symbol:usb_set_interface usbcore +alias symbol:fat_fill_super fat +alias symbol:usb_gadget_vbus_draw udc_core +alias symbol:fat_truncate_time fat +alias symbol:ieee80211_stop_queues mac80211 +alias symbol:usb_clear_halt usbcore +alias symbol:hidraw_connect hid +alias symbol:usb_driver_claim_interface usbcore +alias symbol:rt2800_conf_tx rt2800lib +alias symbol:scsi_dma_unmap scsi_mod +alias symbol:rt2x00mac_stop rt2x00lib +alias symbol:scsi_scan_host scsi_mod +alias symbol:scsi_bus_type scsi_mod +alias symbol:cfg80211_radar_event cfg80211 +alias symbol:xfrm_aalg_get_byname xfrm_algo +alias symbol:rt2800_config rt2800lib +alias symbol:phylink_mii_c22_pcs_get_state phylink +alias symbol:scsi_print_sense_hdr scsi_mod +alias symbol:hid_connect hid +alias symbol:scsi_free_sgtables scsi_mod +alias symbol:ieee80211_get_tkip_p2k mac80211 +alias symbol:usb_acpi_power_manageable usbcore +alias symbol:scsi_autopm_put_device scsi_mod +alias symbol:ieee80211_iterate_active_interfaces_rtnl mac80211 +alias symbol:scsi_report_bus_reset scsi_mod +alias symbol:scsi_device_set_state scsi_mod +alias symbol:cfg80211_notify_new_peer_candidate cfg80211 +alias symbol:inet_sk_diag_fill inet_diag +alias symbol:ieee80211_resume_disconnect mac80211 +alias symbol:mii_nway_restart mii +alias symbol:rt2x00mac_reconfig_complete rt2x00lib +alias symbol:ohci_setup ohci_hcd +alias symbol:rt2800_read_eeprom_efuse rt2800lib +alias symbol:cfg80211_get_bss cfg80211 +alias symbol:mii_ethtool_set_link_ksettings mii +alias symbol:hid_register_report hid +alias symbol:phylink_ethtool_set_wol phylink +alias symbol:ieee80211_iterate_interfaces mac80211 +alias symbol:scsi_device_resume scsi_mod +alias symbol:scsi_eh_get_sense scsi_mod +alias symbol:ieee80211_mark_rx_ba_filtered_frames mac80211 +alias symbol:stmmac_probe_config_dt stmmac_platform +alias symbol:usb_put_dev usbcore +alias symbol:ieee80211_txq_schedule_start mac80211 +alias symbol:phylink_mii_c22_pcs_config phylink +alias symbol:ieee80211_sta_pspoll mac80211 +alias symbol:usb_bus_idr usbcore +alias symbol:cfg80211_report_wowlan_wakeup cfg80211 +alias symbol:rt2800_pre_reset_hw rt2800lib +alias symbol:hid_open_report hid +alias symbol:usb_set_configuration usbcore +alias symbol:ieee80211_rts_duration mac80211 +alias symbol:usb_stor_Bulk_transport usb_storage +alias symbol:arc4_setkey libarc4 +alias symbol:usb_kill_anchored_urbs usbcore +alias symbol:usb_ep_fifo_flush udc_core +alias symbol:usb_hcd_unlink_urb_from_ep usbcore +alias symbol:wiphy_rfkill_set_hw_state cfg80211 +alias symbol:stmmac_init_tstamp_counter stmmac +alias symbol:hid_lookup_quirk hid +alias symbol:scsi_mode_select scsi_mod +alias symbol:ehci_init_driver ehci_hcd +alias symbol:ieee80211_generic_frame_duration mac80211 +alias symbol:phylink_ethtool_ksettings_set phylink +alias symbol:rt2x00lib_txdone_nomatch rt2x00lib +alias symbol:cfg80211_rx_assoc_resp cfg80211 +alias symbol:ieee80211_parse_p2p_noa mac80211 +alias symbol:rt2x00lib_suspend rt2x00lib +alias symbol:usb_register_device_driver usbcore +alias symbol:rfkill_destroy rfkill +alias symbol:scsi_unblock_requests scsi_mod +alias symbol:usb_for_each_dev usbcore +alias symbol:ieee80211_ready_on_channel mac80211 +alias symbol:rt2800_sta_remove rt2800lib +alias symbol:rt2x00queue_start_queue rt2x00lib +alias symbol:usb_gadget_connect udc_core +alias symbol:ieee80211_rate_control_unregister mac80211 +alias symbol:cfg80211_cqm_rssi_notify cfg80211 +alias symbol:stmmac_remove_config_dt stmmac_platform +alias symbol:__devm_regmap_init_i2c regmap_i2c +alias symbol:cfg80211_roamed cfg80211 +alias symbol:rt2x00mac_configure_filter rt2x00lib +alias symbol:cfg80211_get_drvinfo cfg80211 +alias symbol:cfg80211_scan_done cfg80211 +alias symbol:usb_ep_free_request udc_core +alias symbol:usb_phy_roothub_resume usbcore +alias symbol:hid_setup_resolution_multiplier hid +alias symbol:fat_setattr fat +alias symbol:usb_disable_ltm usbcore +alias symbol:cfg80211_cqm_txe_notify cfg80211 +alias symbol:mii_link_ok mii +alias symbol:usb_get_from_anchor usbcore +alias symbol:cfg80211_inform_bss_data cfg80211 +alias symbol:scsi_check_sense scsi_mod +alias symbol:cfg80211_send_layer2_update cfg80211 +alias symbol:usb_alloc_streams usbcore +alias symbol:rt2x00mac_sw_scan_start rt2x00lib +alias symbol:sdev_evt_alloc scsi_mod +alias symbol:cfg80211_tx_mlme_mgmt cfg80211 +alias symbol:scsi_ioctl scsi_mod +alias symbol:usb_register_notify usbcore +alias symbol:usb_ep_alloc_request udc_core +alias symbol:usb_match_one_id usbcore +alias symbol:cfg80211_conn_failed cfg80211 +alias symbol:rt2x00queue_map_txskb rt2x00lib +alias symbol:__cfg80211_alloc_reply_skb cfg80211 +alias symbol:ieee80211_free_txskb mac80211 +alias symbol:scsi_block_requests scsi_mod +alias symbol:hiddev_hid_event usbhid +alias symbol:cfg80211_nan_func_terminated cfg80211 +alias symbol:hidinput_count_leds hid +alias symbol:rt2x00usb_vendor_request_buff rt2x00usb +alias symbol:usb_calc_bus_time usbcore +alias symbol:rt2x00lib_beacondone rt2x00lib +alias symbol:rt2x00lib_rxdone rt2x00lib +alias symbol:__scsi_init_queue scsi_mod +alias symbol:usb_put_intf usbcore +alias symbol:usb_gadget_unregister_driver udc_core +alias symbol:scsi_change_queue_depth scsi_mod +alias symbol:wiphy_new_nm cfg80211 +alias symbol:xfrm_aead_get_byname xfrm_algo +alias symbol:usb_anchor_suspend_wakeups usbcore +alias symbol:phylink_start phylink +alias symbol:rt2800_gain_calibration rt2800lib +alias symbol:gf128mul_64k_bbe gf128mul +alias symbol:usb_gadget_map_request udc_core +alias symbol:usb_gadget_set_state udc_core +alias symbol:ieee80211_report_wowlan_wakeup mac80211 +alias symbol:ieee80211_mandatory_rates cfg80211 +alias symbol:ehci_suspend ehci_hcd +alias symbol:rt2800_process_rxwi rt2800lib +alias symbol:usb_autopm_get_interface usbcore +alias symbol:scsi_sd_pm_domain scsi_mod +alias symbol:usb_block_urb usbcore +alias symbol:scsi_mode_sense scsi_mod +alias symbol:ehci_hub_control ehci_hcd +alias symbol:usb_deregister_dev usbcore +alias symbol:cfg80211_crit_proto_stopped cfg80211 +alias symbol:rt2800_config_erp rt2800lib +alias symbol:usb_sg_init usbcore +alias symbol:hid_hw_close hid +alias symbol:stmmac_get_mac_addr stmmac +alias symbol:rt2x00lib_pretbtt rt2x00lib +alias symbol:rt2x00lib_txdone rt2x00lib +alias symbol:scsi_host_put scsi_mod +alias symbol:usb_create_hcd usbcore +alias symbol:freq_reg_info cfg80211 +alias symbol:usb_mon_deregister usbcore +alias symbol:wiphy_to_ieee80211_hw mac80211 +alias symbol:usb_gadget_giveback_request udc_core +alias symbol:ieee80211_rx_ba_timer_expired mac80211 +alias symbol:fat_scan fat +alias symbol:rt2800_probe_hw rt2800lib +alias symbol:ieee80211_update_p2p_noa mac80211 +alias symbol:rt2x00queue_stop_queues rt2x00lib +alias symbol:cfg80211_ibss_joined cfg80211 +alias symbol:scsi_host_lookup scsi_mod +alias symbol:ieee80211_find_sta_by_ifaddr mac80211 +alias symbol:rt2800_get_key_seq rt2800lib +alias symbol:usb_acpi_set_power_state usbcore +alias symbol:usb_hcd_irq usbcore +alias symbol:hid_field_extract hid +alias symbol:rt2x00usb_watchdog rt2x00usb +alias symbol:usb_show_dynids usbcore +alias symbol:cfg80211_stop_iface cfg80211 +alias symbol:ieee80211_queue_stopped mac80211 +alias symbol:cfg80211_reg_can_beacon cfg80211 +alias symbol:usb_phy_roothub_power_on usbcore +alias symbol:hidinput_get_led_field hid +alias symbol:ieee80211_sta_set_buffered mac80211 +alias symbol:gf128mul_lle gf128mul +alias symbol:ieee80211_enable_rssi_reports mac80211 +alias symbol:cfg80211_new_sta cfg80211 +alias symbol:ieee80211_next_txq mac80211 +alias symbol:phylink_init_eee phylink +alias symbol:usb_state_string usb_common +alias symbol:aes_encrypt libaes +alias symbol:usb_ep_queue udc_core +alias symbol:zpool_register_driver zpool +alias symbol:rfkill_unregister rfkill +alias symbol:ieee80211_iterate_active_interfaces_atomic mac80211 +alias symbol:usb_stor_set_xfer_buf usb_storage +alias symbol:hid_allocate_device hid +alias symbol:scsi_add_host_with_dma scsi_mod +alias symbol:ieee80211_ap_probereq_get mac80211 +alias symbol:scsi_alloc_sgtables scsi_mod +alias symbol:cfg80211_update_owe_info_event cfg80211 +alias symbol:scsi_eh_finish_cmd scsi_mod +alias symbol:scsi_sanitize_inquiry_string scsi_mod +alias symbol:ieee80211_nan_func_match mac80211 +alias symbol:rt2x00queue_flush_queue rt2x00lib +alias symbol:mdio_xpcs_get_ops pcs_xpcs +alias symbol:fat_add_entries fat +alias symbol:ieee80211_radiotap_iterator_init cfg80211 +alias symbol:phylink_set_pcs phylink +alias symbol:ieee80211_start_tx_ba_cb_irqsafe mac80211 +alias symbol:phylink_stop phylink +alias symbol:usb_autopm_get_interface_async usbcore +alias symbol:__hid_register_driver hid +alias symbol:usb_autopm_get_interface_no_resume usbcore +alias symbol:starget_for_each_device scsi_mod +alias symbol:usb_unlocked_enable_lpm usbcore +alias symbol:usb_bus_idr_lock usbcore +alias symbol:usb_stor_pre_reset usb_storage +alias symbol:scsi_host_unblock scsi_mod +alias symbol:usb_phy_roothub_calibrate usbcore +alias symbol:scsi_partsize scsi_mod +alias symbol:ieee80211_pspoll_get mac80211 +alias symbol:cfg80211_del_sta_sinfo cfg80211 +alias symbol:regulatory_hint cfg80211 +alias symbol:usb_unlocked_disable_lpm usbcore +alias symbol:cfg80211_chandef_valid cfg80211 +alias symbol:ieee80211_cqm_beacon_loss_notify mac80211 +alias symbol:usb_gadget_unmap_request_by_dev udc_core +alias symbol:mii_ethtool_gset mii +alias symbol:cfg80211_put_bss cfg80211 +alias symbol:usb_hcd_giveback_urb usbcore +alias symbol:usb_stor_bulk_srb usb_storage +alias symbol:wiphy_free cfg80211 +alias symbol:hid_set_field hid +alias symbol:rt2x00queue_get_entry rt2x00lib +alias symbol:cfg80211_rx_mlme_mgmt cfg80211 +alias symbol:scsi_set_medium_removal scsi_mod +alias symbol:crypto_it_tab aes_generic +alias symbol:rt2800_txstatus_pending rt2800lib +alias symbol:cdc_parse_cdc_header usbcore +alias symbol:rt2800_rfkill_poll rt2800lib +alias symbol:usb_reset_configuration usbcore +alias symbol:usb_stor_sense_invalidCDB usb_storage +alias symbol:inet_diag_bc_sk inet_diag +alias symbol:ieee80211_get_bssid mac80211 +alias symbol:hidraw_report_event hid +alias symbol:rfc1042_header cfg80211 +alias symbol:ieee80211_tx_status mac80211 +alias symbol:usb_anchor_urb usbcore +alias symbol:hid_snto32 hid +alias symbol:hid_unregister_driver hid +alias symbol:__scsi_device_lookup_by_target scsi_mod +alias symbol:crypto_aes_set_key aes_generic +alias symbol:stmmac_pltfr_remove stmmac_platform +alias symbol:phylink_mii_c22_pcs_an_restart phylink +alias symbol:usb_add_hcd usbcore +alias symbol:cfg80211_sched_scan_results cfg80211 +alias symbol:ieee80211_iter_keys mac80211 +alias symbol:scsi_device_put scsi_mod +alias symbol:scsi_register_interface scsi_mod +alias symbol:usb_hcd_unmap_urb_setup_for_dma usbcore +alias symbol:usb_ep_set_halt udc_core +alias symbol:usb_match_id usbcore +alias symbol:rt2800_load_firmware rt2800lib +alias symbol:usb_del_gadget_udc udc_core +alias symbol:usb_of_has_combined_node usbcore +alias symbol:__fat_fs_error fat +alias symbol:scsi_scan_target scsi_mod +alias symbol:watchdog_unregister_device watchdog +alias symbol:cfg80211_probe_status cfg80211 +alias symbol:fat_alloc_new_dir fat +alias symbol:usb_autopm_put_interface_no_suspend usbcore +alias symbol:__scsi_print_sense scsi_mod +alias symbol:cfg80211_auth_timeout cfg80211 +alias symbol:phylink_ethtool_get_wol phylink +alias symbol:phylink_get_eee_err phylink +alias symbol:scsi_internal_device_block_nowait scsi_mod +alias symbol:rt2x00mac_flush rt2x00lib +alias symbol:cfg80211_ch_switch_started_notify cfg80211 +alias symbol:scsi_eh_flush_done_q scsi_mod +alias symbol:ieee80211_txq_get_depth mac80211 +alias symbol:usb_mon_register usbcore +alias symbol:cfg80211_free_nan_func cfg80211 +alias symbol:usb_stor_control_msg usb_storage +alias symbol:ieee80211_iterate_stations_atomic mac80211 +alias symbol:scsi_target_resume scsi_mod +alias symbol:rt2800_link_tuner rt2800lib +alias symbol:ieee80211_unreserve_tid mac80211 +alias symbol:ohci_hub_control ohci_hcd +alias symbol:scsi_register_driver scsi_mod +alias symbol:usb_otg_state_string usb_common +alias symbol:usb_stor_CB_reset usb_storage +alias symbol:usb_hcd_pci_shutdown usbcore +alias symbol:__scsi_format_command scsi_mod +alias symbol:hidinput_find_field hid +alias symbol:fill_inquiry_response usb_storage +alias symbol:ieee80211_amsdu_to_8023s cfg80211 +alias symbol:hid_destroy_device hid +alias symbol:xfrm_probe_algs xfrm_algo +alias symbol:fat_remove_entries fat +alias symbol:gf128mul_bbe gf128mul +alias symbol:ieee80211_hdrlen cfg80211 +alias symbol:usb_reset_device usbcore +alias symbol:ieee80211_beacon_set_cntdwn mac80211 +alias symbol:cfg80211_chandef_create cfg80211 +alias symbol:sdev_enable_disk_events scsi_mod +alias symbol:cfg80211_rx_mgmt_khz cfg80211 +alias symbol:usb_alloc_dev usbcore +alias symbol:rt2x00usb_clear_entry rt2x00usb +alias symbol:scsi_get_sense_info_fld scsi_mod +alias symbol:ieee80211_start_tx_ba_session mac80211 +alias symbol:cfg80211_tdls_oper_request cfg80211 +alias symbol:scsi_device_lookup_by_target scsi_mod +alias symbol:usb_hcd_pci_pm_ops usbcore +alias symbol:gf128mul_init_4k_bbe gf128mul +alias symbol:ieee80211_ave_rssi mac80211 +alias symbol:usb_ep_set_maxpacket_limit udc_core +alias symbol:cfg80211_shutdown_all_interfaces cfg80211 +alias symbol:cfg80211_michael_mic_failure cfg80211 +alias symbol:cfg80211_reg_can_beacon_relax cfg80211 +alias symbol:rt2800_set_rts_threshold rt2800lib +alias symbol:cfg80211_rx_unprot_mlme_mgmt cfg80211 +alias symbol:rt2x00queue_unpause_queue rt2x00lib +alias symbol:ieee80211_iter_keys_rcu mac80211 +alias symbol:rt2800_get_txwi_rxwi_size rt2800lib +alias symbol:rt2x00usb_vendor_req_buff_lock rt2x00usb +alias symbol:rt2x00usb_kick_queue rt2x00usb +alias symbol:bridge_tunnel_header cfg80211 +alias symbol:cfg80211_sinfo_alloc_tid_stats cfg80211 +alias symbol:rt2x00lib_txdone_noinfo rt2x00lib +alias symbol:usb_stor_Bulk_reset usb_storage +alias symbol:usb_get_dev usbcore +alias symbol:usb_hcd_link_urb_to_ep usbcore +alias symbol:__cfg80211_alloc_event_skb cfg80211 +alias symbol:rt2800_clear_beacon rt2800lib +alias symbol:rt2x00mac_tx_frames_pending rt2x00lib +alias symbol:usb_unpoison_urb usbcore +alias symbol:ieee80211_freq_khz_to_channel cfg80211 +alias symbol:usb_stor_CB_transport usb_storage +alias symbol:scsi_get_device_flags_keyed scsi_mod +alias symbol:usb_phy_roothub_alloc usbcore +alias symbol:usb_phy_roothub_set_mode usbcore +alias symbol:usb_init_urb usbcore +alias symbol:ieee80211_stop_queue mac80211 +alias symbol:cfg80211_pmksa_candidate_notify cfg80211 +alias symbol:ehci_adjust_port_wakeup_flags ehci_hcd +alias symbol:rfkill_resume_polling rfkill +alias symbol:ieee80211_ctstoself_duration mac80211 +alias symbol:phylink_mii_ioctl phylink +alias symbol:usb_stor_bulk_transfer_sg usb_storage +alias symbol:usb_ep_set_wedge udc_core +alias symbol:usb_hcd_start_port_resume usbcore +alias symbol:cfg80211_disconnected cfg80211 +alias symbol:rfkill_find_type rfkill +alias symbol:__scsi_execute scsi_mod +alias symbol:usb_ifnum_to_if usbcore +alias symbol:scsi_host_alloc scsi_mod +alias symbol:scsi_vpd_lun_id scsi_mod +alias symbol:usb_udc_vbus_handler udc_core +alias symbol:usb_get_gadget_udc_name udc_core +alias symbol:__usb_get_extra_descriptor usbcore +alias symbol:rfkill_set_hw_state rfkill +alias symbol:scsi_get_vpd_page scsi_mod +alias symbol:usb_intf_get_dma_device usbcore +alias symbol:cfg80211_tx_mgmt_expired cfg80211 +alias symbol:ohci_hub_status_data ohci_hcd +alias symbol:crypto_ft_tab aes_generic +alias symbol:usb_stor_adjust_quirks usb_storage +alias symbol:__scsi_iterate_devices scsi_mod +alias symbol:scsi_block_when_processing_errors scsi_mod +alias symbol:cfg80211_vendor_cmd_reply cfg80211 +alias symbol:rt2x00mac_bss_info_changed rt2x00lib +alias symbol:usb_hcd_resume_root_hub usbcore +alias symbol:sdev_prefix_printk scsi_mod +alias symbol:rt2800_config_ant rt2800lib +alias symbol:sdev_evt_send_simple scsi_mod +alias symbol:wiphy_unregister cfg80211 +alias symbol:scsi_print_result scsi_mod +alias symbol:ieee80211_rx_napi mac80211 +alias symbol:usb_hcd_check_unlink_urb usbcore +alias symbol:rt2800_disable_wpdma rt2800lib +alias symbol:ieee80211_sta_uapsd_trigger mac80211 +alias symbol:of_usb_get_dr_mode_by_phy usb_common +alias symbol:rt2800_vco_calibration rt2800lib +alias symbol:ieee80211_sched_scan_stopped mac80211 +alias symbol:generic_mii_ioctl mii +alias symbol:crc_ccitt_false_table crc_ccitt +alias symbol:usb_set_device_state usbcore +alias symbol:cfg80211_external_auth_request cfg80211 +alias symbol:usb_gadget_map_request_by_dev udc_core +alias symbol:usb_hcd_poll_rh_status usbcore +alias symbol:ieee80211_get_channel_khz cfg80211 +alias symbol:phylink_ethtool_set_eee phylink +alias symbol:rt2800_txdone_nostatus rt2800lib +alias symbol:cfg80211_inform_bss_frame_data cfg80211 +alias symbol:mii_check_media mii +alias symbol:rt2x00mac_tx rt2x00lib +alias symbol:usb_add_gadget udc_core +alias symbol:mii_check_link mii +alias symbol:scsi_schedule_eh scsi_mod +alias symbol:ehci_cf_port_reset_rwsem usbcore +alias symbol:inet_diag_msg_common_fill inet_diag +alias symbol:usb_free_coherent usbcore +alias symbol:rt2x00usb_regbusy_read rt2x00usb +alias symbol:usb_ep_fifo_status udc_core +alias symbol:phylink_mac_change phylink +alias symbol:usb_stor_host_template_init usb_storage +alias symbol:hidraw_disconnect hid +alias symbol:usb_ep_enable udc_core +alias symbol:hidinput_calc_abs_res hid +alias symbol:scsi_remove_target scsi_mod +alias symbol:usb_hcd_unmap_urb_for_dma usbcore +alias symbol:usb_disable_autosuspend usbcore +alias symbol:usb_deregister_device_driver usbcore +alias symbol:usb_gadget_frame_number udc_core +alias symbol:rt2x00lib_get_bssidx rt2x00lib +alias symbol:stmmac_resume stmmac +alias symbol:usb_gadget_probe_driver udc_core +alias symbol:cfg80211_pmsr_report cfg80211 +alias symbol:cfg80211_pmsr_complete cfg80211 +alias symbol:rt2x00mac_sw_scan_complete rt2x00lib +alias symbol:rt2x00usb_disable_radio rt2x00usb +alias symbol:scsi_track_queue_full scsi_mod +alias symbol:cfg80211_find_elem_match cfg80211 +alias symbol:stmmac_dvr_remove stmmac +alias symbol:gf128mul_free_64k gf128mul +alias symbol:rt2x00usb_uninitialize rt2x00usb +alias symbol:rt2800_ampdu_action rt2800lib +alias symbol:usb_stor_post_reset usb_storage +alias symbol:phylink_decode_usxgmii_word phylink +alias symbol:hid_validate_values hid +alias symbol:rt2x00lib_resume rt2x00lib +alias symbol:scsi_host_busy_iter scsi_mod +alias symbol:stmmac_pltfr_pm_ops stmmac_platform +alias symbol:rt2800_txstatus_timeout rt2800lib +alias symbol:ieee80211_queue_work mac80211 +alias symbol:usb_gadget_activate udc_core +alias symbol:ieee80211_get_num_supported_channels cfg80211 +alias symbol:ehci_handshake ehci_hcd +alias symbol:crypto_aes_inv_sbox libaes +alias symbol:rt2x00queue_flush_queues rt2x00lib +alias symbol:usb_free_streams usbcore +alias symbol:usb_gadget_disconnect udc_core +alias symbol:rt2x00mac_add_interface rt2x00lib +alias symbol:usb_hub_release_port usbcore +alias symbol:fat_update_time fat +alias symbol:mii_ethtool_get_link_ksettings mii +alias symbol:cfg80211_ref_bss cfg80211 +alias symbol:crc_ccitt_table crc_ccitt +alias symbol:scsi_target_unblock scsi_mod +alias symbol:ieee80211_vif_to_wdev mac80211 +alias symbol:rt2x00usb_initialize rt2x00usb +alias symbol:wdev_to_ieee80211_vif mac80211 +alias symbol:cfg80211_rx_control_port cfg80211 +alias symbol:rt2x00lib_remove_dev rt2x00lib +alias symbol:usb_stor_suspend usb_storage diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.symbols.bin b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.symbols.bin new file mode 100644 index 00000000..8286d9ac Binary files /dev/null and b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/modules.symbols.bin differ diff --git a/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/source b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/source new file mode 120000 index 00000000..2c9311d1 --- /dev/null +++ b/board/loongson/ls2k500/custom/rootfs_aoxiang_overlay/usr/lib/modules/5.10.0.lsgd/source @@ -0,0 +1 @@ +/home/loongson/datac2/niuyize/linux-5.10-la \ No newline at end of file diff --git a/board/loongson/ls2k500/readme.txt b/board/loongson/ls2k500/readme.txt new file mode 100644 index 00000000..01b58c49 --- /dev/null +++ b/board/loongson/ls2k500/readme.txt @@ -0,0 +1,31 @@ +loongson LA64 ls2k500 + +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the ls2k500. With the current configuration +it will bring-up the board, and allow access through the serial console. + +How to build it +=============== + +Configure Buildroot: + + $ make loongson2k500_defconfig (this will use rootfs_overlay) + +Compile everything and build the system: + + $ make + or + $ make -j4 (run in 4 core PC) + +How to install the system +======================== + +you can use +{buildroot_path}/output/images/rootfs.tar.gz +or +{buildroot_path}/output/images/rootfs.ubi +to install to SSD or nand by uboot function +remember rootfs.ubi rename rootfs-ubifs-ze.img diff --git a/board/loongson/ls2k500/rootfs_mini_overlay/boot/.gitignore b/board/loongson/ls2k500/rootfs_mini_overlay/boot/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/board/loongson/ls2k500/rootfs_mini_overlay/etc/ssh/sshd_config b/board/loongson/ls2k500/rootfs_mini_overlay/etc/ssh/sshd_config new file mode 100644 index 00000000..613cf243 --- /dev/null +++ b/board/loongson/ls2k500/rootfs_mini_overlay/etc/ssh/sshd_config @@ -0,0 +1,117 @@ +# $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $ + +# This is the sshd server system-wide configuration file. See +# sshd_config(5) for more information. + +# This sshd was compiled with PATH=/bin:/sbin:/usr/bin:/usr/sbin + +# The strategy used for options in the default sshd_config shipped with +# OpenSSH is to specify options with their default value where +# possible, but leave them commented. Uncommented options override the +# default value. + +#Port 22 +#AddressFamily any +#ListenAddress 0.0.0.0 +#ListenAddress :: + +#HostKey /etc/ssh/ssh_host_rsa_key +#HostKey /etc/ssh/ssh_host_ecdsa_key +#HostKey /etc/ssh/ssh_host_ed25519_key + +# Ciphers and keying +#RekeyLimit default none + +# Logging +#SyslogFacility AUTH +#LogLevel INFO + +# Authentication: + +#LoginGraceTime 2m +#PermitRootLogin prohibit-password +PermitRootLogin no +#StrictModes yes +#MaxAuthTries 6 +#MaxSessions 10 + +#PubkeyAuthentication yes + +# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 +# but this is overridden so installations will only check .ssh/authorized_keys +AuthorizedKeysFile .ssh/authorized_keys + +#AuthorizedPrincipalsFile none + +#AuthorizedKeysCommand none +#AuthorizedKeysCommandUser nobody + +# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts +#HostbasedAuthentication no +# Change to yes if you don't trust ~/.ssh/known_hosts for +# HostbasedAuthentication +#IgnoreUserKnownHosts no +# Don't read the user's ~/.rhosts and ~/.shosts files +#IgnoreRhosts yes + +# To disable tunneled clear text passwords, change to no here! +#PasswordAuthentication yes +#PermitEmptyPasswords no + +# Change to no to disable s/key passwords +#ChallengeResponseAuthentication yes + +# Kerberos options +#KerberosAuthentication no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes +#KerberosGetAFSToken no + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes + +# Set this to 'yes' to enable PAM authentication, account processing, +# and session processing. If this is enabled, PAM authentication will +# be allowed through the ChallengeResponseAuthentication and +# PasswordAuthentication. Depending on your PAM configuration, +# PAM authentication via ChallengeResponseAuthentication may bypass +# the setting of "PermitRootLogin without-password". +# If you just want the PAM account and session checks to run without +# PAM authentication, then enable this but set PasswordAuthentication +# and ChallengeResponseAuthentication to 'no'. +#UsePAM no + +#AllowAgentForwarding yes +#AllowTcpForwarding yes +#GatewayPorts no +#X11Forwarding no +#X11DisplayOffset 10 +#X11UseLocalhost yes +#PermitTTY yes +#PrintMotd yes +#PrintLastLog yes +#TCPKeepAlive yes +#PermitUserEnvironment no +#Compression delayed +#ClientAliveInterval 0 +#ClientAliveCountMax 3 +#UseDNS no +#PidFile /var/run/sshd.pid +#MaxStartups 10:30:100 +#PermitTunnel no +#ChrootDirectory none +#VersionAddendum none + +# no default banner path +#Banner none + +# override default of no subsystems +Subsystem sftp /usr/libexec/sftp-server + +# Example of overriding settings on a per-user basis +#Match User anoncvs +# X11Forwarding no +# AllowTcpForwarding no +# PermitTTY no +# ForceCommand cvs server diff --git a/board/loongson/ls2k500/rootfs_mini_overlay/etc/udev/rules.d/80-net-setup-link.rules b/board/loongson/ls2k500/rootfs_mini_overlay/etc/udev/rules.d/80-net-setup-link.rules new file mode 100644 index 00000000..7507a2f2 --- /dev/null +++ b/board/loongson/ls2k500/rootfs_mini_overlay/etc/udev/rules.d/80-net-setup-link.rules @@ -0,0 +1,13 @@ +# do not edit this file, it will be overwritten on update + +SUBSYSTEM!="net", GOTO="net_setup_link_end" + +IMPORT{builtin}="path_id" + +ACTION=="remove", GOTO="net_setup_link_end" + +IMPORT{builtin}="net_setup_link" + +NAME=="", ENV{ID_NET_NAME}!="", NAME="$env{ID_NET_SLOT}" + +LABEL="net_setup_link_end" diff --git a/board/loongson/ls2k500/rootfs_overlay/boot/.gitignore b/board/loongson/ls2k500/rootfs_overlay/boot/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/board/loongson/ls2k500/rootfs_overlay/etc/ssh/sshd_config b/board/loongson/ls2k500/rootfs_overlay/etc/ssh/sshd_config new file mode 100644 index 00000000..613cf243 --- /dev/null +++ b/board/loongson/ls2k500/rootfs_overlay/etc/ssh/sshd_config @@ -0,0 +1,117 @@ +# $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $ + +# This is the sshd server system-wide configuration file. See +# sshd_config(5) for more information. + +# This sshd was compiled with PATH=/bin:/sbin:/usr/bin:/usr/sbin + +# The strategy used for options in the default sshd_config shipped with +# OpenSSH is to specify options with their default value where +# possible, but leave them commented. Uncommented options override the +# default value. + +#Port 22 +#AddressFamily any +#ListenAddress 0.0.0.0 +#ListenAddress :: + +#HostKey /etc/ssh/ssh_host_rsa_key +#HostKey /etc/ssh/ssh_host_ecdsa_key +#HostKey /etc/ssh/ssh_host_ed25519_key + +# Ciphers and keying +#RekeyLimit default none + +# Logging +#SyslogFacility AUTH +#LogLevel INFO + +# Authentication: + +#LoginGraceTime 2m +#PermitRootLogin prohibit-password +PermitRootLogin no +#StrictModes yes +#MaxAuthTries 6 +#MaxSessions 10 + +#PubkeyAuthentication yes + +# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 +# but this is overridden so installations will only check .ssh/authorized_keys +AuthorizedKeysFile .ssh/authorized_keys + +#AuthorizedPrincipalsFile none + +#AuthorizedKeysCommand none +#AuthorizedKeysCommandUser nobody + +# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts +#HostbasedAuthentication no +# Change to yes if you don't trust ~/.ssh/known_hosts for +# HostbasedAuthentication +#IgnoreUserKnownHosts no +# Don't read the user's ~/.rhosts and ~/.shosts files +#IgnoreRhosts yes + +# To disable tunneled clear text passwords, change to no here! +#PasswordAuthentication yes +#PermitEmptyPasswords no + +# Change to no to disable s/key passwords +#ChallengeResponseAuthentication yes + +# Kerberos options +#KerberosAuthentication no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes +#KerberosGetAFSToken no + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes + +# Set this to 'yes' to enable PAM authentication, account processing, +# and session processing. If this is enabled, PAM authentication will +# be allowed through the ChallengeResponseAuthentication and +# PasswordAuthentication. Depending on your PAM configuration, +# PAM authentication via ChallengeResponseAuthentication may bypass +# the setting of "PermitRootLogin without-password". +# If you just want the PAM account and session checks to run without +# PAM authentication, then enable this but set PasswordAuthentication +# and ChallengeResponseAuthentication to 'no'. +#UsePAM no + +#AllowAgentForwarding yes +#AllowTcpForwarding yes +#GatewayPorts no +#X11Forwarding no +#X11DisplayOffset 10 +#X11UseLocalhost yes +#PermitTTY yes +#PrintMotd yes +#PrintLastLog yes +#TCPKeepAlive yes +#PermitUserEnvironment no +#Compression delayed +#ClientAliveInterval 0 +#ClientAliveCountMax 3 +#UseDNS no +#PidFile /var/run/sshd.pid +#MaxStartups 10:30:100 +#PermitTunnel no +#ChrootDirectory none +#VersionAddendum none + +# no default banner path +#Banner none + +# override default of no subsystems +Subsystem sftp /usr/libexec/sftp-server + +# Example of overriding settings on a per-user basis +#Match User anoncvs +# X11Forwarding no +# AllowTcpForwarding no +# PermitTTY no +# ForceCommand cvs server diff --git a/board/loongson/ls2k500/rootfs_overlay/etc/udev/rules.d/80-net-setup-link.rules b/board/loongson/ls2k500/rootfs_overlay/etc/udev/rules.d/80-net-setup-link.rules new file mode 100644 index 00000000..7507a2f2 --- /dev/null +++ b/board/loongson/ls2k500/rootfs_overlay/etc/udev/rules.d/80-net-setup-link.rules @@ -0,0 +1,13 @@ +# do not edit this file, it will be overwritten on update + +SUBSYSTEM!="net", GOTO="net_setup_link_end" + +IMPORT{builtin}="path_id" + +ACTION=="remove", GOTO="net_setup_link_end" + +IMPORT{builtin}="net_setup_link" + +NAME=="", ENV{ID_NET_NAME}!="", NAME="$env{ID_NET_SLOT}" + +LABEL="net_setup_link_end" diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/boot/.gitignore b/board/loongson/ls2k500/rootfs_ramdisk_overlay/boot/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/etc/inittab b/board/loongson/ls2k500/rootfs_ramdisk_overlay/etc/inittab new file mode 100644 index 00000000..c13fd86c --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/etc/inittab @@ -0,0 +1,40 @@ +# /etc/inittab +# +# Copyright (C) 2001 Erik Andersen +# +# Note: BusyBox init doesn't support runlevels. The runlevels field is +# completely ignored by BusyBox init. If you want runlevels, use +# sysvinit. +# +# Format for each entry: ::: +# +# id == tty to run on, or empty for /dev/console +# runlevels == ignored +# action == one of sysinit, respawn, askfirst, wait, and once +# process == program to run + +# Startup the system +::sysinit:/bin/mount -t proc proc /proc +::sysinit:/bin/mount -o remount,rw / +::sysinit:/bin/mkdir -p /dev/pts /dev/shm +::sysinit:/bin/mount -a +::sysinit:/sbin/swapon -a +null::sysinit:/bin/ln -sf /proc/self/fd /dev/fd +null::sysinit:/bin/ln -sf /proc/self/fd/0 /dev/stdin +null::sysinit:/bin/ln -sf /proc/self/fd/1 /dev/stdout +null::sysinit:/bin/ln -sf /proc/self/fd/2 /dev/stderr +::sysinit:/bin/hostname -F /etc/hostname +# now run any rc scripts +::sysinit:/etc/init.d/rcS + +# Put a getty on the serial port +#ttyS2::respawn:/sbin/getty -L ttyS0 115200 vt100 # GENERIC_SERIAL +ttyS2::respawn:-/bin/sh + +# Stuff to do for the 3-finger salute +#::ctrlaltdel:/sbin/reboot + +# Stuff to do before rebooting +::shutdown:/etc/init.d/rcK +::shutdown:/sbin/swapoff -a +::shutdown:/bin/umount -a -r diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/etc/profile b/board/loongson/ls2k500/rootfs_ramdisk_overlay/etc/profile new file mode 100644 index 00000000..343b514c --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/etc/profile @@ -0,0 +1,25 @@ +export PATH="/bin:/sbin:/usr/bin:/usr/sbin" + +if [ "$PS1" ]; then + if [ "`id -u`" -eq 0 ]; then + export PS1='[\u@\h \W]# ' + else + export PS1='$ ' + fi +fi + +export EDITOR='/bin/vi' + +# Source configuration files from /etc/profile.d +for i in /etc/profile.d/*.sh ; do + if [ -r "$i" ]; then + . $i + fi +done +unset i + +sleep 2 +echo "Processing /etc/profile..." +echo "we will run three script symbol three stage" +echo "some stage will waste a few minutes. don't shutdowm until finish!" +/home/handle_judge.sh | tee /dev/tty0 diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/download_system_tftp/download.sh b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/download_system_tftp/download.sh new file mode 100755 index 00000000..b817caf7 --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/download_system_tftp/download.sh @@ -0,0 +1,89 @@ +#! /bin/sh + +###1 dont delete +tftp_ip=$1 +rootfs_name=rootfs.tar.gz +md5_name=md5.txt +uImage_name=uImage +recover_name=ramdisk.gz +recover_local_name=ramdisk.gz + +download_mount_point=$2 + +download_rootfs_path="$download_mount_point/$rootfs_name" +download_md5_path="$download_mount_point/$md5_name" +download_uImage_path="$download_mount_point/$uImage_name" +download_recover_path="$download_mount_point/$recover_local_name" + +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + +###2 dont delete + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + sleep 2 + echo "*************************************************************************" + echo "" + exit 1; +} + +#检查文件是否齐全 +check_file_for_safe() +{ + #检查是不是缺少部分文件,不然分了区才说没文件系统,那么原来的系统就会丢失。 + #能来这里执行,就代表本来就有uImage + echo "-------------> stage1 check_file_for_safe <-------------" + if [ ! -f "$download_rootfs_path" ]; then + error_inf_print "Error! not found "$rootfs_name" download failed!" + exit 1; + fi + if [ ! -f "$download_uImage_path" ]; then + error_inf_print "Error! not found "$uImage_name" download failed!" + exit 1; + fi +} + +download_system() +{ + echo "$rootfs_name downloading...." + tftp -l "$download_rootfs_path" -r $rootfs_name -g $tftp_ip -b 65535 + echo "$uImage_name downloading...." + tftp -l "$download_uImage_path" -r $uImage_name -g $tftp_ip -b 4096 + + if [ ! -z $md5_name ]; then + tftp -l "$download_md5_path" -r $md5_name -g $tftp_ip 2>/dev/null + + if [ -f "$download_md5_path" ]; then + if [ -f "$download_rootfs_path" ]; then + ori_md5=$(cat "$download_md5_path" | cut -d ' ' -f1); + local_md5=$(md5sum "$download_rootfs_path" | cut -d ' ' -f1); + + if [ "$ori_md5" == "$local_md5" ]; then + echo "md5 check success!!!"; + else + error_inf_print "md5 check failed!!! remove $rootfs_name"; + rm "$download_rootfs_path" + fi + + rm "$download_md5_path" + fi + fi + fi + + if [ -e $backup_partition ]; then + tftp -l "$download_recover_path" -r $recover_name -g $tftp_ip -b 4096 2>/dev/null + fi + check_file_for_safe; + return $? +} + +download_system +exit $? diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/download_system_tftp/download_fdisk.sh b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/download_system_tftp/download_fdisk.sh new file mode 100755 index 00000000..3ba2ed09 --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/download_system_tftp/download_fdisk.sh @@ -0,0 +1,132 @@ +#! /bin/sh + +tftp_ip=$1 +config_name=config.txt +fdisk_name=fdisk.txt + +disk_config="null" + +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + +root_mount_point="/mnt/usb1" +data_mount_point="/mnt/usb2" +swap_mount_point="/mnt/usb3" +backup_mount_point="/mnt/usb4" + +download_partition="/dev/sda4" +download_mount_point="/mnt/usb4" + +head_line_target=`ifconfig -a | grep "lo" | tr -s ' ' | cut -d ' ' -f2` +dev_list_size=0 +eth_dev_name="" + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + sleep 2 + echo "*************************************************************************" + echo "" + exit 1; +} + +get_eth_dev_name() +{ + eth_dev_name=`ifconfig -a | grep $head_line_target | grep -v lo | grep -v can | grep -v usb | grep -v sit | tr -s ' ' | cut -d ' ' -f1 | head -$1 | tail -1` +} + +get_up_eth() +{ + ifconfig $eth_dev_name $1 netmask 255.255.255.0 + echo "wait 10s to let eth up dev_name: $eth_dev_name" + time_count=1 + while [ $time_count -le 10 ]; + do + printf "\r"$time_count"s..." + sleep 1 + time_count=$(($time_count+1)) + done + echo "" + echo "check server connect....." + tftp -r "uImage" -g $tftp_ip -b 8192 2>/dev/null + check_server_result=$? + if [ $check_server_result -ne 0 ]; then + ifconfig $eth_dev_name down + fi + if [ -f "uImage" ]; then + rm uImage + fi + return $check_server_result +} + +connect_tftp_server() +{ + dev_list_size=`ifconfig -a | grep $head_line_target | grep -v lo | grep -v can | grep -v usb | grep -v sit | wc -l` + cur_test_eth_num=1 + while [ $cur_test_eth_num -le $dev_list_size ] + do + get_eth_dev_name $cur_test_eth_num + get_up_eth $1 + if [ $? -eq 0 ]; then + return 0; + fi + echo "$eth_dev_name can t connect tftp server, try other eth!" + cur_test_eth_num=$(($cur_test_eth_num+1)) + done + error_inf_print "Error!!! not connect server, please check your network!!!" + return 1 +} + +run() +{ + connect_tftp_server $2 + if [ $? -ne 0 ]; then + return 1 + fi + echo "start download file by tftp" + tftp -r $fdisk_name -g $tftp_ip -b 4096 2>/dev/null + + if [ $? -eq 0 ]; then + /home/install_fdisk_analysis.sh 1 $fdisk_name + else + tftp -r $config_name -g $tftp_ip -b 4096 2>/dev/null + + if [ -f $config_name ]; then + disk_config=`cat $config_name | head -n1` + /home/install_fdisk_analysis.sh 2 $disk_config + else + /home/install_fdisk_analysis.sh + fi + fi + + sync; + #查看分区表的变化 + echo "" + fdisk -l | grep "/dev/sda"; + sleep 1; + + /home/install_format_all_disk.sh + if [ $? -ne 0 ]; then + return $? + fi + + if [ ! -e $download_partition ]; then + download_partition="/dev/sda1" + download_mount_point="/mnt/usb1" + fi + + mount $download_partition $download_mount_point + /home/download_system_tftp/download.sh $tftp_ip $download_mount_point + result=$? + umount $download_mount_point + return $result +} + +run $1 $2; +exit $?; \ No newline at end of file diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fdisk.txt b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fdisk.txt new file mode 100644 index 00000000..eadd3d4b --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fdisk.txt @@ -0,0 +1,28 @@ +d +1 +d +2 +d +3 +d +4 + +n +p +3 + ++2G + +n +p +1 + + + +t +3 +82 + +p + +w diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/0001part_fstab b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/0001part_fstab new file mode 100644 index 00000000..911860c3 --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/0001part_fstab @@ -0,0 +1,2 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/0011part_fstab b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/0011part_fstab new file mode 100644 index 00000000..75318711 --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/0011part_fstab @@ -0,0 +1,9 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda2 /data ext4 rw,relatime,data=ordered 0 1 + +/data/home /home none defaults,bind 0 0 +/data/opt /opt none defaults,bind 0 0 +/data/var /var none defaults,bind 0 0 + + diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/0101part_fstab b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/0101part_fstab new file mode 100644 index 00000000..7d6f8271 --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/0101part_fstab @@ -0,0 +1,5 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda3 none swap defaults,pri=-2 0 0 + + diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/0111part_fstab b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/0111part_fstab new file mode 100644 index 00000000..6f6ac762 --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/0111part_fstab @@ -0,0 +1,10 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda2 /data ext4 rw,relatime,data=ordered 0 1 +/dev/sda3 none swap defaults,pri=-2 0 0 + +/data/home /home none defaults,bind 0 0 +/data/opt /opt none defaults,bind 0 0 +/data/var /var none defaults,bind 0 0 + + diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/1001part_fstab b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/1001part_fstab new file mode 100644 index 00000000..f44066cb --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/1001part_fstab @@ -0,0 +1,3 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 + diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/1011part_fstab b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/1011part_fstab new file mode 100644 index 00000000..d77bfee2 --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/1011part_fstab @@ -0,0 +1,7 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda3 none swap defaults,pri=-2 0 0 + +/data/home /home none defaults,bind 0 0 +/data/opt /opt none defaults,bind 0 0 +/data/var /var none defaults,bind 0 0 diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/1101part_fstab b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/1101part_fstab new file mode 100644 index 00000000..7d6f8271 --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/1101part_fstab @@ -0,0 +1,5 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda3 none swap defaults,pri=-2 0 0 + + diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/1111part_fstab b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/1111part_fstab new file mode 100644 index 00000000..6f6ac762 --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/fstab/1111part_fstab @@ -0,0 +1,10 @@ +# UNCONFIGURED FSTAB FOR BASE SYSTEM +/dev/sda1 / ext4 rw,relatime,data=ordered 0 1 +/dev/sda2 /data ext4 rw,relatime,data=ordered 0 1 +/dev/sda3 none swap defaults,pri=-2 0 0 + +/data/home /home none defaults,bind 0 0 +/data/opt /opt none defaults,bind 0 0 +/data/var /var none defaults,bind 0 0 + + diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/handle_judge.sh b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/handle_judge.sh new file mode 100755 index 00000000..e0f599bc --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/handle_judge.sh @@ -0,0 +1,47 @@ +#! /bin/sh + +# 0 install 1 recover +handle_type=0 + +judge_cmdline() +{ + temp_str=$(cat /proc/cmdline | grep ins_way) + if [ ! -z "$temp_str" ]; then + handle_type=0; + return 0; + fi + temp_str=$(cat /proc/cmdline | grep "rec_sys=1") + if [ ! -z "$temp_str" ]; then + handle_type=1; + return 0; + fi + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo "your uboot version maybe not a laster version!" + echo "so this ramdisk.gz will handle install action!" + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + return 1 +} + +start() +{ + judge_cmdline + res=$? + if [ $res -eq 1 ]; then + /home/install_usb.sh + else + if [ $handle_type -eq 0 ]; then + echo "Install System..." + /home/install_usb.sh + elif [ $handle_type -eq 1 ]; then + echo "Recover System..." + /home/recover_backup.sh + else + echo "handle_judge.sh unexpected handle_type: $handle_type" + echo "ramdisk failed! exit!" + return 1 + fi + fi + return 0 +} + +start diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/install_disk.sh b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/install_disk.sh new file mode 100755 index 00000000..5ad8fb8c --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/install_disk.sh @@ -0,0 +1,249 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 2*********************************" +echo "*******************uzip system and setup it with fstab*******************" +echo "*************************************************************************" +echo " "; +sleep 2; + +usb_partition="/dev/sdb1" +usb_partition_bak="/dev/sdb" +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + +usb_mount_point="/mnt/usb0" +root_mount_point="/mnt/usb1" +data_mount_point="/mnt/usb2" +swap_mount_point="/mnt/usb3" +backup_mount_point="/mnt/usb4" + +#错误信息输出到usb的install文件夹里的error.log +#注意安装系统时install文件夹不要存放error.log +#否则会先改名error.log.bak,多次执行后,这样可能会造成数据丢失 +error_inf_write_usb() +{ + if mountpoint -q $usb_mount_point; then + echo $1 >> $usb_mount_point"/install/error.log"; + else + mount $usb_partition $usb_mount_point; + if mountpoint -q $usb_mount_point; then + echo $1 >> $usb_mount_point"/install/error.log"; + sync; + umount $usb_mount_point; + else + echo "-------------> log error: couldn't mount usb("$usb_partition") <-------------" + fi + fi +} + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + error_inf_write_usb $1 + check_and_umount_for_safe; + exit 1; +} + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#uzip_rootfs 解压文件系统到根文件分区 必要 +#copy_uimage_to_boot 复制内核到/boot目录(没做boot分区)必要 +#copy_file_to_data 复制home opt var到data分区 不一定,根据fstab而定 + +uzip_rootfs() +{ + echo "-------------> stage2.1 unzip system <-------------" + + if [ -e "/dev/fb0" ]; then + show_process_dev="/dev/tty0" + else + if [ -e "/dev/console" ]; then + show_process_dev="/dev/console" + else + show_process_dev="/dev/tty0" + fi + fi + + if [ -e $backup_partition ]; then + mount $backup_partition $backup_mount_point + sync; + mount $root_partition $root_mount_point + sync; + echo "can observe process in screen" + pv $backup_mount_point/rootfs.tar.gz 2>$show_process_dev | tar -xzf - -C $root_mount_point; + if [ $? -ne 0 ]; then + error_inf_print "Error! unzip system failed! Please check rootfs.tar.gz and try again"; + fi + else + mount $root_partition $root_mount_point + sync; + echo "can observe process in screen" + pv $root_mount_point/rootfs.tar.gz 2>$show_process_dev | tar -xzf - -C $root_mount_point; + if [ $? -ne 0 ]; then + error_inf_print "Error! unzip system failed! Please check rootfs.tar.gz and try again"; + fi + rm -r $root_mount_point/rootfs.tar.gz + fi + check_and_umount_for_safe; + return 0; +} + +copy_uImage_to_boot() +{ + echo "-------------> stage2.2 copy uImage to /boot <-------------" + if [ -e $backup_partition ]; then + mount $backup_partition $backup_mount_point + sync; + mount $root_partition $root_mount_point + sync; + + #保证boot文件存在 + if [ ! -d $root_mount_point/boot ]; then + mkdir $root_mount_point/boot + fi + + cp -a $backup_mount_point/uImage $root_mount_point/boot/ + if [ $? -ne 0 ]; then + error_inf_print "Error! copy uImage failed! Please try again"; + fi + else + mount $root_partition $root_mount_point + sync; + + #保证boot文件存在 + if [ ! -d $root_mount_point/boot ]; then + mkdir $root_mount_point/boot + fi + + mv $root_mount_point/uImage $root_mount_point/boot/ + if [ $? -ne 0 ]; then + error_inf_print "Error! copy uImage failed! Please try again"; + fi + fi + check_and_umount_for_safe; + return 0; +} + +copy_fstab() +{ + echo "-------------> stage2.3 copy fstab to /etc/fstab <-------------" + sda1_partition_target=0 + sda2_partition_target=0 + sda3_partition_target=0 + sda4_partition_target=0 + if [ -e $root_partition ]; then + sda1_partition_target=1; + fi + if [ -e $data_partition ]; then + sda2_partition_target=1; + fi + if [ -e $swap_partition ]; then + sda3_partition_target=1; + fi + if [ -e $backup_partition ]; then + sda4_partition_target=1; + fi + + mount $root_partition $root_mount_point; + sync; + + if [ -f $root_mount_point/etc/fstab ]; then + cp $root_mount_point/etc/fstab $root_mount_point/etc/fstab_ori; + cp "/home/fstab/"$sda4_partition_target$sda3_partition_target$sda2_partition_target$sda1_partition_target"part_fstab" $root_mount_point/etc/fstab; + + echo "" >> $root_mount_point/etc/fstab + cat $root_mount_point/etc/fstab_ori | grep proc >> $root_mount_point/etc/fstab; + cat $root_mount_point/etc/fstab_ori | grep sysfs >> $root_mount_point/etc/fstab; + cat $root_mount_point/etc/fstab_ori | grep tmpfs >> $root_mount_point/etc/fstab; + cat $root_mount_point/etc/fstab_ori | grep devpts >> $root_mount_point/etc/fstab; + else + cp "/home/fstab/"$sda4_partition_target$sda3_partition_target$sda2_partition_target$sda1_partition_target"part_fstab" $root_mount_point/etc/fstab; + fi + + check_and_umount_for_safe; + return 0; +} + +copy_file_to_data() +{ + echo "-------------> stage2.4 copy file to data partition <-------------" + mount $data_partition $data_mount_point; + sync; + mount $root_partition $root_mount_point; + sync; + + cp -a $root_mount_point/home/ $data_mount_point; + cp -a $root_mount_point/opt/ $data_mount_point; + cp -a $root_mount_point/var/ $data_mount_point; + sync; + + rm -r $root_mount_point/home/ + rm -r $root_mount_point/opt/ + rm -r $root_mount_point/var/ + sync; + + check_and_umount_for_safe; + return 0; +} + +#防止前面的脚本出现错误,导致没有解除挂载一些已经挂载的分区。 +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q $i; then + sync; + umount $i; + fi + } + done +} + +#相关分区 +#backup分区 +start_stage2() +{ + uzip_rootfs + echo "" + copy_uImage_to_boot + echo "" + copy_fstab; + echo "" + if [ -e $data_partition ]; then + copy_file_to_data + fi +} + +check_usb_name() +{ + if [ ! -e $usb_partition ]; then + usb_partition=$usb_partition_bak + fi +} + +###################start########################## +###################start########################## +###################start########################## + + +#防止第一个阶段因未知原因而导致没有解除挂载 +if [ $# -eq 1 ]; then + usb_partition=$1 +fi +check_and_umount_for_safe; +check_usb_name; #如果前面有参数 那么 这里的判断等于白做事 +start_stage2; +check_and_umount_for_safe; + +echo "-------------> stage2 end <-------------" + +/home/install_reboot.sh diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/install_fdisk.sh b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/install_fdisk.sh new file mode 100755 index 00000000..75675b59 --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/install_fdisk.sh @@ -0,0 +1,413 @@ +#! /bin/sh + +disk_size=0 +disk_size_root=0 +disk_size_data=0 +disk_size_swap=2 +disk_size_backup=4 +disk_size_ex_swap=0 +disk_size_root_and_data=0 +#是disk_size_root_and_data的备份 +disk_size_root_and_data_bak=0 + +swap_exist=1 +backup_exist=1 + +fdisk_part_total=0 + +#读取SSD的大小 +read_disk_size() +{ + disk_size=$(fdisk -l | grep "Disk /dev/sda" | head -n1 | cut -d ' ' -f3); + disk_size_ex_swap=$(($disk_size-$disk_size_swap)); +} + +#$1 是第一个的比例 +#$2 是第二个的比例 +#$3 瓜分总数 +buffer_num1=0; +buffer_num2=0; +spilt_num_to_buffer() +{ + buffer_num1=0 + buffer_num2=0 + count=$(($1+$2)) + total_num=$3 + + if [ $1 -le 0 ]; then + buffer_num2=$3 + return 0 + elif [ $2 -le 0 ]; then + buffer_num1=$3 + return 0 + fi + + while [ $total_num -ge $count ] + do + buffer_num1=$(($buffer_num1+$1)) + buffer_num2=$(($buffer_num2+$2)) + total_num=$(($total_num-$count)) + done + if [ $1 -lt $2 ]; then + buffer_num2=$(($buffer_num2+$total_num)) + else + buffer_num1=$(($buffer_num1+$total_num)) + fi +} + +split_rootdata_and_backup() +{ + spilt_num_to_buffer $1 $2 $3 + disk_size_root_and_data=$buffer_num1 + disk_size_backup=$buffer_num2 + +} + +split_root_and_data() +{ + spilt_num_to_buffer $1 $2 $3 + disk_size_root=$buffer_num1 + disk_size_data=$buffer_num2 +} + +#这是开始格式化分区的函数 +#注意分区的数字需要参数传入,否则不能识别 +fdisk_run_four_part() +{ + fdisk /dev/sda >/dev/null << ! +d +1 +d +2 +d +3 +d +4 + +n +p +1 + ++$1G + +n +p +2 + ++$2G + +n +p +3 + ++$3G + +n +p +4 + + + +t +3 +82 + +p + +w +! +} + +#这是开始格式化分区的函数 +#注意分区的数字需要参数传入,否则不能识别 +fdisk_run_three_part_without_data() +{ + fdisk /dev/sda >/dev/null << ! +d +1 +d +2 +d +3 +d +4 + +n +p +1 + ++$1G + +n +p +3 + ++$2G + +n +p +4 + + + +t +3 +82 + +p + +w +! +} + +fdisk_run_three_part() +{ + fdisk /dev/sda >/dev/null << ! +d +1 +d +2 +d +3 +d +4 + +n +p +$1 + ++$2G + +n +p +$3 + ++$4G + +n +p +$5 + + + +t +3 +82 + +p + +w +! +} + +temp_fdisk_name=temp_fdisk +fdisk_run_delete_all_part() +{ + echo d >> $temp_fdisk_name + echo 1 >> $temp_fdisk_name + echo d >> $temp_fdisk_name + echo 2 >> $temp_fdisk_name + echo d >> $temp_fdisk_name + echo 3 >> $temp_fdisk_name + echo d >> $temp_fdisk_name + echo 4 >> $temp_fdisk_name + echo "" >> $temp_fdisk_name + echo "" >> $temp_fdisk_name +} + +fdisk_run_set_swap_flag() +{ + echo t >> $temp_fdisk_name + echo 82 >> $temp_fdisk_name + echo "" >> $temp_fdisk_name + echo "" >> $temp_fdisk_name +} + +cur_part_num=1 +fdisk_run_set_part_write_file() +{ + echo n >> $temp_fdisk_name + echo p >> $temp_fdisk_name + echo $1 >> $temp_fdisk_name + echo "" >> $temp_fdisk_name + echo $2 >> $temp_fdisk_name + echo "" >> $temp_fdisk_name + echo "" >> $temp_fdisk_name +} + +fdisk_run_set_part() +{ + if [ $cur_part_num -ne 4 ]; then + if [ $cur_part_num -eq $fdisk_part_total ]; then + fdisk_run_set_part_write_file $1 "" + else + fdisk_run_set_part_write_file $1 "+$2G" + fi + else + fdisk_run_set_part_write_file "" "" + fi + cur_part_num=$(($cur_part_num+1)) +} + +fdisk_run_end_file() +{ + echo w >> $temp_fdisk_name +} + +fdisk_run_func() +{ + fdisk_run_delete_all_part + if [ $swap_exist -eq 1 ]; then + fdisk_run_set_part 3 $disk_size_swap + fdisk_run_set_swap_flag; + fi + if [ $backup_exist -eq 2 ]; then + fdisk_run_set_part 4 $disk_size_backup + fi + + fdisk_run_set_part 1 $disk_size_root + + if [ $1 -ne 0 ]; then + fdisk_run_set_part 2 $disk_size_data + fi + + if [ $backup_exist -eq 1 ]; then + fdisk_run_set_part 4 $disk_size_backup + fi + fdisk_run_end_file; + fdisk /dev/sda < $temp_fdisk_name >/dev/null +} + +#分析4分区, 不包括乒乓系统 +analy_four_part() +{ + #16G的特别对待,保证root能装满系统 + if [ $disk_size -le 16 ]; then + disk_size_root=6 + disk_size_data=3 + disk_size_root_and_data=9 + disk_size_root_and_data_bak=9 + else + disk_size_root_and_data=$(($disk_size_ex_swap-$disk_size_backup)) + disk_size_root_and_data_bak=$disk_size_root_and_data + split_root_and_data 1 2 $disk_size_root_and_data; + fi +} + +#分析4分区,包括乒乓系统 +analy_pingpang() +{ + if [ $disk_size -le 16 ]; then + disk_size_root=4 + disk_size_data=2 + disk_size_root_and_data=6 + disk_size_root_and_data_bak=6 + else + #/2会向下取整,也就是bakcup的大小 >= root+data + disk_size_root_and_data=$(($disk_size_ex_swap/2)) + disk_size_root_and_data_bak=$disk_size_root_and_data + split_root_and_data 1 2 $disk_size_root_and_data; + fi +} + +#fdisk_four_part 不包括4分区 +#fidks_pingpang 包括4分区 +#这两个函数都是接口。 + +fdisk_four_part() +{ + read_disk_size; + analy_four_part; + fdisk_run_four_part $disk_size_root $disk_size_data $disk_size_swap; +} + +fdisk_pingpang() +{ + read_disk_size; + analy_pingpang; + fdisk_run_four_part $disk_size_root $disk_size_data $disk_size_swap; +} + +fdisk_three_pingpang() +{ + read_disk_size; + analy_pingpang; + fdisk_run_three_part_without_data $disk_size_root_and_data_bak $disk_size_swap; +} + +fdisk_by_ratio_swap_size() +{ + if [ $1 -eq 0 ]; then + swap_exist=0; + disk_size_swap=0; + else + swap_exist=1 + if [ $disk_size -le 16 ]; then + disk_size_swap=1 + else + disk_size_swap=2 + fi + fi + disk_size_ex_swap=$(($disk_size-$disk_size_swap)) +} + +fdisk_by_ratio_backup_size() +{ + backup_exist=1 + if [ $1 -eq 0 ]; then + backup_exist=0; + disk_size_backup=0; + elif [ $1 -eq -1 ]; then + backup_exist=2 + disk_size_backup=4 + elif [ $1 -eq -2 ]; then + backup_exist=2 + disk_size_backup=5 + fi +} + +fdisk_by_ratio_other_part() +{ + fdisk_part_total=1; + if [ $2 -gt 0 ]; then + fdisk_part_total=$(($fdisk_part_total+1)); + fi + if [ $swap_exist -eq 1 ]; then + fdisk_part_total=$(($fdisk_part_total+1)); + fi + if [ $backup_exist -ne 0 ]; then + fdisk_part_total=$(($fdisk_part_total+1)); + fi + + if [ $backup_exist -eq 0 ]; then + split_root_and_data $1 $2 $disk_size_ex_swap + else + rootdata_ratio=$(($1+$2)) + if [ $backup_exist -eq 2 ]; then + disk_size_root_and_data=$(($disk_size_ex_swap-$disk_size_backup)) + else + split_rootdata_and_backup $rootdata_ratio $3 $disk_size_ex_swap + fi + split_root_and_data $1 $2 $disk_size_root_and_data + fi + + fdisk_run_func $2 +} + +fidks_by_ratio() +{ + read_disk_size; + fdisk_by_ratio_swap_size $3 + fdisk_by_ratio_backup_size $4 + fdisk_by_ratio_other_part $1 $2 $4 +} + +if [ $1 -eq 0 ]; then + fdisk_four_part; +elif [ $1 -eq 1 ]; then + fdisk_pingpang; +elif [ $1 -eq 2 ]; then + fdisk_three_pingpang; +elif [ $1 -eq 3 ]; then + fidks_by_ratio $2 $3 $4 $5 +fi \ No newline at end of file diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/install_fdisk_analysis.sh b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/install_fdisk_analysis.sh new file mode 100755 index 00000000..dd8aebe5 --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/install_fdisk_analysis.sh @@ -0,0 +1,130 @@ +#! /bin/sh + +check_num() +{ + result=$(echo $num1 | grep '^-*[1-9][0-9]*$') + if [ -z $result ]; then + return 1 + fi + return 0 +} + +check_dev_part_num_list() +{ + if [ $# -eq 4 ]; then + check_num $1 + if [ $? -ne 0 ]; then + return 1 + fi + check_num $2 + if [ $? -ne 0 ]; then + return 1 + fi + check_num $3 + if [ $? -ne 0 ]; then + return 1 + fi + check_num $4 + if [ $? -ne 0 ]; then + return 1 + fi + else + return 1 + fi + for i in $1 $2 $3 $4; do + if [ $i -gt 5 ]; then + echo "warning!!! $i > 5, this num is a ratio not a real size!!!" + return 1 + fi + done + if [ $1 -le 0 ]; then + echo "error!!! / part must define!!!" + return 1 + fi + if [ $2 -lt 0 ]; then + echo "warning!!! data part not support default size" + return 1 + fi + if [ $3 -ne 0 -a $3 -ne -1 ]; then + echo "warning!!! swap part not support set $3" + echo "warning!!! swap part ratio == 0 stand for not set swap" + echo "warning!!! swap part ratio == -1 stand for set default" + return 1 + fi + if [ $4 -lt -2 ]; then + echo "warning!!! backup part not support set $4" + echo "warning!!! backup part ratio > 0 stand for set backup part by this ratio" + echo "warning!!! backup part ratio == 0 stand for not set backup part" + echo "warning!!! backup part ratio == -1 stand for set 4G" + echo "warning!!! backup part ratio == -2 stand for set 5G" + return 1 + fi + return 0; +} + +fidsk_default_2_part() +{ + echo "" + echo "would split sda to 2 partition! /dev/sda1 and /dev/sda3" + sleep 1; + fdisk /dev/sda < /home/fdisk.txt >/dev/null; +} + +fdisk_config_analy() +{ + if [ "$1" == "4part" ]; then + /home/install_fdisk.sh 0 + elif [ "$1" == "twosys" ]; then + /home/install_fdisk.sh 1 + elif [ "$1" == "twosys_3" ]; then + /home/install_fdisk.sh 2 + else + num1=$(echo $1 | tr -s ' ' | cut -d ' ' -f1) + num2=$(echo $1 | tr -s ' ' | cut -d ' ' -f2) + num3=$(echo $1 | tr -s ' ' | cut -d ' ' -f3) + num4=$(echo $1 | tr -s ' ' | cut -d ' ' -f4) + + if [ ! -z "$num4" ]; then + check_dev_part_num_list $num1 $num2 $num3 $num4 + if [ $? -eq 0 ]; then + /home/install_fdisk.sh 3 $num1 $num2 $num3 $num4 + return 0 + fi + fi + + fidsk_default_2_part; + fi +} + +# arg1 file path +fdisk_file_analy() +{ + first_line="$(cat $1 | head -1)" + + if [ "$first_line" == "d" ]; then + fdisk /dev/sda < $1 >/dev/null; + else + fdisk_config_analy "$first_line" + fi +} + +analy_start() +{ + if [ $# -eq 2 ]; then + if [ $1 -eq 1 ]; then + fdisk_file_analy $2 + elif [ $1 -eq 2 ]; then + fdisk_config_analy $2 + else + fidsk_default_2_part + fi + else + fidsk_default_2_part + fi +} + +if [ $# -eq 2 ]; then + analy_start $1 $2 +else + analy_start +fi \ No newline at end of file diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/install_format_all_disk.sh b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/install_format_all_disk.sh new file mode 100755 index 00000000..78340189 --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/install_format_all_disk.sh @@ -0,0 +1,83 @@ +#! /bin/sh + +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + sleep 2 + echo "*************************************************************************" + echo "" + exit 1; +} + +#相关分区 +#所有分区,这是格式化分区的函数 +format_all_partition() +{ + # sda1 / usb1 + # sda2 data usb2 + # sda3 swap usb3 + # sda4 backup usb4 + + #分区格式化 + echo "-------------> stage1.2 format / partition --- start <-------------" + mke2fs -t ext4 -L rootfs -F $root_partition -O ^metadata_csum >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format / partition --- success <-------------" + else + error_inf_print "Error! format / partition failed! please check partition info and try again" + exit 1; + fi + sync + + if [ -e $data_partition ]; then + echo "-------------> stage1.2 format data partition --- start <-------------" + mke2fs -t ext4 -L data -F $data_partition >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format data partition --- success <-------------" + else + error_inf_print "Error! format data partition failed! please check partition info and try again" + exit 1; + fi + sync + fi + + if [ -e $swap_partition ]; then + echo "-------------> stage1.2 format swap partition --- start <-------------" + mkswap $swap_partition >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format swap partition --- success <-------------" + else + error_inf_print "Error! format swap partition failed! please check partition info and try again" + exit 1; + fi + sync + fi + + if [ -e $backup_partition ]; then + echo "-------------> stage1.2 format backup partition --- start <-------------" + mke2fs -t ext4 -L rootfs -F $backup_partition -O ^metadata_csum >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format backup partition --- success <-------------" + else + error_inf_print "Error! format backup partition failed! please check partition info and try again" + exit 1; + fi + sync + fi + + sleep 1; + return 0; +} + +format_all_partition; +exit $? \ No newline at end of file diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/install_reboot.sh b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/install_reboot.sh new file mode 100755 index 00000000..acbcf7b1 --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/install_reboot.sh @@ -0,0 +1,33 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 3*********************************" +echo "*******************this stage for check log and reboot*******************" +echo "*************************************************************************" +echo " "; + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#防止前面的脚本出现错误,导致没有解除挂载一些已经挂载的分区。 +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q i; then + sync; + umount i; + fi + } + done +} + +#防止前面的脚本出现错误,导致没有解除挂载一些已经挂载的分区。 +check_and_umount_for_safe; +/home/sys_config_tool + +echo "-------------> stage3 install system finish! please reboot or shutdowm! <-------------" +reboot -f + +echo "-------------> stage3 end <-------------" diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/install_usb.sh b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/install_usb.sh new file mode 100755 index 00000000..11901be9 --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/install_usb.sh @@ -0,0 +1,399 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 1*********************************" +echo "************this stage for format SSD and copy file to backup************" +echo "*************************************************************************" +echo " "; +sleep 2; + +usb_partition="/dev/sdb1" +usb_partition_bak="/dev/sdb" + +mmc_partition="/dev/mmcblk0p1" +mmc_partition_bak="/dev/mmcblk0" + +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + +usb_mount_point="/mnt/usb0" +root_mount_point="/mnt/usb1" +data_mount_point="/mnt/usb2" +swap_mount_point="/mnt/usb3" +backup_mount_point="/mnt/usb4" + +#local_or_network=0 + +uboot_install_fix=0 +install_way=0 + +stage1_result=0; + + +create_all_mount_point() +{ + if [ ! -d $usb_mount_point ]; then + mkdir $usb_mount_point + fi + if [ ! -d $root_mount_point ]; then + mkdir $root_mount_point + fi + if [ ! -d $data_mount_point ]; then + mkdir $data_mount_point + fi + if [ ! -d $swap_mount_point ]; then + mkdir $swap_mount_point + fi + if [ ! -d $backup_mount_point ]; then + mkdir $backup_mount_point + fi +} + +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q $i; then + sync; + umount $i; + fi + } + done +} + +#错误信息输出到usb的install文件夹里的error.log +#注意安装系统时install文件夹不要存放error.log +#否则会先改名error.log.bak,多次执行后,这样可能会造成数据丢失 +error_inf_write_usb() +{ + if mountpoint -q $usb_mount_point; then + echo $1 >> $usb_mount_point"/install/error.log"; + else + mount $usb_partition $usb_mount_point; + if mountpoint -q $usb_mount_point; then + echo $1 >> $usb_mount_point"/install/error.log"; + sync; + umount $usb_mount_point; + else + echo "-------------> log error: couldn't mount usb("$usb_partition") <-------------" + fi + fi +} + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + sleep 2 + error_inf_write_usb $1 + check_and_umount_for_safe; + echo "*************************************************************************" + echo "" + exit 1; +} + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#fdisk_SSD 使用fdisk进行分区 必要 +#format_all_partition 格式化所有分区 必要 +#copy_file_to_backup 复制文件到backup分区 必要 + +#检查文件是否齐全 +check_file_for_safe() +{ + #检查是不是缺少部分文件,不然分了区才说没文件系统,那么原来的系统就会丢失。 + #能来这里执行,就代表本来就有uImage + echo "-------------> stage1 check_file_for_safe <-------------" + if [ ! -f $usb_mount_point"/install/rootfs.tar.gz" ]; then + error_inf_print "Error! not found "$usb_mount_point"/install/rootfs.tar.gz please check your USB disk" + exit 1; + fi +} + +#进行分区 +#默认2分区 +#有fdisk.txt按fdisk.txt来分 +#有名字为4part的文件, 那么4分区来分 +#有名字为twosys的文件, 那么按乒乓系统的份额分(backup大点) +fdisk_SSD() +{ + echo "-------------> stage1.1 fdisk disk <-------------" + #分区信息导入 + if [ -f $usb_mount_point"/install/fdisk.txt" ]; then + /home/install_fdisk_analysis.sh 1 $usb_mount_point"/install/fdisk.txt" + elif [ -e $usb_mount_point"/install/4part" ]; then + /home/install_fdisk_analysis.sh 2 "4part" + elif [ -e $usb_mount_point"/install/twosys" ]; then + /home/install_fdisk_analysis.sh 2 "twosys" + elif [ -e $usb_mount_point"/install/twosys_3" ]; then + /home/install_fdisk_analysis.sh 2 "twosys_3" + else + /home/install_fdisk_analysis.sh + fi + sync; + #查看分区表的变化 + echo "" + fdisk -l | grep "/dev/sda"; + sleep 1; + return 0; +} + +#相关分区 +#所有分区,这是格式化分区的函数 +format_all_partition() +{ + # sda1 / usb1 + # sda2 data usb2 + # sda3 swap usb3 + # sda4 backup usb4 + + #分区格式化 + echo "-------------> stage1.2 format / partition --- start <-------------" + mke2fs -t ext4 -L rootfs -F $root_partition -O ^metadata_csum >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format / partition --- success <-------------" + else + error_inf_print "Error! format / partition failed! please check partition info and try again" + exit 1; + fi + sync + + if [ -e $data_partition ]; then + echo "-------------> stage1.2 format data partition --- start <-------------" + mke2fs -t ext4 -L data -F $data_partition >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format data partition --- success <-------------" + else + error_inf_print "Error! format data partition failed! please check partition info and try again" + exit 1; + fi + sync + fi + + echo "-------------> stage1.2 format swap partition --- start <-------------" + if [ -e $swap_partition ]; then + mkswap $swap_partition >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format swap partition --- success <-------------" + else + error_inf_print "Error! format swap partition failed! please check partition info and try again" + exit 1; + fi + sync + fi + + if [ -e $backup_partition ]; then + echo "-------------> stage1.2 format backup partition --- start <-------------" + mke2fs -t ext4 -L rootfs -F $backup_partition -O ^metadata_csum >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.2 format backup partition --- success <-------------" + else + error_inf_print "Error! format backup partition failed! please check partition info and try again" + exit 1; + fi + sync + fi + + sleep 1; + return 0; +} + +#相关分区 +#存放rootfs.tar.gz的分区 sda1或者sda4 +#U盘 +#把U盘里面的内核和文件系统复制到SSD +copy_file_to_SSD() +{ + echo "-------------> stage1.3: copy file to SSD <-------------" + + mount $1 $2; + if mountpoint -q $2; then + sleep 1; + #检查是否存在用于恢复用的busybox制作的系统 + #如果有,那么就把系统复制到备份分区,并且改名ramdisk.gz(和Recovery System对应) + #如果没有,那么就会提示找不到,然后到时候Recovery System则无法使用,可以人为手动加备份分区只要名字是ramdisk.gz即可 + #220719 统一 ramdisk,gz 和 ramdisk-bak.gz 之后 此处不应该是复制ramdisk-bak.gz了 + if [ -e $backup_partition ]; then + # if [ -f $usb_mount_point/install/ramdisk-bak.gz ]; then + # cp -pv /mnt/usb0/install/ramdisk-bak.gz $2/ramdisk.gz + # wait $! + # else + # echo "-------------> stage1.3 warning: not found ramdisk-bak.gz <-------------"; + # echo "-------------> stage1.3 warning: it will invalidate Recovery System <-------------"; + # sync; + # fi + cp -pv /mnt/usb0/install/ramdisk.gz $2/ramdisk.gz + fi + + echo " -----> copy uImage" + cp -pv $usb_mount_point/install/uImage $2 + wait $! + + echo " -----> copy rootfs.tar.gz (wait a few minutes)" + rsync -P $usb_mount_point/install/rootfs.tar.gz $2 + wait $! + sync + + umount $2; + else + error_inf_print "Error! mount "$1" failed! Counldn't copy file to SSD! Please try again" + exit 1; + fi +} + +#相关分区 +#U盘 +start_stage1_by_local() +{ + #挂载U盘 + mount -t vfat -o utf8 $usb_partition $usb_mount_point; + sleep 1; + if mountpoint -q $usb_mount_point; then + if [ -f $usb_mount_point/install/error.log ]; then + echo "-------------> stage1 warning: found error.log <-------------" + echo "-------------> stage1 warning: backup this error.log <-------------" + mv $usb_mount_point/install/error.log $usb_mount_point/install/error.log.bak + fi + + echo "-------------> stage1 mount "$usb_partition" success <-------------"; + + check_file_for_safe; + echo "" + fdisk_SSD; + echo "" + format_all_partition; + echo "" + #参数含义:参数1 backup分区的设备 参数2 backup分区的挂载点 + if [ -e $backup_partition ]; then + copy_file_to_SSD $backup_partition $backup_mount_point + else + copy_file_to_SSD $root_partition $root_mount_point + fi + + umount /mnt/usb0; + else + error_inf_print "mount USB disk failed! Please check USB format(fat32?) and try again!" + fi +} + +check_usb_name() +{ + if [ ! -e $usb_partition ]; then + # echo "warning!!! not found "$usb_partition + # echo "warning!!! will mount "$usb_partition_bak" as UDisk" + usb_partition=$usb_partition_bak + fi +} + +check_mmc_name() +{ + if [ ! -e $mmc_partition ]; then + # echo "warning!!! not found "$mmc_partition + # echo "warning!!! will mount "$mmc_partition_bak" as mmc" + mmc_partition=$mmc_partition_bak + fi +} + +check_install_file() +{ + check_usb_name + check_mmc_name + + if [ ! -e $usb_partition ]; then + usb_partition=$mmc_partition + else + mount -t vfat -o utf8 $usb_partition $usb_mount_point; + if [ ! -d $usb_mount_point"/install" ]; then + echo "warning!!! not found /install dir in usb" + echo "use tf card install way" + umount $usb_mount_point; + usb_partition=$mmc_partition + else + umount $usb_mount_point; + fi + fi +} + +check_cmdline() +{ + uboot_install_fix=0 + install_way=0 + ins_way=$(cat /proc/cmdline | grep ins_way) + if [ -z "$ins_way" ]; then + return 1; + fi + ins_way=$(cat /proc/cmdline | grep ins_way=usb) + if [ ! -z "$ins_way" ]; then + install_way=1 + uboot_install_fix=1 + check_usb_name + return 0 + fi + ins_way=$(cat /proc/cmdline | grep ins_way=mmc) + if [ ! -z "$ins_way" ]; then + install_way=2 + uboot_install_fix=1 + check_mmc_name + return 0 + fi + ins_way=$(cat /proc/cmdline | grep ins_way=tftp) + if [ ! -z "$ins_way" ]; then + install_way=3 + uboot_install_fix=1 + return 0 + fi +} + +stage1_entrance() +{ + check_cmdline + + if [ $uboot_install_fix -eq 1 ]; then + if [ $install_way -eq 3 ]; then + /home/sys_config_tool 1 + stage1_result=$? + elif [ $install_way -eq 2 ]; then + usb_partition=$mmc_partition + start_stage1_by_local; + stage1_result=$? + elif [ $install_way -eq 1 ]; then + start_stage1_by_local; + stage1_result=$? + else + stage1_result=1 + fi + else + #这是没有在cmdline里面指定安装方式,旧方法,为了兼容 + check_install_file; + if [ ! -e $usb_partition ]; then + echo "*** tip: not found usb or mmc, use network to download system ***" + /home/sys_config_tool 1 + stage1_result=$? + else + start_stage1_by_local; + stage1_result=$? + fi + fi + echo "-------------> stage1 end <-------------" + if [ $stage1_result -ne 0 ]; then + return 1; + fi +} + +###################start########################## +###################start########################## +###################start########################## + +create_all_mount_point; +stage1_entrance; +if [ $? -ne 0 ]; then + exit 1; +fi +/home/install_disk.sh $usb_partitions diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/recover_backup.sh b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/recover_backup.sh new file mode 100755 index 00000000..ccfdfac9 --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/recover_backup.sh @@ -0,0 +1,178 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 1*********************************" +echo "************************this stage for format SSD************************" +echo "*************************************************************************" +echo " "; +sleep 2; + +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + +root_mount_point="/mnt/usb1" +data_mount_point="/mnt/usb2" +swap_mount_point="/mnt/usb3" +backup_mount_point="/mnt/usb4" + +create_all_mount_point() +{ + if [ ! -d $root_mount_point ]; then + mkdir $root_mount_point + fi + if [ ! -d $data_mount_point ]; then + mkdir $data_mount_point + fi + if [ ! -d $swap_mount_point ]; then + mkdir $swap_mount_point + fi + if [ ! -d $backup_mount_point ]; then + mkdir $backup_mount_point + fi +} + +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q $i; then + sync; + umount $i; + fi + } + done +} + +create_all_mount_point() +{ + if [ ! -d $root_mount_point ]; then + mkdir $root_mount_point + fi + if [ ! -d $data_mount_point ]; then + mkdir $data_mount_point + fi + if [ ! -d $swap_mount_point ]; then + mkdir $swap_mount_point + fi + if [ ! -d $backup_mount_point ]; then + mkdir $backup_mount_point + fi +} + +#错误信息输出到backup分区里的error.log +#注意安装系统时backup分区不要存放error.log +#否则会先改名error.log.bak,多次执行后,这样可能会造成数据丢失 +error_inf_write_backup() +{ + if mountpoint -q $backup_mount_point; then + echo $1 >> $backup_mount_point"/error.log"; + else + mount $backup_partition $backup_mount_point; + if mountpoint -q $backup_mount_point; then + echo $1 >> $backup_mount_point"/error.log"; + sync; + umount $backup_mount_point; + else + echo "-------------> log error: couldn't mount backup partition("$backup_partition") <-------------" + fi + fi +} + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + error_inf_write_backup $1 + check_and_umount_for_safe; + echo "*************************************************************************" + echo "" + exit 1; +} + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#format_all_partition 格式化所有分区 必要 + +#检查文件是否齐全 +check_file_for_safe() +{ + echo "-------------> stage1 check_file_for_safe <-------------" + #检查是不是缺少部分文件,不然格式化了才说没文件系统,那么原来的系统就会丢失。 + #能来这里执行,就代表本来就有uImage + if [ ! -f $backup_mount_point"/uImage" ]; then + error_inf_print "Error! not found uImage in backup partition!" + fi + if [ ! -f $backup_mount_point"/rootfs.tar.gz" ]; then + error_inf_print "Error! not found rootfs.tar.gz in backup partition!" + fi +} + +#相关分区 +#所有分区,这是格式化分区的函数 +format_all_partition() +{ + #分区格式化 + if [ -e $root_partition ]; then + echo "-------------> stage1.1 format / partition --- start <-------------" + mke2fs -t ext4 -L rootfs -F $root_partition -O ^metadata_csum >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.1 format / partition --- success <-------------" + else + error_inf_print "Error! format / partition failed! Please try again" + fi + sync + fi + + if [ -e $swap_partition ]; then + echo "-------------> stage1.1 format swap partition --- start <-------------" + mkswap $swap_partition >/dev/null; + if [ $? -eq 0 ]; then + echo "-------------> stage1.1 format swap partition --- success <-------------" + else + error_inf_print "Error! format swap partition failed! Please try again" + fi + sync + fi + return 0; +} + +start_stage1() +{ + sleep 1; + sync; + create_all_mount_point; + mount $backup_partition $backup_mount_point; + if mountpoint -q $backup_mount_point; then + if [ -f $backup_mount_point"/error.log" ]; then + echo "-------------> stage1 warning: found error.log <-------------" + echo "-------------> stage1 warning: rename error.log as error.log.bak <-------------" + mv $backup_mount_point/error.log $backup_mount_point/error.log.bak + fi + + check_file_for_safe; + if [ $? -eq 1 ]; then + exit 1; + fi + umount $backup_mount_point; + fi + format_all_partition; +} + +###################start########################## +###################start########################## +###################start########################## + +check_and_umount_for_safe; +start_stage1; +check_and_umount_for_safe; + +echo "-------------> stage1 end <-------------" + +/home/recover_disk.sh diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/recover_disk.sh b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/recover_disk.sh new file mode 100755 index 00000000..84afef83 --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/recover_disk.sh @@ -0,0 +1,226 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 2*********************************" +echo "*******************uzip system and setup it with fstab*******************" +echo "*************************************************************************" +echo " "; +sleep 2; + +root_partition="/dev/sda1" +data_partition="/dev/sda2" +swap_partition="/dev/sda3" +backup_partition="/dev/sda4" + +root_mount_point="/mnt/usb1" +data_mount_point="/mnt/usb2" +swap_mount_point="/mnt/usb3" +backup_mount_point="/mnt/usb4" + +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q $i; then + sync; + umount $i; + fi + } + done +} + +#错误信息输出到backup分区里的error.log +#注意安装系统时backup分区不要存放error.log +#否则会先改名error.log.bak,多次执行后,这样可能会造成数据丢失 +error_inf_write_backup() +{ + if mountpoint -q $backup_mount_point; then + echo $1 >> $backup_mount_point"/error.log"; + else + mount $backup_partition $backup_mount_point; + if mountpoint -q $backup_mount_point; then + echo $1 >> $backup_mount_point"/error.log"; + sync; + umount $backup_mount_point; + else + echo "-------------> log error: couldn't mount backup partition("$backup_partition") <-------------" + fi + fi +} + +error_inf_print() +{ + echo ""; + echo "*************************************************************************" + echo "********************************Error Log********************************" + echo "*************************************************************************" + echo $1 + error_inf_write_backup $1 + check_and_umount_for_safe; + echo "*************************************************************************" + echo "" + exit 1; +} + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#uzip_rootfs 解压文件系统到根文件分区 必要 +#copy_uimage_to_boot 复制内核到/boot目录(没做boot分区)必要 +#copy_file_to_data 复制home opt var到data分区 不一定,根据fstab而定 + +uzip_rootfs() +{ + echo "-------------> stage2.1 uzip_rootfs <-------------"; + + mount $root_partition $root_mount_point; + sync; + mount $backup_partition $backup_mount_point; + sync; + + if [ -e "/dev/fb0" ]; then + show_process_dev="/dev/tty0" + else + if [ -e "/dev/console" ]; then + show_process_dev="/dev/console" + else + show_process_dev="/dev/tty0" + fi + fi + + echo "can observe process in screen" + pv $backup_mount_point/rootfs.tar.gz 2>$show_process_dev | tar -xzf - -C $root_mount_point; + if [ $? -ne 0 ]; then + error_inf_print "Error! unzip rootfs.tar.gz failed!" + fi + + check_and_umount_for_safe; + return 0; +} + +copy_uimage_to_boot() +{ + echo "-------------> stage2.2 copy_uimage_to_boot <-------------"; + + mount $root_partition $root_mount_point; + sync; + mount $backup_partition $backup_mount_point; + sync; + + cp -a $backup_mount_point/uImage $root_mount_point/boot/; + if [ $? -ne 0 ]; then + error_inf_print "Error! copy uImage to /boot/ failed!" + fi + + check_and_umount_for_safe; + return 0; +} + +copy_fstab() +{ + echo "-------------> stage2.3 copy fstab to /etc/fstab <-------------" + sda1_partition_target=0 + sda2_partition_target=0 + sda3_partition_target=0 + sda4_partition_target=0 + if [ -e $root_partition ]; then + sda1_partition_target=1; + fi + if [ -e $data_partition ]; then + sda2_partition_target=1; + fi + if [ -e $swap_partition ]; then + sda3_partition_target=1; + fi + if [ -e $backup_partition ]; then + sda4_partition_target=1; + fi + + mount $root_partition $root_mount_point; + sync; + mv $root_mount_point/etc/fstab $root_mount_point/etc/fstab_ori; + cp "/home/fstab/"$sda4_partition_target$sda3_partition_target$sda2_partition_target$sda1_partition_target"part_fstab" $root_mount_point/etc/fstab; + + check_and_umount_for_safe; + return 0; +} + + +#相关分区 +#data 分区 +#/ 分区 +#/分区里面的/home /opt /var复制到data分区,然后删除自身的/home /opt /var +copy_file_to_data() +{ + echo "-------------> stage2.4 update data partition <-------------"; + + mount $root_partition $root_mount_point + sync + mount $data_partition $data_mount_point + sync + + #必须重置dpkg的记录,否则就会提示什么包都装好了,但是程序提示找不到 + # if [ -d $2/var/lib/dpkg ]; then + # { + # echo "-------------> stage2.3 delete dpkg inf in data partition <-------------" + # rm -r $2/var/lib/dpkg; + # sync; + # } + # fi + # echo "-------------> stage2.3 copy dpkg inf to data partition <-------------" + # cp -a $4/var/lib/dpkg $2/var/lib + # sync; + # sleep 1; + + #先保留mysql的数据,然后删除var,复制var过来,然后再恢复mysql的数据 + if [ -d $data_mount_point/var ]; then + if [ -d $data_mount_point/var/lib/mysql ]; then + echo "-------------> stage2.3 backup mysql data to data partition <-------------"; + cp -a $data_mount_point/var/lib/mysql $data_mount_point/; + sync; + fi + rm -r $data_mount_point/var + fi + cp -a $root_mount_point/var $data_mount_point/var + if [ -d $data_mount_point/mysql ]; then + rm -r $data_mount_point/var/lib/mysql 2>/dev/null + cp -a $data_mount_point/mysql $data_mount_point/var/lib/mysql + fi + rm -r $root_mount_point/var; + sync; + + rm -r $root_mount_point/home; + sync; + + rm -r $root_mount_point/opt; + sync; + + check_and_umount_for_safe; +} + +#相关分区 +#backup分区 +start_stage2() +{ + #执行三个阶段的操作 + uzip_rootfs; + copy_uimage_to_boot; + copy_fstab; + if [ -e $data_partition ]; then + copy_file_to_data; + fi +} + +###################start########################## +###################start########################## +###################start########################## + +#防止第一个阶段因未知原因而导致没有解除挂载 +check_and_umount_for_safe; +start_stage2; +check_and_umount_for_safe; + +echo "-------------> stage2 end <-------------" + +/home/recover_reboot.sh diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/recover_reboot.sh b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/recover_reboot.sh new file mode 100755 index 00000000..70db3c6f --- /dev/null +++ b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/recover_reboot.sh @@ -0,0 +1,35 @@ +echo " "; +echo "*************************************************************************" +echo "*********************************STARG 3*********************************" +echo "*******************this stage for check log and reboot*******************" +echo "*************************************************************************" +echo " "; + +# sda1 / usb1 +# sda2 data usb2 +# sda3 swap usb3 +# sda4 backup usb4 + +#防止前面的脚本出现错误,导致没有解除挂载一些已经挂载的分区。 +check_and_umount_for_safe() +{ + for i in /mnt/usb*; do + { + if mountpoint -q i; then + { + sync; + umount i; + } + fi + } + done +} + +#防止前面的脚本出现错误,导致没有解除挂载一些已经挂载的分区。 +check_and_umount_for_safe; +/home/sys_config_tool + +echo "-------------> stage3 reboot system <-------------" +#检查是否有错误记录文件,则之前的脚本执行时出错 +reboot -f +echo "-------------> stage3 end <-------------" diff --git a/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/sys_config_tool b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/sys_config_tool new file mode 100755 index 00000000..7152bc8a Binary files /dev/null and b/board/loongson/ls2k500/rootfs_ramdisk_overlay/home/sys_config_tool differ diff --git a/board/loongson/ls2k500/rootfs_rt_overlay/boot/.gitignore b/board/loongson/ls2k500/rootfs_rt_overlay/boot/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/board/loongson/ls2k500/rootfs_rt_overlay/etc/ssh/sshd_config b/board/loongson/ls2k500/rootfs_rt_overlay/etc/ssh/sshd_config new file mode 100644 index 00000000..83b371e1 --- /dev/null +++ b/board/loongson/ls2k500/rootfs_rt_overlay/etc/ssh/sshd_config @@ -0,0 +1,117 @@ +# $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $ + +# This is the sshd server system-wide configuration file. See +# sshd_config(5) for more information. + +# This sshd was compiled with PATH=/bin:/sbin:/usr/bin:/usr/sbin + +# The strategy used for options in the default sshd_config shipped with +# OpenSSH is to specify options with their default value where +# possible, but leave them commented. Uncommented options override the +# default value. + +#Port 22 +#AddressFamily any +#ListenAddress 0.0.0.0 +#ListenAddress :: + +#HostKey /etc/ssh/ssh_host_rsa_key +#HostKey /etc/ssh/ssh_host_ecdsa_key +#HostKey /etc/ssh/ssh_host_ed25519_key + +# Ciphers and keying +#RekeyLimit default none + +# Logging +#SyslogFacility AUTH +#LogLevel INFO + +# Authentication: + +#LoginGraceTime 2m +#PermitRootLogin prohibit-password +PermitRootLogin yes +#StrictModes yes +#MaxAuthTries 6 +#MaxSessions 10 + +#PubkeyAuthentication yes + +# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 +# but this is overridden so installations will only check .ssh/authorized_keys +AuthorizedKeysFile .ssh/authorized_keys + +#AuthorizedPrincipalsFile none + +#AuthorizedKeysCommand none +#AuthorizedKeysCommandUser nobody + +# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts +#HostbasedAuthentication no +# Change to yes if you don't trust ~/.ssh/known_hosts for +# HostbasedAuthentication +#IgnoreUserKnownHosts no +# Don't read the user's ~/.rhosts and ~/.shosts files +#IgnoreRhosts yes + +# To disable tunneled clear text passwords, change to no here! +#PasswordAuthentication yes +#PermitEmptyPasswords no + +# Change to no to disable s/key passwords +#ChallengeResponseAuthentication yes + +# Kerberos options +#KerberosAuthentication no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes +#KerberosGetAFSToken no + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes + +# Set this to 'yes' to enable PAM authentication, account processing, +# and session processing. If this is enabled, PAM authentication will +# be allowed through the ChallengeResponseAuthentication and +# PasswordAuthentication. Depending on your PAM configuration, +# PAM authentication via ChallengeResponseAuthentication may bypass +# the setting of "PermitRootLogin without-password". +# If you just want the PAM account and session checks to run without +# PAM authentication, then enable this but set PasswordAuthentication +# and ChallengeResponseAuthentication to 'no'. +#UsePAM no + +#AllowAgentForwarding yes +#AllowTcpForwarding yes +#GatewayPorts no +#X11Forwarding no +#X11DisplayOffset 10 +#X11UseLocalhost yes +#PermitTTY yes +#PrintMotd yes +#PrintLastLog yes +#TCPKeepAlive yes +#PermitUserEnvironment no +#Compression delayed +#ClientAliveInterval 0 +#ClientAliveCountMax 3 +#UseDNS no +#PidFile /var/run/sshd.pid +#MaxStartups 10:30:100 +#PermitTunnel no +#ChrootDirectory none +#VersionAddendum none + +# no default banner path +#Banner none + +# override default of no subsystems +Subsystem sftp /usr/libexec/sftp-server + +# Example of overriding settings on a per-user basis +#Match User anoncvs +# X11Forwarding no +# AllowTcpForwarding no +# PermitTTY no +# ForceCommand cvs server diff --git a/board/loongson/ls2k500/rootfs_rt_overlay/etc/udev/rules.d/80-net-setup-link.rules b/board/loongson/ls2k500/rootfs_rt_overlay/etc/udev/rules.d/80-net-setup-link.rules new file mode 100644 index 00000000..7507a2f2 --- /dev/null +++ b/board/loongson/ls2k500/rootfs_rt_overlay/etc/udev/rules.d/80-net-setup-link.rules @@ -0,0 +1,13 @@ +# do not edit this file, it will be overwritten on update + +SUBSYSTEM!="net", GOTO="net_setup_link_end" + +IMPORT{builtin}="path_id" + +ACTION=="remove", GOTO="net_setup_link_end" + +IMPORT{builtin}="net_setup_link" + +NAME=="", ENV{ID_NET_NAME}!="", NAME="$env{ID_NET_SLOT}" + +LABEL="net_setup_link_end" diff --git a/board/loongson/ubinize-128m.cfg b/board/loongson/ubinize-128m.cfg new file mode 100644 index 00000000..eeb443f4 --- /dev/null +++ b/board/loongson/ubinize-128m.cfg @@ -0,0 +1,9 @@ +[ubifs] + mode=ubi + image=BR2_ROOTFS_UBIFS_PATH + vol_id=0 + vol_size=100MiB + vol_type=dynamic + vol_alignment=1 + vol_name=rootfs + vol_flags=autoresize diff --git a/board/loongson/ubinize-465m.cfg b/board/loongson/ubinize-465m.cfg new file mode 100644 index 00000000..2f06c52d --- /dev/null +++ b/board/loongson/ubinize-465m.cfg @@ -0,0 +1,9 @@ +[ubifs] + mode=ubi + image=BR2_ROOTFS_UBIFS_PATH + vol_id=0 + vol_size=465MiB + vol_type=dynamic + vol_alignment=1 + vol_name=rootfs + vol_flags=autoresize diff --git a/board/loongson/ubinize-70M.cfg b/board/loongson/ubinize-70M.cfg new file mode 100644 index 00000000..c7a9455a --- /dev/null +++ b/board/loongson/ubinize-70M.cfg @@ -0,0 +1,9 @@ +[ubifs] + mode=ubi + image=BR2_ROOTFS_UBIFS_PATH + vol_id=0 + vol_size=70MiB + vol_type=dynamic + vol_alignment=1 + vol_name=rootfs + vol_flags=autoresize diff --git a/board/loongson/ubinize-961m.cfg b/board/loongson/ubinize-961m.cfg new file mode 100644 index 00000000..4c8f8040 --- /dev/null +++ b/board/loongson/ubinize-961m.cfg @@ -0,0 +1,9 @@ +[ubifs] + mode=ubi + image=BR2_ROOTFS_UBIFS_PATH + vol_id=0 + vol_size=961MiB + vol_type=dynamic + vol_alignment=1 + vol_name=rootfs + vol_flags=autoresize diff --git a/board/loongson/ubinize.cfg b/board/loongson/ubinize.cfg new file mode 100644 index 00000000..8f4f3deb --- /dev/null +++ b/board/loongson/ubinize.cfg @@ -0,0 +1,8 @@ +[ubifs] + mode=ubi + image=BR2_ROOTFS_UBIFS_PATH + vol_id=0 + vol_size=230MiB + vol_type=dynamic + vol_name=rootfs + vol_flags=autoresize diff --git a/board/microchip/sam9x60ek_mmc/genimage.cfg b/board/microchip/sam9x60ek_mmc/genimage.cfg new file mode 100644 index 00000000..c4158109 --- /dev/null +++ b/board/microchip/sam9x60ek_mmc/genimage.cfg @@ -0,0 +1,31 @@ +# Image for SD card boot on Microchip SAM9X60-EK +# +image boot.vfat { + vfat { + files = { + "zImage", + "at91-sam9x60ek.dtb", + "boot.bin", + "u-boot.bin" + } + } + size = 16M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 1M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/minnowboard/fs-overlay-graphical/etc/X11/Xsession b/board/minnowboard/fs-overlay-graphical/etc/X11/Xsession new file mode 100755 index 00000000..d8862f17 --- /dev/null +++ b/board/minnowboard/fs-overlay-graphical/etc/X11/Xsession @@ -0,0 +1,7 @@ +# Start a terminal on the top left corner +xterm -geom 80x30+0+0 & + +# OpenGL demo +glmark2 & + +exec /usr/bin/openbox-session diff --git a/board/minnowboard/fs-overlay-graphical/etc/asound.conf b/board/minnowboard/fs-overlay-graphical/etc/asound.conf new file mode 100644 index 00000000..b75b2383 --- /dev/null +++ b/board/minnowboard/fs-overlay-graphical/etc/asound.conf @@ -0,0 +1,4 @@ +# Customize ALSA: +# the HDMI PCM is at card=0, device=3 (i.e. hw:0,3) +defaults.pcm.card 0 +defaults.pcm.device 3 diff --git a/board/minnowboard/genimage.cfg b/board/minnowboard/genimage.cfg new file mode 100644 index 00000000..c5b07179 --- /dev/null +++ b/board/minnowboard/genimage.cfg @@ -0,0 +1,35 @@ +# Create an image of the efi partition +image efi-part.vfat { + vfat { + file startup.nsh { + image = "efi-part/startup.nsh" + } + file EFI { + image = "efi-part/EFI" + } + file bzImage { + image = "bzImage" + } + } + size=10M +} + +# Create the sdcard image, pulling in +# * the image created by buildroot +# * the efi-partition created above +image sdcard.img { + hdimage { + gpt = true + } + + partition boot { + partition-type-uuid = U + image = "efi-part.vfat" + } + + partition rootfs { + partition-type-uuid = L + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/minnowboard/grub.cfg b/board/minnowboard/grub.cfg new file mode 100644 index 00000000..1f75f4d7 --- /dev/null +++ b/board/minnowboard/grub.cfg @@ -0,0 +1,6 @@ +set default="0" +set timeout="5" + +menuentry "Buildroot" { + linux /bzImage root=PARTLABEL=rootfs rootwait console=tty0 console=ttyS0,115200 net.ifnames=0 +} diff --git a/board/minnowboard/linux.config b/board/minnowboard/linux.config new file mode 100644 index 00000000..928e353c --- /dev/null +++ b/board/minnowboard/linux.config @@ -0,0 +1,61 @@ +CONFIG_SYSVIPC=y +CONFIG_NO_HZ=y +CONFIG_SMP=y +CONFIG_X86_INTEL_LPSS=y +CONFIG_MATOM=y +CONFIG_EFI=y +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y +CONFIG_X86_INTEL_PSTATE=y +CONFIG_X86_ACPI_CPUFREQ=y +CONFIG_INTEL_IDLE=y +CONFIG_IA32_EMULATION=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_PCI=y +CONFIG_BLK_DEV_SD=y +CONFIG_CHR_DEV_SG=y +CONFIG_ATA=y +CONFIG_SATA_AHCI=y +CONFIG_ATA_PIIX=y +CONFIG_NETDEVICES=y +CONFIG_R8169=y +CONFIG_IGB=y +CONFIG_INPUT_EVDEV=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_DW=y +CONFIG_I2C_I801=y +CONFIG_I2C_DESIGNWARE_PLATFORM=y +CONFIG_I2C_DESIGNWARE_PCI=y +CONFIG_SPI=y +CONFIG_SPI_DESIGNWARE=y +CONFIG_SPI_PXA2XX=y +CONFIG_PINCTRL_BAYTRAIL=y +CONFIG_GPIOLIB=y +CONFIG_GPIO_SYSFS=y +CONFIG_AGP=y +CONFIG_DRM=y +CONFIG_DRM_LOAD_EDID_FIRMWARE=y +CONFIG_DRM_I915=y +CONFIG_SOUND=y +CONFIG_SND=y +# CONFIG_SND_DRIVERS is not set +CONFIG_SND_HDA_INTEL=y +CONFIG_SND_HDA_CODEC_HDMI=y +# CONFIG_SND_SPI is not set +# CONFIG_SND_USB is not set +CONFIG_USB=y +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_STORAGE=y +CONFIG_NOP_USB_XCEIV=y +CONFIG_MMC=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_PCI=y +CONFIG_MMC_SDHCI_ACPI=y +CONFIG_PWM=y +CONFIG_EXT4_FS=y +CONFIG_UNWINDER_FRAME_POINTER=y diff --git a/board/minnowboard/post-build.sh b/board/minnowboard/post-build.sh new file mode 100755 index 00000000..24b8c053 --- /dev/null +++ b/board/minnowboard/post-build.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +cp -v board/minnowboard/grub.cfg ${BINARIES_DIR}/efi-part/EFI/BOOT/grub.cfg + +# Add a console on tty1 +if [ -e ${TARGET_DIR}/etc/inittab ]; then + grep -qE '^tty1::' ${TARGET_DIR}/etc/inittab || \ + sed -i '/GENERIC_SERIAL/a\ +tty1::respawn:/sbin/getty -L tty1 0 vt100 # HDMI console' ${TARGET_DIR}/etc/inittab +fi diff --git a/board/minnowboard/readme.txt b/board/minnowboard/readme.txt new file mode 100644 index 00000000..fdbb81e3 --- /dev/null +++ b/board/minnowboard/readme.txt @@ -0,0 +1,28 @@ +How to get started with the MinnowBoard MAX +=========================================== + +1. Build + + Apply the defconfig: + + $ make minnowboard_max_defconfig + + Add any additional packages required and build: + + $ make + +2. Write the SD card + + The build process will create a SD card image in output/images. + Write the image to an mSD card, insert into the MinnowBoard MAX + and power the board on. + + $ dd if=output/images/sdcard.img of=/dev/mmcblk0; sync + + The system starts two consoles: one on the serial port + and one on HDMI. + +3. Enjoy + +Additional information about this board can be found at +http://www.minnowboard.org/. diff --git a/board/nexbox/a95x/boot.txt b/board/nexbox/a95x/boot.txt new file mode 100644 index 00000000..eef1c8ca --- /dev/null +++ b/board/nexbox/a95x/boot.txt @@ -0,0 +1,11 @@ +setenv bootargs console=ttyAML0,115200 earlyprintk root=PARTUUID=feedc0de-02 rootwait + +fatload mmc 0:1 0x01080000 uImage + +if itest.s "${aml_dt}" == "gxl_p212_2g"; then + fatload mmc 0:1 $dtb_mem_addr meson-gxl-s905x-nexbox-a95x.dtb +else + fatload mmc 0:1 $dtb_mem_addr meson-gxbb-nexbox-a95x.dtb +fi + +bootm 0x1080000 - $dtb_mem_addr diff --git a/board/nexbox/a95x/genimage.cfg b/board/nexbox/a95x/genimage.cfg new file mode 100644 index 00000000..63b96107 --- /dev/null +++ b/board/nexbox/a95x/genimage.cfg @@ -0,0 +1,30 @@ +image boot.vfat { + vfat { + files = { + "uImage", + "meson-gxbb-nexbox-a95x.dtb", + "meson-gxl-s905x-nexbox-a95x.dtb", + "boot.scr" + } + } + size = 32M +} + +image sdcard.img { + hdimage { + # for root=PARTUUID support + disk-signature = 0xfeedc0de + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/nexbox/a95x/post-build.sh b/board/nexbox/a95x/post-build.sh new file mode 100755 index 00000000..f8706f2d --- /dev/null +++ b/board/nexbox/a95x/post-build.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" +MKIMAGE=$HOST_DIR/bin/mkimage + +$MKIMAGE -C none -A arm64 -T script -d $BOARD_DIR/boot.txt $BINARIES_DIR/boot.scr + +# vendor u-boot uses uImage +if [ -e $BINARIES_DIR/Image ]; then + $MKIMAGE -A arm64 -O linux -T kernel -C none -a 0x1080000 -e 0x1080000 \ + -n linux -d $BINARIES_DIR/Image $BINARIES_DIR/uImage +fi diff --git a/board/nexbox/a95x/post-image.sh b/board/nexbox/a95x/post-image.sh new file mode 100755 index 00000000..359b4c9e --- /dev/null +++ b/board/nexbox/a95x/post-image.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" +GENIMAGE_CFG="${BOARD_DIR}/genimage.cfg" +GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp" + +rm -rf "${GENIMAGE_TMP}" + +genimage \ + --rootpath "${TARGET_DIR}" \ + --tmppath "${GENIMAGE_TMP}" \ + --inputpath "${BINARIES_DIR}" \ + --outputpath "${BINARIES_DIR}" \ + --config "${GENIMAGE_CFG}" diff --git a/board/nexbox/a95x/readme.txt b/board/nexbox/a95x/readme.txt new file mode 100644 index 00000000..e08b4e4e --- /dev/null +++ b/board/nexbox/a95x/readme.txt @@ -0,0 +1,48 @@ +Nexbox A95X + +Intro +===== + +Nexbox A95X is a low cost Android STB based around an Amlogic s905(x) SoC +(quad A53), 8/16GB eMMC and 1/2GB RAM. To use this defconfig, wires to the +internal UART solder pads must be added. See the linux-meson page for +details: + +http://linux-meson.com/doku.php?id=nexbox_a95x_s905 + +Both the s905 (gxbb) and s905x (gxl) variant is supported. + +This default configuration will allow you to start experimenting with the +buildroot environment for the A95X. With the current configuration it will +bring-up the board from microSD, and allow access through the serial +console. + +How to build it +=============== + +Configure Buildroot: + + $ make nexbox_a95x_defconfig + +Compile everything and build the SD card image: + + $ make + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto a microSD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + +How to boot +=========== + +Insert microSD card and connect serial cable. Power board and stop +U-Boot by pressing any key. Boot the system by typing: + +fatload mmc 0:1 0x1070000 boot.scr +autoscr 0x1070000 diff --git a/board/olimex/a10_olinuxino/boot.cmd b/board/olimex/a10_olinuxino/boot.cmd new file mode 120000 index 00000000..612c7455 --- /dev/null +++ b/board/olimex/a10_olinuxino/boot.cmd @@ -0,0 +1 @@ +../a20_olinuxino/boot.cmd \ No newline at end of file diff --git a/board/olimex/a10_olinuxino/genimage.cfg b/board/olimex/a10_olinuxino/genimage.cfg new file mode 120000 index 00000000..c21932fe --- /dev/null +++ b/board/olimex/a10_olinuxino/genimage.cfg @@ -0,0 +1 @@ +../a20_olinuxino/genimage.cfg \ No newline at end of file diff --git a/board/olimex/a10_olinuxino/post-build.sh b/board/olimex/a10_olinuxino/post-build.sh new file mode 120000 index 00000000..b3468960 --- /dev/null +++ b/board/olimex/a10_olinuxino/post-build.sh @@ -0,0 +1 @@ +../a20_olinuxino/post-build.sh \ No newline at end of file diff --git a/board/olimex/a10_olinuxino/readme.txt b/board/olimex/a10_olinuxino/readme.txt new file mode 100644 index 00000000..ba4bf691 --- /dev/null +++ b/board/olimex/a10_olinuxino/readme.txt @@ -0,0 +1,57 @@ +A10-OLinuXino-LIME + +Intro +===== + +These are open hardware boards, all based on the Allwinner A10 SoC. + +for more details about the boards see the following pages: + - https://www.olimex.com/Products/OLinuXino/open-source-hardware + - https://www.olimex.com/Products/OLinuXino/A10/A10-OLinuXino-LIME/ + +The following defconfigs are available: + - olimex_a10_olinuxino_lime_defconfig + for the A10-OLinuXino-LIME board using mainline kernel + +(see http://linux-sunxi.org/Linux_Kernel for more details) + +How to build it +=============== + +Configure Buildroot: + + $ make _defconfig + +Compile everything and build the rootfs image: + + $ make + +Result of the build +------------------- + +After building, you should get a tree like this: + + output/images/ + +-- boot.scr + +-- rootfs.ext2 + +-- rootfs.ext4 -> rootfs.ext2 + +-- sdcard.img + +-- sun4i-a10-olinuxino-lime.dtb (lime, mainline) + +-- u-boot.bin + +-- u-boot-sunxi-with-spl.bin + `-- zImage + + +How to write the SD card +======================== + +The sdcard.img file is a complete bootable image ready to be written +on the boot medium. To install it, simply copy the image to a uSD +card: + + # dd if=output/images/sdcard.img of=/dev/sdX + +Where 'sdX' is the device node of the uSD. + +Eject the SD card, insert it in the A10-OLinuXino board, and power it up. + diff --git a/board/olimex/a13_olinuxino/boot.cmd b/board/olimex/a13_olinuxino/boot.cmd new file mode 100644 index 00000000..4dd1c7b7 --- /dev/null +++ b/board/olimex/a13_olinuxino/boot.cmd @@ -0,0 +1,7 @@ +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +mmc dev 0 +fatload mmc 0 $kernel_addr_r zImage +fatload mmc 0 $fdt_addr_r sun5i-a13-olinuxino.dtb + +bootz $kernel_addr_r - $fdt_addr_r diff --git a/board/olimex/a13_olinuxino/genimage.cfg b/board/olimex/a13_olinuxino/genimage.cfg new file mode 100644 index 00000000..6f6b0b0b --- /dev/null +++ b/board/olimex/a13_olinuxino/genimage.cfg @@ -0,0 +1,34 @@ +image boot.vfat { + vfat { + files = { + "zImage", + "sun5i-a13-olinuxino.dtb", + "boot.scr" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/olimex/a13_olinuxino/post-build.sh b/board/olimex/a13_olinuxino/post-build.sh new file mode 100755 index 00000000..aa2a76bd --- /dev/null +++ b/board/olimex/a13_olinuxino/post-build.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +MKIMAGE=$HOST_DIR/bin/mkimage + +$MKIMAGE -A arm -O linux -T script -C none \ + -d board/olimex/a13_olinuxino/boot.cmd \ + ${BINARIES_DIR}/boot.scr diff --git a/board/olimex/a13_olinuxino/readme.txt b/board/olimex/a13_olinuxino/readme.txt new file mode 100644 index 00000000..b64e339f --- /dev/null +++ b/board/olimex/a13_olinuxino/readme.txt @@ -0,0 +1,43 @@ +A13-OLinuXino + +Intro +===== + +This default configuration will allow you to start experimenting with +the buildroot environment for the A13-OLinuXino. With the current +configuration it will bring-up the board, and allow access through the +serial console. + +For more details about the A13-OLinuXino: + +https://www.olimex.com/Products/OLinuXino/A13/A13-OLinuXino/open-source-hardware + +How to build it +=============== + +Configure Buildroot: + + $ make olimex_a13_olinuxino_defconfig + +Compile everything and build the rootfs image: + + $ make + +Note: you will need access to the internet to download the required +sources. + +How to write the SD card +======================== + +The sdcard.img file is a complete bootable image ready to be written +on the boot medium. To install it, simply copy the image to a micro SD +card: + + # dd if=output/images/sdcard.img of=/dev/sdX + +Notes: + - replace 'sdX' with the actual device with your micro SDcard, + - you may need to be root to do that (use 'sudo'). + +Eject the SD card, insert it in the A13-OLinuXino board, and power it +up. diff --git a/board/olimex/a20_olinuxino/boot.cmd b/board/olimex/a20_olinuxino/boot.cmd new file mode 100644 index 00000000..44d9239a --- /dev/null +++ b/board/olimex/a20_olinuxino/boot.cmd @@ -0,0 +1,5 @@ +setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p1 rootwait panic=10 ${extra} +ext4load mmc 0 0x49000000 /boot/${fdtfile} +ext4load mmc 0 0x46000000 /boot/zImage +env set fdt_high ffffffff +bootz 0x46000000 - 0x49000000 diff --git a/board/olimex/a20_olinuxino/genimage.cfg b/board/olimex/a20_olinuxino/genimage.cfg new file mode 100644 index 00000000..fc2f7f8d --- /dev/null +++ b/board/olimex/a20_olinuxino/genimage.cfg @@ -0,0 +1,17 @@ +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/olimex/a20_olinuxino/post-build.sh b/board/olimex/a20_olinuxino/post-build.sh new file mode 100755 index 00000000..d3f612f8 --- /dev/null +++ b/board/olimex/a20_olinuxino/post-build.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +cp $BINARIES_DIR/boot.scr $TARGET_DIR/boot/boot.scr diff --git a/board/olimex/a20_olinuxino/readme.txt b/board/olimex/a20_olinuxino/readme.txt new file mode 100644 index 00000000..504483b5 --- /dev/null +++ b/board/olimex/a20_olinuxino/readme.txt @@ -0,0 +1,69 @@ +A20-OLinuXino-LIME and A20-OLinuXino-MICRO + +Intro +===== + +These are open hardware boards, all based on the Allwinner A20 SoC. + +for more details about the boards see the following pages: + - https://www.olimex.com/Products/OLinuXino/open-source-hardware + - https://www.olimex.com/Products/OLinuXino/A20/A20-OLinuXino-MICRO/ + - https://www.olimex.com/Products/OLinuXino/A20/A20-OLinuXino-LIME/ + - https://www.olimex.com/Products/OLinuXino/A20/A20-OLinuXino-LIME2/ + +The following defconfigs are available: + - olimex_a20_olinuxino_micro_defconfig + for the A20-OLinuXino-MICRO board using mainline kernel + - olimex_a20_olinuxino_lime_defconfig + for the A20-OLinuXino-LIME board using mainline kernel + - olimex_a20_olinuxino_lime2_defconfig + for the A20-OLinuXino-LIME2 board using mainline kernel + +The Mainline Kernel is already a much better choice for a headless server. +And also the mainline kernel works fine even for a basic Linux desktop +system running on top of a simple framebuffer, which may be good enough for +the users who do not need fancy 3D graphics or video playback acceleration. + +(see http://linux-sunxi.org/Linux_Kernel for more details) + +How to build it +=============== + +Configure Buildroot: + + $ make _defconfig + +Compile everything and build the rootfs image: + + $ make + +Result of the build +------------------- + +After building, you should get a tree like this: + + output/images/ + +-- rootfs.ext2 + +-- rootfs.ext4 -> rootfs.ext2 + +-- sdcard.img + +-- sun7i-a20-olinuxino-lime.dtb (lime, mainline) + +-- sun7i-a20-olinuxino-lime2.dtb (lime2, mainline) + +-- sun7i-a20-olinuxino-micro.dtb (micro, mainline) + +-- u-boot.bin + +-- u-boot-sunxi-with-spl.bin + `-- zImage + + +How to write the SD card +======================== + +The sdcard.img file is a complete bootable image ready to be written +on the boot medium. To install it, simply copy the image to a uSD +card: + + # dd if=output/images/sdcard.img of=/dev/sdX + +Where 'sdX' is the device node of the uSD. + +Eject the SD card, insert it in the A20-OLinuXino board, and power it up. + diff --git a/board/olimex/a33_olinuxino/boot.cmd b/board/olimex/a33_olinuxino/boot.cmd new file mode 100644 index 00000000..44d9239a --- /dev/null +++ b/board/olimex/a33_olinuxino/boot.cmd @@ -0,0 +1,5 @@ +setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p1 rootwait panic=10 ${extra} +ext4load mmc 0 0x49000000 /boot/${fdtfile} +ext4load mmc 0 0x46000000 /boot/zImage +env set fdt_high ffffffff +bootz 0x46000000 - 0x49000000 diff --git a/board/olimex/a33_olinuxino/genimage.cfg b/board/olimex/a33_olinuxino/genimage.cfg new file mode 100644 index 00000000..fc2f7f8d --- /dev/null +++ b/board/olimex/a33_olinuxino/genimage.cfg @@ -0,0 +1,17 @@ +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/olimex/a33_olinuxino/post-build.sh b/board/olimex/a33_olinuxino/post-build.sh new file mode 100755 index 00000000..b4181206 --- /dev/null +++ b/board/olimex/a33_olinuxino/post-build.sh @@ -0,0 +1,2 @@ +#!/bin/sh +cp $BINARIES_DIR/boot.scr $TARGET_DIR/boot/boot.scr diff --git a/board/olimex/a33_olinuxino/readme.txt b/board/olimex/a33_olinuxino/readme.txt new file mode 100644 index 00000000..b1906020 --- /dev/null +++ b/board/olimex/a33_olinuxino/readme.txt @@ -0,0 +1,50 @@ +A33-OLinuXino + +Intro +===== + +This board is based on Allwinner A33 SoC. + +Home Page: https://www.olimex.com/Products/OLinuXino/A33/A33-OLinuXino/open-source-hardware +Wiki: https://wiki.amarulasolutions.com/bsp/sunxi/a33/Olimex-A33-Olinuxino.html + +How to build it +=============== + +Configure Buildroot: + + $ make olimex_a33_olinuxino_defconfig + +Build everything by running: + + $ make + +Result of the build +------------------- + +After building, you should get a tree like this: + +output/images/ +├── boot.scr +├── rootfs.ext2 +├── rootfs.ext4 -> rootfs.ext2 +├── rootfs.tar +├── sdcard.img +├── sun8i-a33-olinuxino.dtb +├── u-boot.bin +├── u-boot-sunxi-with-spl.bin +└── zImage + + +How to write the SD card +======================== + +The sdcard.img file is a complete bootable image ready to be written +on the boot medium. To install it, simply copy the image to a uSD +card: + + # dd if=output/images/sdcard.img of=/dev/sdX + +Where 'sdX' is the device node of the uSD. + +Eject the SD card, insert it in the A33-OLinuXino board, and power it up. diff --git a/board/olimex/a64-olinuxino/boot.cmd b/board/olimex/a64-olinuxino/boot.cmd new file mode 100644 index 00000000..28ed6d9d --- /dev/null +++ b/board/olimex/a64-olinuxino/boot.cmd @@ -0,0 +1,6 @@ +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +fatload mmc 0 $kernel_addr_r Image +fatload mmc 0 $fdt_addr_r sun50i-a64-olinuxino.dtb + +booti $kernel_addr_r - $fdt_addr_r diff --git a/board/olimex/a64-olinuxino/genimage.cfg b/board/olimex/a64-olinuxino/genimage.cfg new file mode 100644 index 00000000..328b68be --- /dev/null +++ b/board/olimex/a64-olinuxino/genimage.cfg @@ -0,0 +1,39 @@ +image boot.vfat { + vfat { + files = { + "Image", + "sun50i-a64-olinuxino.dtb", + "boot.scr" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition spl { + in-partition-table = "no" + image = "sunxi-spl.bin" + offset = 8192 + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot.itb" + offset = 40K + size = 1M # 1MB - 40K + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/olimex/a64-olinuxino/readme.txt b/board/olimex/a64-olinuxino/readme.txt new file mode 100644 index 00000000..342bdc77 --- /dev/null +++ b/board/olimex/a64-olinuxino/readme.txt @@ -0,0 +1,37 @@ +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the A64-OLinuXino. With the current configuration +it will bring-up the board, and allow access through the serial console. + +A64-OLinuXino link: +https://www.olimex.com/Products/OLinuXino/A64/ + +Wiki link: +https://openedev.amarulasolutions.com/display/ODWIKI/Olimex+A64-Olinuxino + +This configuration uses U-Boot mainline and kernel mainline. + +How to build +============ + + $ make olimex_a64_olinuxino_defconfig + $ make + +Note: you will need access to the internet to download the required +sources. + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + $ sudo sync + +Insert the micro SDcard in your A64-OLinuXino and power it up. The console +is on the serial line, 115200 8N1. diff --git a/board/olimex/imx233_olinuxino/linux-wifi.fragment b/board/olimex/imx233_olinuxino/linux-wifi.fragment new file mode 100644 index 00000000..b70dea2c --- /dev/null +++ b/board/olimex/imx233_olinuxino/linux-wifi.fragment @@ -0,0 +1,18 @@ +# Network testing +CONFIG_WIRELESS=y +CONFIG_CFG80211=y +CONFIG_CFG80211_WEXT=y +CONFIG_MAC80211=y +# MII PHY device drivers +CONFIG_WLAN=y +CONFIG_RTL8187=m +CONFIG_ATH9K_HTC=m +CONFIG_RT2X00=m +CONFIG_RT73USB=m +CONFIG_RT2800USB=m +CONFIG_RT2800USB_RT53XX=y +CONFIG_RT2800USB_RT55XX=y +CONFIG_RT2800USB_UNKNOWN=y +CONFIG_RTL_CARDS=m +CONFIG_RTL8192CU=m +CONFIG_ZD1211RW=m diff --git a/board/olimex/imx233_olinuxino/readme.txt b/board/olimex/imx233_olinuxino/readme.txt new file mode 100644 index 00000000..1e676c45 --- /dev/null +++ b/board/olimex/imx233_olinuxino/readme.txt @@ -0,0 +1,29 @@ +This configuration is intended as a base image. +It includes kernel and firmware support for the common USB WiFi hardware. +Packages for WiFi support are up to the user, you'll probably want +one or more of: hostapd, iw, wireless_tools and/or wpa_supplicant. + +It also pulls up the console on the serial port, not on TV output. + +=== Output files after building ============================================== + +output/images ++-- boot.vfat (VFAT kernel partition image generated by genimage) ++-- imx23-olinuxino.dtb (device tree blob) ++-- rootfs.ext2 (Root file system) ++-- sdcard.img (Complete SD card image generated by genimage) ++-- u-boot.sd (U-Boot image) ++-- uImage (Kernel binary) + +=== Use of generated SD card image =========================================== + +To determine the device associated to the SD card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Then, run the following command as root: + +*** WARNING! The command will destroy all the card content. Use with care! *** + + sudo dd if=output/images/sdcard.img of=/dev/ diff --git a/board/olpc/genimage.cfg b/board/olpc/genimage.cfg new file mode 100644 index 00000000..baafe317 --- /dev/null +++ b/board/olpc/genimage.cfg @@ -0,0 +1,9 @@ +image sdcard.img { + hdimage { + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/olpc/linux.config b/board/olpc/linux.config new file mode 100644 index 00000000..538f7c59 --- /dev/null +++ b/board/olpc/linux.config @@ -0,0 +1,71 @@ +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_PREEMPT=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_CFG80211=y +CONFIG_CFG80211_WEXT=y +CONFIG_MAC80211=y +CONFIG_RFKILL=y +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +CONFIG_BLK_DEV_SR=y +CONFIG_CHR_DEV_SG=y +CONFIG_MTD=y +CONFIG_MTD_BLOCK=y +CONFIG_GPIO_SYSFS=y +CONFIG_NETDEVICES=y +CONFIG_LIBERTAS=m +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1200 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=900 +CONFIG_INPUT_EVDEV=y +CONFIG_INPUT_TABLET=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_POWER_SUPPLY=y +CONFIG_BATTERY_OLPC=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_MEDIA_SUPPORT=y +CONFIG_MEDIA_CAMERA_SUPPORT=y +CONFIG_MEDIA_CONTROLLER=y +CONFIG_VIDEO_V4L2_SUBDEV_API=y +CONFIG_MEDIA_USB_SUPPORT=y +CONFIG_USB_VIDEO_CLASS=m +CONFIG_V4L_PLATFORM_DRIVERS=y +CONFIG_DRM=y +CONFIG_DRM_PANEL_SIMPLE=m +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FB_SIMPLE=y +CONFIG_LCD_CLASS_DEVICE=y +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_SOUND=y +CONFIG_SND=y +CONFIG_USB=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_STORAGE=y +CONFIG_MMC=y +CONFIG_MMC_SDHCI=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_DEFAULT_ON=y +CONFIG_RTC_CLASS=y +CONFIG_EXT4_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_FONTS=y +CONFIG_FONT_TER16x32=y diff --git a/board/olpc/olpc.fth b/board/olpc/olpc.fth new file mode 100644 index 00000000..b4cbecf1 --- /dev/null +++ b/board/olpc/olpc.fth @@ -0,0 +1,47 @@ +\ OLPC XO boot script + +: (visible) " unfreeze visible" evaluate ; +' (visible) catch drop forget (visible) + +" /aliases" find-device " last" get-property +abort" No last alias" +" /pci/sd@c" 2over substring? if " root=/dev/mmcblk0p1 " to boot-file then +" /sd/sdhci@d4280000" 2over substring? if " root=/dev/mmcblk1p1 " to boot-file then +" /pci/usb@" 2over substring? if " root=/dev/sda1 " to boot-file then +" /usb@" 2over substring? if " root=/dev/sda1 " to boot-file then +" /pci/nandflash@c" 2over substring? if " root=/dev/mtdblock0 rootfstype=jffs2 " to boot-file then +2drop + +root-device " compatible" get-property dend if 0 0 then ( compatible$ ) +" olpc,xo-1.75" 2over sindex -1 > if ( compatible$ ) + \ Version check on XO-1.75 + " mrvl,mmp2" 2over sindex -1 = if ( compatible$ ) + 2drop ( ) + cr + ." Firmware Q4E00 or newer is needed to boot a Devicetree enabled kernel." cr + cr + ." One way to update is to copy http://dev.laptop.org/~quozl/q4e00ja.rom" cr + ." to a FAT partition on a USB flash stick and run ""flash u:\q4e00ja.rom""" cr + cr + ." Aborting boot." cr + " show-sad" evaluate + abort + then +then ( compatible$ ) + +" mmp" 2swap sindex -1 > if + \ A Marvell MMP-based machine + " last:\boot\zImage" to boot-device + boot-file " console=ttyS2,115200 " $cat2 to boot-file +else + \ Assume XO-1 + " last:\boot\bzImage" to boot-device + boot-file " console=ttyS0,115200 reboot=pci " $cat2 to boot-file +then + +\ Pick a terminal that looks better on the XO screen +root-device " architecture" get-property dend if 0 0 else 1- then +" OLPC" $= if boot-file " fbcon=font:TER16x32 vt.color=0xf0 " $cat2 to boot-file then + +boot-file " console=tty0 rootwait" $cat2 to boot-file +boot diff --git a/board/olpc/post-build.sh b/board/olpc/post-build.sh new file mode 100755 index 00000000..4d4cf970 --- /dev/null +++ b/board/olpc/post-build.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" +install -m 0644 -D $BOARD_DIR/olpc.fth $TARGET_DIR/boot/olpc.fth diff --git a/board/olpc/readme.txt b/board/olpc/readme.txt new file mode 100644 index 00000000..f1110c82 --- /dev/null +++ b/board/olpc/readme.txt @@ -0,0 +1,98 @@ +OLPC XO Laptops +=============== + +This document explains how to build and run images that run on the OLPC +XO laptops. + +Supported models +---------------- + +* OLPC XO-1 + The original NS Geode based OLPC laptop, uses the x86 architecture. + Can be booted either from an internal MTD device formatted with JFFS2 + or from a FAT or EXT4 partition on a SD card or a USB flash stick. + +* OLPC XO-7.5 + The ARM-based laptop. Needs a recent enough firmware to provide a good + enough flattened device tree to the kernel. Can be from a FAT or EXT4 + partition on a internal eMMC, a SD card or a USB flash stick. + +Configure and build +=================== + + $ make olpc_xo1_defconfig # Configure for XO-1 + +or: + + $ make olpc_xo175_defconfig # Configure for XO-1.75 + +Then: + + $ make menuconfig # Customize the build configuration + $ make # Build + +Preparing the machine +===================== + +Firmware security +----------------- + +Most OLPC machines were shipped with the security system that disallows +booting unsigned software. If this is the case with your machine, in order +to run the image you've built on it you'll need to get a developer key and +deactivate the security system. + +The procedure is descriped in the OLPC wiki: +http://wiki.laptop.org/go/Activation_and_Developer_Keys + +Firmware upgrade +---------------- + +It is always preferrable to use an up to date firmware. The firmware images +are available at http://wiki.laptop.org/go/Firmware. For the XO-1.75 laptop +to boot the mainline kernel a firmware Q4E00JA or newer is needed. You can +get it at http://dev.laptop.org/~quozl/q4e00ja.rom. + +To update the firmware, place the .rom file on to your bootable media, +connect a charged battery pack and a wall adapter, and enter the Open +Firmware prompt by pressing ESC during the early boot (needs an unlocked +laptop -- see "Firmware security" above). Then use the "flash" command +to update the firmware: + + ok flash ext:\q4e00ja.rom \ Flash the "q4e00ja.rom" from the SD card + ok flash u:\q4e00ja.rom \ Flash the "q4e00ja.rom" from USB stick + +Create the bootable SD card or USB flash stick +============================================== + +When the build is finished, an image file called "sdcard.img" will be created. +It is suitable for writing directly to a SD card, USB flash stick or (on a +XO-1.75) the internal eMMC flash. + +Before writing the image, please double check that you're using the right +device (e.g. with "lsblk" command). Doing the following will DESTROY ALL DATA +that's currently on the media. + + # cat output/images/sdcard.img >/dev/ + +Flashing the JFFS2 image (XO-1 only) +==================================== + +Unlike XO-1.75, the internal NAND flash on XO-1 is accessed without a +FTL and needs a flash-friendly filesystem. A build configured for XO-1 +creates a file named "root.jffs2" that can be written to it. + +One way to write it is from the Open Firmware prompt. First, partition +and format a USB flash disk with a FAT file system and place the +"root.jffs2" file onto it. Then power on the machine, enter the +Open Firmware port by pressing the ESC key and run the following: + + ok patch noop ?open-crcs copy-nand \ Disable CRC check + ok copy-nand u:\root.jffs2 + +Booting the machine +=================== + +Once your machine is unlocked, it will automatically boot from your media +wherever it will detect it attached to the USB bus or the SD card slot, +otherwise it will proceed booting from the internal flash. diff --git a/board/olpc/xo-1.75/linux.config b/board/olpc/xo-1.75/linux.config new file mode 100644 index 00000000..937cc38b --- /dev/null +++ b/board/olpc/xo-1.75/linux.config @@ -0,0 +1,55 @@ +CONFIG_ARCH_MMP=y +CONFIG_MACH_MMP2_DT=y +CONFIG_MACH_MMP3_DT=y +CONFIG_USB_EHCI_MV_U2O=y +CONFIG_SMP=y +CONFIG_NR_CPUS=2 +CONFIG_HIGHMEM=y +CONFIG_FORCE_MAX_ZONEORDER=16 +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_ARM_APPENDED_DTB=y +CONFIG_ARM_ATAG_DTB_COMPAT=y +CONFIG_VFP=y +CONFIG_NEON=y +CONFIG_SENSORS_LIS3_SPI=y +CONFIG_SERIO_OLPC_APSP=y +CONFIG_REGULATOR_88PG86X=m +CONFIG_MEDIA_PLATFORM_SUPPORT=y +CONFIG_V4L_PLATFORM_DRIVERS=y +CONFIG_VIDEO_MMP_CAMERA=y +CONFIG_DRM_ARMADA=y +CONFIG_DRM_CHRONTEL_CH7033=m +CONFIG_DRM_DISPLAY_CONNECTOR=m +CONFIG_DRM_SIMPLE_BRIDGE=m +CONFIG_DRM_ETNAVIV=m +CONFIG_USB_EHCI_MV=y +CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MMC_SDHCI_PXAV3=y +CONFIG_OLPC_XO175=y +CONFIG_OLPC_XO175_EC=y +CONFIG_PHY_PXA_USB=y +CONFIG_PHY_MMP3_USB=y +CONFIG_CRYPTO_LZO=m +CONFIG_LIBERTAS_SDIO=m +CONFIG_LIBERTAS_THINFIRM=m +CONFIG_MWIFIEX=m +CONFIG_MWIFIEX_SDIO=m +CONFIG_MTD_SPI_NOR=m +CONFIG_SRAM=y +CONFIG_I2C_PXA=y +CONFIG_SERIAL_OF_PLATFORM=y +CONFIG_SPI=y +CONFIG_SPI_PXA2XX=y +CONFIG_SPI_SLAVE=y +CONFIG_SND_SOC=y +CONFIG_SND_MMP_SOC_SSPA=y +CONFIG_SND_SOC_RT5631=y +CONFIG_SND_AUDIO_GRAPH_CARD=y +CONFIG_PWRSEQ_SD8787=m +CONFIG_RTC_DRV_DS1307=y +CONFIG_DMADEVICES=y +CONFIG_MMP_TDMA=y +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_ZFORCE=y +CONFIG_COMMON_CLK_MMP2_AUDIO=y diff --git a/board/olpc/xo-1/linux.config b/board/olpc/xo-1/linux.config new file mode 100644 index 00000000..12919471 --- /dev/null +++ b/board/olpc/xo-1/linux.config @@ -0,0 +1,80 @@ +# CONFIG_64BIT is not set +CONFIG_IOSF_MBI=y +CONFIG_MGEODE_LX=y +CONFIG_X86_MSR=y +CONFIG_HZ_100=y +CONFIG_KEXEC=y +CONFIG_CMDLINE_BOOL=y +CONFIG_ACPI=y +CONFIG_CPU_IDLE=y +CONFIG_CPU_IDLE_GOV_LADDER=y +CONFIG_OLPC=y +CONFIG_OLPC_XO1_PM=y +CONFIG_OLPC_XO1_RTC=y +CONFIG_OLPC_XO1_SCI=y +# CONFIG_VIRTUALIZATION is not set +CONFIG_SPARSEMEM_MANUAL=y +CONFIG_CMA=y +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_REDBOOT_PARTS=y +CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=0 +CONFIG_MTD_ONENAND=y +CONFIG_MTD_ONENAND_GENERIC=y +CONFIG_MTD_RAW_NAND=y +CONFIG_MTD_NAND_CAFE=y +CONFIG_MTD_UBI=y +CONFIG_CS5535_MFGPT=y +CONFIG_CS5535_CLOCK_EVENT_SRC=y +CONFIG_MOUSE_PS2_OLPC=y +CONFIG_SERIAL_8250_NR_UARTS=1 +CONFIG_SERIAL_8250_RUNTIME_UARTS=1 +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_MANY_PORTS=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +CONFIG_SERIAL_8250_DETECT_IRQ=y +CONFIG_SERIAL_8250_RSA=y +CONFIG_HW_RANDOM=y +# CONFIG_HW_RANDOM_VIA is not set +CONFIG_NVRAM=y +CONFIG_SCx200_ACB=y +CONFIG_PINCTRL=y +CONFIG_PINCTRL_SINGLE=y +CONFIG_GPIO_CS5535=y +CONFIG_THERMAL=y +CONFIG_WATCHDOG=y +CONFIG_GEODE_WDT=y +CONFIG_MFD_CS5535=y +CONFIG_MFD_MAX8925=y +CONFIG_VIDEO_CAFE_CCIC=y +CONFIG_FB_TILEBLITTING=y +CONFIG_FB_VESA=y +CONFIG_FB_GEODE=y +CONFIG_FB_GEODE_LX=y +CONFIG_BACKLIGHT_MAX8925=y +CONFIG_VGACON_SOFT_SCROLLBACK=y +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +CONFIG_SND_OSSEMUL=y +CONFIG_SND_DYNAMIC_MINORS=y +CONFIG_SND_AC97_POWER_SAVE=y +CONFIG_SND_CS5535AUDIO=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_OHCI_HCD=y +CONFIG_MMC_SDHCI_PCI=y +CONFIG_STAGING=y +CONFIG_FB_OLPC_DCON=y +CONFIG_XO1_RFKILL=y +CONFIG_RESET_CONTROLLER=y +CONFIG_GENERIC_PHY=y +CONFIG_PROC_KCORE=y +CONFIG_HUGETLBFS=y +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_WBUF_VERIFY=y +CONFIG_JFFS2_SUMMARY=y +CONFIG_JFFS2_FS_XATTR=y +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_UBIFS_FS=y +CONFIG_PCI=y +CONFIG_LIBERTAS_USB=m +CONFIG_LIBERTAS_MESH=y +CONFIG_LIBERTAS_THINFIRM=m +CONFIG_LIBERTAS_THINFIRM_USB=m diff --git a/board/openblocks/a6/readme.txt b/board/openblocks/a6/readme.txt new file mode 100644 index 00000000..10a78bb7 --- /dev/null +++ b/board/openblocks/a6/readme.txt @@ -0,0 +1,78 @@ +Openblocks A6 + +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the Openblocks A6. With the current configuration +it will bring-up the board, and allow access through the serial console. + +How to build it +=============== + +Configure Buildroot: + + $ make openblocks_a6_defconfig + +Compile everything: + + $ make + +Updating board over TFTP +======================== + +Copy the content of output/images to the root of your TFTP server. + +Connect serial and ethernet, power up board and stop it in U-Boot: + +DRAM (DDR2) CAS Latency = 5 tRP = 5 tRAS = 14 tRCD=5 +DRAM CS[0] base 0x00000000 size 512MB +DRAM Total size 512MB 16bit width +Addresses 8M - 0M are saved for the U-Boot usage. +Mem malloc Initialization (8M - 7M): Done +NAND:64 MB +POST: mac verify Eth0 PASSED + +CPU : Marvell Feroceon (Rev 1) + +Streaming disabled +Write allocate disabled + + +USB 0: host mode +Net: egiga0 +Hit any key to stop autoboot: 0 +openblocks>> + + +Load kernel from tftp: + +setenv serverip +setenv bootfile uImage.kirkwood-openblocks_a6 +bootp && tftp + + +Write it to nand: + +nand erase 0x590000 0x1c5c000 +nand write.e $loadaddr 0x590000 0x1c5c000 + + +Load rootfs from tftp: + +setenv serverip +setenv bootfile rootfs.jffs2 +bootp && tftp + + +Write it to nand: + +nand erase 0x2214000 0x1dc4000 +nand write.jffs2 $loadaddr 0x2214000 0x1dc4000 + + +Configure kernel to use rootfs: + +setenv root /dev/mtdblock5 rootfstype=jffs2 +saveenv +boot diff --git a/board/orangepi/orangepi-lite/boot.cmd b/board/orangepi/orangepi-lite/boot.cmd new file mode 100644 index 00000000..5c29dabf --- /dev/null +++ b/board/orangepi/orangepi-lite/boot.cmd @@ -0,0 +1,8 @@ +setenv fdt_high ffffffff + +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +fatload mmc 0 $kernel_addr_r zImage +fatload mmc 0 $fdt_addr_r sun8i-h3-orangepi-lite.dtb + +bootz $kernel_addr_r - $fdt_addr_r diff --git a/board/orangepi/orangepi-lite/genimage.cfg b/board/orangepi/orangepi-lite/genimage.cfg new file mode 100644 index 00000000..cd81f986 --- /dev/null +++ b/board/orangepi/orangepi-lite/genimage.cfg @@ -0,0 +1,36 @@ +# Minimal SD card image for the OrangePi Lite +# +image boot.vfat { + vfat { + files = { + "zImage", + "sun8i-h3-orangepi-lite.dtb", + "boot.scr" + } + } + size = 10M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/orangepi/orangepi-lite/linux-extras.config b/board/orangepi/orangepi-lite/linux-extras.config new file mode 100644 index 00000000..6bb71690 --- /dev/null +++ b/board/orangepi/orangepi-lite/linux-extras.config @@ -0,0 +1,15 @@ +# wireless core +CONFIG_WIRELESS=y +CONFIG_CFG80211=y +CONFIG_MAC80211=y +CONFIG_CFG80211_WEXT=y + +# wireless drivers +CONFIG_WLAN=y + +# hdmi +CONFIG_DRM_SUN8I_DW_HDMI=y +CONFIG_SUN8I_DE2_CCU=y + +# analog audio +CONFIG_SND_SUN8I_CODEC_ANALOG=y diff --git a/board/orangepi/orangepi-lite/readme.txt b/board/orangepi/orangepi-lite/readme.txt new file mode 100644 index 00000000..5f402bf2 --- /dev/null +++ b/board/orangepi/orangepi-lite/readme.txt @@ -0,0 +1,29 @@ +OrangePi Lite + +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the OrangePi Lite. With the current configuration +it will bring-up the board, and allow access through the serial console. + +How to build it +=============== + +Configure Buildroot: + + $ make orangepi_lite_defconfig + +Compile everything and build the SD card image: + + $ make + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX diff --git a/board/orangepi/orangepi-lite2/extlinux.conf b/board/orangepi/orangepi-lite2/extlinux.conf new file mode 100644 index 00000000..1966186a --- /dev/null +++ b/board/orangepi/orangepi-lite2/extlinux.conf @@ -0,0 +1,4 @@ +label linux + kernel /Image + devicetree /sun50i-h6-orangepi-lite2.dtb + append console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait diff --git a/board/orangepi/orangepi-lite2/genimage.cfg b/board/orangepi/orangepi-lite2/genimage.cfg new file mode 100644 index 00000000..97251b48 --- /dev/null +++ b/board/orangepi/orangepi-lite2/genimage.cfg @@ -0,0 +1,33 @@ +image boot.vfat { + vfat { + files = { + "Image", + "sun50i-h6-orangepi-lite2.dtb", + "extlinux" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/orangepi/orangepi-lite2/post-build.sh b/board/orangepi/orangepi-lite2/post-build.sh new file mode 100755 index 00000000..ec20fca7 --- /dev/null +++ b/board/orangepi/orangepi-lite2/post-build.sh @@ -0,0 +1,4 @@ +#!/bin/sh +BOARD_DIR="$(dirname $0)" + +install -m 0644 -D $BOARD_DIR/extlinux.conf $BINARIES_DIR/extlinux/extlinux.conf diff --git a/board/orangepi/orangepi-lite2/readme.txt b/board/orangepi/orangepi-lite2/readme.txt new file mode 100644 index 00000000..bed561b5 --- /dev/null +++ b/board/orangepi/orangepi-lite2/readme.txt @@ -0,0 +1,44 @@ +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the Orangepi Lite2. With the current configuration +it will bring-up the board, and allow access through the serial console. + +Orangepi Lite2 link: +http://www.orangepi.org/Orange%20Pi%20Lite%202/ + +Wiki link: +https://openedev.amarulasolutions.com/display/ODWIKI/Orangepi+Lite2 + +How to build +============ + + $ make orangepi_lite2_defconfig + $ make + +Note: you will need access to the internet to download the required +sources. + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + $ sudo sync + +Insert the micro SDcard in your Orangepi Lite2 and power it up. The console +is on the serial line, 115200 8N1. + +WiFi +==== + + # wpa_passphrase ACCESSPOINTNAME >> /etc/wpa_supplicant.conf + (type password and enter) + # wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -B + # udhcpc -i wlan0 + # ping google.com diff --git a/board/orangepi/orangepi-lite2/rootfs_overlay/lib/firmware/brcm/brcmfmac43455-sdio.txt b/board/orangepi/orangepi-lite2/rootfs_overlay/lib/firmware/brcm/brcmfmac43455-sdio.txt new file mode 100755 index 00000000..c1cc4c3c --- /dev/null +++ b/board/orangepi/orangepi-lite2/rootfs_overlay/lib/firmware/brcm/brcmfmac43455-sdio.txt @@ -0,0 +1,82 @@ +#AP6255_NVRAM_V1.0_29052015 + +NVRAMRev=$Rev: 498373 $ +sromrev=11 +vendid=0x14e4 +devid=0x43ab +manfid=0x2d0 +prodid=0x06e4 +macaddr=00:90:4c:c5:12:38 +nocrc=1 +boardtype=0x6e4 +boardrev=0x1304 +xtalfreq=37400 +#boardflags: 5GHz eTR switch by default +#2.4GHz eTR switch by default +#bit1 for btcoex +boardflags=0x00080201 +boardflags2=0x40000000 +boardflags3=0x48200100 +rxgains2gelnagaina0=0 +rxgains2gtrisoa0=0 +rxgains2gtrelnabypa0=0 +rxgains5gelnagaina0=0 +rxgains5gtrisoa0=0 +rxgains5gtrelnabypa0=0 +rxchain=1 +txchain=1 +aa2g=1 +aa5g=1 +tssipos5g=1 +tssipos2g=1 +femctrl=0 +AvVmid_c0=0,157,1,126,1,126,1,126,1,126 +pa2ga0=-112,6296,-662 +pa2ga1=-165,3699,-515 +pa5ga0=-143,6016,-683,-141,6013,-678,-137,5988,-670,-136,5982,-670 +pa5ga1=-161,3544,-499,-166,3543,-497,-169,3569,-497,-171,3598,-498 +itrsw=1 +pdoffset2g40ma0=10 +pdoffset40ma0=0xaaaa +pdoffset80ma0=0xaaaa +extpagain5g=2 +extpagain2g=2 +tworangetssi2g=1 +tworangetssi5g=1 +# LTECX flags +# WCI2 +ltecxmux=0 +ltecxpadnum=0x0504 +ltecxfnsel=0x22 +ltecxgcigpio=0x32 + +maxp2ga0=64 +ofdmlrbw202gpo=0x0033 +dot11agofdmhrbw202gpo=0x1553 +mcsbw202gpo=0x99355533 + +maxp5ga0=80,82,76,77 + +mcsbw205glpo=0x99755000 +mcsbw205gmpo=0x9df55000 +mcsbw205ghpo=0x99855000 + +mcsbw405glpo=0xb8555000 +mcsbw405gmpo=0xed955000 +mcsbw405ghpo=0xd9755000 + +mcsbw805glpo=0xc8555000 +mcsbw805gmpo=0xe9555000 +mcsbw805ghpo=0xd9555000 + +swctrlmap_2g=0x00040004,0x00020002,0x00040004,0x010a02,0x1ff +swctrlmap_5g=0x00100010,0x00200020,0x00100010,0x010a02,0x2f4 +swctrlmapext_5g=0x00000000,0x00000000,0x00000000,0x000000,0x000 +swctrlmapext_2g=0x00000000,0x00000000,0x00000000,0x000000,0x000 + +vcodivmode=1 +deadman_to=481500000 +ed_thresh2g=-54 +ed_thresh5g=-54 + +muxenab=0x10 diff --git a/board/orangepi/orangepi-one-plus/extlinux.conf b/board/orangepi/orangepi-one-plus/extlinux.conf new file mode 100644 index 00000000..f573aa17 --- /dev/null +++ b/board/orangepi/orangepi-one-plus/extlinux.conf @@ -0,0 +1,4 @@ +label linux + kernel /Image + devicetree /sun50i-h6-orangepi-one-plus.dtb + append console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait diff --git a/board/orangepi/orangepi-one-plus/genimage.cfg b/board/orangepi/orangepi-one-plus/genimage.cfg new file mode 100644 index 00000000..ebb07e8b --- /dev/null +++ b/board/orangepi/orangepi-one-plus/genimage.cfg @@ -0,0 +1,33 @@ +image boot.vfat { + vfat { + files = { + "Image", + "sun50i-h6-orangepi-one-plus.dtb", + "extlinux" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/orangepi/orangepi-one-plus/post-build.sh b/board/orangepi/orangepi-one-plus/post-build.sh new file mode 100755 index 00000000..ec20fca7 --- /dev/null +++ b/board/orangepi/orangepi-one-plus/post-build.sh @@ -0,0 +1,4 @@ +#!/bin/sh +BOARD_DIR="$(dirname $0)" + +install -m 0644 -D $BOARD_DIR/extlinux.conf $BINARIES_DIR/extlinux/extlinux.conf diff --git a/board/orangepi/orangepi-one-plus/readme.txt b/board/orangepi/orangepi-one-plus/readme.txt new file mode 100644 index 00000000..87f6de85 --- /dev/null +++ b/board/orangepi/orangepi-one-plus/readme.txt @@ -0,0 +1,37 @@ +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the Orangepi One Plus. With the current configuration +it will bring-up the board, and allow access through the serial console. + +Orangepi One Plus link: +http://www.orangepi.org/OrangePiOneplus/ + +Wiki link: +https://openedev.amarulasolutions.com/display/ODWIKI/Orangepi+One+Plus + +This configuration uses U-Boot mainline and kernel mainline. + +How to build +============ + + $ make orangepi_one_plus_defconfig + $ make + +Note: you will need access to the internet to download the required +sources. + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + $ sudo sync + +Insert the micro SDcard in your Orangepi One Plus and power it up. The console +is on the serial line, 115200 8N1. diff --git a/board/orangepi/orangepi-one/boot.cmd b/board/orangepi/orangepi-one/boot.cmd new file mode 100644 index 00000000..ab616e6a --- /dev/null +++ b/board/orangepi/orangepi-one/boot.cmd @@ -0,0 +1,8 @@ +setenv fdt_high ffffffff + +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +fatload mmc 0 $kernel_addr_r zImage +fatload mmc 0 $fdt_addr_r sun8i-h3-orangepi-one.dtb + +bootz $kernel_addr_r - $fdt_addr_r diff --git a/board/orangepi/orangepi-one/genimage.cfg b/board/orangepi/orangepi-one/genimage.cfg new file mode 100644 index 00000000..4640ff2b --- /dev/null +++ b/board/orangepi/orangepi-one/genimage.cfg @@ -0,0 +1,36 @@ +# Minimal SD card image for the OrangePi PC +# +image boot.vfat { + vfat { + files = { + "zImage", + "sun8i-h3-orangepi-one.dtb", + "boot.scr" + } + } + size = 10M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/orangepi/orangepi-one/readme.txt b/board/orangepi/orangepi-one/readme.txt new file mode 100644 index 00000000..e650f82d --- /dev/null +++ b/board/orangepi/orangepi-one/readme.txt @@ -0,0 +1,29 @@ +OrangePi One + +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the OrangePi One. With the current configuration +it will bring-up the board, and allow access through the serial console. + +How to build it +=============== + +Configure Buildroot: + + $ make orangepi_one_defconfig + +Compile everything and build the SD card image: + + $ make + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX diff --git a/board/orangepi/orangepi-pc-plus/boot.cmd b/board/orangepi/orangepi-pc-plus/boot.cmd new file mode 100644 index 00000000..0c75c862 --- /dev/null +++ b/board/orangepi/orangepi-pc-plus/boot.cmd @@ -0,0 +1,8 @@ +setenv fdt_high ffffffff + +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +fatload mmc 0 $kernel_addr_r zImage +fatload mmc 0 $fdt_addr_r sun8i-h3-orangepi-pc-plus.dtb + +bootz $kernel_addr_r - $fdt_addr_r diff --git a/board/orangepi/orangepi-pc-plus/genimage.cfg b/board/orangepi/orangepi-pc-plus/genimage.cfg new file mode 100644 index 00000000..9ffa1a21 --- /dev/null +++ b/board/orangepi/orangepi-pc-plus/genimage.cfg @@ -0,0 +1,36 @@ +# Minimal SD card image for the OrangePi PC Plus +# +image boot.vfat { + vfat { + files = { + "zImage", + "sun8i-h3-orangepi-pc-plus.dtb", + "boot.scr" + } + } + size = 10M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/orangepi/orangepi-pc-plus/linux-extras.config b/board/orangepi/orangepi-pc-plus/linux-extras.config new file mode 100644 index 00000000..5e3af2b8 --- /dev/null +++ b/board/orangepi/orangepi-pc-plus/linux-extras.config @@ -0,0 +1,8 @@ +# wireless core +CONFIG_WIRELESS=y +CONFIG_CFG80211=y +CONFIG_MAC80211=y +CONFIG_CFG80211_WEXT=y + +# wireless drivers +CONFIG_WLAN=y diff --git a/board/orangepi/orangepi-pc-plus/readme.txt b/board/orangepi/orangepi-pc-plus/readme.txt new file mode 100644 index 00000000..49206949 --- /dev/null +++ b/board/orangepi/orangepi-pc-plus/readme.txt @@ -0,0 +1,29 @@ +OrangePi PC Plus + +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the OrangePi PC Plus. With the current configuration +it will bring-up the board, and allow access through the serial console. + +How to build it +=============== + +Configure Buildroot: + + $ make orangepi_pc_plus_defconfig + +Compile everything and build the SD card image: + + $ make + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX diff --git a/board/orangepi/orangepi-pc/boot.cmd b/board/orangepi/orangepi-pc/boot.cmd new file mode 100644 index 00000000..9da625c8 --- /dev/null +++ b/board/orangepi/orangepi-pc/boot.cmd @@ -0,0 +1,8 @@ +setenv fdt_high ffffffff + +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +fatload mmc 0 $kernel_addr_r zImage +fatload mmc 0 $fdt_addr_r sun8i-h3-orangepi-pc.dtb + +bootz $kernel_addr_r - $fdt_addr_r diff --git a/board/orangepi/orangepi-pc/genimage.cfg b/board/orangepi/orangepi-pc/genimage.cfg new file mode 100644 index 00000000..932d81cf --- /dev/null +++ b/board/orangepi/orangepi-pc/genimage.cfg @@ -0,0 +1,36 @@ +# Minimal SD card image for the OrangePi PC +# +image boot.vfat { + vfat { + files = { + "zImage", + "sun8i-h3-orangepi-pc.dtb", + "boot.scr" + } + } + size = 10M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/orangepi/orangepi-pc/linux.fragment b/board/orangepi/orangepi-pc/linux.fragment new file mode 100644 index 00000000..b1dda162 --- /dev/null +++ b/board/orangepi/orangepi-pc/linux.fragment @@ -0,0 +1,3 @@ +CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y +CONFIG_REGULATOR_SY8106A=y +CONFIG_SUN8I_DE2_CCU=y diff --git a/board/orangepi/orangepi-pc/readme.txt b/board/orangepi/orangepi-pc/readme.txt new file mode 100644 index 00000000..d316b6fc --- /dev/null +++ b/board/orangepi/orangepi-pc/readme.txt @@ -0,0 +1,29 @@ +OrangePi PC + +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the OrangePi PC. With the current configuration +it will bring-up the board, and allow access through the serial console. + +How to build it +=============== + +Configure Buildroot: + + $ make orangepi_pc_defconfig + +Compile everything and build the SD card image: + + $ make + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX diff --git a/board/orangepi/orangepi-pc2/boot.cmd b/board/orangepi/orangepi-pc2/boot.cmd new file mode 100644 index 00000000..4d4fc7bf --- /dev/null +++ b/board/orangepi/orangepi-pc2/boot.cmd @@ -0,0 +1,6 @@ +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +fatload mmc 0 $kernel_addr_r Image +fatload mmc 0 $fdt_addr_r sun50i-h5-orangepi-pc2.dtb + +booti $kernel_addr_r - $fdt_addr_r diff --git a/board/orangepi/orangepi-pc2/genimage.cfg b/board/orangepi/orangepi-pc2/genimage.cfg new file mode 100644 index 00000000..e10c67ff --- /dev/null +++ b/board/orangepi/orangepi-pc2/genimage.cfg @@ -0,0 +1,39 @@ +image boot.vfat { + vfat { + files = { + "Image", + "sun50i-h5-orangepi-pc2.dtb", + "boot.scr" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition spl { + in-partition-table = "no" + image = "sunxi-spl.bin" + offset = 8192 + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot.itb" + offset = 40K + size = 1M # 1MB - 40K + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/orangepi/orangepi-pc2/readme.txt b/board/orangepi/orangepi-pc2/readme.txt new file mode 100644 index 00000000..12004819 --- /dev/null +++ b/board/orangepi/orangepi-pc2/readme.txt @@ -0,0 +1,37 @@ +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the Orangepi PC2. With the current configuration +it will bring-up the board, and allow access through the serial console. + +Orangepi PC2 link: +http://www.orangepi.org/orangepipc2/ + +Wiki link: +https://openedev.amarulasolutions.com/display/ODWIKI/Orangepi+PC2 + +This configuration uses U-Boot mainline and kernel mainline. + +How to build +============ + + $ make orangepi_pc2_defconfig + $ make + +Note: you will need access to the internet to download the required +sources. + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + $ sudo sync + +Insert the micro SDcard in your Orangepi PC2 and power it up. The console +is on the serial line, 115200 8N1. diff --git a/board/orangepi/orangepi-plus/boot.cmd b/board/orangepi/orangepi-plus/boot.cmd new file mode 100644 index 00000000..1a378cb9 --- /dev/null +++ b/board/orangepi/orangepi-plus/boot.cmd @@ -0,0 +1,8 @@ +setenv fdt_high ffffffff + +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +fatload mmc 0 $kernel_addr_r zImage +fatload mmc 0 $fdt_addr_r sun8i-h3-orangepi-plus.dtb + +bootz $kernel_addr_r - $fdt_addr_r diff --git a/board/orangepi/orangepi-plus/genimage.cfg b/board/orangepi/orangepi-plus/genimage.cfg new file mode 100644 index 00000000..391678b7 --- /dev/null +++ b/board/orangepi/orangepi-plus/genimage.cfg @@ -0,0 +1,35 @@ +# Minimal SD card image for the OrangePi Plus\Plus2 +# +image boot.vfat { + vfat { + files = { + "zImage", + "sun8i-h3-orangepi-plus.dtb", + "boot.scr" + } + } + size = 10M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/orangepi/orangepi-plus/readme.txt b/board/orangepi/orangepi-plus/readme.txt new file mode 100644 index 00000000..7f871bcf --- /dev/null +++ b/board/orangepi/orangepi-plus/readme.txt @@ -0,0 +1,29 @@ +OrangePi Plus/Plus2 + +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the OrangePi Plus/Plus2. With the current configuration +it will bring-up the board, and allow access through the serial console. + +How to build it +=============== + +Configure Buildroot: + + $ make orangepi_plus_defconfig + +Compile everything and build the SD card image: + + $ make + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX diff --git a/board/orangepi/orangepi-prime/boot.cmd b/board/orangepi/orangepi-prime/boot.cmd new file mode 100644 index 00000000..34887880 --- /dev/null +++ b/board/orangepi/orangepi-prime/boot.cmd @@ -0,0 +1,6 @@ +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +fatload mmc 0 $kernel_addr_r Image +fatload mmc 0 $fdt_addr_r sun50i-h5-orangepi-prime.dtb + +booti $kernel_addr_r - $fdt_addr_r diff --git a/board/orangepi/orangepi-prime/genimage.cfg b/board/orangepi/orangepi-prime/genimage.cfg new file mode 100644 index 00000000..bb01ed9f --- /dev/null +++ b/board/orangepi/orangepi-prime/genimage.cfg @@ -0,0 +1,39 @@ +image boot.vfat { + vfat { + files = { + "Image", + "sun50i-h5-orangepi-prime.dtb", + "boot.scr" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition spl { + in-partition-table = "no" + image = "sunxi-spl.bin" + offset = 8192 + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot.itb" + offset = 40K + size = 1M # 1MB - 40K + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/orangepi/orangepi-prime/readme.txt b/board/orangepi/orangepi-prime/readme.txt new file mode 100644 index 00000000..5811884d --- /dev/null +++ b/board/orangepi/orangepi-prime/readme.txt @@ -0,0 +1,37 @@ +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the Orangepi Prime. With the current configuration +it will bring-up the board, and allow access through the serial console. + +Orangepi Prime link: +http://www.orangepi.org/OrangePiPrime/ + +Wiki link: +https://openedev.amarulasolutions.com/display/ODWIKI/Orangepi+Prime + +This configuration uses U-Boot mainline and kernel mainline. + +How to build +============ + + $ make orangepi_prime_defconfig + $ make + +Note: you will need access to the internet to download the required +sources. + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + $ sudo sync + +Insert the micro SDcard in your Orangepi Prime and power it up. The console +is on the serial line, 115200 8N1. diff --git a/board/orangepi/orangepi-r1/boot.cmd b/board/orangepi/orangepi-r1/boot.cmd new file mode 100644 index 00000000..50745f7e --- /dev/null +++ b/board/orangepi/orangepi-r1/boot.cmd @@ -0,0 +1,8 @@ +setenv fdt_high ffffffff + +setenv bootargs console=ttyS0,115200 earlyprintk root=PARTLABEL=rootfs rootwait + +fatload mmc 0 $kernel_addr_r zImage +fatload mmc 0 $fdt_addr_r sun8i-h2-plus-orangepi-r1.dtb + +bootz $kernel_addr_r - $fdt_addr_r diff --git a/board/orangepi/orangepi-r1/genimage.cfg b/board/orangepi/orangepi-r1/genimage.cfg new file mode 100644 index 00000000..edda03b3 --- /dev/null +++ b/board/orangepi/orangepi-r1/genimage.cfg @@ -0,0 +1,42 @@ +# Minimal SD card image for the OrangePi R1 +# +image boot.vfat { + vfat { + files = { + "zImage", + "sun8i-h2-plus-orangepi-r1.dtb", + "boot.scr" + } + } + size = 10M +} + +image sdcard.img { + hdimage { + # for root=PARTLABEL support + gpt = true + # default GPT location conflicts with spl, move it after + gpt-location = 1M + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1056768 # 1MB - 8192 + 16384 (GPT) + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + # 'rootfs' will be used as the partition label, used + # with root=PARTLABEL=rootfs kernel command line + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/orangepi/orangepi-r1/linux-extras.config b/board/orangepi/orangepi-r1/linux-extras.config new file mode 100644 index 00000000..47ba88f6 --- /dev/null +++ b/board/orangepi/orangepi-r1/linux-extras.config @@ -0,0 +1,11 @@ +# spi nor +CONFIG_MTD=y +CONFIG_MTD_OF_PARTS=y +CONFIG_MTD_SPI_NOR=y +CONFIG_MTD_M25P80=y + +# ondemand cpufreq governor +CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y + +# USB ethernet +CONFIG_USB_RTL8152=y diff --git a/board/orangepi/orangepi-r1/readme.txt b/board/orangepi/orangepi-r1/readme.txt new file mode 100644 index 00000000..82664993 --- /dev/null +++ b/board/orangepi/orangepi-r1/readme.txt @@ -0,0 +1,29 @@ +OrangePi R1 + +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the OrangePi R1. With the current configuration +it will bring-up the board, and allow access through the serial console. + +How to build it +=============== + +Configure Buildroot: + + $ make orangepi_r1_defconfig + +Compile everything and build the SD card image: + + $ make + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX diff --git a/board/orangepi/orangepi-rk3399/extlinux.conf b/board/orangepi/orangepi-rk3399/extlinux.conf new file mode 100644 index 00000000..51096251 --- /dev/null +++ b/board/orangepi/orangepi-rk3399/extlinux.conf @@ -0,0 +1,4 @@ +label RK3399_ROCKPRO64 linux + kernel /Image + devicetree /rk3399-orangepi.dtb + append earlycon=uart8250,mmio32,0xff1a0000 root=/dev/mmcblk1p4 rw rootwait diff --git a/board/orangepi/orangepi-rk3399/genimage.cfg b/board/orangepi/orangepi-rk3399/genimage.cfg new file mode 100644 index 00000000..21272c28 --- /dev/null +++ b/board/orangepi/orangepi-rk3399/genimage.cfg @@ -0,0 +1,39 @@ +image boot.vfat { + vfat { + files = { + "Image", + "rk3399-orangepi.dtb", + "extlinux" + } + } + size = 64M +} + +image sdcard.img { + + hdimage { + gpt = true + } + + partition loader1 { + image = "idbloader.img" + offset = 32K + } + + partition loader2 { + image = "u-boot.itb" + offset = 8M + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 16M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/orangepi/orangepi-rk3399/post-build.sh b/board/orangepi/orangepi-rk3399/post-build.sh new file mode 100755 index 00000000..ba29375c --- /dev/null +++ b/board/orangepi/orangepi-rk3399/post-build.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" + +install -m 0644 -D $BOARD_DIR/extlinux.conf $BINARIES_DIR/extlinux/extlinux.conf diff --git a/board/orangepi/orangepi-rk3399/readme.txt b/board/orangepi/orangepi-rk3399/readme.txt new file mode 100644 index 00000000..197e1fb4 --- /dev/null +++ b/board/orangepi/orangepi-rk3399/readme.txt @@ -0,0 +1,56 @@ +Orangepi Rk3399 +================ +http://www.orangepi.org/Orange%20Pi%20RK3399/ + +Build: +====== + $ make orangepi_rk3399_defconfig + $ make + +Files created in output directory +================================= + +output/images + +├── bl31.elf +├── boot.vfat +├── extlinux +├── idbloader.img +├── Image +├── rk3399-orangepi.dtb +├── rootfs.ext2 +├── rootfs.ext4 -> rootfs.ext2 +├── rootfs.tar +├── sdcard.img +├── u-boot.bin +└── u-boot.itb + +Creating bootable SD card: +========================== + +Simply invoke (as root) + +sudo dd if=output/images/sdcard.img of=/dev/sdX && sync + +Where X is your SD card device. + +Booting: +======== +Orangepi-RK3399 by default boots from emmc. For SD card boot to +happen, emmc should be empty. If emmc happens to have any bootable +image then erase emmc so that bootrom will look for a proper image in SD. + +emmc can be erased once after booted into linux as shown in below link. + +https://wiki.amarulasolutions.com/bsp/setup/rockchip/rk3399_emmc.html + +Serial console: +--------------- + +Baudrate for this board is 1500000. + +Login: +------ +Enter 'root' as login user, and the prompt is ready. + +https://wiki.amarulasolutions.com/bsp/rockchip/rk3399/orangepi.html diff --git a/board/orangepi/orangepi-win/boot.cmd b/board/orangepi/orangepi-win/boot.cmd new file mode 100644 index 00000000..2ddb769d --- /dev/null +++ b/board/orangepi/orangepi-win/boot.cmd @@ -0,0 +1,6 @@ +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +fatload mmc 0 $kernel_addr_r Image +fatload mmc 0 $fdt_addr_r sun50i-a64-orangepi-win.dtb + +booti $kernel_addr_r - $fdt_addr_r diff --git a/board/orangepi/orangepi-win/genimage.cfg b/board/orangepi/orangepi-win/genimage.cfg new file mode 100644 index 00000000..db025d55 --- /dev/null +++ b/board/orangepi/orangepi-win/genimage.cfg @@ -0,0 +1,39 @@ +image boot.vfat { + vfat { + files = { + "Image", + "sun50i-a64-orangepi-win.dtb", + "boot.scr" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition spl { + in-partition-table = "no" + image = "sunxi-spl.bin" + offset = 8192 + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot.itb" + offset = 40K + size = 1M # 1MB - 40K + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/orangepi/orangepi-win/readme.txt b/board/orangepi/orangepi-win/readme.txt new file mode 100644 index 00000000..93adddd8 --- /dev/null +++ b/board/orangepi/orangepi-win/readme.txt @@ -0,0 +1,37 @@ +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the Orangepi Win/Win Plus. With the current configuration +it will bring-up the board, and allow access through the serial console. + +Orangepi Win/Win Plus link: +http://www.orangepi.org/OrangePiWin_WinPlus/ + +Wiki link: +https://openedev.amarulasolutions.com/display/ODWIKI/Orangepi+Win + +This configuration uses U-Boot mainline and kernel mainline. + +How to build +============ + + $ make orangepi_win_defconfig + $ make + +Note: you will need access to the internet to download the required +sources. + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + $ sudo sync + +Insert the micro SDcard in your Orangepi Win/Win Plus and power it up. The console +is on the serial line, 115200 8N1. diff --git a/board/orangepi/orangepi-zero-plus/boot.cmd b/board/orangepi/orangepi-zero-plus/boot.cmd new file mode 100644 index 00000000..18c4d521 --- /dev/null +++ b/board/orangepi/orangepi-zero-plus/boot.cmd @@ -0,0 +1,6 @@ +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +fatload mmc 0 $kernel_addr_r Image +fatload mmc 0 $fdt_addr_r sun50i-h5-orangepi-zero-plus.dtb + +booti $kernel_addr_r - $fdt_addr_r diff --git a/board/orangepi/orangepi-zero-plus/genimage.cfg b/board/orangepi/orangepi-zero-plus/genimage.cfg new file mode 100644 index 00000000..ec15898d --- /dev/null +++ b/board/orangepi/orangepi-zero-plus/genimage.cfg @@ -0,0 +1,39 @@ +image boot.vfat { + vfat { + files = { + "Image", + "sun50i-h5-orangepi-zero-plus.dtb", + "boot.scr" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition spl { + in-partition-table = "no" + image = "sunxi-spl.bin" + offset = 8192 + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot.itb" + offset = 40K + size = 1M # 1MB - 40K + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/orangepi/orangepi-zero-plus/readme.txt b/board/orangepi/orangepi-zero-plus/readme.txt new file mode 100644 index 00000000..5556eae8 --- /dev/null +++ b/board/orangepi/orangepi-zero-plus/readme.txt @@ -0,0 +1,34 @@ +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the Orangepi Zero Plus. With the current configuration +it will bring-up the board, and allow access through the serial console. + +Orangepi Zero Plus link: +http://www.orangepi.org/OrangePiZeroPlus/ + +This configuration uses U-Boot mainline and kernel mainline. + +How to build +============ + + $ make orangepi_zero_plus_defconfig + $ make + +Note: you will need access to the internet to download the required +sources. + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + $ sudo sync + +Insert the micro SDcard in your Orangepi Zero Plus and power it up. The console +is on the serial line, 115200 8N1. diff --git a/board/orangepi/orangepi-zero-plus2/boot.cmd b/board/orangepi/orangepi-zero-plus2/boot.cmd new file mode 100644 index 00000000..aa516200 --- /dev/null +++ b/board/orangepi/orangepi-zero-plus2/boot.cmd @@ -0,0 +1,6 @@ +setenv bootargs console=ttyS0,115200 earlyprintk root=PARTLABEL=rootfs rootwait + +fatload mmc 0 $kernel_addr_r Image +fatload mmc 0 $fdt_addr_r sun50i-h5-orangepi-zero-plus2.dtb + +booti $kernel_addr_r - $fdt_addr_r diff --git a/board/orangepi/orangepi-zero-plus2/genimage.cfg b/board/orangepi/orangepi-zero-plus2/genimage.cfg new file mode 100644 index 00000000..98ebf5b4 --- /dev/null +++ b/board/orangepi/orangepi-zero-plus2/genimage.cfg @@ -0,0 +1,46 @@ +image boot.vfat { + vfat { + files = { + "Image", + "sun50i-h5-orangepi-zero-plus2.dtb", + "boot.scr" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + # for root=PARTLABEL support + gpt = true + # default GPT location conflicts with bootloaders, move it after + gpt-location = 1M + } + + partition spl { + in-partition-table = "no" + image = "sunxi-spl.bin" + offset = 8192 + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot.itb" + offset = 40K + size = 1024000 # 1MB - 40K + 16K(GPT) + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + # 'rootfs' will be used as the partition label, used + # with root=PARTLABEL=rootfs kernel command line + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 256M + } +} diff --git a/board/orangepi/orangepi-zero-plus2/linux-extras.config b/board/orangepi/orangepi-zero-plus2/linux-extras.config new file mode 100644 index 00000000..52b4b4b2 --- /dev/null +++ b/board/orangepi/orangepi-zero-plus2/linux-extras.config @@ -0,0 +1,10 @@ +# wireless core +CONFIG_WIRELESS=y +CONFIG_CFG80211=y +CONFIG_MAC80211=y +CONFIG_CFG80211_WEXT=y + +# wireless drivers +CONFIG_WLAN=y +CONFIG_WLAN_VENDOR_BROADCOM=y +CONFIG_BRCMFMAC=m diff --git a/board/orangepi/orangepi-zero-plus2/readme.txt b/board/orangepi/orangepi-zero-plus2/readme.txt new file mode 100644 index 00000000..322ba0e1 --- /dev/null +++ b/board/orangepi/orangepi-zero-plus2/readme.txt @@ -0,0 +1,37 @@ +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the Orangepi Zero Plus2. With the current configuration +it will bring-up the board, and allow access through the serial console. + +Orangepi Zero Plus2 link: +http://www.orangepi.org/OrangePiZeroPlus2/ + +Wiki link: +https://openedev.amarulasolutions.com/display/ODWIKI/Orangepi+Zero+Plus2 + +This configuration uses U-Boot mainline and kernel mainline. + +How to build +============ + + $ make orangepi_zero_plus2_defconfig + $ make + +Note: you will need access to the internet to download the required +sources. + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + $ sudo sync + +Insert the micro SDcard in your Orangepi Zero Plus2 and power it up. The console +is on the serial line, 115200 8N1. diff --git a/board/orangepi/orangepi-zero-plus2/rootfs_overlay/lib/firmware/brcm/brcmfmac43430-sdio.txt b/board/orangepi/orangepi-zero-plus2/rootfs_overlay/lib/firmware/brcm/brcmfmac43430-sdio.txt new file mode 100644 index 00000000..8f0bf690 --- /dev/null +++ b/board/orangepi/orangepi-zero-plus2/rootfs_overlay/lib/firmware/brcm/brcmfmac43430-sdio.txt @@ -0,0 +1,54 @@ +#AP6212_NVRAM_V1.0_20140603 +# 2.4 GHz, 20 MHz BW mode + +# The following parameter values are just placeholders, need to be updated. +manfid=0x2d0 +prodid=0x0726 +vendid=0x14e4 +devid=0x43e2 +boardtype=0x0726 +boardrev=0x1101 +boardnum=22 +macaddr=00:90:4c:c5:12:38 +sromrev=11 +boardflags=0x00404201 +xtalfreq=26000 +nocrc=1 +ag0=255 +aa2g=1 +ccode=ALL + +pa0itssit=0x20 +extpagain2g=0 + +#PA parameters for 2.4GHz, measured at CHIP OUTPUT +pa2ga0=-168,7161,-820 +AvVmid_c0=0x0,0xc8 +cckpwroffset0=5 + +# PPR params +maxp2ga0=90 +txpwrbckof=6 +cckbw202gpo=0x5555 +legofdmbw202gpo=0x77777777 +mcsbw202gpo=0xaaaaaaaa + +# OFDM IIR : +ofdmdigfilttype=7 +# PAPD mode: +papdmode=2 + +il0macaddr=00:90:4c:c5:12:38 +wl0id=0x431b + +#OOB parameters +hostwake=0x40 +hostrdy=0x41 +usbrdy=0x03 +usbrdydelay=100 +deadman_to=0xffffffff +# muxenab: 0x1 for UART enable, 0x10 for Host awake +muxenab=0x10 +# CLDO PWM voltage settings - 0x4 - 1.1 volt +#cldo_pwm=0x4 + diff --git a/board/orangepi/orangepi-zero/boot.cmd b/board/orangepi/orangepi-zero/boot.cmd new file mode 100644 index 00000000..44f0885f --- /dev/null +++ b/board/orangepi/orangepi-zero/boot.cmd @@ -0,0 +1,8 @@ +setenv fdt_high ffffffff + +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +fatload mmc 0 $kernel_addr_r zImage +fatload mmc 0 $fdt_addr_r sun8i-h2-plus-orangepi-zero.dtb + +bootz $kernel_addr_r - $fdt_addr_r diff --git a/board/orangepi/orangepi-zero/genimage.cfg b/board/orangepi/orangepi-zero/genimage.cfg new file mode 100644 index 00000000..017435f2 --- /dev/null +++ b/board/orangepi/orangepi-zero/genimage.cfg @@ -0,0 +1,36 @@ +# Minimal SD card image for the OrangePi Zero +# +image boot.vfat { + vfat { + files = { + "zImage", + "sun8i-h2-plus-orangepi-zero.dtb", + "boot.scr" + } + } + size = 10M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/orangepi/orangepi-zero/linux-extras.config b/board/orangepi/orangepi-zero/linux-extras.config new file mode 100644 index 00000000..2db241de --- /dev/null +++ b/board/orangepi/orangepi-zero/linux-extras.config @@ -0,0 +1,20 @@ +# spidev +CONFIG_SPI_SPIDEV=y + +# spi nor +CONFIG_MTD=y +CONFIG_MTD_OF_PARTS=y +CONFIG_MTD_SPI_NOR=y +CONFIG_MTD_M25P80=y + +# wireless core +CONFIG_WIRELESS=y +CONFIG_CFG80211=y +CONFIG_MAC80211=y +CONFIG_CFG80211_WEXT=y + +# wireless drivers +CONFIG_WLAN=y + +# ondemand cpufreq governor +CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y diff --git a/board/orangepi/orangepi-zero/patches/linux/0001-ARM-dts-orange-pi-zero-interrupt-triggering-xr819.patch b/board/orangepi/orangepi-zero/patches/linux/0001-ARM-dts-orange-pi-zero-interrupt-triggering-xr819.patch new file mode 100644 index 00000000..146d23d1 --- /dev/null +++ b/board/orangepi/orangepi-zero/patches/linux/0001-ARM-dts-orange-pi-zero-interrupt-triggering-xr819.patch @@ -0,0 +1,35 @@ +From 321faaf4b78d46a0c77782c1798856746f0619e9 Mon Sep 17 00:00:00 2001 +From: Sergey Matyukevich +Date: Fri, 19 May 2017 23:39:48 +0300 +Subject: [PATCH 1/3] ARM: dts: orange-pi-zero: specify XR819 WiFi chip + interrupts + +The orange-pi-zero board has Allwinner XR819 SDIO wifi chip. The board +dts file provides a node enabling mmc1 controller. Together with an +out-of-tree driver https://github.com/fifteenhex/xradio this node +enables using the wifi chip. + +This commit specifies XR819 interrupt configuration for the driver. + +Signed-off-by: Sergey Matyukevich +--- + arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts b/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts +index b7ca916d871d..4e1a9050c6b4 100644 +--- a/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts ++++ b/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts +@@ -125,6 +125,9 @@ + */ + xr819: sdio_wifi@1 { + reg = <1>; ++ compatible = "xradio,xr819"; ++ interrupt-parent = <&pio>; ++ interrupts = <6 10 IRQ_TYPE_EDGE_RISING>; + }; + }; + +-- +2.11.0 + diff --git a/board/orangepi/orangepi-zero/patches/linux/0002-ARM-dts-orange-pi-zero-enable-spi-nor.patch b/board/orangepi/orangepi-zero/patches/linux/0002-ARM-dts-orange-pi-zero-enable-spi-nor.patch new file mode 100644 index 00000000..fc24e7b8 --- /dev/null +++ b/board/orangepi/orangepi-zero/patches/linux/0002-ARM-dts-orange-pi-zero-enable-spi-nor.patch @@ -0,0 +1,42 @@ +From 068c3baff3048a3db4ef2518ff917ce749cd8169 Mon Sep 17 00:00:00 2001 +From: Sergey Matyukevich +Date: Sat, 20 May 2017 11:24:26 +0300 +Subject: [PATCH 2/3] ARM: dts: orange-pi-zero: enable SPI NOR + +Enable SPI NOR on orange-pi-zero board. + +For more information see: +- http://linux-sunxi.org/Orange_Pi_Zero#SPI_NOR_flash + +Signed-off-by: Sergey Matyukevich +--- + arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts b/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts +index 4e1a9050c6b4..cdf19821b1f3 100644 +--- a/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts ++++ b/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts +@@ -161,3 +161,19 @@ + /* USB VBUS is always on */ + status = "okay"; + }; ++ ++&spi0 { ++ status = "okay"; ++ ++ flash@0 { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ compatible = "mxicy,mx25l1606e", "winbond,w25q128"; ++ reg = <0>; ++ spi-max-frequency = <40000000>; ++ ++ partition@00000000 { ++ reg = <0x00000000 0x200000>; /* 2Mb */ ++ }; ++ }; ++}; +-- +2.11.0 + diff --git a/board/orangepi/orangepi-zero/patches/linux/0003-ARM-dts-orange-pi-zero-enable-spidev.patch b/board/orangepi/orangepi-zero/patches/linux/0003-ARM-dts-orange-pi-zero-enable-spidev.patch new file mode 100644 index 00000000..553155ce --- /dev/null +++ b/board/orangepi/orangepi-zero/patches/linux/0003-ARM-dts-orange-pi-zero-enable-spidev.patch @@ -0,0 +1,42 @@ +From 8dd1b2a696bb7e9914abd11cc6f5c0f54c33d626 Mon Sep 17 00:00:00 2001 +From: Sergey Matyukevich +Date: Sat, 20 May 2017 15:36:51 +0300 +Subject: [PATCH 3/3] ARM: dts: orange-pi-zero: enable spidev + +On orange-pi-zero board SPI1 pins are accessible via GPIO expansion port. +This patch enables spidev driver for SPI1. + +Signed-off-by: Sergey Matyukevich +--- + arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts b/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts +index cdf19821b1f3..7242aaecb14f 100644 +--- a/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts ++++ b/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts +@@ -59,6 +59,7 @@ + serial0 = &uart0; + /* ethernet0 is the H3 emac, defined in sun8i-h3.dtsi */ + ethernet1 = &xr819; ++ spi1 = &spi1; + }; + + chosen { +@@ -177,3 +178,13 @@ + }; + }; + }; ++ ++&spi1 { ++ status = "okay"; ++ ++ spidev@0 { ++ compatible = "rohm,dh2228fv"; ++ reg = <0>; ++ spi-max-frequency = <10000000>; ++ }; ++}; +-- +2.11.0 + diff --git a/board/orangepi/orangepi-zero/readme.txt b/board/orangepi/orangepi-zero/readme.txt new file mode 100644 index 00000000..1afdbb78 --- /dev/null +++ b/board/orangepi/orangepi-zero/readme.txt @@ -0,0 +1,29 @@ +OrangePi Zero + +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the OrangePi Zero. With the current configuration +it will bring-up the board, and allow access through the serial console. + +How to build it +=============== + +Configure Buildroot: + + $ make orangepi_zero_defconfig + +Compile everything and build the SD card image: + + $ make + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX diff --git a/board/pandaboard/genimage.cfg b/board/pandaboard/genimage.cfg new file mode 100644 index 00000000..f30033f0 --- /dev/null +++ b/board/pandaboard/genimage.cfg @@ -0,0 +1,26 @@ +image boot.vfat { + vfat { + files = { + "MLO", + "u-boot.img" + } + } + size = 8M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/pandaboard/readme.txt b/board/pandaboard/readme.txt new file mode 100644 index 00000000..80a20c27 --- /dev/null +++ b/board/pandaboard/readme.txt @@ -0,0 +1,46 @@ +Pandaboard +========== + +This file documents the Buildroot support for the Pandaboard, a +low-power, low-cost single-board computer development platform based +on the Texas Instruments OMAP4 system on a chip (SoC). + +Configuring and building Buildroot +---------------------------------- + +Start from the defconfig: + + $ make pandaboard_defconfig + +You can edit build options the usual way: + + $ make menuconfig + +When you are happy with the setup, run: + + $ make + +The result of the build with the default settings should be these files: + + output/images + +-- MLO + +-- omap4-panda-a4.dtb + +-- omap4-panda.dtb + +-- omap4-panda-es.dtb + +-- rootfs.ext4 + +-- sdcard.img + +-- u-boot.img + +-- zImage + +How to write the SD card +------------------------ + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + +Where /dev/sdX is the device node of your SD card (may be /dev/mmcblkX +instead depending on setup). diff --git a/board/pc/genimage-bios.cfg b/board/pc/genimage-bios.cfg new file mode 100644 index 00000000..c6694999 --- /dev/null +++ b/board/pc/genimage-bios.cfg @@ -0,0 +1,24 @@ +image disk.img { + + hdimage { + } + + partition boot { + in-partition-table = "no" + image = "boot.img" + offset = 0 + size = 512 + } + + partition grub { + in-partition-table = "no" + image = "grub.img" + offset = 512 + } + + partition root { + partition-type = 0x83 + image = "rootfs.ext2" + } + +} diff --git a/board/pc/genimage-efi.cfg b/board/pc/genimage-efi.cfg new file mode 100644 index 00000000..ec7e85b0 --- /dev/null +++ b/board/pc/genimage-efi.cfg @@ -0,0 +1,34 @@ +image efi-part.vfat { + vfat { + file startup.nsh { + image = "efi-part/startup.nsh" + } + file EFI { + image = "efi-part/EFI" + } + file bzImage { + image = "bzImage" + } + } + # 16MB - 32KB + size = 16744448 +} + +image disk.img { + hdimage { + gpt = true + } + + partition boot { + image = "efi-part.vfat" + partition-type-uuid = c12a7328-f81f-11d2-ba4b-00a0c93ec93b + offset = 32768 + bootable = true + } + + partition root { + partition-type-uuid = 44479540-f297-41b2-9af7-d131d5f0458a + partition-uuid = UUID_TMP + image = "rootfs.ext2" + } +} diff --git a/board/pc/grub-bios.cfg b/board/pc/grub-bios.cfg new file mode 100644 index 00000000..bd3e3f00 --- /dev/null +++ b/board/pc/grub-bios.cfg @@ -0,0 +1,6 @@ +set default="0" +set timeout="5" + +menuentry "Buildroot" { + linux /boot/bzImage root=/dev/sda1 rootwait console=tty1 +} diff --git a/board/pc/grub-efi.cfg b/board/pc/grub-efi.cfg new file mode 100644 index 00000000..bd446664 --- /dev/null +++ b/board/pc/grub-efi.cfg @@ -0,0 +1,6 @@ +set default="0" +set timeout="5" + +menuentry "Buildroot" { + linux /bzImage root=PARTUUID=UUID_TMP rootwait console=tty1 +} diff --git a/board/pc/linux.config b/board/pc/linux.config new file mode 100644 index 00000000..f86352e1 --- /dev/null +++ b/board/pc/linux.config @@ -0,0 +1,85 @@ +CONFIG_SYSVIPC=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_SMP=y +CONFIG_HYPERVISOR_GUEST=y +CONFIG_PARAVIRT=y +CONFIG_EFI=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_NETFILTER=y +CONFIG_IP_NF_IPTABLES=y +CONFIG_IP_NF_FILTER=y +CONFIG_CFG80211=m +CONFIG_CFG80211_WEXT=y +CONFIG_MAC80211=m +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_VIRTIO_BLK=y +CONFIG_BLK_DEV_SD=y +CONFIG_SCSI_VIRTIO=y +CONFIG_ATA=y +CONFIG_ATA_PIIX=y +CONFIG_NETDEVICES=y +CONFIG_VIRTIO_NET=y +CONFIG_ATL2=m +CONFIG_ATL1=m +CONFIG_ATL1E=m +CONFIG_ATL1C=m +CONFIG_ALX=m +CONFIG_E100=m +CONFIG_E1000=m +CONFIG_E1000E=m +CONFIG_IGB=m +CONFIG_NE2K_PCI=y +CONFIG_8139CP=y +CONFIG_R8169=m +CONFIG_ATH9K=m +CONFIG_ATH9K_HTC=m +CONFIG_CARL9170=m +CONFIG_ATH10K=m +CONFIG_ATH10K_PCI=m +CONFIG_IWL4965=m +CONFIG_IWL3945=m +CONFIG_IWLWIFI=m +CONFIG_RT2X00=m +CONFIG_RT2800PCI=m +CONFIG_RT73USB=m +CONFIG_RT2800USB=m +CONFIG_RT2800USB_RT3573=y +CONFIG_RT2800USB_RT53XX=y +CONFIG_RT2800USB_RT55XX=y +# CONFIG_RTL_CARDS is not set +CONFIG_RTL8XXXU=m +CONFIG_INPUT_EVDEV=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_VIRTIO_CONSOLE=y +CONFIG_HW_RANDOM_VIRTIO=m +CONFIG_DRM=y +CONFIG_DRM_I915=y +CONFIG_DRM_QXL=y +CONFIG_DRM_BOCHS=y +CONFIG_DRM_VIRTIO_GPU=y +CONFIG_FB_VESA=y +CONFIG_SOUND=y +CONFIG_SND=y +CONFIG_SND_HDA_INTEL=y +CONFIG_SND_HDA_GENERIC=y +CONFIG_USB=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_UHCI_HCD=y +CONFIG_USB_STORAGE=y +CONFIG_VIRTIO_PCI=y +CONFIG_VIRTIO_BALLOON=y +CONFIG_VIRTIO_INPUT=y +CONFIG_VIRTIO_MMIO=y +CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y +CONFIG_EXT4_FS=y +CONFIG_FUSE_FS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_SQUASHFS=y +CONFIG_UNWINDER_FRAME_POINTER=y diff --git a/board/pc/post-build.sh b/board/pc/post-build.sh new file mode 100755 index 00000000..ed37b3b8 --- /dev/null +++ b/board/pc/post-build.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +set -e + +BOARD_DIR=$(dirname "$0") + +# Detect boot strategy, EFI or BIOS +if [ -f "$BINARIES_DIR/efi-part/startup.nsh" ]; then + cp -f "$BOARD_DIR/grub-efi.cfg" "$BINARIES_DIR/efi-part/EFI/BOOT/grub.cfg" +else + cp -f "$BOARD_DIR/grub-bios.cfg" "$TARGET_DIR/boot/grub/grub.cfg" + + # Copy grub 1st stage to binaries, required for genimage + cp -f "$HOST_DIR/lib/grub/i386-pc/boot.img" "$BINARIES_DIR" +fi diff --git a/board/pc/post-image-efi.sh b/board/pc/post-image-efi.sh new file mode 100755 index 00000000..a0df70a6 --- /dev/null +++ b/board/pc/post-image-efi.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +set -e + +UUID=$(dumpe2fs "$BINARIES_DIR/rootfs.ext2" 2>/dev/null | sed -n 's/^Filesystem UUID: *\(.*\)/\1/p') +sed -i "s/UUID_TMP/$UUID/g" "$BINARIES_DIR/efi-part/EFI/BOOT/grub.cfg" +sed "s/UUID_TMP/$UUID/g" board/pc/genimage-efi.cfg > "$BINARIES_DIR/genimage-efi.cfg" +support/scripts/genimage.sh -c "$BINARIES_DIR/genimage-efi.cfg" diff --git a/board/pc/readme.txt b/board/pc/readme.txt new file mode 100644 index 00000000..41aec50d --- /dev/null +++ b/board/pc/readme.txt @@ -0,0 +1,72 @@ +Bare PC sample config +===================== + +1. Build + + First select the appropriate target you want. + + For BIOS-based boot strategy: + + $ make pc_x86_64_bios_defconfig + + For EFI-based boot strategy on a GPT-partitioned disk: + + $ make pc_x86_64_efi_defconfig + + Add any additional packages required and build: + + $ make + +2. Write the pendrive + + The build process will create a pendrive image called sdcard.img in + output/images. + + Write the image to a pendrive: + + $ dd if=output/images/disk.img of=/dev/sdc; sync + + Once it's done insert it into the target PC and boot. + + Remember that if said PC has another boot device you might need to + select this alternative for it to boot. + + In the case of EFI boot you might need to disable Secure Boot from + the setup as well. + +3. Enjoy + +Emulation in qemu (BIOS) +======================== + +1. Edit grub-bios.cfg + + Since the driver will show up in the virtual machine as /dev/vda, + change board/pc/grub-bios.cfg to use root=/dev/vda2 instead of + root=/dev/sda2. Then rebuild grub2 and the image. + +2. Run the emulation with: + +qemu-system-x86_64 \ + -M pc \ + -drive file=output/images/disk.img,if=virtio,format=raw \ + -net nic,model=virtio \ + -net user + + +Emulation in qemu (UEFI) +======================== + +Run the emulation with: + +qemu-system-x86_64 \ + -M pc \ + -bios \ + -drive file=output/images/disk.img,if=virtio,format=raw \ + -net nic,model=virtio \ + -net user + +Note that needs to point to a valid x86_64 UEFI +firmware image for qemu. It may be provided by your distribution as a +edk2 or OVMF package, in path such as +/usr/share/edk2/ovmf/OVMF_CODE.fd . diff --git a/board/pcengines/apu2/isolinux.cfg b/board/pcengines/apu2/isolinux.cfg new file mode 100644 index 00000000..cb19b5a8 --- /dev/null +++ b/board/pcengines/apu2/isolinux.cfg @@ -0,0 +1,6 @@ +serial 0 115200 +default 1 +label 1 + kernel __KERNEL_PATH__ + initrd __INITRD_PATH__ + append root=/dev/sr0 console=ttyS0,115200n8 diff --git a/board/pcengines/apu2/linux.config b/board/pcengines/apu2/linux.config new file mode 100644 index 00000000..5e3593b0 --- /dev/null +++ b/board/pcengines/apu2/linux.config @@ -0,0 +1,51 @@ +CONFIG_SYSVIPC=y +CONFIG_CGROUPS=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_SMP=y +CONFIG_HYPERVISOR_GUEST=y +CONFIG_PARAVIRT=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_WIRELESS is not set +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_VIRTIO_BLK=y +CONFIG_BLK_DEV_SD=y +CONFIG_SCSI_VIRTIO=y +CONFIG_ATA=y +CONFIG_SATA_AHCI=y +CONFIG_ATA_PIIX=y +CONFIG_NETDEVICES=y +CONFIG_VIRTIO_NET=y +CONFIG_IGB=y +CONFIG_NE2K_PCI=y +CONFIG_8139CP=y +# CONFIG_WLAN is not set +CONFIG_INPUT_EVDEV=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_VIRTIO_CONSOLE=y +CONFIG_HW_RANDOM_VIRTIO=m +CONFIG_DRM=y +CONFIG_SOUND=y +CONFIG_SND=y +# CONFIG_SND_PCI is not set +CONFIG_USB=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_UHCI_HCD=y +CONFIG_USB_STORAGE=y +CONFIG_VIRTIO_PCI=y +CONFIG_VIRTIO_BALLOON=y +CONFIG_VIRTIO_INPUT=y +CONFIG_VIRTIO_MMIO=y +CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y +CONFIG_EXT4_FS=y +CONFIG_AUTOFS4_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_UNWINDER_FRAME_POINTER=y diff --git a/board/pcengines/apu2/readme.txt b/board/pcengines/apu2/readme.txt new file mode 100644 index 00000000..9da1b802 --- /dev/null +++ b/board/pcengines/apu2/readme.txt @@ -0,0 +1,40 @@ +Intro +===== + +This is a board configuration for the apu2 platform by PC Engines. + +https://pcengines.ch/apu2.htm + +Since the apu2 does not have any graphical output, the default configuration +will ensure that the kernel output as well as the login prompt will be sent to +the serial port. + +How to build +============ + +The provided defconfig creates a hybrid isolinux image that can be booted from +either an USB stick or a CD. + + $ make pcengines_apu2_defconfig + $ make + +How to write to an USB stick +============================ + +Once the build process is finished you will have an image +called "rootfs.iso9660" in the output/images/ directory. + +Copy the bootable "rootfs.iso9660" onto the USB stick with "dd": + + $ sudo dd if=output/images/rootfs.iso9660 of=/dev/sdX bs=1M conv=fsync + $ sudo sync + +How to connect to the apu2 +========================== + +Connect to the DB9 serial port of the apu2 board (either directly or through a +USB adapter) with a baudrate of 115200. + +For example with miniterm (part of pyserial): + + $ miniterm.py -f direct /dev/ttyUSB0 115200 diff --git a/board/pine64/pine64/boot.cmd b/board/pine64/pine64/boot.cmd new file mode 100644 index 00000000..14f56104 --- /dev/null +++ b/board/pine64/pine64/boot.cmd @@ -0,0 +1,6 @@ +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +fatload mmc 0 $kernel_addr_r Image +fatload mmc 0 $fdt_addr_r sun50i-a64-pine64.dtb + +booti $kernel_addr_r - $fdt_addr_r diff --git a/board/pine64/pine64/genimage.cfg b/board/pine64/pine64/genimage.cfg new file mode 100644 index 00000000..2ff38d54 --- /dev/null +++ b/board/pine64/pine64/genimage.cfg @@ -0,0 +1,39 @@ +image boot.vfat { + vfat { + files = { + "Image", + "sun50i-a64-pine64.dtb", + "boot.scr" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition spl { + in-partition-table = "no" + image = "sunxi-spl.bin" + offset = 8192 + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot.itb" + offset = 40K + size = 1M # 1MB - 40K + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/pine64/pine64/readme.txt b/board/pine64/pine64/readme.txt new file mode 100644 index 00000000..85226fdd --- /dev/null +++ b/board/pine64/pine64/readme.txt @@ -0,0 +1,38 @@ +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the Pine64. With the current configuration +it will bring-up the board, and allow access through the serial console. + +Pine64 link: +https://www.pine64.org/?page_id=1194 + +Wiki link: +https://openedev.amarulasolutions.com/display/ODWIKI/Pine64 + +This configuration uses U-Boot mainline and kernel mainline. + +How to build +============ + + $ make pine64_defconfig + + $ make + +Note: you will need access to the internet to download the required +sources. + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + $ sudo sync + +Insert the micro SDcard in your Pine64 and power it up. The console +is on the serial line, 115200 8N1. diff --git a/board/pine64/rock64/extlinux.conf b/board/pine64/rock64/extlinux.conf new file mode 100644 index 00000000..bf71982a --- /dev/null +++ b/board/pine64/rock64/extlinux.conf @@ -0,0 +1,4 @@ +label rock64-buildroot + kernel /boot/Image + devicetree /boot/rk3328-rock64.dtb + append console=ttyS2,1500000n8 root=/dev/mmcblk0p1 ro rootwait diff --git a/board/pine64/rock64/genimage.cfg b/board/pine64/rock64/genimage.cfg new file mode 100644 index 00000000..0b5a0d88 --- /dev/null +++ b/board/pine64/rock64/genimage.cfg @@ -0,0 +1,23 @@ +image sdcard.img { + hdimage { + } + + partition uboot-spl { + in-partition-table = "no" + image = "u-boot-tpl-spl.img" + offset = 32768 # 512 * 0x40 from start of sd card + } + + partition uboot { + in-partition-table = "no" + image = "u-boot.itb" + offset = 262144 # 512 * 0x200 from start of sd card + } + + partition rootfs { + partition-type = 0x83 + bootable = "yes" + image = "rootfs.ext2" + size = 500M + } +} diff --git a/board/pine64/rock64/patches/uboot/0001-Makefile-rk3328-needs-itb-image-to-boot-properly.patch b/board/pine64/rock64/patches/uboot/0001-Makefile-rk3328-needs-itb-image-to-boot-properly.patch new file mode 100644 index 00000000..2d35b78d --- /dev/null +++ b/board/pine64/rock64/patches/uboot/0001-Makefile-rk3328-needs-itb-image-to-boot-properly.patch @@ -0,0 +1,32 @@ +From 211bf049084e6e374dac253138fa813682910146 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20=C5=81yszczek?= +Date: Tue, 5 Feb 2019 22:08:54 +0100 +Subject: [PATCH] Makefile: rk3328 needs itb image to boot properly +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Michał Łyszczek +--- + Makefile | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/Makefile b/Makefile +index 8086f3c93e..a6425b5b03 100644 +--- a/Makefile ++++ b/Makefile +@@ -799,6 +799,11 @@ ifneq ($(BUILD_ROM),) + ALL-$(CONFIG_X86_RESET_VECTOR) += u-boot.rom + endif + ++# rk3328 needs itb image to boot properly ++ifeq ($(CONFIG_ROCKCHIP_RK3328),y) ++ALL-y += u-boot.itb ++endif ++ + # enable combined SPL/u-boot/dtb rules for tegra + ifeq ($(CONFIG_TEGRA)$(CONFIG_SPL),yy) + ALL-y += u-boot-tegra.bin u-boot-nodtb-tegra.bin +-- +2.18.1 + diff --git a/board/pine64/rock64/post-build.sh b/board/pine64/rock64/post-build.sh new file mode 100755 index 00000000..26b53cba --- /dev/null +++ b/board/pine64/rock64/post-build.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +MKIMAGE=$HOST_DIR/bin/mkimage +BOARD_DIR="$(dirname $0)" + +$MKIMAGE -n rk3328 -T rksd -d $BINARIES_DIR/u-boot-tpl.bin $BINARIES_DIR/u-boot-tpl.img +cat $BINARIES_DIR/u-boot-tpl.img $BINARIES_DIR/u-boot-spl.bin > $BINARIES_DIR/u-boot-tpl-spl.img + +install -m 0644 -D $BOARD_DIR/extlinux.conf $TARGET_DIR/boot/extlinux/extlinux.conf diff --git a/board/pine64/rock64/readme.txt b/board/pine64/rock64/readme.txt new file mode 100644 index 00000000..029c6764 --- /dev/null +++ b/board/pine64/rock64/readme.txt @@ -0,0 +1,95 @@ +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the Rock64. With this default configuration you +can log in into board via uart and look around. + +Board homepage: https://www.pine64.org/?page_id=7147 + +Build +===== + +First, load rock64 config for buildroot + + $ make rock64_defconfig + +Optionally make changes to buildroot config (to install more programs) + + $ make menuconfig + +And then build everything + + $ make + +When completed, following files will be generated in output/images directory: + + . + ├── Image + ├── bl31.bin + ├── bl31.elf + ├── rk3328-rock64.dtb + ├── rootfs.ext2 + ├── rootfs.ext4 -> rootfs.ext2 + ├── rootfs.tar + ├── sdcard.img + ├── u-boot-spl.bin + ├── u-boot-tpl-spl.img + ├── u-boot-tpl.bin + ├── u-boot-tpl.img + ├── u-boot.bin + └── u-boot.itb + +Creating bootable SD card +========================= + +!!! THIS COMMAND MAY WIPE YOUR DISK! +!!! MAKE SURE YOU PASSED CORRECT DEVICE! +!!! OR IT THIS WILL WIPE YOUR DISK! + +Simply invoke (as root) + + # dd if=output/images/sdcard.img of=/dev/sdX && sync + +Where X is your SD card device (not partition), of= argument may also be +/dev/mmcblk0 if you are using built-in sd card reader. + +Runtime +======= + +Login +----- + +By default, buildroot has no password, just type 'root' as login user, and +you will be logged in. + +Serial console +-------------- + +Serial console needs to be connected to pins (into 40pin rpi compatible part) + +pin 6: gnd +pin 8: tx +pin 10: rx + +Pin numbers are printed on board. + +Uart configuration is not standard. Rock64 uses 1500000 (1,5M) baudrate +with standard 8n1. + +Ethernet +-------- + +To enable ethernet you need to load modules for it: + +# modprobe stmmac +# modprobe dwmac-rk + +and since by default there is no dhcp installed, you need to configure ip +address, remember to change address to fit your network. + +# ifconfig eth0 up +# ip addr add 10.1.1.180/24 dev eth0 +# ping 10.1.1.1 +PING 10.1.1.1 (10.1.1.1): 56 data bytes +64 bytes from 10.1.1.1: seq=0 ttl=64 time=0.695 ms diff --git a/board/pine64/rockpro64/extlinux.conf b/board/pine64/rockpro64/extlinux.conf new file mode 100644 index 00000000..ea081a1f --- /dev/null +++ b/board/pine64/rockpro64/extlinux.conf @@ -0,0 +1,4 @@ +label RK3399_ROCKPRO64 linux + kernel /Image + devicetree /rk3399-rockpro64.dtb + append earlycon=uart8250,mmio32,0xff1a0000 root=/dev/mmcblk0p4 rw rootwait diff --git a/board/pine64/rockpro64/genimage.cfg b/board/pine64/rockpro64/genimage.cfg new file mode 100644 index 00000000..0ba25c0e --- /dev/null +++ b/board/pine64/rockpro64/genimage.cfg @@ -0,0 +1,39 @@ +image boot.vfat { + vfat { + files = { + "Image", + "rk3399-rockpro64.dtb", + "extlinux" + } + } + size = 64M +} + +image sdcard.img { + + hdimage { + gpt = true + } + + partition loader1 { + image = "idbloader.img" + offset = 32K + } + + partition loader2 { + image = "u-boot.itb" + offset = 8M + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 16M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/pine64/rockpro64/post-build.sh b/board/pine64/rockpro64/post-build.sh new file mode 100755 index 00000000..ba29375c --- /dev/null +++ b/board/pine64/rockpro64/post-build.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" + +install -m 0644 -D $BOARD_DIR/extlinux.conf $BINARIES_DIR/extlinux/extlinux.conf diff --git a/board/pine64/rockpro64/readme.txt b/board/pine64/rockpro64/readme.txt new file mode 100644 index 00000000..de869701 --- /dev/null +++ b/board/pine64/rockpro64/readme.txt @@ -0,0 +1,60 @@ +PINE64 ROCKPro64 +================ +https://www.pine64.org/rockpro64/ + +Build: +====== + $ make rockpro64_defconfig + $ make + +Files created in output directory +================================= + +output/images + +├── bl31.elf +├── boot.vfat +├── extlinux +├── idbloader.img +├── Image +├── rk3399-rockpro64.dtb +├── rootfs.ext2 +├── rootfs.ext4 -> rootfs.ext2 +├── rootfs.tar +├── sdcard.img +├── u-boot.bin +└── u-boot.itb + +Creating bootable SD card: +========================== + +Simply invoke (as root) + +sudo dd if=output/images/sdcard.img of=/dev/sdX && sync + +Where X is your SD card device. + +Booting: +======== +RockPro64 has a 40-pin PI-2 GPIO Bus. + +Connect a jumper between pin 23 and pin 25 for SD card boot. + +Serial console: +--------------- +The pin layout for serial console on PI-2 GPIO Bus is as follows: + +pin 6: gnd +pin 8: tx +pin 10: rx + +Initially connect pin 6 and pin 8(transmit). Apply power to RockPro64, once the +power is on then connect pin 10(receive). + +Baudrate for this board is 1500000. + +Login: +------ +Enter 'root' as login user, and the prompt is ready. + +https://wiki.amarulasolutions.com/bsp/rockchip/rk3399/rockpro64.html diff --git a/board/pine64/sopine/boot.cmd b/board/pine64/sopine/boot.cmd new file mode 100644 index 00000000..2eab6423 --- /dev/null +++ b/board/pine64/sopine/boot.cmd @@ -0,0 +1,6 @@ +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +fatload mmc 0 $kernel_addr_r Image +fatload mmc 0 $fdt_addr_r sun50i-a64-sopine-baseboard.dtb + +booti $kernel_addr_r - $fdt_addr_r diff --git a/board/pine64/sopine/genimage.cfg b/board/pine64/sopine/genimage.cfg new file mode 100644 index 00000000..02ebe7ab --- /dev/null +++ b/board/pine64/sopine/genimage.cfg @@ -0,0 +1,39 @@ +image boot.vfat { + vfat { + files = { + "Image", + "sun50i-a64-sopine-baseboard.dtb", + "boot.scr" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition spl { + in-partition-table = "no" + image = "sunxi-spl.bin" + offset = 8192 + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot.itb" + offset = 40K + size = 1M # 1MB - 40K + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/pine64/sopine/readme.txt b/board/pine64/sopine/readme.txt new file mode 100644 index 00000000..08cb380b --- /dev/null +++ b/board/pine64/sopine/readme.txt @@ -0,0 +1,38 @@ +Intro +===== + +This default configuration will allow you to start experimenting with the +buildroot environment for the SoPine. With the current configuration +it will bring-up the board, and allow access through the serial console. + +SoPINE link: +https://www.pine64.org/?page_id=1491 + +Wiki link: +https://openedev.amarulasolutions.com/display/ODWIKI/SoPine + +This configuration uses U-Boot mainline and kernel mainline. + +How to build +============ + + $ make pine64_sopine_defconfig + + $ make + +Note: you will need access to the internet to download the required +sources. + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + $ sudo sync + +Insert the micro SDcard in your SoPine and power it up. The console +is on the serial line, 115200 8N1. diff --git a/board/qemu/aarch64-virt/linux.config b/board/qemu/aarch64-virt/linux.config new file mode 100644 index 00000000..02e0812f --- /dev/null +++ b/board/qemu/aarch64-virt/linux.config @@ -0,0 +1,66 @@ +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_NO_HZ_IDLE=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_TASKSTATS=y +CONFIG_SCHED_AUTOGROUP=y +CONFIG_PROFILING=y +CONFIG_ARCH_VEXPRESS=y +CONFIG_COMPAT=y +CONFIG_FW_CFG_SYSFS=y +CONFIG_FW_CFG_SYSFS_CMDLINE=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_BLK_DEV_BSGLIB=y +CONFIG_BINFMT_MISC=y +CONFIG_TRANSPARENT_HUGEPAGE=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_PACKET_DIAG=y +CONFIG_UNIX=y +CONFIG_NET_KEY=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_BRIDGE=m +CONFIG_NET_SCHED=y +CONFIG_VSOCKETS=y +CONFIG_PCI=y +CONFIG_PCI_HOST_GENERIC=y +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_VIRTIO_BLK=y +CONFIG_BLK_DEV_SD=y +CONFIG_CHR_DEV_SG=y +CONFIG_SCSI_CONSTANTS=y +CONFIG_SCSI_LOGGING=y +CONFIG_SCSI_SCAN_ASYNC=y +CONFIG_SCSI_VIRTIO=y +CONFIG_ATA=y +CONFIG_NETDEVICES=y +CONFIG_DUMMY=y +CONFIG_MACVLAN=y +CONFIG_VIRTIO_NET=y +CONFIG_NLMON=y +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +CONFIG_VIRTIO_CONSOLE=y +CONFIG_HW_RANDOM=y +CONFIG_HW_RANDOM_VIRTIO=y +CONFIG_TCG_TPM=y +CONFIG_TCG_TIS=y +CONFIG_DRM=y +CONFIG_DRM_VIRTIO_GPU=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_PL031=y +CONFIG_VIRTIO_PCI=y +CONFIG_VIRTIO_MMIO=y +CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y +CONFIG_MAILBOX=y +CONFIG_PL320_MBOX=y +CONFIG_ARM_SMMU_V3=y +CONFIG_EXT4_FS=y +CONFIG_FUSE_FS=y +CONFIG_VIRTIO_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y diff --git a/board/qemu/aarch64-virt/readme.txt b/board/qemu/aarch64-virt/readme.txt new file mode 100644 index 00000000..db35a3a7 --- /dev/null +++ b/board/qemu/aarch64-virt/readme.txt @@ -0,0 +1,5 @@ +Run the emulation with: + + qemu-system-aarch64 -M virt -cpu cortex-a53 -nographic -smp 1 -kernel output/images/Image -append "rootwait root=/dev/vda console=ttyAMA0" -netdev user,id=eth0 -device virtio-net-device,netdev=eth0 -drive file=output/images/rootfs.ext4,if=none,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 # qemu_aarch64_virt_defconfig + +The login prompt will appear in the terminal that started Qemu. diff --git a/board/qemu/arm-versatile/linux-nommu.config b/board/qemu/arm-versatile/linux-nommu.config new file mode 100644 index 00000000..1d91d51a --- /dev/null +++ b/board/qemu/arm-versatile/linux-nommu.config @@ -0,0 +1,47 @@ +# CONFIG_MMU is not set +CONFIG_ARCH_VERSATILE=y +CONFIG_ARM_SINGLE_ARCH_VERSATILE=y +CONFIG_SET_MEM_PARAM=y +CONFIG_DRAM_BASE=0x00000000 +CONFIG_DRAM_SIZE=0x08000000 +CONFIG_ARCH_VERSATILE_PB=y +CONFIG_MACH_VERSATILE_AB=y +CONFIG_MACH_VERSATILE_DT=y +CONFIG_BINFMT_FLAT=y +CONFIG_SYSVIPC=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_ARCH_MULTI_V7 is not set +CONFIG_AEABI=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_NETDEVICES=y +CONFIG_SMC91X=y +CONFIG_PHYLIB=y +CONFIG_INPUT_EVDEV=y +CONFIG_SERIO_AMBAKMI=y +CONFIG_LEGACY_PTY_COUNT=16 +CONFIG_SERIAL_8250=m +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_MANY_PORTS=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +CONFIG_SERIAL_8250_RSA=y +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +CONFIG_I2C=y +CONFIG_I2C_CHARDEV=m +CONFIG_FB=y +CONFIG_FB_ARMCLCD=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_SOUND=y +CONFIG_SND=m +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_ARMAACI=m +CONFIG_EXT4_FS=y +CONFIG_VFAT_FS=m +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_MAGIC_SYSRQ=y diff --git a/board/qemu/arm-versatile/linux.config b/board/qemu/arm-versatile/linux.config new file mode 100644 index 00000000..b1001d84 --- /dev/null +++ b/board/qemu/arm-versatile/linux.config @@ -0,0 +1,43 @@ +CONFIG_SYSVIPC=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_ARCH_MULTI_V7 is not set +CONFIG_ARCH_VERSATILE=y +CONFIG_PCI=y +CONFIG_PCI_VERSATILE=y +CONFIG_AEABI=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +CONFIG_SCSI_SYM53C8XX_2=y +CONFIG_NETDEVICES=y +CONFIG_8139CP=y +CONFIG_PHYLIB=y +CONFIG_INPUT_EVDEV=y +CONFIG_SERIO_AMBAKMI=y +CONFIG_LEGACY_PTY_COUNT=16 +CONFIG_SERIAL_8250=m +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_MANY_PORTS=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +CONFIG_SERIAL_8250_RSA=y +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +CONFIG_I2C=y +CONFIG_I2C_CHARDEV=m +CONFIG_FB=y +CONFIG_FB_ARMCLCD=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_SOUND=y +CONFIG_SND=m +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_ARMAACI=m +CONFIG_EXT4_FS=y +CONFIG_VFAT_FS=m +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_MAGIC_SYSRQ=y diff --git a/board/qemu/arm-versatile/patches/linux/versatile-nommu.patch b/board/qemu/arm-versatile/patches/linux/versatile-nommu.patch new file mode 100644 index 00000000..956ae5f5 --- /dev/null +++ b/board/qemu/arm-versatile/patches/linux/versatile-nommu.patch @@ -0,0 +1,113 @@ +From 525dd2f3cf4a94837ce6b71d793acb90c25a5654 Mon Sep 17 00:00:00 2001 +From: Waldemar Brodkorb +Date: Fri, 1 Feb 2019 11:36:20 +0100 +Subject: [PATCH] arm-versatile-nommu: Linux patch + +Originally made by Waldemar Brodkorb from LKML. + +Signed-Off-by: Waldemar Brodkorb +[Gerome: reformated as a Git patch] +Signed-off-by: Gerome Burlats +[Romain: fix Waldemar's authorship in Git patch] +Signed-off-by: Romain Naour +--- + arch/arm/Kconfig | 11 +++++++++++ + arch/arm/Kconfig.debug | 3 ++- + arch/arm/include/asm/mach/map.h | 1 + + arch/arm/mach-versatile/Kconfig | 5 +++-- + arch/arm/mach-versatile/Makefile.boot | 3 +++ + arch/arm/mach-versatile/versatile_dt.c | 4 ++++ + 6 files changed, 24 insertions(+), 3 deletions(-) + create mode 100644 arch/arm/mach-versatile/Makefile.boot + +diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig +index 002e0cf025f5..c71299b6f91f 100644 +--- a/arch/arm/Kconfig ++++ b/arch/arm/Kconfig +@@ -343,6 +343,17 @@ config ARM_SINGLE_ARMV7M + select SPARSE_IRQ + select USE_OF + ++config ARM_SINGLE_ARCH_VERSATILE ++ bool "ARM Ltd. Versatile family" ++ depends on !MMU ++ select AUTO_ZRELADDR ++ select CLKSRC_OF ++ select COMMON_CLK ++ select GENERIC_CLOCKEVENTS ++ select GPIOLIB ++ select SPARSE_IRQ ++ select USE_OF ++ + config ARCH_EBSA110 + bool "EBSA-110" + select ARCH_USES_GETTIMEOFFSET +diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug +index 8986a91a6f31..69cb6404e8ce 100644 +--- a/arch/arm/Kconfig.debug ++++ b/arch/arm/Kconfig.debug +@@ -1943,7 +1943,8 @@ config DEBUG_UNCOMPRESS + config UNCOMPRESS_INCLUDE + string + default "debug/uncompress.h" if ARCH_MULTIPLATFORM || ARCH_MSM || \ +- PLAT_SAMSUNG || ARM_SINGLE_ARMV7M ++ PLAT_SAMSUNG || ARM_SINGLE_ARMV7M || \ ++ ARM_SINGLE_ARCH_VERSATILE + default "mach/uncompress.h" + + config EARLY_PRINTK +diff --git a/arch/arm/include/asm/mach/map.h b/arch/arm/include/asm/mach/map.h +index 92282558caf7..90bd9c069ffc 100644 +--- a/arch/arm/include/asm/mach/map.h ++++ b/arch/arm/include/asm/mach/map.h +@@ -59,6 +59,7 @@ extern int ioremap_page(unsigned long virt, unsigned long phys, + #else + #define iotable_init(map,num) do { } while (0) + #define vm_reserve_area_early(a,s,c) do { } while (0) ++#define debug_ll_io_init() do { } while (0) + #endif + + #endif +diff --git a/arch/arm/mach-versatile/Kconfig b/arch/arm/mach-versatile/Kconfig +index d88e7725bf99..d38b90157f13 100644 +--- a/arch/arm/mach-versatile/Kconfig ++++ b/arch/arm/mach-versatile/Kconfig +@@ -1,7 +1,8 @@ + # SPDX-License-Identifier: GPL-2.0 + config ARCH_VERSATILE +- bool "ARM Ltd. Versatile family" +- depends on ARCH_MULTI_V5 ++ bool "ARM Ltd. Versatile family" if ARCH_MULTI_V5 ++ depends on ARCH_MULTI_V5 || ARM_SINGLE_ARCH_VERSATILE ++ default y if ARM_SINGLE_ARCH_VERSATILE + select ARM_AMBA + select ARM_TIMER_SP804 + select ARM_VIC +diff --git a/arch/arm/mach-versatile/Makefile.boot b/arch/arm/mach-versatile/Makefile.boot +new file mode 100644 +index 000000000000..eacfc3f5c33e +--- /dev/null ++++ b/arch/arm/mach-versatile/Makefile.boot +@@ -0,0 +1,3 @@ ++# Empty file waiting for deletion once Makefile.boot isn't needed any more. ++# Patch waits for application at ++# http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=7889/1 . +diff --git a/arch/arm/mach-versatile/versatile_dt.c b/arch/arm/mach-versatile/versatile_dt.c +index 02ba68abe533..835b51bc597b 100644 +--- a/arch/arm/mach-versatile/versatile_dt.c ++++ b/arch/arm/mach-versatile/versatile_dt.c +@@ -22,7 +22,11 @@ + #include + + /* macro to get at MMIO space when running virtually */ ++#ifdef CONFIG_MMU + #define IO_ADDRESS(x) (((x) & 0x0fffffff) + (((x) >> 4) & 0x0f000000) + 0xf0000000) ++#else ++#define IO_ADDRESS(x) (x) ++#endif + #define __io_address(n) ((void __iomem __force *)IO_ADDRESS(n)) + + /* +-- +2.17.1 + diff --git a/board/qemu/arm-versatile/readme.txt b/board/qemu/arm-versatile/readme.txt new file mode 100644 index 00000000..223bd55c --- /dev/null +++ b/board/qemu/arm-versatile/readme.txt @@ -0,0 +1,10 @@ +Run the emulation with: + + qemu-system-arm -M versatilepb -kernel output/images/zImage -dtb output/images/versatile-pb.dtb -drive file=output/images/rootfs.ext2,if=scsi,format=raw -append "rootwait root=/dev/sda console=ttyAMA0,115200" -serial stdio -net nic,model=rtl8139 -net user # qemu_arm_versatile_defconfig + +Or for the noMMU emulation: + + qemu-system-arm -M versatilepb -kernel output/images/zImage -dtb output/images/versatile-pb.dtb -append "console=ttyAMA0,115200" -serial stdio -net user -net nic,model=smc91c111 # qemu_arm_versatile_nommu_defconfig + +The login prompt will appear in the terminal that started Qemu. The +graphical window is the framebuffer. diff --git a/board/qemu/arm-vexpress-tz/linux.fragment b/board/qemu/arm-vexpress-tz/linux.fragment new file mode 100644 index 00000000..1537d938 --- /dev/null +++ b/board/qemu/arm-vexpress-tz/linux.fragment @@ -0,0 +1,3 @@ +### Enable OP-TEE +CONFIG_TEE=y +CONFIG_OPTEE=y diff --git a/board/qemu/arm-vexpress-tz/post-build.sh b/board/qemu/arm-vexpress-tz/post-build.sh new file mode 100755 index 00000000..7ead69a9 --- /dev/null +++ b/board/qemu/arm-vexpress-tz/post-build.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +set -u +set -e + +# Rename boot images for the dear TF-A +ln -sf u-boot.bin ${BINARIES_DIR}/bl33.bin +ln -sf tee-header_v2.bin ${BINARIES_DIR}/bl32.bin +ln -sf tee-pager_v2.bin ${BINARIES_DIR}/bl32_extra1.bin +ln -sf tee-pageable_v2.bin ${BINARIES_DIR}/bl32_extra2.bin diff --git a/board/qemu/arm-vexpress-tz/readme.txt b/board/qemu/arm-vexpress-tz/readme.txt new file mode 100644 index 00000000..abce7502 --- /dev/null +++ b/board/qemu/arm-vexpress-tz/readme.txt @@ -0,0 +1,136 @@ +Board qemu_arm_vexpress_tz builds a QEMU ARMv7-A target system with +OP-TEE running in the TrustZone secure world and a Linux based +OS running in the non-secure world. The board configuration enables +builds of the QEMU host ARM target emulator. + + make qemu_arm_vexpress_tz_defconfig + make + +The BIOS used in the QEMU host is the ARM Trusted Firmware-A (TF-A). TF-A +uses QEMU semihosting file access to access boot image files. The +QEMU platform is quite specific for that in TF-A and one needs to +run the emulation from the image directory for TF-A to boot the +secure and non-secure worlds. + + cd output/images && ../host/bin/qemu-system-arm \ + -machine virt -machine secure=on -cpu cortex-a15 \ + -smp 1 -s -m 1024 -d unimp \ + -serial stdio \ + -netdev user,id=vmnic -device virtio-net-device,netdev=vmnic \ + -semihosting-config enable,target=native \ + -bios bl1.bin # qemu_arm_vexpress_tz_defconfig + +The boot stage traces (if any) followed by the login prompt will appear +in the terminal that started QEMU. + +If you want to emulate more cores, use "-smp {1|2|3|4}" to select the +number of cores. + +Note: "-netdev user,id=vmnic -device virtio-net-device,netdev=vmnic" +brings network support that is used i.e. in OP-TEE regression tests. + + +-- Boot Details -- + +TF-A is used as QEMU BIOS. Its BL1 image boots and load its BL2 image. In turn, +this image loads the OP-TEE secure world (ARMv7-A BL32 stage) and the U-boot as +non-secure bootloader (BL33 stage). + +QEMU natively hosts and loads in RAM the QEMU ARM target device tree. OP-TEE +reads and modifies its content according to OP-TEE configuration. + +Enable TF-A traces from LOG_LEVEL (I.e LOG_LEVEL=40) from +BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_VARIABLES. + + +-- OP-TEE Traces -- + +Secure boot stages and/or secure runtime services may use a serial link for +their traces. + +The ARM Trusted Firmware outputs its traces on the QEMU standard (first) +serial interface. + +The OP-TEE OS uses the QEMU second serial interface. + +To get the OP-TEE OS traces, append a second -serial argument after +-serial stdio in the QEMU command line. I.e, the following enables 2 serial +consoles over telnet connections: + + cd output/images && ../host/bin/qemu-system-arm \ + -machine virt -machine secure=on -cpu cortex-a15 \ + -smp 1 -s -m 1024 -d unimp \ + -serial telnet:127.0.0.1:1235,server \ + -serial telnet:127.0.0.1:1236,server \ + -netdev user,id=vmnic -device virtio-net-device,netdev=vmnic \ + -semihosting-config enable,target=native \ + -bios bl1.bin + +QEMU is now waiting for the telnet connection. From another shell, open a +telnet connection on the port for the U-boot and Linux consoles: + + telnet 127.0.0.1 1235 + +and again for the secure console + + telnet 127.0.0.1 1236 + + +-- Using gdb -- + +One can debug the OP-TEE secure world using GDB through the QEMU host. +To do so, simply run the qemu-system-arm emulation, then run a GDB client +and connect the QEMU internal GDB server. + +The example below assumes we run QEMU and the GDB client from the same +host computer. We use option -S of qemu-system-arm to make QEMU +waiting for the GDB continue instruction before booting the images. + +From a first shell: + cd output/images && ../host/bin/qemu-system-arm \ + -machine virt -machine secure=on -cpu cortex-a15 \ + -smp 1 -s -m 1024 -d unimp \ + -serial stdio \ + -netdev user,id=vmnic -device virtio-net-device,netdev=vmnic \ + -semihosting-config enable,target=native \ + -bios bl1.bin \ + -S + +From a second shell: + ./output/host/bin/arm-linux-gdb + GNU gdb (GNU Toolchain for the A-profile Architecture 8.2-2018-08 (arm-rel-8.23)) 8.1.1.20180704-git + Copyright (C) 2018 Free Software Foundation, Inc. + ... + For help, type "help". + Type "apropos word" to search for commands related to "word". + (gdb) + +From this GDB console, connect to the target, load the OP-TEE core symbols, +set a breakpoint to its entry point (__text_start) and start emulation: + + (gdb) target remote 127.0.0.1:1234 + (gdb) symbol-file ./output/build/optee-os-/out/arm/core/tee.elf + (gdb) hbreak __text_start + Hardware assisted breakpoint 1 at 0xe100000: file core/arch/arm/kernel/generic_entry_a32.S, line 246. + (gdb) cont + Continuing. + + Thread 1 hit Breakpoint 1, _start () at core/arch/arm/kernel/generic_entry_a32.S:246 + 246 bootargs_entry + (gdb) + + +Emulation has started, TF-A has loaded OP-TEE and U-boot images in memory and +has booted OP-TEE. Emulation stopped at OP-TEE core entry. + +Note: QEMU hosts a GDB service listening to TCP port 1234, as set through +qemu-system-arm command line option -s. + +Note: To build the GDB server, the following extra options have to be added to +the Buildroot configuration: + + BR2_ENABLE_DEBUG=y + BR2_PACKAGE_GDB=y + BR2_PACKAGE_HOST_GDB=y + BR2_TOOLCHAIN_BUILDROOT_CXX=y + BR2_TOOLCHAIN_BUILDROOT_GLIBC=y diff --git a/board/qemu/arm-vexpress-tz/u-boot.config b/board/qemu/arm-vexpress-tz/u-boot.config new file mode 100644 index 00000000..fd74bf1f --- /dev/null +++ b/board/qemu/arm-vexpress-tz/u-boot.config @@ -0,0 +1,7 @@ +CONFIG_SYS_TEXT_BASE=0x60000000 +CONFIG_BOOTCOMMAND="fdt addr ${fdt_addr} && fdt resize 1000 && smhload zImage ${kernel_addr_r} && smhload rootfs.cpio.gz ${ramdisk_addr_r} ramdisk_addr_end && setenv bootargs console=ttyAMA0,115200 earlyprintk=serial,ttyAMA0,115200 && fdt chosen ${ramdisk_addr_r} ${ramdisk_addr_end} && bootz ${kernel_addr_r} - ${fdt_addr}" +CONFIG_SEMIHOSTING=y +# Drop flash accesses +CONFIG_ENV_IS_IN_FLASH=n +CONFIG_MTD=n +CONFIG_MTD_NOR_FLASH=n diff --git a/board/qemu/arm-vexpress/readme.txt b/board/qemu/arm-vexpress/readme.txt new file mode 100644 index 00000000..8d1bb72f --- /dev/null +++ b/board/qemu/arm-vexpress/readme.txt @@ -0,0 +1,9 @@ +Run the emulation with: + + qemu-system-arm -M vexpress-a9 -smp 1 -m 256 -kernel output/images/zImage -dtb output/images/vexpress-v2p-ca9.dtb -drive file=output/images/rootfs.ext2,if=sd,format=raw -append "console=ttyAMA0,115200 rootwait root=/dev/mmcblk0" -serial stdio -net nic,model=lan9118 -net user # qemu_arm_vexpress_defconfig + +The login prompt will appear in the terminal that started Qemu. The +graphical window is the framebuffer. + +If you want to emulate more cores change "-smp 1" to "-smp 2" for +dual-core or even "smp -4" for a quad-core configuration. diff --git a/board/qemu/csky/linux-ck610.config.fragment b/board/qemu/csky/linux-ck610.config.fragment new file mode 100644 index 00000000..b690c7d6 --- /dev/null +++ b/board/qemu/csky/linux-ck610.config.fragment @@ -0,0 +1,6 @@ +CONFIG_COMPILE_TEST=y +CONFIG_CPU_CK610=y +CONFIG_CPU_PM_WAIT=y +CONFIG_RAM_BASE=0x10000000 +CONFIG_CSKY_APB_INTC=y +CONFIG_GX6605S_TIMER=y diff --git a/board/qemu/csky/linux-ck807.config.fragment b/board/qemu/csky/linux-ck807.config.fragment new file mode 100644 index 00000000..b6974f01 --- /dev/null +++ b/board/qemu/csky/linux-ck807.config.fragment @@ -0,0 +1,5 @@ +CONFIG_COMPILE_TEST=y +CONFIG_CPU_CK807=y +# CONFIG_CPU_HAS_FPU is not set +CONFIG_CPU_PM_WAIT=y +CONFIG_CSKY_APB_INTC=y diff --git a/board/qemu/csky/linux-ck810.config.fragment b/board/qemu/csky/linux-ck810.config.fragment new file mode 100644 index 00000000..50fa1f4f --- /dev/null +++ b/board/qemu/csky/linux-ck810.config.fragment @@ -0,0 +1,5 @@ +CONFIG_COMPILE_TEST=y +CONFIG_CPU_CK810=y +# CONFIG_CPU_HAS_FPU is not set +CONFIG_CPU_PM_WAIT=y +CONFIG_CSKY_APB_INTC=y diff --git a/board/qemu/csky/linux-ck860.config.fragment b/board/qemu/csky/linux-ck860.config.fragment new file mode 100644 index 00000000..e8f6af10 --- /dev/null +++ b/board/qemu/csky/linux-ck860.config.fragment @@ -0,0 +1,9 @@ +CONFIG_COMPILE_TEST=y +CONFIG_CPU_CK860=y +# CONFIG_CPU_HAS_FPU is not set +CONFIG_CPU_PM_WAIT=y +CONFIG_SMP=y +CONFIG_HOTPLUG_CPU=y +CONFIG_CSKY_APB_INTC=y +CONFIG_CSKY_MPINTC=y +CONFIG_CSKY_MP_TIMER=y diff --git a/board/qemu/csky/readme.txt b/board/qemu/csky/readme.txt new file mode 100644 index 00000000..5e4cb187 --- /dev/null +++ b/board/qemu/csky/readme.txt @@ -0,0 +1,15 @@ +Run with qemu: + +For ck860 smp: + qemu-system-cskyv2 -M virt -cpu ck860 -smp 2 -nographic -kernel vmlinux # qemu_csky860_virt_defconfig + +For ck807: + qemu-system-cskyv2 -M virt -nographic -kernel vmlinux # qemu_csky807_virt_defconfig + +For ck810: + qemu-system-cskyv2 -M virt -nographic -kernel vmlinux # qemu_csky810_virt_defconfig + +For ck610: + qemu-system-cskyv1 -M virt -nographic -kernel vmlinux # qemu_csky610_virt_defconfig + +The login prompt will appear in the terminal that started Qemu. Username is root and no password. diff --git a/board/qemu/m68k-mcf5208/linux.config b/board/qemu/m68k-mcf5208/linux.config new file mode 100644 index 00000000..09a89d72 --- /dev/null +++ b/board/qemu/m68k-mcf5208/linux.config @@ -0,0 +1,28 @@ +CONFIG_M68K=y +CONFIG_COLDFIRE=y +# CONFIG_MMU is not set +CONFIG_M520x=y +CONFIG_CLOCK_SET=y +CONFIG_CLOCK_FREQ=66666666 +CONFIG_CLOCK_DIV=1 +CONFIG_M5208EVB=y +CONFIG_FREESCALE=y +CONFIG_RAMBASE=0x40000000 +CONFIG_RAMSIZE=0x0 +CONFIG_VECTORBASE=0x40000000 +CONFIG_KERNELBASE=0x40020000 +CONFIG_4KSTACKS=y +CONFIG_RAMKERNEL=y +CONFIG_BINFMT_FLAT=y +CONFIG_SERIAL_MCF=y +CONFIG_SERIAL_MCF_BAUDRATE=115200 +CONFIG_SERIAL_MCF_CONSOLE=y +CONFIG_BOOTPARAM=y +CONFIG_BOOTPARAM_STRING="console=ttyS0,115200" +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_NETDEVICES=y +CONFIG_NET_VENDOR_FREESCALE=y +CONFIG_FEC=y diff --git a/board/qemu/m68k-mcf5208/readme.txt b/board/qemu/m68k-mcf5208/readme.txt new file mode 100644 index 00000000..79bf7146 --- /dev/null +++ b/board/qemu/m68k-mcf5208/readme.txt @@ -0,0 +1,5 @@ +Run the emulation with: + + qemu-system-m68k -M mcf5208evb -cpu m5208 -kernel output/images/vmlinux -nographic # qemu_m68k_mcf5208_defconfig + +The login prompt will appear in the terminal that started Qemu. diff --git a/board/qemu/m68k-q800/linux.config b/board/qemu/m68k-q800/linux.config new file mode 100644 index 00000000..44eb70e2 --- /dev/null +++ b/board/qemu/m68k-q800/linux.config @@ -0,0 +1,26 @@ +CONFIG_M68K=y +CONFIG_M68040=y +CONFIG_M68KFPU_EMU=y +CONFIG_MAC=y +CONFIG_MACINTOSH_DRIVERS=y +CONFIG_ADB=y +CONFIG_ADB_MACII=y +CONFIG_TTY=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_NETDEVICES=y +CONFIG_MACSONIC=y +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +CONFIG_SCSI_LOWLEVEL=y +CONFIG_SCSI_MAC_ESP=y +CONFIG_BLK_DEV_SD=y +CONFIG_SERIAL_PMACZILOG=y +CONFIG_SERIAL_PMACZILOG_TTYS=y +CONFIG_SERIAL_PMACZILOG_CONSOLE=y +CONFIG_EXT4_FS=y +CONFIG_TMPFS=y diff --git a/board/qemu/m68k-q800/readme.txt b/board/qemu/m68k-q800/readme.txt new file mode 100644 index 00000000..f1db57d5 --- /dev/null +++ b/board/qemu/m68k-q800/readme.txt @@ -0,0 +1,5 @@ +Run the emulation with: + + qemu-system-m68k -M q800 -kernel output/images/vmlinux -nographic -drive file=output/images/rootfs.ext2,format=raw -append "rootwait root=/dev/sda console=ttyS0" # qemu_m68k_q800_defconfig + +The login prompt will appear in the terminal that started Qemu. diff --git a/board/qemu/microblazebe-mmu/0001-net-xilinx-xemaclite-add-2.00.b-revision.patch b/board/qemu/microblazebe-mmu/0001-net-xilinx-xemaclite-add-2.00.b-revision.patch new file mode 100644 index 00000000..eb3859f8 --- /dev/null +++ b/board/qemu/microblazebe-mmu/0001-net-xilinx-xemaclite-add-2.00.b-revision.patch @@ -0,0 +1,34 @@ +From e96b73478232aa42b773cd19371808af69fd4b95 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sat, 25 Apr 2020 09:49:11 +0200 +Subject: [PATCH] net: xilinx: xemaclite: add 2.00.b revision + +Patch added for the kernel 3.14 +- fix networking in Qemu using a small patch +- disable DTS, because linux.bin does not include any DTB the + default Qemu included DTB is used and this is okay and works fine + +https://git.buildroot.net/buildroot/commit/board/qemu/microblazebe-mmu/xilinx-xemaclite.patch?id=fa2798548368d51998fad18d7f6d1ae0ed065b33 + +[Romain: convert to git format] +Signed-off-by: Romain Naour +Cc: Waldemar Brodkorb +--- + drivers/net/ethernet/xilinx/xilinx_emaclite.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/net/ethernet/xilinx/xilinx_emaclite.c b/drivers/net/ethernet/xilinx/xilinx_emaclite.c +index 0de52e70abcc..d8c13140ca77 100644 +--- a/drivers/net/ethernet/xilinx/xilinx_emaclite.c ++++ b/drivers/net/ethernet/xilinx/xilinx_emaclite.c +@@ -1278,6 +1278,7 @@ static const struct of_device_id xemaclite_of_match[] = { + { .compatible = "xlnx,opb-ethernetlite-1.01.b", }, + { .compatible = "xlnx,xps-ethernetlite-1.00.a", }, + { .compatible = "xlnx,xps-ethernetlite-2.00.a", }, ++ { .compatible = "xlnx,xps-ethernetlite-2.00.b", }, + { .compatible = "xlnx,xps-ethernetlite-2.01.a", }, + { .compatible = "xlnx,xps-ethernetlite-3.00.a", }, + { /* end of list */ }, +-- +2.25.3 + diff --git a/board/qemu/microblazebe-mmu/linux.config b/board/qemu/microblazebe-mmu/linux.config new file mode 100644 index 00000000..7bcd3820 --- /dev/null +++ b/board/qemu/microblazebe-mmu/linux.config @@ -0,0 +1,20 @@ +CONFIG_SYSVIPC=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_OPT_LIB_ASM=y +CONFIG_XILINX_MICROBLAZE0_FAMILY="spartan3adsp" +CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR=1 +CONFIG_XILINX_MICROBLAZE0_USE_PCMP_INSTR=1 +CONFIG_XILINX_MICROBLAZE0_USE_BARREL=1 +CONFIG_XILINX_MICROBLAZE0_USE_HW_MUL=1 +CONFIG_MMU=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_NETDEVICES=y +CONFIG_XILINX_EMACLITE=y +CONFIG_SERIAL_UARTLITE=y +CONFIG_SERIAL_UARTLITE_CONSOLE=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_TMPFS=y diff --git a/board/qemu/microblazebe-mmu/readme.txt b/board/qemu/microblazebe-mmu/readme.txt new file mode 100644 index 00000000..7bb98642 --- /dev/null +++ b/board/qemu/microblazebe-mmu/readme.txt @@ -0,0 +1,5 @@ +Run the emulation with: + + qemu-system-microblaze -M petalogix-s3adsp1800 -kernel output/images/linux.bin -serial stdio # qemu_microblazebe_mmu_defconfig + +The login prompt will appear in the terminal that started Qemu. diff --git a/board/qemu/microblazeel-mmu/0001-net-xilinx-xemaclite-add-2.00.b-revision.patch b/board/qemu/microblazeel-mmu/0001-net-xilinx-xemaclite-add-2.00.b-revision.patch new file mode 100644 index 00000000..eb3859f8 --- /dev/null +++ b/board/qemu/microblazeel-mmu/0001-net-xilinx-xemaclite-add-2.00.b-revision.patch @@ -0,0 +1,34 @@ +From e96b73478232aa42b773cd19371808af69fd4b95 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sat, 25 Apr 2020 09:49:11 +0200 +Subject: [PATCH] net: xilinx: xemaclite: add 2.00.b revision + +Patch added for the kernel 3.14 +- fix networking in Qemu using a small patch +- disable DTS, because linux.bin does not include any DTB the + default Qemu included DTB is used and this is okay and works fine + +https://git.buildroot.net/buildroot/commit/board/qemu/microblazebe-mmu/xilinx-xemaclite.patch?id=fa2798548368d51998fad18d7f6d1ae0ed065b33 + +[Romain: convert to git format] +Signed-off-by: Romain Naour +Cc: Waldemar Brodkorb +--- + drivers/net/ethernet/xilinx/xilinx_emaclite.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/net/ethernet/xilinx/xilinx_emaclite.c b/drivers/net/ethernet/xilinx/xilinx_emaclite.c +index 0de52e70abcc..d8c13140ca77 100644 +--- a/drivers/net/ethernet/xilinx/xilinx_emaclite.c ++++ b/drivers/net/ethernet/xilinx/xilinx_emaclite.c +@@ -1278,6 +1278,7 @@ static const struct of_device_id xemaclite_of_match[] = { + { .compatible = "xlnx,opb-ethernetlite-1.01.b", }, + { .compatible = "xlnx,xps-ethernetlite-1.00.a", }, + { .compatible = "xlnx,xps-ethernetlite-2.00.a", }, ++ { .compatible = "xlnx,xps-ethernetlite-2.00.b", }, + { .compatible = "xlnx,xps-ethernetlite-2.01.a", }, + { .compatible = "xlnx,xps-ethernetlite-3.00.a", }, + { /* end of list */ }, +-- +2.25.3 + diff --git a/board/qemu/microblazeel-mmu/linux.config b/board/qemu/microblazeel-mmu/linux.config new file mode 100644 index 00000000..a6228280 --- /dev/null +++ b/board/qemu/microblazeel-mmu/linux.config @@ -0,0 +1,19 @@ +CONFIG_SYSVIPC=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_XILINX_MICROBLAZE0_FAMILY="spartan3adsp" +CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR=1 +CONFIG_XILINX_MICROBLAZE0_USE_PCMP_INSTR=1 +CONFIG_XILINX_MICROBLAZE0_USE_BARREL=1 +CONFIG_XILINX_MICROBLAZE0_USE_HW_MUL=1 +CONFIG_MMU=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_NETDEVICES=y +CONFIG_XILINX_EMACLITE=y +CONFIG_SERIAL_UARTLITE=y +CONFIG_SERIAL_UARTLITE_CONSOLE=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_TMPFS=y diff --git a/board/qemu/microblazeel-mmu/readme.txt b/board/qemu/microblazeel-mmu/readme.txt new file mode 100644 index 00000000..20fa0072 --- /dev/null +++ b/board/qemu/microblazeel-mmu/readme.txt @@ -0,0 +1,5 @@ +Run the emulation with: + + qemu-system-microblazeel -M petalogix-s3adsp1800 -kernel output/images/linux.bin -serial stdio # qemu_microblazeel_mmu_defconfig + +The login prompt will appear in the terminal that started Qemu. diff --git a/board/qemu/mips32r2-malta/linux.config b/board/qemu/mips32r2-malta/linux.config new file mode 100644 index 00000000..3a26ac83 --- /dev/null +++ b/board/qemu/mips32r2-malta/linux.config @@ -0,0 +1,30 @@ +CONFIG_MIPS_MALTA=y +CONFIG_CPU_MIPS32_R2=y +CONFIG_MIPS_MT_SMP=y +CONFIG_NR_CPUS=2 +CONFIG_SYSVIPC=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_PCI=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IDE=y +CONFIG_BLK_DEV_IDECD=y +CONFIG_IDE_GENERIC=y +CONFIG_BLK_DEV_GENERIC=y +CONFIG_BLK_DEV_PIIX=y +CONFIG_NETDEVICES=y +CONFIG_PCNET32=y +CONFIG_INPUT_EVDEV=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_FB=y +CONFIG_FB_CIRRUS=y +CONFIG_USB=y +CONFIG_USB_UHCI_HCD=y +CONFIG_EXT4_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y diff --git a/board/qemu/mips32r2-malta/readme.txt b/board/qemu/mips32r2-malta/readme.txt new file mode 100644 index 00000000..db1db65b --- /dev/null +++ b/board/qemu/mips32r2-malta/readme.txt @@ -0,0 +1,7 @@ +Run the emulation with: + + qemu-system-mips -M malta -kernel output/images/vmlinux -serial stdio -drive file=output/images/rootfs.ext2,format=raw -append "rootwait root=/dev/hda" -net nic,model=pcnet -net user # qemu_mips32r2_malta_defconfig + +The login prompt will appear in the terminal that started Qemu. The +graphical window is the framebuffer. No keyboard support has been +enabled. diff --git a/board/qemu/mips32r2el-malta/linux.config b/board/qemu/mips32r2el-malta/linux.config new file mode 100644 index 00000000..79d73524 --- /dev/null +++ b/board/qemu/mips32r2el-malta/linux.config @@ -0,0 +1,31 @@ +CONFIG_MIPS_MALTA=y +CONFIG_CPU_LITTLE_ENDIAN=y +CONFIG_CPU_MIPS32_R2=y +CONFIG_MIPS_MT_SMP=y +CONFIG_NR_CPUS=2 +CONFIG_SYSVIPC=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_PCI=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IDE=y +CONFIG_BLK_DEV_IDECD=y +CONFIG_IDE_GENERIC=y +CONFIG_BLK_DEV_GENERIC=y +CONFIG_BLK_DEV_PIIX=y +CONFIG_NETDEVICES=y +CONFIG_PCNET32=y +CONFIG_INPUT_EVDEV=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_FB=y +CONFIG_FB_CIRRUS=y +CONFIG_USB=y +CONFIG_USB_UHCI_HCD=y +CONFIG_EXT4_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y diff --git a/board/qemu/mips32r2el-malta/readme.txt b/board/qemu/mips32r2el-malta/readme.txt new file mode 100644 index 00000000..4dc0e64e --- /dev/null +++ b/board/qemu/mips32r2el-malta/readme.txt @@ -0,0 +1,7 @@ +Run the emulation with: + + qemu-system-mipsel -M malta -kernel output/images/vmlinux -serial stdio -drive file=output/images/rootfs.ext2,format=raw -append "rootwait root=/dev/hda" -net nic,model=pcnet -net user # qemu_mips32r2el_malta_defconfig + +The login prompt will appear in the terminal that started Qemu. The +graphical window is the framebuffer. No keyboard support has been +enabled. diff --git a/board/qemu/mips32r6-malta/linux.config b/board/qemu/mips32r6-malta/linux.config new file mode 100644 index 00000000..d5596766 --- /dev/null +++ b/board/qemu/mips32r6-malta/linux.config @@ -0,0 +1,30 @@ +CONFIG_MIPS_MALTA=y +CONFIG_CPU_MIPS32_R6=y +CONFIG_MIPS_MT_SMP=y +CONFIG_NR_CPUS=2 +CONFIG_SYSVIPC=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_PCI=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IDE=y +CONFIG_BLK_DEV_IDECD=y +CONFIG_IDE_GENERIC=y +CONFIG_BLK_DEV_GENERIC=y +CONFIG_BLK_DEV_PIIX=y +CONFIG_NETDEVICES=y +CONFIG_PCNET32=y +CONFIG_INPUT_EVDEV=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_FB=y +CONFIG_FB_CIRRUS=y +CONFIG_USB=y +CONFIG_USB_UHCI_HCD=y +CONFIG_EXT4_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y diff --git a/board/qemu/mips32r6-malta/patches/linux/0001-mips-Do-not-include-hi-and-lo-in-clobber-list-for-R6.patch b/board/qemu/mips32r6-malta/patches/linux/0001-mips-Do-not-include-hi-and-lo-in-clobber-list-for-R6.patch new file mode 100644 index 00000000..01d78f6f --- /dev/null +++ b/board/qemu/mips32r6-malta/patches/linux/0001-mips-Do-not-include-hi-and-lo-in-clobber-list-for-R6.patch @@ -0,0 +1,149 @@ +From b9af6f34e43bf5264d75933f2080f16b8741048d Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sat, 25 Jul 2020 11:46:01 +0200 +Subject: [PATCH] mips: Do not include hi and lo in clobber list for R6 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From [1] +"GCC 10 (PR 91233) won't silently allow registers that are not architecturally +available to be present in the clobber list anymore, resulting in build failure +for mips*r6 targets in form of: +... +.../sysdep.h:146:2: error: the register ‘lo’ cannot be clobbered in ‘asm’ for the current target + 146 | __asm__ volatile ( \ + | ^~~~~~~ + +This is because base R6 ISA doesn't define hi and lo registers w/o DSP extension. +This patch provides the alternative clobber list for r6 targets that won't include +those registers." + +Since kernel 5.4 and mips support for generic vDSO [2], the kernel fail to build +for mips r6 cpus with gcc 10 for the same reason as glibc. + +[1] https://sourceware.org/git/?p=glibc.git;a=commit;h=020b2a97bb15f807c0482f0faee2184ed05bcad8 +[2] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=24640f233b466051ad3a5d2786d2951e43026c9d + +Signed-off-by: Romain Naour +--- + arch/mips/include/asm/vdso/gettimeofday.h | 45 +++++++++++++++++++++++ + 1 file changed, 45 insertions(+) + +diff --git a/arch/mips/include/asm/vdso/gettimeofday.h b/arch/mips/include/asm/vdso/gettimeofday.h +index 2203e2d0ae2a..e28096faecf6 100644 +--- a/arch/mips/include/asm/vdso/gettimeofday.h ++++ b/arch/mips/include/asm/vdso/gettimeofday.h +@@ -30,12 +30,21 @@ static __always_inline long gettimeofday_fallback( + register long nr asm("v0") = __NR_gettimeofday; + register long error asm("a3"); + ++#if MIPS_ISA_REV >= 6 ++ asm volatile( ++ " syscall\n" ++ : "=r" (ret), "=r" (error) ++ : "r" (tv), "r" (tz), "r" (nr) ++ : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", ++ "$14", "$15", "$24", "$25", "memory"); ++#else + asm volatile( + " syscall\n" + : "=r" (ret), "=r" (error) + : "r" (tv), "r" (tz), "r" (nr) + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", + "$14", "$15", "$24", "$25", "hi", "lo", "memory"); ++#endif + + return error ? -ret : ret; + } +@@ -54,12 +63,21 @@ static __always_inline long clock_gettime_fallback( + #endif + register long error asm("a3"); + ++#if MIPS_ISA_REV >= 6 ++ asm volatile( ++ " syscall\n" ++ : "=r" (ret), "=r" (error) ++ : "r" (clkid), "r" (ts), "r" (nr) ++ : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", ++ "$14", "$15", "$24", "$25", "memory"); ++#else + asm volatile( + " syscall\n" + : "=r" (ret), "=r" (error) + : "r" (clkid), "r" (ts), "r" (nr) + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", + "$14", "$15", "$24", "$25", "hi", "lo", "memory"); ++#endif + + return error ? -ret : ret; + } +@@ -78,12 +96,21 @@ static __always_inline int clock_getres_fallback( + #endif + register long error asm("a3"); + ++#if MIPS_ISA_REV >= 6 ++ asm volatile( ++ " syscall\n" ++ : "=r" (ret), "=r" (error) ++ : "r" (clkid), "r" (ts), "r" (nr) ++ : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", ++ "$14", "$15", "$24", "$25", "memory"); ++#else + asm volatile( + " syscall\n" + : "=r" (ret), "=r" (error) + : "r" (clkid), "r" (ts), "r" (nr) + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", + "$14", "$15", "$24", "$25", "hi", "lo", "memory"); ++#endif + + return error ? -ret : ret; + } +@@ -100,12 +127,21 @@ static __always_inline long clock_gettime32_fallback( + register long nr asm("v0") = __NR_clock_gettime; + register long error asm("a3"); + ++#if MIPS_ISA_REV >= 6 ++ asm volatile( ++ " syscall\n" ++ : "=r" (ret), "=r" (error) ++ : "r" (clkid), "r" (ts), "r" (nr) ++ : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", ++ "$14", "$15", "$24", "$25", "memory"); ++#else + asm volatile( + " syscall\n" + : "=r" (ret), "=r" (error) + : "r" (clkid), "r" (ts), "r" (nr) + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", + "$14", "$15", "$24", "$25", "hi", "lo", "memory"); ++#endif + + return error ? -ret : ret; + } +@@ -120,12 +156,21 @@ static __always_inline int clock_getres32_fallback( + register long nr asm("v0") = __NR_clock_getres; + register long error asm("a3"); + ++#if MIPS_ISA_REV >= 6 ++ asm volatile( ++ " syscall\n" ++ : "=r" (ret), "=r" (error) ++ : "r" (clkid), "r" (ts), "r" (nr) ++ : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", ++ "$14", "$15", "$24", "$25", "memory"); ++#else + asm volatile( + " syscall\n" + : "=r" (ret), "=r" (error) + : "r" (clkid), "r" (ts), "r" (nr) + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", + "$14", "$15", "$24", "$25", "hi", "lo", "memory"); ++#endif + + return error ? -ret : ret; + } +-- +2.17.1 + diff --git a/board/qemu/mips32r6-malta/readme.txt b/board/qemu/mips32r6-malta/readme.txt new file mode 100644 index 00000000..9ad4959f --- /dev/null +++ b/board/qemu/mips32r6-malta/readme.txt @@ -0,0 +1,5 @@ +Run the emulation with: + + qemu-system-mips -M malta -cpu mips32r6-generic -kernel output/images/vmlinux -drive file=output/images/rootfs.ext2,format=raw -append "rootwait root=/dev/hda" -nographic # qemu_mips32r6_malta_defconfig + +The login prompt will appear in the terminal that started Qemu. diff --git a/board/qemu/mips32r6el-malta/linux.config b/board/qemu/mips32r6el-malta/linux.config new file mode 100644 index 00000000..d5596766 --- /dev/null +++ b/board/qemu/mips32r6el-malta/linux.config @@ -0,0 +1,30 @@ +CONFIG_MIPS_MALTA=y +CONFIG_CPU_MIPS32_R6=y +CONFIG_MIPS_MT_SMP=y +CONFIG_NR_CPUS=2 +CONFIG_SYSVIPC=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_PCI=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IDE=y +CONFIG_BLK_DEV_IDECD=y +CONFIG_IDE_GENERIC=y +CONFIG_BLK_DEV_GENERIC=y +CONFIG_BLK_DEV_PIIX=y +CONFIG_NETDEVICES=y +CONFIG_PCNET32=y +CONFIG_INPUT_EVDEV=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_FB=y +CONFIG_FB_CIRRUS=y +CONFIG_USB=y +CONFIG_USB_UHCI_HCD=y +CONFIG_EXT4_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y diff --git a/board/qemu/mips32r6el-malta/patches/linux/0001-mips-Do-not-include-hi-and-lo-in-clobber-list-for-R6.patch b/board/qemu/mips32r6el-malta/patches/linux/0001-mips-Do-not-include-hi-and-lo-in-clobber-list-for-R6.patch new file mode 100644 index 00000000..01d78f6f --- /dev/null +++ b/board/qemu/mips32r6el-malta/patches/linux/0001-mips-Do-not-include-hi-and-lo-in-clobber-list-for-R6.patch @@ -0,0 +1,149 @@ +From b9af6f34e43bf5264d75933f2080f16b8741048d Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sat, 25 Jul 2020 11:46:01 +0200 +Subject: [PATCH] mips: Do not include hi and lo in clobber list for R6 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From [1] +"GCC 10 (PR 91233) won't silently allow registers that are not architecturally +available to be present in the clobber list anymore, resulting in build failure +for mips*r6 targets in form of: +... +.../sysdep.h:146:2: error: the register ‘lo’ cannot be clobbered in ‘asm’ for the current target + 146 | __asm__ volatile ( \ + | ^~~~~~~ + +This is because base R6 ISA doesn't define hi and lo registers w/o DSP extension. +This patch provides the alternative clobber list for r6 targets that won't include +those registers." + +Since kernel 5.4 and mips support for generic vDSO [2], the kernel fail to build +for mips r6 cpus with gcc 10 for the same reason as glibc. + +[1] https://sourceware.org/git/?p=glibc.git;a=commit;h=020b2a97bb15f807c0482f0faee2184ed05bcad8 +[2] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=24640f233b466051ad3a5d2786d2951e43026c9d + +Signed-off-by: Romain Naour +--- + arch/mips/include/asm/vdso/gettimeofday.h | 45 +++++++++++++++++++++++ + 1 file changed, 45 insertions(+) + +diff --git a/arch/mips/include/asm/vdso/gettimeofday.h b/arch/mips/include/asm/vdso/gettimeofday.h +index 2203e2d0ae2a..e28096faecf6 100644 +--- a/arch/mips/include/asm/vdso/gettimeofday.h ++++ b/arch/mips/include/asm/vdso/gettimeofday.h +@@ -30,12 +30,21 @@ static __always_inline long gettimeofday_fallback( + register long nr asm("v0") = __NR_gettimeofday; + register long error asm("a3"); + ++#if MIPS_ISA_REV >= 6 ++ asm volatile( ++ " syscall\n" ++ : "=r" (ret), "=r" (error) ++ : "r" (tv), "r" (tz), "r" (nr) ++ : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", ++ "$14", "$15", "$24", "$25", "memory"); ++#else + asm volatile( + " syscall\n" + : "=r" (ret), "=r" (error) + : "r" (tv), "r" (tz), "r" (nr) + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", + "$14", "$15", "$24", "$25", "hi", "lo", "memory"); ++#endif + + return error ? -ret : ret; + } +@@ -54,12 +63,21 @@ static __always_inline long clock_gettime_fallback( + #endif + register long error asm("a3"); + ++#if MIPS_ISA_REV >= 6 ++ asm volatile( ++ " syscall\n" ++ : "=r" (ret), "=r" (error) ++ : "r" (clkid), "r" (ts), "r" (nr) ++ : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", ++ "$14", "$15", "$24", "$25", "memory"); ++#else + asm volatile( + " syscall\n" + : "=r" (ret), "=r" (error) + : "r" (clkid), "r" (ts), "r" (nr) + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", + "$14", "$15", "$24", "$25", "hi", "lo", "memory"); ++#endif + + return error ? -ret : ret; + } +@@ -78,12 +96,21 @@ static __always_inline int clock_getres_fallback( + #endif + register long error asm("a3"); + ++#if MIPS_ISA_REV >= 6 ++ asm volatile( ++ " syscall\n" ++ : "=r" (ret), "=r" (error) ++ : "r" (clkid), "r" (ts), "r" (nr) ++ : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", ++ "$14", "$15", "$24", "$25", "memory"); ++#else + asm volatile( + " syscall\n" + : "=r" (ret), "=r" (error) + : "r" (clkid), "r" (ts), "r" (nr) + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", + "$14", "$15", "$24", "$25", "hi", "lo", "memory"); ++#endif + + return error ? -ret : ret; + } +@@ -100,12 +127,21 @@ static __always_inline long clock_gettime32_fallback( + register long nr asm("v0") = __NR_clock_gettime; + register long error asm("a3"); + ++#if MIPS_ISA_REV >= 6 ++ asm volatile( ++ " syscall\n" ++ : "=r" (ret), "=r" (error) ++ : "r" (clkid), "r" (ts), "r" (nr) ++ : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", ++ "$14", "$15", "$24", "$25", "memory"); ++#else + asm volatile( + " syscall\n" + : "=r" (ret), "=r" (error) + : "r" (clkid), "r" (ts), "r" (nr) + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", + "$14", "$15", "$24", "$25", "hi", "lo", "memory"); ++#endif + + return error ? -ret : ret; + } +@@ -120,12 +156,21 @@ static __always_inline int clock_getres32_fallback( + register long nr asm("v0") = __NR_clock_getres; + register long error asm("a3"); + ++#if MIPS_ISA_REV >= 6 ++ asm volatile( ++ " syscall\n" ++ : "=r" (ret), "=r" (error) ++ : "r" (clkid), "r" (ts), "r" (nr) ++ : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", ++ "$14", "$15", "$24", "$25", "memory"); ++#else + asm volatile( + " syscall\n" + : "=r" (ret), "=r" (error) + : "r" (clkid), "r" (ts), "r" (nr) + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", + "$14", "$15", "$24", "$25", "hi", "lo", "memory"); ++#endif + + return error ? -ret : ret; + } +-- +2.17.1 + diff --git a/board/qemu/mips32r6el-malta/readme.txt b/board/qemu/mips32r6el-malta/readme.txt new file mode 100644 index 00000000..96c9dc88 --- /dev/null +++ b/board/qemu/mips32r6el-malta/readme.txt @@ -0,0 +1,5 @@ +Run the emulation with: + + qemu-system-mipsel -M malta -cpu mips32r6-generic -kernel output/images/vmlinux -drive file=output/images/rootfs.ext2,format=raw -append "rootwait root=/dev/hda" -net nic,model=pcnet -net user -nographic # qemu_mips32r6el_malta_defconfig + +The login prompt will appear in the terminal that started Qemu. diff --git a/board/qemu/mips64-malta/linux.config b/board/qemu/mips64-malta/linux.config new file mode 100644 index 00000000..cd0b5606 --- /dev/null +++ b/board/qemu/mips64-malta/linux.config @@ -0,0 +1,34 @@ +CONFIG_MIPS_MALTA=y +CONFIG_CPU_MIPS64_R1=y +CONFIG_64BIT=y +CONFIG_MIPS_MT_SMP=y +CONFIG_NR_CPUS=2 +CONFIG_SYSVIPC=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_PCI=y +CONFIG_MIPS32_COMPAT=y +CONFIG_MIPS32_O32=y +CONFIG_MIPS32_N32=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IDE=y +CONFIG_BLK_DEV_IDECD=y +CONFIG_IDE_GENERIC=y +CONFIG_BLK_DEV_GENERIC=y +CONFIG_BLK_DEV_PIIX=y +CONFIG_NETDEVICES=y +CONFIG_PCNET32=y +CONFIG_INPUT_EVDEV=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_FB=y +CONFIG_FB_CIRRUS=y +CONFIG_USB=y +CONFIG_USB_UHCI_HCD=y +CONFIG_EXT4_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y diff --git a/board/qemu/mips64-malta/readme.txt b/board/qemu/mips64-malta/readme.txt new file mode 100644 index 00000000..7432dac1 --- /dev/null +++ b/board/qemu/mips64-malta/readme.txt @@ -0,0 +1,6 @@ +Run the emulation with: + + qemu-system-mips64 -M malta -kernel output/images/vmlinux -serial stdio -drive file=output/images/rootfs.ext2,format=raw -append "rootwait root=/dev/hda" # qemu_mips64_malta_defconfig + +The login prompt will appear in the terminal that started Qemu. The +graphical window is the framebuffer. diff --git a/board/qemu/mips64el-malta/linux.config b/board/qemu/mips64el-malta/linux.config new file mode 100644 index 00000000..c6b46d4d --- /dev/null +++ b/board/qemu/mips64el-malta/linux.config @@ -0,0 +1,35 @@ +CONFIG_MIPS_MALTA=y +CONFIG_CPU_LITTLE_ENDIAN=y +CONFIG_CPU_MIPS64_R1=y +CONFIG_64BIT=y +CONFIG_MIPS_MT_SMP=y +CONFIG_NR_CPUS=2 +CONFIG_SYSVIPC=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_PCI=y +CONFIG_MIPS32_COMPAT=y +CONFIG_MIPS32_O32=y +CONFIG_MIPS32_N32=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IDE=y +CONFIG_BLK_DEV_IDECD=y +CONFIG_IDE_GENERIC=y +CONFIG_BLK_DEV_GENERIC=y +CONFIG_BLK_DEV_PIIX=y +CONFIG_NETDEVICES=y +CONFIG_PCNET32=y +CONFIG_INPUT_EVDEV=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_FB=y +CONFIG_FB_CIRRUS=y +CONFIG_USB=y +CONFIG_USB_UHCI_HCD=y +CONFIG_EXT4_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y diff --git a/board/qemu/mips64el-malta/readme.txt b/board/qemu/mips64el-malta/readme.txt new file mode 100644 index 00000000..f67ac91a --- /dev/null +++ b/board/qemu/mips64el-malta/readme.txt @@ -0,0 +1,6 @@ +Run the emulation with: + + qemu-system-mips64el -M malta -kernel output/images/vmlinux -serial stdio -drive file=output/images/rootfs.ext2,format=raw -append "rootwait root=/dev/hda" # qemu_mips64el_malta_defconfig + +The login prompt will appear in the terminal that started Qemu. The +graphical window is the framebuffer. diff --git a/board/qemu/mips64r6-malta/linux.config b/board/qemu/mips64r6-malta/linux.config new file mode 100644 index 00000000..0ebfdbdb --- /dev/null +++ b/board/qemu/mips64r6-malta/linux.config @@ -0,0 +1,34 @@ +CONFIG_MIPS_MALTA=y +CONFIG_CPU_MIPS64_R6=y +CONFIG_64BIT=y +CONFIG_MIPS_MT_SMP=y +CONFIG_NR_CPUS=2 +CONFIG_SYSVIPC=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_PCI=y +CONFIG_MIPS32_COMPAT=y +CONFIG_MIPS32_O32=y +CONFIG_MIPS32_N32=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IDE=y +CONFIG_BLK_DEV_IDECD=y +CONFIG_IDE_GENERIC=y +CONFIG_BLK_DEV_GENERIC=y +CONFIG_BLK_DEV_PIIX=y +CONFIG_NETDEVICES=y +CONFIG_PCNET32=y +CONFIG_INPUT_EVDEV=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_FB=y +CONFIG_FB_CIRRUS=y +CONFIG_USB=y +CONFIG_USB_UHCI_HCD=y +CONFIG_EXT4_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y diff --git a/board/qemu/mips64r6-malta/patches/linux/0001-mips-Do-not-include-hi-and-lo-in-clobber-list-for-R6.patch b/board/qemu/mips64r6-malta/patches/linux/0001-mips-Do-not-include-hi-and-lo-in-clobber-list-for-R6.patch new file mode 100644 index 00000000..01d78f6f --- /dev/null +++ b/board/qemu/mips64r6-malta/patches/linux/0001-mips-Do-not-include-hi-and-lo-in-clobber-list-for-R6.patch @@ -0,0 +1,149 @@ +From b9af6f34e43bf5264d75933f2080f16b8741048d Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sat, 25 Jul 2020 11:46:01 +0200 +Subject: [PATCH] mips: Do not include hi and lo in clobber list for R6 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From [1] +"GCC 10 (PR 91233) won't silently allow registers that are not architecturally +available to be present in the clobber list anymore, resulting in build failure +for mips*r6 targets in form of: +... +.../sysdep.h:146:2: error: the register ‘lo’ cannot be clobbered in ‘asm’ for the current target + 146 | __asm__ volatile ( \ + | ^~~~~~~ + +This is because base R6 ISA doesn't define hi and lo registers w/o DSP extension. +This patch provides the alternative clobber list for r6 targets that won't include +those registers." + +Since kernel 5.4 and mips support for generic vDSO [2], the kernel fail to build +for mips r6 cpus with gcc 10 for the same reason as glibc. + +[1] https://sourceware.org/git/?p=glibc.git;a=commit;h=020b2a97bb15f807c0482f0faee2184ed05bcad8 +[2] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=24640f233b466051ad3a5d2786d2951e43026c9d + +Signed-off-by: Romain Naour +--- + arch/mips/include/asm/vdso/gettimeofday.h | 45 +++++++++++++++++++++++ + 1 file changed, 45 insertions(+) + +diff --git a/arch/mips/include/asm/vdso/gettimeofday.h b/arch/mips/include/asm/vdso/gettimeofday.h +index 2203e2d0ae2a..e28096faecf6 100644 +--- a/arch/mips/include/asm/vdso/gettimeofday.h ++++ b/arch/mips/include/asm/vdso/gettimeofday.h +@@ -30,12 +30,21 @@ static __always_inline long gettimeofday_fallback( + register long nr asm("v0") = __NR_gettimeofday; + register long error asm("a3"); + ++#if MIPS_ISA_REV >= 6 ++ asm volatile( ++ " syscall\n" ++ : "=r" (ret), "=r" (error) ++ : "r" (tv), "r" (tz), "r" (nr) ++ : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", ++ "$14", "$15", "$24", "$25", "memory"); ++#else + asm volatile( + " syscall\n" + : "=r" (ret), "=r" (error) + : "r" (tv), "r" (tz), "r" (nr) + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", + "$14", "$15", "$24", "$25", "hi", "lo", "memory"); ++#endif + + return error ? -ret : ret; + } +@@ -54,12 +63,21 @@ static __always_inline long clock_gettime_fallback( + #endif + register long error asm("a3"); + ++#if MIPS_ISA_REV >= 6 ++ asm volatile( ++ " syscall\n" ++ : "=r" (ret), "=r" (error) ++ : "r" (clkid), "r" (ts), "r" (nr) ++ : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", ++ "$14", "$15", "$24", "$25", "memory"); ++#else + asm volatile( + " syscall\n" + : "=r" (ret), "=r" (error) + : "r" (clkid), "r" (ts), "r" (nr) + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", + "$14", "$15", "$24", "$25", "hi", "lo", "memory"); ++#endif + + return error ? -ret : ret; + } +@@ -78,12 +96,21 @@ static __always_inline int clock_getres_fallback( + #endif + register long error asm("a3"); + ++#if MIPS_ISA_REV >= 6 ++ asm volatile( ++ " syscall\n" ++ : "=r" (ret), "=r" (error) ++ : "r" (clkid), "r" (ts), "r" (nr) ++ : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", ++ "$14", "$15", "$24", "$25", "memory"); ++#else + asm volatile( + " syscall\n" + : "=r" (ret), "=r" (error) + : "r" (clkid), "r" (ts), "r" (nr) + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", + "$14", "$15", "$24", "$25", "hi", "lo", "memory"); ++#endif + + return error ? -ret : ret; + } +@@ -100,12 +127,21 @@ static __always_inline long clock_gettime32_fallback( + register long nr asm("v0") = __NR_clock_gettime; + register long error asm("a3"); + ++#if MIPS_ISA_REV >= 6 ++ asm volatile( ++ " syscall\n" ++ : "=r" (ret), "=r" (error) ++ : "r" (clkid), "r" (ts), "r" (nr) ++ : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", ++ "$14", "$15", "$24", "$25", "memory"); ++#else + asm volatile( + " syscall\n" + : "=r" (ret), "=r" (error) + : "r" (clkid), "r" (ts), "r" (nr) + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", + "$14", "$15", "$24", "$25", "hi", "lo", "memory"); ++#endif + + return error ? -ret : ret; + } +@@ -120,12 +156,21 @@ static __always_inline int clock_getres32_fallback( + register long nr asm("v0") = __NR_clock_getres; + register long error asm("a3"); + ++#if MIPS_ISA_REV >= 6 ++ asm volatile( ++ " syscall\n" ++ : "=r" (ret), "=r" (error) ++ : "r" (clkid), "r" (ts), "r" (nr) ++ : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", ++ "$14", "$15", "$24", "$25", "memory"); ++#else + asm volatile( + " syscall\n" + : "=r" (ret), "=r" (error) + : "r" (clkid), "r" (ts), "r" (nr) + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", + "$14", "$15", "$24", "$25", "hi", "lo", "memory"); ++#endif + + return error ? -ret : ret; + } +-- +2.17.1 + diff --git a/board/qemu/mips64r6-malta/readme.txt b/board/qemu/mips64r6-malta/readme.txt new file mode 100644 index 00000000..252a5431 --- /dev/null +++ b/board/qemu/mips64r6-malta/readme.txt @@ -0,0 +1,5 @@ +Run the emulation with: + + qemu-system-mips64 -M malta -cpu I6400 -kernel output/images/vmlinux -drive file=output/images/rootfs.ext2,format=raw -append "rootwait root=/dev/hda" -nographic # qemu_mips64r6_malta_defconfig + +The login prompt will appear in the terminal that started Qemu. diff --git a/board/qemu/mips64r6el-malta/linux.config b/board/qemu/mips64r6el-malta/linux.config new file mode 100644 index 00000000..0ebfdbdb --- /dev/null +++ b/board/qemu/mips64r6el-malta/linux.config @@ -0,0 +1,34 @@ +CONFIG_MIPS_MALTA=y +CONFIG_CPU_MIPS64_R6=y +CONFIG_64BIT=y +CONFIG_MIPS_MT_SMP=y +CONFIG_NR_CPUS=2 +CONFIG_SYSVIPC=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_PCI=y +CONFIG_MIPS32_COMPAT=y +CONFIG_MIPS32_O32=y +CONFIG_MIPS32_N32=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IDE=y +CONFIG_BLK_DEV_IDECD=y +CONFIG_IDE_GENERIC=y +CONFIG_BLK_DEV_GENERIC=y +CONFIG_BLK_DEV_PIIX=y +CONFIG_NETDEVICES=y +CONFIG_PCNET32=y +CONFIG_INPUT_EVDEV=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_FB=y +CONFIG_FB_CIRRUS=y +CONFIG_USB=y +CONFIG_USB_UHCI_HCD=y +CONFIG_EXT4_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y diff --git a/board/qemu/mips64r6el-malta/patches/linux/0001-mips-Do-not-include-hi-and-lo-in-clobber-list-for-R6.patch b/board/qemu/mips64r6el-malta/patches/linux/0001-mips-Do-not-include-hi-and-lo-in-clobber-list-for-R6.patch new file mode 100644 index 00000000..01d78f6f --- /dev/null +++ b/board/qemu/mips64r6el-malta/patches/linux/0001-mips-Do-not-include-hi-and-lo-in-clobber-list-for-R6.patch @@ -0,0 +1,149 @@ +From b9af6f34e43bf5264d75933f2080f16b8741048d Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sat, 25 Jul 2020 11:46:01 +0200 +Subject: [PATCH] mips: Do not include hi and lo in clobber list for R6 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From [1] +"GCC 10 (PR 91233) won't silently allow registers that are not architecturally +available to be present in the clobber list anymore, resulting in build failure +for mips*r6 targets in form of: +... +.../sysdep.h:146:2: error: the register ‘lo’ cannot be clobbered in ‘asm’ for the current target + 146 | __asm__ volatile ( \ + | ^~~~~~~ + +This is because base R6 ISA doesn't define hi and lo registers w/o DSP extension. +This patch provides the alternative clobber list for r6 targets that won't include +those registers." + +Since kernel 5.4 and mips support for generic vDSO [2], the kernel fail to build +for mips r6 cpus with gcc 10 for the same reason as glibc. + +[1] https://sourceware.org/git/?p=glibc.git;a=commit;h=020b2a97bb15f807c0482f0faee2184ed05bcad8 +[2] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=24640f233b466051ad3a5d2786d2951e43026c9d + +Signed-off-by: Romain Naour +--- + arch/mips/include/asm/vdso/gettimeofday.h | 45 +++++++++++++++++++++++ + 1 file changed, 45 insertions(+) + +diff --git a/arch/mips/include/asm/vdso/gettimeofday.h b/arch/mips/include/asm/vdso/gettimeofday.h +index 2203e2d0ae2a..e28096faecf6 100644 +--- a/arch/mips/include/asm/vdso/gettimeofday.h ++++ b/arch/mips/include/asm/vdso/gettimeofday.h +@@ -30,12 +30,21 @@ static __always_inline long gettimeofday_fallback( + register long nr asm("v0") = __NR_gettimeofday; + register long error asm("a3"); + ++#if MIPS_ISA_REV >= 6 ++ asm volatile( ++ " syscall\n" ++ : "=r" (ret), "=r" (error) ++ : "r" (tv), "r" (tz), "r" (nr) ++ : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", ++ "$14", "$15", "$24", "$25", "memory"); ++#else + asm volatile( + " syscall\n" + : "=r" (ret), "=r" (error) + : "r" (tv), "r" (tz), "r" (nr) + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", + "$14", "$15", "$24", "$25", "hi", "lo", "memory"); ++#endif + + return error ? -ret : ret; + } +@@ -54,12 +63,21 @@ static __always_inline long clock_gettime_fallback( + #endif + register long error asm("a3"); + ++#if MIPS_ISA_REV >= 6 ++ asm volatile( ++ " syscall\n" ++ : "=r" (ret), "=r" (error) ++ : "r" (clkid), "r" (ts), "r" (nr) ++ : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", ++ "$14", "$15", "$24", "$25", "memory"); ++#else + asm volatile( + " syscall\n" + : "=r" (ret), "=r" (error) + : "r" (clkid), "r" (ts), "r" (nr) + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", + "$14", "$15", "$24", "$25", "hi", "lo", "memory"); ++#endif + + return error ? -ret : ret; + } +@@ -78,12 +96,21 @@ static __always_inline int clock_getres_fallback( + #endif + register long error asm("a3"); + ++#if MIPS_ISA_REV >= 6 ++ asm volatile( ++ " syscall\n" ++ : "=r" (ret), "=r" (error) ++ : "r" (clkid), "r" (ts), "r" (nr) ++ : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", ++ "$14", "$15", "$24", "$25", "memory"); ++#else + asm volatile( + " syscall\n" + : "=r" (ret), "=r" (error) + : "r" (clkid), "r" (ts), "r" (nr) + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", + "$14", "$15", "$24", "$25", "hi", "lo", "memory"); ++#endif + + return error ? -ret : ret; + } +@@ -100,12 +127,21 @@ static __always_inline long clock_gettime32_fallback( + register long nr asm("v0") = __NR_clock_gettime; + register long error asm("a3"); + ++#if MIPS_ISA_REV >= 6 ++ asm volatile( ++ " syscall\n" ++ : "=r" (ret), "=r" (error) ++ : "r" (clkid), "r" (ts), "r" (nr) ++ : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", ++ "$14", "$15", "$24", "$25", "memory"); ++#else + asm volatile( + " syscall\n" + : "=r" (ret), "=r" (error) + : "r" (clkid), "r" (ts), "r" (nr) + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", + "$14", "$15", "$24", "$25", "hi", "lo", "memory"); ++#endif + + return error ? -ret : ret; + } +@@ -120,12 +156,21 @@ static __always_inline int clock_getres32_fallback( + register long nr asm("v0") = __NR_clock_getres; + register long error asm("a3"); + ++#if MIPS_ISA_REV >= 6 ++ asm volatile( ++ " syscall\n" ++ : "=r" (ret), "=r" (error) ++ : "r" (clkid), "r" (ts), "r" (nr) ++ : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", ++ "$14", "$15", "$24", "$25", "memory"); ++#else + asm volatile( + " syscall\n" + : "=r" (ret), "=r" (error) + : "r" (clkid), "r" (ts), "r" (nr) + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", + "$14", "$15", "$24", "$25", "hi", "lo", "memory"); ++#endif + + return error ? -ret : ret; + } +-- +2.17.1 + diff --git a/board/qemu/mips64r6el-malta/readme.txt b/board/qemu/mips64r6el-malta/readme.txt new file mode 100644 index 00000000..e9d02e77 --- /dev/null +++ b/board/qemu/mips64r6el-malta/readme.txt @@ -0,0 +1,5 @@ +Run the emulation with: + + qemu-system-mips64el -M malta -cpu I6400 -kernel output/images/vmlinux -drive file=output/images/rootfs.ext2,format=raw -append "rootwait root=/dev/hda" -nographic # qemu_mips64r6el_malta_defconfig + +The login prompt will appear in the terminal that started Qemu. diff --git a/board/qemu/nios2-10m50/linux.fragment b/board/qemu/nios2-10m50/linux.fragment new file mode 100644 index 00000000..c7647cee --- /dev/null +++ b/board/qemu/nios2-10m50/linux.fragment @@ -0,0 +1,3 @@ +# Embed the DTB in the kernel image +CONFIG_NIOS2_DTB_SOURCE_BOOL=y +CONFIG_NIOS2_DTB_SOURCE="10m50_devboard.dts" diff --git a/board/qemu/nios2-10m50/readme.txt b/board/qemu/nios2-10m50/readme.txt new file mode 100644 index 00000000..f8f8f3b3 --- /dev/null +++ b/board/qemu/nios2-10m50/readme.txt @@ -0,0 +1,5 @@ +Run the emulation with: + + qemu-system-nios2 -kernel output/images/vmlinux -nographic # qemu_nios2_10m50_defconfig + +The login prompt will appear in the terminal that started Qemu. diff --git a/board/qemu/or1k/linux.config b/board/qemu/or1k/linux.config new file mode 100644 index 00000000..0a817b1e --- /dev/null +++ b/board/qemu/or1k/linux.config @@ -0,0 +1,30 @@ +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="${BR_BINARIES_DIR}/rootfs.cpio" +CONFIG_OPENRISC_BUILTIN_DTB="or1ksim" +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_IPV6 is not set +# CONFIG_WIRELESS is not set +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_TMPFS=y +CONFIG_NETDEVICES=y +CONFIG_ETHOC=y +# CONFIG_WLAN is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_SERIO is not set +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_OF_PLATFORM=y +# CONFIG_HWMON is not set +# CONFIG_VGA_CONSOLE is not set +# CONFIG_USB_SUPPORT is not set diff --git a/board/qemu/or1k/readme.txt b/board/qemu/or1k/readme.txt new file mode 100644 index 00000000..2ea79744 --- /dev/null +++ b/board/qemu/or1k/readme.txt @@ -0,0 +1,7 @@ +Run the emulation with: + + qemu-system-or1k -kernel output/images/vmlinux -nographic # qemu_or1k_defconfig + +The login prompt will appear in the terminal that started Qemu. + +Ethernet support is not working, yet. diff --git a/board/qemu/post-image.sh b/board/qemu/post-image.sh new file mode 100755 index 00000000..88f04134 --- /dev/null +++ b/board/qemu/post-image.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +QEMU_BOARD_DIR="$(dirname $0)" +DEFCONFIG_NAME="$(basename $2)" +README_FILES="${QEMU_BOARD_DIR}/*/readme.txt" +START_QEMU_SCRIPT="${BINARIES_DIR}/start-qemu.sh" + +if [[ "${DEFCONFIG_NAME}" =~ ^"qemu_*" ]]; then + # Not a Qemu defconfig, can't test. + exit 0 +fi + +# Search for "# qemu_*_defconfig" tag in all readme.txt files. +# Qemu command line on multilines using back slash are accepted. +QEMU_CMD_LINE=$(sed -r ':a; /\\$/N; s/\\\n//; s/\t/ /; ta; /# '${DEFCONFIG_NAME}'$/!d; s/#.*//' ${README_FILES}) + +if [ -z "${QEMU_CMD_LINE}" ]; then + # No Qemu cmd line found, can't test. + exit 0 +fi + +# Remove output/images path since the script will be in +# the same directory as the kernel and the rootfs images. +QEMU_CMD_LINE="${QEMU_CMD_LINE//output\/images\//}" + +# Remove -serial stdio if present, keep it as default args +DEFAULT_ARGS="$(sed -r -e '/-serial stdio/!d; s/.*(-serial stdio).*/\1/' <<<"${QEMU_CMD_LINE}")" +QEMU_CMD_LINE="${QEMU_CMD_LINE//-serial stdio/}" + +# Remove any string before qemu-system-* +QEMU_CMD_LINE="$(sed -r -e 's/^.*(qemu-system-)/\1/' <<<"${QEMU_CMD_LINE}")" + +# Disable graphical output and redirect serial I/Os to console +case ${DEFCONFIG_NAME} in + (qemu_sh4eb_r2d_defconfig|qemu_sh4_r2d_defconfig) + # Special case for SH4 + SERIAL_ARGS="-serial stdio -display none" + ;; + (*) + SERIAL_ARGS="-nographic" + ;; +esac + +cat <<-_EOF_ > "${START_QEMU_SCRIPT}" + #!/bin/sh + ( + BINARIES_DIR="\${0%/*}/" + cd \${BINARIES_DIR} + + if [ "\${1}" = "serial-only" ]; then + EXTRA_ARGS='${SERIAL_ARGS}' + else + EXTRA_ARGS='${DEFAULT_ARGS}' + fi + + export PATH="${HOST_DIR}/bin:\${PATH}" + exec ${QEMU_CMD_LINE} \${EXTRA_ARGS} + ) +_EOF_ + +chmod +x "${START_QEMU_SCRIPT}" diff --git a/board/qemu/ppc-g3beige/linux.config b/board/qemu/ppc-g3beige/linux.config new file mode 100644 index 00000000..79945535 --- /dev/null +++ b/board/qemu/ppc-g3beige/linux.config @@ -0,0 +1,25 @@ +CONFIG_ALTIVEC=y +CONFIG_SYSVIPC=y +CONFIG_HIGHMEM=y +CONFIG_YENTA=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IDE=y +CONFIG_BLK_DEV_IDECD=y +CONFIG_BLK_DEV_CMD64X=y +CONFIG_BLK_DEV_IDE_PMAC=y +CONFIG_ADB=y +CONFIG_ADB_CUDA=y +CONFIG_ADB_PMU=y +CONFIG_NETDEVICES=y +CONFIG_PCNET32=y +CONFIG_8139CP=y +CONFIG_SERIAL_PMACZILOG=y +CONFIG_SERIAL_PMACZILOG_TTYS=y +CONFIG_SERIAL_PMACZILOG_CONSOLE=y +CONFIG_EXT4_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_BOOTX_TEXT=y diff --git a/board/qemu/ppc-g3beige/readme.txt b/board/qemu/ppc-g3beige/readme.txt new file mode 100644 index 00000000..e6c9c201 --- /dev/null +++ b/board/qemu/ppc-g3beige/readme.txt @@ -0,0 +1,6 @@ +Run the emulation with: + + qemu-system-ppc -M g3beige -kernel output/images/vmlinux -drive file=output/images/rootfs.ext2,format=raw -append "console=ttyS0 rootwait root=/dev/hda" -serial stdio -net nic,model=rtl8139 -net user # qemu_ppc_g3beige_defconfig + +The login prompt will appear in the terminal that started Qemu. The +graphical window is the framebuffer. diff --git a/board/qemu/ppc-mac99/linux.fragment b/board/qemu/ppc-mac99/linux.fragment new file mode 100644 index 00000000..b1975f82 --- /dev/null +++ b/board/qemu/ppc-mac99/linux.fragment @@ -0,0 +1,3 @@ +CONFIG_SERIAL_PMACZILOG=y +CONFIG_SERIAL_PMACZILOG_TTYS=y +CONFIG_SERIAL_PMACZILOG_CONSOLE=y diff --git a/board/qemu/ppc-mac99/readme.txt b/board/qemu/ppc-mac99/readme.txt new file mode 100644 index 00000000..fb94a783 --- /dev/null +++ b/board/qemu/ppc-mac99/readme.txt @@ -0,0 +1,3 @@ +Run the emulation with: + + qemu-system-ppc -nographic -vga none -M mac99 -cpu g4 -m 1G -kernel output/images/vmlinux -drive file=output/images/rootfs.ext2,format=raw -net nic,model=sungem -net user -append "root=/dev/sda" # qemu_ppc_mac99_defconfig diff --git a/board/qemu/ppc-mpc8544ds/linux.config b/board/qemu/ppc-mpc8544ds/linux.config new file mode 100644 index 00000000..b36847c9 --- /dev/null +++ b/board/qemu/ppc-mpc8544ds/linux.config @@ -0,0 +1,38 @@ +CONFIG_PPC_85xx=y +CONFIG_PHYS_64BIT=y +CONFIG_SYSVIPC=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="${BR_BINARIES_DIR}/rootfs.cpio" +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MPC8540_ADS=y +CONFIG_MPC85xx_DS=y +CONFIG_HIGHMEM=y +CONFIG_MATH_EMULATION=y +CONFIG_PCI=y +CONFIG_PCIEPORTBUS=y +CONFIG_PCI_MSI=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_NETDEVICES=y +CONFIG_E1000=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_NR_UARTS=6 +CONFIG_SERIAL_8250_RUNTIME_UARTS=6 +CONFIG_SERIAL_8250_MANY_PORTS=y +CONFIG_SERIAL_8250_DETECT_IRQ=y +CONFIG_SERIAL_8250_RSA=y +CONFIG_USB=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_FSL=y +CONFIG_USB_OHCI_HCD=y +CONFIG_TMPFS=y diff --git a/board/qemu/ppc-mpc8544ds/patches/linux/0001-powerpc-Fix-mcpu-options-for-SPE-only-compiler.patch b/board/qemu/ppc-mpc8544ds/patches/linux/0001-powerpc-Fix-mcpu-options-for-SPE-only-compiler.patch new file mode 100644 index 00000000..b8c8a725 --- /dev/null +++ b/board/qemu/ppc-mpc8544ds/patches/linux/0001-powerpc-Fix-mcpu-options-for-SPE-only-compiler.patch @@ -0,0 +1,53 @@ +From a0919e3177295f4aaa9006915adcddc31788d809 Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Wed, 26 Dec 2018 00:00:40 +0000 +Subject: [PATCH] powerpc: Fix -mcpu= options for SPE-only compiler + +GCC for Debian's "powerpcspe" architecture only supports 32-bit +SPE targets, and using -mcpu=powerpc or -mcpu=powerpc64 is a fatal +error. + +* Change the test for a biarch compiler to pass both the -m32 and -m64 + options, so that it doesn't catch 32-bit-only compilers +* Add an ifdef CONFIG_PPC64 around the 64-bit CPU option definitions + +Signed-off-by: Ben Hutchings +[Romain: Patch from Debian repository: +https://salsa.debian.org/kernel-team/linux/-/blob/buster/debian/patches/bugfix/powerpc/powerpc-fix-mcpu-options-for-spe-only-compiler.patch] +Signed-off-by: Romain Naour +--- + arch/powerpc/Makefile | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile +index 5c8c06215dd4..e3dbea6d7ae0 100644 +--- a/arch/powerpc/Makefile ++++ b/arch/powerpc/Makefile +@@ -12,7 +12,7 @@ + # Rewritten by Cort Dougan and Paul Mackerras + # + +-HAS_BIARCH := $(call cc-option-yn, -m32) ++HAS_BIARCH := $(call cc-option-yn, -m32 -m64) + + # Set default 32 bits cross compilers for vdso and boot wrapper + CROSS32_COMPILE ?= +@@ -164,6 +164,7 @@ CFLAGS-$(CONFIG_PPC32) += $(call cc-option, $(MULTIPLEWORD)) + + CFLAGS-$(CONFIG_PPC32) += $(call cc-option,-mno-readonly-in-sdata) + ++ifdef CONFIG_PPC64 + ifdef CONFIG_PPC_BOOK3S_64 + ifdef CONFIG_CPU_LITTLE_ENDIAN + CFLAGS-$(CONFIG_GENERIC_CPU) += -mcpu=power8 +@@ -175,6 +176,7 @@ endif + else + CFLAGS-$(CONFIG_GENERIC_CPU) += -mcpu=powerpc64 + endif ++endif + + ifdef CONFIG_FUNCTION_TRACER + CC_FLAGS_FTRACE := -pg +-- +2.17.1 + diff --git a/board/qemu/ppc-mpc8544ds/readme.txt b/board/qemu/ppc-mpc8544ds/readme.txt new file mode 100644 index 00000000..d34d64c3 --- /dev/null +++ b/board/qemu/ppc-mpc8544ds/readme.txt @@ -0,0 +1,5 @@ +Run the emulation with: + + qemu-system-ppc -M mpc8544ds -kernel output/images/vmlinux -serial stdio -net nic,model=e1000 -net user # qemu_ppc_mpc8544ds_defconfig + +The login prompt will appear in the terminal that started Qemu. diff --git a/board/qemu/ppc64-e5500/linux.fragment b/board/qemu/ppc64-e5500/linux.fragment new file mode 100644 index 00000000..071a55cc --- /dev/null +++ b/board/qemu/ppc64-e5500/linux.fragment @@ -0,0 +1,10 @@ +# Enables generic PPC e500 base arch support for QEMU. +# The e5500 is a variant of the e500 arch. +CONFIG_PPC_QEMU_E500=y + +# Enable virtio (blk, rng and net devices) +CONFIG_VIRTIO=y +CONFIG_VIRTIO_PCI=y +CONFIG_HW_RANDOM_VIRTIO=y +CONFIG_VIRTIO_BLK=y +CONFIG_VIRTIO_NET=y diff --git a/board/qemu/ppc64-e5500/readme.txt b/board/qemu/ppc64-e5500/readme.txt new file mode 100644 index 00000000..61d51f7f --- /dev/null +++ b/board/qemu/ppc64-e5500/readme.txt @@ -0,0 +1,5 @@ +Run the emulation with: + + qemu-system-ppc64 -M ppce500 -cpu e5500 -m 256 -kernel output/images/uImage -drive file=output/images/rootfs.ext2,if=virtio,format=raw -append "console=ttyS0 rootwait root=/dev/vda" -serial mon:stdio -nographic # qemu_ppc64_e5500_defconfig + +The login prompt will appear in the terminal that started Qemu. diff --git a/board/qemu/ppc64-pseries/readme.txt b/board/qemu/ppc64-pseries/readme.txt new file mode 100644 index 00000000..cbd3c6ca --- /dev/null +++ b/board/qemu/ppc64-pseries/readme.txt @@ -0,0 +1,5 @@ +Run the emulation with: + + qemu-system-ppc64 -M pseries -cpu POWER7 -m 256 -kernel output/images/vmlinux -append "console=hvc0 rootwait root=/dev/sda" -drive file=output/images/rootfs.ext2,if=scsi,index=0,format=raw -serial stdio -display curses # qemu_ppc64_pseries_defconfig + +The login prompt will appear in the terminal that started Qemu. diff --git a/board/qemu/ppc64le-pseries/readme.txt b/board/qemu/ppc64le-pseries/readme.txt new file mode 100644 index 00000000..8ee72ea6 --- /dev/null +++ b/board/qemu/ppc64le-pseries/readme.txt @@ -0,0 +1,5 @@ +Run the emulation with: + +qemu-system-ppc64 -M pseries -cpu POWER8 -m 256 -kernel output/images/vmlinux -append "console=hvc0 rootwait root=/dev/sda" -drive file=output/images/rootfs.ext2,if=scsi,index=0,format=raw -serial stdio -display curses # qemu_ppc64le_pseries_defconfig + +The login prompt will appear in the terminal window. diff --git a/board/qemu/riscv32-virt/readme.txt b/board/qemu/riscv32-virt/readme.txt new file mode 100644 index 00000000..32b43335 --- /dev/null +++ b/board/qemu/riscv32-virt/readme.txt @@ -0,0 +1,5 @@ +Run Linux in emulation with: + + qemu-system-riscv32 -M virt -bios output/images/fw_jump.elf -kernel output/images/Image -append "rootwait root=/dev/vda ro" -drive file=output/images/rootfs.ext2,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 -netdev user,id=net0 -device virtio-net-device,netdev=net0 -nographic # qemu_riscv32_virt_defconfig + +The login prompt will appear in the terminal that started Qemu. diff --git a/board/qemu/riscv64-virt/readme.txt b/board/qemu/riscv64-virt/readme.txt new file mode 100644 index 00000000..747a9ea6 --- /dev/null +++ b/board/qemu/riscv64-virt/readme.txt @@ -0,0 +1,5 @@ +Run Linux in emulation with: + + qemu-system-riscv64 -M virt -bios output/images/fw_jump.elf -kernel output/images/Image -append "rootwait root=/dev/vda ro" -drive file=output/images/rootfs.ext2,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 -netdev user,id=net0 -device virtio-net-device,netdev=net0 -nographic # qemu_riscv64_virt_defconfig + +The login prompt will appear in the terminal that started Qemu. diff --git a/board/qemu/s390x/readme.txt b/board/qemu/s390x/readme.txt new file mode 100644 index 00000000..63e899c7 --- /dev/null +++ b/board/qemu/s390x/readme.txt @@ -0,0 +1,8 @@ +Run the emulation with: + + qemu-system-s390x -M s390-ccw-virtio -cpu max,zpci=on -m 4G -smp 2 \ + -kernel output/images/bzImage -drive file=output/images/rootfs.ext2,if=virtio,format=raw \ + -append "rootwait root=/dev/vda net.ifnames=0 biosdevname=0" -display none -serial mon:stdio \ + -net nic,model=virtio -net user # qemu_s390x_defconfig + +The login prompt will appear in the terminal that started Qemu. diff --git a/board/qemu/sh4-r2d/linux.config b/board/qemu/sh4-r2d/linux.config new file mode 100644 index 00000000..a3d65445 --- /dev/null +++ b/board/qemu/sh4-r2d/linux.config @@ -0,0 +1,38 @@ +CONFIG_SYSVIPC=y +CONFIG_MODULES=y +CONFIG_CPU_SUBTYPE_SH7751R=y +CONFIG_MEMORY_START=0x0c000000 +CONFIG_FLATMEM_MANUAL=y +CONFIG_SH_RTS7751R2D=y +CONFIG_RTS7751R2D_PLUS=y +CONFIG_HEARTBEAT=y +CONFIG_PCI=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_BLK_DEV_SD=y +CONFIG_ATA=y +CONFIG_PATA_PLATFORM=y +CONFIG_NETDEVICES=y +CONFIG_8139CP=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_SH_SCI=y +CONFIG_SERIAL_SH_SCI_CONSOLE=y +CONFIG_SPI=y +CONFIG_SPI_SH_SCI=y +CONFIG_MFD_SM501=y +CONFIG_FB=y +CONFIG_FB_SH_MOBILE_LCDC=y +CONFIG_FB_SH_MOBILE_HDMI=y +CONFIG_FB_SM501=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_LOGO=y +CONFIG_SOUND=y +CONFIG_SND_YMFPCI=y +CONFIG_SOUND_PRIME=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_R9701=y +CONFIG_EXT4_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y diff --git a/board/qemu/sh4-r2d/readme.txt b/board/qemu/sh4-r2d/readme.txt new file mode 100644 index 00000000..b0799e47 --- /dev/null +++ b/board/qemu/sh4-r2d/readme.txt @@ -0,0 +1,6 @@ +Run the emulation with: + + qemu-system-sh4 -M r2d -kernel output/images/zImage -drive file=output/images/rootfs.ext2,if=ide,format=raw -append "rootwait root=/dev/sda console=ttySC1,115200 noiotrap" -serial null -serial stdio -net nic,model=rtl8139 -net user # qemu_sh4_r2d_defconfig + +The login prompt will appear in the terminal that started Qemu. +The graphical window is the framebuffer. diff --git a/board/qemu/sh4eb-r2d/linux.config b/board/qemu/sh4eb-r2d/linux.config new file mode 100644 index 00000000..6ead626c --- /dev/null +++ b/board/qemu/sh4eb-r2d/linux.config @@ -0,0 +1,38 @@ +CONFIG_SYSVIPC=y +CONFIG_MODULES=y +CONFIG_CPU_SUBTYPE_SH7751R=y +CONFIG_MEMORY_START=0x0c000000 +CONFIG_FLATMEM_MANUAL=y +CONFIG_CPU_BIG_ENDIAN=y +CONFIG_SH_RTS7751R2D=y +CONFIG_RTS7751R2D_PLUS=y +CONFIG_HEARTBEAT=y +CONFIG_PCI=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_BLK_DEV_SD=y +CONFIG_ATA=y +CONFIG_PATA_PLATFORM=y +CONFIG_NETDEVICES=y +CONFIG_8139CP=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_SH_SCI=y +CONFIG_SERIAL_SH_SCI_CONSOLE=y +CONFIG_SPI=y +CONFIG_SPI_SH_SCI=y +CONFIG_MFD_SM501=y +CONFIG_FB=y +CONFIG_FB_SH_MOBILE_LCDC=y +CONFIG_FB_SH_MOBILE_HDMI=y +CONFIG_FB_SM501=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_LOGO=y +CONFIG_SND_YMFPCI=y +CONFIG_SOUND_PRIME=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_R9701=y +CONFIG_EXT4_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y diff --git a/board/qemu/sh4eb-r2d/readme.txt b/board/qemu/sh4eb-r2d/readme.txt new file mode 100644 index 00000000..9f3dd8b2 --- /dev/null +++ b/board/qemu/sh4eb-r2d/readme.txt @@ -0,0 +1,6 @@ +Run the emulation with: + + qemu-system-sh4eb -M r2d -kernel output/images/zImage -drive file=output/images/rootfs.ext2,if=ide,format=raw -append "rootwait root=/dev/sda console=ttySC1,115200 noiotrap" -serial null -serial stdio -net nic,model=rtl8139 -net user # qemu_sh4eb_r2d_defconfig + +The login prompt will appear in the terminal that started Qemu. +The graphical window is the framebuffer. diff --git a/board/qemu/sparc-ss10/linux.config b/board/qemu/sparc-ss10/linux.config new file mode 100644 index 00000000..cb8d01dc --- /dev/null +++ b/board/qemu/sparc-ss10/linux.config @@ -0,0 +1,31 @@ +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_PCI=y +CONFIG_SUN_OPENPROMFS=m +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_WIRELESS is not set +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +CONFIG_BLK_DEV_SR=y +CONFIG_CHR_DEV_SG=y +CONFIG_SCSI_SUNESP=y +CONFIG_NETDEVICES=y +CONFIG_SUNLANCE=y +# CONFIG_WLAN is not set +CONFIG_INPUT_EVDEV=y +CONFIG_KEYBOARD_SUNKBD=y +CONFIG_MOUSE_SERIAL=y +CONFIG_SERIAL_SUNZILOG=y +CONFIG_SERIAL_SUNZILOG_CONSOLE=y +CONFIG_SERIAL_SUNSU=y +CONFIG_SERIAL_SUNSU_CONSOLE=y +CONFIG_SUN_OPENPROMIO=m +CONFIG_EXT4_FS=y +CONFIG_ISO9660_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y diff --git a/board/qemu/sparc-ss10/readme.txt b/board/qemu/sparc-ss10/readme.txt new file mode 100644 index 00000000..d624b82d --- /dev/null +++ b/board/qemu/sparc-ss10/readme.txt @@ -0,0 +1,5 @@ +Run the emulation with: + + qemu-system-sparc -M SS-10 -kernel output/images/zImage -drive file=output/images/rootfs.ext2,format=raw -append "rootwait root=/dev/sda console=ttyS0,115200" -serial stdio -net nic,model=lance -net user # qemu_sparc_ss10_defconfig + +The login prompt will appear in the terminal that started Qemu. diff --git a/board/qemu/sparc64-sun4u/linux.config b/board/qemu/sparc64-sun4u/linux.config new file mode 100644 index 00000000..0e1e1687 --- /dev/null +++ b/board/qemu/sparc64-sun4u/linux.config @@ -0,0 +1,25 @@ +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_NO_HZ_IDLE=y +CONFIG_EMBEDDED=y +CONFIG_MODULES=y +CONFIG_PCI=y +CONFIG_SUN_OPENPROMFS=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_BLK_DEV_SD=y +CONFIG_ATA=y +CONFIG_PATA_CMD64X=y +CONFIG_NETDEVICES=y +CONFIG_E1000=y +CONFIG_SERIAL_SUNSU=y +CONFIG_SERIAL_SUNSU_CONSOLE=y +CONFIG_EXT4_FS=y +CONFIG_TMPFS=y +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="utf-8" +CONFIG_MAGIC_SYSRQ=y diff --git a/board/qemu/sparc64-sun4u/readme.txt b/board/qemu/sparc64-sun4u/readme.txt new file mode 100644 index 00000000..17d8cbdf --- /dev/null +++ b/board/qemu/sparc64-sun4u/readme.txt @@ -0,0 +1,5 @@ +Run the emulation with: + + qemu-system-sparc64 -M sun4u -kernel output/images/vmlinux -append "rootwait root=/dev/sda console=ttyS0,115200" -serial stdio -drive file=output/images/rootfs.ext2,format=raw -net nic,model=e1000 -net user # qemu_sparc64_sun4u_defconfig + +The login prompt will appear in the terminal that started Qemu. diff --git a/board/qemu/x86/linux.config b/board/qemu/x86/linux.config new file mode 100644 index 00000000..a4da99ff --- /dev/null +++ b/board/qemu/x86/linux.config @@ -0,0 +1,52 @@ +CONFIG_SYSVIPC=y +CONFIG_CGROUPS=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_SMP=y +CONFIG_HYPERVISOR_GUEST=y +CONFIG_PARAVIRT=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_WIRELESS is not set +CONFIG_PCI=y +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_VIRTIO_BLK=y +CONFIG_BLK_DEV_SD=y +CONFIG_SCSI_VIRTIO=y +CONFIG_ATA=y +CONFIG_ATA_PIIX=y +CONFIG_NETDEVICES=y +CONFIG_VIRTIO_NET=y +CONFIG_NE2K_PCI=y +CONFIG_8139CP=y +# CONFIG_WLAN is not set +CONFIG_INPUT_EVDEV=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_VIRTIO_CONSOLE=y +CONFIG_HW_RANDOM_VIRTIO=m +CONFIG_DRM=y +CONFIG_DRM_QXL=y +CONFIG_DRM_BOCHS=y +CONFIG_DRM_VIRTIO_GPU=y +CONFIG_SOUND=y +CONFIG_SND=y +CONFIG_SND_HDA_INTEL=y +CONFIG_SND_HDA_GENERIC=y +CONFIG_USB=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_UHCI_HCD=y +CONFIG_USB_STORAGE=y +CONFIG_VIRTIO_PCI=y +CONFIG_VIRTIO_BALLOON=y +CONFIG_VIRTIO_INPUT=y +CONFIG_VIRTIO_MMIO=y +CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y +CONFIG_EXT4_FS=y +CONFIG_AUTOFS4_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y diff --git a/board/qemu/x86/post-build.sh b/board/qemu/x86/post-build.sh new file mode 100755 index 00000000..bf83a002 --- /dev/null +++ b/board/qemu/x86/post-build.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +set -u +set -e + +# Add a console on tty1 +if [ -e ${TARGET_DIR}/etc/inittab ]; then + grep -qE '^tty1::' ${TARGET_DIR}/etc/inittab || \ + sed -i '/GENERIC_SERIAL/a\ +tty1::respawn:/sbin/getty -L tty1 0 vt100 # QEMU graphical window' ${TARGET_DIR}/etc/inittab +fi diff --git a/board/qemu/x86/readme.txt b/board/qemu/x86/readme.txt new file mode 100644 index 00000000..a1f232e2 --- /dev/null +++ b/board/qemu/x86/readme.txt @@ -0,0 +1,7 @@ +Run the emulation with: + + qemu-system-i386 -M pc -kernel output/images/bzImage -drive file=output/images/rootfs.ext2,if=virtio,format=raw -append "rootwait root=/dev/vda console=tty1 console=ttyS0" -serial stdio -net nic,model=virtio -net user # qemu_x86_defconfig + +Optionally add -smp N to emulate a SMP system with N CPUs. + +The login prompt will appear in the graphical window. diff --git a/board/qemu/x86_64/linux.config b/board/qemu/x86_64/linux.config new file mode 100644 index 00000000..e1d2ce01 --- /dev/null +++ b/board/qemu/x86_64/linux.config @@ -0,0 +1,53 @@ +CONFIG_SYSVIPC=y +CONFIG_CGROUPS=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_SMP=y +CONFIG_HYPERVISOR_GUEST=y +CONFIG_PARAVIRT=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_WIRELESS is not set +CONFIG_PCI=y +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_VIRTIO_BLK=y +CONFIG_BLK_DEV_SD=y +CONFIG_SCSI_VIRTIO=y +CONFIG_ATA=y +CONFIG_ATA_PIIX=y +CONFIG_NETDEVICES=y +CONFIG_VIRTIO_NET=y +CONFIG_NE2K_PCI=y +CONFIG_8139CP=y +# CONFIG_WLAN is not set +CONFIG_INPUT_EVDEV=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_VIRTIO_CONSOLE=y +CONFIG_HW_RANDOM_VIRTIO=m +CONFIG_DRM=y +CONFIG_DRM_QXL=y +CONFIG_DRM_BOCHS=y +CONFIG_DRM_VIRTIO_GPU=y +CONFIG_SOUND=y +CONFIG_SND=y +CONFIG_SND_HDA_INTEL=y +CONFIG_SND_HDA_GENERIC=y +CONFIG_USB=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_UHCI_HCD=y +CONFIG_USB_STORAGE=y +CONFIG_VIRTIO_PCI=y +CONFIG_VIRTIO_BALLOON=y +CONFIG_VIRTIO_INPUT=y +CONFIG_VIRTIO_MMIO=y +CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y +CONFIG_EXT4_FS=y +CONFIG_AUTOFS4_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_UNWINDER_FRAME_POINTER=y diff --git a/board/qemu/x86_64/post-build.sh b/board/qemu/x86_64/post-build.sh new file mode 100755 index 00000000..bf83a002 --- /dev/null +++ b/board/qemu/x86_64/post-build.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +set -u +set -e + +# Add a console on tty1 +if [ -e ${TARGET_DIR}/etc/inittab ]; then + grep -qE '^tty1::' ${TARGET_DIR}/etc/inittab || \ + sed -i '/GENERIC_SERIAL/a\ +tty1::respawn:/sbin/getty -L tty1 0 vt100 # QEMU graphical window' ${TARGET_DIR}/etc/inittab +fi diff --git a/board/qemu/x86_64/readme.txt b/board/qemu/x86_64/readme.txt new file mode 100644 index 00000000..2b2ae3be --- /dev/null +++ b/board/qemu/x86_64/readme.txt @@ -0,0 +1,7 @@ +Run the emulation with: + + qemu-system-x86_64 -M pc -kernel output/images/bzImage -drive file=output/images/rootfs.ext2,if=virtio,format=raw -append "rootwait root=/dev/vda console=tty1 console=ttyS0" -serial stdio -net nic,model=virtio -net user # qemu_x86_64_defconfig + +Optionally add -smp N to emulate a SMP system with N CPUs. + +The login prompt will appear in the graphical window. diff --git a/board/qemu/xtensa-lx60/linux-nommu.config b/board/qemu/xtensa-lx60/linux-nommu.config new file mode 100644 index 00000000..8077645e --- /dev/null +++ b/board/qemu/xtensa-lx60/linux-nommu.config @@ -0,0 +1,39 @@ +CONFIG_NO_HZ_IDLE=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_XTENSA_VARIANT_CUSTOM=y +CONFIG_XTENSA_VARIANT_CUSTOM_NAME="dc233c" +# CONFIG_XTENSA_VARIANT_MMU is not set +CONFIG_XTENSA_UNALIGNED_USER=y +CONFIG_PREEMPT=y +CONFIG_MEMMAP_CACHEATTR=0x2cccccc7 +CONFIG_KERNEL_LOAD_ADDRESS=0x00003000 +# CONFIG_PCI is not set +CONFIG_XTENSA_PLATFORM_XTFPGA=y +CONFIG_CMDLINE_BOOL=y +CONFIG_CMDLINE="earlycon=uart8250,mmio32,0xfd050020,115200n8 console=ttyS0,115200n8 memmap=0x04000000@0" +CONFIG_DEFAULT_MEM_START=0x00000000 +CONFIG_BINFMT_FLAT=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IPV6 is not set +CONFIG_NETFILTER=y +CONFIG_DNS_RESOLVER=y +# CONFIG_WIRELESS is not set +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_NETDEVICES=y +CONFIG_MARVELL_PHY=y +# CONFIG_WLAN is not set +CONFIG_SERIAL_8250=y +# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set +CONFIG_SERIAL_8250_CONSOLE=y +# CONFIG_HWMON is not set +# CONFIG_VGA_CONSOLE is not set +CONFIG_TMPFS=y +CONFIG_FANOTIFY=y +CONFIG_PRINTK_TIME=y +# CONFIG_S32C1I_SELFTEST is not set diff --git a/board/qemu/xtensa-lx60/linux.config b/board/qemu/xtensa-lx60/linux.config new file mode 100644 index 00000000..625b8604 --- /dev/null +++ b/board/qemu/xtensa-lx60/linux.config @@ -0,0 +1,36 @@ +# CONFIG_SWAP is not set +# CONFIG_CROSS_MEMORY_ATTACH is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_XTENSA_VARIANT_DC233C=y +CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX=y +CONFIG_XTENSA_PLATFORM_XTFPGA=y +CONFIG_CMDLINE_BOOL=y +CONFIG_CMDLINE="console=ttyS0,38400 memmap=0x04000000@0" +# CONFIG_COMPACTION is not set +# CONFIG_BOUNCE is not set +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_LRO is not set +# CONFIG_INET_DIAG is not set +# CONFIG_IPV6 is not set +# CONFIG_WIRELESS is not set +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_NETDEVICES=y +# CONFIG_WLAN is not set +CONFIG_SERIAL_8250=y +# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set +CONFIG_SERIAL_8250_CONSOLE=y +# CONFIG_HW_RANDOM is not set +# CONFIG_HWMON is not set +# CONFIG_VGA_CONSOLE is not set +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_LD_NO_RELAX=y +# CONFIG_S32C1I_SELFTEST is not set diff --git a/board/qemu/xtensa-lx60/readme.txt b/board/qemu/xtensa-lx60/readme.txt new file mode 100644 index 00000000..6f0e2710 --- /dev/null +++ b/board/qemu/xtensa-lx60/readme.txt @@ -0,0 +1,7 @@ +Run the emulation with: + + qemu-system-xtensa -M lx60 -cpu dc233c -monitor null -nographic -kernel output/images/Image.elf # qemu_xtensa_lx60_defconfig + + qemu-system-xtensa -M lx60 -cpu dc233c -monitor null -nographic -kernel output/images/Image.elf # qemu_xtensa_lx60_nommu_defconfig + +The login prompt will appear in the terminal that started Qemu. diff --git a/board/qmtech/zynq/patches/linux/0001-DTS-for-QMTech-Zynq-starter-kit.patch b/board/qmtech/zynq/patches/linux/0001-DTS-for-QMTech-Zynq-starter-kit.patch new file mode 100644 index 00000000..86d8e387 --- /dev/null +++ b/board/qmtech/zynq/patches/linux/0001-DTS-for-QMTech-Zynq-starter-kit.patch @@ -0,0 +1,418 @@ +From 22d955122ac0f7ac74ab74aadebf6b8edaf0bbbd Mon Sep 17 00:00:00 2001 +From: Julien Olivain +Date: Sun, 15 Dec 2019 18:45:40 +0100 +Subject: [PATCH] DTS for QMTech Zynq starter kit + +Signed-off-by: Martin Chabot +Signed-off-by: Julien Olivain +--- + arch/arm/boot/dts/zynq-qmtech.dts | 397 ++++++++++++++++++++++++++++++ + 1 file changed, 397 insertions(+) + create mode 100644 arch/arm/boot/dts/zynq-qmtech.dts + +diff --git a/arch/arm/boot/dts/zynq-qmtech.dts b/arch/arm/boot/dts/zynq-qmtech.dts +new file mode 100644 +index 000000000000..c6081dc0080e +--- /dev/null ++++ b/arch/arm/boot/dts/zynq-qmtech.dts +@@ -0,0 +1,397 @@ ++// SPDX-License-Identifier: GPL-2.0+ ++/* ++ * Copyright (C) 2011 - 2015 Xilinx ++ * Copyright (C) 2012 National Instruments Corp. ++ * Copyright (C) 2019 Martin Chabot ++ */ ++ ++/* Derived from: ++ * https://github.com/Xilinx/linux-xlnx/blob/xilinx-v2019.2.01/arch/arm/boot/dts/zynq-zc702.dts ++ */ ++ ++/dts-v1/; ++#include "zynq-7000.dtsi" ++ ++/ { ++ model = "QMTECH XC7Z010 Starter Kit"; ++ compatible = "xlnx,zynq-qmtech", "xlnx,zynq-zc702", "xlnx,zynq-7000"; ++ ++ aliases { ++ ethernet0 = &gem0; ++ i2c0 = &i2c0; ++ serial0 = &uart1; ++ spi0 = &qspi; ++ mmc0 = &sdhci0; ++ }; ++ ++ memory@0 { ++ device_type = "memory"; ++ reg = <0x0 0x20000000>; ++ }; ++ ++ chosen { ++ bootargs = ""; ++ stdout-path = "serial0:115200n8"; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ ds23 { ++ label = "ds23"; ++ gpios = <&gpio0 10 0>; ++ linux,default-trigger = "heartbeat"; ++ }; ++ }; ++ ++}; ++ ++&amba { ++ ocm: sram@fffc0000 { ++ compatible = "mmio-sram"; ++ reg = <0xfffc0000 0x10000>; ++ }; ++}; ++ ++&clkc { ++ ps-clk-frequency = <33333333>; ++}; ++ ++&gem0 { ++ status = "okay"; ++ phy-mode = "rgmii-id"; ++ phy-handle = <ðernet_phy>; ++ ++ ethernet_phy: ethernet-phy@0 { ++ reg = <0>; ++ device_type = "ethernet-phy"; ++ }; ++}; ++ ++&gpio0 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_gpio0_default>; ++}; ++ ++&i2c0 { ++ status = "disabled"; ++ clock-frequency = <400000>; ++ pinctrl-names = "default", "gpio"; ++ pinctrl-0 = <&pinctrl_i2c0_default>; ++ pinctrl-1 = <&pinctrl_i2c0_gpio>; ++ scl-gpios = <&gpio0 50 0>; ++ sda-gpios = <&gpio0 51 0>; ++ ++ i2c-mux@74 { ++ compatible = "nxp,pca9548"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ reg = <0x74>; ++ ++ i2c@0 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ reg = <0>; ++ si570: clock-generator@5d { ++ #clock-cells = <0>; ++ compatible = "silabs,si570"; ++ temperature-stability = <50>; ++ reg = <0x5d>; ++ factory-fout = <156250000>; ++ clock-frequency = <148500000>; ++ }; ++ }; ++ ++ i2c@1 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ reg = <1>; ++ adv7511: hdmi-tx@39 { ++ compatible = "adi,adv7511"; ++ reg = <0x39>; ++ adi,input-depth = <8>; ++ adi,input-colorspace = "yuv422"; ++ adi,input-clock = "1x"; ++ adi,input-style = <3>; ++ adi,input-justification = "right"; ++ }; ++ }; ++ ++ i2c@2 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ reg = <2>; ++ eeprom@54 { ++ compatible = "atmel,24c08"; ++ reg = <0x54>; ++ }; ++ }; ++ ++ i2c@3 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ reg = <3>; ++ gpio@21 { ++ compatible = "ti,tca6416"; ++ reg = <0x21>; ++ gpio-controller; ++ #gpio-cells = <2>; ++ }; ++ }; ++ ++ i2c@4 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ reg = <4>; ++ rtc@51 { ++ compatible = "nxp,pcf8563"; ++ reg = <0x51>; ++ }; ++ }; ++ ++ i2c@7 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ reg = <7>; ++ hwmon@52 { ++ compatible = "ti,ucd9248"; ++ reg = <52>; ++ }; ++ hwmon@53 { ++ compatible = "ti,ucd9248"; ++ reg = <53>; ++ }; ++ hwmon@54 { ++ compatible = "ti,ucd9248"; ++ reg = <54>; ++ }; ++ }; ++ }; ++}; ++ ++&pinctrl0 { ++ pinctrl_can0_default: can0-default { ++ mux { ++ function = "can0"; ++ groups = "can0_9_grp"; ++ }; ++ ++ conf { ++ groups = "can0_9_grp"; ++ slew-rate = <0>; ++ io-standard = <1>; ++ }; ++ ++ conf-rx { ++ pins = "MIO46"; ++ bias-high-impedance; ++ }; ++ ++ conf-tx { ++ pins = "MIO47"; ++ bias-disable; ++ }; ++ }; ++ ++ pinctrl_gem0_default: gem0-default { ++ mux { ++ function = "ethernet0"; ++ groups = "ethernet0_0_grp"; ++ }; ++ ++ conf { ++ groups = "ethernet0_0_grp"; ++ slew-rate = <0>; ++ io-standard = <4>; ++ }; ++ ++ conf-rx { ++ pins = "MIO22", "MIO23", "MIO24", "MIO25", "MIO26", "MIO27"; ++ bias-high-impedance; ++ low-power-disable; ++ }; ++ ++ conf-tx { ++ pins = "MIO16", "MIO17", "MIO18", "MIO19", "MIO20", "MIO21"; ++ bias-disable; ++ low-power-enable; ++ }; ++ ++ mux-mdio { ++ function = "mdio0"; ++ groups = "mdio0_0_grp"; ++ }; ++ ++ conf-mdio { ++ groups = "mdio0_0_grp"; ++ slew-rate = <0>; ++ io-standard = <1>; ++ bias-disable; ++ }; ++ }; ++ ++ pinctrl_gpio0_default: gpio0-default { ++ mux { ++ function = "gpio0"; ++ groups = "gpio0_7_grp", "gpio0_8_grp", "gpio0_9_grp", ++ "gpio0_10_grp", "gpio0_11_grp", "gpio0_12_grp", ++ "gpio0_13_grp", "gpio0_14_grp"; ++ }; ++ ++ conf { ++ groups = "gpio0_7_grp", "gpio0_8_grp", "gpio0_9_grp", ++ "gpio0_10_grp", "gpio0_11_grp", "gpio0_12_grp", ++ "gpio0_13_grp", "gpio0_14_grp"; ++ slew-rate = <0>; ++ io-standard = <1>; ++ }; ++ ++ conf-pull-up { ++ pins = "MIO9", "MIO10", "MIO11", "MIO12", "MIO13", "MIO14"; ++ bias-pull-up; ++ }; ++ ++ conf-pull-none { ++ pins = "MIO7", "MIO8"; ++ bias-disable; ++ }; ++ }; ++ ++ pinctrl_i2c0_default: i2c0-default { ++ mux { ++ groups = "i2c0_10_grp"; ++ function = "i2c0"; ++ }; ++ ++ conf { ++ groups = "i2c0_10_grp"; ++ bias-pull-up; ++ slew-rate = <0>; ++ io-standard = <1>; ++ }; ++ }; ++ ++ pinctrl_i2c0_gpio: i2c0-gpio { ++ mux { ++ groups = "gpio0_50_grp", "gpio0_51_grp"; ++ function = "gpio0"; ++ }; ++ ++ conf { ++ groups = "gpio0_50_grp", "gpio0_51_grp"; ++ slew-rate = <0>; ++ io-standard = <1>; ++ }; ++ }; ++ ++ pinctrl_sdhci0_default: sdhci0-default { ++ mux { ++ groups = "sdio0_2_grp"; ++ function = "sdio0"; ++ }; ++ ++ conf { ++ groups = "sdio0_2_grp"; ++ slew-rate = <0>; ++ io-standard = <1>; ++ bias-disable; ++ }; ++ ++ mux-cd { ++ groups = "gpio0_0_grp"; ++ function = "sdio0_cd"; ++ }; ++ ++ conf-cd { ++ groups = "gpio0_0_grp"; ++ bias-high-impedance; ++ bias-pull-up; ++ slew-rate = <0>; ++ io-standard = <1>; ++ }; ++ ++ mux-wp { ++ groups = "gpio0_15_grp"; ++ function = "sdio0_wp"; ++ }; ++ ++ conf-wp { ++ groups = "gpio0_15_grp"; ++ bias-high-impedance; ++ bias-pull-up; ++ slew-rate = <0>; ++ io-standard = <1>; ++ }; ++ }; ++ ++ pinctrl_uart1_default: uart1-default { ++ mux { ++ groups = "uart1_10_grp"; ++ function = "uart1"; ++ }; ++ ++ conf { ++ groups = "uart1_10_grp"; ++ slew-rate = <0>; ++ io-standard = <1>; ++ }; ++ ++ conf-rx { ++ pins = "MIO25"; ++ bias-high-impedance; ++ }; ++ ++ conf-tx { ++ pins = "MIO24"; ++ bias-disable; ++ }; ++ }; ++}; ++ ++&qspi { ++ u-boot,dm-pre-reloc; ++ status = "disabled"; ++ is-dual = <0>; ++ num-cs = <1>; ++ flash@0 { ++ compatible = "n25q128a11"; ++ reg = <0x0>; ++ spi-tx-bus-width = <1>; ++ spi-rx-bus-width = <4>; ++ spi-max-frequency = <50000000>; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ partition@qspi-fsbl-uboot { ++ label = "qspi-fsbl-uboot"; ++ reg = <0x0 0x100000>; ++ }; ++ partition@qspi-linux { ++ label = "qspi-linux"; ++ reg = <0x100000 0x500000>; ++ }; ++ partition@qspi-device-tree { ++ label = "qspi-device-tree"; ++ reg = <0x600000 0x20000>; ++ }; ++ partition@qspi-rootfs { ++ label = "qspi-rootfs"; ++ reg = <0x620000 0x5E0000>; ++ }; ++ partition@qspi-bitstream { ++ label = "qspi-bitstream"; ++ reg = <0xC00000 0x400000>; ++ }; ++ }; ++}; ++ ++&sdhci0 { ++ u-boot,dm-pre-reloc; ++ status = "okay"; ++}; ++ ++&uart1 { ++ u-boot,dm-pre-reloc; ++ status = "okay"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_uart1_default>; ++}; +-- +2.23.0 + diff --git a/board/qmtech/zynq/readme.txt b/board/qmtech/zynq/readme.txt new file mode 100644 index 00000000..5fb95bb9 --- /dev/null +++ b/board/qmtech/zynq/readme.txt @@ -0,0 +1,76 @@ +******************************* +QMTECH Zynq XC7Z010 Starter Kit +******************************* + +This file documents the Buildroot support for the QMTECH [1] Zynq +XC7Z010 Starter Kit [2]. It is a low cost (~55$) Zynq based +development board. The board user manual is available at +[3]. Additional files are available on Github [4]. + + +Build +===== + +First, configure Buildroot for the QMTECH Zynq board: + + make zynq_qmtech_defconfig + +Build all components: + + make + +You will find in output/images/ the following files: + - boot.bin + - boot.vfat + - devicetree.dtb + - rootfs.cpio + - rootfs.cpio.gz + - rootfs.cpio.uboot + - rootfs.tar + - sdcard.img + - u-boot.bin + - u-boot.img + - uImage + - zynq-qmtech.dtb + + +Create a bootable micro SD card +=============================== + +To determine the device associated to the micro SD card have a look in +the /proc/partitions file: + + cat /proc/partitions + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on a micro SD card. Launch the following +command as root: + + dd if=output/images/sdcard.img of=/dev/ + +*** WARNING! This will destroy all the card content. Use with care! *** + + +Boot the QMTECH Zynq board +========================== + +To boot your newly created system: +- put a mini USB cable into the J4 Debug USB Port and connect using a + terminal emulator at 115200 bps, 8n1, +- put the prepared micro SD card in the J2 micro SD card slot, +- plug the 5V power supply on the JP4 barrel jack. + +Enjoy! + + +[1]. QMTECH: + http://www.chinaqmtech.com/ + +[2]. QMTECH Zynq XC7Z010 Starter Kit Product Page: + http://www.chinaqmtech.com/xilinx_zynq_soc + +[3]. QMTECH Zynq XC7Z010 Starter Kit Hardware User Manual: + http://www.chinaqmtech.com/filedownload/32552 + +[4]. QMTECH Github: + https://github.com/ChinaQMTECH/ZYNQ_STARTER_KIT diff --git a/board/radxa/rockpi-4/extlinux.conf b/board/radxa/rockpi-4/extlinux.conf new file mode 100644 index 00000000..83374f17 --- /dev/null +++ b/board/radxa/rockpi-4/extlinux.conf @@ -0,0 +1,4 @@ +label RK3399_ROCK_PI_4 linux + kernel /Image + devicetree /rk3399-rock-pi-4.dtb + append earlycon=uart8250,mmio32,0xff1a0000 root=/dev/mmcblk1p4 rw rootwait diff --git a/board/radxa/rockpi-4/genimage.cfg b/board/radxa/rockpi-4/genimage.cfg new file mode 100644 index 00000000..88986df3 --- /dev/null +++ b/board/radxa/rockpi-4/genimage.cfg @@ -0,0 +1,39 @@ +image boot.vfat { + vfat { + files = { + "Image", + "rk3399-rock-pi-4.dtb", + "extlinux" + } + } + size = 112M +} + +image sdcard.img { + + hdimage { + gpt = true + } + + partition loader1 { + image = "idbloader.img" + offset = 32K + } + + partition loader2 { + image = "u-boot.itb" + offset = 8M + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 16M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/radxa/rockpi-4/post-build.sh b/board/radxa/rockpi-4/post-build.sh new file mode 100755 index 00000000..ba29375c --- /dev/null +++ b/board/radxa/rockpi-4/post-build.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" + +install -m 0644 -D $BOARD_DIR/extlinux.conf $BINARIES_DIR/extlinux/extlinux.conf diff --git a/board/radxa/rockpi-4/readme.txt b/board/radxa/rockpi-4/readme.txt new file mode 100644 index 00000000..1db7569e --- /dev/null +++ b/board/radxa/rockpi-4/readme.txt @@ -0,0 +1,61 @@ +RADXA ROCK_PI_4 +================ +https://rockpi.org/rockpi4 + +ROCK Pi 4 is a Single Board Computer (SBC) from radxa. This guide is valid +for the below models: +- ROCK PI 4 Model A +- ROCK PI 4 Model B +- ROCK PI 4 Model C + +Build: +====== + $ make rock_pi_4_defconfig + $ make + +Files created in output directory +================================= + +output/images + +├── bl31.elf +├── boot.vfat +├── extlinux +├── idbloader.img +├── Image +├── rk3399-rock-pi-4.dtb +├── rootfs.ext2 +├── rootfs.ext4 -> rootfs.ext2 +├── rootfs.tar +├── sdcard.img +├── u-boot.bin +└── u-boot.itb + +Creating bootable SD card: +========================== + +Simply invoke (as root) + +sudo dd if=output/images/sdcard.img of=/dev/sdX && sync + +Where X is your SD card device. + +Booting: +======== + +Serial console: +--------------- +RockPi4 has a 40-pin GPIO header. The pin layout is as follows: + +pin 6: gnd +pin 8: tx +pin 10: rx + +Baudrate for this board is 1500000. + +Login: +------ +Enter 'root' as login user, and the prompt is ready. + +Wiki link: +https://wiki.amarulasolutions.com/bsp/rockchip/rk3399/rock-pi-4.html diff --git a/board/radxa/rockpi-n10/extlinux.conf b/board/radxa/rockpi-n10/extlinux.conf new file mode 100644 index 00000000..b6a4c97c --- /dev/null +++ b/board/radxa/rockpi-n10/extlinux.conf @@ -0,0 +1,4 @@ +label RK3399_ROCK_PI_N10 linux + kernel /Image + devicetree /rk3399pro-rock-pi-n10.dtb + append earlycon=uart8250,mmio32,0xff1a0000 root=/dev/mmcblk0p4 rw rootwait diff --git a/board/radxa/rockpi-n10/genimage.cfg b/board/radxa/rockpi-n10/genimage.cfg new file mode 100644 index 00000000..8fbf562f --- /dev/null +++ b/board/radxa/rockpi-n10/genimage.cfg @@ -0,0 +1,39 @@ +image boot.vfat { + vfat { + files = { + "Image", + "rk3399pro-rock-pi-n10.dtb", + "extlinux" + } + } + size = 112M +} + +image sdcard.img { + + hdimage { + gpt = true + } + + partition loader1 { + image = "idbloader.img" + offset = 32K + } + + partition loader2 { + image = "u-boot.itb" + offset = 8M + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 16M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/radxa/rockpi-n10/post-build.sh b/board/radxa/rockpi-n10/post-build.sh new file mode 100755 index 00000000..ba29375c --- /dev/null +++ b/board/radxa/rockpi-n10/post-build.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" + +install -m 0644 -D $BOARD_DIR/extlinux.conf $BINARIES_DIR/extlinux/extlinux.conf diff --git a/board/radxa/rockpi-n10/readme.txt b/board/radxa/rockpi-n10/readme.txt new file mode 100644 index 00000000..49decbb3 --- /dev/null +++ b/board/radxa/rockpi-n10/readme.txt @@ -0,0 +1,61 @@ +RADXA ROCKPI-N10 +================ +https://wiki.radxa.com/RockpiN10 + +Build: +====== + $ make rock_pi_n10_defconfig + $ make + +Files created in output directory +================================= + +output/images +. +├── bl31.elf +├── boot.vfat +├── extlinux +├── idbloader.img +├── Image +├── rk3399pro-rock-pi-n10.dtb +├── rootfs.ext2 +├── rootfs.ext4 -> rootfs.ext2 +├── rootfs.tar +├── sdcard.img +├── u-boot.bin +└── u-boot.itb + +Creating bootable SD card: +========================== + +Simply invoke (as root) + +sudo dd if=output/images/sdcard.img of=/dev/sdX && sync + +Where X is your SD card device. + +Booting: +======== + +Serial console: +--------------- +RockPi-N10 has a 40-pin GPIO header. The pin layout is as follows: + +pin 6: gnd +pin 8: tx +pin 10: rx + +Baudrate for this board is 1500000. + +The boot order on rockpi-n10 is emmc, sd. If emmc contains a valid Image, the board +always boots from emmc. To boot from SD, erase emmc as per the guide: + +https://wiki.amarulasolutions.com/bsp/setup/rockchip/rk3399_emmc.html + +Login: +------ +Enter 'root' as login user, and the prompt is ready. + +wiki link: +---------- +https://wiki.amarulasolutions.com/bsp/rockchip/rk3399pro/rock-pi-n10.html diff --git a/board/radxa/rockpi-n8/extlinux.conf b/board/radxa/rockpi-n8/extlinux.conf new file mode 100644 index 00000000..c323fe10 --- /dev/null +++ b/board/radxa/rockpi-n8/extlinux.conf @@ -0,0 +1,4 @@ +label RK3288_ROCKPI_N8 linux + kernel /zImage + devicetree /rk3288-rock-pi-n8.dtb + append console=ttyS2,115200n8 root=/dev/mmcblk0p4 rw rootwait diff --git a/board/radxa/rockpi-n8/genimage.cfg b/board/radxa/rockpi-n8/genimage.cfg new file mode 100644 index 00000000..88b55de3 --- /dev/null +++ b/board/radxa/rockpi-n8/genimage.cfg @@ -0,0 +1,39 @@ +image boot.vfat { + vfat { + files = { + "zImage", + "rk3288-rock-pi-n8.dtb", + "extlinux" + } + } + size = 16M +} + +image sdcard.img { + + hdimage { + gpt = true + } + + partition loader1 { + image = "idbloader.img" + offset = 32K + } + + partition loader2 { + image = "u-boot-dtb.img" + offset = 8M + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 16M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/radxa/rockpi-n8/post-build.sh b/board/radxa/rockpi-n8/post-build.sh new file mode 100755 index 00000000..ba29375c --- /dev/null +++ b/board/radxa/rockpi-n8/post-build.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" + +install -m 0644 -D $BOARD_DIR/extlinux.conf $BINARIES_DIR/extlinux/extlinux.conf diff --git a/board/radxa/rockpi-n8/readme.txt b/board/radxa/rockpi-n8/readme.txt new file mode 100644 index 00000000..ac83d5c8 --- /dev/null +++ b/board/radxa/rockpi-n8/readme.txt @@ -0,0 +1,61 @@ +RADXA ROCKPI-N8 +================ +https://wiki.radxa.com/RockpiN8 + +Build: +====== + $ make rock_pi_n8_defconfig + $ make + +Files created in output directory +================================= + +output/images +. +├── boot.vfat +├── extlinux +├── idbloader.img +├── rk3288-rock-pi-n8.dtb +├── rootfs.ext2 +├── rootfs.ext4 -> rootfs.ext2 +├── rootfs.tar +├── sdcard.img +├── u-boot.bin +├── u-boot-dtb.bin +├── u-boot-dtb.img +└── zImage + +Creating bootable SD card: +========================== + +Simply invoke (as root) + +sudo dd if=output/images/sdcard.img of=/dev/sdX && sync + +Where X is your SD card device. + +Booting: +======== + +Serial console: +--------------- +RockPi-N8 has a 40-pin GPIO header. The pin layout is as follows: + +pin 6: gnd +pin 8: tx +pin 10: rx + +Baudrate for this board is 115200. + +The boot order on rockpi-n8 is emmc, sd. If emmc contains a valid Image, the board +always boots from emmc. To boot from SD, erase emmc as per the guide: + +https://wiki.amarulasolutions.com/bsp/setup/rockchip/rk3399_emmc.html + +Login: +------ +Enter 'root' as login user, and the prompt is ready. + +wiki link: +---------- +https://wiki.amarulasolutions.com/bsp/rockchip/rk3288/rock-pi-n8.html diff --git a/board/raspberrypi/genimage-raspberrypi.cfg b/board/raspberrypi/genimage-raspberrypi.cfg new file mode 100644 index 00000000..bd5166a0 --- /dev/null +++ b/board/raspberrypi/genimage-raspberrypi.cfg @@ -0,0 +1,32 @@ +image boot.vfat { + vfat { + files = { + "bcm2708-rpi-b.dtb", + "bcm2708-rpi-b-plus.dtb", + "bcm2708-rpi-cm.dtb", + "rpi-firmware/bootcode.bin", + "rpi-firmware/cmdline.txt", + "rpi-firmware/config.txt", + "rpi-firmware/fixup.dat", + "rpi-firmware/start.elf", + "zImage" + } + } + size = 32M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/raspberrypi/genimage-raspberrypi0.cfg b/board/raspberrypi/genimage-raspberrypi0.cfg new file mode 100644 index 00000000..f21a52f3 --- /dev/null +++ b/board/raspberrypi/genimage-raspberrypi0.cfg @@ -0,0 +1,30 @@ +image boot.vfat { + vfat { + files = { + "bcm2708-rpi-zero.dtb", + "rpi-firmware/bootcode.bin", + "rpi-firmware/cmdline.txt", + "rpi-firmware/config.txt", + "rpi-firmware/fixup.dat", + "rpi-firmware/start.elf", + "zImage" + } + } + size = 32M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/raspberrypi/genimage-raspberrypi0w.cfg b/board/raspberrypi/genimage-raspberrypi0w.cfg new file mode 100644 index 00000000..f76256ef --- /dev/null +++ b/board/raspberrypi/genimage-raspberrypi0w.cfg @@ -0,0 +1,31 @@ +image boot.vfat { + vfat { + files = { + "bcm2708-rpi-zero-w.dtb", + "rpi-firmware/bootcode.bin", + "rpi-firmware/cmdline.txt", + "rpi-firmware/config.txt", + "rpi-firmware/fixup.dat", + "rpi-firmware/start.elf", + "rpi-firmware/overlays", + "zImage" + } + } + size = 32M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/raspberrypi/genimage-raspberrypi2.cfg b/board/raspberrypi/genimage-raspberrypi2.cfg new file mode 100644 index 00000000..a3be2a34 --- /dev/null +++ b/board/raspberrypi/genimage-raspberrypi2.cfg @@ -0,0 +1,30 @@ +image boot.vfat { + vfat { + files = { + "bcm2709-rpi-2-b.dtb", + "rpi-firmware/bootcode.bin", + "rpi-firmware/cmdline.txt", + "rpi-firmware/config.txt", + "rpi-firmware/fixup.dat", + "rpi-firmware/start.elf", + "zImage" + } + } + size = 32M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/raspberrypi/genimage-raspberrypi3-64.cfg b/board/raspberrypi/genimage-raspberrypi3-64.cfg new file mode 100644 index 00000000..af1d17cd --- /dev/null +++ b/board/raspberrypi/genimage-raspberrypi3-64.cfg @@ -0,0 +1,33 @@ +image boot.vfat { + vfat { + files = { + "bcm2710-rpi-3-b.dtb", + "bcm2710-rpi-3-b-plus.dtb", + "bcm2837-rpi-3-b.dtb", + "rpi-firmware/bootcode.bin", + "rpi-firmware/cmdline.txt", + "rpi-firmware/config.txt", + "rpi-firmware/fixup.dat", + "rpi-firmware/start.elf", + "rpi-firmware/overlays", + "Image" + } + } + size = 32M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/raspberrypi/genimage-raspberrypi3.cfg b/board/raspberrypi/genimage-raspberrypi3.cfg new file mode 100644 index 00000000..0a547241 --- /dev/null +++ b/board/raspberrypi/genimage-raspberrypi3.cfg @@ -0,0 +1,33 @@ +image boot.vfat { + vfat { + files = { + "bcm2710-rpi-3-b.dtb", + "bcm2710-rpi-3-b-plus.dtb", + "bcm2710-rpi-cm3.dtb", + "rpi-firmware/bootcode.bin", + "rpi-firmware/cmdline.txt", + "rpi-firmware/config.txt", + "rpi-firmware/fixup.dat", + "rpi-firmware/start.elf", + "rpi-firmware/overlays", + "zImage" + } + } + size = 32M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/raspberrypi/genimage-raspberrypi4-64.cfg b/board/raspberrypi/genimage-raspberrypi4-64.cfg new file mode 100644 index 00000000..854e0c7e --- /dev/null +++ b/board/raspberrypi/genimage-raspberrypi4-64.cfg @@ -0,0 +1,30 @@ +image boot.vfat { + vfat { + files = { + "bcm2711-rpi-4-b.dtb", + "rpi-firmware/cmdline.txt", + "rpi-firmware/config.txt", + "rpi-firmware/fixup.dat", + "rpi-firmware/start.elf", + "rpi-firmware/overlays", + "Image" + } + } + size = 32M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/raspberrypi/genimage-raspberrypi4.cfg b/board/raspberrypi/genimage-raspberrypi4.cfg new file mode 100644 index 00000000..60e1f23b --- /dev/null +++ b/board/raspberrypi/genimage-raspberrypi4.cfg @@ -0,0 +1,30 @@ +image boot.vfat { + vfat { + files = { + "bcm2711-rpi-4-b.dtb", + "rpi-firmware/cmdline.txt", + "rpi-firmware/config.txt", + "rpi-firmware/fixup.dat", + "rpi-firmware/start.elf", + "rpi-firmware/overlays", + "zImage" + } + } + size = 32M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/raspberrypi/post-build.sh b/board/raspberrypi/post-build.sh new file mode 100755 index 00000000..5e5eb711 --- /dev/null +++ b/board/raspberrypi/post-build.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +set -u +set -e + +# Add a console on tty1 +if [ -e ${TARGET_DIR}/etc/inittab ]; then + grep -qE '^tty1::' ${TARGET_DIR}/etc/inittab || \ + sed -i '/GENERIC_SERIAL/a\ +tty1::respawn:/sbin/getty -L tty1 0 vt100 # HDMI console' ${TARGET_DIR}/etc/inittab +fi diff --git a/board/raspberrypi/post-image.sh b/board/raspberrypi/post-image.sh new file mode 100755 index 00000000..9dbd98ef --- /dev/null +++ b/board/raspberrypi/post-image.sh @@ -0,0 +1,60 @@ +#!/bin/bash + +set -e + +BOARD_DIR="$(dirname $0)" +BOARD_NAME="$(basename ${BOARD_DIR})" +GENIMAGE_CFG="${BOARD_DIR}/genimage-${BOARD_NAME}.cfg" +GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp" + +for arg in "$@" +do + case "${arg}" in + --add-miniuart-bt-overlay) + if ! grep -qE '^dtoverlay=' "${BINARIES_DIR}/rpi-firmware/config.txt"; then + echo "Adding 'dtoverlay=miniuart-bt' to config.txt (fixes ttyAMA0 serial console)." + cat << __EOF__ >> "${BINARIES_DIR}/rpi-firmware/config.txt" + +# fixes rpi (3B, 3B+, 3A+, 4B and Zero W) ttyAMA0 serial console +dtoverlay=miniuart-bt +__EOF__ + fi + ;; + --aarch64) + # Run a 64bits kernel (armv8) + sed -e '/^kernel=/s,=.*,=Image,' -i "${BINARIES_DIR}/rpi-firmware/config.txt" + if ! grep -qE '^arm_64bit=1' "${BINARIES_DIR}/rpi-firmware/config.txt"; then + cat << __EOF__ >> "${BINARIES_DIR}/rpi-firmware/config.txt" + +# enable 64bits support +arm_64bit=1 +__EOF__ + fi + ;; + --gpu_mem_256=*|--gpu_mem_512=*|--gpu_mem_1024=*) + # Set GPU memory + gpu_mem="${arg:2}" + sed -e "/^${gpu_mem%=*}=/s,=.*,=${gpu_mem##*=}," -i "${BINARIES_DIR}/rpi-firmware/config.txt" + ;; + esac + +done + +# Pass an empty rootpath. genimage makes a full copy of the given rootpath to +# ${GENIMAGE_TMP}/root so passing TARGET_DIR would be a waste of time and disk +# space. We don't rely on genimage to build the rootfs image, just to insert a +# pre-built one in the disk image. + +trap 'rm -rf "${ROOTPATH_TMP}"' EXIT +ROOTPATH_TMP="$(mktemp -d)" + +rm -rf "${GENIMAGE_TMP}" + +genimage \ + --rootpath "${ROOTPATH_TMP}" \ + --tmppath "${GENIMAGE_TMP}" \ + --inputpath "${BINARIES_DIR}" \ + --outputpath "${BINARIES_DIR}" \ + --config "${GENIMAGE_CFG}" + +exit $? diff --git a/board/raspberrypi/readme.txt b/board/raspberrypi/readme.txt new file mode 100644 index 00000000..8b3de6d2 --- /dev/null +++ b/board/raspberrypi/readme.txt @@ -0,0 +1,99 @@ +Raspberry Pi + +Intro +===== + +These instructions apply to all models of the Raspberry Pi: + - the original models A and B, + - the "enhanced" models A+ and B+, + - the model B2 (aka Raspberry Pi 2) + - the model B3 (aka Raspberry Pi 3). + - the model B4 (aka Raspberry Pi 4). + +How to build it +=============== + +Configure Buildroot +------------------- + +There are two RaspberryPi defconfig files in Buildroot, one for each +major variant, which you should base your work on: + +For models A, B, A+ or B+: + + $ make raspberrypi_defconfig + +For model Zero (model A+ in smaller form factor): + + $ make raspberrypi0_defconfig + +For model 2 B: + + $ make raspberrypi2_defconfig + +For model 3 B and B+: + + $ make raspberrypi3_defconfig + +For model 4 B: + + $ make raspberrypi4_defconfig + +Build the rootfs +---------------- + +Note: you will need to have access to the network, since Buildroot will +download the packages' sources. + +You may now build your rootfs with: + + $ make + +(This may take a while, consider getting yourself a coffee ;-) ) + +Result of the build +------------------- + +After building, you should obtain this tree: + + output/images/ + +-- bcm2708-rpi-b.dtb [1] + +-- bcm2708-rpi-b-plus.dtb [1] + +-- bcm2709-rpi-2-b.dtb [1] + +-- bcm2710-rpi-3-b.dtb [1] + +-- bcm2710-rpi-3-b-plus.dtb [1] + +-- bcm2711-rpi-4-b.dtb [1] + +-- boot.vfat + +-- rootfs.ext4 + +-- rpi-firmware/ + | +-- bootcode.bin + | +-- cmdline.txt + | +-- config.txt + | +-- fixup.dat + | +-- start.elf + | `-- overlays/ [2] + +-- sdcard.img + `-- zImage + +[1] Not all of them will be present, depending on the RaspberryPi + model you are using. + +[2] Only for the Raspberry Pi 3/4 Models (overlay miniuart-bt is needed + to enable the RPi3 serial console otherwise occupied by the bluetooth + chip). Alternative would be to disable the serial console in cmdline.txt + and /etc/inittab. + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + +Insert the SDcard into your Raspberry Pi, and power it up. Your new system +should come up now and start two consoles: one on the serial port on +the P1 header, one on the HDMI output where you can login using a USB +keyboard. diff --git a/board/raspberrypi0 b/board/raspberrypi0 new file mode 120000 index 00000000..fcdafc81 --- /dev/null +++ b/board/raspberrypi0 @@ -0,0 +1 @@ +raspberrypi \ No newline at end of file diff --git a/board/raspberrypi0w b/board/raspberrypi0w new file mode 120000 index 00000000..fcdafc81 --- /dev/null +++ b/board/raspberrypi0w @@ -0,0 +1 @@ +raspberrypi \ No newline at end of file diff --git a/board/raspberrypi2 b/board/raspberrypi2 new file mode 120000 index 00000000..fcdafc81 --- /dev/null +++ b/board/raspberrypi2 @@ -0,0 +1 @@ +raspberrypi \ No newline at end of file diff --git a/board/raspberrypi3 b/board/raspberrypi3 new file mode 120000 index 00000000..fcdafc81 --- /dev/null +++ b/board/raspberrypi3 @@ -0,0 +1 @@ +raspberrypi \ No newline at end of file diff --git a/board/raspberrypi3-64 b/board/raspberrypi3-64 new file mode 120000 index 00000000..fcdafc81 --- /dev/null +++ b/board/raspberrypi3-64 @@ -0,0 +1 @@ +raspberrypi \ No newline at end of file diff --git a/board/raspberrypi4 b/board/raspberrypi4 new file mode 120000 index 00000000..fcdafc81 --- /dev/null +++ b/board/raspberrypi4 @@ -0,0 +1 @@ +raspberrypi \ No newline at end of file diff --git a/board/raspberrypi4-64 b/board/raspberrypi4-64 new file mode 120000 index 00000000..fcdafc81 --- /dev/null +++ b/board/raspberrypi4-64 @@ -0,0 +1 @@ +raspberrypi \ No newline at end of file diff --git a/board/roseapplepi/genimage.cfg b/board/roseapplepi/genimage.cfg new file mode 100644 index 00000000..f4a353e8 --- /dev/null +++ b/board/roseapplepi/genimage.cfg @@ -0,0 +1,37 @@ +# Minimal SD card image for the Roseapple Pi +# +image boot.vfat { + vfat { + files = { + "uEnv.txt", + "uImage" + } + file kernel.dtb { + image = "owl-s500-roseapplepi.dtb" + } + } + size = 128M +} + +image sdcard.img { + hdimage { + } + + partition s500-bootloader { + in-partition-table = "no" + image = "s500-bootloader.bin" + offset = 0x200200 + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-dtb.img" + offset = 0x300000 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } +} diff --git a/board/roseapplepi/linux.config b/board/roseapplepi/linux.config new file mode 100644 index 00000000..aea48b77 --- /dev/null +++ b/board/roseapplepi/linux.config @@ -0,0 +1,45 @@ +# CONFIG_SWAP is not set +# CONFIG_CROSS_MEMORY_ATTACH is not set +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +# CONFIG_CPU_ISOLATION is not set +# CONFIG_KALLSYMS is not set +# CONFIG_RSEQ is not set +CONFIG_EMBEDDED=y +# CONFIG_SLUB_DEBUG is not set +# CONFIG_COMPAT_BRK is not set +CONFIG_ARCH_ACTIONS=y +CONFIG_SMP=y +CONFIG_ARM_PSCI=y +CONFIG_HIGHMEM=y +CONFIG_VFP=y +CONFIG_NEON=y +# CONFIG_SUSPEND is not set +# CONFIG_STACKPROTECTOR is not set +# CONFIG_MQ_IOSCHED_KYBER is not set +# CONFIG_COREDUMP is not set +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_INET_DIAG is not set +# CONFIG_IPV6 is not set +# CONFIG_WIRELESS is not set +# CONFIG_ETHTOOL_NETLINK is not set +# CONFIG_VT is not set +CONFIG_SERIAL_OWL=y +# CONFIG_HW_RANDOM is not set +# CONFIG_HID is not set +# CONFIG_USB_SUPPORT is not set +# CONFIG_VIRTIO_MENU is not set +# CONFIG_VHOST_MENU is not set +# CONFIG_IOMMU_SUPPORT is not set +CONFIG_EXT4_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +# CONFIG_MISC_FILESYSTEMS is not set +# CONFIG_NETWORK_FILESYSTEMS is not set +# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set +# CONFIG_CRYPTO_HW is not set +# CONFIG_FTRACE is not set +# CONFIG_RUNTIME_TESTING_MENU is not set diff --git a/board/roseapplepi/patches/uboot/0001-compiler-.h-sync-include-linux-compiler-.h-with-Linu.patch b/board/roseapplepi/patches/uboot/0001-compiler-.h-sync-include-linux-compiler-.h-with-Linu.patch new file mode 100644 index 00000000..ae19a490 --- /dev/null +++ b/board/roseapplepi/patches/uboot/0001-compiler-.h-sync-include-linux-compiler-.h-with-Linu.patch @@ -0,0 +1,809 @@ +From 9b2c282b348dfe966bbba967dc7a45ce817cce50 Mon Sep 17 00:00:00 2001 +From: Tom Rini +Date: Mon, 29 Feb 2016 11:34:15 -0500 +Subject: [PATCH] compiler*.h: sync include/linux/compiler*.h with Linux + 4.5-rc6 + +Copy these from Linux v4.5-rc6 tag. + +This is needed so that we can keep up with newer gcc versions. Note +that we don't have the uapi/ hierarchy from the kernel so continue to +use + +Signed-off-by: Tom Rini +Signed-off-by: Peter Korsgaard +--- + include/linux/compiler-gcc.h | 259 ++++++++++++++++++++++++++++++++--------- + include/linux/compiler-gcc3.h | 23 ---- + include/linux/compiler-gcc4.h | 88 -------------- + include/linux/compiler-gcc5.h | 65 ----------- + include/linux/compiler-intel.h | 5 + + include/linux/compiler.h | 178 ++++++++++++++++++++++++++-- + 6 files changed, 383 insertions(+), 235 deletions(-) + delete mode 100644 include/linux/compiler-gcc3.h + delete mode 100644 include/linux/compiler-gcc4.h + delete mode 100644 include/linux/compiler-gcc5.h + +diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h +index e057bd2a84..22ab246fee 100644 +--- a/include/linux/compiler-gcc.h ++++ b/include/linux/compiler-gcc.h +@@ -5,14 +5,28 @@ + /* + * Common definitions for all gcc versions go here. + */ +-#define GCC_VERSION (__GNUC__ * 10000 \ +- + __GNUC_MINOR__ * 100 \ +- + __GNUC_PATCHLEVEL__) +- ++#define GCC_VERSION (__GNUC__ * 10000 \ ++ + __GNUC_MINOR__ * 100 \ ++ + __GNUC_PATCHLEVEL__) + + /* Optimization barrier */ ++ + /* The "volatile" is due to gcc bugs */ + #define barrier() __asm__ __volatile__("": : :"memory") ++/* ++ * This version is i.e. to prevent dead stores elimination on @ptr ++ * where gcc and llvm may behave differently when otherwise using ++ * normal barrier(): while gcc behavior gets along with a normal ++ * barrier(), llvm needs an explicit input variable to be assumed ++ * clobbered. The issue is as follows: while the inline asm might ++ * access any memory it wants, the compiler could have fit all of ++ * @ptr into memory registers instead, and since @ptr never escaped ++ * from that, it proofed that the inline asm wasn't touching any of ++ * it. This version works well with both compilers, i.e. we're telling ++ * the compiler that the inline asm absolutely may see the contents ++ * of @ptr. See also: https://llvm.org/bugs/show_bug.cgi?id=15495 ++ */ ++#define barrier_data(ptr) __asm__ __volatile__("": :"r"(ptr) :"memory") + + /* + * This macro obfuscates arithmetic on a variable address so that gcc +@@ -32,58 +46,63 @@ + * the inline assembly constraint from =g to =r, in this particular + * case either is valid. + */ +-#define RELOC_HIDE(ptr, off) \ +- ({ unsigned long __ptr; \ +- __asm__ ("" : "=r"(__ptr) : "0"(ptr)); \ +- (typeof(ptr)) (__ptr + (off)); }) ++#define RELOC_HIDE(ptr, off) \ ++({ \ ++ unsigned long __ptr; \ ++ __asm__ ("" : "=r"(__ptr) : "0"(ptr)); \ ++ (typeof(ptr)) (__ptr + (off)); \ ++}) + + /* Make the optimizer believe the variable can be manipulated arbitrarily. */ +-#define OPTIMIZER_HIDE_VAR(var) __asm__ ("" : "=r" (var) : "0" (var)) ++#define OPTIMIZER_HIDE_VAR(var) \ ++ __asm__ ("" : "=r" (var) : "0" (var)) + + #ifdef __CHECKER__ +-#define __must_be_array(arr) 0 ++#define __must_be_array(a) 0 + #else + /* &a[0] degrades to a pointer: a different type from an array */ +-#define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0])) ++#define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0])) + #endif + + /* + * Force always-inline if the user requests it so via the .config, + * or if gcc is too old: + */ +-#if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \ ++#if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \ + !defined(CONFIG_OPTIMIZE_INLINING) || (__GNUC__ < 4) +-# define inline inline __attribute__((always_inline)) notrace +-# define __inline__ __inline__ __attribute__((always_inline)) notrace +-# define __inline __inline __attribute__((always_inline)) notrace ++#define inline inline __attribute__((always_inline)) notrace ++#define __inline__ __inline__ __attribute__((always_inline)) notrace ++#define __inline __inline __attribute__((always_inline)) notrace + #else + /* A lot of inline functions can cause havoc with function tracing */ +-# define inline inline notrace +-# define __inline__ __inline__ notrace +-# define __inline __inline notrace ++#define inline inline notrace ++#define __inline__ __inline__ notrace ++#define __inline __inline notrace + #endif + +-#define __deprecated __attribute__((deprecated)) +-#ifndef __packed +-#define __packed __attribute__((packed)) +-#endif +-#ifndef __weak +-#define __weak __attribute__((weak)) +-#endif ++#define __always_inline inline __attribute__((always_inline)) ++#define noinline __attribute__((noinline)) ++ ++#define __deprecated __attribute__((deprecated)) ++#define __packed __attribute__((packed)) ++#define __weak __attribute__((weak)) ++#define __alias(symbol) __attribute__((alias(#symbol))) + + /* +- * it doesn't make sense on ARM (currently the only user of __naked) to trace +- * naked functions because then mcount is called without stack and frame pointer +- * being set up and there is no chance to restore the lr register to the value +- * before mcount was called. ++ * it doesn't make sense on ARM (currently the only user of __naked) ++ * to trace naked functions because then mcount is called without ++ * stack and frame pointer being set up and there is no chance to ++ * restore the lr register to the value before mcount was called. ++ * ++ * The asm() bodies of naked functions often depend on standard calling ++ * conventions, therefore they must be noinline and noclone. + * +- * The asm() bodies of naked functions often depend on standard calling conventions, +- * therefore they must be noinline and noclone. GCC 4.[56] currently fail to enforce +- * this, so we must do so ourselves. See GCC PR44290. ++ * GCC 4.[56] currently fail to enforce this, so we must do so ourselves. ++ * See GCC PR44290. + */ +-#define __naked __attribute__((naked)) noinline __noclone notrace ++#define __naked __attribute__((naked)) noinline __noclone notrace + +-#define __noreturn __attribute__((noreturn)) ++#define __noreturn __attribute__((noreturn)) + + /* + * From the GCC manual: +@@ -95,34 +114,170 @@ + * would be. + * [...] + */ +-#ifndef __pure +-#define __pure __attribute__((pure)) ++#define __pure __attribute__((pure)) ++#define __aligned(x) __attribute__((aligned(x))) ++#define __printf(a, b) __attribute__((format(printf, a, b))) ++#define __scanf(a, b) __attribute__((format(scanf, a, b))) ++#define __attribute_const__ __attribute__((__const__)) ++#define __maybe_unused __attribute__((unused)) ++#define __always_unused __attribute__((unused)) ++ ++/* gcc version specific checks */ ++ ++#if GCC_VERSION < 30200 ++# error Sorry, your compiler is too old - please upgrade it. ++#endif ++ ++#if GCC_VERSION < 30300 ++# define __used __attribute__((__unused__)) ++#else ++# define __used __attribute__((__used__)) ++#endif ++ ++#ifdef CONFIG_GCOV_KERNEL ++# if GCC_VERSION < 30400 ++# error "GCOV profiling support for gcc versions below 3.4 not included" ++# endif /* __GNUC_MINOR__ */ ++#endif /* CONFIG_GCOV_KERNEL */ ++ ++#if GCC_VERSION >= 30400 ++#define __must_check __attribute__((warn_unused_result)) ++#endif ++ ++#if GCC_VERSION >= 40000 ++ ++/* GCC 4.1.[01] miscompiles __weak */ ++#ifdef __KERNEL__ ++# if GCC_VERSION >= 40100 && GCC_VERSION <= 40101 ++# error Your version of gcc miscompiles the __weak directive ++# endif ++#endif ++ ++#define __used __attribute__((__used__)) ++#define __compiler_offsetof(a, b) \ ++ __builtin_offsetof(a, b) ++ ++#if GCC_VERSION >= 40100 && GCC_VERSION < 40600 ++# define __compiletime_object_size(obj) __builtin_object_size(obj, 0) ++#endif ++ ++#if GCC_VERSION >= 40300 ++/* Mark functions as cold. gcc will assume any path leading to a call ++ * to them will be unlikely. This means a lot of manual unlikely()s ++ * are unnecessary now for any paths leading to the usual suspects ++ * like BUG(), printk(), panic() etc. [but let's keep them for now for ++ * older compilers] ++ * ++ * Early snapshots of gcc 4.3 don't support this and we can't detect this ++ * in the preprocessor, but we can live with this because they're unreleased. ++ * Maketime probing would be overkill here. ++ * ++ * gcc also has a __attribute__((__hot__)) to move hot functions into ++ * a special section, but I don't see any sense in this right now in ++ * the kernel context ++ */ ++#define __cold __attribute__((__cold__)) ++ ++#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__) ++ ++#ifndef __CHECKER__ ++# define __compiletime_warning(message) __attribute__((warning(message))) ++# define __compiletime_error(message) __attribute__((error(message))) ++#endif /* __CHECKER__ */ ++#endif /* GCC_VERSION >= 40300 */ ++ ++#if GCC_VERSION >= 40500 ++/* ++ * Mark a position in code as unreachable. This can be used to ++ * suppress control flow warnings after asm blocks that transfer ++ * control elsewhere. ++ * ++ * Early snapshots of gcc 4.5 don't support this and we can't detect ++ * this in the preprocessor, but we can live with this because they're ++ * unreleased. Really, we need to have autoconf for the kernel. ++ */ ++#define unreachable() __builtin_unreachable() ++ ++/* Mark a function definition as prohibited from being cloned. */ ++#define __noclone __attribute__((__noclone__)) ++ ++#endif /* GCC_VERSION >= 40500 */ ++ ++#if GCC_VERSION >= 40600 ++/* ++ * When used with Link Time Optimization, gcc can optimize away C functions or ++ * variables which are referenced only from assembly code. __visible tells the ++ * optimizer that something else uses this function or variable, thus preventing ++ * this. ++ */ ++#define __visible __attribute__((externally_visible)) + #endif +-#ifndef __aligned +-#define __aligned(x) __attribute__((aligned(x))) ++ ++ ++#if GCC_VERSION >= 40900 && !defined(__CHECKER__) ++/* ++ * __assume_aligned(n, k): Tell the optimizer that the returned ++ * pointer can be assumed to be k modulo n. The second argument is ++ * optional (default 0), so we use a variadic macro to make the ++ * shorthand. ++ * ++ * Beware: Do not apply this to functions which may return ++ * ERR_PTRs. Also, it is probably unwise to apply it to functions ++ * returning extra information in the low bits (but in that case the ++ * compiler should see some alignment anyway, when the return value is ++ * massaged by 'flags = ptr & 3; ptr &= ~3;'). ++ */ ++#define __assume_aligned(a, ...) __attribute__((__assume_aligned__(a, ## __VA_ARGS__))) + #endif +-#define __printf(a, b) __attribute__((format(printf, a, b))) +-#define __scanf(a, b) __attribute__((format(scanf, a, b))) +-#define noinline __attribute__((noinline)) +-#define __attribute_const__ __attribute__((__const__)) +-#define __maybe_unused __attribute__((unused)) +-#define __always_unused __attribute__((unused)) + +-#define __gcc_header(x) #x +-#define _gcc_header(x) __gcc_header(linux/compiler-gcc##x.h) +-#define gcc_header(x) _gcc_header(x) +-#include gcc_header(__GNUC__) ++/* ++ * GCC 'asm goto' miscompiles certain code sequences: ++ * ++ * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670 ++ * ++ * Work it around via a compiler barrier quirk suggested by Jakub Jelinek. ++ * ++ * (asm goto is automatically volatile - the naming reflects this.) ++ */ ++#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0) ++ ++#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP ++#if GCC_VERSION >= 40400 ++#define __HAVE_BUILTIN_BSWAP32__ ++#define __HAVE_BUILTIN_BSWAP64__ ++#endif ++#if GCC_VERSION >= 40800 || (defined(__powerpc__) && GCC_VERSION >= 40600) ++#define __HAVE_BUILTIN_BSWAP16__ ++#endif ++#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */ ++ ++#if GCC_VERSION >= 50000 ++#define KASAN_ABI_VERSION 4 ++#elif GCC_VERSION >= 40902 ++#define KASAN_ABI_VERSION 3 ++#endif ++ ++#if GCC_VERSION >= 40902 ++/* ++ * Tell the compiler that address safety instrumentation (KASAN) ++ * should not be applied to that function. ++ * Conflicts with inlining: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67368 ++ */ ++#define __no_sanitize_address __attribute__((no_sanitize_address)) ++#endif ++ ++#endif /* gcc version >= 40000 specific checks */ + + #if !defined(__noclone) + #define __noclone /* not needed */ + #endif + ++#if !defined(__no_sanitize_address) ++#define __no_sanitize_address ++#endif ++ + /* + * A trick to suppress uninitialized variable warning without generating any + * code + */ + #define uninitialized_var(x) x = x +- +-#ifndef __always_inline +-#define __always_inline inline __attribute__((always_inline)) +-#endif +diff --git a/include/linux/compiler-gcc3.h b/include/linux/compiler-gcc3.h +deleted file mode 100644 +index 7d89febe4d..0000000000 +--- a/include/linux/compiler-gcc3.h ++++ /dev/null +@@ -1,23 +0,0 @@ +-#ifndef __LINUX_COMPILER_H +-#error "Please don't include directly, include instead." +-#endif +- +-#if GCC_VERSION < 30200 +-# error Sorry, your compiler is too old - please upgrade it. +-#endif +- +-#if GCC_VERSION >= 30300 +-# define __used __attribute__((__used__)) +-#else +-# define __used __attribute__((__unused__)) +-#endif +- +-#if GCC_VERSION >= 30400 +-#define __must_check __attribute__((warn_unused_result)) +-#endif +- +-#ifdef CONFIG_GCOV_KERNEL +-# if GCC_VERSION < 30400 +-# error "GCOV profiling support for gcc versions below 3.4 not included" +-# endif /* __GNUC_MINOR__ */ +-#endif /* CONFIG_GCOV_KERNEL */ +diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h +deleted file mode 100644 +index 2507fd2a1e..0000000000 +--- a/include/linux/compiler-gcc4.h ++++ /dev/null +@@ -1,88 +0,0 @@ +-#ifndef __LINUX_COMPILER_H +-#error "Please don't include directly, include instead." +-#endif +- +-/* GCC 4.1.[01] miscompiles __weak */ +-#ifdef __KERNEL__ +-# if GCC_VERSION >= 40100 && GCC_VERSION <= 40101 +-# error Your version of gcc miscompiles the __weak directive +-# endif +-#endif +- +-#define __used __attribute__((__used__)) +-#define __must_check __attribute__((warn_unused_result)) +-#define __compiler_offsetof(a,b) __builtin_offsetof(a,b) +- +-#if GCC_VERSION >= 40100 && GCC_VERSION < 40600 +-# define __compiletime_object_size(obj) __builtin_object_size(obj, 0) +-#endif +- +-#if GCC_VERSION >= 40300 +-/* Mark functions as cold. gcc will assume any path leading to a call +- to them will be unlikely. This means a lot of manual unlikely()s +- are unnecessary now for any paths leading to the usual suspects +- like BUG(), printk(), panic() etc. [but let's keep them for now for +- older compilers] +- +- Early snapshots of gcc 4.3 don't support this and we can't detect this +- in the preprocessor, but we can live with this because they're unreleased. +- Maketime probing would be overkill here. +- +- gcc also has a __attribute__((__hot__)) to move hot functions into +- a special section, but I don't see any sense in this right now in +- the kernel context */ +-#define __cold __attribute__((__cold__)) +- +-#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__) +- +-#ifndef __CHECKER__ +-# define __compiletime_warning(message) __attribute__((warning(message))) +-# define __compiletime_error(message) __attribute__((error(message))) +-#endif /* __CHECKER__ */ +-#endif /* GCC_VERSION >= 40300 */ +- +-#if GCC_VERSION >= 40500 +-/* +- * Mark a position in code as unreachable. This can be used to +- * suppress control flow warnings after asm blocks that transfer +- * control elsewhere. +- * +- * Early snapshots of gcc 4.5 don't support this and we can't detect +- * this in the preprocessor, but we can live with this because they're +- * unreleased. Really, we need to have autoconf for the kernel. +- */ +-#define unreachable() __builtin_unreachable() +- +-/* Mark a function definition as prohibited from being cloned. */ +-#define __noclone __attribute__((__noclone__)) +- +-#endif /* GCC_VERSION >= 40500 */ +- +-#if GCC_VERSION >= 40600 +-/* +- * Tell the optimizer that something else uses this function or variable. +- */ +-#define __visible __attribute__((externally_visible)) +-#endif +- +-/* +- * GCC 'asm goto' miscompiles certain code sequences: +- * +- * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670 +- * +- * Work it around via a compiler barrier quirk suggested by Jakub Jelinek. +- * Fixed in GCC 4.8.2 and later versions. +- * +- * (asm goto is automatically volatile - the naming reflects this.) +- */ +-#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0) +- +-#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP +-#if GCC_VERSION >= 40400 +-#define __HAVE_BUILTIN_BSWAP32__ +-#define __HAVE_BUILTIN_BSWAP64__ +-#endif +-#if GCC_VERSION >= 40800 || (defined(__powerpc__) && GCC_VERSION >= 40600) +-#define __HAVE_BUILTIN_BSWAP16__ +-#endif +-#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */ +diff --git a/include/linux/compiler-gcc5.h b/include/linux/compiler-gcc5.h +deleted file mode 100644 +index c8c5659525..0000000000 +--- a/include/linux/compiler-gcc5.h ++++ /dev/null +@@ -1,65 +0,0 @@ +-#ifndef __LINUX_COMPILER_H +-#error "Please don't include directly, include instead." +-#endif +- +-#define __used __attribute__((__used__)) +-#define __must_check __attribute__((warn_unused_result)) +-#define __compiler_offsetof(a, b) __builtin_offsetof(a, b) +- +-/* Mark functions as cold. gcc will assume any path leading to a call +- to them will be unlikely. This means a lot of manual unlikely()s +- are unnecessary now for any paths leading to the usual suspects +- like BUG(), printk(), panic() etc. [but let's keep them for now for +- older compilers] +- +- Early snapshots of gcc 4.3 don't support this and we can't detect this +- in the preprocessor, but we can live with this because they're unreleased. +- Maketime probing would be overkill here. +- +- gcc also has a __attribute__((__hot__)) to move hot functions into +- a special section, but I don't see any sense in this right now in +- the kernel context */ +-#define __cold __attribute__((__cold__)) +- +-#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__) +- +-#ifndef __CHECKER__ +-# define __compiletime_warning(message) __attribute__((warning(message))) +-# define __compiletime_error(message) __attribute__((error(message))) +-#endif /* __CHECKER__ */ +- +-/* +- * Mark a position in code as unreachable. This can be used to +- * suppress control flow warnings after asm blocks that transfer +- * control elsewhere. +- * +- * Early snapshots of gcc 4.5 don't support this and we can't detect +- * this in the preprocessor, but we can live with this because they're +- * unreleased. Really, we need to have autoconf for the kernel. +- */ +-#define unreachable() __builtin_unreachable() +- +-/* Mark a function definition as prohibited from being cloned. */ +-#define __noclone __attribute__((__noclone__)) +- +-/* +- * Tell the optimizer that something else uses this function or variable. +- */ +-#define __visible __attribute__((externally_visible)) +- +-/* +- * GCC 'asm goto' miscompiles certain code sequences: +- * +- * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670 +- * +- * Work it around via a compiler barrier quirk suggested by Jakub Jelinek. +- * +- * (asm goto is automatically volatile - the naming reflects this.) +- */ +-#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0) +- +-#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP +-#define __HAVE_BUILTIN_BSWAP32__ +-#define __HAVE_BUILTIN_BSWAP64__ +-#define __HAVE_BUILTIN_BSWAP16__ +-#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */ +diff --git a/include/linux/compiler-intel.h b/include/linux/compiler-intel.h +index ba147a1727..d4c71132d0 100644 +--- a/include/linux/compiler-intel.h ++++ b/include/linux/compiler-intel.h +@@ -13,9 +13,14 @@ + /* Intel ECC compiler doesn't support gcc specific asm stmts. + * It uses intrinsics to do the equivalent things. + */ ++#undef barrier ++#undef barrier_data + #undef RELOC_HIDE + #undef OPTIMIZER_HIDE_VAR + ++#define barrier() __memory_barrier() ++#define barrier_data(ptr) barrier() ++ + #define RELOC_HIDE(ptr, off) \ + ({ unsigned long __ptr; \ + __ptr = (unsigned long) (ptr); \ +diff --git a/include/linux/compiler.h b/include/linux/compiler.h +index d5ad7b1118..020ad16a04 100644 +--- a/include/linux/compiler.h ++++ b/include/linux/compiler.h +@@ -17,6 +17,7 @@ + # define __release(x) __context__(x,-1) + # define __cond_lock(x,c) ((c) ? ({ __acquire(x); 1; }) : 0) + # define __percpu __attribute__((noderef, address_space(3))) ++# define __pmem __attribute__((noderef, address_space(5))) + #ifdef CONFIG_SPARSE_RCU_POINTER + # define __rcu __attribute__((noderef, address_space(4))) + #else +@@ -42,6 +43,7 @@ extern void __chk_io_ptr(const volatile void __iomem *); + # define __cond_lock(x,c) (c) + # define __percpu + # define __rcu ++# define __pmem + #endif + + /* Indirect macros required for expanded argument pasting, eg. __LINE__. */ +@@ -54,7 +56,11 @@ extern void __chk_io_ptr(const volatile void __iomem *); + #include + #endif + ++#if defined(CC_USING_HOTPATCH) && !defined(__CHECKER__) ++#define notrace __attribute__((hotpatch(0,0))) ++#else + #define notrace __attribute__((no_instrument_function)) ++#endif + + /* Intel compiler defines __GNUC__. So we will overwrite implementations + * coming from above header files here +@@ -138,7 +144,7 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); + */ + #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) + #define __trace_if(cond) \ +- if (__builtin_constant_p((cond)) ? !!(cond) : \ ++ if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ + ({ \ + int ______r; \ + static struct ftrace_branch_data \ +@@ -165,6 +171,10 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); + # define barrier() __memory_barrier() + #endif + ++#ifndef barrier_data ++# define barrier_data(ptr) barrier() ++#endif ++ + /* Unreachable code */ + #ifndef unreachable + # define unreachable() do { } while (1) +@@ -186,6 +196,126 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); + # define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __LINE__) + #endif + ++#include ++ ++#define __READ_ONCE_SIZE \ ++({ \ ++ switch (size) { \ ++ case 1: *(__u8 *)res = *(volatile __u8 *)p; break; \ ++ case 2: *(__u16 *)res = *(volatile __u16 *)p; break; \ ++ case 4: *(__u32 *)res = *(volatile __u32 *)p; break; \ ++ case 8: *(__u64 *)res = *(volatile __u64 *)p; break; \ ++ default: \ ++ barrier(); \ ++ __builtin_memcpy((void *)res, (const void *)p, size); \ ++ barrier(); \ ++ } \ ++}) ++ ++static __always_inline ++void __read_once_size(const volatile void *p, void *res, int size) ++{ ++ __READ_ONCE_SIZE; ++} ++ ++#ifdef CONFIG_KASAN ++/* ++ * This function is not 'inline' because __no_sanitize_address confilcts ++ * with inlining. Attempt to inline it may cause a build failure. ++ * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67368 ++ * '__maybe_unused' allows us to avoid defined-but-not-used warnings. ++ */ ++static __no_sanitize_address __maybe_unused ++void __read_once_size_nocheck(const volatile void *p, void *res, int size) ++{ ++ __READ_ONCE_SIZE; ++} ++#else ++static __always_inline ++void __read_once_size_nocheck(const volatile void *p, void *res, int size) ++{ ++ __READ_ONCE_SIZE; ++} ++#endif ++ ++static __always_inline void __write_once_size(volatile void *p, void *res, int size) ++{ ++ switch (size) { ++ case 1: *(volatile __u8 *)p = *(__u8 *)res; break; ++ case 2: *(volatile __u16 *)p = *(__u16 *)res; break; ++ case 4: *(volatile __u32 *)p = *(__u32 *)res; break; ++ case 8: *(volatile __u64 *)p = *(__u64 *)res; break; ++ default: ++ barrier(); ++ __builtin_memcpy((void *)p, (const void *)res, size); ++ barrier(); ++ } ++} ++ ++/* ++ * Prevent the compiler from merging or refetching reads or writes. The ++ * compiler is also forbidden from reordering successive instances of ++ * READ_ONCE, WRITE_ONCE and ACCESS_ONCE (see below), but only when the ++ * compiler is aware of some particular ordering. One way to make the ++ * compiler aware of ordering is to put the two invocations of READ_ONCE, ++ * WRITE_ONCE or ACCESS_ONCE() in different C statements. ++ * ++ * In contrast to ACCESS_ONCE these two macros will also work on aggregate ++ * data types like structs or unions. If the size of the accessed data ++ * type exceeds the word size of the machine (e.g., 32 bits or 64 bits) ++ * READ_ONCE() and WRITE_ONCE() will fall back to memcpy and print a ++ * compile-time warning. ++ * ++ * Their two major use cases are: (1) Mediating communication between ++ * process-level code and irq/NMI handlers, all running on the same CPU, ++ * and (2) Ensuring that the compiler does not fold, spindle, or otherwise ++ * mutilate accesses that either do not require ordering or that interact ++ * with an explicit memory barrier or atomic instruction that provides the ++ * required ordering. ++ */ ++ ++#define __READ_ONCE(x, check) \ ++({ \ ++ union { typeof(x) __val; char __c[1]; } __u; \ ++ if (check) \ ++ __read_once_size(&(x), __u.__c, sizeof(x)); \ ++ else \ ++ __read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \ ++ __u.__val; \ ++}) ++#define READ_ONCE(x) __READ_ONCE(x, 1) ++ ++/* ++ * Use READ_ONCE_NOCHECK() instead of READ_ONCE() if you need ++ * to hide memory access from KASAN. ++ */ ++#define READ_ONCE_NOCHECK(x) __READ_ONCE(x, 0) ++ ++#define WRITE_ONCE(x, val) \ ++({ \ ++ union { typeof(x) __val; char __c[1]; } __u = \ ++ { .__val = (__force typeof(x)) (val) }; \ ++ __write_once_size(&(x), __u.__c, sizeof(x)); \ ++ __u.__val; \ ++}) ++ ++/** ++ * smp_cond_acquire() - Spin wait for cond with ACQUIRE ordering ++ * @cond: boolean expression to wait for ++ * ++ * Equivalent to using smp_load_acquire() on the condition variable but employs ++ * the control dependency of the wait to reduce the barrier on many platforms. ++ * ++ * The control dependency provides a LOAD->STORE order, the additional RMB ++ * provides LOAD->LOAD order, together they provide LOAD->{LOAD,STORE} order, ++ * aka. ACQUIRE. ++ */ ++#define smp_cond_acquire(cond) do { \ ++ while (!(cond)) \ ++ cpu_relax(); \ ++ smp_rmb(); /* ctrl + rmb := acquire */ \ ++} while (0) ++ + #endif /* __KERNEL__ */ + + #endif /* __ASSEMBLY__ */ +@@ -304,6 +434,14 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); + #define __visible + #endif + ++/* ++ * Assume alignment of return value. ++ */ ++#ifndef __assume_aligned ++#define __assume_aligned(a, ...) ++#endif ++ ++ + /* Are two types/vars the same type (ignoring qualifiers)? */ + #ifndef __same_type + # define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) +@@ -311,7 +449,7 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); + + /* Is this type a native word size -- useful for atomic operations */ + #ifndef __native_word +-# define __native_word(t) (sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long)) ++# define __native_word(t) (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long)) + #endif + + /* Compile time object size, -1 for unknown */ +@@ -373,12 +511,38 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); + * to make the compiler aware of ordering is to put the two invocations of + * ACCESS_ONCE() in different C statements. + * +- * This macro does absolutely -nothing- to prevent the CPU from reordering, +- * merging, or refetching absolutely anything at any time. Its main intended +- * use is to mediate communication between process-level code and irq/NMI +- * handlers, all running on the same CPU. ++ * ACCESS_ONCE will only work on scalar types. For union types, ACCESS_ONCE ++ * on a union member will work as long as the size of the member matches the ++ * size of the union and the size is smaller than word size. ++ * ++ * The major use cases of ACCESS_ONCE used to be (1) Mediating communication ++ * between process-level code and irq/NMI handlers, all running on the same CPU, ++ * and (2) Ensuring that the compiler does not fold, spindle, or otherwise ++ * mutilate accesses that either do not require ordering or that interact ++ * with an explicit memory barrier or atomic instruction that provides the ++ * required ordering. ++ * ++ * If possible use READ_ONCE()/WRITE_ONCE() instead. ++ */ ++#define __ACCESS_ONCE(x) ({ \ ++ __maybe_unused typeof(x) __var = (__force typeof(x)) 0; \ ++ (volatile typeof(x) *)&(x); }) ++#define ACCESS_ONCE(x) (*__ACCESS_ONCE(x)) ++ ++/** ++ * lockless_dereference() - safely load a pointer for later dereference ++ * @p: The pointer to load ++ * ++ * Similar to rcu_dereference(), but for situations where the pointed-to ++ * object's lifetime is managed by something other than RCU. That ++ * "something other" might be reference counting or simple immortality. + */ +-#define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x)) ++#define lockless_dereference(p) \ ++({ \ ++ typeof(p) _________p1 = READ_ONCE(p); \ ++ smp_read_barrier_depends(); /* Dependency order vs. p above. */ \ ++ (_________p1); \ ++}) + + /* Ignore/forbid kprobes attach on very low level functions marked by this attribute: */ + #ifdef CONFIG_KPROBES +-- +2.11.0 + diff --git a/board/roseapplepi/post-build.sh b/board/roseapplepi/post-build.sh new file mode 100755 index 00000000..ffdd1913 --- /dev/null +++ b/board/roseapplepi/post-build.sh @@ -0,0 +1,4 @@ +#!/bin/sh +BOARD_DIR="$(dirname $0)" + +cp $BOARD_DIR/uEnv.txt $BINARIES_DIR/uEnv.txt diff --git a/board/roseapplepi/uEnv.txt b/board/roseapplepi/uEnv.txt new file mode 100644 index 00000000..2b9de727 --- /dev/null +++ b/board/roseapplepi/uEnv.txt @@ -0,0 +1,3 @@ +# no ramdisk +ramdisk_addr_r=- +bootargs=console=ttyOWL2,115200 diff --git a/board/sheevaplug/readme.txt b/board/sheevaplug/readme.txt new file mode 100644 index 00000000..e0ed2684 --- /dev/null +++ b/board/sheevaplug/readme.txt @@ -0,0 +1,36 @@ +Sheevaplug +========== + +Once the build process is finished you will have the following files +in the output/images/ directory: + +- u-boot.kwb +- uImage.kirkwood-sheevaplug +- rootfs.jffs2 + +Copy these to a TFTP server, connect ethernet and mini-USB cable and +power up the board. Stop the board in U-Boot and update U-Boot by +executing: + +setenv serverip +setenv bootfile +bootp +nand erase 0x0 0x80000 +nand write $fileaddr 0x0 0x80000 +reset + +Once the new U-Boot boots up, stop it again and update Linux kernel +and rootfs by: + +setenv serverip +setenv bootfile +bootp +nand erase.part kernel +nand write $fileaddr kernel 0x400000 + +setenv bootfile +bootp +nand erase.part rootfs +nand write $fileaddr rootfs $filesize + +reset diff --git a/board/sifive/hifive-unleashed/boot.cmd b/board/sifive/hifive-unleashed/boot.cmd new file mode 100644 index 00000000..7b5137d2 --- /dev/null +++ b/board/sifive/hifive-unleashed/boot.cmd @@ -0,0 +1,4 @@ +setenv bootargs earlycon=sbi root=/dev/mmcblk0p3 rootwait +load mmc 0:3 ${kernel_addr_r} boot/Image +load mmc 0:3 ${fdt_addr_r} boot/hifive-unleashed-a00.dtb +booti ${kernel_addr_r} - ${fdt_addr_r} diff --git a/board/sifive/hifive-unleashed/genimage_sdcard.cfg b/board/sifive/hifive-unleashed/genimage_sdcard.cfg new file mode 100644 index 00000000..e7f98a47 --- /dev/null +++ b/board/sifive/hifive-unleashed/genimage_sdcard.cfg @@ -0,0 +1,23 @@ +image sdcard.img { + hdimage { + gpt = true + } + + partition u-boot-spl { + image = "u-boot-spl.bin" + offset = 17K + partition-type-uuid = 5B193300-FC78-40CD-8002-E86C45580B47 + } + + partition u-boot { + image = "u-boot.itb" + offset = 1041K + partition-type-uuid = 2E54B353-1271-4842-806F-E436D6AF6985 + } + + partition rootfs { + image = "rootfs.ext4" + partition-type-uuid = 0FC63DAF-8483-4772-8E79-3D69D8477DE4 + bootable = true + } +} diff --git a/board/sifive/hifive-unleashed/genimage_spi-nor.cfg b/board/sifive/hifive-unleashed/genimage_spi-nor.cfg new file mode 100644 index 00000000..2e5d89bf --- /dev/null +++ b/board/sifive/hifive-unleashed/genimage_spi-nor.cfg @@ -0,0 +1,19 @@ +image spi-nor.img { + size = 32M + + hdimage { + gpt = true + } + + partition u-boot-spl { + image = "u-boot-spl.bin" + offset = 20K + partition-type-uuid = 5B193300-FC78-40CD-8002-E86C45580B47 + } + + partition u-boot { + image = "u-boot.itb" + offset = 1044K + partition-type-uuid = 2E54B353-1271-4842-806F-E436D6AF6985 + } +} diff --git a/board/sifive/hifive-unleashed/linux.config.fragment b/board/sifive/hifive-unleashed/linux.config.fragment new file mode 100644 index 00000000..385a961d --- /dev/null +++ b/board/sifive/hifive-unleashed/linux.config.fragment @@ -0,0 +1,10 @@ +CONFIG_HZ_100=y +CONFIG_GPIOLIB=y +CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_SIFIVE=y +CONFIG_POWER_RESET_GPIO_RESTART=y +CONFIG_MTD=y +CONFIG_MTD_BLOCK=y +CONFIG_MTD_SPI_NOR=y +CONFIG_PWM=y +CONFIG_PWM_SIFIVE=y diff --git a/board/sifive/hifive-unleashed/post-build.sh b/board/sifive/hifive-unleashed/post-build.sh new file mode 100755 index 00000000..b4181206 --- /dev/null +++ b/board/sifive/hifive-unleashed/post-build.sh @@ -0,0 +1,2 @@ +#!/bin/sh +cp $BINARIES_DIR/boot.scr $TARGET_DIR/boot/boot.scr diff --git a/board/sifive/hifive-unleashed/readme.txt b/board/sifive/hifive-unleashed/readme.txt new file mode 100644 index 00000000..3263913e --- /dev/null +++ b/board/sifive/hifive-unleashed/readme.txt @@ -0,0 +1,115 @@ +SiFive HiFive Unleashed +======================= + +This file describes how to use the pre-defined Buildroot +configuration for the SiFive HiFive Unleashed board. + +Further information about the HiFive Unleashed board can be found +at https://www.sifive.com/boards/hifive-unleashed + +Building +======== + +Configure Buildroot using the default board configuration: + + $ make hifive_unleashed_defconfig + +Customise the build as necessary: + + $ make menuconfig + +Start the build: + + $ make + +Result of the build +=================== + +Once the build has finished you will have the following files: + + output/images/ + +-- boot.scr + +-- fw_dynamic.bin + +-- fw_dynamic.elf + +-- fw_jump.bin + +-- fw_jump.elf + +-- hifive-unleashed-a00.dtb + +-- Image + +-- rootfs.cpio + +-- rootfs.ext2 + +-- rootfs.ext4 + +-- rootfs.tar + +-- sdcard.img + +-- u-boot.bin + +-- u-boot.itb + +-- u-boot-spl.bin + + +Creating a bootable SD card with genimage +========================================= + +By default Buildroot builds a SD card image for you. All you need to do +is dd the image to your SD card, which can be done with the following +command on your development host: + + $ sudo dd if=output/images/sdcard.img of=/dev/sdb bs=4096 + +The above example command assumes the SD card is accessed via a USB card +reader and shows up as /dev/sdb on the host. Adjust it accordingly per +your actual setup. + +Booting the SD card on the board +================================ + +Make sure that the all DIP switches are set to the off position for +default boot mode (MSEL mode = 1011), insert the SD card and power +up the board. + +Connect the USB cable and open minicom (/dev/ttyUSB1, 115200, 8N1). + +See the 'SiFive HiFive Unleashed Getting Started Guide' for +more details (https://www.sifive.com/documentation). + +You will get a warning reported by fdisk when you examine the SD card. +This is because the genimage_sdcard.cfg file doesn't specify the SD card +size (as people will naturally have different sized cards), so the +secondary GPT header is placed after the rootfs rather than at the end +of the disk where it is expected to be. + +You will see something like this at boot time: + +[ 0.989458] mmc0: host does not support reading read-only switch, assuming write-enable +[ 0.996772] mmc0: new SDHC card on SPI +[ 1.001634] mmcblk0: mmc0:0000 SD8GB 7.28 GiB +[ 1.038079] GPT:Primary header thinks Alt. header is not at the end of the disk. +[ 1.044759] GPT:52389 != 15264767 +[ 1.048051] GPT:Alternate GPT header not at the end of the disk. +[ 1.054015] GPT:52389 != 15264767 +[ 1.057323] GPT: Use GNU Parted to correct GPT errors. +[ 1.062479] mmcblk0: p1 p2 p3 + + +Creating a bootable SPI flash with genimage +=========================================== + +Adjust Buildroot configuration by: + + $ make menuconfig + +Change "System configuration" -> "Extra arguments passed to custom scripts" +value to "-c board/sifive/hifive-unleashed/genimage_spi-nor.cfg", save the +configuration and build. This creates a output/images/spi-nor.img that can +be programmed to the on-board SPI flash. + +Boot the board from the SD card prepared above, stop the U-Boot auto boot, +and type the following commands to program the whole SPI flash: + + => tftp 82000000 output/images/spi-nor.img + => sf probe + => sf update 82000000 0 2000000 + +Booting the SPI flash on the board +================================== + +Make sure that the all DIP switches are set to the off position for +default boot mode (MSEL mode = 0110) to boot from SPI flash. diff --git a/board/sinovoip/m1-plus/boot.cmd b/board/sinovoip/m1-plus/boot.cmd new file mode 100644 index 00000000..48299964 --- /dev/null +++ b/board/sinovoip/m1-plus/boot.cmd @@ -0,0 +1,5 @@ +setenv fdt_high ffffffff +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait +fatload mmc 0 $kernel_addr_r zImage +fatload mmc 0 $fdt_addr_r sun7i-a20-bananapi-m1-plus.dtb +bootz $kernel_addr_r - $fdt_addr_r diff --git a/board/sinovoip/m1-plus/genimage.cfg b/board/sinovoip/m1-plus/genimage.cfg new file mode 100644 index 00000000..3cba774c --- /dev/null +++ b/board/sinovoip/m1-plus/genimage.cfg @@ -0,0 +1,37 @@ +# Minimal SD card image for the Banana Pi M1+ +# Based on the Banana Pro genimage.cfg + +image boot.vfat { + vfat { + files = { + "zImage", + "sun7i-a20-bananapi-m1-plus.dtb", + "boot.scr" + } + } + size = 10M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 512M + } +} diff --git a/board/sinovoip/m1-plus/linux-wifi.fragment b/board/sinovoip/m1-plus/linux-wifi.fragment new file mode 100644 index 00000000..5576d738 --- /dev/null +++ b/board/sinovoip/m1-plus/linux-wifi.fragment @@ -0,0 +1,10 @@ +# Networking support +CONFIG_WIRELESS=y +CONFIG_CFG80211=y +CONFIG_CFG80211_WEXT=y +CONFIG_RFKILL=y + +# Network device support +CONFIG_WLAN=y +CONFIG_WLAN_VENDOR_BROADCOM=y +CONFIG_BRCMFMAC=m diff --git a/board/sinovoip/m1-plus/patches/linux/0001-ARM-dts-sun7i-bananapi-m1-plus-Disable-OOB-IRQ-for-b.patch b/board/sinovoip/m1-plus/patches/linux/0001-ARM-dts-sun7i-bananapi-m1-plus-Disable-OOB-IRQ-for-b.patch new file mode 100644 index 00000000..b01b6b28 --- /dev/null +++ b/board/sinovoip/m1-plus/patches/linux/0001-ARM-dts-sun7i-bananapi-m1-plus-Disable-OOB-IRQ-for-b.patch @@ -0,0 +1,39 @@ +From 58bae4096a7bf8d5d3bfbddb82cb37dd0561c938 Mon Sep 17 00:00:00 2001 +From: Filip Skoneczny +Date: Sun, 10 Jan 2021 19:07:14 +0100 +Subject: [PATCH] ARM: dts: sun7i: bananapi-m1-plus: Disable OOB IRQ for brcm + wifi module + + Based on 23bc805. + BugLink: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=908438 + +Signed-off-by: Filip Skoneczny +--- + arch/arm/boot/dts/sun7i-a20-bananapi-m1-plus.dts | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/arch/arm/boot/dts/sun7i-a20-bananapi-m1-plus.dts b/arch/arm/boot/dts/sun7i-a20-bananapi-m1-plus.dts +index 32d5d45a35c0..97f9987f51d7 100644 +--- a/arch/arm/boot/dts/sun7i-a20-bananapi-m1-plus.dts ++++ b/arch/arm/boot/dts/sun7i-a20-bananapi-m1-plus.dts +@@ -193,9 +193,14 @@ &mmc3 { + brcmf: wifi@1 { + reg = <1>; + compatible = "brcm,bcm4329-fmac"; +- interrupt-parent = <&pio>; +- interrupts = <7 15 IRQ_TYPE_LEVEL_LOW>; +- interrupt-names = "host-wake"; ++ /* ++ * OOB interrupt support is broken ATM, drv probe failing with: ++ * ieee80211 phy0: brcmf_attach: dongle is not responding: err=-110 ++ * ++ * interrupt-parent = <&pio>; ++ * interrupts = <7 15 IRQ_TYPE_LEVEL_LOW>; ++ * interrupt-names = "host-wake"; ++ */ + }; + }; + +-- +2.25.1 + diff --git a/board/sinovoip/m1-plus/post-build.sh b/board/sinovoip/m1-plus/post-build.sh new file mode 100755 index 00000000..4ee6fa3b --- /dev/null +++ b/board/sinovoip/m1-plus/post-build.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Remove all but the brcmfmac43362 firmware files +find $TARGET_DIR/lib/firmware/brcm -type f -not -name "brcmfmac43362*" -delete diff --git a/board/sinovoip/m1-plus/readme.txt b/board/sinovoip/m1-plus/readme.txt new file mode 100644 index 00000000..ae647c21 --- /dev/null +++ b/board/sinovoip/m1-plus/readme.txt @@ -0,0 +1,64 @@ +Banana Pi M1+ + +Intro +===== + +This default configuration will allow you to start experimenting with the +Buildroot environment for the Banana Pi M1+. With the current configuration +it will bring-up the board, and allow access through the serial console. + +How to build it +=============== + +Configure Buildroot: + + $ make bananapi_m1_plus_defconfig + +Compile everything and build the SD card image: + + $ make + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ dd if=output/images/sdcard.img of=/dev/sdX + +Notes: + - replace 'sdX' with the actual device with your micro SD card + - you may need to be root to do that (use 'sudo') + +Insert the micro SD card in your Banana Pi M1+ and power it up. The console +is on the debug TTL UART, 115200 8N1. + +Ethernet +========== + + # udhcpc -i eth0 + +Wifi +========== + + # wpa_passphrase YOUR_SSID >> /etc/wpa_supplicant.conf + (enter the wifi password and press enter) + # wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -B + # udhcpc -i wlan0 + +Note: + - replace 'YOUR_SSID' with the actual SSID from your access point + +Audio +========== + +For this example you need package alsa-utils. + +Connect a headphone to the 3.5mm jack (TRRS). Note, that the Banana Pi M1+ +has an on-board microphone, too. + + # amixer cset name='Power Amplifier DAC Playback Switch' on + # amixer cset name='Power Amplifier Mute Switch' on + # amixer cset name='Power Amplifier Volume' 42 diff --git a/board/sinovoip/m1-plus/rootfs_overlay/lib/firmware/brcm/brcmfmac43362-sdio.sinovoip,bpi-m1-plus.txt b/board/sinovoip/m1-plus/rootfs_overlay/lib/firmware/brcm/brcmfmac43362-sdio.sinovoip,bpi-m1-plus.txt new file mode 120000 index 00000000..93947975 --- /dev/null +++ b/board/sinovoip/m1-plus/rootfs_overlay/lib/firmware/brcm/brcmfmac43362-sdio.sinovoip,bpi-m1-plus.txt @@ -0,0 +1 @@ +brcmfmac43362-sdio.txt \ No newline at end of file diff --git a/board/sinovoip/m1-plus/rootfs_overlay/lib/firmware/brcm/brcmfmac43362-sdio.txt b/board/sinovoip/m1-plus/rootfs_overlay/lib/firmware/brcm/brcmfmac43362-sdio.txt new file mode 100644 index 00000000..14a554fd --- /dev/null +++ b/board/sinovoip/m1-plus/rootfs_overlay/lib/firmware/brcm/brcmfmac43362-sdio.txt @@ -0,0 +1,56 @@ +#AP6210_NVRAM_V1.2_03192013 +manfid=0x2d0 +prodid=0x492 +vendid=0x14e4 +devid=0x4343 +boardtype=0x0598 + +# Board Revision is P307, same nvram file can be used for P304, P305, P306 and P307 as the tssi pa params used are same +#Please force the automatic RX PER data to the respective board directory if not using P307 board, for e.g. for P305 boards force the data into the following directory /projects/BCM43362/a1_labdata/boardtests/results/sdg_rev0305 +boardrev=0x1307 +boardnum=777 +xtalfreq=26000 +boardflags=0x80201 +boardflags2=0x80 +sromrev=3 +wl0id=0x431b +macaddr=00:90:4c:07:71:12 +aa2g=1 +ag0=2 +maxp2ga0=74 +cck2gpo=0x2222 +ofdm2gpo=0x44444444 +mcs2gpo0=0x6666 +mcs2gpo1=0x6666 +pa0maxpwr=56 + +#P207 PA params +#pa0b0=5447 +#pa0b1=-658 +#pa0b2=-175 + +#Same PA params for P304,P305, P306, P307 + +pa0b0=5447 +pa0b1=-607 +pa0b2=-160 +pa0itssit=62 +pa1itssit=62 + + +cckPwrOffset=5 +ccode=0 +rssismf2g=0xa +rssismc2g=0x3 +rssisav2g=0x7 +triso2g=0 +noise_cal_enable_2g=0 +noise_cal_po_2g=0 +swctrlmap_2g=0x04040404,0x02020202,0x02020202,0x010101,0x1ff +temp_add=29767 +temp_mult=425 + +btc_flags=0x6 +btc_params0=5000 +btc_params1=1000 +btc_params6=63 diff --git a/board/sinovoip/m2-plus/boot.cmd b/board/sinovoip/m2-plus/boot.cmd new file mode 100644 index 00000000..d22464a1 --- /dev/null +++ b/board/sinovoip/m2-plus/boot.cmd @@ -0,0 +1,7 @@ +setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait + +mmc dev 0 +fatload mmc 0 $kernel_addr_r zImage +fatload mmc 0 $fdt_addr_r sun8i-h3-bananapi-m2-plus.dtb + +bootz $kernel_addr_r - $fdt_addr_r diff --git a/board/sinovoip/m2-plus/genimage.cfg b/board/sinovoip/m2-plus/genimage.cfg new file mode 100644 index 00000000..cde0669e --- /dev/null +++ b/board/sinovoip/m2-plus/genimage.cfg @@ -0,0 +1,33 @@ +image boot.vfat { + vfat { + files = { + "zImage", + "sun8i-h3-bananapi-m2-plus.dtb", + "boot.scr" + } + } + size = 64M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-sunxi-with-spl.bin" + offset = 8192 + size = 1040384 # 1MB - 8192 + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/solidrun/clearfog/extlinux.conf b/board/solidrun/clearfog/extlinux.conf new file mode 100644 index 00000000..f35974e3 --- /dev/null +++ b/board/solidrun/clearfog/extlinux.conf @@ -0,0 +1,4 @@ +label Clearfog Linux + kernel /boot/zImage + devicetree /boot/armada-388-clearfog-base.dtb + append console=ttyS0,115200n8 root=/dev/mmcblk0p1 rootwait diff --git a/board/solidrun/clearfog/genimage.cfg b/board/solidrun/clearfog/genimage.cfg new file mode 100644 index 00000000..8963619c --- /dev/null +++ b/board/solidrun/clearfog/genimage.cfg @@ -0,0 +1,16 @@ +image sdcard.img { + hdimage { + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot-spl.kwb" + offset = 512 + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + offset = 1M + } +} diff --git a/board/solidrun/clearfog/linux.fragment b/board/solidrun/clearfog/linux.fragment new file mode 100644 index 00000000..b7ed5b00 --- /dev/null +++ b/board/solidrun/clearfog/linux.fragment @@ -0,0 +1 @@ +CONFIG_SENSORS_MCP3021=y diff --git a/board/solidrun/clearfog/post-build.sh b/board/solidrun/clearfog/post-build.sh new file mode 100755 index 00000000..1f5ff6a6 --- /dev/null +++ b/board/solidrun/clearfog/post-build.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" + +install -m 0644 -D $BOARD_DIR/extlinux.conf $TARGET_DIR/boot/extlinux/extlinux.conf diff --git a/board/solidrun/clearfog/readme.txt b/board/solidrun/clearfog/readme.txt new file mode 100644 index 00000000..60bf9532 --- /dev/null +++ b/board/solidrun/clearfog/readme.txt @@ -0,0 +1,61 @@ +********************** +SolidRun Clearfog Base +********************** + +This file documents Buildroot's support for the Clearfog Base by Solid Run. + +Vendor's documentation: +https://wiki.solid-run.com/doku.php?id=products:a38x:documents + +Warning for eMMC variant of the MicroSoM +======================================== + +If you bought a MicroSoM version that includes an on-board eMMC flash, the +built-in microSD card slot *WILL NOT WORK*. The Internet says that you have to +upload the first bootloader via UART. This manual does not cover these steps; +only MicroSoMs without the eMMC are supported. + +Build +===== + +Start with the default Buildroot's configuration for Clearfog: + + make solidrun_clearfog_defconfig + +Build all components: + + make + +The results of the build are available in ./output/images. + +Create a bootable SD card +========================= + +To determine the device associated to the SD card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on a microSD card. Launch the following +command as root: + + dd if=output/images/sdcard.img of=/dev/ conv=fdatasync + +*** WARNING! The dd command will destroy all the card content. Use with care! *** + +For details about the medium image layout, see the definition in +board/solidrun/clearfog/genimage.cfg. + +Boot the Clearfog board +======================= + +Here's how to boot the board: + +- Set up the DIP switches for microSD boot. The correct values are: + 1: off, 2: off, 3: ON, 4: ON, 5: ON. In this scheme, switch #1" is closer to + the ethernet ports and #5 is closer to the microSD card, "ON" means towards + the SOM, and "off" means towards the SFP cage. +- Connect to the board's console over the microUSB port. +- Insert the SD card into the slot on the board (pins up). +- Power up the board. diff --git a/board/solidrun/clearfog_gt_8k/extlinux.conf b/board/solidrun/clearfog_gt_8k/extlinux.conf new file mode 100644 index 00000000..aae0c0d5 --- /dev/null +++ b/board/solidrun/clearfog_gt_8k/extlinux.conf @@ -0,0 +1,4 @@ +label Clearfog GT-8K Linux + kernel /boot/Image + devicetree /boot/armada-8040-clearfog-gt-8k.dtb + append console=ttyS0,115200n8 root=/dev/mmcblk1p1 rootwait diff --git a/board/solidrun/clearfog_gt_8k/genimage.cfg b/board/solidrun/clearfog_gt_8k/genimage.cfg new file mode 120000 index 00000000..0cc2754f --- /dev/null +++ b/board/solidrun/clearfog_gt_8k/genimage.cfg @@ -0,0 +1 @@ +../macchiatobin/genimage.cfg \ No newline at end of file diff --git a/board/solidrun/clearfog_gt_8k/linux-extras.config b/board/solidrun/clearfog_gt_8k/linux-extras.config new file mode 100644 index 00000000..24f4f554 --- /dev/null +++ b/board/solidrun/clearfog_gt_8k/linux-extras.config @@ -0,0 +1,6 @@ +CONFIG_MARVELL_PHY=y +CONFIG_SFP=y +CONFIG_IPV6=y +CONFIG_BRIDGE=y +CONFIG_NET_DSA=y +CONFIG_NET_DSA_MV88E6XXX=y diff --git a/board/solidrun/clearfog_gt_8k/post-build-mainline.sh b/board/solidrun/clearfog_gt_8k/post-build-mainline.sh new file mode 120000 index 00000000..a8c9a524 --- /dev/null +++ b/board/solidrun/clearfog_gt_8k/post-build-mainline.sh @@ -0,0 +1 @@ +../macchiatobin/post-build-mainline.sh \ No newline at end of file diff --git a/board/solidrun/clearfog_gt_8k/readme.txt b/board/solidrun/clearfog_gt_8k/readme.txt new file mode 100644 index 00000000..1648ffa3 --- /dev/null +++ b/board/solidrun/clearfog_gt_8k/readme.txt @@ -0,0 +1,61 @@ +Intro +===== + +The default configuration described below will allow you to start +experimenting with the buildroot environment for the SolidRun Clearfog GT-8K +based on the Marvell Armada 8040 SoC. + +This default configuration will bring up the board and allow shell command +line access through the serial console. + +How to build +============ + + $ make solidrun_clearfog_gt_8k_defconfig + $ make + +How to write the SD card +======================== + +Once the build process is finished you will have an image file named +"sdcard.img" in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX bs=1M conv=fsync + +How to boot the board +===================== + +The Clearfog GT-8K can be setup to load the bootloader from different sources +including eMMC, SPI flash, and SD-card. + +To select boot from SD-card the DIP switches in SW6 (at the bottom of the +board) should be configured as follows: + + SW6: 11010 + +Insert the micro SDcard in the Cleargfog GT-8K and power it up. + +Serial console +============== + +The serial console is accessible at the J27 pins header (TTL UART) with the +following pinout (pin #1 is marked with triangle on the PCB): + + pin #1: Ground + pin #2: Armada 8040 Rx + pin #3: Armada 8040 Tx + +Enable the switch (yellow) Ethernet ports +========================================= + +To enable the Clearfog GT-8K internal switch port make sure to load the +'mv88e6xxx' kernel module, and up the switch up-link port (eth2 by default): + + modprobe mv88e6xxx + ifconfig eth2 up + +Then you can configure each switch port separately. These port are named +'lan1' to 'lan4' by default. 'lan1' is closest to the USB port, while 'lan4' +is closest to the blue Ethernet port. diff --git a/board/solidrun/clearfog_gt_8k/uboot-fragment.config b/board/solidrun/clearfog_gt_8k/uboot-fragment.config new file mode 120000 index 00000000..996c4aa6 --- /dev/null +++ b/board/solidrun/clearfog_gt_8k/uboot-fragment.config @@ -0,0 +1 @@ +../macchiatobin/uboot-fragment.config \ No newline at end of file diff --git a/board/solidrun/macchiatobin/extlinux.conf b/board/solidrun/macchiatobin/extlinux.conf new file mode 100644 index 00000000..1008af1a --- /dev/null +++ b/board/solidrun/macchiatobin/extlinux.conf @@ -0,0 +1,4 @@ +label Macchiatobin Linux + kernel /boot/Image + devicetree /boot/armada-8040-mcbin.dtb + append console=ttyS0,115200n8 root=/dev/mmcblk1p1 rootwait diff --git a/board/solidrun/macchiatobin/genimage.cfg b/board/solidrun/macchiatobin/genimage.cfg new file mode 100644 index 00000000..fdcda368 --- /dev/null +++ b/board/solidrun/macchiatobin/genimage.cfg @@ -0,0 +1,16 @@ +image sdcard.img { + hdimage { + } + + partition uboot { + in-partition-table = "no" + image = "flash-image.bin" + offset = 0x200000 + } + + partition rootfs { + partition-type = 0x83 + offset = 0x2200000 + image = "rootfs.ext4" + } +} diff --git a/board/solidrun/macchiatobin/linux-extras.config b/board/solidrun/macchiatobin/linux-extras.config new file mode 100644 index 00000000..29fd6306 --- /dev/null +++ b/board/solidrun/macchiatobin/linux-extras.config @@ -0,0 +1,3 @@ +CONFIG_MARVELL_PHY=y +CONFIG_MARVELL_10G_PHY=y +CONFIG_SFP=y diff --git a/board/solidrun/macchiatobin/post-build-mainline.sh b/board/solidrun/macchiatobin/post-build-mainline.sh new file mode 100755 index 00000000..1f5ff6a6 --- /dev/null +++ b/board/solidrun/macchiatobin/post-build-mainline.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" + +install -m 0644 -D $BOARD_DIR/extlinux.conf $TARGET_DIR/boot/extlinux/extlinux.conf diff --git a/board/solidrun/macchiatobin/post-build.sh b/board/solidrun/macchiatobin/post-build.sh new file mode 100755 index 00000000..9c1b5b88 --- /dev/null +++ b/board/solidrun/macchiatobin/post-build.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" + +install -m 0644 -D ${BOARD_DIR}/uEnv-example.txt ${TARGET_DIR}/boot/uEnv-example.txt diff --git a/board/solidrun/macchiatobin/readme.txt b/board/solidrun/macchiatobin/readme.txt new file mode 100644 index 00000000..7412951a --- /dev/null +++ b/board/solidrun/macchiatobin/readme.txt @@ -0,0 +1,79 @@ +Intro +===== + +This default configuration will allow you to start experimenting with +the buildroot environment for the MacchiatoBin board based on the +Marvell Armada 8040 SoC. Documentation for the board hardware and +software is available on the wiki at: http://wiki.macchiatobin.net + +This default configuration will bring up the board and allow access +through the serial console. + +How to build +============ + +Default configuration provides the following BSP versions: + - Linux v5.6.3 (mainline) + - U-Boot v2020.01 (mainline) + - ATF v1.5-18.12.2 (Marvell) + +To build images run the following commands: + + $ make solidrun_macchiatobin_defconfig + $ make + +How to write the SD card +======================== + +Once the build process is finished you will have an image +called "sdcard.img" in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX bs=1M conv=fsync + $ sudo sync + +How to boot the board +===================== + +The MacchiatoBin board can be setup to load the bootloader from +different sources including eMMC, SPI flash, and SD-card. + +On Rev 1.2 board to select boot from SD-card the DIP switches +SW1 and SW2 should be configured as follows: + +SW2: 01110 +SW1: 1xxxx + +The upcoming Rev 1.3 board will have a single pins header J1 instead +of the SW1/2 DIP switches. To boot from SD-card the setting of J1 +jumpers should match the DIP switches of Rev v1.2 board +from left to right: + +J1: 011101xxxx + +Insert the micro SDcard in the MacchiatoBin board and power it up. +The serial console is accessible at the micro-USB Type-B connector +marked CON9. The serial line settings are 115200 8N1. + +U-Boot environment +================== + +By default current configuration provides U-Boot that keeps environment +in SD/eMMC. However, if needed, u-boot-fragment.config can be tweaked +so that U-Boot will keep environment in SPI flash. On the first boot +SPI flash may be empty or it may contain a stale environment that +prevents proper boot. Then the following commands can be used +to boot the board: + +=> ext4load mmc 1:1 0x01700000 /boot/uEnv-example.txt +=> env import -t 0x01700000 $filesize +=> boot + +The example environment from uEnv-example.txt can be written to +SPI flash using the following commands: + +=> env default -f -a +=> ext4load mmc 1:1 0x01700000 /boot/uEnv-example.txt +=> env import -t 0x01700000 $filesize +=> saveenv diff --git a/board/solidrun/macchiatobin/uEnv-example.txt b/board/solidrun/macchiatobin/uEnv-example.txt new file mode 100644 index 00000000..1967e2ba --- /dev/null +++ b/board/solidrun/macchiatobin/uEnv-example.txt @@ -0,0 +1,7 @@ +bootargs=console=ttyS0,115200 root=/dev/mmcblk1p1 rw rootwait +fdt_addr=0x1000000 +fdt_high=0xffffffffffffffff +fdt_name=boot/armada-8040-mcbin.dtb +kernel_addr=0x2000000 +image_name=boot/Image +bootcmd=mmc dev 1; ext4load mmc 1:1 $kernel_addr $image_name; ext4load mmc 1:1 $fdt_addr $fdt_name; booti $kernel_addr - $fdt_addr diff --git a/board/solidrun/macchiatobin/uboot-fragment.config b/board/solidrun/macchiatobin/uboot-fragment.config new file mode 100644 index 00000000..717a0942 --- /dev/null +++ b/board/solidrun/macchiatobin/uboot-fragment.config @@ -0,0 +1,2 @@ +CONFIG_ENV_IS_IN_MMC=y +# CONFIG_ENV_IS_IN_SPI_FLASH is not set diff --git a/board/solidrun/mx6cubox/boot.scr.txt b/board/solidrun/mx6cubox/boot.scr.txt new file mode 100644 index 00000000..e4cf8147 --- /dev/null +++ b/board/solidrun/mx6cubox/boot.scr.txt @@ -0,0 +1,7 @@ +setenv finduuid "part uuid mmc 1:1 uuid" +run finduuid +run findfdt +setenv bootargs "console=ttymxc0,115200 root=PARTUUID=${uuid} rootwait rootfstype=ext4" +load mmc 1:1 ${fdt_addr} boot/${fdtfile} +load mmc 1:1 ${loadaddr} boot/zImage +bootz ${loadaddr} - ${fdt_addr} diff --git a/board/solidrun/mx6cubox/genimage.cfg b/board/solidrun/mx6cubox/genimage.cfg new file mode 100644 index 00000000..490986ac --- /dev/null +++ b/board/solidrun/mx6cubox/genimage.cfg @@ -0,0 +1,29 @@ +# Minimal SD card image for the MX6 Cubox/Hummingboard +# +# U-Boot SPL and u-boot.img are flashed in the first 1MB raw partition. +# A single root filesystem partition is used (Ext4 in this case). +# + +image sdcard.img { + hdimage { + } + + partition spl { + in-partition-table = "no" + image = "SPL" + offset = 1K + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot.img" + offset = 69K + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + offset = 1M + size = 512M + } +} diff --git a/board/solidrun/mx6cubox/post-build.sh b/board/solidrun/mx6cubox/post-build.sh new file mode 100755 index 00000000..6ddc1137 --- /dev/null +++ b/board/solidrun/mx6cubox/post-build.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" + +install -d -m 755 $TARGET_DIR/boot + +$HOST_DIR/bin/mkimage -A arm -O linux -T script -C none \ + -n "boot script" -d $BOARD_DIR/boot.scr.txt $TARGET_DIR/boot/boot.scr diff --git a/board/solidrun/mx6cubox/post-image.sh b/board/solidrun/mx6cubox/post-image.sh new file mode 100755 index 00000000..b4ac4608 --- /dev/null +++ b/board/solidrun/mx6cubox/post-image.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +BOARD_DIR="$(dirname $0)" +GENIMAGE_CFG="${BOARD_DIR}/genimage.cfg" +GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp" + +rm -rf "${GENIMAGE_TMP}" + +genimage \ + --rootpath "${TARGET_DIR}" \ + --tmppath "${GENIMAGE_TMP}" \ + --inputpath "${BINARIES_DIR}" \ + --outputpath "${BINARIES_DIR}" \ + --config "${GENIMAGE_CFG}" diff --git a/board/solidrun/mx6cubox/readme.txt b/board/solidrun/mx6cubox/readme.txt new file mode 100644 index 00000000..630ab6c7 --- /dev/null +++ b/board/solidrun/mx6cubox/readme.txt @@ -0,0 +1,18 @@ +Solidrun's MX6 Cubox/Hummingboard + +https://www.solid-run.com/freescale-imx6-family/hummingboard/ + +https://www.solid-run.com/freescale-imx6-family/cubox-i/ + +To build a minimal support for these boards: + + $ make mx6cubox_defconfig + $ make + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on an SD card: + +dd if=output/images/sdcard.img of=/dev/ + +For details about the medium image layout, see the definition in +board/solidrun/mx6cubox/genimage.cfg. diff --git a/board/stmicroelectronics/common/stm32f4xx/stm32-post-build.sh b/board/stmicroelectronics/common/stm32f4xx/stm32-post-build.sh new file mode 100755 index 00000000..e324afe5 --- /dev/null +++ b/board/stmicroelectronics/common/stm32f4xx/stm32-post-build.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +# Kernel is built without devpts support +sed -i '/^devpts/d' ${TARGET_DIR}/etc/fstab + +# Kernel is built without network support +rm -f ${TARGET_DIR}/etc/init.d/S40network +rm -rf ${TARGET_DIR}/etc/network/ diff --git a/board/stmicroelectronics/common/stm32mp157/genimage.cfg.template b/board/stmicroelectronics/common/stm32mp157/genimage.cfg.template new file mode 100644 index 00000000..f341c19f --- /dev/null +++ b/board/stmicroelectronics/common/stm32mp157/genimage.cfg.template @@ -0,0 +1,22 @@ +image sdcard.img { + hdimage { + gpt = "true" + } + + partition fsbl1 { + image = "%ATFBIN%" + } + + partition fsbl2 { + image = "%ATFBIN%" + } + + partition ssbl { + image = "u-boot.stm32" + } + + partition rootfs { + image = "rootfs.ext4" + bootable = "yes" + } +} diff --git a/board/stmicroelectronics/common/stm32mp157/post-image.sh b/board/stmicroelectronics/common/stm32mp157/post-image.sh new file mode 100755 index 00000000..363c3127 --- /dev/null +++ b/board/stmicroelectronics/common/stm32mp157/post-image.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +# +# atf_image extracts the ATF binary image from DTB_FILE_NAME that appears in +# BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_VARIABLES in ${BR_CONFIG}, +# then prints the corresponding file name for the genimage +# configuration file +# +atf_image() +{ + local ATF_VARIABLES="$(sed -n 's/^BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_VARIABLES="\([\/a-zA-Z0-9_=. \-]*\)"$/\1/p' ${BR2_CONFIG})" + + if grep -Eq "DTB_FILE_NAME=stm32mp157c-dk2.dtb" <<< ${ATF_VARIABLES}; then + echo "tf-a-stm32mp157c-dk2.stm32" + elif grep -Eq "DTB_FILE_NAME=stm32mp157a-dk1.dtb" <<< ${ATF_VARIABLES}; then + echo "tf-a-stm32mp157a-dk1.stm32" + elif grep -Eq "DTB_FILE_NAME=stm32mp157a-avenger96.dtb" <<< ${ATF_VARIABLES}; then + echo "tf-a-stm32mp157a-avenger96.stm32" + fi +} + +main() +{ + local ATFBIN="$(atf_image)" + local GENIMAGE_CFG="$(mktemp --suffix genimage.cfg)" + local GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp" + + sed -e "s/%ATFBIN%/${ATFBIN}/" \ + board/stmicroelectronics/common/stm32mp157/genimage.cfg.template > ${GENIMAGE_CFG} + + support/scripts/genimage.sh -c ${GENIMAGE_CFG} + + rm -f ${GENIMAGE_CFG} + + exit $? +} + +main $@ diff --git a/board/stmicroelectronics/stm32f429-disco/flash.sh b/board/stmicroelectronics/stm32f429-disco/flash.sh new file mode 100755 index 00000000..b19e0a60 --- /dev/null +++ b/board/stmicroelectronics/stm32f429-disco/flash.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +OUTPUT_DIR=$1 +BOARD_NAME=${2:-stm32f429discovery} + +if ! test -d "${OUTPUT_DIR}" ; then + echo "ERROR: no output directory specified." + echo "Usage: $0 OUTPUT_DIR BOARD_NAME" + echo "" + echo "Arguments:" + echo " OUTPUT_DIR The Buildroot output directory." + echo " BOARD_NAME One of the available boards among:" + echo " stm32f429discovery, stm32f429disc1" + exit 1 +fi + +${OUTPUT_DIR}/host/bin/openocd -f board/${BOARD_NAME}.cfg \ + -c "init" \ + -c "reset init" \ + -c "flash probe 0" \ + -c "flash info 0" \ + -c "flash write_image erase ${OUTPUT_DIR}/images/stm32f429i-disco.bin 0x08000000" \ + -c "flash write_image erase ${OUTPUT_DIR}/images/stm32f429-disco.dtb 0x08004000" \ + -c "flash write_image erase ${OUTPUT_DIR}/images/xipImage 0x08008000" \ + -c "reset run" \ + -c "shutdown" diff --git a/board/stmicroelectronics/stm32f429-disco/patches/linux/0001-ARM-stm32f249-disco-don-t-force-init-in-chosen-boota.patch b/board/stmicroelectronics/stm32f429-disco/patches/linux/0001-ARM-stm32f249-disco-don-t-force-init-in-chosen-boota.patch new file mode 100644 index 00000000..d6d5c61a --- /dev/null +++ b/board/stmicroelectronics/stm32f429-disco/patches/linux/0001-ARM-stm32f249-disco-don-t-force-init-in-chosen-boota.patch @@ -0,0 +1,32 @@ +From ded9afa688184b3240a92c2b8f114c545a09bc3f Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sat, 12 Mar 2016 23:14:41 +0100 +Subject: [PATCH] ARM: stm32f249-disco: don't force init= in /chosen/bootargs + +There is no reason to override the kernel's default init= value, as +this breaks userspace that assumes the kernel default of /init is +used. Since stm32 is often used with a minimal bootloader +(afboot-stm32) that doesn't provide any mechanism to override the DTB, +we need to adjust the kernel command line in the Device Tree source. + +Signed-off-by: Thomas Petazzoni +--- + arch/arm/boot/dts/stm32f429-disco.dts | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/arm/boot/dts/stm32f429-disco.dts b/arch/arm/boot/dts/stm32f429-disco.dts +index f0b731d..2bae81c 100644 +--- a/arch/arm/boot/dts/stm32f429-disco.dts ++++ b/arch/arm/boot/dts/stm32f429-disco.dts +@@ -53,7 +53,7 @@ + compatible = "st,stm32f429i-disco", "st,stm32f429"; + + chosen { +- bootargs = "root=/dev/ram rdinit=/linuxrc"; ++ bootargs = "root=/dev/ram"; + stdout-path = "serial0:115200n8"; + }; + +-- +2.6.4 + diff --git a/board/stmicroelectronics/stm32f429-disco/readme.txt b/board/stmicroelectronics/stm32f429-disco/readme.txt new file mode 100644 index 00000000..f512cb2e --- /dev/null +++ b/board/stmicroelectronics/stm32f429-disco/readme.txt @@ -0,0 +1,37 @@ +STM32F429 Discovery +=================== + +This tutorial describes how to use the predefined Buildroot +configuration for the STM32F429 Discovery evaluation platform. + +Supported HW +------------ + + - STM32F429I-DISCO evaluation board + - STM32F429I-DISC1 evaluation board + +Building +-------- + + make stm32f429_disco_defconfig + make + +Wire the UART +------------- + +Use a USB to TTL adapter, and connect: + + - RX to PA9 + - TX to PA10 + - GND to one of the GND available on the board + +The UART is configured at 115200. + +Flashing +-------- + + ./board/stmicroelectronics/stm32f429-disco/flash.sh output/ \ + {stm32f429discovery|stm32f429disc1} + +It will flash the minimal bootloader, the Device Tree Blob, and the +kernel image which includes the root filesystem as initramfs. diff --git a/board/stmicroelectronics/stm32f469-disco/extlinux.conf b/board/stmicroelectronics/stm32f469-disco/extlinux.conf new file mode 100644 index 00000000..1c2db438 --- /dev/null +++ b/board/stmicroelectronics/stm32f469-disco/extlinux.conf @@ -0,0 +1,4 @@ +label stm32f469-disco-buildroot + kernel /zImage + devicetree /stm32f469-disco.dtb + append console=ttySTM0,115200 root=/dev/mmcblk0p2 rw rootfstype=ext2 rootwait earlyprintk consoleblank=0 ignore_loglevel diff --git a/board/stmicroelectronics/stm32f469-disco/flash.sh b/board/stmicroelectronics/stm32f469-disco/flash.sh new file mode 100755 index 00000000..984d2b25 --- /dev/null +++ b/board/stmicroelectronics/stm32f469-disco/flash.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +OUTPUT_DIR=$1 + +if ! test -d "${OUTPUT_DIR}" ; then + echo "ERROR: no output directory specified." + echo "Usage: $0 OUTPUT_DIR" + exit 1 +fi + +${OUTPUT_DIR}/host/bin/openocd -f board/stm32f469discovery.cfg \ + -c "init" \ + -c "reset init" \ + -c "flash probe 0" \ + -c "flash info 0" \ + -c "flash write_image erase ${OUTPUT_DIR}/images/u-boot.bin 0x08000000" \ + -c "reset run" \ + -c "shutdown" diff --git a/board/stmicroelectronics/stm32f469-disco/genimage.cfg b/board/stmicroelectronics/stm32f469-disco/genimage.cfg new file mode 100644 index 00000000..bc945955 --- /dev/null +++ b/board/stmicroelectronics/stm32f469-disco/genimage.cfg @@ -0,0 +1,27 @@ +image boot.vfat { + vfat { + files = { + "zImage", + "stm32f469-disco.dtb", + "extlinux" + } + } + size = 16M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + partition-type = 0xC + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext2" + size = 32M + } +} + diff --git a/board/stmicroelectronics/stm32f469-disco/linux.fragment b/board/stmicroelectronics/stm32f469-disco/linux.fragment new file mode 100644 index 00000000..90f5e8a8 --- /dev/null +++ b/board/stmicroelectronics/stm32f469-disco/linux.fragment @@ -0,0 +1 @@ +# CONFIG_XIP_KERNEL is not set \ No newline at end of file diff --git a/board/stmicroelectronics/stm32f469-disco/post-build.sh b/board/stmicroelectronics/stm32f469-disco/post-build.sh new file mode 100755 index 00000000..ec20fca7 --- /dev/null +++ b/board/stmicroelectronics/stm32f469-disco/post-build.sh @@ -0,0 +1,4 @@ +#!/bin/sh +BOARD_DIR="$(dirname $0)" + +install -m 0644 -D $BOARD_DIR/extlinux.conf $BINARIES_DIR/extlinux/extlinux.conf diff --git a/board/stmicroelectronics/stm32f469-disco/readme.txt b/board/stmicroelectronics/stm32f469-disco/readme.txt new file mode 100644 index 00000000..c1e1d30e --- /dev/null +++ b/board/stmicroelectronics/stm32f469-disco/readme.txt @@ -0,0 +1,31 @@ +STM32F469 Discovery +=================== + +This tutorial describes how to use the predefined Buildroot +configuration for the STM32F469 Discovery evaluation platform. + +Building +-------- + + make stm32f469_disco_defconfig + make + +Flashing +-------- + + ./board/stmicroelectronics/stm32f469-disco/flash.sh output/ + +It will flash the U-boot bootloader. + +Creating SD card +---------------- + +Buildroot prepares an"sdcard.img" image in the output/images/ directory, +ready to be dumped on a SD card. Launch the following command as root: + + dd if=output/images/sdcard.img of=/dev/ + +*** WARNING! This will destroy all the card content. Use with care! *** + +For details about the medium image layout and its content, see the +definition in board/stmicroelectronics/stm32f469-disco/genimage.cfg. diff --git a/board/stmicroelectronics/stm32mp157a-dk1/linux.config b/board/stmicroelectronics/stm32mp157a-dk1/linux.config new file mode 100644 index 00000000..95c834e4 --- /dev/null +++ b/board/stmicroelectronics/stm32mp157a-dk1/linux.config @@ -0,0 +1,182 @@ +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_USELIB=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_PREEMPT=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=16 +CONFIG_BLK_DEV_INITRD=y +CONFIG_ARCH_STM32=y +CONFIG_ARM_THUMBEE=y +# CONFIG_CACHE_L2X0 is not set +CONFIG_ARM_ERRATA_430973=y +CONFIG_ARM_ERRATA_720789=y +CONFIG_ARM_ERRATA_754322=y +CONFIG_ARM_ERRATA_754327=y +CONFIG_ARM_ERRATA_764369=y +CONFIG_ARM_ERRATA_775420=y +CONFIG_ARM_ERRATA_798181=y +CONFIG_SMP=y +CONFIG_MCPM=y +CONFIG_HIGHMEM=y +CONFIG_FORCE_MAX_ZONEORDER=12 +CONFIG_SECCOMP=y +# CONFIG_ATAGS is not set +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_ARM_APPENDED_DTB=y +CONFIG_ARM_ATAG_DTB_COMPAT=y +CONFIG_VFP=y +CONFIG_NEON=y +CONFIG_KERNEL_MODE_NEON=y +CONFIG_ARM_CRYPTO=y +CONFIG_MODULES=y +CONFIG_MODULE_FORCE_LOAD=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODVERSIONS=y +CONFIG_PARTITION_ADVANCED=y +CONFIG_CMDLINE_PARTITION=y +CONFIG_CMA=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_CAN=y +CONFIG_CAN_M_CAN=y +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_DMA_CMA=y +CONFIG_CMA_SIZE_MBYTES=128 +CONFIG_SIMPLE_PM_BUS=y +CONFIG_MTD=y +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_BLOCK=y +CONFIG_MTD_M25P80=y +CONFIG_MTD_NAND=y +CONFIG_MTD_NAND_STM32_FMC2=y +CONFIG_MTD_SPI_NOR=y +# CONFIG_MTD_SPI_NOR_USE_4K_SECTORS is not set +CONFIG_MTD_UBI=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=65536 +CONFIG_SRAM=y +CONFIG_EEPROM_AT24=y +CONFIG_NETDEVICES=y +CONFIG_VIRTIO_NET=y +CONFIG_KS8851=y +CONFIG_SMSC911X=y +CONFIG_STMMAC_ETH=y +CONFIG_DWMAC_DWC_QOS_ETH=y +CONFIG_MDIO_BITBANG=y +CONFIG_INPUT_JOYDEV=y +CONFIG_INPUT_EVDEV=y +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_EDT_FT5X06=y +CONFIG_INPUT_MISC=y +CONFIG_INPUT_STPMIC1_ONKEY=y +CONFIG_SERIAL_STM32=y +CONFIG_SERIAL_STM32_CONSOLE=y +CONFIG_SERIAL_DEV_BUS=y +CONFIG_HW_RANDOM=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_MUX=y +CONFIG_I2C_STM32F7=y +CONFIG_SPI=y +CONFIG_SPI_STM32=y +CONFIG_SPI_STM32_QSPI=y +CONFIG_PINCTRL_SINGLE=y +CONFIG_PINCTRL_STMFX=y +CONFIG_POWER_RESET=y +CONFIG_POWER_RESET_GPIO=y +CONFIG_POWER_RESET_GPIO_RESTART=y +CONFIG_POWER_RESET_SYSCON=y +CONFIG_POWER_RESET_SYSCON_POWEROFF=y +CONFIG_SYSCON_REBOOT_MODE=y +CONFIG_WATCHDOG=y +CONFIG_STPMIC1_WATCHDOG=y +CONFIG_MFD_STM32_LPTIMER=y +CONFIG_MFD_STPMIC1=y +CONFIG_REGULATOR=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_REGULATOR_STM32_VREFBUF=y +CONFIG_REGULATOR_STM32_PWR=y +CONFIG_REGULATOR_STPMIC1=y +CONFIG_DRM=y +CONFIG_DRM_STM=y +CONFIG_DRM_STM_DSI=y +# CONFIG_DRM_PANEL_ORISETECH_OTM8009A is not set +# CONFIG_DRM_SII902X is not set +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set +# CONFIG_LCD_CLASS_DEVICE is not set +# CONFIG_BACKLIGHT_CLASS_DEVICE is not set +# CONFIG_BACKLIGHT_GENERIC is not set +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_SOUND=y +CONFIG_SND=y +CONFIG_SND_DYNAMIC_MINORS=y +CONFIG_USB=y +CONFIG_USB_OTG=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_PLATFORM=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_HCD_PLATFORM=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PLATFORM=y +CONFIG_USB_DWC2=y +CONFIG_USB_CHIPIDEA=y +CONFIG_USB_CHIPIDEA_HOST=y +CONFIG_USB_ISP1760=y +CONFIG_USB_HSIC_USB3503=y +CONFIG_USB_GPIO_VBUS=y +CONFIG_USB_ISP1301=y +CONFIG_USB_ULPI=y +CONFIG_TYPEC=y +CONFIG_TYPEC_STUSB=y +CONFIG_MMC=y +CONFIG_MMC_BLOCK_MINORS=16 +CONFIG_MMC_ARMMMCI=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MMC_DW=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_PWM=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_STM32=y +CONFIG_DMADEVICES=y +CONFIG_STM32_DMA=y +CONFIG_STM32_DMAMUX=y +CONFIG_STM32_MDMA=y +CONFIG_HWSPINLOCK=y +CONFIG_HWSPINLOCK_STM32=y +CONFIG_STM32_IPCC=y +CONFIG_REMOTEPROC=y +CONFIG_STM32_RPROC=y +CONFIG_RPMSG_VIRTIO=y +CONFIG_RPMSG_TTY=y +CONFIG_IIO=y +CONFIG_IIO_SW_TRIGGER=y +CONFIG_SD_ADC_MODULATOR=y +CONFIG_STM32_ADC_CORE=y +CONFIG_STM32_ADC=y +CONFIG_STM32_ADC_TEMP=y +CONFIG_STM32_DFSDM_ADC=y +CONFIG_STM32_LPTIMER_CNT=y +CONFIG_STM32_DAC=y +CONFIG_IIO_HRTIMER_TRIGGER=y +CONFIG_IIO_STM32_LPTIMER_TRIGGER=y +CONFIG_PWM=y +CONFIG_PWM_STM32=y +CONFIG_PWM_STM32_LP=y +CONFIG_PHY_STM32_USBPHYC=y +CONFIG_NVMEM_STM32_ROMEM=y +CONFIG_EXT4_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_PRINTK_TIME=y diff --git a/board/stmicroelectronics/stm32mp157a-dk1/overlay/boot/extlinux/extlinux.conf b/board/stmicroelectronics/stm32mp157a-dk1/overlay/boot/extlinux/extlinux.conf new file mode 100644 index 00000000..437e80fd --- /dev/null +++ b/board/stmicroelectronics/stm32mp157a-dk1/overlay/boot/extlinux/extlinux.conf @@ -0,0 +1,4 @@ +label stm32mp157a-dk1-buildroot + kernel /boot/zImage + devicetree /boot/stm32mp157a-dk1.dtb + append root=/dev/mmcblk0p4 rootwait diff --git a/board/stmicroelectronics/stm32mp157a-dk1/readme.txt b/board/stmicroelectronics/stm32mp157a-dk1/readme.txt new file mode 100644 index 00000000..060f71d5 --- /dev/null +++ b/board/stmicroelectronics/stm32mp157a-dk1/readme.txt @@ -0,0 +1,38 @@ +STM32MP157A Discovery Kit v1 + +Intro +===== + +This configuration supports the STM32MP157 Discovery Kit 1 (DK1) +platform: + + https://www.st.com/en/evaluation-tools/stm32mp157a-dk1.html + +How to build +============ + + $ make stm32mp157a_dk1_defconfig + $ make + +How to write the microSD card +============================= + +Once the build process is finished you will have an image called +"sdcard.img" in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an microSD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + +Boot the board +============== + + (1) Insert the microSD card in connector CN15 + + (2) Plug a micro-USB cable in connector CN11 and run your serial + communication program on /dev/ttyACM0. + + (3) Plug a USB-C cable in CN6 to power-up the board. + + (4) The system will start, with the console on UART, but also visible + on the screen. diff --git a/board/stmicroelectronics/stm32mp157a-dk1/uboot-fragment.config b/board/stmicroelectronics/stm32mp157a-dk1/uboot-fragment.config new file mode 100644 index 00000000..a278ce9e --- /dev/null +++ b/board/stmicroelectronics/stm32mp157a-dk1/uboot-fragment.config @@ -0,0 +1 @@ +# CONFIG_STM32MP_WATCHDOG is not set diff --git a/board/stmicroelectronics/stm32mp157c-dk2/linux.config b/board/stmicroelectronics/stm32mp157c-dk2/linux.config new file mode 100644 index 00000000..878a0c39 --- /dev/null +++ b/board/stmicroelectronics/stm32mp157c-dk2/linux.config @@ -0,0 +1,182 @@ +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_USELIB=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_PREEMPT=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=16 +CONFIG_BLK_DEV_INITRD=y +CONFIG_ARCH_STM32=y +CONFIG_ARM_THUMBEE=y +# CONFIG_CACHE_L2X0 is not set +CONFIG_ARM_ERRATA_430973=y +CONFIG_ARM_ERRATA_720789=y +CONFIG_ARM_ERRATA_754322=y +CONFIG_ARM_ERRATA_754327=y +CONFIG_ARM_ERRATA_764369=y +CONFIG_ARM_ERRATA_775420=y +CONFIG_ARM_ERRATA_798181=y +CONFIG_SMP=y +CONFIG_MCPM=y +CONFIG_HIGHMEM=y +CONFIG_FORCE_MAX_ZONEORDER=12 +CONFIG_SECCOMP=y +# CONFIG_ATAGS is not set +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_ARM_APPENDED_DTB=y +CONFIG_ARM_ATAG_DTB_COMPAT=y +CONFIG_VFP=y +CONFIG_NEON=y +CONFIG_KERNEL_MODE_NEON=y +CONFIG_ARM_CRYPTO=y +CONFIG_MODULES=y +CONFIG_MODULE_FORCE_LOAD=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODVERSIONS=y +CONFIG_PARTITION_ADVANCED=y +CONFIG_CMDLINE_PARTITION=y +CONFIG_CMA=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_CAN=y +CONFIG_CAN_M_CAN=y +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_DMA_CMA=y +CONFIG_CMA_SIZE_MBYTES=128 +CONFIG_SIMPLE_PM_BUS=y +CONFIG_MTD=y +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_BLOCK=y +CONFIG_MTD_M25P80=y +CONFIG_MTD_NAND=y +CONFIG_MTD_NAND_STM32_FMC2=y +CONFIG_MTD_SPI_NOR=y +# CONFIG_MTD_SPI_NOR_USE_4K_SECTORS is not set +CONFIG_MTD_UBI=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=65536 +CONFIG_SRAM=y +CONFIG_EEPROM_AT24=y +CONFIG_NETDEVICES=y +CONFIG_VIRTIO_NET=y +CONFIG_KS8851=y +CONFIG_SMSC911X=y +CONFIG_STMMAC_ETH=y +CONFIG_DWMAC_DWC_QOS_ETH=y +CONFIG_MDIO_BITBANG=y +CONFIG_INPUT_JOYDEV=y +CONFIG_INPUT_EVDEV=y +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_EDT_FT5X06=y +CONFIG_INPUT_MISC=y +CONFIG_INPUT_STPMIC1_ONKEY=y +CONFIG_SERIAL_STM32=y +CONFIG_SERIAL_STM32_CONSOLE=y +CONFIG_SERIAL_DEV_BUS=y +CONFIG_HW_RANDOM=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_MUX=y +CONFIG_I2C_STM32F7=y +CONFIG_SPI=y +CONFIG_SPI_STM32=y +CONFIG_SPI_STM32_QSPI=y +CONFIG_PINCTRL_SINGLE=y +CONFIG_PINCTRL_STMFX=y +CONFIG_POWER_RESET=y +CONFIG_POWER_RESET_GPIO=y +CONFIG_POWER_RESET_GPIO_RESTART=y +CONFIG_POWER_RESET_SYSCON=y +CONFIG_POWER_RESET_SYSCON_POWEROFF=y +CONFIG_SYSCON_REBOOT_MODE=y +CONFIG_WATCHDOG=y +CONFIG_STPMIC1_WATCHDOG=y +CONFIG_MFD_STM32_LPTIMER=y +CONFIG_MFD_STPMIC1=y +CONFIG_REGULATOR=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_REGULATOR_STM32_VREFBUF=y +CONFIG_REGULATOR_STM32_PWR=y +CONFIG_REGULATOR_STPMIC1=y +CONFIG_DRM=y +CONFIG_DRM_STM=y +CONFIG_DRM_STM_DSI=y +CONFIG_DRM_PANEL_ORISETECH_OTM8009A=y +CONFIG_DRM_SII902X=y +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_GENERIC is not set +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +CONFIG_SOUND=y +CONFIG_SND=y +CONFIG_SND_DYNAMIC_MINORS=y +CONFIG_USB=y +CONFIG_USB_OTG=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_PLATFORM=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_HCD_PLATFORM=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PLATFORM=y +CONFIG_USB_DWC2=y +CONFIG_USB_CHIPIDEA=y +CONFIG_USB_CHIPIDEA_HOST=y +CONFIG_USB_ISP1760=y +CONFIG_USB_HSIC_USB3503=y +CONFIG_USB_GPIO_VBUS=y +CONFIG_USB_ISP1301=y +CONFIG_USB_ULPI=y +CONFIG_TYPEC=y +CONFIG_TYPEC_STUSB=y +CONFIG_MMC=y +CONFIG_MMC_BLOCK_MINORS=16 +CONFIG_MMC_ARMMMCI=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MMC_DW=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_PWM=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_STM32=y +CONFIG_DMADEVICES=y +CONFIG_STM32_DMA=y +CONFIG_STM32_DMAMUX=y +CONFIG_STM32_MDMA=y +CONFIG_HWSPINLOCK=y +CONFIG_HWSPINLOCK_STM32=y +CONFIG_STM32_IPCC=y +CONFIG_REMOTEPROC=y +CONFIG_STM32_RPROC=y +CONFIG_RPMSG_VIRTIO=y +CONFIG_RPMSG_TTY=y +CONFIG_IIO=y +CONFIG_IIO_SW_TRIGGER=y +CONFIG_SD_ADC_MODULATOR=y +CONFIG_STM32_ADC_CORE=y +CONFIG_STM32_ADC=y +CONFIG_STM32_ADC_TEMP=y +CONFIG_STM32_DFSDM_ADC=y +CONFIG_STM32_LPTIMER_CNT=y +CONFIG_STM32_DAC=y +CONFIG_IIO_HRTIMER_TRIGGER=y +CONFIG_IIO_STM32_LPTIMER_TRIGGER=y +CONFIG_PWM=y +CONFIG_PWM_STM32=y +CONFIG_PWM_STM32_LP=y +CONFIG_PHY_STM32_USBPHYC=y +CONFIG_NVMEM_STM32_ROMEM=y +CONFIG_EXT4_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_PRINTK_TIME=y diff --git a/board/stmicroelectronics/stm32mp157c-dk2/overlay/boot/extlinux/extlinux.conf b/board/stmicroelectronics/stm32mp157c-dk2/overlay/boot/extlinux/extlinux.conf new file mode 100644 index 00000000..5b7f56ee --- /dev/null +++ b/board/stmicroelectronics/stm32mp157c-dk2/overlay/boot/extlinux/extlinux.conf @@ -0,0 +1,4 @@ +label stm32mp157c-dk2-buildroot + kernel /boot/zImage + devicetree /boot/stm32mp157c-dk2.dtb + append root=/dev/mmcblk0p4 rootwait diff --git a/board/stmicroelectronics/stm32mp157c-dk2/readme.txt b/board/stmicroelectronics/stm32mp157c-dk2/readme.txt new file mode 100644 index 00000000..8edc3e8b --- /dev/null +++ b/board/stmicroelectronics/stm32mp157c-dk2/readme.txt @@ -0,0 +1,38 @@ +STM32MP157C Discovery Kit v2 + +Intro +===== + +This configuration supports the STM32MP157C Discovery Kit 2 (DK2) +platform: + + https://www.st.com/en/evaluation-tools/stm32mp157c-dk2.html + +How to build +============ + + $ make stm32mp157c_dk2_defconfig + $ make + +How to write the microSD card +============================= + +Once the build process is finished you will have an image called +"sdcard.img" in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an microSD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + +Boot the board +============== + + (1) Insert the microSD card in connector CN15 + + (2) Plug a micro-USB cable in connector CN11 and run your serial + communication program on /dev/ttyACM0. + + (3) Plug a USB-C cable in CN6 to power-up the board. + + (4) The system will start, with the console on UART, but also visible + on the screen. diff --git a/board/stmicroelectronics/stm32mp157c-dk2/uboot-fragment.config b/board/stmicroelectronics/stm32mp157c-dk2/uboot-fragment.config new file mode 100644 index 00000000..a278ce9e --- /dev/null +++ b/board/stmicroelectronics/stm32mp157c-dk2/uboot-fragment.config @@ -0,0 +1 @@ +# CONFIG_STM32MP_WATCHDOG is not set diff --git a/board/synopsys/axs10x/post-build.sh b/board/synopsys/axs10x/post-build.sh new file mode 100755 index 00000000..f23c8a99 --- /dev/null +++ b/board/synopsys/axs10x/post-build.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +set -u +set -e + +# Add a console on tty0 +if [ -e ${TARGET_DIR}/etc/inittab ]; then + grep -qE '^tty0::' ${TARGET_DIR}/etc/inittab || \ + sed -i '/GENERIC_SERIAL/a\ +tty0::respawn:/sbin/getty 115200 tty0' ${TARGET_DIR}/etc/inittab +fi diff --git a/board/synopsys/hsdk/genimage.cfg b/board/synopsys/hsdk/genimage.cfg new file mode 100644 index 00000000..9103b202 --- /dev/null +++ b/board/synopsys/hsdk/genimage.cfg @@ -0,0 +1,27 @@ +image boot.vfat { + vfat { + files = { + "uImage" + } + file uboot.env { + image = "uboot-env.bin" + } + } + size = 20M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/synopsys/hsdk/linux.fragment b/board/synopsys/hsdk/linux.fragment new file mode 100644 index 00000000..aaca08e0 --- /dev/null +++ b/board/synopsys/hsdk/linux.fragment @@ -0,0 +1,3 @@ +CONFIG_INITRAMFS_SOURCE="" +CONFIG_ARC_UBOOT_SUPPORT=y +CONFIG_USB=y diff --git a/board/synopsys/hsdk/readme.txt b/board/synopsys/hsdk/readme.txt new file mode 100644 index 00000000..f4c65011 --- /dev/null +++ b/board/synopsys/hsdk/readme.txt @@ -0,0 +1,33 @@ +Synopsys, Inc. +ARC HS Development Kit (HSDK) + +https://embarc.org/platforms.html + +How to build it +=============== + +Select the default configuration for the target: +$ make snps_archs38_hsdk_defconfig + +Optional: modify the configuration: +$ make menuconfig + +Build: +$ make + +Result of the build +=================== +output/images/ +├── boot.vfat +├── rootfs.ext2 +├── sdcard.img +├── u-boot +├── u-boot.bin +├── uboot-env.bin +└── uImage + +To copy the image file to the sdcard use dd: +$ dd if=output/images/sdcard.img of=/dev/XXX + +2018, Evgeniy Didin + diff --git a/board/synopsys/hsdk/uboot.env.txt b/board/synopsys/hsdk/uboot.env.txt new file mode 100644 index 00000000..216f0c90 --- /dev/null +++ b/board/synopsys/hsdk/uboot.env.txt @@ -0,0 +1,9 @@ +baudrate=115200 +bootargs=root=/dev/mmcblk0p2 rootwait +bootcmd=fatload mmc 0:1; bootm +bootdelay=2 +bootfile=uImage +loadaddr=0x82000000 +stderr=serial0@f0005000 +stdin=serial0@f0005000 +stdout=serial0@f0005000 diff --git a/board/synopsys/vdk/linux-vdk-aarch64-defconfig b/board/synopsys/vdk/linux-vdk-aarch64-defconfig new file mode 100644 index 00000000..8109e169 --- /dev/null +++ b/board/synopsys/vdk/linux-vdk-aarch64-defconfig @@ -0,0 +1,143 @@ +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=16 +CONFIG_CGROUPS=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_EMBEDDED=y +CONFIG_SLAB=y +CONFIG_PROFILING=y +CONFIG_CC_STACKPROTECTOR_REGULAR=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_SMP=y +CONFIG_SCHED_MC=y +CONFIG_SCHED_SMT=y +CONFIG_NR_CPUS=8 +CONFIG_PREEMPT=y +CONFIG_DEFAULT_MMAP_MIN_ADDR=32768 +CONFIG_TRANSPARENT_HUGEPAGE=y +CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y +CONFIG_CMDLINE="console=ttyAMA0 earlyprintk=pl011,0x1c090000 debug user_debug=31 loglevel=9 root=/dev/vda" +CONFIG_CMDLINE_FORCE=y +CONFIG_BINFMT_MISC=y +CONFIG_CPU_IDLE=y +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_ARM_BIG_LITTLE_CPUFREQ=y +CONFIG_ARM_DT_BL_CPUFREQ=y +CONFIG_ARM_SPCI_CPUFREQ=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_XFRM_USER=y +CONFIG_NET_KEY=y +CONFIG_NET_KEY_MIGRATE=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_IP_PNP_RARP=y +CONFIG_SYN_COOKIES=y +CONFIG_NETWORK_PHY_TIMESTAMPING=y +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_VEXPRESS_CONFIG=y +CONFIG_CONNECTOR=m +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_NBD=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=65536 +CONFIG_VIRTIO_BLK=y +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +CONFIG_BLK_DEV_DM=y +CONFIG_NETDEVICES=y +CONFIG_STMMAC_ETH=m +CONFIG_INPUT_EVDEV=y +CONFIG_INPUT_MISC=y +CONFIG_INPUT_UINPUT=y +CONFIG_SERIO_AMBAKMI=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +CONFIG_SERIAL_OF_PLATFORM=y +CONFIG_VIRTIO_CONSOLE=y +CONFIG_I2C=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_DESIGNWARE_PLATFORM=y +CONFIG_GPIOLIB=y +CONFIG_GPIO_SYSFS=y +CONFIG_POWER_RESET_VEXPRESS=y +CONFIG_FB=y +CONFIG_FB_ARMCLCD=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_LOGO=y +CONFIG_USB_HIDDEV=y +CONFIG_USB=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_HCD_SYNOPSYS=y +CONFIG_USB_OHCI_HCD=y +CONFIG_NOP_USB_XCEIV=y +CONFIG_USB_ULPI=y +CONFIG_USB_DUMMY_HCD=m +CONFIG_USB_G_SERIAL=m +CONFIG_MMC=y +CONFIG_MMC_ARMMMCI=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_ONESHOT=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_BACKLIGHT=y +CONFIG_LEDS_TRIGGER_CPU=y +CONFIG_LEDS_TRIGGER_GPIO=y +CONFIG_SWITCH=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_PL031=y +CONFIG_VIRTIO_BALLOON=y +CONFIG_VIRTIO_MMIO=y +CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y +CONFIG_COMMON_CLK_VERSATILE=y +CONFIG_CLK_SP810=y +CONFIG_CLK_VEXPRESS_OSC=y +CONFIG_COMMON_CLK_SCPI=y +CONFIG_MAILBOX=y +CONFIG_ARM_SCPI_PROTOCOL=y +CONFIG_EXT4_FS=y +CONFIG_EXT4_FS_SECURITY=y +CONFIG_BTRFS_FS=m +CONFIG_QFMT_V2=y +CONFIG_AUTOFS4_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_HUGETLBFS=m +CONFIG_ECRYPT_FS=m +CONFIG_CRAMFS=m +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_ISO8859_1=y +CONFIG_VIRTUALIZATION=y +CONFIG_KVM=y +CONFIG_DYNAMIC_DEBUG=y +CONFIG_DEBUG_INFO=y +CONFIG_MAGIC_SYSRQ=y +CONFIG_SCHEDSTATS=y +CONFIG_TIMER_STATS=y +CONFIG_FUNCTION_TRACER=y +CONFIG_STRICT_DEVMEM=y +CONFIG_SECURITY=y +CONFIG_SECURITY_NETWORK_XFRM=y +CONFIG_LSM_MMAP_MIN_ADDR=0 + diff --git a/board/synopsys/vdk/readme.txt b/board/synopsys/vdk/readme.txt new file mode 100644 index 00000000..98046473 --- /dev/null +++ b/board/synopsys/vdk/readme.txt @@ -0,0 +1,65 @@ +Synopsys VDK Software Development Platform + +Intro +===== + +The Virtualizer Development Kit (VDK) Family for ARM Cortex Products +consists of a set of virtual prototypes that provide a virtualizer for +the ARM core variants. The VDK is a standalone package that runs on an +host computer. + +Buildroot will generate the kernel image and a minimal root filesystem. + +How to build it +=============== + +Configure Buildroot +------------------- + +Configuring Buildroot is pretty simple, just execute: + + $ make snps_aarch64_vdk_defconfig + +Build the rootfs and kernel +--------------------------- + +Note: you will need to have access to the network, since Buildroot will +download the packages' sources. + +You may now build your rootfs with: + + $ make + +(This may take a while) + +Result of the build +------------------- + +After building, you should obtain this tree: + + output/images/ + -- rootfs.ext2 + -- Image + +Installing your rootfs and Image +================================ + +Now copy the content of the output/images folder to the VDK' skins +folder: + + $ cp rootfs.ext2 Image /skins/Vanilla-Cortex/ARMv8 + + +Starting the VDK +================================ + +Go the VDK' installation root and execute the 'start' script: + + $ cd + $ ./start.sh + +The VP Explorer application will be executed, starting the simulation +automatically. + +For more information about Synopsys' VDK please check: +http://www.synopsys.com/Prototyping/VirtualPrototyping/Pages/default.aspx diff --git a/board/technexion/imx6ulpico/readme.txt b/board/technexion/imx6ulpico/readme.txt new file mode 100644 index 00000000..7eab3f6b --- /dev/null +++ b/board/technexion/imx6ulpico/readme.txt @@ -0,0 +1,70 @@ +***************************** +Technexion i.MX6UL Pico board +***************************** + +This file documents the Buildroot support for the Technexion i.MX6UL Pico board. + +Build +===== + +First, configure Buildroot for the i.MX6UL Pico board: + + make imx6ulpico_defconfig + +Build all components: + + make + +You will find in output/images/ the following files: + - imx6ul-pico-hobbit.dtb + - rootfs.ext4 + - rootfs.tar + - sdcard.img + - u-boot.imx + - zImage + +Create a bootable SD card +========================= + +In the U-Boot prompt lauch: + +=> ums 0 mmc 0 + +This will mount the eMMC content in the host PC as a mass storage device. + +To determine the device associated to the eMMC card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on the eMMC card. Launch the following +command as root: + + dd if=output/images/sdcard.img of=/dev/ + +*** WARNING! This will destroy all the card content. Use with care! *** + +For details about the medium image layout, see the definition in +board/freescale/common/imx/genimage.cfg.template. + +Boot the i.MX6UL Pico board +========================= + +To boot your newly created system: +- put a micro USB cable into the Debug USB Port and connect using a terminal + emulator at 115200 bps, 8n1; +- power on the board. + +Using Wifi +========== + +# modprobe brcmfmac +# iwconfig wlan0 essid ACCESSPOINTNAME +# wpa_passphrase ACCESSPOINTNAME > /etc/wpa.conf +(enter the wifi password and press enter) +# wpa_supplicant -Dwext -iwlan0 -c /etc/wpa.conf & +# udhcpc -i wlan0 +# ping buildroot.org + +Enjoy! diff --git a/board/technexion/imx6ulpico/rootfs_overlay/lib/firmware/brcm/brcmfmac4339-sdio.txt b/board/technexion/imx6ulpico/rootfs_overlay/lib/firmware/brcm/brcmfmac4339-sdio.txt new file mode 100644 index 00000000..4716c7ef --- /dev/null +++ b/board/technexion/imx6ulpico/rootfs_overlay/lib/firmware/brcm/brcmfmac4339-sdio.txt @@ -0,0 +1,102 @@ +# Sample NVRAM for BCM94339 WLCSP with eTR,iPA, and eLNA. +sromrev=11 +boardrev=0x1100 +boardtype=0x06c9 +boardflags=0x10081401 +boardflags2=0x00000000 +boardflags3=0x08001188 +#boardnum=57410 +macaddr=00:90:4c:c5:12:38 +ccode=0 +regrev=0 +antswitch=0 +pdgain2g=7 +pdgain5g=7 +tworangetssi2g=0 +tworangetssi5g=0 +vendid=0x14e4 +devid=0x43ae +manfid=0x2d0 +#prodid=0x052e +nocrc=1 +otpimagesize=502 +xtalfreq=37400 +extpagain2g=2 +pdetrange2g=2 +extpagain5g=2 +pdetrange5g=2 +rxgains2gelnagaina0=2 +rxgains2gtrisoa0=6 +rxgains2gtrelnabypa0=1 +rxgains5gelnagaina0=4 +rxgains5gtrisoa0=4 +rxgains5gtrelnabypa0=1 +rxchain=1 +txchain=1 +aa2g=1 +aa5g=1 +tssipos5g=0 +tssipos2g=0 +pa2ga0=0xFF47,0x17B5,0xFD2B +pa2gccka0=0xFF5F,0x1B46,0xFCCC +pa5ga0=0xff54,0x16ec,0xfd45,0xff52,0x16a1,0xfd4d,0xff46,0x15b7,0xfd5a,0xff56,0x156d,0xfd79 +pa5gbw40a0=0xff59,0x17ca,0xfd30,0xff42,0x163d,0xfd4b,0xff31,0x152e,0xfd55,0xff60,0x16d8,0xfd54 +pa5gbw80a0=0xff56,0x1740,0xfd3f,0xff50,0x1738,0xfd3d,0xff4d,0x16b4,0xfd42,0xff58,0x1634,0xfd60 +# Default Target Power for 2G -- 17dBm(11)/14dBm(54)/13dBm(MCS7)/12dBm(MCS8)/12dBm(MCS9) +maxp2ga0=74 +maxp5ga0=74,74,74,74 +cckbw202gpo=0x0000 +cckbw20ul2gpo=0x0000 +mcsbw202gpo=0xaa888888 +mcsbw402gpo=0xaa888888 +dot11agofdmhrbw202gpo=0x6666 +ofdmlrbw202gpo=0x0066 +tssifloor2g=500 +# Default Target Power for 5G -- 14dBm(54)/13dBm(MCS7)/12dBm(MCS8)/12dBm(MCS9) +mcsbw205glpo=0xaa866666 +mcsbw405glpo=0xaa866666 +mcsbw805glpo=0xaa866666 +mcsbw205gmpo=0xaa866666 +mcsbw405gmpo=0xaa866666 +mcsbw805gmpo=0xaa866666 +mcsbw205ghpo=0xaa866666 +mcsbw405ghpo=0xaa866666 +mcsbw805ghpo=0xaa866666 +mcslr5glpo=0x0000 +mcslr5gmpo=0x0000 +mcslr5ghpo=0x0000 +sb20in40hrpo=0x0 +sb20in80and160hr5glpo=0x0 +sb40and80hr5glpo=0x0 +sb20in80and160hr5gmpo=0x0 +sb40and80hr5gmpo=0x0 +sb20in80and160hr5ghpo=0x0 +sb40and80hr5ghpo=0x0 +sb20in40lrpo=0x0 +sb20in80and160lr5glpo=0x0 +sb40and80lr5glpo=0x0 +sb20in80and160lr5gmpo=0x0 +sb40and80lr5gmpo=0x0 +sb20in80and160lr5ghpo=0x0 +sb40and80lr5ghpo=0x0 +dot11agduphrpo=0x0 +dot11agduplrpo=0x0 +phycal_tempdelta=25 +cckdigfilttype=2 +swctrlmap_5g=0x00080008,0x00500010,0x00100008,0x000000,0x078 +swctrlmap_2g=0x00010001,0x00220002,0x00020001,0x042202,0x1ff +swctrlmapext_5g=0x00000000,0x00000000,0x00000000,0x000000,0x000 +swctrlmapext_2g=0x00000000,0x00000000,0x00000000,0x000000,0x000 +# +#GPIO 0 for SDIO HW OOB interruption +#muxenab=0x10 +#sd_gpout=0 +#sd_oobonly=1 +# +rssicorrnorm_c0=-2,0 +rssicorrnorm5g_c0=3,5,2,3,4,2,2,3,1,2,3,1 +## ED threshold level to address the new ETSI requirement - 10/31/2013 +ed_thresh2g=-77 +ed_thresh5g=-77 +# +paparambwver=1 diff --git a/board/technexion/imx7dpico/readme.txt b/board/technexion/imx7dpico/readme.txt new file mode 100644 index 00000000..53197d45 --- /dev/null +++ b/board/technexion/imx7dpico/readme.txt @@ -0,0 +1,124 @@ +**************************** +Technexion i.MX7D Pico board +**************************** + +This file documents the Buildroot support for the Technexion i.MX7D Pico board. + +Build +===== + +First, configure Buildroot for the i.MX7D Pico board: + + make imx7dpico_defconfig + +Build all components: + + make + +You will find in output/images/ the following files: + - imx7d-pico.dtb + - rootfs.ext4 + - rootfs.tar + - sdcard.img + - u-boot-dtb.img + - SPL + - zImage + +Flash U-Boot and SPL +===== + +Note: This method is convenient for development purposes. +If the eMMC has already a U-Boot flashed with DFU support then +the user can go to step 2 below in order to update U-Boot. + +Put pico board in USB download mode (refer to the PICO-iMX7D Quick Start Guide +page 3) + +Connect a USB to serial adapter between the host PC and pico. + +Connect a USB cable between the OTG pico port and the host PC. + +Note: Some computers may be a bit strict with USB current draw and will +shut down their ports if the draw is too high. The solution for that is +to use an externally powered USB hub between the board and the host computer. + +Open a terminal program such as minicom. + +Copy SPL and u-boot-dtb.img to the imx_usb_loader folder. + +Load the SPL binary via USB: + +$ sudo ./imx_usb SPL + +Load the u-boot-dtb.img binary via USB: + +$ sudo ./imx_usb u-boot-dtb.img + +Then U-Boot starts and its messages appear in the console program. + +Use the default environment variables: + +=> env default -f -a +=> saveenv + +Run the DFU agent so we can flash the new images using dfu-util tool: + +=> dfu 0 mmc 0 + +Flash SPL and u-boot-dtb.img into the eMMC running the following commands on a PC: + +$ sudo dfu-util -D SPL -a spl + +$ sudo dfu-util -D u-boot-dtb.img -a u-boot + +Remove power from the pico board. + +Put pico board into normal boot mode. + +Power up the board and the new updated U-Boot should boot from eMMC. + +Flash the eMMC +============== + +In the U-Boot prompt lauch: + +=> ums 0 mmc 0 + +This will mount the eMMC content in the host PC as a mass storage device. + +To determine the device associated to the eMMC card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on the eMMC card. Launch the following +command as root: + + dd if=output/images/sdcard.img of=/dev/ + +*** WARNING! This will destroy all the eMMC content. Use with care! *** + +For details about the medium image layout, see the definition in +board/freescale/common/imx/genimage.cfg.template. + +Boot the i.MX7D Pico board +========================== + +To boot your newly created system: +- put a micro USB cable into the Debug USB Port and connect using a terminal + emulator at 115200 bps, 8n1; +- power on the board. + +Using Wifi +========== + +# modprobe brcmfmac +# iwconfig wlan0 essid ACCESSPOINTNAME +# wpa_passphrase ACCESSPOINTNAME > /etc/wpa.conf +(enter the wifi password and press enter) +# wpa_supplicant -Dwext -iwlan0 -c /etc/wpa.conf & +# udhcpc -i wlan0 +# ping buildroot.org + +Enjoy! diff --git a/board/technexion/imx7dpico/rootfs_overlay/boot/extlinux/extlinux.conf b/board/technexion/imx7dpico/rootfs_overlay/boot/extlinux/extlinux.conf new file mode 100644 index 00000000..4824aff0 --- /dev/null +++ b/board/technexion/imx7dpico/rootfs_overlay/boot/extlinux/extlinux.conf @@ -0,0 +1,4 @@ +Label imx7d-pico-buildroot + kernel /boot/zImage + devicetree /boot/imx7d-pico-pi.dtb + append root=PARTUUID=${uuid} rootwait rw console=${console},${baudrate} \ No newline at end of file diff --git a/board/technexion/imx7dpico/rootfs_overlay/lib/firmware/brcm/brcmfmac4339-sdio.txt b/board/technexion/imx7dpico/rootfs_overlay/lib/firmware/brcm/brcmfmac4339-sdio.txt new file mode 100644 index 00000000..1ddd9295 --- /dev/null +++ b/board/technexion/imx7dpico/rootfs_overlay/lib/firmware/brcm/brcmfmac4339-sdio.txt @@ -0,0 +1,99 @@ +#AP6335_NVRAM_V1.5_03112014 +NVRAMRev=$Rev: 410316 $ +sromrev=11 +boardrev=0x1203 +boardtype=0x06c5 +boardflags=0x00000c01 +boardflags2=0x00002000 +boardflags3=0x101188 +macaddr=00:90:4c:c5:12:38 +ccode=0 +regrev=0 +antswitch=0 +pdgain2g=7 +pdgain5g=7 +tworangetssi2g=0 +tworangetssi5g=0 +femctrl=7 +pcieingress_war=15 +vendid=0x14e4 +devid=0x43ae +manfid=0x2d0 +nocrc=1 +otpimagesize=502 +xtalfreq=37400 +extpagain2g=2 +pdetrange2g=2 +extpagain5g=2 +pdetrange5g=2 +rxgains2gelnagaina0=0 +rxgains2gtrisoa0=7 +rxgains2gtrelnabypa0=0 +rxgains5gelnagaina0=0 +rxgains5gtrisoa0=11 +rxgains5gtrelnabypa0=0 +rxchain=1 +txchain=1 +aa2g=1 +aa5g=1 +tssipos5g=0 +tssipos2g=0 +pa2ga0=-161,6269,-723 +pa2gccka0=-116,7568,-852 +pa5ga0=0xFF61,0x163C,0xFD55,0xFF5D,0x1671,0xFD4F,0xFF5F,0x16CA,0xFD45,0xFF60,0x1676,0xFD4D +pa5gbw40a0=0xFF61,0x163C,0xFD55,0xFF5D,0x1671,0xFD4F,0xFF5F,0x16CA,0xFD45,0xFF60,0x1676,0xFD4D +pa5gbw80a0=0xFF61,0x163C,0xFD55,0xFF5D,0x1671,0xFD4F,0xFF5F,0x16CA,0xFD45,0xFF60,0x1676,0xFD4D +pdoffset40ma0=0 +pdoffset80ma0=0 +pdoffsetcckma0=0 +maxp2ga0=75 +maxp5ga0=64,64,72,72 +cckbw202gpo=0x0000 +cckbw20ul2gpo=0x0 +mcsbw202gpo=0x99445533 +mcsbw402gpo=0x99775533 +dot11agofdmhrbw202gpo=0x2233 +ofdmlrbw202gpo=0x0000 +tssifloor2g=500 +mcsbw205glpo=0x66333330 +mcsbw405glpo=0x66665530 +mcsbw805glpo=0xAA555530 +mcsbw1605glpo=0x99555530 +mcsbw205gmpo=0x99BB5530 +mcsbw405gmpo=0x99BB5530 +mcsbw805gmpo=0xEE555530 +mcsbw1605gmpo=0x99555530 +mcsbw205ghpo=0x99995530 +mcsbw405ghpo=0x99BB5530 +mcsbw805ghpo=0xEE555530 +mcsbw1605ghpo=0x99555530 +mcslr5glpo=0x0000 +mcslr5gmpo=0x0000 +mcslr5ghpo=0x0000 +sb20in40hrrpo=0x0 +sb20in80and160hr5glpo=0x0 +sb40and80hr5glpo=0x0 +sb20in80and160hr5gmpo=0x0 +sb40and80hr5gmpo=0x0 +sb20in80and160hr5ghpo=0x0 +sb40and80hr5ghpo=0x0 +sb20in40lrpo=0x0 +sb20in80and160lr5glpo=0x0 +sb40and80lr5glpo=0x0 +sb20in80and160lr5gmpo=0x0 +sb40and80lr5gmpo=0x0 +sb20in80and160lr5ghpo=0x0 +sb40and80lr5ghpo=0x0 +dot11agduphrpo=0x0 +dot11agduplrpo=0x0 +phycal_tempdelta=25 +cckdigfilttype=2 +pacalidx2g=65 +dacrate2g=160 +swctrlmap_5g=0x00000008,0x00000010,0x00000008,0x000000,0x038 +swctrlmap_2g=0x00000001,0x00000002,0x00000001,0x040002,0x0ff +swctrlmapext_5g=0x00000000,0x00000000,0x00000000,0x000000,0x000 +swctrlmapext_2g=0x00000000,0x00000000,0x00000000,0x000000,0x000 +rssicorrnorm_c0=3,3 +rssicorrnorm5g_c0=2,3,4,2,3,3,0,1,2,0,1,2 +muxenab=0x10 diff --git a/board/technexion/imx8mmpico/readme.txt b/board/technexion/imx8mmpico/readme.txt new file mode 100644 index 00000000..3095d67b --- /dev/null +++ b/board/technexion/imx8mmpico/readme.txt @@ -0,0 +1,96 @@ +********************************* +Technexion i.MX8M Mini Pico board +********************************* + +This file documents the Buildroot support for the Technexion i.MX8M +Mini Pico board. The Pico i.MX8M Mini system-on-module [1] is present +in development kits like the Pico Pi i.MX8M Mini [2]. + +Build +===== + +First, configure Buildroot for the i.MX8M Mini Pico board: + + make imx8mmpico_defconfig + +Build all components: + + make + +You will find in output/images/ the following files: + - bl31.bin + - boot.vfat + - Image + - imx8-boot-sd.bin + - imx8mm-pico-pi.dtb + - imx8mm-pico-pi-ili9881c.dtb + - imx8mm-pico-pi-sn65dsi84-hj070na.dtb + - lpddr4_pmu_train_fw.bin + - rootfs.ext2 + - rootfs.ext4 + - sdcard.img + - u-boot.imx + +Flashing sdcard.img on the eMMC +=============================== + +i.MX8M Mini Pico board does not have a SD card slot. The storage is an +eMMC. An easy way to flash the eMMC is to use the u-boot ums +command. The boards are sold pre-flashed with such a u-boot. It is +assumed here that the board has already a working u-boot on eMMC and +jumpers are set to boot on eMMC. See [3]. + +Jumper configuration for eMMC boot: +J1: jumper on pins 4 and 6. +J2: jumper on pins 2 and 4. + +In case the board was flashed with a wrong u-boot, or the eMMC is +erased, u-boot can be loaded by USB Serial Download boot mode, using +imx-usb-loader. See [3] and [4]. + +For flashing: +- Plug the micro USB cable from the Debug USB Port, to your computer +- Plug the USB Type C to your computer, this will power up the board + +In the U-Boot prompt launch: + +=> ums 0 mmc 1 + +This will mount the eMMC content in the host PC as a mass storage device. + +To determine the device associated to the eMMC card have a look in the +/proc/partitions file: + + cat /proc/partitions + +If your system automatically mount some device partitions, make sure +to unmount them. + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on the eMMC. Launch the following +command as root: + + dd if=output/images/sdcard.img of=/dev/ + +*** WARNING! This will destroy all the eMMC content. Use with care! *** + +This operation can take several minutes, depending on the image +size. When tested, a 2MB/s transfer rate was observed. + +For details about the medium image layout, see the definition in +board/freescale/common/imx/genimage.cfg.template. + +Boot the i.MX8M Mini Pico board +=============================== + +To boot your newly created system: +- put a micro USB cable into the Debug USB Port and connect using a terminal + emulator at 115200 bps, 8n1; +- power on the board, with USB Type C connector. + +Enjoy! + +[1]. https://www.technexion.com/products/system-on-modules/pico/pico-compute-modules/detail/PICO-IMX8M-MINI +[2]. https://www.technexion.com/products/pico-evaluation-kits/detail/PICOPIIMX8MM1GDEV +[3]. https://www.technexion.com/support/knowledgebase/boot-configuration-settings-for-pico-baseboards/ +[4]. https://www.technexion.com/support/knowledgebase/loading-bootable-software-images-onto-the-emmc-of-picosom-on-pico-pi/ diff --git a/board/technexion/imx8mpico/readme.txt b/board/technexion/imx8mpico/readme.txt new file mode 100644 index 00000000..1a04e445 --- /dev/null +++ b/board/technexion/imx8mpico/readme.txt @@ -0,0 +1,95 @@ +**************************** +Technexion i.MX8M Pico board +**************************** + +This file documents the Buildroot support for the Technexion i.MX8M +Pico board. The Pico i.MX8M system-on-module [1] is present in +development kits like the Pico Pi i.MX8M [2]. + +Build +===== + +First, configure Buildroot for the i.MX8M Pico board: + + make imx8mpico_defconfig + +Build all components: + + make + +You will find in output/images/ the following files: + - bl31.bin + - boot.vfat + - Image + - imx8-boot-sd.bin + - lpddr4_pmu_train_fw.bin + - pico-8m-dcss-ili9881c.dtb + - pico-8m.dtb + - rootfs.ext4 + - sdcard.img + - signed_hdmi_imx8m.bin + - u-boot.imx + +Flashing sdcard.img on the eMMC +=============================== + +i.MX8M Pico board does not have a SD card slot. The storage is an +eMMC. An easy way to flash the eMMC is to use the u-boot ums +command. The boards are sold pre-flashed with such a u-boot. It is +assumed here that the board has already a working u-boot on eMMC and +jumpers are set to boot on eMMC. See [3]. + +Jumper configuration for eMMC boot: +J1: jumper on pins 4 and 6. +J2: jumper on pins 2 and 4. + +In case the board was flashed with a wrong u-boot, or the eMMC is +erased, u-boot can be loaded by USB Serial Download boot mode, using +imx-usb-loader. See [3] and [4]. + +For flashing: +- Plug the micro USB cable from the Debug USB Port, to your computer +- Plug the USB Type C to your computer, this will power up the board + +In the U-Boot prompt launch: + +=> ums 0 mmc 0 + +This will mount the eMMC content in the host PC as a mass storage device. + +To determine the device associated to the eMMC card have a look in the +/proc/partitions file: + + cat /proc/partitions + +If your system automatically mount some device partitions, make sure +to unmount them. + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on the eMMC. Launch the following +command as root: + + dd if=output/images/sdcard.img of=/dev/ + +*** WARNING! This will destroy all the eMMC content. Use with care! *** + +This operation can take several minutes, depending on the image +size. When tested, a 2MB/s transfer rate was observed. + +For details about the medium image layout, see the definition in +board/freescale/common/imx/genimage.cfg.template. + +Boot the i.MX8M Pico board +========================== + +To boot your newly created system: +- put a micro USB cable into the Debug USB Port and connect using a terminal + emulator at 115200 bps, 8n1; +- power on the board, with USB Type C connector. + +Enjoy! + +[1]. https://www.technexion.com/products/system-on-modules/pico/pico-compute-modules/detail/PICO-IMX8M +[2]. https://www.technexion.com/products/system-on-modules/pico-evaluation-kits/detail/PICO-PI-IMX8M-BASIC +[3]. https://www.technexion.com/support/knowledgebase/boot-configuration-settings-for-pico-baseboards/ +[4]. https://www.technexion.com/support/knowledgebase/loading-bootable-software-images-onto-the-emmc-of-picosom-on-pico-pi/ diff --git a/board/technologic/ts4900/genimage.cfg b/board/technologic/ts4900/genimage.cfg new file mode 100644 index 00000000..7e580eb2 --- /dev/null +++ b/board/technologic/ts4900/genimage.cfg @@ -0,0 +1,10 @@ +image sdcard.img { + hdimage { + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext2" + size = 256M + } +} diff --git a/board/technologic/ts4900/post-image.sh b/board/technologic/ts4900/post-image.sh new file mode 100755 index 00000000..cb966d88 --- /dev/null +++ b/board/technologic/ts4900/post-image.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# +# Copyright (C) 2015-2016 Savoir-Faire Linux +# Post image generation script. + +BOARD_DIR="$(dirname $0)" +GENIMAGE_CFG=$BOARD_DIR/genimage.cfg +GENIMAGE_TMP=$BUILD_DIR/.genimage_tmp + +rm -rf $GENIMAGE_TMP + +${HOST_DIR}/bin/genimage \ + --config ${GENIMAGE_CFG} \ + --rootpath $TARGET_DIR \ + --tmppath $GENIMAGE_TMP \ + --inputpath $BINARIES_DIR \ + --outputpath $BINARIES_DIR diff --git a/board/technologic/ts4900/readme.txt b/board/technologic/ts4900/readme.txt new file mode 100644 index 00000000..679454fd --- /dev/null +++ b/board/technologic/ts4900/readme.txt @@ -0,0 +1,52 @@ +Technologic Systems TS-4900 +=========================== + +This document explains how to set up a basic Buildroot system for the +Technologic Systems TS-4900 System on Module. + +The TS-4900 is a TS-SOCKET macrocontroller board based on the +Freescale i.MX6 Single or Quad Core ARM Cortex-A9 CPU clocked at +1GHz. The TS-4900 features Gigabit Ethernet, SATA II Port, PCI Express +Bus, high speed USB host and device (OTG), and microSD card. +More details on the board here: + http://wiki.embeddedarm.com/wiki/TS-4900 + +The TS-4900 is not currently supported by mainline Linux, so a +Technologic Systems Linux is used based on Linux 4.1. +The default U-boot configuration flashed scans the SD card to find the +0x83 partition type, corresponding to the rootfs. Then it will load +both uImage and dts from the /boot directory. +To build the default configuration you only have to: + + $ make ts4900_defconfig + $ make + +The output looks like: +output/images/ +├── imx6q-ts4900.dtb +├── rootfs.ext2 +├── rootfs.tar +├── sdcard.img +└── uImage + +Since both the uImage and the dts are contained in the /boot +directory, the provided post-image script generates an image file +containing only one partition for the rootfs: + + $ fdisk output/images/sdcard.img + Device Boot Start End Blocks Id System +output/images/sdcard.img1 1 524288 262144 83 Linux + +This image can be directly written to an SD card. + + $ sudo dd if=output/images/sdcard.img of=/dev/mmcblk0 + +In order to test the image on TS-4900 board, a TS baseboard, such as +the TS-9xxx series, is needed to provide power, console header, RJ45 +connector etc. + +The bootloader comes pre-flashed on the board on an SPI flash. Since +updating the bootloader is risky and not trivial, it is not included +in the Buildroot defconfig. Refer to +http://wiki.embeddedarm.com/wiki/TS-4900#U-Boot for details on which +U-Boot config to use and how to flash it. diff --git a/board/technologic/ts5500/fs-overlay/boot/syslinux/syslinux.cfg b/board/technologic/ts5500/fs-overlay/boot/syslinux/syslinux.cfg new file mode 100644 index 00000000..64f81877 --- /dev/null +++ b/board/technologic/ts5500/fs-overlay/boot/syslinux/syslinux.cfg @@ -0,0 +1,9 @@ +SERIAL 1 115200 +CONSOLE 0 + +DEFAULT linux + +LABEL linux + SAY Now booting the kernel from SYSLINUX... + LINUX /boot/bzImage + APPEND console=ttyS1,115200n8 root=/dev/sda1 rootfstype=ext4 rw diff --git a/board/technologic/ts5500/linux-4.14.config b/board/technologic/ts5500/linux-4.14.config new file mode 100644 index 00000000..eb81596e --- /dev/null +++ b/board/technologic/ts5500/linux-4.14.config @@ -0,0 +1,111 @@ +# CONFIG_CROSS_MEMORY_ATTACH is not set +CONFIG_PARTITION_ADVANCED=y +# CONFIG_X86_EXTENDED_PLATFORM is not set +CONFIG_MELAN=y +CONFIG_X86_GENERIC=y +CONFIG_X86_REBOOTFIXUPS=y +CONFIG_NOHIGHMEM=y +# CONFIG_COMPACTION is not set +# CONFIG_BOUNCE is not set +# CONFIG_RELOCATABLE is not set +# CONFIG_SUSPEND is not set +# CONFIG_ACPI is not set +CONFIG_CPU_IDLE=y +CONFIG_TS5500=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_DIAG is not set +# CONFIG_IPV6 is not set +# CONFIG_WIRELESS is not set +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +# CONFIG_BLK_DEV is not set +CONFIG_BLK_DEV_SD=y +# CONFIG_SCSI_LOWLEVEL is not set +CONFIG_ATA=y +# CONFIG_ATA_VERBOSE_ERROR is not set +# CONFIG_SATA_PMP is not set +CONFIG_ATA_GENERIC=y +CONFIG_PATA_LEGACY=y +CONFIG_NETDEVICES=y +# CONFIG_NET_CORE is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_NET_VENDOR_ADAPTEC is not set +# CONFIG_NET_VENDOR_ALTEON is not set +# CONFIG_NET_VENDOR_AMD is not set +# CONFIG_NET_VENDOR_ARC is not set +# CONFIG_NET_VENDOR_ATHEROS is not set +# CONFIG_NET_VENDOR_BROADCOM is not set +# CONFIG_NET_VENDOR_BROCADE is not set +# CONFIG_NET_VENDOR_CHELSIO is not set +# CONFIG_NET_VENDOR_CISCO is not set +CONFIG_NET_TULIP=y +CONFIG_DM9102=y +# CONFIG_NET_VENDOR_DLINK is not set +# CONFIG_NET_VENDOR_EMULEX is not set +# CONFIG_NET_VENDOR_EXAR is not set +# CONFIG_NET_VENDOR_HP is not set +# CONFIG_NET_VENDOR_INTEL is not set +# CONFIG_NET_VENDOR_MARVELL is not set +# CONFIG_NET_VENDOR_MELLANOX is not set +# CONFIG_NET_VENDOR_MICREL is not set +# CONFIG_NET_VENDOR_MYRI is not set +# CONFIG_NET_VENDOR_NATSEMI is not set +# CONFIG_NET_VENDOR_NVIDIA is not set +# CONFIG_NET_VENDOR_OKI is not set +# CONFIG_NET_PACKET_ENGINE is not set +# CONFIG_NET_VENDOR_QLOGIC is not set +# CONFIG_NET_VENDOR_REALTEK is not set +# CONFIG_NET_VENDOR_RDC is not set +# CONFIG_NET_VENDOR_SEEQ is not set +# CONFIG_NET_VENDOR_SILAN is not set +# CONFIG_NET_VENDOR_SIS is not set +# CONFIG_NET_VENDOR_SMSC is not set +# CONFIG_NET_VENDOR_STMICRO is not set +# CONFIG_NET_VENDOR_SUN is not set +# CONFIG_NET_VENDOR_TEHUTI is not set +# CONFIG_NET_VENDOR_TI is not set +# CONFIG_NET_VENDOR_VIA is not set +# CONFIG_NET_VENDOR_WIZNET is not set +CONFIG_PHYLIB=y +CONFIG_DAVICOM_PHY=y +# CONFIG_WLAN is not set +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_SERIO is not set +CONFIG_SERIAL_8250=y +# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set +CONFIG_SERIAL_8250_CONSOLE=y +# CONFIG_HW_RANDOM is not set +CONFIG_GPIOLIB=y +CONFIG_GPIO_TS5500=y +CONFIG_SENSORS_MAX197=y +CONFIG_WATCHDOG=y +CONFIG_SC520_WDT=y +CONFIG_USB=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_SERIAL=y +CONFIG_USB_SERIAL_FTDI_SIO=y +CONFIG_USB_SERIAL_PL2303=y +# CONFIG_X86_PLATFORM_DEVICES is not set +# CONFIG_IOMMU_SUPPORT is not set +# CONFIG_DMIID is not set +CONFIG_EXT4_FS=y +# CONFIG_DNOTIFY is not set +# CONFIG_INOTIFY_USER is not set +CONFIG_VFAT_FS=y +CONFIG_TMPFS=y +# CONFIG_MISC_FILESYSTEMS is not set +# CONFIG_NETWORK_FILESYSTEMS is not set +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_850=y +CONFIG_NLS_ISO8859_1=y +CONFIG_NLS_ISO8859_15=y +CONFIG_NLS_UTF8=y +# CONFIG_VIRTUALIZATION is not set +CONFIG_XZ_DEC=y diff --git a/board/technologic/ts5500/readme.txt b/board/technologic/ts5500/readme.txt new file mode 100644 index 00000000..1e73ab3e --- /dev/null +++ b/board/technologic/ts5500/readme.txt @@ -0,0 +1,52 @@ +Technologic Systems TS-5x00 SBCs +================================ + +This document explains how to set up a basic Buildroot system for the +Technologic Systems TS-5x00 serie of x86-based Single Board Computers. + +TS-5x00 Single Board Computers are based on the AMD Elan520 processor. For more +information please have a look at http://wiki.embeddedarm.com/wiki/#AMD + +The kernel configuration works for any AMD Elan520-based SBCs, but the support +is enhanced for the TS-5500 and TS-5400 models (on-board devices registration +and additional sysfs attributes under /sys/devices/platform/). + +To build the default configuration you only have to: + + $ make ts5500_defconfig + $ make + +You will need a Compact Flash card of sufficient size and the first or only +partition configured as Linux type, with the bootable flag. + +You can transfer the system on the partition then optionally resize it with: + + # dd if=output/images/rootfs.ext4 of=/dev/sdX1 + # resize2fs /dev/sdX1 + +Or you can just extract the root filesystem to the partition with: + + # mount /dev/sdX1 /mnt + # tar -pxf output/images/rootfs.tar -C /mnt + # umount /mnt + +To install the bootloader, you will need to copy the MBR: + + # cat output/images/syslinux/mbr.bin > /dev/sdX + +Then install SYSLINUX in the mounted partition: + + # mount /dev/sdX1 /mnt + # output/host/sbin/extlinux --install /mnt/boot/syslinux + # umount /mnt + +IMPORTANT: In order for the board to boot the Compact Flash with a recent +config, the BIOS must use Logical Block Addressing (LBA). You can do it by +choosing "Ide 0: AUTOCONFIG, LBA" under "IDE DRIVE GEOMETRY" in the "Basic CMOS +Configuration" screen. Also, don't forget to set the 'active' (or 'bootable') +flag on partition 1. For details about the CMOS setup, please see: +http://wiki.embeddedarm.com/wiki/TS-5500#System_BIOS_Setup_Screens + +Connect a terminal program to the rs232 connector marked "COM2" +with baudrate set to 115200, insert the Compact Flash card into the socket, +power up the board, and enjoy. diff --git a/board/technologic/ts7680/genimage.cfg b/board/technologic/ts7680/genimage.cfg new file mode 100644 index 00000000..70b1dac6 --- /dev/null +++ b/board/technologic/ts7680/genimage.cfg @@ -0,0 +1,14 @@ +image sdcard.img { + hdimage { + } + + partition unused { + size = 512 + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 256M + } +} diff --git a/board/technologic/ts7680/readme.txt b/board/technologic/ts7680/readme.txt new file mode 100644 index 00000000..43d5d135 --- /dev/null +++ b/board/technologic/ts7680/readme.txt @@ -0,0 +1,50 @@ +Technologic Systems TS-7680 SBC +=============================== + +This document explains how to set up a basic Buildroot system for +the Technologic Systems TS-7680 Single Board Computer. + +The TS-7680 SBC is based on the Freescale i.MX286 ARM ARM926EJ-S +running at 454MHz. The TS-7680 features are 10/100 Ethernet ports, +Wi-Fi, microSD card, eMMC, NOR Flash, USB host port, CAN ports, +relays and ADC/DAC. More details on the board here: +https://wiki.embeddedarm.com/wiki/TS-7680 + +The TS-7680 uses a 4.9 Linux kernel provided by Technologic Systems. + +To build the default configuration you only have to run: + + $ make ts7680_defconfig + $ make + +The output looks like: +output/images +├── imx28-ts7680.dtb +├── rootfs.ext2 +├── rootfs.ext4 -> rootfs.ext2 +├── rootfs.tar +├── sdcard.img +└── uImage + +The provided genimage configuration generates an image file containing +two partitions. The first one is unused, but mandatory as the +TS-7680 built-in bootloader loads the Linux uImage from the /boot +directory in the second partition. The second partition contains the +rootfs with the Linux uImage into the /boot directory. + + $ fdisk output/images/sdcard.img + output/images/sdcard.img1 1 1 1 512B 0 Empty + output/images/sdcard.img2 2 524289 524288 256M 83 Linux + +This image can be directly written to an SD card. + + $ sudo dd if=output/images/sdcard.img of=/dev/mmcblk0 + +To boot with Buildroot, insert this SD card on the board, make sure +the SD jumper is present and the U-Boot jumper is not. + +The bootloader comes pre-flashed on the board on an SPI flash. Since +updating the bootloader is risky and not trivial, it is not included +in the Buildroot defconfig. Refer to +https://wiki.embeddedarm.com/wiki/TS-7680#U-Boot for details on +which U-Boot config to use and how to flash it. diff --git a/board/toradex/apalis-imx6/genimage.cfg b/board/toradex/apalis-imx6/genimage.cfg new file mode 100644 index 00000000..fe359bd9 --- /dev/null +++ b/board/toradex/apalis-imx6/genimage.cfg @@ -0,0 +1,15 @@ +# Minimal SD card image for the Toradex Apalis i.MX6 COM +# +# It does not need a boot section for a bootloader since it is booted +# from its internal flash memory (eMMC). + +image sdcard.img { + hdimage { + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext2" + size = 512M + } +} diff --git a/board/toradex/apalis-imx6/post-image.sh b/board/toradex/apalis-imx6/post-image.sh new file mode 100755 index 00000000..2b49f9d3 --- /dev/null +++ b/board/toradex/apalis-imx6/post-image.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +GENIMAGE_CFG="$(dirname $0)/genimage.cfg" +GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp" + +# copy the uEnv.txt to the output/images directory +cp board/toradex/apalis-imx6/uEnv.txt $BINARIES_DIR/uEnv.txt + +rm -rf "${GENIMAGE_TMP}" + +# generate rootfs.img +genimage \ + --rootpath "${TARGET_DIR}" \ + --tmppath "${GENIMAGE_TMP}" \ + --inputpath "${BINARIES_DIR}" \ + --outputpath "${BINARIES_DIR}" \ + --config "${GENIMAGE_CFG}" + +RET=${?} +exit ${RET} diff --git a/board/toradex/apalis-imx6/readme.txt b/board/toradex/apalis-imx6/readme.txt new file mode 100644 index 00000000..feddad64 --- /dev/null +++ b/board/toradex/apalis-imx6/readme.txt @@ -0,0 +1,53 @@ +Toradex Apalis i.MX6 Computer on Module + +Intro +===== + +The Apalis iMX6 is a small form-factor Computer on Module that comes +in both quad core and dual core versions based on Freescale i.MX6Q and +Freescale i.MX6D SoCs respectively. The Cortex A9 quad core and dual +core CPU peaks at 1 GHz for commercial temperature variant, while the +industrial temperature variant has a peak frequency of 800 MHz. + +https://www.toradex.com/computer-on-modules/apalis-arm-family/freescale-imx-6 + +It supports two carrier boards: + +Apalis Evaluation Board +https://www.toradex.com/products/carrier-boards/apalis-evaluation-board + +Ixora Carrier Board +https://www.toradex.com/products/carrier-boards/ixora-carrier-board + +How to build it +=============== + +Configure Buildroot: + + $ make toradex_apalis_imx6_defconfig + +Compile everything and build the rootfs image: + + $ make + +How to boot the image +===================== + +The board only boots from its internal flash memory eMMC, so the +bootloader image should be copied to it, following the procedures +described in Toradex website. + +http://developer.toradex.com/knowledge-base/flashing-linux-on-imx6-modules + +Buildroot prepares a "sdcard.img" in output/images/ with the kernel +image, device tree and a root filesystem, ready to be dumped on an SD +card. + + $ dd if=output/images/sdcard.img of=/dev/sdX bs=1M + +To boot from the SD card, you should change the U-Boot +environment. Since U-Boot is running from internal eMMC, you will need +to access its command line prompt and manually set the necessary +variables to boot from the external SD card. For convenience, you can +use uEnv.txt provided in output/images/ as a reference to create the +necessary U-Boot variables to boot from the SD card. diff --git a/board/toradex/apalis-imx6/uEnv.txt b/board/toradex/apalis-imx6/uEnv.txt new file mode 100644 index 00000000..96ab80cf --- /dev/null +++ b/board/toradex/apalis-imx6/uEnv.txt @@ -0,0 +1,6 @@ +boot_file=zImage +fdt_file=imx6q-apalis_v1_0-ixora.dtb +sdargs=ip=off root=/dev/mmcblk1p1 rw,noatime rootfstype=ext4 rootwait +sddtbload=ext2load mmc 2:1 ${fdt_addr_r} boot/${fdt_file} +sdkernelload=ext2load mmc 2:1 ${kernel_addr_r} boot/${boot_file} +bootcmd=run setup; setenv bootargs ${defargs} ${sdargs} ${setupargs} ${vidargs}; echo Booting from SD card...; run sddtbload; run sdkernelload; bootz ${kernel_addr_r} - ${fdt_addr_r} diff --git a/board/udoo/common/boot.scr.txt b/board/udoo/common/boot.scr.txt new file mode 100644 index 00000000..7acceed0 --- /dev/null +++ b/board/udoo/common/boot.scr.txt @@ -0,0 +1,7 @@ +setenv finduuid "part uuid mmc 0:1 uuid" +run finduuid +run findfdt +setenv bootargs "console=${console} root=PARTUUID=${uuid} rootwait rootfstype=ext4" +load mmc 0:1 ${fdt_addr} boot/${fdtfile} +load mmc 0:1 ${loadaddr} boot/zImage +bootz ${loadaddr} - ${fdt_addr} diff --git a/board/udoo/common/post-build.sh b/board/udoo/common/post-build.sh new file mode 100755 index 00000000..d3f612f8 --- /dev/null +++ b/board/udoo/common/post-build.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +cp $BINARIES_DIR/boot.scr $TARGET_DIR/boot/boot.scr diff --git a/board/udoo/mx6qdl/patches/linux/0000-udoo-disable-usbh1.patch b/board/udoo/mx6qdl/patches/linux/0000-udoo-disable-usbh1.patch new file mode 100644 index 00000000..d151a40d --- /dev/null +++ b/board/udoo/mx6qdl/patches/linux/0000-udoo-disable-usbh1.patch @@ -0,0 +1,26 @@ +[PATCH] ARM: dts: imx6qdl-udoo: Disable usbh1 to avoid kernel hang + +Currently the kernel hangs when USB Host1 is enabled due to the lack of +support for controlling the USB hub clock and GPIO reset line. + +Peter Chen has made several attempts to fix this problem, but his series +has not been applied yet, so better disable USB host1 for now to avoid +the kernel hang. + +Signed-off-by: Fabio Estevam +--- + +diff --git a/arch/arm/boot/dts/imx6qdl-udoo.dtsi b/arch/arm/boot/dts/imx6qdl-udoo.dtsi +index 828dd20cd27d..c9e122865312 100644 +--- a/arch/arm/boot/dts/imx6qdl-udoo.dtsi ++++ b/arch/arm/boot/dts/imx6qdl-udoo.dtsi +@@ -292,7 +292,8 @@ &usbh1 { + pinctrl-0 = <&pinctrl_usbh>; + vbus-supply = <®_usb_h1_vbus>; + clocks = <&clks IMX6QDL_CLK_CKO>; +- status = "okay"; ++ /* currently USB support causes a kernel hang. Disable it for now */ ++ status = "disabled"; + }; + + &usbotg { diff --git a/board/udoo/mx6qdl/readme.txt b/board/udoo/mx6qdl/readme.txt new file mode 100644 index 00000000..a7ca98cc --- /dev/null +++ b/board/udoo/mx6qdl/readme.txt @@ -0,0 +1,17 @@ +Udoo MX6Q/DL board + +For information about MX6 Udoo boards: +http://www.udoo.org/ + +To build a minimal support for these boards: + + $ make mx6udoo_defconfig + $ make + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on a micro SD card: + +dd if=output/images/sdcard.img of=/dev/ + +For details about the medium image layout, see the definition in +board/freescale/common/imx/genimage.cfg.template_no_boot_part_spl. diff --git a/board/udoo/neo/readme.txt b/board/udoo/neo/readme.txt new file mode 100644 index 00000000..94ebcc12 --- /dev/null +++ b/board/udoo/neo/readme.txt @@ -0,0 +1,16 @@ +MX6X Udoo Neo board + +http://www.udoo.org/udoo-neo/ + +To build a minimal support for these boards: + + $ make mx6sx_udoo_neo_defconfig + $ make + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on an SD card: + +dd if=output/images/sdcard.img of=/dev/ + +For details about the medium image layout, see the definition in +board/freescale/common/imx/genimage.cfg.template_no_boot_part_spl. diff --git a/board/wandboard/boot.scr.txt b/board/wandboard/boot.scr.txt new file mode 100644 index 00000000..7a8aa4bd --- /dev/null +++ b/board/wandboard/boot.scr.txt @@ -0,0 +1,7 @@ +setenv finduuid "part uuid mmc 0:1 uuid" +run finduuid +run findfdt +setenv bootargs "console=ttymxc0,115200 root=PARTUUID=${uuid} rootwait rootfstype=ext4" +load mmc 0:1 ${fdt_addr} boot/${fdtfile} +load mmc 0:1 ${loadaddr} boot/zImage +bootz ${loadaddr} - ${fdt_addr} diff --git a/board/wandboard/genimage.cfg b/board/wandboard/genimage.cfg new file mode 100644 index 00000000..ad4a6a55 --- /dev/null +++ b/board/wandboard/genimage.cfg @@ -0,0 +1,32 @@ +# Minimal SD card image for the Wandboard +# +# The SD card must have at least 1 MB free at the beginning. +# U-Boot and its environment are dumped as is. +# A single root filesystem partition is required (Ext4 in this case). +# +# For details about the layout, see: +# http://wiki.wandboard.org/index.php/Boot-process + +image sdcard.img { + hdimage { + } + + partition spl { + in-partition-table = "no" + image = "SPL" + offset = 1024 + } + + partition u-boot { + in-partition-table = "no" + image = "u-boot.img" + offset = 70656 + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + offset = 1M + size = 512M + } +} diff --git a/board/wandboard/post-build.sh b/board/wandboard/post-build.sh new file mode 100755 index 00000000..6ddc1137 --- /dev/null +++ b/board/wandboard/post-build.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +BOARD_DIR="$(dirname $0)" + +install -d -m 755 $TARGET_DIR/boot + +$HOST_DIR/bin/mkimage -A arm -O linux -T script -C none \ + -n "boot script" -d $BOARD_DIR/boot.scr.txt $TARGET_DIR/boot/boot.scr diff --git a/board/wandboard/readme.txt b/board/wandboard/readme.txt new file mode 100644 index 00000000..adc4e5c1 --- /dev/null +++ b/board/wandboard/readme.txt @@ -0,0 +1,14 @@ +Wandboard + +http://www.wandboard.org + +To build a minimal support for this board: + + $ make wandboard_defconfig + $ make + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on an SD card. + +For details about the medium image layout, see the definition in +board/wandboard/genimage.cfg. diff --git a/board/warp7/readme.txt b/board/warp7/readme.txt new file mode 100644 index 00000000..aff7a601 --- /dev/null +++ b/board/warp7/readme.txt @@ -0,0 +1,118 @@ +***************** +Warp i.MX7S board +***************** + +This file documents the Buildroot support for the Warp i.MX7S board. + +Build +===== + +First, configure Buildroot for the Warp i.MX7S board: + + make warp7_defconfig + +Build all components: + + make + +You will find in output/images/ the following files: + - imx7s-warp.dtb + - rootfs.ext4 + - rootfs.tar + - sdcard.img + - u-boot-dtb.imx + - zImage + +Flash the eMMC image +==================== + +In the U-Boot prompt lauch: + +=> ums 0 mmc 0 + +This will mount the eMMC content in the host PC as a mass storage device. + +To determine the device associated to the eMMC have a look in the +/proc/partitions file: + + cat /proc/partitions + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped into the eMMC. Launch the following +command: + +sudo dd if=output/images/sdcard.img of=/dev/ + +*** WARNING! This will destroy all the eMMC content. Use it with care! *** + +For details about the medium image layout, see the definition in +board/warp7/genimage.cfg. + +How to recover from a bad eMMC image +==================================== + +In case a bad U-Boot has been flashed to the eMMC and the board no +longer boots, it is possible to recover using the imx_usb_loader utility. + +Put the warp7 board in USB download mode by removing the CPU board +from the base board then putting switch 2 in the upper position. + +Connect a USB to serial adapter between the host PC and warp7 serial +USB port, and also a USB cable between the OTG warp7 port and the host +PC. + +Copy u-boot-dtb.imx to the imx_usb_loader folder. + +Load u-boot-dtb.imx via USB: + +$ sudo ./imx_usb u-boot-dtb.imx + +Then U-Boot should start and its messages will appear in the console program. + +Open a terminal program such as minicom. + +Use the default environment variables: + +=> env default -f -a +=> saveenv + +Run the DFU command: +=> dfu 0 mmc 0 + +Transfer u-boot-dtb.imx that will be flashed into the eMMC: + +$ sudo dfu-util -D u-boot-dtb.imx -a boot + +Then on the U-Boot prompt the following message should be seen after a +successful upgrade: + +#DOWNLOAD ... OK +Ctrl+C to exit ... + +=> ums 0 mmc 0 + +sudo dd if=output/images/sdcard.img of=/dev/ + +Put warp7 back in eMMC boot mode by placing switch 2 in the lower position +and reboot the board. + +Boot the Warp i.MX7S board +========================== + +To boot your newly created system: +- put a micro USB cable into the Debug USB Port and connect using a terminal + emulator at 115200 bps, 8n1; +- power on the board. + +Using Wifi +========== + +# modprobe brcmfmac +# iwconfig wlan0 essid ACCESSPOINTNAME +# wpa_passphrase ACCESSPOINTNAME > /etc/wpa.conf +(enter the wifi password and press enter) +# wpa_supplicant -Dwext -iwlan0 -c /etc/wpa.conf & +# udhcpc -i wlan0 +# ping buildroot.org + +Enjoy! diff --git a/board/warp7/rootfs_overlay/lib/firmware/brcm/brcmfmac43430-sdio.txt b/board/warp7/rootfs_overlay/lib/firmware/brcm/brcmfmac43430-sdio.txt new file mode 100644 index 00000000..a1dc2035 --- /dev/null +++ b/board/warp7/rootfs_overlay/lib/firmware/brcm/brcmfmac43430-sdio.txt @@ -0,0 +1,42 @@ +# 2.4 GHz, 20 MHz BW mode +manfid=0x2d0 +prodid=0x0726 +vendid=0x14e4 +devid=0x43e2 +boardtype=0x0726 +boardrev=0x1202 +boardnum=22 +macaddr=00:90:4c:c5:12:38 +sromrev=11 +boardflags=0x00404201 +boardflags3=0x08000000 +xtalfreq=37400 +nocrc=1 +ag0=0 +aa2g=1 +ccode=ALL +#pa0itssit=0x20 +extpagain2g=0 +pa2ga0=-168,7161,-820 +AvVmid_c0=0x0,0xc8 +cckpwroffset0=5 +maxp2ga0=90 +#txpwrbckof=6 +cckbw202gpo=0 +legofdmbw202gpo=0x66111111 +mcsbw202gpo=0x77711111 +propbw202gpo=0xdd +ofdmdigfilttype=18 +ofdmdigfilttypebe=18 +papdmode=1 +papdvalidtest=1 +pacalidx2g=48 +papdepsoffset=-22 +papdendidx=58 +il0macaddr=00:90:4c:c5:12:38 +wl0id=0x431b +#muxenab=0x10 +#BT COEX deferral limit setting +#btc_params 8 45000 +#btc_params 10 20000 +#spurconfig=0x3 diff --git a/board/zynq/genimage.cfg b/board/zynq/genimage.cfg new file mode 100644 index 00000000..76e61c3a --- /dev/null +++ b/board/zynq/genimage.cfg @@ -0,0 +1,25 @@ +image boot.vfat { + vfat { + files = { + "boot.bin", + "u-boot.img", + "devicetree.dtb", + "uImage" + } + file uramdisk.image.gz { + image = "rootfs.cpio.uboot" + } + } + size = 32M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } +} diff --git a/board/zynq/post-image.sh b/board/zynq/post-image.sh new file mode 100755 index 00000000..0cf92e0a --- /dev/null +++ b/board/zynq/post-image.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +# By default U-Boot loads DTB from a file named "devicetree.dtb", so +# let's use a symlink with that name that points to the *first* +# devicetree listed in the config. + +FIRST_DT=$(sed -n \ + 's/^BR2_LINUX_KERNEL_INTREE_DTS_NAME="\([a-z0-9\-]*\).*"$/\1/p' \ + ${BR2_CONFIG}) + +[ -z "${FIRST_DT}" ] || ln -fs ${FIRST_DT}.dtb ${BINARIES_DIR}/devicetree.dtb + +support/scripts/genimage.sh -c board/zynq/genimage.cfg diff --git a/board/zynq/readme.txt b/board/zynq/readme.txt new file mode 100644 index 00000000..16273496 --- /dev/null +++ b/board/zynq/readme.txt @@ -0,0 +1,86 @@ +This is the Buildroot support for Zynq boards. Zynq boards are available from +Xilinx and some third party vendors, but the build procedure is very similar. + +Currently, three boards are natively supported by Buildroot: + - Xilinx ZC706 board (zynq_zc706_defconfig) + - Avnet ZedBoard (zynq_zed_defconfig) + - Avnet MicroZed (zynq_microzed_defconfig) + +Steps to create a working system for a Zynq board: + +1) Configuration (do one of the following) + make zynq_zc706_defconfig (ZC706) + make zynq_zed_defconfig (Zedboard) + make zynq_microzed_defconfig (MicroZed) +2) make +3) All needed files will be available in the output/images directory. + The sdcard.img file is a complete bootable image ready to be written + on the boot medium. To install it, simply copy the image to an SD + card: + + # dd if=output/images/sdcard.img of=/dev/sdX + + Where 'sdX' is the device node of the uSD. +4) boot your board + +You can alter the booting procedure by creating a file uEnv.txt +in the root of the SD card. It is a plain text file in format += one per line: + +kernel_image=myimage +modeboot=myboot +myboot=... + +Note: +The DTB for MicroZed is the same as the one for the Zedboard (zynq-zed.dtb), +and this is the recommended solution, see +https://forums.xilinx.com/t5/Embedded-Linux/Microzed-default-device-tree-dts/td-p/432856. + +References: + - ZC706 information including schematics, reference designs, and manuals are + available from + http://www.xilinx.com/products/boards-and-kits/ek-z7-zc706-g.html. + + - Zedboard/Microzed information including schematics, reference designs, and + manuals are available from http://www.zedboard.org . + +Support for other boards: + +If you want to build a system for other boards based on the same SoC +(for ex. Digilent Zybo board), and the board is already supported by +the upstream kernel and U-Boot, you simply need to change the +following Buildroot options: + + - Kernel Device Tree file name (BR2_LINUX_KERNEL_INTREE_DTS_NAME) + - U-Boot board defconfig (BR2_TARGET_UBOOT_BOARD_DEFCONFIG) + +Custom ps7_init_gpl.c/h support: + +To generate a working boot.bin image, ps7_init_gpl.c/h are required in +the U-Boot source tree. Without those files, boot.bin will be built +successfully but it will not be functional at all. Those files are +output from the Xilinx tools, but for convenience, U-Boot includes the +default ps7_init_gpl.c/h of popular boards. Those files may need to be +updated for any programmable logic customizations which impact +ps7_init (clock/pin setup & mapping/AXI bridge setup/etc). See +board/xilinx/zynq/ directory of U-Boot for natively supported ps7_init +files. If the ps7_init files for your board are not found in U-Boot, +you need to add them by yourself. + +1) Start with a defconfig supported by Buildroot (e.g. Zedboard) + make zynq_zed_defconfig + +2) make uboot-menuconfig + Visit the following menu and enable CONFIG_ZYNQ_CUSTOM_INIT. + + ARM architecture ---> + [*] Use custom ps7_init provided by Xilinx tool + +3) Copy ps7_init_gpl.c/h generated by the Xilinx tools into + output/build/uboot-xilinx-/board/xilinx/zynq/custom_hw_platform/ + +4) make + +Note: The files in step 3 will need to be re-copied after cleaning the +output directory and at this time, there is no way to save them as +part of the buildroot configuration, except as a U-Boot patch. diff --git a/board/zynqmp/genimage.cfg b/board/zynqmp/genimage.cfg new file mode 100644 index 00000000..30be086d --- /dev/null +++ b/board/zynqmp/genimage.cfg @@ -0,0 +1,28 @@ +image boot.vfat { + vfat { + files = { + "boot.bin", + "u-boot.bin", + "atf-uboot.ub", + "system.dtb", + "Image" + } + } + size = 32M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/zynqmp/patches/uboot/0001-arm64-zynqmp-zcu106-fix-SPL-MMC-booting.patch b/board/zynqmp/patches/uboot/0001-arm64-zynqmp-zcu106-fix-SPL-MMC-booting.patch new file mode 100644 index 00000000..4d85e1bb --- /dev/null +++ b/board/zynqmp/patches/uboot/0001-arm64-zynqmp-zcu106-fix-SPL-MMC-booting.patch @@ -0,0 +1,52 @@ +From e5d72ed8339eb05285448aad3c89d21e4d18fd29 Mon Sep 17 00:00:00 2001 +From: Luca Ceresoli +Date: Mon, 26 Feb 2018 09:40:34 +0100 +Subject: [PATCH] arm64: zynqmp: zcu106: fix SPL MMC booting + +The U-Boot SPL generated with the current zcu106 defconfig cannot boot +from MMC: + + [...] + U-Boot SPL 2018.01 (Feb 21 2018 - 17:47:14) + EL Level: EL3 + Trying to boot from MMC1 + sdhci_transfer_data: Error detected in status(0x408020)! + spl_load_image_fat_os: error reading image u-boot.bin, err - -2 + spl_load_image_fat: error reading image u-boot.img, err - -6 + SPL: failed to boot from all boot devices + ### ERROR ### Please RESET the board ### + +Fix by lowering the rpll value. The new value for the RPLL_CTRL +register comes from the current psu_init_gpl.c from the HDF file at +https://github.com/xilinx/hdf-examples/tree/01ad8ea5fd1989abf4ea5a072d019a16cb2bc546/zcu106-zynqmp +(generated by Vivado v2017.4). + +RPLL and sdio1_ref clocks before and after this change: + + - Old values: RPLL 1.36 GHz, sdio1_ref 272 MHz + - New values: RPLL 1.16 GHz, sdio1_ref 233 MHz + +Signed-off-by: Luca Ceresoli +Cc: Michal Simek +Upstream-status: accepted upstream in a different form +--- + + board/xilinx/zynqmp/zynqmp-zcu106-revA/psu_init_gpl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/board/xilinx/zynqmp/zynqmp-zcu106-revA/psu_init_gpl.c b/board/xilinx/zynqmp/zynqmp-zcu106-revA/psu_init_gpl.c +index 4d18abe000ca..e6fa477e53e7 100644 +--- a/board/xilinx/zynqmp/zynqmp-zcu106-revA/psu_init_gpl.c ++++ b/board/xilinx/zynqmp/zynqmp-zcu106-revA/psu_init_gpl.c +@@ -10,7 +10,7 @@ + static unsigned long psu_pll_init_data(void) + { + psu_mask_write(0xFF5E0034, 0xFE7FEDEFU, 0x7E4E2C62U); +- psu_mask_write(0xFF5E0030, 0x00717F00U, 0x00013C00U); ++ psu_mask_write(0xFF5E0030, 0x00717F00U, 0x00014600U); + psu_mask_write(0xFF5E0030, 0x00000008U, 0x00000008U); + psu_mask_write(0xFF5E0030, 0x00000001U, 0x00000001U); + psu_mask_write(0xFF5E0030, 0x00000001U, 0x00000000U); +-- +2.7.4 + diff --git a/board/zynqmp/patches/uboot/0002-arm64-zynqmp-Enable-booting-to-ATF.patch b/board/zynqmp/patches/uboot/0002-arm64-zynqmp-Enable-booting-to-ATF.patch new file mode 100644 index 00000000..487fff68 --- /dev/null +++ b/board/zynqmp/patches/uboot/0002-arm64-zynqmp-Enable-booting-to-ATF.patch @@ -0,0 +1,114 @@ +From 5e3cac50cc981e01d9072241035a8d4162560c71 Mon Sep 17 00:00:00 2001 +From: Luca Ceresoli +Date: Mon, 12 Mar 2018 17:18:38 +0100 +Subject: [PATCH] arm64: zynqmp: Enable booting to ATF + +U-Boot is now able to boot to ARM Trusted Firmware (ATF). The boot +flow is SPL(EL3) loads ATF and full u-boot and jump to ATF(EL3) which +pass control to full u-boot(EL2). This has been tested on zcu106, so +enable it in this defconfig. + +To generate an image that triggers this booting flow, you need to pass +'-O arm-trusted-firmware' to mkimage. + +Signed-off-by: Luca Ceresoli +Signed-off-by: Michal Simek +Backported from upstream: http://git.denx.de/?p=u-boot.git;a=commit;h=5e3cac50cc981e01d9072241035a8d4162560c71 +--- + + configs/xilinx_zynqmp_zc1751_xm015_dc1_defconfig | 1 + + configs/xilinx_zynqmp_zc1751_xm016_dc2_defconfig | 1 + + configs/xilinx_zynqmp_zc1751_xm018_dc4_defconfig | 1 + + configs/xilinx_zynqmp_zc1751_xm019_dc5_defconfig | 1 + + configs/xilinx_zynqmp_zcu102_rev1_0_defconfig | 1 + + configs/xilinx_zynqmp_zcu102_revA_defconfig | 1 + + configs/xilinx_zynqmp_zcu102_revB_defconfig | 1 + + 7 files changed, 7 insertions(+) + +diff --git a/configs/xilinx_zynqmp_zc1751_xm015_dc1_defconfig b/configs/xilinx_zynqmp_zc1751_xm015_dc1_defconfig +index c5bfa2b12638..488c72258b0e 100644 +--- a/configs/xilinx_zynqmp_zc1751_xm015_dc1_defconfig ++++ b/configs/xilinx_zynqmp_zc1751_xm015_dc1_defconfig +@@ -19,6 +19,7 @@ CONFIG_BOARD_EARLY_INIT_R=y + CONFIG_SPL_OS_BOOT=y + CONFIG_SPL_RAM_SUPPORT=y + CONFIG_SPL_RAM_DEVICE=y ++CONFIG_SPL_ATF=y + CONFIG_SYS_PROMPT="ZynqMP> " + CONFIG_FASTBOOT=y + CONFIG_FASTBOOT_FLASH=y +diff --git a/configs/xilinx_zynqmp_zc1751_xm016_dc2_defconfig b/configs/xilinx_zynqmp_zc1751_xm016_dc2_defconfig +index f86dce403a42..5d501eec0edd 100644 +--- a/configs/xilinx_zynqmp_zc1751_xm016_dc2_defconfig ++++ b/configs/xilinx_zynqmp_zc1751_xm016_dc2_defconfig +@@ -20,6 +20,7 @@ CONFIG_BOARD_EARLY_INIT_R=y + CONFIG_SPL_OS_BOOT=y + CONFIG_SPL_RAM_SUPPORT=y + CONFIG_SPL_RAM_DEVICE=y ++CONFIG_SPL_ATF=y + CONFIG_SYS_PROMPT="ZynqMP> " + CONFIG_FASTBOOT=y + CONFIG_FASTBOOT_FLASH=y +diff --git a/configs/xilinx_zynqmp_zc1751_xm018_dc4_defconfig b/configs/xilinx_zynqmp_zc1751_xm018_dc4_defconfig +index 6e947cf56827..6f7eaebd7676 100644 +--- a/configs/xilinx_zynqmp_zc1751_xm018_dc4_defconfig ++++ b/configs/xilinx_zynqmp_zc1751_xm018_dc4_defconfig +@@ -16,6 +16,7 @@ CONFIG_BOARD_EARLY_INIT_R=y + CONFIG_SPL_OS_BOOT=y + CONFIG_SPL_RAM_SUPPORT=y + CONFIG_SPL_RAM_DEVICE=y ++CONFIG_SPL_ATF=y + CONFIG_SYS_PROMPT="ZynqMP> " + CONFIG_CMD_MEMTEST=y + CONFIG_SYS_ALT_MEMTEST=y +diff --git a/configs/xilinx_zynqmp_zc1751_xm019_dc5_defconfig b/configs/xilinx_zynqmp_zc1751_xm019_dc5_defconfig +index 1c934858c61c..7a3806cba4b5 100644 +--- a/configs/xilinx_zynqmp_zc1751_xm019_dc5_defconfig ++++ b/configs/xilinx_zynqmp_zc1751_xm019_dc5_defconfig +@@ -17,6 +17,7 @@ CONFIG_BOARD_EARLY_INIT_R=y + CONFIG_SPL_OS_BOOT=y + CONFIG_SPL_RAM_SUPPORT=y + CONFIG_SPL_RAM_DEVICE=y ++CONFIG_SPL_ATF=y + CONFIG_SYS_PROMPT="ZynqMP> " + CONFIG_CMD_MEMTEST=y + CONFIG_SYS_ALT_MEMTEST=y +diff --git a/configs/xilinx_zynqmp_zcu102_rev1_0_defconfig b/configs/xilinx_zynqmp_zcu102_rev1_0_defconfig +index e13c7c56f310..e4408f182ca0 100644 +--- a/configs/xilinx_zynqmp_zcu102_rev1_0_defconfig ++++ b/configs/xilinx_zynqmp_zcu102_rev1_0_defconfig +@@ -19,6 +19,7 @@ CONFIG_BOARD_EARLY_INIT_R=y + CONFIG_SPL_OS_BOOT=y + CONFIG_SPL_RAM_SUPPORT=y + CONFIG_SPL_RAM_DEVICE=y ++CONFIG_SPL_ATF=y + CONFIG_SYS_PROMPT="ZynqMP> " + CONFIG_FASTBOOT=y + CONFIG_FASTBOOT_FLASH=y +diff --git a/configs/xilinx_zynqmp_zcu102_revA_defconfig b/configs/xilinx_zynqmp_zcu102_revA_defconfig +index 5b2cd495ee85..b52f6789fd4b 100644 +--- a/configs/xilinx_zynqmp_zcu102_revA_defconfig ++++ b/configs/xilinx_zynqmp_zcu102_revA_defconfig +@@ -19,6 +19,7 @@ CONFIG_BOARD_EARLY_INIT_R=y + CONFIG_SPL_OS_BOOT=y + CONFIG_SPL_RAM_SUPPORT=y + CONFIG_SPL_RAM_DEVICE=y ++CONFIG_SPL_ATF=y + CONFIG_SYS_PROMPT="ZynqMP> " + CONFIG_FASTBOOT=y + CONFIG_FASTBOOT_FLASH=y +diff --git a/configs/xilinx_zynqmp_zcu102_revB_defconfig b/configs/xilinx_zynqmp_zcu102_revB_defconfig +index e6530fbfe7ff..80592554f682 100644 +--- a/configs/xilinx_zynqmp_zcu102_revB_defconfig ++++ b/configs/xilinx_zynqmp_zcu102_revB_defconfig +@@ -19,6 +19,7 @@ CONFIG_BOARD_EARLY_INIT_R=y + CONFIG_SPL_OS_BOOT=y + CONFIG_SPL_RAM_SUPPORT=y + CONFIG_SPL_RAM_DEVICE=y ++CONFIG_SPL_ATF=y + CONFIG_SYS_PROMPT="ZynqMP> " + CONFIG_FASTBOOT=y + CONFIG_FASTBOOT_FLASH=y +-- +2.7.4 + diff --git a/board/zynqmp/patches/uboot/0003-arm64-zynqmp-accept-an-absolute-path-for-PMUFW_INIT_.patch b/board/zynqmp/patches/uboot/0003-arm64-zynqmp-accept-an-absolute-path-for-PMUFW_INIT_.patch new file mode 100644 index 00000000..95ab7b3b --- /dev/null +++ b/board/zynqmp/patches/uboot/0003-arm64-zynqmp-accept-an-absolute-path-for-PMUFW_INIT_.patch @@ -0,0 +1,68 @@ +From c7df098a71e05dc81cee818747759e8060b59626 Mon Sep 17 00:00:00 2001 +From: Luca Ceresoli +Date: Mon, 4 Jun 2018 12:21:01 +0200 +Subject: [PATCH] arm64: zynqmp: accept an absolute path for PMUFW_INIT_FILE + +The value of PMUFW_INIT_FILE is prefixed with "$(srctree)/", thus +forcing it to be a relative path inside the U-Boot source tree. Since +the PMUFW is a binary file generated outside of U-Boot, the PMUFW +binary must be copied inside the U-Boot source tree before the +build. + +This generates a few problems: + + * if the source tree is shared among different out-of-tree builds, + they will pollute (and potentially corrupt) each other + * the source tree cannot be read-only + * any buildsystem must add a command to copy the PMUFW binary + * putting an externally-generated binary in the source tree is ugly + as hell + +Avoid these problems by accepting an absolute path for +PMUFW_INIT_FILE. This would be as simple as removing the "$(srctree)/" +prefix, but in order to keep backward compatibility we rather use the +shell and readlink to get the absolute path even when starting from a +relative path. + +Since 'readlink -f' produces an empty string if the file does not +exist, we also add a check to ensure the file configured in +PMUFW_INIT_FILE exists. Otherwise the build would exit successfully, +but produce a boot.bin without PMUFW as if PMUFW_INIT_FILE were empty. + +Tested in the 12 possible combinations of: + - PMUFW_INIT_FILE empty, relative, absolute, non-existing + - building in-tree, in subdir, in other directory + +Signed-off-by: Luca Ceresoli +Cc: Michal Simek +Cc: Simon Glass +Cc: Emmanuel Vadot +Signed-off-by: Michal Simek +Backported from upstream: https://git.denx.de/?p=u-boot.git;a=commit;h=c7df098a71e05dc81cee818747759e8060b59626 +--- + scripts/Makefile.spl | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/scripts/Makefile.spl b/scripts/Makefile.spl +index ef018b5b4056..252f13826d4c 100644 +--- a/scripts/Makefile.spl ++++ b/scripts/Makefile.spl +@@ -167,8 +167,14 @@ ifdef CONFIG_ARCH_ZYNQ + MKIMAGEFLAGS_boot.bin = -T zynqimage -R $(srctree)/$(CONFIG_BOOT_INIT_FILE) + endif + ifdef CONFIG_ARCH_ZYNQMP ++ifneq ($(CONFIG_PMUFW_INIT_FILE),"") ++spl/boot.bin: zynqmp-check-pmufw ++zynqmp-check-pmufw: FORCE ++ ( cd $(srctree) && test -r $(CONFIG_PMUFW_INIT_FILE) ) \ ++ || ( echo "Cannot read $(CONFIG_PMUFW_INIT_FILE)" && false ) ++endif + MKIMAGEFLAGS_boot.bin = -T zynqmpimage -R $(srctree)/$(CONFIG_BOOT_INIT_FILE) \ +- -n $(srctree)/$(CONFIG_PMUFW_INIT_FILE) ++ -n "$(shell cd $(srctree); readlink -f $(CONFIG_PMUFW_INIT_FILE))" + endif + + spl/boot.bin: $(obj)/u-boot-spl.bin FORCE +-- +2.7.4 + diff --git a/board/zynqmp/patches/uboot/0004-arm-arm64-zynq-zynqmp-pass-the-PS-init-file-as-a-kco.patch b/board/zynqmp/patches/uboot/0004-arm-arm64-zynq-zynqmp-pass-the-PS-init-file-as-a-kco.patch new file mode 100644 index 00000000..b32e1627 --- /dev/null +++ b/board/zynqmp/patches/uboot/0004-arm-arm64-zynq-zynqmp-pass-the-PS-init-file-as-a-kco.patch @@ -0,0 +1,175 @@ +From 4c9d54ab5a41d65000c8d249b6fb1b76056f1812 Mon Sep 17 00:00:00 2001 +From: Luca Ceresoli +Date: Wed, 20 Jun 2018 12:11:50 +0200 +Subject: [PATCH] arm/arm64: zynq/zynqmp: pass the PS init file as a kconfig + variable + +U-Boot needs to link ps7_init_gpl.c on Zynq or psu_init_gpl.c on +ZynqMP (PS init for short). The current logic to locate this file for +both platforms is: + + 1. if a board-specific file exists in + board/xilinx/zynq[mp]/$(CONFIG_DEFAULT_DEVICE_TREE)/ps?_init_gpl.c + then use it + 2. otherwise use board/xilinx/zynq/ps?_init_gpl.c + +In the latter case the file does not exist in the U-Boot sources and +must be copied in the source tree from the outside before starting the +build. This is typical when it is generated from Xilinx tools while +developing a custom hardware. However making sure that a +board-specific file is _not_ found (and used) requires some trickery +such as removing or overwriting all PS init files (e.g.: the current +meta-xilinx yocto layer [0]). + +This generates a few problems: + + * if the source tree is shared among different out-of-tree builds, + they will pollute (and potentially corrupt) each other + * the source tree cannot be read-only + * any buildsystem must add a command to copy the PS init file binary + * overwriting or deleting files in the source tree is ugly as hell + +Simplify usage by allowing to pass the path to the desired PS init +file in kconfig variable XILINX_PS_INIT_FILE. It can be an absolute +path or relative to $(srctree). If the variable is set, the +user-specified file will always be used without being copied +around. If the the variable is left empty, for backward compatibility +fall back to the old behaviour. + +Since the issue is the same for Zynq and ZynqMP, add one kconfig +variable in a common place and use it for both. + +Also use the new kconfig help text to document all the ways to give +U-Boot the PS init file. + +Build-tested with all combinations of: + - platform: zynq or zynqmp + - PS init file: from XILINX_PS_INIT_FILE (absolute, relative path, + non-existing), in-tree board-specific, in board/xilinx/zynq[mp]/ + - building in-tree, in subdir, in other directory + +[0] https://github.com/Xilinx/meta-xilinx/blob/b2f74cc7fe5c4881589d5e440a17cb51fc66a7ab/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-spl-zynq-init.inc#L9 + +Signed-off-by: Luca Ceresoli +Cc: Albert Aribaud +Cc: Michal Simek +Cc: Nathan Rossi +Backported from upstream: https://git.denx.de/?p=u-boot.git;a=commit;h=6da4f67ad09cd8b311d77b2b04e557b7ef65b56c +--- + arch/arm/Kconfig | 1 + + board/xilinx/Kconfig | 41 +++++++++++++++++++++++++++++++++++++++++ + board/xilinx/zynq/Makefile | 10 +++++++++- + board/xilinx/zynqmp/Makefile | 10 +++++++++- + 4 files changed, 60 insertions(+), 2 deletions(-) + create mode 100644 board/xilinx/Kconfig + +diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig +index 22234cde2ab6..e04979d0ef7e 100644 +--- a/arch/arm/Kconfig ++++ b/arch/arm/Kconfig +@@ -1293,4 +1293,5 @@ source "board/technologic/ts4600/Kconfig" + source "board/vscom/baltos/Kconfig" + source "board/woodburn/Kconfig" + source "board/work-microwave/work_92105/Kconfig" ++source "board/xilinx/Kconfig" + source "board/zipitz2/Kconfig" + + source "arch/arm/Kconfig.debug" +diff --git a/board/xilinx/Kconfig b/board/xilinx/Kconfig +new file mode 100644 +index 000000000000..aa3fa061edef +--- /dev/null ++++ b/board/xilinx/Kconfig +@@ -0,0 +1,41 @@ ++# Copyright (c) 2018, Luca Ceresoli ++# ++# SPDX-License-Identifier: GPL-2.0 ++ ++if ARCH_ZYNQ || ARCH_ZYNQMP ++ ++config XILINX_PS_INIT_FILE ++ string "Zynq/ZynqMP PS init file(s) location" ++ help ++ On Zynq and ZynqMP U-Boot SPL (or U-Boot proper if ++ ZYNQMP_PSU_INIT_ENABLED is set) is responsible for some ++ basic initializations, such as enabling peripherals and ++ configuring pinmuxes. The PS init file (called ++ psu_init_gpl.c on ZynqMP, ps7_init_gpl.c for Zynq-7000) ++ contains the code for such initializations. ++ ++ U-Boot contains PS init files for some boards, but each of ++ them describes only one specific configuration. Users of a ++ different board, or needing a different configuration, can ++ generate custom files using the Xilinx development tools. ++ ++ There are three ways to give a PS init file to U-Boot: ++ ++ 1. Set this variable to the path, either relative to the ++ source tree or absolute, where the psu_init_gpl.c or ++ ps7_init_gpl.c file is located. U-Boot will build this ++ file. ++ ++ 2. If you leave an empty string here, U-Boot will use ++ board/xilinx/zynq/$(CONFIG_DEFAULT_DEVICE_TREE)/ps7_init_gpl.c ++ for Zynq-7000, or ++ board/xilinx/zynqmp/$(CONFIG_DEFAULT_DEVICE_TREE)/psu_init_gpl.c ++ for ZynqMP. ++ ++ 3. If the above file does not exist, U-Boot will use ++ board/xilinx/zynq/ps7_init_gpl.c for Zynq-7000, or ++ board/xilinx/zynqmp/psu_init_gpl.c for ZynqMP. This file ++ is not provided by U-Boot, you have to copy it there ++ before the build. ++ ++endif +diff --git a/board/xilinx/zynq/Makefile b/board/xilinx/zynq/Makefile +index 5a76a26720cd..03ad5f0532ee 100644 +--- a/board/xilinx/zynq/Makefile ++++ b/board/xilinx/zynq/Makefile +@@ -5,10 +5,18 @@ + + obj-y := board.o + +-hw-platform-y :=$(shell echo $(CONFIG_DEFAULT_DEVICE_TREE)) ++ifneq ($(CONFIG_XILINX_PS_INIT_FILE),"") ++PS_INIT_FILE := $(shell cd $(srctree); readlink -f $(CONFIG_XILINX_PS_INIT_FILE)) ++init-objs := ps_init_gpl.o ++spl/board/xilinx/zynq/ps_init_gpl.o board/xilinx/zynq/ps_init_gpl.o: $(PS_INIT_FILE) ++ $(CC) $(c_flags) -I $(srctree)/$(src) -c -o $@ $^ ++endif + ++ifeq ($(init-objs),) ++hw-platform-y :=$(shell echo $(CONFIG_DEFAULT_DEVICE_TREE)) + init-objs := $(if $(wildcard $(srctree)/$(src)/$(hw-platform-y)/ps7_init_gpl.c),\ + $(hw-platform-y)/ps7_init_gpl.o) ++endif + + ifeq ($(init-objs),) + ifneq ($(wildcard $(srctree)/$(src)/ps7_init_gpl.c),) +diff --git a/board/xilinx/zynqmp/Makefile b/board/xilinx/zynqmp/Makefile +index 05ccd25dcef3..960b81fc5853 100644 +--- a/board/xilinx/zynqmp/Makefile ++++ b/board/xilinx/zynqmp/Makefile +@@ -5,10 +5,18 @@ + + obj-y := zynqmp.o + +-hw-platform-y :=$(shell echo $(CONFIG_DEFAULT_DEVICE_TREE)) ++ifneq ($(CONFIG_XILINX_PS_INIT_FILE),"") ++PS_INIT_FILE := $(shell cd $(srctree); readlink -f $(CONFIG_XILINX_PS_INIT_FILE)) ++init-objs := ps_init_gpl.o ++spl/board/xilinx/zynqmp/ps_init_gpl.o board/xilinx/zynqmp/ps_init_gpl.o: $(PS_INIT_FILE) ++ $(CC) $(c_flags) -I $(srctree)/$(src) -c -o $@ $^ ++endif + ++ifeq ($(init-objs),) ++hw-platform-y :=$(shell echo $(CONFIG_DEFAULT_DEVICE_TREE)) + init-objs := $(if $(wildcard $(srctree)/$(src)/$(hw-platform-y)/psu_init_gpl.c),\ + $(hw-platform-y)/psu_init_gpl.o) ++endif + + ifeq ($(init-objs),) + ifneq ($(wildcard $(srctree)/$(src)/psu_init_gpl.c),) +-- +2.7.4 + diff --git a/board/zynqmp/post-image.sh b/board/zynqmp/post-image.sh new file mode 100755 index 00000000..b2b99fed --- /dev/null +++ b/board/zynqmp/post-image.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +# By default U-Boot loads DTB from a file named "system.dtb", so +# let's use a symlink with that name that points to the *first* +# devicetree listed in the config. + +FIRST_DT=$(sed -nr \ + -e 's|^BR2_LINUX_KERNEL_INTREE_DTS_NAME="xilinx/([-_/[:alnum:]\\.]*).*"$|\1|p' \ + ${BR2_CONFIG}) + +[ -z "${FIRST_DT}" ] || ln -fs ${FIRST_DT}.dtb ${BINARIES_DIR}/system.dtb + +support/scripts/genimage.sh -c board/zynqmp/genimage.cfg diff --git a/board/zynqmp/readme.txt b/board/zynqmp/readme.txt new file mode 100644 index 00000000..da37f4cc --- /dev/null +++ b/board/zynqmp/readme.txt @@ -0,0 +1,51 @@ +******************************** +Xilinx ZCU106 board - ZynqMP SoC +******************************** + +This document describes the Buildroot support for the ZCU106 board by +Xilinx, based on the Zynq UltraScale+ MPSoC (aka ZynqMP). It has been +tested with the EK-U1-ZCU106-ES2 pre-production board. + +How to build it +=============== + +Configure Buildroot: + + $ make zynqmp_zcu106_defconfig + +Compile everything and build the rootfs image: + + $ make + +Result of the build +------------------- + +After building, you should get a tree like this: + + output/images/ + +-- atf-uboot.ub + +-- bl31.bin + +-- boot.bin + +-- boot.vfat + +-- Image + +-- rootfs.ext2 + +-- rootfs.ext4 -> rootfs.ext2 + +-- sdcard.img + +-- system.dtb -> zynqmp-zcu106-revA.dtb + +-- u-boot.bin + `-- zynqmp-zcu106-revA.dtb + +How to write the SD card +======================== + +WARNING! This will destroy all the card content. Use with care! + +The sdcard.img file is a complete bootable image ready to be written +on the boot medium. To install it, simply copy the image to an SD +card: + + # dd if=output/images/sdcard.img of=/dev/sdX + +Where 'sdX' is the device node of the SD. + +Eject the SD card, insert it in the board, and power it up. diff --git a/boot/Config.in b/boot/Config.in new file mode 100644 index 00000000..b3adbfc8 --- /dev/null +++ b/boot/Config.in @@ -0,0 +1,24 @@ +menu "Bootloaders" + +source "boot/afboot-stm32/Config.in" +source "boot/at91bootstrap/Config.in" +source "boot/at91bootstrap3/Config.in" +source "boot/at91dataflashboot/Config.in" +source "boot/arm-trusted-firmware/Config.in" +source "boot/barebox/Config.in" +source "boot/binaries-marvell/Config.in" +source "boot/boot-wrapper-aarch64/Config.in" +source "boot/grub2/Config.in" +source "boot/gummiboot/Config.in" +source "boot/lpc32xxcdl/Config.in" +source "boot/mv-ddr-marvell/Config.in" +source "boot/mxs-bootlets/Config.in" +source "boot/optee-os/Config.in" +source "boot/opensbi/Config.in" +source "boot/s500-bootloader/Config.in" +source "boot/shim/Config.in" +source "boot/syslinux/Config.in" +source "boot/uboot/Config.in" +source "boot/vexpress-firmware/Config.in" + +endmenu diff --git a/boot/afboot-stm32/0001-Pass-fno-builtin-to-fix-build-with-gcc-10.patch b/boot/afboot-stm32/0001-Pass-fno-builtin-to-fix-build-with-gcc-10.patch new file mode 100644 index 00000000..5ef47b59 --- /dev/null +++ b/boot/afboot-stm32/0001-Pass-fno-builtin-to-fix-build-with-gcc-10.patch @@ -0,0 +1,46 @@ +From 5448f328ff63a6ca4a64519c2f1dfc63a33df4b7 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Thu, 10 Sep 2020 11:37:33 +0200 +Subject: [PATCH] Pass -fno-builtin to fix build with gcc 10 + +gcc 10, if it recognizes some hand-written code that looks like +memcpy, will generate a call to memcpy(). + +For example: + + while (dst < &_end_data) { + *dst++ = *src++; + } + +gets recognized as such. However, in the context of bare-metal code, +having a call to memcpy() in the C library doesn't work. So we fix +that by disabling builtins. + +Fixes: + +/home/thomas/projets/buildroot/output/host/opt/ext-toolchain/bin/../arm-buildroot-uclinux-uclibcgnueabi/bin/ld.real: stm32f429i-disco.o: in function `reset': +stm32f429i-disco.c:(.text.reset+0x1a): undefined reference to `memcpy' +/home/thomas/projets/buildroot/output/host/opt/ext-toolchain/bin/../arm-buildroot-uclinux-uclibcgnueabi/bin/ld.real: stm32f429i-disco.c:(.text.reset+0x34): undefined reference to `memset' +make[1]: *** [Makefile:26: stm32f429i-disco] Error 1 + +Upstream: https://github.com/mcoquelin-stm32/afboot-stm32/pull/9 +Signed-off-by: Thomas Petazzoni +--- + Makefile | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/Makefile b/Makefile +index f699176..1e8557d 100644 +--- a/Makefile ++++ b/Makefile +@@ -13,6 +13,7 @@ DTB_ADDR?=0x08004000 + CFLAGS := -mthumb -mcpu=cortex-m4 + CFLAGS += -ffunction-sections -fdata-sections + CFLAGS += -Os -std=gnu99 -Wall ++CFLAGS += -fno-builtin + LINKERFLAGS := -nostartfiles --gc-sections + + obj-y += gpio.o mpu.o qspi.o start_kernel.o +-- +2.26.2 + diff --git a/boot/afboot-stm32/Config.in b/boot/afboot-stm32/Config.in new file mode 100644 index 00000000..309b9e04 --- /dev/null +++ b/boot/afboot-stm32/Config.in @@ -0,0 +1,7 @@ +config BR2_TARGET_AFBOOT_STM32 + bool "afboot-stm32" + depends on BR2_arm + help + afboot-stm32 is a very small bootloader for STM32 platforms + + https://github.com/mcoquelin-stm32/afboot-stm32 diff --git a/boot/afboot-stm32/afboot-stm32.hash b/boot/afboot-stm32/afboot-stm32.hash new file mode 100644 index 00000000..75f47295 --- /dev/null +++ b/boot/afboot-stm32/afboot-stm32.hash @@ -0,0 +1,2 @@ +# Locally calculated +sha256 9b37b661bd3091ceb5d8dc5a56a2dfc02ae9ebc0c63dad3c4289c9d6b3d3ec89 afboot-stm32-0.2.tar.gz diff --git a/boot/afboot-stm32/afboot-stm32.mk b/boot/afboot-stm32/afboot-stm32.mk new file mode 100644 index 00000000..0fb47352 --- /dev/null +++ b/boot/afboot-stm32/afboot-stm32.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# afboot-stm32 +# +################################################################################ + +AFBOOT_STM32_VERSION = 0.2 +AFBOOT_STM32_SITE = $(call github,mcoquelin-stm32,afboot-stm32,v$(AFBOOT_STM32_VERSION)) +AFBOOT_STM32_INSTALL_IMAGES = YES +AFBOOT_STM32_INSTALL_TARGET = NO + +define AFBOOT_STM32_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) CROSS_COMPILE=$(TARGET_CROSS) all +endef + +define AFBOOT_STM32_INSTALL_IMAGES_CMDS + $(INSTALL) -m 0755 -t $(BINARIES_DIR) -D $(@D)/stm32*.bin +endef + +$(eval $(generic-package)) diff --git a/boot/arm-trusted-firmware/Config.in b/boot/arm-trusted-firmware/Config.in new file mode 100644 index 00000000..26c12670 --- /dev/null +++ b/boot/arm-trusted-firmware/Config.in @@ -0,0 +1,199 @@ +config BR2_TARGET_ARM_TRUSTED_FIRMWARE + bool "ARM Trusted Firmware (ATF)" + depends on (BR2_ARM_CPU_ARMV8A || BR2_ARM_CPU_ARMV7A) && \ + BR2_TARGET_UBOOT + help + Enable this option if you want to build the ATF for your ARM + based embedded device. + + https://github.com/ARM-software/arm-trusted-firmware + +if BR2_TARGET_ARM_TRUSTED_FIRMWARE +choice + prompt "ATF Version" + help + Select the specific ATF version you want to use + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_LATEST_VERSION + bool "v2.4" + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION + bool "Custom version" + help + This option allows to use a specific official versions + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_TARBALL + bool "Custom tarball" + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT + bool "Custom Git repository" + +endchoice + +if BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_TARBALL + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_TARBALL_LOCATION + string "URL of custom ATF tarball" + +endif + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION_VALUE + string "ATF version" + depends on BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_VERSION + string + default "v2.4" if BR2_TARGET_ARM_TRUSTED_FIRMWARE_LATEST_VERSION + default "custom" if BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_TARBALL + default BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION \ + if BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT + default BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION_VALUE \ + if BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION + +if BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL + string "URL of custom repository" + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION + string "Custom repository version" + help + Revision to use in the typical format used by Git + E.G. a sha id, a tag, .. + +endif + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM + string "ATF platform" + help + Target plaform to build for. + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_FIP + bool "Build FIP image" + help + This option enables building the FIP image (Firmware Image + Package). This is typically the image format used by + platforms were ATF encapsulates the second stage bootloader + (such as U-Boot). + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31 + bool "Build BL31 image" + help + This option enables building the BL31 image. This is + typically used on platforms where another bootloader (e.g + U-Boot) encapsulates ATF BL31. + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31_UBOOT + bool "Build BL31 U-Boot image" + select BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31 + help + Generates a U-Boot image named atf-uboot.ub containing + bl31.bin. This is used for example by the Xilinx version of + U-Boot SPL to load ATF on the ZynqMP SoC. + +choice + prompt "BL32" + default BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL32_DEFAULT + help + Select BL32 stage for the trusted firmware + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL32_DEFAULT + bool "Default" + help + With this option selected, ATF will not use any BL32 stage, + unless if one is explicitly chosen using the SPD (for + AArch64) or AARCH32_SP (for AArch32) variables, which can be + passed through + BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_VARIABLES. + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL32_OPTEE + bool "OP-TEE OS" + depends on BR2_TARGET_OPTEE_OS + help + This option allows to embed OP-TEE OS as the BL32 part of + the ARM Trusted Firmware boot sequence. + +endchoice + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_UBOOT_AS_BL33 + bool "Use U-Boot as BL33" + depends on BR2_TARGET_UBOOT + help + This option allows to embed u-boot.bin as the BL33 part of + the ARM Trusted Firmware. It ensures that the u-boot package + gets built before ATF, and that the appropriate BL33 + variable pointing to u-boot.bin is passed when building ATF. + +if BR2_TARGET_ARM_TRUSTED_FIRMWARE_UBOOT_AS_BL33 + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_UBOOT_BL33_IMAGE + string "U-Boot BL33 image name" + default "u-boot.bin" + help + Name of the U-Boot BL33 image to include in ATF, it must + have been installed to BINARIES_DIR by the U-Boot package. + +endif + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_TARGETS + string "Additional ATF make targets" + help + Additional targets for the ATF build + E.G. When using the QorIQ custom ATF repository from NXP, + the target 'pbl' can be used to build the pbl binary. + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_VARIABLES + string "Additional ATF build variables" + help + Additional parameters for the ATF build + E.G. 'DEBUG=1 LOG_LEVEL=20' + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_DEBUG + bool "Build in debug mode" + help + Enable this option to build ATF with DEBUG=1. + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_IMAGES + string "Binary boot images" + default "*.bin" + help + Names of generated image files that are installed in the + output images/ directory. + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_NEEDS_DTC + bool "Needs dtc" + select BR2_PACKAGE_HOST_DTC + help + Select this option if your ATF board configuration + requires the Device Tree compiler to be available. + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_NEEDS_ARM32_TOOLCHAIN + bool "Needs arm-none-eabi toolchain" + depends on BR2_aarch64 + depends on BR2_HOSTARCH = "x86_64" + help + Select this option if your ATF board configuration requires + an ARM32 bare metal toolchain to be available. + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_SSP + bool "Build with SSP" + default y + depends on BR2_TOOLCHAIN_HAS_SSP + depends on !BR2_SSP_NONE + help + Say 'y' here if you want to build ATF with SSP. + + Your board must have SSP support in ATF: it must have an + implementation for plat_get_stack_protector_canary(). + + If you say 'y', the SSP level will be the level selected + by the global SSP setting. + +config BR2_TARGET_ARM_TRUSTED_FIRMWARE_SSP_LEVEL + string + default "none" if !BR2_TARGET_ARM_TRUSTED_FIRMWARE_SSP + default "default" if BR2_SSP_REGULAR + default "strong" if BR2_SSP_STRONG + default "all" if BR2_SSP_ALL + +endif diff --git a/boot/arm-trusted-firmware/arm-trusted-firmware.hash b/boot/arm-trusted-firmware/arm-trusted-firmware.hash new file mode 100644 index 00000000..970613f3 --- /dev/null +++ b/boot/arm-trusted-firmware/arm-trusted-firmware.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 4bfda9fdbe5022f2e88ad3344165f7d38a8ae4a0e2d91d44d9a1603425cc642d arm-trusted-firmware-v2.4.tar.gz +sha256 487795b8023df866259fa159bab94706b747fb0d623b7913f1c4955c0ab5f164 license.rst diff --git a/boot/arm-trusted-firmware/arm-trusted-firmware.mk b/boot/arm-trusted-firmware/arm-trusted-firmware.mk new file mode 100644 index 00000000..d06bc336 --- /dev/null +++ b/boot/arm-trusted-firmware/arm-trusted-firmware.mk @@ -0,0 +1,188 @@ +################################################################################ +# +# arm-trusted-firmware +# +################################################################################ + +ARM_TRUSTED_FIRMWARE_VERSION = $(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_VERSION)) + +ifeq ($(ARM_TRUSTED_FIRMWARE_VERSION),custom) +# Handle custom ATF tarballs as specified by the configuration +ARM_TRUSTED_FIRMWARE_TARBALL = $(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_TARBALL_LOCATION)) +ARM_TRUSTED_FIRMWARE_SITE = $(patsubst %/,%,$(dir $(ARM_TRUSTED_FIRMWARE_TARBALL))) +ARM_TRUSTED_FIRMWARE_SOURCE = $(notdir $(ARM_TRUSTED_FIRMWARE_TARBALL)) +else ifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT),y) +ARM_TRUSTED_FIRMWARE_SITE = $(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL)) +ARM_TRUSTED_FIRMWARE_SITE_METHOD = git +else +# Handle stable official ATF versions +ARM_TRUSTED_FIRMWARE_SITE = $(call github,ARM-software,arm-trusted-firmware,$(ARM_TRUSTED_FIRMWARE_VERSION)) +# The licensing of custom or from-git versions is unknown. +# This is valid only for the official v1.4. +ifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_LATEST_VERSION),y) +ARM_TRUSTED_FIRMWARE_LICENSE = BSD-3-Clause +ARM_TRUSTED_FIRMWARE_LICENSE_FILES = license.rst +endif +endif + +ifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE)$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_LATEST_VERSION),y) +BR_NO_CHECK_HASH_FOR += $(ARM_TRUSTED_FIRMWARE_SOURCE) +endif + +ARM_TRUSTED_FIRMWARE_INSTALL_IMAGES = YES + +ifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_NEEDS_DTC),y) +ARM_TRUSTED_FIRMWARE_DEPENDENCIES += host-dtc +endif + +ifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_NEEDS_ARM32_TOOLCHAIN),y) +ARM_TRUSTED_FIRMWARE_DEPENDENCIES += host-arm-gnu-a-toolchain +endif + +ARM_TRUSTED_FIRMWARE_PLATFORM = $(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM)) + +ifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_DEBUG),y) +ARM_TRUSTED_FIRMWARE_MAKE_OPTS += DEBUG=1 +ARM_TRUSTED_FIRMWARE_IMG_DIR = $(@D)/build/$(ARM_TRUSTED_FIRMWARE_PLATFORM)/debug +else +ARM_TRUSTED_FIRMWARE_IMG_DIR = $(@D)/build/$(ARM_TRUSTED_FIRMWARE_PLATFORM)/release +endif + +ARM_TRUSTED_FIRMWARE_MAKE_OPTS += \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + $(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_VARIABLES)) \ + PLAT=$(ARM_TRUSTED_FIRMWARE_PLATFORM) \ + ENABLE_STACK_PROTECTOR=$(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_SSP_LEVEL)) + +ifeq ($(BR2_ARM_CPU_ARMV7A),y) +ARM_TRUSTED_FIRMWARE_MAKE_OPTS += ARM_ARCH_MAJOR=7 +else ifeq ($(BR2_ARM_CPU_ARMV8A),y) +ARM_TRUSTED_FIRMWARE_MAKE_OPTS += ARM_ARCH_MAJOR=8 +endif + +ifeq ($(BR2_arm),y) +ARM_TRUSTED_FIRMWARE_MAKE_OPTS += ARCH=aarch32 +else ifeq ($(BR2_aarch64),y) +ARM_TRUSTED_FIRMWARE_MAKE_OPTS += ARCH=aarch64 +endif + +ifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL32_OPTEE),y) +ARM_TRUSTED_FIRMWARE_DEPENDENCIES += optee-os +ARM_TRUSTED_FIRMWARE_MAKE_OPTS += \ + BL32=$(BINARIES_DIR)/tee-header_v2.bin \ + BL32_EXTRA1=$(BINARIES_DIR)/tee-pager_v2.bin \ + BL32_EXTRA2=$(BINARIES_DIR)/tee-pageable_v2.bin +ifeq ($(BR2_aarch64),y) +ARM_TRUSTED_FIRMWARE_MAKE_OPTS += SPD=opteed +endif +ifeq ($(BR2_arm),y) +ARM_TRUSTED_FIRMWARE_MAKE_OPTS += AARCH32_SP=optee +endif +endif # BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL32_OPTEE + +ifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_UBOOT_AS_BL33),y) +ARM_TRUSTED_FIRMWARE_UBOOT_BIN = $(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_UBOOT_BL33_IMAGE)) +ARM_TRUSTED_FIRMWARE_MAKE_OPTS += BL33=$(BINARIES_DIR)/$(ARM_TRUSTED_FIRMWARE_UBOOT_BIN) +ARM_TRUSTED_FIRMWARE_DEPENDENCIES += uboot +endif + +ifeq ($(BR2_TARGET_VEXPRESS_FIRMWARE),y) +ARM_TRUSTED_FIRMWARE_MAKE_OPTS += SCP_BL2=$(BINARIES_DIR)/scp-fw.bin +ARM_TRUSTED_FIRMWARE_DEPENDENCIES += vexpress-firmware +endif + +ifeq ($(BR2_TARGET_BINARIES_MARVELL),y) +ARM_TRUSTED_FIRMWARE_MAKE_OPTS += SCP_BL2=$(BINARIES_DIR)/scp-fw.bin +ARM_TRUSTED_FIRMWARE_DEPENDENCIES += binaries-marvell +endif + +ifeq ($(BR2_TARGET_MV_DDR_MARVELL),y) +ARM_TRUSTED_FIRMWARE_MAKE_OPTS += MV_DDR_PATH=$(MV_DDR_MARVELL_DIR) +ARM_TRUSTED_FIRMWARE_DEPENDENCIES += mv-ddr-marvell +endif + +ARM_TRUSTED_FIRMWARE_MAKE_TARGETS = all + +ifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_FIP),y) +ARM_TRUSTED_FIRMWARE_MAKE_TARGETS += fip +ARM_TRUSTED_FIRMWARE_DEPENDENCIES += host-openssl +# fiptool only exists in newer (>= 1.3) versions of ATF, so we build +# it conditionally. We need to explicitly build it as it requires +# OpenSSL, and therefore needs to be passed proper variables to find +# the host OpenSSL. +define ARM_TRUSTED_FIRMWARE_BUILD_FIPTOOL + if test -d $(@D)/tools/fiptool; then \ + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D)/tools/fiptool \ + $(ARM_TRUSTED_FIRMWARE_MAKE_OPTS) \ + CPPFLAGS="$(HOST_CPPFLAGS)" \ + LDLIBS="$(HOST_LDFLAGS) -lcrypto" ; \ + fi +endef +endif + +ifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31),y) +ARM_TRUSTED_FIRMWARE_MAKE_TARGETS += bl31 +endif + +ifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31_UBOOT),y) +define ARM_TRUSTED_FIRMWARE_BL31_UBOOT_BUILD +# Get the entry point address from the elf. + BASE_ADDR=$$($(TARGET_READELF) -h $(ARM_TRUSTED_FIRMWARE_IMG_DIR)/bl31/bl31.elf | \ + sed -r '/^ Entry point address:\s*(.*)/!d; s//\1/') && \ + $(MKIMAGE) \ + -A $(MKIMAGE_ARCH) -O arm-trusted-firmware -C none \ + -a $${BASE_ADDR} -e $${BASE_ADDR} \ + -d $(ARM_TRUSTED_FIRMWARE_IMG_DIR)/bl31.bin \ + $(ARM_TRUSTED_FIRMWARE_IMG_DIR)/atf-uboot.ub +endef +define ARM_TRUSTED_FIRMWARE_BL31_UBOOT_INSTALL + $(INSTALL) -m 0644 $(ARM_TRUSTED_FIRMWARE_IMG_DIR)/atf-uboot.ub \ + $(BINARIES_DIR)/atf-uboot.ub +endef +ARM_TRUSTED_FIRMWARE_MAKE_OPTS += RESET_TO_BL31=1 +ARM_TRUSTED_FIRMWARE_DEPENDENCIES += host-uboot-tools +endif + +ifeq ($(BR2_TARGET_UBOOT_NEEDS_ATF_BL31_ELF),y) +define ARM_TRUSTED_FIRMWARE_BL31_UBOOT_INSTALL_ELF + $(INSTALL) -D -m 0644 $(ARM_TRUSTED_FIRMWARE_IMG_DIR)/bl31/bl31.elf \ + $(BINARIES_DIR)/bl31.elf +endef +endif + +ARM_TRUSTED_FIRMWARE_MAKE_TARGETS += \ + $(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_TARGETS)) + +define ARM_TRUSTED_FIRMWARE_BUILD_CMDS + $(ARM_TRUSTED_FIRMWARE_BUILD_FIPTOOL) + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(ARM_TRUSTED_FIRMWARE_MAKE_OPTS) \ + $(ARM_TRUSTED_FIRMWARE_MAKE_TARGETS) + $(ARM_TRUSTED_FIRMWARE_BL31_UBOOT_BUILD) +endef + +define ARM_TRUSTED_FIRMWARE_INSTALL_IMAGES_CMDS + $(foreach f,$(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_IMAGES)), \ + cp -dpf $(ARM_TRUSTED_FIRMWARE_IMG_DIR)/$(f) $(BINARIES_DIR)/ + ) + $(ARM_TRUSTED_FIRMWARE_BL31_UBOOT_INSTALL) + $(ARM_TRUSTED_FIRMWARE_BL31_UBOOT_INSTALL_ELF) +endef + +# Configuration check +ifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE)$(BR_BUILDING),yy) + +ifeq ($(ARM_TRUSTED_FIRMWARE_VERSION),custom) +ifeq ($(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_TARBALL_LOCATION))),) +$(error No tarball location specified. Please check BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_TARBALL_LOCATION)) +endif +endif + +ifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT),y) +ifeq ($(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL)),) +$(error No repository specified. Please check BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL) +endif +endif + +endif + +$(eval $(generic-package)) diff --git a/boot/at91bootstrap/Config.in b/boot/at91bootstrap/Config.in new file mode 100644 index 00000000..0f6430fd --- /dev/null +++ b/boot/at91bootstrap/Config.in @@ -0,0 +1,49 @@ +config BR2_TARGET_AT91BOOTSTRAP + bool "AT91 Bootstrap" + depends on BR2_arm926t + help + AT91Bootstrap is a first level bootloader for the Atmel AT91 + devices. It integrates algorithms for: + - Device initialization such as clock configuration, PIO + settings... + - Peripheral drivers such as PIO, PMC or SDRAMC... + - Physical media algorithm such as DataFlash, NandFlash, NOR + Flash... + +if BR2_TARGET_AT91BOOTSTRAP + +config BR2_TARGET_AT91BOOTSTRAP_CUSTOM_PATCH_DIR + string "custom patch dir" + help + If your board requires custom patches, add the path to the + directory containing the patches here. The patches must be + named at91bootstrap--.patch. + + Most users may leave this empty + +config BR2_TARGET_AT91BOOTSTRAP_BOARD + string "Bootstrap board" + default "" + help + This is used to do a make _config + +choice + prompt "Boot Memory" + default BR2_TARGET_AT91BOOTSTRAP_DATAFLASH + help + Select Chip for which AT91 bootstrap should be built + +config BR2_TARGET_AT91BOOTSTRAP_DATAFLASH + bool "Data Flash" + +config BR2_TARGET_AT91BOOTSTRAP_NANDFLASH + bool "NAND Flash" + +endchoice + +config BR2_TARGET_AT91BOOTSTRAP_MEMORY + string + default "dataflash" if BR2_TARGET_AT91BOOTSTRAP_DATAFLASH + default "nandflash" if BR2_TARGET_AT91BOOTSTRAP_NANDFLASH + +endif diff --git a/boot/at91bootstrap/at91bootstrap-1.16-eabi-fix.patch b/boot/at91bootstrap/at91bootstrap-1.16-eabi-fix.patch new file mode 100644 index 00000000..eab3c209 --- /dev/null +++ b/boot/at91bootstrap/at91bootstrap-1.16-eabi-fix.patch @@ -0,0 +1,334 @@ +When using an EABI toolchain, the default compilation generates +references to __aeabi_unwind_cpp_pr0(). This symbol is defined in +libgcc, but we don't want to use it for a bootloader. + +Therefore, this patch passes some additional CFLAGS to disable the +generation of such references by avoiding unwind tables, exceptions, +etc. + +Signed-off-by: Thomas Petazzoni +--- + board/at91cap9adk/dataflash/Makefile | 2 +- + board/at91cap9adk/norflash/Makefile | 2 +- + board/at91cap9stk/nandflash/Makefile | 2 +- + board/at91sam9260ek/dataflash/Makefile | 2 +- + board/at91sam9260ek/nandflash/Makefile | 2 +- + board/at91sam9261ek/dataflash/Makefile | 2 +- + board/at91sam9261ek/nandflash/Makefile | 2 +- + board/at91sam9263ek/dataflash/Makefile | 2 +- + board/at91sam9263ek/nandflash/Makefile | 2 +- + board/at91sam9g10ek/dataflash/Makefile | 2 +- + board/at91sam9g10ek/nandflash/Makefile | 2 +- + board/at91sam9g20ek/dataflash/Makefile | 2 +- + board/at91sam9g20ek/nandflash/Makefile | 2 +- + board/at91sam9g45ekes/nandflash/Makefile | 2 +- + board/at91sam9m10ekes/dataflash/Makefile | 2 +- + board/at91sam9m10ekes/nandflash/Makefile | 2 +- + board/at91sam9m10g45ek/dataflash/Makefile | 2 +- + board/at91sam9m10g45ek/nandflash/Makefile | 2 +- + board/at91sam9rlek/dataflash/Makefile | 2 +- + board/at91sam9rlek/nandflash/Makefile | 2 +- + board/at91sam9xeek/dataflash/Makefile | 2 +- + board/at91sam9xeek/nandflash/Makefile | 2 +- + lib/Makefile | 2 +- + 23 files changed, 23 insertions(+), 23 deletions(-) + +Index: Bootstrap-v1.16/board/at91cap9adk/dataflash/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/board/at91cap9adk/dataflash/Makefile ++++ Bootstrap-v1.16/board/at91cap9adk/dataflash/Makefile +@@ -34,7 +34,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm9 -Os -Wall -D$(TARGET) -D$(BOARD) -I$(INCL) ++CCFLAGS=-g -mcpu=arm9 -Os -Wall -D$(TARGET) -D$(BOARD) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm9 -c -Os -Wall -D$(TARGET) -D$(BOARD) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + # Linker flags. +Index: Bootstrap-v1.16/board/at91cap9adk/norflash/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/board/at91cap9adk/norflash/Makefile ++++ Bootstrap-v1.16/board/at91cap9adk/norflash/Makefile +@@ -34,7 +34,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm9 -Os -Wall -D$(TARGET) -D$(BOARD) -I$(INCL) ++CCFLAGS=-g -mcpu=arm9 -Os -Wall -D$(TARGET) -D$(BOARD) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm9 -c -Os -Wall -D$(TARGET) -D$(BOARD) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + # Linker flags. +Index: Bootstrap-v1.16/board/at91cap9stk/nandflash/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/board/at91cap9stk/nandflash/Makefile ++++ Bootstrap-v1.16/board/at91cap9stk/nandflash/Makefile +@@ -37,7 +37,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm9 -Os -Wall -D$(TARGET) -D$(BOARD) -I$(INCL) ++CCFLAGS=-g -mcpu=arm9 -Os -Wall -D$(TARGET) -D$(BOARD) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm9 -c -Os -Wall -D$(TARGET) -D$(BOARD) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + +Index: Bootstrap-v1.16/board/at91sam9260ek/dataflash/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/board/at91sam9260ek/dataflash/Makefile ++++ Bootstrap-v1.16/board/at91sam9260ek/dataflash/Makefile +@@ -37,7 +37,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm926ej-s -Os -Wall -D$(TARGET) -I$(INCL) ++CCFLAGS=-g -mcpu=arm926ej-s -Os -Wall -D$(TARGET) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm926ej-s -c -Os -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + # Linker flags. +Index: Bootstrap-v1.16/board/at91sam9260ek/nandflash/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/board/at91sam9260ek/nandflash/Makefile ++++ Bootstrap-v1.16/board/at91sam9260ek/nandflash/Makefile +@@ -37,7 +37,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm926ej-s -Os -Wall -D$(TARGET) -I$(INCL) ++CCFLAGS=-g -mcpu=arm926ej-s -Os -Wall -D$(TARGET) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm926ej-s -c -Os -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + # Linker flags. +Index: Bootstrap-v1.16/board/at91sam9261ek/dataflash/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/board/at91sam9261ek/dataflash/Makefile ++++ Bootstrap-v1.16/board/at91sam9261ek/dataflash/Makefile +@@ -37,7 +37,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm9 -Os -Wall -D$(TARGET) -I$(INCL) ++CCFLAGS=-g -mcpu=arm9 -Os -Wall -D$(TARGET) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm9 -c -Os -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + # Linker flags. +Index: Bootstrap-v1.16/board/at91sam9261ek/nandflash/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/board/at91sam9261ek/nandflash/Makefile ++++ Bootstrap-v1.16/board/at91sam9261ek/nandflash/Makefile +@@ -37,7 +37,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm9 -Os -Wall -D$(TARGET) -I$(INCL) ++CCFLAGS=-g -mcpu=arm9 -Os -Wall -D$(TARGET) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm9 -c -Os -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + # Linker flags. +Index: Bootstrap-v1.16/board/at91sam9263ek/dataflash/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/board/at91sam9263ek/dataflash/Makefile ++++ Bootstrap-v1.16/board/at91sam9263ek/dataflash/Makefile +@@ -34,7 +34,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm9 -Os -Wall -D$(TARGET) -I$(INCL) ++CCFLAGS=-g -mcpu=arm9 -Os -Wall -D$(TARGET) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm9 -c -Os -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + # Linker flags. +Index: Bootstrap-v1.16/board/at91sam9263ek/nandflash/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/board/at91sam9263ek/nandflash/Makefile ++++ Bootstrap-v1.16/board/at91sam9263ek/nandflash/Makefile +@@ -33,7 +33,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm9 -O0 -Wall -D$(TARGET) -I$(INCL) ++CCFLAGS=-g -mcpu=arm9 -O0 -Wall -D$(TARGET) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm9 -c -Os -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + # Linker flags. +Index: Bootstrap-v1.16/board/at91sam9g10ek/dataflash/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/board/at91sam9g10ek/dataflash/Makefile ++++ Bootstrap-v1.16/board/at91sam9g10ek/dataflash/Makefile +@@ -37,7 +37,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm9 -Os -Wall -D$(TARGET) -I$(INCL) ++CCFLAGS=-g -mcpu=arm9 -Os -Wall -D$(TARGET) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm9 -c -Os -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + # Linker flags. +Index: Bootstrap-v1.16/board/at91sam9g10ek/nandflash/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/board/at91sam9g10ek/nandflash/Makefile ++++ Bootstrap-v1.16/board/at91sam9g10ek/nandflash/Makefile +@@ -37,7 +37,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm9 -Os -Wall -D$(TARGET) -I$(INCL) ++CCFLAGS=-g -mcpu=arm9 -Os -Wall -D$(TARGET) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm9 -c -Os -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + # Linker flags. +Index: Bootstrap-v1.16/board/at91sam9g20ek/dataflash/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/board/at91sam9g20ek/dataflash/Makefile ++++ Bootstrap-v1.16/board/at91sam9g20ek/dataflash/Makefile +@@ -37,7 +37,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm926ej-s -Os -Wall -D$(TARGET) -I$(INCL) ++CCFLAGS=-g -mcpu=arm926ej-s -Os -Wall -D$(TARGET) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm926ej-s -c -Os -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + # Linker flags. +Index: Bootstrap-v1.16/board/at91sam9g20ek/nandflash/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/board/at91sam9g20ek/nandflash/Makefile ++++ Bootstrap-v1.16/board/at91sam9g20ek/nandflash/Makefile +@@ -37,7 +37,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm926ej-s -Os -Wall -D$(TARGET) -I$(INCL) ++CCFLAGS=-g -mcpu=arm926ej-s -Os -Wall -D$(TARGET) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm926ej-s -c -Os -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + # Linker flags. +Index: Bootstrap-v1.16/board/at91sam9g45ekes/nandflash/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/board/at91sam9g45ekes/nandflash/Makefile ++++ Bootstrap-v1.16/board/at91sam9g45ekes/nandflash/Makefile +@@ -37,7 +37,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm926ej-s -O2 -Wall -D$(TARGET) -I$(INCL) ++CCFLAGS=-g -mcpu=arm926ej-s -O2 -Wall -D$(TARGET) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm926ej-s -c -O2 -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + # Linker flags. +Index: Bootstrap-v1.16/board/at91sam9m10ekes/dataflash/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/board/at91sam9m10ekes/dataflash/Makefile ++++ Bootstrap-v1.16/board/at91sam9m10ekes/dataflash/Makefile +@@ -37,7 +37,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm926ej-s -O2 -Wall -D$(TARGET) -I$(INCL) ++CCFLAGS=-g -mcpu=arm926ej-s -O2 -Wall -D$(TARGET) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm926ej-s -c -O2 -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + # Linker flags. +Index: Bootstrap-v1.16/board/at91sam9m10ekes/nandflash/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/board/at91sam9m10ekes/nandflash/Makefile ++++ Bootstrap-v1.16/board/at91sam9m10ekes/nandflash/Makefile +@@ -37,7 +37,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm926ej-s -O2 -Wall -D$(TARGET) -I$(INCL) ++CCFLAGS=-g -mcpu=arm926ej-s -O2 -Wall -D$(TARGET) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm926ej-s -c -O2 -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + # Linker flags. +Index: Bootstrap-v1.16/board/at91sam9m10g45ek/dataflash/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/board/at91sam9m10g45ek/dataflash/Makefile ++++ Bootstrap-v1.16/board/at91sam9m10g45ek/dataflash/Makefile +@@ -37,7 +37,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm926ej-s -O2 -Wall -D$(TARGET) -I$(INCL) ++CCFLAGS=-g -mcpu=arm926ej-s -O2 -Wall -D$(TARGET) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm926ej-s -c -O2 -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + # Linker flags. +Index: Bootstrap-v1.16/board/at91sam9m10g45ek/nandflash/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/board/at91sam9m10g45ek/nandflash/Makefile ++++ Bootstrap-v1.16/board/at91sam9m10g45ek/nandflash/Makefile +@@ -37,7 +37,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm926ej-s -O2 -Wall -D$(TARGET) -I$(INCL) ++CCFLAGS=-g -mcpu=arm926ej-s -O2 -Wall -D$(TARGET) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm926ej-s -c -O2 -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + # Linker flags. +Index: Bootstrap-v1.16/board/at91sam9rlek/dataflash/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/board/at91sam9rlek/dataflash/Makefile ++++ Bootstrap-v1.16/board/at91sam9rlek/dataflash/Makefile +@@ -37,7 +37,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm926ej-s -Os -Wall -D$(TARGET) -I$(INCL) ++CCFLAGS=-g -mcpu=arm926ej-s -Os -Wall -D$(TARGET) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm926ej-s -c -Os -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + # Linker flags. +Index: Bootstrap-v1.16/board/at91sam9rlek/nandflash/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/board/at91sam9rlek/nandflash/Makefile ++++ Bootstrap-v1.16/board/at91sam9rlek/nandflash/Makefile +@@ -37,7 +37,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm926ej-s -Os -Wall -D$(TARGET) -I$(INCL) ++CCFLAGS=-g -mcpu=arm926ej-s -Os -Wall -D$(TARGET) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm926ej-s -c -Os -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + # Linker flags. +Index: Bootstrap-v1.16/board/at91sam9xeek/dataflash/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/board/at91sam9xeek/dataflash/Makefile ++++ Bootstrap-v1.16/board/at91sam9xeek/dataflash/Makefile +@@ -38,7 +38,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm9 -Os -Wall -D$(TARGET) -I$(INCL) ++CCFLAGS=-g -mcpu=arm9 -Os -Wall -D$(TARGET) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm9 -c -Os -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + # Linker flags. +Index: Bootstrap-v1.16/board/at91sam9xeek/nandflash/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/board/at91sam9xeek/nandflash/Makefile ++++ Bootstrap-v1.16/board/at91sam9xeek/nandflash/Makefile +@@ -38,7 +38,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm9 -Os -Wall -D$(TARGET) -I$(INCL) ++CCFLAGS=-g -mcpu=arm9 -Os -Wall -D$(TARGET) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm9 -c -Os -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + # Linker flags. +Index: Bootstrap-v1.16/lib/Makefile +=================================================================== +--- Bootstrap-v1.16.orig/lib/Makefile ++++ Bootstrap-v1.16/lib/Makefile +@@ -37,7 +37,7 @@ + SIZE=$(CROSS_COMPILE)size + OBJCOPY=$(CROSS_COMPILE)objcopy + OBJDUMP=$(CROSS_COMPILE)objdump +-CCFLAGS=-g -mcpu=arm926ej-s -Os -Wall -D$(TARGET) -I$(INCL) ++CCFLAGS=-g -mcpu=arm926ej-s -Os -Wall -D$(TARGET) -I$(INCL) -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables + ASFLAGS=-g -mcpu=arm926ej-s -c -Os -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) + + # Linker flags. diff --git a/boot/at91bootstrap/at91bootstrap-1.16-gcc-4.6.x-ldscript-fix.patch b/boot/at91bootstrap/at91bootstrap-1.16-gcc-4.6.x-ldscript-fix.patch new file mode 100644 index 00000000..e4ed04e8 --- /dev/null +++ b/boot/at91bootstrap/at91bootstrap-1.16-gcc-4.6.x-ldscript-fix.patch @@ -0,0 +1,29 @@ +From b783d1f9bf985c0981e755bd2c13e091e9d6837f Mon Sep 17 00:00:00 2001 +From: Gregory Hermant +Date: Tue, 6 Nov 2012 09:38:50 +0100 +Subject: [PATCH] at91bootstrap: fix overlap linker issue + +The linker script of the at91bootstrap package has to be modified when +built from gcc-4.6.x version. Indeed a section named text.startup is +created and has to be added into the text section. + +Signed-off-by: Gregory Hermant +--- + elf32-littlearm.lds | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/elf32-littlearm.lds b/elf32-littlearm.lds +index a33952f..4f3ba25 100644 +--- a/elf32-littlearm.lds ++++ b/elf32-littlearm.lds +@@ -7,6 +7,7 @@ SECTIONS + .text : { + _stext = .; + *(.text) ++ *(.text*) + *(.rodata) /* read-only data (constants) */ + *(.rodata*) + . = ALIGN(4); +-- +1.7.9.5 + diff --git a/boot/at91bootstrap/at91bootstrap-1.16-u-boot-relocation-fix.patch b/boot/at91bootstrap/at91bootstrap-1.16-u-boot-relocation-fix.patch new file mode 100644 index 00000000..0c9b9114 --- /dev/null +++ b/boot/at91bootstrap/at91bootstrap-1.16-u-boot-relocation-fix.patch @@ -0,0 +1,284 @@ +From d4e4a1aad559e35d84b445d1379be94ad036984e Mon Sep 17 00:00:00 2001 +From: Alexandre Belloni +Date: Thu, 25 Oct 2012 22:57:14 +0200 +Subject: [PATCH] u-boot relocation fix + +Every AT91SAM plaforms were broken between 2010.12 and 2011.03 because +of the relocation changes. + +We have to get JUMP_ADDR consistant with what is used by u-boot +(CONFIG_SYS_TEXT_BASE). + +I didn't know what to do with at91sam9m10g45ek as it doesn't seems to be +converted yet. But anyway, that means that it is either not working or +doesn't care so changing it here shouldn't harm. + +We also have to increase the IMG_SIZE as u-boot as grown larger than the +default value. As requested on the u-boot ML, we assume that it could +be up to 495kB big. + +It means that now, you have to flash your kernel at 0x00084000 instead +of 0x00042000. And so you also have to load it from that adress from +u-boot. + +Then, remember that you could decrease IMG_SIZE to boot faster. + +Signed-off-by: Alexandre Belloni +--- + board/at91sam9260ek/dataflash/at91sam9260ek.h | 4 ++-- + board/at91sam9260ek/nandflash/at91sam9260ek.h | 2 +- + board/at91sam9261ek/dataflash/at91sam9261ek.h | 4 ++-- + board/at91sam9261ek/nandflash/at91sam9261ek.h | 2 +- + board/at91sam9263ek/dataflash/at91sam9263ek.h | 4 ++-- + board/at91sam9263ek/nandflash/at91sam9263ek.h | 2 +- + board/at91sam9g10ek/dataflash/at91sam9g10ek.h | 4 ++-- + board/at91sam9g10ek/nandflash/at91sam9g10ek.h | 2 +- + board/at91sam9g20ek/dataflash/at91sam9g20ek.h | 4 ++-- + board/at91sam9g20ek/nandflash/at91sam9g20ek.h | 2 +- + board/at91sam9m10ekes/dataflash/at91sam9m10ekes.h | 2 +- + .../at91sam9m10g45ek/dataflash/at91sam9m10g45ek.h | 2 +- + board/at91sam9rlek/dataflash/at91sam9rlek.h | 4 ++-- + board/at91sam9rlek/nandflash/at91sam9rlek.h | 2 +- + board/at91sam9xeek/dataflash/at91sam9xeek.h | 4 ++-- + board/at91sam9xeek/nandflash/at91sam9xeek.h | 2 +- + 16 files changed, 23 insertions(+), 23 deletions(-) + +diff --git a/board/at91sam9260ek/dataflash/at91sam9260ek.h b/board/at91sam9260ek/dataflash/at91sam9260ek.h +index 1834246..91081a1 100644 +--- a/board/at91sam9260ek/dataflash/at91sam9260ek.h ++++ b/board/at91sam9260ek/dataflash/at91sam9260ek.h +@@ -74,10 +74,10 @@ + #define AT91C_SPI_PCS_DATAFLASH AT91C_SPI_PCS1_DATAFLASH /* Boot on SPI NCS0 */ + + #define IMG_ADDRESS 0x8400 /* Image Address in DataFlash */ +-#define IMG_SIZE 0x33900 /* Image Size in DataFlash */ ++#define IMG_SIZE 0x7BC00 /* Image Size in DataFlash */ + + #define MACH_TYPE 0x44B /* AT91SAM9260-EK */ +-#define JUMP_ADDR 0x23F00000 /* Final Jump Address */ ++#define JUMP_ADDR 0x21F00000 /* Final Jump Address */ + + /* ******************************************************************* */ + /* Application Settings */ +diff --git a/board/at91sam9260ek/nandflash/at91sam9260ek.h b/board/at91sam9260ek/nandflash/at91sam9260ek.h +index 2cac601..f8fdff2 100644 +--- a/board/at91sam9260ek/nandflash/at91sam9260ek.h ++++ b/board/at91sam9260ek/nandflash/at91sam9260ek.h +@@ -92,7 +92,7 @@ + #define IMG_SIZE 0x40000 /* Image Size in NandFlash */ + + #define MACH_TYPE 0x44B /* AT91SAM9260-EK */ +-#define JUMP_ADDR 0x23F00000 /* Final Jump Address */ ++#define JUMP_ADDR 0x21F00000 /* Final Jump Address */ + + /* ******************************************************************* */ + /* Application Settings */ +diff --git a/board/at91sam9261ek/dataflash/at91sam9261ek.h b/board/at91sam9261ek/dataflash/at91sam9261ek.h +index 8ce30e9..276ba3d 100644 +--- a/board/at91sam9261ek/dataflash/at91sam9261ek.h ++++ b/board/at91sam9261ek/dataflash/at91sam9261ek.h +@@ -97,10 +97,10 @@ + #define AT91C_SPI_PCS_DATAFLASH AT91C_SPI_PCS0_DATAFLASH /* Boot on SPI NCS0 */ + + #define IMG_ADDRESS 0x8400 /* Image Address in DataFlash */ +-#define IMG_SIZE 0x33900 /* Image Size in DataFlash */ ++#define IMG_SIZE 0x7BC00 /* Image Size in DataFlash */ + + #define MACH_TYPE 0x350 /* AT91SAM9261-EK */ +-#define JUMP_ADDR 0x23F00000 /* Final Jump Address */ ++#define JUMP_ADDR 0x21F00000 /* Final Jump Address */ + + /* ******************************************************************* */ + /* Application Settings */ +diff --git a/board/at91sam9261ek/nandflash/at91sam9261ek.h b/board/at91sam9261ek/nandflash/at91sam9261ek.h +index badc3ac..e628c97 100644 +--- a/board/at91sam9261ek/nandflash/at91sam9261ek.h ++++ b/board/at91sam9261ek/nandflash/at91sam9261ek.h +@@ -114,7 +114,7 @@ + #define IMG_SIZE 0x40000 /* Image Size in NandFlash */ + + #define MACH_TYPE 0x350 /* AT91SAM9261-EK */ +-#define JUMP_ADDR 0x23F00000 /* Final Jump Address */ ++#define JUMP_ADDR 0x21F00000 /* Final Jump Address */ + + /* ******************************************************************* */ + /* Application Settings */ +diff --git a/board/at91sam9263ek/dataflash/at91sam9263ek.h b/board/at91sam9263ek/dataflash/at91sam9263ek.h +index 5c9da4b..870f9e2 100644 +--- a/board/at91sam9263ek/dataflash/at91sam9263ek.h ++++ b/board/at91sam9263ek/dataflash/at91sam9263ek.h +@@ -96,10 +96,10 @@ + #define AT91C_SPI_PCS_DATAFLASH AT91C_SPI_PCS0_DATAFLASH /* Boot on SPI NCS0 */ + + #define IMG_ADDRESS 0x8400 /* Image Address in DataFlash */ +-#define IMG_SIZE 0x33900 /* Image Size in DataFlash */ ++#define IMG_SIZE 0x7BC00 /* Image Size in DataFlash */ + + #define MACH_TYPE 0x4B2 /* AT91SAM9263-EK */ +-#define JUMP_ADDR 0x23F00000 /* Final Jump Address */ ++#define JUMP_ADDR 0x21F00000 /* Final Jump Address */ + + /* ******************************************************************* */ + /* Application Settings */ +diff --git a/board/at91sam9263ek/nandflash/at91sam9263ek.h b/board/at91sam9263ek/nandflash/at91sam9263ek.h +index 505afc7..8ab4f46 100644 +--- a/board/at91sam9263ek/nandflash/at91sam9263ek.h ++++ b/board/at91sam9263ek/nandflash/at91sam9263ek.h +@@ -108,7 +108,7 @@ + #define IMG_SIZE 0x40000 /* Image Size in NandFlash */ + + #define MACH_TYPE 1202 /* AT91SAM9263-EK */ +-#define JUMP_ADDR 0x23F00000 /* Final Jump Address */ ++#define JUMP_ADDR 0x21F00000 /* Final Jump Address */ + + /* ******************************************************************* */ + /* Application Settings */ +diff --git a/board/at91sam9g10ek/dataflash/at91sam9g10ek.h b/board/at91sam9g10ek/dataflash/at91sam9g10ek.h +index b2faf44..f4f556b 100644 +--- a/board/at91sam9g10ek/dataflash/at91sam9g10ek.h ++++ b/board/at91sam9g10ek/dataflash/at91sam9g10ek.h +@@ -98,10 +98,10 @@ + #define AT91C_SPI_PCS_DATAFLASH AT91C_SPI_PCS0_DATAFLASH /* Boot on SPI NCS0 */ + + #define IMG_ADDRESS 0x8400 /* Image Address in DataFlash */ +-#define IMG_SIZE 0x33900 /* Image Size in DataFlash */ ++#define IMG_SIZE 0x7BC00 /* Image Size in DataFlash */ + + #define MACH_TYPE 0x350 /* AT91SAM9261-EK */ +-#define JUMP_ADDR 0x23F00000 /* Final Jump Address */ ++#define JUMP_ADDR 0x21F00000 /* Final Jump Address */ + + /* ******************************************************************* */ + /* Application Settings */ +diff --git a/board/at91sam9g10ek/nandflash/at91sam9g10ek.h b/board/at91sam9g10ek/nandflash/at91sam9g10ek.h +index 66c40a3..6c3ecda 100644 +--- a/board/at91sam9g10ek/nandflash/at91sam9g10ek.h ++++ b/board/at91sam9g10ek/nandflash/at91sam9g10ek.h +@@ -115,7 +115,7 @@ + #define IMG_SIZE 0x40000 /* Image Size in NandFlash */ + + #define MACH_TYPE 0x350 /* AT91SAM9G10-EK */ +-#define JUMP_ADDR 0x23F00000 /* Final Jump Address */ ++#define JUMP_ADDR 0x21F00000 /* Final Jump Address */ + + /* ******************************************************************* */ + /* Application Settings */ +diff --git a/board/at91sam9g20ek/dataflash/at91sam9g20ek.h b/board/at91sam9g20ek/dataflash/at91sam9g20ek.h +index eea0439..7fc70d6 100644 +--- a/board/at91sam9g20ek/dataflash/at91sam9g20ek.h ++++ b/board/at91sam9g20ek/dataflash/at91sam9g20ek.h +@@ -75,10 +75,10 @@ + #define AT91C_SPI_PCS_DATAFLASH AT91C_SPI_PCS1_DATAFLASH /* Boot on SPI NCS1 */ + + #define IMG_ADDRESS 0x8400 /* Image Address in DataFlash */ +-#define IMG_SIZE 0x33900 /* Image Size in DataFlash */ ++#define IMG_SIZE 0x7BC00 /* Image Size in DataFlash */ + + #define MACH_TYPE 0x658 /* AT91SAM9G20-EK */ +-#define JUMP_ADDR 0x23F00000 /* Final Jump Address */ ++#define JUMP_ADDR 0x21F00000 /* Final Jump Address */ + + /* ******************************************************************* */ + /* Application Settings */ +diff --git a/board/at91sam9g20ek/nandflash/at91sam9g20ek.h b/board/at91sam9g20ek/nandflash/at91sam9g20ek.h +index 31bd499..e797e4d 100644 +--- a/board/at91sam9g20ek/nandflash/at91sam9g20ek.h ++++ b/board/at91sam9g20ek/nandflash/at91sam9g20ek.h +@@ -93,7 +93,7 @@ + #define IMG_SIZE 0x40000 /* Image Size in NandFlash */ + + #define MACH_TYPE 0x658 /* AT91SAM9G20-EK */ +-#define JUMP_ADDR 0x23F00000 /* Final Jump Address */ ++#define JUMP_ADDR 0x21F00000 /* Final Jump Address */ + + /* ******************************************************************* */ + /* Application Settings */ +diff --git a/board/at91sam9m10ekes/dataflash/at91sam9m10ekes.h b/board/at91sam9m10ekes/dataflash/at91sam9m10ekes.h +index a60fd41..5587a00 100644 +--- a/board/at91sam9m10ekes/dataflash/at91sam9m10ekes.h ++++ b/board/at91sam9m10ekes/dataflash/at91sam9m10ekes.h +@@ -89,7 +89,7 @@ + #define AT91C_SPI_PCS_DATAFLASH AT91C_SPI_PCS0_DATAFLASH /* Boot on SPI NCS0 */ + + #define IMG_ADDRESS 0x8400 /* Image Address in DataFlash */ +-#define IMG_SIZE 0x33900 /* Image Size in DataFlash */ ++#define IMG_SIZE 0x7BC00 /* Image Size in DataFlash */ + + #define MACH_TYPE 0x9CD /* AT91SAM9M10-EKES */ + #define JUMP_ADDR 0x73F00000 /* Final Jump Address */ +diff --git a/board/at91sam9m10g45ek/dataflash/at91sam9m10g45ek.h b/board/at91sam9m10g45ek/dataflash/at91sam9m10g45ek.h +index 5c726b5..9090097 100644 +--- a/board/at91sam9m10g45ek/dataflash/at91sam9m10g45ek.h ++++ b/board/at91sam9m10g45ek/dataflash/at91sam9m10g45ek.h +@@ -85,7 +85,7 @@ + #define AT91C_SPI_PCS_DATAFLASH AT91C_SPI_PCS0_DATAFLASH /* Boot on SPI NCS0 */ + + #define IMG_ADDRESS 0x8400 /* Image Address in DataFlash */ +-#define IMG_SIZE 0x33900 /* Image Size in DataFlash */ ++#define IMG_SIZE 0x7BC00 /* Image Size in DataFlash */ + + #define MACH_TYPE 0x726 /* AT91SAM9M10G45-EK */ + #define JUMP_ADDR 0x73F00000 /* Final Jump Address */ +diff --git a/board/at91sam9rlek/dataflash/at91sam9rlek.h b/board/at91sam9rlek/dataflash/at91sam9rlek.h +index 05c42dc..150f17e 100644 +--- a/board/at91sam9rlek/dataflash/at91sam9rlek.h ++++ b/board/at91sam9rlek/dataflash/at91sam9rlek.h +@@ -89,10 +89,10 @@ + #define AT91C_SPI_PCS_DATAFLASH AT91C_SPI_PCS0_DATAFLASH /* Boot on SPI NCS0 */ + + #define IMG_ADDRESS 0x8400 /* Image Address in DataFlash */ +-#define IMG_SIZE 0x33900 /* Image Size in DataFlash */ ++#define IMG_SIZE 0x7BC00 /* Image Size in DataFlash */ + + #define MACH_TYPE 1326 /* AT91SAM9RL-EK */ +-#define JUMP_ADDR 0x23F00000 /* Final Jump Address */ ++#define JUMP_ADDR 0x21F00000 /* Final Jump Address */ + + /* ******************************************************************* */ + /* Application Settings */ +diff --git a/board/at91sam9rlek/nandflash/at91sam9rlek.h b/board/at91sam9rlek/nandflash/at91sam9rlek.h +index 656b4ba..594db8f 100644 +--- a/board/at91sam9rlek/nandflash/at91sam9rlek.h ++++ b/board/at91sam9rlek/nandflash/at91sam9rlek.h +@@ -112,7 +112,7 @@ + #define IMG_SIZE 0x40000 /* Image Size in NandFlash */ + + #define MACH_TYPE 1326 /* AT91SAM9RL-EK */ +-#define JUMP_ADDR 0x23F00000 /* Final Jump Address */ ++#define JUMP_ADDR 0x21F00000 /* Final Jump Address */ + + /* ******************************************************************* */ + /* Application Settings */ +diff --git a/board/at91sam9xeek/dataflash/at91sam9xeek.h b/board/at91sam9xeek/dataflash/at91sam9xeek.h +index 27d1822..08e515d 100644 +--- a/board/at91sam9xeek/dataflash/at91sam9xeek.h ++++ b/board/at91sam9xeek/dataflash/at91sam9xeek.h +@@ -74,10 +74,10 @@ + #define AT91C_SPI_PCS_DATAFLASH AT91C_SPI_PCS1_DATAFLASH /* Boot on SPI NCS1 */ + + #define IMG_ADDRESS 0x8400 /* Image Address in DataFlash */ +-#define IMG_SIZE 0x33900 /* Image Size in DataFlash */ ++#define IMG_SIZE 0x7BC00 /* Image Size in DataFlash */ + + #define MACH_TYPE 0x44B /* AT91SAM9XE-EK same id as AT91SAM9260-EK*/ +-#define JUMP_ADDR 0x23F00000 /* Final Jump Address */ ++#define JUMP_ADDR 0x21F00000 /* Final Jump Address */ + + /* ******************************************************************* */ + /* Application Settings */ +diff --git a/board/at91sam9xeek/nandflash/at91sam9xeek.h b/board/at91sam9xeek/nandflash/at91sam9xeek.h +index 5dbc63e..9fac7cb 100644 +--- a/board/at91sam9xeek/nandflash/at91sam9xeek.h ++++ b/board/at91sam9xeek/nandflash/at91sam9xeek.h +@@ -94,7 +94,7 @@ + #define IMG_SIZE 0x40000 /* Image Size in NandFlash */ + + #define MACH_TYPE 0x44B /* AT91SAM9XE-EK same id as AT91SAM9260-EK*/ +-#define JUMP_ADDR 0x23F00000 /* Final Jump Address */ ++#define JUMP_ADDR 0x21F00000 /* Final Jump Address */ + + /* ******************************************************************* */ + /* Application Settings */ +-- +1.7.9.5 + diff --git a/boot/at91bootstrap/at91bootstrap.hash b/boot/at91bootstrap/at91bootstrap.hash new file mode 100644 index 00000000..d9f8db88 --- /dev/null +++ b/boot/at91bootstrap/at91bootstrap.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 d66192a274247f4baa39fa932eadf903d7add55641d89d30402f967c4f2282a5 AT91Bootstrap1.16.zip +sha256 6a3ac5dfcf19e6bac1b1109d30d72818768a3855e2594b84fe2b012b5fe0e77b include/sdramc.h diff --git a/boot/at91bootstrap/at91bootstrap.mk b/boot/at91bootstrap/at91bootstrap.mk new file mode 100644 index 00000000..1a084756 --- /dev/null +++ b/boot/at91bootstrap/at91bootstrap.mk @@ -0,0 +1,49 @@ +################################################################################ +# +# at91bootstrap +# +################################################################################ + +AT91BOOTSTRAP_VERSION = 1.16 +AT91BOOTSTRAP_SITE = ftp://www.at91.com/pub/at91bootstrap +AT91BOOTSTRAP_SOURCE = AT91Bootstrap$(AT91BOOTSTRAP_VERSION).zip +AT91BOOTSTRAP_LICENSE = BSD-Source-Code +AT91BOOTSTRAP_LICENSE_FILES = include/sdramc.h + +AT91BOOTSTRAP_BOARD = $(call qstrip,$(BR2_TARGET_AT91BOOTSTRAP_BOARD)) +AT91BOOTSTRAP_MEMORY = $(call qstrip,$(BR2_TARGET_AT91BOOTSTRAP_MEMORY)) +AT91BOOTSTRAP_MAKE_SUBDIR = board/$(AT91BOOTSTRAP_BOARD)/$(AT91BOOTSTRAP_MEMORY) +AT91BOOTSTRAP_BINARY = $(AT91BOOTSTRAP_MAKE_SUBDIR)/$(AT91BOOTSTRAP_MEMORY)_$(AT91BOOTSTRAP_BOARD).bin + +AT91BOOTSTRAP_INSTALL_IMAGES = YES +AT91BOOTSTRAP_INSTALL_TARGET = NO + +define AT91BOOTSTRAP_EXTRACT_CMDS + $(UNZIP) -d $(BUILD_DIR) $(AT91BOOTSTRAP_DL_DIR)/$(AT91BOOTSTRAP_SOURCE) + mv $(BUILD_DIR)/Bootstrap-v$(AT91BOOTSTRAP_VERSION)/* $(@D) + rmdir $(BUILD_DIR)/Bootstrap-v$(AT91BOOTSTRAP_VERSION) +endef + +ifneq ($(call qstrip,$(BR2_TARGET_AT91BOOTSTRAP_CUSTOM_PATCH_DIR)),) +define AT91BOOTSTRAP_APPLY_CUSTOM_PATCHES + $(APPLY_PATCHES) $(@D) $(BR2_TARGET_AT91BOOTSTRAP_CUSTOM_PATCH_DIR) \*.patch +endef + +AT91BOOTSTRAP_POST_PATCH_HOOKS += AT91BOOTSTRAP_APPLY_CUSTOM_PATCHES +endif + +define AT91BOOTSTRAP_BUILD_CMDS + $(MAKE1) CROSS_COMPILE=$(TARGET_CROSS) -C $(@D)/$(AT91BOOTSTRAP_MAKE_SUBDIR) +endef + +define AT91BOOTSTRAP_INSTALL_IMAGES_CMDS + cp $(@D)/$(AT91BOOTSTRAP_BINARY) $(BINARIES_DIR) +endef + +$(eval $(generic-package)) + +ifeq ($(BR2_TARGET_AT91BOOTSTRAP)$(BR_BUILDING),yy) +ifeq ($(AT91BOOTSTRAP_BOARD),) +$(error No AT91Bootstrap board name set. Check your BR2_TARGET_AT91BOOTSTRAP_BOARD setting) +endif +endif diff --git a/boot/at91bootstrap3/Config.in b/boot/at91bootstrap3/Config.in new file mode 100644 index 00000000..25ab3048 --- /dev/null +++ b/boot/at91bootstrap3/Config.in @@ -0,0 +1,99 @@ +config BR2_TARGET_AT91BOOTSTRAP3 + bool "AT91 Bootstrap 3" + depends on BR2_arm926t || BR2_cortex_a5 || BR2_cortex_a7 + help + AT91Bootstrap is a first level bootloader for the Atmel AT91 + devices. It integrates algorithms for: + - Device initialization such as clock configuration, PIO + settings... + - Peripheral drivers such as PIO, PMC or SDRAMC... + - Physical media algorithm such as DataFlash, NandFlash, NOR + Flash... + + https://www.at91.com/linux4sam/bin/view/Linux4SAM/AT91Bootstrap + +if BR2_TARGET_AT91BOOTSTRAP3 + +choice + + prompt "AT91 Bootstrap 3 version" + +config BR2_TARGET_AT91BOOTSTRAP3_LATEST_VERSION + bool "3.9.3" + +config BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_GIT + bool "Custom Git repository" + help + This option allows Buildroot to get the AT91 Bootstrap 3 + source code from a Git repository. + +config BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL + bool "Custom tarball" + +endchoice + +config BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL_LOCATION + string "URL of custom AT91Bootstrap tarball" + depends on BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL + +if BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_GIT + +config BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_URL + string "URL of custom repository" + +config BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_VERSION + string "Custom repository version" + help + Revision to use in the typical format used by Git + E.G. a sha id, a tag, branch, .. + +endif + +config BR2_TARGET_AT91BOOTSTRAP3_VERSION + string + default "v3.9.3" if BR2_TARGET_AT91BOOTSTRAP3_LATEST_VERSION + default BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_VERSION \ + if BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_GIT + default "custom" if BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL + +config BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_PATCH_DIR + string "custom patch dir" + help + If your board requires custom patches, add the path to the + directory containing the patches here. The patches must be + named at91bootstrap3-.patch. + + Most users may leave this empty + +# +# Configuration selection +# + +choice + prompt "AT91 Bootstrap 3 configuration" + default BR2_TARGET_AT91BOOTSTRAP3_USE_DEFCONFIG + +config BR2_TARGET_AT91BOOTSTRAP3_USE_DEFCONFIG + bool "Using a defconfig" + +config BR2_TARGET_AT91BOOTSTRAP3_USE_CUSTOM_CONFIG + bool "Using a custom config file" + +endchoice + +config BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG + string "Defconfig name" + depends on BR2_TARGET_AT91BOOTSTRAP3_USE_DEFCONFIG + help + Name of the at91bootstrap3 defconfig file to use, without the + trailing _defconfig. The defconfig is located at + board//_defconfig in the at91bootstrap3 + tree. + +config BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_CONFIG_FILE + string "Configuration file path" + depends on BR2_TARGET_AT91BOOTSTRAP3_USE_CUSTOM_CONFIG + help + Path to the at91bootstrap3 configuration file + +endif # BR2_TARGET_AT91BOOTSTRAP3 diff --git a/boot/at91bootstrap3/at91bootstrap3.hash b/boot/at91bootstrap3/at91bootstrap3.hash new file mode 100644 index 00000000..6b6257b0 --- /dev/null +++ b/boot/at91bootstrap3/at91bootstrap3.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 dd6a3c57c1c84fc3b18187bee3d139146a0e032dd1d8edea7b242730e0bc4fe1 at91bootstrap3-v3.9.3.tar.gz +sha256 fd7a1ce5719bb7abf5e289da2e0ea8c933af3ba0f6ad03dbdbd2b7f54a77498a main.c diff --git a/boot/at91bootstrap3/at91bootstrap3.mk b/boot/at91bootstrap3/at91bootstrap3.mk new file mode 100644 index 00000000..a942afcd --- /dev/null +++ b/boot/at91bootstrap3/at91bootstrap3.mk @@ -0,0 +1,99 @@ +################################################################################ +# +# at91bootstrap3 +# +################################################################################ + +AT91BOOTSTRAP3_VERSION = $(call qstrip,$(BR2_TARGET_AT91BOOTSTRAP3_VERSION)) + +ifeq ($(BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL),y) +AT91BOOTSTRAP3_TARBALL = $(call qstrip,$(BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL_LOCATION)) +AT91BOOTSTRAP3_SITE = $(patsubst %/,%,$(dir $(AT91BOOTSTRAP3_TARBALL))) +AT91BOOTSTRAP3_SOURCE = $(notdir $(AT91BOOTSTRAP3_TARBALL)) +BR_NO_CHECK_HASH_FOR += $(AT91BOOTSTRAP3_SOURCE) +else ifeq ($(BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_GIT),y) +AT91BOOTSTRAP3_SITE = $(call qstrip,$(BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_URL)) +AT91BOOTSTRAP3_SITE_METHOD = git +BR_NO_CHECK_HASH_FOR += $(AT91BOOTSTRAP3_SOURCE) +else +AT91BOOTSTRAP3_SITE = $(call github,linux4sam,at91bootstrap,$(AT91BOOTSTRAP3_VERSION)) +endif + +AT91BOOTSTRAP3_LICENSE = Atmel License +ifeq ($(BR2_TARGET_AT91BOOTSTRAP3_LATEST_VERSION),y) +AT91BOOTSTRAP3_LICENSE_FILES = main.c +endif + +AT91BOOTSTRAP3_CPE_ID_VENDOR = linux4sam +AT91BOOTSTRAP3_CPE_ID_PRODUCT = at91bootstrap + +AT91BOOTSTRAP3_INSTALL_IMAGES = YES +AT91BOOTSTRAP3_INSTALL_TARGET = NO + +AT91BOOTSTRAP3_CUSTOM_PATCH_DIR = \ + $(call qstrip,$(BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_PATCH_DIR)) + +AT91BOOTSTRAP3_MAKE_OPTS = CROSS_COMPILE=$(TARGET_CROSS) DESTDIR=$(BINARIES_DIR) + +ifneq ($(AT91BOOTSTRAP3_CUSTOM_PATCH_DIR),) +define AT91BOOTSTRAP3_APPLY_CUSTOM_PATCHES + $(APPLY_PATCHES) $(@D) $(AT91BOOTSTRAP3_CUSTOM_PATCH_DIR) \*.patch +endef + +AT91BOOTSTRAP3_POST_PATCH_HOOKS += AT91BOOTSTRAP3_APPLY_CUSTOM_PATCHES +endif + +define AT91BOOTSTRAP3_BUILD_CMDS + $(MAKE) $(AT91BOOTSTRAP3_MAKE_OPTS) -C $(@D) +endef + +define AT91BOOTSTRAP3_INSTALL_IMAGES_CMDS + cp $(@D)/binaries/*.bin $(BINARIES_DIR) +endef + +ifeq ($(BR2_TARGET_AT91BOOTSTRAP3_USE_DEFCONFIG),y) +AT91BOOTSTRAP3_KCONFIG_DEFCONFIG = $(call qstrip,$(BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG))_defconfig +else ifeq ($(BR2_TARGET_AT91BOOTSTRAP3_USE_CUSTOM_CONFIG),y) +AT91BOOTSTRAP3_KCONFIG_FILE = $(call qstrip,$(BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_CONFIG_FILE)) +endif + +AT91BOOTSTRAP3_KCONFIG_EDITORS = menuconfig xconfig gconfig +AT91BOOTSTRAP3_KCONFIG_OPTS = $(AT91BOOTSTRAP3_MAKE_OPTS) + +# Checks to give errors that the user can understand +# Must be before we call to kconfig-package +ifeq ($(BR_BUILDING),y) + +ifeq ($(BR2_TARGET_AT91BOOTSTRAP3_USE_DEFCONFIG),y) +# We must use the user-supplied kconfig value, because +# AT91BOOTSTRAP3_KCONFIG_DEFCONFIG will at least contain +# the trailing _defconfig +ifeq ($(call qstrip,$(BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG)),) +$(error No at91bootstrap3 defconfig name specified, check your BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG setting) +endif +endif + +ifeq ($(BR2_TARGET_AT91BOOTSTRAP3_USE_CUSTOM_CONFIG),y) +ifeq ($(AT91BOOTSTRAP3_KCONFIG_FILE),) +$(error No at91bootstrap3 configuration file specified, check your BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_CONFIG_FILE setting) +endif +endif + +ifeq ($(BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_GIT),y) +ifeq ($(call qstrip,$(BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_URL)),) +$(error No custom at91bootstrap3 repository URL specified. Check your BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_URL setting) +endif +ifeq ($(call qstrip,$(BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_VERSION)),) +$(error No custom at91bootstrap3 repository version specified. Check your BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_VERSION setting) +endif +endif + +ifeq ($(BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL),y) +ifeq ($(call qstrip,$(BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL_LOCATION)),) +$(error No custom AT91Bootstrap3 tarball specified. Check your BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL_LOCATION setting) +endif # qstrip BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL_LOCATION +endif # BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL + +endif # BR_BUILDING + +$(eval $(kconfig-package)) diff --git a/boot/at91dataflashboot/Config.in b/boot/at91dataflashboot/Config.in new file mode 100644 index 00000000..4055f964 --- /dev/null +++ b/boot/at91dataflashboot/Config.in @@ -0,0 +1,3 @@ +config BR2_TARGET_AT91DATAFLASHBOOT + bool "AT91 DataFlashBoot" + depends on BR2_arm926t diff --git a/boot/at91dataflashboot/at91dataflashboot-1.05-do-not-install.patch b/boot/at91dataflashboot/at91dataflashboot-1.05-do-not-install.patch new file mode 100644 index 00000000..41d97ad2 --- /dev/null +++ b/boot/at91dataflashboot/at91dataflashboot-1.05-do-not-install.patch @@ -0,0 +1,22 @@ +Disable the automatic installation of at91dataflashboot since it tries +to install things to /tftpboot, which is not possible when not +building as root. + +Signed-off-by: Thomas Petazzoni +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: at91dataflashboot-1.05/Makefile +=================================================================== +--- at91dataflashboot-1.05.orig/Makefile ++++ at91dataflashboot-1.05/Makefile +@@ -40,7 +40,7 @@ + + I=config.h com.h dataflash.h embedded_services.h main.h stdio.h include/AT91RM9200.h include/lib_AT91RM9200.h + +-all: clean $(BINNAME) $(LSSNAME) install ++all: clean $(BINNAME) $(LSSNAME) + $(SIZE) $(OUTNAME) + + # C objects here diff --git a/boot/at91dataflashboot/at91dataflashboot-1.05-eabi-fixes.patch b/boot/at91dataflashboot/at91dataflashboot-1.05-eabi-fixes.patch new file mode 100644 index 00000000..e38905f7 --- /dev/null +++ b/boot/at91dataflashboot/at91dataflashboot-1.05-eabi-fixes.patch @@ -0,0 +1,43 @@ +Get at91dataflashboot to build with EABI toolchains, by providing the +__aeabi_uidiv and __aeabi_uidivmod symbols. The code is based on +U-Boot's code. + +Signed-off-by: Thomas Petazzoni +--- + _udivsi3.S | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +Index: DataflashBoot-1.05/_udivsi3.S +=================================================================== +--- DataflashBoot-1.05.orig/_udivsi3.S ++++ DataflashBoot-1.05/_udivsi3.S +@@ -12,8 +12,11 @@ + .text + .globl __udivsi3 + .type __udivsi3 ,function ++ .globl __aeabi_uidiv ++ .type __aeabi_uidiv ,function + .align 0 + __udivsi3 : ++ __aeabi_uidiv: + cmp divisor, #0 + beq Ldiv0 + mov curbit, #1 +@@ -68,6 +71,17 @@ + mov r0, #0 @ about as wrong as it could be + ldmia sp!, {pc} + .size __udivsi3 , . - __udivsi3 ++ ++.globl __aeabi_uidivmod ++__aeabi_uidivmod: ++ ++ stmfd sp!, {r0, r1, ip, lr} ++ bl __aeabi_uidiv ++ ldmfd sp!, {r1, r2, ip, lr} ++ mul r3, r0, r2 ++ sub r1, r1, r3 ++ mov pc, lr ++ + /* # 235 "libgcc1.S" */ + /* # 320 "libgcc1.S" */ + /* # 421 "libgcc1.S" */ diff --git a/boot/at91dataflashboot/at91dataflashboot.hash b/boot/at91dataflashboot/at91dataflashboot.hash new file mode 100644 index 00000000..57df4e53 --- /dev/null +++ b/boot/at91dataflashboot/at91dataflashboot.hash @@ -0,0 +1,2 @@ +# locally computed +sha256 2cfeb6a9236e1a743c8010f05e504dbc92169ef42d9a6cf7948954a577bfc386 DataflashBoot-1.05.tar.bz2 diff --git a/boot/at91dataflashboot/at91dataflashboot.mk b/boot/at91dataflashboot/at91dataflashboot.mk new file mode 100644 index 00000000..0ad8b6fc --- /dev/null +++ b/boot/at91dataflashboot/at91dataflashboot.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# at91dataflashboot +# +################################################################################ + +AT91DATAFLASHBOOT_VERSION = 1.05 +AT91DATAFLASHBOOT_SOURCE = DataflashBoot-$(AT91DATAFLASHBOOT_VERSION).tar.bz2 +AT91DATAFLASHBOOT_SITE = ftp://www.at91.com/pub/buildroot + +AT91DATAFLASHBOOT_INSTALL_TARGET = NO +AT91DATAFLASHBOOT_INSTALL_IMAGES = YES + +define AT91DATAFLASHBOOT_BUILD_CMDS + make -C $(@D) CROSS_COMPILE=$(TARGET_CROSS) +endef + +define AT91DATAFLASHBOOT_INSTALL_IMAGES_CMDS + cp $(@D)/DataflashBoot-$(AT91DATAFLASHBOOT_VERSION).bin $(BINARIES_DIR) +endef + +$(eval $(generic-package)) diff --git a/boot/barebox/Config.in b/boot/barebox/Config.in new file mode 100644 index 00000000..239c95bf --- /dev/null +++ b/boot/barebox/Config.in @@ -0,0 +1,85 @@ +config BR2_TARGET_BAREBOX + bool "Barebox" + help + The Barebox bootloader, formerly known as U-Boot v2. + + http://www.barebox.org + +if BR2_TARGET_BAREBOX +choice + prompt "version" + help + Select the specific Barebox version you want to use + +config BR2_TARGET_BAREBOX_LATEST_VERSION + bool "2020.11.0" + +config BR2_TARGET_BAREBOX_CUSTOM_VERSION + bool "Custom version" + help + This option allows to use a specific official versions + +config BR2_TARGET_BAREBOX_CUSTOM_TARBALL + bool "Custom tarball" + +config BR2_TARGET_BAREBOX_CUSTOM_GIT + bool "Custom Git repository" + +endchoice + +config BR2_TARGET_BAREBOX_CUSTOM_VERSION_VALUE + string "Barebox version" + depends on BR2_TARGET_BAREBOX_CUSTOM_VERSION + +if BR2_TARGET_BAREBOX_CUSTOM_TARBALL + +config BR2_TARGET_BAREBOX_CUSTOM_TARBALL_LOCATION + string "URL of custom Barebox tarball" + +endif + +config BR2_TARGET_BAREBOX_VERSION + string + default "2020.11.0" if BR2_TARGET_BAREBOX_LATEST_VERSION + default BR2_TARGET_BAREBOX_CUSTOM_VERSION_VALUE if BR2_TARGET_BAREBOX_CUSTOM_VERSION + default "custom" if BR2_TARGET_BAREBOX_CUSTOM_TARBALL + default BR2_TARGET_BAREBOX_CUSTOM_GIT_VERSION if BR2_TARGET_BAREBOX_CUSTOM_GIT + +config BR2_TARGET_BAREBOX_CUSTOM_PATCH_DIR + string "custom patch dir" + help + If your board requires custom patches, add the path to the + directory containing the patches here. The patches must be + named barebox--.patch. + + Most users may leave this empty + +if BR2_TARGET_BAREBOX_CUSTOM_GIT + +config BR2_TARGET_BAREBOX_CUSTOM_GIT_REPO_URL + string "URL of custom Git repository" + +config BR2_TARGET_BAREBOX_CUSTOM_GIT_VERSION + string "Custom Git version" + +endif + +source boot/barebox/barebox/Config.in + +menuconfig BR2_TARGET_BAREBOX_AUX + bool "Build barebox with an auxiliary config" + help + Build barebox with an auxiliary configuration. + + Useful for building an SPL (Secondary Program Loader) in + addition to the traditional TPL (Tertiary Program Loader), + such as the X-Loader or MLO for Texas Instruments + processors. + +if BR2_TARGET_BAREBOX_AUX + +source boot/barebox/barebox-aux/Config.in + +endif + +endif diff --git a/boot/barebox/barebox-aux/Config.in b/boot/barebox/barebox-aux/Config.in new file mode 100644 index 00000000..d39d24f7 --- /dev/null +++ b/boot/barebox/barebox-aux/Config.in @@ -0,0 +1,75 @@ +choice + prompt "Barebox configuration" + default BR2_TARGET_BAREBOX_AUX_USE_DEFCONFIG + +config BR2_TARGET_BAREBOX_AUX_USE_DEFCONFIG + bool "Using a defconfig" + +config BR2_TARGET_BAREBOX_AUX_USE_CUSTOM_CONFIG + bool "Using a custom config file" + +endchoice + +config BR2_TARGET_BAREBOX_AUX_BOARD_DEFCONFIG + string "board defconfig" + depends on BR2_TARGET_BAREBOX_AUX_USE_DEFCONFIG + help + Name of the board for which Barebox should be built, without + the _defconfig suffix. + +config BR2_TARGET_BAREBOX_AUX_CUSTOM_CONFIG_FILE + string "Configuration file path" + depends on BR2_TARGET_BAREBOX_AUX_USE_CUSTOM_CONFIG + help + Path to the barebox configuration file + +config BR2_TARGET_BAREBOX_AUX_CONFIG_FRAGMENT_FILES + string "Additional configuration fragment files" + help + A space-separated list of configuration fragment files, + that will be merged to the main Barebox configuration file. + +config BR2_TARGET_BAREBOX_AUX_IMAGE_FILE + string "Image file names" + help + Space-separated list of barebox images which will be copied to + the images directory. + + If left empty, defaults to: + - barebox.bin for barebox versions older than 2012.10. + - barebox-flash-image for later versions. + +config BR2_TARGET_BAREBOX_AUX_CUSTOM_ENV + bool "Generate an environment image" + help + Generate a custom environment image. This environment will + contain the variables and scripts to be used at boot by + barebox. + +config BR2_TARGET_BAREBOX_AUX_CUSTOM_ENV_PATH + string "Environment path" + depends on BR2_TARGET_BAREBOX_AUX_CUSTOM_ENV + help + Path to the directory containing the custom barebox + environment. Depending on your setup, it will probably be + based on either the content of the defaultenv or + defaultenv-2 directories in the barebox source code, plus + the additions needed. The output will be an image in the + barebox devfs format, stored in the images directory, with + the same name as the directory name given here. + +config BR2_TARGET_BAREBOX_AUX_CUSTOM_EMBEDDED_ENV_PATH + string "Embedded environment path" + help + If this option is not empty, it is the path to a custom + embedded barebox environment. This image will be used when + the environment found in the environment sector is + invalid. This option sets the barebox Kconfig option + CONFIG_DEFAULT_ENVIRONMENT_PATH to the specified path. This + way it is possible to use Buildroot variables like + TOPDIR etc. to refer to the custom environment. + + Depending on your setup, the custom embedded environment + will probably be based on either the content of the + defaultenv or defaultenv-2 directories in the barebox source + code. diff --git a/boot/barebox/barebox-aux/barebox-aux.hash b/boot/barebox/barebox-aux/barebox-aux.hash new file mode 120000 index 00000000..b6462b80 --- /dev/null +++ b/boot/barebox/barebox-aux/barebox-aux.hash @@ -0,0 +1 @@ +../barebox.hash \ No newline at end of file diff --git a/boot/barebox/barebox-aux/barebox-aux.mk b/boot/barebox/barebox-aux/barebox-aux.mk new file mode 100644 index 00000000..fb287d36 --- /dev/null +++ b/boot/barebox/barebox-aux/barebox-aux.mk @@ -0,0 +1,8 @@ +################################################################################ +# +# barebox-aux +# +################################################################################ + +# Instantiate the auxiliary barebox package +$(eval $(barebox-package)) diff --git a/boot/barebox/barebox.hash b/boot/barebox/barebox.hash new file mode 100644 index 00000000..3644601b --- /dev/null +++ b/boot/barebox/barebox.hash @@ -0,0 +1,8 @@ +# From https://www.barebox.org/download/barebox-2020.11.0.tar.bz2.md5 +md5 1fc2c1a03d7b44dc12fbf4cf1fc6ffe0 barebox-2020.11.0.tar.bz2 + +# Locally calculated +sha256 049d2b1b887d0397f4b5390255459fb0240200b06a3276ffaefdeab7fb243554 barebox-2020.11.0.tar.bz2 + +# License files, locally computed +sha256 ab1122aa9f9073ad1ec824edcd970b16a6a7881a34a18fd56c080debb2dca5d4 COPYING diff --git a/boot/barebox/barebox.mk b/boot/barebox/barebox.mk new file mode 100644 index 00000000..8f02f9f9 --- /dev/null +++ b/boot/barebox/barebox.mk @@ -0,0 +1,178 @@ +################################################################################ +# +# barebox +# +################################################################################ + +################################################################################ +# inner-barebox-package -- generates the KConfig logic and make targets needed +# to support a barebox package. All barebox packages are built from the same +# source (origin, version and patches). The remainder of the package +# configuration is unique to each barebox package. +# +# argument 1 is the uppercase package name (used for variable name-space) +################################################################################ + +define inner-barebox-package + +$(1)_VERSION = $$(call qstrip,$$(BR2_TARGET_BAREBOX_VERSION)) + +ifeq ($$($(1)_VERSION),custom) +# Handle custom Barebox tarballs as specified by the configuration +$(1)_TARBALL = $$(call qstrip,$$(BR2_TARGET_BAREBOX_CUSTOM_TARBALL_LOCATION)) +$(1)_SITE = $$(patsubst %/,%,$$(dir $$($(1)_TARBALL))) +$(1)_SOURCE = $$(notdir $$($(1)_TARBALL)) +else ifeq ($$(BR2_TARGET_BAREBOX_CUSTOM_GIT),y) +$(1)_SITE = $$(call qstrip,$$(BR2_TARGET_BAREBOX_CUSTOM_GIT_REPO_URL)) +$(1)_SITE_METHOD = git +# Override the default value of _SOURCE to 'barebox-*' so that it is not +# downloaded a second time for barebox-aux; also alows avoiding the hash +# check: +$(1)_SOURCE = barebox-$$($(1)_VERSION)$$(BR_FMT_VERSION_git).tar.gz +else +# Handle stable official Barebox versions +$(1)_SOURCE = barebox-$$($(1)_VERSION).tar.bz2 +$(1)_SITE = https://www.barebox.org/download +endif + +$(1)_DL_SUBDIR = barebox + +$(1)_DEPENDENCIES = host-lzop +$(1)_LICENSE = GPL-2.0 with exceptions +ifeq ($(BR2_TARGET_BAREBOX_LATEST_VERSION),y) +$(1)_LICENSE_FILES = COPYING +endif + +$(1)_CUSTOM_EMBEDDED_ENV_PATH = $$(call qstrip,$$(BR2_TARGET_$(1)_CUSTOM_EMBEDDED_ENV_PATH)) + +ifneq ($$(call qstrip,$$(BR2_TARGET_BAREBOX_CUSTOM_PATCH_DIR)),) +define $(1)_APPLY_CUSTOM_PATCHES + $$(APPLY_PATCHES) $$(@D) \ + $$(BR2_TARGET_BAREBOX_CUSTOM_PATCH_DIR) \*.patch +endef + +$(1)_POST_PATCH_HOOKS += $(1)_APPLY_CUSTOM_PATCHES +endif + +$(1)_INSTALL_IMAGES = YES +ifneq ($$(BR2_TARGET_$(1)_BAREBOXENV),y) +$(1)_INSTALL_TARGET = NO +endif + +ifeq ($$(KERNEL_ARCH),i386) +$(1)_ARCH = x86 +else ifeq ($$(KERNEL_ARCH),x86_64) +$(1)_ARCH = x86 +else ifeq ($$(KERNEL_ARCH),powerpc) +$(1)_ARCH = ppc +else ifeq ($$(KERNEL_ARCH),arm64) +$(1)_ARCH = arm +else +$(1)_ARCH = $$(KERNEL_ARCH) +endif + +$(1)_MAKE_FLAGS = ARCH=$$($(1)_ARCH) CROSS_COMPILE="$$(TARGET_CROSS)" +$(1)_MAKE_ENV = $$(TARGET_MAKE_ENV) + +ifeq ($$(BR2_TARGET_$(1)_USE_DEFCONFIG),y) +$(1)_KCONFIG_DEFCONFIG = $$(call qstrip,$$(BR2_TARGET_$(1)_BOARD_DEFCONFIG))_defconfig +else ifeq ($$(BR2_TARGET_$(1)_USE_CUSTOM_CONFIG),y) +$(1)_KCONFIG_FILE = $$(call qstrip,$$(BR2_TARGET_$(1)_CUSTOM_CONFIG_FILE)) +endif + +$(1)_KCONFIG_FRAGMENT_FILES = $$(call qstrip,$$(BR2_TARGET_$(1)_CONFIG_FRAGMENT_FILES)) +$(1)_KCONFIG_EDITORS = menuconfig xconfig gconfig nconfig +$(1)_KCONFIG_OPTS = $$($(1)_MAKE_FLAGS) + +$(1)_KCONFIG_DEPENDENCIES = \ + $(BR2_BISON_HOST_DEPENDENCY) \ + $(BR2_FLEX_HOST_DEPENDENCY) + +ifeq ($$(BR2_TARGET_$(1)_CUSTOM_ENV),y) +$(1)_ENV_NAME = $$(notdir $$(call qstrip,\ + $$(BR2_TARGET_$(1)_CUSTOM_ENV_PATH))) +define $(1)_BUILD_CUSTOM_ENV + $$(@D)/scripts/bareboxenv -s \ + $$(call qstrip, $$(BR2_TARGET_$(1)_CUSTOM_ENV_PATH)) \ + $$(@D)/$$($(1)_ENV_NAME) +endef +define $(1)_INSTALL_CUSTOM_ENV + cp $$(@D)/$$($(1)_ENV_NAME) $$(BINARIES_DIR) +endef +endif + +ifneq ($$($(1)_CUSTOM_EMBEDDED_ENV_PATH),) +define $(1)_KCONFIG_FIXUP_CUSTOM_EMBEDDED_ENV_PATH + $$(call KCONFIG_ENABLE_OPT,CONFIG_DEFAULT_ENVIRONMENT) + $$(call KCONFIG_SET_OPT,CONFIG_DEFAULT_ENVIRONMENT_PATH,"$$($(1)_CUSTOM_EMBEDDED_ENV_PATH)") +endef +endif + +define $(1)_KCONFIG_FIXUP_BAREBOXENV + $$(if $$(BR2_TARGET_$(1)_BAREBOXENV),\ + $$(call KCONFIG_ENABLE_OPT,CONFIG_BAREBOXENV_TARGET),\ + $$(call KCONFIG_DISABLE_OPT,CONFIG_BAREBOXENV_TARGET)) +endef + +define $(1)_KCONFIG_FIXUP_CMDS + $$($(1)_KCONFIG_FIXUP_CUSTOM_EMBEDDED_ENV_PATH) + $$($(1)_KCONFIG_FIXUP_BAREBOXENV) +endef + +define $(1)_BUILD_CMDS + $$($(1)_BUILD_BAREBOXENV_CMDS) + $$(TARGET_MAKE_ENV) $$(MAKE) $$($(1)_MAKE_FLAGS) -C $$(@D) + $$($(1)_BUILD_CUSTOM_ENV) +endef + +$(1)_IMAGE_FILES = $$(call qstrip,$$(BR2_TARGET_$(1)_IMAGE_FILE)) + +define $(1)_INSTALL_IMAGES_CMDS + if test -n "$$($(1)_IMAGE_FILES)"; then \ + cp -L $$(foreach image,$$($(1)_IMAGE_FILES),$$(@D)/$$(image)) $$(BINARIES_DIR) ; \ + elif test -h $$(@D)/barebox-flash-image ; then \ + cp -L $$(@D)/barebox-flash-image $$(BINARIES_DIR)/barebox.bin ; \ + else \ + cp $$(@D)/barebox.bin $$(BINARIES_DIR);\ + fi + $$($(1)_INSTALL_CUSTOM_ENV) +endef + +# Starting with barebox v2020.09.0, the kconfig used calls the +# cross-compiler to check its capabilities. So we need the +# toolchain before we can call the configurators. +$(1)_KCONFIG_DEPENDENCIES += toolchain + +ifeq ($$(BR2_TARGET_$(1)_BAREBOXENV),y) +define $(1)_INSTALL_TARGET_CMDS + cp $$(@D)/scripts/bareboxenv-target $$(TARGET_DIR)/usr/bin/bareboxenv +endef +endif + +# Checks to give errors that the user can understand +# Must be before we call to kconfig-package +ifeq ($$(BR2_TARGET_$(1))$$(BR_BUILDING),yy) +# We must use the user-supplied kconfig value, because +# $(1)_KCONFIG_DEFCONFIG will at least contain the +# trailing _defconfig +ifeq ($$(or $$($(1)_KCONFIG_FILE),$$(call qstrip,$$(BR2_TARGET_$(1)_BOARD_DEFCONFIG))),) +$$(error No Barebox config. Check your BR2_TARGET_$(1)_BOARD_DEFCONFIG or BR2_TARGET_$(1)_CUSTOM_CONFIG_FILE settings) +endif +endif + +$$(eval $$(kconfig-package)) + +endef + +################################################################################ +# barebox-package -- the target generator macro for barebox packages +################################################################################ + +barebox-package=$(call inner-barebox-package,$(call UPPERCASE,$(pkgname))) + +include boot/barebox/barebox/barebox.mk +include boot/barebox/barebox-aux/barebox-aux.mk + +ifeq ($(BR2_TARGET_BAREBOX)$(BR2_TARGET_BAREBOX_LATEST_VERSION),y) +BR_NO_CHECK_HASH_FOR += $(BAREBOX_SOURCE) +endif diff --git a/boot/barebox/barebox/Config.in b/boot/barebox/barebox/Config.in new file mode 100644 index 00000000..958e294e --- /dev/null +++ b/boot/barebox/barebox/Config.in @@ -0,0 +1,80 @@ +choice + prompt "Barebox configuration" + default BR2_TARGET_BAREBOX_USE_DEFCONFIG + +config BR2_TARGET_BAREBOX_USE_DEFCONFIG + bool "Using a defconfig" + +config BR2_TARGET_BAREBOX_USE_CUSTOM_CONFIG + bool "Using a custom config file" + +endchoice + +config BR2_TARGET_BAREBOX_BOARD_DEFCONFIG + string "board defconfig" + depends on BR2_TARGET_BAREBOX_USE_DEFCONFIG + help + Name of the board for which Barebox should be built, without + the _defconfig suffix. + +config BR2_TARGET_BAREBOX_CUSTOM_CONFIG_FILE + string "Configuration file path" + depends on BR2_TARGET_BAREBOX_USE_CUSTOM_CONFIG + help + Path to the barebox configuration file + +config BR2_TARGET_BAREBOX_CONFIG_FRAGMENT_FILES + string "Additional configuration fragment files" + help + A space-separated list of configuration fragment files, + that will be merged to the main Barebox configuration file. + +config BR2_TARGET_BAREBOX_IMAGE_FILE + string "Image file names" + help + Space-separated list of barebox images which will be copied to + the images directory. + + If left empty, defaults to: + - barebox.bin for barebox versions older than 2012.10. + - barebox-flash-image for later versions. + +config BR2_TARGET_BAREBOX_BAREBOXENV + bool "bareboxenv tool in target" + help + Install bareboxenv tool in target. + +config BR2_TARGET_BAREBOX_CUSTOM_ENV + bool "Generate an environment image" + help + Generate a custom environment image. This environment will + contain the variables and scripts to be used at boot by + barebox. + +config BR2_TARGET_BAREBOX_CUSTOM_ENV_PATH + string "Environment path" + depends on BR2_TARGET_BAREBOX_CUSTOM_ENV + help + Path to the directory containing the custom barebox + environment. Depending on your setup, it will probably be + based on either the content of the defaultenv or + defaultenv-2 directories in the barebox source code, plus + the additions needed. The output will be an image in the + barebox devfs format, stored in the images directory, with + the same name as the directory name given here. + +config BR2_TARGET_BAREBOX_CUSTOM_EMBEDDED_ENV_PATH + string "Embedded environment path" + help + If this option is not empty, it is the path to a custom + embedded barebox environment. This image will be used when + the environment found in the environment sector is + invalid. This option sets the barebox Kconfig option + CONFIG_DEFAULT_ENVIRONMENT_PATH to the specified path. This + way it is possible to use Buildroot variables like + TOPDIR etc. to refer to the custom environment. + + Depending on your setup, the custom embedded environment + will probably be based on either the content of the + defaultenv or defaultenv-2 directories in the barebox source + code. diff --git a/boot/barebox/barebox/barebox.hash b/boot/barebox/barebox/barebox.hash new file mode 120000 index 00000000..b6462b80 --- /dev/null +++ b/boot/barebox/barebox/barebox.hash @@ -0,0 +1 @@ +../barebox.hash \ No newline at end of file diff --git a/boot/barebox/barebox/barebox.mk b/boot/barebox/barebox/barebox.mk new file mode 100644 index 00000000..39afb0fc --- /dev/null +++ b/boot/barebox/barebox/barebox.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# barebox +# +################################################################################ + +define BAREBOX_HELP_CMDS + @echo ' barebox-menuconfig - Run barebox menuconfig' + @echo ' barebox-savedefconfig - Run barebox savedefconfig' +endef + +# Instantiate the barebox package +$(eval $(barebox-package)) diff --git a/boot/binaries-marvell/Config.in b/boot/binaries-marvell/Config.in new file mode 100644 index 00000000..80fbecb2 --- /dev/null +++ b/boot/binaries-marvell/Config.in @@ -0,0 +1,12 @@ +config BR2_TARGET_BINARIES_MARVELL + bool "binaries-marvell" + depends on BR2_aarch64 + help + Some systems, including Marvell Armada SoC, have a separate + System Control Processor (SCP) for power management, clocks, + reset and system control. ATF Boot Loader stage 2 (BL2) loads + optional SCP_BL2 image into a platform-specific region + of secure memory. This package downloads and installs such + firmware, which is needed to build ATF. + + https://github.com/MarvellEmbeddedProcessors/binaries-marvell/ diff --git a/boot/binaries-marvell/binaries-marvell.hash b/boot/binaries-marvell/binaries-marvell.hash new file mode 100644 index 00000000..a7d5928a --- /dev/null +++ b/boot/binaries-marvell/binaries-marvell.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 d818c95bcd4d5c026238d6e554151184ed7fea15bce1f861f9068b97b4cd320a binaries-marvell-c5d3ef2b63ba66d8717ecbe679fd2e639cde88ee.tar.gz +sha256 e6d08ef60068ee72c68835001a24eb832dcba27cac0dde0f179dfb428be050ca README.md diff --git a/boot/binaries-marvell/binaries-marvell.mk b/boot/binaries-marvell/binaries-marvell.mk new file mode 100644 index 00000000..1a27fa98 --- /dev/null +++ b/boot/binaries-marvell/binaries-marvell.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# binaries-marvell +# +################################################################################ + +# This is version binaries-marvell-armada-18.12 +BINARIES_MARVELL_VERSION = c5d3ef2b63ba66d8717ecbe679fd2e639cde88ee +BINARIES_MARVELL_SITE = $(call github,MarvellEmbeddedProcessors,binaries-marvell,$(BINARIES_MARVELL_VERSION)) + +BINARIES_MARVELL_LICENSE = GPL-2.0 with freertos-exception-2.0 +BINARIES_MARVELL_LICENSE_FILES = README.md + +BINARIES_MARVELL_INSTALL_IMAGES = YES + +define BINARIES_MARVELL_INSTALL_IMAGES_CMDS + $(INSTALL) -D -m 0644 $(@D)/mrvl_scp_bl2.img $(BINARIES_DIR)/scp-fw.bin +endef + +$(eval $(generic-package)) diff --git a/boot/boot-wrapper-aarch64/Config.in b/boot/boot-wrapper-aarch64/Config.in new file mode 100644 index 00000000..cf738928 --- /dev/null +++ b/boot/boot-wrapper-aarch64/Config.in @@ -0,0 +1,46 @@ +comment "boot-wrapper-aarch64 needs a Linux kernel to be built" + depends on BR2_aarch64 + depends on !BR2_LINUX_KERNEL + +config BR2_TARGET_BOOT_WRAPPER_AARCH64 + bool "boot-wrapper-aarch64" + depends on BR2_aarch64 + depends on BR2_LINUX_KERNEL + help + The boot-wrapper-aarch64 is a small bootloader that makes it + possible to start an Aarch64 kernel inside the available + software simulators for the Aarch64 architecture. + + git://git.kernel.org/pub/scm/linux/kernel/git/mark/boot-wrapper-aarch64.git + +if BR2_TARGET_BOOT_WRAPPER_AARCH64 + +config BR2_TARGET_BOOT_WRAPPER_AARCH64_DTS + string "Device Tree Source name" + default "" + help + Name of the Device Tree Source file to use to generate the + Device Tree Blob that will be embedded in the image + generated by the boot wrapper. Valid names are the .dts + files from arch/arm64/boot/dts/ in the kernel source + tree. The name must be specified without the .dts suffix. + +config BR2_TARGET_BOOT_WRAPPER_AARCH64_BOOTARGS + string "Kernel bootargs" + default "" + help + Kernel bootargs to embed inside the image generated by the + boot wrapper. + +config BR2_TARGET_BOOT_WRAPPER_AARCH64_PSCI + bool "Boot secondary SMP cores using PSCI" + help + Boot secondary SMP cores using PSCI firmware calls. If + disabled, the spin-table method is used instead. + +config BR2_TARGET_BOOT_WRAPPER_AARCH64_GICV3 + bool "Enable GICv3 instead of GICv2" + help + Boot using GICv3 instead of GICv2. + +endif diff --git a/boot/boot-wrapper-aarch64/boot-wrapper-aarch64.mk b/boot/boot-wrapper-aarch64/boot-wrapper-aarch64.mk new file mode 100644 index 00000000..3a1af9b0 --- /dev/null +++ b/boot/boot-wrapper-aarch64/boot-wrapper-aarch64.mk @@ -0,0 +1,49 @@ +################################################################################ +# +# boot-wrapper-aarch64 +# +################################################################################ + +BOOT_WRAPPER_AARCH64_VERSION = 8d5a765251d9113c3c0f9fa14de42a9e7486fe8a +BOOT_WRAPPER_AARCH64_SITE = git://git.kernel.org/pub/scm/linux/kernel/git/mark/boot-wrapper-aarch64.git +BOOT_WRAPPER_AARCH64_LICENSE = BSD-3-Clause +BOOT_WRAPPER_AARCH64_LICENSE_FILES = LICENSE.txt +BOOT_WRAPPER_AARCH64_DEPENDENCIES = linux +BOOT_WRAPPER_AARCH64_INSTALL_IMAGES = YES + +# The Git repository does not have the generated configure script and +# Makefile. +BOOT_WRAPPER_AARCH64_AUTORECONF = YES + +BOOT_WRAPPER_AARCH64_DTB = $(LINUX_DIR)/arch/arm64/boot/dts/$(basename $(call qstrip,$(BR2_TARGET_BOOT_WRAPPER_AARCH64_DTS))).dtb + +BOOT_WRAPPER_AARCH64_CONF_OPTS = \ + --with-kernel-dir=$(LINUX_DIR) \ + --with-dtb=$(BOOT_WRAPPER_AARCH64_DTB) \ + --with-cmdline=$(BR2_TARGET_BOOT_WRAPPER_AARCH64_BOOTARGS) + +ifeq ($(BR2_TARGET_BOOT_WRAPPER_AARCH64_PSCI),y) +BOOT_WRAPPER_AARCH64_CONF_OPTS += --enable-psci +else +BOOT_WRAPPER_AARCH64_CONF_OPTS += --disable-psci +endif + +ifeq ($(BR2_TARGET_BOOT_WRAPPER_AARCH64_GICV3),y) +BOOT_WRAPPER_AARCH64_CONF_OPTS += --enable-gicv3 +endif + +# We need to convince the configure script that the Linux kernel tree +# exists, as well as the DTB and the kernel Image. Even though those +# are available on the build machine, the configure script uses +# AC_CHECK_FILE tests, which are always disabled in cross-compilation +# situations. +BOOT_WRAPPER_AARCH64_CONF_ENV = \ + $(call AUTOCONF_AC_CHECK_FILE_VAL,$(LINUX_DIR))=yes \ + $(call AUTOCONF_AC_CHECK_FILE_VAL,$(LINUX_DIR)$(BOOT_WRAPPER_AARCH64_DTB))=yes \ + $(call AUTOCONF_AC_CHECK_FILE_VAL,$(LINUX_DIR)/arch/arm64/boot/Image)=yes + +define BOOT_WRAPPER_AARCH64_INSTALL_IMAGES_CMDS + cp $(@D)/linux-system.axf $(BINARIES_DIR) +endef + +$(eval $(autotools-package)) diff --git a/boot/common.mk b/boot/common.mk new file mode 100644 index 00000000..3021e519 --- /dev/null +++ b/boot/common.mk @@ -0,0 +1 @@ +include $(sort $(wildcard boot/*/*.mk)) diff --git a/boot/grub2/0001-build-Fix-GRUB-i386-pc-build-with-Ubuntu-gcc.patch b/boot/grub2/0001-build-Fix-GRUB-i386-pc-build-with-Ubuntu-gcc.patch new file mode 100644 index 00000000..357c825f --- /dev/null +++ b/boot/grub2/0001-build-Fix-GRUB-i386-pc-build-with-Ubuntu-gcc.patch @@ -0,0 +1,313 @@ +From 6643507ce30f775008e093580f0c9499dfb2c485 Mon Sep 17 00:00:00 2001 +From: Simon Hardy +Date: Tue, 24 Mar 2020 13:29:12 +0000 +Subject: build: Fix GRUB i386-pc build with Ubuntu gcc + +With recent versions of gcc on Ubuntu a very large lzma_decompress.img file is +output. (e.g. 134479600 bytes instead of 2864.) This causes grub-mkimage to +fail with: "error: Decompressor is too big." + +This seems to be caused by a section .note.gnu.property that is placed at an +offset such that objcopy needs to pad the img file with zeros. + +This issue is present on: +Ubuntu 19.10 with gcc (Ubuntu 8.3.0-26ubuntu1~19.10) 8.3.0 +Ubuntu 19.10 with gcc (Ubuntu 9.2.1-9ubuntu2) 9.2.1 20191008 + +This issue is not present on: +Ubuntu 19.10 with gcc (Ubuntu 7.5.0-3ubuntu1~19.10) 7.5.0 +RHEL 8.0 with gcc 8.3.1 20190507 (Red Hat 8.3.1-4) + +The issue can be fixed by removing the section using objcopy as shown in +this patch. + +Signed-off-by: Simon Hardy +Reviewed-by: Daniel Kiper +[Retrieved (and updated to directly patch Makefile.in instead of +gentpl.py to avoid adding a dependency on python) from: +http://git.savannah.gnu.org/cgit/grub.git/commit/?id=6643507ce30f775008e093580f0c9499dfb2c485] +Signed-off-by: Fabrice Fontaine +[yann.morin.1998@free.fr: + - keep the part patching gentpl.py + - restore it as a git-formatted patch + - introduce the hunk about the generated .am file +] +Signed-off-by: Yann E. MORIN +--- + gentpl.py | 2 1 1 0 +- + grub-core/Makefile.in | 38 19 19 0 +++++++++++++++++++------------------- + 2 files changed, 20 insertions(+), 20 deletions(-) + +diff --git a/gentpl.py b/gentpl.py +index 387588c05..c86550d4f 100644 +--- a/gentpl.py ++++ b/gentpl.py +@@ -766,7 +766,7 @@ def image(defn, platform): + if test x$(TARGET_APPLE_LINKER) = x1; then \ + $(MACHO2IMG) $< $@; \ + else \ +- $(TARGET_OBJCOPY) $(""" + cname(defn) + """_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; \ ++ $(TARGET_OBJCOPY) $(""" + cname(defn) + """_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; \ + fi + """) + +diff --git a/grub-core/Makefile.core.am b/grub-core/Makefile.core.am +index 387588c05..c86550d4f 100644 +--- a/grub-core/Makefile.core.am ++++ 2/grub-core/Makefile.core.am +@@ -22897,7 +22897,7 @@ + CLEANFILES += boot.img + + boot.img: boot.image$(EXEEXT) +- if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + endif + +@@ -22918,7 +22918,7 @@ + CLEANFILES += boot.img + + boot.img: boot.image$(EXEEXT) +- if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + endif + +@@ -22939,7 +22939,7 @@ + CLEANFILES += boot.img + + boot.img: boot.image$(EXEEXT) +- if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + endif + +@@ -22960,7 +22960,7 @@ + CLEANFILES += boot_hybrid.img + + boot_hybrid.img: boot_hybrid.image$(EXEEXT) +- if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_hybrid_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_hybrid_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + endif + +@@ -22981,7 +22981,7 @@ + CLEANFILES += cdboot.img + + cdboot.img: cdboot.image$(EXEEXT) +- if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(cdboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(cdboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + endif + +@@ -23002,7 +23002,7 @@ + CLEANFILES += cdboot.img + + cdboot.img: cdboot.image$(EXEEXT) +- if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(cdboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(cdboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + endif + +@@ -23023,7 +23023,7 @@ + CLEANFILES += pxeboot.img + + pxeboot.img: pxeboot.image$(EXEEXT) +- if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(pxeboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(pxeboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + endif + +@@ -23044,7 +23044,7 @@ + CLEANFILES += diskboot.img + + diskboot.img: diskboot.image$(EXEEXT) +- if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(diskboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(diskboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + endif + +@@ -23065,7 +23065,7 @@ + CLEANFILES += diskboot.img + + diskboot.img: diskboot.image$(EXEEXT) +- if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(diskboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(diskboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + endif + +@@ -23086,7 +23086,7 @@ + CLEANFILES += lnxboot.img + + lnxboot.img: lnxboot.image$(EXEEXT) +- if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(lnxboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(lnxboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + endif + +@@ -23107,7 +23107,7 @@ + CLEANFILES += xz_decompress.img + + xz_decompress.img: xz_decompress.image$(EXEEXT) +- if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(xz_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(xz_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + endif + +@@ -23128,7 +23128,7 @@ + CLEANFILES += xz_decompress.img + + xz_decompress.img: xz_decompress.image$(EXEEXT) +- if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(xz_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(xz_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + endif + +@@ -23149,7 +23149,7 @@ + CLEANFILES += xz_decompress.img + + xz_decompress.img: xz_decompress.image$(EXEEXT) +- if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(xz_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(xz_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + endif + +@@ -23170,7 +23170,7 @@ + CLEANFILES += none_decompress.img + + none_decompress.img: none_decompress.image$(EXEEXT) +- if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(none_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(none_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + endif + +@@ -23191,7 +23191,7 @@ + CLEANFILES += none_decompress.img + + none_decompress.img: none_decompress.image$(EXEEXT) +- if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(none_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(none_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + endif + +@@ -23212,7 +23212,7 @@ + CLEANFILES += none_decompress.img + + none_decompress.img: none_decompress.image$(EXEEXT) +- if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(none_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(none_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + endif + +@@ -23233,7 +23233,7 @@ + CLEANFILES += lzma_decompress.img + + lzma_decompress.img: lzma_decompress.image$(EXEEXT) +- if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(lzma_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(lzma_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + endif + +@@ -23254,7 +23254,7 @@ + CLEANFILES += fwstart.img + + fwstart.img: fwstart.image$(EXEEXT) +- if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(fwstart_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(fwstart_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + endif + +@@ -23275,7 +23275,7 @@ + CLEANFILES += fwstart_fuloong2f.img + + fwstart_fuloong2f.img: fwstart_fuloong2f.image$(EXEEXT) +- if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(fwstart_fuloong2f_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(fwstart_fuloong2f_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + endif + +diff --git a/grub-core/Makefile.in b/grub-core/Makefile.in +index 387588c05..c86550d4f 100644 +--- a/grub-core/Makefile.in ++++ b/grub-core/Makefile.in +@@ -46531,61 +46531,61 @@ + @COND_riscv64_efi_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi + + @COND_i386_pc_TRUE@boot.img: boot.image$(EXEEXT) +-@COND_i386_pc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++@COND_i386_pc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + @COND_i386_qemu_TRUE@boot.img: boot.image$(EXEEXT) +-@COND_i386_qemu_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++@COND_i386_qemu_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + @COND_sparc64_ieee1275_TRUE@boot.img: boot.image$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++@COND_sparc64_ieee1275_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + @COND_i386_pc_TRUE@boot_hybrid.img: boot_hybrid.image$(EXEEXT) +-@COND_i386_pc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_hybrid_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++@COND_i386_pc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_hybrid_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + @COND_i386_pc_TRUE@cdboot.img: cdboot.image$(EXEEXT) +-@COND_i386_pc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(cdboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++@COND_i386_pc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(cdboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + @COND_sparc64_ieee1275_TRUE@cdboot.img: cdboot.image$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(cdboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++@COND_sparc64_ieee1275_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(cdboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + @COND_i386_pc_TRUE@pxeboot.img: pxeboot.image$(EXEEXT) +-@COND_i386_pc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(pxeboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++@COND_i386_pc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(pxeboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + @COND_i386_pc_TRUE@diskboot.img: diskboot.image$(EXEEXT) +-@COND_i386_pc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(diskboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++@COND_i386_pc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(diskboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + @COND_sparc64_ieee1275_TRUE@diskboot.img: diskboot.image$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(diskboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++@COND_sparc64_ieee1275_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(diskboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + @COND_i386_pc_TRUE@lnxboot.img: lnxboot.image$(EXEEXT) +-@COND_i386_pc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(lnxboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++@COND_i386_pc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(lnxboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + @COND_mips_loongson_TRUE@xz_decompress.img: xz_decompress.image$(EXEEXT) +-@COND_mips_loongson_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(xz_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++@COND_mips_loongson_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(xz_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + @COND_mips_arc_TRUE@xz_decompress.img: xz_decompress.image$(EXEEXT) +-@COND_mips_arc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(xz_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++@COND_mips_arc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(xz_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + @COND_mips_qemu_mips_TRUE@xz_decompress.img: xz_decompress.image$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(xz_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++@COND_mips_qemu_mips_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(xz_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + @COND_mips_loongson_TRUE@none_decompress.img: none_decompress.image$(EXEEXT) +-@COND_mips_loongson_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(none_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++@COND_mips_loongson_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(none_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + @COND_mips_arc_TRUE@none_decompress.img: none_decompress.image$(EXEEXT) +-@COND_mips_arc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(none_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++@COND_mips_arc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(none_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + @COND_mips_qemu_mips_TRUE@none_decompress.img: none_decompress.image$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(none_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++@COND_mips_qemu_mips_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(none_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + @COND_i386_pc_TRUE@lzma_decompress.img: lzma_decompress.image$(EXEEXT) +-@COND_i386_pc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(lzma_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++@COND_i386_pc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(lzma_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + @COND_mips_loongson_TRUE@fwstart.img: fwstart.image$(EXEEXT) +-@COND_mips_loongson_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(fwstart_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++@COND_mips_loongson_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(fwstart_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + @COND_mips_loongson_TRUE@fwstart_fuloong2f.img: fwstart_fuloong2f.image$(EXEEXT) +-@COND_mips_loongson_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(fwstart_fuloong2f_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi ++@COND_mips_loongson_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(fwstart_fuloong2f_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx $< $@; fi + + @COND_MAN_PAGES_TRUE@@COND_emu_TRUE@grub-emu.1: grub-emu + @COND_MAN_PAGES_TRUE@@COND_emu_TRUE@ chmod a+x grub-emu diff --git a/boot/grub2/0002-yylex-Make-lexer-fatal-errors-actually-be-fatal.patch b/boot/grub2/0002-yylex-Make-lexer-fatal-errors-actually-be-fatal.patch new file mode 100644 index 00000000..001dda82 --- /dev/null +++ b/boot/grub2/0002-yylex-Make-lexer-fatal-errors-actually-be-fatal.patch @@ -0,0 +1,73 @@ +From a7ab0cc98fa89a3d5098c29cbe44bcd24b0a6454 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Wed, 15 Apr 2020 15:45:02 -0400 +Subject: [PATCH] yylex: Make lexer fatal errors actually be fatal +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When presented with a command that can't be tokenized to anything +smaller than YYLMAX characters, the parser calls YY_FATAL_ERROR(errmsg), +expecting that will stop further processing, as such: + + #define YY_DO_BEFORE_ACTION \ + yyg->yytext_ptr = yy_bp; \ + yyleng = (int) (yy_cp - yy_bp); \ + yyg->yy_hold_char = *yy_cp; \ + *yy_cp = '\0'; \ + if ( yyleng >= YYLMAX ) \ + YY_FATAL_ERROR( "token too large, exceeds YYLMAX" ); \ + yy_flex_strncpy( yytext, yyg->yytext_ptr, yyleng + 1 , yyscanner); \ + yyg->yy_c_buf_p = yy_cp; + +The code flex generates expects that YY_FATAL_ERROR() will either return +for it or do some form of longjmp(), or handle the error in some way at +least, and so the strncpy() call isn't in an "else" clause, and thus if +YY_FATAL_ERROR() is *not* actually fatal, it does the call with the +questionable limit, and predictable results ensue. + +Unfortunately, our implementation of YY_FATAL_ERROR() is: + + #define YY_FATAL_ERROR(msg) \ + do { \ + grub_printf (_("fatal error: %s\n"), _(msg)); \ + } while (0) + +The same pattern exists in yyless(), and similar problems exist in users +of YY_INPUT(), several places in the main parsing loop, +yy_get_next_buffer(), yy_load_buffer_state(), yyensure_buffer_stack, +yy_scan_buffer(), etc. + +All of these callers expect YY_FATAL_ERROR() to actually be fatal, and +the things they do if it returns after calling it are wildly unsafe. + +Fixes: CVE-2020-10713 + +Signed-off-by: Peter Jones +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/script/yylex.l | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/grub-core/script/yylex.l b/grub-core/script/yylex.l +index 7b44c37b7..b7203c823 100644 +--- a/grub-core/script/yylex.l ++++ b/grub-core/script/yylex.l +@@ -37,11 +37,11 @@ + + /* + * As we don't have access to yyscanner, we cannot do much except to +- * print the fatal error. ++ * print the fatal error and exit. + */ + #define YY_FATAL_ERROR(msg) \ + do { \ +- grub_printf (_("fatal error: %s\n"), _(msg)); \ ++ grub_fatal (_("fatal error: %s\n"), _(msg));\ + } while (0) + + #define COPY(str, hint) \ +-- +2.26.2 + diff --git a/boot/grub2/0003-safemath-Add-some-arithmetic-primitives-that-check-f.patch b/boot/grub2/0003-safemath-Add-some-arithmetic-primitives-that-check-f.patch new file mode 100644 index 00000000..5c521134 --- /dev/null +++ b/boot/grub2/0003-safemath-Add-some-arithmetic-primitives-that-check-f.patch @@ -0,0 +1,128 @@ +From 782a4580a5e347793443aa8e9152db1bf4a0fff8 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 15 Jun 2020 10:58:42 -0400 +Subject: [PATCH] safemath: Add some arithmetic primitives that check for + overflow +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This adds a new header, include/grub/safemath.h, that includes easy to +use wrappers for __builtin_{add,sub,mul}_overflow() declared like: + + bool OP(a, b, res) + +where OP is grub_add, grub_sub or grub_mul. OP() returns true in the +case where the operation would overflow and res is not modified. +Otherwise, false is returned and the operation is executed. + +These arithmetic primitives require newer compiler versions. So, bump +these requirements in the INSTALL file too. + +Signed-off-by: Peter Jones +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + INSTALL | 22 ++-------------------- + include/grub/compiler.h | 8 ++++++++ + include/grub/safemath.h | 37 +++++++++++++++++++++++++++++++++++++ + 3 files changed, 47 insertions(+), 20 deletions(-) + create mode 100644 include/grub/safemath.h + +diff --git a/INSTALL b/INSTALL +index 8acb40902..dcb9b7d7b 100644 +--- a/INSTALL ++++ b/INSTALL +@@ -11,27 +11,9 @@ GRUB depends on some software packages installed into your system. If + you don't have any of them, please obtain and install them before + configuring the GRUB. + +-* GCC 4.1.3 or later +- Note: older versions may work but support is limited +- +- Experimental support for clang 3.3 or later (results in much bigger binaries) ++* GCC 5.1.0 or later ++ Experimental support for clang 3.8.0 or later (results in much bigger binaries) + for i386, x86_64, arm (including thumb), arm64, mips(el), powerpc, sparc64 +- Note: clang 3.2 or later works for i386 and x86_64 targets but results in +- much bigger binaries. +- earlier versions not tested +- Note: clang 3.2 or later works for arm +- earlier versions not tested +- Note: clang on arm64 is not supported due to +- https://llvm.org/bugs/show_bug.cgi?id=26030 +- Note: clang 3.3 or later works for mips(el) +- earlier versions fail to generate .reginfo and hence gprel relocations +- fail. +- Note: clang 3.2 or later works for powerpc +- earlier versions not tested +- Note: clang 3.5 or later works for sparc64 +- earlier versions return "error: unable to interface with target machine" +- Note: clang has no support for ia64 and hence you can't compile GRUB +- for ia64 with clang + * GNU Make + * GNU Bison 2.3 or later + * GNU gettext 0.17 or later +diff --git a/include/grub/compiler.h b/include/grub/compiler.h +index c9e1d7a73..8f3be3ae7 100644 +--- a/include/grub/compiler.h ++++ b/include/grub/compiler.h +@@ -48,4 +48,12 @@ + # define WARN_UNUSED_RESULT + #endif + ++#if defined(__clang__) && defined(__clang_major__) && defined(__clang_minor__) ++# define CLANG_PREREQ(maj,min) \ ++ ((__clang_major__ > (maj)) || \ ++ (__clang_major__ == (maj) && __clang_minor__ >= (min))) ++#else ++# define CLANG_PREREQ(maj,min) 0 ++#endif ++ + #endif /* ! GRUB_COMPILER_HEADER */ +diff --git a/include/grub/safemath.h b/include/grub/safemath.h +new file mode 100644 +index 000000000..c17b89bba +--- /dev/null ++++ b/include/grub/safemath.h +@@ -0,0 +1,37 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2020 Free Software Foundation, Inc. ++ * ++ * GRUB 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 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB 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 GRUB. If not, see . ++ * ++ * Arithmetic operations that protect against overflow. ++ */ ++ ++#ifndef GRUB_SAFEMATH_H ++#define GRUB_SAFEMATH_H 1 ++ ++#include ++ ++/* These appear in gcc 5.1 and clang 3.8. */ ++#if GNUC_PREREQ(5, 1) || CLANG_PREREQ(3, 8) ++ ++#define grub_add(a, b, res) __builtin_add_overflow(a, b, res) ++#define grub_sub(a, b, res) __builtin_sub_overflow(a, b, res) ++#define grub_mul(a, b, res) __builtin_mul_overflow(a, b, res) ++ ++#else ++#error gcc 5.1 or newer or clang 3.8 or newer is required ++#endif ++ ++#endif /* GRUB_SAFEMATH_H */ +-- +2.26.2 + diff --git a/boot/grub2/0004-calloc-Make-sure-we-always-have-an-overflow-checking.patch b/boot/grub2/0004-calloc-Make-sure-we-always-have-an-overflow-checking.patch new file mode 100644 index 00000000..a2e19f0e --- /dev/null +++ b/boot/grub2/0004-calloc-Make-sure-we-always-have-an-overflow-checking.patch @@ -0,0 +1,246 @@ +From 5775eb40862b67468ced816e6d7560dbe22a3670 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 15 Jun 2020 12:15:29 -0400 +Subject: [PATCH] calloc: Make sure we always have an overflow-checking + calloc() available +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This tries to make sure that everywhere in this source tree, we always have +an appropriate version of calloc() (i.e. grub_calloc(), xcalloc(), etc.) +available, and that they all safely check for overflow and return NULL when +it would occur. + +Signed-off-by: Peter Jones +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/kern/emu/misc.c | 12 +++++++++ + grub-core/kern/emu/mm.c | 10 ++++++++ + grub-core/kern/mm.c | 40 ++++++++++++++++++++++++++++++ + grub-core/lib/libgcrypt_wrap/mem.c | 11 ++++++-- + grub-core/lib/posix_wrap/stdlib.h | 8 +++++- + include/grub/emu/misc.h | 1 + + include/grub/mm.h | 6 +++++ + 7 files changed, 85 insertions(+), 3 deletions(-) + +diff --git a/grub-core/kern/emu/misc.c b/grub-core/kern/emu/misc.c +index 65db79baa..dfd8a8ec4 100644 +--- a/grub-core/kern/emu/misc.c ++++ b/grub-core/kern/emu/misc.c +@@ -85,6 +85,18 @@ grub_util_error (const char *fmt, ...) + exit (1); + } + ++void * ++xcalloc (grub_size_t nmemb, grub_size_t size) ++{ ++ void *p; ++ ++ p = calloc (nmemb, size); ++ if (!p) ++ grub_util_error ("%s", _("out of memory")); ++ ++ return p; ++} ++ + void * + xmalloc (grub_size_t size) + { +diff --git a/grub-core/kern/emu/mm.c b/grub-core/kern/emu/mm.c +index f262e95e3..145b01d37 100644 +--- a/grub-core/kern/emu/mm.c ++++ b/grub-core/kern/emu/mm.c +@@ -25,6 +25,16 @@ + #include + #include + ++void * ++grub_calloc (grub_size_t nmemb, grub_size_t size) ++{ ++ void *ret; ++ ret = calloc (nmemb, size); ++ if (!ret) ++ grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("out of memory")); ++ return ret; ++} ++ + void * + grub_malloc (grub_size_t size) + { +diff --git a/grub-core/kern/mm.c b/grub-core/kern/mm.c +index ee88ff611..f2822a836 100644 +--- a/grub-core/kern/mm.c ++++ b/grub-core/kern/mm.c +@@ -67,8 +67,10 @@ + #include + #include + #include ++#include + + #ifdef MM_DEBUG ++# undef grub_calloc + # undef grub_malloc + # undef grub_zalloc + # undef grub_realloc +@@ -375,6 +377,30 @@ grub_memalign (grub_size_t align, grub_size_t size) + return 0; + } + ++/* ++ * Allocate NMEMB instances of SIZE bytes and return the pointer, or error on ++ * integer overflow. ++ */ ++void * ++grub_calloc (grub_size_t nmemb, grub_size_t size) ++{ ++ void *ret; ++ grub_size_t sz = 0; ++ ++ if (grub_mul (nmemb, size, &sz)) ++ { ++ grub_error (GRUB_ERR_OUT_OF_RANGE, N_("overflow is detected")); ++ return NULL; ++ } ++ ++ ret = grub_memalign (0, sz); ++ if (!ret) ++ return NULL; ++ ++ grub_memset (ret, 0, sz); ++ return ret; ++} ++ + /* Allocate SIZE bytes and return the pointer. */ + void * + grub_malloc (grub_size_t size) +@@ -561,6 +587,20 @@ grub_mm_dump (unsigned lineno) + grub_printf ("\n"); + } + ++void * ++grub_debug_calloc (const char *file, int line, grub_size_t nmemb, grub_size_t size) ++{ ++ void *ptr; ++ ++ if (grub_mm_debug) ++ grub_printf ("%s:%d: calloc (0x%" PRIxGRUB_SIZE ", 0x%" PRIxGRUB_SIZE ") = ", ++ file, line, size); ++ ptr = grub_calloc (nmemb, size); ++ if (grub_mm_debug) ++ grub_printf ("%p\n", ptr); ++ return ptr; ++} ++ + void * + grub_debug_malloc (const char *file, int line, grub_size_t size) + { +diff --git a/grub-core/lib/libgcrypt_wrap/mem.c b/grub-core/lib/libgcrypt_wrap/mem.c +index beeb661a3..74c6eafe5 100644 +--- a/grub-core/lib/libgcrypt_wrap/mem.c ++++ b/grub-core/lib/libgcrypt_wrap/mem.c +@@ -4,6 +4,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -36,7 +37,10 @@ void * + gcry_xcalloc (size_t n, size_t m) + { + void *ret; +- ret = grub_zalloc (n * m); ++ size_t sz; ++ if (grub_mul (n, m, &sz)) ++ grub_fatal ("gcry_xcalloc would overflow"); ++ ret = grub_zalloc (sz); + if (!ret) + grub_fatal ("gcry_xcalloc failed"); + return ret; +@@ -56,7 +60,10 @@ void * + gcry_xcalloc_secure (size_t n, size_t m) + { + void *ret; +- ret = grub_zalloc (n * m); ++ size_t sz; ++ if (grub_mul (n, m, &sz)) ++ grub_fatal ("gcry_xcalloc would overflow"); ++ ret = grub_zalloc (sz); + if (!ret) + grub_fatal ("gcry_xcalloc failed"); + return ret; +diff --git a/grub-core/lib/posix_wrap/stdlib.h b/grub-core/lib/posix_wrap/stdlib.h +index 3b46f47ff..7a8d385e9 100644 +--- a/grub-core/lib/posix_wrap/stdlib.h ++++ b/grub-core/lib/posix_wrap/stdlib.h +@@ -21,6 +21,7 @@ + + #include + #include ++#include + + static inline void + free (void *ptr) +@@ -37,7 +38,12 @@ malloc (grub_size_t size) + static inline void * + calloc (grub_size_t size, grub_size_t nelem) + { +- return grub_zalloc (size * nelem); ++ grub_size_t sz; ++ ++ if (grub_mul (size, nelem, &sz)) ++ return NULL; ++ ++ return grub_zalloc (sz); + } + + static inline void * +diff --git a/include/grub/emu/misc.h b/include/grub/emu/misc.h +index ce464cfd0..ff9c48a64 100644 +--- a/include/grub/emu/misc.h ++++ b/include/grub/emu/misc.h +@@ -47,6 +47,7 @@ grub_util_device_is_mapped (const char *dev); + #define GRUB_HOST_PRIuLONG_LONG "llu" + #define GRUB_HOST_PRIxLONG_LONG "llx" + ++void * EXPORT_FUNC(xcalloc) (grub_size_t nmemb, grub_size_t size) WARN_UNUSED_RESULT; + void * EXPORT_FUNC(xmalloc) (grub_size_t size) WARN_UNUSED_RESULT; + void * EXPORT_FUNC(xrealloc) (void *ptr, grub_size_t size) WARN_UNUSED_RESULT; + char * EXPORT_FUNC(xstrdup) (const char *str) WARN_UNUSED_RESULT; +diff --git a/include/grub/mm.h b/include/grub/mm.h +index 28e2e53eb..9c38dd3ca 100644 +--- a/include/grub/mm.h ++++ b/include/grub/mm.h +@@ -29,6 +29,7 @@ + #endif + + void grub_mm_init_region (void *addr, grub_size_t size); ++void *EXPORT_FUNC(grub_calloc) (grub_size_t nmemb, grub_size_t size); + void *EXPORT_FUNC(grub_malloc) (grub_size_t size); + void *EXPORT_FUNC(grub_zalloc) (grub_size_t size); + void EXPORT_FUNC(grub_free) (void *ptr); +@@ -48,6 +49,9 @@ extern int EXPORT_VAR(grub_mm_debug); + void grub_mm_dump_free (void); + void grub_mm_dump (unsigned lineno); + ++#define grub_calloc(nmemb, size) \ ++ grub_debug_calloc (GRUB_FILE, __LINE__, nmemb, size) ++ + #define grub_malloc(size) \ + grub_debug_malloc (GRUB_FILE, __LINE__, size) + +@@ -63,6 +67,8 @@ void grub_mm_dump (unsigned lineno); + #define grub_free(ptr) \ + grub_debug_free (GRUB_FILE, __LINE__, ptr) + ++void *EXPORT_FUNC(grub_debug_calloc) (const char *file, int line, ++ grub_size_t nmemb, grub_size_t size); + void *EXPORT_FUNC(grub_debug_malloc) (const char *file, int line, + grub_size_t size); + void *EXPORT_FUNC(grub_debug_zalloc) (const char *file, int line, +-- +2.26.2 + diff --git a/boot/grub2/0005-calloc-Use-calloc-at-most-places.patch b/boot/grub2/0005-calloc-Use-calloc-at-most-places.patch new file mode 100644 index 00000000..096c2dfc --- /dev/null +++ b/boot/grub2/0005-calloc-Use-calloc-at-most-places.patch @@ -0,0 +1,1840 @@ +From 8185711241d73931269f402bb6799f7e2c58f04b Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 15 Jun 2020 12:26:01 -0400 +Subject: [PATCH] calloc: Use calloc() at most places +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This modifies most of the places we do some form of: + + X = malloc(Y * Z); + +to use calloc(Y, Z) instead. + +Among other issues, this fixes: + - allocation of integer overflow in grub_png_decode_image_header() + reported by Chris Coulson, + - allocation of integer overflow in luks_recover_key() + reported by Chris Coulson, + - allocation of integer overflow in grub_lvm_detect() + reported by Chris Coulson. + +Fixes: CVE-2020-14308 + +Signed-off-by: Peter Jones +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/bus/usb/usbhub.c | 8 ++++---- + grub-core/commands/efi/lsefisystab.c | 3 ++- + grub-core/commands/legacycfg.c | 6 +++--- + grub-core/commands/menuentry.c | 2 +- + grub-core/commands/nativedisk.c | 2 +- + grub-core/commands/parttool.c | 12 +++++++++--- + grub-core/commands/regexp.c | 2 +- + grub-core/commands/search_wrap.c | 2 +- + grub-core/disk/diskfilter.c | 4 ++-- + grub-core/disk/ieee1275/ofdisk.c | 2 +- + grub-core/disk/ldm.c | 14 +++++++------- + grub-core/disk/luks.c | 2 +- + grub-core/disk/lvm.c | 8 ++++---- + grub-core/disk/xen/xendisk.c | 2 +- + grub-core/efiemu/loadcore.c | 2 +- + grub-core/efiemu/mm.c | 6 +++--- + grub-core/font/font.c | 3 +-- + grub-core/fs/affs.c | 6 +++--- + grub-core/fs/btrfs.c | 6 +++--- + grub-core/fs/hfs.c | 2 +- + grub-core/fs/hfsplus.c | 6 +++--- + grub-core/fs/iso9660.c | 2 +- + grub-core/fs/ntfs.c | 4 ++-- + grub-core/fs/sfs.c | 2 +- + grub-core/fs/tar.c | 2 +- + grub-core/fs/udf.c | 4 ++-- + grub-core/fs/zfs/zfs.c | 4 ++-- + grub-core/gfxmenu/gui_string_util.c | 2 +- + grub-core/gfxmenu/widget-box.c | 4 ++-- + grub-core/io/gzio.c | 2 +- + grub-core/kern/efi/efi.c | 6 +++--- + grub-core/kern/emu/hostdisk.c | 2 +- + grub-core/kern/fs.c | 2 +- + grub-core/kern/misc.c | 2 +- + grub-core/kern/parser.c | 2 +- + grub-core/kern/uboot/uboot.c | 2 +- + grub-core/lib/libgcrypt/cipher/ac.c | 8 ++++---- + grub-core/lib/libgcrypt/cipher/primegen.c | 4 ++-- + grub-core/lib/libgcrypt/cipher/pubkey.c | 4 ++-- + grub-core/lib/priority_queue.c | 2 +- + grub-core/lib/reed_solomon.c | 7 +++---- + grub-core/lib/relocator.c | 10 +++++----- + grub-core/lib/zstd/fse_decompress.c | 2 +- + grub-core/loader/arm/linux.c | 2 +- + grub-core/loader/efi/chainloader.c | 2 +- + grub-core/loader/i386/bsdXX.c | 2 +- + grub-core/loader/i386/xnu.c | 4 ++-- + grub-core/loader/macho.c | 2 +- + grub-core/loader/multiboot_elfxx.c | 2 +- + grub-core/loader/xnu.c | 2 +- + grub-core/mmap/mmap.c | 4 ++-- + grub-core/net/bootp.c | 2 +- + grub-core/net/dns.c | 10 +++++----- + grub-core/net/net.c | 4 ++-- + grub-core/normal/charset.c | 10 +++++----- + grub-core/normal/cmdline.c | 14 +++++++------- + grub-core/normal/menu_entry.c | 14 +++++++------- + grub-core/normal/menu_text.c | 4 ++-- + grub-core/normal/term.c | 4 ++-- + grub-core/osdep/linux/getroot.c | 6 +++--- + grub-core/osdep/unix/config.c | 2 +- + grub-core/osdep/windows/getroot.c | 2 +- + grub-core/osdep/windows/hostdisk.c | 4 ++-- + grub-core/osdep/windows/init.c | 2 +- + grub-core/osdep/windows/platform.c | 4 ++-- + grub-core/osdep/windows/relpath.c | 2 +- + grub-core/partmap/gpt.c | 2 +- + grub-core/partmap/msdos.c | 2 +- + grub-core/script/execute.c | 2 +- + grub-core/tests/fake_input.c | 2 +- + grub-core/tests/video_checksum.c | 6 +++--- + grub-core/video/capture.c | 2 +- + grub-core/video/emu/sdl.c | 2 +- + grub-core/video/i386/pc/vga.c | 2 +- + grub-core/video/readers/png.c | 2 +- + include/grub/unicode.h | 4 ++-- + util/getroot.c | 2 +- + util/grub-file.c | 2 +- + util/grub-fstest.c | 4 ++-- + util/grub-install-common.c | 2 +- + util/grub-install.c | 4 ++-- + util/grub-mkimagexx.c | 6 ++---- + util/grub-mkrescue.c | 4 ++-- + util/grub-mkstandalone.c | 2 +- + util/grub-pe2elf.c | 12 +++++------- + util/grub-probe.c | 4 ++-- + 86 files changed, 176 insertions(+), 175 deletions(-) + +diff --git a/grub-core/bus/usb/usbhub.c b/grub-core/bus/usb/usbhub.c +index 34a7ff1b5..a06cce302 100644 +--- a/grub-core/bus/usb/usbhub.c ++++ b/grub-core/bus/usb/usbhub.c +@@ -149,8 +149,8 @@ grub_usb_add_hub (grub_usb_device_t dev) + grub_usb_set_configuration (dev, 1); + + dev->nports = hubdesc.portcnt; +- dev->children = grub_zalloc (hubdesc.portcnt * sizeof (dev->children[0])); +- dev->ports = grub_zalloc (dev->nports * sizeof (dev->ports[0])); ++ dev->children = grub_calloc (hubdesc.portcnt, sizeof (dev->children[0])); ++ dev->ports = grub_calloc (dev->nports, sizeof (dev->ports[0])); + if (!dev->children || !dev->ports) + { + grub_free (dev->children); +@@ -268,8 +268,8 @@ grub_usb_controller_dev_register_iter (grub_usb_controller_t controller, void *d + + /* Query the number of ports the root Hub has. */ + hub->nports = controller->dev->hubports (controller); +- hub->devices = grub_zalloc (sizeof (hub->devices[0]) * hub->nports); +- hub->ports = grub_zalloc (sizeof (hub->ports[0]) * hub->nports); ++ hub->devices = grub_calloc (hub->nports, sizeof (hub->devices[0])); ++ hub->ports = grub_calloc (hub->nports, sizeof (hub->ports[0])); + if (!hub->devices || !hub->ports) + { + grub_free (hub->devices); +diff --git a/grub-core/commands/efi/lsefisystab.c b/grub-core/commands/efi/lsefisystab.c +index df1030221..cd81507f5 100644 +--- a/grub-core/commands/efi/lsefisystab.c ++++ b/grub-core/commands/efi/lsefisystab.c +@@ -71,7 +71,8 @@ grub_cmd_lsefisystab (struct grub_command *cmd __attribute__ ((unused)), + grub_printf ("Vendor: "); + + for (vendor_utf16 = st->firmware_vendor; *vendor_utf16; vendor_utf16++); +- vendor = grub_malloc (4 * (vendor_utf16 - st->firmware_vendor) + 1); ++ /* Allocate extra 3 bytes to simplify math. */ ++ vendor = grub_calloc (4, vendor_utf16 - st->firmware_vendor + 1); + if (!vendor) + return grub_errno; + *grub_utf16_to_utf8 ((grub_uint8_t *) vendor, st->firmware_vendor, +diff --git a/grub-core/commands/legacycfg.c b/grub-core/commands/legacycfg.c +index db7a8f002..5e3ec0d5e 100644 +--- a/grub-core/commands/legacycfg.c ++++ b/grub-core/commands/legacycfg.c +@@ -314,7 +314,7 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)), + if (argc < 2) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); + +- cutargs = grub_malloc (sizeof (cutargs[0]) * (argc - 1)); ++ cutargs = grub_calloc (argc - 1, sizeof (cutargs[0])); + if (!cutargs) + return grub_errno; + cutargc = argc - 1; +@@ -436,7 +436,7 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)), + { + char rbuf[3] = "-r"; + bsdargc = cutargc + 2; +- bsdargs = grub_malloc (sizeof (bsdargs[0]) * bsdargc); ++ bsdargs = grub_calloc (bsdargc, sizeof (bsdargs[0])); + if (!bsdargs) + { + err = grub_errno; +@@ -559,7 +559,7 @@ grub_cmd_legacy_initrdnounzip (struct grub_command *mycmd __attribute__ ((unused + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("can't find command `%s'"), + "module"); + +- newargs = grub_malloc ((argc + 1) * sizeof (newargs[0])); ++ newargs = grub_calloc (argc + 1, sizeof (newargs[0])); + if (!newargs) + return grub_errno; + grub_memcpy (newargs + 1, args, argc * sizeof (newargs[0])); +diff --git a/grub-core/commands/menuentry.c b/grub-core/commands/menuentry.c +index 2c5363da7..9164df744 100644 +--- a/grub-core/commands/menuentry.c ++++ b/grub-core/commands/menuentry.c +@@ -154,7 +154,7 @@ grub_normal_add_menu_entry (int argc, const char **args, + goto fail; + + /* Save argc, args to pass as parameters to block arg later. */ +- menu_args = grub_malloc (sizeof (char*) * (argc + 1)); ++ menu_args = grub_calloc (argc + 1, sizeof (char *)); + if (! menu_args) + goto fail; + +diff --git a/grub-core/commands/nativedisk.c b/grub-core/commands/nativedisk.c +index 699447d11..7c8f97f6a 100644 +--- a/grub-core/commands/nativedisk.c ++++ b/grub-core/commands/nativedisk.c +@@ -195,7 +195,7 @@ grub_cmd_nativedisk (grub_command_t cmd __attribute__ ((unused)), + else + path_prefix = prefix; + +- mods = grub_malloc (argc * sizeof (mods[0])); ++ mods = grub_calloc (argc, sizeof (mods[0])); + if (!mods) + return grub_errno; + +diff --git a/grub-core/commands/parttool.c b/grub-core/commands/parttool.c +index 22b46b187..051e31320 100644 +--- a/grub-core/commands/parttool.c ++++ b/grub-core/commands/parttool.c +@@ -59,7 +59,13 @@ grub_parttool_register(const char *part_name, + for (nargs = 0; args[nargs].name != 0; nargs++); + cur->nargs = nargs; + cur->args = (struct grub_parttool_argdesc *) +- grub_malloc ((nargs + 1) * sizeof (struct grub_parttool_argdesc)); ++ grub_calloc (nargs + 1, sizeof (struct grub_parttool_argdesc)); ++ if (!cur->args) ++ { ++ grub_free (cur); ++ curhandle--; ++ return -1; ++ } + grub_memcpy (cur->args, args, + (nargs + 1) * sizeof (struct grub_parttool_argdesc)); + +@@ -257,7 +263,7 @@ grub_cmd_parttool (grub_command_t cmd __attribute__ ((unused)), + return err; + } + +- parsed = (int *) grub_zalloc (argc * sizeof (int)); ++ parsed = (int *) grub_calloc (argc, sizeof (int)); + + for (i = 1; i < argc; i++) + if (! parsed[i]) +@@ -290,7 +296,7 @@ grub_cmd_parttool (grub_command_t cmd __attribute__ ((unused)), + } + ptool = cur; + pargs = (struct grub_parttool_args *) +- grub_zalloc (ptool->nargs * sizeof (struct grub_parttool_args)); ++ grub_calloc (ptool->nargs, sizeof (struct grub_parttool_args)); + for (j = i; j < argc; j++) + if (! parsed[j]) + { +diff --git a/grub-core/commands/regexp.c b/grub-core/commands/regexp.c +index f00b184c8..4019164f3 100644 +--- a/grub-core/commands/regexp.c ++++ b/grub-core/commands/regexp.c +@@ -116,7 +116,7 @@ grub_cmd_regexp (grub_extcmd_context_t ctxt, int argc, char **args) + if (ret) + goto fail; + +- matches = grub_zalloc (sizeof (*matches) * (regex.re_nsub + 1)); ++ matches = grub_calloc (regex.re_nsub + 1, sizeof (*matches)); + if (! matches) + goto fail; + +diff --git a/grub-core/commands/search_wrap.c b/grub-core/commands/search_wrap.c +index d7fd26b94..47fc8eb99 100644 +--- a/grub-core/commands/search_wrap.c ++++ b/grub-core/commands/search_wrap.c +@@ -122,7 +122,7 @@ grub_cmd_search (grub_extcmd_context_t ctxt, int argc, char **args) + for (i = 0; state[SEARCH_HINT_BAREMETAL].args[i]; i++) + nhints++; + +- hints = grub_malloc (sizeof (hints[0]) * nhints); ++ hints = grub_calloc (nhints, sizeof (hints[0])); + if (!hints) + return grub_errno; + j = 0; +diff --git a/grub-core/disk/diskfilter.c b/grub-core/disk/diskfilter.c +index c3b578acf..68ca9e0be 100644 +--- a/grub-core/disk/diskfilter.c ++++ b/grub-core/disk/diskfilter.c +@@ -1134,7 +1134,7 @@ grub_diskfilter_make_raid (grub_size_t uuidlen, char *uuid, int nmemb, + array->lvs->segments->node_count = nmemb; + array->lvs->segments->raid_member_size = disk_size; + array->lvs->segments->nodes +- = grub_zalloc (nmemb * sizeof (array->lvs->segments->nodes[0])); ++ = grub_calloc (nmemb, sizeof (array->lvs->segments->nodes[0])); + array->lvs->segments->stripe_size = stripe_size; + for (i = 0; i < nmemb; i++) + { +@@ -1226,7 +1226,7 @@ insert_array (grub_disk_t disk, const struct grub_diskfilter_pv_id *id, + grub_partition_t p; + for (p = disk->partition; p; p = p->parent) + s++; +- pv->partmaps = xmalloc (s * sizeof (pv->partmaps[0])); ++ pv->partmaps = xcalloc (s, sizeof (pv->partmaps[0])); + s = 0; + for (p = disk->partition; p; p = p->parent) + pv->partmaps[s++] = xstrdup (p->partmap->name); +diff --git a/grub-core/disk/ieee1275/ofdisk.c b/grub-core/disk/ieee1275/ofdisk.c +index f73257e66..03674cb47 100644 +--- a/grub-core/disk/ieee1275/ofdisk.c ++++ b/grub-core/disk/ieee1275/ofdisk.c +@@ -297,7 +297,7 @@ dev_iterate (const struct grub_ieee1275_devalias *alias) + /* Power machines documentation specify 672 as maximum SAS disks in + one system. Using a slightly larger value to be safe. */ + table_size = 768; +- table = grub_malloc (table_size * sizeof (grub_uint64_t)); ++ table = grub_calloc (table_size, sizeof (grub_uint64_t)); + + if (!table) + { +diff --git a/grub-core/disk/ldm.c b/grub-core/disk/ldm.c +index 2a22d2d6c..e6323701a 100644 +--- a/grub-core/disk/ldm.c ++++ b/grub-core/disk/ldm.c +@@ -323,8 +323,8 @@ make_vg (grub_disk_t disk, + lv->segments->type = GRUB_DISKFILTER_MIRROR; + lv->segments->node_count = 0; + lv->segments->node_alloc = 8; +- lv->segments->nodes = grub_zalloc (sizeof (*lv->segments->nodes) +- * lv->segments->node_alloc); ++ lv->segments->nodes = grub_calloc (lv->segments->node_alloc, ++ sizeof (*lv->segments->nodes)); + if (!lv->segments->nodes) + goto fail2; + ptr = vblk[i].dynamic; +@@ -543,8 +543,8 @@ make_vg (grub_disk_t disk, + { + comp->segment_alloc = 8; + comp->segment_count = 0; +- comp->segments = grub_malloc (sizeof (*comp->segments) +- * comp->segment_alloc); ++ comp->segments = grub_calloc (comp->segment_alloc, ++ sizeof (*comp->segments)); + if (!comp->segments) + goto fail2; + } +@@ -590,8 +590,8 @@ make_vg (grub_disk_t disk, + } + comp->segments->node_count = read_int (ptr + 1, *ptr); + comp->segments->node_alloc = comp->segments->node_count; +- comp->segments->nodes = grub_zalloc (sizeof (*comp->segments->nodes) +- * comp->segments->node_alloc); ++ comp->segments->nodes = grub_calloc (comp->segments->node_alloc, ++ sizeof (*comp->segments->nodes)); + if (!lv->segments->nodes) + goto fail2; + } +@@ -1017,7 +1017,7 @@ grub_util_ldm_embed (struct grub_disk *disk, unsigned int *nsectors, + *nsectors = lv->size; + if (*nsectors > max_nsectors) + *nsectors = max_nsectors; +- *sectors = grub_malloc (*nsectors * sizeof (**sectors)); ++ *sectors = grub_calloc (*nsectors, sizeof (**sectors)); + if (!*sectors) + return grub_errno; + for (i = 0; i < *nsectors; i++) +diff --git a/grub-core/disk/luks.c b/grub-core/disk/luks.c +index 86c50c612..18b3a8bb1 100644 +--- a/grub-core/disk/luks.c ++++ b/grub-core/disk/luks.c +@@ -336,7 +336,7 @@ luks_recover_key (grub_disk_t source, + && grub_be_to_cpu32 (header.keyblock[i].stripes) > max_stripes) + max_stripes = grub_be_to_cpu32 (header.keyblock[i].stripes); + +- split_key = grub_malloc (keysize * max_stripes); ++ split_key = grub_calloc (keysize, max_stripes); + if (!split_key) + return grub_errno; + +diff --git a/grub-core/disk/lvm.c b/grub-core/disk/lvm.c +index 7b265c780..d1df640b3 100644 +--- a/grub-core/disk/lvm.c ++++ b/grub-core/disk/lvm.c +@@ -173,7 +173,7 @@ grub_lvm_detect (grub_disk_t disk, + first one. */ + + /* Allocate buffer space for the circular worst-case scenario. */ +- metadatabuf = grub_malloc (2 * mda_size); ++ metadatabuf = grub_calloc (2, mda_size); + if (! metadatabuf) + goto fail; + +@@ -426,7 +426,7 @@ grub_lvm_detect (grub_disk_t disk, + #endif + goto lvs_fail; + } +- lv->segments = grub_zalloc (sizeof (*seg) * lv->segment_count); ++ lv->segments = grub_calloc (lv->segment_count, sizeof (*seg)); + seg = lv->segments; + + for (i = 0; i < lv->segment_count; i++) +@@ -483,8 +483,8 @@ grub_lvm_detect (grub_disk_t disk, + if (seg->node_count != 1) + seg->stripe_size = grub_lvm_getvalue (&p, "stripe_size = "); + +- seg->nodes = grub_zalloc (sizeof (*stripe) +- * seg->node_count); ++ seg->nodes = grub_calloc (seg->node_count, ++ sizeof (*stripe)); + stripe = seg->nodes; + + p = grub_strstr (p, "stripes = ["); +diff --git a/grub-core/disk/xen/xendisk.c b/grub-core/disk/xen/xendisk.c +index 48476cbbf..d6612eebd 100644 +--- a/grub-core/disk/xen/xendisk.c ++++ b/grub-core/disk/xen/xendisk.c +@@ -426,7 +426,7 @@ grub_xendisk_init (void) + if (!ctr) + return; + +- virtdisks = grub_malloc (ctr * sizeof (virtdisks[0])); ++ virtdisks = grub_calloc (ctr, sizeof (virtdisks[0])); + if (!virtdisks) + return; + if (grub_xenstore_dir ("device/vbd", fill, &ctr)) +diff --git a/grub-core/efiemu/loadcore.c b/grub-core/efiemu/loadcore.c +index 44085ef81..2b924623f 100644 +--- a/grub-core/efiemu/loadcore.c ++++ b/grub-core/efiemu/loadcore.c +@@ -201,7 +201,7 @@ grub_efiemu_count_symbols (const Elf_Ehdr *e) + + grub_efiemu_nelfsyms = (unsigned) s->sh_size / (unsigned) s->sh_entsize; + grub_efiemu_elfsyms = (struct grub_efiemu_elf_sym *) +- grub_malloc (sizeof (struct grub_efiemu_elf_sym) * grub_efiemu_nelfsyms); ++ grub_calloc (grub_efiemu_nelfsyms, sizeof (struct grub_efiemu_elf_sym)); + + /* Relocators */ + for (i = 0, s = (Elf_Shdr *) ((char *) e + e->e_shoff); +diff --git a/grub-core/efiemu/mm.c b/grub-core/efiemu/mm.c +index 52a032f7b..9b8e0d0ad 100644 +--- a/grub-core/efiemu/mm.c ++++ b/grub-core/efiemu/mm.c +@@ -554,11 +554,11 @@ grub_efiemu_mmap_sort_and_uniq (void) + /* Initialize variables*/ + grub_memset (present, 0, sizeof (int) * GRUB_EFI_MAX_MEMORY_TYPE); + scanline_events = (struct grub_efiemu_mmap_scan *) +- grub_malloc (sizeof (struct grub_efiemu_mmap_scan) * 2 * mmap_num); ++ grub_calloc (mmap_num, sizeof (struct grub_efiemu_mmap_scan) * 2); + + /* Number of chunks can't increase more than by factor of 2 */ + result = (grub_efi_memory_descriptor_t *) +- grub_malloc (sizeof (grub_efi_memory_descriptor_t) * 2 * mmap_num); ++ grub_calloc (mmap_num, sizeof (grub_efi_memory_descriptor_t) * 2); + if (!result || !scanline_events) + { + grub_free (result); +@@ -660,7 +660,7 @@ grub_efiemu_mm_do_alloc (void) + + /* Preallocate mmap */ + efiemu_mmap = (grub_efi_memory_descriptor_t *) +- grub_malloc (mmap_reserved_size * sizeof (grub_efi_memory_descriptor_t)); ++ grub_calloc (mmap_reserved_size, sizeof (grub_efi_memory_descriptor_t)); + if (!efiemu_mmap) + { + grub_efiemu_unload (); +diff --git a/grub-core/font/font.c b/grub-core/font/font.c +index 85a292557..8e118b315 100644 +--- a/grub-core/font/font.c ++++ b/grub-core/font/font.c +@@ -293,8 +293,7 @@ load_font_index (grub_file_t file, grub_uint32_t sect_length, struct + font->num_chars = sect_length / FONT_CHAR_INDEX_ENTRY_SIZE; + + /* Allocate the character index array. */ +- font->char_index = grub_malloc (font->num_chars +- * sizeof (struct char_index_entry)); ++ font->char_index = grub_calloc (font->num_chars, sizeof (struct char_index_entry)); + if (!font->char_index) + return 1; + font->bmp_idx = grub_malloc (0x10000 * sizeof (grub_uint16_t)); +diff --git a/grub-core/fs/affs.c b/grub-core/fs/affs.c +index 6b6a2bc91..220b3712f 100644 +--- a/grub-core/fs/affs.c ++++ b/grub-core/fs/affs.c +@@ -301,7 +301,7 @@ grub_affs_read_symlink (grub_fshelp_node_t node) + return 0; + } + latin1[symlink_size] = 0; +- utf8 = grub_malloc (symlink_size * GRUB_MAX_UTF8_PER_LATIN1 + 1); ++ utf8 = grub_calloc (GRUB_MAX_UTF8_PER_LATIN1 + 1, symlink_size); + if (!utf8) + { + grub_free (latin1); +@@ -422,7 +422,7 @@ grub_affs_iterate_dir (grub_fshelp_node_t dir, + return 1; + } + +- hashtable = grub_zalloc (data->htsize * sizeof (*hashtable)); ++ hashtable = grub_calloc (data->htsize, sizeof (*hashtable)); + if (!hashtable) + return 1; + +@@ -628,7 +628,7 @@ grub_affs_label (grub_device_t device, char **label) + len = file.namelen; + if (len > sizeof (file.name)) + len = sizeof (file.name); +- *label = grub_malloc (len * GRUB_MAX_UTF8_PER_LATIN1 + 1); ++ *label = grub_calloc (GRUB_MAX_UTF8_PER_LATIN1 + 1, len); + if (*label) + *grub_latin1_to_utf8 ((grub_uint8_t *) *label, file.name, len) = '\0'; + } +diff --git a/grub-core/fs/btrfs.c b/grub-core/fs/btrfs.c +index 48bd3d04a..11272efc1 100644 +--- a/grub-core/fs/btrfs.c ++++ b/grub-core/fs/btrfs.c +@@ -413,7 +413,7 @@ lower_bound (struct grub_btrfs_data *data, + { + desc->allocated = 16; + desc->depth = 0; +- desc->data = grub_malloc (sizeof (desc->data[0]) * desc->allocated); ++ desc->data = grub_calloc (desc->allocated, sizeof (desc->data[0])); + if (!desc->data) + return grub_errno; + } +@@ -752,7 +752,7 @@ raid56_read_retry (struct grub_btrfs_data *data, + grub_err_t ret = GRUB_ERR_OUT_OF_MEMORY; + grub_uint64_t i, failed_devices; + +- buffers = grub_zalloc (sizeof(*buffers) * nstripes); ++ buffers = grub_calloc (nstripes, sizeof (*buffers)); + if (!buffers) + goto cleanup; + +@@ -2160,7 +2160,7 @@ grub_btrfs_embed (grub_device_t device __attribute__ ((unused)), + *nsectors = 64 * 2 - 1; + if (*nsectors > max_nsectors) + *nsectors = max_nsectors; +- *sectors = grub_malloc (*nsectors * sizeof (**sectors)); ++ *sectors = grub_calloc (*nsectors, sizeof (**sectors)); + if (!*sectors) + return grub_errno; + for (i = 0; i < *nsectors; i++) +diff --git a/grub-core/fs/hfs.c b/grub-core/fs/hfs.c +index ac0a40990..3fe842b4d 100644 +--- a/grub-core/fs/hfs.c ++++ b/grub-core/fs/hfs.c +@@ -1360,7 +1360,7 @@ grub_hfs_label (grub_device_t device, char **label) + grub_size_t len = data->sblock.volname[0]; + if (len > sizeof (data->sblock.volname) - 1) + len = sizeof (data->sblock.volname) - 1; +- *label = grub_malloc (len * MAX_UTF8_PER_MAC_ROMAN + 1); ++ *label = grub_calloc (MAX_UTF8_PER_MAC_ROMAN + 1, len); + if (*label) + macroman_to_utf8 (*label, data->sblock.volname + 1, + len + 1, 0); +diff --git a/grub-core/fs/hfsplus.c b/grub-core/fs/hfsplus.c +index 54786bb1c..dae43becc 100644 +--- a/grub-core/fs/hfsplus.c ++++ b/grub-core/fs/hfsplus.c +@@ -720,7 +720,7 @@ list_nodes (void *record, void *hook_arg) + if (! filename) + return 0; + +- keyname = grub_malloc (grub_be_to_cpu16 (catkey->namelen) * sizeof (*keyname)); ++ keyname = grub_calloc (grub_be_to_cpu16 (catkey->namelen), sizeof (*keyname)); + if (!keyname) + { + grub_free (filename); +@@ -1007,7 +1007,7 @@ grub_hfsplus_label (grub_device_t device, char **label) + grub_hfsplus_btree_recptr (&data->catalog_tree, node, ptr); + + label_len = grub_be_to_cpu16 (catkey->namelen); +- label_name = grub_malloc (label_len * sizeof (*label_name)); ++ label_name = grub_calloc (label_len, sizeof (*label_name)); + if (!label_name) + { + grub_free (node); +@@ -1029,7 +1029,7 @@ grub_hfsplus_label (grub_device_t device, char **label) + } + } + +- *label = grub_malloc (label_len * GRUB_MAX_UTF8_PER_UTF16 + 1); ++ *label = grub_calloc (label_len, GRUB_MAX_UTF8_PER_UTF16 + 1); + if (! *label) + { + grub_free (label_name); +diff --git a/grub-core/fs/iso9660.c b/grub-core/fs/iso9660.c +index 49c0c632b..4f1b52a55 100644 +--- a/grub-core/fs/iso9660.c ++++ b/grub-core/fs/iso9660.c +@@ -331,7 +331,7 @@ grub_iso9660_convert_string (grub_uint8_t *us, int len) + int i; + grub_uint16_t t[MAX_NAMELEN / 2 + 1]; + +- p = grub_malloc (len * GRUB_MAX_UTF8_PER_UTF16 + 1); ++ p = grub_calloc (len, GRUB_MAX_UTF8_PER_UTF16 + 1); + if (! p) + return NULL; + +diff --git a/grub-core/fs/ntfs.c b/grub-core/fs/ntfs.c +index fc4e1f678..2f34f76da 100644 +--- a/grub-core/fs/ntfs.c ++++ b/grub-core/fs/ntfs.c +@@ -556,8 +556,8 @@ get_utf8 (grub_uint8_t *in, grub_size_t len) + grub_uint16_t *tmp; + grub_size_t i; + +- buf = grub_malloc (len * GRUB_MAX_UTF8_PER_UTF16 + 1); +- tmp = grub_malloc (len * sizeof (tmp[0])); ++ buf = grub_calloc (len, GRUB_MAX_UTF8_PER_UTF16 + 1); ++ tmp = grub_calloc (len, sizeof (tmp[0])); + if (!buf || !tmp) + { + grub_free (buf); +diff --git a/grub-core/fs/sfs.c b/grub-core/fs/sfs.c +index 50c1fe72f..90f7fb379 100644 +--- a/grub-core/fs/sfs.c ++++ b/grub-core/fs/sfs.c +@@ -266,7 +266,7 @@ grub_sfs_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock) + node->next_extent = node->block; + node->cache_size = 0; + +- node->cache = grub_malloc (sizeof (node->cache[0]) * cache_size); ++ node->cache = grub_calloc (cache_size, sizeof (node->cache[0])); + if (!node->cache) + { + grub_errno = 0; +diff --git a/grub-core/fs/tar.c b/grub-core/fs/tar.c +index 7d63e0c99..c551ed6b5 100644 +--- a/grub-core/fs/tar.c ++++ b/grub-core/fs/tar.c +@@ -120,7 +120,7 @@ grub_cpio_find_file (struct grub_archelp_data *data, char **name, + if (data->linkname_alloc < linksize + 1) + { + char *n; +- n = grub_malloc (2 * (linksize + 1)); ++ n = grub_calloc (2, linksize + 1); + if (!n) + return grub_errno; + grub_free (data->linkname); +diff --git a/grub-core/fs/udf.c b/grub-core/fs/udf.c +index dc8b6e2d1..a83761674 100644 +--- a/grub-core/fs/udf.c ++++ b/grub-core/fs/udf.c +@@ -873,7 +873,7 @@ read_string (const grub_uint8_t *raw, grub_size_t sz, char *outbuf) + { + unsigned i; + utf16len = sz - 1; +- utf16 = grub_malloc (utf16len * sizeof (utf16[0])); ++ utf16 = grub_calloc (utf16len, sizeof (utf16[0])); + if (!utf16) + return NULL; + for (i = 0; i < utf16len; i++) +@@ -883,7 +883,7 @@ read_string (const grub_uint8_t *raw, grub_size_t sz, char *outbuf) + { + unsigned i; + utf16len = (sz - 1) / 2; +- utf16 = grub_malloc (utf16len * sizeof (utf16[0])); ++ utf16 = grub_calloc (utf16len, sizeof (utf16[0])); + if (!utf16) + return NULL; + for (i = 0; i < utf16len; i++) +diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c +index 2f72e42bf..381dde556 100644 +--- a/grub-core/fs/zfs/zfs.c ++++ b/grub-core/fs/zfs/zfs.c +@@ -3325,7 +3325,7 @@ dnode_get_fullpath (const char *fullpath, struct subvolume *subvol, + } + subvol->nkeys = 0; + zap_iterate (&keychain_dn, 8, count_zap_keys, &ctx, data); +- subvol->keyring = grub_zalloc (subvol->nkeys * sizeof (subvol->keyring[0])); ++ subvol->keyring = grub_calloc (subvol->nkeys, sizeof (subvol->keyring[0])); + if (!subvol->keyring) + { + grub_free (fsname); +@@ -4336,7 +4336,7 @@ grub_zfs_embed (grub_device_t device __attribute__ ((unused)), + *nsectors = (VDEV_BOOT_SIZE >> GRUB_DISK_SECTOR_BITS); + if (*nsectors > max_nsectors) + *nsectors = max_nsectors; +- *sectors = grub_malloc (*nsectors * sizeof (**sectors)); ++ *sectors = grub_calloc (*nsectors, sizeof (**sectors)); + if (!*sectors) + return grub_errno; + for (i = 0; i < *nsectors; i++) +diff --git a/grub-core/gfxmenu/gui_string_util.c b/grub-core/gfxmenu/gui_string_util.c +index a9a415e31..ba1e1eab3 100644 +--- a/grub-core/gfxmenu/gui_string_util.c ++++ b/grub-core/gfxmenu/gui_string_util.c +@@ -55,7 +55,7 @@ canonicalize_path (const char *path) + if (*p == '/') + components++; + +- char **path_array = grub_malloc (components * sizeof (*path_array)); ++ char **path_array = grub_calloc (components, sizeof (*path_array)); + if (! path_array) + return 0; + +diff --git a/grub-core/gfxmenu/widget-box.c b/grub-core/gfxmenu/widget-box.c +index b60602889..470597ded 100644 +--- a/grub-core/gfxmenu/widget-box.c ++++ b/grub-core/gfxmenu/widget-box.c +@@ -303,10 +303,10 @@ grub_gfxmenu_create_box (const char *pixmaps_prefix, + box->content_height = 0; + box->raw_pixmaps = + (struct grub_video_bitmap **) +- grub_malloc (BOX_NUM_PIXMAPS * sizeof (struct grub_video_bitmap *)); ++ grub_calloc (BOX_NUM_PIXMAPS, sizeof (struct grub_video_bitmap *)); + box->scaled_pixmaps = + (struct grub_video_bitmap **) +- grub_malloc (BOX_NUM_PIXMAPS * sizeof (struct grub_video_bitmap *)); ++ grub_calloc (BOX_NUM_PIXMAPS, sizeof (struct grub_video_bitmap *)); + + /* Initialize all pixmap pointers to NULL so that proper destruction can + be performed if an error is encountered partway through construction. */ +diff --git a/grub-core/io/gzio.c b/grub-core/io/gzio.c +index 6208a9763..43d98a7bd 100644 +--- a/grub-core/io/gzio.c ++++ b/grub-core/io/gzio.c +@@ -554,7 +554,7 @@ huft_build (unsigned *b, /* code lengths in bits (all assumed <= BMAX) */ + z = 1 << j; /* table entries for j-bit table */ + + /* allocate and link in new table */ +- q = (struct huft *) grub_zalloc ((z + 1) * sizeof (struct huft)); ++ q = (struct huft *) grub_calloc (z + 1, sizeof (struct huft)); + if (! q) + { + if (h) +diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c +index 6e1ceb905..dc31caa21 100644 +--- a/grub-core/kern/efi/efi.c ++++ b/grub-core/kern/efi/efi.c +@@ -202,7 +202,7 @@ grub_efi_set_variable(const char *var, const grub_efi_guid_t *guid, + + len = grub_strlen (var); + len16 = len * GRUB_MAX_UTF16_PER_UTF8; +- var16 = grub_malloc ((len16 + 1) * sizeof (var16[0])); ++ var16 = grub_calloc (len16 + 1, sizeof (var16[0])); + if (!var16) + return grub_errno; + len16 = grub_utf8_to_utf16 (var16, len16, (grub_uint8_t *) var, len, NULL); +@@ -237,7 +237,7 @@ grub_efi_get_variable (const char *var, const grub_efi_guid_t *guid, + + len = grub_strlen (var); + len16 = len * GRUB_MAX_UTF16_PER_UTF8; +- var16 = grub_malloc ((len16 + 1) * sizeof (var16[0])); ++ var16 = grub_calloc (len16 + 1, sizeof (var16[0])); + if (!var16) + return NULL; + len16 = grub_utf8_to_utf16 (var16, len16, (grub_uint8_t *) var, len, NULL); +@@ -383,7 +383,7 @@ grub_efi_get_filename (grub_efi_device_path_t *dp0) + while (len > 0 && fp->path_name[len - 1] == 0) + len--; + +- dup_name = grub_malloc (len * sizeof (*dup_name)); ++ dup_name = grub_calloc (len, sizeof (*dup_name)); + if (!dup_name) + { + grub_free (name); +diff --git a/grub-core/kern/emu/hostdisk.c b/grub-core/kern/emu/hostdisk.c +index e9ec680cd..d975265b2 100644 +--- a/grub-core/kern/emu/hostdisk.c ++++ b/grub-core/kern/emu/hostdisk.c +@@ -615,7 +615,7 @@ static char * + grub_util_path_concat_real (size_t n, int ext, va_list ap) + { + size_t totlen = 0; +- char **l = xmalloc ((n + ext) * sizeof (l[0])); ++ char **l = xcalloc (n + ext, sizeof (l[0])); + char *r, *p, *pi; + size_t i; + int first = 1; +diff --git a/grub-core/kern/fs.c b/grub-core/kern/fs.c +index 2b85f4950..f90be6566 100644 +--- a/grub-core/kern/fs.c ++++ b/grub-core/kern/fs.c +@@ -151,7 +151,7 @@ grub_fs_blocklist_open (grub_file_t file, const char *name) + while (p); + + /* Allocate a block list. */ +- blocks = grub_zalloc (sizeof (struct grub_fs_block) * (num + 1)); ++ blocks = grub_calloc (num + 1, sizeof (struct grub_fs_block)); + if (! blocks) + return 0; + +diff --git a/grub-core/kern/misc.c b/grub-core/kern/misc.c +index 3b633d51f..a7abd367a 100644 +--- a/grub-core/kern/misc.c ++++ b/grub-core/kern/misc.c +@@ -690,7 +690,7 @@ parse_printf_args (const char *fmt0, struct printf_args *args, + args->ptr = args->prealloc; + else + { +- args->ptr = grub_malloc (args->count * sizeof (args->ptr[0])); ++ args->ptr = grub_calloc (args->count, sizeof (args->ptr[0])); + if (!args->ptr) + { + grub_errno = GRUB_ERR_NONE; +diff --git a/grub-core/kern/parser.c b/grub-core/kern/parser.c +index 78175aac2..619db3122 100644 +--- a/grub-core/kern/parser.c ++++ b/grub-core/kern/parser.c +@@ -213,7 +213,7 @@ grub_parser_split_cmdline (const char *cmdline, + return grub_errno; + grub_memcpy (args, buffer, bp - buffer); + +- *argv = grub_malloc (sizeof (char *) * (*argc + 1)); ++ *argv = grub_calloc (*argc + 1, sizeof (char *)); + if (!*argv) + { + grub_free (args); +diff --git a/grub-core/kern/uboot/uboot.c b/grub-core/kern/uboot/uboot.c +index be4816fe6..aac8f9ae1 100644 +--- a/grub-core/kern/uboot/uboot.c ++++ b/grub-core/kern/uboot/uboot.c +@@ -133,7 +133,7 @@ grub_uboot_dev_enum (void) + return num_devices; + + max_devices = 2; +- enum_devices = grub_malloc (sizeof(struct device_info) * max_devices); ++ enum_devices = grub_calloc (max_devices, sizeof(struct device_info)); + if (!enum_devices) + return 0; + +diff --git a/grub-core/lib/libgcrypt/cipher/ac.c b/grub-core/lib/libgcrypt/cipher/ac.c +index f5e946a2d..63f6fcd11 100644 +--- a/grub-core/lib/libgcrypt/cipher/ac.c ++++ b/grub-core/lib/libgcrypt/cipher/ac.c +@@ -185,7 +185,7 @@ ac_data_mpi_copy (gcry_ac_mpi_t *data_mpis, unsigned int data_mpis_n, + gcry_mpi_t mpi; + char *label; + +- data_mpis_new = gcry_malloc (sizeof (*data_mpis_new) * data_mpis_n); ++ data_mpis_new = gcry_calloc (data_mpis_n, sizeof (*data_mpis_new)); + if (! data_mpis_new) + { + err = gcry_error_from_errno (errno); +@@ -572,7 +572,7 @@ _gcry_ac_data_to_sexp (gcry_ac_data_t data, gcry_sexp_t *sexp, + } + + /* Add MPI list. */ +- arg_list = gcry_malloc (sizeof (*arg_list) * (data_n + 1)); ++ arg_list = gcry_calloc (data_n + 1, sizeof (*arg_list)); + if (! arg_list) + { + err = gcry_error_from_errno (errno); +@@ -1283,7 +1283,7 @@ ac_data_construct (const char *identifier, int include_flags, + /* We build a list of arguments to pass to + gcry_sexp_build_array(). */ + data_length = _gcry_ac_data_length (data); +- arg_list = gcry_malloc (sizeof (*arg_list) * (data_length * 2)); ++ arg_list = gcry_calloc (data_length, sizeof (*arg_list) * 2); + if (! arg_list) + { + err = gcry_error_from_errno (errno); +@@ -1593,7 +1593,7 @@ _gcry_ac_key_pair_generate (gcry_ac_handle_t handle, unsigned int nbits, + arg_list_n += 2; + + /* Allocate list. */ +- arg_list = gcry_malloc (sizeof (*arg_list) * arg_list_n); ++ arg_list = gcry_calloc (arg_list_n, sizeof (*arg_list)); + if (! arg_list) + { + err = gcry_error_from_errno (errno); +diff --git a/grub-core/lib/libgcrypt/cipher/primegen.c b/grub-core/lib/libgcrypt/cipher/primegen.c +index 2788e349f..b12e79b19 100644 +--- a/grub-core/lib/libgcrypt/cipher/primegen.c ++++ b/grub-core/lib/libgcrypt/cipher/primegen.c +@@ -383,7 +383,7 @@ prime_generate_internal (int need_q_factor, + } + + /* Allocate an array to track pool usage. */ +- pool_in_use = gcry_malloc (n * sizeof *pool_in_use); ++ pool_in_use = gcry_calloc (n, sizeof *pool_in_use); + if (!pool_in_use) + { + err = gpg_err_code_from_errno (errno); +@@ -765,7 +765,7 @@ gen_prime (unsigned int nbits, int secret, int randomlevel, + if (nbits < 16) + log_fatal ("can't generate a prime with less than %d bits\n", 16); + +- mods = gcry_xmalloc( no_of_small_prime_numbers * sizeof *mods ); ++ mods = gcry_xcalloc( no_of_small_prime_numbers, sizeof *mods); + /* Make nbits fit into gcry_mpi_t implementation. */ + val_2 = mpi_alloc_set_ui( 2 ); + val_3 = mpi_alloc_set_ui( 3); +diff --git a/grub-core/lib/libgcrypt/cipher/pubkey.c b/grub-core/lib/libgcrypt/cipher/pubkey.c +index 910982141..ca087ad75 100644 +--- a/grub-core/lib/libgcrypt/cipher/pubkey.c ++++ b/grub-core/lib/libgcrypt/cipher/pubkey.c +@@ -2941,7 +2941,7 @@ gcry_pk_encrypt (gcry_sexp_t *r_ciph, gcry_sexp_t s_data, gcry_sexp_t s_pkey) + * array to a format string, so we have to do it this way :-(. */ + /* FIXME: There is now such a format specifier, so we can + change the code to be more clear. */ +- arg_list = malloc (nelem * sizeof *arg_list); ++ arg_list = calloc (nelem, sizeof *arg_list); + if (!arg_list) + { + rc = gpg_err_code_from_syserror (); +@@ -3233,7 +3233,7 @@ gcry_pk_sign (gcry_sexp_t *r_sig, gcry_sexp_t s_hash, gcry_sexp_t s_skey) + } + strcpy (p, "))"); + +- arg_list = malloc (nelem * sizeof *arg_list); ++ arg_list = calloc (nelem, sizeof *arg_list); + if (!arg_list) + { + rc = gpg_err_code_from_syserror (); +diff --git a/grub-core/lib/priority_queue.c b/grub-core/lib/priority_queue.c +index 659be0b7f..7d5e7c05a 100644 +--- a/grub-core/lib/priority_queue.c ++++ b/grub-core/lib/priority_queue.c +@@ -92,7 +92,7 @@ grub_priority_queue_new (grub_size_t elsize, + { + struct grub_priority_queue *ret; + void *els; +- els = grub_malloc (elsize * 8); ++ els = grub_calloc (8, elsize); + if (!els) + return 0; + ret = (struct grub_priority_queue *) grub_malloc (sizeof (*ret)); +diff --git a/grub-core/lib/reed_solomon.c b/grub-core/lib/reed_solomon.c +index ee9fa7b4f..467305b46 100644 +--- a/grub-core/lib/reed_solomon.c ++++ b/grub-core/lib/reed_solomon.c +@@ -20,6 +20,7 @@ + #include + #include + #include ++#define xcalloc calloc + #define xmalloc malloc + #define grub_memset memset + #define grub_memcpy memcpy +@@ -158,11 +159,9 @@ rs_encode (gf_single_t *data, grub_size_t s, grub_size_t rs) + gf_single_t *rs_polynomial; + int i, j; + gf_single_t *m; +- m = xmalloc ((s + rs) * sizeof (gf_single_t)); ++ m = xcalloc (s + rs, sizeof (gf_single_t)); + grub_memcpy (m, data, s * sizeof (gf_single_t)); +- grub_memset (m + s, 0, rs * sizeof (gf_single_t)); +- rs_polynomial = xmalloc ((rs + 1) * sizeof (gf_single_t)); +- grub_memset (rs_polynomial, 0, (rs + 1) * sizeof (gf_single_t)); ++ rs_polynomial = xcalloc (rs + 1, sizeof (gf_single_t)); + rs_polynomial[rs] = 1; + /* Multiply with X - a^r */ + for (j = 0; j < rs; j++) +diff --git a/grub-core/lib/relocator.c b/grub-core/lib/relocator.c +index ea3ebc719..5847aac36 100644 +--- a/grub-core/lib/relocator.c ++++ b/grub-core/lib/relocator.c +@@ -495,9 +495,9 @@ malloc_in_range (struct grub_relocator *rel, + } + #endif + +- eventt = grub_malloc (maxevents * sizeof (events[0])); ++ eventt = grub_calloc (maxevents, sizeof (events[0])); + counter = grub_malloc ((DIGITSORT_MASK + 2) * sizeof (counter[0])); +- events = grub_malloc (maxevents * sizeof (events[0])); ++ events = grub_calloc (maxevents, sizeof (events[0])); + if (!events || !eventt || !counter) + { + grub_dprintf ("relocator", "events or counter allocation failed %d\n", +@@ -963,7 +963,7 @@ malloc_in_range (struct grub_relocator *rel, + #endif + unsigned cural = 0; + int oom = 0; +- res->subchunks = grub_malloc (sizeof (res->subchunks[0]) * nallocs); ++ res->subchunks = grub_calloc (nallocs, sizeof (res->subchunks[0])); + if (!res->subchunks) + oom = 1; + res->nsubchunks = nallocs; +@@ -1562,8 +1562,8 @@ grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr, + count[(chunk->src & 0xff) + 1]++; + } + } +- from = grub_malloc (nchunks * sizeof (sorted[0])); +- to = grub_malloc (nchunks * sizeof (sorted[0])); ++ from = grub_calloc (nchunks, sizeof (sorted[0])); ++ to = grub_calloc (nchunks, sizeof (sorted[0])); + if (!from || !to) + { + grub_free (from); +diff --git a/grub-core/lib/zstd/fse_decompress.c b/grub-core/lib/zstd/fse_decompress.c +index 72bbead5b..2227b84bc 100644 +--- a/grub-core/lib/zstd/fse_decompress.c ++++ b/grub-core/lib/zstd/fse_decompress.c +@@ -82,7 +82,7 @@ + FSE_DTable* FSE_createDTable (unsigned tableLog) + { + if (tableLog > FSE_TABLELOG_ABSOLUTE_MAX) tableLog = FSE_TABLELOG_ABSOLUTE_MAX; +- return (FSE_DTable*)malloc( FSE_DTABLE_SIZE_U32(tableLog) * sizeof (U32) ); ++ return (FSE_DTable*)calloc( FSE_DTABLE_SIZE_U32(tableLog), sizeof (U32) ); + } + + void FSE_freeDTable (FSE_DTable* dt) +diff --git a/grub-core/loader/arm/linux.c b/grub-core/loader/arm/linux.c +index 51684914c..d70c17486 100644 +--- a/grub-core/loader/arm/linux.c ++++ b/grub-core/loader/arm/linux.c +@@ -78,7 +78,7 @@ linux_prepare_atag (void *target_atag) + + /* some place for cmdline, initrd and terminator. */ + tmp_size = get_atag_size (atag_orig) + 20 + (arg_size) / 4; +- tmp_atag = grub_malloc (tmp_size * sizeof (grub_uint32_t)); ++ tmp_atag = grub_calloc (tmp_size, sizeof (grub_uint32_t)); + if (!tmp_atag) + return grub_errno; + +diff --git a/grub-core/loader/efi/chainloader.c b/grub-core/loader/efi/chainloader.c +index cd92ea3f2..daf8c6b54 100644 +--- a/grub-core/loader/efi/chainloader.c ++++ b/grub-core/loader/efi/chainloader.c +@@ -116,7 +116,7 @@ copy_file_path (grub_efi_file_path_device_path_t *fp, + fp->header.type = GRUB_EFI_MEDIA_DEVICE_PATH_TYPE; + fp->header.subtype = GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE; + +- path_name = grub_malloc (len * GRUB_MAX_UTF16_PER_UTF8 * sizeof (*path_name)); ++ path_name = grub_calloc (len, GRUB_MAX_UTF16_PER_UTF8 * sizeof (*path_name)); + if (!path_name) + return; + +diff --git a/grub-core/loader/i386/bsdXX.c b/grub-core/loader/i386/bsdXX.c +index af6741d15..a8d8bf7da 100644 +--- a/grub-core/loader/i386/bsdXX.c ++++ b/grub-core/loader/i386/bsdXX.c +@@ -48,7 +48,7 @@ read_headers (grub_file_t file, const char *filename, Elf_Ehdr *e, char **shdr) + if (e->e_ident[EI_CLASS] != SUFFIX (ELFCLASS)) + return grub_error (GRUB_ERR_BAD_OS, N_("invalid arch-dependent ELF magic")); + +- *shdr = grub_malloc ((grub_uint32_t) e->e_shnum * e->e_shentsize); ++ *shdr = grub_calloc (e->e_shnum, e->e_shentsize); + if (! *shdr) + return grub_errno; + +diff --git a/grub-core/loader/i386/xnu.c b/grub-core/loader/i386/xnu.c +index e64ed08f5..b7d176b5d 100644 +--- a/grub-core/loader/i386/xnu.c ++++ b/grub-core/loader/i386/xnu.c +@@ -295,7 +295,7 @@ grub_xnu_devprop_add_property_utf8 (struct grub_xnu_devprop_device_descriptor *d + return grub_errno; + + len = grub_strlen (name); +- utf16 = grub_malloc (sizeof (grub_uint16_t) * len); ++ utf16 = grub_calloc (len, sizeof (grub_uint16_t)); + if (!utf16) + { + grub_free (utf8); +@@ -331,7 +331,7 @@ grub_xnu_devprop_add_property_utf16 (struct grub_xnu_devprop_device_descriptor * + grub_uint16_t *utf16; + grub_err_t err; + +- utf16 = grub_malloc (sizeof (grub_uint16_t) * namelen); ++ utf16 = grub_calloc (namelen, sizeof (grub_uint16_t)); + if (!utf16) + return grub_errno; + grub_memcpy (utf16, name, sizeof (grub_uint16_t) * namelen); +diff --git a/grub-core/loader/macho.c b/grub-core/loader/macho.c +index 085f9c689..05710c48e 100644 +--- a/grub-core/loader/macho.c ++++ b/grub-core/loader/macho.c +@@ -97,7 +97,7 @@ grub_macho_file (grub_file_t file, const char *filename, int is_64bit) + if (grub_file_seek (macho->file, sizeof (struct grub_macho_fat_header)) + == (grub_off_t) -1) + goto fail; +- archs = grub_malloc (sizeof (struct grub_macho_fat_arch) * narchs); ++ archs = grub_calloc (narchs, sizeof (struct grub_macho_fat_arch)); + if (!archs) + goto fail; + if (grub_file_read (macho->file, archs, +diff --git a/grub-core/loader/multiboot_elfxx.c b/grub-core/loader/multiboot_elfxx.c +index 70cd1db51..cc6853692 100644 +--- a/grub-core/loader/multiboot_elfxx.c ++++ b/grub-core/loader/multiboot_elfxx.c +@@ -217,7 +217,7 @@ CONCAT(grub_multiboot_load_elf, XX) (mbi_load_data_t *mld) + { + grub_uint8_t *shdr, *shdrptr; + +- shdr = grub_malloc ((grub_uint32_t) ehdr->e_shnum * ehdr->e_shentsize); ++ shdr = grub_calloc (ehdr->e_shnum, ehdr->e_shentsize); + if (!shdr) + return grub_errno; + +diff --git a/grub-core/loader/xnu.c b/grub-core/loader/xnu.c +index 7f74d1d6f..77d7060e1 100644 +--- a/grub-core/loader/xnu.c ++++ b/grub-core/loader/xnu.c +@@ -800,7 +800,7 @@ grub_cmd_xnu_mkext (grub_command_t cmd __attribute__ ((unused)), + if (grub_be_to_cpu32 (head.magic) == GRUB_MACHO_FAT_MAGIC) + { + narchs = grub_be_to_cpu32 (head.nfat_arch); +- archs = grub_malloc (sizeof (struct grub_macho_fat_arch) * narchs); ++ archs = grub_calloc (narchs, sizeof (struct grub_macho_fat_arch)); + if (! archs) + { + grub_file_close (file); +diff --git a/grub-core/mmap/mmap.c b/grub-core/mmap/mmap.c +index 6a31cbae3..57b4e9a72 100644 +--- a/grub-core/mmap/mmap.c ++++ b/grub-core/mmap/mmap.c +@@ -143,9 +143,9 @@ grub_mmap_iterate (grub_memory_hook_t hook, void *hook_data) + + /* Initialize variables. */ + ctx.scanline_events = (struct grub_mmap_scan *) +- grub_malloc (sizeof (struct grub_mmap_scan) * 2 * mmap_num); ++ grub_calloc (mmap_num, sizeof (struct grub_mmap_scan) * 2); + +- present = grub_zalloc (sizeof (present[0]) * current_priority); ++ present = grub_calloc (current_priority, sizeof (present[0])); + + if (! ctx.scanline_events || !present) + { +diff --git a/grub-core/net/bootp.c b/grub-core/net/bootp.c +index 04cfbb045..653957200 100644 +--- a/grub-core/net/bootp.c ++++ b/grub-core/net/bootp.c +@@ -766,7 +766,7 @@ grub_cmd_bootp (struct grub_command *cmd __attribute__ ((unused)), + if (ncards == 0) + return grub_error (GRUB_ERR_NET_NO_CARD, N_("no network card found")); + +- ifaces = grub_zalloc (ncards * sizeof (ifaces[0])); ++ ifaces = grub_calloc (ncards, sizeof (ifaces[0])); + if (!ifaces) + return grub_errno; + +diff --git a/grub-core/net/dns.c b/grub-core/net/dns.c +index 5d9afe093..e332d5eb4 100644 +--- a/grub-core/net/dns.c ++++ b/grub-core/net/dns.c +@@ -285,8 +285,8 @@ recv_hook (grub_net_udp_socket_t sock __attribute__ ((unused)), + ptr++; + ptr += 4; + } +- *data->addresses = grub_malloc (sizeof ((*data->addresses)[0]) +- * grub_be_to_cpu16 (head->ancount)); ++ *data->addresses = grub_calloc (grub_be_to_cpu16 (head->ancount), ++ sizeof ((*data->addresses)[0])); + if (!*data->addresses) + { + grub_errno = GRUB_ERR_NONE; +@@ -406,8 +406,8 @@ recv_hook (grub_net_udp_socket_t sock __attribute__ ((unused)), + dns_cache[h].addresses = 0; + dns_cache[h].name = grub_strdup (data->oname); + dns_cache[h].naddresses = *data->naddresses; +- dns_cache[h].addresses = grub_malloc (*data->naddresses +- * sizeof (dns_cache[h].addresses[0])); ++ dns_cache[h].addresses = grub_calloc (*data->naddresses, ++ sizeof (dns_cache[h].addresses[0])); + dns_cache[h].limit_time = grub_get_time_ms () + 1000 * ttl_all; + if (!dns_cache[h].addresses || !dns_cache[h].name) + { +@@ -479,7 +479,7 @@ grub_net_dns_lookup (const char *name, + } + } + +- sockets = grub_malloc (sizeof (sockets[0]) * n_servers); ++ sockets = grub_calloc (n_servers, sizeof (sockets[0])); + if (!sockets) + return grub_errno; + +diff --git a/grub-core/net/net.c b/grub-core/net/net.c +index d5d726a31..38f19dfc9 100644 +--- a/grub-core/net/net.c ++++ b/grub-core/net/net.c +@@ -333,8 +333,8 @@ grub_cmd_ipv6_autoconf (struct grub_command *cmd __attribute__ ((unused)), + ncards++; + } + +- ifaces = grub_zalloc (ncards * sizeof (ifaces[0])); +- slaacs = grub_zalloc (ncards * sizeof (slaacs[0])); ++ ifaces = grub_calloc (ncards, sizeof (ifaces[0])); ++ slaacs = grub_calloc (ncards, sizeof (slaacs[0])); + if (!ifaces || !slaacs) + { + grub_free (ifaces); +diff --git a/grub-core/normal/charset.c b/grub-core/normal/charset.c +index b0ab47d73..d57fb72fa 100644 +--- a/grub-core/normal/charset.c ++++ b/grub-core/normal/charset.c +@@ -203,7 +203,7 @@ grub_utf8_to_ucs4_alloc (const char *msg, grub_uint32_t **unicode_msg, + { + grub_size_t msg_len = grub_strlen (msg); + +- *unicode_msg = grub_malloc (msg_len * sizeof (grub_uint32_t)); ++ *unicode_msg = grub_calloc (msg_len, sizeof (grub_uint32_t)); + + if (!*unicode_msg) + return -1; +@@ -488,7 +488,7 @@ grub_unicode_aglomerate_comb (const grub_uint32_t *in, grub_size_t inlen, + } + else + { +- n = grub_malloc (sizeof (n[0]) * (out->ncomb + 1)); ++ n = grub_calloc (out->ncomb + 1, sizeof (n[0])); + if (!n) + { + grub_errno = GRUB_ERR_NONE; +@@ -842,7 +842,7 @@ grub_bidi_line_logical_to_visual (const grub_uint32_t *logical, + } \ + } + +- visual = grub_malloc (sizeof (visual[0]) * logical_len); ++ visual = grub_calloc (logical_len, sizeof (visual[0])); + if (!visual) + return -1; + +@@ -1165,8 +1165,8 @@ grub_bidi_logical_to_visual (const grub_uint32_t *logical, + { + const grub_uint32_t *line_start = logical, *ptr; + struct grub_unicode_glyph *visual_ptr; +- *visual_out = visual_ptr = grub_malloc (3 * sizeof (visual_ptr[0]) +- * (logical_len + 2)); ++ *visual_out = visual_ptr = grub_calloc (logical_len + 2, ++ 3 * sizeof (visual_ptr[0])); + if (!visual_ptr) + return -1; + for (ptr = logical; ptr <= logical + logical_len; ptr++) +diff --git a/grub-core/normal/cmdline.c b/grub-core/normal/cmdline.c +index c037d5050..c57242e2e 100644 +--- a/grub-core/normal/cmdline.c ++++ b/grub-core/normal/cmdline.c +@@ -41,7 +41,7 @@ grub_err_t + grub_set_history (int newsize) + { + grub_uint32_t **old_hist_lines = hist_lines; +- hist_lines = grub_malloc (sizeof (grub_uint32_t *) * newsize); ++ hist_lines = grub_calloc (newsize, sizeof (grub_uint32_t *)); + + /* Copy the old lines into the new buffer. */ + if (old_hist_lines) +@@ -114,7 +114,7 @@ static void + grub_history_set (int pos, grub_uint32_t *s, grub_size_t len) + { + grub_free (hist_lines[pos]); +- hist_lines[pos] = grub_malloc ((len + 1) * sizeof (grub_uint32_t)); ++ hist_lines[pos] = grub_calloc (len + 1, sizeof (grub_uint32_t)); + if (!hist_lines[pos]) + { + grub_print_error (); +@@ -349,7 +349,7 @@ grub_cmdline_get (const char *prompt_translated) + char *ret; + unsigned nterms; + +- buf = grub_malloc (max_len * sizeof (grub_uint32_t)); ++ buf = grub_calloc (max_len, sizeof (grub_uint32_t)); + if (!buf) + return 0; + +@@ -377,7 +377,7 @@ grub_cmdline_get (const char *prompt_translated) + FOR_ACTIVE_TERM_OUTPUTS(cur) + nterms++; + +- cl_terms = grub_malloc (sizeof (cl_terms[0]) * nterms); ++ cl_terms = grub_calloc (nterms, sizeof (cl_terms[0])); + if (!cl_terms) + { + grub_free (buf); +@@ -385,7 +385,7 @@ grub_cmdline_get (const char *prompt_translated) + } + cl_term_cur = cl_terms; + +- unicode_msg = grub_malloc (msg_len * sizeof (grub_uint32_t)); ++ unicode_msg = grub_calloc (msg_len, sizeof (grub_uint32_t)); + if (!unicode_msg) + { + grub_free (buf); +@@ -495,7 +495,7 @@ grub_cmdline_get (const char *prompt_translated) + grub_uint32_t *insert; + + insertlen = grub_strlen (insertu8); +- insert = grub_malloc ((insertlen + 1) * sizeof (grub_uint32_t)); ++ insert = grub_calloc (insertlen + 1, sizeof (grub_uint32_t)); + if (!insert) + { + grub_free (insertu8); +@@ -602,7 +602,7 @@ grub_cmdline_get (const char *prompt_translated) + + grub_free (kill_buf); + +- kill_buf = grub_malloc ((n + 1) * sizeof(grub_uint32_t)); ++ kill_buf = grub_calloc (n + 1, sizeof (grub_uint32_t)); + if (grub_errno) + { + grub_print_error (); +diff --git a/grub-core/normal/menu_entry.c b/grub-core/normal/menu_entry.c +index cdf3590a3..1993995be 100644 +--- a/grub-core/normal/menu_entry.c ++++ b/grub-core/normal/menu_entry.c +@@ -95,8 +95,8 @@ init_line (struct screen *screen, struct line *linep) + { + linep->len = 0; + linep->max_len = 80; +- linep->buf = grub_malloc ((linep->max_len + 1) * sizeof (linep->buf[0])); +- linep->pos = grub_zalloc (screen->nterms * sizeof (linep->pos[0])); ++ linep->buf = grub_calloc (linep->max_len + 1, sizeof (linep->buf[0])); ++ linep->pos = grub_calloc (screen->nterms, sizeof (linep->pos[0])); + if (! linep->buf || !linep->pos) + { + grub_free (linep->buf); +@@ -287,7 +287,7 @@ update_screen (struct screen *screen, struct per_term_screen *term_screen, + pos = linep->pos + (term_screen - screen->terms); + + if (!*pos) +- *pos = grub_zalloc ((linep->len + 1) * sizeof (**pos)); ++ *pos = grub_calloc (linep->len + 1, sizeof (**pos)); + + if (i == region_start || linep == screen->lines + screen->line + || (i > region_start && mode == ALL_LINES)) +@@ -471,7 +471,7 @@ insert_string (struct screen *screen, const char *s, int update) + + /* Insert the string. */ + current_linep = screen->lines + screen->line; +- unicode_msg = grub_malloc ((p - s) * sizeof (grub_uint32_t)); ++ unicode_msg = grub_calloc (p - s, sizeof (grub_uint32_t)); + + if (!unicode_msg) + return 0; +@@ -1023,7 +1023,7 @@ complete (struct screen *screen, int continuous, int update) + if (completion_buffer.buf) + { + buflen = grub_strlen (completion_buffer.buf); +- ucs4 = grub_malloc (sizeof (grub_uint32_t) * (buflen + 1)); ++ ucs4 = grub_calloc (buflen + 1, sizeof (grub_uint32_t)); + + if (!ucs4) + { +@@ -1268,7 +1268,7 @@ grub_menu_entry_run (grub_menu_entry_t entry) + for (i = 0; i < (unsigned) screen->num_lines; i++) + { + grub_free (screen->lines[i].pos); +- screen->lines[i].pos = grub_zalloc (screen->nterms * sizeof (screen->lines[i].pos[0])); ++ screen->lines[i].pos = grub_calloc (screen->nterms, sizeof (screen->lines[i].pos[0])); + if (! screen->lines[i].pos) + { + grub_print_error (); +@@ -1278,7 +1278,7 @@ grub_menu_entry_run (grub_menu_entry_t entry) + } + } + +- screen->terms = grub_zalloc (screen->nterms * sizeof (screen->terms[0])); ++ screen->terms = grub_calloc (screen->nterms, sizeof (screen->terms[0])); + if (!screen->terms) + { + grub_print_error (); +diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c +index e22bb91f6..18240e76c 100644 +--- a/grub-core/normal/menu_text.c ++++ b/grub-core/normal/menu_text.c +@@ -78,7 +78,7 @@ grub_print_message_indented_real (const char *msg, int margin_left, + grub_size_t msg_len = grub_strlen (msg) + 2; + int ret = 0; + +- unicode_msg = grub_malloc (msg_len * sizeof (grub_uint32_t)); ++ unicode_msg = grub_calloc (msg_len, sizeof (grub_uint32_t)); + + if (!unicode_msg) + return 0; +@@ -211,7 +211,7 @@ print_entry (int y, int highlight, grub_menu_entry_t entry, + + title = entry ? entry->title : ""; + title_len = grub_strlen (title); +- unicode_title = grub_malloc (title_len * sizeof (*unicode_title)); ++ unicode_title = grub_calloc (title_len, sizeof (*unicode_title)); + if (! unicode_title) + /* XXX How to show this error? */ + return; +diff --git a/grub-core/normal/term.c b/grub-core/normal/term.c +index a1e5c5a0d..cc8c173b6 100644 +--- a/grub-core/normal/term.c ++++ b/grub-core/normal/term.c +@@ -264,7 +264,7 @@ grub_term_save_pos (void) + FOR_ACTIVE_TERM_OUTPUTS(cur) + cnt++; + +- ret = grub_malloc (cnt * sizeof (ret[0])); ++ ret = grub_calloc (cnt, sizeof (ret[0])); + if (!ret) + return NULL; + +@@ -1013,7 +1013,7 @@ grub_xnputs (const char *str, grub_size_t msg_len) + + grub_error_push (); + +- unicode_str = grub_malloc (msg_len * sizeof (grub_uint32_t)); ++ unicode_str = grub_calloc (msg_len, sizeof (grub_uint32_t)); + + grub_error_pop (); + +diff --git a/grub-core/osdep/linux/getroot.c b/grub-core/osdep/linux/getroot.c +index 90d92d3ad..5b41ad022 100644 +--- a/grub-core/osdep/linux/getroot.c ++++ b/grub-core/osdep/linux/getroot.c +@@ -168,7 +168,7 @@ grub_util_raid_getmembers (const char *name, int bootable) + if (ret != 0) + grub_util_error (_("ioctl GET_ARRAY_INFO error: %s"), strerror (errno)); + +- devicelist = xmalloc ((info.nr_disks + 1) * sizeof (char *)); ++ devicelist = xcalloc (info.nr_disks + 1, sizeof (char *)); + + for (i = 0, j = 0; j < info.nr_disks; i++) + { +@@ -241,7 +241,7 @@ grub_find_root_devices_from_btrfs (const char *dir) + return NULL; + } + +- ret = xmalloc ((fsi.num_devices + 1) * sizeof (ret[0])); ++ ret = xcalloc (fsi.num_devices + 1, sizeof (ret[0])); + + for (i = 1; i <= fsi.max_id && j < fsi.num_devices; i++) + { +@@ -396,7 +396,7 @@ grub_find_root_devices_from_mountinfo (const char *dir, char **relroot) + if (relroot) + *relroot = NULL; + +- entries = xmalloc (entry_max * sizeof (*entries)); ++ entries = xcalloc (entry_max, sizeof (*entries)); + + again: + fp = grub_util_fopen ("/proc/self/mountinfo", "r"); +diff --git a/grub-core/osdep/unix/config.c b/grub-core/osdep/unix/config.c +index 65effa9f3..7d6325138 100644 +--- a/grub-core/osdep/unix/config.c ++++ b/grub-core/osdep/unix/config.c +@@ -89,7 +89,7 @@ grub_util_load_config (struct grub_util_config *cfg) + argv[0] = "sh"; + argv[1] = "-c"; + +- script = xmalloc (4 * strlen (cfgfile) + 300); ++ script = xcalloc (4, strlen (cfgfile) + 300); + + ptr = script; + memcpy (ptr, ". '", 3); +diff --git a/grub-core/osdep/windows/getroot.c b/grub-core/osdep/windows/getroot.c +index 661d95461..eada663b2 100644 +--- a/grub-core/osdep/windows/getroot.c ++++ b/grub-core/osdep/windows/getroot.c +@@ -59,7 +59,7 @@ grub_get_mount_point (const TCHAR *path) + + for (ptr = path; *ptr; ptr++); + allocsize = (ptr - path + 10) * 2; +- out = xmalloc (allocsize * sizeof (out[0])); ++ out = xcalloc (allocsize, sizeof (out[0])); + + /* When pointing to EFI system partition GetVolumePathName fails + for ESP root and returns abberant information for everything +diff --git a/grub-core/osdep/windows/hostdisk.c b/grub-core/osdep/windows/hostdisk.c +index 355100789..0be327394 100644 +--- a/grub-core/osdep/windows/hostdisk.c ++++ b/grub-core/osdep/windows/hostdisk.c +@@ -111,7 +111,7 @@ grub_util_get_windows_path_real (const char *path) + + while (1) + { +- fpa = xmalloc (alloc * sizeof (fpa[0])); ++ fpa = xcalloc (alloc, sizeof (fpa[0])); + + len = GetFullPathName (tpath, alloc, fpa, NULL); + if (len >= alloc) +@@ -399,7 +399,7 @@ grub_util_fd_opendir (const char *name) + for (l = 0; name_windows[l]; l++); + for (l--; l >= 0 && (name_windows[l] == '\\' || name_windows[l] == '/'); l--); + l++; +- pattern = xmalloc ((l + 3) * sizeof (pattern[0])); ++ pattern = xcalloc (l + 3, sizeof (pattern[0])); + memcpy (pattern, name_windows, l * sizeof (pattern[0])); + pattern[l] = '\\'; + pattern[l + 1] = '*'; +diff --git a/grub-core/osdep/windows/init.c b/grub-core/osdep/windows/init.c +index e8ffd62c6..6297de632 100644 +--- a/grub-core/osdep/windows/init.c ++++ b/grub-core/osdep/windows/init.c +@@ -161,7 +161,7 @@ grub_util_host_init (int *argc __attribute__ ((unused)), + LPWSTR *targv; + + targv = CommandLineToArgvW (tcmdline, argc); +- *argv = xmalloc ((*argc + 1) * sizeof (argv[0])); ++ *argv = xcalloc (*argc + 1, sizeof (argv[0])); + + for (i = 0; i < *argc; i++) + (*argv)[i] = grub_util_tchar_to_utf8 (targv[i]); +diff --git a/grub-core/osdep/windows/platform.c b/grub-core/osdep/windows/platform.c +index 7eb53fe01..1ef86bf58 100644 +--- a/grub-core/osdep/windows/platform.c ++++ b/grub-core/osdep/windows/platform.c +@@ -225,8 +225,8 @@ grub_install_register_efi (grub_device_t efidir_grub_dev, + grub_util_error ("%s", _("no EFI routines are available when running in BIOS mode")); + + distrib8_len = grub_strlen (efi_distributor); +- distributor16 = xmalloc ((distrib8_len + 1) * GRUB_MAX_UTF16_PER_UTF8 +- * sizeof (grub_uint16_t)); ++ distributor16 = xcalloc (distrib8_len + 1, ++ GRUB_MAX_UTF16_PER_UTF8 * sizeof (grub_uint16_t)); + distrib16_len = grub_utf8_to_utf16 (distributor16, distrib8_len * GRUB_MAX_UTF16_PER_UTF8, + (const grub_uint8_t *) efi_distributor, + distrib8_len, 0); +diff --git a/grub-core/osdep/windows/relpath.c b/grub-core/osdep/windows/relpath.c +index cb0861744..478e8ef14 100644 +--- a/grub-core/osdep/windows/relpath.c ++++ b/grub-core/osdep/windows/relpath.c +@@ -72,7 +72,7 @@ grub_make_system_path_relative_to_its_root (const char *path) + if (dirwindows[0] && dirwindows[1] == ':') + offset = 2; + } +- ret = xmalloc (sizeof (ret[0]) * (flen - offset + 2)); ++ ret = xcalloc (flen - offset + 2, sizeof (ret[0])); + if (dirwindows[offset] != '\\' + && dirwindows[offset] != '/' + && dirwindows[offset]) +diff --git a/grub-core/partmap/gpt.c b/grub-core/partmap/gpt.c +index 103f6796f..72a2e37cd 100644 +--- a/grub-core/partmap/gpt.c ++++ b/grub-core/partmap/gpt.c +@@ -199,7 +199,7 @@ gpt_partition_map_embed (struct grub_disk *disk, unsigned int *nsectors, + *nsectors = ctx.len; + if (*nsectors > max_nsectors) + *nsectors = max_nsectors; +- *sectors = grub_malloc (*nsectors * sizeof (**sectors)); ++ *sectors = grub_calloc (*nsectors, sizeof (**sectors)); + if (!*sectors) + return grub_errno; + for (i = 0; i < *nsectors; i++) +diff --git a/grub-core/partmap/msdos.c b/grub-core/partmap/msdos.c +index 7b8e45076..ee3f24982 100644 +--- a/grub-core/partmap/msdos.c ++++ b/grub-core/partmap/msdos.c +@@ -337,7 +337,7 @@ pc_partition_map_embed (struct grub_disk *disk, unsigned int *nsectors, + avail_nsectors = *nsectors; + if (*nsectors > max_nsectors) + *nsectors = max_nsectors; +- *sectors = grub_malloc (*nsectors * sizeof (**sectors)); ++ *sectors = grub_calloc (*nsectors, sizeof (**sectors)); + if (!*sectors) + return grub_errno; + for (i = 0; i < *nsectors; i++) +diff --git a/grub-core/script/execute.c b/grub-core/script/execute.c +index ee299fd0e..c8d6806fe 100644 +--- a/grub-core/script/execute.c ++++ b/grub-core/script/execute.c +@@ -553,7 +553,7 @@ gettext_append (struct grub_script_argv *result, const char *orig_str) + for (iptr = orig_str; *iptr; iptr++) + if (*iptr == '$') + dollar_cnt++; +- ctx.allowed_strings = grub_malloc (sizeof (ctx.allowed_strings[0]) * dollar_cnt); ++ ctx.allowed_strings = grub_calloc (dollar_cnt, sizeof (ctx.allowed_strings[0])); + + if (parse_string (orig_str, gettext_save_allow, &ctx, 0)) + goto fail; +diff --git a/grub-core/tests/fake_input.c b/grub-core/tests/fake_input.c +index 2d6085298..b5eb516be 100644 +--- a/grub-core/tests/fake_input.c ++++ b/grub-core/tests/fake_input.c +@@ -49,7 +49,7 @@ grub_terminal_input_fake_sequence (int *seq_in, int nseq_in) + saved = grub_term_inputs; + if (seq) + grub_free (seq); +- seq = grub_malloc (nseq_in * sizeof (seq[0])); ++ seq = grub_calloc (nseq_in, sizeof (seq[0])); + if (!seq) + return; + +diff --git a/grub-core/tests/video_checksum.c b/grub-core/tests/video_checksum.c +index 74d5b65e5..44d081069 100644 +--- a/grub-core/tests/video_checksum.c ++++ b/grub-core/tests/video_checksum.c +@@ -336,7 +336,7 @@ grub_video_capture_write_bmp (const char *fname, + { + case 4: + { +- grub_uint8_t *buffer = xmalloc (mode_info->width * 3); ++ grub_uint8_t *buffer = xcalloc (3, mode_info->width); + grub_uint32_t rmask = ((1 << mode_info->red_mask_size) - 1); + grub_uint32_t gmask = ((1 << mode_info->green_mask_size) - 1); + grub_uint32_t bmask = ((1 << mode_info->blue_mask_size) - 1); +@@ -367,7 +367,7 @@ grub_video_capture_write_bmp (const char *fname, + } + case 3: + { +- grub_uint8_t *buffer = xmalloc (mode_info->width * 3); ++ grub_uint8_t *buffer = xcalloc (3, mode_info->width); + grub_uint32_t rmask = ((1 << mode_info->red_mask_size) - 1); + grub_uint32_t gmask = ((1 << mode_info->green_mask_size) - 1); + grub_uint32_t bmask = ((1 << mode_info->blue_mask_size) - 1); +@@ -407,7 +407,7 @@ grub_video_capture_write_bmp (const char *fname, + } + case 2: + { +- grub_uint8_t *buffer = xmalloc (mode_info->width * 3); ++ grub_uint8_t *buffer = xcalloc (3, mode_info->width); + grub_uint16_t rmask = ((1 << mode_info->red_mask_size) - 1); + grub_uint16_t gmask = ((1 << mode_info->green_mask_size) - 1); + grub_uint16_t bmask = ((1 << mode_info->blue_mask_size) - 1); +diff --git a/grub-core/video/capture.c b/grub-core/video/capture.c +index 4f83c7441..4d3195e01 100644 +--- a/grub-core/video/capture.c ++++ b/grub-core/video/capture.c +@@ -89,7 +89,7 @@ grub_video_capture_start (const struct grub_video_mode_info *mode_info, + framebuffer.mode_info = *mode_info; + framebuffer.mode_info.blit_format = grub_video_get_blit_format (&framebuffer.mode_info); + +- framebuffer.ptr = grub_malloc (framebuffer.mode_info.height * framebuffer.mode_info.pitch); ++ framebuffer.ptr = grub_calloc (framebuffer.mode_info.height, framebuffer.mode_info.pitch); + if (!framebuffer.ptr) + return grub_errno; + +diff --git a/grub-core/video/emu/sdl.c b/grub-core/video/emu/sdl.c +index a2f639f66..0ebab6f57 100644 +--- a/grub-core/video/emu/sdl.c ++++ b/grub-core/video/emu/sdl.c +@@ -172,7 +172,7 @@ grub_video_sdl_set_palette (unsigned int start, unsigned int count, + if (start + count > mode_info.number_of_colors) + count = mode_info.number_of_colors - start; + +- tmp = grub_malloc (count * sizeof (tmp[0])); ++ tmp = grub_calloc (count, sizeof (tmp[0])); + for (i = 0; i < count; i++) + { + tmp[i].r = palette_data[i].r; +diff --git a/grub-core/video/i386/pc/vga.c b/grub-core/video/i386/pc/vga.c +index 01f47112d..b2f776c99 100644 +--- a/grub-core/video/i386/pc/vga.c ++++ b/grub-core/video/i386/pc/vga.c +@@ -127,7 +127,7 @@ grub_video_vga_setup (unsigned int width, unsigned int height, + + vga_height = height ? : 480; + +- framebuffer.temporary_buffer = grub_malloc (vga_height * VGA_WIDTH); ++ framebuffer.temporary_buffer = grub_calloc (vga_height, VGA_WIDTH); + framebuffer.front_page = 0; + framebuffer.back_page = 0; + if (!framebuffer.temporary_buffer) +diff --git a/grub-core/video/readers/png.c b/grub-core/video/readers/png.c +index 777e71334..61bd64537 100644 +--- a/grub-core/video/readers/png.c ++++ b/grub-core/video/readers/png.c +@@ -309,7 +309,7 @@ grub_png_decode_image_header (struct grub_png_data *data) + if (data->is_16bit || data->is_gray || data->is_palette) + #endif + { +- data->image_data = grub_malloc (data->image_height * data->row_bytes); ++ data->image_data = grub_calloc (data->image_height, data->row_bytes); + if (grub_errno) + return grub_errno; + +diff --git a/include/grub/unicode.h b/include/grub/unicode.h +index a0403e91f..4de986a85 100644 +--- a/include/grub/unicode.h ++++ b/include/grub/unicode.h +@@ -293,7 +293,7 @@ grub_unicode_glyph_dup (const struct grub_unicode_glyph *in) + grub_memcpy (out, in, sizeof (*in)); + if (in->ncomb > ARRAY_SIZE (out->combining_inline)) + { +- out->combining_ptr = grub_malloc (in->ncomb * sizeof (out->combining_ptr[0])); ++ out->combining_ptr = grub_calloc (in->ncomb, sizeof (out->combining_ptr[0])); + if (!out->combining_ptr) + { + grub_free (out); +@@ -315,7 +315,7 @@ grub_unicode_set_glyph (struct grub_unicode_glyph *out, + grub_memcpy (out, in, sizeof (*in)); + if (in->ncomb > ARRAY_SIZE (out->combining_inline)) + { +- out->combining_ptr = grub_malloc (in->ncomb * sizeof (out->combining_ptr[0])); ++ out->combining_ptr = grub_calloc (in->ncomb, sizeof (out->combining_ptr[0])); + if (!out->combining_ptr) + return; + grub_memcpy (out->combining_ptr, in->combining_ptr, +diff --git a/util/getroot.c b/util/getroot.c +index 847406fba..a5eaa64fd 100644 +--- a/util/getroot.c ++++ b/util/getroot.c +@@ -200,7 +200,7 @@ make_device_name (const char *drive) + char *ret, *ptr; + const char *iptr; + +- ret = xmalloc (strlen (drive) * 2); ++ ret = xcalloc (2, strlen (drive)); + ptr = ret; + for (iptr = drive; *iptr; iptr++) + { +diff --git a/util/grub-file.c b/util/grub-file.c +index 50c18b683..b2e7dd69f 100644 +--- a/util/grub-file.c ++++ b/util/grub-file.c +@@ -54,7 +54,7 @@ main (int argc, char *argv[]) + + grub_util_host_init (&argc, &argv); + +- argv2 = xmalloc (argc * sizeof (argv2[0])); ++ argv2 = xcalloc (argc, sizeof (argv2[0])); + + if (argc == 2 && strcmp (argv[1], "--version") == 0) + { +diff --git a/util/grub-fstest.c b/util/grub-fstest.c +index f14e02d97..57246af7c 100644 +--- a/util/grub-fstest.c ++++ b/util/grub-fstest.c +@@ -650,7 +650,7 @@ argp_parser (int key, char *arg, struct argp_state *state) + if (args_count < num_disks) + { + if (args_count == 0) +- images = xmalloc (num_disks * sizeof (images[0])); ++ images = xcalloc (num_disks, sizeof (images[0])); + images[args_count] = grub_canonicalize_file_name (arg); + args_count++; + return 0; +@@ -734,7 +734,7 @@ main (int argc, char *argv[]) + + grub_util_host_init (&argc, &argv); + +- args = xmalloc (argc * sizeof (args[0])); ++ args = xcalloc (argc, sizeof (args[0])); + + argp_parse (&argp, argc, argv, 0, 0, 0); + +diff --git a/util/grub-install-common.c b/util/grub-install-common.c +index ca0ac612a..0295d40f5 100644 +--- a/util/grub-install-common.c ++++ b/util/grub-install-common.c +@@ -286,7 +286,7 @@ handle_install_list (struct install_list *il, const char *val, + il->n_entries++; + } + il->n_alloc = il->n_entries + 1; +- il->entries = xmalloc (il->n_alloc * sizeof (il->entries[0])); ++ il->entries = xcalloc (il->n_alloc, sizeof (il->entries[0])); + ptr = val; + for (ce = il->entries; ; ce++) + { +diff --git a/util/grub-install.c b/util/grub-install.c +index 8a55ad4b8..a82725f29 100644 +--- a/util/grub-install.c ++++ b/util/grub-install.c +@@ -626,7 +626,7 @@ device_map_check_duplicates (const char *dev_map) + if (! fp) + return; + +- d = xmalloc (alloced * sizeof (d[0])); ++ d = xcalloc (alloced, sizeof (d[0])); + + while (fgets (buf, sizeof (buf), fp)) + { +@@ -1260,7 +1260,7 @@ main (int argc, char *argv[]) + ndev++; + } + +- grub_drives = xmalloc (sizeof (grub_drives[0]) * (ndev + 1)); ++ grub_drives = xcalloc (ndev + 1, sizeof (grub_drives[0])); + + for (curdev = grub_devices, curdrive = grub_drives; *curdev; curdev++, + curdrive++) +diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c +index bc087c2b5..d97d0e7be 100644 +--- a/util/grub-mkimagexx.c ++++ b/util/grub-mkimagexx.c +@@ -2294,10 +2294,8 @@ SUFFIX (grub_mkimage_load_image) (const char *kernel_path, + + grub_host_to_target16 (e->e_shstrndx) * smd.section_entsize); + smd.strtab = (char *) e + grub_host_to_target_addr (s->sh_offset); + +- smd.addrs = xmalloc (sizeof (*smd.addrs) * smd.num_sections); +- memset (smd.addrs, 0, sizeof (*smd.addrs) * smd.num_sections); +- smd.vaddrs = xmalloc (sizeof (*smd.vaddrs) * smd.num_sections); +- memset (smd.vaddrs, 0, sizeof (*smd.vaddrs) * smd.num_sections); ++ smd.addrs = xcalloc (smd.num_sections, sizeof (*smd.addrs)); ++ smd.vaddrs = xcalloc (smd.num_sections, sizeof (*smd.vaddrs)); + + SUFFIX (locate_sections) (e, kernel_path, &smd, layout, image_target); + +diff --git a/util/grub-mkrescue.c b/util/grub-mkrescue.c +index ce2cbc4f1..51831027f 100644 +--- a/util/grub-mkrescue.c ++++ b/util/grub-mkrescue.c +@@ -441,8 +441,8 @@ main (int argc, char *argv[]) + xorriso = xstrdup ("xorriso"); + label_font = grub_util_path_concat (2, pkgdatadir, "unicode.pf2"); + +- argp_argv = xmalloc (sizeof (argp_argv[0]) * argc); +- xorriso_tail_argv = xmalloc (sizeof (argp_argv[0]) * argc); ++ argp_argv = xcalloc (argc, sizeof (argp_argv[0])); ++ xorriso_tail_argv = xcalloc (argc, sizeof (argp_argv[0])); + + xorriso_tail_argc = 0; + /* Program name */ +diff --git a/util/grub-mkstandalone.c b/util/grub-mkstandalone.c +index 4907d44c0..edf309717 100644 +--- a/util/grub-mkstandalone.c ++++ b/util/grub-mkstandalone.c +@@ -296,7 +296,7 @@ main (int argc, char *argv[]) + grub_util_host_init (&argc, &argv); + grub_util_disable_fd_syncs (); + +- files = xmalloc ((argc + 1) * sizeof (files[0])); ++ files = xcalloc (argc + 1, sizeof (files[0])); + + argp_parse (&argp, argc, argv, 0, 0, 0); + +diff --git a/util/grub-pe2elf.c b/util/grub-pe2elf.c +index 0d4084a10..11331294f 100644 +--- a/util/grub-pe2elf.c ++++ b/util/grub-pe2elf.c +@@ -100,9 +100,9 @@ write_section_data (FILE* fp, const char *name, char *image, + char *pe_strtab = (image + pe_chdr->symtab_offset + + pe_chdr->num_symbols * sizeof (struct grub_pe32_symbol)); + +- section_map = xmalloc ((2 * pe_chdr->num_sections + 5) * sizeof (int)); ++ section_map = xcalloc (2 * pe_chdr->num_sections + 5, sizeof (int)); + section_map[0] = 0; +- shdr = xmalloc ((2 * pe_chdr->num_sections + 5) * sizeof (shdr[0])); ++ shdr = xcalloc (2 * pe_chdr->num_sections + 5, sizeof (shdr[0])); + idx = 1; + idx_reloc = pe_chdr->num_sections + 1; + +@@ -233,7 +233,7 @@ write_reloc_section (FILE* fp, const char *name, char *image, + + pe_sec = pe_shdr + shdr[i].sh_link; + pe_rel = (struct grub_pe32_reloc *) (image + pe_sec->relocations_offset); +- rel = (elf_reloc_t *) xmalloc (pe_sec->num_relocations * sizeof (elf_reloc_t)); ++ rel = (elf_reloc_t *) xcalloc (pe_sec->num_relocations, sizeof (elf_reloc_t)); + num_rels = 0; + modified = 0; + +@@ -365,12 +365,10 @@ write_symbol_table (FILE* fp, const char *name, char *image, + pe_symtab = (struct grub_pe32_symbol *) (image + pe_chdr->symtab_offset); + pe_strtab = (char *) (pe_symtab + pe_chdr->num_symbols); + +- symtab = (Elf_Sym *) xmalloc ((pe_chdr->num_symbols + 1) * +- sizeof (Elf_Sym)); +- memset (symtab, 0, (pe_chdr->num_symbols + 1) * sizeof (Elf_Sym)); ++ symtab = (Elf_Sym *) xcalloc (pe_chdr->num_symbols + 1, sizeof (Elf_Sym)); + num_syms = 1; + +- symtab_map = (int *) xmalloc (pe_chdr->num_symbols * sizeof (int)); ++ symtab_map = (int *) xcalloc (pe_chdr->num_symbols, sizeof (int)); + + for (i = 0; i < (int) pe_chdr->num_symbols; + i += pe_symtab->num_aux + 1, pe_symtab += pe_symtab->num_aux + 1) +diff --git a/util/grub-probe.c b/util/grub-probe.c +index 81d27eead..cbe6ed94c 100644 +--- a/util/grub-probe.c ++++ b/util/grub-probe.c +@@ -361,8 +361,8 @@ probe (const char *path, char **device_names, char delim) + grub_util_pull_device (*curdev); + ndev++; + } +- +- drives_names = xmalloc (sizeof (drives_names[0]) * (ndev + 1)); ++ ++ drives_names = xcalloc (ndev + 1, sizeof (drives_names[0])); + + for (curdev = device_names, curdrive = drives_names; *curdev; curdev++, + curdrive++) +-- +2.26.2 + diff --git a/boot/grub2/0006-malloc-Use-overflow-checking-primitives-where-we-do-.patch b/boot/grub2/0006-malloc-Use-overflow-checking-primitives-where-we-do-.patch new file mode 100644 index 00000000..aaad7256 --- /dev/null +++ b/boot/grub2/0006-malloc-Use-overflow-checking-primitives-where-we-do-.patch @@ -0,0 +1,1326 @@ +From 4ad7e85adc3803788d65707a9db11fd681aebe4a Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 15 Jun 2020 12:28:27 -0400 +Subject: [PATCH] malloc: Use overflow checking primitives where we do + complex allocations +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This attempts to fix the places where we do the following where +arithmetic_expr may include unvalidated data: + + X = grub_malloc(arithmetic_expr); + +It accomplishes this by doing the arithmetic ahead of time using grub_add(), +grub_sub(), grub_mul() and testing for overflow before proceeding. + +Among other issues, this fixes: + - allocation of integer overflow in grub_video_bitmap_create() + reported by Chris Coulson, + - allocation of integer overflow in grub_png_decode_image_header() + reported by Chris Coulson, + - allocation of integer overflow in grub_squash_read_symlink() + reported by Chris Coulson, + - allocation of integer overflow in grub_ext2_read_symlink() + reported by Chris Coulson, + - allocation of integer overflow in read_section_as_string() + reported by Chris Coulson. + +Fixes: CVE-2020-14309, CVE-2020-14310, CVE-2020-14311 + +Signed-off-by: Peter Jones +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/commands/legacycfg.c | 29 +++++++++++++++---- + grub-core/commands/wildcard.c | 36 ++++++++++++++++++++---- + grub-core/disk/ldm.c | 32 +++++++++++++++------ + grub-core/font/font.c | 7 ++++- + grub-core/fs/btrfs.c | 28 +++++++++++++------ + grub-core/fs/ext2.c | 10 ++++++- + grub-core/fs/iso9660.c | 51 ++++++++++++++++++++++++---------- + grub-core/fs/sfs.c | 27 ++++++++++++++---- + grub-core/fs/squash4.c | 45 ++++++++++++++++++++++-------- + grub-core/fs/udf.c | 41 +++++++++++++++++---------- + grub-core/fs/xfs.c | 11 +++++--- + grub-core/fs/zfs/zfs.c | 22 ++++++++++----- + grub-core/fs/zfs/zfscrypt.c | 7 ++++- + grub-core/lib/arg.c | 20 +++++++++++-- + grub-core/loader/i386/bsd.c | 8 +++++- + grub-core/net/dns.c | 9 +++++- + grub-core/normal/charset.c | 10 +++++-- + grub-core/normal/cmdline.c | 14 ++++++++-- + grub-core/normal/menu_entry.c | 13 +++++++-- + grub-core/script/argv.c | 16 +++++++++-- + grub-core/script/lexer.c | 21 ++++++++++++-- + grub-core/video/bitmap.c | 25 +++++++++++------ + grub-core/video/readers/png.c | 13 +++++++-- + 23 files changed, 382 insertions(+), 113 deletions(-) + +diff --git a/grub-core/commands/legacycfg.c b/grub-core/commands/legacycfg.c +index 5e3ec0d5e..cc5971f4d 100644 +--- a/grub-core/commands/legacycfg.c ++++ b/grub-core/commands/legacycfg.c +@@ -32,6 +32,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -104,13 +105,22 @@ legacy_file (const char *filename) + if (newsuffix) + { + char *t; +- ++ grub_size_t sz; ++ ++ if (grub_add (grub_strlen (suffix), grub_strlen (newsuffix), &sz) || ++ grub_add (sz, 1, &sz)) ++ { ++ grub_errno = GRUB_ERR_OUT_OF_RANGE; ++ goto fail_0; ++ } ++ + t = suffix; +- suffix = grub_realloc (suffix, grub_strlen (suffix) +- + grub_strlen (newsuffix) + 1); ++ suffix = grub_realloc (suffix, sz); + if (!suffix) + { + grub_free (t); ++ ++ fail_0: + grub_free (entrysrc); + grub_free (parsed); + grub_free (newsuffix); +@@ -154,13 +164,22 @@ legacy_file (const char *filename) + else + { + char *t; ++ grub_size_t sz; ++ ++ if (grub_add (grub_strlen (entrysrc), grub_strlen (parsed), &sz) || ++ grub_add (sz, 1, &sz)) ++ { ++ grub_errno = GRUB_ERR_OUT_OF_RANGE; ++ goto fail_1; ++ } + + t = entrysrc; +- entrysrc = grub_realloc (entrysrc, grub_strlen (entrysrc) +- + grub_strlen (parsed) + 1); ++ entrysrc = grub_realloc (entrysrc, sz); + if (!entrysrc) + { + grub_free (t); ++ ++ fail_1: + grub_free (parsed); + grub_free (suffix); + return grub_errno; +diff --git a/grub-core/commands/wildcard.c b/grub-core/commands/wildcard.c +index 4a106ca04..cc3290311 100644 +--- a/grub-core/commands/wildcard.c ++++ b/grub-core/commands/wildcard.c +@@ -23,6 +23,7 @@ + #include + #include + #include ++#include + + #include + +@@ -48,6 +49,7 @@ merge (char **dest, char **ps) + int i; + int j; + char **p; ++ grub_size_t sz; + + if (! dest) + return ps; +@@ -60,7 +62,12 @@ merge (char **dest, char **ps) + for (j = 0; ps[j]; j++) + ; + +- p = grub_realloc (dest, sizeof (char*) * (i + j + 1)); ++ if (grub_add (i, j, &sz) || ++ grub_add (sz, 1, &sz) || ++ grub_mul (sz, sizeof (char *), &sz)) ++ return dest; ++ ++ p = grub_realloc (dest, sz); + if (! p) + { + grub_free (dest); +@@ -115,8 +122,15 @@ make_regex (const char *start, const char *end, regex_t *regexp) + char ch; + int i = 0; + unsigned len = end - start; +- char *buffer = grub_malloc (len * 2 + 2 + 1); /* worst case size. */ ++ char *buffer; ++ grub_size_t sz; + ++ /* Worst case size is (len * 2 + 2 + 1). */ ++ if (grub_mul (len, 2, &sz) || ++ grub_add (sz, 3, &sz)) ++ return 1; ++ ++ buffer = grub_malloc (sz); + if (! buffer) + return 1; + +@@ -226,6 +240,7 @@ match_devices_iter (const char *name, void *data) + struct match_devices_ctx *ctx = data; + char **t; + char *buffer; ++ grub_size_t sz; + + /* skip partitions if asked to. */ + if (ctx->noparts && grub_strchr (name, ',')) +@@ -239,11 +254,16 @@ match_devices_iter (const char *name, void *data) + if (regexec (ctx->regexp, buffer, 0, 0, 0)) + { + grub_dprintf ("expand", "not matched\n"); ++ fail: + grub_free (buffer); + return 0; + } + +- t = grub_realloc (ctx->devs, sizeof (char*) * (ctx->ndev + 2)); ++ if (grub_add (ctx->ndev, 2, &sz) || ++ grub_mul (sz, sizeof (char *), &sz)) ++ goto fail; ++ ++ t = grub_realloc (ctx->devs, sz); + if (! t) + { + grub_free (buffer); +@@ -300,6 +320,7 @@ match_files_iter (const char *name, + struct match_files_ctx *ctx = data; + char **t; + char *buffer; ++ grub_size_t sz; + + /* skip . and .. names */ + if (grub_strcmp(".", name) == 0 || grub_strcmp("..", name) == 0) +@@ -315,9 +336,14 @@ match_files_iter (const char *name, + if (! buffer) + return 1; + +- t = grub_realloc (ctx->files, sizeof (char*) * (ctx->nfile + 2)); +- if (! t) ++ if (grub_add (ctx->nfile, 2, &sz) || ++ grub_mul (sz, sizeof (char *), &sz)) ++ goto fail; ++ ++ t = grub_realloc (ctx->files, sz); ++ if (!t) + { ++ fail: + grub_free (buffer); + return 1; + } +diff --git a/grub-core/disk/ldm.c b/grub-core/disk/ldm.c +index e6323701a..58f8a53e1 100644 +--- a/grub-core/disk/ldm.c ++++ b/grub-core/disk/ldm.c +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + + #ifdef GRUB_UTIL + #include +@@ -289,6 +290,7 @@ make_vg (grub_disk_t disk, + struct grub_ldm_vblk vblk[GRUB_DISK_SECTOR_SIZE + / sizeof (struct grub_ldm_vblk)]; + unsigned i; ++ grub_size_t sz; + err = grub_disk_read (disk, cursec, 0, + sizeof(vblk), &vblk); + if (err) +@@ -350,7 +352,13 @@ make_vg (grub_disk_t disk, + grub_free (lv); + goto fail2; + } +- lv->name = grub_malloc (*ptr + 1); ++ if (grub_add (*ptr, 1, &sz)) ++ { ++ grub_free (lv->internal_id); ++ grub_free (lv); ++ goto fail2; ++ } ++ lv->name = grub_malloc (sz); + if (!lv->name) + { + grub_free (lv->internal_id); +@@ -599,10 +607,13 @@ make_vg (grub_disk_t disk, + if (lv->segments->node_alloc == lv->segments->node_count) + { + void *t; +- lv->segments->node_alloc *= 2; +- t = grub_realloc (lv->segments->nodes, +- sizeof (*lv->segments->nodes) +- * lv->segments->node_alloc); ++ grub_size_t sz; ++ ++ if (grub_mul (lv->segments->node_alloc, 2, &lv->segments->node_alloc) || ++ grub_mul (lv->segments->node_alloc, sizeof (*lv->segments->nodes), &sz)) ++ goto fail2; ++ ++ t = grub_realloc (lv->segments->nodes, sz); + if (!t) + goto fail2; + lv->segments->nodes = t; +@@ -723,10 +734,13 @@ make_vg (grub_disk_t disk, + if (comp->segment_alloc == comp->segment_count) + { + void *t; +- comp->segment_alloc *= 2; +- t = grub_realloc (comp->segments, +- comp->segment_alloc +- * sizeof (*comp->segments)); ++ grub_size_t sz; ++ ++ if (grub_mul (comp->segment_alloc, 2, &comp->segment_alloc) || ++ grub_mul (comp->segment_alloc, sizeof (*comp->segments), &sz)) ++ goto fail2; ++ ++ t = grub_realloc (comp->segments, sz); + if (!t) + goto fail2; + comp->segments = t; +diff --git a/grub-core/font/font.c b/grub-core/font/font.c +index 8e118b315..5edb477ac 100644 +--- a/grub-core/font/font.c ++++ b/grub-core/font/font.c +@@ -30,6 +30,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -360,9 +361,13 @@ static char * + read_section_as_string (struct font_file_section *section) + { + char *str; ++ grub_size_t sz; + grub_ssize_t ret; + +- str = grub_malloc (section->length + 1); ++ if (grub_add (section->length, 1, &sz)) ++ return NULL; ++ ++ str = grub_malloc (sz); + if (!str) + return 0; + +diff --git a/grub-core/fs/btrfs.c b/grub-core/fs/btrfs.c +index 11272efc1..2b65bd56a 100644 +--- a/grub-core/fs/btrfs.c ++++ b/grub-core/fs/btrfs.c +@@ -40,6 +40,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -329,9 +330,13 @@ save_ref (struct grub_btrfs_leaf_descriptor *desc, + if (desc->allocated < desc->depth) + { + void *newdata; +- desc->allocated *= 2; +- newdata = grub_realloc (desc->data, sizeof (desc->data[0]) +- * desc->allocated); ++ grub_size_t sz; ++ ++ if (grub_mul (desc->allocated, 2, &desc->allocated) || ++ grub_mul (desc->allocated, sizeof (desc->data[0]), &sz)) ++ return GRUB_ERR_OUT_OF_RANGE; ++ ++ newdata = grub_realloc (desc->data, sz); + if (!newdata) + return grub_errno; + desc->data = newdata; +@@ -622,16 +627,21 @@ find_device (struct grub_btrfs_data *data, grub_uint64_t id) + if (data->n_devices_attached > data->n_devices_allocated) + { + void *tmp; +- data->n_devices_allocated = 2 * data->n_devices_attached + 1; +- data->devices_attached +- = grub_realloc (tmp = data->devices_attached, +- data->n_devices_allocated +- * sizeof (data->devices_attached[0])); ++ grub_size_t sz; ++ ++ if (grub_mul (data->n_devices_attached, 2, &data->n_devices_allocated) || ++ grub_add (data->n_devices_allocated, 1, &data->n_devices_allocated) || ++ grub_mul (data->n_devices_allocated, sizeof (data->devices_attached[0]), &sz)) ++ goto fail; ++ ++ data->devices_attached = grub_realloc (tmp = data->devices_attached, sz); + if (!data->devices_attached) + { ++ data->devices_attached = tmp; ++ ++ fail: + if (ctx.dev_found) + grub_device_close (ctx.dev_found); +- data->devices_attached = tmp; + return NULL; + } + } +diff --git a/grub-core/fs/ext2.c b/grub-core/fs/ext2.c +index 9b389802a..ac33bcd68 100644 +--- a/grub-core/fs/ext2.c ++++ b/grub-core/fs/ext2.c +@@ -46,6 +46,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -703,6 +704,7 @@ grub_ext2_read_symlink (grub_fshelp_node_t node) + { + char *symlink; + struct grub_fshelp_node *diro = node; ++ grub_size_t sz; + + if (! diro->inode_read) + { +@@ -717,7 +719,13 @@ grub_ext2_read_symlink (grub_fshelp_node_t node) + } + } + +- symlink = grub_malloc (grub_le_to_cpu32 (diro->inode.size) + 1); ++ if (grub_add (grub_le_to_cpu32 (diro->inode.size), 1, &sz)) ++ { ++ grub_error (GRUB_ERR_OUT_OF_RANGE, N_("overflow is detected")); ++ return NULL; ++ } ++ ++ symlink = grub_malloc (sz); + if (! symlink) + return 0; + +diff --git a/grub-core/fs/iso9660.c b/grub-core/fs/iso9660.c +index 4f1b52a55..7ba5b300b 100644 +--- a/grub-core/fs/iso9660.c ++++ b/grub-core/fs/iso9660.c +@@ -28,6 +28,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -531,8 +532,13 @@ add_part (struct iterate_dir_ctx *ctx, + int len2) + { + int size = ctx->symlink ? grub_strlen (ctx->symlink) : 0; ++ grub_size_t sz; + +- ctx->symlink = grub_realloc (ctx->symlink, size + len2 + 1); ++ if (grub_add (size, len2, &sz) || ++ grub_add (sz, 1, &sz)) ++ return; ++ ++ ctx->symlink = grub_realloc (ctx->symlink, sz); + if (! ctx->symlink) + return; + +@@ -560,17 +566,24 @@ susp_iterate_dir (struct grub_iso9660_susp_entry *entry, + { + grub_size_t off = 0, csize = 1; + char *old; ++ grub_size_t sz; ++ + csize = entry->len - 5; + old = ctx->filename; + if (ctx->filename_alloc) + { + off = grub_strlen (ctx->filename); +- ctx->filename = grub_realloc (ctx->filename, csize + off + 1); ++ if (grub_add (csize, off, &sz) || ++ grub_add (sz, 1, &sz)) ++ return GRUB_ERR_OUT_OF_RANGE; ++ ctx->filename = grub_realloc (ctx->filename, sz); + } + else + { + off = 0; +- ctx->filename = grub_zalloc (csize + 1); ++ if (grub_add (csize, 1, &sz)) ++ return GRUB_ERR_OUT_OF_RANGE; ++ ctx->filename = grub_zalloc (sz); + } + if (!ctx->filename) + { +@@ -776,14 +789,18 @@ grub_iso9660_iterate_dir (grub_fshelp_node_t dir, + if (node->have_dirents >= node->alloc_dirents) + { + struct grub_fshelp_node *new_node; +- node->alloc_dirents *= 2; +- new_node = grub_realloc (node, +- sizeof (struct grub_fshelp_node) +- + ((node->alloc_dirents +- - ARRAY_SIZE (node->dirents)) +- * sizeof (node->dirents[0]))); ++ grub_size_t sz; ++ ++ if (grub_mul (node->alloc_dirents, 2, &node->alloc_dirents) || ++ grub_sub (node->alloc_dirents, ARRAY_SIZE (node->dirents), &sz) || ++ grub_mul (sz, sizeof (node->dirents[0]), &sz) || ++ grub_add (sz, sizeof (struct grub_fshelp_node), &sz)) ++ goto fail_0; ++ ++ new_node = grub_realloc (node, sz); + if (!new_node) + { ++ fail_0: + if (ctx.filename_alloc) + grub_free (ctx.filename); + grub_free (node); +@@ -799,14 +816,18 @@ grub_iso9660_iterate_dir (grub_fshelp_node_t dir, + * sizeof (node->dirents[0]) < grub_strlen (ctx.symlink) + 1) + { + struct grub_fshelp_node *new_node; +- new_node = grub_realloc (node, +- sizeof (struct grub_fshelp_node) +- + ((node->alloc_dirents +- - ARRAY_SIZE (node->dirents)) +- * sizeof (node->dirents[0])) +- + grub_strlen (ctx.symlink) + 1); ++ grub_size_t sz; ++ ++ if (grub_sub (node->alloc_dirents, ARRAY_SIZE (node->dirents), &sz) || ++ grub_mul (sz, sizeof (node->dirents[0]), &sz) || ++ grub_add (sz, sizeof (struct grub_fshelp_node) + 1, &sz) || ++ grub_add (sz, grub_strlen (ctx.symlink), &sz)) ++ goto fail_1; ++ ++ new_node = grub_realloc (node, sz); + if (!new_node) + { ++ fail_1: + if (ctx.filename_alloc) + grub_free (ctx.filename); + grub_free (node); +diff --git a/grub-core/fs/sfs.c b/grub-core/fs/sfs.c +index 90f7fb379..de2b107a4 100644 +--- a/grub-core/fs/sfs.c ++++ b/grub-core/fs/sfs.c +@@ -26,6 +26,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -307,10 +308,15 @@ grub_sfs_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock) + if (node->cache && node->cache_size >= node->cache_allocated) + { + struct cache_entry *e = node->cache; +- e = grub_realloc (node->cache,node->cache_allocated * 2 +- * sizeof (e[0])); ++ grub_size_t sz; ++ ++ if (grub_mul (node->cache_allocated, 2 * sizeof (e[0]), &sz)) ++ goto fail; ++ ++ e = grub_realloc (node->cache, sz); + if (!e) + { ++ fail: + grub_errno = 0; + grub_free (node->cache); + node->cache = 0; +@@ -477,10 +483,16 @@ grub_sfs_create_node (struct grub_fshelp_node **node, + grub_size_t len = grub_strlen (name); + grub_uint8_t *name_u8; + int ret; ++ grub_size_t sz; ++ ++ if (grub_mul (len, GRUB_MAX_UTF8_PER_LATIN1, &sz) || ++ grub_add (sz, 1, &sz)) ++ return 1; ++ + *node = grub_malloc (sizeof (**node)); + if (!*node) + return 1; +- name_u8 = grub_malloc (len * GRUB_MAX_UTF8_PER_LATIN1 + 1); ++ name_u8 = grub_malloc (sz); + if (!name_u8) + { + grub_free (*node); +@@ -724,8 +736,13 @@ grub_sfs_label (grub_device_t device, char **label) + data = grub_sfs_mount (disk); + if (data) + { +- grub_size_t len = grub_strlen (data->label); +- *label = grub_malloc (len * GRUB_MAX_UTF8_PER_LATIN1 + 1); ++ grub_size_t sz, len = grub_strlen (data->label); ++ ++ if (grub_mul (len, GRUB_MAX_UTF8_PER_LATIN1, &sz) || ++ grub_add (sz, 1, &sz)) ++ return GRUB_ERR_OUT_OF_RANGE; ++ ++ *label = grub_malloc (sz); + if (*label) + *grub_latin1_to_utf8 ((grub_uint8_t *) *label, + (const grub_uint8_t *) data->label, +diff --git a/grub-core/fs/squash4.c b/grub-core/fs/squash4.c +index 95d5c1e1f..785123894 100644 +--- a/grub-core/fs/squash4.c ++++ b/grub-core/fs/squash4.c +@@ -26,6 +26,7 @@ + #include + #include + #include ++#include + #include + + #include "xz.h" +@@ -459,7 +460,17 @@ grub_squash_read_symlink (grub_fshelp_node_t node) + { + char *ret; + grub_err_t err; +- ret = grub_malloc (grub_le_to_cpu32 (node->ino.symlink.namelen) + 1); ++ grub_size_t sz; ++ ++ if (grub_add (grub_le_to_cpu32 (node->ino.symlink.namelen), 1, &sz)) ++ { ++ grub_error (GRUB_ERR_OUT_OF_RANGE, N_("overflow is detected")); ++ return NULL; ++ } ++ ++ ret = grub_malloc (sz); ++ if (!ret) ++ return NULL; + + err = read_chunk (node->data, ret, + grub_le_to_cpu32 (node->ino.symlink.namelen), +@@ -506,11 +517,16 @@ grub_squash_iterate_dir (grub_fshelp_node_t dir, + + { + grub_fshelp_node_t node; +- node = grub_malloc (sizeof (*node) + dir->stsize * sizeof (dir->stack[0])); ++ grub_size_t sz; ++ ++ if (grub_mul (dir->stsize, sizeof (dir->stack[0]), &sz) || ++ grub_add (sz, sizeof (*node), &sz)) ++ return 0; ++ ++ node = grub_malloc (sz); + if (!node) + return 0; +- grub_memcpy (node, dir, +- sizeof (*node) + dir->stsize * sizeof (dir->stack[0])); ++ grub_memcpy (node, dir, sz); + if (hook (".", GRUB_FSHELP_DIR, node, hook_data)) + return 1; + +@@ -518,12 +534,15 @@ grub_squash_iterate_dir (grub_fshelp_node_t dir, + { + grub_err_t err; + +- node = grub_malloc (sizeof (*node) + dir->stsize * sizeof (dir->stack[0])); ++ if (grub_mul (dir->stsize, sizeof (dir->stack[0]), &sz) || ++ grub_add (sz, sizeof (*node), &sz)) ++ return 0; ++ ++ node = grub_malloc (sz); + if (!node) + return 0; + +- grub_memcpy (node, dir, +- sizeof (*node) + dir->stsize * sizeof (dir->stack[0])); ++ grub_memcpy (node, dir, sz); + + node->stsize--; + err = read_chunk (dir->data, &node->ino, sizeof (node->ino), +@@ -557,6 +576,7 @@ grub_squash_iterate_dir (grub_fshelp_node_t dir, + enum grub_fshelp_filetype filetype = GRUB_FSHELP_REG; + struct grub_squash_dirent di; + struct grub_squash_inode ino; ++ grub_size_t sz; + + err = read_chunk (dir->data, &di, sizeof (di), + grub_le_to_cpu64 (dir->data->sb.diroffset) +@@ -589,13 +609,16 @@ grub_squash_iterate_dir (grub_fshelp_node_t dir, + if (grub_le_to_cpu16 (di.type) == SQUASH_TYPE_SYMLINK) + filetype = GRUB_FSHELP_SYMLINK; + +- node = grub_malloc (sizeof (*node) +- + (dir->stsize + 1) * sizeof (dir->stack[0])); ++ if (grub_add (dir->stsize, 1, &sz) || ++ grub_mul (sz, sizeof (dir->stack[0]), &sz) || ++ grub_add (sz, sizeof (*node), &sz)) ++ return 0; ++ ++ node = grub_malloc (sz); + if (! node) + return 0; + +- grub_memcpy (node, dir, +- sizeof (*node) + dir->stsize * sizeof (dir->stack[0])); ++ grub_memcpy (node, dir, sz - sizeof(dir->stack[0])); + + node->ino = ino; + node->stack[node->stsize].ino_chunk = grub_le_to_cpu32 (dh.ino_chunk); +diff --git a/grub-core/fs/udf.c b/grub-core/fs/udf.c +index a83761674..21ac7f446 100644 +--- a/grub-core/fs/udf.c ++++ b/grub-core/fs/udf.c +@@ -28,6 +28,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -890,9 +891,19 @@ read_string (const grub_uint8_t *raw, grub_size_t sz, char *outbuf) + utf16[i] = (raw[2 * i + 1] << 8) | raw[2*i + 2]; + } + if (!outbuf) +- outbuf = grub_malloc (utf16len * GRUB_MAX_UTF8_PER_UTF16 + 1); ++ { ++ grub_size_t size; ++ ++ if (grub_mul (utf16len, GRUB_MAX_UTF8_PER_UTF16, &size) || ++ grub_add (size, 1, &size)) ++ goto fail; ++ ++ outbuf = grub_malloc (size); ++ } + if (outbuf) + *grub_utf16_to_utf8 ((grub_uint8_t *) outbuf, utf16, utf16len) = '\0'; ++ ++ fail: + grub_free (utf16); + return outbuf; + } +@@ -1005,7 +1016,7 @@ grub_udf_read_symlink (grub_fshelp_node_t node) + grub_size_t sz = U64 (node->block.fe.file_size); + grub_uint8_t *raw; + const grub_uint8_t *ptr; +- char *out, *optr; ++ char *out = NULL, *optr; + + if (sz < 4) + return NULL; +@@ -1013,14 +1024,16 @@ grub_udf_read_symlink (grub_fshelp_node_t node) + if (!raw) + return NULL; + if (grub_udf_read_file (node, NULL, NULL, 0, sz, (char *) raw) < 0) +- { +- grub_free (raw); +- return NULL; +- } ++ goto fail_1; + +- out = grub_malloc (sz * 2 + 1); ++ if (grub_mul (sz, 2, &sz) || ++ grub_add (sz, 1, &sz)) ++ goto fail_0; ++ ++ out = grub_malloc (sz); + if (!out) + { ++ fail_0: + grub_free (raw); + return NULL; + } +@@ -1031,17 +1044,17 @@ grub_udf_read_symlink (grub_fshelp_node_t node) + { + grub_size_t s; + if ((grub_size_t) (ptr - raw + 4) > sz) +- goto fail; ++ goto fail_1; + if (!(ptr[2] == 0 && ptr[3] == 0)) +- goto fail; ++ goto fail_1; + s = 4 + ptr[1]; + if ((grub_size_t) (ptr - raw + s) > sz) +- goto fail; ++ goto fail_1; + switch (*ptr) + { + case 1: + if (ptr[1]) +- goto fail; ++ goto fail_1; + /* Fallthrough. */ + case 2: + /* in 4 bytes. out: 1 byte. */ +@@ -1066,11 +1079,11 @@ grub_udf_read_symlink (grub_fshelp_node_t node) + if (optr != out) + *optr++ = '/'; + if (!read_string (ptr + 4, s - 4, optr)) +- goto fail; ++ goto fail_1; + optr += grub_strlen (optr); + break; + default: +- goto fail; ++ goto fail_1; + } + ptr += s; + } +@@ -1078,7 +1091,7 @@ grub_udf_read_symlink (grub_fshelp_node_t node) + grub_free (raw); + return out; + +- fail: ++ fail_1: + grub_free (raw); + grub_free (out); + grub_error (GRUB_ERR_BAD_FS, "invalid symlink"); +diff --git a/grub-core/fs/xfs.c b/grub-core/fs/xfs.c +index 96ffecbfc..ea6590290 100644 +--- a/grub-core/fs/xfs.c ++++ b/grub-core/fs/xfs.c +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -899,6 +900,7 @@ static struct grub_xfs_data * + grub_xfs_mount (grub_disk_t disk) + { + struct grub_xfs_data *data = 0; ++ grub_size_t sz; + + data = grub_zalloc (sizeof (struct grub_xfs_data)); + if (!data) +@@ -913,10 +915,11 @@ grub_xfs_mount (grub_disk_t disk) + if (!grub_xfs_sb_valid(data)) + goto fail; + +- data = grub_realloc (data, +- sizeof (struct grub_xfs_data) +- - sizeof (struct grub_xfs_inode) +- + grub_xfs_inode_size(data) + 1); ++ if (grub_add (grub_xfs_inode_size (data), ++ sizeof (struct grub_xfs_data) - sizeof (struct grub_xfs_inode) + 1, &sz)) ++ goto fail; ++ ++ data = grub_realloc (data, sz); + + if (! data) + goto fail; +diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c +index 381dde556..36d0373a6 100644 +--- a/grub-core/fs/zfs/zfs.c ++++ b/grub-core/fs/zfs/zfs.c +@@ -55,6 +55,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -773,11 +774,14 @@ fill_vdev_info (struct grub_zfs_data *data, + if (data->n_devices_attached > data->n_devices_allocated) + { + void *tmp; +- data->n_devices_allocated = 2 * data->n_devices_attached + 1; +- data->devices_attached +- = grub_realloc (tmp = data->devices_attached, +- data->n_devices_allocated +- * sizeof (data->devices_attached[0])); ++ grub_size_t sz; ++ ++ if (grub_mul (data->n_devices_attached, 2, &data->n_devices_allocated) || ++ grub_add (data->n_devices_allocated, 1, &data->n_devices_allocated) || ++ grub_mul (data->n_devices_allocated, sizeof (data->devices_attached[0]), &sz)) ++ return GRUB_ERR_OUT_OF_RANGE; ++ ++ data->devices_attached = grub_realloc (tmp = data->devices_attached, sz); + if (!data->devices_attached) + { + data->devices_attached = tmp; +@@ -3468,14 +3472,18 @@ grub_zfs_nvlist_lookup_nvlist (const char *nvlist, const char *name) + { + char *nvpair; + char *ret; +- grub_size_t size; ++ grub_size_t size, sz; + int found; + + found = nvlist_find_value (nvlist, name, DATA_TYPE_NVLIST, &nvpair, + &size, 0); + if (!found) + return 0; +- ret = grub_zalloc (size + 3 * sizeof (grub_uint32_t)); ++ ++ if (grub_add (size, 3 * sizeof (grub_uint32_t), &sz)) ++ return 0; ++ ++ ret = grub_zalloc (sz); + if (!ret) + return 0; + grub_memcpy (ret, nvlist, sizeof (grub_uint32_t)); +diff --git a/grub-core/fs/zfs/zfscrypt.c b/grub-core/fs/zfs/zfscrypt.c +index 1402e0bc2..de3b015f5 100644 +--- a/grub-core/fs/zfs/zfscrypt.c ++++ b/grub-core/fs/zfs/zfscrypt.c +@@ -22,6 +22,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -82,9 +83,13 @@ grub_zfs_add_key (grub_uint8_t *key_in, + int passphrase) + { + struct grub_zfs_wrap_key *key; ++ grub_size_t sz; ++ + if (!passphrase && keylen > 32) + keylen = 32; +- key = grub_malloc (sizeof (*key) + keylen); ++ if (grub_add (sizeof (*key), keylen, &sz)) ++ return GRUB_ERR_OUT_OF_RANGE; ++ key = grub_malloc (sz); + if (!key) + return grub_errno; + key->is_passphrase = passphrase; +diff --git a/grub-core/lib/arg.c b/grub-core/lib/arg.c +index fd7744a6f..3288609a5 100644 +--- a/grub-core/lib/arg.c ++++ b/grub-core/lib/arg.c +@@ -23,6 +23,7 @@ + #include + #include + #include ++#include + + /* Built-in parser for default options. */ + static const struct grub_arg_option help_options[] = +@@ -216,7 +217,13 @@ static inline grub_err_t + add_arg (char ***argl, int *num, char *s) + { + char **p = *argl; +- *argl = grub_realloc (*argl, (++(*num) + 1) * sizeof (char *)); ++ grub_size_t sz; ++ ++ if (grub_add (++(*num), 1, &sz) || ++ grub_mul (sz, sizeof (char *), &sz)) ++ return grub_error (GRUB_ERR_OUT_OF_RANGE, N_("overflow is detected")); ++ ++ *argl = grub_realloc (*argl, sz); + if (! *argl) + { + grub_free (p); +@@ -431,6 +438,7 @@ grub_arg_list_alloc(grub_extcmd_t extcmd, int argc, + grub_size_t argcnt; + struct grub_arg_list *list; + const struct grub_arg_option *options; ++ grub_size_t sz0, sz1; + + options = extcmd->options; + if (! options) +@@ -443,7 +451,15 @@ grub_arg_list_alloc(grub_extcmd_t extcmd, int argc, + argcnt += ((grub_size_t) argc + 1) / 2 + 1; /* max possible for any option */ + } + +- list = grub_zalloc (sizeof (*list) * i + sizeof (char*) * argcnt); ++ if (grub_mul (sizeof (*list), i, &sz0) || ++ grub_mul (sizeof (char *), argcnt, &sz1) || ++ grub_add (sz0, sz1, &sz0)) ++ { ++ grub_error (GRUB_ERR_OUT_OF_RANGE, N_("overflow is detected")); ++ return 0; ++ } ++ ++ list = grub_zalloc (sz0); + if (! list) + return 0; + +diff --git a/grub-core/loader/i386/bsd.c b/grub-core/loader/i386/bsd.c +index 3730ed382..b92cbe98d 100644 +--- a/grub-core/loader/i386/bsd.c ++++ b/grub-core/loader/i386/bsd.c +@@ -35,6 +35,7 @@ + #include + #include + #include ++#include + #include + #ifdef GRUB_MACHINE_PCBIOS + #include +@@ -1012,11 +1013,16 @@ grub_netbsd_add_modules (void) + struct grub_netbsd_btinfo_modules *mods; + unsigned i; + grub_err_t err; ++ grub_size_t sz; + + for (mod = netbsd_mods; mod; mod = mod->next) + modcnt++; + +- mods = grub_malloc (sizeof (*mods) + sizeof (mods->mods[0]) * modcnt); ++ if (grub_mul (modcnt, sizeof (mods->mods[0]), &sz) || ++ grub_add (sz, sizeof (*mods), &sz)) ++ return GRUB_ERR_OUT_OF_RANGE; ++ ++ mods = grub_malloc (sz); + if (!mods) + return grub_errno; + +diff --git a/grub-core/net/dns.c b/grub-core/net/dns.c +index e332d5eb4..906ec7d67 100644 +--- a/grub-core/net/dns.c ++++ b/grub-core/net/dns.c +@@ -22,6 +22,7 @@ + #include + #include + #include ++#include + + struct dns_cache_element + { +@@ -51,9 +52,15 @@ grub_net_add_dns_server (const struct grub_net_network_level_address *s) + { + int na = dns_servers_alloc * 2; + struct grub_net_network_level_address *ns; ++ grub_size_t sz; ++ + if (na < 8) + na = 8; +- ns = grub_realloc (dns_servers, na * sizeof (ns[0])); ++ ++ if (grub_mul (na, sizeof (ns[0]), &sz)) ++ return GRUB_ERR_OUT_OF_RANGE; ++ ++ ns = grub_realloc (dns_servers, sz); + if (!ns) + return grub_errno; + dns_servers_alloc = na; +diff --git a/grub-core/normal/charset.c b/grub-core/normal/charset.c +index d57fb72fa..4dfcc3107 100644 +--- a/grub-core/normal/charset.c ++++ b/grub-core/normal/charset.c +@@ -48,6 +48,7 @@ + #include + #include + #include ++#include + + #if HAVE_FONT_SOURCE + #include "widthspec.h" +@@ -464,6 +465,7 @@ grub_unicode_aglomerate_comb (const grub_uint32_t *in, grub_size_t inlen, + { + struct grub_unicode_combining *n; + unsigned j; ++ grub_size_t sz; + + if (!haveout) + continue; +@@ -477,10 +479,14 @@ grub_unicode_aglomerate_comb (const grub_uint32_t *in, grub_size_t inlen, + n = out->combining_inline; + else if (out->ncomb > (int) ARRAY_SIZE (out->combining_inline)) + { +- n = grub_realloc (out->combining_ptr, +- sizeof (n[0]) * (out->ncomb + 1)); ++ if (grub_add (out->ncomb, 1, &sz) || ++ grub_mul (sz, sizeof (n[0]), &sz)) ++ goto fail; ++ ++ n = grub_realloc (out->combining_ptr, sz); + if (!n) + { ++ fail: + grub_errno = GRUB_ERR_NONE; + continue; + } +diff --git a/grub-core/normal/cmdline.c b/grub-core/normal/cmdline.c +index c57242e2e..de03fe63b 100644 +--- a/grub-core/normal/cmdline.c ++++ b/grub-core/normal/cmdline.c +@@ -28,6 +28,7 @@ + #include + #include + #include ++#include + + static grub_uint32_t *kill_buf; + +@@ -307,12 +308,21 @@ cl_insert (struct cmdline_term *cl_terms, unsigned nterms, + if (len + (*llen) >= (*max_len)) + { + grub_uint32_t *nbuf; +- (*max_len) *= 2; +- nbuf = grub_realloc ((*buf), sizeof (grub_uint32_t) * (*max_len)); ++ grub_size_t sz; ++ ++ if (grub_mul (*max_len, 2, max_len) || ++ grub_mul (*max_len, sizeof (grub_uint32_t), &sz)) ++ { ++ grub_errno = GRUB_ERR_OUT_OF_RANGE; ++ goto fail; ++ } ++ ++ nbuf = grub_realloc ((*buf), sz); + if (nbuf) + (*buf) = nbuf; + else + { ++ fail: + grub_print_error (); + grub_errno = GRUB_ERR_NONE; + (*max_len) /= 2; +diff --git a/grub-core/normal/menu_entry.c b/grub-core/normal/menu_entry.c +index 1993995be..50eef918c 100644 +--- a/grub-core/normal/menu_entry.c ++++ b/grub-core/normal/menu_entry.c +@@ -27,6 +27,7 @@ + #include + #include + #include ++#include + + enum update_mode + { +@@ -113,10 +114,18 @@ ensure_space (struct line *linep, int extra) + { + if (linep->max_len < linep->len + extra) + { +- linep->max_len = 2 * (linep->len + extra); +- linep->buf = grub_realloc (linep->buf, (linep->max_len + 1) * sizeof (linep->buf[0])); ++ grub_size_t sz0, sz1; ++ ++ if (grub_add (linep->len, extra, &sz0) || ++ grub_mul (sz0, 2, &sz0) || ++ grub_add (sz0, 1, &sz1) || ++ grub_mul (sz1, sizeof (linep->buf[0]), &sz1)) ++ return 0; ++ ++ linep->buf = grub_realloc (linep->buf, sz1); + if (! linep->buf) + return 0; ++ linep->max_len = sz0; + } + + return 1; +diff --git a/grub-core/script/argv.c b/grub-core/script/argv.c +index 217ec5d1e..5751fdd57 100644 +--- a/grub-core/script/argv.c ++++ b/grub-core/script/argv.c +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + + /* Return nearest power of two that is >= v. */ + static unsigned +@@ -81,11 +82,16 @@ int + grub_script_argv_next (struct grub_script_argv *argv) + { + char **p = argv->args; ++ grub_size_t sz; + + if (argv->args && argv->argc && argv->args[argv->argc - 1] == 0) + return 0; + +- p = grub_realloc (p, round_up_exp ((argv->argc + 2) * sizeof (char *))); ++ if (grub_add (argv->argc, 2, &sz) || ++ grub_mul (sz, sizeof (char *), &sz)) ++ return 1; ++ ++ p = grub_realloc (p, round_up_exp (sz)); + if (! p) + return 1; + +@@ -105,13 +111,19 @@ grub_script_argv_append (struct grub_script_argv *argv, const char *s, + { + grub_size_t a; + char *p = argv->args[argv->argc - 1]; ++ grub_size_t sz; + + if (! s) + return 0; + + a = p ? grub_strlen (p) : 0; + +- p = grub_realloc (p, round_up_exp ((a + slen + 1) * sizeof (char))); ++ if (grub_add (a, slen, &sz) || ++ grub_add (sz, 1, &sz) || ++ grub_mul (sz, sizeof (char), &sz)) ++ return 1; ++ ++ p = grub_realloc (p, round_up_exp (sz)); + if (! p) + return 1; + +diff --git a/grub-core/script/lexer.c b/grub-core/script/lexer.c +index c6bd3172f..5fb0cbd0b 100644 +--- a/grub-core/script/lexer.c ++++ b/grub-core/script/lexer.c +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + + #define yytext_ptr char * + #include "grub_script.tab.h" +@@ -110,10 +111,14 @@ grub_script_lexer_record (struct grub_parser_param *parser, char *str) + old = lexer->recording; + if (lexer->recordlen < len) + lexer->recordlen = len; +- lexer->recordlen *= 2; ++ ++ if (grub_mul (lexer->recordlen, 2, &lexer->recordlen)) ++ goto fail; ++ + lexer->recording = grub_realloc (lexer->recording, lexer->recordlen); + if (!lexer->recording) + { ++ fail: + grub_free (old); + lexer->recordpos = 0; + lexer->recordlen = 0; +@@ -130,7 +135,7 @@ int + grub_script_lexer_yywrap (struct grub_parser_param *parserstate, + const char *input) + { +- grub_size_t len = 0; ++ grub_size_t len = 0, sz; + char *p = 0; + char *line = 0; + YY_BUFFER_STATE buffer; +@@ -168,12 +173,22 @@ grub_script_lexer_yywrap (struct grub_parser_param *parserstate, + } + else if (len && line[len - 1] != '\n') + { +- p = grub_realloc (line, len + 2); ++ if (grub_add (len, 2, &sz)) ++ { ++ grub_free (line); ++ grub_script_yyerror (parserstate, N_("overflow is detected")); ++ return 1; ++ } ++ ++ p = grub_realloc (line, sz); + if (p) + { + p[len++] = '\n'; + p[len] = '\0'; + } ++ else ++ grub_free (line); ++ + line = p; + } + +diff --git a/grub-core/video/bitmap.c b/grub-core/video/bitmap.c +index b2e031566..6256e209a 100644 +--- a/grub-core/video/bitmap.c ++++ b/grub-core/video/bitmap.c +@@ -23,6 +23,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -58,7 +59,7 @@ grub_video_bitmap_create (struct grub_video_bitmap **bitmap, + enum grub_video_blit_format blit_format) + { + struct grub_video_mode_info *mode_info; +- unsigned int size; ++ grub_size_t size; + + if (!bitmap) + return grub_error (GRUB_ERR_BUG, "invalid argument"); +@@ -137,19 +138,25 @@ grub_video_bitmap_create (struct grub_video_bitmap **bitmap, + + mode_info->pitch = width * mode_info->bytes_per_pixel; + +- /* Calculate size needed for the data. */ +- size = (width * mode_info->bytes_per_pixel) * height; ++ /* Calculate size needed for the data. */ ++ if (grub_mul (width, mode_info->bytes_per_pixel, &size) || ++ grub_mul (size, height, &size)) ++ { ++ grub_error (GRUB_ERR_OUT_OF_RANGE, N_("overflow is detected")); ++ goto fail; ++ } + + (*bitmap)->data = grub_zalloc (size); + if (! (*bitmap)->data) +- { +- grub_free (*bitmap); +- *bitmap = 0; +- +- return grub_errno; +- } ++ goto fail; + + return GRUB_ERR_NONE; ++ ++ fail: ++ grub_free (*bitmap); ++ *bitmap = NULL; ++ ++ return grub_errno; + } + + /* Frees all resources allocated by bitmap. */ +diff --git a/grub-core/video/readers/png.c b/grub-core/video/readers/png.c +index 61bd64537..0157ff742 100644 +--- a/grub-core/video/readers/png.c ++++ b/grub-core/video/readers/png.c +@@ -23,6 +23,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -301,9 +302,17 @@ grub_png_decode_image_header (struct grub_png_data *data) + data->bpp <<= 1; + + data->color_bits = color_bits; +- data->row_bytes = data->image_width * data->bpp; ++ ++ if (grub_mul (data->image_width, data->bpp, &data->row_bytes)) ++ return grub_error (GRUB_ERR_OUT_OF_RANGE, N_("overflow is detected")); ++ + if (data->color_bits <= 4) +- data->row_bytes = (data->image_width * data->color_bits + 7) / 8; ++ { ++ if (grub_mul (data->image_width, data->color_bits + 7, &data->row_bytes)) ++ return grub_error (GRUB_ERR_OUT_OF_RANGE, N_("overflow is detected")); ++ ++ data->row_bytes >>= 3; ++ } + + #ifndef GRUB_CPU_WORDS_BIGENDIAN + if (data->is_16bit || data->is_gray || data->is_palette) +-- +2.26.2 + diff --git a/boot/grub2/0007-iso9660-Don-t-leak-memory-on-realloc-failures.patch b/boot/grub2/0007-iso9660-Don-t-leak-memory-on-realloc-failures.patch new file mode 100644 index 00000000..6b0aee08 --- /dev/null +++ b/boot/grub2/0007-iso9660-Don-t-leak-memory-on-realloc-failures.patch @@ -0,0 +1,72 @@ +From e0dd17a3ce79c6622dc78c96e1f2ef1b20e2bf7b Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Sat, 4 Jul 2020 12:25:09 -0400 +Subject: [PATCH] iso9660: Don't leak memory on realloc() failures +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Peter Jones +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/fs/iso9660.c | 24 ++++++++++++++++++++---- + 1 file changed, 20 insertions(+), 4 deletions(-) + +diff --git a/grub-core/fs/iso9660.c b/grub-core/fs/iso9660.c +index 7ba5b300b..5ec4433b8 100644 +--- a/grub-core/fs/iso9660.c ++++ b/grub-core/fs/iso9660.c +@@ -533,14 +533,20 @@ add_part (struct iterate_dir_ctx *ctx, + { + int size = ctx->symlink ? grub_strlen (ctx->symlink) : 0; + grub_size_t sz; ++ char *new; + + if (grub_add (size, len2, &sz) || + grub_add (sz, 1, &sz)) + return; + +- ctx->symlink = grub_realloc (ctx->symlink, sz); +- if (! ctx->symlink) +- return; ++ new = grub_realloc (ctx->symlink, sz); ++ if (!new) ++ { ++ grub_free (ctx->symlink); ++ ctx->symlink = NULL; ++ return; ++ } ++ ctx->symlink = new; + + grub_memcpy (ctx->symlink + size, part, len2); + ctx->symlink[size + len2] = 0; +@@ -634,7 +640,12 @@ susp_iterate_dir (struct grub_iso9660_susp_entry *entry, + is the length. Both are part of the `Component + Record'. */ + if (ctx->symlink && !ctx->was_continue) +- add_part (ctx, "/", 1); ++ { ++ add_part (ctx, "/", 1); ++ if (grub_errno) ++ return grub_errno; ++ } ++ + add_part (ctx, (char *) &entry->data[pos + 2], + entry->data[pos + 1]); + ctx->was_continue = (entry->data[pos] & 1); +@@ -653,6 +664,11 @@ susp_iterate_dir (struct grub_iso9660_susp_entry *entry, + add_part (ctx, "/", 1); + break; + } ++ ++ /* Check if grub_realloc() failed in add_part(). */ ++ if (grub_errno) ++ return grub_errno; ++ + /* In pos + 1 the length of the `Component Record' is + stored. */ + pos += entry->data[pos + 1] + 2; +-- +2.26.2 + diff --git a/boot/grub2/0008-font-Do-not-load-more-than-one-NAME-section.patch b/boot/grub2/0008-font-Do-not-load-more-than-one-NAME-section.patch new file mode 100644 index 00000000..f4616292 --- /dev/null +++ b/boot/grub2/0008-font-Do-not-load-more-than-one-NAME-section.patch @@ -0,0 +1,41 @@ +From 73bc7a964c9496d5b0f00dbd69959dacf5adcebe Mon Sep 17 00:00:00 2001 +From: Daniel Kiper +Date: Tue, 7 Jul 2020 15:36:26 +0200 +Subject: [PATCH] font: Do not load more than one NAME section +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The GRUB font file can have one NAME section only. Though if somebody +crafts a broken font file with many NAME sections and loads it then the +GRUB leaks memory. So, prevent against that by loading first NAME +section and failing in controlled way on following one. + +Reported-by: Chris Coulson +Signed-off-by: Daniel Kiper +Reviewed-by: Jan Setje-Eilers +Signed-off-by: Stefan Sørensen +--- + grub-core/font/font.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/grub-core/font/font.c b/grub-core/font/font.c +index 5edb477ac..d09bb38d8 100644 +--- a/grub-core/font/font.c ++++ b/grub-core/font/font.c +@@ -532,6 +532,12 @@ grub_font_load (const char *filename) + if (grub_memcmp (section.name, FONT_FORMAT_SECTION_NAMES_FONT_NAME, + sizeof (FONT_FORMAT_SECTION_NAMES_FONT_NAME) - 1) == 0) + { ++ if (font->name != NULL) ++ { ++ grub_error (GRUB_ERR_BAD_FONT, "invalid font file: too many NAME sections"); ++ goto fail; ++ } ++ + font->name = read_section_as_string (§ion); + if (!font->name) + goto fail; +-- +2.26.2 + diff --git a/boot/grub2/0009-gfxmenu-Fix-double-free-in-load_image.patch b/boot/grub2/0009-gfxmenu-Fix-double-free-in-load_image.patch new file mode 100644 index 00000000..732d1666 --- /dev/null +++ b/boot/grub2/0009-gfxmenu-Fix-double-free-in-load_image.patch @@ -0,0 +1,39 @@ +From 9ff609f0e7798bc5fb04f791131c98e7693bdd9b Mon Sep 17 00:00:00 2001 +From: Alexey Makhalov +Date: Wed, 8 Jul 2020 20:41:56 +0000 +Subject: [PATCH] gfxmenu: Fix double free in load_image() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +self->bitmap should be zeroed after free. Otherwise, there is a chance +to double free (USE_AFTER_FREE) it later in rescale_image(). + +Fixes: CID 292472 + +Signed-off-by: Alexey Makhalov +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/gfxmenu/gui_image.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/grub-core/gfxmenu/gui_image.c b/grub-core/gfxmenu/gui_image.c +index 29784ed2d..6b2e976f1 100644 +--- a/grub-core/gfxmenu/gui_image.c ++++ b/grub-core/gfxmenu/gui_image.c +@@ -195,7 +195,10 @@ load_image (grub_gui_image_t self, const char *path) + return grub_errno; + + if (self->bitmap && (self->bitmap != self->raw_bitmap)) +- grub_video_bitmap_destroy (self->bitmap); ++ { ++ grub_video_bitmap_destroy (self->bitmap); ++ self->bitmap = 0; ++ } + if (self->raw_bitmap) + grub_video_bitmap_destroy (self->raw_bitmap); + +-- +2.26.2 + diff --git a/boot/grub2/0010-xnu-Fix-double-free-in-grub_xnu_devprop_add_property.patch b/boot/grub2/0010-xnu-Fix-double-free-in-grub_xnu_devprop_add_property.patch new file mode 100644 index 00000000..72cf58d4 --- /dev/null +++ b/boot/grub2/0010-xnu-Fix-double-free-in-grub_xnu_devprop_add_property.patch @@ -0,0 +1,58 @@ +From dc9777dc17697b196c415c53187a55861d41fd2a Mon Sep 17 00:00:00 2001 +From: Alexey Makhalov +Date: Wed, 8 Jul 2020 21:30:43 +0000 +Subject: [PATCH] xnu: Fix double free in grub_xnu_devprop_add_property() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +grub_xnu_devprop_add_property() should not free utf8 and utf16 as it get +allocated and freed in the caller. + +Minor improvement: do prop fields initialization after memory allocations. + +Fixes: CID 292442, CID 292457, CID 292460, CID 292466 + +Signed-off-by: Alexey Makhalov +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/loader/i386/xnu.c | 17 ++++++++--------- + 1 file changed, 8 insertions(+), 9 deletions(-) + +diff --git a/grub-core/loader/i386/xnu.c b/grub-core/loader/i386/xnu.c +index b7d176b5d..e9e119259 100644 +--- a/grub-core/loader/i386/xnu.c ++++ b/grub-core/loader/i386/xnu.c +@@ -262,20 +262,19 @@ grub_xnu_devprop_add_property (struct grub_xnu_devprop_device_descriptor *dev, + if (!prop) + return grub_errno; + +- prop->name = utf8; +- prop->name16 = utf16; +- prop->name16len = utf16len; +- +- prop->length = datalen; +- prop->data = grub_malloc (prop->length); ++ prop->data = grub_malloc (datalen); + if (!prop->data) + { +- grub_free (prop->name); +- grub_free (prop->name16); + grub_free (prop); + return grub_errno; + } +- grub_memcpy (prop->data, data, prop->length); ++ grub_memcpy (prop->data, data, datalen); ++ ++ prop->name = utf8; ++ prop->name16 = utf16; ++ prop->name16len = utf16len; ++ prop->length = datalen; ++ + grub_list_push (GRUB_AS_LIST_P (&dev->properties), + GRUB_AS_LIST (prop)); + return GRUB_ERR_NONE; +-- +2.26.2 + diff --git a/boot/grub2/0011-lzma-Make-sure-we-don-t-dereference-past-array.patch b/boot/grub2/0011-lzma-Make-sure-we-don-t-dereference-past-array.patch new file mode 100644 index 00000000..a7d5a48e --- /dev/null +++ b/boot/grub2/0011-lzma-Make-sure-we-don-t-dereference-past-array.patch @@ -0,0 +1,55 @@ +From 78829f0c230680e386fff9f420bb1631bc20f761 Mon Sep 17 00:00:00 2001 +From: Konrad Rzeszutek Wilk +Date: Thu, 9 Jul 2020 03:05:23 +0000 +Subject: [PATCH] lzma: Make sure we don't dereference past array +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The two dimensional array p->posSlotEncoder[4][64] is being dereferenced +using the GetLenToPosState() macro which checks if len is less than 5, +and if so subtracts 2 from it. If len = 0, that is 0 - 2 = 4294967294. +Obviously we don't want to dereference that far out so we check if the +position found is greater or equal kNumLenToPosStates (4) and bail out. + +N.B.: Upstream LZMA 18.05 and later has this function completely rewritten +without any history. + +Fixes: CID 51526 + +Signed-off-by: Konrad Rzeszutek Wilk +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/lib/LzmaEnc.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/grub-core/lib/LzmaEnc.c b/grub-core/lib/LzmaEnc.c +index f2ec04a8c..753e56a95 100644 +--- a/grub-core/lib/LzmaEnc.c ++++ b/grub-core/lib/LzmaEnc.c +@@ -1877,13 +1877,19 @@ static SRes LzmaEnc_CodeOneBlock(CLzmaEnc *p, Bool useLimits, UInt32 maxPackSize + } + else + { +- UInt32 posSlot; ++ UInt32 posSlot, lenToPosState; + RangeEnc_EncodeBit(&p->rc, &p->isRep[p->state], 0); + p->state = kMatchNextStates[p->state]; + LenEnc_Encode2(&p->lenEnc, &p->rc, len - LZMA_MATCH_LEN_MIN, posState, !p->fastMode, p->ProbPrices); + pos -= LZMA_NUM_REPS; + GetPosSlot(pos, posSlot); +- RcTree_Encode(&p->rc, p->posSlotEncoder[GetLenToPosState(len)], kNumPosSlotBits, posSlot); ++ lenToPosState = GetLenToPosState(len); ++ if (lenToPosState >= kNumLenToPosStates) ++ { ++ p->result = SZ_ERROR_DATA; ++ return CheckErrors(p); ++ } ++ RcTree_Encode(&p->rc, p->posSlotEncoder[lenToPosState], kNumPosSlotBits, posSlot); + + if (posSlot >= kStartPosModelIndex) + { +-- +2.26.2 + diff --git a/boot/grub2/0012-term-Fix-overflow-on-user-inputs.patch b/boot/grub2/0012-term-Fix-overflow-on-user-inputs.patch new file mode 100644 index 00000000..77b01a48 --- /dev/null +++ b/boot/grub2/0012-term-Fix-overflow-on-user-inputs.patch @@ -0,0 +1,69 @@ +From 8d3b6f9da468f666e3a7976657f2ab5c52762a21 Mon Sep 17 00:00:00 2001 +From: Konrad Rzeszutek Wilk +Date: Tue, 7 Jul 2020 15:12:25 -0400 +Subject: [PATCH] term: Fix overflow on user inputs +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This requires a very weird input from the serial interface but can cause +an overflow in input_buf (keys) overwriting the next variable (npending) +with the user choice: + +(pahole output) + +struct grub_terminfo_input_state { + int input_buf[6]; /* 0 24 */ + int npending; /* 24 4 */ <- CORRUPT + ...snip... + +The magic string requires causing this is "ESC,O,],0,1,2,q" and we overflow +npending with "q" (aka increase npending to 161). The simplest fix is to +just to disallow overwrites input_buf, which exactly what this patch does. + +Fixes: CID 292449 + +Signed-off-by: Konrad Rzeszutek Wilk +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/term/terminfo.c | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/grub-core/term/terminfo.c b/grub-core/term/terminfo.c +index d317efa36..5fa94c0c3 100644 +--- a/grub-core/term/terminfo.c ++++ b/grub-core/term/terminfo.c +@@ -398,7 +398,7 @@ grub_terminfo_getwh (struct grub_term_output *term) + } + + static void +-grub_terminfo_readkey (struct grub_term_input *term, int *keys, int *len, ++grub_terminfo_readkey (struct grub_term_input *term, int *keys, int *len, int max_len, + int (*readkey) (struct grub_term_input *term)) + { + int c; +@@ -414,6 +414,9 @@ grub_terminfo_readkey (struct grub_term_input *term, int *keys, int *len, + if (c == -1) \ + return; \ + \ ++ if (*len >= max_len) \ ++ return; \ ++ \ + keys[*len] = c; \ + (*len)++; \ + } +@@ -602,8 +605,8 @@ grub_terminfo_getkey (struct grub_term_input *termi) + return ret; + } + +- grub_terminfo_readkey (termi, data->input_buf, +- &data->npending, data->readkey); ++ grub_terminfo_readkey (termi, data->input_buf, &data->npending, ++ GRUB_TERMINFO_READKEY_MAX_LEN, data->readkey); + + #if defined(__powerpc__) && defined(GRUB_MACHINE_IEEE1275) + if (data->npending == 1 && data->input_buf[0] == GRUB_TERM_ESC +-- +2.26.2 + diff --git a/boot/grub2/0013-udf-Fix-memory-leak.patch b/boot/grub2/0013-udf-Fix-memory-leak.patch new file mode 100644 index 00000000..d79de905 --- /dev/null +++ b/boot/grub2/0013-udf-Fix-memory-leak.patch @@ -0,0 +1,59 @@ +From 748b691761d31bfff7e9d0d210caa606294c2b52 Mon Sep 17 00:00:00 2001 +From: Konrad Rzeszutek Wilk +Date: Tue, 7 Jul 2020 22:02:31 -0400 +Subject: [PATCH] udf: Fix memory leak +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Fixes: CID 73796 + +Signed-off-by: Konrad Rzeszutek Wilk +Reviewed-by: Daniel Kiper +Reviewed-by: Jan Setje-Eilers +Signed-off-by: Stefan Sørensen +--- + grub-core/fs/udf.c | 17 +++++++++++++---- + 1 file changed, 13 insertions(+), 4 deletions(-) + +diff --git a/grub-core/fs/udf.c b/grub-core/fs/udf.c +index 21ac7f446..2ac5c1d00 100644 +--- a/grub-core/fs/udf.c ++++ b/grub-core/fs/udf.c +@@ -965,8 +965,10 @@ grub_udf_iterate_dir (grub_fshelp_node_t dir, + return 0; + + if (grub_udf_read_icb (dir->data, &dirent.icb, child)) +- return 0; +- ++ { ++ grub_free (child); ++ return 0; ++ } + if (dirent.characteristics & GRUB_UDF_FID_CHAR_PARENT) + { + /* This is the parent directory. */ +@@ -988,11 +990,18 @@ grub_udf_iterate_dir (grub_fshelp_node_t dir, + dirent.file_ident_length, + (char *) raw)) + != dirent.file_ident_length) +- return 0; ++ { ++ grub_free (child); ++ return 0; ++ } + + filename = read_string (raw, dirent.file_ident_length, 0); + if (!filename) +- grub_print_error (); ++ { ++ /* As the hook won't get called. */ ++ grub_free (child); ++ grub_print_error (); ++ } + + if (filename && hook (filename, type, child, hook_data)) + { +-- +2.26.2 + diff --git a/boot/grub2/0014-multiboot2-Fix-memory-leak-if-grub_create_loader_cmd.patch b/boot/grub2/0014-multiboot2-Fix-memory-leak-if-grub_create_loader_cmd.patch new file mode 100644 index 00000000..f3e2a041 --- /dev/null +++ b/boot/grub2/0014-multiboot2-Fix-memory-leak-if-grub_create_loader_cmd.patch @@ -0,0 +1,38 @@ +From 49bf3faa106498e151306fc780c63194a14751e3 Mon Sep 17 00:00:00 2001 +From: Konrad Rzeszutek Wilk +Date: Fri, 26 Jun 2020 10:51:43 -0400 +Subject: [PATCH] multiboot2: Fix memory leak if + grub_create_loader_cmdline() fails +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Fixes: CID 292468 + +Signed-off-by: Konrad Rzeszutek Wilk +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/loader/multiboot_mbi2.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/grub-core/loader/multiboot_mbi2.c b/grub-core/loader/multiboot_mbi2.c +index 53da78615..0efc66062 100644 +--- a/grub-core/loader/multiboot_mbi2.c ++++ b/grub-core/loader/multiboot_mbi2.c +@@ -1070,7 +1070,11 @@ grub_multiboot2_add_module (grub_addr_t start, grub_size_t size, + err = grub_create_loader_cmdline (argc, argv, newmod->cmdline, + newmod->cmdline_size, GRUB_VERIFY_MODULE_CMDLINE); + if (err) +- return err; ++ { ++ grub_free (newmod->cmdline); ++ grub_free (newmod); ++ return err; ++ } + + if (modules_last) + modules_last->next = newmod; +-- +2.26.2 + diff --git a/boot/grub2/0015-tftp-Do-not-use-priority-queue.patch b/boot/grub2/0015-tftp-Do-not-use-priority-queue.patch new file mode 100644 index 00000000..833606be --- /dev/null +++ b/boot/grub2/0015-tftp-Do-not-use-priority-queue.patch @@ -0,0 +1,283 @@ +From b6c4a1b204740fe52b32e7f530831a59f4038e20 Mon Sep 17 00:00:00 2001 +From: Alexey Makhalov +Date: Thu, 9 Jul 2020 08:10:40 +0000 +Subject: [PATCH] tftp: Do not use priority queue +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +There is not need to reassemble the order of blocks. Per RFC 1350, +server must wait for the ACK, before sending next block. Data packets +can be served immediately without putting them to priority queue. + +Logic to handle incoming packet is this: + - if packet block id equal to expected block id, then + process the packet, + - if packet block id is less than expected - this is retransmit + of old packet, then ACK it and drop the packet, + - if packet block id is more than expected - that shouldn't + happen, just drop the packet. + +It makes the tftp receive path code simpler, smaller and faster. +As a benefit, this change fixes CID# 73624 and CID# 96690, caused +by following while loop: + + while (cmp_block (grub_be_to_cpu16 (tftph->u.data.block), data->block + 1) == 0) + +where tftph pointer is not moving from one iteration to another, causing +to serve same packet again. Luckily, double serving didn't happen due to +data->block++ during the first iteration. + +Fixes: CID 73624, CID 96690 + +Signed-off-by: Alexey Makhalov +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/net/tftp.c | 168 ++++++++++++++----------------------------- + 1 file changed, 53 insertions(+), 115 deletions(-) + +diff --git a/grub-core/net/tftp.c b/grub-core/net/tftp.c +index 7d90bf66e..b4297bc8d 100644 +--- a/grub-core/net/tftp.c ++++ b/grub-core/net/tftp.c +@@ -25,7 +25,6 @@ + #include + #include + #include +-#include + #include + + GRUB_MOD_LICENSE ("GPLv3+"); +@@ -106,31 +105,8 @@ typedef struct tftp_data + int have_oack; + struct grub_error_saved save_err; + grub_net_udp_socket_t sock; +- grub_priority_queue_t pq; + } *tftp_data_t; + +-static int +-cmp_block (grub_uint16_t a, grub_uint16_t b) +-{ +- grub_int16_t i = (grub_int16_t) (a - b); +- if (i > 0) +- return +1; +- if (i < 0) +- return -1; +- return 0; +-} +- +-static int +-cmp (const void *a__, const void *b__) +-{ +- struct grub_net_buff *a_ = *(struct grub_net_buff **) a__; +- struct grub_net_buff *b_ = *(struct grub_net_buff **) b__; +- struct tftphdr *a = (struct tftphdr *) a_->data; +- struct tftphdr *b = (struct tftphdr *) b_->data; +- /* We want the first elements to be on top. */ +- return -cmp_block (grub_be_to_cpu16 (a->u.data.block), grub_be_to_cpu16 (b->u.data.block)); +-} +- + static grub_err_t + ack (tftp_data_t data, grub_uint64_t block) + { +@@ -207,73 +183,60 @@ tftp_receive (grub_net_udp_socket_t sock __attribute__ ((unused)), + return GRUB_ERR_NONE; + } + +- err = grub_priority_queue_push (data->pq, &nb); +- if (err) +- return err; +- +- { +- struct grub_net_buff **nb_top_p, *nb_top; +- while (1) +- { +- nb_top_p = grub_priority_queue_top (data->pq); +- if (!nb_top_p) +- return GRUB_ERR_NONE; +- nb_top = *nb_top_p; +- tftph = (struct tftphdr *) nb_top->data; +- if (cmp_block (grub_be_to_cpu16 (tftph->u.data.block), data->block + 1) >= 0) +- break; +- ack (data, grub_be_to_cpu16 (tftph->u.data.block)); +- grub_netbuff_free (nb_top); +- grub_priority_queue_pop (data->pq); +- } +- while (cmp_block (grub_be_to_cpu16 (tftph->u.data.block), data->block + 1) == 0) +- { +- unsigned size; +- +- grub_priority_queue_pop (data->pq); +- +- if (file->device->net->packs.count < 50) ++ /* Ack old/retransmitted block. */ ++ if (grub_be_to_cpu16 (tftph->u.data.block) < data->block + 1) ++ ack (data, grub_be_to_cpu16 (tftph->u.data.block)); ++ /* Ignore unexpected block. */ ++ else if (grub_be_to_cpu16 (tftph->u.data.block) > data->block + 1) ++ grub_dprintf ("tftp", "TFTP unexpected block # %d\n", tftph->u.data.block); ++ else ++ { ++ unsigned size; ++ ++ if (file->device->net->packs.count < 50) ++ { + err = ack (data, data->block + 1); +- else +- { +- file->device->net->stall = 1; +- err = 0; +- } +- if (err) +- return err; +- +- err = grub_netbuff_pull (nb_top, sizeof (tftph->opcode) + +- sizeof (tftph->u.data.block)); +- if (err) +- return err; +- size = nb_top->tail - nb_top->data; +- +- data->block++; +- if (size < data->block_size) +- { +- if (data->ack_sent < data->block) +- ack (data, data->block); +- file->device->net->eof = 1; +- file->device->net->stall = 1; +- grub_net_udp_close (data->sock); +- data->sock = NULL; +- } +- /* Prevent garbage in broken cards. Is it still necessary +- given that IP implementation has been fixed? +- */ +- if (size > data->block_size) +- { +- err = grub_netbuff_unput (nb_top, size - data->block_size); +- if (err) +- return err; +- } +- /* If there is data, puts packet in socket list. */ +- if ((nb_top->tail - nb_top->data) > 0) +- grub_net_put_packet (&file->device->net->packs, nb_top); +- else +- grub_netbuff_free (nb_top); +- } +- } ++ if (err) ++ return err; ++ } ++ else ++ file->device->net->stall = 1; ++ ++ err = grub_netbuff_pull (nb, sizeof (tftph->opcode) + ++ sizeof (tftph->u.data.block)); ++ if (err) ++ return err; ++ size = nb->tail - nb->data; ++ ++ data->block++; ++ if (size < data->block_size) ++ { ++ if (data->ack_sent < data->block) ++ ack (data, data->block); ++ file->device->net->eof = 1; ++ file->device->net->stall = 1; ++ grub_net_udp_close (data->sock); ++ data->sock = NULL; ++ } ++ /* ++ * Prevent garbage in broken cards. Is it still necessary ++ * given that IP implementation has been fixed? ++ */ ++ if (size > data->block_size) ++ { ++ err = grub_netbuff_unput (nb, size - data->block_size); ++ if (err) ++ return err; ++ } ++ /* If there is data, puts packet in socket list. */ ++ if ((nb->tail - nb->data) > 0) ++ { ++ grub_net_put_packet (&file->device->net->packs, nb); ++ /* Do not free nb. */ ++ return GRUB_ERR_NONE; ++ } ++ } ++ grub_netbuff_free (nb); + return GRUB_ERR_NONE; + case TFTP_ERROR: + data->have_oack = 1; +@@ -287,19 +250,6 @@ tftp_receive (grub_net_udp_socket_t sock __attribute__ ((unused)), + } + } + +-static void +-destroy_pq (tftp_data_t data) +-{ +- struct grub_net_buff **nb_p; +- while ((nb_p = grub_priority_queue_top (data->pq))) +- { +- grub_netbuff_free (*nb_p); +- grub_priority_queue_pop (data->pq); +- } +- +- grub_priority_queue_destroy (data->pq); +-} +- + static grub_err_t + tftp_open (struct grub_file *file, const char *filename) + { +@@ -372,17 +322,9 @@ tftp_open (struct grub_file *file, const char *filename) + file->not_easily_seekable = 1; + file->data = data; + +- data->pq = grub_priority_queue_new (sizeof (struct grub_net_buff *), cmp); +- if (!data->pq) +- { +- grub_free (data); +- return grub_errno; +- } +- + err = grub_net_resolve_address (file->device->net->server, &addr); + if (err) + { +- destroy_pq (data); + grub_free (data); + return err; + } +@@ -392,7 +334,6 @@ tftp_open (struct grub_file *file, const char *filename) + file); + if (!data->sock) + { +- destroy_pq (data); + grub_free (data); + return grub_errno; + } +@@ -406,7 +347,6 @@ tftp_open (struct grub_file *file, const char *filename) + if (err) + { + grub_net_udp_close (data->sock); +- destroy_pq (data); + grub_free (data); + return err; + } +@@ -423,7 +363,6 @@ tftp_open (struct grub_file *file, const char *filename) + if (grub_errno) + { + grub_net_udp_close (data->sock); +- destroy_pq (data); + grub_free (data); + return grub_errno; + } +@@ -466,7 +405,6 @@ tftp_close (struct grub_file *file) + grub_print_error (); + grub_net_udp_close (data->sock); + } +- destroy_pq (data); + grub_free (data); + return GRUB_ERR_NONE; + } +-- +2.26.2 + diff --git a/boot/grub2/0016-relocator-Protect-grub_relocator_alloc_chunk_addr-in.patch b/boot/grub2/0016-relocator-Protect-grub_relocator_alloc_chunk_addr-in.patch new file mode 100644 index 00000000..293b9f89 --- /dev/null +++ b/boot/grub2/0016-relocator-Protect-grub_relocator_alloc_chunk_addr-in.patch @@ -0,0 +1,153 @@ +From 1c7b619c84f229c1602c1958bcd054b6d9937562 Mon Sep 17 00:00:00 2001 +From: Alexey Makhalov +Date: Wed, 15 Jul 2020 06:42:37 +0000 +Subject: [PATCH] relocator: Protect grub_relocator_alloc_chunk_addr() + input args against integer underflow/overflow +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Use arithmetic macros from safemath.h to accomplish it. In this commit, +I didn't want to be too paranoid to check every possible math equation +for overflow/underflow. Only obvious places (with non zero chance of +overflow/underflow) were refactored. + +Signed-off-by: Alexey Makhalov +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/loader/i386/linux.c | 9 +++++++-- + grub-core/loader/i386/pc/linux.c | 9 +++++++-- + grub-core/loader/i386/xen.c | 12 ++++++++++-- + grub-core/loader/xnu.c | 11 +++++++---- + 4 files changed, 31 insertions(+), 10 deletions(-) + +diff --git a/grub-core/loader/i386/linux.c b/grub-core/loader/i386/linux.c +index d0501e229..02a73463a 100644 +--- a/grub-core/loader/i386/linux.c ++++ b/grub-core/loader/i386/linux.c +@@ -36,6 +36,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -547,9 +548,13 @@ grub_linux_boot (void) + + { + grub_relocator_chunk_t ch; ++ grub_size_t sz; ++ ++ if (grub_add (ctx.real_size, efi_mmap_size, &sz)) ++ return GRUB_ERR_OUT_OF_RANGE; ++ + err = grub_relocator_alloc_chunk_addr (relocator, &ch, +- ctx.real_mode_target, +- (ctx.real_size + efi_mmap_size)); ++ ctx.real_mode_target, sz); + if (err) + return err; + real_mode_mem = get_virtual_current_address (ch); +diff --git a/grub-core/loader/i386/pc/linux.c b/grub-core/loader/i386/pc/linux.c +index 47ea2945e..31f09922b 100644 +--- a/grub-core/loader/i386/pc/linux.c ++++ b/grub-core/loader/i386/pc/linux.c +@@ -35,6 +35,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -218,8 +219,12 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), + setup_sects = GRUB_LINUX_DEFAULT_SETUP_SECTS; + + real_size = setup_sects << GRUB_DISK_SECTOR_BITS; +- grub_linux16_prot_size = grub_file_size (file) +- - real_size - GRUB_DISK_SECTOR_SIZE; ++ if (grub_sub (grub_file_size (file), real_size, &grub_linux16_prot_size) || ++ grub_sub (grub_linux16_prot_size, GRUB_DISK_SECTOR_SIZE, &grub_linux16_prot_size)) ++ { ++ grub_error (GRUB_ERR_OUT_OF_RANGE, N_("overflow is detected")); ++ goto fail; ++ } + + if (! grub_linux_is_bzimage + && GRUB_LINUX_ZIMAGE_ADDR + grub_linux16_prot_size +diff --git a/grub-core/loader/i386/xen.c b/grub-core/loader/i386/xen.c +index 8f662c8ac..cd24874ca 100644 +--- a/grub-core/loader/i386/xen.c ++++ b/grub-core/loader/i386/xen.c +@@ -41,6 +41,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -636,6 +637,7 @@ grub_cmd_xen (grub_command_t cmd __attribute__ ((unused)), + grub_relocator_chunk_t ch; + grub_addr_t kern_start; + grub_addr_t kern_end; ++ grub_size_t sz; + + if (argc == 0) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); +@@ -703,8 +705,14 @@ grub_cmd_xen (grub_command_t cmd __attribute__ ((unused)), + + xen_state.max_addr = ALIGN_UP (kern_end, PAGE_SIZE); + +- err = grub_relocator_alloc_chunk_addr (xen_state.relocator, &ch, kern_start, +- kern_end - kern_start); ++ ++ if (grub_sub (kern_end, kern_start, &sz)) ++ { ++ err = GRUB_ERR_OUT_OF_RANGE; ++ goto fail; ++ } ++ ++ err = grub_relocator_alloc_chunk_addr (xen_state.relocator, &ch, kern_start, sz); + if (err) + goto fail; + kern_chunk_src = get_virtual_current_address (ch); +diff --git a/grub-core/loader/xnu.c b/grub-core/loader/xnu.c +index 77d7060e1..9ae4ceb35 100644 +--- a/grub-core/loader/xnu.c ++++ b/grub-core/loader/xnu.c +@@ -34,6 +34,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -59,15 +60,17 @@ grub_xnu_heap_malloc (int size, void **src, grub_addr_t *target) + { + grub_err_t err; + grub_relocator_chunk_t ch; ++ grub_addr_t tgt; ++ ++ if (grub_add (grub_xnu_heap_target_start, grub_xnu_heap_size, &tgt)) ++ return GRUB_ERR_OUT_OF_RANGE; + +- err = grub_relocator_alloc_chunk_addr (grub_xnu_relocator, &ch, +- grub_xnu_heap_target_start +- + grub_xnu_heap_size, size); ++ err = grub_relocator_alloc_chunk_addr (grub_xnu_relocator, &ch, tgt, size); + if (err) + return err; + + *src = get_virtual_current_address (ch); +- *target = grub_xnu_heap_target_start + grub_xnu_heap_size; ++ *target = tgt; + grub_xnu_heap_size += size; + grub_dprintf ("xnu", "val=%p\n", *src); + return GRUB_ERR_NONE; +-- +2.26.2 + diff --git a/boot/grub2/0017-relocator-Protect-grub_relocator_alloc_chunk_align-m.patch b/boot/grub2/0017-relocator-Protect-grub_relocator_alloc_chunk_align-m.patch new file mode 100644 index 00000000..e04e72ab --- /dev/null +++ b/boot/grub2/0017-relocator-Protect-grub_relocator_alloc_chunk_align-m.patch @@ -0,0 +1,341 @@ +From 0cfbbca3ccd84d36ffb1bcd6644ada7c73b19fc0 Mon Sep 17 00:00:00 2001 +From: Alexey Makhalov +Date: Wed, 8 Jul 2020 01:44:38 +0000 +Subject: [PATCH] relocator: Protect grub_relocator_alloc_chunk_align() + max_addr against integer underflow +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This commit introduces integer underflow mitigation in max_addr calculation +in grub_relocator_alloc_chunk_align() invocation. + +It consists of 2 fixes: + 1. Introduced grub_relocator_alloc_chunk_align_safe() wrapper function to perform + sanity check for min/max and size values, and to make safe invocation of + grub_relocator_alloc_chunk_align() with validated max_addr value. Replace all + invocations such as grub_relocator_alloc_chunk_align(..., min_addr, max_addr - size, size, ...) + by grub_relocator_alloc_chunk_align_safe(..., min_addr, max_addr, size, ...). + 2. Introduced UP_TO_TOP32(s) macro for the cases where max_addr is 32-bit top + address (0xffffffff - size + 1) or similar. + +Signed-off-by: Alexey Makhalov +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/lib/i386/relocator.c | 28 ++++++++++---------------- + grub-core/lib/mips/relocator.c | 6 ++---- + grub-core/lib/powerpc/relocator.c | 6 ++---- + grub-core/lib/x86_64/efi/relocator.c | 7 +++---- + grub-core/loader/i386/linux.c | 5 ++--- + grub-core/loader/i386/multiboot_mbi.c | 7 +++---- + grub-core/loader/i386/pc/linux.c | 6 ++---- + grub-core/loader/mips/linux.c | 9 +++------ + grub-core/loader/multiboot.c | 2 +- + grub-core/loader/multiboot_elfxx.c | 10 ++++----- + grub-core/loader/multiboot_mbi2.c | 10 ++++----- + grub-core/loader/xnu_resume.c | 2 +- + include/grub/relocator.h | 29 +++++++++++++++++++++++++++ + 13 files changed, 69 insertions(+), 58 deletions(-) + +diff --git a/grub-core/lib/i386/relocator.c b/grub-core/lib/i386/relocator.c +index 71dd4f0ab..34cbe834f 100644 +--- a/grub-core/lib/i386/relocator.c ++++ b/grub-core/lib/i386/relocator.c +@@ -83,11 +83,10 @@ grub_relocator32_boot (struct grub_relocator *rel, + /* Specific memory range due to Global Descriptor Table for use by payload + that we will store in returned chunk. The address range and preference + are based on "THE LINUX/x86 BOOT PROTOCOL" specification. */ +- err = grub_relocator_alloc_chunk_align (rel, &ch, 0x1000, +- 0x9a000 - RELOCATOR_SIZEOF (32), +- RELOCATOR_SIZEOF (32), 16, +- GRUB_RELOCATOR_PREFERENCE_LOW, +- avoid_efi_bootservices); ++ err = grub_relocator_alloc_chunk_align_safe (rel, &ch, 0x1000, 0x9a000, ++ RELOCATOR_SIZEOF (32), 16, ++ GRUB_RELOCATOR_PREFERENCE_LOW, ++ avoid_efi_bootservices); + if (err) + return err; + +@@ -125,13 +124,10 @@ grub_relocator16_boot (struct grub_relocator *rel, + grub_relocator_chunk_t ch; + + /* Put it higher than the byte it checks for A20 check. */ +- err = grub_relocator_alloc_chunk_align (rel, &ch, 0x8010, +- 0xa0000 - RELOCATOR_SIZEOF (16) +- - GRUB_RELOCATOR16_STACK_SIZE, +- RELOCATOR_SIZEOF (16) +- + GRUB_RELOCATOR16_STACK_SIZE, 16, +- GRUB_RELOCATOR_PREFERENCE_NONE, +- 0); ++ err = grub_relocator_alloc_chunk_align_safe (rel, &ch, 0x8010, 0xa0000, ++ RELOCATOR_SIZEOF (16) + ++ GRUB_RELOCATOR16_STACK_SIZE, 16, ++ GRUB_RELOCATOR_PREFERENCE_NONE, 0); + if (err) + return err; + +@@ -183,11 +179,9 @@ grub_relocator64_boot (struct grub_relocator *rel, + void *relst; + grub_relocator_chunk_t ch; + +- err = grub_relocator_alloc_chunk_align (rel, &ch, min_addr, +- max_addr - RELOCATOR_SIZEOF (64), +- RELOCATOR_SIZEOF (64), 16, +- GRUB_RELOCATOR_PREFERENCE_NONE, +- 0); ++ err = grub_relocator_alloc_chunk_align_safe (rel, &ch, min_addr, max_addr, ++ RELOCATOR_SIZEOF (64), 16, ++ GRUB_RELOCATOR_PREFERENCE_NONE, 0); + if (err) + return err; + +diff --git a/grub-core/lib/mips/relocator.c b/grub-core/lib/mips/relocator.c +index 9d5f49cb9..743b213e6 100644 +--- a/grub-core/lib/mips/relocator.c ++++ b/grub-core/lib/mips/relocator.c +@@ -120,10 +120,8 @@ grub_relocator32_boot (struct grub_relocator *rel, + unsigned i; + grub_addr_t vtarget; + +- err = grub_relocator_alloc_chunk_align (rel, &ch, 0, +- (0xffffffff - stateset_size) +- + 1, stateset_size, +- sizeof (grub_uint32_t), ++ err = grub_relocator_alloc_chunk_align (rel, &ch, 0, UP_TO_TOP32 (stateset_size), ++ stateset_size, sizeof (grub_uint32_t), + GRUB_RELOCATOR_PREFERENCE_NONE, 0); + if (err) + return err; +diff --git a/grub-core/lib/powerpc/relocator.c b/grub-core/lib/powerpc/relocator.c +index bdf2b111b..8ffb8b686 100644 +--- a/grub-core/lib/powerpc/relocator.c ++++ b/grub-core/lib/powerpc/relocator.c +@@ -115,10 +115,8 @@ grub_relocator32_boot (struct grub_relocator *rel, + unsigned i; + grub_relocator_chunk_t ch; + +- err = grub_relocator_alloc_chunk_align (rel, &ch, 0, +- (0xffffffff - stateset_size) +- + 1, stateset_size, +- sizeof (grub_uint32_t), ++ err = grub_relocator_alloc_chunk_align (rel, &ch, 0, UP_TO_TOP32 (stateset_size), ++ stateset_size, sizeof (grub_uint32_t), + GRUB_RELOCATOR_PREFERENCE_NONE, 0); + if (err) + return err; +diff --git a/grub-core/lib/x86_64/efi/relocator.c b/grub-core/lib/x86_64/efi/relocator.c +index 3caef7a40..7d200a125 100644 +--- a/grub-core/lib/x86_64/efi/relocator.c ++++ b/grub-core/lib/x86_64/efi/relocator.c +@@ -50,10 +50,9 @@ grub_relocator64_efi_boot (struct grub_relocator *rel, + * 64-bit relocator code may live above 4 GiB quite well. + * However, I do not want ask for problems. Just in case. + */ +- err = grub_relocator_alloc_chunk_align (rel, &ch, 0, +- 0x100000000 - RELOCATOR_SIZEOF (64_efi), +- RELOCATOR_SIZEOF (64_efi), 16, +- GRUB_RELOCATOR_PREFERENCE_NONE, 1); ++ err = grub_relocator_alloc_chunk_align_safe (rel, &ch, 0, 0x100000000, ++ RELOCATOR_SIZEOF (64_efi), 16, ++ GRUB_RELOCATOR_PREFERENCE_NONE, 1); + if (err) + return err; + +diff --git a/grub-core/loader/i386/linux.c b/grub-core/loader/i386/linux.c +index 02a73463a..efbb99307 100644 +--- a/grub-core/loader/i386/linux.c ++++ b/grub-core/loader/i386/linux.c +@@ -181,9 +181,8 @@ allocate_pages (grub_size_t prot_size, grub_size_t *align, + for (; err && *align + 1 > min_align; (*align)--) + { + grub_errno = GRUB_ERR_NONE; +- err = grub_relocator_alloc_chunk_align (relocator, &ch, +- 0x1000000, +- 0xffffffff & ~prot_size, ++ err = grub_relocator_alloc_chunk_align (relocator, &ch, 0x1000000, ++ UP_TO_TOP32 (prot_size), + prot_size, 1 << *align, + GRUB_RELOCATOR_PREFERENCE_LOW, + 1); +diff --git a/grub-core/loader/i386/multiboot_mbi.c b/grub-core/loader/i386/multiboot_mbi.c +index ad3cc292f..a67d9d0a8 100644 +--- a/grub-core/loader/i386/multiboot_mbi.c ++++ b/grub-core/loader/i386/multiboot_mbi.c +@@ -466,10 +466,9 @@ grub_multiboot_make_mbi (grub_uint32_t *target) + + bufsize = grub_multiboot_get_mbi_size (); + +- err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, &ch, +- 0x10000, 0xa0000 - bufsize, +- bufsize, 4, +- GRUB_RELOCATOR_PREFERENCE_NONE, 0); ++ err = grub_relocator_alloc_chunk_align_safe (grub_multiboot_relocator, &ch, ++ 0x10000, 0xa0000, bufsize, 4, ++ GRUB_RELOCATOR_PREFERENCE_NONE, 0); + if (err) + return err; + ptrorig = get_virtual_current_address (ch); +diff --git a/grub-core/loader/i386/pc/linux.c b/grub-core/loader/i386/pc/linux.c +index 31f09922b..5fed5ffdf 100644 +--- a/grub-core/loader/i386/pc/linux.c ++++ b/grub-core/loader/i386/pc/linux.c +@@ -453,10 +453,8 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), + + { + grub_relocator_chunk_t ch; +- err = grub_relocator_alloc_chunk_align (relocator, &ch, +- addr_min, addr_max - size, +- size, 0x1000, +- GRUB_RELOCATOR_PREFERENCE_HIGH, 0); ++ err = grub_relocator_alloc_chunk_align_safe (relocator, &ch, addr_min, addr_max, size, ++ 0x1000, GRUB_RELOCATOR_PREFERENCE_HIGH, 0); + if (err) + return err; + initrd_chunk = get_virtual_current_address (ch); +diff --git a/grub-core/loader/mips/linux.c b/grub-core/loader/mips/linux.c +index 7b723bf18..e4ed95921 100644 +--- a/grub-core/loader/mips/linux.c ++++ b/grub-core/loader/mips/linux.c +@@ -442,12 +442,9 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), + { + grub_relocator_chunk_t ch; + +- err = grub_relocator_alloc_chunk_align (relocator, &ch, +- (target_addr & 0x1fffffff) +- + linux_size + 0x10000, +- (0x10000000 - size), +- size, 0x10000, +- GRUB_RELOCATOR_PREFERENCE_NONE, 0); ++ err = grub_relocator_alloc_chunk_align_safe (relocator, &ch, (target_addr & 0x1fffffff) + ++ linux_size + 0x10000, 0x10000000, size, ++ 0x10000, GRUB_RELOCATOR_PREFERENCE_NONE, 0); + + if (err) + goto fail; +diff --git a/grub-core/loader/multiboot.c b/grub-core/loader/multiboot.c +index 4a98d7082..facb13f3d 100644 +--- a/grub-core/loader/multiboot.c ++++ b/grub-core/loader/multiboot.c +@@ -403,7 +403,7 @@ grub_cmd_module (grub_command_t cmd __attribute__ ((unused)), + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_align (GRUB_MULTIBOOT (relocator), &ch, +- lowest_addr, (0xffffffff - size) + 1, ++ lowest_addr, UP_TO_TOP32 (size), + size, MULTIBOOT_MOD_ALIGN, + GRUB_RELOCATOR_PREFERENCE_NONE, 1); + if (err) +diff --git a/grub-core/loader/multiboot_elfxx.c b/grub-core/loader/multiboot_elfxx.c +index cc6853692..f2318e0d1 100644 +--- a/grub-core/loader/multiboot_elfxx.c ++++ b/grub-core/loader/multiboot_elfxx.c +@@ -109,10 +109,10 @@ CONCAT(grub_multiboot_load_elf, XX) (mbi_load_data_t *mld) + if (load_size > mld->max_addr || mld->min_addr > mld->max_addr - load_size) + return grub_error (GRUB_ERR_BAD_OS, "invalid min/max address and/or load size"); + +- err = grub_relocator_alloc_chunk_align (GRUB_MULTIBOOT (relocator), &ch, +- mld->min_addr, mld->max_addr - load_size, +- load_size, mld->align ? mld->align : 1, +- mld->preference, mld->avoid_efi_boot_services); ++ err = grub_relocator_alloc_chunk_align_safe (GRUB_MULTIBOOT (relocator), &ch, ++ mld->min_addr, mld->max_addr, ++ load_size, mld->align ? mld->align : 1, ++ mld->preference, mld->avoid_efi_boot_services); + + if (err) + { +@@ -256,7 +256,7 @@ CONCAT(grub_multiboot_load_elf, XX) (mbi_load_data_t *mld) + continue; + + err = grub_relocator_alloc_chunk_align (GRUB_MULTIBOOT (relocator), &ch, 0, +- (0xffffffff - sh->sh_size) + 1, ++ UP_TO_TOP32 (sh->sh_size), + sh->sh_size, sh->sh_addralign, + GRUB_RELOCATOR_PREFERENCE_NONE, + mld->avoid_efi_boot_services); +diff --git a/grub-core/loader/multiboot_mbi2.c b/grub-core/loader/multiboot_mbi2.c +index 0efc66062..03967839c 100644 +--- a/grub-core/loader/multiboot_mbi2.c ++++ b/grub-core/loader/multiboot_mbi2.c +@@ -295,10 +295,10 @@ grub_multiboot2_load (grub_file_t file, const char *filename) + return grub_error (GRUB_ERR_BAD_OS, "invalid min/max address and/or load size"); + } + +- err = grub_relocator_alloc_chunk_align (grub_multiboot2_relocator, &ch, +- mld.min_addr, mld.max_addr - code_size, +- code_size, mld.align ? mld.align : 1, +- mld.preference, keep_bs); ++ err = grub_relocator_alloc_chunk_align_safe (grub_multiboot2_relocator, &ch, ++ mld.min_addr, mld.max_addr, ++ code_size, mld.align ? mld.align : 1, ++ mld.preference, keep_bs); + } + else + err = grub_relocator_alloc_chunk_addr (grub_multiboot2_relocator, +@@ -708,7 +708,7 @@ grub_multiboot2_make_mbi (grub_uint32_t *target) + COMPILE_TIME_ASSERT (MULTIBOOT_TAG_ALIGN % sizeof (grub_properly_aligned_t) == 0); + + err = grub_relocator_alloc_chunk_align (grub_multiboot2_relocator, &ch, +- 0, 0xffffffff - bufsize, ++ 0, UP_TO_TOP32 (bufsize), + bufsize, MULTIBOOT_TAG_ALIGN, + GRUB_RELOCATOR_PREFERENCE_NONE, 1); + if (err) +diff --git a/grub-core/loader/xnu_resume.c b/grub-core/loader/xnu_resume.c +index 8089804d4..d648ef0cd 100644 +--- a/grub-core/loader/xnu_resume.c ++++ b/grub-core/loader/xnu_resume.c +@@ -129,7 +129,7 @@ grub_xnu_resume (char *imagename) + { + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_align (grub_xnu_relocator, &ch, 0, +- (0xffffffff - hibhead.image_size) + 1, ++ UP_TO_TOP32 (hibhead.image_size), + hibhead.image_size, + GRUB_XNU_PAGESIZE, + GRUB_RELOCATOR_PREFERENCE_NONE, 0); +diff --git a/include/grub/relocator.h b/include/grub/relocator.h +index 24d8672d2..1b3bdd92a 100644 +--- a/include/grub/relocator.h ++++ b/include/grub/relocator.h +@@ -49,6 +49,35 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, + int preference, + int avoid_efi_boot_services); + ++/* ++ * Wrapper for grub_relocator_alloc_chunk_align() with purpose of ++ * protecting against integer underflow. ++ * ++ * Compare to its callee, max_addr has different meaning here. ++ * It covers entire chunk and not just start address of the chunk. ++ */ ++static inline grub_err_t ++grub_relocator_alloc_chunk_align_safe (struct grub_relocator *rel, ++ grub_relocator_chunk_t *out, ++ grub_phys_addr_t min_addr, ++ grub_phys_addr_t max_addr, ++ grub_size_t size, grub_size_t align, ++ int preference, ++ int avoid_efi_boot_services) ++{ ++ /* Sanity check and ensure following equation (max_addr - size) is safe. */ ++ if (max_addr < size || (max_addr - size) < min_addr) ++ return GRUB_ERR_OUT_OF_RANGE; ++ ++ return grub_relocator_alloc_chunk_align (rel, out, min_addr, ++ max_addr - size, ++ size, align, preference, ++ avoid_efi_boot_services); ++} ++ ++/* Top 32-bit address minus s bytes and plus 1 byte. */ ++#define UP_TO_TOP32(s) ((~(s) & 0xffffffff) + 1) ++ + #define GRUB_RELOCATOR_PREFERENCE_NONE 0 + #define GRUB_RELOCATOR_PREFERENCE_LOW 1 + #define GRUB_RELOCATOR_PREFERENCE_HIGH 2 +-- +2.26.2 + diff --git a/boot/grub2/0018-script-Remove-unused-fields-from-grub_script_functio.patch b/boot/grub2/0018-script-Remove-unused-fields-from-grub_script_functio.patch new file mode 100644 index 00000000..7b0a5e51 --- /dev/null +++ b/boot/grub2/0018-script-Remove-unused-fields-from-grub_script_functio.patch @@ -0,0 +1,37 @@ +From 73aa0776457066ee6ebc93486c3cf0e6b755d1b8 Mon Sep 17 00:00:00 2001 +From: Chris Coulson +Date: Fri, 10 Jul 2020 11:21:14 +0100 +Subject: [PATCH] script: Remove unused fields from grub_script_function + struct +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Chris Coulson +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + include/grub/script_sh.h | 5 ----- + 1 file changed, 5 deletions(-) + +diff --git a/include/grub/script_sh.h b/include/grub/script_sh.h +index 360c2be1f..b382bcf09 100644 +--- a/include/grub/script_sh.h ++++ b/include/grub/script_sh.h +@@ -359,13 +359,8 @@ struct grub_script_function + /* The script function. */ + struct grub_script *func; + +- /* The flags. */ +- unsigned flags; +- + /* The next element. */ + struct grub_script_function *next; +- +- int references; + }; + typedef struct grub_script_function *grub_script_function_t; + +-- +2.26.2 + diff --git a/boot/grub2/0019-script-Avoid-a-use-after-free-when-redefining-a-func.patch b/boot/grub2/0019-script-Avoid-a-use-after-free-when-redefining-a-func.patch new file mode 100644 index 00000000..0fd60357 --- /dev/null +++ b/boot/grub2/0019-script-Avoid-a-use-after-free-when-redefining-a-func.patch @@ -0,0 +1,113 @@ +From 26349fcf80982b4d0120b73b2836e88bcf16853c Mon Sep 17 00:00:00 2001 +From: Chris Coulson +Date: Fri, 10 Jul 2020 14:41:45 +0100 +Subject: [PATCH] script: Avoid a use-after-free when redefining a + function during execution +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Defining a new function with the same name as a previously defined +function causes the grub_script and associated resources for the +previous function to be freed. If the previous function is currently +executing when a function with the same name is defined, this results +in use-after-frees when processing subsequent commands in the original +function. + +Instead, reject a new function definition if it has the same name as +a previously defined function, and that function is currently being +executed. Although a behavioural change, this should be backwards +compatible with existing configurations because they can't be +dependent on the current behaviour without being broken. + +Fixes: CVE-2020-15706 + +Signed-off-by: Chris Coulson +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/script/execute.c | 2 ++ + grub-core/script/function.c | 16 +++++++++++++--- + grub-core/script/parser.y | 3 ++- + include/grub/script_sh.h | 2 ++ + 4 files changed, 19 insertions(+), 4 deletions(-) + +diff --git a/grub-core/script/execute.c b/grub-core/script/execute.c +index c8d6806fe..7e028e135 100644 +--- a/grub-core/script/execute.c ++++ b/grub-core/script/execute.c +@@ -838,7 +838,9 @@ grub_script_function_call (grub_script_function_t func, int argc, char **args) + old_scope = scope; + scope = &new_scope; + ++ func->executing++; + ret = grub_script_execute (func->func); ++ func->executing--; + + function_return = 0; + active_loops = loops; +diff --git a/grub-core/script/function.c b/grub-core/script/function.c +index d36655e51..3aad04bf9 100644 +--- a/grub-core/script/function.c ++++ b/grub-core/script/function.c +@@ -34,6 +34,7 @@ grub_script_function_create (struct grub_script_arg *functionname_arg, + func = (grub_script_function_t) grub_malloc (sizeof (*func)); + if (! func) + return 0; ++ func->executing = 0; + + func->name = grub_strdup (functionname_arg->str); + if (! func->name) +@@ -60,10 +61,19 @@ grub_script_function_create (struct grub_script_arg *functionname_arg, + grub_script_function_t q; + + q = *p; +- grub_script_free (q->func); +- q->func = cmd; + grub_free (func); +- func = q; ++ if (q->executing > 0) ++ { ++ grub_error (GRUB_ERR_BAD_ARGUMENT, ++ N_("attempt to redefine a function being executed")); ++ func = NULL; ++ } ++ else ++ { ++ grub_script_free (q->func); ++ q->func = cmd; ++ func = q; ++ } + } + else + { +diff --git a/grub-core/script/parser.y b/grub-core/script/parser.y +index 4f0ab8319..f80b86b6f 100644 +--- a/grub-core/script/parser.y ++++ b/grub-core/script/parser.y +@@ -289,7 +289,8 @@ function: "function" "name" + grub_script_mem_free (state->func_mem); + else { + script->children = state->scripts; +- grub_script_function_create ($2, script); ++ if (!grub_script_function_create ($2, script)) ++ grub_script_free (script); + } + + state->scripts = $3; +diff --git a/include/grub/script_sh.h b/include/grub/script_sh.h +index b382bcf09..6c48e0751 100644 +--- a/include/grub/script_sh.h ++++ b/include/grub/script_sh.h +@@ -361,6 +361,8 @@ struct grub_script_function + + /* The next element. */ + struct grub_script_function *next; ++ ++ unsigned executing; + }; + typedef struct grub_script_function *grub_script_function_t; + +-- +2.26.2 + diff --git a/boot/grub2/0020-relocator-Fix-grub_relocator_alloc_chunk_align-top-m.patch b/boot/grub2/0020-relocator-Fix-grub_relocator_alloc_chunk_align-top-m.patch new file mode 100644 index 00000000..fc518c5f --- /dev/null +++ b/boot/grub2/0020-relocator-Fix-grub_relocator_alloc_chunk_align-top-m.patch @@ -0,0 +1,49 @@ +From 06aa91f79f902752cb7e5d22ac0ea8e13bffd056 Mon Sep 17 00:00:00 2001 +From: Alexey Makhalov +Date: Fri, 17 Jul 2020 05:17:26 +0000 +Subject: [PATCH] relocator: Fix grub_relocator_alloc_chunk_align() top + memory allocation +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Current implementation of grub_relocator_alloc_chunk_align() +does not allow allocation of the top byte. + +Assuming input args are: + max_addr = 0xfffff000; + size = 0x1000; + +And this is valid. But following overflow protection will +unnecessarily move max_addr one byte down (to 0xffffefff): + if (max_addr > ~size) + max_addr = ~size; + +~size + 1 will fix the situation. In addition, check size +for non zero to do not zero max_addr. + +Signed-off-by: Alexey Makhalov +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/lib/relocator.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/grub-core/lib/relocator.c b/grub-core/lib/relocator.c +index 5847aac36..f2c1944c2 100644 +--- a/grub-core/lib/relocator.c ++++ b/grub-core/lib/relocator.c +@@ -1386,8 +1386,8 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, + }; + grub_addr_t min_addr2 = 0, max_addr2; + +- if (max_addr > ~size) +- max_addr = ~size; ++ if (size && (max_addr > ~size)) ++ max_addr = ~size + 1; + + #ifdef GRUB_MACHINE_PCBIOS + if (min_addr < 0x1000) +-- +2.26.2 + diff --git a/boot/grub2/0021-hfsplus-Fix-two-more-overflows.patch b/boot/grub2/0021-hfsplus-Fix-two-more-overflows.patch new file mode 100644 index 00000000..9ea67802 --- /dev/null +++ b/boot/grub2/0021-hfsplus-Fix-two-more-overflows.patch @@ -0,0 +1,61 @@ +From feec993673d8e13fcf22fe2389ac29222b6daebd Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Sun, 19 Jul 2020 14:43:31 -0400 +Subject: [PATCH] hfsplus: Fix two more overflows +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Both node->size and node->namelen come from the supplied filesystem, +which may be user-supplied. We can't trust them for the math unless we +know they don't overflow. Making sure they go through grub_add() or +grub_calloc() first will give us that. + +Signed-off-by: Peter Jones +Reviewed-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/fs/hfsplus.c | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/grub-core/fs/hfsplus.c b/grub-core/fs/hfsplus.c +index dae43becc..9c4e4c88c 100644 +--- a/grub-core/fs/hfsplus.c ++++ b/grub-core/fs/hfsplus.c +@@ -31,6 +31,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -475,8 +476,12 @@ grub_hfsplus_read_symlink (grub_fshelp_node_t node) + { + char *symlink; + grub_ssize_t numread; ++ grub_size_t sz = node->size; + +- symlink = grub_malloc (node->size + 1); ++ if (grub_add (sz, 1, &sz)) ++ return NULL; ++ ++ symlink = grub_malloc (sz); + if (!symlink) + return 0; + +@@ -715,8 +720,8 @@ list_nodes (void *record, void *hook_arg) + if (type == GRUB_FSHELP_UNKNOWN) + return 0; + +- filename = grub_malloc (grub_be_to_cpu16 (catkey->namelen) +- * GRUB_MAX_UTF8_PER_UTF16 + 1); ++ filename = grub_calloc (grub_be_to_cpu16 (catkey->namelen), ++ GRUB_MAX_UTF8_PER_UTF16 + 1); + if (! filename) + return 0; + +-- +2.26.2 + diff --git a/boot/grub2/0022-lvm-Fix-two-more-potential-data-dependent-alloc-over.patch b/boot/grub2/0022-lvm-Fix-two-more-potential-data-dependent-alloc-over.patch new file mode 100644 index 00000000..ad97ad0b --- /dev/null +++ b/boot/grub2/0022-lvm-Fix-two-more-potential-data-dependent-alloc-over.patch @@ -0,0 +1,116 @@ +From a1845e90fc19fb5e904091bad8a378f458798e4a Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Sun, 19 Jul 2020 15:48:20 -0400 +Subject: [PATCH] lvm: Fix two more potential data-dependent alloc + overflows +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +It appears to be possible to make a (possibly invalid) lvm PV with +a metadata size field that overflows our type when adding it to the +address we've allocated. Even if it doesn't, it may be possible to do so +with the math using the outcome of that as an operand. Check them both. + +Signed-off-by: Peter Jones +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/disk/lvm.c | 48 ++++++++++++++++++++++++++++++++++++-------- + 1 file changed, 40 insertions(+), 8 deletions(-) + +diff --git a/grub-core/disk/lvm.c b/grub-core/disk/lvm.c +index d1df640b3..139fafd47 100644 +--- a/grub-core/disk/lvm.c ++++ b/grub-core/disk/lvm.c +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + + #ifdef GRUB_UTIL + #include +@@ -102,10 +103,11 @@ grub_lvm_detect (grub_disk_t disk, + { + grub_err_t err; + grub_uint64_t mda_offset, mda_size; ++ grub_size_t ptr; + char buf[GRUB_LVM_LABEL_SIZE]; + char vg_id[GRUB_LVM_ID_STRLEN+1]; + char pv_id[GRUB_LVM_ID_STRLEN+1]; +- char *metadatabuf, *p, *q, *vgname; ++ char *metadatabuf, *p, *q, *mda_end, *vgname; + struct grub_lvm_label_header *lh = (struct grub_lvm_label_header *) buf; + struct grub_lvm_pv_header *pvh; + struct grub_lvm_disk_locn *dlocn; +@@ -205,19 +207,31 @@ grub_lvm_detect (grub_disk_t disk, + grub_le_to_cpu64 (rlocn->size) - + grub_le_to_cpu64 (mdah->size)); + } +- p = q = metadatabuf + grub_le_to_cpu64 (rlocn->offset); + +- while (*q != ' ' && q < metadatabuf + mda_size) +- q++; +- +- if (q == metadatabuf + mda_size) ++ if (grub_add ((grub_size_t)metadatabuf, ++ (grub_size_t)grub_le_to_cpu64 (rlocn->offset), ++ &ptr)) + { ++ error_parsing_metadata: + #ifdef GRUB_UTIL + grub_util_info ("error parsing metadata"); + #endif + goto fail2; + } + ++ p = q = (char *)ptr; ++ ++ if (grub_add ((grub_size_t)metadatabuf, (grub_size_t)mda_size, &ptr)) ++ goto error_parsing_metadata; ++ ++ mda_end = (char *)ptr; ++ ++ while (*q != ' ' && q < mda_end) ++ q++; ++ ++ if (q == mda_end) ++ goto error_parsing_metadata; ++ + vgname_len = q - p; + vgname = grub_malloc (vgname_len + 1); + if (!vgname) +@@ -367,8 +381,26 @@ grub_lvm_detect (grub_disk_t disk, + { + const char *iptr; + char *optr; +- lv->fullname = grub_malloc (sizeof ("lvm/") - 1 + 2 * vgname_len +- + 1 + 2 * s + 1); ++ ++ /* ++ * This is kind of hard to read with our safe (but rather ++ * baroque) math primatives, but it boils down to: ++ * ++ * sz0 = vgname_len * 2 + 1 + ++ * s * 2 + 1 + ++ * sizeof ("lvm/") - 1; ++ */ ++ grub_size_t sz0 = vgname_len, sz1 = s; ++ ++ if (grub_mul (sz0, 2, &sz0) || ++ grub_add (sz0, 1, &sz0) || ++ grub_mul (sz1, 2, &sz1) || ++ grub_add (sz1, 1, &sz1) || ++ grub_add (sz0, sz1, &sz0) || ++ grub_add (sz0, sizeof ("lvm/") - 1, &sz0)) ++ goto lvs_fail; ++ ++ lv->fullname = grub_malloc (sz0); + if (!lv->fullname) + goto lvs_fail; + +-- +2.26.2 + diff --git a/boot/grub2/0023-emu-Make-grub_free-NULL-safe.patch b/boot/grub2/0023-emu-Make-grub_free-NULL-safe.patch new file mode 100644 index 00000000..f30e56a8 --- /dev/null +++ b/boot/grub2/0023-emu-Make-grub_free-NULL-safe.patch @@ -0,0 +1,38 @@ +From 320e86747a32e4d46d24ee4b64493741c161da50 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Sun, 19 Jul 2020 16:08:08 -0400 +Subject: [PATCH] emu: Make grub_free(NULL) safe +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The grub_free() implementation in grub-core/kern/mm.c safely handles +NULL pointers, and code at many places depends on this. We don't know +that the same is true on all host OSes, so we need to handle the same +behavior in grub-emu's implementation. + +Signed-off-by: Peter Jones +Reviewed-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/kern/emu/mm.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/grub-core/kern/emu/mm.c b/grub-core/kern/emu/mm.c +index 145b01d37..4d1046a21 100644 +--- a/grub-core/kern/emu/mm.c ++++ b/grub-core/kern/emu/mm.c +@@ -60,7 +60,8 @@ grub_zalloc (grub_size_t size) + void + grub_free (void *ptr) + { +- free (ptr); ++ if (ptr) ++ free (ptr); + } + + void * +-- +2.26.2 + diff --git a/boot/grub2/0024-efi-Fix-some-malformed-device-path-arithmetic-errors.patch b/boot/grub2/0024-efi-Fix-some-malformed-device-path-arithmetic-errors.patch new file mode 100644 index 00000000..48b5b891 --- /dev/null +++ b/boot/grub2/0024-efi-Fix-some-malformed-device-path-arithmetic-errors.patch @@ -0,0 +1,239 @@ +From c330aa099a38bc5c4d3066954fe35767cc06adb1 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Sun, 19 Jul 2020 16:53:27 -0400 +Subject: [PATCH] efi: Fix some malformed device path arithmetic errors +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Several places we take the length of a device path and subtract 4 from +it, without ever checking that it's >= 4. There are also cases where +this kind of malformation will result in unpredictable iteration, +including treating the length from one dp node as the type in the next +node. These are all errors, no matter where the data comes from. + +This patch adds a checking macro, GRUB_EFI_DEVICE_PATH_VALID(), which +can be used in several places, and makes GRUB_EFI_NEXT_DEVICE_PATH() +return NULL and GRUB_EFI_END_ENTIRE_DEVICE_PATH() evaluate as true when +the length is too small. Additionally, it makes several places in the +code check for and return errors in these cases. + +Signed-off-by: Peter Jones +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/kern/efi/efi.c | 64 +++++++++++++++++++++++++----- + grub-core/loader/efi/chainloader.c | 13 +++++- + grub-core/loader/i386/xnu.c | 9 +++-- + include/grub/efi/api.h | 14 ++++--- + 4 files changed, 79 insertions(+), 21 deletions(-) + +diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c +index dc31caa21..c97969a65 100644 +--- a/grub-core/kern/efi/efi.c ++++ b/grub-core/kern/efi/efi.c +@@ -332,7 +332,7 @@ grub_efi_get_filename (grub_efi_device_path_t *dp0) + + dp = dp0; + +- while (1) ++ while (dp) + { + grub_efi_uint8_t type = GRUB_EFI_DEVICE_PATH_TYPE (dp); + grub_efi_uint8_t subtype = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp); +@@ -342,9 +342,15 @@ grub_efi_get_filename (grub_efi_device_path_t *dp0) + if (type == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE + && subtype == GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE) + { +- grub_efi_uint16_t len; +- len = ((GRUB_EFI_DEVICE_PATH_LENGTH (dp) - 4) +- / sizeof (grub_efi_char16_t)); ++ grub_efi_uint16_t len = GRUB_EFI_DEVICE_PATH_LENGTH (dp); ++ ++ if (len < 4) ++ { ++ grub_error (GRUB_ERR_OUT_OF_RANGE, ++ "malformed EFI Device Path node has length=%d", len); ++ return NULL; ++ } ++ len = (len - 4) / sizeof (grub_efi_char16_t); + filesize += GRUB_MAX_UTF8_PER_UTF16 * len + 2; + } + +@@ -360,7 +366,7 @@ grub_efi_get_filename (grub_efi_device_path_t *dp0) + if (!name) + return NULL; + +- while (1) ++ while (dp) + { + grub_efi_uint8_t type = GRUB_EFI_DEVICE_PATH_TYPE (dp); + grub_efi_uint8_t subtype = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp); +@@ -376,8 +382,15 @@ grub_efi_get_filename (grub_efi_device_path_t *dp0) + + *p++ = '/'; + +- len = ((GRUB_EFI_DEVICE_PATH_LENGTH (dp) - 4) +- / sizeof (grub_efi_char16_t)); ++ len = GRUB_EFI_DEVICE_PATH_LENGTH (dp); ++ if (len < 4) ++ { ++ grub_error (GRUB_ERR_OUT_OF_RANGE, ++ "malformed EFI Device Path node has length=%d", len); ++ return NULL; ++ } ++ ++ len = (len - 4) / sizeof (grub_efi_char16_t); + fp = (grub_efi_file_path_device_path_t *) dp; + /* According to EFI spec Path Name is NULL terminated */ + while (len > 0 && fp->path_name[len - 1] == 0) +@@ -452,7 +465,26 @@ grub_efi_duplicate_device_path (const grub_efi_device_path_t *dp) + ; + p = GRUB_EFI_NEXT_DEVICE_PATH (p)) + { +- total_size += GRUB_EFI_DEVICE_PATH_LENGTH (p); ++ grub_size_t len = GRUB_EFI_DEVICE_PATH_LENGTH (p); ++ ++ /* ++ * In the event that we find a node that's completely garbage, for ++ * example if we get to 0x7f 0x01 0x02 0x00 ... (EndInstance with a size ++ * of 2), GRUB_EFI_END_ENTIRE_DEVICE_PATH() will be true and ++ * GRUB_EFI_NEXT_DEVICE_PATH() will return NULL, so we won't continue, ++ * and neither should our consumers, but there won't be any error raised ++ * even though the device path is junk. ++ * ++ * This keeps us from passing junk down back to our caller. ++ */ ++ if (len < 4) ++ { ++ grub_error (GRUB_ERR_OUT_OF_RANGE, ++ "malformed EFI Device Path node has length=%d", len); ++ return NULL; ++ } ++ ++ total_size += len; + if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (p)) + break; + } +@@ -497,7 +529,7 @@ dump_vendor_path (const char *type, grub_efi_vendor_device_path_t *vendor) + void + grub_efi_print_device_path (grub_efi_device_path_t *dp) + { +- while (1) ++ while (GRUB_EFI_DEVICE_PATH_VALID (dp)) + { + grub_efi_uint8_t type = GRUB_EFI_DEVICE_PATH_TYPE (dp); + grub_efi_uint8_t subtype = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp); +@@ -909,7 +941,10 @@ grub_efi_compare_device_paths (const grub_efi_device_path_t *dp1, + /* Return non-zero. */ + return 1; + +- while (1) ++ if (dp1 == dp2) ++ return 0; ++ ++ while (GRUB_EFI_DEVICE_PATH_VALID (dp1) && GRUB_EFI_DEVICE_PATH_VALID (dp2)) + { + grub_efi_uint8_t type1, type2; + grub_efi_uint8_t subtype1, subtype2; +@@ -945,5 +980,14 @@ grub_efi_compare_device_paths (const grub_efi_device_path_t *dp1, + dp2 = (grub_efi_device_path_t *) ((char *) dp2 + len2); + } + ++ /* ++ * There's no "right" answer here, but we probably don't want to call a valid ++ * dp and an invalid dp equal, so pick one way or the other. ++ */ ++ if (GRUB_EFI_DEVICE_PATH_VALID (dp1) && !GRUB_EFI_DEVICE_PATH_VALID (dp2)) ++ return 1; ++ else if (!GRUB_EFI_DEVICE_PATH_VALID (dp1) && GRUB_EFI_DEVICE_PATH_VALID (dp2)) ++ return -1; ++ + return 0; + } +diff --git a/grub-core/loader/efi/chainloader.c b/grub-core/loader/efi/chainloader.c +index daf8c6b54..a8d7b9155 100644 +--- a/grub-core/loader/efi/chainloader.c ++++ b/grub-core/loader/efi/chainloader.c +@@ -156,9 +156,18 @@ make_file_path (grub_efi_device_path_t *dp, const char *filename) + + size = 0; + d = dp; +- while (1) ++ while (d) + { +- size += GRUB_EFI_DEVICE_PATH_LENGTH (d); ++ grub_size_t len = GRUB_EFI_DEVICE_PATH_LENGTH (d); ++ ++ if (len < 4) ++ { ++ grub_error (GRUB_ERR_OUT_OF_RANGE, ++ "malformed EFI Device Path node has length=%d", len); ++ return NULL; ++ } ++ ++ size += len; + if ((GRUB_EFI_END_ENTIRE_DEVICE_PATH (d))) + break; + d = GRUB_EFI_NEXT_DEVICE_PATH (d); +diff --git a/grub-core/loader/i386/xnu.c b/grub-core/loader/i386/xnu.c +index e9e119259..a70093607 100644 +--- a/grub-core/loader/i386/xnu.c ++++ b/grub-core/loader/i386/xnu.c +@@ -515,14 +515,15 @@ grub_cmd_devprop_load (grub_command_t cmd __attribute__ ((unused)), + + devhead = buf; + buf = devhead + 1; +- dpstart = buf; ++ dp = dpstart = buf; + +- do ++ while (GRUB_EFI_DEVICE_PATH_VALID (dp) && buf < bufend) + { +- dp = buf; + buf = (char *) buf + GRUB_EFI_DEVICE_PATH_LENGTH (dp); ++ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp)) ++ break; ++ dp = buf; + } +- while (!GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp) && buf < bufend); + + dev = grub_xnu_devprop_add_device (dpstart, (char *) buf + - (char *) dpstart); +diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h +index addcbfa8f..cf1355a8c 100644 +--- a/include/grub/efi/api.h ++++ b/include/grub/efi/api.h +@@ -625,6 +625,7 @@ typedef struct grub_efi_device_path grub_efi_device_path_protocol_t; + #define GRUB_EFI_DEVICE_PATH_TYPE(dp) ((dp)->type & 0x7f) + #define GRUB_EFI_DEVICE_PATH_SUBTYPE(dp) ((dp)->subtype) + #define GRUB_EFI_DEVICE_PATH_LENGTH(dp) ((dp)->length) ++#define GRUB_EFI_DEVICE_PATH_VALID(dp) ((dp) != NULL && GRUB_EFI_DEVICE_PATH_LENGTH (dp) >= 4) + + /* The End of Device Path nodes. */ + #define GRUB_EFI_END_DEVICE_PATH_TYPE (0xff & 0x7f) +@@ -633,13 +634,16 @@ typedef struct grub_efi_device_path grub_efi_device_path_protocol_t; + #define GRUB_EFI_END_THIS_DEVICE_PATH_SUBTYPE 0x01 + + #define GRUB_EFI_END_ENTIRE_DEVICE_PATH(dp) \ +- (GRUB_EFI_DEVICE_PATH_TYPE (dp) == GRUB_EFI_END_DEVICE_PATH_TYPE \ +- && (GRUB_EFI_DEVICE_PATH_SUBTYPE (dp) \ +- == GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE)) ++ (!GRUB_EFI_DEVICE_PATH_VALID (dp) || \ ++ (GRUB_EFI_DEVICE_PATH_TYPE (dp) == GRUB_EFI_END_DEVICE_PATH_TYPE \ ++ && (GRUB_EFI_DEVICE_PATH_SUBTYPE (dp) \ ++ == GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE))) + + #define GRUB_EFI_NEXT_DEVICE_PATH(dp) \ +- ((grub_efi_device_path_t *) ((char *) (dp) \ +- + GRUB_EFI_DEVICE_PATH_LENGTH (dp))) ++ (GRUB_EFI_DEVICE_PATH_VALID (dp) \ ++ ? ((grub_efi_device_path_t *) \ ++ ((char *) (dp) + GRUB_EFI_DEVICE_PATH_LENGTH (dp))) \ ++ : NULL) + + /* Hardware Device Path. */ + #define GRUB_EFI_HARDWARE_DEVICE_PATH_TYPE 1 +-- +2.26.2 + diff --git a/boot/grub2/0025-efi-chainloader-Propagate-errors-from-copy_file_path.patch b/boot/grub2/0025-efi-chainloader-Propagate-errors-from-copy_file_path.patch new file mode 100644 index 00000000..eb3e0f0e --- /dev/null +++ b/boot/grub2/0025-efi-chainloader-Propagate-errors-from-copy_file_path.patch @@ -0,0 +1,78 @@ +From fb55bc37dd510911df4eaf649da939f5fafdc7ce Mon Sep 17 00:00:00 2001 +From: Daniel Kiper +Date: Wed, 29 Jul 2020 13:38:31 +0200 +Subject: [PATCH] efi/chainloader: Propagate errors from copy_file_path() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Without any error propagated to the caller, make_file_path() +would then try to advance the invalid device path node with +GRUB_EFI_NEXT_DEVICE_PATH(), which would fail, returning a NULL +pointer that would subsequently be dereferenced. Hence, propagate +errors from copy_file_path(). + +Signed-off-by: Chris Coulson +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/loader/efi/chainloader.c | 19 +++++++++++++------ + 1 file changed, 13 insertions(+), 6 deletions(-) + +diff --git a/grub-core/loader/efi/chainloader.c b/grub-core/loader/efi/chainloader.c +index a8d7b9155..7b31c3fb9 100644 +--- a/grub-core/loader/efi/chainloader.c ++++ b/grub-core/loader/efi/chainloader.c +@@ -106,7 +106,7 @@ grub_chainloader_boot (void) + return grub_errno; + } + +-static void ++static grub_err_t + copy_file_path (grub_efi_file_path_device_path_t *fp, + const char *str, grub_efi_uint16_t len) + { +@@ -118,7 +118,7 @@ copy_file_path (grub_efi_file_path_device_path_t *fp, + + path_name = grub_calloc (len, GRUB_MAX_UTF16_PER_UTF8 * sizeof (*path_name)); + if (!path_name) +- return; ++ return grub_error (GRUB_ERR_OUT_OF_MEMORY, "failed to allocate path buffer"); + + size = grub_utf8_to_utf16 (path_name, len * GRUB_MAX_UTF16_PER_UTF8, + (const grub_uint8_t *) str, len, 0); +@@ -131,6 +131,7 @@ copy_file_path (grub_efi_file_path_device_path_t *fp, + fp->path_name[size++] = '\0'; + fp->header.length = size * sizeof (grub_efi_char16_t) + sizeof (*fp); + grub_free (path_name); ++ return GRUB_ERR_NONE; + } + + static grub_efi_device_path_t * +@@ -189,13 +190,19 @@ make_file_path (grub_efi_device_path_t *dp, const char *filename) + d = (grub_efi_device_path_t *) ((char *) file_path + + ((char *) d - (char *) dp)); + grub_efi_print_device_path (d); +- copy_file_path ((grub_efi_file_path_device_path_t *) d, +- dir_start, dir_end - dir_start); ++ if (copy_file_path ((grub_efi_file_path_device_path_t *) d, ++ dir_start, dir_end - dir_start) != GRUB_ERR_NONE) ++ { ++ fail: ++ grub_free (file_path); ++ return 0; ++ } + + /* Fill the file path for the file. */ + d = GRUB_EFI_NEXT_DEVICE_PATH (d); +- copy_file_path ((grub_efi_file_path_device_path_t *) d, +- dir_end + 1, grub_strlen (dir_end + 1)); ++ if (copy_file_path ((grub_efi_file_path_device_path_t *) d, ++ dir_end + 1, grub_strlen (dir_end + 1)) != GRUB_ERR_NONE) ++ goto fail; + + /* Fill the end of device path nodes. */ + d = GRUB_EFI_NEXT_DEVICE_PATH (d); +-- +2.26.2 + diff --git a/boot/grub2/0026-efi-Fix-use-after-free-in-halt-reboot-path.patch b/boot/grub2/0026-efi-Fix-use-after-free-in-halt-reboot-path.patch new file mode 100644 index 00000000..75dd05d4 --- /dev/null +++ b/boot/grub2/0026-efi-Fix-use-after-free-in-halt-reboot-path.patch @@ -0,0 +1,183 @@ +From 8a6d6299efcffd14c1130942195e6c0d9b50cacd Mon Sep 17 00:00:00 2001 +From: Alexey Makhalov +Date: Mon, 20 Jul 2020 23:03:05 +0000 +Subject: [PATCH] efi: Fix use-after-free in halt/reboot path +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +commit 92bfc33db984 ("efi: Free malloc regions on exit") +introduced memory freeing in grub_efi_fini(), which is +used not only by exit path but by halt/reboot one as well. +As result of memory freeing, code and data regions used by +modules, such as halt, reboot, acpi (used by halt) also got +freed. After return to module code, CPU executes, filled +by UEFI firmware (tested with edk2), 0xAFAFAFAF pattern as +a code. Which leads to #UD exception later. + +grub> halt +!!!! X64 Exception Type - 06(#UD - Invalid Opcode) CPU Apic ID - 00000000 !!!! +RIP - 0000000003F4EC28, CS - 0000000000000038, RFLAGS - 0000000000200246 +RAX - 0000000000000000, RCX - 00000000061DA188, RDX - 0A74C0854DC35D41 +RBX - 0000000003E10E08, RSP - 0000000007F0F860, RBP - 0000000000000000 +RSI - 00000000064DB768, RDI - 000000000832C5C3 +R8 - 0000000000000002, R9 - 0000000000000000, R10 - 00000000061E2E52 +R11 - 0000000000000020, R12 - 0000000003EE5C1F, R13 - 00000000061E0FF4 +R14 - 0000000003E10D80, R15 - 00000000061E2F60 +DS - 0000000000000030, ES - 0000000000000030, FS - 0000000000000030 +GS - 0000000000000030, SS - 0000000000000030 +CR0 - 0000000080010033, CR2 - 0000000000000000, CR3 - 0000000007C01000 +CR4 - 0000000000000668, CR8 - 0000000000000000 +DR0 - 0000000000000000, DR1 - 0000000000000000, DR2 - 0000000000000000 +DR3 - 0000000000000000, DR6 - 00000000FFFF0FF0, DR7 - 0000000000000400 +GDTR - 00000000079EEA98 0000000000000047, LDTR - 0000000000000000 +IDTR - 0000000007598018 0000000000000FFF, TR - 0000000000000000 +FXSAVE_STATE - 0000000007F0F4C0 + +Proposal here is to continue to free allocated memory for +exit boot services path but keep it for halt/reboot path +as it won't be much security concern here. +Introduced GRUB_LOADER_FLAG_EFI_KEEP_ALLOCATED_MEMORY +loader flag to be used by efi halt/reboot path. + +Signed-off-by: Alexey Makhalov +Reviewed-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/kern/arm/efi/init.c | 3 +++ + grub-core/kern/arm64/efi/init.c | 3 +++ + grub-core/kern/efi/efi.c | 3 ++- + grub-core/kern/efi/init.c | 1 - + grub-core/kern/i386/efi/init.c | 9 +++++++-- + grub-core/kern/ia64/efi/init.c | 9 +++++++-- + grub-core/kern/riscv/efi/init.c | 3 +++ + grub-core/lib/efi/halt.c | 3 ++- + include/grub/loader.h | 1 + + 9 files changed, 28 insertions(+), 7 deletions(-) + +diff --git a/grub-core/kern/arm/efi/init.c b/grub-core/kern/arm/efi/init.c +index 06df60e2f..40c3b467f 100644 +--- a/grub-core/kern/arm/efi/init.c ++++ b/grub-core/kern/arm/efi/init.c +@@ -71,4 +71,7 @@ grub_machine_fini (int flags) + efi_call_1 (b->close_event, tmr_evt); + + grub_efi_fini (); ++ ++ if (!(flags & GRUB_LOADER_FLAG_EFI_KEEP_ALLOCATED_MEMORY)) ++ grub_efi_memory_fini (); + } +diff --git a/grub-core/kern/arm64/efi/init.c b/grub-core/kern/arm64/efi/init.c +index 6224999ec..5010caefd 100644 +--- a/grub-core/kern/arm64/efi/init.c ++++ b/grub-core/kern/arm64/efi/init.c +@@ -57,4 +57,7 @@ grub_machine_fini (int flags) + return; + + grub_efi_fini (); ++ ++ if (!(flags & GRUB_LOADER_FLAG_EFI_KEEP_ALLOCATED_MEMORY)) ++ grub_efi_memory_fini (); + } +diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c +index c97969a65..9cfd88d77 100644 +--- a/grub-core/kern/efi/efi.c ++++ b/grub-core/kern/efi/efi.c +@@ -157,7 +157,8 @@ grub_efi_get_loaded_image (grub_efi_handle_t image_handle) + void + grub_reboot (void) + { +- grub_machine_fini (GRUB_LOADER_FLAG_NORETURN); ++ grub_machine_fini (GRUB_LOADER_FLAG_NORETURN | ++ GRUB_LOADER_FLAG_EFI_KEEP_ALLOCATED_MEMORY); + efi_call_4 (grub_efi_system_table->runtime_services->reset_system, + GRUB_EFI_RESET_COLD, GRUB_EFI_SUCCESS, 0, NULL); + for (;;) ; +diff --git a/grub-core/kern/efi/init.c b/grub-core/kern/efi/init.c +index 3dfdf2d22..2c31847bf 100644 +--- a/grub-core/kern/efi/init.c ++++ b/grub-core/kern/efi/init.c +@@ -80,5 +80,4 @@ grub_efi_fini (void) + { + grub_efidisk_fini (); + grub_console_fini (); +- grub_efi_memory_fini (); + } +diff --git a/grub-core/kern/i386/efi/init.c b/grub-core/kern/i386/efi/init.c +index da499aba0..deb2eacd8 100644 +--- a/grub-core/kern/i386/efi/init.c ++++ b/grub-core/kern/i386/efi/init.c +@@ -39,6 +39,11 @@ grub_machine_init (void) + void + grub_machine_fini (int flags) + { +- if (flags & GRUB_LOADER_FLAG_NORETURN) +- grub_efi_fini (); ++ if (!(flags & GRUB_LOADER_FLAG_NORETURN)) ++ return; ++ ++ grub_efi_fini (); ++ ++ if (!(flags & GRUB_LOADER_FLAG_EFI_KEEP_ALLOCATED_MEMORY)) ++ grub_efi_memory_fini (); + } +diff --git a/grub-core/kern/ia64/efi/init.c b/grub-core/kern/ia64/efi/init.c +index b5ecbd091..f1965571b 100644 +--- a/grub-core/kern/ia64/efi/init.c ++++ b/grub-core/kern/ia64/efi/init.c +@@ -70,6 +70,11 @@ grub_machine_init (void) + void + grub_machine_fini (int flags) + { +- if (flags & GRUB_LOADER_FLAG_NORETURN) +- grub_efi_fini (); ++ if (!(flags & GRUB_LOADER_FLAG_NORETURN)) ++ return; ++ ++ grub_efi_fini (); ++ ++ if (!(flags & GRUB_LOADER_FLAG_EFI_KEEP_ALLOCATED_MEMORY)) ++ grub_efi_memory_fini (); + } +diff --git a/grub-core/kern/riscv/efi/init.c b/grub-core/kern/riscv/efi/init.c +index 7eb1969d0..38795fe67 100644 +--- a/grub-core/kern/riscv/efi/init.c ++++ b/grub-core/kern/riscv/efi/init.c +@@ -73,4 +73,7 @@ grub_machine_fini (int flags) + return; + + grub_efi_fini (); ++ ++ if (!(flags & GRUB_LOADER_FLAG_EFI_KEEP_ALLOCATED_MEMORY)) ++ grub_efi_memory_fini (); + } +diff --git a/grub-core/lib/efi/halt.c b/grub-core/lib/efi/halt.c +index 5859f0498..29d413641 100644 +--- a/grub-core/lib/efi/halt.c ++++ b/grub-core/lib/efi/halt.c +@@ -28,7 +28,8 @@ + void + grub_halt (void) + { +- grub_machine_fini (GRUB_LOADER_FLAG_NORETURN); ++ grub_machine_fini (GRUB_LOADER_FLAG_NORETURN | ++ GRUB_LOADER_FLAG_EFI_KEEP_ALLOCATED_MEMORY); + #if !defined(__ia64__) && !defined(__arm__) && !defined(__aarch64__) && \ + !defined(__riscv) + grub_acpi_halt (); +diff --git a/include/grub/loader.h b/include/grub/loader.h +index 7f82a499f..b20864282 100644 +--- a/include/grub/loader.h ++++ b/include/grub/loader.h +@@ -33,6 +33,7 @@ enum + { + GRUB_LOADER_FLAG_NORETURN = 1, + GRUB_LOADER_FLAG_PXE_NOT_UNLOAD = 2, ++ GRUB_LOADER_FLAG_EFI_KEEP_ALLOCATED_MEMORY = 4, + }; + + void EXPORT_FUNC (grub_loader_set) (grub_err_t (*boot) (void), +-- +2.26.2 + diff --git a/boot/grub2/0027-loader-linux-Avoid-overflow-on-initrd-size-calculati.patch b/boot/grub2/0027-loader-linux-Avoid-overflow-on-initrd-size-calculati.patch new file mode 100644 index 00000000..823f2055 --- /dev/null +++ b/boot/grub2/0027-loader-linux-Avoid-overflow-on-initrd-size-calculati.patch @@ -0,0 +1,32 @@ +From a2a7464e9f10a677d6f91e1c4fa527d084c22e7c Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Fri, 24 Jul 2020 13:57:27 -0400 +Subject: [PATCH] loader/linux: Avoid overflow on initrd size calculation +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Peter Jones +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/loader/linux.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/grub-core/loader/linux.c b/grub-core/loader/linux.c +index 471b214d6..4cd8c20c7 100644 +--- a/grub-core/loader/linux.c ++++ b/grub-core/loader/linux.c +@@ -151,8 +151,7 @@ grub_initrd_init (int argc, char *argv[], + initrd_ctx->nfiles = 0; + initrd_ctx->components = 0; + +- initrd_ctx->components = grub_zalloc (argc +- * sizeof (initrd_ctx->components[0])); ++ initrd_ctx->components = grub_calloc (argc, sizeof (initrd_ctx->components[0])); + if (!initrd_ctx->components) + return grub_errno; + +-- +2.26.2 + diff --git a/boot/grub2/0028-linux-Fix-integer-overflows-in-initrd-size-handling.patch b/boot/grub2/0028-linux-Fix-integer-overflows-in-initrd-size-handling.patch new file mode 100644 index 00000000..bf6590d8 --- /dev/null +++ b/boot/grub2/0028-linux-Fix-integer-overflows-in-initrd-size-handling.patch @@ -0,0 +1,173 @@ +From 0367e7d1b9bac3a78608a672bf6e4ace6a28b964 Mon Sep 17 00:00:00 2001 +From: Colin Watson +Date: Sat, 25 Jul 2020 12:15:37 +0100 +Subject: [PATCH] linux: Fix integer overflows in initrd size handling +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +These could be triggered by a crafted filesystem with very large files. + +Fixes: CVE-2020-15707 + +Signed-off-by: Colin Watson +Reviewed-by: Jan Setje-Eilers +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/loader/linux.c | 74 +++++++++++++++++++++++++++++----------- + 1 file changed, 54 insertions(+), 20 deletions(-) + +diff --git a/grub-core/loader/linux.c b/grub-core/loader/linux.c +index 4cd8c20c7..3fe390f17 100644 +--- a/grub-core/loader/linux.c ++++ b/grub-core/loader/linux.c +@@ -4,6 +4,7 @@ + #include + #include + #include ++#include + + struct newc_head + { +@@ -98,13 +99,13 @@ free_dir (struct dir *root) + grub_free (root); + } + +-static grub_size_t ++static grub_err_t + insert_dir (const char *name, struct dir **root, +- grub_uint8_t *ptr) ++ grub_uint8_t *ptr, grub_size_t *size) + { + struct dir *cur, **head = root; + const char *cb, *ce = name; +- grub_size_t size = 0; ++ *size = 0; + while (1) + { + for (cb = ce; *cb == '/'; cb++); +@@ -130,14 +131,22 @@ insert_dir (const char *name, struct dir **root, + ptr = make_header (ptr, name, ce - name, + 040777, 0); + } +- size += ALIGN_UP ((ce - (char *) name) +- + sizeof (struct newc_head), 4); ++ if (grub_add (*size, ++ ALIGN_UP ((ce - (char *) name) ++ + sizeof (struct newc_head), 4), ++ size)) ++ { ++ grub_error (GRUB_ERR_OUT_OF_RANGE, N_("overflow is detected")); ++ grub_free (n->name); ++ grub_free (n); ++ return grub_errno; ++ } + *head = n; + cur = n; + } + root = &cur->next; + } +- return size; ++ return GRUB_ERR_NONE; + } + + grub_err_t +@@ -172,26 +181,33 @@ grub_initrd_init (int argc, char *argv[], + eptr = grub_strchr (ptr, ':'); + if (eptr) + { ++ grub_size_t dir_size, name_len; ++ + initrd_ctx->components[i].newc_name = grub_strndup (ptr, eptr - ptr); +- if (!initrd_ctx->components[i].newc_name) ++ if (!initrd_ctx->components[i].newc_name || ++ insert_dir (initrd_ctx->components[i].newc_name, &root, 0, ++ &dir_size)) + { + grub_initrd_close (initrd_ctx); + return grub_errno; + } +- initrd_ctx->size +- += ALIGN_UP (sizeof (struct newc_head) +- + grub_strlen (initrd_ctx->components[i].newc_name), +- 4); +- initrd_ctx->size += insert_dir (initrd_ctx->components[i].newc_name, +- &root, 0); ++ name_len = grub_strlen (initrd_ctx->components[i].newc_name); ++ if (grub_add (initrd_ctx->size, ++ ALIGN_UP (sizeof (struct newc_head) + name_len, 4), ++ &initrd_ctx->size) || ++ grub_add (initrd_ctx->size, dir_size, &initrd_ctx->size)) ++ goto overflow; + newc = 1; + fname = eptr + 1; + } + } + else if (newc) + { +- initrd_ctx->size += ALIGN_UP (sizeof (struct newc_head) +- + sizeof ("TRAILER!!!") - 1, 4); ++ if (grub_add (initrd_ctx->size, ++ ALIGN_UP (sizeof (struct newc_head) ++ + sizeof ("TRAILER!!!") - 1, 4), ++ &initrd_ctx->size)) ++ goto overflow; + free_dir (root); + root = 0; + newc = 0; +@@ -207,19 +223,29 @@ grub_initrd_init (int argc, char *argv[], + initrd_ctx->nfiles++; + initrd_ctx->components[i].size + = grub_file_size (initrd_ctx->components[i].file); +- initrd_ctx->size += initrd_ctx->components[i].size; ++ if (grub_add (initrd_ctx->size, initrd_ctx->components[i].size, ++ &initrd_ctx->size)) ++ goto overflow; + } + + if (newc) + { + initrd_ctx->size = ALIGN_UP (initrd_ctx->size, 4); +- initrd_ctx->size += ALIGN_UP (sizeof (struct newc_head) +- + sizeof ("TRAILER!!!") - 1, 4); ++ if (grub_add (initrd_ctx->size, ++ ALIGN_UP (sizeof (struct newc_head) ++ + sizeof ("TRAILER!!!") - 1, 4), ++ &initrd_ctx->size)) ++ goto overflow; + free_dir (root); + root = 0; + } + + return GRUB_ERR_NONE; ++ ++ overflow: ++ free_dir (root); ++ grub_initrd_close (initrd_ctx); ++ return grub_error (GRUB_ERR_OUT_OF_RANGE, N_("overflow is detected")); + } + + grub_size_t +@@ -260,8 +286,16 @@ grub_initrd_load (struct grub_linux_initrd_context *initrd_ctx, + + if (initrd_ctx->components[i].newc_name) + { +- ptr += insert_dir (initrd_ctx->components[i].newc_name, +- &root, ptr); ++ grub_size_t dir_size; ++ ++ if (insert_dir (initrd_ctx->components[i].newc_name, &root, ptr, ++ &dir_size)) ++ { ++ free_dir (root); ++ grub_initrd_close (initrd_ctx); ++ return grub_errno; ++ } ++ ptr += dir_size; + ptr = make_header (ptr, initrd_ctx->components[i].newc_name, + grub_strlen (initrd_ctx->components[i].newc_name), + 0100777, +-- +2.26.2 + diff --git a/boot/grub2/0029-efi-Make-shim_lock-GUID-and-protocol-type-public.patch b/boot/grub2/0029-efi-Make-shim_lock-GUID-and-protocol-type-public.patch new file mode 100644 index 00000000..ec1f6236 --- /dev/null +++ b/boot/grub2/0029-efi-Make-shim_lock-GUID-and-protocol-type-public.patch @@ -0,0 +1,97 @@ +From f76a27996c34900f2c369a8a0d6ac72ae2faa988 Mon Sep 17 00:00:00 2001 +From: Daniel Kiper +Date: Thu, 3 Dec 2020 16:01:45 +0100 +Subject: [PATCH] efi: Make shim_lock GUID and protocol type public + +The GUID will be used to properly detect and report UEFI Secure Boot +status to the x86 Linux kernel. The functionality will be added by +subsequent patches. The shim_lock protocol type is made public for +completeness. + +Additionally, fix formatting of four preceding GUIDs. + +Signed-off-by: Daniel Kiper +Signed-off-by: Marco A Benatto +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/commands/efi/shim_lock.c | 12 ------------ + include/grub/efi/api.h | 19 +++++++++++++++---- + 2 files changed, 15 insertions(+), 16 deletions(-) + +diff --git a/grub-core/commands/efi/shim_lock.c b/grub-core/commands/efi/shim_lock.c +index 764098c..d8f52d7 100644 +--- a/grub-core/commands/efi/shim_lock.c ++++ b/grub-core/commands/efi/shim_lock.c +@@ -27,18 +27,6 @@ + + GRUB_MOD_LICENSE ("GPLv3+"); + +-#define GRUB_EFI_SHIM_LOCK_GUID \ +- { 0x605dab50, 0xe046, 0x4300, \ +- { 0xab, 0xb6, 0x3d, 0xd8, 0x10, 0xdd, 0x8b, 0x23 } \ +- } +- +-struct grub_efi_shim_lock_protocol +-{ +- grub_efi_status_t +- (*verify) (void *buffer, grub_uint32_t size); +-}; +-typedef struct grub_efi_shim_lock_protocol grub_efi_shim_lock_protocol_t; +- + static grub_efi_guid_t shim_lock_guid = GRUB_EFI_SHIM_LOCK_GUID; + static grub_efi_shim_lock_protocol_t *sl; + +diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h +index cf1355a..13e5715 100644 +--- a/include/grub/efi/api.h ++++ b/include/grub/efi/api.h +@@ -316,22 +316,27 @@ + + #define GRUB_EFI_SAL_TABLE_GUID \ + { 0xeb9d2d32, 0x2d88, 0x11d3, \ +- { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } \ ++ { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } \ + } + + #define GRUB_EFI_HCDP_TABLE_GUID \ + { 0xf951938d, 0x620b, 0x42ef, \ +- { 0x82, 0x79, 0xa8, 0x4b, 0x79, 0x61, 0x78, 0x98 } \ ++ { 0x82, 0x79, 0xa8, 0x4b, 0x79, 0x61, 0x78, 0x98 } \ + } + + #define GRUB_EFI_DEVICE_TREE_GUID \ + { 0xb1b621d5, 0xf19c, 0x41a5, \ +- { 0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0 } \ ++ { 0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0 } \ + } + + #define GRUB_EFI_VENDOR_APPLE_GUID \ + { 0x2B0585EB, 0xD8B8, 0x49A9, \ +- { 0x8B, 0x8C, 0xE2, 0x1B, 0x01, 0xAE, 0xF2, 0xB7 } \ ++ { 0x8B, 0x8C, 0xE2, 0x1B, 0x01, 0xAE, 0xF2, 0xB7 } \ ++ } ++ ++#define GRUB_EFI_SHIM_LOCK_GUID \ ++ { 0x605dab50, 0xe046, 0x4300, \ ++ { 0xab, 0xb6, 0x3d, 0xd8, 0x10, 0xdd, 0x8b, 0x23 } \ + } + + struct grub_efi_sal_system_table +@@ -1689,6 +1694,12 @@ struct grub_efi_block_io + }; + typedef struct grub_efi_block_io grub_efi_block_io_t; + ++struct grub_efi_shim_lock_protocol ++{ ++ grub_efi_status_t (*verify) (void *buffer, grub_uint32_t size); ++}; ++typedef struct grub_efi_shim_lock_protocol grub_efi_shim_lock_protocol_t; ++ + #if (GRUB_TARGET_SIZEOF_VOID_P == 4) || defined (__ia64__) \ + || defined (__aarch64__) || defined (__MINGW64__) || defined (__CYGWIN__) \ + || defined(__riscv) +-- +2.14.2 + diff --git a/boot/grub2/0030-efi-Return-grub_efi_status_t-from-grub_efi_get_varia.patch b/boot/grub2/0030-efi-Return-grub_efi_status_t-from-grub_efi_get_varia.patch new file mode 100644 index 00000000..39386a18 --- /dev/null +++ b/boot/grub2/0030-efi-Return-grub_efi_status_t-from-grub_efi_get_varia.patch @@ -0,0 +1,149 @@ +From 04ae030d0eea8668d4417702d88bf2cf04713d80 Mon Sep 17 00:00:00 2001 +From: Daniel Kiper +Date: Thu, 3 Dec 2020 16:01:46 +0100 +Subject: [PATCH] efi: Return grub_efi_status_t from grub_efi_get_variable() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This is needed to properly detect and report UEFI Secure Boot status +to the x86 Linux kernel. The functionality will be added by subsequent +patches. + +Signed-off-by: Daniel Kiper +Signed-off-by: Marco A Benatto +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/commands/efi/efifwsetup.c | 8 ++++---- + grub-core/kern/efi/efi.c | 16 +++++++++------- + grub-core/video/efi_gop.c | 2 +- + include/grub/efi/efi.h | 7 ++++--- + 4 files changed, 18 insertions(+), 15 deletions(-) + +diff --git a/grub-core/commands/efi/efifwsetup.c b/grub-core/commands/efi/efifwsetup.c +index 7a137a72a..eaca03283 100644 +--- a/grub-core/commands/efi/efifwsetup.c ++++ b/grub-core/commands/efi/efifwsetup.c +@@ -38,8 +38,8 @@ grub_cmd_fwsetup (grub_command_t cmd __attribute__ ((unused)), + grub_size_t oi_size; + grub_efi_guid_t global = GRUB_EFI_GLOBAL_VARIABLE_GUID; + +- old_os_indications = grub_efi_get_variable ("OsIndications", &global, +- &oi_size); ++ grub_efi_get_variable ("OsIndications", &global, &oi_size, ++ (void **) &old_os_indications); + + if (old_os_indications != NULL && oi_size == sizeof (os_indications)) + os_indications |= *old_os_indications; +@@ -63,8 +63,8 @@ efifwsetup_is_supported (void) + grub_size_t oi_size = 0; + grub_efi_guid_t global = GRUB_EFI_GLOBAL_VARIABLE_GUID; + +- os_indications_supported = grub_efi_get_variable ("OsIndicationsSupported", +- &global, &oi_size); ++ grub_efi_get_variable ("OsIndicationsSupported", &global, &oi_size, ++ (void **) &os_indications_supported); + + if (!os_indications_supported) + return 0; +diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c +index e0165e74c..9403b12cd 100644 +--- a/grub-core/kern/efi/efi.c ++++ b/grub-core/kern/efi/efi.c +@@ -223,9 +223,9 @@ grub_efi_set_variable(const char *var, const grub_efi_guid_t *guid, + return grub_error (GRUB_ERR_IO, "could not set EFI variable `%s'", var); + } + +-void * ++grub_efi_status_t + grub_efi_get_variable (const char *var, const grub_efi_guid_t *guid, +- grub_size_t *datasize_out) ++ grub_size_t *datasize_out, void **data_out) + { + grub_efi_status_t status; + grub_efi_uintn_t datasize = 0; +@@ -234,13 +234,14 @@ grub_efi_get_variable (const char *var, const grub_efi_guid_t *guid, + void *data; + grub_size_t len, len16; + ++ *data_out = NULL; + *datasize_out = 0; + + len = grub_strlen (var); + len16 = len * GRUB_MAX_UTF16_PER_UTF8; + var16 = grub_calloc (len16 + 1, sizeof (var16[0])); + if (!var16) +- return NULL; ++ return GRUB_EFI_OUT_OF_RESOURCES; + len16 = grub_utf8_to_utf16 (var16, len16, (grub_uint8_t *) var, len, NULL); + var16[len16] = 0; + +@@ -251,14 +252,14 @@ grub_efi_get_variable (const char *var, const grub_efi_guid_t *guid, + if (status != GRUB_EFI_BUFFER_TOO_SMALL || !datasize) + { + grub_free (var16); +- return NULL; ++ return status; + } + + data = grub_malloc (datasize); + if (!data) + { + grub_free (var16); +- return NULL; ++ return GRUB_EFI_OUT_OF_RESOURCES; + } + + status = efi_call_5 (r->get_variable, var16, guid, NULL, &datasize, data); +@@ -266,12 +267,13 @@ grub_efi_get_variable (const char *var, const grub_efi_guid_t *guid, + + if (status == GRUB_EFI_SUCCESS) + { ++ *data_out = data; + *datasize_out = datasize; +- return data; ++ return status; + } + + grub_free (data); +- return NULL; ++ return status; + } + + #pragma GCC diagnostic ignored "-Wcast-align" +diff --git a/grub-core/video/efi_gop.c b/grub-core/video/efi_gop.c +index be446f8d2..7fe0cdabf 100644 +--- a/grub-core/video/efi_gop.c ++++ b/grub-core/video/efi_gop.c +@@ -316,7 +316,7 @@ grub_video_gop_get_edid (struct grub_video_edid_info *edid_info) + char edidname[] = "agp-internal-edid"; + grub_size_t datasize; + grub_uint8_t *data; +- data = grub_efi_get_variable (edidname, &efi_var_guid, &datasize); ++ grub_efi_get_variable (edidname, &efi_var_guid, &datasize, (void **) &data); + if (data && datasize > 16) + { + copy_size = datasize - 16; +diff --git a/include/grub/efi/efi.h b/include/grub/efi/efi.h +index e90e00dc4..8b2a0f1f5 100644 +--- a/include/grub/efi/efi.h ++++ b/include/grub/efi/efi.h +@@ -74,9 +74,10 @@ grub_err_t EXPORT_FUNC (grub_efi_set_virtual_address_map) (grub_efi_uintn_t memo + grub_efi_uintn_t descriptor_size, + grub_efi_uint32_t descriptor_version, + grub_efi_memory_descriptor_t *virtual_map); +-void *EXPORT_FUNC (grub_efi_get_variable) (const char *variable, +- const grub_efi_guid_t *guid, +- grub_size_t *datasize_out); ++grub_efi_status_t EXPORT_FUNC (grub_efi_get_variable) (const char *variable, ++ const grub_efi_guid_t *guid, ++ grub_size_t *datasize_out, ++ void **data_out); + grub_err_t + EXPORT_FUNC (grub_efi_set_variable) (const char *var, + const grub_efi_guid_t *guid, +-- +2.29.2 + diff --git a/boot/grub2/0031-efi-Add-a-function-to-read-EFI-variables-with-attrib.patch b/boot/grub2/0031-efi-Add-a-function-to-read-EFI-variables-with-attrib.patch new file mode 100644 index 00000000..d9fb6154 --- /dev/null +++ b/boot/grub2/0031-efi-Add-a-function-to-read-EFI-variables-with-attrib.patch @@ -0,0 +1,78 @@ +From ac5c9367548750e75ed1e7fc4354a3d20186d733 Mon Sep 17 00:00:00 2001 +From: Daniel Kiper +Date: Thu, 3 Dec 2020 16:01:47 +0100 +Subject: [PATCH] efi: Add a function to read EFI variables with attributes + +It will be used to properly detect and report UEFI Secure Boot status to +the x86 Linux kernel. The functionality will be added by subsequent patches. + +Signed-off-by: Ignat Korchagin +Signed-off-by: Daniel Kiper +Signed-off-by: Marco A Benatto +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +--- + grub-core/kern/efi/efi.c | 16 +++++++++++++--- + include/grub/efi/efi.h | 5 +++++ + 2 files changed, 18 insertions(+), 3 deletions(-) + +diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c +index 9403b12cd..2942b8e35 100644 +--- a/grub-core/kern/efi/efi.c ++++ b/grub-core/kern/efi/efi.c +@@ -224,8 +224,11 @@ grub_efi_set_variable(const char *var, const grub_efi_guid_t *guid, + } + + grub_efi_status_t +-grub_efi_get_variable (const char *var, const grub_efi_guid_t *guid, +- grub_size_t *datasize_out, void **data_out) ++grub_efi_get_variable_with_attributes (const char *var, ++ const grub_efi_guid_t *guid, ++ grub_size_t *datasize_out, ++ void **data_out, ++ grub_efi_uint32_t *attributes) + { + grub_efi_status_t status; + grub_efi_uintn_t datasize = 0; +@@ -262,7 +265,7 @@ grub_efi_get_variable (const char *var, const grub_efi_guid_t *guid, + return GRUB_EFI_OUT_OF_RESOURCES; + } + +- status = efi_call_5 (r->get_variable, var16, guid, NULL, &datasize, data); ++ status = efi_call_5 (r->get_variable, var16, guid, attributes, &datasize, data); + grub_free (var16); + + if (status == GRUB_EFI_SUCCESS) +@@ -276,6 +279,13 @@ grub_efi_get_variable (const char *var, const grub_efi_guid_t *guid, + return status; + } + ++grub_efi_status_t ++grub_efi_get_variable (const char *var, const grub_efi_guid_t *guid, ++ grub_size_t *datasize_out, void **data_out) ++{ ++ return grub_efi_get_variable_with_attributes (var, guid, datasize_out, data_out, NULL); ++} ++ + #pragma GCC diagnostic ignored "-Wcast-align" + + /* Search the mods section from the PE32/PE32+ image. This code uses +diff --git a/include/grub/efi/efi.h b/include/grub/efi/efi.h +index 8b2a0f1f5..83d958f99 100644 +--- a/include/grub/efi/efi.h ++++ b/include/grub/efi/efi.h +@@ -74,6 +74,11 @@ grub_err_t EXPORT_FUNC (grub_efi_set_virtual_address_map) (grub_efi_uintn_t memo + grub_efi_uintn_t descriptor_size, + grub_efi_uint32_t descriptor_version, + grub_efi_memory_descriptor_t *virtual_map); ++grub_efi_status_t EXPORT_FUNC (grub_efi_get_variable_with_attributes) (const char *variable, ++ const grub_efi_guid_t *guid, ++ grub_size_t *datasize_out, ++ void **data_out, ++ grub_efi_uint32_t *attributes); + grub_efi_status_t EXPORT_FUNC (grub_efi_get_variable) (const char *variable, + const grub_efi_guid_t *guid, + grub_size_t *datasize_out, +-- +2.29.2 + diff --git a/boot/grub2/0032-efi-Add-secure-boot-detection.patch b/boot/grub2/0032-efi-Add-secure-boot-detection.patch new file mode 100644 index 00000000..f09a42b2 --- /dev/null +++ b/boot/grub2/0032-efi-Add-secure-boot-detection.patch @@ -0,0 +1,541 @@ +From d7e54b2e5feee95d2f83058ed30d883c450d1473 Mon Sep 17 00:00:00 2001 +From: Daniel Kiper +Date: Thu, 3 Dec 2020 16:01:48 +0100 +Subject: [PATCH] efi: Add secure boot detection + +Introduce grub_efi_get_secureboot() function which returns whether +UEFI Secure Boot is enabled or not on UEFI systems. + +Signed-off-by: Ignat Korchagin +Signed-off-by: Daniel Kiper +Signed-off-by: Marco A Benatto +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +[Add changes to generated files] +Signed-off-by: Stefan Sørensen +--- + grub-core/Makefile.am | 1 + + grub-core/Makefile.core.am | 14 +++--- + grub-core/Makefile.core.def | 1 + + grub-core/Makefile.in | 102 ++++++++++++++++++++++++++--------------- + grub-core/kern/efi/sb.c | 109 ++++++++++++++++++++++++++++++++++++++++++++ + include/grub/efi/sb.h | 40 ++++++++++++++++ + po/POTFILES.in | 2 + + 7 files changed, 225 insertions(+), 44 deletions(-) + create mode 100644 grub-core/kern/efi/sb.c + create mode 100644 include/grub/efi/sb.h + +diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am +index 3ea8e7f..c6ba5b2 100644 +--- a/grub-core/Makefile.am ++++ b/grub-core/Makefile.am +@@ -71,6 +71,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/command.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/device.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/disk.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/dl.h ++KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/sb.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/env.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/env_private.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/err.h +diff --git a/grub-core/Makefile.core.am b/grub-core/Makefile.core.am +index a217716..f28b753 100644 +--- a/grub-core/Makefile.core.am ++++ b/grub-core/Makefile.core.am +@@ -22421,7 +22421,7 @@ endif + if COND_i386_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/i386/efi/startup.S +-kernel_exec_SOURCES += kern/i386/efi/tsc.c kern/i386/tsc_pmtimer.c kern/i386/efi/init.c bus/pci.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/i386/efi/tsc.c kern/i386/tsc_pmtimer.c kern/i386/efi/init.c bus/pci.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22531,7 +22531,7 @@ endif + if COND_x86_64_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/x86_64/efi/startup.S +-kernel_exec_SOURCES += kern/i386/efi/tsc.c kern/i386/tsc_pmtimer.c kern/x86_64/efi/callwrap.S kern/i386/efi/init.c bus/pci.c kern/x86_64/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/i386/efi/tsc.c kern/i386/tsc_pmtimer.c kern/x86_64/efi/callwrap.S kern/i386/efi/init.c bus/pci.c kern/x86_64/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22707,7 +22707,7 @@ endif + if COND_ia64_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = +-kernel_exec_SOURCES += kern/ia64/efi/startup.S kern/ia64/efi/init.c kern/ia64/dl.c kern/ia64/dl_helper.c kern/ia64/cache.c lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/ia64/efi/startup.S kern/ia64/efi/init.c kern/ia64/dl.c kern/ia64/dl_helper.c kern/ia64/cache.c lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) -fno-builtin -fpic -minline-int-divide-max-throughput +@@ -22773,7 +22773,7 @@ endif + if COND_arm_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/arm/efi/startup.S +-kernel_exec_SOURCES += kern/arm/efi/init.c kern/efi/fdt.c kern/arm/dl.c kern/arm/dl_helper.c kern/arm/cache_armv6.S kern/arm/cache_armv7.S kern/arm/cache.c kern/arm/compiler-rt.S lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/arm/efi/init.c kern/efi/fdt.c kern/arm/dl.c kern/arm/dl_helper.c kern/arm/cache_armv6.S kern/arm/cache_armv7.S kern/arm/cache.c kern/arm/compiler-rt.S lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22795,7 +22795,7 @@ endif + if COND_arm64_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/arm64/efi/startup.S +-kernel_exec_SOURCES += kern/arm64/efi/init.c kern/efi/fdt.c kern/arm64/cache.c kern/arm64/cache_flush.S kern/arm64/dl.c kern/arm64/dl_helper.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/arm64/efi/init.c kern/efi/fdt.c kern/arm64/cache.c kern/arm64/cache_flush.S kern/arm64/dl.c kern/arm64/dl_helper.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22839,7 +22839,7 @@ endif + if COND_riscv32_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/riscv/efi/startup.S +-kernel_exec_SOURCES += kern/riscv/efi/init.c kern/efi/fdt.c kern/riscv/cache.c kern/riscv/cache_flush.S kern/riscv/dl.c lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/riscv/efi/init.c kern/efi/fdt.c kern/riscv/cache.c kern/riscv/cache_flush.S kern/riscv/dl.c lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22861,7 +22861,7 @@ endif + if COND_riscv64_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/riscv/efi/startup.S +-kernel_exec_SOURCES += kern/riscv/efi/init.c kern/efi/fdt.c kern/riscv/cache.c kern/riscv/cache_flush.S kern/riscv/dl.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/riscv/efi/init.c kern/efi/fdt.c kern/riscv/cache.c kern/riscv/cache_flush.S kern/riscv/dl.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def +index 474a63e..abd26cf 100644 +--- a/grub-core/Makefile.core.def ++++ b/grub-core/Makefile.core.def +@@ -203,6 +203,7 @@ kernel = { + efi = term/efi/console.c; + efi = kern/acpi.c; + efi = kern/efi/acpi.c; ++ efi = kern/efi/sb.c; + i386_coreboot = kern/i386/pc/acpi.c; + i386_multiboot = kern/i386/pc/acpi.c; + i386_coreboot = kern/acpi.c; +diff --git a/grub-core/Makefile.in b/grub-core/Makefile.in +index d287607..8fb81ee 100644 +--- a/grub-core/Makefile.in ++++ b/grub-core/Makefile.in +@@ -10468,32 +10468,33 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + kern/arm64/cache_flush.S kern/arm64/dl.c \ + kern/arm64/dl_helper.c disk/efi/efidisk.c kern/efi/efi.c \ + kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c \ +- kern/efi/acpi.c kern/compiler-rt.c kern/mm.c kern/time.c \ +- kern/generic/millisleep.c kern/command.c kern/corecmd.c \ +- kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c \ +- kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c \ +- kern/parser.c kern/partition.c kern/rescue_parser.c \ +- kern/rescue_reader.c kern/term.c kern/arm/startup.S \ +- kern/arm/coreboot/init.c kern/arm/coreboot/timer.c \ +- kern/arm/coreboot/coreboot.S lib/fdt.c bus/fdt.c term/ps2.c \ +- term/arm/pl050.c term/arm/cros.c term/arm/cros_ec.c \ +- bus/spi/rk3288_spi.c commands/keylayouts.c \ +- kern/arm/coreboot/dma.c kern/arm/coreboot/cbtable.c \ +- video/coreboot/cbfb.c kern/coreboot/mmap.c \ +- kern/coreboot/cbtable.c term/gfxterm.c font/font.c \ +- font/font_cmd.c io/bufio.c video/fb/fbblit.c video/fb/fbfill.c \ +- video/fb/fbutil.c video/fb/video_fb.c video/video.c \ +- kern/arm/dl.c kern/arm/dl_helper.c kern/arm/cache_armv6.S \ +- kern/arm/cache_armv7.S kern/arm/cache.c kern/arm/compiler-rt.S \ +- lib/division.c kern/arm/efi/startup.S kern/arm/efi/init.c \ +- kern/arm/uboot/init.c kern/arm/uboot/uboot.S \ +- disk/uboot/ubootdisk.c kern/uboot/uboot.c kern/uboot/init.c \ +- kern/uboot/hw.c term/uboot/console.c term/terminfo.c \ +- term/tparm.c commands/extcmd.c lib/arg.c disk/host.c \ +- kern/emu/cache_s.S kern/emu/hostdisk.c osdep/unix/hostdisk.c \ +- osdep/exec.c osdep/devmapper/hostdisk.c osdep/hostdisk.c \ +- kern/emu/hostfs.c kern/emu/main.c kern/emu/argp_common.c \ +- kern/emu/misc.c kern/emu/mm.c kern/emu/time.c kern/emu/cache.c \ ++ kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c \ ++ kern/time.c kern/generic/millisleep.c kern/command.c \ ++ kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c \ ++ kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c \ ++ kern/misc.c kern/parser.c kern/partition.c \ ++ kern/rescue_parser.c kern/rescue_reader.c kern/term.c \ ++ kern/arm/startup.S kern/arm/coreboot/init.c \ ++ kern/arm/coreboot/timer.c kern/arm/coreboot/coreboot.S \ ++ lib/fdt.c bus/fdt.c term/ps2.c term/arm/pl050.c \ ++ term/arm/cros.c term/arm/cros_ec.c bus/spi/rk3288_spi.c \ ++ commands/keylayouts.c kern/arm/coreboot/dma.c \ ++ kern/arm/coreboot/cbtable.c video/coreboot/cbfb.c \ ++ kern/coreboot/mmap.c kern/coreboot/cbtable.c term/gfxterm.c \ ++ font/font.c font/font_cmd.c io/bufio.c video/fb/fbblit.c \ ++ video/fb/fbfill.c video/fb/fbutil.c video/fb/video_fb.c \ ++ video/video.c kern/arm/dl.c kern/arm/dl_helper.c \ ++ kern/arm/cache_armv6.S kern/arm/cache_armv7.S kern/arm/cache.c \ ++ kern/arm/compiler-rt.S lib/division.c kern/arm/efi/startup.S \ ++ kern/arm/efi/init.c kern/arm/uboot/init.c \ ++ kern/arm/uboot/uboot.S disk/uboot/ubootdisk.c \ ++ kern/uboot/uboot.c kern/uboot/init.c kern/uboot/hw.c \ ++ term/uboot/console.c term/terminfo.c term/tparm.c \ ++ commands/extcmd.c lib/arg.c disk/host.c kern/emu/cache_s.S \ ++ kern/emu/hostdisk.c osdep/unix/hostdisk.c osdep/exec.c \ ++ osdep/devmapper/hostdisk.c osdep/hostdisk.c kern/emu/hostfs.c \ ++ kern/emu/main.c kern/emu/argp_common.c kern/emu/misc.c \ ++ kern/emu/mm.c kern/emu/time.c kern/emu/cache.c \ + osdep/emuconsole.c osdep/dl.c osdep/sleep.c osdep/init.c \ + osdep/emunet.c osdep/cputime.c kern/i386/coreboot/startup.S \ + kern/i386/coreboot/init.c kern/i386/pc/acpi.c \ +@@ -10580,6 +10581,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ term/efi/kernel_exec-console.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-acpi.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/efi/kernel_exec-acpi.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/efi/kernel_exec-sb.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@@ -10651,6 +10653,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ term/efi/kernel_exec-console.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/kernel_exec-acpi.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/efi/kernel_exec-acpi.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/efi/kernel_exec-sb.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@@ -10686,6 +10689,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ term/efi/kernel_exec-console.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/kernel_exec-acpi.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/efi/kernel_exec-acpi.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/efi/kernel_exec-sb.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@@ -10881,6 +10885,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ term/efi/kernel_exec-console.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-acpi.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/efi/kernel_exec-acpi.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/efi/kernel_exec-sb.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@@ -11109,6 +11114,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ term/efi/kernel_exec-console.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-acpi.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/efi/kernel_exec-acpi.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/efi/kernel_exec-sb.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@@ -11271,6 +11277,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ term/efi/kernel_exec-console.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-acpi.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/efi/kernel_exec-acpi.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/efi/kernel_exec-sb.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@@ -11360,6 +11367,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_TRUE@ term/efi/kernel_exec-console.$(OBJEXT) \ + @COND_arm64_efi_TRUE@ kern/kernel_exec-acpi.$(OBJEXT) \ + @COND_arm64_efi_TRUE@ kern/efi/kernel_exec-acpi.$(OBJEXT) \ ++@COND_arm64_efi_TRUE@ kern/efi/kernel_exec-sb.$(OBJEXT) \ + @COND_arm64_efi_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ + @COND_arm64_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@@ -16380,6 +16388,7 @@ KERNEL_HEADER_FILES = $(top_srcdir)/include/grub/cache.h \ + $(top_srcdir)/include/grub/device.h \ + $(top_srcdir)/include/grub/disk.h \ + $(top_srcdir)/include/grub/dl.h \ ++ $(top_srcdir)/include/grub/efi/sb.h \ + $(top_srcdir)/include/grub/env.h \ + $(top_srcdir)/include/grub/env_private.h \ + $(top_srcdir)/include/grub/err.h \ +@@ -25612,7 +25621,7 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_arm64_efi_TRUE@ kern/arm64/dl_helper.c disk/efi/efidisk.c \ + @COND_arm64_efi_TRUE@ kern/efi/efi.c kern/efi/init.c \ + @COND_arm64_efi_TRUE@ kern/efi/mm.c term/efi/console.c \ +-@COND_arm64_efi_TRUE@ kern/acpi.c kern/efi/acpi.c \ ++@COND_arm64_efi_TRUE@ kern/acpi.c kern/efi/acpi.c kern/efi/sb.c \ + @COND_arm64_efi_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ + @COND_arm64_efi_TRUE@ kern/generic/millisleep.c kern/command.c \ + @COND_arm64_efi_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +@@ -25661,8 +25670,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_arm_efi_TRUE@ disk/efi/efidisk.c kern/efi/efi.c \ + @COND_arm_efi_TRUE@ kern/efi/init.c kern/efi/mm.c \ + @COND_arm_efi_TRUE@ term/efi/console.c kern/acpi.c \ +-@COND_arm_efi_TRUE@ kern/efi/acpi.c kern/compiler-rt.c \ +-@COND_arm_efi_TRUE@ kern/mm.c kern/time.c \ ++@COND_arm_efi_TRUE@ kern/efi/acpi.c kern/efi/sb.c \ ++@COND_arm_efi_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ + @COND_arm_efi_TRUE@ kern/generic/millisleep.c kern/command.c \ + @COND_arm_efi_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ + @COND_arm_efi_TRUE@ kern/dl.c kern/env.c kern/err.c kern/file.c \ +@@ -25739,7 +25748,7 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_i386_efi_TRUE@ kern/i386/tsc_pit.c disk/efi/efidisk.c \ + @COND_i386_efi_TRUE@ kern/efi/efi.c kern/efi/init.c \ + @COND_i386_efi_TRUE@ kern/efi/mm.c term/efi/console.c \ +-@COND_i386_efi_TRUE@ kern/acpi.c kern/efi/acpi.c \ ++@COND_i386_efi_TRUE@ kern/acpi.c kern/efi/acpi.c kern/efi/sb.c \ + @COND_i386_efi_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ + @COND_i386_efi_TRUE@ kern/generic/millisleep.c kern/command.c \ + @COND_i386_efi_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +@@ -25851,7 +25860,7 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_ia64_efi_TRUE@ lib/division.c disk/efi/efidisk.c \ + @COND_ia64_efi_TRUE@ kern/efi/efi.c kern/efi/init.c \ + @COND_ia64_efi_TRUE@ kern/efi/mm.c term/efi/console.c \ +-@COND_ia64_efi_TRUE@ kern/acpi.c kern/efi/acpi.c \ ++@COND_ia64_efi_TRUE@ kern/acpi.c kern/efi/acpi.c kern/efi/sb.c \ + @COND_ia64_efi_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ + @COND_ia64_efi_TRUE@ kern/generic/millisleep.c kern/command.c \ + @COND_ia64_efi_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +@@ -25959,9 +25968,9 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_riscv32_efi_TRUE@ disk/efi/efidisk.c kern/efi/efi.c \ + @COND_riscv32_efi_TRUE@ kern/efi/init.c kern/efi/mm.c \ + @COND_riscv32_efi_TRUE@ term/efi/console.c kern/acpi.c \ +-@COND_riscv32_efi_TRUE@ kern/efi/acpi.c kern/compiler-rt.c \ +-@COND_riscv32_efi_TRUE@ kern/mm.c kern/time.c \ +-@COND_riscv32_efi_TRUE@ kern/generic/millisleep.c \ ++@COND_riscv32_efi_TRUE@ kern/efi/acpi.c kern/efi/sb.c \ ++@COND_riscv32_efi_TRUE@ kern/compiler-rt.c kern/mm.c \ ++@COND_riscv32_efi_TRUE@ kern/time.c kern/generic/millisleep.c \ + @COND_riscv32_efi_TRUE@ kern/command.c kern/corecmd.c \ + @COND_riscv32_efi_TRUE@ kern/device.c kern/disk.c kern/dl.c \ + @COND_riscv32_efi_TRUE@ kern/env.c kern/err.c kern/file.c \ +@@ -25977,8 +25986,9 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_riscv64_efi_TRUE@ kern/efi/efi.c kern/efi/init.c \ + @COND_riscv64_efi_TRUE@ kern/efi/mm.c term/efi/console.c \ + @COND_riscv64_efi_TRUE@ kern/acpi.c kern/efi/acpi.c \ +-@COND_riscv64_efi_TRUE@ kern/compiler-rt.c kern/mm.c \ +-@COND_riscv64_efi_TRUE@ kern/time.c kern/generic/millisleep.c \ ++@COND_riscv64_efi_TRUE@ kern/efi/sb.c kern/compiler-rt.c \ ++@COND_riscv64_efi_TRUE@ kern/mm.c kern/time.c \ ++@COND_riscv64_efi_TRUE@ kern/generic/millisleep.c \ + @COND_riscv64_efi_TRUE@ kern/command.c kern/corecmd.c \ + @COND_riscv64_efi_TRUE@ kern/device.c kern/disk.c kern/dl.c \ + @COND_riscv64_efi_TRUE@ kern/env.c kern/err.c kern/file.c \ +@@ -26022,7 +26032,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_x86_64_efi_TRUE@ kern/efi/efi.c kern/efi/init.c \ + @COND_x86_64_efi_TRUE@ kern/efi/mm.c term/efi/console.c \ + @COND_x86_64_efi_TRUE@ kern/acpi.c kern/efi/acpi.c \ +-@COND_x86_64_efi_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ ++@COND_x86_64_efi_TRUE@ kern/efi/sb.c kern/compiler-rt.c \ ++@COND_x86_64_efi_TRUE@ kern/mm.c kern/time.c \ + @COND_x86_64_efi_TRUE@ kern/generic/millisleep.c kern/command.c \ + @COND_x86_64_efi_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ + @COND_x86_64_efi_TRUE@ kern/dl.c kern/env.c kern/err.c \ +@@ -27989,6 +28000,8 @@ kern/kernel_exec-acpi.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) + kern/efi/kernel_exec-acpi.$(OBJEXT): kern/efi/$(am__dirstamp) \ + kern/efi/$(DEPDIR)/$(am__dirstamp) ++kern/efi/kernel_exec-sb.$(OBJEXT): kern/efi/$(am__dirstamp) \ ++ kern/efi/$(DEPDIR)/$(am__dirstamp) + kern/kernel_exec-compiler-rt.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) + kern/kernel_exec-mm.$(OBJEXT): kern/$(am__dirstamp) \ +@@ -30994,6 +31007,7 @@ distclean-compile: + @AMDEP_TRUE@@am__include@ @am__quote@kern/efi/$(DEPDIR)/kernel_exec-fdt.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@kern/efi/$(DEPDIR)/kernel_exec-init.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@kern/efi/$(DEPDIR)/kernel_exec-mm.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@kern/efi/$(DEPDIR)/kernel_exec-sb.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@kern/emu/$(DEPDIR)/grub_emu-full.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@kern/emu/$(DEPDIR)/grub_emu_lite-lite.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@kern/emu/$(DEPDIR)/kernel_exec-argp_common.Po@am__quote@ +@@ -35285,6 +35299,20 @@ kern/efi/kernel_exec-acpi.obj: kern/efi/acpi.c + @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ + @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/efi/kernel_exec-acpi.obj `if test -f 'kern/efi/acpi.c'; then $(CYGPATH_W) 'kern/efi/acpi.c'; else $(CYGPATH_W) '$(srcdir)/kern/efi/acpi.c'; fi` + ++kern/efi/kernel_exec-sb.o: kern/efi/sb.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/efi/kernel_exec-sb.o -MD -MP -MF kern/efi/$(DEPDIR)/kernel_exec-sb.Tpo -c -o kern/efi/kernel_exec-sb.o `test -f 'kern/efi/sb.c' || echo '$(srcdir)/'`kern/efi/sb.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/efi/$(DEPDIR)/kernel_exec-sb.Tpo kern/efi/$(DEPDIR)/kernel_exec-sb.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/efi/sb.c' object='kern/efi/kernel_exec-sb.o' libtool=no @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/efi/kernel_exec-sb.o `test -f 'kern/efi/sb.c' || echo '$(srcdir)/'`kern/efi/sb.c ++ ++kern/efi/kernel_exec-sb.obj: kern/efi/sb.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/efi/kernel_exec-sb.obj -MD -MP -MF kern/efi/$(DEPDIR)/kernel_exec-sb.Tpo -c -o kern/efi/kernel_exec-sb.obj `if test -f 'kern/efi/sb.c'; then $(CYGPATH_W) 'kern/efi/sb.c'; else $(CYGPATH_W) '$(srcdir)/kern/efi/sb.c'; fi` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/efi/$(DEPDIR)/kernel_exec-sb.Tpo kern/efi/$(DEPDIR)/kernel_exec-sb.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/efi/sb.c' object='kern/efi/kernel_exec-sb.obj' libtool=no @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/efi/kernel_exec-sb.obj `if test -f 'kern/efi/sb.c'; then $(CYGPATH_W) 'kern/efi/sb.c'; else $(CYGPATH_W) '$(srcdir)/kern/efi/sb.c'; fi` ++ + kern/kernel_exec-compiler-rt.o: kern/compiler-rt.c + @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-compiler-rt.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-compiler-rt.Tpo -c -o kern/kernel_exec-compiler-rt.o `test -f 'kern/compiler-rt.c' || echo '$(srcdir)/'`kern/compiler-rt.c + @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-compiler-rt.Tpo kern/$(DEPDIR)/kernel_exec-compiler-rt.Po +diff --git a/grub-core/kern/efi/sb.c b/grub-core/kern/efi/sb.c +new file mode 100644 +index 0000000..19658d9 +--- /dev/null ++++ b/grub-core/kern/efi/sb.c +@@ -0,0 +1,109 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2020 Free Software Foundation, Inc. ++ * ++ * GRUB 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 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB 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 GRUB. If not, see . ++ * ++ * UEFI Secure Boot related checkings. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* ++ * Determine whether we're in secure boot mode. ++ * ++ * Please keep the logic in sync with the Linux kernel, ++ * drivers/firmware/efi/libstub/secureboot.c:efi_get_secureboot(). ++ */ ++grub_uint8_t ++grub_efi_get_secureboot (void) ++{ ++ static grub_efi_guid_t efi_variable_guid = GRUB_EFI_GLOBAL_VARIABLE_GUID; ++ static grub_efi_guid_t efi_shim_lock_guid = GRUB_EFI_SHIM_LOCK_GUID; ++ grub_efi_status_t status; ++ grub_efi_uint32_t attr = 0; ++ grub_size_t size = 0; ++ grub_uint8_t *secboot = NULL; ++ grub_uint8_t *setupmode = NULL; ++ grub_uint8_t *moksbstate = NULL; ++ grub_uint8_t secureboot = GRUB_EFI_SECUREBOOT_MODE_UNKNOWN; ++ const char *secureboot_str = "UNKNOWN"; ++ ++ status = grub_efi_get_variable ("SecureBoot", &efi_variable_guid, ++ &size, (void **) &secboot); ++ ++ if (status == GRUB_EFI_NOT_FOUND) ++ { ++ secureboot = GRUB_EFI_SECUREBOOT_MODE_DISABLED; ++ goto out; ++ } ++ ++ if (status != GRUB_EFI_SUCCESS) ++ goto out; ++ ++ status = grub_efi_get_variable ("SetupMode", &efi_variable_guid, ++ &size, (void **) &setupmode); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ goto out; ++ ++ if ((*secboot == 0) || (*setupmode == 1)) ++ { ++ secureboot = GRUB_EFI_SECUREBOOT_MODE_DISABLED; ++ goto out; ++ } ++ ++ /* ++ * See if a user has put the shim into insecure mode. If so, and if the ++ * variable doesn't have the runtime attribute set, we might as well ++ * honor that. ++ */ ++ status = grub_efi_get_variable_with_attributes ("MokSBState", &efi_shim_lock_guid, ++ &size, (void **) &moksbstate, &attr); ++ ++ /* If it fails, we don't care why. Default to secure. */ ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ secureboot = GRUB_EFI_SECUREBOOT_MODE_ENABLED; ++ goto out; ++ } ++ ++ if (!(attr & GRUB_EFI_VARIABLE_RUNTIME_ACCESS) && *moksbstate == 1) ++ { ++ secureboot = GRUB_EFI_SECUREBOOT_MODE_DISABLED; ++ goto out; ++ } ++ ++ secureboot = GRUB_EFI_SECUREBOOT_MODE_ENABLED; ++ ++ out: ++ grub_free (moksbstate); ++ grub_free (setupmode); ++ grub_free (secboot); ++ ++ if (secureboot == GRUB_EFI_SECUREBOOT_MODE_DISABLED) ++ secureboot_str = "Disabled"; ++ else if (secureboot == GRUB_EFI_SECUREBOOT_MODE_ENABLED) ++ secureboot_str = "Enabled"; ++ ++ grub_dprintf ("efi", "UEFI Secure Boot state: %s\n", secureboot_str); ++ ++ return secureboot; ++} +diff --git a/include/grub/efi/sb.h b/include/grub/efi/sb.h +new file mode 100644 +index 0000000..a33d985 +--- /dev/null ++++ b/include/grub/efi/sb.h +@@ -0,0 +1,40 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2020 Free Software Foundation, Inc. ++ * ++ * GRUB 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 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB 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 GRUB. If not, see . ++ */ ++ ++#ifndef GRUB_EFI_SB_H ++#define GRUB_EFI_SB_H 1 ++ ++#include ++#include ++ ++#define GRUB_EFI_SECUREBOOT_MODE_UNSET 0 ++#define GRUB_EFI_SECUREBOOT_MODE_UNKNOWN 1 ++#define GRUB_EFI_SECUREBOOT_MODE_DISABLED 2 ++#define GRUB_EFI_SECUREBOOT_MODE_ENABLED 3 ++ ++#ifdef GRUB_MACHINE_EFI ++extern grub_uint8_t ++EXPORT_FUNC (grub_efi_get_secureboot) (void); ++#else ++static inline grub_uint8_t ++grub_efi_get_secureboot (void) ++{ ++ return GRUB_EFI_SECUREBOOT_MODE_UNSET; ++} ++#endif ++#endif /* GRUB_EFI_SB_H */ +diff --git a/po/POTFILES.in b/po/POTFILES.in +index 5574cbe..22543be 100644 +--- a/po/POTFILES.in ++++ b/po/POTFILES.in +@@ -266,6 +266,7 @@ + ./grub-core/kern/efi/fdt.c + ./grub-core/kern/efi/init.c + ./grub-core/kern/efi/mm.c ++./grub-core/kern/efi/sb.c + ./grub-core/kern/elf.c + ./grub-core/kern/elfXX.c + ./grub-core/kern/emu/argp_common.c +@@ -1053,6 +1054,7 @@ + ./include/grub/efi/memory.h + ./include/grub/efi/pci.h + ./include/grub/efi/pe32.h ++./include/grub/efi/sb.h + ./include/grub/efi/tpm.h + ./include/grub/efi/uga_draw.h + ./include/grub/efiemu/efiemu.h +-- +2.14.2 + diff --git a/boot/grub2/0033-verifiers-Move-verifiers-API-to-kernel-image.patch b/boot/grub2/0033-verifiers-Move-verifiers-API-to-kernel-image.patch new file mode 100644 index 00000000..9ce969c7 --- /dev/null +++ b/boot/grub2/0033-verifiers-Move-verifiers-API-to-kernel-image.patch @@ -0,0 +1,1650 @@ +From 9e95f45ceeef36fcf93cbfffcf004276883dbc99 Mon Sep 17 00:00:00 2001 +From: Marco A Benatto +Date: Wed, 23 Sep 2020 11:33:33 -0400 +Subject: [PATCH] verifiers: Move verifiers API to kernel image + +Move verifiers API from a module to the kernel image, so it can be +used there as well. There are no functional changes in this patch. + +Signed-off-by: Marco A Benatto +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +[Add changes to generated files] +Signed-off-by: Stefan Sørensen +--- + grub-core/Makefile.am | 1 + + grub-core/Makefile.core.am | 66 +++----- + grub-core/Makefile.core.def | 6 +- + grub-core/Makefile.in | 355 +++++++++++++++++++++-------------------- + grub-core/commands/verifiers.c | 228 -------------------------- + grub-core/kern/main.c | 4 + + grub-core/kern/verifiers.c | 224 ++++++++++++++++++++++++++ + include/grub/verify.h | 9 +- + po/POTFILES.in | 2 +- + 9 files changed, 446 insertions(+), 449 deletions(-) + delete mode 100644 grub-core/commands/verifiers.c + create mode 100644 grub-core/kern/verifiers.c + +diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am +index c6ba5b2..cc6fc7d 100644 +--- a/grub-core/Makefile.am ++++ b/grub-core/Makefile.am +@@ -91,6 +91,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/parser.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/partition.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/term.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/time.h ++KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/verify.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm_private.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/net.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/memory.h +diff --git a/grub-core/Makefile.core.am b/grub-core/Makefile.core.am +index f28b753..c4d67d4 100644 +--- a/grub-core/Makefile.core.am ++++ b/grub-core/Makefile.core.am +@@ -6953,26 +6953,6 @@ CLEANFILES += pgp.marker + pgp.marker: $(pgp_module_SOURCES) $(nodist_pgp_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pgp_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +-platform_PROGRAMS += verifiers.module +-MODULE_FILES += verifiers.module$(EXEEXT) +-verifiers_module_SOURCES = commands/verifiers.c ## platform sources +-nodist_verifiers_module_SOURCES = ## platform nodist sources +-verifiers_module_LDADD = +-verifiers_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +-verifiers_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +-verifiers_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +-verifiers_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +-verifiers_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +-dist_noinst_DATA += +-BUILT_SOURCES += $(nodist_verifiers_module_SOURCES) +-CLEANFILES += $(nodist_verifiers_module_SOURCES) +-MOD_FILES += verifiers.mod +-MARKER_FILES += verifiers.marker +-CLEANFILES += verifiers.marker +- +-verifiers.marker: $(verifiers_module_SOURCES) $(nodist_verifiers_module_SOURCES) +- $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(verifiers_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +- grep 'MARKER' $@.new > $@; rm -f $@.new + + if COND_x86_64_efi + platform_PROGRAMS += shim_lock.module +@@ -22377,7 +22357,7 @@ gcry_whirlpool.marker: $(gcry_whirlpool_module_SOURCES) $(nodist_gcry_whirlpool_ + if COND_emu + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = +-kernel_exec_SOURCES += disk/host.c kern/emu/cache_s.S kern/emu/hostdisk.c osdep/unix/hostdisk.c osdep/exec.c osdep/devmapper/hostdisk.c osdep/hostdisk.c kern/emu/hostfs.c kern/emu/main.c kern/emu/argp_common.c kern/emu/misc.c kern/emu/mm.c kern/emu/time.c kern/emu/cache.c osdep/emuconsole.c osdep/dl.c osdep/sleep.c osdep/init.c osdep/emunet.c osdep/cputime.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += disk/host.c kern/emu/cache_s.S kern/emu/hostdisk.c osdep/unix/hostdisk.c osdep/exec.c osdep/devmapper/hostdisk.c osdep/hostdisk.c kern/emu/hostfs.c kern/emu/main.c kern/emu/argp_common.c kern/emu/misc.c kern/emu/mm.c kern/emu/time.c kern/emu/cache.c osdep/emuconsole.c osdep/dl.c osdep/sleep.c osdep/init.c osdep/emunet.c osdep/cputime.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) $(CFLAGS_GNULIB) +@@ -22399,7 +22379,7 @@ endif + if COND_i386_pc + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/i386/pc/startup.S +-kernel_exec_SOURCES += kern/i386/pc/init.c kern/i386/pc/mmap.c term/i386/pc/console.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/i386/pc/init.c kern/i386/pc/mmap.c term/i386/pc/console.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22421,7 +22401,7 @@ endif + if COND_i386_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/i386/efi/startup.S +-kernel_exec_SOURCES += kern/i386/efi/tsc.c kern/i386/tsc_pmtimer.c kern/i386/efi/init.c bus/pci.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/i386/efi/tsc.c kern/i386/tsc_pmtimer.c kern/i386/efi/init.c bus/pci.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22443,7 +22423,7 @@ endif + if COND_i386_qemu + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/i386/qemu/startup.S +-kernel_exec_SOURCES += kern/i386/qemu/init.c bus/pci.c kern/vga_init.c kern/i386/qemu/mmap.c term/i386/pc/vga_text.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/i386/qemu/init.c bus/pci.c kern/vga_init.c kern/i386/qemu/mmap.c term/i386/pc/vga_text.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22465,7 +22445,7 @@ endif + if COND_i386_coreboot + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/i386/coreboot/startup.S +-kernel_exec_SOURCES += kern/i386/coreboot/init.c kern/i386/pc/acpi.c kern/acpi.c kern/i386/tsc_pmtimer.c kern/i386/coreboot/cbtable.c video/coreboot/cbfb.c kern/coreboot/mmap.c kern/coreboot/cbtable.c term/gfxterm.c font/font.c font/font_cmd.c io/bufio.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c video/fb/video_fb.c video/video.c term/i386/pc/vga_text.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/i386/coreboot/init.c kern/i386/pc/acpi.c kern/acpi.c kern/i386/tsc_pmtimer.c kern/i386/coreboot/cbtable.c video/coreboot/cbfb.c kern/coreboot/mmap.c kern/coreboot/cbtable.c term/gfxterm.c font/font.c font/font_cmd.c io/bufio.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c video/fb/video_fb.c video/video.c term/i386/pc/vga_text.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22487,7 +22467,7 @@ endif + if COND_i386_multiboot + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/i386/coreboot/startup.S +-kernel_exec_SOURCES += kern/i386/coreboot/init.c kern/i386/pc/acpi.c kern/acpi.c kern/i386/multiboot_mmap.c term/i386/pc/vga_text.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/i386/coreboot/init.c kern/i386/pc/acpi.c kern/acpi.c kern/i386/multiboot_mmap.c term/i386/pc/vga_text.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22509,7 +22489,7 @@ endif + if COND_i386_ieee1275 + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/i386/ieee1275/startup.S +-kernel_exec_SOURCES += disk/ieee1275/ofdisk.c kern/ieee1275/cmain.c kern/ieee1275/ieee1275.c kern/ieee1275/mmap.c kern/ieee1275/openfw.c term/ieee1275/console.c kern/ieee1275/init.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += disk/ieee1275/ofdisk.c kern/ieee1275/cmain.c kern/ieee1275/ieee1275.c kern/ieee1275/mmap.c kern/ieee1275/openfw.c term/ieee1275/console.c kern/ieee1275/init.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22531,7 +22511,7 @@ endif + if COND_x86_64_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/x86_64/efi/startup.S +-kernel_exec_SOURCES += kern/i386/efi/tsc.c kern/i386/tsc_pmtimer.c kern/x86_64/efi/callwrap.S kern/i386/efi/init.c bus/pci.c kern/x86_64/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/i386/efi/tsc.c kern/i386/tsc_pmtimer.c kern/x86_64/efi/callwrap.S kern/i386/efi/init.c bus/pci.c kern/x86_64/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22553,7 +22533,7 @@ endif + if COND_i386_xen + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/i386/xen/startup.S +-kernel_exec_SOURCES += kern/i386/dl.c kern/i386/xen/hypercall.S kern/i386/tsc.c kern/i386/xen/tsc.c kern/xen/init.c term/xen/console.c disk/xen/xendisk.c commands/boot.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/i386/dl.c kern/i386/xen/hypercall.S kern/i386/tsc.c kern/i386/xen/tsc.c kern/xen/init.c term/xen/console.c disk/xen/xendisk.c commands/boot.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22575,7 +22555,7 @@ endif + if COND_x86_64_xen + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/x86_64/xen/startup.S +-kernel_exec_SOURCES += kern/x86_64/dl.c kern/x86_64/xen/hypercall.S kern/i386/tsc.c kern/i386/xen/tsc.c kern/xen/init.c term/xen/console.c disk/xen/xendisk.c commands/boot.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/x86_64/dl.c kern/x86_64/xen/hypercall.S kern/i386/tsc.c kern/i386/xen/tsc.c kern/xen/init.c term/xen/console.c disk/xen/xendisk.c commands/boot.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22597,7 +22577,7 @@ endif + if COND_i386_xen_pvh + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/i386/xen/startup_pvh.S +-kernel_exec_SOURCES += kern/i386/dl.c commands/boot.c disk/xen/xendisk.c kern/i386/tsc.c kern/i386/xen/tsc.c kern/i386/xen/pvh.c kern/xen/init.c term/xen/console.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/i386/dl.c commands/boot.c disk/xen/xendisk.c kern/i386/tsc.c kern/i386/xen/tsc.c kern/i386/xen/pvh.c kern/xen/init.c term/xen/console.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22619,7 +22599,7 @@ endif + if COND_mips_loongson + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/mips/startup.S +-kernel_exec_SOURCES += term/ns8250.c bus/bonito.c bus/cs5536.c bus/pci.c kern/mips/loongson/init.c term/at_keyboard.c term/ps2.c commands/boot.c term/serial.c video/sm712.c video/sis315pro.c video/radeon_fuloong2e.c video/radeon_yeeloong3a.c commands/keylayouts.c term/gfxterm.c font/font.c font/font_cmd.c io/bufio.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c video/fb/video_fb.c video/video.c kern/generic/rtc_get_time_ms.c kern/mips/cache.S kern/mips/dl.c kern/mips/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += term/ns8250.c bus/bonito.c bus/cs5536.c bus/pci.c kern/mips/loongson/init.c term/at_keyboard.c term/ps2.c commands/boot.c term/serial.c video/sm712.c video/sis315pro.c video/radeon_fuloong2e.c video/radeon_yeeloong3a.c commands/keylayouts.c term/gfxterm.c font/font.c font/font_cmd.c io/bufio.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c video/fb/video_fb.c video/video.c kern/generic/rtc_get_time_ms.c kern/mips/cache.S kern/mips/dl.c kern/mips/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22641,7 +22621,7 @@ endif + if COND_sparc64_ieee1275 + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/sparc64/ieee1275/crt0.S +-kernel_exec_SOURCES += kern/sparc64/cache.S kern/sparc64/dl.c kern/sparc64/ieee1275/ieee1275.c disk/ieee1275/obdisk.c disk/ieee1275/ofdisk.c kern/ieee1275/cmain.c kern/ieee1275/ieee1275.c kern/ieee1275/mmap.c kern/ieee1275/openfw.c term/ieee1275/console.c kern/ieee1275/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/sparc64/cache.S kern/sparc64/dl.c kern/sparc64/ieee1275/ieee1275.c disk/ieee1275/obdisk.c disk/ieee1275/ofdisk.c kern/ieee1275/cmain.c kern/ieee1275/ieee1275.c kern/ieee1275/mmap.c kern/ieee1275/openfw.c term/ieee1275/console.c kern/ieee1275/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22663,7 +22643,7 @@ endif + if COND_powerpc_ieee1275 + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/powerpc/ieee1275/startup.S +-kernel_exec_SOURCES += kern/powerpc/cache.S kern/powerpc/dl.c kern/powerpc/compiler-rt.S disk/ieee1275/ofdisk.c kern/ieee1275/cmain.c kern/ieee1275/ieee1275.c kern/ieee1275/mmap.c kern/ieee1275/openfw.c term/ieee1275/console.c kern/ieee1275/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/powerpc/cache.S kern/powerpc/dl.c kern/powerpc/compiler-rt.S disk/ieee1275/ofdisk.c kern/ieee1275/cmain.c kern/ieee1275/ieee1275.c kern/ieee1275/mmap.c kern/ieee1275/openfw.c term/ieee1275/console.c kern/ieee1275/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22685,7 +22665,7 @@ endif + if COND_mips_arc + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/mips/startup.S +-kernel_exec_SOURCES += kern/mips/arc/init.c term/arc/console.c disk/arc/arcdisk.c kern/generic/rtc_get_time_ms.c kern/mips/cache.S kern/mips/dl.c kern/mips/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/mips/arc/init.c term/arc/console.c disk/arc/arcdisk.c kern/generic/rtc_get_time_ms.c kern/mips/cache.S kern/mips/dl.c kern/mips/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22707,7 +22687,7 @@ endif + if COND_ia64_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = +-kernel_exec_SOURCES += kern/ia64/efi/startup.S kern/ia64/efi/init.c kern/ia64/dl.c kern/ia64/dl_helper.c kern/ia64/cache.c lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/ia64/efi/startup.S kern/ia64/efi/init.c kern/ia64/dl.c kern/ia64/dl_helper.c kern/ia64/cache.c lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) -fno-builtin -fpic -minline-int-divide-max-throughput +@@ -22729,7 +22709,7 @@ endif + if COND_mips_qemu_mips + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/mips/startup.S +-kernel_exec_SOURCES += kern/mips/qemu_mips/init.c term/ns8250.c term/serial.c term/at_keyboard.c term/ps2.c commands/boot.c commands/keylayouts.c term/i386/pc/vga_text.c kern/vga_init.c kern/generic/rtc_get_time_ms.c kern/mips/cache.S kern/mips/dl.c kern/mips/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/mips/qemu_mips/init.c term/ns8250.c term/serial.c term/at_keyboard.c term/ps2.c commands/boot.c commands/keylayouts.c term/i386/pc/vga_text.c kern/vga_init.c kern/generic/rtc_get_time_ms.c kern/mips/cache.S kern/mips/dl.c kern/mips/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22751,7 +22731,7 @@ endif + if COND_arm_uboot + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/arm/startup.S +-kernel_exec_SOURCES += kern/arm/uboot/init.c kern/arm/uboot/uboot.S disk/uboot/ubootdisk.c kern/uboot/uboot.c kern/uboot/init.c kern/uboot/hw.c term/uboot/console.c kern/arm/dl.c kern/arm/dl_helper.c kern/arm/cache_armv6.S kern/arm/cache_armv7.S kern/arm/cache.c kern/arm/compiler-rt.S lib/division.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/arm/uboot/init.c kern/arm/uboot/uboot.S disk/uboot/ubootdisk.c kern/uboot/uboot.c kern/uboot/init.c kern/uboot/hw.c term/uboot/console.c kern/arm/dl.c kern/arm/dl_helper.c kern/arm/cache_armv6.S kern/arm/cache_armv7.S kern/arm/cache.c kern/arm/compiler-rt.S lib/division.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22773,7 +22753,7 @@ endif + if COND_arm_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/arm/efi/startup.S +-kernel_exec_SOURCES += kern/arm/efi/init.c kern/efi/fdt.c kern/arm/dl.c kern/arm/dl_helper.c kern/arm/cache_armv6.S kern/arm/cache_armv7.S kern/arm/cache.c kern/arm/compiler-rt.S lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/arm/efi/init.c kern/efi/fdt.c kern/arm/dl.c kern/arm/dl_helper.c kern/arm/cache_armv6.S kern/arm/cache_armv7.S kern/arm/cache.c kern/arm/compiler-rt.S lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22795,7 +22775,7 @@ endif + if COND_arm64_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/arm64/efi/startup.S +-kernel_exec_SOURCES += kern/arm64/efi/init.c kern/efi/fdt.c kern/arm64/cache.c kern/arm64/cache_flush.S kern/arm64/dl.c kern/arm64/dl_helper.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/arm64/efi/init.c kern/efi/fdt.c kern/arm64/cache.c kern/arm64/cache_flush.S kern/arm64/dl.c kern/arm64/dl_helper.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22817,7 +22797,7 @@ endif + if COND_arm_coreboot + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/arm/startup.S +-kernel_exec_SOURCES += kern/arm/coreboot/init.c kern/arm/coreboot/timer.c kern/arm/coreboot/coreboot.S lib/fdt.c bus/fdt.c term/ps2.c term/arm/pl050.c term/arm/cros.c term/arm/cros_ec.c bus/spi/rk3288_spi.c commands/keylayouts.c kern/arm/coreboot/dma.c kern/arm/coreboot/cbtable.c video/coreboot/cbfb.c kern/coreboot/mmap.c kern/coreboot/cbtable.c term/gfxterm.c font/font.c font/font_cmd.c io/bufio.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c video/fb/video_fb.c video/video.c kern/arm/dl.c kern/arm/dl_helper.c kern/arm/cache_armv6.S kern/arm/cache_armv7.S kern/arm/cache.c kern/arm/compiler-rt.S lib/division.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/arm/coreboot/init.c kern/arm/coreboot/timer.c kern/arm/coreboot/coreboot.S lib/fdt.c bus/fdt.c term/ps2.c term/arm/pl050.c term/arm/cros.c term/arm/cros_ec.c bus/spi/rk3288_spi.c commands/keylayouts.c kern/arm/coreboot/dma.c kern/arm/coreboot/cbtable.c video/coreboot/cbfb.c kern/coreboot/mmap.c kern/coreboot/cbtable.c term/gfxterm.c font/font.c font/font_cmd.c io/bufio.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c video/fb/video_fb.c video/video.c kern/arm/dl.c kern/arm/dl_helper.c kern/arm/cache_armv6.S kern/arm/cache_armv7.S kern/arm/cache.c kern/arm/compiler-rt.S lib/division.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22839,7 +22819,7 @@ endif + if COND_riscv32_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/riscv/efi/startup.S +-kernel_exec_SOURCES += kern/riscv/efi/init.c kern/efi/fdt.c kern/riscv/cache.c kern/riscv/cache_flush.S kern/riscv/dl.c lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/riscv/efi/init.c kern/efi/fdt.c kern/riscv/cache.c kern/riscv/cache_flush.S kern/riscv/dl.c lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22861,7 +22841,7 @@ endif + if COND_riscv64_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/riscv/efi/startup.S +-kernel_exec_SOURCES += kern/riscv/efi/init.c kern/efi/fdt.c kern/riscv/cache.c kern/riscv/cache_flush.S kern/riscv/dl.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c ++kernel_exec_SOURCES += kern/riscv/efi/init.c kern/efi/fdt.c kern/riscv/cache.c kern/riscv/cache_flush.S kern/riscv/dl.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def +index abd26cf..f6c0348 100644 +--- a/grub-core/Makefile.core.def ++++ b/grub-core/Makefile.core.def +@@ -140,6 +140,7 @@ kernel = { + common = kern/rescue_parser.c; + common = kern/rescue_reader.c; + common = kern/term.c; ++ common = kern/verifiers.c; + + noemu = kern/compiler-rt.c; + noemu = kern/mm.c; +@@ -943,11 +944,6 @@ module = { + cppflags = '-I$(srcdir)/lib/posix_wrap'; + }; + +-module = { +- name = verifiers; +- common = commands/verifiers.c; +-}; +- + module = { + name = shim_lock; + common = commands/efi/shim_lock.c; +diff --git a/grub-core/Makefile.in b/grub-core/Makefile.in +index 8fb81ee..8930714 100644 +--- a/grub-core/Makefile.in ++++ b/grub-core/Makefile.in +@@ -202,39 +202,39 @@ platform_PROGRAMS = disk.module$(EXEEXT) trig.module$(EXEEXT) \ + $(am__EXEEXT_286) $(am__EXEEXT_287) $(am__EXEEXT_288) \ + $(am__EXEEXT_289) $(am__EXEEXT_290) $(am__EXEEXT_291) \ + $(am__EXEEXT_292) hashsum.module$(EXEEXT) pgp.module$(EXEEXT) \ +- verifiers.module$(EXEEXT) $(am__EXEEXT_293) $(am__EXEEXT_294) \ +- $(am__EXEEXT_295) $(am__EXEEXT_296) $(am__EXEEXT_297) \ +- $(am__EXEEXT_298) $(am__EXEEXT_299) $(am__EXEEXT_300) \ +- $(am__EXEEXT_301) $(am__EXEEXT_302) help.module$(EXEEXT) \ +- hexdump.module$(EXEEXT) keystatus.module$(EXEEXT) \ +- $(am__EXEEXT_303) $(am__EXEEXT_304) loadenv.module$(EXEEXT) \ +- ls.module$(EXEEXT) lsmmap.module$(EXEEXT) $(am__EXEEXT_305) \ +- $(am__EXEEXT_306) $(am__EXEEXT_307) $(am__EXEEXT_308) \ +- $(am__EXEEXT_309) $(am__EXEEXT_310) $(am__EXEEXT_311) \ +- $(am__EXEEXT_312) memrw.module$(EXEEXT) \ +- minicmd.module$(EXEEXT) parttool.module$(EXEEXT) \ +- password.module$(EXEEXT) password_pbkdf2.module$(EXEEXT) \ +- $(am__EXEEXT_313) $(am__EXEEXT_314) $(am__EXEEXT_315) \ +- $(am__EXEEXT_316) $(am__EXEEXT_317) $(am__EXEEXT_318) \ +- $(am__EXEEXT_319) $(am__EXEEXT_320) $(am__EXEEXT_321) \ +- $(am__EXEEXT_322) $(am__EXEEXT_323) $(am__EXEEXT_324) \ +- $(am__EXEEXT_325) $(am__EXEEXT_326) $(am__EXEEXT_327) \ +- $(am__EXEEXT_328) $(am__EXEEXT_329) $(am__EXEEXT_330) \ +- $(am__EXEEXT_331) $(am__EXEEXT_332) $(am__EXEEXT_333) \ +- probe.module$(EXEEXT) read.module$(EXEEXT) \ +- search.module$(EXEEXT) search_fs_file.module$(EXEEXT) \ +- search_fs_uuid.module$(EXEEXT) search_label.module$(EXEEXT) \ +- $(am__EXEEXT_334) $(am__EXEEXT_335) $(am__EXEEXT_336) \ +- $(am__EXEEXT_337) $(am__EXEEXT_338) $(am__EXEEXT_339) \ +- $(am__EXEEXT_340) $(am__EXEEXT_341) $(am__EXEEXT_342) \ +- $(am__EXEEXT_343) $(am__EXEEXT_344) $(am__EXEEXT_345) \ +- $(am__EXEEXT_346) $(am__EXEEXT_347) $(am__EXEEXT_348) \ +- $(am__EXEEXT_349) sleep.module$(EXEEXT) $(am__EXEEXT_350) \ +- $(am__EXEEXT_351) terminal.module$(EXEEXT) \ +- test.module$(EXEEXT) true.module$(EXEEXT) $(am__EXEEXT_352) \ +- $(am__EXEEXT_353) $(am__EXEEXT_354) $(am__EXEEXT_355) \ +- $(am__EXEEXT_356) $(am__EXEEXT_357) $(am__EXEEXT_358) \ +- $(am__EXEEXT_359) $(am__EXEEXT_360) videoinfo.module$(EXEEXT) \ ++ $(am__EXEEXT_293) $(am__EXEEXT_294) $(am__EXEEXT_295) \ ++ $(am__EXEEXT_296) $(am__EXEEXT_297) $(am__EXEEXT_298) \ ++ $(am__EXEEXT_299) $(am__EXEEXT_300) $(am__EXEEXT_301) \ ++ $(am__EXEEXT_302) help.module$(EXEEXT) hexdump.module$(EXEEXT) \ ++ keystatus.module$(EXEEXT) $(am__EXEEXT_303) $(am__EXEEXT_304) \ ++ loadenv.module$(EXEEXT) ls.module$(EXEEXT) \ ++ lsmmap.module$(EXEEXT) $(am__EXEEXT_305) $(am__EXEEXT_306) \ ++ $(am__EXEEXT_307) $(am__EXEEXT_308) $(am__EXEEXT_309) \ ++ $(am__EXEEXT_310) $(am__EXEEXT_311) $(am__EXEEXT_312) \ ++ memrw.module$(EXEEXT) minicmd.module$(EXEEXT) \ ++ parttool.module$(EXEEXT) password.module$(EXEEXT) \ ++ password_pbkdf2.module$(EXEEXT) $(am__EXEEXT_313) \ ++ $(am__EXEEXT_314) $(am__EXEEXT_315) $(am__EXEEXT_316) \ ++ $(am__EXEEXT_317) $(am__EXEEXT_318) $(am__EXEEXT_319) \ ++ $(am__EXEEXT_320) $(am__EXEEXT_321) $(am__EXEEXT_322) \ ++ $(am__EXEEXT_323) $(am__EXEEXT_324) $(am__EXEEXT_325) \ ++ $(am__EXEEXT_326) $(am__EXEEXT_327) $(am__EXEEXT_328) \ ++ $(am__EXEEXT_329) $(am__EXEEXT_330) $(am__EXEEXT_331) \ ++ $(am__EXEEXT_332) $(am__EXEEXT_333) probe.module$(EXEEXT) \ ++ read.module$(EXEEXT) search.module$(EXEEXT) \ ++ search_fs_file.module$(EXEEXT) search_fs_uuid.module$(EXEEXT) \ ++ search_label.module$(EXEEXT) $(am__EXEEXT_334) \ ++ $(am__EXEEXT_335) $(am__EXEEXT_336) $(am__EXEEXT_337) \ ++ $(am__EXEEXT_338) $(am__EXEEXT_339) $(am__EXEEXT_340) \ ++ $(am__EXEEXT_341) $(am__EXEEXT_342) $(am__EXEEXT_343) \ ++ $(am__EXEEXT_344) $(am__EXEEXT_345) $(am__EXEEXT_346) \ ++ $(am__EXEEXT_347) $(am__EXEEXT_348) $(am__EXEEXT_349) \ ++ sleep.module$(EXEEXT) $(am__EXEEXT_350) $(am__EXEEXT_351) \ ++ terminal.module$(EXEEXT) test.module$(EXEEXT) \ ++ true.module$(EXEEXT) $(am__EXEEXT_352) $(am__EXEEXT_353) \ ++ $(am__EXEEXT_354) $(am__EXEEXT_355) $(am__EXEEXT_356) \ ++ $(am__EXEEXT_357) $(am__EXEEXT_358) $(am__EXEEXT_359) \ ++ $(am__EXEEXT_360) videoinfo.module$(EXEEXT) \ + videotest.module$(EXEEXT) xnu_uuid.module$(EXEEXT) \ + dm_nv.module$(EXEEXT) loopback.module$(EXEEXT) \ + cryptodisk.module$(EXEEXT) luks.module$(EXEEXT) \ +@@ -10474,7 +10474,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c \ + kern/misc.c kern/parser.c kern/partition.c \ + kern/rescue_parser.c kern/rescue_reader.c kern/term.c \ +- kern/arm/startup.S kern/arm/coreboot/init.c \ ++ kern/verifiers.c kern/arm/startup.S kern/arm/coreboot/init.c \ + kern/arm/coreboot/timer.c kern/arm/coreboot/coreboot.S \ + lib/fdt.c bus/fdt.c term/ps2.c term/arm/pl050.c \ + term/arm/cros.c term/arm/cros_ec.c bus/spi/rk3288_spi.c \ +@@ -10564,7 +10564,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@am_kernel_exec_OBJECTS = kern/x86_64/efi/kernel_exec-startup.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/i386/efi/kernel_exec-tsc.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/i386/kernel_exec-tsc_pmtimer.$(OBJEXT) \ +@@ -10602,7 +10603,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_TRUE@am_kernel_exec_OBJECTS = kern/sparc64/ieee1275/kernel_exec-crt0.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/sparc64/kernel_exec-cache.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/sparc64/kernel_exec-dl.$(OBJEXT) \ +@@ -10639,7 +10641,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@am_kernel_exec_OBJECTS = kern/riscv/efi/kernel_exec-startup.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/riscv/efi/kernel_exec-init.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/efi/kernel_exec-fdt.$(OBJEXT) \ +@@ -10674,7 +10677,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@am_kernel_exec_OBJECTS = kern/riscv/efi/kernel_exec-startup.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/riscv/efi/kernel_exec-init.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/efi/kernel_exec-fdt.$(OBJEXT) \ +@@ -10710,7 +10714,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@am_kernel_exec_OBJECTS = kern/powerpc/ieee1275/kernel_exec-startup.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/powerpc/kernel_exec-cache.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/powerpc/kernel_exec-dl.$(OBJEXT) \ +@@ -10746,7 +10751,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@am_kernel_exec_OBJECTS = kern/mips/kernel_exec-startup.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/mips/qemu_mips/kernel_exec-init.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ term/kernel_exec-ns8250.$(OBJEXT) \ +@@ -10785,7 +10791,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@am_kernel_exec_OBJECTS = kern/mips/kernel_exec-startup.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ term/kernel_exec-ns8250.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ bus/kernel_exec-bonito.$(OBJEXT) \ +@@ -10838,7 +10845,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@am_kernel_exec_OBJECTS = kern/mips/kernel_exec-startup.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/mips/arc/kernel_exec-init.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ term/arc/kernel_exec-console.$(OBJEXT) \ +@@ -10871,7 +10879,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@am_kernel_exec_OBJECTS = kern/ia64/efi/kernel_exec-startup.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/ia64/efi/kernel_exec-init.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/ia64/kernel_exec-dl.$(OBJEXT) \ +@@ -10906,7 +10915,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_TRUE@am_kernel_exec_OBJECTS = kern/i386/xen/kernel_exec-startup_pvh.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_TRUE@ kern/i386/kernel_exec-dl.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_TRUE@ commands/kernel_exec-boot.$(OBJEXT) \ +@@ -10940,7 +10950,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@am_kernel_exec_OBJECTS = kern/i386/xen/kernel_exec-startup.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/i386/kernel_exec-dl.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/i386/xen/kernel_exec-hypercall.$(OBJEXT) \ +@@ -10974,7 +10985,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_kernel_exec_OBJECTS = kern/i386/qemu/kernel_exec-startup.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/i386/qemu/kernel_exec-init.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ bus/kernel_exec-pci.$(OBJEXT) \ +@@ -11004,7 +11016,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_kernel_exec_OBJECTS = kern/i386/pc/kernel_exec-startup.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/i386/pc/kernel_exec-init.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/i386/pc/kernel_exec-mmap.$(OBJEXT) \ +@@ -11032,7 +11045,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_kernel_exec_OBJECTS = kern/i386/coreboot/kernel_exec-startup.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/i386/coreboot/kernel_exec-init.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/i386/pc/kernel_exec-acpi.$(OBJEXT) \ +@@ -11062,7 +11076,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_kernel_exec_OBJECTS = kern/i386/ieee1275/kernel_exec-startup.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ disk/ieee1275/kernel_exec-ofdisk.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/ieee1275/kernel_exec-cmain.$(OBJEXT) \ +@@ -11098,7 +11113,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_kernel_exec_OBJECTS = kern/i386/efi/kernel_exec-startup.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/i386/efi/kernel_exec-tsc.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/i386/kernel_exec-tsc_pmtimer.$(OBJEXT) \ +@@ -11135,7 +11151,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@am_kernel_exec_OBJECTS = kern/i386/coreboot/kernel_exec-startup.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/i386/coreboot/kernel_exec-init.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/i386/pc/kernel_exec-acpi.$(OBJEXT) \ +@@ -11178,7 +11195,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@am_kernel_exec_OBJECTS = disk/kernel_exec-host.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/emu/kernel_exec-cache_s.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/emu/kernel_exec-hostdisk.$(OBJEXT) \ +@@ -11219,7 +11237,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@am_kernel_exec_OBJECTS = kern/arm/kernel_exec-startup.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/arm/uboot/kernel_exec-init.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/arm/uboot/kernel_exec-uboot.$(OBJEXT) \ +@@ -11259,7 +11278,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@am_kernel_exec_OBJECTS = kern/arm/efi/kernel_exec-startup.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/arm/efi/kernel_exec-init.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/efi/kernel_exec-fdt.$(OBJEXT) \ +@@ -11298,7 +11318,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_TRUE@am_kernel_exec_OBJECTS = kern/arm/kernel_exec-startup.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_TRUE@ kern/arm/coreboot/kernel_exec-init.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_TRUE@ kern/arm/coreboot/kernel_exec-timer.$(OBJEXT) \ +@@ -11352,7 +11373,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_FALSE@@COND_arm_coreboot_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_TRUE@am_kernel_exec_OBJECTS = kern/arm64/efi/kernel_exec-startup.$(OBJEXT) \ + @COND_arm64_efi_TRUE@ kern/arm64/efi/kernel_exec-init.$(OBJEXT) \ + @COND_arm64_efi_TRUE@ kern/efi/kernel_exec-fdt.$(OBJEXT) \ +@@ -11388,7 +11410,8 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ + @COND_arm64_efi_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ + @COND_arm64_efi_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +-@COND_arm64_efi_TRUE@ kern/kernel_exec-term.$(OBJEXT) ++@COND_arm64_efi_TRUE@ kern/kernel_exec-term.$(OBJEXT) \ ++@COND_arm64_efi_TRUE@ kern/kernel_exec-verifiers.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@nodist_kernel_exec_OBJECTS = kernel_exec-symlist.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@nodist_kernel_exec_OBJECTS = kernel_exec-symlist.$(OBJEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_TRUE@nodist_kernel_exec_OBJECTS = kernel_exec-symlist.$(OBJEXT) +@@ -13146,13 +13169,6 @@ vbe_module_OBJECTS = $(am_vbe_module_OBJECTS) \ + $(nodist_vbe_module_OBJECTS) + vbe_module_LINK = $(CCLD) $(vbe_module_CFLAGS) $(CFLAGS) \ + $(vbe_module_LDFLAGS) $(LDFLAGS) -o $@ +-am_verifiers_module_OBJECTS = \ +- commands/verifiers_module-verifiers.$(OBJEXT) +-nodist_verifiers_module_OBJECTS = +-verifiers_module_OBJECTS = $(am_verifiers_module_OBJECTS) \ +- $(nodist_verifiers_module_OBJECTS) +-verifiers_module_LINK = $(CCLD) $(verifiers_module_CFLAGS) $(CFLAGS) \ +- $(verifiers_module_LDFLAGS) $(LDFLAGS) -o $@ + am__vga_module_SOURCES_DIST = video/i386/pc/vga.c + @COND_i386_pc_TRUE@am_vga_module_OBJECTS = \ + @COND_i386_pc_TRUE@ video/i386/pc/vga_module-vga.$(OBJEXT) +@@ -13879,7 +13895,6 @@ SOURCES = $(acpi_module_SOURCES) $(nodist_acpi_module_SOURCES) \ + $(nodist_usbserial_usbdebug_module_SOURCES) \ + $(usbtest_module_SOURCES) $(nodist_usbtest_module_SOURCES) \ + $(vbe_module_SOURCES) $(nodist_vbe_module_SOURCES) \ +- $(verifiers_module_SOURCES) $(nodist_verifiers_module_SOURCES) \ + $(vga_module_SOURCES) $(nodist_vga_module_SOURCES) \ + $(vga_text_module_SOURCES) $(nodist_vga_text_module_SOURCES) \ + $(video_module_SOURCES) $(nodist_video_module_SOURCES) \ +@@ -14089,8 +14104,7 @@ DIST_SOURCES = $(am__acpi_module_SOURCES_DIST) \ + $(am__usbserial_pl2303_module_SOURCES_DIST) \ + $(am__usbserial_usbdebug_module_SOURCES_DIST) \ + $(am__usbtest_module_SOURCES_DIST) \ +- $(am__vbe_module_SOURCES_DIST) $(verifiers_module_SOURCES) \ +- $(am__vga_module_SOURCES_DIST) \ ++ $(am__vbe_module_SOURCES_DIST) $(am__vga_module_SOURCES_DIST) \ + $(am__vga_text_module_SOURCES_DIST) \ + $(am__video_module_SOURCES_DIST) \ + $(am__video_bochs_module_SOURCES_DIST) \ +@@ -15497,38 +15511,38 @@ MOD_FILES = disk.mod trig.mod $(am__append_8) $(am__append_15) \ + $(am__append_1989) $(am__append_1996) $(am__append_2003) \ + $(am__append_2010) $(am__append_2017) $(am__append_2024) \ + $(am__append_2031) $(am__append_2038) hashsum.mod pgp.mod \ +- verifiers.mod $(am__append_2045) $(am__append_2052) \ +- $(am__append_2059) $(am__append_2066) $(am__append_2073) \ +- $(am__append_2080) $(am__append_2087) $(am__append_2094) \ +- $(am__append_2101) $(am__append_2108) help.mod hexdump.mod \ +- keystatus.mod $(am__append_2115) $(am__append_2122) \ +- loadenv.mod ls.mod lsmmap.mod $(am__append_2129) \ +- $(am__append_2136) $(am__append_2143) $(am__append_2150) \ +- $(am__append_2157) $(am__append_2164) $(am__append_2171) \ +- $(am__append_2178) memrw.mod minicmd.mod parttool.mod \ +- password.mod password_pbkdf2.mod $(am__append_2185) \ +- $(am__append_2192) $(am__append_2199) $(am__append_2206) \ +- $(am__append_2213) $(am__append_2220) $(am__append_2227) \ +- $(am__append_2234) $(am__append_2241) $(am__append_2248) \ +- $(am__append_2255) $(am__append_2262) $(am__append_2269) \ +- $(am__append_2276) $(am__append_2283) $(am__append_2290) \ +- $(am__append_2297) $(am__append_2304) $(am__append_2311) \ +- $(am__append_2318) $(am__append_2325) probe.mod read.mod \ +- search.mod search_fs_file.mod search_fs_uuid.mod \ +- search_label.mod $(am__append_2332) $(am__append_2339) \ +- $(am__append_2346) $(am__append_2353) $(am__append_2360) \ +- $(am__append_2367) $(am__append_2374) $(am__append_2381) \ +- $(am__append_2388) $(am__append_2395) $(am__append_2402) \ +- $(am__append_2409) $(am__append_2416) $(am__append_2423) \ +- $(am__append_2430) $(am__append_2437) sleep.mod \ +- $(am__append_2444) $(am__append_2451) terminal.mod test.mod \ +- true.mod $(am__append_2458) $(am__append_2465) \ +- $(am__append_2472) $(am__append_2479) $(am__append_2486) \ +- $(am__append_2493) $(am__append_2500) $(am__append_2507) \ +- $(am__append_2514) videoinfo.mod videotest.mod xnu_uuid.mod \ +- dm_nv.mod loopback.mod cryptodisk.mod luks.mod geli.mod \ +- lvm.mod ldm.mod mdraid09.mod mdraid09_be.mod mdraid1x.mod \ +- diskfilter.mod raid5rec.mod raid6rec.mod scsi.mod memdisk.mod \ ++ $(am__append_2045) $(am__append_2052) $(am__append_2059) \ ++ $(am__append_2066) $(am__append_2073) $(am__append_2080) \ ++ $(am__append_2087) $(am__append_2094) $(am__append_2101) \ ++ $(am__append_2108) help.mod hexdump.mod keystatus.mod \ ++ $(am__append_2115) $(am__append_2122) loadenv.mod ls.mod \ ++ lsmmap.mod $(am__append_2129) $(am__append_2136) \ ++ $(am__append_2143) $(am__append_2150) $(am__append_2157) \ ++ $(am__append_2164) $(am__append_2171) $(am__append_2178) \ ++ memrw.mod minicmd.mod parttool.mod password.mod \ ++ password_pbkdf2.mod $(am__append_2185) $(am__append_2192) \ ++ $(am__append_2199) $(am__append_2206) $(am__append_2213) \ ++ $(am__append_2220) $(am__append_2227) $(am__append_2234) \ ++ $(am__append_2241) $(am__append_2248) $(am__append_2255) \ ++ $(am__append_2262) $(am__append_2269) $(am__append_2276) \ ++ $(am__append_2283) $(am__append_2290) $(am__append_2297) \ ++ $(am__append_2304) $(am__append_2311) $(am__append_2318) \ ++ $(am__append_2325) probe.mod read.mod search.mod \ ++ search_fs_file.mod search_fs_uuid.mod search_label.mod \ ++ $(am__append_2332) $(am__append_2339) $(am__append_2346) \ ++ $(am__append_2353) $(am__append_2360) $(am__append_2367) \ ++ $(am__append_2374) $(am__append_2381) $(am__append_2388) \ ++ $(am__append_2395) $(am__append_2402) $(am__append_2409) \ ++ $(am__append_2416) $(am__append_2423) $(am__append_2430) \ ++ $(am__append_2437) sleep.mod $(am__append_2444) \ ++ $(am__append_2451) terminal.mod test.mod true.mod \ ++ $(am__append_2458) $(am__append_2465) $(am__append_2472) \ ++ $(am__append_2479) $(am__append_2486) $(am__append_2493) \ ++ $(am__append_2500) $(am__append_2507) $(am__append_2514) \ ++ videoinfo.mod videotest.mod xnu_uuid.mod dm_nv.mod \ ++ loopback.mod cryptodisk.mod luks.mod geli.mod lvm.mod ldm.mod \ ++ mdraid09.mod mdraid09_be.mod mdraid1x.mod diskfilter.mod \ ++ raid5rec.mod raid6rec.mod scsi.mod memdisk.mod \ + $(am__append_2521) $(am__append_2528) $(am__append_2535) \ + $(am__append_2542) $(am__append_2549) $(am__append_2556) \ + $(am__append_2563) $(am__append_2570) $(am__append_2577) \ +@@ -15809,8 +15823,7 @@ MODULE_FILES = disk.module$(EXEEXT) trig.module$(EXEEXT) \ + $(am__append_1978) $(am__append_1985) $(am__append_1992) \ + $(am__append_1999) $(am__append_2006) $(am__append_2013) \ + $(am__append_2020) $(am__append_2027) $(am__append_2034) \ +- hashsum.module$(EXEEXT) pgp.module$(EXEEXT) \ +- verifiers.module$(EXEEXT) $(am__append_2041) \ ++ hashsum.module$(EXEEXT) pgp.module$(EXEEXT) $(am__append_2041) \ + $(am__append_2048) $(am__append_2055) $(am__append_2062) \ + $(am__append_2069) $(am__append_2076) $(am__append_2083) \ + $(am__append_2090) $(am__append_2097) $(am__append_2104) \ +@@ -16164,7 +16177,7 @@ MARKER_FILES = disk.marker trig.marker $(am__append_9) \ + $(am__append_1983) $(am__append_1990) $(am__append_1997) \ + $(am__append_2004) $(am__append_2011) $(am__append_2018) \ + $(am__append_2025) $(am__append_2032) $(am__append_2039) \ +- hashsum.marker pgp.marker verifiers.marker $(am__append_2046) \ ++ hashsum.marker pgp.marker $(am__append_2046) \ + $(am__append_2053) $(am__append_2060) $(am__append_2067) \ + $(am__append_2074) $(am__append_2081) $(am__append_2088) \ + $(am__append_2095) $(am__append_2102) $(am__append_2109) \ +@@ -16403,6 +16416,7 @@ KERNEL_HEADER_FILES = $(top_srcdir)/include/grub/cache.h \ + $(top_srcdir)/include/grub/partition.h \ + $(top_srcdir)/include/grub/term.h \ + $(top_srcdir)/include/grub/time.h \ ++ $(top_srcdir)/include/grub/verify.h \ + $(top_srcdir)/include/grub/mm_private.h \ + $(top_srcdir)/include/grub/net.h \ + $(top_srcdir)/include/grub/memory.h $(am__append_5803) \ +@@ -16845,12 +16859,11 @@ CLEANFILES = build-grub-pep2elf$(BUILD_EXEEXT) \ + $(am__append_2009) $(am__append_2016) $(am__append_2023) \ + $(am__append_2030) $(am__append_2037) \ + $(nodist_hashsum_module_SOURCES) hashsum.marker \ +- $(nodist_pgp_module_SOURCES) pgp.marker \ +- $(nodist_verifiers_module_SOURCES) verifiers.marker \ +- $(am__append_2044) $(am__append_2051) $(am__append_2058) \ +- $(am__append_2065) $(am__append_2072) $(am__append_2079) \ +- $(am__append_2086) $(am__append_2093) $(am__append_2100) \ +- $(am__append_2107) $(nodist_help_module_SOURCES) help.marker \ ++ $(nodist_pgp_module_SOURCES) pgp.marker $(am__append_2044) \ ++ $(am__append_2051) $(am__append_2058) $(am__append_2065) \ ++ $(am__append_2072) $(am__append_2079) $(am__append_2086) \ ++ $(am__append_2093) $(am__append_2100) $(am__append_2107) \ ++ $(nodist_help_module_SOURCES) help.marker \ + $(nodist_hexdump_module_SOURCES) hexdump.marker \ + $(nodist_keystatus_module_SOURCES) keystatus.marker \ + $(am__append_2114) $(am__append_2121) \ +@@ -17313,11 +17326,11 @@ BUILT_SOURCES = $(nodist_disk_module_SOURCES) \ + $(am__append_2001) $(am__append_2008) $(am__append_2015) \ + $(am__append_2022) $(am__append_2029) $(am__append_2036) \ + $(nodist_hashsum_module_SOURCES) $(nodist_pgp_module_SOURCES) \ +- $(nodist_verifiers_module_SOURCES) $(am__append_2043) \ +- $(am__append_2050) $(am__append_2057) $(am__append_2064) \ +- $(am__append_2071) $(am__append_2078) $(am__append_2085) \ +- $(am__append_2092) $(am__append_2099) $(am__append_2106) \ +- $(nodist_help_module_SOURCES) $(nodist_hexdump_module_SOURCES) \ ++ $(am__append_2043) $(am__append_2050) $(am__append_2057) \ ++ $(am__append_2064) $(am__append_2071) $(am__append_2078) \ ++ $(am__append_2085) $(am__append_2092) $(am__append_2099) \ ++ $(am__append_2106) $(nodist_help_module_SOURCES) \ ++ $(nodist_hexdump_module_SOURCES) \ + $(nodist_keystatus_module_SOURCES) $(am__append_2113) \ + $(am__append_2120) $(nodist_loadenv_module_SOURCES) \ + $(nodist_ls_module_SOURCES) $(nodist_lsmmap_module_SOURCES) \ +@@ -20070,14 +20083,6 @@ pgp_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) + pgp_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -I$(srcdir)/lib/posix_wrap + pgp_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) + pgp_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +-verifiers_module_SOURCES = commands/verifiers.c ## platform sources +-nodist_verifiers_module_SOURCES = ## platform nodist sources +-verifiers_module_LDADD = +-verifiers_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +-verifiers_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +-verifiers_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +-verifiers_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +-verifiers_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_x86_64_efi_TRUE@shim_lock_module_SOURCES = commands/efi/shim_lock.c ## platform sources + @COND_x86_64_efi_TRUE@nodist_shim_lock_module_SOURCES = ## platform nodist sources + @COND_x86_64_efi_TRUE@shim_lock_module_LDADD = +@@ -25629,7 +25634,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_arm64_efi_TRUE@ kern/file.c kern/fs.c kern/list.c \ + @COND_arm64_efi_TRUE@ kern/main.c kern/misc.c kern/parser.c \ + @COND_arm64_efi_TRUE@ kern/partition.c kern/rescue_parser.c \ +-@COND_arm64_efi_TRUE@ kern/rescue_reader.c kern/term.c ++@COND_arm64_efi_TRUE@ kern/rescue_reader.c kern/term.c \ ++@COND_arm64_efi_TRUE@ kern/verifiers.c + @COND_arm_coreboot_TRUE@kernel_exec_SOURCES = kern/arm/startup.S \ + @COND_arm_coreboot_TRUE@ kern/arm/coreboot/init.c \ + @COND_arm_coreboot_TRUE@ kern/arm/coreboot/timer.c \ +@@ -25660,7 +25666,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_arm_coreboot_TRUE@ kern/fs.c kern/list.c kern/main.c \ + @COND_arm_coreboot_TRUE@ kern/misc.c kern/parser.c \ + @COND_arm_coreboot_TRUE@ kern/partition.c kern/rescue_parser.c \ +-@COND_arm_coreboot_TRUE@ kern/rescue_reader.c kern/term.c ++@COND_arm_coreboot_TRUE@ kern/rescue_reader.c kern/term.c \ ++@COND_arm_coreboot_TRUE@ kern/verifiers.c + @COND_arm_efi_TRUE@kernel_exec_SOURCES = kern/arm/efi/startup.S \ + @COND_arm_efi_TRUE@ kern/arm/efi/init.c kern/efi/fdt.c \ + @COND_arm_efi_TRUE@ kern/arm/dl.c kern/arm/dl_helper.c \ +@@ -25678,7 +25685,7 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_arm_efi_TRUE@ kern/fs.c kern/list.c kern/main.c \ + @COND_arm_efi_TRUE@ kern/misc.c kern/parser.c kern/partition.c \ + @COND_arm_efi_TRUE@ kern/rescue_parser.c kern/rescue_reader.c \ +-@COND_arm_efi_TRUE@ kern/term.c ++@COND_arm_efi_TRUE@ kern/term.c kern/verifiers.c + @COND_arm_uboot_TRUE@kernel_exec_SOURCES = kern/arm/startup.S \ + @COND_arm_uboot_TRUE@ kern/arm/uboot/init.c \ + @COND_arm_uboot_TRUE@ kern/arm/uboot/uboot.S \ +@@ -25698,7 +25705,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_arm_uboot_TRUE@ kern/file.c kern/fs.c kern/list.c \ + @COND_arm_uboot_TRUE@ kern/main.c kern/misc.c kern/parser.c \ + @COND_arm_uboot_TRUE@ kern/partition.c kern/rescue_parser.c \ +-@COND_arm_uboot_TRUE@ kern/rescue_reader.c kern/term.c ++@COND_arm_uboot_TRUE@ kern/rescue_reader.c kern/term.c \ ++@COND_arm_uboot_TRUE@ kern/verifiers.c + @COND_emu_TRUE@kernel_exec_SOURCES = disk/host.c kern/emu/cache_s.S \ + @COND_emu_TRUE@ kern/emu/hostdisk.c osdep/unix/hostdisk.c \ + @COND_emu_TRUE@ osdep/exec.c osdep/devmapper/hostdisk.c \ +@@ -25714,7 +25722,7 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_emu_TRUE@ kern/fs.c kern/list.c kern/main.c kern/misc.c \ + @COND_emu_TRUE@ kern/parser.c kern/partition.c \ + @COND_emu_TRUE@ kern/rescue_parser.c kern/rescue_reader.c \ +-@COND_emu_TRUE@ kern/term.c ++@COND_emu_TRUE@ kern/term.c kern/verifiers.c + @COND_i386_coreboot_TRUE@kernel_exec_SOURCES = \ + @COND_i386_coreboot_TRUE@ kern/i386/coreboot/startup.S \ + @COND_i386_coreboot_TRUE@ kern/i386/coreboot/init.c \ +@@ -25739,7 +25747,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_i386_coreboot_TRUE@ kern/fs.c kern/list.c kern/main.c \ + @COND_i386_coreboot_TRUE@ kern/misc.c kern/parser.c \ + @COND_i386_coreboot_TRUE@ kern/partition.c kern/rescue_parser.c \ +-@COND_i386_coreboot_TRUE@ kern/rescue_reader.c kern/term.c ++@COND_i386_coreboot_TRUE@ kern/rescue_reader.c kern/term.c \ ++@COND_i386_coreboot_TRUE@ kern/verifiers.c + @COND_i386_efi_TRUE@kernel_exec_SOURCES = kern/i386/efi/startup.S \ + @COND_i386_efi_TRUE@ kern/i386/efi/tsc.c \ + @COND_i386_efi_TRUE@ kern/i386/tsc_pmtimer.c \ +@@ -25756,7 +25765,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_i386_efi_TRUE@ kern/file.c kern/fs.c kern/list.c \ + @COND_i386_efi_TRUE@ kern/main.c kern/misc.c kern/parser.c \ + @COND_i386_efi_TRUE@ kern/partition.c kern/rescue_parser.c \ +-@COND_i386_efi_TRUE@ kern/rescue_reader.c kern/term.c ++@COND_i386_efi_TRUE@ kern/rescue_reader.c kern/term.c \ ++@COND_i386_efi_TRUE@ kern/verifiers.c + @COND_i386_ieee1275_TRUE@kernel_exec_SOURCES = \ + @COND_i386_ieee1275_TRUE@ kern/i386/ieee1275/startup.S \ + @COND_i386_ieee1275_TRUE@ disk/ieee1275/ofdisk.c \ +@@ -25777,7 +25787,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_i386_ieee1275_TRUE@ kern/fs.c kern/list.c kern/main.c \ + @COND_i386_ieee1275_TRUE@ kern/misc.c kern/parser.c \ + @COND_i386_ieee1275_TRUE@ kern/partition.c kern/rescue_parser.c \ +-@COND_i386_ieee1275_TRUE@ kern/rescue_reader.c kern/term.c ++@COND_i386_ieee1275_TRUE@ kern/rescue_reader.c kern/term.c \ ++@COND_i386_ieee1275_TRUE@ kern/verifiers.c + @COND_i386_multiboot_TRUE@kernel_exec_SOURCES = \ + @COND_i386_multiboot_TRUE@ kern/i386/coreboot/startup.S \ + @COND_i386_multiboot_TRUE@ kern/i386/coreboot/init.c \ +@@ -25796,7 +25807,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_i386_multiboot_TRUE@ kern/misc.c kern/parser.c \ + @COND_i386_multiboot_TRUE@ kern/partition.c \ + @COND_i386_multiboot_TRUE@ kern/rescue_parser.c \ +-@COND_i386_multiboot_TRUE@ kern/rescue_reader.c kern/term.c ++@COND_i386_multiboot_TRUE@ kern/rescue_reader.c kern/term.c \ ++@COND_i386_multiboot_TRUE@ kern/verifiers.c + @COND_i386_pc_TRUE@kernel_exec_SOURCES = kern/i386/pc/startup.S \ + @COND_i386_pc_TRUE@ kern/i386/pc/init.c kern/i386/pc/mmap.c \ + @COND_i386_pc_TRUE@ term/i386/pc/console.c kern/i386/dl.c \ +@@ -25808,7 +25820,7 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_i386_pc_TRUE@ kern/fs.c kern/list.c kern/main.c \ + @COND_i386_pc_TRUE@ kern/misc.c kern/parser.c kern/partition.c \ + @COND_i386_pc_TRUE@ kern/rescue_parser.c kern/rescue_reader.c \ +-@COND_i386_pc_TRUE@ kern/term.c ++@COND_i386_pc_TRUE@ kern/term.c kern/verifiers.c + @COND_i386_qemu_TRUE@kernel_exec_SOURCES = kern/i386/qemu/startup.S \ + @COND_i386_qemu_TRUE@ kern/i386/qemu/init.c bus/pci.c \ + @COND_i386_qemu_TRUE@ kern/vga_init.c kern/i386/qemu/mmap.c \ +@@ -25821,7 +25833,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_i386_qemu_TRUE@ kern/file.c kern/fs.c kern/list.c \ + @COND_i386_qemu_TRUE@ kern/main.c kern/misc.c kern/parser.c \ + @COND_i386_qemu_TRUE@ kern/partition.c kern/rescue_parser.c \ +-@COND_i386_qemu_TRUE@ kern/rescue_reader.c kern/term.c ++@COND_i386_qemu_TRUE@ kern/rescue_reader.c kern/term.c \ ++@COND_i386_qemu_TRUE@ kern/verifiers.c + @COND_i386_xen_TRUE@kernel_exec_SOURCES = kern/i386/xen/startup.S \ + @COND_i386_xen_TRUE@ kern/i386/dl.c kern/i386/xen/hypercall.S \ + @COND_i386_xen_TRUE@ kern/i386/tsc.c kern/i386/xen/tsc.c \ +@@ -25836,7 +25849,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_i386_xen_TRUE@ kern/file.c kern/fs.c kern/list.c \ + @COND_i386_xen_TRUE@ kern/main.c kern/misc.c kern/parser.c \ + @COND_i386_xen_TRUE@ kern/partition.c kern/rescue_parser.c \ +-@COND_i386_xen_TRUE@ kern/rescue_reader.c kern/term.c ++@COND_i386_xen_TRUE@ kern/rescue_reader.c kern/term.c \ ++@COND_i386_xen_TRUE@ kern/verifiers.c + @COND_i386_xen_pvh_TRUE@kernel_exec_SOURCES = \ + @COND_i386_xen_pvh_TRUE@ kern/i386/xen/startup_pvh.S \ + @COND_i386_xen_pvh_TRUE@ kern/i386/dl.c commands/boot.c \ +@@ -25853,7 +25867,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_i386_xen_pvh_TRUE@ kern/fs.c kern/list.c kern/main.c \ + @COND_i386_xen_pvh_TRUE@ kern/misc.c kern/parser.c \ + @COND_i386_xen_pvh_TRUE@ kern/partition.c kern/rescue_parser.c \ +-@COND_i386_xen_pvh_TRUE@ kern/rescue_reader.c kern/term.c ++@COND_i386_xen_pvh_TRUE@ kern/rescue_reader.c kern/term.c \ ++@COND_i386_xen_pvh_TRUE@ kern/verifiers.c + @COND_ia64_efi_TRUE@kernel_exec_SOURCES = kern/ia64/efi/startup.S \ + @COND_ia64_efi_TRUE@ kern/ia64/efi/init.c kern/ia64/dl.c \ + @COND_ia64_efi_TRUE@ kern/ia64/dl_helper.c kern/ia64/cache.c \ +@@ -25868,7 +25883,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_ia64_efi_TRUE@ kern/file.c kern/fs.c kern/list.c \ + @COND_ia64_efi_TRUE@ kern/main.c kern/misc.c kern/parser.c \ + @COND_ia64_efi_TRUE@ kern/partition.c kern/rescue_parser.c \ +-@COND_ia64_efi_TRUE@ kern/rescue_reader.c kern/term.c ++@COND_ia64_efi_TRUE@ kern/rescue_reader.c kern/term.c \ ++@COND_ia64_efi_TRUE@ kern/verifiers.c + @COND_mips_arc_TRUE@kernel_exec_SOURCES = kern/mips/startup.S \ + @COND_mips_arc_TRUE@ kern/mips/arc/init.c term/arc/console.c \ + @COND_mips_arc_TRUE@ disk/arc/arcdisk.c \ +@@ -25883,7 +25899,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_mips_arc_TRUE@ kern/file.c kern/fs.c kern/list.c \ + @COND_mips_arc_TRUE@ kern/main.c kern/misc.c kern/parser.c \ + @COND_mips_arc_TRUE@ kern/partition.c kern/rescue_parser.c \ +-@COND_mips_arc_TRUE@ kern/rescue_reader.c kern/term.c ++@COND_mips_arc_TRUE@ kern/rescue_reader.c kern/term.c \ ++@COND_mips_arc_TRUE@ kern/verifiers.c + @COND_mips_loongson_TRUE@kernel_exec_SOURCES = kern/mips/startup.S \ + @COND_mips_loongson_TRUE@ term/ns8250.c bus/bonito.c \ + @COND_mips_loongson_TRUE@ bus/cs5536.c bus/pci.c \ +@@ -25911,7 +25928,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_mips_loongson_TRUE@ kern/fs.c kern/list.c kern/main.c \ + @COND_mips_loongson_TRUE@ kern/misc.c kern/parser.c \ + @COND_mips_loongson_TRUE@ kern/partition.c kern/rescue_parser.c \ +-@COND_mips_loongson_TRUE@ kern/rescue_reader.c kern/term.c ++@COND_mips_loongson_TRUE@ kern/rescue_reader.c kern/term.c \ ++@COND_mips_loongson_TRUE@ kern/verifiers.c + @COND_mips_qemu_mips_TRUE@kernel_exec_SOURCES = kern/mips/startup.S \ + @COND_mips_qemu_mips_TRUE@ kern/mips/qemu_mips/init.c \ + @COND_mips_qemu_mips_TRUE@ term/ns8250.c term/serial.c \ +@@ -25934,7 +25952,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_mips_qemu_mips_TRUE@ kern/misc.c kern/parser.c \ + @COND_mips_qemu_mips_TRUE@ kern/partition.c \ + @COND_mips_qemu_mips_TRUE@ kern/rescue_parser.c \ +-@COND_mips_qemu_mips_TRUE@ kern/rescue_reader.c kern/term.c ++@COND_mips_qemu_mips_TRUE@ kern/rescue_reader.c kern/term.c \ ++@COND_mips_qemu_mips_TRUE@ kern/verifiers.c + @COND_powerpc_ieee1275_TRUE@kernel_exec_SOURCES = \ + @COND_powerpc_ieee1275_TRUE@ kern/powerpc/ieee1275/startup.S \ + @COND_powerpc_ieee1275_TRUE@ kern/powerpc/cache.S \ +@@ -25959,7 +25978,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_powerpc_ieee1275_TRUE@ kern/main.c kern/misc.c \ + @COND_powerpc_ieee1275_TRUE@ kern/parser.c kern/partition.c \ + @COND_powerpc_ieee1275_TRUE@ kern/rescue_parser.c \ +-@COND_powerpc_ieee1275_TRUE@ kern/rescue_reader.c kern/term.c ++@COND_powerpc_ieee1275_TRUE@ kern/rescue_reader.c kern/term.c \ ++@COND_powerpc_ieee1275_TRUE@ kern/verifiers.c + @COND_riscv32_efi_TRUE@kernel_exec_SOURCES = kern/riscv/efi/startup.S \ + @COND_riscv32_efi_TRUE@ kern/riscv/efi/init.c kern/efi/fdt.c \ + @COND_riscv32_efi_TRUE@ kern/riscv/cache.c \ +@@ -25977,7 +25997,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_riscv32_efi_TRUE@ kern/fs.c kern/list.c kern/main.c \ + @COND_riscv32_efi_TRUE@ kern/misc.c kern/parser.c \ + @COND_riscv32_efi_TRUE@ kern/partition.c kern/rescue_parser.c \ +-@COND_riscv32_efi_TRUE@ kern/rescue_reader.c kern/term.c ++@COND_riscv32_efi_TRUE@ kern/rescue_reader.c kern/term.c \ ++@COND_riscv32_efi_TRUE@ kern/verifiers.c + @COND_riscv64_efi_TRUE@kernel_exec_SOURCES = kern/riscv/efi/startup.S \ + @COND_riscv64_efi_TRUE@ kern/riscv/efi/init.c kern/efi/fdt.c \ + @COND_riscv64_efi_TRUE@ kern/riscv/cache.c \ +@@ -25995,7 +26016,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_riscv64_efi_TRUE@ kern/fs.c kern/list.c kern/main.c \ + @COND_riscv64_efi_TRUE@ kern/misc.c kern/parser.c \ + @COND_riscv64_efi_TRUE@ kern/partition.c kern/rescue_parser.c \ +-@COND_riscv64_efi_TRUE@ kern/rescue_reader.c kern/term.c ++@COND_riscv64_efi_TRUE@ kern/rescue_reader.c kern/term.c \ ++@COND_riscv64_efi_TRUE@ kern/verifiers.c + @COND_sparc64_ieee1275_TRUE@kernel_exec_SOURCES = \ + @COND_sparc64_ieee1275_TRUE@ kern/sparc64/ieee1275/crt0.S \ + @COND_sparc64_ieee1275_TRUE@ kern/sparc64/cache.S \ +@@ -26021,7 +26043,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_sparc64_ieee1275_TRUE@ kern/main.c kern/misc.c \ + @COND_sparc64_ieee1275_TRUE@ kern/parser.c kern/partition.c \ + @COND_sparc64_ieee1275_TRUE@ kern/rescue_parser.c \ +-@COND_sparc64_ieee1275_TRUE@ kern/rescue_reader.c kern/term.c ++@COND_sparc64_ieee1275_TRUE@ kern/rescue_reader.c kern/term.c \ ++@COND_sparc64_ieee1275_TRUE@ kern/verifiers.c + @COND_x86_64_efi_TRUE@kernel_exec_SOURCES = kern/x86_64/efi/startup.S \ + @COND_x86_64_efi_TRUE@ kern/i386/efi/tsc.c \ + @COND_x86_64_efi_TRUE@ kern/i386/tsc_pmtimer.c \ +@@ -26040,7 +26063,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_x86_64_efi_TRUE@ kern/file.c kern/fs.c kern/list.c \ + @COND_x86_64_efi_TRUE@ kern/main.c kern/misc.c kern/parser.c \ + @COND_x86_64_efi_TRUE@ kern/partition.c kern/rescue_parser.c \ +-@COND_x86_64_efi_TRUE@ kern/rescue_reader.c kern/term.c ++@COND_x86_64_efi_TRUE@ kern/rescue_reader.c kern/term.c \ ++@COND_x86_64_efi_TRUE@ kern/verifiers.c + @COND_x86_64_xen_TRUE@kernel_exec_SOURCES = kern/x86_64/xen/startup.S \ + @COND_x86_64_xen_TRUE@ kern/x86_64/dl.c \ + @COND_x86_64_xen_TRUE@ kern/x86_64/xen/hypercall.S \ +@@ -26056,7 +26080,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_x86_64_xen_TRUE@ kern/file.c kern/fs.c kern/list.c \ + @COND_x86_64_xen_TRUE@ kern/main.c kern/misc.c kern/parser.c \ + @COND_x86_64_xen_TRUE@ kern/partition.c kern/rescue_parser.c \ +-@COND_x86_64_xen_TRUE@ kern/rescue_reader.c kern/term.c ++@COND_x86_64_xen_TRUE@ kern/rescue_reader.c kern/term.c \ ++@COND_x86_64_xen_TRUE@ kern/verifiers.c + @COND_arm64_efi_TRUE@nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + @COND_arm_coreboot_TRUE@nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + @COND_arm_efi_TRUE@nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +@@ -28051,6 +28076,8 @@ kern/kernel_exec-rescue_reader.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) + kern/kernel_exec-term.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) ++kern/kernel_exec-verifiers.$(OBJEXT): kern/$(am__dirstamp) \ ++ kern/$(DEPDIR)/$(am__dirstamp) + kern/arm/$(am__dirstamp): + @$(MKDIR_P) kern/arm + @: > kern/arm/$(am__dirstamp) +@@ -30171,12 +30198,6 @@ video/i386/pc/vbe_module-vbe.$(OBJEXT): video/i386/pc/$(am__dirstamp) \ + vbe.module$(EXEEXT): $(vbe_module_OBJECTS) $(vbe_module_DEPENDENCIES) $(EXTRA_vbe_module_DEPENDENCIES) + @rm -f vbe.module$(EXEEXT) + $(AM_V_CCLD)$(vbe_module_LINK) $(vbe_module_OBJECTS) $(vbe_module_LDADD) $(LIBS) +-commands/verifiers_module-verifiers.$(OBJEXT): \ +- commands/$(am__dirstamp) commands/$(DEPDIR)/$(am__dirstamp) +- +-verifiers.module$(EXEEXT): $(verifiers_module_OBJECTS) $(verifiers_module_DEPENDENCIES) $(EXTRA_verifiers_module_DEPENDENCIES) +- @rm -f verifiers.module$(EXEEXT) +- $(AM_V_CCLD)$(verifiers_module_LINK) $(verifiers_module_OBJECTS) $(verifiers_module_LDADD) $(LIBS) + video/i386/pc/vga_module-vga.$(OBJEXT): video/i386/pc/$(am__dirstamp) \ + video/i386/pc/$(DEPDIR)/$(am__dirstamp) + +@@ -30799,7 +30820,6 @@ distclean-compile: + @AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/tr_module-tr.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/true_module-true.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/usbtest_module-usbtest.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/verifiers_module-verifiers.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/videoinfo_module-videoinfo.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/videotest_module-videotest.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/xnu_uuid_module-xnu_uuid.Po@am__quote@ +@@ -30975,6 +30995,7 @@ distclean-compile: + @AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-rescue_reader.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-term.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-time.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-verifiers.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-vga_init.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/xz_decompress_image-compiler-rt.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@kern/arm/$(DEPDIR)/kernel_exec-cache.Po@am__quote@ +@@ -35607,6 +35628,20 @@ kern/kernel_exec-term.obj: kern/term.c + @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ + @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-term.obj `if test -f 'kern/term.c'; then $(CYGPATH_W) 'kern/term.c'; else $(CYGPATH_W) '$(srcdir)/kern/term.c'; fi` + ++kern/kernel_exec-verifiers.o: kern/verifiers.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-verifiers.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-verifiers.Tpo -c -o kern/kernel_exec-verifiers.o `test -f 'kern/verifiers.c' || echo '$(srcdir)/'`kern/verifiers.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-verifiers.Tpo kern/$(DEPDIR)/kernel_exec-verifiers.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/verifiers.c' object='kern/kernel_exec-verifiers.o' libtool=no @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-verifiers.o `test -f 'kern/verifiers.c' || echo '$(srcdir)/'`kern/verifiers.c ++ ++kern/kernel_exec-verifiers.obj: kern/verifiers.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-verifiers.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-verifiers.Tpo -c -o kern/kernel_exec-verifiers.obj `if test -f 'kern/verifiers.c'; then $(CYGPATH_W) 'kern/verifiers.c'; else $(CYGPATH_W) '$(srcdir)/kern/verifiers.c'; fi` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-verifiers.Tpo kern/$(DEPDIR)/kernel_exec-verifiers.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/verifiers.c' object='kern/kernel_exec-verifiers.obj' libtool=no @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-verifiers.obj `if test -f 'kern/verifiers.c'; then $(CYGPATH_W) 'kern/verifiers.c'; else $(CYGPATH_W) '$(srcdir)/kern/verifiers.c'; fi` ++ + kern/arm/coreboot/kernel_exec-init.o: kern/arm/coreboot/init.c + @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/arm/coreboot/kernel_exec-init.o -MD -MP -MF kern/arm/coreboot/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/arm/coreboot/kernel_exec-init.o `test -f 'kern/arm/coreboot/init.c' || echo '$(srcdir)/'`kern/arm/coreboot/init.c + @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/arm/coreboot/$(DEPDIR)/kernel_exec-init.Tpo kern/arm/coreboot/$(DEPDIR)/kernel_exec-init.Po +@@ -40983,20 +41018,6 @@ video/i386/pc/vbe_module-vbe.obj: video/i386/pc/vbe.c + @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ + @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vbe_module_CPPFLAGS) $(CPPFLAGS) $(vbe_module_CFLAGS) $(CFLAGS) -c -o video/i386/pc/vbe_module-vbe.obj `if test -f 'video/i386/pc/vbe.c'; then $(CYGPATH_W) 'video/i386/pc/vbe.c'; else $(CYGPATH_W) '$(srcdir)/video/i386/pc/vbe.c'; fi` + +-commands/verifiers_module-verifiers.o: commands/verifiers.c +-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(verifiers_module_CPPFLAGS) $(CPPFLAGS) $(verifiers_module_CFLAGS) $(CFLAGS) -MT commands/verifiers_module-verifiers.o -MD -MP -MF commands/$(DEPDIR)/verifiers_module-verifiers.Tpo -c -o commands/verifiers_module-verifiers.o `test -f 'commands/verifiers.c' || echo '$(srcdir)/'`commands/verifiers.c +-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/verifiers_module-verifiers.Tpo commands/$(DEPDIR)/verifiers_module-verifiers.Po +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/verifiers.c' object='commands/verifiers_module-verifiers.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(verifiers_module_CPPFLAGS) $(CPPFLAGS) $(verifiers_module_CFLAGS) $(CFLAGS) -c -o commands/verifiers_module-verifiers.o `test -f 'commands/verifiers.c' || echo '$(srcdir)/'`commands/verifiers.c +- +-commands/verifiers_module-verifiers.obj: commands/verifiers.c +-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(verifiers_module_CPPFLAGS) $(CPPFLAGS) $(verifiers_module_CFLAGS) $(CFLAGS) -MT commands/verifiers_module-verifiers.obj -MD -MP -MF commands/$(DEPDIR)/verifiers_module-verifiers.Tpo -c -o commands/verifiers_module-verifiers.obj `if test -f 'commands/verifiers.c'; then $(CYGPATH_W) 'commands/verifiers.c'; else $(CYGPATH_W) '$(srcdir)/commands/verifiers.c'; fi` +-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/verifiers_module-verifiers.Tpo commands/$(DEPDIR)/verifiers_module-verifiers.Po +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/verifiers.c' object='commands/verifiers_module-verifiers.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(verifiers_module_CPPFLAGS) $(CPPFLAGS) $(verifiers_module_CFLAGS) $(CFLAGS) -c -o commands/verifiers_module-verifiers.obj `if test -f 'commands/verifiers.c'; then $(CYGPATH_W) 'commands/verifiers.c'; else $(CYGPATH_W) '$(srcdir)/commands/verifiers.c'; fi` +- + video/i386/pc/vga_module-vga.o: video/i386/pc/vga.c + @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vga_module_CPPFLAGS) $(CPPFLAGS) $(vga_module_CFLAGS) $(CFLAGS) -MT video/i386/pc/vga_module-vga.o -MD -MP -MF video/i386/pc/$(DEPDIR)/vga_module-vga.Tpo -c -o video/i386/pc/vga_module-vga.o `test -f 'video/i386/pc/vga.c' || echo '$(srcdir)/'`video/i386/pc/vga.c + @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/i386/pc/$(DEPDIR)/vga_module-vga.Tpo video/i386/pc/$(DEPDIR)/vga_module-vga.Po +@@ -43717,10 +43738,6 @@ pgp.marker: $(pgp_module_SOURCES) $(nodist_pgp_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pgp_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +-verifiers.marker: $(verifiers_module_SOURCES) $(nodist_verifiers_module_SOURCES) +- $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(verifiers_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +- grep 'MARKER' $@.new > $@; rm -f $@.new +- + @COND_x86_64_efi_TRUE@shim_lock.marker: $(shim_lock_module_SOURCES) $(nodist_shim_lock_module_SOURCES) + @COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(shim_lock_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + @COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new +diff --git a/grub-core/commands/verifiers.c b/grub-core/commands/verifiers.c +deleted file mode 100644 +index 0dde481..0000000 +--- a/grub-core/commands/verifiers.c ++++ /dev/null +@@ -1,228 +0,0 @@ +-/* +- * GRUB -- GRand Unified Bootloader +- * Copyright (C) 2017 Free Software Foundation, Inc. +- * +- * GRUB 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 3 of the License, or +- * (at your option) any later version. +- * +- * GRUB 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 GRUB. If not, see . +- * +- * Verifiers helper. +- */ +- +-#include +-#include +-#include +- +-GRUB_MOD_LICENSE ("GPLv3+"); +- +-struct grub_file_verifier *grub_file_verifiers; +- +-struct grub_verified +-{ +- grub_file_t file; +- void *buf; +-}; +-typedef struct grub_verified *grub_verified_t; +- +-static void +-verified_free (grub_verified_t verified) +-{ +- if (verified) +- { +- grub_free (verified->buf); +- grub_free (verified); +- } +-} +- +-static grub_ssize_t +-verified_read (struct grub_file *file, char *buf, grub_size_t len) +-{ +- grub_verified_t verified = file->data; +- +- grub_memcpy (buf, (char *) verified->buf + file->offset, len); +- return len; +-} +- +-static grub_err_t +-verified_close (struct grub_file *file) +-{ +- grub_verified_t verified = file->data; +- +- grub_file_close (verified->file); +- verified_free (verified); +- file->data = 0; +- +- /* Device and name are freed by parent. */ +- file->device = 0; +- file->name = 0; +- +- return grub_errno; +-} +- +-struct grub_fs verified_fs = +-{ +- .name = "verified_read", +- .fs_read = verified_read, +- .fs_close = verified_close +-}; +- +-static grub_file_t +-grub_verifiers_open (grub_file_t io, enum grub_file_type type) +-{ +- grub_verified_t verified = NULL; +- struct grub_file_verifier *ver; +- void *context; +- grub_file_t ret = 0; +- grub_err_t err; +- int defer = 0; +- +- grub_dprintf ("verify", "file: %s type: %d\n", io->name, type); +- +- if ((type & GRUB_FILE_TYPE_MASK) == GRUB_FILE_TYPE_SIGNATURE +- || (type & GRUB_FILE_TYPE_MASK) == GRUB_FILE_TYPE_VERIFY_SIGNATURE +- || (type & GRUB_FILE_TYPE_SKIP_SIGNATURE)) +- return io; +- +- if (io->device->disk && +- (io->device->disk->dev->id == GRUB_DISK_DEVICE_MEMDISK_ID +- || io->device->disk->dev->id == GRUB_DISK_DEVICE_PROCFS_ID)) +- return io; +- +- FOR_LIST_ELEMENTS(ver, grub_file_verifiers) +- { +- enum grub_verify_flags flags = 0; +- err = ver->init (io, type, &context, &flags); +- if (err) +- goto fail_noclose; +- if (flags & GRUB_VERIFY_FLAGS_DEFER_AUTH) +- { +- defer = 1; +- continue; +- } +- if (!(flags & GRUB_VERIFY_FLAGS_SKIP_VERIFICATION)) +- break; +- } +- +- if (!ver) +- { +- if (defer) +- { +- grub_error (GRUB_ERR_ACCESS_DENIED, +- N_("verification requested but nobody cares: %s"), io->name); +- goto fail_noclose; +- } +- +- /* No verifiers wanted to verify. Just return underlying file. */ +- return io; +- } +- +- ret = grub_malloc (sizeof (*ret)); +- if (!ret) +- { +- goto fail; +- } +- *ret = *io; +- +- ret->fs = &verified_fs; +- ret->not_easily_seekable = 0; +- if (ret->size >> (sizeof (grub_size_t) * GRUB_CHAR_BIT - 1)) +- { +- grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, +- N_("big file signature isn't implemented yet")); +- goto fail; +- } +- verified = grub_malloc (sizeof (*verified)); +- if (!verified) +- { +- goto fail; +- } +- verified->buf = grub_malloc (ret->size); +- if (!verified->buf) +- { +- goto fail; +- } +- if (grub_file_read (io, verified->buf, ret->size) != (grub_ssize_t) ret->size) +- { +- if (!grub_errno) +- grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"), +- io->name); +- goto fail; +- } +- +- err = ver->write (context, verified->buf, ret->size); +- if (err) +- goto fail; +- +- err = ver->fini ? ver->fini (context) : GRUB_ERR_NONE; +- if (err) +- goto fail; +- +- if (ver->close) +- ver->close (context); +- +- FOR_LIST_ELEMENTS_NEXT(ver, grub_file_verifiers) +- { +- enum grub_verify_flags flags = 0; +- err = ver->init (io, type, &context, &flags); +- if (err) +- goto fail_noclose; +- if (flags & GRUB_VERIFY_FLAGS_SKIP_VERIFICATION || +- /* Verification done earlier. So, we are happy here. */ +- flags & GRUB_VERIFY_FLAGS_DEFER_AUTH) +- continue; +- err = ver->write (context, verified->buf, ret->size); +- if (err) +- goto fail; +- +- err = ver->fini ? ver->fini (context) : GRUB_ERR_NONE; +- if (err) +- goto fail; +- +- if (ver->close) +- ver->close (context); +- } +- +- verified->file = io; +- ret->data = verified; +- return ret; +- +- fail: +- ver->close (context); +- fail_noclose: +- verified_free (verified); +- grub_free (ret); +- return NULL; +-} +- +-grub_err_t +-grub_verify_string (char *str, enum grub_verify_string_type type) +-{ +- struct grub_file_verifier *ver; +- FOR_LIST_ELEMENTS(ver, grub_file_verifiers) +- { +- grub_err_t err; +- err = ver->verify_string ? ver->verify_string (str, type) : GRUB_ERR_NONE; +- if (err) +- return err; +- } +- return GRUB_ERR_NONE; +-} +- +-GRUB_MOD_INIT(verifiers) +-{ +- grub_file_filter_register (GRUB_FILE_FILTER_VERIFY, grub_verifiers_open); +-} +- +-GRUB_MOD_FINI(verifiers) +-{ +- grub_file_filter_unregister (GRUB_FILE_FILTER_VERIFY); +-} +diff --git a/grub-core/kern/main.c b/grub-core/kern/main.c +index 9cad0c4..73967e2 100644 +--- a/grub-core/kern/main.c ++++ b/grub-core/kern/main.c +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + + #ifdef GRUB_MACHINE_PCBIOS + #include +@@ -274,6 +275,9 @@ grub_main (void) + grub_printf ("Welcome to GRUB!\n\n"); + grub_setcolorstate (GRUB_TERM_COLOR_STANDARD); + ++ /* Init verifiers API. */ ++ grub_verifiers_init (); ++ + grub_load_config (); + + grub_boot_time ("Before loading embedded modules."); +diff --git a/grub-core/kern/verifiers.c b/grub-core/kern/verifiers.c +new file mode 100644 +index 0000000..aa3dc7c +--- /dev/null ++++ b/grub-core/kern/verifiers.c +@@ -0,0 +1,224 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2017 Free Software Foundation, Inc. ++ * ++ * GRUB 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 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB 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 GRUB. If not, see . ++ * ++ * Verifiers helper. ++ */ ++ ++#include ++#include ++#include ++ ++GRUB_MOD_LICENSE ("GPLv3+"); ++ ++struct grub_file_verifier *grub_file_verifiers; ++ ++struct grub_verified ++{ ++ grub_file_t file; ++ void *buf; ++}; ++typedef struct grub_verified *grub_verified_t; ++ ++static void ++verified_free (grub_verified_t verified) ++{ ++ if (verified) ++ { ++ grub_free (verified->buf); ++ grub_free (verified); ++ } ++} ++ ++static grub_ssize_t ++verified_read (struct grub_file *file, char *buf, grub_size_t len) ++{ ++ grub_verified_t verified = file->data; ++ ++ grub_memcpy (buf, (char *) verified->buf + file->offset, len); ++ return len; ++} ++ ++static grub_err_t ++verified_close (struct grub_file *file) ++{ ++ grub_verified_t verified = file->data; ++ ++ grub_file_close (verified->file); ++ verified_free (verified); ++ file->data = 0; ++ ++ /* Device and name are freed by parent. */ ++ file->device = 0; ++ file->name = 0; ++ ++ return grub_errno; ++} ++ ++struct grub_fs verified_fs = ++{ ++ .name = "verified_read", ++ .fs_read = verified_read, ++ .fs_close = verified_close ++}; ++ ++static grub_file_t ++grub_verifiers_open (grub_file_t io, enum grub_file_type type) ++{ ++ grub_verified_t verified = NULL; ++ struct grub_file_verifier *ver; ++ void *context; ++ grub_file_t ret = 0; ++ grub_err_t err; ++ int defer = 0; ++ ++ grub_dprintf ("verify", "file: %s type: %d\n", io->name, type); ++ ++ if ((type & GRUB_FILE_TYPE_MASK) == GRUB_FILE_TYPE_SIGNATURE ++ || (type & GRUB_FILE_TYPE_MASK) == GRUB_FILE_TYPE_VERIFY_SIGNATURE ++ || (type & GRUB_FILE_TYPE_SKIP_SIGNATURE)) ++ return io; ++ ++ if (io->device->disk && ++ (io->device->disk->dev->id == GRUB_DISK_DEVICE_MEMDISK_ID ++ || io->device->disk->dev->id == GRUB_DISK_DEVICE_PROCFS_ID)) ++ return io; ++ ++ FOR_LIST_ELEMENTS(ver, grub_file_verifiers) ++ { ++ enum grub_verify_flags flags = 0; ++ err = ver->init (io, type, &context, &flags); ++ if (err) ++ goto fail_noclose; ++ if (flags & GRUB_VERIFY_FLAGS_DEFER_AUTH) ++ { ++ defer = 1; ++ continue; ++ } ++ if (!(flags & GRUB_VERIFY_FLAGS_SKIP_VERIFICATION)) ++ break; ++ } ++ ++ if (!ver) ++ { ++ if (defer) ++ { ++ grub_error (GRUB_ERR_ACCESS_DENIED, ++ N_("verification requested but nobody cares: %s"), io->name); ++ goto fail_noclose; ++ } ++ ++ /* No verifiers wanted to verify. Just return underlying file. */ ++ return io; ++ } ++ ++ ret = grub_malloc (sizeof (*ret)); ++ if (!ret) ++ { ++ goto fail; ++ } ++ *ret = *io; ++ ++ ret->fs = &verified_fs; ++ ret->not_easily_seekable = 0; ++ if (ret->size >> (sizeof (grub_size_t) * GRUB_CHAR_BIT - 1)) ++ { ++ grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, ++ N_("big file signature isn't implemented yet")); ++ goto fail; ++ } ++ verified = grub_malloc (sizeof (*verified)); ++ if (!verified) ++ { ++ goto fail; ++ } ++ verified->buf = grub_malloc (ret->size); ++ if (!verified->buf) ++ { ++ goto fail; ++ } ++ if (grub_file_read (io, verified->buf, ret->size) != (grub_ssize_t) ret->size) ++ { ++ if (!grub_errno) ++ grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"), ++ io->name); ++ goto fail; ++ } ++ ++ err = ver->write (context, verified->buf, ret->size); ++ if (err) ++ goto fail; ++ ++ err = ver->fini ? ver->fini (context) : GRUB_ERR_NONE; ++ if (err) ++ goto fail; ++ ++ if (ver->close) ++ ver->close (context); ++ ++ FOR_LIST_ELEMENTS_NEXT(ver, grub_file_verifiers) ++ { ++ enum grub_verify_flags flags = 0; ++ err = ver->init (io, type, &context, &flags); ++ if (err) ++ goto fail_noclose; ++ if (flags & GRUB_VERIFY_FLAGS_SKIP_VERIFICATION || ++ /* Verification done earlier. So, we are happy here. */ ++ flags & GRUB_VERIFY_FLAGS_DEFER_AUTH) ++ continue; ++ err = ver->write (context, verified->buf, ret->size); ++ if (err) ++ goto fail; ++ ++ err = ver->fini ? ver->fini (context) : GRUB_ERR_NONE; ++ if (err) ++ goto fail; ++ ++ if (ver->close) ++ ver->close (context); ++ } ++ ++ verified->file = io; ++ ret->data = verified; ++ return ret; ++ ++ fail: ++ ver->close (context); ++ fail_noclose: ++ verified_free (verified); ++ grub_free (ret); ++ return NULL; ++} ++ ++grub_err_t ++grub_verify_string (char *str, enum grub_verify_string_type type) ++{ ++ struct grub_file_verifier *ver; ++ FOR_LIST_ELEMENTS(ver, grub_file_verifiers) ++ { ++ grub_err_t err; ++ err = ver->verify_string ? ver->verify_string (str, type) : GRUB_ERR_NONE; ++ if (err) ++ return err; ++ } ++ return GRUB_ERR_NONE; ++} ++ ++void ++grub_verifiers_init (void) ++{ ++ grub_file_filter_register (GRUB_FILE_FILTER_VERIFY, grub_verifiers_open); ++} +diff --git a/include/grub/verify.h b/include/grub/verify.h +index ea04914..cd129c3 100644 +--- a/include/grub/verify.h ++++ b/include/grub/verify.h +@@ -64,7 +64,10 @@ struct grub_file_verifier + grub_err_t (*verify_string) (char *str, enum grub_verify_string_type type); + }; + +-extern struct grub_file_verifier *grub_file_verifiers; ++extern struct grub_file_verifier *EXPORT_VAR (grub_file_verifiers); ++ ++extern void ++grub_verifiers_init (void); + + static inline void + grub_verifier_register (struct grub_file_verifier *ver) +@@ -78,7 +81,7 @@ grub_verifier_unregister (struct grub_file_verifier *ver) + grub_list_remove (GRUB_AS_LIST (ver)); + } + +-grub_err_t +-grub_verify_string (char *str, enum grub_verify_string_type type); ++extern grub_err_t ++EXPORT_FUNC (grub_verify_string) (char *str, enum grub_verify_string_type type); + + #endif /* ! GRUB_VERIFY_HEADER */ +diff --git a/po/POTFILES.in b/po/POTFILES.in +index 22543be..11c799f 100644 +--- a/po/POTFILES.in ++++ b/po/POTFILES.in +@@ -107,7 +107,6 @@ + ./grub-core/commands/tr.c + ./grub-core/commands/true.c + ./grub-core/commands/usbtest.c +-./grub-core/commands/verifiers.c + ./grub-core/commands/videoinfo.c + ./grub-core/commands/videotest.c + ./grub-core/commands/wildcard.c +@@ -334,6 +333,7 @@ + ./grub-core/kern/uboot/hw.c + ./grub-core/kern/uboot/init.c + ./grub-core/kern/uboot/uboot.c ++./grub-core/kern/verifiers.c + ./grub-core/kern/vga_init.c + ./grub-core/kern/x86_64/dl.c + ./grub-core/kern/xen/init.c +-- +2.14.2 + diff --git a/boot/grub2/0034-efi-Move-the-shim_lock-verifier-to-the-GRUB-core.patch b/boot/grub2/0034-efi-Move-the-shim_lock-verifier-to-the-GRUB-core.patch new file mode 100644 index 00000000..1b606f4c --- /dev/null +++ b/boot/grub2/0034-efi-Move-the-shim_lock-verifier-to-the-GRUB-core.patch @@ -0,0 +1,13225 @@ +From 5e280caa6530ed160dcf2920c94f1605fb1f1f7c Mon Sep 17 00:00:00 2001 +From: Marco A Benatto +Date: Wed, 23 Sep 2020 14:21:14 -0400 +Subject: [PATCH] efi: Move the shim_lock verifier to the GRUB core + +Move the shim_lock verifier from its own module into the core image. The +Secure Boot lockdown mechanism has the intent to prevent the load of any +unsigned code or binary when Secure Boot is enabled. + +The reason is that GRUB must be able to prevent executing untrusted code +if UEFI Secure Boot is enabled, without depending on external modules. + +Signed-off-by: Marco A Benatto +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +[Add changes to generated files] +Signed-off-by: Stefan Sørensen +--- + docs/grub.texi | 9 +- + grub-core/Makefile.core.am | 23 - + grub-core/Makefile.core.def | 6 - + grub-core/Makefile.in | 11139 +++++++++++++++++------------------ + grub-core/commands/efi/shim_lock.c | 130 - + grub-core/kern/efi/init.c | 4 + + grub-core/kern/efi/sb.c | 105 + + include/grub/efi/sb.h | 3 + + po/POTFILES.in | 1 - + 9 files changed, 5657 insertions(+), 5763 deletions(-) + delete mode 100644 grub-core/commands/efi/shim_lock.c + +diff --git a/docs/grub.texi b/docs/grub.texi +index 8779507..aefe032 100644 +--- a/docs/grub.texi ++++ b/docs/grub.texi +@@ -5747,15 +5747,16 @@ secure boot chain. + @section UEFI secure boot and shim support + + The GRUB, except the @command{chainloader} command, works with the UEFI secure +-boot and the shim. This functionality is provided by the shim_lock module. It +-is recommend to build in this and other required modules into the @file{core.img}. ++boot and the shim. This functionality is provided by the shim_lock verifier. It ++is built into the @file{core.img} and is registered if the UEFI secure boot is ++enabled. ++ + All modules not stored in the @file{core.img} and the ACPI tables for the + @command{acpi} command have to be signed, e.g. using PGP. Additionally, the + @command{iorw}, the @command{memrw} and the @command{wrmsr} commands are + prohibited if the UEFI secure boot is enabled. This is done due to + security reasons. All above mentioned requirements are enforced by the +-shim_lock module. And itself it is a persistent module which means that +-it cannot be unloaded if it was loaded into the memory. ++shim_lock verifier logic. + + @node Measured Boot + @section Measuring boot components +diff --git a/grub-core/Makefile.core.am b/grub-core/Makefile.core.am +index c4d67d4..5623a5e 100644 +--- a/grub-core/Makefile.core.am ++++ b/grub-core/Makefile.core.am +@@ -6954,29 +6954,6 @@ pgp.marker: $(pgp_module_SOURCES) $(nodist_pgp_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pgp_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +-if COND_x86_64_efi +-platform_PROGRAMS += shim_lock.module +-MODULE_FILES += shim_lock.module$(EXEEXT) +-shim_lock_module_SOURCES = commands/efi/shim_lock.c ## platform sources +-nodist_shim_lock_module_SOURCES = ## platform nodist sources +-shim_lock_module_LDADD = +-shim_lock_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +-shim_lock_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +-shim_lock_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +-shim_lock_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +-shim_lock_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +-dist_noinst_DATA += +-BUILT_SOURCES += $(nodist_shim_lock_module_SOURCES) +-CLEANFILES += $(nodist_shim_lock_module_SOURCES) +-MOD_FILES += shim_lock.mod +-MARKER_FILES += shim_lock.marker +-CLEANFILES += shim_lock.marker +- +-shim_lock.marker: $(shim_lock_module_SOURCES) $(nodist_shim_lock_module_SOURCES) +- $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(shim_lock_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +- grep 'MARKER' $@.new > $@; rm -f $@.new +-endif +- + if COND_i386_pc + platform_PROGRAMS += hdparm.module + MODULE_FILES += hdparm.module$(EXEEXT) +diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def +index f6c0348..4d380ed 100644 +--- a/grub-core/Makefile.core.def ++++ b/grub-core/Makefile.core.def +@@ -944,12 +944,6 @@ module = { + cppflags = '-I$(srcdir)/lib/posix_wrap'; + }; + +-module = { +- name = shim_lock; +- common = commands/efi/shim_lock.c; +- enable = x86_64_efi; +-}; +- + module = { + name = hdparm; + common = commands/hdparm.c; +diff --git a/grub-core/Makefile.in b/grub-core/Makefile.in +index 8930714..09dc802 100644 +--- a/grub-core/Makefile.in ++++ b/grub-core/Makefile.in +@@ -205,36 +205,36 @@ platform_PROGRAMS = disk.module$(EXEEXT) trig.module$(EXEEXT) \ + $(am__EXEEXT_293) $(am__EXEEXT_294) $(am__EXEEXT_295) \ + $(am__EXEEXT_296) $(am__EXEEXT_297) $(am__EXEEXT_298) \ + $(am__EXEEXT_299) $(am__EXEEXT_300) $(am__EXEEXT_301) \ +- $(am__EXEEXT_302) help.module$(EXEEXT) hexdump.module$(EXEEXT) \ +- keystatus.module$(EXEEXT) $(am__EXEEXT_303) $(am__EXEEXT_304) \ ++ help.module$(EXEEXT) hexdump.module$(EXEEXT) \ ++ keystatus.module$(EXEEXT) $(am__EXEEXT_302) $(am__EXEEXT_303) \ + loadenv.module$(EXEEXT) ls.module$(EXEEXT) \ +- lsmmap.module$(EXEEXT) $(am__EXEEXT_305) $(am__EXEEXT_306) \ +- $(am__EXEEXT_307) $(am__EXEEXT_308) $(am__EXEEXT_309) \ +- $(am__EXEEXT_310) $(am__EXEEXT_311) $(am__EXEEXT_312) \ ++ lsmmap.module$(EXEEXT) $(am__EXEEXT_304) $(am__EXEEXT_305) \ ++ $(am__EXEEXT_306) $(am__EXEEXT_307) $(am__EXEEXT_308) \ ++ $(am__EXEEXT_309) $(am__EXEEXT_310) $(am__EXEEXT_311) \ + memrw.module$(EXEEXT) minicmd.module$(EXEEXT) \ + parttool.module$(EXEEXT) password.module$(EXEEXT) \ +- password_pbkdf2.module$(EXEEXT) $(am__EXEEXT_313) \ +- $(am__EXEEXT_314) $(am__EXEEXT_315) $(am__EXEEXT_316) \ +- $(am__EXEEXT_317) $(am__EXEEXT_318) $(am__EXEEXT_319) \ +- $(am__EXEEXT_320) $(am__EXEEXT_321) $(am__EXEEXT_322) \ +- $(am__EXEEXT_323) $(am__EXEEXT_324) $(am__EXEEXT_325) \ +- $(am__EXEEXT_326) $(am__EXEEXT_327) $(am__EXEEXT_328) \ +- $(am__EXEEXT_329) $(am__EXEEXT_330) $(am__EXEEXT_331) \ +- $(am__EXEEXT_332) $(am__EXEEXT_333) probe.module$(EXEEXT) \ ++ password_pbkdf2.module$(EXEEXT) $(am__EXEEXT_312) \ ++ $(am__EXEEXT_313) $(am__EXEEXT_314) $(am__EXEEXT_315) \ ++ $(am__EXEEXT_316) $(am__EXEEXT_317) $(am__EXEEXT_318) \ ++ $(am__EXEEXT_319) $(am__EXEEXT_320) $(am__EXEEXT_321) \ ++ $(am__EXEEXT_322) $(am__EXEEXT_323) $(am__EXEEXT_324) \ ++ $(am__EXEEXT_325) $(am__EXEEXT_326) $(am__EXEEXT_327) \ ++ $(am__EXEEXT_328) $(am__EXEEXT_329) $(am__EXEEXT_330) \ ++ $(am__EXEEXT_331) $(am__EXEEXT_332) probe.module$(EXEEXT) \ + read.module$(EXEEXT) search.module$(EXEEXT) \ + search_fs_file.module$(EXEEXT) search_fs_uuid.module$(EXEEXT) \ +- search_label.module$(EXEEXT) $(am__EXEEXT_334) \ +- $(am__EXEEXT_335) $(am__EXEEXT_336) $(am__EXEEXT_337) \ +- $(am__EXEEXT_338) $(am__EXEEXT_339) $(am__EXEEXT_340) \ +- $(am__EXEEXT_341) $(am__EXEEXT_342) $(am__EXEEXT_343) \ +- $(am__EXEEXT_344) $(am__EXEEXT_345) $(am__EXEEXT_346) \ +- $(am__EXEEXT_347) $(am__EXEEXT_348) $(am__EXEEXT_349) \ +- sleep.module$(EXEEXT) $(am__EXEEXT_350) $(am__EXEEXT_351) \ ++ search_label.module$(EXEEXT) $(am__EXEEXT_333) \ ++ $(am__EXEEXT_334) $(am__EXEEXT_335) $(am__EXEEXT_336) \ ++ $(am__EXEEXT_337) $(am__EXEEXT_338) $(am__EXEEXT_339) \ ++ $(am__EXEEXT_340) $(am__EXEEXT_341) $(am__EXEEXT_342) \ ++ $(am__EXEEXT_343) $(am__EXEEXT_344) $(am__EXEEXT_345) \ ++ $(am__EXEEXT_346) $(am__EXEEXT_347) $(am__EXEEXT_348) \ ++ sleep.module$(EXEEXT) $(am__EXEEXT_349) $(am__EXEEXT_350) \ + terminal.module$(EXEEXT) test.module$(EXEEXT) \ +- true.module$(EXEEXT) $(am__EXEEXT_352) $(am__EXEEXT_353) \ +- $(am__EXEEXT_354) $(am__EXEEXT_355) $(am__EXEEXT_356) \ +- $(am__EXEEXT_357) $(am__EXEEXT_358) $(am__EXEEXT_359) \ +- $(am__EXEEXT_360) videoinfo.module$(EXEEXT) \ ++ true.module$(EXEEXT) $(am__EXEEXT_351) $(am__EXEEXT_352) \ ++ $(am__EXEEXT_353) $(am__EXEEXT_354) $(am__EXEEXT_355) \ ++ $(am__EXEEXT_356) $(am__EXEEXT_357) $(am__EXEEXT_358) \ ++ $(am__EXEEXT_359) videoinfo.module$(EXEEXT) \ + videotest.module$(EXEEXT) xnu_uuid.module$(EXEEXT) \ + dm_nv.module$(EXEEXT) loopback.module$(EXEEXT) \ + cryptodisk.module$(EXEEXT) luks.module$(EXEEXT) \ +@@ -242,27 +242,27 @@ platform_PROGRAMS = disk.module$(EXEEXT) trig.module$(EXEEXT) \ + mdraid09.module$(EXEEXT) mdraid09_be.module$(EXEEXT) \ + mdraid1x.module$(EXEEXT) diskfilter.module$(EXEEXT) \ + raid5rec.module$(EXEEXT) raid6rec.module$(EXEEXT) \ +- scsi.module$(EXEEXT) memdisk.module$(EXEEXT) $(am__EXEEXT_361) \ +- $(am__EXEEXT_362) $(am__EXEEXT_363) $(am__EXEEXT_364) \ +- $(am__EXEEXT_365) $(am__EXEEXT_366) $(am__EXEEXT_367) \ +- $(am__EXEEXT_368) $(am__EXEEXT_369) $(am__EXEEXT_370) \ +- $(am__EXEEXT_371) $(am__EXEEXT_372) $(am__EXEEXT_373) \ +- $(am__EXEEXT_374) $(am__EXEEXT_375) $(am__EXEEXT_376) \ +- $(am__EXEEXT_377) $(am__EXEEXT_378) $(am__EXEEXT_379) \ +- $(am__EXEEXT_380) $(am__EXEEXT_381) $(am__EXEEXT_382) \ +- $(am__EXEEXT_383) $(am__EXEEXT_384) $(am__EXEEXT_385) \ +- $(am__EXEEXT_386) $(am__EXEEXT_387) $(am__EXEEXT_388) \ +- $(am__EXEEXT_389) $(am__EXEEXT_390) $(am__EXEEXT_391) \ +- $(am__EXEEXT_392) $(am__EXEEXT_393) $(am__EXEEXT_394) \ +- $(am__EXEEXT_395) $(am__EXEEXT_396) $(am__EXEEXT_397) \ +- $(am__EXEEXT_398) $(am__EXEEXT_399) $(am__EXEEXT_400) \ +- $(am__EXEEXT_401) $(am__EXEEXT_402) $(am__EXEEXT_403) \ +- $(am__EXEEXT_404) $(am__EXEEXT_405) $(am__EXEEXT_406) \ +- $(am__EXEEXT_407) $(am__EXEEXT_408) $(am__EXEEXT_409) \ +- $(am__EXEEXT_410) $(am__EXEEXT_411) $(am__EXEEXT_412) \ +- $(am__EXEEXT_413) $(am__EXEEXT_414) $(am__EXEEXT_415) \ +- $(am__EXEEXT_416) $(am__EXEEXT_417) $(am__EXEEXT_418) \ +- $(am__EXEEXT_419) $(am__EXEEXT_420) $(am__EXEEXT_421) \ ++ scsi.module$(EXEEXT) memdisk.module$(EXEEXT) $(am__EXEEXT_360) \ ++ $(am__EXEEXT_361) $(am__EXEEXT_362) $(am__EXEEXT_363) \ ++ $(am__EXEEXT_364) $(am__EXEEXT_365) $(am__EXEEXT_366) \ ++ $(am__EXEEXT_367) $(am__EXEEXT_368) $(am__EXEEXT_369) \ ++ $(am__EXEEXT_370) $(am__EXEEXT_371) $(am__EXEEXT_372) \ ++ $(am__EXEEXT_373) $(am__EXEEXT_374) $(am__EXEEXT_375) \ ++ $(am__EXEEXT_376) $(am__EXEEXT_377) $(am__EXEEXT_378) \ ++ $(am__EXEEXT_379) $(am__EXEEXT_380) $(am__EXEEXT_381) \ ++ $(am__EXEEXT_382) $(am__EXEEXT_383) $(am__EXEEXT_384) \ ++ $(am__EXEEXT_385) $(am__EXEEXT_386) $(am__EXEEXT_387) \ ++ $(am__EXEEXT_388) $(am__EXEEXT_389) $(am__EXEEXT_390) \ ++ $(am__EXEEXT_391) $(am__EXEEXT_392) $(am__EXEEXT_393) \ ++ $(am__EXEEXT_394) $(am__EXEEXT_395) $(am__EXEEXT_396) \ ++ $(am__EXEEXT_397) $(am__EXEEXT_398) $(am__EXEEXT_399) \ ++ $(am__EXEEXT_400) $(am__EXEEXT_401) $(am__EXEEXT_402) \ ++ $(am__EXEEXT_403) $(am__EXEEXT_404) $(am__EXEEXT_405) \ ++ $(am__EXEEXT_406) $(am__EXEEXT_407) $(am__EXEEXT_408) \ ++ $(am__EXEEXT_409) $(am__EXEEXT_410) $(am__EXEEXT_411) \ ++ $(am__EXEEXT_412) $(am__EXEEXT_413) $(am__EXEEXT_414) \ ++ $(am__EXEEXT_415) $(am__EXEEXT_416) $(am__EXEEXT_417) \ ++ $(am__EXEEXT_418) $(am__EXEEXT_419) $(am__EXEEXT_420) \ + procfs.module$(EXEEXT) affs.module$(EXEEXT) \ + afs.module$(EXEEXT) bfs.module$(EXEEXT) zstd.module$(EXEEXT) \ + btrfs.module$(EXEEXT) archelp.module$(EXEEXT) \ +@@ -284,165 +284,165 @@ platform_PROGRAMS = disk.module$(EXEEXT) trig.module$(EXEEXT) \ + ufs1_be.module$(EXEEXT) ufs2.module$(EXEEXT) \ + xfs.module$(EXEEXT) zfs.module$(EXEEXT) \ + zfscrypt.module$(EXEEXT) zfsinfo.module$(EXEEXT) \ +- macbless.module$(EXEEXT) $(am__EXEEXT_422) \ ++ macbless.module$(EXEEXT) $(am__EXEEXT_421) \ + gettext.module$(EXEEXT) gfxmenu.module$(EXEEXT) \ + hello.module$(EXEEXT) gzio.module$(EXEEXT) \ +- offsetio.module$(EXEEXT) $(am__EXEEXT_423) $(am__EXEEXT_424) \ +- $(am__EXEEXT_425) $(am__EXEEXT_426) $(am__EXEEXT_427) \ +- $(am__EXEEXT_428) $(am__EXEEXT_429) $(am__EXEEXT_430) \ +- $(am__EXEEXT_431) $(am__EXEEXT_432) $(am__EXEEXT_433) \ +- $(am__EXEEXT_434) $(am__EXEEXT_435) $(am__EXEEXT_436) \ +- $(am__EXEEXT_437) $(am__EXEEXT_438) $(am__EXEEXT_439) \ +- $(am__EXEEXT_440) $(am__EXEEXT_441) $(am__EXEEXT_442) \ ++ offsetio.module$(EXEEXT) $(am__EXEEXT_422) $(am__EXEEXT_423) \ ++ $(am__EXEEXT_424) $(am__EXEEXT_425) $(am__EXEEXT_426) \ ++ $(am__EXEEXT_427) $(am__EXEEXT_428) $(am__EXEEXT_429) \ ++ $(am__EXEEXT_430) $(am__EXEEXT_431) $(am__EXEEXT_432) \ ++ $(am__EXEEXT_433) $(am__EXEEXT_434) $(am__EXEEXT_435) \ ++ $(am__EXEEXT_436) $(am__EXEEXT_437) $(am__EXEEXT_438) \ ++ $(am__EXEEXT_439) $(am__EXEEXT_440) $(am__EXEEXT_441) \ + elf.module$(EXEEXT) crypto.module$(EXEEXT) \ +- pbkdf2.module$(EXEEXT) $(am__EXEEXT_443) $(am__EXEEXT_444) \ +- $(am__EXEEXT_445) $(am__EXEEXT_446) $(am__EXEEXT_447) \ +- $(am__EXEEXT_448) $(am__EXEEXT_449) $(am__EXEEXT_450) \ +- $(am__EXEEXT_451) $(am__EXEEXT_452) $(am__EXEEXT_453) \ +- $(am__EXEEXT_454) $(am__EXEEXT_455) $(am__EXEEXT_456) \ +- $(am__EXEEXT_457) $(am__EXEEXT_458) $(am__EXEEXT_459) \ +- $(am__EXEEXT_460) $(am__EXEEXT_461) $(am__EXEEXT_462) \ +- $(am__EXEEXT_463) $(am__EXEEXT_464) $(am__EXEEXT_465) \ +- $(am__EXEEXT_466) $(am__EXEEXT_467) $(am__EXEEXT_468) \ +- $(am__EXEEXT_469) $(am__EXEEXT_470) $(am__EXEEXT_471) \ +- $(am__EXEEXT_472) $(am__EXEEXT_473) $(am__EXEEXT_474) \ +- $(am__EXEEXT_475) $(am__EXEEXT_476) $(am__EXEEXT_477) \ +- $(am__EXEEXT_478) setjmp.module$(EXEEXT) $(am__EXEEXT_479) \ +- $(am__EXEEXT_480) $(am__EXEEXT_481) $(am__EXEEXT_482) \ +- $(am__EXEEXT_483) $(am__EXEEXT_484) $(am__EXEEXT_485) \ +- $(am__EXEEXT_486) $(am__EXEEXT_487) $(am__EXEEXT_488) \ +- $(am__EXEEXT_489) $(am__EXEEXT_490) $(am__EXEEXT_491) \ +- $(am__EXEEXT_492) $(am__EXEEXT_493) $(am__EXEEXT_494) \ +- $(am__EXEEXT_495) $(am__EXEEXT_496) $(am__EXEEXT_497) \ +- $(am__EXEEXT_498) $(am__EXEEXT_499) $(am__EXEEXT_500) \ +- $(am__EXEEXT_501) $(am__EXEEXT_502) $(am__EXEEXT_503) \ +- $(am__EXEEXT_504) $(am__EXEEXT_505) $(am__EXEEXT_506) \ +- $(am__EXEEXT_507) $(am__EXEEXT_508) $(am__EXEEXT_509) \ +- $(am__EXEEXT_510) $(am__EXEEXT_511) $(am__EXEEXT_512) \ +- $(am__EXEEXT_513) $(am__EXEEXT_514) $(am__EXEEXT_515) \ +- $(am__EXEEXT_516) $(am__EXEEXT_517) $(am__EXEEXT_518) \ +- $(am__EXEEXT_519) $(am__EXEEXT_520) $(am__EXEEXT_521) \ +- $(am__EXEEXT_522) $(am__EXEEXT_523) $(am__EXEEXT_524) \ +- $(am__EXEEXT_525) $(am__EXEEXT_526) $(am__EXEEXT_527) \ +- $(am__EXEEXT_528) $(am__EXEEXT_529) $(am__EXEEXT_530) \ +- $(am__EXEEXT_531) $(am__EXEEXT_532) $(am__EXEEXT_533) \ +- $(am__EXEEXT_534) $(am__EXEEXT_535) $(am__EXEEXT_536) \ +- $(am__EXEEXT_537) $(am__EXEEXT_538) $(am__EXEEXT_539) \ +- $(am__EXEEXT_540) $(am__EXEEXT_541) $(am__EXEEXT_542) \ +- $(am__EXEEXT_543) $(am__EXEEXT_544) $(am__EXEEXT_545) \ +- $(am__EXEEXT_546) $(am__EXEEXT_547) $(am__EXEEXT_548) \ +- $(am__EXEEXT_549) $(am__EXEEXT_550) $(am__EXEEXT_551) \ +- $(am__EXEEXT_552) $(am__EXEEXT_553) $(am__EXEEXT_554) \ +- $(am__EXEEXT_555) $(am__EXEEXT_556) macho.module$(EXEEXT) \ +- $(am__EXEEXT_557) $(am__EXEEXT_558) $(am__EXEEXT_559) \ +- $(am__EXEEXT_560) $(am__EXEEXT_561) $(am__EXEEXT_562) \ +- $(am__EXEEXT_563) $(am__EXEEXT_564) $(am__EXEEXT_565) \ +- $(am__EXEEXT_566) $(am__EXEEXT_567) $(am__EXEEXT_568) \ +- $(am__EXEEXT_569) $(am__EXEEXT_570) $(am__EXEEXT_571) \ +- $(am__EXEEXT_572) $(am__EXEEXT_573) $(am__EXEEXT_574) \ +- $(am__EXEEXT_575) $(am__EXEEXT_576) $(am__EXEEXT_577) \ +- $(am__EXEEXT_578) $(am__EXEEXT_579) $(am__EXEEXT_580) \ +- $(am__EXEEXT_581) $(am__EXEEXT_582) $(am__EXEEXT_583) \ ++ pbkdf2.module$(EXEEXT) $(am__EXEEXT_442) $(am__EXEEXT_443) \ ++ $(am__EXEEXT_444) $(am__EXEEXT_445) $(am__EXEEXT_446) \ ++ $(am__EXEEXT_447) $(am__EXEEXT_448) $(am__EXEEXT_449) \ ++ $(am__EXEEXT_450) $(am__EXEEXT_451) $(am__EXEEXT_452) \ ++ $(am__EXEEXT_453) $(am__EXEEXT_454) $(am__EXEEXT_455) \ ++ $(am__EXEEXT_456) $(am__EXEEXT_457) $(am__EXEEXT_458) \ ++ $(am__EXEEXT_459) $(am__EXEEXT_460) $(am__EXEEXT_461) \ ++ $(am__EXEEXT_462) $(am__EXEEXT_463) $(am__EXEEXT_464) \ ++ $(am__EXEEXT_465) $(am__EXEEXT_466) $(am__EXEEXT_467) \ ++ $(am__EXEEXT_468) $(am__EXEEXT_469) $(am__EXEEXT_470) \ ++ $(am__EXEEXT_471) $(am__EXEEXT_472) $(am__EXEEXT_473) \ ++ $(am__EXEEXT_474) $(am__EXEEXT_475) $(am__EXEEXT_476) \ ++ $(am__EXEEXT_477) setjmp.module$(EXEEXT) $(am__EXEEXT_478) \ ++ $(am__EXEEXT_479) $(am__EXEEXT_480) $(am__EXEEXT_481) \ ++ $(am__EXEEXT_482) $(am__EXEEXT_483) $(am__EXEEXT_484) \ ++ $(am__EXEEXT_485) $(am__EXEEXT_486) $(am__EXEEXT_487) \ ++ $(am__EXEEXT_488) $(am__EXEEXT_489) $(am__EXEEXT_490) \ ++ $(am__EXEEXT_491) $(am__EXEEXT_492) $(am__EXEEXT_493) \ ++ $(am__EXEEXT_494) $(am__EXEEXT_495) $(am__EXEEXT_496) \ ++ $(am__EXEEXT_497) $(am__EXEEXT_498) $(am__EXEEXT_499) \ ++ $(am__EXEEXT_500) $(am__EXEEXT_501) $(am__EXEEXT_502) \ ++ $(am__EXEEXT_503) $(am__EXEEXT_504) $(am__EXEEXT_505) \ ++ $(am__EXEEXT_506) $(am__EXEEXT_507) $(am__EXEEXT_508) \ ++ $(am__EXEEXT_509) $(am__EXEEXT_510) $(am__EXEEXT_511) \ ++ $(am__EXEEXT_512) $(am__EXEEXT_513) $(am__EXEEXT_514) \ ++ $(am__EXEEXT_515) $(am__EXEEXT_516) $(am__EXEEXT_517) \ ++ $(am__EXEEXT_518) $(am__EXEEXT_519) $(am__EXEEXT_520) \ ++ $(am__EXEEXT_521) $(am__EXEEXT_522) $(am__EXEEXT_523) \ ++ $(am__EXEEXT_524) $(am__EXEEXT_525) $(am__EXEEXT_526) \ ++ $(am__EXEEXT_527) $(am__EXEEXT_528) $(am__EXEEXT_529) \ ++ $(am__EXEEXT_530) $(am__EXEEXT_531) $(am__EXEEXT_532) \ ++ $(am__EXEEXT_533) $(am__EXEEXT_534) $(am__EXEEXT_535) \ ++ $(am__EXEEXT_536) $(am__EXEEXT_537) $(am__EXEEXT_538) \ ++ $(am__EXEEXT_539) $(am__EXEEXT_540) $(am__EXEEXT_541) \ ++ $(am__EXEEXT_542) $(am__EXEEXT_543) $(am__EXEEXT_544) \ ++ $(am__EXEEXT_545) $(am__EXEEXT_546) $(am__EXEEXT_547) \ ++ $(am__EXEEXT_548) $(am__EXEEXT_549) $(am__EXEEXT_550) \ ++ $(am__EXEEXT_551) $(am__EXEEXT_552) $(am__EXEEXT_553) \ ++ $(am__EXEEXT_554) $(am__EXEEXT_555) macho.module$(EXEEXT) \ ++ $(am__EXEEXT_556) $(am__EXEEXT_557) $(am__EXEEXT_558) \ ++ $(am__EXEEXT_559) $(am__EXEEXT_560) $(am__EXEEXT_561) \ ++ $(am__EXEEXT_562) $(am__EXEEXT_563) $(am__EXEEXT_564) \ ++ $(am__EXEEXT_565) $(am__EXEEXT_566) $(am__EXEEXT_567) \ ++ $(am__EXEEXT_568) $(am__EXEEXT_569) $(am__EXEEXT_570) \ ++ $(am__EXEEXT_571) $(am__EXEEXT_572) $(am__EXEEXT_573) \ ++ $(am__EXEEXT_574) $(am__EXEEXT_575) $(am__EXEEXT_576) \ ++ $(am__EXEEXT_577) $(am__EXEEXT_578) $(am__EXEEXT_579) \ ++ $(am__EXEEXT_580) $(am__EXEEXT_581) $(am__EXEEXT_582) \ + normal.module$(EXEEXT) part_acorn.module$(EXEEXT) \ + part_amiga.module$(EXEEXT) part_apple.module$(EXEEXT) \ + part_gpt.module$(EXEEXT) part_msdos.module$(EXEEXT) \ + part_sun.module$(EXEEXT) part_plan.module$(EXEEXT) \ + part_dvh.module$(EXEEXT) part_bsd.module$(EXEEXT) \ + part_sunpc.module$(EXEEXT) part_dfly.module$(EXEEXT) \ +- msdospart.module$(EXEEXT) $(am__EXEEXT_584) $(am__EXEEXT_585) \ +- $(am__EXEEXT_586) $(am__EXEEXT_587) $(am__EXEEXT_588) \ +- $(am__EXEEXT_589) $(am__EXEEXT_590) $(am__EXEEXT_591) \ +- $(am__EXEEXT_592) $(am__EXEEXT_593) $(am__EXEEXT_594) \ +- $(am__EXEEXT_595) $(am__EXEEXT_596) $(am__EXEEXT_597) \ +- $(am__EXEEXT_598) $(am__EXEEXT_599) $(am__EXEEXT_600) \ +- $(am__EXEEXT_601) $(am__EXEEXT_602) $(am__EXEEXT_603) \ +- $(am__EXEEXT_604) $(am__EXEEXT_605) $(am__EXEEXT_606) \ +- $(am__EXEEXT_607) $(am__EXEEXT_608) $(am__EXEEXT_609) \ +- $(am__EXEEXT_610) gfxterm_background.module$(EXEEXT) \ +- $(am__EXEEXT_611) $(am__EXEEXT_612) $(am__EXEEXT_613) \ +- $(am__EXEEXT_614) $(am__EXEEXT_615) $(am__EXEEXT_616) \ +- $(am__EXEEXT_617) $(am__EXEEXT_618) $(am__EXEEXT_619) \ +- $(am__EXEEXT_620) $(am__EXEEXT_621) $(am__EXEEXT_622) \ +- $(am__EXEEXT_623) $(am__EXEEXT_624) $(am__EXEEXT_625) \ +- $(am__EXEEXT_626) $(am__EXEEXT_627) $(am__EXEEXT_628) \ +- $(am__EXEEXT_629) $(am__EXEEXT_630) $(am__EXEEXT_631) \ +- $(am__EXEEXT_632) $(am__EXEEXT_633) $(am__EXEEXT_634) \ +- $(am__EXEEXT_635) $(am__EXEEXT_636) $(am__EXEEXT_637) \ +- $(am__EXEEXT_638) $(am__EXEEXT_639) $(am__EXEEXT_640) \ +- $(am__EXEEXT_641) $(am__EXEEXT_642) $(am__EXEEXT_643) \ +- $(am__EXEEXT_644) $(am__EXEEXT_645) $(am__EXEEXT_646) \ +- $(am__EXEEXT_647) $(am__EXEEXT_648) $(am__EXEEXT_649) \ +- $(am__EXEEXT_650) $(am__EXEEXT_651) $(am__EXEEXT_652) \ +- $(am__EXEEXT_653) $(am__EXEEXT_654) $(am__EXEEXT_655) \ +- $(am__EXEEXT_656) $(am__EXEEXT_657) $(am__EXEEXT_658) \ +- $(am__EXEEXT_659) $(am__EXEEXT_660) $(am__EXEEXT_661) \ +- $(am__EXEEXT_662) $(am__EXEEXT_663) $(am__EXEEXT_664) \ +- $(am__EXEEXT_665) functional_test.module$(EXEEXT) \ ++ msdospart.module$(EXEEXT) $(am__EXEEXT_583) $(am__EXEEXT_584) \ ++ $(am__EXEEXT_585) $(am__EXEEXT_586) $(am__EXEEXT_587) \ ++ $(am__EXEEXT_588) $(am__EXEEXT_589) $(am__EXEEXT_590) \ ++ $(am__EXEEXT_591) $(am__EXEEXT_592) $(am__EXEEXT_593) \ ++ $(am__EXEEXT_594) $(am__EXEEXT_595) $(am__EXEEXT_596) \ ++ $(am__EXEEXT_597) $(am__EXEEXT_598) $(am__EXEEXT_599) \ ++ $(am__EXEEXT_600) $(am__EXEEXT_601) $(am__EXEEXT_602) \ ++ $(am__EXEEXT_603) $(am__EXEEXT_604) $(am__EXEEXT_605) \ ++ $(am__EXEEXT_606) $(am__EXEEXT_607) $(am__EXEEXT_608) \ ++ $(am__EXEEXT_609) gfxterm_background.module$(EXEEXT) \ ++ $(am__EXEEXT_610) $(am__EXEEXT_611) $(am__EXEEXT_612) \ ++ $(am__EXEEXT_613) $(am__EXEEXT_614) $(am__EXEEXT_615) \ ++ $(am__EXEEXT_616) $(am__EXEEXT_617) $(am__EXEEXT_618) \ ++ $(am__EXEEXT_619) $(am__EXEEXT_620) $(am__EXEEXT_621) \ ++ $(am__EXEEXT_622) $(am__EXEEXT_623) $(am__EXEEXT_624) \ ++ $(am__EXEEXT_625) $(am__EXEEXT_626) $(am__EXEEXT_627) \ ++ $(am__EXEEXT_628) $(am__EXEEXT_629) $(am__EXEEXT_630) \ ++ $(am__EXEEXT_631) $(am__EXEEXT_632) $(am__EXEEXT_633) \ ++ $(am__EXEEXT_634) $(am__EXEEXT_635) $(am__EXEEXT_636) \ ++ $(am__EXEEXT_637) $(am__EXEEXT_638) $(am__EXEEXT_639) \ ++ $(am__EXEEXT_640) $(am__EXEEXT_641) $(am__EXEEXT_642) \ ++ $(am__EXEEXT_643) $(am__EXEEXT_644) $(am__EXEEXT_645) \ ++ $(am__EXEEXT_646) $(am__EXEEXT_647) $(am__EXEEXT_648) \ ++ $(am__EXEEXT_649) $(am__EXEEXT_650) $(am__EXEEXT_651) \ ++ $(am__EXEEXT_652) $(am__EXEEXT_653) $(am__EXEEXT_654) \ ++ $(am__EXEEXT_655) $(am__EXEEXT_656) $(am__EXEEXT_657) \ ++ $(am__EXEEXT_658) $(am__EXEEXT_659) $(am__EXEEXT_660) \ ++ $(am__EXEEXT_661) $(am__EXEEXT_662) $(am__EXEEXT_663) \ ++ $(am__EXEEXT_664) functional_test.module$(EXEEXT) \ + exfctest.module$(EXEEXT) strtoull_test.module$(EXEEXT) \ + setjmp_test.module$(EXEEXT) signature_test.module$(EXEEXT) \ + sleep_test.module$(EXEEXT) xnu_uuid_test.module$(EXEEXT) \ +- pbkdf2_test.module$(EXEEXT) $(am__EXEEXT_666) \ +- $(am__EXEEXT_667) $(am__EXEEXT_668) $(am__EXEEXT_669) \ +- $(am__EXEEXT_670) $(am__EXEEXT_671) $(am__EXEEXT_672) \ +- $(am__EXEEXT_673) $(am__EXEEXT_674) $(am__EXEEXT_675) \ +- $(am__EXEEXT_676) $(am__EXEEXT_677) $(am__EXEEXT_678) \ +- $(am__EXEEXT_679) $(am__EXEEXT_680) $(am__EXEEXT_681) \ +- $(am__EXEEXT_682) $(am__EXEEXT_683) $(am__EXEEXT_684) \ +- $(am__EXEEXT_685) $(am__EXEEXT_686) $(am__EXEEXT_687) \ +- $(am__EXEEXT_688) $(am__EXEEXT_689) $(am__EXEEXT_690) \ ++ pbkdf2_test.module$(EXEEXT) $(am__EXEEXT_665) \ ++ $(am__EXEEXT_666) $(am__EXEEXT_667) $(am__EXEEXT_668) \ ++ $(am__EXEEXT_669) $(am__EXEEXT_670) $(am__EXEEXT_671) \ ++ $(am__EXEEXT_672) $(am__EXEEXT_673) $(am__EXEEXT_674) \ ++ $(am__EXEEXT_675) $(am__EXEEXT_676) $(am__EXEEXT_677) \ ++ $(am__EXEEXT_678) $(am__EXEEXT_679) $(am__EXEEXT_680) \ ++ $(am__EXEEXT_681) $(am__EXEEXT_682) $(am__EXEEXT_683) \ ++ $(am__EXEEXT_684) $(am__EXEEXT_685) $(am__EXEEXT_686) \ ++ $(am__EXEEXT_687) $(am__EXEEXT_688) $(am__EXEEXT_689) \ + div_test.module$(EXEEXT) mul_test.module$(EXEEXT) \ + shift_test.module$(EXEEXT) cmp_test.module$(EXEEXT) \ + ctz_test.module$(EXEEXT) bswap_test.module$(EXEEXT) \ + videotest_checksum.module$(EXEEXT) \ + gfxterm_menu.module$(EXEEXT) cmdline_cat_test.module$(EXEEXT) \ + bitmap.module$(EXEEXT) bitmap_scale.module$(EXEEXT) \ +- $(am__EXEEXT_691) $(am__EXEEXT_692) $(am__EXEEXT_693) \ +- $(am__EXEEXT_694) $(am__EXEEXT_695) $(am__EXEEXT_696) \ +- $(am__EXEEXT_697) $(am__EXEEXT_698) $(am__EXEEXT_699) \ ++ $(am__EXEEXT_690) $(am__EXEEXT_691) $(am__EXEEXT_692) \ ++ $(am__EXEEXT_693) $(am__EXEEXT_694) $(am__EXEEXT_695) \ ++ $(am__EXEEXT_696) $(am__EXEEXT_697) $(am__EXEEXT_698) \ + jpeg.module$(EXEEXT) png.module$(EXEEXT) tga.module$(EXEEXT) \ +- $(am__EXEEXT_700) $(am__EXEEXT_701) $(am__EXEEXT_702) \ +- $(am__EXEEXT_703) $(am__EXEEXT_704) $(am__EXEEXT_705) \ +- $(am__EXEEXT_706) $(am__EXEEXT_707) $(am__EXEEXT_708) \ +- $(am__EXEEXT_709) $(am__EXEEXT_710) $(am__EXEEXT_711) \ +- $(am__EXEEXT_712) $(am__EXEEXT_713) $(am__EXEEXT_714) \ +- $(am__EXEEXT_715) $(am__EXEEXT_716) $(am__EXEEXT_717) \ +- $(am__EXEEXT_718) $(am__EXEEXT_719) $(am__EXEEXT_720) \ +- $(am__EXEEXT_721) $(am__EXEEXT_722) $(am__EXEEXT_723) \ +- $(am__EXEEXT_724) $(am__EXEEXT_725) $(am__EXEEXT_726) \ +- $(am__EXEEXT_727) $(am__EXEEXT_728) $(am__EXEEXT_729) \ +- $(am__EXEEXT_730) $(am__EXEEXT_731) $(am__EXEEXT_732) \ +- $(am__EXEEXT_733) $(am__EXEEXT_734) $(am__EXEEXT_735) \ +- $(am__EXEEXT_736) $(am__EXEEXT_737) $(am__EXEEXT_738) \ +- $(am__EXEEXT_739) $(am__EXEEXT_740) \ +- video_colors.module$(EXEEXT) $(am__EXEEXT_741) \ +- $(am__EXEEXT_742) datehook.module$(EXEEXT) net.module$(EXEEXT) \ +- tftp.module$(EXEEXT) http.module$(EXEEXT) $(am__EXEEXT_743) \ +- $(am__EXEEXT_744) $(am__EXEEXT_745) $(am__EXEEXT_746) \ +- $(am__EXEEXT_747) $(am__EXEEXT_748) $(am__EXEEXT_749) \ +- $(am__EXEEXT_750) $(am__EXEEXT_751) $(am__EXEEXT_752) \ +- $(am__EXEEXT_753) $(am__EXEEXT_754) $(am__EXEEXT_755) \ +- $(am__EXEEXT_756) $(am__EXEEXT_757) $(am__EXEEXT_758) \ +- $(am__EXEEXT_759) $(am__EXEEXT_760) \ ++ $(am__EXEEXT_699) $(am__EXEEXT_700) $(am__EXEEXT_701) \ ++ $(am__EXEEXT_702) $(am__EXEEXT_703) $(am__EXEEXT_704) \ ++ $(am__EXEEXT_705) $(am__EXEEXT_706) $(am__EXEEXT_707) \ ++ $(am__EXEEXT_708) $(am__EXEEXT_709) $(am__EXEEXT_710) \ ++ $(am__EXEEXT_711) $(am__EXEEXT_712) $(am__EXEEXT_713) \ ++ $(am__EXEEXT_714) $(am__EXEEXT_715) $(am__EXEEXT_716) \ ++ $(am__EXEEXT_717) $(am__EXEEXT_718) $(am__EXEEXT_719) \ ++ $(am__EXEEXT_720) $(am__EXEEXT_721) $(am__EXEEXT_722) \ ++ $(am__EXEEXT_723) $(am__EXEEXT_724) $(am__EXEEXT_725) \ ++ $(am__EXEEXT_726) $(am__EXEEXT_727) $(am__EXEEXT_728) \ ++ $(am__EXEEXT_729) $(am__EXEEXT_730) $(am__EXEEXT_731) \ ++ $(am__EXEEXT_732) $(am__EXEEXT_733) $(am__EXEEXT_734) \ ++ $(am__EXEEXT_735) $(am__EXEEXT_736) $(am__EXEEXT_737) \ ++ $(am__EXEEXT_738) $(am__EXEEXT_739) \ ++ video_colors.module$(EXEEXT) $(am__EXEEXT_740) \ ++ $(am__EXEEXT_741) datehook.module$(EXEEXT) net.module$(EXEEXT) \ ++ tftp.module$(EXEEXT) http.module$(EXEEXT) $(am__EXEEXT_742) \ ++ $(am__EXEEXT_743) $(am__EXEEXT_744) $(am__EXEEXT_745) \ ++ $(am__EXEEXT_746) $(am__EXEEXT_747) $(am__EXEEXT_748) \ ++ $(am__EXEEXT_749) $(am__EXEEXT_750) $(am__EXEEXT_751) \ ++ $(am__EXEEXT_752) $(am__EXEEXT_753) $(am__EXEEXT_754) \ ++ $(am__EXEEXT_755) $(am__EXEEXT_756) $(am__EXEEXT_757) \ ++ $(am__EXEEXT_758) $(am__EXEEXT_759) \ + syslinuxcfg.module$(EXEEXT) test_blockarg.module$(EXEEXT) \ + xzio.module$(EXEEXT) lzopio.module$(EXEEXT) \ +- testload.module$(EXEEXT) $(am__EXEEXT_761) $(am__EXEEXT_762) \ +- $(am__EXEEXT_763) $(am__EXEEXT_764) $(am__EXEEXT_765) \ +- $(am__EXEEXT_766) $(am__EXEEXT_767) $(am__EXEEXT_768) \ +- $(am__EXEEXT_769) $(am__EXEEXT_770) $(am__EXEEXT_771) \ +- $(am__EXEEXT_772) $(am__EXEEXT_773) $(am__EXEEXT_774) \ +- $(am__EXEEXT_775) $(am__EXEEXT_776) $(am__EXEEXT_777) \ ++ testload.module$(EXEEXT) $(am__EXEEXT_760) $(am__EXEEXT_761) \ ++ $(am__EXEEXT_762) $(am__EXEEXT_763) $(am__EXEEXT_764) \ ++ $(am__EXEEXT_765) $(am__EXEEXT_766) $(am__EXEEXT_767) \ ++ $(am__EXEEXT_768) $(am__EXEEXT_769) $(am__EXEEXT_770) \ ++ $(am__EXEEXT_771) $(am__EXEEXT_772) $(am__EXEEXT_773) \ ++ $(am__EXEEXT_774) $(am__EXEEXT_775) $(am__EXEEXT_776) \ + priority_queue.module$(EXEEXT) time.module$(EXEEXT) \ +- $(am__EXEEXT_778) $(am__EXEEXT_779) adler32.module$(EXEEXT) \ ++ $(am__EXEEXT_777) $(am__EXEEXT_778) adler32.module$(EXEEXT) \ + crc64.module$(EXEEXT) mpi.module$(EXEEXT) \ +- all_video.module$(EXEEXT) $(am__EXEEXT_780) $(am__EXEEXT_781) \ +- $(am__EXEEXT_782) $(am__EXEEXT_783) $(am__EXEEXT_784) \ +- $(am__EXEEXT_785) testspeed.module$(EXEEXT) $(am__EXEEXT_786) \ ++ all_video.module$(EXEEXT) $(am__EXEEXT_779) $(am__EXEEXT_780) \ ++ $(am__EXEEXT_781) $(am__EXEEXT_782) $(am__EXEEXT_783) \ ++ $(am__EXEEXT_784) testspeed.module$(EXEEXT) $(am__EXEEXT_785) \ + tr.module$(EXEEXT) progress.module$(EXEEXT) \ +- file.module$(EXEEXT) $(am__EXEEXT_787) $(am__EXEEXT_788) \ +- $(am__EXEEXT_789) $(am__EXEEXT_790) $(am__EXEEXT_791) \ +- $(am__EXEEXT_792) $(am__EXEEXT_793) $(am__EXEEXT_794) \ +- $(am__EXEEXT_795) $(am__EXEEXT_796) $(am__EXEEXT_797) \ +- $(am__EXEEXT_798) $(am__EXEEXT_799) $(am__EXEEXT_800) \ ++ file.module$(EXEEXT) $(am__EXEEXT_786) $(am__EXEEXT_787) \ ++ $(am__EXEEXT_788) $(am__EXEEXT_789) $(am__EXEEXT_790) \ ++ $(am__EXEEXT_791) $(am__EXEEXT_792) $(am__EXEEXT_793) \ ++ $(am__EXEEXT_794) $(am__EXEEXT_795) $(am__EXEEXT_796) \ ++ $(am__EXEEXT_797) $(am__EXEEXT_798) $(am__EXEEXT_799) \ + gcry_arcfour.module$(EXEEXT) gcry_blowfish.module$(EXEEXT) \ + gcry_camellia.module$(EXEEXT) gcry_cast5.module$(EXEEXT) \ + gcry_crc.module$(EXEEXT) gcry_des.module$(EXEEXT) \ +@@ -454,19 +454,19 @@ platform_PROGRAMS = disk.module$(EXEEXT) trig.module$(EXEEXT) \ + gcry_sha1.module$(EXEEXT) gcry_sha256.module$(EXEEXT) \ + gcry_sha512.module$(EXEEXT) gcry_tiger.module$(EXEEXT) \ + gcry_twofish.module$(EXEEXT) gcry_whirlpool.module$(EXEEXT) \ +- $(am__EXEEXT_801) $(am__EXEEXT_802) $(am__EXEEXT_803) \ +- $(am__EXEEXT_804) $(am__EXEEXT_805) $(am__EXEEXT_806) \ +- $(am__EXEEXT_807) $(am__EXEEXT_808) $(am__EXEEXT_809) \ +- $(am__EXEEXT_810) $(am__EXEEXT_811) $(am__EXEEXT_812) \ +- $(am__EXEEXT_813) $(am__EXEEXT_814) $(am__EXEEXT_815) \ +- $(am__EXEEXT_816) $(am__EXEEXT_817) $(am__EXEEXT_818) \ +- $(am__EXEEXT_819) $(am__EXEEXT_820) $(am__EXEEXT_821) \ +- $(am__EXEEXT_822) $(am__EXEEXT_823) $(am__EXEEXT_824) \ +- $(am__EXEEXT_825) $(am__EXEEXT_826) $(am__EXEEXT_827) \ +- $(am__EXEEXT_828) $(am__EXEEXT_829) $(am__EXEEXT_830) \ +- $(am__EXEEXT_831) $(am__EXEEXT_832) $(am__EXEEXT_833) \ +- $(am__EXEEXT_834) $(am__EXEEXT_835) $(am__EXEEXT_836) \ +- $(am__EXEEXT_837) $(am__EXEEXT_838) $(am__EXEEXT_839) ++ $(am__EXEEXT_800) $(am__EXEEXT_801) $(am__EXEEXT_802) \ ++ $(am__EXEEXT_803) $(am__EXEEXT_804) $(am__EXEEXT_805) \ ++ $(am__EXEEXT_806) $(am__EXEEXT_807) $(am__EXEEXT_808) \ ++ $(am__EXEEXT_809) $(am__EXEEXT_810) $(am__EXEEXT_811) \ ++ $(am__EXEEXT_812) $(am__EXEEXT_813) $(am__EXEEXT_814) \ ++ $(am__EXEEXT_815) $(am__EXEEXT_816) $(am__EXEEXT_817) \ ++ $(am__EXEEXT_818) $(am__EXEEXT_819) $(am__EXEEXT_820) \ ++ $(am__EXEEXT_821) $(am__EXEEXT_822) $(am__EXEEXT_823) \ ++ $(am__EXEEXT_824) $(am__EXEEXT_825) $(am__EXEEXT_826) \ ++ $(am__EXEEXT_827) $(am__EXEEXT_828) $(am__EXEEXT_829) \ ++ $(am__EXEEXT_830) $(am__EXEEXT_831) $(am__EXEEXT_832) \ ++ $(am__EXEEXT_833) $(am__EXEEXT_834) $(am__EXEEXT_835) \ ++ $(am__EXEEXT_836) $(am__EXEEXT_837) $(am__EXEEXT_838) + TESTS = + @COND_i386_pc_TRUE@am__append_3 = cs5536.module + @COND_i386_pc_TRUE@am__append_4 = cs5536.module$(EXEEXT) +@@ -2996,1864 +2996,1854 @@ TESTS = + @COND_riscv64_efi_TRUE@ reboot.marker + @COND_riscv64_efi_TRUE@am__append_2038 = reboot.mod + @COND_riscv64_efi_TRUE@am__append_2039 = reboot.marker +-@COND_x86_64_efi_TRUE@am__append_2040 = shim_lock.module +-@COND_x86_64_efi_TRUE@am__append_2041 = shim_lock.module$(EXEEXT) +-@COND_x86_64_efi_FALSE@shim_lock_module_DEPENDENCIES = +-@COND_x86_64_efi_TRUE@am__append_2042 = +-@COND_x86_64_efi_TRUE@am__append_2043 = $(nodist_shim_lock_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_2044 = \ +-@COND_x86_64_efi_TRUE@ $(nodist_shim_lock_module_SOURCES) \ +-@COND_x86_64_efi_TRUE@ shim_lock.marker +-@COND_x86_64_efi_TRUE@am__append_2045 = shim_lock.mod +-@COND_x86_64_efi_TRUE@am__append_2046 = shim_lock.marker +-@COND_i386_pc_TRUE@am__append_2047 = hdparm.module +-@COND_i386_pc_TRUE@am__append_2048 = hdparm.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__append_2040 = hdparm.module ++@COND_i386_pc_TRUE@am__append_2041 = hdparm.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_x86_64_efi_FALSE@hdparm_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_2049 = +-@COND_i386_pc_TRUE@am__append_2050 = $(nodist_hdparm_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_2051 = $(nodist_hdparm_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_2042 = ++@COND_i386_pc_TRUE@am__append_2043 = $(nodist_hdparm_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_2044 = $(nodist_hdparm_module_SOURCES) \ + @COND_i386_pc_TRUE@ hdparm.marker +-@COND_i386_pc_TRUE@am__append_2052 = hdparm.mod +-@COND_i386_pc_TRUE@am__append_2053 = hdparm.marker +-@COND_i386_efi_TRUE@am__append_2054 = hdparm.module +-@COND_i386_efi_TRUE@am__append_2055 = hdparm.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_2056 = +-@COND_i386_efi_TRUE@am__append_2057 = $(nodist_hdparm_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_2058 = $(nodist_hdparm_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_2045 = hdparm.mod ++@COND_i386_pc_TRUE@am__append_2046 = hdparm.marker ++@COND_i386_efi_TRUE@am__append_2047 = hdparm.module ++@COND_i386_efi_TRUE@am__append_2048 = hdparm.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_2049 = ++@COND_i386_efi_TRUE@am__append_2050 = $(nodist_hdparm_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_2051 = $(nodist_hdparm_module_SOURCES) \ + @COND_i386_efi_TRUE@ hdparm.marker +-@COND_i386_efi_TRUE@am__append_2059 = hdparm.mod +-@COND_i386_efi_TRUE@am__append_2060 = hdparm.marker +-@COND_i386_qemu_TRUE@am__append_2061 = hdparm.module +-@COND_i386_qemu_TRUE@am__append_2062 = hdparm.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_2063 = +-@COND_i386_qemu_TRUE@am__append_2064 = $(nodist_hdparm_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_2065 = \ ++@COND_i386_efi_TRUE@am__append_2052 = hdparm.mod ++@COND_i386_efi_TRUE@am__append_2053 = hdparm.marker ++@COND_i386_qemu_TRUE@am__append_2054 = hdparm.module ++@COND_i386_qemu_TRUE@am__append_2055 = hdparm.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_2056 = ++@COND_i386_qemu_TRUE@am__append_2057 = $(nodist_hdparm_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_2058 = \ + @COND_i386_qemu_TRUE@ $(nodist_hdparm_module_SOURCES) \ + @COND_i386_qemu_TRUE@ hdparm.marker +-@COND_i386_qemu_TRUE@am__append_2066 = hdparm.mod +-@COND_i386_qemu_TRUE@am__append_2067 = hdparm.marker +-@COND_i386_coreboot_TRUE@am__append_2068 = hdparm.module +-@COND_i386_coreboot_TRUE@am__append_2069 = hdparm.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_2070 = +-@COND_i386_coreboot_TRUE@am__append_2071 = $(nodist_hdparm_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_2072 = \ ++@COND_i386_qemu_TRUE@am__append_2059 = hdparm.mod ++@COND_i386_qemu_TRUE@am__append_2060 = hdparm.marker ++@COND_i386_coreboot_TRUE@am__append_2061 = hdparm.module ++@COND_i386_coreboot_TRUE@am__append_2062 = hdparm.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_2063 = ++@COND_i386_coreboot_TRUE@am__append_2064 = $(nodist_hdparm_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_2065 = \ + @COND_i386_coreboot_TRUE@ $(nodist_hdparm_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ hdparm.marker +-@COND_i386_coreboot_TRUE@am__append_2073 = hdparm.mod +-@COND_i386_coreboot_TRUE@am__append_2074 = hdparm.marker +-@COND_i386_multiboot_TRUE@am__append_2075 = hdparm.module +-@COND_i386_multiboot_TRUE@am__append_2076 = hdparm.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_2077 = +-@COND_i386_multiboot_TRUE@am__append_2078 = $(nodist_hdparm_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_2079 = \ ++@COND_i386_coreboot_TRUE@am__append_2066 = hdparm.mod ++@COND_i386_coreboot_TRUE@am__append_2067 = hdparm.marker ++@COND_i386_multiboot_TRUE@am__append_2068 = hdparm.module ++@COND_i386_multiboot_TRUE@am__append_2069 = hdparm.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_2070 = ++@COND_i386_multiboot_TRUE@am__append_2071 = $(nodist_hdparm_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_2072 = \ + @COND_i386_multiboot_TRUE@ $(nodist_hdparm_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ hdparm.marker +-@COND_i386_multiboot_TRUE@am__append_2080 = hdparm.mod +-@COND_i386_multiboot_TRUE@am__append_2081 = hdparm.marker +-@COND_i386_ieee1275_TRUE@am__append_2082 = hdparm.module +-@COND_i386_ieee1275_TRUE@am__append_2083 = hdparm.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_2084 = +-@COND_i386_ieee1275_TRUE@am__append_2085 = $(nodist_hdparm_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_2086 = \ ++@COND_i386_multiboot_TRUE@am__append_2073 = hdparm.mod ++@COND_i386_multiboot_TRUE@am__append_2074 = hdparm.marker ++@COND_i386_ieee1275_TRUE@am__append_2075 = hdparm.module ++@COND_i386_ieee1275_TRUE@am__append_2076 = hdparm.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_2077 = ++@COND_i386_ieee1275_TRUE@am__append_2078 = $(nodist_hdparm_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_2079 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_hdparm_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ hdparm.marker +-@COND_i386_ieee1275_TRUE@am__append_2087 = hdparm.mod +-@COND_i386_ieee1275_TRUE@am__append_2088 = hdparm.marker +-@COND_x86_64_efi_TRUE@am__append_2089 = hdparm.module +-@COND_x86_64_efi_TRUE@am__append_2090 = hdparm.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_2091 = +-@COND_x86_64_efi_TRUE@am__append_2092 = $(nodist_hdparm_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_2093 = \ ++@COND_i386_ieee1275_TRUE@am__append_2080 = hdparm.mod ++@COND_i386_ieee1275_TRUE@am__append_2081 = hdparm.marker ++@COND_x86_64_efi_TRUE@am__append_2082 = hdparm.module ++@COND_x86_64_efi_TRUE@am__append_2083 = hdparm.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_2084 = ++@COND_x86_64_efi_TRUE@am__append_2085 = $(nodist_hdparm_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_2086 = \ + @COND_x86_64_efi_TRUE@ $(nodist_hdparm_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ hdparm.marker +-@COND_x86_64_efi_TRUE@am__append_2094 = hdparm.mod +-@COND_x86_64_efi_TRUE@am__append_2095 = hdparm.marker +-@COND_mips_loongson_TRUE@am__append_2096 = hdparm.module +-@COND_mips_loongson_TRUE@am__append_2097 = hdparm.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__append_2098 = +-@COND_mips_loongson_TRUE@am__append_2099 = $(nodist_hdparm_module_SOURCES) +-@COND_mips_loongson_TRUE@am__append_2100 = \ ++@COND_x86_64_efi_TRUE@am__append_2087 = hdparm.mod ++@COND_x86_64_efi_TRUE@am__append_2088 = hdparm.marker ++@COND_mips_loongson_TRUE@am__append_2089 = hdparm.module ++@COND_mips_loongson_TRUE@am__append_2090 = hdparm.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__append_2091 = ++@COND_mips_loongson_TRUE@am__append_2092 = $(nodist_hdparm_module_SOURCES) ++@COND_mips_loongson_TRUE@am__append_2093 = \ + @COND_mips_loongson_TRUE@ $(nodist_hdparm_module_SOURCES) \ + @COND_mips_loongson_TRUE@ hdparm.marker +-@COND_mips_loongson_TRUE@am__append_2101 = hdparm.mod +-@COND_mips_loongson_TRUE@am__append_2102 = hdparm.marker +-@COND_mips_qemu_mips_TRUE@am__append_2103 = hdparm.module +-@COND_mips_qemu_mips_TRUE@am__append_2104 = hdparm.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__append_2105 = +-@COND_mips_qemu_mips_TRUE@am__append_2106 = $(nodist_hdparm_module_SOURCES) +-@COND_mips_qemu_mips_TRUE@am__append_2107 = \ ++@COND_mips_loongson_TRUE@am__append_2094 = hdparm.mod ++@COND_mips_loongson_TRUE@am__append_2095 = hdparm.marker ++@COND_mips_qemu_mips_TRUE@am__append_2096 = hdparm.module ++@COND_mips_qemu_mips_TRUE@am__append_2097 = hdparm.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__append_2098 = ++@COND_mips_qemu_mips_TRUE@am__append_2099 = $(nodist_hdparm_module_SOURCES) ++@COND_mips_qemu_mips_TRUE@am__append_2100 = \ + @COND_mips_qemu_mips_TRUE@ $(nodist_hdparm_module_SOURCES) \ + @COND_mips_qemu_mips_TRUE@ hdparm.marker +-@COND_mips_qemu_mips_TRUE@am__append_2108 = hdparm.mod +-@COND_mips_qemu_mips_TRUE@am__append_2109 = hdparm.marker +-@COND_i386_efi_TRUE@am__append_2110 = loadbios.module +-@COND_i386_efi_TRUE@am__append_2111 = loadbios.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__append_2101 = hdparm.mod ++@COND_mips_qemu_mips_TRUE@am__append_2102 = hdparm.marker ++@COND_i386_efi_TRUE@am__append_2103 = loadbios.module ++@COND_i386_efi_TRUE@am__append_2104 = loadbios.module$(EXEEXT) + @COND_i386_efi_FALSE@@COND_x86_64_efi_FALSE@loadbios_module_DEPENDENCIES = +-@COND_i386_efi_TRUE@am__append_2112 = +-@COND_i386_efi_TRUE@am__append_2113 = $(nodist_loadbios_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_2114 = \ ++@COND_i386_efi_TRUE@am__append_2105 = ++@COND_i386_efi_TRUE@am__append_2106 = $(nodist_loadbios_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_2107 = \ + @COND_i386_efi_TRUE@ $(nodist_loadbios_module_SOURCES) \ + @COND_i386_efi_TRUE@ loadbios.marker +-@COND_i386_efi_TRUE@am__append_2115 = loadbios.mod +-@COND_i386_efi_TRUE@am__append_2116 = loadbios.marker +-@COND_x86_64_efi_TRUE@am__append_2117 = loadbios.module +-@COND_x86_64_efi_TRUE@am__append_2118 = loadbios.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_2119 = +-@COND_x86_64_efi_TRUE@am__append_2120 = $(nodist_loadbios_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_2121 = \ ++@COND_i386_efi_TRUE@am__append_2108 = loadbios.mod ++@COND_i386_efi_TRUE@am__append_2109 = loadbios.marker ++@COND_x86_64_efi_TRUE@am__append_2110 = loadbios.module ++@COND_x86_64_efi_TRUE@am__append_2111 = loadbios.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_2112 = ++@COND_x86_64_efi_TRUE@am__append_2113 = $(nodist_loadbios_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_2114 = \ + @COND_x86_64_efi_TRUE@ $(nodist_loadbios_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ loadbios.marker +-@COND_x86_64_efi_TRUE@am__append_2122 = loadbios.mod +-@COND_x86_64_efi_TRUE@am__append_2123 = loadbios.marker +-@COND_i386_pc_TRUE@am__append_2124 = lspci.module +-@COND_i386_pc_TRUE@am__append_2125 = lspci.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_2115 = loadbios.mod ++@COND_x86_64_efi_TRUE@am__append_2116 = loadbios.marker ++@COND_i386_pc_TRUE@am__append_2117 = lspci.module ++@COND_i386_pc_TRUE@am__append_2118 = lspci.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_FALSE@lspci_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_2126 = +-@COND_i386_pc_TRUE@am__append_2127 = $(nodist_lspci_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_2128 = $(nodist_lspci_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_2119 = ++@COND_i386_pc_TRUE@am__append_2120 = $(nodist_lspci_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_2121 = $(nodist_lspci_module_SOURCES) \ + @COND_i386_pc_TRUE@ lspci.marker +-@COND_i386_pc_TRUE@am__append_2129 = lspci.mod +-@COND_i386_pc_TRUE@am__append_2130 = lspci.marker +-@COND_i386_efi_TRUE@am__append_2131 = lspci.module +-@COND_i386_efi_TRUE@am__append_2132 = lspci.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_2133 = +-@COND_i386_efi_TRUE@am__append_2134 = $(nodist_lspci_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_2135 = $(nodist_lspci_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_2122 = lspci.mod ++@COND_i386_pc_TRUE@am__append_2123 = lspci.marker ++@COND_i386_efi_TRUE@am__append_2124 = lspci.module ++@COND_i386_efi_TRUE@am__append_2125 = lspci.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_2126 = ++@COND_i386_efi_TRUE@am__append_2127 = $(nodist_lspci_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_2128 = $(nodist_lspci_module_SOURCES) \ + @COND_i386_efi_TRUE@ lspci.marker +-@COND_i386_efi_TRUE@am__append_2136 = lspci.mod +-@COND_i386_efi_TRUE@am__append_2137 = lspci.marker +-@COND_i386_qemu_TRUE@am__append_2138 = lspci.module +-@COND_i386_qemu_TRUE@am__append_2139 = lspci.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_2140 = +-@COND_i386_qemu_TRUE@am__append_2141 = $(nodist_lspci_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_2142 = $(nodist_lspci_module_SOURCES) \ ++@COND_i386_efi_TRUE@am__append_2129 = lspci.mod ++@COND_i386_efi_TRUE@am__append_2130 = lspci.marker ++@COND_i386_qemu_TRUE@am__append_2131 = lspci.module ++@COND_i386_qemu_TRUE@am__append_2132 = lspci.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_2133 = ++@COND_i386_qemu_TRUE@am__append_2134 = $(nodist_lspci_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_2135 = $(nodist_lspci_module_SOURCES) \ + @COND_i386_qemu_TRUE@ lspci.marker +-@COND_i386_qemu_TRUE@am__append_2143 = lspci.mod +-@COND_i386_qemu_TRUE@am__append_2144 = lspci.marker +-@COND_i386_coreboot_TRUE@am__append_2145 = lspci.module +-@COND_i386_coreboot_TRUE@am__append_2146 = lspci.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_2147 = +-@COND_i386_coreboot_TRUE@am__append_2148 = $(nodist_lspci_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_2149 = \ ++@COND_i386_qemu_TRUE@am__append_2136 = lspci.mod ++@COND_i386_qemu_TRUE@am__append_2137 = lspci.marker ++@COND_i386_coreboot_TRUE@am__append_2138 = lspci.module ++@COND_i386_coreboot_TRUE@am__append_2139 = lspci.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_2140 = ++@COND_i386_coreboot_TRUE@am__append_2141 = $(nodist_lspci_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_2142 = \ + @COND_i386_coreboot_TRUE@ $(nodist_lspci_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ lspci.marker +-@COND_i386_coreboot_TRUE@am__append_2150 = lspci.mod +-@COND_i386_coreboot_TRUE@am__append_2151 = lspci.marker +-@COND_i386_multiboot_TRUE@am__append_2152 = lspci.module +-@COND_i386_multiboot_TRUE@am__append_2153 = lspci.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_2154 = +-@COND_i386_multiboot_TRUE@am__append_2155 = $(nodist_lspci_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_2156 = \ ++@COND_i386_coreboot_TRUE@am__append_2143 = lspci.mod ++@COND_i386_coreboot_TRUE@am__append_2144 = lspci.marker ++@COND_i386_multiboot_TRUE@am__append_2145 = lspci.module ++@COND_i386_multiboot_TRUE@am__append_2146 = lspci.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_2147 = ++@COND_i386_multiboot_TRUE@am__append_2148 = $(nodist_lspci_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_2149 = \ + @COND_i386_multiboot_TRUE@ $(nodist_lspci_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ lspci.marker +-@COND_i386_multiboot_TRUE@am__append_2157 = lspci.mod +-@COND_i386_multiboot_TRUE@am__append_2158 = lspci.marker +-@COND_i386_ieee1275_TRUE@am__append_2159 = lspci.module +-@COND_i386_ieee1275_TRUE@am__append_2160 = lspci.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_2161 = +-@COND_i386_ieee1275_TRUE@am__append_2162 = $(nodist_lspci_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_2163 = \ ++@COND_i386_multiboot_TRUE@am__append_2150 = lspci.mod ++@COND_i386_multiboot_TRUE@am__append_2151 = lspci.marker ++@COND_i386_ieee1275_TRUE@am__append_2152 = lspci.module ++@COND_i386_ieee1275_TRUE@am__append_2153 = lspci.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_2154 = ++@COND_i386_ieee1275_TRUE@am__append_2155 = $(nodist_lspci_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_2156 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_lspci_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ lspci.marker +-@COND_i386_ieee1275_TRUE@am__append_2164 = lspci.mod +-@COND_i386_ieee1275_TRUE@am__append_2165 = lspci.marker +-@COND_x86_64_efi_TRUE@am__append_2166 = lspci.module +-@COND_x86_64_efi_TRUE@am__append_2167 = lspci.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_2168 = +-@COND_x86_64_efi_TRUE@am__append_2169 = $(nodist_lspci_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_2170 = \ ++@COND_i386_ieee1275_TRUE@am__append_2157 = lspci.mod ++@COND_i386_ieee1275_TRUE@am__append_2158 = lspci.marker ++@COND_x86_64_efi_TRUE@am__append_2159 = lspci.module ++@COND_x86_64_efi_TRUE@am__append_2160 = lspci.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_2161 = ++@COND_x86_64_efi_TRUE@am__append_2162 = $(nodist_lspci_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_2163 = \ + @COND_x86_64_efi_TRUE@ $(nodist_lspci_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ lspci.marker +-@COND_x86_64_efi_TRUE@am__append_2171 = lspci.mod +-@COND_x86_64_efi_TRUE@am__append_2172 = lspci.marker +-@COND_mips_loongson_TRUE@am__append_2173 = lspci.module +-@COND_mips_loongson_TRUE@am__append_2174 = lspci.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__append_2175 = +-@COND_mips_loongson_TRUE@am__append_2176 = $(nodist_lspci_module_SOURCES) +-@COND_mips_loongson_TRUE@am__append_2177 = \ ++@COND_x86_64_efi_TRUE@am__append_2164 = lspci.mod ++@COND_x86_64_efi_TRUE@am__append_2165 = lspci.marker ++@COND_mips_loongson_TRUE@am__append_2166 = lspci.module ++@COND_mips_loongson_TRUE@am__append_2167 = lspci.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__append_2168 = ++@COND_mips_loongson_TRUE@am__append_2169 = $(nodist_lspci_module_SOURCES) ++@COND_mips_loongson_TRUE@am__append_2170 = \ + @COND_mips_loongson_TRUE@ $(nodist_lspci_module_SOURCES) \ + @COND_mips_loongson_TRUE@ lspci.marker +-@COND_mips_loongson_TRUE@am__append_2178 = lspci.mod +-@COND_mips_loongson_TRUE@am__append_2179 = lspci.marker +-@COND_i386_pc_TRUE@am__append_2180 = play.module +-@COND_i386_pc_TRUE@am__append_2181 = play.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__append_2171 = lspci.mod ++@COND_mips_loongson_TRUE@am__append_2172 = lspci.marker ++@COND_i386_pc_TRUE@am__append_2173 = play.module ++@COND_i386_pc_TRUE@am__append_2174 = play.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@play_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_2182 = +-@COND_i386_pc_TRUE@am__append_2183 = $(nodist_play_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_2184 = $(nodist_play_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_2175 = ++@COND_i386_pc_TRUE@am__append_2176 = $(nodist_play_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_2177 = $(nodist_play_module_SOURCES) \ + @COND_i386_pc_TRUE@ play.marker +-@COND_i386_pc_TRUE@am__append_2185 = play.mod +-@COND_i386_pc_TRUE@am__append_2186 = play.marker +-@COND_i386_efi_TRUE@am__append_2187 = play.module +-@COND_i386_efi_TRUE@am__append_2188 = play.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_2189 = +-@COND_i386_efi_TRUE@am__append_2190 = $(nodist_play_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_2191 = $(nodist_play_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_2178 = play.mod ++@COND_i386_pc_TRUE@am__append_2179 = play.marker ++@COND_i386_efi_TRUE@am__append_2180 = play.module ++@COND_i386_efi_TRUE@am__append_2181 = play.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_2182 = ++@COND_i386_efi_TRUE@am__append_2183 = $(nodist_play_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_2184 = $(nodist_play_module_SOURCES) \ + @COND_i386_efi_TRUE@ play.marker +-@COND_i386_efi_TRUE@am__append_2192 = play.mod +-@COND_i386_efi_TRUE@am__append_2193 = play.marker +-@COND_i386_qemu_TRUE@am__append_2194 = play.module +-@COND_i386_qemu_TRUE@am__append_2195 = play.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_2196 = +-@COND_i386_qemu_TRUE@am__append_2197 = $(nodist_play_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_2198 = $(nodist_play_module_SOURCES) \ ++@COND_i386_efi_TRUE@am__append_2185 = play.mod ++@COND_i386_efi_TRUE@am__append_2186 = play.marker ++@COND_i386_qemu_TRUE@am__append_2187 = play.module ++@COND_i386_qemu_TRUE@am__append_2188 = play.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_2189 = ++@COND_i386_qemu_TRUE@am__append_2190 = $(nodist_play_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_2191 = $(nodist_play_module_SOURCES) \ + @COND_i386_qemu_TRUE@ play.marker +-@COND_i386_qemu_TRUE@am__append_2199 = play.mod +-@COND_i386_qemu_TRUE@am__append_2200 = play.marker +-@COND_i386_coreboot_TRUE@am__append_2201 = play.module +-@COND_i386_coreboot_TRUE@am__append_2202 = play.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_2203 = +-@COND_i386_coreboot_TRUE@am__append_2204 = $(nodist_play_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_2205 = \ ++@COND_i386_qemu_TRUE@am__append_2192 = play.mod ++@COND_i386_qemu_TRUE@am__append_2193 = play.marker ++@COND_i386_coreboot_TRUE@am__append_2194 = play.module ++@COND_i386_coreboot_TRUE@am__append_2195 = play.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_2196 = ++@COND_i386_coreboot_TRUE@am__append_2197 = $(nodist_play_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_2198 = \ + @COND_i386_coreboot_TRUE@ $(nodist_play_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ play.marker +-@COND_i386_coreboot_TRUE@am__append_2206 = play.mod +-@COND_i386_coreboot_TRUE@am__append_2207 = play.marker +-@COND_i386_multiboot_TRUE@am__append_2208 = play.module +-@COND_i386_multiboot_TRUE@am__append_2209 = play.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_2210 = +-@COND_i386_multiboot_TRUE@am__append_2211 = $(nodist_play_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_2212 = \ ++@COND_i386_coreboot_TRUE@am__append_2199 = play.mod ++@COND_i386_coreboot_TRUE@am__append_2200 = play.marker ++@COND_i386_multiboot_TRUE@am__append_2201 = play.module ++@COND_i386_multiboot_TRUE@am__append_2202 = play.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_2203 = ++@COND_i386_multiboot_TRUE@am__append_2204 = $(nodist_play_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_2205 = \ + @COND_i386_multiboot_TRUE@ $(nodist_play_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ play.marker +-@COND_i386_multiboot_TRUE@am__append_2213 = play.mod +-@COND_i386_multiboot_TRUE@am__append_2214 = play.marker +-@COND_i386_ieee1275_TRUE@am__append_2215 = play.module +-@COND_i386_ieee1275_TRUE@am__append_2216 = play.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_2217 = +-@COND_i386_ieee1275_TRUE@am__append_2218 = $(nodist_play_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_2219 = \ ++@COND_i386_multiboot_TRUE@am__append_2206 = play.mod ++@COND_i386_multiboot_TRUE@am__append_2207 = play.marker ++@COND_i386_ieee1275_TRUE@am__append_2208 = play.module ++@COND_i386_ieee1275_TRUE@am__append_2209 = play.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_2210 = ++@COND_i386_ieee1275_TRUE@am__append_2211 = $(nodist_play_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_2212 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_play_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ play.marker +-@COND_i386_ieee1275_TRUE@am__append_2220 = play.mod +-@COND_i386_ieee1275_TRUE@am__append_2221 = play.marker +-@COND_x86_64_efi_TRUE@am__append_2222 = play.module +-@COND_x86_64_efi_TRUE@am__append_2223 = play.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_2224 = +-@COND_x86_64_efi_TRUE@am__append_2225 = $(nodist_play_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_2226 = $(nodist_play_module_SOURCES) \ ++@COND_i386_ieee1275_TRUE@am__append_2213 = play.mod ++@COND_i386_ieee1275_TRUE@am__append_2214 = play.marker ++@COND_x86_64_efi_TRUE@am__append_2215 = play.module ++@COND_x86_64_efi_TRUE@am__append_2216 = play.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_2217 = ++@COND_x86_64_efi_TRUE@am__append_2218 = $(nodist_play_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_2219 = $(nodist_play_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ play.marker +-@COND_x86_64_efi_TRUE@am__append_2227 = play.mod +-@COND_x86_64_efi_TRUE@am__append_2228 = play.marker +-@COND_i386_pc_TRUE@am__append_2229 = spkmodem.module +-@COND_i386_pc_TRUE@am__append_2230 = spkmodem.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_2220 = play.mod ++@COND_x86_64_efi_TRUE@am__append_2221 = play.marker ++@COND_i386_pc_TRUE@am__append_2222 = spkmodem.module ++@COND_i386_pc_TRUE@am__append_2223 = spkmodem.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@spkmodem_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_2231 = +-@COND_i386_pc_TRUE@am__append_2232 = $(nodist_spkmodem_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_2233 = \ ++@COND_i386_pc_TRUE@am__append_2224 = ++@COND_i386_pc_TRUE@am__append_2225 = $(nodist_spkmodem_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_2226 = \ + @COND_i386_pc_TRUE@ $(nodist_spkmodem_module_SOURCES) \ + @COND_i386_pc_TRUE@ spkmodem.marker +-@COND_i386_pc_TRUE@am__append_2234 = spkmodem.mod +-@COND_i386_pc_TRUE@am__append_2235 = spkmodem.marker +-@COND_i386_efi_TRUE@am__append_2236 = spkmodem.module +-@COND_i386_efi_TRUE@am__append_2237 = spkmodem.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_2238 = +-@COND_i386_efi_TRUE@am__append_2239 = $(nodist_spkmodem_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_2240 = \ ++@COND_i386_pc_TRUE@am__append_2227 = spkmodem.mod ++@COND_i386_pc_TRUE@am__append_2228 = spkmodem.marker ++@COND_i386_efi_TRUE@am__append_2229 = spkmodem.module ++@COND_i386_efi_TRUE@am__append_2230 = spkmodem.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_2231 = ++@COND_i386_efi_TRUE@am__append_2232 = $(nodist_spkmodem_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_2233 = \ + @COND_i386_efi_TRUE@ $(nodist_spkmodem_module_SOURCES) \ + @COND_i386_efi_TRUE@ spkmodem.marker +-@COND_i386_efi_TRUE@am__append_2241 = spkmodem.mod +-@COND_i386_efi_TRUE@am__append_2242 = spkmodem.marker +-@COND_i386_qemu_TRUE@am__append_2243 = spkmodem.module +-@COND_i386_qemu_TRUE@am__append_2244 = spkmodem.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_2245 = +-@COND_i386_qemu_TRUE@am__append_2246 = $(nodist_spkmodem_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_2247 = \ ++@COND_i386_efi_TRUE@am__append_2234 = spkmodem.mod ++@COND_i386_efi_TRUE@am__append_2235 = spkmodem.marker ++@COND_i386_qemu_TRUE@am__append_2236 = spkmodem.module ++@COND_i386_qemu_TRUE@am__append_2237 = spkmodem.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_2238 = ++@COND_i386_qemu_TRUE@am__append_2239 = $(nodist_spkmodem_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_2240 = \ + @COND_i386_qemu_TRUE@ $(nodist_spkmodem_module_SOURCES) \ + @COND_i386_qemu_TRUE@ spkmodem.marker +-@COND_i386_qemu_TRUE@am__append_2248 = spkmodem.mod +-@COND_i386_qemu_TRUE@am__append_2249 = spkmodem.marker +-@COND_i386_coreboot_TRUE@am__append_2250 = spkmodem.module +-@COND_i386_coreboot_TRUE@am__append_2251 = spkmodem.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_2252 = +-@COND_i386_coreboot_TRUE@am__append_2253 = $(nodist_spkmodem_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_2254 = \ ++@COND_i386_qemu_TRUE@am__append_2241 = spkmodem.mod ++@COND_i386_qemu_TRUE@am__append_2242 = spkmodem.marker ++@COND_i386_coreboot_TRUE@am__append_2243 = spkmodem.module ++@COND_i386_coreboot_TRUE@am__append_2244 = spkmodem.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_2245 = ++@COND_i386_coreboot_TRUE@am__append_2246 = $(nodist_spkmodem_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_2247 = \ + @COND_i386_coreboot_TRUE@ $(nodist_spkmodem_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ spkmodem.marker +-@COND_i386_coreboot_TRUE@am__append_2255 = spkmodem.mod +-@COND_i386_coreboot_TRUE@am__append_2256 = spkmodem.marker +-@COND_i386_multiboot_TRUE@am__append_2257 = spkmodem.module +-@COND_i386_multiboot_TRUE@am__append_2258 = spkmodem.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_2259 = +-@COND_i386_multiboot_TRUE@am__append_2260 = $(nodist_spkmodem_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_2261 = \ ++@COND_i386_coreboot_TRUE@am__append_2248 = spkmodem.mod ++@COND_i386_coreboot_TRUE@am__append_2249 = spkmodem.marker ++@COND_i386_multiboot_TRUE@am__append_2250 = spkmodem.module ++@COND_i386_multiboot_TRUE@am__append_2251 = spkmodem.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_2252 = ++@COND_i386_multiboot_TRUE@am__append_2253 = $(nodist_spkmodem_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_2254 = \ + @COND_i386_multiboot_TRUE@ $(nodist_spkmodem_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ spkmodem.marker +-@COND_i386_multiboot_TRUE@am__append_2262 = spkmodem.mod +-@COND_i386_multiboot_TRUE@am__append_2263 = spkmodem.marker +-@COND_i386_ieee1275_TRUE@am__append_2264 = spkmodem.module +-@COND_i386_ieee1275_TRUE@am__append_2265 = spkmodem.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_2266 = +-@COND_i386_ieee1275_TRUE@am__append_2267 = $(nodist_spkmodem_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_2268 = \ ++@COND_i386_multiboot_TRUE@am__append_2255 = spkmodem.mod ++@COND_i386_multiboot_TRUE@am__append_2256 = spkmodem.marker ++@COND_i386_ieee1275_TRUE@am__append_2257 = spkmodem.module ++@COND_i386_ieee1275_TRUE@am__append_2258 = spkmodem.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_2259 = ++@COND_i386_ieee1275_TRUE@am__append_2260 = $(nodist_spkmodem_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_2261 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_spkmodem_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ spkmodem.marker +-@COND_i386_ieee1275_TRUE@am__append_2269 = spkmodem.mod +-@COND_i386_ieee1275_TRUE@am__append_2270 = spkmodem.marker +-@COND_x86_64_efi_TRUE@am__append_2271 = spkmodem.module +-@COND_x86_64_efi_TRUE@am__append_2272 = spkmodem.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_2273 = +-@COND_x86_64_efi_TRUE@am__append_2274 = $(nodist_spkmodem_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_2275 = \ ++@COND_i386_ieee1275_TRUE@am__append_2262 = spkmodem.mod ++@COND_i386_ieee1275_TRUE@am__append_2263 = spkmodem.marker ++@COND_x86_64_efi_TRUE@am__append_2264 = spkmodem.module ++@COND_x86_64_efi_TRUE@am__append_2265 = spkmodem.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_2266 = ++@COND_x86_64_efi_TRUE@am__append_2267 = $(nodist_spkmodem_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_2268 = \ + @COND_x86_64_efi_TRUE@ $(nodist_spkmodem_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ spkmodem.marker +-@COND_x86_64_efi_TRUE@am__append_2276 = spkmodem.mod +-@COND_x86_64_efi_TRUE@am__append_2277 = spkmodem.marker +-@COND_i386_pc_TRUE@am__append_2278 = morse.module +-@COND_i386_pc_TRUE@am__append_2279 = morse.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_2269 = spkmodem.mod ++@COND_x86_64_efi_TRUE@am__append_2270 = spkmodem.marker ++@COND_i386_pc_TRUE@am__append_2271 = morse.module ++@COND_i386_pc_TRUE@am__append_2272 = morse.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@morse_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_2280 = +-@COND_i386_pc_TRUE@am__append_2281 = $(nodist_morse_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_2282 = $(nodist_morse_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_2273 = ++@COND_i386_pc_TRUE@am__append_2274 = $(nodist_morse_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_2275 = $(nodist_morse_module_SOURCES) \ + @COND_i386_pc_TRUE@ morse.marker +-@COND_i386_pc_TRUE@am__append_2283 = morse.mod +-@COND_i386_pc_TRUE@am__append_2284 = morse.marker +-@COND_i386_efi_TRUE@am__append_2285 = morse.module +-@COND_i386_efi_TRUE@am__append_2286 = morse.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_2287 = +-@COND_i386_efi_TRUE@am__append_2288 = $(nodist_morse_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_2289 = $(nodist_morse_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_2276 = morse.mod ++@COND_i386_pc_TRUE@am__append_2277 = morse.marker ++@COND_i386_efi_TRUE@am__append_2278 = morse.module ++@COND_i386_efi_TRUE@am__append_2279 = morse.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_2280 = ++@COND_i386_efi_TRUE@am__append_2281 = $(nodist_morse_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_2282 = $(nodist_morse_module_SOURCES) \ + @COND_i386_efi_TRUE@ morse.marker +-@COND_i386_efi_TRUE@am__append_2290 = morse.mod +-@COND_i386_efi_TRUE@am__append_2291 = morse.marker +-@COND_i386_qemu_TRUE@am__append_2292 = morse.module +-@COND_i386_qemu_TRUE@am__append_2293 = morse.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_2294 = +-@COND_i386_qemu_TRUE@am__append_2295 = $(nodist_morse_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_2296 = $(nodist_morse_module_SOURCES) \ ++@COND_i386_efi_TRUE@am__append_2283 = morse.mod ++@COND_i386_efi_TRUE@am__append_2284 = morse.marker ++@COND_i386_qemu_TRUE@am__append_2285 = morse.module ++@COND_i386_qemu_TRUE@am__append_2286 = morse.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_2287 = ++@COND_i386_qemu_TRUE@am__append_2288 = $(nodist_morse_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_2289 = $(nodist_morse_module_SOURCES) \ + @COND_i386_qemu_TRUE@ morse.marker +-@COND_i386_qemu_TRUE@am__append_2297 = morse.mod +-@COND_i386_qemu_TRUE@am__append_2298 = morse.marker +-@COND_i386_coreboot_TRUE@am__append_2299 = morse.module +-@COND_i386_coreboot_TRUE@am__append_2300 = morse.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_2301 = +-@COND_i386_coreboot_TRUE@am__append_2302 = $(nodist_morse_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_2303 = \ ++@COND_i386_qemu_TRUE@am__append_2290 = morse.mod ++@COND_i386_qemu_TRUE@am__append_2291 = morse.marker ++@COND_i386_coreboot_TRUE@am__append_2292 = morse.module ++@COND_i386_coreboot_TRUE@am__append_2293 = morse.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_2294 = ++@COND_i386_coreboot_TRUE@am__append_2295 = $(nodist_morse_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_2296 = \ + @COND_i386_coreboot_TRUE@ $(nodist_morse_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ morse.marker +-@COND_i386_coreboot_TRUE@am__append_2304 = morse.mod +-@COND_i386_coreboot_TRUE@am__append_2305 = morse.marker +-@COND_i386_multiboot_TRUE@am__append_2306 = morse.module +-@COND_i386_multiboot_TRUE@am__append_2307 = morse.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_2308 = +-@COND_i386_multiboot_TRUE@am__append_2309 = $(nodist_morse_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_2310 = \ ++@COND_i386_coreboot_TRUE@am__append_2297 = morse.mod ++@COND_i386_coreboot_TRUE@am__append_2298 = morse.marker ++@COND_i386_multiboot_TRUE@am__append_2299 = morse.module ++@COND_i386_multiboot_TRUE@am__append_2300 = morse.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_2301 = ++@COND_i386_multiboot_TRUE@am__append_2302 = $(nodist_morse_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_2303 = \ + @COND_i386_multiboot_TRUE@ $(nodist_morse_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ morse.marker +-@COND_i386_multiboot_TRUE@am__append_2311 = morse.mod +-@COND_i386_multiboot_TRUE@am__append_2312 = morse.marker +-@COND_i386_ieee1275_TRUE@am__append_2313 = morse.module +-@COND_i386_ieee1275_TRUE@am__append_2314 = morse.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_2315 = +-@COND_i386_ieee1275_TRUE@am__append_2316 = $(nodist_morse_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_2317 = \ ++@COND_i386_multiboot_TRUE@am__append_2304 = morse.mod ++@COND_i386_multiboot_TRUE@am__append_2305 = morse.marker ++@COND_i386_ieee1275_TRUE@am__append_2306 = morse.module ++@COND_i386_ieee1275_TRUE@am__append_2307 = morse.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_2308 = ++@COND_i386_ieee1275_TRUE@am__append_2309 = $(nodist_morse_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_2310 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_morse_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ morse.marker +-@COND_i386_ieee1275_TRUE@am__append_2318 = morse.mod +-@COND_i386_ieee1275_TRUE@am__append_2319 = morse.marker +-@COND_x86_64_efi_TRUE@am__append_2320 = morse.module +-@COND_x86_64_efi_TRUE@am__append_2321 = morse.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_2322 = +-@COND_x86_64_efi_TRUE@am__append_2323 = $(nodist_morse_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_2324 = \ ++@COND_i386_ieee1275_TRUE@am__append_2311 = morse.mod ++@COND_i386_ieee1275_TRUE@am__append_2312 = morse.marker ++@COND_x86_64_efi_TRUE@am__append_2313 = morse.module ++@COND_x86_64_efi_TRUE@am__append_2314 = morse.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_2315 = ++@COND_x86_64_efi_TRUE@am__append_2316 = $(nodist_morse_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_2317 = \ + @COND_x86_64_efi_TRUE@ $(nodist_morse_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ morse.marker +-@COND_x86_64_efi_TRUE@am__append_2325 = morse.mod +-@COND_x86_64_efi_TRUE@am__append_2326 = morse.marker +-@COND_i386_pc_TRUE@am__append_2327 = setpci.module +-@COND_i386_pc_TRUE@am__append_2328 = setpci.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_2318 = morse.mod ++@COND_x86_64_efi_TRUE@am__append_2319 = morse.marker ++@COND_i386_pc_TRUE@am__append_2320 = setpci.module ++@COND_i386_pc_TRUE@am__append_2321 = setpci.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_FALSE@setpci_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_2329 = +-@COND_i386_pc_TRUE@am__append_2330 = $(nodist_setpci_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_2331 = $(nodist_setpci_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_2322 = ++@COND_i386_pc_TRUE@am__append_2323 = $(nodist_setpci_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_2324 = $(nodist_setpci_module_SOURCES) \ + @COND_i386_pc_TRUE@ setpci.marker +-@COND_i386_pc_TRUE@am__append_2332 = setpci.mod +-@COND_i386_pc_TRUE@am__append_2333 = setpci.marker +-@COND_i386_efi_TRUE@am__append_2334 = setpci.module +-@COND_i386_efi_TRUE@am__append_2335 = setpci.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_2336 = +-@COND_i386_efi_TRUE@am__append_2337 = $(nodist_setpci_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_2338 = $(nodist_setpci_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_2325 = setpci.mod ++@COND_i386_pc_TRUE@am__append_2326 = setpci.marker ++@COND_i386_efi_TRUE@am__append_2327 = setpci.module ++@COND_i386_efi_TRUE@am__append_2328 = setpci.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_2329 = ++@COND_i386_efi_TRUE@am__append_2330 = $(nodist_setpci_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_2331 = $(nodist_setpci_module_SOURCES) \ + @COND_i386_efi_TRUE@ setpci.marker +-@COND_i386_efi_TRUE@am__append_2339 = setpci.mod +-@COND_i386_efi_TRUE@am__append_2340 = setpci.marker +-@COND_i386_qemu_TRUE@am__append_2341 = setpci.module +-@COND_i386_qemu_TRUE@am__append_2342 = setpci.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_2343 = +-@COND_i386_qemu_TRUE@am__append_2344 = $(nodist_setpci_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_2345 = \ ++@COND_i386_efi_TRUE@am__append_2332 = setpci.mod ++@COND_i386_efi_TRUE@am__append_2333 = setpci.marker ++@COND_i386_qemu_TRUE@am__append_2334 = setpci.module ++@COND_i386_qemu_TRUE@am__append_2335 = setpci.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_2336 = ++@COND_i386_qemu_TRUE@am__append_2337 = $(nodist_setpci_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_2338 = \ + @COND_i386_qemu_TRUE@ $(nodist_setpci_module_SOURCES) \ + @COND_i386_qemu_TRUE@ setpci.marker +-@COND_i386_qemu_TRUE@am__append_2346 = setpci.mod +-@COND_i386_qemu_TRUE@am__append_2347 = setpci.marker +-@COND_i386_coreboot_TRUE@am__append_2348 = setpci.module +-@COND_i386_coreboot_TRUE@am__append_2349 = setpci.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_2350 = +-@COND_i386_coreboot_TRUE@am__append_2351 = $(nodist_setpci_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_2352 = \ ++@COND_i386_qemu_TRUE@am__append_2339 = setpci.mod ++@COND_i386_qemu_TRUE@am__append_2340 = setpci.marker ++@COND_i386_coreboot_TRUE@am__append_2341 = setpci.module ++@COND_i386_coreboot_TRUE@am__append_2342 = setpci.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_2343 = ++@COND_i386_coreboot_TRUE@am__append_2344 = $(nodist_setpci_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_2345 = \ + @COND_i386_coreboot_TRUE@ $(nodist_setpci_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ setpci.marker +-@COND_i386_coreboot_TRUE@am__append_2353 = setpci.mod +-@COND_i386_coreboot_TRUE@am__append_2354 = setpci.marker +-@COND_i386_multiboot_TRUE@am__append_2355 = setpci.module +-@COND_i386_multiboot_TRUE@am__append_2356 = setpci.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_2357 = +-@COND_i386_multiboot_TRUE@am__append_2358 = $(nodist_setpci_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_2359 = \ ++@COND_i386_coreboot_TRUE@am__append_2346 = setpci.mod ++@COND_i386_coreboot_TRUE@am__append_2347 = setpci.marker ++@COND_i386_multiboot_TRUE@am__append_2348 = setpci.module ++@COND_i386_multiboot_TRUE@am__append_2349 = setpci.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_2350 = ++@COND_i386_multiboot_TRUE@am__append_2351 = $(nodist_setpci_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_2352 = \ + @COND_i386_multiboot_TRUE@ $(nodist_setpci_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ setpci.marker +-@COND_i386_multiboot_TRUE@am__append_2360 = setpci.mod +-@COND_i386_multiboot_TRUE@am__append_2361 = setpci.marker +-@COND_i386_ieee1275_TRUE@am__append_2362 = setpci.module +-@COND_i386_ieee1275_TRUE@am__append_2363 = setpci.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_2364 = +-@COND_i386_ieee1275_TRUE@am__append_2365 = $(nodist_setpci_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_2366 = \ ++@COND_i386_multiboot_TRUE@am__append_2353 = setpci.mod ++@COND_i386_multiboot_TRUE@am__append_2354 = setpci.marker ++@COND_i386_ieee1275_TRUE@am__append_2355 = setpci.module ++@COND_i386_ieee1275_TRUE@am__append_2356 = setpci.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_2357 = ++@COND_i386_ieee1275_TRUE@am__append_2358 = $(nodist_setpci_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_2359 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_setpci_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ setpci.marker +-@COND_i386_ieee1275_TRUE@am__append_2367 = setpci.mod +-@COND_i386_ieee1275_TRUE@am__append_2368 = setpci.marker +-@COND_x86_64_efi_TRUE@am__append_2369 = setpci.module +-@COND_x86_64_efi_TRUE@am__append_2370 = setpci.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_2371 = +-@COND_x86_64_efi_TRUE@am__append_2372 = $(nodist_setpci_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_2373 = \ ++@COND_i386_ieee1275_TRUE@am__append_2360 = setpci.mod ++@COND_i386_ieee1275_TRUE@am__append_2361 = setpci.marker ++@COND_x86_64_efi_TRUE@am__append_2362 = setpci.module ++@COND_x86_64_efi_TRUE@am__append_2363 = setpci.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_2364 = ++@COND_x86_64_efi_TRUE@am__append_2365 = $(nodist_setpci_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_2366 = \ + @COND_x86_64_efi_TRUE@ $(nodist_setpci_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ setpci.marker +-@COND_x86_64_efi_TRUE@am__append_2374 = setpci.mod +-@COND_x86_64_efi_TRUE@am__append_2375 = setpci.marker +-@COND_mips_loongson_TRUE@am__append_2376 = setpci.module +-@COND_mips_loongson_TRUE@am__append_2377 = setpci.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__append_2378 = +-@COND_mips_loongson_TRUE@am__append_2379 = $(nodist_setpci_module_SOURCES) +-@COND_mips_loongson_TRUE@am__append_2380 = \ ++@COND_x86_64_efi_TRUE@am__append_2367 = setpci.mod ++@COND_x86_64_efi_TRUE@am__append_2368 = setpci.marker ++@COND_mips_loongson_TRUE@am__append_2369 = setpci.module ++@COND_mips_loongson_TRUE@am__append_2370 = setpci.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__append_2371 = ++@COND_mips_loongson_TRUE@am__append_2372 = $(nodist_setpci_module_SOURCES) ++@COND_mips_loongson_TRUE@am__append_2373 = \ + @COND_mips_loongson_TRUE@ $(nodist_setpci_module_SOURCES) \ + @COND_mips_loongson_TRUE@ setpci.marker +-@COND_mips_loongson_TRUE@am__append_2381 = setpci.mod +-@COND_mips_loongson_TRUE@am__append_2382 = setpci.marker +-@COND_i386_pc_TRUE@am__append_2383 = pcidump.module +-@COND_i386_pc_TRUE@am__append_2384 = pcidump.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__append_2374 = setpci.mod ++@COND_mips_loongson_TRUE@am__append_2375 = setpci.marker ++@COND_i386_pc_TRUE@am__append_2376 = pcidump.module ++@COND_i386_pc_TRUE@am__append_2377 = pcidump.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_FALSE@pcidump_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_2385 = +-@COND_i386_pc_TRUE@am__append_2386 = $(nodist_pcidump_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_2387 = $(nodist_pcidump_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_2378 = ++@COND_i386_pc_TRUE@am__append_2379 = $(nodist_pcidump_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_2380 = $(nodist_pcidump_module_SOURCES) \ + @COND_i386_pc_TRUE@ pcidump.marker +-@COND_i386_pc_TRUE@am__append_2388 = pcidump.mod +-@COND_i386_pc_TRUE@am__append_2389 = pcidump.marker +-@COND_i386_efi_TRUE@am__append_2390 = pcidump.module +-@COND_i386_efi_TRUE@am__append_2391 = pcidump.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_2392 = +-@COND_i386_efi_TRUE@am__append_2393 = $(nodist_pcidump_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_2394 = \ ++@COND_i386_pc_TRUE@am__append_2381 = pcidump.mod ++@COND_i386_pc_TRUE@am__append_2382 = pcidump.marker ++@COND_i386_efi_TRUE@am__append_2383 = pcidump.module ++@COND_i386_efi_TRUE@am__append_2384 = pcidump.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_2385 = ++@COND_i386_efi_TRUE@am__append_2386 = $(nodist_pcidump_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_2387 = \ + @COND_i386_efi_TRUE@ $(nodist_pcidump_module_SOURCES) \ + @COND_i386_efi_TRUE@ pcidump.marker +-@COND_i386_efi_TRUE@am__append_2395 = pcidump.mod +-@COND_i386_efi_TRUE@am__append_2396 = pcidump.marker +-@COND_i386_qemu_TRUE@am__append_2397 = pcidump.module +-@COND_i386_qemu_TRUE@am__append_2398 = pcidump.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_2399 = +-@COND_i386_qemu_TRUE@am__append_2400 = $(nodist_pcidump_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_2401 = \ ++@COND_i386_efi_TRUE@am__append_2388 = pcidump.mod ++@COND_i386_efi_TRUE@am__append_2389 = pcidump.marker ++@COND_i386_qemu_TRUE@am__append_2390 = pcidump.module ++@COND_i386_qemu_TRUE@am__append_2391 = pcidump.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_2392 = ++@COND_i386_qemu_TRUE@am__append_2393 = $(nodist_pcidump_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_2394 = \ + @COND_i386_qemu_TRUE@ $(nodist_pcidump_module_SOURCES) \ + @COND_i386_qemu_TRUE@ pcidump.marker +-@COND_i386_qemu_TRUE@am__append_2402 = pcidump.mod +-@COND_i386_qemu_TRUE@am__append_2403 = pcidump.marker +-@COND_i386_coreboot_TRUE@am__append_2404 = pcidump.module +-@COND_i386_coreboot_TRUE@am__append_2405 = pcidump.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_2406 = +-@COND_i386_coreboot_TRUE@am__append_2407 = $(nodist_pcidump_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_2408 = \ ++@COND_i386_qemu_TRUE@am__append_2395 = pcidump.mod ++@COND_i386_qemu_TRUE@am__append_2396 = pcidump.marker ++@COND_i386_coreboot_TRUE@am__append_2397 = pcidump.module ++@COND_i386_coreboot_TRUE@am__append_2398 = pcidump.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_2399 = ++@COND_i386_coreboot_TRUE@am__append_2400 = $(nodist_pcidump_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_2401 = \ + @COND_i386_coreboot_TRUE@ $(nodist_pcidump_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ pcidump.marker +-@COND_i386_coreboot_TRUE@am__append_2409 = pcidump.mod +-@COND_i386_coreboot_TRUE@am__append_2410 = pcidump.marker +-@COND_i386_multiboot_TRUE@am__append_2411 = pcidump.module +-@COND_i386_multiboot_TRUE@am__append_2412 = pcidump.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_2413 = +-@COND_i386_multiboot_TRUE@am__append_2414 = $(nodist_pcidump_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_2415 = \ ++@COND_i386_coreboot_TRUE@am__append_2402 = pcidump.mod ++@COND_i386_coreboot_TRUE@am__append_2403 = pcidump.marker ++@COND_i386_multiboot_TRUE@am__append_2404 = pcidump.module ++@COND_i386_multiboot_TRUE@am__append_2405 = pcidump.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_2406 = ++@COND_i386_multiboot_TRUE@am__append_2407 = $(nodist_pcidump_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_2408 = \ + @COND_i386_multiboot_TRUE@ $(nodist_pcidump_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ pcidump.marker +-@COND_i386_multiboot_TRUE@am__append_2416 = pcidump.mod +-@COND_i386_multiboot_TRUE@am__append_2417 = pcidump.marker +-@COND_i386_ieee1275_TRUE@am__append_2418 = pcidump.module +-@COND_i386_ieee1275_TRUE@am__append_2419 = pcidump.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_2420 = +-@COND_i386_ieee1275_TRUE@am__append_2421 = $(nodist_pcidump_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_2422 = \ ++@COND_i386_multiboot_TRUE@am__append_2409 = pcidump.mod ++@COND_i386_multiboot_TRUE@am__append_2410 = pcidump.marker ++@COND_i386_ieee1275_TRUE@am__append_2411 = pcidump.module ++@COND_i386_ieee1275_TRUE@am__append_2412 = pcidump.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_2413 = ++@COND_i386_ieee1275_TRUE@am__append_2414 = $(nodist_pcidump_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_2415 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_pcidump_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ pcidump.marker +-@COND_i386_ieee1275_TRUE@am__append_2423 = pcidump.mod +-@COND_i386_ieee1275_TRUE@am__append_2424 = pcidump.marker +-@COND_x86_64_efi_TRUE@am__append_2425 = pcidump.module +-@COND_x86_64_efi_TRUE@am__append_2426 = pcidump.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_2427 = +-@COND_x86_64_efi_TRUE@am__append_2428 = $(nodist_pcidump_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_2429 = \ ++@COND_i386_ieee1275_TRUE@am__append_2416 = pcidump.mod ++@COND_i386_ieee1275_TRUE@am__append_2417 = pcidump.marker ++@COND_x86_64_efi_TRUE@am__append_2418 = pcidump.module ++@COND_x86_64_efi_TRUE@am__append_2419 = pcidump.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_2420 = ++@COND_x86_64_efi_TRUE@am__append_2421 = $(nodist_pcidump_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_2422 = \ + @COND_x86_64_efi_TRUE@ $(nodist_pcidump_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ pcidump.marker +-@COND_x86_64_efi_TRUE@am__append_2430 = pcidump.mod +-@COND_x86_64_efi_TRUE@am__append_2431 = pcidump.marker +-@COND_mips_loongson_TRUE@am__append_2432 = pcidump.module +-@COND_mips_loongson_TRUE@am__append_2433 = pcidump.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__append_2434 = +-@COND_mips_loongson_TRUE@am__append_2435 = $(nodist_pcidump_module_SOURCES) +-@COND_mips_loongson_TRUE@am__append_2436 = \ ++@COND_x86_64_efi_TRUE@am__append_2423 = pcidump.mod ++@COND_x86_64_efi_TRUE@am__append_2424 = pcidump.marker ++@COND_mips_loongson_TRUE@am__append_2425 = pcidump.module ++@COND_mips_loongson_TRUE@am__append_2426 = pcidump.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__append_2427 = ++@COND_mips_loongson_TRUE@am__append_2428 = $(nodist_pcidump_module_SOURCES) ++@COND_mips_loongson_TRUE@am__append_2429 = \ + @COND_mips_loongson_TRUE@ $(nodist_pcidump_module_SOURCES) \ + @COND_mips_loongson_TRUE@ pcidump.marker +-@COND_mips_loongson_TRUE@am__append_2437 = pcidump.mod +-@COND_mips_loongson_TRUE@am__append_2438 = pcidump.marker +-@COND_i386_ieee1275_TRUE@am__append_2439 = suspend.module +-@COND_i386_ieee1275_TRUE@am__append_2440 = suspend.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__append_2430 = pcidump.mod ++@COND_mips_loongson_TRUE@am__append_2431 = pcidump.marker ++@COND_i386_ieee1275_TRUE@am__append_2432 = suspend.module ++@COND_i386_ieee1275_TRUE@am__append_2433 = suspend.module$(EXEEXT) + @COND_i386_ieee1275_FALSE@@COND_powerpc_ieee1275_FALSE@suspend_module_DEPENDENCIES = +-@COND_i386_ieee1275_TRUE@am__append_2441 = +-@COND_i386_ieee1275_TRUE@am__append_2442 = $(nodist_suspend_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_2443 = \ ++@COND_i386_ieee1275_TRUE@am__append_2434 = ++@COND_i386_ieee1275_TRUE@am__append_2435 = $(nodist_suspend_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_2436 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_suspend_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ suspend.marker +-@COND_i386_ieee1275_TRUE@am__append_2444 = suspend.mod +-@COND_i386_ieee1275_TRUE@am__append_2445 = suspend.marker +-@COND_powerpc_ieee1275_TRUE@am__append_2446 = suspend.module \ ++@COND_i386_ieee1275_TRUE@am__append_2437 = suspend.mod ++@COND_i386_ieee1275_TRUE@am__append_2438 = suspend.marker ++@COND_powerpc_ieee1275_TRUE@am__append_2439 = suspend.module \ + @COND_powerpc_ieee1275_TRUE@ escc.module +-@COND_powerpc_ieee1275_TRUE@am__append_2447 = suspend.module$(EXEEXT) \ ++@COND_powerpc_ieee1275_TRUE@am__append_2440 = suspend.module$(EXEEXT) \ + @COND_powerpc_ieee1275_TRUE@ escc.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__append_2448 = +-@COND_powerpc_ieee1275_TRUE@am__append_2449 = \ ++@COND_powerpc_ieee1275_TRUE@am__append_2441 = ++@COND_powerpc_ieee1275_TRUE@am__append_2442 = \ + @COND_powerpc_ieee1275_TRUE@ $(nodist_suspend_module_SOURCES) \ + @COND_powerpc_ieee1275_TRUE@ $(nodist_escc_module_SOURCES) +-@COND_powerpc_ieee1275_TRUE@am__append_2450 = \ ++@COND_powerpc_ieee1275_TRUE@am__append_2443 = \ + @COND_powerpc_ieee1275_TRUE@ $(nodist_suspend_module_SOURCES) \ + @COND_powerpc_ieee1275_TRUE@ suspend.marker \ + @COND_powerpc_ieee1275_TRUE@ $(nodist_escc_module_SOURCES) \ + @COND_powerpc_ieee1275_TRUE@ escc.marker +-@COND_powerpc_ieee1275_TRUE@am__append_2451 = suspend.mod escc.mod +-@COND_powerpc_ieee1275_TRUE@am__append_2452 = suspend.marker \ ++@COND_powerpc_ieee1275_TRUE@am__append_2444 = suspend.mod escc.mod ++@COND_powerpc_ieee1275_TRUE@am__append_2445 = suspend.marker \ + @COND_powerpc_ieee1275_TRUE@ escc.marker + @COND_powerpc_ieee1275_FALSE@escc_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_2453 = usbtest.module +-@COND_i386_pc_TRUE@am__append_2454 = usbtest.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__append_2446 = usbtest.module ++@COND_i386_pc_TRUE@am__append_2447 = usbtest.module$(EXEEXT) + @COND_arm_coreboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_FALSE@usbtest_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_2455 = +-@COND_i386_pc_TRUE@am__append_2456 = $(nodist_usbtest_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_2457 = $(nodist_usbtest_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_2448 = ++@COND_i386_pc_TRUE@am__append_2449 = $(nodist_usbtest_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_2450 = $(nodist_usbtest_module_SOURCES) \ + @COND_i386_pc_TRUE@ usbtest.marker +-@COND_i386_pc_TRUE@am__append_2458 = usbtest.mod +-@COND_i386_pc_TRUE@am__append_2459 = usbtest.marker +-@COND_i386_efi_TRUE@am__append_2460 = usbtest.module +-@COND_i386_efi_TRUE@am__append_2461 = usbtest.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_2462 = +-@COND_i386_efi_TRUE@am__append_2463 = $(nodist_usbtest_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_2464 = \ ++@COND_i386_pc_TRUE@am__append_2451 = usbtest.mod ++@COND_i386_pc_TRUE@am__append_2452 = usbtest.marker ++@COND_i386_efi_TRUE@am__append_2453 = usbtest.module ++@COND_i386_efi_TRUE@am__append_2454 = usbtest.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_2455 = ++@COND_i386_efi_TRUE@am__append_2456 = $(nodist_usbtest_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_2457 = \ + @COND_i386_efi_TRUE@ $(nodist_usbtest_module_SOURCES) \ + @COND_i386_efi_TRUE@ usbtest.marker +-@COND_i386_efi_TRUE@am__append_2465 = usbtest.mod +-@COND_i386_efi_TRUE@am__append_2466 = usbtest.marker +-@COND_i386_qemu_TRUE@am__append_2467 = usbtest.module +-@COND_i386_qemu_TRUE@am__append_2468 = usbtest.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_2469 = +-@COND_i386_qemu_TRUE@am__append_2470 = $(nodist_usbtest_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_2471 = \ ++@COND_i386_efi_TRUE@am__append_2458 = usbtest.mod ++@COND_i386_efi_TRUE@am__append_2459 = usbtest.marker ++@COND_i386_qemu_TRUE@am__append_2460 = usbtest.module ++@COND_i386_qemu_TRUE@am__append_2461 = usbtest.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_2462 = ++@COND_i386_qemu_TRUE@am__append_2463 = $(nodist_usbtest_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_2464 = \ + @COND_i386_qemu_TRUE@ $(nodist_usbtest_module_SOURCES) \ + @COND_i386_qemu_TRUE@ usbtest.marker +-@COND_i386_qemu_TRUE@am__append_2472 = usbtest.mod +-@COND_i386_qemu_TRUE@am__append_2473 = usbtest.marker +-@COND_i386_coreboot_TRUE@am__append_2474 = usbtest.module +-@COND_i386_coreboot_TRUE@am__append_2475 = usbtest.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_2476 = +-@COND_i386_coreboot_TRUE@am__append_2477 = $(nodist_usbtest_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_2478 = \ ++@COND_i386_qemu_TRUE@am__append_2465 = usbtest.mod ++@COND_i386_qemu_TRUE@am__append_2466 = usbtest.marker ++@COND_i386_coreboot_TRUE@am__append_2467 = usbtest.module ++@COND_i386_coreboot_TRUE@am__append_2468 = usbtest.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_2469 = ++@COND_i386_coreboot_TRUE@am__append_2470 = $(nodist_usbtest_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_2471 = \ + @COND_i386_coreboot_TRUE@ $(nodist_usbtest_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ usbtest.marker +-@COND_i386_coreboot_TRUE@am__append_2479 = usbtest.mod +-@COND_i386_coreboot_TRUE@am__append_2480 = usbtest.marker +-@COND_i386_multiboot_TRUE@am__append_2481 = usbtest.module +-@COND_i386_multiboot_TRUE@am__append_2482 = usbtest.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_2483 = +-@COND_i386_multiboot_TRUE@am__append_2484 = $(nodist_usbtest_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_2485 = \ ++@COND_i386_coreboot_TRUE@am__append_2472 = usbtest.mod ++@COND_i386_coreboot_TRUE@am__append_2473 = usbtest.marker ++@COND_i386_multiboot_TRUE@am__append_2474 = usbtest.module ++@COND_i386_multiboot_TRUE@am__append_2475 = usbtest.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_2476 = ++@COND_i386_multiboot_TRUE@am__append_2477 = $(nodist_usbtest_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_2478 = \ + @COND_i386_multiboot_TRUE@ $(nodist_usbtest_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ usbtest.marker +-@COND_i386_multiboot_TRUE@am__append_2486 = usbtest.mod +-@COND_i386_multiboot_TRUE@am__append_2487 = usbtest.marker +-@COND_i386_ieee1275_TRUE@am__append_2488 = usbtest.module +-@COND_i386_ieee1275_TRUE@am__append_2489 = usbtest.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_2490 = +-@COND_i386_ieee1275_TRUE@am__append_2491 = $(nodist_usbtest_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_2492 = \ ++@COND_i386_multiboot_TRUE@am__append_2479 = usbtest.mod ++@COND_i386_multiboot_TRUE@am__append_2480 = usbtest.marker ++@COND_i386_ieee1275_TRUE@am__append_2481 = usbtest.module ++@COND_i386_ieee1275_TRUE@am__append_2482 = usbtest.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_2483 = ++@COND_i386_ieee1275_TRUE@am__append_2484 = $(nodist_usbtest_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_2485 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_usbtest_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ usbtest.marker +-@COND_i386_ieee1275_TRUE@am__append_2493 = usbtest.mod +-@COND_i386_ieee1275_TRUE@am__append_2494 = usbtest.marker +-@COND_x86_64_efi_TRUE@am__append_2495 = usbtest.module +-@COND_x86_64_efi_TRUE@am__append_2496 = usbtest.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_2497 = +-@COND_x86_64_efi_TRUE@am__append_2498 = $(nodist_usbtest_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_2499 = \ ++@COND_i386_ieee1275_TRUE@am__append_2486 = usbtest.mod ++@COND_i386_ieee1275_TRUE@am__append_2487 = usbtest.marker ++@COND_x86_64_efi_TRUE@am__append_2488 = usbtest.module ++@COND_x86_64_efi_TRUE@am__append_2489 = usbtest.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_2490 = ++@COND_x86_64_efi_TRUE@am__append_2491 = $(nodist_usbtest_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_2492 = \ + @COND_x86_64_efi_TRUE@ $(nodist_usbtest_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ usbtest.marker +-@COND_x86_64_efi_TRUE@am__append_2500 = usbtest.mod +-@COND_x86_64_efi_TRUE@am__append_2501 = usbtest.marker +-@COND_mips_loongson_TRUE@am__append_2502 = usbtest.module +-@COND_mips_loongson_TRUE@am__append_2503 = usbtest.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__append_2504 = +-@COND_mips_loongson_TRUE@am__append_2505 = $(nodist_usbtest_module_SOURCES) +-@COND_mips_loongson_TRUE@am__append_2506 = \ ++@COND_x86_64_efi_TRUE@am__append_2493 = usbtest.mod ++@COND_x86_64_efi_TRUE@am__append_2494 = usbtest.marker ++@COND_mips_loongson_TRUE@am__append_2495 = usbtest.module ++@COND_mips_loongson_TRUE@am__append_2496 = usbtest.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__append_2497 = ++@COND_mips_loongson_TRUE@am__append_2498 = $(nodist_usbtest_module_SOURCES) ++@COND_mips_loongson_TRUE@am__append_2499 = \ + @COND_mips_loongson_TRUE@ $(nodist_usbtest_module_SOURCES) \ + @COND_mips_loongson_TRUE@ usbtest.marker +-@COND_mips_loongson_TRUE@am__append_2507 = usbtest.mod +-@COND_mips_loongson_TRUE@am__append_2508 = usbtest.marker +-@COND_arm_coreboot_TRUE@am__append_2509 = usbtest.module +-@COND_arm_coreboot_TRUE@am__append_2510 = usbtest.module$(EXEEXT) +-@COND_arm_coreboot_TRUE@am__append_2511 = +-@COND_arm_coreboot_TRUE@am__append_2512 = $(nodist_usbtest_module_SOURCES) +-@COND_arm_coreboot_TRUE@am__append_2513 = \ ++@COND_mips_loongson_TRUE@am__append_2500 = usbtest.mod ++@COND_mips_loongson_TRUE@am__append_2501 = usbtest.marker ++@COND_arm_coreboot_TRUE@am__append_2502 = usbtest.module ++@COND_arm_coreboot_TRUE@am__append_2503 = usbtest.module$(EXEEXT) ++@COND_arm_coreboot_TRUE@am__append_2504 = ++@COND_arm_coreboot_TRUE@am__append_2505 = $(nodist_usbtest_module_SOURCES) ++@COND_arm_coreboot_TRUE@am__append_2506 = \ + @COND_arm_coreboot_TRUE@ $(nodist_usbtest_module_SOURCES) \ + @COND_arm_coreboot_TRUE@ usbtest.marker +-@COND_arm_coreboot_TRUE@am__append_2514 = usbtest.mod +-@COND_arm_coreboot_TRUE@am__append_2515 = usbtest.marker +-@COND_i386_pc_TRUE@am__append_2516 = ata.module +-@COND_i386_pc_TRUE@am__append_2517 = ata.module$(EXEEXT) ++@COND_arm_coreboot_TRUE@am__append_2507 = usbtest.mod ++@COND_arm_coreboot_TRUE@am__append_2508 = usbtest.marker ++@COND_i386_pc_TRUE@am__append_2509 = ata.module ++@COND_i386_pc_TRUE@am__append_2510 = ata.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_x86_64_efi_FALSE@ata_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_2518 = +-@COND_i386_pc_TRUE@am__append_2519 = $(nodist_ata_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_2520 = $(nodist_ata_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_2511 = ++@COND_i386_pc_TRUE@am__append_2512 = $(nodist_ata_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_2513 = $(nodist_ata_module_SOURCES) \ + @COND_i386_pc_TRUE@ ata.marker +-@COND_i386_pc_TRUE@am__append_2521 = ata.mod +-@COND_i386_pc_TRUE@am__append_2522 = ata.marker +-@COND_i386_efi_TRUE@am__append_2523 = ata.module +-@COND_i386_efi_TRUE@am__append_2524 = ata.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_2525 = +-@COND_i386_efi_TRUE@am__append_2526 = $(nodist_ata_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_2527 = $(nodist_ata_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_2514 = ata.mod ++@COND_i386_pc_TRUE@am__append_2515 = ata.marker ++@COND_i386_efi_TRUE@am__append_2516 = ata.module ++@COND_i386_efi_TRUE@am__append_2517 = ata.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_2518 = ++@COND_i386_efi_TRUE@am__append_2519 = $(nodist_ata_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_2520 = $(nodist_ata_module_SOURCES) \ + @COND_i386_efi_TRUE@ ata.marker +-@COND_i386_efi_TRUE@am__append_2528 = ata.mod +-@COND_i386_efi_TRUE@am__append_2529 = ata.marker +-@COND_i386_qemu_TRUE@am__append_2530 = ata.module +-@COND_i386_qemu_TRUE@am__append_2531 = ata.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_2532 = +-@COND_i386_qemu_TRUE@am__append_2533 = $(nodist_ata_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_2534 = $(nodist_ata_module_SOURCES) \ ++@COND_i386_efi_TRUE@am__append_2521 = ata.mod ++@COND_i386_efi_TRUE@am__append_2522 = ata.marker ++@COND_i386_qemu_TRUE@am__append_2523 = ata.module ++@COND_i386_qemu_TRUE@am__append_2524 = ata.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_2525 = ++@COND_i386_qemu_TRUE@am__append_2526 = $(nodist_ata_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_2527 = $(nodist_ata_module_SOURCES) \ + @COND_i386_qemu_TRUE@ ata.marker +-@COND_i386_qemu_TRUE@am__append_2535 = ata.mod +-@COND_i386_qemu_TRUE@am__append_2536 = ata.marker +-@COND_i386_coreboot_TRUE@am__append_2537 = ata.module +-@COND_i386_coreboot_TRUE@am__append_2538 = ata.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_2539 = +-@COND_i386_coreboot_TRUE@am__append_2540 = $(nodist_ata_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_2541 = \ ++@COND_i386_qemu_TRUE@am__append_2528 = ata.mod ++@COND_i386_qemu_TRUE@am__append_2529 = ata.marker ++@COND_i386_coreboot_TRUE@am__append_2530 = ata.module ++@COND_i386_coreboot_TRUE@am__append_2531 = ata.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_2532 = ++@COND_i386_coreboot_TRUE@am__append_2533 = $(nodist_ata_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_2534 = \ + @COND_i386_coreboot_TRUE@ $(nodist_ata_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ ata.marker +-@COND_i386_coreboot_TRUE@am__append_2542 = ata.mod +-@COND_i386_coreboot_TRUE@am__append_2543 = ata.marker +-@COND_i386_multiboot_TRUE@am__append_2544 = ata.module +-@COND_i386_multiboot_TRUE@am__append_2545 = ata.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_2546 = +-@COND_i386_multiboot_TRUE@am__append_2547 = $(nodist_ata_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_2548 = \ ++@COND_i386_coreboot_TRUE@am__append_2535 = ata.mod ++@COND_i386_coreboot_TRUE@am__append_2536 = ata.marker ++@COND_i386_multiboot_TRUE@am__append_2537 = ata.module ++@COND_i386_multiboot_TRUE@am__append_2538 = ata.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_2539 = ++@COND_i386_multiboot_TRUE@am__append_2540 = $(nodist_ata_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_2541 = \ + @COND_i386_multiboot_TRUE@ $(nodist_ata_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ ata.marker +-@COND_i386_multiboot_TRUE@am__append_2549 = ata.mod +-@COND_i386_multiboot_TRUE@am__append_2550 = ata.marker +-@COND_i386_ieee1275_TRUE@am__append_2551 = ata.module +-@COND_i386_ieee1275_TRUE@am__append_2552 = ata.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_2553 = +-@COND_i386_ieee1275_TRUE@am__append_2554 = $(nodist_ata_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_2555 = \ ++@COND_i386_multiboot_TRUE@am__append_2542 = ata.mod ++@COND_i386_multiboot_TRUE@am__append_2543 = ata.marker ++@COND_i386_ieee1275_TRUE@am__append_2544 = ata.module ++@COND_i386_ieee1275_TRUE@am__append_2545 = ata.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_2546 = ++@COND_i386_ieee1275_TRUE@am__append_2547 = $(nodist_ata_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_2548 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_ata_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ ata.marker +-@COND_i386_ieee1275_TRUE@am__append_2556 = ata.mod +-@COND_i386_ieee1275_TRUE@am__append_2557 = ata.marker +-@COND_x86_64_efi_TRUE@am__append_2558 = ata.module +-@COND_x86_64_efi_TRUE@am__append_2559 = ata.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_2560 = +-@COND_x86_64_efi_TRUE@am__append_2561 = $(nodist_ata_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_2562 = $(nodist_ata_module_SOURCES) \ ++@COND_i386_ieee1275_TRUE@am__append_2549 = ata.mod ++@COND_i386_ieee1275_TRUE@am__append_2550 = ata.marker ++@COND_x86_64_efi_TRUE@am__append_2551 = ata.module ++@COND_x86_64_efi_TRUE@am__append_2552 = ata.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_2553 = ++@COND_x86_64_efi_TRUE@am__append_2554 = $(nodist_ata_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_2555 = $(nodist_ata_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ ata.marker +-@COND_x86_64_efi_TRUE@am__append_2563 = ata.mod +-@COND_x86_64_efi_TRUE@am__append_2564 = ata.marker +-@COND_mips_loongson_TRUE@am__append_2565 = ata.module +-@COND_mips_loongson_TRUE@am__append_2566 = ata.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__append_2567 = +-@COND_mips_loongson_TRUE@am__append_2568 = $(nodist_ata_module_SOURCES) +-@COND_mips_loongson_TRUE@am__append_2569 = \ ++@COND_x86_64_efi_TRUE@am__append_2556 = ata.mod ++@COND_x86_64_efi_TRUE@am__append_2557 = ata.marker ++@COND_mips_loongson_TRUE@am__append_2558 = ata.module ++@COND_mips_loongson_TRUE@am__append_2559 = ata.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__append_2560 = ++@COND_mips_loongson_TRUE@am__append_2561 = $(nodist_ata_module_SOURCES) ++@COND_mips_loongson_TRUE@am__append_2562 = \ + @COND_mips_loongson_TRUE@ $(nodist_ata_module_SOURCES) \ + @COND_mips_loongson_TRUE@ ata.marker +-@COND_mips_loongson_TRUE@am__append_2570 = ata.mod +-@COND_mips_loongson_TRUE@am__append_2571 = ata.marker +-@COND_mips_qemu_mips_TRUE@am__append_2572 = ata.module +-@COND_mips_qemu_mips_TRUE@am__append_2573 = ata.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__append_2574 = +-@COND_mips_qemu_mips_TRUE@am__append_2575 = $(nodist_ata_module_SOURCES) +-@COND_mips_qemu_mips_TRUE@am__append_2576 = \ ++@COND_mips_loongson_TRUE@am__append_2563 = ata.mod ++@COND_mips_loongson_TRUE@am__append_2564 = ata.marker ++@COND_mips_qemu_mips_TRUE@am__append_2565 = ata.module ++@COND_mips_qemu_mips_TRUE@am__append_2566 = ata.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__append_2567 = ++@COND_mips_qemu_mips_TRUE@am__append_2568 = $(nodist_ata_module_SOURCES) ++@COND_mips_qemu_mips_TRUE@am__append_2569 = \ + @COND_mips_qemu_mips_TRUE@ $(nodist_ata_module_SOURCES) \ + @COND_mips_qemu_mips_TRUE@ ata.marker +-@COND_mips_qemu_mips_TRUE@am__append_2577 = ata.mod +-@COND_mips_qemu_mips_TRUE@am__append_2578 = ata.marker +-@COND_i386_pc_TRUE@am__append_2579 = ahci.module +-@COND_i386_pc_TRUE@am__append_2580 = ahci.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__append_2570 = ata.mod ++@COND_mips_qemu_mips_TRUE@am__append_2571 = ata.marker ++@COND_i386_pc_TRUE@am__append_2572 = ahci.module ++@COND_i386_pc_TRUE@am__append_2573 = ahci.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_FALSE@ahci_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_2581 = +-@COND_i386_pc_TRUE@am__append_2582 = $(nodist_ahci_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_2583 = $(nodist_ahci_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_2574 = ++@COND_i386_pc_TRUE@am__append_2575 = $(nodist_ahci_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_2576 = $(nodist_ahci_module_SOURCES) \ + @COND_i386_pc_TRUE@ ahci.marker +-@COND_i386_pc_TRUE@am__append_2584 = ahci.mod +-@COND_i386_pc_TRUE@am__append_2585 = ahci.marker +-@COND_i386_efi_TRUE@am__append_2586 = ahci.module +-@COND_i386_efi_TRUE@am__append_2587 = ahci.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_2588 = +-@COND_i386_efi_TRUE@am__append_2589 = $(nodist_ahci_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_2590 = $(nodist_ahci_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_2577 = ahci.mod ++@COND_i386_pc_TRUE@am__append_2578 = ahci.marker ++@COND_i386_efi_TRUE@am__append_2579 = ahci.module ++@COND_i386_efi_TRUE@am__append_2580 = ahci.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_2581 = ++@COND_i386_efi_TRUE@am__append_2582 = $(nodist_ahci_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_2583 = $(nodist_ahci_module_SOURCES) \ + @COND_i386_efi_TRUE@ ahci.marker +-@COND_i386_efi_TRUE@am__append_2591 = ahci.mod +-@COND_i386_efi_TRUE@am__append_2592 = ahci.marker +-@COND_i386_qemu_TRUE@am__append_2593 = ahci.module +-@COND_i386_qemu_TRUE@am__append_2594 = ahci.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_2595 = +-@COND_i386_qemu_TRUE@am__append_2596 = $(nodist_ahci_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_2597 = $(nodist_ahci_module_SOURCES) \ ++@COND_i386_efi_TRUE@am__append_2584 = ahci.mod ++@COND_i386_efi_TRUE@am__append_2585 = ahci.marker ++@COND_i386_qemu_TRUE@am__append_2586 = ahci.module ++@COND_i386_qemu_TRUE@am__append_2587 = ahci.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_2588 = ++@COND_i386_qemu_TRUE@am__append_2589 = $(nodist_ahci_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_2590 = $(nodist_ahci_module_SOURCES) \ + @COND_i386_qemu_TRUE@ ahci.marker +-@COND_i386_qemu_TRUE@am__append_2598 = ahci.mod +-@COND_i386_qemu_TRUE@am__append_2599 = ahci.marker +-@COND_i386_coreboot_TRUE@am__append_2600 = ahci.module +-@COND_i386_coreboot_TRUE@am__append_2601 = ahci.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_2602 = +-@COND_i386_coreboot_TRUE@am__append_2603 = $(nodist_ahci_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_2604 = \ ++@COND_i386_qemu_TRUE@am__append_2591 = ahci.mod ++@COND_i386_qemu_TRUE@am__append_2592 = ahci.marker ++@COND_i386_coreboot_TRUE@am__append_2593 = ahci.module ++@COND_i386_coreboot_TRUE@am__append_2594 = ahci.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_2595 = ++@COND_i386_coreboot_TRUE@am__append_2596 = $(nodist_ahci_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_2597 = \ + @COND_i386_coreboot_TRUE@ $(nodist_ahci_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ ahci.marker +-@COND_i386_coreboot_TRUE@am__append_2605 = ahci.mod +-@COND_i386_coreboot_TRUE@am__append_2606 = ahci.marker +-@COND_i386_multiboot_TRUE@am__append_2607 = ahci.module +-@COND_i386_multiboot_TRUE@am__append_2608 = ahci.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_2609 = +-@COND_i386_multiboot_TRUE@am__append_2610 = $(nodist_ahci_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_2611 = \ ++@COND_i386_coreboot_TRUE@am__append_2598 = ahci.mod ++@COND_i386_coreboot_TRUE@am__append_2599 = ahci.marker ++@COND_i386_multiboot_TRUE@am__append_2600 = ahci.module ++@COND_i386_multiboot_TRUE@am__append_2601 = ahci.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_2602 = ++@COND_i386_multiboot_TRUE@am__append_2603 = $(nodist_ahci_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_2604 = \ + @COND_i386_multiboot_TRUE@ $(nodist_ahci_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ ahci.marker +-@COND_i386_multiboot_TRUE@am__append_2612 = ahci.mod +-@COND_i386_multiboot_TRUE@am__append_2613 = ahci.marker +-@COND_i386_ieee1275_TRUE@am__append_2614 = ahci.module +-@COND_i386_ieee1275_TRUE@am__append_2615 = ahci.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_2616 = +-@COND_i386_ieee1275_TRUE@am__append_2617 = $(nodist_ahci_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_2618 = \ ++@COND_i386_multiboot_TRUE@am__append_2605 = ahci.mod ++@COND_i386_multiboot_TRUE@am__append_2606 = ahci.marker ++@COND_i386_ieee1275_TRUE@am__append_2607 = ahci.module ++@COND_i386_ieee1275_TRUE@am__append_2608 = ahci.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_2609 = ++@COND_i386_ieee1275_TRUE@am__append_2610 = $(nodist_ahci_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_2611 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_ahci_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ ahci.marker +-@COND_i386_ieee1275_TRUE@am__append_2619 = ahci.mod +-@COND_i386_ieee1275_TRUE@am__append_2620 = ahci.marker +-@COND_x86_64_efi_TRUE@am__append_2621 = ahci.module +-@COND_x86_64_efi_TRUE@am__append_2622 = ahci.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_2623 = +-@COND_x86_64_efi_TRUE@am__append_2624 = $(nodist_ahci_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_2625 = $(nodist_ahci_module_SOURCES) \ ++@COND_i386_ieee1275_TRUE@am__append_2612 = ahci.mod ++@COND_i386_ieee1275_TRUE@am__append_2613 = ahci.marker ++@COND_x86_64_efi_TRUE@am__append_2614 = ahci.module ++@COND_x86_64_efi_TRUE@am__append_2615 = ahci.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_2616 = ++@COND_x86_64_efi_TRUE@am__append_2617 = $(nodist_ahci_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_2618 = $(nodist_ahci_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ ahci.marker +-@COND_x86_64_efi_TRUE@am__append_2626 = ahci.mod +-@COND_x86_64_efi_TRUE@am__append_2627 = ahci.marker +-@COND_mips_loongson_TRUE@am__append_2628 = ahci.module +-@COND_mips_loongson_TRUE@am__append_2629 = ahci.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__append_2630 = +-@COND_mips_loongson_TRUE@am__append_2631 = $(nodist_ahci_module_SOURCES) +-@COND_mips_loongson_TRUE@am__append_2632 = \ ++@COND_x86_64_efi_TRUE@am__append_2619 = ahci.mod ++@COND_x86_64_efi_TRUE@am__append_2620 = ahci.marker ++@COND_mips_loongson_TRUE@am__append_2621 = ahci.module ++@COND_mips_loongson_TRUE@am__append_2622 = ahci.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__append_2623 = ++@COND_mips_loongson_TRUE@am__append_2624 = $(nodist_ahci_module_SOURCES) ++@COND_mips_loongson_TRUE@am__append_2625 = \ + @COND_mips_loongson_TRUE@ $(nodist_ahci_module_SOURCES) \ + @COND_mips_loongson_TRUE@ ahci.marker +-@COND_mips_loongson_TRUE@am__append_2633 = ahci.mod +-@COND_mips_loongson_TRUE@am__append_2634 = ahci.marker +-@COND_i386_pc_TRUE@am__append_2635 = pata.module +-@COND_i386_pc_TRUE@am__append_2636 = pata.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__append_2626 = ahci.mod ++@COND_mips_loongson_TRUE@am__append_2627 = ahci.marker ++@COND_i386_pc_TRUE@am__append_2628 = pata.module ++@COND_i386_pc_TRUE@am__append_2629 = pata.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_x86_64_efi_FALSE@pata_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_2637 = +-@COND_i386_pc_TRUE@am__append_2638 = $(nodist_pata_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_2639 = $(nodist_pata_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_2630 = ++@COND_i386_pc_TRUE@am__append_2631 = $(nodist_pata_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_2632 = $(nodist_pata_module_SOURCES) \ + @COND_i386_pc_TRUE@ pata.marker +-@COND_i386_pc_TRUE@am__append_2640 = pata.mod +-@COND_i386_pc_TRUE@am__append_2641 = pata.marker +-@COND_i386_efi_TRUE@am__append_2642 = pata.module +-@COND_i386_efi_TRUE@am__append_2643 = pata.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_2644 = +-@COND_i386_efi_TRUE@am__append_2645 = $(nodist_pata_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_2646 = $(nodist_pata_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_2633 = pata.mod ++@COND_i386_pc_TRUE@am__append_2634 = pata.marker ++@COND_i386_efi_TRUE@am__append_2635 = pata.module ++@COND_i386_efi_TRUE@am__append_2636 = pata.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_2637 = ++@COND_i386_efi_TRUE@am__append_2638 = $(nodist_pata_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_2639 = $(nodist_pata_module_SOURCES) \ + @COND_i386_efi_TRUE@ pata.marker +-@COND_i386_efi_TRUE@am__append_2647 = pata.mod +-@COND_i386_efi_TRUE@am__append_2648 = pata.marker +-@COND_i386_qemu_TRUE@am__append_2649 = pata.module +-@COND_i386_qemu_TRUE@am__append_2650 = pata.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_2651 = +-@COND_i386_qemu_TRUE@am__append_2652 = $(nodist_pata_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_2653 = $(nodist_pata_module_SOURCES) \ ++@COND_i386_efi_TRUE@am__append_2640 = pata.mod ++@COND_i386_efi_TRUE@am__append_2641 = pata.marker ++@COND_i386_qemu_TRUE@am__append_2642 = pata.module ++@COND_i386_qemu_TRUE@am__append_2643 = pata.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_2644 = ++@COND_i386_qemu_TRUE@am__append_2645 = $(nodist_pata_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_2646 = $(nodist_pata_module_SOURCES) \ + @COND_i386_qemu_TRUE@ pata.marker +-@COND_i386_qemu_TRUE@am__append_2654 = pata.mod +-@COND_i386_qemu_TRUE@am__append_2655 = pata.marker +-@COND_i386_coreboot_TRUE@am__append_2656 = pata.module +-@COND_i386_coreboot_TRUE@am__append_2657 = pata.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_2658 = +-@COND_i386_coreboot_TRUE@am__append_2659 = $(nodist_pata_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_2660 = \ ++@COND_i386_qemu_TRUE@am__append_2647 = pata.mod ++@COND_i386_qemu_TRUE@am__append_2648 = pata.marker ++@COND_i386_coreboot_TRUE@am__append_2649 = pata.module ++@COND_i386_coreboot_TRUE@am__append_2650 = pata.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_2651 = ++@COND_i386_coreboot_TRUE@am__append_2652 = $(nodist_pata_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_2653 = \ + @COND_i386_coreboot_TRUE@ $(nodist_pata_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ pata.marker +-@COND_i386_coreboot_TRUE@am__append_2661 = pata.mod +-@COND_i386_coreboot_TRUE@am__append_2662 = pata.marker +-@COND_i386_multiboot_TRUE@am__append_2663 = pata.module +-@COND_i386_multiboot_TRUE@am__append_2664 = pata.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_2665 = +-@COND_i386_multiboot_TRUE@am__append_2666 = $(nodist_pata_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_2667 = \ ++@COND_i386_coreboot_TRUE@am__append_2654 = pata.mod ++@COND_i386_coreboot_TRUE@am__append_2655 = pata.marker ++@COND_i386_multiboot_TRUE@am__append_2656 = pata.module ++@COND_i386_multiboot_TRUE@am__append_2657 = pata.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_2658 = ++@COND_i386_multiboot_TRUE@am__append_2659 = $(nodist_pata_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_2660 = \ + @COND_i386_multiboot_TRUE@ $(nodist_pata_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ pata.marker +-@COND_i386_multiboot_TRUE@am__append_2668 = pata.mod +-@COND_i386_multiboot_TRUE@am__append_2669 = pata.marker +-@COND_i386_ieee1275_TRUE@am__append_2670 = pata.module +-@COND_i386_ieee1275_TRUE@am__append_2671 = pata.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_2672 = +-@COND_i386_ieee1275_TRUE@am__append_2673 = $(nodist_pata_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_2674 = \ ++@COND_i386_multiboot_TRUE@am__append_2661 = pata.mod ++@COND_i386_multiboot_TRUE@am__append_2662 = pata.marker ++@COND_i386_ieee1275_TRUE@am__append_2663 = pata.module ++@COND_i386_ieee1275_TRUE@am__append_2664 = pata.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_2665 = ++@COND_i386_ieee1275_TRUE@am__append_2666 = $(nodist_pata_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_2667 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_pata_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ pata.marker +-@COND_i386_ieee1275_TRUE@am__append_2675 = pata.mod +-@COND_i386_ieee1275_TRUE@am__append_2676 = pata.marker +-@COND_x86_64_efi_TRUE@am__append_2677 = pata.module +-@COND_x86_64_efi_TRUE@am__append_2678 = pata.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_2679 = +-@COND_x86_64_efi_TRUE@am__append_2680 = $(nodist_pata_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_2681 = $(nodist_pata_module_SOURCES) \ ++@COND_i386_ieee1275_TRUE@am__append_2668 = pata.mod ++@COND_i386_ieee1275_TRUE@am__append_2669 = pata.marker ++@COND_x86_64_efi_TRUE@am__append_2670 = pata.module ++@COND_x86_64_efi_TRUE@am__append_2671 = pata.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_2672 = ++@COND_x86_64_efi_TRUE@am__append_2673 = $(nodist_pata_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_2674 = $(nodist_pata_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ pata.marker +-@COND_x86_64_efi_TRUE@am__append_2682 = pata.mod +-@COND_x86_64_efi_TRUE@am__append_2683 = pata.marker +-@COND_mips_loongson_TRUE@am__append_2684 = pata.module +-@COND_mips_loongson_TRUE@am__append_2685 = pata.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__append_2686 = +-@COND_mips_loongson_TRUE@am__append_2687 = $(nodist_pata_module_SOURCES) +-@COND_mips_loongson_TRUE@am__append_2688 = \ ++@COND_x86_64_efi_TRUE@am__append_2675 = pata.mod ++@COND_x86_64_efi_TRUE@am__append_2676 = pata.marker ++@COND_mips_loongson_TRUE@am__append_2677 = pata.module ++@COND_mips_loongson_TRUE@am__append_2678 = pata.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__append_2679 = ++@COND_mips_loongson_TRUE@am__append_2680 = $(nodist_pata_module_SOURCES) ++@COND_mips_loongson_TRUE@am__append_2681 = \ + @COND_mips_loongson_TRUE@ $(nodist_pata_module_SOURCES) \ + @COND_mips_loongson_TRUE@ pata.marker +-@COND_mips_loongson_TRUE@am__append_2689 = pata.mod +-@COND_mips_loongson_TRUE@am__append_2690 = pata.marker +-@COND_mips_qemu_mips_TRUE@am__append_2691 = pata.module +-@COND_mips_qemu_mips_TRUE@am__append_2692 = pata.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__append_2693 = +-@COND_mips_qemu_mips_TRUE@am__append_2694 = $(nodist_pata_module_SOURCES) +-@COND_mips_qemu_mips_TRUE@am__append_2695 = \ ++@COND_mips_loongson_TRUE@am__append_2682 = pata.mod ++@COND_mips_loongson_TRUE@am__append_2683 = pata.marker ++@COND_mips_qemu_mips_TRUE@am__append_2684 = pata.module ++@COND_mips_qemu_mips_TRUE@am__append_2685 = pata.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__append_2686 = ++@COND_mips_qemu_mips_TRUE@am__append_2687 = $(nodist_pata_module_SOURCES) ++@COND_mips_qemu_mips_TRUE@am__append_2688 = \ + @COND_mips_qemu_mips_TRUE@ $(nodist_pata_module_SOURCES) \ + @COND_mips_qemu_mips_TRUE@ pata.marker +-@COND_mips_qemu_mips_TRUE@am__append_2696 = pata.mod +-@COND_mips_qemu_mips_TRUE@am__append_2697 = pata.marker +-@COND_i386_pc_TRUE@am__append_2698 = biosdisk.module usbms.module +-@COND_i386_pc_TRUE@am__append_2699 = biosdisk.module$(EXEEXT) \ ++@COND_mips_qemu_mips_TRUE@am__append_2689 = pata.mod ++@COND_mips_qemu_mips_TRUE@am__append_2690 = pata.marker ++@COND_i386_pc_TRUE@am__append_2691 = biosdisk.module usbms.module ++@COND_i386_pc_TRUE@am__append_2692 = biosdisk.module$(EXEEXT) \ + @COND_i386_pc_TRUE@ usbms.module$(EXEEXT) + @COND_i386_pc_FALSE@biosdisk_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_2700 = +-@COND_i386_pc_TRUE@am__append_2701 = \ ++@COND_i386_pc_TRUE@am__append_2693 = ++@COND_i386_pc_TRUE@am__append_2694 = \ + @COND_i386_pc_TRUE@ $(nodist_biosdisk_module_SOURCES) \ + @COND_i386_pc_TRUE@ $(nodist_usbms_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_2702 = \ ++@COND_i386_pc_TRUE@am__append_2695 = \ + @COND_i386_pc_TRUE@ $(nodist_biosdisk_module_SOURCES) \ + @COND_i386_pc_TRUE@ biosdisk.marker \ + @COND_i386_pc_TRUE@ $(nodist_usbms_module_SOURCES) usbms.marker +-@COND_i386_pc_TRUE@am__append_2703 = biosdisk.mod usbms.mod +-@COND_i386_pc_TRUE@am__append_2704 = biosdisk.marker usbms.marker ++@COND_i386_pc_TRUE@am__append_2696 = biosdisk.mod usbms.mod ++@COND_i386_pc_TRUE@am__append_2697 = biosdisk.marker usbms.marker + @COND_arm_coreboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_FALSE@usbms_module_DEPENDENCIES = +-@COND_i386_efi_TRUE@am__append_2705 = usbms.module +-@COND_i386_efi_TRUE@am__append_2706 = usbms.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_2707 = +-@COND_i386_efi_TRUE@am__append_2708 = $(nodist_usbms_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_2709 = $(nodist_usbms_module_SOURCES) \ ++@COND_i386_efi_TRUE@am__append_2698 = usbms.module ++@COND_i386_efi_TRUE@am__append_2699 = usbms.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_2700 = ++@COND_i386_efi_TRUE@am__append_2701 = $(nodist_usbms_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_2702 = $(nodist_usbms_module_SOURCES) \ + @COND_i386_efi_TRUE@ usbms.marker +-@COND_i386_efi_TRUE@am__append_2710 = usbms.mod +-@COND_i386_efi_TRUE@am__append_2711 = usbms.marker +-@COND_i386_qemu_TRUE@am__append_2712 = usbms.module +-@COND_i386_qemu_TRUE@am__append_2713 = usbms.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_2714 = +-@COND_i386_qemu_TRUE@am__append_2715 = $(nodist_usbms_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_2716 = $(nodist_usbms_module_SOURCES) \ ++@COND_i386_efi_TRUE@am__append_2703 = usbms.mod ++@COND_i386_efi_TRUE@am__append_2704 = usbms.marker ++@COND_i386_qemu_TRUE@am__append_2705 = usbms.module ++@COND_i386_qemu_TRUE@am__append_2706 = usbms.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_2707 = ++@COND_i386_qemu_TRUE@am__append_2708 = $(nodist_usbms_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_2709 = $(nodist_usbms_module_SOURCES) \ + @COND_i386_qemu_TRUE@ usbms.marker +-@COND_i386_qemu_TRUE@am__append_2717 = usbms.mod +-@COND_i386_qemu_TRUE@am__append_2718 = usbms.marker +-@COND_i386_coreboot_TRUE@am__append_2719 = usbms.module +-@COND_i386_coreboot_TRUE@am__append_2720 = usbms.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_2721 = +-@COND_i386_coreboot_TRUE@am__append_2722 = $(nodist_usbms_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_2723 = \ ++@COND_i386_qemu_TRUE@am__append_2710 = usbms.mod ++@COND_i386_qemu_TRUE@am__append_2711 = usbms.marker ++@COND_i386_coreboot_TRUE@am__append_2712 = usbms.module ++@COND_i386_coreboot_TRUE@am__append_2713 = usbms.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_2714 = ++@COND_i386_coreboot_TRUE@am__append_2715 = $(nodist_usbms_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_2716 = \ + @COND_i386_coreboot_TRUE@ $(nodist_usbms_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ usbms.marker +-@COND_i386_coreboot_TRUE@am__append_2724 = usbms.mod +-@COND_i386_coreboot_TRUE@am__append_2725 = usbms.marker +-@COND_i386_multiboot_TRUE@am__append_2726 = usbms.module +-@COND_i386_multiboot_TRUE@am__append_2727 = usbms.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_2728 = +-@COND_i386_multiboot_TRUE@am__append_2729 = $(nodist_usbms_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_2730 = \ ++@COND_i386_coreboot_TRUE@am__append_2717 = usbms.mod ++@COND_i386_coreboot_TRUE@am__append_2718 = usbms.marker ++@COND_i386_multiboot_TRUE@am__append_2719 = usbms.module ++@COND_i386_multiboot_TRUE@am__append_2720 = usbms.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_2721 = ++@COND_i386_multiboot_TRUE@am__append_2722 = $(nodist_usbms_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_2723 = \ + @COND_i386_multiboot_TRUE@ $(nodist_usbms_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ usbms.marker +-@COND_i386_multiboot_TRUE@am__append_2731 = usbms.mod +-@COND_i386_multiboot_TRUE@am__append_2732 = usbms.marker +-@COND_i386_ieee1275_TRUE@am__append_2733 = usbms.module +-@COND_i386_ieee1275_TRUE@am__append_2734 = usbms.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_2735 = +-@COND_i386_ieee1275_TRUE@am__append_2736 = $(nodist_usbms_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_2737 = \ ++@COND_i386_multiboot_TRUE@am__append_2724 = usbms.mod ++@COND_i386_multiboot_TRUE@am__append_2725 = usbms.marker ++@COND_i386_ieee1275_TRUE@am__append_2726 = usbms.module ++@COND_i386_ieee1275_TRUE@am__append_2727 = usbms.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_2728 = ++@COND_i386_ieee1275_TRUE@am__append_2729 = $(nodist_usbms_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_2730 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_usbms_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ usbms.marker +-@COND_i386_ieee1275_TRUE@am__append_2738 = usbms.mod +-@COND_i386_ieee1275_TRUE@am__append_2739 = usbms.marker +-@COND_x86_64_efi_TRUE@am__append_2740 = usbms.module +-@COND_x86_64_efi_TRUE@am__append_2741 = usbms.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_2742 = +-@COND_x86_64_efi_TRUE@am__append_2743 = $(nodist_usbms_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_2744 = \ ++@COND_i386_ieee1275_TRUE@am__append_2731 = usbms.mod ++@COND_i386_ieee1275_TRUE@am__append_2732 = usbms.marker ++@COND_x86_64_efi_TRUE@am__append_2733 = usbms.module ++@COND_x86_64_efi_TRUE@am__append_2734 = usbms.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_2735 = ++@COND_x86_64_efi_TRUE@am__append_2736 = $(nodist_usbms_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_2737 = \ + @COND_x86_64_efi_TRUE@ $(nodist_usbms_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ usbms.marker +-@COND_x86_64_efi_TRUE@am__append_2745 = usbms.mod +-@COND_x86_64_efi_TRUE@am__append_2746 = usbms.marker +-@COND_mips_loongson_TRUE@am__append_2747 = usbms.module +-@COND_mips_loongson_TRUE@am__append_2748 = usbms.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__append_2749 = +-@COND_mips_loongson_TRUE@am__append_2750 = $(nodist_usbms_module_SOURCES) +-@COND_mips_loongson_TRUE@am__append_2751 = \ ++@COND_x86_64_efi_TRUE@am__append_2738 = usbms.mod ++@COND_x86_64_efi_TRUE@am__append_2739 = usbms.marker ++@COND_mips_loongson_TRUE@am__append_2740 = usbms.module ++@COND_mips_loongson_TRUE@am__append_2741 = usbms.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__append_2742 = ++@COND_mips_loongson_TRUE@am__append_2743 = $(nodist_usbms_module_SOURCES) ++@COND_mips_loongson_TRUE@am__append_2744 = \ + @COND_mips_loongson_TRUE@ $(nodist_usbms_module_SOURCES) \ + @COND_mips_loongson_TRUE@ usbms.marker +-@COND_mips_loongson_TRUE@am__append_2752 = usbms.mod +-@COND_mips_loongson_TRUE@am__append_2753 = usbms.marker +-@COND_arm_coreboot_TRUE@am__append_2754 = usbms.module +-@COND_arm_coreboot_TRUE@am__append_2755 = usbms.module$(EXEEXT) +-@COND_arm_coreboot_TRUE@am__append_2756 = +-@COND_arm_coreboot_TRUE@am__append_2757 = $(nodist_usbms_module_SOURCES) +-@COND_arm_coreboot_TRUE@am__append_2758 = \ ++@COND_mips_loongson_TRUE@am__append_2745 = usbms.mod ++@COND_mips_loongson_TRUE@am__append_2746 = usbms.marker ++@COND_arm_coreboot_TRUE@am__append_2747 = usbms.module ++@COND_arm_coreboot_TRUE@am__append_2748 = usbms.module$(EXEEXT) ++@COND_arm_coreboot_TRUE@am__append_2749 = ++@COND_arm_coreboot_TRUE@am__append_2750 = $(nodist_usbms_module_SOURCES) ++@COND_arm_coreboot_TRUE@am__append_2751 = \ + @COND_arm_coreboot_TRUE@ $(nodist_usbms_module_SOURCES) \ + @COND_arm_coreboot_TRUE@ usbms.marker +-@COND_arm_coreboot_TRUE@am__append_2759 = usbms.mod +-@COND_arm_coreboot_TRUE@am__append_2760 = usbms.marker +-@COND_i386_ieee1275_TRUE@am__append_2761 = nand.module +-@COND_i386_ieee1275_TRUE@am__append_2762 = nand.module$(EXEEXT) ++@COND_arm_coreboot_TRUE@am__append_2752 = usbms.mod ++@COND_arm_coreboot_TRUE@am__append_2753 = usbms.marker ++@COND_i386_ieee1275_TRUE@am__append_2754 = nand.module ++@COND_i386_ieee1275_TRUE@am__append_2755 = nand.module$(EXEEXT) + @COND_i386_ieee1275_FALSE@nand_module_DEPENDENCIES = +-@COND_i386_ieee1275_TRUE@am__append_2763 = +-@COND_i386_ieee1275_TRUE@am__append_2764 = $(nodist_nand_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_2765 = \ ++@COND_i386_ieee1275_TRUE@am__append_2756 = ++@COND_i386_ieee1275_TRUE@am__append_2757 = $(nodist_nand_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_2758 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_nand_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ nand.marker +-@COND_i386_ieee1275_TRUE@am__append_2766 = nand.mod +-@COND_i386_ieee1275_TRUE@am__append_2767 = nand.marker +-@COND_i386_pc_TRUE@am__append_2768 = efiemu.module +-@COND_i386_pc_TRUE@am__append_2769 = efiemu.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_2759 = nand.mod ++@COND_i386_ieee1275_TRUE@am__append_2760 = nand.marker ++@COND_i386_pc_TRUE@am__append_2761 = efiemu.module ++@COND_i386_pc_TRUE@am__append_2762 = efiemu.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@efiemu_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_2770 = efiemu/prepare.c efiemu/loadcore.c efiemu/runtime/efiemu.S efiemu/runtime/efiemu.c +-@COND_i386_pc_TRUE@am__append_2771 = $(nodist_efiemu_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_2772 = $(nodist_efiemu_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_2763 = efiemu/prepare.c efiemu/loadcore.c efiemu/runtime/efiemu.S efiemu/runtime/efiemu.c ++@COND_i386_pc_TRUE@am__append_2764 = $(nodist_efiemu_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_2765 = $(nodist_efiemu_module_SOURCES) \ + @COND_i386_pc_TRUE@ efiemu.marker +-@COND_i386_pc_TRUE@am__append_2773 = efiemu.mod +-@COND_i386_pc_TRUE@am__append_2774 = efiemu.marker +-@COND_i386_qemu_TRUE@am__append_2775 = efiemu.module +-@COND_i386_qemu_TRUE@am__append_2776 = efiemu.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_2777 = efiemu/prepare.c efiemu/loadcore.c efiemu/runtime/efiemu.S efiemu/runtime/efiemu.c +-@COND_i386_qemu_TRUE@am__append_2778 = $(nodist_efiemu_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_2779 = \ ++@COND_i386_pc_TRUE@am__append_2766 = efiemu.mod ++@COND_i386_pc_TRUE@am__append_2767 = efiemu.marker ++@COND_i386_qemu_TRUE@am__append_2768 = efiemu.module ++@COND_i386_qemu_TRUE@am__append_2769 = efiemu.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_2770 = efiemu/prepare.c efiemu/loadcore.c efiemu/runtime/efiemu.S efiemu/runtime/efiemu.c ++@COND_i386_qemu_TRUE@am__append_2771 = $(nodist_efiemu_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_2772 = \ + @COND_i386_qemu_TRUE@ $(nodist_efiemu_module_SOURCES) \ + @COND_i386_qemu_TRUE@ efiemu.marker +-@COND_i386_qemu_TRUE@am__append_2780 = efiemu.mod +-@COND_i386_qemu_TRUE@am__append_2781 = efiemu.marker +-@COND_i386_coreboot_TRUE@am__append_2782 = efiemu.module +-@COND_i386_coreboot_TRUE@am__append_2783 = efiemu.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_2784 = efiemu/prepare.c efiemu/loadcore.c efiemu/runtime/efiemu.S efiemu/runtime/efiemu.c +-@COND_i386_coreboot_TRUE@am__append_2785 = $(nodist_efiemu_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_2786 = \ ++@COND_i386_qemu_TRUE@am__append_2773 = efiemu.mod ++@COND_i386_qemu_TRUE@am__append_2774 = efiemu.marker ++@COND_i386_coreboot_TRUE@am__append_2775 = efiemu.module ++@COND_i386_coreboot_TRUE@am__append_2776 = efiemu.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_2777 = efiemu/prepare.c efiemu/loadcore.c efiemu/runtime/efiemu.S efiemu/runtime/efiemu.c ++@COND_i386_coreboot_TRUE@am__append_2778 = $(nodist_efiemu_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_2779 = \ + @COND_i386_coreboot_TRUE@ $(nodist_efiemu_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ efiemu.marker +-@COND_i386_coreboot_TRUE@am__append_2787 = efiemu.mod +-@COND_i386_coreboot_TRUE@am__append_2788 = efiemu.marker +-@COND_i386_multiboot_TRUE@am__append_2789 = efiemu.module +-@COND_i386_multiboot_TRUE@am__append_2790 = efiemu.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_2791 = efiemu/prepare.c efiemu/loadcore.c efiemu/runtime/efiemu.S efiemu/runtime/efiemu.c +-@COND_i386_multiboot_TRUE@am__append_2792 = $(nodist_efiemu_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_2793 = \ ++@COND_i386_coreboot_TRUE@am__append_2780 = efiemu.mod ++@COND_i386_coreboot_TRUE@am__append_2781 = efiemu.marker ++@COND_i386_multiboot_TRUE@am__append_2782 = efiemu.module ++@COND_i386_multiboot_TRUE@am__append_2783 = efiemu.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_2784 = efiemu/prepare.c efiemu/loadcore.c efiemu/runtime/efiemu.S efiemu/runtime/efiemu.c ++@COND_i386_multiboot_TRUE@am__append_2785 = $(nodist_efiemu_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_2786 = \ + @COND_i386_multiboot_TRUE@ $(nodist_efiemu_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ efiemu.marker +-@COND_i386_multiboot_TRUE@am__append_2794 = efiemu.mod +-@COND_i386_multiboot_TRUE@am__append_2795 = efiemu.marker +-@COND_i386_ieee1275_TRUE@am__append_2796 = efiemu.module +-@COND_i386_ieee1275_TRUE@am__append_2797 = efiemu.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_2798 = efiemu/prepare.c efiemu/loadcore.c efiemu/runtime/efiemu.S efiemu/runtime/efiemu.c +-@COND_i386_ieee1275_TRUE@am__append_2799 = $(nodist_efiemu_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_2800 = \ ++@COND_i386_multiboot_TRUE@am__append_2787 = efiemu.mod ++@COND_i386_multiboot_TRUE@am__append_2788 = efiemu.marker ++@COND_i386_ieee1275_TRUE@am__append_2789 = efiemu.module ++@COND_i386_ieee1275_TRUE@am__append_2790 = efiemu.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_2791 = efiemu/prepare.c efiemu/loadcore.c efiemu/runtime/efiemu.S efiemu/runtime/efiemu.c ++@COND_i386_ieee1275_TRUE@am__append_2792 = $(nodist_efiemu_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_2793 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_efiemu_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ efiemu.marker +-@COND_i386_ieee1275_TRUE@am__append_2801 = efiemu.mod +-@COND_i386_ieee1275_TRUE@am__append_2802 = efiemu.marker +-@COND_emu_TRUE@am__append_2803 = font.module +-@COND_emu_TRUE@am__append_2804 = font.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_2794 = efiemu.mod ++@COND_i386_ieee1275_TRUE@am__append_2795 = efiemu.marker ++@COND_emu_TRUE@am__append_2796 = font.module ++@COND_emu_TRUE@am__append_2797 = font.module$(EXEEXT) + @COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@font_module_DEPENDENCIES = +-@COND_emu_TRUE@am__append_2805 = +-@COND_emu_TRUE@am__append_2806 = $(nodist_font_module_SOURCES) +-@COND_emu_TRUE@am__append_2807 = $(nodist_font_module_SOURCES) \ ++@COND_emu_TRUE@am__append_2798 = ++@COND_emu_TRUE@am__append_2799 = $(nodist_font_module_SOURCES) ++@COND_emu_TRUE@am__append_2800 = $(nodist_font_module_SOURCES) \ + @COND_emu_TRUE@ font.marker +-@COND_emu_TRUE@am__append_2808 = font.mod +-@COND_emu_TRUE@am__append_2809 = font.marker +-@COND_i386_pc_TRUE@am__append_2810 = font.module +-@COND_i386_pc_TRUE@am__append_2811 = font.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__append_2812 = +-@COND_i386_pc_TRUE@am__append_2813 = $(nodist_font_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_2814 = $(nodist_font_module_SOURCES) \ ++@COND_emu_TRUE@am__append_2801 = font.mod ++@COND_emu_TRUE@am__append_2802 = font.marker ++@COND_i386_pc_TRUE@am__append_2803 = font.module ++@COND_i386_pc_TRUE@am__append_2804 = font.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__append_2805 = ++@COND_i386_pc_TRUE@am__append_2806 = $(nodist_font_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_2807 = $(nodist_font_module_SOURCES) \ + @COND_i386_pc_TRUE@ font.marker +-@COND_i386_pc_TRUE@am__append_2815 = font.mod +-@COND_i386_pc_TRUE@am__append_2816 = font.marker +-@COND_i386_efi_TRUE@am__append_2817 = font.module +-@COND_i386_efi_TRUE@am__append_2818 = font.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_2819 = +-@COND_i386_efi_TRUE@am__append_2820 = $(nodist_font_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_2821 = $(nodist_font_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_2808 = font.mod ++@COND_i386_pc_TRUE@am__append_2809 = font.marker ++@COND_i386_efi_TRUE@am__append_2810 = font.module ++@COND_i386_efi_TRUE@am__append_2811 = font.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_2812 = ++@COND_i386_efi_TRUE@am__append_2813 = $(nodist_font_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_2814 = $(nodist_font_module_SOURCES) \ + @COND_i386_efi_TRUE@ font.marker +-@COND_i386_efi_TRUE@am__append_2822 = font.mod +-@COND_i386_efi_TRUE@am__append_2823 = font.marker +-@COND_i386_qemu_TRUE@am__append_2824 = font.module +-@COND_i386_qemu_TRUE@am__append_2825 = font.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_2826 = +-@COND_i386_qemu_TRUE@am__append_2827 = $(nodist_font_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_2828 = $(nodist_font_module_SOURCES) \ ++@COND_i386_efi_TRUE@am__append_2815 = font.mod ++@COND_i386_efi_TRUE@am__append_2816 = font.marker ++@COND_i386_qemu_TRUE@am__append_2817 = font.module ++@COND_i386_qemu_TRUE@am__append_2818 = font.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_2819 = ++@COND_i386_qemu_TRUE@am__append_2820 = $(nodist_font_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_2821 = $(nodist_font_module_SOURCES) \ + @COND_i386_qemu_TRUE@ font.marker +-@COND_i386_qemu_TRUE@am__append_2829 = font.mod +-@COND_i386_qemu_TRUE@am__append_2830 = font.marker +-@COND_i386_multiboot_TRUE@am__append_2831 = font.module +-@COND_i386_multiboot_TRUE@am__append_2832 = font.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_2833 = +-@COND_i386_multiboot_TRUE@am__append_2834 = $(nodist_font_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_2835 = \ ++@COND_i386_qemu_TRUE@am__append_2822 = font.mod ++@COND_i386_qemu_TRUE@am__append_2823 = font.marker ++@COND_i386_multiboot_TRUE@am__append_2824 = font.module ++@COND_i386_multiboot_TRUE@am__append_2825 = font.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_2826 = ++@COND_i386_multiboot_TRUE@am__append_2827 = $(nodist_font_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_2828 = \ + @COND_i386_multiboot_TRUE@ $(nodist_font_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ font.marker +-@COND_i386_multiboot_TRUE@am__append_2836 = font.mod +-@COND_i386_multiboot_TRUE@am__append_2837 = font.marker +-@COND_i386_ieee1275_TRUE@am__append_2838 = font.module +-@COND_i386_ieee1275_TRUE@am__append_2839 = font.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_2840 = +-@COND_i386_ieee1275_TRUE@am__append_2841 = $(nodist_font_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_2842 = \ ++@COND_i386_multiboot_TRUE@am__append_2829 = font.mod ++@COND_i386_multiboot_TRUE@am__append_2830 = font.marker ++@COND_i386_ieee1275_TRUE@am__append_2831 = font.module ++@COND_i386_ieee1275_TRUE@am__append_2832 = font.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_2833 = ++@COND_i386_ieee1275_TRUE@am__append_2834 = $(nodist_font_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_2835 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_font_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ font.marker +-@COND_i386_ieee1275_TRUE@am__append_2843 = font.mod +-@COND_i386_ieee1275_TRUE@am__append_2844 = font.marker +-@COND_x86_64_efi_TRUE@am__append_2845 = font.module +-@COND_x86_64_efi_TRUE@am__append_2846 = font.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_2847 = +-@COND_x86_64_efi_TRUE@am__append_2848 = $(nodist_font_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_2849 = $(nodist_font_module_SOURCES) \ ++@COND_i386_ieee1275_TRUE@am__append_2836 = font.mod ++@COND_i386_ieee1275_TRUE@am__append_2837 = font.marker ++@COND_x86_64_efi_TRUE@am__append_2838 = font.module ++@COND_x86_64_efi_TRUE@am__append_2839 = font.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_2840 = ++@COND_x86_64_efi_TRUE@am__append_2841 = $(nodist_font_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_2842 = $(nodist_font_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ font.marker +-@COND_x86_64_efi_TRUE@am__append_2850 = font.mod +-@COND_x86_64_efi_TRUE@am__append_2851 = font.marker +-@COND_i386_xen_TRUE@am__append_2852 = font.module +-@COND_i386_xen_TRUE@am__append_2853 = font.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__append_2854 = +-@COND_i386_xen_TRUE@am__append_2855 = $(nodist_font_module_SOURCES) +-@COND_i386_xen_TRUE@am__append_2856 = $(nodist_font_module_SOURCES) \ ++@COND_x86_64_efi_TRUE@am__append_2843 = font.mod ++@COND_x86_64_efi_TRUE@am__append_2844 = font.marker ++@COND_i386_xen_TRUE@am__append_2845 = font.module ++@COND_i386_xen_TRUE@am__append_2846 = font.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__append_2847 = ++@COND_i386_xen_TRUE@am__append_2848 = $(nodist_font_module_SOURCES) ++@COND_i386_xen_TRUE@am__append_2849 = $(nodist_font_module_SOURCES) \ + @COND_i386_xen_TRUE@ font.marker +-@COND_i386_xen_TRUE@am__append_2857 = font.mod +-@COND_i386_xen_TRUE@am__append_2858 = font.marker +-@COND_x86_64_xen_TRUE@am__append_2859 = font.module +-@COND_x86_64_xen_TRUE@am__append_2860 = font.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__append_2861 = +-@COND_x86_64_xen_TRUE@am__append_2862 = $(nodist_font_module_SOURCES) +-@COND_x86_64_xen_TRUE@am__append_2863 = $(nodist_font_module_SOURCES) \ ++@COND_i386_xen_TRUE@am__append_2850 = font.mod ++@COND_i386_xen_TRUE@am__append_2851 = font.marker ++@COND_x86_64_xen_TRUE@am__append_2852 = font.module ++@COND_x86_64_xen_TRUE@am__append_2853 = font.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__append_2854 = ++@COND_x86_64_xen_TRUE@am__append_2855 = $(nodist_font_module_SOURCES) ++@COND_x86_64_xen_TRUE@am__append_2856 = $(nodist_font_module_SOURCES) \ + @COND_x86_64_xen_TRUE@ font.marker +-@COND_x86_64_xen_TRUE@am__append_2864 = font.mod +-@COND_x86_64_xen_TRUE@am__append_2865 = font.marker +-@COND_i386_xen_pvh_TRUE@am__append_2866 = font.module +-@COND_i386_xen_pvh_TRUE@am__append_2867 = font.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__append_2868 = +-@COND_i386_xen_pvh_TRUE@am__append_2869 = $(nodist_font_module_SOURCES) +-@COND_i386_xen_pvh_TRUE@am__append_2870 = \ ++@COND_x86_64_xen_TRUE@am__append_2857 = font.mod ++@COND_x86_64_xen_TRUE@am__append_2858 = font.marker ++@COND_i386_xen_pvh_TRUE@am__append_2859 = font.module ++@COND_i386_xen_pvh_TRUE@am__append_2860 = font.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__append_2861 = ++@COND_i386_xen_pvh_TRUE@am__append_2862 = $(nodist_font_module_SOURCES) ++@COND_i386_xen_pvh_TRUE@am__append_2863 = \ + @COND_i386_xen_pvh_TRUE@ $(nodist_font_module_SOURCES) \ + @COND_i386_xen_pvh_TRUE@ font.marker +-@COND_i386_xen_pvh_TRUE@am__append_2871 = font.mod +-@COND_i386_xen_pvh_TRUE@am__append_2872 = font.marker +-@COND_sparc64_ieee1275_TRUE@am__append_2873 = font.module +-@COND_sparc64_ieee1275_TRUE@am__append_2874 = font.module$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__append_2875 = +-@COND_sparc64_ieee1275_TRUE@am__append_2876 = $(nodist_font_module_SOURCES) +-@COND_sparc64_ieee1275_TRUE@am__append_2877 = \ ++@COND_i386_xen_pvh_TRUE@am__append_2864 = font.mod ++@COND_i386_xen_pvh_TRUE@am__append_2865 = font.marker ++@COND_sparc64_ieee1275_TRUE@am__append_2866 = font.module ++@COND_sparc64_ieee1275_TRUE@am__append_2867 = font.module$(EXEEXT) ++@COND_sparc64_ieee1275_TRUE@am__append_2868 = ++@COND_sparc64_ieee1275_TRUE@am__append_2869 = $(nodist_font_module_SOURCES) ++@COND_sparc64_ieee1275_TRUE@am__append_2870 = \ + @COND_sparc64_ieee1275_TRUE@ $(nodist_font_module_SOURCES) \ + @COND_sparc64_ieee1275_TRUE@ font.marker +-@COND_sparc64_ieee1275_TRUE@am__append_2878 = font.mod +-@COND_sparc64_ieee1275_TRUE@am__append_2879 = font.marker +-@COND_powerpc_ieee1275_TRUE@am__append_2880 = font.module +-@COND_powerpc_ieee1275_TRUE@am__append_2881 = font.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__append_2882 = +-@COND_powerpc_ieee1275_TRUE@am__append_2883 = $(nodist_font_module_SOURCES) +-@COND_powerpc_ieee1275_TRUE@am__append_2884 = \ ++@COND_sparc64_ieee1275_TRUE@am__append_2871 = font.mod ++@COND_sparc64_ieee1275_TRUE@am__append_2872 = font.marker ++@COND_powerpc_ieee1275_TRUE@am__append_2873 = font.module ++@COND_powerpc_ieee1275_TRUE@am__append_2874 = font.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__append_2875 = ++@COND_powerpc_ieee1275_TRUE@am__append_2876 = $(nodist_font_module_SOURCES) ++@COND_powerpc_ieee1275_TRUE@am__append_2877 = \ + @COND_powerpc_ieee1275_TRUE@ $(nodist_font_module_SOURCES) \ + @COND_powerpc_ieee1275_TRUE@ font.marker +-@COND_powerpc_ieee1275_TRUE@am__append_2885 = font.mod +-@COND_powerpc_ieee1275_TRUE@am__append_2886 = font.marker +-@COND_mips_arc_TRUE@am__append_2887 = font.module +-@COND_mips_arc_TRUE@am__append_2888 = font.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__append_2889 = +-@COND_mips_arc_TRUE@am__append_2890 = $(nodist_font_module_SOURCES) +-@COND_mips_arc_TRUE@am__append_2891 = $(nodist_font_module_SOURCES) \ ++@COND_powerpc_ieee1275_TRUE@am__append_2878 = font.mod ++@COND_powerpc_ieee1275_TRUE@am__append_2879 = font.marker ++@COND_mips_arc_TRUE@am__append_2880 = font.module ++@COND_mips_arc_TRUE@am__append_2881 = font.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__append_2882 = ++@COND_mips_arc_TRUE@am__append_2883 = $(nodist_font_module_SOURCES) ++@COND_mips_arc_TRUE@am__append_2884 = $(nodist_font_module_SOURCES) \ + @COND_mips_arc_TRUE@ font.marker +-@COND_mips_arc_TRUE@am__append_2892 = font.mod +-@COND_mips_arc_TRUE@am__append_2893 = font.marker +-@COND_ia64_efi_TRUE@am__append_2894 = font.module +-@COND_ia64_efi_TRUE@am__append_2895 = font.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__append_2896 = +-@COND_ia64_efi_TRUE@am__append_2897 = $(nodist_font_module_SOURCES) +-@COND_ia64_efi_TRUE@am__append_2898 = $(nodist_font_module_SOURCES) \ ++@COND_mips_arc_TRUE@am__append_2885 = font.mod ++@COND_mips_arc_TRUE@am__append_2886 = font.marker ++@COND_ia64_efi_TRUE@am__append_2887 = font.module ++@COND_ia64_efi_TRUE@am__append_2888 = font.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__append_2889 = ++@COND_ia64_efi_TRUE@am__append_2890 = $(nodist_font_module_SOURCES) ++@COND_ia64_efi_TRUE@am__append_2891 = $(nodist_font_module_SOURCES) \ + @COND_ia64_efi_TRUE@ font.marker +-@COND_ia64_efi_TRUE@am__append_2899 = font.mod +-@COND_ia64_efi_TRUE@am__append_2900 = font.marker +-@COND_mips_qemu_mips_TRUE@am__append_2901 = font.module +-@COND_mips_qemu_mips_TRUE@am__append_2902 = font.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__append_2903 = +-@COND_mips_qemu_mips_TRUE@am__append_2904 = $(nodist_font_module_SOURCES) +-@COND_mips_qemu_mips_TRUE@am__append_2905 = \ ++@COND_ia64_efi_TRUE@am__append_2892 = font.mod ++@COND_ia64_efi_TRUE@am__append_2893 = font.marker ++@COND_mips_qemu_mips_TRUE@am__append_2894 = font.module ++@COND_mips_qemu_mips_TRUE@am__append_2895 = font.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__append_2896 = ++@COND_mips_qemu_mips_TRUE@am__append_2897 = $(nodist_font_module_SOURCES) ++@COND_mips_qemu_mips_TRUE@am__append_2898 = \ + @COND_mips_qemu_mips_TRUE@ $(nodist_font_module_SOURCES) \ + @COND_mips_qemu_mips_TRUE@ font.marker +-@COND_mips_qemu_mips_TRUE@am__append_2906 = font.mod +-@COND_mips_qemu_mips_TRUE@am__append_2907 = font.marker +-@COND_arm_uboot_TRUE@am__append_2908 = font.module +-@COND_arm_uboot_TRUE@am__append_2909 = font.module$(EXEEXT) +-@COND_arm_uboot_TRUE@am__append_2910 = +-@COND_arm_uboot_TRUE@am__append_2911 = $(nodist_font_module_SOURCES) +-@COND_arm_uboot_TRUE@am__append_2912 = $(nodist_font_module_SOURCES) \ ++@COND_mips_qemu_mips_TRUE@am__append_2899 = font.mod ++@COND_mips_qemu_mips_TRUE@am__append_2900 = font.marker ++@COND_arm_uboot_TRUE@am__append_2901 = font.module ++@COND_arm_uboot_TRUE@am__append_2902 = font.module$(EXEEXT) ++@COND_arm_uboot_TRUE@am__append_2903 = ++@COND_arm_uboot_TRUE@am__append_2904 = $(nodist_font_module_SOURCES) ++@COND_arm_uboot_TRUE@am__append_2905 = $(nodist_font_module_SOURCES) \ + @COND_arm_uboot_TRUE@ font.marker +-@COND_arm_uboot_TRUE@am__append_2913 = font.mod +-@COND_arm_uboot_TRUE@am__append_2914 = font.marker +-@COND_arm_efi_TRUE@am__append_2915 = font.module +-@COND_arm_efi_TRUE@am__append_2916 = font.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__append_2917 = +-@COND_arm_efi_TRUE@am__append_2918 = $(nodist_font_module_SOURCES) +-@COND_arm_efi_TRUE@am__append_2919 = $(nodist_font_module_SOURCES) \ ++@COND_arm_uboot_TRUE@am__append_2906 = font.mod ++@COND_arm_uboot_TRUE@am__append_2907 = font.marker ++@COND_arm_efi_TRUE@am__append_2908 = font.module ++@COND_arm_efi_TRUE@am__append_2909 = font.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__append_2910 = ++@COND_arm_efi_TRUE@am__append_2911 = $(nodist_font_module_SOURCES) ++@COND_arm_efi_TRUE@am__append_2912 = $(nodist_font_module_SOURCES) \ + @COND_arm_efi_TRUE@ font.marker +-@COND_arm_efi_TRUE@am__append_2920 = font.mod +-@COND_arm_efi_TRUE@am__append_2921 = font.marker +-@COND_arm64_efi_TRUE@am__append_2922 = font.module +-@COND_arm64_efi_TRUE@am__append_2923 = font.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__append_2924 = +-@COND_arm64_efi_TRUE@am__append_2925 = $(nodist_font_module_SOURCES) +-@COND_arm64_efi_TRUE@am__append_2926 = $(nodist_font_module_SOURCES) \ ++@COND_arm_efi_TRUE@am__append_2913 = font.mod ++@COND_arm_efi_TRUE@am__append_2914 = font.marker ++@COND_arm64_efi_TRUE@am__append_2915 = font.module ++@COND_arm64_efi_TRUE@am__append_2916 = font.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__append_2917 = ++@COND_arm64_efi_TRUE@am__append_2918 = $(nodist_font_module_SOURCES) ++@COND_arm64_efi_TRUE@am__append_2919 = $(nodist_font_module_SOURCES) \ + @COND_arm64_efi_TRUE@ font.marker +-@COND_arm64_efi_TRUE@am__append_2927 = font.mod +-@COND_arm64_efi_TRUE@am__append_2928 = font.marker +-@COND_riscv32_efi_TRUE@am__append_2929 = font.module +-@COND_riscv32_efi_TRUE@am__append_2930 = font.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__append_2931 = +-@COND_riscv32_efi_TRUE@am__append_2932 = $(nodist_font_module_SOURCES) +-@COND_riscv32_efi_TRUE@am__append_2933 = \ ++@COND_arm64_efi_TRUE@am__append_2920 = font.mod ++@COND_arm64_efi_TRUE@am__append_2921 = font.marker ++@COND_riscv32_efi_TRUE@am__append_2922 = font.module ++@COND_riscv32_efi_TRUE@am__append_2923 = font.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__append_2924 = ++@COND_riscv32_efi_TRUE@am__append_2925 = $(nodist_font_module_SOURCES) ++@COND_riscv32_efi_TRUE@am__append_2926 = \ + @COND_riscv32_efi_TRUE@ $(nodist_font_module_SOURCES) \ + @COND_riscv32_efi_TRUE@ font.marker +-@COND_riscv32_efi_TRUE@am__append_2934 = font.mod +-@COND_riscv32_efi_TRUE@am__append_2935 = font.marker +-@COND_riscv64_efi_TRUE@am__append_2936 = font.module +-@COND_riscv64_efi_TRUE@am__append_2937 = font.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__append_2938 = +-@COND_riscv64_efi_TRUE@am__append_2939 = $(nodist_font_module_SOURCES) +-@COND_riscv64_efi_TRUE@am__append_2940 = \ ++@COND_riscv32_efi_TRUE@am__append_2927 = font.mod ++@COND_riscv32_efi_TRUE@am__append_2928 = font.marker ++@COND_riscv64_efi_TRUE@am__append_2929 = font.module ++@COND_riscv64_efi_TRUE@am__append_2930 = font.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_2931 = ++@COND_riscv64_efi_TRUE@am__append_2932 = $(nodist_font_module_SOURCES) ++@COND_riscv64_efi_TRUE@am__append_2933 = \ + @COND_riscv64_efi_TRUE@ $(nodist_font_module_SOURCES) \ + @COND_riscv64_efi_TRUE@ font.marker +-@COND_riscv64_efi_TRUE@am__append_2941 = font.mod +-@COND_riscv64_efi_TRUE@am__append_2942 = font.marker +-@COND_i386_pc_TRUE@am__append_2943 = pxe.module +-@COND_i386_pc_TRUE@am__append_2944 = pxe.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_2934 = font.mod ++@COND_riscv64_efi_TRUE@am__append_2935 = font.marker ++@COND_i386_pc_TRUE@am__append_2936 = pxe.module ++@COND_i386_pc_TRUE@am__append_2937 = pxe.module$(EXEEXT) + @COND_i386_pc_FALSE@pxe_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_2945 = +-@COND_i386_pc_TRUE@am__append_2946 = $(nodist_pxe_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_2947 = $(nodist_pxe_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_2938 = ++@COND_i386_pc_TRUE@am__append_2939 = $(nodist_pxe_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_2940 = $(nodist_pxe_module_SOURCES) \ + @COND_i386_pc_TRUE@ pxe.marker +-@COND_i386_pc_TRUE@am__append_2948 = pxe.mod +-@COND_i386_pc_TRUE@am__append_2949 = pxe.marker +-@COND_emu_TRUE@am__append_2950 = bufio.module +-@COND_emu_TRUE@am__append_2951 = bufio.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__append_2941 = pxe.mod ++@COND_i386_pc_TRUE@am__append_2942 = pxe.marker ++@COND_emu_TRUE@am__append_2943 = bufio.module ++@COND_emu_TRUE@am__append_2944 = bufio.module$(EXEEXT) + @COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@bufio_module_DEPENDENCIES = +-@COND_emu_TRUE@am__append_2952 = +-@COND_emu_TRUE@am__append_2953 = $(nodist_bufio_module_SOURCES) +-@COND_emu_TRUE@am__append_2954 = $(nodist_bufio_module_SOURCES) \ ++@COND_emu_TRUE@am__append_2945 = ++@COND_emu_TRUE@am__append_2946 = $(nodist_bufio_module_SOURCES) ++@COND_emu_TRUE@am__append_2947 = $(nodist_bufio_module_SOURCES) \ + @COND_emu_TRUE@ bufio.marker +-@COND_emu_TRUE@am__append_2955 = bufio.mod +-@COND_emu_TRUE@am__append_2956 = bufio.marker +-@COND_i386_pc_TRUE@am__append_2957 = bufio.module +-@COND_i386_pc_TRUE@am__append_2958 = bufio.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__append_2959 = +-@COND_i386_pc_TRUE@am__append_2960 = $(nodist_bufio_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_2961 = $(nodist_bufio_module_SOURCES) \ ++@COND_emu_TRUE@am__append_2948 = bufio.mod ++@COND_emu_TRUE@am__append_2949 = bufio.marker ++@COND_i386_pc_TRUE@am__append_2950 = bufio.module ++@COND_i386_pc_TRUE@am__append_2951 = bufio.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__append_2952 = ++@COND_i386_pc_TRUE@am__append_2953 = $(nodist_bufio_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_2954 = $(nodist_bufio_module_SOURCES) \ + @COND_i386_pc_TRUE@ bufio.marker +-@COND_i386_pc_TRUE@am__append_2962 = bufio.mod +-@COND_i386_pc_TRUE@am__append_2963 = bufio.marker +-@COND_i386_efi_TRUE@am__append_2964 = bufio.module +-@COND_i386_efi_TRUE@am__append_2965 = bufio.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_2966 = +-@COND_i386_efi_TRUE@am__append_2967 = $(nodist_bufio_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_2968 = $(nodist_bufio_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_2955 = bufio.mod ++@COND_i386_pc_TRUE@am__append_2956 = bufio.marker ++@COND_i386_efi_TRUE@am__append_2957 = bufio.module ++@COND_i386_efi_TRUE@am__append_2958 = bufio.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_2959 = ++@COND_i386_efi_TRUE@am__append_2960 = $(nodist_bufio_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_2961 = $(nodist_bufio_module_SOURCES) \ + @COND_i386_efi_TRUE@ bufio.marker +-@COND_i386_efi_TRUE@am__append_2969 = bufio.mod +-@COND_i386_efi_TRUE@am__append_2970 = bufio.marker +-@COND_i386_qemu_TRUE@am__append_2971 = bufio.module +-@COND_i386_qemu_TRUE@am__append_2972 = bufio.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_2973 = +-@COND_i386_qemu_TRUE@am__append_2974 = $(nodist_bufio_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_2975 = $(nodist_bufio_module_SOURCES) \ ++@COND_i386_efi_TRUE@am__append_2962 = bufio.mod ++@COND_i386_efi_TRUE@am__append_2963 = bufio.marker ++@COND_i386_qemu_TRUE@am__append_2964 = bufio.module ++@COND_i386_qemu_TRUE@am__append_2965 = bufio.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_2966 = ++@COND_i386_qemu_TRUE@am__append_2967 = $(nodist_bufio_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_2968 = $(nodist_bufio_module_SOURCES) \ + @COND_i386_qemu_TRUE@ bufio.marker +-@COND_i386_qemu_TRUE@am__append_2976 = bufio.mod +-@COND_i386_qemu_TRUE@am__append_2977 = bufio.marker +-@COND_i386_multiboot_TRUE@am__append_2978 = bufio.module +-@COND_i386_multiboot_TRUE@am__append_2979 = bufio.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_2980 = +-@COND_i386_multiboot_TRUE@am__append_2981 = $(nodist_bufio_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_2982 = \ ++@COND_i386_qemu_TRUE@am__append_2969 = bufio.mod ++@COND_i386_qemu_TRUE@am__append_2970 = bufio.marker ++@COND_i386_multiboot_TRUE@am__append_2971 = bufio.module ++@COND_i386_multiboot_TRUE@am__append_2972 = bufio.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_2973 = ++@COND_i386_multiboot_TRUE@am__append_2974 = $(nodist_bufio_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_2975 = \ + @COND_i386_multiboot_TRUE@ $(nodist_bufio_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ bufio.marker +-@COND_i386_multiboot_TRUE@am__append_2983 = bufio.mod +-@COND_i386_multiboot_TRUE@am__append_2984 = bufio.marker +-@COND_i386_ieee1275_TRUE@am__append_2985 = bufio.module +-@COND_i386_ieee1275_TRUE@am__append_2986 = bufio.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_2987 = +-@COND_i386_ieee1275_TRUE@am__append_2988 = $(nodist_bufio_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_2989 = \ ++@COND_i386_multiboot_TRUE@am__append_2976 = bufio.mod ++@COND_i386_multiboot_TRUE@am__append_2977 = bufio.marker ++@COND_i386_ieee1275_TRUE@am__append_2978 = bufio.module ++@COND_i386_ieee1275_TRUE@am__append_2979 = bufio.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_2980 = ++@COND_i386_ieee1275_TRUE@am__append_2981 = $(nodist_bufio_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_2982 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_bufio_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ bufio.marker +-@COND_i386_ieee1275_TRUE@am__append_2990 = bufio.mod +-@COND_i386_ieee1275_TRUE@am__append_2991 = bufio.marker +-@COND_x86_64_efi_TRUE@am__append_2992 = bufio.module +-@COND_x86_64_efi_TRUE@am__append_2993 = bufio.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_2994 = +-@COND_x86_64_efi_TRUE@am__append_2995 = $(nodist_bufio_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_2996 = \ ++@COND_i386_ieee1275_TRUE@am__append_2983 = bufio.mod ++@COND_i386_ieee1275_TRUE@am__append_2984 = bufio.marker ++@COND_x86_64_efi_TRUE@am__append_2985 = bufio.module ++@COND_x86_64_efi_TRUE@am__append_2986 = bufio.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_2987 = ++@COND_x86_64_efi_TRUE@am__append_2988 = $(nodist_bufio_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_2989 = \ + @COND_x86_64_efi_TRUE@ $(nodist_bufio_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ bufio.marker +-@COND_x86_64_efi_TRUE@am__append_2997 = bufio.mod +-@COND_x86_64_efi_TRUE@am__append_2998 = bufio.marker +-@COND_i386_xen_TRUE@am__append_2999 = bufio.module +-@COND_i386_xen_TRUE@am__append_3000 = bufio.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__append_3001 = +-@COND_i386_xen_TRUE@am__append_3002 = $(nodist_bufio_module_SOURCES) +-@COND_i386_xen_TRUE@am__append_3003 = $(nodist_bufio_module_SOURCES) \ ++@COND_x86_64_efi_TRUE@am__append_2990 = bufio.mod ++@COND_x86_64_efi_TRUE@am__append_2991 = bufio.marker ++@COND_i386_xen_TRUE@am__append_2992 = bufio.module ++@COND_i386_xen_TRUE@am__append_2993 = bufio.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__append_2994 = ++@COND_i386_xen_TRUE@am__append_2995 = $(nodist_bufio_module_SOURCES) ++@COND_i386_xen_TRUE@am__append_2996 = $(nodist_bufio_module_SOURCES) \ + @COND_i386_xen_TRUE@ bufio.marker +-@COND_i386_xen_TRUE@am__append_3004 = bufio.mod +-@COND_i386_xen_TRUE@am__append_3005 = bufio.marker +-@COND_x86_64_xen_TRUE@am__append_3006 = bufio.module +-@COND_x86_64_xen_TRUE@am__append_3007 = bufio.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__append_3008 = +-@COND_x86_64_xen_TRUE@am__append_3009 = $(nodist_bufio_module_SOURCES) +-@COND_x86_64_xen_TRUE@am__append_3010 = \ ++@COND_i386_xen_TRUE@am__append_2997 = bufio.mod ++@COND_i386_xen_TRUE@am__append_2998 = bufio.marker ++@COND_x86_64_xen_TRUE@am__append_2999 = bufio.module ++@COND_x86_64_xen_TRUE@am__append_3000 = bufio.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__append_3001 = ++@COND_x86_64_xen_TRUE@am__append_3002 = $(nodist_bufio_module_SOURCES) ++@COND_x86_64_xen_TRUE@am__append_3003 = \ + @COND_x86_64_xen_TRUE@ $(nodist_bufio_module_SOURCES) \ + @COND_x86_64_xen_TRUE@ bufio.marker +-@COND_x86_64_xen_TRUE@am__append_3011 = bufio.mod +-@COND_x86_64_xen_TRUE@am__append_3012 = bufio.marker +-@COND_i386_xen_pvh_TRUE@am__append_3013 = bufio.module +-@COND_i386_xen_pvh_TRUE@am__append_3014 = bufio.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__append_3015 = +-@COND_i386_xen_pvh_TRUE@am__append_3016 = $(nodist_bufio_module_SOURCES) +-@COND_i386_xen_pvh_TRUE@am__append_3017 = \ ++@COND_x86_64_xen_TRUE@am__append_3004 = bufio.mod ++@COND_x86_64_xen_TRUE@am__append_3005 = bufio.marker ++@COND_i386_xen_pvh_TRUE@am__append_3006 = bufio.module ++@COND_i386_xen_pvh_TRUE@am__append_3007 = bufio.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__append_3008 = ++@COND_i386_xen_pvh_TRUE@am__append_3009 = $(nodist_bufio_module_SOURCES) ++@COND_i386_xen_pvh_TRUE@am__append_3010 = \ + @COND_i386_xen_pvh_TRUE@ $(nodist_bufio_module_SOURCES) \ + @COND_i386_xen_pvh_TRUE@ bufio.marker +-@COND_i386_xen_pvh_TRUE@am__append_3018 = bufio.mod +-@COND_i386_xen_pvh_TRUE@am__append_3019 = bufio.marker +-@COND_sparc64_ieee1275_TRUE@am__append_3020 = bufio.module +-@COND_sparc64_ieee1275_TRUE@am__append_3021 = bufio.module$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__append_3022 = +-@COND_sparc64_ieee1275_TRUE@am__append_3023 = $(nodist_bufio_module_SOURCES) +-@COND_sparc64_ieee1275_TRUE@am__append_3024 = \ ++@COND_i386_xen_pvh_TRUE@am__append_3011 = bufio.mod ++@COND_i386_xen_pvh_TRUE@am__append_3012 = bufio.marker ++@COND_sparc64_ieee1275_TRUE@am__append_3013 = bufio.module ++@COND_sparc64_ieee1275_TRUE@am__append_3014 = bufio.module$(EXEEXT) ++@COND_sparc64_ieee1275_TRUE@am__append_3015 = ++@COND_sparc64_ieee1275_TRUE@am__append_3016 = $(nodist_bufio_module_SOURCES) ++@COND_sparc64_ieee1275_TRUE@am__append_3017 = \ + @COND_sparc64_ieee1275_TRUE@ $(nodist_bufio_module_SOURCES) \ + @COND_sparc64_ieee1275_TRUE@ bufio.marker +-@COND_sparc64_ieee1275_TRUE@am__append_3025 = bufio.mod +-@COND_sparc64_ieee1275_TRUE@am__append_3026 = bufio.marker +-@COND_powerpc_ieee1275_TRUE@am__append_3027 = bufio.module +-@COND_powerpc_ieee1275_TRUE@am__append_3028 = bufio.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__append_3029 = +-@COND_powerpc_ieee1275_TRUE@am__append_3030 = $(nodist_bufio_module_SOURCES) +-@COND_powerpc_ieee1275_TRUE@am__append_3031 = \ ++@COND_sparc64_ieee1275_TRUE@am__append_3018 = bufio.mod ++@COND_sparc64_ieee1275_TRUE@am__append_3019 = bufio.marker ++@COND_powerpc_ieee1275_TRUE@am__append_3020 = bufio.module ++@COND_powerpc_ieee1275_TRUE@am__append_3021 = bufio.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__append_3022 = ++@COND_powerpc_ieee1275_TRUE@am__append_3023 = $(nodist_bufio_module_SOURCES) ++@COND_powerpc_ieee1275_TRUE@am__append_3024 = \ + @COND_powerpc_ieee1275_TRUE@ $(nodist_bufio_module_SOURCES) \ + @COND_powerpc_ieee1275_TRUE@ bufio.marker +-@COND_powerpc_ieee1275_TRUE@am__append_3032 = bufio.mod +-@COND_powerpc_ieee1275_TRUE@am__append_3033 = bufio.marker +-@COND_mips_arc_TRUE@am__append_3034 = bufio.module +-@COND_mips_arc_TRUE@am__append_3035 = bufio.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__append_3036 = +-@COND_mips_arc_TRUE@am__append_3037 = $(nodist_bufio_module_SOURCES) +-@COND_mips_arc_TRUE@am__append_3038 = $(nodist_bufio_module_SOURCES) \ ++@COND_powerpc_ieee1275_TRUE@am__append_3025 = bufio.mod ++@COND_powerpc_ieee1275_TRUE@am__append_3026 = bufio.marker ++@COND_mips_arc_TRUE@am__append_3027 = bufio.module ++@COND_mips_arc_TRUE@am__append_3028 = bufio.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__append_3029 = ++@COND_mips_arc_TRUE@am__append_3030 = $(nodist_bufio_module_SOURCES) ++@COND_mips_arc_TRUE@am__append_3031 = $(nodist_bufio_module_SOURCES) \ + @COND_mips_arc_TRUE@ bufio.marker +-@COND_mips_arc_TRUE@am__append_3039 = bufio.mod +-@COND_mips_arc_TRUE@am__append_3040 = bufio.marker +-@COND_ia64_efi_TRUE@am__append_3041 = bufio.module +-@COND_ia64_efi_TRUE@am__append_3042 = bufio.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__append_3043 = +-@COND_ia64_efi_TRUE@am__append_3044 = $(nodist_bufio_module_SOURCES) +-@COND_ia64_efi_TRUE@am__append_3045 = $(nodist_bufio_module_SOURCES) \ ++@COND_mips_arc_TRUE@am__append_3032 = bufio.mod ++@COND_mips_arc_TRUE@am__append_3033 = bufio.marker ++@COND_ia64_efi_TRUE@am__append_3034 = bufio.module ++@COND_ia64_efi_TRUE@am__append_3035 = bufio.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__append_3036 = ++@COND_ia64_efi_TRUE@am__append_3037 = $(nodist_bufio_module_SOURCES) ++@COND_ia64_efi_TRUE@am__append_3038 = $(nodist_bufio_module_SOURCES) \ + @COND_ia64_efi_TRUE@ bufio.marker +-@COND_ia64_efi_TRUE@am__append_3046 = bufio.mod +-@COND_ia64_efi_TRUE@am__append_3047 = bufio.marker +-@COND_mips_qemu_mips_TRUE@am__append_3048 = bufio.module +-@COND_mips_qemu_mips_TRUE@am__append_3049 = bufio.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__append_3050 = +-@COND_mips_qemu_mips_TRUE@am__append_3051 = $(nodist_bufio_module_SOURCES) +-@COND_mips_qemu_mips_TRUE@am__append_3052 = \ ++@COND_ia64_efi_TRUE@am__append_3039 = bufio.mod ++@COND_ia64_efi_TRUE@am__append_3040 = bufio.marker ++@COND_mips_qemu_mips_TRUE@am__append_3041 = bufio.module ++@COND_mips_qemu_mips_TRUE@am__append_3042 = bufio.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__append_3043 = ++@COND_mips_qemu_mips_TRUE@am__append_3044 = $(nodist_bufio_module_SOURCES) ++@COND_mips_qemu_mips_TRUE@am__append_3045 = \ + @COND_mips_qemu_mips_TRUE@ $(nodist_bufio_module_SOURCES) \ + @COND_mips_qemu_mips_TRUE@ bufio.marker +-@COND_mips_qemu_mips_TRUE@am__append_3053 = bufio.mod +-@COND_mips_qemu_mips_TRUE@am__append_3054 = bufio.marker +-@COND_arm_uboot_TRUE@am__append_3055 = bufio.module +-@COND_arm_uboot_TRUE@am__append_3056 = bufio.module$(EXEEXT) +-@COND_arm_uboot_TRUE@am__append_3057 = +-@COND_arm_uboot_TRUE@am__append_3058 = $(nodist_bufio_module_SOURCES) +-@COND_arm_uboot_TRUE@am__append_3059 = $(nodist_bufio_module_SOURCES) \ ++@COND_mips_qemu_mips_TRUE@am__append_3046 = bufio.mod ++@COND_mips_qemu_mips_TRUE@am__append_3047 = bufio.marker ++@COND_arm_uboot_TRUE@am__append_3048 = bufio.module ++@COND_arm_uboot_TRUE@am__append_3049 = bufio.module$(EXEEXT) ++@COND_arm_uboot_TRUE@am__append_3050 = ++@COND_arm_uboot_TRUE@am__append_3051 = $(nodist_bufio_module_SOURCES) ++@COND_arm_uboot_TRUE@am__append_3052 = $(nodist_bufio_module_SOURCES) \ + @COND_arm_uboot_TRUE@ bufio.marker +-@COND_arm_uboot_TRUE@am__append_3060 = bufio.mod +-@COND_arm_uboot_TRUE@am__append_3061 = bufio.marker +-@COND_arm_efi_TRUE@am__append_3062 = bufio.module +-@COND_arm_efi_TRUE@am__append_3063 = bufio.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__append_3064 = +-@COND_arm_efi_TRUE@am__append_3065 = $(nodist_bufio_module_SOURCES) +-@COND_arm_efi_TRUE@am__append_3066 = $(nodist_bufio_module_SOURCES) \ ++@COND_arm_uboot_TRUE@am__append_3053 = bufio.mod ++@COND_arm_uboot_TRUE@am__append_3054 = bufio.marker ++@COND_arm_efi_TRUE@am__append_3055 = bufio.module ++@COND_arm_efi_TRUE@am__append_3056 = bufio.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__append_3057 = ++@COND_arm_efi_TRUE@am__append_3058 = $(nodist_bufio_module_SOURCES) ++@COND_arm_efi_TRUE@am__append_3059 = $(nodist_bufio_module_SOURCES) \ + @COND_arm_efi_TRUE@ bufio.marker +-@COND_arm_efi_TRUE@am__append_3067 = bufio.mod +-@COND_arm_efi_TRUE@am__append_3068 = bufio.marker +-@COND_arm64_efi_TRUE@am__append_3069 = bufio.module +-@COND_arm64_efi_TRUE@am__append_3070 = bufio.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__append_3071 = +-@COND_arm64_efi_TRUE@am__append_3072 = $(nodist_bufio_module_SOURCES) +-@COND_arm64_efi_TRUE@am__append_3073 = $(nodist_bufio_module_SOURCES) \ ++@COND_arm_efi_TRUE@am__append_3060 = bufio.mod ++@COND_arm_efi_TRUE@am__append_3061 = bufio.marker ++@COND_arm64_efi_TRUE@am__append_3062 = bufio.module ++@COND_arm64_efi_TRUE@am__append_3063 = bufio.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__append_3064 = ++@COND_arm64_efi_TRUE@am__append_3065 = $(nodist_bufio_module_SOURCES) ++@COND_arm64_efi_TRUE@am__append_3066 = $(nodist_bufio_module_SOURCES) \ + @COND_arm64_efi_TRUE@ bufio.marker +-@COND_arm64_efi_TRUE@am__append_3074 = bufio.mod +-@COND_arm64_efi_TRUE@am__append_3075 = bufio.marker +-@COND_riscv32_efi_TRUE@am__append_3076 = bufio.module +-@COND_riscv32_efi_TRUE@am__append_3077 = bufio.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__append_3078 = +-@COND_riscv32_efi_TRUE@am__append_3079 = $(nodist_bufio_module_SOURCES) +-@COND_riscv32_efi_TRUE@am__append_3080 = \ ++@COND_arm64_efi_TRUE@am__append_3067 = bufio.mod ++@COND_arm64_efi_TRUE@am__append_3068 = bufio.marker ++@COND_riscv32_efi_TRUE@am__append_3069 = bufio.module ++@COND_riscv32_efi_TRUE@am__append_3070 = bufio.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__append_3071 = ++@COND_riscv32_efi_TRUE@am__append_3072 = $(nodist_bufio_module_SOURCES) ++@COND_riscv32_efi_TRUE@am__append_3073 = \ + @COND_riscv32_efi_TRUE@ $(nodist_bufio_module_SOURCES) \ + @COND_riscv32_efi_TRUE@ bufio.marker +-@COND_riscv32_efi_TRUE@am__append_3081 = bufio.mod +-@COND_riscv32_efi_TRUE@am__append_3082 = bufio.marker +-@COND_riscv64_efi_TRUE@am__append_3083 = bufio.module +-@COND_riscv64_efi_TRUE@am__append_3084 = bufio.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__append_3085 = +-@COND_riscv64_efi_TRUE@am__append_3086 = $(nodist_bufio_module_SOURCES) +-@COND_riscv64_efi_TRUE@am__append_3087 = \ ++@COND_riscv32_efi_TRUE@am__append_3074 = bufio.mod ++@COND_riscv32_efi_TRUE@am__append_3075 = bufio.marker ++@COND_riscv64_efi_TRUE@am__append_3076 = bufio.module ++@COND_riscv64_efi_TRUE@am__append_3077 = bufio.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_3078 = ++@COND_riscv64_efi_TRUE@am__append_3079 = $(nodist_bufio_module_SOURCES) ++@COND_riscv64_efi_TRUE@am__append_3080 = \ + @COND_riscv64_efi_TRUE@ $(nodist_bufio_module_SOURCES) \ + @COND_riscv64_efi_TRUE@ bufio.marker +-@COND_riscv64_efi_TRUE@am__append_3088 = bufio.mod +-@COND_riscv64_efi_TRUE@am__append_3089 = bufio.marker +-@COND_i386_pc_TRUE@am__append_3090 = relocator.module +-@COND_i386_pc_TRUE@am__append_3091 = relocator.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_3081 = bufio.mod ++@COND_riscv64_efi_TRUE@am__append_3082 = bufio.marker ++@COND_i386_pc_TRUE@am__append_3083 = relocator.module ++@COND_i386_pc_TRUE@am__append_3084 = relocator.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@relocator_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_3092 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +-@COND_i386_pc_TRUE@am__append_3093 = $(nodist_relocator_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_3094 = \ ++@COND_i386_pc_TRUE@am__append_3085 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S ++@COND_i386_pc_TRUE@am__append_3086 = $(nodist_relocator_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_3087 = \ + @COND_i386_pc_TRUE@ $(nodist_relocator_module_SOURCES) \ + @COND_i386_pc_TRUE@ relocator.marker +-@COND_i386_pc_TRUE@am__append_3095 = relocator.mod +-@COND_i386_pc_TRUE@am__append_3096 = relocator.marker +-@COND_i386_efi_TRUE@am__append_3097 = relocator.module +-@COND_i386_efi_TRUE@am__append_3098 = relocator.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_3099 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +-@COND_i386_efi_TRUE@am__append_3100 = $(nodist_relocator_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_3101 = \ ++@COND_i386_pc_TRUE@am__append_3088 = relocator.mod ++@COND_i386_pc_TRUE@am__append_3089 = relocator.marker ++@COND_i386_efi_TRUE@am__append_3090 = relocator.module ++@COND_i386_efi_TRUE@am__append_3091 = relocator.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_3092 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S ++@COND_i386_efi_TRUE@am__append_3093 = $(nodist_relocator_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_3094 = \ + @COND_i386_efi_TRUE@ $(nodist_relocator_module_SOURCES) \ + @COND_i386_efi_TRUE@ relocator.marker +-@COND_i386_efi_TRUE@am__append_3102 = relocator.mod +-@COND_i386_efi_TRUE@am__append_3103 = relocator.marker +-@COND_i386_qemu_TRUE@am__append_3104 = relocator.module +-@COND_i386_qemu_TRUE@am__append_3105 = relocator.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_3106 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +-@COND_i386_qemu_TRUE@am__append_3107 = $(nodist_relocator_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_3108 = \ ++@COND_i386_efi_TRUE@am__append_3095 = relocator.mod ++@COND_i386_efi_TRUE@am__append_3096 = relocator.marker ++@COND_i386_qemu_TRUE@am__append_3097 = relocator.module ++@COND_i386_qemu_TRUE@am__append_3098 = relocator.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_3099 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S ++@COND_i386_qemu_TRUE@am__append_3100 = $(nodist_relocator_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_3101 = \ + @COND_i386_qemu_TRUE@ $(nodist_relocator_module_SOURCES) \ + @COND_i386_qemu_TRUE@ relocator.marker +-@COND_i386_qemu_TRUE@am__append_3109 = relocator.mod +-@COND_i386_qemu_TRUE@am__append_3110 = relocator.marker +-@COND_i386_coreboot_TRUE@am__append_3111 = relocator.module +-@COND_i386_coreboot_TRUE@am__append_3112 = relocator.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_3113 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +-@COND_i386_coreboot_TRUE@am__append_3114 = $(nodist_relocator_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_3115 = \ ++@COND_i386_qemu_TRUE@am__append_3102 = relocator.mod ++@COND_i386_qemu_TRUE@am__append_3103 = relocator.marker ++@COND_i386_coreboot_TRUE@am__append_3104 = relocator.module ++@COND_i386_coreboot_TRUE@am__append_3105 = relocator.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_3106 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S ++@COND_i386_coreboot_TRUE@am__append_3107 = $(nodist_relocator_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_3108 = \ + @COND_i386_coreboot_TRUE@ $(nodist_relocator_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ relocator.marker +-@COND_i386_coreboot_TRUE@am__append_3116 = relocator.mod +-@COND_i386_coreboot_TRUE@am__append_3117 = relocator.marker +-@COND_i386_multiboot_TRUE@am__append_3118 = relocator.module +-@COND_i386_multiboot_TRUE@am__append_3119 = relocator.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_3120 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +-@COND_i386_multiboot_TRUE@am__append_3121 = $(nodist_relocator_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_3122 = \ ++@COND_i386_coreboot_TRUE@am__append_3109 = relocator.mod ++@COND_i386_coreboot_TRUE@am__append_3110 = relocator.marker ++@COND_i386_multiboot_TRUE@am__append_3111 = relocator.module ++@COND_i386_multiboot_TRUE@am__append_3112 = relocator.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_3113 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S ++@COND_i386_multiboot_TRUE@am__append_3114 = $(nodist_relocator_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_3115 = \ + @COND_i386_multiboot_TRUE@ $(nodist_relocator_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ relocator.marker +-@COND_i386_multiboot_TRUE@am__append_3123 = relocator.mod +-@COND_i386_multiboot_TRUE@am__append_3124 = relocator.marker +-@COND_i386_ieee1275_TRUE@am__append_3125 = relocator.module +-@COND_i386_ieee1275_TRUE@am__append_3126 = relocator.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_3127 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +-@COND_i386_ieee1275_TRUE@am__append_3128 = $(nodist_relocator_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_3129 = \ ++@COND_i386_multiboot_TRUE@am__append_3116 = relocator.mod ++@COND_i386_multiboot_TRUE@am__append_3117 = relocator.marker ++@COND_i386_ieee1275_TRUE@am__append_3118 = relocator.module ++@COND_i386_ieee1275_TRUE@am__append_3119 = relocator.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_3120 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S ++@COND_i386_ieee1275_TRUE@am__append_3121 = $(nodist_relocator_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_3122 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_relocator_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ relocator.marker +-@COND_i386_ieee1275_TRUE@am__append_3130 = relocator.mod +-@COND_i386_ieee1275_TRUE@am__append_3131 = relocator.marker +-@COND_x86_64_efi_TRUE@am__append_3132 = relocator.module +-@COND_x86_64_efi_TRUE@am__append_3133 = relocator.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_3134 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +-@COND_x86_64_efi_TRUE@am__append_3135 = $(nodist_relocator_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_3136 = \ ++@COND_i386_ieee1275_TRUE@am__append_3123 = relocator.mod ++@COND_i386_ieee1275_TRUE@am__append_3124 = relocator.marker ++@COND_x86_64_efi_TRUE@am__append_3125 = relocator.module ++@COND_x86_64_efi_TRUE@am__append_3126 = relocator.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_3127 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S ++@COND_x86_64_efi_TRUE@am__append_3128 = $(nodist_relocator_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_3129 = \ + @COND_x86_64_efi_TRUE@ $(nodist_relocator_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ relocator.marker +-@COND_x86_64_efi_TRUE@am__append_3137 = relocator.mod +-@COND_x86_64_efi_TRUE@am__append_3138 = relocator.marker +-@COND_i386_xen_TRUE@am__append_3139 = relocator.module +-@COND_i386_xen_TRUE@am__append_3140 = relocator.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__append_3141 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +-@COND_i386_xen_TRUE@am__append_3142 = $(nodist_relocator_module_SOURCES) +-@COND_i386_xen_TRUE@am__append_3143 = \ ++@COND_x86_64_efi_TRUE@am__append_3130 = relocator.mod ++@COND_x86_64_efi_TRUE@am__append_3131 = relocator.marker ++@COND_i386_xen_TRUE@am__append_3132 = relocator.module ++@COND_i386_xen_TRUE@am__append_3133 = relocator.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__append_3134 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S ++@COND_i386_xen_TRUE@am__append_3135 = $(nodist_relocator_module_SOURCES) ++@COND_i386_xen_TRUE@am__append_3136 = \ + @COND_i386_xen_TRUE@ $(nodist_relocator_module_SOURCES) \ + @COND_i386_xen_TRUE@ relocator.marker +-@COND_i386_xen_TRUE@am__append_3144 = relocator.mod +-@COND_i386_xen_TRUE@am__append_3145 = relocator.marker +-@COND_x86_64_xen_TRUE@am__append_3146 = relocator.module +-@COND_x86_64_xen_TRUE@am__append_3147 = relocator.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__append_3148 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +-@COND_x86_64_xen_TRUE@am__append_3149 = $(nodist_relocator_module_SOURCES) +-@COND_x86_64_xen_TRUE@am__append_3150 = \ ++@COND_i386_xen_TRUE@am__append_3137 = relocator.mod ++@COND_i386_xen_TRUE@am__append_3138 = relocator.marker ++@COND_x86_64_xen_TRUE@am__append_3139 = relocator.module ++@COND_x86_64_xen_TRUE@am__append_3140 = relocator.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__append_3141 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S ++@COND_x86_64_xen_TRUE@am__append_3142 = $(nodist_relocator_module_SOURCES) ++@COND_x86_64_xen_TRUE@am__append_3143 = \ + @COND_x86_64_xen_TRUE@ $(nodist_relocator_module_SOURCES) \ + @COND_x86_64_xen_TRUE@ relocator.marker +-@COND_x86_64_xen_TRUE@am__append_3151 = relocator.mod +-@COND_x86_64_xen_TRUE@am__append_3152 = relocator.marker +-@COND_i386_xen_pvh_TRUE@am__append_3153 = relocator.module +-@COND_i386_xen_pvh_TRUE@am__append_3154 = relocator.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__append_3155 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +-@COND_i386_xen_pvh_TRUE@am__append_3156 = $(nodist_relocator_module_SOURCES) +-@COND_i386_xen_pvh_TRUE@am__append_3157 = \ ++@COND_x86_64_xen_TRUE@am__append_3144 = relocator.mod ++@COND_x86_64_xen_TRUE@am__append_3145 = relocator.marker ++@COND_i386_xen_pvh_TRUE@am__append_3146 = relocator.module ++@COND_i386_xen_pvh_TRUE@am__append_3147 = relocator.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__append_3148 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S ++@COND_i386_xen_pvh_TRUE@am__append_3149 = $(nodist_relocator_module_SOURCES) ++@COND_i386_xen_pvh_TRUE@am__append_3150 = \ + @COND_i386_xen_pvh_TRUE@ $(nodist_relocator_module_SOURCES) \ + @COND_i386_xen_pvh_TRUE@ relocator.marker +-@COND_i386_xen_pvh_TRUE@am__append_3158 = relocator.mod +-@COND_i386_xen_pvh_TRUE@am__append_3159 = relocator.marker +-@COND_mips_loongson_TRUE@am__append_3160 = relocator.module +-@COND_mips_loongson_TRUE@am__append_3161 = relocator.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__append_3162 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +-@COND_mips_loongson_TRUE@am__append_3163 = $(nodist_relocator_module_SOURCES) +-@COND_mips_loongson_TRUE@am__append_3164 = \ ++@COND_i386_xen_pvh_TRUE@am__append_3151 = relocator.mod ++@COND_i386_xen_pvh_TRUE@am__append_3152 = relocator.marker ++@COND_mips_loongson_TRUE@am__append_3153 = relocator.module ++@COND_mips_loongson_TRUE@am__append_3154 = relocator.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__append_3155 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S ++@COND_mips_loongson_TRUE@am__append_3156 = $(nodist_relocator_module_SOURCES) ++@COND_mips_loongson_TRUE@am__append_3157 = \ + @COND_mips_loongson_TRUE@ $(nodist_relocator_module_SOURCES) \ + @COND_mips_loongson_TRUE@ relocator.marker +-@COND_mips_loongson_TRUE@am__append_3165 = relocator.mod +-@COND_mips_loongson_TRUE@am__append_3166 = relocator.marker +-@COND_powerpc_ieee1275_TRUE@am__append_3167 = relocator.module +-@COND_powerpc_ieee1275_TRUE@am__append_3168 = relocator.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__append_3169 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +-@COND_powerpc_ieee1275_TRUE@am__append_3170 = $(nodist_relocator_module_SOURCES) +-@COND_powerpc_ieee1275_TRUE@am__append_3171 = $(nodist_relocator_module_SOURCES) \ ++@COND_mips_loongson_TRUE@am__append_3158 = relocator.mod ++@COND_mips_loongson_TRUE@am__append_3159 = relocator.marker ++@COND_powerpc_ieee1275_TRUE@am__append_3160 = relocator.module ++@COND_powerpc_ieee1275_TRUE@am__append_3161 = relocator.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__append_3162 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S ++@COND_powerpc_ieee1275_TRUE@am__append_3163 = $(nodist_relocator_module_SOURCES) ++@COND_powerpc_ieee1275_TRUE@am__append_3164 = $(nodist_relocator_module_SOURCES) \ + @COND_powerpc_ieee1275_TRUE@ relocator.marker +-@COND_powerpc_ieee1275_TRUE@am__append_3172 = relocator.mod +-@COND_powerpc_ieee1275_TRUE@am__append_3173 = relocator.marker +-@COND_mips_arc_TRUE@am__append_3174 = relocator.module +-@COND_mips_arc_TRUE@am__append_3175 = relocator.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__append_3176 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +-@COND_mips_arc_TRUE@am__append_3177 = $(nodist_relocator_module_SOURCES) +-@COND_mips_arc_TRUE@am__append_3178 = \ ++@COND_powerpc_ieee1275_TRUE@am__append_3165 = relocator.mod ++@COND_powerpc_ieee1275_TRUE@am__append_3166 = relocator.marker ++@COND_mips_arc_TRUE@am__append_3167 = relocator.module ++@COND_mips_arc_TRUE@am__append_3168 = relocator.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__append_3169 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S ++@COND_mips_arc_TRUE@am__append_3170 = $(nodist_relocator_module_SOURCES) ++@COND_mips_arc_TRUE@am__append_3171 = \ + @COND_mips_arc_TRUE@ $(nodist_relocator_module_SOURCES) \ + @COND_mips_arc_TRUE@ relocator.marker +-@COND_mips_arc_TRUE@am__append_3179 = relocator.mod +-@COND_mips_arc_TRUE@am__append_3180 = relocator.marker +-@COND_mips_qemu_mips_TRUE@am__append_3181 = relocator.module +-@COND_mips_qemu_mips_TRUE@am__append_3182 = relocator.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__append_3183 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +-@COND_mips_qemu_mips_TRUE@am__append_3184 = $(nodist_relocator_module_SOURCES) +-@COND_mips_qemu_mips_TRUE@am__append_3185 = \ ++@COND_mips_arc_TRUE@am__append_3172 = relocator.mod ++@COND_mips_arc_TRUE@am__append_3173 = relocator.marker ++@COND_mips_qemu_mips_TRUE@am__append_3174 = relocator.module ++@COND_mips_qemu_mips_TRUE@am__append_3175 = relocator.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__append_3176 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S ++@COND_mips_qemu_mips_TRUE@am__append_3177 = $(nodist_relocator_module_SOURCES) ++@COND_mips_qemu_mips_TRUE@am__append_3178 = \ + @COND_mips_qemu_mips_TRUE@ $(nodist_relocator_module_SOURCES) \ + @COND_mips_qemu_mips_TRUE@ relocator.marker +-@COND_mips_qemu_mips_TRUE@am__append_3186 = relocator.mod +-@COND_mips_qemu_mips_TRUE@am__append_3187 = relocator.marker +-@COND_i386_pc_TRUE@am__append_3188 = datetime.module +-@COND_i386_pc_TRUE@am__append_3189 = datetime.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__append_3179 = relocator.mod ++@COND_mips_qemu_mips_TRUE@am__append_3180 = relocator.marker ++@COND_i386_pc_TRUE@am__append_3181 = datetime.module ++@COND_i386_pc_TRUE@am__append_3182 = datetime.module$(EXEEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@datetime_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_3190 = +-@COND_i386_pc_TRUE@am__append_3191 = $(nodist_datetime_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_3192 = \ ++@COND_i386_pc_TRUE@am__append_3183 = ++@COND_i386_pc_TRUE@am__append_3184 = $(nodist_datetime_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_3185 = \ + @COND_i386_pc_TRUE@ $(nodist_datetime_module_SOURCES) \ + @COND_i386_pc_TRUE@ datetime.marker +-@COND_i386_pc_TRUE@am__append_3193 = datetime.mod +-@COND_i386_pc_TRUE@am__append_3194 = datetime.marker +-@COND_i386_efi_TRUE@am__append_3195 = datetime.module +-@COND_i386_efi_TRUE@am__append_3196 = datetime.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_3197 = +-@COND_i386_efi_TRUE@am__append_3198 = $(nodist_datetime_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_3199 = \ ++@COND_i386_pc_TRUE@am__append_3186 = datetime.mod ++@COND_i386_pc_TRUE@am__append_3187 = datetime.marker ++@COND_i386_efi_TRUE@am__append_3188 = datetime.module ++@COND_i386_efi_TRUE@am__append_3189 = datetime.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_3190 = ++@COND_i386_efi_TRUE@am__append_3191 = $(nodist_datetime_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_3192 = \ + @COND_i386_efi_TRUE@ $(nodist_datetime_module_SOURCES) \ + @COND_i386_efi_TRUE@ datetime.marker +-@COND_i386_efi_TRUE@am__append_3200 = datetime.mod +-@COND_i386_efi_TRUE@am__append_3201 = datetime.marker +-@COND_i386_qemu_TRUE@am__append_3202 = datetime.module +-@COND_i386_qemu_TRUE@am__append_3203 = datetime.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_3204 = +-@COND_i386_qemu_TRUE@am__append_3205 = $(nodist_datetime_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_3206 = \ ++@COND_i386_efi_TRUE@am__append_3193 = datetime.mod ++@COND_i386_efi_TRUE@am__append_3194 = datetime.marker ++@COND_i386_qemu_TRUE@am__append_3195 = datetime.module ++@COND_i386_qemu_TRUE@am__append_3196 = datetime.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_3197 = ++@COND_i386_qemu_TRUE@am__append_3198 = $(nodist_datetime_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_3199 = \ + @COND_i386_qemu_TRUE@ $(nodist_datetime_module_SOURCES) \ + @COND_i386_qemu_TRUE@ datetime.marker +-@COND_i386_qemu_TRUE@am__append_3207 = datetime.mod +-@COND_i386_qemu_TRUE@am__append_3208 = datetime.marker +-@COND_i386_coreboot_TRUE@am__append_3209 = datetime.module +-@COND_i386_coreboot_TRUE@am__append_3210 = datetime.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_3211 = +-@COND_i386_coreboot_TRUE@am__append_3212 = $(nodist_datetime_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_3213 = \ ++@COND_i386_qemu_TRUE@am__append_3200 = datetime.mod ++@COND_i386_qemu_TRUE@am__append_3201 = datetime.marker ++@COND_i386_coreboot_TRUE@am__append_3202 = datetime.module ++@COND_i386_coreboot_TRUE@am__append_3203 = datetime.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_3204 = ++@COND_i386_coreboot_TRUE@am__append_3205 = $(nodist_datetime_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_3206 = \ + @COND_i386_coreboot_TRUE@ $(nodist_datetime_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ datetime.marker +-@COND_i386_coreboot_TRUE@am__append_3214 = datetime.mod +-@COND_i386_coreboot_TRUE@am__append_3215 = datetime.marker +-@COND_i386_multiboot_TRUE@am__append_3216 = datetime.module +-@COND_i386_multiboot_TRUE@am__append_3217 = datetime.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_3218 = +-@COND_i386_multiboot_TRUE@am__append_3219 = $(nodist_datetime_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_3220 = \ ++@COND_i386_coreboot_TRUE@am__append_3207 = datetime.mod ++@COND_i386_coreboot_TRUE@am__append_3208 = datetime.marker ++@COND_i386_multiboot_TRUE@am__append_3209 = datetime.module ++@COND_i386_multiboot_TRUE@am__append_3210 = datetime.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_3211 = ++@COND_i386_multiboot_TRUE@am__append_3212 = $(nodist_datetime_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_3213 = \ + @COND_i386_multiboot_TRUE@ $(nodist_datetime_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ datetime.marker +-@COND_i386_multiboot_TRUE@am__append_3221 = datetime.mod +-@COND_i386_multiboot_TRUE@am__append_3222 = datetime.marker +-@COND_i386_ieee1275_TRUE@am__append_3223 = datetime.module +-@COND_i386_ieee1275_TRUE@am__append_3224 = datetime.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_3225 = +-@COND_i386_ieee1275_TRUE@am__append_3226 = $(nodist_datetime_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_3227 = \ ++@COND_i386_multiboot_TRUE@am__append_3214 = datetime.mod ++@COND_i386_multiboot_TRUE@am__append_3215 = datetime.marker ++@COND_i386_ieee1275_TRUE@am__append_3216 = datetime.module ++@COND_i386_ieee1275_TRUE@am__append_3217 = datetime.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_3218 = ++@COND_i386_ieee1275_TRUE@am__append_3219 = $(nodist_datetime_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_3220 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_datetime_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ datetime.marker +-@COND_i386_ieee1275_TRUE@am__append_3228 = datetime.mod +-@COND_i386_ieee1275_TRUE@am__append_3229 = datetime.marker +-@COND_x86_64_efi_TRUE@am__append_3230 = datetime.module +-@COND_x86_64_efi_TRUE@am__append_3231 = datetime.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_3232 = +-@COND_x86_64_efi_TRUE@am__append_3233 = $(nodist_datetime_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_3234 = \ ++@COND_i386_ieee1275_TRUE@am__append_3221 = datetime.mod ++@COND_i386_ieee1275_TRUE@am__append_3222 = datetime.marker ++@COND_x86_64_efi_TRUE@am__append_3223 = datetime.module ++@COND_x86_64_efi_TRUE@am__append_3224 = datetime.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_3225 = ++@COND_x86_64_efi_TRUE@am__append_3226 = $(nodist_datetime_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_3227 = \ + @COND_x86_64_efi_TRUE@ $(nodist_datetime_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ datetime.marker +-@COND_x86_64_efi_TRUE@am__append_3235 = datetime.mod +-@COND_x86_64_efi_TRUE@am__append_3236 = datetime.marker +-@COND_i386_xen_TRUE@am__append_3237 = datetime.module +-@COND_i386_xen_TRUE@am__append_3238 = datetime.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__append_3239 = +-@COND_i386_xen_TRUE@am__append_3240 = $(nodist_datetime_module_SOURCES) +-@COND_i386_xen_TRUE@am__append_3241 = \ ++@COND_x86_64_efi_TRUE@am__append_3228 = datetime.mod ++@COND_x86_64_efi_TRUE@am__append_3229 = datetime.marker ++@COND_i386_xen_TRUE@am__append_3230 = datetime.module ++@COND_i386_xen_TRUE@am__append_3231 = datetime.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__append_3232 = ++@COND_i386_xen_TRUE@am__append_3233 = $(nodist_datetime_module_SOURCES) ++@COND_i386_xen_TRUE@am__append_3234 = \ + @COND_i386_xen_TRUE@ $(nodist_datetime_module_SOURCES) \ + @COND_i386_xen_TRUE@ datetime.marker +-@COND_i386_xen_TRUE@am__append_3242 = datetime.mod +-@COND_i386_xen_TRUE@am__append_3243 = datetime.marker +-@COND_x86_64_xen_TRUE@am__append_3244 = datetime.module +-@COND_x86_64_xen_TRUE@am__append_3245 = datetime.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__append_3246 = +-@COND_x86_64_xen_TRUE@am__append_3247 = $(nodist_datetime_module_SOURCES) +-@COND_x86_64_xen_TRUE@am__append_3248 = \ ++@COND_i386_xen_TRUE@am__append_3235 = datetime.mod ++@COND_i386_xen_TRUE@am__append_3236 = datetime.marker ++@COND_x86_64_xen_TRUE@am__append_3237 = datetime.module ++@COND_x86_64_xen_TRUE@am__append_3238 = datetime.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__append_3239 = ++@COND_x86_64_xen_TRUE@am__append_3240 = $(nodist_datetime_module_SOURCES) ++@COND_x86_64_xen_TRUE@am__append_3241 = \ + @COND_x86_64_xen_TRUE@ $(nodist_datetime_module_SOURCES) \ + @COND_x86_64_xen_TRUE@ datetime.marker +-@COND_x86_64_xen_TRUE@am__append_3249 = datetime.mod +-@COND_x86_64_xen_TRUE@am__append_3250 = datetime.marker +-@COND_i386_xen_pvh_TRUE@am__append_3251 = datetime.module +-@COND_i386_xen_pvh_TRUE@am__append_3252 = datetime.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__append_3253 = +-@COND_i386_xen_pvh_TRUE@am__append_3254 = $(nodist_datetime_module_SOURCES) +-@COND_i386_xen_pvh_TRUE@am__append_3255 = \ ++@COND_x86_64_xen_TRUE@am__append_3242 = datetime.mod ++@COND_x86_64_xen_TRUE@am__append_3243 = datetime.marker ++@COND_i386_xen_pvh_TRUE@am__append_3244 = datetime.module ++@COND_i386_xen_pvh_TRUE@am__append_3245 = datetime.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__append_3246 = ++@COND_i386_xen_pvh_TRUE@am__append_3247 = $(nodist_datetime_module_SOURCES) ++@COND_i386_xen_pvh_TRUE@am__append_3248 = \ + @COND_i386_xen_pvh_TRUE@ $(nodist_datetime_module_SOURCES) \ + @COND_i386_xen_pvh_TRUE@ datetime.marker +-@COND_i386_xen_pvh_TRUE@am__append_3256 = datetime.mod +-@COND_i386_xen_pvh_TRUE@am__append_3257 = datetime.marker +-@COND_mips_loongson_TRUE@am__append_3258 = datetime.module +-@COND_mips_loongson_TRUE@am__append_3259 = datetime.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__append_3260 = +-@COND_mips_loongson_TRUE@am__append_3261 = $(nodist_datetime_module_SOURCES) +-@COND_mips_loongson_TRUE@am__append_3262 = \ ++@COND_i386_xen_pvh_TRUE@am__append_3249 = datetime.mod ++@COND_i386_xen_pvh_TRUE@am__append_3250 = datetime.marker ++@COND_mips_loongson_TRUE@am__append_3251 = datetime.module ++@COND_mips_loongson_TRUE@am__append_3252 = datetime.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__append_3253 = ++@COND_mips_loongson_TRUE@am__append_3254 = $(nodist_datetime_module_SOURCES) ++@COND_mips_loongson_TRUE@am__append_3255 = \ + @COND_mips_loongson_TRUE@ $(nodist_datetime_module_SOURCES) \ + @COND_mips_loongson_TRUE@ datetime.marker +-@COND_mips_loongson_TRUE@am__append_3263 = datetime.mod +-@COND_mips_loongson_TRUE@am__append_3264 = datetime.marker +-@COND_sparc64_ieee1275_TRUE@am__append_3265 = datetime.module +-@COND_sparc64_ieee1275_TRUE@am__append_3266 = datetime.module$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__append_3267 = +-@COND_sparc64_ieee1275_TRUE@am__append_3268 = $(nodist_datetime_module_SOURCES) +-@COND_sparc64_ieee1275_TRUE@am__append_3269 = \ ++@COND_mips_loongson_TRUE@am__append_3256 = datetime.mod ++@COND_mips_loongson_TRUE@am__append_3257 = datetime.marker ++@COND_sparc64_ieee1275_TRUE@am__append_3258 = datetime.module ++@COND_sparc64_ieee1275_TRUE@am__append_3259 = datetime.module$(EXEEXT) ++@COND_sparc64_ieee1275_TRUE@am__append_3260 = ++@COND_sparc64_ieee1275_TRUE@am__append_3261 = $(nodist_datetime_module_SOURCES) ++@COND_sparc64_ieee1275_TRUE@am__append_3262 = \ + @COND_sparc64_ieee1275_TRUE@ $(nodist_datetime_module_SOURCES) \ + @COND_sparc64_ieee1275_TRUE@ datetime.marker +-@COND_sparc64_ieee1275_TRUE@am__append_3270 = datetime.mod +-@COND_sparc64_ieee1275_TRUE@am__append_3271 = datetime.marker +-@COND_powerpc_ieee1275_TRUE@am__append_3272 = datetime.module +-@COND_powerpc_ieee1275_TRUE@am__append_3273 = datetime.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__append_3274 = +-@COND_powerpc_ieee1275_TRUE@am__append_3275 = $(nodist_datetime_module_SOURCES) +-@COND_powerpc_ieee1275_TRUE@am__append_3276 = \ ++@COND_sparc64_ieee1275_TRUE@am__append_3263 = datetime.mod ++@COND_sparc64_ieee1275_TRUE@am__append_3264 = datetime.marker ++@COND_powerpc_ieee1275_TRUE@am__append_3265 = datetime.module ++@COND_powerpc_ieee1275_TRUE@am__append_3266 = datetime.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__append_3267 = ++@COND_powerpc_ieee1275_TRUE@am__append_3268 = $(nodist_datetime_module_SOURCES) ++@COND_powerpc_ieee1275_TRUE@am__append_3269 = \ + @COND_powerpc_ieee1275_TRUE@ $(nodist_datetime_module_SOURCES) \ + @COND_powerpc_ieee1275_TRUE@ datetime.marker +-@COND_powerpc_ieee1275_TRUE@am__append_3277 = datetime.mod +-@COND_powerpc_ieee1275_TRUE@am__append_3278 = datetime.marker +-@COND_mips_arc_TRUE@am__append_3279 = datetime.module +-@COND_mips_arc_TRUE@am__append_3280 = datetime.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__append_3281 = +-@COND_mips_arc_TRUE@am__append_3282 = $(nodist_datetime_module_SOURCES) +-@COND_mips_arc_TRUE@am__append_3283 = \ ++@COND_powerpc_ieee1275_TRUE@am__append_3270 = datetime.mod ++@COND_powerpc_ieee1275_TRUE@am__append_3271 = datetime.marker ++@COND_mips_arc_TRUE@am__append_3272 = datetime.module ++@COND_mips_arc_TRUE@am__append_3273 = datetime.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__append_3274 = ++@COND_mips_arc_TRUE@am__append_3275 = $(nodist_datetime_module_SOURCES) ++@COND_mips_arc_TRUE@am__append_3276 = \ + @COND_mips_arc_TRUE@ $(nodist_datetime_module_SOURCES) \ + @COND_mips_arc_TRUE@ datetime.marker +-@COND_mips_arc_TRUE@am__append_3284 = datetime.mod +-@COND_mips_arc_TRUE@am__append_3285 = datetime.marker +-@COND_ia64_efi_TRUE@am__append_3286 = datetime.module +-@COND_ia64_efi_TRUE@am__append_3287 = datetime.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__append_3288 = +-@COND_ia64_efi_TRUE@am__append_3289 = $(nodist_datetime_module_SOURCES) +-@COND_ia64_efi_TRUE@am__append_3290 = \ ++@COND_mips_arc_TRUE@am__append_3277 = datetime.mod ++@COND_mips_arc_TRUE@am__append_3278 = datetime.marker ++@COND_ia64_efi_TRUE@am__append_3279 = datetime.module ++@COND_ia64_efi_TRUE@am__append_3280 = datetime.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__append_3281 = ++@COND_ia64_efi_TRUE@am__append_3282 = $(nodist_datetime_module_SOURCES) ++@COND_ia64_efi_TRUE@am__append_3283 = \ + @COND_ia64_efi_TRUE@ $(nodist_datetime_module_SOURCES) \ + @COND_ia64_efi_TRUE@ datetime.marker +-@COND_ia64_efi_TRUE@am__append_3291 = datetime.mod +-@COND_ia64_efi_TRUE@am__append_3292 = datetime.marker +-@COND_mips_qemu_mips_TRUE@am__append_3293 = datetime.module +-@COND_mips_qemu_mips_TRUE@am__append_3294 = datetime.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__append_3295 = +-@COND_mips_qemu_mips_TRUE@am__append_3296 = $(nodist_datetime_module_SOURCES) +-@COND_mips_qemu_mips_TRUE@am__append_3297 = \ ++@COND_ia64_efi_TRUE@am__append_3284 = datetime.mod ++@COND_ia64_efi_TRUE@am__append_3285 = datetime.marker ++@COND_mips_qemu_mips_TRUE@am__append_3286 = datetime.module ++@COND_mips_qemu_mips_TRUE@am__append_3287 = datetime.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__append_3288 = ++@COND_mips_qemu_mips_TRUE@am__append_3289 = $(nodist_datetime_module_SOURCES) ++@COND_mips_qemu_mips_TRUE@am__append_3290 = \ + @COND_mips_qemu_mips_TRUE@ $(nodist_datetime_module_SOURCES) \ + @COND_mips_qemu_mips_TRUE@ datetime.marker +-@COND_mips_qemu_mips_TRUE@am__append_3298 = datetime.mod +-@COND_mips_qemu_mips_TRUE@am__append_3299 = datetime.marker +-@COND_arm_uboot_TRUE@am__append_3300 = datetime.module +-@COND_arm_uboot_TRUE@am__append_3301 = datetime.module$(EXEEXT) +-@COND_arm_uboot_TRUE@am__append_3302 = +-@COND_arm_uboot_TRUE@am__append_3303 = $(nodist_datetime_module_SOURCES) +-@COND_arm_uboot_TRUE@am__append_3304 = \ ++@COND_mips_qemu_mips_TRUE@am__append_3291 = datetime.mod ++@COND_mips_qemu_mips_TRUE@am__append_3292 = datetime.marker ++@COND_arm_uboot_TRUE@am__append_3293 = datetime.module ++@COND_arm_uboot_TRUE@am__append_3294 = datetime.module$(EXEEXT) ++@COND_arm_uboot_TRUE@am__append_3295 = ++@COND_arm_uboot_TRUE@am__append_3296 = $(nodist_datetime_module_SOURCES) ++@COND_arm_uboot_TRUE@am__append_3297 = \ + @COND_arm_uboot_TRUE@ $(nodist_datetime_module_SOURCES) \ + @COND_arm_uboot_TRUE@ datetime.marker +-@COND_arm_uboot_TRUE@am__append_3305 = datetime.mod +-@COND_arm_uboot_TRUE@am__append_3306 = datetime.marker +-@COND_arm_efi_TRUE@am__append_3307 = datetime.module +-@COND_arm_efi_TRUE@am__append_3308 = datetime.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__append_3309 = +-@COND_arm_efi_TRUE@am__append_3310 = $(nodist_datetime_module_SOURCES) +-@COND_arm_efi_TRUE@am__append_3311 = \ ++@COND_arm_uboot_TRUE@am__append_3298 = datetime.mod ++@COND_arm_uboot_TRUE@am__append_3299 = datetime.marker ++@COND_arm_efi_TRUE@am__append_3300 = datetime.module ++@COND_arm_efi_TRUE@am__append_3301 = datetime.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__append_3302 = ++@COND_arm_efi_TRUE@am__append_3303 = $(nodist_datetime_module_SOURCES) ++@COND_arm_efi_TRUE@am__append_3304 = \ + @COND_arm_efi_TRUE@ $(nodist_datetime_module_SOURCES) \ + @COND_arm_efi_TRUE@ datetime.marker +-@COND_arm_efi_TRUE@am__append_3312 = datetime.mod +-@COND_arm_efi_TRUE@am__append_3313 = datetime.marker +-@COND_arm64_efi_TRUE@am__append_3314 = datetime.module +-@COND_arm64_efi_TRUE@am__append_3315 = datetime.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__append_3316 = +-@COND_arm64_efi_TRUE@am__append_3317 = $(nodist_datetime_module_SOURCES) +-@COND_arm64_efi_TRUE@am__append_3318 = \ ++@COND_arm_efi_TRUE@am__append_3305 = datetime.mod ++@COND_arm_efi_TRUE@am__append_3306 = datetime.marker ++@COND_arm64_efi_TRUE@am__append_3307 = datetime.module ++@COND_arm64_efi_TRUE@am__append_3308 = datetime.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__append_3309 = ++@COND_arm64_efi_TRUE@am__append_3310 = $(nodist_datetime_module_SOURCES) ++@COND_arm64_efi_TRUE@am__append_3311 = \ + @COND_arm64_efi_TRUE@ $(nodist_datetime_module_SOURCES) \ + @COND_arm64_efi_TRUE@ datetime.marker +-@COND_arm64_efi_TRUE@am__append_3319 = datetime.mod +-@COND_arm64_efi_TRUE@am__append_3320 = datetime.marker +-@COND_arm_coreboot_TRUE@am__append_3321 = datetime.module +-@COND_arm_coreboot_TRUE@am__append_3322 = datetime.module$(EXEEXT) +-@COND_arm_coreboot_TRUE@am__append_3323 = +-@COND_arm_coreboot_TRUE@am__append_3324 = $(nodist_datetime_module_SOURCES) +-@COND_arm_coreboot_TRUE@am__append_3325 = \ ++@COND_arm64_efi_TRUE@am__append_3312 = datetime.mod ++@COND_arm64_efi_TRUE@am__append_3313 = datetime.marker ++@COND_arm_coreboot_TRUE@am__append_3314 = datetime.module ++@COND_arm_coreboot_TRUE@am__append_3315 = datetime.module$(EXEEXT) ++@COND_arm_coreboot_TRUE@am__append_3316 = ++@COND_arm_coreboot_TRUE@am__append_3317 = $(nodist_datetime_module_SOURCES) ++@COND_arm_coreboot_TRUE@am__append_3318 = \ + @COND_arm_coreboot_TRUE@ $(nodist_datetime_module_SOURCES) \ + @COND_arm_coreboot_TRUE@ datetime.marker +-@COND_arm_coreboot_TRUE@am__append_3326 = datetime.mod +-@COND_arm_coreboot_TRUE@am__append_3327 = datetime.marker +-@COND_riscv32_efi_TRUE@am__append_3328 = datetime.module +-@COND_riscv32_efi_TRUE@am__append_3329 = datetime.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__append_3330 = +-@COND_riscv32_efi_TRUE@am__append_3331 = $(nodist_datetime_module_SOURCES) +-@COND_riscv32_efi_TRUE@am__append_3332 = \ ++@COND_arm_coreboot_TRUE@am__append_3319 = datetime.mod ++@COND_arm_coreboot_TRUE@am__append_3320 = datetime.marker ++@COND_riscv32_efi_TRUE@am__append_3321 = datetime.module ++@COND_riscv32_efi_TRUE@am__append_3322 = datetime.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__append_3323 = ++@COND_riscv32_efi_TRUE@am__append_3324 = $(nodist_datetime_module_SOURCES) ++@COND_riscv32_efi_TRUE@am__append_3325 = \ + @COND_riscv32_efi_TRUE@ $(nodist_datetime_module_SOURCES) \ + @COND_riscv32_efi_TRUE@ datetime.marker +-@COND_riscv32_efi_TRUE@am__append_3333 = datetime.mod +-@COND_riscv32_efi_TRUE@am__append_3334 = datetime.marker +-@COND_riscv64_efi_TRUE@am__append_3335 = datetime.module +-@COND_riscv64_efi_TRUE@am__append_3336 = datetime.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__append_3337 = +-@COND_riscv64_efi_TRUE@am__append_3338 = $(nodist_datetime_module_SOURCES) +-@COND_riscv64_efi_TRUE@am__append_3339 = \ ++@COND_riscv32_efi_TRUE@am__append_3326 = datetime.mod ++@COND_riscv32_efi_TRUE@am__append_3327 = datetime.marker ++@COND_riscv64_efi_TRUE@am__append_3328 = datetime.module ++@COND_riscv64_efi_TRUE@am__append_3329 = datetime.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_3330 = ++@COND_riscv64_efi_TRUE@am__append_3331 = $(nodist_datetime_module_SOURCES) ++@COND_riscv64_efi_TRUE@am__append_3332 = \ + @COND_riscv64_efi_TRUE@ $(nodist_datetime_module_SOURCES) \ + @COND_riscv64_efi_TRUE@ datetime.marker +-@COND_riscv64_efi_TRUE@am__append_3340 = datetime.mod +-@COND_riscv64_efi_TRUE@am__append_3341 = datetime.marker +-@COND_i386_pc_TRUE@am__append_3342 = aout.module +-@COND_i386_pc_TRUE@am__append_3343 = aout.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_3333 = datetime.mod ++@COND_riscv64_efi_TRUE@am__append_3334 = datetime.marker ++@COND_i386_pc_TRUE@am__append_3335 = aout.module ++@COND_i386_pc_TRUE@am__append_3336 = aout.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@aout_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_3344 = +-@COND_i386_pc_TRUE@am__append_3345 = $(nodist_aout_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_3346 = $(nodist_aout_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_3337 = ++@COND_i386_pc_TRUE@am__append_3338 = $(nodist_aout_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_3339 = $(nodist_aout_module_SOURCES) \ + @COND_i386_pc_TRUE@ aout.marker +-@COND_i386_pc_TRUE@am__append_3347 = aout.mod +-@COND_i386_pc_TRUE@am__append_3348 = aout.marker +-@COND_i386_efi_TRUE@am__append_3349 = aout.module +-@COND_i386_efi_TRUE@am__append_3350 = aout.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_3351 = +-@COND_i386_efi_TRUE@am__append_3352 = $(nodist_aout_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_3353 = $(nodist_aout_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_3340 = aout.mod ++@COND_i386_pc_TRUE@am__append_3341 = aout.marker ++@COND_i386_efi_TRUE@am__append_3342 = aout.module ++@COND_i386_efi_TRUE@am__append_3343 = aout.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_3344 = ++@COND_i386_efi_TRUE@am__append_3345 = $(nodist_aout_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_3346 = $(nodist_aout_module_SOURCES) \ + @COND_i386_efi_TRUE@ aout.marker +-@COND_i386_efi_TRUE@am__append_3354 = aout.mod +-@COND_i386_efi_TRUE@am__append_3355 = aout.marker +-@COND_i386_qemu_TRUE@am__append_3356 = aout.module +-@COND_i386_qemu_TRUE@am__append_3357 = aout.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_3358 = +-@COND_i386_qemu_TRUE@am__append_3359 = $(nodist_aout_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_3360 = $(nodist_aout_module_SOURCES) \ ++@COND_i386_efi_TRUE@am__append_3347 = aout.mod ++@COND_i386_efi_TRUE@am__append_3348 = aout.marker ++@COND_i386_qemu_TRUE@am__append_3349 = aout.module ++@COND_i386_qemu_TRUE@am__append_3350 = aout.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_3351 = ++@COND_i386_qemu_TRUE@am__append_3352 = $(nodist_aout_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_3353 = $(nodist_aout_module_SOURCES) \ + @COND_i386_qemu_TRUE@ aout.marker +-@COND_i386_qemu_TRUE@am__append_3361 = aout.mod +-@COND_i386_qemu_TRUE@am__append_3362 = aout.marker +-@COND_i386_coreboot_TRUE@am__append_3363 = aout.module +-@COND_i386_coreboot_TRUE@am__append_3364 = aout.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_3365 = +-@COND_i386_coreboot_TRUE@am__append_3366 = $(nodist_aout_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_3367 = \ ++@COND_i386_qemu_TRUE@am__append_3354 = aout.mod ++@COND_i386_qemu_TRUE@am__append_3355 = aout.marker ++@COND_i386_coreboot_TRUE@am__append_3356 = aout.module ++@COND_i386_coreboot_TRUE@am__append_3357 = aout.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_3358 = ++@COND_i386_coreboot_TRUE@am__append_3359 = $(nodist_aout_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_3360 = \ + @COND_i386_coreboot_TRUE@ $(nodist_aout_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ aout.marker +-@COND_i386_coreboot_TRUE@am__append_3368 = aout.mod +-@COND_i386_coreboot_TRUE@am__append_3369 = aout.marker +-@COND_i386_multiboot_TRUE@am__append_3370 = aout.module +-@COND_i386_multiboot_TRUE@am__append_3371 = aout.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_3372 = +-@COND_i386_multiboot_TRUE@am__append_3373 = $(nodist_aout_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_3374 = \ ++@COND_i386_coreboot_TRUE@am__append_3361 = aout.mod ++@COND_i386_coreboot_TRUE@am__append_3362 = aout.marker ++@COND_i386_multiboot_TRUE@am__append_3363 = aout.module ++@COND_i386_multiboot_TRUE@am__append_3364 = aout.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_3365 = ++@COND_i386_multiboot_TRUE@am__append_3366 = $(nodist_aout_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_3367 = \ + @COND_i386_multiboot_TRUE@ $(nodist_aout_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ aout.marker +-@COND_i386_multiboot_TRUE@am__append_3375 = aout.mod +-@COND_i386_multiboot_TRUE@am__append_3376 = aout.marker +-@COND_i386_ieee1275_TRUE@am__append_3377 = aout.module +-@COND_i386_ieee1275_TRUE@am__append_3378 = aout.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_3379 = +-@COND_i386_ieee1275_TRUE@am__append_3380 = $(nodist_aout_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_3381 = \ ++@COND_i386_multiboot_TRUE@am__append_3368 = aout.mod ++@COND_i386_multiboot_TRUE@am__append_3369 = aout.marker ++@COND_i386_ieee1275_TRUE@am__append_3370 = aout.module ++@COND_i386_ieee1275_TRUE@am__append_3371 = aout.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_3372 = ++@COND_i386_ieee1275_TRUE@am__append_3373 = $(nodist_aout_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_3374 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_aout_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ aout.marker +-@COND_i386_ieee1275_TRUE@am__append_3382 = aout.mod +-@COND_i386_ieee1275_TRUE@am__append_3383 = aout.marker +-@COND_x86_64_efi_TRUE@am__append_3384 = aout.module +-@COND_x86_64_efi_TRUE@am__append_3385 = aout.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_3386 = +-@COND_x86_64_efi_TRUE@am__append_3387 = $(nodist_aout_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_3388 = $(nodist_aout_module_SOURCES) \ ++@COND_i386_ieee1275_TRUE@am__append_3375 = aout.mod ++@COND_i386_ieee1275_TRUE@am__append_3376 = aout.marker ++@COND_x86_64_efi_TRUE@am__append_3377 = aout.module ++@COND_x86_64_efi_TRUE@am__append_3378 = aout.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_3379 = ++@COND_x86_64_efi_TRUE@am__append_3380 = $(nodist_aout_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_3381 = $(nodist_aout_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ aout.marker +-@COND_x86_64_efi_TRUE@am__append_3389 = aout.mod +-@COND_x86_64_efi_TRUE@am__append_3390 = aout.marker +-@COND_i386_pc_TRUE@am__append_3391 = bsd.module +-@COND_i386_pc_TRUE@am__append_3392 = bsd.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_3382 = aout.mod ++@COND_x86_64_efi_TRUE@am__append_3383 = aout.marker ++@COND_i386_pc_TRUE@am__append_3384 = bsd.module ++@COND_i386_pc_TRUE@am__append_3385 = bsd.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@bsd_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_3393 = loader/i386/bsdXX.c loader/i386/bsd_pagetable.c +-@COND_i386_pc_TRUE@am__append_3394 = $(nodist_bsd_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_3395 = $(nodist_bsd_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_3386 = loader/i386/bsdXX.c loader/i386/bsd_pagetable.c ++@COND_i386_pc_TRUE@am__append_3387 = $(nodist_bsd_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_3388 = $(nodist_bsd_module_SOURCES) \ + @COND_i386_pc_TRUE@ bsd.marker +-@COND_i386_pc_TRUE@am__append_3396 = bsd.mod +-@COND_i386_pc_TRUE@am__append_3397 = bsd.marker +-@COND_i386_efi_TRUE@am__append_3398 = bsd.module +-@COND_i386_efi_TRUE@am__append_3399 = bsd.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_3400 = loader/i386/bsdXX.c loader/i386/bsd_pagetable.c +-@COND_i386_efi_TRUE@am__append_3401 = $(nodist_bsd_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_3402 = $(nodist_bsd_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_3389 = bsd.mod ++@COND_i386_pc_TRUE@am__append_3390 = bsd.marker ++@COND_i386_efi_TRUE@am__append_3391 = bsd.module ++@COND_i386_efi_TRUE@am__append_3392 = bsd.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_3393 = loader/i386/bsdXX.c loader/i386/bsd_pagetable.c ++@COND_i386_efi_TRUE@am__append_3394 = $(nodist_bsd_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_3395 = $(nodist_bsd_module_SOURCES) \ + @COND_i386_efi_TRUE@ bsd.marker +-@COND_i386_efi_TRUE@am__append_3403 = bsd.mod +-@COND_i386_efi_TRUE@am__append_3404 = bsd.marker +-@COND_i386_qemu_TRUE@am__append_3405 = bsd.module +-@COND_i386_qemu_TRUE@am__append_3406 = bsd.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_3407 = loader/i386/bsdXX.c loader/i386/bsd_pagetable.c +-@COND_i386_qemu_TRUE@am__append_3408 = $(nodist_bsd_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_3409 = $(nodist_bsd_module_SOURCES) \ ++@COND_i386_efi_TRUE@am__append_3396 = bsd.mod ++@COND_i386_efi_TRUE@am__append_3397 = bsd.marker ++@COND_i386_qemu_TRUE@am__append_3398 = bsd.module ++@COND_i386_qemu_TRUE@am__append_3399 = bsd.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_3400 = loader/i386/bsdXX.c loader/i386/bsd_pagetable.c ++@COND_i386_qemu_TRUE@am__append_3401 = $(nodist_bsd_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_3402 = $(nodist_bsd_module_SOURCES) \ + @COND_i386_qemu_TRUE@ bsd.marker +-@COND_i386_qemu_TRUE@am__append_3410 = bsd.mod +-@COND_i386_qemu_TRUE@am__append_3411 = bsd.marker +-@COND_i386_coreboot_TRUE@am__append_3412 = bsd.module +-@COND_i386_coreboot_TRUE@am__append_3413 = bsd.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_3414 = loader/i386/bsdXX.c loader/i386/bsd_pagetable.c +-@COND_i386_coreboot_TRUE@am__append_3415 = $(nodist_bsd_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_3416 = \ ++@COND_i386_qemu_TRUE@am__append_3403 = bsd.mod ++@COND_i386_qemu_TRUE@am__append_3404 = bsd.marker ++@COND_i386_coreboot_TRUE@am__append_3405 = bsd.module ++@COND_i386_coreboot_TRUE@am__append_3406 = bsd.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_3407 = loader/i386/bsdXX.c loader/i386/bsd_pagetable.c ++@COND_i386_coreboot_TRUE@am__append_3408 = $(nodist_bsd_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_3409 = \ + @COND_i386_coreboot_TRUE@ $(nodist_bsd_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ bsd.marker +-@COND_i386_coreboot_TRUE@am__append_3417 = bsd.mod +-@COND_i386_coreboot_TRUE@am__append_3418 = bsd.marker +-@COND_i386_multiboot_TRUE@am__append_3419 = bsd.module +-@COND_i386_multiboot_TRUE@am__append_3420 = bsd.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_3421 = loader/i386/bsdXX.c loader/i386/bsd_pagetable.c +-@COND_i386_multiboot_TRUE@am__append_3422 = $(nodist_bsd_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_3423 = \ ++@COND_i386_coreboot_TRUE@am__append_3410 = bsd.mod ++@COND_i386_coreboot_TRUE@am__append_3411 = bsd.marker ++@COND_i386_multiboot_TRUE@am__append_3412 = bsd.module ++@COND_i386_multiboot_TRUE@am__append_3413 = bsd.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_3414 = loader/i386/bsdXX.c loader/i386/bsd_pagetable.c ++@COND_i386_multiboot_TRUE@am__append_3415 = $(nodist_bsd_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_3416 = \ + @COND_i386_multiboot_TRUE@ $(nodist_bsd_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ bsd.marker +-@COND_i386_multiboot_TRUE@am__append_3424 = bsd.mod +-@COND_i386_multiboot_TRUE@am__append_3425 = bsd.marker +-@COND_i386_ieee1275_TRUE@am__append_3426 = bsd.module +-@COND_i386_ieee1275_TRUE@am__append_3427 = bsd.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_3428 = loader/i386/bsdXX.c loader/i386/bsd_pagetable.c +-@COND_i386_ieee1275_TRUE@am__append_3429 = $(nodist_bsd_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_3430 = \ ++@COND_i386_multiboot_TRUE@am__append_3417 = bsd.mod ++@COND_i386_multiboot_TRUE@am__append_3418 = bsd.marker ++@COND_i386_ieee1275_TRUE@am__append_3419 = bsd.module ++@COND_i386_ieee1275_TRUE@am__append_3420 = bsd.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_3421 = loader/i386/bsdXX.c loader/i386/bsd_pagetable.c ++@COND_i386_ieee1275_TRUE@am__append_3422 = $(nodist_bsd_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_3423 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_bsd_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ bsd.marker +-@COND_i386_ieee1275_TRUE@am__append_3431 = bsd.mod +-@COND_i386_ieee1275_TRUE@am__append_3432 = bsd.marker +-@COND_x86_64_efi_TRUE@am__append_3433 = bsd.module +-@COND_x86_64_efi_TRUE@am__append_3434 = bsd.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_3435 = loader/i386/bsdXX.c loader/i386/bsd_pagetable.c +-@COND_x86_64_efi_TRUE@am__append_3436 = $(nodist_bsd_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_3437 = $(nodist_bsd_module_SOURCES) \ ++@COND_i386_ieee1275_TRUE@am__append_3424 = bsd.mod ++@COND_i386_ieee1275_TRUE@am__append_3425 = bsd.marker ++@COND_x86_64_efi_TRUE@am__append_3426 = bsd.module ++@COND_x86_64_efi_TRUE@am__append_3427 = bsd.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_3428 = loader/i386/bsdXX.c loader/i386/bsd_pagetable.c ++@COND_x86_64_efi_TRUE@am__append_3429 = $(nodist_bsd_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_3430 = $(nodist_bsd_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ bsd.marker +-@COND_x86_64_efi_TRUE@am__append_3438 = bsd.mod +-@COND_x86_64_efi_TRUE@am__append_3439 = bsd.marker +-@COND_i386_pc_TRUE@am__append_3440 = plan9.module linux16.module +-@COND_i386_pc_TRUE@am__append_3441 = plan9.module$(EXEEXT) \ ++@COND_x86_64_efi_TRUE@am__append_3431 = bsd.mod ++@COND_x86_64_efi_TRUE@am__append_3432 = bsd.marker ++@COND_i386_pc_TRUE@am__append_3433 = plan9.module linux16.module ++@COND_i386_pc_TRUE@am__append_3434 = plan9.module$(EXEEXT) \ + @COND_i386_pc_TRUE@ linux16.module$(EXEEXT) + @COND_i386_pc_FALSE@plan9_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_3442 = +-@COND_i386_pc_TRUE@am__append_3443 = $(nodist_plan9_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_3435 = ++@COND_i386_pc_TRUE@am__append_3436 = $(nodist_plan9_module_SOURCES) \ + @COND_i386_pc_TRUE@ $(nodist_linux16_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_3444 = $(nodist_plan9_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_3437 = $(nodist_plan9_module_SOURCES) \ + @COND_i386_pc_TRUE@ plan9.marker \ + @COND_i386_pc_TRUE@ $(nodist_linux16_module_SOURCES) \ + @COND_i386_pc_TRUE@ linux16.marker +-@COND_i386_pc_TRUE@am__append_3445 = plan9.mod linux16.mod +-@COND_i386_pc_TRUE@am__append_3446 = plan9.marker linux16.marker ++@COND_i386_pc_TRUE@am__append_3438 = plan9.mod linux16.mod ++@COND_i386_pc_TRUE@am__append_3439 = plan9.marker linux16.marker + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@linux16_module_DEPENDENCIES = +-@COND_i386_efi_TRUE@am__append_3447 = linux16.module +-@COND_i386_efi_TRUE@am__append_3448 = linux16.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_3449 = +-@COND_i386_efi_TRUE@am__append_3450 = $(nodist_linux16_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_3451 = \ ++@COND_i386_efi_TRUE@am__append_3440 = linux16.module ++@COND_i386_efi_TRUE@am__append_3441 = linux16.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_3442 = ++@COND_i386_efi_TRUE@am__append_3443 = $(nodist_linux16_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_3444 = \ + @COND_i386_efi_TRUE@ $(nodist_linux16_module_SOURCES) \ + @COND_i386_efi_TRUE@ linux16.marker +-@COND_i386_efi_TRUE@am__append_3452 = linux16.mod +-@COND_i386_efi_TRUE@am__append_3453 = linux16.marker +-@COND_i386_qemu_TRUE@am__append_3454 = linux16.module +-@COND_i386_qemu_TRUE@am__append_3455 = linux16.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_3456 = +-@COND_i386_qemu_TRUE@am__append_3457 = $(nodist_linux16_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_3458 = \ ++@COND_i386_efi_TRUE@am__append_3445 = linux16.mod ++@COND_i386_efi_TRUE@am__append_3446 = linux16.marker ++@COND_i386_qemu_TRUE@am__append_3447 = linux16.module ++@COND_i386_qemu_TRUE@am__append_3448 = linux16.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_3449 = ++@COND_i386_qemu_TRUE@am__append_3450 = $(nodist_linux16_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_3451 = \ + @COND_i386_qemu_TRUE@ $(nodist_linux16_module_SOURCES) \ + @COND_i386_qemu_TRUE@ linux16.marker +-@COND_i386_qemu_TRUE@am__append_3459 = linux16.mod +-@COND_i386_qemu_TRUE@am__append_3460 = linux16.marker +-@COND_i386_coreboot_TRUE@am__append_3461 = linux16.module +-@COND_i386_coreboot_TRUE@am__append_3462 = linux16.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_3463 = +-@COND_i386_coreboot_TRUE@am__append_3464 = $(nodist_linux16_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_3465 = \ ++@COND_i386_qemu_TRUE@am__append_3452 = linux16.mod ++@COND_i386_qemu_TRUE@am__append_3453 = linux16.marker ++@COND_i386_coreboot_TRUE@am__append_3454 = linux16.module ++@COND_i386_coreboot_TRUE@am__append_3455 = linux16.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_3456 = ++@COND_i386_coreboot_TRUE@am__append_3457 = $(nodist_linux16_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_3458 = \ + @COND_i386_coreboot_TRUE@ $(nodist_linux16_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ linux16.marker +-@COND_i386_coreboot_TRUE@am__append_3466 = linux16.mod +-@COND_i386_coreboot_TRUE@am__append_3467 = linux16.marker +-@COND_i386_multiboot_TRUE@am__append_3468 = linux16.module +-@COND_i386_multiboot_TRUE@am__append_3469 = linux16.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_3470 = +-@COND_i386_multiboot_TRUE@am__append_3471 = $(nodist_linux16_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_3472 = \ ++@COND_i386_coreboot_TRUE@am__append_3459 = linux16.mod ++@COND_i386_coreboot_TRUE@am__append_3460 = linux16.marker ++@COND_i386_multiboot_TRUE@am__append_3461 = linux16.module ++@COND_i386_multiboot_TRUE@am__append_3462 = linux16.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_3463 = ++@COND_i386_multiboot_TRUE@am__append_3464 = $(nodist_linux16_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_3465 = \ + @COND_i386_multiboot_TRUE@ $(nodist_linux16_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ linux16.marker +-@COND_i386_multiboot_TRUE@am__append_3473 = linux16.mod +-@COND_i386_multiboot_TRUE@am__append_3474 = linux16.marker +-@COND_i386_ieee1275_TRUE@am__append_3475 = linux16.module +-@COND_i386_ieee1275_TRUE@am__append_3476 = linux16.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_3477 = +-@COND_i386_ieee1275_TRUE@am__append_3478 = $(nodist_linux16_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_3479 = \ ++@COND_i386_multiboot_TRUE@am__append_3466 = linux16.mod ++@COND_i386_multiboot_TRUE@am__append_3467 = linux16.marker ++@COND_i386_ieee1275_TRUE@am__append_3468 = linux16.module ++@COND_i386_ieee1275_TRUE@am__append_3469 = linux16.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_3470 = ++@COND_i386_ieee1275_TRUE@am__append_3471 = $(nodist_linux16_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_3472 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_linux16_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ linux16.marker +-@COND_i386_ieee1275_TRUE@am__append_3480 = linux16.mod +-@COND_i386_ieee1275_TRUE@am__append_3481 = linux16.marker +-@COND_x86_64_efi_TRUE@am__append_3482 = linux16.module +-@COND_x86_64_efi_TRUE@am__append_3483 = linux16.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_3484 = +-@COND_x86_64_efi_TRUE@am__append_3485 = $(nodist_linux16_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_3486 = \ ++@COND_i386_ieee1275_TRUE@am__append_3473 = linux16.mod ++@COND_i386_ieee1275_TRUE@am__append_3474 = linux16.marker ++@COND_x86_64_efi_TRUE@am__append_3475 = linux16.module ++@COND_x86_64_efi_TRUE@am__append_3476 = linux16.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_3477 = ++@COND_x86_64_efi_TRUE@am__append_3478 = $(nodist_linux16_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_3479 = \ + @COND_x86_64_efi_TRUE@ $(nodist_linux16_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ linux16.marker +-@COND_x86_64_efi_TRUE@am__append_3487 = linux16.mod +-@COND_x86_64_efi_TRUE@am__append_3488 = linux16.marker +-@COND_i386_pc_TRUE@am__append_3489 = ntldr.module truecrypt.module \ ++@COND_x86_64_efi_TRUE@am__append_3480 = linux16.mod ++@COND_x86_64_efi_TRUE@am__append_3481 = linux16.marker ++@COND_i386_pc_TRUE@am__append_3482 = ntldr.module truecrypt.module \ + @COND_i386_pc_TRUE@ freedos.module pxechain.module \ + @COND_i386_pc_TRUE@ multiboot2.module +-@COND_i386_pc_TRUE@am__append_3490 = ntldr.module$(EXEEXT) \ ++@COND_i386_pc_TRUE@am__append_3483 = ntldr.module$(EXEEXT) \ + @COND_i386_pc_TRUE@ truecrypt.module$(EXEEXT) \ + @COND_i386_pc_TRUE@ freedos.module$(EXEEXT) \ + @COND_i386_pc_TRUE@ pxechain.module$(EXEEXT) \ + @COND_i386_pc_TRUE@ multiboot2.module$(EXEEXT) + @COND_i386_pc_FALSE@ntldr_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_3491 = +-@COND_i386_pc_TRUE@am__append_3492 = $(nodist_ntldr_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_3484 = ++@COND_i386_pc_TRUE@am__append_3485 = $(nodist_ntldr_module_SOURCES) \ + @COND_i386_pc_TRUE@ $(nodist_truecrypt_module_SOURCES) \ + @COND_i386_pc_TRUE@ $(nodist_freedos_module_SOURCES) \ + @COND_i386_pc_TRUE@ $(nodist_pxechain_module_SOURCES) \ + @COND_i386_pc_TRUE@ $(nodist_multiboot2_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_3493 = $(nodist_ntldr_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_3486 = $(nodist_ntldr_module_SOURCES) \ + @COND_i386_pc_TRUE@ ntldr.marker \ + @COND_i386_pc_TRUE@ $(nodist_truecrypt_module_SOURCES) \ + @COND_i386_pc_TRUE@ truecrypt.marker \ +@@ -4863,2969 +4853,2969 @@ TESTS = + @COND_i386_pc_TRUE@ pxechain.marker \ + @COND_i386_pc_TRUE@ $(nodist_multiboot2_module_SOURCES) \ + @COND_i386_pc_TRUE@ multiboot2.marker +-@COND_i386_pc_TRUE@am__append_3494 = ntldr.mod truecrypt.mod \ ++@COND_i386_pc_TRUE@am__append_3487 = ntldr.mod truecrypt.mod \ + @COND_i386_pc_TRUE@ freedos.mod pxechain.mod multiboot2.mod +-@COND_i386_pc_TRUE@am__append_3495 = ntldr.marker truecrypt.marker \ ++@COND_i386_pc_TRUE@am__append_3488 = ntldr.marker truecrypt.marker \ + @COND_i386_pc_TRUE@ freedos.marker pxechain.marker \ + @COND_i386_pc_TRUE@ multiboot2.marker + @COND_i386_pc_FALSE@truecrypt_module_DEPENDENCIES = + @COND_i386_pc_FALSE@freedos_module_DEPENDENCIES = + @COND_i386_pc_FALSE@pxechain_module_DEPENDENCIES = + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_pvh_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_x86_64_efi_FALSE@multiboot2_module_DEPENDENCIES = +-@COND_i386_efi_TRUE@am__append_3496 = multiboot2.module +-@COND_i386_efi_TRUE@am__append_3497 = multiboot2.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_3498 = +-@COND_i386_efi_TRUE@am__append_3499 = $(nodist_multiboot2_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_3500 = \ ++@COND_i386_efi_TRUE@am__append_3489 = multiboot2.module ++@COND_i386_efi_TRUE@am__append_3490 = multiboot2.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_3491 = ++@COND_i386_efi_TRUE@am__append_3492 = $(nodist_multiboot2_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_3493 = \ + @COND_i386_efi_TRUE@ $(nodist_multiboot2_module_SOURCES) \ + @COND_i386_efi_TRUE@ multiboot2.marker +-@COND_i386_efi_TRUE@am__append_3501 = multiboot2.mod +-@COND_i386_efi_TRUE@am__append_3502 = multiboot2.marker +-@COND_i386_qemu_TRUE@am__append_3503 = multiboot2.module +-@COND_i386_qemu_TRUE@am__append_3504 = multiboot2.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_3505 = +-@COND_i386_qemu_TRUE@am__append_3506 = $(nodist_multiboot2_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_3507 = \ ++@COND_i386_efi_TRUE@am__append_3494 = multiboot2.mod ++@COND_i386_efi_TRUE@am__append_3495 = multiboot2.marker ++@COND_i386_qemu_TRUE@am__append_3496 = multiboot2.module ++@COND_i386_qemu_TRUE@am__append_3497 = multiboot2.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_3498 = ++@COND_i386_qemu_TRUE@am__append_3499 = $(nodist_multiboot2_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_3500 = \ + @COND_i386_qemu_TRUE@ $(nodist_multiboot2_module_SOURCES) \ + @COND_i386_qemu_TRUE@ multiboot2.marker +-@COND_i386_qemu_TRUE@am__append_3508 = multiboot2.mod +-@COND_i386_qemu_TRUE@am__append_3509 = multiboot2.marker +-@COND_i386_coreboot_TRUE@am__append_3510 = multiboot2.module +-@COND_i386_coreboot_TRUE@am__append_3511 = multiboot2.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_3512 = +-@COND_i386_coreboot_TRUE@am__append_3513 = $(nodist_multiboot2_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_3514 = \ ++@COND_i386_qemu_TRUE@am__append_3501 = multiboot2.mod ++@COND_i386_qemu_TRUE@am__append_3502 = multiboot2.marker ++@COND_i386_coreboot_TRUE@am__append_3503 = multiboot2.module ++@COND_i386_coreboot_TRUE@am__append_3504 = multiboot2.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_3505 = ++@COND_i386_coreboot_TRUE@am__append_3506 = $(nodist_multiboot2_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_3507 = \ + @COND_i386_coreboot_TRUE@ $(nodist_multiboot2_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ multiboot2.marker +-@COND_i386_coreboot_TRUE@am__append_3515 = multiboot2.mod +-@COND_i386_coreboot_TRUE@am__append_3516 = multiboot2.marker +-@COND_i386_multiboot_TRUE@am__append_3517 = multiboot2.module +-@COND_i386_multiboot_TRUE@am__append_3518 = multiboot2.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_3519 = +-@COND_i386_multiboot_TRUE@am__append_3520 = $(nodist_multiboot2_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_3521 = \ ++@COND_i386_coreboot_TRUE@am__append_3508 = multiboot2.mod ++@COND_i386_coreboot_TRUE@am__append_3509 = multiboot2.marker ++@COND_i386_multiboot_TRUE@am__append_3510 = multiboot2.module ++@COND_i386_multiboot_TRUE@am__append_3511 = multiboot2.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_3512 = ++@COND_i386_multiboot_TRUE@am__append_3513 = $(nodist_multiboot2_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_3514 = \ + @COND_i386_multiboot_TRUE@ $(nodist_multiboot2_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ multiboot2.marker +-@COND_i386_multiboot_TRUE@am__append_3522 = multiboot2.mod +-@COND_i386_multiboot_TRUE@am__append_3523 = multiboot2.marker +-@COND_i386_ieee1275_TRUE@am__append_3524 = multiboot2.module +-@COND_i386_ieee1275_TRUE@am__append_3525 = multiboot2.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_3526 = +-@COND_i386_ieee1275_TRUE@am__append_3527 = $(nodist_multiboot2_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_3528 = \ ++@COND_i386_multiboot_TRUE@am__append_3515 = multiboot2.mod ++@COND_i386_multiboot_TRUE@am__append_3516 = multiboot2.marker ++@COND_i386_ieee1275_TRUE@am__append_3517 = multiboot2.module ++@COND_i386_ieee1275_TRUE@am__append_3518 = multiboot2.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_3519 = ++@COND_i386_ieee1275_TRUE@am__append_3520 = $(nodist_multiboot2_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_3521 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_multiboot2_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ multiboot2.marker +-@COND_i386_ieee1275_TRUE@am__append_3529 = multiboot2.mod +-@COND_i386_ieee1275_TRUE@am__append_3530 = multiboot2.marker +-@COND_x86_64_efi_TRUE@am__append_3531 = multiboot2.module +-@COND_x86_64_efi_TRUE@am__append_3532 = multiboot2.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_3533 = +-@COND_x86_64_efi_TRUE@am__append_3534 = $(nodist_multiboot2_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_3535 = \ ++@COND_i386_ieee1275_TRUE@am__append_3522 = multiboot2.mod ++@COND_i386_ieee1275_TRUE@am__append_3523 = multiboot2.marker ++@COND_x86_64_efi_TRUE@am__append_3524 = multiboot2.module ++@COND_x86_64_efi_TRUE@am__append_3525 = multiboot2.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_3526 = ++@COND_x86_64_efi_TRUE@am__append_3527 = $(nodist_multiboot2_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_3528 = \ + @COND_x86_64_efi_TRUE@ $(nodist_multiboot2_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ multiboot2.marker +-@COND_x86_64_efi_TRUE@am__append_3536 = multiboot2.mod +-@COND_x86_64_efi_TRUE@am__append_3537 = multiboot2.marker +-@COND_i386_xen_pvh_TRUE@am__append_3538 = multiboot2.module +-@COND_i386_xen_pvh_TRUE@am__append_3539 = multiboot2.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__append_3540 = +-@COND_i386_xen_pvh_TRUE@am__append_3541 = $(nodist_multiboot2_module_SOURCES) +-@COND_i386_xen_pvh_TRUE@am__append_3542 = \ ++@COND_x86_64_efi_TRUE@am__append_3529 = multiboot2.mod ++@COND_x86_64_efi_TRUE@am__append_3530 = multiboot2.marker ++@COND_i386_xen_pvh_TRUE@am__append_3531 = multiboot2.module ++@COND_i386_xen_pvh_TRUE@am__append_3532 = multiboot2.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__append_3533 = ++@COND_i386_xen_pvh_TRUE@am__append_3534 = $(nodist_multiboot2_module_SOURCES) ++@COND_i386_xen_pvh_TRUE@am__append_3535 = \ + @COND_i386_xen_pvh_TRUE@ $(nodist_multiboot2_module_SOURCES) \ + @COND_i386_xen_pvh_TRUE@ multiboot2.marker +-@COND_i386_xen_pvh_TRUE@am__append_3543 = multiboot2.mod +-@COND_i386_xen_pvh_TRUE@am__append_3544 = multiboot2.marker +-@COND_mips_loongson_TRUE@am__append_3545 = multiboot2.module +-@COND_mips_loongson_TRUE@am__append_3546 = multiboot2.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__append_3547 = +-@COND_mips_loongson_TRUE@am__append_3548 = $(nodist_multiboot2_module_SOURCES) +-@COND_mips_loongson_TRUE@am__append_3549 = \ ++@COND_i386_xen_pvh_TRUE@am__append_3536 = multiboot2.mod ++@COND_i386_xen_pvh_TRUE@am__append_3537 = multiboot2.marker ++@COND_mips_loongson_TRUE@am__append_3538 = multiboot2.module ++@COND_mips_loongson_TRUE@am__append_3539 = multiboot2.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__append_3540 = ++@COND_mips_loongson_TRUE@am__append_3541 = $(nodist_multiboot2_module_SOURCES) ++@COND_mips_loongson_TRUE@am__append_3542 = \ + @COND_mips_loongson_TRUE@ $(nodist_multiboot2_module_SOURCES) \ + @COND_mips_loongson_TRUE@ multiboot2.marker +-@COND_mips_loongson_TRUE@am__append_3550 = multiboot2.mod +-@COND_mips_loongson_TRUE@am__append_3551 = multiboot2.marker +-@COND_mips_arc_TRUE@am__append_3552 = multiboot2.module +-@COND_mips_arc_TRUE@am__append_3553 = multiboot2.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__append_3554 = +-@COND_mips_arc_TRUE@am__append_3555 = $(nodist_multiboot2_module_SOURCES) +-@COND_mips_arc_TRUE@am__append_3556 = \ ++@COND_mips_loongson_TRUE@am__append_3543 = multiboot2.mod ++@COND_mips_loongson_TRUE@am__append_3544 = multiboot2.marker ++@COND_mips_arc_TRUE@am__append_3545 = multiboot2.module ++@COND_mips_arc_TRUE@am__append_3546 = multiboot2.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__append_3547 = ++@COND_mips_arc_TRUE@am__append_3548 = $(nodist_multiboot2_module_SOURCES) ++@COND_mips_arc_TRUE@am__append_3549 = \ + @COND_mips_arc_TRUE@ $(nodist_multiboot2_module_SOURCES) \ + @COND_mips_arc_TRUE@ multiboot2.marker +-@COND_mips_arc_TRUE@am__append_3557 = multiboot2.mod +-@COND_mips_arc_TRUE@am__append_3558 = multiboot2.marker +-@COND_mips_qemu_mips_TRUE@am__append_3559 = multiboot2.module +-@COND_mips_qemu_mips_TRUE@am__append_3560 = multiboot2.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__append_3561 = +-@COND_mips_qemu_mips_TRUE@am__append_3562 = $(nodist_multiboot2_module_SOURCES) +-@COND_mips_qemu_mips_TRUE@am__append_3563 = \ ++@COND_mips_arc_TRUE@am__append_3550 = multiboot2.mod ++@COND_mips_arc_TRUE@am__append_3551 = multiboot2.marker ++@COND_mips_qemu_mips_TRUE@am__append_3552 = multiboot2.module ++@COND_mips_qemu_mips_TRUE@am__append_3553 = multiboot2.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__append_3554 = ++@COND_mips_qemu_mips_TRUE@am__append_3555 = $(nodist_multiboot2_module_SOURCES) ++@COND_mips_qemu_mips_TRUE@am__append_3556 = \ + @COND_mips_qemu_mips_TRUE@ $(nodist_multiboot2_module_SOURCES) \ + @COND_mips_qemu_mips_TRUE@ multiboot2.marker +-@COND_mips_qemu_mips_TRUE@am__append_3564 = multiboot2.mod +-@COND_mips_qemu_mips_TRUE@am__append_3565 = multiboot2.marker +-@COND_i386_pc_TRUE@am__append_3566 = multiboot.module +-@COND_i386_pc_TRUE@am__append_3567 = multiboot.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__append_3557 = multiboot2.mod ++@COND_mips_qemu_mips_TRUE@am__append_3558 = multiboot2.marker ++@COND_i386_pc_TRUE@am__append_3559 = multiboot.module ++@COND_i386_pc_TRUE@am__append_3560 = multiboot.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_pvh_FALSE@@COND_x86_64_efi_FALSE@multiboot_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_3568 = loader/multiboot_elfxx.c +-@COND_i386_pc_TRUE@am__append_3569 = $(nodist_multiboot_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_3570 = \ ++@COND_i386_pc_TRUE@am__append_3561 = loader/multiboot_elfxx.c ++@COND_i386_pc_TRUE@am__append_3562 = $(nodist_multiboot_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_3563 = \ + @COND_i386_pc_TRUE@ $(nodist_multiboot_module_SOURCES) \ + @COND_i386_pc_TRUE@ multiboot.marker +-@COND_i386_pc_TRUE@am__append_3571 = multiboot.mod +-@COND_i386_pc_TRUE@am__append_3572 = multiboot.marker +-@COND_i386_efi_TRUE@am__append_3573 = multiboot.module +-@COND_i386_efi_TRUE@am__append_3574 = multiboot.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_3575 = loader/multiboot_elfxx.c +-@COND_i386_efi_TRUE@am__append_3576 = $(nodist_multiboot_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_3577 = \ ++@COND_i386_pc_TRUE@am__append_3564 = multiboot.mod ++@COND_i386_pc_TRUE@am__append_3565 = multiboot.marker ++@COND_i386_efi_TRUE@am__append_3566 = multiboot.module ++@COND_i386_efi_TRUE@am__append_3567 = multiboot.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_3568 = loader/multiboot_elfxx.c ++@COND_i386_efi_TRUE@am__append_3569 = $(nodist_multiboot_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_3570 = \ + @COND_i386_efi_TRUE@ $(nodist_multiboot_module_SOURCES) \ + @COND_i386_efi_TRUE@ multiboot.marker +-@COND_i386_efi_TRUE@am__append_3578 = multiboot.mod +-@COND_i386_efi_TRUE@am__append_3579 = multiboot.marker +-@COND_i386_qemu_TRUE@am__append_3580 = multiboot.module +-@COND_i386_qemu_TRUE@am__append_3581 = multiboot.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_3582 = loader/multiboot_elfxx.c +-@COND_i386_qemu_TRUE@am__append_3583 = $(nodist_multiboot_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_3584 = \ ++@COND_i386_efi_TRUE@am__append_3571 = multiboot.mod ++@COND_i386_efi_TRUE@am__append_3572 = multiboot.marker ++@COND_i386_qemu_TRUE@am__append_3573 = multiboot.module ++@COND_i386_qemu_TRUE@am__append_3574 = multiboot.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_3575 = loader/multiboot_elfxx.c ++@COND_i386_qemu_TRUE@am__append_3576 = $(nodist_multiboot_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_3577 = \ + @COND_i386_qemu_TRUE@ $(nodist_multiboot_module_SOURCES) \ + @COND_i386_qemu_TRUE@ multiboot.marker +-@COND_i386_qemu_TRUE@am__append_3585 = multiboot.mod +-@COND_i386_qemu_TRUE@am__append_3586 = multiboot.marker +-@COND_i386_coreboot_TRUE@am__append_3587 = multiboot.module +-@COND_i386_coreboot_TRUE@am__append_3588 = multiboot.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_3589 = loader/multiboot_elfxx.c +-@COND_i386_coreboot_TRUE@am__append_3590 = $(nodist_multiboot_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_3591 = \ ++@COND_i386_qemu_TRUE@am__append_3578 = multiboot.mod ++@COND_i386_qemu_TRUE@am__append_3579 = multiboot.marker ++@COND_i386_coreboot_TRUE@am__append_3580 = multiboot.module ++@COND_i386_coreboot_TRUE@am__append_3581 = multiboot.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_3582 = loader/multiboot_elfxx.c ++@COND_i386_coreboot_TRUE@am__append_3583 = $(nodist_multiboot_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_3584 = \ + @COND_i386_coreboot_TRUE@ $(nodist_multiboot_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ multiboot.marker +-@COND_i386_coreboot_TRUE@am__append_3592 = multiboot.mod +-@COND_i386_coreboot_TRUE@am__append_3593 = multiboot.marker +-@COND_i386_multiboot_TRUE@am__append_3594 = multiboot.module +-@COND_i386_multiboot_TRUE@am__append_3595 = multiboot.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_3596 = loader/multiboot_elfxx.c +-@COND_i386_multiboot_TRUE@am__append_3597 = $(nodist_multiboot_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_3598 = \ ++@COND_i386_coreboot_TRUE@am__append_3585 = multiboot.mod ++@COND_i386_coreboot_TRUE@am__append_3586 = multiboot.marker ++@COND_i386_multiboot_TRUE@am__append_3587 = multiboot.module ++@COND_i386_multiboot_TRUE@am__append_3588 = multiboot.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_3589 = loader/multiboot_elfxx.c ++@COND_i386_multiboot_TRUE@am__append_3590 = $(nodist_multiboot_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_3591 = \ + @COND_i386_multiboot_TRUE@ $(nodist_multiboot_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ multiboot.marker +-@COND_i386_multiboot_TRUE@am__append_3599 = multiboot.mod +-@COND_i386_multiboot_TRUE@am__append_3600 = multiboot.marker +-@COND_i386_ieee1275_TRUE@am__append_3601 = multiboot.module +-@COND_i386_ieee1275_TRUE@am__append_3602 = multiboot.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_3603 = loader/multiboot_elfxx.c +-@COND_i386_ieee1275_TRUE@am__append_3604 = $(nodist_multiboot_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_3605 = \ ++@COND_i386_multiboot_TRUE@am__append_3592 = multiboot.mod ++@COND_i386_multiboot_TRUE@am__append_3593 = multiboot.marker ++@COND_i386_ieee1275_TRUE@am__append_3594 = multiboot.module ++@COND_i386_ieee1275_TRUE@am__append_3595 = multiboot.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_3596 = loader/multiboot_elfxx.c ++@COND_i386_ieee1275_TRUE@am__append_3597 = $(nodist_multiboot_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_3598 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_multiboot_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ multiboot.marker +-@COND_i386_ieee1275_TRUE@am__append_3606 = multiboot.mod +-@COND_i386_ieee1275_TRUE@am__append_3607 = multiboot.marker +-@COND_x86_64_efi_TRUE@am__append_3608 = multiboot.module +-@COND_x86_64_efi_TRUE@am__append_3609 = multiboot.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_3610 = loader/multiboot_elfxx.c +-@COND_x86_64_efi_TRUE@am__append_3611 = $(nodist_multiboot_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_3612 = \ ++@COND_i386_ieee1275_TRUE@am__append_3599 = multiboot.mod ++@COND_i386_ieee1275_TRUE@am__append_3600 = multiboot.marker ++@COND_x86_64_efi_TRUE@am__append_3601 = multiboot.module ++@COND_x86_64_efi_TRUE@am__append_3602 = multiboot.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_3603 = loader/multiboot_elfxx.c ++@COND_x86_64_efi_TRUE@am__append_3604 = $(nodist_multiboot_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_3605 = \ + @COND_x86_64_efi_TRUE@ $(nodist_multiboot_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ multiboot.marker +-@COND_x86_64_efi_TRUE@am__append_3613 = multiboot.mod +-@COND_x86_64_efi_TRUE@am__append_3614 = multiboot.marker +-@COND_i386_xen_pvh_TRUE@am__append_3615 = multiboot.module +-@COND_i386_xen_pvh_TRUE@am__append_3616 = multiboot.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__append_3617 = loader/multiboot_elfxx.c +-@COND_i386_xen_pvh_TRUE@am__append_3618 = $(nodist_multiboot_module_SOURCES) +-@COND_i386_xen_pvh_TRUE@am__append_3619 = \ ++@COND_x86_64_efi_TRUE@am__append_3606 = multiboot.mod ++@COND_x86_64_efi_TRUE@am__append_3607 = multiboot.marker ++@COND_i386_xen_pvh_TRUE@am__append_3608 = multiboot.module ++@COND_i386_xen_pvh_TRUE@am__append_3609 = multiboot.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__append_3610 = loader/multiboot_elfxx.c ++@COND_i386_xen_pvh_TRUE@am__append_3611 = $(nodist_multiboot_module_SOURCES) ++@COND_i386_xen_pvh_TRUE@am__append_3612 = \ + @COND_i386_xen_pvh_TRUE@ $(nodist_multiboot_module_SOURCES) \ + @COND_i386_xen_pvh_TRUE@ multiboot.marker +-@COND_i386_xen_pvh_TRUE@am__append_3620 = multiboot.mod +-@COND_i386_xen_pvh_TRUE@am__append_3621 = multiboot.marker +-@COND_arm64_efi_TRUE@am__append_3622 = xen_boot.module +-@COND_arm64_efi_TRUE@am__append_3623 = xen_boot.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__append_3613 = multiboot.mod ++@COND_i386_xen_pvh_TRUE@am__append_3614 = multiboot.marker ++@COND_arm64_efi_TRUE@am__append_3615 = xen_boot.module ++@COND_arm64_efi_TRUE@am__append_3616 = xen_boot.module$(EXEEXT) + @COND_arm64_efi_FALSE@xen_boot_module_DEPENDENCIES = +-@COND_arm64_efi_TRUE@am__append_3624 = +-@COND_arm64_efi_TRUE@am__append_3625 = $(nodist_xen_boot_module_SOURCES) +-@COND_arm64_efi_TRUE@am__append_3626 = \ ++@COND_arm64_efi_TRUE@am__append_3617 = ++@COND_arm64_efi_TRUE@am__append_3618 = $(nodist_xen_boot_module_SOURCES) ++@COND_arm64_efi_TRUE@am__append_3619 = \ + @COND_arm64_efi_TRUE@ $(nodist_xen_boot_module_SOURCES) \ + @COND_arm64_efi_TRUE@ xen_boot.marker +-@COND_arm64_efi_TRUE@am__append_3627 = xen_boot.mod +-@COND_arm64_efi_TRUE@am__append_3628 = xen_boot.marker +-@COND_i386_pc_TRUE@am__append_3629 = linux.module +-@COND_i386_pc_TRUE@am__append_3630 = linux.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__append_3620 = xen_boot.mod ++@COND_arm64_efi_TRUE@am__append_3621 = xen_boot.marker ++@COND_i386_pc_TRUE@am__append_3622 = linux.module ++@COND_i386_pc_TRUE@am__append_3623 = linux.module$(EXEEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@linux_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_3631 = +-@COND_i386_pc_TRUE@am__append_3632 = $(nodist_linux_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_3633 = $(nodist_linux_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_3624 = ++@COND_i386_pc_TRUE@am__append_3625 = $(nodist_linux_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_3626 = $(nodist_linux_module_SOURCES) \ + @COND_i386_pc_TRUE@ linux.marker +-@COND_i386_pc_TRUE@am__append_3634 = linux.mod +-@COND_i386_pc_TRUE@am__append_3635 = linux.marker +-@COND_i386_efi_TRUE@am__append_3636 = linux.module +-@COND_i386_efi_TRUE@am__append_3637 = linux.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_3638 = +-@COND_i386_efi_TRUE@am__append_3639 = $(nodist_linux_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_3640 = $(nodist_linux_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_3627 = linux.mod ++@COND_i386_pc_TRUE@am__append_3628 = linux.marker ++@COND_i386_efi_TRUE@am__append_3629 = linux.module ++@COND_i386_efi_TRUE@am__append_3630 = linux.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_3631 = ++@COND_i386_efi_TRUE@am__append_3632 = $(nodist_linux_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_3633 = $(nodist_linux_module_SOURCES) \ + @COND_i386_efi_TRUE@ linux.marker +-@COND_i386_efi_TRUE@am__append_3641 = linux.mod +-@COND_i386_efi_TRUE@am__append_3642 = linux.marker +-@COND_i386_qemu_TRUE@am__append_3643 = linux.module +-@COND_i386_qemu_TRUE@am__append_3644 = linux.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_3645 = +-@COND_i386_qemu_TRUE@am__append_3646 = $(nodist_linux_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_3647 = $(nodist_linux_module_SOURCES) \ ++@COND_i386_efi_TRUE@am__append_3634 = linux.mod ++@COND_i386_efi_TRUE@am__append_3635 = linux.marker ++@COND_i386_qemu_TRUE@am__append_3636 = linux.module ++@COND_i386_qemu_TRUE@am__append_3637 = linux.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_3638 = ++@COND_i386_qemu_TRUE@am__append_3639 = $(nodist_linux_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_3640 = $(nodist_linux_module_SOURCES) \ + @COND_i386_qemu_TRUE@ linux.marker +-@COND_i386_qemu_TRUE@am__append_3648 = linux.mod +-@COND_i386_qemu_TRUE@am__append_3649 = linux.marker +-@COND_i386_coreboot_TRUE@am__append_3650 = linux.module +-@COND_i386_coreboot_TRUE@am__append_3651 = linux.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_3652 = +-@COND_i386_coreboot_TRUE@am__append_3653 = $(nodist_linux_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_3654 = \ ++@COND_i386_qemu_TRUE@am__append_3641 = linux.mod ++@COND_i386_qemu_TRUE@am__append_3642 = linux.marker ++@COND_i386_coreboot_TRUE@am__append_3643 = linux.module ++@COND_i386_coreboot_TRUE@am__append_3644 = linux.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_3645 = ++@COND_i386_coreboot_TRUE@am__append_3646 = $(nodist_linux_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_3647 = \ + @COND_i386_coreboot_TRUE@ $(nodist_linux_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ linux.marker +-@COND_i386_coreboot_TRUE@am__append_3655 = linux.mod +-@COND_i386_coreboot_TRUE@am__append_3656 = linux.marker +-@COND_i386_multiboot_TRUE@am__append_3657 = linux.module +-@COND_i386_multiboot_TRUE@am__append_3658 = linux.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_3659 = +-@COND_i386_multiboot_TRUE@am__append_3660 = $(nodist_linux_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_3661 = \ ++@COND_i386_coreboot_TRUE@am__append_3648 = linux.mod ++@COND_i386_coreboot_TRUE@am__append_3649 = linux.marker ++@COND_i386_multiboot_TRUE@am__append_3650 = linux.module ++@COND_i386_multiboot_TRUE@am__append_3651 = linux.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_3652 = ++@COND_i386_multiboot_TRUE@am__append_3653 = $(nodist_linux_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_3654 = \ + @COND_i386_multiboot_TRUE@ $(nodist_linux_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ linux.marker +-@COND_i386_multiboot_TRUE@am__append_3662 = linux.mod +-@COND_i386_multiboot_TRUE@am__append_3663 = linux.marker +-@COND_i386_ieee1275_TRUE@am__append_3664 = linux.module +-@COND_i386_ieee1275_TRUE@am__append_3665 = linux.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_3666 = +-@COND_i386_ieee1275_TRUE@am__append_3667 = $(nodist_linux_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_3668 = \ ++@COND_i386_multiboot_TRUE@am__append_3655 = linux.mod ++@COND_i386_multiboot_TRUE@am__append_3656 = linux.marker ++@COND_i386_ieee1275_TRUE@am__append_3657 = linux.module ++@COND_i386_ieee1275_TRUE@am__append_3658 = linux.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_3659 = ++@COND_i386_ieee1275_TRUE@am__append_3660 = $(nodist_linux_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_3661 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_linux_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ linux.marker +-@COND_i386_ieee1275_TRUE@am__append_3669 = linux.mod +-@COND_i386_ieee1275_TRUE@am__append_3670 = linux.marker +-@COND_x86_64_efi_TRUE@am__append_3671 = linux.module +-@COND_x86_64_efi_TRUE@am__append_3672 = linux.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_3673 = +-@COND_x86_64_efi_TRUE@am__append_3674 = $(nodist_linux_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_3675 = \ ++@COND_i386_ieee1275_TRUE@am__append_3662 = linux.mod ++@COND_i386_ieee1275_TRUE@am__append_3663 = linux.marker ++@COND_x86_64_efi_TRUE@am__append_3664 = linux.module ++@COND_x86_64_efi_TRUE@am__append_3665 = linux.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_3666 = ++@COND_x86_64_efi_TRUE@am__append_3667 = $(nodist_linux_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_3668 = \ + @COND_x86_64_efi_TRUE@ $(nodist_linux_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ linux.marker +-@COND_x86_64_efi_TRUE@am__append_3676 = linux.mod +-@COND_x86_64_efi_TRUE@am__append_3677 = linux.marker +-@COND_i386_xen_TRUE@am__append_3678 = linux.module +-@COND_i386_xen_TRUE@am__append_3679 = linux.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__append_3680 = +-@COND_i386_xen_TRUE@am__append_3681 = $(nodist_linux_module_SOURCES) +-@COND_i386_xen_TRUE@am__append_3682 = $(nodist_linux_module_SOURCES) \ ++@COND_x86_64_efi_TRUE@am__append_3669 = linux.mod ++@COND_x86_64_efi_TRUE@am__append_3670 = linux.marker ++@COND_i386_xen_TRUE@am__append_3671 = linux.module ++@COND_i386_xen_TRUE@am__append_3672 = linux.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__append_3673 = ++@COND_i386_xen_TRUE@am__append_3674 = $(nodist_linux_module_SOURCES) ++@COND_i386_xen_TRUE@am__append_3675 = $(nodist_linux_module_SOURCES) \ + @COND_i386_xen_TRUE@ linux.marker +-@COND_i386_xen_TRUE@am__append_3683 = linux.mod +-@COND_i386_xen_TRUE@am__append_3684 = linux.marker +-@COND_x86_64_xen_TRUE@am__append_3685 = linux.module +-@COND_x86_64_xen_TRUE@am__append_3686 = linux.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__append_3687 = +-@COND_x86_64_xen_TRUE@am__append_3688 = $(nodist_linux_module_SOURCES) +-@COND_x86_64_xen_TRUE@am__append_3689 = \ ++@COND_i386_xen_TRUE@am__append_3676 = linux.mod ++@COND_i386_xen_TRUE@am__append_3677 = linux.marker ++@COND_x86_64_xen_TRUE@am__append_3678 = linux.module ++@COND_x86_64_xen_TRUE@am__append_3679 = linux.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__append_3680 = ++@COND_x86_64_xen_TRUE@am__append_3681 = $(nodist_linux_module_SOURCES) ++@COND_x86_64_xen_TRUE@am__append_3682 = \ + @COND_x86_64_xen_TRUE@ $(nodist_linux_module_SOURCES) \ + @COND_x86_64_xen_TRUE@ linux.marker +-@COND_x86_64_xen_TRUE@am__append_3690 = linux.mod +-@COND_x86_64_xen_TRUE@am__append_3691 = linux.marker +-@COND_i386_xen_pvh_TRUE@am__append_3692 = linux.module +-@COND_i386_xen_pvh_TRUE@am__append_3693 = linux.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__append_3694 = +-@COND_i386_xen_pvh_TRUE@am__append_3695 = $(nodist_linux_module_SOURCES) +-@COND_i386_xen_pvh_TRUE@am__append_3696 = \ ++@COND_x86_64_xen_TRUE@am__append_3683 = linux.mod ++@COND_x86_64_xen_TRUE@am__append_3684 = linux.marker ++@COND_i386_xen_pvh_TRUE@am__append_3685 = linux.module ++@COND_i386_xen_pvh_TRUE@am__append_3686 = linux.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__append_3687 = ++@COND_i386_xen_pvh_TRUE@am__append_3688 = $(nodist_linux_module_SOURCES) ++@COND_i386_xen_pvh_TRUE@am__append_3689 = \ + @COND_i386_xen_pvh_TRUE@ $(nodist_linux_module_SOURCES) \ + @COND_i386_xen_pvh_TRUE@ linux.marker +-@COND_i386_xen_pvh_TRUE@am__append_3697 = linux.mod +-@COND_i386_xen_pvh_TRUE@am__append_3698 = linux.marker +-@COND_mips_loongson_TRUE@am__append_3699 = linux.module +-@COND_mips_loongson_TRUE@am__append_3700 = linux.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__append_3701 = +-@COND_mips_loongson_TRUE@am__append_3702 = $(nodist_linux_module_SOURCES) +-@COND_mips_loongson_TRUE@am__append_3703 = \ ++@COND_i386_xen_pvh_TRUE@am__append_3690 = linux.mod ++@COND_i386_xen_pvh_TRUE@am__append_3691 = linux.marker ++@COND_mips_loongson_TRUE@am__append_3692 = linux.module ++@COND_mips_loongson_TRUE@am__append_3693 = linux.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__append_3694 = ++@COND_mips_loongson_TRUE@am__append_3695 = $(nodist_linux_module_SOURCES) ++@COND_mips_loongson_TRUE@am__append_3696 = \ + @COND_mips_loongson_TRUE@ $(nodist_linux_module_SOURCES) \ + @COND_mips_loongson_TRUE@ linux.marker +-@COND_mips_loongson_TRUE@am__append_3704 = linux.mod +-@COND_mips_loongson_TRUE@am__append_3705 = linux.marker +-@COND_sparc64_ieee1275_TRUE@am__append_3706 = linux.module +-@COND_sparc64_ieee1275_TRUE@am__append_3707 = linux.module$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__append_3708 = +-@COND_sparc64_ieee1275_TRUE@am__append_3709 = $(nodist_linux_module_SOURCES) +-@COND_sparc64_ieee1275_TRUE@am__append_3710 = \ ++@COND_mips_loongson_TRUE@am__append_3697 = linux.mod ++@COND_mips_loongson_TRUE@am__append_3698 = linux.marker ++@COND_sparc64_ieee1275_TRUE@am__append_3699 = linux.module ++@COND_sparc64_ieee1275_TRUE@am__append_3700 = linux.module$(EXEEXT) ++@COND_sparc64_ieee1275_TRUE@am__append_3701 = ++@COND_sparc64_ieee1275_TRUE@am__append_3702 = $(nodist_linux_module_SOURCES) ++@COND_sparc64_ieee1275_TRUE@am__append_3703 = \ + @COND_sparc64_ieee1275_TRUE@ $(nodist_linux_module_SOURCES) \ + @COND_sparc64_ieee1275_TRUE@ linux.marker +-@COND_sparc64_ieee1275_TRUE@am__append_3711 = linux.mod +-@COND_sparc64_ieee1275_TRUE@am__append_3712 = linux.marker +-@COND_powerpc_ieee1275_TRUE@am__append_3713 = linux.module +-@COND_powerpc_ieee1275_TRUE@am__append_3714 = linux.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__append_3715 = +-@COND_powerpc_ieee1275_TRUE@am__append_3716 = $(nodist_linux_module_SOURCES) +-@COND_powerpc_ieee1275_TRUE@am__append_3717 = \ ++@COND_sparc64_ieee1275_TRUE@am__append_3704 = linux.mod ++@COND_sparc64_ieee1275_TRUE@am__append_3705 = linux.marker ++@COND_powerpc_ieee1275_TRUE@am__append_3706 = linux.module ++@COND_powerpc_ieee1275_TRUE@am__append_3707 = linux.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__append_3708 = ++@COND_powerpc_ieee1275_TRUE@am__append_3709 = $(nodist_linux_module_SOURCES) ++@COND_powerpc_ieee1275_TRUE@am__append_3710 = \ + @COND_powerpc_ieee1275_TRUE@ $(nodist_linux_module_SOURCES) \ + @COND_powerpc_ieee1275_TRUE@ linux.marker +-@COND_powerpc_ieee1275_TRUE@am__append_3718 = linux.mod +-@COND_powerpc_ieee1275_TRUE@am__append_3719 = linux.marker +-@COND_mips_arc_TRUE@am__append_3720 = linux.module +-@COND_mips_arc_TRUE@am__append_3721 = linux.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__append_3722 = +-@COND_mips_arc_TRUE@am__append_3723 = $(nodist_linux_module_SOURCES) +-@COND_mips_arc_TRUE@am__append_3724 = $(nodist_linux_module_SOURCES) \ ++@COND_powerpc_ieee1275_TRUE@am__append_3711 = linux.mod ++@COND_powerpc_ieee1275_TRUE@am__append_3712 = linux.marker ++@COND_mips_arc_TRUE@am__append_3713 = linux.module ++@COND_mips_arc_TRUE@am__append_3714 = linux.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__append_3715 = ++@COND_mips_arc_TRUE@am__append_3716 = $(nodist_linux_module_SOURCES) ++@COND_mips_arc_TRUE@am__append_3717 = $(nodist_linux_module_SOURCES) \ + @COND_mips_arc_TRUE@ linux.marker +-@COND_mips_arc_TRUE@am__append_3725 = linux.mod +-@COND_mips_arc_TRUE@am__append_3726 = linux.marker +-@COND_ia64_efi_TRUE@am__append_3727 = linux.module +-@COND_ia64_efi_TRUE@am__append_3728 = linux.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__append_3729 = +-@COND_ia64_efi_TRUE@am__append_3730 = $(nodist_linux_module_SOURCES) +-@COND_ia64_efi_TRUE@am__append_3731 = $(nodist_linux_module_SOURCES) \ ++@COND_mips_arc_TRUE@am__append_3718 = linux.mod ++@COND_mips_arc_TRUE@am__append_3719 = linux.marker ++@COND_ia64_efi_TRUE@am__append_3720 = linux.module ++@COND_ia64_efi_TRUE@am__append_3721 = linux.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__append_3722 = ++@COND_ia64_efi_TRUE@am__append_3723 = $(nodist_linux_module_SOURCES) ++@COND_ia64_efi_TRUE@am__append_3724 = $(nodist_linux_module_SOURCES) \ + @COND_ia64_efi_TRUE@ linux.marker +-@COND_ia64_efi_TRUE@am__append_3732 = linux.mod +-@COND_ia64_efi_TRUE@am__append_3733 = linux.marker +-@COND_mips_qemu_mips_TRUE@am__append_3734 = linux.module +-@COND_mips_qemu_mips_TRUE@am__append_3735 = linux.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__append_3736 = +-@COND_mips_qemu_mips_TRUE@am__append_3737 = $(nodist_linux_module_SOURCES) +-@COND_mips_qemu_mips_TRUE@am__append_3738 = \ ++@COND_ia64_efi_TRUE@am__append_3725 = linux.mod ++@COND_ia64_efi_TRUE@am__append_3726 = linux.marker ++@COND_mips_qemu_mips_TRUE@am__append_3727 = linux.module ++@COND_mips_qemu_mips_TRUE@am__append_3728 = linux.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__append_3729 = ++@COND_mips_qemu_mips_TRUE@am__append_3730 = $(nodist_linux_module_SOURCES) ++@COND_mips_qemu_mips_TRUE@am__append_3731 = \ + @COND_mips_qemu_mips_TRUE@ $(nodist_linux_module_SOURCES) \ + @COND_mips_qemu_mips_TRUE@ linux.marker +-@COND_mips_qemu_mips_TRUE@am__append_3739 = linux.mod +-@COND_mips_qemu_mips_TRUE@am__append_3740 = linux.marker +-@COND_arm_uboot_TRUE@am__append_3741 = linux.module +-@COND_arm_uboot_TRUE@am__append_3742 = linux.module$(EXEEXT) +-@COND_arm_uboot_TRUE@am__append_3743 = +-@COND_arm_uboot_TRUE@am__append_3744 = $(nodist_linux_module_SOURCES) +-@COND_arm_uboot_TRUE@am__append_3745 = $(nodist_linux_module_SOURCES) \ ++@COND_mips_qemu_mips_TRUE@am__append_3732 = linux.mod ++@COND_mips_qemu_mips_TRUE@am__append_3733 = linux.marker ++@COND_arm_uboot_TRUE@am__append_3734 = linux.module ++@COND_arm_uboot_TRUE@am__append_3735 = linux.module$(EXEEXT) ++@COND_arm_uboot_TRUE@am__append_3736 = ++@COND_arm_uboot_TRUE@am__append_3737 = $(nodist_linux_module_SOURCES) ++@COND_arm_uboot_TRUE@am__append_3738 = $(nodist_linux_module_SOURCES) \ + @COND_arm_uboot_TRUE@ linux.marker +-@COND_arm_uboot_TRUE@am__append_3746 = linux.mod +-@COND_arm_uboot_TRUE@am__append_3747 = linux.marker +-@COND_arm_efi_TRUE@am__append_3748 = linux.module +-@COND_arm_efi_TRUE@am__append_3749 = linux.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__append_3750 = +-@COND_arm_efi_TRUE@am__append_3751 = $(nodist_linux_module_SOURCES) +-@COND_arm_efi_TRUE@am__append_3752 = $(nodist_linux_module_SOURCES) \ ++@COND_arm_uboot_TRUE@am__append_3739 = linux.mod ++@COND_arm_uboot_TRUE@am__append_3740 = linux.marker ++@COND_arm_efi_TRUE@am__append_3741 = linux.module ++@COND_arm_efi_TRUE@am__append_3742 = linux.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__append_3743 = ++@COND_arm_efi_TRUE@am__append_3744 = $(nodist_linux_module_SOURCES) ++@COND_arm_efi_TRUE@am__append_3745 = $(nodist_linux_module_SOURCES) \ + @COND_arm_efi_TRUE@ linux.marker +-@COND_arm_efi_TRUE@am__append_3753 = linux.mod +-@COND_arm_efi_TRUE@am__append_3754 = linux.marker +-@COND_arm64_efi_TRUE@am__append_3755 = linux.module +-@COND_arm64_efi_TRUE@am__append_3756 = linux.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__append_3757 = +-@COND_arm64_efi_TRUE@am__append_3758 = $(nodist_linux_module_SOURCES) +-@COND_arm64_efi_TRUE@am__append_3759 = $(nodist_linux_module_SOURCES) \ ++@COND_arm_efi_TRUE@am__append_3746 = linux.mod ++@COND_arm_efi_TRUE@am__append_3747 = linux.marker ++@COND_arm64_efi_TRUE@am__append_3748 = linux.module ++@COND_arm64_efi_TRUE@am__append_3749 = linux.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__append_3750 = ++@COND_arm64_efi_TRUE@am__append_3751 = $(nodist_linux_module_SOURCES) ++@COND_arm64_efi_TRUE@am__append_3752 = $(nodist_linux_module_SOURCES) \ + @COND_arm64_efi_TRUE@ linux.marker +-@COND_arm64_efi_TRUE@am__append_3760 = linux.mod +-@COND_arm64_efi_TRUE@am__append_3761 = linux.marker +-@COND_arm_coreboot_TRUE@am__append_3762 = linux.module +-@COND_arm_coreboot_TRUE@am__append_3763 = linux.module$(EXEEXT) +-@COND_arm_coreboot_TRUE@am__append_3764 = +-@COND_arm_coreboot_TRUE@am__append_3765 = $(nodist_linux_module_SOURCES) +-@COND_arm_coreboot_TRUE@am__append_3766 = \ ++@COND_arm64_efi_TRUE@am__append_3753 = linux.mod ++@COND_arm64_efi_TRUE@am__append_3754 = linux.marker ++@COND_arm_coreboot_TRUE@am__append_3755 = linux.module ++@COND_arm_coreboot_TRUE@am__append_3756 = linux.module$(EXEEXT) ++@COND_arm_coreboot_TRUE@am__append_3757 = ++@COND_arm_coreboot_TRUE@am__append_3758 = $(nodist_linux_module_SOURCES) ++@COND_arm_coreboot_TRUE@am__append_3759 = \ + @COND_arm_coreboot_TRUE@ $(nodist_linux_module_SOURCES) \ + @COND_arm_coreboot_TRUE@ linux.marker +-@COND_arm_coreboot_TRUE@am__append_3767 = linux.mod +-@COND_arm_coreboot_TRUE@am__append_3768 = linux.marker +-@COND_riscv32_efi_TRUE@am__append_3769 = linux.module +-@COND_riscv32_efi_TRUE@am__append_3770 = linux.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__append_3771 = +-@COND_riscv32_efi_TRUE@am__append_3772 = $(nodist_linux_module_SOURCES) +-@COND_riscv32_efi_TRUE@am__append_3773 = \ ++@COND_arm_coreboot_TRUE@am__append_3760 = linux.mod ++@COND_arm_coreboot_TRUE@am__append_3761 = linux.marker ++@COND_riscv32_efi_TRUE@am__append_3762 = linux.module ++@COND_riscv32_efi_TRUE@am__append_3763 = linux.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__append_3764 = ++@COND_riscv32_efi_TRUE@am__append_3765 = $(nodist_linux_module_SOURCES) ++@COND_riscv32_efi_TRUE@am__append_3766 = \ + @COND_riscv32_efi_TRUE@ $(nodist_linux_module_SOURCES) \ + @COND_riscv32_efi_TRUE@ linux.marker +-@COND_riscv32_efi_TRUE@am__append_3774 = linux.mod +-@COND_riscv32_efi_TRUE@am__append_3775 = linux.marker +-@COND_riscv64_efi_TRUE@am__append_3776 = linux.module +-@COND_riscv64_efi_TRUE@am__append_3777 = linux.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__append_3778 = +-@COND_riscv64_efi_TRUE@am__append_3779 = $(nodist_linux_module_SOURCES) +-@COND_riscv64_efi_TRUE@am__append_3780 = \ ++@COND_riscv32_efi_TRUE@am__append_3767 = linux.mod ++@COND_riscv32_efi_TRUE@am__append_3768 = linux.marker ++@COND_riscv64_efi_TRUE@am__append_3769 = linux.module ++@COND_riscv64_efi_TRUE@am__append_3770 = linux.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_3771 = ++@COND_riscv64_efi_TRUE@am__append_3772 = $(nodist_linux_module_SOURCES) ++@COND_riscv64_efi_TRUE@am__append_3773 = \ + @COND_riscv64_efi_TRUE@ $(nodist_linux_module_SOURCES) \ + @COND_riscv64_efi_TRUE@ linux.marker +-@COND_riscv64_efi_TRUE@am__append_3781 = linux.mod +-@COND_riscv64_efi_TRUE@am__append_3782 = linux.marker +-@COND_arm_uboot_TRUE@am__append_3783 = fdt.module +-@COND_arm_uboot_TRUE@am__append_3784 = fdt.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_3774 = linux.mod ++@COND_riscv64_efi_TRUE@am__append_3775 = linux.marker ++@COND_arm_uboot_TRUE@am__append_3776 = fdt.module ++@COND_arm_uboot_TRUE@am__append_3777 = fdt.module$(EXEEXT) + @COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@fdt_module_DEPENDENCIES = +-@COND_arm_uboot_TRUE@am__append_3785 = +-@COND_arm_uboot_TRUE@am__append_3786 = $(nodist_fdt_module_SOURCES) +-@COND_arm_uboot_TRUE@am__append_3787 = $(nodist_fdt_module_SOURCES) \ ++@COND_arm_uboot_TRUE@am__append_3778 = ++@COND_arm_uboot_TRUE@am__append_3779 = $(nodist_fdt_module_SOURCES) ++@COND_arm_uboot_TRUE@am__append_3780 = $(nodist_fdt_module_SOURCES) \ + @COND_arm_uboot_TRUE@ fdt.marker +-@COND_arm_uboot_TRUE@am__append_3788 = fdt.mod +-@COND_arm_uboot_TRUE@am__append_3789 = fdt.marker +-@COND_arm_efi_TRUE@am__append_3790 = fdt.module +-@COND_arm_efi_TRUE@am__append_3791 = fdt.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__append_3792 = +-@COND_arm_efi_TRUE@am__append_3793 = $(nodist_fdt_module_SOURCES) +-@COND_arm_efi_TRUE@am__append_3794 = $(nodist_fdt_module_SOURCES) \ ++@COND_arm_uboot_TRUE@am__append_3781 = fdt.mod ++@COND_arm_uboot_TRUE@am__append_3782 = fdt.marker ++@COND_arm_efi_TRUE@am__append_3783 = fdt.module ++@COND_arm_efi_TRUE@am__append_3784 = fdt.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__append_3785 = ++@COND_arm_efi_TRUE@am__append_3786 = $(nodist_fdt_module_SOURCES) ++@COND_arm_efi_TRUE@am__append_3787 = $(nodist_fdt_module_SOURCES) \ + @COND_arm_efi_TRUE@ fdt.marker +-@COND_arm_efi_TRUE@am__append_3795 = fdt.mod +-@COND_arm_efi_TRUE@am__append_3796 = fdt.marker +-@COND_arm64_efi_TRUE@am__append_3797 = fdt.module +-@COND_arm64_efi_TRUE@am__append_3798 = fdt.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__append_3799 = +-@COND_arm64_efi_TRUE@am__append_3800 = $(nodist_fdt_module_SOURCES) +-@COND_arm64_efi_TRUE@am__append_3801 = $(nodist_fdt_module_SOURCES) \ ++@COND_arm_efi_TRUE@am__append_3788 = fdt.mod ++@COND_arm_efi_TRUE@am__append_3789 = fdt.marker ++@COND_arm64_efi_TRUE@am__append_3790 = fdt.module ++@COND_arm64_efi_TRUE@am__append_3791 = fdt.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__append_3792 = ++@COND_arm64_efi_TRUE@am__append_3793 = $(nodist_fdt_module_SOURCES) ++@COND_arm64_efi_TRUE@am__append_3794 = $(nodist_fdt_module_SOURCES) \ + @COND_arm64_efi_TRUE@ fdt.marker +-@COND_arm64_efi_TRUE@am__append_3802 = fdt.mod +-@COND_arm64_efi_TRUE@am__append_3803 = fdt.marker +-@COND_riscv32_efi_TRUE@am__append_3804 = fdt.module +-@COND_riscv32_efi_TRUE@am__append_3805 = fdt.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__append_3806 = +-@COND_riscv32_efi_TRUE@am__append_3807 = $(nodist_fdt_module_SOURCES) +-@COND_riscv32_efi_TRUE@am__append_3808 = $(nodist_fdt_module_SOURCES) \ ++@COND_arm64_efi_TRUE@am__append_3795 = fdt.mod ++@COND_arm64_efi_TRUE@am__append_3796 = fdt.marker ++@COND_riscv32_efi_TRUE@am__append_3797 = fdt.module ++@COND_riscv32_efi_TRUE@am__append_3798 = fdt.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__append_3799 = ++@COND_riscv32_efi_TRUE@am__append_3800 = $(nodist_fdt_module_SOURCES) ++@COND_riscv32_efi_TRUE@am__append_3801 = $(nodist_fdt_module_SOURCES) \ + @COND_riscv32_efi_TRUE@ fdt.marker +-@COND_riscv32_efi_TRUE@am__append_3809 = fdt.mod +-@COND_riscv32_efi_TRUE@am__append_3810 = fdt.marker +-@COND_riscv64_efi_TRUE@am__append_3811 = fdt.module +-@COND_riscv64_efi_TRUE@am__append_3812 = fdt.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__append_3813 = +-@COND_riscv64_efi_TRUE@am__append_3814 = $(nodist_fdt_module_SOURCES) +-@COND_riscv64_efi_TRUE@am__append_3815 = $(nodist_fdt_module_SOURCES) \ ++@COND_riscv32_efi_TRUE@am__append_3802 = fdt.mod ++@COND_riscv32_efi_TRUE@am__append_3803 = fdt.marker ++@COND_riscv64_efi_TRUE@am__append_3804 = fdt.module ++@COND_riscv64_efi_TRUE@am__append_3805 = fdt.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_3806 = ++@COND_riscv64_efi_TRUE@am__append_3807 = $(nodist_fdt_module_SOURCES) ++@COND_riscv64_efi_TRUE@am__append_3808 = $(nodist_fdt_module_SOURCES) \ + @COND_riscv64_efi_TRUE@ fdt.marker +-@COND_riscv64_efi_TRUE@am__append_3816 = fdt.mod +-@COND_riscv64_efi_TRUE@am__append_3817 = fdt.marker +-@COND_i386_pc_TRUE@am__append_3818 = xnu.module +-@COND_i386_pc_TRUE@am__append_3819 = xnu.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_3809 = fdt.mod ++@COND_riscv64_efi_TRUE@am__append_3810 = fdt.marker ++@COND_i386_pc_TRUE@am__append_3811 = xnu.module ++@COND_i386_pc_TRUE@am__append_3812 = xnu.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_x86_64_efi_FALSE@xnu_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_3820 = +-@COND_i386_pc_TRUE@am__append_3821 = $(nodist_xnu_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_3822 = $(nodist_xnu_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_3813 = ++@COND_i386_pc_TRUE@am__append_3814 = $(nodist_xnu_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_3815 = $(nodist_xnu_module_SOURCES) \ + @COND_i386_pc_TRUE@ xnu.marker +-@COND_i386_pc_TRUE@am__append_3823 = xnu.mod +-@COND_i386_pc_TRUE@am__append_3824 = xnu.marker +-@COND_i386_efi_TRUE@am__append_3825 = xnu.module +-@COND_i386_efi_TRUE@am__append_3826 = xnu.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_3827 = +-@COND_i386_efi_TRUE@am__append_3828 = $(nodist_xnu_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_3829 = $(nodist_xnu_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_3816 = xnu.mod ++@COND_i386_pc_TRUE@am__append_3817 = xnu.marker ++@COND_i386_efi_TRUE@am__append_3818 = xnu.module ++@COND_i386_efi_TRUE@am__append_3819 = xnu.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_3820 = ++@COND_i386_efi_TRUE@am__append_3821 = $(nodist_xnu_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_3822 = $(nodist_xnu_module_SOURCES) \ + @COND_i386_efi_TRUE@ xnu.marker +-@COND_i386_efi_TRUE@am__append_3830 = xnu.mod +-@COND_i386_efi_TRUE@am__append_3831 = xnu.marker +-@COND_i386_coreboot_TRUE@am__append_3832 = xnu.module +-@COND_i386_coreboot_TRUE@am__append_3833 = xnu.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_3834 = +-@COND_i386_coreboot_TRUE@am__append_3835 = $(nodist_xnu_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_3836 = \ ++@COND_i386_efi_TRUE@am__append_3823 = xnu.mod ++@COND_i386_efi_TRUE@am__append_3824 = xnu.marker ++@COND_i386_coreboot_TRUE@am__append_3825 = xnu.module ++@COND_i386_coreboot_TRUE@am__append_3826 = xnu.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_3827 = ++@COND_i386_coreboot_TRUE@am__append_3828 = $(nodist_xnu_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_3829 = \ + @COND_i386_coreboot_TRUE@ $(nodist_xnu_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ xnu.marker +-@COND_i386_coreboot_TRUE@am__append_3837 = xnu.mod +-@COND_i386_coreboot_TRUE@am__append_3838 = xnu.marker +-@COND_i386_multiboot_TRUE@am__append_3839 = xnu.module +-@COND_i386_multiboot_TRUE@am__append_3840 = xnu.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_3841 = +-@COND_i386_multiboot_TRUE@am__append_3842 = $(nodist_xnu_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_3843 = \ ++@COND_i386_coreboot_TRUE@am__append_3830 = xnu.mod ++@COND_i386_coreboot_TRUE@am__append_3831 = xnu.marker ++@COND_i386_multiboot_TRUE@am__append_3832 = xnu.module ++@COND_i386_multiboot_TRUE@am__append_3833 = xnu.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_3834 = ++@COND_i386_multiboot_TRUE@am__append_3835 = $(nodist_xnu_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_3836 = \ + @COND_i386_multiboot_TRUE@ $(nodist_xnu_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ xnu.marker +-@COND_i386_multiboot_TRUE@am__append_3844 = xnu.mod +-@COND_i386_multiboot_TRUE@am__append_3845 = xnu.marker +-@COND_x86_64_efi_TRUE@am__append_3846 = xnu.module +-@COND_x86_64_efi_TRUE@am__append_3847 = xnu.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_3848 = +-@COND_x86_64_efi_TRUE@am__append_3849 = $(nodist_xnu_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_3850 = $(nodist_xnu_module_SOURCES) \ ++@COND_i386_multiboot_TRUE@am__append_3837 = xnu.mod ++@COND_i386_multiboot_TRUE@am__append_3838 = xnu.marker ++@COND_x86_64_efi_TRUE@am__append_3839 = xnu.module ++@COND_x86_64_efi_TRUE@am__append_3840 = xnu.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_3841 = ++@COND_x86_64_efi_TRUE@am__append_3842 = $(nodist_xnu_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_3843 = $(nodist_xnu_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ xnu.marker +-@COND_x86_64_efi_TRUE@am__append_3851 = xnu.mod +-@COND_x86_64_efi_TRUE@am__append_3852 = xnu.marker +-@COND_i386_pc_TRUE@am__append_3853 = random.module +-@COND_i386_pc_TRUE@am__append_3854 = random.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_3844 = xnu.mod ++@COND_x86_64_efi_TRUE@am__append_3845 = xnu.marker ++@COND_i386_pc_TRUE@am__append_3846 = random.module ++@COND_i386_pc_TRUE@am__append_3847 = random.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_x86_64_efi_FALSE@random_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_3855 = +-@COND_i386_pc_TRUE@am__append_3856 = $(nodist_random_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_3857 = $(nodist_random_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_3848 = ++@COND_i386_pc_TRUE@am__append_3849 = $(nodist_random_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_3850 = $(nodist_random_module_SOURCES) \ + @COND_i386_pc_TRUE@ random.marker +-@COND_i386_pc_TRUE@am__append_3858 = random.mod +-@COND_i386_pc_TRUE@am__append_3859 = random.marker +-@COND_i386_efi_TRUE@am__append_3860 = random.module +-@COND_i386_efi_TRUE@am__append_3861 = random.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_3862 = +-@COND_i386_efi_TRUE@am__append_3863 = $(nodist_random_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_3864 = $(nodist_random_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_3851 = random.mod ++@COND_i386_pc_TRUE@am__append_3852 = random.marker ++@COND_i386_efi_TRUE@am__append_3853 = random.module ++@COND_i386_efi_TRUE@am__append_3854 = random.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_3855 = ++@COND_i386_efi_TRUE@am__append_3856 = $(nodist_random_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_3857 = $(nodist_random_module_SOURCES) \ + @COND_i386_efi_TRUE@ random.marker +-@COND_i386_efi_TRUE@am__append_3865 = random.mod +-@COND_i386_efi_TRUE@am__append_3866 = random.marker +-@COND_i386_coreboot_TRUE@am__append_3867 = random.module +-@COND_i386_coreboot_TRUE@am__append_3868 = random.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_3869 = +-@COND_i386_coreboot_TRUE@am__append_3870 = $(nodist_random_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_3871 = \ ++@COND_i386_efi_TRUE@am__append_3858 = random.mod ++@COND_i386_efi_TRUE@am__append_3859 = random.marker ++@COND_i386_coreboot_TRUE@am__append_3860 = random.module ++@COND_i386_coreboot_TRUE@am__append_3861 = random.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_3862 = ++@COND_i386_coreboot_TRUE@am__append_3863 = $(nodist_random_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_3864 = \ + @COND_i386_coreboot_TRUE@ $(nodist_random_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ random.marker +-@COND_i386_coreboot_TRUE@am__append_3872 = random.mod +-@COND_i386_coreboot_TRUE@am__append_3873 = random.marker +-@COND_i386_multiboot_TRUE@am__append_3874 = random.module +-@COND_i386_multiboot_TRUE@am__append_3875 = random.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_3876 = +-@COND_i386_multiboot_TRUE@am__append_3877 = $(nodist_random_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_3878 = \ ++@COND_i386_coreboot_TRUE@am__append_3865 = random.mod ++@COND_i386_coreboot_TRUE@am__append_3866 = random.marker ++@COND_i386_multiboot_TRUE@am__append_3867 = random.module ++@COND_i386_multiboot_TRUE@am__append_3868 = random.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_3869 = ++@COND_i386_multiboot_TRUE@am__append_3870 = $(nodist_random_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_3871 = \ + @COND_i386_multiboot_TRUE@ $(nodist_random_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ random.marker +-@COND_i386_multiboot_TRUE@am__append_3879 = random.mod +-@COND_i386_multiboot_TRUE@am__append_3880 = random.marker +-@COND_x86_64_efi_TRUE@am__append_3881 = random.module +-@COND_x86_64_efi_TRUE@am__append_3882 = random.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_3883 = +-@COND_x86_64_efi_TRUE@am__append_3884 = $(nodist_random_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_3885 = \ ++@COND_i386_multiboot_TRUE@am__append_3872 = random.mod ++@COND_i386_multiboot_TRUE@am__append_3873 = random.marker ++@COND_x86_64_efi_TRUE@am__append_3874 = random.module ++@COND_x86_64_efi_TRUE@am__append_3875 = random.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_3876 = ++@COND_x86_64_efi_TRUE@am__append_3877 = $(nodist_random_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_3878 = \ + @COND_x86_64_efi_TRUE@ $(nodist_random_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ random.marker +-@COND_x86_64_efi_TRUE@am__append_3886 = random.mod +-@COND_x86_64_efi_TRUE@am__append_3887 = random.marker +-@COND_i386_efi_TRUE@am__append_3888 = appleldr.module +-@COND_i386_efi_TRUE@am__append_3889 = appleldr.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_3879 = random.mod ++@COND_x86_64_efi_TRUE@am__append_3880 = random.marker ++@COND_i386_efi_TRUE@am__append_3881 = appleldr.module ++@COND_i386_efi_TRUE@am__append_3882 = appleldr.module$(EXEEXT) + @COND_i386_efi_FALSE@@COND_x86_64_efi_FALSE@appleldr_module_DEPENDENCIES = +-@COND_i386_efi_TRUE@am__append_3890 = +-@COND_i386_efi_TRUE@am__append_3891 = $(nodist_appleldr_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_3892 = \ ++@COND_i386_efi_TRUE@am__append_3883 = ++@COND_i386_efi_TRUE@am__append_3884 = $(nodist_appleldr_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_3885 = \ + @COND_i386_efi_TRUE@ $(nodist_appleldr_module_SOURCES) \ + @COND_i386_efi_TRUE@ appleldr.marker +-@COND_i386_efi_TRUE@am__append_3893 = appleldr.mod +-@COND_i386_efi_TRUE@am__append_3894 = appleldr.marker +-@COND_x86_64_efi_TRUE@am__append_3895 = appleldr.module +-@COND_x86_64_efi_TRUE@am__append_3896 = appleldr.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_3897 = +-@COND_x86_64_efi_TRUE@am__append_3898 = $(nodist_appleldr_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_3899 = \ ++@COND_i386_efi_TRUE@am__append_3886 = appleldr.mod ++@COND_i386_efi_TRUE@am__append_3887 = appleldr.marker ++@COND_x86_64_efi_TRUE@am__append_3888 = appleldr.module ++@COND_x86_64_efi_TRUE@am__append_3889 = appleldr.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_3890 = ++@COND_x86_64_efi_TRUE@am__append_3891 = $(nodist_appleldr_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_3892 = \ + @COND_x86_64_efi_TRUE@ $(nodist_appleldr_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ appleldr.marker +-@COND_x86_64_efi_TRUE@am__append_3900 = appleldr.mod +-@COND_x86_64_efi_TRUE@am__append_3901 = appleldr.marker +-@COND_i386_pc_TRUE@am__append_3902 = chain.module +-@COND_i386_pc_TRUE@am__append_3903 = chain.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_3893 = appleldr.mod ++@COND_x86_64_efi_TRUE@am__append_3894 = appleldr.marker ++@COND_i386_pc_TRUE@am__append_3895 = chain.module ++@COND_i386_pc_TRUE@am__append_3896 = chain.module$(EXEEXT) + @COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_FALSE@@COND_ia64_efi_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_x86_64_efi_FALSE@chain_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_3904 = +-@COND_i386_pc_TRUE@am__append_3905 = $(nodist_chain_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_3906 = $(nodist_chain_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_3897 = ++@COND_i386_pc_TRUE@am__append_3898 = $(nodist_chain_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_3899 = $(nodist_chain_module_SOURCES) \ + @COND_i386_pc_TRUE@ chain.marker +-@COND_i386_pc_TRUE@am__append_3907 = chain.mod +-@COND_i386_pc_TRUE@am__append_3908 = chain.marker +-@COND_i386_efi_TRUE@am__append_3909 = chain.module +-@COND_i386_efi_TRUE@am__append_3910 = chain.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_3911 = +-@COND_i386_efi_TRUE@am__append_3912 = $(nodist_chain_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_3913 = $(nodist_chain_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_3900 = chain.mod ++@COND_i386_pc_TRUE@am__append_3901 = chain.marker ++@COND_i386_efi_TRUE@am__append_3902 = chain.module ++@COND_i386_efi_TRUE@am__append_3903 = chain.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_3904 = ++@COND_i386_efi_TRUE@am__append_3905 = $(nodist_chain_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_3906 = $(nodist_chain_module_SOURCES) \ + @COND_i386_efi_TRUE@ chain.marker +-@COND_i386_efi_TRUE@am__append_3914 = chain.mod +-@COND_i386_efi_TRUE@am__append_3915 = chain.marker +-@COND_i386_coreboot_TRUE@am__append_3916 = chain.module +-@COND_i386_coreboot_TRUE@am__append_3917 = chain.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_3918 = +-@COND_i386_coreboot_TRUE@am__append_3919 = $(nodist_chain_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_3920 = \ ++@COND_i386_efi_TRUE@am__append_3907 = chain.mod ++@COND_i386_efi_TRUE@am__append_3908 = chain.marker ++@COND_i386_coreboot_TRUE@am__append_3909 = chain.module ++@COND_i386_coreboot_TRUE@am__append_3910 = chain.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_3911 = ++@COND_i386_coreboot_TRUE@am__append_3912 = $(nodist_chain_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_3913 = \ + @COND_i386_coreboot_TRUE@ $(nodist_chain_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ chain.marker +-@COND_i386_coreboot_TRUE@am__append_3921 = chain.mod +-@COND_i386_coreboot_TRUE@am__append_3922 = chain.marker +-@COND_x86_64_efi_TRUE@am__append_3923 = chain.module +-@COND_x86_64_efi_TRUE@am__append_3924 = chain.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_3925 = +-@COND_x86_64_efi_TRUE@am__append_3926 = $(nodist_chain_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_3927 = \ ++@COND_i386_coreboot_TRUE@am__append_3914 = chain.mod ++@COND_i386_coreboot_TRUE@am__append_3915 = chain.marker ++@COND_x86_64_efi_TRUE@am__append_3916 = chain.module ++@COND_x86_64_efi_TRUE@am__append_3917 = chain.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_3918 = ++@COND_x86_64_efi_TRUE@am__append_3919 = $(nodist_chain_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_3920 = \ + @COND_x86_64_efi_TRUE@ $(nodist_chain_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ chain.marker +-@COND_x86_64_efi_TRUE@am__append_3928 = chain.mod +-@COND_x86_64_efi_TRUE@am__append_3929 = chain.marker +-@COND_ia64_efi_TRUE@am__append_3930 = chain.module +-@COND_ia64_efi_TRUE@am__append_3931 = chain.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__append_3932 = +-@COND_ia64_efi_TRUE@am__append_3933 = $(nodist_chain_module_SOURCES) +-@COND_ia64_efi_TRUE@am__append_3934 = $(nodist_chain_module_SOURCES) \ ++@COND_x86_64_efi_TRUE@am__append_3921 = chain.mod ++@COND_x86_64_efi_TRUE@am__append_3922 = chain.marker ++@COND_ia64_efi_TRUE@am__append_3923 = chain.module ++@COND_ia64_efi_TRUE@am__append_3924 = chain.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__append_3925 = ++@COND_ia64_efi_TRUE@am__append_3926 = $(nodist_chain_module_SOURCES) ++@COND_ia64_efi_TRUE@am__append_3927 = $(nodist_chain_module_SOURCES) \ + @COND_ia64_efi_TRUE@ chain.marker +-@COND_ia64_efi_TRUE@am__append_3935 = chain.mod +-@COND_ia64_efi_TRUE@am__append_3936 = chain.marker +-@COND_arm_efi_TRUE@am__append_3937 = chain.module +-@COND_arm_efi_TRUE@am__append_3938 = chain.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__append_3939 = +-@COND_arm_efi_TRUE@am__append_3940 = $(nodist_chain_module_SOURCES) +-@COND_arm_efi_TRUE@am__append_3941 = $(nodist_chain_module_SOURCES) \ ++@COND_ia64_efi_TRUE@am__append_3928 = chain.mod ++@COND_ia64_efi_TRUE@am__append_3929 = chain.marker ++@COND_arm_efi_TRUE@am__append_3930 = chain.module ++@COND_arm_efi_TRUE@am__append_3931 = chain.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__append_3932 = ++@COND_arm_efi_TRUE@am__append_3933 = $(nodist_chain_module_SOURCES) ++@COND_arm_efi_TRUE@am__append_3934 = $(nodist_chain_module_SOURCES) \ + @COND_arm_efi_TRUE@ chain.marker +-@COND_arm_efi_TRUE@am__append_3942 = chain.mod +-@COND_arm_efi_TRUE@am__append_3943 = chain.marker +-@COND_arm64_efi_TRUE@am__append_3944 = chain.module +-@COND_arm64_efi_TRUE@am__append_3945 = chain.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__append_3946 = +-@COND_arm64_efi_TRUE@am__append_3947 = $(nodist_chain_module_SOURCES) +-@COND_arm64_efi_TRUE@am__append_3948 = $(nodist_chain_module_SOURCES) \ ++@COND_arm_efi_TRUE@am__append_3935 = chain.mod ++@COND_arm_efi_TRUE@am__append_3936 = chain.marker ++@COND_arm64_efi_TRUE@am__append_3937 = chain.module ++@COND_arm64_efi_TRUE@am__append_3938 = chain.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__append_3939 = ++@COND_arm64_efi_TRUE@am__append_3940 = $(nodist_chain_module_SOURCES) ++@COND_arm64_efi_TRUE@am__append_3941 = $(nodist_chain_module_SOURCES) \ + @COND_arm64_efi_TRUE@ chain.marker +-@COND_arm64_efi_TRUE@am__append_3949 = chain.mod +-@COND_arm64_efi_TRUE@am__append_3950 = chain.marker +-@COND_riscv32_efi_TRUE@am__append_3951 = chain.module +-@COND_riscv32_efi_TRUE@am__append_3952 = chain.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__append_3953 = +-@COND_riscv32_efi_TRUE@am__append_3954 = $(nodist_chain_module_SOURCES) +-@COND_riscv32_efi_TRUE@am__append_3955 = \ ++@COND_arm64_efi_TRUE@am__append_3942 = chain.mod ++@COND_arm64_efi_TRUE@am__append_3943 = chain.marker ++@COND_riscv32_efi_TRUE@am__append_3944 = chain.module ++@COND_riscv32_efi_TRUE@am__append_3945 = chain.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__append_3946 = ++@COND_riscv32_efi_TRUE@am__append_3947 = $(nodist_chain_module_SOURCES) ++@COND_riscv32_efi_TRUE@am__append_3948 = \ + @COND_riscv32_efi_TRUE@ $(nodist_chain_module_SOURCES) \ + @COND_riscv32_efi_TRUE@ chain.marker +-@COND_riscv32_efi_TRUE@am__append_3956 = chain.mod +-@COND_riscv32_efi_TRUE@am__append_3957 = chain.marker +-@COND_riscv64_efi_TRUE@am__append_3958 = chain.module +-@COND_riscv64_efi_TRUE@am__append_3959 = chain.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__append_3960 = +-@COND_riscv64_efi_TRUE@am__append_3961 = $(nodist_chain_module_SOURCES) +-@COND_riscv64_efi_TRUE@am__append_3962 = \ ++@COND_riscv32_efi_TRUE@am__append_3949 = chain.mod ++@COND_riscv32_efi_TRUE@am__append_3950 = chain.marker ++@COND_riscv64_efi_TRUE@am__append_3951 = chain.module ++@COND_riscv64_efi_TRUE@am__append_3952 = chain.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_3953 = ++@COND_riscv64_efi_TRUE@am__append_3954 = $(nodist_chain_module_SOURCES) ++@COND_riscv64_efi_TRUE@am__append_3955 = \ + @COND_riscv64_efi_TRUE@ $(nodist_chain_module_SOURCES) \ + @COND_riscv64_efi_TRUE@ chain.marker +-@COND_riscv64_efi_TRUE@am__append_3963 = chain.mod +-@COND_riscv64_efi_TRUE@am__append_3964 = chain.marker +-@COND_i386_pc_TRUE@am__append_3965 = mmap.module +-@COND_i386_pc_TRUE@am__append_3966 = mmap.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_3956 = chain.mod ++@COND_riscv64_efi_TRUE@am__append_3957 = chain.marker ++@COND_i386_pc_TRUE@am__append_3958 = mmap.module ++@COND_i386_pc_TRUE@am__append_3959 = mmap.module$(EXEEXT) + @COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_x86_64_efi_FALSE@mmap_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_3967 = +-@COND_i386_pc_TRUE@am__append_3968 = $(nodist_mmap_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_3969 = $(nodist_mmap_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_3960 = ++@COND_i386_pc_TRUE@am__append_3961 = $(nodist_mmap_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_3962 = $(nodist_mmap_module_SOURCES) \ + @COND_i386_pc_TRUE@ mmap.marker +-@COND_i386_pc_TRUE@am__append_3970 = mmap.mod +-@COND_i386_pc_TRUE@am__append_3971 = mmap.marker +-@COND_i386_efi_TRUE@am__append_3972 = mmap.module +-@COND_i386_efi_TRUE@am__append_3973 = mmap.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_3974 = +-@COND_i386_efi_TRUE@am__append_3975 = $(nodist_mmap_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_3976 = $(nodist_mmap_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_3963 = mmap.mod ++@COND_i386_pc_TRUE@am__append_3964 = mmap.marker ++@COND_i386_efi_TRUE@am__append_3965 = mmap.module ++@COND_i386_efi_TRUE@am__append_3966 = mmap.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_3967 = ++@COND_i386_efi_TRUE@am__append_3968 = $(nodist_mmap_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_3969 = $(nodist_mmap_module_SOURCES) \ + @COND_i386_efi_TRUE@ mmap.marker +-@COND_i386_efi_TRUE@am__append_3977 = mmap.mod +-@COND_i386_efi_TRUE@am__append_3978 = mmap.marker +-@COND_i386_qemu_TRUE@am__append_3979 = mmap.module +-@COND_i386_qemu_TRUE@am__append_3980 = mmap.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_3981 = +-@COND_i386_qemu_TRUE@am__append_3982 = $(nodist_mmap_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_3983 = $(nodist_mmap_module_SOURCES) \ ++@COND_i386_efi_TRUE@am__append_3970 = mmap.mod ++@COND_i386_efi_TRUE@am__append_3971 = mmap.marker ++@COND_i386_qemu_TRUE@am__append_3972 = mmap.module ++@COND_i386_qemu_TRUE@am__append_3973 = mmap.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_3974 = ++@COND_i386_qemu_TRUE@am__append_3975 = $(nodist_mmap_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_3976 = $(nodist_mmap_module_SOURCES) \ + @COND_i386_qemu_TRUE@ mmap.marker +-@COND_i386_qemu_TRUE@am__append_3984 = mmap.mod +-@COND_i386_qemu_TRUE@am__append_3985 = mmap.marker +-@COND_i386_coreboot_TRUE@am__append_3986 = mmap.module +-@COND_i386_coreboot_TRUE@am__append_3987 = mmap.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_3988 = +-@COND_i386_coreboot_TRUE@am__append_3989 = $(nodist_mmap_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_3990 = \ ++@COND_i386_qemu_TRUE@am__append_3977 = mmap.mod ++@COND_i386_qemu_TRUE@am__append_3978 = mmap.marker ++@COND_i386_coreboot_TRUE@am__append_3979 = mmap.module ++@COND_i386_coreboot_TRUE@am__append_3980 = mmap.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_3981 = ++@COND_i386_coreboot_TRUE@am__append_3982 = $(nodist_mmap_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_3983 = \ + @COND_i386_coreboot_TRUE@ $(nodist_mmap_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ mmap.marker +-@COND_i386_coreboot_TRUE@am__append_3991 = mmap.mod +-@COND_i386_coreboot_TRUE@am__append_3992 = mmap.marker +-@COND_i386_multiboot_TRUE@am__append_3993 = mmap.module +-@COND_i386_multiboot_TRUE@am__append_3994 = mmap.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_3995 = +-@COND_i386_multiboot_TRUE@am__append_3996 = $(nodist_mmap_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_3997 = \ ++@COND_i386_coreboot_TRUE@am__append_3984 = mmap.mod ++@COND_i386_coreboot_TRUE@am__append_3985 = mmap.marker ++@COND_i386_multiboot_TRUE@am__append_3986 = mmap.module ++@COND_i386_multiboot_TRUE@am__append_3987 = mmap.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_3988 = ++@COND_i386_multiboot_TRUE@am__append_3989 = $(nodist_mmap_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_3990 = \ + @COND_i386_multiboot_TRUE@ $(nodist_mmap_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ mmap.marker +-@COND_i386_multiboot_TRUE@am__append_3998 = mmap.mod +-@COND_i386_multiboot_TRUE@am__append_3999 = mmap.marker +-@COND_i386_ieee1275_TRUE@am__append_4000 = mmap.module +-@COND_i386_ieee1275_TRUE@am__append_4001 = mmap.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_4002 = +-@COND_i386_ieee1275_TRUE@am__append_4003 = $(nodist_mmap_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_4004 = \ ++@COND_i386_multiboot_TRUE@am__append_3991 = mmap.mod ++@COND_i386_multiboot_TRUE@am__append_3992 = mmap.marker ++@COND_i386_ieee1275_TRUE@am__append_3993 = mmap.module ++@COND_i386_ieee1275_TRUE@am__append_3994 = mmap.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_3995 = ++@COND_i386_ieee1275_TRUE@am__append_3996 = $(nodist_mmap_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_3997 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_mmap_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ mmap.marker +-@COND_i386_ieee1275_TRUE@am__append_4005 = mmap.mod +-@COND_i386_ieee1275_TRUE@am__append_4006 = mmap.marker +-@COND_x86_64_efi_TRUE@am__append_4007 = mmap.module +-@COND_x86_64_efi_TRUE@am__append_4008 = mmap.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_4009 = +-@COND_x86_64_efi_TRUE@am__append_4010 = $(nodist_mmap_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_4011 = $(nodist_mmap_module_SOURCES) \ ++@COND_i386_ieee1275_TRUE@am__append_3998 = mmap.mod ++@COND_i386_ieee1275_TRUE@am__append_3999 = mmap.marker ++@COND_x86_64_efi_TRUE@am__append_4000 = mmap.module ++@COND_x86_64_efi_TRUE@am__append_4001 = mmap.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_4002 = ++@COND_x86_64_efi_TRUE@am__append_4003 = $(nodist_mmap_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_4004 = $(nodist_mmap_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ mmap.marker +-@COND_x86_64_efi_TRUE@am__append_4012 = mmap.mod +-@COND_x86_64_efi_TRUE@am__append_4013 = mmap.marker +-@COND_i386_xen_pvh_TRUE@am__append_4014 = mmap.module +-@COND_i386_xen_pvh_TRUE@am__append_4015 = mmap.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__append_4016 = +-@COND_i386_xen_pvh_TRUE@am__append_4017 = $(nodist_mmap_module_SOURCES) +-@COND_i386_xen_pvh_TRUE@am__append_4018 = \ ++@COND_x86_64_efi_TRUE@am__append_4005 = mmap.mod ++@COND_x86_64_efi_TRUE@am__append_4006 = mmap.marker ++@COND_i386_xen_pvh_TRUE@am__append_4007 = mmap.module ++@COND_i386_xen_pvh_TRUE@am__append_4008 = mmap.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__append_4009 = ++@COND_i386_xen_pvh_TRUE@am__append_4010 = $(nodist_mmap_module_SOURCES) ++@COND_i386_xen_pvh_TRUE@am__append_4011 = \ + @COND_i386_xen_pvh_TRUE@ $(nodist_mmap_module_SOURCES) \ + @COND_i386_xen_pvh_TRUE@ mmap.marker +-@COND_i386_xen_pvh_TRUE@am__append_4019 = mmap.mod +-@COND_i386_xen_pvh_TRUE@am__append_4020 = mmap.marker +-@COND_mips_loongson_TRUE@am__append_4021 = mmap.module +-@COND_mips_loongson_TRUE@am__append_4022 = mmap.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__append_4023 = +-@COND_mips_loongson_TRUE@am__append_4024 = $(nodist_mmap_module_SOURCES) +-@COND_mips_loongson_TRUE@am__append_4025 = \ ++@COND_i386_xen_pvh_TRUE@am__append_4012 = mmap.mod ++@COND_i386_xen_pvh_TRUE@am__append_4013 = mmap.marker ++@COND_mips_loongson_TRUE@am__append_4014 = mmap.module ++@COND_mips_loongson_TRUE@am__append_4015 = mmap.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__append_4016 = ++@COND_mips_loongson_TRUE@am__append_4017 = $(nodist_mmap_module_SOURCES) ++@COND_mips_loongson_TRUE@am__append_4018 = \ + @COND_mips_loongson_TRUE@ $(nodist_mmap_module_SOURCES) \ + @COND_mips_loongson_TRUE@ mmap.marker +-@COND_mips_loongson_TRUE@am__append_4026 = mmap.mod +-@COND_mips_loongson_TRUE@am__append_4027 = mmap.marker +-@COND_mips_arc_TRUE@am__append_4028 = mmap.module +-@COND_mips_arc_TRUE@am__append_4029 = mmap.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__append_4030 = +-@COND_mips_arc_TRUE@am__append_4031 = $(nodist_mmap_module_SOURCES) +-@COND_mips_arc_TRUE@am__append_4032 = $(nodist_mmap_module_SOURCES) \ ++@COND_mips_loongson_TRUE@am__append_4019 = mmap.mod ++@COND_mips_loongson_TRUE@am__append_4020 = mmap.marker ++@COND_mips_arc_TRUE@am__append_4021 = mmap.module ++@COND_mips_arc_TRUE@am__append_4022 = mmap.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__append_4023 = ++@COND_mips_arc_TRUE@am__append_4024 = $(nodist_mmap_module_SOURCES) ++@COND_mips_arc_TRUE@am__append_4025 = $(nodist_mmap_module_SOURCES) \ + @COND_mips_arc_TRUE@ mmap.marker +-@COND_mips_arc_TRUE@am__append_4033 = mmap.mod +-@COND_mips_arc_TRUE@am__append_4034 = mmap.marker +-@COND_ia64_efi_TRUE@am__append_4035 = mmap.module +-@COND_ia64_efi_TRUE@am__append_4036 = mmap.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__append_4037 = +-@COND_ia64_efi_TRUE@am__append_4038 = $(nodist_mmap_module_SOURCES) +-@COND_ia64_efi_TRUE@am__append_4039 = $(nodist_mmap_module_SOURCES) \ ++@COND_mips_arc_TRUE@am__append_4026 = mmap.mod ++@COND_mips_arc_TRUE@am__append_4027 = mmap.marker ++@COND_ia64_efi_TRUE@am__append_4028 = mmap.module ++@COND_ia64_efi_TRUE@am__append_4029 = mmap.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__append_4030 = ++@COND_ia64_efi_TRUE@am__append_4031 = $(nodist_mmap_module_SOURCES) ++@COND_ia64_efi_TRUE@am__append_4032 = $(nodist_mmap_module_SOURCES) \ + @COND_ia64_efi_TRUE@ mmap.marker +-@COND_ia64_efi_TRUE@am__append_4040 = mmap.mod +-@COND_ia64_efi_TRUE@am__append_4041 = mmap.marker +-@COND_mips_qemu_mips_TRUE@am__append_4042 = mmap.module +-@COND_mips_qemu_mips_TRUE@am__append_4043 = mmap.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__append_4044 = +-@COND_mips_qemu_mips_TRUE@am__append_4045 = $(nodist_mmap_module_SOURCES) +-@COND_mips_qemu_mips_TRUE@am__append_4046 = \ ++@COND_ia64_efi_TRUE@am__append_4033 = mmap.mod ++@COND_ia64_efi_TRUE@am__append_4034 = mmap.marker ++@COND_mips_qemu_mips_TRUE@am__append_4035 = mmap.module ++@COND_mips_qemu_mips_TRUE@am__append_4036 = mmap.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__append_4037 = ++@COND_mips_qemu_mips_TRUE@am__append_4038 = $(nodist_mmap_module_SOURCES) ++@COND_mips_qemu_mips_TRUE@am__append_4039 = \ + @COND_mips_qemu_mips_TRUE@ $(nodist_mmap_module_SOURCES) \ + @COND_mips_qemu_mips_TRUE@ mmap.marker +-@COND_mips_qemu_mips_TRUE@am__append_4047 = mmap.mod +-@COND_mips_qemu_mips_TRUE@am__append_4048 = mmap.marker +-@COND_arm_efi_TRUE@am__append_4049 = mmap.module +-@COND_arm_efi_TRUE@am__append_4050 = mmap.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__append_4051 = +-@COND_arm_efi_TRUE@am__append_4052 = $(nodist_mmap_module_SOURCES) +-@COND_arm_efi_TRUE@am__append_4053 = $(nodist_mmap_module_SOURCES) \ ++@COND_mips_qemu_mips_TRUE@am__append_4040 = mmap.mod ++@COND_mips_qemu_mips_TRUE@am__append_4041 = mmap.marker ++@COND_arm_efi_TRUE@am__append_4042 = mmap.module ++@COND_arm_efi_TRUE@am__append_4043 = mmap.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__append_4044 = ++@COND_arm_efi_TRUE@am__append_4045 = $(nodist_mmap_module_SOURCES) ++@COND_arm_efi_TRUE@am__append_4046 = $(nodist_mmap_module_SOURCES) \ + @COND_arm_efi_TRUE@ mmap.marker +-@COND_arm_efi_TRUE@am__append_4054 = mmap.mod +-@COND_arm_efi_TRUE@am__append_4055 = mmap.marker +-@COND_arm64_efi_TRUE@am__append_4056 = mmap.module +-@COND_arm64_efi_TRUE@am__append_4057 = mmap.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__append_4058 = +-@COND_arm64_efi_TRUE@am__append_4059 = $(nodist_mmap_module_SOURCES) +-@COND_arm64_efi_TRUE@am__append_4060 = $(nodist_mmap_module_SOURCES) \ ++@COND_arm_efi_TRUE@am__append_4047 = mmap.mod ++@COND_arm_efi_TRUE@am__append_4048 = mmap.marker ++@COND_arm64_efi_TRUE@am__append_4049 = mmap.module ++@COND_arm64_efi_TRUE@am__append_4050 = mmap.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__append_4051 = ++@COND_arm64_efi_TRUE@am__append_4052 = $(nodist_mmap_module_SOURCES) ++@COND_arm64_efi_TRUE@am__append_4053 = $(nodist_mmap_module_SOURCES) \ + @COND_arm64_efi_TRUE@ mmap.marker +-@COND_arm64_efi_TRUE@am__append_4061 = mmap.mod +-@COND_arm64_efi_TRUE@am__append_4062 = mmap.marker +-@COND_riscv32_efi_TRUE@am__append_4063 = mmap.module +-@COND_riscv32_efi_TRUE@am__append_4064 = mmap.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__append_4065 = +-@COND_riscv32_efi_TRUE@am__append_4066 = $(nodist_mmap_module_SOURCES) +-@COND_riscv32_efi_TRUE@am__append_4067 = \ ++@COND_arm64_efi_TRUE@am__append_4054 = mmap.mod ++@COND_arm64_efi_TRUE@am__append_4055 = mmap.marker ++@COND_riscv32_efi_TRUE@am__append_4056 = mmap.module ++@COND_riscv32_efi_TRUE@am__append_4057 = mmap.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__append_4058 = ++@COND_riscv32_efi_TRUE@am__append_4059 = $(nodist_mmap_module_SOURCES) ++@COND_riscv32_efi_TRUE@am__append_4060 = \ + @COND_riscv32_efi_TRUE@ $(nodist_mmap_module_SOURCES) \ + @COND_riscv32_efi_TRUE@ mmap.marker +-@COND_riscv32_efi_TRUE@am__append_4068 = mmap.mod +-@COND_riscv32_efi_TRUE@am__append_4069 = mmap.marker +-@COND_riscv64_efi_TRUE@am__append_4070 = mmap.module +-@COND_riscv64_efi_TRUE@am__append_4071 = mmap.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__append_4072 = +-@COND_riscv64_efi_TRUE@am__append_4073 = $(nodist_mmap_module_SOURCES) +-@COND_riscv64_efi_TRUE@am__append_4074 = \ ++@COND_riscv32_efi_TRUE@am__append_4061 = mmap.mod ++@COND_riscv32_efi_TRUE@am__append_4062 = mmap.marker ++@COND_riscv64_efi_TRUE@am__append_4063 = mmap.module ++@COND_riscv64_efi_TRUE@am__append_4064 = mmap.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_4065 = ++@COND_riscv64_efi_TRUE@am__append_4066 = $(nodist_mmap_module_SOURCES) ++@COND_riscv64_efi_TRUE@am__append_4067 = \ + @COND_riscv64_efi_TRUE@ $(nodist_mmap_module_SOURCES) \ + @COND_riscv64_efi_TRUE@ mmap.marker +-@COND_riscv64_efi_TRUE@am__append_4075 = mmap.mod +-@COND_riscv64_efi_TRUE@am__append_4076 = mmap.marker +-@COND_i386_pc_TRUE@am__append_4077 = at_keyboard.module +-@COND_i386_pc_TRUE@am__append_4078 = at_keyboard.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_4068 = mmap.mod ++@COND_riscv64_efi_TRUE@am__append_4069 = mmap.marker ++@COND_i386_pc_TRUE@am__append_4070 = at_keyboard.module ++@COND_i386_pc_TRUE@am__append_4071 = at_keyboard.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@at_keyboard_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_4079 = +-@COND_i386_pc_TRUE@am__append_4080 = $(nodist_at_keyboard_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_4081 = \ ++@COND_i386_pc_TRUE@am__append_4072 = ++@COND_i386_pc_TRUE@am__append_4073 = $(nodist_at_keyboard_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_4074 = \ + @COND_i386_pc_TRUE@ $(nodist_at_keyboard_module_SOURCES) \ + @COND_i386_pc_TRUE@ at_keyboard.marker +-@COND_i386_pc_TRUE@am__append_4082 = at_keyboard.mod +-@COND_i386_pc_TRUE@am__append_4083 = at_keyboard.marker +-@COND_i386_efi_TRUE@am__append_4084 = at_keyboard.module +-@COND_i386_efi_TRUE@am__append_4085 = at_keyboard.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_4086 = +-@COND_i386_efi_TRUE@am__append_4087 = $(nodist_at_keyboard_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_4088 = \ ++@COND_i386_pc_TRUE@am__append_4075 = at_keyboard.mod ++@COND_i386_pc_TRUE@am__append_4076 = at_keyboard.marker ++@COND_i386_efi_TRUE@am__append_4077 = at_keyboard.module ++@COND_i386_efi_TRUE@am__append_4078 = at_keyboard.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_4079 = ++@COND_i386_efi_TRUE@am__append_4080 = $(nodist_at_keyboard_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_4081 = \ + @COND_i386_efi_TRUE@ $(nodist_at_keyboard_module_SOURCES) \ + @COND_i386_efi_TRUE@ at_keyboard.marker +-@COND_i386_efi_TRUE@am__append_4089 = at_keyboard.mod +-@COND_i386_efi_TRUE@am__append_4090 = at_keyboard.marker +-@COND_i386_qemu_TRUE@am__append_4091 = at_keyboard.module +-@COND_i386_qemu_TRUE@am__append_4092 = at_keyboard.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_4093 = +-@COND_i386_qemu_TRUE@am__append_4094 = $(nodist_at_keyboard_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_4095 = \ ++@COND_i386_efi_TRUE@am__append_4082 = at_keyboard.mod ++@COND_i386_efi_TRUE@am__append_4083 = at_keyboard.marker ++@COND_i386_qemu_TRUE@am__append_4084 = at_keyboard.module ++@COND_i386_qemu_TRUE@am__append_4085 = at_keyboard.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_4086 = ++@COND_i386_qemu_TRUE@am__append_4087 = $(nodist_at_keyboard_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_4088 = \ + @COND_i386_qemu_TRUE@ $(nodist_at_keyboard_module_SOURCES) \ + @COND_i386_qemu_TRUE@ at_keyboard.marker +-@COND_i386_qemu_TRUE@am__append_4096 = at_keyboard.mod +-@COND_i386_qemu_TRUE@am__append_4097 = at_keyboard.marker +-@COND_i386_coreboot_TRUE@am__append_4098 = at_keyboard.module +-@COND_i386_coreboot_TRUE@am__append_4099 = at_keyboard.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_4100 = +-@COND_i386_coreboot_TRUE@am__append_4101 = $(nodist_at_keyboard_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_4102 = \ ++@COND_i386_qemu_TRUE@am__append_4089 = at_keyboard.mod ++@COND_i386_qemu_TRUE@am__append_4090 = at_keyboard.marker ++@COND_i386_coreboot_TRUE@am__append_4091 = at_keyboard.module ++@COND_i386_coreboot_TRUE@am__append_4092 = at_keyboard.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_4093 = ++@COND_i386_coreboot_TRUE@am__append_4094 = $(nodist_at_keyboard_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_4095 = \ + @COND_i386_coreboot_TRUE@ $(nodist_at_keyboard_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ at_keyboard.marker +-@COND_i386_coreboot_TRUE@am__append_4103 = at_keyboard.mod +-@COND_i386_coreboot_TRUE@am__append_4104 = at_keyboard.marker +-@COND_i386_multiboot_TRUE@am__append_4105 = at_keyboard.module +-@COND_i386_multiboot_TRUE@am__append_4106 = at_keyboard.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_4107 = +-@COND_i386_multiboot_TRUE@am__append_4108 = $(nodist_at_keyboard_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_4109 = $(nodist_at_keyboard_module_SOURCES) \ ++@COND_i386_coreboot_TRUE@am__append_4096 = at_keyboard.mod ++@COND_i386_coreboot_TRUE@am__append_4097 = at_keyboard.marker ++@COND_i386_multiboot_TRUE@am__append_4098 = at_keyboard.module ++@COND_i386_multiboot_TRUE@am__append_4099 = at_keyboard.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_4100 = ++@COND_i386_multiboot_TRUE@am__append_4101 = $(nodist_at_keyboard_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_4102 = $(nodist_at_keyboard_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ at_keyboard.marker +-@COND_i386_multiboot_TRUE@am__append_4110 = at_keyboard.mod +-@COND_i386_multiboot_TRUE@am__append_4111 = at_keyboard.marker +-@COND_i386_ieee1275_TRUE@am__append_4112 = at_keyboard.module +-@COND_i386_ieee1275_TRUE@am__append_4113 = at_keyboard.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_4114 = +-@COND_i386_ieee1275_TRUE@am__append_4115 = $(nodist_at_keyboard_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_4116 = \ ++@COND_i386_multiboot_TRUE@am__append_4103 = at_keyboard.mod ++@COND_i386_multiboot_TRUE@am__append_4104 = at_keyboard.marker ++@COND_i386_ieee1275_TRUE@am__append_4105 = at_keyboard.module ++@COND_i386_ieee1275_TRUE@am__append_4106 = at_keyboard.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_4107 = ++@COND_i386_ieee1275_TRUE@am__append_4108 = $(nodist_at_keyboard_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_4109 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_at_keyboard_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ at_keyboard.marker +-@COND_i386_ieee1275_TRUE@am__append_4117 = at_keyboard.mod +-@COND_i386_ieee1275_TRUE@am__append_4118 = at_keyboard.marker +-@COND_x86_64_efi_TRUE@am__append_4119 = at_keyboard.module +-@COND_x86_64_efi_TRUE@am__append_4120 = at_keyboard.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_4121 = +-@COND_x86_64_efi_TRUE@am__append_4122 = $(nodist_at_keyboard_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_4123 = \ ++@COND_i386_ieee1275_TRUE@am__append_4110 = at_keyboard.mod ++@COND_i386_ieee1275_TRUE@am__append_4111 = at_keyboard.marker ++@COND_x86_64_efi_TRUE@am__append_4112 = at_keyboard.module ++@COND_x86_64_efi_TRUE@am__append_4113 = at_keyboard.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_4114 = ++@COND_x86_64_efi_TRUE@am__append_4115 = $(nodist_at_keyboard_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_4116 = \ + @COND_x86_64_efi_TRUE@ $(nodist_at_keyboard_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ at_keyboard.marker +-@COND_x86_64_efi_TRUE@am__append_4124 = at_keyboard.mod +-@COND_x86_64_efi_TRUE@am__append_4125 = at_keyboard.marker +-@COND_emu_TRUE@am__append_4126 = gfxterm.module +-@COND_emu_TRUE@am__append_4127 = gfxterm.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_4117 = at_keyboard.mod ++@COND_x86_64_efi_TRUE@am__append_4118 = at_keyboard.marker ++@COND_emu_TRUE@am__append_4119 = gfxterm.module ++@COND_emu_TRUE@am__append_4120 = gfxterm.module$(EXEEXT) + @COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@gfxterm_module_DEPENDENCIES = +-@COND_emu_TRUE@am__append_4128 = +-@COND_emu_TRUE@am__append_4129 = $(nodist_gfxterm_module_SOURCES) +-@COND_emu_TRUE@am__append_4130 = $(nodist_gfxterm_module_SOURCES) \ ++@COND_emu_TRUE@am__append_4121 = ++@COND_emu_TRUE@am__append_4122 = $(nodist_gfxterm_module_SOURCES) ++@COND_emu_TRUE@am__append_4123 = $(nodist_gfxterm_module_SOURCES) \ + @COND_emu_TRUE@ gfxterm.marker +-@COND_emu_TRUE@am__append_4131 = gfxterm.mod +-@COND_emu_TRUE@am__append_4132 = gfxterm.marker +-@COND_i386_pc_TRUE@am__append_4133 = gfxterm.module +-@COND_i386_pc_TRUE@am__append_4134 = gfxterm.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__append_4135 = +-@COND_i386_pc_TRUE@am__append_4136 = $(nodist_gfxterm_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_4137 = $(nodist_gfxterm_module_SOURCES) \ ++@COND_emu_TRUE@am__append_4124 = gfxterm.mod ++@COND_emu_TRUE@am__append_4125 = gfxterm.marker ++@COND_i386_pc_TRUE@am__append_4126 = gfxterm.module ++@COND_i386_pc_TRUE@am__append_4127 = gfxterm.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__append_4128 = ++@COND_i386_pc_TRUE@am__append_4129 = $(nodist_gfxterm_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_4130 = $(nodist_gfxterm_module_SOURCES) \ + @COND_i386_pc_TRUE@ gfxterm.marker +-@COND_i386_pc_TRUE@am__append_4138 = gfxterm.mod +-@COND_i386_pc_TRUE@am__append_4139 = gfxterm.marker +-@COND_i386_efi_TRUE@am__append_4140 = gfxterm.module +-@COND_i386_efi_TRUE@am__append_4141 = gfxterm.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_4142 = +-@COND_i386_efi_TRUE@am__append_4143 = $(nodist_gfxterm_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_4144 = \ ++@COND_i386_pc_TRUE@am__append_4131 = gfxterm.mod ++@COND_i386_pc_TRUE@am__append_4132 = gfxterm.marker ++@COND_i386_efi_TRUE@am__append_4133 = gfxterm.module ++@COND_i386_efi_TRUE@am__append_4134 = gfxterm.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_4135 = ++@COND_i386_efi_TRUE@am__append_4136 = $(nodist_gfxterm_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_4137 = \ + @COND_i386_efi_TRUE@ $(nodist_gfxterm_module_SOURCES) \ + @COND_i386_efi_TRUE@ gfxterm.marker +-@COND_i386_efi_TRUE@am__append_4145 = gfxterm.mod +-@COND_i386_efi_TRUE@am__append_4146 = gfxterm.marker +-@COND_i386_qemu_TRUE@am__append_4147 = gfxterm.module +-@COND_i386_qemu_TRUE@am__append_4148 = gfxterm.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_4149 = +-@COND_i386_qemu_TRUE@am__append_4150 = $(nodist_gfxterm_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_4151 = \ ++@COND_i386_efi_TRUE@am__append_4138 = gfxterm.mod ++@COND_i386_efi_TRUE@am__append_4139 = gfxterm.marker ++@COND_i386_qemu_TRUE@am__append_4140 = gfxterm.module ++@COND_i386_qemu_TRUE@am__append_4141 = gfxterm.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_4142 = ++@COND_i386_qemu_TRUE@am__append_4143 = $(nodist_gfxterm_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_4144 = \ + @COND_i386_qemu_TRUE@ $(nodist_gfxterm_module_SOURCES) \ + @COND_i386_qemu_TRUE@ gfxterm.marker +-@COND_i386_qemu_TRUE@am__append_4152 = gfxterm.mod +-@COND_i386_qemu_TRUE@am__append_4153 = gfxterm.marker +-@COND_i386_multiboot_TRUE@am__append_4154 = gfxterm.module +-@COND_i386_multiboot_TRUE@am__append_4155 = gfxterm.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_4156 = +-@COND_i386_multiboot_TRUE@am__append_4157 = $(nodist_gfxterm_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_4158 = \ ++@COND_i386_qemu_TRUE@am__append_4145 = gfxterm.mod ++@COND_i386_qemu_TRUE@am__append_4146 = gfxterm.marker ++@COND_i386_multiboot_TRUE@am__append_4147 = gfxterm.module ++@COND_i386_multiboot_TRUE@am__append_4148 = gfxterm.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_4149 = ++@COND_i386_multiboot_TRUE@am__append_4150 = $(nodist_gfxterm_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_4151 = \ + @COND_i386_multiboot_TRUE@ $(nodist_gfxterm_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ gfxterm.marker +-@COND_i386_multiboot_TRUE@am__append_4159 = gfxterm.mod +-@COND_i386_multiboot_TRUE@am__append_4160 = gfxterm.marker +-@COND_i386_ieee1275_TRUE@am__append_4161 = gfxterm.module +-@COND_i386_ieee1275_TRUE@am__append_4162 = gfxterm.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_4163 = +-@COND_i386_ieee1275_TRUE@am__append_4164 = $(nodist_gfxterm_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_4165 = \ ++@COND_i386_multiboot_TRUE@am__append_4152 = gfxterm.mod ++@COND_i386_multiboot_TRUE@am__append_4153 = gfxterm.marker ++@COND_i386_ieee1275_TRUE@am__append_4154 = gfxterm.module ++@COND_i386_ieee1275_TRUE@am__append_4155 = gfxterm.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_4156 = ++@COND_i386_ieee1275_TRUE@am__append_4157 = $(nodist_gfxterm_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_4158 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_gfxterm_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ gfxterm.marker +-@COND_i386_ieee1275_TRUE@am__append_4166 = gfxterm.mod +-@COND_i386_ieee1275_TRUE@am__append_4167 = gfxterm.marker +-@COND_x86_64_efi_TRUE@am__append_4168 = gfxterm.module +-@COND_x86_64_efi_TRUE@am__append_4169 = gfxterm.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_4170 = +-@COND_x86_64_efi_TRUE@am__append_4171 = $(nodist_gfxterm_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_4172 = \ ++@COND_i386_ieee1275_TRUE@am__append_4159 = gfxterm.mod ++@COND_i386_ieee1275_TRUE@am__append_4160 = gfxterm.marker ++@COND_x86_64_efi_TRUE@am__append_4161 = gfxterm.module ++@COND_x86_64_efi_TRUE@am__append_4162 = gfxterm.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_4163 = ++@COND_x86_64_efi_TRUE@am__append_4164 = $(nodist_gfxterm_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_4165 = \ + @COND_x86_64_efi_TRUE@ $(nodist_gfxterm_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ gfxterm.marker +-@COND_x86_64_efi_TRUE@am__append_4173 = gfxterm.mod +-@COND_x86_64_efi_TRUE@am__append_4174 = gfxterm.marker +-@COND_i386_xen_TRUE@am__append_4175 = gfxterm.module +-@COND_i386_xen_TRUE@am__append_4176 = gfxterm.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__append_4177 = +-@COND_i386_xen_TRUE@am__append_4178 = $(nodist_gfxterm_module_SOURCES) +-@COND_i386_xen_TRUE@am__append_4179 = \ ++@COND_x86_64_efi_TRUE@am__append_4166 = gfxterm.mod ++@COND_x86_64_efi_TRUE@am__append_4167 = gfxterm.marker ++@COND_i386_xen_TRUE@am__append_4168 = gfxterm.module ++@COND_i386_xen_TRUE@am__append_4169 = gfxterm.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__append_4170 = ++@COND_i386_xen_TRUE@am__append_4171 = $(nodist_gfxterm_module_SOURCES) ++@COND_i386_xen_TRUE@am__append_4172 = \ + @COND_i386_xen_TRUE@ $(nodist_gfxterm_module_SOURCES) \ + @COND_i386_xen_TRUE@ gfxterm.marker +-@COND_i386_xen_TRUE@am__append_4180 = gfxterm.mod +-@COND_i386_xen_TRUE@am__append_4181 = gfxterm.marker +-@COND_x86_64_xen_TRUE@am__append_4182 = gfxterm.module +-@COND_x86_64_xen_TRUE@am__append_4183 = gfxterm.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__append_4184 = +-@COND_x86_64_xen_TRUE@am__append_4185 = $(nodist_gfxterm_module_SOURCES) +-@COND_x86_64_xen_TRUE@am__append_4186 = \ ++@COND_i386_xen_TRUE@am__append_4173 = gfxterm.mod ++@COND_i386_xen_TRUE@am__append_4174 = gfxterm.marker ++@COND_x86_64_xen_TRUE@am__append_4175 = gfxterm.module ++@COND_x86_64_xen_TRUE@am__append_4176 = gfxterm.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__append_4177 = ++@COND_x86_64_xen_TRUE@am__append_4178 = $(nodist_gfxterm_module_SOURCES) ++@COND_x86_64_xen_TRUE@am__append_4179 = \ + @COND_x86_64_xen_TRUE@ $(nodist_gfxterm_module_SOURCES) \ + @COND_x86_64_xen_TRUE@ gfxterm.marker +-@COND_x86_64_xen_TRUE@am__append_4187 = gfxterm.mod +-@COND_x86_64_xen_TRUE@am__append_4188 = gfxterm.marker +-@COND_i386_xen_pvh_TRUE@am__append_4189 = gfxterm.module +-@COND_i386_xen_pvh_TRUE@am__append_4190 = gfxterm.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__append_4191 = +-@COND_i386_xen_pvh_TRUE@am__append_4192 = $(nodist_gfxterm_module_SOURCES) +-@COND_i386_xen_pvh_TRUE@am__append_4193 = \ ++@COND_x86_64_xen_TRUE@am__append_4180 = gfxterm.mod ++@COND_x86_64_xen_TRUE@am__append_4181 = gfxterm.marker ++@COND_i386_xen_pvh_TRUE@am__append_4182 = gfxterm.module ++@COND_i386_xen_pvh_TRUE@am__append_4183 = gfxterm.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__append_4184 = ++@COND_i386_xen_pvh_TRUE@am__append_4185 = $(nodist_gfxterm_module_SOURCES) ++@COND_i386_xen_pvh_TRUE@am__append_4186 = \ + @COND_i386_xen_pvh_TRUE@ $(nodist_gfxterm_module_SOURCES) \ + @COND_i386_xen_pvh_TRUE@ gfxterm.marker +-@COND_i386_xen_pvh_TRUE@am__append_4194 = gfxterm.mod +-@COND_i386_xen_pvh_TRUE@am__append_4195 = gfxterm.marker +-@COND_sparc64_ieee1275_TRUE@am__append_4196 = gfxterm.module +-@COND_sparc64_ieee1275_TRUE@am__append_4197 = gfxterm.module$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__append_4198 = +-@COND_sparc64_ieee1275_TRUE@am__append_4199 = $(nodist_gfxterm_module_SOURCES) +-@COND_sparc64_ieee1275_TRUE@am__append_4200 = \ ++@COND_i386_xen_pvh_TRUE@am__append_4187 = gfxterm.mod ++@COND_i386_xen_pvh_TRUE@am__append_4188 = gfxterm.marker ++@COND_sparc64_ieee1275_TRUE@am__append_4189 = gfxterm.module ++@COND_sparc64_ieee1275_TRUE@am__append_4190 = gfxterm.module$(EXEEXT) ++@COND_sparc64_ieee1275_TRUE@am__append_4191 = ++@COND_sparc64_ieee1275_TRUE@am__append_4192 = $(nodist_gfxterm_module_SOURCES) ++@COND_sparc64_ieee1275_TRUE@am__append_4193 = \ + @COND_sparc64_ieee1275_TRUE@ $(nodist_gfxterm_module_SOURCES) \ + @COND_sparc64_ieee1275_TRUE@ gfxterm.marker +-@COND_sparc64_ieee1275_TRUE@am__append_4201 = gfxterm.mod +-@COND_sparc64_ieee1275_TRUE@am__append_4202 = gfxterm.marker +-@COND_powerpc_ieee1275_TRUE@am__append_4203 = gfxterm.module +-@COND_powerpc_ieee1275_TRUE@am__append_4204 = gfxterm.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__append_4205 = +-@COND_powerpc_ieee1275_TRUE@am__append_4206 = $(nodist_gfxterm_module_SOURCES) +-@COND_powerpc_ieee1275_TRUE@am__append_4207 = \ ++@COND_sparc64_ieee1275_TRUE@am__append_4194 = gfxterm.mod ++@COND_sparc64_ieee1275_TRUE@am__append_4195 = gfxterm.marker ++@COND_powerpc_ieee1275_TRUE@am__append_4196 = gfxterm.module ++@COND_powerpc_ieee1275_TRUE@am__append_4197 = gfxterm.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__append_4198 = ++@COND_powerpc_ieee1275_TRUE@am__append_4199 = $(nodist_gfxterm_module_SOURCES) ++@COND_powerpc_ieee1275_TRUE@am__append_4200 = \ + @COND_powerpc_ieee1275_TRUE@ $(nodist_gfxterm_module_SOURCES) \ + @COND_powerpc_ieee1275_TRUE@ gfxterm.marker +-@COND_powerpc_ieee1275_TRUE@am__append_4208 = gfxterm.mod +-@COND_powerpc_ieee1275_TRUE@am__append_4209 = gfxterm.marker +-@COND_mips_arc_TRUE@am__append_4210 = gfxterm.module +-@COND_mips_arc_TRUE@am__append_4211 = gfxterm.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__append_4212 = +-@COND_mips_arc_TRUE@am__append_4213 = $(nodist_gfxterm_module_SOURCES) +-@COND_mips_arc_TRUE@am__append_4214 = \ ++@COND_powerpc_ieee1275_TRUE@am__append_4201 = gfxterm.mod ++@COND_powerpc_ieee1275_TRUE@am__append_4202 = gfxterm.marker ++@COND_mips_arc_TRUE@am__append_4203 = gfxterm.module ++@COND_mips_arc_TRUE@am__append_4204 = gfxterm.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__append_4205 = ++@COND_mips_arc_TRUE@am__append_4206 = $(nodist_gfxterm_module_SOURCES) ++@COND_mips_arc_TRUE@am__append_4207 = \ + @COND_mips_arc_TRUE@ $(nodist_gfxterm_module_SOURCES) \ + @COND_mips_arc_TRUE@ gfxterm.marker +-@COND_mips_arc_TRUE@am__append_4215 = gfxterm.mod +-@COND_mips_arc_TRUE@am__append_4216 = gfxterm.marker +-@COND_ia64_efi_TRUE@am__append_4217 = gfxterm.module +-@COND_ia64_efi_TRUE@am__append_4218 = gfxterm.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__append_4219 = +-@COND_ia64_efi_TRUE@am__append_4220 = $(nodist_gfxterm_module_SOURCES) +-@COND_ia64_efi_TRUE@am__append_4221 = \ ++@COND_mips_arc_TRUE@am__append_4208 = gfxterm.mod ++@COND_mips_arc_TRUE@am__append_4209 = gfxterm.marker ++@COND_ia64_efi_TRUE@am__append_4210 = gfxterm.module ++@COND_ia64_efi_TRUE@am__append_4211 = gfxterm.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__append_4212 = ++@COND_ia64_efi_TRUE@am__append_4213 = $(nodist_gfxterm_module_SOURCES) ++@COND_ia64_efi_TRUE@am__append_4214 = \ + @COND_ia64_efi_TRUE@ $(nodist_gfxterm_module_SOURCES) \ + @COND_ia64_efi_TRUE@ gfxterm.marker +-@COND_ia64_efi_TRUE@am__append_4222 = gfxterm.mod +-@COND_ia64_efi_TRUE@am__append_4223 = gfxterm.marker +-@COND_mips_qemu_mips_TRUE@am__append_4224 = gfxterm.module +-@COND_mips_qemu_mips_TRUE@am__append_4225 = gfxterm.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__append_4226 = +-@COND_mips_qemu_mips_TRUE@am__append_4227 = $(nodist_gfxterm_module_SOURCES) +-@COND_mips_qemu_mips_TRUE@am__append_4228 = \ ++@COND_ia64_efi_TRUE@am__append_4215 = gfxterm.mod ++@COND_ia64_efi_TRUE@am__append_4216 = gfxterm.marker ++@COND_mips_qemu_mips_TRUE@am__append_4217 = gfxterm.module ++@COND_mips_qemu_mips_TRUE@am__append_4218 = gfxterm.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__append_4219 = ++@COND_mips_qemu_mips_TRUE@am__append_4220 = $(nodist_gfxterm_module_SOURCES) ++@COND_mips_qemu_mips_TRUE@am__append_4221 = \ + @COND_mips_qemu_mips_TRUE@ $(nodist_gfxterm_module_SOURCES) \ + @COND_mips_qemu_mips_TRUE@ gfxterm.marker +-@COND_mips_qemu_mips_TRUE@am__append_4229 = gfxterm.mod +-@COND_mips_qemu_mips_TRUE@am__append_4230 = gfxterm.marker +-@COND_arm_uboot_TRUE@am__append_4231 = gfxterm.module +-@COND_arm_uboot_TRUE@am__append_4232 = gfxterm.module$(EXEEXT) +-@COND_arm_uboot_TRUE@am__append_4233 = +-@COND_arm_uboot_TRUE@am__append_4234 = $(nodist_gfxterm_module_SOURCES) +-@COND_arm_uboot_TRUE@am__append_4235 = \ ++@COND_mips_qemu_mips_TRUE@am__append_4222 = gfxterm.mod ++@COND_mips_qemu_mips_TRUE@am__append_4223 = gfxterm.marker ++@COND_arm_uboot_TRUE@am__append_4224 = gfxterm.module ++@COND_arm_uboot_TRUE@am__append_4225 = gfxterm.module$(EXEEXT) ++@COND_arm_uboot_TRUE@am__append_4226 = ++@COND_arm_uboot_TRUE@am__append_4227 = $(nodist_gfxterm_module_SOURCES) ++@COND_arm_uboot_TRUE@am__append_4228 = \ + @COND_arm_uboot_TRUE@ $(nodist_gfxterm_module_SOURCES) \ + @COND_arm_uboot_TRUE@ gfxterm.marker +-@COND_arm_uboot_TRUE@am__append_4236 = gfxterm.mod +-@COND_arm_uboot_TRUE@am__append_4237 = gfxterm.marker +-@COND_arm_efi_TRUE@am__append_4238 = gfxterm.module +-@COND_arm_efi_TRUE@am__append_4239 = gfxterm.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__append_4240 = +-@COND_arm_efi_TRUE@am__append_4241 = $(nodist_gfxterm_module_SOURCES) +-@COND_arm_efi_TRUE@am__append_4242 = $(nodist_gfxterm_module_SOURCES) \ ++@COND_arm_uboot_TRUE@am__append_4229 = gfxterm.mod ++@COND_arm_uboot_TRUE@am__append_4230 = gfxterm.marker ++@COND_arm_efi_TRUE@am__append_4231 = gfxterm.module ++@COND_arm_efi_TRUE@am__append_4232 = gfxterm.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__append_4233 = ++@COND_arm_efi_TRUE@am__append_4234 = $(nodist_gfxterm_module_SOURCES) ++@COND_arm_efi_TRUE@am__append_4235 = $(nodist_gfxterm_module_SOURCES) \ + @COND_arm_efi_TRUE@ gfxterm.marker +-@COND_arm_efi_TRUE@am__append_4243 = gfxterm.mod +-@COND_arm_efi_TRUE@am__append_4244 = gfxterm.marker +-@COND_arm64_efi_TRUE@am__append_4245 = gfxterm.module +-@COND_arm64_efi_TRUE@am__append_4246 = gfxterm.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__append_4247 = +-@COND_arm64_efi_TRUE@am__append_4248 = $(nodist_gfxterm_module_SOURCES) +-@COND_arm64_efi_TRUE@am__append_4249 = \ ++@COND_arm_efi_TRUE@am__append_4236 = gfxterm.mod ++@COND_arm_efi_TRUE@am__append_4237 = gfxterm.marker ++@COND_arm64_efi_TRUE@am__append_4238 = gfxterm.module ++@COND_arm64_efi_TRUE@am__append_4239 = gfxterm.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__append_4240 = ++@COND_arm64_efi_TRUE@am__append_4241 = $(nodist_gfxterm_module_SOURCES) ++@COND_arm64_efi_TRUE@am__append_4242 = \ + @COND_arm64_efi_TRUE@ $(nodist_gfxterm_module_SOURCES) \ + @COND_arm64_efi_TRUE@ gfxterm.marker +-@COND_arm64_efi_TRUE@am__append_4250 = gfxterm.mod +-@COND_arm64_efi_TRUE@am__append_4251 = gfxterm.marker +-@COND_riscv32_efi_TRUE@am__append_4252 = gfxterm.module +-@COND_riscv32_efi_TRUE@am__append_4253 = gfxterm.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__append_4254 = +-@COND_riscv32_efi_TRUE@am__append_4255 = $(nodist_gfxterm_module_SOURCES) +-@COND_riscv32_efi_TRUE@am__append_4256 = \ ++@COND_arm64_efi_TRUE@am__append_4243 = gfxterm.mod ++@COND_arm64_efi_TRUE@am__append_4244 = gfxterm.marker ++@COND_riscv32_efi_TRUE@am__append_4245 = gfxterm.module ++@COND_riscv32_efi_TRUE@am__append_4246 = gfxterm.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__append_4247 = ++@COND_riscv32_efi_TRUE@am__append_4248 = $(nodist_gfxterm_module_SOURCES) ++@COND_riscv32_efi_TRUE@am__append_4249 = \ + @COND_riscv32_efi_TRUE@ $(nodist_gfxterm_module_SOURCES) \ + @COND_riscv32_efi_TRUE@ gfxterm.marker +-@COND_riscv32_efi_TRUE@am__append_4257 = gfxterm.mod +-@COND_riscv32_efi_TRUE@am__append_4258 = gfxterm.marker +-@COND_riscv64_efi_TRUE@am__append_4259 = gfxterm.module +-@COND_riscv64_efi_TRUE@am__append_4260 = gfxterm.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__append_4261 = +-@COND_riscv64_efi_TRUE@am__append_4262 = $(nodist_gfxterm_module_SOURCES) +-@COND_riscv64_efi_TRUE@am__append_4263 = \ ++@COND_riscv32_efi_TRUE@am__append_4250 = gfxterm.mod ++@COND_riscv32_efi_TRUE@am__append_4251 = gfxterm.marker ++@COND_riscv64_efi_TRUE@am__append_4252 = gfxterm.module ++@COND_riscv64_efi_TRUE@am__append_4253 = gfxterm.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_4254 = ++@COND_riscv64_efi_TRUE@am__append_4255 = $(nodist_gfxterm_module_SOURCES) ++@COND_riscv64_efi_TRUE@am__append_4256 = \ + @COND_riscv64_efi_TRUE@ $(nodist_gfxterm_module_SOURCES) \ + @COND_riscv64_efi_TRUE@ gfxterm.marker +-@COND_riscv64_efi_TRUE@am__append_4264 = gfxterm.mod +-@COND_riscv64_efi_TRUE@am__append_4265 = gfxterm.marker +-@COND_i386_pc_TRUE@am__append_4266 = serial.module +-@COND_i386_pc_TRUE@am__append_4267 = serial.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_4257 = gfxterm.mod ++@COND_riscv64_efi_TRUE@am__append_4258 = gfxterm.marker ++@COND_i386_pc_TRUE@am__append_4259 = serial.module ++@COND_i386_pc_TRUE@am__append_4260 = serial.module$(EXEEXT) + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@serial_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_4268 = +-@COND_i386_pc_TRUE@am__append_4269 = $(nodist_serial_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_4270 = $(nodist_serial_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_4261 = ++@COND_i386_pc_TRUE@am__append_4262 = $(nodist_serial_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_4263 = $(nodist_serial_module_SOURCES) \ + @COND_i386_pc_TRUE@ serial.marker +-@COND_i386_pc_TRUE@am__append_4271 = serial.mod +-@COND_i386_pc_TRUE@am__append_4272 = serial.marker +-@COND_i386_efi_TRUE@am__append_4273 = serial.module +-@COND_i386_efi_TRUE@am__append_4274 = serial.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_4275 = +-@COND_i386_efi_TRUE@am__append_4276 = $(nodist_serial_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_4277 = $(nodist_serial_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_4264 = serial.mod ++@COND_i386_pc_TRUE@am__append_4265 = serial.marker ++@COND_i386_efi_TRUE@am__append_4266 = serial.module ++@COND_i386_efi_TRUE@am__append_4267 = serial.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_4268 = ++@COND_i386_efi_TRUE@am__append_4269 = $(nodist_serial_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_4270 = $(nodist_serial_module_SOURCES) \ + @COND_i386_efi_TRUE@ serial.marker +-@COND_i386_efi_TRUE@am__append_4278 = serial.mod +-@COND_i386_efi_TRUE@am__append_4279 = serial.marker +-@COND_i386_qemu_TRUE@am__append_4280 = serial.module +-@COND_i386_qemu_TRUE@am__append_4281 = serial.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_4282 = +-@COND_i386_qemu_TRUE@am__append_4283 = $(nodist_serial_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_4284 = \ ++@COND_i386_efi_TRUE@am__append_4271 = serial.mod ++@COND_i386_efi_TRUE@am__append_4272 = serial.marker ++@COND_i386_qemu_TRUE@am__append_4273 = serial.module ++@COND_i386_qemu_TRUE@am__append_4274 = serial.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_4275 = ++@COND_i386_qemu_TRUE@am__append_4276 = $(nodist_serial_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_4277 = \ + @COND_i386_qemu_TRUE@ $(nodist_serial_module_SOURCES) \ + @COND_i386_qemu_TRUE@ serial.marker +-@COND_i386_qemu_TRUE@am__append_4285 = serial.mod +-@COND_i386_qemu_TRUE@am__append_4286 = serial.marker +-@COND_i386_coreboot_TRUE@am__append_4287 = serial.module +-@COND_i386_coreboot_TRUE@am__append_4288 = serial.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_4289 = +-@COND_i386_coreboot_TRUE@am__append_4290 = $(nodist_serial_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_4291 = \ ++@COND_i386_qemu_TRUE@am__append_4278 = serial.mod ++@COND_i386_qemu_TRUE@am__append_4279 = serial.marker ++@COND_i386_coreboot_TRUE@am__append_4280 = serial.module ++@COND_i386_coreboot_TRUE@am__append_4281 = serial.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_4282 = ++@COND_i386_coreboot_TRUE@am__append_4283 = $(nodist_serial_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_4284 = \ + @COND_i386_coreboot_TRUE@ $(nodist_serial_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ serial.marker +-@COND_i386_coreboot_TRUE@am__append_4292 = serial.mod +-@COND_i386_coreboot_TRUE@am__append_4293 = serial.marker +-@COND_i386_multiboot_TRUE@am__append_4294 = serial.module +-@COND_i386_multiboot_TRUE@am__append_4295 = serial.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_4296 = +-@COND_i386_multiboot_TRUE@am__append_4297 = $(nodist_serial_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_4298 = \ ++@COND_i386_coreboot_TRUE@am__append_4285 = serial.mod ++@COND_i386_coreboot_TRUE@am__append_4286 = serial.marker ++@COND_i386_multiboot_TRUE@am__append_4287 = serial.module ++@COND_i386_multiboot_TRUE@am__append_4288 = serial.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_4289 = ++@COND_i386_multiboot_TRUE@am__append_4290 = $(nodist_serial_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_4291 = \ + @COND_i386_multiboot_TRUE@ $(nodist_serial_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ serial.marker +-@COND_i386_multiboot_TRUE@am__append_4299 = serial.mod +-@COND_i386_multiboot_TRUE@am__append_4300 = serial.marker +-@COND_i386_ieee1275_TRUE@am__append_4301 = serial.module +-@COND_i386_ieee1275_TRUE@am__append_4302 = serial.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_4303 = +-@COND_i386_ieee1275_TRUE@am__append_4304 = $(nodist_serial_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_4305 = \ ++@COND_i386_multiboot_TRUE@am__append_4292 = serial.mod ++@COND_i386_multiboot_TRUE@am__append_4293 = serial.marker ++@COND_i386_ieee1275_TRUE@am__append_4294 = serial.module ++@COND_i386_ieee1275_TRUE@am__append_4295 = serial.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_4296 = ++@COND_i386_ieee1275_TRUE@am__append_4297 = $(nodist_serial_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_4298 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_serial_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ serial.marker +-@COND_i386_ieee1275_TRUE@am__append_4306 = serial.mod +-@COND_i386_ieee1275_TRUE@am__append_4307 = serial.marker +-@COND_x86_64_efi_TRUE@am__append_4308 = serial.module +-@COND_x86_64_efi_TRUE@am__append_4309 = serial.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_4310 = +-@COND_x86_64_efi_TRUE@am__append_4311 = $(nodist_serial_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_4312 = \ ++@COND_i386_ieee1275_TRUE@am__append_4299 = serial.mod ++@COND_i386_ieee1275_TRUE@am__append_4300 = serial.marker ++@COND_x86_64_efi_TRUE@am__append_4301 = serial.module ++@COND_x86_64_efi_TRUE@am__append_4302 = serial.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_4303 = ++@COND_x86_64_efi_TRUE@am__append_4304 = $(nodist_serial_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_4305 = \ + @COND_x86_64_efi_TRUE@ $(nodist_serial_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ serial.marker +-@COND_x86_64_efi_TRUE@am__append_4313 = serial.mod +-@COND_x86_64_efi_TRUE@am__append_4314 = serial.marker +-@COND_sparc64_ieee1275_TRUE@am__append_4315 = serial.module +-@COND_sparc64_ieee1275_TRUE@am__append_4316 = serial.module$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__append_4317 = +-@COND_sparc64_ieee1275_TRUE@am__append_4318 = $(nodist_serial_module_SOURCES) +-@COND_sparc64_ieee1275_TRUE@am__append_4319 = \ ++@COND_x86_64_efi_TRUE@am__append_4306 = serial.mod ++@COND_x86_64_efi_TRUE@am__append_4307 = serial.marker ++@COND_sparc64_ieee1275_TRUE@am__append_4308 = serial.module ++@COND_sparc64_ieee1275_TRUE@am__append_4309 = serial.module$(EXEEXT) ++@COND_sparc64_ieee1275_TRUE@am__append_4310 = ++@COND_sparc64_ieee1275_TRUE@am__append_4311 = $(nodist_serial_module_SOURCES) ++@COND_sparc64_ieee1275_TRUE@am__append_4312 = \ + @COND_sparc64_ieee1275_TRUE@ $(nodist_serial_module_SOURCES) \ + @COND_sparc64_ieee1275_TRUE@ serial.marker +-@COND_sparc64_ieee1275_TRUE@am__append_4320 = serial.mod +-@COND_sparc64_ieee1275_TRUE@am__append_4321 = serial.marker +-@COND_powerpc_ieee1275_TRUE@am__append_4322 = serial.module +-@COND_powerpc_ieee1275_TRUE@am__append_4323 = serial.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__append_4324 = +-@COND_powerpc_ieee1275_TRUE@am__append_4325 = $(nodist_serial_module_SOURCES) +-@COND_powerpc_ieee1275_TRUE@am__append_4326 = \ ++@COND_sparc64_ieee1275_TRUE@am__append_4313 = serial.mod ++@COND_sparc64_ieee1275_TRUE@am__append_4314 = serial.marker ++@COND_powerpc_ieee1275_TRUE@am__append_4315 = serial.module ++@COND_powerpc_ieee1275_TRUE@am__append_4316 = serial.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__append_4317 = ++@COND_powerpc_ieee1275_TRUE@am__append_4318 = $(nodist_serial_module_SOURCES) ++@COND_powerpc_ieee1275_TRUE@am__append_4319 = \ + @COND_powerpc_ieee1275_TRUE@ $(nodist_serial_module_SOURCES) \ + @COND_powerpc_ieee1275_TRUE@ serial.marker +-@COND_powerpc_ieee1275_TRUE@am__append_4327 = serial.mod +-@COND_powerpc_ieee1275_TRUE@am__append_4328 = serial.marker +-@COND_mips_arc_TRUE@am__append_4329 = serial.module +-@COND_mips_arc_TRUE@am__append_4330 = serial.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__append_4331 = +-@COND_mips_arc_TRUE@am__append_4332 = $(nodist_serial_module_SOURCES) +-@COND_mips_arc_TRUE@am__append_4333 = $(nodist_serial_module_SOURCES) \ ++@COND_powerpc_ieee1275_TRUE@am__append_4320 = serial.mod ++@COND_powerpc_ieee1275_TRUE@am__append_4321 = serial.marker ++@COND_mips_arc_TRUE@am__append_4322 = serial.module ++@COND_mips_arc_TRUE@am__append_4323 = serial.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__append_4324 = ++@COND_mips_arc_TRUE@am__append_4325 = $(nodist_serial_module_SOURCES) ++@COND_mips_arc_TRUE@am__append_4326 = $(nodist_serial_module_SOURCES) \ + @COND_mips_arc_TRUE@ serial.marker +-@COND_mips_arc_TRUE@am__append_4334 = serial.mod +-@COND_mips_arc_TRUE@am__append_4335 = serial.marker +-@COND_ia64_efi_TRUE@am__append_4336 = serial.module +-@COND_ia64_efi_TRUE@am__append_4337 = serial.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__append_4338 = +-@COND_ia64_efi_TRUE@am__append_4339 = $(nodist_serial_module_SOURCES) +-@COND_ia64_efi_TRUE@am__append_4340 = $(nodist_serial_module_SOURCES) \ ++@COND_mips_arc_TRUE@am__append_4327 = serial.mod ++@COND_mips_arc_TRUE@am__append_4328 = serial.marker ++@COND_ia64_efi_TRUE@am__append_4329 = serial.module ++@COND_ia64_efi_TRUE@am__append_4330 = serial.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__append_4331 = ++@COND_ia64_efi_TRUE@am__append_4332 = $(nodist_serial_module_SOURCES) ++@COND_ia64_efi_TRUE@am__append_4333 = $(nodist_serial_module_SOURCES) \ + @COND_ia64_efi_TRUE@ serial.marker +-@COND_ia64_efi_TRUE@am__append_4341 = serial.mod +-@COND_ia64_efi_TRUE@am__append_4342 = serial.marker +-@COND_arm_efi_TRUE@am__append_4343 = serial.module +-@COND_arm_efi_TRUE@am__append_4344 = serial.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__append_4345 = +-@COND_arm_efi_TRUE@am__append_4346 = $(nodist_serial_module_SOURCES) +-@COND_arm_efi_TRUE@am__append_4347 = $(nodist_serial_module_SOURCES) \ ++@COND_ia64_efi_TRUE@am__append_4334 = serial.mod ++@COND_ia64_efi_TRUE@am__append_4335 = serial.marker ++@COND_arm_efi_TRUE@am__append_4336 = serial.module ++@COND_arm_efi_TRUE@am__append_4337 = serial.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__append_4338 = ++@COND_arm_efi_TRUE@am__append_4339 = $(nodist_serial_module_SOURCES) ++@COND_arm_efi_TRUE@am__append_4340 = $(nodist_serial_module_SOURCES) \ + @COND_arm_efi_TRUE@ serial.marker +-@COND_arm_efi_TRUE@am__append_4348 = serial.mod +-@COND_arm_efi_TRUE@am__append_4349 = serial.marker +-@COND_arm64_efi_TRUE@am__append_4350 = serial.module +-@COND_arm64_efi_TRUE@am__append_4351 = serial.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__append_4352 = +-@COND_arm64_efi_TRUE@am__append_4353 = $(nodist_serial_module_SOURCES) +-@COND_arm64_efi_TRUE@am__append_4354 = \ ++@COND_arm_efi_TRUE@am__append_4341 = serial.mod ++@COND_arm_efi_TRUE@am__append_4342 = serial.marker ++@COND_arm64_efi_TRUE@am__append_4343 = serial.module ++@COND_arm64_efi_TRUE@am__append_4344 = serial.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__append_4345 = ++@COND_arm64_efi_TRUE@am__append_4346 = $(nodist_serial_module_SOURCES) ++@COND_arm64_efi_TRUE@am__append_4347 = \ + @COND_arm64_efi_TRUE@ $(nodist_serial_module_SOURCES) \ + @COND_arm64_efi_TRUE@ serial.marker +-@COND_arm64_efi_TRUE@am__append_4355 = serial.mod +-@COND_arm64_efi_TRUE@am__append_4356 = serial.marker +-@COND_arm_coreboot_TRUE@am__append_4357 = serial.module +-@COND_arm_coreboot_TRUE@am__append_4358 = serial.module$(EXEEXT) +-@COND_arm_coreboot_TRUE@am__append_4359 = +-@COND_arm_coreboot_TRUE@am__append_4360 = $(nodist_serial_module_SOURCES) +-@COND_arm_coreboot_TRUE@am__append_4361 = \ ++@COND_arm64_efi_TRUE@am__append_4348 = serial.mod ++@COND_arm64_efi_TRUE@am__append_4349 = serial.marker ++@COND_arm_coreboot_TRUE@am__append_4350 = serial.module ++@COND_arm_coreboot_TRUE@am__append_4351 = serial.module$(EXEEXT) ++@COND_arm_coreboot_TRUE@am__append_4352 = ++@COND_arm_coreboot_TRUE@am__append_4353 = $(nodist_serial_module_SOURCES) ++@COND_arm_coreboot_TRUE@am__append_4354 = \ + @COND_arm_coreboot_TRUE@ $(nodist_serial_module_SOURCES) \ + @COND_arm_coreboot_TRUE@ serial.marker +-@COND_arm_coreboot_TRUE@am__append_4362 = serial.mod +-@COND_arm_coreboot_TRUE@am__append_4363 = serial.marker +-@COND_riscv32_efi_TRUE@am__append_4364 = serial.module +-@COND_riscv32_efi_TRUE@am__append_4365 = serial.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__append_4366 = +-@COND_riscv32_efi_TRUE@am__append_4367 = $(nodist_serial_module_SOURCES) +-@COND_riscv32_efi_TRUE@am__append_4368 = \ ++@COND_arm_coreboot_TRUE@am__append_4355 = serial.mod ++@COND_arm_coreboot_TRUE@am__append_4356 = serial.marker ++@COND_riscv32_efi_TRUE@am__append_4357 = serial.module ++@COND_riscv32_efi_TRUE@am__append_4358 = serial.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__append_4359 = ++@COND_riscv32_efi_TRUE@am__append_4360 = $(nodist_serial_module_SOURCES) ++@COND_riscv32_efi_TRUE@am__append_4361 = \ + @COND_riscv32_efi_TRUE@ $(nodist_serial_module_SOURCES) \ + @COND_riscv32_efi_TRUE@ serial.marker +-@COND_riscv32_efi_TRUE@am__append_4369 = serial.mod +-@COND_riscv32_efi_TRUE@am__append_4370 = serial.marker +-@COND_riscv64_efi_TRUE@am__append_4371 = serial.module +-@COND_riscv64_efi_TRUE@am__append_4372 = serial.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__append_4373 = +-@COND_riscv64_efi_TRUE@am__append_4374 = $(nodist_serial_module_SOURCES) +-@COND_riscv64_efi_TRUE@am__append_4375 = \ ++@COND_riscv32_efi_TRUE@am__append_4362 = serial.mod ++@COND_riscv32_efi_TRUE@am__append_4363 = serial.marker ++@COND_riscv64_efi_TRUE@am__append_4364 = serial.module ++@COND_riscv64_efi_TRUE@am__append_4365 = serial.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_4366 = ++@COND_riscv64_efi_TRUE@am__append_4367 = $(nodist_serial_module_SOURCES) ++@COND_riscv64_efi_TRUE@am__append_4368 = \ + @COND_riscv64_efi_TRUE@ $(nodist_serial_module_SOURCES) \ + @COND_riscv64_efi_TRUE@ serial.marker +-@COND_riscv64_efi_TRUE@am__append_4376 = serial.mod +-@COND_riscv64_efi_TRUE@am__append_4377 = serial.marker +-@COND_i386_pc_TRUE@am__append_4378 = sendkey.module terminfo.module +-@COND_i386_pc_TRUE@am__append_4379 = sendkey.module$(EXEEXT) \ ++@COND_riscv64_efi_TRUE@am__append_4369 = serial.mod ++@COND_riscv64_efi_TRUE@am__append_4370 = serial.marker ++@COND_i386_pc_TRUE@am__append_4371 = sendkey.module terminfo.module ++@COND_i386_pc_TRUE@am__append_4372 = sendkey.module$(EXEEXT) \ + @COND_i386_pc_TRUE@ terminfo.module$(EXEEXT) + @COND_i386_pc_FALSE@sendkey_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_4380 = +-@COND_i386_pc_TRUE@am__append_4381 = $(nodist_sendkey_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_4373 = ++@COND_i386_pc_TRUE@am__append_4374 = $(nodist_sendkey_module_SOURCES) \ + @COND_i386_pc_TRUE@ $(nodist_terminfo_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_4382 = $(nodist_sendkey_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_4375 = $(nodist_sendkey_module_SOURCES) \ + @COND_i386_pc_TRUE@ sendkey.marker \ + @COND_i386_pc_TRUE@ $(nodist_terminfo_module_SOURCES) \ + @COND_i386_pc_TRUE@ terminfo.marker +-@COND_i386_pc_TRUE@am__append_4383 = sendkey.mod terminfo.mod +-@COND_i386_pc_TRUE@am__append_4384 = sendkey.marker terminfo.marker ++@COND_i386_pc_TRUE@am__append_4376 = sendkey.mod terminfo.mod ++@COND_i386_pc_TRUE@am__append_4377 = sendkey.marker terminfo.marker + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_x86_64_efi_FALSE@terminfo_module_DEPENDENCIES = +-@COND_i386_efi_TRUE@am__append_4385 = terminfo.module +-@COND_i386_efi_TRUE@am__append_4386 = terminfo.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_4387 = +-@COND_i386_efi_TRUE@am__append_4388 = $(nodist_terminfo_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_4389 = \ ++@COND_i386_efi_TRUE@am__append_4378 = terminfo.module ++@COND_i386_efi_TRUE@am__append_4379 = terminfo.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_4380 = ++@COND_i386_efi_TRUE@am__append_4381 = $(nodist_terminfo_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_4382 = \ + @COND_i386_efi_TRUE@ $(nodist_terminfo_module_SOURCES) \ + @COND_i386_efi_TRUE@ terminfo.marker +-@COND_i386_efi_TRUE@am__append_4390 = terminfo.mod +-@COND_i386_efi_TRUE@am__append_4391 = terminfo.marker +-@COND_i386_qemu_TRUE@am__append_4392 = terminfo.module +-@COND_i386_qemu_TRUE@am__append_4393 = terminfo.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_4394 = +-@COND_i386_qemu_TRUE@am__append_4395 = $(nodist_terminfo_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_4396 = \ ++@COND_i386_efi_TRUE@am__append_4383 = terminfo.mod ++@COND_i386_efi_TRUE@am__append_4384 = terminfo.marker ++@COND_i386_qemu_TRUE@am__append_4385 = terminfo.module ++@COND_i386_qemu_TRUE@am__append_4386 = terminfo.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_4387 = ++@COND_i386_qemu_TRUE@am__append_4388 = $(nodist_terminfo_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_4389 = \ + @COND_i386_qemu_TRUE@ $(nodist_terminfo_module_SOURCES) \ + @COND_i386_qemu_TRUE@ terminfo.marker +-@COND_i386_qemu_TRUE@am__append_4397 = terminfo.mod +-@COND_i386_qemu_TRUE@am__append_4398 = terminfo.marker +-@COND_i386_coreboot_TRUE@am__append_4399 = terminfo.module +-@COND_i386_coreboot_TRUE@am__append_4400 = terminfo.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_4401 = +-@COND_i386_coreboot_TRUE@am__append_4402 = $(nodist_terminfo_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_4403 = \ ++@COND_i386_qemu_TRUE@am__append_4390 = terminfo.mod ++@COND_i386_qemu_TRUE@am__append_4391 = terminfo.marker ++@COND_i386_coreboot_TRUE@am__append_4392 = terminfo.module ++@COND_i386_coreboot_TRUE@am__append_4393 = terminfo.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_4394 = ++@COND_i386_coreboot_TRUE@am__append_4395 = $(nodist_terminfo_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_4396 = \ + @COND_i386_coreboot_TRUE@ $(nodist_terminfo_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ terminfo.marker +-@COND_i386_coreboot_TRUE@am__append_4404 = terminfo.mod +-@COND_i386_coreboot_TRUE@am__append_4405 = terminfo.marker +-@COND_i386_multiboot_TRUE@am__append_4406 = terminfo.module +-@COND_i386_multiboot_TRUE@am__append_4407 = terminfo.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_4408 = +-@COND_i386_multiboot_TRUE@am__append_4409 = $(nodist_terminfo_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_4410 = \ ++@COND_i386_coreboot_TRUE@am__append_4397 = terminfo.mod ++@COND_i386_coreboot_TRUE@am__append_4398 = terminfo.marker ++@COND_i386_multiboot_TRUE@am__append_4399 = terminfo.module ++@COND_i386_multiboot_TRUE@am__append_4400 = terminfo.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_4401 = ++@COND_i386_multiboot_TRUE@am__append_4402 = $(nodist_terminfo_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_4403 = \ + @COND_i386_multiboot_TRUE@ $(nodist_terminfo_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ terminfo.marker +-@COND_i386_multiboot_TRUE@am__append_4411 = terminfo.mod +-@COND_i386_multiboot_TRUE@am__append_4412 = terminfo.marker +-@COND_x86_64_efi_TRUE@am__append_4413 = terminfo.module +-@COND_x86_64_efi_TRUE@am__append_4414 = terminfo.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_4415 = +-@COND_x86_64_efi_TRUE@am__append_4416 = $(nodist_terminfo_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_4417 = \ ++@COND_i386_multiboot_TRUE@am__append_4404 = terminfo.mod ++@COND_i386_multiboot_TRUE@am__append_4405 = terminfo.marker ++@COND_x86_64_efi_TRUE@am__append_4406 = terminfo.module ++@COND_x86_64_efi_TRUE@am__append_4407 = terminfo.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_4408 = ++@COND_x86_64_efi_TRUE@am__append_4409 = $(nodist_terminfo_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_4410 = \ + @COND_x86_64_efi_TRUE@ $(nodist_terminfo_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ terminfo.marker +-@COND_x86_64_efi_TRUE@am__append_4418 = terminfo.mod +-@COND_x86_64_efi_TRUE@am__append_4419 = terminfo.marker +-@COND_ia64_efi_TRUE@am__append_4420 = terminfo.module +-@COND_ia64_efi_TRUE@am__append_4421 = terminfo.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__append_4422 = +-@COND_ia64_efi_TRUE@am__append_4423 = $(nodist_terminfo_module_SOURCES) +-@COND_ia64_efi_TRUE@am__append_4424 = \ ++@COND_x86_64_efi_TRUE@am__append_4411 = terminfo.mod ++@COND_x86_64_efi_TRUE@am__append_4412 = terminfo.marker ++@COND_ia64_efi_TRUE@am__append_4413 = terminfo.module ++@COND_ia64_efi_TRUE@am__append_4414 = terminfo.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__append_4415 = ++@COND_ia64_efi_TRUE@am__append_4416 = $(nodist_terminfo_module_SOURCES) ++@COND_ia64_efi_TRUE@am__append_4417 = \ + @COND_ia64_efi_TRUE@ $(nodist_terminfo_module_SOURCES) \ + @COND_ia64_efi_TRUE@ terminfo.marker +-@COND_ia64_efi_TRUE@am__append_4425 = terminfo.mod +-@COND_ia64_efi_TRUE@am__append_4426 = terminfo.marker +-@COND_arm_efi_TRUE@am__append_4427 = terminfo.module +-@COND_arm_efi_TRUE@am__append_4428 = terminfo.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__append_4429 = +-@COND_arm_efi_TRUE@am__append_4430 = $(nodist_terminfo_module_SOURCES) +-@COND_arm_efi_TRUE@am__append_4431 = \ ++@COND_ia64_efi_TRUE@am__append_4418 = terminfo.mod ++@COND_ia64_efi_TRUE@am__append_4419 = terminfo.marker ++@COND_arm_efi_TRUE@am__append_4420 = terminfo.module ++@COND_arm_efi_TRUE@am__append_4421 = terminfo.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__append_4422 = ++@COND_arm_efi_TRUE@am__append_4423 = $(nodist_terminfo_module_SOURCES) ++@COND_arm_efi_TRUE@am__append_4424 = \ + @COND_arm_efi_TRUE@ $(nodist_terminfo_module_SOURCES) \ + @COND_arm_efi_TRUE@ terminfo.marker +-@COND_arm_efi_TRUE@am__append_4432 = terminfo.mod +-@COND_arm_efi_TRUE@am__append_4433 = terminfo.marker +-@COND_arm64_efi_TRUE@am__append_4434 = terminfo.module +-@COND_arm64_efi_TRUE@am__append_4435 = terminfo.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__append_4436 = +-@COND_arm64_efi_TRUE@am__append_4437 = $(nodist_terminfo_module_SOURCES) +-@COND_arm64_efi_TRUE@am__append_4438 = \ ++@COND_arm_efi_TRUE@am__append_4425 = terminfo.mod ++@COND_arm_efi_TRUE@am__append_4426 = terminfo.marker ++@COND_arm64_efi_TRUE@am__append_4427 = terminfo.module ++@COND_arm64_efi_TRUE@am__append_4428 = terminfo.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__append_4429 = ++@COND_arm64_efi_TRUE@am__append_4430 = $(nodist_terminfo_module_SOURCES) ++@COND_arm64_efi_TRUE@am__append_4431 = \ + @COND_arm64_efi_TRUE@ $(nodist_terminfo_module_SOURCES) \ + @COND_arm64_efi_TRUE@ terminfo.marker +-@COND_arm64_efi_TRUE@am__append_4439 = terminfo.mod +-@COND_arm64_efi_TRUE@am__append_4440 = terminfo.marker +-@COND_arm_coreboot_TRUE@am__append_4441 = terminfo.module +-@COND_arm_coreboot_TRUE@am__append_4442 = terminfo.module$(EXEEXT) +-@COND_arm_coreboot_TRUE@am__append_4443 = +-@COND_arm_coreboot_TRUE@am__append_4444 = $(nodist_terminfo_module_SOURCES) +-@COND_arm_coreboot_TRUE@am__append_4445 = \ ++@COND_arm64_efi_TRUE@am__append_4432 = terminfo.mod ++@COND_arm64_efi_TRUE@am__append_4433 = terminfo.marker ++@COND_arm_coreboot_TRUE@am__append_4434 = terminfo.module ++@COND_arm_coreboot_TRUE@am__append_4435 = terminfo.module$(EXEEXT) ++@COND_arm_coreboot_TRUE@am__append_4436 = ++@COND_arm_coreboot_TRUE@am__append_4437 = $(nodist_terminfo_module_SOURCES) ++@COND_arm_coreboot_TRUE@am__append_4438 = \ + @COND_arm_coreboot_TRUE@ $(nodist_terminfo_module_SOURCES) \ + @COND_arm_coreboot_TRUE@ terminfo.marker +-@COND_arm_coreboot_TRUE@am__append_4446 = terminfo.mod +-@COND_arm_coreboot_TRUE@am__append_4447 = terminfo.marker +-@COND_riscv32_efi_TRUE@am__append_4448 = terminfo.module +-@COND_riscv32_efi_TRUE@am__append_4449 = terminfo.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__append_4450 = +-@COND_riscv32_efi_TRUE@am__append_4451 = $(nodist_terminfo_module_SOURCES) +-@COND_riscv32_efi_TRUE@am__append_4452 = \ ++@COND_arm_coreboot_TRUE@am__append_4439 = terminfo.mod ++@COND_arm_coreboot_TRUE@am__append_4440 = terminfo.marker ++@COND_riscv32_efi_TRUE@am__append_4441 = terminfo.module ++@COND_riscv32_efi_TRUE@am__append_4442 = terminfo.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__append_4443 = ++@COND_riscv32_efi_TRUE@am__append_4444 = $(nodist_terminfo_module_SOURCES) ++@COND_riscv32_efi_TRUE@am__append_4445 = \ + @COND_riscv32_efi_TRUE@ $(nodist_terminfo_module_SOURCES) \ + @COND_riscv32_efi_TRUE@ terminfo.marker +-@COND_riscv32_efi_TRUE@am__append_4453 = terminfo.mod +-@COND_riscv32_efi_TRUE@am__append_4454 = terminfo.marker +-@COND_riscv64_efi_TRUE@am__append_4455 = terminfo.module +-@COND_riscv64_efi_TRUE@am__append_4456 = terminfo.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__append_4457 = +-@COND_riscv64_efi_TRUE@am__append_4458 = $(nodist_terminfo_module_SOURCES) +-@COND_riscv64_efi_TRUE@am__append_4459 = \ ++@COND_riscv32_efi_TRUE@am__append_4446 = terminfo.mod ++@COND_riscv32_efi_TRUE@am__append_4447 = terminfo.marker ++@COND_riscv64_efi_TRUE@am__append_4448 = terminfo.module ++@COND_riscv64_efi_TRUE@am__append_4449 = terminfo.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_4450 = ++@COND_riscv64_efi_TRUE@am__append_4451 = $(nodist_terminfo_module_SOURCES) ++@COND_riscv64_efi_TRUE@am__append_4452 = \ + @COND_riscv64_efi_TRUE@ $(nodist_terminfo_module_SOURCES) \ + @COND_riscv64_efi_TRUE@ terminfo.marker +-@COND_riscv64_efi_TRUE@am__append_4460 = terminfo.mod +-@COND_riscv64_efi_TRUE@am__append_4461 = terminfo.marker +-@COND_i386_pc_TRUE@am__append_4462 = usb_keyboard.module +-@COND_i386_pc_TRUE@am__append_4463 = usb_keyboard.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_4453 = terminfo.mod ++@COND_riscv64_efi_TRUE@am__append_4454 = terminfo.marker ++@COND_i386_pc_TRUE@am__append_4455 = usb_keyboard.module ++@COND_i386_pc_TRUE@am__append_4456 = usb_keyboard.module$(EXEEXT) + @COND_arm_coreboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_FALSE@usb_keyboard_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_4464 = +-@COND_i386_pc_TRUE@am__append_4465 = $(nodist_usb_keyboard_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_4466 = \ ++@COND_i386_pc_TRUE@am__append_4457 = ++@COND_i386_pc_TRUE@am__append_4458 = $(nodist_usb_keyboard_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_4459 = \ + @COND_i386_pc_TRUE@ $(nodist_usb_keyboard_module_SOURCES) \ + @COND_i386_pc_TRUE@ usb_keyboard.marker +-@COND_i386_pc_TRUE@am__append_4467 = usb_keyboard.mod +-@COND_i386_pc_TRUE@am__append_4468 = usb_keyboard.marker +-@COND_i386_efi_TRUE@am__append_4469 = usb_keyboard.module +-@COND_i386_efi_TRUE@am__append_4470 = usb_keyboard.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_4471 = +-@COND_i386_efi_TRUE@am__append_4472 = $(nodist_usb_keyboard_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_4473 = \ ++@COND_i386_pc_TRUE@am__append_4460 = usb_keyboard.mod ++@COND_i386_pc_TRUE@am__append_4461 = usb_keyboard.marker ++@COND_i386_efi_TRUE@am__append_4462 = usb_keyboard.module ++@COND_i386_efi_TRUE@am__append_4463 = usb_keyboard.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_4464 = ++@COND_i386_efi_TRUE@am__append_4465 = $(nodist_usb_keyboard_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_4466 = \ + @COND_i386_efi_TRUE@ $(nodist_usb_keyboard_module_SOURCES) \ + @COND_i386_efi_TRUE@ usb_keyboard.marker +-@COND_i386_efi_TRUE@am__append_4474 = usb_keyboard.mod +-@COND_i386_efi_TRUE@am__append_4475 = usb_keyboard.marker +-@COND_i386_qemu_TRUE@am__append_4476 = usb_keyboard.module +-@COND_i386_qemu_TRUE@am__append_4477 = usb_keyboard.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_4478 = +-@COND_i386_qemu_TRUE@am__append_4479 = $(nodist_usb_keyboard_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_4480 = \ ++@COND_i386_efi_TRUE@am__append_4467 = usb_keyboard.mod ++@COND_i386_efi_TRUE@am__append_4468 = usb_keyboard.marker ++@COND_i386_qemu_TRUE@am__append_4469 = usb_keyboard.module ++@COND_i386_qemu_TRUE@am__append_4470 = usb_keyboard.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_4471 = ++@COND_i386_qemu_TRUE@am__append_4472 = $(nodist_usb_keyboard_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_4473 = \ + @COND_i386_qemu_TRUE@ $(nodist_usb_keyboard_module_SOURCES) \ + @COND_i386_qemu_TRUE@ usb_keyboard.marker +-@COND_i386_qemu_TRUE@am__append_4481 = usb_keyboard.mod +-@COND_i386_qemu_TRUE@am__append_4482 = usb_keyboard.marker +-@COND_i386_coreboot_TRUE@am__append_4483 = usb_keyboard.module +-@COND_i386_coreboot_TRUE@am__append_4484 = usb_keyboard.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_4485 = +-@COND_i386_coreboot_TRUE@am__append_4486 = $(nodist_usb_keyboard_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_4487 = $(nodist_usb_keyboard_module_SOURCES) \ ++@COND_i386_qemu_TRUE@am__append_4474 = usb_keyboard.mod ++@COND_i386_qemu_TRUE@am__append_4475 = usb_keyboard.marker ++@COND_i386_coreboot_TRUE@am__append_4476 = usb_keyboard.module ++@COND_i386_coreboot_TRUE@am__append_4477 = usb_keyboard.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_4478 = ++@COND_i386_coreboot_TRUE@am__append_4479 = $(nodist_usb_keyboard_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_4480 = $(nodist_usb_keyboard_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ usb_keyboard.marker +-@COND_i386_coreboot_TRUE@am__append_4488 = usb_keyboard.mod +-@COND_i386_coreboot_TRUE@am__append_4489 = usb_keyboard.marker +-@COND_i386_multiboot_TRUE@am__append_4490 = usb_keyboard.module +-@COND_i386_multiboot_TRUE@am__append_4491 = usb_keyboard.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_4492 = +-@COND_i386_multiboot_TRUE@am__append_4493 = $(nodist_usb_keyboard_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_4494 = $(nodist_usb_keyboard_module_SOURCES) \ ++@COND_i386_coreboot_TRUE@am__append_4481 = usb_keyboard.mod ++@COND_i386_coreboot_TRUE@am__append_4482 = usb_keyboard.marker ++@COND_i386_multiboot_TRUE@am__append_4483 = usb_keyboard.module ++@COND_i386_multiboot_TRUE@am__append_4484 = usb_keyboard.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_4485 = ++@COND_i386_multiboot_TRUE@am__append_4486 = $(nodist_usb_keyboard_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_4487 = $(nodist_usb_keyboard_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ usb_keyboard.marker +-@COND_i386_multiboot_TRUE@am__append_4495 = usb_keyboard.mod +-@COND_i386_multiboot_TRUE@am__append_4496 = usb_keyboard.marker +-@COND_i386_ieee1275_TRUE@am__append_4497 = usb_keyboard.module +-@COND_i386_ieee1275_TRUE@am__append_4498 = usb_keyboard.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_4499 = +-@COND_i386_ieee1275_TRUE@am__append_4500 = $(nodist_usb_keyboard_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_4501 = $(nodist_usb_keyboard_module_SOURCES) \ ++@COND_i386_multiboot_TRUE@am__append_4488 = usb_keyboard.mod ++@COND_i386_multiboot_TRUE@am__append_4489 = usb_keyboard.marker ++@COND_i386_ieee1275_TRUE@am__append_4490 = usb_keyboard.module ++@COND_i386_ieee1275_TRUE@am__append_4491 = usb_keyboard.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_4492 = ++@COND_i386_ieee1275_TRUE@am__append_4493 = $(nodist_usb_keyboard_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_4494 = $(nodist_usb_keyboard_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ usb_keyboard.marker +-@COND_i386_ieee1275_TRUE@am__append_4502 = usb_keyboard.mod +-@COND_i386_ieee1275_TRUE@am__append_4503 = usb_keyboard.marker +-@COND_x86_64_efi_TRUE@am__append_4504 = usb_keyboard.module +-@COND_x86_64_efi_TRUE@am__append_4505 = usb_keyboard.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_4506 = +-@COND_x86_64_efi_TRUE@am__append_4507 = $(nodist_usb_keyboard_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_4508 = \ ++@COND_i386_ieee1275_TRUE@am__append_4495 = usb_keyboard.mod ++@COND_i386_ieee1275_TRUE@am__append_4496 = usb_keyboard.marker ++@COND_x86_64_efi_TRUE@am__append_4497 = usb_keyboard.module ++@COND_x86_64_efi_TRUE@am__append_4498 = usb_keyboard.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_4499 = ++@COND_x86_64_efi_TRUE@am__append_4500 = $(nodist_usb_keyboard_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_4501 = \ + @COND_x86_64_efi_TRUE@ $(nodist_usb_keyboard_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ usb_keyboard.marker +-@COND_x86_64_efi_TRUE@am__append_4509 = usb_keyboard.mod +-@COND_x86_64_efi_TRUE@am__append_4510 = usb_keyboard.marker +-@COND_mips_loongson_TRUE@am__append_4511 = usb_keyboard.module +-@COND_mips_loongson_TRUE@am__append_4512 = usb_keyboard.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__append_4513 = +-@COND_mips_loongson_TRUE@am__append_4514 = $(nodist_usb_keyboard_module_SOURCES) +-@COND_mips_loongson_TRUE@am__append_4515 = $(nodist_usb_keyboard_module_SOURCES) \ ++@COND_x86_64_efi_TRUE@am__append_4502 = usb_keyboard.mod ++@COND_x86_64_efi_TRUE@am__append_4503 = usb_keyboard.marker ++@COND_mips_loongson_TRUE@am__append_4504 = usb_keyboard.module ++@COND_mips_loongson_TRUE@am__append_4505 = usb_keyboard.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__append_4506 = ++@COND_mips_loongson_TRUE@am__append_4507 = $(nodist_usb_keyboard_module_SOURCES) ++@COND_mips_loongson_TRUE@am__append_4508 = $(nodist_usb_keyboard_module_SOURCES) \ + @COND_mips_loongson_TRUE@ usb_keyboard.marker +-@COND_mips_loongson_TRUE@am__append_4516 = usb_keyboard.mod +-@COND_mips_loongson_TRUE@am__append_4517 = usb_keyboard.marker +-@COND_arm_coreboot_TRUE@am__append_4518 = usb_keyboard.module +-@COND_arm_coreboot_TRUE@am__append_4519 = usb_keyboard.module$(EXEEXT) +-@COND_arm_coreboot_TRUE@am__append_4520 = +-@COND_arm_coreboot_TRUE@am__append_4521 = $(nodist_usb_keyboard_module_SOURCES) +-@COND_arm_coreboot_TRUE@am__append_4522 = \ ++@COND_mips_loongson_TRUE@am__append_4509 = usb_keyboard.mod ++@COND_mips_loongson_TRUE@am__append_4510 = usb_keyboard.marker ++@COND_arm_coreboot_TRUE@am__append_4511 = usb_keyboard.module ++@COND_arm_coreboot_TRUE@am__append_4512 = usb_keyboard.module$(EXEEXT) ++@COND_arm_coreboot_TRUE@am__append_4513 = ++@COND_arm_coreboot_TRUE@am__append_4514 = $(nodist_usb_keyboard_module_SOURCES) ++@COND_arm_coreboot_TRUE@am__append_4515 = \ + @COND_arm_coreboot_TRUE@ $(nodist_usb_keyboard_module_SOURCES) \ + @COND_arm_coreboot_TRUE@ usb_keyboard.marker +-@COND_arm_coreboot_TRUE@am__append_4523 = usb_keyboard.mod +-@COND_arm_coreboot_TRUE@am__append_4524 = usb_keyboard.marker +-@COND_i386_pc_TRUE@am__append_4525 = vga.module vga_text.module \ ++@COND_arm_coreboot_TRUE@am__append_4516 = usb_keyboard.mod ++@COND_arm_coreboot_TRUE@am__append_4517 = usb_keyboard.marker ++@COND_i386_pc_TRUE@am__append_4518 = vga.module vga_text.module \ + @COND_i386_pc_TRUE@ mda_text.module +-@COND_i386_pc_TRUE@am__append_4526 = vga.module$(EXEEXT) \ ++@COND_i386_pc_TRUE@am__append_4519 = vga.module$(EXEEXT) \ + @COND_i386_pc_TRUE@ vga_text.module$(EXEEXT) \ + @COND_i386_pc_TRUE@ mda_text.module$(EXEEXT) + @COND_i386_pc_FALSE@vga_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_4527 = +-@COND_i386_pc_TRUE@am__append_4528 = $(nodist_vga_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_4520 = ++@COND_i386_pc_TRUE@am__append_4521 = $(nodist_vga_module_SOURCES) \ + @COND_i386_pc_TRUE@ $(nodist_vga_text_module_SOURCES) \ + @COND_i386_pc_TRUE@ $(nodist_mda_text_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_4529 = $(nodist_vga_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_4522 = $(nodist_vga_module_SOURCES) \ + @COND_i386_pc_TRUE@ vga.marker \ + @COND_i386_pc_TRUE@ $(nodist_vga_text_module_SOURCES) \ + @COND_i386_pc_TRUE@ vga_text.marker \ + @COND_i386_pc_TRUE@ $(nodist_mda_text_module_SOURCES) \ + @COND_i386_pc_TRUE@ mda_text.marker +-@COND_i386_pc_TRUE@am__append_4530 = vga.mod vga_text.mod mda_text.mod +-@COND_i386_pc_TRUE@am__append_4531 = vga.marker vga_text.marker \ ++@COND_i386_pc_TRUE@am__append_4523 = vga.mod vga_text.mod mda_text.mod ++@COND_i386_pc_TRUE@am__append_4524 = vga.marker vga_text.marker \ + @COND_i386_pc_TRUE@ mda_text.marker + @COND_i386_pc_FALSE@vga_text_module_DEPENDENCIES = + @COND_i386_coreboot_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@mda_text_module_DEPENDENCIES = +-@COND_i386_qemu_TRUE@am__append_4532 = mda_text.module +-@COND_i386_qemu_TRUE@am__append_4533 = mda_text.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_4534 = +-@COND_i386_qemu_TRUE@am__append_4535 = $(nodist_mda_text_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_4536 = \ ++@COND_i386_qemu_TRUE@am__append_4525 = mda_text.module ++@COND_i386_qemu_TRUE@am__append_4526 = mda_text.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_4527 = ++@COND_i386_qemu_TRUE@am__append_4528 = $(nodist_mda_text_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_4529 = \ + @COND_i386_qemu_TRUE@ $(nodist_mda_text_module_SOURCES) \ + @COND_i386_qemu_TRUE@ mda_text.marker +-@COND_i386_qemu_TRUE@am__append_4537 = mda_text.mod +-@COND_i386_qemu_TRUE@am__append_4538 = mda_text.marker +-@COND_i386_coreboot_TRUE@am__append_4539 = mda_text.module +-@COND_i386_coreboot_TRUE@am__append_4540 = mda_text.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_4541 = +-@COND_i386_coreboot_TRUE@am__append_4542 = $(nodist_mda_text_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_4543 = \ ++@COND_i386_qemu_TRUE@am__append_4530 = mda_text.mod ++@COND_i386_qemu_TRUE@am__append_4531 = mda_text.marker ++@COND_i386_coreboot_TRUE@am__append_4532 = mda_text.module ++@COND_i386_coreboot_TRUE@am__append_4533 = mda_text.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_4534 = ++@COND_i386_coreboot_TRUE@am__append_4535 = $(nodist_mda_text_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_4536 = \ + @COND_i386_coreboot_TRUE@ $(nodist_mda_text_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ mda_text.marker +-@COND_i386_coreboot_TRUE@am__append_4544 = mda_text.mod +-@COND_i386_coreboot_TRUE@am__append_4545 = mda_text.marker +-@COND_i386_multiboot_TRUE@am__append_4546 = mda_text.module +-@COND_i386_multiboot_TRUE@am__append_4547 = mda_text.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_4548 = +-@COND_i386_multiboot_TRUE@am__append_4549 = $(nodist_mda_text_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_4550 = \ ++@COND_i386_coreboot_TRUE@am__append_4537 = mda_text.mod ++@COND_i386_coreboot_TRUE@am__append_4538 = mda_text.marker ++@COND_i386_multiboot_TRUE@am__append_4539 = mda_text.module ++@COND_i386_multiboot_TRUE@am__append_4540 = mda_text.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_4541 = ++@COND_i386_multiboot_TRUE@am__append_4542 = $(nodist_mda_text_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_4543 = \ + @COND_i386_multiboot_TRUE@ $(nodist_mda_text_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ mda_text.marker +-@COND_i386_multiboot_TRUE@am__append_4551 = mda_text.mod +-@COND_i386_multiboot_TRUE@am__append_4552 = mda_text.marker +-@COND_i386_pc_TRUE@am__append_4553 = video_cirrus.module +-@COND_i386_pc_TRUE@am__append_4554 = video_cirrus.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_4544 = mda_text.mod ++@COND_i386_multiboot_TRUE@am__append_4545 = mda_text.marker ++@COND_i386_pc_TRUE@am__append_4546 = video_cirrus.module ++@COND_i386_pc_TRUE@am__append_4547 = video_cirrus.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@video_cirrus_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_4555 = +-@COND_i386_pc_TRUE@am__append_4556 = $(nodist_video_cirrus_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_4557 = \ ++@COND_i386_pc_TRUE@am__append_4548 = ++@COND_i386_pc_TRUE@am__append_4549 = $(nodist_video_cirrus_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_4550 = \ + @COND_i386_pc_TRUE@ $(nodist_video_cirrus_module_SOURCES) \ + @COND_i386_pc_TRUE@ video_cirrus.marker +-@COND_i386_pc_TRUE@am__append_4558 = video_cirrus.mod +-@COND_i386_pc_TRUE@am__append_4559 = video_cirrus.marker +-@COND_i386_efi_TRUE@am__append_4560 = video_cirrus.module +-@COND_i386_efi_TRUE@am__append_4561 = video_cirrus.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_4562 = +-@COND_i386_efi_TRUE@am__append_4563 = $(nodist_video_cirrus_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_4564 = \ ++@COND_i386_pc_TRUE@am__append_4551 = video_cirrus.mod ++@COND_i386_pc_TRUE@am__append_4552 = video_cirrus.marker ++@COND_i386_efi_TRUE@am__append_4553 = video_cirrus.module ++@COND_i386_efi_TRUE@am__append_4554 = video_cirrus.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_4555 = ++@COND_i386_efi_TRUE@am__append_4556 = $(nodist_video_cirrus_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_4557 = \ + @COND_i386_efi_TRUE@ $(nodist_video_cirrus_module_SOURCES) \ + @COND_i386_efi_TRUE@ video_cirrus.marker +-@COND_i386_efi_TRUE@am__append_4565 = video_cirrus.mod +-@COND_i386_efi_TRUE@am__append_4566 = video_cirrus.marker +-@COND_i386_qemu_TRUE@am__append_4567 = video_cirrus.module +-@COND_i386_qemu_TRUE@am__append_4568 = video_cirrus.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_4569 = +-@COND_i386_qemu_TRUE@am__append_4570 = $(nodist_video_cirrus_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_4571 = \ ++@COND_i386_efi_TRUE@am__append_4558 = video_cirrus.mod ++@COND_i386_efi_TRUE@am__append_4559 = video_cirrus.marker ++@COND_i386_qemu_TRUE@am__append_4560 = video_cirrus.module ++@COND_i386_qemu_TRUE@am__append_4561 = video_cirrus.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_4562 = ++@COND_i386_qemu_TRUE@am__append_4563 = $(nodist_video_cirrus_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_4564 = \ + @COND_i386_qemu_TRUE@ $(nodist_video_cirrus_module_SOURCES) \ + @COND_i386_qemu_TRUE@ video_cirrus.marker +-@COND_i386_qemu_TRUE@am__append_4572 = video_cirrus.mod +-@COND_i386_qemu_TRUE@am__append_4573 = video_cirrus.marker +-@COND_i386_coreboot_TRUE@am__append_4574 = video_cirrus.module +-@COND_i386_coreboot_TRUE@am__append_4575 = video_cirrus.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_4576 = +-@COND_i386_coreboot_TRUE@am__append_4577 = $(nodist_video_cirrus_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_4578 = $(nodist_video_cirrus_module_SOURCES) \ ++@COND_i386_qemu_TRUE@am__append_4565 = video_cirrus.mod ++@COND_i386_qemu_TRUE@am__append_4566 = video_cirrus.marker ++@COND_i386_coreboot_TRUE@am__append_4567 = video_cirrus.module ++@COND_i386_coreboot_TRUE@am__append_4568 = video_cirrus.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_4569 = ++@COND_i386_coreboot_TRUE@am__append_4570 = $(nodist_video_cirrus_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_4571 = $(nodist_video_cirrus_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ video_cirrus.marker +-@COND_i386_coreboot_TRUE@am__append_4579 = video_cirrus.mod +-@COND_i386_coreboot_TRUE@am__append_4580 = video_cirrus.marker +-@COND_i386_multiboot_TRUE@am__append_4581 = video_cirrus.module +-@COND_i386_multiboot_TRUE@am__append_4582 = video_cirrus.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_4583 = +-@COND_i386_multiboot_TRUE@am__append_4584 = $(nodist_video_cirrus_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_4585 = $(nodist_video_cirrus_module_SOURCES) \ ++@COND_i386_coreboot_TRUE@am__append_4572 = video_cirrus.mod ++@COND_i386_coreboot_TRUE@am__append_4573 = video_cirrus.marker ++@COND_i386_multiboot_TRUE@am__append_4574 = video_cirrus.module ++@COND_i386_multiboot_TRUE@am__append_4575 = video_cirrus.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_4576 = ++@COND_i386_multiboot_TRUE@am__append_4577 = $(nodist_video_cirrus_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_4578 = $(nodist_video_cirrus_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ video_cirrus.marker +-@COND_i386_multiboot_TRUE@am__append_4586 = video_cirrus.mod +-@COND_i386_multiboot_TRUE@am__append_4587 = video_cirrus.marker +-@COND_i386_ieee1275_TRUE@am__append_4588 = video_cirrus.module +-@COND_i386_ieee1275_TRUE@am__append_4589 = video_cirrus.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_4590 = +-@COND_i386_ieee1275_TRUE@am__append_4591 = $(nodist_video_cirrus_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_4592 = $(nodist_video_cirrus_module_SOURCES) \ ++@COND_i386_multiboot_TRUE@am__append_4579 = video_cirrus.mod ++@COND_i386_multiboot_TRUE@am__append_4580 = video_cirrus.marker ++@COND_i386_ieee1275_TRUE@am__append_4581 = video_cirrus.module ++@COND_i386_ieee1275_TRUE@am__append_4582 = video_cirrus.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_4583 = ++@COND_i386_ieee1275_TRUE@am__append_4584 = $(nodist_video_cirrus_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_4585 = $(nodist_video_cirrus_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ video_cirrus.marker +-@COND_i386_ieee1275_TRUE@am__append_4593 = video_cirrus.mod +-@COND_i386_ieee1275_TRUE@am__append_4594 = video_cirrus.marker +-@COND_x86_64_efi_TRUE@am__append_4595 = video_cirrus.module +-@COND_x86_64_efi_TRUE@am__append_4596 = video_cirrus.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_4597 = +-@COND_x86_64_efi_TRUE@am__append_4598 = $(nodist_video_cirrus_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_4599 = \ ++@COND_i386_ieee1275_TRUE@am__append_4586 = video_cirrus.mod ++@COND_i386_ieee1275_TRUE@am__append_4587 = video_cirrus.marker ++@COND_x86_64_efi_TRUE@am__append_4588 = video_cirrus.module ++@COND_x86_64_efi_TRUE@am__append_4589 = video_cirrus.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_4590 = ++@COND_x86_64_efi_TRUE@am__append_4591 = $(nodist_video_cirrus_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_4592 = \ + @COND_x86_64_efi_TRUE@ $(nodist_video_cirrus_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ video_cirrus.marker +-@COND_x86_64_efi_TRUE@am__append_4600 = video_cirrus.mod +-@COND_x86_64_efi_TRUE@am__append_4601 = video_cirrus.marker +-@COND_i386_pc_TRUE@am__append_4602 = video_bochs.module +-@COND_i386_pc_TRUE@am__append_4603 = video_bochs.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_4593 = video_cirrus.mod ++@COND_x86_64_efi_TRUE@am__append_4594 = video_cirrus.marker ++@COND_i386_pc_TRUE@am__append_4595 = video_bochs.module ++@COND_i386_pc_TRUE@am__append_4596 = video_bochs.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@video_bochs_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_4604 = +-@COND_i386_pc_TRUE@am__append_4605 = $(nodist_video_bochs_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_4606 = \ ++@COND_i386_pc_TRUE@am__append_4597 = ++@COND_i386_pc_TRUE@am__append_4598 = $(nodist_video_bochs_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_4599 = \ + @COND_i386_pc_TRUE@ $(nodist_video_bochs_module_SOURCES) \ + @COND_i386_pc_TRUE@ video_bochs.marker +-@COND_i386_pc_TRUE@am__append_4607 = video_bochs.mod +-@COND_i386_pc_TRUE@am__append_4608 = video_bochs.marker +-@COND_i386_efi_TRUE@am__append_4609 = video_bochs.module +-@COND_i386_efi_TRUE@am__append_4610 = video_bochs.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_4611 = +-@COND_i386_efi_TRUE@am__append_4612 = $(nodist_video_bochs_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_4613 = \ ++@COND_i386_pc_TRUE@am__append_4600 = video_bochs.mod ++@COND_i386_pc_TRUE@am__append_4601 = video_bochs.marker ++@COND_i386_efi_TRUE@am__append_4602 = video_bochs.module ++@COND_i386_efi_TRUE@am__append_4603 = video_bochs.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_4604 = ++@COND_i386_efi_TRUE@am__append_4605 = $(nodist_video_bochs_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_4606 = \ + @COND_i386_efi_TRUE@ $(nodist_video_bochs_module_SOURCES) \ + @COND_i386_efi_TRUE@ video_bochs.marker +-@COND_i386_efi_TRUE@am__append_4614 = video_bochs.mod +-@COND_i386_efi_TRUE@am__append_4615 = video_bochs.marker +-@COND_i386_qemu_TRUE@am__append_4616 = video_bochs.module +-@COND_i386_qemu_TRUE@am__append_4617 = video_bochs.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_4618 = +-@COND_i386_qemu_TRUE@am__append_4619 = $(nodist_video_bochs_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_4620 = \ ++@COND_i386_efi_TRUE@am__append_4607 = video_bochs.mod ++@COND_i386_efi_TRUE@am__append_4608 = video_bochs.marker ++@COND_i386_qemu_TRUE@am__append_4609 = video_bochs.module ++@COND_i386_qemu_TRUE@am__append_4610 = video_bochs.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_4611 = ++@COND_i386_qemu_TRUE@am__append_4612 = $(nodist_video_bochs_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_4613 = \ + @COND_i386_qemu_TRUE@ $(nodist_video_bochs_module_SOURCES) \ + @COND_i386_qemu_TRUE@ video_bochs.marker +-@COND_i386_qemu_TRUE@am__append_4621 = video_bochs.mod +-@COND_i386_qemu_TRUE@am__append_4622 = video_bochs.marker +-@COND_i386_coreboot_TRUE@am__append_4623 = video_bochs.module +-@COND_i386_coreboot_TRUE@am__append_4624 = video_bochs.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_4625 = +-@COND_i386_coreboot_TRUE@am__append_4626 = $(nodist_video_bochs_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_4627 = \ ++@COND_i386_qemu_TRUE@am__append_4614 = video_bochs.mod ++@COND_i386_qemu_TRUE@am__append_4615 = video_bochs.marker ++@COND_i386_coreboot_TRUE@am__append_4616 = video_bochs.module ++@COND_i386_coreboot_TRUE@am__append_4617 = video_bochs.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_4618 = ++@COND_i386_coreboot_TRUE@am__append_4619 = $(nodist_video_bochs_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_4620 = \ + @COND_i386_coreboot_TRUE@ $(nodist_video_bochs_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ video_bochs.marker +-@COND_i386_coreboot_TRUE@am__append_4628 = video_bochs.mod +-@COND_i386_coreboot_TRUE@am__append_4629 = video_bochs.marker +-@COND_i386_multiboot_TRUE@am__append_4630 = video_bochs.module +-@COND_i386_multiboot_TRUE@am__append_4631 = video_bochs.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_4632 = +-@COND_i386_multiboot_TRUE@am__append_4633 = $(nodist_video_bochs_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_4634 = $(nodist_video_bochs_module_SOURCES) \ ++@COND_i386_coreboot_TRUE@am__append_4621 = video_bochs.mod ++@COND_i386_coreboot_TRUE@am__append_4622 = video_bochs.marker ++@COND_i386_multiboot_TRUE@am__append_4623 = video_bochs.module ++@COND_i386_multiboot_TRUE@am__append_4624 = video_bochs.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_4625 = ++@COND_i386_multiboot_TRUE@am__append_4626 = $(nodist_video_bochs_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_4627 = $(nodist_video_bochs_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ video_bochs.marker +-@COND_i386_multiboot_TRUE@am__append_4635 = video_bochs.mod +-@COND_i386_multiboot_TRUE@am__append_4636 = video_bochs.marker +-@COND_i386_ieee1275_TRUE@am__append_4637 = video_bochs.module +-@COND_i386_ieee1275_TRUE@am__append_4638 = video_bochs.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_4639 = +-@COND_i386_ieee1275_TRUE@am__append_4640 = $(nodist_video_bochs_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_4641 = \ ++@COND_i386_multiboot_TRUE@am__append_4628 = video_bochs.mod ++@COND_i386_multiboot_TRUE@am__append_4629 = video_bochs.marker ++@COND_i386_ieee1275_TRUE@am__append_4630 = video_bochs.module ++@COND_i386_ieee1275_TRUE@am__append_4631 = video_bochs.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_4632 = ++@COND_i386_ieee1275_TRUE@am__append_4633 = $(nodist_video_bochs_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_4634 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_video_bochs_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ video_bochs.marker +-@COND_i386_ieee1275_TRUE@am__append_4642 = video_bochs.mod +-@COND_i386_ieee1275_TRUE@am__append_4643 = video_bochs.marker +-@COND_x86_64_efi_TRUE@am__append_4644 = video_bochs.module +-@COND_x86_64_efi_TRUE@am__append_4645 = video_bochs.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_4646 = +-@COND_x86_64_efi_TRUE@am__append_4647 = $(nodist_video_bochs_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_4648 = \ ++@COND_i386_ieee1275_TRUE@am__append_4635 = video_bochs.mod ++@COND_i386_ieee1275_TRUE@am__append_4636 = video_bochs.marker ++@COND_x86_64_efi_TRUE@am__append_4637 = video_bochs.module ++@COND_x86_64_efi_TRUE@am__append_4638 = video_bochs.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_4639 = ++@COND_x86_64_efi_TRUE@am__append_4640 = $(nodist_video_bochs_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_4641 = \ + @COND_x86_64_efi_TRUE@ $(nodist_video_bochs_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ video_bochs.marker +-@COND_x86_64_efi_TRUE@am__append_4649 = video_bochs.mod +-@COND_x86_64_efi_TRUE@am__append_4650 = video_bochs.marker +-@COND_emu_TRUE@am__append_4651 = legacy_password_test.module +-@COND_emu_TRUE@am__append_4652 = legacy_password_test.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_4642 = video_bochs.mod ++@COND_x86_64_efi_TRUE@am__append_4643 = video_bochs.marker ++@COND_emu_TRUE@am__append_4644 = legacy_password_test.module ++@COND_emu_TRUE@am__append_4645 = legacy_password_test.module$(EXEEXT) + @COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@legacy_password_test_module_DEPENDENCIES = +-@COND_emu_TRUE@am__append_4653 = +-@COND_emu_TRUE@am__append_4654 = $(nodist_legacy_password_test_module_SOURCES) +-@COND_emu_TRUE@am__append_4655 = \ ++@COND_emu_TRUE@am__append_4646 = ++@COND_emu_TRUE@am__append_4647 = $(nodist_legacy_password_test_module_SOURCES) ++@COND_emu_TRUE@am__append_4648 = \ + @COND_emu_TRUE@ $(nodist_legacy_password_test_module_SOURCES) \ + @COND_emu_TRUE@ legacy_password_test.marker +-@COND_emu_TRUE@am__append_4656 = legacy_password_test.mod +-@COND_emu_TRUE@am__append_4657 = legacy_password_test.marker +-@COND_i386_pc_TRUE@am__append_4658 = legacy_password_test.module +-@COND_i386_pc_TRUE@am__append_4659 = legacy_password_test.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__append_4660 = +-@COND_i386_pc_TRUE@am__append_4661 = $(nodist_legacy_password_test_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_4662 = $(nodist_legacy_password_test_module_SOURCES) \ ++@COND_emu_TRUE@am__append_4649 = legacy_password_test.mod ++@COND_emu_TRUE@am__append_4650 = legacy_password_test.marker ++@COND_i386_pc_TRUE@am__append_4651 = legacy_password_test.module ++@COND_i386_pc_TRUE@am__append_4652 = legacy_password_test.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__append_4653 = ++@COND_i386_pc_TRUE@am__append_4654 = $(nodist_legacy_password_test_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_4655 = $(nodist_legacy_password_test_module_SOURCES) \ + @COND_i386_pc_TRUE@ legacy_password_test.marker +-@COND_i386_pc_TRUE@am__append_4663 = legacy_password_test.mod +-@COND_i386_pc_TRUE@am__append_4664 = legacy_password_test.marker +-@COND_i386_efi_TRUE@am__append_4665 = legacy_password_test.module +-@COND_i386_efi_TRUE@am__append_4666 = legacy_password_test.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_4667 = +-@COND_i386_efi_TRUE@am__append_4668 = $(nodist_legacy_password_test_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_4669 = $(nodist_legacy_password_test_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_4656 = legacy_password_test.mod ++@COND_i386_pc_TRUE@am__append_4657 = legacy_password_test.marker ++@COND_i386_efi_TRUE@am__append_4658 = legacy_password_test.module ++@COND_i386_efi_TRUE@am__append_4659 = legacy_password_test.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_4660 = ++@COND_i386_efi_TRUE@am__append_4661 = $(nodist_legacy_password_test_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_4662 = $(nodist_legacy_password_test_module_SOURCES) \ + @COND_i386_efi_TRUE@ legacy_password_test.marker +-@COND_i386_efi_TRUE@am__append_4670 = legacy_password_test.mod +-@COND_i386_efi_TRUE@am__append_4671 = legacy_password_test.marker +-@COND_x86_64_efi_TRUE@am__append_4672 = legacy_password_test.module +-@COND_x86_64_efi_TRUE@am__append_4673 = legacy_password_test.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_4674 = +-@COND_x86_64_efi_TRUE@am__append_4675 = $(nodist_legacy_password_test_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_4676 = $(nodist_legacy_password_test_module_SOURCES) \ ++@COND_i386_efi_TRUE@am__append_4663 = legacy_password_test.mod ++@COND_i386_efi_TRUE@am__append_4664 = legacy_password_test.marker ++@COND_x86_64_efi_TRUE@am__append_4665 = legacy_password_test.module ++@COND_x86_64_efi_TRUE@am__append_4666 = legacy_password_test.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_4667 = ++@COND_x86_64_efi_TRUE@am__append_4668 = $(nodist_legacy_password_test_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_4669 = $(nodist_legacy_password_test_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ legacy_password_test.marker +-@COND_x86_64_efi_TRUE@am__append_4677 = legacy_password_test.mod +-@COND_x86_64_efi_TRUE@am__append_4678 = legacy_password_test.marker +-@COND_i386_xen_TRUE@am__append_4679 = legacy_password_test.module +-@COND_i386_xen_TRUE@am__append_4680 = legacy_password_test.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__append_4681 = +-@COND_i386_xen_TRUE@am__append_4682 = $(nodist_legacy_password_test_module_SOURCES) +-@COND_i386_xen_TRUE@am__append_4683 = $(nodist_legacy_password_test_module_SOURCES) \ ++@COND_x86_64_efi_TRUE@am__append_4670 = legacy_password_test.mod ++@COND_x86_64_efi_TRUE@am__append_4671 = legacy_password_test.marker ++@COND_i386_xen_TRUE@am__append_4672 = legacy_password_test.module ++@COND_i386_xen_TRUE@am__append_4673 = legacy_password_test.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__append_4674 = ++@COND_i386_xen_TRUE@am__append_4675 = $(nodist_legacy_password_test_module_SOURCES) ++@COND_i386_xen_TRUE@am__append_4676 = $(nodist_legacy_password_test_module_SOURCES) \ + @COND_i386_xen_TRUE@ legacy_password_test.marker +-@COND_i386_xen_TRUE@am__append_4684 = legacy_password_test.mod +-@COND_i386_xen_TRUE@am__append_4685 = legacy_password_test.marker +-@COND_x86_64_xen_TRUE@am__append_4686 = legacy_password_test.module +-@COND_x86_64_xen_TRUE@am__append_4687 = legacy_password_test.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__append_4688 = +-@COND_x86_64_xen_TRUE@am__append_4689 = $(nodist_legacy_password_test_module_SOURCES) +-@COND_x86_64_xen_TRUE@am__append_4690 = $(nodist_legacy_password_test_module_SOURCES) \ ++@COND_i386_xen_TRUE@am__append_4677 = legacy_password_test.mod ++@COND_i386_xen_TRUE@am__append_4678 = legacy_password_test.marker ++@COND_x86_64_xen_TRUE@am__append_4679 = legacy_password_test.module ++@COND_x86_64_xen_TRUE@am__append_4680 = legacy_password_test.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__append_4681 = ++@COND_x86_64_xen_TRUE@am__append_4682 = $(nodist_legacy_password_test_module_SOURCES) ++@COND_x86_64_xen_TRUE@am__append_4683 = $(nodist_legacy_password_test_module_SOURCES) \ + @COND_x86_64_xen_TRUE@ legacy_password_test.marker +-@COND_x86_64_xen_TRUE@am__append_4691 = legacy_password_test.mod +-@COND_x86_64_xen_TRUE@am__append_4692 = legacy_password_test.marker +-@COND_i386_xen_pvh_TRUE@am__append_4693 = legacy_password_test.module +-@COND_i386_xen_pvh_TRUE@am__append_4694 = legacy_password_test.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__append_4695 = +-@COND_i386_xen_pvh_TRUE@am__append_4696 = $(nodist_legacy_password_test_module_SOURCES) +-@COND_i386_xen_pvh_TRUE@am__append_4697 = $(nodist_legacy_password_test_module_SOURCES) \ ++@COND_x86_64_xen_TRUE@am__append_4684 = legacy_password_test.mod ++@COND_x86_64_xen_TRUE@am__append_4685 = legacy_password_test.marker ++@COND_i386_xen_pvh_TRUE@am__append_4686 = legacy_password_test.module ++@COND_i386_xen_pvh_TRUE@am__append_4687 = legacy_password_test.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__append_4688 = ++@COND_i386_xen_pvh_TRUE@am__append_4689 = $(nodist_legacy_password_test_module_SOURCES) ++@COND_i386_xen_pvh_TRUE@am__append_4690 = $(nodist_legacy_password_test_module_SOURCES) \ + @COND_i386_xen_pvh_TRUE@ legacy_password_test.marker +-@COND_i386_xen_pvh_TRUE@am__append_4698 = legacy_password_test.mod +-@COND_i386_xen_pvh_TRUE@am__append_4699 = legacy_password_test.marker +-@COND_emu_TRUE@am__append_4700 = div.module +-@COND_emu_TRUE@am__append_4701 = div.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__append_4691 = legacy_password_test.mod ++@COND_i386_xen_pvh_TRUE@am__append_4692 = legacy_password_test.marker ++@COND_emu_TRUE@am__append_4693 = div.module ++@COND_emu_TRUE@am__append_4694 = div.module$(EXEEXT) + @COND_arm64_efi_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@div_module_DEPENDENCIES = +-@COND_emu_TRUE@am__append_4702 = +-@COND_emu_TRUE@am__append_4703 = $(nodist_div_module_SOURCES) +-@COND_emu_TRUE@am__append_4704 = $(nodist_div_module_SOURCES) \ ++@COND_emu_TRUE@am__append_4695 = ++@COND_emu_TRUE@am__append_4696 = $(nodist_div_module_SOURCES) ++@COND_emu_TRUE@am__append_4697 = $(nodist_div_module_SOURCES) \ + @COND_emu_TRUE@ div.marker +-@COND_emu_TRUE@am__append_4705 = div.mod +-@COND_emu_TRUE@am__append_4706 = div.marker +-@COND_i386_pc_TRUE@am__append_4707 = div.module +-@COND_i386_pc_TRUE@am__append_4708 = div.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__append_4709 = +-@COND_i386_pc_TRUE@am__append_4710 = $(nodist_div_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_4711 = $(nodist_div_module_SOURCES) \ ++@COND_emu_TRUE@am__append_4698 = div.mod ++@COND_emu_TRUE@am__append_4699 = div.marker ++@COND_i386_pc_TRUE@am__append_4700 = div.module ++@COND_i386_pc_TRUE@am__append_4701 = div.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__append_4702 = ++@COND_i386_pc_TRUE@am__append_4703 = $(nodist_div_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_4704 = $(nodist_div_module_SOURCES) \ + @COND_i386_pc_TRUE@ div.marker +-@COND_i386_pc_TRUE@am__append_4712 = div.mod +-@COND_i386_pc_TRUE@am__append_4713 = div.marker +-@COND_i386_efi_TRUE@am__append_4714 = div.module +-@COND_i386_efi_TRUE@am__append_4715 = div.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_4716 = +-@COND_i386_efi_TRUE@am__append_4717 = $(nodist_div_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_4718 = $(nodist_div_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_4705 = div.mod ++@COND_i386_pc_TRUE@am__append_4706 = div.marker ++@COND_i386_efi_TRUE@am__append_4707 = div.module ++@COND_i386_efi_TRUE@am__append_4708 = div.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_4709 = ++@COND_i386_efi_TRUE@am__append_4710 = $(nodist_div_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_4711 = $(nodist_div_module_SOURCES) \ + @COND_i386_efi_TRUE@ div.marker +-@COND_i386_efi_TRUE@am__append_4719 = div.mod +-@COND_i386_efi_TRUE@am__append_4720 = div.marker +-@COND_i386_qemu_TRUE@am__append_4721 = div.module +-@COND_i386_qemu_TRUE@am__append_4722 = div.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_4723 = +-@COND_i386_qemu_TRUE@am__append_4724 = $(nodist_div_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_4725 = $(nodist_div_module_SOURCES) \ ++@COND_i386_efi_TRUE@am__append_4712 = div.mod ++@COND_i386_efi_TRUE@am__append_4713 = div.marker ++@COND_i386_qemu_TRUE@am__append_4714 = div.module ++@COND_i386_qemu_TRUE@am__append_4715 = div.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_4716 = ++@COND_i386_qemu_TRUE@am__append_4717 = $(nodist_div_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_4718 = $(nodist_div_module_SOURCES) \ + @COND_i386_qemu_TRUE@ div.marker +-@COND_i386_qemu_TRUE@am__append_4726 = div.mod +-@COND_i386_qemu_TRUE@am__append_4727 = div.marker +-@COND_i386_coreboot_TRUE@am__append_4728 = div.module +-@COND_i386_coreboot_TRUE@am__append_4729 = div.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_4730 = +-@COND_i386_coreboot_TRUE@am__append_4731 = $(nodist_div_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_4732 = \ ++@COND_i386_qemu_TRUE@am__append_4719 = div.mod ++@COND_i386_qemu_TRUE@am__append_4720 = div.marker ++@COND_i386_coreboot_TRUE@am__append_4721 = div.module ++@COND_i386_coreboot_TRUE@am__append_4722 = div.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_4723 = ++@COND_i386_coreboot_TRUE@am__append_4724 = $(nodist_div_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_4725 = \ + @COND_i386_coreboot_TRUE@ $(nodist_div_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ div.marker +-@COND_i386_coreboot_TRUE@am__append_4733 = div.mod +-@COND_i386_coreboot_TRUE@am__append_4734 = div.marker +-@COND_i386_multiboot_TRUE@am__append_4735 = div.module +-@COND_i386_multiboot_TRUE@am__append_4736 = div.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_4737 = +-@COND_i386_multiboot_TRUE@am__append_4738 = $(nodist_div_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_4739 = \ ++@COND_i386_coreboot_TRUE@am__append_4726 = div.mod ++@COND_i386_coreboot_TRUE@am__append_4727 = div.marker ++@COND_i386_multiboot_TRUE@am__append_4728 = div.module ++@COND_i386_multiboot_TRUE@am__append_4729 = div.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_4730 = ++@COND_i386_multiboot_TRUE@am__append_4731 = $(nodist_div_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_4732 = \ + @COND_i386_multiboot_TRUE@ $(nodist_div_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ div.marker +-@COND_i386_multiboot_TRUE@am__append_4740 = div.mod +-@COND_i386_multiboot_TRUE@am__append_4741 = div.marker +-@COND_i386_ieee1275_TRUE@am__append_4742 = div.module +-@COND_i386_ieee1275_TRUE@am__append_4743 = div.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_4744 = +-@COND_i386_ieee1275_TRUE@am__append_4745 = $(nodist_div_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_4746 = \ ++@COND_i386_multiboot_TRUE@am__append_4733 = div.mod ++@COND_i386_multiboot_TRUE@am__append_4734 = div.marker ++@COND_i386_ieee1275_TRUE@am__append_4735 = div.module ++@COND_i386_ieee1275_TRUE@am__append_4736 = div.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_4737 = ++@COND_i386_ieee1275_TRUE@am__append_4738 = $(nodist_div_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_4739 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_div_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ div.marker +-@COND_i386_ieee1275_TRUE@am__append_4747 = div.mod +-@COND_i386_ieee1275_TRUE@am__append_4748 = div.marker +-@COND_x86_64_efi_TRUE@am__append_4749 = div.module +-@COND_x86_64_efi_TRUE@am__append_4750 = div.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_4751 = +-@COND_x86_64_efi_TRUE@am__append_4752 = $(nodist_div_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_4753 = $(nodist_div_module_SOURCES) \ ++@COND_i386_ieee1275_TRUE@am__append_4740 = div.mod ++@COND_i386_ieee1275_TRUE@am__append_4741 = div.marker ++@COND_x86_64_efi_TRUE@am__append_4742 = div.module ++@COND_x86_64_efi_TRUE@am__append_4743 = div.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_4744 = ++@COND_x86_64_efi_TRUE@am__append_4745 = $(nodist_div_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_4746 = $(nodist_div_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ div.marker +-@COND_x86_64_efi_TRUE@am__append_4754 = div.mod +-@COND_x86_64_efi_TRUE@am__append_4755 = div.marker +-@COND_i386_xen_TRUE@am__append_4756 = div.module +-@COND_i386_xen_TRUE@am__append_4757 = div.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__append_4758 = +-@COND_i386_xen_TRUE@am__append_4759 = $(nodist_div_module_SOURCES) +-@COND_i386_xen_TRUE@am__append_4760 = $(nodist_div_module_SOURCES) \ ++@COND_x86_64_efi_TRUE@am__append_4747 = div.mod ++@COND_x86_64_efi_TRUE@am__append_4748 = div.marker ++@COND_i386_xen_TRUE@am__append_4749 = div.module ++@COND_i386_xen_TRUE@am__append_4750 = div.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__append_4751 = ++@COND_i386_xen_TRUE@am__append_4752 = $(nodist_div_module_SOURCES) ++@COND_i386_xen_TRUE@am__append_4753 = $(nodist_div_module_SOURCES) \ + @COND_i386_xen_TRUE@ div.marker +-@COND_i386_xen_TRUE@am__append_4761 = div.mod +-@COND_i386_xen_TRUE@am__append_4762 = div.marker +-@COND_x86_64_xen_TRUE@am__append_4763 = div.module +-@COND_x86_64_xen_TRUE@am__append_4764 = div.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__append_4765 = +-@COND_x86_64_xen_TRUE@am__append_4766 = $(nodist_div_module_SOURCES) +-@COND_x86_64_xen_TRUE@am__append_4767 = $(nodist_div_module_SOURCES) \ ++@COND_i386_xen_TRUE@am__append_4754 = div.mod ++@COND_i386_xen_TRUE@am__append_4755 = div.marker ++@COND_x86_64_xen_TRUE@am__append_4756 = div.module ++@COND_x86_64_xen_TRUE@am__append_4757 = div.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__append_4758 = ++@COND_x86_64_xen_TRUE@am__append_4759 = $(nodist_div_module_SOURCES) ++@COND_x86_64_xen_TRUE@am__append_4760 = $(nodist_div_module_SOURCES) \ + @COND_x86_64_xen_TRUE@ div.marker +-@COND_x86_64_xen_TRUE@am__append_4768 = div.mod +-@COND_x86_64_xen_TRUE@am__append_4769 = div.marker +-@COND_i386_xen_pvh_TRUE@am__append_4770 = div.module +-@COND_i386_xen_pvh_TRUE@am__append_4771 = div.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__append_4772 = +-@COND_i386_xen_pvh_TRUE@am__append_4773 = $(nodist_div_module_SOURCES) +-@COND_i386_xen_pvh_TRUE@am__append_4774 = \ ++@COND_x86_64_xen_TRUE@am__append_4761 = div.mod ++@COND_x86_64_xen_TRUE@am__append_4762 = div.marker ++@COND_i386_xen_pvh_TRUE@am__append_4763 = div.module ++@COND_i386_xen_pvh_TRUE@am__append_4764 = div.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__append_4765 = ++@COND_i386_xen_pvh_TRUE@am__append_4766 = $(nodist_div_module_SOURCES) ++@COND_i386_xen_pvh_TRUE@am__append_4767 = \ + @COND_i386_xen_pvh_TRUE@ $(nodist_div_module_SOURCES) \ + @COND_i386_xen_pvh_TRUE@ div.marker +-@COND_i386_xen_pvh_TRUE@am__append_4775 = div.mod +-@COND_i386_xen_pvh_TRUE@am__append_4776 = div.marker +-@COND_mips_loongson_TRUE@am__append_4777 = div.module +-@COND_mips_loongson_TRUE@am__append_4778 = div.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__append_4779 = +-@COND_mips_loongson_TRUE@am__append_4780 = $(nodist_div_module_SOURCES) +-@COND_mips_loongson_TRUE@am__append_4781 = \ ++@COND_i386_xen_pvh_TRUE@am__append_4768 = div.mod ++@COND_i386_xen_pvh_TRUE@am__append_4769 = div.marker ++@COND_mips_loongson_TRUE@am__append_4770 = div.module ++@COND_mips_loongson_TRUE@am__append_4771 = div.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__append_4772 = ++@COND_mips_loongson_TRUE@am__append_4773 = $(nodist_div_module_SOURCES) ++@COND_mips_loongson_TRUE@am__append_4774 = \ + @COND_mips_loongson_TRUE@ $(nodist_div_module_SOURCES) \ + @COND_mips_loongson_TRUE@ div.marker +-@COND_mips_loongson_TRUE@am__append_4782 = div.mod +-@COND_mips_loongson_TRUE@am__append_4783 = div.marker +-@COND_sparc64_ieee1275_TRUE@am__append_4784 = div.module +-@COND_sparc64_ieee1275_TRUE@am__append_4785 = div.module$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__append_4786 = +-@COND_sparc64_ieee1275_TRUE@am__append_4787 = $(nodist_div_module_SOURCES) +-@COND_sparc64_ieee1275_TRUE@am__append_4788 = \ ++@COND_mips_loongson_TRUE@am__append_4775 = div.mod ++@COND_mips_loongson_TRUE@am__append_4776 = div.marker ++@COND_sparc64_ieee1275_TRUE@am__append_4777 = div.module ++@COND_sparc64_ieee1275_TRUE@am__append_4778 = div.module$(EXEEXT) ++@COND_sparc64_ieee1275_TRUE@am__append_4779 = ++@COND_sparc64_ieee1275_TRUE@am__append_4780 = $(nodist_div_module_SOURCES) ++@COND_sparc64_ieee1275_TRUE@am__append_4781 = \ + @COND_sparc64_ieee1275_TRUE@ $(nodist_div_module_SOURCES) \ + @COND_sparc64_ieee1275_TRUE@ div.marker +-@COND_sparc64_ieee1275_TRUE@am__append_4789 = div.mod +-@COND_sparc64_ieee1275_TRUE@am__append_4790 = div.marker +-@COND_powerpc_ieee1275_TRUE@am__append_4791 = div.module +-@COND_powerpc_ieee1275_TRUE@am__append_4792 = div.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__append_4793 = +-@COND_powerpc_ieee1275_TRUE@am__append_4794 = $(nodist_div_module_SOURCES) +-@COND_powerpc_ieee1275_TRUE@am__append_4795 = \ ++@COND_sparc64_ieee1275_TRUE@am__append_4782 = div.mod ++@COND_sparc64_ieee1275_TRUE@am__append_4783 = div.marker ++@COND_powerpc_ieee1275_TRUE@am__append_4784 = div.module ++@COND_powerpc_ieee1275_TRUE@am__append_4785 = div.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__append_4786 = ++@COND_powerpc_ieee1275_TRUE@am__append_4787 = $(nodist_div_module_SOURCES) ++@COND_powerpc_ieee1275_TRUE@am__append_4788 = \ + @COND_powerpc_ieee1275_TRUE@ $(nodist_div_module_SOURCES) \ + @COND_powerpc_ieee1275_TRUE@ div.marker +-@COND_powerpc_ieee1275_TRUE@am__append_4796 = div.mod +-@COND_powerpc_ieee1275_TRUE@am__append_4797 = div.marker +-@COND_mips_arc_TRUE@am__append_4798 = div.module +-@COND_mips_arc_TRUE@am__append_4799 = div.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__append_4800 = +-@COND_mips_arc_TRUE@am__append_4801 = $(nodist_div_module_SOURCES) +-@COND_mips_arc_TRUE@am__append_4802 = $(nodist_div_module_SOURCES) \ ++@COND_powerpc_ieee1275_TRUE@am__append_4789 = div.mod ++@COND_powerpc_ieee1275_TRUE@am__append_4790 = div.marker ++@COND_mips_arc_TRUE@am__append_4791 = div.module ++@COND_mips_arc_TRUE@am__append_4792 = div.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__append_4793 = ++@COND_mips_arc_TRUE@am__append_4794 = $(nodist_div_module_SOURCES) ++@COND_mips_arc_TRUE@am__append_4795 = $(nodist_div_module_SOURCES) \ + @COND_mips_arc_TRUE@ div.marker +-@COND_mips_arc_TRUE@am__append_4803 = div.mod +-@COND_mips_arc_TRUE@am__append_4804 = div.marker +-@COND_mips_qemu_mips_TRUE@am__append_4805 = div.module +-@COND_mips_qemu_mips_TRUE@am__append_4806 = div.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__append_4807 = +-@COND_mips_qemu_mips_TRUE@am__append_4808 = $(nodist_div_module_SOURCES) +-@COND_mips_qemu_mips_TRUE@am__append_4809 = \ ++@COND_mips_arc_TRUE@am__append_4796 = div.mod ++@COND_mips_arc_TRUE@am__append_4797 = div.marker ++@COND_mips_qemu_mips_TRUE@am__append_4798 = div.module ++@COND_mips_qemu_mips_TRUE@am__append_4799 = div.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__append_4800 = ++@COND_mips_qemu_mips_TRUE@am__append_4801 = $(nodist_div_module_SOURCES) ++@COND_mips_qemu_mips_TRUE@am__append_4802 = \ + @COND_mips_qemu_mips_TRUE@ $(nodist_div_module_SOURCES) \ + @COND_mips_qemu_mips_TRUE@ div.marker +-@COND_mips_qemu_mips_TRUE@am__append_4810 = div.mod +-@COND_mips_qemu_mips_TRUE@am__append_4811 = div.marker +-@COND_arm64_efi_TRUE@am__append_4812 = div.module +-@COND_arm64_efi_TRUE@am__append_4813 = div.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__append_4814 = +-@COND_arm64_efi_TRUE@am__append_4815 = $(nodist_div_module_SOURCES) +-@COND_arm64_efi_TRUE@am__append_4816 = $(nodist_div_module_SOURCES) \ ++@COND_mips_qemu_mips_TRUE@am__append_4803 = div.mod ++@COND_mips_qemu_mips_TRUE@am__append_4804 = div.marker ++@COND_arm64_efi_TRUE@am__append_4805 = div.module ++@COND_arm64_efi_TRUE@am__append_4806 = div.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__append_4807 = ++@COND_arm64_efi_TRUE@am__append_4808 = $(nodist_div_module_SOURCES) ++@COND_arm64_efi_TRUE@am__append_4809 = $(nodist_div_module_SOURCES) \ + @COND_arm64_efi_TRUE@ div.marker +-@COND_arm64_efi_TRUE@am__append_4817 = div.mod +-@COND_arm64_efi_TRUE@am__append_4818 = div.marker +-@COND_riscv64_efi_TRUE@am__append_4819 = div.module +-@COND_riscv64_efi_TRUE@am__append_4820 = div.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__append_4821 = +-@COND_riscv64_efi_TRUE@am__append_4822 = $(nodist_div_module_SOURCES) +-@COND_riscv64_efi_TRUE@am__append_4823 = $(nodist_div_module_SOURCES) \ ++@COND_arm64_efi_TRUE@am__append_4810 = div.mod ++@COND_arm64_efi_TRUE@am__append_4811 = div.marker ++@COND_riscv64_efi_TRUE@am__append_4812 = div.module ++@COND_riscv64_efi_TRUE@am__append_4813 = div.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_4814 = ++@COND_riscv64_efi_TRUE@am__append_4815 = $(nodist_div_module_SOURCES) ++@COND_riscv64_efi_TRUE@am__append_4816 = $(nodist_div_module_SOURCES) \ + @COND_riscv64_efi_TRUE@ div.marker +-@COND_riscv64_efi_TRUE@am__append_4824 = div.mod +-@COND_riscv64_efi_TRUE@am__append_4825 = div.marker +-@COND_i386_efi_TRUE@am__append_4826 = efi_gop.module +-@COND_i386_efi_TRUE@am__append_4827 = efi_gop.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_4817 = div.mod ++@COND_riscv64_efi_TRUE@am__append_4818 = div.marker ++@COND_i386_efi_TRUE@am__append_4819 = efi_gop.module ++@COND_i386_efi_TRUE@am__append_4820 = efi_gop.module$(EXEEXT) + @COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_x86_64_efi_FALSE@efi_gop_module_DEPENDENCIES = +-@COND_i386_efi_TRUE@am__append_4828 = +-@COND_i386_efi_TRUE@am__append_4829 = $(nodist_efi_gop_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_4830 = \ ++@COND_i386_efi_TRUE@am__append_4821 = ++@COND_i386_efi_TRUE@am__append_4822 = $(nodist_efi_gop_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_4823 = \ + @COND_i386_efi_TRUE@ $(nodist_efi_gop_module_SOURCES) \ + @COND_i386_efi_TRUE@ efi_gop.marker +-@COND_i386_efi_TRUE@am__append_4831 = efi_gop.mod +-@COND_i386_efi_TRUE@am__append_4832 = efi_gop.marker +-@COND_x86_64_efi_TRUE@am__append_4833 = efi_gop.module +-@COND_x86_64_efi_TRUE@am__append_4834 = efi_gop.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_4835 = +-@COND_x86_64_efi_TRUE@am__append_4836 = $(nodist_efi_gop_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_4837 = \ ++@COND_i386_efi_TRUE@am__append_4824 = efi_gop.mod ++@COND_i386_efi_TRUE@am__append_4825 = efi_gop.marker ++@COND_x86_64_efi_TRUE@am__append_4826 = efi_gop.module ++@COND_x86_64_efi_TRUE@am__append_4827 = efi_gop.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_4828 = ++@COND_x86_64_efi_TRUE@am__append_4829 = $(nodist_efi_gop_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_4830 = \ + @COND_x86_64_efi_TRUE@ $(nodist_efi_gop_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ efi_gop.marker +-@COND_x86_64_efi_TRUE@am__append_4838 = efi_gop.mod +-@COND_x86_64_efi_TRUE@am__append_4839 = efi_gop.marker +-@COND_ia64_efi_TRUE@am__append_4840 = efi_gop.module +-@COND_ia64_efi_TRUE@am__append_4841 = efi_gop.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__append_4842 = +-@COND_ia64_efi_TRUE@am__append_4843 = $(nodist_efi_gop_module_SOURCES) +-@COND_ia64_efi_TRUE@am__append_4844 = \ ++@COND_x86_64_efi_TRUE@am__append_4831 = efi_gop.mod ++@COND_x86_64_efi_TRUE@am__append_4832 = efi_gop.marker ++@COND_ia64_efi_TRUE@am__append_4833 = efi_gop.module ++@COND_ia64_efi_TRUE@am__append_4834 = efi_gop.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__append_4835 = ++@COND_ia64_efi_TRUE@am__append_4836 = $(nodist_efi_gop_module_SOURCES) ++@COND_ia64_efi_TRUE@am__append_4837 = \ + @COND_ia64_efi_TRUE@ $(nodist_efi_gop_module_SOURCES) \ + @COND_ia64_efi_TRUE@ efi_gop.marker +-@COND_ia64_efi_TRUE@am__append_4845 = efi_gop.mod +-@COND_ia64_efi_TRUE@am__append_4846 = efi_gop.marker +-@COND_arm_efi_TRUE@am__append_4847 = efi_gop.module +-@COND_arm_efi_TRUE@am__append_4848 = efi_gop.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__append_4849 = +-@COND_arm_efi_TRUE@am__append_4850 = $(nodist_efi_gop_module_SOURCES) +-@COND_arm_efi_TRUE@am__append_4851 = $(nodist_efi_gop_module_SOURCES) \ ++@COND_ia64_efi_TRUE@am__append_4838 = efi_gop.mod ++@COND_ia64_efi_TRUE@am__append_4839 = efi_gop.marker ++@COND_arm_efi_TRUE@am__append_4840 = efi_gop.module ++@COND_arm_efi_TRUE@am__append_4841 = efi_gop.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__append_4842 = ++@COND_arm_efi_TRUE@am__append_4843 = $(nodist_efi_gop_module_SOURCES) ++@COND_arm_efi_TRUE@am__append_4844 = $(nodist_efi_gop_module_SOURCES) \ + @COND_arm_efi_TRUE@ efi_gop.marker +-@COND_arm_efi_TRUE@am__append_4852 = efi_gop.mod +-@COND_arm_efi_TRUE@am__append_4853 = efi_gop.marker +-@COND_arm64_efi_TRUE@am__append_4854 = efi_gop.module +-@COND_arm64_efi_TRUE@am__append_4855 = efi_gop.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__append_4856 = +-@COND_arm64_efi_TRUE@am__append_4857 = $(nodist_efi_gop_module_SOURCES) +-@COND_arm64_efi_TRUE@am__append_4858 = \ ++@COND_arm_efi_TRUE@am__append_4845 = efi_gop.mod ++@COND_arm_efi_TRUE@am__append_4846 = efi_gop.marker ++@COND_arm64_efi_TRUE@am__append_4847 = efi_gop.module ++@COND_arm64_efi_TRUE@am__append_4848 = efi_gop.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__append_4849 = ++@COND_arm64_efi_TRUE@am__append_4850 = $(nodist_efi_gop_module_SOURCES) ++@COND_arm64_efi_TRUE@am__append_4851 = \ + @COND_arm64_efi_TRUE@ $(nodist_efi_gop_module_SOURCES) \ + @COND_arm64_efi_TRUE@ efi_gop.marker +-@COND_arm64_efi_TRUE@am__append_4859 = efi_gop.mod +-@COND_arm64_efi_TRUE@am__append_4860 = efi_gop.marker +-@COND_riscv32_efi_TRUE@am__append_4861 = efi_gop.module +-@COND_riscv32_efi_TRUE@am__append_4862 = efi_gop.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__append_4863 = +-@COND_riscv32_efi_TRUE@am__append_4864 = $(nodist_efi_gop_module_SOURCES) +-@COND_riscv32_efi_TRUE@am__append_4865 = \ ++@COND_arm64_efi_TRUE@am__append_4852 = efi_gop.mod ++@COND_arm64_efi_TRUE@am__append_4853 = efi_gop.marker ++@COND_riscv32_efi_TRUE@am__append_4854 = efi_gop.module ++@COND_riscv32_efi_TRUE@am__append_4855 = efi_gop.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__append_4856 = ++@COND_riscv32_efi_TRUE@am__append_4857 = $(nodist_efi_gop_module_SOURCES) ++@COND_riscv32_efi_TRUE@am__append_4858 = \ + @COND_riscv32_efi_TRUE@ $(nodist_efi_gop_module_SOURCES) \ + @COND_riscv32_efi_TRUE@ efi_gop.marker +-@COND_riscv32_efi_TRUE@am__append_4866 = efi_gop.mod +-@COND_riscv32_efi_TRUE@am__append_4867 = efi_gop.marker +-@COND_riscv64_efi_TRUE@am__append_4868 = efi_gop.module +-@COND_riscv64_efi_TRUE@am__append_4869 = efi_gop.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__append_4870 = +-@COND_riscv64_efi_TRUE@am__append_4871 = $(nodist_efi_gop_module_SOURCES) +-@COND_riscv64_efi_TRUE@am__append_4872 = \ ++@COND_riscv32_efi_TRUE@am__append_4859 = efi_gop.mod ++@COND_riscv32_efi_TRUE@am__append_4860 = efi_gop.marker ++@COND_riscv64_efi_TRUE@am__append_4861 = efi_gop.module ++@COND_riscv64_efi_TRUE@am__append_4862 = efi_gop.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_4863 = ++@COND_riscv64_efi_TRUE@am__append_4864 = $(nodist_efi_gop_module_SOURCES) ++@COND_riscv64_efi_TRUE@am__append_4865 = \ + @COND_riscv64_efi_TRUE@ $(nodist_efi_gop_module_SOURCES) \ + @COND_riscv64_efi_TRUE@ efi_gop.marker +-@COND_riscv64_efi_TRUE@am__append_4873 = efi_gop.mod +-@COND_riscv64_efi_TRUE@am__append_4874 = efi_gop.marker +-@COND_i386_efi_TRUE@am__append_4875 = efi_uga.module +-@COND_i386_efi_TRUE@am__append_4876 = efi_uga.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_4866 = efi_gop.mod ++@COND_riscv64_efi_TRUE@am__append_4867 = efi_gop.marker ++@COND_i386_efi_TRUE@am__append_4868 = efi_uga.module ++@COND_i386_efi_TRUE@am__append_4869 = efi_uga.module$(EXEEXT) + @COND_i386_efi_FALSE@@COND_x86_64_efi_FALSE@efi_uga_module_DEPENDENCIES = +-@COND_i386_efi_TRUE@am__append_4877 = +-@COND_i386_efi_TRUE@am__append_4878 = $(nodist_efi_uga_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_4879 = \ ++@COND_i386_efi_TRUE@am__append_4870 = ++@COND_i386_efi_TRUE@am__append_4871 = $(nodist_efi_uga_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_4872 = \ + @COND_i386_efi_TRUE@ $(nodist_efi_uga_module_SOURCES) \ + @COND_i386_efi_TRUE@ efi_uga.marker +-@COND_i386_efi_TRUE@am__append_4880 = efi_uga.mod +-@COND_i386_efi_TRUE@am__append_4881 = efi_uga.marker +-@COND_x86_64_efi_TRUE@am__append_4882 = efi_uga.module +-@COND_x86_64_efi_TRUE@am__append_4883 = efi_uga.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_4884 = +-@COND_x86_64_efi_TRUE@am__append_4885 = $(nodist_efi_uga_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_4886 = \ ++@COND_i386_efi_TRUE@am__append_4873 = efi_uga.mod ++@COND_i386_efi_TRUE@am__append_4874 = efi_uga.marker ++@COND_x86_64_efi_TRUE@am__append_4875 = efi_uga.module ++@COND_x86_64_efi_TRUE@am__append_4876 = efi_uga.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_4877 = ++@COND_x86_64_efi_TRUE@am__append_4878 = $(nodist_efi_uga_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_4879 = \ + @COND_x86_64_efi_TRUE@ $(nodist_efi_uga_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ efi_uga.marker +-@COND_x86_64_efi_TRUE@am__append_4887 = efi_uga.mod +-@COND_x86_64_efi_TRUE@am__append_4888 = efi_uga.marker +-@COND_i386_pc_TRUE@am__append_4889 = vbe.module +-@COND_i386_pc_TRUE@am__append_4890 = vbe.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_4880 = efi_uga.mod ++@COND_x86_64_efi_TRUE@am__append_4881 = efi_uga.marker ++@COND_i386_pc_TRUE@am__append_4882 = vbe.module ++@COND_i386_pc_TRUE@am__append_4883 = vbe.module$(EXEEXT) + @COND_i386_pc_FALSE@vbe_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_4891 = +-@COND_i386_pc_TRUE@am__append_4892 = $(nodist_vbe_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_4893 = $(nodist_vbe_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_4884 = ++@COND_i386_pc_TRUE@am__append_4885 = $(nodist_vbe_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_4886 = $(nodist_vbe_module_SOURCES) \ + @COND_i386_pc_TRUE@ vbe.marker +-@COND_i386_pc_TRUE@am__append_4894 = vbe.mod +-@COND_i386_pc_TRUE@am__append_4895 = vbe.marker +-@COND_emu_TRUE@am__append_4896 = video_fb.module +-@COND_emu_TRUE@am__append_4897 = video_fb.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__append_4887 = vbe.mod ++@COND_i386_pc_TRUE@am__append_4888 = vbe.marker ++@COND_emu_TRUE@am__append_4889 = video_fb.module ++@COND_emu_TRUE@am__append_4890 = video_fb.module$(EXEEXT) + @COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@video_fb_module_DEPENDENCIES = +-@COND_emu_TRUE@am__append_4898 = +-@COND_emu_TRUE@am__append_4899 = $(nodist_video_fb_module_SOURCES) +-@COND_emu_TRUE@am__append_4900 = $(nodist_video_fb_module_SOURCES) \ ++@COND_emu_TRUE@am__append_4891 = ++@COND_emu_TRUE@am__append_4892 = $(nodist_video_fb_module_SOURCES) ++@COND_emu_TRUE@am__append_4893 = $(nodist_video_fb_module_SOURCES) \ + @COND_emu_TRUE@ video_fb.marker +-@COND_emu_TRUE@am__append_4901 = video_fb.mod +-@COND_emu_TRUE@am__append_4902 = video_fb.marker +-@COND_i386_pc_TRUE@am__append_4903 = video_fb.module +-@COND_i386_pc_TRUE@am__append_4904 = video_fb.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__append_4905 = +-@COND_i386_pc_TRUE@am__append_4906 = $(nodist_video_fb_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_4907 = \ ++@COND_emu_TRUE@am__append_4894 = video_fb.mod ++@COND_emu_TRUE@am__append_4895 = video_fb.marker ++@COND_i386_pc_TRUE@am__append_4896 = video_fb.module ++@COND_i386_pc_TRUE@am__append_4897 = video_fb.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__append_4898 = ++@COND_i386_pc_TRUE@am__append_4899 = $(nodist_video_fb_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_4900 = \ + @COND_i386_pc_TRUE@ $(nodist_video_fb_module_SOURCES) \ + @COND_i386_pc_TRUE@ video_fb.marker +-@COND_i386_pc_TRUE@am__append_4908 = video_fb.mod +-@COND_i386_pc_TRUE@am__append_4909 = video_fb.marker +-@COND_i386_efi_TRUE@am__append_4910 = video_fb.module +-@COND_i386_efi_TRUE@am__append_4911 = video_fb.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_4912 = +-@COND_i386_efi_TRUE@am__append_4913 = $(nodist_video_fb_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_4914 = \ ++@COND_i386_pc_TRUE@am__append_4901 = video_fb.mod ++@COND_i386_pc_TRUE@am__append_4902 = video_fb.marker ++@COND_i386_efi_TRUE@am__append_4903 = video_fb.module ++@COND_i386_efi_TRUE@am__append_4904 = video_fb.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_4905 = ++@COND_i386_efi_TRUE@am__append_4906 = $(nodist_video_fb_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_4907 = \ + @COND_i386_efi_TRUE@ $(nodist_video_fb_module_SOURCES) \ + @COND_i386_efi_TRUE@ video_fb.marker +-@COND_i386_efi_TRUE@am__append_4915 = video_fb.mod +-@COND_i386_efi_TRUE@am__append_4916 = video_fb.marker +-@COND_i386_qemu_TRUE@am__append_4917 = video_fb.module +-@COND_i386_qemu_TRUE@am__append_4918 = video_fb.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_4919 = +-@COND_i386_qemu_TRUE@am__append_4920 = $(nodist_video_fb_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_4921 = \ ++@COND_i386_efi_TRUE@am__append_4908 = video_fb.mod ++@COND_i386_efi_TRUE@am__append_4909 = video_fb.marker ++@COND_i386_qemu_TRUE@am__append_4910 = video_fb.module ++@COND_i386_qemu_TRUE@am__append_4911 = video_fb.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_4912 = ++@COND_i386_qemu_TRUE@am__append_4913 = $(nodist_video_fb_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_4914 = \ + @COND_i386_qemu_TRUE@ $(nodist_video_fb_module_SOURCES) \ + @COND_i386_qemu_TRUE@ video_fb.marker +-@COND_i386_qemu_TRUE@am__append_4922 = video_fb.mod +-@COND_i386_qemu_TRUE@am__append_4923 = video_fb.marker +-@COND_i386_multiboot_TRUE@am__append_4924 = video_fb.module +-@COND_i386_multiboot_TRUE@am__append_4925 = video_fb.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_4926 = +-@COND_i386_multiboot_TRUE@am__append_4927 = $(nodist_video_fb_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_4928 = \ ++@COND_i386_qemu_TRUE@am__append_4915 = video_fb.mod ++@COND_i386_qemu_TRUE@am__append_4916 = video_fb.marker ++@COND_i386_multiboot_TRUE@am__append_4917 = video_fb.module ++@COND_i386_multiboot_TRUE@am__append_4918 = video_fb.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_4919 = ++@COND_i386_multiboot_TRUE@am__append_4920 = $(nodist_video_fb_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_4921 = \ + @COND_i386_multiboot_TRUE@ $(nodist_video_fb_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ video_fb.marker +-@COND_i386_multiboot_TRUE@am__append_4929 = video_fb.mod +-@COND_i386_multiboot_TRUE@am__append_4930 = video_fb.marker +-@COND_i386_ieee1275_TRUE@am__append_4931 = video_fb.module +-@COND_i386_ieee1275_TRUE@am__append_4932 = video_fb.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_4933 = +-@COND_i386_ieee1275_TRUE@am__append_4934 = $(nodist_video_fb_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_4935 = \ ++@COND_i386_multiboot_TRUE@am__append_4922 = video_fb.mod ++@COND_i386_multiboot_TRUE@am__append_4923 = video_fb.marker ++@COND_i386_ieee1275_TRUE@am__append_4924 = video_fb.module ++@COND_i386_ieee1275_TRUE@am__append_4925 = video_fb.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_4926 = ++@COND_i386_ieee1275_TRUE@am__append_4927 = $(nodist_video_fb_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_4928 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_video_fb_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ video_fb.marker +-@COND_i386_ieee1275_TRUE@am__append_4936 = video_fb.mod +-@COND_i386_ieee1275_TRUE@am__append_4937 = video_fb.marker +-@COND_x86_64_efi_TRUE@am__append_4938 = video_fb.module +-@COND_x86_64_efi_TRUE@am__append_4939 = video_fb.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_4940 = +-@COND_x86_64_efi_TRUE@am__append_4941 = $(nodist_video_fb_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_4942 = \ ++@COND_i386_ieee1275_TRUE@am__append_4929 = video_fb.mod ++@COND_i386_ieee1275_TRUE@am__append_4930 = video_fb.marker ++@COND_x86_64_efi_TRUE@am__append_4931 = video_fb.module ++@COND_x86_64_efi_TRUE@am__append_4932 = video_fb.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_4933 = ++@COND_x86_64_efi_TRUE@am__append_4934 = $(nodist_video_fb_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_4935 = \ + @COND_x86_64_efi_TRUE@ $(nodist_video_fb_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ video_fb.marker +-@COND_x86_64_efi_TRUE@am__append_4943 = video_fb.mod +-@COND_x86_64_efi_TRUE@am__append_4944 = video_fb.marker +-@COND_i386_xen_TRUE@am__append_4945 = video_fb.module +-@COND_i386_xen_TRUE@am__append_4946 = video_fb.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__append_4947 = +-@COND_i386_xen_TRUE@am__append_4948 = $(nodist_video_fb_module_SOURCES) +-@COND_i386_xen_TRUE@am__append_4949 = \ ++@COND_x86_64_efi_TRUE@am__append_4936 = video_fb.mod ++@COND_x86_64_efi_TRUE@am__append_4937 = video_fb.marker ++@COND_i386_xen_TRUE@am__append_4938 = video_fb.module ++@COND_i386_xen_TRUE@am__append_4939 = video_fb.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__append_4940 = ++@COND_i386_xen_TRUE@am__append_4941 = $(nodist_video_fb_module_SOURCES) ++@COND_i386_xen_TRUE@am__append_4942 = \ + @COND_i386_xen_TRUE@ $(nodist_video_fb_module_SOURCES) \ + @COND_i386_xen_TRUE@ video_fb.marker +-@COND_i386_xen_TRUE@am__append_4950 = video_fb.mod +-@COND_i386_xen_TRUE@am__append_4951 = video_fb.marker +-@COND_x86_64_xen_TRUE@am__append_4952 = video_fb.module +-@COND_x86_64_xen_TRUE@am__append_4953 = video_fb.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__append_4954 = +-@COND_x86_64_xen_TRUE@am__append_4955 = $(nodist_video_fb_module_SOURCES) +-@COND_x86_64_xen_TRUE@am__append_4956 = \ ++@COND_i386_xen_TRUE@am__append_4943 = video_fb.mod ++@COND_i386_xen_TRUE@am__append_4944 = video_fb.marker ++@COND_x86_64_xen_TRUE@am__append_4945 = video_fb.module ++@COND_x86_64_xen_TRUE@am__append_4946 = video_fb.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__append_4947 = ++@COND_x86_64_xen_TRUE@am__append_4948 = $(nodist_video_fb_module_SOURCES) ++@COND_x86_64_xen_TRUE@am__append_4949 = \ + @COND_x86_64_xen_TRUE@ $(nodist_video_fb_module_SOURCES) \ + @COND_x86_64_xen_TRUE@ video_fb.marker +-@COND_x86_64_xen_TRUE@am__append_4957 = video_fb.mod +-@COND_x86_64_xen_TRUE@am__append_4958 = video_fb.marker +-@COND_i386_xen_pvh_TRUE@am__append_4959 = video_fb.module +-@COND_i386_xen_pvh_TRUE@am__append_4960 = video_fb.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__append_4961 = +-@COND_i386_xen_pvh_TRUE@am__append_4962 = $(nodist_video_fb_module_SOURCES) +-@COND_i386_xen_pvh_TRUE@am__append_4963 = \ ++@COND_x86_64_xen_TRUE@am__append_4950 = video_fb.mod ++@COND_x86_64_xen_TRUE@am__append_4951 = video_fb.marker ++@COND_i386_xen_pvh_TRUE@am__append_4952 = video_fb.module ++@COND_i386_xen_pvh_TRUE@am__append_4953 = video_fb.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__append_4954 = ++@COND_i386_xen_pvh_TRUE@am__append_4955 = $(nodist_video_fb_module_SOURCES) ++@COND_i386_xen_pvh_TRUE@am__append_4956 = \ + @COND_i386_xen_pvh_TRUE@ $(nodist_video_fb_module_SOURCES) \ + @COND_i386_xen_pvh_TRUE@ video_fb.marker +-@COND_i386_xen_pvh_TRUE@am__append_4964 = video_fb.mod +-@COND_i386_xen_pvh_TRUE@am__append_4965 = video_fb.marker +-@COND_sparc64_ieee1275_TRUE@am__append_4966 = video_fb.module +-@COND_sparc64_ieee1275_TRUE@am__append_4967 = video_fb.module$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__append_4968 = +-@COND_sparc64_ieee1275_TRUE@am__append_4969 = $(nodist_video_fb_module_SOURCES) +-@COND_sparc64_ieee1275_TRUE@am__append_4970 = \ ++@COND_i386_xen_pvh_TRUE@am__append_4957 = video_fb.mod ++@COND_i386_xen_pvh_TRUE@am__append_4958 = video_fb.marker ++@COND_sparc64_ieee1275_TRUE@am__append_4959 = video_fb.module ++@COND_sparc64_ieee1275_TRUE@am__append_4960 = video_fb.module$(EXEEXT) ++@COND_sparc64_ieee1275_TRUE@am__append_4961 = ++@COND_sparc64_ieee1275_TRUE@am__append_4962 = $(nodist_video_fb_module_SOURCES) ++@COND_sparc64_ieee1275_TRUE@am__append_4963 = \ + @COND_sparc64_ieee1275_TRUE@ $(nodist_video_fb_module_SOURCES) \ + @COND_sparc64_ieee1275_TRUE@ video_fb.marker +-@COND_sparc64_ieee1275_TRUE@am__append_4971 = video_fb.mod +-@COND_sparc64_ieee1275_TRUE@am__append_4972 = video_fb.marker +-@COND_powerpc_ieee1275_TRUE@am__append_4973 = video_fb.module +-@COND_powerpc_ieee1275_TRUE@am__append_4974 = video_fb.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__append_4975 = +-@COND_powerpc_ieee1275_TRUE@am__append_4976 = $(nodist_video_fb_module_SOURCES) +-@COND_powerpc_ieee1275_TRUE@am__append_4977 = \ ++@COND_sparc64_ieee1275_TRUE@am__append_4964 = video_fb.mod ++@COND_sparc64_ieee1275_TRUE@am__append_4965 = video_fb.marker ++@COND_powerpc_ieee1275_TRUE@am__append_4966 = video_fb.module ++@COND_powerpc_ieee1275_TRUE@am__append_4967 = video_fb.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__append_4968 = ++@COND_powerpc_ieee1275_TRUE@am__append_4969 = $(nodist_video_fb_module_SOURCES) ++@COND_powerpc_ieee1275_TRUE@am__append_4970 = \ + @COND_powerpc_ieee1275_TRUE@ $(nodist_video_fb_module_SOURCES) \ + @COND_powerpc_ieee1275_TRUE@ video_fb.marker +-@COND_powerpc_ieee1275_TRUE@am__append_4978 = video_fb.mod +-@COND_powerpc_ieee1275_TRUE@am__append_4979 = video_fb.marker +-@COND_mips_arc_TRUE@am__append_4980 = video_fb.module +-@COND_mips_arc_TRUE@am__append_4981 = video_fb.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__append_4982 = +-@COND_mips_arc_TRUE@am__append_4983 = $(nodist_video_fb_module_SOURCES) +-@COND_mips_arc_TRUE@am__append_4984 = \ ++@COND_powerpc_ieee1275_TRUE@am__append_4971 = video_fb.mod ++@COND_powerpc_ieee1275_TRUE@am__append_4972 = video_fb.marker ++@COND_mips_arc_TRUE@am__append_4973 = video_fb.module ++@COND_mips_arc_TRUE@am__append_4974 = video_fb.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__append_4975 = ++@COND_mips_arc_TRUE@am__append_4976 = $(nodist_video_fb_module_SOURCES) ++@COND_mips_arc_TRUE@am__append_4977 = \ + @COND_mips_arc_TRUE@ $(nodist_video_fb_module_SOURCES) \ + @COND_mips_arc_TRUE@ video_fb.marker +-@COND_mips_arc_TRUE@am__append_4985 = video_fb.mod +-@COND_mips_arc_TRUE@am__append_4986 = video_fb.marker +-@COND_ia64_efi_TRUE@am__append_4987 = video_fb.module +-@COND_ia64_efi_TRUE@am__append_4988 = video_fb.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__append_4989 = +-@COND_ia64_efi_TRUE@am__append_4990 = $(nodist_video_fb_module_SOURCES) +-@COND_ia64_efi_TRUE@am__append_4991 = \ ++@COND_mips_arc_TRUE@am__append_4978 = video_fb.mod ++@COND_mips_arc_TRUE@am__append_4979 = video_fb.marker ++@COND_ia64_efi_TRUE@am__append_4980 = video_fb.module ++@COND_ia64_efi_TRUE@am__append_4981 = video_fb.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__append_4982 = ++@COND_ia64_efi_TRUE@am__append_4983 = $(nodist_video_fb_module_SOURCES) ++@COND_ia64_efi_TRUE@am__append_4984 = \ + @COND_ia64_efi_TRUE@ $(nodist_video_fb_module_SOURCES) \ + @COND_ia64_efi_TRUE@ video_fb.marker +-@COND_ia64_efi_TRUE@am__append_4992 = video_fb.mod +-@COND_ia64_efi_TRUE@am__append_4993 = video_fb.marker +-@COND_mips_qemu_mips_TRUE@am__append_4994 = video_fb.module +-@COND_mips_qemu_mips_TRUE@am__append_4995 = video_fb.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__append_4996 = +-@COND_mips_qemu_mips_TRUE@am__append_4997 = $(nodist_video_fb_module_SOURCES) +-@COND_mips_qemu_mips_TRUE@am__append_4998 = \ ++@COND_ia64_efi_TRUE@am__append_4985 = video_fb.mod ++@COND_ia64_efi_TRUE@am__append_4986 = video_fb.marker ++@COND_mips_qemu_mips_TRUE@am__append_4987 = video_fb.module ++@COND_mips_qemu_mips_TRUE@am__append_4988 = video_fb.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__append_4989 = ++@COND_mips_qemu_mips_TRUE@am__append_4990 = $(nodist_video_fb_module_SOURCES) ++@COND_mips_qemu_mips_TRUE@am__append_4991 = \ + @COND_mips_qemu_mips_TRUE@ $(nodist_video_fb_module_SOURCES) \ + @COND_mips_qemu_mips_TRUE@ video_fb.marker +-@COND_mips_qemu_mips_TRUE@am__append_4999 = video_fb.mod +-@COND_mips_qemu_mips_TRUE@am__append_5000 = video_fb.marker +-@COND_arm_uboot_TRUE@am__append_5001 = video_fb.module +-@COND_arm_uboot_TRUE@am__append_5002 = video_fb.module$(EXEEXT) +-@COND_arm_uboot_TRUE@am__append_5003 = +-@COND_arm_uboot_TRUE@am__append_5004 = $(nodist_video_fb_module_SOURCES) +-@COND_arm_uboot_TRUE@am__append_5005 = \ ++@COND_mips_qemu_mips_TRUE@am__append_4992 = video_fb.mod ++@COND_mips_qemu_mips_TRUE@am__append_4993 = video_fb.marker ++@COND_arm_uboot_TRUE@am__append_4994 = video_fb.module ++@COND_arm_uboot_TRUE@am__append_4995 = video_fb.module$(EXEEXT) ++@COND_arm_uboot_TRUE@am__append_4996 = ++@COND_arm_uboot_TRUE@am__append_4997 = $(nodist_video_fb_module_SOURCES) ++@COND_arm_uboot_TRUE@am__append_4998 = \ + @COND_arm_uboot_TRUE@ $(nodist_video_fb_module_SOURCES) \ + @COND_arm_uboot_TRUE@ video_fb.marker +-@COND_arm_uboot_TRUE@am__append_5006 = video_fb.mod +-@COND_arm_uboot_TRUE@am__append_5007 = video_fb.marker +-@COND_arm_efi_TRUE@am__append_5008 = video_fb.module +-@COND_arm_efi_TRUE@am__append_5009 = video_fb.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__append_5010 = +-@COND_arm_efi_TRUE@am__append_5011 = $(nodist_video_fb_module_SOURCES) +-@COND_arm_efi_TRUE@am__append_5012 = \ ++@COND_arm_uboot_TRUE@am__append_4999 = video_fb.mod ++@COND_arm_uboot_TRUE@am__append_5000 = video_fb.marker ++@COND_arm_efi_TRUE@am__append_5001 = video_fb.module ++@COND_arm_efi_TRUE@am__append_5002 = video_fb.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__append_5003 = ++@COND_arm_efi_TRUE@am__append_5004 = $(nodist_video_fb_module_SOURCES) ++@COND_arm_efi_TRUE@am__append_5005 = \ + @COND_arm_efi_TRUE@ $(nodist_video_fb_module_SOURCES) \ + @COND_arm_efi_TRUE@ video_fb.marker +-@COND_arm_efi_TRUE@am__append_5013 = video_fb.mod +-@COND_arm_efi_TRUE@am__append_5014 = video_fb.marker +-@COND_arm64_efi_TRUE@am__append_5015 = video_fb.module +-@COND_arm64_efi_TRUE@am__append_5016 = video_fb.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__append_5017 = +-@COND_arm64_efi_TRUE@am__append_5018 = $(nodist_video_fb_module_SOURCES) +-@COND_arm64_efi_TRUE@am__append_5019 = \ ++@COND_arm_efi_TRUE@am__append_5006 = video_fb.mod ++@COND_arm_efi_TRUE@am__append_5007 = video_fb.marker ++@COND_arm64_efi_TRUE@am__append_5008 = video_fb.module ++@COND_arm64_efi_TRUE@am__append_5009 = video_fb.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__append_5010 = ++@COND_arm64_efi_TRUE@am__append_5011 = $(nodist_video_fb_module_SOURCES) ++@COND_arm64_efi_TRUE@am__append_5012 = \ + @COND_arm64_efi_TRUE@ $(nodist_video_fb_module_SOURCES) \ + @COND_arm64_efi_TRUE@ video_fb.marker +-@COND_arm64_efi_TRUE@am__append_5020 = video_fb.mod +-@COND_arm64_efi_TRUE@am__append_5021 = video_fb.marker +-@COND_riscv32_efi_TRUE@am__append_5022 = video_fb.module +-@COND_riscv32_efi_TRUE@am__append_5023 = video_fb.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__append_5024 = +-@COND_riscv32_efi_TRUE@am__append_5025 = $(nodist_video_fb_module_SOURCES) +-@COND_riscv32_efi_TRUE@am__append_5026 = \ ++@COND_arm64_efi_TRUE@am__append_5013 = video_fb.mod ++@COND_arm64_efi_TRUE@am__append_5014 = video_fb.marker ++@COND_riscv32_efi_TRUE@am__append_5015 = video_fb.module ++@COND_riscv32_efi_TRUE@am__append_5016 = video_fb.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__append_5017 = ++@COND_riscv32_efi_TRUE@am__append_5018 = $(nodist_video_fb_module_SOURCES) ++@COND_riscv32_efi_TRUE@am__append_5019 = \ + @COND_riscv32_efi_TRUE@ $(nodist_video_fb_module_SOURCES) \ + @COND_riscv32_efi_TRUE@ video_fb.marker +-@COND_riscv32_efi_TRUE@am__append_5027 = video_fb.mod +-@COND_riscv32_efi_TRUE@am__append_5028 = video_fb.marker +-@COND_riscv64_efi_TRUE@am__append_5029 = video_fb.module +-@COND_riscv64_efi_TRUE@am__append_5030 = video_fb.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__append_5031 = +-@COND_riscv64_efi_TRUE@am__append_5032 = $(nodist_video_fb_module_SOURCES) +-@COND_riscv64_efi_TRUE@am__append_5033 = \ ++@COND_riscv32_efi_TRUE@am__append_5020 = video_fb.mod ++@COND_riscv32_efi_TRUE@am__append_5021 = video_fb.marker ++@COND_riscv64_efi_TRUE@am__append_5022 = video_fb.module ++@COND_riscv64_efi_TRUE@am__append_5023 = video_fb.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_5024 = ++@COND_riscv64_efi_TRUE@am__append_5025 = $(nodist_video_fb_module_SOURCES) ++@COND_riscv64_efi_TRUE@am__append_5026 = \ + @COND_riscv64_efi_TRUE@ $(nodist_video_fb_module_SOURCES) \ + @COND_riscv64_efi_TRUE@ video_fb.marker +-@COND_riscv64_efi_TRUE@am__append_5034 = video_fb.mod +-@COND_riscv64_efi_TRUE@am__append_5035 = video_fb.marker +-@COND_emu_TRUE@am__append_5036 = video.module +-@COND_emu_TRUE@am__append_5037 = video.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_5027 = video_fb.mod ++@COND_riscv64_efi_TRUE@am__append_5028 = video_fb.marker ++@COND_emu_TRUE@am__append_5029 = video.module ++@COND_emu_TRUE@am__append_5030 = video.module$(EXEEXT) + @COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@video_module_DEPENDENCIES = +-@COND_emu_TRUE@am__append_5038 = +-@COND_emu_TRUE@am__append_5039 = $(nodist_video_module_SOURCES) +-@COND_emu_TRUE@am__append_5040 = $(nodist_video_module_SOURCES) \ ++@COND_emu_TRUE@am__append_5031 = ++@COND_emu_TRUE@am__append_5032 = $(nodist_video_module_SOURCES) ++@COND_emu_TRUE@am__append_5033 = $(nodist_video_module_SOURCES) \ + @COND_emu_TRUE@ video.marker +-@COND_emu_TRUE@am__append_5041 = video.mod +-@COND_emu_TRUE@am__append_5042 = video.marker +-@COND_i386_pc_TRUE@am__append_5043 = video.module +-@COND_i386_pc_TRUE@am__append_5044 = video.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__append_5045 = +-@COND_i386_pc_TRUE@am__append_5046 = $(nodist_video_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_5047 = $(nodist_video_module_SOURCES) \ ++@COND_emu_TRUE@am__append_5034 = video.mod ++@COND_emu_TRUE@am__append_5035 = video.marker ++@COND_i386_pc_TRUE@am__append_5036 = video.module ++@COND_i386_pc_TRUE@am__append_5037 = video.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__append_5038 = ++@COND_i386_pc_TRUE@am__append_5039 = $(nodist_video_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_5040 = $(nodist_video_module_SOURCES) \ + @COND_i386_pc_TRUE@ video.marker +-@COND_i386_pc_TRUE@am__append_5048 = video.mod +-@COND_i386_pc_TRUE@am__append_5049 = video.marker +-@COND_i386_efi_TRUE@am__append_5050 = video.module +-@COND_i386_efi_TRUE@am__append_5051 = video.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_5052 = +-@COND_i386_efi_TRUE@am__append_5053 = $(nodist_video_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_5054 = $(nodist_video_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_5041 = video.mod ++@COND_i386_pc_TRUE@am__append_5042 = video.marker ++@COND_i386_efi_TRUE@am__append_5043 = video.module ++@COND_i386_efi_TRUE@am__append_5044 = video.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_5045 = ++@COND_i386_efi_TRUE@am__append_5046 = $(nodist_video_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_5047 = $(nodist_video_module_SOURCES) \ + @COND_i386_efi_TRUE@ video.marker +-@COND_i386_efi_TRUE@am__append_5055 = video.mod +-@COND_i386_efi_TRUE@am__append_5056 = video.marker +-@COND_i386_qemu_TRUE@am__append_5057 = video.module +-@COND_i386_qemu_TRUE@am__append_5058 = video.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_5059 = +-@COND_i386_qemu_TRUE@am__append_5060 = $(nodist_video_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_5061 = $(nodist_video_module_SOURCES) \ ++@COND_i386_efi_TRUE@am__append_5048 = video.mod ++@COND_i386_efi_TRUE@am__append_5049 = video.marker ++@COND_i386_qemu_TRUE@am__append_5050 = video.module ++@COND_i386_qemu_TRUE@am__append_5051 = video.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_5052 = ++@COND_i386_qemu_TRUE@am__append_5053 = $(nodist_video_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_5054 = $(nodist_video_module_SOURCES) \ + @COND_i386_qemu_TRUE@ video.marker +-@COND_i386_qemu_TRUE@am__append_5062 = video.mod +-@COND_i386_qemu_TRUE@am__append_5063 = video.marker +-@COND_i386_multiboot_TRUE@am__append_5064 = video.module +-@COND_i386_multiboot_TRUE@am__append_5065 = video.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_5066 = +-@COND_i386_multiboot_TRUE@am__append_5067 = $(nodist_video_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_5068 = \ ++@COND_i386_qemu_TRUE@am__append_5055 = video.mod ++@COND_i386_qemu_TRUE@am__append_5056 = video.marker ++@COND_i386_multiboot_TRUE@am__append_5057 = video.module ++@COND_i386_multiboot_TRUE@am__append_5058 = video.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_5059 = ++@COND_i386_multiboot_TRUE@am__append_5060 = $(nodist_video_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_5061 = \ + @COND_i386_multiboot_TRUE@ $(nodist_video_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ video.marker +-@COND_i386_multiboot_TRUE@am__append_5069 = video.mod +-@COND_i386_multiboot_TRUE@am__append_5070 = video.marker +-@COND_i386_ieee1275_TRUE@am__append_5071 = video.module +-@COND_i386_ieee1275_TRUE@am__append_5072 = video.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_5073 = +-@COND_i386_ieee1275_TRUE@am__append_5074 = $(nodist_video_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_5075 = \ ++@COND_i386_multiboot_TRUE@am__append_5062 = video.mod ++@COND_i386_multiboot_TRUE@am__append_5063 = video.marker ++@COND_i386_ieee1275_TRUE@am__append_5064 = video.module ++@COND_i386_ieee1275_TRUE@am__append_5065 = video.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_5066 = ++@COND_i386_ieee1275_TRUE@am__append_5067 = $(nodist_video_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_5068 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_video_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ video.marker +-@COND_i386_ieee1275_TRUE@am__append_5076 = video.mod +-@COND_i386_ieee1275_TRUE@am__append_5077 = video.marker +-@COND_x86_64_efi_TRUE@am__append_5078 = video.module +-@COND_x86_64_efi_TRUE@am__append_5079 = video.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_5080 = +-@COND_x86_64_efi_TRUE@am__append_5081 = $(nodist_video_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_5082 = \ ++@COND_i386_ieee1275_TRUE@am__append_5069 = video.mod ++@COND_i386_ieee1275_TRUE@am__append_5070 = video.marker ++@COND_x86_64_efi_TRUE@am__append_5071 = video.module ++@COND_x86_64_efi_TRUE@am__append_5072 = video.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_5073 = ++@COND_x86_64_efi_TRUE@am__append_5074 = $(nodist_video_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_5075 = \ + @COND_x86_64_efi_TRUE@ $(nodist_video_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ video.marker +-@COND_x86_64_efi_TRUE@am__append_5083 = video.mod +-@COND_x86_64_efi_TRUE@am__append_5084 = video.marker +-@COND_i386_xen_TRUE@am__append_5085 = video.module +-@COND_i386_xen_TRUE@am__append_5086 = video.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__append_5087 = +-@COND_i386_xen_TRUE@am__append_5088 = $(nodist_video_module_SOURCES) +-@COND_i386_xen_TRUE@am__append_5089 = $(nodist_video_module_SOURCES) \ ++@COND_x86_64_efi_TRUE@am__append_5076 = video.mod ++@COND_x86_64_efi_TRUE@am__append_5077 = video.marker ++@COND_i386_xen_TRUE@am__append_5078 = video.module ++@COND_i386_xen_TRUE@am__append_5079 = video.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__append_5080 = ++@COND_i386_xen_TRUE@am__append_5081 = $(nodist_video_module_SOURCES) ++@COND_i386_xen_TRUE@am__append_5082 = $(nodist_video_module_SOURCES) \ + @COND_i386_xen_TRUE@ video.marker +-@COND_i386_xen_TRUE@am__append_5090 = video.mod +-@COND_i386_xen_TRUE@am__append_5091 = video.marker +-@COND_x86_64_xen_TRUE@am__append_5092 = video.module +-@COND_x86_64_xen_TRUE@am__append_5093 = video.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__append_5094 = +-@COND_x86_64_xen_TRUE@am__append_5095 = $(nodist_video_module_SOURCES) +-@COND_x86_64_xen_TRUE@am__append_5096 = \ ++@COND_i386_xen_TRUE@am__append_5083 = video.mod ++@COND_i386_xen_TRUE@am__append_5084 = video.marker ++@COND_x86_64_xen_TRUE@am__append_5085 = video.module ++@COND_x86_64_xen_TRUE@am__append_5086 = video.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__append_5087 = ++@COND_x86_64_xen_TRUE@am__append_5088 = $(nodist_video_module_SOURCES) ++@COND_x86_64_xen_TRUE@am__append_5089 = \ + @COND_x86_64_xen_TRUE@ $(nodist_video_module_SOURCES) \ + @COND_x86_64_xen_TRUE@ video.marker +-@COND_x86_64_xen_TRUE@am__append_5097 = video.mod +-@COND_x86_64_xen_TRUE@am__append_5098 = video.marker +-@COND_i386_xen_pvh_TRUE@am__append_5099 = video.module +-@COND_i386_xen_pvh_TRUE@am__append_5100 = video.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__append_5101 = +-@COND_i386_xen_pvh_TRUE@am__append_5102 = $(nodist_video_module_SOURCES) +-@COND_i386_xen_pvh_TRUE@am__append_5103 = \ ++@COND_x86_64_xen_TRUE@am__append_5090 = video.mod ++@COND_x86_64_xen_TRUE@am__append_5091 = video.marker ++@COND_i386_xen_pvh_TRUE@am__append_5092 = video.module ++@COND_i386_xen_pvh_TRUE@am__append_5093 = video.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__append_5094 = ++@COND_i386_xen_pvh_TRUE@am__append_5095 = $(nodist_video_module_SOURCES) ++@COND_i386_xen_pvh_TRUE@am__append_5096 = \ + @COND_i386_xen_pvh_TRUE@ $(nodist_video_module_SOURCES) \ + @COND_i386_xen_pvh_TRUE@ video.marker +-@COND_i386_xen_pvh_TRUE@am__append_5104 = video.mod +-@COND_i386_xen_pvh_TRUE@am__append_5105 = video.marker +-@COND_sparc64_ieee1275_TRUE@am__append_5106 = video.module +-@COND_sparc64_ieee1275_TRUE@am__append_5107 = video.module$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__append_5108 = +-@COND_sparc64_ieee1275_TRUE@am__append_5109 = $(nodist_video_module_SOURCES) +-@COND_sparc64_ieee1275_TRUE@am__append_5110 = \ ++@COND_i386_xen_pvh_TRUE@am__append_5097 = video.mod ++@COND_i386_xen_pvh_TRUE@am__append_5098 = video.marker ++@COND_sparc64_ieee1275_TRUE@am__append_5099 = video.module ++@COND_sparc64_ieee1275_TRUE@am__append_5100 = video.module$(EXEEXT) ++@COND_sparc64_ieee1275_TRUE@am__append_5101 = ++@COND_sparc64_ieee1275_TRUE@am__append_5102 = $(nodist_video_module_SOURCES) ++@COND_sparc64_ieee1275_TRUE@am__append_5103 = \ + @COND_sparc64_ieee1275_TRUE@ $(nodist_video_module_SOURCES) \ + @COND_sparc64_ieee1275_TRUE@ video.marker +-@COND_sparc64_ieee1275_TRUE@am__append_5111 = video.mod +-@COND_sparc64_ieee1275_TRUE@am__append_5112 = video.marker +-@COND_powerpc_ieee1275_TRUE@am__append_5113 = video.module +-@COND_powerpc_ieee1275_TRUE@am__append_5114 = video.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__append_5115 = +-@COND_powerpc_ieee1275_TRUE@am__append_5116 = $(nodist_video_module_SOURCES) +-@COND_powerpc_ieee1275_TRUE@am__append_5117 = \ ++@COND_sparc64_ieee1275_TRUE@am__append_5104 = video.mod ++@COND_sparc64_ieee1275_TRUE@am__append_5105 = video.marker ++@COND_powerpc_ieee1275_TRUE@am__append_5106 = video.module ++@COND_powerpc_ieee1275_TRUE@am__append_5107 = video.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__append_5108 = ++@COND_powerpc_ieee1275_TRUE@am__append_5109 = $(nodist_video_module_SOURCES) ++@COND_powerpc_ieee1275_TRUE@am__append_5110 = \ + @COND_powerpc_ieee1275_TRUE@ $(nodist_video_module_SOURCES) \ + @COND_powerpc_ieee1275_TRUE@ video.marker +-@COND_powerpc_ieee1275_TRUE@am__append_5118 = video.mod +-@COND_powerpc_ieee1275_TRUE@am__append_5119 = video.marker +-@COND_mips_arc_TRUE@am__append_5120 = video.module +-@COND_mips_arc_TRUE@am__append_5121 = video.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__append_5122 = +-@COND_mips_arc_TRUE@am__append_5123 = $(nodist_video_module_SOURCES) +-@COND_mips_arc_TRUE@am__append_5124 = $(nodist_video_module_SOURCES) \ ++@COND_powerpc_ieee1275_TRUE@am__append_5111 = video.mod ++@COND_powerpc_ieee1275_TRUE@am__append_5112 = video.marker ++@COND_mips_arc_TRUE@am__append_5113 = video.module ++@COND_mips_arc_TRUE@am__append_5114 = video.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__append_5115 = ++@COND_mips_arc_TRUE@am__append_5116 = $(nodist_video_module_SOURCES) ++@COND_mips_arc_TRUE@am__append_5117 = $(nodist_video_module_SOURCES) \ + @COND_mips_arc_TRUE@ video.marker +-@COND_mips_arc_TRUE@am__append_5125 = video.mod +-@COND_mips_arc_TRUE@am__append_5126 = video.marker +-@COND_ia64_efi_TRUE@am__append_5127 = video.module +-@COND_ia64_efi_TRUE@am__append_5128 = video.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__append_5129 = +-@COND_ia64_efi_TRUE@am__append_5130 = $(nodist_video_module_SOURCES) +-@COND_ia64_efi_TRUE@am__append_5131 = $(nodist_video_module_SOURCES) \ ++@COND_mips_arc_TRUE@am__append_5118 = video.mod ++@COND_mips_arc_TRUE@am__append_5119 = video.marker ++@COND_ia64_efi_TRUE@am__append_5120 = video.module ++@COND_ia64_efi_TRUE@am__append_5121 = video.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__append_5122 = ++@COND_ia64_efi_TRUE@am__append_5123 = $(nodist_video_module_SOURCES) ++@COND_ia64_efi_TRUE@am__append_5124 = $(nodist_video_module_SOURCES) \ + @COND_ia64_efi_TRUE@ video.marker +-@COND_ia64_efi_TRUE@am__append_5132 = video.mod +-@COND_ia64_efi_TRUE@am__append_5133 = video.marker +-@COND_mips_qemu_mips_TRUE@am__append_5134 = video.module +-@COND_mips_qemu_mips_TRUE@am__append_5135 = video.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__append_5136 = +-@COND_mips_qemu_mips_TRUE@am__append_5137 = $(nodist_video_module_SOURCES) +-@COND_mips_qemu_mips_TRUE@am__append_5138 = \ ++@COND_ia64_efi_TRUE@am__append_5125 = video.mod ++@COND_ia64_efi_TRUE@am__append_5126 = video.marker ++@COND_mips_qemu_mips_TRUE@am__append_5127 = video.module ++@COND_mips_qemu_mips_TRUE@am__append_5128 = video.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__append_5129 = ++@COND_mips_qemu_mips_TRUE@am__append_5130 = $(nodist_video_module_SOURCES) ++@COND_mips_qemu_mips_TRUE@am__append_5131 = \ + @COND_mips_qemu_mips_TRUE@ $(nodist_video_module_SOURCES) \ + @COND_mips_qemu_mips_TRUE@ video.marker +-@COND_mips_qemu_mips_TRUE@am__append_5139 = video.mod +-@COND_mips_qemu_mips_TRUE@am__append_5140 = video.marker +-@COND_arm_uboot_TRUE@am__append_5141 = video.module +-@COND_arm_uboot_TRUE@am__append_5142 = video.module$(EXEEXT) +-@COND_arm_uboot_TRUE@am__append_5143 = +-@COND_arm_uboot_TRUE@am__append_5144 = $(nodist_video_module_SOURCES) +-@COND_arm_uboot_TRUE@am__append_5145 = $(nodist_video_module_SOURCES) \ ++@COND_mips_qemu_mips_TRUE@am__append_5132 = video.mod ++@COND_mips_qemu_mips_TRUE@am__append_5133 = video.marker ++@COND_arm_uboot_TRUE@am__append_5134 = video.module ++@COND_arm_uboot_TRUE@am__append_5135 = video.module$(EXEEXT) ++@COND_arm_uboot_TRUE@am__append_5136 = ++@COND_arm_uboot_TRUE@am__append_5137 = $(nodist_video_module_SOURCES) ++@COND_arm_uboot_TRUE@am__append_5138 = $(nodist_video_module_SOURCES) \ + @COND_arm_uboot_TRUE@ video.marker +-@COND_arm_uboot_TRUE@am__append_5146 = video.mod +-@COND_arm_uboot_TRUE@am__append_5147 = video.marker +-@COND_arm_efi_TRUE@am__append_5148 = video.module +-@COND_arm_efi_TRUE@am__append_5149 = video.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__append_5150 = +-@COND_arm_efi_TRUE@am__append_5151 = $(nodist_video_module_SOURCES) +-@COND_arm_efi_TRUE@am__append_5152 = $(nodist_video_module_SOURCES) \ ++@COND_arm_uboot_TRUE@am__append_5139 = video.mod ++@COND_arm_uboot_TRUE@am__append_5140 = video.marker ++@COND_arm_efi_TRUE@am__append_5141 = video.module ++@COND_arm_efi_TRUE@am__append_5142 = video.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__append_5143 = ++@COND_arm_efi_TRUE@am__append_5144 = $(nodist_video_module_SOURCES) ++@COND_arm_efi_TRUE@am__append_5145 = $(nodist_video_module_SOURCES) \ + @COND_arm_efi_TRUE@ video.marker +-@COND_arm_efi_TRUE@am__append_5153 = video.mod +-@COND_arm_efi_TRUE@am__append_5154 = video.marker +-@COND_arm64_efi_TRUE@am__append_5155 = video.module +-@COND_arm64_efi_TRUE@am__append_5156 = video.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__append_5157 = +-@COND_arm64_efi_TRUE@am__append_5158 = $(nodist_video_module_SOURCES) +-@COND_arm64_efi_TRUE@am__append_5159 = $(nodist_video_module_SOURCES) \ ++@COND_arm_efi_TRUE@am__append_5146 = video.mod ++@COND_arm_efi_TRUE@am__append_5147 = video.marker ++@COND_arm64_efi_TRUE@am__append_5148 = video.module ++@COND_arm64_efi_TRUE@am__append_5149 = video.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__append_5150 = ++@COND_arm64_efi_TRUE@am__append_5151 = $(nodist_video_module_SOURCES) ++@COND_arm64_efi_TRUE@am__append_5152 = $(nodist_video_module_SOURCES) \ + @COND_arm64_efi_TRUE@ video.marker +-@COND_arm64_efi_TRUE@am__append_5160 = video.mod +-@COND_arm64_efi_TRUE@am__append_5161 = video.marker +-@COND_riscv32_efi_TRUE@am__append_5162 = video.module +-@COND_riscv32_efi_TRUE@am__append_5163 = video.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__append_5164 = +-@COND_riscv32_efi_TRUE@am__append_5165 = $(nodist_video_module_SOURCES) +-@COND_riscv32_efi_TRUE@am__append_5166 = \ ++@COND_arm64_efi_TRUE@am__append_5153 = video.mod ++@COND_arm64_efi_TRUE@am__append_5154 = video.marker ++@COND_riscv32_efi_TRUE@am__append_5155 = video.module ++@COND_riscv32_efi_TRUE@am__append_5156 = video.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__append_5157 = ++@COND_riscv32_efi_TRUE@am__append_5158 = $(nodist_video_module_SOURCES) ++@COND_riscv32_efi_TRUE@am__append_5159 = \ + @COND_riscv32_efi_TRUE@ $(nodist_video_module_SOURCES) \ + @COND_riscv32_efi_TRUE@ video.marker +-@COND_riscv32_efi_TRUE@am__append_5167 = video.mod +-@COND_riscv32_efi_TRUE@am__append_5168 = video.marker +-@COND_riscv64_efi_TRUE@am__append_5169 = video.module +-@COND_riscv64_efi_TRUE@am__append_5170 = video.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__append_5171 = +-@COND_riscv64_efi_TRUE@am__append_5172 = $(nodist_video_module_SOURCES) +-@COND_riscv64_efi_TRUE@am__append_5173 = \ ++@COND_riscv32_efi_TRUE@am__append_5160 = video.mod ++@COND_riscv32_efi_TRUE@am__append_5161 = video.marker ++@COND_riscv64_efi_TRUE@am__append_5162 = video.module ++@COND_riscv64_efi_TRUE@am__append_5163 = video.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_5164 = ++@COND_riscv64_efi_TRUE@am__append_5165 = $(nodist_video_module_SOURCES) ++@COND_riscv64_efi_TRUE@am__append_5166 = \ + @COND_riscv64_efi_TRUE@ $(nodist_video_module_SOURCES) \ + @COND_riscv64_efi_TRUE@ video.marker +-@COND_riscv64_efi_TRUE@am__append_5174 = video.mod +-@COND_riscv64_efi_TRUE@am__append_5175 = video.marker +-@COND_powerpc_ieee1275_TRUE@am__append_5176 = ieee1275_fb.module +-@COND_powerpc_ieee1275_TRUE@am__append_5177 = ieee1275_fb.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_5167 = video.mod ++@COND_riscv64_efi_TRUE@am__append_5168 = video.marker ++@COND_powerpc_ieee1275_TRUE@am__append_5169 = ieee1275_fb.module ++@COND_powerpc_ieee1275_TRUE@am__append_5170 = ieee1275_fb.module$(EXEEXT) + @COND_powerpc_ieee1275_FALSE@ieee1275_fb_module_DEPENDENCIES = +-@COND_powerpc_ieee1275_TRUE@am__append_5178 = +-@COND_powerpc_ieee1275_TRUE@am__append_5179 = $(nodist_ieee1275_fb_module_SOURCES) +-@COND_powerpc_ieee1275_TRUE@am__append_5180 = $(nodist_ieee1275_fb_module_SOURCES) \ ++@COND_powerpc_ieee1275_TRUE@am__append_5171 = ++@COND_powerpc_ieee1275_TRUE@am__append_5172 = $(nodist_ieee1275_fb_module_SOURCES) ++@COND_powerpc_ieee1275_TRUE@am__append_5173 = $(nodist_ieee1275_fb_module_SOURCES) \ + @COND_powerpc_ieee1275_TRUE@ ieee1275_fb.marker +-@COND_powerpc_ieee1275_TRUE@am__append_5181 = ieee1275_fb.mod +-@COND_powerpc_ieee1275_TRUE@am__append_5182 = ieee1275_fb.marker +-@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_5183 = sdl.module +-@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_5184 = sdl.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__append_5174 = ieee1275_fb.mod ++@COND_powerpc_ieee1275_TRUE@am__append_5175 = ieee1275_fb.marker ++@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_5176 = sdl.module ++@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_5177 = sdl.module$(EXEEXT) + @COND_GRUB_EMU_SDL_FALSE@sdl_module_DEPENDENCIES = + @COND_emu_FALSE@sdl_module_DEPENDENCIES = +-@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_5185 = +-@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_5186 = $(nodist_sdl_module_SOURCES) +-@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_5187 = $(nodist_sdl_module_SOURCES) \ ++@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_5178 = ++@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_5179 = $(nodist_sdl_module_SOURCES) ++@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_5180 = $(nodist_sdl_module_SOURCES) \ + @COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@ sdl.marker +-@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_5188 = sdl.mod +-@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_5189 = sdl.marker +-@COND_i386_ieee1275_TRUE@am__append_5190 = ofnet.module +-@COND_i386_ieee1275_TRUE@am__append_5191 = ofnet.module$(EXEEXT) ++@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_5181 = sdl.mod ++@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_5182 = sdl.marker ++@COND_i386_ieee1275_TRUE@am__append_5183 = ofnet.module ++@COND_i386_ieee1275_TRUE@am__append_5184 = ofnet.module$(EXEEXT) + @COND_i386_ieee1275_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@ofnet_module_DEPENDENCIES = +-@COND_i386_ieee1275_TRUE@am__append_5192 = +-@COND_i386_ieee1275_TRUE@am__append_5193 = $(nodist_ofnet_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_5194 = \ ++@COND_i386_ieee1275_TRUE@am__append_5185 = ++@COND_i386_ieee1275_TRUE@am__append_5186 = $(nodist_ofnet_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_5187 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_ofnet_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ ofnet.marker +-@COND_i386_ieee1275_TRUE@am__append_5195 = ofnet.mod +-@COND_i386_ieee1275_TRUE@am__append_5196 = ofnet.marker +-@COND_sparc64_ieee1275_TRUE@am__append_5197 = ofnet.module +-@COND_sparc64_ieee1275_TRUE@am__append_5198 = ofnet.module$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__append_5199 = +-@COND_sparc64_ieee1275_TRUE@am__append_5200 = $(nodist_ofnet_module_SOURCES) +-@COND_sparc64_ieee1275_TRUE@am__append_5201 = \ ++@COND_i386_ieee1275_TRUE@am__append_5188 = ofnet.mod ++@COND_i386_ieee1275_TRUE@am__append_5189 = ofnet.marker ++@COND_sparc64_ieee1275_TRUE@am__append_5190 = ofnet.module ++@COND_sparc64_ieee1275_TRUE@am__append_5191 = ofnet.module$(EXEEXT) ++@COND_sparc64_ieee1275_TRUE@am__append_5192 = ++@COND_sparc64_ieee1275_TRUE@am__append_5193 = $(nodist_ofnet_module_SOURCES) ++@COND_sparc64_ieee1275_TRUE@am__append_5194 = \ + @COND_sparc64_ieee1275_TRUE@ $(nodist_ofnet_module_SOURCES) \ + @COND_sparc64_ieee1275_TRUE@ ofnet.marker +-@COND_sparc64_ieee1275_TRUE@am__append_5202 = ofnet.mod +-@COND_sparc64_ieee1275_TRUE@am__append_5203 = ofnet.marker +-@COND_powerpc_ieee1275_TRUE@am__append_5204 = ofnet.module +-@COND_powerpc_ieee1275_TRUE@am__append_5205 = ofnet.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__append_5206 = +-@COND_powerpc_ieee1275_TRUE@am__append_5207 = $(nodist_ofnet_module_SOURCES) +-@COND_powerpc_ieee1275_TRUE@am__append_5208 = \ ++@COND_sparc64_ieee1275_TRUE@am__append_5195 = ofnet.mod ++@COND_sparc64_ieee1275_TRUE@am__append_5196 = ofnet.marker ++@COND_powerpc_ieee1275_TRUE@am__append_5197 = ofnet.module ++@COND_powerpc_ieee1275_TRUE@am__append_5198 = ofnet.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__append_5199 = ++@COND_powerpc_ieee1275_TRUE@am__append_5200 = $(nodist_ofnet_module_SOURCES) ++@COND_powerpc_ieee1275_TRUE@am__append_5201 = \ + @COND_powerpc_ieee1275_TRUE@ $(nodist_ofnet_module_SOURCES) \ + @COND_powerpc_ieee1275_TRUE@ ofnet.marker +-@COND_powerpc_ieee1275_TRUE@am__append_5209 = ofnet.mod +-@COND_powerpc_ieee1275_TRUE@am__append_5210 = ofnet.marker +-@COND_arm_uboot_TRUE@am__append_5211 = ubootnet.module +-@COND_arm_uboot_TRUE@am__append_5212 = ubootnet.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__append_5202 = ofnet.mod ++@COND_powerpc_ieee1275_TRUE@am__append_5203 = ofnet.marker ++@COND_arm_uboot_TRUE@am__append_5204 = ubootnet.module ++@COND_arm_uboot_TRUE@am__append_5205 = ubootnet.module$(EXEEXT) + @COND_arm_uboot_FALSE@ubootnet_module_DEPENDENCIES = +-@COND_arm_uboot_TRUE@am__append_5213 = +-@COND_arm_uboot_TRUE@am__append_5214 = $(nodist_ubootnet_module_SOURCES) +-@COND_arm_uboot_TRUE@am__append_5215 = \ ++@COND_arm_uboot_TRUE@am__append_5206 = ++@COND_arm_uboot_TRUE@am__append_5207 = $(nodist_ubootnet_module_SOURCES) ++@COND_arm_uboot_TRUE@am__append_5208 = \ + @COND_arm_uboot_TRUE@ $(nodist_ubootnet_module_SOURCES) \ + @COND_arm_uboot_TRUE@ ubootnet.marker +-@COND_arm_uboot_TRUE@am__append_5216 = ubootnet.mod +-@COND_arm_uboot_TRUE@am__append_5217 = ubootnet.marker +-@COND_i386_efi_TRUE@am__append_5218 = efinet.module +-@COND_i386_efi_TRUE@am__append_5219 = efinet.module$(EXEEXT) ++@COND_arm_uboot_TRUE@am__append_5209 = ubootnet.mod ++@COND_arm_uboot_TRUE@am__append_5210 = ubootnet.marker ++@COND_i386_efi_TRUE@am__append_5211 = efinet.module ++@COND_i386_efi_TRUE@am__append_5212 = efinet.module$(EXEEXT) + @COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_x86_64_efi_FALSE@efinet_module_DEPENDENCIES = +-@COND_i386_efi_TRUE@am__append_5220 = +-@COND_i386_efi_TRUE@am__append_5221 = $(nodist_efinet_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_5222 = $(nodist_efinet_module_SOURCES) \ ++@COND_i386_efi_TRUE@am__append_5213 = ++@COND_i386_efi_TRUE@am__append_5214 = $(nodist_efinet_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_5215 = $(nodist_efinet_module_SOURCES) \ + @COND_i386_efi_TRUE@ efinet.marker +-@COND_i386_efi_TRUE@am__append_5223 = efinet.mod +-@COND_i386_efi_TRUE@am__append_5224 = efinet.marker +-@COND_x86_64_efi_TRUE@am__append_5225 = efinet.module +-@COND_x86_64_efi_TRUE@am__append_5226 = efinet.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_5227 = +-@COND_x86_64_efi_TRUE@am__append_5228 = $(nodist_efinet_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_5229 = \ ++@COND_i386_efi_TRUE@am__append_5216 = efinet.mod ++@COND_i386_efi_TRUE@am__append_5217 = efinet.marker ++@COND_x86_64_efi_TRUE@am__append_5218 = efinet.module ++@COND_x86_64_efi_TRUE@am__append_5219 = efinet.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_5220 = ++@COND_x86_64_efi_TRUE@am__append_5221 = $(nodist_efinet_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_5222 = \ + @COND_x86_64_efi_TRUE@ $(nodist_efinet_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ efinet.marker +-@COND_x86_64_efi_TRUE@am__append_5230 = efinet.mod +-@COND_x86_64_efi_TRUE@am__append_5231 = efinet.marker +-@COND_ia64_efi_TRUE@am__append_5232 = efinet.module +-@COND_ia64_efi_TRUE@am__append_5233 = efinet.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__append_5234 = +-@COND_ia64_efi_TRUE@am__append_5235 = $(nodist_efinet_module_SOURCES) +-@COND_ia64_efi_TRUE@am__append_5236 = $(nodist_efinet_module_SOURCES) \ ++@COND_x86_64_efi_TRUE@am__append_5223 = efinet.mod ++@COND_x86_64_efi_TRUE@am__append_5224 = efinet.marker ++@COND_ia64_efi_TRUE@am__append_5225 = efinet.module ++@COND_ia64_efi_TRUE@am__append_5226 = efinet.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__append_5227 = ++@COND_ia64_efi_TRUE@am__append_5228 = $(nodist_efinet_module_SOURCES) ++@COND_ia64_efi_TRUE@am__append_5229 = $(nodist_efinet_module_SOURCES) \ + @COND_ia64_efi_TRUE@ efinet.marker +-@COND_ia64_efi_TRUE@am__append_5237 = efinet.mod +-@COND_ia64_efi_TRUE@am__append_5238 = efinet.marker +-@COND_arm_efi_TRUE@am__append_5239 = efinet.module +-@COND_arm_efi_TRUE@am__append_5240 = efinet.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__append_5241 = +-@COND_arm_efi_TRUE@am__append_5242 = $(nodist_efinet_module_SOURCES) +-@COND_arm_efi_TRUE@am__append_5243 = $(nodist_efinet_module_SOURCES) \ ++@COND_ia64_efi_TRUE@am__append_5230 = efinet.mod ++@COND_ia64_efi_TRUE@am__append_5231 = efinet.marker ++@COND_arm_efi_TRUE@am__append_5232 = efinet.module ++@COND_arm_efi_TRUE@am__append_5233 = efinet.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__append_5234 = ++@COND_arm_efi_TRUE@am__append_5235 = $(nodist_efinet_module_SOURCES) ++@COND_arm_efi_TRUE@am__append_5236 = $(nodist_efinet_module_SOURCES) \ + @COND_arm_efi_TRUE@ efinet.marker +-@COND_arm_efi_TRUE@am__append_5244 = efinet.mod +-@COND_arm_efi_TRUE@am__append_5245 = efinet.marker +-@COND_arm64_efi_TRUE@am__append_5246 = efinet.module +-@COND_arm64_efi_TRUE@am__append_5247 = efinet.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__append_5248 = +-@COND_arm64_efi_TRUE@am__append_5249 = $(nodist_efinet_module_SOURCES) +-@COND_arm64_efi_TRUE@am__append_5250 = \ ++@COND_arm_efi_TRUE@am__append_5237 = efinet.mod ++@COND_arm_efi_TRUE@am__append_5238 = efinet.marker ++@COND_arm64_efi_TRUE@am__append_5239 = efinet.module ++@COND_arm64_efi_TRUE@am__append_5240 = efinet.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__append_5241 = ++@COND_arm64_efi_TRUE@am__append_5242 = $(nodist_efinet_module_SOURCES) ++@COND_arm64_efi_TRUE@am__append_5243 = \ + @COND_arm64_efi_TRUE@ $(nodist_efinet_module_SOURCES) \ + @COND_arm64_efi_TRUE@ efinet.marker +-@COND_arm64_efi_TRUE@am__append_5251 = efinet.mod +-@COND_arm64_efi_TRUE@am__append_5252 = efinet.marker +-@COND_riscv32_efi_TRUE@am__append_5253 = efinet.module +-@COND_riscv32_efi_TRUE@am__append_5254 = efinet.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__append_5255 = +-@COND_riscv32_efi_TRUE@am__append_5256 = $(nodist_efinet_module_SOURCES) +-@COND_riscv32_efi_TRUE@am__append_5257 = \ ++@COND_arm64_efi_TRUE@am__append_5244 = efinet.mod ++@COND_arm64_efi_TRUE@am__append_5245 = efinet.marker ++@COND_riscv32_efi_TRUE@am__append_5246 = efinet.module ++@COND_riscv32_efi_TRUE@am__append_5247 = efinet.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__append_5248 = ++@COND_riscv32_efi_TRUE@am__append_5249 = $(nodist_efinet_module_SOURCES) ++@COND_riscv32_efi_TRUE@am__append_5250 = \ + @COND_riscv32_efi_TRUE@ $(nodist_efinet_module_SOURCES) \ + @COND_riscv32_efi_TRUE@ efinet.marker +-@COND_riscv32_efi_TRUE@am__append_5258 = efinet.mod +-@COND_riscv32_efi_TRUE@am__append_5259 = efinet.marker +-@COND_riscv64_efi_TRUE@am__append_5260 = efinet.module +-@COND_riscv64_efi_TRUE@am__append_5261 = efinet.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__append_5262 = +-@COND_riscv64_efi_TRUE@am__append_5263 = $(nodist_efinet_module_SOURCES) +-@COND_riscv64_efi_TRUE@am__append_5264 = \ ++@COND_riscv32_efi_TRUE@am__append_5251 = efinet.mod ++@COND_riscv32_efi_TRUE@am__append_5252 = efinet.marker ++@COND_riscv64_efi_TRUE@am__append_5253 = efinet.module ++@COND_riscv64_efi_TRUE@am__append_5254 = efinet.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__append_5255 = ++@COND_riscv64_efi_TRUE@am__append_5256 = $(nodist_efinet_module_SOURCES) ++@COND_riscv64_efi_TRUE@am__append_5257 = \ + @COND_riscv64_efi_TRUE@ $(nodist_efinet_module_SOURCES) \ + @COND_riscv64_efi_TRUE@ efinet.marker +-@COND_riscv64_efi_TRUE@am__append_5265 = efinet.mod +-@COND_riscv64_efi_TRUE@am__append_5266 = efinet.marker +-@COND_emu_TRUE@am__append_5267 = emunet.module legacycfg.module +-@COND_emu_TRUE@am__append_5268 = emunet.module$(EXEEXT) \ ++@COND_riscv64_efi_TRUE@am__append_5258 = efinet.mod ++@COND_riscv64_efi_TRUE@am__append_5259 = efinet.marker ++@COND_emu_TRUE@am__append_5260 = emunet.module legacycfg.module ++@COND_emu_TRUE@am__append_5261 = emunet.module$(EXEEXT) \ + @COND_emu_TRUE@ legacycfg.module$(EXEEXT) + @COND_emu_FALSE@emunet_module_DEPENDENCIES = +-@COND_emu_TRUE@am__append_5269 = +-@COND_emu_TRUE@am__append_5270 = $(nodist_emunet_module_SOURCES) \ ++@COND_emu_TRUE@am__append_5262 = ++@COND_emu_TRUE@am__append_5263 = $(nodist_emunet_module_SOURCES) \ + @COND_emu_TRUE@ $(nodist_legacycfg_module_SOURCES) +-@COND_emu_TRUE@am__append_5271 = $(nodist_emunet_module_SOURCES) \ ++@COND_emu_TRUE@am__append_5264 = $(nodist_emunet_module_SOURCES) \ + @COND_emu_TRUE@ emunet.marker \ + @COND_emu_TRUE@ $(nodist_legacycfg_module_SOURCES) \ + @COND_emu_TRUE@ legacycfg.marker +-@COND_emu_TRUE@am__append_5272 = emunet.mod legacycfg.mod +-@COND_emu_TRUE@am__append_5273 = emunet.marker legacycfg.marker ++@COND_emu_TRUE@am__append_5265 = emunet.mod legacycfg.mod ++@COND_emu_TRUE@am__append_5266 = emunet.marker legacycfg.marker + @COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@legacycfg_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_5274 = legacycfg.module +-@COND_i386_pc_TRUE@am__append_5275 = legacycfg.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__append_5276 = +-@COND_i386_pc_TRUE@am__append_5277 = $(nodist_legacycfg_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_5278 = \ ++@COND_i386_pc_TRUE@am__append_5267 = legacycfg.module ++@COND_i386_pc_TRUE@am__append_5268 = legacycfg.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__append_5269 = ++@COND_i386_pc_TRUE@am__append_5270 = $(nodist_legacycfg_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_5271 = \ + @COND_i386_pc_TRUE@ $(nodist_legacycfg_module_SOURCES) \ + @COND_i386_pc_TRUE@ legacycfg.marker +-@COND_i386_pc_TRUE@am__append_5279 = legacycfg.mod +-@COND_i386_pc_TRUE@am__append_5280 = legacycfg.marker +-@COND_i386_efi_TRUE@am__append_5281 = legacycfg.module +-@COND_i386_efi_TRUE@am__append_5282 = legacycfg.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_5283 = +-@COND_i386_efi_TRUE@am__append_5284 = $(nodist_legacycfg_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_5285 = \ ++@COND_i386_pc_TRUE@am__append_5272 = legacycfg.mod ++@COND_i386_pc_TRUE@am__append_5273 = legacycfg.marker ++@COND_i386_efi_TRUE@am__append_5274 = legacycfg.module ++@COND_i386_efi_TRUE@am__append_5275 = legacycfg.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_5276 = ++@COND_i386_efi_TRUE@am__append_5277 = $(nodist_legacycfg_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_5278 = \ + @COND_i386_efi_TRUE@ $(nodist_legacycfg_module_SOURCES) \ + @COND_i386_efi_TRUE@ legacycfg.marker +-@COND_i386_efi_TRUE@am__append_5286 = legacycfg.mod +-@COND_i386_efi_TRUE@am__append_5287 = legacycfg.marker +-@COND_x86_64_efi_TRUE@am__append_5288 = legacycfg.module +-@COND_x86_64_efi_TRUE@am__append_5289 = legacycfg.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_5290 = +-@COND_x86_64_efi_TRUE@am__append_5291 = $(nodist_legacycfg_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_5292 = \ ++@COND_i386_efi_TRUE@am__append_5279 = legacycfg.mod ++@COND_i386_efi_TRUE@am__append_5280 = legacycfg.marker ++@COND_x86_64_efi_TRUE@am__append_5281 = legacycfg.module ++@COND_x86_64_efi_TRUE@am__append_5282 = legacycfg.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_5283 = ++@COND_x86_64_efi_TRUE@am__append_5284 = $(nodist_legacycfg_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_5285 = \ + @COND_x86_64_efi_TRUE@ $(nodist_legacycfg_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ legacycfg.marker +-@COND_x86_64_efi_TRUE@am__append_5293 = legacycfg.mod +-@COND_x86_64_efi_TRUE@am__append_5294 = legacycfg.marker +-@COND_i386_xen_TRUE@am__append_5295 = legacycfg.module +-@COND_i386_xen_TRUE@am__append_5296 = legacycfg.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__append_5297 = +-@COND_i386_xen_TRUE@am__append_5298 = $(nodist_legacycfg_module_SOURCES) +-@COND_i386_xen_TRUE@am__append_5299 = \ ++@COND_x86_64_efi_TRUE@am__append_5286 = legacycfg.mod ++@COND_x86_64_efi_TRUE@am__append_5287 = legacycfg.marker ++@COND_i386_xen_TRUE@am__append_5288 = legacycfg.module ++@COND_i386_xen_TRUE@am__append_5289 = legacycfg.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__append_5290 = ++@COND_i386_xen_TRUE@am__append_5291 = $(nodist_legacycfg_module_SOURCES) ++@COND_i386_xen_TRUE@am__append_5292 = \ + @COND_i386_xen_TRUE@ $(nodist_legacycfg_module_SOURCES) \ + @COND_i386_xen_TRUE@ legacycfg.marker +-@COND_i386_xen_TRUE@am__append_5300 = legacycfg.mod +-@COND_i386_xen_TRUE@am__append_5301 = legacycfg.marker +-@COND_x86_64_xen_TRUE@am__append_5302 = legacycfg.module +-@COND_x86_64_xen_TRUE@am__append_5303 = legacycfg.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__append_5304 = +-@COND_x86_64_xen_TRUE@am__append_5305 = $(nodist_legacycfg_module_SOURCES) +-@COND_x86_64_xen_TRUE@am__append_5306 = \ ++@COND_i386_xen_TRUE@am__append_5293 = legacycfg.mod ++@COND_i386_xen_TRUE@am__append_5294 = legacycfg.marker ++@COND_x86_64_xen_TRUE@am__append_5295 = legacycfg.module ++@COND_x86_64_xen_TRUE@am__append_5296 = legacycfg.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__append_5297 = ++@COND_x86_64_xen_TRUE@am__append_5298 = $(nodist_legacycfg_module_SOURCES) ++@COND_x86_64_xen_TRUE@am__append_5299 = \ + @COND_x86_64_xen_TRUE@ $(nodist_legacycfg_module_SOURCES) \ + @COND_x86_64_xen_TRUE@ legacycfg.marker +-@COND_x86_64_xen_TRUE@am__append_5307 = legacycfg.mod +-@COND_x86_64_xen_TRUE@am__append_5308 = legacycfg.marker +-@COND_i386_xen_pvh_TRUE@am__append_5309 = legacycfg.module +-@COND_i386_xen_pvh_TRUE@am__append_5310 = legacycfg.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__append_5311 = +-@COND_i386_xen_pvh_TRUE@am__append_5312 = $(nodist_legacycfg_module_SOURCES) +-@COND_i386_xen_pvh_TRUE@am__append_5313 = \ ++@COND_x86_64_xen_TRUE@am__append_5300 = legacycfg.mod ++@COND_x86_64_xen_TRUE@am__append_5301 = legacycfg.marker ++@COND_i386_xen_pvh_TRUE@am__append_5302 = legacycfg.module ++@COND_i386_xen_pvh_TRUE@am__append_5303 = legacycfg.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__append_5304 = ++@COND_i386_xen_pvh_TRUE@am__append_5305 = $(nodist_legacycfg_module_SOURCES) ++@COND_i386_xen_pvh_TRUE@am__append_5306 = \ + @COND_i386_xen_pvh_TRUE@ $(nodist_legacycfg_module_SOURCES) \ + @COND_i386_xen_pvh_TRUE@ legacycfg.marker +-@COND_i386_xen_pvh_TRUE@am__append_5314 = legacycfg.mod +-@COND_i386_xen_pvh_TRUE@am__append_5315 = legacycfg.marker +-@COND_i386_pc_TRUE@am__append_5316 = backtrace.module +-@COND_i386_pc_TRUE@am__append_5317 = backtrace.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__append_5307 = legacycfg.mod ++@COND_i386_xen_pvh_TRUE@am__append_5308 = legacycfg.marker ++@COND_i386_pc_TRUE@am__append_5309 = backtrace.module ++@COND_i386_pc_TRUE@am__append_5310 = backtrace.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@backtrace_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_5318 = +-@COND_i386_pc_TRUE@am__append_5319 = $(nodist_backtrace_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_5320 = \ ++@COND_i386_pc_TRUE@am__append_5311 = ++@COND_i386_pc_TRUE@am__append_5312 = $(nodist_backtrace_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_5313 = \ + @COND_i386_pc_TRUE@ $(nodist_backtrace_module_SOURCES) \ + @COND_i386_pc_TRUE@ backtrace.marker +-@COND_i386_pc_TRUE@am__append_5321 = backtrace.mod +-@COND_i386_pc_TRUE@am__append_5322 = backtrace.marker +-@COND_i386_efi_TRUE@am__append_5323 = backtrace.module +-@COND_i386_efi_TRUE@am__append_5324 = backtrace.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_5325 = +-@COND_i386_efi_TRUE@am__append_5326 = $(nodist_backtrace_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_5327 = \ ++@COND_i386_pc_TRUE@am__append_5314 = backtrace.mod ++@COND_i386_pc_TRUE@am__append_5315 = backtrace.marker ++@COND_i386_efi_TRUE@am__append_5316 = backtrace.module ++@COND_i386_efi_TRUE@am__append_5317 = backtrace.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_5318 = ++@COND_i386_efi_TRUE@am__append_5319 = $(nodist_backtrace_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_5320 = \ + @COND_i386_efi_TRUE@ $(nodist_backtrace_module_SOURCES) \ + @COND_i386_efi_TRUE@ backtrace.marker +-@COND_i386_efi_TRUE@am__append_5328 = backtrace.mod +-@COND_i386_efi_TRUE@am__append_5329 = backtrace.marker +-@COND_i386_qemu_TRUE@am__append_5330 = backtrace.module +-@COND_i386_qemu_TRUE@am__append_5331 = backtrace.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_5332 = +-@COND_i386_qemu_TRUE@am__append_5333 = $(nodist_backtrace_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_5334 = \ ++@COND_i386_efi_TRUE@am__append_5321 = backtrace.mod ++@COND_i386_efi_TRUE@am__append_5322 = backtrace.marker ++@COND_i386_qemu_TRUE@am__append_5323 = backtrace.module ++@COND_i386_qemu_TRUE@am__append_5324 = backtrace.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_5325 = ++@COND_i386_qemu_TRUE@am__append_5326 = $(nodist_backtrace_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_5327 = \ + @COND_i386_qemu_TRUE@ $(nodist_backtrace_module_SOURCES) \ + @COND_i386_qemu_TRUE@ backtrace.marker +-@COND_i386_qemu_TRUE@am__append_5335 = backtrace.mod +-@COND_i386_qemu_TRUE@am__append_5336 = backtrace.marker +-@COND_i386_coreboot_TRUE@am__append_5337 = backtrace.module +-@COND_i386_coreboot_TRUE@am__append_5338 = backtrace.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_5339 = +-@COND_i386_coreboot_TRUE@am__append_5340 = $(nodist_backtrace_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_5341 = \ ++@COND_i386_qemu_TRUE@am__append_5328 = backtrace.mod ++@COND_i386_qemu_TRUE@am__append_5329 = backtrace.marker ++@COND_i386_coreboot_TRUE@am__append_5330 = backtrace.module ++@COND_i386_coreboot_TRUE@am__append_5331 = backtrace.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_5332 = ++@COND_i386_coreboot_TRUE@am__append_5333 = $(nodist_backtrace_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_5334 = \ + @COND_i386_coreboot_TRUE@ $(nodist_backtrace_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ backtrace.marker +-@COND_i386_coreboot_TRUE@am__append_5342 = backtrace.mod +-@COND_i386_coreboot_TRUE@am__append_5343 = backtrace.marker +-@COND_i386_multiboot_TRUE@am__append_5344 = backtrace.module +-@COND_i386_multiboot_TRUE@am__append_5345 = backtrace.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_5346 = +-@COND_i386_multiboot_TRUE@am__append_5347 = $(nodist_backtrace_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_5348 = \ ++@COND_i386_coreboot_TRUE@am__append_5335 = backtrace.mod ++@COND_i386_coreboot_TRUE@am__append_5336 = backtrace.marker ++@COND_i386_multiboot_TRUE@am__append_5337 = backtrace.module ++@COND_i386_multiboot_TRUE@am__append_5338 = backtrace.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_5339 = ++@COND_i386_multiboot_TRUE@am__append_5340 = $(nodist_backtrace_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_5341 = \ + @COND_i386_multiboot_TRUE@ $(nodist_backtrace_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ backtrace.marker +-@COND_i386_multiboot_TRUE@am__append_5349 = backtrace.mod +-@COND_i386_multiboot_TRUE@am__append_5350 = backtrace.marker +-@COND_i386_ieee1275_TRUE@am__append_5351 = backtrace.module +-@COND_i386_ieee1275_TRUE@am__append_5352 = backtrace.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_5353 = +-@COND_i386_ieee1275_TRUE@am__append_5354 = $(nodist_backtrace_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_5355 = \ ++@COND_i386_multiboot_TRUE@am__append_5342 = backtrace.mod ++@COND_i386_multiboot_TRUE@am__append_5343 = backtrace.marker ++@COND_i386_ieee1275_TRUE@am__append_5344 = backtrace.module ++@COND_i386_ieee1275_TRUE@am__append_5345 = backtrace.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_5346 = ++@COND_i386_ieee1275_TRUE@am__append_5347 = $(nodist_backtrace_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_5348 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_backtrace_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ backtrace.marker +-@COND_i386_ieee1275_TRUE@am__append_5356 = backtrace.mod +-@COND_i386_ieee1275_TRUE@am__append_5357 = backtrace.marker +-@COND_x86_64_efi_TRUE@am__append_5358 = backtrace.module +-@COND_x86_64_efi_TRUE@am__append_5359 = backtrace.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_5360 = +-@COND_x86_64_efi_TRUE@am__append_5361 = $(nodist_backtrace_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_5362 = \ ++@COND_i386_ieee1275_TRUE@am__append_5349 = backtrace.mod ++@COND_i386_ieee1275_TRUE@am__append_5350 = backtrace.marker ++@COND_x86_64_efi_TRUE@am__append_5351 = backtrace.module ++@COND_x86_64_efi_TRUE@am__append_5352 = backtrace.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_5353 = ++@COND_x86_64_efi_TRUE@am__append_5354 = $(nodist_backtrace_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_5355 = \ + @COND_x86_64_efi_TRUE@ $(nodist_backtrace_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ backtrace.marker +-@COND_x86_64_efi_TRUE@am__append_5363 = backtrace.mod +-@COND_x86_64_efi_TRUE@am__append_5364 = backtrace.marker +-@COND_i386_xen_TRUE@am__append_5365 = backtrace.module +-@COND_i386_xen_TRUE@am__append_5366 = backtrace.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__append_5367 = +-@COND_i386_xen_TRUE@am__append_5368 = $(nodist_backtrace_module_SOURCES) +-@COND_i386_xen_TRUE@am__append_5369 = \ ++@COND_x86_64_efi_TRUE@am__append_5356 = backtrace.mod ++@COND_x86_64_efi_TRUE@am__append_5357 = backtrace.marker ++@COND_i386_xen_TRUE@am__append_5358 = backtrace.module ++@COND_i386_xen_TRUE@am__append_5359 = backtrace.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__append_5360 = ++@COND_i386_xen_TRUE@am__append_5361 = $(nodist_backtrace_module_SOURCES) ++@COND_i386_xen_TRUE@am__append_5362 = \ + @COND_i386_xen_TRUE@ $(nodist_backtrace_module_SOURCES) \ + @COND_i386_xen_TRUE@ backtrace.marker +-@COND_i386_xen_TRUE@am__append_5370 = backtrace.mod +-@COND_i386_xen_TRUE@am__append_5371 = backtrace.marker +-@COND_x86_64_xen_TRUE@am__append_5372 = backtrace.module +-@COND_x86_64_xen_TRUE@am__append_5373 = backtrace.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__append_5374 = +-@COND_x86_64_xen_TRUE@am__append_5375 = $(nodist_backtrace_module_SOURCES) +-@COND_x86_64_xen_TRUE@am__append_5376 = \ ++@COND_i386_xen_TRUE@am__append_5363 = backtrace.mod ++@COND_i386_xen_TRUE@am__append_5364 = backtrace.marker ++@COND_x86_64_xen_TRUE@am__append_5365 = backtrace.module ++@COND_x86_64_xen_TRUE@am__append_5366 = backtrace.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__append_5367 = ++@COND_x86_64_xen_TRUE@am__append_5368 = $(nodist_backtrace_module_SOURCES) ++@COND_x86_64_xen_TRUE@am__append_5369 = \ + @COND_x86_64_xen_TRUE@ $(nodist_backtrace_module_SOURCES) \ + @COND_x86_64_xen_TRUE@ backtrace.marker +-@COND_x86_64_xen_TRUE@am__append_5377 = backtrace.mod +-@COND_x86_64_xen_TRUE@am__append_5378 = backtrace.marker +-@COND_i386_xen_pvh_TRUE@am__append_5379 = backtrace.module +-@COND_i386_xen_pvh_TRUE@am__append_5380 = backtrace.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__append_5381 = +-@COND_i386_xen_pvh_TRUE@am__append_5382 = $(nodist_backtrace_module_SOURCES) +-@COND_i386_xen_pvh_TRUE@am__append_5383 = \ ++@COND_x86_64_xen_TRUE@am__append_5370 = backtrace.mod ++@COND_x86_64_xen_TRUE@am__append_5371 = backtrace.marker ++@COND_i386_xen_pvh_TRUE@am__append_5372 = backtrace.module ++@COND_i386_xen_pvh_TRUE@am__append_5373 = backtrace.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__append_5374 = ++@COND_i386_xen_pvh_TRUE@am__append_5375 = $(nodist_backtrace_module_SOURCES) ++@COND_i386_xen_pvh_TRUE@am__append_5376 = \ + @COND_i386_xen_pvh_TRUE@ $(nodist_backtrace_module_SOURCES) \ + @COND_i386_xen_pvh_TRUE@ backtrace.marker +-@COND_i386_xen_pvh_TRUE@am__append_5384 = backtrace.mod +-@COND_i386_xen_pvh_TRUE@am__append_5385 = backtrace.marker +-@COND_i386_pc_TRUE@am__append_5386 = lsapm.module keylayouts.module +-@COND_i386_pc_TRUE@am__append_5387 = lsapm.module$(EXEEXT) \ ++@COND_i386_xen_pvh_TRUE@am__append_5377 = backtrace.mod ++@COND_i386_xen_pvh_TRUE@am__append_5378 = backtrace.marker ++@COND_i386_pc_TRUE@am__append_5379 = lsapm.module keylayouts.module ++@COND_i386_pc_TRUE@am__append_5380 = lsapm.module$(EXEEXT) \ + @COND_i386_pc_TRUE@ keylayouts.module$(EXEEXT) + @COND_i386_pc_FALSE@lsapm_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_5388 = +-@COND_i386_pc_TRUE@am__append_5389 = $(nodist_lsapm_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_5381 = ++@COND_i386_pc_TRUE@am__append_5382 = $(nodist_lsapm_module_SOURCES) \ + @COND_i386_pc_TRUE@ $(nodist_keylayouts_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_5390 = $(nodist_lsapm_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_5383 = $(nodist_lsapm_module_SOURCES) \ + @COND_i386_pc_TRUE@ lsapm.marker \ + @COND_i386_pc_TRUE@ $(nodist_keylayouts_module_SOURCES) \ + @COND_i386_pc_TRUE@ keylayouts.marker +-@COND_i386_pc_TRUE@am__append_5391 = lsapm.mod keylayouts.mod +-@COND_i386_pc_TRUE@am__append_5392 = lsapm.marker keylayouts.marker ++@COND_i386_pc_TRUE@am__append_5384 = lsapm.mod keylayouts.mod ++@COND_i386_pc_TRUE@am__append_5385 = lsapm.marker keylayouts.marker + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@keylayouts_module_DEPENDENCIES = +-@COND_i386_efi_TRUE@am__append_5393 = keylayouts.module +-@COND_i386_efi_TRUE@am__append_5394 = keylayouts.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_5395 = +-@COND_i386_efi_TRUE@am__append_5396 = $(nodist_keylayouts_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_5397 = \ ++@COND_i386_efi_TRUE@am__append_5386 = keylayouts.module ++@COND_i386_efi_TRUE@am__append_5387 = keylayouts.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_5388 = ++@COND_i386_efi_TRUE@am__append_5389 = $(nodist_keylayouts_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_5390 = \ + @COND_i386_efi_TRUE@ $(nodist_keylayouts_module_SOURCES) \ + @COND_i386_efi_TRUE@ keylayouts.marker +-@COND_i386_efi_TRUE@am__append_5398 = keylayouts.mod +-@COND_i386_efi_TRUE@am__append_5399 = keylayouts.marker +-@COND_i386_qemu_TRUE@am__append_5400 = keylayouts.module +-@COND_i386_qemu_TRUE@am__append_5401 = keylayouts.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_5402 = +-@COND_i386_qemu_TRUE@am__append_5403 = $(nodist_keylayouts_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_5404 = \ ++@COND_i386_efi_TRUE@am__append_5391 = keylayouts.mod ++@COND_i386_efi_TRUE@am__append_5392 = keylayouts.marker ++@COND_i386_qemu_TRUE@am__append_5393 = keylayouts.module ++@COND_i386_qemu_TRUE@am__append_5394 = keylayouts.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_5395 = ++@COND_i386_qemu_TRUE@am__append_5396 = $(nodist_keylayouts_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_5397 = \ + @COND_i386_qemu_TRUE@ $(nodist_keylayouts_module_SOURCES) \ + @COND_i386_qemu_TRUE@ keylayouts.marker +-@COND_i386_qemu_TRUE@am__append_5405 = keylayouts.mod +-@COND_i386_qemu_TRUE@am__append_5406 = keylayouts.marker +-@COND_i386_coreboot_TRUE@am__append_5407 = keylayouts.module +-@COND_i386_coreboot_TRUE@am__append_5408 = keylayouts.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_5409 = +-@COND_i386_coreboot_TRUE@am__append_5410 = $(nodist_keylayouts_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_5411 = \ ++@COND_i386_qemu_TRUE@am__append_5398 = keylayouts.mod ++@COND_i386_qemu_TRUE@am__append_5399 = keylayouts.marker ++@COND_i386_coreboot_TRUE@am__append_5400 = keylayouts.module ++@COND_i386_coreboot_TRUE@am__append_5401 = keylayouts.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_5402 = ++@COND_i386_coreboot_TRUE@am__append_5403 = $(nodist_keylayouts_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_5404 = \ + @COND_i386_coreboot_TRUE@ $(nodist_keylayouts_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ keylayouts.marker +-@COND_i386_coreboot_TRUE@am__append_5412 = keylayouts.mod +-@COND_i386_coreboot_TRUE@am__append_5413 = keylayouts.marker +-@COND_i386_multiboot_TRUE@am__append_5414 = keylayouts.module +-@COND_i386_multiboot_TRUE@am__append_5415 = keylayouts.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_5416 = +-@COND_i386_multiboot_TRUE@am__append_5417 = $(nodist_keylayouts_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_5418 = \ ++@COND_i386_coreboot_TRUE@am__append_5405 = keylayouts.mod ++@COND_i386_coreboot_TRUE@am__append_5406 = keylayouts.marker ++@COND_i386_multiboot_TRUE@am__append_5407 = keylayouts.module ++@COND_i386_multiboot_TRUE@am__append_5408 = keylayouts.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_5409 = ++@COND_i386_multiboot_TRUE@am__append_5410 = $(nodist_keylayouts_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_5411 = \ + @COND_i386_multiboot_TRUE@ $(nodist_keylayouts_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ keylayouts.marker +-@COND_i386_multiboot_TRUE@am__append_5419 = keylayouts.mod +-@COND_i386_multiboot_TRUE@am__append_5420 = keylayouts.marker +-@COND_i386_ieee1275_TRUE@am__append_5421 = keylayouts.module +-@COND_i386_ieee1275_TRUE@am__append_5422 = keylayouts.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_5423 = +-@COND_i386_ieee1275_TRUE@am__append_5424 = $(nodist_keylayouts_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_5425 = \ ++@COND_i386_multiboot_TRUE@am__append_5412 = keylayouts.mod ++@COND_i386_multiboot_TRUE@am__append_5413 = keylayouts.marker ++@COND_i386_ieee1275_TRUE@am__append_5414 = keylayouts.module ++@COND_i386_ieee1275_TRUE@am__append_5415 = keylayouts.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_5416 = ++@COND_i386_ieee1275_TRUE@am__append_5417 = $(nodist_keylayouts_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_5418 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_keylayouts_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ keylayouts.marker +-@COND_i386_ieee1275_TRUE@am__append_5426 = keylayouts.mod +-@COND_i386_ieee1275_TRUE@am__append_5427 = keylayouts.marker +-@COND_x86_64_efi_TRUE@am__append_5428 = keylayouts.module +-@COND_x86_64_efi_TRUE@am__append_5429 = keylayouts.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_5430 = +-@COND_x86_64_efi_TRUE@am__append_5431 = $(nodist_keylayouts_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_5432 = \ ++@COND_i386_ieee1275_TRUE@am__append_5419 = keylayouts.mod ++@COND_i386_ieee1275_TRUE@am__append_5420 = keylayouts.marker ++@COND_x86_64_efi_TRUE@am__append_5421 = keylayouts.module ++@COND_x86_64_efi_TRUE@am__append_5422 = keylayouts.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_5423 = ++@COND_x86_64_efi_TRUE@am__append_5424 = $(nodist_keylayouts_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_5425 = \ + @COND_x86_64_efi_TRUE@ $(nodist_keylayouts_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ keylayouts.marker +-@COND_x86_64_efi_TRUE@am__append_5433 = keylayouts.mod +-@COND_x86_64_efi_TRUE@am__append_5434 = keylayouts.marker +-@COND_ENABLE_CACHE_STATS_TRUE@am__append_5435 = cacheinfo.module +-@COND_ENABLE_CACHE_STATS_TRUE@am__append_5436 = cacheinfo.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_5426 = keylayouts.mod ++@COND_x86_64_efi_TRUE@am__append_5427 = keylayouts.marker ++@COND_ENABLE_CACHE_STATS_TRUE@am__append_5428 = cacheinfo.module ++@COND_ENABLE_CACHE_STATS_TRUE@am__append_5429 = cacheinfo.module$(EXEEXT) + @COND_ENABLE_CACHE_STATS_FALSE@cacheinfo_module_DEPENDENCIES = +-@COND_ENABLE_CACHE_STATS_TRUE@am__append_5437 = +-@COND_ENABLE_CACHE_STATS_TRUE@am__append_5438 = $(nodist_cacheinfo_module_SOURCES) +-@COND_ENABLE_CACHE_STATS_TRUE@am__append_5439 = $(nodist_cacheinfo_module_SOURCES) \ ++@COND_ENABLE_CACHE_STATS_TRUE@am__append_5430 = ++@COND_ENABLE_CACHE_STATS_TRUE@am__append_5431 = $(nodist_cacheinfo_module_SOURCES) ++@COND_ENABLE_CACHE_STATS_TRUE@am__append_5432 = $(nodist_cacheinfo_module_SOURCES) \ + @COND_ENABLE_CACHE_STATS_TRUE@ cacheinfo.marker +-@COND_ENABLE_CACHE_STATS_TRUE@am__append_5440 = cacheinfo.mod +-@COND_ENABLE_CACHE_STATS_TRUE@am__append_5441 = cacheinfo.marker +-@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__append_5442 = boottime.module +-@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__append_5443 = boottime.module$(EXEEXT) ++@COND_ENABLE_CACHE_STATS_TRUE@am__append_5433 = cacheinfo.mod ++@COND_ENABLE_CACHE_STATS_TRUE@am__append_5434 = cacheinfo.marker ++@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__append_5435 = boottime.module ++@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__append_5436 = boottime.module$(EXEEXT) + @COND_ENABLE_BOOT_TIME_STATS_FALSE@boottime_module_DEPENDENCIES = +-@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__append_5444 = +-@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__append_5445 = $(nodist_boottime_module_SOURCES) +-@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__append_5446 = $(nodist_boottime_module_SOURCES) \ ++@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__append_5437 = ++@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__append_5438 = $(nodist_boottime_module_SOURCES) ++@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__append_5439 = $(nodist_boottime_module_SOURCES) \ + @COND_ENABLE_BOOT_TIME_STATS_TRUE@ boottime.marker +-@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__append_5447 = boottime.mod +-@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__append_5448 = boottime.marker +-@COND_i386_pc_TRUE@am__append_5449 = gdb.module +-@COND_i386_pc_TRUE@am__append_5450 = gdb.module$(EXEEXT) ++@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__append_5440 = boottime.mod ++@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__append_5441 = boottime.marker ++@COND_i386_pc_TRUE@am__append_5442 = gdb.module ++@COND_i386_pc_TRUE@am__append_5443 = gdb.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@gdb_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_5451 = +-@COND_i386_pc_TRUE@am__append_5452 = $(nodist_gdb_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_5453 = $(nodist_gdb_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_5444 = ++@COND_i386_pc_TRUE@am__append_5445 = $(nodist_gdb_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_5446 = $(nodist_gdb_module_SOURCES) \ + @COND_i386_pc_TRUE@ gdb.marker +-@COND_i386_pc_TRUE@am__append_5454 = gdb.mod +-@COND_i386_pc_TRUE@am__append_5455 = gdb.marker +-@COND_i386_efi_TRUE@am__append_5456 = gdb.module +-@COND_i386_efi_TRUE@am__append_5457 = gdb.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_5458 = +-@COND_i386_efi_TRUE@am__append_5459 = $(nodist_gdb_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_5460 = $(nodist_gdb_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_5447 = gdb.mod ++@COND_i386_pc_TRUE@am__append_5448 = gdb.marker ++@COND_i386_efi_TRUE@am__append_5449 = gdb.module ++@COND_i386_efi_TRUE@am__append_5450 = gdb.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_5451 = ++@COND_i386_efi_TRUE@am__append_5452 = $(nodist_gdb_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_5453 = $(nodist_gdb_module_SOURCES) \ + @COND_i386_efi_TRUE@ gdb.marker +-@COND_i386_efi_TRUE@am__append_5461 = gdb.mod +-@COND_i386_efi_TRUE@am__append_5462 = gdb.marker +-@COND_i386_qemu_TRUE@am__append_5463 = gdb.module +-@COND_i386_qemu_TRUE@am__append_5464 = gdb.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_5465 = +-@COND_i386_qemu_TRUE@am__append_5466 = $(nodist_gdb_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_5467 = $(nodist_gdb_module_SOURCES) \ ++@COND_i386_efi_TRUE@am__append_5454 = gdb.mod ++@COND_i386_efi_TRUE@am__append_5455 = gdb.marker ++@COND_i386_qemu_TRUE@am__append_5456 = gdb.module ++@COND_i386_qemu_TRUE@am__append_5457 = gdb.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_5458 = ++@COND_i386_qemu_TRUE@am__append_5459 = $(nodist_gdb_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_5460 = $(nodist_gdb_module_SOURCES) \ + @COND_i386_qemu_TRUE@ gdb.marker +-@COND_i386_qemu_TRUE@am__append_5468 = gdb.mod +-@COND_i386_qemu_TRUE@am__append_5469 = gdb.marker +-@COND_i386_coreboot_TRUE@am__append_5470 = gdb.module +-@COND_i386_coreboot_TRUE@am__append_5471 = gdb.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_5472 = +-@COND_i386_coreboot_TRUE@am__append_5473 = $(nodist_gdb_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_5474 = \ ++@COND_i386_qemu_TRUE@am__append_5461 = gdb.mod ++@COND_i386_qemu_TRUE@am__append_5462 = gdb.marker ++@COND_i386_coreboot_TRUE@am__append_5463 = gdb.module ++@COND_i386_coreboot_TRUE@am__append_5464 = gdb.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_5465 = ++@COND_i386_coreboot_TRUE@am__append_5466 = $(nodist_gdb_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_5467 = \ + @COND_i386_coreboot_TRUE@ $(nodist_gdb_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ gdb.marker +-@COND_i386_coreboot_TRUE@am__append_5475 = gdb.mod +-@COND_i386_coreboot_TRUE@am__append_5476 = gdb.marker +-@COND_i386_multiboot_TRUE@am__append_5477 = gdb.module +-@COND_i386_multiboot_TRUE@am__append_5478 = gdb.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_5479 = +-@COND_i386_multiboot_TRUE@am__append_5480 = $(nodist_gdb_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_5481 = \ ++@COND_i386_coreboot_TRUE@am__append_5468 = gdb.mod ++@COND_i386_coreboot_TRUE@am__append_5469 = gdb.marker ++@COND_i386_multiboot_TRUE@am__append_5470 = gdb.module ++@COND_i386_multiboot_TRUE@am__append_5471 = gdb.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_5472 = ++@COND_i386_multiboot_TRUE@am__append_5473 = $(nodist_gdb_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_5474 = \ + @COND_i386_multiboot_TRUE@ $(nodist_gdb_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ gdb.marker +-@COND_i386_multiboot_TRUE@am__append_5482 = gdb.mod +-@COND_i386_multiboot_TRUE@am__append_5483 = gdb.marker +-@COND_i386_ieee1275_TRUE@am__append_5484 = gdb.module +-@COND_i386_ieee1275_TRUE@am__append_5485 = gdb.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_5486 = +-@COND_i386_ieee1275_TRUE@am__append_5487 = $(nodist_gdb_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_5488 = \ ++@COND_i386_multiboot_TRUE@am__append_5475 = gdb.mod ++@COND_i386_multiboot_TRUE@am__append_5476 = gdb.marker ++@COND_i386_ieee1275_TRUE@am__append_5477 = gdb.module ++@COND_i386_ieee1275_TRUE@am__append_5478 = gdb.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_5479 = ++@COND_i386_ieee1275_TRUE@am__append_5480 = $(nodist_gdb_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_5481 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_gdb_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ gdb.marker +-@COND_i386_ieee1275_TRUE@am__append_5489 = gdb.mod +-@COND_i386_ieee1275_TRUE@am__append_5490 = gdb.marker +-@COND_x86_64_efi_TRUE@am__append_5491 = tpm.module +-@COND_x86_64_efi_TRUE@am__append_5492 = tpm.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_5482 = gdb.mod ++@COND_i386_ieee1275_TRUE@am__append_5483 = gdb.marker ++@COND_x86_64_efi_TRUE@am__append_5484 = tpm.module ++@COND_x86_64_efi_TRUE@am__append_5485 = tpm.module$(EXEEXT) + @COND_x86_64_efi_FALSE@tpm_module_DEPENDENCIES = +-@COND_x86_64_efi_TRUE@am__append_5493 = +-@COND_x86_64_efi_TRUE@am__append_5494 = $(nodist_tpm_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_5495 = $(nodist_tpm_module_SOURCES) \ ++@COND_x86_64_efi_TRUE@am__append_5486 = ++@COND_x86_64_efi_TRUE@am__append_5487 = $(nodist_tpm_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_5488 = $(nodist_tpm_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ tpm.marker +-@COND_x86_64_efi_TRUE@am__append_5496 = tpm.mod +-@COND_x86_64_efi_TRUE@am__append_5497 = tpm.marker +-@COND_i386_pc_TRUE@am__append_5498 = rdmsr.module +-@COND_i386_pc_TRUE@am__append_5499 = rdmsr.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_5489 = tpm.mod ++@COND_x86_64_efi_TRUE@am__append_5490 = tpm.marker ++@COND_i386_pc_TRUE@am__append_5491 = rdmsr.module ++@COND_i386_pc_TRUE@am__append_5492 = rdmsr.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@rdmsr_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_5500 = +-@COND_i386_pc_TRUE@am__append_5501 = $(nodist_rdmsr_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_5502 = $(nodist_rdmsr_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_5493 = ++@COND_i386_pc_TRUE@am__append_5494 = $(nodist_rdmsr_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_5495 = $(nodist_rdmsr_module_SOURCES) \ + @COND_i386_pc_TRUE@ rdmsr.marker +-@COND_i386_pc_TRUE@am__append_5503 = rdmsr.mod +-@COND_i386_pc_TRUE@am__append_5504 = rdmsr.marker +-@COND_i386_efi_TRUE@am__append_5505 = rdmsr.module +-@COND_i386_efi_TRUE@am__append_5506 = rdmsr.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_5507 = +-@COND_i386_efi_TRUE@am__append_5508 = $(nodist_rdmsr_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_5509 = $(nodist_rdmsr_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_5496 = rdmsr.mod ++@COND_i386_pc_TRUE@am__append_5497 = rdmsr.marker ++@COND_i386_efi_TRUE@am__append_5498 = rdmsr.module ++@COND_i386_efi_TRUE@am__append_5499 = rdmsr.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_5500 = ++@COND_i386_efi_TRUE@am__append_5501 = $(nodist_rdmsr_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_5502 = $(nodist_rdmsr_module_SOURCES) \ + @COND_i386_efi_TRUE@ rdmsr.marker +-@COND_i386_efi_TRUE@am__append_5510 = rdmsr.mod +-@COND_i386_efi_TRUE@am__append_5511 = rdmsr.marker +-@COND_i386_qemu_TRUE@am__append_5512 = rdmsr.module +-@COND_i386_qemu_TRUE@am__append_5513 = rdmsr.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_5514 = +-@COND_i386_qemu_TRUE@am__append_5515 = $(nodist_rdmsr_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_5516 = $(nodist_rdmsr_module_SOURCES) \ ++@COND_i386_efi_TRUE@am__append_5503 = rdmsr.mod ++@COND_i386_efi_TRUE@am__append_5504 = rdmsr.marker ++@COND_i386_qemu_TRUE@am__append_5505 = rdmsr.module ++@COND_i386_qemu_TRUE@am__append_5506 = rdmsr.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_5507 = ++@COND_i386_qemu_TRUE@am__append_5508 = $(nodist_rdmsr_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_5509 = $(nodist_rdmsr_module_SOURCES) \ + @COND_i386_qemu_TRUE@ rdmsr.marker +-@COND_i386_qemu_TRUE@am__append_5517 = rdmsr.mod +-@COND_i386_qemu_TRUE@am__append_5518 = rdmsr.marker +-@COND_i386_coreboot_TRUE@am__append_5519 = rdmsr.module +-@COND_i386_coreboot_TRUE@am__append_5520 = rdmsr.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_5521 = +-@COND_i386_coreboot_TRUE@am__append_5522 = $(nodist_rdmsr_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_5523 = \ ++@COND_i386_qemu_TRUE@am__append_5510 = rdmsr.mod ++@COND_i386_qemu_TRUE@am__append_5511 = rdmsr.marker ++@COND_i386_coreboot_TRUE@am__append_5512 = rdmsr.module ++@COND_i386_coreboot_TRUE@am__append_5513 = rdmsr.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_5514 = ++@COND_i386_coreboot_TRUE@am__append_5515 = $(nodist_rdmsr_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_5516 = \ + @COND_i386_coreboot_TRUE@ $(nodist_rdmsr_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ rdmsr.marker +-@COND_i386_coreboot_TRUE@am__append_5524 = rdmsr.mod +-@COND_i386_coreboot_TRUE@am__append_5525 = rdmsr.marker +-@COND_i386_multiboot_TRUE@am__append_5526 = rdmsr.module +-@COND_i386_multiboot_TRUE@am__append_5527 = rdmsr.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_5528 = +-@COND_i386_multiboot_TRUE@am__append_5529 = $(nodist_rdmsr_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_5530 = \ ++@COND_i386_coreboot_TRUE@am__append_5517 = rdmsr.mod ++@COND_i386_coreboot_TRUE@am__append_5518 = rdmsr.marker ++@COND_i386_multiboot_TRUE@am__append_5519 = rdmsr.module ++@COND_i386_multiboot_TRUE@am__append_5520 = rdmsr.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_5521 = ++@COND_i386_multiboot_TRUE@am__append_5522 = $(nodist_rdmsr_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_5523 = \ + @COND_i386_multiboot_TRUE@ $(nodist_rdmsr_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ rdmsr.marker +-@COND_i386_multiboot_TRUE@am__append_5531 = rdmsr.mod +-@COND_i386_multiboot_TRUE@am__append_5532 = rdmsr.marker +-@COND_i386_ieee1275_TRUE@am__append_5533 = rdmsr.module +-@COND_i386_ieee1275_TRUE@am__append_5534 = rdmsr.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_5535 = +-@COND_i386_ieee1275_TRUE@am__append_5536 = $(nodist_rdmsr_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_5537 = \ ++@COND_i386_multiboot_TRUE@am__append_5524 = rdmsr.mod ++@COND_i386_multiboot_TRUE@am__append_5525 = rdmsr.marker ++@COND_i386_ieee1275_TRUE@am__append_5526 = rdmsr.module ++@COND_i386_ieee1275_TRUE@am__append_5527 = rdmsr.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_5528 = ++@COND_i386_ieee1275_TRUE@am__append_5529 = $(nodist_rdmsr_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_5530 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_rdmsr_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ rdmsr.marker +-@COND_i386_ieee1275_TRUE@am__append_5538 = rdmsr.mod +-@COND_i386_ieee1275_TRUE@am__append_5539 = rdmsr.marker +-@COND_x86_64_efi_TRUE@am__append_5540 = rdmsr.module +-@COND_x86_64_efi_TRUE@am__append_5541 = rdmsr.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_5542 = +-@COND_x86_64_efi_TRUE@am__append_5543 = $(nodist_rdmsr_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_5544 = \ ++@COND_i386_ieee1275_TRUE@am__append_5531 = rdmsr.mod ++@COND_i386_ieee1275_TRUE@am__append_5532 = rdmsr.marker ++@COND_x86_64_efi_TRUE@am__append_5533 = rdmsr.module ++@COND_x86_64_efi_TRUE@am__append_5534 = rdmsr.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_5535 = ++@COND_x86_64_efi_TRUE@am__append_5536 = $(nodist_rdmsr_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_5537 = \ + @COND_x86_64_efi_TRUE@ $(nodist_rdmsr_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ rdmsr.marker +-@COND_x86_64_efi_TRUE@am__append_5545 = rdmsr.mod +-@COND_x86_64_efi_TRUE@am__append_5546 = rdmsr.marker +-@COND_i386_pc_TRUE@am__append_5547 = wrmsr.module +-@COND_i386_pc_TRUE@am__append_5548 = wrmsr.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_5538 = rdmsr.mod ++@COND_x86_64_efi_TRUE@am__append_5539 = rdmsr.marker ++@COND_i386_pc_TRUE@am__append_5540 = wrmsr.module ++@COND_i386_pc_TRUE@am__append_5541 = wrmsr.module$(EXEEXT) + @COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@wrmsr_module_DEPENDENCIES = +-@COND_i386_pc_TRUE@am__append_5549 = +-@COND_i386_pc_TRUE@am__append_5550 = $(nodist_wrmsr_module_SOURCES) +-@COND_i386_pc_TRUE@am__append_5551 = $(nodist_wrmsr_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_5542 = ++@COND_i386_pc_TRUE@am__append_5543 = $(nodist_wrmsr_module_SOURCES) ++@COND_i386_pc_TRUE@am__append_5544 = $(nodist_wrmsr_module_SOURCES) \ + @COND_i386_pc_TRUE@ wrmsr.marker +-@COND_i386_pc_TRUE@am__append_5552 = wrmsr.mod +-@COND_i386_pc_TRUE@am__append_5553 = wrmsr.marker +-@COND_i386_efi_TRUE@am__append_5554 = wrmsr.module +-@COND_i386_efi_TRUE@am__append_5555 = wrmsr.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__append_5556 = +-@COND_i386_efi_TRUE@am__append_5557 = $(nodist_wrmsr_module_SOURCES) +-@COND_i386_efi_TRUE@am__append_5558 = $(nodist_wrmsr_module_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_5545 = wrmsr.mod ++@COND_i386_pc_TRUE@am__append_5546 = wrmsr.marker ++@COND_i386_efi_TRUE@am__append_5547 = wrmsr.module ++@COND_i386_efi_TRUE@am__append_5548 = wrmsr.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__append_5549 = ++@COND_i386_efi_TRUE@am__append_5550 = $(nodist_wrmsr_module_SOURCES) ++@COND_i386_efi_TRUE@am__append_5551 = $(nodist_wrmsr_module_SOURCES) \ + @COND_i386_efi_TRUE@ wrmsr.marker +-@COND_i386_efi_TRUE@am__append_5559 = wrmsr.mod +-@COND_i386_efi_TRUE@am__append_5560 = wrmsr.marker +-@COND_i386_qemu_TRUE@am__append_5561 = wrmsr.module +-@COND_i386_qemu_TRUE@am__append_5562 = wrmsr.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__append_5563 = +-@COND_i386_qemu_TRUE@am__append_5564 = $(nodist_wrmsr_module_SOURCES) +-@COND_i386_qemu_TRUE@am__append_5565 = $(nodist_wrmsr_module_SOURCES) \ ++@COND_i386_efi_TRUE@am__append_5552 = wrmsr.mod ++@COND_i386_efi_TRUE@am__append_5553 = wrmsr.marker ++@COND_i386_qemu_TRUE@am__append_5554 = wrmsr.module ++@COND_i386_qemu_TRUE@am__append_5555 = wrmsr.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__append_5556 = ++@COND_i386_qemu_TRUE@am__append_5557 = $(nodist_wrmsr_module_SOURCES) ++@COND_i386_qemu_TRUE@am__append_5558 = $(nodist_wrmsr_module_SOURCES) \ + @COND_i386_qemu_TRUE@ wrmsr.marker +-@COND_i386_qemu_TRUE@am__append_5566 = wrmsr.mod +-@COND_i386_qemu_TRUE@am__append_5567 = wrmsr.marker +-@COND_i386_coreboot_TRUE@am__append_5568 = wrmsr.module +-@COND_i386_coreboot_TRUE@am__append_5569 = wrmsr.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__append_5570 = +-@COND_i386_coreboot_TRUE@am__append_5571 = $(nodist_wrmsr_module_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_5572 = \ ++@COND_i386_qemu_TRUE@am__append_5559 = wrmsr.mod ++@COND_i386_qemu_TRUE@am__append_5560 = wrmsr.marker ++@COND_i386_coreboot_TRUE@am__append_5561 = wrmsr.module ++@COND_i386_coreboot_TRUE@am__append_5562 = wrmsr.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__append_5563 = ++@COND_i386_coreboot_TRUE@am__append_5564 = $(nodist_wrmsr_module_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_5565 = \ + @COND_i386_coreboot_TRUE@ $(nodist_wrmsr_module_SOURCES) \ + @COND_i386_coreboot_TRUE@ wrmsr.marker +-@COND_i386_coreboot_TRUE@am__append_5573 = wrmsr.mod +-@COND_i386_coreboot_TRUE@am__append_5574 = wrmsr.marker +-@COND_i386_multiboot_TRUE@am__append_5575 = wrmsr.module +-@COND_i386_multiboot_TRUE@am__append_5576 = wrmsr.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__append_5577 = +-@COND_i386_multiboot_TRUE@am__append_5578 = $(nodist_wrmsr_module_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_5579 = \ ++@COND_i386_coreboot_TRUE@am__append_5566 = wrmsr.mod ++@COND_i386_coreboot_TRUE@am__append_5567 = wrmsr.marker ++@COND_i386_multiboot_TRUE@am__append_5568 = wrmsr.module ++@COND_i386_multiboot_TRUE@am__append_5569 = wrmsr.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__append_5570 = ++@COND_i386_multiboot_TRUE@am__append_5571 = $(nodist_wrmsr_module_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_5572 = \ + @COND_i386_multiboot_TRUE@ $(nodist_wrmsr_module_SOURCES) \ + @COND_i386_multiboot_TRUE@ wrmsr.marker +-@COND_i386_multiboot_TRUE@am__append_5580 = wrmsr.mod +-@COND_i386_multiboot_TRUE@am__append_5581 = wrmsr.marker +-@COND_i386_ieee1275_TRUE@am__append_5582 = wrmsr.module +-@COND_i386_ieee1275_TRUE@am__append_5583 = wrmsr.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__append_5584 = +-@COND_i386_ieee1275_TRUE@am__append_5585 = $(nodist_wrmsr_module_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_5586 = \ ++@COND_i386_multiboot_TRUE@am__append_5573 = wrmsr.mod ++@COND_i386_multiboot_TRUE@am__append_5574 = wrmsr.marker ++@COND_i386_ieee1275_TRUE@am__append_5575 = wrmsr.module ++@COND_i386_ieee1275_TRUE@am__append_5576 = wrmsr.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__append_5577 = ++@COND_i386_ieee1275_TRUE@am__append_5578 = $(nodist_wrmsr_module_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_5579 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_wrmsr_module_SOURCES) \ + @COND_i386_ieee1275_TRUE@ wrmsr.marker +-@COND_i386_ieee1275_TRUE@am__append_5587 = wrmsr.mod +-@COND_i386_ieee1275_TRUE@am__append_5588 = wrmsr.marker +-@COND_x86_64_efi_TRUE@am__append_5589 = wrmsr.module +-@COND_x86_64_efi_TRUE@am__append_5590 = wrmsr.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__append_5591 = +-@COND_x86_64_efi_TRUE@am__append_5592 = $(nodist_wrmsr_module_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_5593 = \ ++@COND_i386_ieee1275_TRUE@am__append_5580 = wrmsr.mod ++@COND_i386_ieee1275_TRUE@am__append_5581 = wrmsr.marker ++@COND_x86_64_efi_TRUE@am__append_5582 = wrmsr.module ++@COND_x86_64_efi_TRUE@am__append_5583 = wrmsr.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__append_5584 = ++@COND_x86_64_efi_TRUE@am__append_5585 = $(nodist_wrmsr_module_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_5586 = \ + @COND_x86_64_efi_TRUE@ $(nodist_wrmsr_module_SOURCES) \ + @COND_x86_64_efi_TRUE@ wrmsr.marker +-@COND_x86_64_efi_TRUE@am__append_5594 = wrmsr.mod +-@COND_x86_64_efi_TRUE@am__append_5595 = wrmsr.marker +-@COND_emu_TRUE@am__append_5596 = kernel.exec ++@COND_x86_64_efi_TRUE@am__append_5587 = wrmsr.mod ++@COND_x86_64_efi_TRUE@am__append_5588 = wrmsr.marker ++@COND_emu_TRUE@am__append_5589 = kernel.exec + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@kernel_exec_DEPENDENCIES = +-@COND_emu_TRUE@am__append_5597 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_emu_TRUE@am__append_5598 = $(nodist_kernel_exec_SOURCES) +-@COND_emu_TRUE@am__append_5599 = $(nodist_kernel_exec_SOURCES) \ ++@COND_emu_TRUE@am__append_5590 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_emu_TRUE@am__append_5591 = $(nodist_kernel_exec_SOURCES) ++@COND_emu_TRUE@am__append_5592 = $(nodist_kernel_exec_SOURCES) \ + @COND_emu_TRUE@ kernel.img +-@COND_emu_TRUE@am__append_5600 = kernel.img +-@COND_i386_pc_TRUE@am__append_5601 = kernel.exec +-@COND_i386_pc_TRUE@am__append_5602 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_i386_pc_TRUE@am__append_5603 = $(nodist_kernel_exec_SOURCES) +-@COND_i386_pc_TRUE@am__append_5604 = $(nodist_kernel_exec_SOURCES) \ ++@COND_emu_TRUE@am__append_5593 = kernel.img ++@COND_i386_pc_TRUE@am__append_5594 = kernel.exec ++@COND_i386_pc_TRUE@am__append_5595 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_i386_pc_TRUE@am__append_5596 = $(nodist_kernel_exec_SOURCES) ++@COND_i386_pc_TRUE@am__append_5597 = $(nodist_kernel_exec_SOURCES) \ + @COND_i386_pc_TRUE@ kernel.img +-@COND_i386_pc_TRUE@am__append_5605 = kernel.img +-@COND_i386_efi_TRUE@am__append_5606 = kernel.exec +-@COND_i386_efi_TRUE@am__append_5607 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_i386_efi_TRUE@am__append_5608 = $(nodist_kernel_exec_SOURCES) +-@COND_i386_efi_TRUE@am__append_5609 = $(nodist_kernel_exec_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_5598 = kernel.img ++@COND_i386_efi_TRUE@am__append_5599 = kernel.exec ++@COND_i386_efi_TRUE@am__append_5600 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_i386_efi_TRUE@am__append_5601 = $(nodist_kernel_exec_SOURCES) ++@COND_i386_efi_TRUE@am__append_5602 = $(nodist_kernel_exec_SOURCES) \ + @COND_i386_efi_TRUE@ kernel.img +-@COND_i386_efi_TRUE@am__append_5610 = kernel.img +-@COND_i386_qemu_TRUE@am__append_5611 = kernel.exec +-@COND_i386_qemu_TRUE@am__append_5612 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_i386_qemu_TRUE@am__append_5613 = $(nodist_kernel_exec_SOURCES) +-@COND_i386_qemu_TRUE@am__append_5614 = $(nodist_kernel_exec_SOURCES) \ ++@COND_i386_efi_TRUE@am__append_5603 = kernel.img ++@COND_i386_qemu_TRUE@am__append_5604 = kernel.exec ++@COND_i386_qemu_TRUE@am__append_5605 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_i386_qemu_TRUE@am__append_5606 = $(nodist_kernel_exec_SOURCES) ++@COND_i386_qemu_TRUE@am__append_5607 = $(nodist_kernel_exec_SOURCES) \ + @COND_i386_qemu_TRUE@ kernel.img +-@COND_i386_qemu_TRUE@am__append_5615 = kernel.img +-@COND_i386_coreboot_TRUE@am__append_5616 = kernel.exec +-@COND_i386_coreboot_TRUE@am__append_5617 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_i386_coreboot_TRUE@am__append_5618 = $(nodist_kernel_exec_SOURCES) +-@COND_i386_coreboot_TRUE@am__append_5619 = \ ++@COND_i386_qemu_TRUE@am__append_5608 = kernel.img ++@COND_i386_coreboot_TRUE@am__append_5609 = kernel.exec ++@COND_i386_coreboot_TRUE@am__append_5610 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_i386_coreboot_TRUE@am__append_5611 = $(nodist_kernel_exec_SOURCES) ++@COND_i386_coreboot_TRUE@am__append_5612 = \ + @COND_i386_coreboot_TRUE@ $(nodist_kernel_exec_SOURCES) \ + @COND_i386_coreboot_TRUE@ kernel.img +-@COND_i386_coreboot_TRUE@am__append_5620 = kernel.img +-@COND_i386_multiboot_TRUE@am__append_5621 = kernel.exec +-@COND_i386_multiboot_TRUE@am__append_5622 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_i386_multiboot_TRUE@am__append_5623 = $(nodist_kernel_exec_SOURCES) +-@COND_i386_multiboot_TRUE@am__append_5624 = \ ++@COND_i386_coreboot_TRUE@am__append_5613 = kernel.img ++@COND_i386_multiboot_TRUE@am__append_5614 = kernel.exec ++@COND_i386_multiboot_TRUE@am__append_5615 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_i386_multiboot_TRUE@am__append_5616 = $(nodist_kernel_exec_SOURCES) ++@COND_i386_multiboot_TRUE@am__append_5617 = \ + @COND_i386_multiboot_TRUE@ $(nodist_kernel_exec_SOURCES) \ + @COND_i386_multiboot_TRUE@ kernel.img +-@COND_i386_multiboot_TRUE@am__append_5625 = kernel.img +-@COND_i386_ieee1275_TRUE@am__append_5626 = kernel.exec +-@COND_i386_ieee1275_TRUE@am__append_5627 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_i386_ieee1275_TRUE@am__append_5628 = $(nodist_kernel_exec_SOURCES) +-@COND_i386_ieee1275_TRUE@am__append_5629 = \ ++@COND_i386_multiboot_TRUE@am__append_5618 = kernel.img ++@COND_i386_ieee1275_TRUE@am__append_5619 = kernel.exec ++@COND_i386_ieee1275_TRUE@am__append_5620 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_i386_ieee1275_TRUE@am__append_5621 = $(nodist_kernel_exec_SOURCES) ++@COND_i386_ieee1275_TRUE@am__append_5622 = \ + @COND_i386_ieee1275_TRUE@ $(nodist_kernel_exec_SOURCES) \ + @COND_i386_ieee1275_TRUE@ kernel.img +-@COND_i386_ieee1275_TRUE@am__append_5630 = kernel.img +-@COND_x86_64_efi_TRUE@am__append_5631 = kernel.exec +-@COND_x86_64_efi_TRUE@am__append_5632 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_x86_64_efi_TRUE@am__append_5633 = $(nodist_kernel_exec_SOURCES) +-@COND_x86_64_efi_TRUE@am__append_5634 = $(nodist_kernel_exec_SOURCES) \ ++@COND_i386_ieee1275_TRUE@am__append_5623 = kernel.img ++@COND_x86_64_efi_TRUE@am__append_5624 = kernel.exec ++@COND_x86_64_efi_TRUE@am__append_5625 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_x86_64_efi_TRUE@am__append_5626 = $(nodist_kernel_exec_SOURCES) ++@COND_x86_64_efi_TRUE@am__append_5627 = $(nodist_kernel_exec_SOURCES) \ + @COND_x86_64_efi_TRUE@ kernel.img +-@COND_x86_64_efi_TRUE@am__append_5635 = kernel.img +-@COND_i386_xen_TRUE@am__append_5636 = kernel.exec +-@COND_i386_xen_TRUE@am__append_5637 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_i386_xen_TRUE@am__append_5638 = $(nodist_kernel_exec_SOURCES) +-@COND_i386_xen_TRUE@am__append_5639 = $(nodist_kernel_exec_SOURCES) \ ++@COND_x86_64_efi_TRUE@am__append_5628 = kernel.img ++@COND_i386_xen_TRUE@am__append_5629 = kernel.exec ++@COND_i386_xen_TRUE@am__append_5630 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_i386_xen_TRUE@am__append_5631 = $(nodist_kernel_exec_SOURCES) ++@COND_i386_xen_TRUE@am__append_5632 = $(nodist_kernel_exec_SOURCES) \ + @COND_i386_xen_TRUE@ kernel.img +-@COND_i386_xen_TRUE@am__append_5640 = kernel.img +-@COND_x86_64_xen_TRUE@am__append_5641 = kernel.exec +-@COND_x86_64_xen_TRUE@am__append_5642 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_x86_64_xen_TRUE@am__append_5643 = $(nodist_kernel_exec_SOURCES) +-@COND_x86_64_xen_TRUE@am__append_5644 = $(nodist_kernel_exec_SOURCES) \ ++@COND_i386_xen_TRUE@am__append_5633 = kernel.img ++@COND_x86_64_xen_TRUE@am__append_5634 = kernel.exec ++@COND_x86_64_xen_TRUE@am__append_5635 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_x86_64_xen_TRUE@am__append_5636 = $(nodist_kernel_exec_SOURCES) ++@COND_x86_64_xen_TRUE@am__append_5637 = $(nodist_kernel_exec_SOURCES) \ + @COND_x86_64_xen_TRUE@ kernel.img +-@COND_x86_64_xen_TRUE@am__append_5645 = kernel.img +-@COND_i386_xen_pvh_TRUE@am__append_5646 = kernel.exec +-@COND_i386_xen_pvh_TRUE@am__append_5647 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_i386_xen_pvh_TRUE@am__append_5648 = $(nodist_kernel_exec_SOURCES) +-@COND_i386_xen_pvh_TRUE@am__append_5649 = \ ++@COND_x86_64_xen_TRUE@am__append_5638 = kernel.img ++@COND_i386_xen_pvh_TRUE@am__append_5639 = kernel.exec ++@COND_i386_xen_pvh_TRUE@am__append_5640 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_i386_xen_pvh_TRUE@am__append_5641 = $(nodist_kernel_exec_SOURCES) ++@COND_i386_xen_pvh_TRUE@am__append_5642 = \ + @COND_i386_xen_pvh_TRUE@ $(nodist_kernel_exec_SOURCES) \ + @COND_i386_xen_pvh_TRUE@ kernel.img +-@COND_i386_xen_pvh_TRUE@am__append_5650 = kernel.img +-@COND_mips_loongson_TRUE@am__append_5651 = kernel.exec +-@COND_mips_loongson_TRUE@am__append_5652 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_mips_loongson_TRUE@am__append_5653 = $(nodist_kernel_exec_SOURCES) +-@COND_mips_loongson_TRUE@am__append_5654 = \ ++@COND_i386_xen_pvh_TRUE@am__append_5643 = kernel.img ++@COND_mips_loongson_TRUE@am__append_5644 = kernel.exec ++@COND_mips_loongson_TRUE@am__append_5645 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_mips_loongson_TRUE@am__append_5646 = $(nodist_kernel_exec_SOURCES) ++@COND_mips_loongson_TRUE@am__append_5647 = \ + @COND_mips_loongson_TRUE@ $(nodist_kernel_exec_SOURCES) \ + @COND_mips_loongson_TRUE@ kernel.img +-@COND_mips_loongson_TRUE@am__append_5655 = kernel.img +-@COND_sparc64_ieee1275_TRUE@am__append_5656 = kernel.exec +-@COND_sparc64_ieee1275_TRUE@am__append_5657 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_sparc64_ieee1275_TRUE@am__append_5658 = $(nodist_kernel_exec_SOURCES) +-@COND_sparc64_ieee1275_TRUE@am__append_5659 = \ ++@COND_mips_loongson_TRUE@am__append_5648 = kernel.img ++@COND_sparc64_ieee1275_TRUE@am__append_5649 = kernel.exec ++@COND_sparc64_ieee1275_TRUE@am__append_5650 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_sparc64_ieee1275_TRUE@am__append_5651 = $(nodist_kernel_exec_SOURCES) ++@COND_sparc64_ieee1275_TRUE@am__append_5652 = \ + @COND_sparc64_ieee1275_TRUE@ $(nodist_kernel_exec_SOURCES) \ + @COND_sparc64_ieee1275_TRUE@ kernel.img +-@COND_sparc64_ieee1275_TRUE@am__append_5660 = kernel.img +-@COND_powerpc_ieee1275_TRUE@am__append_5661 = kernel.exec +-@COND_powerpc_ieee1275_TRUE@am__append_5662 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_powerpc_ieee1275_TRUE@am__append_5663 = $(nodist_kernel_exec_SOURCES) +-@COND_powerpc_ieee1275_TRUE@am__append_5664 = \ ++@COND_sparc64_ieee1275_TRUE@am__append_5653 = kernel.img ++@COND_powerpc_ieee1275_TRUE@am__append_5654 = kernel.exec ++@COND_powerpc_ieee1275_TRUE@am__append_5655 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_powerpc_ieee1275_TRUE@am__append_5656 = $(nodist_kernel_exec_SOURCES) ++@COND_powerpc_ieee1275_TRUE@am__append_5657 = \ + @COND_powerpc_ieee1275_TRUE@ $(nodist_kernel_exec_SOURCES) \ + @COND_powerpc_ieee1275_TRUE@ kernel.img +-@COND_powerpc_ieee1275_TRUE@am__append_5665 = kernel.img +-@COND_mips_arc_TRUE@am__append_5666 = kernel.exec +-@COND_mips_arc_TRUE@am__append_5667 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_mips_arc_TRUE@am__append_5668 = $(nodist_kernel_exec_SOURCES) +-@COND_mips_arc_TRUE@am__append_5669 = $(nodist_kernel_exec_SOURCES) \ ++@COND_powerpc_ieee1275_TRUE@am__append_5658 = kernel.img ++@COND_mips_arc_TRUE@am__append_5659 = kernel.exec ++@COND_mips_arc_TRUE@am__append_5660 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_mips_arc_TRUE@am__append_5661 = $(nodist_kernel_exec_SOURCES) ++@COND_mips_arc_TRUE@am__append_5662 = $(nodist_kernel_exec_SOURCES) \ + @COND_mips_arc_TRUE@ kernel.img +-@COND_mips_arc_TRUE@am__append_5670 = kernel.img +-@COND_ia64_efi_TRUE@am__append_5671 = kernel.exec +-@COND_ia64_efi_TRUE@am__append_5672 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_ia64_efi_TRUE@am__append_5673 = $(nodist_kernel_exec_SOURCES) +-@COND_ia64_efi_TRUE@am__append_5674 = $(nodist_kernel_exec_SOURCES) \ ++@COND_mips_arc_TRUE@am__append_5663 = kernel.img ++@COND_ia64_efi_TRUE@am__append_5664 = kernel.exec ++@COND_ia64_efi_TRUE@am__append_5665 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_ia64_efi_TRUE@am__append_5666 = $(nodist_kernel_exec_SOURCES) ++@COND_ia64_efi_TRUE@am__append_5667 = $(nodist_kernel_exec_SOURCES) \ + @COND_ia64_efi_TRUE@ kernel.img +-@COND_ia64_efi_TRUE@am__append_5675 = kernel.img +-@COND_mips_qemu_mips_TRUE@am__append_5676 = kernel.exec +-@COND_mips_qemu_mips_TRUE@am__append_5677 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_mips_qemu_mips_TRUE@am__append_5678 = $(nodist_kernel_exec_SOURCES) +-@COND_mips_qemu_mips_TRUE@am__append_5679 = \ ++@COND_ia64_efi_TRUE@am__append_5668 = kernel.img ++@COND_mips_qemu_mips_TRUE@am__append_5669 = kernel.exec ++@COND_mips_qemu_mips_TRUE@am__append_5670 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_mips_qemu_mips_TRUE@am__append_5671 = $(nodist_kernel_exec_SOURCES) ++@COND_mips_qemu_mips_TRUE@am__append_5672 = \ + @COND_mips_qemu_mips_TRUE@ $(nodist_kernel_exec_SOURCES) \ + @COND_mips_qemu_mips_TRUE@ kernel.img +-@COND_mips_qemu_mips_TRUE@am__append_5680 = kernel.img +-@COND_arm_uboot_TRUE@am__append_5681 = kernel.exec +-@COND_arm_uboot_TRUE@am__append_5682 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_arm_uboot_TRUE@am__append_5683 = $(nodist_kernel_exec_SOURCES) +-@COND_arm_uboot_TRUE@am__append_5684 = $(nodist_kernel_exec_SOURCES) \ ++@COND_mips_qemu_mips_TRUE@am__append_5673 = kernel.img ++@COND_arm_uboot_TRUE@am__append_5674 = kernel.exec ++@COND_arm_uboot_TRUE@am__append_5675 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_arm_uboot_TRUE@am__append_5676 = $(nodist_kernel_exec_SOURCES) ++@COND_arm_uboot_TRUE@am__append_5677 = $(nodist_kernel_exec_SOURCES) \ + @COND_arm_uboot_TRUE@ kernel.img +-@COND_arm_uboot_TRUE@am__append_5685 = kernel.img +-@COND_arm_efi_TRUE@am__append_5686 = kernel.exec +-@COND_arm_efi_TRUE@am__append_5687 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_arm_efi_TRUE@am__append_5688 = $(nodist_kernel_exec_SOURCES) +-@COND_arm_efi_TRUE@am__append_5689 = $(nodist_kernel_exec_SOURCES) \ ++@COND_arm_uboot_TRUE@am__append_5678 = kernel.img ++@COND_arm_efi_TRUE@am__append_5679 = kernel.exec ++@COND_arm_efi_TRUE@am__append_5680 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_arm_efi_TRUE@am__append_5681 = $(nodist_kernel_exec_SOURCES) ++@COND_arm_efi_TRUE@am__append_5682 = $(nodist_kernel_exec_SOURCES) \ + @COND_arm_efi_TRUE@ kernel.img +-@COND_arm_efi_TRUE@am__append_5690 = kernel.img +-@COND_arm64_efi_TRUE@am__append_5691 = kernel.exec +-@COND_arm64_efi_TRUE@am__append_5692 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_arm64_efi_TRUE@am__append_5693 = $(nodist_kernel_exec_SOURCES) +-@COND_arm64_efi_TRUE@am__append_5694 = $(nodist_kernel_exec_SOURCES) \ ++@COND_arm_efi_TRUE@am__append_5683 = kernel.img ++@COND_arm64_efi_TRUE@am__append_5684 = kernel.exec ++@COND_arm64_efi_TRUE@am__append_5685 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_arm64_efi_TRUE@am__append_5686 = $(nodist_kernel_exec_SOURCES) ++@COND_arm64_efi_TRUE@am__append_5687 = $(nodist_kernel_exec_SOURCES) \ + @COND_arm64_efi_TRUE@ kernel.img +-@COND_arm64_efi_TRUE@am__append_5695 = kernel.img +-@COND_arm_coreboot_TRUE@am__append_5696 = kernel.exec +-@COND_arm_coreboot_TRUE@am__append_5697 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_arm_coreboot_TRUE@am__append_5698 = $(nodist_kernel_exec_SOURCES) +-@COND_arm_coreboot_TRUE@am__append_5699 = \ ++@COND_arm64_efi_TRUE@am__append_5688 = kernel.img ++@COND_arm_coreboot_TRUE@am__append_5689 = kernel.exec ++@COND_arm_coreboot_TRUE@am__append_5690 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_arm_coreboot_TRUE@am__append_5691 = $(nodist_kernel_exec_SOURCES) ++@COND_arm_coreboot_TRUE@am__append_5692 = \ + @COND_arm_coreboot_TRUE@ $(nodist_kernel_exec_SOURCES) \ + @COND_arm_coreboot_TRUE@ kernel.img +-@COND_arm_coreboot_TRUE@am__append_5700 = kernel.img +-@COND_riscv32_efi_TRUE@am__append_5701 = kernel.exec +-@COND_riscv32_efi_TRUE@am__append_5702 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_riscv32_efi_TRUE@am__append_5703 = $(nodist_kernel_exec_SOURCES) +-@COND_riscv32_efi_TRUE@am__append_5704 = \ ++@COND_arm_coreboot_TRUE@am__append_5693 = kernel.img ++@COND_riscv32_efi_TRUE@am__append_5694 = kernel.exec ++@COND_riscv32_efi_TRUE@am__append_5695 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_riscv32_efi_TRUE@am__append_5696 = $(nodist_kernel_exec_SOURCES) ++@COND_riscv32_efi_TRUE@am__append_5697 = \ + @COND_riscv32_efi_TRUE@ $(nodist_kernel_exec_SOURCES) \ + @COND_riscv32_efi_TRUE@ kernel.img +-@COND_riscv32_efi_TRUE@am__append_5705 = kernel.img +-@COND_riscv64_efi_TRUE@am__append_5706 = kernel.exec +-@COND_riscv64_efi_TRUE@am__append_5707 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +-@COND_riscv64_efi_TRUE@am__append_5708 = $(nodist_kernel_exec_SOURCES) +-@COND_riscv64_efi_TRUE@am__append_5709 = \ ++@COND_riscv32_efi_TRUE@am__append_5698 = kernel.img ++@COND_riscv64_efi_TRUE@am__append_5699 = kernel.exec ++@COND_riscv64_efi_TRUE@am__append_5700 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S ++@COND_riscv64_efi_TRUE@am__append_5701 = $(nodist_kernel_exec_SOURCES) ++@COND_riscv64_efi_TRUE@am__append_5702 = \ + @COND_riscv64_efi_TRUE@ $(nodist_kernel_exec_SOURCES) \ + @COND_riscv64_efi_TRUE@ kernel.img +-@COND_riscv64_efi_TRUE@am__append_5710 = kernel.img +-@COND_i386_pc_TRUE@am__append_5711 = boot.image +-@COND_i386_pc_TRUE@am__append_5712 = +-@COND_i386_pc_TRUE@am__append_5713 = $(nodist_boot_image_SOURCES) +-@COND_i386_pc_TRUE@am__append_5714 = $(nodist_boot_image_SOURCES) \ ++@COND_riscv64_efi_TRUE@am__append_5703 = kernel.img ++@COND_i386_pc_TRUE@am__append_5704 = boot.image ++@COND_i386_pc_TRUE@am__append_5705 = ++@COND_i386_pc_TRUE@am__append_5706 = $(nodist_boot_image_SOURCES) ++@COND_i386_pc_TRUE@am__append_5707 = $(nodist_boot_image_SOURCES) \ + @COND_i386_pc_TRUE@ boot.img +-@COND_i386_pc_TRUE@am__append_5715 = boot.img +-@COND_i386_qemu_TRUE@am__append_5716 = boot.image +-@COND_i386_qemu_TRUE@am__append_5717 = +-@COND_i386_qemu_TRUE@am__append_5718 = $(nodist_boot_image_SOURCES) +-@COND_i386_qemu_TRUE@am__append_5719 = $(nodist_boot_image_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_5708 = boot.img ++@COND_i386_qemu_TRUE@am__append_5709 = boot.image ++@COND_i386_qemu_TRUE@am__append_5710 = ++@COND_i386_qemu_TRUE@am__append_5711 = $(nodist_boot_image_SOURCES) ++@COND_i386_qemu_TRUE@am__append_5712 = $(nodist_boot_image_SOURCES) \ + @COND_i386_qemu_TRUE@ boot.img +-@COND_i386_qemu_TRUE@am__append_5720 = boot.img +-@COND_sparc64_ieee1275_TRUE@am__append_5721 = boot.image +-@COND_sparc64_ieee1275_TRUE@am__append_5722 = +-@COND_sparc64_ieee1275_TRUE@am__append_5723 = $(nodist_boot_image_SOURCES) +-@COND_sparc64_ieee1275_TRUE@am__append_5724 = \ ++@COND_i386_qemu_TRUE@am__append_5713 = boot.img ++@COND_sparc64_ieee1275_TRUE@am__append_5714 = boot.image ++@COND_sparc64_ieee1275_TRUE@am__append_5715 = ++@COND_sparc64_ieee1275_TRUE@am__append_5716 = $(nodist_boot_image_SOURCES) ++@COND_sparc64_ieee1275_TRUE@am__append_5717 = \ + @COND_sparc64_ieee1275_TRUE@ $(nodist_boot_image_SOURCES) \ + @COND_sparc64_ieee1275_TRUE@ boot.img +-@COND_sparc64_ieee1275_TRUE@am__append_5725 = boot.img +-@COND_i386_pc_TRUE@am__append_5726 = boot_hybrid.image cdboot.image +-@COND_i386_pc_TRUE@am__append_5727 = +-@COND_i386_pc_TRUE@am__append_5728 = \ ++@COND_sparc64_ieee1275_TRUE@am__append_5718 = boot.img ++@COND_i386_pc_TRUE@am__append_5719 = boot_hybrid.image cdboot.image ++@COND_i386_pc_TRUE@am__append_5720 = ++@COND_i386_pc_TRUE@am__append_5721 = \ + @COND_i386_pc_TRUE@ $(nodist_boot_hybrid_image_SOURCES) \ + @COND_i386_pc_TRUE@ $(nodist_cdboot_image_SOURCES) +-@COND_i386_pc_TRUE@am__append_5729 = \ ++@COND_i386_pc_TRUE@am__append_5722 = \ + @COND_i386_pc_TRUE@ $(nodist_boot_hybrid_image_SOURCES) \ + @COND_i386_pc_TRUE@ boot_hybrid.img \ + @COND_i386_pc_TRUE@ $(nodist_cdboot_image_SOURCES) cdboot.img +-@COND_i386_pc_TRUE@am__append_5730 = boot_hybrid.img cdboot.img +-@COND_sparc64_ieee1275_TRUE@am__append_5731 = cdboot.image +-@COND_sparc64_ieee1275_TRUE@am__append_5732 = +-@COND_sparc64_ieee1275_TRUE@am__append_5733 = $(nodist_cdboot_image_SOURCES) +-@COND_sparc64_ieee1275_TRUE@am__append_5734 = \ ++@COND_i386_pc_TRUE@am__append_5723 = boot_hybrid.img cdboot.img ++@COND_sparc64_ieee1275_TRUE@am__append_5724 = cdboot.image ++@COND_sparc64_ieee1275_TRUE@am__append_5725 = ++@COND_sparc64_ieee1275_TRUE@am__append_5726 = $(nodist_cdboot_image_SOURCES) ++@COND_sparc64_ieee1275_TRUE@am__append_5727 = \ + @COND_sparc64_ieee1275_TRUE@ $(nodist_cdboot_image_SOURCES) \ + @COND_sparc64_ieee1275_TRUE@ cdboot.img +-@COND_sparc64_ieee1275_TRUE@am__append_5735 = cdboot.img +-@COND_i386_pc_TRUE@am__append_5736 = pxeboot.image diskboot.image +-@COND_i386_pc_TRUE@am__append_5737 = +-@COND_i386_pc_TRUE@am__append_5738 = $(nodist_pxeboot_image_SOURCES) \ ++@COND_sparc64_ieee1275_TRUE@am__append_5728 = cdboot.img ++@COND_i386_pc_TRUE@am__append_5729 = pxeboot.image diskboot.image ++@COND_i386_pc_TRUE@am__append_5730 = ++@COND_i386_pc_TRUE@am__append_5731 = $(nodist_pxeboot_image_SOURCES) \ + @COND_i386_pc_TRUE@ $(nodist_diskboot_image_SOURCES) +-@COND_i386_pc_TRUE@am__append_5739 = $(nodist_pxeboot_image_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_5732 = $(nodist_pxeboot_image_SOURCES) \ + @COND_i386_pc_TRUE@ pxeboot.img \ + @COND_i386_pc_TRUE@ $(nodist_diskboot_image_SOURCES) \ + @COND_i386_pc_TRUE@ diskboot.img +-@COND_i386_pc_TRUE@am__append_5740 = pxeboot.img diskboot.img +-@COND_sparc64_ieee1275_TRUE@am__append_5741 = diskboot.image +-@COND_sparc64_ieee1275_TRUE@am__append_5742 = +-@COND_sparc64_ieee1275_TRUE@am__append_5743 = $(nodist_diskboot_image_SOURCES) +-@COND_sparc64_ieee1275_TRUE@am__append_5744 = \ ++@COND_i386_pc_TRUE@am__append_5733 = pxeboot.img diskboot.img ++@COND_sparc64_ieee1275_TRUE@am__append_5734 = diskboot.image ++@COND_sparc64_ieee1275_TRUE@am__append_5735 = ++@COND_sparc64_ieee1275_TRUE@am__append_5736 = $(nodist_diskboot_image_SOURCES) ++@COND_sparc64_ieee1275_TRUE@am__append_5737 = \ + @COND_sparc64_ieee1275_TRUE@ $(nodist_diskboot_image_SOURCES) \ + @COND_sparc64_ieee1275_TRUE@ diskboot.img +-@COND_sparc64_ieee1275_TRUE@am__append_5745 = diskboot.img +-@COND_i386_pc_TRUE@am__append_5746 = lnxboot.image +-@COND_i386_pc_TRUE@am__append_5747 = +-@COND_i386_pc_TRUE@am__append_5748 = $(nodist_lnxboot_image_SOURCES) +-@COND_i386_pc_TRUE@am__append_5749 = $(nodist_lnxboot_image_SOURCES) \ ++@COND_sparc64_ieee1275_TRUE@am__append_5738 = diskboot.img ++@COND_i386_pc_TRUE@am__append_5739 = lnxboot.image ++@COND_i386_pc_TRUE@am__append_5740 = ++@COND_i386_pc_TRUE@am__append_5741 = $(nodist_lnxboot_image_SOURCES) ++@COND_i386_pc_TRUE@am__append_5742 = $(nodist_lnxboot_image_SOURCES) \ + @COND_i386_pc_TRUE@ lnxboot.img +-@COND_i386_pc_TRUE@am__append_5750 = lnxboot.img +-@COND_mips_loongson_TRUE@am__append_5751 = xz_decompress.image +-@COND_mips_loongson_TRUE@am__append_5752 = +-@COND_mips_loongson_TRUE@am__append_5753 = $(nodist_xz_decompress_image_SOURCES) +-@COND_mips_loongson_TRUE@am__append_5754 = $(nodist_xz_decompress_image_SOURCES) \ ++@COND_i386_pc_TRUE@am__append_5743 = lnxboot.img ++@COND_mips_loongson_TRUE@am__append_5744 = xz_decompress.image ++@COND_mips_loongson_TRUE@am__append_5745 = ++@COND_mips_loongson_TRUE@am__append_5746 = $(nodist_xz_decompress_image_SOURCES) ++@COND_mips_loongson_TRUE@am__append_5747 = $(nodist_xz_decompress_image_SOURCES) \ + @COND_mips_loongson_TRUE@ xz_decompress.img +-@COND_mips_loongson_TRUE@am__append_5755 = xz_decompress.img +-@COND_mips_arc_TRUE@am__append_5756 = xz_decompress.image +-@COND_mips_arc_TRUE@am__append_5757 = +-@COND_mips_arc_TRUE@am__append_5758 = $(nodist_xz_decompress_image_SOURCES) +-@COND_mips_arc_TRUE@am__append_5759 = \ ++@COND_mips_loongson_TRUE@am__append_5748 = xz_decompress.img ++@COND_mips_arc_TRUE@am__append_5749 = xz_decompress.image ++@COND_mips_arc_TRUE@am__append_5750 = ++@COND_mips_arc_TRUE@am__append_5751 = $(nodist_xz_decompress_image_SOURCES) ++@COND_mips_arc_TRUE@am__append_5752 = \ + @COND_mips_arc_TRUE@ $(nodist_xz_decompress_image_SOURCES) \ + @COND_mips_arc_TRUE@ xz_decompress.img +-@COND_mips_arc_TRUE@am__append_5760 = xz_decompress.img +-@COND_mips_qemu_mips_TRUE@am__append_5761 = xz_decompress.image +-@COND_mips_qemu_mips_TRUE@am__append_5762 = +-@COND_mips_qemu_mips_TRUE@am__append_5763 = $(nodist_xz_decompress_image_SOURCES) +-@COND_mips_qemu_mips_TRUE@am__append_5764 = $(nodist_xz_decompress_image_SOURCES) \ ++@COND_mips_arc_TRUE@am__append_5753 = xz_decompress.img ++@COND_mips_qemu_mips_TRUE@am__append_5754 = xz_decompress.image ++@COND_mips_qemu_mips_TRUE@am__append_5755 = ++@COND_mips_qemu_mips_TRUE@am__append_5756 = $(nodist_xz_decompress_image_SOURCES) ++@COND_mips_qemu_mips_TRUE@am__append_5757 = $(nodist_xz_decompress_image_SOURCES) \ + @COND_mips_qemu_mips_TRUE@ xz_decompress.img +-@COND_mips_qemu_mips_TRUE@am__append_5765 = xz_decompress.img +-@COND_mips_loongson_TRUE@am__append_5766 = none_decompress.image +-@COND_mips_loongson_TRUE@am__append_5767 = +-@COND_mips_loongson_TRUE@am__append_5768 = $(nodist_none_decompress_image_SOURCES) +-@COND_mips_loongson_TRUE@am__append_5769 = $(nodist_none_decompress_image_SOURCES) \ ++@COND_mips_qemu_mips_TRUE@am__append_5758 = xz_decompress.img ++@COND_mips_loongson_TRUE@am__append_5759 = none_decompress.image ++@COND_mips_loongson_TRUE@am__append_5760 = ++@COND_mips_loongson_TRUE@am__append_5761 = $(nodist_none_decompress_image_SOURCES) ++@COND_mips_loongson_TRUE@am__append_5762 = $(nodist_none_decompress_image_SOURCES) \ + @COND_mips_loongson_TRUE@ none_decompress.img +-@COND_mips_loongson_TRUE@am__append_5770 = none_decompress.img +-@COND_mips_arc_TRUE@am__append_5771 = none_decompress.image +-@COND_mips_arc_TRUE@am__append_5772 = +-@COND_mips_arc_TRUE@am__append_5773 = $(nodist_none_decompress_image_SOURCES) +-@COND_mips_arc_TRUE@am__append_5774 = \ ++@COND_mips_loongson_TRUE@am__append_5763 = none_decompress.img ++@COND_mips_arc_TRUE@am__append_5764 = none_decompress.image ++@COND_mips_arc_TRUE@am__append_5765 = ++@COND_mips_arc_TRUE@am__append_5766 = $(nodist_none_decompress_image_SOURCES) ++@COND_mips_arc_TRUE@am__append_5767 = \ + @COND_mips_arc_TRUE@ $(nodist_none_decompress_image_SOURCES) \ + @COND_mips_arc_TRUE@ none_decompress.img +-@COND_mips_arc_TRUE@am__append_5775 = none_decompress.img +-@COND_mips_qemu_mips_TRUE@am__append_5776 = none_decompress.image +-@COND_mips_qemu_mips_TRUE@am__append_5777 = +-@COND_mips_qemu_mips_TRUE@am__append_5778 = $(nodist_none_decompress_image_SOURCES) +-@COND_mips_qemu_mips_TRUE@am__append_5779 = $(nodist_none_decompress_image_SOURCES) \ ++@COND_mips_arc_TRUE@am__append_5768 = none_decompress.img ++@COND_mips_qemu_mips_TRUE@am__append_5769 = none_decompress.image ++@COND_mips_qemu_mips_TRUE@am__append_5770 = ++@COND_mips_qemu_mips_TRUE@am__append_5771 = $(nodist_none_decompress_image_SOURCES) ++@COND_mips_qemu_mips_TRUE@am__append_5772 = $(nodist_none_decompress_image_SOURCES) \ + @COND_mips_qemu_mips_TRUE@ none_decompress.img +-@COND_mips_qemu_mips_TRUE@am__append_5780 = none_decompress.img +-@COND_i386_pc_TRUE@am__append_5781 = lzma_decompress.image +-@COND_i386_pc_TRUE@am__append_5782 = +-@COND_i386_pc_TRUE@am__append_5783 = $(nodist_lzma_decompress_image_SOURCES) +-@COND_i386_pc_TRUE@am__append_5784 = \ ++@COND_mips_qemu_mips_TRUE@am__append_5773 = none_decompress.img ++@COND_i386_pc_TRUE@am__append_5774 = lzma_decompress.image ++@COND_i386_pc_TRUE@am__append_5775 = ++@COND_i386_pc_TRUE@am__append_5776 = $(nodist_lzma_decompress_image_SOURCES) ++@COND_i386_pc_TRUE@am__append_5777 = \ + @COND_i386_pc_TRUE@ $(nodist_lzma_decompress_image_SOURCES) \ + @COND_i386_pc_TRUE@ lzma_decompress.img +-@COND_i386_pc_TRUE@am__append_5785 = lzma_decompress.img +-@COND_mips_loongson_TRUE@am__append_5786 = fwstart.image \ ++@COND_i386_pc_TRUE@am__append_5778 = lzma_decompress.img ++@COND_mips_loongson_TRUE@am__append_5779 = fwstart.image \ + @COND_mips_loongson_TRUE@ fwstart_fuloong2f.image +-@COND_mips_loongson_TRUE@am__append_5787 = +-@COND_mips_loongson_TRUE@am__append_5788 = \ ++@COND_mips_loongson_TRUE@am__append_5780 = ++@COND_mips_loongson_TRUE@am__append_5781 = \ + @COND_mips_loongson_TRUE@ $(nodist_fwstart_image_SOURCES) \ + @COND_mips_loongson_TRUE@ $(nodist_fwstart_fuloong2f_image_SOURCES) +-@COND_mips_loongson_TRUE@am__append_5789 = \ ++@COND_mips_loongson_TRUE@am__append_5782 = \ + @COND_mips_loongson_TRUE@ $(nodist_fwstart_image_SOURCES) \ + @COND_mips_loongson_TRUE@ fwstart.img \ + @COND_mips_loongson_TRUE@ $(nodist_fwstart_fuloong2f_image_SOURCES) \ + @COND_mips_loongson_TRUE@ fwstart_fuloong2f.img +-@COND_mips_loongson_TRUE@am__append_5790 = fwstart.img \ ++@COND_mips_loongson_TRUE@am__append_5783 = fwstart.img \ + @COND_mips_loongson_TRUE@ fwstart_fuloong2f.img +-@COND_emu_TRUE@am__append_5791 = grub-emu grub-emu-lite +-@COND_MAN_PAGES_TRUE@@COND_emu_TRUE@am__append_5792 = grub-emu.1 +-@COND_MAN_PAGES_TRUE@@COND_emu_TRUE@am__append_5793 = grub-emu.1 +-@COND_emu_TRUE@am__append_5794 = +-@COND_emu_TRUE@am__append_5795 = $(nodist_grub_emu_SOURCES) \ ++@COND_emu_TRUE@am__append_5784 = grub-emu grub-emu-lite ++@COND_MAN_PAGES_TRUE@@COND_emu_TRUE@am__append_5785 = grub-emu.1 ++@COND_MAN_PAGES_TRUE@@COND_emu_TRUE@am__append_5786 = grub-emu.1 ++@COND_emu_TRUE@am__append_5787 = ++@COND_emu_TRUE@am__append_5788 = $(nodist_grub_emu_SOURCES) \ + @COND_emu_TRUE@ $(nodist_grub_emu_lite_SOURCES) +-@COND_emu_TRUE@am__append_5796 = $(nodist_grub_emu_SOURCES) \ ++@COND_emu_TRUE@am__append_5789 = $(nodist_grub_emu_SOURCES) \ + @COND_emu_TRUE@ $(nodist_grub_emu_lite_SOURCES) +-@COND_powerpc_ieee1275_TRUE@am__append_5797 = grub.chrp bootinfo.txt +-@COND_powerpc_ieee1275_TRUE@am__append_5798 = grub.chrp bootinfo.txt +-@COND_powerpc_ieee1275_TRUE@am__append_5799 = +-@COND_powerpc_ieee1275_TRUE@am__append_5800 = \ ++@COND_powerpc_ieee1275_TRUE@am__append_5790 = grub.chrp bootinfo.txt ++@COND_powerpc_ieee1275_TRUE@am__append_5791 = grub.chrp bootinfo.txt ++@COND_powerpc_ieee1275_TRUE@am__append_5792 = ++@COND_powerpc_ieee1275_TRUE@am__append_5793 = \ + @COND_powerpc_ieee1275_TRUE@ boot/powerpc/grub.chrp.in \ + @COND_powerpc_ieee1275_TRUE@ boot/powerpc/bootinfo.txt.in +-@COND_emu_TRUE@am__append_5801 = $(top_srcdir)/include/grub/compiler-rt-emu.h +-@COND_emu_FALSE@am__append_5802 = $(top_srcdir)/include/grub/compiler-rt.h +-@COND_i386_pc_TRUE@am__append_5803 = $(top_builddir)/include/grub/machine/kernel.h \ ++@COND_emu_TRUE@am__append_5794 = $(top_srcdir)/include/grub/compiler-rt-emu.h ++@COND_emu_FALSE@am__append_5795 = $(top_srcdir)/include/grub/compiler-rt.h ++@COND_i386_pc_TRUE@am__append_5796 = $(top_builddir)/include/grub/machine/kernel.h \ + @COND_i386_pc_TRUE@ $(top_builddir)/include/grub/machine/pxe.h \ + @COND_i386_pc_TRUE@ $(top_builddir)/include/grub/machine/int.h \ + @COND_i386_pc_TRUE@ $(top_srcdir)/include/grub/i386/tsc.h +-@COND_i386_xen_pvh_TRUE@am__append_5804 = $(top_builddir)/include/grub/machine/kernel.h \ ++@COND_i386_xen_pvh_TRUE@am__append_5797 = $(top_builddir)/include/grub/machine/kernel.h \ + @COND_i386_xen_pvh_TRUE@ $(top_builddir)/include/grub/machine/int.h \ + @COND_i386_xen_pvh_TRUE@ $(top_srcdir)/include/grub/i386/tsc.h \ + @COND_i386_xen_pvh_TRUE@ $(top_srcdir)/include/grub/terminfo.h \ +@@ -7834,14 +7824,14 @@ TESTS = + @COND_i386_xen_pvh_TRUE@ $(top_srcdir)/include/grub/lib/arg.h \ + @COND_i386_xen_pvh_TRUE@ $(top_srcdir)/include/grub/xen.h \ + @COND_i386_xen_pvh_TRUE@ $(top_srcdir)/include/grub/i386/xen/hypercall.h +-@COND_i386_efi_TRUE@am__append_5805 = $(top_builddir)/include/grub/machine/kernel.h \ ++@COND_i386_efi_TRUE@am__append_5798 = $(top_builddir)/include/grub/machine/kernel.h \ + @COND_i386_efi_TRUE@ $(top_srcdir)/include/grub/efi/efi.h \ + @COND_i386_efi_TRUE@ $(top_srcdir)/include/grub/efi/disk.h \ + @COND_i386_efi_TRUE@ $(top_srcdir)/include/grub/i386/tsc.h \ + @COND_i386_efi_TRUE@ $(top_srcdir)/include/grub/acpi.h \ + @COND_i386_efi_TRUE@ $(top_srcdir)/include/grub/pci.h \ + @COND_i386_efi_TRUE@ $(top_srcdir)/include/grub/i386/pmtimer.h +-@COND_i386_coreboot_TRUE@am__append_5806 = $(top_builddir)/include/grub/machine/kernel.h \ ++@COND_i386_coreboot_TRUE@am__append_5799 = $(top_builddir)/include/grub/machine/kernel.h \ + @COND_i386_coreboot_TRUE@ $(top_srcdir)/include/grub/i386/tsc.h \ + @COND_i386_coreboot_TRUE@ $(top_srcdir)/include/grub/coreboot/lbio.h \ + @COND_i386_coreboot_TRUE@ $(top_srcdir)/include/grub/video.h \ +@@ -7850,56 +7840,56 @@ TESTS = + @COND_i386_coreboot_TRUE@ $(top_srcdir)/include/grub/font.h \ + @COND_i386_coreboot_TRUE@ $(top_srcdir)/include/grub/bufio.h \ + @COND_i386_coreboot_TRUE@ $(top_srcdir)/include/grub/acpi.h +-@COND_i386_multiboot_TRUE@am__append_5807 = $(top_builddir)/include/grub/machine/kernel.h \ ++@COND_i386_multiboot_TRUE@am__append_5800 = $(top_builddir)/include/grub/machine/kernel.h \ + @COND_i386_multiboot_TRUE@ $(top_srcdir)/include/grub/i386/tsc.h \ + @COND_i386_multiboot_TRUE@ $(top_srcdir)/include/grub/acpi.h +-@COND_i386_qemu_TRUE@am__append_5808 = \ ++@COND_i386_qemu_TRUE@am__append_5801 = \ + @COND_i386_qemu_TRUE@ $(top_srcdir)/include/grub/pci.h \ + @COND_i386_qemu_TRUE@ $(top_srcdir)/include/grub/i386/tsc.h +-@COND_i386_ieee1275_TRUE@am__append_5809 = $(top_builddir)/include/grub/machine/kernel.h \ ++@COND_i386_ieee1275_TRUE@am__append_5802 = $(top_builddir)/include/grub/machine/kernel.h \ + @COND_i386_ieee1275_TRUE@ $(top_srcdir)/include/grub/ieee1275/ieee1275.h \ + @COND_i386_ieee1275_TRUE@ $(top_srcdir)/include/grub/terminfo.h \ + @COND_i386_ieee1275_TRUE@ $(top_srcdir)/include/grub/extcmd.h \ + @COND_i386_ieee1275_TRUE@ $(top_srcdir)/include/grub/lib/arg.h \ + @COND_i386_ieee1275_TRUE@ $(top_srcdir)/include/grub/i386/tsc.h +-@COND_i386_xen_TRUE@am__append_5810 = $(top_builddir)/include/grub/machine/kernel.h \ ++@COND_i386_xen_TRUE@am__append_5803 = $(top_builddir)/include/grub/machine/kernel.h \ + @COND_i386_xen_TRUE@ $(top_srcdir)/include/grub/xen.h \ + @COND_i386_xen_TRUE@ $(top_srcdir)/include/grub/i386/xen/hypercall.h \ + @COND_i386_xen_TRUE@ $(top_srcdir)/include/grub/terminfo.h \ + @COND_i386_xen_TRUE@ $(top_srcdir)/include/grub/extcmd.h \ + @COND_i386_xen_TRUE@ $(top_srcdir)/include/grub/lib/arg.h \ + @COND_i386_xen_TRUE@ $(top_srcdir)/include/grub/loader.h +-@COND_x86_64_xen_TRUE@am__append_5811 = \ ++@COND_x86_64_xen_TRUE@am__append_5804 = \ + @COND_x86_64_xen_TRUE@ $(top_srcdir)/include/grub/xen.h \ + @COND_x86_64_xen_TRUE@ $(top_srcdir)/include/grub/x86_64/xen/hypercall.h \ + @COND_x86_64_xen_TRUE@ $(top_srcdir)/include/grub/terminfo.h \ + @COND_x86_64_xen_TRUE@ $(top_srcdir)/include/grub/extcmd.h \ + @COND_x86_64_xen_TRUE@ $(top_srcdir)/include/grub/lib/arg.h \ + @COND_x86_64_xen_TRUE@ $(top_srcdir)/include/grub/loader.h +-@COND_x86_64_efi_TRUE@am__append_5812 = $(top_builddir)/include/grub/machine/kernel.h \ ++@COND_x86_64_efi_TRUE@am__append_5805 = $(top_builddir)/include/grub/machine/kernel.h \ + @COND_x86_64_efi_TRUE@ $(top_srcdir)/include/grub/efi/efi.h \ + @COND_x86_64_efi_TRUE@ $(top_srcdir)/include/grub/efi/disk.h \ + @COND_x86_64_efi_TRUE@ $(top_srcdir)/include/grub/i386/tsc.h \ + @COND_x86_64_efi_TRUE@ $(top_srcdir)/include/grub/pci.h \ + @COND_x86_64_efi_TRUE@ $(top_srcdir)/include/grub/acpi.h \ + @COND_x86_64_efi_TRUE@ $(top_srcdir)/include/grub/i386/pmtimer.h +-@COND_ia64_efi_TRUE@am__append_5813 = \ ++@COND_ia64_efi_TRUE@am__append_5806 = \ + @COND_ia64_efi_TRUE@ $(top_srcdir)/include/grub/efi/efi.h \ + @COND_ia64_efi_TRUE@ $(top_srcdir)/include/grub/efi/disk.h \ + @COND_ia64_efi_TRUE@ $(top_srcdir)/include/grub/acpi.h +-@COND_mips_TRUE@am__append_5814 = $(top_builddir)/include/grub/cpu/kernel.h +-@COND_mips_arc_TRUE@am__append_5815 = \ ++@COND_mips_TRUE@am__append_5807 = $(top_builddir)/include/grub/cpu/kernel.h ++@COND_mips_arc_TRUE@am__append_5808 = \ + @COND_mips_arc_TRUE@ $(top_srcdir)/include/grub/extcmd.h \ + @COND_mips_arc_TRUE@ $(top_srcdir)/include/grub/arc/arc.h \ + @COND_mips_arc_TRUE@ $(top_srcdir)/include/grub/terminfo.h +-@COND_mips_qemu_mips_TRUE@am__append_5816 = $(top_builddir)/include/grub/keyboard_layouts.h \ ++@COND_mips_qemu_mips_TRUE@am__append_5809 = $(top_builddir)/include/grub/keyboard_layouts.h \ + @COND_mips_qemu_mips_TRUE@ $(top_builddir)/include/grub/machine/kernel.h \ + @COND_mips_qemu_mips_TRUE@ $(top_srcdir)/include/grub/serial.h \ + @COND_mips_qemu_mips_TRUE@ $(top_srcdir)/include/grub/loader.h \ + @COND_mips_qemu_mips_TRUE@ $(top_srcdir)/include/grub/terminfo.h \ + @COND_mips_qemu_mips_TRUE@ $(top_srcdir)/include/grub/extcmd.h \ + @COND_mips_qemu_mips_TRUE@ $(top_srcdir)/include/grub/lib/arg.h +-@COND_mips_loongson_TRUE@am__append_5817 = $(top_builddir)/include/grub/keyboard_layouts.h \ ++@COND_mips_loongson_TRUE@am__append_5810 = $(top_builddir)/include/grub/keyboard_layouts.h \ + @COND_mips_loongson_TRUE@ $(top_builddir)/include/grub/machine/kernel.h \ + @COND_mips_loongson_TRUE@ $(top_builddir)/include/grub/machine/time.h \ + @COND_mips_loongson_TRUE@ $(top_srcdir)/include/grub/video.h \ +@@ -7915,24 +7905,24 @@ TESTS = + @COND_mips_loongson_TRUE@ $(top_srcdir)/include/grub/terminfo.h \ + @COND_mips_loongson_TRUE@ $(top_srcdir)/include/grub/extcmd.h \ + @COND_mips_loongson_TRUE@ $(top_srcdir)/include/grub/lib/arg.h +-@COND_mips_qemu_mips_TRUE@am__append_5818 = $(top_builddir)/include/grub/machine/memory.h \ ++@COND_mips_qemu_mips_TRUE@am__append_5811 = $(top_builddir)/include/grub/machine/memory.h \ + @COND_mips_qemu_mips_TRUE@ $(top_builddir)/include/grub/machine/kernel.h +-@COND_powerpc_ieee1275_TRUE@am__append_5819 = $(top_srcdir)/include/grub/ieee1275/ieee1275.h \ ++@COND_powerpc_ieee1275_TRUE@am__append_5812 = $(top_srcdir)/include/grub/ieee1275/ieee1275.h \ + @COND_powerpc_ieee1275_TRUE@ $(top_srcdir)/include/grub/terminfo.h \ + @COND_powerpc_ieee1275_TRUE@ $(top_srcdir)/include/grub/extcmd.h \ + @COND_powerpc_ieee1275_TRUE@ $(top_srcdir)/include/grub/lib/arg.h +-@COND_sparc64_ieee1275_TRUE@am__append_5820 = $(top_srcdir)/include/grub/ieee1275/ieee1275.h \ ++@COND_sparc64_ieee1275_TRUE@am__append_5813 = $(top_srcdir)/include/grub/ieee1275/ieee1275.h \ + @COND_sparc64_ieee1275_TRUE@ $(top_srcdir)/include/grub/sparc64/ieee1275/ieee1275.h \ + @COND_sparc64_ieee1275_TRUE@ $(top_srcdir)/include/grub/terminfo.h \ + @COND_sparc64_ieee1275_TRUE@ $(top_srcdir)/include/grub/extcmd.h \ + @COND_sparc64_ieee1275_TRUE@ $(top_srcdir)/include/grub/lib/arg.h +-@COND_arm_uboot_TRUE@am__append_5821 = \ ++@COND_arm_uboot_TRUE@am__append_5814 = \ + @COND_arm_uboot_TRUE@ $(top_srcdir)/include/grub/uboot/uboot.h \ + @COND_arm_uboot_TRUE@ $(top_srcdir)/include/grub/uboot/disk.h \ + @COND_arm_uboot_TRUE@ $(top_srcdir)/include/grub/extcmd.h \ + @COND_arm_uboot_TRUE@ $(top_srcdir)/include/grub/lib/arg.h \ + @COND_arm_uboot_TRUE@ $(top_srcdir)/include/grub/arm/system.h +-@COND_arm_coreboot_TRUE@am__append_5822 = $(top_builddir)/include/grub/keyboard_layouts.h \ ++@COND_arm_coreboot_TRUE@am__append_5815 = $(top_builddir)/include/grub/keyboard_layouts.h \ + @COND_arm_coreboot_TRUE@ $(top_srcdir)/include/grub/arm/system.h \ + @COND_arm_coreboot_TRUE@ $(top_srcdir)/include/grub/video.h \ + @COND_arm_coreboot_TRUE@ $(top_srcdir)/include/grub/video_fb.h \ +@@ -7943,35 +7933,35 @@ TESTS = + @COND_arm_coreboot_TRUE@ $(top_srcdir)/include/grub/dma.h \ + @COND_arm_coreboot_TRUE@ $(top_srcdir)/include/grub/arm/coreboot/kernel.h \ + @COND_arm_coreboot_TRUE@ $(top_srcdir)/include/grub/fdtbus.h +-@COND_arm_efi_TRUE@am__append_5823 = \ ++@COND_arm_efi_TRUE@am__append_5816 = \ + @COND_arm_efi_TRUE@ $(top_srcdir)/include/grub/efi/efi.h \ + @COND_arm_efi_TRUE@ $(top_srcdir)/include/grub/efi/disk.h \ + @COND_arm_efi_TRUE@ $(top_srcdir)/include/grub/arm/system.h \ + @COND_arm_efi_TRUE@ $(top_srcdir)/include/grub/acpi.h +-@COND_arm64_efi_TRUE@am__append_5824 = \ ++@COND_arm64_efi_TRUE@am__append_5817 = \ + @COND_arm64_efi_TRUE@ $(top_srcdir)/include/grub/efi/efi.h \ + @COND_arm64_efi_TRUE@ $(top_srcdir)/include/grub/efi/disk.h \ + @COND_arm64_efi_TRUE@ $(top_srcdir)/include/grub/acpi.h +-@COND_riscv32_efi_TRUE@am__append_5825 = \ ++@COND_riscv32_efi_TRUE@am__append_5818 = \ + @COND_riscv32_efi_TRUE@ $(top_srcdir)/include/grub/efi/efi.h \ + @COND_riscv32_efi_TRUE@ $(top_srcdir)/include/grub/efi/disk.h \ + @COND_riscv32_efi_TRUE@ $(top_srcdir)/include/grub/acpi.h +-@COND_riscv64_efi_TRUE@am__append_5826 = \ ++@COND_riscv64_efi_TRUE@am__append_5819 = \ + @COND_riscv64_efi_TRUE@ $(top_srcdir)/include/grub/efi/efi.h \ + @COND_riscv64_efi_TRUE@ $(top_srcdir)/include/grub/efi/disk.h \ + @COND_riscv64_efi_TRUE@ $(top_srcdir)/include/grub/acpi.h +-@COND_emu_TRUE@am__append_5827 = \ ++@COND_emu_TRUE@am__append_5820 = \ + @COND_emu_TRUE@ $(top_srcdir)/include/grub/datetime.h \ + @COND_emu_TRUE@ $(top_srcdir)/include/grub/emu/misc.h \ + @COND_emu_TRUE@ $(top_srcdir)/include/grub/emu/net.h \ + @COND_emu_TRUE@ $(top_srcdir)/include/grub/emu/hostdisk.h \ + @COND_emu_TRUE@ $(top_srcdir)/include/grub/emu/hostfile.h \ + @COND_emu_TRUE@ $(top_srcdir)/include/grub/extcmd.h +-@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_5828 = $(top_srcdir)/include/grub/sdl.h +-@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@am__append_5829 = $(top_srcdir)/include/grub/libpciaccess.h +-@COND_emu_TRUE@am__append_5830 = grub_emu_init.h grub_emu_init.c +-@COND_ENABLE_EFIEMU_TRUE@am__append_5831 = efiemu32.o efiemu64.o +-@COND_ENABLE_EFIEMU_TRUE@am__append_5832 = efiemu32.o efiemu64.o efiemu64_c.o efiemu64_s.o ++@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_5821 = $(top_srcdir)/include/grub/sdl.h ++@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@am__append_5822 = $(top_srcdir)/include/grub/libpciaccess.h ++@COND_emu_TRUE@am__append_5823 = grub_emu_init.h grub_emu_init.c ++@COND_ENABLE_EFIEMU_TRUE@am__append_5824 = efiemu32.o efiemu64.o ++@COND_ENABLE_EFIEMU_TRUE@am__append_5825 = efiemu32.o efiemu64.o efiemu64_c.o efiemu64_s.o + subdir = grub-core + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 + am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ +@@ -8380,591 +8370,590 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(platformdir)" \ + @COND_arm_coreboot_TRUE@am__EXEEXT_290 = reboot.module$(EXEEXT) + @COND_riscv32_efi_TRUE@am__EXEEXT_291 = reboot.module$(EXEEXT) + @COND_riscv64_efi_TRUE@am__EXEEXT_292 = reboot.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_293 = shim_lock.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_294 = hdparm.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_295 = hdparm.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_296 = hdparm.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_297 = hdparm.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_298 = hdparm.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_299 = hdparm.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_300 = hdparm.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__EXEEXT_301 = hdparm.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__EXEEXT_302 = hdparm.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_303 = loadbios.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_304 = loadbios.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_305 = lspci.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_306 = lspci.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_307 = lspci.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_308 = lspci.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_309 = lspci.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_310 = lspci.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_311 = lspci.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__EXEEXT_312 = lspci.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_313 = play.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_314 = play.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_315 = play.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_316 = play.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_317 = play.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_318 = play.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_319 = play.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_320 = spkmodem.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_321 = spkmodem.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_322 = spkmodem.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_323 = spkmodem.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_324 = spkmodem.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_325 = spkmodem.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_326 = spkmodem.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_327 = morse.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_328 = morse.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_329 = morse.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_330 = morse.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_331 = morse.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_332 = morse.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_333 = morse.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_334 = setpci.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_335 = setpci.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_336 = setpci.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_337 = setpci.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_338 = setpci.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_339 = setpci.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_340 = setpci.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__EXEEXT_341 = setpci.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_342 = pcidump.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_343 = pcidump.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_344 = pcidump.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_345 = pcidump.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_346 = pcidump.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_347 = pcidump.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_348 = pcidump.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__EXEEXT_349 = pcidump.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_350 = suspend.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__EXEEXT_351 = suspend.module$(EXEEXT) \ ++@COND_i386_pc_TRUE@am__EXEEXT_293 = hdparm.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_294 = hdparm.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_295 = hdparm.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_296 = hdparm.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_297 = hdparm.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_298 = hdparm.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_299 = hdparm.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__EXEEXT_300 = hdparm.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__EXEEXT_301 = hdparm.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_302 = loadbios.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_303 = loadbios.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_304 = lspci.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_305 = lspci.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_306 = lspci.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_307 = lspci.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_308 = lspci.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_309 = lspci.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_310 = lspci.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__EXEEXT_311 = lspci.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_312 = play.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_313 = play.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_314 = play.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_315 = play.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_316 = play.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_317 = play.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_318 = play.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_319 = spkmodem.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_320 = spkmodem.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_321 = spkmodem.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_322 = spkmodem.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_323 = spkmodem.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_324 = spkmodem.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_325 = spkmodem.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_326 = morse.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_327 = morse.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_328 = morse.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_329 = morse.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_330 = morse.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_331 = morse.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_332 = morse.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_333 = setpci.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_334 = setpci.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_335 = setpci.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_336 = setpci.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_337 = setpci.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_338 = setpci.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_339 = setpci.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__EXEEXT_340 = setpci.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_341 = pcidump.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_342 = pcidump.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_343 = pcidump.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_344 = pcidump.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_345 = pcidump.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_346 = pcidump.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_347 = pcidump.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__EXEEXT_348 = pcidump.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_349 = suspend.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__EXEEXT_350 = suspend.module$(EXEEXT) \ + @COND_powerpc_ieee1275_TRUE@ escc.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_352 = usbtest.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_353 = usbtest.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_354 = usbtest.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_355 = usbtest.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_356 = usbtest.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_357 = usbtest.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_358 = usbtest.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__EXEEXT_359 = usbtest.module$(EXEEXT) +-@COND_arm_coreboot_TRUE@am__EXEEXT_360 = usbtest.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_361 = ata.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_362 = ata.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_363 = ata.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_364 = ata.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_365 = ata.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_366 = ata.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_367 = ata.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__EXEEXT_368 = ata.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__EXEEXT_369 = ata.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_370 = ahci.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_371 = ahci.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_372 = ahci.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_373 = ahci.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_374 = ahci.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_375 = ahci.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_376 = ahci.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__EXEEXT_377 = ahci.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_378 = pata.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_379 = pata.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_380 = pata.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_381 = pata.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_382 = pata.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_383 = pata.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_384 = pata.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__EXEEXT_385 = pata.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__EXEEXT_386 = pata.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_387 = biosdisk.module$(EXEEXT) \ ++@COND_i386_pc_TRUE@am__EXEEXT_351 = usbtest.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_352 = usbtest.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_353 = usbtest.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_354 = usbtest.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_355 = usbtest.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_356 = usbtest.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_357 = usbtest.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__EXEEXT_358 = usbtest.module$(EXEEXT) ++@COND_arm_coreboot_TRUE@am__EXEEXT_359 = usbtest.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_360 = ata.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_361 = ata.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_362 = ata.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_363 = ata.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_364 = ata.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_365 = ata.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_366 = ata.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__EXEEXT_367 = ata.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__EXEEXT_368 = ata.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_369 = ahci.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_370 = ahci.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_371 = ahci.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_372 = ahci.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_373 = ahci.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_374 = ahci.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_375 = ahci.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__EXEEXT_376 = ahci.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_377 = pata.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_378 = pata.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_379 = pata.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_380 = pata.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_381 = pata.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_382 = pata.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_383 = pata.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__EXEEXT_384 = pata.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__EXEEXT_385 = pata.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_386 = biosdisk.module$(EXEEXT) \ + @COND_i386_pc_TRUE@ usbms.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_388 = usbms.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_389 = usbms.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_390 = usbms.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_391 = usbms.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_392 = usbms.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_393 = usbms.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__EXEEXT_394 = usbms.module$(EXEEXT) +-@COND_arm_coreboot_TRUE@am__EXEEXT_395 = usbms.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_396 = nand.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_397 = efiemu.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_398 = efiemu.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_399 = efiemu.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_400 = efiemu.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_401 = efiemu.module$(EXEEXT) +-@COND_emu_TRUE@am__EXEEXT_402 = font.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_403 = font.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_404 = font.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_405 = font.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_406 = font.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_407 = font.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_408 = font.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__EXEEXT_409 = font.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__EXEEXT_410 = font.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__EXEEXT_411 = font.module$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__EXEEXT_412 = font.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__EXEEXT_413 = font.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__EXEEXT_414 = font.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__EXEEXT_415 = font.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__EXEEXT_416 = font.module$(EXEEXT) +-@COND_arm_uboot_TRUE@am__EXEEXT_417 = font.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__EXEEXT_418 = font.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__EXEEXT_419 = font.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__EXEEXT_420 = font.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__EXEEXT_421 = font.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_422 = pxe.module$(EXEEXT) +-@COND_emu_TRUE@am__EXEEXT_423 = bufio.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_424 = bufio.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_425 = bufio.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_426 = bufio.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_427 = bufio.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_428 = bufio.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_429 = bufio.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__EXEEXT_430 = bufio.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__EXEEXT_431 = bufio.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__EXEEXT_432 = bufio.module$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__EXEEXT_433 = bufio.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__EXEEXT_434 = bufio.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__EXEEXT_435 = bufio.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__EXEEXT_436 = bufio.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__EXEEXT_437 = bufio.module$(EXEEXT) +-@COND_arm_uboot_TRUE@am__EXEEXT_438 = bufio.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__EXEEXT_439 = bufio.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__EXEEXT_440 = bufio.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__EXEEXT_441 = bufio.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__EXEEXT_442 = bufio.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_443 = relocator.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_444 = relocator.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_445 = relocator.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_446 = relocator.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_447 = relocator.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_448 = relocator.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_449 = relocator.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__EXEEXT_450 = relocator.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__EXEEXT_451 = relocator.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__EXEEXT_452 = relocator.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__EXEEXT_453 = relocator.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__EXEEXT_454 = \ ++@COND_i386_efi_TRUE@am__EXEEXT_387 = usbms.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_388 = usbms.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_389 = usbms.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_390 = usbms.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_391 = usbms.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_392 = usbms.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__EXEEXT_393 = usbms.module$(EXEEXT) ++@COND_arm_coreboot_TRUE@am__EXEEXT_394 = usbms.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_395 = nand.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_396 = efiemu.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_397 = efiemu.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_398 = efiemu.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_399 = efiemu.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_400 = efiemu.module$(EXEEXT) ++@COND_emu_TRUE@am__EXEEXT_401 = font.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_402 = font.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_403 = font.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_404 = font.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_405 = font.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_406 = font.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_407 = font.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__EXEEXT_408 = font.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__EXEEXT_409 = font.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__EXEEXT_410 = font.module$(EXEEXT) ++@COND_sparc64_ieee1275_TRUE@am__EXEEXT_411 = font.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__EXEEXT_412 = font.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__EXEEXT_413 = font.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__EXEEXT_414 = font.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__EXEEXT_415 = font.module$(EXEEXT) ++@COND_arm_uboot_TRUE@am__EXEEXT_416 = font.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__EXEEXT_417 = font.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__EXEEXT_418 = font.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__EXEEXT_419 = font.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__EXEEXT_420 = font.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_421 = pxe.module$(EXEEXT) ++@COND_emu_TRUE@am__EXEEXT_422 = bufio.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_423 = bufio.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_424 = bufio.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_425 = bufio.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_426 = bufio.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_427 = bufio.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_428 = bufio.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__EXEEXT_429 = bufio.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__EXEEXT_430 = bufio.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__EXEEXT_431 = bufio.module$(EXEEXT) ++@COND_sparc64_ieee1275_TRUE@am__EXEEXT_432 = bufio.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__EXEEXT_433 = bufio.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__EXEEXT_434 = bufio.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__EXEEXT_435 = bufio.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__EXEEXT_436 = bufio.module$(EXEEXT) ++@COND_arm_uboot_TRUE@am__EXEEXT_437 = bufio.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__EXEEXT_438 = bufio.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__EXEEXT_439 = bufio.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__EXEEXT_440 = bufio.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__EXEEXT_441 = bufio.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_442 = relocator.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_443 = relocator.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_444 = relocator.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_445 = relocator.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_446 = relocator.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_447 = relocator.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_448 = relocator.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__EXEEXT_449 = relocator.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__EXEEXT_450 = relocator.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__EXEEXT_451 = relocator.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__EXEEXT_452 = relocator.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__EXEEXT_453 = \ + @COND_powerpc_ieee1275_TRUE@ relocator.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__EXEEXT_455 = relocator.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__EXEEXT_456 = relocator.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_457 = datetime.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_458 = datetime.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_459 = datetime.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_460 = datetime.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_461 = datetime.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_462 = datetime.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_463 = datetime.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__EXEEXT_464 = datetime.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__EXEEXT_465 = datetime.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__EXEEXT_466 = datetime.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__EXEEXT_467 = datetime.module$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__EXEEXT_468 = datetime.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__EXEEXT_469 = datetime.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__EXEEXT_470 = datetime.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__EXEEXT_471 = datetime.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__EXEEXT_472 = datetime.module$(EXEEXT) +-@COND_arm_uboot_TRUE@am__EXEEXT_473 = datetime.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__EXEEXT_474 = datetime.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__EXEEXT_475 = datetime.module$(EXEEXT) +-@COND_arm_coreboot_TRUE@am__EXEEXT_476 = datetime.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__EXEEXT_477 = datetime.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__EXEEXT_478 = datetime.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_479 = aout.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_480 = aout.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_481 = aout.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_482 = aout.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_483 = aout.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_484 = aout.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_485 = aout.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_486 = bsd.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_487 = bsd.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_488 = bsd.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_489 = bsd.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_490 = bsd.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_491 = bsd.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_492 = bsd.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_493 = plan9.module$(EXEEXT) \ ++@COND_mips_arc_TRUE@am__EXEEXT_454 = relocator.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__EXEEXT_455 = relocator.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_456 = datetime.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_457 = datetime.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_458 = datetime.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_459 = datetime.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_460 = datetime.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_461 = datetime.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_462 = datetime.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__EXEEXT_463 = datetime.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__EXEEXT_464 = datetime.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__EXEEXT_465 = datetime.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__EXEEXT_466 = datetime.module$(EXEEXT) ++@COND_sparc64_ieee1275_TRUE@am__EXEEXT_467 = datetime.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__EXEEXT_468 = datetime.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__EXEEXT_469 = datetime.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__EXEEXT_470 = datetime.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__EXEEXT_471 = datetime.module$(EXEEXT) ++@COND_arm_uboot_TRUE@am__EXEEXT_472 = datetime.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__EXEEXT_473 = datetime.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__EXEEXT_474 = datetime.module$(EXEEXT) ++@COND_arm_coreboot_TRUE@am__EXEEXT_475 = datetime.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__EXEEXT_476 = datetime.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__EXEEXT_477 = datetime.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_478 = aout.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_479 = aout.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_480 = aout.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_481 = aout.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_482 = aout.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_483 = aout.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_484 = aout.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_485 = bsd.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_486 = bsd.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_487 = bsd.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_488 = bsd.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_489 = bsd.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_490 = bsd.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_491 = bsd.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_492 = plan9.module$(EXEEXT) \ + @COND_i386_pc_TRUE@ linux16.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_494 = linux16.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_495 = linux16.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_496 = linux16.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_497 = linux16.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_498 = linux16.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_499 = linux16.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_500 = ntldr.module$(EXEEXT) \ ++@COND_i386_efi_TRUE@am__EXEEXT_493 = linux16.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_494 = linux16.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_495 = linux16.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_496 = linux16.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_497 = linux16.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_498 = linux16.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_499 = ntldr.module$(EXEEXT) \ + @COND_i386_pc_TRUE@ truecrypt.module$(EXEEXT) \ + @COND_i386_pc_TRUE@ freedos.module$(EXEEXT) \ + @COND_i386_pc_TRUE@ pxechain.module$(EXEEXT) \ + @COND_i386_pc_TRUE@ multiboot2.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_501 = multiboot2.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_502 = multiboot2.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_503 = multiboot2.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_504 = multiboot2.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_505 = multiboot2.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_506 = multiboot2.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__EXEEXT_507 = multiboot2.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__EXEEXT_508 = multiboot2.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__EXEEXT_509 = multiboot2.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__EXEEXT_510 = multiboot2.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_511 = multiboot.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_512 = multiboot.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_513 = multiboot.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_514 = multiboot.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_515 = multiboot.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_516 = multiboot.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_517 = multiboot.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__EXEEXT_518 = multiboot.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__EXEEXT_519 = xen_boot.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_520 = linux.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_521 = linux.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_522 = linux.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_523 = linux.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_524 = linux.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_525 = linux.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_526 = linux.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__EXEEXT_527 = linux.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__EXEEXT_528 = linux.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__EXEEXT_529 = linux.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__EXEEXT_530 = linux.module$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__EXEEXT_531 = linux.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__EXEEXT_532 = linux.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__EXEEXT_533 = linux.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__EXEEXT_534 = linux.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__EXEEXT_535 = linux.module$(EXEEXT) +-@COND_arm_uboot_TRUE@am__EXEEXT_536 = linux.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__EXEEXT_537 = linux.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__EXEEXT_538 = linux.module$(EXEEXT) +-@COND_arm_coreboot_TRUE@am__EXEEXT_539 = linux.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__EXEEXT_540 = linux.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__EXEEXT_541 = linux.module$(EXEEXT) +-@COND_arm_uboot_TRUE@am__EXEEXT_542 = fdt.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__EXEEXT_543 = fdt.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__EXEEXT_544 = fdt.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__EXEEXT_545 = fdt.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__EXEEXT_546 = fdt.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_547 = xnu.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_548 = xnu.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_549 = xnu.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_550 = xnu.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_551 = xnu.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_552 = random.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_553 = random.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_554 = random.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_555 = random.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_556 = random.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_557 = appleldr.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_558 = appleldr.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_559 = chain.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_560 = chain.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_561 = chain.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_562 = chain.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__EXEEXT_563 = chain.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__EXEEXT_564 = chain.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__EXEEXT_565 = chain.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__EXEEXT_566 = chain.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__EXEEXT_567 = chain.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_568 = mmap.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_569 = mmap.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_570 = mmap.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_571 = mmap.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_572 = mmap.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_573 = mmap.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_574 = mmap.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__EXEEXT_575 = mmap.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__EXEEXT_576 = mmap.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__EXEEXT_577 = mmap.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__EXEEXT_578 = mmap.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__EXEEXT_579 = mmap.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__EXEEXT_580 = mmap.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__EXEEXT_581 = mmap.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__EXEEXT_582 = mmap.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__EXEEXT_583 = mmap.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_584 = at_keyboard.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_585 = at_keyboard.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_586 = at_keyboard.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_587 = at_keyboard.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_588 = \ ++@COND_i386_efi_TRUE@am__EXEEXT_500 = multiboot2.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_501 = multiboot2.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_502 = multiboot2.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_503 = multiboot2.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_504 = multiboot2.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_505 = multiboot2.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__EXEEXT_506 = multiboot2.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__EXEEXT_507 = multiboot2.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__EXEEXT_508 = multiboot2.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__EXEEXT_509 = multiboot2.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_510 = multiboot.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_511 = multiboot.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_512 = multiboot.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_513 = multiboot.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_514 = multiboot.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_515 = multiboot.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_516 = multiboot.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__EXEEXT_517 = multiboot.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__EXEEXT_518 = xen_boot.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_519 = linux.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_520 = linux.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_521 = linux.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_522 = linux.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_523 = linux.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_524 = linux.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_525 = linux.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__EXEEXT_526 = linux.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__EXEEXT_527 = linux.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__EXEEXT_528 = linux.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__EXEEXT_529 = linux.module$(EXEEXT) ++@COND_sparc64_ieee1275_TRUE@am__EXEEXT_530 = linux.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__EXEEXT_531 = linux.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__EXEEXT_532 = linux.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__EXEEXT_533 = linux.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__EXEEXT_534 = linux.module$(EXEEXT) ++@COND_arm_uboot_TRUE@am__EXEEXT_535 = linux.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__EXEEXT_536 = linux.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__EXEEXT_537 = linux.module$(EXEEXT) ++@COND_arm_coreboot_TRUE@am__EXEEXT_538 = linux.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__EXEEXT_539 = linux.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__EXEEXT_540 = linux.module$(EXEEXT) ++@COND_arm_uboot_TRUE@am__EXEEXT_541 = fdt.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__EXEEXT_542 = fdt.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__EXEEXT_543 = fdt.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__EXEEXT_544 = fdt.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__EXEEXT_545 = fdt.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_546 = xnu.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_547 = xnu.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_548 = xnu.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_549 = xnu.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_550 = xnu.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_551 = random.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_552 = random.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_553 = random.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_554 = random.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_555 = random.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_556 = appleldr.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_557 = appleldr.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_558 = chain.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_559 = chain.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_560 = chain.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_561 = chain.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__EXEEXT_562 = chain.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__EXEEXT_563 = chain.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__EXEEXT_564 = chain.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__EXEEXT_565 = chain.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__EXEEXT_566 = chain.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_567 = mmap.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_568 = mmap.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_569 = mmap.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_570 = mmap.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_571 = mmap.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_572 = mmap.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_573 = mmap.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__EXEEXT_574 = mmap.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__EXEEXT_575 = mmap.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__EXEEXT_576 = mmap.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__EXEEXT_577 = mmap.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__EXEEXT_578 = mmap.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__EXEEXT_579 = mmap.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__EXEEXT_580 = mmap.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__EXEEXT_581 = mmap.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__EXEEXT_582 = mmap.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_583 = at_keyboard.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_584 = at_keyboard.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_585 = at_keyboard.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_586 = at_keyboard.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_587 = \ + @COND_i386_multiboot_TRUE@ at_keyboard.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_589 = at_keyboard.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_590 = at_keyboard.module$(EXEEXT) +-@COND_emu_TRUE@am__EXEEXT_591 = gfxterm.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_592 = gfxterm.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_593 = gfxterm.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_594 = gfxterm.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_595 = gfxterm.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_596 = gfxterm.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_597 = gfxterm.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__EXEEXT_598 = gfxterm.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__EXEEXT_599 = gfxterm.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__EXEEXT_600 = gfxterm.module$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__EXEEXT_601 = gfxterm.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__EXEEXT_602 = gfxterm.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__EXEEXT_603 = gfxterm.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__EXEEXT_604 = gfxterm.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__EXEEXT_605 = gfxterm.module$(EXEEXT) +-@COND_arm_uboot_TRUE@am__EXEEXT_606 = gfxterm.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__EXEEXT_607 = gfxterm.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__EXEEXT_608 = gfxterm.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__EXEEXT_609 = gfxterm.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__EXEEXT_610 = gfxterm.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_611 = serial.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_612 = serial.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_613 = serial.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_614 = serial.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_615 = serial.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_616 = serial.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_617 = serial.module$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__EXEEXT_618 = serial.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__EXEEXT_619 = serial.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__EXEEXT_620 = serial.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__EXEEXT_621 = serial.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__EXEEXT_622 = serial.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__EXEEXT_623 = serial.module$(EXEEXT) +-@COND_arm_coreboot_TRUE@am__EXEEXT_624 = serial.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__EXEEXT_625 = serial.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__EXEEXT_626 = serial.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_627 = sendkey.module$(EXEEXT) \ ++@COND_i386_ieee1275_TRUE@am__EXEEXT_588 = at_keyboard.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_589 = at_keyboard.module$(EXEEXT) ++@COND_emu_TRUE@am__EXEEXT_590 = gfxterm.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_591 = gfxterm.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_592 = gfxterm.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_593 = gfxterm.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_594 = gfxterm.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_595 = gfxterm.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_596 = gfxterm.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__EXEEXT_597 = gfxterm.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__EXEEXT_598 = gfxterm.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__EXEEXT_599 = gfxterm.module$(EXEEXT) ++@COND_sparc64_ieee1275_TRUE@am__EXEEXT_600 = gfxterm.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__EXEEXT_601 = gfxterm.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__EXEEXT_602 = gfxterm.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__EXEEXT_603 = gfxterm.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__EXEEXT_604 = gfxterm.module$(EXEEXT) ++@COND_arm_uboot_TRUE@am__EXEEXT_605 = gfxterm.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__EXEEXT_606 = gfxterm.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__EXEEXT_607 = gfxterm.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__EXEEXT_608 = gfxterm.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__EXEEXT_609 = gfxterm.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_610 = serial.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_611 = serial.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_612 = serial.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_613 = serial.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_614 = serial.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_615 = serial.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_616 = serial.module$(EXEEXT) ++@COND_sparc64_ieee1275_TRUE@am__EXEEXT_617 = serial.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__EXEEXT_618 = serial.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__EXEEXT_619 = serial.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__EXEEXT_620 = serial.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__EXEEXT_621 = serial.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__EXEEXT_622 = serial.module$(EXEEXT) ++@COND_arm_coreboot_TRUE@am__EXEEXT_623 = serial.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__EXEEXT_624 = serial.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__EXEEXT_625 = serial.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_626 = sendkey.module$(EXEEXT) \ + @COND_i386_pc_TRUE@ terminfo.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_628 = terminfo.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_629 = terminfo.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_630 = terminfo.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_631 = terminfo.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_632 = terminfo.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__EXEEXT_633 = terminfo.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__EXEEXT_634 = terminfo.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__EXEEXT_635 = terminfo.module$(EXEEXT) +-@COND_arm_coreboot_TRUE@am__EXEEXT_636 = terminfo.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__EXEEXT_637 = terminfo.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__EXEEXT_638 = terminfo.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_639 = usb_keyboard.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_640 = usb_keyboard.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_641 = usb_keyboard.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_642 = \ ++@COND_i386_efi_TRUE@am__EXEEXT_627 = terminfo.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_628 = terminfo.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_629 = terminfo.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_630 = terminfo.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_631 = terminfo.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__EXEEXT_632 = terminfo.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__EXEEXT_633 = terminfo.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__EXEEXT_634 = terminfo.module$(EXEEXT) ++@COND_arm_coreboot_TRUE@am__EXEEXT_635 = terminfo.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__EXEEXT_636 = terminfo.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__EXEEXT_637 = terminfo.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_638 = usb_keyboard.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_639 = usb_keyboard.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_640 = usb_keyboard.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_641 = \ + @COND_i386_coreboot_TRUE@ usb_keyboard.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_643 = \ ++@COND_i386_multiboot_TRUE@am__EXEEXT_642 = \ + @COND_i386_multiboot_TRUE@ usb_keyboard.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_644 = \ ++@COND_i386_ieee1275_TRUE@am__EXEEXT_643 = \ + @COND_i386_ieee1275_TRUE@ usb_keyboard.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_645 = usb_keyboard.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__EXEEXT_646 = \ ++@COND_x86_64_efi_TRUE@am__EXEEXT_644 = usb_keyboard.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__EXEEXT_645 = \ + @COND_mips_loongson_TRUE@ usb_keyboard.module$(EXEEXT) +-@COND_arm_coreboot_TRUE@am__EXEEXT_647 = usb_keyboard.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_648 = vga.module$(EXEEXT) \ ++@COND_arm_coreboot_TRUE@am__EXEEXT_646 = usb_keyboard.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_647 = vga.module$(EXEEXT) \ + @COND_i386_pc_TRUE@ vga_text.module$(EXEEXT) \ + @COND_i386_pc_TRUE@ mda_text.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_649 = mda_text.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_650 = mda_text.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_651 = mda_text.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_652 = video_cirrus.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_653 = video_cirrus.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_654 = video_cirrus.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_655 = \ ++@COND_i386_qemu_TRUE@am__EXEEXT_648 = mda_text.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_649 = mda_text.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_650 = mda_text.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_651 = video_cirrus.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_652 = video_cirrus.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_653 = video_cirrus.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_654 = \ + @COND_i386_coreboot_TRUE@ video_cirrus.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_656 = \ ++@COND_i386_multiboot_TRUE@am__EXEEXT_655 = \ + @COND_i386_multiboot_TRUE@ video_cirrus.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_657 = \ ++@COND_i386_ieee1275_TRUE@am__EXEEXT_656 = \ + @COND_i386_ieee1275_TRUE@ video_cirrus.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_658 = video_cirrus.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_659 = video_bochs.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_660 = video_bochs.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_661 = video_bochs.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_662 = video_bochs.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_663 = \ ++@COND_x86_64_efi_TRUE@am__EXEEXT_657 = video_cirrus.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_658 = video_bochs.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_659 = video_bochs.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_660 = video_bochs.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_661 = video_bochs.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_662 = \ + @COND_i386_multiboot_TRUE@ video_bochs.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_664 = video_bochs.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_665 = video_bochs.module$(EXEEXT) +-@COND_emu_TRUE@am__EXEEXT_666 = legacy_password_test.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_667 = \ ++@COND_i386_ieee1275_TRUE@am__EXEEXT_663 = video_bochs.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_664 = video_bochs.module$(EXEEXT) ++@COND_emu_TRUE@am__EXEEXT_665 = legacy_password_test.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_666 = \ + @COND_i386_pc_TRUE@ legacy_password_test.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_668 = \ ++@COND_i386_efi_TRUE@am__EXEEXT_667 = \ + @COND_i386_efi_TRUE@ legacy_password_test.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_669 = \ ++@COND_x86_64_efi_TRUE@am__EXEEXT_668 = \ + @COND_x86_64_efi_TRUE@ legacy_password_test.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__EXEEXT_670 = \ ++@COND_i386_xen_TRUE@am__EXEEXT_669 = \ + @COND_i386_xen_TRUE@ legacy_password_test.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__EXEEXT_671 = \ ++@COND_x86_64_xen_TRUE@am__EXEEXT_670 = \ + @COND_x86_64_xen_TRUE@ legacy_password_test.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__EXEEXT_672 = \ ++@COND_i386_xen_pvh_TRUE@am__EXEEXT_671 = \ + @COND_i386_xen_pvh_TRUE@ legacy_password_test.module$(EXEEXT) +-@COND_emu_TRUE@am__EXEEXT_673 = div.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_674 = div.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_675 = div.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_676 = div.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_677 = div.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_678 = div.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_679 = div.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_680 = div.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__EXEEXT_681 = div.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__EXEEXT_682 = div.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__EXEEXT_683 = div.module$(EXEEXT) +-@COND_mips_loongson_TRUE@am__EXEEXT_684 = div.module$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__EXEEXT_685 = div.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__EXEEXT_686 = div.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__EXEEXT_687 = div.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__EXEEXT_688 = div.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__EXEEXT_689 = div.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__EXEEXT_690 = div.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_691 = efi_gop.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_692 = efi_gop.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__EXEEXT_693 = efi_gop.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__EXEEXT_694 = efi_gop.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__EXEEXT_695 = efi_gop.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__EXEEXT_696 = efi_gop.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__EXEEXT_697 = efi_gop.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_698 = efi_uga.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_699 = efi_uga.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_700 = vbe.module$(EXEEXT) +-@COND_emu_TRUE@am__EXEEXT_701 = video_fb.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_702 = video_fb.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_703 = video_fb.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_704 = video_fb.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_705 = video_fb.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_706 = video_fb.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_707 = video_fb.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__EXEEXT_708 = video_fb.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__EXEEXT_709 = video_fb.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__EXEEXT_710 = video_fb.module$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__EXEEXT_711 = video_fb.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__EXEEXT_712 = video_fb.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__EXEEXT_713 = video_fb.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__EXEEXT_714 = video_fb.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__EXEEXT_715 = video_fb.module$(EXEEXT) +-@COND_arm_uboot_TRUE@am__EXEEXT_716 = video_fb.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__EXEEXT_717 = video_fb.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__EXEEXT_718 = video_fb.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__EXEEXT_719 = video_fb.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__EXEEXT_720 = video_fb.module$(EXEEXT) +-@COND_emu_TRUE@am__EXEEXT_721 = video.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_722 = video.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_723 = video.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_724 = video.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_725 = video.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_726 = video.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_727 = video.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__EXEEXT_728 = video.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__EXEEXT_729 = video.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__EXEEXT_730 = video.module$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__EXEEXT_731 = video.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__EXEEXT_732 = video.module$(EXEEXT) +-@COND_mips_arc_TRUE@am__EXEEXT_733 = video.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__EXEEXT_734 = video.module$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__EXEEXT_735 = video.module$(EXEEXT) +-@COND_arm_uboot_TRUE@am__EXEEXT_736 = video.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__EXEEXT_737 = video.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__EXEEXT_738 = video.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__EXEEXT_739 = video.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__EXEEXT_740 = video.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__EXEEXT_741 = \ ++@COND_emu_TRUE@am__EXEEXT_672 = div.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_673 = div.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_674 = div.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_675 = div.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_676 = div.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_677 = div.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_678 = div.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_679 = div.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__EXEEXT_680 = div.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__EXEEXT_681 = div.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__EXEEXT_682 = div.module$(EXEEXT) ++@COND_mips_loongson_TRUE@am__EXEEXT_683 = div.module$(EXEEXT) ++@COND_sparc64_ieee1275_TRUE@am__EXEEXT_684 = div.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__EXEEXT_685 = div.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__EXEEXT_686 = div.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__EXEEXT_687 = div.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__EXEEXT_688 = div.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__EXEEXT_689 = div.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_690 = efi_gop.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_691 = efi_gop.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__EXEEXT_692 = efi_gop.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__EXEEXT_693 = efi_gop.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__EXEEXT_694 = efi_gop.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__EXEEXT_695 = efi_gop.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__EXEEXT_696 = efi_gop.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_697 = efi_uga.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_698 = efi_uga.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_699 = vbe.module$(EXEEXT) ++@COND_emu_TRUE@am__EXEEXT_700 = video_fb.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_701 = video_fb.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_702 = video_fb.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_703 = video_fb.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_704 = video_fb.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_705 = video_fb.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_706 = video_fb.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__EXEEXT_707 = video_fb.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__EXEEXT_708 = video_fb.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__EXEEXT_709 = video_fb.module$(EXEEXT) ++@COND_sparc64_ieee1275_TRUE@am__EXEEXT_710 = video_fb.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__EXEEXT_711 = video_fb.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__EXEEXT_712 = video_fb.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__EXEEXT_713 = video_fb.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__EXEEXT_714 = video_fb.module$(EXEEXT) ++@COND_arm_uboot_TRUE@am__EXEEXT_715 = video_fb.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__EXEEXT_716 = video_fb.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__EXEEXT_717 = video_fb.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__EXEEXT_718 = video_fb.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__EXEEXT_719 = video_fb.module$(EXEEXT) ++@COND_emu_TRUE@am__EXEEXT_720 = video.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_721 = video.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_722 = video.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_723 = video.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_724 = video.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_725 = video.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_726 = video.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__EXEEXT_727 = video.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__EXEEXT_728 = video.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__EXEEXT_729 = video.module$(EXEEXT) ++@COND_sparc64_ieee1275_TRUE@am__EXEEXT_730 = video.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__EXEEXT_731 = video.module$(EXEEXT) ++@COND_mips_arc_TRUE@am__EXEEXT_732 = video.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__EXEEXT_733 = video.module$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__EXEEXT_734 = video.module$(EXEEXT) ++@COND_arm_uboot_TRUE@am__EXEEXT_735 = video.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__EXEEXT_736 = video.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__EXEEXT_737 = video.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__EXEEXT_738 = video.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__EXEEXT_739 = video.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__EXEEXT_740 = \ + @COND_powerpc_ieee1275_TRUE@ ieee1275_fb.module$(EXEEXT) +-@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__EXEEXT_742 = \ ++@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__EXEEXT_741 = \ + @COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@ sdl.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_743 = ofnet.module$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__EXEEXT_744 = ofnet.module$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__EXEEXT_745 = ofnet.module$(EXEEXT) +-@COND_arm_uboot_TRUE@am__EXEEXT_746 = ubootnet.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_747 = efinet.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_748 = efinet.module$(EXEEXT) +-@COND_ia64_efi_TRUE@am__EXEEXT_749 = efinet.module$(EXEEXT) +-@COND_arm_efi_TRUE@am__EXEEXT_750 = efinet.module$(EXEEXT) +-@COND_arm64_efi_TRUE@am__EXEEXT_751 = efinet.module$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__EXEEXT_752 = efinet.module$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__EXEEXT_753 = efinet.module$(EXEEXT) +-@COND_emu_TRUE@am__EXEEXT_754 = emunet.module$(EXEEXT) \ ++@COND_i386_ieee1275_TRUE@am__EXEEXT_742 = ofnet.module$(EXEEXT) ++@COND_sparc64_ieee1275_TRUE@am__EXEEXT_743 = ofnet.module$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__EXEEXT_744 = ofnet.module$(EXEEXT) ++@COND_arm_uboot_TRUE@am__EXEEXT_745 = ubootnet.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_746 = efinet.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_747 = efinet.module$(EXEEXT) ++@COND_ia64_efi_TRUE@am__EXEEXT_748 = efinet.module$(EXEEXT) ++@COND_arm_efi_TRUE@am__EXEEXT_749 = efinet.module$(EXEEXT) ++@COND_arm64_efi_TRUE@am__EXEEXT_750 = efinet.module$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__EXEEXT_751 = efinet.module$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__EXEEXT_752 = efinet.module$(EXEEXT) ++@COND_emu_TRUE@am__EXEEXT_753 = emunet.module$(EXEEXT) \ + @COND_emu_TRUE@ legacycfg.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_755 = legacycfg.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_756 = legacycfg.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_757 = legacycfg.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__EXEEXT_758 = legacycfg.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__EXEEXT_759 = legacycfg.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__EXEEXT_760 = legacycfg.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_761 = backtrace.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_762 = backtrace.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_763 = backtrace.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_764 = backtrace.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_765 = backtrace.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_766 = backtrace.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_767 = backtrace.module$(EXEEXT) +-@COND_i386_xen_TRUE@am__EXEEXT_768 = backtrace.module$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__EXEEXT_769 = backtrace.module$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__EXEEXT_770 = backtrace.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_771 = lsapm.module$(EXEEXT) \ ++@COND_i386_pc_TRUE@am__EXEEXT_754 = legacycfg.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_755 = legacycfg.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_756 = legacycfg.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__EXEEXT_757 = legacycfg.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__EXEEXT_758 = legacycfg.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__EXEEXT_759 = legacycfg.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_760 = backtrace.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_761 = backtrace.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_762 = backtrace.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_763 = backtrace.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_764 = backtrace.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_765 = backtrace.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_766 = backtrace.module$(EXEEXT) ++@COND_i386_xen_TRUE@am__EXEEXT_767 = backtrace.module$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__EXEEXT_768 = backtrace.module$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__EXEEXT_769 = backtrace.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_770 = lsapm.module$(EXEEXT) \ + @COND_i386_pc_TRUE@ keylayouts.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_772 = keylayouts.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_773 = keylayouts.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_774 = keylayouts.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_775 = keylayouts.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_776 = keylayouts.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_777 = keylayouts.module$(EXEEXT) +-@COND_ENABLE_CACHE_STATS_TRUE@am__EXEEXT_778 = \ ++@COND_i386_efi_TRUE@am__EXEEXT_771 = keylayouts.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_772 = keylayouts.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_773 = keylayouts.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_774 = keylayouts.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_775 = keylayouts.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_776 = keylayouts.module$(EXEEXT) ++@COND_ENABLE_CACHE_STATS_TRUE@am__EXEEXT_777 = \ + @COND_ENABLE_CACHE_STATS_TRUE@ cacheinfo.module$(EXEEXT) +-@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__EXEEXT_779 = \ ++@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__EXEEXT_778 = \ + @COND_ENABLE_BOOT_TIME_STATS_TRUE@ boottime.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_780 = gdb.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_781 = gdb.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_782 = gdb.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_783 = gdb.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_784 = gdb.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_785 = gdb.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_786 = tpm.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_787 = rdmsr.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_788 = rdmsr.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_789 = rdmsr.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_790 = rdmsr.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_791 = rdmsr.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_792 = rdmsr.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_793 = rdmsr.module$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_794 = wrmsr.module$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_795 = wrmsr.module$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_796 = wrmsr.module$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_797 = wrmsr.module$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_798 = wrmsr.module$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_799 = wrmsr.module$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_800 = wrmsr.module$(EXEEXT) +-@COND_emu_TRUE@am__EXEEXT_801 = kernel.exec$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_802 = kernel.exec$(EXEEXT) +-@COND_i386_efi_TRUE@am__EXEEXT_803 = kernel.exec$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_804 = kernel.exec$(EXEEXT) +-@COND_i386_coreboot_TRUE@am__EXEEXT_805 = kernel.exec$(EXEEXT) +-@COND_i386_multiboot_TRUE@am__EXEEXT_806 = kernel.exec$(EXEEXT) +-@COND_i386_ieee1275_TRUE@am__EXEEXT_807 = kernel.exec$(EXEEXT) +-@COND_x86_64_efi_TRUE@am__EXEEXT_808 = kernel.exec$(EXEEXT) +-@COND_i386_xen_TRUE@am__EXEEXT_809 = kernel.exec$(EXEEXT) +-@COND_x86_64_xen_TRUE@am__EXEEXT_810 = kernel.exec$(EXEEXT) +-@COND_i386_xen_pvh_TRUE@am__EXEEXT_811 = kernel.exec$(EXEEXT) +-@COND_mips_loongson_TRUE@am__EXEEXT_812 = kernel.exec$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__EXEEXT_813 = kernel.exec$(EXEEXT) +-@COND_powerpc_ieee1275_TRUE@am__EXEEXT_814 = kernel.exec$(EXEEXT) +-@COND_mips_arc_TRUE@am__EXEEXT_815 = kernel.exec$(EXEEXT) +-@COND_ia64_efi_TRUE@am__EXEEXT_816 = kernel.exec$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__EXEEXT_817 = kernel.exec$(EXEEXT) +-@COND_arm_uboot_TRUE@am__EXEEXT_818 = kernel.exec$(EXEEXT) +-@COND_arm_efi_TRUE@am__EXEEXT_819 = kernel.exec$(EXEEXT) +-@COND_arm64_efi_TRUE@am__EXEEXT_820 = kernel.exec$(EXEEXT) +-@COND_arm_coreboot_TRUE@am__EXEEXT_821 = kernel.exec$(EXEEXT) +-@COND_riscv32_efi_TRUE@am__EXEEXT_822 = kernel.exec$(EXEEXT) +-@COND_riscv64_efi_TRUE@am__EXEEXT_823 = kernel.exec$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_824 = boot.image$(EXEEXT) +-@COND_i386_qemu_TRUE@am__EXEEXT_825 = boot.image$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__EXEEXT_826 = boot.image$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_827 = boot_hybrid.image$(EXEEXT) \ ++@COND_i386_pc_TRUE@am__EXEEXT_779 = gdb.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_780 = gdb.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_781 = gdb.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_782 = gdb.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_783 = gdb.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_784 = gdb.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_785 = tpm.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_786 = rdmsr.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_787 = rdmsr.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_788 = rdmsr.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_789 = rdmsr.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_790 = rdmsr.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_791 = rdmsr.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_792 = rdmsr.module$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_793 = wrmsr.module$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_794 = wrmsr.module$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_795 = wrmsr.module$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_796 = wrmsr.module$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_797 = wrmsr.module$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_798 = wrmsr.module$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_799 = wrmsr.module$(EXEEXT) ++@COND_emu_TRUE@am__EXEEXT_800 = kernel.exec$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_801 = kernel.exec$(EXEEXT) ++@COND_i386_efi_TRUE@am__EXEEXT_802 = kernel.exec$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_803 = kernel.exec$(EXEEXT) ++@COND_i386_coreboot_TRUE@am__EXEEXT_804 = kernel.exec$(EXEEXT) ++@COND_i386_multiboot_TRUE@am__EXEEXT_805 = kernel.exec$(EXEEXT) ++@COND_i386_ieee1275_TRUE@am__EXEEXT_806 = kernel.exec$(EXEEXT) ++@COND_x86_64_efi_TRUE@am__EXEEXT_807 = kernel.exec$(EXEEXT) ++@COND_i386_xen_TRUE@am__EXEEXT_808 = kernel.exec$(EXEEXT) ++@COND_x86_64_xen_TRUE@am__EXEEXT_809 = kernel.exec$(EXEEXT) ++@COND_i386_xen_pvh_TRUE@am__EXEEXT_810 = kernel.exec$(EXEEXT) ++@COND_mips_loongson_TRUE@am__EXEEXT_811 = kernel.exec$(EXEEXT) ++@COND_sparc64_ieee1275_TRUE@am__EXEEXT_812 = kernel.exec$(EXEEXT) ++@COND_powerpc_ieee1275_TRUE@am__EXEEXT_813 = kernel.exec$(EXEEXT) ++@COND_mips_arc_TRUE@am__EXEEXT_814 = kernel.exec$(EXEEXT) ++@COND_ia64_efi_TRUE@am__EXEEXT_815 = kernel.exec$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__EXEEXT_816 = kernel.exec$(EXEEXT) ++@COND_arm_uboot_TRUE@am__EXEEXT_817 = kernel.exec$(EXEEXT) ++@COND_arm_efi_TRUE@am__EXEEXT_818 = kernel.exec$(EXEEXT) ++@COND_arm64_efi_TRUE@am__EXEEXT_819 = kernel.exec$(EXEEXT) ++@COND_arm_coreboot_TRUE@am__EXEEXT_820 = kernel.exec$(EXEEXT) ++@COND_riscv32_efi_TRUE@am__EXEEXT_821 = kernel.exec$(EXEEXT) ++@COND_riscv64_efi_TRUE@am__EXEEXT_822 = kernel.exec$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_823 = boot.image$(EXEEXT) ++@COND_i386_qemu_TRUE@am__EXEEXT_824 = boot.image$(EXEEXT) ++@COND_sparc64_ieee1275_TRUE@am__EXEEXT_825 = boot.image$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_826 = boot_hybrid.image$(EXEEXT) \ + @COND_i386_pc_TRUE@ cdboot.image$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__EXEEXT_828 = cdboot.image$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_829 = pxeboot.image$(EXEEXT) \ ++@COND_sparc64_ieee1275_TRUE@am__EXEEXT_827 = cdboot.image$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_828 = pxeboot.image$(EXEEXT) \ + @COND_i386_pc_TRUE@ diskboot.image$(EXEEXT) +-@COND_sparc64_ieee1275_TRUE@am__EXEEXT_830 = diskboot.image$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_831 = lnxboot.image$(EXEEXT) +-@COND_mips_loongson_TRUE@am__EXEEXT_832 = \ ++@COND_sparc64_ieee1275_TRUE@am__EXEEXT_829 = diskboot.image$(EXEEXT) ++@COND_i386_pc_TRUE@am__EXEEXT_830 = lnxboot.image$(EXEEXT) ++@COND_mips_loongson_TRUE@am__EXEEXT_831 = \ + @COND_mips_loongson_TRUE@ xz_decompress.image$(EXEEXT) +-@COND_mips_arc_TRUE@am__EXEEXT_833 = xz_decompress.image$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__EXEEXT_834 = \ ++@COND_mips_arc_TRUE@am__EXEEXT_832 = xz_decompress.image$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__EXEEXT_833 = \ + @COND_mips_qemu_mips_TRUE@ xz_decompress.image$(EXEEXT) +-@COND_mips_loongson_TRUE@am__EXEEXT_835 = \ ++@COND_mips_loongson_TRUE@am__EXEEXT_834 = \ + @COND_mips_loongson_TRUE@ none_decompress.image$(EXEEXT) +-@COND_mips_arc_TRUE@am__EXEEXT_836 = none_decompress.image$(EXEEXT) +-@COND_mips_qemu_mips_TRUE@am__EXEEXT_837 = \ ++@COND_mips_arc_TRUE@am__EXEEXT_835 = none_decompress.image$(EXEEXT) ++@COND_mips_qemu_mips_TRUE@am__EXEEXT_836 = \ + @COND_mips_qemu_mips_TRUE@ none_decompress.image$(EXEEXT) +-@COND_i386_pc_TRUE@am__EXEEXT_838 = lzma_decompress.image$(EXEEXT) +-@COND_mips_loongson_TRUE@am__EXEEXT_839 = fwstart.image$(EXEEXT) \ ++@COND_i386_pc_TRUE@am__EXEEXT_837 = lzma_decompress.image$(EXEEXT) ++@COND_mips_loongson_TRUE@am__EXEEXT_838 = fwstart.image$(EXEEXT) \ + @COND_mips_loongson_TRUE@ fwstart_fuloong2f.image$(EXEEXT) + PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) $(platform_PROGRAMS) \ + $(sbin_PROGRAMS) +@@ -12775,13 +12764,6 @@ shift_test_module_OBJECTS = $(am_shift_test_module_OBJECTS) \ + $(nodist_shift_test_module_OBJECTS) + shift_test_module_LINK = $(CCLD) $(shift_test_module_CFLAGS) $(CFLAGS) \ + $(shift_test_module_LDFLAGS) $(LDFLAGS) -o $@ +-am__shim_lock_module_SOURCES_DIST = commands/efi/shim_lock.c +-@COND_x86_64_efi_TRUE@am_shim_lock_module_OBJECTS = commands/efi/shim_lock_module-shim_lock.$(OBJEXT) +-nodist_shim_lock_module_OBJECTS = +-shim_lock_module_OBJECTS = $(am_shim_lock_module_OBJECTS) \ +- $(nodist_shim_lock_module_OBJECTS) +-shim_lock_module_LINK = $(CCLD) $(shim_lock_module_CFLAGS) $(CFLAGS) \ +- $(shim_lock_module_LDFLAGS) $(LDFLAGS) -o $@ + am_signature_test_module_OBJECTS = \ + tests/signature_test_module-signature_test.$(OBJEXT) + nodist_signature_test_module_OBJECTS = +@@ -13847,7 +13829,6 @@ SOURCES = $(acpi_module_SOURCES) $(nodist_acpi_module_SOURCES) \ + $(nodist_setpci_module_SOURCES) $(sfs_module_SOURCES) \ + $(nodist_sfs_module_SOURCES) $(shift_test_module_SOURCES) \ + $(nodist_shift_test_module_SOURCES) \ +- $(shim_lock_module_SOURCES) $(nodist_shim_lock_module_SOURCES) \ + $(signature_test_module_SOURCES) \ + $(nodist_signature_test_module_SOURCES) \ + $(sleep_module_SOURCES) $(nodist_sleep_module_SOURCES) \ +@@ -14078,10 +14059,8 @@ DIST_SOURCES = $(am__acpi_module_SOURCES_DIST) \ + $(am__serial_module_SOURCES_DIST) $(setjmp_module_SOURCES) \ + $(setjmp_test_module_SOURCES) \ + $(am__setpci_module_SOURCES_DIST) $(sfs_module_SOURCES) \ +- $(shift_test_module_SOURCES) \ +- $(am__shim_lock_module_SOURCES_DIST) \ +- $(signature_test_module_SOURCES) $(sleep_module_SOURCES) \ +- $(sleep_test_module_SOURCES) \ ++ $(shift_test_module_SOURCES) $(signature_test_module_SOURCES) \ ++ $(sleep_module_SOURCES) $(sleep_test_module_SOURCES) \ + $(am__spkmodem_module_SOURCES_DIST) $(squash4_module_SOURCES) \ + $(strtoull_test_module_SOURCES) \ + $(am__suspend_module_SOURCES_DIST) \ +@@ -15514,56 +15493,55 @@ MOD_FILES = disk.mod trig.mod $(am__append_8) $(am__append_15) \ + $(am__append_2045) $(am__append_2052) $(am__append_2059) \ + $(am__append_2066) $(am__append_2073) $(am__append_2080) \ + $(am__append_2087) $(am__append_2094) $(am__append_2101) \ +- $(am__append_2108) help.mod hexdump.mod keystatus.mod \ +- $(am__append_2115) $(am__append_2122) loadenv.mod ls.mod \ +- lsmmap.mod $(am__append_2129) $(am__append_2136) \ ++ help.mod hexdump.mod keystatus.mod $(am__append_2108) \ ++ $(am__append_2115) loadenv.mod ls.mod lsmmap.mod \ ++ $(am__append_2122) $(am__append_2129) $(am__append_2136) \ + $(am__append_2143) $(am__append_2150) $(am__append_2157) \ +- $(am__append_2164) $(am__append_2171) $(am__append_2178) \ +- memrw.mod minicmd.mod parttool.mod password.mod \ +- password_pbkdf2.mod $(am__append_2185) $(am__append_2192) \ ++ $(am__append_2164) $(am__append_2171) memrw.mod minicmd.mod \ ++ parttool.mod password.mod password_pbkdf2.mod \ ++ $(am__append_2178) $(am__append_2185) $(am__append_2192) \ + $(am__append_2199) $(am__append_2206) $(am__append_2213) \ + $(am__append_2220) $(am__append_2227) $(am__append_2234) \ + $(am__append_2241) $(am__append_2248) $(am__append_2255) \ + $(am__append_2262) $(am__append_2269) $(am__append_2276) \ + $(am__append_2283) $(am__append_2290) $(am__append_2297) \ + $(am__append_2304) $(am__append_2311) $(am__append_2318) \ +- $(am__append_2325) probe.mod read.mod search.mod \ +- search_fs_file.mod search_fs_uuid.mod search_label.mod \ ++ probe.mod read.mod search.mod search_fs_file.mod \ ++ search_fs_uuid.mod search_label.mod $(am__append_2325) \ + $(am__append_2332) $(am__append_2339) $(am__append_2346) \ + $(am__append_2353) $(am__append_2360) $(am__append_2367) \ + $(am__append_2374) $(am__append_2381) $(am__append_2388) \ + $(am__append_2395) $(am__append_2402) $(am__append_2409) \ + $(am__append_2416) $(am__append_2423) $(am__append_2430) \ +- $(am__append_2437) sleep.mod $(am__append_2444) \ +- $(am__append_2451) terminal.mod test.mod true.mod \ +- $(am__append_2458) $(am__append_2465) $(am__append_2472) \ +- $(am__append_2479) $(am__append_2486) $(am__append_2493) \ +- $(am__append_2500) $(am__append_2507) $(am__append_2514) \ +- videoinfo.mod videotest.mod xnu_uuid.mod dm_nv.mod \ +- loopback.mod cryptodisk.mod luks.mod geli.mod lvm.mod ldm.mod \ +- mdraid09.mod mdraid09_be.mod mdraid1x.mod diskfilter.mod \ +- raid5rec.mod raid6rec.mod scsi.mod memdisk.mod \ +- $(am__append_2521) $(am__append_2528) $(am__append_2535) \ +- $(am__append_2542) $(am__append_2549) $(am__append_2556) \ +- $(am__append_2563) $(am__append_2570) $(am__append_2577) \ +- $(am__append_2584) $(am__append_2591) $(am__append_2598) \ +- $(am__append_2605) $(am__append_2612) $(am__append_2619) \ +- $(am__append_2626) $(am__append_2633) $(am__append_2640) \ +- $(am__append_2647) $(am__append_2654) $(am__append_2661) \ +- $(am__append_2668) $(am__append_2675) $(am__append_2682) \ +- $(am__append_2689) $(am__append_2696) $(am__append_2703) \ +- $(am__append_2710) $(am__append_2717) $(am__append_2724) \ +- $(am__append_2731) $(am__append_2738) $(am__append_2745) \ +- $(am__append_2752) $(am__append_2759) $(am__append_2766) \ +- $(am__append_2773) $(am__append_2780) $(am__append_2787) \ +- $(am__append_2794) $(am__append_2801) $(am__append_2808) \ +- $(am__append_2815) $(am__append_2822) $(am__append_2829) \ +- $(am__append_2836) $(am__append_2843) $(am__append_2850) \ +- $(am__append_2857) $(am__append_2864) $(am__append_2871) \ +- $(am__append_2878) $(am__append_2885) $(am__append_2892) \ +- $(am__append_2899) $(am__append_2906) $(am__append_2913) \ +- $(am__append_2920) $(am__append_2927) $(am__append_2934) \ +- $(am__append_2941) procfs.mod affs.mod afs.mod bfs.mod \ ++ sleep.mod $(am__append_2437) $(am__append_2444) terminal.mod \ ++ test.mod true.mod $(am__append_2451) $(am__append_2458) \ ++ $(am__append_2465) $(am__append_2472) $(am__append_2479) \ ++ $(am__append_2486) $(am__append_2493) $(am__append_2500) \ ++ $(am__append_2507) videoinfo.mod videotest.mod xnu_uuid.mod \ ++ dm_nv.mod loopback.mod cryptodisk.mod luks.mod geli.mod \ ++ lvm.mod ldm.mod mdraid09.mod mdraid09_be.mod mdraid1x.mod \ ++ diskfilter.mod raid5rec.mod raid6rec.mod scsi.mod memdisk.mod \ ++ $(am__append_2514) $(am__append_2521) $(am__append_2528) \ ++ $(am__append_2535) $(am__append_2542) $(am__append_2549) \ ++ $(am__append_2556) $(am__append_2563) $(am__append_2570) \ ++ $(am__append_2577) $(am__append_2584) $(am__append_2591) \ ++ $(am__append_2598) $(am__append_2605) $(am__append_2612) \ ++ $(am__append_2619) $(am__append_2626) $(am__append_2633) \ ++ $(am__append_2640) $(am__append_2647) $(am__append_2654) \ ++ $(am__append_2661) $(am__append_2668) $(am__append_2675) \ ++ $(am__append_2682) $(am__append_2689) $(am__append_2696) \ ++ $(am__append_2703) $(am__append_2710) $(am__append_2717) \ ++ $(am__append_2724) $(am__append_2731) $(am__append_2738) \ ++ $(am__append_2745) $(am__append_2752) $(am__append_2759) \ ++ $(am__append_2766) $(am__append_2773) $(am__append_2780) \ ++ $(am__append_2787) $(am__append_2794) $(am__append_2801) \ ++ $(am__append_2808) $(am__append_2815) $(am__append_2822) \ ++ $(am__append_2829) $(am__append_2836) $(am__append_2843) \ ++ $(am__append_2850) $(am__append_2857) $(am__append_2864) \ ++ $(am__append_2871) $(am__append_2878) $(am__append_2885) \ ++ $(am__append_2892) $(am__append_2899) $(am__append_2906) \ ++ $(am__append_2913) $(am__append_2920) $(am__append_2927) \ ++ $(am__append_2934) procfs.mod affs.mod afs.mod bfs.mod \ + zstd.mod btrfs.mod archelp.mod cbfs.mod cpio.mod cpio_be.mod \ + newc.mod odc.mod ext2.mod fat.mod exfat.mod f2fs.mod \ + fshelp.mod hfs.mod hfsplus.mod hfspluscomp.mod iso9660.mod \ +@@ -15571,150 +15549,150 @@ MOD_FILES = disk.mod trig.mod $(am__append_8) $(am__append_15) \ + minix2_be.mod minix3_be.mod nilfs2.mod ntfs.mod ntfscomp.mod \ + reiserfs.mod romfs.mod sfs.mod squash4.mod tar.mod udf.mod \ + ufs1.mod ufs1_be.mod ufs2.mod xfs.mod zfs.mod zfscrypt.mod \ +- zfsinfo.mod macbless.mod $(am__append_2948) gettext.mod \ +- gfxmenu.mod hello.mod gzio.mod offsetio.mod $(am__append_2955) \ +- $(am__append_2962) $(am__append_2969) $(am__append_2976) \ +- $(am__append_2983) $(am__append_2990) $(am__append_2997) \ +- $(am__append_3004) $(am__append_3011) $(am__append_3018) \ +- $(am__append_3025) $(am__append_3032) $(am__append_3039) \ +- $(am__append_3046) $(am__append_3053) $(am__append_3060) \ +- $(am__append_3067) $(am__append_3074) $(am__append_3081) \ +- $(am__append_3088) elf.mod crypto.mod pbkdf2.mod \ +- $(am__append_3095) $(am__append_3102) $(am__append_3109) \ +- $(am__append_3116) $(am__append_3123) $(am__append_3130) \ +- $(am__append_3137) $(am__append_3144) $(am__append_3151) \ +- $(am__append_3158) $(am__append_3165) $(am__append_3172) \ +- $(am__append_3179) $(am__append_3186) $(am__append_3193) \ +- $(am__append_3200) $(am__append_3207) $(am__append_3214) \ +- $(am__append_3221) $(am__append_3228) $(am__append_3235) \ +- $(am__append_3242) $(am__append_3249) $(am__append_3256) \ +- $(am__append_3263) $(am__append_3270) $(am__append_3277) \ +- $(am__append_3284) $(am__append_3291) $(am__append_3298) \ +- $(am__append_3305) $(am__append_3312) $(am__append_3319) \ +- $(am__append_3326) $(am__append_3333) $(am__append_3340) \ +- setjmp.mod $(am__append_3347) $(am__append_3354) \ +- $(am__append_3361) $(am__append_3368) $(am__append_3375) \ +- $(am__append_3382) $(am__append_3389) $(am__append_3396) \ +- $(am__append_3403) $(am__append_3410) $(am__append_3417) \ +- $(am__append_3424) $(am__append_3431) $(am__append_3438) \ +- $(am__append_3445) $(am__append_3452) $(am__append_3459) \ +- $(am__append_3466) $(am__append_3473) $(am__append_3480) \ +- $(am__append_3487) $(am__append_3494) $(am__append_3501) \ +- $(am__append_3508) $(am__append_3515) $(am__append_3522) \ +- $(am__append_3529) $(am__append_3536) $(am__append_3543) \ +- $(am__append_3550) $(am__append_3557) $(am__append_3564) \ +- $(am__append_3571) $(am__append_3578) $(am__append_3585) \ +- $(am__append_3592) $(am__append_3599) $(am__append_3606) \ +- $(am__append_3613) $(am__append_3620) $(am__append_3627) \ +- $(am__append_3634) $(am__append_3641) $(am__append_3648) \ +- $(am__append_3655) $(am__append_3662) $(am__append_3669) \ +- $(am__append_3676) $(am__append_3683) $(am__append_3690) \ +- $(am__append_3697) $(am__append_3704) $(am__append_3711) \ +- $(am__append_3718) $(am__append_3725) $(am__append_3732) \ +- $(am__append_3739) $(am__append_3746) $(am__append_3753) \ +- $(am__append_3760) $(am__append_3767) $(am__append_3774) \ +- $(am__append_3781) $(am__append_3788) $(am__append_3795) \ +- $(am__append_3802) $(am__append_3809) $(am__append_3816) \ +- $(am__append_3823) $(am__append_3830) $(am__append_3837) \ +- $(am__append_3844) $(am__append_3851) $(am__append_3858) \ +- $(am__append_3865) $(am__append_3872) $(am__append_3879) \ +- $(am__append_3886) macho.mod $(am__append_3893) \ +- $(am__append_3900) $(am__append_3907) $(am__append_3914) \ +- $(am__append_3921) $(am__append_3928) $(am__append_3935) \ +- $(am__append_3942) $(am__append_3949) $(am__append_3956) \ +- $(am__append_3963) $(am__append_3970) $(am__append_3977) \ +- $(am__append_3984) $(am__append_3991) $(am__append_3998) \ +- $(am__append_4005) $(am__append_4012) $(am__append_4019) \ +- $(am__append_4026) $(am__append_4033) $(am__append_4040) \ +- $(am__append_4047) $(am__append_4054) $(am__append_4061) \ +- $(am__append_4068) $(am__append_4075) normal.mod \ ++ zfsinfo.mod macbless.mod $(am__append_2941) gettext.mod \ ++ gfxmenu.mod hello.mod gzio.mod offsetio.mod $(am__append_2948) \ ++ $(am__append_2955) $(am__append_2962) $(am__append_2969) \ ++ $(am__append_2976) $(am__append_2983) $(am__append_2990) \ ++ $(am__append_2997) $(am__append_3004) $(am__append_3011) \ ++ $(am__append_3018) $(am__append_3025) $(am__append_3032) \ ++ $(am__append_3039) $(am__append_3046) $(am__append_3053) \ ++ $(am__append_3060) $(am__append_3067) $(am__append_3074) \ ++ $(am__append_3081) elf.mod crypto.mod pbkdf2.mod \ ++ $(am__append_3088) $(am__append_3095) $(am__append_3102) \ ++ $(am__append_3109) $(am__append_3116) $(am__append_3123) \ ++ $(am__append_3130) $(am__append_3137) $(am__append_3144) \ ++ $(am__append_3151) $(am__append_3158) $(am__append_3165) \ ++ $(am__append_3172) $(am__append_3179) $(am__append_3186) \ ++ $(am__append_3193) $(am__append_3200) $(am__append_3207) \ ++ $(am__append_3214) $(am__append_3221) $(am__append_3228) \ ++ $(am__append_3235) $(am__append_3242) $(am__append_3249) \ ++ $(am__append_3256) $(am__append_3263) $(am__append_3270) \ ++ $(am__append_3277) $(am__append_3284) $(am__append_3291) \ ++ $(am__append_3298) $(am__append_3305) $(am__append_3312) \ ++ $(am__append_3319) $(am__append_3326) $(am__append_3333) \ ++ setjmp.mod $(am__append_3340) $(am__append_3347) \ ++ $(am__append_3354) $(am__append_3361) $(am__append_3368) \ ++ $(am__append_3375) $(am__append_3382) $(am__append_3389) \ ++ $(am__append_3396) $(am__append_3403) $(am__append_3410) \ ++ $(am__append_3417) $(am__append_3424) $(am__append_3431) \ ++ $(am__append_3438) $(am__append_3445) $(am__append_3452) \ ++ $(am__append_3459) $(am__append_3466) $(am__append_3473) \ ++ $(am__append_3480) $(am__append_3487) $(am__append_3494) \ ++ $(am__append_3501) $(am__append_3508) $(am__append_3515) \ ++ $(am__append_3522) $(am__append_3529) $(am__append_3536) \ ++ $(am__append_3543) $(am__append_3550) $(am__append_3557) \ ++ $(am__append_3564) $(am__append_3571) $(am__append_3578) \ ++ $(am__append_3585) $(am__append_3592) $(am__append_3599) \ ++ $(am__append_3606) $(am__append_3613) $(am__append_3620) \ ++ $(am__append_3627) $(am__append_3634) $(am__append_3641) \ ++ $(am__append_3648) $(am__append_3655) $(am__append_3662) \ ++ $(am__append_3669) $(am__append_3676) $(am__append_3683) \ ++ $(am__append_3690) $(am__append_3697) $(am__append_3704) \ ++ $(am__append_3711) $(am__append_3718) $(am__append_3725) \ ++ $(am__append_3732) $(am__append_3739) $(am__append_3746) \ ++ $(am__append_3753) $(am__append_3760) $(am__append_3767) \ ++ $(am__append_3774) $(am__append_3781) $(am__append_3788) \ ++ $(am__append_3795) $(am__append_3802) $(am__append_3809) \ ++ $(am__append_3816) $(am__append_3823) $(am__append_3830) \ ++ $(am__append_3837) $(am__append_3844) $(am__append_3851) \ ++ $(am__append_3858) $(am__append_3865) $(am__append_3872) \ ++ $(am__append_3879) macho.mod $(am__append_3886) \ ++ $(am__append_3893) $(am__append_3900) $(am__append_3907) \ ++ $(am__append_3914) $(am__append_3921) $(am__append_3928) \ ++ $(am__append_3935) $(am__append_3942) $(am__append_3949) \ ++ $(am__append_3956) $(am__append_3963) $(am__append_3970) \ ++ $(am__append_3977) $(am__append_3984) $(am__append_3991) \ ++ $(am__append_3998) $(am__append_4005) $(am__append_4012) \ ++ $(am__append_4019) $(am__append_4026) $(am__append_4033) \ ++ $(am__append_4040) $(am__append_4047) $(am__append_4054) \ ++ $(am__append_4061) $(am__append_4068) normal.mod \ + part_acorn.mod part_amiga.mod part_apple.mod part_gpt.mod \ + part_msdos.mod part_sun.mod part_plan.mod part_dvh.mod \ + part_bsd.mod part_sunpc.mod part_dfly.mod msdospart.mod \ +- $(am__append_4082) $(am__append_4089) $(am__append_4096) \ +- $(am__append_4103) $(am__append_4110) $(am__append_4117) \ +- $(am__append_4124) $(am__append_4131) $(am__append_4138) \ +- $(am__append_4145) $(am__append_4152) $(am__append_4159) \ +- $(am__append_4166) $(am__append_4173) $(am__append_4180) \ +- $(am__append_4187) $(am__append_4194) $(am__append_4201) \ +- $(am__append_4208) $(am__append_4215) $(am__append_4222) \ +- $(am__append_4229) $(am__append_4236) $(am__append_4243) \ +- $(am__append_4250) $(am__append_4257) $(am__append_4264) \ +- gfxterm_background.mod $(am__append_4271) $(am__append_4278) \ +- $(am__append_4285) $(am__append_4292) $(am__append_4299) \ +- $(am__append_4306) $(am__append_4313) $(am__append_4320) \ +- $(am__append_4327) $(am__append_4334) $(am__append_4341) \ +- $(am__append_4348) $(am__append_4355) $(am__append_4362) \ +- $(am__append_4369) $(am__append_4376) $(am__append_4383) \ +- $(am__append_4390) $(am__append_4397) $(am__append_4404) \ +- $(am__append_4411) $(am__append_4418) $(am__append_4425) \ +- $(am__append_4432) $(am__append_4439) $(am__append_4446) \ +- $(am__append_4453) $(am__append_4460) $(am__append_4467) \ +- $(am__append_4474) $(am__append_4481) $(am__append_4488) \ +- $(am__append_4495) $(am__append_4502) $(am__append_4509) \ +- $(am__append_4516) $(am__append_4523) $(am__append_4530) \ +- $(am__append_4537) $(am__append_4544) $(am__append_4551) \ +- $(am__append_4558) $(am__append_4565) $(am__append_4572) \ +- $(am__append_4579) $(am__append_4586) $(am__append_4593) \ +- $(am__append_4600) $(am__append_4607) $(am__append_4614) \ +- $(am__append_4621) $(am__append_4628) $(am__append_4635) \ +- $(am__append_4642) $(am__append_4649) functional_test.mod \ ++ $(am__append_4075) $(am__append_4082) $(am__append_4089) \ ++ $(am__append_4096) $(am__append_4103) $(am__append_4110) \ ++ $(am__append_4117) $(am__append_4124) $(am__append_4131) \ ++ $(am__append_4138) $(am__append_4145) $(am__append_4152) \ ++ $(am__append_4159) $(am__append_4166) $(am__append_4173) \ ++ $(am__append_4180) $(am__append_4187) $(am__append_4194) \ ++ $(am__append_4201) $(am__append_4208) $(am__append_4215) \ ++ $(am__append_4222) $(am__append_4229) $(am__append_4236) \ ++ $(am__append_4243) $(am__append_4250) $(am__append_4257) \ ++ gfxterm_background.mod $(am__append_4264) $(am__append_4271) \ ++ $(am__append_4278) $(am__append_4285) $(am__append_4292) \ ++ $(am__append_4299) $(am__append_4306) $(am__append_4313) \ ++ $(am__append_4320) $(am__append_4327) $(am__append_4334) \ ++ $(am__append_4341) $(am__append_4348) $(am__append_4355) \ ++ $(am__append_4362) $(am__append_4369) $(am__append_4376) \ ++ $(am__append_4383) $(am__append_4390) $(am__append_4397) \ ++ $(am__append_4404) $(am__append_4411) $(am__append_4418) \ ++ $(am__append_4425) $(am__append_4432) $(am__append_4439) \ ++ $(am__append_4446) $(am__append_4453) $(am__append_4460) \ ++ $(am__append_4467) $(am__append_4474) $(am__append_4481) \ ++ $(am__append_4488) $(am__append_4495) $(am__append_4502) \ ++ $(am__append_4509) $(am__append_4516) $(am__append_4523) \ ++ $(am__append_4530) $(am__append_4537) $(am__append_4544) \ ++ $(am__append_4551) $(am__append_4558) $(am__append_4565) \ ++ $(am__append_4572) $(am__append_4579) $(am__append_4586) \ ++ $(am__append_4593) $(am__append_4600) $(am__append_4607) \ ++ $(am__append_4614) $(am__append_4621) $(am__append_4628) \ ++ $(am__append_4635) $(am__append_4642) functional_test.mod \ + exfctest.mod strtoull_test.mod setjmp_test.mod \ + signature_test.mod sleep_test.mod xnu_uuid_test.mod \ +- pbkdf2_test.mod $(am__append_4656) $(am__append_4663) \ +- $(am__append_4670) $(am__append_4677) $(am__append_4684) \ +- $(am__append_4691) $(am__append_4698) $(am__append_4705) \ +- $(am__append_4712) $(am__append_4719) $(am__append_4726) \ +- $(am__append_4733) $(am__append_4740) $(am__append_4747) \ +- $(am__append_4754) $(am__append_4761) $(am__append_4768) \ +- $(am__append_4775) $(am__append_4782) $(am__append_4789) \ +- $(am__append_4796) $(am__append_4803) $(am__append_4810) \ +- $(am__append_4817) $(am__append_4824) div_test.mod \ ++ pbkdf2_test.mod $(am__append_4649) $(am__append_4656) \ ++ $(am__append_4663) $(am__append_4670) $(am__append_4677) \ ++ $(am__append_4684) $(am__append_4691) $(am__append_4698) \ ++ $(am__append_4705) $(am__append_4712) $(am__append_4719) \ ++ $(am__append_4726) $(am__append_4733) $(am__append_4740) \ ++ $(am__append_4747) $(am__append_4754) $(am__append_4761) \ ++ $(am__append_4768) $(am__append_4775) $(am__append_4782) \ ++ $(am__append_4789) $(am__append_4796) $(am__append_4803) \ ++ $(am__append_4810) $(am__append_4817) div_test.mod \ + mul_test.mod shift_test.mod cmp_test.mod ctz_test.mod \ + bswap_test.mod videotest_checksum.mod gfxterm_menu.mod \ + cmdline_cat_test.mod bitmap.mod bitmap_scale.mod \ +- $(am__append_4831) $(am__append_4838) $(am__append_4845) \ +- $(am__append_4852) $(am__append_4859) $(am__append_4866) \ +- $(am__append_4873) $(am__append_4880) $(am__append_4887) \ +- jpeg.mod png.mod tga.mod $(am__append_4894) $(am__append_4901) \ +- $(am__append_4908) $(am__append_4915) $(am__append_4922) \ +- $(am__append_4929) $(am__append_4936) $(am__append_4943) \ +- $(am__append_4950) $(am__append_4957) $(am__append_4964) \ +- $(am__append_4971) $(am__append_4978) $(am__append_4985) \ +- $(am__append_4992) $(am__append_4999) $(am__append_5006) \ +- $(am__append_5013) $(am__append_5020) $(am__append_5027) \ +- $(am__append_5034) $(am__append_5041) $(am__append_5048) \ +- $(am__append_5055) $(am__append_5062) $(am__append_5069) \ +- $(am__append_5076) $(am__append_5083) $(am__append_5090) \ +- $(am__append_5097) $(am__append_5104) $(am__append_5111) \ +- $(am__append_5118) $(am__append_5125) $(am__append_5132) \ +- $(am__append_5139) $(am__append_5146) $(am__append_5153) \ +- $(am__append_5160) $(am__append_5167) $(am__append_5174) \ +- video_colors.mod $(am__append_5181) $(am__append_5188) \ +- datehook.mod net.mod tftp.mod http.mod $(am__append_5195) \ +- $(am__append_5202) $(am__append_5209) $(am__append_5216) \ +- $(am__append_5223) $(am__append_5230) $(am__append_5237) \ +- $(am__append_5244) $(am__append_5251) $(am__append_5258) \ +- $(am__append_5265) $(am__append_5272) $(am__append_5279) \ +- $(am__append_5286) $(am__append_5293) $(am__append_5300) \ +- $(am__append_5307) $(am__append_5314) syslinuxcfg.mod \ ++ $(am__append_4824) $(am__append_4831) $(am__append_4838) \ ++ $(am__append_4845) $(am__append_4852) $(am__append_4859) \ ++ $(am__append_4866) $(am__append_4873) $(am__append_4880) \ ++ jpeg.mod png.mod tga.mod $(am__append_4887) $(am__append_4894) \ ++ $(am__append_4901) $(am__append_4908) $(am__append_4915) \ ++ $(am__append_4922) $(am__append_4929) $(am__append_4936) \ ++ $(am__append_4943) $(am__append_4950) $(am__append_4957) \ ++ $(am__append_4964) $(am__append_4971) $(am__append_4978) \ ++ $(am__append_4985) $(am__append_4992) $(am__append_4999) \ ++ $(am__append_5006) $(am__append_5013) $(am__append_5020) \ ++ $(am__append_5027) $(am__append_5034) $(am__append_5041) \ ++ $(am__append_5048) $(am__append_5055) $(am__append_5062) \ ++ $(am__append_5069) $(am__append_5076) $(am__append_5083) \ ++ $(am__append_5090) $(am__append_5097) $(am__append_5104) \ ++ $(am__append_5111) $(am__append_5118) $(am__append_5125) \ ++ $(am__append_5132) $(am__append_5139) $(am__append_5146) \ ++ $(am__append_5153) $(am__append_5160) $(am__append_5167) \ ++ video_colors.mod $(am__append_5174) $(am__append_5181) \ ++ datehook.mod net.mod tftp.mod http.mod $(am__append_5188) \ ++ $(am__append_5195) $(am__append_5202) $(am__append_5209) \ ++ $(am__append_5216) $(am__append_5223) $(am__append_5230) \ ++ $(am__append_5237) $(am__append_5244) $(am__append_5251) \ ++ $(am__append_5258) $(am__append_5265) $(am__append_5272) \ ++ $(am__append_5279) $(am__append_5286) $(am__append_5293) \ ++ $(am__append_5300) $(am__append_5307) syslinuxcfg.mod \ + test_blockarg.mod xzio.mod lzopio.mod testload.mod \ +- $(am__append_5321) $(am__append_5328) $(am__append_5335) \ +- $(am__append_5342) $(am__append_5349) $(am__append_5356) \ +- $(am__append_5363) $(am__append_5370) $(am__append_5377) \ +- $(am__append_5384) $(am__append_5391) $(am__append_5398) \ +- $(am__append_5405) $(am__append_5412) $(am__append_5419) \ +- $(am__append_5426) $(am__append_5433) priority_queue.mod \ +- time.mod $(am__append_5440) $(am__append_5447) adler32.mod \ +- crc64.mod mpi.mod all_video.mod $(am__append_5454) \ +- $(am__append_5461) $(am__append_5468) $(am__append_5475) \ +- $(am__append_5482) $(am__append_5489) testspeed.mod \ +- $(am__append_5496) tr.mod progress.mod file.mod \ +- $(am__append_5503) $(am__append_5510) $(am__append_5517) \ +- $(am__append_5524) $(am__append_5531) $(am__append_5538) \ +- $(am__append_5545) $(am__append_5552) $(am__append_5559) \ +- $(am__append_5566) $(am__append_5573) $(am__append_5580) \ +- $(am__append_5587) $(am__append_5594) gcry_arcfour.mod \ ++ $(am__append_5314) $(am__append_5321) $(am__append_5328) \ ++ $(am__append_5335) $(am__append_5342) $(am__append_5349) \ ++ $(am__append_5356) $(am__append_5363) $(am__append_5370) \ ++ $(am__append_5377) $(am__append_5384) $(am__append_5391) \ ++ $(am__append_5398) $(am__append_5405) $(am__append_5412) \ ++ $(am__append_5419) $(am__append_5426) priority_queue.mod \ ++ time.mod $(am__append_5433) $(am__append_5440) adler32.mod \ ++ crc64.mod mpi.mod all_video.mod $(am__append_5447) \ ++ $(am__append_5454) $(am__append_5461) $(am__append_5468) \ ++ $(am__append_5475) $(am__append_5482) testspeed.mod \ ++ $(am__append_5489) tr.mod progress.mod file.mod \ ++ $(am__append_5496) $(am__append_5503) $(am__append_5510) \ ++ $(am__append_5517) $(am__append_5524) $(am__append_5531) \ ++ $(am__append_5538) $(am__append_5545) $(am__append_5552) \ ++ $(am__append_5559) $(am__append_5566) $(am__append_5573) \ ++ $(am__append_5580) $(am__append_5587) gcry_arcfour.mod \ + gcry_blowfish.mod gcry_camellia.mod gcry_cast5.mod \ + gcry_crc.mod gcry_des.mod gcry_dsa.mod gcry_idea.mod \ + gcry_md4.mod gcry_md5.mod gcry_rfc2268.mod gcry_rijndael.mod \ +@@ -15826,72 +15804,71 @@ MODULE_FILES = disk.module$(EXEEXT) trig.module$(EXEEXT) \ + hashsum.module$(EXEEXT) pgp.module$(EXEEXT) $(am__append_2041) \ + $(am__append_2048) $(am__append_2055) $(am__append_2062) \ + $(am__append_2069) $(am__append_2076) $(am__append_2083) \ +- $(am__append_2090) $(am__append_2097) $(am__append_2104) \ +- help.module$(EXEEXT) hexdump.module$(EXEEXT) \ +- keystatus.module$(EXEEXT) $(am__append_2111) \ +- $(am__append_2118) loadenv.module$(EXEEXT) ls.module$(EXEEXT) \ +- lsmmap.module$(EXEEXT) $(am__append_2125) $(am__append_2132) \ +- $(am__append_2139) $(am__append_2146) $(am__append_2153) \ +- $(am__append_2160) $(am__append_2167) $(am__append_2174) \ +- memrw.module$(EXEEXT) minicmd.module$(EXEEXT) \ +- parttool.module$(EXEEXT) password.module$(EXEEXT) \ +- password_pbkdf2.module$(EXEEXT) $(am__append_2181) \ +- $(am__append_2188) $(am__append_2195) $(am__append_2202) \ +- $(am__append_2209) $(am__append_2216) $(am__append_2223) \ +- $(am__append_2230) $(am__append_2237) $(am__append_2244) \ +- $(am__append_2251) $(am__append_2258) $(am__append_2265) \ +- $(am__append_2272) $(am__append_2279) $(am__append_2286) \ +- $(am__append_2293) $(am__append_2300) $(am__append_2307) \ +- $(am__append_2314) $(am__append_2321) probe.module$(EXEEXT) \ +- read.module$(EXEEXT) search.module$(EXEEXT) \ +- search_fs_file.module$(EXEEXT) search_fs_uuid.module$(EXEEXT) \ +- search_label.module$(EXEEXT) $(am__append_2328) \ +- $(am__append_2335) $(am__append_2342) $(am__append_2349) \ +- $(am__append_2356) $(am__append_2363) $(am__append_2370) \ +- $(am__append_2377) $(am__append_2384) $(am__append_2391) \ +- $(am__append_2398) $(am__append_2405) $(am__append_2412) \ +- $(am__append_2419) $(am__append_2426) $(am__append_2433) \ +- sleep.module$(EXEEXT) $(am__append_2440) $(am__append_2447) \ +- terminal.module$(EXEEXT) test.module$(EXEEXT) \ +- true.module$(EXEEXT) $(am__append_2454) $(am__append_2461) \ +- $(am__append_2468) $(am__append_2475) $(am__append_2482) \ +- $(am__append_2489) $(am__append_2496) $(am__append_2503) \ +- $(am__append_2510) videoinfo.module$(EXEEXT) \ +- videotest.module$(EXEEXT) xnu_uuid.module$(EXEEXT) \ +- dm_nv.module$(EXEEXT) loopback.module$(EXEEXT) \ +- cryptodisk.module$(EXEEXT) luks.module$(EXEEXT) \ +- geli.module$(EXEEXT) lvm.module$(EXEEXT) ldm.module$(EXEEXT) \ +- mdraid09.module$(EXEEXT) mdraid09_be.module$(EXEEXT) \ +- mdraid1x.module$(EXEEXT) diskfilter.module$(EXEEXT) \ +- raid5rec.module$(EXEEXT) raid6rec.module$(EXEEXT) \ +- scsi.module$(EXEEXT) memdisk.module$(EXEEXT) \ +- $(am__append_2517) $(am__append_2524) $(am__append_2531) \ +- $(am__append_2538) $(am__append_2545) $(am__append_2552) \ +- $(am__append_2559) $(am__append_2566) $(am__append_2573) \ +- $(am__append_2580) $(am__append_2587) $(am__append_2594) \ +- $(am__append_2601) $(am__append_2608) $(am__append_2615) \ +- $(am__append_2622) $(am__append_2629) $(am__append_2636) \ +- $(am__append_2643) $(am__append_2650) $(am__append_2657) \ +- $(am__append_2664) $(am__append_2671) $(am__append_2678) \ +- $(am__append_2685) $(am__append_2692) $(am__append_2699) \ +- $(am__append_2706) $(am__append_2713) $(am__append_2720) \ +- $(am__append_2727) $(am__append_2734) $(am__append_2741) \ +- $(am__append_2748) $(am__append_2755) $(am__append_2762) \ +- $(am__append_2769) $(am__append_2776) $(am__append_2783) \ +- $(am__append_2790) $(am__append_2797) $(am__append_2804) \ +- $(am__append_2811) $(am__append_2818) $(am__append_2825) \ +- $(am__append_2832) $(am__append_2839) $(am__append_2846) \ +- $(am__append_2853) $(am__append_2860) $(am__append_2867) \ +- $(am__append_2874) $(am__append_2881) $(am__append_2888) \ +- $(am__append_2895) $(am__append_2902) $(am__append_2909) \ +- $(am__append_2916) $(am__append_2923) $(am__append_2930) \ +- $(am__append_2937) procfs.module$(EXEEXT) affs.module$(EXEEXT) \ +- afs.module$(EXEEXT) bfs.module$(EXEEXT) zstd.module$(EXEEXT) \ +- btrfs.module$(EXEEXT) archelp.module$(EXEEXT) \ +- cbfs.module$(EXEEXT) cpio.module$(EXEEXT) \ +- cpio_be.module$(EXEEXT) newc.module$(EXEEXT) \ +- odc.module$(EXEEXT) ext2.module$(EXEEXT) fat.module$(EXEEXT) \ +- exfat.module$(EXEEXT) f2fs.module$(EXEEXT) \ ++ $(am__append_2090) $(am__append_2097) help.module$(EXEEXT) \ ++ hexdump.module$(EXEEXT) keystatus.module$(EXEEXT) \ ++ $(am__append_2104) $(am__append_2111) loadenv.module$(EXEEXT) \ ++ ls.module$(EXEEXT) lsmmap.module$(EXEEXT) $(am__append_2118) \ ++ $(am__append_2125) $(am__append_2132) $(am__append_2139) \ ++ $(am__append_2146) $(am__append_2153) $(am__append_2160) \ ++ $(am__append_2167) memrw.module$(EXEEXT) \ ++ minicmd.module$(EXEEXT) parttool.module$(EXEEXT) \ ++ password.module$(EXEEXT) password_pbkdf2.module$(EXEEXT) \ ++ $(am__append_2174) $(am__append_2181) $(am__append_2188) \ ++ $(am__append_2195) $(am__append_2202) $(am__append_2209) \ ++ $(am__append_2216) $(am__append_2223) $(am__append_2230) \ ++ $(am__append_2237) $(am__append_2244) $(am__append_2251) \ ++ $(am__append_2258) $(am__append_2265) $(am__append_2272) \ ++ $(am__append_2279) $(am__append_2286) $(am__append_2293) \ ++ $(am__append_2300) $(am__append_2307) $(am__append_2314) \ ++ probe.module$(EXEEXT) read.module$(EXEEXT) \ ++ search.module$(EXEEXT) search_fs_file.module$(EXEEXT) \ ++ search_fs_uuid.module$(EXEEXT) search_label.module$(EXEEXT) \ ++ $(am__append_2321) $(am__append_2328) $(am__append_2335) \ ++ $(am__append_2342) $(am__append_2349) $(am__append_2356) \ ++ $(am__append_2363) $(am__append_2370) $(am__append_2377) \ ++ $(am__append_2384) $(am__append_2391) $(am__append_2398) \ ++ $(am__append_2405) $(am__append_2412) $(am__append_2419) \ ++ $(am__append_2426) sleep.module$(EXEEXT) $(am__append_2433) \ ++ $(am__append_2440) terminal.module$(EXEEXT) \ ++ test.module$(EXEEXT) true.module$(EXEEXT) $(am__append_2447) \ ++ $(am__append_2454) $(am__append_2461) $(am__append_2468) \ ++ $(am__append_2475) $(am__append_2482) $(am__append_2489) \ ++ $(am__append_2496) $(am__append_2503) \ ++ videoinfo.module$(EXEEXT) videotest.module$(EXEEXT) \ ++ xnu_uuid.module$(EXEEXT) dm_nv.module$(EXEEXT) \ ++ loopback.module$(EXEEXT) cryptodisk.module$(EXEEXT) \ ++ luks.module$(EXEEXT) geli.module$(EXEEXT) lvm.module$(EXEEXT) \ ++ ldm.module$(EXEEXT) mdraid09.module$(EXEEXT) \ ++ mdraid09_be.module$(EXEEXT) mdraid1x.module$(EXEEXT) \ ++ diskfilter.module$(EXEEXT) raid5rec.module$(EXEEXT) \ ++ raid6rec.module$(EXEEXT) scsi.module$(EXEEXT) \ ++ memdisk.module$(EXEEXT) $(am__append_2510) $(am__append_2517) \ ++ $(am__append_2524) $(am__append_2531) $(am__append_2538) \ ++ $(am__append_2545) $(am__append_2552) $(am__append_2559) \ ++ $(am__append_2566) $(am__append_2573) $(am__append_2580) \ ++ $(am__append_2587) $(am__append_2594) $(am__append_2601) \ ++ $(am__append_2608) $(am__append_2615) $(am__append_2622) \ ++ $(am__append_2629) $(am__append_2636) $(am__append_2643) \ ++ $(am__append_2650) $(am__append_2657) $(am__append_2664) \ ++ $(am__append_2671) $(am__append_2678) $(am__append_2685) \ ++ $(am__append_2692) $(am__append_2699) $(am__append_2706) \ ++ $(am__append_2713) $(am__append_2720) $(am__append_2727) \ ++ $(am__append_2734) $(am__append_2741) $(am__append_2748) \ ++ $(am__append_2755) $(am__append_2762) $(am__append_2769) \ ++ $(am__append_2776) $(am__append_2783) $(am__append_2790) \ ++ $(am__append_2797) $(am__append_2804) $(am__append_2811) \ ++ $(am__append_2818) $(am__append_2825) $(am__append_2832) \ ++ $(am__append_2839) $(am__append_2846) $(am__append_2853) \ ++ $(am__append_2860) $(am__append_2867) $(am__append_2874) \ ++ $(am__append_2881) $(am__append_2888) $(am__append_2895) \ ++ $(am__append_2902) $(am__append_2909) $(am__append_2916) \ ++ $(am__append_2923) $(am__append_2930) procfs.module$(EXEEXT) \ ++ affs.module$(EXEEXT) afs.module$(EXEEXT) bfs.module$(EXEEXT) \ ++ zstd.module$(EXEEXT) btrfs.module$(EXEEXT) \ ++ archelp.module$(EXEEXT) cbfs.module$(EXEEXT) \ ++ cpio.module$(EXEEXT) cpio_be.module$(EXEEXT) \ ++ newc.module$(EXEEXT) odc.module$(EXEEXT) ext2.module$(EXEEXT) \ ++ fat.module$(EXEEXT) exfat.module$(EXEEXT) f2fs.module$(EXEEXT) \ + fshelp.module$(EXEEXT) hfs.module$(EXEEXT) \ + hfsplus.module$(EXEEXT) hfspluscomp.module$(EXEEXT) \ + iso9660.module$(EXEEXT) jfs.module$(EXEEXT) \ +@@ -15906,166 +15883,166 @@ MODULE_FILES = disk.module$(EXEEXT) trig.module$(EXEEXT) \ + ufs1_be.module$(EXEEXT) ufs2.module$(EXEEXT) \ + xfs.module$(EXEEXT) zfs.module$(EXEEXT) \ + zfscrypt.module$(EXEEXT) zfsinfo.module$(EXEEXT) \ +- macbless.module$(EXEEXT) $(am__append_2944) \ ++ macbless.module$(EXEEXT) $(am__append_2937) \ + gettext.module$(EXEEXT) gfxmenu.module$(EXEEXT) \ + hello.module$(EXEEXT) gzio.module$(EXEEXT) \ +- offsetio.module$(EXEEXT) $(am__append_2951) $(am__append_2958) \ +- $(am__append_2965) $(am__append_2972) $(am__append_2979) \ +- $(am__append_2986) $(am__append_2993) $(am__append_3000) \ +- $(am__append_3007) $(am__append_3014) $(am__append_3021) \ +- $(am__append_3028) $(am__append_3035) $(am__append_3042) \ +- $(am__append_3049) $(am__append_3056) $(am__append_3063) \ +- $(am__append_3070) $(am__append_3077) $(am__append_3084) \ ++ offsetio.module$(EXEEXT) $(am__append_2944) $(am__append_2951) \ ++ $(am__append_2958) $(am__append_2965) $(am__append_2972) \ ++ $(am__append_2979) $(am__append_2986) $(am__append_2993) \ ++ $(am__append_3000) $(am__append_3007) $(am__append_3014) \ ++ $(am__append_3021) $(am__append_3028) $(am__append_3035) \ ++ $(am__append_3042) $(am__append_3049) $(am__append_3056) \ ++ $(am__append_3063) $(am__append_3070) $(am__append_3077) \ + elf.module$(EXEEXT) crypto.module$(EXEEXT) \ +- pbkdf2.module$(EXEEXT) $(am__append_3091) $(am__append_3098) \ +- $(am__append_3105) $(am__append_3112) $(am__append_3119) \ +- $(am__append_3126) $(am__append_3133) $(am__append_3140) \ +- $(am__append_3147) $(am__append_3154) $(am__append_3161) \ +- $(am__append_3168) $(am__append_3175) $(am__append_3182) \ +- $(am__append_3189) $(am__append_3196) $(am__append_3203) \ +- $(am__append_3210) $(am__append_3217) $(am__append_3224) \ +- $(am__append_3231) $(am__append_3238) $(am__append_3245) \ +- $(am__append_3252) $(am__append_3259) $(am__append_3266) \ +- $(am__append_3273) $(am__append_3280) $(am__append_3287) \ +- $(am__append_3294) $(am__append_3301) $(am__append_3308) \ +- $(am__append_3315) $(am__append_3322) $(am__append_3329) \ +- $(am__append_3336) setjmp.module$(EXEEXT) $(am__append_3343) \ +- $(am__append_3350) $(am__append_3357) $(am__append_3364) \ +- $(am__append_3371) $(am__append_3378) $(am__append_3385) \ +- $(am__append_3392) $(am__append_3399) $(am__append_3406) \ +- $(am__append_3413) $(am__append_3420) $(am__append_3427) \ +- $(am__append_3434) $(am__append_3441) $(am__append_3448) \ +- $(am__append_3455) $(am__append_3462) $(am__append_3469) \ +- $(am__append_3476) $(am__append_3483) $(am__append_3490) \ +- $(am__append_3497) $(am__append_3504) $(am__append_3511) \ +- $(am__append_3518) $(am__append_3525) $(am__append_3532) \ +- $(am__append_3539) $(am__append_3546) $(am__append_3553) \ +- $(am__append_3560) $(am__append_3567) $(am__append_3574) \ +- $(am__append_3581) $(am__append_3588) $(am__append_3595) \ +- $(am__append_3602) $(am__append_3609) $(am__append_3616) \ +- $(am__append_3623) $(am__append_3630) $(am__append_3637) \ +- $(am__append_3644) $(am__append_3651) $(am__append_3658) \ +- $(am__append_3665) $(am__append_3672) $(am__append_3679) \ +- $(am__append_3686) $(am__append_3693) $(am__append_3700) \ +- $(am__append_3707) $(am__append_3714) $(am__append_3721) \ +- $(am__append_3728) $(am__append_3735) $(am__append_3742) \ +- $(am__append_3749) $(am__append_3756) $(am__append_3763) \ +- $(am__append_3770) $(am__append_3777) $(am__append_3784) \ +- $(am__append_3791) $(am__append_3798) $(am__append_3805) \ +- $(am__append_3812) $(am__append_3819) $(am__append_3826) \ +- $(am__append_3833) $(am__append_3840) $(am__append_3847) \ +- $(am__append_3854) $(am__append_3861) $(am__append_3868) \ +- $(am__append_3875) $(am__append_3882) macho.module$(EXEEXT) \ +- $(am__append_3889) $(am__append_3896) $(am__append_3903) \ +- $(am__append_3910) $(am__append_3917) $(am__append_3924) \ +- $(am__append_3931) $(am__append_3938) $(am__append_3945) \ +- $(am__append_3952) $(am__append_3959) $(am__append_3966) \ +- $(am__append_3973) $(am__append_3980) $(am__append_3987) \ +- $(am__append_3994) $(am__append_4001) $(am__append_4008) \ +- $(am__append_4015) $(am__append_4022) $(am__append_4029) \ +- $(am__append_4036) $(am__append_4043) $(am__append_4050) \ +- $(am__append_4057) $(am__append_4064) $(am__append_4071) \ ++ pbkdf2.module$(EXEEXT) $(am__append_3084) $(am__append_3091) \ ++ $(am__append_3098) $(am__append_3105) $(am__append_3112) \ ++ $(am__append_3119) $(am__append_3126) $(am__append_3133) \ ++ $(am__append_3140) $(am__append_3147) $(am__append_3154) \ ++ $(am__append_3161) $(am__append_3168) $(am__append_3175) \ ++ $(am__append_3182) $(am__append_3189) $(am__append_3196) \ ++ $(am__append_3203) $(am__append_3210) $(am__append_3217) \ ++ $(am__append_3224) $(am__append_3231) $(am__append_3238) \ ++ $(am__append_3245) $(am__append_3252) $(am__append_3259) \ ++ $(am__append_3266) $(am__append_3273) $(am__append_3280) \ ++ $(am__append_3287) $(am__append_3294) $(am__append_3301) \ ++ $(am__append_3308) $(am__append_3315) $(am__append_3322) \ ++ $(am__append_3329) setjmp.module$(EXEEXT) $(am__append_3336) \ ++ $(am__append_3343) $(am__append_3350) $(am__append_3357) \ ++ $(am__append_3364) $(am__append_3371) $(am__append_3378) \ ++ $(am__append_3385) $(am__append_3392) $(am__append_3399) \ ++ $(am__append_3406) $(am__append_3413) $(am__append_3420) \ ++ $(am__append_3427) $(am__append_3434) $(am__append_3441) \ ++ $(am__append_3448) $(am__append_3455) $(am__append_3462) \ ++ $(am__append_3469) $(am__append_3476) $(am__append_3483) \ ++ $(am__append_3490) $(am__append_3497) $(am__append_3504) \ ++ $(am__append_3511) $(am__append_3518) $(am__append_3525) \ ++ $(am__append_3532) $(am__append_3539) $(am__append_3546) \ ++ $(am__append_3553) $(am__append_3560) $(am__append_3567) \ ++ $(am__append_3574) $(am__append_3581) $(am__append_3588) \ ++ $(am__append_3595) $(am__append_3602) $(am__append_3609) \ ++ $(am__append_3616) $(am__append_3623) $(am__append_3630) \ ++ $(am__append_3637) $(am__append_3644) $(am__append_3651) \ ++ $(am__append_3658) $(am__append_3665) $(am__append_3672) \ ++ $(am__append_3679) $(am__append_3686) $(am__append_3693) \ ++ $(am__append_3700) $(am__append_3707) $(am__append_3714) \ ++ $(am__append_3721) $(am__append_3728) $(am__append_3735) \ ++ $(am__append_3742) $(am__append_3749) $(am__append_3756) \ ++ $(am__append_3763) $(am__append_3770) $(am__append_3777) \ ++ $(am__append_3784) $(am__append_3791) $(am__append_3798) \ ++ $(am__append_3805) $(am__append_3812) $(am__append_3819) \ ++ $(am__append_3826) $(am__append_3833) $(am__append_3840) \ ++ $(am__append_3847) $(am__append_3854) $(am__append_3861) \ ++ $(am__append_3868) $(am__append_3875) macho.module$(EXEEXT) \ ++ $(am__append_3882) $(am__append_3889) $(am__append_3896) \ ++ $(am__append_3903) $(am__append_3910) $(am__append_3917) \ ++ $(am__append_3924) $(am__append_3931) $(am__append_3938) \ ++ $(am__append_3945) $(am__append_3952) $(am__append_3959) \ ++ $(am__append_3966) $(am__append_3973) $(am__append_3980) \ ++ $(am__append_3987) $(am__append_3994) $(am__append_4001) \ ++ $(am__append_4008) $(am__append_4015) $(am__append_4022) \ ++ $(am__append_4029) $(am__append_4036) $(am__append_4043) \ ++ $(am__append_4050) $(am__append_4057) $(am__append_4064) \ + normal.module$(EXEEXT) part_acorn.module$(EXEEXT) \ + part_amiga.module$(EXEEXT) part_apple.module$(EXEEXT) \ + part_gpt.module$(EXEEXT) part_msdos.module$(EXEEXT) \ + part_sun.module$(EXEEXT) part_plan.module$(EXEEXT) \ + part_dvh.module$(EXEEXT) part_bsd.module$(EXEEXT) \ + part_sunpc.module$(EXEEXT) part_dfly.module$(EXEEXT) \ +- msdospart.module$(EXEEXT) $(am__append_4078) \ +- $(am__append_4085) $(am__append_4092) $(am__append_4099) \ +- $(am__append_4106) $(am__append_4113) $(am__append_4120) \ +- $(am__append_4127) $(am__append_4134) $(am__append_4141) \ +- $(am__append_4148) $(am__append_4155) $(am__append_4162) \ +- $(am__append_4169) $(am__append_4176) $(am__append_4183) \ +- $(am__append_4190) $(am__append_4197) $(am__append_4204) \ +- $(am__append_4211) $(am__append_4218) $(am__append_4225) \ +- $(am__append_4232) $(am__append_4239) $(am__append_4246) \ +- $(am__append_4253) $(am__append_4260) \ +- gfxterm_background.module$(EXEEXT) $(am__append_4267) \ +- $(am__append_4274) $(am__append_4281) $(am__append_4288) \ +- $(am__append_4295) $(am__append_4302) $(am__append_4309) \ +- $(am__append_4316) $(am__append_4323) $(am__append_4330) \ +- $(am__append_4337) $(am__append_4344) $(am__append_4351) \ +- $(am__append_4358) $(am__append_4365) $(am__append_4372) \ +- $(am__append_4379) $(am__append_4386) $(am__append_4393) \ +- $(am__append_4400) $(am__append_4407) $(am__append_4414) \ +- $(am__append_4421) $(am__append_4428) $(am__append_4435) \ +- $(am__append_4442) $(am__append_4449) $(am__append_4456) \ +- $(am__append_4463) $(am__append_4470) $(am__append_4477) \ +- $(am__append_4484) $(am__append_4491) $(am__append_4498) \ +- $(am__append_4505) $(am__append_4512) $(am__append_4519) \ +- $(am__append_4526) $(am__append_4533) $(am__append_4540) \ +- $(am__append_4547) $(am__append_4554) $(am__append_4561) \ +- $(am__append_4568) $(am__append_4575) $(am__append_4582) \ +- $(am__append_4589) $(am__append_4596) $(am__append_4603) \ +- $(am__append_4610) $(am__append_4617) $(am__append_4624) \ +- $(am__append_4631) $(am__append_4638) $(am__append_4645) \ ++ msdospart.module$(EXEEXT) $(am__append_4071) \ ++ $(am__append_4078) $(am__append_4085) $(am__append_4092) \ ++ $(am__append_4099) $(am__append_4106) $(am__append_4113) \ ++ $(am__append_4120) $(am__append_4127) $(am__append_4134) \ ++ $(am__append_4141) $(am__append_4148) $(am__append_4155) \ ++ $(am__append_4162) $(am__append_4169) $(am__append_4176) \ ++ $(am__append_4183) $(am__append_4190) $(am__append_4197) \ ++ $(am__append_4204) $(am__append_4211) $(am__append_4218) \ ++ $(am__append_4225) $(am__append_4232) $(am__append_4239) \ ++ $(am__append_4246) $(am__append_4253) \ ++ gfxterm_background.module$(EXEEXT) $(am__append_4260) \ ++ $(am__append_4267) $(am__append_4274) $(am__append_4281) \ ++ $(am__append_4288) $(am__append_4295) $(am__append_4302) \ ++ $(am__append_4309) $(am__append_4316) $(am__append_4323) \ ++ $(am__append_4330) $(am__append_4337) $(am__append_4344) \ ++ $(am__append_4351) $(am__append_4358) $(am__append_4365) \ ++ $(am__append_4372) $(am__append_4379) $(am__append_4386) \ ++ $(am__append_4393) $(am__append_4400) $(am__append_4407) \ ++ $(am__append_4414) $(am__append_4421) $(am__append_4428) \ ++ $(am__append_4435) $(am__append_4442) $(am__append_4449) \ ++ $(am__append_4456) $(am__append_4463) $(am__append_4470) \ ++ $(am__append_4477) $(am__append_4484) $(am__append_4491) \ ++ $(am__append_4498) $(am__append_4505) $(am__append_4512) \ ++ $(am__append_4519) $(am__append_4526) $(am__append_4533) \ ++ $(am__append_4540) $(am__append_4547) $(am__append_4554) \ ++ $(am__append_4561) $(am__append_4568) $(am__append_4575) \ ++ $(am__append_4582) $(am__append_4589) $(am__append_4596) \ ++ $(am__append_4603) $(am__append_4610) $(am__append_4617) \ ++ $(am__append_4624) $(am__append_4631) $(am__append_4638) \ + functional_test.module$(EXEEXT) exfctest.module$(EXEEXT) \ + strtoull_test.module$(EXEEXT) setjmp_test.module$(EXEEXT) \ + signature_test.module$(EXEEXT) sleep_test.module$(EXEEXT) \ + xnu_uuid_test.module$(EXEEXT) pbkdf2_test.module$(EXEEXT) \ +- $(am__append_4652) $(am__append_4659) $(am__append_4666) \ +- $(am__append_4673) $(am__append_4680) $(am__append_4687) \ +- $(am__append_4694) $(am__append_4701) $(am__append_4708) \ +- $(am__append_4715) $(am__append_4722) $(am__append_4729) \ +- $(am__append_4736) $(am__append_4743) $(am__append_4750) \ +- $(am__append_4757) $(am__append_4764) $(am__append_4771) \ +- $(am__append_4778) $(am__append_4785) $(am__append_4792) \ +- $(am__append_4799) $(am__append_4806) $(am__append_4813) \ +- $(am__append_4820) div_test.module$(EXEEXT) \ ++ $(am__append_4645) $(am__append_4652) $(am__append_4659) \ ++ $(am__append_4666) $(am__append_4673) $(am__append_4680) \ ++ $(am__append_4687) $(am__append_4694) $(am__append_4701) \ ++ $(am__append_4708) $(am__append_4715) $(am__append_4722) \ ++ $(am__append_4729) $(am__append_4736) $(am__append_4743) \ ++ $(am__append_4750) $(am__append_4757) $(am__append_4764) \ ++ $(am__append_4771) $(am__append_4778) $(am__append_4785) \ ++ $(am__append_4792) $(am__append_4799) $(am__append_4806) \ ++ $(am__append_4813) div_test.module$(EXEEXT) \ + mul_test.module$(EXEEXT) shift_test.module$(EXEEXT) \ + cmp_test.module$(EXEEXT) ctz_test.module$(EXEEXT) \ + bswap_test.module$(EXEEXT) videotest_checksum.module$(EXEEXT) \ + gfxterm_menu.module$(EXEEXT) cmdline_cat_test.module$(EXEEXT) \ + bitmap.module$(EXEEXT) bitmap_scale.module$(EXEEXT) \ +- $(am__append_4827) $(am__append_4834) $(am__append_4841) \ +- $(am__append_4848) $(am__append_4855) $(am__append_4862) \ +- $(am__append_4869) $(am__append_4876) $(am__append_4883) \ ++ $(am__append_4820) $(am__append_4827) $(am__append_4834) \ ++ $(am__append_4841) $(am__append_4848) $(am__append_4855) \ ++ $(am__append_4862) $(am__append_4869) $(am__append_4876) \ + jpeg.module$(EXEEXT) png.module$(EXEEXT) tga.module$(EXEEXT) \ +- $(am__append_4890) $(am__append_4897) $(am__append_4904) \ +- $(am__append_4911) $(am__append_4918) $(am__append_4925) \ +- $(am__append_4932) $(am__append_4939) $(am__append_4946) \ +- $(am__append_4953) $(am__append_4960) $(am__append_4967) \ +- $(am__append_4974) $(am__append_4981) $(am__append_4988) \ +- $(am__append_4995) $(am__append_5002) $(am__append_5009) \ +- $(am__append_5016) $(am__append_5023) $(am__append_5030) \ +- $(am__append_5037) $(am__append_5044) $(am__append_5051) \ +- $(am__append_5058) $(am__append_5065) $(am__append_5072) \ +- $(am__append_5079) $(am__append_5086) $(am__append_5093) \ +- $(am__append_5100) $(am__append_5107) $(am__append_5114) \ +- $(am__append_5121) $(am__append_5128) $(am__append_5135) \ +- $(am__append_5142) $(am__append_5149) $(am__append_5156) \ +- $(am__append_5163) $(am__append_5170) \ +- video_colors.module$(EXEEXT) $(am__append_5177) \ +- $(am__append_5184) datehook.module$(EXEEXT) \ ++ $(am__append_4883) $(am__append_4890) $(am__append_4897) \ ++ $(am__append_4904) $(am__append_4911) $(am__append_4918) \ ++ $(am__append_4925) $(am__append_4932) $(am__append_4939) \ ++ $(am__append_4946) $(am__append_4953) $(am__append_4960) \ ++ $(am__append_4967) $(am__append_4974) $(am__append_4981) \ ++ $(am__append_4988) $(am__append_4995) $(am__append_5002) \ ++ $(am__append_5009) $(am__append_5016) $(am__append_5023) \ ++ $(am__append_5030) $(am__append_5037) $(am__append_5044) \ ++ $(am__append_5051) $(am__append_5058) $(am__append_5065) \ ++ $(am__append_5072) $(am__append_5079) $(am__append_5086) \ ++ $(am__append_5093) $(am__append_5100) $(am__append_5107) \ ++ $(am__append_5114) $(am__append_5121) $(am__append_5128) \ ++ $(am__append_5135) $(am__append_5142) $(am__append_5149) \ ++ $(am__append_5156) $(am__append_5163) \ ++ video_colors.module$(EXEEXT) $(am__append_5170) \ ++ $(am__append_5177) datehook.module$(EXEEXT) \ + net.module$(EXEEXT) tftp.module$(EXEEXT) http.module$(EXEEXT) \ +- $(am__append_5191) $(am__append_5198) $(am__append_5205) \ +- $(am__append_5212) $(am__append_5219) $(am__append_5226) \ +- $(am__append_5233) $(am__append_5240) $(am__append_5247) \ +- $(am__append_5254) $(am__append_5261) $(am__append_5268) \ +- $(am__append_5275) $(am__append_5282) $(am__append_5289) \ +- $(am__append_5296) $(am__append_5303) $(am__append_5310) \ ++ $(am__append_5184) $(am__append_5191) $(am__append_5198) \ ++ $(am__append_5205) $(am__append_5212) $(am__append_5219) \ ++ $(am__append_5226) $(am__append_5233) $(am__append_5240) \ ++ $(am__append_5247) $(am__append_5254) $(am__append_5261) \ ++ $(am__append_5268) $(am__append_5275) $(am__append_5282) \ ++ $(am__append_5289) $(am__append_5296) $(am__append_5303) \ + syslinuxcfg.module$(EXEEXT) test_blockarg.module$(EXEEXT) \ + xzio.module$(EXEEXT) lzopio.module$(EXEEXT) \ +- testload.module$(EXEEXT) $(am__append_5317) $(am__append_5324) \ +- $(am__append_5331) $(am__append_5338) $(am__append_5345) \ +- $(am__append_5352) $(am__append_5359) $(am__append_5366) \ +- $(am__append_5373) $(am__append_5380) $(am__append_5387) \ +- $(am__append_5394) $(am__append_5401) $(am__append_5408) \ +- $(am__append_5415) $(am__append_5422) $(am__append_5429) \ ++ testload.module$(EXEEXT) $(am__append_5310) $(am__append_5317) \ ++ $(am__append_5324) $(am__append_5331) $(am__append_5338) \ ++ $(am__append_5345) $(am__append_5352) $(am__append_5359) \ ++ $(am__append_5366) $(am__append_5373) $(am__append_5380) \ ++ $(am__append_5387) $(am__append_5394) $(am__append_5401) \ ++ $(am__append_5408) $(am__append_5415) $(am__append_5422) \ + priority_queue.module$(EXEEXT) time.module$(EXEEXT) \ +- $(am__append_5436) $(am__append_5443) adler32.module$(EXEEXT) \ ++ $(am__append_5429) $(am__append_5436) adler32.module$(EXEEXT) \ + crc64.module$(EXEEXT) mpi.module$(EXEEXT) \ +- all_video.module$(EXEEXT) $(am__append_5450) \ +- $(am__append_5457) $(am__append_5464) $(am__append_5471) \ +- $(am__append_5478) $(am__append_5485) \ +- testspeed.module$(EXEEXT) $(am__append_5492) \ ++ all_video.module$(EXEEXT) $(am__append_5443) \ ++ $(am__append_5450) $(am__append_5457) $(am__append_5464) \ ++ $(am__append_5471) $(am__append_5478) \ ++ testspeed.module$(EXEEXT) $(am__append_5485) \ + tr.module$(EXEEXT) progress.module$(EXEEXT) \ +- file.module$(EXEEXT) $(am__append_5499) $(am__append_5506) \ +- $(am__append_5513) $(am__append_5520) $(am__append_5527) \ +- $(am__append_5534) $(am__append_5541) $(am__append_5548) \ +- $(am__append_5555) $(am__append_5562) $(am__append_5569) \ +- $(am__append_5576) $(am__append_5583) $(am__append_5590) \ ++ file.module$(EXEEXT) $(am__append_5492) $(am__append_5499) \ ++ $(am__append_5506) $(am__append_5513) $(am__append_5520) \ ++ $(am__append_5527) $(am__append_5534) $(am__append_5541) \ ++ $(am__append_5548) $(am__append_5555) $(am__append_5562) \ ++ $(am__append_5569) $(am__append_5576) $(am__append_5583) \ + gcry_arcfour.module$(EXEEXT) gcry_blowfish.module$(EXEEXT) \ + gcry_camellia.module$(EXEEXT) gcry_cast5.module$(EXEEXT) \ + gcry_crc.module$(EXEEXT) gcry_des.module$(EXEEXT) \ +@@ -16180,58 +16157,58 @@ MARKER_FILES = disk.marker trig.marker $(am__append_9) \ + hashsum.marker pgp.marker $(am__append_2046) \ + $(am__append_2053) $(am__append_2060) $(am__append_2067) \ + $(am__append_2074) $(am__append_2081) $(am__append_2088) \ +- $(am__append_2095) $(am__append_2102) $(am__append_2109) \ +- help.marker hexdump.marker keystatus.marker $(am__append_2116) \ +- $(am__append_2123) loadenv.marker ls.marker lsmmap.marker \ +- $(am__append_2130) $(am__append_2137) $(am__append_2144) \ +- $(am__append_2151) $(am__append_2158) $(am__append_2165) \ +- $(am__append_2172) $(am__append_2179) memrw.marker \ ++ $(am__append_2095) $(am__append_2102) help.marker \ ++ hexdump.marker keystatus.marker $(am__append_2109) \ ++ $(am__append_2116) loadenv.marker ls.marker lsmmap.marker \ ++ $(am__append_2123) $(am__append_2130) $(am__append_2137) \ ++ $(am__append_2144) $(am__append_2151) $(am__append_2158) \ ++ $(am__append_2165) $(am__append_2172) memrw.marker \ + minicmd.marker parttool.marker password.marker \ +- password_pbkdf2.marker $(am__append_2186) $(am__append_2193) \ +- $(am__append_2200) $(am__append_2207) $(am__append_2214) \ +- $(am__append_2221) $(am__append_2228) $(am__append_2235) \ +- $(am__append_2242) $(am__append_2249) $(am__append_2256) \ +- $(am__append_2263) $(am__append_2270) $(am__append_2277) \ +- $(am__append_2284) $(am__append_2291) $(am__append_2298) \ +- $(am__append_2305) $(am__append_2312) $(am__append_2319) \ +- $(am__append_2326) probe.marker read.marker search.marker \ ++ password_pbkdf2.marker $(am__append_2179) $(am__append_2186) \ ++ $(am__append_2193) $(am__append_2200) $(am__append_2207) \ ++ $(am__append_2214) $(am__append_2221) $(am__append_2228) \ ++ $(am__append_2235) $(am__append_2242) $(am__append_2249) \ ++ $(am__append_2256) $(am__append_2263) $(am__append_2270) \ ++ $(am__append_2277) $(am__append_2284) $(am__append_2291) \ ++ $(am__append_2298) $(am__append_2305) $(am__append_2312) \ ++ $(am__append_2319) probe.marker read.marker search.marker \ + search_fs_file.marker search_fs_uuid.marker \ +- search_label.marker $(am__append_2333) $(am__append_2340) \ +- $(am__append_2347) $(am__append_2354) $(am__append_2361) \ +- $(am__append_2368) $(am__append_2375) $(am__append_2382) \ +- $(am__append_2389) $(am__append_2396) $(am__append_2403) \ +- $(am__append_2410) $(am__append_2417) $(am__append_2424) \ +- $(am__append_2431) $(am__append_2438) sleep.marker \ +- $(am__append_2445) $(am__append_2452) terminal.marker \ +- test.marker true.marker $(am__append_2459) $(am__append_2466) \ +- $(am__append_2473) $(am__append_2480) $(am__append_2487) \ +- $(am__append_2494) $(am__append_2501) $(am__append_2508) \ +- $(am__append_2515) videoinfo.marker videotest.marker \ ++ search_label.marker $(am__append_2326) $(am__append_2333) \ ++ $(am__append_2340) $(am__append_2347) $(am__append_2354) \ ++ $(am__append_2361) $(am__append_2368) $(am__append_2375) \ ++ $(am__append_2382) $(am__append_2389) $(am__append_2396) \ ++ $(am__append_2403) $(am__append_2410) $(am__append_2417) \ ++ $(am__append_2424) $(am__append_2431) sleep.marker \ ++ $(am__append_2438) $(am__append_2445) terminal.marker \ ++ test.marker true.marker $(am__append_2452) $(am__append_2459) \ ++ $(am__append_2466) $(am__append_2473) $(am__append_2480) \ ++ $(am__append_2487) $(am__append_2494) $(am__append_2501) \ ++ $(am__append_2508) videoinfo.marker videotest.marker \ + xnu_uuid.marker dm_nv.marker loopback.marker cryptodisk.marker \ + luks.marker geli.marker lvm.marker ldm.marker mdraid09.marker \ + mdraid09_be.marker mdraid1x.marker diskfilter.marker \ + raid5rec.marker raid6rec.marker scsi.marker memdisk.marker \ +- $(am__append_2522) $(am__append_2529) $(am__append_2536) \ +- $(am__append_2543) $(am__append_2550) $(am__append_2557) \ +- $(am__append_2564) $(am__append_2571) $(am__append_2578) \ +- $(am__append_2585) $(am__append_2592) $(am__append_2599) \ +- $(am__append_2606) $(am__append_2613) $(am__append_2620) \ +- $(am__append_2627) $(am__append_2634) $(am__append_2641) \ +- $(am__append_2648) $(am__append_2655) $(am__append_2662) \ +- $(am__append_2669) $(am__append_2676) $(am__append_2683) \ +- $(am__append_2690) $(am__append_2697) $(am__append_2704) \ +- $(am__append_2711) $(am__append_2718) $(am__append_2725) \ +- $(am__append_2732) $(am__append_2739) $(am__append_2746) \ +- $(am__append_2753) $(am__append_2760) $(am__append_2767) \ +- $(am__append_2774) $(am__append_2781) $(am__append_2788) \ +- $(am__append_2795) $(am__append_2802) $(am__append_2809) \ +- $(am__append_2816) $(am__append_2823) $(am__append_2830) \ +- $(am__append_2837) $(am__append_2844) $(am__append_2851) \ +- $(am__append_2858) $(am__append_2865) $(am__append_2872) \ +- $(am__append_2879) $(am__append_2886) $(am__append_2893) \ +- $(am__append_2900) $(am__append_2907) $(am__append_2914) \ +- $(am__append_2921) $(am__append_2928) $(am__append_2935) \ +- $(am__append_2942) procfs.marker affs.marker afs.marker \ ++ $(am__append_2515) $(am__append_2522) $(am__append_2529) \ ++ $(am__append_2536) $(am__append_2543) $(am__append_2550) \ ++ $(am__append_2557) $(am__append_2564) $(am__append_2571) \ ++ $(am__append_2578) $(am__append_2585) $(am__append_2592) \ ++ $(am__append_2599) $(am__append_2606) $(am__append_2613) \ ++ $(am__append_2620) $(am__append_2627) $(am__append_2634) \ ++ $(am__append_2641) $(am__append_2648) $(am__append_2655) \ ++ $(am__append_2662) $(am__append_2669) $(am__append_2676) \ ++ $(am__append_2683) $(am__append_2690) $(am__append_2697) \ ++ $(am__append_2704) $(am__append_2711) $(am__append_2718) \ ++ $(am__append_2725) $(am__append_2732) $(am__append_2739) \ ++ $(am__append_2746) $(am__append_2753) $(am__append_2760) \ ++ $(am__append_2767) $(am__append_2774) $(am__append_2781) \ ++ $(am__append_2788) $(am__append_2795) $(am__append_2802) \ ++ $(am__append_2809) $(am__append_2816) $(am__append_2823) \ ++ $(am__append_2830) $(am__append_2837) $(am__append_2844) \ ++ $(am__append_2851) $(am__append_2858) $(am__append_2865) \ ++ $(am__append_2872) $(am__append_2879) $(am__append_2886) \ ++ $(am__append_2893) $(am__append_2900) $(am__append_2907) \ ++ $(am__append_2914) $(am__append_2921) $(am__append_2928) \ ++ $(am__append_2935) procfs.marker affs.marker afs.marker \ + bfs.marker zstd.marker btrfs.marker archelp.marker cbfs.marker \ + cpio.marker cpio_be.marker newc.marker odc.marker ext2.marker \ + fat.marker exfat.marker f2fs.marker fshelp.marker hfs.marker \ +@@ -16242,153 +16219,153 @@ MARKER_FILES = disk.marker trig.marker $(am__append_9) \ + squash4.marker tar.marker udf.marker ufs1.marker \ + ufs1_be.marker ufs2.marker xfs.marker zfs.marker \ + zfscrypt.marker zfsinfo.marker macbless.marker \ +- $(am__append_2949) gettext.marker gfxmenu.marker hello.marker \ +- gzio.marker offsetio.marker $(am__append_2956) \ +- $(am__append_2963) $(am__append_2970) $(am__append_2977) \ +- $(am__append_2984) $(am__append_2991) $(am__append_2998) \ +- $(am__append_3005) $(am__append_3012) $(am__append_3019) \ +- $(am__append_3026) $(am__append_3033) $(am__append_3040) \ +- $(am__append_3047) $(am__append_3054) $(am__append_3061) \ +- $(am__append_3068) $(am__append_3075) $(am__append_3082) \ +- $(am__append_3089) elf.marker crypto.marker pbkdf2.marker \ +- $(am__append_3096) $(am__append_3103) $(am__append_3110) \ +- $(am__append_3117) $(am__append_3124) $(am__append_3131) \ +- $(am__append_3138) $(am__append_3145) $(am__append_3152) \ +- $(am__append_3159) $(am__append_3166) $(am__append_3173) \ +- $(am__append_3180) $(am__append_3187) $(am__append_3194) \ +- $(am__append_3201) $(am__append_3208) $(am__append_3215) \ +- $(am__append_3222) $(am__append_3229) $(am__append_3236) \ +- $(am__append_3243) $(am__append_3250) $(am__append_3257) \ +- $(am__append_3264) $(am__append_3271) $(am__append_3278) \ +- $(am__append_3285) $(am__append_3292) $(am__append_3299) \ +- $(am__append_3306) $(am__append_3313) $(am__append_3320) \ +- $(am__append_3327) $(am__append_3334) $(am__append_3341) \ +- setjmp.marker $(am__append_3348) $(am__append_3355) \ +- $(am__append_3362) $(am__append_3369) $(am__append_3376) \ +- $(am__append_3383) $(am__append_3390) $(am__append_3397) \ +- $(am__append_3404) $(am__append_3411) $(am__append_3418) \ +- $(am__append_3425) $(am__append_3432) $(am__append_3439) \ +- $(am__append_3446) $(am__append_3453) $(am__append_3460) \ +- $(am__append_3467) $(am__append_3474) $(am__append_3481) \ +- $(am__append_3488) $(am__append_3495) $(am__append_3502) \ +- $(am__append_3509) $(am__append_3516) $(am__append_3523) \ +- $(am__append_3530) $(am__append_3537) $(am__append_3544) \ +- $(am__append_3551) $(am__append_3558) $(am__append_3565) \ +- $(am__append_3572) $(am__append_3579) $(am__append_3586) \ +- $(am__append_3593) $(am__append_3600) $(am__append_3607) \ +- $(am__append_3614) $(am__append_3621) $(am__append_3628) \ +- $(am__append_3635) $(am__append_3642) $(am__append_3649) \ +- $(am__append_3656) $(am__append_3663) $(am__append_3670) \ +- $(am__append_3677) $(am__append_3684) $(am__append_3691) \ +- $(am__append_3698) $(am__append_3705) $(am__append_3712) \ +- $(am__append_3719) $(am__append_3726) $(am__append_3733) \ +- $(am__append_3740) $(am__append_3747) $(am__append_3754) \ +- $(am__append_3761) $(am__append_3768) $(am__append_3775) \ +- $(am__append_3782) $(am__append_3789) $(am__append_3796) \ +- $(am__append_3803) $(am__append_3810) $(am__append_3817) \ +- $(am__append_3824) $(am__append_3831) $(am__append_3838) \ +- $(am__append_3845) $(am__append_3852) $(am__append_3859) \ +- $(am__append_3866) $(am__append_3873) $(am__append_3880) \ +- $(am__append_3887) macho.marker $(am__append_3894) \ +- $(am__append_3901) $(am__append_3908) $(am__append_3915) \ +- $(am__append_3922) $(am__append_3929) $(am__append_3936) \ +- $(am__append_3943) $(am__append_3950) $(am__append_3957) \ +- $(am__append_3964) $(am__append_3971) $(am__append_3978) \ +- $(am__append_3985) $(am__append_3992) $(am__append_3999) \ +- $(am__append_4006) $(am__append_4013) $(am__append_4020) \ +- $(am__append_4027) $(am__append_4034) $(am__append_4041) \ +- $(am__append_4048) $(am__append_4055) $(am__append_4062) \ +- $(am__append_4069) $(am__append_4076) normal.marker \ ++ $(am__append_2942) gettext.marker gfxmenu.marker hello.marker \ ++ gzio.marker offsetio.marker $(am__append_2949) \ ++ $(am__append_2956) $(am__append_2963) $(am__append_2970) \ ++ $(am__append_2977) $(am__append_2984) $(am__append_2991) \ ++ $(am__append_2998) $(am__append_3005) $(am__append_3012) \ ++ $(am__append_3019) $(am__append_3026) $(am__append_3033) \ ++ $(am__append_3040) $(am__append_3047) $(am__append_3054) \ ++ $(am__append_3061) $(am__append_3068) $(am__append_3075) \ ++ $(am__append_3082) elf.marker crypto.marker pbkdf2.marker \ ++ $(am__append_3089) $(am__append_3096) $(am__append_3103) \ ++ $(am__append_3110) $(am__append_3117) $(am__append_3124) \ ++ $(am__append_3131) $(am__append_3138) $(am__append_3145) \ ++ $(am__append_3152) $(am__append_3159) $(am__append_3166) \ ++ $(am__append_3173) $(am__append_3180) $(am__append_3187) \ ++ $(am__append_3194) $(am__append_3201) $(am__append_3208) \ ++ $(am__append_3215) $(am__append_3222) $(am__append_3229) \ ++ $(am__append_3236) $(am__append_3243) $(am__append_3250) \ ++ $(am__append_3257) $(am__append_3264) $(am__append_3271) \ ++ $(am__append_3278) $(am__append_3285) $(am__append_3292) \ ++ $(am__append_3299) $(am__append_3306) $(am__append_3313) \ ++ $(am__append_3320) $(am__append_3327) $(am__append_3334) \ ++ setjmp.marker $(am__append_3341) $(am__append_3348) \ ++ $(am__append_3355) $(am__append_3362) $(am__append_3369) \ ++ $(am__append_3376) $(am__append_3383) $(am__append_3390) \ ++ $(am__append_3397) $(am__append_3404) $(am__append_3411) \ ++ $(am__append_3418) $(am__append_3425) $(am__append_3432) \ ++ $(am__append_3439) $(am__append_3446) $(am__append_3453) \ ++ $(am__append_3460) $(am__append_3467) $(am__append_3474) \ ++ $(am__append_3481) $(am__append_3488) $(am__append_3495) \ ++ $(am__append_3502) $(am__append_3509) $(am__append_3516) \ ++ $(am__append_3523) $(am__append_3530) $(am__append_3537) \ ++ $(am__append_3544) $(am__append_3551) $(am__append_3558) \ ++ $(am__append_3565) $(am__append_3572) $(am__append_3579) \ ++ $(am__append_3586) $(am__append_3593) $(am__append_3600) \ ++ $(am__append_3607) $(am__append_3614) $(am__append_3621) \ ++ $(am__append_3628) $(am__append_3635) $(am__append_3642) \ ++ $(am__append_3649) $(am__append_3656) $(am__append_3663) \ ++ $(am__append_3670) $(am__append_3677) $(am__append_3684) \ ++ $(am__append_3691) $(am__append_3698) $(am__append_3705) \ ++ $(am__append_3712) $(am__append_3719) $(am__append_3726) \ ++ $(am__append_3733) $(am__append_3740) $(am__append_3747) \ ++ $(am__append_3754) $(am__append_3761) $(am__append_3768) \ ++ $(am__append_3775) $(am__append_3782) $(am__append_3789) \ ++ $(am__append_3796) $(am__append_3803) $(am__append_3810) \ ++ $(am__append_3817) $(am__append_3824) $(am__append_3831) \ ++ $(am__append_3838) $(am__append_3845) $(am__append_3852) \ ++ $(am__append_3859) $(am__append_3866) $(am__append_3873) \ ++ $(am__append_3880) macho.marker $(am__append_3887) \ ++ $(am__append_3894) $(am__append_3901) $(am__append_3908) \ ++ $(am__append_3915) $(am__append_3922) $(am__append_3929) \ ++ $(am__append_3936) $(am__append_3943) $(am__append_3950) \ ++ $(am__append_3957) $(am__append_3964) $(am__append_3971) \ ++ $(am__append_3978) $(am__append_3985) $(am__append_3992) \ ++ $(am__append_3999) $(am__append_4006) $(am__append_4013) \ ++ $(am__append_4020) $(am__append_4027) $(am__append_4034) \ ++ $(am__append_4041) $(am__append_4048) $(am__append_4055) \ ++ $(am__append_4062) $(am__append_4069) normal.marker \ + part_acorn.marker part_amiga.marker part_apple.marker \ + part_gpt.marker part_msdos.marker part_sun.marker \ + part_plan.marker part_dvh.marker part_bsd.marker \ + part_sunpc.marker part_dfly.marker msdospart.marker \ +- $(am__append_4083) $(am__append_4090) $(am__append_4097) \ +- $(am__append_4104) $(am__append_4111) $(am__append_4118) \ +- $(am__append_4125) $(am__append_4132) $(am__append_4139) \ +- $(am__append_4146) $(am__append_4153) $(am__append_4160) \ +- $(am__append_4167) $(am__append_4174) $(am__append_4181) \ +- $(am__append_4188) $(am__append_4195) $(am__append_4202) \ +- $(am__append_4209) $(am__append_4216) $(am__append_4223) \ +- $(am__append_4230) $(am__append_4237) $(am__append_4244) \ +- $(am__append_4251) $(am__append_4258) $(am__append_4265) \ +- gfxterm_background.marker $(am__append_4272) \ +- $(am__append_4279) $(am__append_4286) $(am__append_4293) \ +- $(am__append_4300) $(am__append_4307) $(am__append_4314) \ +- $(am__append_4321) $(am__append_4328) $(am__append_4335) \ +- $(am__append_4342) $(am__append_4349) $(am__append_4356) \ +- $(am__append_4363) $(am__append_4370) $(am__append_4377) \ +- $(am__append_4384) $(am__append_4391) $(am__append_4398) \ +- $(am__append_4405) $(am__append_4412) $(am__append_4419) \ +- $(am__append_4426) $(am__append_4433) $(am__append_4440) \ +- $(am__append_4447) $(am__append_4454) $(am__append_4461) \ +- $(am__append_4468) $(am__append_4475) $(am__append_4482) \ +- $(am__append_4489) $(am__append_4496) $(am__append_4503) \ +- $(am__append_4510) $(am__append_4517) $(am__append_4524) \ +- $(am__append_4531) $(am__append_4538) $(am__append_4545) \ +- $(am__append_4552) $(am__append_4559) $(am__append_4566) \ +- $(am__append_4573) $(am__append_4580) $(am__append_4587) \ +- $(am__append_4594) $(am__append_4601) $(am__append_4608) \ +- $(am__append_4615) $(am__append_4622) $(am__append_4629) \ +- $(am__append_4636) $(am__append_4643) $(am__append_4650) \ ++ $(am__append_4076) $(am__append_4083) $(am__append_4090) \ ++ $(am__append_4097) $(am__append_4104) $(am__append_4111) \ ++ $(am__append_4118) $(am__append_4125) $(am__append_4132) \ ++ $(am__append_4139) $(am__append_4146) $(am__append_4153) \ ++ $(am__append_4160) $(am__append_4167) $(am__append_4174) \ ++ $(am__append_4181) $(am__append_4188) $(am__append_4195) \ ++ $(am__append_4202) $(am__append_4209) $(am__append_4216) \ ++ $(am__append_4223) $(am__append_4230) $(am__append_4237) \ ++ $(am__append_4244) $(am__append_4251) $(am__append_4258) \ ++ gfxterm_background.marker $(am__append_4265) \ ++ $(am__append_4272) $(am__append_4279) $(am__append_4286) \ ++ $(am__append_4293) $(am__append_4300) $(am__append_4307) \ ++ $(am__append_4314) $(am__append_4321) $(am__append_4328) \ ++ $(am__append_4335) $(am__append_4342) $(am__append_4349) \ ++ $(am__append_4356) $(am__append_4363) $(am__append_4370) \ ++ $(am__append_4377) $(am__append_4384) $(am__append_4391) \ ++ $(am__append_4398) $(am__append_4405) $(am__append_4412) \ ++ $(am__append_4419) $(am__append_4426) $(am__append_4433) \ ++ $(am__append_4440) $(am__append_4447) $(am__append_4454) \ ++ $(am__append_4461) $(am__append_4468) $(am__append_4475) \ ++ $(am__append_4482) $(am__append_4489) $(am__append_4496) \ ++ $(am__append_4503) $(am__append_4510) $(am__append_4517) \ ++ $(am__append_4524) $(am__append_4531) $(am__append_4538) \ ++ $(am__append_4545) $(am__append_4552) $(am__append_4559) \ ++ $(am__append_4566) $(am__append_4573) $(am__append_4580) \ ++ $(am__append_4587) $(am__append_4594) $(am__append_4601) \ ++ $(am__append_4608) $(am__append_4615) $(am__append_4622) \ ++ $(am__append_4629) $(am__append_4636) $(am__append_4643) \ + functional_test.marker exfctest.marker strtoull_test.marker \ + setjmp_test.marker signature_test.marker sleep_test.marker \ +- xnu_uuid_test.marker pbkdf2_test.marker $(am__append_4657) \ +- $(am__append_4664) $(am__append_4671) $(am__append_4678) \ +- $(am__append_4685) $(am__append_4692) $(am__append_4699) \ +- $(am__append_4706) $(am__append_4713) $(am__append_4720) \ +- $(am__append_4727) $(am__append_4734) $(am__append_4741) \ +- $(am__append_4748) $(am__append_4755) $(am__append_4762) \ +- $(am__append_4769) $(am__append_4776) $(am__append_4783) \ +- $(am__append_4790) $(am__append_4797) $(am__append_4804) \ +- $(am__append_4811) $(am__append_4818) $(am__append_4825) \ ++ xnu_uuid_test.marker pbkdf2_test.marker $(am__append_4650) \ ++ $(am__append_4657) $(am__append_4664) $(am__append_4671) \ ++ $(am__append_4678) $(am__append_4685) $(am__append_4692) \ ++ $(am__append_4699) $(am__append_4706) $(am__append_4713) \ ++ $(am__append_4720) $(am__append_4727) $(am__append_4734) \ ++ $(am__append_4741) $(am__append_4748) $(am__append_4755) \ ++ $(am__append_4762) $(am__append_4769) $(am__append_4776) \ ++ $(am__append_4783) $(am__append_4790) $(am__append_4797) \ ++ $(am__append_4804) $(am__append_4811) $(am__append_4818) \ + div_test.marker mul_test.marker shift_test.marker \ + cmp_test.marker ctz_test.marker bswap_test.marker \ + videotest_checksum.marker gfxterm_menu.marker \ + cmdline_cat_test.marker bitmap.marker bitmap_scale.marker \ +- $(am__append_4832) $(am__append_4839) $(am__append_4846) \ +- $(am__append_4853) $(am__append_4860) $(am__append_4867) \ +- $(am__append_4874) $(am__append_4881) $(am__append_4888) \ +- jpeg.marker png.marker tga.marker $(am__append_4895) \ +- $(am__append_4902) $(am__append_4909) $(am__append_4916) \ +- $(am__append_4923) $(am__append_4930) $(am__append_4937) \ +- $(am__append_4944) $(am__append_4951) $(am__append_4958) \ +- $(am__append_4965) $(am__append_4972) $(am__append_4979) \ +- $(am__append_4986) $(am__append_4993) $(am__append_5000) \ +- $(am__append_5007) $(am__append_5014) $(am__append_5021) \ +- $(am__append_5028) $(am__append_5035) $(am__append_5042) \ +- $(am__append_5049) $(am__append_5056) $(am__append_5063) \ +- $(am__append_5070) $(am__append_5077) $(am__append_5084) \ +- $(am__append_5091) $(am__append_5098) $(am__append_5105) \ +- $(am__append_5112) $(am__append_5119) $(am__append_5126) \ +- $(am__append_5133) $(am__append_5140) $(am__append_5147) \ +- $(am__append_5154) $(am__append_5161) $(am__append_5168) \ +- $(am__append_5175) video_colors.marker $(am__append_5182) \ +- $(am__append_5189) datehook.marker net.marker tftp.marker \ +- http.marker $(am__append_5196) $(am__append_5203) \ +- $(am__append_5210) $(am__append_5217) $(am__append_5224) \ +- $(am__append_5231) $(am__append_5238) $(am__append_5245) \ +- $(am__append_5252) $(am__append_5259) $(am__append_5266) \ +- $(am__append_5273) $(am__append_5280) $(am__append_5287) \ +- $(am__append_5294) $(am__append_5301) $(am__append_5308) \ +- $(am__append_5315) syslinuxcfg.marker test_blockarg.marker \ +- xzio.marker lzopio.marker testload.marker $(am__append_5322) \ +- $(am__append_5329) $(am__append_5336) $(am__append_5343) \ +- $(am__append_5350) $(am__append_5357) $(am__append_5364) \ +- $(am__append_5371) $(am__append_5378) $(am__append_5385) \ +- $(am__append_5392) $(am__append_5399) $(am__append_5406) \ +- $(am__append_5413) $(am__append_5420) $(am__append_5427) \ +- $(am__append_5434) priority_queue.marker time.marker \ +- $(am__append_5441) $(am__append_5448) adler32.marker \ +- crc64.marker mpi.marker all_video.marker $(am__append_5455) \ +- $(am__append_5462) $(am__append_5469) $(am__append_5476) \ +- $(am__append_5483) $(am__append_5490) testspeed.marker \ +- $(am__append_5497) tr.marker progress.marker file.marker \ +- $(am__append_5504) $(am__append_5511) $(am__append_5518) \ +- $(am__append_5525) $(am__append_5532) $(am__append_5539) \ +- $(am__append_5546) $(am__append_5553) $(am__append_5560) \ +- $(am__append_5567) $(am__append_5574) $(am__append_5581) \ +- $(am__append_5588) $(am__append_5595) gcry_arcfour.marker \ ++ $(am__append_4825) $(am__append_4832) $(am__append_4839) \ ++ $(am__append_4846) $(am__append_4853) $(am__append_4860) \ ++ $(am__append_4867) $(am__append_4874) $(am__append_4881) \ ++ jpeg.marker png.marker tga.marker $(am__append_4888) \ ++ $(am__append_4895) $(am__append_4902) $(am__append_4909) \ ++ $(am__append_4916) $(am__append_4923) $(am__append_4930) \ ++ $(am__append_4937) $(am__append_4944) $(am__append_4951) \ ++ $(am__append_4958) $(am__append_4965) $(am__append_4972) \ ++ $(am__append_4979) $(am__append_4986) $(am__append_4993) \ ++ $(am__append_5000) $(am__append_5007) $(am__append_5014) \ ++ $(am__append_5021) $(am__append_5028) $(am__append_5035) \ ++ $(am__append_5042) $(am__append_5049) $(am__append_5056) \ ++ $(am__append_5063) $(am__append_5070) $(am__append_5077) \ ++ $(am__append_5084) $(am__append_5091) $(am__append_5098) \ ++ $(am__append_5105) $(am__append_5112) $(am__append_5119) \ ++ $(am__append_5126) $(am__append_5133) $(am__append_5140) \ ++ $(am__append_5147) $(am__append_5154) $(am__append_5161) \ ++ $(am__append_5168) video_colors.marker $(am__append_5175) \ ++ $(am__append_5182) datehook.marker net.marker tftp.marker \ ++ http.marker $(am__append_5189) $(am__append_5196) \ ++ $(am__append_5203) $(am__append_5210) $(am__append_5217) \ ++ $(am__append_5224) $(am__append_5231) $(am__append_5238) \ ++ $(am__append_5245) $(am__append_5252) $(am__append_5259) \ ++ $(am__append_5266) $(am__append_5273) $(am__append_5280) \ ++ $(am__append_5287) $(am__append_5294) $(am__append_5301) \ ++ $(am__append_5308) syslinuxcfg.marker test_blockarg.marker \ ++ xzio.marker lzopio.marker testload.marker $(am__append_5315) \ ++ $(am__append_5322) $(am__append_5329) $(am__append_5336) \ ++ $(am__append_5343) $(am__append_5350) $(am__append_5357) \ ++ $(am__append_5364) $(am__append_5371) $(am__append_5378) \ ++ $(am__append_5385) $(am__append_5392) $(am__append_5399) \ ++ $(am__append_5406) $(am__append_5413) $(am__append_5420) \ ++ $(am__append_5427) priority_queue.marker time.marker \ ++ $(am__append_5434) $(am__append_5441) adler32.marker \ ++ crc64.marker mpi.marker all_video.marker $(am__append_5448) \ ++ $(am__append_5455) $(am__append_5462) $(am__append_5469) \ ++ $(am__append_5476) $(am__append_5483) testspeed.marker \ ++ $(am__append_5490) tr.marker progress.marker file.marker \ ++ $(am__append_5497) $(am__append_5504) $(am__append_5511) \ ++ $(am__append_5518) $(am__append_5525) $(am__append_5532) \ ++ $(am__append_5539) $(am__append_5546) $(am__append_5553) \ ++ $(am__append_5560) $(am__append_5567) $(am__append_5574) \ ++ $(am__append_5581) $(am__append_5588) gcry_arcfour.marker \ + gcry_blowfish.marker gcry_camellia.marker gcry_cast5.marker \ + gcry_crc.marker gcry_des.marker gcry_dsa.marker \ + gcry_idea.marker gcry_md4.marker gcry_md5.marker \ +@@ -16410,8 +16387,8 @@ KERNEL_HEADER_FILES = $(top_srcdir)/include/grub/cache.h \ + $(top_srcdir)/include/grub/i18n.h \ + $(top_srcdir)/include/grub/kernel.h \ + $(top_srcdir)/include/grub/list.h \ +- $(top_srcdir)/include/grub/misc.h $(am__append_5801) \ +- $(am__append_5802) $(top_srcdir)/include/grub/mm.h \ ++ $(top_srcdir)/include/grub/misc.h $(am__append_5794) \ ++ $(am__append_5795) $(top_srcdir)/include/grub/mm.h \ + $(top_srcdir)/include/grub/parser.h \ + $(top_srcdir)/include/grub/partition.h \ + $(top_srcdir)/include/grub/term.h \ +@@ -16419,38 +16396,38 @@ KERNEL_HEADER_FILES = $(top_srcdir)/include/grub/cache.h \ + $(top_srcdir)/include/grub/verify.h \ + $(top_srcdir)/include/grub/mm_private.h \ + $(top_srcdir)/include/grub/net.h \ +- $(top_srcdir)/include/grub/memory.h $(am__append_5803) \ +- $(am__append_5804) $(am__append_5805) $(am__append_5806) \ +- $(am__append_5807) $(am__append_5808) $(am__append_5809) \ +- $(am__append_5810) $(am__append_5811) $(am__append_5812) \ +- $(am__append_5813) $(am__append_5814) $(am__append_5815) \ +- $(am__append_5816) $(am__append_5817) $(am__append_5818) \ +- $(am__append_5819) $(am__append_5820) $(am__append_5821) \ +- $(am__append_5822) $(am__append_5823) $(am__append_5824) \ +- $(am__append_5825) $(am__append_5826) $(am__append_5827) \ +- $(am__append_5828) $(am__append_5829) +-man_MANS = $(am__append_5792) ++ $(top_srcdir)/include/grub/memory.h $(am__append_5796) \ ++ $(am__append_5797) $(am__append_5798) $(am__append_5799) \ ++ $(am__append_5800) $(am__append_5801) $(am__append_5802) \ ++ $(am__append_5803) $(am__append_5804) $(am__append_5805) \ ++ $(am__append_5806) $(am__append_5807) $(am__append_5808) \ ++ $(am__append_5809) $(am__append_5810) $(am__append_5811) \ ++ $(am__append_5812) $(am__append_5813) $(am__append_5814) \ ++ $(am__append_5815) $(am__append_5816) $(am__append_5817) \ ++ $(am__append_5818) $(am__append_5819) $(am__append_5820) \ ++ $(am__append_5821) $(am__append_5822) ++man_MANS = $(am__append_5785) + noinst_DATA = gensyminfo.sh genmod.sh modinfo.sh kernel_syms.lst + pkgdata_DATA = + bin_SCRIPTS = + sbin_SCRIPTS = +-platform_DATA = $(am__append_5600) $(am__append_5605) \ +- $(am__append_5610) $(am__append_5615) $(am__append_5620) \ +- $(am__append_5625) $(am__append_5630) $(am__append_5635) \ +- $(am__append_5640) $(am__append_5645) $(am__append_5650) \ +- $(am__append_5655) $(am__append_5660) $(am__append_5665) \ +- $(am__append_5670) $(am__append_5675) $(am__append_5680) \ +- $(am__append_5685) $(am__append_5690) $(am__append_5695) \ +- $(am__append_5700) $(am__append_5705) $(am__append_5710) \ +- $(am__append_5715) $(am__append_5720) $(am__append_5725) \ +- $(am__append_5730) $(am__append_5735) $(am__append_5740) \ +- $(am__append_5745) $(am__append_5750) $(am__append_5755) \ +- $(am__append_5760) $(am__append_5765) $(am__append_5770) \ +- $(am__append_5775) $(am__append_5780) $(am__append_5785) \ +- $(am__append_5790) gmodule.pl gdb_grub $(am__append_5797) \ ++platform_DATA = $(am__append_5593) $(am__append_5598) \ ++ $(am__append_5603) $(am__append_5608) $(am__append_5613) \ ++ $(am__append_5618) $(am__append_5623) $(am__append_5628) \ ++ $(am__append_5633) $(am__append_5638) $(am__append_5643) \ ++ $(am__append_5648) $(am__append_5653) $(am__append_5658) \ ++ $(am__append_5663) $(am__append_5668) $(am__append_5673) \ ++ $(am__append_5678) $(am__append_5683) $(am__append_5688) \ ++ $(am__append_5693) $(am__append_5698) $(am__append_5703) \ ++ $(am__append_5708) $(am__append_5713) $(am__append_5718) \ ++ $(am__append_5723) $(am__append_5728) $(am__append_5733) \ ++ $(am__append_5738) $(am__append_5743) $(am__append_5748) \ ++ $(am__append_5753) $(am__append_5758) $(am__append_5763) \ ++ $(am__append_5768) $(am__append_5773) $(am__append_5778) \ ++ $(am__append_5783) gmodule.pl gdb_grub $(am__append_5790) \ + fs.lst command.lst partmap.lst terminal.lst fdt.lst \ + parttool.lst video.lst crypto.lst moddep.lst $(MOD_FILES) \ +- modinfo.sh $(am__append_5831) ++ modinfo.sh $(am__append_5824) + check_SCRIPTS = + dist_grubconf_DATA = + noinst_SCRIPTS = +@@ -16567,7 +16544,7 @@ dist_noinst_DATA = kern/disk_common.c gentrigtables.c $(am__append_5) \ + $(am__append_2259) $(am__append_2266) $(am__append_2273) \ + $(am__append_2280) $(am__append_2287) $(am__append_2294) \ + $(am__append_2301) $(am__append_2308) $(am__append_2315) \ +- $(am__append_2322) commands/search.c $(am__append_2329) \ ++ commands/search.c $(am__append_2322) $(am__append_2329) \ + $(am__append_2336) $(am__append_2343) $(am__append_2350) \ + $(am__append_2357) $(am__append_2364) $(am__append_2371) \ + $(am__append_2378) $(am__append_2385) $(am__append_2392) \ +@@ -16603,8 +16580,8 @@ dist_noinst_DATA = kern/disk_common.c gentrigtables.c $(am__append_5) \ + $(am__append_3008) $(am__append_3015) $(am__append_3022) \ + $(am__append_3029) $(am__append_3036) $(am__append_3043) \ + $(am__append_3050) $(am__append_3057) $(am__append_3064) \ +- $(am__append_3071) $(am__append_3078) $(am__append_3085) \ +- kern/elfXX.c lib/libgcrypt-grub/cipher/crypto.lst \ ++ $(am__append_3071) $(am__append_3078) kern/elfXX.c \ ++ lib/libgcrypt-grub/cipher/crypto.lst $(am__append_3085) \ + $(am__append_3092) $(am__append_3099) $(am__append_3106) \ + $(am__append_3113) $(am__append_3120) $(am__append_3127) \ + $(am__append_3134) $(am__append_3141) $(am__append_3148) \ +@@ -16616,11 +16593,11 @@ dist_noinst_DATA = kern/disk_common.c gentrigtables.c $(am__append_5) \ + $(am__append_3260) $(am__append_3267) $(am__append_3274) \ + $(am__append_3281) $(am__append_3288) $(am__append_3295) \ + $(am__append_3302) $(am__append_3309) $(am__append_3316) \ +- $(am__append_3323) $(am__append_3330) $(am__append_3337) \ +- lib/i386/setjmp.S lib/mips/setjmp.S lib/x86_64/setjmp.S \ +- lib/sparc64/setjmp.S lib/powerpc/setjmp.S lib/ia64/setjmp.S \ +- lib/ia64/longjmp.S lib/arm/setjmp.S lib/arm64/setjmp.S \ +- lib/riscv/setjmp.S $(am__append_3344) $(am__append_3351) \ ++ $(am__append_3323) $(am__append_3330) lib/i386/setjmp.S \ ++ lib/mips/setjmp.S lib/x86_64/setjmp.S lib/sparc64/setjmp.S \ ++ lib/powerpc/setjmp.S lib/ia64/setjmp.S lib/ia64/longjmp.S \ ++ lib/arm/setjmp.S lib/arm64/setjmp.S lib/riscv/setjmp.S \ ++ $(am__append_3337) $(am__append_3344) $(am__append_3351) \ + $(am__append_3358) $(am__append_3365) $(am__append_3372) \ + $(am__append_3379) $(am__append_3386) $(am__append_3393) \ + $(am__append_3400) $(am__append_3407) $(am__append_3414) \ +@@ -16646,7 +16623,7 @@ dist_noinst_DATA = kern/disk_common.c gentrigtables.c $(am__append_5) \ + $(am__append_3820) $(am__append_3827) $(am__append_3834) \ + $(am__append_3841) $(am__append_3848) $(am__append_3855) \ + $(am__append_3862) $(am__append_3869) $(am__append_3876) \ +- $(am__append_3883) loader/machoXX.c $(am__append_3890) \ ++ loader/machoXX.c $(am__append_3883) $(am__append_3890) \ + $(am__append_3897) $(am__append_3904) $(am__append_3911) \ + $(am__append_3918) $(am__append_3925) $(am__append_3932) \ + $(am__append_3939) $(am__append_3946) $(am__append_3953) \ +@@ -16655,8 +16632,8 @@ dist_noinst_DATA = kern/disk_common.c gentrigtables.c $(am__append_5) \ + $(am__append_4002) $(am__append_4009) $(am__append_4016) \ + $(am__append_4023) $(am__append_4030) $(am__append_4037) \ + $(am__append_4044) $(am__append_4051) $(am__append_4058) \ +- $(am__append_4065) $(am__append_4072) script/yylex.l \ +- script/parser.y $(am__append_4079) $(am__append_4086) \ ++ $(am__append_4065) script/yylex.l script/parser.y \ ++ $(am__append_4072) $(am__append_4079) $(am__append_4086) \ + $(am__append_4093) $(am__append_4100) $(am__append_4107) \ + $(am__append_4114) $(am__append_4121) $(am__append_4128) \ + $(am__append_4135) $(am__append_4142) $(am__append_4149) \ +@@ -16723,30 +16700,29 @@ dist_noinst_DATA = kern/disk_common.c gentrigtables.c $(am__append_5) \ + $(am__append_5416) $(am__append_5423) $(am__append_5430) \ + $(am__append_5437) $(am__append_5444) $(am__append_5451) \ + $(am__append_5458) $(am__append_5465) $(am__append_5472) \ +- $(am__append_5479) $(am__append_5486) $(am__append_5493) \ +- commands/fileXX.c loader/i386/xen_fileXX.c $(am__append_5500) \ ++ $(am__append_5479) $(am__append_5486) commands/fileXX.c \ ++ loader/i386/xen_fileXX.c $(am__append_5493) $(am__append_5500) \ + $(am__append_5507) $(am__append_5514) $(am__append_5521) \ + $(am__append_5528) $(am__append_5535) $(am__append_5542) \ + $(am__append_5549) $(am__append_5556) $(am__append_5563) \ + $(am__append_5570) $(am__append_5577) $(am__append_5584) \ +- $(am__append_5591) $(am__append_5597) $(am__append_5602) \ +- $(am__append_5607) $(am__append_5612) $(am__append_5617) \ +- $(am__append_5622) $(am__append_5627) $(am__append_5632) \ +- $(am__append_5637) $(am__append_5642) $(am__append_5647) \ +- $(am__append_5652) $(am__append_5657) $(am__append_5662) \ +- $(am__append_5667) $(am__append_5672) $(am__append_5677) \ +- $(am__append_5682) $(am__append_5687) $(am__append_5692) \ +- $(am__append_5697) $(am__append_5702) $(am__append_5707) \ +- $(am__append_5712) $(am__append_5717) $(am__append_5722) \ +- $(am__append_5727) $(am__append_5732) $(am__append_5737) \ +- $(am__append_5742) $(am__append_5747) $(am__append_5752) \ +- $(am__append_5757) $(am__append_5762) $(am__append_5767) \ +- $(am__append_5772) $(am__append_5777) $(am__append_5782) \ +- $(am__append_5787) $(am__append_5794) gensyminfo.sh.in \ +- genmod.sh.in modinfo.sh.in gmodule.pl.in gdb_grub.in \ +- $(am__append_5800) ++ $(am__append_5590) $(am__append_5595) $(am__append_5600) \ ++ $(am__append_5605) $(am__append_5610) $(am__append_5615) \ ++ $(am__append_5620) $(am__append_5625) $(am__append_5630) \ ++ $(am__append_5635) $(am__append_5640) $(am__append_5645) \ ++ $(am__append_5650) $(am__append_5655) $(am__append_5660) \ ++ $(am__append_5665) $(am__append_5670) $(am__append_5675) \ ++ $(am__append_5680) $(am__append_5685) $(am__append_5690) \ ++ $(am__append_5695) $(am__append_5700) $(am__append_5705) \ ++ $(am__append_5710) $(am__append_5715) $(am__append_5720) \ ++ $(am__append_5725) $(am__append_5730) $(am__append_5735) \ ++ $(am__append_5740) $(am__append_5745) $(am__append_5750) \ ++ $(am__append_5755) $(am__append_5760) $(am__append_5765) \ ++ $(am__append_5770) $(am__append_5775) $(am__append_5780) \ ++ $(am__append_5787) gensyminfo.sh.in genmod.sh.in modinfo.sh.in \ ++ gmodule.pl.in gdb_grub.in $(am__append_5793) + platform_SCRIPTS = +-EXTRA_DIST = $(am__append_5799) ++EXTRA_DIST = $(am__append_5792) + CLEANFILES = build-grub-pep2elf$(BUILD_EXEEXT) \ + build-grub-pe2elf$(BUILD_EXEEXT) gentrigtables$(BUILD_EXEEXT) \ + build-grub-module-verifier$(BUILD_EXEEXT) trigtables.c \ +@@ -16862,48 +16838,48 @@ CLEANFILES = build-grub-pep2elf$(BUILD_EXEEXT) \ + $(nodist_pgp_module_SOURCES) pgp.marker $(am__append_2044) \ + $(am__append_2051) $(am__append_2058) $(am__append_2065) \ + $(am__append_2072) $(am__append_2079) $(am__append_2086) \ +- $(am__append_2093) $(am__append_2100) $(am__append_2107) \ ++ $(am__append_2093) $(am__append_2100) \ + $(nodist_help_module_SOURCES) help.marker \ + $(nodist_hexdump_module_SOURCES) hexdump.marker \ + $(nodist_keystatus_module_SOURCES) keystatus.marker \ +- $(am__append_2114) $(am__append_2121) \ ++ $(am__append_2107) $(am__append_2114) \ + $(nodist_loadenv_module_SOURCES) loadenv.marker \ + $(nodist_ls_module_SOURCES) ls.marker \ + $(nodist_lsmmap_module_SOURCES) lsmmap.marker \ +- $(am__append_2128) $(am__append_2135) $(am__append_2142) \ +- $(am__append_2149) $(am__append_2156) $(am__append_2163) \ +- $(am__append_2170) $(am__append_2177) \ ++ $(am__append_2121) $(am__append_2128) $(am__append_2135) \ ++ $(am__append_2142) $(am__append_2149) $(am__append_2156) \ ++ $(am__append_2163) $(am__append_2170) \ + $(nodist_memrw_module_SOURCES) memrw.marker \ + $(nodist_minicmd_module_SOURCES) minicmd.marker \ + $(nodist_parttool_module_SOURCES) parttool.marker \ + $(nodist_password_module_SOURCES) password.marker \ + $(nodist_password_pbkdf2_module_SOURCES) \ +- password_pbkdf2.marker $(am__append_2184) $(am__append_2191) \ +- $(am__append_2198) $(am__append_2205) $(am__append_2212) \ +- $(am__append_2219) $(am__append_2226) $(am__append_2233) \ +- $(am__append_2240) $(am__append_2247) $(am__append_2254) \ +- $(am__append_2261) $(am__append_2268) $(am__append_2275) \ +- $(am__append_2282) $(am__append_2289) $(am__append_2296) \ +- $(am__append_2303) $(am__append_2310) $(am__append_2317) \ +- $(am__append_2324) $(nodist_probe_module_SOURCES) probe.marker \ ++ password_pbkdf2.marker $(am__append_2177) $(am__append_2184) \ ++ $(am__append_2191) $(am__append_2198) $(am__append_2205) \ ++ $(am__append_2212) $(am__append_2219) $(am__append_2226) \ ++ $(am__append_2233) $(am__append_2240) $(am__append_2247) \ ++ $(am__append_2254) $(am__append_2261) $(am__append_2268) \ ++ $(am__append_2275) $(am__append_2282) $(am__append_2289) \ ++ $(am__append_2296) $(am__append_2303) $(am__append_2310) \ ++ $(am__append_2317) $(nodist_probe_module_SOURCES) probe.marker \ + $(nodist_read_module_SOURCES) read.marker \ + $(nodist_search_module_SOURCES) search.marker \ + $(nodist_search_fs_file_module_SOURCES) search_fs_file.marker \ + $(nodist_search_fs_uuid_module_SOURCES) search_fs_uuid.marker \ + $(nodist_search_label_module_SOURCES) search_label.marker \ +- $(am__append_2331) $(am__append_2338) $(am__append_2345) \ +- $(am__append_2352) $(am__append_2359) $(am__append_2366) \ +- $(am__append_2373) $(am__append_2380) $(am__append_2387) \ +- $(am__append_2394) $(am__append_2401) $(am__append_2408) \ +- $(am__append_2415) $(am__append_2422) $(am__append_2429) \ +- $(am__append_2436) $(nodist_sleep_module_SOURCES) sleep.marker \ +- $(am__append_2443) $(am__append_2450) \ ++ $(am__append_2324) $(am__append_2331) $(am__append_2338) \ ++ $(am__append_2345) $(am__append_2352) $(am__append_2359) \ ++ $(am__append_2366) $(am__append_2373) $(am__append_2380) \ ++ $(am__append_2387) $(am__append_2394) $(am__append_2401) \ ++ $(am__append_2408) $(am__append_2415) $(am__append_2422) \ ++ $(am__append_2429) $(nodist_sleep_module_SOURCES) sleep.marker \ ++ $(am__append_2436) $(am__append_2443) \ + $(nodist_terminal_module_SOURCES) terminal.marker \ + $(nodist_test_module_SOURCES) test.marker \ +- $(nodist_true_module_SOURCES) true.marker $(am__append_2457) \ +- $(am__append_2464) $(am__append_2471) $(am__append_2478) \ +- $(am__append_2485) $(am__append_2492) $(am__append_2499) \ +- $(am__append_2506) $(am__append_2513) \ ++ $(nodist_true_module_SOURCES) true.marker $(am__append_2450) \ ++ $(am__append_2457) $(am__append_2464) $(am__append_2471) \ ++ $(am__append_2478) $(am__append_2485) $(am__append_2492) \ ++ $(am__append_2499) $(am__append_2506) \ + $(nodist_videoinfo_module_SOURCES) videoinfo.marker \ + $(nodist_videotest_module_SOURCES) videotest.marker \ + $(nodist_xnu_uuid_module_SOURCES) xnu_uuid.marker \ +@@ -16922,27 +16898,27 @@ CLEANFILES = build-grub-pep2elf$(BUILD_EXEEXT) \ + $(nodist_raid6rec_module_SOURCES) raid6rec.marker \ + $(nodist_scsi_module_SOURCES) scsi.marker \ + $(nodist_memdisk_module_SOURCES) memdisk.marker \ +- $(am__append_2520) $(am__append_2527) $(am__append_2534) \ +- $(am__append_2541) $(am__append_2548) $(am__append_2555) \ +- $(am__append_2562) $(am__append_2569) $(am__append_2576) \ +- $(am__append_2583) $(am__append_2590) $(am__append_2597) \ +- $(am__append_2604) $(am__append_2611) $(am__append_2618) \ +- $(am__append_2625) $(am__append_2632) $(am__append_2639) \ +- $(am__append_2646) $(am__append_2653) $(am__append_2660) \ +- $(am__append_2667) $(am__append_2674) $(am__append_2681) \ +- $(am__append_2688) $(am__append_2695) $(am__append_2702) \ +- $(am__append_2709) $(am__append_2716) $(am__append_2723) \ +- $(am__append_2730) $(am__append_2737) $(am__append_2744) \ +- $(am__append_2751) $(am__append_2758) $(am__append_2765) \ +- $(am__append_2772) $(am__append_2779) $(am__append_2786) \ +- $(am__append_2793) $(am__append_2800) $(am__append_2807) \ +- $(am__append_2814) $(am__append_2821) $(am__append_2828) \ +- $(am__append_2835) $(am__append_2842) $(am__append_2849) \ +- $(am__append_2856) $(am__append_2863) $(am__append_2870) \ +- $(am__append_2877) $(am__append_2884) $(am__append_2891) \ +- $(am__append_2898) $(am__append_2905) $(am__append_2912) \ +- $(am__append_2919) $(am__append_2926) $(am__append_2933) \ +- $(am__append_2940) $(nodist_procfs_module_SOURCES) \ ++ $(am__append_2513) $(am__append_2520) $(am__append_2527) \ ++ $(am__append_2534) $(am__append_2541) $(am__append_2548) \ ++ $(am__append_2555) $(am__append_2562) $(am__append_2569) \ ++ $(am__append_2576) $(am__append_2583) $(am__append_2590) \ ++ $(am__append_2597) $(am__append_2604) $(am__append_2611) \ ++ $(am__append_2618) $(am__append_2625) $(am__append_2632) \ ++ $(am__append_2639) $(am__append_2646) $(am__append_2653) \ ++ $(am__append_2660) $(am__append_2667) $(am__append_2674) \ ++ $(am__append_2681) $(am__append_2688) $(am__append_2695) \ ++ $(am__append_2702) $(am__append_2709) $(am__append_2716) \ ++ $(am__append_2723) $(am__append_2730) $(am__append_2737) \ ++ $(am__append_2744) $(am__append_2751) $(am__append_2758) \ ++ $(am__append_2765) $(am__append_2772) $(am__append_2779) \ ++ $(am__append_2786) $(am__append_2793) $(am__append_2800) \ ++ $(am__append_2807) $(am__append_2814) $(am__append_2821) \ ++ $(am__append_2828) $(am__append_2835) $(am__append_2842) \ ++ $(am__append_2849) $(am__append_2856) $(am__append_2863) \ ++ $(am__append_2870) $(am__append_2877) $(am__append_2884) \ ++ $(am__append_2891) $(am__append_2898) $(am__append_2905) \ ++ $(am__append_2912) $(am__append_2919) $(am__append_2926) \ ++ $(am__append_2933) $(nodist_procfs_module_SOURCES) \ + procfs.marker $(nodist_affs_module_SOURCES) affs.marker \ + $(nodist_afs_module_SOURCES) afs.marker \ + $(nodist_bfs_module_SOURCES) bfs.marker \ +@@ -16987,70 +16963,70 @@ CLEANFILES = build-grub-pep2elf$(BUILD_EXEEXT) \ + $(nodist_zfscrypt_module_SOURCES) zfscrypt.marker \ + $(nodist_zfsinfo_module_SOURCES) zfsinfo.marker \ + $(nodist_macbless_module_SOURCES) macbless.marker \ +- $(am__append_2947) $(nodist_gettext_module_SOURCES) \ ++ $(am__append_2940) $(nodist_gettext_module_SOURCES) \ + gettext.marker $(nodist_gfxmenu_module_SOURCES) gfxmenu.marker \ + $(nodist_hello_module_SOURCES) hello.marker \ + $(nodist_gzio_module_SOURCES) gzio.marker \ + $(nodist_offsetio_module_SOURCES) offsetio.marker \ +- $(am__append_2954) $(am__append_2961) $(am__append_2968) \ +- $(am__append_2975) $(am__append_2982) $(am__append_2989) \ +- $(am__append_2996) $(am__append_3003) $(am__append_3010) \ +- $(am__append_3017) $(am__append_3024) $(am__append_3031) \ +- $(am__append_3038) $(am__append_3045) $(am__append_3052) \ +- $(am__append_3059) $(am__append_3066) $(am__append_3073) \ +- $(am__append_3080) $(am__append_3087) \ ++ $(am__append_2947) $(am__append_2954) $(am__append_2961) \ ++ $(am__append_2968) $(am__append_2975) $(am__append_2982) \ ++ $(am__append_2989) $(am__append_2996) $(am__append_3003) \ ++ $(am__append_3010) $(am__append_3017) $(am__append_3024) \ ++ $(am__append_3031) $(am__append_3038) $(am__append_3045) \ ++ $(am__append_3052) $(am__append_3059) $(am__append_3066) \ ++ $(am__append_3073) $(am__append_3080) \ + $(nodist_elf_module_SOURCES) elf.marker \ + $(nodist_crypto_module_SOURCES) crypto.marker \ + $(nodist_pbkdf2_module_SOURCES) pbkdf2.marker \ +- $(am__append_3094) $(am__append_3101) $(am__append_3108) \ +- $(am__append_3115) $(am__append_3122) $(am__append_3129) \ +- $(am__append_3136) $(am__append_3143) $(am__append_3150) \ +- $(am__append_3157) $(am__append_3164) $(am__append_3171) \ +- $(am__append_3178) $(am__append_3185) $(am__append_3192) \ +- $(am__append_3199) $(am__append_3206) $(am__append_3213) \ +- $(am__append_3220) $(am__append_3227) $(am__append_3234) \ +- $(am__append_3241) $(am__append_3248) $(am__append_3255) \ +- $(am__append_3262) $(am__append_3269) $(am__append_3276) \ +- $(am__append_3283) $(am__append_3290) $(am__append_3297) \ +- $(am__append_3304) $(am__append_3311) $(am__append_3318) \ +- $(am__append_3325) $(am__append_3332) $(am__append_3339) \ ++ $(am__append_3087) $(am__append_3094) $(am__append_3101) \ ++ $(am__append_3108) $(am__append_3115) $(am__append_3122) \ ++ $(am__append_3129) $(am__append_3136) $(am__append_3143) \ ++ $(am__append_3150) $(am__append_3157) $(am__append_3164) \ ++ $(am__append_3171) $(am__append_3178) $(am__append_3185) \ ++ $(am__append_3192) $(am__append_3199) $(am__append_3206) \ ++ $(am__append_3213) $(am__append_3220) $(am__append_3227) \ ++ $(am__append_3234) $(am__append_3241) $(am__append_3248) \ ++ $(am__append_3255) $(am__append_3262) $(am__append_3269) \ ++ $(am__append_3276) $(am__append_3283) $(am__append_3290) \ ++ $(am__append_3297) $(am__append_3304) $(am__append_3311) \ ++ $(am__append_3318) $(am__append_3325) $(am__append_3332) \ + $(nodist_setjmp_module_SOURCES) setjmp.marker \ +- $(am__append_3346) $(am__append_3353) $(am__append_3360) \ +- $(am__append_3367) $(am__append_3374) $(am__append_3381) \ +- $(am__append_3388) $(am__append_3395) $(am__append_3402) \ +- $(am__append_3409) $(am__append_3416) $(am__append_3423) \ +- $(am__append_3430) $(am__append_3437) $(am__append_3444) \ +- $(am__append_3451) $(am__append_3458) $(am__append_3465) \ +- $(am__append_3472) $(am__append_3479) $(am__append_3486) \ +- $(am__append_3493) $(am__append_3500) $(am__append_3507) \ +- $(am__append_3514) $(am__append_3521) $(am__append_3528) \ +- $(am__append_3535) $(am__append_3542) $(am__append_3549) \ +- $(am__append_3556) $(am__append_3563) $(am__append_3570) \ +- $(am__append_3577) $(am__append_3584) $(am__append_3591) \ +- $(am__append_3598) $(am__append_3605) $(am__append_3612) \ +- $(am__append_3619) $(am__append_3626) $(am__append_3633) \ +- $(am__append_3640) $(am__append_3647) $(am__append_3654) \ +- $(am__append_3661) $(am__append_3668) $(am__append_3675) \ +- $(am__append_3682) $(am__append_3689) $(am__append_3696) \ +- $(am__append_3703) $(am__append_3710) $(am__append_3717) \ +- $(am__append_3724) $(am__append_3731) $(am__append_3738) \ +- $(am__append_3745) $(am__append_3752) $(am__append_3759) \ +- $(am__append_3766) $(am__append_3773) $(am__append_3780) \ +- $(am__append_3787) $(am__append_3794) $(am__append_3801) \ +- $(am__append_3808) $(am__append_3815) $(am__append_3822) \ +- $(am__append_3829) $(am__append_3836) $(am__append_3843) \ +- $(am__append_3850) $(am__append_3857) $(am__append_3864) \ +- $(am__append_3871) $(am__append_3878) $(am__append_3885) \ +- $(nodist_macho_module_SOURCES) macho.marker $(am__append_3892) \ +- $(am__append_3899) $(am__append_3906) $(am__append_3913) \ +- $(am__append_3920) $(am__append_3927) $(am__append_3934) \ +- $(am__append_3941) $(am__append_3948) $(am__append_3955) \ +- $(am__append_3962) $(am__append_3969) $(am__append_3976) \ +- $(am__append_3983) $(am__append_3990) $(am__append_3997) \ +- $(am__append_4004) $(am__append_4011) $(am__append_4018) \ +- $(am__append_4025) $(am__append_4032) $(am__append_4039) \ +- $(am__append_4046) $(am__append_4053) $(am__append_4060) \ +- $(am__append_4067) $(am__append_4074) \ ++ $(am__append_3339) $(am__append_3346) $(am__append_3353) \ ++ $(am__append_3360) $(am__append_3367) $(am__append_3374) \ ++ $(am__append_3381) $(am__append_3388) $(am__append_3395) \ ++ $(am__append_3402) $(am__append_3409) $(am__append_3416) \ ++ $(am__append_3423) $(am__append_3430) $(am__append_3437) \ ++ $(am__append_3444) $(am__append_3451) $(am__append_3458) \ ++ $(am__append_3465) $(am__append_3472) $(am__append_3479) \ ++ $(am__append_3486) $(am__append_3493) $(am__append_3500) \ ++ $(am__append_3507) $(am__append_3514) $(am__append_3521) \ ++ $(am__append_3528) $(am__append_3535) $(am__append_3542) \ ++ $(am__append_3549) $(am__append_3556) $(am__append_3563) \ ++ $(am__append_3570) $(am__append_3577) $(am__append_3584) \ ++ $(am__append_3591) $(am__append_3598) $(am__append_3605) \ ++ $(am__append_3612) $(am__append_3619) $(am__append_3626) \ ++ $(am__append_3633) $(am__append_3640) $(am__append_3647) \ ++ $(am__append_3654) $(am__append_3661) $(am__append_3668) \ ++ $(am__append_3675) $(am__append_3682) $(am__append_3689) \ ++ $(am__append_3696) $(am__append_3703) $(am__append_3710) \ ++ $(am__append_3717) $(am__append_3724) $(am__append_3731) \ ++ $(am__append_3738) $(am__append_3745) $(am__append_3752) \ ++ $(am__append_3759) $(am__append_3766) $(am__append_3773) \ ++ $(am__append_3780) $(am__append_3787) $(am__append_3794) \ ++ $(am__append_3801) $(am__append_3808) $(am__append_3815) \ ++ $(am__append_3822) $(am__append_3829) $(am__append_3836) \ ++ $(am__append_3843) $(am__append_3850) $(am__append_3857) \ ++ $(am__append_3864) $(am__append_3871) $(am__append_3878) \ ++ $(nodist_macho_module_SOURCES) macho.marker $(am__append_3885) \ ++ $(am__append_3892) $(am__append_3899) $(am__append_3906) \ ++ $(am__append_3913) $(am__append_3920) $(am__append_3927) \ ++ $(am__append_3934) $(am__append_3941) $(am__append_3948) \ ++ $(am__append_3955) $(am__append_3962) $(am__append_3969) \ ++ $(am__append_3976) $(am__append_3983) $(am__append_3990) \ ++ $(am__append_3997) $(am__append_4004) $(am__append_4011) \ ++ $(am__append_4018) $(am__append_4025) $(am__append_4032) \ ++ $(am__append_4039) $(am__append_4046) $(am__append_4053) \ ++ $(am__append_4060) $(am__append_4067) \ + $(nodist_normal_module_SOURCES) normal.marker \ + $(nodist_part_acorn_module_SOURCES) part_acorn.marker \ + $(nodist_part_amiga_module_SOURCES) part_amiga.marker \ +@@ -17064,35 +17040,35 @@ CLEANFILES = build-grub-pep2elf$(BUILD_EXEEXT) \ + $(nodist_part_sunpc_module_SOURCES) part_sunpc.marker \ + $(nodist_part_dfly_module_SOURCES) part_dfly.marker \ + $(nodist_msdospart_module_SOURCES) msdospart.marker \ +- $(am__append_4081) $(am__append_4088) $(am__append_4095) \ +- $(am__append_4102) $(am__append_4109) $(am__append_4116) \ +- $(am__append_4123) $(am__append_4130) $(am__append_4137) \ +- $(am__append_4144) $(am__append_4151) $(am__append_4158) \ +- $(am__append_4165) $(am__append_4172) $(am__append_4179) \ +- $(am__append_4186) $(am__append_4193) $(am__append_4200) \ +- $(am__append_4207) $(am__append_4214) $(am__append_4221) \ +- $(am__append_4228) $(am__append_4235) $(am__append_4242) \ +- $(am__append_4249) $(am__append_4256) $(am__append_4263) \ ++ $(am__append_4074) $(am__append_4081) $(am__append_4088) \ ++ $(am__append_4095) $(am__append_4102) $(am__append_4109) \ ++ $(am__append_4116) $(am__append_4123) $(am__append_4130) \ ++ $(am__append_4137) $(am__append_4144) $(am__append_4151) \ ++ $(am__append_4158) $(am__append_4165) $(am__append_4172) \ ++ $(am__append_4179) $(am__append_4186) $(am__append_4193) \ ++ $(am__append_4200) $(am__append_4207) $(am__append_4214) \ ++ $(am__append_4221) $(am__append_4228) $(am__append_4235) \ ++ $(am__append_4242) $(am__append_4249) $(am__append_4256) \ + $(nodist_gfxterm_background_module_SOURCES) \ +- gfxterm_background.marker $(am__append_4270) \ +- $(am__append_4277) $(am__append_4284) $(am__append_4291) \ +- $(am__append_4298) $(am__append_4305) $(am__append_4312) \ +- $(am__append_4319) $(am__append_4326) $(am__append_4333) \ +- $(am__append_4340) $(am__append_4347) $(am__append_4354) \ +- $(am__append_4361) $(am__append_4368) $(am__append_4375) \ +- $(am__append_4382) $(am__append_4389) $(am__append_4396) \ +- $(am__append_4403) $(am__append_4410) $(am__append_4417) \ +- $(am__append_4424) $(am__append_4431) $(am__append_4438) \ +- $(am__append_4445) $(am__append_4452) $(am__append_4459) \ +- $(am__append_4466) $(am__append_4473) $(am__append_4480) \ +- $(am__append_4487) $(am__append_4494) $(am__append_4501) \ +- $(am__append_4508) $(am__append_4515) $(am__append_4522) \ +- $(am__append_4529) $(am__append_4536) $(am__append_4543) \ +- $(am__append_4550) $(am__append_4557) $(am__append_4564) \ +- $(am__append_4571) $(am__append_4578) $(am__append_4585) \ +- $(am__append_4592) $(am__append_4599) $(am__append_4606) \ +- $(am__append_4613) $(am__append_4620) $(am__append_4627) \ +- $(am__append_4634) $(am__append_4641) $(am__append_4648) \ ++ gfxterm_background.marker $(am__append_4263) \ ++ $(am__append_4270) $(am__append_4277) $(am__append_4284) \ ++ $(am__append_4291) $(am__append_4298) $(am__append_4305) \ ++ $(am__append_4312) $(am__append_4319) $(am__append_4326) \ ++ $(am__append_4333) $(am__append_4340) $(am__append_4347) \ ++ $(am__append_4354) $(am__append_4361) $(am__append_4368) \ ++ $(am__append_4375) $(am__append_4382) $(am__append_4389) \ ++ $(am__append_4396) $(am__append_4403) $(am__append_4410) \ ++ $(am__append_4417) $(am__append_4424) $(am__append_4431) \ ++ $(am__append_4438) $(am__append_4445) $(am__append_4452) \ ++ $(am__append_4459) $(am__append_4466) $(am__append_4473) \ ++ $(am__append_4480) $(am__append_4487) $(am__append_4494) \ ++ $(am__append_4501) $(am__append_4508) $(am__append_4515) \ ++ $(am__append_4522) $(am__append_4529) $(am__append_4536) \ ++ $(am__append_4543) $(am__append_4550) $(am__append_4557) \ ++ $(am__append_4564) $(am__append_4571) $(am__append_4578) \ ++ $(am__append_4585) $(am__append_4592) $(am__append_4599) \ ++ $(am__append_4606) $(am__append_4613) $(am__append_4620) \ ++ $(am__append_4627) $(am__append_4634) $(am__append_4641) \ + $(nodist_functional_test_module_SOURCES) \ + functional_test.marker $(nodist_exfctest_module_SOURCES) \ + exfctest.marker $(nodist_strtoull_test_module_SOURCES) \ +@@ -17101,15 +17077,15 @@ CLEANFILES = build-grub-pep2elf$(BUILD_EXEEXT) \ + signature_test.marker $(nodist_sleep_test_module_SOURCES) \ + sleep_test.marker $(nodist_xnu_uuid_test_module_SOURCES) \ + xnu_uuid_test.marker $(nodist_pbkdf2_test_module_SOURCES) \ +- pbkdf2_test.marker $(am__append_4655) $(am__append_4662) \ +- $(am__append_4669) $(am__append_4676) $(am__append_4683) \ +- $(am__append_4690) $(am__append_4697) $(am__append_4704) \ +- $(am__append_4711) $(am__append_4718) $(am__append_4725) \ +- $(am__append_4732) $(am__append_4739) $(am__append_4746) \ +- $(am__append_4753) $(am__append_4760) $(am__append_4767) \ +- $(am__append_4774) $(am__append_4781) $(am__append_4788) \ +- $(am__append_4795) $(am__append_4802) $(am__append_4809) \ +- $(am__append_4816) $(am__append_4823) \ ++ pbkdf2_test.marker $(am__append_4648) $(am__append_4655) \ ++ $(am__append_4662) $(am__append_4669) $(am__append_4676) \ ++ $(am__append_4683) $(am__append_4690) $(am__append_4697) \ ++ $(am__append_4704) $(am__append_4711) $(am__append_4718) \ ++ $(am__append_4725) $(am__append_4732) $(am__append_4739) \ ++ $(am__append_4746) $(am__append_4753) $(am__append_4760) \ ++ $(am__append_4767) $(am__append_4774) $(am__append_4781) \ ++ $(am__append_4788) $(am__append_4795) $(am__append_4802) \ ++ $(am__append_4809) $(am__append_4816) \ + $(nodist_div_test_module_SOURCES) div_test.marker \ + $(nodist_mul_test_module_SOURCES) mul_test.marker \ + $(nodist_shift_test_module_SOURCES) shift_test.marker \ +@@ -17122,65 +17098,65 @@ CLEANFILES = build-grub-pep2elf$(BUILD_EXEEXT) \ + $(nodist_cmdline_cat_test_module_SOURCES) \ + cmdline_cat_test.marker $(nodist_bitmap_module_SOURCES) \ + bitmap.marker $(nodist_bitmap_scale_module_SOURCES) \ +- bitmap_scale.marker $(am__append_4830) $(am__append_4837) \ +- $(am__append_4844) $(am__append_4851) $(am__append_4858) \ +- $(am__append_4865) $(am__append_4872) $(am__append_4879) \ +- $(am__append_4886) $(nodist_jpeg_module_SOURCES) jpeg.marker \ ++ bitmap_scale.marker $(am__append_4823) $(am__append_4830) \ ++ $(am__append_4837) $(am__append_4844) $(am__append_4851) \ ++ $(am__append_4858) $(am__append_4865) $(am__append_4872) \ ++ $(am__append_4879) $(nodist_jpeg_module_SOURCES) jpeg.marker \ + $(nodist_png_module_SOURCES) png.marker \ +- $(nodist_tga_module_SOURCES) tga.marker $(am__append_4893) \ +- $(am__append_4900) $(am__append_4907) $(am__append_4914) \ +- $(am__append_4921) $(am__append_4928) $(am__append_4935) \ +- $(am__append_4942) $(am__append_4949) $(am__append_4956) \ +- $(am__append_4963) $(am__append_4970) $(am__append_4977) \ +- $(am__append_4984) $(am__append_4991) $(am__append_4998) \ +- $(am__append_5005) $(am__append_5012) $(am__append_5019) \ +- $(am__append_5026) $(am__append_5033) $(am__append_5040) \ +- $(am__append_5047) $(am__append_5054) $(am__append_5061) \ +- $(am__append_5068) $(am__append_5075) $(am__append_5082) \ +- $(am__append_5089) $(am__append_5096) $(am__append_5103) \ +- $(am__append_5110) $(am__append_5117) $(am__append_5124) \ +- $(am__append_5131) $(am__append_5138) $(am__append_5145) \ +- $(am__append_5152) $(am__append_5159) $(am__append_5166) \ +- $(am__append_5173) $(nodist_video_colors_module_SOURCES) \ +- video_colors.marker $(am__append_5180) $(am__append_5187) \ ++ $(nodist_tga_module_SOURCES) tga.marker $(am__append_4886) \ ++ $(am__append_4893) $(am__append_4900) $(am__append_4907) \ ++ $(am__append_4914) $(am__append_4921) $(am__append_4928) \ ++ $(am__append_4935) $(am__append_4942) $(am__append_4949) \ ++ $(am__append_4956) $(am__append_4963) $(am__append_4970) \ ++ $(am__append_4977) $(am__append_4984) $(am__append_4991) \ ++ $(am__append_4998) $(am__append_5005) $(am__append_5012) \ ++ $(am__append_5019) $(am__append_5026) $(am__append_5033) \ ++ $(am__append_5040) $(am__append_5047) $(am__append_5054) \ ++ $(am__append_5061) $(am__append_5068) $(am__append_5075) \ ++ $(am__append_5082) $(am__append_5089) $(am__append_5096) \ ++ $(am__append_5103) $(am__append_5110) $(am__append_5117) \ ++ $(am__append_5124) $(am__append_5131) $(am__append_5138) \ ++ $(am__append_5145) $(am__append_5152) $(am__append_5159) \ ++ $(am__append_5166) $(nodist_video_colors_module_SOURCES) \ ++ video_colors.marker $(am__append_5173) $(am__append_5180) \ + $(nodist_datehook_module_SOURCES) datehook.marker \ + $(nodist_net_module_SOURCES) net.marker \ + $(nodist_tftp_module_SOURCES) tftp.marker \ +- $(nodist_http_module_SOURCES) http.marker $(am__append_5194) \ +- $(am__append_5201) $(am__append_5208) $(am__append_5215) \ +- $(am__append_5222) $(am__append_5229) $(am__append_5236) \ +- $(am__append_5243) $(am__append_5250) $(am__append_5257) \ +- $(am__append_5264) $(am__append_5271) $(am__append_5278) \ +- $(am__append_5285) $(am__append_5292) $(am__append_5299) \ +- $(am__append_5306) $(am__append_5313) \ ++ $(nodist_http_module_SOURCES) http.marker $(am__append_5187) \ ++ $(am__append_5194) $(am__append_5201) $(am__append_5208) \ ++ $(am__append_5215) $(am__append_5222) $(am__append_5229) \ ++ $(am__append_5236) $(am__append_5243) $(am__append_5250) \ ++ $(am__append_5257) $(am__append_5264) $(am__append_5271) \ ++ $(am__append_5278) $(am__append_5285) $(am__append_5292) \ ++ $(am__append_5299) $(am__append_5306) \ + $(nodist_syslinuxcfg_module_SOURCES) syslinuxcfg.marker \ + $(nodist_test_blockarg_module_SOURCES) test_blockarg.marker \ + $(nodist_xzio_module_SOURCES) xzio.marker \ + $(nodist_lzopio_module_SOURCES) lzopio.marker \ + $(nodist_testload_module_SOURCES) testload.marker \ +- $(am__append_5320) $(am__append_5327) $(am__append_5334) \ +- $(am__append_5341) $(am__append_5348) $(am__append_5355) \ +- $(am__append_5362) $(am__append_5369) $(am__append_5376) \ +- $(am__append_5383) $(am__append_5390) $(am__append_5397) \ +- $(am__append_5404) $(am__append_5411) $(am__append_5418) \ +- $(am__append_5425) $(am__append_5432) \ ++ $(am__append_5313) $(am__append_5320) $(am__append_5327) \ ++ $(am__append_5334) $(am__append_5341) $(am__append_5348) \ ++ $(am__append_5355) $(am__append_5362) $(am__append_5369) \ ++ $(am__append_5376) $(am__append_5383) $(am__append_5390) \ ++ $(am__append_5397) $(am__append_5404) $(am__append_5411) \ ++ $(am__append_5418) $(am__append_5425) \ + $(nodist_priority_queue_module_SOURCES) priority_queue.marker \ +- $(nodist_time_module_SOURCES) time.marker $(am__append_5439) \ +- $(am__append_5446) $(nodist_adler32_module_SOURCES) \ ++ $(nodist_time_module_SOURCES) time.marker $(am__append_5432) \ ++ $(am__append_5439) $(nodist_adler32_module_SOURCES) \ + adler32.marker $(nodist_crc64_module_SOURCES) crc64.marker \ + $(nodist_mpi_module_SOURCES) mpi.marker \ + $(nodist_all_video_module_SOURCES) all_video.marker \ +- $(am__append_5453) $(am__append_5460) $(am__append_5467) \ +- $(am__append_5474) $(am__append_5481) $(am__append_5488) \ ++ $(am__append_5446) $(am__append_5453) $(am__append_5460) \ ++ $(am__append_5467) $(am__append_5474) $(am__append_5481) \ + $(nodist_testspeed_module_SOURCES) testspeed.marker \ +- $(am__append_5495) $(nodist_tr_module_SOURCES) tr.marker \ ++ $(am__append_5488) $(nodist_tr_module_SOURCES) tr.marker \ + $(nodist_progress_module_SOURCES) progress.marker \ +- $(nodist_file_module_SOURCES) file.marker $(am__append_5502) \ +- $(am__append_5509) $(am__append_5516) $(am__append_5523) \ +- $(am__append_5530) $(am__append_5537) $(am__append_5544) \ +- $(am__append_5551) $(am__append_5558) $(am__append_5565) \ +- $(am__append_5572) $(am__append_5579) $(am__append_5586) \ +- $(am__append_5593) $(nodist_gcry_arcfour_module_SOURCES) \ ++ $(nodist_file_module_SOURCES) file.marker $(am__append_5495) \ ++ $(am__append_5502) $(am__append_5509) $(am__append_5516) \ ++ $(am__append_5523) $(am__append_5530) $(am__append_5537) \ ++ $(am__append_5544) $(am__append_5551) $(am__append_5558) \ ++ $(am__append_5565) $(am__append_5572) $(am__append_5579) \ ++ $(am__append_5586) $(nodist_gcry_arcfour_module_SOURCES) \ + gcry_arcfour.marker $(nodist_gcry_blowfish_module_SOURCES) \ + gcry_blowfish.marker $(nodist_gcry_camellia_module_SOURCES) \ + gcry_camellia.marker $(nodist_gcry_cast5_module_SOURCES) \ +@@ -17202,25 +17178,25 @@ CLEANFILES = build-grub-pep2elf$(BUILD_EXEEXT) \ + gcry_sha512.marker $(nodist_gcry_tiger_module_SOURCES) \ + gcry_tiger.marker $(nodist_gcry_twofish_module_SOURCES) \ + gcry_twofish.marker $(nodist_gcry_whirlpool_module_SOURCES) \ +- gcry_whirlpool.marker $(am__append_5599) $(am__append_5604) \ +- $(am__append_5609) $(am__append_5614) $(am__append_5619) \ +- $(am__append_5624) $(am__append_5629) $(am__append_5634) \ +- $(am__append_5639) $(am__append_5644) $(am__append_5649) \ +- $(am__append_5654) $(am__append_5659) $(am__append_5664) \ +- $(am__append_5669) $(am__append_5674) $(am__append_5679) \ +- $(am__append_5684) $(am__append_5689) $(am__append_5694) \ +- $(am__append_5699) $(am__append_5704) $(am__append_5709) \ +- $(am__append_5714) $(am__append_5719) $(am__append_5724) \ +- $(am__append_5729) $(am__append_5734) $(am__append_5739) \ +- $(am__append_5744) $(am__append_5749) $(am__append_5754) \ +- $(am__append_5759) $(am__append_5764) $(am__append_5769) \ +- $(am__append_5774) $(am__append_5779) $(am__append_5784) \ +- $(am__append_5789) $(am__append_5793) $(am__append_5796) \ ++ gcry_whirlpool.marker $(am__append_5592) $(am__append_5597) \ ++ $(am__append_5602) $(am__append_5607) $(am__append_5612) \ ++ $(am__append_5617) $(am__append_5622) $(am__append_5627) \ ++ $(am__append_5632) $(am__append_5637) $(am__append_5642) \ ++ $(am__append_5647) $(am__append_5652) $(am__append_5657) \ ++ $(am__append_5662) $(am__append_5667) $(am__append_5672) \ ++ $(am__append_5677) $(am__append_5682) $(am__append_5687) \ ++ $(am__append_5692) $(am__append_5697) $(am__append_5702) \ ++ $(am__append_5707) $(am__append_5712) $(am__append_5717) \ ++ $(am__append_5722) $(am__append_5727) $(am__append_5732) \ ++ $(am__append_5737) $(am__append_5742) $(am__append_5747) \ ++ $(am__append_5752) $(am__append_5757) $(am__append_5762) \ ++ $(am__append_5767) $(am__append_5772) $(am__append_5777) \ ++ $(am__append_5782) $(am__append_5786) $(am__append_5789) \ + gensyminfo.sh genmod.sh modinfo.sh gmodule.pl gdb_grub \ +- $(am__append_5798) symlist.h symlist.c kernel_syms.lst \ +- $(am__append_5830) fs.lst command.lst partmap.lst terminal.lst \ ++ $(am__append_5791) symlist.h symlist.c kernel_syms.lst \ ++ $(am__append_5823) fs.lst command.lst partmap.lst terminal.lst \ + fdt.lst parttool.lst video.lst crypto.lst config.log \ +- syminfo.lst moddep.lst $(MOD_FILES) $(am__append_5832) ++ syminfo.lst moddep.lst $(MOD_FILES) $(am__append_5825) + BUILT_SOURCES = $(nodist_disk_module_SOURCES) \ + $(nodist_trig_module_SOURCES) $(am__append_6) $(am__append_13) \ + $(am__append_20) $(am__append_27) $(am__append_34) \ +@@ -17329,42 +17305,41 @@ BUILT_SOURCES = $(nodist_disk_module_SOURCES) \ + $(am__append_2043) $(am__append_2050) $(am__append_2057) \ + $(am__append_2064) $(am__append_2071) $(am__append_2078) \ + $(am__append_2085) $(am__append_2092) $(am__append_2099) \ +- $(am__append_2106) $(nodist_help_module_SOURCES) \ +- $(nodist_hexdump_module_SOURCES) \ +- $(nodist_keystatus_module_SOURCES) $(am__append_2113) \ +- $(am__append_2120) $(nodist_loadenv_module_SOURCES) \ ++ $(nodist_help_module_SOURCES) $(nodist_hexdump_module_SOURCES) \ ++ $(nodist_keystatus_module_SOURCES) $(am__append_2106) \ ++ $(am__append_2113) $(nodist_loadenv_module_SOURCES) \ + $(nodist_ls_module_SOURCES) $(nodist_lsmmap_module_SOURCES) \ +- $(am__append_2127) $(am__append_2134) $(am__append_2141) \ +- $(am__append_2148) $(am__append_2155) $(am__append_2162) \ +- $(am__append_2169) $(am__append_2176) \ ++ $(am__append_2120) $(am__append_2127) $(am__append_2134) \ ++ $(am__append_2141) $(am__append_2148) $(am__append_2155) \ ++ $(am__append_2162) $(am__append_2169) \ + $(nodist_memrw_module_SOURCES) \ + $(nodist_minicmd_module_SOURCES) \ + $(nodist_parttool_module_SOURCES) \ + $(nodist_password_module_SOURCES) \ +- $(nodist_password_pbkdf2_module_SOURCES) $(am__append_2183) \ +- $(am__append_2190) $(am__append_2197) $(am__append_2204) \ +- $(am__append_2211) $(am__append_2218) $(am__append_2225) \ +- $(am__append_2232) $(am__append_2239) $(am__append_2246) \ +- $(am__append_2253) $(am__append_2260) $(am__append_2267) \ +- $(am__append_2274) $(am__append_2281) $(am__append_2288) \ +- $(am__append_2295) $(am__append_2302) $(am__append_2309) \ +- $(am__append_2316) $(am__append_2323) \ ++ $(nodist_password_pbkdf2_module_SOURCES) $(am__append_2176) \ ++ $(am__append_2183) $(am__append_2190) $(am__append_2197) \ ++ $(am__append_2204) $(am__append_2211) $(am__append_2218) \ ++ $(am__append_2225) $(am__append_2232) $(am__append_2239) \ ++ $(am__append_2246) $(am__append_2253) $(am__append_2260) \ ++ $(am__append_2267) $(am__append_2274) $(am__append_2281) \ ++ $(am__append_2288) $(am__append_2295) $(am__append_2302) \ ++ $(am__append_2309) $(am__append_2316) \ + $(nodist_probe_module_SOURCES) $(nodist_read_module_SOURCES) \ + $(nodist_search_module_SOURCES) \ + $(nodist_search_fs_file_module_SOURCES) \ + $(nodist_search_fs_uuid_module_SOURCES) \ +- $(nodist_search_label_module_SOURCES) $(am__append_2330) \ +- $(am__append_2337) $(am__append_2344) $(am__append_2351) \ +- $(am__append_2358) $(am__append_2365) $(am__append_2372) \ +- $(am__append_2379) $(am__append_2386) $(am__append_2393) \ +- $(am__append_2400) $(am__append_2407) $(am__append_2414) \ +- $(am__append_2421) $(am__append_2428) $(am__append_2435) \ +- $(nodist_sleep_module_SOURCES) $(am__append_2442) \ +- $(am__append_2449) $(nodist_terminal_module_SOURCES) \ ++ $(nodist_search_label_module_SOURCES) $(am__append_2323) \ ++ $(am__append_2330) $(am__append_2337) $(am__append_2344) \ ++ $(am__append_2351) $(am__append_2358) $(am__append_2365) \ ++ $(am__append_2372) $(am__append_2379) $(am__append_2386) \ ++ $(am__append_2393) $(am__append_2400) $(am__append_2407) \ ++ $(am__append_2414) $(am__append_2421) $(am__append_2428) \ ++ $(nodist_sleep_module_SOURCES) $(am__append_2435) \ ++ $(am__append_2442) $(nodist_terminal_module_SOURCES) \ + $(nodist_test_module_SOURCES) $(nodist_true_module_SOURCES) \ +- $(am__append_2456) $(am__append_2463) $(am__append_2470) \ +- $(am__append_2477) $(am__append_2484) $(am__append_2491) \ +- $(am__append_2498) $(am__append_2505) $(am__append_2512) \ ++ $(am__append_2449) $(am__append_2456) $(am__append_2463) \ ++ $(am__append_2470) $(am__append_2477) $(am__append_2484) \ ++ $(am__append_2491) $(am__append_2498) $(am__append_2505) \ + $(nodist_videoinfo_module_SOURCES) \ + $(nodist_videotest_module_SOURCES) \ + $(nodist_xnu_uuid_module_SOURCES) \ +@@ -17380,27 +17355,27 @@ BUILT_SOURCES = $(nodist_disk_module_SOURCES) \ + $(nodist_raid5rec_module_SOURCES) \ + $(nodist_raid6rec_module_SOURCES) \ + $(nodist_scsi_module_SOURCES) $(nodist_memdisk_module_SOURCES) \ +- $(am__append_2519) $(am__append_2526) $(am__append_2533) \ +- $(am__append_2540) $(am__append_2547) $(am__append_2554) \ +- $(am__append_2561) $(am__append_2568) $(am__append_2575) \ +- $(am__append_2582) $(am__append_2589) $(am__append_2596) \ +- $(am__append_2603) $(am__append_2610) $(am__append_2617) \ +- $(am__append_2624) $(am__append_2631) $(am__append_2638) \ +- $(am__append_2645) $(am__append_2652) $(am__append_2659) \ +- $(am__append_2666) $(am__append_2673) $(am__append_2680) \ +- $(am__append_2687) $(am__append_2694) $(am__append_2701) \ +- $(am__append_2708) $(am__append_2715) $(am__append_2722) \ +- $(am__append_2729) $(am__append_2736) $(am__append_2743) \ +- $(am__append_2750) $(am__append_2757) $(am__append_2764) \ +- $(am__append_2771) $(am__append_2778) $(am__append_2785) \ +- $(am__append_2792) $(am__append_2799) $(am__append_2806) \ +- $(am__append_2813) $(am__append_2820) $(am__append_2827) \ +- $(am__append_2834) $(am__append_2841) $(am__append_2848) \ +- $(am__append_2855) $(am__append_2862) $(am__append_2869) \ +- $(am__append_2876) $(am__append_2883) $(am__append_2890) \ +- $(am__append_2897) $(am__append_2904) $(am__append_2911) \ +- $(am__append_2918) $(am__append_2925) $(am__append_2932) \ +- $(am__append_2939) $(nodist_procfs_module_SOURCES) \ ++ $(am__append_2512) $(am__append_2519) $(am__append_2526) \ ++ $(am__append_2533) $(am__append_2540) $(am__append_2547) \ ++ $(am__append_2554) $(am__append_2561) $(am__append_2568) \ ++ $(am__append_2575) $(am__append_2582) $(am__append_2589) \ ++ $(am__append_2596) $(am__append_2603) $(am__append_2610) \ ++ $(am__append_2617) $(am__append_2624) $(am__append_2631) \ ++ $(am__append_2638) $(am__append_2645) $(am__append_2652) \ ++ $(am__append_2659) $(am__append_2666) $(am__append_2673) \ ++ $(am__append_2680) $(am__append_2687) $(am__append_2694) \ ++ $(am__append_2701) $(am__append_2708) $(am__append_2715) \ ++ $(am__append_2722) $(am__append_2729) $(am__append_2736) \ ++ $(am__append_2743) $(am__append_2750) $(am__append_2757) \ ++ $(am__append_2764) $(am__append_2771) $(am__append_2778) \ ++ $(am__append_2785) $(am__append_2792) $(am__append_2799) \ ++ $(am__append_2806) $(am__append_2813) $(am__append_2820) \ ++ $(am__append_2827) $(am__append_2834) $(am__append_2841) \ ++ $(am__append_2848) $(am__append_2855) $(am__append_2862) \ ++ $(am__append_2869) $(am__append_2876) $(am__append_2883) \ ++ $(am__append_2890) $(am__append_2897) $(am__append_2904) \ ++ $(am__append_2911) $(am__append_2918) $(am__append_2925) \ ++ $(am__append_2932) $(nodist_procfs_module_SOURCES) \ + $(nodist_affs_module_SOURCES) $(nodist_afs_module_SOURCES) \ + $(nodist_bfs_module_SOURCES) $(nodist_zstd_module_SOURCES) \ + $(nodist_btrfs_module_SOURCES) \ +@@ -17428,69 +17403,69 @@ BUILT_SOURCES = $(nodist_disk_module_SOURCES) \ + $(nodist_xfs_module_SOURCES) $(nodist_zfs_module_SOURCES) \ + $(nodist_zfscrypt_module_SOURCES) \ + $(nodist_zfsinfo_module_SOURCES) \ +- $(nodist_macbless_module_SOURCES) $(am__append_2946) \ ++ $(nodist_macbless_module_SOURCES) $(am__append_2939) \ + $(nodist_gettext_module_SOURCES) \ + $(nodist_gfxmenu_module_SOURCES) \ + $(nodist_hello_module_SOURCES) $(nodist_gzio_module_SOURCES) \ +- $(nodist_offsetio_module_SOURCES) $(am__append_2953) \ +- $(am__append_2960) $(am__append_2967) $(am__append_2974) \ +- $(am__append_2981) $(am__append_2988) $(am__append_2995) \ +- $(am__append_3002) $(am__append_3009) $(am__append_3016) \ +- $(am__append_3023) $(am__append_3030) $(am__append_3037) \ +- $(am__append_3044) $(am__append_3051) $(am__append_3058) \ +- $(am__append_3065) $(am__append_3072) $(am__append_3079) \ +- $(am__append_3086) $(nodist_elf_module_SOURCES) \ ++ $(nodist_offsetio_module_SOURCES) $(am__append_2946) \ ++ $(am__append_2953) $(am__append_2960) $(am__append_2967) \ ++ $(am__append_2974) $(am__append_2981) $(am__append_2988) \ ++ $(am__append_2995) $(am__append_3002) $(am__append_3009) \ ++ $(am__append_3016) $(am__append_3023) $(am__append_3030) \ ++ $(am__append_3037) $(am__append_3044) $(am__append_3051) \ ++ $(am__append_3058) $(am__append_3065) $(am__append_3072) \ ++ $(am__append_3079) $(nodist_elf_module_SOURCES) \ + $(nodist_crypto_module_SOURCES) \ +- $(nodist_pbkdf2_module_SOURCES) $(am__append_3093) \ +- $(am__append_3100) $(am__append_3107) $(am__append_3114) \ +- $(am__append_3121) $(am__append_3128) $(am__append_3135) \ +- $(am__append_3142) $(am__append_3149) $(am__append_3156) \ +- $(am__append_3163) $(am__append_3170) $(am__append_3177) \ +- $(am__append_3184) $(am__append_3191) $(am__append_3198) \ +- $(am__append_3205) $(am__append_3212) $(am__append_3219) \ +- $(am__append_3226) $(am__append_3233) $(am__append_3240) \ +- $(am__append_3247) $(am__append_3254) $(am__append_3261) \ +- $(am__append_3268) $(am__append_3275) $(am__append_3282) \ +- $(am__append_3289) $(am__append_3296) $(am__append_3303) \ +- $(am__append_3310) $(am__append_3317) $(am__append_3324) \ +- $(am__append_3331) $(am__append_3338) \ +- $(nodist_setjmp_module_SOURCES) $(am__append_3345) \ +- $(am__append_3352) $(am__append_3359) $(am__append_3366) \ +- $(am__append_3373) $(am__append_3380) $(am__append_3387) \ +- $(am__append_3394) $(am__append_3401) $(am__append_3408) \ +- $(am__append_3415) $(am__append_3422) $(am__append_3429) \ +- $(am__append_3436) $(am__append_3443) $(am__append_3450) \ +- $(am__append_3457) $(am__append_3464) $(am__append_3471) \ +- $(am__append_3478) $(am__append_3485) $(am__append_3492) \ +- $(am__append_3499) $(am__append_3506) $(am__append_3513) \ +- $(am__append_3520) $(am__append_3527) $(am__append_3534) \ +- $(am__append_3541) $(am__append_3548) $(am__append_3555) \ +- $(am__append_3562) $(am__append_3569) $(am__append_3576) \ +- $(am__append_3583) $(am__append_3590) $(am__append_3597) \ +- $(am__append_3604) $(am__append_3611) $(am__append_3618) \ +- $(am__append_3625) $(am__append_3632) $(am__append_3639) \ +- $(am__append_3646) $(am__append_3653) $(am__append_3660) \ +- $(am__append_3667) $(am__append_3674) $(am__append_3681) \ +- $(am__append_3688) $(am__append_3695) $(am__append_3702) \ +- $(am__append_3709) $(am__append_3716) $(am__append_3723) \ +- $(am__append_3730) $(am__append_3737) $(am__append_3744) \ +- $(am__append_3751) $(am__append_3758) $(am__append_3765) \ +- $(am__append_3772) $(am__append_3779) $(am__append_3786) \ +- $(am__append_3793) $(am__append_3800) $(am__append_3807) \ +- $(am__append_3814) $(am__append_3821) $(am__append_3828) \ +- $(am__append_3835) $(am__append_3842) $(am__append_3849) \ +- $(am__append_3856) $(am__append_3863) $(am__append_3870) \ +- $(am__append_3877) $(am__append_3884) \ +- $(nodist_macho_module_SOURCES) $(am__append_3891) \ +- $(am__append_3898) $(am__append_3905) $(am__append_3912) \ +- $(am__append_3919) $(am__append_3926) $(am__append_3933) \ +- $(am__append_3940) $(am__append_3947) $(am__append_3954) \ +- $(am__append_3961) $(am__append_3968) $(am__append_3975) \ +- $(am__append_3982) $(am__append_3989) $(am__append_3996) \ +- $(am__append_4003) $(am__append_4010) $(am__append_4017) \ +- $(am__append_4024) $(am__append_4031) $(am__append_4038) \ +- $(am__append_4045) $(am__append_4052) $(am__append_4059) \ +- $(am__append_4066) $(am__append_4073) \ ++ $(nodist_pbkdf2_module_SOURCES) $(am__append_3086) \ ++ $(am__append_3093) $(am__append_3100) $(am__append_3107) \ ++ $(am__append_3114) $(am__append_3121) $(am__append_3128) \ ++ $(am__append_3135) $(am__append_3142) $(am__append_3149) \ ++ $(am__append_3156) $(am__append_3163) $(am__append_3170) \ ++ $(am__append_3177) $(am__append_3184) $(am__append_3191) \ ++ $(am__append_3198) $(am__append_3205) $(am__append_3212) \ ++ $(am__append_3219) $(am__append_3226) $(am__append_3233) \ ++ $(am__append_3240) $(am__append_3247) $(am__append_3254) \ ++ $(am__append_3261) $(am__append_3268) $(am__append_3275) \ ++ $(am__append_3282) $(am__append_3289) $(am__append_3296) \ ++ $(am__append_3303) $(am__append_3310) $(am__append_3317) \ ++ $(am__append_3324) $(am__append_3331) \ ++ $(nodist_setjmp_module_SOURCES) $(am__append_3338) \ ++ $(am__append_3345) $(am__append_3352) $(am__append_3359) \ ++ $(am__append_3366) $(am__append_3373) $(am__append_3380) \ ++ $(am__append_3387) $(am__append_3394) $(am__append_3401) \ ++ $(am__append_3408) $(am__append_3415) $(am__append_3422) \ ++ $(am__append_3429) $(am__append_3436) $(am__append_3443) \ ++ $(am__append_3450) $(am__append_3457) $(am__append_3464) \ ++ $(am__append_3471) $(am__append_3478) $(am__append_3485) \ ++ $(am__append_3492) $(am__append_3499) $(am__append_3506) \ ++ $(am__append_3513) $(am__append_3520) $(am__append_3527) \ ++ $(am__append_3534) $(am__append_3541) $(am__append_3548) \ ++ $(am__append_3555) $(am__append_3562) $(am__append_3569) \ ++ $(am__append_3576) $(am__append_3583) $(am__append_3590) \ ++ $(am__append_3597) $(am__append_3604) $(am__append_3611) \ ++ $(am__append_3618) $(am__append_3625) $(am__append_3632) \ ++ $(am__append_3639) $(am__append_3646) $(am__append_3653) \ ++ $(am__append_3660) $(am__append_3667) $(am__append_3674) \ ++ $(am__append_3681) $(am__append_3688) $(am__append_3695) \ ++ $(am__append_3702) $(am__append_3709) $(am__append_3716) \ ++ $(am__append_3723) $(am__append_3730) $(am__append_3737) \ ++ $(am__append_3744) $(am__append_3751) $(am__append_3758) \ ++ $(am__append_3765) $(am__append_3772) $(am__append_3779) \ ++ $(am__append_3786) $(am__append_3793) $(am__append_3800) \ ++ $(am__append_3807) $(am__append_3814) $(am__append_3821) \ ++ $(am__append_3828) $(am__append_3835) $(am__append_3842) \ ++ $(am__append_3849) $(am__append_3856) $(am__append_3863) \ ++ $(am__append_3870) $(am__append_3877) \ ++ $(nodist_macho_module_SOURCES) $(am__append_3884) \ ++ $(am__append_3891) $(am__append_3898) $(am__append_3905) \ ++ $(am__append_3912) $(am__append_3919) $(am__append_3926) \ ++ $(am__append_3933) $(am__append_3940) $(am__append_3947) \ ++ $(am__append_3954) $(am__append_3961) $(am__append_3968) \ ++ $(am__append_3975) $(am__append_3982) $(am__append_3989) \ ++ $(am__append_3996) $(am__append_4003) $(am__append_4010) \ ++ $(am__append_4017) $(am__append_4024) $(am__append_4031) \ ++ $(am__append_4038) $(am__append_4045) $(am__append_4052) \ ++ $(am__append_4059) $(am__append_4066) \ + $(nodist_normal_module_SOURCES) \ + $(nodist_part_acorn_module_SOURCES) \ + $(nodist_part_amiga_module_SOURCES) \ +@@ -17503,35 +17478,35 @@ BUILT_SOURCES = $(nodist_disk_module_SOURCES) \ + $(nodist_part_bsd_module_SOURCES) \ + $(nodist_part_sunpc_module_SOURCES) \ + $(nodist_part_dfly_module_SOURCES) \ +- $(nodist_msdospart_module_SOURCES) $(am__append_4080) \ +- $(am__append_4087) $(am__append_4094) $(am__append_4101) \ +- $(am__append_4108) $(am__append_4115) $(am__append_4122) \ +- $(am__append_4129) $(am__append_4136) $(am__append_4143) \ +- $(am__append_4150) $(am__append_4157) $(am__append_4164) \ +- $(am__append_4171) $(am__append_4178) $(am__append_4185) \ +- $(am__append_4192) $(am__append_4199) $(am__append_4206) \ +- $(am__append_4213) $(am__append_4220) $(am__append_4227) \ +- $(am__append_4234) $(am__append_4241) $(am__append_4248) \ +- $(am__append_4255) $(am__append_4262) \ +- $(nodist_gfxterm_background_module_SOURCES) $(am__append_4269) \ +- $(am__append_4276) $(am__append_4283) $(am__append_4290) \ +- $(am__append_4297) $(am__append_4304) $(am__append_4311) \ +- $(am__append_4318) $(am__append_4325) $(am__append_4332) \ +- $(am__append_4339) $(am__append_4346) $(am__append_4353) \ +- $(am__append_4360) $(am__append_4367) $(am__append_4374) \ +- $(am__append_4381) $(am__append_4388) $(am__append_4395) \ +- $(am__append_4402) $(am__append_4409) $(am__append_4416) \ +- $(am__append_4423) $(am__append_4430) $(am__append_4437) \ +- $(am__append_4444) $(am__append_4451) $(am__append_4458) \ +- $(am__append_4465) $(am__append_4472) $(am__append_4479) \ +- $(am__append_4486) $(am__append_4493) $(am__append_4500) \ +- $(am__append_4507) $(am__append_4514) $(am__append_4521) \ +- $(am__append_4528) $(am__append_4535) $(am__append_4542) \ +- $(am__append_4549) $(am__append_4556) $(am__append_4563) \ +- $(am__append_4570) $(am__append_4577) $(am__append_4584) \ +- $(am__append_4591) $(am__append_4598) $(am__append_4605) \ +- $(am__append_4612) $(am__append_4619) $(am__append_4626) \ +- $(am__append_4633) $(am__append_4640) $(am__append_4647) \ ++ $(nodist_msdospart_module_SOURCES) $(am__append_4073) \ ++ $(am__append_4080) $(am__append_4087) $(am__append_4094) \ ++ $(am__append_4101) $(am__append_4108) $(am__append_4115) \ ++ $(am__append_4122) $(am__append_4129) $(am__append_4136) \ ++ $(am__append_4143) $(am__append_4150) $(am__append_4157) \ ++ $(am__append_4164) $(am__append_4171) $(am__append_4178) \ ++ $(am__append_4185) $(am__append_4192) $(am__append_4199) \ ++ $(am__append_4206) $(am__append_4213) $(am__append_4220) \ ++ $(am__append_4227) $(am__append_4234) $(am__append_4241) \ ++ $(am__append_4248) $(am__append_4255) \ ++ $(nodist_gfxterm_background_module_SOURCES) $(am__append_4262) \ ++ $(am__append_4269) $(am__append_4276) $(am__append_4283) \ ++ $(am__append_4290) $(am__append_4297) $(am__append_4304) \ ++ $(am__append_4311) $(am__append_4318) $(am__append_4325) \ ++ $(am__append_4332) $(am__append_4339) $(am__append_4346) \ ++ $(am__append_4353) $(am__append_4360) $(am__append_4367) \ ++ $(am__append_4374) $(am__append_4381) $(am__append_4388) \ ++ $(am__append_4395) $(am__append_4402) $(am__append_4409) \ ++ $(am__append_4416) $(am__append_4423) $(am__append_4430) \ ++ $(am__append_4437) $(am__append_4444) $(am__append_4451) \ ++ $(am__append_4458) $(am__append_4465) $(am__append_4472) \ ++ $(am__append_4479) $(am__append_4486) $(am__append_4493) \ ++ $(am__append_4500) $(am__append_4507) $(am__append_4514) \ ++ $(am__append_4521) $(am__append_4528) $(am__append_4535) \ ++ $(am__append_4542) $(am__append_4549) $(am__append_4556) \ ++ $(am__append_4563) $(am__append_4570) $(am__append_4577) \ ++ $(am__append_4584) $(am__append_4591) $(am__append_4598) \ ++ $(am__append_4605) $(am__append_4612) $(am__append_4619) \ ++ $(am__append_4626) $(am__append_4633) $(am__append_4640) \ + $(nodist_functional_test_module_SOURCES) \ + $(nodist_exfctest_module_SOURCES) \ + $(nodist_strtoull_test_module_SOURCES) \ +@@ -17539,15 +17514,15 @@ BUILT_SOURCES = $(nodist_disk_module_SOURCES) \ + $(nodist_signature_test_module_SOURCES) \ + $(nodist_sleep_test_module_SOURCES) \ + $(nodist_xnu_uuid_test_module_SOURCES) \ +- $(nodist_pbkdf2_test_module_SOURCES) $(am__append_4654) \ +- $(am__append_4661) $(am__append_4668) $(am__append_4675) \ +- $(am__append_4682) $(am__append_4689) $(am__append_4696) \ +- $(am__append_4703) $(am__append_4710) $(am__append_4717) \ +- $(am__append_4724) $(am__append_4731) $(am__append_4738) \ +- $(am__append_4745) $(am__append_4752) $(am__append_4759) \ +- $(am__append_4766) $(am__append_4773) $(am__append_4780) \ +- $(am__append_4787) $(am__append_4794) $(am__append_4801) \ +- $(am__append_4808) $(am__append_4815) $(am__append_4822) \ ++ $(nodist_pbkdf2_test_module_SOURCES) $(am__append_4647) \ ++ $(am__append_4654) $(am__append_4661) $(am__append_4668) \ ++ $(am__append_4675) $(am__append_4682) $(am__append_4689) \ ++ $(am__append_4696) $(am__append_4703) $(am__append_4710) \ ++ $(am__append_4717) $(am__append_4724) $(am__append_4731) \ ++ $(am__append_4738) $(am__append_4745) $(am__append_4752) \ ++ $(am__append_4759) $(am__append_4766) $(am__append_4773) \ ++ $(am__append_4780) $(am__append_4787) $(am__append_4794) \ ++ $(am__append_4801) $(am__append_4808) $(am__append_4815) \ + $(nodist_div_test_module_SOURCES) \ + $(nodist_mul_test_module_SOURCES) \ + $(nodist_shift_test_module_SOURCES) \ +@@ -17558,59 +17533,59 @@ BUILT_SOURCES = $(nodist_disk_module_SOURCES) \ + $(nodist_gfxterm_menu_module_SOURCES) \ + $(nodist_cmdline_cat_test_module_SOURCES) \ + $(nodist_bitmap_module_SOURCES) \ +- $(nodist_bitmap_scale_module_SOURCES) $(am__append_4829) \ +- $(am__append_4836) $(am__append_4843) $(am__append_4850) \ +- $(am__append_4857) $(am__append_4864) $(am__append_4871) \ +- $(am__append_4878) $(am__append_4885) \ ++ $(nodist_bitmap_scale_module_SOURCES) $(am__append_4822) \ ++ $(am__append_4829) $(am__append_4836) $(am__append_4843) \ ++ $(am__append_4850) $(am__append_4857) $(am__append_4864) \ ++ $(am__append_4871) $(am__append_4878) \ + $(nodist_jpeg_module_SOURCES) $(nodist_png_module_SOURCES) \ +- $(nodist_tga_module_SOURCES) $(am__append_4892) \ +- $(am__append_4899) $(am__append_4906) $(am__append_4913) \ +- $(am__append_4920) $(am__append_4927) $(am__append_4934) \ +- $(am__append_4941) $(am__append_4948) $(am__append_4955) \ +- $(am__append_4962) $(am__append_4969) $(am__append_4976) \ +- $(am__append_4983) $(am__append_4990) $(am__append_4997) \ +- $(am__append_5004) $(am__append_5011) $(am__append_5018) \ +- $(am__append_5025) $(am__append_5032) $(am__append_5039) \ +- $(am__append_5046) $(am__append_5053) $(am__append_5060) \ +- $(am__append_5067) $(am__append_5074) $(am__append_5081) \ +- $(am__append_5088) $(am__append_5095) $(am__append_5102) \ +- $(am__append_5109) $(am__append_5116) $(am__append_5123) \ +- $(am__append_5130) $(am__append_5137) $(am__append_5144) \ +- $(am__append_5151) $(am__append_5158) $(am__append_5165) \ +- $(am__append_5172) $(nodist_video_colors_module_SOURCES) \ +- $(am__append_5179) $(am__append_5186) \ ++ $(nodist_tga_module_SOURCES) $(am__append_4885) \ ++ $(am__append_4892) $(am__append_4899) $(am__append_4906) \ ++ $(am__append_4913) $(am__append_4920) $(am__append_4927) \ ++ $(am__append_4934) $(am__append_4941) $(am__append_4948) \ ++ $(am__append_4955) $(am__append_4962) $(am__append_4969) \ ++ $(am__append_4976) $(am__append_4983) $(am__append_4990) \ ++ $(am__append_4997) $(am__append_5004) $(am__append_5011) \ ++ $(am__append_5018) $(am__append_5025) $(am__append_5032) \ ++ $(am__append_5039) $(am__append_5046) $(am__append_5053) \ ++ $(am__append_5060) $(am__append_5067) $(am__append_5074) \ ++ $(am__append_5081) $(am__append_5088) $(am__append_5095) \ ++ $(am__append_5102) $(am__append_5109) $(am__append_5116) \ ++ $(am__append_5123) $(am__append_5130) $(am__append_5137) \ ++ $(am__append_5144) $(am__append_5151) $(am__append_5158) \ ++ $(am__append_5165) $(nodist_video_colors_module_SOURCES) \ ++ $(am__append_5172) $(am__append_5179) \ + $(nodist_datehook_module_SOURCES) $(nodist_net_module_SOURCES) \ + $(nodist_tftp_module_SOURCES) $(nodist_http_module_SOURCES) \ +- $(am__append_5193) $(am__append_5200) $(am__append_5207) \ +- $(am__append_5214) $(am__append_5221) $(am__append_5228) \ +- $(am__append_5235) $(am__append_5242) $(am__append_5249) \ +- $(am__append_5256) $(am__append_5263) $(am__append_5270) \ +- $(am__append_5277) $(am__append_5284) $(am__append_5291) \ +- $(am__append_5298) $(am__append_5305) $(am__append_5312) \ ++ $(am__append_5186) $(am__append_5193) $(am__append_5200) \ ++ $(am__append_5207) $(am__append_5214) $(am__append_5221) \ ++ $(am__append_5228) $(am__append_5235) $(am__append_5242) \ ++ $(am__append_5249) $(am__append_5256) $(am__append_5263) \ ++ $(am__append_5270) $(am__append_5277) $(am__append_5284) \ ++ $(am__append_5291) $(am__append_5298) $(am__append_5305) \ + $(nodist_syslinuxcfg_module_SOURCES) \ + $(nodist_test_blockarg_module_SOURCES) \ + $(nodist_xzio_module_SOURCES) $(nodist_lzopio_module_SOURCES) \ +- $(nodist_testload_module_SOURCES) $(am__append_5319) \ +- $(am__append_5326) $(am__append_5333) $(am__append_5340) \ +- $(am__append_5347) $(am__append_5354) $(am__append_5361) \ +- $(am__append_5368) $(am__append_5375) $(am__append_5382) \ +- $(am__append_5389) $(am__append_5396) $(am__append_5403) \ +- $(am__append_5410) $(am__append_5417) $(am__append_5424) \ +- $(am__append_5431) $(nodist_priority_queue_module_SOURCES) \ +- $(nodist_time_module_SOURCES) $(am__append_5438) \ +- $(am__append_5445) $(nodist_adler32_module_SOURCES) \ ++ $(nodist_testload_module_SOURCES) $(am__append_5312) \ ++ $(am__append_5319) $(am__append_5326) $(am__append_5333) \ ++ $(am__append_5340) $(am__append_5347) $(am__append_5354) \ ++ $(am__append_5361) $(am__append_5368) $(am__append_5375) \ ++ $(am__append_5382) $(am__append_5389) $(am__append_5396) \ ++ $(am__append_5403) $(am__append_5410) $(am__append_5417) \ ++ $(am__append_5424) $(nodist_priority_queue_module_SOURCES) \ ++ $(nodist_time_module_SOURCES) $(am__append_5431) \ ++ $(am__append_5438) $(nodist_adler32_module_SOURCES) \ + $(nodist_crc64_module_SOURCES) $(nodist_mpi_module_SOURCES) \ +- $(nodist_all_video_module_SOURCES) $(am__append_5452) \ +- $(am__append_5459) $(am__append_5466) $(am__append_5473) \ +- $(am__append_5480) $(am__append_5487) \ +- $(nodist_testspeed_module_SOURCES) $(am__append_5494) \ ++ $(nodist_all_video_module_SOURCES) $(am__append_5445) \ ++ $(am__append_5452) $(am__append_5459) $(am__append_5466) \ ++ $(am__append_5473) $(am__append_5480) \ ++ $(nodist_testspeed_module_SOURCES) $(am__append_5487) \ + $(nodist_tr_module_SOURCES) $(nodist_progress_module_SOURCES) \ +- $(nodist_file_module_SOURCES) $(am__append_5501) \ +- $(am__append_5508) $(am__append_5515) $(am__append_5522) \ +- $(am__append_5529) $(am__append_5536) $(am__append_5543) \ +- $(am__append_5550) $(am__append_5557) $(am__append_5564) \ +- $(am__append_5571) $(am__append_5578) $(am__append_5585) \ +- $(am__append_5592) $(nodist_gcry_arcfour_module_SOURCES) \ ++ $(nodist_file_module_SOURCES) $(am__append_5494) \ ++ $(am__append_5501) $(am__append_5508) $(am__append_5515) \ ++ $(am__append_5522) $(am__append_5529) $(am__append_5536) \ ++ $(am__append_5543) $(am__append_5550) $(am__append_5557) \ ++ $(am__append_5564) $(am__append_5571) $(am__append_5578) \ ++ $(am__append_5585) $(nodist_gcry_arcfour_module_SOURCES) \ + $(nodist_gcry_blowfish_module_SOURCES) \ + $(nodist_gcry_camellia_module_SOURCES) \ + $(nodist_gcry_cast5_module_SOURCES) \ +@@ -17631,20 +17606,20 @@ BUILT_SOURCES = $(nodist_disk_module_SOURCES) \ + $(nodist_gcry_sha512_module_SOURCES) \ + $(nodist_gcry_tiger_module_SOURCES) \ + $(nodist_gcry_twofish_module_SOURCES) \ +- $(nodist_gcry_whirlpool_module_SOURCES) $(am__append_5598) \ +- $(am__append_5603) $(am__append_5608) $(am__append_5613) \ +- $(am__append_5618) $(am__append_5623) $(am__append_5628) \ +- $(am__append_5633) $(am__append_5638) $(am__append_5643) \ +- $(am__append_5648) $(am__append_5653) $(am__append_5658) \ +- $(am__append_5663) $(am__append_5668) $(am__append_5673) \ +- $(am__append_5678) $(am__append_5683) $(am__append_5688) \ +- $(am__append_5693) $(am__append_5698) $(am__append_5703) \ +- $(am__append_5708) $(am__append_5713) $(am__append_5718) \ +- $(am__append_5723) $(am__append_5728) $(am__append_5733) \ +- $(am__append_5738) $(am__append_5743) $(am__append_5748) \ +- $(am__append_5753) $(am__append_5758) $(am__append_5763) \ +- $(am__append_5768) $(am__append_5773) $(am__append_5778) \ +- $(am__append_5783) $(am__append_5788) $(am__append_5795) \ ++ $(nodist_gcry_whirlpool_module_SOURCES) $(am__append_5591) \ ++ $(am__append_5596) $(am__append_5601) $(am__append_5606) \ ++ $(am__append_5611) $(am__append_5616) $(am__append_5621) \ ++ $(am__append_5626) $(am__append_5631) $(am__append_5636) \ ++ $(am__append_5641) $(am__append_5646) $(am__append_5651) \ ++ $(am__append_5656) $(am__append_5661) $(am__append_5666) \ ++ $(am__append_5671) $(am__append_5676) $(am__append_5681) \ ++ $(am__append_5686) $(am__append_5691) $(am__append_5696) \ ++ $(am__append_5701) $(am__append_5706) $(am__append_5711) \ ++ $(am__append_5716) $(am__append_5721) $(am__append_5726) \ ++ $(am__append_5731) $(am__append_5736) $(am__append_5741) \ ++ $(am__append_5746) $(am__append_5751) $(am__append_5756) \ ++ $(am__append_5761) $(am__append_5766) $(am__append_5771) \ ++ $(am__append_5776) $(am__append_5781) $(am__append_5788) \ + symlist.h symlist.c + MACHO2IMG = $(top_builddir)/grub-macho2img + AM_CFLAGS = $(TARGET_CFLAGS) +@@ -20083,14 +20058,6 @@ pgp_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) + pgp_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -I$(srcdir)/lib/posix_wrap + pgp_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) + pgp_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +-@COND_x86_64_efi_TRUE@shim_lock_module_SOURCES = commands/efi/shim_lock.c ## platform sources +-@COND_x86_64_efi_TRUE@nodist_shim_lock_module_SOURCES = ## platform nodist sources +-@COND_x86_64_efi_TRUE@shim_lock_module_LDADD = +-@COND_x86_64_efi_TRUE@shim_lock_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +-@COND_x86_64_efi_TRUE@shim_lock_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +-@COND_x86_64_efi_TRUE@shim_lock_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +-@COND_x86_64_efi_TRUE@shim_lock_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +-@COND_x86_64_efi_TRUE@shim_lock_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_i386_coreboot_TRUE@hdparm_module_SOURCES = commands/hdparm.c ## platform sources + @COND_i386_efi_TRUE@hdparm_module_SOURCES = commands/hdparm.c ## platform sources + @COND_i386_ieee1275_TRUE@hdparm_module_SOURCES = commands/hdparm.c ## platform sources +@@ -29924,13 +29891,6 @@ tests/shift_test_module-shift_test.$(OBJEXT): tests/$(am__dirstamp) \ + shift_test.module$(EXEEXT): $(shift_test_module_OBJECTS) $(shift_test_module_DEPENDENCIES) $(EXTRA_shift_test_module_DEPENDENCIES) + @rm -f shift_test.module$(EXEEXT) + $(AM_V_CCLD)$(shift_test_module_LINK) $(shift_test_module_OBJECTS) $(shift_test_module_LDADD) $(LIBS) +-commands/efi/shim_lock_module-shim_lock.$(OBJEXT): \ +- commands/efi/$(am__dirstamp) \ +- commands/efi/$(DEPDIR)/$(am__dirstamp) +- +-shim_lock.module$(EXEEXT): $(shim_lock_module_OBJECTS) $(shim_lock_module_DEPENDENCIES) $(EXTRA_shim_lock_module_DEPENDENCIES) +- @rm -f shim_lock.module$(EXEEXT) +- $(AM_V_CCLD)$(shim_lock_module_LINK) $(shim_lock_module_OBJECTS) $(shim_lock_module_LDADD) $(LIBS) + tests/signature_test_module-signature_test.$(OBJEXT): \ + tests/$(am__dirstamp) tests/$(DEPDIR)/$(am__dirstamp) + +@@ -30831,7 +30791,6 @@ distclean-compile: + @AMDEP_TRUE@@am__include@ @am__quote@commands/efi/$(DEPDIR)/lsefimmap_module-lsefimmap.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@commands/efi/$(DEPDIR)/lsefisystab_module-lsefisystab.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@commands/efi/$(DEPDIR)/lssal_module-lssal.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@commands/efi/$(DEPDIR)/shim_lock_module-shim_lock.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@commands/efi/$(DEPDIR)/tpm_module-tpm.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@commands/i386/$(DEPDIR)/cmosdump_module-cmosdump.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@commands/i386/$(DEPDIR)/cmostest_module-cmostest.Po@am__quote@ +@@ -40402,20 +40361,6 @@ tests/shift_test_module-shift_test.obj: tests/shift_test.c + @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ + @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(shift_test_module_CPPFLAGS) $(CPPFLAGS) $(shift_test_module_CFLAGS) $(CFLAGS) -c -o tests/shift_test_module-shift_test.obj `if test -f 'tests/shift_test.c'; then $(CYGPATH_W) 'tests/shift_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/shift_test.c'; fi` + +-commands/efi/shim_lock_module-shim_lock.o: commands/efi/shim_lock.c +-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(shim_lock_module_CPPFLAGS) $(CPPFLAGS) $(shim_lock_module_CFLAGS) $(CFLAGS) -MT commands/efi/shim_lock_module-shim_lock.o -MD -MP -MF commands/efi/$(DEPDIR)/shim_lock_module-shim_lock.Tpo -c -o commands/efi/shim_lock_module-shim_lock.o `test -f 'commands/efi/shim_lock.c' || echo '$(srcdir)/'`commands/efi/shim_lock.c +-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/efi/$(DEPDIR)/shim_lock_module-shim_lock.Tpo commands/efi/$(DEPDIR)/shim_lock_module-shim_lock.Po +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/efi/shim_lock.c' object='commands/efi/shim_lock_module-shim_lock.o' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(shim_lock_module_CPPFLAGS) $(CPPFLAGS) $(shim_lock_module_CFLAGS) $(CFLAGS) -c -o commands/efi/shim_lock_module-shim_lock.o `test -f 'commands/efi/shim_lock.c' || echo '$(srcdir)/'`commands/efi/shim_lock.c +- +-commands/efi/shim_lock_module-shim_lock.obj: commands/efi/shim_lock.c +-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(shim_lock_module_CPPFLAGS) $(CPPFLAGS) $(shim_lock_module_CFLAGS) $(CFLAGS) -MT commands/efi/shim_lock_module-shim_lock.obj -MD -MP -MF commands/efi/$(DEPDIR)/shim_lock_module-shim_lock.Tpo -c -o commands/efi/shim_lock_module-shim_lock.obj `if test -f 'commands/efi/shim_lock.c'; then $(CYGPATH_W) 'commands/efi/shim_lock.c'; else $(CYGPATH_W) '$(srcdir)/commands/efi/shim_lock.c'; fi` +-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/efi/$(DEPDIR)/shim_lock_module-shim_lock.Tpo commands/efi/$(DEPDIR)/shim_lock_module-shim_lock.Po +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/efi/shim_lock.c' object='commands/efi/shim_lock_module-shim_lock.obj' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(shim_lock_module_CPPFLAGS) $(CPPFLAGS) $(shim_lock_module_CFLAGS) $(CFLAGS) -c -o commands/efi/shim_lock_module-shim_lock.obj `if test -f 'commands/efi/shim_lock.c'; then $(CYGPATH_W) 'commands/efi/shim_lock.c'; else $(CYGPATH_W) '$(srcdir)/commands/efi/shim_lock.c'; fi` +- + tests/signature_test_module-signature_test.o: tests/signature_test.c + @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(signature_test_module_CPPFLAGS) $(CPPFLAGS) $(signature_test_module_CFLAGS) $(CFLAGS) -MT tests/signature_test_module-signature_test.o -MD -MP -MF tests/$(DEPDIR)/signature_test_module-signature_test.Tpo -c -o tests/signature_test_module-signature_test.o `test -f 'tests/signature_test.c' || echo '$(srcdir)/'`tests/signature_test.c + @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/signature_test_module-signature_test.Tpo tests/$(DEPDIR)/signature_test_module-signature_test.Po +@@ -43738,10 +43683,6 @@ pgp.marker: $(pgp_module_SOURCES) $(nodist_pgp_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pgp_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +-@COND_x86_64_efi_TRUE@shim_lock.marker: $(shim_lock_module_SOURCES) $(nodist_shim_lock_module_SOURCES) +-@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(shim_lock_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +-@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new +- + @COND_i386_pc_TRUE@hdparm.marker: $(hdparm_module_SOURCES) $(nodist_hdparm_module_SOURCES) + @COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + @COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new +diff --git a/grub-core/commands/efi/shim_lock.c b/grub-core/commands/efi/shim_lock.c +deleted file mode 100644 +index d8f52d7..0000000 +--- a/grub-core/commands/efi/shim_lock.c ++++ /dev/null +@@ -1,130 +0,0 @@ +-/* +- * GRUB -- GRand Unified Bootloader +- * Copyright (C) 2017 Free Software Foundation, Inc. +- * +- * GRUB 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 3 of the License, or +- * (at your option) any later version. +- * +- * GRUB 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 GRUB. If not, see . +- * +- * EFI shim lock verifier. +- */ +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-GRUB_MOD_LICENSE ("GPLv3+"); +- +-static grub_efi_guid_t shim_lock_guid = GRUB_EFI_SHIM_LOCK_GUID; +-static grub_efi_shim_lock_protocol_t *sl; +- +-/* List of modules which cannot be loaded if UEFI secure boot mode is enabled. */ +-static const char * const disabled_mods[] = {"iorw", "memrw", "wrmsr", NULL}; +- +-static grub_err_t +-shim_lock_init (grub_file_t io, enum grub_file_type type, +- void **context __attribute__ ((unused)), +- enum grub_verify_flags *flags) +-{ +- const char *b, *e; +- int i; +- +- *flags = GRUB_VERIFY_FLAGS_SKIP_VERIFICATION; +- +- if (!sl) +- return GRUB_ERR_NONE; +- +- switch (type & GRUB_FILE_TYPE_MASK) +- { +- case GRUB_FILE_TYPE_GRUB_MODULE: +- /* Establish GRUB module name. */ +- b = grub_strrchr (io->name, '/'); +- e = grub_strrchr (io->name, '.'); +- +- b = b ? (b + 1) : io->name; +- e = e ? e : io->name + grub_strlen (io->name); +- e = (e > b) ? e : io->name + grub_strlen (io->name); +- +- for (i = 0; disabled_mods[i]; i++) +- if (!grub_strncmp (b, disabled_mods[i], grub_strlen (b) - grub_strlen (e))) +- { +- grub_error (GRUB_ERR_ACCESS_DENIED, +- N_("module cannot be loaded in UEFI secure boot mode: %s"), +- io->name); +- return GRUB_ERR_ACCESS_DENIED; +- } +- +- /* Fall through. */ +- +- case GRUB_FILE_TYPE_ACPI_TABLE: +- case GRUB_FILE_TYPE_DEVICE_TREE_IMAGE: +- *flags = GRUB_VERIFY_FLAGS_DEFER_AUTH; +- +- return GRUB_ERR_NONE; +- +- case GRUB_FILE_TYPE_LINUX_KERNEL: +- case GRUB_FILE_TYPE_MULTIBOOT_KERNEL: +- case GRUB_FILE_TYPE_BSD_KERNEL: +- case GRUB_FILE_TYPE_XNU_KERNEL: +- case GRUB_FILE_TYPE_PLAN9_KERNEL: +- for (i = 0; disabled_mods[i]; i++) +- if (grub_dl_get (disabled_mods[i])) +- { +- grub_error (GRUB_ERR_ACCESS_DENIED, +- N_("cannot boot due to dangerous module in memory: %s"), +- disabled_mods[i]); +- return GRUB_ERR_ACCESS_DENIED; +- } +- +- *flags = GRUB_VERIFY_FLAGS_SINGLE_CHUNK; +- +- /* Fall through. */ +- +- default: +- return GRUB_ERR_NONE; +- } +-} +- +-static grub_err_t +-shim_lock_write (void *context __attribute__ ((unused)), void *buf, grub_size_t size) +-{ +- if (sl->verify (buf, size) != GRUB_EFI_SUCCESS) +- return grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad shim signature")); +- +- return GRUB_ERR_NONE; +-} +- +-struct grub_file_verifier shim_lock = +- { +- .name = "shim_lock", +- .init = shim_lock_init, +- .write = shim_lock_write +- }; +- +-GRUB_MOD_INIT(shim_lock) +-{ +- sl = grub_efi_locate_protocol (&shim_lock_guid, 0); +- grub_verifier_register (&shim_lock); +- +- if (!sl) +- return; +- +- grub_dl_set_persistent (mod); +-} +- +-GRUB_MOD_FINI(shim_lock) +-{ +- grub_verifier_unregister (&shim_lock); +-} +diff --git a/grub-core/kern/efi/init.c b/grub-core/kern/efi/init.c +index 2c31847..b683bec 100644 +--- a/grub-core/kern/efi/init.c ++++ b/grub-core/kern/efi/init.c +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -39,6 +40,9 @@ grub_efi_init (void) + /* Initialize the memory management system. */ + grub_efi_mm_init (); + ++ /* Register the shim_lock verifier if UEFI Secure Boot is enabled. */ ++ grub_shim_lock_verifier_setup (); ++ + efi_call_4 (grub_efi_system_table->boot_services->set_watchdog_timer, + 0, 0, 0, NULL); + +diff --git a/grub-core/kern/efi/sb.c b/grub-core/kern/efi/sb.c +index 19658d9..ce3b7f6 100644 +--- a/grub-core/kern/efi/sb.c ++++ b/grub-core/kern/efi/sb.c +@@ -22,9 +22,16 @@ + #include + #include + #include ++#include + #include + #include + #include ++#include ++ ++static grub_efi_guid_t shim_lock_guid = GRUB_EFI_SHIM_LOCK_GUID; ++ ++/* List of modules which cannot be loaded if UEFI secure boot mode is enabled. */ ++static const char * const disabled_mods[] = {"iorw", "memrw", NULL}; + + /* + * Determine whether we're in secure boot mode. +@@ -107,3 +114,101 @@ grub_efi_get_secureboot (void) + + return secureboot; + } ++ ++static grub_err_t ++shim_lock_verifier_init (grub_file_t io __attribute__ ((unused)), ++ enum grub_file_type type, ++ void **context __attribute__ ((unused)), ++ enum grub_verify_flags *flags) ++{ ++ const char *b, *e; ++ int i; ++ ++ *flags = GRUB_VERIFY_FLAGS_SKIP_VERIFICATION; ++ ++ switch (type & GRUB_FILE_TYPE_MASK) ++ { ++ case GRUB_FILE_TYPE_GRUB_MODULE: ++ /* Establish GRUB module name. */ ++ b = grub_strrchr (io->name, '/'); ++ e = grub_strrchr (io->name, '.'); ++ ++ b = b ? (b + 1) : io->name; ++ e = e ? e : io->name + grub_strlen (io->name); ++ e = (e > b) ? e : io->name + grub_strlen (io->name); ++ ++ for (i = 0; disabled_mods[i]; i++) ++ if (!grub_strncmp (b, disabled_mods[i], grub_strlen (b) - grub_strlen (e))) ++ { ++ grub_error (GRUB_ERR_ACCESS_DENIED, ++ N_("module cannot be loaded in UEFI secure boot mode: %s"), ++ io->name); ++ return GRUB_ERR_ACCESS_DENIED; ++ } ++ ++ /* Fall through. */ ++ ++ case GRUB_FILE_TYPE_ACPI_TABLE: ++ case GRUB_FILE_TYPE_DEVICE_TREE_IMAGE: ++ *flags = GRUB_VERIFY_FLAGS_DEFER_AUTH; ++ ++ return GRUB_ERR_NONE; ++ ++ case GRUB_FILE_TYPE_LINUX_KERNEL: ++ case GRUB_FILE_TYPE_MULTIBOOT_KERNEL: ++ case GRUB_FILE_TYPE_BSD_KERNEL: ++ case GRUB_FILE_TYPE_XNU_KERNEL: ++ case GRUB_FILE_TYPE_PLAN9_KERNEL: ++ for (i = 0; disabled_mods[i]; i++) ++ if (grub_dl_get (disabled_mods[i])) ++ { ++ grub_error (GRUB_ERR_ACCESS_DENIED, ++ N_("cannot boot due to dangerous module in memory: %s"), ++ disabled_mods[i]); ++ return GRUB_ERR_ACCESS_DENIED; ++ } ++ ++ *flags = GRUB_VERIFY_FLAGS_SINGLE_CHUNK; ++ ++ /* Fall through. */ ++ ++ default: ++ return GRUB_ERR_NONE; ++ } ++} ++ ++static grub_err_t ++shim_lock_verifier_write (void *context __attribute__ ((unused)), void *buf, grub_size_t size) ++{ ++ grub_efi_shim_lock_protocol_t *sl = grub_efi_locate_protocol (&shim_lock_guid, 0); ++ ++ if (!sl) ++ return grub_error (GRUB_ERR_ACCESS_DENIED, N_("shim_lock protocol not found")); ++ ++ if (sl->verify (buf, size) != GRUB_EFI_SUCCESS) ++ return grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad shim signature")); ++ ++ return GRUB_ERR_NONE; ++} ++ ++struct grub_file_verifier shim_lock_verifier = ++ { ++ .name = "shim_lock_verifier", ++ .init = shim_lock_verifier_init, ++ .write = shim_lock_verifier_write ++ }; ++ ++void ++grub_shim_lock_verifier_setup (void) ++{ ++ grub_efi_shim_lock_protocol_t *sl = ++ grub_efi_locate_protocol (&shim_lock_guid, 0); ++ ++ if (!sl) ++ return; ++ ++ if (grub_efi_get_secureboot () != GRUB_EFI_SECUREBOOT_MODE_ENABLED) ++ return; ++ ++ grub_verifier_register (&shim_lock_verifier); ++} +diff --git a/include/grub/efi/sb.h b/include/grub/efi/sb.h +index a33d985..30c4335 100644 +--- a/include/grub/efi/sb.h ++++ b/include/grub/efi/sb.h +@@ -30,6 +30,9 @@ + #ifdef GRUB_MACHINE_EFI + extern grub_uint8_t + EXPORT_FUNC (grub_efi_get_secureboot) (void); ++ ++extern void ++grub_shim_lock_verifier_setup (void); + #else + static inline grub_uint8_t + grub_efi_get_secureboot (void) +diff --git a/po/POTFILES.in b/po/POTFILES.in +index 11c799f..49755d3 100644 +--- a/po/POTFILES.in ++++ b/po/POTFILES.in +@@ -39,7 +39,6 @@ + ./grub-core/commands/efi/lsefimmap.c + ./grub-core/commands/efi/lsefisystab.c + ./grub-core/commands/efi/lssal.c +-./grub-core/commands/efi/shim_lock.c + ./grub-core/commands/efi/tpm.c + ./grub-core/commands/eval.c + ./grub-core/commands/extcmd.c +-- +2.14.2 + diff --git a/boot/grub2/0035-kern-Add-lockdown-support.patch b/boot/grub2/0035-kern-Add-lockdown-support.patch new file mode 100644 index 00000000..268b6527 --- /dev/null +++ b/boot/grub2/0035-kern-Add-lockdown-support.patch @@ -0,0 +1,763 @@ +From 578c95298bcc46e0296f4c786db64c2ff26ce2cc Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Mon, 28 Sep 2020 20:08:02 +0200 +Subject: [PATCH] kern: Add lockdown support + +When the GRUB starts on a secure boot platform, some commands can be +used to subvert the protections provided by the verification mechanism and +could lead to booting untrusted system. + +To prevent that situation, allow GRUB to be locked down. That way the code +may check if GRUB has been locked down and further restrict the commands +that are registered or what subset of their functionality could be used. + +The lockdown support adds the following components: + +* The grub_lockdown() function which can be used to lockdown GRUB if, + e.g., UEFI Secure Boot is enabled. + +* The grub_is_lockdown() function which can be used to check if the GRUB + was locked down. + +* A verifier that flags OS kernels, the GRUB modules, Device Trees and ACPI + tables as GRUB_VERIFY_FLAGS_DEFER_AUTH to defer verification to other + verifiers. These files are only successfully verified if another registered + verifier returns success. Otherwise, the whole verification process fails. + + For example, PE/COFF binaries verification can be done by the shim_lock + verifier which validates the signatures using the shim_lock protocol. + However, the verification is not deferred directly to the shim_lock verifier. + The shim_lock verifier is hooked into the verification process instead. + +* A set of grub_{command,extcmd}_lockdown functions that can be used by + code registering command handlers, to only register unsafe commands if + the GRUB has not been locked down. + +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +[Add changes to generated files] +Signed-off-by: Stefan Sørensen +--- + Makefile.in | 2 ++ + conf/Makefile.common | 2 ++ + docs/grub-dev.texi | 27 +++++++++++++++ + docs/grub.texi | 8 +++++ + grub-core/Makefile.am | 5 ++- + grub-core/Makefile.core.am | 14 ++++---- + grub-core/Makefile.core.def | 1 + + grub-core/Makefile.in | 73 ++++++++++++++++++++++++++++++----------- + grub-core/commands/extcmd.c | 23 +++++++++++++ + grub-core/kern/command.c | 24 ++++++++++++++ + grub-core/kern/lockdown.c | 80 +++++++++++++++++++++++++++++++++++++++++++++ + include/grub/command.h | 5 +++ + include/grub/extcmd.h | 7 ++++ + include/grub/lockdown.h | 44 +++++++++++++++++++++++++ + po/POTFILES.in | 2 ++ + 15 files changed, 290 insertions(+), 27 deletions(-) + create mode 100644 grub-core/kern/lockdown.c + create mode 100644 include/grub/lockdown.h + +diff --git a/Makefile.in b/Makefile.in +index e6a185b..ecb3278 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -2617,7 +2617,9 @@ CPPFLAGS_PARTTOOL_LIST = -Dgrub_parttool_register=PARTTOOL_LIST_MARKER + CPPFLAGS_TERMINAL_LIST = '-Dgrub_term_register_input(...)=INPUT_TERMINAL_LIST_MARKER(__VA_ARGS__)' \ + '-Dgrub_term_register_output(...)=OUTPUT_TERMINAL_LIST_MARKER(__VA_ARGS__)' + CPPFLAGS_COMMAND_LIST = '-Dgrub_register_command(...)=COMMAND_LIST_MARKER(__VA_ARGS__)' \ ++ '-Dgrub_register_command_lockdown(...)=COMMAND_LOCKDOWN_LIST_MARKER(__VA_ARGS__)' \ + '-Dgrub_register_extcmd(...)=EXTCOMMAND_LIST_MARKER(__VA_ARGS__)' \ ++ '-Dgrub_register_extcmd_lockdown(...)=EXTCOMMAND_LOCKDOWN_LIST_MARKER(__VA_ARGS__)' \ + '-Dgrub_register_command_p1(...)=P1COMMAND_LIST_MARKER(__VA_ARGS__)' + CPPFLAGS_FDT_LIST := '-Dgrub_fdtbus_register(...)=FDT_DRIVER_LIST_MARKER(__VA_ARGS__)' + CPPFLAGS_MARKER = $(CPPFLAGS_FS_LIST) $(CPPFLAGS_VIDEO_LIST) \ +diff --git a/conf/Makefile.common b/conf/Makefile.common +index 6cd71cb..2a1a886 100644 +--- a/conf/Makefile.common ++++ b/conf/Makefile.common +@@ -84,7 +84,9 @@ CPPFLAGS_PARTTOOL_LIST = -Dgrub_parttool_register=PARTTOOL_LIST_MARKER + CPPFLAGS_TERMINAL_LIST = '-Dgrub_term_register_input(...)=INPUT_TERMINAL_LIST_MARKER(__VA_ARGS__)' + CPPFLAGS_TERMINAL_LIST += '-Dgrub_term_register_output(...)=OUTPUT_TERMINAL_LIST_MARKER(__VA_ARGS__)' + CPPFLAGS_COMMAND_LIST = '-Dgrub_register_command(...)=COMMAND_LIST_MARKER(__VA_ARGS__)' ++CPPFLAGS_COMMAND_LIST += '-Dgrub_register_command_lockdown(...)=COMMAND_LOCKDOWN_LIST_MARKER(__VA_ARGS__)' + CPPFLAGS_COMMAND_LIST += '-Dgrub_register_extcmd(...)=EXTCOMMAND_LIST_MARKER(__VA_ARGS__)' ++CPPFLAGS_COMMAND_LIST += '-Dgrub_register_extcmd_lockdown(...)=EXTCOMMAND_LOCKDOWN_LIST_MARKER(__VA_ARGS__)' + CPPFLAGS_COMMAND_LIST += '-Dgrub_register_command_p1(...)=P1COMMAND_LIST_MARKER(__VA_ARGS__)' + CPPFLAGS_FDT_LIST := '-Dgrub_fdtbus_register(...)=FDT_DRIVER_LIST_MARKER(__VA_ARGS__)' + CPPFLAGS_MARKER = $(CPPFLAGS_FS_LIST) $(CPPFLAGS_VIDEO_LIST) \ +diff --git a/docs/grub-dev.texi b/docs/grub-dev.texi +index ee389fd..635ec72 100644 +--- a/docs/grub-dev.texi ++++ b/docs/grub-dev.texi +@@ -86,6 +86,7 @@ This edition documents version @value{VERSION}. + * PFF2 Font File Format:: + * Graphical Menu Software Design:: + * Verifiers framework:: ++* Lockdown framework:: + * Copying This Manual:: Copying This Manual + * Index:: + @end menu +@@ -2086,6 +2087,32 @@ Optionally at the end of the file @samp{fini}, if it exists, is called with just + the context. If you return no error during any of @samp{init}, @samp{write} and + @samp{fini} then the file is considered as having succeded verification. + ++@node Lockdown framework ++@chapter Lockdown framework ++ ++The GRUB can be locked down, which is a restricted mode where some operations ++are not allowed. For instance, some commands cannot be used when the GRUB is ++locked down. ++ ++The function ++@code{grub_lockdown()} is used to lockdown GRUB and the function ++@code{grub_is_lockdown()} function can be used to check whether lockdown is ++enabled or not. When enabled, the function returns @samp{GRUB_LOCKDOWN_ENABLED} ++and @samp{GRUB_LOCKDOWN_DISABLED} when is not enabled. ++ ++The following functions can be used to register the commands that can only be ++used when lockdown is disabled: ++ ++@itemize ++ ++@item @code{grub_cmd_lockdown()} registers command which should not run when the ++GRUB is in lockdown mode. ++ ++@item @code{grub_cmd_lockdown()} registers extended command which should not run ++when the GRUB is in lockdown mode. ++ ++@end itemize ++ + @node Copying This Manual + @appendix Copying This Manual + +diff --git a/docs/grub.texi b/docs/grub.texi +index aefe032..a25459f 100644 +--- a/docs/grub.texi ++++ b/docs/grub.texi +@@ -5581,6 +5581,7 @@ environment variables and commands are listed in the same order. + * Using digital signatures:: Booting digitally signed code + * UEFI secure boot and shim:: Booting digitally signed PE files + * Measured Boot:: Measuring boot components ++* Lockdown:: Lockdown when booting on a secure setup + @end menu + + @node Authentication and authorisation +@@ -5795,6 +5796,13 @@ into @file{core.img} in order to avoid a potential gap in measurement between + + Measured boot is currently only supported on EFI platforms. + ++@node Lockdown ++@section Lockdown when booting on a secure setup ++ ++The GRUB can be locked down when booted on a secure boot environment, for example ++if the UEFI secure boot is enabled. On a locked down configuration, the GRUB will ++be restricted and some operations/commands cannot be executed. ++ + @node Platform limitations + @chapter Platform limitations + +diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am +index cc6fc7d..30e23ad 100644 +--- a/grub-core/Makefile.am ++++ b/grub-core/Makefile.am +@@ -80,6 +80,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/fs.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i18n.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/kernel.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/list.h ++KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lockdown.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/misc.h + if COND_emu + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/compiler-rt-emu.h +@@ -377,8 +378,10 @@ command.lst: $(MARKER_FILES) + b=`basename $$pp .marker`; \ + sed -n \ + -e "/EXTCOMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/*\1: $$b/;p;}" \ ++ -e "/EXTCOMMAND_LOCKDOWN_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/*\1: $$b/;p;}" \ + -e "/P1COMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/*\1: $$b/;p;}" \ +- -e "/COMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/\1: $$b/;p;}" $$pp; \ ++ -e "/COMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/\1: $$b/;p;}" \ ++ -e "/COMMAND_LOCKDOWN_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/\1: $$b/;p;}" $$pp; \ + done) | sort -u > $@ + platform_DATA += command.lst + CLEANFILES += command.lst +diff --git a/grub-core/Makefile.core.am b/grub-core/Makefile.core.am +index 5623a5e..fbfb627 100644 +--- a/grub-core/Makefile.core.am ++++ b/grub-core/Makefile.core.am +@@ -22378,7 +22378,7 @@ endif + if COND_i386_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/i386/efi/startup.S +-kernel_exec_SOURCES += kern/i386/efi/tsc.c kern/i386/tsc_pmtimer.c kern/i386/efi/init.c bus/pci.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/i386/efi/tsc.c kern/i386/tsc_pmtimer.c kern/i386/efi/init.c bus/pci.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22488,7 +22488,7 @@ endif + if COND_x86_64_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/x86_64/efi/startup.S +-kernel_exec_SOURCES += kern/i386/efi/tsc.c kern/i386/tsc_pmtimer.c kern/x86_64/efi/callwrap.S kern/i386/efi/init.c bus/pci.c kern/x86_64/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/i386/efi/tsc.c kern/i386/tsc_pmtimer.c kern/x86_64/efi/callwrap.S kern/i386/efi/init.c bus/pci.c kern/x86_64/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22664,7 +22664,7 @@ endif + if COND_ia64_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = +-kernel_exec_SOURCES += kern/ia64/efi/startup.S kern/ia64/efi/init.c kern/ia64/dl.c kern/ia64/dl_helper.c kern/ia64/cache.c lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/ia64/efi/startup.S kern/ia64/efi/init.c kern/ia64/dl.c kern/ia64/dl_helper.c kern/ia64/cache.c lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) -fno-builtin -fpic -minline-int-divide-max-throughput +@@ -22730,7 +22730,7 @@ endif + if COND_arm_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/arm/efi/startup.S +-kernel_exec_SOURCES += kern/arm/efi/init.c kern/efi/fdt.c kern/arm/dl.c kern/arm/dl_helper.c kern/arm/cache_armv6.S kern/arm/cache_armv7.S kern/arm/cache.c kern/arm/compiler-rt.S lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/arm/efi/init.c kern/efi/fdt.c kern/arm/dl.c kern/arm/dl_helper.c kern/arm/cache_armv6.S kern/arm/cache_armv7.S kern/arm/cache.c kern/arm/compiler-rt.S lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22752,7 +22752,7 @@ endif + if COND_arm64_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/arm64/efi/startup.S +-kernel_exec_SOURCES += kern/arm64/efi/init.c kern/efi/fdt.c kern/arm64/cache.c kern/arm64/cache_flush.S kern/arm64/dl.c kern/arm64/dl_helper.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/arm64/efi/init.c kern/efi/fdt.c kern/arm64/cache.c kern/arm64/cache_flush.S kern/arm64/dl.c kern/arm64/dl_helper.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22796,7 +22796,7 @@ endif + if COND_riscv32_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/riscv/efi/startup.S +-kernel_exec_SOURCES += kern/riscv/efi/init.c kern/efi/fdt.c kern/riscv/cache.c kern/riscv/cache_flush.S kern/riscv/dl.c lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/riscv/efi/init.c kern/efi/fdt.c kern/riscv/cache.c kern/riscv/cache_flush.S kern/riscv/dl.c lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22818,7 +22818,7 @@ endif + if COND_riscv64_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/riscv/efi/startup.S +-kernel_exec_SOURCES += kern/riscv/efi/init.c kern/efi/fdt.c kern/riscv/cache.c kern/riscv/cache_flush.S kern/riscv/dl.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/riscv/efi/init.c kern/efi/fdt.c kern/riscv/cache.c kern/riscv/cache_flush.S kern/riscv/dl.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def +index 4d380ed..ee8dc55 100644 +--- a/grub-core/Makefile.core.def ++++ b/grub-core/Makefile.core.def +@@ -205,6 +205,7 @@ kernel = { + efi = kern/acpi.c; + efi = kern/efi/acpi.c; + efi = kern/efi/sb.c; ++ efi = kern/lockdown.c; + i386_coreboot = kern/i386/pc/acpi.c; + i386_multiboot = kern/i386/pc/acpi.c; + i386_coreboot = kern/acpi.c; +diff --git a/grub-core/Makefile.in b/grub-core/Makefile.in +index 09dc802..ac400ea 100644 +--- a/grub-core/Makefile.in ++++ b/grub-core/Makefile.in +@@ -10457,13 +10457,14 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + kern/arm64/cache_flush.S kern/arm64/dl.c \ + kern/arm64/dl_helper.c disk/efi/efidisk.c kern/efi/efi.c \ + kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c \ +- kern/efi/acpi.c kern/efi/sb.c kern/compiler-rt.c kern/mm.c \ +- kern/time.c kern/generic/millisleep.c kern/command.c \ +- kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c \ +- kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c \ +- kern/misc.c kern/parser.c kern/partition.c \ +- kern/rescue_parser.c kern/rescue_reader.c kern/term.c \ +- kern/verifiers.c kern/arm/startup.S kern/arm/coreboot/init.c \ ++ kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c \ ++ kern/compiler-rt.c kern/mm.c kern/time.c \ ++ kern/generic/millisleep.c kern/command.c kern/corecmd.c \ ++ kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c \ ++ kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c \ ++ kern/parser.c kern/partition.c kern/rescue_parser.c \ ++ kern/rescue_reader.c kern/term.c kern/verifiers.c \ ++ kern/arm/startup.S kern/arm/coreboot/init.c \ + kern/arm/coreboot/timer.c kern/arm/coreboot/coreboot.S \ + lib/fdt.c bus/fdt.c term/ps2.c term/arm/pl050.c \ + term/arm/cros.c term/arm/cros_ec.c bus/spi/rk3288_spi.c \ +@@ -10572,6 +10573,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-acpi.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/efi/kernel_exec-acpi.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/efi/kernel_exec-sb.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-lockdown.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@@ -10646,6 +10648,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/kernel_exec-acpi.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/efi/kernel_exec-acpi.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/efi/kernel_exec-sb.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/kernel_exec-lockdown.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@@ -10683,6 +10686,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/kernel_exec-acpi.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/efi/kernel_exec-acpi.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/efi/kernel_exec-sb.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/kernel_exec-lockdown.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@@ -10884,6 +10888,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-acpi.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/efi/kernel_exec-acpi.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/efi/kernel_exec-sb.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-lockdown.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@@ -11120,6 +11125,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-acpi.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/efi/kernel_exec-acpi.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/efi/kernel_exec-sb.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-lockdown.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@@ -11287,6 +11293,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-acpi.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/efi/kernel_exec-acpi.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/efi/kernel_exec-sb.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-lockdown.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@@ -11379,6 +11386,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_TRUE@ kern/kernel_exec-acpi.$(OBJEXT) \ + @COND_arm64_efi_TRUE@ kern/efi/kernel_exec-acpi.$(OBJEXT) \ + @COND_arm64_efi_TRUE@ kern/efi/kernel_exec-sb.$(OBJEXT) \ ++@COND_arm64_efi_TRUE@ kern/kernel_exec-lockdown.$(OBJEXT) \ + @COND_arm64_efi_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ + @COND_arm64_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@@ -15379,7 +15387,9 @@ CPPFLAGS_PARTTOOL_LIST = -Dgrub_parttool_register=PARTTOOL_LIST_MARKER + CPPFLAGS_TERMINAL_LIST = '-Dgrub_term_register_input(...)=INPUT_TERMINAL_LIST_MARKER(__VA_ARGS__)' \ + '-Dgrub_term_register_output(...)=OUTPUT_TERMINAL_LIST_MARKER(__VA_ARGS__)' + CPPFLAGS_COMMAND_LIST = '-Dgrub_register_command(...)=COMMAND_LIST_MARKER(__VA_ARGS__)' \ ++ '-Dgrub_register_command_lockdown(...)=COMMAND_LOCKDOWN_LIST_MARKER(__VA_ARGS__)' \ + '-Dgrub_register_extcmd(...)=EXTCOMMAND_LIST_MARKER(__VA_ARGS__)' \ ++ '-Dgrub_register_extcmd_lockdown(...)=EXTCOMMAND_LOCKDOWN_LIST_MARKER(__VA_ARGS__)' \ + '-Dgrub_register_command_p1(...)=P1COMMAND_LIST_MARKER(__VA_ARGS__)' + CPPFLAGS_FDT_LIST := '-Dgrub_fdtbus_register(...)=FDT_DRIVER_LIST_MARKER(__VA_ARGS__)' + CPPFLAGS_MARKER = $(CPPFLAGS_FS_LIST) $(CPPFLAGS_VIDEO_LIST) \ +@@ -16387,6 +16397,7 @@ KERNEL_HEADER_FILES = $(top_srcdir)/include/grub/cache.h \ + $(top_srcdir)/include/grub/i18n.h \ + $(top_srcdir)/include/grub/kernel.h \ + $(top_srcdir)/include/grub/list.h \ ++ $(top_srcdir)/include/grub/lockdown.h \ + $(top_srcdir)/include/grub/misc.h $(am__append_5794) \ + $(am__append_5795) $(top_srcdir)/include/grub/mm.h \ + $(top_srcdir)/include/grub/parser.h \ +@@ -25594,7 +25605,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_arm64_efi_TRUE@ kern/efi/efi.c kern/efi/init.c \ + @COND_arm64_efi_TRUE@ kern/efi/mm.c term/efi/console.c \ + @COND_arm64_efi_TRUE@ kern/acpi.c kern/efi/acpi.c kern/efi/sb.c \ +-@COND_arm64_efi_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ ++@COND_arm64_efi_TRUE@ kern/lockdown.c kern/compiler-rt.c \ ++@COND_arm64_efi_TRUE@ kern/mm.c kern/time.c \ + @COND_arm64_efi_TRUE@ kern/generic/millisleep.c kern/command.c \ + @COND_arm64_efi_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ + @COND_arm64_efi_TRUE@ kern/dl.c kern/env.c kern/err.c \ +@@ -25645,7 +25657,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_arm_efi_TRUE@ kern/efi/init.c kern/efi/mm.c \ + @COND_arm_efi_TRUE@ term/efi/console.c kern/acpi.c \ + @COND_arm_efi_TRUE@ kern/efi/acpi.c kern/efi/sb.c \ +-@COND_arm_efi_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ ++@COND_arm_efi_TRUE@ kern/lockdown.c kern/compiler-rt.c \ ++@COND_arm_efi_TRUE@ kern/mm.c kern/time.c \ + @COND_arm_efi_TRUE@ kern/generic/millisleep.c kern/command.c \ + @COND_arm_efi_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ + @COND_arm_efi_TRUE@ kern/dl.c kern/env.c kern/err.c kern/file.c \ +@@ -25725,7 +25738,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_i386_efi_TRUE@ kern/efi/efi.c kern/efi/init.c \ + @COND_i386_efi_TRUE@ kern/efi/mm.c term/efi/console.c \ + @COND_i386_efi_TRUE@ kern/acpi.c kern/efi/acpi.c kern/efi/sb.c \ +-@COND_i386_efi_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ ++@COND_i386_efi_TRUE@ kern/lockdown.c kern/compiler-rt.c \ ++@COND_i386_efi_TRUE@ kern/mm.c kern/time.c \ + @COND_i386_efi_TRUE@ kern/generic/millisleep.c kern/command.c \ + @COND_i386_efi_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ + @COND_i386_efi_TRUE@ kern/dl.c kern/env.c kern/err.c \ +@@ -25843,7 +25857,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_ia64_efi_TRUE@ kern/efi/efi.c kern/efi/init.c \ + @COND_ia64_efi_TRUE@ kern/efi/mm.c term/efi/console.c \ + @COND_ia64_efi_TRUE@ kern/acpi.c kern/efi/acpi.c kern/efi/sb.c \ +-@COND_ia64_efi_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ ++@COND_ia64_efi_TRUE@ kern/lockdown.c kern/compiler-rt.c \ ++@COND_ia64_efi_TRUE@ kern/mm.c kern/time.c \ + @COND_ia64_efi_TRUE@ kern/generic/millisleep.c kern/command.c \ + @COND_ia64_efi_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ + @COND_ia64_efi_TRUE@ kern/dl.c kern/env.c kern/err.c \ +@@ -25956,8 +25971,9 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_riscv32_efi_TRUE@ kern/efi/init.c kern/efi/mm.c \ + @COND_riscv32_efi_TRUE@ term/efi/console.c kern/acpi.c \ + @COND_riscv32_efi_TRUE@ kern/efi/acpi.c kern/efi/sb.c \ +-@COND_riscv32_efi_TRUE@ kern/compiler-rt.c kern/mm.c \ +-@COND_riscv32_efi_TRUE@ kern/time.c kern/generic/millisleep.c \ ++@COND_riscv32_efi_TRUE@ kern/lockdown.c kern/compiler-rt.c \ ++@COND_riscv32_efi_TRUE@ kern/mm.c kern/time.c \ ++@COND_riscv32_efi_TRUE@ kern/generic/millisleep.c \ + @COND_riscv32_efi_TRUE@ kern/command.c kern/corecmd.c \ + @COND_riscv32_efi_TRUE@ kern/device.c kern/disk.c kern/dl.c \ + @COND_riscv32_efi_TRUE@ kern/env.c kern/err.c kern/file.c \ +@@ -25974,9 +25990,9 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_riscv64_efi_TRUE@ kern/efi/efi.c kern/efi/init.c \ + @COND_riscv64_efi_TRUE@ kern/efi/mm.c term/efi/console.c \ + @COND_riscv64_efi_TRUE@ kern/acpi.c kern/efi/acpi.c \ +-@COND_riscv64_efi_TRUE@ kern/efi/sb.c kern/compiler-rt.c \ +-@COND_riscv64_efi_TRUE@ kern/mm.c kern/time.c \ +-@COND_riscv64_efi_TRUE@ kern/generic/millisleep.c \ ++@COND_riscv64_efi_TRUE@ kern/efi/sb.c kern/lockdown.c \ ++@COND_riscv64_efi_TRUE@ kern/compiler-rt.c kern/mm.c \ ++@COND_riscv64_efi_TRUE@ kern/time.c kern/generic/millisleep.c \ + @COND_riscv64_efi_TRUE@ kern/command.c kern/corecmd.c \ + @COND_riscv64_efi_TRUE@ kern/device.c kern/disk.c kern/dl.c \ + @COND_riscv64_efi_TRUE@ kern/env.c kern/err.c kern/file.c \ +@@ -26022,8 +26038,8 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_x86_64_efi_TRUE@ kern/efi/efi.c kern/efi/init.c \ + @COND_x86_64_efi_TRUE@ kern/efi/mm.c term/efi/console.c \ + @COND_x86_64_efi_TRUE@ kern/acpi.c kern/efi/acpi.c \ +-@COND_x86_64_efi_TRUE@ kern/efi/sb.c kern/compiler-rt.c \ +-@COND_x86_64_efi_TRUE@ kern/mm.c kern/time.c \ ++@COND_x86_64_efi_TRUE@ kern/efi/sb.c kern/lockdown.c \ ++@COND_x86_64_efi_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ + @COND_x86_64_efi_TRUE@ kern/generic/millisleep.c kern/command.c \ + @COND_x86_64_efi_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ + @COND_x86_64_efi_TRUE@ kern/dl.c kern/env.c kern/err.c \ +@@ -27994,6 +28010,8 @@ kern/efi/kernel_exec-acpi.$(OBJEXT): kern/efi/$(am__dirstamp) \ + kern/efi/$(DEPDIR)/$(am__dirstamp) + kern/efi/kernel_exec-sb.$(OBJEXT): kern/efi/$(am__dirstamp) \ + kern/efi/$(DEPDIR)/$(am__dirstamp) ++kern/kernel_exec-lockdown.$(OBJEXT): kern/$(am__dirstamp) \ ++ kern/$(DEPDIR)/$(am__dirstamp) + kern/kernel_exec-compiler-rt.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) + kern/kernel_exec-mm.$(OBJEXT): kern/$(am__dirstamp) \ +@@ -30945,6 +30963,7 @@ distclean-compile: + @AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-file.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-fs.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-list.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-lockdown.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-main.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-misc.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-mm.Po@am__quote@ +@@ -35293,6 +35312,20 @@ kern/efi/kernel_exec-sb.obj: kern/efi/sb.c + @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ + @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/efi/kernel_exec-sb.obj `if test -f 'kern/efi/sb.c'; then $(CYGPATH_W) 'kern/efi/sb.c'; else $(CYGPATH_W) '$(srcdir)/kern/efi/sb.c'; fi` + ++kern/kernel_exec-lockdown.o: kern/lockdown.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-lockdown.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-lockdown.Tpo -c -o kern/kernel_exec-lockdown.o `test -f 'kern/lockdown.c' || echo '$(srcdir)/'`kern/lockdown.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-lockdown.Tpo kern/$(DEPDIR)/kernel_exec-lockdown.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/lockdown.c' object='kern/kernel_exec-lockdown.o' libtool=no @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-lockdown.o `test -f 'kern/lockdown.c' || echo '$(srcdir)/'`kern/lockdown.c ++ ++kern/kernel_exec-lockdown.obj: kern/lockdown.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-lockdown.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-lockdown.Tpo -c -o kern/kernel_exec-lockdown.obj `if test -f 'kern/lockdown.c'; then $(CYGPATH_W) 'kern/lockdown.c'; else $(CYGPATH_W) '$(srcdir)/kern/lockdown.c'; fi` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-lockdown.Tpo kern/$(DEPDIR)/kernel_exec-lockdown.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/lockdown.c' object='kern/kernel_exec-lockdown.obj' libtool=no @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-lockdown.obj `if test -f 'kern/lockdown.c'; then $(CYGPATH_W) 'kern/lockdown.c'; else $(CYGPATH_W) '$(srcdir)/kern/lockdown.c'; fi` ++ + kern/kernel_exec-compiler-rt.o: kern/compiler-rt.c + @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-compiler-rt.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-compiler-rt.Tpo -c -o kern/kernel_exec-compiler-rt.o `test -f 'kern/compiler-rt.c' || echo '$(srcdir)/'`kern/compiler-rt.c + @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-compiler-rt.Tpo kern/$(DEPDIR)/kernel_exec-compiler-rt.Po +@@ -46650,8 +46683,10 @@ command.lst: $(MARKER_FILES) + b=`basename $$pp .marker`; \ + sed -n \ + -e "/EXTCOMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/*\1: $$b/;p;}" \ ++ -e "/EXTCOMMAND_LOCKDOWN_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/*\1: $$b/;p;}" \ + -e "/P1COMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/*\1: $$b/;p;}" \ +- -e "/COMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/\1: $$b/;p;}" $$pp; \ ++ -e "/COMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/\1: $$b/;p;}" \ ++ -e "/COMMAND_LOCKDOWN_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/\1: $$b/;p;}" $$pp; \ + done) | sort -u > $@ + + partmap.lst: $(MARKER_FILES) +diff --git a/grub-core/commands/extcmd.c b/grub-core/commands/extcmd.c +index 69574e2..90a5ca2 100644 +--- a/grub-core/commands/extcmd.c ++++ b/grub-core/commands/extcmd.c +@@ -19,6 +19,7 @@ + + #include + #include ++#include + #include + #include + #include +@@ -110,6 +111,28 @@ grub_register_extcmd (const char *name, grub_extcmd_func_t func, + summary, description, parser, 1); + } + ++static grub_err_t ++grub_extcmd_lockdown (grub_extcmd_context_t ctxt __attribute__ ((unused)), ++ int argc __attribute__ ((unused)), ++ char **argv __attribute__ ((unused))) ++{ ++ return grub_error (GRUB_ERR_ACCESS_DENIED, ++ N_("%s: the command is not allowed when lockdown is enforced"), ++ ctxt->extcmd->cmd->name); ++} ++ ++grub_extcmd_t ++grub_register_extcmd_lockdown (const char *name, grub_extcmd_func_t func, ++ grub_command_flags_t flags, const char *summary, ++ const char *description, ++ const struct grub_arg_option *parser) ++{ ++ if (grub_is_lockdown () == GRUB_LOCKDOWN_ENABLED) ++ func = grub_extcmd_lockdown; ++ ++ return grub_register_extcmd (name, func, flags, summary, description, parser); ++} ++ + void + grub_unregister_extcmd (grub_extcmd_t ext) + { +diff --git a/grub-core/kern/command.c b/grub-core/kern/command.c +index acd7218..4aabcd4 100644 +--- a/grub-core/kern/command.c ++++ b/grub-core/kern/command.c +@@ -17,6 +17,7 @@ + * along with GRUB. If not, see . + */ + ++#include + #include + #include + +@@ -77,6 +78,29 @@ grub_register_command_prio (const char *name, + return cmd; + } + ++static grub_err_t ++grub_cmd_lockdown (grub_command_t cmd __attribute__ ((unused)), ++ int argc __attribute__ ((unused)), ++ char **argv __attribute__ ((unused))) ++ ++{ ++ return grub_error (GRUB_ERR_ACCESS_DENIED, ++ N_("%s: the command is not allowed when lockdown is enforced"), ++ cmd->name); ++} ++ ++grub_command_t ++grub_register_command_lockdown (const char *name, ++ grub_command_func_t func, ++ const char *summary, ++ const char *description) ++{ ++ if (grub_is_lockdown () == GRUB_LOCKDOWN_ENABLED) ++ func = grub_cmd_lockdown; ++ ++ return grub_register_command_prio (name, func, summary, description, 0); ++} ++ + void + grub_unregister_command (grub_command_t cmd) + { +diff --git a/grub-core/kern/lockdown.c b/grub-core/kern/lockdown.c +new file mode 100644 +index 0000000..1e56c0b +--- /dev/null ++++ b/grub-core/kern/lockdown.c +@@ -0,0 +1,80 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2020 Free Software Foundation, Inc. ++ * ++ * GRUB 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 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB 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 GRUB. If not, see . ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++ ++static int lockdown = GRUB_LOCKDOWN_DISABLED; ++ ++static grub_err_t ++lockdown_verifier_init (grub_file_t io __attribute__ ((unused)), ++ enum grub_file_type type, ++ void **context __attribute__ ((unused)), ++ enum grub_verify_flags *flags) ++{ ++ *flags = GRUB_VERIFY_FLAGS_SKIP_VERIFICATION; ++ ++ switch (type & GRUB_FILE_TYPE_MASK) ++ { ++ case GRUB_FILE_TYPE_GRUB_MODULE: ++ case GRUB_FILE_TYPE_LINUX_KERNEL: ++ case GRUB_FILE_TYPE_MULTIBOOT_KERNEL: ++ case GRUB_FILE_TYPE_XEN_HYPERVISOR: ++ case GRUB_FILE_TYPE_BSD_KERNEL: ++ case GRUB_FILE_TYPE_XNU_KERNEL: ++ case GRUB_FILE_TYPE_PLAN9_KERNEL: ++ case GRUB_FILE_TYPE_NTLDR: ++ case GRUB_FILE_TYPE_TRUECRYPT: ++ case GRUB_FILE_TYPE_FREEDOS: ++ case GRUB_FILE_TYPE_PXECHAINLOADER: ++ case GRUB_FILE_TYPE_PCCHAINLOADER: ++ case GRUB_FILE_TYPE_COREBOOT_CHAINLOADER: ++ case GRUB_FILE_TYPE_EFI_CHAINLOADED_IMAGE: ++ case GRUB_FILE_TYPE_ACPI_TABLE: ++ case GRUB_FILE_TYPE_DEVICE_TREE_IMAGE: ++ *flags = GRUB_VERIFY_FLAGS_DEFER_AUTH; ++ ++ /* Fall through. */ ++ ++ default: ++ return GRUB_ERR_NONE; ++ } ++} ++ ++struct grub_file_verifier lockdown_verifier = ++ { ++ .name = "lockdown_verifier", ++ .init = lockdown_verifier_init, ++ }; ++ ++void ++grub_lockdown (void) ++{ ++ lockdown = GRUB_LOCKDOWN_ENABLED; ++ ++ grub_verifier_register (&lockdown_verifier); ++} ++ ++int ++grub_is_lockdown (void) ++{ ++ return lockdown; ++} +diff --git a/include/grub/command.h b/include/grub/command.h +index eee4e84..2a6f7f8 100644 +--- a/include/grub/command.h ++++ b/include/grub/command.h +@@ -86,6 +86,11 @@ EXPORT_FUNC(grub_register_command_prio) (const char *name, + const char *summary, + const char *description, + int prio); ++grub_command_t ++EXPORT_FUNC(grub_register_command_lockdown) (const char *name, ++ grub_command_func_t func, ++ const char *summary, ++ const char *description); + void EXPORT_FUNC(grub_unregister_command) (grub_command_t cmd); + + static inline grub_command_t +diff --git a/include/grub/extcmd.h b/include/grub/extcmd.h +index 19fe592..fe9248b 100644 +--- a/include/grub/extcmd.h ++++ b/include/grub/extcmd.h +@@ -62,6 +62,13 @@ grub_extcmd_t EXPORT_FUNC(grub_register_extcmd) (const char *name, + const char *description, + const struct grub_arg_option *parser); + ++grub_extcmd_t EXPORT_FUNC(grub_register_extcmd_lockdown) (const char *name, ++ grub_extcmd_func_t func, ++ grub_command_flags_t flags, ++ const char *summary, ++ const char *description, ++ const struct grub_arg_option *parser); ++ + grub_extcmd_t EXPORT_FUNC(grub_register_extcmd_prio) (const char *name, + grub_extcmd_func_t func, + grub_command_flags_t flags, +diff --git a/include/grub/lockdown.h b/include/grub/lockdown.h +new file mode 100644 +index 0000000..40531fa +--- /dev/null ++++ b/include/grub/lockdown.h +@@ -0,0 +1,44 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2020 Free Software Foundation, Inc. ++ * ++ * GRUB 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 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB 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 GRUB. If not, see . ++ */ ++ ++#ifndef GRUB_LOCKDOWN_H ++#define GRUB_LOCKDOWN_H 1 ++ ++#include ++ ++#define GRUB_LOCKDOWN_DISABLED 0 ++#define GRUB_LOCKDOWN_ENABLED 1 ++ ++#ifdef GRUB_MACHINE_EFI ++extern void ++EXPORT_FUNC (grub_lockdown) (void); ++extern int ++EXPORT_FUNC (grub_is_lockdown) (void); ++#else ++static inline void ++grub_lockdown (void) ++{ ++} ++ ++static inline int ++grub_is_lockdown (void) ++{ ++ return GRUB_LOCKDOWN_DISABLED; ++} ++#endif ++#endif /* ! GRUB_LOCKDOWN_H */ +diff --git a/po/POTFILES.in b/po/POTFILES.in +index 49755d3..5e26845 100644 +--- a/po/POTFILES.in ++++ b/po/POTFILES.in +@@ -309,6 +309,7 @@ + ./grub-core/kern/ieee1275/mmap.c + ./grub-core/kern/ieee1275/openfw.c + ./grub-core/kern/list.c ++./grub-core/kern/lockdown.c + ./grub-core/kern/main.c + ./grub-core/kern/mips/arc/init.c + ./grub-core/kern/mips/dl.c +@@ -1207,6 +1208,7 @@ + ./include/grub/linux.h + ./include/grub/list.h + ./include/grub/loader.h ++./include/grub/lockdown.h + ./include/grub/lvm.h + ./include/grub/macho.h + ./include/grub/machoload.h +-- +2.14.2 + diff --git a/boot/grub2/0036-kern-lockdown-Set-a-variable-if-the-GRUB-is-locked-d.patch b/boot/grub2/0036-kern-lockdown-Set-a-variable-if-the-GRUB-is-locked-d.patch new file mode 100644 index 00000000..e630d332 --- /dev/null +++ b/boot/grub2/0036-kern-lockdown-Set-a-variable-if-the-GRUB-is-locked-d.patch @@ -0,0 +1,57 @@ +From d90367471779c240e002e62edfb6b31fc85b4908 Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Tue, 2 Feb 2021 19:59:48 +0100 +Subject: [PATCH] kern/lockdown: Set a variable if the GRUB is locked down + +It may be useful for scripts to determine whether the GRUB is locked +down or not. Add the lockdown variable which is set to "y" when the GRUB +is locked down. + +Suggested-by: Dimitri John Ledkov +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + docs/grub.texi | 3 +++ + grub-core/kern/lockdown.c | 4 ++++ + 2 files changed, 7 insertions(+) + +diff --git a/docs/grub.texi b/docs/grub.texi +index a25459f..bdbb329 100644 +--- a/docs/grub.texi ++++ b/docs/grub.texi +@@ -5803,6 +5803,9 @@ The GRUB can be locked down when booted on a secure boot environment, for exampl + if the UEFI secure boot is enabled. On a locked down configuration, the GRUB will + be restricted and some operations/commands cannot be executed. + ++The @samp{lockdown} variable is set to @samp{y} when the GRUB is locked down. ++Otherwise it does not exit. ++ + @node Platform limitations + @chapter Platform limitations + +diff --git a/grub-core/kern/lockdown.c b/grub-core/kern/lockdown.c +index 1e56c0b..0bc70fd 100644 +--- a/grub-core/kern/lockdown.c ++++ b/grub-core/kern/lockdown.c +@@ -18,6 +18,7 @@ + */ + + #include ++#include + #include + #include + #include +@@ -71,6 +72,9 @@ grub_lockdown (void) + lockdown = GRUB_LOCKDOWN_ENABLED; + + grub_verifier_register (&lockdown_verifier); ++ ++ grub_env_set ("lockdown", "y"); ++ grub_env_export ("lockdown"); + } + + int +-- +2.14.2 + diff --git a/boot/grub2/0037-efi-Lockdown-the-GRUB-when-the-UEFI-Secure-Boot-is-e.patch b/boot/grub2/0037-efi-Lockdown-the-GRUB-when-the-UEFI-Secure-Boot-is-e.patch new file mode 100644 index 00000000..b55772de --- /dev/null +++ b/boot/grub2/0037-efi-Lockdown-the-GRUB-when-the-UEFI-Secure-Boot-is-e.patch @@ -0,0 +1,49 @@ +From 98b00a403cbf2ba6833d1ac0499871b27a08eb77 Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Mon, 28 Sep 2020 20:08:29 +0200 +Subject: [PATCH] efi: Lockdown the GRUB when the UEFI Secure Boot is enabled + +If the UEFI Secure Boot is enabled then the GRUB must be locked down +to prevent executing code that can potentially be used to subvert its +verification mechanisms. + +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/kern/efi/init.c | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +diff --git a/grub-core/kern/efi/init.c b/grub-core/kern/efi/init.c +index b683bec..1333465 100644 +--- a/grub-core/kern/efi/init.c ++++ b/grub-core/kern/efi/init.c +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -40,8 +41,15 @@ grub_efi_init (void) + /* Initialize the memory management system. */ + grub_efi_mm_init (); + +- /* Register the shim_lock verifier if UEFI Secure Boot is enabled. */ +- grub_shim_lock_verifier_setup (); ++ /* ++ * Lockdown the GRUB and register the shim_lock verifier ++ * if the UEFI Secure Boot is enabled. ++ */ ++ if (grub_efi_get_secureboot () == GRUB_EFI_SECUREBOOT_MODE_ENABLED) ++ { ++ grub_lockdown (); ++ grub_shim_lock_verifier_setup (); ++ } + + efi_call_4 (grub_efi_system_table->boot_services->set_watchdog_timer, + 0, 0, 0, NULL); +-- +2.14.2 + diff --git a/boot/grub2/0038-efi-Use-grub_is_lockdown-instead-of-hardcoding-a-dis.patch b/boot/grub2/0038-efi-Use-grub_is_lockdown-instead-of-hardcoding-a-dis.patch new file mode 100644 index 00000000..c551822b --- /dev/null +++ b/boot/grub2/0038-efi-Use-grub_is_lockdown-instead-of-hardcoding-a-dis.patch @@ -0,0 +1,232 @@ +From 8f73052885892bc0dbc01e297f79d7cf4925e491 Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Mon, 28 Sep 2020 20:08:33 +0200 +Subject: [PATCH] efi: Use grub_is_lockdown() instead of hardcoding a disabled + modules list + +Now the GRUB can check if it has been locked down and this can be used to +prevent executing commands that can be utilized to circumvent the UEFI +Secure Boot mechanisms. So, instead of hardcoding a list of modules that +have to be disabled, prevent the usage of commands that can be dangerous. + +This not only allows the commands to be disabled on other platforms, but +also properly separate the concerns. Since the shim_lock verifier logic +should be only about preventing to run untrusted binaries and not about +defining these kind of policies. + +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + docs/grub.texi | 15 +++++++++------ + grub-core/commands/i386/wrmsr.c | 5 +++-- + grub-core/commands/iorw.c | 19 ++++++++++--------- + grub-core/commands/memrw.c | 19 ++++++++++--------- + grub-core/kern/efi/sb.c | 41 ----------------------------------------- + 5 files changed, 32 insertions(+), 67 deletions(-) + +diff --git a/docs/grub.texi b/docs/grub.texi +index bdbb329..bbe60a4 100644 +--- a/docs/grub.texi ++++ b/docs/grub.texi +@@ -5256,6 +5256,9 @@ only applies to the particular cpu/core/thread that runs the command. + Also, if you specify a reserved or unimplemented MSR address, it will + cause a general protection exception (which is not currently being handled) + and the system will reboot. ++ ++Note: The command is not allowed when lockdown is enforced (@pxref{Lockdown}). ++ This is done to prevent subverting various security mechanisms. + @end deffn + + @node xen_hypervisor +@@ -5752,12 +5755,12 @@ boot and the shim. This functionality is provided by the shim_lock verifier. It + is built into the @file{core.img} and is registered if the UEFI secure boot is + enabled. + +-All modules not stored in the @file{core.img} and the ACPI tables for the +-@command{acpi} command have to be signed, e.g. using PGP. Additionally, the +-@command{iorw}, the @command{memrw} and the @command{wrmsr} commands are +-prohibited if the UEFI secure boot is enabled. This is done due to +-security reasons. All above mentioned requirements are enforced by the +-shim_lock verifier logic. ++All GRUB modules not stored in the @file{core.img}, OS kernels, ACPI tables, ++Device Trees, etc. have to be signed, e.g, using PGP. Additionally, the commands ++that can be used to subvert the UEFI secure boot mechanism, such as @command{iorw} ++and @command{memrw} will not be available when the UEFI secure boot is enabled. ++This is done for security reasons and are enforced by the GRUB Lockdown mechanism ++(@pxref{Lockdown}). + + @node Measured Boot + @section Measuring boot components +diff --git a/grub-core/commands/i386/wrmsr.c b/grub-core/commands/i386/wrmsr.c +index 9c5e510..56a29c2 100644 +--- a/grub-core/commands/i386/wrmsr.c ++++ b/grub-core/commands/i386/wrmsr.c +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -83,8 +84,8 @@ grub_cmd_msr_write (grub_command_t cmd __attribute__ ((unused)), int argc, char + + GRUB_MOD_INIT(wrmsr) + { +- cmd_write = grub_register_command ("wrmsr", grub_cmd_msr_write, N_("ADDR VALUE"), +- N_("Write a value to a CPU model specific register.")); ++ cmd_write = grub_register_command_lockdown ("wrmsr", grub_cmd_msr_write, N_("ADDR VALUE"), ++ N_("Write a value to a CPU model specific register.")); + } + + GRUB_MOD_FINI(wrmsr) +diff --git a/grub-core/commands/iorw.c b/grub-core/commands/iorw.c +index a0c164e..584baec 100644 +--- a/grub-core/commands/iorw.c ++++ b/grub-core/commands/iorw.c +@@ -23,6 +23,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -131,17 +132,17 @@ GRUB_MOD_INIT(memrw) + N_("PORT"), N_("Read 32-bit value from PORT."), + options); + cmd_write_byte = +- grub_register_command ("outb", grub_cmd_write, +- N_("PORT VALUE [MASK]"), +- N_("Write 8-bit VALUE to PORT.")); ++ grub_register_command_lockdown ("outb", grub_cmd_write, ++ N_("PORT VALUE [MASK]"), ++ N_("Write 8-bit VALUE to PORT.")); + cmd_write_word = +- grub_register_command ("outw", grub_cmd_write, +- N_("PORT VALUE [MASK]"), +- N_("Write 16-bit VALUE to PORT.")); ++ grub_register_command_lockdown ("outw", grub_cmd_write, ++ N_("PORT VALUE [MASK]"), ++ N_("Write 16-bit VALUE to PORT.")); + cmd_write_dword = +- grub_register_command ("outl", grub_cmd_write, +- N_("ADDR VALUE [MASK]"), +- N_("Write 32-bit VALUE to PORT.")); ++ grub_register_command_lockdown ("outl", grub_cmd_write, ++ N_("ADDR VALUE [MASK]"), ++ N_("Write 32-bit VALUE to PORT.")); + } + + GRUB_MOD_FINI(memrw) +diff --git a/grub-core/commands/memrw.c b/grub-core/commands/memrw.c +index 98769ea..d401a6d 100644 +--- a/grub-core/commands/memrw.c ++++ b/grub-core/commands/memrw.c +@@ -22,6 +22,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -133,17 +134,17 @@ GRUB_MOD_INIT(memrw) + N_("ADDR"), N_("Read 32-bit value from ADDR."), + options); + cmd_write_byte = +- grub_register_command ("write_byte", grub_cmd_write, +- N_("ADDR VALUE [MASK]"), +- N_("Write 8-bit VALUE to ADDR.")); ++ grub_register_command_lockdown ("write_byte", grub_cmd_write, ++ N_("ADDR VALUE [MASK]"), ++ N_("Write 8-bit VALUE to ADDR.")); + cmd_write_word = +- grub_register_command ("write_word", grub_cmd_write, +- N_("ADDR VALUE [MASK]"), +- N_("Write 16-bit VALUE to ADDR.")); ++ grub_register_command_lockdown ("write_word", grub_cmd_write, ++ N_("ADDR VALUE [MASK]"), ++ N_("Write 16-bit VALUE to ADDR.")); + cmd_write_dword = +- grub_register_command ("write_dword", grub_cmd_write, +- N_("ADDR VALUE [MASK]"), +- N_("Write 32-bit VALUE to ADDR.")); ++ grub_register_command_lockdown ("write_dword", grub_cmd_write, ++ N_("ADDR VALUE [MASK]"), ++ N_("Write 32-bit VALUE to ADDR.")); + } + + GRUB_MOD_FINI(memrw) +diff --git a/grub-core/kern/efi/sb.c b/grub-core/kern/efi/sb.c +index ce3b7f6..5d7210a 100644 +--- a/grub-core/kern/efi/sb.c ++++ b/grub-core/kern/efi/sb.c +@@ -30,9 +30,6 @@ + + static grub_efi_guid_t shim_lock_guid = GRUB_EFI_SHIM_LOCK_GUID; + +-/* List of modules which cannot be loaded if UEFI secure boot mode is enabled. */ +-static const char * const disabled_mods[] = {"iorw", "memrw", NULL}; +- + /* + * Determine whether we're in secure boot mode. + * +@@ -121,53 +118,15 @@ shim_lock_verifier_init (grub_file_t io __attribute__ ((unused)), + void **context __attribute__ ((unused)), + enum grub_verify_flags *flags) + { +- const char *b, *e; +- int i; +- + *flags = GRUB_VERIFY_FLAGS_SKIP_VERIFICATION; + + switch (type & GRUB_FILE_TYPE_MASK) + { +- case GRUB_FILE_TYPE_GRUB_MODULE: +- /* Establish GRUB module name. */ +- b = grub_strrchr (io->name, '/'); +- e = grub_strrchr (io->name, '.'); +- +- b = b ? (b + 1) : io->name; +- e = e ? e : io->name + grub_strlen (io->name); +- e = (e > b) ? e : io->name + grub_strlen (io->name); +- +- for (i = 0; disabled_mods[i]; i++) +- if (!grub_strncmp (b, disabled_mods[i], grub_strlen (b) - grub_strlen (e))) +- { +- grub_error (GRUB_ERR_ACCESS_DENIED, +- N_("module cannot be loaded in UEFI secure boot mode: %s"), +- io->name); +- return GRUB_ERR_ACCESS_DENIED; +- } +- +- /* Fall through. */ +- +- case GRUB_FILE_TYPE_ACPI_TABLE: +- case GRUB_FILE_TYPE_DEVICE_TREE_IMAGE: +- *flags = GRUB_VERIFY_FLAGS_DEFER_AUTH; +- +- return GRUB_ERR_NONE; +- + case GRUB_FILE_TYPE_LINUX_KERNEL: + case GRUB_FILE_TYPE_MULTIBOOT_KERNEL: + case GRUB_FILE_TYPE_BSD_KERNEL: + case GRUB_FILE_TYPE_XNU_KERNEL: + case GRUB_FILE_TYPE_PLAN9_KERNEL: +- for (i = 0; disabled_mods[i]; i++) +- if (grub_dl_get (disabled_mods[i])) +- { +- grub_error (GRUB_ERR_ACCESS_DENIED, +- N_("cannot boot due to dangerous module in memory: %s"), +- disabled_mods[i]); +- return GRUB_ERR_ACCESS_DENIED; +- } +- + *flags = GRUB_VERIFY_FLAGS_SINGLE_CHUNK; + + /* Fall through. */ +-- +2.14.2 + diff --git a/boot/grub2/0039-acpi-Don-t-register-the-acpi-command-when-locked-dow.patch b/boot/grub2/0039-acpi-Don-t-register-the-acpi-command-when-locked-dow.patch new file mode 100644 index 00000000..b258b517 --- /dev/null +++ b/boot/grub2/0039-acpi-Don-t-register-the-acpi-command-when-locked-dow.patch @@ -0,0 +1,76 @@ +From 3e8e4c0549240fa209acffceb473e1e509b50c95 Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Mon, 28 Sep 2020 20:08:41 +0200 +Subject: [PATCH] acpi: Don't register the acpi command when locked down +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The command is not allowed when lockdown is enforced. Otherwise an +attacker can instruct the GRUB to load an SSDT table to overwrite +the kernel lockdown configuration and later load and execute +unsigned code. + +Fixes: CVE-2020-14372 + +Reported-by: Máté Kukri +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + docs/grub.texi | 5 +++++ + grub-core/commands/acpi.c | 15 ++++++++------- + 2 files changed, 13 insertions(+), 7 deletions(-) + +diff --git a/docs/grub.texi b/docs/grub.texi +index bbe60a4..98592d3 100644 +--- a/docs/grub.texi ++++ b/docs/grub.texi +@@ -3986,6 +3986,11 @@ Normally, this command will replace the Root System Description Pointer + (RSDP) in the Extended BIOS Data Area to point to the new tables. If the + @option{--no-ebda} option is used, the new tables will be known only to + GRUB, but may be used by GRUB's EFI emulation. ++ ++Note: The command is not allowed when lockdown is enforced (@pxref{Lockdown}). ++ Otherwise an attacker can instruct the GRUB to load an SSDT table to ++ overwrite the kernel lockdown configuration and later load and execute ++ unsigned code. + @end deffn + + +diff --git a/grub-core/commands/acpi.c b/grub-core/commands/acpi.c +index 5a1499a..1215f2a 100644 +--- a/grub-core/commands/acpi.c ++++ b/grub-core/commands/acpi.c +@@ -27,6 +27,7 @@ + #include + #include + #include ++#include + + #ifdef GRUB_MACHINE_EFI + #include +@@ -775,13 +776,13 @@ static grub_extcmd_t cmd; + + GRUB_MOD_INIT(acpi) + { +- cmd = grub_register_extcmd ("acpi", grub_cmd_acpi, 0, +- N_("[-1|-2] [--exclude=TABLE1,TABLE2|" +- "--load-only=TABLE1,TABLE2] FILE1" +- " [FILE2] [...]"), +- N_("Load host ACPI tables and tables " +- "specified by arguments."), +- options); ++ cmd = grub_register_extcmd_lockdown ("acpi", grub_cmd_acpi, 0, ++ N_("[-1|-2] [--exclude=TABLE1,TABLE2|" ++ "--load-only=TABLE1,TABLE2] FILE1" ++ " [FILE2] [...]"), ++ N_("Load host ACPI tables and tables " ++ "specified by arguments."), ++ options); + } + + GRUB_MOD_FINI(acpi) +-- +2.14.2 + diff --git a/boot/grub2/0040-mmap-Don-t-register-cutmem-and-badram-commands-when-.patch b/boot/grub2/0040-mmap-Don-t-register-cutmem-and-badram-commands-when-.patch new file mode 100644 index 00000000..e7376e6a --- /dev/null +++ b/boot/grub2/0040-mmap-Don-t-register-cutmem-and-badram-commands-when-.patch @@ -0,0 +1,70 @@ +From d298b41f90cbf1f2e5a10e29daa1fc92ddee52c9 Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Wed, 14 Oct 2020 16:33:42 +0200 +Subject: [PATCH] mmap: Don't register cutmem and badram commands when lockdown + is enforced + +The cutmem and badram commands can be used to remove EFI memory regions +and potentially disable the UEFI Secure Boot. Prevent the commands to be +registered if the GRUB is locked down. + +Fixes: CVE-2020-27779 + +Reported-by: Teddy Reed +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + docs/grub.texi | 4 ++++ + grub-core/mmap/mmap.c | 13 +++++++------ + 2 files changed, 11 insertions(+), 6 deletions(-) + +diff --git a/docs/grub.texi b/docs/grub.texi +index 98592d3..f2fe149 100644 +--- a/docs/grub.texi ++++ b/docs/grub.texi +@@ -4051,6 +4051,10 @@ this page is to be filtered. This syntax makes it easy to represent patterns + that are often result of memory damage, due to physical distribution of memory + cells. + ++Note: The command is not allowed when lockdown is enforced (@pxref{Lockdown}). ++ This prevents removing EFI memory regions to potentially subvert the ++ security mechanisms provided by the UEFI secure boot. ++ + @node blocklist + @subsection blocklist + +diff --git a/grub-core/mmap/mmap.c b/grub-core/mmap/mmap.c +index 57b4e9a..7ebf32e 100644 +--- a/grub-core/mmap/mmap.c ++++ b/grub-core/mmap/mmap.c +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -534,12 +535,12 @@ static grub_command_t cmd, cmd_cut; + + GRUB_MOD_INIT(mmap) + { +- cmd = grub_register_command ("badram", grub_cmd_badram, +- N_("ADDR1,MASK1[,ADDR2,MASK2[,...]]"), +- N_("Declare memory regions as faulty (badram).")); +- cmd_cut = grub_register_command ("cutmem", grub_cmd_cutmem, +- N_("FROM[K|M|G] TO[K|M|G]"), +- N_("Remove any memory regions in specified range.")); ++ cmd = grub_register_command_lockdown ("badram", grub_cmd_badram, ++ N_("ADDR1,MASK1[,ADDR2,MASK2[,...]]"), ++ N_("Declare memory regions as faulty (badram).")); ++ cmd_cut = grub_register_command_lockdown ("cutmem", grub_cmd_cutmem, ++ N_("FROM[K|M|G] TO[K|M|G]"), ++ N_("Remove any memory regions in specified range.")); + + } + +-- +2.14.2 + diff --git a/boot/grub2/0041-commands-Restrict-commands-that-can-load-BIOS-or-DT-.patch b/boot/grub2/0041-commands-Restrict-commands-that-can-load-BIOS-or-DT-.patch new file mode 100644 index 00000000..1980d6d9 --- /dev/null +++ b/boot/grub2/0041-commands-Restrict-commands-that-can-load-BIOS-or-DT-.patch @@ -0,0 +1,105 @@ +From 468a5699b249fe6816b4e7e86c5dc9d325c9b09e Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Wed, 24 Feb 2021 09:00:05 +0100 +Subject: [PATCH] commands: Restrict commands that can load BIOS or DT blobs + when locked down + +There are some more commands that should be restricted when the GRUB is +locked down. Following is the list of commands and reasons to restrict: + + * fakebios: creates BIOS-like structures for backward compatibility with + existing OSes. This should not be allowed when locked down. + + * loadbios: reads a BIOS dump from storage and loads it. This action + should not be allowed when locked down. + + * devicetree: loads a Device Tree blob and passes it to the OS. It replaces + any Device Tree provided by the firmware. This also should + not be allowed when locked down. + +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + docs/grub.texi | 3 +++ + grub-core/commands/efi/loadbios.c | 16 ++++++++-------- + grub-core/loader/arm/linux.c | 6 +++--- + grub-core/loader/efi/fdt.c | 4 ++-- + 4 files changed, 16 insertions(+), 13 deletions(-) + +diff --git a/docs/grub.texi b/docs/grub.texi +index f2fe149..79f58c5 100644 +--- a/docs/grub.texi ++++ b/docs/grub.texi +@@ -4235,6 +4235,9 @@ hour, minute, and second unchanged. + Load a device tree blob (.dtb) from a filesystem, for later use by a Linux + kernel. Does not perform merging with any device tree supplied by firmware, + but rather replaces it completely. ++ ++Note: The command is not allowed when lockdown is enforced (@pxref{Lockdown}). ++ This is done to prevent subverting various security mechanisms. + @ref{GNU/Linux}. + @end deffn + +diff --git a/grub-core/commands/efi/loadbios.c b/grub-core/commands/efi/loadbios.c +index d41d521..5c7725f 100644 +--- a/grub-core/commands/efi/loadbios.c ++++ b/grub-core/commands/efi/loadbios.c +@@ -205,14 +205,14 @@ static grub_command_t cmd_fakebios, cmd_loadbios; + + GRUB_MOD_INIT(loadbios) + { +- cmd_fakebios = grub_register_command ("fakebios", grub_cmd_fakebios, +- 0, N_("Create BIOS-like structures for" +- " backward compatibility with" +- " existing OS.")); +- +- cmd_loadbios = grub_register_command ("loadbios", grub_cmd_loadbios, +- N_("BIOS_DUMP [INT10_DUMP]"), +- N_("Load BIOS dump.")); ++ cmd_fakebios = grub_register_command_lockdown ("fakebios", grub_cmd_fakebios, ++ 0, N_("Create BIOS-like structures for" ++ " backward compatibility with" ++ " existing OS.")); ++ ++ cmd_loadbios = grub_register_command_lockdown ("loadbios", grub_cmd_loadbios, ++ N_("BIOS_DUMP [INT10_DUMP]"), ++ N_("Load BIOS dump.")); + } + + GRUB_MOD_FINI(loadbios) +diff --git a/grub-core/loader/arm/linux.c b/grub-core/loader/arm/linux.c +index d70c174..ed23dc7 100644 +--- a/grub-core/loader/arm/linux.c ++++ b/grub-core/loader/arm/linux.c +@@ -493,9 +493,9 @@ GRUB_MOD_INIT (linux) + 0, N_("Load Linux.")); + cmd_initrd = grub_register_command ("initrd", grub_cmd_initrd, + 0, N_("Load initrd.")); +- cmd_devicetree = grub_register_command ("devicetree", grub_cmd_devicetree, +- /* TRANSLATORS: DTB stands for device tree blob. */ +- 0, N_("Load DTB file.")); ++ cmd_devicetree = grub_register_command_lockdown ("devicetree", grub_cmd_devicetree, ++ /* TRANSLATORS: DTB stands for device tree blob. */ ++ 0, N_("Load DTB file.")); + my_mod = mod; + current_fdt = (const void *) grub_arm_firmware_get_boot_data (); + machine_type = grub_arm_firmware_get_machine_type (); +diff --git a/grub-core/loader/efi/fdt.c b/grub-core/loader/efi/fdt.c +index ee9c559..003d07c 100644 +--- a/grub-core/loader/efi/fdt.c ++++ b/grub-core/loader/efi/fdt.c +@@ -165,8 +165,8 @@ static grub_command_t cmd_devicetree; + GRUB_MOD_INIT (fdt) + { + cmd_devicetree = +- grub_register_command ("devicetree", grub_cmd_devicetree, 0, +- N_("Load DTB file.")); ++ grub_register_command_lockdown ("devicetree", grub_cmd_devicetree, 0, ++ N_("Load DTB file.")); + } + + GRUB_MOD_FINI (fdt) +-- +2.14.2 + diff --git a/boot/grub2/0042-commands-setpci-Restrict-setpci-command-when-locked-.patch b/boot/grub2/0042-commands-setpci-Restrict-setpci-command-when-locked-.patch new file mode 100644 index 00000000..dcddfe19 --- /dev/null +++ b/boot/grub2/0042-commands-setpci-Restrict-setpci-command-when-locked-.patch @@ -0,0 +1,37 @@ +From 58b77d4069823b44c5fa916fa8ddfc9c4cd51e02 Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Wed, 24 Feb 2021 22:59:59 +0100 +Subject: [PATCH] commands/setpci: Restrict setpci command when locked down + +This command can set PCI devices register values, which makes it dangerous +in a locked down configuration. Restrict it so can't be used on this setup. + +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/commands/setpci.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/grub-core/commands/setpci.c b/grub-core/commands/setpci.c +index d5bc97d..fa2ba7d 100644 +--- a/grub-core/commands/setpci.c ++++ b/grub-core/commands/setpci.c +@@ -329,10 +329,10 @@ static grub_extcmd_t cmd; + + GRUB_MOD_INIT(setpci) + { +- cmd = grub_register_extcmd ("setpci", grub_cmd_setpci, 0, +- N_("[-s POSITION] [-d DEVICE] [-v VAR] " +- "REGISTER[=VALUE[:MASK]]"), +- N_("Manipulate PCI devices."), options); ++ cmd = grub_register_extcmd_lockdown ("setpci", grub_cmd_setpci, 0, ++ N_("[-s POSITION] [-d DEVICE] [-v VAR] " ++ "REGISTER[=VALUE[:MASK]]"), ++ N_("Manipulate PCI devices."), options); + } + + GRUB_MOD_FINI(setpci) +-- +2.14.2 + diff --git a/boot/grub2/0043-commands-hdparm-Restrict-hdparm-command-when-locked-.patch b/boot/grub2/0043-commands-hdparm-Restrict-hdparm-command-when-locked-.patch new file mode 100644 index 00000000..3c26c860 --- /dev/null +++ b/boot/grub2/0043-commands-hdparm-Restrict-hdparm-command-when-locked-.patch @@ -0,0 +1,35 @@ +From 5c97492a29c6063567b65ed1a069f5e6f4e211f0 Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Wed, 24 Feb 2021 12:59:29 +0100 +Subject: [PATCH] commands/hdparm: Restrict hdparm command when locked down + +The command can be used to get/set ATA disk parameters. Some of these can +be dangerous since change the disk behavior. Restrict it when locked down. + +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/commands/hdparm.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/grub-core/commands/hdparm.c b/grub-core/commands/hdparm.c +index d3fa966..2e2319e 100644 +--- a/grub-core/commands/hdparm.c ++++ b/grub-core/commands/hdparm.c +@@ -436,9 +436,9 @@ static grub_extcmd_t cmd; + + GRUB_MOD_INIT(hdparm) + { +- cmd = grub_register_extcmd ("hdparm", grub_cmd_hdparm, 0, +- N_("[OPTIONS] DISK"), +- N_("Get/set ATA disk parameters."), options); ++ cmd = grub_register_extcmd_lockdown ("hdparm", grub_cmd_hdparm, 0, ++ N_("[OPTIONS] DISK"), ++ N_("Get/set ATA disk parameters."), options); + } + + GRUB_MOD_FINI(hdparm) +-- +2.14.2 + diff --git a/boot/grub2/0044-gdb-Restrict-GDB-access-when-locked-down.patch b/boot/grub2/0044-gdb-Restrict-GDB-access-when-locked-down.patch new file mode 100644 index 00000000..c671ad88 --- /dev/null +++ b/boot/grub2/0044-gdb-Restrict-GDB-access-when-locked-down.patch @@ -0,0 +1,62 @@ +From 508270838998f151a82e9c13e7cb8a470a2dc23d Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Wed, 24 Feb 2021 15:03:26 +0100 +Subject: [PATCH] gdb: Restrict GDB access when locked down + +The gdbstub* commands allow to start and control a GDB stub running on +local host that can be used to connect from a remote debugger. Restrict +this functionality when the GRUB is locked down. + +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/gdb/gdb.c | 32 ++++++++++++++++++-------------- + 1 file changed, 18 insertions(+), 14 deletions(-) + +diff --git a/grub-core/gdb/gdb.c b/grub-core/gdb/gdb.c +index 847a1e1..1818cb6 100644 +--- a/grub-core/gdb/gdb.c ++++ b/grub-core/gdb/gdb.c +@@ -75,20 +75,24 @@ static grub_command_t cmd, cmd_stop, cmd_break; + GRUB_MOD_INIT (gdb) + { + grub_gdb_idtinit (); +- cmd = grub_register_command ("gdbstub", grub_cmd_gdbstub, +- N_("PORT"), +- /* TRANSLATORS: GDB stub is a small part of +- GDB functionality running on local host +- which allows remote debugger to +- connect to it. */ +- N_("Start GDB stub on given port")); +- cmd_break = grub_register_command ("gdbstub_break", grub_cmd_gdb_break, +- /* TRANSLATORS: this refers to triggering +- a breakpoint so that the user will land +- into GDB. */ +- 0, N_("Break into GDB")); +- cmd_stop = grub_register_command ("gdbstub_stop", grub_cmd_gdbstop, +- 0, N_("Stop GDB stub")); ++ cmd = grub_register_command_lockdown ("gdbstub", grub_cmd_gdbstub, ++ N_("PORT"), ++ /* ++ * TRANSLATORS: GDB stub is a small part of ++ * GDB functionality running on local host ++ * which allows remote debugger to ++ * connect to it. ++ */ ++ N_("Start GDB stub on given port")); ++ cmd_break = grub_register_command_lockdown ("gdbstub_break", grub_cmd_gdb_break, ++ /* ++ * TRANSLATORS: this refers to triggering ++ * a breakpoint so that the user will land ++ * into GDB. ++ */ ++ 0, N_("Break into GDB")); ++ cmd_stop = grub_register_command_lockdown ("gdbstub_stop", grub_cmd_gdbstop, ++ 0, N_("Stop GDB stub")); + } + + GRUB_MOD_FINI (gdb) +-- +2.14.2 + diff --git a/boot/grub2/0045-loader-xnu-Don-t-allow-loading-extension-and-package.patch b/boot/grub2/0045-loader-xnu-Don-t-allow-loading-extension-and-package.patch new file mode 100644 index 00000000..6548c0d6 --- /dev/null +++ b/boot/grub2/0045-loader-xnu-Don-t-allow-loading-extension-and-package.patch @@ -0,0 +1,61 @@ +From 9c5565135f12400a925ee901b25984e7af4442f5 Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Wed, 24 Feb 2021 14:44:38 +0100 +Subject: [PATCH] loader/xnu: Don't allow loading extension and packages when + locked down + +The shim_lock verifier validates the XNU kernels but no its extensions +and packages. Prevent these to be loaded when the GRUB is locked down. + +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/loader/xnu.c | 31 +++++++++++++++++-------------- + 1 file changed, 17 insertions(+), 14 deletions(-) + +diff --git a/grub-core/loader/xnu.c b/grub-core/loader/xnu.c +index 9ae4ceb..44fd5a9 100644 +--- a/grub-core/loader/xnu.c ++++ b/grub-core/loader/xnu.c +@@ -1485,20 +1485,23 @@ GRUB_MOD_INIT(xnu) + N_("Load XNU image.")); + cmd_kernel64 = grub_register_command ("xnu_kernel64", grub_cmd_xnu_kernel64, + 0, N_("Load 64-bit XNU image.")); +- cmd_mkext = grub_register_command ("xnu_mkext", grub_cmd_xnu_mkext, 0, +- N_("Load XNU extension package.")); +- cmd_kext = grub_register_command ("xnu_kext", grub_cmd_xnu_kext, 0, +- N_("Load XNU extension.")); +- cmd_kextdir = grub_register_command ("xnu_kextdir", grub_cmd_xnu_kextdir, +- /* TRANSLATORS: OSBundleRequired is a +- variable name in xnu extensions +- manifests. It behaves mostly like +- GNU/Linux runlevels. +- */ +- N_("DIRECTORY [OSBundleRequired]"), +- /* TRANSLATORS: There are many extensions +- in extension directory. */ +- N_("Load XNU extension directory.")); ++ cmd_mkext = grub_register_command_lockdown ("xnu_mkext", grub_cmd_xnu_mkext, 0, ++ N_("Load XNU extension package.")); ++ cmd_kext = grub_register_command_lockdown ("xnu_kext", grub_cmd_xnu_kext, 0, ++ N_("Load XNU extension.")); ++ cmd_kextdir = grub_register_command_lockdown ("xnu_kextdir", grub_cmd_xnu_kextdir, ++ /* ++ * TRANSLATORS: OSBundleRequired is ++ * a variable name in xnu extensions ++ * manifests. It behaves mostly like ++ * GNU/Linux runlevels. ++ */ ++ N_("DIRECTORY [OSBundleRequired]"), ++ /* ++ * TRANSLATORS: There are many extensions ++ * in extension directory. ++ */ ++ N_("Load XNU extension directory.")); + cmd_ramdisk = grub_register_command ("xnu_ramdisk", grub_cmd_xnu_ramdisk, 0, + /* TRANSLATORS: ramdisk here isn't identifier. It can be translated. */ + N_("Load XNU ramdisk. " +-- +2.14.2 + diff --git a/boot/grub2/0046-docs-Document-the-cutmem-command.patch b/boot/grub2/0046-docs-Document-the-cutmem-command.patch new file mode 100644 index 00000000..978aeabc --- /dev/null +++ b/boot/grub2/0046-docs-Document-the-cutmem-command.patch @@ -0,0 +1,65 @@ +From f05e79a0143beb2d9a482a3ebf4fe0ce76778122 Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Sat, 7 Nov 2020 01:03:18 +0100 +Subject: [PATCH] docs: Document the cutmem command + +The command is not present in the docs/grub.texi user documentation. + +Reported-by: Daniel Kiper +Signed-off-by: Javier Martinez Canillas +Signed-off-by: Daniel Kiper +Reviewed-by: Javier Martinez Canillas +Signed-off-by: Stefan Sørensen +--- + docs/grub.texi | 21 +++++++++++++++++++++ + 1 file changed, 21 insertions(+) + +diff --git a/docs/grub.texi b/docs/grub.texi +index 79f58c5..8518cc0 100644 +--- a/docs/grub.texi ++++ b/docs/grub.texi +@@ -3892,6 +3892,7 @@ you forget a command, you can run the command @command{help} + * cpuid:: Check for CPU features + * crc:: Compute or check CRC32 checksums + * cryptomount:: Mount a crypto device ++* cutmem:: Remove memory regions + * date:: Display or set current date and time + * devicetree:: Load a device tree blob + * distrust:: Remove a pubkey from trusted keys +@@ -4051,6 +4052,8 @@ this page is to be filtered. This syntax makes it easy to represent patterns + that are often result of memory damage, due to physical distribution of memory + cells. + ++The command is similar to @command{cutmem} command. ++ + Note: The command is not allowed when lockdown is enforced (@pxref{Lockdown}). + This prevents removing EFI memory regions to potentially subvert the + security mechanisms provided by the UEFI secure boot. +@@ -4214,6 +4217,24 @@ GRUB suports devices encrypted using LUKS and geli. Note that necessary modules + be used. + @end deffn + ++@node cutmem ++@subsection cutmem ++ ++@deffn Command cutmem from[K|M|G] to[K|M|G] ++Remove any memory regions in specified range. ++@end deffn ++ ++This command notifies the memory manager that specified regions of RAM ought to ++be filtered out. This remains in effect after a payload kernel has been loaded ++by GRUB, as long as the loaded kernel obtains its memory map from GRUB. Kernels ++that support this include Linux, GNU Mach, the kernel of FreeBSD and Multiboot ++kernels in general. ++ ++The command is similar to @command{badram} command. ++ ++Note: The command is not allowed when lockdown is enforced (@pxref{Lockdown}). ++ This prevents removing EFI memory regions to potentially subvert the ++ security mechanisms provided by the UEFI secure boot. + + @node date + @subsection date +-- +2.14.2 + diff --git a/boot/grub2/0047-dl-Only-allow-unloading-modules-that-are-not-depende.patch b/boot/grub2/0047-dl-Only-allow-unloading-modules-that-are-not-depende.patch new file mode 100644 index 00000000..3bb02ad4 --- /dev/null +++ b/boot/grub2/0047-dl-Only-allow-unloading-modules-that-are-not-depende.patch @@ -0,0 +1,87 @@ +From 7630ec5397fe418276b360f9011934b8c034936c Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Tue, 29 Sep 2020 14:08:55 +0200 +Subject: [PATCH] dl: Only allow unloading modules that are not dependencies + +When a module is attempted to be removed its reference counter is always +decremented. This means that repeated rmmod invocations will cause the +module to be unloaded even if another module depends on it. + +This may lead to a use-after-free scenario allowing an attacker to execute +arbitrary code and by-pass the UEFI Secure Boot protection. + +While being there, add the extern keyword to some function declarations in +that header file. + +Fixes: CVE-2020-25632 + +Reported-by: Chris Coulson +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/commands/minicmd.c | 7 +++++-- + grub-core/kern/dl.c | 9 +++++++++ + include/grub/dl.h | 8 +++++--- + 3 files changed, 19 insertions(+), 5 deletions(-) + +diff --git a/grub-core/commands/minicmd.c b/grub-core/commands/minicmd.c +index 6bbce31..fa49893 100644 +--- a/grub-core/commands/minicmd.c ++++ b/grub-core/commands/minicmd.c +@@ -140,8 +140,11 @@ grub_mini_cmd_rmmod (struct grub_command *cmd __attribute__ ((unused)), + if (grub_dl_is_persistent (mod)) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "cannot unload persistent module"); + +- if (grub_dl_unref (mod) <= 0) +- grub_dl_unload (mod); ++ if (grub_dl_ref_count (mod) > 1) ++ return grub_error (GRUB_ERR_BAD_ARGUMENT, "cannot unload referenced module"); ++ ++ grub_dl_unref (mod); ++ grub_dl_unload (mod); + + return 0; + } +diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c +index 48eb5e7..48f8a79 100644 +--- a/grub-core/kern/dl.c ++++ b/grub-core/kern/dl.c +@@ -549,6 +549,15 @@ grub_dl_unref (grub_dl_t mod) + return --mod->ref_count; + } + ++int ++grub_dl_ref_count (grub_dl_t mod) ++{ ++ if (mod == NULL) ++ return 0; ++ ++ return mod->ref_count; ++} ++ + static void + grub_dl_flush_cache (grub_dl_t mod) + { +diff --git a/include/grub/dl.h b/include/grub/dl.h +index f03c035..b3753c9 100644 +--- a/include/grub/dl.h ++++ b/include/grub/dl.h +@@ -203,9 +203,11 @@ grub_dl_t EXPORT_FUNC(grub_dl_load) (const char *name); + grub_dl_t grub_dl_load_core (void *addr, grub_size_t size); + grub_dl_t EXPORT_FUNC(grub_dl_load_core_noinit) (void *addr, grub_size_t size); + int EXPORT_FUNC(grub_dl_unload) (grub_dl_t mod); +-void grub_dl_unload_unneeded (void); +-int EXPORT_FUNC(grub_dl_ref) (grub_dl_t mod); +-int EXPORT_FUNC(grub_dl_unref) (grub_dl_t mod); ++extern void grub_dl_unload_unneeded (void); ++extern int EXPORT_FUNC(grub_dl_ref) (grub_dl_t mod); ++extern int EXPORT_FUNC(grub_dl_unref) (grub_dl_t mod); ++extern int EXPORT_FUNC(grub_dl_ref_count) (grub_dl_t mod); ++ + extern grub_dl_t EXPORT_VAR(grub_dl_head); + + #ifndef GRUB_UTIL +-- +2.14.2 + diff --git a/boot/grub2/0048-usb-Avoid-possible-out-of-bound-accesses-caused-by-m.patch b/boot/grub2/0048-usb-Avoid-possible-out-of-bound-accesses-caused-by-m.patch new file mode 100644 index 00000000..6a056e52 --- /dev/null +++ b/boot/grub2/0048-usb-Avoid-possible-out-of-bound-accesses-caused-by-m.patch @@ -0,0 +1,116 @@ +From 128c16a682034263eb519c89bc0934eeb6fa8cfa Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Fri, 11 Dec 2020 19:19:21 +0100 +Subject: [PATCH] usb: Avoid possible out-of-bound accesses caused by malicious + devices + +The maximum number of configurations and interfaces are fixed but there is +no out-of-bound checking to prevent a malicious USB device to report large +values for these and cause accesses outside the arrays' memory. + +Fixes: CVE-2020-25647 + +Reported-by: Joseph Tartaro +Reported-by: Ilja Van Sprundel +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/bus/usb/usb.c | 15 ++++++++++++--- + include/grub/usb.h | 10 +++++++--- + 2 files changed, 19 insertions(+), 6 deletions(-) + +diff --git a/grub-core/bus/usb/usb.c b/grub-core/bus/usb/usb.c +index 8da5e4c..7cb3cc2 100644 +--- a/grub-core/bus/usb/usb.c ++++ b/grub-core/bus/usb/usb.c +@@ -75,6 +75,9 @@ grub_usb_controller_iterate (grub_usb_controller_iterate_hook_t hook, + grub_usb_err_t + grub_usb_clear_halt (grub_usb_device_t dev, int endpoint) + { ++ if (endpoint >= GRUB_USB_MAX_TOGGLE) ++ return GRUB_USB_ERR_BADDEVICE; ++ + dev->toggle[endpoint] = 0; + return grub_usb_control_msg (dev, (GRUB_USB_REQTYPE_OUT + | GRUB_USB_REQTYPE_STANDARD +@@ -134,10 +137,10 @@ grub_usb_device_initialize (grub_usb_device_t dev) + return err; + descdev = &dev->descdev; + +- for (i = 0; i < 8; i++) ++ for (i = 0; i < GRUB_USB_MAX_CONF; i++) + dev->config[i].descconf = NULL; + +- if (descdev->configcnt == 0) ++ if (descdev->configcnt == 0 || descdev->configcnt > GRUB_USB_MAX_CONF) + { + err = GRUB_USB_ERR_BADDEVICE; + goto fail; +@@ -172,6 +175,12 @@ grub_usb_device_initialize (grub_usb_device_t dev) + /* Skip the configuration descriptor. */ + pos = dev->config[i].descconf->length; + ++ if (dev->config[i].descconf->numif > GRUB_USB_MAX_IF) ++ { ++ err = GRUB_USB_ERR_BADDEVICE; ++ goto fail; ++ } ++ + /* Read all interfaces. */ + for (currif = 0; currif < dev->config[i].descconf->numif; currif++) + { +@@ -217,7 +226,7 @@ grub_usb_device_initialize (grub_usb_device_t dev) + + fail: + +- for (i = 0; i < 8; i++) ++ for (i = 0; i < GRUB_USB_MAX_CONF; i++) + grub_free (dev->config[i].descconf); + + return err; +diff --git a/include/grub/usb.h b/include/grub/usb.h +index 512ae1d..6475c55 100644 +--- a/include/grub/usb.h ++++ b/include/grub/usb.h +@@ -23,6 +23,10 @@ + #include + #include + ++#define GRUB_USB_MAX_CONF 8 ++#define GRUB_USB_MAX_IF 32 ++#define GRUB_USB_MAX_TOGGLE 256 ++ + typedef struct grub_usb_device *grub_usb_device_t; + typedef struct grub_usb_controller *grub_usb_controller_t; + typedef struct grub_usb_controller_dev *grub_usb_controller_dev_t; +@@ -167,7 +171,7 @@ struct grub_usb_configuration + struct grub_usb_desc_config *descconf; + + /* Interfaces associated to this configuration. */ +- struct grub_usb_interface interf[32]; ++ struct grub_usb_interface interf[GRUB_USB_MAX_IF]; + }; + + struct grub_usb_hub_port +@@ -191,7 +195,7 @@ struct grub_usb_device + struct grub_usb_controller controller; + + /* Device configurations (after opening the device). */ +- struct grub_usb_configuration config[8]; ++ struct grub_usb_configuration config[GRUB_USB_MAX_CONF]; + + /* Device address. */ + int addr; +@@ -203,7 +207,7 @@ struct grub_usb_device + int initialized; + + /* Data toggle values (used for bulk transfers only). */ +- int toggle[256]; ++ int toggle[GRUB_USB_MAX_TOGGLE]; + + /* Used by libusb wrapper. Schedulded for removal. */ + void *data; +-- +2.14.2 + diff --git a/boot/grub2/0049-mmap-Fix-memory-leak-when-iterating-over-mapped-memo.patch b/boot/grub2/0049-mmap-Fix-memory-leak-when-iterating-over-mapped-memo.patch new file mode 100644 index 00000000..f443f190 --- /dev/null +++ b/boot/grub2/0049-mmap-Fix-memory-leak-when-iterating-over-mapped-memo.patch @@ -0,0 +1,40 @@ +From 8cb2848f9699642a698af84b12ba187cab722031 Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Thu, 3 Dec 2020 14:39:45 +0000 +Subject: [PATCH] mmap: Fix memory leak when iterating over mapped memory + +When returning from grub_mmap_iterate() the memory allocated to present +is not being released causing it to leak. + +Fixes: CID 96655 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/mmap/mmap.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/grub-core/mmap/mmap.c b/grub-core/mmap/mmap.c +index 7ebf32e..8bf235f 100644 +--- a/grub-core/mmap/mmap.c ++++ b/grub-core/mmap/mmap.c +@@ -270,6 +270,7 @@ grub_mmap_iterate (grub_memory_hook_t hook, void *hook_data) + hook_data)) + { + grub_free (ctx.scanline_events); ++ grub_free (present); + return GRUB_ERR_NONE; + } + +@@ -282,6 +283,7 @@ grub_mmap_iterate (grub_memory_hook_t hook, void *hook_data) + } + + grub_free (ctx.scanline_events); ++ grub_free (present); + return GRUB_ERR_NONE; + } + +-- +2.14.2 + diff --git a/boot/grub2/0050-net-net-Fix-possible-dereference-to-of-a-NULL-pointe.patch b/boot/grub2/0050-net-net-Fix-possible-dereference-to-of-a-NULL-pointe.patch new file mode 100644 index 00000000..5a8cc6d1 --- /dev/null +++ b/boot/grub2/0050-net-net-Fix-possible-dereference-to-of-a-NULL-pointe.patch @@ -0,0 +1,40 @@ +From 03f2515ae0c503406f1a99a2178405049c6555db Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Fri, 27 Nov 2020 15:10:26 +0000 +Subject: [PATCH] net/net: Fix possible dereference to of a NULL pointer + +It is always possible that grub_zalloc() could fail, so we should check for +a NULL return. Otherwise we run the risk of dereferencing a NULL pointer. + +Fixes: CID 296221 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/net/net.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/grub-core/net/net.c b/grub-core/net/net.c +index 38f19df..7c2cdf2 100644 +--- a/grub-core/net/net.c ++++ b/grub-core/net/net.c +@@ -86,8 +86,13 @@ grub_net_link_layer_add_address (struct grub_net_card *card, + + /* Add sender to cache table. */ + if (card->link_layer_table == NULL) +- card->link_layer_table = grub_zalloc (LINK_LAYER_CACHE_SIZE +- * sizeof (card->link_layer_table[0])); ++ { ++ card->link_layer_table = grub_zalloc (LINK_LAYER_CACHE_SIZE ++ * sizeof (card->link_layer_table[0])); ++ if (card->link_layer_table == NULL) ++ return; ++ } ++ + entry = &(card->link_layer_table[card->new_ll_entry]); + entry->avail = 1; + grub_memcpy (&entry->ll_address, ll, sizeof (entry->ll_address)); +-- +2.14.2 + diff --git a/boot/grub2/0051-net-tftp-Fix-dangling-memory-pointer.patch b/boot/grub2/0051-net-tftp-Fix-dangling-memory-pointer.patch new file mode 100644 index 00000000..cc3983ea --- /dev/null +++ b/boot/grub2/0051-net-tftp-Fix-dangling-memory-pointer.patch @@ -0,0 +1,34 @@ +From 0cb838b281a68b536a09681f9557ea6a7ac5da7a Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Fri, 19 Feb 2021 17:12:23 +0000 +Subject: [PATCH] net/tftp: Fix dangling memory pointer + +The static code analysis tool, Parfait, reported that the valid of +file->data was left referencing memory that was freed by the call to +grub_free(data) where data was initialized from file->data. + +To ensure that there is no unintentional access to this memory +referenced by file->data we should set the pointer to NULL. + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/net/tftp.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/grub-core/net/tftp.c b/grub-core/net/tftp.c +index b4297bc..c106704 100644 +--- a/grub-core/net/tftp.c ++++ b/grub-core/net/tftp.c +@@ -406,6 +406,7 @@ tftp_close (struct grub_file *file) + grub_net_udp_close (data->sock); + } + grub_free (data); ++ file->data = NULL; + return GRUB_ERR_NONE; + } + +-- +2.14.2 + diff --git a/boot/grub2/0052-kern-parser-Fix-resource-leak-if-argc-0.patch b/boot/grub2/0052-kern-parser-Fix-resource-leak-if-argc-0.patch new file mode 100644 index 00000000..dd01092d --- /dev/null +++ b/boot/grub2/0052-kern-parser-Fix-resource-leak-if-argc-0.patch @@ -0,0 +1,51 @@ +From d06161b035dde4769199ad65aa0a587a5920012b Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Fri, 22 Jan 2021 12:32:41 +0000 +Subject: [PATCH] kern/parser: Fix resource leak if argc == 0 + +After processing the command-line yet arriving at the point where we are +setting argv, we are allocating memory, even if argc == 0, which makes +no sense since we never put anything into the allocated argv. + +The solution is to simply return that we've successfully processed the +arguments but that argc == 0, and also ensure that argv is NULL when +we're not allocating anything in it. + +There are only 2 callers of this function, and both are handling a zero +value in argc assuming nothing is allocated in argv. + +Fixes: CID 96680 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/kern/parser.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/grub-core/kern/parser.c b/grub-core/kern/parser.c +index 619db31..d1cf061 100644 +--- a/grub-core/kern/parser.c ++++ b/grub-core/kern/parser.c +@@ -146,6 +146,7 @@ grub_parser_split_cmdline (const char *cmdline, + int i; + + *argc = 0; ++ *argv = NULL; + do + { + if (!rd || !*rd) +@@ -207,6 +208,10 @@ grub_parser_split_cmdline (const char *cmdline, + (*argc)++; + } + ++ /* If there are no args, then we're done. */ ++ if (!*argc) ++ return 0; ++ + /* Reserve memory for the return values. */ + args = grub_malloc (bp - buffer); + if (!args) +-- +2.14.2 + diff --git a/boot/grub2/0053-kern-efi-Fix-memory-leak-on-failure.patch b/boot/grub2/0053-kern-efi-Fix-memory-leak-on-failure.patch new file mode 100644 index 00000000..e2c49979 --- /dev/null +++ b/boot/grub2/0053-kern-efi-Fix-memory-leak-on-failure.patch @@ -0,0 +1,31 @@ +From ed286ceba6015d37a9304f04602451c47bf195d7 Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Thu, 5 Nov 2020 10:15:25 +0000 +Subject: [PATCH] kern/efi: Fix memory leak on failure + +Free the memory allocated to name before returning on failure. + +Fixes: CID 296222 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/kern/efi/efi.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c +index 9cfd88d..4fc14d6 100644 +--- a/grub-core/kern/efi/efi.c ++++ b/grub-core/kern/efi/efi.c +@@ -388,6 +388,7 @@ grub_efi_get_filename (grub_efi_device_path_t *dp0) + { + grub_error (GRUB_ERR_OUT_OF_RANGE, + "malformed EFI Device Path node has length=%d", len); ++ grub_free (name); + return NULL; + } + +-- +2.14.2 + diff --git a/boot/grub2/0054-kern-efi-mm-Fix-possible-NULL-pointer-dereference.patch b/boot/grub2/0054-kern-efi-mm-Fix-possible-NULL-pointer-dereference.patch new file mode 100644 index 00000000..04ef9fc6 --- /dev/null +++ b/boot/grub2/0054-kern-efi-mm-Fix-possible-NULL-pointer-dereference.patch @@ -0,0 +1,66 @@ +From 6aee4bfd6973c714056fb7b56890b8d524e94ee1 Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Fri, 11 Dec 2020 15:03:13 +0000 +Subject: [PATCH] kern/efi/mm: Fix possible NULL pointer dereference + +The model of grub_efi_get_memory_map() is that if memory_map is NULL, +then the purpose is to discover how much memory should be allocated to +it for the subsequent call. + +The problem here is that with grub_efi_is_finished set to 1, there is no +check at all that the function is being called with a non-NULL memory_map. + +While this MAY be true, we shouldn't assume it. + +The solution to this is to behave as expected, and if memory_map is NULL, +then don't try to use it and allow memory_map_size to be filled in, and +return 0 as is done later in the code if the buffer is too small (or NULL). + +Additionally, drop unneeded ret = 1. + +Fixes: CID 96632 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/kern/efi/mm.c | 19 ++++++++++++++----- + 1 file changed, 14 insertions(+), 5 deletions(-) + +diff --git a/grub-core/kern/efi/mm.c b/grub-core/kern/efi/mm.c +index b02fab1..5afcef7 100644 +--- a/grub-core/kern/efi/mm.c ++++ b/grub-core/kern/efi/mm.c +@@ -328,15 +328,24 @@ grub_efi_get_memory_map (grub_efi_uintn_t *memory_map_size, + if (grub_efi_is_finished) + { + int ret = 1; +- if (*memory_map_size < finish_mmap_size) ++ ++ if (memory_map != NULL) + { +- grub_memcpy (memory_map, finish_mmap_buf, *memory_map_size); +- ret = 0; ++ if (*memory_map_size < finish_mmap_size) ++ { ++ grub_memcpy (memory_map, finish_mmap_buf, *memory_map_size); ++ ret = 0; ++ } ++ else ++ grub_memcpy (memory_map, finish_mmap_buf, finish_mmap_size); + } + else + { +- grub_memcpy (memory_map, finish_mmap_buf, finish_mmap_size); +- ret = 1; ++ /* ++ * Incomplete, no buffer to copy into, same as ++ * GRUB_EFI_BUFFER_TOO_SMALL below. ++ */ ++ ret = 0; + } + *memory_map_size = finish_mmap_size; + if (map_key) +-- +2.14.2 + diff --git a/boot/grub2/0055-gnulib-regexec-Resolve-unused-variable.patch b/boot/grub2/0055-gnulib-regexec-Resolve-unused-variable.patch new file mode 100644 index 00000000..99e13546 --- /dev/null +++ b/boot/grub2/0055-gnulib-regexec-Resolve-unused-variable.patch @@ -0,0 +1,90 @@ +From a983d36bd9178d377d2072fd4b11c635fdc404b4 Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Wed, 21 Oct 2020 14:41:27 +0000 +Subject: [PATCH] gnulib/regexec: Resolve unused variable + +This is a really minor issue where a variable is being assigned to but +not checked before it is overwritten again. + +The reason for this issue is that we are not building with DEBUG set and +this in turn means that the assert() that reads the value of the +variable match_last is being processed out. + +The solution, move the assignment to match_last in to an ifdef DEBUG too. + +Fixes: CID 292459 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +[Add changes to generated files] +Signed-off-by: Stefan Sørensen +--- + Makefile.in | 1 + + conf/Makefile.extra-dist | 1 + + grub-core/lib/gnulib-patches/fix-unused-value.patch | 14 ++++++++++++++ + grub-core/lib/gnulib/regexec.c | 4 ++++ + 4 files changed, 20 insertions(+) + create mode 100644 grub-core/lib/gnulib-patches/fix-unused-value.patch + +diff --git a/Makefile.in b/Makefile.in +index ecb3278..e6b287b 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -2742,6 +2742,7 @@ EXTRA_DIST = autogen.sh geninit.sh gentpl.py Makefile.util.def \ + grub-core/gensyminfo.sh.in grub-core/gensymlist.sh \ + grub-core/genemuinit.sh grub-core/genemuinitheader.sh \ + grub-core/lib/gnulib-patches/fix-null-deref.patch \ ++ grub-core/lib/gnulib-patches/fix-unused-value.patch \ + grub-core/lib/gnulib-patches/fix-width.patch \ + grub-core/lib/gnulib-patches/no-abort.patch \ + grub-core/lib/libgcrypt \ +diff --git a/conf/Makefile.extra-dist b/conf/Makefile.extra-dist +index 46c4e95..9b01152 100644 +--- a/conf/Makefile.extra-dist ++++ b/conf/Makefile.extra-dist +@@ -29,6 +29,7 @@ EXTRA_DIST += grub-core/genemuinit.sh + EXTRA_DIST += grub-core/genemuinitheader.sh + + EXTRA_DIST += grub-core/lib/gnulib-patches/fix-null-deref.patch ++EXTRA_DIST += grub-core/lib/gnulib-patches/fix-unused-value.patch + EXTRA_DIST += grub-core/lib/gnulib-patches/fix-width.patch + EXTRA_DIST += grub-core/lib/gnulib-patches/no-abort.patch + +diff --git a/grub-core/lib/gnulib-patches/fix-unused-value.patch b/grub-core/lib/gnulib-patches/fix-unused-value.patch +new file mode 100644 +index 0000000..ba51f1b +--- /dev/null ++++ b/grub-core/lib/gnulib-patches/fix-unused-value.patch +@@ -0,0 +1,14 @@ ++--- a/lib/regexec.c 2020-10-21 14:25:35.310195912 +0000 +++++ b/lib/regexec.c 2020-10-21 14:32:07.961765604 +0000 ++@@ -828,7 +828,11 @@ ++ break; ++ if (__glibc_unlikely (err != REG_NOMATCH)) ++ goto free_return; +++#ifdef DEBUG +++ /* Only used for assertion below when DEBUG is set, otherwise +++ it will be over-written when we loop around. */ ++ match_last = -1; +++#endif ++ } ++ else ++ break; /* We found a match. */ +diff --git a/grub-core/lib/gnulib/regexec.c b/grub-core/lib/gnulib/regexec.c +index 21cf791..98a25f5 100644 +--- a/grub-core/lib/gnulib/regexec.c ++++ b/grub-core/lib/gnulib/regexec.c +@@ -828,6 +828,10 @@ re_search_internal (const regex_t *preg, const char *string, Idx length, + break; + if (__glibc_unlikely (err != REG_NOMATCH)) + goto free_return; ++#ifdef DEBUG ++ /* Only used for assertion below when DEBUG is set, otherwise ++ it will be over-written when we loop around. */ ++#endif + match_last = -1; + } + else +-- +2.14.2 + diff --git a/boot/grub2/0056-gnulib-regcomp-Fix-uninitialized-token-structure.patch b/boot/grub2/0056-gnulib-regcomp-Fix-uninitialized-token-structure.patch new file mode 100644 index 00000000..24645615 --- /dev/null +++ b/boot/grub2/0056-gnulib-regcomp-Fix-uninitialized-token-structure.patch @@ -0,0 +1,82 @@ +From 75c3d3cec4f408848f575d6d5e30a95bd6313db0 Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Thu, 22 Oct 2020 13:54:06 +0000 +Subject: [PATCH] gnulib/regcomp: Fix uninitialized token structure + +The code is assuming that the value of br_token.constraint was +initialized to zero when it wasn't. + +While some compilers will ensure that, not all do, so it is better to +fix this explicitly than leave it to chance. + +Fixes: CID 73749 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +[Add changes to generated files] +Signed-off-by: Stefan Sørensen +--- + Makefile.in | 1 + + conf/Makefile.extra-dist | 1 + + grub-core/lib/gnulib-patches/fix-uninit-structure.patch | 11 +++++++++++ + grub-core/lib/gnulib/regcomp.c | 2 +- + 4 files changed, 14 insertions(+), 1 deletion(-) + create mode 100644 grub-core/lib/gnulib-patches/fix-uninit-structure.patch + +diff --git a/Makefile.in b/Makefile.in +index e6b287b..d58a7d7 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -2742,6 +2742,7 @@ EXTRA_DIST = autogen.sh geninit.sh gentpl.py Makefile.util.def \ + grub-core/gensyminfo.sh.in grub-core/gensymlist.sh \ + grub-core/genemuinit.sh grub-core/genemuinitheader.sh \ + grub-core/lib/gnulib-patches/fix-null-deref.patch \ ++ grub-core/lib/gnulib-patches/fix-uninit-structure.patch \ + grub-core/lib/gnulib-patches/fix-unused-value.patch \ + grub-core/lib/gnulib-patches/fix-width.patch \ + grub-core/lib/gnulib-patches/no-abort.patch \ +diff --git a/conf/Makefile.extra-dist b/conf/Makefile.extra-dist +index 9b01152..9e55458 100644 +--- a/conf/Makefile.extra-dist ++++ b/conf/Makefile.extra-dist +@@ -29,6 +29,7 @@ EXTRA_DIST += grub-core/genemuinit.sh + EXTRA_DIST += grub-core/genemuinitheader.sh + + EXTRA_DIST += grub-core/lib/gnulib-patches/fix-null-deref.patch ++EXTRA_DIST += grub-core/lib/gnulib-patches/fix-uninit-structure.patch + EXTRA_DIST += grub-core/lib/gnulib-patches/fix-unused-value.patch + EXTRA_DIST += grub-core/lib/gnulib-patches/fix-width.patch + EXTRA_DIST += grub-core/lib/gnulib-patches/no-abort.patch +diff --git a/grub-core/lib/gnulib-patches/fix-uninit-structure.patch b/grub-core/lib/gnulib-patches/fix-uninit-structure.patch +new file mode 100644 +index 0000000..7b4d9f6 +--- /dev/null ++++ b/grub-core/lib/gnulib-patches/fix-uninit-structure.patch +@@ -0,0 +1,11 @@ ++--- a/lib/regcomp.c 2020-10-22 13:49:06.770168928 +0000 +++++ b/lib/regcomp.c 2020-10-22 13:50:37.026528298 +0000 ++@@ -3662,7 +3662,7 @@ ++ Idx alloc = 0; ++ #endif /* not RE_ENABLE_I18N */ ++ reg_errcode_t ret; ++- re_token_t br_token; +++ re_token_t br_token = {0}; ++ bin_tree_t *tree; ++ ++ sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); +diff --git a/grub-core/lib/gnulib/regcomp.c b/grub-core/lib/gnulib/regcomp.c +index fe7dfcb..2545d3e 100644 +--- a/grub-core/lib/gnulib/regcomp.c ++++ b/grub-core/lib/gnulib/regcomp.c +@@ -3662,7 +3662,7 @@ build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans, + Idx alloc = 0; + #endif /* not RE_ENABLE_I18N */ + reg_errcode_t ret; +- re_token_t br_token; ++ re_token_t br_token = {0}; + bin_tree_t *tree; + + sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); +-- +2.14.2 + diff --git a/boot/grub2/0057-gnulib-argp-help-Fix-dereference-of-a-possibly-NULL-.patch b/boot/grub2/0057-gnulib-argp-help-Fix-dereference-of-a-possibly-NULL-.patch new file mode 100644 index 00000000..34c630bf --- /dev/null +++ b/boot/grub2/0057-gnulib-argp-help-Fix-dereference-of-a-possibly-NULL-.patch @@ -0,0 +1,82 @@ +From 3a37bf120a9194c373257c70175cdb5b337bc107 Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Wed, 28 Oct 2020 14:43:01 +0000 +Subject: [PATCH] gnulib/argp-help: Fix dereference of a possibly NULL state + +All other instances of call to __argp_failure() where there is +a dgettext() call is first checking whether state is NULL before +attempting to dereference it to get the root_argp->argp_domain. + +Fixes: CID 292436 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +[Add changes to generated files] +Signed-off-by: Stefan Sørensen +--- + Makefile.in | 1 + + conf/Makefile.extra-dist | 1 + + grub-core/lib/gnulib-patches/fix-null-state-deref.patch | 12 ++++++++++++ + grub-core/lib/gnulib/argp-help.c | 3 ++- + 4 files changed, 16 insertions(+), 1 deletion(-) + create mode 100644 grub-core/lib/gnulib-patches/fix-null-state-deref.patch + +diff --git a/Makefile.in b/Makefile.in +index d58a7d7..812b7c2 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -2742,6 +2742,7 @@ EXTRA_DIST = autogen.sh geninit.sh gentpl.py Makefile.util.def \ + grub-core/gensyminfo.sh.in grub-core/gensymlist.sh \ + grub-core/genemuinit.sh grub-core/genemuinitheader.sh \ + grub-core/lib/gnulib-patches/fix-null-deref.patch \ ++ grub-core/lib/gnulib-patches/fix-null-state-deref.patch \ + grub-core/lib/gnulib-patches/fix-uninit-structure.patch \ + grub-core/lib/gnulib-patches/fix-unused-value.patch \ + grub-core/lib/gnulib-patches/fix-width.patch \ +diff --git a/conf/Makefile.extra-dist b/conf/Makefile.extra-dist +index 9e55458..96d7e69 100644 +--- a/conf/Makefile.extra-dist ++++ b/conf/Makefile.extra-dist +@@ -29,6 +29,7 @@ EXTRA_DIST += grub-core/genemuinit.sh + EXTRA_DIST += grub-core/genemuinitheader.sh + + EXTRA_DIST += grub-core/lib/gnulib-patches/fix-null-deref.patch ++EXTRA_DIST += grub-core/lib/gnulib-patches/fix-null-state-deref.patch + EXTRA_DIST += grub-core/lib/gnulib-patches/fix-uninit-structure.patch + EXTRA_DIST += grub-core/lib/gnulib-patches/fix-unused-value.patch + EXTRA_DIST += grub-core/lib/gnulib-patches/fix-width.patch +diff --git a/grub-core/lib/gnulib-patches/fix-null-state-deref.patch b/grub-core/lib/gnulib-patches/fix-null-state-deref.patch +new file mode 100644 +index 0000000..813ec09 +--- /dev/null ++++ b/grub-core/lib/gnulib-patches/fix-null-state-deref.patch +@@ -0,0 +1,12 @@ ++--- a/lib/argp-help.c 2020-10-28 14:32:19.189215988 +0000 +++++ b/lib/argp-help.c 2020-10-28 14:38:21.204673940 +0000 ++@@ -145,7 +145,8 @@ ++ if (*(int *)((char *)upptr + up->uparams_offs) >= upptr->rmargin) ++ { ++ __argp_failure (state, 0, 0, ++- dgettext (state->root_argp->argp_domain, +++ dgettext (state == NULL ? NULL +++ : state->root_argp->argp_domain, ++ "\ ++ ARGP_HELP_FMT: %s value is less than or equal to %s"), ++ "rmargin", up->name); +diff --git a/grub-core/lib/gnulib/argp-help.c b/grub-core/lib/gnulib/argp-help.c +index 5d8f451..c75568c 100644 +--- a/grub-core/lib/gnulib/argp-help.c ++++ b/grub-core/lib/gnulib/argp-help.c +@@ -145,7 +145,8 @@ validate_uparams (const struct argp_state *state, struct uparams *upptr) + if (*(int *)((char *)upptr + up->uparams_offs) >= upptr->rmargin) + { + __argp_failure (state, 0, 0, +- dgettext (state->root_argp->argp_domain, ++ dgettext (state == NULL ? NULL ++ : state->root_argp->argp_domain, + "\ + ARGP_HELP_FMT: %s value is less than or equal to %s"), + "rmargin", up->name); +-- +2.14.2 + diff --git a/boot/grub2/0058-gnulib-regexec-Fix-possible-null-dereference.patch b/boot/grub2/0058-gnulib-regexec-Fix-possible-null-dereference.patch new file mode 100644 index 00000000..0ced54ae --- /dev/null +++ b/boot/grub2/0058-gnulib-regexec-Fix-possible-null-dereference.patch @@ -0,0 +1,83 @@ +From 0b7f347638153e403ee2dd518af3ce26f4f99647 Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Thu, 5 Nov 2020 10:57:14 +0000 +Subject: [PATCH] gnulib/regexec: Fix possible null-dereference + +It appears to be possible that the mctx->state_log field may be NULL, +and the name of this function, clean_state_log_if_needed(), suggests +that it should be checking that it is valid to be cleaned before +assuming that it does. + +Fixes: CID 86720 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +[Add changes to generated files] +Signed-off-by: Stefan Sørensen +--- + Makefile.in | 1 + + conf/Makefile.extra-dist | 1 + + grub-core/lib/gnulib-patches/fix-regexec-null-deref.patch | 12 ++++++++++++ + grub-core/lib/gnulib/regexec.c | 3 +++ + 4 files changed, 17 insertions(+) + create mode 100644 grub-core/lib/gnulib-patches/fix-regexec-null-deref.patch + +diff --git a/Makefile.in b/Makefile.in +index 812b7c2..d9da6e9 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -2743,6 +2743,7 @@ EXTRA_DIST = autogen.sh geninit.sh gentpl.py Makefile.util.def \ + grub-core/genemuinit.sh grub-core/genemuinitheader.sh \ + grub-core/lib/gnulib-patches/fix-null-deref.patch \ + grub-core/lib/gnulib-patches/fix-null-state-deref.patch \ ++ grub-core/lib/gnulib-patches/fix-regexec-null-deref.patch \ + grub-core/lib/gnulib-patches/fix-uninit-structure.patch \ + grub-core/lib/gnulib-patches/fix-unused-value.patch \ + grub-core/lib/gnulib-patches/fix-width.patch \ +diff --git a/conf/Makefile.extra-dist b/conf/Makefile.extra-dist +index 96d7e69..d27d3a9 100644 +--- a/conf/Makefile.extra-dist ++++ b/conf/Makefile.extra-dist +@@ -30,6 +30,7 @@ EXTRA_DIST += grub-core/genemuinitheader.sh + + EXTRA_DIST += grub-core/lib/gnulib-patches/fix-null-deref.patch + EXTRA_DIST += grub-core/lib/gnulib-patches/fix-null-state-deref.patch ++EXTRA_DIST += grub-core/lib/gnulib-patches/fix-regexec-null-deref.patch + EXTRA_DIST += grub-core/lib/gnulib-patches/fix-uninit-structure.patch + EXTRA_DIST += grub-core/lib/gnulib-patches/fix-unused-value.patch + EXTRA_DIST += grub-core/lib/gnulib-patches/fix-width.patch +diff --git a/grub-core/lib/gnulib-patches/fix-regexec-null-deref.patch b/grub-core/lib/gnulib-patches/fix-regexec-null-deref.patch +new file mode 100644 +index 0000000..db6dac9 +--- /dev/null ++++ b/grub-core/lib/gnulib-patches/fix-regexec-null-deref.patch +@@ -0,0 +1,12 @@ ++--- a/lib/regexec.c 2020-10-21 14:25:35.310195912 +0000 +++++ b/lib/regexec.c 2020-11-05 10:55:09.621542984 +0000 ++@@ -1692,6 +1692,9 @@ ++ { ++ Idx top = mctx->state_log_top; ++ +++ if (mctx->state_log == NULL) +++ return REG_NOERROR; +++ ++ if ((next_state_log_idx >= mctx->input.bufs_len ++ && mctx->input.bufs_len < mctx->input.len) ++ || (next_state_log_idx >= mctx->input.valid_len +diff --git a/grub-core/lib/gnulib/regexec.c b/grub-core/lib/gnulib/regexec.c +index 98a25f5..df97667 100644 +--- a/grub-core/lib/gnulib/regexec.c ++++ b/grub-core/lib/gnulib/regexec.c +@@ -1696,6 +1696,9 @@ clean_state_log_if_needed (re_match_context_t *mctx, Idx next_state_log_idx) + { + Idx top = mctx->state_log_top; + ++ if (mctx->state_log == NULL) ++ return REG_NOERROR; ++ + if ((next_state_log_idx >= mctx->input.bufs_len + && mctx->input.bufs_len < mctx->input.len) + || (next_state_log_idx >= mctx->input.valid_len +-- +2.14.2 + diff --git a/boot/grub2/0059-gnulib-regcomp-Fix-uninitialized-re_token.patch b/boot/grub2/0059-gnulib-regcomp-Fix-uninitialized-re_token.patch new file mode 100644 index 00000000..ecdc93c8 --- /dev/null +++ b/boot/grub2/0059-gnulib-regcomp-Fix-uninitialized-re_token.patch @@ -0,0 +1,88 @@ +From 03477085f9a33789ba6cca7cd49ab9326a1baa0e Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Tue, 24 Nov 2020 18:04:22 +0000 +Subject: [PATCH] gnulib/regcomp: Fix uninitialized re_token + +This issue has been fixed in the latest version of gnulib, so to +maintain consistency, I've backported that change rather than doing +something different. + +Fixes: CID 73828 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +[Add changes to generated files] +Signed-off-by: Stefan Sørensen +--- + Makefile.in | 1 + + conf/Makefile.extra-dist | 1 + + .../lib/gnulib-patches/fix-regcomp-uninit-token.patch | 15 +++++++++++++++ + grub-core/lib/gnulib/regcomp.c | 6 +----- + 4 files changed, 18 insertions(+), 5 deletions(-) + create mode 100644 grub-core/lib/gnulib-patches/fix-regcomp-uninit-token.patch + +diff --git a/Makefile.in b/Makefile.in +index d9da6e9..9442504 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -2743,6 +2743,7 @@ EXTRA_DIST = autogen.sh geninit.sh gentpl.py Makefile.util.def \ + grub-core/genemuinit.sh grub-core/genemuinitheader.sh \ + grub-core/lib/gnulib-patches/fix-null-deref.patch \ + grub-core/lib/gnulib-patches/fix-null-state-deref.patch \ ++ grub-core/lib/gnulib-patches/fix-regcomp-uninit-token.patch \ + grub-core/lib/gnulib-patches/fix-regexec-null-deref.patch \ + grub-core/lib/gnulib-patches/fix-uninit-structure.patch \ + grub-core/lib/gnulib-patches/fix-unused-value.patch \ +diff --git a/conf/Makefile.extra-dist b/conf/Makefile.extra-dist +index d27d3a9..ffe6829 100644 +--- a/conf/Makefile.extra-dist ++++ b/conf/Makefile.extra-dist +@@ -30,6 +30,7 @@ EXTRA_DIST += grub-core/genemuinitheader.sh + + EXTRA_DIST += grub-core/lib/gnulib-patches/fix-null-deref.patch + EXTRA_DIST += grub-core/lib/gnulib-patches/fix-null-state-deref.patch ++EXTRA_DIST += grub-core/lib/gnulib-patches/fix-regcomp-uninit-token.patch + EXTRA_DIST += grub-core/lib/gnulib-patches/fix-regexec-null-deref.patch + EXTRA_DIST += grub-core/lib/gnulib-patches/fix-uninit-structure.patch + EXTRA_DIST += grub-core/lib/gnulib-patches/fix-unused-value.patch +diff --git a/grub-core/lib/gnulib-patches/fix-regcomp-uninit-token.patch b/grub-core/lib/gnulib-patches/fix-regcomp-uninit-token.patch +new file mode 100644 +index 0000000..02e0631 +--- /dev/null ++++ b/grub-core/lib/gnulib-patches/fix-regcomp-uninit-token.patch +@@ -0,0 +1,15 @@ ++--- a/lib/regcomp.c 2020-11-24 17:06:08.159223858 +0000 +++++ b/lib/regcomp.c 2020-11-24 17:06:15.630253923 +0000 ++@@ -3808,11 +3808,7 @@ ++ create_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, ++ re_token_type_t type) ++ { ++- re_token_t t; ++-#if defined GCC_LINT || defined lint ++- memset (&t, 0, sizeof t); ++-#endif ++- t.type = type; +++ re_token_t t = { .type = type }; ++ return create_token_tree (dfa, left, right, &t); ++ } ++ +diff --git a/grub-core/lib/gnulib/regcomp.c b/grub-core/lib/gnulib/regcomp.c +index 2545d3e..64a4fa7 100644 +--- a/grub-core/lib/gnulib/regcomp.c ++++ b/grub-core/lib/gnulib/regcomp.c +@@ -3808,11 +3808,7 @@ static bin_tree_t * + create_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, + re_token_type_t type) + { +- re_token_t t; +-#if defined GCC_LINT || defined lint +- memset (&t, 0, sizeof t); +-#endif +- t.type = type; ++ re_token_t t = { .type = type }; + return create_token_tree (dfa, left, right, &t); + } + +-- +2.14.2 + diff --git a/boot/grub2/0060-io-lzopio-Resolve-unnecessary-self-assignment-errors.patch b/boot/grub2/0060-io-lzopio-Resolve-unnecessary-self-assignment-errors.patch new file mode 100644 index 00000000..cc6b2172 --- /dev/null +++ b/boot/grub2/0060-io-lzopio-Resolve-unnecessary-self-assignment-errors.patch @@ -0,0 +1,42 @@ +From 59666e520f44177c97b82a44c169b3b315d63b42 Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Wed, 21 Oct 2020 14:44:10 +0000 +Subject: [PATCH] io/lzopio: Resolve unnecessary self-assignment errors + +These 2 assignments are unnecessary since they are just assigning +to themselves. + +Fixes: CID 73643 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/io/lzopio.c | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/grub-core/io/lzopio.c b/grub-core/io/lzopio.c +index 3014485..a7d4425 100644 +--- a/grub-core/io/lzopio.c ++++ b/grub-core/io/lzopio.c +@@ -125,8 +125,6 @@ read_block_header (struct grub_lzopio *lzopio) + sizeof (lzopio->block.ucheck)) != + sizeof (lzopio->block.ucheck)) + return -1; +- +- lzopio->block.ucheck = lzopio->block.ucheck; + } + + /* Read checksum of compressed data. */ +@@ -143,8 +141,6 @@ read_block_header (struct grub_lzopio *lzopio) + sizeof (lzopio->block.ccheck)) != + sizeof (lzopio->block.ccheck)) + return -1; +- +- lzopio->block.ccheck = lzopio->block.ccheck; + } + } + +-- +2.14.2 + diff --git a/boot/grub2/0061-zstd-Initialize-seq_t-structure-fully.patch b/boot/grub2/0061-zstd-Initialize-seq_t-structure-fully.patch new file mode 100644 index 00000000..5e1752b3 --- /dev/null +++ b/boot/grub2/0061-zstd-Initialize-seq_t-structure-fully.patch @@ -0,0 +1,35 @@ +From 2777cf4466719921dbe4b30af358a75e7d76f217 Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Thu, 5 Nov 2020 10:29:59 +0000 +Subject: [PATCH] zstd: Initialize seq_t structure fully + +While many compilers will initialize this to zero, not all will, so it +is better to be sure that fields not being explicitly set are at known +values, and there is code that checks this fields value elsewhere in the +code. + +Fixes: CID 292440 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/lib/zstd/zstd_decompress.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/lib/zstd/zstd_decompress.c b/grub-core/lib/zstd/zstd_decompress.c +index 711b5b6..e4b5670 100644 +--- a/grub-core/lib/zstd/zstd_decompress.c ++++ b/grub-core/lib/zstd/zstd_decompress.c +@@ -1325,7 +1325,7 @@ typedef enum { ZSTD_lo_isRegularOffset, ZSTD_lo_isLongOffset=1 } ZSTD_longOffset + FORCE_INLINE_TEMPLATE seq_t + ZSTD_decodeSequence(seqState_t* seqState, const ZSTD_longOffset_e longOffsets) + { +- seq_t seq; ++ seq_t seq = {0}; + U32 const llBits = seqState->stateLL.table[seqState->stateLL.state].nbAdditionalBits; + U32 const mlBits = seqState->stateML.table[seqState->stateML.state].nbAdditionalBits; + U32 const ofBits = seqState->stateOffb.table[seqState->stateOffb.state].nbAdditionalBits; +-- +2.14.2 + diff --git a/boot/grub2/0062-kern-partition-Check-for-NULL-before-dereferencing-i.patch b/boot/grub2/0062-kern-partition-Check-for-NULL-before-dereferencing-i.patch new file mode 100644 index 00000000..431d45fd --- /dev/null +++ b/boot/grub2/0062-kern-partition-Check-for-NULL-before-dereferencing-i.patch @@ -0,0 +1,44 @@ +From bc9c468a2ce84bc767234eec888b71f1bc744fff Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Fri, 23 Oct 2020 09:49:59 +0000 +Subject: [PATCH] kern/partition: Check for NULL before dereferencing input + string + +There is the possibility that the value of str comes from an external +source and continuing to use it before ever checking its validity is +wrong. So, needs fixing. + +Additionally, drop unneeded part initialization. + +Fixes: CID 292444 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/kern/partition.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/grub-core/kern/partition.c b/grub-core/kern/partition.c +index e499147..b10a184 100644 +--- a/grub-core/kern/partition.c ++++ b/grub-core/kern/partition.c +@@ -109,11 +109,14 @@ grub_partition_map_probe (const grub_partition_map_t partmap, + grub_partition_t + grub_partition_probe (struct grub_disk *disk, const char *str) + { +- grub_partition_t part = 0; ++ grub_partition_t part; + grub_partition_t curpart = 0; + grub_partition_t tail; + const char *ptr; + ++ if (str == NULL) ++ return 0; ++ + part = tail = disk->partition; + + for (ptr = str; *ptr;) +-- +2.14.2 + diff --git a/boot/grub2/0063-disk-ldm-Make-sure-comp-data-is-freed-before-exiting.patch b/boot/grub2/0063-disk-ldm-Make-sure-comp-data-is-freed-before-exiting.patch new file mode 100644 index 00000000..5bebd400 --- /dev/null +++ b/boot/grub2/0063-disk-ldm-Make-sure-comp-data-is-freed-before-exiting.patch @@ -0,0 +1,129 @@ +From 23e39f50ca7a107f6b66396ed4d177a914dee035 Mon Sep 17 00:00:00 2001 +From: Marco A Benatto +Date: Mon, 7 Dec 2020 11:53:03 -0300 +Subject: [PATCH] disk/ldm: Make sure comp data is freed before exiting from + make_vg() + +Several error handling paths in make_vg() do not free comp data before +jumping to fail2 label and returning from the function. This will leak +memory. So, let's fix all issues of that kind. + +Fixes: CID 73804 + +Signed-off-by: Marco A Benatto +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/disk/ldm.c | 51 ++++++++++++++++++++++++++++++++++++++++++++------- + 1 file changed, 44 insertions(+), 7 deletions(-) + +diff --git a/grub-core/disk/ldm.c b/grub-core/disk/ldm.c +index 58f8a53..428415f 100644 +--- a/grub-core/disk/ldm.c ++++ b/grub-core/disk/ldm.c +@@ -554,7 +554,11 @@ make_vg (grub_disk_t disk, + comp->segments = grub_calloc (comp->segment_alloc, + sizeof (*comp->segments)); + if (!comp->segments) +- goto fail2; ++ { ++ grub_free (comp->internal_id); ++ grub_free (comp); ++ goto fail2; ++ } + } + else + { +@@ -562,7 +566,11 @@ make_vg (grub_disk_t disk, + comp->segment_count = 1; + comp->segments = grub_malloc (sizeof (*comp->segments)); + if (!comp->segments) +- goto fail2; ++ { ++ grub_free (comp->internal_id); ++ grub_free (comp); ++ goto fail2; ++ } + comp->segments->start_extent = 0; + comp->segments->extent_count = lv->size; + comp->segments->layout = 0; +@@ -574,15 +582,26 @@ make_vg (grub_disk_t disk, + comp->segments->layout = GRUB_RAID_LAYOUT_SYMMETRIC_MASK; + } + else +- goto fail2; ++ { ++ grub_free (comp->segments); ++ grub_free (comp->internal_id); ++ grub_free (comp); ++ goto fail2; ++ } + ptr += *ptr + 1; + ptr++; + if (!(vblk[i].flags & 0x10)) +- goto fail2; ++ { ++ grub_free (comp->segments); ++ grub_free (comp->internal_id); ++ grub_free (comp); ++ goto fail2; ++ } + if (ptr >= vblk[i].dynamic + sizeof (vblk[i].dynamic) + || ptr + *ptr + 1 >= vblk[i].dynamic + + sizeof (vblk[i].dynamic)) + { ++ grub_free (comp->segments); + grub_free (comp->internal_id); + grub_free (comp); + goto fail2; +@@ -592,6 +611,7 @@ make_vg (grub_disk_t disk, + if (ptr + *ptr + 1 >= vblk[i].dynamic + + sizeof (vblk[i].dynamic)) + { ++ grub_free (comp->segments); + grub_free (comp->internal_id); + grub_free (comp); + goto fail2; +@@ -601,7 +621,12 @@ make_vg (grub_disk_t disk, + comp->segments->nodes = grub_calloc (comp->segments->node_alloc, + sizeof (*comp->segments->nodes)); + if (!lv->segments->nodes) +- goto fail2; ++ { ++ grub_free (comp->segments); ++ grub_free (comp->internal_id); ++ grub_free (comp); ++ goto fail2; ++ } + } + + if (lv->segments->node_alloc == lv->segments->node_count) +@@ -611,11 +636,23 @@ make_vg (grub_disk_t disk, + + if (grub_mul (lv->segments->node_alloc, 2, &lv->segments->node_alloc) || + grub_mul (lv->segments->node_alloc, sizeof (*lv->segments->nodes), &sz)) +- goto fail2; ++ { ++ grub_free (comp->segments->nodes); ++ grub_free (comp->segments); ++ grub_free (comp->internal_id); ++ grub_free (comp); ++ goto fail2; ++ } + + t = grub_realloc (lv->segments->nodes, sz); + if (!t) +- goto fail2; ++ { ++ grub_free (comp->segments->nodes); ++ grub_free (comp->segments); ++ grub_free (comp->internal_id); ++ grub_free (comp); ++ goto fail2; ++ } + lv->segments->nodes = t; + } + lv->segments->nodes[lv->segments->node_count].pv = 0; +-- +2.14.2 + diff --git a/boot/grub2/0064-disk-ldm-If-failed-then-free-vg-variable-too.patch b/boot/grub2/0064-disk-ldm-If-failed-then-free-vg-variable-too.patch new file mode 100644 index 00000000..24417a16 --- /dev/null +++ b/boot/grub2/0064-disk-ldm-If-failed-then-free-vg-variable-too.patch @@ -0,0 +1,29 @@ +From e0b83df5da538d2a38f770e60817b3a4b9d5b4d7 Mon Sep 17 00:00:00 2001 +From: Paulo Flabiano Smorigo +Date: Mon, 7 Dec 2020 10:07:47 -0300 +Subject: [PATCH] disk/ldm: If failed then free vg variable too + +Fixes: CID 73809 + +Signed-off-by: Paulo Flabiano Smorigo +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/disk/ldm.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/grub-core/disk/ldm.c b/grub-core/disk/ldm.c +index 428415f..54713f4 100644 +--- a/grub-core/disk/ldm.c ++++ b/grub-core/disk/ldm.c +@@ -199,6 +199,7 @@ make_vg (grub_disk_t disk, + { + grub_free (vg->uuid); + grub_free (vg->name); ++ grub_free (vg); + return NULL; + } + grub_memcpy (vg->uuid, label->group_guid, LDM_GUID_STRLEN); +-- +2.14.2 + diff --git a/boot/grub2/0065-disk-ldm-Fix-memory-leak-on-uninserted-lv-references.patch b/boot/grub2/0065-disk-ldm-Fix-memory-leak-on-uninserted-lv-references.patch new file mode 100644 index 00000000..ee424e80 --- /dev/null +++ b/boot/grub2/0065-disk-ldm-Fix-memory-leak-on-uninserted-lv-references.patch @@ -0,0 +1,51 @@ +From 156c281a1625dc73fd350530630c6f2d5673d4f6 Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Tue, 8 Dec 2020 10:00:51 +0000 +Subject: [PATCH] disk/ldm: Fix memory leak on uninserted lv references + +The problem here is that the memory allocated to the variable lv is not +yet inserted into the list that is being processed at the label fail2. + +As we can already see at line 342, which correctly frees lv before going +to fail2, we should also be doing that at these earlier jumps to fail2. + +Fixes: CID 73824 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/disk/ldm.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/grub-core/disk/ldm.c b/grub-core/disk/ldm.c +index 54713f4..e82e989 100644 +--- a/grub-core/disk/ldm.c ++++ b/grub-core/disk/ldm.c +@@ -321,7 +321,10 @@ make_vg (grub_disk_t disk, + lv->visible = 1; + lv->segments = grub_zalloc (sizeof (*lv->segments)); + if (!lv->segments) +- goto fail2; ++ { ++ grub_free (lv); ++ goto fail2; ++ } + lv->segments->start_extent = 0; + lv->segments->type = GRUB_DISKFILTER_MIRROR; + lv->segments->node_count = 0; +@@ -329,7 +332,10 @@ make_vg (grub_disk_t disk, + lv->segments->nodes = grub_calloc (lv->segments->node_alloc, + sizeof (*lv->segments->nodes)); + if (!lv->segments->nodes) +- goto fail2; ++ { ++ grub_free (lv); ++ goto fail2; ++ } + ptr = vblk[i].dynamic; + if (ptr + *ptr + 1 >= vblk[i].dynamic + + sizeof (vblk[i].dynamic)) +-- +2.14.2 + diff --git a/boot/grub2/0066-disk-cryptodisk-Fix-potential-integer-overflow.patch b/boot/grub2/0066-disk-cryptodisk-Fix-potential-integer-overflow.patch new file mode 100644 index 00000000..781ebc18 --- /dev/null +++ b/boot/grub2/0066-disk-cryptodisk-Fix-potential-integer-overflow.patch @@ -0,0 +1,51 @@ +From a201ad17caa430aa710654fdf2e6ab4c8166f031 Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Thu, 21 Jan 2021 11:38:31 +0000 +Subject: [PATCH] disk/cryptodisk: Fix potential integer overflow + +The encrypt and decrypt functions expect a grub_size_t. So, we need to +ensure that the constant bit shift is using grub_size_t rather than +unsigned int when it is performing the shift. + +Fixes: CID 307788 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/disk/cryptodisk.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/grub-core/disk/cryptodisk.c b/grub-core/disk/cryptodisk.c +index 5037768..6883f48 100644 +--- a/grub-core/disk/cryptodisk.c ++++ b/grub-core/disk/cryptodisk.c +@@ -311,10 +311,10 @@ grub_cryptodisk_endecrypt (struct grub_cryptodisk *dev, + case GRUB_CRYPTODISK_MODE_CBC: + if (do_encrypt) + err = grub_crypto_cbc_encrypt (dev->cipher, data + i, data + i, +- (1U << dev->log_sector_size), iv); ++ ((grub_size_t) 1 << dev->log_sector_size), iv); + else + err = grub_crypto_cbc_decrypt (dev->cipher, data + i, data + i, +- (1U << dev->log_sector_size), iv); ++ ((grub_size_t) 1 << dev->log_sector_size), iv); + if (err) + return err; + break; +@@ -322,10 +322,10 @@ grub_cryptodisk_endecrypt (struct grub_cryptodisk *dev, + case GRUB_CRYPTODISK_MODE_PCBC: + if (do_encrypt) + err = grub_crypto_pcbc_encrypt (dev->cipher, data + i, data + i, +- (1U << dev->log_sector_size), iv); ++ ((grub_size_t) 1 << dev->log_sector_size), iv); + else + err = grub_crypto_pcbc_decrypt (dev->cipher, data + i, data + i, +- (1U << dev->log_sector_size), iv); ++ ((grub_size_t) 1 << dev->log_sector_size), iv); + if (err) + return err; + break; +-- +2.14.2 + diff --git a/boot/grub2/0067-hfsplus-Check-that-the-volume-name-length-is-valid.patch b/boot/grub2/0067-hfsplus-Check-that-the-volume-name-length-is-valid.patch new file mode 100644 index 00000000..78cff9b4 --- /dev/null +++ b/boot/grub2/0067-hfsplus-Check-that-the-volume-name-length-is-valid.patch @@ -0,0 +1,44 @@ +From 2298f6e0d951251bb9ca97d891d1bc8b74515f8c Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Fri, 23 Oct 2020 17:09:31 +0000 +Subject: [PATCH] hfsplus: Check that the volume name length is valid + +HFS+ documentation suggests that the maximum filename and volume name is +255 Unicode characters in length. + +So, when converting from big-endian to little-endian, we should ensure +that the name of the volume has a length that is between 0 and 255, +inclusive. + +Fixes: CID 73641 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/fs/hfsplus.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/grub-core/fs/hfsplus.c b/grub-core/fs/hfsplus.c +index 9c4e4c8..8fe7c12 100644 +--- a/grub-core/fs/hfsplus.c ++++ b/grub-core/fs/hfsplus.c +@@ -1012,6 +1012,15 @@ grub_hfsplus_label (grub_device_t device, char **label) + grub_hfsplus_btree_recptr (&data->catalog_tree, node, ptr); + + label_len = grub_be_to_cpu16 (catkey->namelen); ++ ++ /* Ensure that the length is >= 0. */ ++ if (label_len < 0) ++ label_len = 0; ++ ++ /* Ensure label length is at most 255 Unicode characters. */ ++ if (label_len > 255) ++ label_len = 255; ++ + label_name = grub_calloc (label_len, sizeof (*label_name)); + if (!label_name) + { +-- +2.14.2 + diff --git a/boot/grub2/0068-zfs-Fix-possible-negative-shift-operation.patch b/boot/grub2/0068-zfs-Fix-possible-negative-shift-operation.patch new file mode 100644 index 00000000..3445619d --- /dev/null +++ b/boot/grub2/0068-zfs-Fix-possible-negative-shift-operation.patch @@ -0,0 +1,43 @@ +From a02091834d3e167320d8a262ff04b8e83c5e616d Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Tue, 24 Nov 2020 16:41:49 +0000 +Subject: [PATCH] zfs: Fix possible negative shift operation + +While it is possible for the return value from zfs_log2() to be zero +(0), it is quite unlikely, given that the previous assignment to blksz +is shifted up by SPA_MINBLOCKSHIFT (9) before 9 is subtracted at the +assignment to epbs. + +But, while unlikely during a normal operation, it may be that a carefully +crafted ZFS filesystem could result in a zero (0) value to the +dn_datalbkszsec field, which means that the shift left does nothing +and assigns zero (0) to blksz, resulting in a negative epbs value. + +Fixes: CID 73608 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/fs/zfs/zfs.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c +index 36d0373..0c42cba 100644 +--- a/grub-core/fs/zfs/zfs.c ++++ b/grub-core/fs/zfs/zfs.c +@@ -2667,6 +2667,11 @@ dnode_get (dnode_end_t * mdn, grub_uint64_t objnum, grub_uint8_t type, + blksz = grub_zfs_to_cpu16 (mdn->dn.dn_datablkszsec, + mdn->endian) << SPA_MINBLOCKSHIFT; + epbs = zfs_log2 (blksz) - DNODE_SHIFT; ++ ++ /* While this should never happen, we should check that epbs is not negative. */ ++ if (epbs < 0) ++ epbs = 0; ++ + blkid = objnum >> epbs; + idx = objnum & ((1 << epbs) - 1); + +-- +2.14.2 + diff --git a/boot/grub2/0069-zfs-Fix-resource-leaks-while-constructing-path.patch b/boot/grub2/0069-zfs-Fix-resource-leaks-while-constructing-path.patch new file mode 100644 index 00000000..d4a3f649 --- /dev/null +++ b/boot/grub2/0069-zfs-Fix-resource-leaks-while-constructing-path.patch @@ -0,0 +1,122 @@ +From 89bdab965805e8d54d7f75349024e1a11cbe2eb8 Mon Sep 17 00:00:00 2001 +From: Paulo Flabiano Smorigo +Date: Mon, 14 Dec 2020 18:54:49 -0300 +Subject: [PATCH] zfs: Fix resource leaks while constructing path + +There are several exit points in dnode_get_path() that are causing possible +memory leaks. + +In the while(1) the correct exit mechanism should not be to do a direct return, +but to instead break out of the loop, setting err first if it is not already set. + +The reason behind this is that the dnode_path is a linked list, and while doing +through this loop, it is being allocated and built up - the only way to +correctly unravel it is to traverse it, which is what is being done at the end +of the function outside of the loop. + +Several of the existing exit points correctly did a break, but not all so this +change makes that more consistent and should resolve the leaking of memory as +found by Coverity. + +Fixes: CID 73741 + +Signed-off-by: Paulo Flabiano Smorigo +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/fs/zfs/zfs.c | 30 +++++++++++++++++++++--------- + 1 file changed, 21 insertions(+), 9 deletions(-) + +diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c +index 0c42cba..9087a72 100644 +--- a/grub-core/fs/zfs/zfs.c ++++ b/grub-core/fs/zfs/zfs.c +@@ -2836,8 +2836,8 @@ dnode_get_path (struct subvolume *subvol, const char *path_in, dnode_end_t *dn, + + if (dnode_path->dn.dn.dn_type != DMU_OT_DIRECTORY_CONTENTS) + { +- grub_free (path_buf); +- return grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a directory")); ++ err = grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a directory")); ++ break; + } + err = zap_lookup (&(dnode_path->dn), cname, &objnum, + data, subvol->case_insensitive); +@@ -2879,11 +2879,18 @@ dnode_get_path (struct subvolume *subvol, const char *path_in, dnode_end_t *dn, + << SPA_MINBLOCKSHIFT); + + if (blksz == 0) +- return grub_error(GRUB_ERR_BAD_FS, "0-sized block"); ++ { ++ err = grub_error (GRUB_ERR_BAD_FS, "0-sized block"); ++ break; ++ } + + sym_value = grub_malloc (sym_sz); + if (!sym_value) +- return grub_errno; ++ { ++ err = grub_errno; ++ break; ++ } ++ + for (block = 0; block < (sym_sz + blksz - 1) / blksz; block++) + { + void *t; +@@ -2893,7 +2900,7 @@ dnode_get_path (struct subvolume *subvol, const char *path_in, dnode_end_t *dn, + if (err) + { + grub_free (sym_value); +- return err; ++ break; + } + + movesize = sym_sz - block * blksz; +@@ -2903,6 +2910,8 @@ dnode_get_path (struct subvolume *subvol, const char *path_in, dnode_end_t *dn, + grub_memcpy (sym_value + block * blksz, t, movesize); + grub_free (t); + } ++ if (err) ++ break; + free_symval = 1; + } + path = path_buf = grub_malloc (sym_sz + grub_strlen (oldpath) + 1); +@@ -2911,7 +2920,8 @@ dnode_get_path (struct subvolume *subvol, const char *path_in, dnode_end_t *dn, + grub_free (oldpathbuf); + if (free_symval) + grub_free (sym_value); +- return grub_errno; ++ err = grub_errno; ++ break; + } + grub_memcpy (path, sym_value, sym_sz); + if (free_symval) +@@ -2949,11 +2959,12 @@ dnode_get_path (struct subvolume *subvol, const char *path_in, dnode_end_t *dn, + + err = zio_read (bp, dnode_path->dn.endian, &sahdrp, NULL, data); + if (err) +- return err; ++ break; + } + else + { +- return grub_error (GRUB_ERR_BAD_FS, "filesystem is corrupt"); ++ err = grub_error (GRUB_ERR_BAD_FS, "filesystem is corrupt"); ++ break; + } + + hdrsize = SA_HDR_SIZE (((sa_hdr_phys_t *) sahdrp)); +@@ -2974,7 +2985,8 @@ dnode_get_path (struct subvolume *subvol, const char *path_in, dnode_end_t *dn, + if (!path_buf) + { + grub_free (oldpathbuf); +- return grub_errno; ++ err = grub_errno; ++ break; + } + grub_memcpy (path, sym_value, sym_sz); + path [sym_sz] = 0; +-- +2.14.2 + diff --git a/boot/grub2/0070-zfs-Fix-possible-integer-overflows.patch b/boot/grub2/0070-zfs-Fix-possible-integer-overflows.patch new file mode 100644 index 00000000..b4791e61 --- /dev/null +++ b/boot/grub2/0070-zfs-Fix-possible-integer-overflows.patch @@ -0,0 +1,57 @@ +From 302c12ff5714bc455949117c1c9548ccb324d55b Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Tue, 8 Dec 2020 22:17:04 +0000 +Subject: [PATCH] zfs: Fix possible integer overflows + +In all cases the problem is that the value being acted upon by +a left-shift is a 32-bit number which is then being used in the +context of a 64-bit number. + +To avoid overflow we ensure that the number being shifted is 64-bit +before the shift is done. + +Fixes: CID 73684, CID 73695, CID 73764 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/fs/zfs/zfs.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c +index 9087a72..b078ccc 100644 +--- a/grub-core/fs/zfs/zfs.c ++++ b/grub-core/fs/zfs/zfs.c +@@ -564,7 +564,7 @@ find_bestub (uberblock_phys_t * ub_array, + ubptr = (uberblock_phys_t *) ((grub_properly_aligned_t *) ub_array + + ((i << ub_shift) + / sizeof (grub_properly_aligned_t))); +- err = uberblock_verify (ubptr, offset, 1 << ub_shift); ++ err = uberblock_verify (ubptr, offset, (grub_size_t) 1 << ub_shift); + if (err) + { + grub_errno = GRUB_ERR_NONE; +@@ -1543,7 +1543,7 @@ read_device (grub_uint64_t offset, struct grub_zfs_device_desc *desc, + + high = grub_divmod64 ((offset >> desc->ashift) + c, + desc->n_children, &devn); +- csize = bsize << desc->ashift; ++ csize = (grub_size_t) bsize << desc->ashift; + if (csize > len) + csize = len; + +@@ -1635,8 +1635,8 @@ read_device (grub_uint64_t offset, struct grub_zfs_device_desc *desc, + + while (len > 0) + { +- grub_size_t csize; +- csize = ((s / (desc->n_children - desc->nparity)) ++ grub_size_t csize = s; ++ csize = ((csize / (desc->n_children - desc->nparity)) + << desc->ashift); + if (csize > len) + csize = len; +-- +2.14.2 + diff --git a/boot/grub2/0071-zfsinfo-Correct-a-check-for-error-allocating-memory.patch b/boot/grub2/0071-zfsinfo-Correct-a-check-for-error-allocating-memory.patch new file mode 100644 index 00000000..817fbc37 --- /dev/null +++ b/boot/grub2/0071-zfsinfo-Correct-a-check-for-error-allocating-memory.patch @@ -0,0 +1,36 @@ +From 7aab03418ec6a9b991aa44416cb2585aff4e7972 Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Thu, 26 Nov 2020 10:56:45 +0000 +Subject: [PATCH] zfsinfo: Correct a check for error allocating memory + +While arguably the check for grub_errno is correct, we should really be +checking the return value from the function since it is always possible +that grub_errno was set elsewhere, making this code behave incorrectly. + +Fixes: CID 73668 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/fs/zfs/zfsinfo.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/grub-core/fs/zfs/zfsinfo.c b/grub-core/fs/zfs/zfsinfo.c +index c8a28ac..bf29180 100644 +--- a/grub-core/fs/zfs/zfsinfo.c ++++ b/grub-core/fs/zfs/zfsinfo.c +@@ -358,8 +358,8 @@ grub_cmd_zfs_bootfs (grub_command_t cmd __attribute__ ((unused)), int argc, + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected")); + + devname = grub_file_get_device_name (args[0]); +- if (grub_errno) +- return grub_errno; ++ if (devname == NULL) ++ return GRUB_ERR_OUT_OF_MEMORY; + + dev = grub_device_open (devname); + grub_free (devname); +-- +2.14.2 + diff --git a/boot/grub2/0072-affs-Fix-memory-leaks.patch b/boot/grub2/0072-affs-Fix-memory-leaks.patch new file mode 100644 index 00000000..bcbc0377 --- /dev/null +++ b/boot/grub2/0072-affs-Fix-memory-leaks.patch @@ -0,0 +1,83 @@ +From 178ac5107389f8e5b32489d743d6824a5ebf342a Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Thu, 26 Nov 2020 12:48:07 +0000 +Subject: [PATCH] affs: Fix memory leaks + +The node structure reference is being allocated but not freed if it +reaches the end of the function. If any of the hooks had returned +a non-zero value, then node would have been copied in to the context +reference, but otherwise node is not stored and should be freed. + +Similarly, the call to grub_affs_create_node() replaces the allocated +memory in node with a newly allocated structure, leaking the existing +memory pointed by node. + +Finally, when dir->parent is set, then we again replace node with newly +allocated memory, which seems unnecessary when we copy in the values +from dir->parent immediately after. + +Fixes: CID 73759 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/fs/affs.c | 18 ++++++++---------- + 1 file changed, 8 insertions(+), 10 deletions(-) + +diff --git a/grub-core/fs/affs.c b/grub-core/fs/affs.c +index 220b371..230e26a 100644 +--- a/grub-core/fs/affs.c ++++ b/grub-core/fs/affs.c +@@ -400,12 +400,12 @@ grub_affs_iterate_dir (grub_fshelp_node_t dir, + { + unsigned int i; + struct grub_affs_file file; +- struct grub_fshelp_node *node = 0; ++ struct grub_fshelp_node *node, *orig_node; + struct grub_affs_data *data = dir->data; + grub_uint32_t *hashtable; + + /* Create the directory entries for `.' and `..'. */ +- node = grub_zalloc (sizeof (*node)); ++ node = orig_node = grub_zalloc (sizeof (*node)); + if (!node) + return 1; + +@@ -414,9 +414,6 @@ grub_affs_iterate_dir (grub_fshelp_node_t dir, + return 1; + if (dir->parent) + { +- node = grub_zalloc (sizeof (*node)); +- if (!node) +- return 1; + *node = *dir->parent; + if (hook ("..", GRUB_FSHELP_DIR, node, hook_data)) + return 1; +@@ -456,17 +453,18 @@ grub_affs_iterate_dir (grub_fshelp_node_t dir, + + if (grub_affs_create_node (dir, hook, hook_data, &node, &hashtable, + next, &file)) +- return 1; ++ { ++ /* Node has been replaced in function. */ ++ grub_free (orig_node); ++ return 1; ++ } + + next = grub_be_to_cpu32 (file.next); + } + } + +- grub_free (hashtable); +- return 0; +- + fail: +- grub_free (node); ++ grub_free (orig_node); + grub_free (hashtable); + return 0; + } +-- +2.14.2 + diff --git a/boot/grub2/0073-libgcrypt-mpi-Fix-possible-unintended-sign-extension.patch b/boot/grub2/0073-libgcrypt-mpi-Fix-possible-unintended-sign-extension.patch new file mode 100644 index 00000000..5e5bb2f0 --- /dev/null +++ b/boot/grub2/0073-libgcrypt-mpi-Fix-possible-unintended-sign-extension.patch @@ -0,0 +1,50 @@ +From e8814c811132a70f9b55418f7567378a34ad3883 Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Tue, 3 Nov 2020 16:43:37 +0000 +Subject: [PATCH] libgcrypt/mpi: Fix possible unintended sign extension + +The array of unsigned char gets promoted to a signed 32-bit int before +it is finally promoted to a size_t. There is the possibility that this +may result in the signed-bit being set for the intermediate signed +32-bit int. We should ensure that the promotion is to the correct type +before we bitwise-OR the values. + +Fixes: CID 96697 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/lib/libgcrypt-grub/mpi/mpicoder.c | 2 +- + grub-core/lib/libgcrypt/mpi/mpicoder.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpicoder.c b/grub-core/lib/libgcrypt-grub/mpi/mpicoder.c +index 3d55dfc..faf1cd6 100644 +--- a/grub-core/lib/libgcrypt-grub/mpi/mpicoder.c ++++ b/grub-core/lib/libgcrypt-grub/mpi/mpicoder.c +@@ -460,7 +460,7 @@ gcry_mpi_scan (struct gcry_mpi **ret_mpi, enum gcry_mpi_format format, + if (len && len < 4) + return gcry_error (GPG_ERR_TOO_SHORT); + +- n = (s[0] << 24 | s[1] << 16 | s[2] << 8 | s[3]); ++ n = ((size_t)s[0] << 24 | (size_t)s[1] << 16 | (size_t)s[2] << 8 | (size_t)s[3]); + s += 4; + if (len) + len -= 4; +diff --git a/grub-core/lib/libgcrypt/mpi/mpicoder.c b/grub-core/lib/libgcrypt/mpi/mpicoder.c +index a3435ed..7ecad27 100644 +--- a/grub-core/lib/libgcrypt/mpi/mpicoder.c ++++ b/grub-core/lib/libgcrypt/mpi/mpicoder.c +@@ -458,7 +458,7 @@ gcry_mpi_scan (struct gcry_mpi **ret_mpi, enum gcry_mpi_format format, + if (len && len < 4) + return gcry_error (GPG_ERR_TOO_SHORT); + +- n = (s[0] << 24 | s[1] << 16 | s[2] << 8 | s[3]); ++ n = ((size_t)s[0] << 24 | (size_t)s[1] << 16 | (size_t)s[2] << 8 | (size_t)s[3]); + s += 4; + if (len) + len -= 4; +-- +2.14.2 + diff --git a/boot/grub2/0074-libgcrypt-mpi-Fix-possible-NULL-dereference.patch b/boot/grub2/0074-libgcrypt-mpi-Fix-possible-NULL-dereference.patch new file mode 100644 index 00000000..80446aa0 --- /dev/null +++ b/boot/grub2/0074-libgcrypt-mpi-Fix-possible-NULL-dereference.patch @@ -0,0 +1,49 @@ +From ae0f3fabeba7b393113d5dc185b6aff9b728136d Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Thu, 26 Nov 2020 10:41:54 +0000 +Subject: [PATCH] libgcrypt/mpi: Fix possible NULL dereference + +The code in gcry_mpi_scan() assumes that buffer is not NULL, but there +is no explicit check for that, so we add one. + +Fixes: CID 73757 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/lib/libgcrypt-grub/mpi/mpicoder.c | 3 +++ + grub-core/lib/libgcrypt/mpi/mpicoder.c | 3 +++ + 2 files changed, 6 insertions(+) + +diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpicoder.c b/grub-core/lib/libgcrypt-grub/mpi/mpicoder.c +index faf1cd6..e734dcf 100644 +--- a/grub-core/lib/libgcrypt-grub/mpi/mpicoder.c ++++ b/grub-core/lib/libgcrypt-grub/mpi/mpicoder.c +@@ -381,6 +381,9 @@ gcry_mpi_scan (struct gcry_mpi **ret_mpi, enum gcry_mpi_format format, + unsigned int len; + int secure = (buffer && gcry_is_secure (buffer)); + ++ if (!buffer) ++ return gcry_error (GPG_ERR_INV_ARG); ++ + if (format == GCRYMPI_FMT_SSH) + len = 0; + else +diff --git a/grub-core/lib/libgcrypt/mpi/mpicoder.c b/grub-core/lib/libgcrypt/mpi/mpicoder.c +index 7ecad27..6fe3891 100644 +--- a/grub-core/lib/libgcrypt/mpi/mpicoder.c ++++ b/grub-core/lib/libgcrypt/mpi/mpicoder.c +@@ -379,6 +379,9 @@ gcry_mpi_scan (struct gcry_mpi **ret_mpi, enum gcry_mpi_format format, + unsigned int len; + int secure = (buffer && gcry_is_secure (buffer)); + ++ if (!buffer) ++ return gcry_error (GPG_ERR_INV_ARG); ++ + if (format == GCRYMPI_FMT_SSH) + len = 0; + else +-- +2.14.2 + diff --git a/boot/grub2/0075-syslinux-Fix-memory-leak-while-parsing.patch b/boot/grub2/0075-syslinux-Fix-memory-leak-while-parsing.patch new file mode 100644 index 00000000..acc3034e --- /dev/null +++ b/boot/grub2/0075-syslinux-Fix-memory-leak-while-parsing.patch @@ -0,0 +1,44 @@ +From 95bc016dba94cab3d398dd74160665915cd08ad6 Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Thu, 26 Nov 2020 15:31:53 +0000 +Subject: [PATCH] syslinux: Fix memory leak while parsing + +In syslinux_parse_real() the 2 points where return is being called +didn't release the memory stored in buf which is no longer required. + +Fixes: CID 176634 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/lib/syslinux_parse.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/grub-core/lib/syslinux_parse.c b/grub-core/lib/syslinux_parse.c +index 4afa992..3acc6b4 100644 +--- a/grub-core/lib/syslinux_parse.c ++++ b/grub-core/lib/syslinux_parse.c +@@ -737,7 +737,10 @@ syslinux_parse_real (struct syslinux_menu *menu) + && grub_strncasecmp ("help", ptr3, ptr4 - ptr3) == 0)) + { + if (helptext (ptr5, file, menu)) +- return 1; ++ { ++ grub_free (buf); ++ return 1; ++ } + continue; + } + +@@ -757,6 +760,7 @@ syslinux_parse_real (struct syslinux_menu *menu) + } + fail: + grub_file_close (file); ++ grub_free (buf); + return err; + } + +-- +2.14.2 + diff --git a/boot/grub2/0076-normal-completion-Fix-leaking-of-memory-when-process.patch b/boot/grub2/0076-normal-completion-Fix-leaking-of-memory-when-process.patch new file mode 100644 index 00000000..52f01ab9 --- /dev/null +++ b/boot/grub2/0076-normal-completion-Fix-leaking-of-memory-when-process.patch @@ -0,0 +1,53 @@ +From 9213575b7a95b514bce80be5964a28d407d7d56d Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Fri, 4 Dec 2020 18:56:48 +0000 +Subject: [PATCH] normal/completion: Fix leaking of memory when processing a + completion + +It is possible for the code to reach the end of the function without +freeing the memory allocated to argv and argc still to be 0. + +We should always call grub_free(argv). The grub_free() will handle +a NULL argument correctly if it reaches that code without the memory +being allocated. + +Fixes: CID 96672 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/normal/completion.c | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +diff --git a/grub-core/normal/completion.c b/grub-core/normal/completion.c +index 5961028..46e473c 100644 +--- a/grub-core/normal/completion.c ++++ b/grub-core/normal/completion.c +@@ -400,8 +400,8 @@ char * + grub_normal_do_completion (char *buf, int *restore, + void (*hook) (const char *, grub_completion_type_t, int)) + { +- int argc; +- char **argv; ++ int argc = 0; ++ char **argv = NULL; + + /* Initialize variables. */ + match = 0; +@@ -516,10 +516,8 @@ grub_normal_do_completion (char *buf, int *restore, + + fail: + if (argc != 0) +- { +- grub_free (argv[0]); +- grub_free (argv); +- } ++ grub_free (argv[0]); ++ grub_free (argv); + grub_free (match); + grub_errno = GRUB_ERR_NONE; + +-- +2.14.2 + diff --git a/boot/grub2/0077-commands-hashsum-Fix-a-memory-leak.patch b/boot/grub2/0077-commands-hashsum-Fix-a-memory-leak.patch new file mode 100644 index 00000000..ce06c550 --- /dev/null +++ b/boot/grub2/0077-commands-hashsum-Fix-a-memory-leak.patch @@ -0,0 +1,57 @@ +From 8b6f528e52e18b7a69f90b8dc3671d7b1147d9f3 Mon Sep 17 00:00:00 2001 +From: Chris Coulson +Date: Tue, 1 Dec 2020 23:41:24 +0000 +Subject: [PATCH] commands/hashsum: Fix a memory leak + +check_list() uses grub_file_getline(), which allocates a buffer. +If the hash list file contains invalid lines, the function leaks +this buffer when it returns an error. + +Fixes: CID 176635 + +Signed-off-by: Chris Coulson +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/commands/hashsum.c | 15 ++++++++++++--- + 1 file changed, 12 insertions(+), 3 deletions(-) + +diff --git a/grub-core/commands/hashsum.c b/grub-core/commands/hashsum.c +index 456ba90..b8a22b0 100644 +--- a/grub-core/commands/hashsum.c ++++ b/grub-core/commands/hashsum.c +@@ -128,11 +128,17 @@ check_list (const gcry_md_spec_t *hash, const char *hashfilename, + high = hextoval (*p++); + low = hextoval (*p++); + if (high < 0 || low < 0) +- return grub_error (GRUB_ERR_BAD_FILE_TYPE, "invalid hash list"); ++ { ++ grub_free (buf); ++ return grub_error (GRUB_ERR_BAD_FILE_TYPE, "invalid hash list"); ++ } + expected[i] = (high << 4) | low; + } + if ((p[0] != ' ' && p[0] != '\t') || (p[1] != ' ' && p[1] != '\t')) +- return grub_error (GRUB_ERR_BAD_FILE_TYPE, "invalid hash list"); ++ { ++ grub_free (buf); ++ return grub_error (GRUB_ERR_BAD_FILE_TYPE, "invalid hash list"); ++ } + p += 2; + if (prefix) + { +@@ -140,7 +146,10 @@ check_list (const gcry_md_spec_t *hash, const char *hashfilename, + + filename = grub_xasprintf ("%s/%s", prefix, p); + if (!filename) +- return grub_errno; ++ { ++ grub_free (buf); ++ return grub_errno; ++ } + file = grub_file_open (filename, GRUB_FILE_TYPE_TO_HASH + | (!uncompress ? GRUB_FILE_TYPE_NO_DECOMPRESS + : GRUB_FILE_TYPE_NONE)); +-- +2.14.2 + diff --git a/boot/grub2/0079-video-efi_gop-Remove-unnecessary-return-value-of-gru.patch b/boot/grub2/0079-video-efi_gop-Remove-unnecessary-return-value-of-gru.patch new file mode 100644 index 00000000..f4591593 --- /dev/null +++ b/boot/grub2/0079-video-efi_gop-Remove-unnecessary-return-value-of-gru.patch @@ -0,0 +1,95 @@ +From fc5951d3b1616055ef81a019a5affc09d13344d0 Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Tue, 8 Dec 2020 21:14:31 +0000 +Subject: [PATCH] video/efi_gop: Remove unnecessary return value of + grub_video_gop_fill_mode_info() + +The return value of grub_video_gop_fill_mode_info() is never able to be +anything other than GRUB_ERR_NONE. So, rather than continue to return +a value and checking it each time, it is more correct to redefine the +function to not return anything and remove checks of its return value +altogether. + +Fixes: CID 96701 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/video/efi_gop.c | 25 ++++++------------------- + 1 file changed, 6 insertions(+), 19 deletions(-) + +diff --git a/grub-core/video/efi_gop.c b/grub-core/video/efi_gop.c +index 7f9d1c2..db2ee98 100644 +--- a/grub-core/video/efi_gop.c ++++ b/grub-core/video/efi_gop.c +@@ -227,7 +227,7 @@ grub_video_gop_fill_real_mode_info (unsigned mode, + return GRUB_ERR_NONE; + } + +-static grub_err_t ++static void + grub_video_gop_fill_mode_info (unsigned mode, + struct grub_efi_gop_mode_info *in, + struct grub_video_mode_info *out) +@@ -252,8 +252,6 @@ grub_video_gop_fill_mode_info (unsigned mode, + out->blit_format = GRUB_VIDEO_BLIT_FORMAT_BGRA_8888; + out->mode_type |= (GRUB_VIDEO_MODE_TYPE_DOUBLE_BUFFERED + | GRUB_VIDEO_MODE_TYPE_UPDATING_SWAP); +- +- return GRUB_ERR_NONE; + } + + static int +@@ -266,7 +264,6 @@ grub_video_gop_iterate (int (*hook) (const struct grub_video_mode_info *info, vo + grub_efi_uintn_t size; + grub_efi_status_t status; + struct grub_efi_gop_mode_info *info = NULL; +- grub_err_t err; + struct grub_video_mode_info mode_info; + + status = efi_call_4 (gop->query_mode, gop, mode, &size, &info); +@@ -277,12 +274,7 @@ grub_video_gop_iterate (int (*hook) (const struct grub_video_mode_info *info, vo + continue; + } + +- err = grub_video_gop_fill_mode_info (mode, info, &mode_info); +- if (err) +- { +- grub_errno = GRUB_ERR_NONE; +- continue; +- } ++ grub_video_gop_fill_mode_info (mode, info, &mode_info); + if (hook (&mode_info, hook_arg)) + return 1; + } +@@ -466,13 +458,8 @@ grub_video_gop_setup (unsigned int width, unsigned int height, + + info = gop->mode->info; + +- err = grub_video_gop_fill_mode_info (gop->mode->mode, info, +- &framebuffer.mode_info); +- if (err) +- { +- grub_dprintf ("video", "GOP: couldn't fill mode info\n"); +- return err; +- } ++ grub_video_gop_fill_mode_info (gop->mode->mode, info, ++ &framebuffer.mode_info); + + framebuffer.ptr = (void *) (grub_addr_t) gop->mode->fb_base; + framebuffer.offscreen +@@ -486,8 +473,8 @@ grub_video_gop_setup (unsigned int width, unsigned int height, + { + grub_dprintf ("video", "GOP: couldn't allocate shadow\n"); + grub_errno = 0; +- err = grub_video_gop_fill_mode_info (gop->mode->mode, info, +- &framebuffer.mode_info); ++ grub_video_gop_fill_mode_info (gop->mode->mode, info, ++ &framebuffer.mode_info); + buffer = framebuffer.ptr; + } + +-- +2.14.2 + diff --git a/boot/grub2/0080-video-fb-fbfill-Fix-potential-integer-overflow.patch b/boot/grub2/0080-video-fb-fbfill-Fix-potential-integer-overflow.patch new file mode 100644 index 00000000..ef0cb1d7 --- /dev/null +++ b/boot/grub2/0080-video-fb-fbfill-Fix-potential-integer-overflow.patch @@ -0,0 +1,79 @@ +From 7ce3259f67ac2cd93acb0ec0080c24b3b69e66c6 Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Wed, 4 Nov 2020 15:10:51 +0000 +Subject: [PATCH] video/fb/fbfill: Fix potential integer overflow + +The multiplication of 2 unsigned 32-bit integers may overflow before +promotion to unsigned 64-bit. We should ensure that the multiplication +is done with overflow detection. Additionally, use grub_sub() for +subtraction. + +Fixes: CID 73640, CID 73697, CID 73702, CID 73823 + +Signed-off-by: Darren Kenny +Signed-off-by: Marco A Benatto +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/video/fb/fbfill.c | 17 +++++++++++++---- + 1 file changed, 13 insertions(+), 4 deletions(-) + +diff --git a/grub-core/video/fb/fbfill.c b/grub-core/video/fb/fbfill.c +index 11816d0..a37acd1 100644 +--- a/grub-core/video/fb/fbfill.c ++++ b/grub-core/video/fb/fbfill.c +@@ -31,6 +31,7 @@ + #include + #include + #include ++#include + #include + + /* Generic filler that works for every supported mode. */ +@@ -61,7 +62,9 @@ grub_video_fbfill_direct32 (struct grub_video_fbblit_info *dst, + + /* Calculate the number of bytes to advance from the end of one line + to the beginning of the next line. */ +- rowskip = dst->mode_info->pitch - dst->mode_info->bytes_per_pixel * width; ++ if (grub_mul (dst->mode_info->bytes_per_pixel, width, &rowskip) || ++ grub_sub (dst->mode_info->pitch, rowskip, &rowskip)) ++ return; + + /* Get the start address. */ + dstptr = grub_video_fb_get_video_ptr (dst, x, y); +@@ -98,7 +101,9 @@ grub_video_fbfill_direct24 (struct grub_video_fbblit_info *dst, + #endif + /* Calculate the number of bytes to advance from the end of one line + to the beginning of the next line. */ +- rowskip = dst->mode_info->pitch - dst->mode_info->bytes_per_pixel * width; ++ if (grub_mul (dst->mode_info->bytes_per_pixel, width, &rowskip) || ++ grub_sub (dst->mode_info->pitch, rowskip, &rowskip)) ++ return; + + /* Get the start address. */ + dstptr = grub_video_fb_get_video_ptr (dst, x, y); +@@ -131,7 +136,9 @@ grub_video_fbfill_direct16 (struct grub_video_fbblit_info *dst, + + /* Calculate the number of bytes to advance from the end of one line + to the beginning of the next line. */ +- rowskip = (dst->mode_info->pitch - dst->mode_info->bytes_per_pixel * width); ++ if (grub_mul (dst->mode_info->bytes_per_pixel, width, &rowskip) || ++ grub_sub (dst->mode_info->pitch, rowskip, &rowskip)) ++ return; + + /* Get the start address. */ + dstptr = grub_video_fb_get_video_ptr (dst, x, y); +@@ -161,7 +168,9 @@ grub_video_fbfill_direct8 (struct grub_video_fbblit_info *dst, + + /* Calculate the number of bytes to advance from the end of one line + to the beginning of the next line. */ +- rowskip = dst->mode_info->pitch - dst->mode_info->bytes_per_pixel * width; ++ if (grub_mul (dst->mode_info->bytes_per_pixel, width, &rowskip) || ++ grub_sub (dst->mode_info->pitch, rowskip, &rowskip)) ++ return; + + /* Get the start address. */ + dstptr = grub_video_fb_get_video_ptr (dst, x, y); +-- +2.14.2 + diff --git a/boot/grub2/0081-video-fb-video_fb-Fix-multiple-integer-overflows.patch b/boot/grub2/0081-video-fb-video_fb-Fix-multiple-integer-overflows.patch new file mode 100644 index 00000000..cd75284c --- /dev/null +++ b/boot/grub2/0081-video-fb-video_fb-Fix-multiple-integer-overflows.patch @@ -0,0 +1,105 @@ +From 08e098b1dbf01e96376f594b337491bc4cfa48dd Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Wed, 4 Nov 2020 14:43:44 +0000 +Subject: [PATCH] video/fb/video_fb: Fix multiple integer overflows + +The calculation of the unsigned 64-bit value is being generated by +multiplying 2, signed or unsigned, 32-bit integers which may overflow +before promotion to unsigned 64-bit. Fix all of them. + +Fixes: CID 73703, CID 73767, CID 73833 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/video/fb/video_fb.c | 52 ++++++++++++++++++++++++++++++------------- + 1 file changed, 36 insertions(+), 16 deletions(-) + +diff --git a/grub-core/video/fb/video_fb.c b/grub-core/video/fb/video_fb.c +index 1a602c8..1c9a138 100644 +--- a/grub-core/video/fb/video_fb.c ++++ b/grub-core/video/fb/video_fb.c +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -1417,15 +1418,23 @@ doublebuf_blit_update_screen (void) + { + if (framebuffer.current_dirty.first_line + <= framebuffer.current_dirty.last_line) +- grub_memcpy ((char *) framebuffer.pages[0] +- + framebuffer.current_dirty.first_line +- * framebuffer.back_target->mode_info.pitch, +- (char *) framebuffer.back_target->data +- + framebuffer.current_dirty.first_line +- * framebuffer.back_target->mode_info.pitch, +- framebuffer.back_target->mode_info.pitch +- * (framebuffer.current_dirty.last_line +- - framebuffer.current_dirty.first_line)); ++ { ++ grub_size_t copy_size; ++ ++ if (grub_sub (framebuffer.current_dirty.last_line, ++ framebuffer.current_dirty.first_line, ©_size) || ++ grub_mul (framebuffer.back_target->mode_info.pitch, copy_size, ©_size)) ++ { ++ /* Shouldn't happen, but if it does we've a bug. */ ++ return GRUB_ERR_BUG; ++ } ++ ++ grub_memcpy ((char *) framebuffer.pages[0] + framebuffer.current_dirty.first_line * ++ framebuffer.back_target->mode_info.pitch, ++ (char *) framebuffer.back_target->data + framebuffer.current_dirty.first_line * ++ framebuffer.back_target->mode_info.pitch, ++ copy_size); ++ } + framebuffer.current_dirty.first_line + = framebuffer.back_target->mode_info.height; + framebuffer.current_dirty.last_line = 0; +@@ -1439,7 +1448,7 @@ grub_video_fb_doublebuf_blit_init (struct grub_video_fbrender_target **back, + volatile void *framebuf) + { + grub_err_t err; +- grub_size_t page_size = mode_info.pitch * mode_info.height; ++ grub_size_t page_size = (grub_size_t) mode_info.pitch * mode_info.height; + + framebuffer.offscreen_buffer = grub_zalloc (page_size); + if (! framebuffer.offscreen_buffer) +@@ -1482,12 +1491,23 @@ doublebuf_pageflipping_update_screen (void) + last_line = framebuffer.previous_dirty.last_line; + + if (first_line <= last_line) +- grub_memcpy ((char *) framebuffer.pages[framebuffer.render_page] +- + first_line * framebuffer.back_target->mode_info.pitch, +- (char *) framebuffer.back_target->data +- + first_line * framebuffer.back_target->mode_info.pitch, +- framebuffer.back_target->mode_info.pitch +- * (last_line - first_line)); ++ { ++ grub_size_t copy_size; ++ ++ if (grub_sub (last_line, first_line, ©_size) || ++ grub_mul (framebuffer.back_target->mode_info.pitch, copy_size, ©_size)) ++ { ++ /* Shouldn't happen, but if it does we've a bug. */ ++ return GRUB_ERR_BUG; ++ } ++ ++ grub_memcpy ((char *) framebuffer.pages[framebuffer.render_page] + first_line * ++ framebuffer.back_target->mode_info.pitch, ++ (char *) framebuffer.back_target->data + first_line * ++ framebuffer.back_target->mode_info.pitch, ++ copy_size); ++ } ++ + framebuffer.previous_dirty = framebuffer.current_dirty; + framebuffer.current_dirty.first_line + = framebuffer.back_target->mode_info.height; +-- +2.14.2 + diff --git a/boot/grub2/0082-video-fb-video_fb-Fix-possible-integer-overflow.patch b/boot/grub2/0082-video-fb-video_fb-Fix-possible-integer-overflow.patch new file mode 100644 index 00000000..3b4bc227 --- /dev/null +++ b/boot/grub2/0082-video-fb-video_fb-Fix-possible-integer-overflow.patch @@ -0,0 +1,40 @@ +From 08413f2f4edec0e2d9bf15f836f6ee5ca2e379cb Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Fri, 4 Dec 2020 14:51:30 +0000 +Subject: [PATCH] video/fb/video_fb: Fix possible integer overflow + +It is minimal possibility that the values being used here will overflow. +So, change the code to use the safemath function grub_mul() to ensure +that doesn't happen. + +Fixes: CID 73761 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/video/fb/video_fb.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/grub-core/video/fb/video_fb.c b/grub-core/video/fb/video_fb.c +index 1c9a138..ae6b89f 100644 +--- a/grub-core/video/fb/video_fb.c ++++ b/grub-core/video/fb/video_fb.c +@@ -1537,7 +1537,13 @@ doublebuf_pageflipping_init (struct grub_video_mode_info *mode_info, + volatile void *page1_ptr) + { + grub_err_t err; +- grub_size_t page_size = mode_info->pitch * mode_info->height; ++ grub_size_t page_size = 0; ++ ++ if (grub_mul (mode_info->pitch, mode_info->height, &page_size)) ++ { ++ /* Shouldn't happen, but if it does we've a bug. */ ++ return GRUB_ERR_BUG; ++ } + + framebuffer.offscreen_buffer = grub_malloc (page_size); + if (! framebuffer.offscreen_buffer) +-- +2.14.2 + diff --git a/boot/grub2/0083-video-readers-jpeg-Test-for-an-invalid-next-marker-r.patch b/boot/grub2/0083-video-readers-jpeg-Test-for-an-invalid-next-marker-r.patch new file mode 100644 index 00000000..12aba364 --- /dev/null +++ b/boot/grub2/0083-video-readers-jpeg-Test-for-an-invalid-next-marker-r.patch @@ -0,0 +1,39 @@ +From 5f5eb7ca8e971227e95745abe541df3e1509360e Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Fri, 4 Dec 2020 15:39:00 +0000 +Subject: [PATCH] video/readers/jpeg: Test for an invalid next marker reference + from a jpeg file + +While it may never happen, and potentially could be caught at the end of +the function, it is worth checking up front for a bad reference to the +next marker just in case of a maliciously crafted file being provided. + +Fixes: CID 73694 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/video/readers/jpeg.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/grub-core/video/readers/jpeg.c b/grub-core/video/readers/jpeg.c +index 31359a4..0b6ce3c 100644 +--- a/grub-core/video/readers/jpeg.c ++++ b/grub-core/video/readers/jpeg.c +@@ -253,6 +253,12 @@ grub_jpeg_decode_quan_table (struct grub_jpeg_data *data) + next_marker = data->file->offset; + next_marker += grub_jpeg_get_word (data); + ++ if (next_marker > data->file->size) ++ { ++ /* Should never be set beyond the size of the file. */ ++ return grub_error (GRUB_ERR_BAD_FILE_TYPE, "jpeg: invalid next reference"); ++ } ++ + while (data->file->offset + sizeof (data->quan_table[id]) + 1 + <= next_marker) + { +-- +2.14.2 + diff --git a/boot/grub2/0084-gfxmenu-gui_list-Remove-code-that-coverity-is-flaggi.patch b/boot/grub2/0084-gfxmenu-gui_list-Remove-code-that-coverity-is-flaggi.patch new file mode 100644 index 00000000..73fcd780 --- /dev/null +++ b/boot/grub2/0084-gfxmenu-gui_list-Remove-code-that-coverity-is-flaggi.patch @@ -0,0 +1,35 @@ +From 4a1aa5917595650efbd46b581368c470ebee42ab Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Mon, 7 Dec 2020 14:44:47 +0000 +Subject: [PATCH] gfxmenu/gui_list: Remove code that coverity is flagging as + dead + +The test of value for NULL before calling grub_strdup() is not required, +since the if condition prior to this has already tested for value being +NULL and cannot reach this code if it is. + +Fixes: CID 73659 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/gfxmenu/gui_list.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/gfxmenu/gui_list.c b/grub-core/gfxmenu/gui_list.c +index 01477cd..df334a6 100644 +--- a/grub-core/gfxmenu/gui_list.c ++++ b/grub-core/gfxmenu/gui_list.c +@@ -771,7 +771,7 @@ list_set_property (void *vself, const char *name, const char *value) + { + self->need_to_recreate_boxes = 1; + grub_free (self->selected_item_box_pattern); +- self->selected_item_box_pattern = value ? grub_strdup (value) : 0; ++ self->selected_item_box_pattern = grub_strdup (value); + self->selected_item_box_pattern_inherit = 0; + } + } +-- +2.14.2 + diff --git a/boot/grub2/0085-loader-bsd-Check-for-NULL-arg-up-front.patch b/boot/grub2/0085-loader-bsd-Check-for-NULL-arg-up-front.patch new file mode 100644 index 00000000..c3704575 --- /dev/null +++ b/boot/grub2/0085-loader-bsd-Check-for-NULL-arg-up-front.patch @@ -0,0 +1,48 @@ +From 5d5391b0a05abe76e04c1eb68dcc6cbef5326c4a Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Tue, 8 Dec 2020 21:47:13 +0000 +Subject: [PATCH] loader/bsd: Check for NULL arg up-front + +The code in the next block suggests that it is possible for .set to be +true but .arg may still be NULL. + +This code assumes that it is never NULL, yet later is testing if it is +NULL - that is inconsistent. + +So we should check first if .arg is not NULL, and remove this check that +is being flagged by Coverity since it is no longer required. + +Fixes: CID 292471 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/loader/i386/bsd.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/grub-core/loader/i386/bsd.c b/grub-core/loader/i386/bsd.c +index b92cbe9..8432283 100644 +--- a/grub-core/loader/i386/bsd.c ++++ b/grub-core/loader/i386/bsd.c +@@ -1605,7 +1605,7 @@ grub_cmd_openbsd (grub_extcmd_context_t ctxt, int argc, char *argv[]) + kernel_type = KERNEL_TYPE_OPENBSD; + bootflags = grub_bsd_parse_flags (ctxt->state, openbsd_flags); + +- if (ctxt->state[OPENBSD_ROOT_ARG].set) ++ if (ctxt->state[OPENBSD_ROOT_ARG].set && ctxt->state[OPENBSD_ROOT_ARG].arg != NULL) + { + const char *arg = ctxt->state[OPENBSD_ROOT_ARG].arg; + unsigned type, unit, part; +@@ -1622,7 +1622,7 @@ grub_cmd_openbsd (grub_extcmd_context_t ctxt, int argc, char *argv[]) + "unknown disk type name"); + + unit = grub_strtoul (arg, (char **) &arg, 10); +- if (! (arg && *arg >= 'a' && *arg <= 'z')) ++ if (! (*arg >= 'a' && *arg <= 'z')) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + "only device specifications of form " + " are supported"); +-- +2.14.2 + diff --git a/boot/grub2/0086-loader-xnu-Fix-memory-leak.patch b/boot/grub2/0086-loader-xnu-Fix-memory-leak.patch new file mode 100644 index 00000000..aae6774c --- /dev/null +++ b/boot/grub2/0086-loader-xnu-Fix-memory-leak.patch @@ -0,0 +1,39 @@ +From bcb59ece3263d118510c4440c4da0950f224bb7f Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Thu, 26 Nov 2020 12:53:10 +0000 +Subject: [PATCH] loader/xnu: Fix memory leak + +The code here is finished with the memory stored in name, but it only +frees it if there curvalue is valid, while it could actually free it +regardless. + +The fix is a simple relocation of the grub_free() to before the test +of curvalue. + +Fixes: CID 96646 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/loader/xnu.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/loader/xnu.c b/grub-core/loader/xnu.c +index 44fd5a9..eb14462 100644 +--- a/grub-core/loader/xnu.c ++++ b/grub-core/loader/xnu.c +@@ -1391,9 +1391,9 @@ grub_xnu_fill_devicetree (void) + name[len] = 0; + + curvalue = grub_xnu_create_value (curkey, name); ++ grub_free (name); + if (!curvalue) + return grub_errno; +- grub_free (name); + + data = grub_malloc (grub_strlen (var->value) + 1); + if (!data) +-- +2.14.2 + diff --git a/boot/grub2/0087-loader-xnu-Free-driverkey-data-when-an-error-is-dete.patch b/boot/grub2/0087-loader-xnu-Free-driverkey-data-when-an-error-is-dete.patch new file mode 100644 index 00000000..6388c5cf --- /dev/null +++ b/boot/grub2/0087-loader-xnu-Free-driverkey-data-when-an-error-is-dete.patch @@ -0,0 +1,78 @@ +From 4b4027b6b1c877d7ab467896b04c7bd1aadcfa15 Mon Sep 17 00:00:00 2001 +From: Marco A Benatto +Date: Mon, 30 Nov 2020 12:18:24 -0300 +Subject: [PATCH] loader/xnu: Free driverkey data when an error is detected in + grub_xnu_writetree_toheap() + +... to avoid memory leaks. + +Fixes: CID 96640 + +Signed-off-by: Marco A Benatto +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/loader/xnu.c | 24 ++++++++++++++++++++---- + 1 file changed, 20 insertions(+), 4 deletions(-) + +diff --git a/grub-core/loader/xnu.c b/grub-core/loader/xnu.c +index eb14462..1a590db 100644 +--- a/grub-core/loader/xnu.c ++++ b/grub-core/loader/xnu.c +@@ -227,26 +227,33 @@ grub_xnu_writetree_toheap (grub_addr_t *target, grub_size_t *size) + if (! memorymap) + return grub_errno; + +- driverkey = (struct grub_xnu_devtree_key *) grub_malloc (sizeof (*driverkey)); ++ driverkey = (struct grub_xnu_devtree_key *) grub_zalloc (sizeof (*driverkey)); + if (! driverkey) + return grub_errno; + driverkey->name = grub_strdup ("DeviceTree"); + if (! driverkey->name) +- return grub_errno; ++ { ++ err = grub_errno; ++ goto fail; ++ } ++ + driverkey->datasize = sizeof (*extdesc); + driverkey->next = memorymap->first_child; + memorymap->first_child = driverkey; + driverkey->data = extdesc + = (struct grub_xnu_extdesc *) grub_malloc (sizeof (*extdesc)); + if (! driverkey->data) +- return grub_errno; ++ { ++ err = grub_errno; ++ goto fail; ++ } + + /* Allocate the space based on the size with dummy value. */ + *size = grub_xnu_writetree_get_size (grub_xnu_devtree_root, "/"); + err = grub_xnu_heap_malloc (ALIGN_UP (*size + 1, GRUB_XNU_PAGESIZE), + &src, target); + if (err) +- return err; ++ goto fail; + + /* Put real data in the dummy. */ + extdesc->addr = *target; +@@ -255,6 +262,15 @@ grub_xnu_writetree_toheap (grub_addr_t *target, grub_size_t *size) + /* Write the tree to heap. */ + grub_xnu_writetree_toheap_real (src, grub_xnu_devtree_root, "/"); + return GRUB_ERR_NONE; ++ ++ fail: ++ memorymap->first_child = NULL; ++ ++ grub_free (driverkey->data); ++ grub_free (driverkey->name); ++ grub_free (driverkey); ++ ++ return err; + } + + /* Find a key or value in parent key. */ +-- +2.14.2 + diff --git a/boot/grub2/0088-loader-xnu-Check-if-pointer-is-NULL-before-using-it.patch b/boot/grub2/0088-loader-xnu-Check-if-pointer-is-NULL-before-using-it.patch new file mode 100644 index 00000000..c26c2644 --- /dev/null +++ b/boot/grub2/0088-loader-xnu-Check-if-pointer-is-NULL-before-using-it.patch @@ -0,0 +1,43 @@ +From 7c8a2b5d1421a0f2a33d33531f7561f3da93b844 Mon Sep 17 00:00:00 2001 +From: Paulo Flabiano Smorigo +Date: Mon, 30 Nov 2020 10:36:00 -0300 +Subject: [PATCH] loader/xnu: Check if pointer is NULL before using it + +Fixes: CID 73654 + +Signed-off-by: Paulo Flabiano Smorigo +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/loader/xnu.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/grub-core/loader/xnu.c b/grub-core/loader/xnu.c +index 1a590db..1c0cf6a 100644 +--- a/grub-core/loader/xnu.c ++++ b/grub-core/loader/xnu.c +@@ -670,6 +670,9 @@ grub_xnu_load_driver (char *infoplistname, grub_file_t binaryfile, + char *name, *nameend; + int namelen; + ++ if (infoplistname == NULL) ++ return grub_error (GRUB_ERR_BAD_FILENAME, N_("missing p-list filename")); ++ + name = get_name_ptr (infoplistname); + nameend = grub_strchr (name, '/'); + +@@ -701,10 +704,7 @@ grub_xnu_load_driver (char *infoplistname, grub_file_t binaryfile, + else + macho = 0; + +- if (infoplistname) +- infoplist = grub_file_open (infoplistname, GRUB_FILE_TYPE_XNU_INFO_PLIST); +- else +- infoplist = 0; ++ infoplist = grub_file_open (infoplistname, GRUB_FILE_TYPE_XNU_INFO_PLIST); + grub_errno = GRUB_ERR_NONE; + if (infoplist) + { +-- +2.14.2 + diff --git a/boot/grub2/0089-util-grub-install-Fix-NULL-pointer-dereferences.patch b/boot/grub2/0089-util-grub-install-Fix-NULL-pointer-dereferences.patch new file mode 100644 index 00000000..f9c3f5d6 --- /dev/null +++ b/boot/grub2/0089-util-grub-install-Fix-NULL-pointer-dereferences.patch @@ -0,0 +1,42 @@ +From 8b3a95655b4391122e7b0315d8cc6f876caf8183 Mon Sep 17 00:00:00 2001 +From: Daniel Kiper +Date: Thu, 25 Feb 2021 18:35:01 +0100 +Subject: [PATCH] util/grub-install: Fix NULL pointer dereferences + +Two grub_device_open() calls does not have associated NULL checks +for returned values. Fix that and appease the Coverity. + +Fixes: CID 314583 + +Signed-off-by: Daniel Kiper +Reviewed-by: Javier Martinez Canillas +Signed-off-by: Stefan Sørensen +--- + util/grub-install.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/util/grub-install.c b/util/grub-install.c +index a82725f..367350f 100644 +--- a/util/grub-install.c ++++ b/util/grub-install.c +@@ -1775,6 +1775,8 @@ main (int argc, char *argv[]) + fill_core_services (core_services); + + ins_dev = grub_device_open (install_drive); ++ if (ins_dev == NULL) ++ grub_util_error ("%s", grub_errmsg); + + bless (ins_dev, core_services, 0); + +@@ -1875,6 +1877,8 @@ main (int argc, char *argv[]) + fill_core_services(core_services); + + ins_dev = grub_device_open (install_drive); ++ if (ins_dev == NULL) ++ grub_util_error ("%s", grub_errmsg); + + bless (ins_dev, boot_efi, 1); + if (!removable && update_nvram) +-- +2.14.2 + diff --git a/boot/grub2/0090-util-grub-editenv-Fix-incorrect-casting-of-a-signed-.patch b/boot/grub2/0090-util-grub-editenv-Fix-incorrect-casting-of-a-signed-.patch new file mode 100644 index 00000000..4420152a --- /dev/null +++ b/boot/grub2/0090-util-grub-editenv-Fix-incorrect-casting-of-a-signed-.patch @@ -0,0 +1,47 @@ +From 5dc41edc4eba259c6043ae7698c245ec1baaacc6 Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Thu, 5 Nov 2020 14:33:50 +0000 +Subject: [PATCH] util/grub-editenv: Fix incorrect casting of a signed value + +The return value of ftell() may be negative (-1) on error. While it is +probably unlikely to occur, we should not blindly cast to an unsigned +value without first testing that it is not negative. + +Fixes: CID 73856 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + util/grub-editenv.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/util/grub-editenv.c b/util/grub-editenv.c +index f3662c9..db6f187 100644 +--- a/util/grub-editenv.c ++++ b/util/grub-editenv.c +@@ -125,6 +125,7 @@ open_envblk_file (const char *name) + { + FILE *fp; + char *buf; ++ long loc; + size_t size; + grub_envblk_t envblk; + +@@ -143,7 +144,12 @@ open_envblk_file (const char *name) + grub_util_error (_("cannot seek `%s': %s"), name, + strerror (errno)); + +- size = (size_t) ftell (fp); ++ loc = ftell (fp); ++ if (loc < 0) ++ grub_util_error (_("cannot get file location `%s': %s"), name, ++ strerror (errno)); ++ ++ size = (size_t) loc; + + if (fseek (fp, 0, SEEK_SET) < 0) + grub_util_error (_("cannot seek `%s': %s"), name, +-- +2.14.2 + diff --git a/boot/grub2/0091-util-glue-efi-Fix-incorrect-use-of-a-possibly-negati.patch b/boot/grub2/0091-util-glue-efi-Fix-incorrect-use-of-a-possibly-negati.patch new file mode 100644 index 00000000..6acc3718 --- /dev/null +++ b/boot/grub2/0091-util-glue-efi-Fix-incorrect-use-of-a-possibly-negati.patch @@ -0,0 +1,51 @@ +From 1641d74e16f9d1ca35ba1a87ee4a0bf3afa48e72 Mon Sep 17 00:00:00 2001 +From: Darren Kenny +Date: Fri, 4 Dec 2020 15:04:28 +0000 +Subject: [PATCH] util/glue-efi: Fix incorrect use of a possibly negative value + +It is possible for the ftell() function to return a negative value, +although it is fairly unlikely here, we should be checking for +a negative value before we assign it to an unsigned value. + +Fixes: CID 73744 + +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + util/glue-efi.c | 14 ++++++++++++-- + 1 file changed, 12 insertions(+), 2 deletions(-) + +diff --git a/util/glue-efi.c b/util/glue-efi.c +index 68f5316..de0fa6d 100644 +--- a/util/glue-efi.c ++++ b/util/glue-efi.c +@@ -39,13 +39,23 @@ write_fat (FILE *in32, FILE *in64, FILE *out, const char *out_filename, + struct grub_macho_fat_header head; + struct grub_macho_fat_arch arch32, arch64; + grub_uint32_t size32, size64; ++ long size; + char *buf; + + fseek (in32, 0, SEEK_END); +- size32 = ftell (in32); ++ size = ftell (in32); ++ if (size < 0) ++ grub_util_error ("cannot get end of input file '%s': %s", ++ name32, strerror (errno)); ++ size32 = (grub_uint32_t) size; + fseek (in32, 0, SEEK_SET); ++ + fseek (in64, 0, SEEK_END); +- size64 = ftell (in64); ++ size = ftell (in64); ++ if (size < 0) ++ grub_util_error ("cannot get end of input file '%s': %s", ++ name64, strerror (errno)); ++ size64 = (grub_uint64_t) size; + fseek (in64, 0, SEEK_SET); + + head.magic = grub_cpu_to_le32_compile_time (GRUB_MACHO_FAT_EFI_MAGIC); +-- +2.14.2 + diff --git a/boot/grub2/0092-script-execute-Fix-NULL-dereference-in-grub_script_e.patch b/boot/grub2/0092-script-execute-Fix-NULL-dereference-in-grub_script_e.patch new file mode 100644 index 00000000..028e5879 --- /dev/null +++ b/boot/grub2/0092-script-execute-Fix-NULL-dereference-in-grub_script_e.patch @@ -0,0 +1,29 @@ +From 41ae93b2e6c75453514629bcfe684300e3aec0ce Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Fri, 3 Apr 2020 23:05:13 +1100 +Subject: [PATCH] script/execute: Fix NULL dereference in + grub_script_execute_cmdline() + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/script/execute.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/script/execute.c b/grub-core/script/execute.c +index 7e028e1..5ea2aef 100644 +--- a/grub-core/script/execute.c ++++ b/grub-core/script/execute.c +@@ -940,7 +940,7 @@ grub_script_execute_cmdline (struct grub_script_cmd *cmd) + struct grub_script_argv argv = { 0, 0, 0 }; + + /* Lookup the command. */ +- if (grub_script_arglist_to_argv (cmdline->arglist, &argv) || ! argv.args[0]) ++ if (grub_script_arglist_to_argv (cmdline->arglist, &argv) || ! argv.args || ! argv.args[0]) + return grub_errno; + + for (i = 0; i < argv.argc; i++) +-- +2.14.2 + diff --git a/boot/grub2/0093-commands-ls-Require-device_name-is-not-NULL-before-p.patch b/boot/grub2/0093-commands-ls-Require-device_name-is-not-NULL-before-p.patch new file mode 100644 index 00000000..58b61fd6 --- /dev/null +++ b/boot/grub2/0093-commands-ls-Require-device_name-is-not-NULL-before-p.patch @@ -0,0 +1,34 @@ +From 6afbe6063c95b827372f9ec310c9fc7461311eb1 Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Mon, 11 Jan 2021 16:57:37 +1100 +Subject: [PATCH] commands/ls: Require device_name is not NULL before printing + +This can be triggered with: + ls -l (0 0*) +and causes a NULL deref in grub_normal_print_device_info(). + +I'm not sure if there's any implication with the IEEE 1275 platform. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/commands/ls.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/commands/ls.c b/grub-core/commands/ls.c +index 5b7491a..326d2d6 100644 +--- a/grub-core/commands/ls.c ++++ b/grub-core/commands/ls.c +@@ -196,7 +196,7 @@ grub_ls_list_files (char *dirname, int longlist, int all, int human) + goto fail; + } + +- if (! *path) ++ if (! *path && device_name) + { + if (grub_errno == GRUB_ERR_UNKNOWN_FS) + grub_errno = GRUB_ERR_NONE; +-- +2.14.2 + diff --git a/boot/grub2/0094-script-execute-Avoid-crash-when-using-outside-a-func.patch b/boot/grub2/0094-script-execute-Avoid-crash-when-using-outside-a-func.patch new file mode 100644 index 00000000..a3739089 --- /dev/null +++ b/boot/grub2/0094-script-execute-Avoid-crash-when-using-outside-a-func.patch @@ -0,0 +1,38 @@ +From fe0586347ee46f927ae27bb9673532da9f5dead5 Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Mon, 11 Jan 2021 17:30:42 +1100 +Subject: [PATCH] script/execute: Avoid crash when using "$#" outside a + function scope + +"$#" represents the number of arguments to a function. It is only +defined in a function scope, where "scope" is non-NULL. Currently, +if we attempt to evaluate "$#" outside a function scope, "scope" will +be NULL and we will crash with a NULL pointer dereference. + +Do not attempt to count arguments for "$#" if "scope" is NULL. This +will result in "$#" being interpreted as an empty string if evaluated +outside a function scope. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/script/execute.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/script/execute.c b/grub-core/script/execute.c +index 5ea2aef..23d34bd 100644 +--- a/grub-core/script/execute.c ++++ b/grub-core/script/execute.c +@@ -485,7 +485,7 @@ gettext_putvar (const char *str, grub_size_t len, + return 0; + + /* Enough for any number. */ +- if (len == 1 && str[0] == '#') ++ if (len == 1 && str[0] == '#' && scope != NULL) + { + grub_snprintf (*ptr, 30, "%u", scope->argv.argc); + *ptr += grub_strlen (*ptr); +-- +2.14.2 + diff --git a/boot/grub2/0095-lib-arg-Block-repeated-short-options-that-require-an.patch b/boot/grub2/0095-lib-arg-Block-repeated-short-options-that-require-an.patch new file mode 100644 index 00000000..0338502a --- /dev/null +++ b/boot/grub2/0095-lib-arg-Block-repeated-short-options-that-require-an.patch @@ -0,0 +1,56 @@ +From 2a330dba93ff11bc00eda76e9419bc52b0c7ead6 Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Fri, 22 Jan 2021 16:07:29 +1100 +Subject: [PATCH] lib/arg: Block repeated short options that require an + argument + +Fuzzing found the following crash: + + search -hhhhhhhhhhhhhf + +We didn't allocate enough option space for 13 hints because the +allocation code counts the number of discrete arguments (i.e. argc). +However, the shortopt parsing code will happily keep processing +a combination of short options without checking if those short +options require an argument. This means you can easily end writing +past the allocated option space. + +This fixes a OOB write which can cause heap corruption. + +Fixes: CVE-2021-20225 + +Reported-by: Daniel Axtens +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/lib/arg.c | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/grub-core/lib/arg.c b/grub-core/lib/arg.c +index 3288609..537c5e9 100644 +--- a/grub-core/lib/arg.c ++++ b/grub-core/lib/arg.c +@@ -299,6 +299,19 @@ grub_arg_parse (grub_extcmd_t cmd, int argc, char **argv, + it can have an argument value. */ + if (*curshort) + { ++ /* ++ * Only permit further short opts if this one doesn't ++ * require a value. ++ */ ++ if (opt->type != ARG_TYPE_NONE && ++ !(opt->flags & GRUB_ARG_OPTION_OPTIONAL)) ++ { ++ grub_error (GRUB_ERR_BAD_ARGUMENT, ++ N_("missing mandatory option for `%s'"), ++ opt->longarg); ++ goto fail; ++ } ++ + if (parse_option (cmd, opt, 0, usr) || grub_errno) + goto fail; + } +-- +2.14.2 + diff --git a/boot/grub2/0096-script-execute-Don-t-crash-on-a-for-loop-with-no-ite.patch b/boot/grub2/0096-script-execute-Don-t-crash-on-a-for-loop-with-no-ite.patch new file mode 100644 index 00000000..4f543c5e --- /dev/null +++ b/boot/grub2/0096-script-execute-Don-t-crash-on-a-for-loop-with-no-ite.patch @@ -0,0 +1,40 @@ +From 0a05f88e2bb33ed2a0cfd93f481f471efb7791aa Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Fri, 22 Jan 2021 16:18:26 +1100 +Subject: [PATCH] script/execute: Don't crash on a "for" loop with no items + +The following crashes the parser: + + for x in; do + 0 + done + +This is because grub_script_arglist_to_argv() doesn't consider the +possibility that arglist is NULL. Catch that explicitly. + +This avoids a NULL pointer dereference. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/script/execute.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/grub-core/script/execute.c b/grub-core/script/execute.c +index 23d34bd..31dac25 100644 +--- a/grub-core/script/execute.c ++++ b/grub-core/script/execute.c +@@ -624,6 +624,9 @@ grub_script_arglist_to_argv (struct grub_script_arglist *arglist, + struct grub_script_arg *arg = 0; + struct grub_script_argv result = { 0, 0, 0 }; + ++ if (arglist == NULL) ++ return 1; ++ + for (; arglist && arglist->arg; arglist = arglist->next) + { + if (grub_script_argv_next (&result)) +-- +2.14.2 + diff --git a/boot/grub2/0097-commands-menuentry-Fix-quoting-in-setparams_prefix.patch b/boot/grub2/0097-commands-menuentry-Fix-quoting-in-setparams_prefix.patch new file mode 100644 index 00000000..23818d4e --- /dev/null +++ b/boot/grub2/0097-commands-menuentry-Fix-quoting-in-setparams_prefix.patch @@ -0,0 +1,48 @@ +From 2f533a89a8dfcacbf2c9dbc77d910f111f24bf33 Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Fri, 22 Jan 2021 17:10:48 +1100 +Subject: [PATCH] commands/menuentry: Fix quoting in setparams_prefix() + +Commit 9acdcbf32542 (use single quotes in menuentry setparams command) +says that expressing a quoted single quote will require 3 characters. It +actually requires (and always did require!) 4 characters: + + str: a'b => a'\''b + len: 3 => 6 (2 for the letters + 4 for the quote) + +This leads to not allocating enough memory and thus out of bounds writes +that have been observed to cause heap corruption. + +Allocate 4 bytes for each single quote. + +Commit 22e7dbb2bb81 (Fix quoting in legacy parser.) does the same +quoting, but it adds 3 as extra overhead on top of the single byte that +the quote already needs. So it's correct. + +Fixes: 9acdcbf32542 (use single quotes in menuentry setparams command) +Fixes: CVE-2021-20233 + +Reported-by: Daniel Axtens +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/commands/menuentry.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/commands/menuentry.c b/grub-core/commands/menuentry.c +index 9164df7..720e6d8 100644 +--- a/grub-core/commands/menuentry.c ++++ b/grub-core/commands/menuentry.c +@@ -230,7 +230,7 @@ setparams_prefix (int argc, char **args) + len += 3; /* 3 = 1 space + 2 quotes */ + p = args[i]; + while (*p) +- len += (*p++ == '\'' ? 3 : 1); ++ len += (*p++ == '\'' ? 4 : 1); + } + + result = grub_malloc (len + 2); +-- +2.14.2 + diff --git a/boot/grub2/0098-kern-misc-Always-set-end-in-grub_strtoull.patch b/boot/grub2/0098-kern-misc-Always-set-end-in-grub_strtoull.patch new file mode 100644 index 00000000..838804a8 --- /dev/null +++ b/boot/grub2/0098-kern-misc-Always-set-end-in-grub_strtoull.patch @@ -0,0 +1,47 @@ +From f41f0af48ab7f7c135aac17ac862c30bde0bbab7 Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Wed, 13 Jan 2021 22:19:01 +1100 +Subject: [PATCH] kern/misc: Always set *end in grub_strtoull() + +Currently, if there is an error in grub_strtoull(), *end is not set. +This differs from the usual behavior of strtoull(), and also means that +some callers may use an uninitialized value for *end. + +Set *end unconditionally. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/kern/misc.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/grub-core/kern/misc.c b/grub-core/kern/misc.c +index a7abd36..b02693b 100644 +--- a/grub-core/kern/misc.c ++++ b/grub-core/kern/misc.c +@@ -406,6 +406,10 @@ grub_strtoull (const char *str, char **end, int base) + { + grub_error (GRUB_ERR_OUT_OF_RANGE, + N_("overflow is detected")); ++ ++ if (end) ++ *end = (char *) str; ++ + return ~0ULL; + } + +@@ -417,6 +421,10 @@ grub_strtoull (const char *str, char **end, int base) + { + grub_error (GRUB_ERR_BAD_NUMBER, + N_("unrecognized number")); ++ ++ if (end) ++ *end = (char *) str; ++ + return 0; + } + +-- +2.14.2 + diff --git a/boot/grub2/0099-video-readers-jpeg-Catch-files-with-unsupported-quan.patch b/boot/grub2/0099-video-readers-jpeg-Catch-files-with-unsupported-quan.patch new file mode 100644 index 00000000..d09f7771 --- /dev/null +++ b/boot/grub2/0099-video-readers-jpeg-Catch-files-with-unsupported-quan.patch @@ -0,0 +1,53 @@ +From 693989598fd38c3c0b2a928f4f64865b5681762f Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Fri, 15 Jan 2021 12:57:04 +1100 +Subject: [PATCH] video/readers/jpeg: Catch files with unsupported quantization + or Huffman tables + +Our decoder only supports 2 quantization tables. If a file asks for +a quantization table with index > 1, reject it. + +Similarly, our decoder only supports 4 Huffman tables. If a file asks +for a Huffman table with index > 3, reject it. + +This fixes some out of bounds reads. It's not clear what degree of control +over subsequent execution could be gained by someone who can carefully +set up the contents of memory before loading an invalid JPEG file. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/video/readers/jpeg.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/grub-core/video/readers/jpeg.c b/grub-core/video/readers/jpeg.c +index 0b6ce3c..23f919a 100644 +--- a/grub-core/video/readers/jpeg.c ++++ b/grub-core/video/readers/jpeg.c +@@ -333,7 +333,11 @@ grub_jpeg_decode_sof (struct grub_jpeg_data *data) + else if (ss != JPEG_SAMPLING_1x1) + return grub_error (GRUB_ERR_BAD_FILE_TYPE, + "jpeg: sampling method not supported"); ++ + data->comp_index[id][0] = grub_jpeg_get_byte (data); ++ if (data->comp_index[id][0] > 1) ++ return grub_error (GRUB_ERR_BAD_FILE_TYPE, ++ "jpeg: too many quantization tables"); + } + + if (data->file->offset != next_marker) +@@ -602,6 +606,10 @@ grub_jpeg_decode_sos (struct grub_jpeg_data *data) + ht = grub_jpeg_get_byte (data); + data->comp_index[id][1] = (ht >> 4); + data->comp_index[id][2] = (ht & 0xF) + 2; ++ ++ if ((data->comp_index[id][1] < 0) || (data->comp_index[id][1] > 3) || ++ (data->comp_index[id][2] < 0) || (data->comp_index[id][2] > 3)) ++ return grub_error (GRUB_ERR_BAD_FILE_TYPE, "jpeg: invalid hufftable index"); + } + + grub_jpeg_get_byte (data); /* Skip 3 unused bytes. */ +-- +2.14.2 + diff --git a/boot/grub2/0100-video-readers-jpeg-Catch-OOB-reads-writes-in-grub_jp.patch b/boot/grub2/0100-video-readers-jpeg-Catch-OOB-reads-writes-in-grub_jp.patch new file mode 100644 index 00000000..9dabd97b --- /dev/null +++ b/boot/grub2/0100-video-readers-jpeg-Catch-OOB-reads-writes-in-grub_jp.patch @@ -0,0 +1,48 @@ +From 34b85a6e07014383ddcad09f99ff239ad752dd1a Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Fri, 15 Jan 2021 13:29:53 +1100 +Subject: [PATCH] video/readers/jpeg: Catch OOB reads/writes in + grub_jpeg_decode_du() + +The key line is: + + du[jpeg_zigzag_order[pos]] = val * (int) data->quan_table[qt][pos]; + +jpeg_zigzag_order is grub_uint8_t[64]. + +I don't understand JPEG decoders quite well enough to explain what's +going on here. However, I observe sometimes pos=64, which leads to an +OOB read of the jpeg_zigzag_order global then an OOB write to du. +That leads to various unpleasant memory corruption conditions. + +Catch where pos >= ARRAY_SIZE(jpeg_zigzag_order) and bail. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/video/readers/jpeg.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/grub-core/video/readers/jpeg.c b/grub-core/video/readers/jpeg.c +index 23f919a..e514812 100644 +--- a/grub-core/video/readers/jpeg.c ++++ b/grub-core/video/readers/jpeg.c +@@ -526,6 +526,14 @@ grub_jpeg_decode_du (struct grub_jpeg_data *data, int id, jpeg_data_unit_t du) + val = grub_jpeg_get_number (data, num & 0xF); + num >>= 4; + pos += num; ++ ++ if (pos >= ARRAY_SIZE (jpeg_zigzag_order)) ++ { ++ grub_error (GRUB_ERR_BAD_FILE_TYPE, ++ "jpeg: invalid position in zigzag order!?"); ++ return; ++ } ++ + du[jpeg_zigzag_order[pos]] = val * (int) data->quan_table[qt][pos]; + pos++; + } +-- +2.14.2 + diff --git a/boot/grub2/0101-video-readers-jpeg-Don-t-decode-data-before-start-of.patch b/boot/grub2/0101-video-readers-jpeg-Don-t-decode-data-before-start-of.patch new file mode 100644 index 00000000..89d08303 --- /dev/null +++ b/boot/grub2/0101-video-readers-jpeg-Don-t-decode-data-before-start-of.patch @@ -0,0 +1,40 @@ +From 8338a8238f08d9f3ae4c2ddfff0603eff80af9e2 Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Fri, 15 Jan 2021 14:06:46 +1100 +Subject: [PATCH] video/readers/jpeg: Don't decode data before start of stream + +When a start of stream marker is encountered, we call grub_jpeg_decode_sos() +which allocates space for a bitmap. + +When a restart marker is encountered, we call grub_jpeg_decode_data() which +then fills in that bitmap. + +If we get a restart marker before the start of stream marker, we will +attempt to write to a bitmap_ptr that hasn't been allocated. Catch this +and bail out. This fixes an attempt to write to NULL. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/video/readers/jpeg.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/grub-core/video/readers/jpeg.c b/grub-core/video/readers/jpeg.c +index e514812..e31602f 100644 +--- a/grub-core/video/readers/jpeg.c ++++ b/grub-core/video/readers/jpeg.c +@@ -646,6 +646,10 @@ grub_jpeg_decode_data (struct grub_jpeg_data *data) + nr1 = (data->image_height + vb - 1) >> (3 + data->log_vs); + nc1 = (data->image_width + hb - 1) >> (3 + data->log_hs); + ++ if (data->bitmap_ptr == NULL) ++ return grub_error(GRUB_ERR_BAD_FILE_TYPE, ++ "jpeg: attempted to decode data before start of stream"); ++ + for (; data->r1 < nr1 && (!data->dri || rst); + data->r1++, data->bitmap_ptr += (vb * data->image_width - hb * nc1) * 3) + for (c1 = 0; c1 < nc1 && (!data->dri || rst); +-- +2.14.2 + diff --git a/boot/grub2/0102-term-gfxterm-Don-t-set-up-a-font-with-glyphs-that-ar.patch b/boot/grub2/0102-term-gfxterm-Don-t-set-up-a-font-with-glyphs-that-ar.patch new file mode 100644 index 00000000..fa818747 --- /dev/null +++ b/boot/grub2/0102-term-gfxterm-Don-t-set-up-a-font-with-glyphs-that-ar.patch @@ -0,0 +1,52 @@ +From 829329bddb2c3e623270cc634cc9ab32e6455fe7 Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Fri, 15 Jan 2021 20:03:20 +1100 +Subject: [PATCH] term/gfxterm: Don't set up a font with glyphs that are too + big + +Catch the case where we have a font so big that it causes the number of +rows or columns to be 0. Currently we continue and allocate a +virtual_screen.text_buffer of size 0. We then try to use that for glpyhs +and things go badly. + +On the emu platform, malloc() may give us a valid pointer, in which case +we'll access heap memory which we shouldn't. Alternatively, it may give us +NULL, in which case we'll crash. For other platforms, if I understand +grub_memalign() correctly, we will receive a valid but small allocation +that we will very likely later overrun. + +Prevent the creation of a virtual screen that isn't at least 40 cols +by 12 rows. This is arbitrary, but it seems that if your width or height +is half a standard 80x24 terminal, you're probably going to struggle to +read anything anyway. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/term/gfxterm.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/grub-core/term/gfxterm.c b/grub-core/term/gfxterm.c +index af7c090..b40fcce 100644 +--- a/grub-core/term/gfxterm.c ++++ b/grub-core/term/gfxterm.c +@@ -232,6 +232,15 @@ grub_virtual_screen_setup (unsigned int x, unsigned int y, + virtual_screen.columns = virtual_screen.width / virtual_screen.normal_char_width; + virtual_screen.rows = virtual_screen.height / virtual_screen.normal_char_height; + ++ /* ++ * There must be a minimum number of rows and columns for the screen to ++ * make sense. Arbitrarily pick half of 80x24. If either dimensions is 0 ++ * we would allocate 0 bytes for the text_buffer. ++ */ ++ if (virtual_screen.columns < 40 || virtual_screen.rows < 12) ++ return grub_error (GRUB_ERR_BAD_FONT, ++ "font: glyphs too large to fit on screen"); ++ + /* Allocate memory for text buffer. */ + virtual_screen.text_buffer = + (struct grub_colored_char *) grub_malloc (virtual_screen.columns +-- +2.14.2 + diff --git a/boot/grub2/0103-fs-fshelp-Catch-impermissibly-large-block-sizes-in-r.patch b/boot/grub2/0103-fs-fshelp-Catch-impermissibly-large-block-sizes-in-r.patch new file mode 100644 index 00000000..00523ec8 --- /dev/null +++ b/boot/grub2/0103-fs-fshelp-Catch-impermissibly-large-block-sizes-in-r.patch @@ -0,0 +1,47 @@ +From b5bc456f664bc301ab4cd5a17d3d23c6661c259e Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Mon, 18 Jan 2021 11:46:39 +1100 +Subject: [PATCH] fs/fshelp: Catch impermissibly large block sizes in read + helper + +A fuzzed HFS+ filesystem had log2blocksize = 22. This gave +log2blocksize + GRUB_DISK_SECTOR_BITS = 31. 1 << 31 = 0x80000000, +which is -1 as an int. This caused some wacky behavior later on in +the function, leading to out-of-bounds writes on the destination buffer. + +Catch log2blocksize + GRUB_DISK_SECTOR_BITS >= 31. We could be stricter, +but this is the minimum that will prevent integer size weirdness. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/fs/fshelp.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/grub-core/fs/fshelp.c b/grub-core/fs/fshelp.c +index 4c902ad..a2d0d29 100644 +--- a/grub-core/fs/fshelp.c ++++ b/grub-core/fs/fshelp.c +@@ -362,6 +362,18 @@ grub_fshelp_read_file (grub_disk_t disk, grub_fshelp_node_t node, + grub_disk_addr_t i, blockcnt; + int blocksize = 1 << (log2blocksize + GRUB_DISK_SECTOR_BITS); + ++ /* ++ * Catch blatantly invalid log2blocksize. We could be a lot stricter, but ++ * this is the most permissive we can be before we start to see integer ++ * overflow/underflow issues. ++ */ ++ if (log2blocksize + GRUB_DISK_SECTOR_BITS >= 31) ++ { ++ grub_error (GRUB_ERR_OUT_OF_RANGE, ++ N_("blocksize too large")); ++ return -1; ++ } ++ + if (pos > filesize) + { + grub_error (GRUB_ERR_OUT_OF_RANGE, +-- +2.14.2 + diff --git a/boot/grub2/0104-fs-hfsplus-Don-t-fetch-a-key-beyond-the-end-of-the-n.patch b/boot/grub2/0104-fs-hfsplus-Don-t-fetch-a-key-beyond-the-end-of-the-n.patch new file mode 100644 index 00000000..a8609a67 --- /dev/null +++ b/boot/grub2/0104-fs-hfsplus-Don-t-fetch-a-key-beyond-the-end-of-the-n.patch @@ -0,0 +1,33 @@ +From 58ea11d5b9ca0966bd9c68d8ba5240cf7dc3ba83 Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Fri, 22 Jan 2021 18:13:56 +1100 +Subject: [PATCH] fs/hfsplus: Don't fetch a key beyond the end of the node + +Otherwise you get a wild pointer, leading to a bunch of invalid reads. +Check it falls inside the given node. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/fs/hfsplus.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/grub-core/fs/hfsplus.c b/grub-core/fs/hfsplus.c +index 8fe7c12..1c7791b 100644 +--- a/grub-core/fs/hfsplus.c ++++ b/grub-core/fs/hfsplus.c +@@ -635,6 +635,10 @@ grub_hfsplus_btree_search (struct grub_hfsplus_btree *btree, + pointer = ((char *) currkey + + grub_be_to_cpu16 (currkey->keylen) + + 2); ++ ++ if ((char *) pointer > node + btree->nodesize - 2) ++ return grub_error (GRUB_ERR_BAD_FS, "HFS+ key beyond end of node"); ++ + currnode = grub_be_to_cpu32 (grub_get_unaligned32 (pointer)); + match = 1; + } +-- +2.14.2 + diff --git a/boot/grub2/0105-fs-hfsplus-Don-t-use-uninitialized-data-on-corrupt-f.patch b/boot/grub2/0105-fs-hfsplus-Don-t-use-uninitialized-data-on-corrupt-f.patch new file mode 100644 index 00000000..a83a21ef --- /dev/null +++ b/boot/grub2/0105-fs-hfsplus-Don-t-use-uninitialized-data-on-corrupt-f.patch @@ -0,0 +1,108 @@ +From 2ca0e5dbcdcb6fc93ccae39a0f39d0dba4a7ff20 Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Tue, 2 Feb 2021 16:59:35 +1100 +Subject: [PATCH] fs/hfsplus: Don't use uninitialized data on corrupt + filesystems + +Valgrind identified the following use of uninitialized data: + + ==2782220== Conditional jump or move depends on uninitialised value(s) + ==2782220== at 0x42B364: grub_hfsplus_btree_search (hfsplus.c:566) + ==2782220== by 0x42B21D: grub_hfsplus_read_block (hfsplus.c:185) + ==2782220== by 0x42A693: grub_fshelp_read_file (fshelp.c:386) + ==2782220== by 0x42C598: grub_hfsplus_read_file (hfsplus.c:219) + ==2782220== by 0x42C598: grub_hfsplus_mount (hfsplus.c:330) + ==2782220== by 0x42B8C5: grub_hfsplus_dir (hfsplus.c:958) + ==2782220== by 0x4C1AE6: grub_fs_probe (fs.c:73) + ==2782220== by 0x407C94: grub_ls_list_files (ls.c:186) + ==2782220== by 0x407C94: grub_cmd_ls (ls.c:284) + ==2782220== by 0x4D7130: grub_extcmd_dispatcher (extcmd.c:55) + ==2782220== by 0x4045A6: execute_command (grub-fstest.c:59) + ==2782220== by 0x4045A6: fstest (grub-fstest.c:433) + ==2782220== by 0x4045A6: main (grub-fstest.c:772) + ==2782220== Uninitialised value was created by a heap allocation + ==2782220== at 0x483C7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) + ==2782220== by 0x4C0305: grub_malloc (mm.c:42) + ==2782220== by 0x42C21D: grub_hfsplus_mount (hfsplus.c:239) + ==2782220== by 0x42B8C5: grub_hfsplus_dir (hfsplus.c:958) + ==2782220== by 0x4C1AE6: grub_fs_probe (fs.c:73) + ==2782220== by 0x407C94: grub_ls_list_files (ls.c:186) + ==2782220== by 0x407C94: grub_cmd_ls (ls.c:284) + ==2782220== by 0x4D7130: grub_extcmd_dispatcher (extcmd.c:55) + ==2782220== by 0x4045A6: execute_command (grub-fstest.c:59) + ==2782220== by 0x4045A6: fstest (grub-fstest.c:433) + ==2782220== by 0x4045A6: main (grub-fstest.c:772) + +This happens when the process of reading the catalog file goes sufficiently +wrong that there's an attempt to read the extent overflow file, which has +not yet been loaded. Keep track of when the extent overflow file is +fully loaded and refuse to use it before then. + +The load valgrind doesn't like is btree->nodesize, and that's then used +to allocate a data structure. It looks like there are subsequently a lot +of reads based on that pointer so OOB reads are likely, and indeed crashes +(albeit difficult-to-replicate ones) have been observed in fuzzing. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/fs/hfsplus.c | 14 ++++++++++++++ + include/grub/hfsplus.h | 2 ++ + 2 files changed, 16 insertions(+) + +diff --git a/grub-core/fs/hfsplus.c b/grub-core/fs/hfsplus.c +index 1c7791b..361e5be 100644 +--- a/grub-core/fs/hfsplus.c ++++ b/grub-core/fs/hfsplus.c +@@ -177,6 +177,17 @@ grub_hfsplus_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock) + break; + } + ++ /* ++ * If the extent overflow tree isn't ready yet, we can't look ++ * in it. This can happen where the catalog file is corrupted. ++ */ ++ if (!node->data->extoverflow_tree_ready) ++ { ++ grub_error (GRUB_ERR_BAD_FS, ++ "attempted to read extent overflow tree before loading"); ++ break; ++ } ++ + /* Set up the key to look for in the extent overflow file. */ + extoverflow.extkey.fileid = node->fileid; + extoverflow.extkey.type = 0; +@@ -241,6 +252,7 @@ grub_hfsplus_mount (grub_disk_t disk) + return 0; + + data->disk = disk; ++ data->extoverflow_tree_ready = 0; + + /* Read the bootblock. */ + grub_disk_read (disk, GRUB_HFSPLUS_SBLOCK, 0, sizeof (volheader), +@@ -357,6 +369,8 @@ grub_hfsplus_mount (grub_disk_t disk) + if (data->extoverflow_tree.nodesize < 2) + goto fail; + ++ data->extoverflow_tree_ready = 1; ++ + if (grub_hfsplus_read_file (&data->attr_tree.file, 0, 0, + sizeof (struct grub_hfsplus_btnode), + sizeof (header), (char *) &header) <= 0) +diff --git a/include/grub/hfsplus.h b/include/grub/hfsplus.h +index 117740a..e14dd31 100644 +--- a/include/grub/hfsplus.h ++++ b/include/grub/hfsplus.h +@@ -113,6 +113,8 @@ struct grub_hfsplus_data + struct grub_hfsplus_btree extoverflow_tree; + struct grub_hfsplus_btree attr_tree; + ++ int extoverflow_tree_ready; ++ + struct grub_hfsplus_file dirroot; + struct grub_hfsplus_file opened_file; + +-- +2.14.2 + diff --git a/boot/grub2/0106-fs-hfs-Disable-under-lockdown.patch b/boot/grub2/0106-fs-hfs-Disable-under-lockdown.patch new file mode 100644 index 00000000..42e4ee44 --- /dev/null +++ b/boot/grub2/0106-fs-hfs-Disable-under-lockdown.patch @@ -0,0 +1,47 @@ +From 1c15848838d924552611247110723e2a1c17a5a1 Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Mon, 18 Jan 2021 12:19:07 +1100 +Subject: [PATCH] fs/hfs: Disable under lockdown + +HFS has issues such as infinite mutual recursion that are simply too +complex to fix for such a legacy format. So simply do not permit +it to be loaded under lockdown. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/fs/hfs.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/grub-core/fs/hfs.c b/grub-core/fs/hfs.c +index 3fe842b..9a5b7bb 100644 +--- a/grub-core/fs/hfs.c ++++ b/grub-core/fs/hfs.c +@@ -30,6 +30,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -1433,11 +1434,13 @@ static struct grub_fs grub_hfs_fs = + + GRUB_MOD_INIT(hfs) + { +- grub_fs_register (&grub_hfs_fs); ++ if (!grub_is_lockdown ()) ++ grub_fs_register (&grub_hfs_fs); + my_mod = mod; + } + + GRUB_MOD_FINI(hfs) + { +- grub_fs_unregister (&grub_hfs_fs); ++ if (!grub_is_lockdown()) ++ grub_fs_unregister (&grub_hfs_fs); + } +-- +2.14.2 + diff --git a/boot/grub2/0107-fs-sfs-Fix-over-read-of-root-object-name.patch b/boot/grub2/0107-fs-sfs-Fix-over-read-of-root-object-name.patch new file mode 100644 index 00000000..840bfc24 --- /dev/null +++ b/boot/grub2/0107-fs-sfs-Fix-over-read-of-root-object-name.patch @@ -0,0 +1,50 @@ +From 8d3ae59dee2930d640add3bba983006e1f5dd1b6 Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Mon, 18 Jan 2021 14:34:58 +1100 +Subject: [PATCH] fs/sfs: Fix over-read of root object name + +There's a read of the name of the root object that assumes that the name +is nul-terminated within the root block. This isn't guaranteed - it seems +SFS would require you to read multiple blocks to get a full name in general, +but maybe that doesn't apply to the root object. + +Either way, figure out how much space is left in the root block and don't +over-read it. This fixes some OOB reads. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/fs/sfs.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/grub-core/fs/sfs.c b/grub-core/fs/sfs.c +index de2b107..983e880 100644 +--- a/grub-core/fs/sfs.c ++++ b/grub-core/fs/sfs.c +@@ -373,6 +373,7 @@ grub_sfs_mount (grub_disk_t disk) + struct grub_sfs_objc *rootobjc; + char *rootobjc_data = 0; + grub_uint32_t blk; ++ unsigned int max_len; + + data = grub_malloc (sizeof (*data)); + if (!data) +@@ -421,7 +422,13 @@ grub_sfs_mount (grub_disk_t disk) + data->diropen.data = data; + data->diropen.cache = 0; + data->disk = disk; +- data->label = grub_strdup ((char *) (rootobjc->objects[0].filename)); ++ ++ /* We only read 1 block of data, so truncate the name if needed. */ ++ max_len = ((GRUB_DISK_SECTOR_SIZE << data->log_blocksize) ++ - 24 /* offsetof (struct grub_sfs_objc, objects) */ ++ - 25); /* offsetof (struct grub_sfs_obj, filename) */ ++ data->label = grub_zalloc (max_len + 1); ++ grub_strncpy (data->label, (char *) rootobjc->objects[0].filename, max_len); + + grub_free (rootobjc_data); + return data; +-- +2.14.2 + diff --git a/boot/grub2/0108-fs-jfs-Do-not-move-to-leaf-level-if-name-length-is-n.patch b/boot/grub2/0108-fs-jfs-Do-not-move-to-leaf-level-if-name-length-is-n.patch new file mode 100644 index 00000000..dc629ba8 --- /dev/null +++ b/boot/grub2/0108-fs-jfs-Do-not-move-to-leaf-level-if-name-length-is-n.patch @@ -0,0 +1,34 @@ +From ffd5a46f68710e2781899d0be4d701429a5a817d Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Mon, 18 Jan 2021 14:51:11 +1100 +Subject: [PATCH] fs/jfs: Do not move to leaf level if name length is negative + +Fuzzing JFS revealed crashes where a negative number would be passed +to le_to_cpu16_copy(). There it would be cast to a large positive number +and the copy would read and write off the end of the respective buffers. + +Catch this at the top as well as the bottom of the loop. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/fs/jfs.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/fs/jfs.c b/grub-core/fs/jfs.c +index d5a6d65..e5bbda6 100644 +--- a/grub-core/fs/jfs.c ++++ b/grub-core/fs/jfs.c +@@ -567,7 +567,7 @@ grub_jfs_getent (struct grub_jfs_diropen *diro) + + /* Move down to the leaf level. */ + nextent = leaf->next; +- if (leaf->next != 255) ++ if (leaf->next != 255 && len > 0) + do + { + next_leaf = &diro->next_leaf[nextent]; +-- +2.14.2 + diff --git a/boot/grub2/0109-fs-jfs-Limit-the-extents-that-getblk-can-consider.patch b/boot/grub2/0109-fs-jfs-Limit-the-extents-that-getblk-can-consider.patch new file mode 100644 index 00000000..9c8ecd2c --- /dev/null +++ b/boot/grub2/0109-fs-jfs-Limit-the-extents-that-getblk-can-consider.patch @@ -0,0 +1,62 @@ +From bd0cf8148ccf721f6e39ffbd70f8abad0c8897f0 Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Mon, 18 Jan 2021 14:57:17 +1100 +Subject: [PATCH] fs/jfs: Limit the extents that getblk() can consider + +getblk() implicitly trusts that treehead->count is an accurate count of +the number of extents. However, that value is read from disk and is not +trustworthy, leading to OOB reads and crashes. I am not sure to what +extent the data read from OOB can influence subsequent program execution. + +Require callers to pass in the maximum number of extents for which +they have storage. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/fs/jfs.c | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/grub-core/fs/jfs.c b/grub-core/fs/jfs.c +index e5bbda6..804c42d 100644 +--- a/grub-core/fs/jfs.c ++++ b/grub-core/fs/jfs.c +@@ -261,13 +261,15 @@ static grub_err_t grub_jfs_lookup_symlink (struct grub_jfs_data *data, grub_uint + static grub_int64_t + getblk (struct grub_jfs_treehead *treehead, + struct grub_jfs_tree_extent *extents, ++ int max_extents, + struct grub_jfs_data *data, + grub_uint64_t blk) + { + int found = -1; + int i; + +- for (i = 0; i < grub_le_to_cpu16 (treehead->count) - 2; i++) ++ for (i = 0; i < grub_le_to_cpu16 (treehead->count) - 2 && ++ i < max_extents; i++) + { + if (treehead->flags & GRUB_JFS_TREE_LEAF) + { +@@ -302,7 +304,7 @@ getblk (struct grub_jfs_treehead *treehead, + << (grub_le_to_cpu16 (data->sblock.log2_blksz) + - GRUB_DISK_SECTOR_BITS), 0, + sizeof (*tree), (char *) tree)) +- ret = getblk (&tree->treehead, &tree->extents[0], data, blk); ++ ret = getblk (&tree->treehead, &tree->extents[0], 254, data, blk); + grub_free (tree); + return ret; + } +@@ -316,7 +318,7 @@ static grub_int64_t + grub_jfs_blkno (struct grub_jfs_data *data, struct grub_jfs_inode *inode, + grub_uint64_t blk) + { +- return getblk (&inode->file.tree, &inode->file.extents[0], data, blk); ++ return getblk (&inode->file.tree, &inode->file.extents[0], 16, data, blk); + } + + +-- +2.14.2 + diff --git a/boot/grub2/0110-fs-jfs-Catch-infinite-recursion.patch b/boot/grub2/0110-fs-jfs-Catch-infinite-recursion.patch new file mode 100644 index 00000000..98866599 --- /dev/null +++ b/boot/grub2/0110-fs-jfs-Catch-infinite-recursion.patch @@ -0,0 +1,46 @@ +From 223120dd83745126cb232a0248c9a8901d7e350d Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Mon, 18 Jan 2021 15:47:24 +1100 +Subject: [PATCH] fs/jfs: Catch infinite recursion + +It's possible with a fuzzed filesystem for JFS to keep getblk()-ing +the same data over and over again, leading to stack exhaustion. + +Check if we'd be calling the function with exactly the same data as +was passed in, and if so abort. + +I'm not sure what the performance impact of this is and am open to +better ideas. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/fs/jfs.c | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +diff --git a/grub-core/fs/jfs.c b/grub-core/fs/jfs.c +index 804c42d..6f7c439 100644 +--- a/grub-core/fs/jfs.c ++++ b/grub-core/fs/jfs.c +@@ -304,7 +304,16 @@ getblk (struct grub_jfs_treehead *treehead, + << (grub_le_to_cpu16 (data->sblock.log2_blksz) + - GRUB_DISK_SECTOR_BITS), 0, + sizeof (*tree), (char *) tree)) +- ret = getblk (&tree->treehead, &tree->extents[0], 254, data, blk); ++ { ++ if (grub_memcmp (&tree->treehead, treehead, sizeof (struct grub_jfs_treehead)) || ++ grub_memcmp (&tree->extents, extents, 254 * sizeof (struct grub_jfs_tree_extent))) ++ ret = getblk (&tree->treehead, &tree->extents[0], 254, data, blk); ++ else ++ { ++ grub_error (GRUB_ERR_BAD_FS, "jfs: infinite recursion detected"); ++ ret = -1; ++ } ++ } + grub_free (tree); + return ret; + } +-- +2.14.2 + diff --git a/boot/grub2/0111-fs-nilfs2-Reject-too-large-keys.patch b/boot/grub2/0111-fs-nilfs2-Reject-too-large-keys.patch new file mode 100644 index 00000000..d442f3ce --- /dev/null +++ b/boot/grub2/0111-fs-nilfs2-Reject-too-large-keys.patch @@ -0,0 +1,46 @@ +From 20ab8cb44bc140a1dedda82a3fccdd45e9bc6929 Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Mon, 18 Jan 2021 16:49:09 +1100 +Subject: [PATCH] fs/nilfs2: Reject too-large keys + +NILFS2 has up to 7 keys, per the data structure. Do not permit array +indices in excess of that. + +This catches some OOB reads. I don't know how controllable the invalidly +read data is or if that could be used later in the program. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/fs/nilfs2.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/grub-core/fs/nilfs2.c b/grub-core/fs/nilfs2.c +index 7ed148d..fee2242 100644 +--- a/grub-core/fs/nilfs2.c ++++ b/grub-core/fs/nilfs2.c +@@ -569,6 +569,11 @@ grub_nilfs2_btree_lookup (struct grub_nilfs2_data *data, + static inline grub_uint64_t + grub_nilfs2_direct_lookup (struct grub_nilfs2_inode *inode, grub_uint64_t key) + { ++ if (1 + key > 6) ++ { ++ grub_error (GRUB_ERR_BAD_FS, "key is too large"); ++ return 0xffffffffffffffff; ++ } + return grub_le_to_cpu64 (inode->i_bmap[1 + key]); + } + +@@ -584,7 +589,7 @@ grub_nilfs2_bmap_lookup (struct grub_nilfs2_data *data, + { + grub_uint64_t ptr; + ptr = grub_nilfs2_direct_lookup (inode, key); +- if (need_translate) ++ if (ptr != ((grub_uint64_t) 0xffffffffffffffff) && need_translate) + ptr = grub_nilfs2_dat_translate (data, ptr); + return ptr; + } +-- +2.14.2 + diff --git a/boot/grub2/0112-fs-nilfs2-Don-t-search-children-if-provided-number-i.patch b/boot/grub2/0112-fs-nilfs2-Don-t-search-children-if-provided-number-i.patch new file mode 100644 index 00000000..426aceeb --- /dev/null +++ b/boot/grub2/0112-fs-nilfs2-Don-t-search-children-if-provided-number-i.patch @@ -0,0 +1,100 @@ +From 37c0eb05cdcc64c28d31c4ebd300f14d5239d05e Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Mon, 18 Jan 2021 16:49:44 +1100 +Subject: [PATCH] fs/nilfs2: Don't search children if provided number is too + large + +NILFS2 reads the number of children a node has from the node. Unfortunately, +that's not trustworthy. Check if it's beyond what the filesystem permits and +reject it if so. + +This blocks some OOB reads. I'm not sure how controllable the read is and what +could be done with invalidly read data later on. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/fs/nilfs2.c | 38 +++++++++++++++++++++++--------------- + 1 file changed, 23 insertions(+), 15 deletions(-) + +diff --git a/grub-core/fs/nilfs2.c b/grub-core/fs/nilfs2.c +index fee2242..43ac1ad 100644 +--- a/grub-core/fs/nilfs2.c ++++ b/grub-core/fs/nilfs2.c +@@ -416,14 +416,34 @@ grub_nilfs2_btree_node_get_key (struct grub_nilfs2_btree_node *node, + } + + static inline int +-grub_nilfs2_btree_node_lookup (struct grub_nilfs2_btree_node *node, ++grub_nilfs2_btree_node_nchildren_max (struct grub_nilfs2_data *data, ++ struct grub_nilfs2_btree_node *node) ++{ ++ int node_children_max = ((NILFS2_BLOCK_SIZE (data) - ++ sizeof (struct grub_nilfs2_btree_node) - ++ NILFS_BTREE_NODE_EXTRA_PAD_SIZE) / ++ (sizeof (grub_uint64_t) + sizeof (grub_uint64_t))); ++ ++ return (node->bn_flags & NILFS_BTREE_NODE_ROOT) ? 3 : node_children_max; ++} ++ ++static inline int ++grub_nilfs2_btree_node_lookup (struct grub_nilfs2_data *data, ++ struct grub_nilfs2_btree_node *node, + grub_uint64_t key, int *indexp) + { + grub_uint64_t nkey; + int index, low, high, s; + + low = 0; ++ + high = grub_le_to_cpu16 (node->bn_nchildren) - 1; ++ if (high >= grub_nilfs2_btree_node_nchildren_max (data, node)) ++ { ++ grub_error (GRUB_ERR_BAD_FS, "too many children"); ++ return 0; ++ } ++ + index = 0; + s = 0; + while (low <= high) +@@ -459,18 +479,6 @@ grub_nilfs2_btree_node_lookup (struct grub_nilfs2_btree_node *node, + return s == 0; + } + +-static inline int +-grub_nilfs2_btree_node_nchildren_max (struct grub_nilfs2_data *data, +- struct grub_nilfs2_btree_node *node) +-{ +- int node_children_max = ((NILFS2_BLOCK_SIZE (data) - +- sizeof (struct grub_nilfs2_btree_node) - +- NILFS_BTREE_NODE_EXTRA_PAD_SIZE) / +- (sizeof (grub_uint64_t) + sizeof (grub_uint64_t))); +- +- return (node->bn_flags & NILFS_BTREE_NODE_ROOT) ? 3 : node_children_max; +-} +- + static inline grub_uint64_t * + grub_nilfs2_btree_node_dptrs (struct grub_nilfs2_data *data, + struct grub_nilfs2_btree_node *node) +@@ -517,7 +525,7 @@ grub_nilfs2_btree_lookup (struct grub_nilfs2_data *data, + node = grub_nilfs2_btree_get_root (inode); + level = grub_nilfs2_btree_get_level (node); + +- found = grub_nilfs2_btree_node_lookup (node, key, &index); ++ found = grub_nilfs2_btree_node_lookup (data, node, key, &index); + ptr = grub_nilfs2_btree_node_get_ptr (data, node, index); + if (need_translate) + ptr = grub_nilfs2_dat_translate (data, ptr); +@@ -538,7 +546,7 @@ grub_nilfs2_btree_lookup (struct grub_nilfs2_data *data, + } + + if (!found) +- found = grub_nilfs2_btree_node_lookup (node, key, &index); ++ found = grub_nilfs2_btree_node_lookup (data, node, key, &index); + else + index = 0; + +-- +2.14.2 + diff --git a/boot/grub2/0113-fs-nilfs2-Properly-bail-on-errors-in-grub_nilfs2_btr.patch b/boot/grub2/0113-fs-nilfs2-Properly-bail-on-errors-in-grub_nilfs2_btr.patch new file mode 100644 index 00000000..85cb82d1 --- /dev/null +++ b/boot/grub2/0113-fs-nilfs2-Properly-bail-on-errors-in-grub_nilfs2_btr.patch @@ -0,0 +1,68 @@ +From ca5d9ac206043b1fb4cb06259272fb1c5946bb6d Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Mon, 18 Jan 2021 17:06:19 +1100 +Subject: [PATCH] fs/nilfs2: Properly bail on errors in + grub_nilfs2_btree_node_lookup() + +We just introduced an error return in grub_nilfs2_btree_node_lookup(). +Make sure the callers catch it. + +At the same time, make sure that grub_nilfs2_btree_node_lookup() always +inits the index pointer passed to it. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/fs/nilfs2.c | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/grub-core/fs/nilfs2.c b/grub-core/fs/nilfs2.c +index 43ac1ad..aaba002 100644 +--- a/grub-core/fs/nilfs2.c ++++ b/grub-core/fs/nilfs2.c +@@ -433,7 +433,7 @@ grub_nilfs2_btree_node_lookup (struct grub_nilfs2_data *data, + grub_uint64_t key, int *indexp) + { + grub_uint64_t nkey; +- int index, low, high, s; ++ int index = 0, low, high, s; + + low = 0; + +@@ -441,10 +441,10 @@ grub_nilfs2_btree_node_lookup (struct grub_nilfs2_data *data, + if (high >= grub_nilfs2_btree_node_nchildren_max (data, node)) + { + grub_error (GRUB_ERR_BAD_FS, "too many children"); ++ *indexp = index; + return 0; + } + +- index = 0; + s = 0; + while (low <= high) + { +@@ -526,6 +526,10 @@ grub_nilfs2_btree_lookup (struct grub_nilfs2_data *data, + level = grub_nilfs2_btree_get_level (node); + + found = grub_nilfs2_btree_node_lookup (data, node, key, &index); ++ ++ if (grub_errno != GRUB_ERR_NONE) ++ goto fail; ++ + ptr = grub_nilfs2_btree_node_get_ptr (data, node, index); + if (need_translate) + ptr = grub_nilfs2_dat_translate (data, ptr); +@@ -550,7 +554,8 @@ grub_nilfs2_btree_lookup (struct grub_nilfs2_data *data, + else + index = 0; + +- if (index < grub_nilfs2_btree_node_nchildren_max (data, node)) ++ if (index < grub_nilfs2_btree_node_nchildren_max (data, node) && ++ grub_errno == GRUB_ERR_NONE) + { + ptr = grub_nilfs2_btree_node_get_ptr (data, node, index); + if (need_translate) +-- +2.14.2 + diff --git a/boot/grub2/0114-io-gzio-Bail-if-gzio-tl-td-is-NULL.patch b/boot/grub2/0114-io-gzio-Bail-if-gzio-tl-td-is-NULL.patch new file mode 100644 index 00000000..cf6b7784 --- /dev/null +++ b/boot/grub2/0114-io-gzio-Bail-if-gzio-tl-td-is-NULL.patch @@ -0,0 +1,67 @@ +From 3334a5e6c86f10e715cca3bf66ce0fc2f164b61b Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Wed, 13 Jan 2021 20:59:09 +1100 +Subject: [PATCH] io/gzio: Bail if gzio->tl/td is NULL + +This is an ugly fix that doesn't address why gzio->tl comes to be NULL. +However, it seems to be sufficient to patch up a bunch of NULL derefs. + +It would be good to revisit this in future and see if we can have +a cleaner solution that addresses some of the causes of the unexpected +NULL pointers. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/io/gzio.c | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +diff --git a/grub-core/io/gzio.c b/grub-core/io/gzio.c +index 43d98a7..4a8eaea 100644 +--- a/grub-core/io/gzio.c ++++ b/grub-core/io/gzio.c +@@ -669,6 +669,13 @@ inflate_codes_in_window (grub_gzio_t gzio) + { + if (! gzio->code_state) + { ++ ++ if (gzio->tl == NULL) ++ { ++ grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, "NULL gzio->tl"); ++ return 1; ++ } ++ + NEEDBITS ((unsigned) gzio->bl); + if ((e = (t = gzio->tl + ((unsigned) b & ml))->e) > 16) + do +@@ -707,6 +714,12 @@ inflate_codes_in_window (grub_gzio_t gzio) + n = t->v.n + ((unsigned) b & mask_bits[e]); + DUMPBITS (e); + ++ if (gzio->td == NULL) ++ { ++ grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, "NULL gzio->td"); ++ return 1; ++ } ++ + /* decode distance of block to copy */ + NEEDBITS ((unsigned) gzio->bd); + if ((e = (t = gzio->td + ((unsigned) b & md))->e) > 16) +@@ -917,6 +930,13 @@ init_dynamic_block (grub_gzio_t gzio) + n = nl + nd; + m = mask_bits[gzio->bl]; + i = l = 0; ++ ++ if (gzio->tl == NULL) ++ { ++ grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, "NULL gzio->tl"); ++ return; ++ } ++ + while ((unsigned) i < n) + { + NEEDBITS ((unsigned) gzio->bl); +-- +2.14.2 + diff --git a/boot/grub2/0115-io-gzio-Add-init_dynamic_block-clean-up-if-unpacking.patch b/boot/grub2/0115-io-gzio-Add-init_dynamic_block-clean-up-if-unpacking.patch new file mode 100644 index 00000000..25b270ae --- /dev/null +++ b/boot/grub2/0115-io-gzio-Add-init_dynamic_block-clean-up-if-unpacking.patch @@ -0,0 +1,67 @@ +From 18490336d91da2b532277cba56473bfed1376fc4 Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Thu, 21 Jan 2021 00:05:58 +1100 +Subject: [PATCH] io/gzio: Add init_dynamic_block() clean up if unpacking codes + fails + +init_dynamic_block() didn't clean up gzio->tl and td in some error +paths. This left td pointing to part of tl. Then in grub_gzio_close(), +when tl was freed the storage for td would also be freed. The code then +attempts to free td explicitly, performing a UAF and then a double free. + +Explicitly clean up tl and td in the error paths. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/io/gzio.c | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +diff --git a/grub-core/io/gzio.c b/grub-core/io/gzio.c +index 4a8eaea..4236f0f 100644 +--- a/grub-core/io/gzio.c ++++ b/grub-core/io/gzio.c +@@ -953,7 +953,7 @@ init_dynamic_block (grub_gzio_t gzio) + if ((unsigned) i + j > n) + { + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, "too many codes found"); +- return; ++ goto fail; + } + while (j--) + ll[i++] = l; +@@ -966,7 +966,7 @@ init_dynamic_block (grub_gzio_t gzio) + if ((unsigned) i + j > n) + { + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, "too many codes found"); +- return; ++ goto fail; + } + while (j--) + ll[i++] = 0; +@@ -981,7 +981,7 @@ init_dynamic_block (grub_gzio_t gzio) + if ((unsigned) i + j > n) + { + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, "too many codes found"); +- return; ++ goto fail; + } + while (j--) + ll[i++] = 0; +@@ -1019,6 +1019,12 @@ init_dynamic_block (grub_gzio_t gzio) + /* indicate we're now working on a block */ + gzio->code_state = 0; + gzio->block_len++; ++ return; ++ ++ fail: ++ huft_free (gzio->tl); ++ gzio->td = NULL; ++ gzio->tl = NULL; + } + + +-- +2.14.2 + diff --git a/boot/grub2/0116-io-gzio-Catch-missing-values-in-huft_build-and-bail.patch b/boot/grub2/0116-io-gzio-Catch-missing-values-in-huft_build-and-bail.patch new file mode 100644 index 00000000..3ee520c1 --- /dev/null +++ b/boot/grub2/0116-io-gzio-Catch-missing-values-in-huft_build-and-bail.patch @@ -0,0 +1,57 @@ +From 4e76b08f7171a8603d74fcafb27409a91f578647 Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Thu, 21 Jan 2021 12:20:49 +1100 +Subject: [PATCH] io/gzio: Catch missing values in huft_build() and bail + +In huft_build(), "v" is a table of values in order of bit length. +The code later (when setting up table entries in "r") assumes that all +elements of this array corresponding to a code are initialized and less +than N_MAX. However, it doesn't enforce this. + +With sufficiently manipulated inputs (e.g. from fuzzing), there can be +elements of "v" that are not filled. Therefore a lookup into "e" or "d" +will use an uninitialized value. This can lead to an invalid/OOB read on +those values, often leading to a crash. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/io/gzio.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/grub-core/io/gzio.c b/grub-core/io/gzio.c +index 4236f0f..19adebe 100644 +--- a/grub-core/io/gzio.c ++++ b/grub-core/io/gzio.c +@@ -507,6 +507,7 @@ huft_build (unsigned *b, /* code lengths in bits (all assumed <= BMAX) */ + } + + /* Make a table of values in order of bit lengths */ ++ grub_memset (v, N_MAX, ARRAY_SIZE (v)); + p = b; + i = 0; + do +@@ -588,11 +589,18 @@ huft_build (unsigned *b, /* code lengths in bits (all assumed <= BMAX) */ + r.v.n = (ush) (*p); /* simple code is just the value */ + p++; /* one compiler does not like *p++ */ + } +- else ++ else if (*p < N_MAX) + { + r.e = (uch) e[*p - s]; /* non-simple--look up in lists */ + r.v.n = d[*p++ - s]; + } ++ else ++ { ++ /* Detected an uninitialised value, abort. */ ++ if (h) ++ huft_free (u[0]); ++ return 2; ++ } + + /* fill code-like entries with r */ + f = 1 << (k - w); +-- +2.14.2 + diff --git a/boot/grub2/0117-io-gzio-Zero-gzio-tl-td-in-init_dynamic_block-if-huf.patch b/boot/grub2/0117-io-gzio-Zero-gzio-tl-td-in-init_dynamic_block-if-huf.patch new file mode 100644 index 00000000..a7ae3fb9 --- /dev/null +++ b/boot/grub2/0117-io-gzio-Zero-gzio-tl-td-in-init_dynamic_block-if-huf.patch @@ -0,0 +1,42 @@ +From b5a2b59cc5b8f5ee7ba3b951e7693e402d5b3a6f Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Thu, 21 Jan 2021 12:22:28 +1100 +Subject: [PATCH] io/gzio: Zero gzio->tl/td in init_dynamic_block() if + huft_build() fails + +If huft_build() fails, gzio->tl or gzio->td could contain pointers that +are no longer valid. Zero them out. + +This prevents a double free when grub_gzio_close() comes through and +attempts to free them again. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/io/gzio.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/grub-core/io/gzio.c b/grub-core/io/gzio.c +index 19adebe..aea86a0 100644 +--- a/grub-core/io/gzio.c ++++ b/grub-core/io/gzio.c +@@ -1010,6 +1010,7 @@ init_dynamic_block (grub_gzio_t gzio) + gzio->bl = lbits; + if (huft_build (ll, nl, 257, cplens, cplext, &gzio->tl, &gzio->bl) != 0) + { ++ gzio->tl = 0; + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, + "failed in building a Huffman code table"); + return; +@@ -1019,6 +1020,7 @@ init_dynamic_block (grub_gzio_t gzio) + { + huft_free (gzio->tl); + gzio->tl = 0; ++ gzio->td = 0; + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, + "failed in building a Huffman code table"); + return; +-- +2.14.2 + diff --git a/boot/grub2/0118-disk-lvm-Don-t-go-beyond-the-end-of-the-data-we-read.patch b/boot/grub2/0118-disk-lvm-Don-t-go-beyond-the-end-of-the-data-we-read.patch new file mode 100644 index 00000000..31c99fbc --- /dev/null +++ b/boot/grub2/0118-disk-lvm-Don-t-go-beyond-the-end-of-the-data-we-read.patch @@ -0,0 +1,49 @@ +From a8cc95de74ccc3ad090e8062ac335c844f13c9f4 Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Thu, 21 Jan 2021 17:59:14 +1100 +Subject: [PATCH] disk/lvm: Don't go beyond the end of the data we read from + disk + +We unconditionally trusted offset_xl from the LVM label header, even if +it told us that the PV header/disk locations were way off past the end +of the data we read from disk. + +Require that the offset be sane, fixing an OOB read and crash. + +Fixes: CID 314367, CID 314371 + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/disk/lvm.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/grub-core/disk/lvm.c b/grub-core/disk/lvm.c +index 139fafd..8136122 100644 +--- a/grub-core/disk/lvm.c ++++ b/grub-core/disk/lvm.c +@@ -141,6 +141,20 @@ grub_lvm_detect (grub_disk_t disk, + goto fail; + } + ++ /* ++ * We read a grub_lvm_pv_header and then 2 grub_lvm_disk_locns that ++ * immediately follow the PV header. Make sure we have space for both. ++ */ ++ if (grub_le_to_cpu32 (lh->offset_xl) >= ++ GRUB_LVM_LABEL_SIZE - sizeof (struct grub_lvm_pv_header) - ++ 2 * sizeof (struct grub_lvm_disk_locn)) ++ { ++#ifdef GRUB_UTIL ++ grub_util_info ("LVM PV header/disk locations are beyond the end of the block"); ++#endif ++ goto fail; ++ } ++ + pvh = (struct grub_lvm_pv_header *) (buf + grub_le_to_cpu32(lh->offset_xl)); + + for (i = 0, j = 0; i < GRUB_LVM_ID_LEN; i++) +-- +2.14.2 + diff --git a/boot/grub2/0119-disk-lvm-Don-t-blast-past-the-end-of-the-circular-me.patch b/boot/grub2/0119-disk-lvm-Don-t-blast-past-the-end-of-the-circular-me.patch new file mode 100644 index 00000000..4f083847 --- /dev/null +++ b/boot/grub2/0119-disk-lvm-Don-t-blast-past-the-end-of-the-circular-me.patch @@ -0,0 +1,43 @@ +From 27a79bf38e6d050e497eb96a3fdddce43af25577 Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Thu, 21 Jan 2021 18:19:51 +1100 +Subject: [PATCH] disk/lvm: Don't blast past the end of the circular metadata + buffer + +This catches at least some OOB reads, and it's possible I suppose that +if 2 * mda_size is less than GRUB_LVM_MDA_HEADER_SIZE it might catch some +OOB writes too (although that hasn't showed up as a crash in fuzzing yet). + +It's a bit ugly and I'd appreciate better suggestions. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/disk/lvm.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/grub-core/disk/lvm.c b/grub-core/disk/lvm.c +index 8136122..36da575 100644 +--- a/grub-core/disk/lvm.c ++++ b/grub-core/disk/lvm.c +@@ -214,6 +214,16 @@ grub_lvm_detect (grub_disk_t disk, + if (grub_le_to_cpu64 (rlocn->offset) + grub_le_to_cpu64 (rlocn->size) > + grub_le_to_cpu64 (mdah->size)) + { ++ if (2 * mda_size < GRUB_LVM_MDA_HEADER_SIZE || ++ (grub_le_to_cpu64 (rlocn->offset) + grub_le_to_cpu64 (rlocn->size) - ++ grub_le_to_cpu64 (mdah->size) > mda_size - GRUB_LVM_MDA_HEADER_SIZE)) ++ { ++#ifdef GRUB_UTIL ++ grub_util_info ("cannot copy metadata wrap in circular buffer"); ++#endif ++ goto fail2; ++ } ++ + /* Metadata is circular. Copy the wrap in place. */ + grub_memcpy (metadatabuf + mda_size, + metadatabuf + GRUB_LVM_MDA_HEADER_SIZE, +-- +2.14.2 + diff --git a/boot/grub2/0120-disk-lvm-Bail-on-missing-PV-list.patch b/boot/grub2/0120-disk-lvm-Bail-on-missing-PV-list.patch new file mode 100644 index 00000000..f2374065 --- /dev/null +++ b/boot/grub2/0120-disk-lvm-Bail-on-missing-PV-list.patch @@ -0,0 +1,35 @@ +From 2958695c4cdc785de6ed708709af071a2d20afef Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Thu, 21 Jan 2021 18:54:29 +1100 +Subject: [PATCH] disk/lvm: Bail on missing PV list + +There's an if block for the presence of "physical_volumes {", but if +that block is absent, then p remains NULL and a NULL-deref will result +when looking for logical volumes. + +It doesn't seem like LVM makes sense without physical volumes, so error +out rather than crashing. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/disk/lvm.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/grub-core/disk/lvm.c b/grub-core/disk/lvm.c +index 36da575..8e560f3 100644 +--- a/grub-core/disk/lvm.c ++++ b/grub-core/disk/lvm.c +@@ -370,6 +370,8 @@ grub_lvm_detect (grub_disk_t disk, + goto fail4; + } + } ++ else ++ goto fail4; + + p = grub_strstr (p, "logical_volumes {"); + if (p) +-- +2.14.2 + diff --git a/boot/grub2/0121-disk-lvm-Do-not-crash-if-an-expected-string-is-not-f.patch b/boot/grub2/0121-disk-lvm-Do-not-crash-if-an-expected-string-is-not-f.patch new file mode 100644 index 00000000..720e5a21 --- /dev/null +++ b/boot/grub2/0121-disk-lvm-Do-not-crash-if-an-expected-string-is-not-f.patch @@ -0,0 +1,83 @@ +From db29073fc7aec71a40dabfc722a96ea9f3280907 Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Thu, 21 Jan 2021 18:35:22 +1100 +Subject: [PATCH] disk/lvm: Do not crash if an expected string is not found + +Clean up a bunch of cases where we could have strstr() fail and lead to +us dereferencing NULL. + +We'll still leak memory in some cases (loops don't clean up allocations +from earlier iterations if a later iteration fails) but at least we're +not crashing. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/disk/lvm.c | 22 +++++++++++++++++----- + 1 file changed, 17 insertions(+), 5 deletions(-) + +diff --git a/grub-core/disk/lvm.c b/grub-core/disk/lvm.c +index 8e560f3..bd5ae87 100644 +--- a/grub-core/disk/lvm.c ++++ b/grub-core/disk/lvm.c +@@ -539,7 +539,16 @@ grub_lvm_detect (grub_disk_t disk, + } + + if (seg->node_count != 1) +- seg->stripe_size = grub_lvm_getvalue (&p, "stripe_size = "); ++ { ++ seg->stripe_size = grub_lvm_getvalue (&p, "stripe_size = "); ++ if (p == NULL) ++ { ++#ifdef GRUB_UTIL ++ grub_util_info ("unknown stripe_size"); ++#endif ++ goto lvs_segment_fail; ++ } ++ } + + seg->nodes = grub_calloc (seg->node_count, + sizeof (*stripe)); +@@ -559,7 +568,7 @@ grub_lvm_detect (grub_disk_t disk, + { + p = grub_strchr (p, '"'); + if (p == NULL) +- continue; ++ goto lvs_segment_fail2; + q = ++p; + while (*q != '"') + q++; +@@ -578,7 +587,10 @@ grub_lvm_detect (grub_disk_t disk, + stripe->start = grub_lvm_getvalue (&p, ",") + * vg->extent_size; + if (p == NULL) +- continue; ++ { ++ grub_free (stripe->name); ++ goto lvs_segment_fail2; ++ } + + stripe++; + } +@@ -615,7 +627,7 @@ grub_lvm_detect (grub_disk_t disk, + + p = grub_strchr (p, '"'); + if (p == NULL) +- continue; ++ goto lvs_segment_fail2; + q = ++p; + while (*q != '"') + q++; +@@ -703,7 +715,7 @@ grub_lvm_detect (grub_disk_t disk, + p = p ? grub_strchr (p + 1, '"') : 0; + p = p ? grub_strchr (p + 1, '"') : 0; + if (p == NULL) +- continue; ++ goto lvs_segment_fail2; + q = ++p; + while (*q != '"') + q++; +-- +2.14.2 + diff --git a/boot/grub2/0122-disk-lvm-Do-not-overread-metadata.patch b/boot/grub2/0122-disk-lvm-Do-not-overread-metadata.patch new file mode 100644 index 00000000..1aeb61ca --- /dev/null +++ b/boot/grub2/0122-disk-lvm-Do-not-overread-metadata.patch @@ -0,0 +1,111 @@ +From 1155d7dffd3337942cb7583706b429d567d4db86 Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Thu, 21 Jan 2021 18:35:22 +1100 +Subject: [PATCH] disk/lvm: Do not overread metadata + +We could reach the end of valid metadata and not realize, leading to +some buffer overreads. Check if we have reached the end and bail. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/disk/lvm.c | 31 +++++++++++++++++++++++++------ + 1 file changed, 25 insertions(+), 6 deletions(-) + +diff --git a/grub-core/disk/lvm.c b/grub-core/disk/lvm.c +index bd5ae87..742ecd6 100644 +--- a/grub-core/disk/lvm.c ++++ b/grub-core/disk/lvm.c +@@ -313,17 +313,23 @@ grub_lvm_detect (grub_disk_t disk, + while (1) + { + grub_ssize_t s; +- while (grub_isspace (*p)) ++ while (grub_isspace (*p) && p < mda_end) + p++; + ++ if (p == mda_end) ++ goto fail4; ++ + if (*p == '}') + break; + + pv = grub_zalloc (sizeof (*pv)); + q = p; +- while (*q != ' ') ++ while (*q != ' ' && q < mda_end) + q++; + ++ if (q == mda_end) ++ goto pvs_fail_noname; ++ + s = q - p; + pv->name = grub_malloc (s + 1); + grub_memcpy (pv->name, p, s); +@@ -366,6 +372,7 @@ grub_lvm_detect (grub_disk_t disk, + continue; + pvs_fail: + grub_free (pv->name); ++ pvs_fail_noname: + grub_free (pv); + goto fail4; + } +@@ -387,18 +394,24 @@ grub_lvm_detect (grub_disk_t disk, + struct grub_diskfilter_segment *seg; + int is_pvmove; + +- while (grub_isspace (*p)) ++ while (grub_isspace (*p) && p < mda_end) + p++; + ++ if (p == mda_end) ++ goto fail4; ++ + if (*p == '}') + break; + + lv = grub_zalloc (sizeof (*lv)); + + q = p; +- while (*q != ' ') ++ while (*q != ' ' && q < mda_end) + q++; + ++ if (q == mda_end) ++ goto lvs_fail; ++ + s = q - p; + lv->name = grub_strndup (p, s); + if (!lv->name) +@@ -570,9 +583,12 @@ grub_lvm_detect (grub_disk_t disk, + if (p == NULL) + goto lvs_segment_fail2; + q = ++p; +- while (*q != '"') ++ while (q < mda_end && *q != '"') + q++; + ++ if (q == mda_end) ++ goto lvs_segment_fail2; ++ + s = q - p; + + stripe->name = grub_malloc (s + 1); +@@ -629,9 +645,12 @@ grub_lvm_detect (grub_disk_t disk, + if (p == NULL) + goto lvs_segment_fail2; + q = ++p; +- while (*q != '"') ++ while (q < mda_end && *q != '"') + q++; + ++ if (q == mda_end) ++ goto lvs_segment_fail2; ++ + s = q - p; + + lvname = grub_malloc (s + 1); +-- +2.14.2 + diff --git a/boot/grub2/0123-disk-lvm-Sanitize-rlocn-offset-to-prevent-wild-read.patch b/boot/grub2/0123-disk-lvm-Sanitize-rlocn-offset-to-prevent-wild-read.patch new file mode 100644 index 00000000..449e2634 --- /dev/null +++ b/boot/grub2/0123-disk-lvm-Sanitize-rlocn-offset-to-prevent-wild-read.patch @@ -0,0 +1,41 @@ +From 701293684742d00133b39bf957d3642c81dc83f4 Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Fri, 22 Jan 2021 14:43:58 +1100 +Subject: [PATCH] disk/lvm: Sanitize rlocn->offset to prevent wild read + +rlocn->offset is read directly from disk and added to the metadatabuf +pointer to create a pointer to a block of metadata. It's a 64-bit +quantity so as long as you don't overflow you can set subsequent +pointers to point anywhere in memory. + +Require that rlocn->offset fits within the metadata buffer size. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/disk/lvm.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/grub-core/disk/lvm.c b/grub-core/disk/lvm.c +index 742ecd6..ed0712f 100644 +--- a/grub-core/disk/lvm.c ++++ b/grub-core/disk/lvm.c +@@ -211,6 +211,14 @@ grub_lvm_detect (grub_disk_t disk, + } + + rlocn = mdah->raw_locns; ++ if (grub_le_to_cpu64 (rlocn->offset) >= grub_le_to_cpu64 (mda_size)) ++ { ++#ifdef GRUB_UTIL ++ grub_util_info ("metadata offset is beyond end of metadata area"); ++#endif ++ goto fail2; ++ } ++ + if (grub_le_to_cpu64 (rlocn->offset) + grub_le_to_cpu64 (rlocn->size) > + grub_le_to_cpu64 (mdah->size)) + { +-- +2.14.2 + diff --git a/boot/grub2/0124-disk-lvm-Do-not-allow-a-LV-to-be-it-s-own-segment-s-.patch b/boot/grub2/0124-disk-lvm-Do-not-allow-a-LV-to-be-it-s-own-segment-s-.patch new file mode 100644 index 00000000..183b1fff --- /dev/null +++ b/boot/grub2/0124-disk-lvm-Do-not-allow-a-LV-to-be-it-s-own-segment-s-.patch @@ -0,0 +1,39 @@ +From e18a00073890021362b4a48097672f1d4b340d3c Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Fri, 22 Jan 2021 14:42:21 +1100 +Subject: [PATCH] disk/lvm: Do not allow a LV to be it's own segment's node's + LV + +This prevents infinite recursion in the diskfilter verification code. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/disk/lvm.c | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +diff --git a/grub-core/disk/lvm.c b/grub-core/disk/lvm.c +index ed0712f..81dc375 100644 +--- a/grub-core/disk/lvm.c ++++ b/grub-core/disk/lvm.c +@@ -838,9 +838,13 @@ grub_lvm_detect (grub_disk_t disk, + } + if (lv1->segments[i].nodes[j].pv == NULL) + for (lv2 = vg->lvs; lv2; lv2 = lv2->next) +- if (grub_strcmp (lv2->name, +- lv1->segments[i].nodes[j].name) == 0) +- lv1->segments[i].nodes[j].lv = lv2; ++ { ++ if (lv1 == lv2) ++ continue; ++ if (grub_strcmp (lv2->name, ++ lv1->segments[i].nodes[j].name) == 0) ++ lv1->segments[i].nodes[j].lv = lv2; ++ } + } + + } +-- +2.14.2 + diff --git a/boot/grub2/0125-fs-btrfs-Validate-the-number-of-stripes-parities-in-.patch b/boot/grub2/0125-fs-btrfs-Validate-the-number-of-stripes-parities-in-.patch new file mode 100644 index 00000000..2caa1b03 --- /dev/null +++ b/boot/grub2/0125-fs-btrfs-Validate-the-number-of-stripes-parities-in-.patch @@ -0,0 +1,33 @@ +From b88a82e78cdd0ab8e0339c1c3f9564c4d8c0c969 Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Mon, 18 Jan 2021 17:17:16 +1100 +Subject: [PATCH] fs/btrfs: Validate the number of stripes/parities in RAID5/6 + +This prevents a divide by zero if nstripes == nparities, and +also prevents propagation of invalid values if nstripes ends up +less than nparities. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/fs/btrfs.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/grub-core/fs/btrfs.c b/grub-core/fs/btrfs.c +index 2b65bd5..e4e87ba 100644 +--- a/grub-core/fs/btrfs.c ++++ b/grub-core/fs/btrfs.c +@@ -1076,6 +1076,9 @@ grub_btrfs_read_logical (struct grub_btrfs_data *data, grub_disk_addr_t addr, + * stripen is computed without the parities + * (0 for A0, A1, A2, 1 for B0, B1, B2, etc.). + */ ++ if (nparities >= nstripes) ++ return grub_error (GRUB_ERR_BAD_FS, ++ "invalid RAID5/6: nparities >= nstripes"); + high = grub_divmod64 (stripe_nr, nstripes - nparities, &stripen); + + /* +-- +2.14.2 + diff --git a/boot/grub2/0126-fs-btrfs-Squash-some-uninitialized-reads.patch b/boot/grub2/0126-fs-btrfs-Squash-some-uninitialized-reads.patch new file mode 100644 index 00000000..32381f09 --- /dev/null +++ b/boot/grub2/0126-fs-btrfs-Squash-some-uninitialized-reads.patch @@ -0,0 +1,43 @@ +From b911884dd707ba1e6f641eb17857df3155013a45 Mon Sep 17 00:00:00 2001 +From: Daniel Axtens +Date: Mon, 18 Jan 2021 17:27:18 +1100 +Subject: [PATCH] fs/btrfs: Squash some uninitialized reads + +We need to check errors before calling into a function that uses the result. + +Signed-off-by: Daniel Axtens +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/fs/btrfs.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/grub-core/fs/btrfs.c b/grub-core/fs/btrfs.c +index e4e87ba..d489cb0 100644 +--- a/grub-core/fs/btrfs.c ++++ b/grub-core/fs/btrfs.c +@@ -381,9 +381,9 @@ next (struct grub_btrfs_data *data, + + err = grub_btrfs_read_logical (data, grub_le_to_cpu64 (node.addr), + &head, sizeof (head), 0); +- check_btrfs_header (data, &head, grub_le_to_cpu64 (node.addr)); + if (err) + return -err; ++ check_btrfs_header (data, &head, grub_le_to_cpu64 (node.addr)); + + save_ref (desc, grub_le_to_cpu64 (node.addr), 0, + grub_le_to_cpu32 (head.nitems), !head.level); +@@ -443,9 +443,9 @@ lower_bound (struct grub_btrfs_data *data, + /* FIXME: preread few nodes into buffer. */ + err = grub_btrfs_read_logical (data, addr, &head, sizeof (head), + recursion_depth + 1); +- check_btrfs_header (data, &head, addr); + if (err) + return err; ++ check_btrfs_header (data, &head, addr); + addr += sizeof (head); + if (head.level) + { +-- +2.14.2 + diff --git a/boot/grub2/0127-kern-parser-Fix-a-memory-leak.patch b/boot/grub2/0127-kern-parser-Fix-a-memory-leak.patch new file mode 100644 index 00000000..77b1cac2 --- /dev/null +++ b/boot/grub2/0127-kern-parser-Fix-a-memory-leak.patch @@ -0,0 +1,77 @@ +From c6c426e5ab6ea715153b72584de6bd8c82f698ec Mon Sep 17 00:00:00 2001 +From: Chris Coulson +Date: Wed, 18 Nov 2020 00:59:24 +0000 +Subject: [PATCH] kern/parser: Fix a memory leak + +The getline() function supplied to grub_parser_split_cmdline() returns +a newly allocated buffer and can be called multiple times, but the +returned buffer is never freed. + +Signed-off-by: Chris Coulson +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/kern/parser.c | 20 ++++++++++++++++---- + 1 file changed, 16 insertions(+), 4 deletions(-) + +diff --git a/grub-core/kern/parser.c b/grub-core/kern/parser.c +index d1cf061..39e4df6 100644 +--- a/grub-core/kern/parser.c ++++ b/grub-core/kern/parser.c +@@ -140,6 +140,7 @@ grub_parser_split_cmdline (const char *cmdline, + char buffer[1024]; + char *bp = buffer; + char *rd = (char *) cmdline; ++ char *rp = rd; + char varname[200]; + char *vp = varname; + char *args; +@@ -149,10 +150,18 @@ grub_parser_split_cmdline (const char *cmdline, + *argv = NULL; + do + { +- if (!rd || !*rd) ++ if (rp == NULL || *rp == '\0') + { ++ if (rd != cmdline) ++ { ++ grub_free (rd); ++ rd = rp = NULL; ++ } + if (getline) +- getline (&rd, 1, getline_data); ++ { ++ getline (&rd, 1, getline_data); ++ rp = rd; ++ } + else + break; + } +@@ -160,12 +169,12 @@ grub_parser_split_cmdline (const char *cmdline, + if (!rd) + break; + +- for (; *rd; rd++) ++ for (; *rp != '\0'; rp++) + { + grub_parser_state_t newstate; + char use; + +- newstate = grub_parser_cmdline_state (state, *rd, &use); ++ newstate = grub_parser_cmdline_state (state, *rp, &use); + + /* If a variable was being processed and this character does + not describe the variable anymore, write the variable to +@@ -198,6 +207,9 @@ grub_parser_split_cmdline (const char *cmdline, + } + while (state != GRUB_PARSER_STATE_TEXT && !check_varstate (state)); + ++ if (rd != cmdline) ++ grub_free (rd); ++ + /* A special case for when the last character was part of a + variable. */ + add_var (varname, &bp, &vp, state, GRUB_PARSER_STATE_TEXT); +-- +2.14.2 + diff --git a/boot/grub2/0128-kern-parser-Introduce-process_char-helper.patch b/boot/grub2/0128-kern-parser-Introduce-process_char-helper.patch new file mode 100644 index 00000000..f771748b --- /dev/null +++ b/boot/grub2/0128-kern-parser-Introduce-process_char-helper.patch @@ -0,0 +1,120 @@ +From b1c9e9e889e4273fb15712051c887e6078511448 Mon Sep 17 00:00:00 2001 +From: Chris Coulson +Date: Tue, 5 Jan 2021 22:17:28 +0000 +Subject: [PATCH] kern/parser: Introduce process_char() helper + +grub_parser_split_cmdline() iterates over each command line character. +In order to add error checking and to simplify the subsequent error +handling, split the character processing in to a separate function. + +Signed-off-by: Chris Coulson +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/kern/parser.c | 74 ++++++++++++++++++++++++++++++------------------- + 1 file changed, 46 insertions(+), 28 deletions(-) + +diff --git a/grub-core/kern/parser.c b/grub-core/kern/parser.c +index 39e4df6..0d3582b 100644 +--- a/grub-core/kern/parser.c ++++ b/grub-core/kern/parser.c +@@ -1,7 +1,7 @@ + /* parser.c - the part of the parser that can return partial tokens */ + /* + * GRUB -- GRand Unified Bootloader +- * Copyright (C) 2005,2007,2009 Free Software Foundation, Inc. ++ * Copyright (C) 2005,2007,2009,2021 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by +@@ -129,6 +129,46 @@ add_var (char *varname, char **bp, char **vp, + *((*bp)++) = *val; + } + ++static grub_err_t ++process_char (char c, char *buffer, char **bp, char *varname, char **vp, ++ grub_parser_state_t state, int *argc, ++ grub_parser_state_t *newstate) ++{ ++ char use; ++ ++ *newstate = grub_parser_cmdline_state (state, c, &use); ++ ++ /* ++ * If a variable was being processed and this character does ++ * not describe the variable anymore, write the variable to ++ * the buffer. ++ */ ++ add_var (varname, bp, vp, state, *newstate); ++ ++ if (check_varstate (*newstate)) ++ { ++ if (use) ++ *((*vp)++) = use; ++ } ++ else if (*newstate == GRUB_PARSER_STATE_TEXT && ++ state != GRUB_PARSER_STATE_ESC && grub_isspace (use)) ++ { ++ /* ++ * Don't add more than one argument if multiple ++ * spaces are used. ++ */ ++ if (*bp != buffer && *((*bp) - 1) != '\0') ++ { ++ *((*bp)++) = '\0'; ++ (*argc)++; ++ } ++ } ++ else if (use) ++ *((*bp)++) = use; ++ ++ return GRUB_ERR_NONE; ++} ++ + grub_err_t + grub_parser_split_cmdline (const char *cmdline, + grub_reader_getline_t getline, void *getline_data, +@@ -172,35 +212,13 @@ grub_parser_split_cmdline (const char *cmdline, + for (; *rp != '\0'; rp++) + { + grub_parser_state_t newstate; +- char use; +- +- newstate = grub_parser_cmdline_state (state, *rp, &use); + +- /* If a variable was being processed and this character does +- not describe the variable anymore, write the variable to +- the buffer. */ +- add_var (varname, &bp, &vp, state, newstate); +- +- if (check_varstate (newstate)) +- { +- if (use) +- *(vp++) = use; +- } +- else ++ if (process_char (*rp, buffer, &bp, varname, &vp, state, argc, ++ &newstate) != GRUB_ERR_NONE) + { +- if (newstate == GRUB_PARSER_STATE_TEXT +- && state != GRUB_PARSER_STATE_ESC && grub_isspace (use)) +- { +- /* Don't add more than one argument if multiple +- spaces are used. */ +- if (bp != buffer && *(bp - 1)) +- { +- *(bp++) = '\0'; +- (*argc)++; +- } +- } +- else if (use) +- *(bp++) = use; ++ if (rd != cmdline) ++ grub_free (rd); ++ return grub_errno; + } + state = newstate; + } +-- +2.14.2 + diff --git a/boot/grub2/0129-kern-parser-Introduce-terminate_arg-helper.patch b/boot/grub2/0129-kern-parser-Introduce-terminate_arg-helper.patch new file mode 100644 index 00000000..7ed9f987 --- /dev/null +++ b/boot/grub2/0129-kern-parser-Introduce-terminate_arg-helper.patch @@ -0,0 +1,66 @@ +From 3d157bbd06506b170fde5ec23980c4bf9f7660e2 Mon Sep 17 00:00:00 2001 +From: Chris Coulson +Date: Thu, 7 Jan 2021 19:53:55 +0000 +Subject: [PATCH] kern/parser: Introduce terminate_arg() helper + +process_char() and grub_parser_split_cmdline() use similar code for +terminating the most recent argument. Add a helper function for this. + +Signed-off-by: Chris Coulson +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/kern/parser.c | 23 +++++++++++++---------- + 1 file changed, 13 insertions(+), 10 deletions(-) + +diff --git a/grub-core/kern/parser.c b/grub-core/kern/parser.c +index 0d3582b..572c670 100644 +--- a/grub-core/kern/parser.c ++++ b/grub-core/kern/parser.c +@@ -129,6 +129,16 @@ add_var (char *varname, char **bp, char **vp, + *((*bp)++) = *val; + } + ++static void ++terminate_arg (char *buffer, char **bp, int *argc) ++{ ++ if (*bp != buffer && *((*bp) - 1) != '\0') ++ { ++ *((*bp)++) = '\0'; ++ (*argc)++; ++ } ++} ++ + static grub_err_t + process_char (char c, char *buffer, char **bp, char *varname, char **vp, + grub_parser_state_t state, int *argc, +@@ -157,11 +167,7 @@ process_char (char c, char *buffer, char **bp, char *varname, char **vp, + * Don't add more than one argument if multiple + * spaces are used. + */ +- if (*bp != buffer && *((*bp) - 1) != '\0') +- { +- *((*bp)++) = '\0'; +- (*argc)++; +- } ++ terminate_arg (buffer, bp, argc); + } + else if (use) + *((*bp)++) = use; +@@ -232,11 +238,8 @@ grub_parser_split_cmdline (const char *cmdline, + variable. */ + add_var (varname, &bp, &vp, state, GRUB_PARSER_STATE_TEXT); + +- if (bp != buffer && *(bp - 1)) +- { +- *(bp++) = '\0'; +- (*argc)++; +- } ++ /* Ensure that the last argument is terminated. */ ++ terminate_arg (buffer, &bp, argc); + + /* If there are no args, then we're done. */ + if (!*argc) +-- +2.14.2 + diff --git a/boot/grub2/0130-kern-parser-Refactor-grub_parser_split_cmdline-clean.patch b/boot/grub2/0130-kern-parser-Refactor-grub_parser_split_cmdline-clean.patch new file mode 100644 index 00000000..e1e955ff --- /dev/null +++ b/boot/grub2/0130-kern-parser-Refactor-grub_parser_split_cmdline-clean.patch @@ -0,0 +1,92 @@ +From 8bc817014ce3d7a498db44eae33c8b90e2430926 Mon Sep 17 00:00:00 2001 +From: Chris Coulson +Date: Wed, 6 Jan 2021 13:54:26 +0000 +Subject: [PATCH] kern/parser: Refactor grub_parser_split_cmdline() cleanup + +Introduce a common function epilogue used for cleaning up on all +return paths, which will simplify additional error handling to be +introduced in a subsequent commit. + +Signed-off-by: Chris Coulson +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/kern/parser.c | 35 ++++++++++++++++++++--------------- + 1 file changed, 20 insertions(+), 15 deletions(-) + +diff --git a/grub-core/kern/parser.c b/grub-core/kern/parser.c +index 572c670..e010eaa 100644 +--- a/grub-core/kern/parser.c ++++ b/grub-core/kern/parser.c +@@ -221,19 +221,13 @@ grub_parser_split_cmdline (const char *cmdline, + + if (process_char (*rp, buffer, &bp, varname, &vp, state, argc, + &newstate) != GRUB_ERR_NONE) +- { +- if (rd != cmdline) +- grub_free (rd); +- return grub_errno; +- } ++ goto fail; ++ + state = newstate; + } + } + while (state != GRUB_PARSER_STATE_TEXT && !check_varstate (state)); + +- if (rd != cmdline) +- grub_free (rd); +- + /* A special case for when the last character was part of a + variable. */ + add_var (varname, &bp, &vp, state, GRUB_PARSER_STATE_TEXT); +@@ -243,20 +237,20 @@ grub_parser_split_cmdline (const char *cmdline, + + /* If there are no args, then we're done. */ + if (!*argc) +- return 0; ++ { ++ grub_errno = GRUB_ERR_NONE; ++ goto out; ++ } + + /* Reserve memory for the return values. */ + args = grub_malloc (bp - buffer); + if (!args) +- return grub_errno; ++ goto fail; + grub_memcpy (args, buffer, bp - buffer); + + *argv = grub_calloc (*argc + 1, sizeof (char *)); + if (!*argv) +- { +- grub_free (args); +- return grub_errno; +- } ++ goto fail; + + /* The arguments are separated with 0's, setup argv so it points to + the right values. */ +@@ -269,7 +263,18 @@ grub_parser_split_cmdline (const char *cmdline, + bp++; + } + +- return 0; ++ grub_errno = GRUB_ERR_NONE; ++ ++ out: ++ if (rd != cmdline) ++ grub_free (rd); ++ ++ return grub_errno; ++ ++ fail: ++ grub_free (*argv); ++ grub_free (args); ++ goto out; + } + + /* Helper for grub_parser_execute. */ +-- +2.14.2 + diff --git a/boot/grub2/0131-kern-buffer-Add-variable-sized-heap-buffer.patch b/boot/grub2/0131-kern-buffer-Add-variable-sized-heap-buffer.patch new file mode 100644 index 00000000..1731011c --- /dev/null +++ b/boot/grub2/0131-kern-buffer-Add-variable-sized-heap-buffer.patch @@ -0,0 +1,1237 @@ +From 030fb6c4fa354cdbd6a8d6903dfed5d36eaf3cb2 Mon Sep 17 00:00:00 2001 +From: Chris Coulson +Date: Thu, 7 Jan 2021 15:15:43 +0000 +Subject: [PATCH] kern/buffer: Add variable sized heap buffer + +Add a new variable sized heap buffer type (grub_buffer_t) with simple +operations for appending data, accessing the data and maintaining +a read cursor. + +Signed-off-by: Chris Coulson +Reviewed-by: Daniel Kiper +[Add changes to generated files] +Signed-off-by: Stefan Sørensen +--- + grub-core/Makefile.core.am | 46 +++--- + grub-core/Makefile.core.def | 1 + + grub-core/Makefile.in | 341 +++++++++++++++++++++++++------------------- + grub-core/kern/buffer.c | 117 +++++++++++++++ + include/grub/buffer.h | 144 +++++++++++++++++++ + po/POTFILES.in | 2 + + 6 files changed, 485 insertions(+), 166 deletions(-) + create mode 100644 grub-core/kern/buffer.c + create mode 100644 include/grub/buffer.h + +diff --git a/grub-core/Makefile.core.am b/grub-core/Makefile.core.am +index fbfb627..2fa9a8e 100644 +--- a/grub-core/Makefile.core.am ++++ b/grub-core/Makefile.core.am +@@ -22334,7 +22334,7 @@ gcry_whirlpool.marker: $(gcry_whirlpool_module_SOURCES) $(nodist_gcry_whirlpool_ + if COND_emu + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = +-kernel_exec_SOURCES += disk/host.c kern/emu/cache_s.S kern/emu/hostdisk.c osdep/unix/hostdisk.c osdep/exec.c osdep/devmapper/hostdisk.c osdep/hostdisk.c kern/emu/hostfs.c kern/emu/main.c kern/emu/argp_common.c kern/emu/misc.c kern/emu/mm.c kern/emu/time.c kern/emu/cache.c osdep/emuconsole.c osdep/dl.c osdep/sleep.c osdep/init.c osdep/emunet.c osdep/cputime.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += disk/host.c kern/emu/cache_s.S kern/emu/hostdisk.c osdep/unix/hostdisk.c osdep/exec.c osdep/devmapper/hostdisk.c osdep/hostdisk.c kern/emu/hostfs.c kern/emu/main.c kern/emu/argp_common.c kern/emu/misc.c kern/emu/mm.c kern/emu/time.c kern/emu/cache.c osdep/emuconsole.c osdep/dl.c osdep/sleep.c osdep/init.c osdep/emunet.c osdep/cputime.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) $(CFLAGS_GNULIB) +@@ -22356,7 +22356,7 @@ endif + if COND_i386_pc + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/i386/pc/startup.S +-kernel_exec_SOURCES += kern/i386/pc/init.c kern/i386/pc/mmap.c term/i386/pc/console.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/i386/pc/init.c kern/i386/pc/mmap.c term/i386/pc/console.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22378,7 +22378,7 @@ endif + if COND_i386_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/i386/efi/startup.S +-kernel_exec_SOURCES += kern/i386/efi/tsc.c kern/i386/tsc_pmtimer.c kern/i386/efi/init.c bus/pci.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/i386/efi/tsc.c kern/i386/tsc_pmtimer.c kern/i386/efi/init.c bus/pci.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22400,7 +22400,7 @@ endif + if COND_i386_qemu + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/i386/qemu/startup.S +-kernel_exec_SOURCES += kern/i386/qemu/init.c bus/pci.c kern/vga_init.c kern/i386/qemu/mmap.c term/i386/pc/vga_text.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/i386/qemu/init.c bus/pci.c kern/vga_init.c kern/i386/qemu/mmap.c term/i386/pc/vga_text.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22422,7 +22422,7 @@ endif + if COND_i386_coreboot + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/i386/coreboot/startup.S +-kernel_exec_SOURCES += kern/i386/coreboot/init.c kern/i386/pc/acpi.c kern/acpi.c kern/i386/tsc_pmtimer.c kern/i386/coreboot/cbtable.c video/coreboot/cbfb.c kern/coreboot/mmap.c kern/coreboot/cbtable.c term/gfxterm.c font/font.c font/font_cmd.c io/bufio.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c video/fb/video_fb.c video/video.c term/i386/pc/vga_text.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/i386/coreboot/init.c kern/i386/pc/acpi.c kern/acpi.c kern/i386/tsc_pmtimer.c kern/i386/coreboot/cbtable.c video/coreboot/cbfb.c kern/coreboot/mmap.c kern/coreboot/cbtable.c term/gfxterm.c font/font.c font/font_cmd.c io/bufio.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c video/fb/video_fb.c video/video.c term/i386/pc/vga_text.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22444,7 +22444,7 @@ endif + if COND_i386_multiboot + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/i386/coreboot/startup.S +-kernel_exec_SOURCES += kern/i386/coreboot/init.c kern/i386/pc/acpi.c kern/acpi.c kern/i386/multiboot_mmap.c term/i386/pc/vga_text.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/i386/coreboot/init.c kern/i386/pc/acpi.c kern/acpi.c kern/i386/multiboot_mmap.c term/i386/pc/vga_text.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22466,7 +22466,7 @@ endif + if COND_i386_ieee1275 + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/i386/ieee1275/startup.S +-kernel_exec_SOURCES += disk/ieee1275/ofdisk.c kern/ieee1275/cmain.c kern/ieee1275/ieee1275.c kern/ieee1275/mmap.c kern/ieee1275/openfw.c term/ieee1275/console.c kern/ieee1275/init.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += disk/ieee1275/ofdisk.c kern/ieee1275/cmain.c kern/ieee1275/ieee1275.c kern/ieee1275/mmap.c kern/ieee1275/openfw.c term/ieee1275/console.c kern/ieee1275/init.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22488,7 +22488,7 @@ endif + if COND_x86_64_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/x86_64/efi/startup.S +-kernel_exec_SOURCES += kern/i386/efi/tsc.c kern/i386/tsc_pmtimer.c kern/x86_64/efi/callwrap.S kern/i386/efi/init.c bus/pci.c kern/x86_64/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/i386/efi/tsc.c kern/i386/tsc_pmtimer.c kern/x86_64/efi/callwrap.S kern/i386/efi/init.c bus/pci.c kern/x86_64/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22510,7 +22510,7 @@ endif + if COND_i386_xen + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/i386/xen/startup.S +-kernel_exec_SOURCES += kern/i386/dl.c kern/i386/xen/hypercall.S kern/i386/tsc.c kern/i386/xen/tsc.c kern/xen/init.c term/xen/console.c disk/xen/xendisk.c commands/boot.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/i386/dl.c kern/i386/xen/hypercall.S kern/i386/tsc.c kern/i386/xen/tsc.c kern/xen/init.c term/xen/console.c disk/xen/xendisk.c commands/boot.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22532,7 +22532,7 @@ endif + if COND_x86_64_xen + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/x86_64/xen/startup.S +-kernel_exec_SOURCES += kern/x86_64/dl.c kern/x86_64/xen/hypercall.S kern/i386/tsc.c kern/i386/xen/tsc.c kern/xen/init.c term/xen/console.c disk/xen/xendisk.c commands/boot.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/x86_64/dl.c kern/x86_64/xen/hypercall.S kern/i386/tsc.c kern/i386/xen/tsc.c kern/xen/init.c term/xen/console.c disk/xen/xendisk.c commands/boot.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22554,7 +22554,7 @@ endif + if COND_i386_xen_pvh + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/i386/xen/startup_pvh.S +-kernel_exec_SOURCES += kern/i386/dl.c commands/boot.c disk/xen/xendisk.c kern/i386/tsc.c kern/i386/xen/tsc.c kern/i386/xen/pvh.c kern/xen/init.c term/xen/console.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/i386/dl.c commands/boot.c disk/xen/xendisk.c kern/i386/tsc.c kern/i386/xen/tsc.c kern/i386/xen/pvh.c kern/xen/init.c term/xen/console.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22576,7 +22576,7 @@ endif + if COND_mips_loongson + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/mips/startup.S +-kernel_exec_SOURCES += term/ns8250.c bus/bonito.c bus/cs5536.c bus/pci.c kern/mips/loongson/init.c term/at_keyboard.c term/ps2.c commands/boot.c term/serial.c video/sm712.c video/sis315pro.c video/radeon_fuloong2e.c video/radeon_yeeloong3a.c commands/keylayouts.c term/gfxterm.c font/font.c font/font_cmd.c io/bufio.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c video/fb/video_fb.c video/video.c kern/generic/rtc_get_time_ms.c kern/mips/cache.S kern/mips/dl.c kern/mips/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += term/ns8250.c bus/bonito.c bus/cs5536.c bus/pci.c kern/mips/loongson/init.c term/at_keyboard.c term/ps2.c commands/boot.c term/serial.c video/sm712.c video/sis315pro.c video/radeon_fuloong2e.c video/radeon_yeeloong3a.c commands/keylayouts.c term/gfxterm.c font/font.c font/font_cmd.c io/bufio.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c video/fb/video_fb.c video/video.c kern/generic/rtc_get_time_ms.c kern/mips/cache.S kern/mips/dl.c kern/mips/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22598,7 +22598,7 @@ endif + if COND_sparc64_ieee1275 + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/sparc64/ieee1275/crt0.S +-kernel_exec_SOURCES += kern/sparc64/cache.S kern/sparc64/dl.c kern/sparc64/ieee1275/ieee1275.c disk/ieee1275/obdisk.c disk/ieee1275/ofdisk.c kern/ieee1275/cmain.c kern/ieee1275/ieee1275.c kern/ieee1275/mmap.c kern/ieee1275/openfw.c term/ieee1275/console.c kern/ieee1275/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/sparc64/cache.S kern/sparc64/dl.c kern/sparc64/ieee1275/ieee1275.c disk/ieee1275/obdisk.c disk/ieee1275/ofdisk.c kern/ieee1275/cmain.c kern/ieee1275/ieee1275.c kern/ieee1275/mmap.c kern/ieee1275/openfw.c term/ieee1275/console.c kern/ieee1275/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22620,7 +22620,7 @@ endif + if COND_powerpc_ieee1275 + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/powerpc/ieee1275/startup.S +-kernel_exec_SOURCES += kern/powerpc/cache.S kern/powerpc/dl.c kern/powerpc/compiler-rt.S disk/ieee1275/ofdisk.c kern/ieee1275/cmain.c kern/ieee1275/ieee1275.c kern/ieee1275/mmap.c kern/ieee1275/openfw.c term/ieee1275/console.c kern/ieee1275/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/powerpc/cache.S kern/powerpc/dl.c kern/powerpc/compiler-rt.S disk/ieee1275/ofdisk.c kern/ieee1275/cmain.c kern/ieee1275/ieee1275.c kern/ieee1275/mmap.c kern/ieee1275/openfw.c term/ieee1275/console.c kern/ieee1275/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22642,7 +22642,7 @@ endif + if COND_mips_arc + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/mips/startup.S +-kernel_exec_SOURCES += kern/mips/arc/init.c term/arc/console.c disk/arc/arcdisk.c kern/generic/rtc_get_time_ms.c kern/mips/cache.S kern/mips/dl.c kern/mips/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/mips/arc/init.c term/arc/console.c disk/arc/arcdisk.c kern/generic/rtc_get_time_ms.c kern/mips/cache.S kern/mips/dl.c kern/mips/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22664,7 +22664,7 @@ endif + if COND_ia64_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = +-kernel_exec_SOURCES += kern/ia64/efi/startup.S kern/ia64/efi/init.c kern/ia64/dl.c kern/ia64/dl_helper.c kern/ia64/cache.c lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/ia64/efi/startup.S kern/ia64/efi/init.c kern/ia64/dl.c kern/ia64/dl_helper.c kern/ia64/cache.c lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) -fno-builtin -fpic -minline-int-divide-max-throughput +@@ -22686,7 +22686,7 @@ endif + if COND_mips_qemu_mips + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/mips/startup.S +-kernel_exec_SOURCES += kern/mips/qemu_mips/init.c term/ns8250.c term/serial.c term/at_keyboard.c term/ps2.c commands/boot.c commands/keylayouts.c term/i386/pc/vga_text.c kern/vga_init.c kern/generic/rtc_get_time_ms.c kern/mips/cache.S kern/mips/dl.c kern/mips/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/mips/qemu_mips/init.c term/ns8250.c term/serial.c term/at_keyboard.c term/ps2.c commands/boot.c commands/keylayouts.c term/i386/pc/vga_text.c kern/vga_init.c kern/generic/rtc_get_time_ms.c kern/mips/cache.S kern/mips/dl.c kern/mips/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22708,7 +22708,7 @@ endif + if COND_arm_uboot + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/arm/startup.S +-kernel_exec_SOURCES += kern/arm/uboot/init.c kern/arm/uboot/uboot.S disk/uboot/ubootdisk.c kern/uboot/uboot.c kern/uboot/init.c kern/uboot/hw.c term/uboot/console.c kern/arm/dl.c kern/arm/dl_helper.c kern/arm/cache_armv6.S kern/arm/cache_armv7.S kern/arm/cache.c kern/arm/compiler-rt.S lib/division.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/arm/uboot/init.c kern/arm/uboot/uboot.S disk/uboot/ubootdisk.c kern/uboot/uboot.c kern/uboot/init.c kern/uboot/hw.c term/uboot/console.c kern/arm/dl.c kern/arm/dl_helper.c kern/arm/cache_armv6.S kern/arm/cache_armv7.S kern/arm/cache.c kern/arm/compiler-rt.S lib/division.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22730,7 +22730,7 @@ endif + if COND_arm_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/arm/efi/startup.S +-kernel_exec_SOURCES += kern/arm/efi/init.c kern/efi/fdt.c kern/arm/dl.c kern/arm/dl_helper.c kern/arm/cache_armv6.S kern/arm/cache_armv7.S kern/arm/cache.c kern/arm/compiler-rt.S lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/arm/efi/init.c kern/efi/fdt.c kern/arm/dl.c kern/arm/dl_helper.c kern/arm/cache_armv6.S kern/arm/cache_armv7.S kern/arm/cache.c kern/arm/compiler-rt.S lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22752,7 +22752,7 @@ endif + if COND_arm64_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/arm64/efi/startup.S +-kernel_exec_SOURCES += kern/arm64/efi/init.c kern/efi/fdt.c kern/arm64/cache.c kern/arm64/cache_flush.S kern/arm64/dl.c kern/arm64/dl_helper.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/arm64/efi/init.c kern/efi/fdt.c kern/arm64/cache.c kern/arm64/cache_flush.S kern/arm64/dl.c kern/arm64/dl_helper.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22774,7 +22774,7 @@ endif + if COND_arm_coreboot + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/arm/startup.S +-kernel_exec_SOURCES += kern/arm/coreboot/init.c kern/arm/coreboot/timer.c kern/arm/coreboot/coreboot.S lib/fdt.c bus/fdt.c term/ps2.c term/arm/pl050.c term/arm/cros.c term/arm/cros_ec.c bus/spi/rk3288_spi.c commands/keylayouts.c kern/arm/coreboot/dma.c kern/arm/coreboot/cbtable.c video/coreboot/cbfb.c kern/coreboot/mmap.c kern/coreboot/cbtable.c term/gfxterm.c font/font.c font/font_cmd.c io/bufio.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c video/fb/video_fb.c video/video.c kern/arm/dl.c kern/arm/dl_helper.c kern/arm/cache_armv6.S kern/arm/cache_armv7.S kern/arm/cache.c kern/arm/compiler-rt.S lib/division.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/arm/coreboot/init.c kern/arm/coreboot/timer.c kern/arm/coreboot/coreboot.S lib/fdt.c bus/fdt.c term/ps2.c term/arm/pl050.c term/arm/cros.c term/arm/cros_ec.c bus/spi/rk3288_spi.c commands/keylayouts.c kern/arm/coreboot/dma.c kern/arm/coreboot/cbtable.c video/coreboot/cbfb.c kern/coreboot/mmap.c kern/coreboot/cbtable.c term/gfxterm.c font/font.c font/font_cmd.c io/bufio.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c video/fb/video_fb.c video/video.c kern/arm/dl.c kern/arm/dl_helper.c kern/arm/cache_armv6.S kern/arm/cache_armv7.S kern/arm/cache.c kern/arm/compiler-rt.S lib/division.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22796,7 +22796,7 @@ endif + if COND_riscv32_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/riscv/efi/startup.S +-kernel_exec_SOURCES += kern/riscv/efi/init.c kern/efi/fdt.c kern/riscv/cache.c kern/riscv/cache_flush.S kern/riscv/dl.c lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/riscv/efi/init.c kern/efi/fdt.c kern/riscv/cache.c kern/riscv/cache_flush.S kern/riscv/dl.c lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@@ -22818,7 +22818,7 @@ endif + if COND_riscv64_efi + platform_PROGRAMS += kernel.exec + kernel_exec_SOURCES = kern/riscv/efi/startup.S +-kernel_exec_SOURCES += kern/riscv/efi/init.c kern/efi/fdt.c kern/riscv/cache.c kern/riscv/cache_flush.S kern/riscv/dl.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c ++kernel_exec_SOURCES += kern/riscv/efi/init.c kern/efi/fdt.c kern/riscv/cache.c kern/riscv/cache_flush.S kern/riscv/dl.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/buffer.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c kern/verifiers.c + nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources + kernel_exec_LDADD = + kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def +index ee8dc55..291b58a 100644 +--- a/grub-core/Makefile.core.def ++++ b/grub-core/Makefile.core.def +@@ -123,6 +123,7 @@ kernel = { + riscv32_efi_startup = kern/riscv/efi/startup.S; + riscv64_efi_startup = kern/riscv/efi/startup.S; + ++ common = kern/buffer.c; + common = kern/command.c; + common = kern/corecmd.c; + common = kern/device.c; +diff --git a/grub-core/Makefile.in b/grub-core/Makefile.in +index ac400ea..1f8133b 100644 +--- a/grub-core/Makefile.in ++++ b/grub-core/Makefile.in +@@ -10459,12 +10459,12 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c \ + kern/efi/acpi.c kern/efi/sb.c kern/lockdown.c \ + kern/compiler-rt.c kern/mm.c kern/time.c \ +- kern/generic/millisleep.c kern/command.c kern/corecmd.c \ +- kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c \ +- kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c \ +- kern/parser.c kern/partition.c kern/rescue_parser.c \ +- kern/rescue_reader.c kern/term.c kern/verifiers.c \ +- kern/arm/startup.S kern/arm/coreboot/init.c \ ++ kern/generic/millisleep.c kern/buffer.c kern/command.c \ ++ kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c \ ++ kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c \ ++ kern/misc.c kern/parser.c kern/partition.c \ ++ kern/rescue_parser.c kern/rescue_reader.c kern/term.c \ ++ kern/verifiers.c kern/arm/startup.S kern/arm/coreboot/init.c \ + kern/arm/coreboot/timer.c kern/arm/coreboot/coreboot.S \ + lib/fdt.c bus/fdt.c term/ps2.c term/arm/pl050.c \ + term/arm/cros.c term/arm/cros_ec.c bus/spi/rk3288_spi.c \ +@@ -10538,6 +10538,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -10578,6 +10579,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -10616,6 +10618,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -10653,6 +10656,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_FALSE@@COND_riscv64_efi_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -10691,6 +10695,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_riscv32_efi_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -10728,6 +10733,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -10768,6 +10774,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -10822,6 +10829,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -10856,6 +10864,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -10893,6 +10902,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -10928,6 +10938,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_i386_xen_pvh_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -10963,6 +10974,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -10994,6 +11006,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -11023,6 +11036,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -11054,6 +11068,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -11091,6 +11106,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -11130,6 +11146,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -11174,6 +11191,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -11216,6 +11234,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ term/kernel_exec-tparm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ commands/kernel_exec-extcmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ lib/kernel_exec-arg.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -11257,6 +11276,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -11298,6 +11318,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -11353,6 +11374,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ ++@COND_arm64_efi_FALSE@@COND_arm_coreboot_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_FALSE@@COND_arm_coreboot_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -11391,6 +11413,7 @@ am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + @COND_arm64_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ + @COND_arm64_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ + @COND_arm64_efi_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ ++@COND_arm64_efi_TRUE@ kern/kernel_exec-buffer.$(OBJEXT) \ + @COND_arm64_efi_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ + @COND_arm64_efi_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ + @COND_arm64_efi_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@@ -25607,11 +25630,12 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_arm64_efi_TRUE@ kern/acpi.c kern/efi/acpi.c kern/efi/sb.c \ + @COND_arm64_efi_TRUE@ kern/lockdown.c kern/compiler-rt.c \ + @COND_arm64_efi_TRUE@ kern/mm.c kern/time.c \ +-@COND_arm64_efi_TRUE@ kern/generic/millisleep.c kern/command.c \ +-@COND_arm64_efi_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +-@COND_arm64_efi_TRUE@ kern/dl.c kern/env.c kern/err.c \ +-@COND_arm64_efi_TRUE@ kern/file.c kern/fs.c kern/list.c \ +-@COND_arm64_efi_TRUE@ kern/main.c kern/misc.c kern/parser.c \ ++@COND_arm64_efi_TRUE@ kern/generic/millisleep.c kern/buffer.c \ ++@COND_arm64_efi_TRUE@ kern/command.c kern/corecmd.c \ ++@COND_arm64_efi_TRUE@ kern/device.c kern/disk.c kern/dl.c \ ++@COND_arm64_efi_TRUE@ kern/env.c kern/err.c kern/file.c \ ++@COND_arm64_efi_TRUE@ kern/fs.c kern/list.c kern/main.c \ ++@COND_arm64_efi_TRUE@ kern/misc.c kern/parser.c \ + @COND_arm64_efi_TRUE@ kern/partition.c kern/rescue_parser.c \ + @COND_arm64_efi_TRUE@ kern/rescue_reader.c kern/term.c \ + @COND_arm64_efi_TRUE@ kern/verifiers.c +@@ -25639,12 +25663,13 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_arm_coreboot_TRUE@ kern/arm/compiler-rt.S lib/division.c \ + @COND_arm_coreboot_TRUE@ kern/compiler-rt.c kern/mm.c \ + @COND_arm_coreboot_TRUE@ kern/time.c kern/generic/millisleep.c \ +-@COND_arm_coreboot_TRUE@ kern/command.c kern/corecmd.c \ +-@COND_arm_coreboot_TRUE@ kern/device.c kern/disk.c kern/dl.c \ +-@COND_arm_coreboot_TRUE@ kern/env.c kern/err.c kern/file.c \ +-@COND_arm_coreboot_TRUE@ kern/fs.c kern/list.c kern/main.c \ +-@COND_arm_coreboot_TRUE@ kern/misc.c kern/parser.c \ +-@COND_arm_coreboot_TRUE@ kern/partition.c kern/rescue_parser.c \ ++@COND_arm_coreboot_TRUE@ kern/buffer.c kern/command.c \ ++@COND_arm_coreboot_TRUE@ kern/corecmd.c kern/device.c \ ++@COND_arm_coreboot_TRUE@ kern/disk.c kern/dl.c kern/env.c \ ++@COND_arm_coreboot_TRUE@ kern/err.c kern/file.c kern/fs.c \ ++@COND_arm_coreboot_TRUE@ kern/list.c kern/main.c kern/misc.c \ ++@COND_arm_coreboot_TRUE@ kern/parser.c kern/partition.c \ ++@COND_arm_coreboot_TRUE@ kern/rescue_parser.c \ + @COND_arm_coreboot_TRUE@ kern/rescue_reader.c kern/term.c \ + @COND_arm_coreboot_TRUE@ kern/verifiers.c + @COND_arm_efi_TRUE@kernel_exec_SOURCES = kern/arm/efi/startup.S \ +@@ -25659,13 +25684,14 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_arm_efi_TRUE@ kern/efi/acpi.c kern/efi/sb.c \ + @COND_arm_efi_TRUE@ kern/lockdown.c kern/compiler-rt.c \ + @COND_arm_efi_TRUE@ kern/mm.c kern/time.c \ +-@COND_arm_efi_TRUE@ kern/generic/millisleep.c kern/command.c \ +-@COND_arm_efi_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +-@COND_arm_efi_TRUE@ kern/dl.c kern/env.c kern/err.c kern/file.c \ +-@COND_arm_efi_TRUE@ kern/fs.c kern/list.c kern/main.c \ +-@COND_arm_efi_TRUE@ kern/misc.c kern/parser.c kern/partition.c \ +-@COND_arm_efi_TRUE@ kern/rescue_parser.c kern/rescue_reader.c \ +-@COND_arm_efi_TRUE@ kern/term.c kern/verifiers.c ++@COND_arm_efi_TRUE@ kern/generic/millisleep.c kern/buffer.c \ ++@COND_arm_efi_TRUE@ kern/command.c kern/corecmd.c kern/device.c \ ++@COND_arm_efi_TRUE@ kern/disk.c kern/dl.c kern/env.c kern/err.c \ ++@COND_arm_efi_TRUE@ kern/file.c kern/fs.c kern/list.c \ ++@COND_arm_efi_TRUE@ kern/main.c kern/misc.c kern/parser.c \ ++@COND_arm_efi_TRUE@ kern/partition.c kern/rescue_parser.c \ ++@COND_arm_efi_TRUE@ kern/rescue_reader.c kern/term.c \ ++@COND_arm_efi_TRUE@ kern/verifiers.c + @COND_arm_uboot_TRUE@kernel_exec_SOURCES = kern/arm/startup.S \ + @COND_arm_uboot_TRUE@ kern/arm/uboot/init.c \ + @COND_arm_uboot_TRUE@ kern/arm/uboot/uboot.S \ +@@ -25679,11 +25705,12 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_arm_uboot_TRUE@ term/terminfo.c term/tparm.c \ + @COND_arm_uboot_TRUE@ commands/extcmd.c lib/arg.c \ + @COND_arm_uboot_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ +-@COND_arm_uboot_TRUE@ kern/generic/millisleep.c kern/command.c \ +-@COND_arm_uboot_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +-@COND_arm_uboot_TRUE@ kern/dl.c kern/env.c kern/err.c \ +-@COND_arm_uboot_TRUE@ kern/file.c kern/fs.c kern/list.c \ +-@COND_arm_uboot_TRUE@ kern/main.c kern/misc.c kern/parser.c \ ++@COND_arm_uboot_TRUE@ kern/generic/millisleep.c kern/buffer.c \ ++@COND_arm_uboot_TRUE@ kern/command.c kern/corecmd.c \ ++@COND_arm_uboot_TRUE@ kern/device.c kern/disk.c kern/dl.c \ ++@COND_arm_uboot_TRUE@ kern/env.c kern/err.c kern/file.c \ ++@COND_arm_uboot_TRUE@ kern/fs.c kern/list.c kern/main.c \ ++@COND_arm_uboot_TRUE@ kern/misc.c kern/parser.c \ + @COND_arm_uboot_TRUE@ kern/partition.c kern/rescue_parser.c \ + @COND_arm_uboot_TRUE@ kern/rescue_reader.c kern/term.c \ + @COND_arm_uboot_TRUE@ kern/verifiers.c +@@ -25696,11 +25723,11 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_emu_TRUE@ kern/emu/cache.c osdep/emuconsole.c osdep/dl.c \ + @COND_emu_TRUE@ osdep/sleep.c osdep/init.c osdep/emunet.c \ + @COND_emu_TRUE@ osdep/cputime.c term/terminfo.c term/tparm.c \ +-@COND_emu_TRUE@ commands/extcmd.c lib/arg.c kern/command.c \ +-@COND_emu_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +-@COND_emu_TRUE@ kern/dl.c kern/env.c kern/err.c kern/file.c \ +-@COND_emu_TRUE@ kern/fs.c kern/list.c kern/main.c kern/misc.c \ +-@COND_emu_TRUE@ kern/parser.c kern/partition.c \ ++@COND_emu_TRUE@ commands/extcmd.c lib/arg.c kern/buffer.c \ ++@COND_emu_TRUE@ kern/command.c kern/corecmd.c kern/device.c \ ++@COND_emu_TRUE@ kern/disk.c kern/dl.c kern/env.c kern/err.c \ ++@COND_emu_TRUE@ kern/file.c kern/fs.c kern/list.c kern/main.c \ ++@COND_emu_TRUE@ kern/misc.c kern/parser.c kern/partition.c \ + @COND_emu_TRUE@ kern/rescue_parser.c kern/rescue_reader.c \ + @COND_emu_TRUE@ kern/term.c kern/verifiers.c + @COND_i386_coreboot_TRUE@kernel_exec_SOURCES = \ +@@ -25721,12 +25748,13 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_i386_coreboot_TRUE@ kern/i386/tsc_pit.c \ + @COND_i386_coreboot_TRUE@ kern/compiler-rt.c kern/mm.c \ + @COND_i386_coreboot_TRUE@ kern/time.c kern/generic/millisleep.c \ +-@COND_i386_coreboot_TRUE@ kern/command.c kern/corecmd.c \ +-@COND_i386_coreboot_TRUE@ kern/device.c kern/disk.c kern/dl.c \ +-@COND_i386_coreboot_TRUE@ kern/env.c kern/err.c kern/file.c \ +-@COND_i386_coreboot_TRUE@ kern/fs.c kern/list.c kern/main.c \ +-@COND_i386_coreboot_TRUE@ kern/misc.c kern/parser.c \ +-@COND_i386_coreboot_TRUE@ kern/partition.c kern/rescue_parser.c \ ++@COND_i386_coreboot_TRUE@ kern/buffer.c kern/command.c \ ++@COND_i386_coreboot_TRUE@ kern/corecmd.c kern/device.c \ ++@COND_i386_coreboot_TRUE@ kern/disk.c kern/dl.c kern/env.c \ ++@COND_i386_coreboot_TRUE@ kern/err.c kern/file.c kern/fs.c \ ++@COND_i386_coreboot_TRUE@ kern/list.c kern/main.c kern/misc.c \ ++@COND_i386_coreboot_TRUE@ kern/parser.c kern/partition.c \ ++@COND_i386_coreboot_TRUE@ kern/rescue_parser.c \ + @COND_i386_coreboot_TRUE@ kern/rescue_reader.c kern/term.c \ + @COND_i386_coreboot_TRUE@ kern/verifiers.c + @COND_i386_efi_TRUE@kernel_exec_SOURCES = kern/i386/efi/startup.S \ +@@ -25740,14 +25768,14 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_i386_efi_TRUE@ kern/acpi.c kern/efi/acpi.c kern/efi/sb.c \ + @COND_i386_efi_TRUE@ kern/lockdown.c kern/compiler-rt.c \ + @COND_i386_efi_TRUE@ kern/mm.c kern/time.c \ +-@COND_i386_efi_TRUE@ kern/generic/millisleep.c kern/command.c \ +-@COND_i386_efi_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +-@COND_i386_efi_TRUE@ kern/dl.c kern/env.c kern/err.c \ +-@COND_i386_efi_TRUE@ kern/file.c kern/fs.c kern/list.c \ +-@COND_i386_efi_TRUE@ kern/main.c kern/misc.c kern/parser.c \ +-@COND_i386_efi_TRUE@ kern/partition.c kern/rescue_parser.c \ +-@COND_i386_efi_TRUE@ kern/rescue_reader.c kern/term.c \ +-@COND_i386_efi_TRUE@ kern/verifiers.c ++@COND_i386_efi_TRUE@ kern/generic/millisleep.c kern/buffer.c \ ++@COND_i386_efi_TRUE@ kern/command.c kern/corecmd.c \ ++@COND_i386_efi_TRUE@ kern/device.c kern/disk.c kern/dl.c \ ++@COND_i386_efi_TRUE@ kern/env.c kern/err.c kern/file.c \ ++@COND_i386_efi_TRUE@ kern/fs.c kern/list.c kern/main.c \ ++@COND_i386_efi_TRUE@ kern/misc.c kern/parser.c kern/partition.c \ ++@COND_i386_efi_TRUE@ kern/rescue_parser.c kern/rescue_reader.c \ ++@COND_i386_efi_TRUE@ kern/term.c kern/verifiers.c + @COND_i386_ieee1275_TRUE@kernel_exec_SOURCES = \ + @COND_i386_ieee1275_TRUE@ kern/i386/ieee1275/startup.S \ + @COND_i386_ieee1275_TRUE@ disk/ieee1275/ofdisk.c \ +@@ -25762,12 +25790,13 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_i386_ieee1275_TRUE@ commands/extcmd.c lib/arg.c \ + @COND_i386_ieee1275_TRUE@ kern/compiler-rt.c kern/mm.c \ + @COND_i386_ieee1275_TRUE@ kern/time.c kern/generic/millisleep.c \ +-@COND_i386_ieee1275_TRUE@ kern/command.c kern/corecmd.c \ +-@COND_i386_ieee1275_TRUE@ kern/device.c kern/disk.c kern/dl.c \ +-@COND_i386_ieee1275_TRUE@ kern/env.c kern/err.c kern/file.c \ +-@COND_i386_ieee1275_TRUE@ kern/fs.c kern/list.c kern/main.c \ +-@COND_i386_ieee1275_TRUE@ kern/misc.c kern/parser.c \ +-@COND_i386_ieee1275_TRUE@ kern/partition.c kern/rescue_parser.c \ ++@COND_i386_ieee1275_TRUE@ kern/buffer.c kern/command.c \ ++@COND_i386_ieee1275_TRUE@ kern/corecmd.c kern/device.c \ ++@COND_i386_ieee1275_TRUE@ kern/disk.c kern/dl.c kern/env.c \ ++@COND_i386_ieee1275_TRUE@ kern/err.c kern/file.c kern/fs.c \ ++@COND_i386_ieee1275_TRUE@ kern/list.c kern/main.c kern/misc.c \ ++@COND_i386_ieee1275_TRUE@ kern/parser.c kern/partition.c \ ++@COND_i386_ieee1275_TRUE@ kern/rescue_parser.c \ + @COND_i386_ieee1275_TRUE@ kern/rescue_reader.c kern/term.c \ + @COND_i386_ieee1275_TRUE@ kern/verifiers.c + @COND_i386_multiboot_TRUE@kernel_exec_SOURCES = \ +@@ -25781,12 +25810,12 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_i386_multiboot_TRUE@ kern/compiler-rt.c kern/mm.c \ + @COND_i386_multiboot_TRUE@ kern/time.c \ + @COND_i386_multiboot_TRUE@ kern/generic/millisleep.c \ +-@COND_i386_multiboot_TRUE@ kern/command.c kern/corecmd.c \ +-@COND_i386_multiboot_TRUE@ kern/device.c kern/disk.c kern/dl.c \ +-@COND_i386_multiboot_TRUE@ kern/env.c kern/err.c kern/file.c \ +-@COND_i386_multiboot_TRUE@ kern/fs.c kern/list.c kern/main.c \ +-@COND_i386_multiboot_TRUE@ kern/misc.c kern/parser.c \ +-@COND_i386_multiboot_TRUE@ kern/partition.c \ ++@COND_i386_multiboot_TRUE@ kern/buffer.c kern/command.c \ ++@COND_i386_multiboot_TRUE@ kern/corecmd.c kern/device.c \ ++@COND_i386_multiboot_TRUE@ kern/disk.c kern/dl.c kern/env.c \ ++@COND_i386_multiboot_TRUE@ kern/err.c kern/file.c kern/fs.c \ ++@COND_i386_multiboot_TRUE@ kern/list.c kern/main.c kern/misc.c \ ++@COND_i386_multiboot_TRUE@ kern/parser.c kern/partition.c \ + @COND_i386_multiboot_TRUE@ kern/rescue_parser.c \ + @COND_i386_multiboot_TRUE@ kern/rescue_reader.c kern/term.c \ + @COND_i386_multiboot_TRUE@ kern/verifiers.c +@@ -25795,24 +25824,26 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_i386_pc_TRUE@ term/i386/pc/console.c kern/i386/dl.c \ + @COND_i386_pc_TRUE@ kern/i386/tsc.c kern/i386/tsc_pit.c \ + @COND_i386_pc_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ +-@COND_i386_pc_TRUE@ kern/generic/millisleep.c kern/command.c \ +-@COND_i386_pc_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +-@COND_i386_pc_TRUE@ kern/dl.c kern/env.c kern/err.c kern/file.c \ +-@COND_i386_pc_TRUE@ kern/fs.c kern/list.c kern/main.c \ +-@COND_i386_pc_TRUE@ kern/misc.c kern/parser.c kern/partition.c \ +-@COND_i386_pc_TRUE@ kern/rescue_parser.c kern/rescue_reader.c \ +-@COND_i386_pc_TRUE@ kern/term.c kern/verifiers.c ++@COND_i386_pc_TRUE@ kern/generic/millisleep.c kern/buffer.c \ ++@COND_i386_pc_TRUE@ kern/command.c kern/corecmd.c kern/device.c \ ++@COND_i386_pc_TRUE@ kern/disk.c kern/dl.c kern/env.c kern/err.c \ ++@COND_i386_pc_TRUE@ kern/file.c kern/fs.c kern/list.c \ ++@COND_i386_pc_TRUE@ kern/main.c kern/misc.c kern/parser.c \ ++@COND_i386_pc_TRUE@ kern/partition.c kern/rescue_parser.c \ ++@COND_i386_pc_TRUE@ kern/rescue_reader.c kern/term.c \ ++@COND_i386_pc_TRUE@ kern/verifiers.c + @COND_i386_qemu_TRUE@kernel_exec_SOURCES = kern/i386/qemu/startup.S \ + @COND_i386_qemu_TRUE@ kern/i386/qemu/init.c bus/pci.c \ + @COND_i386_qemu_TRUE@ kern/vga_init.c kern/i386/qemu/mmap.c \ + @COND_i386_qemu_TRUE@ term/i386/pc/vga_text.c kern/i386/dl.c \ + @COND_i386_qemu_TRUE@ kern/i386/tsc.c kern/i386/tsc_pit.c \ + @COND_i386_qemu_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ +-@COND_i386_qemu_TRUE@ kern/generic/millisleep.c kern/command.c \ +-@COND_i386_qemu_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +-@COND_i386_qemu_TRUE@ kern/dl.c kern/env.c kern/err.c \ +-@COND_i386_qemu_TRUE@ kern/file.c kern/fs.c kern/list.c \ +-@COND_i386_qemu_TRUE@ kern/main.c kern/misc.c kern/parser.c \ ++@COND_i386_qemu_TRUE@ kern/generic/millisleep.c kern/buffer.c \ ++@COND_i386_qemu_TRUE@ kern/command.c kern/corecmd.c \ ++@COND_i386_qemu_TRUE@ kern/device.c kern/disk.c kern/dl.c \ ++@COND_i386_qemu_TRUE@ kern/env.c kern/err.c kern/file.c \ ++@COND_i386_qemu_TRUE@ kern/fs.c kern/list.c kern/main.c \ ++@COND_i386_qemu_TRUE@ kern/misc.c kern/parser.c \ + @COND_i386_qemu_TRUE@ kern/partition.c kern/rescue_parser.c \ + @COND_i386_qemu_TRUE@ kern/rescue_reader.c kern/term.c \ + @COND_i386_qemu_TRUE@ kern/verifiers.c +@@ -25824,14 +25855,14 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_i386_xen_TRUE@ term/terminfo.c term/tparm.c \ + @COND_i386_xen_TRUE@ commands/extcmd.c lib/arg.c \ + @COND_i386_xen_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ +-@COND_i386_xen_TRUE@ kern/generic/millisleep.c kern/command.c \ +-@COND_i386_xen_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +-@COND_i386_xen_TRUE@ kern/dl.c kern/env.c kern/err.c \ +-@COND_i386_xen_TRUE@ kern/file.c kern/fs.c kern/list.c \ +-@COND_i386_xen_TRUE@ kern/main.c kern/misc.c kern/parser.c \ +-@COND_i386_xen_TRUE@ kern/partition.c kern/rescue_parser.c \ +-@COND_i386_xen_TRUE@ kern/rescue_reader.c kern/term.c \ +-@COND_i386_xen_TRUE@ kern/verifiers.c ++@COND_i386_xen_TRUE@ kern/generic/millisleep.c kern/buffer.c \ ++@COND_i386_xen_TRUE@ kern/command.c kern/corecmd.c \ ++@COND_i386_xen_TRUE@ kern/device.c kern/disk.c kern/dl.c \ ++@COND_i386_xen_TRUE@ kern/env.c kern/err.c kern/file.c \ ++@COND_i386_xen_TRUE@ kern/fs.c kern/list.c kern/main.c \ ++@COND_i386_xen_TRUE@ kern/misc.c kern/parser.c kern/partition.c \ ++@COND_i386_xen_TRUE@ kern/rescue_parser.c kern/rescue_reader.c \ ++@COND_i386_xen_TRUE@ kern/term.c kern/verifiers.c + @COND_i386_xen_pvh_TRUE@kernel_exec_SOURCES = \ + @COND_i386_xen_pvh_TRUE@ kern/i386/xen/startup_pvh.S \ + @COND_i386_xen_pvh_TRUE@ kern/i386/dl.c commands/boot.c \ +@@ -25842,12 +25873,13 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_i386_xen_pvh_TRUE@ term/tparm.c commands/extcmd.c \ + @COND_i386_xen_pvh_TRUE@ lib/arg.c kern/compiler-rt.c kern/mm.c \ + @COND_i386_xen_pvh_TRUE@ kern/time.c kern/generic/millisleep.c \ +-@COND_i386_xen_pvh_TRUE@ kern/command.c kern/corecmd.c \ +-@COND_i386_xen_pvh_TRUE@ kern/device.c kern/disk.c kern/dl.c \ +-@COND_i386_xen_pvh_TRUE@ kern/env.c kern/err.c kern/file.c \ +-@COND_i386_xen_pvh_TRUE@ kern/fs.c kern/list.c kern/main.c \ +-@COND_i386_xen_pvh_TRUE@ kern/misc.c kern/parser.c \ +-@COND_i386_xen_pvh_TRUE@ kern/partition.c kern/rescue_parser.c \ ++@COND_i386_xen_pvh_TRUE@ kern/buffer.c kern/command.c \ ++@COND_i386_xen_pvh_TRUE@ kern/corecmd.c kern/device.c \ ++@COND_i386_xen_pvh_TRUE@ kern/disk.c kern/dl.c kern/env.c \ ++@COND_i386_xen_pvh_TRUE@ kern/err.c kern/file.c kern/fs.c \ ++@COND_i386_xen_pvh_TRUE@ kern/list.c kern/main.c kern/misc.c \ ++@COND_i386_xen_pvh_TRUE@ kern/parser.c kern/partition.c \ ++@COND_i386_xen_pvh_TRUE@ kern/rescue_parser.c \ + @COND_i386_xen_pvh_TRUE@ kern/rescue_reader.c kern/term.c \ + @COND_i386_xen_pvh_TRUE@ kern/verifiers.c + @COND_ia64_efi_TRUE@kernel_exec_SOURCES = kern/ia64/efi/startup.S \ +@@ -25859,14 +25891,14 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_ia64_efi_TRUE@ kern/acpi.c kern/efi/acpi.c kern/efi/sb.c \ + @COND_ia64_efi_TRUE@ kern/lockdown.c kern/compiler-rt.c \ + @COND_ia64_efi_TRUE@ kern/mm.c kern/time.c \ +-@COND_ia64_efi_TRUE@ kern/generic/millisleep.c kern/command.c \ +-@COND_ia64_efi_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +-@COND_ia64_efi_TRUE@ kern/dl.c kern/env.c kern/err.c \ +-@COND_ia64_efi_TRUE@ kern/file.c kern/fs.c kern/list.c \ +-@COND_ia64_efi_TRUE@ kern/main.c kern/misc.c kern/parser.c \ +-@COND_ia64_efi_TRUE@ kern/partition.c kern/rescue_parser.c \ +-@COND_ia64_efi_TRUE@ kern/rescue_reader.c kern/term.c \ +-@COND_ia64_efi_TRUE@ kern/verifiers.c ++@COND_ia64_efi_TRUE@ kern/generic/millisleep.c kern/buffer.c \ ++@COND_ia64_efi_TRUE@ kern/command.c kern/corecmd.c \ ++@COND_ia64_efi_TRUE@ kern/device.c kern/disk.c kern/dl.c \ ++@COND_ia64_efi_TRUE@ kern/env.c kern/err.c kern/file.c \ ++@COND_ia64_efi_TRUE@ kern/fs.c kern/list.c kern/main.c \ ++@COND_ia64_efi_TRUE@ kern/misc.c kern/parser.c kern/partition.c \ ++@COND_ia64_efi_TRUE@ kern/rescue_parser.c kern/rescue_reader.c \ ++@COND_ia64_efi_TRUE@ kern/term.c kern/verifiers.c + @COND_mips_arc_TRUE@kernel_exec_SOURCES = kern/mips/startup.S \ + @COND_mips_arc_TRUE@ kern/mips/arc/init.c term/arc/console.c \ + @COND_mips_arc_TRUE@ disk/arc/arcdisk.c \ +@@ -25875,14 +25907,14 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_mips_arc_TRUE@ kern/mips/init.c term/terminfo.c \ + @COND_mips_arc_TRUE@ term/tparm.c commands/extcmd.c lib/arg.c \ + @COND_mips_arc_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ +-@COND_mips_arc_TRUE@ kern/generic/millisleep.c kern/command.c \ +-@COND_mips_arc_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +-@COND_mips_arc_TRUE@ kern/dl.c kern/env.c kern/err.c \ +-@COND_mips_arc_TRUE@ kern/file.c kern/fs.c kern/list.c \ +-@COND_mips_arc_TRUE@ kern/main.c kern/misc.c kern/parser.c \ +-@COND_mips_arc_TRUE@ kern/partition.c kern/rescue_parser.c \ +-@COND_mips_arc_TRUE@ kern/rescue_reader.c kern/term.c \ +-@COND_mips_arc_TRUE@ kern/verifiers.c ++@COND_mips_arc_TRUE@ kern/generic/millisleep.c kern/buffer.c \ ++@COND_mips_arc_TRUE@ kern/command.c kern/corecmd.c \ ++@COND_mips_arc_TRUE@ kern/device.c kern/disk.c kern/dl.c \ ++@COND_mips_arc_TRUE@ kern/env.c kern/err.c kern/file.c \ ++@COND_mips_arc_TRUE@ kern/fs.c kern/list.c kern/main.c \ ++@COND_mips_arc_TRUE@ kern/misc.c kern/parser.c kern/partition.c \ ++@COND_mips_arc_TRUE@ kern/rescue_parser.c kern/rescue_reader.c \ ++@COND_mips_arc_TRUE@ kern/term.c kern/verifiers.c + @COND_mips_loongson_TRUE@kernel_exec_SOURCES = kern/mips/startup.S \ + @COND_mips_loongson_TRUE@ term/ns8250.c bus/bonito.c \ + @COND_mips_loongson_TRUE@ bus/cs5536.c bus/pci.c \ +@@ -25904,12 +25936,13 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_mips_loongson_TRUE@ lib/arg.c kern/compiler-rt.c \ + @COND_mips_loongson_TRUE@ kern/mm.c kern/time.c \ + @COND_mips_loongson_TRUE@ kern/generic/millisleep.c \ +-@COND_mips_loongson_TRUE@ kern/command.c kern/corecmd.c \ +-@COND_mips_loongson_TRUE@ kern/device.c kern/disk.c kern/dl.c \ +-@COND_mips_loongson_TRUE@ kern/env.c kern/err.c kern/file.c \ +-@COND_mips_loongson_TRUE@ kern/fs.c kern/list.c kern/main.c \ +-@COND_mips_loongson_TRUE@ kern/misc.c kern/parser.c \ +-@COND_mips_loongson_TRUE@ kern/partition.c kern/rescue_parser.c \ ++@COND_mips_loongson_TRUE@ kern/buffer.c kern/command.c \ ++@COND_mips_loongson_TRUE@ kern/corecmd.c kern/device.c \ ++@COND_mips_loongson_TRUE@ kern/disk.c kern/dl.c kern/env.c \ ++@COND_mips_loongson_TRUE@ kern/err.c kern/file.c kern/fs.c \ ++@COND_mips_loongson_TRUE@ kern/list.c kern/main.c kern/misc.c \ ++@COND_mips_loongson_TRUE@ kern/parser.c kern/partition.c \ ++@COND_mips_loongson_TRUE@ kern/rescue_parser.c \ + @COND_mips_loongson_TRUE@ kern/rescue_reader.c kern/term.c \ + @COND_mips_loongson_TRUE@ kern/verifiers.c + @COND_mips_qemu_mips_TRUE@kernel_exec_SOURCES = kern/mips/startup.S \ +@@ -25927,12 +25960,12 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_mips_qemu_mips_TRUE@ lib/arg.c kern/compiler-rt.c \ + @COND_mips_qemu_mips_TRUE@ kern/mm.c kern/time.c \ + @COND_mips_qemu_mips_TRUE@ kern/generic/millisleep.c \ +-@COND_mips_qemu_mips_TRUE@ kern/command.c kern/corecmd.c \ +-@COND_mips_qemu_mips_TRUE@ kern/device.c kern/disk.c kern/dl.c \ +-@COND_mips_qemu_mips_TRUE@ kern/env.c kern/err.c kern/file.c \ +-@COND_mips_qemu_mips_TRUE@ kern/fs.c kern/list.c kern/main.c \ +-@COND_mips_qemu_mips_TRUE@ kern/misc.c kern/parser.c \ +-@COND_mips_qemu_mips_TRUE@ kern/partition.c \ ++@COND_mips_qemu_mips_TRUE@ kern/buffer.c kern/command.c \ ++@COND_mips_qemu_mips_TRUE@ kern/corecmd.c kern/device.c \ ++@COND_mips_qemu_mips_TRUE@ kern/disk.c kern/dl.c kern/env.c \ ++@COND_mips_qemu_mips_TRUE@ kern/err.c kern/file.c kern/fs.c \ ++@COND_mips_qemu_mips_TRUE@ kern/list.c kern/main.c kern/misc.c \ ++@COND_mips_qemu_mips_TRUE@ kern/parser.c kern/partition.c \ + @COND_mips_qemu_mips_TRUE@ kern/rescue_parser.c \ + @COND_mips_qemu_mips_TRUE@ kern/rescue_reader.c kern/term.c \ + @COND_mips_qemu_mips_TRUE@ kern/verifiers.c +@@ -25953,12 +25986,13 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_powerpc_ieee1275_TRUE@ kern/compiler-rt.c kern/mm.c \ + @COND_powerpc_ieee1275_TRUE@ kern/time.c \ + @COND_powerpc_ieee1275_TRUE@ kern/generic/millisleep.c \ +-@COND_powerpc_ieee1275_TRUE@ kern/command.c kern/corecmd.c \ +-@COND_powerpc_ieee1275_TRUE@ kern/device.c kern/disk.c \ +-@COND_powerpc_ieee1275_TRUE@ kern/dl.c kern/env.c kern/err.c \ +-@COND_powerpc_ieee1275_TRUE@ kern/file.c kern/fs.c kern/list.c \ +-@COND_powerpc_ieee1275_TRUE@ kern/main.c kern/misc.c \ +-@COND_powerpc_ieee1275_TRUE@ kern/parser.c kern/partition.c \ ++@COND_powerpc_ieee1275_TRUE@ kern/buffer.c kern/command.c \ ++@COND_powerpc_ieee1275_TRUE@ kern/corecmd.c kern/device.c \ ++@COND_powerpc_ieee1275_TRUE@ kern/disk.c kern/dl.c kern/env.c \ ++@COND_powerpc_ieee1275_TRUE@ kern/err.c kern/file.c kern/fs.c \ ++@COND_powerpc_ieee1275_TRUE@ kern/list.c kern/main.c \ ++@COND_powerpc_ieee1275_TRUE@ kern/misc.c kern/parser.c \ ++@COND_powerpc_ieee1275_TRUE@ kern/partition.c \ + @COND_powerpc_ieee1275_TRUE@ kern/rescue_parser.c \ + @COND_powerpc_ieee1275_TRUE@ kern/rescue_reader.c kern/term.c \ + @COND_powerpc_ieee1275_TRUE@ kern/verifiers.c +@@ -25973,7 +26007,7 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_riscv32_efi_TRUE@ kern/efi/acpi.c kern/efi/sb.c \ + @COND_riscv32_efi_TRUE@ kern/lockdown.c kern/compiler-rt.c \ + @COND_riscv32_efi_TRUE@ kern/mm.c kern/time.c \ +-@COND_riscv32_efi_TRUE@ kern/generic/millisleep.c \ ++@COND_riscv32_efi_TRUE@ kern/generic/millisleep.c kern/buffer.c \ + @COND_riscv32_efi_TRUE@ kern/command.c kern/corecmd.c \ + @COND_riscv32_efi_TRUE@ kern/device.c kern/disk.c kern/dl.c \ + @COND_riscv32_efi_TRUE@ kern/env.c kern/err.c kern/file.c \ +@@ -25993,12 +26027,13 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_riscv64_efi_TRUE@ kern/efi/sb.c kern/lockdown.c \ + @COND_riscv64_efi_TRUE@ kern/compiler-rt.c kern/mm.c \ + @COND_riscv64_efi_TRUE@ kern/time.c kern/generic/millisleep.c \ +-@COND_riscv64_efi_TRUE@ kern/command.c kern/corecmd.c \ +-@COND_riscv64_efi_TRUE@ kern/device.c kern/disk.c kern/dl.c \ +-@COND_riscv64_efi_TRUE@ kern/env.c kern/err.c kern/file.c \ +-@COND_riscv64_efi_TRUE@ kern/fs.c kern/list.c kern/main.c \ +-@COND_riscv64_efi_TRUE@ kern/misc.c kern/parser.c \ +-@COND_riscv64_efi_TRUE@ kern/partition.c kern/rescue_parser.c \ ++@COND_riscv64_efi_TRUE@ kern/buffer.c kern/command.c \ ++@COND_riscv64_efi_TRUE@ kern/corecmd.c kern/device.c \ ++@COND_riscv64_efi_TRUE@ kern/disk.c kern/dl.c kern/env.c \ ++@COND_riscv64_efi_TRUE@ kern/err.c kern/file.c kern/fs.c \ ++@COND_riscv64_efi_TRUE@ kern/list.c kern/main.c kern/misc.c \ ++@COND_riscv64_efi_TRUE@ kern/parser.c kern/partition.c \ ++@COND_riscv64_efi_TRUE@ kern/rescue_parser.c \ + @COND_riscv64_efi_TRUE@ kern/rescue_reader.c kern/term.c \ + @COND_riscv64_efi_TRUE@ kern/verifiers.c + @COND_sparc64_ieee1275_TRUE@kernel_exec_SOURCES = \ +@@ -26019,12 +26054,13 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_sparc64_ieee1275_TRUE@ kern/compiler-rt.c kern/mm.c \ + @COND_sparc64_ieee1275_TRUE@ kern/time.c \ + @COND_sparc64_ieee1275_TRUE@ kern/generic/millisleep.c \ +-@COND_sparc64_ieee1275_TRUE@ kern/command.c kern/corecmd.c \ +-@COND_sparc64_ieee1275_TRUE@ kern/device.c kern/disk.c \ +-@COND_sparc64_ieee1275_TRUE@ kern/dl.c kern/env.c kern/err.c \ +-@COND_sparc64_ieee1275_TRUE@ kern/file.c kern/fs.c kern/list.c \ +-@COND_sparc64_ieee1275_TRUE@ kern/main.c kern/misc.c \ +-@COND_sparc64_ieee1275_TRUE@ kern/parser.c kern/partition.c \ ++@COND_sparc64_ieee1275_TRUE@ kern/buffer.c kern/command.c \ ++@COND_sparc64_ieee1275_TRUE@ kern/corecmd.c kern/device.c \ ++@COND_sparc64_ieee1275_TRUE@ kern/disk.c kern/dl.c kern/env.c \ ++@COND_sparc64_ieee1275_TRUE@ kern/err.c kern/file.c kern/fs.c \ ++@COND_sparc64_ieee1275_TRUE@ kern/list.c kern/main.c \ ++@COND_sparc64_ieee1275_TRUE@ kern/misc.c kern/parser.c \ ++@COND_sparc64_ieee1275_TRUE@ kern/partition.c \ + @COND_sparc64_ieee1275_TRUE@ kern/rescue_parser.c \ + @COND_sparc64_ieee1275_TRUE@ kern/rescue_reader.c kern/term.c \ + @COND_sparc64_ieee1275_TRUE@ kern/verifiers.c +@@ -26040,11 +26076,12 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_x86_64_efi_TRUE@ kern/acpi.c kern/efi/acpi.c \ + @COND_x86_64_efi_TRUE@ kern/efi/sb.c kern/lockdown.c \ + @COND_x86_64_efi_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ +-@COND_x86_64_efi_TRUE@ kern/generic/millisleep.c kern/command.c \ +-@COND_x86_64_efi_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +-@COND_x86_64_efi_TRUE@ kern/dl.c kern/env.c kern/err.c \ +-@COND_x86_64_efi_TRUE@ kern/file.c kern/fs.c kern/list.c \ +-@COND_x86_64_efi_TRUE@ kern/main.c kern/misc.c kern/parser.c \ ++@COND_x86_64_efi_TRUE@ kern/generic/millisleep.c kern/buffer.c \ ++@COND_x86_64_efi_TRUE@ kern/command.c kern/corecmd.c \ ++@COND_x86_64_efi_TRUE@ kern/device.c kern/disk.c kern/dl.c \ ++@COND_x86_64_efi_TRUE@ kern/env.c kern/err.c kern/file.c \ ++@COND_x86_64_efi_TRUE@ kern/fs.c kern/list.c kern/main.c \ ++@COND_x86_64_efi_TRUE@ kern/misc.c kern/parser.c \ + @COND_x86_64_efi_TRUE@ kern/partition.c kern/rescue_parser.c \ + @COND_x86_64_efi_TRUE@ kern/rescue_reader.c kern/term.c \ + @COND_x86_64_efi_TRUE@ kern/verifiers.c +@@ -26057,11 +26094,12 @@ gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) + @COND_x86_64_xen_TRUE@ term/terminfo.c term/tparm.c \ + @COND_x86_64_xen_TRUE@ commands/extcmd.c lib/arg.c \ + @COND_x86_64_xen_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ +-@COND_x86_64_xen_TRUE@ kern/generic/millisleep.c kern/command.c \ +-@COND_x86_64_xen_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +-@COND_x86_64_xen_TRUE@ kern/dl.c kern/env.c kern/err.c \ +-@COND_x86_64_xen_TRUE@ kern/file.c kern/fs.c kern/list.c \ +-@COND_x86_64_xen_TRUE@ kern/main.c kern/misc.c kern/parser.c \ ++@COND_x86_64_xen_TRUE@ kern/generic/millisleep.c kern/buffer.c \ ++@COND_x86_64_xen_TRUE@ kern/command.c kern/corecmd.c \ ++@COND_x86_64_xen_TRUE@ kern/device.c kern/disk.c kern/dl.c \ ++@COND_x86_64_xen_TRUE@ kern/env.c kern/err.c kern/file.c \ ++@COND_x86_64_xen_TRUE@ kern/fs.c kern/list.c kern/main.c \ ++@COND_x86_64_xen_TRUE@ kern/misc.c kern/parser.c \ + @COND_x86_64_xen_TRUE@ kern/partition.c kern/rescue_parser.c \ + @COND_x86_64_xen_TRUE@ kern/rescue_reader.c kern/term.c \ + @COND_x86_64_xen_TRUE@ kern/verifiers.c +@@ -28027,6 +28065,8 @@ kern/generic/$(DEPDIR)/$(am__dirstamp): + kern/generic/kernel_exec-millisleep.$(OBJEXT): \ + kern/generic/$(am__dirstamp) \ + kern/generic/$(DEPDIR)/$(am__dirstamp) ++kern/kernel_exec-buffer.$(OBJEXT): kern/$(am__dirstamp) \ ++ kern/$(DEPDIR)/$(am__dirstamp) + kern/kernel_exec-command.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) + kern/kernel_exec-corecmd.$(OBJEXT): kern/$(am__dirstamp) \ +@@ -30952,6 +30992,7 @@ distclean-compile: + @AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/acpi_module-acpi.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/elf_module-elf.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-acpi.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-buffer.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-command.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-compiler-rt.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-corecmd.Po@am__quote@ +@@ -35382,6 +35423,20 @@ kern/generic/kernel_exec-millisleep.obj: kern/generic/millisleep.c + @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ + @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/generic/kernel_exec-millisleep.obj `if test -f 'kern/generic/millisleep.c'; then $(CYGPATH_W) 'kern/generic/millisleep.c'; else $(CYGPATH_W) '$(srcdir)/kern/generic/millisleep.c'; fi` + ++kern/kernel_exec-buffer.o: kern/buffer.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-buffer.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-buffer.Tpo -c -o kern/kernel_exec-buffer.o `test -f 'kern/buffer.c' || echo '$(srcdir)/'`kern/buffer.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-buffer.Tpo kern/$(DEPDIR)/kernel_exec-buffer.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/buffer.c' object='kern/kernel_exec-buffer.o' libtool=no @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-buffer.o `test -f 'kern/buffer.c' || echo '$(srcdir)/'`kern/buffer.c ++ ++kern/kernel_exec-buffer.obj: kern/buffer.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-buffer.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-buffer.Tpo -c -o kern/kernel_exec-buffer.obj `if test -f 'kern/buffer.c'; then $(CYGPATH_W) 'kern/buffer.c'; else $(CYGPATH_W) '$(srcdir)/kern/buffer.c'; fi` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-buffer.Tpo kern/$(DEPDIR)/kernel_exec-buffer.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/buffer.c' object='kern/kernel_exec-buffer.obj' libtool=no @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-buffer.obj `if test -f 'kern/buffer.c'; then $(CYGPATH_W) 'kern/buffer.c'; else $(CYGPATH_W) '$(srcdir)/kern/buffer.c'; fi` ++ + kern/kernel_exec-command.o: kern/command.c + @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-command.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-command.Tpo -c -o kern/kernel_exec-command.o `test -f 'kern/command.c' || echo '$(srcdir)/'`kern/command.c + @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-command.Tpo kern/$(DEPDIR)/kernel_exec-command.Po +diff --git a/grub-core/kern/buffer.c b/grub-core/kern/buffer.c +new file mode 100644 +index 0000000..9f5f8b8 +--- /dev/null ++++ b/grub-core/kern/buffer.c +@@ -0,0 +1,117 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2021 Free Software Foundation, Inc. ++ * ++ * GRUB 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 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB 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 GRUB. If not, see . ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++grub_buffer_t ++grub_buffer_new (grub_size_t sz) ++{ ++ struct grub_buffer *ret; ++ ++ ret = (struct grub_buffer *) grub_malloc (sizeof (*ret)); ++ if (ret == NULL) ++ return NULL; ++ ++ ret->data = (grub_uint8_t *) grub_malloc (sz); ++ if (ret->data == NULL) ++ { ++ grub_free (ret); ++ return NULL; ++ } ++ ++ ret->sz = sz; ++ ret->pos = 0; ++ ret->used = 0; ++ ++ return ret; ++} ++ ++void ++grub_buffer_free (grub_buffer_t buf) ++{ ++ grub_free (buf->data); ++ grub_free (buf); ++} ++ ++grub_err_t ++grub_buffer_ensure_space (grub_buffer_t buf, grub_size_t req) ++{ ++ grub_uint8_t *d; ++ grub_size_t newsz = 1; ++ ++ /* Is the current buffer size adequate? */ ++ if (buf->sz >= req) ++ return GRUB_ERR_NONE; ++ ++ /* Find the smallest power-of-2 size that satisfies the request. */ ++ while (newsz < req) ++ { ++ if (newsz == 0) ++ return grub_error (GRUB_ERR_OUT_OF_RANGE, ++ N_("requested buffer size is too large")); ++ newsz <<= 1; ++ } ++ ++ d = (grub_uint8_t *) grub_realloc (buf->data, newsz); ++ if (d == NULL) ++ return grub_errno; ++ ++ buf->data = d; ++ buf->sz = newsz; ++ ++ return GRUB_ERR_NONE; ++} ++ ++void * ++grub_buffer_take_data (grub_buffer_t buf) ++{ ++ void *data = buf->data; ++ ++ buf->data = NULL; ++ buf->sz = buf->pos = buf->used = 0; ++ ++ return data; ++} ++ ++void ++grub_buffer_reset (grub_buffer_t buf) ++{ ++ buf->pos = buf->used = 0; ++} ++ ++grub_err_t ++grub_buffer_advance_read_pos (grub_buffer_t buf, grub_size_t n) ++{ ++ grub_size_t newpos; ++ ++ if (grub_add (buf->pos, n, &newpos)) ++ return grub_error (GRUB_ERR_OUT_OF_RANGE, N_("overflow is detected")); ++ ++ if (newpos > buf->used) ++ return grub_error (GRUB_ERR_OUT_OF_RANGE, ++ N_("new read is position beyond the end of the written data")); ++ ++ buf->pos = newpos; ++ ++ return GRUB_ERR_NONE; ++} +diff --git a/include/grub/buffer.h b/include/grub/buffer.h +new file mode 100644 +index 0000000..f4b10cf +--- /dev/null ++++ b/include/grub/buffer.h +@@ -0,0 +1,144 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2021 Free Software Foundation, Inc. ++ * ++ * GRUB 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 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB 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 GRUB. If not, see . ++ */ ++ ++#ifndef GRUB_BUFFER_H ++#define GRUB_BUFFER_H 1 ++ ++#include ++#include ++#include ++#include ++#include ++ ++struct grub_buffer ++{ ++ grub_uint8_t *data; ++ grub_size_t sz; ++ grub_size_t pos; ++ grub_size_t used; ++}; ++ ++/* ++ * grub_buffer_t represents a simple variable sized byte buffer with ++ * read and write cursors. It currently only implements ++ * functionality required by the only user in GRUB (append byte[s], ++ * peeking data at a specified position and updating the read cursor. ++ * Some things that this doesn't do yet are: ++ * - Reading a portion of the buffer by copying data from the current ++ * read position in to a caller supplied destination buffer and then ++ * automatically updating the read cursor. ++ * - Dropping the read part at the start of the buffer when an append ++ * requires more space. ++ */ ++typedef struct grub_buffer *grub_buffer_t; ++ ++/* Allocate a new buffer with the specified initial size. */ ++extern grub_buffer_t grub_buffer_new (grub_size_t sz); ++ ++/* Free the buffer and its resources. */ ++extern void grub_buffer_free (grub_buffer_t buf); ++ ++/* Return the number of unread bytes in this buffer. */ ++static inline grub_size_t ++grub_buffer_get_unread_bytes (grub_buffer_t buf) ++{ ++ return buf->used - buf->pos; ++} ++ ++/* ++ * Ensure that the buffer size is at least the requested ++ * number of bytes. ++ */ ++extern grub_err_t grub_buffer_ensure_space (grub_buffer_t buf, grub_size_t req); ++ ++/* ++ * Append the specified number of bytes from the supplied ++ * data to the buffer. ++ */ ++static inline grub_err_t ++grub_buffer_append_data (grub_buffer_t buf, const void *data, grub_size_t len) ++{ ++ grub_size_t req; ++ ++ if (grub_add (buf->used, len, &req)) ++ return grub_error (GRUB_ERR_OUT_OF_RANGE, N_("overflow is detected")); ++ ++ if (grub_buffer_ensure_space (buf, req) != GRUB_ERR_NONE) ++ return grub_errno; ++ ++ grub_memcpy (&buf->data[buf->used], data, len); ++ buf->used = req; ++ ++ return GRUB_ERR_NONE; ++} ++ ++/* Append the supplied character to the buffer. */ ++static inline grub_err_t ++grub_buffer_append_char (grub_buffer_t buf, char c) ++{ ++ return grub_buffer_append_data (buf, &c, 1); ++} ++ ++/* ++ * Forget and return the underlying data buffer. The caller ++ * becomes the owner of this buffer, and must free it when it ++ * is no longer required. ++ */ ++extern void *grub_buffer_take_data (grub_buffer_t buf); ++ ++/* Reset this buffer. Note that this does not deallocate any resources. */ ++void grub_buffer_reset (grub_buffer_t buf); ++ ++/* ++ * Return a pointer to the underlying data buffer at the specified ++ * offset from the current read position. Note that this pointer may ++ * become invalid if the buffer is mutated further. ++ */ ++static inline void * ++grub_buffer_peek_data_at (grub_buffer_t buf, grub_size_t off) ++{ ++ if (grub_add (buf->pos, off, &off)) ++ { ++ grub_error (GRUB_ERR_OUT_OF_RANGE, N_("overflow is detected.")); ++ return NULL; ++ } ++ ++ if (off >= buf->used) ++ { ++ grub_error (GRUB_ERR_OUT_OF_RANGE, N_("peek out of range")); ++ return NULL; ++ } ++ ++ return &buf->data[off]; ++} ++ ++/* ++ * Return a pointer to the underlying data buffer at the current ++ * read position. Note that this pointer may become invalid if the ++ * buffer is mutated further. ++ */ ++static inline void * ++grub_buffer_peek_data (grub_buffer_t buf) ++{ ++ return grub_buffer_peek_data_at (buf, 0); ++} ++ ++/* Advance the read position by the specified number of bytes. */ ++extern grub_err_t grub_buffer_advance_read_pos (grub_buffer_t buf, grub_size_t n); ++ ++#endif /* GRUB_BUFFER_H */ +diff --git a/po/POTFILES.in b/po/POTFILES.in +index 5e26845..7753ab4 100644 +--- a/po/POTFILES.in ++++ b/po/POTFILES.in +@@ -250,6 +250,7 @@ + ./grub-core/kern/arm64/dl.c + ./grub-core/kern/arm64/dl_helper.c + ./grub-core/kern/arm64/efi/init.c ++./grub-core/kern/buffer.c + ./grub-core/kern/command.c + ./grub-core/kern/compiler-rt.c + ./grub-core/kern/coreboot/cbtable.c +@@ -1021,6 +1022,7 @@ + ./include/grub/boottime.h + ./include/grub/bsdlabel.h + ./include/grub/btrfs.h ++./include/grub/buffer.h + ./include/grub/bufio.h + ./include/grub/cache.h + ./include/grub/cbfs_core.h +-- +2.14.2 + diff --git a/boot/grub2/0132-kern-parser-Fix-a-stack-buffer-overflow.patch b/boot/grub2/0132-kern-parser-Fix-a-stack-buffer-overflow.patch new file mode 100644 index 00000000..b017c1e5 --- /dev/null +++ b/boot/grub2/0132-kern-parser-Fix-a-stack-buffer-overflow.patch @@ -0,0 +1,248 @@ +From 4ea7bae51f97e49c84dc67ea30b466ca8633b9f6 Mon Sep 17 00:00:00 2001 +From: Chris Coulson +Date: Thu, 7 Jan 2021 19:21:03 +0000 +Subject: [PATCH] kern/parser: Fix a stack buffer overflow + +grub_parser_split_cmdline() expands variable names present in the supplied +command line in to their corresponding variable contents and uses a 1 kiB +stack buffer for temporary storage without sufficient bounds checking. If +the function is called with a command line that references a variable with +a sufficiently large payload, it is possible to overflow the stack +buffer via tab completion, corrupt the stack frame and potentially +control execution. + +Fixes: CVE-2020-27749 + +Reported-by: Chris Coulson +Signed-off-by: Chris Coulson +Signed-off-by: Darren Kenny +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/kern/parser.c | 110 +++++++++++++++++++++++++++++------------------- + 1 file changed, 67 insertions(+), 43 deletions(-) + +diff --git a/grub-core/kern/parser.c b/grub-core/kern/parser.c +index e010eaa..6ab7aa4 100644 +--- a/grub-core/kern/parser.c ++++ b/grub-core/kern/parser.c +@@ -18,6 +18,7 @@ + */ + + #include ++#include + #include + #include + #include +@@ -107,8 +108,8 @@ check_varstate (grub_parser_state_t s) + } + + +-static void +-add_var (char *varname, char **bp, char **vp, ++static grub_err_t ++add_var (grub_buffer_t varname, grub_buffer_t buf, + grub_parser_state_t state, grub_parser_state_t newstate) + { + const char *val; +@@ -116,31 +117,41 @@ add_var (char *varname, char **bp, char **vp, + /* Check if a variable was being read in and the end of the name + was reached. */ + if (!(check_varstate (state) && !check_varstate (newstate))) +- return; ++ return GRUB_ERR_NONE; ++ ++ if (grub_buffer_append_char (varname, '\0') != GRUB_ERR_NONE) ++ return grub_errno; + +- *((*vp)++) = '\0'; +- val = grub_env_get (varname); +- *vp = varname; ++ val = grub_env_get ((const char *) grub_buffer_peek_data (varname)); ++ grub_buffer_reset (varname); + if (!val) +- return; ++ return GRUB_ERR_NONE; + + /* Insert the contents of the variable in the buffer. */ +- for (; *val; val++) +- *((*bp)++) = *val; ++ return grub_buffer_append_data (buf, val, grub_strlen (val)); + } + +-static void +-terminate_arg (char *buffer, char **bp, int *argc) ++static grub_err_t ++terminate_arg (grub_buffer_t buffer, int *argc) + { +- if (*bp != buffer && *((*bp) - 1) != '\0') +- { +- *((*bp)++) = '\0'; +- (*argc)++; +- } ++ grub_size_t unread = grub_buffer_get_unread_bytes (buffer); ++ ++ if (unread == 0) ++ return GRUB_ERR_NONE; ++ ++ if (*(const char *) grub_buffer_peek_data_at (buffer, unread - 1) == '\0') ++ return GRUB_ERR_NONE; ++ ++ if (grub_buffer_append_char (buffer, '\0') != GRUB_ERR_NONE) ++ return grub_errno; ++ ++ (*argc)++; ++ ++ return GRUB_ERR_NONE; + } + + static grub_err_t +-process_char (char c, char *buffer, char **bp, char *varname, char **vp, ++process_char (char c, grub_buffer_t buffer, grub_buffer_t varname, + grub_parser_state_t state, int *argc, + grub_parser_state_t *newstate) + { +@@ -153,12 +164,13 @@ process_char (char c, char *buffer, char **bp, char *varname, char **vp, + * not describe the variable anymore, write the variable to + * the buffer. + */ +- add_var (varname, bp, vp, state, *newstate); ++ if (add_var (varname, buffer, state, *newstate) != GRUB_ERR_NONE) ++ return grub_errno; + + if (check_varstate (*newstate)) + { + if (use) +- *((*vp)++) = use; ++ return grub_buffer_append_char (varname, use); + } + else if (*newstate == GRUB_PARSER_STATE_TEXT && + state != GRUB_PARSER_STATE_ESC && grub_isspace (use)) +@@ -167,10 +179,10 @@ process_char (char c, char *buffer, char **bp, char *varname, char **vp, + * Don't add more than one argument if multiple + * spaces are used. + */ +- terminate_arg (buffer, bp, argc); ++ return terminate_arg (buffer, argc); + } + else if (use) +- *((*bp)++) = use; ++ return grub_buffer_append_char (buffer, use); + + return GRUB_ERR_NONE; + } +@@ -181,19 +193,22 @@ grub_parser_split_cmdline (const char *cmdline, + int *argc, char ***argv) + { + grub_parser_state_t state = GRUB_PARSER_STATE_TEXT; +- /* XXX: Fixed size buffer, perhaps this buffer should be dynamically +- allocated. */ +- char buffer[1024]; +- char *bp = buffer; ++ grub_buffer_t buffer, varname; + char *rd = (char *) cmdline; + char *rp = rd; +- char varname[200]; +- char *vp = varname; +- char *args; + int i; + + *argc = 0; + *argv = NULL; ++ ++ buffer = grub_buffer_new (1024); ++ if (buffer == NULL) ++ return grub_errno; ++ ++ varname = grub_buffer_new (200); ++ if (varname == NULL) ++ goto fail; ++ + do + { + if (rp == NULL || *rp == '\0') +@@ -219,7 +234,7 @@ grub_parser_split_cmdline (const char *cmdline, + { + grub_parser_state_t newstate; + +- if (process_char (*rp, buffer, &bp, varname, &vp, state, argc, ++ if (process_char (*rp, buffer, varname, state, argc, + &newstate) != GRUB_ERR_NONE) + goto fail; + +@@ -230,10 +245,12 @@ grub_parser_split_cmdline (const char *cmdline, + + /* A special case for when the last character was part of a + variable. */ +- add_var (varname, &bp, &vp, state, GRUB_PARSER_STATE_TEXT); ++ if (add_var (varname, buffer, state, GRUB_PARSER_STATE_TEXT) != GRUB_ERR_NONE) ++ goto fail; + + /* Ensure that the last argument is terminated. */ +- terminate_arg (buffer, &bp, argc); ++ if (terminate_arg (buffer, argc) != GRUB_ERR_NONE) ++ goto fail; + + /* If there are no args, then we're done. */ + if (!*argc) +@@ -242,38 +259,45 @@ grub_parser_split_cmdline (const char *cmdline, + goto out; + } + +- /* Reserve memory for the return values. */ +- args = grub_malloc (bp - buffer); +- if (!args) +- goto fail; +- grub_memcpy (args, buffer, bp - buffer); +- + *argv = grub_calloc (*argc + 1, sizeof (char *)); + if (!*argv) + goto fail; + + /* The arguments are separated with 0's, setup argv so it points to + the right values. */ +- bp = args; + for (i = 0; i < *argc; i++) + { +- (*argv)[i] = bp; +- while (*bp) +- bp++; +- bp++; ++ char *arg; ++ ++ if (i > 0) ++ { ++ if (grub_buffer_advance_read_pos (buffer, 1) != GRUB_ERR_NONE) ++ goto fail; ++ } ++ ++ arg = (char *) grub_buffer_peek_data (buffer); ++ if (arg == NULL || ++ grub_buffer_advance_read_pos (buffer, grub_strlen (arg)) != GRUB_ERR_NONE) ++ goto fail; ++ ++ (*argv)[i] = arg; + } + ++ /* Keep memory for the return values. */ ++ grub_buffer_take_data (buffer); ++ + grub_errno = GRUB_ERR_NONE; + + out: + if (rd != cmdline) + grub_free (rd); ++ grub_buffer_free (buffer); ++ grub_buffer_free (varname); + + return grub_errno; + + fail: + grub_free (*argv); +- grub_free (args); + goto out; + } + +-- +2.14.2 + diff --git a/boot/grub2/0133-kern-efi-Add-initial-stack-protector-implementation.patch b/boot/grub2/0133-kern-efi-Add-initial-stack-protector-implementation.patch new file mode 100644 index 00000000..c0b6bf6a --- /dev/null +++ b/boot/grub2/0133-kern-efi-Add-initial-stack-protector-implementation.patch @@ -0,0 +1,466 @@ +From 133d73079c5771bbf3d8311281b6772846357ec1 Mon Sep 17 00:00:00 2001 +From: Chris Coulson +Date: Tue, 1 Dec 2020 23:03:39 +0000 +Subject: [PATCH] kern/efi: Add initial stack protector implementation + +It works only on UEFI platforms but can be quite easily extended to +others architectures and platforms if needed. + +Signed-off-by: Chris Coulson +Signed-off-by: Daniel Kiper +Reviewed-by: Marco A Benatto +Reviewed-by: Javier Martinez Canillas +Signed-off-by: Stefan Sørensen +--- + acinclude.m4 | 38 ++++++++++++++++- + configure | 97 +++++++++++++++++++++++++++++++++++++++--- + configure.ac | 44 ++++++++++++++++--- + grub-core/Makefile.am | 1 + + grub-core/Makefile.in | 1 + + grub-core/kern/efi/init.c | 54 +++++++++++++++++++++++ + include/grub/efi/api.h | 19 +++++++++ + include/grub/stack_protector.h | 30 +++++++++++++ + po/POTFILES.in | 1 + + 9 files changed, 272 insertions(+), 13 deletions(-) + create mode 100644 include/grub/stack_protector.h + +diff --git a/acinclude.m4 b/acinclude.m4 +index 78cdf6e..6e14bb5 100644 +--- a/acinclude.m4 ++++ b/acinclude.m4 +@@ -305,9 +305,9 @@ fi + ]) + + +-dnl Check if the C compiler supports `-fstack-protector'. ++dnl Check if the C compiler supports the stack protector + AC_DEFUN([grub_CHECK_STACK_PROTECTOR],[ +-[# Smashing stack protector. ++[# Stack smashing protector. + ssp_possible=yes] + AC_MSG_CHECKING([whether `$CC' accepts `-fstack-protector']) + # Is this a reliable test case? +@@ -324,6 +324,40 @@ else + ssp_possible=no] + AC_MSG_RESULT([no]) + [fi] ++[# Strong stack smashing protector. ++ssp_strong_possible=yes] ++AC_MSG_CHECKING([whether `$CC' accepts `-fstack-protector-strong']) ++# Is this a reliable test case? ++AC_LANG_CONFTEST([AC_LANG_SOURCE([[ ++void foo (void) { volatile char a[8]; a[3]; } ++]])]) ++[# `$CC -c -o ...' might not be portable. But, oh, well... Is calling ++# `ac_compile' like this correct, after all? ++if eval "$ac_compile -S -fstack-protector-strong -o conftest.s" 2> /dev/null; then] ++ AC_MSG_RESULT([yes]) ++ [# Should we clear up other files as well, having called `AC_LANG_CONFTEST'? ++ rm -f conftest.s ++else ++ ssp_strong_possible=no] ++ AC_MSG_RESULT([no]) ++[fi] ++[# Global stack smashing protector. ++ssp_global_possible=yes] ++AC_MSG_CHECKING([whether `$CC' accepts `-mstack-protector-guard=global']) ++# Is this a reliable test case? ++AC_LANG_CONFTEST([AC_LANG_SOURCE([[ ++void foo (void) { volatile char a[8]; a[3]; } ++]])]) ++[# `$CC -c -o ...' might not be portable. But, oh, well... Is calling ++# `ac_compile' like this correct, after all? ++if eval "$ac_compile -S -fstack-protector -mstack-protector-guard=global -o conftest.s" 2> /dev/null; then] ++ AC_MSG_RESULT([yes]) ++ [# Should we clear up other files as well, having called `AC_LANG_CONFTEST'? ++ rm -f conftest.s ++else ++ ssp_global_possible=no] ++ AC_MSG_RESULT([no]) ++[fi] + ]) + + dnl Check if the C compiler supports `-mstack-arg-probe' (Cygwin). +diff --git a/configure b/configure +index 9290ae8..973f702 100755 +--- a/configure ++++ b/configure +@@ -1778,6 +1778,7 @@ with_libintl_prefix + with_libpth_prefix + with_included_regex + enable_efiemu ++enable_stack_protector + enable_mm_debug + enable_cache_stats + enable_boot_time +@@ -2459,6 +2460,8 @@ Optional Features: + --disable-rpath do not hardcode runtime library paths + --enable-efiemu build and install the efiemu runtimes + (default=guessed) ++ --enable-stack-protector ++ enable the stack protector + --enable-mm-debug include memory manager debugging + --enable-cache-stats enable disk cache statistics collection + --enable-boot-time enable boot time statistics collection +@@ -32348,9 +32351,9 @@ fi + + CFLAGS="$TARGET_CFLAGS" + +-# Smashing stack protector. ++# Stack smashing protector. + +-# Smashing stack protector. ++# Stack smashing protector. + ssp_possible=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`$CC' accepts \`-fstack-protector'" >&5 + $as_echo_n "checking whether \`$CC' accepts \`-fstack-protector'... " >&6; } +@@ -32373,11 +32376,88 @@ else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "no" >&6; } + fi ++# Strong stack smashing protector. ++ssp_strong_possible=yes ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`$CC' accepts \`-fstack-protector-strong'" >&5 ++$as_echo_n "checking whether \`$CC' accepts \`-fstack-protector-strong'... " >&6; } ++# Is this a reliable test case? ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ + +-# Need that, because some distributions ship compilers that include +-# `-fstack-protector' in the default specs. +-if test "x$ssp_possible" = xyes; then +- TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector" ++void foo (void) { volatile char a[8]; a[3]; } ++ ++_ACEOF ++# `$CC -c -o ...' might not be portable. But, oh, well... Is calling ++# `ac_compile' like this correct, after all? ++if eval "$ac_compile -S -fstack-protector-strong -o conftest.s" 2> /dev/null; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 ++$as_echo "yes" >&6; } ++ # Should we clear up other files as well, having called `AC_LANG_CONFTEST'? ++ rm -f conftest.s ++else ++ ssp_strong_possible=no ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++# Global stack smashing protector. ++ssp_global_possible=yes ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`$CC' accepts \`-mstack-protector-guard=global'" >&5 ++$as_echo_n "checking whether \`$CC' accepts \`-mstack-protector-guard=global'... " >&6; } ++# Is this a reliable test case? ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++void foo (void) { volatile char a[8]; a[3]; } ++ ++_ACEOF ++# `$CC -c -o ...' might not be portable. But, oh, well... Is calling ++# `ac_compile' like this correct, after all? ++if eval "$ac_compile -S -fstack-protector -mstack-protector-guard=global -o conftest.s" 2> /dev/null; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 ++$as_echo "yes" >&6; } ++ # Should we clear up other files as well, having called `AC_LANG_CONFTEST'? ++ rm -f conftest.s ++else ++ ssp_global_possible=no ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++# Check whether --enable-stack-protector was given. ++if test "${enable_stack_protector+set}" = set; then : ++ enableval=$enable_stack_protector; ++else ++ enable_stack_protector=no ++fi ++ ++if test "x$enable_stack_protector" = xno; then ++ if test "x$ssp_possible" = xyes; then ++ # Need that, because some distributions ship compilers that include ++ # `-fstack-protector' in the default specs. ++ TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector" ++ fi ++elif test "x$platform" != xefi; then ++ as_fn_error $? "--enable-stack-protector is only supported on EFI platforms" "$LINENO" 5 ++elif test "x$ssp_global_possible" != xyes; then ++ as_fn_error $? "--enable-stack-protector is not supported (compiler doesn't support -mstack-protector-guard=global)" "$LINENO" 5 ++else ++ TARGET_CFLAGS="$TARGET_CFLAGS -mstack-protector-guard=global" ++ if test "x$enable_stack_protector" = xyes; then ++ if test "x$ssp_possible" != xyes; then ++ as_fn_error $? "--enable-stack-protector is not supported (compiler doesn't support -fstack-protector)" "$LINENO" 5 ++ fi ++ TARGET_CFLAGS="$TARGET_CFLAGS -fstack-protector" ++ elif test "x$enable_stack_protector" = xstrong; then ++ if test "x$ssp_strong_possible" != xyes; then ++ as_fn_error $? "--enable-stack-protector=strong is not supported (compiler doesn't support -fstack-protector-strong)" "$LINENO" 5 ++ fi ++ TARGET_CFLAGS="$TARGET_CFLAGS -fstack-protector-strong" ++ else ++ # Note, -fstack-protector-all requires that the protector is disabled for ++ # functions that appear in the call stack when the canary is initialized. ++ as_fn_error $? "invalid value $enable_stack_protector for --enable-stack-protector" "$LINENO" 5 ++ fi ++ TARGET_CPPFLAGS="$TARGET_CPPFLAGS -DGRUB_STACK_PROTECTOR=1" + fi + + CFLAGS="$TARGET_CFLAGS" +@@ -37054,5 +37134,10 @@ echo "Without liblzma (no support for XZ-compressed mips images) ($liblzma_excus + else + echo "With liblzma from $LIBLZMA (support for XZ-compressed mips images)" + fi ++if test "x$enable_stack_protector" != xno; then ++echo "With stack smashing protector: Yes" ++else ++echo "With stack smashing protector: No" ++fi + echo "*******************************************************" + +diff --git a/configure.ac b/configure.ac +index 7656f24..bb6b02a 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1285,12 +1285,41 @@ fi] + + CFLAGS="$TARGET_CFLAGS" + +-# Smashing stack protector. ++# Stack smashing protector. + grub_CHECK_STACK_PROTECTOR +-# Need that, because some distributions ship compilers that include +-# `-fstack-protector' in the default specs. +-if test "x$ssp_possible" = xyes; then +- TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector" ++AC_ARG_ENABLE([stack-protector], ++ AS_HELP_STRING([--enable-stack-protector], ++ [enable the stack protector]), ++ [], ++ [enable_stack_protector=no]) ++if test "x$enable_stack_protector" = xno; then ++ if test "x$ssp_possible" = xyes; then ++ # Need that, because some distributions ship compilers that include ++ # `-fstack-protector' in the default specs. ++ TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector" ++ fi ++elif test "x$platform" != xefi; then ++ AC_MSG_ERROR([--enable-stack-protector is only supported on EFI platforms]) ++elif test "x$ssp_global_possible" != xyes; then ++ AC_MSG_ERROR([--enable-stack-protector is not supported (compiler doesn't support -mstack-protector-guard=global)]) ++else ++ TARGET_CFLAGS="$TARGET_CFLAGS -mstack-protector-guard=global" ++ if test "x$enable_stack_protector" = xyes; then ++ if test "x$ssp_possible" != xyes; then ++ AC_MSG_ERROR([--enable-stack-protector is not supported (compiler doesn't support -fstack-protector)]) ++ fi ++ TARGET_CFLAGS="$TARGET_CFLAGS -fstack-protector" ++ elif test "x$enable_stack_protector" = xstrong; then ++ if test "x$ssp_strong_possible" != xyes; then ++ AC_MSG_ERROR([--enable-stack-protector=strong is not supported (compiler doesn't support -fstack-protector-strong)]) ++ fi ++ TARGET_CFLAGS="$TARGET_CFLAGS -fstack-protector-strong" ++ else ++ # Note, -fstack-protector-all requires that the protector is disabled for ++ # functions that appear in the call stack when the canary is initialized. ++ AC_MSG_ERROR([invalid value $enable_stack_protector for --enable-stack-protector]) ++ fi ++ TARGET_CPPFLAGS="$TARGET_CPPFLAGS -DGRUB_STACK_PROTECTOR=1" + fi + + CFLAGS="$TARGET_CFLAGS" +@@ -2103,5 +2132,10 @@ echo "Without liblzma (no support for XZ-compressed mips images) ($liblzma_excus + else + echo "With liblzma from $LIBLZMA (support for XZ-compressed mips images)" + fi ++if test "x$enable_stack_protector" != xno; then ++echo "With stack smashing protector: Yes" ++else ++echo "With stack smashing protector: No" ++fi + echo "*******************************************************" + ] +diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am +index 30e23ad..ee88e44 100644 +--- a/grub-core/Makefile.am ++++ b/grub-core/Makefile.am +@@ -90,6 +90,7 @@ endif + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/parser.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/partition.h ++KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/stack_protector.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/term.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/time.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/verify.h +diff --git a/grub-core/Makefile.in b/grub-core/Makefile.in +index 1f8133b..50c70b5 100644 +--- a/grub-core/Makefile.in ++++ b/grub-core/Makefile.in +@@ -16425,6 +16425,7 @@ KERNEL_HEADER_FILES = $(top_srcdir)/include/grub/cache.h \ + $(am__append_5795) $(top_srcdir)/include/grub/mm.h \ + $(top_srcdir)/include/grub/parser.h \ + $(top_srcdir)/include/grub/partition.h \ ++ $(top_srcdir)/include/grub/stack_protector.h \ + $(top_srcdir)/include/grub/term.h \ + $(top_srcdir)/include/grub/time.h \ + $(top_srcdir)/include/grub/verify.h \ +diff --git a/grub-core/kern/efi/init.c b/grub-core/kern/efi/init.c +index 1333465..7facacf 100644 +--- a/grub-core/kern/efi/init.c ++++ b/grub-core/kern/efi/init.c +@@ -27,6 +27,58 @@ + #include + #include + #include ++#include ++ ++#ifdef GRUB_STACK_PROTECTOR ++ ++static grub_efi_guid_t rng_protocol_guid = GRUB_EFI_RNG_PROTOCOL_GUID; ++ ++/* ++ * Don't put this on grub_efi_init()'s local stack to avoid it ++ * getting a stack check. ++ */ ++static grub_efi_uint8_t stack_chk_guard_buf[32]; ++ ++grub_addr_t __stack_chk_guard; ++ ++void __attribute__ ((noreturn)) ++__stack_chk_fail (void) ++{ ++ /* ++ * Assume it's not safe to call into EFI Boot Services. Sorry, that ++ * means no console message here. ++ */ ++ do ++ { ++ /* Do not optimize out the loop. */ ++ asm volatile (""); ++ } ++ while (1); ++} ++ ++static void ++stack_protector_init (void) ++{ ++ grub_efi_rng_protocol_t *rng; ++ ++ /* Set up the stack canary. Make errors here non-fatal for now. */ ++ rng = grub_efi_locate_protocol (&rng_protocol_guid, NULL); ++ if (rng != NULL) ++ { ++ grub_efi_status_t status; ++ ++ status = efi_call_4 (rng->get_rng, rng, NULL, sizeof (stack_chk_guard_buf), ++ stack_chk_guard_buf); ++ if (status == GRUB_EFI_SUCCESS) ++ grub_memcpy (&__stack_chk_guard, stack_chk_guard_buf, sizeof (__stack_chk_guard)); ++ } ++} ++#else ++static void ++stack_protector_init (void) ++{ ++} ++#endif + + grub_addr_t grub_modbase; + +@@ -38,6 +90,8 @@ grub_efi_init (void) + messages. */ + grub_console_init (); + ++ stack_protector_init (); ++ + /* Initialize the memory management system. */ + grub_efi_mm_init (); + +diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h +index 13e5715..5517f7e 100644 +--- a/include/grub/efi/api.h ++++ b/include/grub/efi/api.h +@@ -339,6 +339,11 @@ + { 0xab, 0xb6, 0x3d, 0xd8, 0x10, 0xdd, 0x8b, 0x23 } \ + } + ++#define GRUB_EFI_RNG_PROTOCOL_GUID \ ++ { 0x3152bca5, 0xeade, 0x433d, \ ++ { 0x86, 0x2e, 0xc0, 0x1c, 0xdc, 0x29, 0x1f, 0x44 } \ ++ } ++ + struct grub_efi_sal_system_table + { + grub_uint32_t signature; +@@ -1700,6 +1705,20 @@ struct grub_efi_shim_lock_protocol + }; + typedef struct grub_efi_shim_lock_protocol grub_efi_shim_lock_protocol_t; + ++typedef grub_efi_guid_t grub_efi_rng_algorithm_t; ++ ++struct grub_efi_rng_protocol ++{ ++ grub_efi_status_t (*get_info) (struct grub_efi_rng_protocol *this, ++ grub_efi_uintn_t *rng_algorithm_list_size, ++ grub_efi_rng_algorithm_t *rng_algorithm_list); ++ grub_efi_status_t (*get_rng) (struct grub_efi_rng_protocol *this, ++ grub_efi_rng_algorithm_t *rng_algorithm, ++ grub_efi_uintn_t rng_value_length, ++ grub_efi_uint8_t *rng_value); ++}; ++typedef struct grub_efi_rng_protocol grub_efi_rng_protocol_t; ++ + #if (GRUB_TARGET_SIZEOF_VOID_P == 4) || defined (__ia64__) \ + || defined (__aarch64__) || defined (__MINGW64__) || defined (__CYGWIN__) \ + || defined(__riscv) +diff --git a/include/grub/stack_protector.h b/include/grub/stack_protector.h +new file mode 100644 +index 0000000..c88dc00 +--- /dev/null ++++ b/include/grub/stack_protector.h +@@ -0,0 +1,30 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2021 Free Software Foundation, Inc. ++ * ++ * GRUB 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 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB 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 GRUB. If not, see . ++ */ ++ ++#ifndef GRUB_STACK_PROTECTOR_H ++#define GRUB_STACK_PROTECTOR_H 1 ++ ++#include ++#include ++ ++#ifdef GRUB_STACK_PROTECTOR ++extern grub_addr_t EXPORT_VAR (__stack_chk_guard); ++extern void __attribute__ ((noreturn)) EXPORT_FUNC (__stack_chk_fail) (void); ++#endif ++ ++#endif /* GRUB_STACK_PROTECTOR_H */ +diff --git a/po/POTFILES.in b/po/POTFILES.in +index 7753ab4..ef42c7d 100644 +--- a/po/POTFILES.in ++++ b/po/POTFILES.in +@@ -1319,6 +1319,7 @@ + ./include/grub/sparc64/time.h + ./include/grub/sparc64/types.h + ./include/grub/speaker.h ++./include/grub/stack_protector.h + ./include/grub/symbol.h + ./include/grub/syslinux_parse.h + ./include/grub/term.h +-- +2.14.2 + diff --git a/boot/grub2/0134-util-mkimage-Remove-unused-code-to-add-BSS-section.patch b/boot/grub2/0134-util-mkimage-Remove-unused-code-to-add-BSS-section.patch new file mode 100644 index 00000000..a3eb78eb --- /dev/null +++ b/boot/grub2/0134-util-mkimage-Remove-unused-code-to-add-BSS-section.patch @@ -0,0 +1,61 @@ +From d52f78def1b9c4f435fdbf6b24fd899208580c76 Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Thu, 11 Feb 2021 17:06:49 +0100 +Subject: [PATCH] util/mkimage: Remove unused code to add BSS section + +The code is compiled out so there is no reason to keep it. + +Additionally, don't set bss_size field since we do not add a BSS section. + +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + util/mkimage.c | 17 ----------------- + 1 file changed, 17 deletions(-) + +diff --git a/util/mkimage.c b/util/mkimage.c +index 37d6249..32bb8ea 100644 +--- a/util/mkimage.c ++++ b/util/mkimage.c +@@ -1304,7 +1304,6 @@ grub_install_generate_image (const char *dir, const char *prefix, + o->code_size = grub_host_to_target32 (layout.exec_size); + o->data_size = grub_cpu_to_le32 (reloc_addr - layout.exec_size + - header_size); +- o->bss_size = grub_cpu_to_le32 (layout.bss_size); + o->entry_addr = grub_cpu_to_le32 (layout.start_address); + o->code_base = grub_cpu_to_le32 (header_size); + +@@ -1342,7 +1341,6 @@ grub_install_generate_image (const char *dir, const char *prefix, + o->code_size = grub_host_to_target32 (layout.exec_size); + o->data_size = grub_cpu_to_le32 (reloc_addr - layout.exec_size + - header_size); +- o->bss_size = grub_cpu_to_le32 (layout.bss_size); + o->entry_addr = grub_cpu_to_le32 (layout.start_address); + o->code_base = grub_cpu_to_le32 (header_size); + o->image_base = 0; +@@ -1387,21 +1385,6 @@ grub_install_generate_image (const char *dir, const char *prefix, + = grub_cpu_to_le32_compile_time (GRUB_PE32_SCN_CNT_INITIALIZED_DATA + | GRUB_PE32_SCN_MEM_READ + | GRUB_PE32_SCN_MEM_WRITE); +- +-#if 0 +- bss_section = data_section + 1; +- strcpy (bss_section->name, ".bss"); +- bss_section->virtual_size = grub_cpu_to_le32 (layout.bss_size); +- bss_section->virtual_address = grub_cpu_to_le32 (header_size + layout.kernel_size); +- bss_section->raw_data_size = 0; +- bss_section->raw_data_offset = 0; +- bss_section->characteristics +- = grub_cpu_to_le32_compile_time (GRUB_PE32_SCN_MEM_READ +- | GRUB_PE32_SCN_MEM_WRITE +- | GRUB_PE32_SCN_ALIGN_64BYTES +- | GRUB_PE32_SCN_CNT_INITIALIZED_DATA +- | 0x80); +-#endif + + mods_section = data_section + 1; + strcpy (mods_section->name, "mods"); +-- +2.14.2 + diff --git a/boot/grub2/0135-util-mkimage-Use-grub_host_to_target32-instead-of-gr.patch b/boot/grub2/0135-util-mkimage-Use-grub_host_to_target32-instead-of-gr.patch new file mode 100644 index 00000000..778065ce --- /dev/null +++ b/boot/grub2/0135-util-mkimage-Use-grub_host_to_target32-instead-of-gr.patch @@ -0,0 +1,113 @@ +From 1710452aca05ccdd21e74390ec08c63fdf0ee10a Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 15 Feb 2021 13:59:21 +0100 +Subject: [PATCH] util/mkimage: Use grub_host_to_target32() instead of + grub_cpu_to_le32() + +The latter doesn't take into account the target image endianness. There is +a grub_cpu_to_le32_compile_time() but no compile time variant for function +grub_host_to_target32(). So, let's keep using the other one for this case. + +Signed-off-by: Peter Jones +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + util/mkimage.c | 44 ++++++++++++++++++++++---------------------- + 1 file changed, 22 insertions(+), 22 deletions(-) + +diff --git a/util/mkimage.c b/util/mkimage.c +index 32bb8ea..02944f2 100644 +--- a/util/mkimage.c ++++ b/util/mkimage.c +@@ -1302,10 +1302,10 @@ grub_install_generate_image (const char *dir, const char *prefix, + + sizeof (struct grub_pe32_coff_header)); + o->magic = grub_host_to_target16 (GRUB_PE32_PE32_MAGIC); + o->code_size = grub_host_to_target32 (layout.exec_size); +- o->data_size = grub_cpu_to_le32 (reloc_addr - layout.exec_size ++ o->data_size = grub_host_to_target32 (reloc_addr - layout.exec_size + - header_size); +- o->entry_addr = grub_cpu_to_le32 (layout.start_address); +- o->code_base = grub_cpu_to_le32 (header_size); ++ o->entry_addr = grub_host_to_target32 (layout.start_address); ++ o->code_base = grub_host_to_target32 (header_size); + + o->data_base = grub_host_to_target32 (header_size + layout.exec_size); + +@@ -1339,10 +1339,10 @@ grub_install_generate_image (const char *dir, const char *prefix, + + sizeof (struct grub_pe32_coff_header)); + o->magic = grub_host_to_target16 (GRUB_PE32_PE64_MAGIC); + o->code_size = grub_host_to_target32 (layout.exec_size); +- o->data_size = grub_cpu_to_le32 (reloc_addr - layout.exec_size ++ o->data_size = grub_host_to_target32 (reloc_addr - layout.exec_size + - header_size); +- o->entry_addr = grub_cpu_to_le32 (layout.start_address); +- o->code_base = grub_cpu_to_le32 (header_size); ++ o->entry_addr = grub_host_to_target32 (layout.start_address); ++ o->code_base = grub_host_to_target32 (header_size); + o->image_base = 0; + o->section_alignment = grub_host_to_target32 (image_target->section_align); + o->file_alignment = grub_host_to_target32 (GRUB_PE32_FILE_ALIGNMENT); +@@ -1366,10 +1366,10 @@ grub_install_generate_image (const char *dir, const char *prefix, + /* The sections. */ + text_section = sections; + strcpy (text_section->name, ".text"); +- text_section->virtual_size = grub_cpu_to_le32 (layout.exec_size); +- text_section->virtual_address = grub_cpu_to_le32 (header_size); +- text_section->raw_data_size = grub_cpu_to_le32 (layout.exec_size); +- text_section->raw_data_offset = grub_cpu_to_le32 (header_size); ++ text_section->virtual_size = grub_host_to_target32 (layout.exec_size); ++ text_section->virtual_address = grub_host_to_target32 (header_size); ++ text_section->raw_data_size = grub_host_to_target32 (layout.exec_size); ++ text_section->raw_data_offset = grub_host_to_target32 (header_size); + text_section->characteristics = grub_cpu_to_le32_compile_time ( + GRUB_PE32_SCN_CNT_CODE + | GRUB_PE32_SCN_MEM_EXECUTE +@@ -1377,10 +1377,10 @@ grub_install_generate_image (const char *dir, const char *prefix, + + data_section = text_section + 1; + strcpy (data_section->name, ".data"); +- data_section->virtual_size = grub_cpu_to_le32 (layout.kernel_size - layout.exec_size); +- data_section->virtual_address = grub_cpu_to_le32 (header_size + layout.exec_size); +- data_section->raw_data_size = grub_cpu_to_le32 (layout.kernel_size - layout.exec_size); +- data_section->raw_data_offset = grub_cpu_to_le32 (header_size + layout.exec_size); ++ data_section->virtual_size = grub_host_to_target32 (layout.kernel_size - layout.exec_size); ++ data_section->virtual_address = grub_host_to_target32 (header_size + layout.exec_size); ++ data_section->raw_data_size = grub_host_to_target32 (layout.kernel_size - layout.exec_size); ++ data_section->raw_data_offset = grub_host_to_target32 (header_size + layout.exec_size); + data_section->characteristics + = grub_cpu_to_le32_compile_time (GRUB_PE32_SCN_CNT_INITIALIZED_DATA + | GRUB_PE32_SCN_MEM_READ +@@ -1388,10 +1388,10 @@ grub_install_generate_image (const char *dir, const char *prefix, + + mods_section = data_section + 1; + strcpy (mods_section->name, "mods"); +- mods_section->virtual_size = grub_cpu_to_le32 (reloc_addr - layout.kernel_size - header_size); +- mods_section->virtual_address = grub_cpu_to_le32 (header_size + layout.kernel_size + layout.bss_size); +- mods_section->raw_data_size = grub_cpu_to_le32 (reloc_addr - layout.kernel_size - header_size); +- mods_section->raw_data_offset = grub_cpu_to_le32 (header_size + layout.kernel_size); ++ mods_section->virtual_size = grub_host_to_target32 (reloc_addr - layout.kernel_size - header_size); ++ mods_section->virtual_address = grub_host_to_target32 (header_size + layout.kernel_size + layout.bss_size); ++ mods_section->raw_data_size = grub_host_to_target32 (reloc_addr - layout.kernel_size - header_size); ++ mods_section->raw_data_offset = grub_host_to_target32 (header_size + layout.kernel_size); + mods_section->characteristics + = grub_cpu_to_le32_compile_time (GRUB_PE32_SCN_CNT_INITIALIZED_DATA + | GRUB_PE32_SCN_MEM_READ +@@ -1399,10 +1399,10 @@ grub_install_generate_image (const char *dir, const char *prefix, + + reloc_section = mods_section + 1; + strcpy (reloc_section->name, ".reloc"); +- reloc_section->virtual_size = grub_cpu_to_le32 (layout.reloc_size); +- reloc_section->virtual_address = grub_cpu_to_le32 (reloc_addr + layout.bss_size); +- reloc_section->raw_data_size = grub_cpu_to_le32 (layout.reloc_size); +- reloc_section->raw_data_offset = grub_cpu_to_le32 (reloc_addr); ++ reloc_section->virtual_size = grub_host_to_target32 (layout.reloc_size); ++ reloc_section->virtual_address = grub_host_to_target32 (reloc_addr + layout.bss_size); ++ reloc_section->raw_data_size = grub_host_to_target32 (layout.reloc_size); ++ reloc_section->raw_data_offset = grub_host_to_target32 (reloc_addr); + reloc_section->characteristics + = grub_cpu_to_le32_compile_time (GRUB_PE32_SCN_CNT_INITIALIZED_DATA + | GRUB_PE32_SCN_MEM_DISCARDABLE +-- +2.14.2 + diff --git a/boot/grub2/0136-util-mkimage-Always-use-grub_host_to_target32-to-ini.patch b/boot/grub2/0136-util-mkimage-Always-use-grub_host_to_target32-to-ini.patch new file mode 100644 index 00000000..81d7d01f --- /dev/null +++ b/boot/grub2/0136-util-mkimage-Always-use-grub_host_to_target32-to-ini.patch @@ -0,0 +1,39 @@ +From ae8936f9c375e1a38129e85a1b5d573fb451f288 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 15 Feb 2021 14:14:24 +0100 +Subject: [PATCH] util/mkimage: Always use grub_host_to_target32() to + initialize PE stack and heap stuff + +This change does not impact final result of initialization itself. +However, it eases PE code unification in subsequent patches. + +Signed-off-by: Peter Jones +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + util/mkimage.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/util/mkimage.c b/util/mkimage.c +index 02944f2..b94bfb7 100644 +--- a/util/mkimage.c ++++ b/util/mkimage.c +@@ -1351,10 +1351,10 @@ grub_install_generate_image (const char *dir, const char *prefix, + o->subsystem = grub_host_to_target16 (GRUB_PE32_SUBSYSTEM_EFI_APPLICATION); + + /* Do these really matter? */ +- o->stack_reserve_size = grub_host_to_target64 (0x10000); +- o->stack_commit_size = grub_host_to_target64 (0x10000); +- o->heap_reserve_size = grub_host_to_target64 (0x10000); +- o->heap_commit_size = grub_host_to_target64 (0x10000); ++ o->stack_reserve_size = grub_host_to_target32 (0x10000); ++ o->stack_commit_size = grub_host_to_target32 (0x10000); ++ o->heap_reserve_size = grub_host_to_target32 (0x10000); ++ o->heap_commit_size = grub_host_to_target32 (0x10000); + + o->num_data_directories + = grub_host_to_target32 (GRUB_PE32_NUM_DATA_DIRECTORIES); +-- +2.14.2 + diff --git a/boot/grub2/0137-util-mkimage-Unify-more-of-the-PE32-and-PE32-header-.patch b/boot/grub2/0137-util-mkimage-Unify-more-of-the-PE32-and-PE32-header-.patch new file mode 100644 index 00000000..1f8cb8e2 --- /dev/null +++ b/boot/grub2/0137-util-mkimage-Unify-more-of-the-PE32-and-PE32-header-.patch @@ -0,0 +1,169 @@ +From a4e8936f010a8e928e973b80390c8f83ad6b8000 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 15 Feb 2021 14:19:31 +0100 +Subject: [PATCH] util/mkimage: Unify more of the PE32 and PE32+ header set-up + +There's quite a bit of code duplication in the code that sets the optional +header for PE32 and PE32+. The two are very similar with the exception of +a few fields that have type grub_uint64_t instead of grub_uint32_t. + +Factor out the common code and add a PE_OHDR() macro that simplifies the +set-up and make the code more readable. + +Signed-off-by: Peter Jones +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + util/mkimage.c | 111 ++++++++++++++++++++++++++------------------------------- + 1 file changed, 51 insertions(+), 60 deletions(-) + +diff --git a/util/mkimage.c b/util/mkimage.c +index b94bfb7..a039039 100644 +--- a/util/mkimage.c ++++ b/util/mkimage.c +@@ -816,6 +816,21 @@ grub_install_get_image_targets_string (void) + return formats; + } + ++/* ++ * tmp_ is just here so the compiler knows we'll never derefernce a NULL. ++ * It should get fully optimized away. ++ */ ++#define PE_OHDR(o32, o64, field) (*( \ ++{ \ ++ __typeof__((o64)->field) tmp_; \ ++ __typeof__((o64)->field) *ret_ = &tmp_; \ ++ if (o32) \ ++ ret_ = (void *)(&((o32)->field)); \ ++ else if (o64) \ ++ ret_ = (void *)(&((o64)->field)); \ ++ ret_; \ ++})) ++ + void + grub_install_generate_image (const char *dir, const char *prefix, + FILE *out, const char *outname, char *mods[], +@@ -1252,6 +1267,8 @@ grub_install_generate_image (const char *dir, const char *prefix, + static const grub_uint8_t stub[] = GRUB_PE32_MSDOS_STUB; + int header_size; + int reloc_addr; ++ struct grub_pe32_optional_header *o32 = NULL; ++ struct grub_pe64_optional_header *o64 = NULL; + + if (image_target->voidp_sizeof == 4) + header_size = EFI32_HEADER_SIZE; +@@ -1293,76 +1310,50 @@ grub_install_generate_image (const char *dir, const char *prefix, + /* The PE Optional header. */ + if (image_target->voidp_sizeof == 4) + { +- struct grub_pe32_optional_header *o; +- + c->optional_header_size = grub_host_to_target16 (sizeof (struct grub_pe32_optional_header)); + +- o = (struct grub_pe32_optional_header *) +- (header + GRUB_PE32_MSDOS_STUB_SIZE + GRUB_PE32_SIGNATURE_SIZE +- + sizeof (struct grub_pe32_coff_header)); +- o->magic = grub_host_to_target16 (GRUB_PE32_PE32_MAGIC); +- o->code_size = grub_host_to_target32 (layout.exec_size); +- o->data_size = grub_host_to_target32 (reloc_addr - layout.exec_size +- - header_size); +- o->entry_addr = grub_host_to_target32 (layout.start_address); +- o->code_base = grub_host_to_target32 (header_size); +- +- o->data_base = grub_host_to_target32 (header_size + layout.exec_size); +- +- o->image_base = 0; +- o->section_alignment = grub_host_to_target32 (image_target->section_align); +- o->file_alignment = grub_host_to_target32 (GRUB_PE32_FILE_ALIGNMENT); +- o->image_size = grub_host_to_target32 (pe_size); +- o->header_size = grub_host_to_target32 (header_size); +- o->subsystem = grub_host_to_target16 (GRUB_PE32_SUBSYSTEM_EFI_APPLICATION); +- +- /* Do these really matter? */ +- o->stack_reserve_size = grub_host_to_target32 (0x10000); +- o->stack_commit_size = grub_host_to_target32 (0x10000); +- o->heap_reserve_size = grub_host_to_target32 (0x10000); +- o->heap_commit_size = grub_host_to_target32 (0x10000); +- +- o->num_data_directories = grub_host_to_target32 (GRUB_PE32_NUM_DATA_DIRECTORIES); ++ o32 = (struct grub_pe32_optional_header *) ++ (header + GRUB_PE32_MSDOS_STUB_SIZE + GRUB_PE32_SIGNATURE_SIZE + ++ sizeof (struct grub_pe32_coff_header)); ++ o32->magic = grub_host_to_target16 (GRUB_PE32_PE32_MAGIC); ++ o32->data_base = grub_host_to_target32 (header_size + layout.exec_size); + +- o->base_relocation_table.rva = grub_host_to_target32 (reloc_addr); +- o->base_relocation_table.size = grub_host_to_target32 (layout.reloc_size); +- sections = o + 1; ++ sections = o32 + 1; + } + else + { +- struct grub_pe64_optional_header *o; +- + c->optional_header_size = grub_host_to_target16 (sizeof (struct grub_pe64_optional_header)); + +- o = (struct grub_pe64_optional_header *) +- (header + GRUB_PE32_MSDOS_STUB_SIZE + GRUB_PE32_SIGNATURE_SIZE +- + sizeof (struct grub_pe32_coff_header)); +- o->magic = grub_host_to_target16 (GRUB_PE32_PE64_MAGIC); +- o->code_size = grub_host_to_target32 (layout.exec_size); +- o->data_size = grub_host_to_target32 (reloc_addr - layout.exec_size +- - header_size); +- o->entry_addr = grub_host_to_target32 (layout.start_address); +- o->code_base = grub_host_to_target32 (header_size); +- o->image_base = 0; +- o->section_alignment = grub_host_to_target32 (image_target->section_align); +- o->file_alignment = grub_host_to_target32 (GRUB_PE32_FILE_ALIGNMENT); +- o->image_size = grub_host_to_target32 (pe_size); +- o->header_size = grub_host_to_target32 (header_size); +- o->subsystem = grub_host_to_target16 (GRUB_PE32_SUBSYSTEM_EFI_APPLICATION); +- +- /* Do these really matter? */ +- o->stack_reserve_size = grub_host_to_target32 (0x10000); +- o->stack_commit_size = grub_host_to_target32 (0x10000); +- o->heap_reserve_size = grub_host_to_target32 (0x10000); +- o->heap_commit_size = grub_host_to_target32 (0x10000); +- +- o->num_data_directories +- = grub_host_to_target32 (GRUB_PE32_NUM_DATA_DIRECTORIES); ++ o64 = (struct grub_pe64_optional_header *) ++ (header + GRUB_PE32_MSDOS_STUB_SIZE + GRUB_PE32_SIGNATURE_SIZE + ++ sizeof (struct grub_pe32_coff_header)); ++ o64->magic = grub_host_to_target16 (GRUB_PE32_PE64_MAGIC); + +- o->base_relocation_table.rva = grub_host_to_target32 (reloc_addr); +- o->base_relocation_table.size = grub_host_to_target32 (layout.reloc_size); +- sections = o + 1; ++ sections = o64 + 1; + } ++ ++ PE_OHDR (o32, o64, code_size) = grub_host_to_target32 (layout.exec_size); ++ PE_OHDR (o32, o64, data_size) = grub_host_to_target32 (reloc_addr - layout.exec_size - header_size); ++ PE_OHDR (o32, o64, entry_addr) = grub_host_to_target32 (layout.start_address); ++ PE_OHDR (o32, o64, code_base) = grub_host_to_target32 (header_size); ++ ++ PE_OHDR (o32, o64, image_base) = 0; ++ PE_OHDR (o32, o64, section_alignment) = grub_host_to_target32 (image_target->section_align); ++ PE_OHDR (o32, o64, file_alignment) = grub_host_to_target32 (GRUB_PE32_FILE_ALIGNMENT); ++ PE_OHDR (o32, o64, image_size) = grub_host_to_target32 (pe_size); ++ PE_OHDR (o32, o64, header_size) = grub_host_to_target32 (header_size); ++ PE_OHDR (o32, o64, subsystem) = grub_host_to_target16 (GRUB_PE32_SUBSYSTEM_EFI_APPLICATION); ++ ++ /* Do these really matter? */ ++ PE_OHDR (o32, o64, stack_reserve_size) = grub_host_to_target32 (0x10000); ++ PE_OHDR (o32, o64, stack_commit_size) = grub_host_to_target32 (0x10000); ++ PE_OHDR (o32, o64, heap_reserve_size) = grub_host_to_target32 (0x10000); ++ PE_OHDR (o32, o64, heap_commit_size) = grub_host_to_target32 (0x10000); ++ ++ PE_OHDR (o32, o64, num_data_directories) = grub_host_to_target32 (GRUB_PE32_NUM_DATA_DIRECTORIES); ++ PE_OHDR (o32, o64, base_relocation_table.rva) = grub_host_to_target32 (reloc_addr); ++ PE_OHDR (o32, o64, base_relocation_table.size) = grub_host_to_target32 (layout.reloc_size); ++ + /* The sections. */ + text_section = sections; + strcpy (text_section->name, ".text"); +-- +2.14.2 + diff --git a/boot/grub2/0138-util-mkimage-Reorder-PE-optional-header-fields-set-u.patch b/boot/grub2/0138-util-mkimage-Reorder-PE-optional-header-fields-set-u.patch new file mode 100644 index 00000000..cb65f964 --- /dev/null +++ b/boot/grub2/0138-util-mkimage-Reorder-PE-optional-header-fields-set-u.patch @@ -0,0 +1,73 @@ +From ba44c87e56a8bccde235ebb7d41d5aa54604d241 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 15 Feb 2021 14:21:48 +0100 +Subject: [PATCH] util/mkimage: Reorder PE optional header fields set-up + +This makes the PE32 and PE32+ header fields set-up easier to follow by +setting them closer to the initialization of their related sections. + +Signed-off-by: Peter Jones +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + util/mkimage.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/util/mkimage.c b/util/mkimage.c +index a039039..deaef56 100644 +--- a/util/mkimage.c ++++ b/util/mkimage.c +@@ -1332,16 +1332,12 @@ grub_install_generate_image (const char *dir, const char *prefix, + sections = o64 + 1; + } + +- PE_OHDR (o32, o64, code_size) = grub_host_to_target32 (layout.exec_size); +- PE_OHDR (o32, o64, data_size) = grub_host_to_target32 (reloc_addr - layout.exec_size - header_size); ++ PE_OHDR (o32, o64, header_size) = grub_host_to_target32 (header_size); + PE_OHDR (o32, o64, entry_addr) = grub_host_to_target32 (layout.start_address); +- PE_OHDR (o32, o64, code_base) = grub_host_to_target32 (header_size); +- + PE_OHDR (o32, o64, image_base) = 0; ++ PE_OHDR (o32, o64, image_size) = grub_host_to_target32 (pe_size); + PE_OHDR (o32, o64, section_alignment) = grub_host_to_target32 (image_target->section_align); + PE_OHDR (o32, o64, file_alignment) = grub_host_to_target32 (GRUB_PE32_FILE_ALIGNMENT); +- PE_OHDR (o32, o64, image_size) = grub_host_to_target32 (pe_size); +- PE_OHDR (o32, o64, header_size) = grub_host_to_target32 (header_size); + PE_OHDR (o32, o64, subsystem) = grub_host_to_target16 (GRUB_PE32_SUBSYSTEM_EFI_APPLICATION); + + /* Do these really matter? */ +@@ -1351,10 +1347,10 @@ grub_install_generate_image (const char *dir, const char *prefix, + PE_OHDR (o32, o64, heap_commit_size) = grub_host_to_target32 (0x10000); + + PE_OHDR (o32, o64, num_data_directories) = grub_host_to_target32 (GRUB_PE32_NUM_DATA_DIRECTORIES); +- PE_OHDR (o32, o64, base_relocation_table.rva) = grub_host_to_target32 (reloc_addr); +- PE_OHDR (o32, o64, base_relocation_table.size) = grub_host_to_target32 (layout.reloc_size); + + /* The sections. */ ++ PE_OHDR (o32, o64, code_base) = grub_host_to_target32 (header_size); ++ PE_OHDR (o32, o64, code_size) = grub_host_to_target32 (layout.exec_size); + text_section = sections; + strcpy (text_section->name, ".text"); + text_section->virtual_size = grub_host_to_target32 (layout.exec_size); +@@ -1366,6 +1362,8 @@ grub_install_generate_image (const char *dir, const char *prefix, + | GRUB_PE32_SCN_MEM_EXECUTE + | GRUB_PE32_SCN_MEM_READ); + ++ PE_OHDR (o32, o64, data_size) = grub_host_to_target32 (reloc_addr - layout.exec_size - header_size); ++ + data_section = text_section + 1; + strcpy (data_section->name, ".data"); + data_section->virtual_size = grub_host_to_target32 (layout.kernel_size - layout.exec_size); +@@ -1388,6 +1386,8 @@ grub_install_generate_image (const char *dir, const char *prefix, + | GRUB_PE32_SCN_MEM_READ + | GRUB_PE32_SCN_MEM_WRITE); + ++ PE_OHDR (o32, o64, base_relocation_table.rva) = grub_host_to_target32 (reloc_addr); ++ PE_OHDR (o32, o64, base_relocation_table.size) = grub_host_to_target32 (layout.reloc_size); + reloc_section = mods_section + 1; + strcpy (reloc_section->name, ".reloc"); + reloc_section->virtual_size = grub_host_to_target32 (layout.reloc_size); +-- +2.14.2 + diff --git a/boot/grub2/0139-util-mkimage-Improve-data_size-value-calculation.patch b/boot/grub2/0139-util-mkimage-Improve-data_size-value-calculation.patch new file mode 100644 index 00000000..cc25519a --- /dev/null +++ b/boot/grub2/0139-util-mkimage-Improve-data_size-value-calculation.patch @@ -0,0 +1,50 @@ +From ff406eff25465932b97a2857ee5a75fd0957e9b9 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Thu, 11 Feb 2021 17:07:33 +0100 +Subject: [PATCH] util/mkimage: Improve data_size value calculation + +According to "Microsoft Portable Executable and Common Object File Format +Specification", the Optional Header SizeOfInitializedData field contains: + + Size of the initialized data section, or the sum of all such sections if + there are multiple data sections. + +Make this explicit by adding the GRUB kernel data size to the sum of all +the modules sizes. The ALIGN_UP() is not required by the PE spec but do +it to avoid alignment issues. + +Signed-off-by: Peter Jones +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + util/mkimage.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/util/mkimage.c b/util/mkimage.c +index deaef56..853a521 100644 +--- a/util/mkimage.c ++++ b/util/mkimage.c +@@ -1260,6 +1260,7 @@ grub_install_generate_image (const char *dir, const char *prefix, + void *pe_img; + grub_uint8_t *header; + void *sections; ++ size_t scn_size; + size_t pe_size; + struct grub_pe32_coff_header *c; + struct grub_pe32_section_table *text_section, *data_section; +@@ -1362,7 +1363,10 @@ grub_install_generate_image (const char *dir, const char *prefix, + | GRUB_PE32_SCN_MEM_EXECUTE + | GRUB_PE32_SCN_MEM_READ); + +- PE_OHDR (o32, o64, data_size) = grub_host_to_target32 (reloc_addr - layout.exec_size - header_size); ++ scn_size = ALIGN_UP (layout.kernel_size - layout.exec_size, GRUB_PE32_FILE_ALIGNMENT); ++ PE_OHDR (o32, o64, data_size) = grub_host_to_target32 (scn_size + ++ ALIGN_UP (total_module_size, ++ GRUB_PE32_FILE_ALIGNMENT)); + + data_section = text_section + 1; + strcpy (data_section->name, ".data"); +-- +2.14.2 + diff --git a/boot/grub2/0140-util-mkimage-Refactor-section-setup-to-use-a-helper.patch b/boot/grub2/0140-util-mkimage-Refactor-section-setup-to-use-a-helper.patch new file mode 100644 index 00000000..cc0270ed --- /dev/null +++ b/boot/grub2/0140-util-mkimage-Refactor-section-setup-to-use-a-helper.patch @@ -0,0 +1,221 @@ +From f60ba9e5945892e835e53f0619406d96002f7f70 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 15 Feb 2021 14:58:06 +0100 +Subject: [PATCH] util/mkimage: Refactor section setup to use a helper + +Add a init_pe_section() helper function to setup PE sections. This makes +the code simpler and easier to read. + +Signed-off-by: Peter Jones +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + util/mkimage.c | 143 +++++++++++++++++++++++++++++++-------------------------- + 1 file changed, 77 insertions(+), 66 deletions(-) + +diff --git a/util/mkimage.c b/util/mkimage.c +index 853a521..8b475a6 100644 +--- a/util/mkimage.c ++++ b/util/mkimage.c +@@ -816,6 +816,38 @@ grub_install_get_image_targets_string (void) + return formats; + } + ++/* ++ * The image_target parameter is used by the grub_host_to_target32() macro. ++ */ ++static struct grub_pe32_section_table * ++init_pe_section(const struct grub_install_image_target_desc *image_target, ++ struct grub_pe32_section_table *section, ++ const char * const name, ++ grub_uint32_t *vma, grub_uint32_t vsz, grub_uint32_t valign, ++ grub_uint32_t *rda, grub_uint32_t rsz, ++ grub_uint32_t characteristics) ++{ ++ size_t len = strlen (name); ++ ++ if (len > sizeof (section->name)) ++ grub_util_error (_("section name %s length is bigger than %lu"), ++ name, (unsigned long) sizeof (section->name)); ++ ++ memcpy (section->name, name, len); ++ ++ section->virtual_address = grub_host_to_target32 (*vma); ++ section->virtual_size = grub_host_to_target32 (vsz); ++ (*vma) = ALIGN_UP (*vma + vsz, valign); ++ ++ section->raw_data_offset = grub_host_to_target32 (*rda); ++ section->raw_data_size = grub_host_to_target32 (rsz); ++ (*rda) = ALIGN_UP (*rda + rsz, GRUB_PE32_FILE_ALIGNMENT); ++ ++ section->characteristics = grub_host_to_target32 (characteristics); ++ ++ return section + 1; ++} ++ + /* + * tmp_ is just here so the compiler knows we'll never derefernce a NULL. + * It should get fully optimized away. +@@ -1257,17 +1289,13 @@ grub_install_generate_image (const char *dir, const char *prefix, + break; + case IMAGE_EFI: + { +- void *pe_img; +- grub_uint8_t *header; +- void *sections; ++ char *pe_img, *header; ++ struct grub_pe32_section_table *section; + size_t scn_size; +- size_t pe_size; ++ grub_uint32_t vma, raw_data; ++ size_t pe_size, header_size; + struct grub_pe32_coff_header *c; +- struct grub_pe32_section_table *text_section, *data_section; +- struct grub_pe32_section_table *mods_section, *reloc_section; + static const grub_uint8_t stub[] = GRUB_PE32_MSDOS_STUB; +- int header_size; +- int reloc_addr; + struct grub_pe32_optional_header *o32 = NULL; + struct grub_pe64_optional_header *o64 = NULL; + +@@ -1276,17 +1304,12 @@ grub_install_generate_image (const char *dir, const char *prefix, + else + header_size = EFI64_HEADER_SIZE; + +- reloc_addr = ALIGN_UP (header_size + core_size, +- GRUB_PE32_FILE_ALIGNMENT); ++ vma = raw_data = header_size; ++ pe_size = ALIGN_UP (header_size + core_size, GRUB_PE32_FILE_ALIGNMENT) + ++ ALIGN_UP (layout.reloc_size, GRUB_PE32_FILE_ALIGNMENT); ++ header = pe_img = xcalloc (1, pe_size); + +- pe_size = ALIGN_UP (reloc_addr + layout.reloc_size, +- GRUB_PE32_FILE_ALIGNMENT); +- pe_img = xmalloc (reloc_addr + layout.reloc_size); +- memset (pe_img, 0, header_size); +- memcpy ((char *) pe_img + header_size, core_img, core_size); +- memset ((char *) pe_img + header_size + core_size, 0, reloc_addr - (header_size + core_size)); +- memcpy ((char *) pe_img + reloc_addr, layout.reloc_section, layout.reloc_size); +- header = pe_img; ++ memcpy (pe_img + raw_data, core_img, core_size); + + /* The magic. */ + memcpy (header, stub, GRUB_PE32_MSDOS_STUB_SIZE); +@@ -1319,18 +1342,17 @@ grub_install_generate_image (const char *dir, const char *prefix, + o32->magic = grub_host_to_target16 (GRUB_PE32_PE32_MAGIC); + o32->data_base = grub_host_to_target32 (header_size + layout.exec_size); + +- sections = o32 + 1; ++ section = (struct grub_pe32_section_table *)(o32 + 1); + } + else + { + c->optional_header_size = grub_host_to_target16 (sizeof (struct grub_pe64_optional_header)); +- + o64 = (struct grub_pe64_optional_header *) + (header + GRUB_PE32_MSDOS_STUB_SIZE + GRUB_PE32_SIGNATURE_SIZE + + sizeof (struct grub_pe32_coff_header)); + o64->magic = grub_host_to_target16 (GRUB_PE32_PE64_MAGIC); + +- sections = o64 + 1; ++ section = (struct grub_pe32_section_table *)(o64 + 1); + } + + PE_OHDR (o32, o64, header_size) = grub_host_to_target32 (header_size); +@@ -1350,58 +1372,47 @@ grub_install_generate_image (const char *dir, const char *prefix, + PE_OHDR (o32, o64, num_data_directories) = grub_host_to_target32 (GRUB_PE32_NUM_DATA_DIRECTORIES); + + /* The sections. */ +- PE_OHDR (o32, o64, code_base) = grub_host_to_target32 (header_size); ++ PE_OHDR (o32, o64, code_base) = grub_host_to_target32 (vma); + PE_OHDR (o32, o64, code_size) = grub_host_to_target32 (layout.exec_size); +- text_section = sections; +- strcpy (text_section->name, ".text"); +- text_section->virtual_size = grub_host_to_target32 (layout.exec_size); +- text_section->virtual_address = grub_host_to_target32 (header_size); +- text_section->raw_data_size = grub_host_to_target32 (layout.exec_size); +- text_section->raw_data_offset = grub_host_to_target32 (header_size); +- text_section->characteristics = grub_cpu_to_le32_compile_time ( +- GRUB_PE32_SCN_CNT_CODE +- | GRUB_PE32_SCN_MEM_EXECUTE +- | GRUB_PE32_SCN_MEM_READ); ++ section = init_pe_section (image_target, section, ".text", ++ &vma, layout.exec_size, ++ image_target->section_align, ++ &raw_data, layout.exec_size, ++ GRUB_PE32_SCN_CNT_CODE | ++ GRUB_PE32_SCN_MEM_EXECUTE | ++ GRUB_PE32_SCN_MEM_READ); + + scn_size = ALIGN_UP (layout.kernel_size - layout.exec_size, GRUB_PE32_FILE_ALIGNMENT); + PE_OHDR (o32, o64, data_size) = grub_host_to_target32 (scn_size + + ALIGN_UP (total_module_size, + GRUB_PE32_FILE_ALIGNMENT)); + +- data_section = text_section + 1; +- strcpy (data_section->name, ".data"); +- data_section->virtual_size = grub_host_to_target32 (layout.kernel_size - layout.exec_size); +- data_section->virtual_address = grub_host_to_target32 (header_size + layout.exec_size); +- data_section->raw_data_size = grub_host_to_target32 (layout.kernel_size - layout.exec_size); +- data_section->raw_data_offset = grub_host_to_target32 (header_size + layout.exec_size); +- data_section->characteristics +- = grub_cpu_to_le32_compile_time (GRUB_PE32_SCN_CNT_INITIALIZED_DATA +- | GRUB_PE32_SCN_MEM_READ +- | GRUB_PE32_SCN_MEM_WRITE); +- +- mods_section = data_section + 1; +- strcpy (mods_section->name, "mods"); +- mods_section->virtual_size = grub_host_to_target32 (reloc_addr - layout.kernel_size - header_size); +- mods_section->virtual_address = grub_host_to_target32 (header_size + layout.kernel_size + layout.bss_size); +- mods_section->raw_data_size = grub_host_to_target32 (reloc_addr - layout.kernel_size - header_size); +- mods_section->raw_data_offset = grub_host_to_target32 (header_size + layout.kernel_size); +- mods_section->characteristics +- = grub_cpu_to_le32_compile_time (GRUB_PE32_SCN_CNT_INITIALIZED_DATA +- | GRUB_PE32_SCN_MEM_READ +- | GRUB_PE32_SCN_MEM_WRITE); +- +- PE_OHDR (o32, o64, base_relocation_table.rva) = grub_host_to_target32 (reloc_addr); +- PE_OHDR (o32, o64, base_relocation_table.size) = grub_host_to_target32 (layout.reloc_size); +- reloc_section = mods_section + 1; +- strcpy (reloc_section->name, ".reloc"); +- reloc_section->virtual_size = grub_host_to_target32 (layout.reloc_size); +- reloc_section->virtual_address = grub_host_to_target32 (reloc_addr + layout.bss_size); +- reloc_section->raw_data_size = grub_host_to_target32 (layout.reloc_size); +- reloc_section->raw_data_offset = grub_host_to_target32 (reloc_addr); +- reloc_section->characteristics +- = grub_cpu_to_le32_compile_time (GRUB_PE32_SCN_CNT_INITIALIZED_DATA +- | GRUB_PE32_SCN_MEM_DISCARDABLE +- | GRUB_PE32_SCN_MEM_READ); ++ section = init_pe_section (image_target, section, ".data", ++ &vma, scn_size, image_target->section_align, ++ &raw_data, scn_size, ++ GRUB_PE32_SCN_CNT_INITIALIZED_DATA | ++ GRUB_PE32_SCN_MEM_READ | ++ GRUB_PE32_SCN_MEM_WRITE); ++ ++ scn_size = pe_size - layout.reloc_size - raw_data; ++ section = init_pe_section (image_target, section, "mods", ++ &vma, scn_size, image_target->section_align, ++ &raw_data, scn_size, ++ GRUB_PE32_SCN_CNT_INITIALIZED_DATA | ++ GRUB_PE32_SCN_MEM_READ | ++ GRUB_PE32_SCN_MEM_WRITE); ++ ++ scn_size = layout.reloc_size; ++ PE_OHDR (o32, o64, base_relocation_table.rva) = grub_host_to_target32 (vma); ++ PE_OHDR (o32, o64, base_relocation_table.size) = grub_host_to_target32 (scn_size); ++ memcpy (pe_img + raw_data, layout.reloc_section, scn_size); ++ init_pe_section (image_target, section, ".reloc", ++ &vma, scn_size, image_target->section_align, ++ &raw_data, scn_size, ++ GRUB_PE32_SCN_CNT_INITIALIZED_DATA | ++ GRUB_PE32_SCN_MEM_DISCARDABLE | ++ GRUB_PE32_SCN_MEM_READ); ++ + free (core_img); + core_img = pe_img; + core_size = pe_size; +-- +2.14.2 + diff --git a/boot/grub2/0141-util-mkimage-Add-an-option-to-import-SBAT-metadata-i.patch b/boot/grub2/0141-util-mkimage-Add-an-option-to-import-SBAT-metadata-i.patch new file mode 100644 index 00000000..3cc6b498 --- /dev/null +++ b/boot/grub2/0141-util-mkimage-Add-an-option-to-import-SBAT-metadata-i.patch @@ -0,0 +1,264 @@ +From b11547137703bbc642114a816233a5b6fed61b06 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 15 Feb 2021 17:07:00 +0100 +Subject: [PATCH] util/mkimage: Add an option to import SBAT metadata into a + .sbat section + +Add a --sbat option to the grub-mkimage tool which allows us to import +an SBAT metadata formatted as a CSV file into a .sbat section of the +EFI binary. + +Signed-off-by: Peter Jones +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + docs/grub.texi | 19 +++++++++++++++++++ + include/grub/util/install.h | 3 ++- + include/grub/util/mkimage.h | 1 + + util/grub-install-common.c | 2 +- + util/grub-mkimage.c | 15 ++++++++++++++- + util/mkimage.c | 43 ++++++++++++++++++++++++++++++++++++------- + 6 files changed, 73 insertions(+), 10 deletions(-) + +diff --git a/docs/grub.texi b/docs/grub.texi +index 8518cc0..bff6dfc 100644 +--- a/docs/grub.texi ++++ b/docs/grub.texi +@@ -5616,6 +5616,7 @@ environment variables and commands are listed in the same order. + * Authentication and authorisation:: Users and access control + * Using digital signatures:: Booting digitally signed code + * UEFI secure boot and shim:: Booting digitally signed PE files ++* Secure Boot Advanced Targeting:: Embedded information for generation number based revocation + * Measured Boot:: Measuring boot components + * Lockdown:: Lockdown when booting on a secure setup + @end menu +@@ -5795,6 +5796,24 @@ and @command{memrw} will not be available when the UEFI secure boot is enabled. + This is done for security reasons and are enforced by the GRUB Lockdown mechanism + (@pxref{Lockdown}). + ++@node Secure Boot Advanced Targeting ++@section Embedded information for generation number based revocation ++ ++The Secure Boot Advanced Targeting (SBAT) is a mechanism to allow the revocation ++of components in the boot path by using generation numbers embedded into the EFI ++binaries. The SBAT metadata is located in an .sbat data section that has set of ++UTF-8 strings as comma-separated values (CSV). See ++@uref{https://github.com/rhboot/shim/blob/main/SBAT.md} for more details. ++ ++To add a data section containing the SBAT information into the binary, the ++@option{--sbat} option of @command{grub-mkimage} command should be used. The content ++of a CSV file, encoded with UTF-8, is copied as is to the .sbat data section into ++the generated EFI binary. The CSV file can be stored anywhere on the file system. ++ ++@example ++grub-mkimage -O x86_64-efi -o grubx64.efi -p '(tftp)/grub' --sbat sbat.csv efinet tftp ++@end example ++ + @node Measured Boot + @section Measuring boot components + +diff --git a/include/grub/util/install.h b/include/grub/util/install.h +index 2631b10..c03befd 100644 +--- a/include/grub/util/install.h ++++ b/include/grub/util/install.h +@@ -183,7 +183,8 @@ grub_install_generate_image (const char *dir, const char *prefix, + char *config_path, + const struct grub_install_image_target_desc *image_target, + int note, +- grub_compression_t comp, const char *dtb_file); ++ grub_compression_t comp, const char *dtb_file, ++ const char *sbat_path); + + const struct grub_install_image_target_desc * + grub_install_get_image_target (const char *arg); +diff --git a/include/grub/util/mkimage.h b/include/grub/util/mkimage.h +index ba9f568..3819a67 100644 +--- a/include/grub/util/mkimage.h ++++ b/include/grub/util/mkimage.h +@@ -24,6 +24,7 @@ struct grub_mkimage_layout + size_t exec_size; + size_t kernel_size; + size_t bss_size; ++ size_t sbat_size; + grub_uint64_t start_address; + void *reloc_section; + size_t reloc_size; +diff --git a/util/grub-install-common.c b/util/grub-install-common.c +index 0295d40..5d43ed1 100644 +--- a/util/grub-install-common.c ++++ b/util/grub-install-common.c +@@ -511,7 +511,7 @@ grub_install_make_image_wrap_file (const char *dir, const char *prefix, + grub_install_generate_image (dir, prefix, fp, outname, + modules.entries, memdisk_path, + pubkeys, npubkeys, config_path, tgt, +- note, compression, dtb); ++ note, compression, dtb, NULL); + while (dc--) + grub_install_pop_module (); + } +diff --git a/util/grub-mkimage.c b/util/grub-mkimage.c +index 912564e..75b8847 100644 +--- a/util/grub-mkimage.c ++++ b/util/grub-mkimage.c +@@ -81,6 +81,7 @@ static struct argp_option options[] = { + {"output", 'o', N_("FILE"), 0, N_("output a generated image to FILE [default=stdout]"), 0}, + {"format", 'O', N_("FORMAT"), 0, 0, 0}, + {"compression", 'C', "(xz|none|auto)", 0, N_("choose the compression to use for core image"), 0}, ++ {"sbat", 's', N_("FILE"), 0, N_("SBAT metadata"), 0}, + {"verbose", 'v', 0, 0, N_("print verbose messages."), 0}, + { 0, 0, 0, 0, 0, 0 } + }; +@@ -123,6 +124,7 @@ struct arguments + size_t npubkeys; + char *font; + char *config; ++ char *sbat; + int note; + const struct grub_install_image_target_desc *image_target; + grub_compression_t comp; +@@ -224,6 +226,13 @@ argp_parser (int key, char *arg, struct argp_state *state) + arguments->prefix = xstrdup (arg); + break; + ++ case 's': ++ if (arguments->sbat) ++ free (arguments->sbat); ++ ++ arguments->sbat = xstrdup (arg); ++ break; ++ + case 'v': + verbosity++; + break; +@@ -309,7 +318,8 @@ main (int argc, char *argv[]) + arguments.memdisk, arguments.pubkeys, + arguments.npubkeys, arguments.config, + arguments.image_target, arguments.note, +- arguments.comp, arguments.dtb); ++ arguments.comp, arguments.dtb, ++ arguments.sbat); + + if (grub_util_file_sync (fp) < 0) + grub_util_error (_("cannot sync `%s': %s"), arguments.output ? : "stdout", +@@ -328,5 +338,8 @@ main (int argc, char *argv[]) + if (arguments.output) + free (arguments.output); + ++ if (arguments.sbat) ++ free (arguments.sbat); ++ + return 0; + } +diff --git a/util/mkimage.c b/util/mkimage.c +index 8b475a6..b354ec1 100644 +--- a/util/mkimage.c ++++ b/util/mkimage.c +@@ -869,12 +869,13 @@ grub_install_generate_image (const char *dir, const char *prefix, + char *memdisk_path, char **pubkey_paths, + size_t npubkeys, char *config_path, + const struct grub_install_image_target_desc *image_target, +- int note, grub_compression_t comp, const char *dtb_path) ++ int note, grub_compression_t comp, const char *dtb_path, ++ const char *sbat_path) + { + char *kernel_img, *core_img; + size_t total_module_size, core_size; + size_t memdisk_size = 0, config_size = 0; +- size_t prefix_size = 0, dtb_size = 0; ++ size_t prefix_size = 0, dtb_size = 0, sbat_size = 0; + char *kernel_path; + size_t offset; + struct grub_util_path_list *path_list, *p; +@@ -925,6 +926,9 @@ grub_install_generate_image (const char *dir, const char *prefix, + total_module_size += dtb_size + sizeof (struct grub_module_header); + } + ++ if (sbat_path != NULL && image_target->id != IMAGE_EFI) ++ grub_util_error (_(".sbat section can be embedded into EFI images only")); ++ + if (config_path) + { + config_size = ALIGN_ADDR (grub_util_get_image_size (config_path) + 1); +@@ -1289,8 +1293,9 @@ grub_install_generate_image (const char *dir, const char *prefix, + break; + case IMAGE_EFI: + { +- char *pe_img, *header; ++ char *pe_img, *pe_sbat, *header; + struct grub_pe32_section_table *section; ++ size_t n_sections = 4; + size_t scn_size; + grub_uint32_t vma, raw_data; + size_t pe_size, header_size; +@@ -1305,8 +1310,15 @@ grub_install_generate_image (const char *dir, const char *prefix, + header_size = EFI64_HEADER_SIZE; + + vma = raw_data = header_size; ++ ++ if (sbat_path != NULL) ++ { ++ sbat_size = ALIGN_ADDR (grub_util_get_image_size (sbat_path)); ++ sbat_size = ALIGN_UP (sbat_size, GRUB_PE32_FILE_ALIGNMENT); ++ } ++ + pe_size = ALIGN_UP (header_size + core_size, GRUB_PE32_FILE_ALIGNMENT) + +- ALIGN_UP (layout.reloc_size, GRUB_PE32_FILE_ALIGNMENT); ++ ALIGN_UP (layout.reloc_size, GRUB_PE32_FILE_ALIGNMENT) + sbat_size; + header = pe_img = xcalloc (1, pe_size); + + memcpy (pe_img + raw_data, core_img, core_size); +@@ -1321,7 +1333,10 @@ grub_install_generate_image (const char *dir, const char *prefix, + + GRUB_PE32_SIGNATURE_SIZE); + c->machine = grub_host_to_target16 (image_target->pe_target); + +- c->num_sections = grub_host_to_target16 (4); ++ if (sbat_path != NULL) ++ n_sections++; ++ ++ c->num_sections = grub_host_to_target16 (n_sections); + c->time = grub_host_to_target32 (STABLE_EMBEDDING_TIMESTAMP); + c->characteristics = grub_host_to_target16 (GRUB_PE32_EXECUTABLE_IMAGE + | GRUB_PE32_LINE_NUMS_STRIPPED +@@ -1383,7 +1398,8 @@ grub_install_generate_image (const char *dir, const char *prefix, + GRUB_PE32_SCN_MEM_READ); + + scn_size = ALIGN_UP (layout.kernel_size - layout.exec_size, GRUB_PE32_FILE_ALIGNMENT); +- PE_OHDR (o32, o64, data_size) = grub_host_to_target32 (scn_size + ++ /* ALIGN_UP (sbat_size, GRUB_PE32_FILE_ALIGNMENT) is done earlier. */ ++ PE_OHDR (o32, o64, data_size) = grub_host_to_target32 (scn_size + sbat_size + + ALIGN_UP (total_module_size, + GRUB_PE32_FILE_ALIGNMENT)); + +@@ -1394,7 +1410,7 @@ grub_install_generate_image (const char *dir, const char *prefix, + GRUB_PE32_SCN_MEM_READ | + GRUB_PE32_SCN_MEM_WRITE); + +- scn_size = pe_size - layout.reloc_size - raw_data; ++ scn_size = pe_size - layout.reloc_size - sbat_size - raw_data; + section = init_pe_section (image_target, section, "mods", + &vma, scn_size, image_target->section_align, + &raw_data, scn_size, +@@ -1402,6 +1418,19 @@ grub_install_generate_image (const char *dir, const char *prefix, + GRUB_PE32_SCN_MEM_READ | + GRUB_PE32_SCN_MEM_WRITE); + ++ if (sbat_path != NULL) ++ { ++ pe_sbat = pe_img + raw_data; ++ grub_util_load_image (sbat_path, pe_sbat); ++ ++ section = init_pe_section (image_target, section, ".sbat", ++ &vma, sbat_size, ++ image_target->section_align, ++ &raw_data, sbat_size, ++ GRUB_PE32_SCN_CNT_INITIALIZED_DATA | ++ GRUB_PE32_SCN_MEM_READ); ++ } ++ + scn_size = layout.reloc_size; + PE_OHDR (o32, o64, base_relocation_table.rva) = grub_host_to_target32 (vma); + PE_OHDR (o32, o64, base_relocation_table.size) = grub_host_to_target32 (scn_size); +-- +2.14.2 + diff --git a/boot/grub2/0142-grub-install-common-Add-sbat-option.patch b/boot/grub2/0142-grub-install-common-Add-sbat-option.patch new file mode 100644 index 00000000..13f71ff8 --- /dev/null +++ b/boot/grub2/0142-grub-install-common-Add-sbat-option.patch @@ -0,0 +1,85 @@ +From bb51ee2b49fbda0f66c1fa580a33442ff578f110 Mon Sep 17 00:00:00 2001 +From: Dimitri John Ledkov +Date: Mon, 22 Feb 2021 17:05:25 +0000 +Subject: [PATCH] grub-install-common: Add --sbat option + +Signed-off-by: Dimitri John Ledkov +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + include/grub/util/install.h | 5 ++++- + util/grub-install-common.c | 12 ++++++++++-- + 2 files changed, 14 insertions(+), 3 deletions(-) + +diff --git a/include/grub/util/install.h b/include/grub/util/install.h +index c03befd..8cb5056 100644 +--- a/include/grub/util/install.h ++++ b/include/grub/util/install.h +@@ -63,6 +63,8 @@ + /* TRANSLATORS: "embed" is a verb (command description). "*/ \ + { "pubkey", 'k', N_("FILE"), 0, \ + N_("embed FILE as public key for signature checking"), 0}, \ ++ { "sbat", GRUB_INSTALL_OPTIONS_SBAT, N_("FILE"), 0, \ ++ N_("SBAT metadata"), 0 }, \ + { "verbose", 'v', 0, 0, \ + N_("print verbose messages."), 1 } + +@@ -122,7 +124,8 @@ enum grub_install_options { + GRUB_INSTALL_OPTIONS_THEMES_DIRECTORY, + GRUB_INSTALL_OPTIONS_GRUB_MKIMAGE, + GRUB_INSTALL_OPTIONS_INSTALL_CORE_COMPRESS, +- GRUB_INSTALL_OPTIONS_DTB ++ GRUB_INSTALL_OPTIONS_DTB, ++ GRUB_INSTALL_OPTIONS_SBAT + }; + + extern char *grub_install_source_directory; +diff --git a/util/grub-install-common.c b/util/grub-install-common.c +index 5d43ed1..1fcccd2 100644 +--- a/util/grub-install-common.c ++++ b/util/grub-install-common.c +@@ -307,6 +307,7 @@ handle_install_list (struct install_list *il, const char *val, + + static char **pubkeys; + static size_t npubkeys; ++static char *sbat; + static grub_compression_t compression; + + int +@@ -337,6 +338,12 @@ grub_install_parse (int key, char *arg) + * (npubkeys + 1)); + pubkeys[npubkeys++] = xstrdup (arg); + return 1; ++ case GRUB_INSTALL_OPTIONS_SBAT: ++ if (sbat) ++ free (sbat); ++ ++ sbat = xstrdup (arg); ++ return 1; + + case GRUB_INSTALL_OPTIONS_VERBOSITY: + verbosity++; +@@ -498,9 +505,10 @@ grub_install_make_image_wrap_file (const char *dir, const char *prefix, + grub_util_info ("grub-mkimage --directory '%s' --prefix '%s'" + " --output '%s' " + " --dtb '%s' " ++ "--sbat '%s' " + "--format '%s' --compression '%s' %s %s\n", + dir, prefix, +- outname, dtb ? : "", mkimage_target, ++ outname, dtb ? : "", sbat ? : "", mkimage_target, + compnames[compression], note ? "--note" : "", s); + free (s); + +@@ -511,7 +519,7 @@ grub_install_make_image_wrap_file (const char *dir, const char *prefix, + grub_install_generate_image (dir, prefix, fp, outname, + modules.entries, memdisk_path, + pubkeys, npubkeys, config_path, tgt, +- note, compression, dtb, NULL); ++ note, compression, dtb, sbat); + while (dc--) + grub_install_pop_module (); + } +-- +2.14.2 + diff --git a/boot/grub2/0143-shim_lock-Only-skip-loading-shim_lock-verifier-with-.patch b/boot/grub2/0143-shim_lock-Only-skip-loading-shim_lock-verifier-with-.patch new file mode 100644 index 00000000..ef20639c --- /dev/null +++ b/boot/grub2/0143-shim_lock-Only-skip-loading-shim_lock-verifier-with-.patch @@ -0,0 +1,270 @@ +From 968de8c23c1cba0f18230f778ebcf6c412ec8ec5 Mon Sep 17 00:00:00 2001 +From: Dimitri John Ledkov +Date: Sat, 20 Feb 2021 17:10:34 +0000 +Subject: [PATCH] shim_lock: Only skip loading shim_lock verifier with explicit + consent + +Commit 32ddc42c (efi: Only register shim_lock verifier if shim_lock +protocol is found and SB enabled) reintroduced CVE-2020-15705 which +previously only existed in the out-of-tree linuxefi patches and was +fixed as part of the BootHole patch series. + +Under Secure Boot enforce loading shim_lock verifier. Allow skipping +shim_lock verifier if SecureBoot/MokSBState EFI variables indicate +skipping validations, or if GRUB image is built with --disable-shim-lock. + +Fixes: 132ddc42c (efi: Only register shim_lock verifier if shim_lock + protocol is found and SB enabled) +Fixes: CVE-2020-15705 +Fixes: CVE-2021-3418 + +Reported-by: Dimitri John Ledkov +Signed-off-by: Dimitri John Ledkov +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + docs/grub.texi | 5 ++++- + grub-core/kern/efi/sb.c | 17 ++++++++++++++++- + include/grub/kernel.h | 3 ++- + include/grub/util/install.h | 7 +++++-- + util/grub-install-common.c | 12 +++++++++--- + util/grub-mkimage.c | 8 +++++++- + util/mkimage.c | 15 ++++++++++++++- + 7 files changed, 57 insertions(+), 10 deletions(-) + +diff --git a/docs/grub.texi b/docs/grub.texi +index bff6dfc..e302797 100644 +--- a/docs/grub.texi ++++ b/docs/grub.texi +@@ -5787,7 +5787,10 @@ secure boot chain. + The GRUB, except the @command{chainloader} command, works with the UEFI secure + boot and the shim. This functionality is provided by the shim_lock verifier. It + is built into the @file{core.img} and is registered if the UEFI secure boot is +-enabled. ++enabled. The @samp{shim_lock} variable is set to @samp{y} when shim_lock verifier ++is registered. If it is desired to use UEFI secure boot without shim, one can ++disable shim_lock by disabling shim verification with MokSbState UEFI variable ++or by building grub image with @samp{--disable-shim-lock} option. + + All GRUB modules not stored in the @file{core.img}, OS kernels, ACPI tables, + Device Trees, etc. have to be signed, e.g, using PGP. Additionally, the commands +diff --git a/grub-core/kern/efi/sb.c b/grub-core/kern/efi/sb.c +index 5d7210a..41dadcd 100644 +--- a/grub-core/kern/efi/sb.c ++++ b/grub-core/kern/efi/sb.c +@@ -21,9 +21,11 @@ + #include + #include + #include ++#include + #include + #include + #include ++#include + #include + #include + #include +@@ -160,14 +162,27 @@ struct grub_file_verifier shim_lock_verifier = + void + grub_shim_lock_verifier_setup (void) + { ++ struct grub_module_header *header; + grub_efi_shim_lock_protocol_t *sl = + grub_efi_locate_protocol (&shim_lock_guid, 0); + ++ /* shim_lock is missing, check if GRUB image is built with --disable-shim-lock. */ + if (!sl) +- return; ++ { ++ FOR_MODULES (header) ++ { ++ if (header->type == OBJ_TYPE_DISABLE_SHIM_LOCK) ++ return; ++ } ++ } + ++ /* Secure Boot is off. Do not load shim_lock. */ + if (grub_efi_get_secureboot () != GRUB_EFI_SECUREBOOT_MODE_ENABLED) + return; + ++ /* Enforce shim_lock_verifier. */ + grub_verifier_register (&shim_lock_verifier); ++ ++ grub_env_set ("shim_lock", "y"); ++ grub_env_export ("shim_lock"); + } +diff --git a/include/grub/kernel.h b/include/grub/kernel.h +index 133a37c..abbca5e 100644 +--- a/include/grub/kernel.h ++++ b/include/grub/kernel.h +@@ -29,7 +29,8 @@ enum + OBJ_TYPE_CONFIG, + OBJ_TYPE_PREFIX, + OBJ_TYPE_PUBKEY, +- OBJ_TYPE_DTB ++ OBJ_TYPE_DTB, ++ OBJ_TYPE_DISABLE_SHIM_LOCK + }; + + /* The module header. */ +diff --git a/include/grub/util/install.h b/include/grub/util/install.h +index 8cb5056..11a8df8 100644 +--- a/include/grub/util/install.h ++++ b/include/grub/util/install.h +@@ -65,6 +65,8 @@ + N_("embed FILE as public key for signature checking"), 0}, \ + { "sbat", GRUB_INSTALL_OPTIONS_SBAT, N_("FILE"), 0, \ + N_("SBAT metadata"), 0 }, \ ++ { "disable-shim-lock", GRUB_INSTALL_OPTIONS_DISABLE_SHIM_LOCK, 0, 0, \ ++ N_("disable shim_lock verifier"), 0 }, \ + { "verbose", 'v', 0, 0, \ + N_("print verbose messages."), 1 } + +@@ -125,7 +127,8 @@ enum grub_install_options { + GRUB_INSTALL_OPTIONS_GRUB_MKIMAGE, + GRUB_INSTALL_OPTIONS_INSTALL_CORE_COMPRESS, + GRUB_INSTALL_OPTIONS_DTB, +- GRUB_INSTALL_OPTIONS_SBAT ++ GRUB_INSTALL_OPTIONS_SBAT, ++ GRUB_INSTALL_OPTIONS_DISABLE_SHIM_LOCK + }; + + extern char *grub_install_source_directory; +@@ -187,7 +190,7 @@ grub_install_generate_image (const char *dir, const char *prefix, + const struct grub_install_image_target_desc *image_target, + int note, + grub_compression_t comp, const char *dtb_file, +- const char *sbat_path); ++ const char *sbat_path, const int disable_shim_lock); + + const struct grub_install_image_target_desc * + grub_install_get_image_target (const char *arg); +diff --git a/util/grub-install-common.c b/util/grub-install-common.c +index 1fcccd2..13d9fe9 100644 +--- a/util/grub-install-common.c ++++ b/util/grub-install-common.c +@@ -308,6 +308,7 @@ handle_install_list (struct install_list *il, const char *val, + static char **pubkeys; + static size_t npubkeys; + static char *sbat; ++static int disable_shim_lock; + static grub_compression_t compression; + + int +@@ -344,6 +345,9 @@ grub_install_parse (int key, char *arg) + + sbat = xstrdup (arg); + return 1; ++ case GRUB_INSTALL_OPTIONS_DISABLE_SHIM_LOCK: ++ disable_shim_lock = 1; ++ return 1; + + case GRUB_INSTALL_OPTIONS_VERBOSITY: + verbosity++; +@@ -506,10 +510,11 @@ grub_install_make_image_wrap_file (const char *dir, const char *prefix, + " --output '%s' " + " --dtb '%s' " + "--sbat '%s' " +- "--format '%s' --compression '%s' %s %s\n", ++ "--format '%s' --compression '%s' %s %s %s\n", + dir, prefix, + outname, dtb ? : "", sbat ? : "", mkimage_target, +- compnames[compression], note ? "--note" : "", s); ++ compnames[compression], note ? "--note" : "", ++ disable_shim_lock ? "--disable-shim-lock" : "", s); + free (s); + + tgt = grub_install_get_image_target (mkimage_target); +@@ -519,7 +524,8 @@ grub_install_make_image_wrap_file (const char *dir, const char *prefix, + grub_install_generate_image (dir, prefix, fp, outname, + modules.entries, memdisk_path, + pubkeys, npubkeys, config_path, tgt, +- note, compression, dtb, sbat); ++ note, compression, dtb, sbat, ++ disable_shim_lock); + while (dc--) + grub_install_pop_module (); + } +diff --git a/util/grub-mkimage.c b/util/grub-mkimage.c +index 75b8847..c0d5599 100644 +--- a/util/grub-mkimage.c ++++ b/util/grub-mkimage.c +@@ -82,6 +82,7 @@ static struct argp_option options[] = { + {"format", 'O', N_("FORMAT"), 0, 0, 0}, + {"compression", 'C', "(xz|none|auto)", 0, N_("choose the compression to use for core image"), 0}, + {"sbat", 's', N_("FILE"), 0, N_("SBAT metadata"), 0}, ++ {"disable-shim-lock", GRUB_INSTALL_OPTIONS_DISABLE_SHIM_LOCK, 0, 0, N_("disable shim_lock verifier"), 0}, + {"verbose", 'v', 0, 0, N_("print verbose messages."), 0}, + { 0, 0, 0, 0, 0, 0 } + }; +@@ -126,6 +127,7 @@ struct arguments + char *config; + char *sbat; + int note; ++ int disable_shim_lock; + const struct grub_install_image_target_desc *image_target; + grub_compression_t comp; + }; +@@ -233,6 +235,10 @@ argp_parser (int key, char *arg, struct argp_state *state) + arguments->sbat = xstrdup (arg); + break; + ++ case GRUB_INSTALL_OPTIONS_DISABLE_SHIM_LOCK: ++ arguments->disable_shim_lock = 1; ++ break; ++ + case 'v': + verbosity++; + break; +@@ -319,7 +325,7 @@ main (int argc, char *argv[]) + arguments.npubkeys, arguments.config, + arguments.image_target, arguments.note, + arguments.comp, arguments.dtb, +- arguments.sbat); ++ arguments.sbat, arguments.disable_shim_lock); + + if (grub_util_file_sync (fp) < 0) + grub_util_error (_("cannot sync `%s': %s"), arguments.output ? : "stdout", +diff --git a/util/mkimage.c b/util/mkimage.c +index b354ec1..a26cf76 100644 +--- a/util/mkimage.c ++++ b/util/mkimage.c +@@ -870,7 +870,7 @@ grub_install_generate_image (const char *dir, const char *prefix, + size_t npubkeys, char *config_path, + const struct grub_install_image_target_desc *image_target, + int note, grub_compression_t comp, const char *dtb_path, +- const char *sbat_path) ++ const char *sbat_path, int disable_shim_lock) + { + char *kernel_img, *core_img; + size_t total_module_size, core_size; +@@ -929,6 +929,9 @@ grub_install_generate_image (const char *dir, const char *prefix, + if (sbat_path != NULL && image_target->id != IMAGE_EFI) + grub_util_error (_(".sbat section can be embedded into EFI images only")); + ++ if (disable_shim_lock) ++ total_module_size += sizeof (struct grub_module_header); ++ + if (config_path) + { + config_size = ALIGN_ADDR (grub_util_get_image_size (config_path) + 1); +@@ -1065,6 +1068,16 @@ grub_install_generate_image (const char *dir, const char *prefix, + offset += dtb_size; + } + ++ if (disable_shim_lock) ++ { ++ struct grub_module_header *header; ++ ++ header = (struct grub_module_header *) (kernel_img + offset); ++ header->type = grub_host_to_target32 (OBJ_TYPE_DISABLE_SHIM_LOCK); ++ header->size = grub_host_to_target32 (sizeof (*header)); ++ offset += sizeof (*header); ++ } ++ + if (config_path) + { + struct grub_module_header *header; +-- +2.14.2 + diff --git a/boot/grub2/0144-kern-misc-Split-parse_printf_args-into-format-parsin.patch b/boot/grub2/0144-kern-misc-Split-parse_printf_args-into-format-parsin.patch new file mode 100644 index 00000000..74fdc1db --- /dev/null +++ b/boot/grub2/0144-kern-misc-Split-parse_printf_args-into-format-parsin.patch @@ -0,0 +1,50 @@ +From 7f11bde3143b21b40d8225ea1d641e0f83b5a01e Mon Sep 17 00:00:00 2001 +From: Thomas Frauendorfer | Miray Software +Date: Mon, 15 Feb 2021 13:40:16 +0100 +Subject: [PATCH] kern/misc: Split parse_printf_args() into format parsing and + va_list handling + +This patch is preparing for a follow up patch which will use +the format parsing part to compare the arguments in a printf() +format from an external source against a printf() format with +expected arguments. + +Signed-off-by: Thomas Frauendorfer | Miray Software +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/kern/misc.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/grub-core/kern/misc.c b/grub-core/kern/misc.c +index b02693b..50bf3ee 100644 +--- a/grub-core/kern/misc.c ++++ b/grub-core/kern/misc.c +@@ -632,8 +632,7 @@ grub_lltoa (char *str, int c, unsigned long long n) + } + + static void +-parse_printf_args (const char *fmt0, struct printf_args *args, +- va_list args_in) ++parse_printf_arg_fmt (const char *fmt0, struct printf_args *args) + { + const char *fmt; + char c; +@@ -789,6 +788,14 @@ parse_printf_args (const char *fmt0, struct printf_args *args, + break; + } + } ++} ++ ++static void ++parse_printf_args (const char *fmt0, struct printf_args *args, va_list args_in) ++{ ++ grub_size_t n; ++ ++ parse_printf_arg_fmt (fmt0, args); + + for (n = 0; n < args->count; n++) + switch (args->ptr[n].type) +-- +2.14.2 + diff --git a/boot/grub2/0145-kern-misc-Add-STRING-type-for-internal-printf-format.patch b/boot/grub2/0145-kern-misc-Add-STRING-type-for-internal-printf-format.patch new file mode 100644 index 00000000..56463b08 --- /dev/null +++ b/boot/grub2/0145-kern-misc-Add-STRING-type-for-internal-printf-format.patch @@ -0,0 +1,68 @@ +From 1a2a5aff71e8edba436398492279de434abfe7a3 Mon Sep 17 00:00:00 2001 +From: Thomas Frauendorfer | Miray Software +Date: Mon, 15 Feb 2021 14:04:26 +0100 +Subject: [PATCH] kern/misc: Add STRING type for internal printf() format + handling + +Set printf() argument type for "%s" to new type STRING. This is in +preparation for a follow up patch to compare a printf() format string +against an expected printf() format string. + +For "%s" the corresponding printf() argument is dereferenced as pointer +while all other argument types are defined as integer value. However, +when validating a printf() format it is necessary to differentiate "%s" +from "%p" and other integers. So, let's do that. + +Signed-off-by: Thomas Frauendorfer | Miray Software +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/kern/misc.c | 13 +++++++++++-- + 1 file changed, 11 insertions(+), 2 deletions(-) + +diff --git a/grub-core/kern/misc.c b/grub-core/kern/misc.c +index 50bf3ee..22417f7 100644 +--- a/grub-core/kern/misc.c ++++ b/grub-core/kern/misc.c +@@ -33,7 +33,8 @@ union printf_arg + enum + { + INT, LONG, LONGLONG, +- UNSIGNED_INT = 3, UNSIGNED_LONG, UNSIGNED_LONGLONG ++ UNSIGNED_INT = 3, UNSIGNED_LONG, UNSIGNED_LONGLONG, ++ STRING + } type; + long long ll; + }; +@@ -776,12 +777,14 @@ parse_printf_arg_fmt (const char *fmt0, struct printf_args *args) + args->ptr[curn].type = INT + longfmt; + break; + case 'p': +- case 's': + if (sizeof (void *) == sizeof (long long)) + args->ptr[curn].type = UNSIGNED_LONGLONG; + else + args->ptr[curn].type = UNSIGNED_INT; + break; ++ case 's': ++ args->ptr[curn].type = STRING; ++ break; + case 'C': + case 'c': + args->ptr[curn].type = INT; +@@ -816,6 +819,12 @@ parse_printf_args (const char *fmt0, struct printf_args *args, va_list args_in) + case UNSIGNED_LONGLONG: + args->ptr[n].ll = va_arg (args_in, long long); + break; ++ case STRING: ++ if (sizeof (void *) == sizeof (long long)) ++ args->ptr[n].ll = va_arg (args_in, long long); ++ else ++ args->ptr[n].ll = va_arg (args_in, unsigned int); ++ break; + } + } + +-- +2.14.2 + diff --git a/boot/grub2/0146-kern-misc-Add-function-to-check-printf-format-agains.patch b/boot/grub2/0146-kern-misc-Add-function-to-check-printf-format-agains.patch new file mode 100644 index 00000000..1b0d6738 --- /dev/null +++ b/boot/grub2/0146-kern-misc-Add-function-to-check-printf-format-agains.patch @@ -0,0 +1,219 @@ +From 83603bea6ce8fdff5ab3fbc4c9e592a8c71a8706 Mon Sep 17 00:00:00 2001 +From: Thomas Frauendorfer | Miray Software +Date: Thu, 4 Feb 2021 19:02:33 +0100 +Subject: [PATCH] kern/misc: Add function to check printf() format against + expected format + +The grub_printf_fmt_check() function parses the arguments of an untrusted +printf() format and an expected printf() format and then compares the +arguments counts and arguments types. The arguments count in the untrusted +format string must be less or equal to the arguments count in the expected +format string and both arguments types must match. + +To do this the parse_printf_arg_fmt() helper function is extended in the +following way: + + 1. Add a return value to report errors to the grub_printf_fmt_check(). + + 2. Add the fmt_check argument to enable stricter format verification: + - the function expects that arguments definitions are always + terminated by a supported conversion specifier. + - positional parameters, "$", are not allowed, as they cannot be + validated correctly with the current implementation. For example + "%s%1$d" would assign the first args entry twice while leaving the + second one unchanged. + - Return an error if preallocated space in args is too small and + allocation fails for the needed size. The grub_printf_fmt_check() + should verify all arguments. So, if validation is not possible for + any reason it should return an error. + This also adds a case entry to handle "%%", which is the escape + sequence to print "%" character. + + 3. Add the max_args argument to check for the maximum allowed arguments + count in a printf() string. This should be set to the arguments count + of the expected format. Then the parse_printf_arg_fmt() function will + return an error if the arguments count is exceeded. + +The two additional arguments allow us to use parse_printf_arg_fmt() in +printf() and grub_printf_fmt_check() calls. + +When parse_printf_arg_fmt() is used by grub_printf_fmt_check() the +function parse user provided untrusted format string too. So, in +that case it is better to be too strict than too lenient. + +Signed-off-by: Thomas Frauendorfer | Miray Software +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/kern/misc.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++--- + include/grub/misc.h | 16 ++++++++++ + 2 files changed, 94 insertions(+), 4 deletions(-) + +diff --git a/grub-core/kern/misc.c b/grub-core/kern/misc.c +index 22417f7..90317b6 100644 +--- a/grub-core/kern/misc.c ++++ b/grub-core/kern/misc.c +@@ -632,8 +632,26 @@ grub_lltoa (char *str, int c, unsigned long long n) + return p; + } + +-static void +-parse_printf_arg_fmt (const char *fmt0, struct printf_args *args) ++/* ++ * Parse printf() fmt0 string into args arguments. ++ * ++ * The parsed arguments are either used by a printf() function to format the fmt0 ++ * string or they are used to compare a format string from an untrusted source ++ * against a format string with expected arguments. ++ * ++ * When the fmt_check is set to !0, e.g. 1, then this function is executed in ++ * printf() format check mode. This enforces stricter rules for parsing the ++ * fmt0 to limit exposure to possible errors in printf() handling. It also ++ * disables positional parameters, "$", because some formats, e.g "%s%1$d", ++ * cannot be validated with the current implementation. ++ * ++ * The max_args allows to set a maximum number of accepted arguments. If the fmt0 ++ * string defines more arguments than the max_args then the parse_printf_arg_fmt() ++ * function returns an error. This is currently used for format check only. ++ */ ++static grub_err_t ++parse_printf_arg_fmt (const char *fmt0, struct printf_args *args, ++ int fmt_check, grub_size_t max_args) + { + const char *fmt; + char c; +@@ -660,7 +678,12 @@ parse_printf_arg_fmt (const char *fmt0, struct printf_args *args) + fmt++; + + if (*fmt == '$') +- fmt++; ++ { ++ if (fmt_check) ++ return grub_error (GRUB_ERR_BAD_ARGUMENT, ++ "positional arguments are not supported"); ++ fmt++; ++ } + + if (*fmt =='-') + fmt++; +@@ -691,9 +714,19 @@ parse_printf_arg_fmt (const char *fmt0, struct printf_args *args) + case 's': + args->count++; + break; ++ case '%': ++ /* "%%" is the escape sequence to output "%". */ ++ break; ++ default: ++ if (fmt_check) ++ return grub_error (GRUB_ERR_BAD_ARGUMENT, "unexpected format"); ++ break; + } + } + ++ if (fmt_check && args->count > max_args) ++ return grub_error (GRUB_ERR_BAD_ARGUMENT, "too many arguments"); ++ + if (args->count <= ARRAY_SIZE (args->prealloc)) + args->ptr = args->prealloc; + else +@@ -701,6 +734,9 @@ parse_printf_arg_fmt (const char *fmt0, struct printf_args *args) + args->ptr = grub_calloc (args->count, sizeof (args->ptr[0])); + if (!args->ptr) + { ++ if (fmt_check) ++ return grub_errno; ++ + grub_errno = GRUB_ERR_NONE; + args->ptr = args->prealloc; + args->count = ARRAY_SIZE (args->prealloc); +@@ -791,6 +827,8 @@ parse_printf_arg_fmt (const char *fmt0, struct printf_args *args) + break; + } + } ++ ++ return GRUB_ERR_NONE; + } + + static void +@@ -798,7 +836,7 @@ parse_printf_args (const char *fmt0, struct printf_args *args, va_list args_in) + { + grub_size_t n; + +- parse_printf_arg_fmt (fmt0, args); ++ parse_printf_arg_fmt (fmt0, args, 0, 0); + + for (n = 0; n < args->count; n++) + switch (args->ptr[n].type) +@@ -1105,6 +1143,42 @@ grub_xasprintf (const char *fmt, ...) + return ret; + } + ++grub_err_t ++grub_printf_fmt_check (const char *fmt, const char *fmt_expected) ++{ ++ struct printf_args args_expected, args_fmt; ++ grub_err_t ret; ++ grub_size_t n; ++ ++ if (fmt == NULL || fmt_expected == NULL) ++ return grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid format"); ++ ++ ret = parse_printf_arg_fmt (fmt_expected, &args_expected, 1, GRUB_SIZE_MAX); ++ if (ret != GRUB_ERR_NONE) ++ return ret; ++ ++ /* Limit parsing to the number of expected arguments. */ ++ ret = parse_printf_arg_fmt (fmt, &args_fmt, 1, args_expected.count); ++ if (ret != GRUB_ERR_NONE) ++ { ++ free_printf_args (&args_expected); ++ return ret; ++ } ++ ++ for (n = 0; n < args_fmt.count; n++) ++ if (args_fmt.ptr[n].type != args_expected.ptr[n].type) ++ { ++ ret = grub_error (GRUB_ERR_BAD_ARGUMENT, "arguments types do not match"); ++ break; ++ } ++ ++ free_printf_args (&args_expected); ++ free_printf_args (&args_fmt); ++ ++ return ret; ++} ++ ++ + /* Abort GRUB. This function does not return. */ + static void __attribute__ ((noreturn)) + grub_abort (void) +diff --git a/include/grub/misc.h b/include/grub/misc.h +index ee48eb7..d1c5709 100644 +--- a/include/grub/misc.h ++++ b/include/grub/misc.h +@@ -440,6 +440,22 @@ grub_error_load (const struct grub_error_saved *save) + grub_errno = save->grub_errno; + } + ++/* ++ * grub_printf_fmt_checks() a fmt string for printf() against an expected ++ * format. It is intended for cases where the fmt string could come from ++ * an outside source and cannot be trusted. ++ * ++ * While expected fmt accepts a printf() format string it should be kept ++ * as simple as possible. The printf() format strings with positional ++ * parameters are NOT accepted, neither for fmt nor for fmt_expected. ++ * ++ * The fmt is accepted if it has equal or less arguments than fmt_expected ++ * and if the type of all arguments match. ++ * ++ * Returns GRUB_ERR_NONE if fmt is acceptable. ++ */ ++grub_err_t EXPORT_FUNC (grub_printf_fmt_check) (const char *fmt, const char *fmt_expected); ++ + #if BOOT_TIME_STATS + struct grub_boot_time + { +-- +2.14.2 + diff --git a/boot/grub2/0147-gfxmenu-gui-Check-printf-format-in-the-gui_progress_.patch b/boot/grub2/0147-gfxmenu-gui-Check-printf-format-in-the-gui_progress_.patch new file mode 100644 index 00000000..e0acb07c --- /dev/null +++ b/boot/grub2/0147-gfxmenu-gui-Check-printf-format-in-the-gui_progress_.patch @@ -0,0 +1,62 @@ +From 42facd577231cf5ffe4c7128fed15b7e7d99cbca Mon Sep 17 00:00:00 2001 +From: Thomas Frauendorfer | Miray Software +Date: Tue, 4 Aug 2020 13:49:51 +0200 +Subject: [PATCH] gfxmenu/gui: Check printf() format in the gui_progress_bar + and gui_label + +The gui_progress_bar and gui_label components can display the timeout +value. The format string can be set through a theme file. This patch +adds a validation step to the format string. + +If a user loads a theme file into the GRUB without this patch then +a GUI label with the following settings + + + label { + ... + id = "__timeout__" + text = "%s" + } + +will interpret the current timeout value as string pointer and print the +memory at that position on the screen. It is not desired behavior. + +Signed-off-by: Thomas Frauendorfer | Miray Software +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/gfxmenu/gui_label.c | 4 ++++ + grub-core/gfxmenu/gui_progress_bar.c | 3 +++ + 2 files changed, 7 insertions(+) + +diff --git a/grub-core/gfxmenu/gui_label.c b/grub-core/gfxmenu/gui_label.c +index a4c8178..1c19054 100644 +--- a/grub-core/gfxmenu/gui_label.c ++++ b/grub-core/gfxmenu/gui_label.c +@@ -193,6 +193,10 @@ label_set_property (void *vself, const char *name, const char *value) + else if (grub_strcmp (value, "@KEYMAP_SHORT@") == 0) + value = _("enter: boot, `e': options, `c': cmd-line"); + /* FIXME: Add more templates here if needed. */ ++ ++ if (grub_printf_fmt_check(value, "%d") != GRUB_ERR_NONE) ++ value = ""; /* Unsupported format. */ ++ + self->template = grub_strdup (value); + self->text = grub_xasprintf (value, self->value); + } +diff --git a/grub-core/gfxmenu/gui_progress_bar.c b/grub-core/gfxmenu/gui_progress_bar.c +index b128f08..ace85a1 100644 +--- a/grub-core/gfxmenu/gui_progress_bar.c ++++ b/grub-core/gfxmenu/gui_progress_bar.c +@@ -348,6 +348,9 @@ progress_bar_set_property (void *vself, const char *name, const char *value) + Please use the shortest form available in you language. */ + value = _("%ds"); + ++ if (grub_printf_fmt_check(value, "%d") != GRUB_ERR_NONE) ++ value = ""; /* Unsupported format. */ ++ + self->template = grub_strdup (value); + } + else if (grub_strcmp (name, "font") == 0) +-- +2.14.2 + diff --git a/boot/grub2/0148-templates-Disable-the-os-prober-by-default.patch b/boot/grub2/0148-templates-Disable-the-os-prober-by-default.patch new file mode 100644 index 00000000..7cc89c2d --- /dev/null +++ b/boot/grub2/0148-templates-Disable-the-os-prober-by-default.patch @@ -0,0 +1,87 @@ +From e346414725a70e5c74ee87ca14e580c66f517666 Mon Sep 17 00:00:00 2001 +From: Alex Burmashev +Date: Tue, 16 Feb 2021 11:12:12 +0100 +Subject: [PATCH] templates: Disable the os-prober by default + +The os-prober is enabled by default what may lead to potentially +dangerous use cases and borderline opening attack vectors. This +patch disables the os-prober, adds warning messages and updates +GRUB_DISABLE_OS_PROBER configuration option documentation. This +way we make it clear that the os-prober usage is not recommended. + +Simplistic nature of this change allows downstream vendors, who +really want os-prober to be enabled out of the box in their +relevant products, easily revert to it's old behavior. + +Reported-by: NyankoSec (, https://twitter.com/NyankoSec), + working with SSD Secure Disclosure +Signed-off-by: Alex Burmashev +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + docs/grub.texi | 18 ++++++++++-------- + util/grub.d/30_os-prober.in | 5 ++++- + 2 files changed, 14 insertions(+), 9 deletions(-) + +diff --git a/docs/grub.texi b/docs/grub.texi +index e302797..45a9f80 100644 +--- a/docs/grub.texi ++++ b/docs/grub.texi +@@ -1481,10 +1481,13 @@ boot sequence. If you have problems, set this option to @samp{text} and + GRUB will tell Linux to boot in normal text mode. + + @item GRUB_DISABLE_OS_PROBER +-Normally, @command{grub-mkconfig} will try to use the external +-@command{os-prober} program, if installed, to discover other operating +-systems installed on the same system and generate appropriate menu entries +-for them. Set this option to @samp{true} to disable this. ++The @command{grub-mkconfig} has a feature to use the external ++@command{os-prober} program to discover other operating systems installed on ++the same machine and generate appropriate menu entries for them. It is disabled ++by default since automatic and silent execution of @command{os-prober}, and ++creating boot entries based on that data, is a potential attack vector. Set ++this option to @samp{false} to enable this feature in the ++@command{grub-mkconfig} command. + + @item GRUB_OS_PROBER_SKIP_LIST + List of space-separated FS UUIDs of filesystems to be ignored from os-prober +@@ -1812,10 +1815,9 @@ than zero; otherwise 0. + @section Multi-boot manual config + + Currently autogenerating config files for multi-boot environments depends on +-os-prober and has several shortcomings. While fixing it is scheduled for the +-next release, meanwhile you can make use of the power of GRUB syntax and do it +-yourself. A possible configuration is detailed here, feel free to adjust to your +-needs. ++os-prober and has several shortcomings. Due to that it is disabled by default. ++It is advised to use the power of GRUB syntax and do it yourself. A possible ++configuration is detailed here, feel free to adjust to your needs. + + First create a separate GRUB partition, big enough to hold GRUB. Some of the + following entries show how to load OS installer images from this same partition, +diff --git a/util/grub.d/30_os-prober.in b/util/grub.d/30_os-prober.in +index 515a68c..99de043 100644 +--- a/util/grub.d/30_os-prober.in ++++ b/util/grub.d/30_os-prober.in +@@ -26,7 +26,8 @@ export TEXTDOMAINDIR="@localedir@" + + . "$pkgdatadir/grub-mkconfig_lib" + +-if [ "x${GRUB_DISABLE_OS_PROBER}" = "xtrue" ]; then ++if [ "x${GRUB_DISABLE_OS_PROBER}" = "xfalse" ]; then ++ gettext_printf "os-prober will not be executed to detect other bootable partitions.\nSystems on them will not be added to the GRUB boot configuration.\nCheck GRUB_DISABLE_OS_PROBER documentation entry.\n" + exit 0 + fi + +@@ -39,6 +40,8 @@ OSPROBED="`os-prober | tr ' ' '^' | paste -s -d ' '`" + if [ -z "${OSPROBED}" ] ; then + # empty os-prober output, nothing doing + exit 0 ++else ++ grub_warn "$(gettext_printf "os-prober was executed to detect other bootable partitions.\nIt's output will be used to detect bootable binaries on them and create new boot entries.")" + fi + + osx_entry() { +-- +2.14.2 + diff --git a/boot/grub2/0149-kern-mm-Fix-grub_debug_calloc-compilation-error.patch b/boot/grub2/0149-kern-mm-Fix-grub_debug_calloc-compilation-error.patch new file mode 100644 index 00000000..bda05073 --- /dev/null +++ b/boot/grub2/0149-kern-mm-Fix-grub_debug_calloc-compilation-error.patch @@ -0,0 +1,33 @@ +From a9d8de960834f376087856f9d60a214b47c76f61 Mon Sep 17 00:00:00 2001 +From: Marco A Benatto +Date: Tue, 9 Feb 2021 12:33:06 -0300 +Subject: [PATCH] kern/mm: Fix grub_debug_calloc() compilation error + +Fix compilation error due to missing parameter to +grub_printf() when MM_DEBUG is defined. + +Fixes: 64e26162e (calloc: Make sure we always have an overflow-checking calloc() available) + +Signed-off-by: Marco A Benatto +Reviewed-by: Daniel Kiper +Signed-off-by: Stefan Sørensen +--- + grub-core/kern/mm.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/kern/mm.c b/grub-core/kern/mm.c +index f2822a8..c070afc 100644 +--- a/grub-core/kern/mm.c ++++ b/grub-core/kern/mm.c +@@ -594,7 +594,7 @@ grub_debug_calloc (const char *file, int line, grub_size_t nmemb, grub_size_t si + + if (grub_mm_debug) + grub_printf ("%s:%d: calloc (0x%" PRIxGRUB_SIZE ", 0x%" PRIxGRUB_SIZE ") = ", +- file, line, size); ++ file, line, nmemb, size); + ptr = grub_calloc (nmemb, size); + if (grub_mm_debug) + grub_printf ("%p\n", ptr); +-- +2.14.2 + diff --git a/boot/grub2/Config.in b/boot/grub2/Config.in new file mode 100644 index 00000000..e4513399 --- /dev/null +++ b/boot/grub2/Config.in @@ -0,0 +1,123 @@ +config BR2_TARGET_GRUB2_ARCH_SUPPORTS + bool + default y if BR2_i386 + default y if BR2_x86_64 + default y if BR2_arm + default y if BR2_aarch64 + depends on BR2_USE_MMU + +config BR2_TARGET_GRUB2 + bool "grub2" + depends on BR2_TARGET_GRUB2_ARCH_SUPPORTS + depends on BR2_USE_WCHAR + help + GNU GRUB is a Multiboot boot loader. It was derived from + GRUB, the GRand Unified Bootloader, which was originally + designed and implemented by Erich Stefan Boleyn. GRUB 2 has + replaced what was formerly known as GRUB (i.e. version + 0.9x), which has, in turn, become GRUB Legacy. + + Amongst others, GRUB2 offers EFI support, which GRUB Legacy + doesn't provide. + + For additional notes on using Grub 2 with Buildroot, see + boot/grub2/readme.txt + + http://www.gnu.org/software/grub/ + +if BR2_TARGET_GRUB2 + +choice + prompt "Platform" + +config BR2_TARGET_GRUB2_I386_PC + bool "i386-pc" + depends on BR2_i386 || BR2_x86_64 + help + Select this option if the platform you're targetting is a + x86 or x86-64 legacy BIOS based platform. + +config BR2_TARGET_GRUB2_I386_EFI + bool "i386-efi" + depends on BR2_i386 || BR2_x86_64 + help + Select this option if the platform you're targetting has a + 32 bits EFI BIOS. Note that some x86-64 platforms use a 32 + bits EFI BIOS, and this option should be used in this case. + +config BR2_TARGET_GRUB2_X86_64_EFI + bool "x86-64-efi" + depends on BR2_x86_64 + help + Select this option if the platform you're targetting has a + 64 bits EFI BIOS. + +config BR2_TARGET_GRUB2_ARM_UBOOT + bool "arm-uboot" + depends on BR2_arm + help + Select this option if the platform you're targetting is an + ARM u-boot platform, and you want to boot Grub 2 as an u-boot + compatible image. + +config BR2_TARGET_GRUB2_ARM_EFI + bool "arm-efi" + depends on BR2_arm + help + Select this option if the platform you're targetting is an + ARM platform and you want to boot Grub 2 as an EFI + application. + +config BR2_TARGET_GRUB2_ARM64_EFI + bool "arm64-efi" + depends on BR2_aarch64 + help + Select this option if the platform you're targetting is an + Aarch64 platform and you want to boot Grub 2 as an EFI + application. + +endchoice + +if BR2_TARGET_GRUB2_I386_PC || BR2_TARGET_GRUB2_ARM_UBOOT + +config BR2_TARGET_GRUB2_BOOT_PARTITION + string "boot partition" + default "hd0,msdos1" + help + Specify the partition where the /boot/grub/grub.cfg file is + located. Use 'hd0,msdos1' for the first partition of the + first disk if using a legacy partition table, or 'hd0,gpt1' + if using GPT partition table. + +endif # BR2_TARGET_GRUB2_I386_PC || BR2_TARGET_GRUB2_ARM_UBOOT + +config BR2_TARGET_GRUB2_BUILTIN_MODULES + string "builtin modules" + default "boot linux ext2 fat squash4 part_msdos part_gpt normal biosdisk" if BR2_TARGET_GRUB2_I386_PC + default "boot linux ext2 fat squash4 part_msdos part_gpt normal efi_gop" \ + if BR2_TARGET_GRUB2_I386_EFI || BR2_TARGET_GRUB2_X86_64_EFI || \ + BR2_TARGET_GRUB2_ARM_EFI || BR2_TARGET_GRUB2_ARM64_EFI + default "linux ext2 fat part_msdos normal" if BR2_TARGET_GRUB2_ARM_UBOOT + +config BR2_TARGET_GRUB2_BUILTIN_CONFIG + string "builtin config" + help + Path to a Grub 2 configuration file that will be embedded + into the Grub image itself. This allows to set the root + device and other configuration parameters, but however menu + entries cannot be described in this embedded configuration. + +config BR2_TARGET_GRUB2_INSTALL_TOOLS + bool "install tools" + help + Install support tools to interact with GNU GRUB Multiboot + boot loader. + + This will also install the Grub 2 loadable modules to the + target. + +endif # BR2_TARGET_GRUB2 + +comment "grub2 needs a toolchain w/ wchar" + depends on BR2_TARGET_GRUB2_ARCH_SUPPORTS + depends on !BR2_USE_WCHAR diff --git a/boot/grub2/grub.cfg b/boot/grub2/grub.cfg new file mode 100644 index 00000000..bd3e3f00 --- /dev/null +++ b/boot/grub2/grub.cfg @@ -0,0 +1,6 @@ +set default="0" +set timeout="5" + +menuentry "Buildroot" { + linux /boot/bzImage root=/dev/sda1 rootwait console=tty1 +} diff --git a/boot/grub2/grub2.hash b/boot/grub2/grub2.hash new file mode 100644 index 00000000..338fe597 --- /dev/null +++ b/boot/grub2/grub2.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 e5292496995ad42dabe843a0192cf2a2c502e7ffcc7479398232b10a472df77d grub-2.04.tar.xz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/boot/grub2/grub2.mk b/boot/grub2/grub2.mk new file mode 100644 index 00000000..52e9199a --- /dev/null +++ b/boot/grub2/grub2.mk @@ -0,0 +1,180 @@ +################################################################################ +# +# grub2 +# +################################################################################ + +GRUB2_VERSION = 2.04 +GRUB2_SITE = http://ftp.gnu.org/gnu/grub +GRUB2_SOURCE = grub-$(GRUB2_VERSION).tar.xz +GRUB2_LICENSE = GPL-3.0+ +GRUB2_LICENSE_FILES = COPYING +GRUB2_DEPENDENCIES = host-bison host-flex host-grub2 +HOST_GRUB2_DEPENDENCIES = host-bison host-flex +GRUB2_INSTALL_IMAGES = YES + +# 0001-build-Fix-GRUB-i386-pc-build-with-Ubuntu-gcc.patch and 2021/03/02 +# security fixes (patches 0029-0149) +define GRUB2_AVOID_AUTORECONF + $(Q)touch $(@D)/Makefile.util.am + $(Q)touch $(@D)/aclocal.m4 + $(Q)touch $(@D)/Makefile.in + $(Q)touch $(@D)/configure +endef +GRUB2_POST_PATCH_HOOKS += GRUB2_AVOID_AUTORECONF +HOST_GRUB2_POST_PATCH_HOOKS += GRUB2_AVOID_AUTORECONF + +# 0002-yylex-Make-lexer-fatal-errors-actually-be-fatal.patch +GRUB2_IGNORE_CVES += CVE-2020-10713 +# 0005-calloc-Use-calloc-at-most-places.patch +GRUB2_IGNORE_CVES += CVE-2020-14308 +# 0006-malloc-Use-overflow-checking-primitives-where-we-do-.patch +GRUB2_IGNORE_CVES += CVE-2020-14309 CVE-2020-14310 CVE-2020-14311 +# 0019-script-Avoid-a-use-after-free-when-redefining-a-func.patch +GRUB2_IGNORE_CVES += CVE-2020-15706 +# 0028-linux-Fix-integer-overflows-in-initrd-size-handling.patch +GRUB2_IGNORE_CVES += CVE-2020-15707 +# 2021/03/02 security fixes - patches 0029-0149 +GRUB2_IGNORE_CVES += CVE-2020-25632 CVE-2020-25647 CVE-2020-27749 \ + CVE-2020-27779 CVE-2021-3418 CVE-2021-20225 CVE-2021-20233 +# 0039-acpi-Don-t-register-the-acpi-command-when-locked-dow.patch +GRUB2_IGNORE_CVES += CVE-2020-14372 +# CVE-2019-14865 is about a flaw in the grub2-set-bootflag tool, which +# doesn't exist upstream, but is added by the Redhat/Fedora +# packaging. Not applicable to Buildroot. +GRUB2_IGNORE_CVES += CVE-2019-14865 +# CVE-2020-15705 is related to a flaw in the use of the +# grub_linuxefi_secure_validate(), which was added by Debian/Ubuntu +# patches. The issue doesn't affect upstream Grub, and +# grub_linuxefi_secure_validate() is not implemented in the grub2 +# version available in Buildroot. +GRUB2_IGNORE_CVES += CVE-2020-15705 + +ifeq ($(BR2_TARGET_GRUB2_INSTALL_TOOLS),y) +GRUB2_INSTALL_TARGET = YES +else +GRUB2_INSTALL_TARGET = NO +endif +GRUB2_CPE_ID_VENDOR = gnu + +GRUB2_BUILTIN_MODULES = $(call qstrip,$(BR2_TARGET_GRUB2_BUILTIN_MODULES)) +GRUB2_BUILTIN_CONFIG = $(call qstrip,$(BR2_TARGET_GRUB2_BUILTIN_CONFIG)) +GRUB2_BOOT_PARTITION = $(call qstrip,$(BR2_TARGET_GRUB2_BOOT_PARTITION)) + +ifeq ($(BR2_TARGET_GRUB2_I386_PC),y) +GRUB2_IMAGE = $(BINARIES_DIR)/grub.img +GRUB2_CFG = $(TARGET_DIR)/boot/grub/grub.cfg +GRUB2_PREFIX = ($(GRUB2_BOOT_PARTITION))/boot/grub +GRUB2_TUPLE = i386-pc +GRUB2_TARGET = i386 +GRUB2_PLATFORM = pc +else ifeq ($(BR2_TARGET_GRUB2_I386_EFI),y) +GRUB2_IMAGE = $(BINARIES_DIR)/efi-part/EFI/BOOT/bootia32.efi +GRUB2_CFG = $(BINARIES_DIR)/efi-part/EFI/BOOT/grub.cfg +GRUB2_PREFIX = /EFI/BOOT +GRUB2_TUPLE = i386-efi +GRUB2_TARGET = i386 +GRUB2_PLATFORM = efi +else ifeq ($(BR2_TARGET_GRUB2_X86_64_EFI),y) +GRUB2_IMAGE = $(BINARIES_DIR)/efi-part/EFI/BOOT/bootx64.efi +GRUB2_CFG = $(BINARIES_DIR)/efi-part/EFI/BOOT/grub.cfg +GRUB2_PREFIX = /EFI/BOOT +GRUB2_TUPLE = x86_64-efi +GRUB2_TARGET = x86_64 +GRUB2_PLATFORM = efi +else ifeq ($(BR2_TARGET_GRUB2_ARM_UBOOT),y) +GRUB2_IMAGE = $(BINARIES_DIR)/boot-part/grub/grub.img +GRUB2_CFG = $(BINARIES_DIR)/boot-part/grub/grub.cfg +GRUB2_PREFIX = ($(GRUB2_BOOT_PARTITION))/boot/grub +GRUB2_TUPLE = arm-uboot +GRUB2_TARGET = arm +GRUB2_PLATFORM = uboot +else ifeq ($(BR2_TARGET_GRUB2_ARM_EFI),y) +GRUB2_IMAGE = $(BINARIES_DIR)/efi-part/EFI/BOOT/bootarm.efi +GRUB2_CFG = $(BINARIES_DIR)/efi-part/EFI/BOOT/grub.cfg +GRUB2_PREFIX = /EFI/BOOT +GRUB2_TUPLE = arm-efi +GRUB2_TARGET = arm +GRUB2_PLATFORM = efi +else ifeq ($(BR2_TARGET_GRUB2_ARM64_EFI),y) +GRUB2_IMAGE = $(BINARIES_DIR)/efi-part/EFI/BOOT/bootaa64.efi +GRUB2_CFG = $(BINARIES_DIR)/efi-part/EFI/BOOT/grub.cfg +GRUB2_PREFIX = /EFI/BOOT +GRUB2_TUPLE = arm64-efi +GRUB2_TARGET = aarch64 +GRUB2_PLATFORM = efi +endif + +# Grub2 is kind of special: it considers CC, LD and so on to be the +# tools to build the host programs and uses TARGET_CC, TARGET_CFLAGS, +# TARGET_CPPFLAGS, TARGET_LDFLAGS to build the bootloader itself. +# +# NOTE: TARGET_STRIP is overridden by !BR2_STRIP_strip, so always +# use the cross compile variant to ensure grub2 builds + +HOST_GRUB2_CONF_ENV = \ + CPP="$(HOSTCC) -E" + +GRUB2_CONF_ENV = \ + CPP="$(TARGET_CC) -E" \ + TARGET_CC="$(TARGET_CC)" \ + CFLAGS="$(TARGET_CFLAGS) -Os" \ + TARGET_CFLAGS="$(TARGET_CFLAGS) -Os" \ + CPPFLAGS="$(TARGET_CPPFLAGS) -Os -fno-stack-protector" \ + TARGET_CPPFLAGS="$(TARGET_CPPFLAGS) -Os -fno-stack-protector" \ + TARGET_LDFLAGS="$(TARGET_LDFLAGS) -Os" \ + TARGET_NM="$(TARGET_NM)" \ + TARGET_OBJCOPY="$(TARGET_OBJCOPY)" \ + TARGET_STRIP="$(TARGET_CROSS)strip" + +GRUB2_CONF_OPTS = \ + --target=$(GRUB2_TARGET) \ + --with-platform=$(GRUB2_PLATFORM) \ + --prefix=/ \ + --exec-prefix=/ \ + --disable-grub-mkfont \ + --enable-efiemu=no \ + ac_cv_lib_lzma_lzma_code=no \ + --enable-device-mapper=no \ + --enable-libzfs=no \ + --disable-werror + +HOST_GRUB2_CONF_OPTS = \ + --disable-grub-mkfont \ + --enable-efiemu=no \ + ac_cv_lib_lzma_lzma_code=no \ + --enable-device-mapper=no \ + --enable-libzfs=no \ + --disable-werror + +ifeq ($(BR2_TARGET_GRUB2_I386_PC),y) +define GRUB2_IMAGE_INSTALL_ELTORITO + cat $(HOST_DIR)/lib/grub/$(GRUB2_TUPLE)/cdboot.img $(GRUB2_IMAGE) > \ + $(BINARIES_DIR)/grub-eltorito.img +endef +endif + +define GRUB2_INSTALL_IMAGES_CMDS + mkdir -p $(dir $(GRUB2_IMAGE)) + $(HOST_DIR)/usr/bin/grub-mkimage \ + -d $(@D)/grub-core/ \ + -O $(GRUB2_TUPLE) \ + -o $(GRUB2_IMAGE) \ + -p "$(GRUB2_PREFIX)" \ + $(if $(GRUB2_BUILTIN_CONFIG),-c $(GRUB2_BUILTIN_CONFIG)) \ + $(GRUB2_BUILTIN_MODULES) + mkdir -p $(dir $(GRUB2_CFG)) + $(INSTALL) -D -m 0644 boot/grub2/grub.cfg $(GRUB2_CFG) + $(GRUB2_IMAGE_INSTALL_ELTORITO) +endef + +ifeq ($(GRUB2_PLATFORM),efi) +define GRUB2_EFI_STARTUP_NSH + echo $(notdir $(GRUB2_IMAGE)) > \ + $(BINARIES_DIR)/efi-part/startup.nsh +endef +GRUB2_POST_INSTALL_IMAGES_HOOKS += GRUB2_EFI_STARTUP_NSH +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/boot/grub2/readme.txt b/boot/grub2/readme.txt new file mode 100644 index 00000000..0282fbdd --- /dev/null +++ b/boot/grub2/readme.txt @@ -0,0 +1,190 @@ +Notes on using Grub2 for BIOS-based platforms +============================================= + +1. Create a disk image + dd if=/dev/zero of=disk.img bs=1M count=32 +2. Partition it (either legacy or GPT style partitions work) + cfdisk disk.img + - Create one partition, type Linux, for the root + filesystem. The only constraint is to make sure there + is enough free space *before* the first partition to + store Grub2. Leaving 1 MB of free space is safe. +3. Setup loop device and loop partitions + sudo losetup -f disk.img + sudo partx -a /dev/loop0 +4. Prepare the root partition + sudo mkfs.ext3 -L root /dev/loop0p1 + sudo mount /dev/loop0p1 /mnt + sudo tar -C /mnt -xf output/images/rootfs.tar + sudo umount /mnt +5. Install Grub2 + sudo ./output/host/sbin/grub-bios-setup \ + -b ./output/host/lib/grub/i386-pc/boot.img \ + -c ./output/images/grub.img -d . /dev/loop0 +6. Cleanup loop device + sudo partx -d /dev/loop0 + sudo losetup -d /dev/loop0 +7. Your disk.img is ready! + +Using genimage +-------------- + +If you use genimage to generate your complete image, +installing Grub can be tricky. Here is how to achieve Grub's +installation with genimage: + +partition boot { + in-partition-table = "no" + image = "path_to_boot.img" + offset = 0 + size = 512 +} +partition grub { + in-partition-table = "no" + image = "path_to_grub.img" + offset = 512 +} + +The result is not byte to byte identical to what +grub-bios-setup does but it works anyway. + +To test your BIOS image in Qemu +------------------------------- + +qemu-system-{i386,x86-64} -hda disk.img + +Notes on using Grub2 for x86/x86_64 EFI-based platforms +======================================================= + +1. Create a disk image + dd if=/dev/zero of=disk.img bs=1M count=32 +2. Partition it with GPT partitions + cgdisk disk.img + - Create a first partition, type EF00, for the + bootloader and kernel image + - Create a second partition, type 8300, for the root + filesystem. +3. Setup loop device and loop partitions + sudo losetup -f disk.img + sudo partx -a /dev/loop0 +4. Prepare the boot partition + sudo mkfs.vfat -n boot /dev/loop0p1 + sudo mount /dev/loop0p1 /mnt + sudo cp -a output/images/efi-part/* /mnt/ + sudo cp output/images/bzImage /mnt/ + sudo umount /mnt +5. Prepare the root partition + sudo mkfs.ext3 -L root /dev/loop0p2 + sudo mount /dev/loop0p2 /mnt + sudo tar -C /mnt -xf output/images/rootfs.tar + sudo umount /mnt +6 Cleanup loop device + sudo partx -d /dev/loop0 + sudo losetup -d /dev/loop0 +7. Your disk.img is ready! + +To test your i386/x86-64 EFI image in Qemu +------------------------------------------ + +1. Download the EFI BIOS for Qemu + Version IA32 or X64 depending on the chosen Grub2 + platform (i386-efi vs. x86-64-efi) + https://www.kraxel.org/repos/jenkins/edk2/ + (or use one provided by your distribution as OVMF) +2. Extract, and rename OVMF.fd to bios.bin and + CirrusLogic5446.rom to vgabios-cirrus.bin. +3. qemu-system-{i386,x86-64} -L ovmf-dir/ -hda disk.img +4. Make sure to pass pci=nocrs to the kernel command line, + to workaround a bug in the EFI BIOS regarding the + EFI framebuffer. + +Notes on using Grub2 for ARM u-boot-based platforms +=================================================== + +The following steps show how to use the Grub2 arm-uboot platform +support in the simplest way possible and with a single +buildroot-generated filesystem. + + 1. Load qemu_arm_vexpress_defconfig + + 2. Enable u-boot with the vexpress_ca9x4 board name and with + u-boot.elf image format. + + 3. Enable grub2 for the arm-uboot platform. + + 4. Enable "Install kernel image to /boot in target" in the kernel + menu to populate a /boot directory with zImage in it. + + 5. The upstream u-boot vexpress_ca9x4 doesn't have CONFIG_API enabled + by default, which is required. + + Before building, patch u-boot (for example, make u-boot-extract to + edit the source before building) file + include/configs/vexpress_common.h to define: + + #define CONFIG_API + #define CONFIG_SYS_MMC_MAX_DEVICE 1 + + 6. Create a custom grub2 config file with the following contents and + set its path in BR2_TARGET_GRUB2_CFG: + + set default="0" + set timeout="5" + + menuentry "Buildroot" { + set root='(hd0)' + linux /boot/zImage root=/dev/mmcblk0 console=ttyAMA0 + devicetree /boot/vexpress-v2p-ca9.dtb + } + + 7. Create a custom builtin config file with the following contents + and set its path in BR2_TARGET_GRUB2_BUILTIN_CONFIG: + + set root=(hd0) + set prefix=/boot/grub + + 8. Create a custom post-build script which copies files from + ${BINARIES_DIR}/boot-part to $(TARGET_DIR)/boot (set its path in + BR2_ROOTFS_POST_BUILD_SCRIPT): + + #!/bin/sh + cp -r ${BINARIES_DIR}/boot-part/* ${TARGET_DIR}/boot/ + + 9. make + +10. Run qemu with: + + qemu-system-arm -M vexpress-a9 -kernel output/images/u-boot -m 1024 \ + -nographic -sd output/images/rootfs.ext2 + +11. In u-boot, stop at the prompt and run grub2 with: + + => ext2load mmc 0:0 ${loadaddr} /boot/grub/grub.img + => bootm + +12. This should bring the grub2 menu, upon which selecting the "Buildroot" + entry should boot Linux. + + +Notes on using Grub2 for Aarch64 EFI-based platforms +==================================================== + +The following steps show how to use the Grub2 arm64-efi platform, +using qemu and EFI firmware built for qemu. + + 1. Load aarch64_efi_defconfig + + 2. make + + 3. Download the EFI firmware for qemu aarch64 + https://www.kraxel.org/repos/jenkins/edk2/ + (or use one provided by your distribution as OVMF-aarch64 or AAVMF) + + 4. Run qemu with: + + qemu-system-aarch64 -M virt -cpu cortex-a57 -m 512 -nographic \ + -bios /QEMU_EFI.fd -hda output/images/disk.img \ + -netdev user,id=eth0 -device virtio-net-device,netdev=eth0 + + 5. This should bring the grub2 menu, upon which selecting the + "Buildroot" entry should boot Linux. diff --git a/boot/gummiboot/0001-Allow-building-with-newer-glibc-versions.patch b/boot/gummiboot/0001-Allow-building-with-newer-glibc-versions.patch new file mode 100644 index 00000000..b35cd499 --- /dev/null +++ b/boot/gummiboot/0001-Allow-building-with-newer-glibc-versions.patch @@ -0,0 +1,31 @@ +From 40ab4167b5a45c772304a879c71b47d54de3b0e3 Mon Sep 17 00:00:00 2001 +From: Esben Haabendal +Date: Wed, 20 Mar 2019 14:19:40 +0100 +Subject: [PATCH] Allow building with newer glibc versions + +Newer glibc versions does not include sys/sysmacros.h from sys/types.h +anymore. Including it unconditionally should be safe. + +See https://sourceware.org/ml/libc-alpha/2015-11/msg00253.html for why +this was done. + +Signed-off-by: Esben Haabendal +--- + src/setup/setup.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/setup/setup.c b/src/setup/setup.c +index 6a4275a2ae36..53429375a146 100644 +--- a/src/setup/setup.c ++++ b/src/setup/setup.c +@@ -37,6 +37,7 @@ + #include + #include + #include ++#include + + #include "efivars.h" + +-- +2.21.0 + diff --git a/boot/gummiboot/0002-Fix-linking-for-non-host-compatible-targets.patch b/boot/gummiboot/0002-Fix-linking-for-non-host-compatible-targets.patch new file mode 100644 index 00000000..7104a581 --- /dev/null +++ b/boot/gummiboot/0002-Fix-linking-for-non-host-compatible-targets.patch @@ -0,0 +1,54 @@ +From fc05ced797b87286b8ec7303fe32bf200a072972 Mon Sep 17 00:00:00 2001 +From: Esben Haabendal +Date: Mon, 18 Mar 2019 11:14:31 +0100 +Subject: [PATCH] Fix linking for non-host compatible targets + +Without this, gummiboot build system will use host 'ld' when linking +target binary, which is obviously not a good idea. + +Signed-off-by: Esben Haabendal +--- + Makefile.am | 4 ++-- + configure.ac | 4 ++++ + 2 files changed, 6 insertions(+), 2 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 6568a355ed74..9051dd44edd9 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -142,7 +142,7 @@ $(top_builddir)/src/efi/%.o: $(top_srcdir)/src/efi/%.c $(addprefix $(top_srcdir) + $(AM_V_CC)$(EFI_CC) $(efi_cppflags) $(efi_cflags) -c $< -o $@ + + $(gummiboot_solib): $(gummiboot_objects) +- $(AM_V_CCLD)$(LD) $(efi_ldflags) $(gummiboot_objects) \ ++ $(AM_V_CCLD)$(EFI_LD) $(efi_ldflags) $(gummiboot_objects) \ + -o $@ -lefi -lgnuefi $(shell $(CC) -print-libgcc-file-name); \ + nm -D -u $@ | grep ' U ' && exit 1 || : + .DELETE_ON_ERROR: $(gummboot_solib) +@@ -177,7 +177,7 @@ $(top_builddir)/src/efi/%.o: $(top_srcdir)/src/efi/%.c $(addprefix $(top_srcdir) + $(AM_V_CC)$(EFI_CC) $(efi_cppflags) $(efi_cflags) -c $< -o $@ + + $(stub_solib): $(stub_objects) +- $(AM_V_CCLD)$(LD) $(efi_ldflags) $(stub_objects) \ ++ $(AM_V_CCLD)$(EFI_LD) $(efi_ldflags) $(stub_objects) \ + -o $@ -lefi -lgnuefi $(shell $(CC) -print-libgcc-file-name); \ + nm -D -u $@ | grep ' U ' && exit 1 || : + .DELETE_ON_ERROR: $(gummboot_solib) +diff --git a/configure.ac b/configure.ac +index 27bbe1d73396..b948696c220b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -40,6 +40,10 @@ dnl Don't try to use things like -std=c99 for efi compilation + EFI_CC=$CC + AC_SUBST([EFI_CC]) + ++dnl Allow specifying linker compatible with the compiler ++EFI_LD=$LD ++AC_SUBST([EFI_LD]) ++ + AC_PROG_CC_C99 + AM_PROG_CC_C_O + AC_PROG_GCC_TRADITIONAL +-- +2.21.0 + diff --git a/boot/gummiboot/Config.in b/boot/gummiboot/Config.in new file mode 100644 index 00000000..1b5c4279 --- /dev/null +++ b/boot/gummiboot/Config.in @@ -0,0 +1,24 @@ +config BR2_TARGET_GUMMIBOOT + bool "gummiboot" + depends on BR2_i386 || BR2_x86_64 + depends on BR2_PACKAGE_GNU_EFI_ARCH_SUPPORTS + select BR2_PACKAGE_GNU_EFI + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBBLKID + help + gummiboot is a simple UEFI boot manager which executes + configured EFI images. The default entry is selected by a + configured pattern (glob) or an on-screen menu. + + gummiboot operates on the EFI System Partition (ESP) + only. Configuration file fragments, kernels, initrds, other + EFI images need to reside on the ESP. Linux kernels need to + be built with CONFIG_EFI_STUB to be able to be directly + executed as an EFI image. + + See the Grub2 help text for details on preparing an EFI + capable disk image using Gummiboot: the instructions are + exactly the same, except that the Gummiboot configuration + files will be located in /loader/ inside the EFI partition. + + http://freedesktop.org/wiki/Software/gummiboot/ diff --git a/boot/gummiboot/buildroot.conf b/boot/gummiboot/buildroot.conf new file mode 100644 index 00000000..8a6f02e5 --- /dev/null +++ b/boot/gummiboot/buildroot.conf @@ -0,0 +1,4 @@ +title Buildroot +version 1 +linux /bzImage +options console=ttyS0 root=/dev/sda2 diff --git a/boot/gummiboot/gummiboot.mk b/boot/gummiboot/gummiboot.mk new file mode 100644 index 00000000..748e8703 --- /dev/null +++ b/boot/gummiboot/gummiboot.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# gummiboot +# +################################################################################ + +GUMMIBOOT_SITE = https://gitlab.freedesktop.org/archived-projects/gummiboot.git +GUMMIBOOT_SITE_METHOD = git +GUMMIBOOT_VERSION = 2bcd919c681c952eb867ef1bdb458f1bc49c2d55 +GUMMIBOOT_LICENSE = LGPL-2.1+ +GUMMIBOOT_LICENSE_FILES = LICENSE + +# The git archive does not have the autoconf/automake stuff generated. +GUMMIBOOT_AUTORECONF = YES +GUMMIBOOT_DEPENDENCIES = gnu-efi host-pkgconf util-linux +GUMMIBOOT_INSTALL_TARGET = NO +GUMMIBOOT_INSTALL_IMAGES = YES + +ifeq ($(BR2_i386),y) +GUMMIBOOT_IMGARCH = ia32 +else ifeq ($(BR2_x86_64),y) +GUMMIBOOT_IMGARCH = x64 +endif + +GUMMIBOOT_CONF_OPTS = \ + --host=$(BR2_ARCH) \ + --with-efi-libdir=$(STAGING_DIR)/usr/lib \ + --with-efi-ldsdir=$(STAGING_DIR)/usr/lib \ + --with-efi-includedir=$(STAGING_DIR)/usr/include \ + --disable-manpages + +define GUMMIBOOT_INSTALL_IMAGES_CMDS + $(INSTALL) -D -m 0644 $(@D)/gummiboot$(GUMMIBOOT_IMGARCH).efi \ + $(BINARIES_DIR)/efi-part/EFI/BOOT/boot$(GUMMIBOOT_IMGARCH).efi + echo "boot$(GUMMIBOOT_IMGARCH).efi" > \ + $(BINARIES_DIR)/efi-part/startup.nsh + $(INSTALL) -D -m 0644 boot/gummiboot/loader.conf \ + $(BINARIES_DIR)/efi-part/loader/loader.conf + $(INSTALL) -D -m 0644 boot/gummiboot/buildroot.conf \ + $(BINARIES_DIR)/efi-part/loader/entries/buildroot.conf +endef + +$(eval $(autotools-package)) diff --git a/boot/gummiboot/loader.conf b/boot/gummiboot/loader.conf new file mode 100644 index 00000000..93b77b8f --- /dev/null +++ b/boot/gummiboot/loader.conf @@ -0,0 +1,2 @@ +timeout 3 +default buildroot diff --git a/boot/lpc32xxcdl/Config.in b/boot/lpc32xxcdl/Config.in new file mode 100644 index 00000000..97137aa7 --- /dev/null +++ b/boot/lpc32xxcdl/Config.in @@ -0,0 +1,10 @@ +config BR2_TARGET_LPC32XXCDL + bool "LPC32XX CDL (kickstart and S1L)" + depends on BR2_arm926t + +if BR2_TARGET_LPC32XXCDL + +config BR2_TARGET_LPC32XXCDL_BOARDNAME + string "LPC32xx board name" + +endif #BR2_TARGET_LPC32XXCDL diff --git a/boot/lpc32xxcdl/lpc32xxcdl-2.11-compiler_name.patch b/boot/lpc32xxcdl/lpc32xxcdl-2.11-compiler_name.patch new file mode 100644 index 00000000..6aecbdeb --- /dev/null +++ b/boot/lpc32xxcdl/lpc32xxcdl-2.11-compiler_name.patch @@ -0,0 +1,52 @@ +Use CROSS_COMPILE as compiler name and stop using libc + +Signed-off-by: Alexandre Belloni +--- + makerule/lpc32xx/make.lpc32xx.gnu | 22 +++++++++++----------- + 1 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/makerule/lpc32xx/make.lpc32xx.gnu b/makerule/lpc32xx/make.lpc32xx.gnu +index 1014c28..3277d99 100644 +--- a/makerule/lpc32xx/make.lpc32xx.gnu ++++ b/makerule/lpc32xx/make.lpc32xx.gnu +@@ -27,19 +27,19 @@ CFLAGS += -mno-sched-prolog -fno-hosted -mno-thumb-interwork -ffunction-sectio + CFLAGS += -I$(CSP_INC_DIR) -I$(BSP_INC_DIR) -I$(GEN_INC_DIR) + AFLAGS = -mcpu=arm926ej-s + AFLAGS += -I$(CSP_INC_DIR) -I$(BSP_INC_DIR) -I$(GEN_INC_DIR) +-CC = arm-none-eabi-gcc +-AS = arm-none-eabi-as +-AR = arm-none-eabi-ar -r +-LD = arm-none-eabi-gcc +-NM = arm-none-eabi-nm +-OBJDUMP = arm-none-eabi-objdump +-OBJCOPY = arm-none-eabi-objcopy +-READELF = arm-none-eabi-readelf ++CC = $(CROSS_COMPILE)gcc ++AS = $(CROSS_COMPILE)as ++AR = $(CROSS_COMPILE)ar -r ++LD = $(CROSS_COMPILE)gcc ++NM = $(CROSS_COMPILE)nm ++OBJDUMP = $(CROSS_COMPILE)objdump ++OBJCOPY = $(CROSS_COMPILE)objcopy ++READELF = $(CROSS_COMPILE)readelf + LDFLAGS += -Wl,--gc-sections + + LK = -static + LK += -Wl,--start-group $(TARGET_CSP_LIB) $(TARGET_BSP_LIB) $(TARGET_GEN_LIB) +-LK += -lgcc -lc -lg -lm -lstdc++ -lsupc++ ++LK += -nostdlib -lgcc #-lc -lg -lm -lstdc++ -lsupc++ + LK += -Wl,--end-group + MAP = -Xlinker -Map -Xlinker + LDESC = -Xlinker -T +@@ -47,6 +47,6 @@ ENTRY = -e + BIN = -bin + EXT = .elf + LEXT = +-ELFTOREC =arm-none-eabi-objcopy -O srec --strip-all --verbose +-ELFTOBIN =arm-none-eabi-objcopy -I elf32-littlearm -O binary --strip-all --verbose ++ELFTOREC = $(OBJCOPY) -O srec --strip-all --verbose ++ELFTOBIN = $(OBJCOPY) -I elf32-littlearm -O binary --strip-all --verbose + REC =.srec +-- +1.7.7.3 + diff --git a/boot/lpc32xxcdl/lpc32xxcdl-2.11-delete_redundant_files.patch b/boot/lpc32xxcdl/lpc32xxcdl-2.11-delete_redundant_files.patch new file mode 100644 index 00000000..39966f01 --- /dev/null +++ b/boot/lpc32xxcdl/lpc32xxcdl-2.11-delete_redundant_files.patch @@ -0,0 +1,969 @@ +Remove duplicated files to stop the linker from complaining about duplicate +symbols + +Signed-off-by: Alexandre Belloni +--- +--- a/csps/lpc32xx/bsps/fdi3250/startup/examples/s1l/sysapi_timer.c 2011-10-05 19:10:37.000000000 +0200 ++++ /dev/null 2012-01-01 16:39:47.918907000 +0100 +@@ -1,212 +0,0 @@ +-/*********************************************************************** +- * $Id:: sysapi_timer.c 3394 2010-05-06 17:56:27Z usb10132 $ +- * +- * Project: Time support functions +- * +- * Description: +- * Implements the following functions required for the S1L API +- * time_init +- * time_reset +- * time_start +- * time_stop +- * time_get +- * time_get_rate +- * +- *********************************************************************** +- * Software that is described herein is for illustrative purposes only +- * which provides customers with programming information regarding the +- * products. This software is supplied "AS IS" without any warranties. +- * NXP Semiconductors assumes no responsibility or liability for the +- * use of the software, conveys no license or title under any patent, +- * copyright, or mask work right to the product. NXP Semiconductors +- * reserves the right to make changes in the software without +- * notification. NXP Semiconductors also make no representation or +- * warranty that such application will be suitable for the specified +- * use without further testing or modification. +- **********************************************************************/ +- +-#include "s1l_sys_inf.h" +-#include "lpc32xx_intc_driver.h" +-#include "lpc32xx_timer_driver.h" +- +-static UNS_64 base_rate; +-static INT_32 tdev = 0; +- +-/*********************************************************************** +- * +- * Function: time_init +- * +- * Purpose: Initializes time system +- * +- * Processing: Initializes the system timer. +- * +- * Parameters: None +- * +- * Outputs: None +- * +- * Returns: 0 if the init failed, otherwise non-zero +- * +- * Notes: None +- * +- **********************************************************************/ +-INT_32 time_init(void) +-{ +- TMR_PSCALE_SETUP_T pscale; +- +- /* Open timer driver */ +- if (tdev == 0) +- { +- tdev = timer_open((void *) TIMER_CNTR0, 0); +- if (tdev != 0) +- { +- /* Use a prescale count to 100000 */ +- pscale.ps_tick_val = 100000; +- pscale.ps_us_val = 0; /* Not needed when ps_tick_val != 0 */ +- timer_ioctl(tdev, TMR_SETUP_PSCALE, (INT_32) &pscale); +- +- /* Get timer clock rate */ +- base_rate = (UNS_64) timer_ioctl(tdev, TMR_GET_STATUS, +- TMR_GET_CLOCK); +- } +- } +- +- return tdev; +-} +- +-/*********************************************************************** +- * +- * Function: time_reset +- * +- * Purpose: Resets system timer +- * +- * Processing: +- * See function. +- * +- * Parameters: None +- * +- * Outputs: None +- * +- * Returns: Nothing +- * +- * Notes: None +- * +- **********************************************************************/ +-void time_reset(void) +-{ +- if (tdev != 0) +- { +- timer_ioctl(tdev, TMR_RESET, 1); +- } +-} +- +-/*********************************************************************** +- * +- * Function: time_start +- * +- * Purpose: Starts system timer +- * +- * Processing: +- * See function. +- * +- * Parameters: None +- * +- * Outputs: None +- * +- * Returns: Nothing +- * +- * Notes: None +- * +- **********************************************************************/ +-void time_start(void) +-{ +- if (tdev != 0) +- { +- timer_ioctl(tdev, TMR_ENABLE, 1); +- } +-} +- +-/*********************************************************************** +- * +- * Function: time_stop +- * +- * Purpose: Stops system timer +- * +- * Processing: +- * See function. +- * +- * Parameters: None +- * +- * Outputs: None +- * +- * Returns: Nothing +- * +- * Notes: None +- * +- **********************************************************************/ +-void time_stop(void) +-{ +- if (tdev != 0) +- { +- timer_ioctl(tdev, TMR_ENABLE, 0); +- } +-} +- +-/*********************************************************************** +- * +- * Function: time_get +- * +- * Purpose: Returns current system time value +- * +- * Processing: +- * See function. +- * +- * Parameters: None +- * +- * Outputs: None +- * +- * Returns: The number of ticks of the timer counter +- * +- * Notes: None +- * +- **********************************************************************/ +-UNS_64 time_get(void) +-{ +- TMR_COUNTS_T tcounts; +- UNS_64 ticks = 0; +- +- if (tdev != 0) +- { +- timer_ioctl(tdev, TMR_GET_COUNTS, (INT_32) &tcounts); +- +- /* Compute number of timer ticks */ +- ticks = (UNS_64) tcounts.count_val * 100000; +- ticks = ticks + (UNS_64) tcounts.ps_count_val; +- } +- +- return ticks; +-} +- +-/*********************************************************************** +- * +- * Function: time_get_rate +- * +- * Purpose: +- * Returns base tick rate (ticks per second) of the time counter +- * +- * Processing: +- * See function. +- * +- * Parameters: None +- * +- * Outputs: None +- * +- * Returns: The timer tick rate (in ticks per second) +- * +- * Notes: None +- * +- **********************************************************************/ +-UNS_64 time_get_rate(void) +-{ +- return base_rate; +-} +- +--- a/csps/lpc32xx/bsps/fdi3250/startup/examples/s1l/sys_mmu_cmd_group.c 2011-10-05 19:10:37.000000000 +0200 ++++ /dev/null 2012-01-01 16:39:47.918907000 +0100 +@@ -1,746 +0,0 @@ +-/*********************************************************************** +- * $Id:: sys_mmu_cmd_group.c 3430 2010-05-07 17:39:08Z usb10132 $ +- * +- * Project: Command processor for peek, poke, dump, and fill +- * +- * Description: +- * Processes commands from the command prompt +- * +- *********************************************************************** +- * Software that is described herein is for illustrative purposes only +- * which provides customers with programming information regarding the +- * products. This software is supplied "AS IS" without any warranties. +- * NXP Semiconductors assumes no responsibility or liability for the +- * use of the software, conveys no license or title under any patent, +- * copyright, or mask work right to the product. NXP Semiconductors +- * reserves the right to make changes in the software without +- * notification. NXP Semiconductors also make no representation or +- * warranty that such application will be suitable for the specified +- * use without further testing or modification. +- **********************************************************************/ +- +-#include "lpc_arm922t_cp15_driver.h" +-#include "lpc_string.h" +-#include "startup.h" +-#include "s1l_cmds.h" +-#include "s1l_sys_inf.h" +- +-/* dcache command */ +-BOOL_32 cmd_dcache(void); +-static UNS_32 cmd_dcache_plist[] = +-{ +- (PARSE_TYPE_STR), /* The "dcache" command */ +- (PARSE_TYPE_DEC | PARSE_TYPE_END) +-}; +-static CMD_ROUTE_T core_dcache_cmd = +-{ +- (UNS_8 *) "dcache", +- cmd_dcache, +- (UNS_8 *) "Enables, disables, or flushes data cache", +- (UNS_8 *) "dcache [0(disable), 1(enable), 2(flush)]", +- cmd_dcache_plist, +- NULL +-}; +- +-/* icache command */ +-BOOL_32 cmd_icache(void); +-static UNS_32 cmd_icache_plist[] = +-{ +- (PARSE_TYPE_STR), /* The "icache" command */ +- (PARSE_TYPE_DEC | PARSE_TYPE_END) +-}; +-static CMD_ROUTE_T core_icache_cmd = +-{ +- (UNS_8 *) "icache", +- cmd_icache, +- (UNS_8 *) "Enables or disables instruction cache", +- (UNS_8 *) "icache [0(disable), 1(enable)]", +- cmd_icache_plist, +- NULL +-}; +- +-/* inval command */ +-BOOL_32 cmd_inval(void); +-static UNS_32 cmd_inval_plist[] = +-{ +- (PARSE_TYPE_STR | PARSE_TYPE_END) /* The "inval" command */ +-}; +-static CMD_ROUTE_T core_inval_cmd = +-{ +- (UNS_8 *) "inval", +- cmd_inval, +- (UNS_8 *) "Flushes data cache and invalidates instruction cache", +- (UNS_8 *) "inval", +- cmd_inval_plist, +- NULL +-}; +- +-/* mmuenab command */ +-BOOL_32 cmd_mmuenab(void); +-static UNS_32 cmd_mmuenab_plist[] = +-{ +- (PARSE_TYPE_STR), /* The "mmuenab" command */ +- (PARSE_TYPE_DEC | PARSE_TYPE_END) +-}; +-static CMD_ROUTE_T core_mmuenab_cmd = +-{ +- (UNS_8 *) "mmuenab", +- cmd_mmuenab, +- (UNS_8 *) "Enables or disables the MMU", +- (UNS_8 *) "mmuenab [0(disable), 1(enable)]", +- cmd_mmuenab_plist, +- NULL +-}; +- +-/* map command */ +-BOOL_32 cmd_map(void); +-static UNS_32 cmd_map_plist[] = +-{ +- (PARSE_TYPE_STR), /* The "map" command */ +- (PARSE_TYPE_HEX), +- (PARSE_TYPE_HEX), +- (PARSE_TYPE_DEC), +- (PARSE_TYPE_DEC | PARSE_TYPE_END), +-}; +-static CMD_ROUTE_T core_map_cmd = +-{ +- (UNS_8 *) "map", +- cmd_map, +- (UNS_8 *) "Maps a range of physical address sections to virtual addresses", +- (UNS_8 *) "map [virt hex addr][phy hex addr][sections][0(uncached), 1(cached), 2(unmap)]", +- cmd_map_plist, +- NULL +-}; +- +-/* mmuinfo command */ +-static BOOL_32 cmd_mmuinfo(void); +-static UNS_32 cmd_mmuinfo_plist[] = +-{ +- (PARSE_TYPE_STR | PARSE_TYPE_END) /* The "mmuinfo" command */ +-}; +-static CMD_ROUTE_T core_mmuinfo_cmd = +-{ +- (UNS_8 *) "mmuinfo", +- cmd_mmuinfo, +- (UNS_8 *) "Dumps page table and MMU info", +- (UNS_8 *) "mmuinfo", +- cmd_mmuinfo_plist, +- NULL +-}; +- +-/* MMU group */ +-static GROUP_LIST_T mmu_group = +-{ +- (UNS_8 *) "mmu", /* mmu group */ +- (UNS_8 *) "MMU command group", +- NULL, +- NULL +-}; +- +-static UNS_8 enabled_msg [] =" enabled"; +-static UNS_8 disabled_msg [] =" disabled"; +-static UNS_8 dcache_msg[] = "Data cache"; +-static UNS_8 icache_msg[] = "Instruction cache"; +-static UNS_8 pagetab_msg[] = "Page table at address: "; +-static UNS_8 slist_msg[] = "Type Virt Phy fl Size"; +-static UNS_8 mmu_msg [] ="MMU"; +-static UNS_8 cpage_msg[] = "Coarse page:"; +-static UNS_8 fpage_msg[] = "Fine page :"; +-static UNS_8 sect_msg[] = "Section :"; +-static UNS_8 mbytes_msg[] = "M"; +-static UNS_8 map1_err_msg[] = +- "Error : section addresses must be aligned on a 32-bit boundary"; +-static UNS_8 map2_err_msg[] = +- "Error : Number of sections exceeds address range of device"; +-static UNS_8 phya_msg[] = "Virtual address "; +-static UNS_8 mapped_msg[] = " mapped to physical address "; +-static UNS_8 unmapped_msg[] = " unmapped from physical address "; +-static UNS_8 cached_msg[] = " (cached)"; +-static UNS_8 inval_msg[] = " invalidated"; +-static UNS_8 caches_msg [] ="Caches"; +-static UNS_8 flushed_msg[] = " flushed"; +- +-/*********************************************************************** +- * +- * Function: show_section +- * +- * Purpose: Display section information +- * +- * Processing: +- * See function. +- * +- * Parameters: +- * mmu_reg : MMU settings for this section +- * virt_addr : Starting virtual address for this section +- * segs : Number of 1M segments for this section +- * +- * Outputs: None +- * +- * Returns: Nothing +- * +- * Notes: None +- * +- **********************************************************************/ +-static void show_section(UNS_32 mmu_reg, +- UNS_32 virt_addr, +- UNS_32 segs) +-{ +- UNS_8 straddr [16]; +- UNS_32 mmu_phy; +- +- if ((mmu_reg & ARM922T_L1D_TYPE_PG_SN_MASK) != +- ARM922T_L1D_TYPE_FAULT) +- { +- if ((mmu_reg & ARM922T_L1D_TYPE_PG_SN_MASK) == +- ARM922T_L1D_TYPE_CPAGE) +- { +- term_dat_out(cpage_msg); +- } +- else if ((mmu_reg & ARM922T_L1D_TYPE_PG_SN_MASK) == +- ARM922T_L1D_TYPE_FPAGE) +- { +- term_dat_out(fpage_msg); +- } +- else +- { +- term_dat_out(sect_msg); +- } +- +- /* Compute virtual address */ +- str_makehex(straddr, virt_addr, 8); +- term_dat_out(straddr); +- term_dat_out((UNS_8 *) " "); +- +- /* Compute mapped physical address */ +- if ((mmu_reg & ARM922T_L1D_TYPE_PG_SN_MASK) == +- ARM922T_L1D_TYPE_SECTION) +- { +- mmu_phy = mmu_reg & 0xFFF00000; +- } +- else +- { +- /* Don't compute addresses for non-sections */ +- mmu_phy = 0; +- } +- str_makehex(straddr, mmu_phy, 8); +- term_dat_out(straddr); +- term_dat_out((UNS_8 *) " "); +- +- /* MMU flags */ +- if ((mmu_reg & ARM922T_L1D_BUFFERABLE) != 0) +- { +- term_dat_out((UNS_8 *) "b"); +- } +- else +- { +- term_dat_out((UNS_8 *) " "); +- } +- if ((mmu_reg & ARM922T_L1D_CACHEABLE) != 0) +- { +- term_dat_out((UNS_8 *) "c"); +- } +- else +- { +- term_dat_out((UNS_8 *) " "); +- } +- term_dat_out((UNS_8 *) " "); +- +- /* Displays used megabytes */ +- str_makedec(straddr, segs); +- term_dat_out(straddr); +- term_dat_out_crlf(mbytes_msg); +- } +-} +- +-/*********************************************************************** +- * +- * Function: mmu_dumpinfo +- * +- * Purpose: Display MMU info +- * +- * Processing: +- * Display the MMU information, including enable status, cache +- * status, and page table. +- * +- * Parameters: None +- * +- * Outputs: None +- * +- * Returns: TRUE if the command was processed, otherwise FALSE +- * +- * Notes: None +- * +- **********************************************************************/ +-static BOOL_32 mmu_dumpinfo(void) +-{ +- UNS_32 segsz, last_mmu_reg, mmu_vrt, mmu_reg, mmu_vrtsav = 0, *pt; +- UNS_32 mlast_mmu_reg, mmmu_reg; +- int idx; +- UNS_8 hexaddr [16]; +- +- term_dat_out(mmu_msg); +- if (cp15_mmu_enabled() == FALSE) +- { +- term_dat_out_crlf(disabled_msg); +- } +- else +- { +- term_dat_out_crlf(enabled_msg); +- +- /* Get MMU control register word */ +- mmu_reg = cp15_get_mmu_control_reg(); +- +- /* Instruction cache status */ +- term_dat_out(icache_msg); +- if ((mmu_reg & ARM922T_MMU_CONTROL_I) == 0) +- { +- term_dat_out_crlf(disabled_msg); +- } +- else +- { +- term_dat_out_crlf(enabled_msg); +- } +- +- /* Data cache status */ +- term_dat_out(dcache_msg); +- if ((mmu_reg & ARM922T_MMU_CONTROL_C) == 0) +- { +- term_dat_out_crlf(disabled_msg); +- } +- else +- { +- term_dat_out_crlf(enabled_msg); +- } +- +- term_dat_out(pagetab_msg); +- mmu_reg = (UNS_32) cp15_get_ttb(); +- str_makehex(hexaddr, mmu_reg, 8); +- term_dat_out_crlf(hexaddr); +- term_dat_out_crlf(slist_msg); +- +- /* Process MMU table - assume that the physical and +- virtual locations of table are the same */ +- pt = (UNS_32 *) mmu_reg; +- mmu_vrt = 0x0; +- segsz = 0xFFFFFFFF; +- last_mmu_reg = mlast_mmu_reg = 0xFFFFFFFF; +- for (idx = 0; idx < 4096; idx++) +- { +- mmu_reg = *pt; +- mmmu_reg = (mmu_reg & (ARM922T_L1D_TYPE_PG_SN_MASK | +- ARM922T_L1D_BUFFERABLE | ARM922T_L1D_CACHEABLE)); +- segsz = segsz + 1; +- +- if ((last_mmu_reg != 0xFFFFFFFF) && +- (mlast_mmu_reg != mmmu_reg)) +- { +- show_section(last_mmu_reg, mmu_vrtsav, segsz); +- segsz = 0; +- } +- +- if (mlast_mmu_reg != mmmu_reg) +- { +- mmu_vrtsav = mmu_vrt; +- last_mmu_reg = mmu_reg; +- mlast_mmu_reg = mmmu_reg; +- } +- +- pt++; +- mmu_vrt += 0x00100000; +- } +- } +- +- return TRUE; +-} +- +-/*********************************************************************** +- * +- * Function: mmu_dumpmap +- * +- * Purpose: Map a virtual address range to a physical range +- * +- * Processing: +- * From the input addresses and number of sections, generate the +- * appropriate entries in the page table. +- * +- * Parameters: None +- * +- * Outputs: None +- * +- * Returns: TRUE if the command was processed, otherwise FALSE +- * +- * Notes: None +- * +- **********************************************************************/ +-static BOOL_32 mmu_dumpmap(UNS_32 vrt, +- UNS_32 phy, +- UNS_32 sections, +- UNS_32 cache) +-{ +- BOOL_32 processed = FALSE; +- UNS_32 mmu_phy, mmu_vrt, tmp1 = 0, tmp2, *pt; +- UNS_8 hexaddr [16]; +- +- /* Verify address boundaries are sectional */ +- mmu_vrt = vrt & ~ARM922T_L2D_SN_BASE_MASK; +- mmu_phy = phy & ~ARM922T_L2D_SN_BASE_MASK; +- if ((mmu_vrt != 0) || (mmu_phy != 0)) +- { +- term_dat_out_crlf(map1_err_msg); +- } +- else +- { +- /* Verify that address range and section count will not +- exceed address range of device */ +- tmp1 = vrt >> 20; +- tmp1 = (tmp1 + sections) - 1; +- tmp2 = phy >> 20; +- tmp2 = (tmp2 + sections) - 1; +- if ((tmp1 < 4096) && (tmp2 < 4096)) +- { +- /* Good address range and good section count */ +- processed = TRUE; +- } +- else +- { +- term_dat_out_crlf(map2_err_msg); +- } +- } +- +- /* Generate static part of MMU word */ +- if (cache == 0) +- { +- /* Section mapped with cache disabled */ +- tmp1 = ARM922T_L1D_TYPE_SECTION; +- } +- else if (cache == 1) +- { +- /* Section mapped with cache enabled */ +- tmp1 = (ARM922T_L1D_BUFFERABLE | ARM922T_L1D_CACHEABLE | +- ARM922T_L1D_TYPE_SECTION); +- } +- else if (cache == 2) +- { +- /* Section unmapped */ +- tmp1 = ARM922T_L1D_TYPE_FAULT; +- } +- tmp1 |= ARM922T_L1D_AP_ALL; +- +- /* Offset into page table for virtual address */ +- tmp2 = (vrt >> 20); +- pt = cp15_get_ttb() + tmp2; +- +- /* Loop until all sections are complete */ +- while ((sections > 0) && (processed == TRUE)) +- { +- /* Add in physical address */ +- tmp2 = tmp1 | (phy & ARM922T_L2D_SN_BASE_MASK); +- +- /* Save new section descriptor for virtual address */ +- *pt = tmp2; +- +- /* Output message shown the map */ +- term_dat_out(phya_msg); +- str_makehex(hexaddr, phy, 8); +- term_dat_out(hexaddr); +- if (cache == 2) +- { +- term_dat_out(unmapped_msg); +- } +- else +- { +- term_dat_out(mapped_msg); +- } +- str_makehex(hexaddr, vrt, 8); +- term_dat_out(hexaddr); +- if (cache == 1) +- { +- term_dat_out(cached_msg); +- } +- term_dat_out_crlf((UNS_8 *) ""); +- +- /* Next section and page table entry*/ +- phy += 0x00100000; +- vrt += 0x00100000; +- pt++; +- sections--; +- } +- +- return processed; +-} +- +-/*********************************************************************** +- * +- * Function: cmd_mmuinfo +- * +- * Purpose: Display MMU information +- * +- * Processing: +- * See function. +- * +- * Parameters: None +- * +- * Outputs: None +- * +- * Returns: TRUE if the command was processed, otherwise FALSE +- * +- * Notes: None +- * +- **********************************************************************/ +-static BOOL_32 cmd_mmuinfo(void) +-{ +- mmu_dumpinfo(); +- +- return TRUE; +-} +- +-/*********************************************************************** +- * +- * Function: cmd_map +- * +- * Purpose: Map a physical address region to a virtual region +- * +- * Processing: +- * See function. +- * +- * Parameters: None +- * +- * Outputs: None +- * +- * Returns: TRUE if the command was processed, otherwise FALSE +- * +- * Notes: None +- * +- **********************************************************************/ +-BOOL_32 cmd_map(void) +-{ +- UNS_32 phy, virt, sects, ce = 0; +- +- /* Get arguments */ +- virt = cmd_get_field_val(1); +- phy = cmd_get_field_val(2); +- sects = cmd_get_field_val(3); +- ce = cmd_get_field_val(4); +- +- if (ce <= 2) +- { +- mmu_dumpmap(virt, phy, sects, ce); +- } +- +- return TRUE; +-} +- +-/*********************************************************************** +- * +- * Function: cmd_inval +- * +- * Purpose: MMU cache flush and invalidate +- * +- * Processing: +- * See function. +- * +- * Parameters: None +- * +- * Outputs: None +- * +- * Returns: TRUE if the command was processed, otherwise FALSE +- * +- * Notes: None +- * +- **********************************************************************/ +-BOOL_32 cmd_inval(void) +-{ +- dcache_flush(); +- icache_inval(); +- term_dat_out(caches_msg); +- term_dat_out(inval_msg); +- +- return TRUE; +-} +- +-/*********************************************************************** +- * +- * Function: cmd_dcache +- * +- * Purpose: MMU data cache enable and disable +- * +- * Processing: +- * If the value passed in the parser is 1, enable the data cache, +- * otherwise disable the data cache. +- * +- * Parameters: None +- * +- * Outputs: None +- * +- * Returns: TRUE if the command was processed, otherwise FALSE +- * +- * Notes: None +- * +- **********************************************************************/ +-BOOL_32 cmd_dcache(void) +-{ +- UNS_32 cenable; +- UNS_8 *ppar; +- +- /* Get argument */ +- cenable = cmd_get_field_val(1); +- +- switch (cenable) +- { +- case 0: +- dcache_flush(); +- cp15_set_dcache(0); +- ppar = disabled_msg; +- break; +- +- case 1: +- cp15_invalidate_cache(); +- cp15_set_dcache(1); +- ppar = enabled_msg; +- break; +- +- case 2: +- default: +- dcache_flush(); +- ppar = flushed_msg; +- break; +- } +- +- term_dat_out(dcache_msg); +- term_dat_out_crlf(ppar); +- +- return TRUE; +-} +- +-/*********************************************************************** +- * +- * Function: cmd_icache +- * +- * Purpose: MMU instruction cache enable and disable +- * +- * Processing: +- * If the value passed in the parser is 1, enable the instruction +- * cache, otherwise disable the instruction cache. +- * +- * Parameters: None +- * +- * Outputs: None +- * +- * Returns: TRUE if the command was processed, otherwise FALSE +- * +- * Notes: None +- * +- **********************************************************************/ +-BOOL_32 cmd_icache(void) +-{ +- UNS_32 cenable; +- UNS_8 *ppar; +- +- /* Get argument */ +- cenable = cmd_get_field_val(1); +- +- if (cenable == 1) +- { +- dcache_flush(); +- cp15_invalidate_cache(); +- cp15_set_icache(1); +- ppar = enabled_msg; +- } +- else +- { +- cp15_set_icache(0); +- ppar = disabled_msg; +- } +- +- term_dat_out(icache_msg); +- term_dat_out_crlf(ppar); +- +- return TRUE; +-} +- +- +-/*********************************************************************** +- * +- * Function: cmd_mmuenab +- * +- * Purpose: Enable or disable MMU +- * +- * Processing: +- * See function. +- * +- * Parameters: None +- * +- * Outputs: None +- * +- * Returns: TRUE if the command was processed, otherwise FALSE +- * +- * Notes: None +- * +- **********************************************************************/ +-BOOL_32 cmd_mmuenab(void) +-{ +- UNS_8 *ppar; +- UNS_32 cenable; +- +- term_dat_out_crlf((UNS_8 *) "Warning: Changing MMU status on " +- " cached and buffered code can cause system crashes."); +- +- /* Get argument */ +- cenable = cmd_get_field_val(1); +- +- if (cenable == 1) +- { +- if ((cp15_get_mmu_control_reg() & ARM922T_MMU_CONTROL_C) != 0) +- { +- cp15_invalidate_cache(); +- } +- +- cp15_set_mmu(1); +- ppar = enabled_msg; +- } +- else +- { +- cp15_dcache_flush(); +- cp15_write_buffer_flush(); +- cp15_invalidate_cache(); +- cp15_set_mmu(0); +- ppar = disabled_msg; +- } +- +- term_dat_out(mmu_msg); +- term_dat_out_crlf(ppar); +- +- return TRUE; +-} +- +-/*********************************************************************** +- * +- * Function: mmu_cmd_group_init +- * +- * Purpose: Initialize MMU command group +- * +- * Processing: +- * See function. +- * +- * Parameters: None +- * +- * Outputs: None +- * +- * Returns: Nothin +- * +- * Notes: None +- * +- **********************************************************************/ +-void mmu_cmd_group_init(void) +-{ +- /* Add MMU group */ +- cmd_add_group(&mmu_group); +- +- /* Add commands to the MMU group */ +- cmd_add_new_command(&mmu_group, &core_dcache_cmd); +- cmd_add_new_command(&mmu_group, &core_icache_cmd); +- cmd_add_new_command(&mmu_group, &core_inval_cmd); +- cmd_add_new_command(&mmu_group, &core_mmuenab_cmd); +- cmd_add_new_command(&mmu_group, &core_map_cmd); +- cmd_add_new_command(&mmu_group, &core_mmuinfo_cmd); +-} diff --git a/boot/lpc32xxcdl/lpc32xxcdl-2.11-libnosys_gnu.patch b/boot/lpc32xxcdl/lpc32xxcdl-2.11-libnosys_gnu.patch new file mode 100644 index 00000000..cfd77bea --- /dev/null +++ b/boot/lpc32xxcdl/lpc32xxcdl-2.11-libnosys_gnu.patch @@ -0,0 +1,188 @@ +Fix compilation and eabi issues + +Since we are not linking with libc anymore, we need to define our own memset, +strlen and memcpy. Also, as we are using a *libc compiler, we need to "handle" +exceptions (mostly division by 0) by defining raise() and +__aeabi_unwind_cpp_pr0. + +Signed-off-by: Alexandre Belloni +--- + csps/lpc32xx/bsps/ea3250/source/libnosys_gnu.c | 41 +++++++++++++++++++++++ + csps/lpc32xx/bsps/fdi3250/source/libnosys_gnu.c | 41 +++++++++++++++++++++++ + csps/lpc32xx/bsps/phy3250/source/libnosys_gnu.c | 41 +++++++++++++++++++++++ + 3 files changed, 123 insertions(+), 0 deletions(-) + +diff --git a/csps/lpc32xx/bsps/ea3250/source/libnosys_gnu.c b/csps/lpc32xx/bsps/ea3250/source/libnosys_gnu.c +index 385b0ab..f1f0a0a 100644 +--- a/csps/lpc32xx/bsps/ea3250/source/libnosys_gnu.c ++++ b/csps/lpc32xx/bsps/ea3250/source/libnosys_gnu.c +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + + /* errno definition */ + #undef errno +@@ -125,4 +126,44 @@ int _write(int file, char *ptr, int len){ + return 0; + } + ++void * memset(void * s,int c,size_t count) ++{ ++ char *xs = (char *) s; ++ ++ while (count--) ++ *xs++ = c; ++ ++ return s; ++} ++ ++ ++size_t strlen(const char * s) ++{ ++ const char *sc; ++ ++ for (sc = s; *sc != '\0'; ++sc) ++ /* nothing */; ++ return sc - s; ++} ++ ++void * memcpy(void * dest,const void *src,size_t count) ++{ ++ char *tmp = (char *) dest, *s = (char *) src; ++ ++ while (count--) ++ *tmp++ = *s++; ++ ++ return dest; ++} ++ ++ ++/* Dummy functions to avoid linker complaints */ ++void __aeabi_unwind_cpp_pr0(void) ++{ ++}; ++ ++void raise(void) ++{ ++}; ++ + #endif /*__GNUC__*/ +diff --git a/csps/lpc32xx/bsps/fdi3250/source/libnosys_gnu.c b/csps/lpc32xx/bsps/fdi3250/source/libnosys_gnu.c +index 385b0ab..f1f0a0a 100644 +--- a/csps/lpc32xx/bsps/fdi3250/source/libnosys_gnu.c ++++ b/csps/lpc32xx/bsps/fdi3250/source/libnosys_gnu.c +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + + /* errno definition */ + #undef errno +@@ -125,4 +126,44 @@ int _write(int file, char *ptr, int len){ + return 0; + } + ++void * memset(void * s,int c,size_t count) ++{ ++ char *xs = (char *) s; ++ ++ while (count--) ++ *xs++ = c; ++ ++ return s; ++} ++ ++ ++size_t strlen(const char * s) ++{ ++ const char *sc; ++ ++ for (sc = s; *sc != '\0'; ++sc) ++ /* nothing */; ++ return sc - s; ++} ++ ++void * memcpy(void * dest,const void *src,size_t count) ++{ ++ char *tmp = (char *) dest, *s = (char *) src; ++ ++ while (count--) ++ *tmp++ = *s++; ++ ++ return dest; ++} ++ ++ ++/* Dummy functions to avoid linker complaints */ ++void __aeabi_unwind_cpp_pr0(void) ++{ ++}; ++ ++void raise(void) ++{ ++}; ++ + #endif /*__GNUC__*/ +diff --git a/csps/lpc32xx/bsps/phy3250/source/libnosys_gnu.c b/csps/lpc32xx/bsps/phy3250/source/libnosys_gnu.c +index cfdb674..6b50c60 100644 +--- a/csps/lpc32xx/bsps/phy3250/source/libnosys_gnu.c ++++ b/csps/lpc32xx/bsps/phy3250/source/libnosys_gnu.c +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + + /* errno definition */ + #undef errno +@@ -125,4 +126,44 @@ int _write(int file, char *ptr, int len){ + return 0; + } + ++void * memset(void * s,int c,size_t count) ++{ ++ char *xs = (char *) s; ++ ++ while (count--) ++ *xs++ = c; ++ ++ return s; ++} ++ ++ ++size_t strlen(const char * s) ++{ ++ const char *sc; ++ ++ for (sc = s; *sc != '\0'; ++sc) ++ /* nothing */; ++ return sc - s; ++} ++ ++void * memcpy(void * dest,const void *src,size_t count) ++{ ++ char *tmp = (char *) dest, *s = (char *) src; ++ ++ while (count--) ++ *tmp++ = *s++; ++ ++ return dest; ++} ++ ++ ++/* Dummy functions to avoid linker complaints */ ++void __aeabi_unwind_cpp_pr0(void) ++{ ++}; ++ ++void raise(void) ++{ ++}; ++ + #endif /*__GNUC__*/ +-- +1.7.7.3 + diff --git a/boot/lpc32xxcdl/lpc32xxcdl-2.11-slashes.patch b/boot/lpc32xxcdl/lpc32xxcdl-2.11-slashes.patch new file mode 100644 index 00000000..94c18478 --- /dev/null +++ b/boot/lpc32xxcdl/lpc32xxcdl-2.11-slashes.patch @@ -0,0 +1,521 @@ +Use slashes instead of backslashes + +Signed-off-by: Alexandre Belloni +--- + .../bsps/common/examples/buildfiles/makefile | 10 +++--- + .../startup/examples/burners/makefile.burner | 16 +++++----- + csps/lpc32xx/bsps/ea3250/source/makefile | 10 +++--- + csps/lpc32xx/bsps/fdi3250/source/makefile | 12 ++++---- + csps/lpc32xx/bsps/phy3250/examples/makefile | 2 +- + csps/lpc32xx/bsps/phy3250/source/makefile | 2 +- + .../examples/Burners/nor/kickstart/makefile | 2 +- + .../startup/examples/Burners/nor/norerase/makefile | 2 +- + .../startup/examples/Burners/nor/s1lapp/makefile | 2 +- + .../examples/Burners/spi/kickstart/makefile | 2 +- + csps/lpc32xx/source/makefile | 10 +++--- + lpc/source/makefile | 10 +++--- + makefile | 2 +- + makerule/common/make.rules.environment | 30 ++++++++++---------- + makerule/lpc32xx/make.lpc32xx.gnu | 2 +- + makerule/lpc32xx/make.lpc32xx.iar | 12 ++++---- + makerule/lpc32xx/make.lpc32xx.keil | 6 ++-- + makerule/lpc32xx/make.lpc32xx.rvw | 2 +- + 18 files changed, 67 insertions(+), 67 deletions(-) + +diff --git a/csps/lpc32xx/bsps/common/examples/buildfiles/makefile b/csps/lpc32xx/bsps/common/examples/buildfiles/makefile +index cf4977c..1da2201 100644 +--- a/csps/lpc32xx/bsps/common/examples/buildfiles/makefile ++++ b/csps/lpc32xx/bsps/common/examples/buildfiles/makefile +@@ -25,16 +25,16 @@ + # + ######################################################################## + +-include $(NXPMCU_SOFTWARE)\makerule\$(CSP)\make.$(CSP).$(TOOL) ++include $(NXPMCU_SOFTWARE)/makerule/$(CSP)/make.$(CSP).$(TOOL) + + ######################################################################## + # + # Pick up the assembler and C source files in the directory + # + ######################################################################## +-include $(NXPMCU_SOFTWARE)\makerule\common\make.rules.ftypes +-AFLAGS +=-I..\Include +-CFLAGS +=-I..\Include ++include $(NXPMCU_SOFTWARE)/makerule/common/make.rules.ftypes ++AFLAGS +=-I../Include ++CFLAGS +=-I../Include + + ######################################################################## + # +@@ -42,6 +42,6 @@ CFLAGS +=-I..\Include + # + ######################################################################## + +-include $(NXPMCU_SOFTWARE)\makerule\common\make.rules.build ++include $(NXPMCU_SOFTWARE)/makerule/common/make.rules.build + + +diff --git a/csps/lpc32xx/bsps/common/startup/examples/burners/makefile.burner b/csps/lpc32xx/bsps/common/startup/examples/burners/makefile.burner +index fca3947..18bd703 100644 +--- a/csps/lpc32xx/bsps/common/startup/examples/burners/makefile.burner ++++ b/csps/lpc32xx/bsps/common/startup/examples/burners/makefile.burner +@@ -22,9 +22,9 @@ + # + ######################################################################## + +-COMMON_BASE := $(NXPMCU_SOFTWARE)\csps\$(CSP)\bsps\common +-include $(NXPMCU_SOFTWARE)\makerule\$(CSP)\make.$(CSP).$(TOOL) +-include $(COMMON_BASE)\startup\examples\buildfiles\make.env ++COMMON_BASE := $(NXPMCU_SOFTWARE)/csps/$(CSP)/bsps/common ++include $(NXPMCU_SOFTWARE)/makerule/$(CSP)/make.$(CSP).$(TOOL) ++include $(COMMON_BASE)/startup/examples/buildfiles/make.env + + ######################################################################## + # ARM Realview +@@ -38,7 +38,7 @@ AFLAGS += --predefine "USE_ALL_STACKS SETL {TRUE}" + #AFLAGS += --predefine "RW_RELOC SETL {TRUE}" + + # This runs from IRAM +-LDSCRIPT =$(COMMON_BASE)\startup\examples\buildfiles\ldscript_iram_rvw.ld ++LDSCRIPT =$(COMMON_BASE)/startup/examples/buildfiles/ldscript_iram_rvw.ld + LDFLAGS = --remove + MAP = --map --info=totals,sizes,unused --symbols --list + endif +@@ -55,7 +55,7 @@ AFLAGS += --predefine "USE_ALL_STACKS SETL {TRUE}" + #AFLAGS += --predefine "RW_RELOC SETL {TRUE}" + + # This runs from IRAM +-LDSCRIPT =$(COMMON_BASE)\startup\examples\buildfiles\ldscript_iram_rvw.ld ++LDSCRIPT =$(COMMON_BASE)/startup/examples/buildfiles/ldscript_iram_rvw.ld + LDFLAGS = --remove + MAP = --map --info=totals,sizes,unused --symbols --list + endif +@@ -72,7 +72,7 @@ AFLAGS += --defsym USE_ALL_STACKS=1 + #AFLAGS += --defsym RW_RELOC=1 + + # This runs from IRAM +-LDSCRIPT =$(COMMON_BASE)\startup\examples\buildfiles\ldscript_iram_gnu.ld ++LDSCRIPT =$(COMMON_BASE)/startup/examples/buildfiles/ldscript_iram_gnu.ld + + endif + +@@ -108,7 +108,7 @@ endif + # Pick up the assembler and C source files in the directory + # + ######################################################################## +-include $(NXPMCU_SOFTWARE)\makerule\common\make.rules.ftypes ++include $(NXPMCU_SOFTWARE)/makerule/common/make.rules.ftypes + + ######################################################################## + # +@@ -157,6 +157,6 @@ endif + # + ######################################################################## + +-include $(NXPMCU_SOFTWARE)\makerule\common\make.rules.build ++include $(NXPMCU_SOFTWARE)/makerule/common/make.rules.build + + .PHONY: debug bin +diff --git a/csps/lpc32xx/bsps/ea3250/source/makefile b/csps/lpc32xx/bsps/ea3250/source/makefile +index 7cada25..2899b20 100644 +--- a/csps/lpc32xx/bsps/ea3250/source/makefile ++++ b/csps/lpc32xx/bsps/ea3250/source/makefile +@@ -22,16 +22,16 @@ + # + ######################################################################## + +-include $(NXPMCU_SOFTWARE)\makerule\$(CSP)\make.$(CSP).$(TOOL) ++include $(NXPMCU_SOFTWARE)/makerule/$(CSP)/make.$(CSP).$(TOOL) + + ######################################################################## + # + # Pick up the assembler and C source files in the directory + # + ######################################################################## +-include $(NXPMCU_SOFTWARE)\makerule\common\make.rules.ftypes +-AFLAGS +=-I..\Include +-CFLAGS +=-I..\Include ++include $(NXPMCU_SOFTWARE)/makerule/common/make.rules.ftypes ++AFLAGS +=-I../Include ++CFLAGS +=-I../Include + + ######################################################################## + # +@@ -64,7 +64,7 @@ realclean: lib_realclean + # + ######################################################################## + +-include $(NXPMCU_SOFTWARE)\makerule\common\make.rules.build ++include $(NXPMCU_SOFTWARE)/makerule/common/make.rules.build + + .PHONY: all lib_clean lib_realclean + +diff --git a/csps/lpc32xx/bsps/fdi3250/source/makefile b/csps/lpc32xx/bsps/fdi3250/source/makefile +index 4e153bb..11e4b63 100644 +--- a/csps/lpc32xx/bsps/fdi3250/source/makefile ++++ b/csps/lpc32xx/bsps/fdi3250/source/makefile +@@ -22,16 +22,16 @@ + # + ######################################################################## + +-include $(NXPMCU_SOFTWARE)\makerule\$(CSP)\make.$(CSP).$(TOOL) ++include $(NXPMCU_SOFTWARE)/makerule/$(CSP)/make.$(CSP).$(TOOL) + + ######################################################################## + # + # Pick up the assembler and C source files in the directory + # + ######################################################################## +-include $(NXPMCU_SOFTWARE)\makerule\common\make.rules.ftypes +-AFLAGS +=-I..\Include +-CFLAGS +=-I..\Include ++include $(NXPMCU_SOFTWARE)/makerule/common/make.rules.ftypes ++AFLAGS +=-I../Include ++CFLAGS +=-I../Include + + ######################################################################## + # +@@ -53,7 +53,7 @@ lib_clean: + # delete all targets this Makefile can make and all built libraries + # linked in + lib_realclean: +- -@$(RM) $(BSP_LIB_DIR)\*.a ++ -@$(RM) $(BSP_LIB_DIR)/*.a + -@$(RMDIR) $(BSP_LIB_DIR) + + clean: lib_clean +@@ -65,7 +65,7 @@ realclean: lib_realclean + # + ######################################################################## + +-include $(NXPMCU_SOFTWARE)\makerule\common\make.rules.build ++include $(NXPMCU_SOFTWARE)/makerule/common/make.rules.build + + .PHONY: all lib_clean lib_realclean + +diff --git a/csps/lpc32xx/bsps/phy3250/examples/makefile b/csps/lpc32xx/bsps/phy3250/examples/makefile +index b939252..e7feaa6 100644 +--- a/csps/lpc32xx/bsps/phy3250/examples/makefile ++++ b/csps/lpc32xx/bsps/phy3250/examples/makefile +@@ -25,7 +25,7 @@ + # + ######################################################################## + +-include $(NXPMCU_SOFTWARE)\makerule\$(CSP)\make.$(CSP).$(TOOL) ++include $(NXPMCU_SOFTWARE)/makerule/$(CSP)/make.$(CSP).$(TOOL) + + SUBDIRS = adc dram_self_refresh hstimer hsuart i2c kscan lcd_colorbars + SUBDIRS += lcd_tsc mi2c mstimer pwm pwm_simple rtc sdcard sdcard_dma +diff --git a/csps/lpc32xx/bsps/phy3250/source/makefile b/csps/lpc32xx/bsps/phy3250/source/makefile +index 7c48e7d..750b776 100644 +--- a/csps/lpc32xx/bsps/phy3250/source/makefile ++++ b/csps/lpc32xx/bsps/phy3250/source/makefile +@@ -32,7 +32,7 @@ include $(NXPMCU_SOFTWARE)/makerule/$(CSP)/make.$(CSP).$(TOOL) + # Pick up the assembler and C source files in the directory + # + ######################################################################## +-include $(NXPMCU_SOFTWARE)\makerule\common\make.rules.ftypes ++include $(NXPMCU_SOFTWARE)/makerule/common/make.rules.ftypes + AFLAGS +=-I../Include + CFLAGS +=-I../Include + +diff --git a/csps/lpc32xx/bsps/phy3250/startup/examples/Burners/nor/kickstart/makefile b/csps/lpc32xx/bsps/phy3250/startup/examples/Burners/nor/kickstart/makefile +index 01e2b38..526d6cc 100644 +--- a/csps/lpc32xx/bsps/phy3250/startup/examples/Burners/nor/kickstart/makefile ++++ b/csps/lpc32xx/bsps/phy3250/startup/examples/Burners/nor/kickstart/makefile +@@ -78,7 +78,7 @@ endif + + ######################################################################## + # +-# Compiler\linker specific stuff ++# Compiler/linker specific stuff + # + ######################################################################## + +diff --git a/csps/lpc32xx/bsps/phy3250/startup/examples/Burners/nor/norerase/makefile b/csps/lpc32xx/bsps/phy3250/startup/examples/Burners/nor/norerase/makefile +index ce329f5..e81b8db 100644 +--- a/csps/lpc32xx/bsps/phy3250/startup/examples/Burners/nor/norerase/makefile ++++ b/csps/lpc32xx/bsps/phy3250/startup/examples/Burners/nor/norerase/makefile +@@ -77,7 +77,7 @@ endif + + ######################################################################## + # +-# Compiler\linker specific stuff ++# Compiler/linker specific stuff + # + ######################################################################## + +diff --git a/csps/lpc32xx/bsps/phy3250/startup/examples/Burners/nor/s1lapp/makefile b/csps/lpc32xx/bsps/phy3250/startup/examples/Burners/nor/s1lapp/makefile +index 4426fc7..196faec 100644 +--- a/csps/lpc32xx/bsps/phy3250/startup/examples/Burners/nor/s1lapp/makefile ++++ b/csps/lpc32xx/bsps/phy3250/startup/examples/Burners/nor/s1lapp/makefile +@@ -77,7 +77,7 @@ endif + + ######################################################################## + # +-# Compiler\linker specific stuff ++# Compiler/linker specific stuff + # + ######################################################################## + +diff --git a/csps/lpc32xx/bsps/phy3250/startup/examples/Burners/spi/kickstart/makefile b/csps/lpc32xx/bsps/phy3250/startup/examples/Burners/spi/kickstart/makefile +index dc73b64..39fc304 100644 +--- a/csps/lpc32xx/bsps/phy3250/startup/examples/Burners/spi/kickstart/makefile ++++ b/csps/lpc32xx/bsps/phy3250/startup/examples/Burners/spi/kickstart/makefile +@@ -78,7 +78,7 @@ endif + + ######################################################################## + # +-# Compiler\linker specific stuff ++# Compiler/linker specific stuff + # + ######################################################################## + +diff --git a/csps/lpc32xx/source/makefile b/csps/lpc32xx/source/makefile +index 8e05456..16bd944 100644 +--- a/csps/lpc32xx/source/makefile ++++ b/csps/lpc32xx/source/makefile +@@ -25,16 +25,16 @@ + # + ######################################################################## + +-include $(NXPMCU_SOFTWARE)\makerule\$(CSP)\make.$(CSP).$(TOOL) ++include $(NXPMCU_SOFTWARE)/makerule/$(CSP)/make.$(CSP).$(TOOL) + + ######################################################################## + # + # Pick up the assembler and C source files in the directory + # + ######################################################################## +-include $(NXPMCU_SOFTWARE)\makerule\common\make.rules.ftypes +-AFLAGS +=-I..\Include +-CFLAGS +=-I..\Include ++include $(NXPMCU_SOFTWARE)/makerule/common/make.rules.ftypes ++AFLAGS +=-I../Include ++CFLAGS +=-I../Include + + + ######################################################################## +@@ -68,7 +68,7 @@ realclean: lib_realclean + # + ######################################################################## + +-include $(NXPMCU_SOFTWARE)\makerule\common\make.rules.build ++include $(NXPMCU_SOFTWARE)/makerule/common/make.rules.build + + .PHONY: all lib_clean lib_realclean + +diff --git a/lpc/source/makefile b/lpc/source/makefile +index 2860db9..ae7d612 100644 +--- a/lpc/source/makefile ++++ b/lpc/source/makefile +@@ -25,16 +25,16 @@ + # + ######################################################################## + +-include $(NXPMCU_SOFTWARE)\makerule\$(CSP)\make.$(CSP).$(TOOL) ++include $(NXPMCU_SOFTWARE)/makerule/$(CSP)/make.$(CSP).$(TOOL) + + ######################################################################## + # + # Pick up the assembler and C source files in the directory + # + ######################################################################## +-include $(NXPMCU_SOFTWARE)\makerule\common\make.rules.ftypes +-AFLAGS +=-I..\Include +-CFLAGS +=-I..\Include ++include $(NXPMCU_SOFTWARE)/makerule/common/make.rules.ftypes ++AFLAGS +=-I../Include ++CFLAGS +=-I../Include + + ######################################################################## + # +@@ -67,7 +67,7 @@ realclean: lib_realclean + # + ######################################################################## + +-include $(NXPMCU_SOFTWARE)\makerule\common\make.rules.build ++include $(NXPMCU_SOFTWARE)/makerule/common/make.rules.build + + .PHONY: all lib_clean lib_realclean + +diff --git a/makefile b/makefile +index 8645fcc..86fa6bc 100644 +--- a/makefile ++++ b/makefile +@@ -34,7 +34,7 @@ TARGETS_CLN =gen_clean csp_clean bsp_clean + # + ######################################################################## + +-include $(NXPMCU_SOFTWARE)\makerule\$(CSP)\make.$(CSP).$(TOOL) ++include $(NXPMCU_SOFTWARE)/makerule/$(CSP)/make.$(CSP).$(TOOL) + + ######################################################################## + # +diff --git a/makerule/common/make.rules.environment b/makerule/common/make.rules.environment +index d5737fe..4e6df48 100644 +--- a/makerule/common/make.rules.environment ++++ b/makerule/common/make.rules.environment +@@ -52,7 +52,7 @@ ASTYLE =astyle --options=$(BUILD_ROOT)/tools/astyle.cfg + # + ######################################################################## + +-CSP_LIB_DIR =$(BUILD_ROOT)\csps\$(CSP)\lib ++CSP_LIB_DIR =$(BUILD_ROOT)/csps/$(CSP)/lib + + ######################################################################## + # +@@ -60,7 +60,7 @@ CSP_LIB_DIR =$(BUILD_ROOT)\csps\$(CSP)\lib + # + ######################################################################## + +-BSP_LIB_DIR =$(BUILD_ROOT)\csps\$(CSP)\bsps\$(BSP)\lib ++BSP_LIB_DIR =$(BUILD_ROOT)/csps/$(CSP)/bsps/$(BSP)/lib + + ######################################################################## + # +@@ -68,7 +68,7 @@ BSP_LIB_DIR =$(BUILD_ROOT)\csps\$(CSP)\bsps\$(BSP)\lib + # + ######################################################################## + +-GEN_LIB_DIR =$(BUILD_ROOT)\$(GEN)\lib ++GEN_LIB_DIR =$(BUILD_ROOT)/$(GEN)/lib + + ######################################################################## + # +@@ -76,9 +76,9 @@ GEN_LIB_DIR =$(BUILD_ROOT)\$(GEN)\lib + # + ######################################################################## + +-CSP_DIR =$(BUILD_ROOT)\csps\$(CSP) +-CSP_SRC_DIR =$(CSP_DIR)\source +-CSP_INC_DIR =$(CSP_DIR)\include ++CSP_DIR =$(BUILD_ROOT)/csps/$(CSP) ++CSP_SRC_DIR =$(CSP_DIR)/source ++CSP_INC_DIR =$(CSP_DIR)/include + + ######################################################################## + # +@@ -86,9 +86,9 @@ CSP_INC_DIR =$(CSP_DIR)\include + # + ######################################################################## + +-BSP_DIR =$(BUILD_ROOT)\csps\$(CSP)\bsps\$(BSP) +-BSP_SRC_DIR =$(BSP_DIR)\source +-BSP_INC_DIR =$(BSP_DIR)\include ++BSP_DIR =$(BUILD_ROOT)/csps/$(CSP)/bsps/$(BSP) ++BSP_SRC_DIR =$(BSP_DIR)/source ++BSP_INC_DIR =$(BSP_DIR)/include + + ######################################################################## + # +@@ -96,9 +96,9 @@ BSP_INC_DIR =$(BSP_DIR)\include + # + ######################################################################## + +-GEN_DIR =$(BUILD_ROOT)\$(GEN) +-GEN_SRC_DIR =$(GEN_DIR)\source +-GEN_INC_DIR =$(GEN_DIR)\include ++GEN_DIR =$(BUILD_ROOT)/$(GEN) ++GEN_SRC_DIR =$(GEN_DIR)/source ++GEN_INC_DIR =$(GEN_DIR)/include + + ######################################################################## + # +@@ -151,6 +151,6 @@ endif + # + ######################################################################## + +-TARGET_CSP_LIB =$(CSP_LIB_DIR)\$(CSP_ARCHIVE) +-TARGET_BSP_LIB =$(BSP_LIB_DIR)\$(BSP_ARCHIVE) +-TARGET_GEN_LIB =$(GEN_LIB_DIR)\$(GEN_ARCHIVE) ++TARGET_CSP_LIB =$(CSP_LIB_DIR)/$(CSP_ARCHIVE) ++TARGET_BSP_LIB =$(BSP_LIB_DIR)/$(BSP_ARCHIVE) ++TARGET_GEN_LIB =$(GEN_LIB_DIR)/$(GEN_ARCHIVE) +diff --git a/makerule/lpc32xx/make.lpc32xx.gnu b/makerule/lpc32xx/make.lpc32xx.gnu +index 3277d99..d80b98d 100644 +--- a/makerule/lpc32xx/make.lpc32xx.gnu ++++ b/makerule/lpc32xx/make.lpc32xx.gnu +@@ -19,7 +19,7 @@ + # use without further testing or modification. + ######################################################################## + +-include $(NXPMCU_SOFTWARE)\makerule\common\make.rules.environment ++include $(NXPMCU_SOFTWARE)/makerule/common/make.rules.environment + + CPU = arm926ej-s + CFLAGS = -mcpu=arm926ej-s -Wall -Os +diff --git a/makerule/lpc32xx/make.lpc32xx.iar b/makerule/lpc32xx/make.lpc32xx.iar +index 238ebbf..27d163f 100644 +--- a/makerule/lpc32xx/make.lpc32xx.iar ++++ b/makerule/lpc32xx/make.lpc32xx.iar +@@ -19,12 +19,12 @@ + # use without further testing or modification. + ######################################################################## + +-include $(NXPMCU_SOFTWARE)\makerule\common\make.rules.environment ++include $(NXPMCU_SOFTWARE)/makerule/common/make.rules.environment + +-IARBASE = $(IAR_ROOT)\ARM +-IARTOOLS = $(IARBASE)\bin +-IAR_LIB = $(IARBASE)\lib +-IAR_INC = $(IARBASE)\inc ++IARBASE = $(IAR_ROOT)/ARM ++IARTOOLS = $(IARBASE)/bin ++IAR_LIB = $(IARBASE)/lib ++IAR_INC = $(IARBASE)/inc + CC = iccarm + CCP = iccarm + AS = iasmarm +@@ -36,7 +36,7 @@ CFLAGS += -I"$(IAR_INC)" + AFLAGS = --cpu 5TEJ + LDFLAGS = + LK = "$(TARGET_GEN_LIB)" "$(TARGET_CSP_LIB)" "$(TARGET_BSP_LIB)" +-;LK += "$(IAR_LIB)\dl4tpannl8f.r79" ++;LK += "$(IAR_LIB)/dl4tpannl8f.r79" + MAP = --map + LDESC = --config + ENTRY = --entry +diff --git a/makerule/lpc32xx/make.lpc32xx.keil b/makerule/lpc32xx/make.lpc32xx.keil +index dd27583..7334d3f 100644 +--- a/makerule/lpc32xx/make.lpc32xx.keil ++++ b/makerule/lpc32xx/make.lpc32xx.keil +@@ -19,7 +19,7 @@ + # use without further testing or modification. + ######################################################################## + +-include $(NXPMCU_SOFTWARE)\makerule\common\make.rules.environment ++include $(NXPMCU_SOFTWARE)/makerule/common/make.rules.environment + + CC =armcc + CCP =armcc +@@ -27,11 +27,11 @@ AS =armasm + LD =armlink + AR =armar -r -s + CFLAGS =--arm -O3 -g --device DARMP3 -D__MICROLIB +-CFLAGS +=-I$(KEIL_RVCT)\inc -I$(CSP_INC_DIR) -I$(BSP_INC_DIR) -I$(GEN_INC_DIR) ++CFLAGS +=-I$(KEIL_RVCT)/inc -I$(CSP_INC_DIR) -I$(BSP_INC_DIR) -I$(GEN_INC_DIR) + AFLAGS =--arm --device=DARMP3 + AFLAGS +=-I$(CSP_INC_DIR) -I$(BSP_INC_DIR) -I$(GEN_INC_DIR) + LDFLAGS =--noremove +-LK =--device DARMP3 --libpath $(KEIL_RVCT)\lib --scan $(TARGET_CSP_LIB) ++LK =--device DARMP3 --libpath $(KEIL_RVCT)/lib --scan $(TARGET_CSP_LIB) + LK +=--scan $(TARGET_BSP_LIB) + LK +=--scan $(TARGET_GEN_LIB) + MAP =--map --list +diff --git a/makerule/lpc32xx/make.lpc32xx.rvw b/makerule/lpc32xx/make.lpc32xx.rvw +index 59961dd..2419976 100644 +--- a/makerule/lpc32xx/make.lpc32xx.rvw ++++ b/makerule/lpc32xx/make.lpc32xx.rvw +@@ -19,7 +19,7 @@ + # use without further testing or modification. + ######################################################################## + +-include $(NXPMCU_SOFTWARE)\makerule\common\make.rules.environment ++include $(NXPMCU_SOFTWARE)/makerule/common/make.rules.environment + + CC =armcc + CCP =armcpp +-- +1.7.7.3 + diff --git a/boot/lpc32xxcdl/lpc32xxcdl.hash b/boot/lpc32xxcdl/lpc32xxcdl.hash new file mode 100644 index 00000000..8c6b73d6 --- /dev/null +++ b/boot/lpc32xxcdl/lpc32xxcdl.hash @@ -0,0 +1,2 @@ +# Locally computed +sha256 ded3fa936a96d3fb8188ca6214f57b5208bd49e5416bd69f38bfc810b34197bc lpc32xx_cdl-v2.11.zip diff --git a/boot/lpc32xxcdl/lpc32xxcdl.mk b/boot/lpc32xxcdl/lpc32xxcdl.mk new file mode 100644 index 00000000..9f5cd27f --- /dev/null +++ b/boot/lpc32xxcdl/lpc32xxcdl.mk @@ -0,0 +1,71 @@ +################################################################################ +# +# lpc32xxcdl +# +################################################################################ + +LPC32XXCDL_VERSION = 2.11 +LPC32XXCDL_SOURCE = lpc32xx_cdl-v$(LPC32XXCDL_VERSION).zip +LPC32XXCDL_SITE = https://community.nxp.com/pwmxy87654/attachments/pwmxy87654/lpcware-archive/61/2 + +LPC32XXCDL_INSTALL_TARGET = NO +LPC32XXCDL_INSTALL_IMAGES = YES + +ifeq ($(BR2_TARGET_LPC32XXCDL_BOARDNAME),"ea3250") +LPC32XXCDL_KICKSTART = kickstart/nand +LPC32XXCDL_KICKSTART_BURNER = nand/kickstart +LPC32XXCDL_S1L = s1l +LPC32XXCDL_S1L_BURNER = nand/s1lapp +endif + +ifeq ($(BR2_TARGET_LPC32XXCDL_BOARDNAME),"phy3250") +LPC32XXCDL_KICKSTART = kickstart/kickstart_nand +LPC32XXCDL_KICKSTART_BURNER = nand/kickstart +LPC32XXCDL_S1L = s1l/s1l_nand_boot +LPC32XXCDL_S1L_BURNER = nand/s1lapp +endif + +ifeq ($(BR2_TARGET_LPC32XXCDL_BOARDNAME),"fdi3250") +LPC32XXCDL_KICKSTART = kickstart/nand +LPC32XXCDL_KICKSTART_BURNER = nand/kickstart_jtag +LPC32XXCDL_S1L = s1l +LPC32XXCDL_S1L_BURNER = nand/s1lapp_jtag +endif + +LPC32XXCDL_BUILD_FLAGS = \ + CROSS_COMPILE=$(TARGET_CROSS) \ + NXPMCU_WINBASE=$(@D) \ + NXPMCU_SOFTWARE=$(@D) \ + BSP=$(BR2_TARGET_LPC32XXCDL_BOARDNAME) \ + CSP=lpc32xx TOOL=gnu GEN=lpc + +LPC32XXCDL_BOARD_STARTUP_DIR = \ + csps/lpc32xx/bsps/$(BR2_TARGET_LPC32XXCDL_BOARDNAME)/startup/examples/ + +# Source files are with dos newlines, which our patch infrastructure doesn't +# handle. Work around it by converting the affected files to unix newlines +# before patching +define LPC32XXCDL_EXTRACT_CMDS + unzip $(LPC32XXCDL_DL_DIR)/$(LPC32XXCDL_SOURCE) -d $(@D) + mv $(@D)/lpc3xxx_cdl/* $(@D) + rmdir $(@D)/lpc3xxx_cdl/ + sed -n 's|^[+-]\{3\} [^/]\+\([^ \t]*\)\(.*\)|$(@D)\1|p' \ + boot/lpc32xxcdl/*.patch| sort -u | xargs $(SED) 's/\x0D$$//' +endef + +define LPC32XXCDL_BUILD_CMDS + $(MAKE1) $(LPC32XXCDL_BUILD_FLAGS) -C $(@D) + $(MAKE1) $(LPC32XXCDL_BUILD_FLAGS) -C $(@D)/$(LPC32XXCDL_BOARD_STARTUP_DIR)/Burners/$(LPC32XXCDL_KICKSTART_BURNER) + $(MAKE1) $(LPC32XXCDL_BUILD_FLAGS) -C $(@D)/$(LPC32XXCDL_BOARD_STARTUP_DIR)/$(LPC32XXCDL_KICKSTART) + $(MAKE1) $(LPC32XXCDL_BUILD_FLAGS) -C $(@D)/$(LPC32XXCDL_BOARD_STARTUP_DIR)/Burners/$(LPC32XXCDL_S1L_BURNER) + $(MAKE1) $(LPC32XXCDL_BUILD_FLAGS) -C $(@D)/$(LPC32XXCDL_BOARD_STARTUP_DIR)/$(LPC32XXCDL_S1L) +endef + +define LPC32XXCDL_INSTALL_IMAGES_CMDS + cp $(@D)/$(LPC32XXCDL_BOARD_STARTUP_DIR)/Burners/$(LPC32XXCDL_KICKSTART_BURNER)/*gnu.bin $(BINARIES_DIR) + cp $(@D)/$(LPC32XXCDL_BOARD_STARTUP_DIR)/$(LPC32XXCDL_KICKSTART)/*gnu.bin $(BINARIES_DIR) + cp $(@D)/$(LPC32XXCDL_BOARD_STARTUP_DIR)/Burners/$(LPC32XXCDL_S1L_BURNER)/*gnu.bin $(BINARIES_DIR) + cp $(@D)/$(LPC32XXCDL_BOARD_STARTUP_DIR)/$(LPC32XXCDL_S1L)/*gnu.bin $(BINARIES_DIR) +endef + +$(eval $(generic-package)) diff --git a/boot/mv-ddr-marvell/Config.in b/boot/mv-ddr-marvell/Config.in new file mode 100644 index 00000000..4ee8c95b --- /dev/null +++ b/boot/mv-ddr-marvell/Config.in @@ -0,0 +1,10 @@ +config BR2_TARGET_MV_DDR_MARVELL + bool "mv-ddr-marvell" + depends on BR2_aarch64 + help + Marvell keeps algorithms for DDR training in a separate + repository. This code is not built separately, it is needed + as a dependency to build ATF firmware for Marvell Armada 7040 + and 8040 SoCs. + + https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell/ diff --git a/boot/mv-ddr-marvell/mv-ddr-marvell.hash b/boot/mv-ddr-marvell/mv-ddr-marvell.hash new file mode 100644 index 00000000..e1a86008 --- /dev/null +++ b/boot/mv-ddr-marvell/mv-ddr-marvell.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 bfab74a625d65238c569b9df282b55c0fc9a1e2d3decedcf194d44774df2ede4 mv-ddr-marvell-305d923e6bc4236cd3b902f6679b0aef9e5fa52d.tar.gz +sha256 69208236fc322026920b92d1d839ebdc521ca65379bfdb3368a24945e794fc78 ddr3_init.c diff --git a/boot/mv-ddr-marvell/mv-ddr-marvell.mk b/boot/mv-ddr-marvell/mv-ddr-marvell.mk new file mode 100644 index 00000000..442b6aed --- /dev/null +++ b/boot/mv-ddr-marvell/mv-ddr-marvell.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# mv-ddr-marvell +# +################################################################################ + +# This is the latest commit on mv-ddr-devel as of 20201207 +MV_DDR_MARVELL_VERSION = 305d923e6bc4236cd3b902f6679b0aef9e5fa52d +MV_DDR_MARVELL_SITE = $(call github,MarvellEmbeddedProcessors,mv-ddr-marvell,$(MV_DDR_MARVELL_VERSION)) +MV_DDR_MARVELL_LICENSE = GPL-2.0+ or LGPL-2.1 with freertos-exception-2.0, BSD-3-Clause, Marvell Commercial +MV_DDR_MARVELL_LICENSE_FILES = ddr3_init.c + +$(eval $(generic-package)) diff --git a/boot/mxs-bootlets/Config.in b/boot/mxs-bootlets/Config.in new file mode 100644 index 00000000..b3e392af --- /dev/null +++ b/boot/mxs-bootlets/Config.in @@ -0,0 +1,90 @@ +config BR2_TARGET_MXS_BOOTLETS + bool "mxs-bootlets" + depends on BR2_arm + help + Stage1 bootloaders for Freescale iMX23/iMX28 SoCs + +if BR2_TARGET_MXS_BOOTLETS + +choice + prompt "Source" + default BR2_TARGET_MXS_BOOTLETS_FREESCALE + help + Select the location of the bootlets you want to use + +config BR2_TARGET_MXS_BOOTLETS_FREESCALE + bool "Freescale 10.12.01 version" + +config BR2_TARGET_MXS_BOOTLETS_CUSTOM_TARBALL + bool "Custom tarball" + +config BR2_TARGET_MXS_BOOTLETS_CUSTOM_GIT + bool "Custom Git repository" + +endchoice + +config BR2_TARGET_MXS_BOOTLETS_CUSTOM_TARBALL_URL + string "URL of custom bootlets tarball" + depends on BR2_TARGET_MXS_BOOTLETS_CUSTOM_TARBALL + +if BR2_TARGET_MXS_BOOTLETS_CUSTOM_GIT + +config BR2_TARGET_MXS_BOOTLETS_CUSTOM_GIT_URL + string "URL of custom Git repository" + +config BR2_TARGET_MXS_BOOTLETS_CUSTOM_GIT_VERSION + string "Custom Git version" + +endif + +choice + prompt "Bootstream" + help + Select which bootstream to generate + +config BR2_TARGET_MXS_BOOTLETS_BAREBOX + bool "Barebox Bootloader" + depends on BR2_TARGET_BAREBOX + +config BR2_TARGET_MXS_BOOTLETS_LINUX + bool "Linux Kernel" + depends on BR2_LINUX_KERNEL + +config BR2_TARGET_MXS_BOOTLETS_UBOOT + bool "U-boot bootloader" + depends on BR2_TARGET_UBOOT + +endchoice + +config BR2_TARGET_MXS_BOOTLETS_HAS_IVT + bool "HAB Support" + help + Enable this option if you are building bootlets + for the iMX28 platform that needs to include instructions + for the secure boot mechanism present on these SoCs + +choice + prompt "Board" + help + Select the board to build the bootlets for + +config BR2_TARGET_MXS_BOOTLETS_STMP37xx + bool "Sigmatel ST-MP3-7xx Board" + +config BR2_TARGET_MXS_BOOTLETS_STMP378x + bool "Sigmatel ST-MP3-78x Board" + +config BR2_TARGET_MXS_BOOTLETS_IMX28EVK + bool "Freescale iMX28 EVK Board" + +config BR2_TARGET_MXS_BOOTLETS_CUSTOM_BOARD + bool "Custom board" +endchoice + +config BR2_TARGET_MXS_BOOTLETS_CUSTOM_BOARD_NAME + string "Custom board name" + depends on BR2_TARGET_MXS_BOOTLETS_CUSTOM_BOARD + help + Name of the board to build the bootlets for + +endif diff --git a/boot/mxs-bootlets/barebox_ivt.bd b/boot/mxs-bootlets/barebox_ivt.bd new file mode 100644 index 00000000..0c67e9cf --- /dev/null +++ b/boot/mxs-bootlets/barebox_ivt.bd @@ -0,0 +1,34 @@ +// STMP378x ROM command script to load and run U-Boot + +sources { + power_prep="./power_prep/power_prep"; + sdram_prep="./boot_prep/boot_prep"; + barebox="./barebox"; +} + +section (0) { + + //---------------------------------------------------------- + // Power Supply initialization + //---------------------------------------------------------- + + load power_prep; + load ivt (entry = power_prep:_start) > 0x8000; + hab call 0x8000; + + //---------------------------------------------------------- + // SDRAM initialization + //---------------------------------------------------------- + + load sdram_prep; + load ivt (entry = sdram_prep:_start) > 0x8000; + hab call 0x8000; + //---------------------------------------------------------- + // Load and call u_boot - ELF ARM image + //---------------------------------------------------------- + + load barebox; + load ivt (entry = barebox:start) > 0x8000; + hab call 0x8000; + +} diff --git a/boot/mxs-bootlets/mxs-bootlets.hash b/boot/mxs-bootlets/mxs-bootlets.hash new file mode 100644 index 00000000..6d3483c7 --- /dev/null +++ b/boot/mxs-bootlets/mxs-bootlets.hash @@ -0,0 +1,2 @@ +# locally computed +sha256 63f6068ae36884adef4259bbb1fe2591755718f22c46d0a59d854883dfab1ffc imx-bootlets-src-10.12.01.tar.gz diff --git a/boot/mxs-bootlets/mxs-bootlets.mk b/boot/mxs-bootlets/mxs-bootlets.mk new file mode 100644 index 00000000..adc22767 --- /dev/null +++ b/boot/mxs-bootlets/mxs-bootlets.mk @@ -0,0 +1,106 @@ +################################################################################ +# +# mxs-bootlets +# +################################################################################ + +ifeq ($(BR2_TARGET_MXS_BOOTLETS_CUSTOM_TARBALL),y) +MXS_BOOTLETS_TARBALL = $(call qstrip,$(BR2_TARGET_MXS_BOOTLETS_CUSTOM_TARBALL_URL)) +MXS_BOOTLETS_SITE = $(patsubst %/,%,$(dir $(MXS_BOOTLETS_TARBALL))) +MXS_BOOTLETS_SOURCE = $(notdir $(MXS_BOOTLETS_TARBALL)) +BR_NO_CHECK_HASH_FOR += $(MXS_BOOTLETS_SOURCE) +else ifeq ($(BR2_TARGET_MXS_BOOTLETS_CUSTOM_GIT),y) +MXS_BOOTLETS_SITE = $(BR2_TARGET_MXS_BOOTLETS_CUSTOM_GIT_URL) +MXS_BOOTLETS_SITE_METHOD = git +MXS_BOOTLETS_VERSION = $(call qstrip,$(BR2_TARGET_MXS_BOOTLETS_CUSTOM_GIT_VERSION)) +BR_NO_CHECK_HASH_FOR += $(MXS_BOOTLETS_SOURCE) +else +MXS_BOOTLETS_VERSION = 10.12.01 +MXS_BOOTLETS_SITE = http://download.ossystems.com.br/bsp/freescale/source +MXS_BOOTLETS_SOURCE = imx-bootlets-src-$(MXS_BOOTLETS_VERSION).tar.gz +endif + +ifeq ($(BR2_TARGET_MXS_BOOTLETS_STMP37xx),y) +MXS_BOOTLETS_BOARD = stmp37xx_dev +else ifeq ($(BR2_TARGET_MXS_BOOTLETS_STMP378x),y) +MXS_BOOTLETS_BOARD = stmp378x_dev +else ifeq ($(BR2_TARGET_MXS_BOOTLETS_IMX28EVK),y) +MXS_BOOTLETS_BOARD = iMX28_EVK +else ifeq ($(BR2_TARGET_MXS_BOOTLETS_CUSTOM_BOARD),y) +MXS_BOOTLETS_BOARD = $(call qstrip,$(BR2_TARGET_MXS_BOOTLETS_CUSTOM_BOARD_NAME)) +endif + +ifeq ($(BR2_TARGET_MXS_BOOTLETS_HAS_IVT),y) +MXS_BOOTLETS_IVT_SUFFIX = _ivt +MXS_BOOTLETS_ELFTOSB_OPTIONS += -f imx28 +endif + +MXS_BOOTLETS_DEPENDENCIES = host-elftosb +MXS_BOOTLETS_LICENSE = GPL-2.0+ + +ifeq ($(BR2_TARGET_MXS_BOOTLETS_BAREBOX),y) +MXS_BOOTLETS_DEPENDENCIES += barebox +MXS_BOOTLETS_BOOTDESC = barebox$(MXS_BOOTLETS_IVT_SUFFIX).bd +MXS_BOOTLETS_BOOTSTREAM = $(MXS_BOOTLETS_BOARD)_barebox$(MXS_BOOTLETS_IVT_SUFFIX).sb + +else ifeq ($(BR2_TARGET_MXS_BOOTLETS_LINUX),y) +MXS_BOOTLETS_DEPENDENCIES += linux +MXS_BOOTLETS_BOOTDESC = linux$(MXS_BOOTLETS_IVT_SUFFIX).bd +MXS_BOOTLETS_BOOTSTREAM = $(MXS_BOOTLETS_BOARD)_linux$(MXS_BOOTLETS_IVT_SUFFIX).sb + +else ifeq ($(BR2_TARGET_MXS_BOOTLETS_UBOOT),y) +MXS_BOOTLETS_DEPENDENCIES += uboot +MXS_BOOTLETS_BOOTDESC = uboot$(MXS_BOOTLETS_IVT_SUFFIX).bd +MXS_BOOTLETS_BOOTSTREAM = $(MXS_BOOTLETS_BOARD)_uboot$(MXS_BOOTLETS_IVT_SUFFIX).sb +endif + +ifeq ($(BR2_TARGET_MXS_BOOTLETS_BAREBOX),y) +define MXS_BOOTLETS_SED_BAREBOX + sed -i 's,[^ *]barebox.*;,\tbarebox="$(BAREBOX_DIR)/barebox";,' $(@D)/$(MXS_BOOTLETS_BOOTDESC) +endef +endif + +ifeq ($(BR2_TARGET_MXS_BOOTLETS_LINUX),y) +define MXS_BOOTLETS_BUILD_LINUX_PREP + BOARD=$(MXS_BOOTLETS_BOARD) CROSS_COMPILE="$(TARGET_CROSS)" \ + $(MAKE1) -C $(@D) linux_prep +endef +define MXS_BOOTLETS_SED_LINUX + sed -i 's,[^ *]linux_prep.*;,\tlinux_prep="$(@D)/linux_prep/output-target/linux_prep";,' $(@D)/$(MXS_BOOTLETS_BOOTDESC) + sed -i 's,[^ *]zImage.*;,\tzImage="$(LINUX_DIR)/arch/arm/boot/zImage";,' $(@D)/$(MXS_BOOTLETS_BOOTDESC) +endef +endif + +ifeq ($(BR2_TARGET_MXS_BOOTLETS_UBOOT),y) +define MXS_BOOTLETS_SED_UBOOT + sed -i 's,[^ *]u_boot.*;,\tu_boot="$(UBOOT_DIR)/u-boot";,' $(@D)/$(MXS_BOOTLETS_BOOTDESC) +endef +endif + +define MXS_BOOTLETS_INSTALL_BAREBOX_BOOTDESC + cp boot/mxs-bootlets/barebox_ivt.bd $(@D)/ +endef + +MXS_BOOTLETS_POST_EXTRACT_HOOKS += MXS_BOOTLETS_INSTALL_BAREBOX_BOOTDESC + +define MXS_BOOTLETS_BUILD_CMDS + BOARD=$(MXS_BOOTLETS_BOARD) CROSS_COMPILE="$(TARGET_CROSS)" \ + $(MAKE1) -C $(@D) power_prep + BOARD=$(MXS_BOOTLETS_BOARD) CROSS_COMPILE="$(TARGET_CROSS)" \ + $(MAKE1) -C $(@D) boot_prep + $(MXS_BOOTLETS_BUILD_LINUX_PREP) + sed -i 's,[^ *]power_prep.*;,\tpower_prep="$(@D)/power_prep/power_prep";,' $(@D)/$(MXS_BOOTLETS_BOOTDESC) + sed -i 's,[^ *]sdram_prep.*;,\tsdram_prep="$(@D)/boot_prep/boot_prep";,' $(@D)/$(MXS_BOOTLETS_BOOTDESC) + $(MXS_BOOTLETS_SED_BAREBOX) + $(MXS_BOOTLETS_SED_LINUX) + $(MXS_BOOTLETS_SED_UBOOT) + $(HOST_DIR)/bin/elftosb $(MXS_BOOTLETS_ELFTOSB_OPTIONS) \ + -z -c $(@D)/$(MXS_BOOTLETS_BOOTDESC) \ + -o $(@D)/$(MXS_BOOTLETS_BOOTSTREAM) +endef + +define MXS_BOOTLETS_INSTALL_TARGET_CMDS + cp $(@D)/$(MXS_BOOTLETS_BOOTSTREAM) $(BINARIES_DIR)/ +endef + +$(eval $(generic-package)) diff --git a/boot/opensbi/0001-Makefile-Don-t-specify-mabi-or-march.patch b/boot/opensbi/0001-Makefile-Don-t-specify-mabi-or-march.patch new file mode 100644 index 00000000..5f554a6c --- /dev/null +++ b/boot/opensbi/0001-Makefile-Don-t-specify-mabi-or-march.patch @@ -0,0 +1,37 @@ +From f5871e1f3650d6c8a032928cb5d8ca00c275c377 Mon Sep 17 00:00:00 2001 +From: Alistair Francis +Date: Fri, 15 Feb 2019 14:57:41 -0800 +Subject: [PATCH] Makefile: Don't specify mabi or march + +To avoid + can't link double-float modules with soft-float modules +errors when building 32-bit openSBI don't specify mabi or march. + +Signed-off-by: Alistair Francis +--- + Makefile | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/Makefile b/Makefile +index ae68f55..10851fc 100644 +--- a/Makefile ++++ b/Makefile +@@ -145,7 +145,6 @@ GENFLAGS += $(firmware-genflags-y) + CFLAGS = -g -Wall -Werror -nostdlib -fno-strict-aliasing -O2 + CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls + CFLAGS += -mno-save-restore -mstrict-align +-CFLAGS += -mabi=$(PLATFORM_RISCV_ABI) -march=$(PLATFORM_RISCV_ISA) + CFLAGS += -mcmodel=$(PLATFORM_RISCV_CODE_MODEL) + CFLAGS += $(GENFLAGS) + CFLAGS += $(platform-cflags-y) +@@ -158,7 +157,6 @@ CPPFLAGS += $(firmware-cppflags-y) + ASFLAGS = -g -Wall -nostdlib -D__ASSEMBLY__ + ASFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls + ASFLAGS += -mno-save-restore -mstrict-align +-ASFLAGS += -mabi=$(PLATFORM_RISCV_ABI) -march=$(PLATFORM_RISCV_ISA) + ASFLAGS += -mcmodel=$(PLATFORM_RISCV_CODE_MODEL) + ASFLAGS += $(GENFLAGS) + ASFLAGS += $(platform-asflags-y) +-- +2.20.1 + diff --git a/boot/opensbi/Config.in b/boot/opensbi/Config.in new file mode 100644 index 00000000..b9b0ace8 --- /dev/null +++ b/boot/opensbi/Config.in @@ -0,0 +1,34 @@ +config BR2_TARGET_OPENSBI + bool "opensbi" + depends on BR2_riscv + help + OpenSBI aims to provide an open-source and extensible + implementation of the RISC-V SBI specification for a platform + specific firmware (M-mode) and a general purpose OS, + hypervisor or bootloader (S-mode or HS-mode). OpenSBI + implementation can be easily extended by RISC-V platform or + System-on-Chip vendors to fit a particular hadware + configuration. + + https://github.com/riscv/opensbi.git + +if BR2_TARGET_OPENSBI +config BR2_TARGET_OPENSBI_PLAT + string "OpenSBI Platform" + default "" + help + Specifies the OpenSBI platform to build. If no platform is + specified only the OpenSBI platform independent static + library libsbi.a is built. If a platform is specified then + the platform specific static library libplatsbi.a and firmware + examples are built. + +config BR2_TARGET_OPENSBI_LINUX_PAYLOAD + bool "Include Linux as OpenSBI Payload" + depends on BR2_TARGET_OPENSBI_PLAT != "" + depends on BR2_LINUX_KERNEL + depends on BR2_LINUX_KERNEL_IMAGE + help + Build OpenSBI with the Linux kernel as a Payload. + +endif diff --git a/boot/opensbi/opensbi.hash b/boot/opensbi/opensbi.hash new file mode 100644 index 00000000..f7280b89 --- /dev/null +++ b/boot/opensbi/opensbi.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 17e048ac765e92e15f7436b604452614cf88dc2bcbbaab18cdc024f3fdd4c575 opensbi-0.8.tar.gz +sha256 82d13fb1bf6bb162629deeea9eb9c117e74548d3b707e478967691fe79a68e21 COPYING.BSD diff --git a/boot/opensbi/opensbi.mk b/boot/opensbi/opensbi.mk new file mode 100644 index 00000000..60b87c26 --- /dev/null +++ b/boot/opensbi/opensbi.mk @@ -0,0 +1,55 @@ +################################################################################ +# +# opensbi +# +################################################################################ + +OPENSBI_VERSION = 0.8 +OPENSBI_SITE = $(call github,riscv,opensbi,v$(OPENSBI_VERSION)) +OPENSBI_LICENSE = BSD-2-Clause +OPENSBI_LICENSE_FILES = COPYING.BSD +OPENSBI_INSTALL_TARGET = NO +OPENSBI_INSTALL_STAGING = YES + +OPENSBI_MAKE_ENV = \ + CROSS_COMPILE=$(TARGET_CROSS) + +OPENSBI_PLAT = $(call qstrip,$(BR2_TARGET_OPENSBI_PLAT)) +ifneq ($(OPENSBI_PLAT),) +OPENSBI_MAKE_ENV += PLATFORM=$(OPENSBI_PLAT) +endif + +ifeq ($(BR2_TARGET_OPENSBI_LINUX_PAYLOAD),y) +OPENSBI_DEPENDENCIES += linux +OPENSBI_MAKE_ENV += FW_PAYLOAD_PATH="$(BINARIES_DIR)/Image" +endif + +define OPENSBI_BUILD_CMDS + $(TARGET_MAKE_ENV) $(OPENSBI_MAKE_ENV) $(MAKE) -C $(@D) +endef + +ifneq ($(OPENSBI_PLAT),) +OPENSBI_INSTALL_IMAGES = YES +OPENSBI_FW_IMAGES += jump dynamic +ifeq ($(BR2_TARGET_OPENSBI_LINUX_PAYLOAD),y) +OPENSBI_FW_IMAGES += payload +endif +endif + +define OPENSBI_INSTALL_IMAGES_CMDS + $(foreach f,$(OPENSBI_FW_IMAGES),\ + $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_$(f).bin \ + $(BINARIES_DIR)/fw_$(f).bin + $(INSTALL) -m 0644 -D $(@D)/build/platform/$(OPENSBI_PLAT)/firmware/fw_$(f).elf \ + $(BINARIES_DIR)/fw_$(f).elf + ) +endef + +# libsbi.a is not a library meant to be linked in user-space code, but +# with bare metal code, which is why we don't install it in +# $(STAGING_DIR)/usr/lib +define OPENSBI_INSTALL_STAGING_CMDS + $(INSTALL) -m 0644 -D $(@D)/build/lib/libsbi.a $(STAGING_DIR)/usr/share/opensbi/libsbi.a +endef + +$(eval $(generic-package)) diff --git a/boot/optee-os/Config.in b/boot/optee-os/Config.in new file mode 100644 index 00000000..3076be6b --- /dev/null +++ b/boot/optee-os/Config.in @@ -0,0 +1,109 @@ +config BR2_TARGET_OPTEE_OS + bool "optee_os" + depends on BR2_ARM_CPU_ARMV8A || BR2_ARM_CPU_ARMV7A + help + OP-TEE OS provides the secure world boot image and the trust + application development kit of the OP-TEE project. OP-TEE OS + also provides generic trusted application one can embedded + into its system. + + http://github.com/OP-TEE/optee_os + +if BR2_TARGET_OPTEE_OS + +choice + prompt "OP-TEE OS version" + default BR2_TARGET_OPTEE_OS_LATEST + help + Select the version of OP-TEE OS you want to use + +config BR2_TARGET_OPTEE_OS_LATEST + bool "3.11.0" + help + Use the latest release tag from the OP-TEE OS official Git + repository. + +config BR2_TARGET_OPTEE_OS_CUSTOM_GIT + bool "Custom Git repository" + help + Use a custom version fetched from a Git repository. + +endchoice + +if BR2_TARGET_OPTEE_OS_CUSTOM_GIT + +config BR2_TARGET_OPTEE_OS_CUSTOM_REPO_URL + string "URL of custom repository" + depends on BR2_TARGET_OPTEE_OS_CUSTOM_GIT + help + Specific location of the reference source tree Git + repository. + +config BR2_TARGET_OPTEE_OS_CUSTOM_REPO_VERSION + string "Custom repository version" + depends on BR2_TARGET_OPTEE_OS_CUSTOM_GIT + help + Revision to use in the typical format used by Git, i.e a + SHA1 or a tag. + +endif + +config BR2_TARGET_OPTEE_OS_VERSION + string + default "3.11.0" if BR2_TARGET_OPTEE_OS_LATEST + default BR2_TARGET_OPTEE_OS_CUSTOM_REPO_VERSION \ + if BR2_TARGET_OPTEE_OS_CUSTOM_GIT + +config BR2_TARGET_OPTEE_OS_CORE + bool "Build core" + default y + help + This option will build and install the OP-TEE core + boot images. + +config BR2_TARGET_OPTEE_OS_SDK + bool "Build TA devkit" + default y + help + This option will build and install the OP-TEE development + kit for building OP-TEE trusted application images. It is + installed in the staging directory /lib/optee. + +config BR2_TARGET_OPTEE_OS_SERVICES + bool "Build service TAs and libs" + default y + select BR2_TARGET_OPTEE_OS_CORE + help + This option installs the service trusted applications and + trusted shared libraries built from OP-TEE OS source tree. + These are installed in target /lib/optee_armtz directory + as other trusted applications. At runtime OP-TEE OS can + load these from this non-secure filesystem/directory into + the secure world for execution. + +config BR2_TARGET_OPTEE_OS_PLATFORM + string "Target platform (mandatory)" + help + Value for the mandated PLATFORM build directive provided to + OP-TEE OS. + +config BR2_TARGET_OPTEE_OS_PLATFORM_FLAVOR + string "Target platform flavor (optional)" + help + Value for the optional PLATFORM_FLAVOR build directive + provided to OP-TEE OS. + +config BR2_TARGET_OPTEE_OS_ADDITIONAL_VARIABLES + string "Additional build variables" + help + Additional parameters for the OP-TEE OS build + E.g. 'CFG_TEE_CORE_LOG_LEVEL=3 CFG_UNWIND=y' + +config BR2_TARGET_OPTEE_OS_CORE_IMAGES + string "Binary boot images" + default "tee.bin tee-*_v2.bin" + help + Names of generated image files that are installed in the + output images/ directory. + +endif # BR2_TARGET_OPTEE_OS diff --git a/boot/optee-os/optee-os.hash b/boot/optee-os/optee-os.hash new file mode 100644 index 00000000..0d60cebe --- /dev/null +++ b/boot/optee-os/optee-os.hash @@ -0,0 +1,4 @@ +# From https://github.com/OP-TEE/optee_os/archive/3.11.0.tar.gz +sha256 3c34eda1052fbb9ed36fcfdfaecfd2685023b9290670c1a5982f8a0457bfd2cb optee-os-3.11.0.tar.gz +# Locally computed +sha256 1247ee90858f4037b6cac63cbffddfed435d0d73c631b37d78c1e6e6ab3e5d1a LICENSE diff --git a/boot/optee-os/optee-os.mk b/boot/optee-os/optee-os.mk new file mode 100644 index 00000000..03ce08ff --- /dev/null +++ b/boot/optee-os/optee-os.mk @@ -0,0 +1,121 @@ +################################################################################ +# +# optee-os +# +################################################################################ + +OPTEE_OS_VERSION = $(call qstrip,$(BR2_TARGET_OPTEE_OS_VERSION)) +OPTEE_OS_LICENSE = BSD-2-Clause +ifeq ($(BR2_TARGET_OPTEE_OS_LATEST),y) +OPTEE_OS_LICENSE_FILES = LICENSE +endif + +OPTEE_OS_INSTALL_STAGING = YES +OPTEE_OS_INSTALL_IMAGES = YES + +ifeq ($(BR2_TARGET_OPTEE_OS_CUSTOM_GIT),y) +OPTEE_OS_SITE = $(call qstrip,$(BR2_TARGET_OPTEE_OS_CUSTOM_REPO_URL)) +OPTEE_OS_SITE_METHOD = git +BR_NO_CHECK_HASH_FOR += $(OPTEE_OS_SOURCE) +else +OPTEE_OS_SITE = $(call github,OP-TEE,optee_os,$(OPTEE_OS_VERSION)) +endif + +OPTEE_OS_DEPENDENCIES = host-openssl host-python3 host-python3-pycryptodomex host-python3-pyelftools + +# On 64bit targets, OP-TEE OS can be built in 32bit mode, or +# can be built in 64bit mode and support 32bit and 64bit +# trusted applications. Since buildroot currently references +# a single cross compiler, build exclusively in 32bit +# or 64bit mode. +OPTEE_OS_MAKE_OPTS = \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + CROSS_COMPILE_core="$(TARGET_CROSS)" \ + CROSS_COMPILE_ta_arm64="$(TARGET_CROSS)" \ + CROSS_COMPILE_ta_arm32="$(TARGET_CROSS)" \ + PYTHON3="$(HOST_DIR)/bin/python3" + +ifeq ($(BR2_aarch64),y) +OPTEE_OS_MAKE_OPTS += \ + CFG_ARM64_core=y \ + CFG_USER_TA_TARGETS=ta_arm64 +else +OPTEE_OS_MAKE_OPTS += \ + CFG_ARM32_core=y +endif + +# Get mandatory PLAFORM and optional PLATFORM_FLAVOR and additional +# variables +OPTEE_OS_MAKE_OPTS += PLATFORM=$(call qstrip,$(BR2_TARGET_OPTEE_OS_PLATFORM)) +ifneq ($(call qstrip,$(BR2_TARGET_OPTEE_OS_PLATFORM_FLAVOR)),) +OPTEE_OS_MAKE_OPTS += PLATFORM_FLAVOR=$(call qstrip,$(BR2_TARGET_OPTEE_OS_PLATFORM_FLAVOR)) +endif +OPTEE_OS_MAKE_OPTS += $(call qstrip,$(BR2_TARGET_OPTEE_OS_ADDITIONAL_VARIABLES)) + +# Requests OP-TEE OS to build from subdirectory out/ of its sourcetree +# root path otherwise the output directory path depends on the target +# platform name. +OPTEE_OS_BUILDDIR_OUT = out +ifeq ($(BR2_aarch64),y) +OPTEE_OS_LOCAL_SDK = $(OPTEE_OS_BUILDDIR_OUT)/export-ta_arm64 +OPTEE_OS_SDK = $(STAGING_DIR)/lib/optee/export-ta_arm64 +endif +ifeq ($(BR2_arm),y) +OPTEE_OS_LOCAL_SDK = $(OPTEE_OS_BUILDDIR_OUT)/export-ta_arm32 +OPTEE_OS_SDK = $(STAGING_DIR)/lib/optee/export-ta_arm32 +endif + +OPTEE_OS_IMAGE_FILES = $(call qstrip,$(BR2_TARGET_OPTEE_OS_CORE_IMAGES)) + +ifeq ($(BR2_TARGET_OPTEE_OS_CORE),y) +define OPTEE_OS_BUILD_CORE + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) O=$(OPTEE_OS_BUILDDIR_OUT) \ + $(TARGET_CONFIGURE_OPTS) $(OPTEE_OS_MAKE_OPTS) all +endef +define OPTEE_OS_INSTALL_IMAGES_CORE + mkdir -p $(BINARIES_DIR) + $(foreach f,$(OPTEE_OS_IMAGE_FILES), \ + cp -dpf $(wildcard $(@D)/$(OPTEE_OS_BUILDDIR_OUT)/core/$(f)) $(BINARIES_DIR)/ + ) +endef +endif # BR2_TARGET_OPTEE_OS_CORE + +ifeq ($(BR2_TARGET_OPTEE_OS_SERVICES),y) +define OPTEE_OS_INSTALL_TARGET_CMDS + $(if $(wildcard $(@D)/$(OPTEE_OS_BUILDDIR_OUT)/ta/*/*.ta), + $(INSTALL) -D -m 444 -t $(TARGET_DIR)/lib/optee_armtz \ + $(@D)/$(OPTEE_OS_BUILDDIR_OUT)/ta/*/*.ta) + $(if $(wildcard $(@D)/$(OPTEE_OS_LOCAL_SDK)/lib/*.ta), + $(INSTALL) -D -m 444 -t $(TARGET_DIR)/lib/optee_armtz \ + $(@D)/$(OPTEE_OS_LOCAL_SDK)/lib/*.ta) +endef +endif # BR2_TARGET_OPTEE_OS_SERVICES + +ifeq ($(BR2_TARGET_OPTEE_OS_SDK),y) +define OPTEE_OS_BUILD_SDK + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) O=$(OPTEE_OS_BUILDDIR_OUT) \ + $(TARGET_CONFIGURE_OPTS) $(OPTEE_OS_MAKE_OPTS) ta_dev_kit +endef +define OPTEE_OS_INSTALL_STAGING_CMDS + mkdir -p $(OPTEE_OS_SDK) + cp -ardpf $(@D)/$(OPTEE_OS_LOCAL_SDK)/* $(OPTEE_OS_SDK) +endef +endif # BR2_TARGET_OPTEE_OS_SDK + +define OPTEE_OS_BUILD_CMDS + $(OPTEE_OS_BUILD_CORE) + $(OPTEE_OS_BUILD_SDK) +endef + +define OPTEE_OS_INSTALL_IMAGES_CMDS + $(OPTEE_OS_INSTALL_IMAGES_CORE) + $(OPTEE_OS_INSTALL_IMAGES_SERVICES) +endef + +ifeq ($(BR2_TARGET_OPTEE_OS)$(BR_BUILDING),yy) +ifeq ($(call qstrip,$(BR2_TARGET_OPTEE_OS_PLATFORM)),) +$(error No OP-TEE OS platform set. Check your BR2_TARGET_OPTEE_OS_PLATFORM setting) +endif +endif # BR2_TARGET_OPTEE_OS && BR2_BUILDING + +$(eval $(generic-package)) diff --git a/boot/s500-bootloader/Config.in b/boot/s500-bootloader/Config.in new file mode 100644 index 00000000..7bb689f3 --- /dev/null +++ b/boot/s500-bootloader/Config.in @@ -0,0 +1,17 @@ +config BR2_TARGET_S500_BOOTLOADER + bool "s500-bootloader" + depends on BR2_arm + depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86" + select BR2_HOSTARCH_NEEDS_IA32_LIBS + help + 1st level bootloader for Actions Semiconductor S500 SoC. + + https://github.com/xapp-le/owl + +config BR2_TARGET_S500_BOOTLOADER_BOARD + string "board to configure for" + depends on BR2_TARGET_S500_BOOTLOADER + help + Specify the board to configure the bootloader for. + This should be the name of a directory under s500/boards + containing a suitable bootloader.ini file. diff --git a/boot/s500-bootloader/s500-bootloader.hash b/boot/s500-bootloader/s500-bootloader.hash new file mode 100644 index 00000000..d538f23b --- /dev/null +++ b/boot/s500-bootloader/s500-bootloader.hash @@ -0,0 +1,2 @@ +# Locally calculated +sha256 b183024ac69f51ea7befd28d03b2ec35a7280e270405600fb4f37aa91d9c9571 s500-bootloader-a8d7fa1d9a7f353ec4613febf30f4ca99a10a106.tar.gz diff --git a/boot/s500-bootloader/s500-bootloader.mk b/boot/s500-bootloader/s500-bootloader.mk new file mode 100644 index 00000000..bc87b091 --- /dev/null +++ b/boot/s500-bootloader/s500-bootloader.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# s500-bootloader +# +################################################################################ + +S500_BOOTLOADER_VERSION = a8d7fa1d9a7f353ec4613febf30f4ca99a10a106 +S500_BOOTLOADER_SITE = $(call github,xapp-le,owl,$(S500_BOOTLOADER_VERSION)) +S500_BOOTLOADER_LICENSE = PROPRIETARY +S500_BOOTLOADER_INSTALL_TARGET = NO +S500_BOOTLOADER_INSTALL_IMAGES = YES + +S500_BOOTLOADER_BOARD = $(call qstrip,$(BR2_TARGET_S500_BOOTLOADER_BOARD)) + +define S500_BOOTLOADER_BUILD_CMDS + cd $(@D) && ./tools/utils/bootloader_pack \ + s500/bootloader/bootloader.bin \ + s500/boards/$(S500_BOOTLOADER_BOARD)/bootloader.ini \ + s500-bootloader.bin +endef + +define S500_BOOTLOADER_INSTALL_IMAGES_CMDS + $(INSTALL) -m 0644 -D $(@D)/s500-bootloader.bin \ + $(BINARIES_DIR)/s500-bootloader.bin +endef + +$(eval $(generic-package)) + +ifeq ($(BR2_TARGET_S500_BOOTLOADER)$(BR_BUILDING),yy) +# we NEED a board name +ifeq ($(S500_BOOTLOADER_BOARD),) +$(error No s500-bootloader board specified. Check your BR2_TARGET_S500_BOOTLOADER settings) +endif +endif diff --git a/boot/shim/0001-console-Fix-a-typo-in-the-EFI-warning-list-in-gnu-ef.patch b/boot/shim/0001-console-Fix-a-typo-in-the-EFI-warning-list-in-gnu-ef.patch new file mode 100644 index 00000000..77d1b54f --- /dev/null +++ b/boot/shim/0001-console-Fix-a-typo-in-the-EFI-warning-list-in-gnu-ef.patch @@ -0,0 +1,57 @@ +From b00d7f63df7ee6f74a63515f1469768e9cb2aa7a Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 26 Aug 2019 16:12:05 -0400 +Subject: [PATCH] console: Fix a typo in the EFI warning list in gnu-efi + +Some versions of gnu-efi have a typo, in which "EFI_WARN_UNKNOWN_GLYPH" +is accidentally "EFI_WARN_UNKOWN_GLYPH". Work around that, so that we +can use the not-silly one in console.c's list of error and warning +messages. + +This is a backport from devel for: + + commit 5f62b22ccd636d326b3229a2b196118701c6f3f7 + Author: Peter Jones + Date: Mon Aug 26 16:12:05 2019 -0400 + +Signed-off-by: Peter Jones +Upstream: d230d02f990f02293736dca78b108f86c86d1bd0 +Signed-off-by: Thomas Petazzoni +--- + include/console.h | 6 ++++++ + lib/console.c | 2 +- + 2 files changed, 7 insertions(+), 1 deletion(-) + +diff --git a/include/console.h b/include/console.h +index deb4fa3..00da98d 100644 +--- a/include/console.h ++++ b/include/console.h +@@ -7,6 +7,12 @@ + #define PrintAt(fmt, ...) \ + ({"Do not directly call PrintAt() use console_print_at() instead" = 1;}); + ++#if !defined(EFI_WARN_UNKNOWN_GLYPH) && defined(EFI_WARN_UNKOWN_GLYPH) ++#define EFI_WARN_UNKNOWN_GLYPH EFI_WARN_UNKOWN_GLYPH ++#elif !defined(EFI_WARN_UNKNOWN_GLYPH) ++#define EFI_WARN_UNKNOWN_GLYPH EFIWARN(1) ++#endif ++ + EFI_STATUS + console_get_keystroke(EFI_INPUT_KEY *key); + UINTN +diff --git a/lib/console.c b/lib/console.c +index 3aee41c..ccd4d4d 100644 +--- a/lib/console.c ++++ b/lib/console.c +@@ -445,7 +445,7 @@ static struct { + { EFI_SECURITY_VIOLATION, L"Security Violation"}, + + // warnings +- { EFI_WARN_UNKOWN_GLYPH, L"Warning Unknown Glyph"}, ++ { EFI_WARN_UNKNOWN_GLYPH, L"Warning Unknown Glyph"}, + { EFI_WARN_DELETE_FAILURE, L"Warning Delete Failure"}, + { EFI_WARN_WRITE_FAILURE, L"Warning Write Failure"}, + { EFI_WARN_BUFFER_TOO_SMALL, L"Warning Buffer Too Small"}, +-- +2.30.2 + diff --git a/boot/shim/0002-Work-around-stuff-Waddress-of-packed-member-finds.patch b/boot/shim/0002-Work-around-stuff-Waddress-of-packed-member-finds.patch new file mode 100644 index 00000000..9a6187b1 --- /dev/null +++ b/boot/shim/0002-Work-around-stuff-Waddress-of-packed-member-finds.patch @@ -0,0 +1,90 @@ +From 7c1d3d8116b78bf096b7b8c6da5486f37efeb75f Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 13 May 2019 16:34:35 -0400 +Subject: [PATCH] Work around stuff -Waddress-of-packed-member finds. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +In MokManager we get a lot of these: + +../src/MokManager.c:1063:19: error: taking address of packed member of ‘struct ’ may result in an unaligned pointer value [-Werror=address-of-packed-member] + 1063 | if (CompareGuid(&(list[i].Type), &X509_GUID) == 0) + | ^~~~~~~~~~~~~~~ + +The reason for this is that gnu-efi takes EFI_GUID * as its argument +instead of VOID *, and there's nothing telling the compiler that it +doesn't have alignment constraints on the input, so the compiler wants +it to have 16-byte alignment. + +Just use CompareMem() for these, as that's all CompareGuid is calling +anyway. + +Signed-off-by: Peter Jones +Upstream: 2cbf56b82a5102777b37c4f7f47c8cf058cea027 +Signed-off-by: Thomas Petazzoni +--- + MokManager.c | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/MokManager.c b/MokManager.c +index 7e40a38..5d0a979 100644 +--- a/MokManager.c ++++ b/MokManager.c +@@ -22,6 +22,8 @@ + #define CERT_STRING L"Select an X509 certificate to enroll:\n\n" + #define HASH_STRING L"Select a file to trust:\n\n" + ++#define CompareMemberGuid(x, y) CompareMem(x, y, sizeof(EFI_GUID)) ++ + typedef struct { + UINT32 MokSize; + UINT8 *Mok; +@@ -1078,7 +1080,7 @@ static EFI_STATUS write_back_mok_list(MokListNode * list, INTN key_num, + continue; + + DataSize += sizeof(EFI_SIGNATURE_LIST); +- if (CompareGuid(&(list[i].Type), &X509_GUID) == 0) ++ if (CompareMemberGuid(&(list[i].Type), &X509_GUID) == 0) + DataSize += sizeof(EFI_GUID); + DataSize += list[i].MokSize; + } +@@ -1100,7 +1102,7 @@ static EFI_STATUS write_back_mok_list(MokListNode * list, INTN key_num, + CertList->SignatureType = list[i].Type; + CertList->SignatureHeaderSize = 0; + +- if (CompareGuid(&(list[i].Type), &X509_GUID) == 0) { ++ if (CompareMemberGuid(&(list[i].Type), &X509_GUID) == 0) { + CertList->SignatureListSize = list[i].MokSize + + sizeof(EFI_SIGNATURE_LIST) + sizeof(EFI_GUID); + CertList->SignatureSize = +@@ -1141,7 +1143,7 @@ static void delete_cert(void *key, UINT32 key_size, + int i; + + for (i = 0; i < mok_num; i++) { +- if (CompareGuid(&(mok[i].Type), &X509_GUID) != 0) ++ if (CompareMemberGuid(&(mok[i].Type), &X509_GUID) != 0) + continue; + + if (mok[i].MokSize == key_size && +@@ -1192,7 +1194,7 @@ static void delete_hash_in_list(EFI_GUID Type, UINT8 * hash, UINT32 hash_size, + sig_size = hash_size + sizeof(EFI_GUID); + + for (i = 0; i < mok_num; i++) { +- if ((CompareGuid(&(mok[i].Type), &Type) != 0) || ++ if ((CompareMemberGuid(&(mok[i].Type), &Type) != 0) || + (mok[i].MokSize < sig_size)) + continue; + +@@ -1356,7 +1358,7 @@ static EFI_STATUS delete_keys(void *MokDel, UINTN MokDelSize, BOOLEAN MokX) + + /* Search and destroy */ + for (i = 0; i < del_num; i++) { +- if (CompareGuid(&(del_key[i].Type), &X509_GUID) == 0) { ++ if (CompareMemberGuid(&(del_key[i].Type), &X509_GUID) == 0) { + delete_cert(del_key[i].Mok, del_key[i].MokSize, + mok, mok_num); + } else if (is_sha2_hash(del_key[i].Type)) { +-- +2.30.2 + diff --git a/boot/shim/0003-MokManager-Use-CompareMem-on-MokListNode.Type-instea.patch b/boot/shim/0003-MokManager-Use-CompareMem-on-MokListNode.Type-instea.patch new file mode 100644 index 00000000..5f8f4451 --- /dev/null +++ b/boot/shim/0003-MokManager-Use-CompareMem-on-MokListNode.Type-instea.patch @@ -0,0 +1,73 @@ +From 694a91664a7f5018bdc1e1092e07a8ac7fc35fc0 Mon Sep 17 00:00:00 2001 +From: Gary Lin +Date: Tue, 26 Feb 2019 11:33:53 +0800 +Subject: [PATCH] MokManager: Use CompareMem on MokListNode.Type instead of + CompareGuid + +Fix the errors from gcc9 '-Werror=address-of-packed-member' + +https://github.com/rhboot/shim/issues/161 + +Signed-off-by: Gary Lin +Upstream: 5d30a31fef4eb7e773da24c5e6c20576282a9c3a +Signed-off-by: Thomas Petazzoni +--- + MokManager.c | 14 +++++++++----- + 1 file changed, 9 insertions(+), 5 deletions(-) + +diff --git a/MokManager.c b/MokManager.c +index 5d0a979..e13400b 100644 +--- a/MokManager.c ++++ b/MokManager.c +@@ -1080,7 +1080,8 @@ static EFI_STATUS write_back_mok_list(MokListNode * list, INTN key_num, + continue; + + DataSize += sizeof(EFI_SIGNATURE_LIST); +- if (CompareMemberGuid(&(list[i].Type), &X509_GUID) == 0) ++ if (CompareMem(&(list[i].Type), &X509_GUID, ++ sizeof(EFI_GUID)) == 0) + DataSize += sizeof(EFI_GUID); + DataSize += list[i].MokSize; + } +@@ -1102,7 +1103,8 @@ static EFI_STATUS write_back_mok_list(MokListNode * list, INTN key_num, + CertList->SignatureType = list[i].Type; + CertList->SignatureHeaderSize = 0; + +- if (CompareMemberGuid(&(list[i].Type), &X509_GUID) == 0) { ++ if (CompareMem(&(list[i].Type), &X509_GUID, ++ sizeof(EFI_GUID)) == 0) { + CertList->SignatureListSize = list[i].MokSize + + sizeof(EFI_SIGNATURE_LIST) + sizeof(EFI_GUID); + CertList->SignatureSize = +@@ -1143,7 +1145,8 @@ static void delete_cert(void *key, UINT32 key_size, + int i; + + for (i = 0; i < mok_num; i++) { +- if (CompareMemberGuid(&(mok[i].Type), &X509_GUID) != 0) ++ if (CompareMem(&(mok[i].Type), &X509_GUID, ++ sizeof(EFI_GUID)) != 0) + continue; + + if (mok[i].MokSize == key_size && +@@ -1194,7 +1197,7 @@ static void delete_hash_in_list(EFI_GUID Type, UINT8 * hash, UINT32 hash_size, + sig_size = hash_size + sizeof(EFI_GUID); + + for (i = 0; i < mok_num; i++) { +- if ((CompareMemberGuid(&(mok[i].Type), &Type) != 0) || ++ if ((CompareMem(&(mok[i].Type), &Type, sizeof(EFI_GUID)) != 0) || + (mok[i].MokSize < sig_size)) + continue; + +@@ -1358,7 +1361,8 @@ static EFI_STATUS delete_keys(void *MokDel, UINTN MokDelSize, BOOLEAN MokX) + + /* Search and destroy */ + for (i = 0; i < del_num; i++) { +- if (CompareMemberGuid(&(del_key[i].Type), &X509_GUID) == 0) { ++ if (CompareMem(&(del_key[i].Type), &X509_GUID, ++ sizeof(EFI_GUID)) == 0) { + delete_cert(del_key[i].Mok, del_key[i].MokSize, + mok, mok_num); + } else if (is_sha2_hash(del_key[i].Type)) { +-- +2.30.2 + diff --git a/boot/shim/0004-MokManager-avoid-Werror-address-of-packed-member.patch b/boot/shim/0004-MokManager-avoid-Werror-address-of-packed-member.patch new file mode 100644 index 00000000..d86c5bb0 --- /dev/null +++ b/boot/shim/0004-MokManager-avoid-Werror-address-of-packed-member.patch @@ -0,0 +1,112 @@ +From f17f67fef7ae05cbad8609aacef41a448a2d8d54 Mon Sep 17 00:00:00 2001 +From: Jonas Witschel +Date: Thu, 5 Sep 2019 10:39:37 +0200 +Subject: [PATCH] MokManager: avoid -Werror=address-of-packed-member +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When compiling with GCC 9, there are a couple of errors of the form + +MokManager.c: In function ‘write_back_mok_list’: +MokManager.c:1056:19: error: taking address of packed member of ‘struct ’ may result in an unaligned pointer value [-Werror=address-of-packed-member] + 1056 | if (CompareGuid(&(list[i].Type), &X509_GUID) == 0) + | ^~~~~~~~~~~~~~~ + +Copying the member of the packed struct to a temporary variable and +pointing to that variable solves the problem. + +Upstream: d57e53f3bddc4bc7299b3d5efd5ba8c547e8dfa5 +Signed-off-by: Thomas Petazzoni +--- + MokManager.c | 22 +++++++++++++--------- + 1 file changed, 13 insertions(+), 9 deletions(-) + +diff --git a/MokManager.c b/MokManager.c +index e13400b..1a8d666 100644 +--- a/MokManager.c ++++ b/MokManager.c +@@ -1065,6 +1065,7 @@ static EFI_STATUS write_back_mok_list(MokListNode * list, INTN key_num, + EFI_STATUS efi_status; + EFI_SIGNATURE_LIST *CertList; + EFI_SIGNATURE_DATA *CertData; ++ EFI_GUID type; + void *Data = NULL, *ptr; + INTN DataSize = 0; + int i; +@@ -1080,8 +1081,8 @@ static EFI_STATUS write_back_mok_list(MokListNode * list, INTN key_num, + continue; + + DataSize += sizeof(EFI_SIGNATURE_LIST); +- if (CompareMem(&(list[i].Type), &X509_GUID, +- sizeof(EFI_GUID)) == 0) ++ type = list[i].Type; /* avoid -Werror=address-of-packed-member */ ++ if (CompareGuid(&type, &X509_GUID) == 0) + DataSize += sizeof(EFI_GUID); + DataSize += list[i].MokSize; + } +@@ -1103,8 +1104,7 @@ static EFI_STATUS write_back_mok_list(MokListNode * list, INTN key_num, + CertList->SignatureType = list[i].Type; + CertList->SignatureHeaderSize = 0; + +- if (CompareMem(&(list[i].Type), &X509_GUID, +- sizeof(EFI_GUID)) == 0) { ++ if (CompareGuid(&(CertList->SignatureType), &X509_GUID) == 0) { + CertList->SignatureListSize = list[i].MokSize + + sizeof(EFI_SIGNATURE_LIST) + sizeof(EFI_GUID); + CertList->SignatureSize = +@@ -1142,11 +1142,12 @@ static EFI_STATUS write_back_mok_list(MokListNode * list, INTN key_num, + static void delete_cert(void *key, UINT32 key_size, + MokListNode * mok, INTN mok_num) + { ++ EFI_GUID type; + int i; + + for (i = 0; i < mok_num; i++) { +- if (CompareMem(&(mok[i].Type), &X509_GUID, +- sizeof(EFI_GUID)) != 0) ++ type = mok[i].Type; /* avoid -Werror=address-of-packed-member */ ++ if (CompareGuid(&type, &X509_GUID) != 0) + continue; + + if (mok[i].MokSize == key_size && +@@ -1188,6 +1189,7 @@ static void mem_move(void *dest, void *src, UINTN size) + static void delete_hash_in_list(EFI_GUID Type, UINT8 * hash, UINT32 hash_size, + MokListNode * mok, INTN mok_num) + { ++ EFI_GUID type; + UINT32 sig_size; + UINT32 list_num; + int i, del_ind; +@@ -1197,7 +1199,8 @@ static void delete_hash_in_list(EFI_GUID Type, UINT8 * hash, UINT32 hash_size, + sig_size = hash_size + sizeof(EFI_GUID); + + for (i = 0; i < mok_num; i++) { +- if ((CompareMem(&(mok[i].Type), &Type, sizeof(EFI_GUID)) != 0) || ++ type = mok[i].Type; /* avoid -Werror=address-of-packed-member */ ++ if ((CompareGuid(&type, &Type) != 0) || + (mok[i].MokSize < sig_size)) + continue; + +@@ -1253,6 +1256,7 @@ static void delete_hash_list(EFI_GUID Type, void *hash_list, UINT32 list_size, + static EFI_STATUS delete_keys(void *MokDel, UINTN MokDelSize, BOOLEAN MokX) + { + EFI_STATUS efi_status; ++ EFI_GUID type; + CHAR16 *db_name; + CHAR16 *auth_name; + CHAR16 *err_strs[] = { NULL, NULL, NULL }; +@@ -1361,8 +1365,8 @@ static EFI_STATUS delete_keys(void *MokDel, UINTN MokDelSize, BOOLEAN MokX) + + /* Search and destroy */ + for (i = 0; i < del_num; i++) { +- if (CompareMem(&(del_key[i].Type), &X509_GUID, +- sizeof(EFI_GUID)) == 0) { ++ type = del_key[i].Type; /* avoid -Werror=address-of-packed-member */ ++ if (CompareGuid(&type, &X509_GUID) == 0) { + delete_cert(del_key[i].Mok, del_key[i].MokSize, + mok, mok_num); + } else if (is_sha2_hash(del_key[i].Type)) { +-- +2.30.2 + diff --git a/boot/shim/Config.in b/boot/shim/Config.in new file mode 100644 index 00000000..ea6650f5 --- /dev/null +++ b/boot/shim/Config.in @@ -0,0 +1,19 @@ +config BR2_TARGET_SHIM + bool "shim" + depends on BR2_PACKAGE_GNU_EFI_ARCH_SUPPORTS + # ARM32 build currently broken + depends on !BR2_ARM_CPU_HAS_ARM + select BR2_PACKAGE_GNU_EFI + help + Boot loader to chain-load signed boot loaders under Secure + Boot. + + This package provides a minimalist boot loader which allows + verifying signatures of other UEFI binaries against either + the Secure Boot DB/DBX or against a built-in signature + database. Its purpose is to allow a small, + infrequently-changing binary to be signed by the UEFI CA, + while allowing an OS distributor to revision their main + bootloader independently of the CA. + + https://github.com/rhboot/shim diff --git a/boot/shim/shim.hash b/boot/shim/shim.hash new file mode 100644 index 00000000..318390f8 --- /dev/null +++ b/boot/shim/shim.hash @@ -0,0 +1,3 @@ +# locally computed hash +sha256 279d19cc95b9974ea2379401a6a0653d949c3fa3d61f0c4bd6a7b9e840bdc425 shim-15.tar.gz +sha256 15edf527919ddcb2f514ab9d16ad07ef219e4bb490e0b79560be510f0c159cc2 COPYRIGHT diff --git a/boot/shim/shim.mk b/boot/shim/shim.mk new file mode 100644 index 00000000..e0f01a8a --- /dev/null +++ b/boot/shim/shim.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# shim +# +################################################################################ + +SHIM_VERSION = 15 +SHIM_SITE = $(call github,rhboot,shim,$(SHIM_VERSION)) +SHIM_LICENSE = BSD-2-Clause +SHIM_LICENSE_FILES = COPYRIGHT +SHIM_CPE_ID_VENDOR = redhat +SHIM_DEPENDENCIES = gnu-efi +SHIM_INSTALL_TARGET = NO +SHIM_INSTALL_IMAGES = YES + +SHIM_MAKE_OPTS = \ + ARCH="$(GNU_EFI_PLATFORM)" \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + DASHJ="-j$(PARALLEL_JOBS)" \ + EFI_INCLUDE="$(STAGING_DIR)/usr/include/efi" \ + EFI_PATH="$(STAGING_DIR)/usr/lib" \ + LIBDIR="$(STAGING_DIR)/usr/lib" + +define SHIM_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) $(SHIM_MAKE_OPTS) +endef + +define SHIM_INSTALL_IMAGES_CMDS + $(INSTALL) -m 0755 -t $(BINARIES_DIR) $(@D)/*.efi +endef + +$(eval $(generic-package)) diff --git a/boot/syslinux/0001-bios-Fix-alignment-change-with-gcc-5.patch b/boot/syslinux/0001-bios-Fix-alignment-change-with-gcc-5.patch new file mode 100644 index 00000000..633d996e --- /dev/null +++ b/boot/syslinux/0001-bios-Fix-alignment-change-with-gcc-5.patch @@ -0,0 +1,82 @@ +From da5cbd1a3b248f2d32281a1766a3d1414c0e8e03 Mon Sep 17 00:00:00 2001 +From: Sylvain Gault +Date: Tue, 29 Sep 2015 02:38:25 +0200 +Subject: [PATCH] bios: Fix alignment change with gcc 5 + +The section aligment specified in the ld scripts have to be greater or +equal to those in the .o files generated by gcc. + +Signed-off-by: Sylvain Gault +Tested-by: poma +Signed-off-by: Paulo Alcantara +Signed-off-by: Frank Hunleth +--- + core/i386/syslinux.ld | 6 +++--- + core/x86_64/syslinux.ld | 6 +++--- + 2 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/core/i386/syslinux.ld b/core/i386/syslinux.ld +index 7b4e012..7390451 100644 +--- a/core/i386/syslinux.ld ++++ b/core/i386/syslinux.ld +@@ -266,7 +266,7 @@ SECTIONS + __text_end = .; + } + +- . = ALIGN(16); ++ . = ALIGN(32); + + __rodata_vma = .; + __rodata_lma = __rodata_vma + __text_lma - __text_vma; +@@ -361,7 +361,7 @@ SECTIONS + __dynamic_end = .; + } + +- . = ALIGN(16); ++ . = ALIGN(32); + + __data_vma = .; + __data_lma = __data_vma + __text_lma - __text_vma; +@@ -377,7 +377,7 @@ SECTIONS + __pm_code_dwords = (__pm_code_len + 3) >> 2; + + . = ALIGN(128); +- ++ + __bss_vma = .; + __bss_lma = .; /* Dummy */ + .bss (NOLOAD) : AT (__bss_lma) { +diff --git a/core/x86_64/syslinux.ld b/core/x86_64/syslinux.ld +index 1057112..bf815c4 100644 +--- a/core/x86_64/syslinux.ld ++++ b/core/x86_64/syslinux.ld +@@ -266,7 +266,7 @@ SECTIONS + __text_end = .; + } + +- . = ALIGN(16); ++ . = ALIGN(32); + + __rodata_vma = .; + __rodata_lma = __rodata_vma + __text_lma - __text_vma; +@@ -361,7 +361,7 @@ SECTIONS + __dynamic_end = .; + } + +- . = ALIGN(16); ++ . = ALIGN(32); + + __data_vma = .; + __data_lma = __data_vma + __text_lma - __text_vma; +@@ -377,7 +377,7 @@ SECTIONS + __pm_code_dwords = (__pm_code_len + 3) >> 2; + + . = ALIGN(128); +- ++ + __bss_vma = .; + __bss_lma = .; /* Dummy */ + .bss (NOLOAD) : AT (__bss_lma) { +-- +2.7.4 + diff --git a/boot/syslinux/0002-Disable-PIE-to-avoid-FTBFS-on-amd64.patch b/boot/syslinux/0002-Disable-PIE-to-avoid-FTBFS-on-amd64.patch new file mode 100644 index 00000000..64a08b85 --- /dev/null +++ b/boot/syslinux/0002-Disable-PIE-to-avoid-FTBFS-on-amd64.patch @@ -0,0 +1,30 @@ +From 250bf2c921713434627dc7bc8b0918fa0841f9b7 Mon Sep 17 00:00:00 2001 +From: Graham Inggs +Date: Wed, 5 Apr 2017 22:03:12 +0200 +Subject: [PATCH] Disable PIE to avoid FTBFS on amd64 + +gcc 6.x has PIE support enabled by default, which causes a build issue +with syslinux. This patch disables PIE support in the relevant +syslinux Makefile. + +Signed-off-by: Ryan Coe +--- + gpxe/src/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/gpxe/src/Makefile b/gpxe/src/Makefile +index cc91d78..077af64 100644 +--- a/gpxe/src/Makefile ++++ b/gpxe/src/Makefile +@@ -4,7 +4,7 @@ + # + + CLEANUP := +-CFLAGS := ++CFLAGS := -fno-PIE + ASFLAGS := + LDFLAGS := + MAKEDEPS := Makefile +-- +2.7.4 + diff --git a/boot/syslinux/0003-memdisk-Force-ld-output-format-to-32-bits.patch b/boot/syslinux/0003-memdisk-Force-ld-output-format-to-32-bits.patch new file mode 100644 index 00000000..4eedf497 --- /dev/null +++ b/boot/syslinux/0003-memdisk-Force-ld-output-format-to-32-bits.patch @@ -0,0 +1,32 @@ +From c0287594239d5af2082cac20817f8e8b11a4b1b2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Beno=C3=AEt=20Allard?= +Date: Wed, 5 Apr 2017 14:18:09 +0200 +Subject: [PATCH] memdisk: Force ld output format to 32-bits +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +On toolchains where the default output is x86_64, we need to be +consistent with the other .o files + +Signed-off-by: Benoît Allard +--- + memdisk/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/memdisk/Makefile b/memdisk/Makefile +index e6557d8..06613ff 100644 +--- a/memdisk/Makefile ++++ b/memdisk/Makefile +@@ -78,7 +78,7 @@ memdisk16.o: memdisk16.asm + $(NASM) -f bin $(NASMOPT) $(NFLAGS) $(NINCLUDE) -o $@ -l $*.lst $< + + memdisk_%.o: memdisk_%.bin +- $(LD) -r -b binary -o $@ $< ++ $(LD) --oformat elf32-i386 -r -b binary -o $@ $< + + memdisk16.elf: $(OBJS16) + $(LD) -Ttext 0 -o $@ $^ +-- +2.7.4 + diff --git a/boot/syslinux/0004-utils-Use-the-host-toolchain-to-build.patch b/boot/syslinux/0004-utils-Use-the-host-toolchain-to-build.patch new file mode 100644 index 00000000..e091a3a8 --- /dev/null +++ b/boot/syslinux/0004-utils-Use-the-host-toolchain-to-build.patch @@ -0,0 +1,60 @@ +From e000251144056c99e390a2a4449d06cbd2a19c0a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Beno=C3=AEt=20Allard?= +Date: Wed, 5 Apr 2017 14:25:02 +0200 +Subject: [PATCH] utils: Use the host toolchain to build. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The utilities are meant to run on the host machine, hence must be built using +the host toolchain. + +Signed-off-by: Benoît Allard +--- + utils/Makefile | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/utils/Makefile b/utils/Makefile +index dfe6259..ac91aaa 100644 +--- a/utils/Makefile ++++ b/utils/Makefile +@@ -17,8 +17,8 @@ + VPATH = $(SRC) + include $(MAKEDIR)/syslinux.mk + +-CFLAGS = $(GCCWARN) -Os -fomit-frame-pointer -D_FILE_OFFSET_BITS=64 -I$(SRC) +-LDFLAGS = -O2 ++CFLAGS = $(CFLAGS_FOR_BUILD) $(GCCWARN) -Os -fomit-frame-pointer -D_FILE_OFFSET_BITS=64 -I$(SRC) ++LDFLAGS = $(LDFLAGS_FOR_BUILD) -O2 + + C_TARGETS = isohybrid gethostip memdiskfind + SCRIPT_TARGETS = mkdiskimage +@@ -35,7 +35,7 @@ ISOHDPFX = $(addprefix $(OBJ)/,../mbr/isohdpfx.bin ../mbr/isohdpfx_f.bin \ + all: $(TARGETS) + + %.o: %.c +- $(CC) $(UMAKEDEPS) $(CFLAGS) -c -o $@ $< ++ $(CC_FOR_BUILD) $(UMAKEDEPS) $(CFLAGS) -c -o $@ $< + + mkdiskimage: mkdiskimage.in ../mbr/mbr.bin bin2hex.pl + $(PERL) $(SRC)/bin2hex.pl < $(OBJ)/../mbr/mbr.bin | cat $(SRC)/mkdiskimage.in - > $@ +@@ -51,13 +51,13 @@ isohdpfx.c: $(ISOHDPFX) isohdpfxarray.pl + $(PERL) $(SRC)/isohdpfxarray.pl $(ISOHDPFX) > $@ + + isohybrid: isohybrid.o isohdpfx.o +- $(CC) $(LDFLAGS) -o $@ $^ -luuid ++ $(CC_FOR_BUILD) $(LDFLAGS) -o $@ $^ -luuid + + gethostip: gethostip.o +- $(CC) $(LDFLAGS) -o $@ $^ ++ $(CC_FOR_BUILD) $(LDFLAGS) -o $@ $^ + + memdiskfind: memdiskfind.o +- $(CC) $(LDFLAGS) -o $@ $^ ++ $(CC_FOR_BUILD) $(LDFLAGS) -o $@ $^ + + tidy dist: + rm -f *.o .*.d isohdpfx.c +-- +2.1.4 + diff --git a/boot/syslinux/0005-lzo-Use-the-host-toolchain-for-prepcore.patch b/boot/syslinux/0005-lzo-Use-the-host-toolchain-for-prepcore.patch new file mode 100644 index 00000000..c6fa7feb --- /dev/null +++ b/boot/syslinux/0005-lzo-Use-the-host-toolchain-for-prepcore.patch @@ -0,0 +1,44 @@ +From 83e1f00990c25554723609bb549e18b987034317 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Beno=C3=AEt=20Allard?= +Date: Thu, 6 Apr 2017 09:43:46 +0200 +Subject: [PATCH] lzo: Use the host toolchain for prepcore +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Benoît Allard +--- + lzo/Makefile | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/lzo/Makefile b/lzo/Makefile +index 29f1fa6..c016e5a 100644 +--- a/lzo/Makefile ++++ b/lzo/Makefile +@@ -11,10 +11,13 @@ + ## ----------------------------------------------------------------------- + + VPATH = $(SRC) +-include $(MAKEDIR)/build.mk ++include $(MAKEDIR)/syslinux.mk + + INCLUDES += -I$(SRC)/include + ++%.o: %.c ++ $(CC_FOR_BUILD) $(UMAKEDEPS) $(CFLAGS_FOR_BUILD) $(INCLUDES) -c -o $@ $< ++ + LIBOBJS = $(patsubst %.c,%.o,$(subst $(SRC)/,,$(wildcard $(SRC)/src/*.c))) + LIB = lzo.a + BINS = prepcore +@@ -30,7 +33,7 @@ $(LIB) : $(LIBOBJS) + $(RANLIB) $@ + + prepcore : prepcore.o $(LIB) +- $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) ++ $(CC_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o $@ $^ $(LIBS) + + tidy dist clean spotless: + rm -f $(BINS) +-- +2.1.4 + diff --git a/boot/syslinux/0006-The-VPrint-definition-is-now-part-of-the-exports-of-.patch b/boot/syslinux/0006-The-VPrint-definition-is-now-part-of-the-exports-of-.patch new file mode 100644 index 00000000..c3760102 --- /dev/null +++ b/boot/syslinux/0006-The-VPrint-definition-is-now-part-of-the-exports-of-.patch @@ -0,0 +1,37 @@ +From 39274503292a6003b1b0c93f694e34f11e85ea44 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Beno=C3=AEt=20Allard?= +Date: Fri, 9 Jun 2017 11:55:14 +0200 +Subject: [PATCH] The VPrint definition is now part of the exports of + gnu-efi +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Benoît Allard +--- + efi/fio.h | 9 --------- + 1 file changed, 9 deletions(-) + +diff --git a/efi/fio.h b/efi/fio.h +index 65fff8d..a1bfe68 100644 +--- a/efi/fio.h ++++ b/efi/fio.h +@@ -11,15 +11,6 @@ + #define MAX_EFI_ARGS 64 + #define WS(c16) (c16 == L' ' || c16 == CHAR_TAB) + +-/* VPrint is not in export declarations in gnu-efi lib yet +- * although it is a global function; declare it here +- */ +-extern UINTN +-VPrint ( +- IN CHAR16 *fmt, +- va_list args +- ); +- + extern EFI_STATUS efi_errno; + + void efi_memcpy(unsigned char *dst, unsigned char *src, size_t len); +-- +2.1.4 + diff --git a/boot/syslinux/0007-Update-the-longjump-calls-to-fit-the-new-declaration.patch b/boot/syslinux/0007-Update-the-longjump-calls-to-fit-the-new-declaration.patch new file mode 100644 index 00000000..90d0b81f --- /dev/null +++ b/boot/syslinux/0007-Update-the-longjump-calls-to-fit-the-new-declaration.patch @@ -0,0 +1,37 @@ +From 3bd5c2d951421a89f76b2423e5810862f53486c1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Beno=C3=AEt=20Allard?= +Date: Fri, 9 Jun 2017 11:59:43 +0200 +Subject: [PATCH] Update the longjump calls to fit the new declaration +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Benoît Allard +--- + efi/main.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/efi/main.c b/efi/main.c +index 208fee4f..71d31a5c 100644 +--- a/efi/main.c ++++ b/efi/main.c +@@ -10,7 +10,6 @@ + #include + #include + #include +-#include + + #include "efi.h" + #include "fio.h" +@@ -30,7 +29,7 @@ uint32_t timer_irq; + __export uint8_t KbdMap[256]; + char aux_seg[256]; + +-static jmp_buf load_error_buf; ++static jmp_buf *load_error_buf; + + static inline EFI_STATUS + efi_close_protocol(EFI_HANDLE handle, EFI_GUID *guid, EFI_HANDLE agent, +-- +2.13.3 + diff --git a/boot/syslinux/0008-efi-wrapper-build-it-with-the-host-toolchain.patch b/boot/syslinux/0008-efi-wrapper-build-it-with-the-host-toolchain.patch new file mode 100644 index 00000000..9ec12a17 --- /dev/null +++ b/boot/syslinux/0008-efi-wrapper-build-it-with-the-host-toolchain.patch @@ -0,0 +1,32 @@ +From ca8aaded0c7c3900397029bd9520132b62629308 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Beno=C3=AEt=20Allard?= +Date: Mon, 12 Jun 2017 14:59:16 +0200 +Subject: [PATCH] efi/wrapper: build it with the host toolchain. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The wrapper program is executed on the build machine, so it should be +built with CC_FOR_BUILD. + +Signed-off-by: Benoît Allard +--- + efi/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/efi/Makefile b/efi/Makefile +index d5443bd5..d24d16db 100644 +--- a/efi/Makefile ++++ b/efi/Makefile +@@ -79,7 +79,7 @@ syslinux.so: $(OBJS) $(CORE_OBJS) $(LIB_OBJS) + # cp $^ $@ + + wrapper: wrapper.c +- $(CC) $^ -o $@ ++ $(CC_FOR_BUILD) $^ -o $@ + + # + # Build the wrapper app and wrap our .so to produce a .efi +-- +2.13.3 + diff --git a/boot/syslinux/0009-bios-Don-t-try-to-guess-the-sections-alignment.patch b/boot/syslinux/0009-bios-Don-t-try-to-guess-the-sections-alignment.patch new file mode 100644 index 00000000..916012f6 --- /dev/null +++ b/boot/syslinux/0009-bios-Don-t-try-to-guess-the-sections-alignment.patch @@ -0,0 +1,295 @@ +From 76946dd67bc856eaf4fe69d0826547a794176f78 Mon Sep 17 00:00:00 2001 +From: Sylvain Gault +Date: Tue, 29 Sep 2015 04:45:09 +0200 +Subject: [PATCH] bios: Don't try to guess the sections alignment + +For the compression / decompression to succeed, the sections layout must +be the same between the virtual memory and load memory. The section +alignment was kept in sync by introducing aligment that should be +greater or equal to the actual section alignment. + +This patch compute the load memory addresses of the sections so that +the layout is the same as the virtual memory addresses. + +Signed-off-by: Sylvain Gault +Tested-by: poma +Signed-off-by: Paulo Alcantara + +Upstream: 0cc9a99e560a2f52bcf052fd85b1efae35ee812f +Signed-off-by: Arnout Vandecappelle (Essensium/Mind) +--- + core/i386/syslinux.ld | 63 ++++++++++--------------------------------------- + core/x86_64/syslinux.ld | 63 ++++++++++--------------------------------------- + 2 files changed, 24 insertions(+), 102 deletions(-) + +diff --git a/core/i386/syslinux.ld b/core/i386/syslinux.ld +index 73904510..92b75b11 100644 +--- a/core/i386/syslinux.ld ++++ b/core/i386/syslinux.ld +@@ -255,10 +255,9 @@ SECTIONS + . = 0x100000; + + __pm_code_start = .; ++ __vma_to_lma = __pm_code_lma - __pm_code_start; + +- __text_vma = .; +- __text_lma = __pm_code_lma; +- .text : AT(__text_lma) { ++ .text : AT(ADDR(.text) + __vma_to_lma) { + FILL(0x90909090) + __text_start = .; + *(.text) +@@ -266,106 +265,68 @@ SECTIONS + __text_end = .; + } + +- . = ALIGN(32); +- +- __rodata_vma = .; +- __rodata_lma = __rodata_vma + __text_lma - __text_vma; +- .rodata : AT(__rodata_lma) { ++ .rodata : AT(ADDR(.rodata) + __vma_to_lma) { + __rodata_start = .; + *(.rodata) + *(.rodata.*) + __rodata_end = .; + } + +- . = ALIGN(4); +- +- __ctors_vma = .; +- __ctors_lma = __ctors_vma + __text_lma - __text_vma; +- .ctors : AT(__ctors_lma) { ++ .ctors : AT(ADDR(.ctors) + __vma_to_lma) { + __ctors_start = .; + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + __ctors_end = .; + } + +- __dtors_vma = .; +- __dtors_lma = __dtors_vma + __text_lma - __text_vma; +- .dtors : AT(__dtors_lma) { ++ .dtors : AT(ADDR(.dtors) + __vma_to_lma) { + __dtors_start = .; + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + __dtors_end = .; + } + +- . = ALIGN(4); +- +- __dynsym_vma = .; +- __dynsym_lma = __dynsym_vma + __text_lma - __text_vma; +- .dynsym : AT(__dynsym_lma) { ++ .dynsym : AT(ADDR(.dynsym) + __vma_to_lma) { + __dynsym_start = .; + *(.dynsym) + __dynsym_end = .; + } + __dynsym_len = __dynsym_end - __dynsym_start; + +- . = ALIGN(4); +- +- __dynstr_vma = .; +- __dynstr_lma = __dynstr_vma + __text_lma - __text_vma; +- .dynstr : AT(__dynstr_lma) { ++ .dynstr : AT(ADDR(.dynstr) + __vma_to_lma) { + __dynstr_start = .; + *(.dynstr) + __dynstr_end = .; + } + __dynstr_len = __dynstr_end - __dynstr_start; + +- . = ALIGN(4); +- +- __gnu_hash_vma = .; +- __gnu_hash_lma = __gnu_hash_vma + __text_lma - __text_vma; +- .gnu.hash : AT(__gnu_hash_lma) { ++ .gnu.hash : AT(ADDR(.gnu.hash) + __vma_to_lma) { + __gnu_hash_start = .; + *(.gnu.hash) + __gnu_hash_end = .; + } + + +- . = ALIGN(4); +- +- __dynlink_vma = .; +- __dynlink_lma = __dynlink_vma + __text_lma - __text_vma; +- .dynlink : AT(__dynlink_lma) { ++ .dynlink : AT(ADDR(.dynlink) + __vma_to_lma) { + __dynlink_start = .; + *(.dynlink) + __dynlink_end = .; + } + +- . = ALIGN(4); +- +- __got_vma = .; +- __got_lma = __got_vma + __text_lma - __text_vma; +- .got : AT(__got_lma) { ++ .got : AT(ADDR(.got) + __vma_to_lma) { + __got_start = .; + KEEP (*(.got.plt)) + KEEP (*(.got)) + __got_end = .; + } + +- . = ALIGN(4); +- +- __dynamic_vma = .; +- __dynamic_lma = __dynamic_vma + __text_lma - __text_vma; +- .dynamic : AT(__dynamic_lma) { ++ .dynamic : AT(ADDR(.dynamic) + __vma_to_lma) { + __dynamic_start = .; + *(.dynamic) + __dynamic_end = .; + } + +- . = ALIGN(32); +- +- __data_vma = .; +- __data_lma = __data_vma + __text_lma - __text_vma; +- .data : AT(__data_lma) { ++ .data : AT(ADDR(.data) + __vma_to_lma) { + __data_start = .; + *(.data) + *(.data.*) +diff --git a/core/x86_64/syslinux.ld b/core/x86_64/syslinux.ld +index bf815c46..70c6e00a 100644 +--- a/core/x86_64/syslinux.ld ++++ b/core/x86_64/syslinux.ld +@@ -255,10 +255,9 @@ SECTIONS + . = 0x100000; + + __pm_code_start = .; ++ __vma_to_lma = __pm_code_lma - __pm_code_start; + +- __text_vma = .; +- __text_lma = __pm_code_lma; +- .text : AT(__text_lma) { ++ .text : AT(ADDR(.text) + __vma_to_lma) { + FILL(0x90909090) + __text_start = .; + *(.text) +@@ -266,106 +265,68 @@ SECTIONS + __text_end = .; + } + +- . = ALIGN(32); +- +- __rodata_vma = .; +- __rodata_lma = __rodata_vma + __text_lma - __text_vma; +- .rodata : AT(__rodata_lma) { ++ .rodata : AT(ADDR(.rodata) + __vma_to_lma) { + __rodata_start = .; + *(.rodata) + *(.rodata.*) + __rodata_end = .; + } + +- . = ALIGN(4); +- +- __ctors_vma = .; +- __ctors_lma = __ctors_vma + __text_lma - __text_vma; +- .ctors : AT(__ctors_lma) { ++ .ctors : AT(ADDR(.ctors) + __vma_to_lma) { + __ctors_start = .; + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + __ctors_end = .; + } + +- __dtors_vma = .; +- __dtors_lma = __dtors_vma + __text_lma - __text_vma; +- .dtors : AT(__dtors_lma) { ++ .dtors : AT(ADDR(.dtors) + __vma_to_lma) { + __dtors_start = .; + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + __dtors_end = .; + } + +- . = ALIGN(4); +- +- __dynsym_vma = .; +- __dynsym_lma = __dynsym_vma + __text_lma - __text_vma; +- .dynsym : AT(__dynsym_lma) { ++ .dynsym : AT(ADDR(.dynsym) + __vma_to_lma) { + __dynsym_start = .; + *(.dynsym) + __dynsym_end = .; + } + __dynsym_len = __dynsym_end - __dynsym_start; + +- . = ALIGN(4); +- +- __dynstr_vma = .; +- __dynstr_lma = __dynstr_vma + __text_lma - __text_vma; +- .dynstr : AT(__dynstr_lma) { ++ .dynstr : AT(ADDR(.dynstr) + __vma_to_lma) { + __dynstr_start = .; + *(.dynstr) + __dynstr_end = .; + } + __dynstr_len = __dynstr_end - __dynstr_start; + +- . = ALIGN(4); +- +- __gnu_hash_vma = .; +- __gnu_hash_lma = __gnu_hash_vma + __text_lma - __text_vma; +- .gnu.hash : AT(__gnu_hash_lma) { ++ .gnu.hash : AT(ADDR(.gnu.hash) + __vma_to_lma) { + __gnu_hash_start = .; + *(.gnu.hash) + __gnu_hash_end = .; + } + + +- . = ALIGN(4); +- +- __dynlink_vma = .; +- __dynlink_lma = __dynlink_vma + __text_lma - __text_vma; +- .dynlink : AT(__dynlink_lma) { ++ .dynlink : AT(ADDR(.dynlink) + __vma_to_lma) { + __dynlink_start = .; + *(.dynlink) + __dynlink_end = .; + } + +- . = ALIGN(4); +- +- __got_vma = .; +- __got_lma = __got_vma + __text_lma - __text_vma; +- .got : AT(__got_lma) { ++ .got : AT(ADDR(.got) + __vma_to_lma) { + __got_start = .; + KEEP (*(.got.plt)) + KEEP (*(.got)) + __got_end = .; + } + +- . = ALIGN(4); +- +- __dynamic_vma = .; +- __dynamic_lma = __dynamic_vma + __text_lma - __text_vma; +- .dynamic : AT(__dynamic_lma) { ++ .dynamic : AT(ADDR(.dynamic) + __vma_to_lma) { + __dynamic_start = .; + *(.dynamic) + __dynamic_end = .; + } + +- . = ALIGN(32); +- +- __data_vma = .; +- __data_lma = __data_vma + __text_lma - __text_vma; +- .data : AT(__data_lma) { ++ .data : AT(ADDR(.data) + __vma_to_lma) { + __data_start = .; + *(.data) + *(.data.*) +-- +2.13.3 + diff --git a/boot/syslinux/0010-core-Clean-up-the-i386-bios-build.patch b/boot/syslinux/0010-core-Clean-up-the-i386-bios-build.patch new file mode 100644 index 00000000..8b6d5254 --- /dev/null +++ b/boot/syslinux/0010-core-Clean-up-the-i386-bios-build.patch @@ -0,0 +1,622 @@ +From a14b1b3d3e375d2e8af8804171ef5e52574dbb2a Mon Sep 17 00:00:00 2001 +From: "H. Peter Anvin" +Date: Tue, 9 Feb 2016 18:15:50 -0800 +Subject: [PATCH] core: Clean up the i386-bios build + +Remove symbols and data structures not used in the i386-bios build, +and clean up the linker script so that most internal symbols are +HIDDEN. + +Signed-off-by: H. Peter Anvin + +Upstream: ff859050fa4e6535cae098dc35d88a265466448d + +This patch fixes the following build failure with i386 binutils 2.28.1: + +/builds/arnout/buildroot/output/host/bin/i586-buildroot-linux-uclibc-ld -Bsymbolic -pie -E --hash-style=gnu -T +/builds/arnout/buildroot/output/build/syslinux-6.03/core/i386/syslinux.ld -M -o ldlinux.elf ldlinux.o \ + --start-group libcom32.a --whole-archive /builds/arnout/buildroot/output/build/syslinux-6.03/bios/com32/lib/libcom32core.a libldlinux.a --end-group -N +--no-omagic \ + > ldlinux.map +/builds/arnout/buildroot/output/host/bin/i586-buildroot-linux-uclibc-ld: ldlinux.elf: Not enough room for program headers, try linking with -N +/builds/arnout/buildroot/output/host/bin/i586-buildroot-linux-uclibc-ld: final link failed: Bad value +/builds/arnout/buildroot/output/build/syslinux-6.03/core/Makefile:167: recipe for target 'ldlinux.elf' failed + +Signed-off-by: Arnout Vandecappelle (Essensium/Mind) +--- + core/extern.inc | 17 +-- + core/i386/syslinux.ld | 287 +++++++++++++++++++++++++------------------------- + core/layout.inc | 11 -- + 3 files changed, 143 insertions(+), 172 deletions(-) + +diff --git a/core/extern.inc b/core/extern.inc +index af8eb04c..ce4abfab 100644 +--- a/core/extern.inc ++++ b/core/extern.inc +@@ -12,27 +12,17 @@ + ; hello.c + extern hello + +- ;abort.c +- extern abort_load_new +- + ; elflink/load_env32.c + extern load_env32, pm_env32_run + +- ; memscan.c +- extern highmem_init +- +- extern linux_kernel +- + extern mp1, mp2, mp3, mp4, mp5 + +- extern hexdump, mydump ++ extern hexdump + + extern mem_init + + ; fs.c +- extern pm_fs_init, pm_searchdir, getfssec, getfsbytes +- extern pm_mangle_name, pm_load_config +- extern pm_open_file, pm_close_file ++ extern pm_fs_init + extern SectorSize, SectorShift + + ; chdir.c +@@ -41,9 +31,6 @@ + ; readdir.c + extern opendir, readdir, closedir + +- ; newconfig.c +- extern pm_is_config_file +- + ; idle.c + extern __idle + +diff --git a/core/i386/syslinux.ld b/core/i386/syslinux.ld +index 92b75b11..39198d75 100644 +--- a/core/i386/syslinux.ld ++++ b/core/i386/syslinux.ld +@@ -1,7 +1,7 @@ + /* ----------------------------------------------------------------------- + * + * Copyright 2008-2009 H. Peter Anvin - All Rights Reserved +- * Copyright 2009 Intel Corporation; author: H. Peter Anvin ++ * Copyright 2009-2016 Intel Corporation; author: H. Peter Anvin + * + * 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 +@@ -12,7 +12,7 @@ + * ----------------------------------------------------------------------- */ + + /* +- * Linker script for the SYSLINUX core ++ * Linker script for the SYSLINUX core when built for i386-bios + */ + + OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") +@@ -26,7 +26,7 @@ SECTIONS + { + /* Prefix structure for the compression program */ + . = 0; +- __module_start = .; ++ HIDDEN(__module_start = ABSOLUTE(.)); + .prefix : { + *(.prefix) + } +@@ -35,81 +35,82 @@ SECTIONS + . = 0x1000; + + .earlybss (NOLOAD) : { +- __earlybss_start = .; ++ HIDDEN(__earlybss_start = .); + *(.earlybss) +- __earlybss_end = .; ++ HIDDEN(__earlybss_end = .); + } +- __earlybss_len = ABSOLUTE(__earlybss_end) - ABSOLUTE(__earlybss_start); +- __earlybss_dwords = (__earlybss_len + 3) >> 2; ++ HIDDEN(__earlybss_len = ABSOLUTE(__earlybss_end) - ABSOLUTE(__earlybss_start)); ++ HIDDEN(__earlybss_dwords = (__earlybss_len + 3) >> 2); + + . = ALIGN(4); + .bss16 (NOLOAD) : { +- __bss16_start = .; ++ HIDDEN(__bss16_start = .); + *(.bss16) +- __bss16_end = .; ++ HIDDEN(__bss16_end = .); + } +- __bss16_len = ABSOLUTE(__bss16_end) - ABSOLUTE(__bss16_start); +- __bss16_dwords = (__bss16_len + 3) >> 2; ++ HIDDEN(__bss16_len = ABSOLUTE(__bss16_end) - ABSOLUTE(__bss16_start)); ++ HIDDEN(__bss16_dwords = (__bss16_len + 3) >> 2); + + . = ALIGN(4); + .config : AT (__config_lma) { +- __config_start = .; ++ HIDDEN(__config_start = .); + *(.config) +- __config_end = .; ++ HIDDEN(__config_end = .); + } +- __config_len = ABSOLUTE(__config_end) - ABSOLUTE(__config_start); +- __config_dwords = (__config_len + 3) >> 2; ++ HIDDEN(__config_len = ABSOLUTE(__config_end) - ABSOLUTE(__config_start)); ++ HIDDEN(__config_dwords = (__config_len + 3) >> 2); + + /* Generated and/or copied code */ + + . = ALIGN(128); /* Minimum separation from mutable data */ + .replacestub : AT (__replacestub_lma) { +- __replacestub_start = .; ++ HIDDEN(__replacestub_start = .); + *(.replacestub) +- __replacestub_end = .; ++ HIDDEN(__replacestub_end = .); + } +- __replacestub_len = ABSOLUTE(__replacestub_end) - ABSOLUTE(__replacestub_start); +- __replacestub_dwords = (__replacestub_len + 3) >> 2; ++ HIDDEN(__replacestub_len = ABSOLUTE(__replacestub_end) - ABSOLUTE(__replacestub_start)); ++ HIDDEN(__replacestub_dwords = (__replacestub_len + 3) >> 2); + + . = ALIGN(16); +- __gentextnr_lma = .; ++ HIDDEN(__gentextnr_lma = .); + .gentextnr : AT(__gentextnr_lma) { +- __gentextnr_start = .; ++ HIDDEN(__gentextnr_start = .); + *(.gentextnr) +- __gentextnr_end = .; ++ HIDDEN(__gentextnr_end = .); + } +- __gentextnr_len = ABSOLUTE(__gentextnr_end) - ABSOLUTE(__gentextnr_start); +- __gentextnr_dwords = (__gentextnr_len + 3) >> 2; ++ HIDDEN(__gentextnr_len = ABSOLUTE(__gentextnr_end) - ABSOLUTE(__gentextnr_start)); ++ HIDDEN(__gentextnr_dwords = (__gentextnr_len + 3) >> 2); + + . = STACK_BASE; + .stack16 : AT(STACK_BASE) { +- __stack16_start = .; ++ HIDDEN(__stack16_start = .); + . += STACK_LEN; +- __stack16_end = .; ++ HIDDEN(__stack16_end = .); + } +- __stack16_len = ABSOLUTE(__stack16_end) - ABSOLUTE(__stack16_start); +- __stack16_dwords = (__stack16_len + 3) >> 2; ++ HIDDEN(__stack16_len = ABSOLUTE(__stack16_end) - ABSOLUTE(__stack16_start)); ++ HIDDEN(__stack16_dwords = (__stack16_len + 3) >> 2); + + /* Initialized sections */ + + . = 0x7c00; + .init : { + FILL(0x90909090) +- __init_start = .; ++ HIDDEN(__init_start = .); + *(.init) +- __init_end = .; ++ HIDDEN(__init_end = .); + } +- __init_len = ABSOLUTE(__init_end) - ABSOLUTE(__init_start); +- __init_dwords = (__init_len + 3) >> 2; ++ HIDDEN(__init_len = ABSOLUTE(__init_end) - ABSOLUTE(__init_start)); ++ HIDDEN(__init_dwords = (__init_len + 3) >> 2); + ++ . = ALIGN(4); + .text16 : { + FILL(0x90909090) +- __text16_start = .; ++ HIDDEN(__text16_start = .); + *(.text16) +- __text16_end = .; ++ HIDDEN(__text16_end = .); + } +- __text16_len = ABSOLUTE(__text16_end) - ABSOLUTE(__text16_start); +- __text16_dwords = (__text16_len + 3) >> 2; ++ HIDDEN(__text16_len = ABSOLUTE(__text16_end) - ABSOLUTE(__text16_start)); ++ HIDDEN(__text16_dwords = (__text16_len + 3) >> 2); + + /* + * .textnr is used for 32-bit code that is used on the code +@@ -118,99 +119,92 @@ SECTIONS + . = ALIGN(16); + .textnr : { + FILL(0x90909090) +- __textnr_start = .; ++ HIDDEN(__textnr_start = .); + *(.textnr) +- __textnr_end = .; ++ HIDDEN(__textnr_end = .); + } +- __textnr_len = ABSOLUTE(__textnr_end) - ABSOLUTE(__textnr_start); +- __textnr_dwords = (__textnr_len + 3) >> 2; ++ HIDDEN(__textnr_len = ABSOLUTE(__textnr_end) - ABSOLUTE(__textnr_start)); ++ HIDDEN(__textnr_dwords = (__textnr_len + 3) >> 2); + + . = ALIGN(16); +- __bcopyxx_start = .; ++ HIDDEN(__bcopyxx_start = .); + + .bcopyxx.text : { + FILL(0x90909090) +- __bcopyxx_text_start = .; ++ HIDDEN(__bcopyxx_text_start = .); + *(.bcopyxx.text) +- __bcopyxx_text_end = .; ++ HIDDEN(__bcopyxx_text_end = .); + } +- __bcopyxx_text_len = ABSOLUTE(__bcopyxx_text_end) - ABSOLUTE(__bcopyxx_text_start); +- __bcopyxx_text_dwords = (__bcopyxx_text_len + 3) >> 2; ++ HIDDEN(__bcopyxx_text_len = ABSOLUTE(__bcopyxx_text_end) - ABSOLUTE(__bcopyxx_text_start)); ++ HIDDEN(__bcopyxx_text_dwords = (__bcopyxx_text_len + 3) >> 2); + + .bcopyxx.data : { +- __bcopyxx_data_start = .; ++ HIDDEN(__bcopyxx_data_start = .); + *(.bcopyxx.text) +- __bcopyxx_data_end = .; ++ HIDDEN(__bcopyxx_data_end = .); + } +- __bcopyxx_data_len = ABSOLUTE(__bcopyxx_data_end) - ABSOLUTE(__bcopyxx_data_start); +- __bcopyxx_data_dwords = (__bcopyxx_data_len + 3) >> 2; ++ HIDDEN(__bcopyxx_data_len = ABSOLUTE(__bcopyxx_data_end) - ABSOLUTE(__bcopyxx_data_start)); ++ HIDDEN(__bcopyxx_data_dwords = (__bcopyxx_data_len + 3) >> 2); + +- __bcopyxx_end = .; +- __bcopyxx_len = ABSOLUTE(__bcopyxx_end) - ABSOLUTE(__bcopyxx_start); +- __bcopyxx_dwords = (__bcopyxx_len + 3) >> 2; ++ HIDDEN(__bcopyxx_end = .); ++ HIDDEN(__bcopyxx_len = ABSOLUTE(__bcopyxx_end) - ABSOLUTE(__bcopyxx_start)); ++ HIDDEN(__bcopyxx_dwords = (__bcopyxx_len + 3) >> 2); + + . = ALIGN(4); + .data16 : { +- __data16_start = .; ++ HIDDEN(__data16_start = .); + *(.data16) +- __data16_end = .; ++ HIDDEN(__data16_end = .); + } +- __data16_len = ABSOLUTE(__data16_end) - ABSOLUTE(__data16_start); +- __data16_dwords = (__data16_len + 3) >> 2; ++ HIDDEN(__data16_len = ABSOLUTE(__data16_end) - ABSOLUTE(__data16_start)); ++ HIDDEN(__data16_dwords = (__data16_len + 3) >> 2); + + . = ALIGN(4); +- __config_lma = .; ++ HIDDEN(__config_lma = ABSOLUTE(.)); + . += SIZEOF(.config); + + . = ALIGN(4); +- __replacestub_lma = .; ++ HIDDEN(__replacestub_lma = ABSOLUTE(.)); + . += SIZEOF(.replacestub); + + /* The 32-bit code loads above the non-progbits sections */ + + . = ALIGN(16); +- __pm_code_lma = .; ++ HIDDEN(__pm_code_lma = ABSOLUTE(.)); + +- __high_clear_start = .; ++ HIDDEN(__high_clear_start = .); + + . = ALIGN(512); + .adv (NOLOAD) : { +- __adv_start = .; ++ HIDDEN(__adv_start = .); + *(.adv) +- __adv_end = .; ++ HIDDEN(__adv_end = .); + } +- __adv_len = ABSOLUTE(__adv_end) - ABSOLUTE(__adv_start); +- __adv_dwords = (__adv_len + 3) >> 2; ++ HIDDEN(__adv_len = ABSOLUTE(__adv_end) - ABSOLUTE(__adv_start)); ++ HIDDEN(__adv_dwords = (__adv_len + 3) >> 2); + + /* Late uninitialized sections */ + + . = ALIGN(4); + .uibss (NOLOAD) : { +- __uibss_start = .; ++ HIDDEN(__uibss_start = .); + *(.uibss) +- __uibss_end = .; ++ HIDDEN(__uibss_end = .); + } +- __uibss_len = ABSOLUTE(__uibss_end) - ABSOLUTE(__uibss_start); +- __uibss_dwords = (__uibss_len + 3) >> 2; ++ HIDDEN(__uibss_len = ABSOLUTE(__uibss_end) - ABSOLUTE(__uibss_start)); ++ HIDDEN(__uibss_dwords = (__uibss_len + 3) >> 2); + +- _end16 = .; +- __assert_end16 = ASSERT(_end16 <= 0x10000, "64K overflow"); ++ HIDDEN(_end16 = .); ++ HIDDEN(__assert_end16 = ASSERT(_end16 <= 0x10000, "64K overflow")); + + /* + * Special 16-bit segments + */ +- +- . = ALIGN(65536); +- .real_mode (NOLOAD) : { +- *(.real_mode) +- } +- real_mode_seg = core_real_mode >> 4; +- + . = ALIGN(65536); + .xfer_buf (NOLOAD) : { + *(.xfer_buf) + } +- xfer_buf_seg = core_xfer_buf >> 4; ++ HIDDEN(xfer_buf_seg = core_xfer_buf >> 4); + + /* + * The auxilliary data segment is used by the 16-bit code +@@ -219,33 +213,33 @@ SECTIONS + + . = ALIGN(16); + .auxseg (NOLOAD) : { +- __auxseg_start = .; ++ HIDDEN(__auxseg_start = .); + *(.auxseg) +- __auxseg_end = .; ++ HIDDEN(__auxseg_end = .); + } +- __auxseg_len = ABSOLUTE(__auxseg_end) - ABSOLUTE(__auxseg_start); +- __auxseg_dwords = (__auxseg_len + 3) >> 2; +- aux_seg = __auxseg_start >> 4; ++ HIDDEN(__auxseg_len = ABSOLUTE(__auxseg_end) - ABSOLUTE(__auxseg_start)); ++ HIDDEN(__auxseg_dwords = (__auxseg_len + 3) >> 2); ++ HIDDEN(aux_seg = __auxseg_start >> 4); + + /* + * Used to allocate lowmem buffers from 32-bit code + */ + .lowmem (NOLOAD) : { +- __lowmem_start = .; ++ HIDDEN(__lowmem_start = .); + *(.lowmem) +- __lowmem_end = .; ++ HIDDEN(__lowmem_end = .); + } +- __lowmem_len = ABSOLUTE(__lowmem_end) - ABSOLUTE(__lowmem_start); +- __lowmem_dwords = (__lowmem_len + 3) >> 2; ++ HIDDEN(__lowmem_len = ABSOLUTE(__lowmem_end) - ABSOLUTE(__lowmem_start)); ++ HIDDEN(__lowmem_dwords = (__lowmem_len + 3) >> 2); + +- __high_clear_end = .; ++ HIDDEN(__high_clear_end = .); + +- __high_clear_len = ABSOLUTE(__high_clear_end) - ABSOLUTE(__high_clear_start); +- __high_clear_dwords = (__high_clear_len + 3) >> 2; ++ HIDDEN(__high_clear_len = ABSOLUTE(__high_clear_end) - ABSOLUTE(__high_clear_start)); ++ HIDDEN(__high_clear_dwords = (__high_clear_len + 3) >> 2); + + /* Start of the lowmem heap */ + . = ALIGN(16); +- __lowmem_heap = .; ++ HIDDEN(__lowmem_heap = .); + + /* + * 32-bit code. This is a hack for the moment due to the +@@ -254,136 +248,137 @@ SECTIONS + + . = 0x100000; + +- __pm_code_start = .; +- __vma_to_lma = __pm_code_lma - __pm_code_start; ++ HIDDEN(__pm_code_start = .); ++ HIDDEN(__vma_to_lma = ABSOLUTE(__pm_code_lma - __pm_code_start)); + + .text : AT(ADDR(.text) + __vma_to_lma) { + FILL(0x90909090) +- __text_start = .; ++ HIDDEN(__text_start = .); + *(.text) + *(.text.*) +- __text_end = .; ++ HIDDEN(__text_end = .); + } + + .rodata : AT(ADDR(.rodata) + __vma_to_lma) { +- __rodata_start = .; ++ HIDDEN(__rodata_start = .); + *(.rodata) + *(.rodata.*) +- __rodata_end = .; ++ HIDDEN(__rodata_end = .); + } + + .ctors : AT(ADDR(.ctors) + __vma_to_lma) { +- __ctors_start = .; ++ HIDDEN(__ctors_start = .); + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) +- __ctors_end = .; ++ HIDDEN(__ctors_end = .); + } + + .dtors : AT(ADDR(.dtors) + __vma_to_lma) { +- __dtors_start = .; ++ HIDDEN(__dtors_start = .); + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) +- __dtors_end = .; ++ HIDDEN(__dtors_end = .); + } + + .dynsym : AT(ADDR(.dynsym) + __vma_to_lma) { +- __dynsym_start = .; +- *(.dynsym) +- __dynsym_end = .; ++ HIDDEN(__dynsym_start = .); ++ KEEP (*(.dynsym)) ++ HIDDEN(__dynsym_end = .); + } +- __dynsym_len = __dynsym_end - __dynsym_start; ++ HIDDEN(__dynsym_len = __dynsym_end - __dynsym_start); + + .dynstr : AT(ADDR(.dynstr) + __vma_to_lma) { +- __dynstr_start = .; +- *(.dynstr) +- __dynstr_end = .; ++ HIDDEN(__dynstr_start = .); ++ KEEP (*(.dynstr)) ++ HIDDEN(__dynstr_end = .); + } +- __dynstr_len = __dynstr_end - __dynstr_start; ++ HIDDEN(__dynstr_len = __dynstr_end - __dynstr_start); + + .gnu.hash : AT(ADDR(.gnu.hash) + __vma_to_lma) { +- __gnu_hash_start = .; +- *(.gnu.hash) +- __gnu_hash_end = .; ++ HIDDEN(__gnu_hash_start = .); ++ KEEP (*(.gnu.hash)) ++ HIDDEN(__gnu_hash_end = .); + } + + + .dynlink : AT(ADDR(.dynlink) + __vma_to_lma) { +- __dynlink_start = .; +- *(.dynlink) +- __dynlink_end = .; ++ HIDDEN(__dynlink_start = .); ++ KEEP (*(.dynlink)) ++ HIDDEN(__dynlink_end = .); + } + + .got : AT(ADDR(.got) + __vma_to_lma) { +- __got_start = .; +- KEEP (*(.got.plt)) ++ HIDDEN(__got_start = .); + KEEP (*(.got)) +- __got_end = .; ++ KEEP (*(.got.plt)) ++ HIDDEN(__got_end = .); + } + + .dynamic : AT(ADDR(.dynamic) + __vma_to_lma) { +- __dynamic_start = .; +- *(.dynamic) +- __dynamic_end = .; ++ HIDDEN(__dynamic_start = .); ++ KEEP (*(.dynamic)) ++ HIDDEN(__dynamic_end = .); + } + + .data : AT(ADDR(.data) + __vma_to_lma) { +- __data_start = .; ++ HIDDEN(__data_start = .); + *(.data) + *(.data.*) +- __data_end = .; ++ HIDDEN(__data_end = .); + } + +- __pm_code_end = .; +- __pm_code_len = ABSOLUTE(__pm_code_end) - ABSOLUTE(__pm_code_start); +- __pm_code_dwords = (__pm_code_len + 3) >> 2; ++ HIDDEN(__pm_code_end = .); ++ HIDDEN(__pm_code_len = ABSOLUTE(__pm_code_end) - ABSOLUTE(__pm_code_start)); ++ HIDDEN(__pm_code_dwords = (__pm_code_len + 3) >> 2); + + . = ALIGN(128); + +- __bss_vma = .; +- __bss_lma = .; /* Dummy */ ++ HIDDEN(__bss_vma = .); ++ HIDDEN(__bss_lma = ABSOLUTE(.)); /* Dummy */ + .bss (NOLOAD) : AT (__bss_lma) { +- __bss_start = .; ++ HIDDEN(__bss_start = .); + *(.bss) + *(.bss.*) + *(COMMON) +- __bss_end = .; ++ HIDDEN(__bss_end = .); + } +- __bss_len = ABSOLUTE(__bss_end) - ABSOLUTE(__bss_start); +- __bss_dwords = (__bss_len + 3) >> 2; ++ HIDDEN(__bss_len = ABSOLUTE(__bss_end) - ABSOLUTE(__bss_start)); ++ HIDDEN(__bss_dwords = (__bss_len + 3) >> 2); + + /* Very large objects which don't need to be zeroed */ + +- __hugebss_vma = .; +- __hugebss_lma = .; /* Dummy */ ++ HIDDEN(__hugebss_vma = .); ++ HIDDEN(__hugebss_lma = ABSOLUTE(.)); /* Dummy */ + .hugebss (NOLOAD) : AT (__hugebss_lma) { +- __hugebss_start = .; ++ HIDDEN(__hugebss_start = .); + *(.hugebss) + *(.hugebss.*) +- __hugebss_end = .; ++ HIDDEN(__hugebss_end = .); + } +- __hugebss_len = ABSOLUTE(__hugebss_end) - ABSOLUTE(__hugebss_start); +- __hugebss_dwords = (__hugebss_len + 3) >> 2; ++ HIDDEN(__hugebss_len = ABSOLUTE(__hugebss_end) - ABSOLUTE(__hugebss_start)); ++ HIDDEN(__hugebss_dwords = (__hugebss_len + 3) >> 2); + + + /* XXX: This stack should be unified with the COM32 stack */ +- __stack_vma = .; +- __stack_lma = .; /* Dummy */ ++ HIDDEN(__stack_vma = .); ++ HIDDEN(__stack_lma = ABSOLUTE(.)); /* Dummy */ + .stack (NOLOAD) : AT(__stack_lma) { +- __stack_start = .; ++ HIDDEN(__stack_start = .); + *(.stack) +- __stack_end = .; ++ HIDDEN(__stack_end = .); + } +- __stack_len = ABSOLUTE(__stack_end) - ABSOLUTE(__stack_start); +- __stack_dwords = (__stack_len + 3) >> 2; ++ HIDDEN(__stack_len = ABSOLUTE(__stack_end) - ABSOLUTE(__stack_start)); ++ HIDDEN(__stack_dwords = (__stack_len + 3) >> 2); + +- _end = .; ++ HIDDEN(_end = .); + + /* COM32R and kernels are loaded after our own PM code */ + . = ALIGN(65536); +- free_high_memory = .; ++ HIDDEN(free_high_memory = .); + + /* Stuff we don't need... */ + /DISCARD/ : { + *(.eh_frame) ++ *(.interp) + } + } +diff --git a/core/layout.inc b/core/layout.inc +index 53ca783d..635df537 100644 +--- a/core/layout.inc ++++ b/core/layout.inc +@@ -139,17 +139,6 @@ serial_buf_size equ 4096 ; Should be a power of 2 + core_xfer_buf resb 65536 + + ; +-; Segment for the real mode code (needed as long as we have a in-kernel +-; loader and/or COM16 support. +-; One symbol for the segment number, one for the absolute address +-; +- extern real_mode_seg +- section .real_mode write nobits align=65536 +- global core_real_mode:data hidden +-core_real_mode resb 65536 +-comboot_seg equ real_mode_seg ; COMBOOT image loading zone +- +-; + ; At the very end, the lowmem heap + ; + extern __lowmem_heap +-- +2.13.3 + diff --git a/boot/syslinux/0011-extlinux-Use-the-host-toolchain-to-build.patch b/boot/syslinux/0011-extlinux-Use-the-host-toolchain-to-build.patch new file mode 100644 index 00000000..62675cf6 --- /dev/null +++ b/boot/syslinux/0011-extlinux-Use-the-host-toolchain-to-build.patch @@ -0,0 +1,53 @@ +From 4df2e7c0ae84bfbdba0ed285c0664aa089b38b7e Mon Sep 17 00:00:00 2001 +From: Carlos Santos +Date: Sat, 30 Sep 2017 19:49:55 -0300 +Subject: [PATCH] extlinux: Use the host toolchain to build. + +It is meant to run on the host machine, hence must be built using the +host toolchain. + +Signed-off-by: Carlos Santos +--- + extlinux/Makefile | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/extlinux/Makefile b/extlinux/Makefile +index 02d1db51..5c4baa5a 100644 +--- a/extlinux/Makefile ++++ b/extlinux/Makefile +@@ -18,9 +18,9 @@ include $(MAKEDIR)/syslinux.mk + + OPTFLAGS = -g -Os + INCLUDES = -I$(SRC) -I$(objdir) -I$(SRC)/../libinstaller +-CFLAGS = $(GCCWARN) -Wno-sign-compare -D_FILE_OFFSET_BITS=64 \ ++CFLAGS = $(CFLAGS_FOR_BUILD) $(GCCWARN) -Wno-sign-compare -D_FILE_OFFSET_BITS=64 \ + $(OPTFLAGS) $(INCLUDES) +-LDFLAGS = ++LDFLAGS = $(LDFLAGS_FOR_BUILD) + + SRCS = main.c \ + mountinfo.c \ +@@ -52,16 +52,16 @@ spotless: clean + installer: extlinux + + extlinux: $(OBJS) +- $(CC) $(LDFLAGS) -o $@ $^ ++ $(CC_FOR_BUILD) $(LDFLAGS) -o $@ $^ + + strip: + $(STRIP) extlinux + + %.o: %.c +- $(CC) $(UMAKEDEPS) $(CFLAGS) -c -o $@ $< ++ $(CC_FOR_BUILD) $(UMAKEDEPS) $(CFLAGS) -c -o $@ $< + %.i: %.c +- $(CC) $(UMAKEDEPS) $(CFLAGS) -E -o $@ $< ++ $(CC_FOR_BUILD) $(UMAKEDEPS) $(CFLAGS) -E -o $@ $< + %.s: %.c +- $(CC) $(UMAKEDEPS) $(CFLAGS) -S -o $@ $< ++ $(CC_FOR_BUILD) $(UMAKEDEPS) $(CFLAGS) -S -o $@ $< + + -include .*.d +-- +2.13.5 + diff --git a/boot/syslinux/0012-pull-in-sys-sysmacros-h-for-major-minor-makedev.patch b/boot/syslinux/0012-pull-in-sys-sysmacros-h-for-major-minor-makedev.patch new file mode 100644 index 00000000..beba5cc2 --- /dev/null +++ b/boot/syslinux/0012-pull-in-sys-sysmacros-h-for-major-minor-makedev.patch @@ -0,0 +1,34 @@ +From 1a74985b2a404639b08882c57f3147229605dfd5 Mon Sep 17 00:00:00 2001 +From: Mike Frysinger +Date: Tue, 19 Apr 2016 06:50:31 -0400 +Subject: [PATCH] extlinux: pull in sys/sysmacros.h for major/minor/makedev + +These functions are defined in sys/sysmacros.h, so add the include to +main.c. This is already handled correctly in mountinfo.c. Otherwise +we get build failures like: + +main.o: In function 'find_device_sysfs': +extlinux/main.c:1131: undefined reference to 'minor' + +Signed-off-by: Mike Frysinger +Signed-off-by: Gene Cumm +Signed-off-by: Alexander Sverdlin +--- + extlinux/main.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/extlinux/main.c b/extlinux/main.c +index a7ebd49..ebff7ea 100644 +--- a/extlinux/main.c ++++ b/extlinux/main.c +@@ -38,6 +38,7 @@ + #include + #include + #include ++#include + #include + #include + #include +-- +2.10.5.GIT + diff --git a/boot/syslinux/0013-Fix-build-with-gnu-efi-version-3.0.9.patch b/boot/syslinux/0013-Fix-build-with-gnu-efi-version-3.0.9.patch new file mode 100644 index 00000000..17a6d37c --- /dev/null +++ b/boot/syslinux/0013-Fix-build-with-gnu-efi-version-3.0.9.patch @@ -0,0 +1,45 @@ +From 44a1b42e561b9a257209300e2860b901b100cc17 Mon Sep 17 00:00:00 2001 +From: Carlos Santos +Date: Tue, 26 Feb 2019 08:07:22 -0300 +Subject: [PATCH] Fix build with gnu-efi version 3.0.9 + +Adapt a patch already applied upstream to prevent multiple definitions +of 'memset' and 'memcpy'. + +Signed-off-by: Carlos Santos +(adapted from commit 363d61c4f112b972649b19d67e96b9321f738f00) +--- + mk/lib.mk | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/mk/lib.mk b/mk/lib.mk +index ceb95bd0..c9b6eaf3 100644 +--- a/mk/lib.mk ++++ b/mk/lib.mk +@@ -186,9 +186,9 @@ MINLIBOBJS = \ + # $(LIBVESA_OBJS) + + CORELIBOBJS = \ +- memcpy.o memset.o memcmp.o printf.o strncmp.o vfprintf.o \ ++ memcmp.o printf.o strncmp.o vfprintf.o \ + strlen.o vsnprintf.o snprintf.o stpcpy.o strcmp.o strdup.o \ +- strcpy.o strncpy.o setjmp.o fopen.o fread.o fread2.o puts.o \ ++ strcpy.o strncpy.o fopen.o fread.o fread2.o puts.o \ + strtoul.o strntoumax.o strcasecmp.o \ + sprintf.o strlcat.o strchr.o strlcpy.o strncasecmp.o ctypes.o \ + fputs.o fwrite2.o fwrite.o fgetc.o fclose.o lmalloc.o \ +@@ -203,6 +203,11 @@ CORELIBOBJS = \ + $(LIBENTRY_OBJS) \ + $(LIBMODULE_OBJS) + ++ifndef EFI_BUILD ++# For EFI, these are part of gnu-efi ++CORELIBOBJS += setjmp.o memcpy.o memset.o ++endif ++ + LDFLAGS = -m elf_$(ARCH) --hash-style=gnu -T $(com32)/lib/$(ARCH)/elf.ld + + .SUFFIXES: .c .o .a .so .lo .i .S .s .ls .ss .lss +-- +2.14.5 + diff --git a/boot/syslinux/0014-Fix-build-with-binutils-note-gnu-property-section.patch b/boot/syslinux/0014-Fix-build-with-binutils-note-gnu-property-section.patch new file mode 100644 index 00000000..fedd8156 --- /dev/null +++ b/boot/syslinux/0014-Fix-build-with-binutils-note-gnu-property-section.patch @@ -0,0 +1,47 @@ +From beb526ca925983c7da229043790ecd552d910650 Mon Sep 17 00:00:00 2001 +From: Christian Stewart +Date: Thu, 4 Apr 2019 23:24:31 -0700 +Subject: [PATCH] Fix build with binutils note gnu property section + +This fixes the following build error with newer binutils: + + objcopy -O binary mbr.elf mbr.bin + perl /build/syslinux/src/syslinux/mbr/checksize.pl mbr.bin + mbr.bin: too big (452 > 440) + +Corresponding bug reports: + + - https://bugs.archlinux.org/task/60405 + - https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=906414 + +Strips the .note.gnu.property in the linker scripts for the MBRs. + +Signed-off-by: Christian Stewart +--- + mbr/i386/mbr.ld | 1 + + mbr/x86_64/mbr.ld | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/mbr/i386/mbr.ld b/mbr/i386/mbr.ld +index d14ba802..53683461 100644 +--- a/mbr/i386/mbr.ld ++++ b/mbr/i386/mbr.ld +@@ -70,4 +70,5 @@ SECTIONS + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + /DISCARD/ : { *(.note.GNU-stack) } ++ /DISCARD/ : { *(.note.gnu.property) } + } +diff --git a/mbr/x86_64/mbr.ld b/mbr/x86_64/mbr.ld +index ae27d49a..b8c0d895 100644 +--- a/mbr/x86_64/mbr.ld ++++ b/mbr/x86_64/mbr.ld +@@ -69,4 +69,5 @@ SECTIONS + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + /DISCARD/ : { *(.note.GNU-stack) } ++ /DISCARD/ : { *(.note.gnu.property) } + } +-- +2.21.0 + diff --git a/boot/syslinux/0015-efi-main.c-include-efisetjmp.h.patch b/boot/syslinux/0015-efi-main.c-include-efisetjmp.h.patch new file mode 100644 index 00000000..2fd61ecb --- /dev/null +++ b/boot/syslinux/0015-efi-main.c-include-efisetjmp.h.patch @@ -0,0 +1,60 @@ +From 7d68fa68cd9f2987bd85339f3391913a8b0e58c7 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 24 Mar 2020 10:21:27 +0100 +Subject: [PATCH] efi/main.c: include +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Building syslinux against gnu-efi 3.0.10 currently fails with: + +syslinux/efi/main.c:33:8: error: unknown type name ‘jmp_buf’ + 33 | static jmp_buf load_error_buf; + | ^~~~~~~ +syslinux/efi/main.c: In function ‘local_boot’: +syslinux/efi/main.c:189:5: warning: implicit declaration of function ‘longjmp’ [-Wimplicit-function-declaration] + 189 | longjmp(&load_error_buf, 1); + | ^~~~~~~ +syslinux/efi/main.c: In function ‘build_gdt’: +syslinux/efi/main.c:907:75: warning: taking address of packed member of ‘struct dt_desc’ may result in an unaligned pointer value [-Waddress-of-packed-member] + 907 | status = emalloc(gdt.limit, __SIZEOF_POINTER__ , (EFI_PHYSICAL_ADDRESS *)&gdt.base); + | ^~~~~~~~~ +syslinux/efi/main.c: In function ‘efi_main’: +syslinux/efi/main.c:1390:7: warning: implicit declaration of function ‘setjmp’ [-Wimplicit-function-declaration] + 1390 | if (!setjmp(&load_error_buf)) + | ^~~~~~ +make[3]: *** [syslinux/mk/efi.mk:63: main.o] Error 1 + +This is due to gnu-efi commit 486ba3c3bdd147b7d98159b9e650be60bce0f027 +("Do not include efisetjmp.h on efi.h"), in which they state: + + Do not include efisetjmp.h on efi.h + + People than really want to use efisetjmp implementation can include + the header on their own. + + Signed-off-by: leo + +So we act as specified, and include from efi/main.c. + +Signed-off-by: Thomas Petazzoni +Upstream: https://www.syslinux.org/archives/2020-March/026621.html +--- + efi/main.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/efi/main.c b/efi/main.c +index 6a748412..e924cfb1 100644 +--- a/efi/main.c ++++ b/efi/main.c +@@ -12,6 +12,7 @@ + #include + + #include "efi.h" ++#include + #include "fio.h" + #include "version.h" + #include "efi_pxe.h" +-- +2.25.1 + diff --git a/boot/syslinux/0016-Workaround-multiple-definition-of-symbol-errors.patch b/boot/syslinux/0016-Workaround-multiple-definition-of-symbol-errors.patch new file mode 100644 index 00000000..ea91de5c --- /dev/null +++ b/boot/syslinux/0016-Workaround-multiple-definition-of-symbol-errors.patch @@ -0,0 +1,126 @@ +From 16f293d67eace501c98494976030f4319778ebf5 Mon Sep 17 00:00:00 2001 +From: Merlin Mathesius +Date: Wed, 13 May 2020 08:02:27 -0500 +Subject: [PATCH] Workaround multiple definition of symbol errors + +[From https://src.fedoraproject.org/rpms/syslinux/raw/rawhide/f/0005-Workaround-multiple-definition-of-symbol-errors.patch + plus adding '-z muldefs' for gpxe] +Signed-off-by: Peter Seiderer +--- + com32/cmenu/Makefile | 2 +- + com32/elflink/ldlinux/Makefile | 2 +- + com32/gpllib/Makefile | 2 +- + com32/hdt/Makefile | 2 +- + core/Makefile | 2 +- + dos/Makefile | 2 +- + efi/Makefile | 2 +- + gpxe/src/arch/i386/Makefile | 2 +- + 8 files changed, 8 insertions(+), 8 deletions(-) + +diff --git a/com32/cmenu/Makefile b/com32/cmenu/Makefile +index 6bb52316..66cdd649 100644 +--- a/com32/cmenu/Makefile ++++ b/com32/cmenu/Makefile +@@ -49,7 +49,7 @@ makeoutputdirs: + @mkdir -p $(OBJ)/libmenu + + libmenu/libmenu.elf: $(LIBMENU) +- $(LD) -shared $(LDFLAGS) -soname $(patsubst %.elf,%.c32,$(@F)) \ ++ $(LD) -shared $(LDFLAGS) -z muldefs -soname $(patsubst %.elf,%.c32,$(@F)) \ + -o $@ $^ + + tidy dist: +diff --git a/com32/elflink/ldlinux/Makefile b/com32/elflink/ldlinux/Makefile +index d948da43..67434a1f 100644 +--- a/com32/elflink/ldlinux/Makefile ++++ b/com32/elflink/ldlinux/Makefile +@@ -33,7 +33,7 @@ endif + all: $(BTARGET) ldlinux_lnx.a + + ldlinux.elf : $(OBJS) +- $(LD) $(LDFLAGS) -soname $(SONAME) -o $@ $^ $(LIBS) ++ $(LD) $(LDFLAGS) -z muldefs -soname $(SONAME) -o $@ $^ $(LIBS) + + LNXCFLAGS += -D__export='__attribute__((visibility("default")))' + LNXLIBOBJS = get_key.lo +diff --git a/com32/gpllib/Makefile b/com32/gpllib/Makefile +index e3e30d76..17520a1e 100644 +--- a/com32/gpllib/Makefile ++++ b/com32/gpllib/Makefile +@@ -24,7 +24,7 @@ makeoutputdirs: + $(addprefix $(OBJ),$(sort $(dir $(LIBOBJS)))),$(b)) + + libgpl.elf : $(LIBOBJS) +- $(LD) -shared $(LDFLAGS) -soname $(patsubst %.elf,%.c32,$(@F)) -o $@ $^ ++ $(LD) -shared $(LDFLAGS) -z muldefs -soname $(patsubst %.elf,%.c32,$(@F)) -o $@ $^ + + tidy dist clean: + find . \( -name \*.o -o -name .\*.d -o -name \*.tmp \) -print0 | \ +diff --git a/com32/hdt/Makefile b/com32/hdt/Makefile +index 80f2d0a0..8509cd96 100644 +--- a/com32/hdt/Makefile ++++ b/com32/hdt/Makefile +@@ -52,7 +52,7 @@ QEMU ?= qemu-kvm + all: $(MODULES) $(TESTFILES) + + hdt.elf : $(OBJS) $(LIBS) $(C_LIBS) +- $(LD) $(LDFLAGS) -o $@ $^ ++ $(LD) $(LDFLAGS) -z muldefs -o $@ $^ + + memtest: + -[ ! -f $(FLOPPY_DIR)/$(MEMTEST) ] && $(WGET) $(MEMTEST_URL) -O $(FLOPPY_DIR)/$(MEMTEST) +diff --git a/core/Makefile b/core/Makefile +index ad0acb5a..3bee4dc9 100644 +--- a/core/Makefile ++++ b/core/Makefile +@@ -164,7 +164,7 @@ AUXLIBS = libisolinux.a libisolinux-debug.a libldlinux.a \ + LDSCRIPT = $(SRC)/$(ARCH)/syslinux.ld + + %.elf: %.o $(LIBDEP) $(LDSCRIPT) $(AUXLIBS) +- $(LD) $(LDFLAGS) -Bsymbolic $(LD_PIE) -E --hash-style=gnu -T $(LDSCRIPT) -M -o $@ $< \ ++ $(LD) $(LDFLAGS) -z muldefs -Bsymbolic $(LD_PIE) -E --hash-style=gnu -T $(LDSCRIPT) -M -o $@ $< \ + --start-group $(LIBS) $(subst $(*F).elf,lib$(*F).a,$@) --end-group \ + > $(@:.elf=.map) + $(OBJDUMP) -h $@ > $(@:.elf=.sec) +diff --git a/dos/Makefile b/dos/Makefile +index b9c337d5..2af87346 100644 +--- a/dos/Makefile ++++ b/dos/Makefile +@@ -19,7 +19,7 @@ include $(MAKEDIR)/embedded.mk + CFLAGS += -D__MSDOS__ -mregparm=3 -DREGPARM=3 + # CFLAGS += -DDEBUG + +-LDFLAGS = -T $(SRC)/dosexe.ld ++LDFLAGS = -T $(SRC)/dosexe.ld -z muldefs + OPTFLAGS = -g + INCLUDES = -include code16.h -nostdinc -iwithprefix include \ + -I$(SRC) -I$(SRC)/.. -I$(SRC)/../libfat \ +diff --git a/efi/Makefile b/efi/Makefile +index d24d16db..7c714ebf 100644 +--- a/efi/Makefile ++++ b/efi/Makefile +@@ -70,7 +70,7 @@ $(OBJS): subdirs + BTARGET = syslinux.efi + + syslinux.so: $(OBJS) $(CORE_OBJS) $(LIB_OBJS) +- $(LD) $(LDFLAGS) --strip-debug -o $@ $^ -lgnuefi -lefi ++ $(LD) $(LDFLAGS) -z muldefs --strip-debug -o $@ $^ -lgnuefi -lefi + + # We need to rename the .hash section because the EFI firmware + # linker really doesn't like it. +diff --git a/gpxe/src/arch/i386/Makefile b/gpxe/src/arch/i386/Makefile +index dd8da802..be1d00ff 100644 +--- a/gpxe/src/arch/i386/Makefile ++++ b/gpxe/src/arch/i386/Makefile +@@ -55,7 +55,7 @@ ASFLAGS += --32 + ifeq ($(HOST_OS),FreeBSD) + LDFLAGS += -m elf_i386_fbsd + else +-LDFLAGS += -m elf_i386 ++LDFLAGS += -z muldefs -m elf_i386 + endif + + # EFI requires -fshort-wchar, and nothing else currently uses wchar_t +-- +2.30.1 + diff --git a/boot/syslinux/0017-Replace-builtin-strlen-that-appears-to-get-optimized.patch b/boot/syslinux/0017-Replace-builtin-strlen-that-appears-to-get-optimized.patch new file mode 100644 index 00000000..69a7e87d --- /dev/null +++ b/boot/syslinux/0017-Replace-builtin-strlen-that-appears-to-get-optimized.patch @@ -0,0 +1,42 @@ +From 698a6ce88524b727d265b204d648e78d8acb485c Mon Sep 17 00:00:00 2001 +From: Merlin Mathesius +Date: Wed, 13 May 2020 11:58:37 -0500 +Subject: [PATCH] Replace builtin strlen that appears to get optimized away + +[From https://src.fedoraproject.org/rpms/syslinux/raw/rawhide/f/0006-Replace-builtin-strlen-that-appears-to-get-optimized.patch] +Signed-off-by: Peter Seiderer +--- + dos/string.h | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/dos/string.h b/dos/string.h +index f648de2d..407d0233 100644 +--- a/dos/string.h ++++ b/dos/string.h +@@ -5,12 +5,22 @@ + #ifndef _STRING_H + #define _STRING_H + ++#include ++ + /* Standard routines */ + #define memcpy(a,b,c) __builtin_memcpy(a,b,c) + #define memmove(a,b,c) __builtin_memmove(a,b,c) + #define memset(a,b,c) __builtin_memset(a,b,c) + #define strcpy(a,b) __builtin_strcpy(a,b) +-#define strlen(a) __builtin_strlen(a) ++#define strlen(a) inline_strlen(a) ++ ++/* replacement for builtin strlen that appears to get optimized away */ ++static inline size_t inline_strlen(const char *str) ++{ ++ size_t l; ++ for (l = 0; *str++; l++); ++ return l; ++} + + /* This only returns true or false */ + static inline int memcmp(const void *__m1, const void *__m2, unsigned int __n) +-- +2.30.1 + diff --git a/boot/syslinux/Config.in b/boot/syslinux/Config.in new file mode 100644 index 00000000..c95dac18 --- /dev/null +++ b/boot/syslinux/Config.in @@ -0,0 +1,61 @@ +config BR2_TARGET_SYSLINUX + bool "syslinux" + depends on BR2_i386 || BR2_x86_64 + # Make sure at least one of the flavors is installed + select BR2_TARGET_SYSLINUX_ISOLINUX \ + if !BR2_TARGET_SYSLINUX_PXELINUX && \ + !BR2_TARGET_SYSLINUX_MBR && \ + !BR2_TARGET_SYSLINUX_EFI + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + help + The syslinux bootloader for x86 systems. + This includes: syslinux, pxelinux, extlinux. + + http://syslinux.org + +if BR2_TARGET_SYSLINUX + +config BR2_TARGET_SYSLINUX_LEGACY_BIOS + bool + +config BR2_TARGET_SYSLINUX_ISOLINUX + bool "install isolinux" + select BR2_TARGET_SYSLINUX_LEGACY_BIOS + help + Install the legacy-BIOS 'isolinux' image, to boot off + optical media (CDROM, DVD.) + +config BR2_TARGET_SYSLINUX_PXELINUX + bool "install pxelinux" + select BR2_TARGET_SYSLINUX_LEGACY_BIOS + help + Install the legacy-BIOS 'pxelinux' image, to boot off + the network using PXE. + +config BR2_TARGET_SYSLINUX_MBR + bool "install mbr" + select BR2_TARGET_SYSLINUX_LEGACY_BIOS + help + Install the legacy-BIOS 'mbr' image, to boot off a + local MBR-partition (e.g. prepared with 'extlinux' + or 'syslinux'). + +config BR2_TARGET_SYSLINUX_EFI + bool "install efi" + depends on BR2_PACKAGE_GNU_EFI_ARCH_SUPPORTS + select BR2_PACKAGE_GNU_EFI + help + Install the 'efi' image, to boot from an EFI environment. + +if BR2_TARGET_SYSLINUX_LEGACY_BIOS + +config BR2_TARGET_SYSLINUX_C32 + string "modules to install" + help + Enter a space-separated list of .c32 modules to install. + Leave empty to install no module. + +endif # BR2_TARGET_SYSLINUX_LEGACY_BIOS + +endif # BR2_TARGET_SYSLINUX diff --git a/boot/syslinux/syslinux.hash b/boot/syslinux/syslinux.hash new file mode 100644 index 00000000..9bec3a20 --- /dev/null +++ b/boot/syslinux/syslinux.hash @@ -0,0 +1,4 @@ +# From https://www.kernel.org/pub/linux/utils/boot/syslinux/sha256sums.asc +sha256 26d3986d2bea109d5dc0e4f8c4822a459276cf021125e8c9f23c3cca5d8c850e syslinux-6.03.tar.xz +# Locally computed +sha256 dcc100d4161cc0b7177545ab6e47216f84857cda3843847c792a25289852dcaa COPYING diff --git a/boot/syslinux/syslinux.mk b/boot/syslinux/syslinux.mk new file mode 100644 index 00000000..67bc6925 --- /dev/null +++ b/boot/syslinux/syslinux.mk @@ -0,0 +1,105 @@ +################################################################################ +# +# syslinux to make target msdos/iso9660 filesystems bootable +# +################################################################################ + +SYSLINUX_VERSION = 6.03 +SYSLINUX_SOURCE = syslinux-$(SYSLINUX_VERSION).tar.xz +SYSLINUX_SITE = $(BR2_KERNEL_MIRROR)/linux/utils/boot/syslinux + +SYSLINUX_LICENSE = GPL-2.0+ +SYSLINUX_LICENSE_FILES = COPYING + +SYSLINUX_INSTALL_IMAGES = YES + +# host-util-linux needed to provide libuuid when building host tools +SYSLINUX_DEPENDENCIES = host-nasm host-upx util-linux host-util-linux + +ifeq ($(BR2_TARGET_SYSLINUX_LEGACY_BIOS),y) +SYSLINUX_TARGET += bios +endif + +# The syslinux build system must be forced to use Buildroot's gnu-efi +# package by setting EFIINC, LIBDIR and LIBEFI. Otherwise, it uses its +# own copy of gnu-efi included in syslinux's sources since 6.03 +# release. +ifeq ($(BR2_TARGET_SYSLINUX_EFI),y) +ifeq ($(BR2_ARCH_IS_64),y) +SYSLINUX_EFI_BITS = efi64 +else +SYSLINUX_EFI_BITS = efi32 +endif # 64-bit +SYSLINUX_DEPENDENCIES += gnu-efi +SYSLINUX_TARGET += $(SYSLINUX_EFI_BITS) +SYSLINUX_EFI_ARGS = \ + EFIINC=$(STAGING_DIR)/usr/include/efi \ + LIBDIR=$(STAGING_DIR)/usr/lib \ + LIBEFI=$(STAGING_DIR)/usr/lib/libefi.a +endif # EFI + +# The syslinux tarball comes with pre-compiled binaries. +# Since timestamps might not be in the correct order, a rebuild is +# not always triggered for all the different images. +# Cleanup the mess even before we attempt a build, so we indeed +# build everything from source. +define SYSLINUX_CLEANUP + rm -rf $(@D)/bios $(@D)/efi32 $(@D)/efi64 +endef +SYSLINUX_POST_PATCH_HOOKS += SYSLINUX_CLEANUP + +# syslinux build system has no convenient way to pass CFLAGS, +# and the internal zlib should take precedence so -I shouldn't +# be used. +define SYSLINUX_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) \ + CC="$(TARGET_CC)" \ + LD="$(TARGET_LD)" \ + NASM="$(HOST_DIR)/bin/nasm" \ + CC_FOR_BUILD="$(HOSTCC)" \ + CFLAGS_FOR_BUILD="$(HOST_CFLAGS)" \ + LDFLAGS_FOR_BUILD="$(HOST_LDFLAGS)" \ + $(SYSLINUX_EFI_ARGS) -C $(@D) $(SYSLINUX_TARGET) +endef + +# While the actual bootloader is compiled for the target, several +# utilities for installing the bootloader are meant for the host. +# Repeat the target, otherwise syslinux will try to build everything +# Repeat LD (and CC) as it happens that some binaries are linked at +# install-time. +define SYSLINUX_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) $(SYSLINUX_EFI_ARGS) INSTALLROOT=$(HOST_DIR) \ + CC="$(TARGET_CC)" \ + LD="$(TARGET_LD)" \ + -C $(@D) $(SYSLINUX_TARGET) install +endef + +# That 'syslinux' binary is an installer actually built for the target. +# However, buildroot makes no usage of it, so better delete it than have it +# installed at the wrong place +define SYSLINUX_POST_INSTALL_CLEANUP + rm -rf $(HOST_DIR)/bin/syslinux +endef +SYSLINUX_POST_INSTALL_TARGET_HOOKS += SYSLINUX_POST_INSTALL_CLEANUP + +SYSLINUX_IMAGES-$(BR2_TARGET_SYSLINUX_ISOLINUX) += bios/core/isolinux.bin +SYSLINUX_IMAGES-$(BR2_TARGET_SYSLINUX_PXELINUX) += bios/core/pxelinux.bin +SYSLINUX_IMAGES-$(BR2_TARGET_SYSLINUX_MBR) += bios/mbr/mbr.bin +SYSLINUX_IMAGES-$(BR2_TARGET_SYSLINUX_EFI) += $(SYSLINUX_EFI_BITS)/efi/syslinux.efi + +SYSLINUX_C32 = $(call qstrip,$(BR2_TARGET_SYSLINUX_C32)) + +# We install the c32 modules from the host-installed tree, where they +# are all neatly installed in a single location, while they are +# scattered around everywhere in the build tree. +define SYSLINUX_INSTALL_IMAGES_CMDS + for i in $(SYSLINUX_IMAGES-y); do \ + $(INSTALL) -D -m 0755 $(@D)/$$i $(BINARIES_DIR)/syslinux/$${i##*/}; \ + done + for i in $(SYSLINUX_C32); do \ + $(INSTALL) -D -m 0755 $(HOST_DIR)/share/syslinux/$${i} \ + $(BINARIES_DIR)/syslinux/$${i}; \ + done +endef + +$(eval $(generic-package)) diff --git a/boot/uboot/2015.07/0001-Revert-arch-Make-board-selection-choices-optional.patch b/boot/uboot/2015.07/0001-Revert-arch-Make-board-selection-choices-optional.patch new file mode 100644 index 00000000..8b814f2d --- /dev/null +++ b/boot/uboot/2015.07/0001-Revert-arch-Make-board-selection-choices-optional.patch @@ -0,0 +1,742 @@ +From ee11fed43e2bd029f71af1e72ab9bb5652f5fc54 Mon Sep 17 00:00:00 2001 +From: Alexey Brodkin +Date: Wed, 29 Jul 2015 20:32:59 +0300 +Subject: [PATCH] Revert "arch: Make board selection choices optional" + +This reverts commit a26cd04920dc069fd6e91abb785426cf6c29f45f. + +Reverted commit caused an issue with "make oldconfig" - default prompt +for target selection was set as No that lead to missing platform +selection by automated scripts like that: +------------------>8------------------ +"yes "" | make oldconfig" on defconfig +------------------>8------------------ + +And that lead to build failure: +------------------>8------------------ +$ make +scripts/kconfig/conf --silentoldconfig Kconfig + CHK include/config.h + UPD include/config.h + GEN include/autoconf.mk +In file included from ./include/common.h:18:0: +include/config.h:5:22: fatal error: configs/.h: No such file or directory + #include + ^ +compilation terminated. +scripts/Makefile.autoconf:72: recipe for target 'include/autoconf.mk' failed +make[1]: *** [include/autoconf.mk] Error 1 +------------------>8------------------ + +Signed-off-by: Alexey Brodkin +--- + arch/arc/Kconfig | 1 - + arch/arm/Kconfig | 1 - + arch/arm/cpu/armv7/exynos/Kconfig | 1 - + arch/arm/cpu/armv7/mx5/Kconfig | 1 - + arch/arm/cpu/armv7/mx6/Kconfig | 1 - + arch/arm/cpu/armv7/omap3/Kconfig | 1 - + arch/arm/cpu/armv7/omap4/Kconfig | 1 - + arch/arm/cpu/armv7/omap5/Kconfig | 1 - + arch/arm/cpu/armv7/rmobile/Kconfig | 1 - + arch/arm/cpu/armv7/s5pc1xx/Kconfig | 1 - + arch/arm/mach-at91/Kconfig | 1 - + arch/arm/mach-bcm283x/Kconfig | 1 - + arch/arm/mach-davinci/Kconfig | 1 - + arch/arm/mach-integrator/Kconfig | 2 -- + arch/arm/mach-keystone/Kconfig | 1 - + arch/arm/mach-kirkwood/Kconfig | 1 - + arch/arm/mach-nomadik/Kconfig | 1 - + arch/arm/mach-orion5x/Kconfig | 1 - + arch/arm/mach-socfpga/Kconfig | 1 - + arch/arm/mach-tegra/Kconfig | 1 - + arch/arm/mach-tegra/tegra114/Kconfig | 1 - + arch/arm/mach-tegra/tegra124/Kconfig | 1 - + arch/arm/mach-tegra/tegra20/Kconfig | 1 - + arch/arm/mach-tegra/tegra30/Kconfig | 1 - + arch/arm/mach-zynq/Kconfig | 1 - + arch/avr32/Kconfig | 1 - + arch/blackfin/Kconfig | 1 - + arch/m68k/Kconfig | 1 - + arch/microblaze/Kconfig | 1 - + arch/mips/Kconfig | 1 - + arch/nds32/Kconfig | 1 - + arch/nios2/Kconfig | 1 - + arch/openrisc/Kconfig | 1 - + arch/powerpc/Kconfig | 1 - + arch/powerpc/cpu/mpc512x/Kconfig | 1 - + arch/powerpc/cpu/mpc5xx/Kconfig | 1 - + arch/powerpc/cpu/mpc5xxx/Kconfig | 1 - + arch/powerpc/cpu/mpc8260/Kconfig | 1 - + arch/powerpc/cpu/mpc83xx/Kconfig | 1 - + arch/powerpc/cpu/mpc85xx/Kconfig | 1 - + arch/powerpc/cpu/mpc86xx/Kconfig | 1 - + arch/powerpc/cpu/mpc8xx/Kconfig | 1 - + arch/powerpc/cpu/ppc4xx/Kconfig | 1 - + arch/sh/Kconfig | 1 - + arch/sparc/Kconfig | 1 - + board/amcc/canyonlands/Kconfig | 1 - + board/coreboot/Kconfig | 1 - + board/dbau1x00/Kconfig | 1 - + board/google/Kconfig | 1 - + board/intel/Kconfig | 1 - + board/micronas/vct/Kconfig | 1 - + board/seco/Kconfig | 2 -- + board/sunxi/Kconfig | 1 - + 53 files changed, 55 deletions(-) + +diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig +index 925e312..640cda8 100644 +--- a/arch/arc/Kconfig ++++ b/arch/arc/Kconfig +@@ -129,7 +129,6 @@ config ARC_CACHE_LINE_SHIFT + + choice + prompt "Target select" +- optional + + config TARGET_TB100 + bool "Support tb100" +diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig +index 9908b43..8eeb46c 100644 +--- a/arch/arm/Kconfig ++++ b/arch/arm/Kconfig +@@ -64,7 +64,6 @@ config SEMIHOSTING + + choice + prompt "Target select" +- optional + + config ARCH_AT91 + bool "Atmel AT91" +diff --git a/arch/arm/cpu/armv7/exynos/Kconfig b/arch/arm/cpu/armv7/exynos/Kconfig +index 4a7d82f..f2fe748 100644 +--- a/arch/arm/cpu/armv7/exynos/Kconfig ++++ b/arch/arm/cpu/armv7/exynos/Kconfig +@@ -2,7 +2,6 @@ if ARCH_EXYNOS + + choice + prompt "EXYNOS board select" +- optional + + config TARGET_SMDKV310 + select SUPPORT_SPL +diff --git a/arch/arm/cpu/armv7/mx5/Kconfig b/arch/arm/cpu/armv7/mx5/Kconfig +index 9f250c6..2d6c0ce 100644 +--- a/arch/arm/cpu/armv7/mx5/Kconfig ++++ b/arch/arm/cpu/armv7/mx5/Kconfig +@@ -12,7 +12,6 @@ config MX53 + + choice + prompt "MX5 board select" +- optional + + config TARGET_USBARMORY + bool "Support USB armory" +diff --git a/arch/arm/cpu/armv7/mx6/Kconfig b/arch/arm/cpu/armv7/mx6/Kconfig +index 10908c4..662596f 100644 +--- a/arch/arm/cpu/armv7/mx6/Kconfig ++++ b/arch/arm/cpu/armv7/mx6/Kconfig +@@ -27,7 +27,6 @@ config MX6SX + + choice + prompt "MX6 board select" +- optional + + config TARGET_SECOMX6 + bool "Support secomx6 boards" +diff --git a/arch/arm/cpu/armv7/omap3/Kconfig b/arch/arm/cpu/armv7/omap3/Kconfig +index b32a6b0..cc82c50 100644 +--- a/arch/arm/cpu/armv7/omap3/Kconfig ++++ b/arch/arm/cpu/armv7/omap3/Kconfig +@@ -2,7 +2,6 @@ if OMAP34XX + + choice + prompt "OMAP3 board select" +- optional + + config TARGET_AM3517_EVM + bool "AM3517 EVM" +diff --git a/arch/arm/cpu/armv7/omap4/Kconfig b/arch/arm/cpu/armv7/omap4/Kconfig +index df27ea1..eccf897 100644 +--- a/arch/arm/cpu/armv7/omap4/Kconfig ++++ b/arch/arm/cpu/armv7/omap4/Kconfig +@@ -2,7 +2,6 @@ if OMAP44XX + + choice + prompt "OMAP4 board select" +- optional + + config TARGET_DUOVERO + bool "OMAP4430 Gumstix Duovero" +diff --git a/arch/arm/cpu/armv7/omap5/Kconfig b/arch/arm/cpu/armv7/omap5/Kconfig +index 20c3bd9..aca862d 100644 +--- a/arch/arm/cpu/armv7/omap5/Kconfig ++++ b/arch/arm/cpu/armv7/omap5/Kconfig +@@ -2,7 +2,6 @@ if OMAP54XX + + choice + prompt "OMAP5 board select" +- optional + + config TARGET_CM_T54 + bool "CompuLab CM-T54" +diff --git a/arch/arm/cpu/armv7/rmobile/Kconfig b/arch/arm/cpu/armv7/rmobile/Kconfig +index ef56286..638b63d 100644 +--- a/arch/arm/cpu/armv7/rmobile/Kconfig ++++ b/arch/arm/cpu/armv7/rmobile/Kconfig +@@ -2,7 +2,6 @@ if RMOBILE + + choice + prompt "Renesus ARM SoCs board select" +- optional + + config TARGET_ARMADILLO_800EVA + bool "armadillo 800 eva board" +diff --git a/arch/arm/cpu/armv7/s5pc1xx/Kconfig b/arch/arm/cpu/armv7/s5pc1xx/Kconfig +index 792ef59..65cc9eb 100644 +--- a/arch/arm/cpu/armv7/s5pc1xx/Kconfig ++++ b/arch/arm/cpu/armv7/s5pc1xx/Kconfig +@@ -2,7 +2,6 @@ if ARCH_S5PC1XX + + choice + prompt "S5PC1XX board select" +- optional + + config TARGET_S5P_GONI + bool "S5P Goni board" +diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig +index bbf4228..5dc2cb2 100644 +--- a/arch/arm/mach-at91/Kconfig ++++ b/arch/arm/mach-at91/Kconfig +@@ -2,7 +2,6 @@ if ARCH_AT91 + + choice + prompt "Atmel AT91 board select" +- optional + + config TARGET_AT91RM9200EK + bool "Atmel AT91RM9200 evaluation kit" +diff --git a/arch/arm/mach-bcm283x/Kconfig b/arch/arm/mach-bcm283x/Kconfig +index 2315a13..d40f505 100644 +--- a/arch/arm/mach-bcm283x/Kconfig ++++ b/arch/arm/mach-bcm283x/Kconfig +@@ -3,7 +3,6 @@ menu "Broadcom BCM283X family" + + choice + prompt "Broadcom BCM283X board select" +- optional + + config TARGET_RPI + bool "Raspberry Pi" +diff --git a/arch/arm/mach-davinci/Kconfig b/arch/arm/mach-davinci/Kconfig +index e6cb390..3ef55d3 100644 +--- a/arch/arm/mach-davinci/Kconfig ++++ b/arch/arm/mach-davinci/Kconfig +@@ -2,7 +2,6 @@ if ARCH_DAVINCI + + choice + prompt "DaVinci board select" +- optional + + config TARGET_ENBW_CMC + bool "EnBW CMC board" +diff --git a/arch/arm/mach-integrator/Kconfig b/arch/arm/mach-integrator/Kconfig +index c54d69d..8ffc544 100644 +--- a/arch/arm/mach-integrator/Kconfig ++++ b/arch/arm/mach-integrator/Kconfig +@@ -3,7 +3,6 @@ menu "Integrator Options" + + choice + prompt "Integrator platform select" +- optional + + config ARCH_INTEGRATOR_AP + bool "Support Integrator/AP platform" +@@ -19,7 +18,6 @@ config ARCH_CINTEGRATOR + + choice + prompt "Integrator core module select" +- optional + + config CM720T + bool "Core Module for ARM720T" +diff --git a/arch/arm/mach-keystone/Kconfig b/arch/arm/mach-keystone/Kconfig +index 67f1a33..134ae87 100644 +--- a/arch/arm/mach-keystone/Kconfig ++++ b/arch/arm/mach-keystone/Kconfig +@@ -2,7 +2,6 @@ if ARCH_KEYSTONE + + choice + prompt "TI Keystone board select" +- optional + + config TARGET_K2HK_EVM + bool "TI Keystone 2 Kepler/Hawking EVM" +diff --git a/arch/arm/mach-kirkwood/Kconfig b/arch/arm/mach-kirkwood/Kconfig +index 1261885..45c6687 100644 +--- a/arch/arm/mach-kirkwood/Kconfig ++++ b/arch/arm/mach-kirkwood/Kconfig +@@ -2,7 +2,6 @@ if KIRKWOOD + + choice + prompt "Marvell Kirkwood board select" +- optional + + config TARGET_OPENRD + bool "Marvell OpenRD Board" +diff --git a/arch/arm/mach-nomadik/Kconfig b/arch/arm/mach-nomadik/Kconfig +index ba72a41..265f336 100644 +--- a/arch/arm/mach-nomadik/Kconfig ++++ b/arch/arm/mach-nomadik/Kconfig +@@ -2,7 +2,6 @@ if ARCH_NOMADIK + + choice + prompt "Nomadik board select" +- optional + + config NOMADIK_NHK8815 + bool "ST 8815 Nomadik Hardware Kit" +diff --git a/arch/arm/mach-orion5x/Kconfig b/arch/arm/mach-orion5x/Kconfig +index 7644b8d..291c511 100644 +--- a/arch/arm/mach-orion5x/Kconfig ++++ b/arch/arm/mach-orion5x/Kconfig +@@ -2,7 +2,6 @@ if ORION5X + + choice + prompt "Marvell Orion board select" +- optional + + config TARGET_EDMINIV2 + bool "LaCie Ethernet Disk mini V2" +diff --git a/arch/arm/mach-socfpga/Kconfig b/arch/arm/mach-socfpga/Kconfig +index e46c348..204efca 100644 +--- a/arch/arm/mach-socfpga/Kconfig ++++ b/arch/arm/mach-socfpga/Kconfig +@@ -2,7 +2,6 @@ if ARCH_SOCFPGA + + choice + prompt "Altera SOCFPGA board select" +- optional + + config TARGET_SOCFPGA_ARRIA5 + bool "Altera SOCFPGA Arria V" +diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig +index 54bd648..ef77c84 100644 +--- a/arch/arm/mach-tegra/Kconfig ++++ b/arch/arm/mach-tegra/Kconfig +@@ -2,7 +2,6 @@ if TEGRA + + choice + prompt "Tegra SoC select" +- optional + + config TEGRA20 + bool "Tegra20 family" +diff --git a/arch/arm/mach-tegra/tegra114/Kconfig b/arch/arm/mach-tegra/tegra114/Kconfig +index 1047b92..31012bc 100644 +--- a/arch/arm/mach-tegra/tegra114/Kconfig ++++ b/arch/arm/mach-tegra/tegra114/Kconfig +@@ -2,7 +2,6 @@ if TEGRA114 + + choice + prompt "Tegra114 board select" +- optional + + config TARGET_DALMORE + bool "NVIDIA Tegra114 Dalmore evaluation board" +diff --git a/arch/arm/mach-tegra/tegra124/Kconfig b/arch/arm/mach-tegra/tegra124/Kconfig +index f3324ff..86c1301 100644 +--- a/arch/arm/mach-tegra/tegra124/Kconfig ++++ b/arch/arm/mach-tegra/tegra124/Kconfig +@@ -2,7 +2,6 @@ if TEGRA124 + + choice + prompt "Tegra124 board select" +- optional + + config TARGET_JETSON_TK1 + bool "NVIDIA Tegra124 Jetson TK1 board" +diff --git a/arch/arm/mach-tegra/tegra20/Kconfig b/arch/arm/mach-tegra/tegra20/Kconfig +index 1bb8dff..7f09f81 100644 +--- a/arch/arm/mach-tegra/tegra20/Kconfig ++++ b/arch/arm/mach-tegra/tegra20/Kconfig +@@ -2,7 +2,6 @@ if TEGRA20 + + choice + prompt "Tegra20 board select" +- optional + + config TARGET_HARMONY + bool "NVIDIA Tegra20 Harmony evaluation board" +diff --git a/arch/arm/mach-tegra/tegra30/Kconfig b/arch/arm/mach-tegra/tegra30/Kconfig +index e78331e..3abdc7b 100644 +--- a/arch/arm/mach-tegra/tegra30/Kconfig ++++ b/arch/arm/mach-tegra/tegra30/Kconfig +@@ -2,7 +2,6 @@ if TEGRA30 + + choice + prompt "Tegra30 board select" +- optional + + config TARGET_APALIS_T30 + bool "Toradex Apalis T30 board" +diff --git a/arch/arm/mach-zynq/Kconfig b/arch/arm/mach-zynq/Kconfig +index 1de5b07..6b0e295 100644 +--- a/arch/arm/mach-zynq/Kconfig ++++ b/arch/arm/mach-zynq/Kconfig +@@ -10,7 +10,6 @@ config ZYNQ_CUSTOM_INIT + + choice + prompt "Xilinx Zynq board select" +- optional + + config TARGET_ZYNQ_ZED + bool "Zynq ZedBoard" +diff --git a/arch/avr32/Kconfig b/arch/avr32/Kconfig +index eb33774..801b9cc 100644 +--- a/arch/avr32/Kconfig ++++ b/arch/avr32/Kconfig +@@ -6,7 +6,6 @@ config SYS_ARCH + + choice + prompt "Target select" +- optional + + config TARGET_ATNGW100 + bool "Support atngw100" +diff --git a/arch/blackfin/Kconfig b/arch/blackfin/Kconfig +index 0a2fb4d..31913fe 100644 +--- a/arch/blackfin/Kconfig ++++ b/arch/blackfin/Kconfig +@@ -6,7 +6,6 @@ config SYS_ARCH + + choice + prompt "Target select" +- optional + + config TARGET_BCT_BRETTL2 + bool "Support bct-brettl2" +diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig +index 26509b7..69cb0f7 100644 +--- a/arch/m68k/Kconfig ++++ b/arch/m68k/Kconfig +@@ -114,7 +114,6 @@ config M548x + + choice + prompt "Target select" +- optional + + config TARGET_M52277EVB + bool "Support M52277EVB" +diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig +index 077b2a7..6f419f0 100644 +--- a/arch/microblaze/Kconfig ++++ b/arch/microblaze/Kconfig +@@ -6,7 +6,6 @@ config SYS_ARCH + + choice + prompt "Target select" +- optional + + config TARGET_MICROBLAZE_GENERIC + bool "Support microblaze-generic" +diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig +index 7f7e258..87b94ac 100644 +--- a/arch/mips/Kconfig ++++ b/arch/mips/Kconfig +@@ -10,7 +10,6 @@ config SYS_CPU + + choice + prompt "Target select" +- optional + + config TARGET_QEMU_MIPS + bool "Support qemu-mips" +diff --git a/arch/nds32/Kconfig b/arch/nds32/Kconfig +index 98b0282..81b0a01 100644 +--- a/arch/nds32/Kconfig ++++ b/arch/nds32/Kconfig +@@ -6,7 +6,6 @@ config SYS_ARCH + + choice + prompt "Target select" +- optional + + config TARGET_ADP_AG101 + bool "Support adp-ag101" +diff --git a/arch/nios2/Kconfig b/arch/nios2/Kconfig +index 8ae7f6e..b3be7b5 100644 +--- a/arch/nios2/Kconfig ++++ b/arch/nios2/Kconfig +@@ -6,7 +6,6 @@ config SYS_ARCH + + choice + prompt "Target select" +- optional + + config TARGET_NIOS2_GENERIC + bool "Support nios2-generic" +diff --git a/arch/openrisc/Kconfig b/arch/openrisc/Kconfig +index 11014d1..4d62b4c 100644 +--- a/arch/openrisc/Kconfig ++++ b/arch/openrisc/Kconfig +@@ -6,7 +6,6 @@ config SYS_ARCH + + choice + prompt "Target select" +- optional + + config TARGET_OPENRISC_GENERIC + bool "Support openrisc-generic" +diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig +index 3b3f446..8e5a3e2 100644 +--- a/arch/powerpc/Kconfig ++++ b/arch/powerpc/Kconfig +@@ -6,7 +6,6 @@ config SYS_ARCH + + choice + prompt "CPU select" +- optional + + config MPC512X + bool "MPC512X" +diff --git a/arch/powerpc/cpu/mpc512x/Kconfig b/arch/powerpc/cpu/mpc512x/Kconfig +index 53450ae..a0f0ede 100644 +--- a/arch/powerpc/cpu/mpc512x/Kconfig ++++ b/arch/powerpc/cpu/mpc512x/Kconfig +@@ -6,7 +6,6 @@ config SYS_CPU + + choice + prompt "Target select" +- optional + + config TARGET_PDM360NG + bool "Support pdm360ng" +diff --git a/arch/powerpc/cpu/mpc5xx/Kconfig b/arch/powerpc/cpu/mpc5xx/Kconfig +index 5275447..aad4a7c 100644 +--- a/arch/powerpc/cpu/mpc5xx/Kconfig ++++ b/arch/powerpc/cpu/mpc5xx/Kconfig +@@ -6,7 +6,6 @@ config SYS_CPU + + choice + prompt "Target select" +- optional + + config TARGET_CMI_MPC5XX + bool "Support cmi_mpc5xx" +diff --git a/arch/powerpc/cpu/mpc5xxx/Kconfig b/arch/powerpc/cpu/mpc5xxx/Kconfig +index 5d49228..eec9d7d 100644 +--- a/arch/powerpc/cpu/mpc5xxx/Kconfig ++++ b/arch/powerpc/cpu/mpc5xxx/Kconfig +@@ -6,7 +6,6 @@ config SYS_CPU + + choice + prompt "Target select" +- optional + + config TARGET_A3M071 + bool "Support a3m071" +diff --git a/arch/powerpc/cpu/mpc8260/Kconfig b/arch/powerpc/cpu/mpc8260/Kconfig +index e93732d..55941c8 100644 +--- a/arch/powerpc/cpu/mpc8260/Kconfig ++++ b/arch/powerpc/cpu/mpc8260/Kconfig +@@ -6,7 +6,6 @@ config SYS_CPU + + choice + prompt "Target select" +- optional + + config TARGET_KM82XX + bool "Support km82xx" +diff --git a/arch/powerpc/cpu/mpc83xx/Kconfig b/arch/powerpc/cpu/mpc83xx/Kconfig +index 3fb901f..88a3bd6 100644 +--- a/arch/powerpc/cpu/mpc83xx/Kconfig ++++ b/arch/powerpc/cpu/mpc83xx/Kconfig +@@ -6,7 +6,6 @@ config SYS_CPU + + choice + prompt "Target select" +- optional + + config TARGET_MPC8308_P1M + bool "Support mpc8308_p1m" +diff --git a/arch/powerpc/cpu/mpc85xx/Kconfig b/arch/powerpc/cpu/mpc85xx/Kconfig +index 3e8d0b1..aff5fdb 100644 +--- a/arch/powerpc/cpu/mpc85xx/Kconfig ++++ b/arch/powerpc/cpu/mpc85xx/Kconfig +@@ -6,7 +6,6 @@ config SYS_CPU + + choice + prompt "Target select" +- optional + + config TARGET_SBC8548 + bool "Support sbc8548" +diff --git a/arch/powerpc/cpu/mpc86xx/Kconfig b/arch/powerpc/cpu/mpc86xx/Kconfig +index fe1859d..14e8b1a 100644 +--- a/arch/powerpc/cpu/mpc86xx/Kconfig ++++ b/arch/powerpc/cpu/mpc86xx/Kconfig +@@ -6,7 +6,6 @@ config SYS_CPU + + choice + prompt "Target select" +- optional + + config TARGET_SBC8641D + bool "Support sbc8641d" +diff --git a/arch/powerpc/cpu/mpc8xx/Kconfig b/arch/powerpc/cpu/mpc8xx/Kconfig +index 79cee35..e8bcbe9 100644 +--- a/arch/powerpc/cpu/mpc8xx/Kconfig ++++ b/arch/powerpc/cpu/mpc8xx/Kconfig +@@ -6,7 +6,6 @@ config SYS_CPU + + choice + prompt "Target select" +- optional + + config TARGET_TQM823L + bool "Support TQM823L" +diff --git a/arch/powerpc/cpu/ppc4xx/Kconfig b/arch/powerpc/cpu/ppc4xx/Kconfig +index 10b86e0..4d5954a 100644 +--- a/arch/powerpc/cpu/ppc4xx/Kconfig ++++ b/arch/powerpc/cpu/ppc4xx/Kconfig +@@ -6,7 +6,6 @@ config SYS_CPU + + choice + prompt "Target select" +- optional + + config TARGET_CSB272 + bool "Support csb272" +diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig +index 6ac22af..ff8f5b5 100644 +--- a/arch/sh/Kconfig ++++ b/arch/sh/Kconfig +@@ -29,7 +29,6 @@ config SH_32BIT + + choice + prompt "Target select" +- optional + + config TARGET_RSK7203 + bool "RSK+ 7203" +diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig +index 04dc08f..2df09b2 100644 +--- a/arch/sparc/Kconfig ++++ b/arch/sparc/Kconfig +@@ -14,7 +14,6 @@ config LEON3 + + choice + prompt "Board select" +- optional + + config TARGET_GRSIM_LEON2 + bool "GRSIM simulating a LEON2 board" +diff --git a/board/amcc/canyonlands/Kconfig b/board/amcc/canyonlands/Kconfig +index a655dbc..ef66ad4 100644 +--- a/board/amcc/canyonlands/Kconfig ++++ b/board/amcc/canyonlands/Kconfig +@@ -11,7 +11,6 @@ config SYS_CONFIG_NAME + + choice BOARD_TYPE + prompt "Select which board to build for" +- optional + + config CANYONLANDS + bool "Glacier" +diff --git a/board/coreboot/Kconfig b/board/coreboot/Kconfig +index ede6065..dc9b70f 100644 +--- a/board/coreboot/Kconfig ++++ b/board/coreboot/Kconfig +@@ -8,7 +8,6 @@ if VENDOR_COREBOOT + + choice + prompt "Mainboard model" +- optional + + config TARGET_COREBOOT + bool "coreboot" +diff --git a/board/dbau1x00/Kconfig b/board/dbau1x00/Kconfig +index b813adb..1286e45 100644 +--- a/board/dbau1x00/Kconfig ++++ b/board/dbau1x00/Kconfig +@@ -13,7 +13,6 @@ menu "dbau1x00 board options" + + choice + prompt "Select au1x00 SoC type" +- optional + + config DBAU1100 + bool "Select AU1100" +diff --git a/board/google/Kconfig b/board/google/Kconfig +index e9559c9..302f68e 100644 +--- a/board/google/Kconfig ++++ b/board/google/Kconfig +@@ -8,7 +8,6 @@ if VENDOR_GOOGLE + + choice + prompt "Mainboard model" +- optional + + config TARGET_CHROMEBOOK_LINK + bool "Chromebook link" +diff --git a/board/intel/Kconfig b/board/intel/Kconfig +index 3d9ecf0..7fe21b9 100644 +--- a/board/intel/Kconfig ++++ b/board/intel/Kconfig +@@ -8,7 +8,6 @@ if VENDOR_INTEL + + choice + prompt "Mainboard model" +- optional + + config TARGET_CROWNBAY + bool "Crown Bay" +diff --git a/board/micronas/vct/Kconfig b/board/micronas/vct/Kconfig +index c518079..288a1ae 100644 +--- a/board/micronas/vct/Kconfig ++++ b/board/micronas/vct/Kconfig +@@ -13,7 +13,6 @@ menu "vct board options" + + choice + prompt "Board variant" +- optional + + config VCT_PLATINUM + bool "Enable VCT_PLATINUM" +diff --git a/board/seco/Kconfig b/board/seco/Kconfig +index af16697..dcb1ac8 100644 +--- a/board/seco/Kconfig ++++ b/board/seco/Kconfig +@@ -2,7 +2,6 @@ if TARGET_SECOMX6 + + choice + prompt "SECO i.MX6 Board variant" +- optional + + config SECOMX6_Q7 + bool "Q7" +@@ -17,7 +16,6 @@ endchoice + + choice + prompt "SECO i.MX6 SoC variant" +- optional + + config SECOMX6Q + bool "i.MX6Q" +diff --git a/board/sunxi/Kconfig b/board/sunxi/Kconfig +index 2a1cd3c..808de26 100644 +--- a/board/sunxi/Kconfig ++++ b/board/sunxi/Kconfig +@@ -18,7 +18,6 @@ config SUNXI_GEN_SUN6I + + choice + prompt "Sunxi SoC Variant" +- optional + + config MACH_SUN4I + bool "sun4i (Allwinner A10)" +-- +2.4.3 + diff --git a/boot/uboot/2016.07/0001-arc-Use-mcpu-XXX-instead-of-obsolete-marcXXX.patch b/boot/uboot/2016.07/0001-arc-Use-mcpu-XXX-instead-of-obsolete-marcXXX.patch new file mode 100644 index 00000000..eded9a31 --- /dev/null +++ b/boot/uboot/2016.07/0001-arc-Use-mcpu-XXX-instead-of-obsolete-marcXXX.patch @@ -0,0 +1,39 @@ +From 7c8d81605302e7d7fdd3e7d8eb69302bddc64a2c Mon Sep 17 00:00:00 2001 +From: Alexey Brodkin +Date: Fri, 16 Sep 2016 12:12:26 +0300 +Subject: [PATCH] arc: Use -mcpu=XXX instead of obsolete -marcXXX + +With newer ARC tools old way of CPU specification gets obsolete, +so we're switching to newer and more common way of setting "-mcpu". + +Signed-off-by: Alexey Brodkin +--- + arch/arc/config.mk | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/arch/arc/config.mk b/arch/arc/config.mk +index 7c974f0..13676bd 100644 +--- a/arch/arc/config.mk ++++ b/arch/arc/config.mk +@@ -31,15 +31,15 @@ CONFIG_MMU = 1 + endif + + ifdef CONFIG_CPU_ARC750D +-PLATFORM_CPPFLAGS += -marc700 ++PLATFORM_CPPFLAGS += -mcpu=arc700 + endif + + ifdef CONFIG_CPU_ARC770D +-PLATFORM_CPPFLAGS += -marc700 -mlock -mswape ++PLATFORM_CPPFLAGS += -mcpu=arc700 -mlock -mswape + endif + + ifdef CONFIG_CPU_ARCEM6 +-PLATFORM_CPPFLAGS += -marcem ++PLATFORM_CPPFLAGS += -mcpu=arcem + endif + + ifdef CONFIG_CPU_ARCHS34 +-- +2.7.4 + diff --git a/boot/uboot/2016.09.01/0001-arc-Use-mcpu-XXX-instead-of-obsolete-marcXXX.patch b/boot/uboot/2016.09.01/0001-arc-Use-mcpu-XXX-instead-of-obsolete-marcXXX.patch new file mode 100644 index 00000000..eded9a31 --- /dev/null +++ b/boot/uboot/2016.09.01/0001-arc-Use-mcpu-XXX-instead-of-obsolete-marcXXX.patch @@ -0,0 +1,39 @@ +From 7c8d81605302e7d7fdd3e7d8eb69302bddc64a2c Mon Sep 17 00:00:00 2001 +From: Alexey Brodkin +Date: Fri, 16 Sep 2016 12:12:26 +0300 +Subject: [PATCH] arc: Use -mcpu=XXX instead of obsolete -marcXXX + +With newer ARC tools old way of CPU specification gets obsolete, +so we're switching to newer and more common way of setting "-mcpu". + +Signed-off-by: Alexey Brodkin +--- + arch/arc/config.mk | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/arch/arc/config.mk b/arch/arc/config.mk +index 7c974f0..13676bd 100644 +--- a/arch/arc/config.mk ++++ b/arch/arc/config.mk +@@ -31,15 +31,15 @@ CONFIG_MMU = 1 + endif + + ifdef CONFIG_CPU_ARC750D +-PLATFORM_CPPFLAGS += -marc700 ++PLATFORM_CPPFLAGS += -mcpu=arc700 + endif + + ifdef CONFIG_CPU_ARC770D +-PLATFORM_CPPFLAGS += -marc700 -mlock -mswape ++PLATFORM_CPPFLAGS += -mcpu=arc700 -mlock -mswape + endif + + ifdef CONFIG_CPU_ARCEM6 +-PLATFORM_CPPFLAGS += -marcem ++PLATFORM_CPPFLAGS += -mcpu=arcem + endif + + ifdef CONFIG_CPU_ARCHS34 +-- +2.7.4 + diff --git a/boot/uboot/Config.in b/boot/uboot/Config.in new file mode 100644 index 00000000..d43c85cc --- /dev/null +++ b/boot/uboot/Config.in @@ -0,0 +1,570 @@ +config BR2_TARGET_UBOOT + bool "U-Boot" + help + Build "Das U-Boot" Boot Monitor + + https://www.denx.de/wiki/U-Boot + +if BR2_TARGET_UBOOT +choice + prompt "Build system" + default BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG if BR2_TARGET_UBOOT_LATEST_VERSION + default BR2_TARGET_UBOOT_BUILD_SYSTEM_LEGACY + +config BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG + bool "Kconfig" + help + Select this option if you use a recent U-Boot version (2015.04 + or newer), so that we use the Kconfig build system. + +config BR2_TARGET_UBOOT_BUILD_SYSTEM_LEGACY + bool "Legacy" + help + Select this option if you use an old U-Boot (older than + 2015.04), so that we use the old build system. + +endchoice + +if BR2_TARGET_UBOOT_BUILD_SYSTEM_LEGACY +config BR2_TARGET_UBOOT_BOARDNAME + string "U-Boot board name" + help + One of U-Boot supported boards to be built. + This will be suffixed with _config to meet U-Boot standard + naming. See boards.cfg in U-Boot source code for the list of + available configurations. +endif + +choice + prompt "U-Boot Version" + help + Select the specific U-Boot version you want to use + +config BR2_TARGET_UBOOT_LATEST_VERSION + bool "2021.01" + +config BR2_TARGET_UBOOT_CUSTOM_VERSION + bool "Custom version" + help + This option allows to use a specific official versions + +config BR2_TARGET_UBOOT_CUSTOM_TARBALL + bool "Custom tarball" + +config BR2_TARGET_UBOOT_CUSTOM_GIT + bool "Custom Git repository" + +config BR2_TARGET_UBOOT_CUSTOM_HG + bool "Custom Mercurial repository" + +config BR2_TARGET_UBOOT_CUSTOM_SVN + bool "Custom Subversion repository" + +endchoice + +config BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE + string "U-Boot version" + depends on BR2_TARGET_UBOOT_CUSTOM_VERSION + +config BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION + string "URL of custom U-Boot tarball" + depends on BR2_TARGET_UBOOT_CUSTOM_TARBALL + +if BR2_TARGET_UBOOT_CUSTOM_GIT || BR2_TARGET_UBOOT_CUSTOM_HG || BR2_TARGET_UBOOT_CUSTOM_SVN + +config BR2_TARGET_UBOOT_CUSTOM_REPO_URL + string "URL of custom repository" + +config BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION + string "Custom repository version" + help + Revision to use in the typical format used by + Git/Mercurial/Subversion E.G. a sha id, a tag, branch, .. + +endif + +config BR2_TARGET_UBOOT_VERSION + string + default "2021.01" if BR2_TARGET_UBOOT_LATEST_VERSION + default BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE \ + if BR2_TARGET_UBOOT_CUSTOM_VERSION + default "custom" if BR2_TARGET_UBOOT_CUSTOM_TARBALL + default BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION \ + if BR2_TARGET_UBOOT_CUSTOM_GIT || BR2_TARGET_UBOOT_CUSTOM_HG || BR2_TARGET_UBOOT_CUSTOM_SVN + +config BR2_TARGET_UBOOT_PATCH + string "Custom U-Boot patches" + default BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR if BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR != "" # legacy + help + A space-separated list of patches to apply to U-Boot. + Each patch can be described as an URL, a local file path, + or a directory. In the case of a directory, all files + matching *.patch in the directory will be applied. + + Most users may leave this empty + +if BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG +choice + prompt "U-Boot configuration" + default BR2_TARGET_UBOOT_USE_DEFCONFIG + +config BR2_TARGET_UBOOT_USE_DEFCONFIG + bool "Using an in-tree board defconfig file" + +config BR2_TARGET_UBOOT_USE_CUSTOM_CONFIG + bool "Using a custom board (def)config file" + +endchoice + +config BR2_TARGET_UBOOT_BOARD_DEFCONFIG + string "Board defconfig" + depends on BR2_TARGET_UBOOT_USE_DEFCONFIG + help + Name of the board for which U-Boot should be built, without + the _defconfig suffix. + +config BR2_TARGET_UBOOT_CUSTOM_CONFIG_FILE + string "Configuration file path" + depends on BR2_TARGET_UBOOT_USE_CUSTOM_CONFIG + help + Path to the U-Boot configuration file. + +config BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES + string "Additional configuration fragment files" + help + A space-separated list of configuration fragment files, + that will be merged to the main U-Boot configuration file. +endif + +config BR2_TARGET_UBOOT_NEEDS_DTC + bool "U-Boot needs dtc" + select BR2_PACKAGE_HOST_DTC + help + Select this option if your U-Boot board configuration + requires the Device Tree compiler to be available. + +config BR2_TARGET_UBOOT_NEEDS_PYTHON + bool + +choice + bool "U-Boot needs host Python" + +config BR2_TARGET_UBOOT_NEEDS_PYTHON_NONE + bool "no" + depends on !BR2_TARGET_UBOOT_NEEDS_PYTHON + help + Select this option if U-Boot does not need any + host python to build. + +config BR2_TARGET_UBOOT_NEEDS_PYTHON2 + bool "python 2.x" + help + Select this option if U-Boot needs a host Python 2.x + interpreter. This is the case for some U-Boot + configurations, prior to U-Boot 2020.01. + +config BR2_TARGET_UBOOT_NEEDS_PYTHON3 + bool "python 3.x" + help + Select this option if U-Boot needs a host Python 3.x + interpreter. This is the case for some U-Boot + configurations, after U-Boot 2020.01. + +endchoice + +config BR2_TARGET_UBOOT_NEEDS_PYLIBFDT + bool "U-Boot needs pylibfdt" + select BR2_TARGET_UBOOT_NEEDS_PYTHON + help + Select this option if your U-Boot board configuration + requires the Python libfdt library to be available. + +config BR2_TARGET_UBOOT_NEEDS_PYELFTOOLS + bool "U-Boot needs pyelftools" + select BR2_TARGET_UBOOT_NEEDS_PYTHON + help + Select this option if your U-Boot board configuration + requires the Python pyelftools library to be available. + This is used by some rockchip SOCs for elf parsing. + For example: rk3399 soc boards. + +config BR2_TARGET_UBOOT_NEEDS_OPENSSL + bool "U-Boot needs OpenSSL" + help + Select this option if your U-Boot board configuration + requires OpenSSL to be available on the host. This is + typically the case when the board configuration has + CONFIG_FIT_SIGNATURE enabled. + +config BR2_TARGET_UBOOT_NEEDS_LZOP + bool "U-Boot needs lzop" + help + Select this option if your U-Boot board configuration + requires lzop to be available on the host. This is typically + the case when the board configuration has CONFIG_SPL_LZO + enabled. + +config BR2_TARGET_UBOOT_NEEDS_ATF_BL31 + bool "U-Boot needs ATF BL31" + depends on BR2_TARGET_ARM_TRUSTED_FIRMWARE + depends on !BR2_TARGET_ARM_TRUSTED_FIRMWARE_UBOOT_AS_BL33 + select BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31 + help + Some specific platforms (such as Allwinner A64/H5) + encapsulate the BL31 part of ATF inside U-Boot. This option + makes sure ATF gets built prior to U-Boot, and that the BL31 + variable pointing to ATF's BL31 binary, is passed during the + Buildroot build. + +choice + prompt "U-Boot ATF BL31 format" + default BR2_TARGET_UBOOT_NEEDS_ATF_BL31_BIN + depends on BR2_TARGET_UBOOT_NEEDS_ATF_BL31 + +config BR2_TARGET_UBOOT_NEEDS_ATF_BL31_BIN + bool "bl31.bin" + +config BR2_TARGET_UBOOT_NEEDS_ATF_BL31_ELF + bool "bl31.elf" + +endchoice + +config BR2_TARGET_UBOOT_NEEDS_OPENSBI + bool "U-Boot needs OpenSBI" + depends on BR2_TARGET_OPENSBI + help + Some RISC-V platforms (such as SiFive HiFive Unleashed) + encapsulate the OpenSBI firmware image inside U-Boot. + This option makes sure OpenSBI gets built prior to U-Boot, + and that the OpenSBI variable pointing to OpenSBI binary, + is passed during the Buildroot build. + +menu "U-Boot binary format" + +config BR2_TARGET_UBOOT_FORMAT_AIS + bool "u-boot.ais" + help + AIS (Application Image Script) is a format defined by TI. + It is required to load code/data on OMAP-L1 processors. + u-boot.ais contains U-Boot with the SPL support. + +config BR2_TARGET_UBOOT_FORMAT_BIN + bool "u-boot.bin" + default y + +config BR2_TARGET_UBOOT_FORMAT_DTB_BIN + bool "u-boot-dtb.bin" + +config BR2_TARGET_UBOOT_FORMAT_NAND_BIN + bool "u-boot-nand.bin" + +config BR2_TARGET_UBOOT_FORMAT_ELF + bool "u-boot.elf" + +config BR2_TARGET_UBOOT_FORMAT_IMG + bool "u-boot.img" + +config BR2_TARGET_UBOOT_FORMAT_DTB_IMG + bool "u-boot-dtb.img" + +config BR2_TARGET_UBOOT_FORMAT_IMX + bool "u-boot.imx" + +config BR2_TARGET_UBOOT_FORMAT_DTB_IMX + bool "u-boot-dtb.imx" + +config BR2_TARGET_UBOOT_FORMAT_ITB + bool "u-boot.itb" + +config BR2_TARGET_UBOOT_FORMAT_KWB + bool "u-boot.kwb (Marvell)" + depends on BR2_arm + +config BR2_TARGET_UBOOT_FORMAT_NAND + bool "u-boot.nand (Freescale i.MX28)" + depends on BR2_arm + help + This is Freescale i.MX28 BootStream format (.sb), with a + header for booting from a NAND flash. + + U-Boot includes an mxsboot tool to generate this format, + starting from 2011.12. + + There are two possibilities when preparing an image writable + to NAND flash: + 1) The NAND was not written at all yet or the BCB (Boot + Control Blocks) is broken. In this case, the NAND image + 'u-boot.nand' needs to written. + 2) The NAND flash was already written with a good BCB. This + applies after 'u-boot.nand' was correctly written. There is no + need to write the BCB again. In this case, the bootloader can + be upgraded by writing 'u-boot.sb'. + + To satisfy both cases, the 'u-boot.nand' image obtained from + mxsboot as well as the U-Boot make target 'u-boot.sb' are + copied to the binaries directory. + + See doc/README.mxs (or doc/README.mx28_common before 2013.07) + +if BR2_TARGET_UBOOT_FORMAT_NAND + +config BR2_TARGET_UBOOT_FORMAT_NAND_PAGE_SIZE + int "NAND page size" + default 2048 + help + The NAND page size of the targets NAND flash in bytes as a + decimal integer value. + + The value provided here is passed to the -w option of mxsboot. + +config BR2_TARGET_UBOOT_FORMAT_NAND_OOB_SIZE + int "NAND OOB size" + default 64 + help + The NAND OOB size of the targets NAND flash in bytes as a + decimal integer value. + + The value provided here is passed to the -o option of mxsboot. + +config BR2_TARGET_UBOOT_FORMAT_NAND_ERASE_SIZE + int "NAND erase size" + default 131072 + help + The NAND eraseblock size of the targets NAND flash in bytes as + a decimal integer value. + + The value provided here is passed to the -e option of mxsboot. + +endif + +config BR2_TARGET_UBOOT_FORMAT_SB + bool "u-boot.sb (Freescale i.MX28)" + depends on BR2_arm + +config BR2_TARGET_UBOOT_FORMAT_SD + bool "u-boot.sd (Freescale i.MX28)" + depends on BR2_arm + help + This is Freescale i.MX28 SB format, with a header for booting + from an SD card. + + U-Boot includes an mxsboot tool to generate this format, + starting from 2011.12. + + See doc/README.mxs (or doc/README.mx28_common before 2013.07) + +config BR2_TARGET_UBOOT_FORMAT_STM32 + bool "u-boot.stm32" + depends on BR2_arm + +config BR2_TARGET_UBOOT_FORMAT_CUSTOM + bool "Custom (specify below)" + help + On some platforms, the standard U-Boot binary is not called + u-boot.bin, but u-boot.bin. If this is your case, + you should select this option and specify the correct name(s) + in BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME. + +config BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME + string "U-Boot binary format: custom names" + depends on BR2_TARGET_UBOOT_FORMAT_CUSTOM + help + In case the U-Boot binary for the target platform is not among + the default names, one or more custom names can be listed + here. + Use space to separate multiple names. + Example: + u-boot_magic.bin + +endmenu + +config BR2_TARGET_UBOOT_OMAP_IFT + bool "produce a .ift signed image (OMAP)" + depends on BR2_TARGET_UBOOT_FORMAT_BIN + depends on BR2_arm || BR2_armeb + select BR2_PACKAGE_HOST_OMAP_U_BOOT_UTILS + help + Use gpsign to produce an image of u-boot.bin signed with + a Configuration Header for booting on OMAP processors. + This allows U-Boot to boot without the need for an + intermediate bootloader (e.g. x-loader) if it is written + on the first sector of the boot medium. + This only works for some media, such as NAND. Check your + chip documentation for details. You might also want to + read the documentation of gpsign, the tool that generates + the .ift image, at: + https://github.com/nmenon/omap-u-boot-utils/blob/master/README + +if BR2_TARGET_UBOOT_OMAP_IFT + +config BR2_TARGET_UBOOT_OMAP_IFT_CONFIG + string "gpsign Configuration Header config file" + help + The Configuration Header (CH) config file defines the + desired content of the CH for the signed image. + It usually contains external RAM settings and + possibly other external devices initialization. + The omap-u-boot-utils software contains example + configuration files for some boards: + https://github.com/nmenon/omap-u-boot-utils/tree/master/configs + +endif + +config BR2_TARGET_UBOOT_SPL + bool "Install U-Boot SPL binary image" + depends on !BR2_TARGET_XLOADER + help + Install the U-Boot SPL binary image to the images + directory. + SPL is a first stage bootloader loaded into internal + memory in charge of enabling and configuring the + external memory (DDR), and load the u-boot program + into DDR. + +config BR2_TARGET_UBOOT_SPL_NAME + string "U-Boot SPL/TPL binary image name(s)" + default "spl/u-boot-spl.bin" + depends on BR2_TARGET_UBOOT_SPL + help + A space-separated list of SPL/TPL binaries, generated during + u-boot build. For most platform SPL name is spl/u-boot-spl.bin + and TPL name is tpl/u-boot-tpl.bin but not always. SPL name is + MLO on OMAP and SPL on i.MX6 for example. + +config BR2_TARGET_UBOOT_ZYNQ_IMAGE + bool "Generate image for Xilinx Zynq" + depends on BR2_arm + depends on BR2_TARGET_UBOOT_SPL + depends on BR2_TARGET_UBOOT_FORMAT_DTB_IMG + help + Generate the BOOT.BIN file from U-Boot's SPL. The image + boots the Xilinx Zynq chip without any FPGA bitstream. + A bitstream can be loaded by the U-Boot. The SPL searchs + for u-boot-dtb.img file so this U-Boot format is required + to be set. + +config BR2_TARGET_UBOOT_ZYNQMP + bool "Boot on the Xilinx ZynqMP SoCs" + depends on BR2_aarch64 + help + Enable options specific to the Xilinx ZynqMP family of SoCs. + +if BR2_TARGET_UBOOT_ZYNQMP + +config BR2_TARGET_UBOOT_ZYNQMP_PMUFW + string "PMU firmware location" + depends on BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG + help + Location of a PMU firmware binary. + + If not empty, instructs the U-Boot build process to generate + a boot.bin (to be loaded by the ZynqMP boot ROM) containing + both the U-Boot SPL and the PMU firmware in the + Xilinx-specific boot format. + + The value can be an absolute or relative path, and will be + used directly from where it is located, or an URI + (e.g. http://...), and it will be downloaded and used from + the download directory. + + If empty, the generated boot.bin will not contain a PMU + firmware. + + This feature requires U-Boot >= 2018.07. + +config BR2_TARGET_UBOOT_ZYNQMP_PM_CFG + string "PMU configuration location" + depends on BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG + help + Location of a PMU configuration file. + + If not empty, Buildroot will convert the PMU configuration + file into a loadable blob and pass it to U-Boot. The blob gets + embedded into the U-Boot SPL and is used to configure the PMU + during board initialization. + + Unlike the PMU firmware, the PMU configuration file is unique + to each board configuration. A PMU configuration file can be + generated by building your Xilinx SDK BSP. It can be found in + the BSP source, for example at + ./psu_cortexa53_0/libsrc/xilpm_v2_4/src/pm_cfg_obj.c + + Leave this option empty if your PMU firmware has a hard-coded + configuration object or you are loading it by any other means. + + This feature requires U-Boot >= v2019.10. + +config BR2_TARGET_UBOOT_ZYNQMP_PSU_INIT_FILE + string "Custom psu_init_gpl file" + depends on BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG + help + On ZynqMP the booloader is responsible for some basic + initializations, such as enabling peripherals and + configuring pinmuxes. The psu_init_gpl.c file (and, + optionally, psu_init_gpl.h) contains the code for such + initializations. + + Although U-Boot contains psu_init_gpl.c files for some + boards, each of them describes only one specific + configuration. Users of a different board, or needing a + different configuration, can generate custom files using the + Xilinx development tools. + + Set this variable to the path to your psu_init_gpl.c file + (e.g. "board/myboard/psu_init_gpl.c"). psu_init_gpl.h, if + needed, should be in the same directory. U-Boot will build + and link the user-provided file instead of the built-in one. + + Leave empty to use the files provided by U-Boot. + + This feature requires commit + 6da4f67ad09cd8b311d77b2b04e557b7ef65b56c from upstream + U-Boot, available from versions after 2018.07. + +endif + +config BR2_TARGET_UBOOT_ALTERA_SOCFPGA_IMAGE_CRC + bool "CRC image for Altera SoC FPGA (mkpimage)" + depends on BR2_arm + depends on BR2_TARGET_UBOOT_SPL || BR2_TARGET_UBOOT_FORMAT_DTB_BIN + help + Pass the U-Boot image through the mkpimage tool to enable + booting on the Altera SoC FPGA based platforms. + + On some platforms, it's the SPL that needs to be passed + through mkpimage. On some other platforms there is no SPL + because the internal SRAM is big enough to store the full + U-Boot. In this case, it's directly the full U-Boot image + that is passed through mkpimage. + + If BR2_TARGET_UBOOT_SPL is enabled then + BR2_TARGET_UBOOT_SPL_NAME is converted by mkpimage using + header version 0. + + Otherwise the full u-boot-dtb.bin is converted using + mkpimage header version 1. + + In either case the resulting file will be given a .crc + extension. + +if BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG + +config BR2_TARGET_UBOOT_CUSTOM_DTS_PATH + string "Device Tree Source file paths" + help + Space-separated list of paths to device tree source files + that will be copied to arch/ARCH/dts/ before starting the + build. + + To use this device tree source file, the U-Boot configuration + file must refer to it. + +endif + +config BR2_TARGET_UBOOT_CUSTOM_MAKEOPTS + string "Custom make options" + help + List of custom make options passed at build time. Can be + used for example to pass a DEVICE_TREE= value. + +endif # BR2_TARGET_UBOOT diff --git a/boot/uboot/uboot.hash b/boot/uboot/uboot.hash new file mode 100644 index 00000000..7cbd7855 --- /dev/null +++ b/boot/uboot/uboot.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 b407e1510a74e863b8b5cb42a24625344f0e0c2fc7582d8c866bd899367d0454 u-boot-2021.01.tar.bz2 +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 Licenses/gpl-2.0.txt diff --git a/boot/uboot/uboot.mk b/boot/uboot/uboot.mk new file mode 100644 index 00000000..a8a8bedc --- /dev/null +++ b/boot/uboot/uboot.mk @@ -0,0 +1,510 @@ +################################################################################ +# +# uboot +# +################################################################################ + +UBOOT_VERSION = $(call qstrip,$(BR2_TARGET_UBOOT_VERSION)) +UBOOT_BOARD_NAME = $(call qstrip,$(BR2_TARGET_UBOOT_BOARDNAME)) + +UBOOT_LICENSE = GPL-2.0+ +ifeq ($(BR2_TARGET_UBOOT_LATEST_VERSION),y) +UBOOT_LICENSE_FILES = Licenses/gpl-2.0.txt +endif +UBOOT_CPE_ID_VENDOR = denx +UBOOT_CPE_ID_PRODUCT = u-boot + +UBOOT_INSTALL_IMAGES = YES + +# u-boot 2020.01+ needs make 4.0+ +UBOOT_DEPENDENCIES = host-pkgconf $(BR2_MAKE_HOST_DEPENDENCY) +UBOOT_MAKE = $(BR2_MAKE) + +ifeq ($(UBOOT_VERSION),custom) +# Handle custom U-Boot tarballs as specified by the configuration +UBOOT_TARBALL = $(call qstrip,$(BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION)) +UBOOT_SITE = $(patsubst %/,%,$(dir $(UBOOT_TARBALL))) +UBOOT_SOURCE = $(notdir $(UBOOT_TARBALL)) +else ifeq ($(BR2_TARGET_UBOOT_CUSTOM_GIT),y) +UBOOT_SITE = $(call qstrip,$(BR2_TARGET_UBOOT_CUSTOM_REPO_URL)) +UBOOT_SITE_METHOD = git +else ifeq ($(BR2_TARGET_UBOOT_CUSTOM_HG),y) +UBOOT_SITE = $(call qstrip,$(BR2_TARGET_UBOOT_CUSTOM_REPO_URL)) +UBOOT_SITE_METHOD = hg +else ifeq ($(BR2_TARGET_UBOOT_CUSTOM_SVN),y) +UBOOT_SITE = $(call qstrip,$(BR2_TARGET_UBOOT_CUSTOM_REPO_URL)) +UBOOT_SITE_METHOD = svn +else +# Handle stable official U-Boot versions +UBOOT_SITE = https://ftp.denx.de/pub/u-boot +UBOOT_SOURCE = u-boot-$(UBOOT_VERSION).tar.bz2 +endif + +ifeq ($(BR2_TARGET_UBOOT)$(BR2_TARGET_UBOOT_LATEST_VERSION),y) +BR_NO_CHECK_HASH_FOR += $(UBOOT_SOURCE) +endif + +ifeq ($(BR2_TARGET_UBOOT_FORMAT_BIN),y) +UBOOT_BINS += u-boot.bin +endif + +ifeq ($(BR2_TARGET_UBOOT_FORMAT_ELF),y) +UBOOT_BINS += u-boot +# To make elf usable for debuging on ARC use special target +ifeq ($(BR2_arc),y) +UBOOT_MAKE_TARGET += mdbtrick +endif +endif + +# Call 'make all' unconditionally +UBOOT_MAKE_TARGET += all + +ifeq ($(BR2_TARGET_UBOOT_FORMAT_KWB),y) +UBOOT_BINS += u-boot.kwb +UBOOT_MAKE_TARGET += u-boot.kwb +endif + +ifeq ($(BR2_TARGET_UBOOT_FORMAT_AIS),y) +UBOOT_BINS += u-boot.ais +UBOOT_MAKE_TARGET += u-boot.ais +endif + +ifeq ($(BR2_TARGET_UBOOT_FORMAT_NAND_BIN),y) +UBOOT_BINS += u-boot-nand.bin +endif + +ifeq ($(BR2_TARGET_UBOOT_FORMAT_DTB_IMG),y) +UBOOT_BINS += u-boot-dtb.img +UBOOT_MAKE_TARGET += u-boot-dtb.img +endif + +ifeq ($(BR2_TARGET_UBOOT_FORMAT_DTB_IMX),y) +UBOOT_BINS += u-boot-dtb.imx +UBOOT_MAKE_TARGET += u-boot-dtb.imx +endif + +ifeq ($(BR2_TARGET_UBOOT_FORMAT_DTB_BIN),y) +UBOOT_BINS += u-boot-dtb.bin +UBOOT_MAKE_TARGET += u-boot-dtb.bin +endif + +ifeq ($(BR2_TARGET_UBOOT_FORMAT_IMG),y) +UBOOT_BINS += u-boot.img +UBOOT_MAKE_TARGET += u-boot.img +endif + +ifeq ($(BR2_TARGET_UBOOT_FORMAT_ITB),y) +UBOOT_BINS += u-boot.itb +UBOOT_MAKE_TARGET += u-boot.itb +endif + +ifeq ($(BR2_TARGET_UBOOT_FORMAT_IMX),y) +UBOOT_BINS += u-boot.imx +UBOOT_MAKE_TARGET += u-boot.imx +endif + +ifeq ($(BR2_TARGET_UBOOT_FORMAT_SB),y) +UBOOT_BINS += u-boot.sb +UBOOT_MAKE_TARGET += u-boot.sb +# mxsimage needs OpenSSL +UBOOT_DEPENDENCIES += host-elftosb host-openssl +endif + +ifeq ($(BR2_TARGET_UBOOT_FORMAT_SD),y) +# BootStream (.sb) is generated by U-Boot, we convert it to SD format +UBOOT_BINS += u-boot.sd +UBOOT_MAKE_TARGET += u-boot.sb +UBOOT_DEPENDENCIES += host-elftosb host-openssl +endif + +ifeq ($(BR2_TARGET_UBOOT_FORMAT_NAND),y) +UBOOT_BINS += u-boot.nand +UBOOT_MAKE_TARGET += u-boot.sb +UBOOT_DEPENDENCIES += host-elftosb host-openssl +endif + +ifeq ($(BR2_TARGET_UBOOT_FORMAT_STM32),y) +UBOOT_BINS += u-boot.stm32 +UBOOT_MAKE_TARGET += u-boot.stm32 +endif + +ifeq ($(BR2_TARGET_UBOOT_FORMAT_CUSTOM),y) +UBOOT_BINS += $(call qstrip,$(BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME)) +endif + +ifeq ($(BR2_TARGET_UBOOT_OMAP_IFT),y) +UBOOT_BINS += u-boot.bin +UBOOT_BIN_IFT = u-boot.bin.ift +endif + +# The kernel calls AArch64 'arm64', but U-Boot calls it just 'arm', so +# we have to special case it. Similar for i386/x86_64 -> x86 +ifeq ($(KERNEL_ARCH),arm64) +UBOOT_ARCH = arm +else ifneq ($(filter $(KERNEL_ARCH),i386 x86_64),) +UBOOT_ARCH = x86 +else +UBOOT_ARCH = $(KERNEL_ARCH) +endif + +UBOOT_MAKE_OPTS += \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + ARCH=$(UBOOT_ARCH) \ + HOSTCC="$(HOSTCC) $(subst -I/,-isystem /,$(subst -I /,-isystem /,$(HOST_CFLAGS)))" \ + HOSTLDFLAGS="$(HOST_LDFLAGS)" \ + $(call qstrip,$(BR2_TARGET_UBOOT_CUSTOM_MAKEOPTS)) + +ifeq ($(BR2_TARGET_UBOOT_NEEDS_ATF_BL31),y) +UBOOT_DEPENDENCIES += arm-trusted-firmware +ifeq ($(BR2_TARGET_UBOOT_NEEDS_ATF_BL31_ELF),y) +UBOOT_MAKE_OPTS += BL31=$(BINARIES_DIR)/bl31.elf +else +UBOOT_MAKE_OPTS += BL31=$(BINARIES_DIR)/bl31.bin +endif +endif + +ifeq ($(BR2_TARGET_UBOOT_NEEDS_OPENSBI),y) +UBOOT_DEPENDENCIES += opensbi +UBOOT_MAKE_OPTS += OPENSBI=$(BINARIES_DIR)/fw_dynamic.bin +endif + +ifeq ($(BR2_TARGET_UBOOT_NEEDS_DTC),y) +UBOOT_DEPENDENCIES += host-dtc +endif + +ifeq ($(BR2_TARGET_UBOOT_NEEDS_PYTHON2),y) +UBOOT_DEPENDENCIES += host-python host-python-setuptools +else ifeq ($(BR2_TARGET_UBOOT_NEEDS_PYTHON3),y) +UBOOT_DEPENDENCIES += host-python3 host-python3-setuptools +endif + +ifeq ($(BR2_TARGET_UBOOT_NEEDS_PYLIBFDT),y) +UBOOT_DEPENDENCIES += host-swig +endif + +ifeq ($(BR2_TARGET_UBOOT_NEEDS_PYELFTOOLS),y) +ifeq ($(BR2_TARGET_UBOOT_NEEDS_PYTHON2),y) +UBOOT_DEPENDENCIES += host-python-pyelftools +else ifeq ($(BR2_TARGET_UBOOT_NEEDS_PYTHON3),y) +UBOOT_DEPENDENCIES += host-python3-pyelftools +endif +endif + +ifeq ($(BR2_TARGET_UBOOT_NEEDS_OPENSSL),y) +UBOOT_DEPENDENCIES += host-openssl +endif + +ifeq ($(BR2_TARGET_UBOOT_NEEDS_LZOP),y) +UBOOT_DEPENDENCIES += host-lzop +endif + +# prior to u-boot 2013.10 the license info was in COPYING. Copy it so +# legal-info finds it +define UBOOT_COPY_OLD_LICENSE_FILE + if [ -f $(@D)/COPYING ]; then \ + $(INSTALL) -m 0644 -D $(@D)/COPYING $(@D)/Licenses/gpl-2.0.txt; \ + fi +endef + +UBOOT_POST_EXTRACT_HOOKS += UBOOT_COPY_OLD_LICENSE_FILE +UBOOT_POST_RSYNC_HOOKS += UBOOT_COPY_OLD_LICENSE_FILE + +ifneq ($(ARCH_XTENSA_OVERLAY_FILE),) +define UBOOT_XTENSA_OVERLAY_EXTRACT + $(call arch-xtensa-overlay-extract,$(@D),u-boot) +endef +UBOOT_POST_EXTRACT_HOOKS += UBOOT_XTENSA_OVERLAY_EXTRACT +UBOOT_EXTRA_DOWNLOADS += $(ARCH_XTENSA_OVERLAY_URL) +endif + +# Analogous code exists in linux/linux.mk. Basically, the generic +# package infrastructure handles downloading and applying remote +# patches. Local patches are handled depending on whether they are +# directories or files. +UBOOT_PATCHES = $(call qstrip,$(BR2_TARGET_UBOOT_PATCH)) +UBOOT_PATCH = $(filter ftp://% http://% https://%,$(UBOOT_PATCHES)) + +define UBOOT_APPLY_LOCAL_PATCHES + for p in $(filter-out ftp://% http://% https://%,$(UBOOT_PATCHES)) ; do \ + if test -d $$p ; then \ + $(APPLY_PATCHES) $(@D) $$p \*.patch || exit 1 ; \ + else \ + $(APPLY_PATCHES) $(@D) `dirname $$p` `basename $$p` || exit 1; \ + fi \ + done +endef +UBOOT_POST_PATCH_HOOKS += UBOOT_APPLY_LOCAL_PATCHES + +# Fixup inclusion of libfdt headers, which can fail in older u-boot versions +# when libfdt-devel is installed system-wide. +# The core change is equivalent to upstream commit +# e0d20dc1521e74b82dbd69be53a048847798a90a (first in v2018.03). However, the fixup +# is complicated by the fact that the underlying u-boot code changed multiple +# times in history: +# - The directory scripts/dtc/libfdt only exists since upstream commit +# c0e032e0090d6541549b19cc47e06ccd1f302893 (first in v2017.11). For earlier +# versions, create a dummy scripts/dtc/libfdt directory with symlinks for the +# fdt-related files. This allows to use the same -I option for both +# cases. +# - The variable 'srctree' used to be called 'SRCTREE' before upstream commit +# 01286329b27b27eaeda045b469d41b1d9fce545a (first in v2014.04). +# - The original location for libfdt, 'lib/libfdt/', used to be simply +# 'libfdt' before upstream commit 0de71d507157c4bd4fddcd3a419140d2b986eed2 +# (first in v2010.06). Make the 'lib' part optional in the substitution to +# handle this. +define UBOOT_FIXUP_LIBFDT_INCLUDE + $(Q)if [ ! -d $(@D)/scripts/dtc/libfdt ]; then \ + mkdir -p $(@D)/scripts/dtc/libfdt; \ + cd $(@D)/scripts/dtc/libfdt; \ + ln -s ../../../include/fdt.h .; \ + ln -s ../../../include/libfdt*.h .; \ + ln -s ../../../lib/libfdt/libfdt_internal.h .; \ + fi + $(Q)$(SED) \ + 's%-I\ *\$$(srctree)/lib/libfdt%-I$$(srctree)/scripts/dtc/libfdt%; \ + s%-I\ *\$$(SRCTREE)\(/lib\)\?/libfdt%-I$$(SRCTREE)/scripts/dtc/libfdt%' \ + $(@D)/tools/Makefile +endef +UBOOT_POST_PATCH_HOOKS += UBOOT_FIXUP_LIBFDT_INCLUDE + +ifeq ($(BR2_TARGET_UBOOT_BUILD_SYSTEM_LEGACY),y) +define UBOOT_CONFIGURE_CMDS + $(TARGET_CONFIGURE_OPTS) \ + $(UBOOT_MAKE) -C $(@D) $(UBOOT_MAKE_OPTS) \ + $(UBOOT_BOARD_NAME)_config +endef +else ifeq ($(BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG),y) +ifeq ($(BR2_TARGET_UBOOT_USE_DEFCONFIG),y) +UBOOT_KCONFIG_DEFCONFIG = $(call qstrip,$(BR2_TARGET_UBOOT_BOARD_DEFCONFIG))_defconfig +else ifeq ($(BR2_TARGET_UBOOT_USE_CUSTOM_CONFIG),y) +UBOOT_KCONFIG_FILE = $(call qstrip,$(BR2_TARGET_UBOOT_CUSTOM_CONFIG_FILE)) +endif # BR2_TARGET_UBOOT_USE_DEFCONFIG + +UBOOT_KCONFIG_FRAGMENT_FILES = $(call qstrip,$(BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES)) +UBOOT_KCONFIG_EDITORS = menuconfig xconfig gconfig nconfig + +# UBOOT_MAKE_OPTS overrides HOSTCC / HOSTLDFLAGS to allow the build to +# find our host-openssl. However, this triggers a bug in the kconfig +# build script that causes it to build with /usr/include/ncurses.h +# (which is typically wchar) but link with +# $(HOST_DIR)/lib/libncurses.so (which is not). We don't actually +# need any host-package for kconfig, so remove the HOSTCC/HOSTLDFLAGS +# override again. In addition, host-ccache is not ready at kconfig +# time, so use HOSTCC_NOCCACHE. +UBOOT_KCONFIG_OPTS = $(UBOOT_MAKE_OPTS) HOSTCC="$(HOSTCC_NOCCACHE)" HOSTLDFLAGS="" +define UBOOT_HELP_CMDS + @echo ' uboot-menuconfig - Run U-Boot menuconfig' + @echo ' uboot-savedefconfig - Run U-Boot savedefconfig' + @echo ' uboot-update-defconfig - Save the U-Boot configuration to the path specified' + @echo ' by BR2_TARGET_UBOOT_CUSTOM_CONFIG_FILE' +endef +endif # BR2_TARGET_UBOOT_BUILD_SYSTEM_LEGACY + +UBOOT_CUSTOM_DTS_PATH = $(call qstrip,$(BR2_TARGET_UBOOT_CUSTOM_DTS_PATH)) + +define UBOOT_BUILD_CMDS + $(if $(UBOOT_CUSTOM_DTS_PATH), + cp -f $(UBOOT_CUSTOM_DTS_PATH) $(@D)/arch/$(UBOOT_ARCH)/dts/ + ) + $(TARGET_CONFIGURE_OPTS) \ + PKG_CONFIG="$(PKG_CONFIG_HOST_BINARY)" \ + PKG_CONFIG_SYSROOT_DIR="/" \ + PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 \ + PKG_CONFIG_ALLOW_SYSTEM_LIBS=1 \ + PKG_CONFIG_LIBDIR="$(HOST_DIR)/lib/pkgconfig:$(HOST_DIR)/share/pkgconfig" \ + $(UBOOT_MAKE) -C $(@D) $(UBOOT_MAKE_OPTS) \ + $(UBOOT_MAKE_TARGET) + $(if $(BR2_TARGET_UBOOT_FORMAT_SD), + $(@D)/tools/mxsboot sd $(@D)/u-boot.sb $(@D)/u-boot.sd) + $(if $(BR2_TARGET_UBOOT_FORMAT_NAND), + $(@D)/tools/mxsboot \ + -w $(BR2_TARGET_UBOOT_FORMAT_NAND_PAGE_SIZE) \ + -o $(BR2_TARGET_UBOOT_FORMAT_NAND_OOB_SIZE) \ + -e $(BR2_TARGET_UBOOT_FORMAT_NAND_ERASE_SIZE) \ + nand $(@D)/u-boot.sb $(@D)/u-boot.nand) +endef + +define UBOOT_BUILD_OMAP_IFT + $(HOST_DIR)/bin/gpsign -f $(@D)/u-boot.bin \ + -c $(call qstrip,$(BR2_TARGET_UBOOT_OMAP_IFT_CONFIG)) +endef + +define UBOOT_INSTALL_IMAGES_CMDS + $(foreach f,$(UBOOT_BINS), \ + cp -dpf $(@D)/$(f) $(BINARIES_DIR)/ + ) + $(if $(BR2_TARGET_UBOOT_FORMAT_NAND), + cp -dpf $(@D)/u-boot.sb $(BINARIES_DIR)) + $(if $(BR2_TARGET_UBOOT_SPL), + $(foreach f,$(call qstrip,$(BR2_TARGET_UBOOT_SPL_NAME)), \ + cp -dpf $(@D)/$(f) $(BINARIES_DIR)/ + ) + ) +endef + +ifeq ($(BR2_TARGET_UBOOT_ZYNQMP),y) + +UBOOT_ZYNQMP_PMUFW = $(call qstrip,$(BR2_TARGET_UBOOT_ZYNQMP_PMUFW)) + +ifneq ($(findstring ://,$(UBOOT_ZYNQMP_PMUFW)),) +UBOOT_EXTRA_DOWNLOADS += $(UBOOT_ZYNQMP_PMUFW) +BR_NO_CHECK_HASH_FOR += $(notdir $(UBOOT_ZYNQMP_PMUFW)) +UBOOT_ZYNQMP_PMUFW_PATH = $(UBOOT_DL_DIR)/$(notdir $(UBOOT_ZYNQMP_PMUFW)) +else ifneq ($(UBOOT_ZYNQMP_PMUFW),) +UBOOT_ZYNQMP_PMUFW_PATH = $(shell readlink -f $(UBOOT_ZYNQMP_PMUFW)) +endif + +define UBOOT_ZYNQMP_KCONFIG_PMUFW + $(call KCONFIG_SET_OPT,CONFIG_PMUFW_INIT_FILE,"$(UBOOT_ZYNQMP_PMUFW_PATH)") +endef + +UBOOT_ZYNQMP_PM_CFG = $(call qstrip,$(BR2_TARGET_UBOOT_ZYNQMP_PM_CFG)) +ifneq ($(UBOOT_ZYNQMP_PM_CFG),) +UBOOT_ZYNQMP_PM_CFG_BIN = $(UBOOT_DIR)/pm_cfg_obj.bin +define UBOOT_ZYNQMP_KCONFIG_PM_CFG + $(call KCONFIG_SET_OPT,CONFIG_ZYNQMP_SPL_PM_CFG_OBJ_FILE,"$(UBOOT_ZYNQMP_PM_CFG_BIN)", \ + $(@D)/.config) +endef + +define UBOOT_ZYNQMP_PM_CFG_CONVERT + $(UBOOT_DIR)/tools/zynqmp_pm_cfg_obj_convert.py \ + "$(UBOOT_ZYNQMP_PM_CFG)" \ + "$(UBOOT_ZYNQMP_PM_CFG_BIN)" +endef +UBOOT_PRE_BUILD_HOOKS += UBOOT_ZYNQMP_PM_CFG_CONVERT +endif + +UBOOT_ZYNQMP_PSU_INIT = $(call qstrip,$(BR2_TARGET_UBOOT_ZYNQMP_PSU_INIT_FILE)) +UBOOT_ZYNQMP_PSU_INIT_PATH = $(shell readlink -f $(UBOOT_ZYNQMP_PSU_INIT)) + +ifneq ($(UBOOT_ZYNQMP_PSU_INIT),) +define UBOOT_ZYNQMP_KCONFIG_PSU_INIT + $(call KCONFIG_SET_OPT,CONFIG_XILINX_PS_INIT_FILE,"$(UBOOT_ZYNQMP_PSU_INIT_PATH)") +endef +endif + +endif # BR2_TARGET_UBOOT_ZYNQMP + +define UBOOT_INSTALL_OMAP_IFT_IMAGE + cp -dpf $(@D)/$(UBOOT_BIN_IFT) $(BINARIES_DIR)/ +endef + +ifeq ($(BR2_TARGET_UBOOT_OMAP_IFT),y) +ifeq ($(BR_BUILDING),y) +ifeq ($(call qstrip,$(BR2_TARGET_UBOOT_OMAP_IFT_CONFIG)),) +$(error No gpsign config file. Check your BR2_TARGET_UBOOT_OMAP_IFT_CONFIG setting) +endif +ifeq ($(wildcard $(call qstrip,$(BR2_TARGET_UBOOT_OMAP_IFT_CONFIG))),) +$(error gpsign config file $(BR2_TARGET_UBOOT_OMAP_IFT_CONFIG) not found. Check your BR2_TARGET_UBOOT_OMAP_IFT_CONFIG setting) +endif +endif +UBOOT_DEPENDENCIES += host-omap-u-boot-utils +UBOOT_POST_BUILD_HOOKS += UBOOT_BUILD_OMAP_IFT +UBOOT_POST_INSTALL_IMAGES_HOOKS += UBOOT_INSTALL_OMAP_IFT_IMAGE +endif + +ifeq ($(BR2_TARGET_UBOOT_ZYNQ_IMAGE),y) +define UBOOT_GENERATE_ZYNQ_IMAGE + $(HOST_DIR)/bin/python2 \ + $(HOST_DIR)/bin/zynq-boot-bin.py \ + -u $(@D)/$(firstword $(call qstrip,$(BR2_TARGET_UBOOT_SPL_NAME))) \ + -o $(BINARIES_DIR)/BOOT.BIN +endef +UBOOT_DEPENDENCIES += host-zynq-boot-bin +UBOOT_POST_INSTALL_IMAGES_HOOKS += UBOOT_GENERATE_ZYNQ_IMAGE +endif + +ifeq ($(BR2_TARGET_UBOOT_ALTERA_SOCFPGA_IMAGE_CRC),y) +ifeq ($(BR2_TARGET_UBOOT_SPL),y) +UBOOT_CRC_ALTERA_SOCFPGA_INPUT_IMAGES = $(call qstrip,$(BR2_TARGET_UBOOT_SPL_NAME)) +UBOOT_CRC_ALTERA_SOCFPGA_HEADER_VERSION = 0 +else +UBOOT_CRC_ALTERA_SOCFPGA_INPUT_IMAGES = u-boot-dtb.bin +UBOOT_CRC_ALTERA_SOCFPGA_HEADER_VERSION = 1 +endif +define UBOOT_CRC_ALTERA_SOCFPGA_IMAGE + $(foreach f,$(UBOOT_CRC_ALTERA_SOCFPGA_INPUT_IMAGES), \ + $(HOST_DIR)/bin/mkpimage \ + -v $(UBOOT_CRC_ALTERA_SOCFPGA_HEADER_VERSION) \ + -o $(BINARIES_DIR)/$(notdir $(call qstrip,$(f))).crc \ + $(@D)/$(call qstrip,$(f)) + ) +endef +UBOOT_DEPENDENCIES += host-mkpimage +UBOOT_POST_INSTALL_IMAGES_HOOKS += UBOOT_CRC_ALTERA_SOCFPGA_IMAGE +endif + +define UBOOT_KCONFIG_FIXUP_CMDS + $(UBOOT_ZYNQMP_KCONFIG_PMUFW) + $(UBOOT_ZYNQMP_KCONFIG_PM_CFG) + $(UBOOT_ZYNQMP_KCONFIG_PSU_INIT) +endef + +ifeq ($(BR2_TARGET_UBOOT)$(BR_BUILDING),yy) + +# +# Check U-Boot board name (for legacy) or the defconfig/custom config +# file options (for kconfig) +# +ifeq ($(BR2_TARGET_UBOOT_BUILD_SYSTEM_LEGACY),y) +ifeq ($(UBOOT_BOARD_NAME),) +$(error No U-Boot board name set. Check your BR2_TARGET_UBOOT_BOARDNAME setting) +endif # UBOOT_BOARD_NAME +else ifeq ($(BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG),y) +ifeq ($(BR2_TARGET_UBOOT_USE_DEFCONFIG),y) +ifeq ($(call qstrip,$(BR2_TARGET_UBOOT_BOARD_DEFCONFIG)),) +$(error No board defconfig name specified, check your BR2_TARGET_UBOOT_BOARD_DEFCONFIG setting) +endif # qstrip BR2_TARGET_UBOOT_BOARD_DEFCONFIG +endif # BR2_TARGET_UBOOT_USE_DEFCONFIG +ifeq ($(BR2_TARGET_UBOOT_USE_CUSTOM_CONFIG),y) +ifeq ($(call qstrip,$(BR2_TARGET_UBOOT_CUSTOM_CONFIG_FILE)),) +$(error No board configuration file specified, check your BR2_TARGET_UBOOT_CUSTOM_CONFIG_FILE setting) +endif # qstrip BR2_TARGET_UBOOT_CUSTOM_CONFIG_FILE +endif # BR2_TARGET_UBOOT_USE_CUSTOM_CONFIG +endif # BR2_TARGET_UBOOT_BUILD_SYSTEM_LEGACY + +# +# Check custom version option +# +ifeq ($(BR2_TARGET_UBOOT_CUSTOM_VERSION),y) +ifeq ($(call qstrip,$(BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE)),) +$(error No custom U-Boot version specified. Check your BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE setting) +endif # qstrip BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE +endif # BR2_TARGET_UBOOT_CUSTOM_VERSION + +# +# Check custom tarball option +# +ifeq ($(BR2_TARGET_UBOOT_CUSTOM_TARBALL),y) +ifeq ($(call qstrip,$(BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION)),) +$(error No custom U-Boot tarball specified. Check your BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION setting) +endif # qstrip BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION +endif # BR2_TARGET_UBOOT_CUSTOM_TARBALL + +# +# Check Git/Mercurial repo options +# +ifeq ($(BR2_TARGET_UBOOT_CUSTOM_GIT)$(BR2_TARGET_UBOOT_CUSTOM_HG),y) +ifeq ($(call qstrip,$(BR2_TARGET_UBOOT_CUSTOM_REPO_URL)),) +$(error No custom U-Boot repository URL specified. Check your BR2_TARGET_UBOOT_CUSTOM_REPO_URL setting) +endif # qstrip BR2_TARGET_UBOOT_CUSTOM_CUSTOM_REPO_URL +ifeq ($(call qstrip,$(BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION)),) +$(error No custom U-Boot repository version specified. Check your BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION setting) +endif # qstrip BR2_TARGET_UBOOT_CUSTOM_CUSTOM_REPO_VERSION +endif # BR2_TARGET_UBOOT_CUSTOM_GIT || BR2_TARGET_UBOOT_CUSTOM_HG + +endif # BR2_TARGET_UBOOT && BR_BUILDING + +ifeq ($(BR2_TARGET_UBOOT_BUILD_SYSTEM_LEGACY),y) +UBOOT_DEPENDENCIES += \ + $(BR2_BISON_HOST_DEPENDENCY) \ + $(BR2_FLEX_HOST_DEPENDENCY) +$(eval $(generic-package)) +else ifeq ($(BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG),y) +UBOOT_MAKE_ENV = $(TARGET_MAKE_ENV) +UBOOT_KCONFIG_DEPENDENCIES = \ + $(BR2_MAKE_HOST_DEPENDENCY) \ + $(BR2_BISON_HOST_DEPENDENCY) \ + $(BR2_FLEX_HOST_DEPENDENCY) +$(eval $(kconfig-package)) +endif # BR2_TARGET_UBOOT_BUILD_SYSTEM_LEGACY diff --git a/boot/vexpress-firmware/Config.in b/boot/vexpress-firmware/Config.in new file mode 100644 index 00000000..265fb4be --- /dev/null +++ b/boot/vexpress-firmware/Config.in @@ -0,0 +1,8 @@ +config BR2_TARGET_VEXPRESS_FIRMWARE + bool "vexpress-firmware" + depends on BR2_aarch64 + help + Versatile Express firmware from ARM, with Linaro mods last + change. + + https://git.linaro.org/arm/vexpress-firmware.git diff --git a/boot/vexpress-firmware/vexpress-firmware.hash b/boot/vexpress-firmware/vexpress-firmware.hash new file mode 100644 index 00000000..ac636e15 --- /dev/null +++ b/boot/vexpress-firmware/vexpress-firmware.hash @@ -0,0 +1,2 @@ +# Locally calculated +sha256 ea92d686e6e211074fb0f62cb5e011f4cfc294c7f6ec9fb27b7d987db7bf51c5 vexpress-firmware-901f81977c3b367a2e0bf3d6444be302822d97a3-br1.tar.gz diff --git a/boot/vexpress-firmware/vexpress-firmware.mk b/boot/vexpress-firmware/vexpress-firmware.mk new file mode 100644 index 00000000..693a9cb8 --- /dev/null +++ b/boot/vexpress-firmware/vexpress-firmware.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# vexpress-firmware +# +################################################################################ + +VEXPRESS_FIRMWARE_VERSION = 901f81977c3b367a2e0bf3d6444be302822d97a3 +VEXPRESS_FIRMWARE_SITE = https://git.linaro.org/arm/vexpress-firmware.git +VEXPRESS_FIRMWARE_SITE_METHOD = git +# The only available license files are in PDF and RTF formats, and we +# support only plain text. +VEXPRESS_FIRMWARE_LICENSE = ARM EULA + +VEXPRESS_FIRMWARE_INSTALL_IMAGES = YES + +define VEXPRESS_FIRMWARE_INSTALL_IMAGES_CMDS + $(INSTALL) -D -m 0644 $(@D)/SOFTWARE/bl30.bin $(BINARIES_DIR)/scp-fw.bin +endef + +$(eval $(generic-package)) diff --git a/configs/aarch64_efi_defconfig b/configs/aarch64_efi_defconfig new file mode 100644 index 00000000..99600575 --- /dev/null +++ b/configs/aarch64_efi_defconfig @@ -0,0 +1,38 @@ +# Architecture +BR2_aarch64=y + +# Toolchain, required for eudev and grub +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y + +# System +BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0" +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y + +## Required tools to create bootable media +BR2_PACKAGE_HOST_GENIMAGE=y + +# Bootloader +BR2_TARGET_GRUB2=y +BR2_TARGET_GRUB2_ARM64_EFI=y + +# Filesystem / image +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="200M" +# BR2_TARGET_ROOTFS_TAR is not set +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/aarch64-efi/post-image.sh support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/aarch64-efi/genimage-efi.cfg" + +# Linux headers same as kernel, a 5.9 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_9=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.9.11" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Host tools for genimage +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/acmesystems_aria_g25_128mb_defconfig b/configs/acmesystems_aria_g25_128mb_defconfig new file mode 100644 index 00000000..cf62b5b7 --- /dev/null +++ b/configs/acmesystems_aria_g25_128mb_defconfig @@ -0,0 +1,38 @@ +# Architecture +BR2_arm=y +BR2_arm926t=y + +# Kernel headers +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y + +# System configuration +BR2_TARGET_GENERIC_ISSUE="Welcome to Aria-G25 Buildroot" +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/acmesystems/aria-g25/genimage.cfg" + +# Kernel configuration +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19" +BR2_LINUX_KERNEL_DEFCONFIG="at91_dt" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91-ariag25" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Root filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# AT91bootstrap bootloader +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_GIT=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_URL="https://github.com/linux4sam/at91bootstrap.git" +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_VERSION="v3.8.13" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="aria-128m" + +# Tools to build sdcard.img +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/acmesystems_aria_g25_256mb_defconfig b/configs/acmesystems_aria_g25_256mb_defconfig new file mode 100644 index 00000000..496ccd68 --- /dev/null +++ b/configs/acmesystems_aria_g25_256mb_defconfig @@ -0,0 +1,38 @@ +# Architecture +BR2_arm=y +BR2_arm926t=y + +# Kernel headers +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y + +# System configuration +BR2_TARGET_GENERIC_ISSUE="Welcome to Aria-G25 Buildroot" +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/acmesystems/aria-g25/genimage.cfg" + +# Kernel configuration +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19" +BR2_LINUX_KERNEL_DEFCONFIG="at91_dt" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91-ariag25" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Root filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# AT91bootstrap bootloader +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_GIT=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_URL="https://github.com/linux4sam/at91bootstrap.git" +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_VERSION="v3.8.13" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="aria-256m" + +# Tools to build sdcard.img +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/acmesystems_arietta_g25_128mb_defconfig b/configs/acmesystems_arietta_g25_128mb_defconfig new file mode 100644 index 00000000..17ef7e75 --- /dev/null +++ b/configs/acmesystems_arietta_g25_128mb_defconfig @@ -0,0 +1,38 @@ +# Architecture +BR2_arm=y +BR2_arm926t=y + +# Kernel headers +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y + +# System configuration +BR2_TARGET_GENERIC_ISSUE="Welcome to Arietta-G25 Buildroot" +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/acmesystems/arietta-g25/genimage.cfg" + +# Kernel configuration +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19" +BR2_LINUX_KERNEL_DEFCONFIG="at91_dt" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91-ariettag25" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Root filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# AT91bootstrap bootloader +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_GIT=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_URL="https://github.com/linux4sam/at91bootstrap.git" +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_VERSION="v3.8.13" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="arietta-128m" + +# Tools to build sdcard.img +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/acmesystems_arietta_g25_256mb_defconfig b/configs/acmesystems_arietta_g25_256mb_defconfig new file mode 100644 index 00000000..aa0236bb --- /dev/null +++ b/configs/acmesystems_arietta_g25_256mb_defconfig @@ -0,0 +1,38 @@ +# Architecture +BR2_arm=y +BR2_arm926t=y + +# Kernel headers +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y + +# System configuration +BR2_TARGET_GENERIC_ISSUE="Welcome to Arietta-G25 Buildroot" +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/acmesystems/arietta-g25/genimage.cfg" + +# Kernel configuration +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19" +BR2_LINUX_KERNEL_DEFCONFIG="at91_dt" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91-ariettag25" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Root filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# AT91bootstrap bootloader +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_GIT=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_URL="https://github.com/linux4sam/at91bootstrap.git" +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_VERSION="v3.8.13" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="arietta-256m" + +# Tools to build sdcard.img +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/amarula_a64_relic_defconfig b/configs/amarula_a64_relic_defconfig new file mode 100644 index 00000000..304a3ef8 --- /dev/null +++ b/configs/amarula_a64_relic_defconfig @@ -0,0 +1,63 @@ +BR2_aarch64=y +BR2_cortex_a53=y +BR2_ARM_FPU_VFPV4=y + +# Linux headers same as kernel, a 4.17 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_17=y + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://github.com/apritzel/arm-trusted-firmware.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="sun50iw1p1" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="aa75c8da415158a94b82a430b2b40000778e851f" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2018.07" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="amarula_a64_relic" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="spl/sunxi-spl.bin" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,amarula,linux-amarula,v1.0a)/linux-amarula_v1.0a.tar.gz" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="allwinner/sun50i-a64-amarula-relic" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_GENERIC_ISSUE="Welcome to Amarula A64-Relic" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_ANDROID_TOOLS=y +BR2_PACKAGE_HOST_ANDROID_TOOLS_FASTBOOT=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/amarula/a64-relic/genimage.cfg" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/amarula/a64-relic/post-build.sh" +BR2_ROOTFS_OVERLAY="board/amarula/a64-relic/rootfs_overlay" + +# wireless firmware +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM43XX=y + +# wireless tools +BR2_PACKAGE_IW=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_NL80211=y +BR2_PACKAGE_WPA_SUPPLICANT_AP_SUPPORT=y +BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y diff --git a/configs/amarula_vyasa_rk3288_defconfig b/configs/amarula_vyasa_rk3288_defconfig new file mode 100644 index 00000000..760ad3f9 --- /dev/null +++ b/configs/amarula_vyasa_rk3288_defconfig @@ -0,0 +1,47 @@ +# Architecture +BR2_arm=y +BR2_cortex_a17=y +BR2_ARM_FPU_NEON_VFPV4=y + +# Linux headers same as kernel, a 5.0 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="vyasa-rk3288" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_NEEDS_OPENSSL=y +BR2_TARGET_UBOOT_FORMAT_DTB_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="spl/u-boot-spl-dtb.bin tpl/u-boot-tpl.bin" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0" +BR2_LINUX_KERNEL_DEFCONFIG="multi_v7" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x02000000" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="rk3288-vyasa" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/amarula/vyasa/linux_gmac.fragment" + +# Filesystem +BR2_TARGET_GENERIC_HOSTNAME="vyasa-rk3288" +BR2_TARGET_GENERIC_ISSUE="Welcome to VYASA RK3288!" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="512M" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/amarula/vyasa/genimage.cfg" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/amarula/vyasa/post-build.sh" +BR2_GLOBAL_PATCH_DIR="board/amarula/vyasa/patches/" diff --git a/configs/andes_ae3xx_defconfig b/configs/andes_ae3xx_defconfig new file mode 100644 index 00000000..52634caa --- /dev/null +++ b/configs/andes_ae3xx_defconfig @@ -0,0 +1,10 @@ +BR2_nds32=y +BR2_GLOBAL_PATCH_DIR="board/andes/patches/" +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_ANDES_NDS32=y +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.17" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/andes/ae3xx/ae3xx.fragment" +BR2_TARGET_ROOTFS_INITRAMFS=y diff --git a/configs/arcturus_ucls1012a_defconfig b/configs/arcturus_ucls1012a_defconfig new file mode 100644 index 00000000..fd33ebf1 --- /dev/null +++ b/configs/arcturus_ucls1012a_defconfig @@ -0,0 +1,36 @@ +# Architecture +BR2_aarch64=y + +# Linux headers same as kernel, a 4.14 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_14=y + +# System settings +BR2_TARGET_GENERIC_HOSTNAME="ucls1012a" +BR2_TARGET_GENERIC_ISSUE="Welcome to uCLS1012A-SOM" +BR2_SYSTEM_DHCP="eth0" +BR2_ROOTFS_OVERLAY="board/arcturus/aarch64-ucls1012a/rootfs_overlay" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/arcturus/aarch64-ucls1012a/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/arcturus/aarch64-ucls1012a/post-image.sh" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,ArcturusNetworks,uCLS1012A-kernel,v.20.31)/linux-v.20.31.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="ucls1012a" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="arcturus/arc-ucls1012a" + +# Filesystem +BR2_TARGET_ROOTFS_CPIO=y +BR2_TARGET_ROOTFS_CPIO_GZIP=y + +# U-boot +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,ArcturusNetworks,uCLS1012A-uboot,v.20.31)/uboot-v.20.31.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="UCLS1012A_QSPI128" + +# Tools +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y diff --git a/configs/arcturus_ucp1020_defconfig b/configs/arcturus_ucp1020_defconfig new file mode 100644 index 00000000..8b90f447 --- /dev/null +++ b/configs/arcturus_ucp1020_defconfig @@ -0,0 +1,30 @@ +# Architecture +BR2_powerpc=y +BR2_powerpc_8548=y + +# Linux headers same as kernel, a 4.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_4=y + +# System settings +BR2_TARGET_GENERIC_HOSTNAME="UCP1020" +BR2_TARGET_GENERIC_ISSUE="Welcome to Arcturus uCP1020 System on Module" +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_SYSTEM_DHCP="eth0" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,ArcturusNetworks,uCP1020-kernel,v20190618)/linux-v20190618.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="ucp1020" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="ucp1020" + +# Filesystem +BR2_TARGET_ROOTFS_JFFS2=y + +# U-boot +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,ArcturusNetworks,uCP1020-uboot,v20190618)/uboot-v20190618.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="UCP1020" diff --git a/configs/arm_foundationv8_defconfig b/configs/arm_foundationv8_defconfig new file mode 100644 index 00000000..363f288b --- /dev/null +++ b/configs/arm_foundationv8_defconfig @@ -0,0 +1,18 @@ +BR2_aarch64=y +# Linux headers same as kernel, a 5.9 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_9=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.9.11" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="arm/foundation-v8-gicv3-psci" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_BOOT_WRAPPER_AARCH64=y +BR2_TARGET_BOOT_WRAPPER_AARCH64_DTS="arm/foundation-v8-gicv3-psci" +BR2_TARGET_BOOT_WRAPPER_AARCH64_BOOTARGS="root=/dev/vda consolelog=9 console=ttyAMA0 rw" +BR2_TARGET_BOOT_WRAPPER_AARCH64_PSCI=y +BR2_TARGET_BOOT_WRAPPER_AARCH64_GICV3=y diff --git a/configs/arm_juno_defconfig b/configs/arm_juno_defconfig new file mode 100644 index 00000000..58329867 --- /dev/null +++ b/configs/arm_juno_defconfig @@ -0,0 +1,23 @@ +BR2_aarch64=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_6=y +BR2_TARGET_GENERIC_HOSTNAME="juno-buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to SNPS Juno by Buildroot" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.6" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/arm/juno/linux-juno-defconfig" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="arm/juno arm/juno-r1 arm/juno-r2" +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://github.com/ARM-software/arm-trusted-firmware.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="v1.4" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="juno" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_FIP=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_UBOOT_AS_BL33=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="vexpress_aemv8a_juno" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2016.03" +BR2_TARGET_VEXPRESS_FIRMWARE=y diff --git a/configs/armadeus_apf27_defconfig b/configs/armadeus_apf27_defconfig new file mode 100644 index 00000000..457a14b0 --- /dev/null +++ b/configs/armadeus_apf27_defconfig @@ -0,0 +1,34 @@ +# Architecture +BR2_arm=y +BR2_arm926t=y + +# Linux headers same as kernel, a 4.12 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_12=y + +# System +BR2_TARGET_GENERIC_HOSTNAME="apf27" +BR2_TARGET_GENERIC_ISSUE="Welcome to Armadeus development platform !" +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" + +# Filesystem +BR2_TARGET_ROOTFS_UBIFS=y +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=2047 +BR2_TARGET_ROOTFS_UBI=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.12.4" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/armadeus/apf27/linux-4.12.config" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0xA0008000" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx27-apf27dev" + +# U-boot +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2018.09" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="apf27" diff --git a/configs/armadeus_apf28_defconfig b/configs/armadeus_apf28_defconfig new file mode 100644 index 00000000..56351ebd --- /dev/null +++ b/configs/armadeus_apf28_defconfig @@ -0,0 +1,28 @@ +# Architecture +BR2_arm=y +BR2_arm926t=y + +# Linux headers same as kernel, a 4.9 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y + +# System +BR2_TARGET_GENERIC_HOSTNAME="apf28" +BR2_TARGET_GENERIC_ISSUE="Welcome to Armadeus development platform !" +BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.9.172" +BR2_LINUX_KERNEL_DEFCONFIG="mxs" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x40008000" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx28-apf28dev" + +# Filesystem +BR2_TARGET_ROOTFS_UBIFS=y +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=4227 +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_SUBSIZE=0 diff --git a/configs/armadeus_apf51_defconfig b/configs/armadeus_apf51_defconfig new file mode 100644 index 00000000..26b6a447 --- /dev/null +++ b/configs/armadeus_apf51_defconfig @@ -0,0 +1,27 @@ +# Architecture +BR2_arm=y +BR2_cortex_a8=y + +# Linux headers same as kernel, a 3.12 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_4=y + +# System +BR2_TARGET_GENERIC_HOSTNAME="apf51" +BR2_TARGET_GENERIC_ISSUE="Welcome to Armadeus development platform !" +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc2" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.4.186" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/armadeus/apf51/linux-4.4.config" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x90008000" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx51-apf51dev" + +# Filesystem +BR2_TARGET_ROOTFS_UBIFS=y +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=135301 +BR2_TARGET_ROOTFS_UBI=y diff --git a/configs/asus_tinker_rk3288_defconfig b/configs/asus_tinker_rk3288_defconfig new file mode 100644 index 00000000..e95a19a7 --- /dev/null +++ b/configs/asus_tinker_rk3288_defconfig @@ -0,0 +1,46 @@ +# Architecture +BR2_arm=y +BR2_cortex_a17=y +BR2_ARM_FPU_NEON_VFPV4=y + +# Linux headers same as kernel, a 5.0 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="tinker-rk3288" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_OPENSSL=y +BR2_TARGET_UBOOT_FORMAT_DTB_IMG=y +BR2_TARGET_UBOOT_FORMAT_DTB_BIN=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="spl/u-boot-spl-dtb.bin" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0" +BR2_LINUX_KERNEL_DEFCONFIG="multi_v7" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x02000000" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="rk3288-tinker" +BR2_LINUX_KERNEL_INSTALL_TARGET=y + +# Filesystem +BR2_TARGET_GENERIC_HOSTNAME="tinker-rk3288" +BR2_TARGET_GENERIC_ISSUE="Welcome to TINKER RK3288!" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="512M" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/asus/tinker/genimage.cfg" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/asus/tinker/post-build.sh" +BR2_GLOBAL_PATCH_DIR="board/asus/tinker/patches/" diff --git a/configs/at91sam9260eknf_defconfig b/configs/at91sam9260eknf_defconfig new file mode 100644 index 00000000..807d0294 --- /dev/null +++ b/configs/at91sam9260eknf_defconfig @@ -0,0 +1,33 @@ +# Architecture +BR2_arm=y +BR2_arm926t=y + +# Linux headers same as kernel, a 4.8 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_8=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.8.6" +BR2_LINUX_KERNEL_DEFCONFIG="at91_dt" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91sam9260ek" + +# Filesystem +BR2_TARGET_ROOTFS_UBIFS=y +BR2_TARGET_ROOTFS_UBI=y + +# Bootloaders +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_GIT=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_URL="https://github.com/linux4sam/at91bootstrap.git" +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_VERSION="v3.8.10" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="at91sam9260eknf_uboot" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2016.09.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="at91sam9260ek_nandflash" + +# Host packages +BR2_PACKAGE_HOST_SAM_BA=y diff --git a/configs/at91sam9g20dfc_defconfig b/configs/at91sam9g20dfc_defconfig new file mode 100644 index 00000000..7511c96f --- /dev/null +++ b/configs/at91sam9g20dfc_defconfig @@ -0,0 +1,39 @@ +# Architecture +BR2_arm=y +BR2_arm926t=y + +# Linux headers same as kernel, a 4.8 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_8=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.8.6" +BR2_LINUX_KERNEL_DEFCONFIG="at91_dt" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91sam9g20ek" + +# Filesystem +BR2_TARGET_ROOTFS_TAR=y +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_PEBSIZE=0x20000 +BR2_TARGET_ROOTFS_UBI_SUBSIZE=512 +BR2_TARGET_ROOTFS_UBIFS=y +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f800 +BR2_TARGET_ROOTFS_UBIFS_MINIOSIZE=0x800 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=2047 + +# Bootloaders +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_GIT=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_URL="https://github.com/linux4sam/at91bootstrap.git" +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_VERSION="v3.8.10" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="at91sam9g20eknf_uboot" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2016.09.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="at91sam9g20ek_nandflash" + +# Host packages +BR2_PACKAGE_HOST_SAM_BA=y diff --git a/configs/at91sam9g45m10ek_defconfig b/configs/at91sam9g45m10ek_defconfig new file mode 100644 index 00000000..c598527f --- /dev/null +++ b/configs/at91sam9g45m10ek_defconfig @@ -0,0 +1,34 @@ +# Architecture +BR2_arm=y +BR2_arm926t=y + +# Linux headers same as kernel, a 4.8 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_8=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.8.6" +BR2_LINUX_KERNEL_DEFCONFIG="at91_dt" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91sam9m10g45ek" + +# Filesystem +BR2_TARGET_ROOTFS_UBIFS=y +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=2047 +BR2_TARGET_ROOTFS_UBI=y + +# Bootloaders +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_GIT=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_URL="https://github.com/linux4sam/at91bootstrap.git" +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_VERSION="v3.8.10" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="at91sam9m10g45eknf_uboot" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2016.09.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="at91sam9m10g45ek_nandflash" + +# Host packages +BR2_PACKAGE_HOST_SAM_BA=y diff --git a/configs/at91sam9rlek_defconfig b/configs/at91sam9rlek_defconfig new file mode 100644 index 00000000..ba3a94c0 --- /dev/null +++ b/configs/at91sam9rlek_defconfig @@ -0,0 +1,34 @@ +# Architecture +BR2_arm=y +BR2_arm926t=y + +# Linux headers same as kernel, a 4.8 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_8=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.8.6" +BR2_LINUX_KERNEL_DEFCONFIG="at91_dt" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91sam9rlek" + +# Filesystem +BR2_TARGET_ROOTFS_UBIFS=y +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=2047 +BR2_TARGET_ROOTFS_UBI=y + +# Bootloaders +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_GIT=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_URL="https://github.com/linux4sam/at91bootstrap.git" +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_VERSION="v3.8.10" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="at91sam9rleknf_uboot" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2016.09.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="at91sam9rlek_nandflash" + +# Host packages +BR2_PACKAGE_HOST_SAM_BA=y diff --git a/configs/at91sam9x5ek_defconfig b/configs/at91sam9x5ek_defconfig new file mode 100644 index 00000000..d544e277 --- /dev/null +++ b/configs/at91sam9x5ek_defconfig @@ -0,0 +1,28 @@ +BR2_arm=y +BR2_arm926t=y +# Linux headers same as kernel, a 4.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,linux-at91,linux4sam_6.1)/linux-linux4sam_6.1.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="at91_dt" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91sam9g15ek at91sam9g25ek at91sam9g35ek at91sam9x25ek at91sam9x35ek" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_TARGET_ROOTFS_UBIFS=y +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_GIT=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_URL="https://github.com/linux4sam/at91bootstrap.git" +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_VERSION="v3.8.13" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="at91sam9x5eknf_uboot" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/linux4sam/u-boot-at91.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="linux4sam_6.1" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="at91sam9x5ek_nandflash" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_PACKAGE_HOST_SAM_BA=y diff --git a/configs/at91sam9x5ek_dev_defconfig b/configs/at91sam9x5ek_dev_defconfig new file mode 100644 index 00000000..5f777fbc --- /dev/null +++ b/configs/at91sam9x5ek_dev_defconfig @@ -0,0 +1,98 @@ +# Architecture +BR2_arm=y +BR2_arm926t=y + +# Toolchain +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y +# Needed for some packages +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y +# Needed for gdb +BR2_PTHREAD_DEBUG=y +# Needed for some packages +BR2_TOOLCHAIN_BUILDROOT_CXX=y + +# System Configuration +# Needed for usb-utils +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,linux-at91,linux4sam_6.1)/linux-linux4sam_6.1.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="at91_dt" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91sam9g15ek at91sam9g25ek at91sam9g35ek at91sam9x25ek at91sam9x35ek" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Packages +BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_ALSACONF=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_FFMPEG=y +BR2_PACKAGE_FFMPEG_GPL=y +BR2_PACKAGE_FFMPEG_SWSCALE=y +BR2_PACKAGE_MPG123=y +BR2_PACKAGE_BZIP2=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_UNZIP=y +BR2_PACKAGE_XZ=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_GDB=y +BR2_PACKAGE_LMBENCH=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FATLABEL=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_MMC_UTILS=y +BR2_PACKAGE_MTD=y +BR2_PACKAGE_WILC1000_FIRMWARE=y +BR2_PACKAGE_EVTEST=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_SETSERIAL=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_USBUTILS=y +BR2_PACKAGE_LIBDRM=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_DTC=y +BR2_PACKAGE_DTC_PROGRAMS=y +BR2_PACKAGE_BLUEZ5_UTILS=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES=y +BR2_PACKAGE_IW=y +BR2_PACKAGE_LRZSZ=y +BR2_PACKAGE_MII_DIAG=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_WGET=y +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_BASH=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_VIM=y + +# Filesystem +BR2_TARGET_ROOTFS_UBIFS=y +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 + +# Bootloaders +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_GIT=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_URL="https://github.com/linux4sam/at91bootstrap.git" +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_VERSION="v3.8.13" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="at91sam9x5eknf_uboot" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/linux4sam/u-boot-at91.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="linux4sam_6.1" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="at91sam9x5ek_nandflash" +BR2_TARGET_UBOOT_NEEDS_DTC=y + +# Host packages +BR2_PACKAGE_HOST_SAM_BA=y diff --git a/configs/at91sam9x5ek_mmc_defconfig b/configs/at91sam9x5ek_mmc_defconfig new file mode 100644 index 00000000..63a537bd --- /dev/null +++ b/configs/at91sam9x5ek_mmc_defconfig @@ -0,0 +1,47 @@ +# Architecture +BR2_arm=y +BR2_arm926t=y + +# Toolchain +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y + +# Creation of the SD card image +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/atmel/at91sam9x5ek_mmc/genimage.cfg" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,linux-at91,linux4sam_6.1)/linux-linux4sam_6.1.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="at91_dt" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91sam9g15ek at91sam9g25ek at91sam9g35ek at91sam9x25ek at91sam9x35ek" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# Bootloaders +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_GIT=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_URL="https://github.com/linux4sam/at91bootstrap.git" +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_VERSION="v3.8.13" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="at91sam9x5eksd_uboot" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/linux4sam/u-boot-at91.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="linux4sam_6.1" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="at91sam9x5ek_mmc" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SOURCE="board/atmel/at91sam9x5ek_mmc/uboot-env.txt" +BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SIZE="0x4000" + +# Host packages +# Needed to generate the SD card image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/at91sam9x5ek_mmc_dev_defconfig b/configs/at91sam9x5ek_mmc_dev_defconfig new file mode 100644 index 00000000..698cb923 --- /dev/null +++ b/configs/at91sam9x5ek_mmc_dev_defconfig @@ -0,0 +1,107 @@ +# Architecture +BR2_arm=y +BR2_arm926t=y + +# Toolchain +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y +# Needed for some packages +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y +# Needed for gdb +BR2_PTHREAD_DEBUG=y +# Needed for some packages +BR2_TOOLCHAIN_BUILDROOT_CXX=y + +# System Configuration +# Needed for usb-utils +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y +# Creation of the SD card image +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/atmel/at91sam9x5ek_mmc/genimage.cfg" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,linux-at91,linux4sam_6.1)/linux-linux4sam_6.1.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="at91_dt" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91sam9g15ek at91sam9g25ek at91sam9g35ek at91sam9x25ek at91sam9x35ek" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Packages +BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_ALSACONF=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_FFMPEG=y +BR2_PACKAGE_FFMPEG_GPL=y +BR2_PACKAGE_FFMPEG_SWSCALE=y +BR2_PACKAGE_MPG123=y +BR2_PACKAGE_BZIP2=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_UNZIP=y +BR2_PACKAGE_XZ=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_GDB=y +BR2_PACKAGE_LMBENCH=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FATLABEL=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_MMC_UTILS=y +BR2_PACKAGE_MTD=y +BR2_PACKAGE_WILC1000_FIRMWARE=y +BR2_PACKAGE_EVTEST=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_SETSERIAL=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_USBUTILS=y +BR2_PACKAGE_LIBDRM=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_DTC=y +BR2_PACKAGE_DTC_PROGRAMS=y +BR2_PACKAGE_BLUEZ5_UTILS=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES=y +BR2_PACKAGE_IW=y +BR2_PACKAGE_LRZSZ=y +BR2_PACKAGE_MII_DIAG=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_WGET=y +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_BASH=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_VIM=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" + +# Bootloaders +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_GIT=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_URL="https://github.com/linux4sam/at91bootstrap.git" +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_REPO_VERSION="v3.8.13" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="at91sam9x5eksd_uboot" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/linux4sam/u-boot-at91.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="linux4sam_6.1" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="at91sam9x5ek_mmc" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SOURCE="board/atmel/at91sam9x5ek_mmc/uboot-env.txt" +BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SIZE="0x4000" + +# Host packages +# Needed to generate the SD card image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/atmel_sama5d27_som1_ek_mmc_dev_defconfig b/configs/atmel_sama5d27_som1_ek_mmc_dev_defconfig new file mode 100644 index 00000000..b608bac0 --- /dev/null +++ b/configs/atmel_sama5d27_som1_ek_mmc_dev_defconfig @@ -0,0 +1,84 @@ +BR2_arm=y +BR2_cortex_a5=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_INSTRUCTIONS_THUMB2=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y +BR2_PTHREAD_DEBUG=y +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/atmel/sama5d27_som1_ek_mmc/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,linux-at91,linux4sam-2020.04)/linux-at91-linux4sam-2020.04.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="sama5" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91-sama5d27_som1_ek" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_ALSACONF=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_FFMPEG=y +BR2_PACKAGE_FFMPEG_GPL=y +BR2_PACKAGE_FFMPEG_SWSCALE=y +BR2_PACKAGE_MPG123=y +BR2_PACKAGE_BZIP2=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_UNZIP=y +BR2_PACKAGE_XZ=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_GDB=y +BR2_PACKAGE_LMBENCH=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FATLABEL=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_MMC_UTILS=y +BR2_PACKAGE_MTD=y +BR2_PACKAGE_WILC1000_FIRMWARE=y +BR2_PACKAGE_EVTEST=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_RNG_TOOLS=y +BR2_PACKAGE_SETSERIAL=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_USBUTILS=y +BR2_PACKAGE_LIBDRM=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_DTC=y +BR2_PACKAGE_DTC_PROGRAMS=y +BR2_PACKAGE_BLUEZ5_UTILS=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES=y +BR2_PACKAGE_IW=y +BR2_PACKAGE_LRZSZ=y +BR2_PACKAGE_MII_DIAG=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_WGET=y +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_BASH=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_VIM=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,at91bootstrap,v3.9.2)/at91bootstrap3-v3.9.2.tar.gz" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="sama5d27_som1_eksd_uboot" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,u-boot-at91,linux4sam-2020.04)/u-boot-at91-linux4sam-2020.04.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="sama5d27_som1_ek_mmc" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/atmel_sama5d2_xplained_mmc_defconfig b/configs/atmel_sama5d2_xplained_mmc_defconfig new file mode 100644 index 00000000..2c73cc4c --- /dev/null +++ b/configs/atmel_sama5d2_xplained_mmc_defconfig @@ -0,0 +1,30 @@ +BR2_arm=y +BR2_cortex_a5=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_INSTRUCTIONS_THUMB2=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/atmel/sama5d2_xplained_mmc/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,linux-at91,linux4sam_6.2)/linux-linux4sam_6.2.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="sama5" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91-sama5d2_xplained" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,at91bootstrap,v3.9.0)/at91bootstrap3-v3.9.0.tar.gz" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="sama5d2_xplainedsd_uboot" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,u-boot-at91,linux4sam_6.2)/u-boot-at91-linux4sam_6.2.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="sama5d2_xplained_mmc" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/atmel_sama5d2_xplained_mmc_dev_defconfig b/configs/atmel_sama5d2_xplained_mmc_dev_defconfig new file mode 100644 index 00000000..6f641280 --- /dev/null +++ b/configs/atmel_sama5d2_xplained_mmc_dev_defconfig @@ -0,0 +1,104 @@ +# Architecture +BR2_arm=y +BR2_cortex_a5=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_INSTRUCTIONS_THUMB2=y + +# Toolchain +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y +# Needed for some packages +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y +# Needed for gdb +BR2_PTHREAD_DEBUG=y +# Needed for some packages +BR2_TOOLCHAIN_BUILDROOT_CXX=y + +# System Configuration +# Needed for usb-utils +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y +# Creation of the SD card image +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/atmel/sama5d2_xplained_mmc/genimage.cfg" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,linux-at91,linux4sam_6.2)/linux-linux4sam_6.2.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="sama5" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91-sama5d2_xplained" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Packages +BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_ALSACONF=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_FFMPEG=y +BR2_PACKAGE_FFMPEG_GPL=y +BR2_PACKAGE_FFMPEG_SWSCALE=y +BR2_PACKAGE_MPG123=y +BR2_PACKAGE_BZIP2=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_UNZIP=y +BR2_PACKAGE_XZ=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_GDB=y +BR2_PACKAGE_LMBENCH=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FATLABEL=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_MMC_UTILS=y +BR2_PACKAGE_MTD=y +BR2_PACKAGE_WILC1000_FIRMWARE=y +BR2_PACKAGE_EVTEST=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_SETSERIAL=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_USBUTILS=y +BR2_PACKAGE_LIBDRM=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_DTC=y +BR2_PACKAGE_DTC_PROGRAMS=y +BR2_PACKAGE_BLUEZ5_UTILS=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES=y +BR2_PACKAGE_IW=y +BR2_PACKAGE_LRZSZ=y +BR2_PACKAGE_MII_DIAG=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_WGET=y +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_BASH=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_VIM=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" + +# Bootloaders +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,at91bootstrap,v3.9.0)/at91bootstrap3-v3.9.0.tar.gz" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="sama5d2_xplainedsd_uboot" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,u-boot-at91,linux4sam_6.2)/u-boot-at91-linux4sam_6.2.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="sama5d2_xplained_mmc" +BR2_TARGET_UBOOT_NEEDS_DTC=y + +# Host packages +# Needed to generate the SD card image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/atmel_sama5d3_xplained_defconfig b/configs/atmel_sama5d3_xplained_defconfig new file mode 100644 index 00000000..65304a2e --- /dev/null +++ b/configs/atmel_sama5d3_xplained_defconfig @@ -0,0 +1,27 @@ +BR2_arm=y +BR2_cortex_a5=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_INSTRUCTIONS_THUMB2=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,linux-at91,linux4sam_6.2)/linux-linux4sam_6.2.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="sama5" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91-sama5d3_xplained" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_TARGET_ROOTFS_UBIFS=y +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,at91bootstrap,v3.9.0)/at91bootstrap3-v3.9.0.tar.gz" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="sama5d3_xplainednf_uboot" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,u-boot-at91,linux4sam_6.2)/u-boot-at91-linux4sam_6.2.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="sama5d3_xplained_nandflash" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_PACKAGE_HOST_SAM_BA=y diff --git a/configs/atmel_sama5d3_xplained_dev_defconfig b/configs/atmel_sama5d3_xplained_dev_defconfig new file mode 100644 index 00000000..28efe4cc --- /dev/null +++ b/configs/atmel_sama5d3_xplained_dev_defconfig @@ -0,0 +1,98 @@ +# Architecture +BR2_arm=y +BR2_cortex_a5=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_INSTRUCTIONS_THUMB2=y + +# Toolchain +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y +# Needed for some packages +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y +# Needed for gdb +BR2_PTHREAD_DEBUG=y +# Needed for some packages +BR2_TOOLCHAIN_BUILDROOT_CXX=y + +# System Configuration +# Needed for usb-utils +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,linux-at91,linux4sam_6.2)/linux-linux4sam_6.2.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="sama5" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91-sama5d3_xplained" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Packages +BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_ALSACONF=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_FFMPEG=y +BR2_PACKAGE_FFMPEG_GPL=y +BR2_PACKAGE_FFMPEG_SWSCALE=y +BR2_PACKAGE_MPG123=y +BR2_PACKAGE_BZIP2=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_UNZIP=y +BR2_PACKAGE_XZ=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_GDB=y +BR2_PACKAGE_LMBENCH=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FATLABEL=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_MMC_UTILS=y +BR2_PACKAGE_MTD=y +BR2_PACKAGE_WILC1000_FIRMWARE=y +BR2_PACKAGE_EVTEST=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_SETSERIAL=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_USBUTILS=y +BR2_PACKAGE_LIBDRM=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_DTC=y +BR2_PACKAGE_DTC_PROGRAMS=y +BR2_PACKAGE_BLUEZ5_UTILS=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES=y +BR2_PACKAGE_IW=y +BR2_PACKAGE_LRZSZ=y +BR2_PACKAGE_MII_DIAG=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_WGET=y +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_BASH=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_VIM=y + +# Filesystem +BR2_TARGET_ROOTFS_UBIFS=y +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 + +# Bootloaders +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,at91bootstrap,v3.9.0)/at91bootstrap3-v3.9.0.tar.gz" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="sama5d3_xplainednf_uboot" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,u-boot-at91,linux4sam_6.2)/u-boot-at91-linux4sam_6.2.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="sama5d3_xplained_nandflash" +BR2_TARGET_UBOOT_NEEDS_DTC=y + +# Host packages +BR2_PACKAGE_HOST_SAM_BA=y diff --git a/configs/atmel_sama5d3_xplained_mmc_defconfig b/configs/atmel_sama5d3_xplained_mmc_defconfig new file mode 100644 index 00000000..3fd5f1dd --- /dev/null +++ b/configs/atmel_sama5d3_xplained_mmc_defconfig @@ -0,0 +1,29 @@ +BR2_arm=y +BR2_cortex_a5=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_INSTRUCTIONS_THUMB2=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/atmel/sama5d3_xplained_mmc/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,linux-at91,linux4sam_6.2)/linux-linux4sam_6.2.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="sama5" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91-sama5d3_xplained" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,at91bootstrap,v3.9.0)/at91bootstrap3-v3.9.0.tar.gz" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="sama5d3_xplainedsd_uboot" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,u-boot-at91,linux4sam_6.2)/u-boot-at91-linux4sam_6.2.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="sama5d3_xplained_mmc" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/atmel_sama5d3_xplained_mmc_dev_defconfig b/configs/atmel_sama5d3_xplained_mmc_dev_defconfig new file mode 100644 index 00000000..1f1881f8 --- /dev/null +++ b/configs/atmel_sama5d3_xplained_mmc_dev_defconfig @@ -0,0 +1,103 @@ +# Architecture +BR2_arm=y +BR2_cortex_a5=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_INSTRUCTIONS_THUMB2=y + +# Toolchain +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y +# Needed for some packages +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y +# Needed for gdb +BR2_PTHREAD_DEBUG=y +# Needed for some packages +BR2_TOOLCHAIN_BUILDROOT_CXX=y + +# System Configuration +# Needed for usb-utils +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y +# Creation of the SD card image +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/atmel/sama5d3_xplained_mmc/genimage.cfg" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,linux-at91,linux4sam_6.2)/linux-linux4sam_6.2.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="sama5" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91-sama5d3_xplained" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Packages +BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_ALSACONF=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_FFMPEG=y +BR2_PACKAGE_FFMPEG_GPL=y +BR2_PACKAGE_FFMPEG_SWSCALE=y +BR2_PACKAGE_MPG123=y +BR2_PACKAGE_BZIP2=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_UNZIP=y +BR2_PACKAGE_XZ=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_GDB=y +BR2_PACKAGE_LMBENCH=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FATLABEL=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_MMC_UTILS=y +BR2_PACKAGE_MTD=y +BR2_PACKAGE_WILC1000_FIRMWARE=y +BR2_PACKAGE_EVTEST=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_SETSERIAL=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_USBUTILS=y +BR2_PACKAGE_LIBDRM=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_DTC=y +BR2_PACKAGE_DTC_PROGRAMS=y +BR2_PACKAGE_BLUEZ5_UTILS=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES=y +BR2_PACKAGE_IW=y +BR2_PACKAGE_LRZSZ=y +BR2_PACKAGE_MII_DIAG=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_WGET=y +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_BASH=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_VIM=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" + +# Bootloaders +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,at91bootstrap,v3.9.0)/at91bootstrap3-v3.9.0.tar.gz" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="sama5d3_xplainedsd_uboot" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,u-boot-at91,linux4sam_6.2)/u-boot-at91-linux4sam_6.2.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="sama5d3_xplained_mmc" +BR2_TARGET_UBOOT_NEEDS_DTC=y + +# Host packages +# Needed to generate the SD card image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/atmel_sama5d3xek_defconfig b/configs/atmel_sama5d3xek_defconfig new file mode 100644 index 00000000..63417eae --- /dev/null +++ b/configs/atmel_sama5d3xek_defconfig @@ -0,0 +1,38 @@ +# Architecture +BR2_arm=y +BR2_cortex_a5=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_INSTRUCTIONS_THUMB2=y + +# Toolchain +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,linux-at91,linux4sam_5.8)/linux-linux4sam_5.8.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="sama5" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sama5d31ek sama5d33ek sama5d34ek sama5d35ek sama5d36ek" + +# Filesystem +BR2_TARGET_ROOTFS_UBIFS=y +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 + +# Bootloaders +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,at91bootstrap,v3.8.10)/at91bootstrap3-v3.8.10.tar.gz" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="sama5d3xeknf_uboot" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,u-boot-at91,linux4sam_5.8)/u-boot-at91-linux4sam_5.8.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="sama5d3xek_nandflash" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_SPL=y + +# Host packages +BR2_PACKAGE_HOST_SAM_BA=y diff --git a/configs/atmel_sama5d4_xplained_defconfig b/configs/atmel_sama5d4_xplained_defconfig new file mode 100644 index 00000000..319f3195 --- /dev/null +++ b/configs/atmel_sama5d4_xplained_defconfig @@ -0,0 +1,31 @@ +BR2_arm=y +BR2_cortex_a5=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_INSTRUCTIONS_THUMB2=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,linux-at91,linux4sam_6.2)/linux-linux4sam_6.2.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="sama5" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91-sama5d4_xplained" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_TARGET_ROOTFS_UBIFS=y +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x3e000 +BR2_TARGET_ROOTFS_UBIFS_MINIOSIZE=0x1000 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=2082 +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_PEBSIZE=0x40000 +BR2_TARGET_ROOTFS_UBI_SUBSIZE=0 +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,at91bootstrap,v3.9.0)/at91bootstrap3-v3.9.0.tar.gz" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="sama5d4_xplainednf_uboot_secure" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,u-boot-at91,linux4sam_6.2)/u-boot-at91-linux4sam_6.2.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="sama5d4_xplained_nandflash" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_PACKAGE_HOST_SAM_BA=y diff --git a/configs/atmel_sama5d4_xplained_dev_defconfig b/configs/atmel_sama5d4_xplained_dev_defconfig new file mode 100644 index 00000000..71568f74 --- /dev/null +++ b/configs/atmel_sama5d4_xplained_dev_defconfig @@ -0,0 +1,102 @@ +# Architecture +BR2_arm=y +BR2_cortex_a5=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_INSTRUCTIONS_THUMB2=y + +# Toolchain +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y +# Needed for some packages +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y +# Needed for gdb +BR2_PTHREAD_DEBUG=y +# Needed for some packages +BR2_TOOLCHAIN_BUILDROOT_CXX=y + +# System Configuration +# Needed for usb-utils +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,linux-at91,linux4sam_6.2)/linux-linux4sam_6.2.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="sama5" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91-sama5d4_xplained" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Packages +BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_ALSACONF=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_FFMPEG=y +BR2_PACKAGE_FFMPEG_GPL=y +BR2_PACKAGE_FFMPEG_SWSCALE=y +BR2_PACKAGE_MPG123=y +BR2_PACKAGE_BZIP2=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_UNZIP=y +BR2_PACKAGE_XZ=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_GDB=y +BR2_PACKAGE_LMBENCH=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FATLABEL=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_MMC_UTILS=y +BR2_PACKAGE_MTD=y +BR2_PACKAGE_WILC1000_FIRMWARE=y +BR2_PACKAGE_EVTEST=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_SETSERIAL=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_USBUTILS=y +BR2_PACKAGE_LIBDRM=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_DTC=y +BR2_PACKAGE_DTC_PROGRAMS=y +BR2_PACKAGE_BLUEZ5_UTILS=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES=y +BR2_PACKAGE_IW=y +BR2_PACKAGE_LRZSZ=y +BR2_PACKAGE_MII_DIAG=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_WGET=y +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_BASH=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_VIM=y + +# Filesystem +BR2_TARGET_ROOTFS_UBIFS=y +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x3e000 +BR2_TARGET_ROOTFS_UBIFS_MINIOSIZE=0x1000 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=2082 +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_PEBSIZE=0x40000 +BR2_TARGET_ROOTFS_UBI_SUBSIZE=0 + +# Bootloaders +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,at91bootstrap,v3.9.0)/at91bootstrap3-v3.9.0.tar.gz" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="sama5d4_xplainednf_uboot_secure" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,u-boot-at91,linux4sam_6.2)/u-boot-at91-linux4sam_6.2.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="sama5d4_xplained_nandflash" +BR2_TARGET_UBOOT_NEEDS_DTC=y + +# Host packages +BR2_PACKAGE_HOST_SAM_BA=y diff --git a/configs/atmel_sama5d4_xplained_mmc_defconfig b/configs/atmel_sama5d4_xplained_mmc_defconfig new file mode 100644 index 00000000..ed294c35 --- /dev/null +++ b/configs/atmel_sama5d4_xplained_mmc_defconfig @@ -0,0 +1,30 @@ +BR2_arm=y +BR2_cortex_a5=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_INSTRUCTIONS_THUMB2=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/atmel/sama5d4_xplained_mmc/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,linux-at91,linux4sam_6.2)/linux-linux4sam_6.2.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="sama5" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91-sama5d4_xplained" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,at91bootstrap,v3.9.0)/at91bootstrap3-v3.9.0.tar.gz" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="sama5d4_xplainedsd_uboot_secure" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,u-boot-at91,linux4sam_6.2)/u-boot-at91-linux4sam_6.2.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="sama5d4_xplained_mmc" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/atmel_sama5d4_xplained_mmc_dev_defconfig b/configs/atmel_sama5d4_xplained_mmc_dev_defconfig new file mode 100644 index 00000000..93a5bd92 --- /dev/null +++ b/configs/atmel_sama5d4_xplained_mmc_dev_defconfig @@ -0,0 +1,104 @@ +# Architecture +BR2_arm=y +BR2_cortex_a5=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_INSTRUCTIONS_THUMB2=y + +# Toolchain +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y +# Needed for some packages +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y +# Needed for gdb +BR2_PTHREAD_DEBUG=y +# Needed for some packages +BR2_TOOLCHAIN_BUILDROOT_CXX=y + +# System Configuration +# Needed for usb-utils +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y +# Creation of the SD card image +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/atmel/sama5d4_xplained_mmc/genimage.cfg" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,linux-at91,linux4sam_6.2)/linux-linux4sam_6.2.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="sama5" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91-sama5d4_xplained" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Packages +BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_ALSACONF=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_FFMPEG=y +BR2_PACKAGE_FFMPEG_GPL=y +BR2_PACKAGE_FFMPEG_SWSCALE=y +BR2_PACKAGE_MPG123=y +BR2_PACKAGE_BZIP2=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_UNZIP=y +BR2_PACKAGE_XZ=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_GDB=y +BR2_PACKAGE_LMBENCH=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FATLABEL=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_MMC_UTILS=y +BR2_PACKAGE_MTD=y +BR2_PACKAGE_WILC1000_FIRMWARE=y +BR2_PACKAGE_EVTEST=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_SETSERIAL=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_USBUTILS=y +BR2_PACKAGE_LIBDRM=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_DTC=y +BR2_PACKAGE_DTC_PROGRAMS=y +BR2_PACKAGE_BLUEZ5_UTILS=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES=y +BR2_PACKAGE_IW=y +BR2_PACKAGE_LRZSZ=y +BR2_PACKAGE_MII_DIAG=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_WGET=y +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_BASH=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_VIM=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" + +# Bootloaders +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,at91bootstrap,v3.9.0)/at91bootstrap3-v3.9.0.tar.gz" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="sama5d4_xplainedsd_uboot_secure" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,u-boot-at91,linux4sam_6.2)/u-boot-at91-linux4sam_6.2.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="sama5d4_xplained_mmc" +BR2_TARGET_UBOOT_NEEDS_DTC=y + +# Host packages +# Needed to generate the SD card image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/avenger96_defconfig b/configs/avenger96_defconfig new file mode 100644 index 00000000..d2c1b901 --- /dev/null +++ b/configs/avenger96_defconfig @@ -0,0 +1,34 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_8=y +BR2_ROOTFS_OVERLAY="board/arrow/avenger96/overlay/" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/stmicroelectronics/common/stm32mp157/post-image.sh" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.8.13" +BR2_LINUX_KERNEL_DEFCONFIG="multi_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="stm32mp157a-dhcor-avenger96" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION_VALUE="v2.2" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="stm32mp1" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_VARIABLES="STM32MP_SDMMC=1 AARCH32_SP=sp_min DTB_FILE_NAME=stm32mp157a-avenger96.dtb" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_DEBUG=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_IMAGES="*.stm32" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_NEEDS_DTC=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.07" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="stm32mp15_trusted" +# BR2_TARGET_UBOOT_FORMAT_BIN is not set +BR2_TARGET_UBOOT_FORMAT_STM32=y +BR2_TARGET_UBOOT_CUSTOM_MAKEOPTS="DEVICE_TREE=stm32mp15xx-dhcor-avenger96" +BR2_PACKAGE_HOST_GENIMAGE=y diff --git a/configs/bananapi_m1_defconfig b/configs/bananapi_m1_defconfig new file mode 100644 index 00000000..23da3633 --- /dev/null +++ b/configs/bananapi_m1_defconfig @@ -0,0 +1,29 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_18=y +BR2_TARGET_GENERIC_ISSUE="Welcome to Bananapi M1" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/bananapi/bananapi-m1/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.18.12" +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun7i-a20-bananapi" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2018.07" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="Bananapi" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/bananapi/bananapi-m1/boot.cmd" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/bananapi_m1_plus_defconfig b/configs/bananapi_m1_plus_defconfig new file mode 100644 index 00000000..271124f7 --- /dev/null +++ b/configs/bananapi_m1_plus_defconfig @@ -0,0 +1,45 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_NEON_VFPV4=y +BR2_GLOBAL_PATCH_DIR="board/sinovoip/m1-plus/patches" +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y +BR2_TARGET_GENERIC_HOSTNAME="bananapi" +BR2_TARGET_GENERIC_ISSUE="Welcome to Banana Pi!" +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_ROOTFS_OVERLAY="board/sinovoip/m1-plus/rootfs_overlay" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/sinovoip/m1-plus/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/sinovoip/m1-plus/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.3" +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/sinovoip/m1-plus/linux-wifi.fragment" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun7i-a20-bananapi-m1-plus" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM43XXX=y +BR2_PACKAGE_IW=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_CLI=y +BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.10" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="bananapi_m1_plus" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/sinovoip/m1-plus/boot.cmd" diff --git a/configs/bananapi_m2_plus_defconfig b/configs/bananapi_m2_plus_defconfig new file mode 100644 index 00000000..77a403ce --- /dev/null +++ b/configs/bananapi_m2_plus_defconfig @@ -0,0 +1,30 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y +BR2_TARGET_GENERIC_ISSUE="Welcome to Bananapi M2 Plus" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/sinovoip/m2-plus/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0" +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun8i-h3-bananapi-m2-plus" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="Sinovoip_BPI_M2_Plus" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/sinovoip/m2-plus/boot.cmd" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/bananapi_m2_ultra_defconfig b/configs/bananapi_m2_ultra_defconfig new file mode 100644 index 00000000..22f7974b --- /dev/null +++ b/configs/bananapi_m2_ultra_defconfig @@ -0,0 +1,30 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_18=y +BR2_TARGET_GENERIC_ISSUE="Welcome to Bananapi M2 Ultra" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/bananapi/bananapi-m2-ultra/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.18.12" +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun8i-r40-bananapi-m2-ultra" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2018.07" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="bananapi_m2_berry" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/bananapi/bananapi-m2-ultra/boot.cmd" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/bananapi_m2_zero_defconfig b/configs/bananapi_m2_zero_defconfig new file mode 100644 index 00000000..e5c89fce --- /dev/null +++ b/configs/bananapi_m2_zero_defconfig @@ -0,0 +1,31 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_NEON_VFPV4=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_9=y +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot for the Bananapi M2 Zero" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/bananapi/bananapi-m2-zero/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.9.11" +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun8i-h2-plus-bananapi-m2-zero" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="bananapi_m2_zero" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.10" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/bananapi/bananapi-m2-zero/boot.cmd" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/bananapi_m64_defconfig b/configs/bananapi_m64_defconfig new file mode 100644 index 00000000..b93332ed --- /dev/null +++ b/configs/bananapi_m64_defconfig @@ -0,0 +1,50 @@ +BR2_aarch64=y +BR2_cortex_a53=y +BR2_ARM_FPU_VFPV4=y + +# Linux headers same as kernel, a 5.0 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://github.com/apritzel/arm-trusted-firmware.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="sun50iw1p1" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="aa75c8da415158a94b82a430b2b40000778e851f" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="bananapi_m64" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="spl/sunxi-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/bananapi/bananapi-m64/boot.cmd" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="allwinner/sun50i-a64-bananapi-m64" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_GENERIC_ISSUE="Welcome to Bananapi M64" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/bananapi/bananapi-m64/genimage.cfg" diff --git a/configs/bananapro_defconfig b/configs/bananapro_defconfig new file mode 100644 index 00000000..e87d9ba6 --- /dev/null +++ b/configs/bananapro_defconfig @@ -0,0 +1,75 @@ +# Architecture +BR2_arm=y +BR2_cortex_a7=y +BR2_GLOBAL_PATCH_DIR="board/lemaker/bananapro/patches" +BR2_ARM_EABIHF=y +BR2_ARM_FPU_NEON_VFPV4=y + +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# Toolchain +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y + +# System configuration +BR2_TARGET_GENERIC_HOSTNAME="bananapro" +BR2_TARGET_GENERIC_ISSUE="Welcome to Banana Pro!" +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_ROOTFS_OVERLAY="board/lemaker/bananapro/rootfs_overlay" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/lemaker/bananapro/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/lemaker/bananapro/post-image.sh" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.4.7" +BR2_LINUX_KERNEL_USE_DEFCONFIG=y +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/lemaker/bananapro/linux-wifi.fragment" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun7i-a20-bananapro" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Bootloaders +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.10" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="Bananapro" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_FORMAT_BIN=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="u-boot-sunxi-with-spl.bin" + +# Wifi firmware for brcm43362 +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM43XXX=y + +# Audio +BR2_PACKAGE_ALSA_UTILS=y +# BR2_PACKAGE_ALSA_UTILS_ALSAMIXER is not set +BR2_PACKAGE_ALSA_UTILS_AMIXER=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y + +# For automatic firmware loading +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y + +# Wireless packages +BR2_PACKAGE_IW=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_CLI=y +BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y + +# Host tools +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y diff --git a/configs/beagleboardx15_defconfig b/configs/beagleboardx15_defconfig new file mode 100644 index 00000000..039a07b1 --- /dev/null +++ b/configs/beagleboardx15_defconfig @@ -0,0 +1,29 @@ +BR2_arm=y +BR2_cortex_a15=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/beagleboardx15/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.9" +BR2_LINUX_KERNEL_DEFCONFIG="omap2plus" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="am57xx-beagle-x15 am57xx-beagle-x15-revb1" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2016.11" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="am57xx_evm" +BR2_TARGET_UBOOT_NEEDS_DTC=y +# BR2_TARGET_UBOOT_FORMAT_BIN is not set +BR2_TARGET_UBOOT_FORMAT_IMG=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="spl/u-boot-spl.bin" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="MLO" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/beaglebone_defconfig b/configs/beaglebone_defconfig new file mode 100644 index 00000000..9a4be13e --- /dev/null +++ b/configs/beaglebone_defconfig @@ -0,0 +1,31 @@ +BR2_arm=y +BR2_cortex_a8=y +BR2_GLOBAL_PATCH_DIR="board/beaglebone/patches" +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y +BR2_ROOTFS_POST_BUILD_SCRIPT="board/beaglebone/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/beaglebone/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,beagleboard,linux,4.19.79-ti-r30)/linux-4.19.79-ti-r30.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="omap2plus" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="am335x-evm am335x-bone am335x-boneblack am335x-bonegreen am335x-evmsk am335x-boneblue" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.04" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="am335x_evm" +BR2_TARGET_UBOOT_NEEDS_DTC=y +# BR2_TARGET_UBOOT_FORMAT_BIN is not set +BR2_TARGET_UBOOT_FORMAT_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="MLO" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y diff --git a/configs/beaglebone_qt5_defconfig b/configs/beaglebone_qt5_defconfig new file mode 100644 index 00000000..5f084b77 --- /dev/null +++ b/configs/beaglebone_qt5_defconfig @@ -0,0 +1,48 @@ +BR2_arm=y +BR2_cortex_a8=y +BR2_GLOBAL_PATCH_DIR="board/beaglebone/patches" +BR2_TOOLCHAIN_BUILDROOT_GLIBC=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y +BR2_ROOTFS_OVERLAY="board/beaglebone/rootfs_overlay" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/beaglebone/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/beaglebone/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,beagleboard,linux,4.19.79-ti-r30)/linux-4.19.79-ti-r30.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="omap2plus" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/beaglebone/linux-sgx.fragment" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="am335x-evm am335x-bone am335x-boneblack am335x-bonegreen am335x-evmsk am335x-boneblue" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_PACKAGE_FBV=y +BR2_PACKAGE_QT5=y +BR2_PACKAGE_QT5BASE_EXAMPLES=y +BR2_PACKAGE_QT5BASE_EGLFS=y +BR2_PACKAGE_QT5BASE_DEFAULT_QPA="eglfs" +BR2_PACKAGE_QT5QUICKCONTROLS=y +BR2_PACKAGE_TI_SGX_DEMOS=y +BR2_PACKAGE_TI_SGX_KM=y +BR2_PACKAGE_TI_SGX_UM=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="250M" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.04" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="am335x_evm" +BR2_TARGET_UBOOT_NEEDS_DTC=y +# BR2_TARGET_UBOOT_FORMAT_BIN is not set +BR2_TARGET_UBOOT_FORMAT_IMG=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="spl/u-boot-spl.bin" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="MLO" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y diff --git a/configs/beagleboneai_defconfig b/configs/beagleboneai_defconfig new file mode 100644 index 00000000..eb23cdf6 --- /dev/null +++ b/configs/beagleboneai_defconfig @@ -0,0 +1,29 @@ +BR2_arm=y +BR2_cortex_a15=y +BR2_GLOBAL_PATCH_DIR="board/beagleboneai/patches" +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_14=y +BR2_SYSTEM_DHCP="eth0" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/beagleboneai/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/beagleboneai/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,beagleboard,linux,4.14.108-ti-r117)/linux-4.14.108-ti-r117.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="bb.org" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="am5729-beagleboneai" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.04" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="am57xx_evm" +BR2_TARGET_UBOOT_NEEDS_DTC=y +# BR2_TARGET_UBOOT_FORMAT_BIN is not set +BR2_TARGET_UBOOT_FORMAT_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="MLO" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/beelink_gs1_defconfig b/configs/beelink_gs1_defconfig new file mode 100644 index 00000000..b461574a --- /dev/null +++ b/configs/beelink_gs1_defconfig @@ -0,0 +1,44 @@ +# Architecture +BR2_aarch64=y +BR2_ARM_FPU_VFPV4=y +BR2_TARGET_GENERIC_ISSUE="Welcome to Beelink GS1" +# MDEV is required to autoload the ethernet driver module +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y +BR2_SYSTEM_DHCP="eth0" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/beelink/gs1/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/beelink/gs1/genimage.cfg" + +# Kernel Linux headers same as kernel, a 5.5 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_5=y +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.5.4" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="allwinner/sun50i-h6-beelink-gs1" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION_VALUE="v2.2" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="sun50i_h6" + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="beelink_gs1" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/chromebook_elm_defconfig b/configs/chromebook_elm_defconfig new file mode 100644 index 00000000..4f82370f --- /dev/null +++ b/configs/chromebook_elm_defconfig @@ -0,0 +1,40 @@ +# Architecture +BR2_aarch64=y +BR2_cortex_a72_a53=y + +# Patches +BR2_GLOBAL_PATCH_DIR="board/chromebook/elm/patches/" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# Linux headers same as kernel (5.9 series) +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_9=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.9" + +# Build Kernel with a Custom config. +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/chromebook/elm/linux.config" + +# DTS support +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="mediatek/mt8173-elm" + +# Package Firmware for WiFi chip. +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_MWIFIEX_SD8797=y + +# Scripts to generate final images. +BR2_ROOTFS_POST_BUILD_SCRIPT="board/chromebook/elm/sign.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/chromebook/mksd.sh" + +# Supporting host tools to build / sign FIT Image. +BR2_PACKAGE_HOST_PARTED=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y +BR2_PACKAGE_HOST_VBOOT_UTILS=y diff --git a/configs/chromebook_snow_defconfig b/configs/chromebook_snow_defconfig new file mode 100644 index 00000000..bcb94b71 --- /dev/null +++ b/configs/chromebook_snow_defconfig @@ -0,0 +1,23 @@ +BR2_arm=y +BR2_cortex_a15=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_15=y +BR2_TARGET_GENERIC_GETTY_PORT="tty1" +BR2_TARGET_GENERIC_GETTY_TERM="linux" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/chromebook/snow/sign.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/chromebook/mksd.sh" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.15" +BR2_LINUX_KERNEL_PATCH="board/chromebook/snow/linux-4.15-dts-tpm.patch" +BR2_LINUX_KERNEL_DEFCONFIG="exynos" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/chromebook/snow/linux-4.15.fragment" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="exynos5250-snow" +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_MWIFIEX_SD8797=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_PARTED=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y +BR2_PACKAGE_HOST_VBOOT_UTILS=y diff --git a/configs/ci20_defconfig b/configs/ci20_defconfig new file mode 100644 index 00000000..09eddc4e --- /dev/null +++ b/configs/ci20_defconfig @@ -0,0 +1,37 @@ +# architecture +BR2_mipsel=y +BR2_mips_xburst=y +# BR2_MIPS_SOFT_FLOAT is not set +BR2_KERNEL_HEADERS_AS_KERNEL=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# system +BR2_TARGET_GENERIC_GETTY_PORT="ttyS4" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/ci20/genimage.cfg" + +# kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.4.58" +BR2_LINUX_KERNEL_DEFCONFIG="ci20" +BR2_LINUX_KERNEL_INSTALL_TARGET=y + +# u-boot +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.07" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="ci20_mmc" +BR2_TARGET_UBOOT_FORMAT_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="spl/u-boot-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SOURCE="board/ci20/uboot-env.txt" +BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SIZE="32768" + +# host +BR2_PACKAGE_HOST_GENIMAGE=y diff --git a/configs/csky_gx6605s_defconfig b/configs/csky_gx6605s_defconfig new file mode 100644 index 00000000..f1f9579d --- /dev/null +++ b/configs/csky_gx6605s_defconfig @@ -0,0 +1,19 @@ +# Architecture +BR2_csky=y +BR2_ck610=y + +# System +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# Linux headers same as kernel, a 5.0 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0.12" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/qemu/csky/linux-ck610.config.fragment" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="board/csky/gx6605s/gx6605s.dts" diff --git a/configs/cubieboard2_defconfig b/configs/cubieboard2_defconfig new file mode 100644 index 00000000..8924c88c --- /dev/null +++ b/configs/cubieboard2_defconfig @@ -0,0 +1,32 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_NEON_VFPV4=y +# Linux headers same as kernel, a 4.18 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_18=y +BR2_TARGET_GENERIC_HOSTNAME="Cubieboard2" +BR2_TARGET_GENERIC_ISSUE="Welcome to Cubieboard2!" +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/cubietech/cubieboard2/post-image.sh" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.18.14" +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun7i-a20-cubieboard2" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2018.09" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="Cubieboard2" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/cubietech/cubieboard2/boot.cmd" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/engicam_imx6qdl_icore_defconfig b/configs/engicam_imx6qdl_icore_defconfig new file mode 100644 index 00000000..d8a51c7a --- /dev/null +++ b/configs/engicam_imx6qdl_icore_defconfig @@ -0,0 +1,43 @@ +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y + +# Linux headers same as kernel, a 5.0 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# System +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc3" + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="imx6qdl_icore_mmc" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_OPENSSL=y +BR2_TARGET_UBOOT_FORMAT_DTB_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="SPL" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x10008000" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6dl-icore imx6q-icore imx6q-icore-ofcap10 imx6q-icore-ofcap12" + +# Filesystem +BR2_TARGET_GENERIC_ISSUE="Welcome to Engicam i.CoreM6 Quad/Dual/DualLite/Solo" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/engicam/icorem6/genimage.cfg" diff --git a/configs/engicam_imx6qdl_icore_qt5_defconfig b/configs/engicam_imx6qdl_icore_qt5_defconfig new file mode 100644 index 00000000..b893c6ae --- /dev/null +++ b/configs/engicam_imx6qdl_icore_qt5_defconfig @@ -0,0 +1,82 @@ +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y + +# Linux headers same as kernel, a 4.13 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_13=y + +# System +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc3" +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2017.07" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="imx6qdl_icore_mmc" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_OPENSSL=y +BR2_TARGET_UBOOT_FORMAT_DTB_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="SPL" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.13" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x10008000" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6dl-icore imx6q-icore imx6q-icore-ofcap10 imx6q-icore-ofcap12" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/engicam/icorem6/linux_qt5.fragment" + +# Filesystem +BR2_TARGET_GENERIC_ISSUE="Welcome to Engicam i.CoreM6 Quad/Dual/DualLite/Solo" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/engicam/icorem6/genimage.cfg" +BR2_ROOTFS_OVERLAY="board/engicam/icorem6/rootfs_overlay" + +# qt5 dependencies +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y +BR2_TOOLCHAIN_BUILDROOT_CXX=y + +# qt5 +BR2_PACKAGE_QT5=y +BR2_PACKAGE_QT5BASE_OPENGL_LIB=y +BR2_PACKAGE_QT5BASE_LINUXFB=y +BR2_PACKAGE_QT5BASE_FONTCONFIG=y +BR2_PACKAGE_QT5BASE_GIF=y +BR2_PACKAGE_QT5BASE_JPEG=y + +# mesa3d +BR2_PACKAGE_MESA3D=y +BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_ETNAVIV=y +BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_KMSRO=y +BR2_PACKAGE_MESA3D_OPENGL_ES=y +BR2_PACKAGE_MESA3D_OPENGL_EGL=y + +# qt5 demo packages +BR2_PACKAGE_GLMARK2=y +BR2_PACKAGE_MESA3D_DEMOS=y +BR2_PACKAGE_KMSCUBE=y +BR2_PACKAGE_QT5CINEX=y +BR2_PACKAGE_QT5CINEX_HD=y + +# fonts +BR2_PACKAGE_BITSTREAM_VERA=y +BR2_PACKAGE_CANTARELL=y +BR2_PACKAGE_DEJAVU=y +BR2_PACKAGE_FONT_AWESOME=y +BR2_PACKAGE_GHOSTSCRIPT_FONTS=y +BR2_PACKAGE_INCONSOLATA=y +BR2_PACKAGE_LIBERATION=y diff --git a/configs/engicam_imx6qdl_icore_rqs_defconfig b/configs/engicam_imx6qdl_icore_rqs_defconfig new file mode 100644 index 00000000..45ed67be --- /dev/null +++ b/configs/engicam_imx6qdl_icore_rqs_defconfig @@ -0,0 +1,43 @@ +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y + +# Linux headers same as kernel, a 5.0 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# System +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc3" + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="imx6qdl_icore_rqs" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_OPENSSL=y +BR2_TARGET_UBOOT_FORMAT_DTB_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="SPL" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x10008000" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6dl-icore-rqs imx6q-icore-rqs" + +# Filesystem +BR2_TARGET_GENERIC_ISSUE="Welcome to Engicam i.CoreM6 Quad/Dual/DualLite/Solo RQS Starter Kit" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/engicam/icorem6_rqs/genimage.cfg" diff --git a/configs/engicam_imx6ul_geam_defconfig b/configs/engicam_imx6ul_geam_defconfig new file mode 100644 index 00000000..aac8432e --- /dev/null +++ b/configs/engicam_imx6ul_geam_defconfig @@ -0,0 +1,43 @@ +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y + +# Linux headers same as kernel, a 4.11 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_11=y + +# System +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2017.07-rc1" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="imx6ul_geam_mmc" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_OPENSSL=y +BR2_TARGET_UBOOT_FORMAT_DTB_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="SPL" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.11.5" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x80008000" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6ul-geam-kit" + +# Filesystem +BR2_TARGET_GENERIC_ISSUE="Welcome to Engicam GEAM6UL Starter Kit" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/engicam/geam6ul/genimage.cfg" diff --git a/configs/engicam_imx6ul_isiot_defconfig b/configs/engicam_imx6ul_isiot_defconfig new file mode 100644 index 00000000..57a66dea --- /dev/null +++ b/configs/engicam_imx6ul_isiot_defconfig @@ -0,0 +1,43 @@ +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y + +# Linux headers same as kernel, a 5.0 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# System +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="imx6ul_isiot_emmc" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_OPENSSL=y +BR2_TARGET_UBOOT_FORMAT_DTB_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="SPL" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x80008000" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6ul-isiot-emmc" + +# Filesystem +BR2_TARGET_GENERIC_ISSUE="Welcome to Engicam Is.IoT eMMC Starter Kit" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/engicam/isiot/genimage.cfg" diff --git a/configs/freescale_imx28evk_defconfig b/configs/freescale_imx28evk_defconfig new file mode 100644 index 00000000..bd5b007e --- /dev/null +++ b/configs/freescale_imx28evk_defconfig @@ -0,0 +1,34 @@ +# architecture +BR2_arm=y +BR2_arm926t=y + +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# system +BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0" + +# kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.4.42" +BR2_LINUX_KERNEL_DEFCONFIG="mxs" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx28-evk" + +# bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="mx28evk" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.04" +BR2_TARGET_UBOOT_FORMAT_SD=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# To generate SD Image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/mxs/post-image.sh" diff --git a/configs/freescale_imx6dlsabreauto_defconfig b/configs/freescale_imx6dlsabreauto_defconfig new file mode 100644 index 00000000..443dc92f --- /dev/null +++ b/configs/freescale_imx6dlsabreauto_defconfig @@ -0,0 +1,44 @@ +# architecture +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y + +# patches +BR2_GLOBAL_PATCH_DIR="board/freescale/imx6sabre/patches" + +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# system +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc3" + +# kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_GIT=y +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/linux-imx.git" +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6dl-sabreauto" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# filesystem +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# required tools to create the microSD image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="mx6dlsabreauto" +BR2_TARGET_UBOOT_FORMAT_IMX=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/uboot-imx.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_TARGET_UBOOT_NEEDS_DTC=y diff --git a/configs/freescale_imx6dlsabresd_defconfig b/configs/freescale_imx6dlsabresd_defconfig new file mode 100644 index 00000000..488ceef4 --- /dev/null +++ b/configs/freescale_imx6dlsabresd_defconfig @@ -0,0 +1,43 @@ +# architecture +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y + +# patches +BR2_GLOBAL_PATCH_DIR="board/freescale/imx6sabre/patches" + +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# system +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" + +# kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_GIT=y +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/linux-imx.git" +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6dl-sabresd" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# filesystem +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +BR2_TARGET_ROOTFS_EXT2=y + +# required tools to create the microSD image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="mx6dlsabresd" +BR2_TARGET_UBOOT_FORMAT_IMX=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/uboot-imx.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_TARGET_UBOOT_NEEDS_DTC=y diff --git a/configs/freescale_imx6qsabreauto_defconfig b/configs/freescale_imx6qsabreauto_defconfig new file mode 100644 index 00000000..1a0c96d5 --- /dev/null +++ b/configs/freescale_imx6qsabreauto_defconfig @@ -0,0 +1,44 @@ +# architecture +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y + +# patches +BR2_GLOBAL_PATCH_DIR="board/freescale/imx6sabre/patches" + +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# system +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc3" + +# kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_GIT=y +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/linux-imx.git" +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6q-sabreauto" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# filesystem +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# required tools to create the microSD image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="mx6qsabreauto" +BR2_TARGET_UBOOT_FORMAT_IMX=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/uboot-imx.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_TARGET_UBOOT_NEEDS_DTC=y diff --git a/configs/freescale_imx6qsabresd_defconfig b/configs/freescale_imx6qsabresd_defconfig new file mode 100644 index 00000000..19d71733 --- /dev/null +++ b/configs/freescale_imx6qsabresd_defconfig @@ -0,0 +1,44 @@ +# architecture +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y + +# patches +BR2_GLOBAL_PATCH_DIR="board/freescale/imx6sabre/patches" + +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# system +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" + +# kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_GIT=y +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/linux-imx.git" +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6q-sabresd" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# filesystem +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# required tools to create the microSD image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="mx6qsabresd" +BR2_TARGET_UBOOT_FORMAT_IMX=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/uboot-imx.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_TARGET_UBOOT_NEEDS_DTC=y diff --git a/configs/freescale_imx6sxsabresd_defconfig b/configs/freescale_imx6sxsabresd_defconfig new file mode 100644 index 00000000..1628d7c5 --- /dev/null +++ b/configs/freescale_imx6sxsabresd_defconfig @@ -0,0 +1,43 @@ +# architecture +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y + +# patches +BR2_GLOBAL_PATCH_DIR="board/freescale/imx6sabre/patches" + +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# system +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" + +# kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_GIT=y +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/linux-imx.git" +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6sx-sdb" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# filesystem +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +BR2_TARGET_ROOTFS_EXT2=y + +# required tools to create the microSD image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="mx6sxsabresd" +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/uboot-imx.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_TARGET_UBOOT_FORMAT_IMX=y +BR2_TARGET_UBOOT_NEEDS_DTC=y diff --git a/configs/freescale_imx6ullevk_defconfig b/configs/freescale_imx6ullevk_defconfig new file mode 100644 index 00000000..88d095d4 --- /dev/null +++ b/configs/freescale_imx6ullevk_defconfig @@ -0,0 +1,25 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_GIT=y +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/linux-imx.git" +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6ull-14x14-evk" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="mx6ull_14x14_evk" +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/uboot-imx.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_FORMAT_IMX=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/freescale_imx7dsabresd_defconfig b/configs/freescale_imx7dsabresd_defconfig new file mode 100644 index 00000000..a8b1df19 --- /dev/null +++ b/configs/freescale_imx7dsabresd_defconfig @@ -0,0 +1,38 @@ +# architecture +BR2_arm=y +BR2_cortex_a7=y + +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# system +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_GIT=y +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/linux-imx.git" +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx7d-sdb" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="mx7dsabresd" +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/uboot-imx.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_TARGET_UBOOT_FORMAT_IMX=y +BR2_TARGET_UBOOT_NEEDS_DTC=y + +# required tools to create the microSD image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" diff --git a/configs/freescale_imx8mmevk_defconfig b/configs/freescale_imx8mmevk_defconfig new file mode 100644 index 00000000..13117189 --- /dev/null +++ b/configs/freescale_imx8mmevk_defconfig @@ -0,0 +1,42 @@ +BR2_aarch64=y +BR2_ARM_FPU_VFPV3=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc1" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/imx8-bootloader-prepare.sh board/freescale/common/imx/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="${UBOOT_DIR}/arch/arm/dts/imx8mm-evk.dtb" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_GIT=y +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/linux-imx" +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v8" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="freescale/imx8mm-evk freescale/imx8mm-evk-revb-qca-wifi" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_PACKAGE_FREESCALE_IMX=y +BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MM=y +BR2_PACKAGE_FIRMWARE_IMX=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/imx-atf" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="imx8mm" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/uboot-imx" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="imx8mm_evk" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-nodtb.bin" +BR2_TARGET_UBOOT_SPL=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_IMX_MKIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y diff --git a/configs/freescale_imx8mnevk_defconfig b/configs/freescale_imx8mnevk_defconfig new file mode 100644 index 00000000..192f5d29 --- /dev/null +++ b/configs/freescale_imx8mnevk_defconfig @@ -0,0 +1,43 @@ +BR2_aarch64=y +BR2_ARM_FPU_VFPV3=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc1" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/imx8-bootloader-prepare.sh board/freescale/common/imx/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="${UBOOT_DIR}/arch/arm/dts/imx8mn-ddr4-evk.dtb" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_GIT=y +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/linux-imx" +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v8" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="freescale/imx8mn-ddr4-evk" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_PACKAGE_FREESCALE_IMX=y +BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MN=y +BR2_PACKAGE_FIRMWARE_IMX=y +BR2_PACKAGE_FIRMWARE_IMX_DDR4=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/imx-atf" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="imx8mn" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/uboot-imx" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="imx8mn_ddr4_evk" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-nodtb.bin" +BR2_TARGET_UBOOT_SPL=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_IMX_MKIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y diff --git a/configs/freescale_imx8mqevk_defconfig b/configs/freescale_imx8mqevk_defconfig new file mode 100644 index 00000000..d5d22dcf --- /dev/null +++ b/configs/freescale_imx8mqevk_defconfig @@ -0,0 +1,42 @@ +BR2_aarch64=y +BR2_ARM_FPU_VFPV3=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/imx8-bootloader-prepare.sh board/freescale/common/imx/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="${UBOOT_DIR}/arch/arm/dts/imx8mq-evk.dtb" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_GIT=y +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/linux-imx" +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v8" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="freescale/imx8mq-evk" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_PACKAGE_FREESCALE_IMX=y +BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M=y +BR2_PACKAGE_FIRMWARE_IMX=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/imx-atf" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="imx8mq" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/uboot-imx" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="imx8mq_evk" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-nodtb.bin" +BR2_TARGET_UBOOT_SPL=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_IMX_MKIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y diff --git a/configs/freescale_imx8qmmek_defconfig b/configs/freescale_imx8qmmek_defconfig new file mode 100644 index 00000000..0342c0a2 --- /dev/null +++ b/configs/freescale_imx8qmmek_defconfig @@ -0,0 +1,40 @@ +BR2_aarch64=y +BR2_ARM_FPU_VFPV4=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/imx8-bootloader-prepare.sh board/freescale/common/imx/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="${UBOOT_DIR}/arch/arm/dts/fsl-imx8qm-mek.dtb" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_GIT=y +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/linux-imx" +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v8" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="freescale/imx8qm-mek" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_PACKAGE_FREESCALE_IMX=y +BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8=y +BR2_PACKAGE_FIRMWARE_IMX=y +BR2_PACKAGE_IMX_SC_FIRMWARE=y +BR2_PACKAGE_IMX_SECO=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/imx-atf" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="imx8qm" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/uboot-imx" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="imx8qm_mek" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_IMX_MKIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y diff --git a/configs/freescale_imx8qxpmek_defconfig b/configs/freescale_imx8qxpmek_defconfig new file mode 100644 index 00000000..e37a7553 --- /dev/null +++ b/configs/freescale_imx8qxpmek_defconfig @@ -0,0 +1,42 @@ +BR2_aarch64=y +BR2_cortex_a35=y +BR2_ARM_FPU_VFPV3=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyLP0" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/imx8-bootloader-prepare.sh board/freescale/common/imx/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="${UBOOT_DIR}/arch/arm/dts/fsl-imx8qxp-mek.dtb" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_GIT=y +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/linux-imx" +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v8" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="freescale/imx8qxp-mek" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_PACKAGE_FREESCALE_IMX=y +BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8X=y +BR2_PACKAGE_FIRMWARE_IMX=y +BR2_PACKAGE_IMX_SC_FIRMWARE=y +BR2_PACKAGE_IMX_SECO=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/imx-atf" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="imx8qx" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/uboot-imx" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="rel_imx_5.4.70_2.3.0" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="imx8qxp_mek" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_IMX_MKIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y diff --git a/configs/freescale_p1025twr_defconfig b/configs/freescale_p1025twr_defconfig new file mode 100644 index 00000000..f476d927 --- /dev/null +++ b/configs/freescale_p1025twr_defconfig @@ -0,0 +1,24 @@ +# Architecture +BR2_powerpc=y +BR2_powerpc_8548=y + +# Linux headers same as kernel, a 4.15 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_15=y + +# Serial port config +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.15.7" +BR2_LINUX_KERNEL_DEFCONFIG="mpc85xx_smp" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="fsl/p1025twr" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_ROOTFS_CPIO=y +BR2_TARGET_ROOTFS_CPIO_GZIP=y +BR2_TARGET_ROOTFS_CPIO_UIMAGE=y +# BR2_TARGET_ROOTFS_TAR is not set diff --git a/configs/freescale_t1040d4rdb_defconfig b/configs/freescale_t1040d4rdb_defconfig new file mode 100644 index 00000000..df44046e --- /dev/null +++ b/configs/freescale_t1040d4rdb_defconfig @@ -0,0 +1,24 @@ +# Architecture +BR2_powerpc64=y +BR2_powerpc_e5500=y + +# Linux headers same as kernel, a 4.15 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_15=y + +# Serial port config +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.15.7" +BR2_LINUX_KERNEL_DEFCONFIG="corenet64_smp" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="fsl/t1040d4rdb" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_ROOTFS_CPIO=y +BR2_TARGET_ROOTFS_CPIO_GZIP=y +BR2_TARGET_ROOTFS_CPIO_UIMAGE=y +# BR2_TARGET_ROOTFS_TAR is not set diff --git a/configs/freescale_t2080_qds_rdb_defconfig b/configs/freescale_t2080_qds_rdb_defconfig new file mode 100644 index 00000000..3d03c32f --- /dev/null +++ b/configs/freescale_t2080_qds_rdb_defconfig @@ -0,0 +1,25 @@ +# Architecture +BR2_powerpc64=y +BR2_powerpc_e6500=y + +# Linux headers same as kernel +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_17=y + +# Serial port config +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.17.14" +BR2_LINUX_KERNEL_DEFCONFIG="corenet64_smp" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="fsl/t2080qds fsl/t2080rdb" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_ROOTFS_CPIO=y +BR2_TARGET_ROOTFS_CPIO_GZIP=y +BR2_TARGET_ROOTFS_CPIO_UIMAGE=y +# BR2_TARGET_ROOTFS_TAR is not set + diff --git a/configs/friendlyarm_nanopc_t4_defconfig b/configs/friendlyarm_nanopc_t4_defconfig new file mode 100644 index 00000000..2f7c5390 --- /dev/null +++ b/configs/friendlyarm_nanopc_t4_defconfig @@ -0,0 +1,53 @@ +# Architecture +BR2_aarch64=y +BR2_cortex_a72_a53=y + +# Linux headers same as kernel, a 5.8 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_8=y + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="11a0a46a899fcc3b1fdb214b382f3d7495d88eca" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="rk3399" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_NEEDS_ARM32_TOOLCHAIN=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_IMAGES="" + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.07" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="nanopc-t4-rk3399" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31_ELF=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="idbloader.img" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.8.2" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="rockchip/rk3399-nanopc-t4" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_GENERIC_HOSTNAME="nanopc-t4" +BR2_TARGET_GENERIC_ISSUE="Welcome to NanoPC-T4" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/friendlyarm/nanopc-t4/genimage.cfg" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/friendlyarm/nanopc-t4/post-build.sh" diff --git a/configs/friendlyarm_nanopi_a64_defconfig b/configs/friendlyarm_nanopi_a64_defconfig new file mode 100644 index 00000000..4df22b2a --- /dev/null +++ b/configs/friendlyarm_nanopi_a64_defconfig @@ -0,0 +1,50 @@ +BR2_aarch64=y +BR2_cortex_a53=y +BR2_ARM_FPU_VFPV4=y + +# Linux headers same as kernel, a 5.0 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://github.com/apritzel/arm-trusted-firmware.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="sun50iw1p1" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="aa75c8da415158a94b82a430b2b40000778e851f" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="nanopi_a64" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="spl/sunxi-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/friendlyarm/nanopi-a64/boot.cmd" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="allwinner/sun50i-a64-nanopi-a64" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_GENERIC_ISSUE="Welcome to FriendlyARM Nanopi A64" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/friendlyarm/nanopi-a64/genimage.cfg" diff --git a/configs/friendlyarm_nanopi_m1_defconfig b/configs/friendlyarm_nanopi_m1_defconfig new file mode 100644 index 00000000..18cfcb26 --- /dev/null +++ b/configs/friendlyarm_nanopi_m1_defconfig @@ -0,0 +1,45 @@ +# Architecture +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_VFPV4=y + +# Linux headers same as kernel, a 5.0 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# System configuration +BR2_TARGET_GENERIC_HOSTNAME="nanopi-m1" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot for the NanoPi M1" + +# Bootloaders +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="nanopi_m1" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/friendlyarm/nanopi-m1/boot.cmd" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0" +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun8i-h3-nanopi-m1" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/friendlyarm/nanopi-m1/genimage.cfg" +# BR2_TARGET_ROOTFS_TAR is not set + +# Additional tools +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/friendlyarm_nanopi_m1_plus_defconfig b/configs/friendlyarm_nanopi_m1_plus_defconfig new file mode 100644 index 00000000..06adc54b --- /dev/null +++ b/configs/friendlyarm_nanopi_m1_plus_defconfig @@ -0,0 +1,45 @@ +# Architecture +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_VFPV4=y + +# Linux headers same as kernel, a 5.0 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# System configuration +BR2_TARGET_GENERIC_HOSTNAME="nanopi-m1-plus" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot for the NanoPi M1 Plus" + +# Bootloaders +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="nanopi_m1_plus" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/friendlyarm/nanopi-m1-plus/boot.cmd" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0" +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun8i-h3-nanopi-m1-plus" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/friendlyarm/nanopi-m1-plus/genimage.cfg" +# BR2_TARGET_ROOTFS_TAR is not set + +# Additional tools +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/friendlyarm_nanopi_m4_defconfig b/configs/friendlyarm_nanopi_m4_defconfig new file mode 100644 index 00000000..9c3f58f2 --- /dev/null +++ b/configs/friendlyarm_nanopi_m4_defconfig @@ -0,0 +1,53 @@ +# Architecture +BR2_aarch64=y +BR2_cortex_a72_a53=y + +# Linux headers same as kernel, a 5.8 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_8=y + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="11a0a46a899fcc3b1fdb214b382f3d7495d88eca" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="rk3399" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_NEEDS_ARM32_TOOLCHAIN=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_IMAGES="" + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.07" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="nanopi-m4-rk3399" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31_ELF=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="idbloader.img" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.8.2" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="rockchip/rk3399-nanopi-m4" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_GENERIC_HOSTNAME="nanopi-m4" +BR2_TARGET_GENERIC_ISSUE="Welcome to NANOPI-M4" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/friendlyarm/nanopi-m4/genimage.cfg" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/friendlyarm/nanopi-m4/post-build.sh" diff --git a/configs/friendlyarm_nanopi_neo2_defconfig b/configs/friendlyarm_nanopi_neo2_defconfig new file mode 100644 index 00000000..9262737b --- /dev/null +++ b/configs/friendlyarm_nanopi_neo2_defconfig @@ -0,0 +1,50 @@ +BR2_aarch64=y +BR2_cortex_a53=y +BR2_ARM_FPU_VFPV4=y + +# Linux headers same as kernel, a 5.0 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://github.com/apritzel/arm-trusted-firmware.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="sun50iw1p1" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="aa75c8da415158a94b82a430b2b40000778e851f" +R2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="nanopi_neo2" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="spl/sunxi-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/friendlyarm/nanopi-neo2/boot.cmd" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="allwinner/sun50i-h5-nanopi-neo2" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_GENERIC_ISSUE="Welcome to FriendlyARM Nanopi NEO2" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/friendlyarm/nanopi-neo2/genimage.cfg" diff --git a/configs/friendlyarm_nanopi_neo4_defconfig b/configs/friendlyarm_nanopi_neo4_defconfig new file mode 100644 index 00000000..a11872ef --- /dev/null +++ b/configs/friendlyarm_nanopi_neo4_defconfig @@ -0,0 +1,55 @@ +# Architecture +BR2_aarch64=y +BR2_cortex_a72_a53=y + +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="11a0a46a899fcc3b1fdb214b382f3d7495d88eca" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="rk3399" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_NEEDS_ARM32_TOOLCHAIN=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_IMAGES="" + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="nanopi-neo4-rk3399" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31_ELF=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="idbloader.img" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.4.18" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="rockchip/rk3399-nanopi-neo4" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_GENERIC_HOSTNAME="NanoPi Neo4" +BR2_TARGET_GENERIC_ISSUE="Welcome to NanoPi Neo4!" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="70M" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/friendlyarm/nanopi-neo4/genimage.cfg" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/friendlyarm/nanopi-neo4/post-build.sh" diff --git a/configs/friendlyarm_nanopi_neo_defconfig b/configs/friendlyarm_nanopi_neo_defconfig new file mode 100644 index 00000000..1519d828 --- /dev/null +++ b/configs/friendlyarm_nanopi_neo_defconfig @@ -0,0 +1,43 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_VFPV4=y + +BR2_TARGET_GENERIC_HOSTNAME="nanopi-neo" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot for the NanoPi NEO" + +# Linux headers same as kernel, a 5.3 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_3=y + +# Use a -rc kernel to get the DTS +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.13" +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun8i-h3-nanopi-neo" + +# Use an -rc tag because the defconfig is very recent +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.10" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="nanopi_neo" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/friendlyarm/nanopi-neo/boot.cmd" + +# Build an sdcard image +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/friendlyarm/nanopi-neo/genimage.cfg" +# BR2_TARGET_ROOTFS_TAR is not set + +# Additional tools +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/friendlyarm_nanopi_neo_plus2_defconfig b/configs/friendlyarm_nanopi_neo_plus2_defconfig new file mode 100644 index 00000000..461e468c --- /dev/null +++ b/configs/friendlyarm_nanopi_neo_plus2_defconfig @@ -0,0 +1,62 @@ +BR2_aarch64=y +BR2_cortex_a53=y +BR2_ARM_FPU_VFPV4=y + +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_3=y +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y +BR2_ROOTFS_OVERLAY="board/friendlyarm/nanopi-neo-plus2/rootfs_overlay" + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://github.com/apritzel/arm-trusted-firmware.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="sun50iw1p1" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="aa75c8da415158a94b82a430b2b40000778e851f" +R2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.10" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="nanopi_neo_plus2" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="spl/sunxi-spl.bin" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.4" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="allwinner/sun50i-h5-nanopi-neo-plus2" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/friendlyarm/nanopi-neo-plus2/linux-extras.config" + +# Filesystem +BR2_TARGET_GENERIC_ISSUE="Welcome to FriendlyARM Nanopi NEO Plus2" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/friendlyarm/nanopi-neo-plus2/genimage.cfg" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/friendlyarm/nanopi-neo-plus2/post-build.sh" + +# wireless firmware +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM43XXX=y + +# wireless tools +BR2_PACKAGE_IW=y +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WIRELESS_TOOLS_LIB=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_NL80211=y +BR2_PACKAGE_WPA_SUPPLICANT_CLI=y diff --git a/configs/friendlyarm_nanopi_r1_defconfig b/configs/friendlyarm_nanopi_r1_defconfig new file mode 100644 index 00000000..8b03f6dd --- /dev/null +++ b/configs/friendlyarm_nanopi_r1_defconfig @@ -0,0 +1,49 @@ +# Architecture +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_VFPV4=y + +# Linux headers same as kernel, a 5.0 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# System configuration +BR2_TARGET_GENERIC_HOSTNAME="nanopi-r1" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot for the NanoPi R1" + +# Bootloaders +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.01" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_CUSTOM_DTS_PATH="board/friendlyarm/nanopi-r1/uboot/sun8i-h3-nanopi-r1.dts" +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-sunxi-with-spl.bin" +BR2_TARGET_UBOOT_USE_CUSTOM_CONFIG=y +BR2_TARGET_UBOOT_CUSTOM_CONFIG_FILE="board/friendlyarm/nanopi-r1/uboot/nanopi_r1_defconfig" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/friendlyarm/nanopi-r1/boot.cmd" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0" +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/friendlyarm/nanopi-r1/kernel/linux-extras.config" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="board/friendlyarm/nanopi-r1/kernel/sun8i-h3-nanopi-r1.dts" +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun8i-h3-nanopi-r1" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/friendlyarm/nanopi-r1/genimage.cfg" +# BR2_TARGET_ROOTFS_TAR is not set + +# Additional tools +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/galileo_defconfig b/configs/galileo_defconfig new file mode 100644 index 00000000..03ca23f4 --- /dev/null +++ b/configs/galileo_defconfig @@ -0,0 +1,24 @@ +BR2_x86_x1000=y +# Needed for TARGET_GRUB2 +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y +# Linux headers same as kernel, a 3.14 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_3_14=y +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS1" +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_ROOTFS_OVERLAY="board/intel/galileo/rootfs_overlay" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/intel/galileo/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/intel/galileo/post-image.sh" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,mdr78,Linux-x1000,8b3c9d8ce1656a26b1097d9091d53bfb39fef640)/linux-8b3c9d8ce1656a26b1097d9091d53bfb39fef640.tar.gz" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/intel/galileo/linux-3.14.config" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_GRUB2=y +BR2_TARGET_GRUB2_I386_EFI=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/globalscale_espressobin_defconfig b/configs/globalscale_espressobin_defconfig new file mode 100644 index 00000000..50cfc6b5 --- /dev/null +++ b/configs/globalscale_espressobin_defconfig @@ -0,0 +1,27 @@ +BR2_aarch64=y +BR2_cortex_a53=y +BR2_ARM_FPU_VFPV4=y + +# Linux headers same as kernel, a 5.6 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_6=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.6.11" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/globalscale/espressobin/linux-extras.config" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="marvell/armada-3720-espressobin marvell/armada-3720-espressobin-emmc marvell/armada-3720-espressobin-v7 marvell/armada-3720-espressobin-v7-emmc" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot for the Marvell ESPRESSObin" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/globalscale/espressobin/genimage.cfg" diff --git a/configs/grinn_chiliboard_defconfig b/configs/grinn_chiliboard_defconfig new file mode 100644 index 00000000..5b05ed44 --- /dev/null +++ b/configs/grinn_chiliboard_defconfig @@ -0,0 +1,28 @@ +BR2_arm=y +BR2_cortex_a8=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y +BR2_SYSTEM_DHCP="eth0" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/grinn/chiliboard/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.4.26" +BR2_LINUX_KERNEL_DEFCONFIG="omap2plus" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="am335x-chiliboard" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="chiliboard" +BR2_TARGET_UBOOT_FORMAT_IMG=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="spl/u-boot-spl.bin" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="MLO" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/grinn_liteboard_defconfig b/configs/grinn_liteboard_defconfig new file mode 100644 index 00000000..8bec2e1d --- /dev/null +++ b/configs/grinn_liteboard_defconfig @@ -0,0 +1,26 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_7=y +BR2_SYSTEM_DHCP="eth0" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/grinn/liteboard/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.7.2" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6ul-liteboard" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.04" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="liteboard" +BR2_TARGET_UBOOT_FORMAT_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="SPL" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/hifive_unleashed_defconfig b/configs/hifive_unleashed_defconfig new file mode 100644 index 00000000..0b87f258 --- /dev/null +++ b/configs/hifive_unleashed_defconfig @@ -0,0 +1,55 @@ +# Architecture +BR2_riscv=y +BR2_riscv_custom=y +BR2_RISCV_ISA_CUSTOM_RVM=y +BR2_RISCV_ISA_CUSTOM_RVF=y +BR2_RISCV_ISA_CUSTOM_RVD=y +BR2_RISCV_ISA_CUSTOM_RVC=y +BR2_RISCV_64=y +BR2_RISCV_ABI_LP64D=y + +# System +BR2_SYSTEM_DHCP="eth0" +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttySIF0" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/sifive/hifive-unleashed/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/sifive/hifive-unleashed/genimage_sdcard.cfg" + +# Filesystem +BR2_TARGET_ROOTFS_CPIO=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/sifive/hifive-unleashed/linux.config.fragment" +BR2_LINUX_KERNEL_IMAGE=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sifive/hifive-unleashed-a00" +BR2_LINUX_KERNEL_INSTALL_TARGET=y + +# Bootloader +BR2_TARGET_OPENSBI=y +BR2_TARGET_OPENSBI_PLAT="generic" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2021.01" +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="sifive_fu540" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_OPENSBI=y +BR2_TARGET_UBOOT_FORMAT_ITB=y +BR2_TARGET_UBOOT_SPL=y + +# Host tools +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/sifive/hifive-unleashed/boot.cmd" diff --git a/configs/imx23evk_defconfig b/configs/imx23evk_defconfig new file mode 100644 index 00000000..b5bfc849 --- /dev/null +++ b/configs/imx23evk_defconfig @@ -0,0 +1,34 @@ +# architecture +BR2_arm=y +BR2_arm926t=y + +# Linux headers same as kernel, a 4.8 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_8=y + +# system +BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0" + +# kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.8.6" +BR2_LINUX_KERNEL_DEFCONFIG="mxs" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx23-evk" + +# bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="mx23evk" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.01" +BR2_TARGET_UBOOT_FORMAT_SD=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# To generate SD card image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/mxs/post-image.sh" diff --git a/configs/imx6-sabreauto_defconfig b/configs/imx6-sabreauto_defconfig new file mode 100644 index 00000000..a77b57e4 --- /dev/null +++ b/configs/imx6-sabreauto_defconfig @@ -0,0 +1,40 @@ +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y + +# Linux headers same as kernel, a 5.3 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_3=y + +# System +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc3" + +# required tools to create the SD card image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# Filesystem +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="mx6sabreauto" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.10" +BR2_TARGET_UBOOT_NEEDS_LZOP=y +BR2_TARGET_UBOOT_FORMAT_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="SPL" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.4" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6q-sabreauto imx6dl-sabreauto imx6qp-sabreauto" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y diff --git a/configs/imx6-sabresd_defconfig b/configs/imx6-sabresd_defconfig new file mode 100644 index 00000000..c0dce1ce --- /dev/null +++ b/configs/imx6-sabresd_defconfig @@ -0,0 +1,39 @@ +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# System +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" + +# required tools to create the SD card image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# Filesystem +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="mx6sabresd" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2021.01" +BR2_TARGET_UBOOT_FORMAT_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="SPL" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.9" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6q-sabresd imx6dl-sabresd imx6qp-sabresd" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y diff --git a/configs/imx6-sabresd_qt5_defconfig b/configs/imx6-sabresd_qt5_defconfig new file mode 100644 index 00000000..b23dd901 --- /dev/null +++ b/configs/imx6-sabresd_qt5_defconfig @@ -0,0 +1,100 @@ +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Additional features needed for packages +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y +BR2_TOOLCHAIN_BUILDROOT_CXX=y + +# System +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" + +# required tools to create the SD card image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# Filesystem +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="320M" +BR2_ROOTFS_OVERLAY="board/freescale/imx6-sabresd/rootfs_overlay" + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="mx6sabresd" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2021.01" +BR2_TARGET_UBOOT_FORMAT_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="SPL" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.9" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6q-sabresd imx6dl-sabresd imx6qp-sabresd" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/freescale/imx6-sabresd/linux_qt5.fragment" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# GL driver +BR2_PACKAGE_MESA3D=y +BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_ETNAVIV=y +BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_KMSRO=y +BR2_PACKAGE_MESA3D_OPENGL_ES=y +BR2_PACKAGE_MESA3D_OPENGL_EGL=y + +# Fonts +BR2_PACKAGE_BITSTREAM_VERA=y +BR2_PACKAGE_CANTARELL=y +BR2_PACKAGE_DEJAVU=y +BR2_PACKAGE_FONT_AWESOME=y +BR2_PACKAGE_GHOSTSCRIPT_FONTS=y +BR2_PACKAGE_INCONSOLATA=y +BR2_PACKAGE_LIBERATION=y + +# GL demos +BR2_PACKAGE_GLMARK2=y +BR2_PACKAGE_KMSCUBE=y +BR2_PACKAGE_LIBV4L=y +BR2_PACKAGE_LIBV4L_UTILS=y +BR2_PACKAGE_MESA3D_DEMOS=y + +# Qt5 +BR2_PACKAGE_QT5=y +BR2_PACKAGE_QT5BASE_OPENGL_LIB=y +BR2_PACKAGE_QT5BASE_LINUXFB=y +BR2_PACKAGE_QT5BASE_FONTCONFIG=y +BR2_PACKAGE_QT5BASE_GIF=y +BR2_PACKAGE_QT5BASE_JPEG=y +BR2_PACKAGE_QT5CINEX=y +BR2_PACKAGE_QT5CINEX_HD=y + +# NXP firmware package +BR2_PACKAGE_FREESCALE_IMX=y +BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6Q=y +BR2_PACKAGE_FIRMWARE_IMX=y + +# libdrm tests +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y + +# gstreamer-1.0 +BR2_PACKAGE_GSTREAMER1=y +BR2_PACKAGE_GST1_PLUGINS_GOOD=y +BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_V4L2=y +BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_V4L2_PROBE=y +BR2_PACKAGE_GST1_PLUGINS_BAD=y +BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VIDEOPARSERS=y +BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_KMS=y +BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEOTESTSRC=y + +# For automatic kernel module loading +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y diff --git a/configs/imx6slevk_defconfig b/configs/imx6slevk_defconfig new file mode 100644 index 00000000..90a02964 --- /dev/null +++ b/configs/imx6slevk_defconfig @@ -0,0 +1,26 @@ +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y +# Linux headers same as kernel, a 4.14 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_14=y +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="mx6slevk" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2018.11" +BR2_TARGET_UBOOT_FORMAT_IMX=y +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.14" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6sl-evk" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +# required tools to create the SD card image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/imx6sx-sdb_defconfig b/configs/imx6sx-sdb_defconfig new file mode 100644 index 00000000..a87bdf84 --- /dev/null +++ b/configs/imx6sx-sdb_defconfig @@ -0,0 +1,26 @@ +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y +# Linux headers same as kernel, a 4.14 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_14=y +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="mx6sxsabresd" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2018.01" +BR2_TARGET_UBOOT_FORMAT_IMX=y +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.14.14" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6sx-sdb imx6sx-sdb-reva" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +# required tools to create the SD card image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/imx6ulevk_defconfig b/configs/imx6ulevk_defconfig new file mode 100644 index 00000000..53381d71 --- /dev/null +++ b/configs/imx6ulevk_defconfig @@ -0,0 +1,39 @@ +# architecture +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_NEON_VFPV4=y + +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# system +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" + +# kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.4.8" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6ul-14x14-evk" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="mx6ul_14x14_evk" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2018.07" +BR2_TARGET_UBOOT_FORMAT_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="SPL" +BR2_TARGET_UBOOT_NEEDS_DTC=y + +# required tools to create the SD card image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# filesystem / image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y diff --git a/configs/imx6ullevk_defconfig b/configs/imx6ullevk_defconfig new file mode 100644 index 00000000..81db6626 --- /dev/null +++ b/configs/imx6ullevk_defconfig @@ -0,0 +1,37 @@ +# architecture +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_NEON_VFPV4=y + +# Linux headers same as kernel, a 5.7 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_7=y + +# system +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" + +# kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.7.8" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6ull-14x14-evk" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="mx6ull_14x14_evk" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.07" +BR2_TARGET_UBOOT_FORMAT_DTB_IMX=y +BR2_TARGET_UBOOT_NEEDS_DTC=y + +# required tools to create the SD card image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# filesystem / image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y diff --git a/configs/imx6ulpico_defconfig b/configs/imx6ulpico_defconfig new file mode 100644 index 00000000..56ae5887 --- /dev/null +++ b/configs/imx6ulpico_defconfig @@ -0,0 +1,51 @@ +# architecture +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_NEON_VFPV4=y + +# Linux headers same as kernel, a 4.17 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_17=y + +# system +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc5" + +# rootfs overlay +BR2_ROOTFS_OVERLAY="board/technexion/imx6ulpico/rootfs_overlay" + +# kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.17" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6ul-pico-hobbit" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# wifi firmware for brcm4339 +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM43XX=y + +# For automatic firmware loading +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y + +# wireless packages +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y + +# bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="pico-imx6ul" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2018.05" +BR2_TARGET_UBOOT_FORMAT_IMX=y + +# required tools to create the eMMC image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# filesystem / image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y diff --git a/configs/imx7d-sdb_defconfig b/configs/imx7d-sdb_defconfig new file mode 100644 index 00000000..1a3494b4 --- /dev/null +++ b/configs/imx7d-sdb_defconfig @@ -0,0 +1,36 @@ +# architecture +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_NEON_VFPV4=y + +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# system +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.4.8" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx7d-sdb" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# U-Boot +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="mx7dsabresd" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.01" +BR2_TARGET_UBOOT_FORMAT_DTB_IMX=y + +# Filesystem +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# required tools to create the eMMC image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/imx7dpico_defconfig b/configs/imx7dpico_defconfig new file mode 100644 index 00000000..a3c2af16 --- /dev/null +++ b/configs/imx7dpico_defconfig @@ -0,0 +1,50 @@ +# architecture +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_NEON_VFPV4=y + +# Linux headers same as kernel, a 5.7 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_7=y + +# system +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc4" + +# kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.7.1" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx7d-pico-pi" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_LINUX_KERNEL_INSTALL_TARGET=y + +# bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="SPL" +BR2_TARGET_UBOOT_BOARDNAME="pico-pi-imx7d" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.04" +BR2_TARGET_UBOOT_FORMAT_DTB_IMG=y + +# wifi firmware for brcm43439 +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM43XX=y + +# For automatic firmware loading +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y + +# wireless packages +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y + +# required tools to create the eMMC image +BR2_PACKAGE_HOST_GENIMAGE=y + +# filesystem / image +BR2_ROOTFS_OVERLAY="board/technexion/imx7dpico/rootfs_overlay" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y diff --git a/configs/imx8mmpico_defconfig b/configs/imx8mmpico_defconfig new file mode 100644 index 00000000..f04946a8 --- /dev/null +++ b/configs/imx8mmpico_defconfig @@ -0,0 +1,38 @@ +BR2_aarch64=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_14=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/imx8-bootloader-prepare.sh board/freescale/common/imx/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="${UBOOT_DIR}/arch/arm/dts/imx8mm-pico-pi.dtb" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,TechNexion,linux,9146d4dcb2dda0c7614f74f824cfb20d29bd85f8)/linux-9146d4dcb2dda0c7614f74f824cfb20d29bd85f8.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="tn_imx8" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="freescale/imx8mm-pico-pi freescale/imx8mm-pico-pi-ili9881c freescale/imx8mm-pico-pi-sn65dsi84-hj070na" +BR2_PACKAGE_FREESCALE_IMX=y +BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MM=y +BR2_PACKAGE_FIRMWARE_IMX=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/imx-atf" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="rel_imx_4.14.98_2.0.0_ga" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="imx8mm" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,TechNexion,u-boot-edm,9a070a5b4460124054bc459edfc9d1b43e5403bb)/u-boot-edm-9a070a5b4460124054bc459edfc9d1b43e5403bb.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="pico-imx8mm" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-nodtb.bin" +BR2_TARGET_UBOOT_SPL=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_IMX_MKIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y diff --git a/configs/imx8mpico_defconfig b/configs/imx8mpico_defconfig new file mode 100644 index 00000000..5478f267 --- /dev/null +++ b/configs/imx8mpico_defconfig @@ -0,0 +1,38 @@ +BR2_aarch64=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_14=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/imx8-bootloader-prepare.sh board/freescale/common/imx/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="${UBOOT_DIR}/arch/arm/dts/imx8mq-pico-pi.dtb" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,TechNexion,linux,9146d4dcb2dda0c7614f74f824cfb20d29bd85f8)/linux-9146d4dcb2dda0c7614f74f824cfb20d29bd85f8.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="tn_imx8" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="freescale/imx8mq-pico-pi freescale/imx8mq-pico-pi-dcss-ili9881c" +BR2_PACKAGE_FREESCALE_IMX=y +BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M=y +BR2_PACKAGE_FIRMWARE_IMX=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/imx-atf" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="rel_imx_4.14.98_2.0.0_ga" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="imx8mq" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,TechNexion,u-boot-edm,9a070a5b4460124054bc459edfc9d1b43e5403bb)/u-boot-edm-9a070a5b4460124054bc459edfc9d1b43e5403bb.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="pico-imx8mq" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-nodtb.bin" +BR2_TARGET_UBOOT_SPL=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_IMX_MKIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y diff --git a/configs/imx8mqevk_defconfig b/configs/imx8mqevk_defconfig new file mode 100644 index 00000000..73f3f3dc --- /dev/null +++ b/configs/imx8mqevk_defconfig @@ -0,0 +1,41 @@ +BR2_aarch64=y +BR2_ARM_FPU_VFPV3=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_8=y +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/imx8-bootloader-prepare.sh board/freescale/common/imx/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="${UBOOT_DIR}/arch/arm/dts/imx8mq-evk.dtb" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.8.7" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="freescale/imx8mq-evk" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_PACKAGE_FREESCALE_IMX=y +BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M=y +BR2_PACKAGE_FIRMWARE_IMX=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/imx-atf" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="rel_imx_5.4.24_2.1.0" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="imx8mq" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://source.codeaurora.org/external/imx/uboot-imx" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="rel_imx_5.4.24_2.1.0" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="imx8mq_evk" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-nodtb.bin" +BR2_TARGET_UBOOT_SPL=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_IMX_MKIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y diff --git a/configs/kontron_smarc_sal28_defconfig b/configs/kontron_smarc_sal28_defconfig new file mode 100644 index 00000000..4a72bf3e --- /dev/null +++ b/configs/kontron_smarc_sal28_defconfig @@ -0,0 +1,35 @@ +BR2_aarch64=y +BR2_cortex_a72=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y +BR2_ROOTFS_OVERLAY="board/kontron/smarc-sal28/rootfs_overlay" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/kontron/smarc-sal28/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c $(BINARIES_DIR)/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="freescale/fsl-ls1028a-kontron-sl28 freescale/fsl-ls1028a-kontron-sl28-var2 freescale/fsl-ls1028a-kontron-sl28-var3-ads2 freescale/fsl-ls1028a-kontron-sl28-var4 freescale/fsl-ls1028a-kontron-kbox-a-230-ls" +BR2_LINUX_KERNEL_DTB_KEEP_DIRNAME=y +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_PACKAGE_RCW_SMARC_SAL28=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="128M" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2021.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="kontron_sl28" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +# BR2_TARGET_UBOOT_FORMAT_BIN is not set +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.rom" +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y diff --git a/configs/lafrite_defconfig b/configs/lafrite_defconfig new file mode 100644 index 00000000..b3326f6b --- /dev/null +++ b/configs/lafrite_defconfig @@ -0,0 +1,21 @@ +BR2_aarch64=y +BR2_cortex_a53=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y +BR2_SYSTEM_DHCP="eth0" +BR2_ROOTFS_OVERLAY="board/librecomputer/lafrite/overlay/" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/librecomputer/lafrite/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.9" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="amlogic/meson-gxl-s805x-libretech-ac" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +# BR2_TARGET_ROOTFS_TAR is not set +BR2_PACKAGE_HOST_GENIMAGE=y diff --git a/configs/lego_ev3_defconfig b/configs/lego_ev3_defconfig new file mode 100644 index 00000000..b4a10000 --- /dev/null +++ b/configs/lego_ev3_defconfig @@ -0,0 +1,52 @@ +# architecture +BR2_arm=y +BR2_arm926t=y + +# Toolchain +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y + +# system +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS1" +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/lego/ev3/post-image.sh" +# Linux headers same as kernel, a 4.19 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19" +BR2_LINUX_KERNEL_DEFCONFIG="davinci_all" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/lego/ev3/linux.fragment" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0xc0008000" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="da850-lego-ev3" + +# Target packages +BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES="board/lego/ev3/busybox.fragment" +BR2_PACKAGE_BLUEZ5_UTILS=y +BR2_PACKAGE_BLUEZ5_UTILS_CLIENT=y +BR2_PACKAGE_BRICKD=y +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_TI_CC2560=y + +# filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_SQUASHFS=y +BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y +# BR2_TARGET_ROOTFS_TAR is not set + +# U-Boot +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2018.11" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="legoev3" + +# host +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/licheepi_zero_defconfig b/configs/licheepi_zero_defconfig new file mode 100644 index 00000000..2e1a4139 --- /dev/null +++ b/configs/licheepi_zero_defconfig @@ -0,0 +1,52 @@ +# Target options +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_VFPV4=y + +# Toolchain +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_3=y + +# System configuration +BR2_TARGET_GENERIC_HOSTNAME="licheepi-zero" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot for the LicheePi Zero" +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/licheepi/genimage.cfg" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.5" +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun8i-v3s-licheepi-zero sun8i-v3s-licheepi-zero-dock" + +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_RTL_87XX=y + +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_AUTOSCAN=y + +# Filesystem images +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# Bootloaders +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.10" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="LicheePi_Zero" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/licheepi/boot.cmd" + +# Required host utilities for building an SDCard image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/linksprite_pcduino_defconfig b/configs/linksprite_pcduino_defconfig new file mode 100644 index 00000000..b58f9704 --- /dev/null +++ b/configs/linksprite_pcduino_defconfig @@ -0,0 +1,65 @@ +# Architecture +BR2_arm=y +BR2_cortex_a8=y + +# System settings +BR2_TARGET_GENERIC_HOSTNAME="pcduino" +BR2_TARGET_GENERIC_ISSUE="pcDuino buildroot is ready" + +# Serial port config +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# SD image scripts +BR2_ROOTFS_POST_BUILD_SCRIPT="board/linksprite/pcduino/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/linksprite/pcduino/post-image.sh" + +# For kernel modules autoloading +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.10" +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun4i-a10-pcduino" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/linksprite/pcduino/linux-extras.config" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# U-Boot +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.10" +BR2_TARGET_UBOOT_USE_DEFCONFIG=y +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="Linksprite_pcDuino" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y +BR2_TARGET_UBOOT_FORMAT_BIN=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="u-boot-sunxi-with-spl.bin" + +# Host packages +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y + +# Target packages: wireless support for pcduino-lite-wifi +BR2_PACKAGE_IW=y +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WIRELESS_TOOLS_LIB=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_NL80211=y +BR2_PACKAGE_WPA_SUPPLICANT_CLI=y +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_RTL_81XX=y diff --git a/configs/loongson2k1000_jinlong_defconfig b/configs/loongson2k1000_jinlong_defconfig new file mode 100644 index 00000000..4751b303 --- /dev/null +++ b/configs/loongson2k1000_jinlong_defconfig @@ -0,0 +1,168 @@ +BR2_mips64el=y +BR2_mips_64r2=y +BR2_MIPS_NABI64=y +# BR2_MIPS_SOFT_FLOAT is not set +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/mips64el-linux-gcc-8.x/host" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_INIT_SYSTEMD=y +BR2_TARGET_GENERIC_ROOT_PASSWD="123" +BR2_SYSTEM_BIN_SH_BASH=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +BR2_SYSTEM_ENABLE_NLS=y +BR2_TARGET_LOCALTIME="Asia/Shanghai" +BR2_ROOTFS_OVERLAY="board/loongson/ls2k1000-jinlong/rootfs_overlay" +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_AMIXER=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_GDB=y +BR2_PACKAGE_GDB_SERVER=y +BR2_PACKAGE_GDB_DEBUGGER=y +BR2_PACKAGE_IOZONE=y +BR2_PACKAGE_LATENCYTOP=y +BR2_PACKAGE_NETPERF=y +BR2_PACKAGE_PV=y +BR2_PACKAGE_RT_TESTS=y +BR2_PACKAGE_STRACE=y +BR2_PACKAGE_STRESS=y +BR2_PACKAGE_STRESS_NG=y +BR2_PACKAGE_STRESSAPPTEST=y +BR2_PACKAGE_CMAKE_CTEST=y +BR2_PACKAGE_FLEX=y +BR2_PACKAGE_MAKE=y +BR2_PACKAGE_TREE=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_SOURCEHANSERIF=y +BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR=y +BR2_PACKAGE_PSPLASH=y +BR2_PACKAGE_QT5=y +BR2_PACKAGE_QT5BASE_MYSQL=y +BR2_PACKAGE_QT5BASE_SQLITE_QT=y +BR2_PACKAGE_QT5BASE_DEFAULT_QPA="linuxfb" +BR2_PACKAGE_QT5BASE_FONTCONFIG=y +BR2_PACKAGE_QT5BASE_JPEG=y +BR2_PACKAGE_QT5BASE_PNG=y +BR2_PACKAGE_QT5BASE_DBUS=y +BR2_PACKAGE_QT5BASE_TSLIB=y +BR2_PACKAGE_QT5CHARTS=y +BR2_PACKAGE_QT5MQTT=y +BR2_PACKAGE_QT5SENSORS=y +BR2_PACKAGE_QT5SERIALBUS=y +BR2_PACKAGE_QT5SVG=y +BR2_PACKAGE_QT5XMLPATTERNS=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_MEMTESTER=y +BR2_PACKAGE_PCIUTILS=y +BR2_PACKAGE_RTC_TOOLS=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_LIBARCHIVE_BSDTAR=y +BR2_PACKAGE_LIBARCHIVE_BSDCPIO=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y +BR2_PACKAGE_RHASH_BIN=y +BR2_PACKAGE_HIREDIS=y +BR2_PACKAGE_REDIS=y +BR2_PACKAGE_SQLITE=y +BR2_PACKAGE_SQLITE_STAT4=y +BR2_PACKAGE_SQLITE_ENABLE_COLUMN_METADATA=y +BR2_PACKAGE_SQLITE_ENABLE_FTS3=y +BR2_PACKAGE_SQLITE_ENABLE_JSON1=y +BR2_PACKAGE_SQLITE_ENABLE_UNLOCK_NOTIFY=y +BR2_PACKAGE_SQLITE_SECURE_DELETE=y +BR2_PACKAGE_SQLITE_NO_SYNC=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_LIBUSB=y +BR2_PACKAGE_LIBXML2=y +BR2_PACKAGE_TINYXML=y +BR2_PACKAGE_TINYXML2=y +BR2_PACKAGE_CPPZMQ=y +BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_LIBCURL_VERBOSE=y +BR2_PACKAGE_LIBCURL_TLS_NONE=y +BR2_PACKAGE_LIBMICROHTTPD=y +BR2_PACKAGE_ZEROMQ_NORM=y +BR2_PACKAGE_ZEROMQ_PGM=y +BR2_PACKAGE_ZMQPP=y +BR2_PACKAGE_BOOST=y +BR2_PACKAGE_BOOST_CONTAINER=y +BR2_PACKAGE_BOOST_CONTRACT=y +BR2_PACKAGE_BOOST_EXCEPTION=y +BR2_PACKAGE_BOOST_GRAPH=y +BR2_PACKAGE_BOOST_GRAPH_PARALLEL=y +BR2_PACKAGE_BOOST_IOSTREAMS=y +BR2_PACKAGE_BOOST_LOCALE=y +BR2_PACKAGE_BOOST_LOG=y +BR2_PACKAGE_BOOST_MATH=y +BR2_PACKAGE_BOOST_MPI=y +BR2_PACKAGE_BOOST_PROGRAM_OPTIONS=y +BR2_PACKAGE_BOOST_RANDOM=y +BR2_PACKAGE_BOOST_SERIALIZATION=y +BR2_PACKAGE_BOOST_STACKTRACE=y +BR2_PACKAGE_BOOST_TEST=y +BR2_PACKAGE_BOOST_TYPE_ERASURE=y +BR2_PACKAGE_BOOST_WAVE=y +BR2_PACKAGE_CMOCKA=y +BR2_PACKAGE_LIBEVENT=y +BR2_PACKAGE_PROTOBUF=y +BR2_PACKAGE_COLLECTD=y +BR2_PACKAGE_COLLECTD_EXEC=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_DROPBEAR=y +BR2_PACKAGE_DROPBEAR_DISABLE_REVERSEDNS=y +BR2_PACKAGE_DROPBEAR_LEGACY_CRYPTO=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IFTOP=y +BR2_PACKAGE_IFUPDOWN=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPERF3=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_NETWORK_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_TUI=y +BR2_PACKAGE_NETWORK_MANAGER_MODEM_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_PPPD=y +BR2_PACKAGE_NETWORK_MANAGER_OVS=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_RSYNC=y +BR2_PACKAGE_UHTTPD=y +BR2_PACKAGE_DASH=y +BR2_PACKAGE_ZSH=y +BR2_PACKAGE_FILE=y +BR2_PACKAGE_COREUTILS=y +BR2_PACKAGE_DEBIANUTILS=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_PROCPS_NG=y +BR2_PACKAGE_SYSTEMD_ANALYZE=y +BR2_PACKAGE_UTIL_LINUX_BINARIES=y +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y +BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS=y +BR2_PACKAGE_VIM=y +BR2_PACKAGE_BOOT_RUN=y +BR2_PACKAGE_DRIVER_TESTCASE=y +BR2_PACKAGE_DRIVER_TESTCASE_QT=y +BR2_PACKAGE_LVGL_KIT=y +BR2_PACKAGE_TOUCH_SCREEN_MAP_VALUE=y +BR2_PACKAGE_LS_DEFAULT_ETH_CONFIG=y +BR2_PACKAGE_LS_DEFAULT_ETH_NAME="eth0 eth1" +BR2_PACKAGE_LS_DEFAULT_ETH_IP="192.168.1.10 192.168.2.11" +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 +BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y +BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE="board/loongson/ubinize.cfg" +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=1900 +BR2_PACKAGE_HOST_CMAKE=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/loongson2k1000la_jinlong_defconfig b/configs/loongson2k1000la_jinlong_defconfig new file mode 100644 index 00000000..73541c23 --- /dev/null +++ b/configs/loongson2k1000la_jinlong_defconfig @@ -0,0 +1,300 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_INIT_SYSTEMD=y +BR2_TARGET_GENERIC_ROOT_PASSWD="123" +BR2_SYSTEM_BIN_SH_BASH=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +BR2_SYSTEM_ENABLE_NLS=y +BR2_TARGET_LOCALTIME="Asia/Shanghai" +BR2_ROOTFS_OVERLAY="board/loongson/ls2k1000la/rootfs_overlay" +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_AMIXER=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_FFMPEG_GPL=y +BR2_PACKAGE_FFMPEG_FFPLAY=y +BR2_PACKAGE_FFMPEG_FFPROBE=y +BR2_PACKAGE_FFMPEG_POSTPROC=y +BR2_PACKAGE_V4L2GRAB=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_FIO=y +BR2_PACKAGE_IOZONE=y +BR2_PACKAGE_NETPERF=y +BR2_PACKAGE_PV=y +BR2_PACKAGE_RT_TESTS=y +BR2_PACKAGE_STRESS=y +BR2_PACKAGE_STRESS_NG=y +BR2_PACKAGE_STRESSAPPTEST=y +BR2_PACKAGE_FLEX=y +BR2_PACKAGE_MAKE=y +BR2_PACKAGE_TREE=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_NFS_UTILS=y +BR2_PACKAGE_SOURCEHANSERIF=y +BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR=y +BR2_PACKAGE_DIRECTFB=y +BR2_PACKAGE_FBDUMP=y +BR2_PACKAGE_FBSET=y +BR2_PACKAGE_PSPLASH=y +BR2_PACKAGE_SDL2_DIRECTFB=y +BR2_PACKAGE_SDL2_GFX=y +BR2_PACKAGE_SDL2_IMAGE=y +BR2_PACKAGE_SDL2_MIXER=y +BR2_PACKAGE_SDL2_NET=y +BR2_PACKAGE_SDL2_TTF=y +BR2_PACKAGE_QT5=y +BR2_PACKAGE_QT5BASE_MYSQL=y +BR2_PACKAGE_QT5BASE_SQLITE_QT=y +BR2_PACKAGE_QT5BASE_DEFAULT_QPA="linuxfb" +BR2_PACKAGE_QT5BASE_FONTCONFIG=y +BR2_PACKAGE_QT5BASE_HARFBUZZ=y +BR2_PACKAGE_QT5BASE_GIF=y +BR2_PACKAGE_QT5BASE_JPEG=y +BR2_PACKAGE_QT5BASE_PNG=y +BR2_PACKAGE_QT5BASE_DBUS=y +BR2_PACKAGE_QT5BASE_TSLIB=y +BR2_PACKAGE_QT5CHARTS=y +BR2_PACKAGE_QT5MQTT=y +BR2_PACKAGE_QT5SENSORS=y +BR2_PACKAGE_QT5SERIALBUS=y +BR2_PACKAGE_QT5SVG=y +BR2_PACKAGE_QT5XMLPATTERNS=y +BR2_PACKAGE_XORG7=y +BR2_PACKAGE_DOCKER=y +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_8265=y +BR2_PACKAGE_LINUX_FIRMWARE_RTL_RTW88=y +BR2_PACKAGE_DT_UTILS=y +BR2_PACKAGE_HWLOC=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_IOSTAT=y +BR2_PACKAGE_LIBUIO=y +BR2_PACKAGE_LINUX_SERIAL_TEST=y +BR2_PACKAGE_LM_SENSORS=y +BR2_PACKAGE_LM_SENSORS_FANCONTROL=y +BR2_PACKAGE_LM_SENSORS_PWMCONFIG=y +BR2_PACKAGE_LSHW=y +BR2_PACKAGE_LSUIO=y +BR2_PACKAGE_MEMTESTER=y +BR2_PACKAGE_PCIUTILS=y +BR2_PACKAGE_RS485CONF=y +BR2_PACKAGE_RTC_TOOLS=y +BR2_PACKAGE_SMARTMONTOOLS=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_SYSSTAT=y +BR2_PACKAGE_USBMOUNT=y +BR2_PACKAGE_USBUTILS=y +BR2_PACKAGE_PYTHON3=y +BR2_PACKAGE_PYTHON3_BZIP2=y +BR2_PACKAGE_PYTHON3_CODECSCJK=y +BR2_PACKAGE_PYTHON3_CURSES=y +BR2_PACKAGE_PYTHON3_DECIMAL=y +BR2_PACKAGE_PYTHON3_OSSAUDIODEV=y +BR2_PACKAGE_PYTHON3_READLINE=y +BR2_PACKAGE_PYTHON3_SQLITE=y +BR2_PACKAGE_PYTHON3_XZ=y +BR2_PACKAGE_PYTHON_PIP=y +BR2_PACKAGE_PYTHON_PYQT5=y +BR2_PACKAGE_LIBARCHIVE=y +BR2_PACKAGE_LIBARCHIVE_BSDTAR=y +BR2_PACKAGE_LIBARCHIVE_BSDCPIO=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y +BR2_PACKAGE_LIBSSH2=y +BR2_PACKAGE_RHASH=y +BR2_PACKAGE_RHASH_BIN=y +BR2_PACKAGE_HIREDIS=y +BR2_PACKAGE_REDIS=y +BR2_PACKAGE_SQLITE_STAT4=y +BR2_PACKAGE_SQLITE_ENABLE_COLUMN_METADATA=y +BR2_PACKAGE_SQLITE_ENABLE_FTS3=y +BR2_PACKAGE_SQLITE_ENABLE_JSON1=y +BR2_PACKAGE_SQLITE_ENABLE_UNLOCK_NOTIFY=y +BR2_PACKAGE_SQLITE_SECURE_DELETE=y +BR2_PACKAGE_SQLITE_NO_SYNC=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_OPENCV3=y +BR2_PACKAGE_OPENCV3_WITH_QT5=y +BR2_PACKAGE_OPENCV3_LIB_PYTHON=y +BR2_PACKAGE_OPENCV3_LIB_SHAPE=y +BR2_PACKAGE_OPENCV3_LIB_STITCHING=y +BR2_PACKAGE_OPENCV3_LIB_SUPERRES=y +BR2_PACKAGE_OPENCV3_LIB_TS=y +BR2_PACKAGE_OPENCV3_LIB_VIDEOSTAB=y +BR2_PACKAGE_OPENCV3_BUILD_TESTS=y +BR2_PACKAGE_OPENCV3_BUILD_PERF_TESTS=y +BR2_PACKAGE_OPENCV3_WITH_FFMPEG=y +BR2_PACKAGE_OPENCV3_WITH_JPEG=y +BR2_PACKAGE_OPENCV3_WITH_PNG=y +BR2_PACKAGE_OPENCV3_WITH_PROTOBUF=y +BR2_PACKAGE_OPENCV3_WITH_TIFF=y +BR2_PACKAGE_OPENCV3_WITH_V4L=y +BR2_PACKAGE_OPENCV3_WITH_WEBP=y +BR2_PACKAGE_OPENCV3_INSTALL_DATA=y +BR2_PACKAGE_JSONCPP=y +BR2_PACKAGE_LIBFASTJSON=y +BR2_PACKAGE_TINYXML=y +BR2_PACKAGE_TINYXML2=y +BR2_PACKAGE_LIBCAMERA=y +BR2_PACKAGE_LIBCAMERA_V4L2=y +BR2_PACKAGE_X264=y +BR2_PACKAGE_X265=y +BR2_PACKAGE_CPPZMQ=y +BR2_PACKAGE_LIBCURL=y +BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_LIBCURL_VERBOSE=y +BR2_PACKAGE_LIBCURL_TLS_NONE=y +BR2_PACKAGE_LIBMICROHTTPD=y +BR2_PACKAGE_LIBMODBUS=y +BR2_PACKAGE_PAHO_MQTT_C=y +BR2_PACKAGE_ZEROMQ_NORM=y +BR2_PACKAGE_ZEROMQ_PGM=y +BR2_PACKAGE_ZMQPP=y +BR2_PACKAGE_BOOST=y +BR2_PACKAGE_BOOST_CONTRACT=y +BR2_PACKAGE_BOOST_EXCEPTION=y +BR2_PACKAGE_BOOST_GRAPH=y +BR2_PACKAGE_BOOST_GRAPH_PARALLEL=y +BR2_PACKAGE_BOOST_IOSTREAMS=y +BR2_PACKAGE_BOOST_JSON=y +BR2_PACKAGE_BOOST_LOCALE=y +BR2_PACKAGE_BOOST_LOG=y +BR2_PACKAGE_BOOST_MATH=y +BR2_PACKAGE_BOOST_MPI=y +BR2_PACKAGE_BOOST_NOWIDE=y +BR2_PACKAGE_BOOST_PROGRAM_OPTIONS=y +BR2_PACKAGE_BOOST_PYTHON=y +BR2_PACKAGE_BOOST_RANDOM=y +BR2_PACKAGE_BOOST_SERIALIZATION=y +BR2_PACKAGE_BOOST_STACKTRACE=y +BR2_PACKAGE_BOOST_TEST=y +BR2_PACKAGE_BOOST_TYPE_ERASURE=y +BR2_PACKAGE_BOOST_WAVE=y +BR2_PACKAGE_CMOCKA=y +BR2_PACKAGE_LIBEVENT=y +BR2_PACKAGE_LIBUV=y +BR2_PACKAGE_COLLECTD=y +BR2_PACKAGE_COLLECTD_EXEC=y +BR2_PACKAGE_COLLECTD_IPTABLES=y +BR2_PACKAGE_COLLECTD_NFS=y +BR2_PACKAGE_BLUEZ_TOOLS=y +BR2_PACKAGE_BLUEZ5_UTILS=y +BR2_PACKAGE_BLUEZ5_UTILS_OBEX=y +BR2_PACKAGE_BLUEZ5_UTILS_CLIENT=y +BR2_PACKAGE_BLUEZ5_UTILS_DEPRECATED=y +BR2_PACKAGE_BLUEZ5_UTILS_EXPERIMENTAL=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_HEALTH=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_MESH=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_MIDI=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_NFC=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_SAP=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_SIXAXIS=y +BR2_PACKAGE_BLUEZ5_UTILS_TEST=y +BR2_PACKAGE_BLUEZ5_UTILS_TOOLS_HID2HCI=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_DHCP=y +BR2_PACKAGE_DHCP_SERVER=y +BR2_PACKAGE_DHCP_SERVER_DELAYED_ACK=y +BR2_PACKAGE_DHCP_RELAY=y +BR2_PACKAGE_DHCP_CLIENT=y +BR2_PACKAGE_DHCPCD5=y +BR2_PACKAGE_DROPBEAR=y +BR2_PACKAGE_DROPBEAR_DISABLE_REVERSEDNS=y +BR2_PACKAGE_DROPBEAR_LEGACY_CRYPTO=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_HOSTAPD=y +BR2_PACKAGE_IFTOP=y +BR2_PACKAGE_IFUPDOWN=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPERF3=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES_BPF_NFSYNPROXY=y +BR2_PACKAGE_IPTABLES_NFTABLES=y +BR2_PACKAGE_IW=y +BR2_PACKAGE_LFTP=y +BR2_PACKAGE_LFTP_CMD_TORRENT=y +BR2_PACKAGE_LFTP_PROTO_FISH=y +BR2_PACKAGE_LFTP_PROTO_HTTP=y +BR2_PACKAGE_LFTP_PROTO_SFTP=y +BR2_PACKAGE_LIGHTTPD=y +BR2_PACKAGE_LIGHTTPD_OPENSSL=y +BR2_PACKAGE_LIGHTTPD_ZLIB=y +BR2_PACKAGE_LIGHTTPD_BZIP2=y +BR2_PACKAGE_LIGHTTPD_PCRE=y +BR2_PACKAGE_LIGHTTPD_WEBDAV=y +BR2_PACKAGE_LRZSZ=y +BR2_PACKAGE_NETSNMP=y +BR2_PACKAGE_NETSNMP_STATIC=y +BR2_PACKAGE_NETWORK_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_TUI=y +BR2_PACKAGE_NETWORK_MANAGER_MODEM_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_PPPD=y +BR2_PACKAGE_NETWORK_MANAGER_OVS=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_RSYNC=y +BR2_PACKAGE_UHTTPD=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_AP_SUPPORT=y +BR2_PACKAGE_WPA_SUPPLICANT_WIFI_DISPLAY=y +BR2_PACKAGE_WPA_SUPPLICANT_MESH_NETWORKING=y +BR2_PACKAGE_WPA_SUPPLICANT_AUTOSCAN=y +BR2_PACKAGE_WPA_SUPPLICANT_EAP=y +BR2_PACKAGE_WPA_SUPPLICANT_HOTSPOT=y +BR2_PACKAGE_WPA_SUPPLICANT_DEBUG_SYSLOG=y +BR2_PACKAGE_WPA_SUPPLICANT_WPS=y +BR2_PACKAGE_WPA_SUPPLICANT_WPA3=y +BR2_PACKAGE_WPA_SUPPLICANT_CLI=y +BR2_PACKAGE_WPA_SUPPLICANT_WPA_CLIENT_SO=y +BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y +BR2_PACKAGE_WPA_SUPPLICANT_DBUS=y +BR2_PACKAGE_WPA_SUPPLICANT_DBUS_INTROSPECTION=y +BR2_PACKAGE_DASH=y +BR2_PACKAGE_ZSH=y +BR2_PACKAGE_FILE=y +BR2_PACKAGE_COREUTILS=y +BR2_PACKAGE_DEBIANUTILS=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_PROCPS_NG=y +BR2_PACKAGE_SYSTEMD_ANALYZE=y +BR2_PACKAGE_UTIL_LINUX_BINARIES=y +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y +BR2_PACKAGE_UTIL_LINUX_RFKILL=y +BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS=y +BR2_PACKAGE_LESS=y +BR2_PACKAGE_MC=y +BR2_PACKAGE_VIM=y +BR2_PACKAGE_BOOT_RUN=y +BR2_PACKAGE_LVGL_KIT=y +BR2_PACKAGE_TOUCH_SCREEN_MAP_VALUE=y +BR2_PACKAGE_LS_DEFAULT_ETH_CONFIG=y +BR2_PACKAGE_LS_DEFAULT_ETH_NAME="eth0 eth1" +BR2_PACKAGE_LS_DEFAULT_ETH_IP="192.168.1.10 192.168.2.11" +BR2_PACKAGE_LIBGO_LA=y +BR2_PACKAGE_LS3_SYSTEM_TOOL=y +BR2_PACKAGE_LS3_SYSTEM_TOOL_QT=y +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 +BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y +BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE="board/loongson/ubinize.cfg" +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=1900 +BR2_PACKAGE_HOST_CMAKE=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_PYTHON3=y diff --git a/configs/loongson2k1000la_jinlong_fastboot_defconfig b/configs/loongson2k1000la_jinlong_fastboot_defconfig new file mode 100644 index 00000000..b5672f73 --- /dev/null +++ b/configs/loongson2k1000la_jinlong_fastboot_defconfig @@ -0,0 +1,179 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_ROOTFS_MERGED_USR=y +BR2_TARGET_GENERIC_ROOT_PASSWD="123" +BR2_SYSTEM_BIN_SH_BASH=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +BR2_SYSTEM_ENABLE_NLS=y +BR2_TARGET_TZ_INFO=y +BR2_TARGET_LOCALTIME="Asia/Shanghai" +BR2_ROOTFS_OVERLAY="board/loongson/ls2k1000la/rootfs_overlay" +BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_AMIXER=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_XZ=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_IOZONE=y +BR2_PACKAGE_NETPERF=y +BR2_PACKAGE_PV=y +BR2_PACKAGE_RT_TESTS=y +BR2_PACKAGE_STRESS=y +BR2_PACKAGE_STRESS_NG=y +BR2_PACKAGE_STRESSAPPTEST=y +BR2_PACKAGE_FLEX=y +BR2_PACKAGE_MAKE=y +BR2_PACKAGE_TREE=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_SOURCEHANSERIF=y +BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR=y +BR2_PACKAGE_QT5=y +BR2_PACKAGE_QT5BASE_MYSQL=y +BR2_PACKAGE_QT5BASE_SQLITE_QT=y +BR2_PACKAGE_QT5BASE_DEFAULT_QPA="linuxfb" +BR2_PACKAGE_QT5BASE_FONTCONFIG=y +BR2_PACKAGE_QT5BASE_JPEG=y +BR2_PACKAGE_QT5BASE_PNG=y +BR2_PACKAGE_QT5BASE_DBUS=y +BR2_PACKAGE_QT5BASE_TSLIB=y +BR2_PACKAGE_QT5CHARTS=y +BR2_PACKAGE_QT5MQTT=y +BR2_PACKAGE_QT5SENSORS=y +BR2_PACKAGE_QT5SERIALBUS=y +BR2_PACKAGE_QT5SVG=y +BR2_PACKAGE_QT5XMLPATTERNS=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_MEMTESTER=y +BR2_PACKAGE_PCIUTILS=y +BR2_PACKAGE_RTC_TOOLS=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_LIBARCHIVE=y +BR2_PACKAGE_LIBARCHIVE_BSDTAR=y +BR2_PACKAGE_LIBARCHIVE_BSDCPIO=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y +BR2_PACKAGE_GNUTLS=y +BR2_PACKAGE_RHASH=y +BR2_PACKAGE_RHASH_BIN=y +BR2_PACKAGE_HIREDIS=y +BR2_PACKAGE_REDIS=y +BR2_PACKAGE_SQLITE=y +BR2_PACKAGE_SQLITE_STAT4=y +BR2_PACKAGE_SQLITE_ENABLE_COLUMN_METADATA=y +BR2_PACKAGE_SQLITE_ENABLE_FTS3=y +BR2_PACKAGE_SQLITE_ENABLE_JSON1=y +BR2_PACKAGE_SQLITE_ENABLE_UNLOCK_NOTIFY=y +BR2_PACKAGE_SQLITE_SECURE_DELETE=y +BR2_PACKAGE_SQLITE_NO_SYNC=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_LIBUSB=y +BR2_PACKAGE_JSONCPP=y +BR2_PACKAGE_LIBXML2=y +BR2_PACKAGE_TINYXML=y +BR2_PACKAGE_TINYXML2=y +BR2_PACKAGE_CPPZMQ=y +BR2_PACKAGE_LIBCURL=y +BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_LIBCURL_VERBOSE=y +BR2_PACKAGE_LIBCURL_TLS_NONE=y +BR2_PACKAGE_LIBMICROHTTPD=y +BR2_PACKAGE_ZEROMQ_NORM=y +BR2_PACKAGE_ZEROMQ_PGM=y +BR2_PACKAGE_ZMQPP=y +BR2_PACKAGE_BOOST=y +BR2_PACKAGE_BOOST_CONTAINER=y +BR2_PACKAGE_BOOST_CONTRACT=y +BR2_PACKAGE_BOOST_EXCEPTION=y +BR2_PACKAGE_BOOST_GRAPH=y +BR2_PACKAGE_BOOST_GRAPH_PARALLEL=y +BR2_PACKAGE_BOOST_IOSTREAMS=y +BR2_PACKAGE_BOOST_LOCALE=y +BR2_PACKAGE_BOOST_LOG=y +BR2_PACKAGE_BOOST_MATH=y +BR2_PACKAGE_BOOST_MPI=y +BR2_PACKAGE_BOOST_PROGRAM_OPTIONS=y +BR2_PACKAGE_BOOST_RANDOM=y +BR2_PACKAGE_BOOST_SERIALIZATION=y +BR2_PACKAGE_BOOST_STACKTRACE=y +BR2_PACKAGE_BOOST_TEST=y +BR2_PACKAGE_BOOST_TYPE_ERASURE=y +BR2_PACKAGE_BOOST_WAVE=y +BR2_PACKAGE_CMOCKA=y +BR2_PACKAGE_LIBCAP=y +BR2_PACKAGE_LIBEVENT=y +BR2_PACKAGE_LIBUV=y +BR2_PACKAGE_PROTOBUF=y +BR2_PACKAGE_PCRE_UCP=y +BR2_PACKAGE_COLLECTD=y +BR2_PACKAGE_COLLECTD_EXEC=y +BR2_PACKAGE_COLLECTD_IPTABLES=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_DROPBEAR=y +BR2_PACKAGE_DROPBEAR_DISABLE_REVERSEDNS=y +BR2_PACKAGE_DROPBEAR_LEGACY_CRYPTO=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IFTOP=y +BR2_PACKAGE_IFUPDOWN=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPERF3=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES_BPF_NFSYNPROXY=y +BR2_PACKAGE_IPTABLES_NFTABLES=y +BR2_PACKAGE_LFTP=y +BR2_PACKAGE_LFTP_CMD_TORRENT=y +BR2_PACKAGE_LFTP_PROTO_FISH=y +BR2_PACKAGE_LFTP_PROTO_HTTP=y +BR2_PACKAGE_LFTP_PROTO_SFTP=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_RSYNC=y +BR2_PACKAGE_UHTTPD=y +BR2_PACKAGE_DASH=y +BR2_PACKAGE_ZSH=y +BR2_PACKAGE_FILE=y +BR2_PACKAGE_COREUTILS=y +BR2_PACKAGE_DEBIANUTILS=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_KMOD=y +BR2_PACKAGE_KMOD_TOOLS=y +BR2_PACKAGE_PROCPS_NG=y +BR2_PACKAGE_UTIL_LINUX_BINARIES=y +BR2_PACKAGE_UTIL_LINUX_AGETTY=y +BR2_PACKAGE_UTIL_LINUX_FSCK=y +BR2_PACKAGE_UTIL_LINUX_MOUNT=y +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y +BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS=y +BR2_PACKAGE_VIM=y +BR2_PACKAGE_DRIVER_TESTCASE=y +BR2_PACKAGE_DRIVER_TESTCASE_QT=y +BR2_PACKAGE_LVGL_KIT=y +BR2_PACKAGE_TOUCH_SCREEN_MAP_VALUE=y +BR2_PACKAGE_LS_DEFAULT_ETH_CONFIG=y +BR2_PACKAGE_LS_DEFAULT_ETH_NAME="eth0 eth1" +BR2_PACKAGE_LS_DEFAULT_ETH_IP="192.168.1.10 192.168.2.11" +BR2_PACKAGE_FASTBOOT_BUSYBOX=y +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 +BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y +BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE="board/loongson/ubinize.cfg" +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=1900 +BR2_PACKAGE_HOST_CMAKE=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/loongson2k1000la_jinlong_mini_defconfig b/configs/loongson2k1000la_jinlong_mini_defconfig new file mode 100644 index 00000000..adcebe38 --- /dev/null +++ b/configs/loongson2k1000la_jinlong_mini_defconfig @@ -0,0 +1,78 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd mini rootfs" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_INIT_SYSTEMD=y +BR2_TARGET_GENERIC_ROOT_PASSWD="123" +BR2_SYSTEM_BIN_SH_BASH=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +# BR2_ENABLE_LOCALE_PURGE is not set +BR2_TARGET_LOCALTIME="Asia/Shanghai" +BR2_ROOTFS_OVERLAY="board/loongson/ls2k1000la/rootfs_mini_overlay" +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_AMIXER=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_BZIP2=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_IOZONE=y +BR2_PACKAGE_NETPERF=y +BR2_PACKAGE_PV=y +BR2_PACKAGE_RT_TESTS=y +BR2_PACKAGE_STRESS=y +BR2_PACKAGE_STRESS_NG=y +BR2_PACKAGE_STRESSAPPTEST=y +BR2_PACKAGE_FLEX=y +BR2_PACKAGE_TREE=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_PSPLASH=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_MEMTESTER=y +BR2_PACKAGE_PCIUTILS=y +BR2_PACKAGE_RTC_TOOLS=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_PCRE=y +BR2_PACKAGE_PCRE_UCP=y +BR2_PACKAGE_PCRE2=y +BR2_PACKAGE_PCRE2_16=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IFTOP=y +BR2_PACKAGE_IFUPDOWN=y +BR2_PACKAGE_IPERF3=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_LRZSZ=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_RSYNC=y +BR2_PACKAGE_COREUTILS=y +BR2_PACKAGE_PROCPS_NG=y +BR2_PACKAGE_SYSTEMD_ANALYZE=y +BR2_PACKAGE_UTIL_LINUX_BINARIES=y +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y +BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS=y +BR2_PACKAGE_BOOT_RUN=y +BR2_PACKAGE_LVGL_KIT=y +BR2_PACKAGE_TOUCH_SCREEN_MAP_VALUE=y +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 +BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y +BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE="board/loongson/ubinize.cfg" +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=1900 +BR2_PACKAGE_HOST_CMAKE=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/loongson2k1000la_jinlong_pure_busybox_defconfig b/configs/loongson2k1000la_jinlong_pure_busybox_defconfig new file mode 100644 index 00000000..82f735a0 --- /dev/null +++ b/configs/loongson2k1000la_jinlong_pure_busybox_defconfig @@ -0,0 +1,38 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd ramdisk" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_ROOTFS_MERGED_USR=y +# BR2_TARGET_ENABLE_ROOT_LOGIN is not set +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +# BR2_ENABLE_LOCALE_PURGE is not set +BR2_PACKAGE_PV=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_ETHTOOL=y +# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_RSYNC=y +# BR2_PACKAGE_URANDOM_SCRIPTS is not set +BR2_PACKAGE_UTIL_LINUX_LIBFDISK=y +BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS=y +BR2_PACKAGE_UTIL_LINUX_FSCK=y +BR2_PACKAGE_UTIL_LINUX_MOUNT=y +# BR2_PACKAGE_LS2_SYS_CONFIG_TOOL is not set +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 +BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y +BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE="board/loongson/ubinize.cfg" +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=1900 +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MKPASSWD=y diff --git a/configs/loongson2k1000la_jinlong_py3_defconfig b/configs/loongson2k1000la_jinlong_py3_defconfig new file mode 100644 index 00000000..04ade26e --- /dev/null +++ b/configs/loongson2k1000la_jinlong_py3_defconfig @@ -0,0 +1,459 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_INIT_SYSTEMD=y +BR2_TARGET_GENERIC_ROOT_PASSWD="123" +BR2_SYSTEM_BIN_SH_BASH=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +BR2_SYSTEM_ENABLE_NLS=y +BR2_TARGET_LOCALTIME="Asia/Shanghai" +BR2_ROOTFS_OVERLAY="board/loongson/ls2k1000la/rootfs_overlay" +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_AMIXER=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_FFMPEG_GPL=y +BR2_PACKAGE_FFMPEG_FFPLAY=y +BR2_PACKAGE_FFMPEG_FFPROBE=y +BR2_PACKAGE_FFMPEG_POSTPROC=y +BR2_PACKAGE_V4L2GRAB=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_COREMARK=y +BR2_PACKAGE_COREMARK_PRO=y +BR2_PACKAGE_DHRYSTONE=y +BR2_PACKAGE_IOZONE=y +BR2_PACKAGE_NETPERF=y +BR2_PACKAGE_PV=y +BR2_PACKAGE_RT_TESTS=y +BR2_PACKAGE_STRESS=y +BR2_PACKAGE_STRESS_NG=y +BR2_PACKAGE_STRESSAPPTEST=y +BR2_PACKAGE_FLEX=y +BR2_PACKAGE_MAKE=y +BR2_PACKAGE_TREE=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_SOURCEHANSERIF=y +BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR=y +BR2_PACKAGE_DIRECTFB=y +BR2_PACKAGE_FBDUMP=y +BR2_PACKAGE_FBSET=y +BR2_PACKAGE_PSPLASH=y +BR2_PACKAGE_SDL2_DIRECTFB=y +BR2_PACKAGE_SDL2_GFX=y +BR2_PACKAGE_SDL2_IMAGE=y +BR2_PACKAGE_SDL2_MIXER=y +BR2_PACKAGE_SDL2_NET=y +BR2_PACKAGE_SDL2_TTF=y +BR2_PACKAGE_QT5=y +BR2_PACKAGE_QT5BASE_MYSQL=y +BR2_PACKAGE_QT5BASE_SQLITE_QT=y +BR2_PACKAGE_QT5BASE_DEFAULT_QPA="linuxfb" +BR2_PACKAGE_QT5BASE_HARFBUZZ=y +BR2_PACKAGE_QT5BASE_GIF=y +BR2_PACKAGE_QT5BASE_JPEG=y +BR2_PACKAGE_QT5BASE_PNG=y +BR2_PACKAGE_QT5BASE_DBUS=y +BR2_PACKAGE_QT5BASE_TSLIB=y +BR2_PACKAGE_QT5CHARTS=y +BR2_PACKAGE_QT5MQTT=y +BR2_PACKAGE_QT5SENSORS=y +BR2_PACKAGE_QT5SERIALBUS=y +BR2_PACKAGE_QT5SVG=y +BR2_PACKAGE_QT5XMLPATTERNS=y +BR2_PACKAGE_XORG7=y +BR2_PACKAGE_DOCKER=y +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_8265=y +BR2_PACKAGE_LINUX_FIRMWARE_RTL_RTW88=y +BR2_PACKAGE_DT_UTILS=y +BR2_PACKAGE_HWLOC=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_IOSTAT=y +BR2_PACKAGE_LIBUIO=y +BR2_PACKAGE_LINUX_SERIAL_TEST=y +BR2_PACKAGE_LM_SENSORS=y +BR2_PACKAGE_LM_SENSORS_FANCONTROL=y +BR2_PACKAGE_LM_SENSORS_PWMCONFIG=y +BR2_PACKAGE_LSHW=y +BR2_PACKAGE_LSUIO=y +BR2_PACKAGE_MEMTESTER=y +BR2_PACKAGE_PCIUTILS=y +BR2_PACKAGE_RS485CONF=y +BR2_PACKAGE_RTC_TOOLS=y +BR2_PACKAGE_SMARTMONTOOLS=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_SYSSTAT=y +BR2_PACKAGE_USBMOUNT=y +BR2_PACKAGE_USBUTILS=y +BR2_PACKAGE_PYTHON3=y +BR2_PACKAGE_PYTHON3_PY_PYC=y +BR2_PACKAGE_PYTHON3_DECIMAL=y +BR2_PACKAGE_PYTHON3_OSSAUDIODEV=y +BR2_PACKAGE_PYTHON_AIOBLESCAN=y +BR2_PACKAGE_PYTHON_AIOCOAP=y +BR2_PACKAGE_PYTHON_AIOHTTP_CORS=y +BR2_PACKAGE_PYTHON_AIOHTTP_DEBUGTOOLBAR=y +BR2_PACKAGE_PYTHON_AIOHTTP_MAKO=y +BR2_PACKAGE_PYTHON_AIOHTTP_REMOTES=y +BR2_PACKAGE_PYTHON_AIOHTTP_SECURITY=y +BR2_PACKAGE_PYTHON_AIOHTTP_SESSION=y +BR2_PACKAGE_PYTHON_AIOHTTP_SSE=y +BR2_PACKAGE_PYTHON_AIOJOBS=y +BR2_PACKAGE_PYTHON_AIOLOGSTASH=y +BR2_PACKAGE_PYTHON_AIOMONITOR=y +BR2_PACKAGE_PYTHON_AIORWLOCK=y +BR2_PACKAGE_PYTHON_AIOSIGNAL=y +BR2_PACKAGE_PYTHON_AIOZIPKIN=y +BR2_PACKAGE_PYTHON_ALSAAUDIO=y +BR2_PACKAGE_PYTHON_ANSICOLORS=y +BR2_PACKAGE_PYTHON_ARGON2_CFFI=y +BR2_PACKAGE_PYTHON_ARROW=y +BR2_PACKAGE_PYTHON_ASYNC_LRU=y +BR2_PACKAGE_PYTHON_AVRO=y +BR2_PACKAGE_PYTHON_BLEAK=y +BR2_PACKAGE_PYTHON_BOTO3=y +BR2_PACKAGE_PYTHON_BOTTLE=y +BR2_PACKAGE_PYTHON_BROTLI=y +BR2_PACKAGE_PYTHON_BSDIFF4=y +BR2_PACKAGE_PYTHON_BUNCH=y +BR2_PACKAGE_PYTHON_CACHED_PROPERTY=y +BR2_PACKAGE_PYTHON_CANOPEN=y +BR2_PACKAGE_PYTHON_CHANNELS_REDIS=y +BR2_PACKAGE_PYTHON_CHEETAH=y +BR2_PACKAGE_PYTHON_CHERRYPY=y +BR2_PACKAGE_PYTHON_COLORAMA=y +BR2_PACKAGE_PYTHON_COLORZERO=y +BR2_PACKAGE_PYTHON_CONFIGSHELL_FB=y +BR2_PACKAGE_PYTHON_CRAYONS=y +BR2_PACKAGE_PYTHON_CRC16=y +BR2_PACKAGE_PYTHON_CRCMOD=y +BR2_PACKAGE_PYTHON_CRONTAB=y +BR2_PACKAGE_PYTHON_CROSSBAR=y +BR2_PACKAGE_PYTHON_DAEMON=y +BR2_PACKAGE_PYTHON_DAEMONIZE=y +BR2_PACKAGE_PYTHON_DEFUSEDXML=y +BR2_PACKAGE_PYTHON_DIALOG3=y +BR2_PACKAGE_PYTHON_DICTTOXML=y +BR2_PACKAGE_PYTHON_DJANGO_ENUMFIELDS=y +BR2_PACKAGE_PYTHON_DNSPYTHON=y +BR2_PACKAGE_PYTHON_DOCKER=y +BR2_PACKAGE_PYTHON_DOCKER_PYCREDS=y +BR2_PACKAGE_PYTHON_DOCKERPTY=y +BR2_PACKAGE_PYTHON_DOCOPT=y +BR2_PACKAGE_PYTHON_DOMINATE=y +BR2_PACKAGE_PYTHON_DPKT=y +BR2_PACKAGE_PYTHON_ESPTOOL=y +BR2_PACKAGE_PYTHON_FALCON=y +BR2_PACKAGE_PYTHON_FILELOCK=y +BR2_PACKAGE_PYTHON_FIRE=y +BR2_PACKAGE_PYTHON_FLASK_BABEL=y +BR2_PACKAGE_PYTHON_FLASK_CORS=y +BR2_PACKAGE_PYTHON_FLASK_JSONRPC=y +BR2_PACKAGE_PYTHON_FLASK_LOGIN=y +BR2_PACKAGE_PYTHON_FLASK_SQLALCHEMY=y +BR2_PACKAGE_PYTHON_FLATBUFFERS=y +BR2_PACKAGE_PYTHON_FLUP=y +BR2_PACKAGE_PYTHON_FUTURE=y +BR2_PACKAGE_PYTHON_GITDB2=y +BR2_PACKAGE_PYTHON_GUNICORN=y +BR2_PACKAGE_PYTHON_HTML5LIB=y +BR2_PACKAGE_PYTHON_HTTPLIB2=y +BR2_PACKAGE_PYTHON_HUEPY=y +BR2_PACKAGE_PYTHON_HUMANIZE=y +BR2_PACKAGE_PYTHON_IBMIOTF=y +BR2_PACKAGE_PYTHON_INFLECTION=y +BR2_PACKAGE_PYTHON_INFLUXDB=y +BR2_PACKAGE_PYTHON_INIPARSE=y +BR2_PACKAGE_PYTHON_INTELHEX=y +BR2_PACKAGE_PYTHON_IOWAIT=y +BR2_PACKAGE_PYTHON_IPDB=y +BR2_PACKAGE_PYTHON_IPTABLES=y +BR2_PACKAGE_PYTHON_JANUS=y +BR2_PACKAGE_PYTHON_JSON_SCHEMA_VALIDATOR=y +BR2_PACKAGE_PYTHON_JSONMODELS=y +BR2_PACKAGE_PYTHON_KEYRING=y +BR2_PACKAGE_PYTHON_LIBUSB1=y +BR2_PACKAGE_PYTHON_LOGBOOK=y +BR2_PACKAGE_PYTHON_M2CRYPTO=y +BR2_PACKAGE_PYTHON_M2R=y +BR2_PACKAGE_PYTHON_MARKDOWN2=y +BR2_PACKAGE_PYTHON_MATPLOTLIB=y +BR2_PACKAGE_PYTHON_MATPLOTLIB_QT=y +BR2_PACKAGE_PYTHON_MELD3=y +BR2_PACKAGE_PYTHON_MIMEPARSE=y +BR2_PACKAGE_PYTHON_MODBUS_TK=y +BR2_PACKAGE_PYTHON_MUTAGEN=y +BR2_PACKAGE_PYTHON_MWSCRAPE=y +BR2_PACKAGE_PYTHON_MWSCRAPE2SLOB=y +BR2_PACKAGE_PYTHON_NESTED_DICT=y +BR2_PACKAGE_PYTHON_NETIFACES=y +BR2_PACKAGE_PYTHON_NETWORKMANAGER=y +BR2_PACKAGE_PYTHON_NETWORKX=y +BR2_PACKAGE_PYTHON_OPCUA_ASYNCIO=y +BR2_PACKAGE_PYTHON_PERIPHERY=y +BR2_PACKAGE_PYTHON_PIEXIF=y +BR2_PACKAGE_PYTHON_PIGPIO=y +BR2_PACKAGE_PYTHON_PILLOW=y +BR2_PACKAGE_PYTHON_PIP=y +BR2_PACKAGE_PYTHON_POSIX_IPC=y +BR2_PACKAGE_PYTHON_PROTOBUF=y +BR2_PACKAGE_PYTHON_PUDB=y +BR2_PACKAGE_PYTHON_PYALSA=y +BR2_PACKAGE_PYTHON_PYBIND=y +BR2_PACKAGE_PYTHON_PYCAIRO=y +BR2_PACKAGE_PYTHON_PYCLI=y +BR2_PACKAGE_PYTHON_PYDANTIC=y +BR2_PACKAGE_PYTHON_PYELFTOOLS=y +BR2_PACKAGE_PYTHON_PYFTPDLIB=y +BR2_PACKAGE_PYTHON_PYGAME=y +BR2_PACKAGE_PYTHON_PYGAME_IMAGE=y +BR2_PACKAGE_PYTHON_PYGAME_EXAMPLES=y +BR2_PACKAGE_PYTHON_PYGAME_FONT=y +BR2_PACKAGE_PYTHON_PYGAME_MIXER=y +BR2_PACKAGE_PYTHON_PYGAME_MIXER_MUSIC=y +BR2_PACKAGE_PYTHON_PYINOTIFY=y +BR2_PACKAGE_PYTHON_PYJWT=y +BR2_PACKAGE_PYTHON_PYLIBFTDI=y +BR2_PACKAGE_PYTHON_PYMODBUS=y +BR2_PACKAGE_PYTHON_PYMYSQL=y +BR2_PACKAGE_PYTHON_PYPARTED=y +BR2_PACKAGE_PYTHON_PYRATEMP=y +BR2_PACKAGE_PYTHON_PYROUTE2=y +BR2_PACKAGE_PYTHON_PYSENDFILE=y +BR2_PACKAGE_PYTHON_PYSFTP=y +BR2_PACKAGE_PYTHON_PYSMB=y +BR2_PACKAGE_PYTHON_PYSNMP_MIBS=y +BR2_PACKAGE_PYTHON_PYSOCKS=y +BR2_PACKAGE_PYTHON_PYTABLEREADER=y +BR2_PACKAGE_PYTHON_PYTABLEWRITER=y +BR2_PACKAGE_PYTHON_PYTEST_ASYNCIO=y +BR2_PACKAGE_PYTHON_PYUDEV=y +BR2_PACKAGE_PYTHON_PYUSB=y +BR2_PACKAGE_PYTHON_PYXB=y +BR2_PACKAGE_PYTHON_PYZMQ=y +BR2_PACKAGE_PYTHON_RAVEN=y +BR2_PACKAGE_PYTHON_REDIS=y +BR2_PACKAGE_PYTHON_REENTRY=y +BR2_PACKAGE_PYTHON_REGEX=y +BR2_PACKAGE_PYTHON_REMI=y +BR2_PACKAGE_PYTHON_REQUEST_ID=y +BR2_PACKAGE_PYTHON_RPI_WS281X=y +BR2_PACKAGE_PYTHON_RTSLIB_FB=y +BR2_PACKAGE_PYTHON_SCANDIR=y +BR2_PACKAGE_PYTHON_SCAPY=y +BR2_PACKAGE_PYTHON_SCHEDULE=y +BR2_PACKAGE_PYTHON_SEE=y +BR2_PACKAGE_PYTHON_SEMVER=y +BR2_PACKAGE_PYTHON_SENTRY_SDK=y +BR2_PACKAGE_PYTHON_SERIAL_ASYNCIO=y +BR2_PACKAGE_PYTHON_SH=y +BR2_PACKAGE_PYTHON_SHUTILWHICH=y +BR2_PACKAGE_PYTHON_SIMPLEAUDIO=y +BR2_PACKAGE_PYTHON_SIMPLEGENERIC=y +BR2_PACKAGE_PYTHON_SIMPLEJSON=y +BR2_PACKAGE_PYTHON_SIMPLELOGGING=y +BR2_PACKAGE_PYTHON_SIMPLESQLITE=y +BR2_PACKAGE_PYTHON_SMBUS_CFFI=y +BR2_PACKAGE_PYTHON_SNAPPY=y +BR2_PACKAGE_PYTHON_SOCKETIO=y +BR2_PACKAGE_PYTHON_SOCKJS=y +BR2_PACKAGE_PYTHON_SPIDEV=y +BR2_PACKAGE_PYTHON_SYSTEMD=y +BR2_PACKAGE_PYTHON_TEXTTABLE=y +BR2_PACKAGE_PYTHON_THRIFT=y +BR2_PACKAGE_PYTHON_TINYRPC=y +BR2_PACKAGE_PYTHON_TOMAKO=y +BR2_PACKAGE_PYTHON_TQDM=y +BR2_PACKAGE_PYTHON_TWISTED_HTTP2=y +BR2_PACKAGE_PYTHON_UJSON=y +BR2_PACKAGE_PYTHON_UVLOOP=y +BR2_PACKAGE_PYTHON_VALIDATORS=y +BR2_PACKAGE_PYTHON_VERSIONTOOLS=y +BR2_PACKAGE_PYTHON_VISITOR=y +BR2_PACKAGE_PYTHON_WEB2PY=y +BR2_PACKAGE_PYTHON_WEBPY=y +BR2_PACKAGE_PYTHON_WEBSOCKETS=y +BR2_PACKAGE_PYTHON_WHOOSH=y +BR2_PACKAGE_PYTHON_WS4PY=y +BR2_PACKAGE_PYTHON_WSACCEL=y +BR2_PACKAGE_PYTHON_WTFORMS=y +BR2_PACKAGE_PYTHON_XLIB=y +BR2_PACKAGE_PYTHON_XLSXWRITER=y +BR2_PACKAGE_PYTHON_XLUTILS=y +BR2_PACKAGE_PYTHON_XMLTODICT=y +BR2_PACKAGE_PYTHON_XMODEM=y +BR2_PACKAGE_PYTHON_ZC_LOCKFILE=y +BR2_PACKAGE_PYTHON_ZEROCONF=y +BR2_PACKAGE_LIBARCHIVE=y +BR2_PACKAGE_LIBARCHIVE_BSDTAR=y +BR2_PACKAGE_LIBARCHIVE_BSDCPIO=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y +BR2_PACKAGE_LIBSSH2=y +BR2_PACKAGE_RHASH=y +BR2_PACKAGE_RHASH_BIN=y +BR2_PACKAGE_HIREDIS=y +BR2_PACKAGE_REDIS=y +BR2_PACKAGE_SQLITE_STAT4=y +BR2_PACKAGE_SQLITE_ENABLE_COLUMN_METADATA=y +BR2_PACKAGE_SQLITE_ENABLE_FTS3=y +BR2_PACKAGE_SQLITE_ENABLE_JSON1=y +BR2_PACKAGE_SQLITE_ENABLE_UNLOCK_NOTIFY=y +BR2_PACKAGE_SQLITE_SECURE_DELETE=y +BR2_PACKAGE_SQLITE_NO_SYNC=y +BR2_PACKAGE_LIBCONFIG=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_OPENCV3=y +BR2_PACKAGE_OPENCV3_WITH_QT5=y +BR2_PACKAGE_OPENCV3_LIB_PYTHON=y +BR2_PACKAGE_OPENCV3_LIB_SHAPE=y +BR2_PACKAGE_OPENCV3_LIB_STITCHING=y +BR2_PACKAGE_OPENCV3_LIB_SUPERRES=y +BR2_PACKAGE_OPENCV3_LIB_TS=y +BR2_PACKAGE_OPENCV3_LIB_VIDEOSTAB=y +BR2_PACKAGE_OPENCV3_BUILD_TESTS=y +BR2_PACKAGE_OPENCV3_BUILD_PERF_TESTS=y +BR2_PACKAGE_OPENCV3_WITH_FFMPEG=y +BR2_PACKAGE_OPENCV3_WITH_JPEG=y +BR2_PACKAGE_OPENCV3_WITH_PNG=y +BR2_PACKAGE_OPENCV3_WITH_PROTOBUF=y +BR2_PACKAGE_OPENCV3_WITH_TIFF=y +BR2_PACKAGE_OPENCV3_WITH_V4L=y +BR2_PACKAGE_OPENCV3_INSTALL_DATA=y +BR2_PACKAGE_JSONCPP=y +BR2_PACKAGE_TINYXML=y +BR2_PACKAGE_TINYXML2=y +BR2_PACKAGE_LIBCAMERA=y +BR2_PACKAGE_LIBCAMERA_V4L2=y +BR2_PACKAGE_X264=y +BR2_PACKAGE_X265=y +BR2_PACKAGE_CPPZMQ=y +BR2_PACKAGE_LIBCURL=y +BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_LIBCURL_VERBOSE=y +BR2_PACKAGE_LIBCURL_TLS_NONE=y +BR2_PACKAGE_LIBMICROHTTPD=y +BR2_PACKAGE_ZEROMQ_NORM=y +BR2_PACKAGE_ZEROMQ_PGM=y +BR2_PACKAGE_ZMQPP=y +BR2_PACKAGE_BOOST=y +BR2_PACKAGE_BOOST_CONTAINER=y +BR2_PACKAGE_BOOST_CONTRACT=y +BR2_PACKAGE_BOOST_EXCEPTION=y +BR2_PACKAGE_BOOST_GRAPH=y +BR2_PACKAGE_BOOST_GRAPH_PARALLEL=y +BR2_PACKAGE_BOOST_IOSTREAMS=y +BR2_PACKAGE_BOOST_LOCALE=y +BR2_PACKAGE_BOOST_LOG=y +BR2_PACKAGE_BOOST_MATH=y +BR2_PACKAGE_BOOST_MPI=y +BR2_PACKAGE_BOOST_PROGRAM_OPTIONS=y +BR2_PACKAGE_BOOST_PYTHON=y +BR2_PACKAGE_BOOST_RANDOM=y +BR2_PACKAGE_BOOST_SERIALIZATION=y +BR2_PACKAGE_BOOST_STACKTRACE=y +BR2_PACKAGE_BOOST_TEST=y +BR2_PACKAGE_BOOST_TYPE_ERASURE=y +BR2_PACKAGE_BOOST_WAVE=y +BR2_PACKAGE_CMOCKA=y +BR2_PACKAGE_LIBEVENT=y +BR2_PACKAGE_COLLECTD=y +BR2_PACKAGE_COLLECTD_EXEC=y +BR2_PACKAGE_COLLECTD_IPTABLES=y +BR2_PACKAGE_BLUEZ_TOOLS=y +BR2_PACKAGE_BLUEZ5_UTILS=y +BR2_PACKAGE_BLUEZ5_UTILS_OBEX=y +BR2_PACKAGE_BLUEZ5_UTILS_CLIENT=y +BR2_PACKAGE_BLUEZ5_UTILS_DEPRECATED=y +BR2_PACKAGE_BLUEZ5_UTILS_EXPERIMENTAL=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_HEALTH=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_MESH=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_MIDI=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_NFC=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_SAP=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_SIXAXIS=y +BR2_PACKAGE_BLUEZ5_UTILS_TEST=y +BR2_PACKAGE_BLUEZ5_UTILS_TOOLS_HID2HCI=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_DHCPCD5=y +BR2_PACKAGE_DROPBEAR=y +BR2_PACKAGE_DROPBEAR_DISABLE_REVERSEDNS=y +BR2_PACKAGE_DROPBEAR_LEGACY_CRYPTO=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IFTOP=y +BR2_PACKAGE_IFUPDOWN=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPERF3=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES_BPF_NFSYNPROXY=y +BR2_PACKAGE_IPTABLES_NFTABLES=y +BR2_PACKAGE_IW=y +BR2_PACKAGE_LFTP=y +BR2_PACKAGE_LFTP_CMD_TORRENT=y +BR2_PACKAGE_LFTP_PROTO_FISH=y +BR2_PACKAGE_LFTP_PROTO_HTTP=y +BR2_PACKAGE_LFTP_PROTO_SFTP=y +BR2_PACKAGE_NETSNMP=y +BR2_PACKAGE_NETSNMP_STATIC=y +BR2_PACKAGE_NETWORK_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_TUI=y +BR2_PACKAGE_NETWORK_MANAGER_MODEM_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_PPPD=y +BR2_PACKAGE_NETWORK_MANAGER_OVS=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_RSYNC=y +BR2_PACKAGE_UHTTPD=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_CLI=y +BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y +BR2_PACKAGE_DASH=y +BR2_PACKAGE_ZSH=y +BR2_PACKAGE_FILE=y +BR2_PACKAGE_COREUTILS=y +BR2_PACKAGE_DEBIANUTILS=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_PROCPS_NG=y +BR2_PACKAGE_SYSTEMD_ANALYZE=y +BR2_PACKAGE_UTIL_LINUX_BINARIES=y +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y +BR2_PACKAGE_UTIL_LINUX_RFKILL=y +BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS=y +BR2_PACKAGE_LESS=y +BR2_PACKAGE_MC=y +BR2_PACKAGE_VIM=y +BR2_PACKAGE_BOOT_RUN=y +BR2_PACKAGE_DRIVER_TESTCASE=y +BR2_PACKAGE_DRIVER_TESTCASE_QT=y +# BR2_PACKAGE_DRIVER_TESTCASE_QT_AUTO_START is not set +BR2_PACKAGE_LVGL_KIT=y +BR2_PACKAGE_TOUCH_SCREEN_MAP_VALUE=y +BR2_PACKAGE_LS_DEFAULT_ETH_CONFIG=y +BR2_PACKAGE_LS_DEFAULT_ETH_NAME="eth0 eth1" +BR2_PACKAGE_LS_DEFAULT_ETH_IP="192.168.1.10 192.168.2.11" +BR2_PACKAGE_LIBGO_LA=y +BR2_PACKAGE_LOONGSON_RESIZE=y +BR2_PACKAGE_LOONGSON_KERNEL=y +BR2_PACKAGE_LOONGSON_KERNEL_PATH="~/tmp/bsp/test/2K1000LA/kernel/all/" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="2048M" +BR2_TARGET_ROOTFS_EXT2_MKFS_OPTIONS="-O ^64bit -O ^metadata_csum" +BR2_TARGET_ROOTFS_EXT2_GZIP=y +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_PACKAGE_HOST_CMAKE=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_PYTHON3=y diff --git a/configs/loongson2k1000la_jinlong_ramdisk_defconfig b/configs/loongson2k1000la_jinlong_ramdisk_defconfig new file mode 100644 index 00000000..8f961597 --- /dev/null +++ b/configs/loongson2k1000la_jinlong_ramdisk_defconfig @@ -0,0 +1,37 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd ramdisk" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_ROOTFS_MERGED_USR=y +# BR2_TARGET_ENABLE_ROOT_LOGIN is not set +# BR2_TARGET_GENERIC_GETTY is not set +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +# BR2_ENABLE_LOCALE_PURGE is not set +BR2_ROOTFS_OVERLAY="board/loongson/ls2k1000la/rootfs_ramdisk_overlay" +BR2_PACKAGE_PV=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_ETHTOOL=y +# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_RSYNC=y +# BR2_PACKAGE_URANDOM_SCRIPTS is not set +BR2_PACKAGE_UTIL_LINUX_LIBFDISK=y +BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS=y +BR2_PACKAGE_UTIL_LINUX_FSCK=y +BR2_PACKAGE_UTIL_LINUX_MOUNT=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_SIZE="32M" +BR2_TARGET_ROOTFS_EXT2_GZIP=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_PACKAGE_HOST_CMAKE=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MKPASSWD=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/loongson2k1000la_nand_4k_defconfig b/configs/loongson2k1000la_nand_4k_defconfig new file mode 100644 index 00000000..eb346b39 --- /dev/null +++ b/configs/loongson2k1000la_nand_4k_defconfig @@ -0,0 +1,202 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_INIT_SYSTEMD=y +BR2_TARGET_GENERIC_ROOT_PASSWD="123" +BR2_SYSTEM_BIN_SH_BASH=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +BR2_SYSTEM_ENABLE_NLS=y +BR2_TARGET_LOCALTIME="Asia/Shanghai" +BR2_ROOTFS_OVERLAY="board/loongson/ls2k1000la/rootfs_overlay" +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_AMIXER=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_FFMPEG=y +BR2_PACKAGE_FFMPEG_GPL=y +BR2_PACKAGE_FFMPEG_NONFREE=y +BR2_PACKAGE_FFMPEG_FFPLAY=y +BR2_PACKAGE_FFMPEG_FFPROBE=y +BR2_PACKAGE_FFMPEG_AVRESAMPLE=y +BR2_PACKAGE_FFMPEG_POSTPROC=y +BR2_PACKAGE_V4L2GRAB=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_XZ=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_IOZONE=y +BR2_PACKAGE_NETPERF=y +BR2_PACKAGE_PV=y +BR2_PACKAGE_RT_TESTS=y +BR2_PACKAGE_STRACE=y +BR2_PACKAGE_STRESS=y +BR2_PACKAGE_STRESS_NG=y +BR2_PACKAGE_STRESSAPPTEST=y +BR2_PACKAGE_FLEX=y +BR2_PACKAGE_MAKE=y +BR2_PACKAGE_TREE=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_NFS_UTILS=y +BR2_PACKAGE_SOURCEHANSERIF=y +BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR=y +BR2_PACKAGE_DIRECTFB=y +BR2_PACKAGE_PSPLASH=y +BR2_PACKAGE_SDL2_DIRECTFB=y +BR2_PACKAGE_SDL2_GFX=y +BR2_PACKAGE_SDL2_IMAGE=y +BR2_PACKAGE_SDL2_MIXER=y +BR2_PACKAGE_SDL2_NET=y +BR2_PACKAGE_SDL2_TTF=y +BR2_PACKAGE_QT5=y +BR2_PACKAGE_QT5BASE_MYSQL=y +BR2_PACKAGE_QT5BASE_SQLITE_QT=y +BR2_PACKAGE_QT5BASE_DEFAULT_QPA="linuxfb" +BR2_PACKAGE_QT5BASE_FONTCONFIG=y +BR2_PACKAGE_QT5BASE_HARFBUZZ=y +BR2_PACKAGE_QT5BASE_GIF=y +BR2_PACKAGE_QT5BASE_JPEG=y +BR2_PACKAGE_QT5BASE_PNG=y +BR2_PACKAGE_QT5BASE_DBUS=y +BR2_PACKAGE_QT5BASE_TSLIB=y +BR2_PACKAGE_QT5CHARTS=y +BR2_PACKAGE_QT5MQTT=y +BR2_PACKAGE_QT5SENSORS=y +BR2_PACKAGE_QT5SERIALBUS=y +BR2_PACKAGE_QT5SVG=y +BR2_PACKAGE_QT5XMLPATTERNS=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_MEMTESTER=y +BR2_PACKAGE_PCIUTILS=y +BR2_PACKAGE_RTC_TOOLS=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_LIBARCHIVE=y +BR2_PACKAGE_LIBARCHIVE_BSDTAR=y +BR2_PACKAGE_LIBARCHIVE_BSDCPIO=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y +BR2_PACKAGE_LIBSSH2=y +BR2_PACKAGE_RHASH=y +BR2_PACKAGE_RHASH_BIN=y +BR2_PACKAGE_HIREDIS=y +BR2_PACKAGE_REDIS=y +BR2_PACKAGE_SQLITE=y +BR2_PACKAGE_SQLITE_STAT4=y +BR2_PACKAGE_SQLITE_ENABLE_COLUMN_METADATA=y +BR2_PACKAGE_SQLITE_ENABLE_FTS3=y +BR2_PACKAGE_SQLITE_ENABLE_JSON1=y +BR2_PACKAGE_SQLITE_ENABLE_UNLOCK_NOTIFY=y +BR2_PACKAGE_SQLITE_SECURE_DELETE=y +BR2_PACKAGE_SQLITE_NO_SYNC=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_LIBUSB=y +BR2_PACKAGE_JSONCPP=y +BR2_PACKAGE_LIBXML2=y +BR2_PACKAGE_TINYXML=y +BR2_PACKAGE_TINYXML2=y +BR2_PACKAGE_CPPZMQ=y +BR2_PACKAGE_LIBCURL=y +BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_LIBCURL_VERBOSE=y +BR2_PACKAGE_LIBCURL_TLS_NONE=y +BR2_PACKAGE_LIBMICROHTTPD=y +BR2_PACKAGE_ZEROMQ_NORM=y +BR2_PACKAGE_ZEROMQ_PGM=y +BR2_PACKAGE_ZMQPP=y +BR2_PACKAGE_BOOST=y +BR2_PACKAGE_BOOST_CONTAINER=y +BR2_PACKAGE_BOOST_CONTRACT=y +BR2_PACKAGE_BOOST_EXCEPTION=y +BR2_PACKAGE_BOOST_GRAPH=y +BR2_PACKAGE_BOOST_GRAPH_PARALLEL=y +BR2_PACKAGE_BOOST_IOSTREAMS=y +BR2_PACKAGE_BOOST_LOCALE=y +BR2_PACKAGE_BOOST_LOG=y +BR2_PACKAGE_BOOST_MATH=y +BR2_PACKAGE_BOOST_MPI=y +BR2_PACKAGE_BOOST_PROGRAM_OPTIONS=y +BR2_PACKAGE_BOOST_RANDOM=y +BR2_PACKAGE_BOOST_SERIALIZATION=y +BR2_PACKAGE_BOOST_STACKTRACE=y +BR2_PACKAGE_BOOST_TEST=y +BR2_PACKAGE_BOOST_TYPE_ERASURE=y +BR2_PACKAGE_BOOST_WAVE=y +BR2_PACKAGE_CMOCKA=y +BR2_PACKAGE_LIBEVENT=y +BR2_PACKAGE_LIBUV=y +BR2_PACKAGE_PROTOBUF=y +BR2_PACKAGE_COLLECTD=y +BR2_PACKAGE_COLLECTD_EXEC=y +BR2_PACKAGE_COLLECTD_IPTABLES=y +BR2_PACKAGE_COLLECTD_NFS=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_DROPBEAR=y +BR2_PACKAGE_DROPBEAR_DISABLE_REVERSEDNS=y +BR2_PACKAGE_DROPBEAR_LEGACY_CRYPTO=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IFTOP=y +BR2_PACKAGE_IFUPDOWN=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPERF_VERSION="2.0.12" +BR2_PACKAGE_IPERF3=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES_BPF_NFSYNPROXY=y +BR2_PACKAGE_IPTABLES_NFTABLES=y +BR2_PACKAGE_LFTP=y +BR2_PACKAGE_LFTP_CMD_TORRENT=y +BR2_PACKAGE_LFTP_PROTO_FISH=y +BR2_PACKAGE_LFTP_PROTO_HTTP=y +BR2_PACKAGE_LFTP_PROTO_SFTP=y +BR2_PACKAGE_LRZSZ=y +BR2_PACKAGE_NETSNMP=y +BR2_PACKAGE_NETSNMP_STATIC=y +BR2_PACKAGE_NETWORK_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_TUI=y +BR2_PACKAGE_NETWORK_MANAGER_MODEM_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_PPPD=y +BR2_PACKAGE_NETWORK_MANAGER_OVS=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_RSYNC=y +BR2_PACKAGE_UHTTPD=y +BR2_PACKAGE_DASH=y +BR2_PACKAGE_ZSH=y +BR2_PACKAGE_FILE=y +BR2_PACKAGE_COREUTILS=y +BR2_PACKAGE_DEBIANUTILS=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_PROCPS_NG=y +BR2_PACKAGE_SYSTEMD_ANALYZE=y +BR2_PACKAGE_UTIL_LINUX_BINARIES=y +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y +BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS=y +BR2_PACKAGE_VIM=y +BR2_PACKAGE_BOOT_RUN=y +BR2_PACKAGE_DRIVER_TESTCASE=y +BR2_PACKAGE_DRIVER_TESTCASE_QT=y +# BR2_PACKAGE_DRIVER_TESTCASE_QT_AUTO_START is not set +BR2_PACKAGE_LVGL_KIT=y +BR2_PACKAGE_LS_DEFAULT_ETH_CONFIG=y +BR2_PACKAGE_QT_USE_TSLIB=y +BR2_PACKAGE_LIBGO_LA=y +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_PEBSIZE=0x40000 +BR2_TARGET_ROOTFS_UBI_SUBSIZE=4096 +BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y +BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE="board/loongson/ubinize.cfg" +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x3e000 +BR2_TARGET_ROOTFS_UBIFS_MINIOSIZE=0x1000 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=950 +BR2_PACKAGE_HOST_CMAKE=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/loongson2k1000la_rt_defconfig b/configs/loongson2k1000la_rt_defconfig new file mode 100644 index 00000000..655e0a08 --- /dev/null +++ b/configs/loongson2k1000la_rt_defconfig @@ -0,0 +1,64 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd ramdisk" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_ROOTFS_MERGED_USR=y +# BR2_TARGET_ENABLE_ROOT_LOGIN is not set +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +# BR2_ENABLE_LOCALE_PURGE is not set +BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y +BR2_PACKAGE_IOZONE=y +BR2_PACKAGE_NETPERF=y +BR2_PACKAGE_PV=y +BR2_PACKAGE_STRESS=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_BOOST=y +BR2_PACKAGE_BOOST_VERSION_1_67=y +BR2_PACKAGE_BOOST_CONTRACT=y +BR2_PACKAGE_BOOST_EXCEPTION=y +BR2_PACKAGE_BOOST_GRAPH=y +BR2_PACKAGE_BOOST_GRAPH_PARALLEL=y +BR2_PACKAGE_BOOST_IOSTREAMS=y +BR2_PACKAGE_BOOST_JSON=y +BR2_PACKAGE_BOOST_LOCALE=y +BR2_PACKAGE_BOOST_LOG=y +BR2_PACKAGE_BOOST_MATH=y +BR2_PACKAGE_BOOST_MPI=y +BR2_PACKAGE_BOOST_NOWIDE=y +BR2_PACKAGE_BOOST_PROGRAM_OPTIONS=y +BR2_PACKAGE_BOOST_RANDOM=y +BR2_PACKAGE_BOOST_SERIALIZATION=y +BR2_PACKAGE_BOOST_STACKTRACE=y +BR2_PACKAGE_BOOST_TEST=y +BR2_PACKAGE_BOOST_TYPE_ERASURE=y +BR2_PACKAGE_BOOST_WAVE=y +BR2_PACKAGE_ETHTOOL=y +# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_LRZSZ=y +BR2_PACKAGE_RSYNC=y +# BR2_PACKAGE_URANDOM_SCRIPTS is not set +BR2_PACKAGE_BASH=y +BR2_PACKAGE_UTIL_LINUX_LIBFDISK=y +BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS=y +BR2_PACKAGE_UTIL_LINUX_FSCK=y +BR2_PACKAGE_UTIL_LINUX_MOUNT=y +# BR2_PACKAGE_LS2_SYS_CONFIG_TOOL is not set +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 +BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y +BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE="board/loongson/ubinize.cfg" +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=1900 +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MKPASSWD=y diff --git a/configs/loongson2k1000la_test_defconfig b/configs/loongson2k1000la_test_defconfig new file mode 100644 index 00000000..0b0888ab --- /dev/null +++ b/configs/loongson2k1000la_test_defconfig @@ -0,0 +1,189 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_INIT_SYSTEMD=y +BR2_TARGET_GENERIC_ROOT_PASSWD="123" +BR2_SYSTEM_BIN_SH_BASH=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +BR2_SYSTEM_ENABLE_NLS=y +BR2_TARGET_LOCALTIME="Asia/Shanghai" +BR2_ROOTFS_OVERLAY="board/loongson/ls2k1000la/rootfs_overlay" +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_AMIXER=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_XZ=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_COREMARK=y +BR2_PACKAGE_COREMARK_PRO=y +BR2_PACKAGE_DHRYSTONE=y +BR2_PACKAGE_FIO=y +BR2_PACKAGE_IOZONE=y +BR2_PACKAGE_LATENCYTOP=y +BR2_PACKAGE_LMBENCH=y +BR2_PACKAGE_LSOF=y +BR2_PACKAGE_LTP_TESTSUITE=y +BR2_PACKAGE_NETPERF=y +BR2_PACKAGE_PV=y +BR2_PACKAGE_RT_TESTS=y +BR2_PACKAGE_STRACE=y +BR2_PACKAGE_STRESS=y +BR2_PACKAGE_STRESS_NG=y +BR2_PACKAGE_STRESSAPPTEST=y +BR2_PACKAGE_TINYMEMBENCH=y +BR2_PACKAGE_WHETSTONE=y +BR2_PACKAGE_FLEX=y +BR2_PACKAGE_MAKE=y +BR2_PACKAGE_TREE=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_SOURCEHANSERIF=y +BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR=y +BR2_PACKAGE_PSPLASH=y +BR2_PACKAGE_QT5=y +BR2_PACKAGE_QT5BASE_MYSQL=y +BR2_PACKAGE_QT5BASE_SQLITE_QT=y +BR2_PACKAGE_QT5BASE_DEFAULT_QPA="linuxfb" +BR2_PACKAGE_QT5BASE_FONTCONFIG=y +BR2_PACKAGE_QT5BASE_HARFBUZZ=y +BR2_PACKAGE_QT5BASE_GIF=y +BR2_PACKAGE_QT5BASE_JPEG=y +BR2_PACKAGE_QT5BASE_PNG=y +BR2_PACKAGE_QT5BASE_DBUS=y +BR2_PACKAGE_QT5BASE_TSLIB=y +BR2_PACKAGE_QT5CHARTS=y +BR2_PACKAGE_QT5MQTT=y +BR2_PACKAGE_QT5SENSORS=y +BR2_PACKAGE_QT5SERIALBUS=y +BR2_PACKAGE_QT5SVG=y +BR2_PACKAGE_QT5XMLPATTERNS=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_MEMTESTER=y +BR2_PACKAGE_PCIUTILS=y +BR2_PACKAGE_RTC_TOOLS=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_LIBARCHIVE=y +BR2_PACKAGE_LIBARCHIVE_BSDTAR=y +BR2_PACKAGE_LIBARCHIVE_BSDCPIO=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y +BR2_PACKAGE_LIBSSH2=y +BR2_PACKAGE_RHASH=y +BR2_PACKAGE_RHASH_BIN=y +BR2_PACKAGE_HIREDIS=y +BR2_PACKAGE_REDIS=y +BR2_PACKAGE_SQLITE=y +BR2_PACKAGE_SQLITE_STAT4=y +BR2_PACKAGE_SQLITE_ENABLE_COLUMN_METADATA=y +BR2_PACKAGE_SQLITE_ENABLE_FTS3=y +BR2_PACKAGE_SQLITE_ENABLE_JSON1=y +BR2_PACKAGE_SQLITE_ENABLE_UNLOCK_NOTIFY=y +BR2_PACKAGE_SQLITE_SECURE_DELETE=y +BR2_PACKAGE_SQLITE_NO_SYNC=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_LIBUSB=y +BR2_PACKAGE_JSONCPP=y +BR2_PACKAGE_LIBXML2=y +BR2_PACKAGE_TINYXML=y +BR2_PACKAGE_TINYXML2=y +BR2_PACKAGE_CPPZMQ=y +BR2_PACKAGE_LIBCURL=y +BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_LIBCURL_VERBOSE=y +BR2_PACKAGE_LIBCURL_TLS_NONE=y +BR2_PACKAGE_LIBMICROHTTPD=y +BR2_PACKAGE_ZEROMQ_NORM=y +BR2_PACKAGE_ZEROMQ_PGM=y +BR2_PACKAGE_ZMQPP=y +BR2_PACKAGE_BOOST=y +BR2_PACKAGE_BOOST_CONTAINER=y +BR2_PACKAGE_BOOST_CONTRACT=y +BR2_PACKAGE_BOOST_EXCEPTION=y +BR2_PACKAGE_BOOST_GRAPH=y +BR2_PACKAGE_BOOST_GRAPH_PARALLEL=y +BR2_PACKAGE_BOOST_IOSTREAMS=y +BR2_PACKAGE_BOOST_LOCALE=y +BR2_PACKAGE_BOOST_LOG=y +BR2_PACKAGE_BOOST_MATH=y +BR2_PACKAGE_BOOST_MPI=y +BR2_PACKAGE_BOOST_PROGRAM_OPTIONS=y +BR2_PACKAGE_BOOST_RANDOM=y +BR2_PACKAGE_BOOST_SERIALIZATION=y +BR2_PACKAGE_BOOST_STACKTRACE=y +BR2_PACKAGE_BOOST_TEST=y +BR2_PACKAGE_BOOST_TYPE_ERASURE=y +BR2_PACKAGE_BOOST_WAVE=y +BR2_PACKAGE_CMOCKA=y +BR2_PACKAGE_LIBEVENT=y +BR2_PACKAGE_LIBUV=y +BR2_PACKAGE_PROTOBUF=y +BR2_PACKAGE_COLLECTD=y +BR2_PACKAGE_COLLECTD_EXEC=y +BR2_PACKAGE_COLLECTD_IPTABLES=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_DROPBEAR=y +BR2_PACKAGE_DROPBEAR_DISABLE_REVERSEDNS=y +BR2_PACKAGE_DROPBEAR_LEGACY_CRYPTO=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IFTOP=y +BR2_PACKAGE_IFUPDOWN=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPERF3=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES_BPF_NFSYNPROXY=y +BR2_PACKAGE_IPTABLES_NFTABLES=y +BR2_PACKAGE_LFTP=y +BR2_PACKAGE_LFTP_CMD_TORRENT=y +BR2_PACKAGE_LFTP_PROTO_FISH=y +BR2_PACKAGE_LFTP_PROTO_HTTP=y +BR2_PACKAGE_LFTP_PROTO_SFTP=y +BR2_PACKAGE_NETSNMP=y +BR2_PACKAGE_NETSNMP_STATIC=y +BR2_PACKAGE_NETWORK_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_TUI=y +BR2_PACKAGE_NETWORK_MANAGER_MODEM_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_PPPD=y +BR2_PACKAGE_NETWORK_MANAGER_OVS=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_RSYNC=y +BR2_PACKAGE_UHTTPD=y +BR2_PACKAGE_DASH=y +BR2_PACKAGE_ZSH=y +BR2_PACKAGE_FILE=y +BR2_PACKAGE_COREUTILS=y +BR2_PACKAGE_DEBIANUTILS=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_PROCPS_NG=y +BR2_PACKAGE_SYSTEMD_ANALYZE=y +BR2_PACKAGE_UTIL_LINUX_BINARIES=y +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y +BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS=y +BR2_PACKAGE_VIM=y +BR2_PACKAGE_BOOT_RUN=y +BR2_PACKAGE_DRIVER_TESTCASE=y +BR2_PACKAGE_DRIVER_TESTCASE_QT=y +# BR2_PACKAGE_DRIVER_TESTCASE_QT_AUTO_START is not set +BR2_PACKAGE_LVGL_KIT=y +BR2_PACKAGE_TOUCH_SCREEN_MAP_VALUE=y +BR2_PACKAGE_LS_DEFAULT_ETH_CONFIG=y +BR2_PACKAGE_LS_DEFAULT_ETH_NAME="eth0 eth1" +BR2_PACKAGE_LS_DEFAULT_ETH_IP="192.168.1.10 192.168.2.11" +BR2_PACKAGE_LIBGO_LA=y +BR2_PACKAGE_AUTOREBOOT=y +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_PACKAGE_HOST_CMAKE=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/loongson2k300_defconfig b/configs/loongson2k300_defconfig new file mode 100644 index 00000000..4a35c2e1 --- /dev/null +++ b/configs/loongson2k300_defconfig @@ -0,0 +1,474 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_INIT_SYSTEMD=y +BR2_TARGET_GENERIC_ROOT_PASSWD="123" +BR2_SYSTEM_BIN_SH_BASH=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +BR2_SYSTEM_ENABLE_NLS=y +BR2_TARGET_LOCALTIME="Asia/Shanghai" +BR2_ROOTFS_OVERLAY="board/loongson/ls2k1000la/rootfs_overlay" +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_AMIXER=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_FFMPEG_GPL=y +BR2_PACKAGE_FFMPEG_FFPLAY=y +BR2_PACKAGE_FFMPEG_FFPROBE=y +BR2_PACKAGE_FFMPEG_POSTPROC=y +BR2_PACKAGE_V4L2GRAB=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_COREMARK=y +BR2_PACKAGE_COREMARK_PRO=y +BR2_PACKAGE_DHRYSTONE=y +BR2_PACKAGE_FIO=y +BR2_PACKAGE_IOZONE=y +BR2_PACKAGE_LMBENCH=y +BR2_PACKAGE_NETPERF=y +BR2_PACKAGE_PV=y +BR2_PACKAGE_RT_TESTS=y +BR2_PACKAGE_SPIDEV_TEST=y +BR2_PACKAGE_STRESS=y +BR2_PACKAGE_STRESS_NG=y +BR2_PACKAGE_STRESSAPPTEST=y +BR2_PACKAGE_FLEX=y +BR2_PACKAGE_MAKE=y +BR2_PACKAGE_TREE=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_SOURCEHANSERIF=y +BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR=y +BR2_PACKAGE_FSWEBCAM=y +BR2_PACKAGE_DIRECTFB=y +BR2_PACKAGE_DIRECTFB_TESTS=y +BR2_PACKAGE_DIRECTFB_EXAMPLES=y +BR2_PACKAGE_FB_TEST_APP=y +BR2_PACKAGE_FBDUMP=y +BR2_PACKAGE_FBSET=y +BR2_PACKAGE_PSPLASH=y +BR2_PACKAGE_SDL_DIRECTFB=y +BR2_PACKAGE_SDL_GFX=y +BR2_PACKAGE_SDL_MIXER_MIDI_TIMIDITY=y +BR2_PACKAGE_SDL_NET=y +BR2_PACKAGE_SDL_SOUND=y +BR2_PACKAGE_SDL_SOUND_PLAYSOUND=y +BR2_PACKAGE_SDL2_DIRECTFB=y +BR2_PACKAGE_SDL2_GFX=y +BR2_PACKAGE_SDL2_IMAGE=y +BR2_PACKAGE_SDL2_MIXER=y +BR2_PACKAGE_SDL2_NET=y +BR2_PACKAGE_SDL2_TTF=y +BR2_PACKAGE_QT5=y +BR2_PACKAGE_QT5BASE_MYSQL=y +BR2_PACKAGE_QT5BASE_SQLITE_QT=y +BR2_PACKAGE_QT5BASE_DEFAULT_QPA="linuxfb" +BR2_PACKAGE_QT5BASE_HARFBUZZ=y +BR2_PACKAGE_QT5BASE_GIF=y +BR2_PACKAGE_QT5BASE_JPEG=y +BR2_PACKAGE_QT5BASE_PNG=y +BR2_PACKAGE_QT5BASE_DBUS=y +BR2_PACKAGE_QT5BASE_TSLIB=y +BR2_PACKAGE_QT5CHARTS=y +BR2_PACKAGE_QT5MQTT=y +BR2_PACKAGE_QT5SENSORS=y +BR2_PACKAGE_QT5SERIALBUS=y +BR2_PACKAGE_QT5XMLPATTERNS=y +BR2_PACKAGE_QWT=y +BR2_PACKAGE_QWT_SVG=y +BR2_PACKAGE_QWT_MATHML=y +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_8265=y +BR2_PACKAGE_LINUX_FIRMWARE_RTL_RTW88=y +BR2_PACKAGE_DT_UTILS=y +BR2_PACKAGE_HWLOC=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_IOSTAT=y +BR2_PACKAGE_LIBUIO=y +BR2_PACKAGE_LINUX_SERIAL_TEST=y +BR2_PACKAGE_LM_SENSORS=y +BR2_PACKAGE_LM_SENSORS_PWMCONFIG=y +BR2_PACKAGE_LSHW=y +BR2_PACKAGE_LSUIO=y +BR2_PACKAGE_MEMTESTER=y +BR2_PACKAGE_RS485CONF=y +BR2_PACKAGE_RTC_TOOLS=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_SYSSTAT=y +BR2_PACKAGE_USBMOUNT=y +BR2_PACKAGE_USBUTILS=y +BR2_PACKAGE_PYTHON3=y +BR2_PACKAGE_PYTHON3_PY_PYC=y +BR2_PACKAGE_PYTHON3_DECIMAL=y +BR2_PACKAGE_PYTHON3_OSSAUDIODEV=y +BR2_PACKAGE_PYTHON_AIOBLESCAN=y +BR2_PACKAGE_PYTHON_AIOCOAP=y +BR2_PACKAGE_PYTHON_AIOHTTP_CORS=y +BR2_PACKAGE_PYTHON_AIOHTTP_DEBUGTOOLBAR=y +BR2_PACKAGE_PYTHON_AIOHTTP_MAKO=y +BR2_PACKAGE_PYTHON_AIOHTTP_REMOTES=y +BR2_PACKAGE_PYTHON_AIOHTTP_SECURITY=y +BR2_PACKAGE_PYTHON_AIOHTTP_SESSION=y +BR2_PACKAGE_PYTHON_AIOHTTP_SSE=y +BR2_PACKAGE_PYTHON_AIOJOBS=y +BR2_PACKAGE_PYTHON_AIOLOGSTASH=y +BR2_PACKAGE_PYTHON_AIOMONITOR=y +BR2_PACKAGE_PYTHON_AIORWLOCK=y +BR2_PACKAGE_PYTHON_AIOSIGNAL=y +BR2_PACKAGE_PYTHON_AIOZIPKIN=y +BR2_PACKAGE_PYTHON_ALSAAUDIO=y +BR2_PACKAGE_PYTHON_ANSICOLORS=y +BR2_PACKAGE_PYTHON_ARGON2_CFFI=y +BR2_PACKAGE_PYTHON_ARROW=y +BR2_PACKAGE_PYTHON_ASYNC_LRU=y +BR2_PACKAGE_PYTHON_AVRO=y +BR2_PACKAGE_PYTHON_BLEAK=y +BR2_PACKAGE_PYTHON_BOTO3=y +BR2_PACKAGE_PYTHON_BOTTLE=y +BR2_PACKAGE_PYTHON_BROTLI=y +BR2_PACKAGE_PYTHON_BSDIFF4=y +BR2_PACKAGE_PYTHON_BUNCH=y +BR2_PACKAGE_PYTHON_CACHED_PROPERTY=y +BR2_PACKAGE_PYTHON_CANOPEN=y +BR2_PACKAGE_PYTHON_CHANNELS_REDIS=y +BR2_PACKAGE_PYTHON_CHEETAH=y +BR2_PACKAGE_PYTHON_CHERRYPY=y +BR2_PACKAGE_PYTHON_COLORAMA=y +BR2_PACKAGE_PYTHON_COLORZERO=y +BR2_PACKAGE_PYTHON_CONFIGSHELL_FB=y +BR2_PACKAGE_PYTHON_CRAYONS=y +BR2_PACKAGE_PYTHON_CRC16=y +BR2_PACKAGE_PYTHON_CRCMOD=y +BR2_PACKAGE_PYTHON_CRONTAB=y +BR2_PACKAGE_PYTHON_CROSSBAR=y +BR2_PACKAGE_PYTHON_DAEMON=y +BR2_PACKAGE_PYTHON_DAEMONIZE=y +BR2_PACKAGE_PYTHON_DEFUSEDXML=y +BR2_PACKAGE_PYTHON_DIALOG3=y +BR2_PACKAGE_PYTHON_DICTTOXML=y +BR2_PACKAGE_PYTHON_DJANGO_ENUMFIELDS=y +BR2_PACKAGE_PYTHON_DNSPYTHON=y +BR2_PACKAGE_PYTHON_DOCKER=y +BR2_PACKAGE_PYTHON_DOCKER_PYCREDS=y +BR2_PACKAGE_PYTHON_DOCKERPTY=y +BR2_PACKAGE_PYTHON_DOCOPT=y +BR2_PACKAGE_PYTHON_DOMINATE=y +BR2_PACKAGE_PYTHON_DPKT=y +BR2_PACKAGE_PYTHON_ESPTOOL=y +BR2_PACKAGE_PYTHON_FALCON=y +BR2_PACKAGE_PYTHON_FILELOCK=y +BR2_PACKAGE_PYTHON_FIRE=y +BR2_PACKAGE_PYTHON_FLASK_BABEL=y +BR2_PACKAGE_PYTHON_FLASK_CORS=y +BR2_PACKAGE_PYTHON_FLASK_JSONRPC=y +BR2_PACKAGE_PYTHON_FLASK_LOGIN=y +BR2_PACKAGE_PYTHON_FLASK_SQLALCHEMY=y +BR2_PACKAGE_PYTHON_FLATBUFFERS=y +BR2_PACKAGE_PYTHON_FLUP=y +BR2_PACKAGE_PYTHON_FUTURE=y +BR2_PACKAGE_PYTHON_GITDB2=y +BR2_PACKAGE_PYTHON_GUNICORN=y +BR2_PACKAGE_PYTHON_HTML5LIB=y +BR2_PACKAGE_PYTHON_HTTPLIB2=y +BR2_PACKAGE_PYTHON_HUEPY=y +BR2_PACKAGE_PYTHON_HUMANIZE=y +BR2_PACKAGE_PYTHON_IBMIOTF=y +BR2_PACKAGE_PYTHON_INFLECTION=y +BR2_PACKAGE_PYTHON_INFLUXDB=y +BR2_PACKAGE_PYTHON_INIPARSE=y +BR2_PACKAGE_PYTHON_INTELHEX=y +BR2_PACKAGE_PYTHON_IOWAIT=y +BR2_PACKAGE_PYTHON_IPDB=y +BR2_PACKAGE_PYTHON_IPTABLES=y +BR2_PACKAGE_PYTHON_JANUS=y +BR2_PACKAGE_PYTHON_JSON_SCHEMA_VALIDATOR=y +BR2_PACKAGE_PYTHON_JSONMODELS=y +BR2_PACKAGE_PYTHON_KEYRING=y +BR2_PACKAGE_PYTHON_LIBUSB1=y +BR2_PACKAGE_PYTHON_LOGBOOK=y +BR2_PACKAGE_PYTHON_M2CRYPTO=y +BR2_PACKAGE_PYTHON_M2R=y +BR2_PACKAGE_PYTHON_MARKDOWN2=y +BR2_PACKAGE_PYTHON_MATPLOTLIB=y +BR2_PACKAGE_PYTHON_MATPLOTLIB_QT=y +BR2_PACKAGE_PYTHON_MELD3=y +BR2_PACKAGE_PYTHON_MIMEPARSE=y +BR2_PACKAGE_PYTHON_MODBUS_TK=y +BR2_PACKAGE_PYTHON_MUTAGEN=y +BR2_PACKAGE_PYTHON_MWSCRAPE=y +BR2_PACKAGE_PYTHON_MWSCRAPE2SLOB=y +BR2_PACKAGE_PYTHON_NESTED_DICT=y +BR2_PACKAGE_PYTHON_NETIFACES=y +BR2_PACKAGE_PYTHON_NETWORKMANAGER=y +BR2_PACKAGE_PYTHON_NETWORKX=y +BR2_PACKAGE_PYTHON_OPCUA_ASYNCIO=y +BR2_PACKAGE_PYTHON_PERIPHERY=y +BR2_PACKAGE_PYTHON_PIEXIF=y +BR2_PACKAGE_PYTHON_PIGPIO=y +BR2_PACKAGE_PYTHON_PILLOW=y +BR2_PACKAGE_PYTHON_PIP=y +BR2_PACKAGE_PYTHON_POSIX_IPC=y +BR2_PACKAGE_PYTHON_PROTOBUF=y +BR2_PACKAGE_PYTHON_PUDB=y +BR2_PACKAGE_PYTHON_PYALSA=y +BR2_PACKAGE_PYTHON_PYBIND=y +BR2_PACKAGE_PYTHON_PYCAIRO=y +BR2_PACKAGE_PYTHON_PYCLI=y +BR2_PACKAGE_PYTHON_PYDANTIC=y +BR2_PACKAGE_PYTHON_PYELFTOOLS=y +BR2_PACKAGE_PYTHON_PYFTPDLIB=y +BR2_PACKAGE_PYTHON_PYGAME=y +BR2_PACKAGE_PYTHON_PYGAME_IMAGE=y +BR2_PACKAGE_PYTHON_PYGAME_EXAMPLES=y +BR2_PACKAGE_PYTHON_PYGAME_FONT=y +BR2_PACKAGE_PYTHON_PYGAME_MIXER=y +BR2_PACKAGE_PYTHON_PYGAME_MIXER_MUSIC=y +BR2_PACKAGE_PYTHON_PYINOTIFY=y +BR2_PACKAGE_PYTHON_PYJWT=y +BR2_PACKAGE_PYTHON_PYLIBFTDI=y +BR2_PACKAGE_PYTHON_PYMODBUS=y +BR2_PACKAGE_PYTHON_PYMYSQL=y +BR2_PACKAGE_PYTHON_PYPARTED=y +BR2_PACKAGE_PYTHON_PYRATEMP=y +BR2_PACKAGE_PYTHON_PYROUTE2=y +BR2_PACKAGE_PYTHON_PYSENDFILE=y +BR2_PACKAGE_PYTHON_PYSFTP=y +BR2_PACKAGE_PYTHON_PYSMB=y +BR2_PACKAGE_PYTHON_PYSNMP_MIBS=y +BR2_PACKAGE_PYTHON_PYSOCKS=y +BR2_PACKAGE_PYTHON_PYTABLEREADER=y +BR2_PACKAGE_PYTHON_PYTABLEWRITER=y +BR2_PACKAGE_PYTHON_PYTEST_ASYNCIO=y +BR2_PACKAGE_PYTHON_PYUDEV=y +BR2_PACKAGE_PYTHON_PYUSB=y +BR2_PACKAGE_PYTHON_PYXB=y +BR2_PACKAGE_PYTHON_PYZMQ=y +BR2_PACKAGE_PYTHON_RAVEN=y +BR2_PACKAGE_PYTHON_REDIS=y +BR2_PACKAGE_PYTHON_REENTRY=y +BR2_PACKAGE_PYTHON_REGEX=y +BR2_PACKAGE_PYTHON_REMI=y +BR2_PACKAGE_PYTHON_REQUEST_ID=y +BR2_PACKAGE_PYTHON_RPI_WS281X=y +BR2_PACKAGE_PYTHON_RTSLIB_FB=y +BR2_PACKAGE_PYTHON_SCANDIR=y +BR2_PACKAGE_PYTHON_SCAPY=y +BR2_PACKAGE_PYTHON_SCHEDULE=y +BR2_PACKAGE_PYTHON_SEE=y +BR2_PACKAGE_PYTHON_SEMVER=y +BR2_PACKAGE_PYTHON_SENTRY_SDK=y +BR2_PACKAGE_PYTHON_SERIAL_ASYNCIO=y +BR2_PACKAGE_PYTHON_SH=y +BR2_PACKAGE_PYTHON_SHUTILWHICH=y +BR2_PACKAGE_PYTHON_SIMPLEAUDIO=y +BR2_PACKAGE_PYTHON_SIMPLEGENERIC=y +BR2_PACKAGE_PYTHON_SIMPLEJSON=y +BR2_PACKAGE_PYTHON_SIMPLELOGGING=y +BR2_PACKAGE_PYTHON_SIMPLESQLITE=y +BR2_PACKAGE_PYTHON_SMBUS_CFFI=y +BR2_PACKAGE_PYTHON_SNAPPY=y +BR2_PACKAGE_PYTHON_SOCKETIO=y +BR2_PACKAGE_PYTHON_SOCKJS=y +BR2_PACKAGE_PYTHON_SPIDEV=y +BR2_PACKAGE_PYTHON_SYSTEMD=y +BR2_PACKAGE_PYTHON_TEXTTABLE=y +BR2_PACKAGE_PYTHON_THRIFT=y +BR2_PACKAGE_PYTHON_TINYRPC=y +BR2_PACKAGE_PYTHON_TOMAKO=y +BR2_PACKAGE_PYTHON_TQDM=y +BR2_PACKAGE_PYTHON_TWISTED_HTTP2=y +BR2_PACKAGE_PYTHON_UJSON=y +BR2_PACKAGE_PYTHON_UVLOOP=y +BR2_PACKAGE_PYTHON_VALIDATORS=y +BR2_PACKAGE_PYTHON_VERSIONTOOLS=y +BR2_PACKAGE_PYTHON_VISITOR=y +BR2_PACKAGE_PYTHON_WEB2PY=y +BR2_PACKAGE_PYTHON_WEBPY=y +BR2_PACKAGE_PYTHON_WEBSOCKETS=y +BR2_PACKAGE_PYTHON_WHOOSH=y +BR2_PACKAGE_PYTHON_WS4PY=y +BR2_PACKAGE_PYTHON_WSACCEL=y +BR2_PACKAGE_PYTHON_WTFORMS=y +BR2_PACKAGE_PYTHON_XLIB=y +BR2_PACKAGE_PYTHON_XLSXWRITER=y +BR2_PACKAGE_PYTHON_XLUTILS=y +BR2_PACKAGE_PYTHON_XMLTODICT=y +BR2_PACKAGE_PYTHON_XMODEM=y +BR2_PACKAGE_PYTHON_ZC_LOCKFILE=y +BR2_PACKAGE_PYTHON_ZEROCONF=y +BR2_PACKAGE_LIBARCHIVE=y +BR2_PACKAGE_LIBARCHIVE_BSDTAR=y +BR2_PACKAGE_LIBARCHIVE_BSDCPIO=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y +BR2_PACKAGE_LIBSSH=y +BR2_PACKAGE_LIBSSH_SERVER=y +BR2_PACKAGE_LIBSSH2=y +BR2_PACKAGE_RHASH=y +BR2_PACKAGE_RHASH_BIN=y +BR2_PACKAGE_HIREDIS=y +BR2_PACKAGE_REDIS=y +BR2_PACKAGE_SQLITE_STAT4=y +BR2_PACKAGE_SQLITE_ENABLE_COLUMN_METADATA=y +BR2_PACKAGE_SQLITE_ENABLE_FTS3=y +BR2_PACKAGE_SQLITE_ENABLE_JSON1=y +BR2_PACKAGE_SQLITE_ENABLE_UNLOCK_NOTIFY=y +BR2_PACKAGE_SQLITE_SECURE_DELETE=y +BR2_PACKAGE_SQLITE_NO_SYNC=y +BR2_PACKAGE_LIBCONFIG=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_OPENCV3=y +BR2_PACKAGE_OPENCV3_WITH_QT5=y +BR2_PACKAGE_OPENCV3_LIB_PYTHON=y +BR2_PACKAGE_OPENCV3_LIB_SHAPE=y +BR2_PACKAGE_OPENCV3_LIB_STITCHING=y +BR2_PACKAGE_OPENCV3_LIB_SUPERRES=y +BR2_PACKAGE_OPENCV3_LIB_TS=y +BR2_PACKAGE_OPENCV3_LIB_VIDEOSTAB=y +BR2_PACKAGE_OPENCV3_BUILD_TESTS=y +BR2_PACKAGE_OPENCV3_BUILD_PERF_TESTS=y +BR2_PACKAGE_OPENCV3_WITH_FFMPEG=y +BR2_PACKAGE_OPENCV3_WITH_JPEG=y +BR2_PACKAGE_OPENCV3_WITH_PNG=y +BR2_PACKAGE_OPENCV3_WITH_PROTOBUF=y +BR2_PACKAGE_OPENCV3_WITH_TIFF=y +BR2_PACKAGE_OPENCV3_WITH_V4L=y +BR2_PACKAGE_OPENCV3_INSTALL_DATA=y +BR2_PACKAGE_JSONCPP=y +BR2_PACKAGE_TINYXML=y +BR2_PACKAGE_TINYXML2=y +BR2_PACKAGE_LIBCAMERA=y +BR2_PACKAGE_LIBCAMERA_V4L2=y +BR2_PACKAGE_X264=y +BR2_PACKAGE_X265=y +BR2_PACKAGE_CPPZMQ=y +BR2_PACKAGE_LIBCURL=y +BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_LIBCURL_VERBOSE=y +BR2_PACKAGE_LIBCURL_TLS_NONE=y +BR2_PACKAGE_LIBMICROHTTPD=y +BR2_PACKAGE_ZEROMQ_NORM=y +BR2_PACKAGE_ZEROMQ_PGM=y +BR2_PACKAGE_ZMQPP=y +BR2_PACKAGE_BOOST=y +BR2_PACKAGE_BOOST_CONTAINER=y +BR2_PACKAGE_BOOST_CONTRACT=y +BR2_PACKAGE_BOOST_EXCEPTION=y +BR2_PACKAGE_BOOST_GRAPH=y +BR2_PACKAGE_BOOST_GRAPH_PARALLEL=y +BR2_PACKAGE_BOOST_IOSTREAMS=y +BR2_PACKAGE_BOOST_LOCALE=y +BR2_PACKAGE_BOOST_LOG=y +BR2_PACKAGE_BOOST_MATH=y +BR2_PACKAGE_BOOST_MPI=y +BR2_PACKAGE_BOOST_PROGRAM_OPTIONS=y +BR2_PACKAGE_BOOST_PYTHON=y +BR2_PACKAGE_BOOST_RANDOM=y +BR2_PACKAGE_BOOST_SERIALIZATION=y +BR2_PACKAGE_BOOST_STACKTRACE=y +BR2_PACKAGE_BOOST_TEST=y +BR2_PACKAGE_BOOST_TYPE_ERASURE=y +BR2_PACKAGE_BOOST_WAVE=y +BR2_PACKAGE_CMOCKA=y +BR2_PACKAGE_LIBEVENT=y +BR2_PACKAGE_COLLECTD=y +BR2_PACKAGE_COLLECTD_EXEC=y +BR2_PACKAGE_COLLECTD_IPTABLES=y +BR2_PACKAGE_XUTIL_UTIL_MACROS=y +BR2_PACKAGE_BLUEZ_TOOLS=y +BR2_PACKAGE_BLUEZ5_UTILS=y +BR2_PACKAGE_BLUEZ5_UTILS_OBEX=y +BR2_PACKAGE_BLUEZ5_UTILS_CLIENT=y +BR2_PACKAGE_BLUEZ5_UTILS_DEPRECATED=y +BR2_PACKAGE_BLUEZ5_UTILS_EXPERIMENTAL=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_HEALTH=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_MESH=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_MIDI=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_NFC=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_SAP=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_SIXAXIS=y +BR2_PACKAGE_BLUEZ5_UTILS_TEST=y +BR2_PACKAGE_BLUEZ5_UTILS_TOOLS_HID2HCI=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_DHCPCD5=y +BR2_PACKAGE_DROPBEAR=y +BR2_PACKAGE_DROPBEAR_DISABLE_REVERSEDNS=y +BR2_PACKAGE_DROPBEAR_LEGACY_CRYPTO=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IFTOP=y +BR2_PACKAGE_IFUPDOWN=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPERF3=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES_BPF_NFSYNPROXY=y +BR2_PACKAGE_IPTABLES_NFTABLES=y +BR2_PACKAGE_IW=y +BR2_PACKAGE_LFTP=y +BR2_PACKAGE_LFTP_CMD_TORRENT=y +BR2_PACKAGE_LFTP_PROTO_FISH=y +BR2_PACKAGE_LFTP_PROTO_HTTP=y +BR2_PACKAGE_LFTP_PROTO_SFTP=y +BR2_PACKAGE_NETSNMP=y +BR2_PACKAGE_NETSNMP_STATIC=y +BR2_PACKAGE_NETWORK_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_TUI=y +BR2_PACKAGE_NETWORK_MANAGER_MODEM_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_PPPD=y +BR2_PACKAGE_NETWORK_MANAGER_OVS=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_RSYNC=y +BR2_PACKAGE_UHTTPD=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_CLI=y +BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y +BR2_PACKAGE_DASH=y +BR2_PACKAGE_ZSH=y +BR2_PACKAGE_FILE=y +BR2_PACKAGE_COREUTILS=y +BR2_PACKAGE_DEBIANUTILS=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_PROCPS_NG=y +BR2_PACKAGE_SYSTEMD_ANALYZE=y +BR2_PACKAGE_UTIL_LINUX_BINARIES=y +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y +BR2_PACKAGE_UTIL_LINUX_RFKILL=y +BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS=y +BR2_PACKAGE_LESS=y +BR2_PACKAGE_MC=y +BR2_PACKAGE_VIM=y +BR2_PACKAGE_BOOT_RUN=y +BR2_PACKAGE_DRIVER_TESTCASE=y +BR2_PACKAGE_DRIVER_TESTCASE_QT=y +# BR2_PACKAGE_DRIVER_TESTCASE_QT_AUTO_START is not set +BR2_PACKAGE_LVGL_KIT=y +BR2_PACKAGE_LS_DEFAULT_ETH_CONFIG=y +BR2_PACKAGE_LS_DEFAULT_ETH_NAME="eth0 eth1" +BR2_PACKAGE_LS_DEFAULT_ETH_IP="192.168.1.10 192.168.2.11" +BR2_PACKAGE_QT_USE_TSLIB=y +BR2_PACKAGE_LIBGO_LA=y +BR2_PACKAGE_LOONGSON_RESIZE=y +BR2_PACKAGE_LOONGSON_KERNEL=y +BR2_PACKAGE_LOONGSON_KERNEL_PATH="~/tmp/bsp/test/2K300/kernel/" +BR2_PACKAGE_LOONGSON_BUILD_ESSENTIAL=y +BR2_PACKAGE_LOONGSON_BUILD_ESSENTIAL_CMAKE_GDB=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="2048M" +BR2_TARGET_ROOTFS_EXT2_MKFS_OPTIONS="-O ^64bit -O ^metadata_csum" +BR2_TARGET_ROOTFS_EXT2_GZIP=y +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_PACKAGE_HOST_CMAKE=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_PYTHON3=y diff --git a/configs/loongson2k300_mini_dp_defconfig b/configs/loongson2k300_mini_dp_defconfig new file mode 100644 index 00000000..39f32553 --- /dev/null +++ b/configs/loongson2k300_mini_dp_defconfig @@ -0,0 +1,317 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_INIT_SYSTEMD=y +BR2_TARGET_GENERIC_ROOT_PASSWD="123" +BR2_SYSTEM_BIN_SH_BASH=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +BR2_SYSTEM_ENABLE_NLS=y +BR2_TARGET_LOCALTIME="Asia/Shanghai" +BR2_ROOTFS_OVERLAY="board/loongson/ls2k1000la/rootfs_overlay" +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_AMIXER=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_FFMPEG_GPL=y +BR2_PACKAGE_FFMPEG_FFPLAY=y +BR2_PACKAGE_FFMPEG_FFPROBE=y +BR2_PACKAGE_FFMPEG_POSTPROC=y +BR2_PACKAGE_V4L2GRAB=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_COREMARK=y +BR2_PACKAGE_DHRYSTONE=y +BR2_PACKAGE_FIO=y +BR2_PACKAGE_IOZONE=y +BR2_PACKAGE_LMBENCH=y +BR2_PACKAGE_NETPERF=y +BR2_PACKAGE_PV=y +BR2_PACKAGE_RT_TESTS=y +BR2_PACKAGE_STRESS=y +BR2_PACKAGE_STRESS_NG=y +BR2_PACKAGE_STRESSAPPTEST=y +BR2_PACKAGE_FLEX=y +BR2_PACKAGE_MAKE=y +BR2_PACKAGE_TREE=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_NFS_UTILS=y +BR2_PACKAGE_SOURCEHANSERIF=y +BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR=y +BR2_PACKAGE_FSWEBCAM=y +BR2_PACKAGE_FBDUMP=y +BR2_PACKAGE_FBGRAB=y +BR2_PACKAGE_FBSET=y +BR2_PACKAGE_PSPLASH=y +BR2_PACKAGE_SDL2_GFX=y +BR2_PACKAGE_SDL2_IMAGE=y +BR2_PACKAGE_SDL2_MIXER=y +BR2_PACKAGE_SDL2_NET=y +BR2_PACKAGE_SDL2_TTF=y +BR2_PACKAGE_QT5=y +BR2_PACKAGE_QT5BASE_MYSQL=y +BR2_PACKAGE_QT5BASE_SQLITE_QT=y +BR2_PACKAGE_QT5BASE_DEFAULT_QPA="linuxfb" +BR2_PACKAGE_QT5BASE_FONTCONFIG=y +BR2_PACKAGE_QT5BASE_HARFBUZZ=y +BR2_PACKAGE_QT5BASE_GIF=y +BR2_PACKAGE_QT5BASE_JPEG=y +BR2_PACKAGE_QT5BASE_PNG=y +BR2_PACKAGE_QT5BASE_DBUS=y +BR2_PACKAGE_QT5BASE_TSLIB=y +BR2_PACKAGE_QT5CHARTS=y +BR2_PACKAGE_QT5MQTT=y +BR2_PACKAGE_QT5SENSORS=y +BR2_PACKAGE_QT5SERIALBUS=y +BR2_PACKAGE_QT5SVG=y +BR2_PACKAGE_QT5XMLPATTERNS=y +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_8265=y +BR2_PACKAGE_LINUX_FIRMWARE_RTL_RTW88=y +BR2_PACKAGE_DT_UTILS=y +BR2_PACKAGE_HWLOC=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_IOSTAT=y +BR2_PACKAGE_LIBUIO=y +BR2_PACKAGE_LINUX_SERIAL_TEST=y +BR2_PACKAGE_LM_SENSORS=y +BR2_PACKAGE_LM_SENSORS_PWMCONFIG=y +BR2_PACKAGE_LSHW=y +BR2_PACKAGE_LSUIO=y +BR2_PACKAGE_MEMTESTER=y +BR2_PACKAGE_RS485CONF=y +BR2_PACKAGE_RTC_TOOLS=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_SYSSTAT=y +BR2_PACKAGE_USBMOUNT=y +BR2_PACKAGE_USBUTILS=y +BR2_PACKAGE_PYTHON3=y +BR2_PACKAGE_PYTHON3_BZIP2=y +BR2_PACKAGE_PYTHON3_CURSES=y +BR2_PACKAGE_PYTHON3_DECIMAL=y +BR2_PACKAGE_PYTHON3_OSSAUDIODEV=y +BR2_PACKAGE_PYTHON3_READLINE=y +BR2_PACKAGE_PYTHON3_XZ=y +BR2_PACKAGE_PYTHON_CANOPEN=y +BR2_PACKAGE_PYTHON_DJANGO=y +BR2_PACKAGE_PYTHON_FLASK=y +BR2_PACKAGE_PYTHON_LXML=y +BR2_PACKAGE_PYTHON_MODBUS_TK=y +BR2_PACKAGE_PYTHON_PIP=y +BR2_PACKAGE_PYTHON_PYGAME=y +BR2_PACKAGE_PYTHON_PYGAME_IMAGE=y +BR2_PACKAGE_PYTHON_PYGAME_EXAMPLES=y +BR2_PACKAGE_PYTHON_PYGAME_FONT=y +BR2_PACKAGE_PYTHON_PYGAME_MIXER=y +BR2_PACKAGE_PYTHON_PYGAME_MIXER_MUSIC=y +BR2_PACKAGE_PYTHON_PYMODBUS=y +BR2_PACKAGE_PYTHON_PYMYSQL=y +BR2_PACKAGE_PYTHON_PYQRCODE=y +BR2_PACKAGE_PYTHON_PYQT5=y +BR2_PACKAGE_PYTHON_PYUSB=y +BR2_PACKAGE_PYTHON_SIMPLESQLITE=y +BR2_PACKAGE_PYTHON_SOCKETIO=y +BR2_PACKAGE_PYTHON_URLLIB3=y +BR2_PACKAGE_LIBARCHIVE=y +BR2_PACKAGE_LIBARCHIVE_BSDTAR=y +BR2_PACKAGE_LIBARCHIVE_BSDCPIO=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y +BR2_PACKAGE_LIBSSH=y +BR2_PACKAGE_LIBSSH_SERVER=y +BR2_PACKAGE_LIBSSH2=y +BR2_PACKAGE_RHASH=y +BR2_PACKAGE_RHASH_BIN=y +BR2_PACKAGE_HIREDIS=y +BR2_PACKAGE_REDIS=y +BR2_PACKAGE_SQLITE_STAT4=y +BR2_PACKAGE_SQLITE_ENABLE_COLUMN_METADATA=y +BR2_PACKAGE_SQLITE_ENABLE_FTS3=y +BR2_PACKAGE_SQLITE_ENABLE_JSON1=y +BR2_PACKAGE_SQLITE_ENABLE_UNLOCK_NOTIFY=y +BR2_PACKAGE_SQLITE_SECURE_DELETE=y +BR2_PACKAGE_SQLITE_NO_SYNC=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_LIBSVG_CAIRO=y +BR2_PACKAGE_OPENCV3=y +BR2_PACKAGE_OPENCV3_WITH_QT5=y +BR2_PACKAGE_OPENCV3_LIB_PYTHON=y +BR2_PACKAGE_OPENCV3_LIB_SHAPE=y +BR2_PACKAGE_OPENCV3_LIB_STITCHING=y +BR2_PACKAGE_OPENCV3_LIB_SUPERRES=y +BR2_PACKAGE_OPENCV3_LIB_TS=y +BR2_PACKAGE_OPENCV3_LIB_VIDEOSTAB=y +BR2_PACKAGE_OPENCV3_BUILD_TESTS=y +BR2_PACKAGE_OPENCV3_BUILD_PERF_TESTS=y +BR2_PACKAGE_OPENCV3_WITH_FFMPEG=y +BR2_PACKAGE_OPENCV3_WITH_JPEG=y +BR2_PACKAGE_OPENCV3_WITH_PNG=y +BR2_PACKAGE_OPENCV3_WITH_PROTOBUF=y +BR2_PACKAGE_OPENCV3_WITH_TIFF=y +BR2_PACKAGE_OPENCV3_WITH_V4L=y +BR2_PACKAGE_OPENCV3_WITH_WEBP=y +BR2_PACKAGE_OPENCV3_INSTALL_DATA=y +BR2_PACKAGE_JSONCPP=y +BR2_PACKAGE_LIBFASTJSON=y +BR2_PACKAGE_TINYXML=y +BR2_PACKAGE_TINYXML2=y +BR2_PACKAGE_LIBCAMERA=y +BR2_PACKAGE_LIBCAMERA_V4L2=y +BR2_PACKAGE_X264=y +BR2_PACKAGE_X265=y +BR2_PACKAGE_CPPZMQ=y +BR2_PACKAGE_LIBCURL=y +BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_LIBCURL_VERBOSE=y +BR2_PACKAGE_LIBCURL_TLS_NONE=y +BR2_PACKAGE_LIBMICROHTTPD=y +BR2_PACKAGE_LIBMODBUS=y +BR2_PACKAGE_PAHO_MQTT_C=y +BR2_PACKAGE_ZEROMQ_NORM=y +BR2_PACKAGE_ZEROMQ_PGM=y +BR2_PACKAGE_ZMQPP=y +BR2_PACKAGE_BOOST=y +BR2_PACKAGE_BOOST_CONTRACT=y +BR2_PACKAGE_BOOST_EXCEPTION=y +BR2_PACKAGE_BOOST_GRAPH=y +BR2_PACKAGE_BOOST_GRAPH_PARALLEL=y +BR2_PACKAGE_BOOST_IOSTREAMS=y +BR2_PACKAGE_BOOST_JSON=y +BR2_PACKAGE_BOOST_LOCALE=y +BR2_PACKAGE_BOOST_LOG=y +BR2_PACKAGE_BOOST_MATH=y +BR2_PACKAGE_BOOST_MPI=y +BR2_PACKAGE_BOOST_NOWIDE=y +BR2_PACKAGE_BOOST_PROGRAM_OPTIONS=y +BR2_PACKAGE_BOOST_PYTHON=y +BR2_PACKAGE_BOOST_RANDOM=y +BR2_PACKAGE_BOOST_SERIALIZATION=y +BR2_PACKAGE_BOOST_STACKTRACE=y +BR2_PACKAGE_BOOST_TEST=y +BR2_PACKAGE_BOOST_TYPE_ERASURE=y +BR2_PACKAGE_BOOST_WAVE=y +BR2_PACKAGE_CMOCKA=y +BR2_PACKAGE_LIBEVENT=y +BR2_PACKAGE_LIBUV=y +BR2_PACKAGE_COLLECTD=y +BR2_PACKAGE_COLLECTD_EXEC=y +BR2_PACKAGE_COLLECTD_IPTABLES=y +BR2_PACKAGE_COLLECTD_NFS=y +BR2_PACKAGE_XUTIL_UTIL_MACROS=y +BR2_PACKAGE_BLUEZ_TOOLS=y +BR2_PACKAGE_BLUEZ5_UTILS=y +BR2_PACKAGE_BLUEZ5_UTILS_OBEX=y +BR2_PACKAGE_BLUEZ5_UTILS_CLIENT=y +BR2_PACKAGE_BLUEZ5_UTILS_DEPRECATED=y +BR2_PACKAGE_BLUEZ5_UTILS_EXPERIMENTAL=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_HEALTH=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_MESH=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_MIDI=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_NFC=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_SAP=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_SIXAXIS=y +BR2_PACKAGE_BLUEZ5_UTILS_TEST=y +BR2_PACKAGE_BLUEZ5_UTILS_TOOLS_HID2HCI=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_DHCP=y +BR2_PACKAGE_DHCP_SERVER=y +BR2_PACKAGE_DHCP_SERVER_DELAYED_ACK=y +BR2_PACKAGE_DHCP_RELAY=y +BR2_PACKAGE_DHCP_CLIENT=y +BR2_PACKAGE_DHCPCD5=y +BR2_PACKAGE_DROPBEAR=y +BR2_PACKAGE_DROPBEAR_DISABLE_REVERSEDNS=y +BR2_PACKAGE_DROPBEAR_LEGACY_CRYPTO=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_HOSTAPD=y +BR2_PACKAGE_IFTOP=y +BR2_PACKAGE_IFUPDOWN=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPERF3=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES_BPF_NFSYNPROXY=y +BR2_PACKAGE_IPTABLES_NFTABLES=y +BR2_PACKAGE_IW=y +BR2_PACKAGE_LFTP=y +BR2_PACKAGE_LFTP_CMD_TORRENT=y +BR2_PACKAGE_LFTP_PROTO_FISH=y +BR2_PACKAGE_LFTP_PROTO_HTTP=y +BR2_PACKAGE_LFTP_PROTO_SFTP=y +BR2_PACKAGE_LIGHTTPD=y +BR2_PACKAGE_LIGHTTPD_OPENSSL=y +BR2_PACKAGE_LIGHTTPD_ZLIB=y +BR2_PACKAGE_LIGHTTPD_BZIP2=y +BR2_PACKAGE_LIGHTTPD_PCRE=y +BR2_PACKAGE_LIGHTTPD_WEBDAV=y +BR2_PACKAGE_LRZSZ=y +BR2_PACKAGE_NETSNMP=y +BR2_PACKAGE_NETSNMP_STATIC=y +BR2_PACKAGE_NETWORK_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_TUI=y +BR2_PACKAGE_NETWORK_MANAGER_MODEM_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_PPPD=y +BR2_PACKAGE_NETWORK_MANAGER_OVS=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_RSYNC=y +BR2_PACKAGE_UHTTPD=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_AP_SUPPORT=y +BR2_PACKAGE_WPA_SUPPLICANT_WIFI_DISPLAY=y +BR2_PACKAGE_WPA_SUPPLICANT_MESH_NETWORKING=y +BR2_PACKAGE_WPA_SUPPLICANT_AUTOSCAN=y +BR2_PACKAGE_WPA_SUPPLICANT_EAP=y +BR2_PACKAGE_WPA_SUPPLICANT_HOTSPOT=y +BR2_PACKAGE_WPA_SUPPLICANT_DEBUG_SYSLOG=y +BR2_PACKAGE_WPA_SUPPLICANT_WPS=y +BR2_PACKAGE_WPA_SUPPLICANT_WPA3=y +BR2_PACKAGE_WPA_SUPPLICANT_CLI=y +BR2_PACKAGE_WPA_SUPPLICANT_WPA_CLIENT_SO=y +BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y +BR2_PACKAGE_WPA_SUPPLICANT_DBUS=y +BR2_PACKAGE_WPA_SUPPLICANT_DBUS_INTROSPECTION=y +BR2_PACKAGE_DASH=y +BR2_PACKAGE_ZSH=y +BR2_PACKAGE_FILE=y +BR2_PACKAGE_COREUTILS=y +BR2_PACKAGE_DEBIANUTILS=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_PROCPS_NG=y +BR2_PACKAGE_SYSTEMD_ANALYZE=y +BR2_PACKAGE_UTIL_LINUX_BINARIES=y +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y +BR2_PACKAGE_UTIL_LINUX_RFKILL=y +BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS=y +BR2_PACKAGE_LESS=y +BR2_PACKAGE_MC=y +BR2_PACKAGE_VIM=y +BR2_PACKAGE_BOOT_RUN=y +BR2_PACKAGE_LVGL_KIT=y +BR2_PACKAGE_LS_DEFAULT_ETH_CONFIG=y +BR2_PACKAGE_QT_USE_TSLIB=y +BR2_PACKAGE_LIBGO_LA=y +BR2_PACKAGE_LS3_SYSTEM_TOOL=y +BR2_PACKAGE_LS3_SYSTEM_TOOL_QT=y +BR2_PACKAGE_LOONGSON_RESIZE=y +BR2_PACKAGE_LOONGSON_KERNEL=y +BR2_PACKAGE_LOONGSON_KERNEL_PATH="~/tmp/bsp/test/2K300/kernel/" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="512M" +BR2_TARGET_ROOTFS_EXT2_MKFS_OPTIONS="-O ^64bit -O ^metadata_csum" +BR2_TARGET_ROOTFS_EXT2_GZIP=y +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_PACKAGE_HOST_CMAKE=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_PYTHON3=y diff --git a/configs/loongson2k300_pure_busybox_defconfig b/configs/loongson2k300_pure_busybox_defconfig new file mode 100644 index 00000000..36362448 --- /dev/null +++ b/configs/loongson2k300_pure_busybox_defconfig @@ -0,0 +1,39 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd ramdisk" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_ROOTFS_MERGED_USR=y +# BR2_TARGET_ENABLE_ROOT_LOGIN is not set +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +# BR2_ENABLE_LOCALE_PURGE is not set +BR2_PACKAGE_PV=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_ETHTOOL=y +# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_RSYNC=y +# BR2_PACKAGE_URANDOM_SCRIPTS is not set +BR2_PACKAGE_UTIL_LINUX_LIBFDISK=y +BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS=y +BR2_PACKAGE_UTIL_LINUX_FSCK=y +BR2_PACKAGE_UTIL_LINUX_MOUNT=y +# BR2_PACKAGE_LS2_SYS_CONFIG_TOOL is not set +BR2_PACKAGE_LOONGSON_RESIZE=y +BR2_PACKAGE_LOONGSON_KERNEL=y +BR2_PACKAGE_LOONGSON_KERNEL_PATH="~/tmp/bsp/test/2K300/kernel/" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="128M" +BR2_TARGET_ROOTFS_EXT2_MKFS_OPTIONS="-O ^64bit -O ^metadata_csum" +BR2_TARGET_ROOTFS_EXT2_GZIP=y +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MKPASSWD=y diff --git a/configs/loongson2k500_defconfig b/configs/loongson2k500_defconfig new file mode 100644 index 00000000..de19c204 --- /dev/null +++ b/configs/loongson2k500_defconfig @@ -0,0 +1,257 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd " +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_INIT_SYSTEMD=y +BR2_TARGET_GENERIC_ROOT_PASSWD="123" +BR2_SYSTEM_BIN_SH_BASH=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS2" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +# BR2_ENABLE_LOCALE_PURGE is not set +BR2_SYSTEM_ENABLE_NLS=y +BR2_TARGET_LOCALTIME="Asia/Shanghai" +BR2_ROOTFS_OVERLAY="board/loongson/ls2k500/rootfs_overlay" +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_AMIXER=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_FFMPEG_GPL=y +BR2_PACKAGE_FFMPEG_NONFREE=y +BR2_PACKAGE_FFMPEG_POSTPROC=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_IOZONE=y +BR2_PACKAGE_NETPERF=y +BR2_PACKAGE_PV=y +BR2_PACKAGE_RT_TESTS=y +BR2_PACKAGE_STRESS=y +BR2_PACKAGE_STRESS_NG=y +BR2_PACKAGE_STRESSAPPTEST=y +BR2_PACKAGE_FLEX=y +BR2_PACKAGE_MAKE=y +BR2_PACKAGE_TREE=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_SOURCEHANSERIF=y +BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR=y +BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR_SMALL=y +BR2_PACKAGE_PSPLASH=y +BR2_PACKAGE_QT5=y +BR2_PACKAGE_QT5BASE_MYSQL=y +BR2_PACKAGE_QT5BASE_SQLITE_QT=y +BR2_PACKAGE_QT5BASE_DEFAULT_QPA="linuxfb" +BR2_PACKAGE_QT5BASE_FONTCONFIG=y +BR2_PACKAGE_QT5BASE_HARFBUZZ=y +BR2_PACKAGE_QT5BASE_GIF=y +BR2_PACKAGE_QT5BASE_JPEG=y +BR2_PACKAGE_QT5BASE_PNG=y +BR2_PACKAGE_QT5BASE_DBUS=y +BR2_PACKAGE_QT5BASE_TSLIB=y +BR2_PACKAGE_QT5CHARTS=y +BR2_PACKAGE_QT5MQTT=y +BR2_PACKAGE_QT5SENSORS=y +BR2_PACKAGE_QT5SERIALBUS=y +BR2_PACKAGE_QT5SVG=y +BR2_PACKAGE_QT5XMLPATTERNS=y +BR2_PACKAGE_DT_UTILS=y +BR2_PACKAGE_HWLOC=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_MEMTESTER=y +BR2_PACKAGE_PCIUTILS=y +BR2_PACKAGE_RTC_TOOLS=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_PYTHON3=y +BR2_PACKAGE_PYTHON3_PY_PYC=y +BR2_PACKAGE_PYTHON3_BZIP2=y +BR2_PACKAGE_PYTHON3_CODECSCJK=y +BR2_PACKAGE_PYTHON3_CURSES=y +BR2_PACKAGE_PYTHON3_DECIMAL=y +BR2_PACKAGE_PYTHON3_OSSAUDIODEV=y +BR2_PACKAGE_PYTHON3_READLINE=y +BR2_PACKAGE_PYTHON3_SQLITE=y +BR2_PACKAGE_PYTHON3_XZ=y +BR2_PACKAGE_PYTHON_PIP=y +BR2_PACKAGE_PYTHON_PYQT5=y +BR2_PACKAGE_PYTHON_SOCKETIO=y +BR2_PACKAGE_LIBARCHIVE=y +BR2_PACKAGE_LIBARCHIVE_BSDTAR=y +BR2_PACKAGE_LIBARCHIVE_BSDCPIO=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y +BR2_PACKAGE_LIBSSH2=y +BR2_PACKAGE_RHASH=y +BR2_PACKAGE_RHASH_BIN=y +BR2_PACKAGE_HIREDIS=y +BR2_PACKAGE_REDIS=y +BR2_PACKAGE_SQLITE_STAT4=y +BR2_PACKAGE_SQLITE_ENABLE_COLUMN_METADATA=y +BR2_PACKAGE_SQLITE_ENABLE_FTS3=y +BR2_PACKAGE_SQLITE_ENABLE_JSON1=y +BR2_PACKAGE_SQLITE_ENABLE_UNLOCK_NOTIFY=y +BR2_PACKAGE_SQLITE_SECURE_DELETE=y +BR2_PACKAGE_SQLITE_NO_SYNC=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_OPENCV3=y +BR2_PACKAGE_OPENCV3_WITH_QT5=y +BR2_PACKAGE_OPENCV3_LIB_PYTHON=y +BR2_PACKAGE_OPENCV3_LIB_SHAPE=y +BR2_PACKAGE_OPENCV3_LIB_STITCHING=y +BR2_PACKAGE_OPENCV3_LIB_SUPERRES=y +BR2_PACKAGE_OPENCV3_LIB_TS=y +BR2_PACKAGE_OPENCV3_LIB_VIDEOSTAB=y +BR2_PACKAGE_OPENCV3_BUILD_TESTS=y +BR2_PACKAGE_OPENCV3_BUILD_PERF_TESTS=y +BR2_PACKAGE_OPENCV3_WITH_FFMPEG=y +BR2_PACKAGE_OPENCV3_WITH_JPEG=y +BR2_PACKAGE_OPENCV3_WITH_PNG=y +BR2_PACKAGE_OPENCV3_WITH_PROTOBUF=y +BR2_PACKAGE_OPENCV3_WITH_TIFF=y +BR2_PACKAGE_OPENCV3_WITH_V4L=y +BR2_PACKAGE_OPENCV3_WITH_WEBP=y +BR2_PACKAGE_OPENCV3_INSTALL_DATA=y +BR2_PACKAGE_LIBUSB=y +BR2_PACKAGE_JSONCPP=y +BR2_PACKAGE_LIBXML2=y +BR2_PACKAGE_TINYXML=y +BR2_PACKAGE_TINYXML2=y +BR2_PACKAGE_CPPZMQ=y +BR2_PACKAGE_LIBCURL=y +BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_LIBCURL_VERBOSE=y +BR2_PACKAGE_LIBCURL_TLS_NONE=y +BR2_PACKAGE_LIBMICROHTTPD=y +BR2_PACKAGE_ZEROMQ_NORM=y +BR2_PACKAGE_ZEROMQ_PGM=y +BR2_PACKAGE_ZMQPP=y +BR2_PACKAGE_BOOST=y +BR2_PACKAGE_BOOST_CONTAINER=y +BR2_PACKAGE_BOOST_CONTRACT=y +BR2_PACKAGE_BOOST_EXCEPTION=y +BR2_PACKAGE_BOOST_GRAPH=y +BR2_PACKAGE_BOOST_GRAPH_PARALLEL=y +BR2_PACKAGE_BOOST_IOSTREAMS=y +BR2_PACKAGE_BOOST_LOCALE=y +BR2_PACKAGE_BOOST_LOG=y +BR2_PACKAGE_BOOST_MATH=y +BR2_PACKAGE_BOOST_MPI=y +BR2_PACKAGE_BOOST_PROGRAM_OPTIONS=y +BR2_PACKAGE_BOOST_RANDOM=y +BR2_PACKAGE_BOOST_SERIALIZATION=y +BR2_PACKAGE_BOOST_STACKTRACE=y +BR2_PACKAGE_BOOST_TEST=y +BR2_PACKAGE_BOOST_TYPE_ERASURE=y +BR2_PACKAGE_BOOST_WAVE=y +BR2_PACKAGE_CMOCKA=y +BR2_PACKAGE_LIBEVENT=y +BR2_PACKAGE_LIBUV=y +BR2_PACKAGE_COLLECTD=y +BR2_PACKAGE_COLLECTD_EXEC=y +BR2_PACKAGE_COLLECTD_IPTABLES=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_DHCP=y +BR2_PACKAGE_DHCP_SERVER=y +BR2_PACKAGE_DHCP_SERVER_DELAYED_ACK=y +BR2_PACKAGE_DHCP_RELAY=y +BR2_PACKAGE_DHCP_CLIENT=y +BR2_PACKAGE_DHCPCD5=y +BR2_PACKAGE_DROPBEAR=y +BR2_PACKAGE_DROPBEAR_DISABLE_REVERSEDNS=y +BR2_PACKAGE_DROPBEAR_LEGACY_CRYPTO=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_HOSTAPD=y +BR2_PACKAGE_IFTOP=y +BR2_PACKAGE_IFUPDOWN=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPERF3=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES_BPF_NFSYNPROXY=y +BR2_PACKAGE_IPTABLES_NFTABLES=y +BR2_PACKAGE_IPUTILS=y +# BR2_PACKAGE_IPUTILS_CLOCKDIFF is not set +BR2_PACKAGE_IPUTILS_RARPD=y +# BR2_PACKAGE_IPUTILS_RDISC is not set +BR2_PACKAGE_IPUTILS_TFTPD=y +# BR2_PACKAGE_IPUTILS_TRACEPATH is not set +# BR2_PACKAGE_IPUTILS_TRACEROUTE6 is not set +# BR2_PACKAGE_IPUTILS_NINFOD is not set +BR2_PACKAGE_IW=y +BR2_PACKAGE_LFTP=y +BR2_PACKAGE_LFTP_CMD_TORRENT=y +BR2_PACKAGE_LFTP_PROTO_FISH=y +BR2_PACKAGE_LFTP_PROTO_HTTP=y +BR2_PACKAGE_LFTP_PROTO_SFTP=y +BR2_PACKAGE_LRZSZ=y +BR2_PACKAGE_NET_TOOLS=y +BR2_PACKAGE_NETSNMP=y +BR2_PACKAGE_NETSNMP_STATIC=y +BR2_PACKAGE_NETWORK_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_TUI=y +BR2_PACKAGE_NETWORK_MANAGER_MODEM_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_PPPD=y +BR2_PACKAGE_NETWORK_MANAGER_OVS=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_RSYNC=y +BR2_PACKAGE_UHTTPD=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_AP_SUPPORT=y +BR2_PACKAGE_WPA_SUPPLICANT_WIFI_DISPLAY=y +BR2_PACKAGE_WPA_SUPPLICANT_MESH_NETWORKING=y +BR2_PACKAGE_WPA_SUPPLICANT_AUTOSCAN=y +BR2_PACKAGE_WPA_SUPPLICANT_EAP=y +BR2_PACKAGE_WPA_SUPPLICANT_HOTSPOT=y +BR2_PACKAGE_WPA_SUPPLICANT_DEBUG_SYSLOG=y +BR2_PACKAGE_WPA_SUPPLICANT_WPS=y +BR2_PACKAGE_WPA_SUPPLICANT_WPA3=y +BR2_PACKAGE_WPA_SUPPLICANT_CLI=y +BR2_PACKAGE_WPA_SUPPLICANT_WPA_CLIENT_SO=y +BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y +BR2_PACKAGE_WPA_SUPPLICANT_DBUS=y +BR2_PACKAGE_WPA_SUPPLICANT_DBUS_INTROSPECTION=y +BR2_PACKAGE_DASH=y +BR2_PACKAGE_ZSH=y +BR2_PACKAGE_FILE=y +BR2_PACKAGE_COREUTILS=y +BR2_PACKAGE_DEBIANUTILS=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_PROCPS_NG=y +BR2_PACKAGE_SYSTEMD_ANALYZE=y +BR2_PACKAGE_UTIL_LINUX_BINARIES=y +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y +BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS=y +BR2_PACKAGE_LESS=y +BR2_PACKAGE_MC=y +BR2_PACKAGE_VIM=y +BR2_PACKAGE_BOOT_RUN=y +BR2_PACKAGE_DRIVER_TESTCASE=y +BR2_PACKAGE_DRIVER_TESTCASE_QT=y +# BR2_PACKAGE_DRIVER_TESTCASE_QT_AUTO_START is not set +# BR2_PACKAGE_QTPERF is not set +BR2_PACKAGE_LVGL_KIT=y +BR2_PACKAGE_TOUCH_SCREEN_MAP_VALUE=y +BR2_PACKAGE_LS_DEFAULT_ETH_CONFIG=y +BR2_PACKAGE_LS_DEFAULT_ETH_NAME="eth0 eth1" +BR2_PACKAGE_LS_DEFAULT_ETH_IP="192.168.1.10 192.168.2.11" +BR2_PACKAGE_QT_USE_TSLIB=y +BR2_PACKAGE_LIBGO_LA=y +# BR2_PACKAGE_LS2_SYS_CONFIG_TOOL is not set +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 +BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y +BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE="board/loongson/ubinize.cfg" +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=1900 +BR2_PACKAGE_HOST_CMAKE=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_PYTHON3=y diff --git a/configs/loongson2k500_fastboot_defconfig b/configs/loongson2k500_fastboot_defconfig new file mode 100644 index 00000000..168d9530 --- /dev/null +++ b/configs/loongson2k500_fastboot_defconfig @@ -0,0 +1,179 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_ROOTFS_MERGED_USR=y +BR2_TARGET_GENERIC_ROOT_PASSWD="123" +BR2_SYSTEM_BIN_SH_BASH=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS2" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +BR2_SYSTEM_ENABLE_NLS=y +BR2_TARGET_TZ_INFO=y +BR2_TARGET_LOCALTIME="Asia/Shanghai" +BR2_ROOTFS_OVERLAY="board/loongson/ls2k500/rootfs_overlay" +BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_AMIXER=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_XZ=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_IOZONE=y +BR2_PACKAGE_NETPERF=y +BR2_PACKAGE_PV=y +BR2_PACKAGE_RT_TESTS=y +BR2_PACKAGE_STRESS=y +BR2_PACKAGE_STRESS_NG=y +BR2_PACKAGE_STRESSAPPTEST=y +BR2_PACKAGE_FLEX=y +BR2_PACKAGE_MAKE=y +BR2_PACKAGE_TREE=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_SOURCEHANSERIF=y +BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR=y +BR2_PACKAGE_QT5=y +BR2_PACKAGE_QT5BASE_MYSQL=y +BR2_PACKAGE_QT5BASE_SQLITE_QT=y +BR2_PACKAGE_QT5BASE_DEFAULT_QPA="linuxfb" +BR2_PACKAGE_QT5BASE_FONTCONFIG=y +BR2_PACKAGE_QT5BASE_JPEG=y +BR2_PACKAGE_QT5BASE_PNG=y +BR2_PACKAGE_QT5BASE_DBUS=y +BR2_PACKAGE_QT5BASE_TSLIB=y +BR2_PACKAGE_QT5CHARTS=y +BR2_PACKAGE_QT5MQTT=y +BR2_PACKAGE_QT5SENSORS=y +BR2_PACKAGE_QT5SERIALBUS=y +BR2_PACKAGE_QT5SVG=y +BR2_PACKAGE_QT5XMLPATTERNS=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_MEMTESTER=y +BR2_PACKAGE_PCIUTILS=y +BR2_PACKAGE_RTC_TOOLS=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_LIBARCHIVE=y +BR2_PACKAGE_LIBARCHIVE_BSDTAR=y +BR2_PACKAGE_LIBARCHIVE_BSDCPIO=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y +BR2_PACKAGE_GNUTLS=y +BR2_PACKAGE_RHASH=y +BR2_PACKAGE_RHASH_BIN=y +BR2_PACKAGE_HIREDIS=y +BR2_PACKAGE_REDIS=y +BR2_PACKAGE_SQLITE=y +BR2_PACKAGE_SQLITE_STAT4=y +BR2_PACKAGE_SQLITE_ENABLE_COLUMN_METADATA=y +BR2_PACKAGE_SQLITE_ENABLE_FTS3=y +BR2_PACKAGE_SQLITE_ENABLE_JSON1=y +BR2_PACKAGE_SQLITE_ENABLE_UNLOCK_NOTIFY=y +BR2_PACKAGE_SQLITE_SECURE_DELETE=y +BR2_PACKAGE_SQLITE_NO_SYNC=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_LIBUSB=y +BR2_PACKAGE_JSONCPP=y +BR2_PACKAGE_LIBXML2=y +BR2_PACKAGE_TINYXML=y +BR2_PACKAGE_TINYXML2=y +BR2_PACKAGE_CPPZMQ=y +BR2_PACKAGE_LIBCURL=y +BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_LIBCURL_VERBOSE=y +BR2_PACKAGE_LIBCURL_TLS_NONE=y +BR2_PACKAGE_LIBMICROHTTPD=y +BR2_PACKAGE_ZEROMQ_NORM=y +BR2_PACKAGE_ZEROMQ_PGM=y +BR2_PACKAGE_ZMQPP=y +BR2_PACKAGE_BOOST=y +BR2_PACKAGE_BOOST_CONTAINER=y +BR2_PACKAGE_BOOST_CONTRACT=y +BR2_PACKAGE_BOOST_EXCEPTION=y +BR2_PACKAGE_BOOST_GRAPH=y +BR2_PACKAGE_BOOST_GRAPH_PARALLEL=y +BR2_PACKAGE_BOOST_IOSTREAMS=y +BR2_PACKAGE_BOOST_LOCALE=y +BR2_PACKAGE_BOOST_LOG=y +BR2_PACKAGE_BOOST_MATH=y +BR2_PACKAGE_BOOST_MPI=y +BR2_PACKAGE_BOOST_PROGRAM_OPTIONS=y +BR2_PACKAGE_BOOST_RANDOM=y +BR2_PACKAGE_BOOST_SERIALIZATION=y +BR2_PACKAGE_BOOST_STACKTRACE=y +BR2_PACKAGE_BOOST_TEST=y +BR2_PACKAGE_BOOST_TYPE_ERASURE=y +BR2_PACKAGE_BOOST_WAVE=y +BR2_PACKAGE_CMOCKA=y +BR2_PACKAGE_LIBCAP=y +BR2_PACKAGE_LIBEVENT=y +BR2_PACKAGE_LIBUV=y +BR2_PACKAGE_PROTOBUF=y +BR2_PACKAGE_PCRE_UCP=y +BR2_PACKAGE_COLLECTD=y +BR2_PACKAGE_COLLECTD_EXEC=y +BR2_PACKAGE_COLLECTD_IPTABLES=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_DROPBEAR=y +BR2_PACKAGE_DROPBEAR_DISABLE_REVERSEDNS=y +BR2_PACKAGE_DROPBEAR_LEGACY_CRYPTO=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IFTOP=y +BR2_PACKAGE_IFUPDOWN=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPERF3=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES_BPF_NFSYNPROXY=y +BR2_PACKAGE_IPTABLES_NFTABLES=y +BR2_PACKAGE_LFTP=y +BR2_PACKAGE_LFTP_CMD_TORRENT=y +BR2_PACKAGE_LFTP_PROTO_FISH=y +BR2_PACKAGE_LFTP_PROTO_HTTP=y +BR2_PACKAGE_LFTP_PROTO_SFTP=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_RSYNC=y +BR2_PACKAGE_UHTTPD=y +BR2_PACKAGE_DASH=y +BR2_PACKAGE_ZSH=y +BR2_PACKAGE_FILE=y +BR2_PACKAGE_COREUTILS=y +BR2_PACKAGE_DEBIANUTILS=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_KMOD=y +BR2_PACKAGE_KMOD_TOOLS=y +BR2_PACKAGE_PROCPS_NG=y +BR2_PACKAGE_UTIL_LINUX_BINARIES=y +BR2_PACKAGE_UTIL_LINUX_AGETTY=y +BR2_PACKAGE_UTIL_LINUX_FSCK=y +BR2_PACKAGE_UTIL_LINUX_MOUNT=y +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y +BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS=y +BR2_PACKAGE_VIM=y +BR2_PACKAGE_DRIVER_TESTCASE=y +BR2_PACKAGE_DRIVER_TESTCASE_QT=y +BR2_PACKAGE_LVGL_KIT=y +BR2_PACKAGE_TOUCH_SCREEN_MAP_VALUE=y +BR2_PACKAGE_LS_DEFAULT_ETH_CONFIG=y +BR2_PACKAGE_LS_DEFAULT_ETH_NAME="eth0 eth1" +BR2_PACKAGE_LS_DEFAULT_ETH_IP="192.168.1.10 192.168.2.11" +BR2_PACKAGE_FASTBOOT_BUSYBOX=y +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 +BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y +BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE="board/loongson/ubinize.cfg" +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=1900 +BR2_PACKAGE_HOST_CMAKE=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/loongson2k500_mini_defconfig b/configs/loongson2k500_mini_defconfig new file mode 100644 index 00000000..b1bff1a8 --- /dev/null +++ b/configs/loongson2k500_mini_defconfig @@ -0,0 +1,79 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd mini rootfs" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_INIT_SYSTEMD=y +BR2_TARGET_GENERIC_ROOT_PASSWD="123" +BR2_SYSTEM_BIN_SH_BASH=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS2" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +# BR2_ENABLE_LOCALE_PURGE is not set +BR2_TARGET_LOCALTIME="Asia/Shanghai" +BR2_ROOTFS_OVERLAY="board/loongson/ls2k500/rootfs_mini_overlay" +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_AMIXER=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_BZIP2=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_IOZONE=y +BR2_PACKAGE_NETPERF=y +BR2_PACKAGE_PV=y +BR2_PACKAGE_RT_TESTS=y +BR2_PACKAGE_STRESS=y +BR2_PACKAGE_STRESS_NG=y +BR2_PACKAGE_STRESSAPPTEST=y +BR2_PACKAGE_FLEX=y +BR2_PACKAGE_TREE=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_PSPLASH=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_MEMTESTER=y +BR2_PACKAGE_PCIUTILS=y +BR2_PACKAGE_RTC_TOOLS=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_PCRE=y +BR2_PACKAGE_PCRE_UCP=y +BR2_PACKAGE_PCRE2=y +BR2_PACKAGE_PCRE2_16=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IFTOP=y +BR2_PACKAGE_IFUPDOWN=y +BR2_PACKAGE_IPERF3=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IW=y +BR2_PACKAGE_LRZSZ=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_RSYNC=y +BR2_PACKAGE_COREUTILS=y +BR2_PACKAGE_PROCPS_NG=y +BR2_PACKAGE_SYSTEMD_ANALYZE=y +BR2_PACKAGE_UTIL_LINUX_BINARIES=y +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y +BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS=y +BR2_PACKAGE_BOOT_RUN=y +BR2_PACKAGE_LVGL_KIT=y +BR2_PACKAGE_TOUCH_SCREEN_MAP_VALUE=y +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 +BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y +BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE="board/loongson/ubinize.cfg" +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=1900 +BR2_PACKAGE_HOST_CMAKE=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/loongson2k500_mini_dp_4k_page_defconfig b/configs/loongson2k500_mini_dp_4k_page_defconfig new file mode 100644 index 00000000..009221f0 --- /dev/null +++ b/configs/loongson2k500_mini_dp_4k_page_defconfig @@ -0,0 +1,201 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_INIT_SYSTEMD=y +BR2_TARGET_GENERIC_ROOT_PASSWD="123" +BR2_SYSTEM_BIN_SH_BASH=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS2" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +BR2_SYSTEM_ENABLE_NLS=y +BR2_TARGET_LOCALTIME="Asia/Shanghai" +BR2_ROOTFS_OVERLAY="board/loongson/ls2k500/rootfs_overlay" +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_AMIXER=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_FFMPEG=y +BR2_PACKAGE_FFMPEG_GPL=y +BR2_PACKAGE_FFMPEG_NONFREE=y +BR2_PACKAGE_FFMPEG_FFPLAY=y +BR2_PACKAGE_FFMPEG_FFPROBE=y +BR2_PACKAGE_FFMPEG_AVRESAMPLE=y +BR2_PACKAGE_FFMPEG_POSTPROC=y +BR2_PACKAGE_V4L2GRAB=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_XZ=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_IOZONE=y +BR2_PACKAGE_NETPERF=y +BR2_PACKAGE_PV=y +BR2_PACKAGE_RT_TESTS=y +BR2_PACKAGE_STRACE=y +BR2_PACKAGE_STRESS=y +BR2_PACKAGE_STRESS_NG=y +BR2_PACKAGE_STRESSAPPTEST=y +BR2_PACKAGE_FLEX=y +BR2_PACKAGE_MAKE=y +BR2_PACKAGE_TREE=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_NFS_UTILS=y +BR2_PACKAGE_SOURCEHANSERIF=y +BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR=y +BR2_PACKAGE_DIRECTFB=y +BR2_PACKAGE_PSPLASH=y +BR2_PACKAGE_SDL2_DIRECTFB=y +BR2_PACKAGE_SDL2_GFX=y +BR2_PACKAGE_SDL2_IMAGE=y +BR2_PACKAGE_SDL2_MIXER=y +BR2_PACKAGE_SDL2_NET=y +BR2_PACKAGE_SDL2_TTF=y +BR2_PACKAGE_QT5=y +BR2_PACKAGE_QT5BASE_MYSQL=y +BR2_PACKAGE_QT5BASE_SQLITE_QT=y +BR2_PACKAGE_QT5BASE_DEFAULT_QPA="linuxfb" +BR2_PACKAGE_QT5BASE_FONTCONFIG=y +BR2_PACKAGE_QT5BASE_HARFBUZZ=y +BR2_PACKAGE_QT5BASE_GIF=y +BR2_PACKAGE_QT5BASE_JPEG=y +BR2_PACKAGE_QT5BASE_PNG=y +BR2_PACKAGE_QT5BASE_DBUS=y +BR2_PACKAGE_QT5BASE_TSLIB=y +BR2_PACKAGE_QT5CHARTS=y +BR2_PACKAGE_QT5MQTT=y +BR2_PACKAGE_QT5SENSORS=y +BR2_PACKAGE_QT5SERIALBUS=y +BR2_PACKAGE_QT5SVG=y +BR2_PACKAGE_QT5XMLPATTERNS=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_MEMTESTER=y +BR2_PACKAGE_PCIUTILS=y +BR2_PACKAGE_RTC_TOOLS=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_LIBARCHIVE=y +BR2_PACKAGE_LIBARCHIVE_BSDTAR=y +BR2_PACKAGE_LIBARCHIVE_BSDCPIO=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y +BR2_PACKAGE_LIBSSH2=y +BR2_PACKAGE_RHASH=y +BR2_PACKAGE_RHASH_BIN=y +BR2_PACKAGE_HIREDIS=y +BR2_PACKAGE_REDIS=y +BR2_PACKAGE_SQLITE=y +BR2_PACKAGE_SQLITE_STAT4=y +BR2_PACKAGE_SQLITE_ENABLE_COLUMN_METADATA=y +BR2_PACKAGE_SQLITE_ENABLE_FTS3=y +BR2_PACKAGE_SQLITE_ENABLE_JSON1=y +BR2_PACKAGE_SQLITE_ENABLE_UNLOCK_NOTIFY=y +BR2_PACKAGE_SQLITE_SECURE_DELETE=y +BR2_PACKAGE_SQLITE_NO_SYNC=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_LIBUSB=y +BR2_PACKAGE_JSONCPP=y +BR2_PACKAGE_LIBXML2=y +BR2_PACKAGE_TINYXML=y +BR2_PACKAGE_TINYXML2=y +BR2_PACKAGE_CPPZMQ=y +BR2_PACKAGE_LIBCURL=y +BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_LIBCURL_VERBOSE=y +BR2_PACKAGE_LIBCURL_TLS_NONE=y +BR2_PACKAGE_LIBMICROHTTPD=y +BR2_PACKAGE_ZEROMQ_NORM=y +BR2_PACKAGE_ZEROMQ_PGM=y +BR2_PACKAGE_ZMQPP=y +BR2_PACKAGE_BOOST=y +BR2_PACKAGE_BOOST_CONTAINER=y +BR2_PACKAGE_BOOST_CONTRACT=y +BR2_PACKAGE_BOOST_EXCEPTION=y +BR2_PACKAGE_BOOST_GRAPH=y +BR2_PACKAGE_BOOST_GRAPH_PARALLEL=y +BR2_PACKAGE_BOOST_IOSTREAMS=y +BR2_PACKAGE_BOOST_LOCALE=y +BR2_PACKAGE_BOOST_LOG=y +BR2_PACKAGE_BOOST_MATH=y +BR2_PACKAGE_BOOST_MPI=y +BR2_PACKAGE_BOOST_PROGRAM_OPTIONS=y +BR2_PACKAGE_BOOST_RANDOM=y +BR2_PACKAGE_BOOST_SERIALIZATION=y +BR2_PACKAGE_BOOST_STACKTRACE=y +BR2_PACKAGE_BOOST_TEST=y +BR2_PACKAGE_BOOST_TYPE_ERASURE=y +BR2_PACKAGE_BOOST_WAVE=y +BR2_PACKAGE_CMOCKA=y +BR2_PACKAGE_LIBEVENT=y +BR2_PACKAGE_LIBUV=y +BR2_PACKAGE_PROTOBUF=y +BR2_PACKAGE_COLLECTD=y +BR2_PACKAGE_COLLECTD_EXEC=y +BR2_PACKAGE_COLLECTD_IPTABLES=y +BR2_PACKAGE_COLLECTD_NFS=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_DROPBEAR=y +BR2_PACKAGE_DROPBEAR_DISABLE_REVERSEDNS=y +BR2_PACKAGE_DROPBEAR_LEGACY_CRYPTO=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IFTOP=y +BR2_PACKAGE_IFUPDOWN=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPERF3=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES_BPF_NFSYNPROXY=y +BR2_PACKAGE_IPTABLES_NFTABLES=y +BR2_PACKAGE_LFTP=y +BR2_PACKAGE_LFTP_CMD_TORRENT=y +BR2_PACKAGE_LFTP_PROTO_FISH=y +BR2_PACKAGE_LFTP_PROTO_HTTP=y +BR2_PACKAGE_LFTP_PROTO_SFTP=y +BR2_PACKAGE_LRZSZ=y +BR2_PACKAGE_NETSNMP=y +BR2_PACKAGE_NETSNMP_STATIC=y +BR2_PACKAGE_NETWORK_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_TUI=y +BR2_PACKAGE_NETWORK_MANAGER_MODEM_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_PPPD=y +BR2_PACKAGE_NETWORK_MANAGER_OVS=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_RSYNC=y +BR2_PACKAGE_UHTTPD=y +BR2_PACKAGE_DASH=y +BR2_PACKAGE_ZSH=y +BR2_PACKAGE_FILE=y +BR2_PACKAGE_COREUTILS=y +BR2_PACKAGE_DEBIANUTILS=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_PROCPS_NG=y +BR2_PACKAGE_SYSTEMD_ANALYZE=y +BR2_PACKAGE_UTIL_LINUX_BINARIES=y +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y +BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS=y +BR2_PACKAGE_VIM=y +BR2_PACKAGE_BOOT_RUN=y +BR2_PACKAGE_DRIVER_TESTCASE=y +BR2_PACKAGE_DRIVER_TESTCASE_QT=y +# BR2_PACKAGE_DRIVER_TESTCASE_QT_AUTO_START is not set +BR2_PACKAGE_LVGL_KIT=y +BR2_PACKAGE_LS_DEFAULT_ETH_CONFIG=y +BR2_PACKAGE_QT_USE_TSLIB=y +BR2_PACKAGE_LIBGO_LA=y +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_PEBSIZE=0x40000 +BR2_TARGET_ROOTFS_UBI_SUBSIZE=4096 +BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y +BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE="board/loongson/ubinize-465m.cfg" +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x3e000 +BR2_TARGET_ROOTFS_UBIFS_MINIOSIZE=0x1000 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=950 +BR2_PACKAGE_HOST_CMAKE=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/loongson2k500_mini_dp_defconfig b/configs/loongson2k500_mini_dp_defconfig new file mode 100644 index 00000000..b09b8bfe --- /dev/null +++ b/configs/loongson2k500_mini_dp_defconfig @@ -0,0 +1,225 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_INIT_SYSTEMD=y +BR2_TARGET_GENERIC_ROOT_PASSWD="123" +BR2_SYSTEM_BIN_SH_BASH=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS2" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +BR2_SYSTEM_ENABLE_NLS=y +BR2_TARGET_LOCALTIME="Asia/Shanghai" +BR2_ROOTFS_OVERLAY="board/loongson/ls2k500/rootfs_overlay" +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_AMIXER=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_FFMPEG=y +BR2_PACKAGE_FFMPEG_GPL=y +BR2_PACKAGE_FFMPEG_NONFREE=y +BR2_PACKAGE_FFMPEG_FFPLAY=y +BR2_PACKAGE_FFMPEG_FFPROBE=y +BR2_PACKAGE_FFMPEG_AVRESAMPLE=y +BR2_PACKAGE_FFMPEG_POSTPROC=y +BR2_PACKAGE_V4L2GRAB=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_XZ=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_IOZONE=y +BR2_PACKAGE_NETPERF=y +BR2_PACKAGE_PV=y +BR2_PACKAGE_RT_TESTS=y +BR2_PACKAGE_STRACE=y +BR2_PACKAGE_STRESS=y +BR2_PACKAGE_STRESS_NG=y +BR2_PACKAGE_STRESSAPPTEST=y +BR2_PACKAGE_FLEX=y +BR2_PACKAGE_MAKE=y +BR2_PACKAGE_TREE=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_NFS_UTILS=y +BR2_PACKAGE_SOURCEHANSERIF=y +BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR=y +BR2_PACKAGE_DIRECTFB=y +BR2_PACKAGE_PSPLASH=y +BR2_PACKAGE_SDL2_DIRECTFB=y +BR2_PACKAGE_SDL2_GFX=y +BR2_PACKAGE_SDL2_IMAGE=y +BR2_PACKAGE_SDL2_MIXER=y +BR2_PACKAGE_SDL2_NET=y +BR2_PACKAGE_SDL2_TTF=y +BR2_PACKAGE_QT5=y +BR2_PACKAGE_QT5BASE_MYSQL=y +BR2_PACKAGE_QT5BASE_SQLITE_QT=y +BR2_PACKAGE_QT5BASE_DEFAULT_QPA="linuxfb" +BR2_PACKAGE_QT5BASE_FONTCONFIG=y +BR2_PACKAGE_QT5BASE_HARFBUZZ=y +BR2_PACKAGE_QT5BASE_GIF=y +BR2_PACKAGE_QT5BASE_JPEG=y +BR2_PACKAGE_QT5BASE_PNG=y +BR2_PACKAGE_QT5BASE_DBUS=y +BR2_PACKAGE_QT5BASE_TSLIB=y +BR2_PACKAGE_QT5CHARTS=y +BR2_PACKAGE_QT5MQTT=y +BR2_PACKAGE_QT5SENSORS=y +BR2_PACKAGE_QT5SERIALBUS=y +BR2_PACKAGE_QT5SVG=y +BR2_PACKAGE_QT5XMLPATTERNS=y +BR2_PACKAGE_DT_UTILS=y +BR2_PACKAGE_HWLOC=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_MEMTESTER=y +BR2_PACKAGE_PCIUTILS=y +BR2_PACKAGE_RTC_TOOLS=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_LIBARCHIVE=y +BR2_PACKAGE_LIBARCHIVE_BSDTAR=y +BR2_PACKAGE_LIBARCHIVE_BSDCPIO=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y +BR2_PACKAGE_LIBSSH2=y +BR2_PACKAGE_RHASH=y +BR2_PACKAGE_RHASH_BIN=y +BR2_PACKAGE_HIREDIS=y +BR2_PACKAGE_REDIS=y +BR2_PACKAGE_SQLITE=y +BR2_PACKAGE_SQLITE_STAT4=y +BR2_PACKAGE_SQLITE_ENABLE_COLUMN_METADATA=y +BR2_PACKAGE_SQLITE_ENABLE_FTS3=y +BR2_PACKAGE_SQLITE_ENABLE_JSON1=y +BR2_PACKAGE_SQLITE_ENABLE_UNLOCK_NOTIFY=y +BR2_PACKAGE_SQLITE_SECURE_DELETE=y +BR2_PACKAGE_SQLITE_NO_SYNC=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_LIBUSB=y +BR2_PACKAGE_JSONCPP=y +BR2_PACKAGE_LIBXML2=y +BR2_PACKAGE_TINYXML=y +BR2_PACKAGE_TINYXML2=y +BR2_PACKAGE_CPPZMQ=y +BR2_PACKAGE_LIBCURL=y +BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_LIBCURL_VERBOSE=y +BR2_PACKAGE_LIBCURL_TLS_NONE=y +BR2_PACKAGE_LIBMICROHTTPD=y +BR2_PACKAGE_ZEROMQ_NORM=y +BR2_PACKAGE_ZEROMQ_PGM=y +BR2_PACKAGE_ZMQPP=y +BR2_PACKAGE_BOOST=y +BR2_PACKAGE_BOOST_CONTAINER=y +BR2_PACKAGE_BOOST_CONTRACT=y +BR2_PACKAGE_BOOST_EXCEPTION=y +BR2_PACKAGE_BOOST_GRAPH=y +BR2_PACKAGE_BOOST_GRAPH_PARALLEL=y +BR2_PACKAGE_BOOST_IOSTREAMS=y +BR2_PACKAGE_BOOST_LOCALE=y +BR2_PACKAGE_BOOST_LOG=y +BR2_PACKAGE_BOOST_MATH=y +BR2_PACKAGE_BOOST_MPI=y +BR2_PACKAGE_BOOST_PROGRAM_OPTIONS=y +BR2_PACKAGE_BOOST_RANDOM=y +BR2_PACKAGE_BOOST_SERIALIZATION=y +BR2_PACKAGE_BOOST_STACKTRACE=y +BR2_PACKAGE_BOOST_TEST=y +BR2_PACKAGE_BOOST_TYPE_ERASURE=y +BR2_PACKAGE_BOOST_WAVE=y +BR2_PACKAGE_CMOCKA=y +BR2_PACKAGE_LIBEVENT=y +BR2_PACKAGE_LIBUV=y +BR2_PACKAGE_PROTOBUF=y +BR2_PACKAGE_COLLECTD=y +BR2_PACKAGE_COLLECTD_EXEC=y +BR2_PACKAGE_COLLECTD_IPTABLES=y +BR2_PACKAGE_COLLECTD_NFS=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_DHCP=y +BR2_PACKAGE_DHCP_SERVER=y +BR2_PACKAGE_DHCP_SERVER_DELAYED_ACK=y +BR2_PACKAGE_DHCP_RELAY=y +BR2_PACKAGE_DHCP_CLIENT=y +BR2_PACKAGE_DROPBEAR=y +BR2_PACKAGE_DROPBEAR_DISABLE_REVERSEDNS=y +BR2_PACKAGE_DROPBEAR_LEGACY_CRYPTO=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_HOSTAPD=y +BR2_PACKAGE_IFTOP=y +BR2_PACKAGE_IFUPDOWN=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPERF3=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES_BPF_NFSYNPROXY=y +BR2_PACKAGE_IPTABLES_NFTABLES=y +BR2_PACKAGE_LFTP=y +BR2_PACKAGE_LFTP_CMD_TORRENT=y +BR2_PACKAGE_LFTP_PROTO_FISH=y +BR2_PACKAGE_LFTP_PROTO_HTTP=y +BR2_PACKAGE_LFTP_PROTO_SFTP=y +BR2_PACKAGE_LRZSZ=y +BR2_PACKAGE_NETSNMP=y +BR2_PACKAGE_NETSNMP_STATIC=y +BR2_PACKAGE_NETWORK_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_TUI=y +BR2_PACKAGE_NETWORK_MANAGER_MODEM_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_PPPD=y +BR2_PACKAGE_NETWORK_MANAGER_OVS=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_RSYNC=y +BR2_PACKAGE_UHTTPD=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_AP_SUPPORT=y +BR2_PACKAGE_WPA_SUPPLICANT_WIFI_DISPLAY=y +BR2_PACKAGE_WPA_SUPPLICANT_MESH_NETWORKING=y +BR2_PACKAGE_WPA_SUPPLICANT_AUTOSCAN=y +BR2_PACKAGE_WPA_SUPPLICANT_EAP=y +BR2_PACKAGE_WPA_SUPPLICANT_HOTSPOT=y +BR2_PACKAGE_WPA_SUPPLICANT_DEBUG_SYSLOG=y +BR2_PACKAGE_WPA_SUPPLICANT_WPS=y +BR2_PACKAGE_WPA_SUPPLICANT_WPA3=y +BR2_PACKAGE_WPA_SUPPLICANT_CLI=y +BR2_PACKAGE_WPA_SUPPLICANT_WPA_CLIENT_SO=y +BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y +BR2_PACKAGE_WPA_SUPPLICANT_DBUS=y +BR2_PACKAGE_WPA_SUPPLICANT_DBUS_INTROSPECTION=y +BR2_PACKAGE_DASH=y +BR2_PACKAGE_ZSH=y +BR2_PACKAGE_FILE=y +BR2_PACKAGE_COREUTILS=y +BR2_PACKAGE_DEBIANUTILS=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_PROCPS_NG=y +BR2_PACKAGE_SYSTEMD_ANALYZE=y +BR2_PACKAGE_UTIL_LINUX_BINARIES=y +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y +BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS=y +BR2_PACKAGE_LESS=y +BR2_PACKAGE_MC=y +BR2_PACKAGE_VIM=y +BR2_PACKAGE_BOOT_RUN=y +BR2_PACKAGE_DRIVER_TESTCASE=y +BR2_PACKAGE_DRIVER_TESTCASE_QT=y +# BR2_PACKAGE_DRIVER_TESTCASE_QT_AUTO_START is not set +BR2_PACKAGE_LVGL_KIT=y +BR2_PACKAGE_LS_DEFAULT_ETH_CONFIG=y +BR2_PACKAGE_QT_USE_TSLIB=y +BR2_PACKAGE_LIBGO_LA=y +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 +BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y +BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE="board/loongson/ubinize.cfg" +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=1900 +BR2_PACKAGE_HOST_CMAKE=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/loongson2k500_mini_dp_mini_defconfig b/configs/loongson2k500_mini_dp_mini_defconfig new file mode 100644 index 00000000..449e9a94 --- /dev/null +++ b/configs/loongson2k500_mini_dp_mini_defconfig @@ -0,0 +1,73 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd mini rootfs" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_INIT_SYSTEMD=y +BR2_TARGET_GENERIC_ROOT_PASSWD="123" +BR2_SYSTEM_BIN_SH_BASH=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS2" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +# BR2_ENABLE_LOCALE_PURGE is not set +BR2_TARGET_LOCALTIME="Asia/Shanghai" +BR2_ROOTFS_OVERLAY="board/loongson/ls2k500/rootfs_mini_overlay" +BR2_PACKAGE_BZIP2=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_IOZONE=y +BR2_PACKAGE_NETPERF=y +BR2_PACKAGE_PV=y +BR2_PACKAGE_RT_TESTS=y +BR2_PACKAGE_STRESS=y +BR2_PACKAGE_STRESS_NG=y +BR2_PACKAGE_STRESSAPPTEST=y +BR2_PACKAGE_FLEX=y +BR2_PACKAGE_TREE=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_PSPLASH=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_MEMTESTER=y +BR2_PACKAGE_PCIUTILS=y +BR2_PACKAGE_RTC_TOOLS=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_PCRE=y +BR2_PACKAGE_PCRE_UCP=y +BR2_PACKAGE_PCRE2=y +BR2_PACKAGE_PCRE2_16=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IFTOP=y +BR2_PACKAGE_IFUPDOWN=y +BR2_PACKAGE_IPERF3=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_RSYNC=y +BR2_PACKAGE_COREUTILS=y +BR2_PACKAGE_PROCPS_NG=y +BR2_PACKAGE_SYSTEMD_ANALYZE=y +BR2_PACKAGE_UTIL_LINUX_BINARIES=y +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y +BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS=y +BR2_PACKAGE_BOOT_RUN=y +BR2_PACKAGE_LVGL_KIT=y +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 +BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y +BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE="board/loongson/ubinize.cfg" +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=1900 +BR2_PACKAGE_HOST_CMAKE=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/loongson2k500_mini_dp_py3_defconfig b/configs/loongson2k500_mini_dp_py3_defconfig new file mode 100644 index 00000000..c858da3d --- /dev/null +++ b/configs/loongson2k500_mini_dp_py3_defconfig @@ -0,0 +1,115 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd " +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_INIT_SYSTEMD=y +BR2_TARGET_GENERIC_ROOT_PASSWD="123" +BR2_TARGET_GENERIC_GETTY_PORT="ttyS2" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +# BR2_ENABLE_LOCALE_PURGE is not set +BR2_ROOTFS_OVERLAY="board/loongson/ls2k500/rootfs_rt_overlay" +BR2_PACKAGE_FFMPEG_GPL=y +BR2_PACKAGE_FFMPEG_NONFREE=y +BR2_PACKAGE_FFMPEG_POSTPROC=y +BR2_PACKAGE_PV=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_SOURCEHANSERIF=y +BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR_SMALL=y +BR2_PACKAGE_PSPLASH=y +BR2_PACKAGE_QT5=y +BR2_PACKAGE_QT5BASE_DEFAULT_QPA="linuxfb" +BR2_PACKAGE_QT5BASE_FONTCONFIG=y +BR2_PACKAGE_QT5BASE_GIF=y +BR2_PACKAGE_QT5BASE_JPEG=y +BR2_PACKAGE_QT5BASE_PNG=y +BR2_PACKAGE_QT5BASE_TSLIB=y +BR2_PACKAGE_PYTHON3=y +BR2_PACKAGE_PYTHON3_PY_PYC=y +BR2_PACKAGE_PYTHON3_BZIP2=y +BR2_PACKAGE_PYTHON3_CODECSCJK=y +BR2_PACKAGE_PYTHON3_CURSES=y +BR2_PACKAGE_PYTHON3_DECIMAL=y +BR2_PACKAGE_PYTHON3_OSSAUDIODEV=y +BR2_PACKAGE_PYTHON3_READLINE=y +BR2_PACKAGE_PYTHON3_SQLITE=y +BR2_PACKAGE_PYTHON3_XZ=y +BR2_PACKAGE_PYTHON_FLASK_LOGIN=y +BR2_PACKAGE_PYTHON_MODBUS_TK=y +BR2_PACKAGE_PYTHON_PIP=y +BR2_PACKAGE_PYTHON_PYQT5=y +BR2_PACKAGE_PYTHON_SOCKETIO=y +BR2_PACKAGE_LIBSSH=y +BR2_PACKAGE_LIBSSH_SERVER=y +BR2_PACKAGE_SQLITE_STAT4=y +BR2_PACKAGE_SQLITE_ENABLE_COLUMN_METADATA=y +BR2_PACKAGE_SQLITE_ENABLE_FTS3=y +BR2_PACKAGE_SQLITE_ENABLE_JSON1=y +BR2_PACKAGE_SQLITE_ENABLE_UNLOCK_NOTIFY=y +BR2_PACKAGE_SQLITE_SECURE_DELETE=y +BR2_PACKAGE_UNIXODBC=y +BR2_PACKAGE_LIBFUSE=y +BR2_PACKAGE_LIBNFS=y +BR2_PACKAGE_LIBSYSFS=y +BR2_PACKAGE_OPENCV3=y +BR2_PACKAGE_OPENCV3_WITH_QT5=y +BR2_PACKAGE_OPENCV3_LIB_PYTHON=y +BR2_PACKAGE_OPENCV3_LIB_SHAPE=y +BR2_PACKAGE_OPENCV3_LIB_STITCHING=y +BR2_PACKAGE_OPENCV3_LIB_SUPERRES=y +BR2_PACKAGE_OPENCV3_LIB_TS=y +BR2_PACKAGE_OPENCV3_LIB_VIDEOSTAB=y +BR2_PACKAGE_OPENCV3_BUILD_TESTS=y +BR2_PACKAGE_OPENCV3_BUILD_PERF_TESTS=y +BR2_PACKAGE_OPENCV3_WITH_FFMPEG=y +BR2_PACKAGE_OPENCV3_WITH_JPEG=y +BR2_PACKAGE_OPENCV3_WITH_PNG=y +BR2_PACKAGE_OPENCV3_WITH_PROTOBUF=y +BR2_PACKAGE_OPENCV3_WITH_TIFF=y +BR2_PACKAGE_OPENCV3_WITH_V4L=y +BR2_PACKAGE_OPENCV3_WITH_WEBP=y +BR2_PACKAGE_OPENCV3_INSTALL_DATA=y +BR2_PACKAGE_SWCONFIG=y +BR2_PACKAGE_AUTOSSH=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPUTILS=y +# BR2_PACKAGE_IPUTILS_CLOCKDIFF is not set +BR2_PACKAGE_IPUTILS_RARPD=y +# BR2_PACKAGE_IPUTILS_RDISC is not set +BR2_PACKAGE_IPUTILS_TFTPD=y +# BR2_PACKAGE_IPUTILS_TRACEPATH is not set +# BR2_PACKAGE_IPUTILS_TRACEROUTE6 is not set +# BR2_PACKAGE_IPUTILS_NINFOD is not set +BR2_PACKAGE_NET_TOOLS=y +BR2_PACKAGE_NETWORK_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_TUI=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_RSYNC=y +BR2_PACKAGE_FILE=y +BR2_PACKAGE_UTIL_LINUX_LIBFDISK=y +BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS=y +BR2_PACKAGE_BOOT_RUN=y +# BR2_PACKAGE_MDIO is not set +# BR2_PACKAGE_QTPERF is not set +# BR2_PACKAGE_QT_MOVIE is not set +BR2_PACKAGE_LVGL_KIT=y +BR2_PACKAGE_LS_DEFAULT_ETH_CONFIG=y +BR2_PACKAGE_QT_USE_TSLIB=y +# BR2_PACKAGE_LS2_SYS_CONFIG_TOOL is not set +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 +BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y +BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE="board/loongson/ubinize.cfg" +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=1900 +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_PYTHON3=y diff --git a/configs/loongson2k500_pure_busybox_defconfig b/configs/loongson2k500_pure_busybox_defconfig new file mode 100644 index 00000000..92839d43 --- /dev/null +++ b/configs/loongson2k500_pure_busybox_defconfig @@ -0,0 +1,38 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd ramdisk" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_ROOTFS_MERGED_USR=y +# BR2_TARGET_ENABLE_ROOT_LOGIN is not set +BR2_TARGET_GENERIC_GETTY_PORT="ttyS2" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +# BR2_ENABLE_LOCALE_PURGE is not set +BR2_PACKAGE_PV=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_ETHTOOL=y +# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_RSYNC=y +# BR2_PACKAGE_URANDOM_SCRIPTS is not set +BR2_PACKAGE_UTIL_LINUX_LIBFDISK=y +BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS=y +BR2_PACKAGE_UTIL_LINUX_FSCK=y +BR2_PACKAGE_UTIL_LINUX_MOUNT=y +# BR2_PACKAGE_LS2_SYS_CONFIG_TOOL is not set +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 +BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y +BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE="board/loongson/ubinize.cfg" +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=1900 +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MKPASSWD=y diff --git a/configs/loongson2k500_ramdisk_defconfig b/configs/loongson2k500_ramdisk_defconfig new file mode 100644 index 00000000..3c5e31de --- /dev/null +++ b/configs/loongson2k500_ramdisk_defconfig @@ -0,0 +1,37 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd ramdisk" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_ROOTFS_MERGED_USR=y +# BR2_TARGET_ENABLE_ROOT_LOGIN is not set +# BR2_TARGET_GENERIC_GETTY is not set +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +# BR2_ENABLE_LOCALE_PURGE is not set +BR2_ROOTFS_OVERLAY="board/loongson/ls2k500/rootfs_ramdisk_overlay" +BR2_PACKAGE_PV=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_ETHTOOL=y +# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_RSYNC=y +# BR2_PACKAGE_URANDOM_SCRIPTS is not set +BR2_PACKAGE_UTIL_LINUX_LIBFDISK=y +BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS=y +BR2_PACKAGE_UTIL_LINUX_FSCK=y +BR2_PACKAGE_UTIL_LINUX_MOUNT=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_SIZE="32M" +BR2_TARGET_ROOTFS_EXT2_GZIP=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_PACKAGE_HOST_CMAKE=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MKPASSWD=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/loongson2k500_rt_defconfig b/configs/loongson2k500_rt_defconfig new file mode 100644 index 00000000..d14bbf7d --- /dev/null +++ b/configs/loongson2k500_rt_defconfig @@ -0,0 +1,70 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd ramdisk" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_ROOTFS_MERGED_USR=y +BR2_TARGET_GENERIC_ROOT_PASSWD="123" +BR2_TARGET_GENERIC_GETTY_PORT="ttyS2" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +# BR2_ENABLE_LOCALE_PURGE is not set +BR2_ROOTFS_OVERLAY="board/loongson/ls2k500/rootfs_rt_overlay" +BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y +BR2_PACKAGE_IOZONE=y +BR2_PACKAGE_NETPERF=y +BR2_PACKAGE_PV=y +BR2_PACKAGE_STRESS=y +BR2_PACKAGE_STRESSAPPTEST=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_LIBSSH=y +BR2_PACKAGE_LIBSSH_SERVER=y +BR2_PACKAGE_LIBSOCKETCAN=y +BR2_PACKAGE_BOOST=y +BR2_PACKAGE_BOOST_VERSION_1_67=y +BR2_PACKAGE_BOOST_CONTRACT=y +BR2_PACKAGE_BOOST_EXCEPTION=y +BR2_PACKAGE_BOOST_GRAPH=y +BR2_PACKAGE_BOOST_GRAPH_PARALLEL=y +BR2_PACKAGE_BOOST_IOSTREAMS=y +BR2_PACKAGE_BOOST_JSON=y +BR2_PACKAGE_BOOST_LOCALE=y +BR2_PACKAGE_BOOST_LOG=y +BR2_PACKAGE_BOOST_MATH=y +BR2_PACKAGE_BOOST_MPI=y +BR2_PACKAGE_BOOST_NOWIDE=y +BR2_PACKAGE_BOOST_PROGRAM_OPTIONS=y +BR2_PACKAGE_BOOST_RANDOM=y +BR2_PACKAGE_BOOST_SERIALIZATION=y +BR2_PACKAGE_BOOST_STACKTRACE=y +BR2_PACKAGE_BOOST_TEST=y +BR2_PACKAGE_BOOST_TYPE_ERASURE=y +BR2_PACKAGE_BOOST_WAVE=y +BR2_PACKAGE_PENGUTRONIX_CAN_UTILS=y +BR2_PACKAGE_ETHTOOL=y +# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_LRZSZ=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_RSYNC=y +# BR2_PACKAGE_URANDOM_SCRIPTS is not set +BR2_PACKAGE_BASH=y +BR2_PACKAGE_UTIL_LINUX_LIBFDISK=y +BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS=y +BR2_PACKAGE_UTIL_LINUX_FSCK=y +BR2_PACKAGE_UTIL_LINUX_MOUNT=y +# BR2_PACKAGE_LS2_SYS_CONFIG_TOOL is not set +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 +BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y +BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE="board/loongson/ubinize.cfg" +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=1900 +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_GENIMAGE=y diff --git a/configs/loongson2k500_test_defconfig b/configs/loongson2k500_test_defconfig new file mode 100644 index 00000000..02374f79 --- /dev/null +++ b/configs/loongson2k500_test_defconfig @@ -0,0 +1,188 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_INIT_SYSTEMD=y +BR2_TARGET_GENERIC_ROOT_PASSWD="123" +BR2_SYSTEM_BIN_SH_BASH=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS2" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +BR2_SYSTEM_ENABLE_NLS=y +BR2_TARGET_LOCALTIME="Asia/Shanghai" +BR2_ROOTFS_OVERLAY="board/loongson/ls2k500/rootfs_overlay" +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_AMIXER=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_XZ=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_COREMARK=y +BR2_PACKAGE_COREMARK_PRO=y +BR2_PACKAGE_DHRYSTONE=y +BR2_PACKAGE_FIO=y +BR2_PACKAGE_IOZONE=y +BR2_PACKAGE_LMBENCH=y +BR2_PACKAGE_NETPERF=y +BR2_PACKAGE_PV=y +BR2_PACKAGE_RT_TESTS=y +BR2_PACKAGE_STRESS=y +BR2_PACKAGE_STRESS_NG=y +BR2_PACKAGE_STRESSAPPTEST=y +BR2_PACKAGE_FLEX=y +BR2_PACKAGE_MAKE=y +BR2_PACKAGE_TREE=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_SOURCEHANSERIF=y +BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR=y +BR2_PACKAGE_PSPLASH=y +BR2_PACKAGE_QT5=y +BR2_PACKAGE_QT5BASE_MYSQL=y +BR2_PACKAGE_QT5BASE_SQLITE_QT=y +BR2_PACKAGE_QT5BASE_DEFAULT_QPA="linuxfb" +BR2_PACKAGE_QT5BASE_FONTCONFIG=y +BR2_PACKAGE_QT5BASE_HARFBUZZ=y +BR2_PACKAGE_QT5BASE_GIF=y +BR2_PACKAGE_QT5BASE_JPEG=y +BR2_PACKAGE_QT5BASE_PNG=y +BR2_PACKAGE_QT5BASE_DBUS=y +BR2_PACKAGE_QT5BASE_TSLIB=y +BR2_PACKAGE_QT5CHARTS=y +BR2_PACKAGE_QT5MQTT=y +BR2_PACKAGE_QT5SENSORS=y +BR2_PACKAGE_QT5SERIALBUS=y +BR2_PACKAGE_QT5SVG=y +BR2_PACKAGE_QT5XMLPATTERNS=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_MEMTESTER=y +BR2_PACKAGE_PCIUTILS=y +BR2_PACKAGE_RTC_TOOLS=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_LIBARCHIVE=y +BR2_PACKAGE_LIBARCHIVE_BSDTAR=y +BR2_PACKAGE_LIBARCHIVE_BSDCPIO=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y +BR2_PACKAGE_LIBSSH2=y +BR2_PACKAGE_RHASH=y +BR2_PACKAGE_RHASH_BIN=y +BR2_PACKAGE_HIREDIS=y +BR2_PACKAGE_REDIS=y +BR2_PACKAGE_SQLITE=y +BR2_PACKAGE_SQLITE_STAT4=y +BR2_PACKAGE_SQLITE_ENABLE_COLUMN_METADATA=y +BR2_PACKAGE_SQLITE_ENABLE_FTS3=y +BR2_PACKAGE_SQLITE_ENABLE_JSON1=y +BR2_PACKAGE_SQLITE_ENABLE_UNLOCK_NOTIFY=y +BR2_PACKAGE_SQLITE_SECURE_DELETE=y +BR2_PACKAGE_SQLITE_NO_SYNC=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_LIBUSB=y +BR2_PACKAGE_JSONCPP=y +BR2_PACKAGE_LIBXML2=y +BR2_PACKAGE_TINYXML=y +BR2_PACKAGE_TINYXML2=y +BR2_PACKAGE_CPPZMQ=y +BR2_PACKAGE_LIBCURL=y +BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_LIBCURL_VERBOSE=y +BR2_PACKAGE_LIBCURL_TLS_NONE=y +BR2_PACKAGE_LIBMICROHTTPD=y +BR2_PACKAGE_ZEROMQ_NORM=y +BR2_PACKAGE_ZEROMQ_PGM=y +BR2_PACKAGE_ZMQPP=y +BR2_PACKAGE_BOOST=y +BR2_PACKAGE_BOOST_CONTAINER=y +BR2_PACKAGE_BOOST_CONTRACT=y +BR2_PACKAGE_BOOST_EXCEPTION=y +BR2_PACKAGE_BOOST_GRAPH=y +BR2_PACKAGE_BOOST_GRAPH_PARALLEL=y +BR2_PACKAGE_BOOST_IOSTREAMS=y +BR2_PACKAGE_BOOST_LOCALE=y +BR2_PACKAGE_BOOST_LOG=y +BR2_PACKAGE_BOOST_MATH=y +BR2_PACKAGE_BOOST_MPI=y +BR2_PACKAGE_BOOST_PROGRAM_OPTIONS=y +BR2_PACKAGE_BOOST_RANDOM=y +BR2_PACKAGE_BOOST_SERIALIZATION=y +BR2_PACKAGE_BOOST_STACKTRACE=y +BR2_PACKAGE_BOOST_TEST=y +BR2_PACKAGE_BOOST_TYPE_ERASURE=y +BR2_PACKAGE_BOOST_WAVE=y +BR2_PACKAGE_CMOCKA=y +BR2_PACKAGE_LIBEVENT=y +BR2_PACKAGE_LIBUV=y +BR2_PACKAGE_PROTOBUF=y +BR2_PACKAGE_COLLECTD=y +BR2_PACKAGE_COLLECTD_EXEC=y +BR2_PACKAGE_COLLECTD_IPTABLES=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_DROPBEAR=y +BR2_PACKAGE_DROPBEAR_DISABLE_REVERSEDNS=y +BR2_PACKAGE_DROPBEAR_LEGACY_CRYPTO=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IFTOP=y +BR2_PACKAGE_IFUPDOWN=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPERF3=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES_BPF_NFSYNPROXY=y +BR2_PACKAGE_IPTABLES_NFTABLES=y +BR2_PACKAGE_LFTP=y +BR2_PACKAGE_LFTP_CMD_TORRENT=y +BR2_PACKAGE_LFTP_PROTO_FISH=y +BR2_PACKAGE_LFTP_PROTO_HTTP=y +BR2_PACKAGE_LFTP_PROTO_SFTP=y +BR2_PACKAGE_NETSNMP=y +BR2_PACKAGE_NETSNMP_STATIC=y +BR2_PACKAGE_NETWORK_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_TUI=y +BR2_PACKAGE_NETWORK_MANAGER_MODEM_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_PPPD=y +BR2_PACKAGE_NETWORK_MANAGER_OVS=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_RSYNC=y +BR2_PACKAGE_UHTTPD=y +BR2_PACKAGE_DASH=y +BR2_PACKAGE_ZSH=y +BR2_PACKAGE_FILE=y +BR2_PACKAGE_COREUTILS=y +BR2_PACKAGE_DEBIANUTILS=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_PROCPS_NG=y +BR2_PACKAGE_SYSTEMD_ANALYZE=y +BR2_PACKAGE_UTIL_LINUX_BINARIES=y +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y +BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS=y +BR2_PACKAGE_VIM=y +BR2_PACKAGE_BOOT_RUN=y +BR2_PACKAGE_DRIVER_TESTCASE=y +BR2_PACKAGE_DRIVER_TESTCASE_QT=y +# BR2_PACKAGE_DRIVER_TESTCASE_QT_AUTO_START is not set +BR2_PACKAGE_LVGL_KIT=y +BR2_PACKAGE_TOUCH_SCREEN_MAP_VALUE=y +BR2_PACKAGE_LS_DEFAULT_ETH_CONFIG=y +BR2_PACKAGE_LS_DEFAULT_ETH_NAME="eth0 eth1" +BR2_PACKAGE_LS_DEFAULT_ETH_IP="192.168.1.10 192.168.2.11" +BR2_PACKAGE_LIBGO_LA=y +BR2_PACKAGE_AUTOREBOOT=y +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 +BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y +BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE="board/loongson/ubinize.cfg" +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=1900 +BR2_PACKAGE_HOST_CMAKE=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/loongson2p500_defconfig b/configs/loongson2p500_defconfig new file mode 100644 index 00000000..bb4ce43f --- /dev/null +++ b/configs/loongson2p500_defconfig @@ -0,0 +1,301 @@ +BR2_loongarch64=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_INIT_SYSTEMD=y +BR2_TARGET_GENERIC_ROOT_PASSWD="123" +BR2_SYSTEM_BIN_SH_BASH=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +BR2_SYSTEM_ENABLE_NLS=y +BR2_TARGET_LOCALTIME="Asia/Shanghai" +BR2_ROOTFS_OVERLAY="board/loongson/ls2k1000la/rootfs_overlay" +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_AMIXER=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_FFMPEG_GPL=y +BR2_PACKAGE_FFMPEG_FFPLAY=y +BR2_PACKAGE_FFMPEG_FFPROBE=y +BR2_PACKAGE_FFMPEG_POSTPROC=y +BR2_PACKAGE_V4L2GRAB=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_FIO=y +BR2_PACKAGE_IOZONE=y +BR2_PACKAGE_NETPERF=y +BR2_PACKAGE_PV=y +BR2_PACKAGE_RT_TESTS=y +BR2_PACKAGE_STRESS=y +BR2_PACKAGE_STRESS_NG=y +BR2_PACKAGE_STRESSAPPTEST=y +BR2_PACKAGE_FLEX=y +BR2_PACKAGE_MAKE=y +BR2_PACKAGE_TREE=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_NFS_UTILS=y +BR2_PACKAGE_SOURCEHANSERIF=y +BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR=y +BR2_PACKAGE_DIRECTFB=y +BR2_PACKAGE_FBDUMP=y +BR2_PACKAGE_FBSET=y +BR2_PACKAGE_PSPLASH=y +BR2_PACKAGE_SDL2_DIRECTFB=y +BR2_PACKAGE_SDL2_GFX=y +BR2_PACKAGE_SDL2_IMAGE=y +BR2_PACKAGE_SDL2_MIXER=y +BR2_PACKAGE_SDL2_NET=y +BR2_PACKAGE_SDL2_TTF=y +BR2_PACKAGE_QT5=y +BR2_PACKAGE_QT5BASE_MYSQL=y +BR2_PACKAGE_QT5BASE_SQLITE_QT=y +BR2_PACKAGE_QT5BASE_DEFAULT_QPA="linuxfb" +BR2_PACKAGE_QT5BASE_FONTCONFIG=y +BR2_PACKAGE_QT5BASE_HARFBUZZ=y +BR2_PACKAGE_QT5BASE_GIF=y +BR2_PACKAGE_QT5BASE_JPEG=y +BR2_PACKAGE_QT5BASE_PNG=y +BR2_PACKAGE_QT5BASE_DBUS=y +BR2_PACKAGE_QT5BASE_TSLIB=y +BR2_PACKAGE_QT5CHARTS=y +BR2_PACKAGE_QT5MQTT=y +BR2_PACKAGE_QT5SENSORS=y +BR2_PACKAGE_QT5SERIALBUS=y +BR2_PACKAGE_QT5SVG=y +BR2_PACKAGE_QT5XMLPATTERNS=y +BR2_PACKAGE_XORG7=y +BR2_PACKAGE_DOCKER=y +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_8265=y +BR2_PACKAGE_LINUX_FIRMWARE_RTL_RTW88=y +BR2_PACKAGE_DT_UTILS=y +BR2_PACKAGE_HWLOC=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_IOSTAT=y +BR2_PACKAGE_LIBUIO=y +BR2_PACKAGE_LINUX_SERIAL_TEST=y +BR2_PACKAGE_LM_SENSORS=y +BR2_PACKAGE_LM_SENSORS_FANCONTROL=y +BR2_PACKAGE_LM_SENSORS_PWMCONFIG=y +BR2_PACKAGE_LSHW=y +BR2_PACKAGE_LSUIO=y +BR2_PACKAGE_MEMTESTER=y +BR2_PACKAGE_PCIUTILS=y +BR2_PACKAGE_RS485CONF=y +BR2_PACKAGE_RTC_TOOLS=y +BR2_PACKAGE_SMARTMONTOOLS=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_SYSSTAT=y +BR2_PACKAGE_USBMOUNT=y +BR2_PACKAGE_USBUTILS=y +BR2_PACKAGE_PYTHON3=y +BR2_PACKAGE_PYTHON3_BZIP2=y +BR2_PACKAGE_PYTHON3_CODECSCJK=y +BR2_PACKAGE_PYTHON3_CURSES=y +BR2_PACKAGE_PYTHON3_DECIMAL=y +BR2_PACKAGE_PYTHON3_OSSAUDIODEV=y +BR2_PACKAGE_PYTHON3_READLINE=y +BR2_PACKAGE_PYTHON3_SQLITE=y +BR2_PACKAGE_PYTHON3_XZ=y +BR2_PACKAGE_PYTHON_PIP=y +BR2_PACKAGE_PYTHON_PYQT5=y +BR2_PACKAGE_LIBARCHIVE=y +BR2_PACKAGE_LIBARCHIVE_BSDTAR=y +BR2_PACKAGE_LIBARCHIVE_BSDCPIO=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y +BR2_PACKAGE_LIBSSH2=y +BR2_PACKAGE_RHASH=y +BR2_PACKAGE_RHASH_BIN=y +BR2_PACKAGE_HIREDIS=y +BR2_PACKAGE_REDIS=y +BR2_PACKAGE_SQLITE_STAT4=y +BR2_PACKAGE_SQLITE_ENABLE_COLUMN_METADATA=y +BR2_PACKAGE_SQLITE_ENABLE_FTS3=y +BR2_PACKAGE_SQLITE_ENABLE_JSON1=y +BR2_PACKAGE_SQLITE_ENABLE_UNLOCK_NOTIFY=y +BR2_PACKAGE_SQLITE_SECURE_DELETE=y +BR2_PACKAGE_SQLITE_NO_SYNC=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_OPENCV3=y +BR2_PACKAGE_OPENCV3_WITH_QT5=y +BR2_PACKAGE_OPENCV3_LIB_PYTHON=y +BR2_PACKAGE_OPENCV3_LIB_SHAPE=y +BR2_PACKAGE_OPENCV3_LIB_STITCHING=y +BR2_PACKAGE_OPENCV3_LIB_SUPERRES=y +BR2_PACKAGE_OPENCV3_LIB_TS=y +BR2_PACKAGE_OPENCV3_LIB_VIDEOSTAB=y +BR2_PACKAGE_OPENCV3_BUILD_TESTS=y +BR2_PACKAGE_OPENCV3_BUILD_PERF_TESTS=y +BR2_PACKAGE_OPENCV3_WITH_FFMPEG=y +BR2_PACKAGE_OPENCV3_WITH_JPEG=y +BR2_PACKAGE_OPENCV3_WITH_PNG=y +BR2_PACKAGE_OPENCV3_WITH_PROTOBUF=y +BR2_PACKAGE_OPENCV3_WITH_TIFF=y +BR2_PACKAGE_OPENCV3_WITH_V4L=y +BR2_PACKAGE_OPENCV3_WITH_WEBP=y +BR2_PACKAGE_OPENCV3_INSTALL_DATA=y +BR2_PACKAGE_JSONCPP=y +BR2_PACKAGE_LIBFASTJSON=y +BR2_PACKAGE_TINYXML=y +BR2_PACKAGE_TINYXML2=y +BR2_PACKAGE_LIBCAMERA=y +BR2_PACKAGE_LIBCAMERA_V4L2=y +BR2_PACKAGE_X264=y +BR2_PACKAGE_X265=y +BR2_PACKAGE_CPPZMQ=y +BR2_PACKAGE_LIBCURL=y +BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_LIBCURL_VERBOSE=y +BR2_PACKAGE_LIBCURL_TLS_NONE=y +BR2_PACKAGE_LIBMICROHTTPD=y +BR2_PACKAGE_LIBMODBUS=y +BR2_PACKAGE_PAHO_MQTT_C=y +BR2_PACKAGE_ZEROMQ_NORM=y +BR2_PACKAGE_ZEROMQ_PGM=y +BR2_PACKAGE_ZMQPP=y +BR2_PACKAGE_BOOST=y +BR2_PACKAGE_BOOST_CONTRACT=y +BR2_PACKAGE_BOOST_EXCEPTION=y +BR2_PACKAGE_BOOST_GRAPH=y +BR2_PACKAGE_BOOST_GRAPH_PARALLEL=y +BR2_PACKAGE_BOOST_IOSTREAMS=y +BR2_PACKAGE_BOOST_JSON=y +BR2_PACKAGE_BOOST_LOCALE=y +BR2_PACKAGE_BOOST_LOG=y +BR2_PACKAGE_BOOST_MATH=y +BR2_PACKAGE_BOOST_MPI=y +BR2_PACKAGE_BOOST_NOWIDE=y +BR2_PACKAGE_BOOST_PROGRAM_OPTIONS=y +BR2_PACKAGE_BOOST_PYTHON=y +BR2_PACKAGE_BOOST_RANDOM=y +BR2_PACKAGE_BOOST_SERIALIZATION=y +BR2_PACKAGE_BOOST_STACKTRACE=y +BR2_PACKAGE_BOOST_TEST=y +BR2_PACKAGE_BOOST_TYPE_ERASURE=y +BR2_PACKAGE_BOOST_WAVE=y +BR2_PACKAGE_CMOCKA=y +BR2_PACKAGE_LIBEVENT=y +BR2_PACKAGE_LIBUV=y +BR2_PACKAGE_COLLECTD=y +BR2_PACKAGE_COLLECTD_EXEC=y +BR2_PACKAGE_COLLECTD_IPTABLES=y +BR2_PACKAGE_COLLECTD_NFS=y +BR2_PACKAGE_BLUEZ_TOOLS=y +BR2_PACKAGE_BLUEZ5_UTILS=y +BR2_PACKAGE_BLUEZ5_UTILS_OBEX=y +BR2_PACKAGE_BLUEZ5_UTILS_CLIENT=y +BR2_PACKAGE_BLUEZ5_UTILS_DEPRECATED=y +BR2_PACKAGE_BLUEZ5_UTILS_EXPERIMENTAL=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_HEALTH=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_MESH=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_MIDI=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_NFC=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_SAP=y +BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_SIXAXIS=y +BR2_PACKAGE_BLUEZ5_UTILS_TEST=y +BR2_PACKAGE_BLUEZ5_UTILS_TOOLS_HID2HCI=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_DHCP=y +BR2_PACKAGE_DHCP_SERVER=y +BR2_PACKAGE_DHCP_SERVER_DELAYED_ACK=y +BR2_PACKAGE_DHCP_RELAY=y +BR2_PACKAGE_DHCP_CLIENT=y +BR2_PACKAGE_DHCPCD5=y +BR2_PACKAGE_DROPBEAR=y +BR2_PACKAGE_DROPBEAR_DISABLE_REVERSEDNS=y +BR2_PACKAGE_DROPBEAR_LEGACY_CRYPTO=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_HOSTAPD=y +BR2_PACKAGE_IFTOP=y +BR2_PACKAGE_IFUPDOWN=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPERF3=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES_BPF_NFSYNPROXY=y +BR2_PACKAGE_IPTABLES_NFTABLES=y +BR2_PACKAGE_IW=y +BR2_PACKAGE_LFTP=y +BR2_PACKAGE_LFTP_CMD_TORRENT=y +BR2_PACKAGE_LFTP_PROTO_FISH=y +BR2_PACKAGE_LFTP_PROTO_HTTP=y +BR2_PACKAGE_LFTP_PROTO_SFTP=y +BR2_PACKAGE_LIGHTTPD=y +BR2_PACKAGE_LIGHTTPD_OPENSSL=y +BR2_PACKAGE_LIGHTTPD_ZLIB=y +BR2_PACKAGE_LIGHTTPD_BZIP2=y +BR2_PACKAGE_LIGHTTPD_PCRE=y +BR2_PACKAGE_LIGHTTPD_WEBDAV=y +BR2_PACKAGE_LRZSZ=y +BR2_PACKAGE_NETSNMP=y +BR2_PACKAGE_NETSNMP_STATIC=y +BR2_PACKAGE_NETWORK_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_TUI=y +BR2_PACKAGE_NETWORK_MANAGER_MODEM_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_PPPD=y +BR2_PACKAGE_NETWORK_MANAGER_OVS=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_RSYNC=y +BR2_PACKAGE_UHTTPD=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_AP_SUPPORT=y +BR2_PACKAGE_WPA_SUPPLICANT_WIFI_DISPLAY=y +BR2_PACKAGE_WPA_SUPPLICANT_MESH_NETWORKING=y +BR2_PACKAGE_WPA_SUPPLICANT_AUTOSCAN=y +BR2_PACKAGE_WPA_SUPPLICANT_EAP=y +BR2_PACKAGE_WPA_SUPPLICANT_HOTSPOT=y +BR2_PACKAGE_WPA_SUPPLICANT_DEBUG_SYSLOG=y +BR2_PACKAGE_WPA_SUPPLICANT_WPS=y +BR2_PACKAGE_WPA_SUPPLICANT_WPA3=y +BR2_PACKAGE_WPA_SUPPLICANT_CLI=y +BR2_PACKAGE_WPA_SUPPLICANT_WPA_CLIENT_SO=y +BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y +BR2_PACKAGE_WPA_SUPPLICANT_DBUS=y +BR2_PACKAGE_WPA_SUPPLICANT_DBUS_INTROSPECTION=y +BR2_PACKAGE_DASH=y +BR2_PACKAGE_ZSH=y +BR2_PACKAGE_FILE=y +BR2_PACKAGE_COREUTILS=y +BR2_PACKAGE_DEBIANUTILS=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_PROCPS_NG=y +BR2_PACKAGE_SYSTEMD_ANALYZE=y +BR2_PACKAGE_UTIL_LINUX_BINARIES=y +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y +BR2_PACKAGE_UTIL_LINUX_RFKILL=y +BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS=y +BR2_PACKAGE_LESS=y +BR2_PACKAGE_MC=y +BR2_PACKAGE_VIM=y +BR2_PACKAGE_BOOT_RUN=y +BR2_PACKAGE_LVGL_KIT=y +BR2_PACKAGE_TOUCH_SCREEN_MAP_VALUE=y +BR2_PACKAGE_LS_DEFAULT_ETH_CONFIG=y +BR2_PACKAGE_LS_DEFAULT_ETH_NAME="eth0 eth1" +BR2_PACKAGE_LS_DEFAULT_ETH_IP="192.168.1.10 192.168.2.11" +BR2_PACKAGE_LIBGO_LA=y +BR2_PACKAGE_LS3_SYSTEM_TOOL=y +BR2_PACKAGE_LS3_SYSTEM_TOOL_QT=y +BR2_PACKAGE_LOONGSON_RESIZE=y +BR2_PACKAGE_LOONGSON_KERNEL=y +BR2_PACKAGE_LOONGSON_KERNEL_PATH="~/tmp/bsp/test/2P500/kernel/all/" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="512M" +BR2_TARGET_ROOTFS_EXT2_MKFS_OPTIONS="-O ^64bit -O ^metadata_csum" +BR2_TARGET_ROOTFS_EXT2_GZIP=y +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_PACKAGE_HOST_CMAKE=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_PYTHON3=y diff --git a/configs/loongson_busybox_defconfig b/configs/loongson_busybox_defconfig new file mode 100644 index 00000000..17e57056 --- /dev/null +++ b/configs/loongson_busybox_defconfig @@ -0,0 +1,37 @@ +BR2_loongarch64=y +BR2_SHARED_STATIC_LIBS=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu" +BR2_TOOLCHAIN_EXTERNAL_GCC_8=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="LS-GD" +BR2_TARGET_GENERIC_ISSUE="Welcome to Loongson-gd mini rootfs" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y +BR2_ROOTFS_DEVICE_TABLE_SUPPORTS_EXTENDED_ATTRIBUTES=y +BR2_ROOTFS_MERGED_USR=y +# BR2_TARGET_ENABLE_ROOT_LOGIN is not set +BR2_SYSTEM_BIN_SH_NONE=y +# BR2_TARGET_GENERIC_GETTY is not set +# BR2_TARGET_GENERIC_GETTY_AUTOLOGIN is not set +# BR2_TARGET_TTY0_GETTY_ENABLE is not set +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +# BR2_ENABLE_LOCALE_PURGE is not set +# BR2_BUSYBOX_PROFILE is not set +BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y +BR2_PACKAGE_EUDEV_RULES_GEN=y +# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set +# BR2_PACKAGE_URANDOM_SCRIPTS is not set +# BR2_PACKAGE_GIT_INFO_LSGD is not set +# BR2_PACKAGE_MDIO is not set +# BR2_PACKAGE_LS2_SYS_CONFIG_TOOL is not set +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_PACKAGE_HOST_CMAKE=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MKPASSWD=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/ls1b20_huolong_minigui_defconfig b/configs/ls1b20_huolong_minigui_defconfig new file mode 100644 index 00000000..7993534d --- /dev/null +++ b/configs/ls1b20_huolong_minigui_defconfig @@ -0,0 +1,3483 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot -g126c1fe3-dirty Configuration +# +BR2_HAVE_DOT_CONFIG=y +BR2_HOST_GCC_AT_LEAST_4_9=y +BR2_HOST_GCC_AT_LEAST_5=y +BR2_HOST_GCC_AT_LEAST_6=y +BR2_HOST_GCC_AT_LEAST_7=y + +# +# Target options +# +BR2_SOFT_FLOAT=y +BR2_ARCH_HAS_MMU_MANDATORY=y +# BR2_arcle is not set +# BR2_arceb is not set +# BR2_arm is not set +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_aarch64_be is not set +# BR2_csky is not set +# BR2_i386 is not set +# BR2_m68k is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +BR2_mipsel=y +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_loongarch64 is not set +# BR2_nds32 is not set +# BR2_nios2 is not set +# BR2_or1k is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_riscv is not set +# BR2_s390x is not set +# BR2_sh is not set +# BR2_sparc is not set +# BR2_sparc64 is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH_HAS_TOOLCHAIN_BUILDROOT=y +BR2_ARCH="mipsel" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="mips32" +BR2_GCC_TARGET_ABI="32" +BR2_GCC_TARGET_NAN="legacy" +BR2_BINFMT_SUPPORTS_SHARED=y +BR2_READELF_ARCH_NAME="MIPS R3000" +BR2_BINFMT_ELF=y +BR2_MIPS_CPU_MIPS32=y +BR2_mips_32=y +# BR2_mips_32r2 is not set +# BR2_mips_32r3 is not set +# BR2_mips_32r5 is not set +# BR2_mips_32r6 is not set +# BR2_mips_interaptiv is not set +# BR2_mips_m5150 is not set +# BR2_mips_m6250 is not set +# BR2_mips_p5600 is not set +# BR2_mips_xburst is not set +BR2_MIPS_SOFT_FLOAT=y +BR2_MIPS_NAN_LEGACY=y +BR2_MIPS_OABI32=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn --non-interactive" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_LZCAT="lzip -d -c" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="/home/loongson/work/fs/buildroot-2021.02/configs/ls1b_huolong_minigui_defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="https://cdn.kernel.org/pub" +BR2_GNU_MIRROR="http://ftpmirror.gnu.org" +BR2_LUAROCKS_MIRROR="http://rocks.moonscript.org" +BR2_CPAN_MIRROR="http://cpan.metacpan.org" +BR2_JLEVEL=0 +# BR2_CCACHE is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +# BR2_OPTIMIZE_G is not set +BR2_OPTIMIZE_S=y +# BR2_OPTIMIZE_FAST is not set +# BR2_GOOGLE_BREAKPAD_ENABLE is not set +# BR2_STATIC_LIBS is not set +BR2_SHARED_LIBS=y +# BR2_SHARED_STATIC_LIBS is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Advanced +# +BR2_COMPILER_PARANOID_UNSAFE_PATH=y +# BR2_FORCE_HOST_BUILD is not set +# BR2_REPRODUCIBLE is not set +# BR2_PER_PACKAGE_DIRECTORIES is not set + +# +# Security Hardening Options +# +BR2_PIC_PIE_ARCH_SUPPORTS=y +# BR2_PIC_PIE is not set +BR2_SSP_NONE=y +# BR2_SSP_REGULAR is not set +# BR2_SSP_STRONG is not set +# BR2_SSP_ALL is not set +BR2_RELRO_NONE=y +# BR2_RELRO_PARTIAL is not set +# BR2_RELRO_FULL is not set +BR2_FORTIFY_SOURCE_NONE=y +# BR2_FORTIFY_SOURCE_1 is not set +# BR2_FORTIFY_SOURCE_2 is not set + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_GLIBC=y +# BR2_TOOLCHAIN_BUILDROOT is not set +BR2_TOOLCHAIN_EXTERNAL=y + +# +# Toolchain External Options +# +BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y +# BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD is not set +BR2_TOOLCHAIN_EXTERNAL_PREINSTALLED=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/buildroot-2016.02-glibc-gcc-4.9.x-mips32-nofpu/output/host/usr/" +BR2_TOOLCHAIN_EXTERNAL_GLIBC=y +BR2_PACKAGE_HAS_TOOLCHAIN_EXTERNAL=y +BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL="toolchain-external-custom" +BR2_TOOLCHAIN_EXTERNAL_PREFIX="$(ARCH)-linux" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux" +# BR2_TOOLCHAIN_EXTERNAL_GCC_10 is not set +# BR2_TOOLCHAIN_EXTERNAL_GCC_9 is not set +# BR2_TOOLCHAIN_EXTERNAL_GCC_8 is not set +# BR2_TOOLCHAIN_EXTERNAL_GCC_7 is not set +# BR2_TOOLCHAIN_EXTERNAL_GCC_6 is not set +# BR2_TOOLCHAIN_EXTERNAL_GCC_5 is not set +BR2_TOOLCHAIN_EXTERNAL_GCC_4_9=y +# BR2_TOOLCHAIN_EXTERNAL_GCC_4_8 is not set +# BR2_TOOLCHAIN_EXTERNAL_GCC_4_7 is not set +# BR2_TOOLCHAIN_EXTERNAL_GCC_4_6 is not set +# BR2_TOOLCHAIN_EXTERNAL_GCC_4_5 is not set +# BR2_TOOLCHAIN_EXTERNAL_GCC_4_4 is not set +# BR2_TOOLCHAIN_EXTERNAL_GCC_4_3 is not set +# BR2_TOOLCHAIN_EXTERNAL_GCC_OLD is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_10 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_9 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_8 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_7 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_6 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_5 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_3 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_2 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_1 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_0 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_20 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_18 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_17 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_16 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_15 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_14 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_13 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_12 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_11 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_10 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_9 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_8 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_7 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_6 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_5 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_4 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_3 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_2 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_1 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_0 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_19 is not set +BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_18=y +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_17 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_16 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_15 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_14 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_13 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_12 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_11 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_10 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_9 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_8 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_7 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_6 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_5 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_4 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_3 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_2 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_1 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_0 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_REALLY_OLD is not set +# BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC is not set +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +# BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL is not set +BR2_TOOLCHAIN_EXTERNAL_HAS_SSP=y +BR2_TOOLCHAIN_EXTERNAL_HAS_SSP_STRONG=y +BR2_TOOLCHAIN_EXTERNAL_INET_RPC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +# BR2_TOOLCHAIN_EXTERNAL_DLANG is not set +# BR2_TOOLCHAIN_EXTERNAL_FORTRAN is not set +# BR2_TOOLCHAIN_EXTERNAL_OPENMP is not set +# BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY is not set +BR2_PACKAGE_HOST_GDB_ARCH_SUPPORTS=y + +# +# Host GDB Options +# +# BR2_PACKAGE_HOST_GDB is not set +BR2_GDB_VERSION="9.2" + +# +# Toolchain Generic Options +# +BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS=y +BR2_TOOLCHAIN_SUPPORTS_VARIADIC_MI_THUNK=y +BR2_TOOLCHAIN_HAS_NATIVE_RPC=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SSP=y +BR2_TOOLCHAIN_HAS_SSP_STRONG=y +BR2_TOOLCHAIN_HAS_UCONTEXT=y +BR2_TOOLCHAIN_SUPPORTS_PIE=y +# BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY is not set +BR2_TOOLCHAIN_EXTRA_LIBS="" +BR2_TOOLCHAIN_HAS_FULL_GETTEXT=y +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.18" +BR2_TOOLCHAIN_GCC_AT_LEAST_4_3=y +BR2_TOOLCHAIN_GCC_AT_LEAST_4_4=y +BR2_TOOLCHAIN_GCC_AT_LEAST_4_5=y +BR2_TOOLCHAIN_GCC_AT_LEAST_4_6=y +BR2_TOOLCHAIN_GCC_AT_LEAST_4_7=y +BR2_TOOLCHAIN_GCC_AT_LEAST_4_8=y +BR2_TOOLCHAIN_GCC_AT_LEAST_4_9=y +BR2_TOOLCHAIN_GCC_AT_LEAST="4.9" +BR2_TOOLCHAIN_HAS_MNAN_OPTION=y +BR2_TOOLCHAIN_HAS_SYNC_1=y +BR2_TOOLCHAIN_HAS_SYNC_2=y +BR2_TOOLCHAIN_HAS_SYNC_4=y +BR2_TOOLCHAIN_HAS_LIBATOMIC=y +BR2_TOOLCHAIN_HAS_ATOMIC=y + +# +# System configuration +# +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_HOSTNAME="HuoLong" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot for the LS1B-HuoLong" +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_TARGET_GENERIC_PASSWD_METHOD="sha-512" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set +# BR2_INIT_OPENRC is not set + +# +# systemd needs a glibc toolchain w/ SSP, headers >= 3.10, host and target gcc >= 5 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +# BR2_ROOTFS_DEVICE_TABLE_SUPPORTS_EXTENDED_ATTRIBUTES is not set +BR2_ROOTFS_MERGED_USR=y +BR2_TARGET_ENABLE_ROOT_LOGIN=y +BR2_TARGET_GENERIC_ROOT_PASSWD="123456" +# BR2_SYSTEM_BIN_SH_BUSYBOX is not set +BR2_SYSTEM_BIN_SH_BASH=y +# BR2_SYSTEM_BIN_SH_DASH is not set +# BR2_SYSTEM_BIN_SH_MKSH is not set +# BR2_SYSTEM_BIN_SH_ZSH is not set +# BR2_SYSTEM_BIN_SH_NONE is not set +BR2_SYSTEM_BIN_SH="bash" +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS5" +BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP=y +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE="0" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +BR2_SYSTEM_DHCP="" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US" +BR2_GENERATE_LOCALE="" +BR2_SYSTEM_ENABLE_NLS=y +BR2_TARGET_TZ_INFO=y +BR2_TARGET_TZ_ZONELIST="default" +BR2_TARGET_LOCALTIME="Asia/Shanghai" +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="board/loongson/ls1b20-huolong/rootfs_4_7_gcc_overlay" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_FAKEROOT_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES="" +BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y +# BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set +BR2_PACKAGE_SKELETON=y +BR2_PACKAGE_HAS_SKELETON=y +BR2_PACKAGE_PROVIDES_SKELETON="skeleton-init-sysv" +BR2_PACKAGE_SKELETON_INIT_COMMON=y +BR2_PACKAGE_SKELETON_INIT_SYSV=y + +# +# Audio and video applications +# +BR2_PACKAGE_ALSA_UTILS=y +# BR2_PACKAGE_ALSA_UTILS_ALSACONF is not set +# BR2_PACKAGE_ALSA_UTILS_ACONNECT is not set +BR2_PACKAGE_ALSA_UTILS_ALSACTL=y +# BR2_PACKAGE_ALSA_UTILS_ALSALOOP is not set +BR2_PACKAGE_ALSA_UTILS_ALSAMIXER=y +# BR2_PACKAGE_ALSA_UTILS_ALSAUCM is not set +# BR2_PACKAGE_ALSA_UTILS_ALSATPLG is not set +# BR2_PACKAGE_ALSA_UTILS_AMIDI is not set +BR2_PACKAGE_ALSA_UTILS_AMIXER=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +# BR2_PACKAGE_ALSA_UTILS_APLAYMIDI is not set +# BR2_PACKAGE_ALSA_UTILS_ARECORDMIDI is not set +# BR2_PACKAGE_ALSA_UTILS_ASEQDUMP is not set +# BR2_PACKAGE_ALSA_UTILS_ASEQNET is not set +# BR2_PACKAGE_ALSA_UTILS_BAT is not set +# BR2_PACKAGE_ALSA_UTILS_IECSET is not set +# BR2_PACKAGE_ALSA_UTILS_SPEAKER_TEST is not set +# BR2_PACKAGE_ATEST is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BLUEZ_ALSA is not set +# BR2_PACKAGE_DVBLAST is not set +# BR2_PACKAGE_DVDAUTHOR is not set +# BR2_PACKAGE_DVDRW_TOOLS is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS=y +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_FLUID_SOUNDFONT is not set +# BR2_PACKAGE_FLUIDSYNTH is not set +# BR2_PACKAGE_GMRENDER_RESURRECT is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK1 is not set +# BR2_PACKAGE_JACK2 is not set +BR2_PACKAGE_KODI_ARCH_SUPPORTS=y + +# +# kodi needs python w/ .py modules, a uClibc or glibc toolchain w/ C++, threads, wchar, dynamic library, gcc >= 4.8 +# + +# +# kodi needs an OpenGL EGL backend with OpenGL support +# +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MIMIC is not set +# BR2_PACKAGE_MINIMODEM is not set + +# +# miraclecast needs systemd and a glibc toolchain w/ threads and wchar +# +# BR2_PACKAGE_MJPEGTOOLS is not set +# BR2_PACKAGE_MODPLUGTOOLS is not set +# BR2_PACKAGE_MOTION is not set + +# +# mpd needs a toolchain w/ C++, threads, wchar, gcc >= 7, host gcc >= 7 +# +# BR2_PACKAGE_MPD_MPC is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MPV is not set +# BR2_PACKAGE_MULTICAT is not set +# BR2_PACKAGE_MUSEPACK is not set + +# +# ncmpc needs a toolchain w/ C++, wchar, threads, gcc >= 7 +# +# BR2_PACKAGE_OPUS_TOOLS is not set +BR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC=y +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_SQUEEZELITE is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UDPXY is not set +# BR2_PACKAGE_UPMPDCLI is not set +# BR2_PACKAGE_V4L2GRAB is not set + +# +# v4l2loopback needs a Linux kernel to be built +# +# BR2_PACKAGE_VLC is not set +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +# BR2_PACKAGE_YAVTA is not set +# BR2_PACKAGE_YMPD is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BROTLI is not set +BR2_PACKAGE_BZIP2=y +# BR2_PACKAGE_GZIP is not set +# BR2_PACKAGE_LRZIP is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_P7ZIP is not set +# BR2_PACKAGE_PIGZ is not set +# BR2_PACKAGE_PIXZ is not set +# BR2_PACKAGE_UNRAR is not set +# BR2_PACKAGE_UNZIP is not set +BR2_PACKAGE_XZ=y +# BR2_PACKAGE_ZIP is not set +# BR2_PACKAGE_ZSTD is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BABELTRACE2 is not set +# BR2_PACKAGE_BLKTRACE is not set +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set + +# +# clinfo needs an OpenCL provider +# +# BR2_PACKAGE_COREMARK is not set +# BR2_PACKAGE_COREMARK_PRO is not set + +# +# dacapo needs OpenJDK +# +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DIEHARDER is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +BR2_PACKAGE_GDB_ARCH_SUPPORTS=y +BR2_PACKAGE_GDB=y +BR2_PACKAGE_GDB_SERVER=y +BR2_PACKAGE_GDB_DEBUGGER=y +# BR2_PACKAGE_GDB_TUI is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y +# BR2_PACKAGE_GOOGLE_BREAKPAD is not set +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +BR2_PACKAGE_LATENCYTOP=y +# BR2_PACKAGE_LMBENCH is not set +# BR2_PACKAGE_LSOF is not set +BR2_PACKAGE_LTP_TESTSUITE_ARCH_SUPPORTS=y +# BR2_PACKAGE_LTP_TESTSUITE is not set +BR2_PACKAGE_LTRACE_ARCH_SUPPORTS=y +# BR2_PACKAGE_LTRACE is not set +# BR2_PACKAGE_LTTNG_BABELTRACE is not set + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_LTTNG_TOOLS is not set +# BR2_PACKAGE_MEMSTAT is not set +BR2_PACKAGE_NETPERF=y +# BR2_PACKAGE_NETSNIFF_NG is not set +# BR2_PACKAGE_NMON is not set +BR2_PACKAGE_OPROFILE_ARCH_SUPPORTS=y +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set +BR2_PACKAGE_PV=y +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_SENTRY_NATIVE is not set +# BR2_PACKAGE_SPIDEV_TEST is not set +BR2_PACKAGE_STRACE=y +BR2_PACKAGE_STRESS=y +BR2_PACKAGE_STRESS_NG=y + +# +# sysdig needs a glibc or uclibc toolchain w/ C++, threads, gcc >= 4.8, dynamic library, a Linux kernel, and luajit or lua 5.1 to be built +# +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +BR2_PACKAGE_TRINITY_ARCH_SUPPORTS=y +# BR2_PACKAGE_TRINITY is not set +# BR2_PACKAGE_UCLIBC_NG_TEST is not set +# BR2_PACKAGE_VMTOUCH is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BATS_CORE is not set +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BITWISE is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_BUSTLE is not set +# BR2_PACKAGE_CHECK is not set +BR2_PACKAGE_CMAKE_ARCH_SUPPORTS=y +BR2_PACKAGE_CMAKE=y +BR2_PACKAGE_CMAKE_CTEST=y +# BR2_PACKAGE_CPPUNIT is not set +# BR2_PACKAGE_CUKINIA is not set +# BR2_PACKAGE_CUNIT is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_CXXTEST is not set +# BR2_PACKAGE_DIFFUTILS is not set +# BR2_PACKAGE_DOS2UNIX is not set +# BR2_PACKAGE_FINDUTILS is not set +BR2_PACKAGE_FLEX=y +# BR2_PACKAGE_GAWK is not set +# BR2_PACKAGE_GETTEXT is not set +BR2_PACKAGE_PROVIDES_HOST_GETTEXT="host-gettext-gnu" +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GIT_CRYPT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_GREP is not set +# BR2_PACKAGE_JO is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +BR2_PACKAGE_MAKE=y +# BR2_PACKAGE_PATCH is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_RIPGREP is not set +# BR2_PACKAGE_SED is not set +# BR2_PACKAGE_SUBVERSION is not set +BR2_PACKAGE_TREE=y + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_ABOOTIMG is not set + +# +# aufs-util needs a linux kernel and a toolchain w/ threads +# +# BR2_PACKAGE_AUTOFS is not set +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CPIO is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DAVFS2 is not set +BR2_PACKAGE_DOSFSTOOLS=y +# BR2_PACKAGE_DOSFSTOOLS_FATLABEL is not set +# BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT is not set +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_E2FSPROGS=y +# BR2_PACKAGE_E2FSPROGS_DEBUGFS is not set +# BR2_PACKAGE_E2FSPROGS_E2IMAGE is not set +# BR2_PACKAGE_E2FSPROGS_E4DEFRAG is not set +# BR2_PACKAGE_E2FSPROGS_FUSE2FS is not set +# BR2_PACKAGE_E2FSPROGS_RESIZE2FS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EROFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_EXFATPROGS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_FSCRYPTCTL is not set +# BR2_PACKAGE_FUSE_OVERLAYFS is not set +# BR2_PACKAGE_FWUP is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_IMX_USB_LOADER is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NILFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set +# BR2_PACKAGE_SP_OOPS_EXTRACT is not set +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_UDFTOOLS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Fonts, cursors, icons, sounds and themes +# + +# +# Cursors +# +# BR2_PACKAGE_COMIX_CURSORS is not set +# BR2_PACKAGE_OBSIDIAN_CURSORS is not set + +# +# Fonts +# +# BR2_PACKAGE_BITSTREAM_VERA is not set +# BR2_PACKAGE_CANTARELL is not set +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_FONT_AWESOME is not set +# BR2_PACKAGE_GHOSTSCRIPT_FONTS is not set +# BR2_PACKAGE_INCONSOLATA is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_WQY_ZENHEI is not set + +# +# Icons +# +# BR2_PACKAGE_GOOGLE_MATERIAL_DESIGN_ICONS is not set +# BR2_PACKAGE_HICOLOR_ICON_THEME is not set + +# +# Sounds +# +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Themes +# + +# +# Games +# +# BR2_PACKAGE_ASCII_INVADERS is not set +# BR2_PACKAGE_CHOCOLATE_DOOM is not set +# BR2_PACKAGE_FLARE_ENGINE is not set +# BR2_PACKAGE_FROTZ is not set +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set + +# +# minetest needs X11 and an OpenGL provider +# +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set +# BR2_PACKAGE_SL is not set + +# +# solarus needs OpenGL and a toolchain w/ C++, gcc >= 4.9, NPTL, dynamic library, and luajit or lua 5.1 +# + +# +# stella needs a toolchain w/ dynamic library, C++, threads, gcc >= 6 +# +# BR2_PACKAGE_XORCURSES is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# + +# +# cage needs udev, mesa3d w/ EGL and GLES support +# + +# +# cog needs wpewebkit and a toolchain w/ threads +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GHOSTSCRIPT is not set + +# +# glmark2 needs an OpenGL or an openGL ES and EGL backend +# + +# +# glslsandbox-player needs a toolchain w/ threads and an openGL ES and EGL driver +# +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_LIBVA_UTILS is not set +BR2_PACKAGE_NETSURF_ARCH_SUPPORTS=y +# BR2_PACKAGE_NETSURF is not set +# BR2_PACKAGE_PNGQUANT is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# stellarium needs Qt5 and an OpenGL provider +# +# BR2_PACKAGE_TESSERACT_OCR is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FBSET is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_FREERDP is not set +# BR2_PACKAGE_GRAPHICSMAGICK is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# +# BR2_PACKAGE_MESA3D is not set +# BR2_PACKAGE_OCRAD is not set + +# +# ogre needs X11 and an OpenGL provider +# +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set +# BR2_PACKAGE_SDL2 is not set + +# +# Other GUIs +# +BR2_PACKAGE_QT5_JSCORE_AVAILABLE=y + +# +# Qt5 needs host g++ >= 5.0, and a toolchain w/ gcc >= 5.0, wchar, NPTL, C++, dynamic library +# +BR2_PACKAGE_MINIGUI5=y + +# +# tekui needs a Lua interpreter and a toolchain w/ threads, dynamic library +# +# BR2_PACKAGE_WESTON is not set +# BR2_PACKAGE_XORG7 is not set +# BR2_PACKAGE_APITRACE is not set + +# +# midori needs libgtk3 and a glibc toolchain w/ C++, gcc >= 7, host gcc >= 4.9 +# + +# +# vte needs an OpenGL or an OpenGL-EGL/wayland backend +# +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_ARMBIAN_FIRMWARE is not set +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_MURATA_CYW_FW is not set +# BR2_PACKAGE_ODROIDC2_FIRMWARE is not set +# BR2_PACKAGE_QCOM_DB410C_FIRMWARE is not set +# BR2_PACKAGE_RCW_SMARC_SAL28 is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_WILC1000_FIRMWARE is not set +# BR2_PACKAGE_WILINK_BT_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set +# BR2_PACKAGE_18XX_TI_UTILS is not set +# BR2_PACKAGE_ACPICA is not set +# BR2_PACKAGE_ACPID is not set +# BR2_PACKAGE_ACPITOOL is not set +# BR2_PACKAGE_AER_INJECT is not set +# BR2_PACKAGE_APCUPSD is not set +# BR2_PACKAGE_AVRDUDE is not set +# BR2_PACKAGE_BCACHE_TOOLS is not set +# BR2_PACKAGE_BRICKD is not set +# BR2_PACKAGE_BRLTTY is not set +# BR2_PACKAGE_CC_TOOL is not set +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set + +# +# dahdi-linux needs a Linux kernel to be built +# + +# +# dahdi-tools needs a toolchain w/ threads and a Linux kernel to be built +# +BR2_PACKAGE_DBUS=y +# BR2_PACKAGE_DBUS_CPP is not set +# BR2_PACKAGE_DBUS_GLIB is not set +# BR2_PACKAGE_DBUS_TRIGGERD is not set +# BR2_PACKAGE_DFU_UTIL is not set +# BR2_PACKAGE_DMRAID is not set +# BR2_PACKAGE_DT_UTILS is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_DUMP1090 is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_EDID_DECODE is not set + +# +# edid-decode needs a toolchain w/ C++, gcc >= 4.7 +# +BR2_PACKAGE_EUDEV=y +BR2_PACKAGE_PROVIDES_UDEV="eudev" +# BR2_PACKAGE_EUDEV_RULES_GEN is not set +BR2_PACKAGE_EUDEV_ENABLE_HWDB=y +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +BR2_PACKAGE_FLASHROM_ARCH_SUPPORTS=y +# BR2_PACKAGE_FLASHROM is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HDPARM is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_HWLOC is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LIBIEC61850 is not set +# BR2_PACKAGE_LIBUBOOTENV is not set +# BR2_PACKAGE_LIBUIO is not set + +# +# linux-backports needs a Linux kernel to be built +# +# BR2_PACKAGE_LINUX_SERIAL_TEST is not set +# BR2_PACKAGE_LINUXCONSOLETOOLS is not set +# BR2_PACKAGE_LIRC_TOOLS is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSSCSI is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LUKSMETA is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MBPFAN is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MDEVD is not set +BR2_PACKAGE_MEMTESTER=y +# BR2_PACKAGE_MEMTOOL is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_NVIDIA_MODPROBE is not set +# BR2_PACKAGE_NVME is not set + +# +# ofono needs a toolchain w/ dynamic library, wchar, threads, headers >= 4.12 +# +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENFPGALOADER is not set +# BR2_PACKAGE_OPENIPMI is not set +# BR2_PACKAGE_OPENOCD is not set +# BR2_PACKAGE_PARTED is not set +BR2_PACKAGE_PCIUTILS=y +# BR2_PACKAGE_PDBG is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_POWERTOP is not set +# BR2_PACKAGE_PPS_TOOLS is not set +# BR2_PACKAGE_RASPI_GPIO is not set +# BR2_PACKAGE_READ_EDID is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_RS485CONF is not set +# BR2_PACKAGE_RTC_TOOLS is not set + +# +# rtl8188eu needs a Linux kernel to be built +# + +# +# rtl8189fs needs a Linux kernel to be built +# + +# +# rtl8723bs needs a Linux kernel to be built +# + +# +# rtl8723bu needs a Linux kernel to be built +# + +# +# rtl8821au needs a Linux kernel to be built +# +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +BR2_PACKAGE_SEDUTIL_ARCH_SUPPORTS=y +# BR2_PACKAGE_SEDUTIL is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SIGROK_CLI is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SPI_TOOLS is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_STM32FLASH is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on Python +# + +# +# ti-sgx-um needs the ti-sgx-km driver +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_TIO is not set +# BR2_PACKAGE_TRIGGERHAPPY is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set +# BR2_PACKAGE_UBUS is not set + +# +# uccp420wlan needs a Linux kernel >= 4.2 to be built +# +BR2_PACKAGE_HAS_UDEV=y +# BR2_PACKAGE_UDISKS is not set +# BR2_PACKAGE_UHUBCTL is not set +# BR2_PACKAGE_UMTPRD is not set +# BR2_PACKAGE_UPOWER is not set +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set +# BR2_PACKAGE_USBMOUNT is not set +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set +# BR2_PACKAGE_XORRISO is not set + +# +# xr819-xradio driver needs a Linux kernel to be built +# + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_4TH is not set +# BR2_PACKAGE_ENSCRIPT is not set +BR2_PACKAGE_HOST_ERLANG_ARCH_SUPPORTS=y +BR2_PACKAGE_ERLANG_ARCH_SUPPORTS=y +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_EXECLINE is not set +# BR2_PACKAGE_FICL is not set +BR2_PACKAGE_GAUCHE_ARCH_SUPPORTS=y +# BR2_PACKAGE_GAUCHE is not set +# BR2_PACKAGE_GUILE is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +BR2_PACKAGE_PROVIDES_HOST_LUAINTERPRETER="host-lua" +# BR2_PACKAGE_MICROPYTHON is not set +# BR2_PACKAGE_MOARVM is not set +BR2_PACKAGE_HOST_MONO_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_OPENJDK_BIN_ARCH_SUPPORTS=y +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_QUICKJS is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +BR2_PACKAGE_ALSA_LIB=y +BR2_PACKAGE_ALSA_LIB_DEVDIR="/dev/snd" +BR2_PACKAGE_ALSA_LIB_PCM_PLUGINS="all" +BR2_PACKAGE_ALSA_LIB_CTL_PLUGINS="all" +BR2_PACKAGE_ALSA_LIB_ALOAD=y +BR2_PACKAGE_ALSA_LIB_MIXER=y +BR2_PACKAGE_ALSA_LIB_PCM=y +BR2_PACKAGE_ALSA_LIB_RAWMIDI=y +BR2_PACKAGE_ALSA_LIB_HWDEP=y +BR2_PACKAGE_ALSA_LIB_SEQ=y +BR2_PACKAGE_ALSA_LIB_UCM=y +BR2_PACKAGE_ALSA_LIB_ALISP=y +BR2_PACKAGE_ALSA_LIB_OLD_SYMBOLS=y +# BR2_PACKAGE_ALURE is not set +# BR2_PACKAGE_AUBIO is not set +# BR2_PACKAGE_BCG729 is not set +# BR2_PACKAGE_CAPS is not set +BR2_PACKAGE_FDK_AAC_ARCH_SUPPORTS=y +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBASPLIB is not set +# BR2_PACKAGE_LIBBROADVOICE is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDDB is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCDIO_PARANOIA is not set +# BR2_PACKAGE_LIBCODEC2 is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBEBUR128 is not set +# BR2_PACKAGE_LIBG7221 is not set +# BR2_PACKAGE_LIBGSM is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBILBC is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSIDPLAY2 is not set +# BR2_PACKAGE_LIBSILK is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOUNDTOUCH is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_MP4V2 is not set +BR2_PACKAGE_OPENAL_ARCH_SUPPORTS=y +# BR2_PACKAGE_OPENAL is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_OPUSFILE is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SBC is not set +# BR2_PACKAGE_SPANDSP is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_SPEEXDSP is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TINYALSA is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set + +# +# Compression and decompression +# +BR2_PACKAGE_LIBARCHIVE=y +BR2_PACKAGE_LIBARCHIVE_BSDTAR=y +BR2_PACKAGE_LIBARCHIVE_BSDCPIO=y +BR2_PACKAGE_LIBARCHIVE_BSDCAT=y +# BR2_PACKAGE_LIBMSPACK is not set +# BR2_PACKAGE_LIBSQUISH is not set +# BR2_PACKAGE_LIBZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_MINIZIP is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_SZIP is not set +BR2_PACKAGE_ZLIB=y +BR2_PACKAGE_LIBZLIB=y +BR2_PACKAGE_HAS_ZLIB=y +BR2_PACKAGE_PROVIDES_ZLIB="libzlib" +BR2_PACKAGE_PROVIDES_HOST_ZLIB="host-libzlib" +# BR2_PACKAGE_ZZIPLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEARSSL is not set +# BR2_PACKAGE_BEECRYPT is not set +BR2_PACKAGE_BOTAN_ARCH_SUPPORTS=y +# BR2_PACKAGE_BOTAN is not set +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GCR is not set +BR2_PACKAGE_GNUTLS=y +# BR2_PACKAGE_GNUTLS_OPENSSL is not set +# BR2_PACKAGE_GNUTLS_TOOLS is not set +# BR2_PACKAGE_LIBARGON2 is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBGPG_ERROR is not set +BR2_PACKAGE_LIBGPG_ERROR_SYSCFG="mips-unknown-linux-gnu" +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKCAPI is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBOLM is not set +# BR2_PACKAGE_LIBP11 is not set +# BR2_PACKAGE_LIBSCRYPT is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSODIUM is not set +# BR2_PACKAGE_LIBSSH is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_LIBTOMCRYPT is not set +# BR2_PACKAGE_LIBUECC is not set +# BR2_PACKAGE_MBEDTLS is not set +BR2_PACKAGE_NETTLE=y +BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS=y +BR2_PACKAGE_OPENSSL=y +BR2_PACKAGE_LIBOPENSSL=y +BR2_PACKAGE_LIBOPENSSL_TARGET_ARCH="linux-generic32 no-asm" +# BR2_PACKAGE_LIBOPENSSL_BIN is not set +# BR2_PACKAGE_LIBOPENSSL_ENGINES is not set +# BR2_PACKAGE_LIBRESSL is not set +BR2_PACKAGE_HAS_OPENSSL=y +BR2_PACKAGE_PROVIDES_OPENSSL="libopenssl" +BR2_PACKAGE_PROVIDES_HOST_OPENSSL="host-libopenssl" +# BR2_PACKAGE_PKCS11_HELPER is not set +BR2_PACKAGE_RHASH=y +BR2_PACKAGE_RHASH_BIN=y +# BR2_PACKAGE_TINYDTLS is not set +# BR2_PACKAGE_TPM2_PKCS11 is not set +# BR2_PACKAGE_TPM2_TSS is not set +# BR2_PACKAGE_TROUSERS is not set +# BR2_PACKAGE_USTREAM_SSL is not set +# BR2_PACKAGE_WOLFSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_CPPDB is not set +# BR2_PACKAGE_GDBM is not set +BR2_PACKAGE_HIREDIS=y +# BR2_PACKAGE_KOMPEXSQLITE is not set +# BR2_PACKAGE_LEVELDB is not set +# BR2_PACKAGE_LIBGIT2 is not set +# BR2_PACKAGE_LIBMDBX is not set +# BR2_PACKAGE_LIBODB is not set +# BR2_PACKAGE_LIBODB_BOOST is not set +# BR2_PACKAGE_LIBODB_MYSQL is not set +BR2_PACKAGE_MYSQL=y +# BR2_PACKAGE_MARIADB is not set +BR2_PACKAGE_ORACLE_MYSQL=y +# BR2_PACKAGE_ORACLE_MYSQL_SERVER is not set +BR2_PACKAGE_HAS_MYSQL=y +BR2_PACKAGE_PROVIDES_MYSQL="oracle-mysql" +# BR2_PACKAGE_POSTGRESQL is not set +BR2_PACKAGE_REDIS=y +# BR2_PACKAGE_ROCKSDB is not set + +# +# sqlcipher conflicts with sqlite +# +BR2_PACKAGE_SQLITE=y +BR2_PACKAGE_SQLITE_STAT4=y +BR2_PACKAGE_SQLITE_ENABLE_COLUMN_METADATA=y +BR2_PACKAGE_SQLITE_ENABLE_FTS3=y +BR2_PACKAGE_SQLITE_ENABLE_JSON1=y +BR2_PACKAGE_SQLITE_ENABLE_UNLOCK_NOTIFY=y +BR2_PACKAGE_SQLITE_SECURE_DELETE=y +BR2_PACKAGE_SQLITE_NO_SYNC=y +# BR2_PACKAGE_UNIXODBC is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBFUSE3 is not set +# BR2_PACKAGE_LIBLOCKFILE is not set +# BR2_PACKAGE_LIBNFS is not set +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set +# BR2_PACKAGE_PHYSFS is not set + +# +# Graphics +# +# BR2_PACKAGE_ASSIMP is not set + +# +# at-spi2-atk depends on X.org +# + +# +# at-spi2-core depends on X.org +# +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_ATKMM is not set +# BR2_PACKAGE_BULLET is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_CAIROMM is not set + +# +# chipmunk needs an OpenGL backend +# +# BR2_PACKAGE_EXEMPI is not set +# BR2_PACKAGE_EXIV2 is not set +BR2_PACKAGE_FONTCONFIG=y +BR2_PACKAGE_FREETYPE=y +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_GIFLIB is not set + +# +# granite needs libgtk3 and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_GRAPHITE2 is not set + +# +# gtkmm3 needs libgtk3 and a toolchain w/ C++, wchar, threads, gcc >= 4.9 +# +BR2_PACKAGE_HARFBUZZ=y +# BR2_PACKAGE_IJS is not set +# BR2_PACKAGE_IMLIB2 is not set + +# +# irrlicht needs X11 and an OpenGL provider +# +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JBIG2DEC is not set +BR2_PACKAGE_JPEG=y +BR2_PACKAGE_LIBJPEG=y +# BR2_PACKAGE_JPEG_TURBO is not set +BR2_PACKAGE_HAS_JPEG=y +BR2_PACKAGE_PROVIDES_JPEG="libjpeg" + +# +# kms++ needs a toolchain w/ threads, C++, gcc >= 4.8, headers >= 4.11, wchar +# +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LENSFUN is not set +# BR2_PACKAGE_LEPTONICA is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +BR2_PACKAGE_LIBDRM=y +BR2_PACKAGE_LIBDRM_HAS_ATOMIC=y +# BR2_PACKAGE_LIBDRM_RADEON is not set +# BR2_PACKAGE_LIBDRM_AMDGPU is not set +# BR2_PACKAGE_LIBDRM_NOUVEAU is not set +# BR2_PACKAGE_LIBDRM_ETNAVIV is not set +# BR2_PACKAGE_LIBDRM_INSTALL_TESTS is not set + +# +# libepoxy needs an OpenGL and/or OpenGL EGL backend +# +# BR2_PACKAGE_LIBEXIF is not set + +# +# libfm needs X.org and a toolchain w/ wchar, threads, C++, gcc >= 4.8 +# +# BR2_PACKAGE_LIBFM_EXTRA is not set + +# +# libfreeglut depends on X.org and needs an OpenGL backend +# +# BR2_PACKAGE_LIBFREEIMAGE is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglfw depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBGTA is not set + +# +# libgtk3 needs an OpenGL or an OpenGL-EGL/wayland backend +# +# BR2_PACKAGE_LIBMEDIAART is not set +# BR2_PACKAGE_LIBMNG is not set +BR2_PACKAGE_LIBPNG=y +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set + +# +# libsoil needs an OpenGL backend and a toolchain w/ dynamic library +# +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_LIBVIPS is not set + +# +# libwpe needs a toolchain w/ C++, dynamic library and an OpenEGL-capable backend +# +# BR2_PACKAGE_MENU_CACHE is not set +# BR2_PACKAGE_OPENCV3 is not set +# BR2_PACKAGE_OPENJPEG is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PANGOMM is not set +# BR2_PACKAGE_PIPEWIRE is not set +BR2_PACKAGE_PIXMAN=y + +# +# poppler needs a toolchain w/ wchar, C++, threads, dynamic library, gcc >= 5 +# +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKITGTK_ARCH_SUPPORTS=y + +# +# webkitgtk needs libgtk3 and a glibc toolchain w/ C++, gcc >= 7, host gcc >= 4.9 +# +# BR2_PACKAGE_WEBP is not set + +# +# wlroots needs udev, mesa3d w/ EGL and GLES support +# +# BR2_PACKAGE_WOFF2 is not set + +# +# wpebackend-fdo needs a toolchain w/ C++, wchar, threads, dynamic library and an OpenEGL-capable Wayland backend +# +BR2_PACKAGE_WPEWEBKIT_ARCH_SUPPORTS=y + +# +# wpewebkit needs a toolchain w/ C++, wchar, threads, dynamic library, gcc >= 7, host gcc >= 4.9 +# + +# +# wpewebkit needs an OpenGL ES w/ EGL-capable Wayland backend +# +# BR2_PACKAGE_ZBAR is not set +# BR2_PACKAGE_ZXING_CPP is not set + +# +# Hardware handling +# +# BR2_PACKAGE_ACSCCID is not set +# BR2_PACKAGE_C_PERIPHERY is not set +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +# BR2_PACKAGE_HACKRF is not set +# BR2_PACKAGE_HIDAPI is not set +# BR2_PACKAGE_JITTERENTROPY_LIBRARY is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LET_ME_CREATE is not set +# BR2_PACKAGE_LIBAIO is not set +# BR2_PACKAGE_LIBATASMART is not set +# BR2_PACKAGE_LIBBLOCKDEV is not set +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBFTDI1 is not set +# BR2_PACKAGE_LIBGPHOTO2 is not set + +# +# libgpiod needs kernel headers >= 4.8 +# +# BR2_PACKAGE_LIBGUDEV is not set +# BR2_PACKAGE_LIBHID is not set +# BR2_PACKAGE_LIBIIO is not set +BR2_PACKAGE_LIBINPUT=y +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set +# BR2_PACKAGE_LIBMBIM is not set +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPCIACCESS is not set +# BR2_PACKAGE_LIBPHIDGET is not set + +# +# libpri needs a kernel to be built +# +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set + +# +# libserial needs a toolchain w/ C++, gcc >= 5, threads, wchar +# +# BR2_PACKAGE_LIBSERIALPORT is not set +# BR2_PACKAGE_LIBSIGROK is not set +# BR2_PACKAGE_LIBSIGROKDECODE is not set +# BR2_PACKAGE_LIBSOC is not set + +# +# libss7 needs a kernel to be built +# +BR2_PACKAGE_LIBUSB=y +# BR2_PACKAGE_LIBUSB_EXAMPLES is not set +# BR2_PACKAGE_LIBUSB_COMPAT is not set +# BR2_PACKAGE_LIBUSBGX is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +BR2_PACKAGE_MRAA_ARCH_SUPPORTS=y +# BR2_PACKAGE_MRAA is not set +BR2_PACKAGE_MTDEV=y +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_OWFS is not set +# BR2_PACKAGE_PCSC_LITE is not set +BR2_PACKAGE_TSLIB=y +# BR2_PACKAGE_UHD is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_ANGULARJS is not set +# BR2_PACKAGE_BOOTSTRAP is not set +# BR2_PACKAGE_CHARTJS is not set +# BR2_PACKAGE_DATATABLES is not set +# BR2_PACKAGE_DUKTAPE is not set +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set +# BR2_PACKAGE_JSZIP is not set +# BR2_PACKAGE_OPENLAYERS is not set +# BR2_PACKAGE_POPPERJS is not set +BR2_PACKAGE_SPIDERMONKEY_ARCH_SUPPORTS=y +# BR2_PACKAGE_SPIDERMONKEY is not set +# BR2_PACKAGE_VUEJS is not set + +# +# JSON/XML +# +# BR2_PACKAGE_BENEJSON is not set +# BR2_PACKAGE_CJSON is not set +BR2_PACKAGE_EXPAT=y +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JOSE is not set +# BR2_PACKAGE_JSMN is not set +BR2_PACKAGE_JSON_C=y +# BR2_PACKAGE_JSON_FOR_MODERN_CPP is not set +# BR2_PACKAGE_JSON_GLIB is not set +BR2_PACKAGE_JSONCPP=y +# BR2_PACKAGE_LIBBSON is not set +# BR2_PACKAGE_LIBFASTJSON is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBUCL is not set +BR2_PACKAGE_LIBXML2=y +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_PUGIXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_RAPIDXML is not set +# BR2_PACKAGE_RAPTOR is not set +BR2_PACKAGE_TINYXML=y +BR2_PACKAGE_TINYXML2=y +# BR2_PACKAGE_VALIJSON is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set +# BR2_PACKAGE_YAML_CPP is not set + +# +# Logging +# +# BR2_PACKAGE_GLOG is not set +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CPP is not set +# BR2_PACKAGE_LOG4CXX is not set +# BR2_PACKAGE_OPENTRACING_CPP is not set +# BR2_PACKAGE_SPDLOG is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_BITSTREAM is not set +# BR2_PACKAGE_DAV1D is not set +# BR2_PACKAGE_KVAZAAR is not set +# BR2_PACKAGE_LIBAACS is not set +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBDPLUS is not set +# BR2_PACKAGE_LIBBLURAY is not set +BR2_PACKAGE_LIBCAMERA_ARCH_SUPPORTS=y + +# +# libcamera needs a toolchain w/ C++, threads, wchar, dynamic library, gcc >= 7 +# +# BR2_PACKAGE_LIBDCADEC is not set +# BR2_PACKAGE_LIBDVBCSA is not set +# BR2_PACKAGE_LIBDVBPSI is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDCSS is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBHDHOMERUN is not set +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +BR2_PACKAGE_LIBOPENH264_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBOPENH264 is not set +# BR2_PACKAGE_LIBOPUSENC is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIBUDFREAD is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_LIBYUV is not set +# BR2_PACKAGE_LIVE555 is not set + +# +# mediastreamer needs a toolchain w/ threads, C++, dynamic library, gcc >= 5 +# +# BR2_PACKAGE_X264 is not set +# BR2_PACKAGE_X265 is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_AZMQ is not set +# BR2_PACKAGE_AZURE_IOT_SDK_C is not set + +# +# batman-adv needs a Linux kernel to be built +# +# BR2_PACKAGE_BELLE_SIP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CGIC is not set +BR2_PACKAGE_CPPZMQ=y +# BR2_PACKAGE_CURLPP is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_DAQ is not set +# BR2_PACKAGE_DAVICI is not set +# BR2_PACKAGE_ENET is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_FREERADIUS_CLIENT is not set +# BR2_PACKAGE_GENSIO is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_GRPC is not set +# BR2_PACKAGE_GSSDP is not set +# BR2_PACKAGE_GUPNP is not set +# BR2_PACKAGE_GUPNP_AV is not set +# BR2_PACKAGE_GUPNP_DLNA is not set +# BR2_PACKAGE_IBRCOMMON is not set +# BR2_PACKAGE_IBRDTN is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCOAP is not set +# BR2_PACKAGE_LIBCPPRESTSDK is not set +BR2_PACKAGE_LIBCURL=y +BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_LIBCURL_VERBOSE=y +BR2_PACKAGE_LIBCURL_PROXY_SUPPORT=y +BR2_PACKAGE_LIBCURL_COOKIES_SUPPORT=y +BR2_PACKAGE_LIBCURL_EXTRA_PROTOCOLS_FEATURES=y +# BR2_PACKAGE_LIBCURL_OPENSSL is not set +# BR2_PACKAGE_LIBCURL_GNUTLS is not set +BR2_PACKAGE_LIBCURL_TLS_NONE=y +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBHTP is not set +# BR2_PACKAGE_LIBHTTPPARSER is not set + +# +# libhttpserver needs a toolchain w/ C++, threads, gcc >= 5 +# +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBIDN2 is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBKRB5 is not set +# BR2_PACKAGE_LIBLDNS is not set +# BR2_PACKAGE_LIBMAXMINDDB is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +BR2_PACKAGE_LIBMICROHTTPD=y +# BR2_PACKAGE_LIBMICROHTTPD_SSL is not set +# BR2_PACKAGE_LIBMINIUPNPC is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBMODSECURITY is not set +# BR2_PACKAGE_LIBNATPMP is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNET is not set +# BR2_PACKAGE_LIBNETCONF2 is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNICE is not set +# BR2_PACKAGE_LIBNIDS is not set +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBNPUPNP is not set +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPAGEKITE is not set +BR2_PACKAGE_LIBPCAP=y +# BR2_PACKAGE_LIBPJSIP is not set +# BR2_PACKAGE_LIBRELP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSHOUT is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSRTP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTELNET is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBTORRENT_RASTERBAR is not set +# BR2_PACKAGE_LIBUEV is not set +# BR2_PACKAGE_LIBUHTTPD is not set +# BR2_PACKAGE_LIBUPNP is not set +# BR2_PACKAGE_LIBUPNPP is not set +# BR2_PACKAGE_LIBURIPARSER is not set +# BR2_PACKAGE_LIBUWSC is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCK is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_LIBYANG is not set +# BR2_PACKAGE_LKSCTP_TOOLS is not set +# BR2_PACKAGE_MBUFFER is not set +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_NANOMSG is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_NETOPEER2 is not set +# BR2_PACKAGE_NGHTTP2 is not set +BR2_PACKAGE_NORM=y +# BR2_PACKAGE_NSS_MYHOSTNAME is not set +# BR2_PACKAGE_NSS_PAM_LDAPD is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPEN62541 is not set +# BR2_PACKAGE_OPENLDAP is not set +# BR2_PACKAGE_OPENMPI is not set +BR2_PACKAGE_OPENPGM=y +# BR2_PACKAGE_OPENZWAVE is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_PAHO_MQTT_C is not set +# BR2_PACKAGE_PAHO_MQTT_CPP is not set +# BR2_PACKAGE_PISTACHE is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_QPID_PROTON is not set +# BR2_PACKAGE_RABBITMQ_C is not set +# BR2_PACKAGE_RESIPROCATE is not set +# BR2_PACKAGE_RESTCLIENT_CPP is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_SOFIA_SIP is not set +# BR2_PACKAGE_SYSREPO is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WAMPCC is not set +# BR2_PACKAGE_WEBSOCKETPP is not set +BR2_PACKAGE_ZEROMQ=y +BR2_PACKAGE_ZEROMQ_NORM=y +BR2_PACKAGE_ZEROMQ_PGM=y +# BR2_PACKAGE_ZEROMQ_DRAFTS is not set +# BR2_PACKAGE_ZEROMQ_WEBSOCKET is not set +BR2_PACKAGE_ZMQPP=y +# BR2_PACKAGE_ZMQPP_CLIENT is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARMADILLO is not set +# BR2_PACKAGE_ATF is not set +# BR2_PACKAGE_AVRO_C is not set +# BR2_PACKAGE_BCTOOLBOX is not set +# BR2_PACKAGE_BDWGC is not set +# BR2_PACKAGE_BELR is not set +BR2_PACKAGE_BOOST=y +BR2_PACKAGE_BOOST_LAYOUT_SYSTEM=y +# BR2_PACKAGE_BOOST_LAYOUT_TAGGED is not set +# BR2_PACKAGE_BOOST_LAYOUT_VERSIONED is not set +BR2_PACKAGE_BOOST_LAYOUT="system" +BR2_PACKAGE_BOOST_ATOMIC=y +BR2_PACKAGE_BOOST_CHRONO=y +BR2_PACKAGE_BOOST_CONTAINER=y +BR2_PACKAGE_BOOST_CONTEXT_ARCH_SUPPORTS=y +# BR2_PACKAGE_BOOST_CONTEXT is not set +BR2_PACKAGE_BOOST_CONTRACT=y +# BR2_PACKAGE_BOOST_COROUTINE is not set +BR2_PACKAGE_BOOST_DATE_TIME=y +BR2_PACKAGE_BOOST_EXCEPTION=y +BR2_PACKAGE_BOOST_FILESYSTEM=y +BR2_PACKAGE_BOOST_GRAPH=y +BR2_PACKAGE_BOOST_GRAPH_PARALLEL=y +BR2_PACKAGE_BOOST_IOSTREAMS=y +# BR2_PACKAGE_BOOST_JSON is not set +BR2_PACKAGE_BOOST_LOCALE=y +BR2_PACKAGE_BOOST_LOG=y +BR2_PACKAGE_BOOST_MATH=y +BR2_PACKAGE_BOOST_MPI=y +# BR2_PACKAGE_BOOST_NOWIDE is not set +BR2_PACKAGE_BOOST_PROGRAM_OPTIONS=y +BR2_PACKAGE_BOOST_RANDOM=y +BR2_PACKAGE_BOOST_REGEX=y +BR2_PACKAGE_BOOST_SERIALIZATION=y +BR2_PACKAGE_BOOST_STACKTRACE=y +BR2_PACKAGE_BOOST_SYSTEM=y +BR2_PACKAGE_BOOST_TEST=y +BR2_PACKAGE_BOOST_THREAD=y +BR2_PACKAGE_BOOST_TIMER=y +BR2_PACKAGE_BOOST_TYPE_ERASURE=y +BR2_PACKAGE_BOOST_WAVE=y + +# +# c-capnproto needs host and target gcc >= 5 w/ C++14, threads, atomic, ucontext and not gcc bug 64735 +# + +# +# capnproto needs host and target gcc >= 5 w/ C++14, threads, atomic, ucontext and not gcc bug 64735 +# +# BR2_PACKAGE_CCTZ is not set +# BR2_PACKAGE_CEREAL is not set +# BR2_PACKAGE_CLAPACK is not set +BR2_PACKAGE_CMOCKA=y +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_CRACKLIB is not set +# BR2_PACKAGE_DAWGDIC is not set +# BR2_PACKAGE_DING_LIBS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set + +# +# ell needs a toolchain w/ wchar, headers >= 4.12 +# +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_FLATBUFFERS is not set +# BR2_PACKAGE_FLATCC is not set +# BR2_PACKAGE_GCONF is not set +# BR2_PACKAGE_GFLAGS is not set +# BR2_PACKAGE_GLI is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GLM is not set +BR2_PACKAGE_GMP=y +BR2_PACKAGE_GOBJECT_INTROSPECTION_ARCH_SUPPORTS=y + +# +# gobject-introspection needs python3 +# +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +BR2_PACKAGE_JEMALLOC_ARCH_SUPPORTS=y +# BR2_PACKAGE_JEMALLOC is not set + +# +# lapack/blas needs a toolchain w/ fortran +# +BR2_PACKAGE_LIBABSEIL_CPP_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBABSEIL_CPP is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +BR2_PACKAGE_LIBATOMIC_OPS_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBATOMIC_OPS is not set +# BR2_PACKAGE_LIBAVL is not set +# BR2_PACKAGE_LIBB64 is not set +# BR2_PACKAGE_LIBBACKTRACE is not set +BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBBSD is not set +# BR2_PACKAGE_LIBBYTESIZE is not set +BR2_PACKAGE_LIBCAP=y +# BR2_PACKAGE_LIBCAP_TOOLS is not set +# BR2_PACKAGE_LIBCAP_NG is not set +# BR2_PACKAGE_LIBCGROUP is not set +# BR2_PACKAGE_LIBCORRECT is not set +# BR2_PACKAGE_LIBCROSSGUID is not set +# BR2_PACKAGE_LIBCSV is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +BR2_PACKAGE_LIBEVDEV=y +BR2_PACKAGE_LIBEVENT=y +BR2_PACKAGE_LIBFFI=y +# BR2_PACKAGE_LIBGEE is not set +# BR2_PACKAGE_LIBGEOS is not set +BR2_PACKAGE_LIBGLIB2=y +# BR2_PACKAGE_LIBGLOB is not set +# BR2_PACKAGE_LIBICAL is not set +# BR2_PACKAGE_LIBITE is not set +# BR2_PACKAGE_LIBLINEAR is not set +# BR2_PACKAGE_LIBLOKI is not set +# BR2_PACKAGE_LIBNPTH is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +BR2_PACKAGE_LIBPTHREAD_STUBS=y +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBPWQUALITY is not set +BR2_PACKAGE_LIBSECCOMP_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBSECCOMP is not set +# BR2_PACKAGE_LIBSIGC is not set +BR2_PACKAGE_LIBSIGSEGV_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBSPATIALINDEX is not set +BR2_PACKAGE_LIBTASN1=y +# BR2_PACKAGE_LIBTOMMATH is not set +# BR2_PACKAGE_LIBTPL is not set +BR2_PACKAGE_LIBUBOX=y +# BR2_PACKAGE_LIBUCI is not set +BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBUNWIND is not set +BR2_PACKAGE_LIBURCU_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBURCU is not set +BR2_PACKAGE_LIBUV=y +# BR2_PACKAGE_LIGHTNING is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_LIQUID_DSP is not set +# BR2_PACKAGE_LTTNG_LIBUST is not set +# BR2_PACKAGE_MATIO is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MPIR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS=y +BR2_PACKAGE_PROTOBUF=y +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_QLIBC is not set +# BR2_PACKAGE_RIEMANN_C_CLIENT is not set +# BR2_PACKAGE_SHAPELIB is not set +# BR2_PACKAGE_SKALIBS is not set +# BR2_PACKAGE_SPHINXBASE is not set +# BR2_PACKAGE_TINYCBOR is not set +BR2_PACKAGE_TZDATA=y + +# +# uvw needs a toolchain w/ NPTL, dynamic library, C++, gcc >= 7 +# +# BR2_PACKAGE_XAPIAN is not set + +# +# Security +# +# BR2_PACKAGE_LIBAPPARMOR is not set +# BR2_PACKAGE_LIBSELINUX is not set +# BR2_PACKAGE_LIBSEPOL is not set +# BR2_PACKAGE_SAFECLIB is not set +BR2_PACKAGE_LIBELECTRIC_FENCE=y + +# +# Text and terminal handling +# +# BR2_PACKAGE_AUGEAS is not set +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_FMT is not set +# BR2_PACKAGE_FSTRCMP is not set +BR2_PACKAGE_ICU=y +BR2_PACKAGE_ICU_CUSTOM_DATA_PATH="" +# BR2_PACKAGE_INIH is not set +# BR2_PACKAGE_LIBCLI is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LIBUNISTRING is not set +# BR2_PACKAGE_LINENOISE is not set +BR2_PACKAGE_NCURSES=y +# BR2_PACKAGE_NCURSES_WCHAR is not set +# BR2_PACKAGE_NCURSES_TARGET_PROGS is not set +BR2_PACKAGE_NCURSES_ADDITIONAL_TERMINFO="" +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_ONIGURUMA is not set +BR2_PACKAGE_PCRE=y +# BR2_PACKAGE_PCRE_16 is not set +# BR2_PACKAGE_PCRE_32 is not set +BR2_PACKAGE_PCRE_UTF=y +BR2_PACKAGE_PCRE_UCP=y +BR2_PACKAGE_PCRE2=y +BR2_PACKAGE_PCRE2_16=y +# BR2_PACKAGE_PCRE2_32 is not set +BR2_PACKAGE_PCRE2_JIT_ARCH_SUPPORTS=y +# BR2_PACKAGE_PCRE2_JIT is not set +BR2_PACKAGE_POPT=y +# BR2_PACKAGE_RE2 is not set +BR2_PACKAGE_READLINE=y +# BR2_PACKAGE_READLINE_BRACKETED_PASTE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set +# BR2_PACKAGE_UTF8PROC is not set + +# +# Mail +# +# BR2_PACKAGE_DOVECOT is not set +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +BR2_PACKAGE_BITCOIN_ARCH_SUPPORTS=y +# BR2_PACKAGE_BITCOIN is not set +# BR2_PACKAGE_CLAMAV is not set +BR2_PACKAGE_COLLECTD=y + +# +# match plugins +# +# BR2_PACKAGE_COLLECTD_EMPTY_COUNTER is not set +# BR2_PACKAGE_COLLECTD_HASHED is not set +# BR2_PACKAGE_COLLECTD_REGEX is not set +# BR2_PACKAGE_COLLECTD_TIMEDIFF is not set +# BR2_PACKAGE_COLLECTD_VALUE is not set + +# +# misc plugins +# +# BR2_PACKAGE_COLLECTD_AGGREGATION is not set +BR2_PACKAGE_COLLECTD_LOGFILE=y +# BR2_PACKAGE_COLLECTD_LOGSTASH is not set + +# +# lua support needs a Lua interpreter +# +# BR2_PACKAGE_COLLECTD_NOTIFY_EMAIL is not set +# BR2_PACKAGE_COLLECTD_NOTIFY_NAGIOS is not set +BR2_PACKAGE_COLLECTD_SYSLOG=y +# BR2_PACKAGE_COLLECTD_THRESHOLD is not set + +# +# read plugins +# + +# +# Select at least one for collectd to be useful +# +# BR2_PACKAGE_COLLECTD_APACHE is not set +# BR2_PACKAGE_COLLECTD_APCUPS is not set +# BR2_PACKAGE_COLLECTD_BATTERY is not set +# BR2_PACKAGE_COLLECTD_BIND is not set +# BR2_PACKAGE_COLLECTD_BUDDYINFO is not set +# BR2_PACKAGE_COLLECTD_CEPH is not set +# BR2_PACKAGE_COLLECTD_CHRONY is not set +# BR2_PACKAGE_COLLECTD_CGROUPS is not set +# BR2_PACKAGE_COLLECTD_CONNTRACK is not set +# BR2_PACKAGE_COLLECTD_CONTEXTSWITCH is not set +# BR2_PACKAGE_COLLECTD_CPU is not set +# BR2_PACKAGE_COLLECTD_CPUFREQ is not set +# BR2_PACKAGE_COLLECTD_CPUSLEEP is not set +# BR2_PACKAGE_COLLECTD_CURL is not set +# BR2_PACKAGE_COLLECTD_CURL_JSON is not set +# BR2_PACKAGE_COLLECTD_CURL_XML is not set +# BR2_PACKAGE_COLLECTD_DF is not set +# BR2_PACKAGE_COLLECTD_DISK is not set +# BR2_PACKAGE_COLLECTD_DNS is not set +# BR2_PACKAGE_COLLECTD_DPDK_TELEMETRY is not set +# BR2_PACKAGE_COLLECTD_DRBD is not set +# BR2_PACKAGE_COLLECTD_ENTROPY is not set +# BR2_PACKAGE_COLLECTD_ETHSTAT is not set +BR2_PACKAGE_COLLECTD_EXEC=y +# BR2_PACKAGE_COLLECTD_FHCOUNT is not set +# BR2_PACKAGE_COLLECTD_FILECOUNT is not set +# BR2_PACKAGE_COLLECTD_FSCACHE is not set +# BR2_PACKAGE_COLLECTD_GPS is not set +# BR2_PACKAGE_COLLECTD_HUGEPAGES is not set +# BR2_PACKAGE_COLLECTD_INFINIBAND is not set +# BR2_PACKAGE_COLLECTD_INTERFACE is not set +# BR2_PACKAGE_COLLECTD_IPC is not set +# BR2_PACKAGE_COLLECTD_IPTABLES is not set +# BR2_PACKAGE_COLLECTD_IPVS is not set +# BR2_PACKAGE_COLLECTD_IRQ is not set +# BR2_PACKAGE_COLLECTD_LOAD is not set +# BR2_PACKAGE_COLLECTD_LOGPARSER is not set +# BR2_PACKAGE_COLLECTD_MD is not set +# BR2_PACKAGE_COLLECTD_MDEVENTS is not set +# BR2_PACKAGE_COLLECTD_MEMCACHEC is not set +# BR2_PACKAGE_COLLECTD_MEMCACHED is not set +# BR2_PACKAGE_COLLECTD_MEMORY is not set +# BR2_PACKAGE_COLLECTD_MODBUS is not set +# BR2_PACKAGE_COLLECTD_MYSQL is not set +# BR2_PACKAGE_COLLECTD_NETLINK is not set +# BR2_PACKAGE_COLLECTD_NFS is not set +# BR2_PACKAGE_COLLECTD_NGINX is not set +# BR2_PACKAGE_COLLECTD_NTPD is not set +# BR2_PACKAGE_COLLECTD_NUT is not set +# BR2_PACKAGE_COLLECTD_OLSRD is not set +# BR2_PACKAGE_COLLECTD_ONEWIRE is not set +# BR2_PACKAGE_COLLECTD_OPENLDAP is not set +# BR2_PACKAGE_COLLECTD_OPENVPN is not set +# BR2_PACKAGE_COLLECTD_PING is not set +# BR2_PACKAGE_COLLECTD_POSTGRESQL is not set +# BR2_PACKAGE_COLLECTD_PROCESSES is not set +# BR2_PACKAGE_COLLECTD_PROTOCOLS is not set +# BR2_PACKAGE_COLLECTD_REDIS is not set +# BR2_PACKAGE_COLLECTD_SENSORS is not set +# BR2_PACKAGE_COLLECTD_SERIAL is not set +# BR2_PACKAGE_COLLECTD_SMART is not set +# BR2_PACKAGE_COLLECTD_STATSD is not set +# BR2_PACKAGE_COLLECTD_SNMP is not set +# BR2_PACKAGE_COLLECTD_SWAP is not set +# BR2_PACKAGE_COLLECTD_SYNPROXY is not set +# BR2_PACKAGE_COLLECTD_TABLE is not set +# BR2_PACKAGE_COLLECTD_TAIL is not set +# BR2_PACKAGE_COLLECTD_TAIL_CSV is not set +# BR2_PACKAGE_COLLECTD_TCPCONNS is not set +# BR2_PACKAGE_COLLECTD_THERMAL is not set +# BR2_PACKAGE_COLLECTD_UBI is not set +# BR2_PACKAGE_COLLECTD_UPTIME is not set +# BR2_PACKAGE_COLLECTD_USERS is not set +# BR2_PACKAGE_COLLECTD_VMEM is not set +# BR2_PACKAGE_COLLECTD_WIRELESS is not set +# BR2_PACKAGE_COLLECTD_ZOOKEEPER is not set + +# +# target plugins +# +# BR2_PACKAGE_COLLECTD_NOTIFICATION is not set +# BR2_PACKAGE_COLLECTD_REPLACE is not set +# BR2_PACKAGE_COLLECTD_SCALE is not set +# BR2_PACKAGE_COLLECTD_SET is not set + +# +# write plugins +# + +# +# Select at least one for collectd to be useful +# +# BR2_PACKAGE_COLLECTD_AMQP is not set +# BR2_PACKAGE_COLLECTD_CSV is not set +# BR2_PACKAGE_COLLECTD_GRAPHITE is not set +# BR2_PACKAGE_COLLECTD_GRPC is not set +# BR2_PACKAGE_COLLECTD_MQTT is not set +# BR2_PACKAGE_COLLECTD_NETWORK is not set +# BR2_PACKAGE_COLLECTD_RRDTOOL is not set +# BR2_PACKAGE_COLLECTD_RIEMANN is not set +# BR2_PACKAGE_COLLECTD_UNIXSOCK is not set +# BR2_PACKAGE_COLLECTD_WRITEHTTP is not set +# BR2_PACKAGE_COLLECTD_WRITEINFLUXDBUDP is not set +# BR2_PACKAGE_COLLECTD_WRITELOG is not set +# BR2_PACKAGE_COLLECTD_WRITEPROMETHEUS is not set +# BR2_PACKAGE_COLLECTD_WRITEREDIS is not set +# BR2_PACKAGE_COLLECTD_WRITESENSU is not set +# BR2_PACKAGE_COLLECTD_WRITETSDB is not set +# BR2_PACKAGE_COLLECTL is not set + +# +# domoticz needs lua 5.3 and a toolchain w/ C++, gcc >= 4.8, NPTL, wchar, dynamic library +# +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GNURADIO is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set + +# +# gqrx needs qt5 +# +# BR2_PACKAGE_GSETTINGS_DESKTOP_SCHEMAS is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_LINUX_SYSCALL_SUPPORT is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_NETDATA is not set +# BR2_PACKAGE_PROJ is not set +BR2_PACKAGE_QEMU_ARCH_SUPPORTS_TARGET=y +# BR2_PACKAGE_QEMU is not set +# BR2_PACKAGE_QPDF is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SUNWAIT is not set +# BR2_PACKAGE_TASKD is not set +# BR2_PACKAGE_XUTIL_UTIL_MACROS is not set + +# +# Networking applications +# +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_AOETOOLS is not set +# BR2_PACKAGE_APACHE is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARP_SCAN is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ASTERISK is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AUTOSSH is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BABELD is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BATCTL is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BIRD is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOINC is not set +# BR2_PACKAGE_BRCM_PATCHRAM_PLUS is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_C_ICAP is not set +BR2_PACKAGE_CAN_UTILS=y +# BR2_PACKAGE_CANNELLONI is not set +# BR2_PACKAGE_CASYNC is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set + +# +# connman-gtk needs libgtk3 and a glibc or uClibc toolchain w/ wchar, threads, resolver, dynamic library +# +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CORKSCREW is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DANTE is not set +# BR2_PACKAGE_DARKHTTPD is not set +# BR2_PACKAGE_DEHYDRATED is not set +# BR2_PACKAGE_DHCP is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DRBD_UTILS is not set +BR2_PACKAGE_DROPBEAR=y +BR2_PACKAGE_DROPBEAR_CLIENT=y +BR2_PACKAGE_DROPBEAR_DISABLE_REVERSEDNS=y +BR2_PACKAGE_DROPBEAR_SMALL=y +# BR2_PACKAGE_DROPBEAR_WTMP is not set +# BR2_PACKAGE_DROPBEAR_LASTLOG is not set +BR2_PACKAGE_DROPBEAR_LEGACY_CRYPTO=y +BR2_PACKAGE_DROPBEAR_LOCALOPTIONS_FILE="" +# BR2_PACKAGE_EASYFRAMES is not set +# BR2_PACKAGE_EBTABLES is not set + +# +# ejabberd needs erlang, toolchain w/ C++ +# +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_ETHTOOL_PRETTY_PRINT=y +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FASTD is not set +# BR2_PACKAGE_FCGIWRAP is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_FREESWITCH is not set +# BR2_PACKAGE_FRR is not set + +# +# gerbera needs a toolchain w/ C++, threads, wchar, gcc >= 8 +# +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_GLOOX is not set +# BR2_PACKAGE_GLORYTUN is not set + +# +# gupnp-tools needs libgtk3 +# +# BR2_PACKAGE_HANS is not set +BR2_PACKAGE_HAPROXY_ARCH_SUPPORTS=y +# BR2_PACKAGE_HAPROXY is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTPDATE is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_I2PD is not set +# BR2_PACKAGE_IBRDTN_TOOLS is not set +# BR2_PACKAGE_IBRDTND is not set +# BR2_PACKAGE_IFENSLAVE is not set +# BR2_PACKAGE_IFMETRIC is not set +# BR2_PACKAGE_IFPLUGD is not set +BR2_PACKAGE_IFTOP=y +BR2_PACKAGE_IFUPDOWN=y +BR2_PACKAGE_IFUPDOWN_SCRIPTS=y +# BR2_PACKAGE_IGD2_FOR_LINUX is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IODINE is not set +# BR2_PACKAGE_IPCALC is not set +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPERF3=y +BR2_PACKAGE_IPROUTE2=y +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IRSSI is not set +# BR2_PACKAGE_IW is not set + +# +# iwd needs a toolchain w/ threads, wchar, headers >= 4.12 +# +# BR2_PACKAGE_JANUS_GATEWAY is not set +# BR2_PACKAGE_KEEPALIVED is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LEAFNODE2 is not set +# BR2_PACKAGE_LFT is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set + +# +# linphone needs a toolchain w/ threads, C++, dynamic library, wchar, gcc >= 5 +# +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LINUXPTP is not set +# BR2_PACKAGE_LLDPD is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_LYNX is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINI_SNMPD is not set +# BR2_PACKAGE_MINIDLNA is not set +# BR2_PACKAGE_MINISSDPD is not set +# BR2_PACKAGE_MJPG_STREAMER is not set +# BR2_PACKAGE_MODEM_MANAGER is not set +BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS=y +# BR2_PACKAGE_MONGREL2 is not set +# BR2_PACKAGE_MONKEY is not set +# BR2_PACKAGE_MOSH is not set +# BR2_PACKAGE_MOSQUITTO is not set +# BR2_PACKAGE_MROUTED is not set + +# +# mrp needs a toolchain w/ threads, kernel headers >= 5.0 +# +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NET_TOOLS is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETCALC is not set +# BR2_PACKAGE_NETCAT is not set +# BR2_PACKAGE_NETCAT_OPENBSD is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set +# BR2_PACKAGE_NETWORK_MANAGER is not set +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGINX is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NLOAD is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCP6C is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPEN_LLDP is not set +# BR2_PACKAGE_OPEN_PLC_UTILS is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENRESOLV is not set +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_OPENSSH_CLIENT=y +BR2_PACKAGE_OPENSSH_SERVER=y +BR2_PACKAGE_OPENSSH_KEY_UTILS=y +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PARPROUTED is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set +# BR2_PACKAGE_PHYTOOL is not set +# BR2_PACKAGE_PIMD is not set +# BR2_PACKAGE_PIXIEWPS is not set +# BR2_PACKAGE_POUND is not set +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PRIVOXY is not set +# BR2_PACKAGE_PROFTPD is not set + +# +# prosody needs the lua interpreter, dynamic library +# +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_PURE_FTPD is not set +# BR2_PACKAGE_PUTTY is not set +# BR2_PACKAGE_QUAGGA is not set + +# +# rabbitmq-server needs erlang +# +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_REAVER is not set +# BR2_PACKAGE_REDIR is not set +# BR2_PACKAGE_RP_PPPOE is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_RYGEL is not set +# BR2_PACKAGE_S6_DNS is not set +# BR2_PACKAGE_S6_NETWORKING is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SHADOWSOCKS_LIBEV is not set +# BR2_PACKAGE_SHAIRPORT_SYNC is not set +# BR2_PACKAGE_SHELLINABOX is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SNGREP is not set +# BR2_PACKAGE_SNORT is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SOFTETHER is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSDP_RESPONDER is not set +# BR2_PACKAGE_SSHGUARD is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_SSLH is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_SURICATA is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_TFTPD is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINC is not set +# BR2_PACKAGE_TINYPROXY is not set +# BR2_PACKAGE_TINYSSH is not set +# BR2_PACKAGE_TOR is not set +# BR2_PACKAGE_TRACEROUTE is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TUNCTL is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UACME is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_UFTP is not set +BR2_PACKAGE_UHTTPD=y +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_UNBOUND is not set +# BR2_PACKAGE_UREDIR is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VDR is not set +# BR2_PACKAGE_VNSTAT is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WAVEMON is not set +# BR2_PACKAGE_WGET is not set +# BR2_PACKAGE_WHOIS is not set +# BR2_PACKAGE_WIREGUARD_TOOLS is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WPAN_TOOLS is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set + +# +# xtables-addons needs a Linux kernel to be built +# +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# + +# +# ------------------------------------------------------- +# + +# +# Please note: +# + +# +# - Buildroot does *not* generate binary packages, +# + +# +# - Buildroot does *not* install any package database. +# + +# +# * +# + +# +# It is up to you to provide those by yourself if you +# + +# +# want to use any of those package managers. +# + +# +# * +# + +# +# See the manual: +# + +# +# http://buildroot.org/manual.html#faq-no-binary-packages +# + +# +# ------------------------------------------------------- +# +# BR2_PACKAGE_OPKG is not set +# BR2_PACKAGE_RPM is not set + +# +# Real-Time +# +# BR2_PACKAGE_XENOMAI is not set + +# +# Security +# +# BR2_PACKAGE_APPARMOR is not set +# BR2_PACKAGE_CHECKPOLICY is not set +# BR2_PACKAGE_IMA_EVM_UTILS is not set +# BR2_PACKAGE_OPTEE_BENCHMARK is not set +# BR2_PACKAGE_OPTEE_CLIENT is not set +# BR2_PACKAGE_PAXTEST is not set +# BR2_PACKAGE_REFPOLICY is not set +# BR2_PACKAGE_RESTORECOND is not set +# BR2_PACKAGE_SELINUX_PYTHON is not set +# BR2_PACKAGE_SEMODULE_UTILS is not set + +# +# setools needs python3 +# +BR2_PACKAGE_URANDOM_SCRIPTS=y + +# +# Shell and utilities +# + +# +# Shells +# +BR2_PACKAGE_BASH=y +BR2_PACKAGE_DASH=y +# BR2_PACKAGE_MKSH is not set +BR2_PACKAGE_ZSH=y + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_BASH_COMPLETION is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_EASY_RSA is not set +BR2_PACKAGE_FILE=y +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_NEOFETCH is not set +# BR2_PACKAGE_PDMENU is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_QPRINT is not set +# BR2_PACKAGE_RANGER is not set +# BR2_PACKAGE_RTTY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SCREENFETCH is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TIME is not set +# BR2_PACKAGE_TINI is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_TTYD is not set +# BR2_PACKAGE_WHICH is not set +# BR2_PACKAGE_XMLSTARLET is not set +# BR2_PACKAGE_XXHASH is not set +# BR2_PACKAGE_YTREE is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ANDROID_TOOLS is not set +# BR2_PACKAGE_ATOP is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_BUBBLEWRAP is not set +# BR2_PACKAGE_CGROUPFS_MOUNT is not set + +# +# circus needs Python 3 and a toolchain w/ C++, threads +# +# BR2_PACKAGE_COREUTILS is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_DAEMON is not set +# BR2_PACKAGE_DC3DD is not set +# BR2_PACKAGE_DCRON is not set +# BR2_PACKAGE_DDRESCUE is not set +BR2_PACKAGE_DEBIANUTILS=y +# BR2_PACKAGE_DOCKER_COMPOSE is not set +# BR2_PACKAGE_EARLYOOM is not set +# BR2_PACKAGE_EFIBOOTMGR is not set +BR2_PACKAGE_EFIVAR_ARCH_SUPPORTS=y +# BR2_PACKAGE_EFIVAR is not set + +# +# emlog needs a Linux kernel to be built +# +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_GETENT is not set +# BR2_PACKAGE_GKRELLM is not set +BR2_PACKAGE_HTOP=y +# BR2_PACKAGE_IBM_SW_TPM2 is not set +BR2_PACKAGE_INITSCRIPTS=y + +# +# iotop depends on python or python3 +# +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_IRQBALANCE is not set +# BR2_PACKAGE_KEYUTILS is not set +BR2_PACKAGE_KMOD=y +BR2_PACKAGE_KMOD_TOOLS=y +# BR2_PACKAGE_LIBOSTREE is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MFOC is not set +# BR2_PACKAGE_MONIT is not set +# BR2_PACKAGE_MULTIPATH_TOOLS is not set +# BR2_PACKAGE_NCDU is not set + +# +# netifrc needs openrc as init system +# +BR2_PACKAGE_NUMACTL=y +# BR2_PACKAGE_NUT is not set + +# +# pamtester depends on linux-pam +# +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PROCPS_NG is not set +# BR2_PACKAGE_PROCRANK_LINUX is not set +# BR2_PACKAGE_PSMISC is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_QUOTATOOL is not set +# BR2_PACKAGE_RAUC is not set +# BR2_PACKAGE_RSYSLOG is not set +# BR2_PACKAGE_S6 is not set +# BR2_PACKAGE_S6_LINUX_INIT is not set +# BR2_PACKAGE_S6_LINUX_UTILS is not set +# BR2_PACKAGE_S6_PORTABLE_UTILS is not set +# BR2_PACKAGE_S6_RC is not set +# BR2_PACKAGE_SCRUB is not set +# BR2_PACKAGE_SCRYPT is not set + +# +# sdbusplus needs systemd and a toolchain w/ C++, gcc >= 7 +# +# BR2_PACKAGE_SMACK is not set +# BR2_PACKAGE_START_STOP_DAEMON is not set + +# +# supervisor needs a python interpreter +# +# BR2_PACKAGE_SWUPDATE is not set +# BR2_PACKAGE_SYSKLOGD is not set +# BR2_PACKAGE_SYSLOG_NG is not set +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +BR2_PACKAGE_SYSTEMD_BOOTCHART_ARCH_SUPPORTS=y +# BR2_PACKAGE_TAR is not set +# BR2_PACKAGE_TPM_TOOLS is not set +# BR2_PACKAGE_TPM2_ABRMD is not set +# BR2_PACKAGE_TPM2_TOOLS is not set +# BR2_PACKAGE_TPM2_TOTP is not set +# BR2_PACKAGE_UNSCD is not set +BR2_PACKAGE_UTIL_LINUX=y +BR2_PACKAGE_UTIL_LINUX_LIBS=y +BR2_PACKAGE_UTIL_LINUX_LIBBLKID=y +BR2_PACKAGE_UTIL_LINUX_LIBFDISK=y +BR2_PACKAGE_UTIL_LINUX_LIBMOUNT=y +BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS=y +BR2_PACKAGE_UTIL_LINUX_LIBUUID=y +BR2_PACKAGE_UTIL_LINUX_BINARIES=y +BR2_PACKAGE_UTIL_LINUX_AGETTY=y +# BR2_PACKAGE_UTIL_LINUX_BFS is not set +# BR2_PACKAGE_UTIL_LINUX_CAL is not set +# BR2_PACKAGE_UTIL_LINUX_CHFN_CHSH is not set +# BR2_PACKAGE_UTIL_LINUX_CHMEM is not set +# BR2_PACKAGE_UTIL_LINUX_CRAMFS is not set +# BR2_PACKAGE_UTIL_LINUX_EJECT is not set +# BR2_PACKAGE_UTIL_LINUX_FALLOCATE is not set +# BR2_PACKAGE_UTIL_LINUX_FDFORMAT is not set +BR2_PACKAGE_UTIL_LINUX_FSCK=y +# BR2_PACKAGE_UTIL_LINUX_HARDLINK is not set +# BR2_PACKAGE_UTIL_LINUX_HWCLOCK is not set +# BR2_PACKAGE_UTIL_LINUX_IPCRM is not set +# BR2_PACKAGE_UTIL_LINUX_IPCS is not set +# BR2_PACKAGE_UTIL_LINUX_KILL is not set +# BR2_PACKAGE_UTIL_LINUX_LAST is not set +# BR2_PACKAGE_UTIL_LINUX_LINE is not set +# BR2_PACKAGE_UTIL_LINUX_LOGGER is not set +# BR2_PACKAGE_UTIL_LINUX_LOGIN is not set +# BR2_PACKAGE_UTIL_LINUX_LOSETUP is not set +# BR2_PACKAGE_UTIL_LINUX_LSLOGINS is not set +# BR2_PACKAGE_UTIL_LINUX_LSMEM is not set +# BR2_PACKAGE_UTIL_LINUX_MESG is not set +# BR2_PACKAGE_UTIL_LINUX_MINIX is not set +# BR2_PACKAGE_UTIL_LINUX_MORE is not set +BR2_PACKAGE_UTIL_LINUX_MOUNT=y +# BR2_PACKAGE_UTIL_LINUX_MOUNTPOINT is not set +# BR2_PACKAGE_UTIL_LINUX_NEWGRP is not set +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y +# BR2_PACKAGE_UTIL_LINUX_NSENTER is not set +# BR2_PACKAGE_UTIL_LINUX_PG is not set +# BR2_PACKAGE_UTIL_LINUX_PARTX is not set +# BR2_PACKAGE_UTIL_LINUX_PIVOT_ROOT is not set +# BR2_PACKAGE_UTIL_LINUX_RAW is not set +# BR2_PACKAGE_UTIL_LINUX_RENAME is not set +# BR2_PACKAGE_UTIL_LINUX_RFKILL is not set +# BR2_PACKAGE_UTIL_LINUX_RUNUSER is not set +# BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS is not set +# BR2_PACKAGE_UTIL_LINUX_SETPRIV is not set +# BR2_PACKAGE_UTIL_LINUX_SETTERM is not set +# BR2_PACKAGE_UTIL_LINUX_SU is not set +# BR2_PACKAGE_UTIL_LINUX_SULOGIN is not set +# BR2_PACKAGE_UTIL_LINUX_SWITCH_ROOT is not set +# BR2_PACKAGE_UTIL_LINUX_TUNELP is not set +# BR2_PACKAGE_UTIL_LINUX_UL is not set +# BR2_PACKAGE_UTIL_LINUX_UNSHARE is not set +# BR2_PACKAGE_UTIL_LINUX_UTMPDUMP is not set +# BR2_PACKAGE_UTIL_LINUX_UUIDD is not set +# BR2_PACKAGE_UTIL_LINUX_VIPW is not set +# BR2_PACKAGE_UTIL_LINUX_WALL is not set +# BR2_PACKAGE_UTIL_LINUX_WIPEFS is not set +# BR2_PACKAGE_UTIL_LINUX_WDCTL is not set +# BR2_PACKAGE_UTIL_LINUX_WRITE is not set +# BR2_PACKAGE_UTIL_LINUX_ZRAMCTL is not set +# BR2_PACKAGE_WATCHDOG is not set +# BR2_PACKAGE_XDG_DBUS_PROXY is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_LESS is not set +# BR2_PACKAGE_MC is not set +# BR2_PACKAGE_MG is not set +# BR2_PACKAGE_MOST is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set +BR2_PACKAGE_VIM=y +BR2_PACKAGE_VIM_RUNTIME=y + +# +# Loongson board sofeware +# +BR2_PACKAGE_DRIVER_TESTCASE=y + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_AXFS is not set +# BR2_TARGET_ROOTFS_BTRFS is not set +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EROFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set +# BR2_TARGET_ROOTFS_F2FS is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +BR2_TARGET_ROOTFS_TAR=y +# BR2_TARGET_ROOTFS_TAR_NONE is not set +BR2_TARGET_ROOTFS_TAR_GZIP=y +# BR2_TARGET_ROOTFS_TAR_BZIP2 is not set +# BR2_TARGET_ROOTFS_TAR_LZ4 is not set +# BR2_TARGET_ROOTFS_TAR_LZMA is not set +# BR2_TARGET_ROOTFS_TAR_LZO is not set +# BR2_TARGET_ROOTFS_TAR_XZ is not set +BR2_TARGET_ROOTFS_TAR_OPTIONS="" +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_PEBSIZE=0x20000 +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 +BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y +BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE="board/loongson/ubinize.cfg" +BR2_TARGET_ROOTFS_UBI_OPTS="" +BR2_TARGET_ROOTFS_UBIFS=y +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBIFS_MINIOSIZE=0x800 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=1600 +# BR2_TARGET_ROOTFS_UBIFS_RT_NONE is not set +# BR2_TARGET_ROOTFS_UBIFS_RT_ZLIB is not set +BR2_TARGET_ROOTFS_UBIFS_RT_LZO=y +BR2_TARGET_ROOTFS_UBIFS_NONE=y +# BR2_TARGET_ROOTFS_UBIFS_GZIP is not set +# BR2_TARGET_ROOTFS_UBIFS_BZIP2 is not set +# BR2_TARGET_ROOTFS_UBIFS_LZMA is not set +# BR2_TARGET_ROOTFS_UBIFS_LZO is not set +# BR2_TARGET_ROOTFS_UBIFS_XZ is not set +BR2_TARGET_ROOTFS_UBIFS_OPTS="" +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_ABOOTIMG is not set +# BR2_PACKAGE_HOST_AESPIPE is not set +# BR2_PACKAGE_HOST_ANDROID_TOOLS is not set +# BR2_PACKAGE_HOST_ASN1C is not set +# BR2_PACKAGE_HOST_BABELTRACE2 is not set +# BR2_PACKAGE_HOST_BTRFS_PROGS is not set +# BR2_PACKAGE_HOST_CHECKPOLICY is not set +# BR2_PACKAGE_HOST_CHECKSEC is not set +BR2_PACKAGE_HOST_CMAKE=y +# BR2_PACKAGE_HOST_CRAMFS is not set +# BR2_PACKAGE_HOST_CRYPTSETUP is not set +# BR2_PACKAGE_HOST_DBUS_PYTHON is not set +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +BR2_PACKAGE_HOST_DOSFSTOOLS=y +# BR2_PACKAGE_HOST_DOXYGEN is not set +# BR2_PACKAGE_HOST_DTC is not set +BR2_PACKAGE_HOST_E2FSPROGS=y +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_ENVIRONMENT_SETUP is not set +# BR2_PACKAGE_HOST_EROFS_UTILS is not set +BR2_PACKAGE_HOST_EUDEV=y +# BR2_PACKAGE_HOST_EXFATPROGS is not set +# BR2_PACKAGE_HOST_F2FS_TOOLS is not set +# BR2_PACKAGE_HOST_FAKETIME is not set +# BR2_PACKAGE_HOST_FATCAT is not set +# BR2_PACKAGE_HOST_FWUP is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +BR2_PACKAGE_HOST_GENIMAGE=y +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_GNUPG is not set +BR2_PACKAGE_HOST_GO_HOST_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_GO_BOOTSTRAP_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y +# BR2_PACKAGE_HOST_GPTFDISK is not set +# BR2_PACKAGE_HOST_IMAGEMAGICK is not set +# BR2_PACKAGE_HOST_IMX_MKIMAGE is not set +# BR2_PACKAGE_HOST_JQ is not set +# BR2_PACKAGE_HOST_JSMIN is not set +# BR2_PACKAGE_HOST_KMOD is not set +# BR2_PACKAGE_HOST_LIBP11 is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_LTTNG_BABELTRACE is not set +# BR2_PACKAGE_HOST_MENDER_ARTIFACT is not set +# BR2_PACKAGE_HOST_MESON_TOOLS is not set +BR2_PACKAGE_HOST_MKPASSWD=y +# BR2_PACKAGE_HOST_MTD is not set +BR2_PACKAGE_HOST_MTOOLS=y +# BR2_PACKAGE_HOST_ODB is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_OPKG_UTILS is not set +# BR2_PACKAGE_HOST_PARTED is not set +BR2_PACKAGE_HOST_PATCHELF=y +# BR2_PACKAGE_HOST_PIGZ is not set +# BR2_PACKAGE_HOST_PKGCONF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_PYTHON is not set +# BR2_PACKAGE_HOST_PYTHON_CYTHON is not set +# BR2_PACKAGE_HOST_PYTHON_LXML is not set +# BR2_PACKAGE_HOST_PYTHON_SIX is not set +# BR2_PACKAGE_HOST_PYTHON_XLRD is not set +# BR2_PACKAGE_HOST_PYTHON3 is not set +BR2_PACKAGE_HOST_QEMU_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_QEMU_USER_ARCH_SUPPORTS=y +# BR2_PACKAGE_HOST_QEMU is not set +# BR2_PACKAGE_HOST_QORIQ_RCW is not set +# BR2_PACKAGE_HOST_RAUC is not set +BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_RUSTC_ARCH="mipsel" +# BR2_PACKAGE_HOST_RUSTC is not set +BR2_PACKAGE_PROVIDES_HOST_RUSTC="host-rust-bin" +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SDBUSPLUS is not set +# BR2_PACKAGE_HOST_SENTRY_CLI is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_SWIG is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +BR2_PACKAGE_HOST_UTIL_LINUX=y +# BR2_PACKAGE_HOST_UTP_COM is not set +# BR2_PACKAGE_HOST_VBOOT_UTILS is not set +# BR2_PACKAGE_HOST_XORRISO is not set +# BR2_PACKAGE_HOST_ZIP is not set +# BR2_PACKAGE_HOST_ZSTD is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2021.02 +# +# BR2_PACKAGE_SCONESERVER_HTTP_SCONESITE_IMAGE is not set +# BR2_PACKAGE_XSERVER_XORG_SERVER_KDRIVE_EVDEV is not set +# BR2_PACKAGE_XSERVER_XORG_SERVER_KDRIVE_KBD is not set +# BR2_PACKAGE_XSERVER_XORG_SERVER_KDRIVE_MOUSE is not set +# BR2_PACKAGE_MPD_AUDIOFILE is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_BINUTILS_VERSION_2_33_X is not set +# BR2_PACKAGE_LIBUPNP18 is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IMX_SDMA is not set +# BR2_GDB_VERSION_8_2 is not set +# BR2_PACKAGE_HOST_RCW is not set +# BR2_KERNEL_HEADERS_5_9 is not set +# BR2_KERNEL_HEADERS_5_8 is not set +# BR2_powerpc_601 is not set +# BR2_PACKAGE_TI_SGX_LIBGBM is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set + +# +# Legacy options removed in 2020.11 +# +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_LIBCROCO is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_SYSTEMD_JOURNAL_GATEWAY is not set +# BR2_TARGET_UBOOT_BOOT_SCRIPT is not set +# BR2_TARGET_UBOOT_ENVIMAGE is not set +# BR2_PACKAGE_KISMET_CLIENT is not set +# BR2_PACKAGE_KISMET_DRONE is not set +# BR2_GCC_VERSION_7_X is not set +# BR2_PACKAGE_GST1_VALIDATE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_YADIF is not set +# BR2_PACKAGE_GQVIEW is not set +# BR2_PACKAGE_WESTON_IMX is not set +# BR2_KERNEL_HEADERS_5_7 is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_XSERVER_XORG_SERVER_AIGLX is not set +# BR2_PACKAGE_AMD_CATALYST is not set +# BR2_PACKAGE_NVIDIA_TEGRA23 is not set +# BR2_GDB_VERSION_8_1 is not set + +# +# Legacy options removed in 2020.08 +# +# BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_AMD64 is not set +# BR2_KERNEL_HEADERS_5_6 is not set +# BR2_KERNEL_HEADERS_5_5 is not set +# BR2_BINUTILS_VERSION_2_31_X is not set +# BR2_PACKAGE_KODI_PERIPHERAL_STEAMCONTROLLER is not set + +# +# Legacy options removed in 2020.05 +# +# BR2_PACKAGE_WIRINGPI is not set +# BR2_PACKAGE_PYTHON_PYCRYPTO is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_COLLECTD_LVM is not set +# BR2_PACKAGE_PYTHON_PYASN is not set +# BR2_PACKAGE_PYTHON_PYASN_MODULES is not set +# BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_10K_QCA6174 is not set +# BR2_PACKAGE_QT5CANVAS3D is not set +# BR2_PACKAGE_KODI_LIBTHEORA is not set +# BR2_PACKAGE_CEGUI06 is not set +# BR2_GCC_VERSION_5_X is not set + +# +# Legacy options removed in 2020.02 +# +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_CLASSPATH is not set +# BR2_PACKAGE_QT5_VERSION_5_6 is not set +# BR2_PACKAGE_CURL is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_GSTREAMER_PLUGINS is not set +# BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_NV_SAMPLE_APPS is not set +# BR2_PACKAGE_FREERDP_GSTREAMER is not set +# BR2_PACKAGE_OPENCV3_WITH_GSTREAMER is not set +# BR2_PACKAGE_OPENCV_WITH_GSTREAMER is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_GCC_VERSION_OR1K is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_FIS is not set +BR2_PACKAGE_REFPOLICY_POLICY_VERSION="" +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_WIREGUARD is not set +# BR2_PACKAGE_PERL_NET_PING is not set +# BR2_PACKAGE_PERL_MIME_BASE64 is not set +# BR2_PACKAGE_PERL_DIGEST_MD5 is not set +# BR2_PACKAGE_ERLANG_P1_ICONV is not set +# BR2_KERNEL_HEADERS_5_3 is not set +# BR2_PACKAGE_PYTHON_SCAPY3K is not set +# BR2_BINUTILS_VERSION_2_30_X is not set +# BR2_PACKAGE_RPI_USERLAND_START_VCFILED is not set + +# +# Legacy options removed in 2019.11 +# +# BR2_PACKAGE_OPENVMTOOLS_PROCPS is not set +# BR2_PACKAGE_ALLJOYN is not set +# BR2_PACKAGE_ALLJOYN_BASE is not set +# BR2_PACKAGE_ALLJOYN_BASE_CONTROLPANEL is not set +# BR2_PACKAGE_ALLJOYN_BASE_NOTIFICATION is not set +# BR2_PACKAGE_ALLJOYN_BASE_ONBOARDING is not set +# BR2_PACKAGE_ALLJOYN_TCL_BASE is not set +# BR2_PACKAGE_ALLJOYN_TCL is not set +BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS="" +# BR2_PACKAGE_PYTHON_PYSNMP_APPS is not set +# BR2_KERNEL_HEADERS_5_2 is not set +# BR2_TARGET_RISCV_PK is not set +# BR2_PACKAGE_SQLITE_STAT3 is not set +# BR2_KERNEL_HEADERS_5_1 is not set +# BR2_PACKAGE_DEVMEM2 is not set +# BR2_PACKAGE_USTR is not set +# BR2_PACKAGE_KODI_SCREENSAVER_PLANESTATE is not set +# BR2_PACKAGE_KODI_VISUALISATION_WAVEFORHUE is not set +# BR2_PACKAGE_KODI_AUDIODECODER_OPUS is not set +# BR2_PACKAGE_MESA3D_OSMESA is not set +# BR2_PACKAGE_HOSTAPD_DRIVER_RTW is not set +# BR2_PACKAGE_WPA_SUPPLICANT_DBUS_NEW is not set +# BR2_PACKAGE_WPA_SUPPLICANT_DBUS_OLD is not set + +# +# Legacy options removed in 2019.08 +# +# BR2_TARGET_TS4800_MBRBOOT is not set +# BR2_PACKAGE_LIBAMCODEC is not set +# BR2_PACKAGE_ODROID_SCRIPTS is not set +# BR2_PACKAGE_ODROID_MALI is not set +# BR2_PACKAGE_KODI_PLATFORM_AML is not set +# BR2_GCC_VERSION_6_X is not set +# BR2_GCC_VERSION_4_9_X is not set +# BR2_GDB_VERSION_7_12 is not set +# BR2_PACKAGE_XAPP_MKFONTDIR is not set +# BR2_GDB_VERSION_8_0 is not set +# BR2_KERNEL_HEADERS_4_20 is not set +# BR2_KERNEL_HEADERS_5_0 is not set + +# +# Legacy options removed in 2019.05 +# +# BR2_CSKY_DSP is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_COMPOSITOR is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_IQA is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_OPENCV is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_STEREO is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VCD is not set +# BR2_PACKAGE_LUNIT is not set +# BR2_PACKAGE_FFMPEG_FFSERVER is not set +# BR2_PACKAGE_LIBUMP is not set +# BR2_PACKAGE_SUNXI_MALI is not set +# BR2_BINUTILS_VERSION_2_29_X is not set +# BR2_BINUTILS_VERSION_2_28_X is not set +# BR2_PACKAGE_GST_PLUGINS_BAD_PLUGIN_APEXSINK is not set + +# +# Legacy options removed in 2019.02 +# +# BR2_PACKAGE_QT is not set +# BR2_PACKAGE_QTUIO is not set +# BR2_PACKAGE_PINENTRY_QT4 is not set +# BR2_PACKAGE_POPPLER_QT is not set +# BR2_PACKAGE_OPENCV3_WITH_QT is not set +# BR2_PACKAGE_OPENCV_WITH_QT is not set +# BR2_PACKAGE_AMD_CATALYST_CCCLE is not set +# BR2_PACKAGE_SDL_QTOPIA is not set +# BR2_PACKAGE_PYTHON_PYQT is not set +# BR2_PACKAGE_LUACRYPTO is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_BOOST_SIGNALS is not set +# BR2_PACKAGE_FFTW_PRECISION_SINGLE is not set +# BR2_PACKAGE_FFTW_PRECISION_DOUBLE is not set +# BR2_PACKAGE_FFTW_PRECISION_LONG_DOUBLE is not set +# BR2_PACKAGE_LUA_5_2 is not set +# BR2_TARGET_GENERIC_PASSWD_MD5 is not set + +# +# Legacy options removed in 2018.11 +# +# BR2_TARGET_XLOADER is not set +# BR2_PACKAGE_TIDSP_BINARIES is not set +# BR2_PACKAGE_DSP_TOOLS is not set +# BR2_PACKAGE_GST_DSP is not set +# BR2_PACKAGE_BOOTUTILS is not set +# BR2_PACKAGE_EXPEDITE is not set +# BR2_PACKAGE_MESA3D_OPENGL_TEXTURE_FLOAT is not set +# BR2_KERNEL_HEADERS_4_10 is not set +# BR2_KERNEL_HEADERS_4_11 is not set +# BR2_KERNEL_HEADERS_4_12 is not set +# BR2_KERNEL_HEADERS_4_13 is not set +# BR2_KERNEL_HEADERS_4_15 is not set +# BR2_KERNEL_HEADERS_4_17 is not set +# BR2_PACKAGE_LIBNFTNL_XML is not set +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_4_1 is not set +# BR2_KERNEL_HEADERS_4_16 is not set +# BR2_KERNEL_HEADERS_4_18 is not set + +# +# Legacy options removed in 2018.08 +# +# BR2_PACKAGE_DOCKER_ENGINE_STATIC_CLIENT is not set +# BR2_PACKAGE_XPROTO_APPLEWMPROTO is not set +# BR2_PACKAGE_XPROTO_BIGREQSPROTO is not set +# BR2_PACKAGE_XPROTO_COMPOSITEPROTO is not set +# BR2_PACKAGE_XPROTO_DAMAGEPROTO is not set +# BR2_PACKAGE_XPROTO_DMXPROTO is not set +# BR2_PACKAGE_XPROTO_DRI2PROTO is not set +# BR2_PACKAGE_XPROTO_DRI3PROTO is not set +# BR2_PACKAGE_XPROTO_FIXESPROTO is not set +# BR2_PACKAGE_XPROTO_FONTCACHEPROTO is not set +# BR2_PACKAGE_XPROTO_FONTSPROTO is not set +# BR2_PACKAGE_XPROTO_GLPROTO is not set +# BR2_PACKAGE_XPROTO_INPUTPROTO is not set +# BR2_PACKAGE_XPROTO_KBPROTO is not set +# BR2_PACKAGE_XPROTO_PRESENTPROTO is not set +# BR2_PACKAGE_XPROTO_RANDRPROTO is not set +# BR2_PACKAGE_XPROTO_RECORDPROTO is not set +# BR2_PACKAGE_XPROTO_RENDERPROTO is not set +# BR2_PACKAGE_XPROTO_RESOURCEPROTO is not set +# BR2_PACKAGE_XPROTO_SCRNSAVERPROTO is not set +# BR2_PACKAGE_XPROTO_VIDEOPROTO is not set +# BR2_PACKAGE_XPROTO_WINDOWSWMPROTO is not set +# BR2_PACKAGE_XPROTO_XCMISCPROTO is not set +# BR2_PACKAGE_XPROTO_XEXTPROTO is not set +# BR2_PACKAGE_XPROTO_XF86BIGFONTPROTO is not set +# BR2_PACKAGE_XPROTO_XF86DGAPROTO is not set +# BR2_PACKAGE_XPROTO_XF86DRIPROTO is not set +# BR2_PACKAGE_XPROTO_XF86VIDMODEPROTO is not set +# BR2_PACKAGE_XPROTO_XINERAMAPROTO is not set +# BR2_PACKAGE_XPROTO_XPROTO is not set +# BR2_PACKAGE_XPROTO_XPROXYMANAGEMENTPROTOCOL is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_OPENGL is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_GLES2 is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_GLX is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_EGL is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_X11 is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_WAYLAND is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_DISPMANX is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_AUDIOMIXER is not set +# BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_LAME is not set +# BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_MPG123 is not set +# BR2_GDB_VERSION_7_11 is not set +# BR2_GDB_VERSION_7_10 is not set + +# +# Legacy options removed in 2018.05 +# +# BR2_PACKAGE_MEDIAART_BACKEND_NONE is not set +# BR2_PACKAGE_MEDIAART_BACKEND_GDK_PIXBUF is not set +# BR2_PACKAGE_TI_SGX_AM335X is not set +# BR2_PACKAGE_TI_SGX_AM437X is not set +# BR2_PACKAGE_TI_SGX_AM4430 is not set +# BR2_PACKAGE_TI_SGX_AM5430 is not set +# BR2_PACKAGE_JANUS_AUDIO_BRIDGE is not set +# BR2_PACKAGE_JANUS_ECHO_TEST is not set +# BR2_PACKAGE_JANUS_RECORDPLAY is not set +# BR2_PACKAGE_JANUS_SIP_GATEWAY is not set +# BR2_PACKAGE_JANUS_STREAMING is not set +# BR2_PACKAGE_JANUS_TEXT_ROOM is not set +# BR2_PACKAGE_JANUS_VIDEO_CALL is not set +# BR2_PACKAGE_JANUS_VIDEO_ROOM is not set +# BR2_PACKAGE_JANUS_MQTT is not set +# BR2_PACKAGE_JANUS_RABBITMQ is not set +# BR2_PACKAGE_JANUS_REST is not set +# BR2_PACKAGE_JANUS_UNIX_SOCKETS is not set +# BR2_PACKAGE_JANUS_WEBSOCKETS is not set +# BR2_PACKAGE_IPSEC_SECCTX_DISABLE is not set +# BR2_PACKAGE_IPSEC_SECCTX_ENABLE is not set +# BR2_PACKAGE_IPSEC_SECCTX_KERNEL is not set +# BR2_PACKAGE_LIBTFDI_CPP is not set +# BR2_PACKAGE_JQUERY_UI_THEME_BLACK_TIE is not set +# BR2_PACKAGE_JQUERY_UI_THEME_BLITZER is not set +# BR2_PACKAGE_JQUERY_UI_THEME_CUPERTINO is not set +# BR2_PACKAGE_JQUERY_UI_THEME_DARK_HIVE is not set +# BR2_PACKAGE_JQUERY_UI_THEME_DOT_LUV is not set +# BR2_PACKAGE_JQUERY_UI_THEME_EGGPLANT is not set +# BR2_PACKAGE_JQUERY_UI_THEME_EXCITE_BIKE is not set +# BR2_PACKAGE_JQUERY_UI_THEME_FLICK is not set +# BR2_PACKAGE_JQUERY_UI_THEME_HOT_SNEAKS is not set +# BR2_PACKAGE_JQUERY_UI_THEME_HUMANITY is not set +# BR2_PACKAGE_JQUERY_UI_THEME_LE_FROG is not set +# BR2_PACKAGE_JQUERY_UI_THEME_MINT_CHOC is not set +# BR2_PACKAGE_JQUERY_UI_THEME_OVERCAST is not set +# BR2_PACKAGE_JQUERY_UI_THEME_PEPPER_GRINDER is not set +# BR2_PACKAGE_JQUERY_UI_THEME_REDMOND is not set +# BR2_PACKAGE_JQUERY_UI_THEME_SMOOTHNESS is not set +# BR2_PACKAGE_JQUERY_UI_THEME_SOUTH_STREET is not set +# BR2_PACKAGE_JQUERY_UI_THEME_START is not set +# BR2_PACKAGE_JQUERY_UI_THEME_SUNNY is not set +# BR2_PACKAGE_JQUERY_UI_THEME_SWANKY_PURSE is not set +# BR2_PACKAGE_JQUERY_UI_THEME_TRONTASTIC is not set +# BR2_PACKAGE_JQUERY_UI_THEME_UI_DARKNESS is not set +# BR2_PACKAGE_JQUERY_UI_THEME_UI_LIGHTNESS is not set +# BR2_PACKAGE_JQUERY_UI_THEME_VADER is not set +# BR2_PACKAGE_BLUEZ5_PLUGINS_HEALTH is not set +# BR2_PACKAGE_BLUEZ5_PLUGINS_MIDI is not set +# BR2_PACKAGE_BLUEZ5_PLUGINS_NFC is not set +# BR2_PACKAGE_BLUEZ5_PLUGINS_SAP is not set +# BR2_PACKAGE_BLUEZ5_PLUGINS_SIXAXIS is not set +# BR2_PACKAGE_TRANSMISSION_REMOTE is not set +# BR2_PACKAGE_LIBKCAPI_APPS is not set +# BR2_PACKAGE_MPLAYER is not set +# BR2_PACKAGE_MPLAYER_MPLAYER is not set +# BR2_PACKAGE_MPLAYER_MENCODER is not set +# BR2_PACKAGE_LIBPLAYER_MPLAYER is not set +# BR2_PACKAGE_IQVLINUX is not set +# BR2_BINFMT_FLAT_SEP_DATA is not set +# BR2_bfin is not set +# BR2_PACKAGE_KODI_ADSP_BASIC is not set +# BR2_PACKAGE_KODI_ADSP_FREESURROUND is not set + +# +# Legacy options removed in 2018.02 +# +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_BINUTILS_VERSION_2_27_X is not set +# BR2_PACKAGE_EEPROG is not set +# BR2_PACKAGE_GNUPG2_GPGV2 is not set +# BR2_PACKAGE_IMX_GPU_VIV_APITRACE is not set +# BR2_PACKAGE_IMX_GPU_VIV_G2D is not set + +# +# Legacy options removed in 2017.11 +# +# BR2_PACKAGE_RFKILL is not set +# BR2_PACKAGE_UTIL_LINUX_RESET is not set +# BR2_PACKAGE_POLICYCOREUTILS_AUDIT2ALLOW is not set +# BR2_PACKAGE_POLICYCOREUTILS_RESTORECOND is not set +# BR2_PACKAGE_SEPOLGEN is not set +# BR2_PACKAGE_OPENOBEX_BLUEZ is not set +# BR2_PACKAGE_OPENOBEX_LIBUSB is not set +# BR2_PACKAGE_OPENOBEX_APPS is not set +# BR2_PACKAGE_OPENOBEX_SYSLOG is not set +# BR2_PACKAGE_OPENOBEX_DUMP is not set +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_UTIL_LINUX_LOGIN_UTILS is not set + +# +# Legacy options removed in 2017.08 +# +# BR2_TARGET_GRUB is not set +# BR2_PACKAGE_SIMICSFS is not set +# BR2_BINUTILS_VERSION_2_26_X is not set +BR2_XTENSA_OVERLAY_DIR="" +BR2_XTENSA_CUSTOM_NAME="" +# BR2_PACKAGE_HOST_MKE2IMG is not set +BR2_TARGET_ROOTFS_EXT2_BLOCKS=0 +BR2_TARGET_ROOTFS_EXT2_EXTRA_INODES=0 +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_CDXAPARSE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DATAURISRC is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DCCP is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_HDVPARSE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MVE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_NUVDEMUX is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_PATCHDETECT is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SDI is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_TTA is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VIDEOMEASURE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_APEXSINK is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SDL is not set +# BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_MAD is not set +# BR2_STRIP_none is not set +# BR2_PACKAGE_BEECRYPT_CPP is not set +# BR2_PACKAGE_SPICE_CLIENT is not set +# BR2_PACKAGE_SPICE_GUI is not set +# BR2_PACKAGE_SPICE_TUNNEL is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_INPUT_TOOLS_INPUTATTACH is not set +# BR2_PACKAGE_INPUT_TOOLS_JSCAL is not set +# BR2_PACKAGE_INPUT_TOOLS_JSTEST is not set +# BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH is not set +# BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_X86 is not set +# BR2_GCC_VERSION_4_8_X is not set + +# +# Legacy options removed in 2017.05 +# +# BR2_PACKAGE_SUNXI_MALI_R2P4 is not set +# BR2_PACKAGE_NODEJS_MODULES_COFFEESCRIPT is not set +# BR2_PACKAGE_NODEJS_MODULES_EXPRESS is not set +# BR2_PACKAGE_BLUEZ5_UTILS_GATTTOOL is not set +# BR2_PACKAGE_OPENOCD_FT2XXX is not set +# BR2_PACKAGE_KODI_RTMPDUMP is not set +# BR2_PACKAGE_KODI_VISUALISATION_FOUNTAIN is not set +# BR2_PACKAGE_PORTMAP is not set +# BR2_BINUTILS_VERSION_2_25_X is not set +# BR2_TOOLCHAIN_BUILDROOT_INET_RPC is not set +BR2_TARGET_ROOTFS_EXT2_EXTRA_BLOCKS=0 +# BR2_PACKAGE_SYSTEMD_KDBUS is not set +# BR2_PACKAGE_POLARSSL is not set +# BR2_NBD_CLIENT is not set +# BR2_NBD_SERVER is not set +# BR2_PACKAGE_GMOCK is not set +# BR2_KERNEL_HEADERS_4_8 is not set +# BR2_KERNEL_HEADERS_3_18 is not set +# BR2_GLIBC_VERSION_2_22 is not set + +# +# Legacy options removed in 2017.02 +# +# BR2_PACKAGE_PERL_DB_FILE is not set +# BR2_KERNEL_HEADERS_4_7 is not set +# BR2_KERNEL_HEADERS_4_6 is not set +# BR2_KERNEL_HEADERS_4_5 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +# BR2_TOOLCHAIN_EXTERNAL_MUSL_CROSS is not set +# BR2_UCLIBC_INSTALL_TEST_SUITE is not set +# BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_TOOLCHAIN_EXTERNAL_ARAGO_ARMV7A is not set +# BR2_TOOLCHAIN_EXTERNAL_ARAGO_ARMV5TE is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_GDB_VERSION_7_9 is not set + +# +# Legacy options removed in 2016.11 +# +# BR2_PACKAGE_PHP_SAPI_CLI_CGI is not set +# BR2_PACKAGE_PHP_SAPI_CLI_FPM is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_WEBKITGTK24 is not set +# BR2_PACKAGE_TORSMO is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_KERNEL_HEADERS_4_3 is not set +# BR2_KERNEL_HEADERS_4_2 is not set +# BR2_PACKAGE_KODI_ADDON_XVDR is not set +# BR2_PACKAGE_IPKG is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_BINUTILS_VERSION_2_24_X is not set +# BR2_PACKAGE_WESTON_RPI is not set +# BR2_GCC_VERSION_4_8_ARC is not set +# BR2_KERNEL_HEADERS_4_0 is not set +# BR2_KERNEL_HEADERS_3_19 is not set +# BR2_PACKAGE_LIBEVAS_GENERIC_LOADERS is not set +# BR2_PACKAGE_ELEMENTARY is not set +# BR2_LINUX_KERNEL_CUSTOM_LOCAL is not set + +# +# Legacy options removed in 2016.08 +# +# BR2_PACKAGE_EFL_JP2K is not set +# BR2_PACKAGE_SYSTEMD_COMPAT is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_LIVEADDER is not set +# BR2_PACKAGE_LIBFSLVPUWRAP is not set +# BR2_PACKAGE_LIBFSLPARSER is not set +# BR2_PACKAGE_LIBFSLCODEC is not set +# BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE_FIT_SIGNATURE_SUPPORT is not set +# BR2_PTHREADS_OLD is not set +# BR2_BINUTILS_VERSION_2_23_X is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_GDB_VERSION_7_8 is not set + +# +# Legacy options removed in 2016.05 +# +# BR2_PACKAGE_OPENVPN_CRYPTO_POLARSSL is not set +# BR2_PACKAGE_NGINX_HTTP_SPDY_MODULE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_RTP is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MPG123 is not set +# BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC is not set +# BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC_E500V2 is not set +# BR2_x86_i386 is not set +# BR2_PACKAGE_QT5QUICK1 is not set +BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR="" +# BR2_PACKAGE_XDRIVER_XF86_INPUT_VOID is not set +# BR2_KERNEL_HEADERS_3_17 is not set +# BR2_GDB_VERSION_7_7 is not set +# BR2_PACKAGE_FOOMATIC_FILTERS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_KODI_WAVPACK is not set +# BR2_PACKAGE_KODI_RSXS is not set +# BR2_PACKAGE_KODI_GOOM is not set +# BR2_PACKAGE_SYSTEMD_ALL_EXTRAS is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_PACKAGE_SQLITE_READLINE is not set + +# +# Legacy options removed in 2016.02 +# +# BR2_PACKAGE_DOVECOT_BZIP2 is not set +# BR2_PACKAGE_DOVECOT_ZLIB is not set +# BR2_PACKAGE_E2FSPROGS_FINDFS is not set +# BR2_PACKAGE_OPENPOWERLINK_DEBUG_LEVEL is not set +# BR2_PACKAGE_OPENPOWERLINK_KERNEL_MODULE is not set +# BR2_PACKAGE_OPENPOWERLINK_LIBPCAP is not set +# BR2_LINUX_KERNEL_SAME_AS_HEADERS is not set +# BR2_PACKAGE_CUPS_PDFTOPS is not set +# BR2_KERNEL_HEADERS_3_16 is not set +# BR2_PACKAGE_PYTHON_PYXML is not set +# BR2_ENABLE_SSP is not set +# BR2_PACKAGE_DIRECTFB_CLE266 is not set +# BR2_PACKAGE_DIRECTFB_UNICHROME is not set +# BR2_PACKAGE_LIBELEMENTARY is not set +# BR2_PACKAGE_LIBEINA is not set +# BR2_PACKAGE_LIBEET is not set +# BR2_PACKAGE_LIBEVAS is not set +# BR2_PACKAGE_LIBECORE is not set +# BR2_PACKAGE_LIBEDBUS is not set +# BR2_PACKAGE_LIBEFREET is not set +# BR2_PACKAGE_LIBEIO is not set +# BR2_PACKAGE_LIBEMBRYO is not set +# BR2_PACKAGE_LIBEDJE is not set +# BR2_PACKAGE_LIBETHUMB is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_BR2_PACKAGE_NODEJS_0_10_X is not set +# BR2_BR2_PACKAGE_NODEJS_0_12_X is not set +# BR2_BR2_PACKAGE_NODEJS_4_X is not set + +# +# Legacy options removed in 2015.11 +# +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_REAL is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_SCHIFRA is not set +# BR2_PACKAGE_ZXING is not set +# BR2_PACKAGE_BLACKBOX is not set +# BR2_KERNEL_HEADERS_3_0 is not set +# BR2_KERNEL_HEADERS_3_11 is not set +# BR2_KERNEL_HEADERS_3_13 is not set +# BR2_KERNEL_HEADERS_3_15 is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_ANDI is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_BLTLOAD is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_CPULOAD is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_DATABUFFER is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_DIOLOAD is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_DOK is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_DRIVERTEST is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_FIRE is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_FLIP is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_FONTS is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_INPUT is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_JOYSTICK is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_KNUCKLES is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_LAYER is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_MATRIX is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_MATRIX_WATER is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_NEO is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_NETLOAD is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_PALETTE is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_PARTICLE is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_PORTER is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_STRESS is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_TEXTURE is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_VIDEO is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_VIDEO_PARTICLE is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_WINDOW is not set +# BR2_PACKAGE_KOBS_NG is not set +# BR2_PACKAGE_SAWMAN is not set +# BR2_PACKAGE_DIVINE is not set + +# +# Legacy options removed in 2015.08 +# +# BR2_PACKAGE_KODI_PVR_ADDONS is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +# BR2_BINUTILS_VERSION_2_24 is not set +# BR2_BINUTILS_VERSION_2_25 is not set +# BR2_PACKAGE_PERF is not set +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_PACKAGE_GPU_VIV_BIN_MX6Q is not set +# BR2_TARGET_UBOOT_NETWORK is not set diff --git a/configs/ls1b20_mini_busybox_defconfig b/configs/ls1b20_mini_busybox_defconfig new file mode 100644 index 00000000..cdad3730 --- /dev/null +++ b/configs/ls1b20_mini_busybox_defconfig @@ -0,0 +1,3455 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot -gcb7823ad Configuration +# +BR2_HAVE_DOT_CONFIG=y +BR2_HOST_GCC_AT_LEAST_4_9=y +BR2_HOST_GCC_AT_LEAST_5=y +BR2_HOST_GCC_AT_LEAST_6=y +BR2_HOST_GCC_AT_LEAST_7=y + +# +# Target options +# +BR2_SOFT_FLOAT=y +BR2_ARCH_HAS_MMU_MANDATORY=y +# BR2_arcle is not set +# BR2_arceb is not set +# BR2_arm is not set +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_aarch64_be is not set +# BR2_csky is not set +# BR2_i386 is not set +# BR2_m68k is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +BR2_mipsel=y +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_loongarch64 is not set +# BR2_nds32 is not set +# BR2_nios2 is not set +# BR2_or1k is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_riscv is not set +# BR2_s390x is not set +# BR2_sh is not set +# BR2_sparc is not set +# BR2_sparc64 is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH_HAS_TOOLCHAIN_BUILDROOT=y +BR2_ARCH="mipsel" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ARCH="mips32" +BR2_GCC_TARGET_ABI="32" +BR2_GCC_TARGET_NAN="legacy" +BR2_BINFMT_SUPPORTS_SHARED=y +BR2_READELF_ARCH_NAME="MIPS R3000" +BR2_BINFMT_ELF=y +BR2_MIPS_CPU_MIPS32=y +BR2_mips_32=y +# BR2_mips_32r2 is not set +# BR2_mips_32r3 is not set +# BR2_mips_32r5 is not set +# BR2_mips_32r6 is not set +# BR2_mips_interaptiv is not set +# BR2_mips_m5150 is not set +# BR2_mips_m6250 is not set +# BR2_mips_p5600 is not set +# BR2_mips_xburst is not set +BR2_MIPS_SOFT_FLOAT=y +BR2_MIPS_NAN_LEGACY=y +BR2_MIPS_OABI32=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn --non-interactive" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_LZCAT="lzip -d -c" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(CONFIG_DIR)/defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="https://cdn.kernel.org/pub" +BR2_GNU_MIRROR="http://ftpmirror.gnu.org" +BR2_LUAROCKS_MIRROR="http://rocks.moonscript.org" +BR2_CPAN_MIRROR="http://cpan.metacpan.org" +BR2_JLEVEL=0 +# BR2_CCACHE is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y +# BR2_OPTIMIZE_FAST is not set +# BR2_STATIC_LIBS is not set +BR2_SHARED_LIBS=y +# BR2_SHARED_STATIC_LIBS is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Advanced +# +BR2_COMPILER_PARANOID_UNSAFE_PATH=y +# BR2_FORCE_HOST_BUILD is not set +# BR2_REPRODUCIBLE is not set +# BR2_PER_PACKAGE_DIRECTORIES is not set + +# +# Security Hardening Options +# +BR2_PIC_PIE_ARCH_SUPPORTS=y +# BR2_PIC_PIE is not set +BR2_SSP_NONE=y +# BR2_SSP_REGULAR is not set +# BR2_SSP_STRONG is not set +# BR2_SSP_ALL is not set +BR2_RELRO_NONE=y +# BR2_RELRO_PARTIAL is not set +# BR2_RELRO_FULL is not set +BR2_FORTIFY_SOURCE_NONE=y +# BR2_FORTIFY_SOURCE_1 is not set +# BR2_FORTIFY_SOURCE_2 is not set + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_GLIBC=y +# BR2_TOOLCHAIN_BUILDROOT is not set +BR2_TOOLCHAIN_EXTERNAL=y + +# +# Toolchain External Options +# +BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y +# BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD is not set +BR2_TOOLCHAIN_EXTERNAL_PREINSTALLED=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/buildroot-2016.02-glibc-gcc-4.7.x-mips32-nofpu/output/host/usr/" +BR2_TOOLCHAIN_EXTERNAL_GLIBC=y +BR2_PACKAGE_HAS_TOOLCHAIN_EXTERNAL=y +BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL="toolchain-external-custom" +BR2_TOOLCHAIN_EXTERNAL_PREFIX="$(ARCH)-linux" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux" +# BR2_TOOLCHAIN_EXTERNAL_GCC_10 is not set +# BR2_TOOLCHAIN_EXTERNAL_GCC_9 is not set +# BR2_TOOLCHAIN_EXTERNAL_GCC_8 is not set +# BR2_TOOLCHAIN_EXTERNAL_GCC_7 is not set +# BR2_TOOLCHAIN_EXTERNAL_GCC_6 is not set +# BR2_TOOLCHAIN_EXTERNAL_GCC_5 is not set +# BR2_TOOLCHAIN_EXTERNAL_GCC_4_9 is not set +# BR2_TOOLCHAIN_EXTERNAL_GCC_4_8 is not set +BR2_TOOLCHAIN_EXTERNAL_GCC_4_7=y +# BR2_TOOLCHAIN_EXTERNAL_GCC_4_6 is not set +# BR2_TOOLCHAIN_EXTERNAL_GCC_4_5 is not set +# BR2_TOOLCHAIN_EXTERNAL_GCC_4_4 is not set +# BR2_TOOLCHAIN_EXTERNAL_GCC_4_3 is not set +# BR2_TOOLCHAIN_EXTERNAL_GCC_OLD is not set + +# +# GCC older than 4.8 is not tested by Buildroot. Use at your own risk. +# +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_10 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_9 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_8 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_7 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_6 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_5 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_3 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_2 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_1 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_0 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_20 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_18 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_17 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_16 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_15 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_14 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_13 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_12 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_11 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_10 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_9 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_8 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_7 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_6 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_5 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_4 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_3 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_2 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_1 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_0 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_19 is not set +BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_18=y +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_17 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_16 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_15 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_14 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_13 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_12 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_11 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_10 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_9 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_8 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_7 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_6 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_5 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_4 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_3 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_2 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_1 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_0 is not set +# BR2_TOOLCHAIN_EXTERNAL_HEADERS_REALLY_OLD is not set +# BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC is not set +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +# BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL is not set +BR2_TOOLCHAIN_EXTERNAL_HAS_SSP=y +BR2_TOOLCHAIN_EXTERNAL_HAS_SSP_STRONG=y +BR2_TOOLCHAIN_EXTERNAL_INET_RPC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +# BR2_TOOLCHAIN_EXTERNAL_DLANG is not set +# BR2_TOOLCHAIN_EXTERNAL_FORTRAN is not set +# BR2_TOOLCHAIN_EXTERNAL_OPENMP is not set +# BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY is not set +BR2_PACKAGE_HOST_GDB_ARCH_SUPPORTS=y + +# +# Host GDB Options +# +# BR2_PACKAGE_HOST_GDB is not set + +# +# Toolchain Generic Options +# +BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS=y +BR2_TOOLCHAIN_SUPPORTS_VARIADIC_MI_THUNK=y +BR2_TOOLCHAIN_HAS_NATIVE_RPC=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SSP=y +BR2_TOOLCHAIN_HAS_SSP_STRONG=y +BR2_TOOLCHAIN_HAS_UCONTEXT=y +BR2_TOOLCHAIN_SUPPORTS_PIE=y +# BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY is not set +BR2_TOOLCHAIN_EXTRA_LIBS="" +BR2_TOOLCHAIN_HAS_FULL_GETTEXT=y +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="" +BR2_TARGET_LDFLAGS="" +# BR2_ECLIPSE_REGISTER is not set +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="3.18" +BR2_TOOLCHAIN_GCC_AT_LEAST_4_3=y +BR2_TOOLCHAIN_GCC_AT_LEAST_4_4=y +BR2_TOOLCHAIN_GCC_AT_LEAST_4_5=y +BR2_TOOLCHAIN_GCC_AT_LEAST_4_6=y +BR2_TOOLCHAIN_GCC_AT_LEAST_4_7=y +BR2_TOOLCHAIN_GCC_AT_LEAST="4.7" +BR2_TOOLCHAIN_HAS_SYNC_1=y +BR2_TOOLCHAIN_HAS_SYNC_2=y +BR2_TOOLCHAIN_HAS_SYNC_4=y + +# +# System configuration +# +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_HOSTNAME="huolong" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot for the LS1B20-HuoLong" +# BR2_TARGET_GENERIC_PASSWD_SHA256 is not set +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_TARGET_GENERIC_PASSWD_METHOD="sha-512" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set +# BR2_INIT_OPENRC is not set + +# +# systemd needs a glibc toolchain w/ SSP, headers >= 3.10, host and target gcc >= 5 +# +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +# BR2_ROOTFS_DEVICE_TABLE_SUPPORTS_EXTENDED_ATTRIBUTES is not set +BR2_ROOTFS_MERGED_USR=y +BR2_TARGET_ENABLE_ROOT_LOGIN=y +BR2_TARGET_GENERIC_ROOT_PASSWD="loongson" +BR2_SYSTEM_BIN_SH_BUSYBOX=y + +# +# bash, dash, mksh, zsh need BR2_PACKAGE_BUSYBOX_SHOW_OTHERS +# +# BR2_SYSTEM_BIN_SH_NONE is not set +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS5" +BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP=y +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE="0" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +BR2_SYSTEM_DHCP="" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +# BR2_ENABLE_LOCALE_PURGE is not set +BR2_GENERATE_LOCALE="" +# BR2_SYSTEM_ENABLE_NLS is not set +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="board/loongson/ls1b20-huolong/rootfs_4_7_gcc_overlay" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_FAKEROOT_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES="" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set +BR2_PACKAGE_SKELETON=y +BR2_PACKAGE_HAS_SKELETON=y +BR2_PACKAGE_PROVIDES_SKELETON="skeleton-init-sysv" +BR2_PACKAGE_SKELETON_INIT_COMMON=y +BR2_PACKAGE_SKELETON_INIT_SYSV=y + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_ATEST is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BLUEZ_ALSA is not set +# BR2_PACKAGE_DVBLAST is not set +# BR2_PACKAGE_DVDAUTHOR is not set +# BR2_PACKAGE_DVDRW_TOOLS is not set +# BR2_PACKAGE_ESPEAK is not set +# BR2_PACKAGE_FAAD2 is not set +BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS=y +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_FLUID_SOUNDFONT is not set +# BR2_PACKAGE_FLUIDSYNTH is not set +# BR2_PACKAGE_GMRENDER_RESURRECT is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK1 is not set +# BR2_PACKAGE_JACK2 is not set +BR2_PACKAGE_KODI_ARCH_SUPPORTS=y + +# +# kodi needs python w/ .py modules, a uClibc or glibc toolchain w/ C++, threads, wchar, dynamic library, gcc >= 4.8 +# + +# +# kodi needs an OpenGL EGL backend with OpenGL support +# +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MIMIC is not set +# BR2_PACKAGE_MINIMODEM is not set + +# +# miraclecast needs systemd and a glibc toolchain w/ threads and wchar +# +# BR2_PACKAGE_MJPEGTOOLS is not set +# BR2_PACKAGE_MODPLUGTOOLS is not set +# BR2_PACKAGE_MOTION is not set +# BR2_PACKAGE_MPD_MPC is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MULTICAT is not set +# BR2_PACKAGE_MUSEPACK is not set + +# +# ncmpc needs a toolchain w/ C++, wchar, threads, gcc >= 7 +# +# BR2_PACKAGE_OPUS_TOOLS is not set +BR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC=y +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_SQUEEZELITE is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UDPXY is not set + +# +# upmpdcli needs a toolchain w/ C++, NPTL, gcc >= 4.9 +# +# BR2_PACKAGE_V4L2GRAB is not set + +# +# v4l2loopback needs a Linux kernel to be built +# + +# +# vlc needs a toolchain w/ C++, dynamic library, wchar, threads, gcc >= 4.9, headers >= 3.7 +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +# BR2_PACKAGE_YAVTA is not set +# BR2_PACKAGE_YMPD is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BROTLI is not set +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_LRZIP is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_P7ZIP is not set +# BR2_PACKAGE_PIGZ is not set +# BR2_PACKAGE_PIXZ is not set +# BR2_PACKAGE_UNRAR is not set +# BR2_PACKAGE_XZ is not set +# BR2_PACKAGE_ZIP is not set +# BR2_PACKAGE_ZSTD is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BABELTRACE2 is not set +# BR2_PACKAGE_BLKTRACE is not set +# BR2_PACKAGE_BONNIE is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set + +# +# clinfo needs an OpenCL provider +# +# BR2_PACKAGE_COREMARK is not set +# BR2_PACKAGE_COREMARK_PRO is not set + +# +# dacapo needs OpenJDK +# +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DIEHARDER is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +BR2_PACKAGE_GDB_ARCH_SUPPORTS=y + +# +# gdb/gdbserver >= 8.x needs a toolchain w/ C++, gcc >= 4.8 +# +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y + +# +# google-breakpad requires a glibc or uClibc toolchain w/ wchar, thread, C++, gcc >= 4.8 +# +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set + +# +# ktap needs a Linux kernel to be built +# +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LMBENCH is not set +BR2_PACKAGE_LTP_TESTSUITE_ARCH_SUPPORTS=y +# BR2_PACKAGE_LTP_TESTSUITE is not set +BR2_PACKAGE_LTRACE_ARCH_SUPPORTS=y +# BR2_PACKAGE_LTRACE is not set +# BR2_PACKAGE_LTTNG_BABELTRACE is not set + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_LTTNG_TOOLS is not set +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_NETSNIFF_NG is not set +# BR2_PACKAGE_NMON is not set +BR2_PACKAGE_OPROFILE_ARCH_SUPPORTS=y +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set + +# +# sentry-native needs a glibc toolchain with w/ wchar, thread, C++, gcc >= 4.8 +# +# BR2_PACKAGE_SPIDEV_TEST is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_STRESS_NG is not set + +# +# sysdig needs a glibc or uclibc toolchain w/ C++, threads, gcc >= 4.8, dynamic library, a Linux kernel, and luajit or lua 5.1 to be built +# +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +BR2_PACKAGE_TRINITY_ARCH_SUPPORTS=y +# BR2_PACKAGE_TRINITY is not set +# BR2_PACKAGE_UCLIBC_NG_TEST is not set +# BR2_PACKAGE_VMTOUCH is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BITWISE is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_BUSTLE is not set +# BR2_PACKAGE_CHECK is not set +BR2_PACKAGE_CMAKE_ARCH_SUPPORTS=y +# BR2_PACKAGE_CMAKE_CTEST is not set +# BR2_PACKAGE_CPPUNIT is not set +# BR2_PACKAGE_CUKINIA is not set +# BR2_PACKAGE_CUNIT is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_CXXTEST is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +BR2_PACKAGE_PROVIDES_HOST_GETTEXT="host-gettext-tiny" +# BR2_PACKAGE_GIT is not set + +# +# git-crypt needs a toolchain w/ C++, gcc >= 4.9 +# +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_JO is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_RIPGREP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_ABOOTIMG is not set + +# +# aufs-util needs a linux kernel and a toolchain w/ threads +# +# BR2_PACKAGE_AUTOFS is not set +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CPIO is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DAVFS2 is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EROFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_EXFATPROGS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_FSCRYPTCTL is not set +# BR2_PACKAGE_FUSE_OVERLAYFS is not set +# BR2_PACKAGE_FWUP is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set + +# +# imx-usb-loader needs a toolchain w/ threads, gcc >= 4.9 +# +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NILFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set +# BR2_PACKAGE_SP_OOPS_EXTRACT is not set +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_UDFTOOLS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set + +# +# Fonts, cursors, icons, sounds and themes +# + +# +# Cursors +# +# BR2_PACKAGE_COMIX_CURSORS is not set +# BR2_PACKAGE_OBSIDIAN_CURSORS is not set + +# +# Fonts +# +# BR2_PACKAGE_BITSTREAM_VERA is not set +# BR2_PACKAGE_CANTARELL is not set +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_FONT_AWESOME is not set +# BR2_PACKAGE_GHOSTSCRIPT_FONTS is not set +# BR2_PACKAGE_INCONSOLATA is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_WQY_ZENHEI is not set + +# +# Icons +# +# BR2_PACKAGE_GOOGLE_MATERIAL_DESIGN_ICONS is not set +# BR2_PACKAGE_HICOLOR_ICON_THEME is not set + +# +# Sounds +# +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Themes +# + +# +# Games +# +# BR2_PACKAGE_ASCII_INVADERS is not set +# BR2_PACKAGE_CHOCOLATE_DOOM is not set +# BR2_PACKAGE_FLARE_ENGINE is not set +# BR2_PACKAGE_FROTZ is not set +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set +# BR2_PACKAGE_SL is not set + +# +# solarus needs OpenGL and a toolchain w/ C++, gcc >= 4.9, NPTL, dynamic library, and luajit or lua 5.1 +# + +# +# stella needs a toolchain w/ dynamic library, C++, threads, gcc >= 6 +# +# BR2_PACKAGE_XORCURSES is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# + +# +# cage needs udev, mesa3d w/ EGL and GLES support +# + +# +# cog needs wpewebkit and a toolchain w/ threads +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GHOSTSCRIPT is not set + +# +# glmark2 needs a toolchain w/ C++, gcc >= 4.9 +# + +# +# glslsandbox-player needs a toolchain w/ threads and an openGL ES and EGL driver +# +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set +# BR2_PACKAGE_LIBVA_UTILS is not set +BR2_PACKAGE_NETSURF_ARCH_SUPPORTS=y +# BR2_PACKAGE_NETSURF is not set +# BR2_PACKAGE_PNGQUANT is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# stellarium needs Qt5 and an OpenGL provider +# + +# +# tesseract-ocr needs a toolchain w/ threads, C++, gcc >= 4.8, dynamic library, wchar +# + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI is not set +BR2_PACKAGE_DIRECTFB=y + +# +# directfb multi application needs a Linux kernel to be built +# +BR2_PACKAGE_DIRECTFB_DEBUG_SUPPORT=y +# BR2_PACKAGE_DIRECTFB_DEBUG is not set +# BR2_PACKAGE_DIRECTFB_TRACE is not set +# BR2_PACKAGE_DIRECTFB_DIVINE is not set +# BR2_PACKAGE_DIRECTFB_SAWMAN is not set +BR2_PACKAGE_DIRECTFB_LINUXINPUT=y +BR2_PACKAGE_DIRECTFB_KEYBOARD=y +BR2_PACKAGE_DIRECTFB_PS2MOUSE=y +BR2_PACKAGE_DIRECTFB_SERIALMOUSE=y +BR2_PACKAGE_DIRECTFB_TSLIB=y +BR2_PACKAGE_DIRECTFB_GIF=y +# BR2_PACKAGE_DIRECTFB_TIFF is not set +# BR2_PACKAGE_DIRECTFB_IMLIB2 is not set +BR2_PACKAGE_DIRECTFB_JPEG=y +BR2_PACKAGE_DIRECTFB_PNG=y +BR2_PACKAGE_DIRECTFB_SVG=y +# BR2_PACKAGE_DIRECTFB_DITHER_RGB16 is not set +# BR2_PACKAGE_DIRECTFB_TESTS is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES is not set + +# +# efl needs a toolchain w/ C++, dynamic library, gcc >= 4.9, host gcc >= 4.9, threads, wchar +# +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_FREERDP is not set +# BR2_PACKAGE_GRAPHICSMAGICK is not set +# BR2_PACKAGE_IMAGEMAGICK is not set + +# +# linux-fusion needs a Linux kernel to be built +# +# BR2_PACKAGE_LITE is not set +# BR2_PACKAGE_MESA3D is not set +# BR2_PACKAGE_OCRAD is not set + +# +# ogre needs a toolchain w/ C++, dynamic library, gcc >= 4.8, threads, wchar +# +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set +# BR2_PACKAGE_SDL2 is not set + +# +# Other GUIs +# +BR2_PACKAGE_QT5_JSCORE_AVAILABLE=y + +# +# Qt5 needs host g++ >= 5.0, and a toolchain w/ gcc >= 5.0, wchar, NPTL, C++, dynamic library +# + +# +# tekui needs a Lua interpreter and a toolchain w/ threads, dynamic library +# + +# +# weston needs udev and a toolchain w/ locale, threads, dynamic library, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# apitrace needs a toolchain w/ C++, wchar, dynamic library, threads, gcc >= 4.9 +# + +# +# midori needs libgtk3 and a glibc toolchain w/ C++, gcc >= 7, host gcc >= 4.9 +# + +# +# vte needs a toolchain w/ wchar, threads, C++, gcc >= 4.8 +# + +# +# vte needs an OpenGL or an OpenGL-EGL/wayland backend +# +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_ARMBIAN_FIRMWARE is not set +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_MURATA_CYW_FW is not set +# BR2_PACKAGE_ODROIDC2_FIRMWARE is not set +# BR2_PACKAGE_QCOM_DB410C_FIRMWARE is not set +# BR2_PACKAGE_RCW_SMARC_SAL28 is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_WILC1000_FIRMWARE is not set +# BR2_PACKAGE_WILINK_BT_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set +# BR2_PACKAGE_18XX_TI_UTILS is not set +# BR2_PACKAGE_ACPICA is not set +# BR2_PACKAGE_ACPID is not set +# BR2_PACKAGE_ACPITOOL is not set +# BR2_PACKAGE_AER_INJECT is not set +# BR2_PACKAGE_APCUPSD is not set + +# +# avrdude needs a uClibc or glibc toolchain w/ threads, wchar, dynamic library, gcc >= 4.9 +# + +# +# bcache-tools needs udev /dev management +# + +# +# brickd needs udev /dev management, a toolchain w/ threads, wchar +# +# BR2_PACKAGE_BRLTTY is not set + +# +# cc-tool needs a toolchain w/ C++, threads, wchar, gcc >= 4.9 +# +# BR2_PACKAGE_CDRKIT is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set + +# +# dahdi-linux needs a Linux kernel to be built +# + +# +# dahdi-tools needs a toolchain w/ threads and a Linux kernel to be built +# +BR2_PACKAGE_DBUS=y +# BR2_PACKAGE_DBUS_CPP is not set +# BR2_PACKAGE_DBUS_GLIB is not set +# BR2_PACKAGE_DBUS_TRIGGERD is not set + +# +# dfu-util needs a toolchain w/ threads, gcc >= 4.9 +# +# BR2_PACKAGE_DMRAID is not set + +# +# dt-utils needs udev /dev management +# +# BR2_PACKAGE_DTV_SCAN_TABLES is not set + +# +# dump1090 needs a toolchain w/ threads, gcc >= 4.9 +# +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_EDID_DECODE is not set + +# +# edid-decode needs a toolchain w/ C++, gcc >= 4.7 +# + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +BR2_PACKAGE_FLASHROM_ARCH_SUPPORTS=y +# BR2_PACKAGE_FLASHROM is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_HWLOC is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set + +# +# kbd needs a toolchain w/ gcc >= 4.9 +# +# BR2_PACKAGE_LCDPROC is not set +# BR2_PACKAGE_LIBIEC61850 is not set +# BR2_PACKAGE_LIBUBOOTENV is not set +# BR2_PACKAGE_LIBUIO is not set + +# +# linux-backports needs a Linux kernel to be built +# +# BR2_PACKAGE_LINUX_SERIAL_TEST is not set +# BR2_PACKAGE_LINUXCONSOLETOOLS is not set +# BR2_PACKAGE_LIRC_TOOLS is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSSCSI is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LUKSMETA is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MBPFAN is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MDEVD is not set +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MEMTOOL is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_NVIDIA_MODPROBE is not set +# BR2_PACKAGE_NVME is not set + +# +# ofono needs a toolchain w/ dynamic library, wchar, threads, headers >= 4.12 +# +# BR2_PACKAGE_OPEN2300 is not set + +# +# openfpgaloader needs a toolchain w/ threads, C++, gcc >= 4.9 +# +# BR2_PACKAGE_OPENIPMI is not set +# BR2_PACKAGE_OPENOCD is not set +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PDBG is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_POWERTOP is not set +# BR2_PACKAGE_PPS_TOOLS is not set +# BR2_PACKAGE_RASPI_GPIO is not set +# BR2_PACKAGE_READ_EDID is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_RS485CONF is not set +BR2_PACKAGE_RTC_TOOLS=y + +# +# rtl8188eu needs a Linux kernel to be built +# + +# +# rtl8189fs needs a Linux kernel to be built +# + +# +# rtl8723bs needs a Linux kernel to be built +# + +# +# rtl8723bu needs a Linux kernel to be built +# + +# +# rtl8821au needs a Linux kernel to be built +# +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +BR2_PACKAGE_SEDUTIL_ARCH_SUPPORTS=y + +# +# sedutil needs a toolchain w/ C++, gcc >= 4.8, headers >= 3.12 +# +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SIGROK_CLI is not set + +# +# sispmctl needs a toolchain w/ threads, wchar, gcc >= 4.9 +# +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SPI_TOOLS is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_STM32FLASH is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on Python +# + +# +# ti-sgx-um needs the ti-sgx-km driver +# + +# +# ti-sgx-um needs udev and a glibc toolchain w/ threads +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_TIO is not set +# BR2_PACKAGE_TRIGGERHAPPY is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set +# BR2_PACKAGE_UBUS is not set + +# +# uccp420wlan needs a Linux kernel >= 4.2 to be built +# + +# +# udisks needs udev /dev management +# + +# +# udisks needs a glibc or musl toolchain with locale, C++, wchar, dynamic library, NPTL, gcc >= 4.9 +# + +# +# uhubctl needs a toolchain w/ threads, gcc >= 4.9 +# +# BR2_PACKAGE_UMTPRD is not set + +# +# upower needs udev /dev management +# + +# +# upower needs a toolchain w/ threads, wchar, gcc >= 4.9 +# + +# +# usb_modeswitch needs a toolchain w/ threads, gcc >= 4.9 +# + +# +# usb_modeswitch_data needs a toolchain w/ threads, gcc >= 4.9 +# + +# +# usbmount requires udev to be enabled +# + +# +# usbutils needs udev /dev management and toolchain w/ threads, gcc >= 4.9 +# +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WIPE is not set +# BR2_PACKAGE_XORRISO is not set + +# +# xr819-xradio driver needs a Linux kernel to be built +# + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_4TH is not set +# BR2_PACKAGE_ENSCRIPT is not set +BR2_PACKAGE_HOST_ERLANG_ARCH_SUPPORTS=y +BR2_PACKAGE_ERLANG_ARCH_SUPPORTS=y +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_EXECLINE is not set +# BR2_PACKAGE_FICL is not set +BR2_PACKAGE_GAUCHE_ARCH_SUPPORTS=y +# BR2_PACKAGE_GAUCHE is not set +# BR2_PACKAGE_GUILE is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +BR2_PACKAGE_PROVIDES_HOST_LUAINTERPRETER="host-lua" +# BR2_PACKAGE_MICROPYTHON is not set +# BR2_PACKAGE_MOARVM is not set +BR2_PACKAGE_HOST_MONO_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_OPENJDK_BIN_ARCH_SUPPORTS=y +# BR2_PACKAGE_PERL is not set +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_PACKAGE_PYTHON3 is not set + +# +# quickjs needs a glibc or musl toolchain w/ gcc >= 4.9, host gcc >= 4.9, dynamic library +# +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set + +# +# alure needs a toolchain w/ C++, gcc >= 4.9, NPTL, wchar +# +# BR2_PACKAGE_AUBIO is not set +# BR2_PACKAGE_BCG729 is not set +# BR2_PACKAGE_CAPS is not set +BR2_PACKAGE_FDK_AAC_ARCH_SUPPORTS=y +# BR2_PACKAGE_FDK_AAC is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBASPLIB is not set +# BR2_PACKAGE_LIBBROADVOICE is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDDB is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCDIO_PARANOIA is not set +# BR2_PACKAGE_LIBCODEC2 is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBEBUR128 is not set +# BR2_PACKAGE_LIBG7221 is not set +# BR2_PACKAGE_LIBGSM is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBILBC is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set +# BR2_PACKAGE_LIBMODPLUG is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSIDPLAY2 is not set +# BR2_PACKAGE_LIBSILK is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBSOUNDTOUCH is not set +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_MP4V2 is not set +BR2_PACKAGE_OPENAL_ARCH_SUPPORTS=y + +# +# openal needs a toolchain w/ NPTL, C++, gcc >= 4.9 +# +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_OPUSFILE is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SBC is not set +# BR2_PACKAGE_SPANDSP is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_SPEEXDSP is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TINYALSA is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LIBMSPACK is not set +# BR2_PACKAGE_LIBSQUISH is not set +# BR2_PACKAGE_LIBZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_MINIZIP is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_SZIP is not set +BR2_PACKAGE_ZLIB=y +BR2_PACKAGE_LIBZLIB=y +BR2_PACKAGE_HAS_ZLIB=y +BR2_PACKAGE_PROVIDES_ZLIB="libzlib" +BR2_PACKAGE_PROVIDES_HOST_ZLIB="host-libzlib" +# BR2_PACKAGE_ZZIPLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEARSSL is not set +# BR2_PACKAGE_BEECRYPT is not set +BR2_PACKAGE_BOTAN_ARCH_SUPPORTS=y + +# +# botan needs a toolchain w/ C++, threads, gcc >= 4.8 +# +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# +# BR2_PACKAGE_GCR is not set +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBARGON2 is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBGCRYPT is not set +BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBGPG_ERROR is not set +BR2_PACKAGE_LIBGPG_ERROR_SYSCFG="mips-unknown-linux-gnu" +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKCAPI is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set + +# +# libolm needs a toolchain w/ C++, gcc >= 4.8 +# +# BR2_PACKAGE_LIBP11 is not set +# BR2_PACKAGE_LIBSCRYPT is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSODIUM is not set +# BR2_PACKAGE_LIBSSH is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_LIBTOMCRYPT is not set +# BR2_PACKAGE_LIBUECC is not set +# BR2_PACKAGE_MBEDTLS is not set +# BR2_PACKAGE_NETTLE is not set +BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS=y +# BR2_PACKAGE_OPENSSL is not set +BR2_PACKAGE_PROVIDES_HOST_OPENSSL="host-libopenssl" +# BR2_PACKAGE_PKCS11_HELPER is not set +# BR2_PACKAGE_RHASH is not set +# BR2_PACKAGE_TINYDTLS is not set +# BR2_PACKAGE_TPM2_PKCS11 is not set +# BR2_PACKAGE_TPM2_TSS is not set +# BR2_PACKAGE_TROUSERS is not set +# BR2_PACKAGE_USTREAM_SSL is not set +# BR2_PACKAGE_WOLFSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_CPPDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_HIREDIS is not set +# BR2_PACKAGE_KOMPEXSQLITE is not set + +# +# leveldb needs a toolchain w/ C++, threads, gcc >= 4.8 +# +# BR2_PACKAGE_LIBGIT2 is not set +# BR2_PACKAGE_LIBMDBX is not set +# BR2_PACKAGE_LIBODB is not set +# BR2_PACKAGE_MYSQL is not set +# BR2_PACKAGE_POSTGRESQL is not set + +# +# rocksdb needs a toolchain w/ C++, threads, wchar, gcc >= 4.8 +# + +# +# sqlcipher conflicts with sqlite +# +BR2_PACKAGE_SQLITE=y +BR2_PACKAGE_SQLITE_STAT4=y +BR2_PACKAGE_SQLITE_ENABLE_COLUMN_METADATA=y +BR2_PACKAGE_SQLITE_ENABLE_FTS3=y +BR2_PACKAGE_SQLITE_ENABLE_JSON1=y +BR2_PACKAGE_SQLITE_ENABLE_UNLOCK_NOTIFY=y +BR2_PACKAGE_SQLITE_SECURE_DELETE=y +BR2_PACKAGE_SQLITE_NO_SYNC=y +# BR2_PACKAGE_UNIXODBC is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBFUSE3 is not set +# BR2_PACKAGE_LIBLOCKFILE is not set +# BR2_PACKAGE_LIBNFS is not set +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set +# BR2_PACKAGE_PHYSFS is not set + +# +# Graphics +# +# BR2_PACKAGE_ASSIMP is not set + +# +# at-spi2-atk depends on X.org +# + +# +# at-spi2-core depends on X.org +# +# BR2_PACKAGE_ATK is not set + +# +# atkmm needs a toolchain w/ C++, wchar, threads, gcc >= 4.9 +# +# BR2_PACKAGE_BULLET is not set +BR2_PACKAGE_CAIRO=y +# BR2_PACKAGE_CAIRO_PS is not set +BR2_PACKAGE_CAIRO_PDF=y +BR2_PACKAGE_CAIRO_PNG=y +# BR2_PACKAGE_CAIRO_SCRIPT is not set +BR2_PACKAGE_CAIRO_SVG=y +# BR2_PACKAGE_CAIRO_TEE is not set +# BR2_PACKAGE_CAIRO_XML is not set + +# +# cairomm needs a toolchain w/ C++, wchar, threads, gcc >= 4.8 +# + +# +# chipmunk needs an OpenGL backend +# +# BR2_PACKAGE_EXEMPI is not set +# BR2_PACKAGE_EXIV2 is not set +BR2_PACKAGE_FONTCONFIG=y +BR2_PACKAGE_FREETYPE=y +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_GIFLIB is not set + +# +# granite needs libgtk3 and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_GRAPHITE2 is not set + +# +# gtkmm3 needs libgtk3 and a toolchain w/ C++, wchar, threads, gcc >= 4.9 +# + +# +# harfbuzz needs a toolchain w/ C++, gcc >= 4.8 +# +# BR2_PACKAGE_IJS is not set +# BR2_PACKAGE_IMLIB2 is not set + +# +# irrlicht needs X11 and an OpenGL provider +# +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JBIG2DEC is not set +BR2_PACKAGE_JPEG=y +BR2_PACKAGE_LIBJPEG=y +# BR2_PACKAGE_JPEG_TURBO is not set +BR2_PACKAGE_HAS_JPEG=y +BR2_PACKAGE_PROVIDES_JPEG="libjpeg" + +# +# kms++ needs a toolchain w/ threads, C++, gcc >= 4.8, headers >= 4.11, wchar +# +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LENSFUN is not set +# BR2_PACKAGE_LEPTONICA is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set + +# +# libepoxy needs an OpenGL and/or OpenGL EGL backend +# +# BR2_PACKAGE_LIBEXIF is not set + +# +# libfm needs X.org and a toolchain w/ wchar, threads, C++, gcc >= 4.8 +# +# BR2_PACKAGE_LIBFM_EXTRA is not set + +# +# libfreeglut depends on X.org and needs an OpenGL backend +# +# BR2_PACKAGE_LIBFREEIMAGE is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglfw depends on X.org and needs an OpenGL backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBGTA is not set + +# +# libgtk3 needs a toolchain w/ wchar, threads, C++, gcc >= 4.8 +# + +# +# libgtk3 needs an OpenGL or an OpenGL-EGL/wayland backend +# +# BR2_PACKAGE_LIBMEDIAART is not set +# BR2_PACKAGE_LIBMNG is not set +BR2_PACKAGE_LIBPNG=y +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set + +# +# librsvg needs a toolchain w/ wchar, threads, C++, gcc >= 4.8 +# + +# +# libsoil needs an OpenGL backend and a toolchain w/ dynamic library +# +BR2_PACKAGE_LIBSVG=y +BR2_PACKAGE_LIBSVG_CAIRO=y +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_LIBVIPS is not set + +# +# libwpe needs a toolchain w/ C++, dynamic library and an OpenEGL-capable backend +# +# BR2_PACKAGE_MENU_CACHE is not set +# BR2_PACKAGE_OPENJPEG is not set + +# +# pango needs a toolchain w/ wchar, threads, C++, gcc >= 4.8 +# + +# +# pangomm needs a toolchain w/ C++, wchar, threads, gcc >= 4.9 +# + +# +# pipewire needs udev and a toolchain w/ threads, headers >= 3.18 +# +BR2_PACKAGE_PIXMAN=y + +# +# poppler needs a toolchain w/ wchar, C++, threads, dynamic library, gcc >= 5 +# +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKITGTK_ARCH_SUPPORTS=y + +# +# webkitgtk needs libgtk3 and a glibc toolchain w/ C++, gcc >= 7, host gcc >= 4.9 +# +# BR2_PACKAGE_WEBP is not set + +# +# wlroots needs udev, mesa3d w/ EGL and GLES support +# +# BR2_PACKAGE_WOFF2 is not set + +# +# wpebackend-fdo needs a toolchain w/ C++, wchar, threads, dynamic library and an OpenEGL-capable Wayland backend +# +BR2_PACKAGE_WPEWEBKIT_ARCH_SUPPORTS=y + +# +# wpewebkit needs a toolchain w/ C++, wchar, threads, dynamic library, gcc >= 7, host gcc >= 4.9 +# + +# +# wpewebkit needs an OpenGL ES w/ EGL-capable Wayland backend +# +# BR2_PACKAGE_ZBAR is not set +# BR2_PACKAGE_ZXING_CPP is not set + +# +# Hardware handling +# + +# +# acsccid needs a toolchain w/ threads, dynamic library, gcc >= 4.9 +# +# BR2_PACKAGE_C_PERIPHERY is not set + +# +# ccid needs a toolchain w/ threads, dynamic library, gcc >= 4.9 +# +# BR2_PACKAGE_DTC is not set + +# +# hackrf needs a toolchain w/ threads, dynamic library, gcc >= 4.9 +# + +# +# hidapi needs udev /dev management and a toolchain w/ NPTL, threads, gcc >= 4.9 +# +# BR2_PACKAGE_JITTERENTROPY_LIBRARY is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LET_ME_CREATE is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# + +# +# libblockdev needs udev /dev management and a toolchain w/ wchar, threads, dynamic library +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBFREEFARE is not set + +# +# libftdi needs a toolchain w/ threads, gcc >= 4.9 +# + +# +# libftdi1 needs a toolchain w/ threads, gcc >= 4.9 +# + +# +# libgphoto needs a toolchain w/ threads, gcc >= 4.9 +# + +# +# libgpiod needs kernel headers >= 4.8 +# + +# +# libgudev needs udev /dev handling and a toolchain w/ wchar, threads +# + +# +# libhid needs a toolchain w/ threads, gcc >= 4.9 +# +# BR2_PACKAGE_LIBIIO is not set + +# +# libinput needs udev /dev management +# + +# +# libiqrf needs a toolchain w/ threads, gcc >= 4.9 +# +# BR2_PACKAGE_LIBLLCP is not set +# BR2_PACKAGE_LIBMBIM is not set +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPCIACCESS is not set + +# +# libphidget needs a toolchain w/ threads, dynamic library, gcc >= 4.9 +# + +# +# libpri needs a kernel to be built +# +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBRAW1394 is not set + +# +# librtlsdr needs a toolchain w/ threads, gcc >= 4.9 +# + +# +# libserial needs a toolchain w/ C++, gcc >= 5, threads, wchar +# +# BR2_PACKAGE_LIBSERIALPORT is not set +# BR2_PACKAGE_LIBSIGROK is not set +# BR2_PACKAGE_LIBSIGROKDECODE is not set +# BR2_PACKAGE_LIBSOC is not set + +# +# libss7 needs a kernel to be built +# + +# +# libusb needs a toolchain w/ threads, gcc >= 4.9 +# +# BR2_PACKAGE_LIBUSBGX is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +BR2_PACKAGE_MRAA_ARCH_SUPPORTS=y +# BR2_PACKAGE_MRAA is not set +# BR2_PACKAGE_MTDEV is not set +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_OWFS is not set +# BR2_PACKAGE_PCSC_LITE is not set +BR2_PACKAGE_TSLIB=y +# BR2_PACKAGE_UHD is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_ANGULARJS is not set +# BR2_PACKAGE_BOOTSTRAP is not set +# BR2_PACKAGE_CHARTJS is not set +# BR2_PACKAGE_DATATABLES is not set +# BR2_PACKAGE_DUKTAPE is not set +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set +# BR2_PACKAGE_JSZIP is not set +# BR2_PACKAGE_OPENLAYERS is not set +# BR2_PACKAGE_POPPERJS is not set +BR2_PACKAGE_SPIDERMONKEY_ARCH_SUPPORTS=y + +# +# spidermonkey needs a glibc or musl toolchain with C++, wchar, dynamic library, NPTL, gcc >= 4.9 +# +# BR2_PACKAGE_VUEJS is not set + +# +# JSON/XML +# +# BR2_PACKAGE_BENEJSON is not set +# BR2_PACKAGE_CJSON is not set +BR2_PACKAGE_EXPAT=y +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JOSE is not set +# BR2_PACKAGE_JSMN is not set +# BR2_PACKAGE_JSON_C is not set + +# +# json-for-modern-cpp needs a toolchain w/ C++, gcc >= 4.9 +# +# BR2_PACKAGE_JSON_GLIB is not set +# BR2_PACKAGE_JSONCPP is not set +# BR2_PACKAGE_LIBBSON is not set +# BR2_PACKAGE_LIBFASTJSON is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBUCL is not set +# BR2_PACKAGE_LIBXML2 is not set + +# +# libxml++ needs a toolchain w/ C++, wchar, threads, gcc >= 4.9 +# +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_PUGIXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_RAPIDXML is not set +# BR2_PACKAGE_RAPTOR is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_TINYXML2 is not set +# BR2_PACKAGE_VALIJSON is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_YAJL is not set +# BR2_PACKAGE_YAML_CPP is not set + +# +# Logging +# +# BR2_PACKAGE_GLOG is not set +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set + +# +# log4cplus needs a toolchain w/ C++, wchar, threads, gcc >= 4.8 +# +# BR2_PACKAGE_LOG4CPP is not set +# BR2_PACKAGE_LOG4CXX is not set + +# +# opentracing-cpp needs a toolchain w/ C++, threads, dynamic library, gcc >= 4.8 +# +# BR2_PACKAGE_SPDLOG is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_BITSTREAM is not set +# BR2_PACKAGE_DAV1D is not set +# BR2_PACKAGE_KVAZAAR is not set +# BR2_PACKAGE_LIBAACS is not set + +# +# libass needs a toolchain w/ C++, gcc >= 4.8 +# +# BR2_PACKAGE_LIBBDPLUS is not set +# BR2_PACKAGE_LIBBLURAY is not set +BR2_PACKAGE_LIBCAMERA_ARCH_SUPPORTS=y + +# +# libcamera needs a toolchain w/ C++, threads, wchar, dynamic library, gcc >= 7 +# +# BR2_PACKAGE_LIBDCADEC is not set +# BR2_PACKAGE_LIBDVBCSA is not set +# BR2_PACKAGE_LIBDVBPSI is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDCSS is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBHDHOMERUN is not set +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +BR2_PACKAGE_LIBOPENH264_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBOPENH264 is not set +# BR2_PACKAGE_LIBOPUSENC is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIBUDFREAD is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_LIBYUV is not set +# BR2_PACKAGE_LIVE555 is not set + +# +# mediastreamer needs a toolchain w/ threads, C++, dynamic library, gcc >= 5 +# +# BR2_PACKAGE_X264 is not set +# BR2_PACKAGE_X265 is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set + +# +# azmq needs a toolchain w/ C++11, wchar and NPTL +# +# BR2_PACKAGE_AZURE_IOT_SDK_C is not set + +# +# batman-adv needs a Linux kernel to be built +# +# BR2_PACKAGE_BELLE_SIP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CGIC is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CURLPP is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_DAQ is not set +# BR2_PACKAGE_ENET is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_FREERADIUS_CLIENT is not set +# BR2_PACKAGE_GENSIO is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set + +# +# grpc needs a toolchain w/ C++, threads, dynamic library, gcc >= 4.9, host gcc >= 4.9 +# +# BR2_PACKAGE_GSSDP is not set +# BR2_PACKAGE_GUPNP is not set +# BR2_PACKAGE_GUPNP_AV is not set +# BR2_PACKAGE_GUPNP_DLNA is not set +# BR2_PACKAGE_IBRCOMMON is not set +# BR2_PACKAGE_IBRDTN is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCOAP is not set +# BR2_PACKAGE_LIBCPPRESTSDK is not set +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBHTP is not set +# BR2_PACKAGE_LIBHTTPPARSER is not set + +# +# libhttpserver needs a toolchain w/ C++, threads, gcc >= 5 +# +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBIDN2 is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBKRB5 is not set +# BR2_PACKAGE_LIBLDNS is not set +# BR2_PACKAGE_LIBMAXMINDDB is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMINIUPNPC is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBMODSECURITY is not set +# BR2_PACKAGE_LIBNATPMP is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNET is not set +# BR2_PACKAGE_LIBNETCONF2 is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNICE is not set +# BR2_PACKAGE_LIBNIDS is not set +# BR2_PACKAGE_LIBNL is not set + +# +# libnpupnp needs a toolchain w/ C++, threads, gcc >= 4.9 +# +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPAGEKITE is not set +BR2_PACKAGE_LIBPCAP=y +# BR2_PACKAGE_LIBPJSIP is not set +# BR2_PACKAGE_LIBRELP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSHOUT is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSRTP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTELNET is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set + +# +# libtorrent-rasterbar needs a toolchain w/ C++, threads, wchar, gcc >= 4.9 +# +# BR2_PACKAGE_LIBUEV is not set +# BR2_PACKAGE_LIBUHTTPD is not set +# BR2_PACKAGE_LIBUPNP is not set + +# +# libupnpp needs a toolchain w/ C++, threads, gcc >= 4.9 +# +# BR2_PACKAGE_LIBURIPARSER is not set +# BR2_PACKAGE_LIBUWSC is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCK is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_LIBYANG is not set +# BR2_PACKAGE_LKSCTP_TOOLS is not set +# BR2_PACKAGE_MBUFFER is not set +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_NANOMSG is not set +# BR2_PACKAGE_NEON is not set + +# +# netopeer2 needs a toolchain w/ gcc >= 4.8, C++, threads, dynamic library +# +# BR2_PACKAGE_NGHTTP2 is not set +# BR2_PACKAGE_NORM is not set +# BR2_PACKAGE_NSS_MYHOSTNAME is not set +# BR2_PACKAGE_NSS_PAM_LDAPD is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPEN62541 is not set +# BR2_PACKAGE_OPENLDAP is not set +# BR2_PACKAGE_OPENMPI is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_OPENZWAVE is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_PAHO_MQTT_C is not set +# BR2_PACKAGE_PAHO_MQTT_CPP is not set + +# +# pistache needs a glibc toolchain w/ C++, gcc >= 4.9, threads, wchar +# +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_QPID_PROTON is not set +# BR2_PACKAGE_RABBITMQ_C is not set +# BR2_PACKAGE_RESIPROCATE is not set + +# +# restclient-cpp needs a toolchain w/ C++, gcc >= 4.8 +# +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_SOFIA_SIP is not set +# BR2_PACKAGE_THRIFT is not set + +# +# usbredir needs a toolchain w/ threads, gcc >= 4.9 +# + +# +# websocketpp needs a toolchain w/ C++ and gcc >= 4.8 +# +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARMADILLO is not set +# BR2_PACKAGE_ATF is not set +# BR2_PACKAGE_AVRO_C is not set +# BR2_PACKAGE_BCTOOLBOX is not set +# BR2_PACKAGE_BDWGC is not set +# BR2_PACKAGE_BELR is not set +# BR2_PACKAGE_BOOST is not set + +# +# c-capnproto needs host and target gcc >= 5 w/ C++14, threads, atomic, ucontext and not gcc bug 64735 +# + +# +# capnproto needs host and target gcc >= 5 w/ C++14, threads, atomic, ucontext and not gcc bug 64735 +# + +# +# cctz needs a toolchain w/ C++, threads, gcc >= 4.8 +# +# BR2_PACKAGE_CEREAL is not set +# BR2_PACKAGE_CLAPACK is not set +# BR2_PACKAGE_CMOCKA is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_CRACKLIB is not set +# BR2_PACKAGE_DAWGDIC is not set +# BR2_PACKAGE_DING_LIBS is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set + +# +# ell needs a toolchain w/ wchar, headers >= 4.12 +# +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_FLATBUFFERS is not set +# BR2_PACKAGE_FLATCC is not set +# BR2_PACKAGE_GCONF is not set +# BR2_PACKAGE_GFLAGS is not set +# BR2_PACKAGE_GLI is not set + +# +# glibmm needs a toolchain w/ C++, wchar, threads, gcc >= 4.9 +# +# BR2_PACKAGE_GLM is not set +# BR2_PACKAGE_GMP is not set +BR2_PACKAGE_GOBJECT_INTROSPECTION_ARCH_SUPPORTS=y + +# +# gobject-introspection needs python3 +# + +# +# gobject-introspection needs a glibc toolchain, gcc >= 4.9 +# +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +BR2_PACKAGE_JEMALLOC_ARCH_SUPPORTS=y +# BR2_PACKAGE_JEMALLOC is not set + +# +# lapack/blas needs a toolchain w/ fortran +# +BR2_PACKAGE_LIBABSEIL_CPP_ARCH_SUPPORTS=y + +# +# libabseil-cpp needs a toolchain w/ gcc >= 4.9, C++, threads, dynamic library +# +# BR2_PACKAGE_LIBARGTABLE2 is not set +BR2_PACKAGE_LIBATOMIC_OPS_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBATOMIC_OPS is not set +# BR2_PACKAGE_LIBAVL is not set +# BR2_PACKAGE_LIBB64 is not set +# BR2_PACKAGE_LIBBACKTRACE is not set +BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBBSD is not set +# BR2_PACKAGE_LIBBYTESIZE is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set +# BR2_PACKAGE_LIBCGROUP is not set +# BR2_PACKAGE_LIBCORRECT is not set +# BR2_PACKAGE_LIBCROSSGUID is not set +# BR2_PACKAGE_LIBCSV is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set +# BR2_PACKAGE_LIBGEE is not set +# BR2_PACKAGE_LIBGEOS is not set +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBGLOB is not set +# BR2_PACKAGE_LIBICAL is not set +# BR2_PACKAGE_LIBITE is not set +# BR2_PACKAGE_LIBLINEAR is not set +# BR2_PACKAGE_LIBLOKI is not set +# BR2_PACKAGE_LIBNPTH is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBPWQUALITY is not set +BR2_PACKAGE_LIBSECCOMP_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBSECCOMP is not set + +# +# libsigc++ needs a toolchain w/ C++, gcc >= 4.8 +# +BR2_PACKAGE_LIBSIGSEGV_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBSPATIALINDEX is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTOMMATH is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBUNWIND is not set +BR2_PACKAGE_LIBURCU_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBURCU is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LIGHTNING is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_LIQUID_DSP is not set +# BR2_PACKAGE_LTTNG_LIBUST is not set +# BR2_PACKAGE_MATIO is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MPIR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS=y + +# +# protobuf needs a toolchain w/ C++, threads, dynamic library, gcc >= 4.8 +# +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_QLIBC is not set +# BR2_PACKAGE_RIEMANN_C_CLIENT is not set +# BR2_PACKAGE_SHAPELIB is not set +# BR2_PACKAGE_SKALIBS is not set +# BR2_PACKAGE_SPHINXBASE is not set +# BR2_PACKAGE_TINYCBOR is not set + +# +# uvw needs a toolchain w/ NPTL, dynamic library, C++, gcc >= 7 +# +# BR2_PACKAGE_XAPIAN is not set + +# +# Security +# +# BR2_PACKAGE_LIBAPPARMOR is not set +# BR2_PACKAGE_LIBSELINUX is not set +# BR2_PACKAGE_LIBSEPOL is not set +# BR2_PACKAGE_SAFECLIB is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_AUGEAS is not set +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_FMT is not set +# BR2_PACKAGE_FSTRCMP is not set + +# +# icu needs a toolchain w/ C++, wchar, threads, gcc >= 4.9, host gcc >= 4.9 +# +# BR2_PACKAGE_INIH is not set +# BR2_PACKAGE_LIBCLI is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LIBUNISTRING is not set +# BR2_PACKAGE_LINENOISE is not set +BR2_PACKAGE_NCURSES=y +# BR2_PACKAGE_NCURSES_WCHAR is not set +# BR2_PACKAGE_NCURSES_TARGET_PROGS is not set +BR2_PACKAGE_NCURSES_ADDITIONAL_TERMINFO="" +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_ONIGURUMA is not set +# BR2_PACKAGE_PCRE is not set +BR2_PACKAGE_PCRE2=y +BR2_PACKAGE_PCRE2_16=y +# BR2_PACKAGE_PCRE2_32 is not set +BR2_PACKAGE_PCRE2_JIT_ARCH_SUPPORTS=y +# BR2_PACKAGE_PCRE2_JIT is not set +# BR2_PACKAGE_POPT is not set + +# +# re2 needs a toolchain w/ C++, threads, gcc >= 4.8 +# +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set +# BR2_PACKAGE_UTF8PROC is not set + +# +# Mail +# +# BR2_PACKAGE_DOVECOT is not set +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +# BR2_PACKAGE_CLAMAV is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_COLLECTL is not set + +# +# domoticz needs lua 5.3 and a toolchain w/ C++, gcc >= 4.8, NPTL, wchar, dynamic library +# +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GNURADIO is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set + +# +# gqrx needs qt5 +# +# BR2_PACKAGE_GSETTINGS_DESKTOP_SCHEMAS is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_LINUX_SYSCALL_SUPPORT is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_NETDATA is not set +# BR2_PACKAGE_PROJ is not set +BR2_PACKAGE_QEMU_ARCH_SUPPORTS_TARGET=y +# BR2_PACKAGE_QEMU is not set +# BR2_PACKAGE_QPDF is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SUNWAIT is not set +# BR2_PACKAGE_TASKD is not set +# BR2_PACKAGE_XUTIL_UTIL_MACROS is not set + +# +# Networking applications +# +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_AOETOOLS is not set +# BR2_PACKAGE_APACHE is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARP_SCAN is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ASTERISK is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BABELD is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BATCTL is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BIRD is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BOINC is not set +# BR2_PACKAGE_BRCM_PATCHRAM_PLUS is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_C_ICAP is not set +BR2_PACKAGE_CAN_UTILS=y + +# +# cannelloni needs a toolchain w/ C++, threads, dynamic library, gcc >= 4.8 +# +# BR2_PACKAGE_CASYNC is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set + +# +# connman-gtk needs libgtk3 and a glibc or uClibc toolchain w/ wchar, threads, resolver, dynamic library +# +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CORKSCREW is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set + +# +# cups-filters needs a toolchain w/ wchar, C++, threads and dynamic library, gcc >= 4.8 +# +# BR2_PACKAGE_DANTE is not set +# BR2_PACKAGE_DARKHTTPD is not set +# BR2_PACKAGE_DEHYDRATED is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DRBD_UTILS is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EASYFRAMES is not set +# BR2_PACKAGE_EBTABLES is not set + +# +# ejabberd needs erlang, toolchain w/ C++ +# +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_ETHTOOL_PRETTY_PRINT=y +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FASTD is not set +# BR2_PACKAGE_FCGIWRAP is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_FREESWITCH is not set +# BR2_PACKAGE_FRR is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_GLOOX is not set +# BR2_PACKAGE_GLORYTUN is not set + +# +# gupnp-tools needs libgtk3 +# +# BR2_PACKAGE_HANS is not set +BR2_PACKAGE_HAPROXY_ARCH_SUPPORTS=y +# BR2_PACKAGE_HAPROXY is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTPDATE is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_IBRDTN_TOOLS is not set +# BR2_PACKAGE_IBRDTND is not set +# BR2_PACKAGE_IFMETRIC is not set +BR2_PACKAGE_IFTOP=y +BR2_PACKAGE_IFUPDOWN_SCRIPTS=y +# BR2_PACKAGE_IGD2_FOR_LINUX is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IODINE is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPERF3 is not set +BR2_PACKAGE_IPROUTE2=y +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IRSSI is not set +# BR2_PACKAGE_IW is not set + +# +# iwd needs a toolchain w/ threads, wchar, headers >= 4.12 +# +# BR2_PACKAGE_JANUS_GATEWAY is not set +# BR2_PACKAGE_KEEPALIVED is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_LEAFNODE2 is not set +# BR2_PACKAGE_LFT is not set +# BR2_PACKAGE_LFTP is not set +# BR2_PACKAGE_LIGHTTPD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set + +# +# linphone needs a toolchain w/ threads, C++, dynamic library, wchar, gcc >= 5 +# +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LINUXPTP is not set +# BR2_PACKAGE_LLDPD is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_LYNX is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINI_SNMPD is not set +# BR2_PACKAGE_MINIDLNA is not set +# BR2_PACKAGE_MINISSDPD is not set +# BR2_PACKAGE_MJPG_STREAMER is not set +# BR2_PACKAGE_MODEM_MANAGER is not set +BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS=y +# BR2_PACKAGE_MONGREL2 is not set +# BR2_PACKAGE_MONKEY is not set + +# +# mosh needs a toolchain w/ C++, threads, dynamic library, wchar, gcc >= 4.8 +# +# BR2_PACKAGE_MOSQUITTO is not set +# BR2_PACKAGE_MROUTED is not set + +# +# mrp needs a toolchain w/ threads, kernel headers >= 5.0 +# +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETCALC is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a glibc toolchain w/ headers >= 3.2, dynamic library, wchar, threads +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGINX is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NLOAD is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCP6C is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPEN_LLDP is not set +# BR2_PACKAGE_OPEN_PLC_UTILS is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENRESOLV is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PARPROUTED is not set + +# +# phidgetwebservice needs a toolchain w/ threads, dynamic library, gcc >= 4.9 +# +# BR2_PACKAGE_PHYTOOL is not set +# BR2_PACKAGE_PIMD is not set +# BR2_PACKAGE_PIXIEWPS is not set +# BR2_PACKAGE_POUND is not set +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PRIVOXY is not set +# BR2_PACKAGE_PROFTPD is not set + +# +# prosody needs the lua interpreter, dynamic library +# +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_PURE_FTPD is not set +# BR2_PACKAGE_PUTTY is not set +# BR2_PACKAGE_QUAGGA is not set + +# +# rabbitmq-server needs erlang +# +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_REAVER is not set +# BR2_PACKAGE_REDIR is not set +# BR2_PACKAGE_RP_PPPOE is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set + +# +# rtorrent needs a toolchain w/ C++, threads, wchar, gcc >= 4.9 +# +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_RYGEL is not set +# BR2_PACKAGE_S6_DNS is not set +# BR2_PACKAGE_S6_NETWORKING is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SHADOWSOCKS_LIBEV is not set +# BR2_PACKAGE_SHAIRPORT_SYNC is not set +# BR2_PACKAGE_SHELLINABOX is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SNGREP is not set +# BR2_PACKAGE_SNORT is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SOFTETHER is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SSDP_RESPONDER is not set +# BR2_PACKAGE_SSHGUARD is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_SSLH is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_SURICATA is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINC is not set +# BR2_PACKAGE_TINYPROXY is not set +# BR2_PACKAGE_TINYSSH is not set +# BR2_PACKAGE_TOR is not set +# BR2_PACKAGE_TRACEROUTE is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TUNCTL is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UACME is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_UFTP is not set +# BR2_PACKAGE_UHTTPD is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_UNBOUND is not set +# BR2_PACKAGE_UREDIR is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VDR is not set +# BR2_PACKAGE_VNSTAT is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WAVEMON is not set +# BR2_PACKAGE_WIREGUARD_TOOLS is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WPAN_TOOLS is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set + +# +# xtables-addons needs a Linux kernel to be built +# + +# +# znc needs a toolchain w/ C++, dynamic library, gcc >= 4.8, threads +# + +# +# Package managers +# + +# +# ------------------------------------------------------- +# + +# +# Please note: +# + +# +# - Buildroot does *not* generate binary packages, +# + +# +# - Buildroot does *not* install any package database. +# + +# +# * +# + +# +# It is up to you to provide those by yourself if you +# + +# +# want to use any of those package managers. +# + +# +# * +# + +# +# See the manual: +# + +# +# http://buildroot.org/manual.html#faq-no-binary-packages +# + +# +# ------------------------------------------------------- +# +# BR2_PACKAGE_OPKG is not set + +# +# Real-Time +# +# BR2_PACKAGE_XENOMAI is not set + +# +# Security +# +# BR2_PACKAGE_APPARMOR is not set +# BR2_PACKAGE_CHECKPOLICY is not set +# BR2_PACKAGE_IMA_EVM_UTILS is not set +# BR2_PACKAGE_OPTEE_BENCHMARK is not set +# BR2_PACKAGE_OPTEE_CLIENT is not set +# BR2_PACKAGE_PAXTEST is not set +# BR2_PACKAGE_REFPOLICY is not set +# BR2_PACKAGE_RESTORECOND is not set +# BR2_PACKAGE_SELINUX_PYTHON is not set +# BR2_PACKAGE_SEMODULE_UTILS is not set + +# +# setools needs python3 +# +# BR2_PACKAGE_URANDOM_SCRIPTS is not set + +# +# Shell and utilities +# + +# +# Shells +# +# BR2_PACKAGE_MKSH is not set +# BR2_PACKAGE_ZSH is not set + +# +# Utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_EASY_RSA is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PDMENU is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_QPRINT is not set +# BR2_PACKAGE_RANGER is not set +# BR2_PACKAGE_RTTY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TINI is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_TTYD is not set +# BR2_PACKAGE_XMLSTARLET is not set +# BR2_PACKAGE_XXHASH is not set +# BR2_PACKAGE_YTREE is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ANDROID_TOOLS is not set +# BR2_PACKAGE_ATOP is not set +# BR2_PACKAGE_ATTR is not set +# BR2_PACKAGE_BUBBLEWRAP is not set +# BR2_PACKAGE_CGROUPFS_MOUNT is not set + +# +# circus needs Python 3 and a toolchain w/ C++, threads +# +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_DAEMON is not set +# BR2_PACKAGE_DC3DD is not set +# BR2_PACKAGE_DDRESCUE is not set +# BR2_PACKAGE_DOCKER_COMPOSE is not set +# BR2_PACKAGE_EARLYOOM is not set + +# +# efibootmgr needs a toolchain w/ dynamic library, headers >= 3.12, gcc >= 4.9 +# +BR2_PACKAGE_EFIVAR_ARCH_SUPPORTS=y + +# +# efivar needs a toolchain w/ dynamic library, headers >= 3.12, gcc >= 4.9 +# + +# +# emlog needs a Linux kernel to be built +# +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_GETENT is not set +# BR2_PACKAGE_GKRELLM is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IBM_SW_TPM2 is not set +BR2_PACKAGE_INITSCRIPTS=y + +# +# iotop depends on python or python3 +# +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_IRQBALANCE is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_LIBOSTREE is not set +# BR2_PACKAGE_LXC is not set +# BR2_PACKAGE_MFOC is not set +# BR2_PACKAGE_MONIT is not set + +# +# multipath-tools needs udev and a uClibc or glibc toolchain w/ threads, dynamic library +# +# BR2_PACKAGE_NCDU is not set + +# +# netifrc needs openrc as init system +# +# BR2_PACKAGE_NUMACTL is not set +# BR2_PACKAGE_NUT is not set + +# +# pamtester depends on linux-pam +# + +# +# polkit needs a glibc or musl toolchain with C++, wchar, dynamic library, NPTL, gcc >= 4.9 +# +# BR2_PACKAGE_PROCRANK_LINUX is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_QUOTATOOL is not set +# BR2_PACKAGE_RAUC is not set +# BR2_PACKAGE_S6 is not set +# BR2_PACKAGE_S6_LINUX_INIT is not set +# BR2_PACKAGE_S6_LINUX_UTILS is not set +# BR2_PACKAGE_S6_PORTABLE_UTILS is not set +# BR2_PACKAGE_S6_RC is not set +# BR2_PACKAGE_SCRUB is not set +# BR2_PACKAGE_SCRYPT is not set + +# +# sdbusplus needs systemd and a toolchain w/ C++, gcc >= 7 +# +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs a python interpreter +# +# BR2_PACKAGE_SWUPDATE is not set +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +BR2_PACKAGE_SYSTEMD_BOOTCHART_ARCH_SUPPORTS=y +# BR2_PACKAGE_TPM_TOOLS is not set +# BR2_PACKAGE_TPM2_ABRMD is not set +# BR2_PACKAGE_TPM2_TOOLS is not set +# BR2_PACKAGE_TPM2_TOTP is not set +# BR2_PACKAGE_UNSCD is not set +BR2_PACKAGE_UTIL_LINUX=y +BR2_PACKAGE_UTIL_LINUX_LIBBLKID=y +BR2_PACKAGE_UTIL_LINUX_LIBFDISK=y +BR2_PACKAGE_UTIL_LINUX_LIBMOUNT=y +BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS=y +BR2_PACKAGE_UTIL_LINUX_LIBUUID=y +BR2_PACKAGE_UTIL_LINUX_BINARIES=y +BR2_PACKAGE_UTIL_LINUX_AGETTY=y +# BR2_PACKAGE_UTIL_LINUX_BFS is not set +# BR2_PACKAGE_UTIL_LINUX_CAL is not set +# BR2_PACKAGE_UTIL_LINUX_CHFN_CHSH is not set +# BR2_PACKAGE_UTIL_LINUX_CHMEM is not set +# BR2_PACKAGE_UTIL_LINUX_CRAMFS is not set +# BR2_PACKAGE_UTIL_LINUX_EJECT is not set +# BR2_PACKAGE_UTIL_LINUX_FALLOCATE is not set +# BR2_PACKAGE_UTIL_LINUX_FDFORMAT is not set +BR2_PACKAGE_UTIL_LINUX_FSCK=y +# BR2_PACKAGE_UTIL_LINUX_HARDLINK is not set +# BR2_PACKAGE_UTIL_LINUX_HWCLOCK is not set +# BR2_PACKAGE_UTIL_LINUX_IPCRM is not set +# BR2_PACKAGE_UTIL_LINUX_IPCS is not set +# BR2_PACKAGE_UTIL_LINUX_KILL is not set +# BR2_PACKAGE_UTIL_LINUX_LAST is not set +# BR2_PACKAGE_UTIL_LINUX_LINE is not set +# BR2_PACKAGE_UTIL_LINUX_LOGGER is not set +# BR2_PACKAGE_UTIL_LINUX_LOGIN is not set +# BR2_PACKAGE_UTIL_LINUX_LOSETUP is not set +# BR2_PACKAGE_UTIL_LINUX_LSLOGINS is not set +# BR2_PACKAGE_UTIL_LINUX_LSMEM is not set +# BR2_PACKAGE_UTIL_LINUX_MESG is not set +# BR2_PACKAGE_UTIL_LINUX_MINIX is not set +# BR2_PACKAGE_UTIL_LINUX_MORE is not set +BR2_PACKAGE_UTIL_LINUX_MOUNT=y +# BR2_PACKAGE_UTIL_LINUX_MOUNTPOINT is not set +# BR2_PACKAGE_UTIL_LINUX_NEWGRP is not set +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y +# BR2_PACKAGE_UTIL_LINUX_NSENTER is not set +# BR2_PACKAGE_UTIL_LINUX_PG is not set +# BR2_PACKAGE_UTIL_LINUX_PARTX is not set +# BR2_PACKAGE_UTIL_LINUX_PIVOT_ROOT is not set +# BR2_PACKAGE_UTIL_LINUX_RAW is not set +# BR2_PACKAGE_UTIL_LINUX_RENAME is not set +# BR2_PACKAGE_UTIL_LINUX_RFKILL is not set +# BR2_PACKAGE_UTIL_LINUX_RUNUSER is not set +# BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS is not set +# BR2_PACKAGE_UTIL_LINUX_SETPRIV is not set +# BR2_PACKAGE_UTIL_LINUX_SETTERM is not set +# BR2_PACKAGE_UTIL_LINUX_SU is not set +# BR2_PACKAGE_UTIL_LINUX_SULOGIN is not set +# BR2_PACKAGE_UTIL_LINUX_SWITCH_ROOT is not set +# BR2_PACKAGE_UTIL_LINUX_TUNELP is not set +# BR2_PACKAGE_UTIL_LINUX_UL is not set +# BR2_PACKAGE_UTIL_LINUX_UNSHARE is not set +# BR2_PACKAGE_UTIL_LINUX_UTMPDUMP is not set +# BR2_PACKAGE_UTIL_LINUX_UUIDD is not set +# BR2_PACKAGE_UTIL_LINUX_VIPW is not set +# BR2_PACKAGE_UTIL_LINUX_WALL is not set +# BR2_PACKAGE_UTIL_LINUX_WIPEFS is not set +# BR2_PACKAGE_UTIL_LINUX_WDCTL is not set +# BR2_PACKAGE_UTIL_LINUX_WRITE is not set +# BR2_PACKAGE_UTIL_LINUX_ZRAMCTL is not set +# BR2_PACKAGE_WATCHDOG is not set +# BR2_PACKAGE_XDG_DBUS_PROXY is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_MC is not set +# BR2_PACKAGE_MG is not set +# BR2_PACKAGE_MOST is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_AXFS is not set +# BR2_TARGET_ROOTFS_BTRFS is not set +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EROFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set +# BR2_TARGET_ROOTFS_F2FS is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +BR2_TARGET_ROOTFS_TAR=y +# BR2_TARGET_ROOTFS_TAR_NONE is not set +BR2_TARGET_ROOTFS_TAR_GZIP=y +# BR2_TARGET_ROOTFS_TAR_BZIP2 is not set +# BR2_TARGET_ROOTFS_TAR_LZ4 is not set +# BR2_TARGET_ROOTFS_TAR_LZMA is not set +# BR2_TARGET_ROOTFS_TAR_LZO is not set +# BR2_TARGET_ROOTFS_TAR_XZ is not set +BR2_TARGET_ROOTFS_TAR_OPTIONS="" +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_PEBSIZE=0x20000 +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 +BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y +BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE="board/loongson/ubinize-128m.cfg" +BR2_TARGET_ROOTFS_UBI_OPTS="" +BR2_TARGET_ROOTFS_UBIFS=y +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBIFS_MINIOSIZE=0x800 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=1600 +# BR2_TARGET_ROOTFS_UBIFS_RT_NONE is not set +# BR2_TARGET_ROOTFS_UBIFS_RT_ZLIB is not set +BR2_TARGET_ROOTFS_UBIFS_RT_LZO=y +BR2_TARGET_ROOTFS_UBIFS_NONE=y +# BR2_TARGET_ROOTFS_UBIFS_GZIP is not set +# BR2_TARGET_ROOTFS_UBIFS_BZIP2 is not set +# BR2_TARGET_ROOTFS_UBIFS_LZMA is not set +# BR2_TARGET_ROOTFS_UBIFS_LZO is not set +# BR2_TARGET_ROOTFS_UBIFS_XZ is not set +BR2_TARGET_ROOTFS_UBIFS_OPTS="" +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_UBOOT is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_ABOOTIMG is not set +# BR2_PACKAGE_HOST_AESPIPE is not set +# BR2_PACKAGE_HOST_ANDROID_TOOLS is not set +# BR2_PACKAGE_HOST_ASN1C is not set +# BR2_PACKAGE_HOST_BABELTRACE2 is not set +# BR2_PACKAGE_HOST_BTRFS_PROGS is not set +# BR2_PACKAGE_HOST_CHECKPOLICY is not set +# BR2_PACKAGE_HOST_CHECKSEC is not set +BR2_PACKAGE_HOST_CMAKE=y +# BR2_PACKAGE_HOST_CRAMFS is not set +# BR2_PACKAGE_HOST_CRYPTSETUP is not set +# BR2_PACKAGE_HOST_DBUS_PYTHON is not set +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +BR2_PACKAGE_HOST_DOSFSTOOLS=y +# BR2_PACKAGE_HOST_DOXYGEN is not set +# BR2_PACKAGE_HOST_DTC is not set +BR2_PACKAGE_HOST_E2FSPROGS=y +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_ENVIRONMENT_SETUP is not set +# BR2_PACKAGE_HOST_EROFS_UTILS is not set +# BR2_PACKAGE_HOST_EXFATPROGS is not set +# BR2_PACKAGE_HOST_F2FS_TOOLS is not set +# BR2_PACKAGE_HOST_FAKETIME is not set +# BR2_PACKAGE_HOST_FATCAT is not set +# BR2_PACKAGE_HOST_FWUP is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +BR2_PACKAGE_HOST_GENIMAGE=y +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_GNUPG is not set +BR2_PACKAGE_HOST_GO_HOST_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_GO_BOOTSTRAP_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y +# BR2_PACKAGE_HOST_GPTFDISK is not set +# BR2_PACKAGE_HOST_IMAGEMAGICK is not set +# BR2_PACKAGE_HOST_IMX_MKIMAGE is not set +# BR2_PACKAGE_HOST_JQ is not set +# BR2_PACKAGE_HOST_JSMIN is not set +# BR2_PACKAGE_HOST_KMOD is not set +# BR2_PACKAGE_HOST_LIBP11 is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_LTTNG_BABELTRACE is not set +# BR2_PACKAGE_HOST_MENDER_ARTIFACT is not set +# BR2_PACKAGE_HOST_MESON_TOOLS is not set +BR2_PACKAGE_HOST_MKPASSWD=y +# BR2_PACKAGE_HOST_MTD is not set +BR2_PACKAGE_HOST_MTOOLS=y +# BR2_PACKAGE_HOST_ODB is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_OPKG_UTILS is not set +# BR2_PACKAGE_HOST_PARTED is not set +BR2_PACKAGE_HOST_PATCHELF=y +# BR2_PACKAGE_HOST_PIGZ is not set +# BR2_PACKAGE_HOST_PKGCONF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_PYTHON is not set +# BR2_PACKAGE_HOST_PYTHON_CYTHON is not set +# BR2_PACKAGE_HOST_PYTHON_LXML is not set +# BR2_PACKAGE_HOST_PYTHON_SIX is not set +# BR2_PACKAGE_HOST_PYTHON_XLRD is not set +# BR2_PACKAGE_HOST_PYTHON3 is not set +BR2_PACKAGE_HOST_QEMU_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_QEMU_USER_ARCH_SUPPORTS=y +# BR2_PACKAGE_HOST_QEMU is not set +# BR2_PACKAGE_HOST_QORIQ_RCW is not set +# BR2_PACKAGE_HOST_RAUC is not set +BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_RUSTC_ARCH="mipsel" +# BR2_PACKAGE_HOST_RUSTC is not set +BR2_PACKAGE_PROVIDES_HOST_RUSTC="host-rust-bin" +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SDBUSPLUS is not set +# BR2_PACKAGE_HOST_SENTRY_CLI is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_SWIG is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +BR2_PACKAGE_HOST_UTIL_LINUX=y +# BR2_PACKAGE_HOST_UTP_COM is not set +# BR2_PACKAGE_HOST_VBOOT_UTILS is not set +# BR2_PACKAGE_HOST_XORRISO is not set +# BR2_PACKAGE_HOST_ZIP is not set +# BR2_PACKAGE_HOST_ZSTD is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2021.02 +# +# BR2_PACKAGE_SCONESERVER_HTTP_SCONESITE_IMAGE is not set +# BR2_PACKAGE_XSERVER_XORG_SERVER_KDRIVE_EVDEV is not set +# BR2_PACKAGE_XSERVER_XORG_SERVER_KDRIVE_KBD is not set +# BR2_PACKAGE_XSERVER_XORG_SERVER_KDRIVE_MOUSE is not set +# BR2_PACKAGE_MPD_AUDIOFILE is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_BINUTILS_VERSION_2_33_X is not set +# BR2_PACKAGE_LIBUPNP18 is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IMX_SDMA is not set +# BR2_GDB_VERSION_8_2 is not set +# BR2_PACKAGE_HOST_RCW is not set +# BR2_KERNEL_HEADERS_5_9 is not set +# BR2_KERNEL_HEADERS_5_8 is not set +# BR2_powerpc_601 is not set +# BR2_PACKAGE_TI_SGX_LIBGBM is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set + +# +# Legacy options removed in 2020.11 +# +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_LIBCROCO is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_SYSTEMD_JOURNAL_GATEWAY is not set +# BR2_TARGET_UBOOT_BOOT_SCRIPT is not set +# BR2_TARGET_UBOOT_ENVIMAGE is not set +# BR2_PACKAGE_KISMET_CLIENT is not set +# BR2_PACKAGE_KISMET_DRONE is not set +# BR2_GCC_VERSION_7_X is not set +# BR2_PACKAGE_GST1_VALIDATE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_YADIF is not set +# BR2_PACKAGE_GQVIEW is not set +# BR2_PACKAGE_WESTON_IMX is not set +# BR2_KERNEL_HEADERS_5_7 is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_XSERVER_XORG_SERVER_AIGLX is not set +# BR2_PACKAGE_AMD_CATALYST is not set +# BR2_PACKAGE_NVIDIA_TEGRA23 is not set +# BR2_GDB_VERSION_8_1 is not set + +# +# Legacy options removed in 2020.08 +# +# BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_AMD64 is not set +# BR2_KERNEL_HEADERS_5_6 is not set +# BR2_KERNEL_HEADERS_5_5 is not set +# BR2_BINUTILS_VERSION_2_31_X is not set +# BR2_PACKAGE_KODI_PERIPHERAL_STEAMCONTROLLER is not set + +# +# Legacy options removed in 2020.05 +# +# BR2_PACKAGE_WIRINGPI is not set +# BR2_PACKAGE_PYTHON_PYCRYPTO is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_COLLECTD_LVM is not set +# BR2_PACKAGE_PYTHON_PYASN is not set +# BR2_PACKAGE_PYTHON_PYASN_MODULES is not set +# BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_10K_QCA6174 is not set +# BR2_PACKAGE_QT5CANVAS3D is not set +# BR2_PACKAGE_KODI_LIBTHEORA is not set +# BR2_PACKAGE_CEGUI06 is not set +# BR2_GCC_VERSION_5_X is not set + +# +# Legacy options removed in 2020.02 +# +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_CLASSPATH is not set +# BR2_PACKAGE_QT5_VERSION_5_6 is not set +# BR2_PACKAGE_CURL is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_GSTREAMER_PLUGINS is not set +# BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_NV_SAMPLE_APPS is not set +# BR2_PACKAGE_FREERDP_GSTREAMER is not set +# BR2_PACKAGE_OPENCV3_WITH_GSTREAMER is not set +# BR2_PACKAGE_OPENCV_WITH_GSTREAMER is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_GCC_VERSION_OR1K is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_FIS is not set +BR2_PACKAGE_REFPOLICY_POLICY_VERSION="" +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_WIREGUARD is not set +# BR2_PACKAGE_PERL_NET_PING is not set +# BR2_PACKAGE_PERL_MIME_BASE64 is not set +# BR2_PACKAGE_PERL_DIGEST_MD5 is not set +# BR2_PACKAGE_ERLANG_P1_ICONV is not set +# BR2_KERNEL_HEADERS_5_3 is not set +# BR2_PACKAGE_PYTHON_SCAPY3K is not set +# BR2_BINUTILS_VERSION_2_30_X is not set +# BR2_PACKAGE_RPI_USERLAND_START_VCFILED is not set + +# +# Legacy options removed in 2019.11 +# +# BR2_PACKAGE_OPENVMTOOLS_PROCPS is not set +# BR2_PACKAGE_ALLJOYN is not set +# BR2_PACKAGE_ALLJOYN_BASE is not set +# BR2_PACKAGE_ALLJOYN_BASE_CONTROLPANEL is not set +# BR2_PACKAGE_ALLJOYN_BASE_NOTIFICATION is not set +# BR2_PACKAGE_ALLJOYN_BASE_ONBOARDING is not set +# BR2_PACKAGE_ALLJOYN_TCL_BASE is not set +# BR2_PACKAGE_ALLJOYN_TCL is not set +BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS="" +# BR2_PACKAGE_PYTHON_PYSNMP_APPS is not set +# BR2_KERNEL_HEADERS_5_2 is not set +# BR2_TARGET_RISCV_PK is not set +# BR2_PACKAGE_SQLITE_STAT3 is not set +# BR2_KERNEL_HEADERS_5_1 is not set +# BR2_PACKAGE_DEVMEM2 is not set +# BR2_PACKAGE_USTR is not set +# BR2_PACKAGE_KODI_SCREENSAVER_PLANESTATE is not set +# BR2_PACKAGE_KODI_VISUALISATION_WAVEFORHUE is not set +# BR2_PACKAGE_KODI_AUDIODECODER_OPUS is not set +# BR2_PACKAGE_MESA3D_OSMESA is not set +# BR2_PACKAGE_HOSTAPD_DRIVER_RTW is not set +# BR2_PACKAGE_WPA_SUPPLICANT_DBUS_NEW is not set +# BR2_PACKAGE_WPA_SUPPLICANT_DBUS_OLD is not set + +# +# Legacy options removed in 2019.08 +# +# BR2_TARGET_TS4800_MBRBOOT is not set +# BR2_PACKAGE_LIBAMCODEC is not set +# BR2_PACKAGE_ODROID_SCRIPTS is not set +# BR2_PACKAGE_ODROID_MALI is not set +# BR2_PACKAGE_KODI_PLATFORM_AML is not set +# BR2_GCC_VERSION_6_X is not set +# BR2_GCC_VERSION_4_9_X is not set +# BR2_GDB_VERSION_7_12 is not set +# BR2_PACKAGE_XAPP_MKFONTDIR is not set +# BR2_GDB_VERSION_8_0 is not set +# BR2_KERNEL_HEADERS_4_20 is not set +# BR2_KERNEL_HEADERS_5_0 is not set + +# +# Legacy options removed in 2019.05 +# +# BR2_CSKY_DSP is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_COMPOSITOR is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_IQA is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_OPENCV is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_STEREO is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VCD is not set +# BR2_PACKAGE_LUNIT is not set +# BR2_PACKAGE_FFMPEG_FFSERVER is not set +# BR2_PACKAGE_LIBUMP is not set +# BR2_PACKAGE_SUNXI_MALI is not set +# BR2_BINUTILS_VERSION_2_29_X is not set +# BR2_BINUTILS_VERSION_2_28_X is not set +# BR2_PACKAGE_GST_PLUGINS_BAD_PLUGIN_APEXSINK is not set + +# +# Legacy options removed in 2019.02 +# +# BR2_PACKAGE_QT is not set +# BR2_PACKAGE_QTUIO is not set +# BR2_PACKAGE_PINENTRY_QT4 is not set +# BR2_PACKAGE_POPPLER_QT is not set +# BR2_PACKAGE_OPENCV3_WITH_QT is not set +# BR2_PACKAGE_OPENCV_WITH_QT is not set +# BR2_PACKAGE_AMD_CATALYST_CCCLE is not set +# BR2_PACKAGE_SDL_QTOPIA is not set +# BR2_PACKAGE_PYTHON_PYQT is not set +# BR2_PACKAGE_LUACRYPTO is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_BOOST_SIGNALS is not set +# BR2_PACKAGE_FFTW_PRECISION_SINGLE is not set +# BR2_PACKAGE_FFTW_PRECISION_DOUBLE is not set +# BR2_PACKAGE_FFTW_PRECISION_LONG_DOUBLE is not set +# BR2_PACKAGE_LUA_5_2 is not set +# BR2_TARGET_GENERIC_PASSWD_MD5 is not set + +# +# Legacy options removed in 2018.11 +# +# BR2_TARGET_XLOADER is not set +# BR2_PACKAGE_TIDSP_BINARIES is not set +# BR2_PACKAGE_DSP_TOOLS is not set +# BR2_PACKAGE_GST_DSP is not set +# BR2_PACKAGE_BOOTUTILS is not set +# BR2_PACKAGE_EXPEDITE is not set +# BR2_PACKAGE_MESA3D_OPENGL_TEXTURE_FLOAT is not set +# BR2_KERNEL_HEADERS_4_10 is not set +# BR2_KERNEL_HEADERS_4_11 is not set +# BR2_KERNEL_HEADERS_4_12 is not set +# BR2_KERNEL_HEADERS_4_13 is not set +# BR2_KERNEL_HEADERS_4_15 is not set +# BR2_KERNEL_HEADERS_4_17 is not set +# BR2_PACKAGE_LIBNFTNL_XML is not set +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_4_1 is not set +# BR2_KERNEL_HEADERS_4_16 is not set +# BR2_KERNEL_HEADERS_4_18 is not set + +# +# Legacy options removed in 2018.08 +# +# BR2_PACKAGE_DOCKER_ENGINE_STATIC_CLIENT is not set +# BR2_PACKAGE_XPROTO_APPLEWMPROTO is not set +# BR2_PACKAGE_XPROTO_BIGREQSPROTO is not set +# BR2_PACKAGE_XPROTO_COMPOSITEPROTO is not set +# BR2_PACKAGE_XPROTO_DAMAGEPROTO is not set +# BR2_PACKAGE_XPROTO_DMXPROTO is not set +# BR2_PACKAGE_XPROTO_DRI2PROTO is not set +# BR2_PACKAGE_XPROTO_DRI3PROTO is not set +# BR2_PACKAGE_XPROTO_FIXESPROTO is not set +# BR2_PACKAGE_XPROTO_FONTCACHEPROTO is not set +# BR2_PACKAGE_XPROTO_FONTSPROTO is not set +# BR2_PACKAGE_XPROTO_GLPROTO is not set +# BR2_PACKAGE_XPROTO_INPUTPROTO is not set +# BR2_PACKAGE_XPROTO_KBPROTO is not set +# BR2_PACKAGE_XPROTO_PRESENTPROTO is not set +# BR2_PACKAGE_XPROTO_RANDRPROTO is not set +# BR2_PACKAGE_XPROTO_RECORDPROTO is not set +# BR2_PACKAGE_XPROTO_RENDERPROTO is not set +# BR2_PACKAGE_XPROTO_RESOURCEPROTO is not set +# BR2_PACKAGE_XPROTO_SCRNSAVERPROTO is not set +# BR2_PACKAGE_XPROTO_VIDEOPROTO is not set +# BR2_PACKAGE_XPROTO_WINDOWSWMPROTO is not set +# BR2_PACKAGE_XPROTO_XCMISCPROTO is not set +# BR2_PACKAGE_XPROTO_XEXTPROTO is not set +# BR2_PACKAGE_XPROTO_XF86BIGFONTPROTO is not set +# BR2_PACKAGE_XPROTO_XF86DGAPROTO is not set +# BR2_PACKAGE_XPROTO_XF86DRIPROTO is not set +# BR2_PACKAGE_XPROTO_XF86VIDMODEPROTO is not set +# BR2_PACKAGE_XPROTO_XINERAMAPROTO is not set +# BR2_PACKAGE_XPROTO_XPROTO is not set +# BR2_PACKAGE_XPROTO_XPROXYMANAGEMENTPROTOCOL is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_OPENGL is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_GLES2 is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_GLX is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_EGL is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_X11 is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_WAYLAND is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_DISPMANX is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_AUDIOMIXER is not set +# BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_LAME is not set +# BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_MPG123 is not set +# BR2_GDB_VERSION_7_11 is not set +# BR2_GDB_VERSION_7_10 is not set + +# +# Legacy options removed in 2018.05 +# +# BR2_PACKAGE_MEDIAART_BACKEND_NONE is not set +# BR2_PACKAGE_MEDIAART_BACKEND_GDK_PIXBUF is not set +# BR2_PACKAGE_TI_SGX_AM335X is not set +# BR2_PACKAGE_TI_SGX_AM437X is not set +# BR2_PACKAGE_TI_SGX_AM4430 is not set +# BR2_PACKAGE_TI_SGX_AM5430 is not set +# BR2_PACKAGE_JANUS_AUDIO_BRIDGE is not set +# BR2_PACKAGE_JANUS_ECHO_TEST is not set +# BR2_PACKAGE_JANUS_RECORDPLAY is not set +# BR2_PACKAGE_JANUS_SIP_GATEWAY is not set +# BR2_PACKAGE_JANUS_STREAMING is not set +# BR2_PACKAGE_JANUS_TEXT_ROOM is not set +# BR2_PACKAGE_JANUS_VIDEO_CALL is not set +# BR2_PACKAGE_JANUS_VIDEO_ROOM is not set +# BR2_PACKAGE_JANUS_MQTT is not set +# BR2_PACKAGE_JANUS_RABBITMQ is not set +# BR2_PACKAGE_JANUS_REST is not set +# BR2_PACKAGE_JANUS_UNIX_SOCKETS is not set +# BR2_PACKAGE_JANUS_WEBSOCKETS is not set +# BR2_PACKAGE_IPSEC_SECCTX_DISABLE is not set +# BR2_PACKAGE_IPSEC_SECCTX_ENABLE is not set +# BR2_PACKAGE_IPSEC_SECCTX_KERNEL is not set +# BR2_PACKAGE_LIBTFDI_CPP is not set +# BR2_PACKAGE_JQUERY_UI_THEME_BLACK_TIE is not set +# BR2_PACKAGE_JQUERY_UI_THEME_BLITZER is not set +# BR2_PACKAGE_JQUERY_UI_THEME_CUPERTINO is not set +# BR2_PACKAGE_JQUERY_UI_THEME_DARK_HIVE is not set +# BR2_PACKAGE_JQUERY_UI_THEME_DOT_LUV is not set +# BR2_PACKAGE_JQUERY_UI_THEME_EGGPLANT is not set +# BR2_PACKAGE_JQUERY_UI_THEME_EXCITE_BIKE is not set +# BR2_PACKAGE_JQUERY_UI_THEME_FLICK is not set +# BR2_PACKAGE_JQUERY_UI_THEME_HOT_SNEAKS is not set +# BR2_PACKAGE_JQUERY_UI_THEME_HUMANITY is not set +# BR2_PACKAGE_JQUERY_UI_THEME_LE_FROG is not set +# BR2_PACKAGE_JQUERY_UI_THEME_MINT_CHOC is not set +# BR2_PACKAGE_JQUERY_UI_THEME_OVERCAST is not set +# BR2_PACKAGE_JQUERY_UI_THEME_PEPPER_GRINDER is not set +# BR2_PACKAGE_JQUERY_UI_THEME_REDMOND is not set +# BR2_PACKAGE_JQUERY_UI_THEME_SMOOTHNESS is not set +# BR2_PACKAGE_JQUERY_UI_THEME_SOUTH_STREET is not set +# BR2_PACKAGE_JQUERY_UI_THEME_START is not set +# BR2_PACKAGE_JQUERY_UI_THEME_SUNNY is not set +# BR2_PACKAGE_JQUERY_UI_THEME_SWANKY_PURSE is not set +# BR2_PACKAGE_JQUERY_UI_THEME_TRONTASTIC is not set +# BR2_PACKAGE_JQUERY_UI_THEME_UI_DARKNESS is not set +# BR2_PACKAGE_JQUERY_UI_THEME_UI_LIGHTNESS is not set +# BR2_PACKAGE_JQUERY_UI_THEME_VADER is not set +# BR2_PACKAGE_BLUEZ5_PLUGINS_HEALTH is not set +# BR2_PACKAGE_BLUEZ5_PLUGINS_MIDI is not set +# BR2_PACKAGE_BLUEZ5_PLUGINS_NFC is not set +# BR2_PACKAGE_BLUEZ5_PLUGINS_SAP is not set +# BR2_PACKAGE_BLUEZ5_PLUGINS_SIXAXIS is not set +# BR2_PACKAGE_TRANSMISSION_REMOTE is not set +# BR2_PACKAGE_LIBKCAPI_APPS is not set +# BR2_PACKAGE_MPLAYER is not set +# BR2_PACKAGE_MPLAYER_MPLAYER is not set +# BR2_PACKAGE_MPLAYER_MENCODER is not set +# BR2_PACKAGE_LIBPLAYER_MPLAYER is not set +# BR2_PACKAGE_IQVLINUX is not set +# BR2_BINFMT_FLAT_SEP_DATA is not set +# BR2_bfin is not set +# BR2_PACKAGE_KODI_ADSP_BASIC is not set +# BR2_PACKAGE_KODI_ADSP_FREESURROUND is not set + +# +# Legacy options removed in 2018.02 +# +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_BINUTILS_VERSION_2_27_X is not set +# BR2_PACKAGE_EEPROG is not set +# BR2_PACKAGE_GNUPG2_GPGV2 is not set +# BR2_PACKAGE_IMX_GPU_VIV_APITRACE is not set +# BR2_PACKAGE_IMX_GPU_VIV_G2D is not set + +# +# Legacy options removed in 2017.11 +# +# BR2_PACKAGE_RFKILL is not set +# BR2_PACKAGE_UTIL_LINUX_RESET is not set +# BR2_PACKAGE_POLICYCOREUTILS_AUDIT2ALLOW is not set +# BR2_PACKAGE_POLICYCOREUTILS_RESTORECOND is not set +# BR2_PACKAGE_SEPOLGEN is not set +# BR2_PACKAGE_OPENOBEX_BLUEZ is not set +# BR2_PACKAGE_OPENOBEX_LIBUSB is not set +# BR2_PACKAGE_OPENOBEX_APPS is not set +# BR2_PACKAGE_OPENOBEX_SYSLOG is not set +# BR2_PACKAGE_OPENOBEX_DUMP is not set +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_UTIL_LINUX_LOGIN_UTILS is not set + +# +# Legacy options removed in 2017.08 +# +# BR2_TARGET_GRUB is not set +# BR2_PACKAGE_SIMICSFS is not set +# BR2_BINUTILS_VERSION_2_26_X is not set +BR2_XTENSA_OVERLAY_DIR="" +BR2_XTENSA_CUSTOM_NAME="" +# BR2_PACKAGE_HOST_MKE2IMG is not set +BR2_TARGET_ROOTFS_EXT2_BLOCKS=0 +BR2_TARGET_ROOTFS_EXT2_EXTRA_INODES=0 +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_CDXAPARSE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DATAURISRC is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DCCP is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_HDVPARSE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MVE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_NUVDEMUX is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_PATCHDETECT is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SDI is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_TTA is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VIDEOMEASURE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_APEXSINK is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SDL is not set +# BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_MAD is not set +# BR2_STRIP_none is not set +# BR2_PACKAGE_BEECRYPT_CPP is not set +# BR2_PACKAGE_SPICE_CLIENT is not set +# BR2_PACKAGE_SPICE_GUI is not set +# BR2_PACKAGE_SPICE_TUNNEL is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_INPUT_TOOLS_INPUTATTACH is not set +# BR2_PACKAGE_INPUT_TOOLS_JSCAL is not set +# BR2_PACKAGE_INPUT_TOOLS_JSTEST is not set +# BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH is not set +# BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_X86 is not set +# BR2_GCC_VERSION_4_8_X is not set + +# +# Legacy options removed in 2017.05 +# +# BR2_PACKAGE_SUNXI_MALI_R2P4 is not set +# BR2_PACKAGE_NODEJS_MODULES_COFFEESCRIPT is not set +# BR2_PACKAGE_NODEJS_MODULES_EXPRESS is not set +# BR2_PACKAGE_BLUEZ5_UTILS_GATTTOOL is not set +# BR2_PACKAGE_OPENOCD_FT2XXX is not set +# BR2_PACKAGE_KODI_RTMPDUMP is not set +# BR2_PACKAGE_KODI_VISUALISATION_FOUNTAIN is not set +# BR2_PACKAGE_PORTMAP is not set +# BR2_BINUTILS_VERSION_2_25_X is not set +# BR2_TOOLCHAIN_BUILDROOT_INET_RPC is not set +BR2_TARGET_ROOTFS_EXT2_EXTRA_BLOCKS=0 +# BR2_PACKAGE_SYSTEMD_KDBUS is not set +# BR2_PACKAGE_POLARSSL is not set +# BR2_NBD_CLIENT is not set +# BR2_NBD_SERVER is not set +# BR2_PACKAGE_GMOCK is not set +# BR2_KERNEL_HEADERS_4_8 is not set +# BR2_KERNEL_HEADERS_3_18 is not set +# BR2_GLIBC_VERSION_2_22 is not set + +# +# Legacy options removed in 2017.02 +# +# BR2_PACKAGE_PERL_DB_FILE is not set +# BR2_KERNEL_HEADERS_4_7 is not set +# BR2_KERNEL_HEADERS_4_6 is not set +# BR2_KERNEL_HEADERS_4_5 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +# BR2_TOOLCHAIN_EXTERNAL_MUSL_CROSS is not set +# BR2_UCLIBC_INSTALL_TEST_SUITE is not set +# BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_TOOLCHAIN_EXTERNAL_ARAGO_ARMV7A is not set +# BR2_TOOLCHAIN_EXTERNAL_ARAGO_ARMV5TE is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_GDB_VERSION_7_9 is not set + +# +# Legacy options removed in 2016.11 +# +# BR2_PACKAGE_PHP_SAPI_CLI_CGI is not set +# BR2_PACKAGE_PHP_SAPI_CLI_FPM is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_WEBKITGTK24 is not set +# BR2_PACKAGE_TORSMO is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_KERNEL_HEADERS_4_3 is not set +# BR2_KERNEL_HEADERS_4_2 is not set +# BR2_PACKAGE_KODI_ADDON_XVDR is not set +# BR2_PACKAGE_IPKG is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_BINUTILS_VERSION_2_24_X is not set +# BR2_PACKAGE_WESTON_RPI is not set +# BR2_GCC_VERSION_4_8_ARC is not set +# BR2_KERNEL_HEADERS_4_0 is not set +# BR2_KERNEL_HEADERS_3_19 is not set +# BR2_PACKAGE_LIBEVAS_GENERIC_LOADERS is not set +# BR2_PACKAGE_ELEMENTARY is not set +# BR2_LINUX_KERNEL_CUSTOM_LOCAL is not set + +# +# Legacy options removed in 2016.08 +# +# BR2_PACKAGE_EFL_JP2K is not set +# BR2_PACKAGE_SYSTEMD_COMPAT is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_LIVEADDER is not set +# BR2_PACKAGE_LIBFSLVPUWRAP is not set +# BR2_PACKAGE_LIBFSLPARSER is not set +# BR2_PACKAGE_LIBFSLCODEC is not set +# BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE_FIT_SIGNATURE_SUPPORT is not set +# BR2_PTHREADS_OLD is not set +# BR2_BINUTILS_VERSION_2_23_X is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_GDB_VERSION_7_8 is not set + +# +# Legacy options removed in 2016.05 +# +# BR2_PACKAGE_OPENVPN_CRYPTO_POLARSSL is not set +# BR2_PACKAGE_NGINX_HTTP_SPDY_MODULE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_RTP is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MPG123 is not set +# BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC is not set +# BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC_E500V2 is not set +# BR2_x86_i386 is not set +# BR2_PACKAGE_QT5QUICK1 is not set +BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR="" +# BR2_PACKAGE_XDRIVER_XF86_INPUT_VOID is not set +# BR2_KERNEL_HEADERS_3_17 is not set +# BR2_GDB_VERSION_7_7 is not set +# BR2_PACKAGE_FOOMATIC_FILTERS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_KODI_WAVPACK is not set +# BR2_PACKAGE_KODI_RSXS is not set +# BR2_PACKAGE_KODI_GOOM is not set +# BR2_PACKAGE_SYSTEMD_ALL_EXTRAS is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_PACKAGE_SQLITE_READLINE is not set + +# +# Legacy options removed in 2016.02 +# +# BR2_PACKAGE_DOVECOT_BZIP2 is not set +# BR2_PACKAGE_DOVECOT_ZLIB is not set +# BR2_PACKAGE_E2FSPROGS_FINDFS is not set +# BR2_PACKAGE_OPENPOWERLINK_DEBUG_LEVEL is not set +# BR2_PACKAGE_OPENPOWERLINK_KERNEL_MODULE is not set +# BR2_PACKAGE_OPENPOWERLINK_LIBPCAP is not set +# BR2_LINUX_KERNEL_SAME_AS_HEADERS is not set +# BR2_PACKAGE_CUPS_PDFTOPS is not set +# BR2_KERNEL_HEADERS_3_16 is not set +# BR2_PACKAGE_PYTHON_PYXML is not set +# BR2_ENABLE_SSP is not set +# BR2_PACKAGE_DIRECTFB_CLE266 is not set +# BR2_PACKAGE_DIRECTFB_UNICHROME is not set +# BR2_PACKAGE_LIBELEMENTARY is not set +# BR2_PACKAGE_LIBEINA is not set +# BR2_PACKAGE_LIBEET is not set +# BR2_PACKAGE_LIBEVAS is not set +# BR2_PACKAGE_LIBECORE is not set +# BR2_PACKAGE_LIBEDBUS is not set +# BR2_PACKAGE_LIBEFREET is not set +# BR2_PACKAGE_LIBEIO is not set +# BR2_PACKAGE_LIBEMBRYO is not set +# BR2_PACKAGE_LIBEDJE is not set +# BR2_PACKAGE_LIBETHUMB is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_BR2_PACKAGE_NODEJS_0_10_X is not set +# BR2_BR2_PACKAGE_NODEJS_0_12_X is not set +# BR2_BR2_PACKAGE_NODEJS_4_X is not set + +# +# Legacy options removed in 2015.11 +# +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_REAL is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_SCHIFRA is not set +# BR2_PACKAGE_ZXING is not set +# BR2_PACKAGE_BLACKBOX is not set +# BR2_KERNEL_HEADERS_3_0 is not set +# BR2_KERNEL_HEADERS_3_11 is not set +# BR2_KERNEL_HEADERS_3_13 is not set +# BR2_KERNEL_HEADERS_3_15 is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_ANDI is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_BLTLOAD is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_CPULOAD is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_DATABUFFER is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_DIOLOAD is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_DOK is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_DRIVERTEST is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_FIRE is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_FLIP is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_FONTS is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_INPUT is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_JOYSTICK is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_KNUCKLES is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_LAYER is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_MATRIX is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_MATRIX_WATER is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_NEO is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_NETLOAD is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_PALETTE is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_PARTICLE is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_PORTER is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_STRESS is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_TEXTURE is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_VIDEO is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_VIDEO_PARTICLE is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_WINDOW is not set +# BR2_PACKAGE_KOBS_NG is not set +# BR2_PACKAGE_SAWMAN is not set +# BR2_PACKAGE_DIVINE is not set + +# +# Legacy options removed in 2015.08 +# +# BR2_PACKAGE_KODI_PVR_ADDONS is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +# BR2_BINUTILS_VERSION_2_24 is not set +# BR2_BINUTILS_VERSION_2_25 is not set +# BR2_PACKAGE_PERF is not set +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_PACKAGE_GPU_VIV_BIN_MX6Q is not set +# BR2_TARGET_UBOOT_NETWORK is not set diff --git a/configs/ls1b20_mini_busybox_gcc4.9_defconfig b/configs/ls1b20_mini_busybox_gcc4.9_defconfig new file mode 100644 index 00000000..e99461fe --- /dev/null +++ b/configs/ls1b20_mini_busybox_gcc4.9_defconfig @@ -0,0 +1,51 @@ +BR2_mipsel=y +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/buildroot-2016.02-glibc-gcc-4.9.x-mips32-nofpu/output/host/usr/" +BR2_TOOLCHAIN_EXTERNAL_GCC_4_9=y +BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_18=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="huolong" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot for the LS1B20-HuoLong" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_ROOTFS_MERGED_USR=y +BR2_TARGET_GENERIC_ROOT_PASSWD="loongson" +BR2_TARGET_GENERIC_GETTY_PORT="ttyS5" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +# BR2_ENABLE_LOCALE_PURGE is not set +BR2_ROOTFS_OVERLAY="board/loongson/ls1b20-huolong/rootfs_4_7_gcc_overlay" +BR2_PACKAGE_DIRECTFB=y +BR2_PACKAGE_DBUS=y +BR2_PACKAGE_RTC_TOOLS=y +BR2_PACKAGE_SQLITE=y +BR2_PACKAGE_SQLITE_STAT4=y +BR2_PACKAGE_SQLITE_ENABLE_COLUMN_METADATA=y +BR2_PACKAGE_SQLITE_ENABLE_FTS3=y +BR2_PACKAGE_SQLITE_ENABLE_JSON1=y +BR2_PACKAGE_SQLITE_ENABLE_UNLOCK_NOTIFY=y +BR2_PACKAGE_SQLITE_SECURE_DELETE=y +BR2_PACKAGE_SQLITE_NO_SYNC=y +BR2_PACKAGE_PCRE2=y +BR2_PACKAGE_PCRE2_16=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IFTOP=y +BR2_PACKAGE_IPROUTE2=y +# BR2_PACKAGE_URANDOM_SCRIPTS is not set +BR2_PACKAGE_UTIL_LINUX_BINARIES=y +BR2_PACKAGE_UTIL_LINUX_AGETTY=y +BR2_PACKAGE_UTIL_LINUX_FSCK=y +BR2_PACKAGE_UTIL_LINUX_MOUNT=y +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y +BR2_TARGET_ROOTFS_TAR_GZIP=y +BR2_TARGET_ROOTFS_UBI=y +BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 +BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y +BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE="board/loongson/ubinize-128m.cfg" +BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 +BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=1600 +BR2_PACKAGE_HOST_CMAKE=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/microchip_sam9x60ek_mmc_defconfig b/configs/microchip_sam9x60ek_mmc_defconfig new file mode 100644 index 00000000..b389320e --- /dev/null +++ b/configs/microchip_sam9x60ek_mmc_defconfig @@ -0,0 +1,27 @@ +BR2_arm=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y +BR2_TARGET_GENERIC_HOSTNAME="sam9x60ek" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/microchip/sam9x60ek_mmc/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,linux-at91,linux4sam-2020.04)/linux-linux4sam-2020.04.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="at91_dt" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91-sam9x60ek" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,at91bootstrap,v3.10.0)/at91bootstrap-v3.10.0.tar.gz" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="sam9x60eksd_uboot" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,u-boot-at91,linux4sam-2020.04)/u-boot-at91-linux4sam-2020.04.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="sam9x60ek_mmc" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/microchip_sam9x60ek_mmc_dev_defconfig b/configs/microchip_sam9x60ek_mmc_dev_defconfig new file mode 100644 index 00000000..8b6ecfb7 --- /dev/null +++ b/configs/microchip_sam9x60ek_mmc_dev_defconfig @@ -0,0 +1,81 @@ +BR2_arm=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y +BR2_PTHREAD_DEBUG=y +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="sam9x60ek" +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/microchip/sam9x60ek_mmc/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,linux-at91,linux4sam-2020.04)/linux-linux4sam-2020.04.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="at91_dt" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91-sam9x60ek" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_ALSACONF=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_FFMPEG=y +BR2_PACKAGE_FFMPEG_GPL=y +BR2_PACKAGE_FFMPEG_SWSCALE=y +BR2_PACKAGE_MPG123=y +BR2_PACKAGE_BZIP2=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_UNZIP=y +BR2_PACKAGE_XZ=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_GDB=y +BR2_PACKAGE_LMBENCH=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FATLABEL=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_MMC_UTILS=y +BR2_PACKAGE_MTD=y +BR2_PACKAGE_WILC1000_FIRMWARE=y +BR2_PACKAGE_EVTEST=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_SETSERIAL=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_USBUTILS=y +BR2_PACKAGE_LIBSYSFS=y +BR2_PACKAGE_LIBDRM=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_DTC=y +BR2_PACKAGE_DTC_PROGRAMS=y +BR2_PACKAGE_ARGP_STANDALONE=y +BR2_PACKAGE_BLUEZ5_UTILS=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES=y +BR2_PACKAGE_IW=y +BR2_PACKAGE_LRZSZ=y +BR2_PACKAGE_MII_DIAG=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_WGET=y +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_BASH=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_VIM=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,at91bootstrap,v3.10.0)/at91bootstrap-v3.10.0.tar.gz" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="sam9x60eksd_uboot" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,u-boot-at91,linux4sam-2020.04)/u-boot-at91-linux4sam-2020.04.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="sam9x60ek_mmc" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/microchip_sama5d27_wlsom1_ek_mmc_defconfig b/configs/microchip_sama5d27_wlsom1_ek_mmc_defconfig new file mode 100644 index 00000000..3bba4f6e --- /dev/null +++ b/configs/microchip_sama5d27_wlsom1_ek_mmc_defconfig @@ -0,0 +1,30 @@ +BR2_arm=y +BR2_cortex_a5=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_INSTRUCTIONS_THUMB2=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/atmel/sama5d27_wlsom1_ek_mmc/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,linux-at91,linux4sam_6.2)/linux-linux4sam_6.2.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="sama5" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91-sama5d27_wlsom1_ek" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,at91bootstrap,v3.9.0)/at91bootstrap-v3.9.0.tar.gz" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="sama5d27_wlsom1_eksd_uboot" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,u-boot-at91,linux4sam_6.2)/u-boot-at91-linux4sam_6.2.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="sama5d27_wlsom1_ek_mmc" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/microchip_sama5d27_wlsom1_ek_mmc_dev_defconfig b/configs/microchip_sama5d27_wlsom1_ek_mmc_dev_defconfig new file mode 100644 index 00000000..031a533b --- /dev/null +++ b/configs/microchip_sama5d27_wlsom1_ek_mmc_dev_defconfig @@ -0,0 +1,85 @@ +BR2_arm=y +BR2_cortex_a5=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_INSTRUCTIONS_THUMB2=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y +BR2_PTHREAD_DEBUG=y +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/atmel/sama5d27_wlsom1_ek_mmc/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,linux-at91,linux4sam_6.2)/linux-linux4sam_6.2.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="sama5" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="at91-sama5d27_wlsom1_ek" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_ALSACONF=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +BR2_PACKAGE_FFMPEG=y +BR2_PACKAGE_FFMPEG_GPL=y +BR2_PACKAGE_FFMPEG_SWSCALE=y +BR2_PACKAGE_MPG123=y +BR2_PACKAGE_BZIP2=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_UNZIP=y +BR2_PACKAGE_XZ=y +BR2_PACKAGE_ZIP=y +BR2_PACKAGE_GDB=y +BR2_PACKAGE_LMBENCH=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FATLABEL=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y +BR2_PACKAGE_MMC_UTILS=y +BR2_PACKAGE_MTD=y +BR2_PACKAGE_WILC1000_FIRMWARE=y +BR2_PACKAGE_EVTEST=y +BR2_PACKAGE_I2C_TOOLS=y +BR2_PACKAGE_SETSERIAL=y +BR2_PACKAGE_SPI_TOOLS=y +BR2_PACKAGE_USBUTILS=y +BR2_PACKAGE_LIBSYSFS=y +BR2_PACKAGE_LIBDRM=y +BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y +BR2_PACKAGE_DTC=y +BR2_PACKAGE_DTC_PROGRAMS=y +BR2_PACKAGE_ARGP_STANDALONE=y +BR2_PACKAGE_BLUEZ5_UTILS=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CAN_UTILS=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IPERF=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES=y +BR2_PACKAGE_IW=y +BR2_PACKAGE_LRZSZ=y +BR2_PACKAGE_MII_DIAG=y +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_WGET=y +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_BASH=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_VIM=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +BR2_TARGET_AT91BOOTSTRAP3=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL=y +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,at91bootstrap,v3.9.0)/at91bootstrap-v3.9.0.tar.gz" +BR2_TARGET_AT91BOOTSTRAP3_DEFCONFIG="sama5d27_wlsom1_eksd_uboot" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,linux4sam,u-boot-at91,linux4sam_6.2)/u-boot-at91-linux4sam_6.2.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="sama5d27_wlsom1_ek_mmc" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/minnowboard_max-graphical_defconfig b/configs/minnowboard_max-graphical_defconfig new file mode 100644 index 00000000..3b769ca6 --- /dev/null +++ b/configs/minnowboard_max-graphical_defconfig @@ -0,0 +1,76 @@ +# Architecture +BR2_x86_64=y +BR2_x86_silvermont=y + +# Toolchain +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y +BR2_TOOLCHAIN_BUILDROOT_LOCALE=y +BR2_TOOLCHAIN_BUILDROOT_CXX=y +# needed for TARGET_GRUB2 +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y + +# System configuration +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y +BR2_ROOTFS_OVERLAY="board/minnowboard/fs-overlay-graphical" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/minnowboard/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/minnowboard/genimage.cfg" + +# Host packages +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# Linux +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.11" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/minnowboard/linux.config" + +# Bootloader +BR2_TARGET_GRUB2=y +BR2_TARGET_GRUB2_X86_64_EFI=y + +# ALSA +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y + +# OpenGL +BR2_PACKAGE_GLMARK2=y +BR2_PACKAGE_MESA3D_DEMOS=y +BR2_PACKAGE_MESA3D=y +BR2_PACKAGE_MESA3D_DRI_DRIVER_SWRAST=y +BR2_PACKAGE_MESA3D_DRI_DRIVER_I965=y +BR2_PACKAGE_MESA3D_OPENGL_GLX=y + +# Framebuffer (just for testing purposes) +BR2_PACKAGE_FB_TEST_APP=y + +# X +BR2_PACKAGE_XORG7=y +BR2_PACKAGE_XSERVER_XORG_SERVER=y +BR2_PACKAGE_XAPP_XRANDR=y +BR2_PACKAGE_XDRIVER_XF86_INPUT_EVDEV=y +BR2_PACKAGE_XDRIVER_XF86_INPUT_KEYBOARD=y +BR2_PACKAGE_XDRIVER_XF86_INPUT_MOUSE=y +BR2_PACKAGE_XDRIVER_XF86_VIDEO_INTEL=y +BR2_PACKAGE_NODM=y +BR2_PACKAGE_XTERM=y +BR2_PACKAGE_OPENBOX=y + +# Firmware +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_RTL_8169=y + +# Libraries +BR2_PACKAGE_IMLIB2=y +BR2_PACKAGE_IMLIB2_JPEG=y +BR2_PACKAGE_IMLIB2_PNG=y +BR2_PACKAGE_STARTUP_NOTIFICATION=y + +# Filesystem image +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +# BR2_TARGET_ROOTFS_TAR is not set diff --git a/configs/minnowboard_max_defconfig b/configs/minnowboard_max_defconfig new file mode 100644 index 00000000..1270f239 --- /dev/null +++ b/configs/minnowboard_max_defconfig @@ -0,0 +1,38 @@ +# Architecture +BR2_x86_64=y +BR2_x86_silvermont=y + +# Misc +BR2_SYSTEM_DHCP="eth0" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/minnowboard/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/minnowboard/genimage.cfg" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y +# Needed for grub2 +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y + +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# Needed for ethernet +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_RTL_8169=y + +# Linux kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.11" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/minnowboard/linux.config" + +# Bootloader +BR2_TARGET_GRUB2=y +BR2_TARGET_GRUB2_X86_64_EFI=y + +# Filesystem image +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set diff --git a/configs/mx25pdk_defconfig b/configs/mx25pdk_defconfig new file mode 100644 index 00000000..ec4f8b82 --- /dev/null +++ b/configs/mx25pdk_defconfig @@ -0,0 +1,35 @@ +# Architecture +BR2_arm=y +BR2_arm926t=y + +# Linux headers same as kernel, a 4.15 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_15=y + +# System +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" + +# required tools to create the SD card image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# Filesystem +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="mx25pdk" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2018.01" +BR2_TARGET_UBOOT_FORMAT_IMX=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.15.7" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v4_v5" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx25-pdk" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y diff --git a/configs/mx51evk_defconfig b/configs/mx51evk_defconfig new file mode 100644 index 00000000..a4bebdec --- /dev/null +++ b/configs/mx51evk_defconfig @@ -0,0 +1,35 @@ +# Architecture +BR2_arm=y +BR2_cortex_a8=y + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# System +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" + +# required tools to create the SD card image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# Filesystem +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="mx51evk" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2021.01" +BR2_TARGET_UBOOT_FORMAT_IMX=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.9" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx51-babbage" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y diff --git a/configs/mx53loco_defconfig b/configs/mx53loco_defconfig new file mode 100644 index 00000000..18785aa0 --- /dev/null +++ b/configs/mx53loco_defconfig @@ -0,0 +1,35 @@ +# Architecture +BR2_arm=y +BR2_cortex_a8=y + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# System +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" + +# required tools to create the SD card image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# Filesystem +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="mx53loco" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2021.01" +BR2_TARGET_UBOOT_FORMAT_IMX=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.9" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx53-qsb imx53-qsrb" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y diff --git a/configs/mx6cubox_defconfig b/configs/mx6cubox_defconfig new file mode 100644 index 00000000..5ed28e53 --- /dev/null +++ b/configs/mx6cubox_defconfig @@ -0,0 +1,47 @@ +# Architecture +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y + +# Toolchain +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# System configuration +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/solidrun/mx6cubox/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/solidrun/mx6cubox/post-image.sh" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.4.69" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6dl-cubox-i imx6dl-cubox-i-emmc-som-v15 imx6dl-cubox-i-som-v15 imx6dl-hummingboard imx6dl-hummingboard-emmc-som-v15 imx6dl-hummingboard-som-v15 imx6q-cubox-i imx6q-cubox-i-emmc-som-v15 imx6q-cubox-i-som-v15 imx6q-hummingboard imx6q-hummingboard-emmc-som-v15 imx6q-hummingboard-som-v15" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem images +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# Bootloaders +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.10" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="mx6cuboxi" +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_FORMAT_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="SPL" + +# required tools to create the SD card image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y diff --git a/configs/mx6sx_udoo_neo_defconfig b/configs/mx6sx_udoo_neo_defconfig new file mode 100644 index 00000000..2bdcade2 --- /dev/null +++ b/configs/mx6sx_udoo_neo_defconfig @@ -0,0 +1,33 @@ +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y +# Linux headers same as kernel, a 5.8 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_8=y +BR2_ROOTFS_POST_BUILD_SCRIPT="board/udoo/common/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="udoo_neo" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.10" +BR2_TARGET_UBOOT_FORMAT_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="SPL" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.8.13" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6sx-udoo-neo-basic imx6sx-udoo-neo-full imx6sx-udoo-neo-extended" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +# required tools to create the SD card image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/udoo/common/boot.scr.txt" diff --git a/configs/mx6udoo_defconfig b/configs/mx6udoo_defconfig new file mode 100644 index 00000000..60436e86 --- /dev/null +++ b/configs/mx6udoo_defconfig @@ -0,0 +1,35 @@ +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y +BR2_GLOBAL_PATCH_DIR="board/udoo/mx6qdl/patches" +# Linux headers same as kernel, a 5.8 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_8=y +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc1" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/udoo/common/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="udoo" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.10" +BR2_TARGET_UBOOT_FORMAT_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="SPL" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.8.13" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6q-udoo imx6dl-udoo" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +# required tools to create the SD card image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/udoo/common/boot.scr.txt" diff --git a/configs/nexbox_a95x_defconfig b/configs/nexbox_a95x_defconfig new file mode 100644 index 00000000..69f8b907 --- /dev/null +++ b/configs/nexbox_a95x_defconfig @@ -0,0 +1,21 @@ +BR2_aarch64=y +BR2_cortex_a53=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y +BR2_SYSTEM_DHCP="eth0" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/nexbox/a95x/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/nexbox/a95x/post-image.sh" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.12" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="amlogic/meson-gxbb-nexbox-a95x amlogic/meson-gxl-s905x-nexbox-a95x" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y diff --git a/configs/nitrogen6sx_defconfig b/configs/nitrogen6sx_defconfig new file mode 100644 index 00000000..8f1f7d7f --- /dev/null +++ b/configs/nitrogen6sx_defconfig @@ -0,0 +1,44 @@ +# architecture +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y + +# system +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/boundarydevices/common/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/boundarydevices/common/post-image.sh" +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y + +# filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +# Last version of branch boundary-v2020.10 +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="https://github.com/boundarydevices/u-boot-imx6/archive/e27d3240.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="nitrogen6sx" +BR2_TARGET_UBOOT_FORMAT_IMX=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/boundarydevices/common/boot.cmd" + +# kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +# Last version of branch boundary-imx_5.4.x_2.2.0 +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/boundarydevices/linux-imx6/archive/388bebee.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="boundary" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6sx-nitrogen6sx imx6sx-nitrogen6sx-m4" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y diff --git a/configs/nitrogen6x_defconfig b/configs/nitrogen6x_defconfig new file mode 100644 index 00000000..b3b69fd3 --- /dev/null +++ b/configs/nitrogen6x_defconfig @@ -0,0 +1,43 @@ +# architecture +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y + +# system +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc1" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/boundarydevices/common/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/boundarydevices/common/post-image.sh" +BR2_PACKAGE_HOST_GENIMAGE=y + +# filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +# Last version of branch boundary-v2020.10 +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="https://github.com/boundarydevices/u-boot-imx6/archive/e27d3240.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="nitrogen6q" +BR2_TARGET_UBOOT_FORMAT_IMX=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/boundarydevices/common/boot.cmd" + +# kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +# Last version of branch boundary-imx_5.4.x_2.2.0 +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/boundarydevices/linux-imx6/archive/388bebee.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="boundary" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6dl-nit6xlite imx6dl-nitrogen6_vm imx6dl-nitrogen6x imx6q-nitrogen6x imx6dl-nitrogen6_som2 imx6q-nitrogen6_som2 imx6qp-nitrogen6_som2 imx6q-nitrogen6_max imx6qp-nitrogen6_max imx6q-sabrelite" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y diff --git a/configs/nitrogen7_defconfig b/configs/nitrogen7_defconfig new file mode 100644 index 00000000..156089ba --- /dev/null +++ b/configs/nitrogen7_defconfig @@ -0,0 +1,43 @@ +# architecture +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_NEON_VFPV4=y + +# system +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/boundarydevices/common/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/boundarydevices/common/post-image.sh" +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y + +# filesystem +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +# Last version of branch boundary-v2020.10 +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="https://github.com/boundarydevices/u-boot-imx6/archive/e27d3240.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="nitrogen7" +BR2_TARGET_UBOOT_FORMAT_IMX=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/boundarydevices/common/boot.cmd" + +# kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +# Last version of branch boundary-imx_5.4.x_2.2.0 +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/boundarydevices/linux-imx6/archive/388bebee.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="boundary" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx7d-nitrogen7 imx7d-nitrogen7-m4" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y diff --git a/configs/nitrogen8m_defconfig b/configs/nitrogen8m_defconfig new file mode 100644 index 00000000..0aa913aa --- /dev/null +++ b/configs/nitrogen8m_defconfig @@ -0,0 +1,58 @@ +# Architecture +BR2_aarch64=y +BR2_cortex_a53=y + +# System +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/freescale/common/imx/imx8-bootloader-prepare.sh board/boundarydevices/common/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/boundarydevices/common/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="${UBOOT_DIR}/arch/arm/dts/imx8mq-nitrogen8m.dtb" +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_IMX_MKIMAGE=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# DDR training binaries +BR2_PACKAGE_FREESCALE_IMX=y +BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M=y +BR2_PACKAGE_FIRMWARE_IMX=y + +# ARM Trusted Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_TARBALL=y +# Latest revision of branch boundary-imx_5.4.47_2.2.0 +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_TARBALL_LOCATION="https://github.com/boundarydevices/imx-atf/archive/515fb041.tar.gz" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="imx8mq" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="nitrogen8m" +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +# Latest revision of branch boundary-imx_v2020.10 +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="https://github.com/boundarydevices/u-boot-imx6/archive/e27d3240.tar.gz" +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-nodtb.bin" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_OPENSSL=y +BR2_TARGET_UBOOT_SPL=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +# Latest revision of branch boundary-imx_5.4.x_2.2.0 +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/boundarydevices/linux-imx6/archive/388bebee.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="boundary" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="freescale/imx8mq-nitrogen8m freescale/imx8mq-nitrogen8m-m4 freescale/imx8mq-nitrogen8m_som freescale/imx8mq-nitrogen8m_som-m4" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y diff --git a/configs/nitrogen8mm_defconfig b/configs/nitrogen8mm_defconfig new file mode 100644 index 00000000..1767490d --- /dev/null +++ b/configs/nitrogen8mm_defconfig @@ -0,0 +1,58 @@ +# Architecture +BR2_aarch64=y +BR2_cortex_a53=y + +# System +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc1" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/freescale/common/imx/imx8-bootloader-prepare.sh board/boundarydevices/common/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/boundarydevices/common/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="${UBOOT_DIR}/arch/arm/dts/imx8mm-nitrogen8mm.dtb" +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_IMX_MKIMAGE=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# DDR training binaries +BR2_PACKAGE_FREESCALE_IMX=y +BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MM=y +BR2_PACKAGE_FIRMWARE_IMX=y + +# ARM Trusted Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_TARBALL=y +# Latest revision of branch boundary-imx_5.4.47_2.2.0 +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_TARBALL_LOCATION="https://github.com/boundarydevices/imx-atf/archive/515fb041.tar.gz" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="imx8mm" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="nitrogen8mm_2g" +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +# Latest revision of branch boundary-imx_v2020.10 +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="https://github.com/boundarydevices/u-boot-imx6/archive/e27d3240.tar.gz" +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-nodtb.bin" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_OPENSSL=y +BR2_TARGET_UBOOT_SPL=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +# Latest revision of branch boundary-imx_5.4.x_2.2.0 +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/boundarydevices/linux-imx6/archive/388bebee.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="boundary" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="freescale/imx8mm-nitrogen8mm freescale/imx8mm-nitrogen8mm-m4 freescale/imx8mm-nitrogen8mm_rev2 freescale/imx8mm-nitrogen8mm_rev2-m4 freescale/imx8mm-nitrogen8mm_som freescale/imx8mm-nitrogen8mm_som-m4" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y diff --git a/configs/nitrogen8mn_defconfig b/configs/nitrogen8mn_defconfig new file mode 100644 index 00000000..cd5c4d92 --- /dev/null +++ b/configs/nitrogen8mn_defconfig @@ -0,0 +1,58 @@ +# Architecture +BR2_aarch64=y +BR2_cortex_a53=y + +# System +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc1" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/freescale/common/imx/imx8-bootloader-prepare.sh board/boundarydevices/common/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/boundarydevices/common/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="${UBOOT_DIR}/arch/arm/dts/imx8mn-nitrogen8_nano.dtb" +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_IMX_MKIMAGE=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# DDR training binaries +BR2_PACKAGE_FREESCALE_IMX=y +BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MN=y +BR2_PACKAGE_FIRMWARE_IMX=y + +# ARM Trusted Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_TARBALL=y +# Latest revision of branch boundary-imx_5.4.47_2.2.0 +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_TARBALL_LOCATION="https://github.com/boundarydevices/imx-atf/archive/515fb041.tar.gz" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="imx8mn" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="nitrogen8_nano_8mn1gr0" +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +# Latest revision of branch boundary-imx_v2020.10 +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="https://github.com/boundarydevices/u-boot-imx6/archive/e27d3240.tar.gz" +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-nodtb.bin" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_OPENSSL=y +BR2_TARGET_UBOOT_SPL=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +# Latest revision of branch boundary-imx_5.4.x_2.2.0 +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/boundarydevices/linux-imx6/archive/388bebee.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="boundary" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="freescale/imx8mn-nitrogen8_nano freescale/imx8mn-nitrogen8mn freescale/imx8mn-nitrogen8mn_som" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y diff --git a/configs/odroidc2_defconfig b/configs/odroidc2_defconfig new file mode 100644 index 00000000..5f97fc3d --- /dev/null +++ b/configs/odroidc2_defconfig @@ -0,0 +1,42 @@ +# Architecture +BR2_aarch64=y + +# Linux headers same as kernel, a 5.7 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_7=y + +# System +BR2_TARGET_GENERIC_HOSTNAME="odroidc2" +BR2_TARGET_GENERIC_GETTY_PORT="ttyAML0" +BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_ROOTFS_OVERLAY="board/hardkernel/odroidc2/rootfs_overlay" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/hardkernel/odroidc2/post-image.sh" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="amlogic/meson-gxbb-odroidc2" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y + +# U-Boot +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_LEGACY=y +BR2_TARGET_UBOOT_BOARDNAME="odroid-c2" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.07" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/hardkernel/odroidc2/boot.cmd" + +# Firmware +BR2_PACKAGE_ODROIDC2_FIRMWARE=y + +# Required tools to create the SD image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MESON_TOOLS=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/odroidxu4_defconfig b/configs/odroidxu4_defconfig new file mode 100644 index 00000000..69958e13 --- /dev/null +++ b/configs/odroidxu4_defconfig @@ -0,0 +1,27 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/hardkernel/odroidxu4/post-image.sh" +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_14=y +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_GIT=y +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/hardkernel/linux.git" +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="4.14.16-104" +BR2_LINUX_KERNEL_DEFCONFIG="odroidxu4" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="exynos5422-odroidxu4" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/hardkernel/u-boot.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="88af53fbcef8386cb4d5f04c19f4b2bcb69e90ca" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="odroid-xu4" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_FORMAT_DTB_BIN=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="sd_fuse/bl1.bin.hardkernel sd_fuse/bl2.bin.hardkernel.720k_uboot sd_fuse/tzsw.bin.hardkernel " +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/olimex_a10_olinuxino_lime_defconfig b/configs/olimex_a10_olinuxino_lime_defconfig new file mode 100644 index 00000000..0896a66d --- /dev/null +++ b/configs/olimex_a10_olinuxino_lime_defconfig @@ -0,0 +1,48 @@ +# Architecture +BR2_arm=y +BR2_cortex_a8=y + +# Linux headers same as kernel, a 4.14 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_14=y + +# System configuration +BR2_TARGET_GENERIC_HOSTNAME="a10-olinuxino" +BR2_TARGET_GENERIC_ISSUE="Welcome to OLinuXino!" +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/olimex/a10_olinuxino/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/olimex/a10_olinuxino/genimage.cfg" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.14.26" +BR2_LINUX_KERNEL_USE_DEFCONFIG=y +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun4i-a10-olinuxino-lime" +BR2_LINUX_KERNEL_INSTALL_TARGET=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Bootloaders +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2018.03" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="A10-OLinuXino-Lime" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_FORMAT_BIN=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/olimex/a10_olinuxino/boot.cmd" + +# Additional tools +BR2_PACKAGE_HOST_GENIMAGE=y diff --git a/configs/olimex_a13_olinuxino_defconfig b/configs/olimex_a13_olinuxino_defconfig new file mode 100644 index 00000000..df2a7223 --- /dev/null +++ b/configs/olimex_a13_olinuxino_defconfig @@ -0,0 +1,46 @@ +# Architecture +BR2_arm=y +BR2_cortex_a8=y + +# Linux headers same as kernel, a 4.11 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_11=y + +# System configuration +BR2_TARGET_GENERIC_HOSTNAME="a13-olinuxino" +BR2_TARGET_GENERIC_ISSUE="Welcome to OLinuXino!" +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# Bootloaders +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2017.05" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="A13-OLinuXino" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_FORMAT_BIN=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="u-boot-sunxi-with-spl.bin" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.11.5" +BR2_LINUX_KERNEL_USE_DEFCONFIG=y +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun5i-a13-olinuxino" +BR2_LINUX_KERNEL_INSTALL_TARGET=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_ROOTFS_POST_BUILD_SCRIPT="board/olimex/a13_olinuxino/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/olimex/a13_olinuxino/genimage.cfg" + +# Additional tools +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/olimex_a20_olinuxino_lime2_defconfig b/configs/olimex_a20_olinuxino_lime2_defconfig new file mode 100644 index 00000000..ca8a319e --- /dev/null +++ b/configs/olimex_a20_olinuxino_lime2_defconfig @@ -0,0 +1,59 @@ +# Architecture +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_EABIHF=y + +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# Toolchain +# glibc is needed for sunxi-mali-mainline-package. +BR2_TOOLCHAIN_BUILDROOT_GLIBC=y + +# System configuration +BR2_TARGET_GENERIC_HOSTNAME="a20-olinuxino" +BR2_TARGET_GENERIC_ISSUE="Welcome to OLinuXino!" +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/olimex/a20_olinuxino/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/olimex/a20_olinuxino/genimage.cfg" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.4.69" +BR2_LINUX_KERNEL_USE_DEFCONFIG=y +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun7i-a20-olinuxino-lime2" +BR2_LINUX_KERNEL_INSTALL_TARGET=y + +# sunxi packages +BR2_PACKAGE_SUNXI_TOOLS=y +BR2_PACKAGE_SUNXI_MALI_MAINLINE=y +BR2_PACKAGE_SUNXI_MALI_MAINLINE_DRIVER=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Bootloaders +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.10" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="A20-OLinuXino-Lime2" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_FORMAT_BIN=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/olimex/a20_olinuxino/boot.cmd" + +# Additional tools +BR2_PACKAGE_HOST_GENIMAGE=y diff --git a/configs/olimex_a20_olinuxino_lime_defconfig b/configs/olimex_a20_olinuxino_lime_defconfig new file mode 100644 index 00000000..9de6de77 --- /dev/null +++ b/configs/olimex_a20_olinuxino_lime_defconfig @@ -0,0 +1,59 @@ +# Architecture +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_EABIHF=y + +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# Toolchain +# glibc is needed for sunxi-mali-mainline-package. +BR2_TOOLCHAIN_BUILDROOT_GLIBC=y + +# System configuration +BR2_TARGET_GENERIC_HOSTNAME="a20-olinuxino" +BR2_TARGET_GENERIC_ISSUE="Welcome to OLinuXino!" +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/olimex/a20_olinuxino/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/olimex/a20_olinuxino/genimage.cfg" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.4.69" +BR2_LINUX_KERNEL_USE_DEFCONFIG=y +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun7i-a20-olinuxino-lime" +BR2_LINUX_KERNEL_INSTALL_TARGET=y + +# sunxi packages +BR2_PACKAGE_SUNXI_TOOLS=y +BR2_PACKAGE_SUNXI_MALI_MAINLINE=y +BR2_PACKAGE_SUNXI_MALI_MAINLINE_DRIVER=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Bootloaders +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.10" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="A20-OLinuXino-Lime" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_FORMAT_BIN=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/olimex/a20_olinuxino/boot.cmd" + +# Additional tools +BR2_PACKAGE_HOST_GENIMAGE=y diff --git a/configs/olimex_a20_olinuxino_micro_defconfig b/configs/olimex_a20_olinuxino_micro_defconfig new file mode 100644 index 00000000..4a2a8a4b --- /dev/null +++ b/configs/olimex_a20_olinuxino_micro_defconfig @@ -0,0 +1,46 @@ +# Architecture +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_NEON_VFPV4=y + +# Linux headers same as kernel, a 4.12 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_12=y + +# System configuration +BR2_TARGET_GENERIC_HOSTNAME="a20-olinuxino" +BR2_TARGET_GENERIC_ISSUE="Welcome to OLinuXino!" +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_SYSTEM_DHCP="eth0" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/olimex/a20_olinuxino/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/olimex/a20_olinuxino/genimage.cfg" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.12" +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun7i-a20-olinuxino-micro" +BR2_LINUX_KERNEL_INSTALL_TARGET=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Bootloaders +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2017.05" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="A20-OLinuXino_MICRO" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/olimex/a20_olinuxino/boot.cmd" + +# Additional tools +BR2_PACKAGE_HOST_GENIMAGE=y diff --git a/configs/olimex_a33_olinuxino_defconfig b/configs/olimex_a33_olinuxino_defconfig new file mode 100644 index 00000000..7c691ab2 --- /dev/null +++ b/configs/olimex_a33_olinuxino_defconfig @@ -0,0 +1,50 @@ +# Architecture +BR2_arm=y +BR2_cortex_a7=y + +# Linux headers same as kernel, a 5.0 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# System configuration +BR2_TARGET_GENERIC_HOSTNAME="A33-olinuxino" +BR2_TARGET_GENERIC_ISSUE="Welcome to A33 OLinuXino!" +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# Bootloaders +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.04" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="A33-OLinuXino" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_FORMAT_BIN=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/olimex/a33_olinuxino/boot.cmd" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0" +BR2_LINUX_KERNEL_USE_DEFCONFIG=y +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun8i-a33-olinuxino" +BR2_LINUX_KERNEL_INSTALL_TARGET=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_ROOTFS_POST_BUILD_SCRIPT="board/olimex/a33_olinuxino/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/olimex/a33_olinuxino/genimage.cfg" + +# Additional tools +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/olimex_a64_olinuxino_defconfig b/configs/olimex_a64_olinuxino_defconfig new file mode 100644 index 00000000..e35c6014 --- /dev/null +++ b/configs/olimex_a64_olinuxino_defconfig @@ -0,0 +1,50 @@ +BR2_aarch64=y +BR2_cortex_a53=y +BR2_ARM_FPU_VFPV4=y + +# Linux headers same as kernel, a 5.0 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://github.com/apritzel/arm-trusted-firmware.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="sun50iw1p1" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="aa75c8da415158a94b82a430b2b40000778e851f" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="a64-olinuxino" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="spl/sunxi-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/olimex/a64-olinuxino/boot.cmd" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="allwinner/sun50i-a64-olinuxino" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_GENERIC_ISSUE="Welcome to Olimex A64-OLinuXino" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/olimex/a64-olinuxino/genimage.cfg" diff --git a/configs/olimex_imx233_olinuxino_defconfig b/configs/olimex_imx233_olinuxino_defconfig new file mode 100644 index 00000000..275dd98a --- /dev/null +++ b/configs/olimex_imx233_olinuxino_defconfig @@ -0,0 +1,52 @@ +# Architecture +BR2_arm=y +BR2_arm926t=y + +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# System +BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0" + +# For automatic firmware loading +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.4.8" +BR2_LINUX_KERNEL_DEFCONFIG="mxs" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/olimex/imx233_olinuxino/linux-wifi.fragment" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx23-olinuxino" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x42000000" + +# Firmware for WiFi +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_7010=y +BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_9271=y +BR2_PACKAGE_LINUX_FIRMWARE_RALINK_RT73=y +BR2_PACKAGE_LINUX_FIRMWARE_RALINK_RT2XX=y +BR2_PACKAGE_LINUX_FIRMWARE_RTL_81XX=y +BR2_PACKAGE_ZD1211_FIRMWARE=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set + +# U-Boot +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2017.11" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="mx23_olinuxino" +BR2_TARGET_UBOOT_FORMAT_SD=y + +# To generate SD Image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/mxs/post-image.sh" + diff --git a/configs/olpc_xo175_defconfig b/configs/olpc_xo175_defconfig new file mode 100644 index 00000000..bb7aa047 --- /dev/null +++ b/configs/olpc_xo175_defconfig @@ -0,0 +1,29 @@ +BR2_arm=y +BR2_pj4=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_8=y +BR2_ROOTFS_POST_BUILD_SCRIPT="board/olpc/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/olpc/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.8.2" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/olpc/xo-1.75/linux.config" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/olpc/linux.config" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_LIBERTAS_SD8686_V8=y +BR2_PACKAGE_LINUX_FIRMWARE_LIBERTAS_SD8686_V9=y +BR2_PACKAGE_LINUX_FIRMWARE_LIBERTAS_SD8688=y +BR2_PACKAGE_LINUX_FIRMWARE_MWIFIEX_SD8787=y +BR2_PACKAGE_LINUX_FIRMWARE_MWIFIEX_SD8797=y +BR2_PACKAGE_LINUX_FIRMWARE_MWIFIEX_SD8887=y +BR2_PACKAGE_LINUX_FIRMWARE_MWIFIEX_SD8897=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_LABEL="XO175" +BR2_TARGET_ROOTFS_EXT2_SIZE="32M" +BR2_TARGET_ROOTFS_EXT2_MKFS_OPTIONS="-O dir_index,^huge_file,^64bit,^extent" +BR2_PACKAGE_HOST_GENIMAGE=y diff --git a/configs/olpc_xo1_defconfig b/configs/olpc_xo1_defconfig new file mode 100644 index 00000000..41226d89 --- /dev/null +++ b/configs/olpc_xo1_defconfig @@ -0,0 +1,27 @@ +BR2_x86_geode=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_7=y +BR2_ROOTFS_POST_BUILD_SCRIPT="board/olpc/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/olpc/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.7.1" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/olpc/xo-1/linux.config" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/olpc/linux.config" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_LIBERTAS_USB8388_V9=y +BR2_PACKAGE_LINUX_FIRMWARE_LIBERTAS_USB8388_OLPC=y +BR2_PACKAGE_LINUX_FIRMWARE_LIBERTAS_USB_THINFIRM=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_LABEL="XO1" +BR2_TARGET_ROOTFS_EXT2_SIZE="32M" +BR2_TARGET_ROOTFS_EXT2_MKFS_OPTIONS="-O dir_index,^huge_file,^64bit,^extent" +BR2_TARGET_ROOTFS_JFFS2=y +BR2_TARGET_ROOTFS_JFFS2_NANDFLASH_128K=y +BR2_TARGET_ROOTFS_JFFS2_PAD=y +BR2_PACKAGE_HOST_GENIMAGE=y diff --git a/configs/openblocks_a6_defconfig b/configs/openblocks_a6_defconfig new file mode 100644 index 00000000..c805ae9c --- /dev/null +++ b/configs/openblocks_a6_defconfig @@ -0,0 +1,24 @@ +# Architecture +BR2_arm=y +BR2_arm926t=y + +# system +BR2_TARGET_GENERIC_HOSTNAME="openblocks-a6" +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_SYSTEM_DHCP="eth0" + +# filesystem +BR2_TARGET_ROOTFS_JFFS2=y +BR2_TARGET_ROOTFS_JFFS2_NANDFLASH_16K=y + +# Linux headers same as kernel, a 4.14 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_14=y + +# kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.14.13" +BR2_LINUX_KERNEL_DEFCONFIG="mvebu_v5" +BR2_LINUX_KERNEL_APPENDED_UIMAGE=y +BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x8000" +BR2_LINUX_KERNEL_INTREE_DTS_NAME="kirkwood-openblocks_a6" diff --git a/configs/orangepi_lite2_defconfig b/configs/orangepi_lite2_defconfig new file mode 100644 index 00000000..c6be1c46 --- /dev/null +++ b/configs/orangepi_lite2_defconfig @@ -0,0 +1,60 @@ +BR2_aarch64=y +BR2_cortex_a53=y +BR2_ARM_FPU_VFPV4=y + +# Linux headers same as kernel, a 4.19 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://github.com/ARM-software/arm-trusted-firmware.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="v2.0" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="sun50i_h6" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/amarula/u-boot-amarula" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="h6-v1.0a" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="orangepi_lite2" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="u-boot-sunxi-with-spl.bin" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,amarula,linux-amarula,h6-v1.0b)/linux-amarula_h6-v1.0b.tar.gz" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="allwinner/sun50i-h6-orangepi-lite2" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_GENERIC_ISSUE="Welcome to Orangepi Lite2" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/orangepi/orangepi-lite2/genimage.cfg" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/orangepi/orangepi-lite2/post-build.sh" +BR2_ROOTFS_OVERLAY="board/orangepi/orangepi-lite2/rootfs_overlay" + +# wireless firmware +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM43XXX=y + +# wireless tools +BR2_PACKAGE_IW=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_NL80211=y +BR2_PACKAGE_WPA_SUPPLICANT_AP_SUPPORT=y +BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y diff --git a/configs/orangepi_lite_defconfig b/configs/orangepi_lite_defconfig new file mode 100644 index 00000000..e75943c9 --- /dev/null +++ b/configs/orangepi_lite_defconfig @@ -0,0 +1,39 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_VFPV4=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_3=y +BR2_TARGET_GENERIC_HOSTNAME="OrangePi_Lite" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot for the Orange Pi Lite" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.8" +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/orangepi/orangepi-lite/linux-extras.config" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun8i-h3-orangepi-lite" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_PACKAGE_RTL8189FS=y +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_CLI=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.10" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="orangepi_lite" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/orangepi/orangepi-lite/boot.cmd" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/orangepi/orangepi-lite/genimage.cfg" diff --git a/configs/orangepi_one_defconfig b/configs/orangepi_one_defconfig new file mode 100644 index 00000000..20b78fe7 --- /dev/null +++ b/configs/orangepi_one_defconfig @@ -0,0 +1,34 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_VFPV4=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_3=y +BR2_TARGET_GENERIC_HOSTNAME="OrangePi_One" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot for the Orange Pi One" +BR2_SYSTEM_DHCP="eth0" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.8" +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun8i-h3-orangepi-one" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.10" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="orangepi_one" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/orangepi/orangepi-one/boot.cmd" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/orangepi/orangepi-one/genimage.cfg" diff --git a/configs/orangepi_one_plus_defconfig b/configs/orangepi_one_plus_defconfig new file mode 100644 index 00000000..1084d422 --- /dev/null +++ b/configs/orangepi_one_plus_defconfig @@ -0,0 +1,46 @@ +BR2_aarch64=y +BR2_cortex_a53=y +BR2_ARM_FPU_VFPV4=y + +# Linux headers same as kernel, a 4.19 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://github.com/ARM-software/arm-trusted-firmware.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="v2.0" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="sun50i_h6" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2018.09" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="orangepi_one_plus" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="u-boot-sunxi-with-spl.bin" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,amarula,linux-amarula,h6-v1.0b)/linux-amarula_h6-v1.0b.tar.gz" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="allwinner/sun50i-h6-orangepi-one-plus" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_GENERIC_ISSUE="Welcome to Orangepi One+" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/orangepi/orangepi-one-plus/genimage.cfg" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/orangepi/orangepi-one-plus/post-build.sh" diff --git a/configs/orangepi_pc2_defconfig b/configs/orangepi_pc2_defconfig new file mode 100644 index 00000000..c7e17c8e --- /dev/null +++ b/configs/orangepi_pc2_defconfig @@ -0,0 +1,50 @@ +BR2_aarch64=y +BR2_cortex_a53=y +BR2_ARM_FPU_VFPV4=y + +# Linux headers same as kernel, a 5.0 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://github.com/apritzel/arm-trusted-firmware.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="sun50iw1p1" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="aa75c8da415158a94b82a430b2b40000778e851f" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="orangepi_pc2" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="spl/sunxi-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/orangepi/orangepi-pc2/boot.cmd" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="allwinner/sun50i-h5-orangepi-pc2" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_GENERIC_ISSUE="Welcome to Orangepi PC2" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/orangepi/orangepi-pc2/genimage.cfg" diff --git a/configs/orangepi_pc_defconfig b/configs/orangepi_pc_defconfig new file mode 100644 index 00000000..44ea9b95 --- /dev/null +++ b/configs/orangepi_pc_defconfig @@ -0,0 +1,35 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_VFPV4=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y +BR2_TARGET_GENERIC_HOSTNAME="OrangePi_PC" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot for the Orange Pi PC" +BR2_SYSTEM_DHCP="eth0" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/orangepi/orangepi-pc/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.9" +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/orangepi/orangepi-pc/linux.fragment" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun8i-h3-orangepi-pc" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.10" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="orangepi_pc" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/orangepi/orangepi-pc/boot.cmd" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y diff --git a/configs/orangepi_pc_plus_defconfig b/configs/orangepi_pc_plus_defconfig new file mode 100644 index 00000000..a42b380f --- /dev/null +++ b/configs/orangepi_pc_plus_defconfig @@ -0,0 +1,49 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_VFPV4=y +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_3=y +BR2_TARGET_GENERIC_HOSTNAME="OrangePi_PC_Plus" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot for the Orange Pi PC Plus" +BR2_SYSTEM_DHCP="eth0" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.3.8" +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun8i-h3-orangepi-pc-plus" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/orangepi/orangepi-pc-plus/linux-extras.config" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.10" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="orangepi_pc_plus" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/orangepi/orangepi-pc-plus/boot.cmd" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/orangepi/orangepi-pc-plus/genimage.cfg" + +# wireless driver and firmware +BR2_PACKAGE_RTL8189FS=y +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_RTL_81XX=y + +# wireless tools +BR2_PACKAGE_IW=y +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WIRELESS_TOOLS_LIB=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_NL80211=y +BR2_PACKAGE_WPA_SUPPLICANT_CLI=y diff --git a/configs/orangepi_plus_defconfig b/configs/orangepi_plus_defconfig new file mode 100644 index 00000000..11d74864 --- /dev/null +++ b/configs/orangepi_plus_defconfig @@ -0,0 +1,44 @@ +# Architecture +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_VFPV4=y + +# Linux headers same as kernel, a 5.0 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# System configuration +BR2_TARGET_GENERIC_HOSTNAME="OrangePi_Plus" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot for the Orange Pi Plus" + +# Bootloaders +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="orangepi_plus" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/orangepi/orangepi-plus/boot.cmd" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0" +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun8i-h3-orangepi-plus" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/orangepi/orangepi-plus/genimage.cfg" + +# Additional tools +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/orangepi_prime_defconfig b/configs/orangepi_prime_defconfig new file mode 100644 index 00000000..f8f958c6 --- /dev/null +++ b/configs/orangepi_prime_defconfig @@ -0,0 +1,50 @@ +BR2_aarch64=y +BR2_cortex_a53=y +BR2_ARM_FPU_VFPV4=y + +# Linux headers same as kernel, a 5.0 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://github.com/apritzel/arm-trusted-firmware.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="sun50iw1p1" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="aa75c8da415158a94b82a430b2b40000778e851f" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="orangepi_prime" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="spl/sunxi-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/orangepi/orangepi-prime/boot.cmd" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="allwinner/sun50i-h5-orangepi-prime" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_GENERIC_ISSUE="Welcome to Orangepi Prime" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/orangepi/orangepi-prime/genimage.cfg" diff --git a/configs/orangepi_r1_defconfig b/configs/orangepi_r1_defconfig new file mode 100644 index 00000000..bad1f940 --- /dev/null +++ b/configs/orangepi_r1_defconfig @@ -0,0 +1,40 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_VFPV4=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y +BR2_TARGET_GENERIC_HOSTNAME="OrangePi_R1" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot for the Orange Pi R1" +BR2_SYSTEM_DHCP="eth0" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.10" +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun8i-h2-plus-orangepi-r1" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/orangepi/orangepi-r1/linux-extras.config" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.10" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="orangepi_r1" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/orangepi/orangepi-r1/boot.cmd" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/orangepi/orangepi-r1/genimage.cfg" + +# spi flash support +BR2_PACKAGE_MTD=y diff --git a/configs/orangepi_rk3399_defconfig b/configs/orangepi_rk3399_defconfig new file mode 100644 index 00000000..bcce35fe --- /dev/null +++ b/configs/orangepi_rk3399_defconfig @@ -0,0 +1,53 @@ +# Architecture +BR2_aarch64=y +BR2_cortex_a72_a53=y + +# Linux headers same as kernel, a 5.8 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_8=y + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="11a0a46a899fcc3b1fdb214b382f3d7495d88eca" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="rk3399" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_NEEDS_ARM32_TOOLCHAIN=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_IMAGES="" + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.07" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="orangepi-rk3399" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31_ELF=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="idbloader.img" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.8.2" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="rockchip/rk3399-orangepi" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_GENERIC_HOSTNAME="orangepi-rk3399" +BR2_TARGET_GENERIC_ISSUE="Welcome to ORANGEPI-RK3399" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/orangepi/orangepi-rk3399/genimage.cfg" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/orangepi/orangepi-rk3399/post-build.sh" diff --git a/configs/orangepi_win_defconfig b/configs/orangepi_win_defconfig new file mode 100644 index 00000000..715ff3b7 --- /dev/null +++ b/configs/orangepi_win_defconfig @@ -0,0 +1,48 @@ +BR2_aarch64=y +BR2_cortex_a53=y +BR2_ARM_FPU_VFPV4=y + +# Linux headers same as kernel, a 4.14 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_14=y + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://github.com/apritzel/arm-trusted-firmware.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="sun50iw1p1" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="aa75c8da415158a94b82a430b2b40000778e851f" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2017.11" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="orangepi_win" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="spl/sunxi-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/orangepi/orangepi-win/boot.cmd" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.14" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="allwinner/sun50i-a64-orangepi-win" + +# Filesystem +BR2_TARGET_GENERIC_ISSUE="Welcome to Orangepi Win/Win Plus" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/orangepi/orangepi-win/genimage.cfg" diff --git a/configs/orangepi_zero_defconfig b/configs/orangepi_zero_defconfig new file mode 100644 index 00000000..b008523c --- /dev/null +++ b/configs/orangepi_zero_defconfig @@ -0,0 +1,55 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_VFPV4=y +BR2_GLOBAL_PATCH_DIR="board/orangepi/orangepi-zero/patches" +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y +BR2_TARGET_GENERIC_HOSTNAME="OrangePi_Zero" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot for the Orange Pi Zero" +BR2_SYSTEM_DHCP="eth0" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.10" +BR2_LINUX_KERNEL_DEFCONFIG="sunxi" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun8i-h2-plus-orangepi-zero" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/orangepi/orangepi-zero/linux-extras.config" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.10" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="orangepi_zero" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-sunxi-with-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/orangepi/orangepi-zero/boot.cmd" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/orangepi/orangepi-zero/genimage.cfg" + +# wireless driver and firmware +BR2_PACKAGE_XR819_XRADIO=y +BR2_PACKAGE_ARMBIAN_FIRMWARE=y +BR2_PACKAGE_ARMBIAN_FIRMWARE_XR819=y + +# wireless support +BR2_PACKAGE_IW=y +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WIRELESS_TOOLS_LIB=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_NL80211=y +BR2_PACKAGE_WPA_SUPPLICANT_CLI=y + +# spi flash support +BR2_PACKAGE_MTD=y diff --git a/configs/orangepi_zero_plus2_defconfig b/configs/orangepi_zero_plus2_defconfig new file mode 100644 index 00000000..aa4c5c94 --- /dev/null +++ b/configs/orangepi_zero_plus2_defconfig @@ -0,0 +1,65 @@ +BR2_aarch64=y +BR2_cortex_a53=y +BR2_ARM_FPU_VFPV4=y + +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y +BR2_ROOTFS_OVERLAY="board/orangepi/orangepi-zero-plus2/rootfs_overlay" + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://github.com/apritzel/arm-trusted-firmware.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="sun50iw1p1" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="aa75c8da415158a94b82a430b2b40000778e851f" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.10" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="orangepi_zero_plus2" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="spl/sunxi-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/orangepi/orangepi-zero-plus2/boot.cmd" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.10" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="allwinner/sun50i-h5-orangepi-zero-plus2" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/orangepi/orangepi-zero-plus2/linux-extras.config" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# wireless firmware +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM43XXX=y + +# wireless tools +BR2_PACKAGE_IW=y +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WIRELESS_TOOLS_LIB=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_NL80211=y +BR2_PACKAGE_WPA_SUPPLICANT_CLI=y + +# Filesystem +BR2_TARGET_GENERIC_ISSUE="Welcome to Orangepi Zero Plus2" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/orangepi/orangepi-zero-plus2/genimage.cfg" diff --git a/configs/orangepi_zero_plus_defconfig b/configs/orangepi_zero_plus_defconfig new file mode 100644 index 00000000..cf82f8b3 --- /dev/null +++ b/configs/orangepi_zero_plus_defconfig @@ -0,0 +1,52 @@ +BR2_aarch64=y +BR2_cortex_a53=y +BR2_ARM_FPU_VFPV4=y + +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_7=y +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y +BR2_SYSTEM_DHCP="eth0" + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://github.com/apritzel/arm-trusted-firmware.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="sun50iw1p1" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="aa75c8da415158a94b82a430b2b40000778e851f" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.10" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="orangepi_zero_plus" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="spl/sunxi-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/orangepi/orangepi-zero-plus/boot.cmd" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.7.19" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="allwinner/sun50i-h5-orangepi-zero-plus" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_GENERIC_ISSUE="Welcome to Orangepi Zero Plus" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/orangepi/orangepi-zero-plus/genimage.cfg" diff --git a/configs/pandaboard_defconfig b/configs/pandaboard_defconfig new file mode 100644 index 00000000..408bced9 --- /dev/null +++ b/configs/pandaboard_defconfig @@ -0,0 +1,32 @@ +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS2" +BR2_SYSTEM_DHCP="eth0" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/pandaboard/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19.62" +BR2_LINUX_KERNEL_DEFCONFIG="omap2plus" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="omap4-panda-es omap4-panda omap4-panda-a4" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2017.05" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="omap4_panda" +BR2_TARGET_UBOOT_FORMAT_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="MLO" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/pc_x86_64_bios_defconfig b/configs/pc_x86_64_bios_defconfig new file mode 100644 index 00000000..1c1f7a36 --- /dev/null +++ b/configs/pc_x86_64_bios_defconfig @@ -0,0 +1,65 @@ +# Architecture +BR2_x86_64=y + +# Toolchain, required for eudev (to autoload drivers) +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y + +# System +BR2_TARGET_GENERIC_GETTY_PORT="tty1" +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y + +# Required tools to create bootable media +BR2_PACKAGE_HOST_GENIMAGE=y + +# Bootloader +BR2_TARGET_GRUB2=y + +# Filesystem / image +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +# BR2_TARGET_ROOTFS_TAR is not set +BR2_ROOTFS_POST_BUILD_SCRIPT="board/pc/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/pc/genimage-bios.cfg" + +# Linux headers same as kernel, a 4.18 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_18=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.18.10" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/pc/linux.config" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Firmware +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_9170=y +BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_9271=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3168=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_5000=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_6000G2A=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_6000G2B=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_7260=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_7265D=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_8000C=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_8265=y +BR2_PACKAGE_LINUX_FIRMWARE_RALINK_RT73=y +BR2_PACKAGE_LINUX_FIRMWARE_RALINK_RT2XX=y +BR2_PACKAGE_LINUX_FIRMWARE_RTL_8169=y +BR2_PACKAGE_LINUX_FIRMWARE_RTL_81XX=y +BR2_PACKAGE_LINUX_FIRMWARE_RTL_87XX=y +BR2_PACKAGE_LINUX_FIRMWARE_RTL_88XX=y + +# Packages +# +# Use connman so that networking setup is simpler, via connmanctl tool +# acpid is for seamless power button support +BR2_PACKAGE_ACPID=y +BR2_PACKAGE_CONNMAN=y +BR2_PACKAGE_CONNMAN_CLIENT=y +BR2_PACKAGE_CONNMAN_WIFI=y diff --git a/configs/pc_x86_64_efi_defconfig b/configs/pc_x86_64_efi_defconfig new file mode 100644 index 00000000..984fc8f9 --- /dev/null +++ b/configs/pc_x86_64_efi_defconfig @@ -0,0 +1,67 @@ +# Architecture +BR2_x86_64=y + +# Toolchain, required for eudev (to autoload drivers) +BR2_TOOLCHAIN_BUILDROOT_WCHAR=y + +# System +BR2_TARGET_GENERIC_GETTY_PORT="tty1" +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y + +# Required tools to create bootable media +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# Bootloader +BR2_TARGET_GRUB2=y +BR2_TARGET_GRUB2_X86_64_EFI=y + +# Filesystem / image +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +# BR2_TARGET_ROOTFS_TAR is not set +BR2_ROOTFS_POST_BUILD_SCRIPT="board/pc/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/pc/post-image-efi.sh" + +# Linux headers same as kernel, a 4.18 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_18=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.18.10" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/pc/linux.config" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Firmware +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_9170=y +BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_9271=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3168=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_5000=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_6000G2A=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_6000G2B=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_7260=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_7265D=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_8000C=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_8265=y +BR2_PACKAGE_LINUX_FIRMWARE_RALINK_RT73=y +BR2_PACKAGE_LINUX_FIRMWARE_RALINK_RT2XX=y +BR2_PACKAGE_LINUX_FIRMWARE_RTL_8169=y +BR2_PACKAGE_LINUX_FIRMWARE_RTL_81XX=y +BR2_PACKAGE_LINUX_FIRMWARE_RTL_87XX=y +BR2_PACKAGE_LINUX_FIRMWARE_RTL_88XX=y + +# Packages +# +# Use connman so that networking setup is simpler, via connmanctl tool +# acpid is for seamless power button support +BR2_PACKAGE_ACPID=y +BR2_PACKAGE_CONNMAN=y +BR2_PACKAGE_CONNMAN_CLIENT=y +BR2_PACKAGE_CONNMAN_WIFI=y diff --git a/configs/pcengines_apu2_defconfig b/configs/pcengines_apu2_defconfig new file mode 100644 index 00000000..68cebb8f --- /dev/null +++ b/configs/pcengines_apu2_defconfig @@ -0,0 +1,16 @@ +BR2_x86_64=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y +BR2_TARGET_GENERIC_HOSTNAME="apu2" +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_SYSTEM_DHCP="eth0" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19.16" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/pcengines/apu2/linux.config" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_ISO9660=y +BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU="board/pcengines/apu2/isolinux.cfg" +BR2_TARGET_ROOTFS_ISO9660_HYBRID=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_SYSLINUX=y diff --git a/configs/pine64_defconfig b/configs/pine64_defconfig new file mode 100644 index 00000000..2bdb6f6a --- /dev/null +++ b/configs/pine64_defconfig @@ -0,0 +1,50 @@ +BR2_aarch64=y +BR2_cortex_a53=y +BR2_ARM_FPU_VFPV4=y + +# Linux headers same as kernel, a 5.0 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://github.com/apritzel/arm-trusted-firmware.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="sun50iw1p1" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="aa75c8da415158a94b82a430b2b40000778e851f" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="pine64_plus" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="spl/sunxi-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/pine64/pine64/boot.cmd" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="allwinner/sun50i-a64-pine64" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_GENERIC_ISSUE="Welcome to PINE64" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/pine64/pine64/genimage.cfg" diff --git a/configs/pine64_sopine_defconfig b/configs/pine64_sopine_defconfig new file mode 100644 index 00000000..6fa51147 --- /dev/null +++ b/configs/pine64_sopine_defconfig @@ -0,0 +1,50 @@ +BR2_aarch64=y +BR2_cortex_a53=y +BR2_ARM_FPU_VFPV4=y + +# Linux headers same as kernel, a 5.0 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://github.com/apritzel/arm-trusted-firmware.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="sun50iw1p1" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="aa75c8da415158a94b82a430b2b40000778e851f" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="sopine_baseboard" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="spl/sunxi-spl.bin" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/pine64/sopine/boot.cmd" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="allwinner/sun50i-a64-sopine-baseboard" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_GENERIC_ISSUE="Welcome to PINE64 SOPINE" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/pine64/sopine/genimage.cfg" diff --git a/configs/qemu_aarch64_virt_defconfig b/configs/qemu_aarch64_virt_defconfig new file mode 100644 index 00000000..aa00ddf8 --- /dev/null +++ b/configs/qemu_aarch64_virt_defconfig @@ -0,0 +1,31 @@ +# Architecture +BR2_aarch64=y +BR2_cortex_a53=y + +# System +BR2_SYSTEM_DHCP="eth0" +BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/aarch64-virt/linux.config" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_arm_versatile_defconfig b/configs/qemu_arm_versatile_defconfig new file mode 100644 index 00000000..10dd9e52 --- /dev/null +++ b/configs/qemu_arm_versatile_defconfig @@ -0,0 +1,31 @@ +# Architecture +BR2_arm=y +BR2_arm926t=y + +# System +BR2_SYSTEM_DHCP="eth0" +BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/arm-versatile/linux.config" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="versatile-pb" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_arm_versatile_nommu_defconfig b/configs/qemu_arm_versatile_nommu_defconfig new file mode 100644 index 00000000..fa783f92 --- /dev/null +++ b/configs/qemu_arm_versatile_nommu_defconfig @@ -0,0 +1,42 @@ +# Architecture +BR2_arm=y +BR2_arm926t=y + +# Toolchain +BR2_PACKAGE_HOST_ELF2FLT=y +# BR2_USE_MMU is not set + +# Patches +BR2_GLOBAL_PATCH_DIR="board/qemu/arm-versatile/patches" + +# Busybox with hush +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox-minimal.config" + +# System +BR2_SYSTEM_DHCP="eth0" +BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0" + +# Filesystem +# BR2_TARGET_ROOTFS_EXT2 is not set +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_ROOTFS_INITRAMFS=y + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/arm-versatile/linux-nommu.config" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="versatile-pb" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_arm_vexpress_defconfig b/configs/qemu_arm_vexpress_defconfig new file mode 100644 index 00000000..20fdbb40 --- /dev/null +++ b/configs/qemu_arm_vexpress_defconfig @@ -0,0 +1,35 @@ +# Architecture +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3D16=y + +# System +BR2_SYSTEM_DHCP="eth0" +BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" +# Qemu >= 5.1 requires an SD card size to be a power of 2, e.g. 64 MiB. +BR2_TARGET_ROOTFS_EXT2_SIZE="64M" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_DEFCONFIG="vexpress" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="vexpress-v2p-ca9" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_arm_vexpress_tz_defconfig b/configs/qemu_arm_vexpress_tz_defconfig new file mode 100644 index 00000000..3e37024d --- /dev/null +++ b/configs/qemu_arm_vexpress_tz_defconfig @@ -0,0 +1,60 @@ +# Architecture +BR2_arm=y +BR2_cortex_a15=y +BR2_ARM_FPU_VFPV3D16=y + +# System +BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/qemu/arm-vexpress-tz/post-build.sh" + +# optee-test needs toolchain C++ +BR2_TOOLCHAIN_BUILDROOT_CXX=y + +# Filesystem +BR2_TARGET_ROOTFS_CPIO=y +BR2_TARGET_ROOTFS_CPIO_GZIP=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_DEFCONFIG="vexpress" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/qemu/arm-vexpress-tz/linux.fragment" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="vexpress-v2p-ca15_a7" + +# TF-A for booting OP-TEE secure and uboot/linux non secure +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION_VALUE="v2.2" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="qemu" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL32_OPTEE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_UBOOT_AS_BL33=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_VARIABLES="BL32_RAM_LOCATION=tdram" + +# OP-TEE components +BR2_TARGET_OPTEE_OS=y +BR2_TARGET_OPTEE_OS_PLATFORM="vexpress-qemu_virt" +BR2_PACKAGE_OPTEE_BENCHMARK=y +BR2_PACKAGE_OPTEE_EXAMPLES=y +BR2_PACKAGE_OPTEE_TEST=y + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# U-boot for booting the dear Linux kernel +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="qemu_arm" +BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="board/qemu/arm-vexpress-tz/u-boot.config" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_csky610_virt_defconfig b/configs/qemu_csky610_virt_defconfig new file mode 100644 index 00000000..e7d75f5f --- /dev/null +++ b/configs/qemu_csky610_virt_defconfig @@ -0,0 +1,20 @@ +# Architecture +BR2_csky=y +BR2_ck610=y + +# System +BR2_TARGET_ROOTFS_INITRAMFS=y + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# linux kernel header, the same version with linux kernel +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0.12" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/qemu/csky/linux-ck610.config.fragment" diff --git a/configs/qemu_csky807_virt_defconfig b/configs/qemu_csky807_virt_defconfig new file mode 100644 index 00000000..df12450a --- /dev/null +++ b/configs/qemu_csky807_virt_defconfig @@ -0,0 +1,20 @@ +# Architecture +BR2_csky=y +BR2_ck807=y + +# System +BR2_TARGET_ROOTFS_INITRAMFS=y + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# linux kernel header, the same version with linux kernel +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0.12" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/qemu/csky/linux-ck807.config.fragment" diff --git a/configs/qemu_csky810_virt_defconfig b/configs/qemu_csky810_virt_defconfig new file mode 100644 index 00000000..dd1fd329 --- /dev/null +++ b/configs/qemu_csky810_virt_defconfig @@ -0,0 +1,20 @@ +# Architecture +BR2_csky=y +BR2_ck810=y + +# System +BR2_TARGET_ROOTFS_INITRAMFS=y + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# linux kernel header, the same version with linux kernel +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0.12" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/qemu/csky/linux-ck810.config.fragment" diff --git a/configs/qemu_csky860_virt_defconfig b/configs/qemu_csky860_virt_defconfig new file mode 100644 index 00000000..6edfba4e --- /dev/null +++ b/configs/qemu_csky860_virt_defconfig @@ -0,0 +1,20 @@ +# Architecture +BR2_csky=y +BR2_ck860=y + +# System +BR2_TARGET_ROOTFS_INITRAMFS=y + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# linux kernel header, the same version with linux kernel +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_0=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.0.12" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/qemu/csky/linux-ck860.config.fragment" diff --git a/configs/qemu_m68k_mcf5208_defconfig b/configs/qemu_m68k_mcf5208_defconfig new file mode 100644 index 00000000..c45a7755 --- /dev/null +++ b/configs/qemu_m68k_mcf5208_defconfig @@ -0,0 +1,36 @@ +# Architecture +BR2_m68k=y +BR2_m68k_cf5208=y + +# System +BR2_SYSTEM_DHCP="eth0" + +# Filesystem +BR2_TARGET_ROOTFS_INITRAMFS=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/m68k-mcf5208/linux.config" +BR2_LINUX_KERNEL_VMLINUX=y + +# Serial port config +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# use minimal busybox with hush and networking tools +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox-minimal.config" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_m68k_q800_defconfig b/configs/qemu_m68k_q800_defconfig new file mode 100644 index 00000000..abd0560c --- /dev/null +++ b/configs/qemu_m68k_q800_defconfig @@ -0,0 +1,33 @@ +# Architecture +BR2_m68k=y +BR2_m68k_68040=y + +# System +BR2_SYSTEM_DHCP="eth0" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/m68k-q800/linux.config" +BR2_LINUX_KERNEL_VMLINUX=y + +# Serial port config +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_microblazebe_mmu_defconfig b/configs/qemu_microblazebe_mmu_defconfig new file mode 100644 index 00000000..638c6629 --- /dev/null +++ b/configs/qemu_microblazebe_mmu_defconfig @@ -0,0 +1,31 @@ +# Architecture +BR2_microblaze=y +BR2_microblazebe=y + +# System +BR2_SYSTEM_DHCP="eth0" +BR2_TARGET_GENERIC_GETTY_PORT="ttyUL0" + +# Filesystem +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_ROOTFS_INITRAMFS=y + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/microblazebe-mmu/linux.config" +BR2_LINUX_KERNEL_LINUX_BIN=y +BR2_LINUX_KERNEL_PATCH="board/qemu/microblazebe-mmu/0001-net-xilinx-xemaclite-add-2.00.b-revision.patch" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_microblazeel_mmu_defconfig b/configs/qemu_microblazeel_mmu_defconfig new file mode 100644 index 00000000..6e62cc33 --- /dev/null +++ b/configs/qemu_microblazeel_mmu_defconfig @@ -0,0 +1,31 @@ +# Architecture +BR2_microblaze=y +BR2_microblazeel=y + +# System +BR2_SYSTEM_DHCP="eth0" +BR2_TARGET_GENERIC_GETTY_PORT="ttyUL0" + +# Filesystem +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_ROOTFS_INITRAMFS=y + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/microblazeel-mmu/linux.config" +BR2_LINUX_KERNEL_LINUX_BIN=y +BR2_LINUX_KERNEL_PATCH="board/qemu/microblazeel-mmu/0001-net-xilinx-xemaclite-add-2.00.b-revision.patch" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_mips32r2_malta_defconfig b/configs/qemu_mips32r2_malta_defconfig new file mode 100644 index 00000000..434e3d95 --- /dev/null +++ b/configs/qemu_mips32r2_malta_defconfig @@ -0,0 +1,33 @@ +# Architecture +BR2_mips=y +BR2_mips_32r2=y + +# System +BR2_SYSTEM_DHCP="eth0" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/mips32r2-malta/linux.config" +BR2_LINUX_KERNEL_VMLINUX=y + +# Serial port config +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_mips32r2el_malta_defconfig b/configs/qemu_mips32r2el_malta_defconfig new file mode 100644 index 00000000..2b8b2e8d --- /dev/null +++ b/configs/qemu_mips32r2el_malta_defconfig @@ -0,0 +1,33 @@ +# Architecture +BR2_mipsel=y +BR2_mips_32r2=y + +# System +BR2_SYSTEM_DHCP="eth0" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/mips32r2el-malta/linux.config" +BR2_LINUX_KERNEL_VMLINUX=y + +# Serial port config +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_mips32r6_malta_defconfig b/configs/qemu_mips32r6_malta_defconfig new file mode 100644 index 00000000..bf1306a2 --- /dev/null +++ b/configs/qemu_mips32r6_malta_defconfig @@ -0,0 +1,34 @@ +# Architecture +BR2_mips=y +BR2_mips_32r6=y + +# System +BR2_SYSTEM_DHCP="eth0" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/mips32r6-malta/linux.config" +BR2_LINUX_KERNEL_VMLINUX=y +BR2_GLOBAL_PATCH_DIR="board/qemu/mips32r6-malta/patches" + +# Serial port config +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_mips32r6el_malta_defconfig b/configs/qemu_mips32r6el_malta_defconfig new file mode 100644 index 00000000..5edf591b --- /dev/null +++ b/configs/qemu_mips32r6el_malta_defconfig @@ -0,0 +1,34 @@ +# Architecture +BR2_mipsel=y +BR2_mips_32r6=y + +# System +BR2_SYSTEM_DHCP="eth0" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/mips32r6el-malta/linux.config" +BR2_LINUX_KERNEL_VMLINUX=y +BR2_GLOBAL_PATCH_DIR="board/qemu/mips32r6el-malta/patches" + +# Serial port config +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_mips64_malta_defconfig b/configs/qemu_mips64_malta_defconfig new file mode 100644 index 00000000..ec841b5a --- /dev/null +++ b/configs/qemu_mips64_malta_defconfig @@ -0,0 +1,33 @@ +# Architecture +BR2_mips64=y +BR2_MIPS_NABI64=y + +# System +BR2_SYSTEM_DHCP="eth0" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/mips64-malta/linux.config" +BR2_LINUX_KERNEL_VMLINUX=y + +# Serial port config +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_mips64el_malta_defconfig b/configs/qemu_mips64el_malta_defconfig new file mode 100644 index 00000000..680ccbbd --- /dev/null +++ b/configs/qemu_mips64el_malta_defconfig @@ -0,0 +1,33 @@ +# Architecture +BR2_mips64el=y +BR2_MIPS_NABI64=y + +# System +BR2_SYSTEM_DHCP="eth0" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/mips64el-malta/linux.config" +BR2_LINUX_KERNEL_VMLINUX=y + +# Serial port config +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_mips64r6_malta_defconfig b/configs/qemu_mips64r6_malta_defconfig new file mode 100644 index 00000000..53c5c097 --- /dev/null +++ b/configs/qemu_mips64r6_malta_defconfig @@ -0,0 +1,35 @@ +# Architecture +BR2_mips64=y +BR2_mips_64r6=y +BR2_MIPS_NABI64=y + +# System +BR2_SYSTEM_DHCP="eth0" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/mips64r6-malta/linux.config" +BR2_LINUX_KERNEL_VMLINUX=y +BR2_GLOBAL_PATCH_DIR="board/qemu/mips64r6-malta/patches" + +# Serial port config +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_mips64r6el_malta_defconfig b/configs/qemu_mips64r6el_malta_defconfig new file mode 100644 index 00000000..8230b1a9 --- /dev/null +++ b/configs/qemu_mips64r6el_malta_defconfig @@ -0,0 +1,35 @@ +# Architecture +BR2_mips64el=y +BR2_mips_64r6=y +BR2_MIPS_NABI64=y + +# System +BR2_SYSTEM_DHCP="eth0" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/mips64r6el-malta/linux.config" +BR2_LINUX_KERNEL_VMLINUX=y +BR2_GLOBAL_PATCH_DIR="board/qemu/mips64r6el-malta/patches" + +# Serial port config +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_nios2_10m50_defconfig b/configs/qemu_nios2_10m50_defconfig new file mode 100644 index 00000000..d562e941 --- /dev/null +++ b/configs/qemu_nios2_10m50_defconfig @@ -0,0 +1,21 @@ +BR2_nios2=y +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_DEFCONFIG="10m50" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/qemu/nios2-10m50/linux.fragment" +BR2_TARGET_ROOTFS_INITRAMFS=y + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel needs mkimage +BR2_PACKAGE_HOST_UBOOT_TOOLS=y + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_or1k_defconfig b/configs/qemu_or1k_defconfig new file mode 100644 index 00000000..21d86e22 --- /dev/null +++ b/configs/qemu_or1k_defconfig @@ -0,0 +1,24 @@ +# Architecture +BR2_or1k=y + +# Filesystem +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_ROOTFS_INITRAMFS=y + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/or1k/linux.config" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_ppc64_e5500_defconfig b/configs/qemu_ppc64_e5500_defconfig new file mode 100644 index 00000000..dace0af8 --- /dev/null +++ b/configs/qemu_ppc64_e5500_defconfig @@ -0,0 +1,29 @@ +# Architecture +BR2_powerpc64=y +BR2_powerpc_e5500=y + +# Serial port config +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as the kernel +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_DEFCONFIG="corenet64_smp" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/qemu/ppc64-e5500/linux.fragment" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_ppc64_pseries_defconfig b/configs/qemu_ppc64_pseries_defconfig new file mode 100644 index 00000000..4ce116e2 --- /dev/null +++ b/configs/qemu_ppc64_pseries_defconfig @@ -0,0 +1,29 @@ +# Architecture +BR2_powerpc64=y +BR2_powerpc_power7=y + +# System +BR2_SYSTEM_DHCP="eth0" +BR2_TARGET_GENERIC_GETTY_PORT="hvc0" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_DEFCONFIG="pseries" +BR2_LINUX_KERNEL_VMLINUX=y + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_ppc64le_pseries_defconfig b/configs/qemu_ppc64le_pseries_defconfig new file mode 100644 index 00000000..3be9de74 --- /dev/null +++ b/configs/qemu_ppc64le_pseries_defconfig @@ -0,0 +1,29 @@ +# Architecture +BR2_powerpc64le=y +BR2_powerpc_power8=y + +# System +BR2_TARGET_GENERIC_GETTY_PORT="hvc0" +BR2_SYSTEM_DHCP="eth0" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_DEFCONFIG="pseries_le" +BR2_LINUX_KERNEL_VMLINUX=y + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_ppc_g3beige_defconfig b/configs/qemu_ppc_g3beige_defconfig new file mode 100644 index 00000000..6e41afe8 --- /dev/null +++ b/configs/qemu_ppc_g3beige_defconfig @@ -0,0 +1,33 @@ +# Architecture +BR2_powerpc=y +BR2_powerpc_750=y + +# System +BR2_SYSTEM_DHCP="eth0" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/ppc-g3beige/linux.config" +BR2_LINUX_KERNEL_VMLINUX=y + +# Serial port config +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_ppc_mac99_defconfig b/configs/qemu_ppc_mac99_defconfig new file mode 100644 index 00000000..a1e9c1a5 --- /dev/null +++ b/configs/qemu_ppc_mac99_defconfig @@ -0,0 +1,34 @@ +# Architecture +BR2_powerpc=y +BR2_powerpc_7400=y + +# System +BR2_SYSTEM_DHCP="eth0" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_DEFCONFIG="pmac32" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/qemu/ppc-mac99/linux.fragment" +BR2_LINUX_KERNEL_VMLINUX=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Serial port config +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# Filesystem +BR2_TARGET_ROOTFS_CPIO=y +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_ppc_mpc8544ds_defconfig b/configs/qemu_ppc_mpc8544ds_defconfig new file mode 100644 index 00000000..55e6db5a --- /dev/null +++ b/configs/qemu_ppc_mpc8544ds_defconfig @@ -0,0 +1,37 @@ +# Architecture +BR2_powerpc=y +BR2_powerpc_8548=y + +# System +BR2_GLOBAL_PATCH_DIR="board/qemu/ppc-mpc8544ds/patches" +BR2_SYSTEM_DHCP="eth0" + +# Filesystem +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_ROOTFS_INITRAMFS=y + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/ppc-mpc8544ds/linux.config" +BR2_LINUX_KERNEL_VMLINUX=y + +# Serial port config +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# Kernel needs mkimage +BR2_PACKAGE_HOST_UBOOT_TOOLS=y + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_riscv32_virt_defconfig b/configs/qemu_riscv32_virt_defconfig new file mode 100644 index 00000000..10420889 --- /dev/null +++ b/configs/qemu_riscv32_virt_defconfig @@ -0,0 +1,32 @@ +# Architecture +BR2_riscv=y +BR2_RISCV_32=y + +# System +BR2_SYSTEM_DHCP="eth0" +BR2_TARGET_GENERIC_GETTY=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_DEFCONFIG="rv32" +BR2_LINUX_KERNEL_IMAGE=y + +# Bootloader +BR2_TARGET_OPENSBI=y +BR2_TARGET_OPENSBI_PLAT="generic" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_riscv64_virt_defconfig b/configs/qemu_riscv64_virt_defconfig new file mode 100644 index 00000000..93d38b1e --- /dev/null +++ b/configs/qemu_riscv64_virt_defconfig @@ -0,0 +1,32 @@ +# Architecture +BR2_riscv=y +BR2_RISCV_64=y + +# System +BR2_SYSTEM_DHCP="eth0" +BR2_TARGET_GENERIC_GETTY=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_IMAGE=y + +# Bootloader +BR2_TARGET_OPENSBI=y +BR2_TARGET_OPENSBI_PLAT="generic" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_s390x_defconfig b/configs/qemu_s390x_defconfig new file mode 100644 index 00000000..9b3821f0 --- /dev/null +++ b/configs/qemu_s390x_defconfig @@ -0,0 +1,26 @@ +# Architecture +BR2_s390x=y + +# System +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y +BR2_SYSTEM_DHCP="eth0" + +# Filesystem +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_sh4_r2d_defconfig b/configs/qemu_sh4_r2d_defconfig new file mode 100644 index 00000000..a14277dd --- /dev/null +++ b/configs/qemu_sh4_r2d_defconfig @@ -0,0 +1,30 @@ +# Architecture +BR2_sh=y +BR2_sh4=y + +# System +BR2_SYSTEM_DHCP="eth0" +BR2_TARGET_GENERIC_GETTY_PORT="ttySC1" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Linux kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/sh4-r2d/linux.config" +BR2_LINUX_KERNEL_ZIMAGE=y + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_sh4eb_r2d_defconfig b/configs/qemu_sh4eb_r2d_defconfig new file mode 100644 index 00000000..4911ba03 --- /dev/null +++ b/configs/qemu_sh4eb_r2d_defconfig @@ -0,0 +1,29 @@ +# Architecture +BR2_sh=y +BR2_sh4eb=y + +# System +BR2_TARGET_GENERIC_GETTY_PORT="ttySC1" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Linux kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/sh4eb-r2d/linux.config" +BR2_LINUX_KERNEL_ZIMAGE=y + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_sparc64_sun4u_defconfig b/configs/qemu_sparc64_sun4u_defconfig new file mode 100644 index 00000000..cff0c296 --- /dev/null +++ b/configs/qemu_sparc64_sun4u_defconfig @@ -0,0 +1,28 @@ +# Architecture +BR2_sparc64=y +BR2_sparc_v9=y + +# System +BR2_SYSTEM_DHCP="eth0" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Linux kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/sparc64-sun4u/linux.config" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_sparc_ss10_defconfig b/configs/qemu_sparc_ss10_defconfig new file mode 100644 index 00000000..0181f168 --- /dev/null +++ b/configs/qemu_sparc_ss10_defconfig @@ -0,0 +1,28 @@ +# Architecture +BR2_sparc=y +BR2_sparc_v8=y + +# System +BR2_SYSTEM_DHCP="eth0" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Linux kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/sparc-ss10/linux.config" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_x86_64_defconfig b/configs/qemu_x86_64_defconfig new file mode 100644 index 00000000..25e0d43f --- /dev/null +++ b/configs/qemu_x86_64_defconfig @@ -0,0 +1,30 @@ +# Architecture +BR2_x86_64=y + +# System +BR2_SYSTEM_DHCP="eth0" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_BUILD_SCRIPT="board/qemu/x86_64/post-build.sh" + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/x86_64/linux.config" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_x86_defconfig b/configs/qemu_x86_defconfig new file mode 100644 index 00000000..bcd325b7 --- /dev/null +++ b/configs/qemu_x86_defconfig @@ -0,0 +1,31 @@ +# Architecture +BR2_i386=y +BR2_x86_pentiumpro=y + +# System +BR2_SYSTEM_DHCP="eth0" + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Image +BR2_ROOTFS_POST_BUILD_SCRIPT="board/qemu/x86/post-build.sh" + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/x86/linux.config" + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_xtensa_lx60_defconfig b/configs/qemu_xtensa_lx60_defconfig new file mode 100644 index 00000000..50c1c4cc --- /dev/null +++ b/configs/qemu_xtensa_lx60_defconfig @@ -0,0 +1,36 @@ +# Architecture +BR2_xtensa=y +BR2_XTENSA_CUSTOM=y +BR2_XTENSA_OVERLAY_FILE="https://github.com/jcmvbkbc/xtensa-toolchain-build/raw/95291b7c39e6f790d0b2f062c945a630290f2c81/overlays/xtensa_dc233c.tar.gz" + +# System +BR2_SYSTEM_DHCP="eth0" +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# Filesystem +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_ROOTFS_INITRAMFS=y + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/xtensa-lx60/linux.config" +BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM=y +BR2_LINUX_KERNEL_IMAGE_NAME="Image.elf" +BR2_LINUX_KERNEL_IMAGE_TARGET_NAME="Image" + +# Kernel needs mkimage +BR2_PACKAGE_HOST_UBOOT_TOOLS=y + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/qemu_xtensa_lx60_nommu_defconfig b/configs/qemu_xtensa_lx60_nommu_defconfig new file mode 100644 index 00000000..baf72da9 --- /dev/null +++ b/configs/qemu_xtensa_lx60_nommu_defconfig @@ -0,0 +1,40 @@ +# Architecture +BR2_xtensa=y +BR2_XTENSA_CUSTOM=y +BR2_XTENSA_OVERLAY_FILE="https://github.com/jcmvbkbc/xtensa-toolchain-build/raw/95291b7c39e6f790d0b2f062c945a630290f2c81/overlays/xtensa_dc233c.tar.gz" + +# Toolchain +BR2_PACKAGE_HOST_ELF2FLT=y +# BR2_USE_MMU is not set + +# System +BR2_SYSTEM_DHCP="eth0" +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" + +# Filesystem +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_ROOTFS_INITRAMFS=y + +# Image +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/xtensa-lx60/linux-nommu.config" +BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM=y +BR2_LINUX_KERNEL_IMAGE_NAME="Image.elf" +BR2_LINUX_KERNEL_IMAGE_TARGET_NAME="Image" + +# Kernel needs mkimage +BR2_PACKAGE_HOST_UBOOT_TOOLS=y + +# host-qemu for gitlab testing +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y diff --git a/configs/raspberrypi0_defconfig b/configs/raspberrypi0_defconfig new file mode 100644 index 00000000..c06d6dfc --- /dev/null +++ b/configs/raspberrypi0_defconfig @@ -0,0 +1,36 @@ +BR2_arm=y +BR2_arm1176jzf_s=y +BR2_ARM_EABIHF=y + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +BR2_TOOLCHAIN_BUILDROOT_CXX=y + +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,967d45b29ca2902f031b867809d72e3b3d623e7a)/linux-967d45b29ca2902f031b867809d72e3b3d623e7a.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="bcmrpi" + +# Build the DTBs for A/B from the kernel sources: the zero is the same +# as the A+ model, just in a different form-factor +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="bcm2708-rpi-zero" + +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +BR2_PACKAGE_RPI_FIRMWARE=y +# BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS is not set + +# Required tools to create the SD image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# Filesystem / image +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +# BR2_TARGET_ROOTFS_TAR is not set +BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi0/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi0/post-image.sh" diff --git a/configs/raspberrypi0w_defconfig b/configs/raspberrypi0w_defconfig new file mode 100644 index 00000000..b54bb34a --- /dev/null +++ b/configs/raspberrypi0w_defconfig @@ -0,0 +1,32 @@ +BR2_arm=y +BR2_arm1176jzf_s=y +BR2_ARM_EABIHF=y + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +BR2_TOOLCHAIN_BUILDROOT_CXX=y + +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,967d45b29ca2902f031b867809d72e3b3d623e7a)/linux-967d45b29ca2902f031b867809d72e3b3d623e7a.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="bcmrpi" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="bcm2708-rpi-zero-w" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +BR2_PACKAGE_RPI_FIRMWARE=y + +# Required tools to create the SD image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# Filesystem / image +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +# BR2_TARGET_ROOTFS_TAR is not set +BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi0w/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi0w/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="--add-miniuart-bt-overlay" diff --git a/configs/raspberrypi2_defconfig b/configs/raspberrypi2_defconfig new file mode 100644 index 00000000..5104422c --- /dev/null +++ b/configs/raspberrypi2_defconfig @@ -0,0 +1,38 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_EABIHF=y +BR2_ARM_FPU_NEON_VFPV4=y + +BR2_TOOLCHAIN_BUILDROOT_CXX=y + +BR2_SYSTEM_DHCP="eth0" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,967d45b29ca2902f031b867809d72e3b3d623e7a)/linux-967d45b29ca2902f031b867809d72e3b3d623e7a.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="bcm2709" + +# Build the DTB from the kernel sources +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="bcm2709-rpi-2-b" + +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +BR2_PACKAGE_RPI_FIRMWARE=y +# BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS is not set + +# Required tools to create the SD image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# Filesystem / image +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +# BR2_TARGET_ROOTFS_TAR is not set +BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi2/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi2/post-image.sh" diff --git a/configs/raspberrypi3_64_defconfig b/configs/raspberrypi3_64_defconfig new file mode 100644 index 00000000..65c1291e --- /dev/null +++ b/configs/raspberrypi3_64_defconfig @@ -0,0 +1,37 @@ +BR2_aarch64=y +BR2_cortex_a53=y +BR2_ARM_FPU_VFPV4=y + +BR2_TOOLCHAIN_BUILDROOT_CXX=y + +BR2_SYSTEM_DHCP="eth0" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,967d45b29ca2902f031b867809d72e3b3d623e7a)/linux-967d45b29ca2902f031b867809d72e3b3d623e7a.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="bcmrpi3" + +# Build the DTB from the kernel sources +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="broadcom/bcm2710-rpi-3-b broadcom/bcm2710-rpi-3-b-plus broadcom/bcm2837-rpi-3-b" + +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +BR2_PACKAGE_RPI_FIRMWARE=y + +# Required tools to create the SD image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# Filesystem / image +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +# BR2_TARGET_ROOTFS_TAR is not set +BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi3-64/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi3-64/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="--aarch64 --add-miniuart-bt-overlay" diff --git a/configs/raspberrypi3_defconfig b/configs/raspberrypi3_defconfig new file mode 100644 index 00000000..96eca54f --- /dev/null +++ b/configs/raspberrypi3_defconfig @@ -0,0 +1,37 @@ +BR2_arm=y +BR2_cortex_a53=y +BR2_ARM_FPU_NEON_VFPV4=y + +BR2_TOOLCHAIN_BUILDROOT_CXX=y + +BR2_SYSTEM_DHCP="eth0" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,967d45b29ca2902f031b867809d72e3b3d623e7a)/linux-967d45b29ca2902f031b867809d72e3b3d623e7a.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="bcm2709" + +# Build the DTB from the kernel sources +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="bcm2710-rpi-3-b bcm2710-rpi-3-b-plus bcm2710-rpi-cm3" + +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +BR2_PACKAGE_RPI_FIRMWARE=y + +# Required tools to create the SD image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# Filesystem / image +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +# BR2_TARGET_ROOTFS_TAR is not set +BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi3/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi3/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="--add-miniuart-bt-overlay" diff --git a/configs/raspberrypi3_qt5we_defconfig b/configs/raspberrypi3_qt5we_defconfig new file mode 100644 index 00000000..8015288a --- /dev/null +++ b/configs/raspberrypi3_qt5we_defconfig @@ -0,0 +1,51 @@ +BR2_arm=y +BR2_cortex_a53=y +BR2_ARM_FPU_NEON_VFPV4=y + +BR2_TOOLCHAIN_BUILDROOT_GLIBC=y +BR2_TOOLCHAIN_BUILDROOT_CXX=y + +BR2_SYSTEM_DHCP="eth0" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,967d45b29ca2902f031b867809d72e3b3d623e7a)/linux-967d45b29ca2902f031b867809d72e3b3d623e7a.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="bcm2709" + +# Build the DTB from the kernel sources +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="bcm2710-rpi-3-b bcm2710-rpi-3-b-plus bcm2710-rpi-cm3" + +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Build Qt5 WebEngine +BR2_PACKAGE_LIBERATION=y +BR2_PACKAGE_QT5=y +BR2_PACKAGE_QT5BASE_EXAMPLES=y +BR2_PACKAGE_QT5BASE_GIF=y +BR2_PACKAGE_QT5BASE_JPEG=y +BR2_PACKAGE_QT5BASE_PNG=y +BR2_PACKAGE_QT5WEBENGINE=y +BR2_PACKAGE_QT5WEBENGINE_PROPRIETARY_CODECS=y +BR2_PACKAGE_RPI_FIRMWARE=y +BR2_PACKAGE_RPI_USERLAND=y +BR2_PACKAGE_CA_CERTIFICATES=y +BR2_PACKAGE_NTP=y + +# Required tools to create the SD image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# Filesystem / image +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="400M" +# BR2_TARGET_ROOTFS_TAR is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y +BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi3/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi3/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="--add-miniuart-bt-overlay --gpu_mem_1024=200" diff --git a/configs/raspberrypi4_64_defconfig b/configs/raspberrypi4_64_defconfig new file mode 100644 index 00000000..94ac5cf5 --- /dev/null +++ b/configs/raspberrypi4_64_defconfig @@ -0,0 +1,38 @@ +BR2_aarch64=y +BR2_cortex_a72=y +BR2_ARM_FPU_VFPV4=y + +BR2_TOOLCHAIN_BUILDROOT_CXX=y + +BR2_SYSTEM_DHCP="eth0" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,967d45b29ca2902f031b867809d72e3b3d623e7a)/linux-967d45b29ca2902f031b867809d72e3b3d623e7a.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="bcm2711" + +# Build the DTB from the kernel sources +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="broadcom/bcm2711-rpi-4-b" + +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +BR2_PACKAGE_RPI_FIRMWARE=y +BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4=y + +# Required tools to create the SD image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# Filesystem / image +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +# BR2_TARGET_ROOTFS_TAR is not set +BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi4-64/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi4-64/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="--add-miniuart-bt-overlay --aarch64" diff --git a/configs/raspberrypi4_defconfig b/configs/raspberrypi4_defconfig new file mode 100644 index 00000000..c2ed5e73 --- /dev/null +++ b/configs/raspberrypi4_defconfig @@ -0,0 +1,38 @@ +BR2_arm=y +BR2_cortex_a72=y +BR2_ARM_FPU_NEON_VFPV4=y + +BR2_TOOLCHAIN_BUILDROOT_CXX=y + +BR2_SYSTEM_DHCP="eth0" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,967d45b29ca2902f031b867809d72e3b3d623e7a)/linux-967d45b29ca2902f031b867809d72e3b3d623e7a.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="bcm2711" + +# Build the DTB from the kernel sources +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="bcm2711-rpi-4-b" + +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +BR2_PACKAGE_RPI_FIRMWARE=y +BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4=y + +# Required tools to create the SD image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# Filesystem / image +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +# BR2_TARGET_ROOTFS_TAR is not set +BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi4/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi4/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="--add-miniuart-bt-overlay" diff --git a/configs/raspberrypi_defconfig b/configs/raspberrypi_defconfig new file mode 100644 index 00000000..2d3bb536 --- /dev/null +++ b/configs/raspberrypi_defconfig @@ -0,0 +1,37 @@ +BR2_arm=y +BR2_arm1176jzf_s=y +BR2_ARM_EABIHF=y + +BR2_SYSTEM_DHCP="eth0" + +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y + +BR2_TOOLCHAIN_BUILDROOT_CXX=y + +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,967d45b29ca2902f031b867809d72e3b3d623e7a)/linux-967d45b29ca2902f031b867809d72e3b3d623e7a.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="bcmrpi" + +# Build the DTBs for A/B, A+/B+ and compute module from the kernel sources +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="bcm2708-rpi-b bcm2708-rpi-b-plus bcm2708-rpi-cm" + +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +BR2_PACKAGE_RPI_FIRMWARE=y +# BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS is not set + +# Required tools to create the SD image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# Filesystem / image +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +# BR2_TARGET_ROOTFS_TAR is not set +BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi/post-image.sh" diff --git a/configs/riotboard_defconfig b/configs/riotboard_defconfig new file mode 100644 index 00000000..3efcd885 --- /dev/null +++ b/configs/riotboard_defconfig @@ -0,0 +1,42 @@ +# architecture +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y + +# system +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc1" + +# bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2018.07" +BR2_TARGET_UBOOT_BOARDNAME="riotboard" +BR2_TARGET_UBOOT_FORMAT_IMX=y + +# Linux headers same as kernel, a 4.18 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_18=y + +# kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.18.10" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6dl-riotboard" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# required tools to create the SD card image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# rootfs +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_ROOTFS_OVERLAY="board/embest/riotboard/rootfs_overlay" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/embest/riotboard/genimage.cfg" diff --git a/configs/roc_pc_rk3399_defconfig b/configs/roc_pc_rk3399_defconfig new file mode 100644 index 00000000..dfbc5e4f --- /dev/null +++ b/configs/roc_pc_rk3399_defconfig @@ -0,0 +1,55 @@ +# Architecture +BR2_aarch64=y +BR2_cortex_a72_a53=y + +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="11a0a46a899fcc3b1fdb214b382f3d7495d88eca" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="rk3399" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_NEEDS_ARM32_TOOLCHAIN=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_IMAGES="" + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.01" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="roc-pc-rk3399" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31_ELF=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="idbloader.img" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.4.18" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="rockchip/rk3399-roc-pc" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_GENERIC_HOSTNAME="roc-rk3399-pc" +BR2_TARGET_GENERIC_ISSUE="Welcome to ROC-RK3399-PC!" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="64M" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/firefly/roc-rk3399-pc/genimage.cfg" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/firefly/roc-rk3399-pc/post-build.sh" diff --git a/configs/rock64_defconfig b/configs/rock64_defconfig new file mode 100644 index 00000000..a9d29a42 --- /dev/null +++ b/configs/rock64_defconfig @@ -0,0 +1,40 @@ +BR2_aarch64=y +BR2_GLOBAL_PATCH_DIR="board/pine64/rock64/patches" +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS2" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/pine64/rock64/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/pine64/rock64/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19.19" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="rockchip/rk3328-rock64" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="128M" +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION_VALUE="v2.2" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="rk3328" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_IMAGES="bl31/*.elf" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/ayufan-rock64/linux-mainline-u-boot.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="release-2020-07" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="rock64-rk3328" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31_ELF=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="spl/u-boot-spl.bin tpl/u-boot-tpl.bin" +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y diff --git a/configs/rock_pi_4_defconfig b/configs/rock_pi_4_defconfig new file mode 100644 index 00000000..401a59ba --- /dev/null +++ b/configs/rock_pi_4_defconfig @@ -0,0 +1,55 @@ +# Architecture +BR2_aarch64=y +BR2_cortex_a72_a53=y + +# Linux headers same as kernel, a 5.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="11a0a46a899fcc3b1fdb214b382f3d7495d88eca" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="rk3399" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_NEEDS_ARM32_TOOLCHAIN=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_IMAGES="" + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/amarula/u-boot-amarula.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="cf2747360fdd1eb0d51dd01a984c7c62c7f714fe" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="rock-pi-4-rk3399" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31_ELF=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="idbloader.img" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.4.46" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="rockchip/rk3399-rock-pi-4" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_GENERIC_HOSTNAME="rockpi4" +BR2_TARGET_GENERIC_ISSUE="Welcome to ROCK_PI_4" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="96M" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/radxa/rockpi-4/genimage.cfg" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/radxa/rockpi-4/post-build.sh" diff --git a/configs/rock_pi_n10_defconfig b/configs/rock_pi_n10_defconfig new file mode 100644 index 00000000..c622839c --- /dev/null +++ b/configs/rock_pi_n10_defconfig @@ -0,0 +1,55 @@ +# Architecture +BR2_aarch64=y +BR2_cortex_a72_a53=y + +# Linux headers same as kernel, a 5.7 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_7=y + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="11a0a46a899fcc3b1fdb214b382f3d7495d88eca" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="rk3399" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_NEEDS_ARM32_TOOLCHAIN=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_IMAGES="" + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/amarula/u-boot-amarula.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="cf2747360fdd1eb0d51dd01a984c7c62c7f714fe" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="rock-pi-n10-rk3399pro" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31_ELF=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="idbloader.img" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.7.2" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="rockchip/rk3399pro-rock-pi-n10" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_GENERIC_HOSTNAME="rockpi-n10" +BR2_TARGET_GENERIC_ISSUE="Welcome to ROCKPI-N10" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="160M" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/radxa/rockpi-n10/genimage.cfg" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/radxa/rockpi-n10/post-build.sh" diff --git a/configs/rock_pi_n8_defconfig b/configs/rock_pi_n8_defconfig new file mode 100644 index 00000000..b7135d63 --- /dev/null +++ b/configs/rock_pi_n8_defconfig @@ -0,0 +1,46 @@ +# Architecture +BR2_arm=y +BR2_cortex_a17=y +BR2_ARM_FPU_NEON_VFPV4=y + +# Linux headers same as kernel, a 5.7 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_7=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/amarula/u-boot-amarula.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="ba120841bf40ebaed049d64bb4f980083a1cf6b7" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="rock-pi-n8-rk3288" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y +BR2_TARGET_UBOOT_NEEDS_OPENSSL=y +BR2_TARGET_UBOOT_FORMAT_DTB_IMG=y +BR2_TARGET_UBOOT_FORMAT_DTB_BIN=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="idbloader.img" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_GIT=y +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/amarula/linux-amarula.git" +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="5dcb0132685b07beb82065c5d7521e6c555c55b6" +BR2_LINUX_KERNEL_USE_DEFCONFIG=y +BR2_LINUX_KERNEL_DEFCONFIG="multi_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="rk3288-rock-pi-n8" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_GENERIC_HOSTNAME="rockpi-n8" +BR2_TARGET_GENERIC_ISSUE="Welcome to ROCKPI-N8" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/radxa/rockpi-n8/genimage.cfg" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/radxa/rockpi-n8/post-build.sh" diff --git a/configs/rockpro64_defconfig b/configs/rockpro64_defconfig new file mode 100644 index 00000000..5086320c --- /dev/null +++ b/configs/rockpro64_defconfig @@ -0,0 +1,53 @@ +# Architecture +BR2_aarch64=y +BR2_cortex_a72_a53=y + +# Linux headers same as kernel, a 5.8 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_8=y + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="11a0a46a899fcc3b1fdb214b382f3d7495d88eca" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="rk3399" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_NEEDS_ARM32_TOOLCHAIN=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_IMAGES="" + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.07" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="rockpro64-rk3399" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y +BR2_TARGET_UBOOT_NEEDS_ATF_BL31_ELF=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb" +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="idbloader.img" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.8.2" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="rockchip/rk3399-rockpro64" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Filesystem +BR2_TARGET_GENERIC_HOSTNAME="rockpro64" +BR2_TARGET_GENERIC_ISSUE="Welcome to ROCKPRO64" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/pine64/rockpro64/genimage.cfg" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/pine64/rockpro64/post-build.sh" diff --git a/configs/roseapplepi_defconfig b/configs/roseapplepi_defconfig new file mode 100644 index 00000000..2af94d01 --- /dev/null +++ b/configs/roseapplepi_defconfig @@ -0,0 +1,41 @@ +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_GLOBAL_PATCH_DIR="board/roseapplepi/patches" +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y +BR2_ROOTFS_POST_BUILD_SCRIPT="board/roseapplepi/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/roseapplepi/genimage.cfg" + +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.1" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/roseapplepi/linux.config" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x8000" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="owl-s500-roseapplepi" + +# Filesystem / image +BR2_TARGET_ROOTFS_INITRAMFS=y +# BR2_TARGET_ROOTFS_TAR is not set + +# Bootloaders +BR2_TARGET_S500_BOOTLOADER=y +BR2_TARGET_S500_BOOTLOADER_BOARD="linux/bubble_gum_sd" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/xapp-le/u-boot.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="a035d2673a90143a1a74557503b2e137b1447ae6" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="actduino_bubble_gum_v10" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_FORMAT_DTB_IMG=y + +# Required tools to create the SD image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/s6lx9_microboard_defconfig b/configs/s6lx9_microboard_defconfig new file mode 100644 index 00000000..97b2d3fe --- /dev/null +++ b/configs/s6lx9_microboard_defconfig @@ -0,0 +1,13 @@ +BR2_microblaze=y +BR2_microblazeel=y +# Linux headers same as kernel, a 4.4 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_4=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyUL0" +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_ROOTFS_INITRAMFS=y +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.4.7" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/avnet/s6lx9_microboard/lx9_mmu_defconfig" +BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="board/avnet/s6lx9_microboard/lx9_mmu.dts" diff --git a/configs/sheevaplug_defconfig b/configs/sheevaplug_defconfig new file mode 100644 index 00000000..052e3939 --- /dev/null +++ b/configs/sheevaplug_defconfig @@ -0,0 +1,33 @@ +# Architecture +BR2_arm=y +BR2_arm926t=y + +# system +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyS0" +BR2_SYSTEM_DHCP="eth0" + +# filesystem +BR2_TARGET_ROOTFS_JFFS2=y +BR2_TARGET_ROOTFS_JFFS2_NANDFLASH_128K=y + +# Linux headers same as kernel, a 4.14 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_14=y + +# bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="sheevaplug" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2018.07" +BR2_TARGET_UBOOT_FORMAT_KWB=y +# BR2_TARGET_UBOOT_NETWORK is not set + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.14.63" +BR2_LINUX_KERNEL_DEFCONFIG="mvebu_v5" +BR2_LINUX_KERNEL_APPENDED_UIMAGE=y +BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x8000" +BR2_LINUX_KERNEL_INTREE_DTS_NAME="kirkwood-sheevaplug" diff --git a/configs/snps_aarch64_vdk_defconfig b/configs/snps_aarch64_vdk_defconfig new file mode 100644 index 00000000..b55dce1a --- /dev/null +++ b/configs/snps_aarch64_vdk_defconfig @@ -0,0 +1,12 @@ +BR2_aarch64=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_6=y +BR2_TARGET_GENERIC_HOSTNAME="vdk-buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to SNPS VDK by Buildroot" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.6" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/synopsys/vdk/linux-vdk-aarch64-defconfig" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set diff --git a/configs/snps_arc700_axs101_defconfig b/configs/snps_arc700_axs101_defconfig new file mode 100644 index 00000000..080250e9 --- /dev/null +++ b/configs/snps_arc700_axs101_defconfig @@ -0,0 +1,27 @@ +# Architecture +BR2_arcle=y + +# System +BR2_TARGET_GENERIC_HOSTNAME="axs101" +BR2_TARGET_GENERIC_ISSUE="Welcome to the ARC Software Development Platform" +BR2_TARGET_ROOTFS_INITRAMFS=y +BR2_SYSTEM_DHCP="eth0" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/synopsys/axs10x/post-build.sh" + +# Linux headers same as kernel, a 5.6 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_6=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.6.3" +BR2_LINUX_KERNEL_DEFCONFIG="axs101" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2018.05" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="axs101" +BR2_TARGET_UBOOT_NEEDS_DTC=y diff --git a/configs/snps_archs38_axs103_defconfig b/configs/snps_archs38_axs103_defconfig new file mode 100644 index 00000000..c5847809 --- /dev/null +++ b/configs/snps_archs38_axs103_defconfig @@ -0,0 +1,28 @@ +# Architecture +BR2_arcle=y +BR2_archs38=y + +# System +BR2_TARGET_GENERIC_HOSTNAME="axs103" +BR2_TARGET_GENERIC_ISSUE="Welcome to the ARC Software Development Platform" +BR2_TARGET_ROOTFS_INITRAMFS=y +BR2_SYSTEM_DHCP="eth0" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/synopsys/axs10x/post-build.sh" + +# Linux headers same as kernel, a 5.6 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_6=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.6.3" +BR2_LINUX_KERNEL_DEFCONFIG="axs103_smp" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2018.05" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="axs103" +BR2_TARGET_UBOOT_NEEDS_DTC=y diff --git a/configs/snps_archs38_haps_defconfig b/configs/snps_archs38_haps_defconfig new file mode 100644 index 00000000..a95d760d --- /dev/null +++ b/configs/snps_archs38_haps_defconfig @@ -0,0 +1,18 @@ +# Architecture +BR2_arcle=y +BR2_archs38=y + +# System +BR2_TARGET_GENERIC_HOSTNAME="zebu_hs" +BR2_TARGET_GENERIC_ISSUE="Welcome to the HAPS Development Platform" +BR2_TARGET_ROOTFS_INITRAMFS=y + +# Linux headers same as kernel, a 5.6 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_6=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.6.3" +BR2_LINUX_KERNEL_DEFCONFIG="haps_hs_smp" +BR2_LINUX_KERNEL_VMLINUX=y diff --git a/configs/snps_archs38_hsdk_defconfig b/configs/snps_archs38_hsdk_defconfig new file mode 100644 index 00000000..4a1ac3fc --- /dev/null +++ b/configs/snps_archs38_hsdk_defconfig @@ -0,0 +1,33 @@ +BR2_arcle=y +BR2_archs38_full=y +BR2_TOOLCHAIN_BUILDROOT_GLIBC=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_6=y +BR2_PACKAGE_GLIBC_UTILS=y +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_TARGET_OPTIMIZATION="-mfpu=fpud_all" +BR2_TARGET_GENERIC_HOSTNAME="hsdk" +BR2_TARGET_GENERIC_ISSUE="Welcome to the HSDK Platform" +BR2_SYSTEM_DHCP="eth0" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/synopsys/hsdk/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.6.3" +BR2_LINUX_KERNEL_DEFCONFIG="hsdk" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/synopsys/hsdk/linux.fragment" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2018.05" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="hsdk" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_FORMAT_ELF=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SOURCE="board/synopsys/hsdk/uboot.env.txt" +BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SIZE="0x4000" diff --git a/configs/snps_archs38_vdk_defconfig b/configs/snps_archs38_vdk_defconfig new file mode 100644 index 00000000..8d8e9f75 --- /dev/null +++ b/configs/snps_archs38_vdk_defconfig @@ -0,0 +1,20 @@ +# Architecture +BR2_arcle=y +BR2_archs38=y + +# System +BR2_TARGET_GENERIC_HOSTNAME="archs38_vdk" +BR2_TARGET_GENERIC_ISSUE="Welcome to the HS38 VDK Software Development Platform" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/synopsys/axs10x/post-build.sh" +BR2_TARGET_ROOTFS_EXT2=y + +# Linux headers same as kernel, a 5.6 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_6=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.6.3" +BR2_LINUX_KERNEL_DEFCONFIG="vdk_hs38_smp" +BR2_LINUX_KERNEL_VMLINUX=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y diff --git a/configs/socrates_cyclone5_defconfig b/configs/socrates_cyclone5_defconfig new file mode 100644 index 00000000..6ecbf05d --- /dev/null +++ b/configs/socrates_cyclone5_defconfig @@ -0,0 +1,32 @@ +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_NEON=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_16=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/altera/socrates_cyclone5/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.16.7" +BR2_LINUX_KERNEL_DEFCONFIG="socfpga" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="socfpga_cyclone5_socrates" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2018.03" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="socfpga_socrates" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_FORMAT_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_ALTERA_SOCFPGA_IMAGE_CRC=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SOURCE="board/altera/socrates_cyclone5/boot-env.txt" +BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SIZE="8192" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/solidrun_clearfog_defconfig b/configs/solidrun_clearfog_defconfig new file mode 100644 index 00000000..b73b9e8e --- /dev/null +++ b/configs/solidrun_clearfog_defconfig @@ -0,0 +1,42 @@ +# Architecture +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_NEON=y + +# Linux headers same as kernel, a 4.20 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_20=y + +# System configuration +BR2_ROOTFS_POST_BUILD_SCRIPT="board/solidrun/clearfog/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/solidrun/clearfog/genimage.cfg" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.20" +BR2_LINUX_KERNEL_DEFCONFIG="mvebu_v7" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/solidrun/clearfog/linux.fragment" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="armada-388-clearfog-base" +BR2_LINUX_KERNEL_INSTALL_TARGET=y + +# Filesystem +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_PACKAGE_HOST_GENIMAGE=y + +# Bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.07" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="clearfog" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_OPENSSL=y +# BR2_TARGET_UBOOT_FORMAT_BIN is not set +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-spl.kwb" diff --git a/configs/solidrun_clearfog_gt_8k_defconfig b/configs/solidrun_clearfog_gt_8k_defconfig new file mode 100644 index 00000000..bec4a7da --- /dev/null +++ b/configs/solidrun_clearfog_gt_8k_defconfig @@ -0,0 +1,45 @@ +BR2_aarch64=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y +BR2_TARGET_GENERIC_HOSTNAME="clearfog-gt-8k" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot for SolidRun Clearfog GT-8K" + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION_VALUE="v2.4" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="a80x0_mcbin" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_FIP=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_UBOOT_AS_BL33=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_TARGETS="mrvl_flash" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_VARIABLES="USE_COHERENT_MEM=0" +BR2_TARGET_BINARIES_MARVELL=y +BR2_TARGET_MV_DDR_MARVELL=y + +# U-Boot +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.10" +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="clearfog_gt_8k" +BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="board/solidrun/clearfog_gt_8k/uboot-fragment.config" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.5" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/solidrun/clearfog_gt_8k/linux-extras.config" +BR2_LINUX_KERNEL_INTREE_DTS_NAME="marvell/armada-8040-clearfog-gt-8k" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# rootfs +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/solidrun/clearfog_gt_8k/post-build-mainline.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/solidrun/clearfog_gt_8k/genimage.cfg" diff --git a/configs/solidrun_macchiatobin_defconfig b/configs/solidrun_macchiatobin_defconfig new file mode 100644 index 00000000..7d06313b --- /dev/null +++ b/configs/solidrun_macchiatobin_defconfig @@ -0,0 +1,47 @@ +BR2_aarch64=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y +BR2_TARGET_GENERIC_HOSTNAME="mcbin" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot for Marvell MacchiatoBin" + +# Firmware +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION_VALUE="v2.4" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="a80x0_mcbin" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_FIP=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_UBOOT_AS_BL33=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_TARGETS="mrvl_flash" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_VARIABLES="USE_COHERENT_MEM=0" +BR2_TARGET_BINARIES_MARVELL=y +BR2_TARGET_MV_DDR_MARVELL=y + +# U-Boot +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.10" +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_USE_DEFCONFIG=y +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="mvebu_mcbin-88f8040" +BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="board/solidrun/macchiatobin/uboot-fragment.config" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.5" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="marvell/armada-8040-mcbin" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/solidrun/macchiatobin/linux-extras.config" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# rootfs +BR2_TARGET_ROOTFS_TAR=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" + +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/solidrun/macchiatobin/genimage.cfg" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/solidrun/macchiatobin/post-build-mainline.sh" diff --git a/configs/stm32f429_disco_defconfig b/configs/stm32f429_disco_defconfig new file mode 100644 index 00000000..2c0641a6 --- /dev/null +++ b/configs/stm32f429_disco_defconfig @@ -0,0 +1,18 @@ +BR2_arm=y +BR2_cortex_m4=y +BR2_GLOBAL_PATCH_DIR="board/stmicroelectronics/stm32f429-disco/patches" +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_11=y +BR2_ROOTFS_POST_BUILD_SCRIPT="board/stmicroelectronics/common/stm32f4xx/stm32-post-build.sh" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.11" +BR2_LINUX_KERNEL_DEFCONFIG="stm32" +BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM=y +BR2_LINUX_KERNEL_IMAGE_TARGET_NAME="xipImage" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="stm32f429-disco" +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox-minimal.config" +BR2_TARGET_ROOTFS_INITRAMFS=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_AFBOOT_STM32=y +BR2_PACKAGE_HOST_OPENOCD=y diff --git a/configs/stm32f469_disco_defconfig b/configs/stm32f469_disco_defconfig new file mode 100644 index 00000000..e538a664 --- /dev/null +++ b/configs/stm32f469_disco_defconfig @@ -0,0 +1,25 @@ +BR2_arm=y +BR2_cortex_m4=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_12=y +BR2_ROOTFS_POST_BUILD_SCRIPT="board/stmicroelectronics/common/stm32f4xx/stm32-post-build.sh board/stmicroelectronics/stm32f469-disco/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/stmicroelectronics/stm32f469-disco/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.12.11" +BR2_LINUX_KERNEL_DEFCONFIG="stm32" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(LINUX_DIR)/arch/arm/configs/dram_0x00000000.config board/stmicroelectronics/stm32f469-disco/linux.fragment" +BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM=y +BR2_LINUX_KERNEL_IMAGE_TARGET_NAME="zImage" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="stm32f469-disco" +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox-minimal.config" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_SIZE="32M" +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="stm32f469-discovery" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_OPENOCD=y diff --git a/configs/stm32mp157a_dk1_defconfig b/configs/stm32mp157a_dk1_defconfig new file mode 100644 index 00000000..6883aaba --- /dev/null +++ b/configs/stm32mp157a_dk1_defconfig @@ -0,0 +1,34 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_8=y +BR2_ROOTFS_OVERLAY="board/stmicroelectronics/stm32mp157a-dk1/overlay/" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/stmicroelectronics/common/stm32mp157/post-image.sh" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.8.13" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/stmicroelectronics/stm32mp157a-dk1/linux.config" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="stm32mp157a-dk1" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION_VALUE="v2.2" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="stm32mp1" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_VARIABLES="STM32MP_SDMMC=1 AARCH32_SP=sp_min DTB_FILE_NAME=stm32mp157a-dk1.dtb" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_IMAGES="*.stm32" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_NEEDS_DTC=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.07" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="stm32mp15_trusted" +BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="board/stmicroelectronics/stm32mp157a-dk1/uboot-fragment.config" +# BR2_TARGET_UBOOT_FORMAT_BIN is not set +BR2_TARGET_UBOOT_FORMAT_STM32=y +BR2_TARGET_UBOOT_CUSTOM_MAKEOPTS="DEVICE_TREE=stm32mp157a-dk1" +BR2_PACKAGE_HOST_GENIMAGE=y diff --git a/configs/stm32mp157c_dk2_defconfig b/configs/stm32mp157c_dk2_defconfig new file mode 100644 index 00000000..50d87574 --- /dev/null +++ b/configs/stm32mp157c_dk2_defconfig @@ -0,0 +1,34 @@ +BR2_arm=y +BR2_cortex_a7=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_8=y +BR2_ROOTFS_OVERLAY="board/stmicroelectronics/stm32mp157c-dk2/overlay/" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/stmicroelectronics/common/stm32mp157/post-image.sh" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.8.13" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/stmicroelectronics/stm32mp157c-dk2/linux.config" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="stm32mp157c-dk2" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="120M" +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION_VALUE="v2.2" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="stm32mp1" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_VARIABLES="STM32MP_SDMMC=1 AARCH32_SP=sp_min DTB_FILE_NAME=stm32mp157c-dk2.dtb" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_IMAGES="*.stm32" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_NEEDS_DTC=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.07" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="stm32mp15_trusted" +BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="board/stmicroelectronics/stm32mp157c-dk2/uboot-fragment.config" +# BR2_TARGET_UBOOT_FORMAT_BIN is not set +BR2_TARGET_UBOOT_FORMAT_STM32=y +BR2_TARGET_UBOOT_CUSTOM_MAKEOPTS="DEVICE_TREE=stm32mp157c-dk2" +BR2_PACKAGE_HOST_GENIMAGE=y diff --git a/configs/toradex_apalis_imx6_defconfig b/configs/toradex_apalis_imx6_defconfig new file mode 100644 index 00000000..40a2d2d5 --- /dev/null +++ b/configs/toradex_apalis_imx6_defconfig @@ -0,0 +1,25 @@ +BR2_arm=y +BR2_cortex_a9=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/toradex/apalis-imx6/post-image.sh" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_GIT=y +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="git://git.toradex.com/linux-toradex.git" +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="d899927728beca8357a5b4120b690cb3c1d80844" +BR2_LINUX_KERNEL_DEFCONFIG="apalis_imx6" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6q-apalis-eval imx6q-apalis-ixora imx6q-apalis-ixora-v1.1" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="git://git.toradex.com/u-boot-toradex.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="30a1208727729dae22cb42f9ba9ba17efe5e6f77" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="apalis_imx6" +BR2_TARGET_UBOOT_FORMAT_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="SPL" +BR2_PACKAGE_HOST_GENIMAGE=y diff --git a/configs/ts4900_defconfig b/configs/ts4900_defconfig new file mode 100644 index 00000000..e7950cea --- /dev/null +++ b/configs/ts4900_defconfig @@ -0,0 +1,16 @@ +BR2_arm=y +BR2_cortex_a9=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_12=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/technologic/ts4900/post-image.sh" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.12" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x10008000" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6q-ts4900" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_PACKAGE_TS4900_FPGA=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_PACKAGE_HOST_GENIMAGE=y diff --git a/configs/ts5500_defconfig b/configs/ts5500_defconfig new file mode 100644 index 00000000..871c02e9 --- /dev/null +++ b/configs/ts5500_defconfig @@ -0,0 +1,26 @@ +# architecture +BR2_i386=y +BR2_x86_i586=y + +# Linux headers same as kernel, a 4.14 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_14=y + +# system +BR2_TARGET_GENERIC_GETTY_PORT="ttyS1" +BR2_ROOTFS_OVERLAY="board/technologic/ts5500/fs-overlay" + +# kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.14" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/technologic/ts5500/linux-4.14.config" +BR2_LINUX_KERNEL_INSTALL_TARGET=y + +# rootfs +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# bootloader +BR2_TARGET_SYSLINUX=y +BR2_TARGET_SYSLINUX_MBR=y diff --git a/configs/ts7680_defconfig b/configs/ts7680_defconfig new file mode 100644 index 00000000..7eb57ab1 --- /dev/null +++ b/configs/ts7680_defconfig @@ -0,0 +1,16 @@ +BR2_arm=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/technologic/ts7680/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,embeddedarm,linux-4.9.y,d03d426e6abd95a973bc669315206295713c17e8)/linux-d03d426e6abd95a973bc669315206295713c17e8.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="ts_imx28" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x40008000" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx28-ts7680" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_GENIMAGE=y diff --git a/configs/wandboard_defconfig b/configs/wandboard_defconfig new file mode 100644 index 00000000..8f9e30a1 --- /dev/null +++ b/configs/wandboard_defconfig @@ -0,0 +1,33 @@ +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y +# Linux headers same as kernel, a 5.10 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" +BR2_ROOTFS_POST_BUILD_SCRIPT="board/wandboard/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/wandboard/genimage.cfg" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="wandboard" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2021.01" +BR2_TARGET_UBOOT_FORMAT_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="SPL" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.9" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6q-wandboard imx6dl-wandboard imx6q-wandboard-revb1 imx6dl-wandboard-revb1 imx6q-wandboard-revd1 imx6dl-wandboard-revd1 imx6qp-wandboard-revd1" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +# required tools to create the SD card image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS=y diff --git a/configs/warp7_defconfig b/configs/warp7_defconfig new file mode 100644 index 00000000..5f9d9736 --- /dev/null +++ b/configs/warp7_defconfig @@ -0,0 +1,51 @@ +# architecture +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_FPU_NEON_VFPV4=y + +# Linux headers same as kernel, a 5.8 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_8=y + +# system +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" + +# rootfs overlay +BR2_ROOTFS_OVERLAY="board/warp7/rootfs_overlay" + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.8.13" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx7s-warp" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +# U-Boot +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="warp7" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.10" +BR2_TARGET_UBOOT_FORMAT_DTB_IMX=y + +# wifi firmware for brcm43430 +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM43XXX=y + +# For automatic firmware loading +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y + +# wireless packages +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y + +# Filesystem +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# required tools to create the eMMC image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/warpboard_defconfig b/configs/warpboard_defconfig new file mode 100644 index 00000000..1655381a --- /dev/null +++ b/configs/warpboard_defconfig @@ -0,0 +1,58 @@ +# architecture +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_ARM_FPU_VFPV3=y + +# Linux headers same as kernel, a 4.9 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y + +# system +BR2_TARGET_GENERIC_HOSTNAME="warpboard" +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0" + +# rootfs overlay +BR2_ROOTFS_OVERLAY="board/freescale/warpboard/rootfs_overlay" + +# kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.9" +BR2_LINUX_KERNEL_DEFCONFIG="imx_v6_v7" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/freescale/warpboard/linux.fragment" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6sl-warp" + +# wifi firmware for brcm4330 +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM43XX=y + +# For automatic firmware loading +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y + +# wireless packages +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y + +# uboot +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="warp" +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2016.11" +BR2_TARGET_UBOOT_FORMAT_IMX=y + +# host utility +BR2_PACKAGE_HOST_DFU_UTIL=y +BR2_PACKAGE_HOST_IMX_USB_LOADER=y + +# Filesystem +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/freescale/common/imx/post-image.sh" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y + +# required tools to create the eMMC image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/zynq_microzed_defconfig b/configs/zynq_microzed_defconfig new file mode 100644 index 00000000..1bb11fee --- /dev/null +++ b/configs/zynq_microzed_defconfig @@ -0,0 +1,32 @@ +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyPS0" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/zynq/post-image.sh" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,Xilinx,linux-xlnx,xilinx-v2017.3)/linux-xilinx-v2017.3.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="xilinx_zynq" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x8000" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="zynq-zed" +BR2_TARGET_ROOTFS_CPIO=y +BR2_TARGET_ROOTFS_CPIO_GZIP=y +BR2_TARGET_ROOTFS_CPIO_UIMAGE=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/Xilinx/u-boot-xlnx.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="xilinx-v2018.2" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="zynq_microzed" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_OPENSSL=y +BR2_TARGET_UBOOT_FORMAT_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="spl/boot.bin" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/zynq_qmtech_defconfig b/configs/zynq_qmtech_defconfig new file mode 100644 index 00000000..4db3f68b --- /dev/null +++ b/configs/zynq_qmtech_defconfig @@ -0,0 +1,32 @@ +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_GLOBAL_PATCH_DIR="board/qmtech/zynq/patches" +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyPS0" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/zynq/post-image.sh" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,Xilinx,linux-xlnx,xilinx-v2019.2.01)/linux-xilinx-v2019.2.01.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="xilinx_zynq" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x8000" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="zynq-qmtech" +BR2_TARGET_ROOTFS_CPIO=y +BR2_TARGET_ROOTFS_CPIO_GZIP=y +BR2_TARGET_ROOTFS_CPIO_UIMAGE=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,jolivain,u-boot-xlnx,xilinx-v2019.2.qmtech.1)/uboot-xilinx-v2019.2.qmtech.1.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="zynq_qmtech" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_OPENSSL=y +BR2_TARGET_UBOOT_FORMAT_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="spl/boot.bin" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/zynq_zc706_defconfig b/configs/zynq_zc706_defconfig new file mode 100644 index 00000000..e8019177 --- /dev/null +++ b/configs/zynq_zc706_defconfig @@ -0,0 +1,32 @@ +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyPS0" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/zynq/post-image.sh" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,Xilinx,linux-xlnx,xilinx-v2017.3)/linux-xilinx-v2017.3.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="xilinx_zynq" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x8000" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="zynq-zc706" +BR2_TARGET_ROOTFS_CPIO=y +BR2_TARGET_ROOTFS_CPIO_GZIP=y +BR2_TARGET_ROOTFS_CPIO_UIMAGE=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/Xilinx/u-boot-xlnx.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="xilinx-v2018.2" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="zynq_zc706" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_OPENSSL=y +BR2_TARGET_UBOOT_FORMAT_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="spl/boot.bin" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/zynq_zed_defconfig b/configs/zynq_zed_defconfig new file mode 100644 index 00000000..a215695b --- /dev/null +++ b/configs/zynq_zed_defconfig @@ -0,0 +1,32 @@ +BR2_arm=y +BR2_cortex_a9=y +BR2_ARM_ENABLE_NEON=y +BR2_ARM_ENABLE_VFP=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_16=y +BR2_TARGET_GENERIC_GETTY_PORT="ttyPS0" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/zynq/post-image.sh" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.16" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x8000" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="zynq-zed" +BR2_TARGET_ROOTFS_CPIO=y +BR2_TARGET_ROOTFS_CPIO_GZIP=y +BR2_TARGET_ROOTFS_CPIO_UIMAGE=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/Xilinx/u-boot-xlnx.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="xilinx-v2018.2" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="zynq_zed" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_OPENSSL=y +BR2_TARGET_UBOOT_FORMAT_IMG=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="spl/boot.bin" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/configs/zynqmp_zcu106_defconfig b/configs/zynqmp_zcu106_defconfig new file mode 100644 index 00000000..bee7c1da --- /dev/null +++ b/configs/zynqmp_zcu106_defconfig @@ -0,0 +1,34 @@ +BR2_aarch64=y +BR2_GLOBAL_PATCH_DIR="board/zynqmp/patches/" +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/zynqmp/post-image.sh" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_GIT=y +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="git://github.com/Xilinx/linux-xlnx.git" +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="xilinx-v2017.4" +BR2_LINUX_KERNEL_DEFCONFIG="xilinx_zynqmp" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="xilinx/zynqmp-zcu106-revA" +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://github.com/ARM-software/arm-trusted-firmware.git" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="v1.5" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="zynqmp" +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31_UBOOT=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_GIT=y +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="git://github.com/xilinx/u-boot-xlnx.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="228801a215909365ae1dcdd799034195ad7264f7" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="xilinx_zynqmp_zcu106_revA" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_SPL=y +BR2_TARGET_UBOOT_SPL_NAME="spl/boot.bin" +BR2_TARGET_UBOOT_ZYNQMP=y +BR2_TARGET_UBOOT_ZYNQMP_PMUFW="https://github.com/lucaceresoli/zynqmp-pmufw-binaries/raw/53fdb7b6c92860ceb0ec5fd14deee302f4a84269/bin/pmufw-zcu106-default-v2017.4.bin" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/docs/conf/asciidoc-text.conf b/docs/conf/asciidoc-text.conf new file mode 100644 index 00000000..470bdecf --- /dev/null +++ b/docs/conf/asciidoc-text.conf @@ -0,0 +1,23 @@ +# Refer to following asciidoc documentation: +# http://www.methods.co.nz/asciidoc/userguide.html +# In particular sections "Macros" and "Attribute References" +# +# For hyperlinks, show 'link text [URL]' (if link text provided) or 'URL' +[http-inlinemacro] +{0=}{0? [}{name}:{target}{0?]} +[https-inlinemacro] +{0=}{0? [}{name}:{target}{0?]} +[ftp-inlinemacro] +{0=}{0? [}{name}:{target}{0?]} +[file-inlinemacro] +{0=}{0? [}{name}:{target}{0?]} +[irc-inlinemacro] +{0=}{0? [}{name}:{target}{0?]} +[mailto-inlinemacro] +{0=}{0? [}{name}:{target}{0?]} + +# Hide image representation from text manual +[image-inlinemacro] +{empty} +[image-blockmacro] +{empty} diff --git a/docs/images b/docs/images new file mode 120000 index 00000000..7356350c --- /dev/null +++ b/docs/images @@ -0,0 +1 @@ +website/images \ No newline at end of file diff --git a/docs/manual/adding-board-support.txt b/docs/manual/adding-board-support.txt new file mode 100644 index 00000000..33ed7095 --- /dev/null +++ b/docs/manual/adding-board-support.txt @@ -0,0 +1,48 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[adding-board-support]] +== Adding support for a particular board + +Buildroot contains basic configurations for several publicly available +hardware boards, so that users of such a board can easily build a system +that is known to work. You are welcome to add support for other boards +to Buildroot too. + +To do so, you need to create a normal Buildroot configuration that +builds a basic system for the hardware: (internal) toolchain, kernel, +bootloader, filesystem and a simple BusyBox-only userspace. No specific +package should be selected: the configuration should be as minimal as +possible, and should only build a working basic BusyBox system for the +target platform. You can of course use more complicated configurations +for your internal projects, but the Buildroot project will only +integrate basic board configurations. This is because package +selections are highly application-specific. + +Once you have a known working configuration, run +make +savedefconfig+. This will generate a minimal +defconfig+ file at the +root of the Buildroot source tree. Move this file into the +configs/+ +directory, and rename it +_defconfig+. If the configuration +is a bit more complicated, it is nice to manually reformat it and +separate it into sections, with a comment before each section. Typical +sections are _Architecture_, _Toolchain options_ (typically just linux +headers version), _Firmware_, _Bootloader_, _Kernel_, and _Filesystem_. + +Always use fixed versions or commit hashes for the different +components, not the "latest" version. For example, set ++BR2_LINUX_KERNEL_CUSTOM_VERSION=y+ and ++BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE+ to the kernel version you tested +with. + +It is recommended to use as much as possible upstream versions of the +Linux kernel and bootloaders, and to use as much as possible default +kernel and bootloader configurations. If they are incorrect for your +board, or no default exists, we encourage you to send fixes to the +corresponding upstream projects. + +However, in the mean time, you may want to store kernel or bootloader +configuration or patches specific to your target platform. To do so, +create a directory +board/+ and a subdirectory ++board//+. You can then store your patches +and configurations in these directories, and reference them from the main +Buildroot configuration. Refer to xref:customize[] for more details. diff --git a/docs/manual/adding-packages-asciidoc.txt b/docs/manual/adding-packages-asciidoc.txt new file mode 100644 index 00000000..f9688b36 --- /dev/null +++ b/docs/manual/adding-packages-asciidoc.txt @@ -0,0 +1,122 @@ +// -*- mode:doc; -*- +// vim: syntax=asciidoc + +=== Infrastructure for asciidoc documents + +[[asciidoc-documents-tutorial]] + +The Buildroot manual, which you are currently reading, is entirely written +using the http://asciidoc.org/[AsciiDoc] mark-up syntax. The manual is then +rendered to many formats: + +* html +* split-html +* pdf +* epub +* text + +Although Buildroot only contains one document written in AsciiDoc, there +is, as for packages, an infrastructure for rendering documents using the +AsciiDoc syntax. + +Also as for packages, the AsciiDoc infrastructure is available from a +xref:outside-br-custom[br2-external tree]. This allows documentation for +a br2-external tree to match the Buildroot documentation, as it will be +rendered to the same formats and use the same layout and theme. + +==== +asciidoc-document+ tutorial + +Whereas package infrastructures are suffixed with +-package+, the document +infrastructures are suffixed with +-document+. So, the AsciiDoc infrastructure +is named +asciidoc-document+. + +Here is an example to render a simple AsciiDoc document. + +---- +01: ################################################################################ +02: # +03: # foo-document +04: # +05: ################################################################################ +06: +07: FOO_SOURCES = $(sort $(wildcard $(pkgdir)/*)) +08: $(eval $(call asciidoc-document)) +---- + +On line 7, the Makefile declares what the sources of the document are. +Currently, it is expected that the document's sources are only local; +Buildroot will not attempt to download anything to render a document. +Thus, you must indicate where the sources are. Usually, the string +above is sufficient for a document with no sub-directory structure. + +On line 8, we call the +asciidoc-document+ function, which generates all +the Makefile code necessary to render the document. + +==== +asciidoc-document+ reference + +The list of variables that can be set in a +.mk+ file to give metadata +information is (assuming the document name is +foo+) : + +* +FOO_SOURCES+, mandatory, defines the source files for the document. + +* +FOO_RESOURCES+, optional, may contain a space-separated list of paths + to one or more directories containing so-called resources (like CSS or + images). By default, empty. + +* +FOO_DEPENDENCIES+, optional, the list of packages (most probably, + host-packages) that must be built before building this document. + +There are also additional hooks (see xref:hooks[] for general information +on hooks), that a document may set to define extra actions to be done at +various steps: + +* +FOO_POST_RSYNC_HOOKS+ to run additional commands after the sources + have been copied by Buildroot. This can for example be used to + generate part of the manual with information extracted from the + tree. As an example, Buildroot uses this hook to generate the tables + in the appendices. + +* +FOO_CHECK_DEPENDENCIES_HOOKS+ to run additional tests on required + components to generate the document. In AsciiDoc, it is possible to + call filters, that is, programs that will parse an AsciiDoc block and + render it appropriately (e.g. http://ditaa.sourceforge.net/[ditaa] or + https://pythonhosted.org/aafigure/[aafigure]). + +* +FOO_CHECK_DEPENDENCIES__HOOKS+, to run additional tests for + the specified format ++ (see the list of rendered formats, above). + +Here is a complete example that uses all variables and all hooks: + +---- +01: ################################################################################ +02: # +03: # foo-document +04: # +05: ################################################################################ +06: +07: FOO_SOURCES = $(sort $(wildcard $(pkgdir)/*)) +08: FOO_RESOURCES = $(sort $(wildcard $(pkgdir)/ressources)) +09: +10: define FOO_GEN_EXTRA_DOC +11: /path/to/generate-script --outdir=$(@D) +12: endef +13: FOO_POST_RSYNC_HOOKS += FOO_GEN_EXTRA_DOC +14: +15: define FOO_CHECK_MY_PROG +16: if ! which my-prog >/dev/null 2>&1; then \ +17: echo "You need my-prog to generate the foo document"; \ +18: exit 1; \ +19: fi +20: endef +21: FOO_CHECK_DEPENDENCIES_HOOKS += FOO_CHECK_MY_PROG +22: +23: define FOO_CHECK_MY_OTHER_PROG +24: if ! which my-other-prog >/dev/null 2>&1; then \ +25: echo "You need my-other-prog to generate the foo document as PDF"; \ +26: exit 1; \ +27: fi +28: endef +29: FOO_CHECK_DEPENDENCIES_PDF_HOOKS += FOO_CHECK_MY_OTHER_PROG +30: +31: $(eval $(call asciidoc-document)) +---- diff --git a/docs/manual/adding-packages-autotools.txt b/docs/manual/adding-packages-autotools.txt new file mode 100644 index 00000000..a041d91e --- /dev/null +++ b/docs/manual/adding-packages-autotools.txt @@ -0,0 +1,175 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Infrastructure for autotools-based packages + +[[autotools-package-tutorial]] + +==== +autotools-package+ tutorial + +First, let's see how to write a +.mk+ file for an autotools-based +package, with an example : + +------------------------ +01: ################################################################################ +02: # +03: # libfoo +04: # +05: ################################################################################ +06: +07: LIBFOO_VERSION = 1.0 +08: LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz +09: LIBFOO_SITE = http://www.foosoftware.org/download +10: LIBFOO_INSTALL_STAGING = YES +11: LIBFOO_INSTALL_TARGET = NO +12: LIBFOO_CONF_OPTS = --disable-shared +13: LIBFOO_DEPENDENCIES = libglib2 host-pkgconf +14: +15: $(eval $(autotools-package)) +------------------------ + +On line 7, we declare the version of the package. + +On line 8 and 9, we declare the name of the tarball (xz-ed tarball recommended) +and the location of the tarball on the Web. Buildroot will automatically +download the tarball from this location. + +On line 10, we tell Buildroot to install the package to the staging +directory. The staging directory, located in +output/staging/+ +is the directory where all the packages are installed, including their +development files, etc. By default, packages are not installed to the +staging directory, since usually, only libraries need to be installed in +the staging directory: their development files are needed to compile +other libraries or applications depending on them. Also by default, when +staging installation is enabled, packages are installed in this location +using the +make install+ command. + +On line 11, we tell Buildroot to not install the package to the +target directory. This directory contains what will become the root +filesystem running on the target. For purely static libraries, it is +not necessary to install them in the target directory because they will +not be used at runtime. By default, target installation is enabled; setting +this variable to NO is almost never needed. Also by default, packages are +installed in this location using the +make install+ command. + +On line 12, we tell Buildroot to pass a custom configure option, that +will be passed to the +./configure+ script before configuring +and building the package. + +On line 13, we declare our dependencies, so that they are built +before the build process of our package starts. + +Finally, on line line 15, we invoke the +autotools-package+ +macro that generates all the Makefile rules that actually allows the +package to be built. + +[[autotools-package-reference]] + +==== +autotools-package+ reference + +The main macro of the autotools package infrastructure is ++autotools-package+. It is similar to the +generic-package+ macro. The ability to +have target and host packages is also available, with the ++host-autotools-package+ macro. + +Just like the generic infrastructure, the autotools infrastructure +works by defining a number of variables before calling the ++autotools-package+ macro. + +First, all the package metadata information variables that exist in the +generic infrastructure also exist in the autotools infrastructure: ++LIBFOO_VERSION+, +LIBFOO_SOURCE+, ++LIBFOO_PATCH+, +LIBFOO_SITE+, ++LIBFOO_SUBDIR+, +LIBFOO_DEPENDENCIES+, ++LIBFOO_INSTALL_STAGING+, +LIBFOO_INSTALL_TARGET+. + +A few additional variables, specific to the autotools infrastructure, +can also be defined. Many of them are only useful in very specific +cases, typical packages will therefore only use a few of them. + +* +LIBFOO_SUBDIR+ may contain the name of a subdirectory + inside the package that contains the configure script. This is useful, + if for example, the main configure script is not at the root of the + tree extracted by the tarball. If +HOST_LIBFOO_SUBDIR+ is + not specified, it defaults to +LIBFOO_SUBDIR+. + +* +LIBFOO_CONF_ENV+, to specify additional environment + variables to pass to the configure script. By default, empty. + +* +LIBFOO_CONF_OPTS+, to specify additional configure + options to pass to the configure script. By default, empty. + +* +LIBFOO_MAKE+, to specify an alternate +make+ + command. This is typically useful when parallel make is enabled in + the configuration (using +BR2_JLEVEL+) but that this + feature should be disabled for the given package, for one reason or + another. By default, set to +$(MAKE)+. If parallel building + is not supported by the package, then it should be set to + +LIBFOO_MAKE=$(MAKE1)+. + +* +LIBFOO_MAKE_ENV+, to specify additional environment + variables to pass to make in the build step. These are passed before + the +make+ command. By default, empty. + +* +LIBFOO_MAKE_OPTS+, to specify additional variables to + pass to make in the build step. These are passed after the + +make+ command. By default, empty. + +* +LIBFOO_AUTORECONF+, tells whether the package should + be autoreconfigured or not (i.e. if the configure script and + Makefile.in files should be re-generated by re-running autoconf, + automake, libtool, etc.). Valid values are +YES+ and + +NO+. By default, the value is +NO+ + +* +LIBFOO_AUTORECONF_ENV+, to specify additional environment + variables to pass to the 'autoreconf' program if + +LIBFOO_AUTORECONF=YES+. These are passed in the environment of + the 'autoreconf' command. By default, empty. + +* +LIBFOO_AUTORECONF_OPTS+ to specify additional options + passed to the 'autoreconf' program if + +LIBFOO_AUTORECONF=YES+. By default, empty. + +* +LIBFOO_GETTEXTIZE+, tells whether the package should be + gettextized or not (i.e. if the package uses a different gettext + version than Buildroot provides, and it is needed to run + 'gettextize'.) Only valid when +LIBFOO_AUTORECONF=YES+. Valid + values are +YES+ and +NO+. The default is +NO+. + +* +LIBFOO_GETTEXTIZE_OPTS+, to specify additional options passed to + the 'gettextize' program, if +LIBFOO_GETTEXTIZE=YES+. You may + use that if, for example, the +.po+ files are not located in the + standard place (i.e. in +po/+ at the root of the package.) By + default, '-f'. + +* +LIBFOO_LIBTOOL_PATCH+ tells whether the Buildroot + patch to fix libtool cross-compilation issues should be applied or + not. Valid values are +YES+ and +NO+. By + default, the value is +YES+ + +* +LIBFOO_INSTALL_STAGING_OPTS+ contains the make options + used to install the package to the staging directory. By default, the + value is +DESTDIR=$(STAGING_DIR) install+, which is + correct for most autotools packages. It is still possible to override + it. + +* +LIBFOO_INSTALL_TARGET_OPTS+ contains the make options + used to install the package to the target directory. By default, the + value is +DESTDIR=$(TARGET_DIR) install+. The default + value is correct for most autotools packages, but it is still possible + to override it if needed. + +With the autotools infrastructure, all the steps required to build +and install the packages are already defined, and they generally work +well for most autotools-based packages. However, when required, it is +still possible to customize what is done in any particular step: + +* By adding a post-operation hook (after extract, patch, configure, + build or install). See xref:hooks[] for details. + +* By overriding one of the steps. For example, even if the autotools + infrastructure is used, if the package +.mk+ file defines its + own +LIBFOO_CONFIGURE_CMDS+ variable, it will be used + instead of the default autotools one. However, using this method + should be restricted to very specific cases. Do not use it in the + general case. diff --git a/docs/manual/adding-packages-cargo.txt b/docs/manual/adding-packages-cargo.txt new file mode 100644 index 00000000..8fcc80bc --- /dev/null +++ b/docs/manual/adding-packages-cargo.txt @@ -0,0 +1,109 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Integration of Cargo-based packages + +Cargo is the package manager for the Rust programming language. It allows the +user to build programs or libraries written in Rust, but it also downloads and +manages their dependencies, to ensure repeatable builds. Cargo packages are +called "crates". + +[[cargo-package-tutorial]] + +==== Cargo-based package's +Config.in+ file + +The +Config.in+ file of Cargo-based package 'foo' should contain: + +--------------------------- +01: config BR2_PACKAGE_FOO +02: bool "foo" +03: depends on BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS +04: select BR2_PACKAGE_HOST_RUSTC +05: help +06: This is a comment that explains what foo is. +07: +08: http://foosoftware.org/foo/ +--------------------------- + +==== Cargo-based package's +.mk+ file + +Buildroot does not (yet) provide a dedicated package infrastructure for +Cargo-based packages. So, we will explain how to write a +.mk+ file for such a +package. Let's start with an example: + +------------------------------ +01: ################################################################################ +02: # +03: # foo +04: # +05: ################################################################################ +06: +07: FOO_VERSION = 1.0 +08: FOO_SOURCE = foo-$(FOO_VERSION).tar.gz +09: FOO_SITE = http://www.foosoftware.org/download +10: FOO_LICENSE = GPL-3.0+ +11: FOO_LICENSE_FILES = COPYING +12: +13: FOO_DEPENDENCIES = host-rustc +14: +15: FOO_CARGO_ENV = CARGO_HOME=$(HOST_DIR)/share/cargo +16: +17: FOO_BIN_DIR = target/$(RUSTC_TARGET_NAME)/$(FOO_CARGO_MODE) +18: +19: FOO_CARGO_OPTS = \ +20: $(if $(BR2_ENABLE_DEBUG),,--release) \ +21: --target=$(RUSTC_TARGET_NAME) \ +22: --manifest-path=$(@D)/Cargo.toml +23: +24: define FOO_BUILD_CMDS +25: $(TARGET_MAKE_ENV) $(FOO_CARGO_ENV) \ +26: cargo build $(FOO_CARGO_OPTS) +27: endef +28: +29: define FOO_INSTALL_TARGET_CMDS +30: $(INSTALL) -D -m 0755 $(@D)/$(FOO_BIN_DIR)/foo \ +31: $(TARGET_DIR)/usr/bin/foo +32: endef +33: +34: $(eval $(generic-package)) +-------------------------------- + +The Makefile starts with the definition of the standard variables for package +declaration (lines 7 to 11). + +As seen in line 34, it is based on the +xref:generic-package-tutorial[+generic-package+ infrastructure]. So, it defines +the variables required by this particular infrastructure, where Cargo is +invoked: + +* +FOO_BUILD_CMDS+: Cargo is invoked to perform the build. The options required + to configure the cross-compilation of the package are passed via + +FOO_CONF_OPTS+. + +* +FOO_INSTALL_TARGET_CMDS+: The binary executable generated is installed on + the target. + +In order to have Cargo available for the build, +FOO_DEPENDENCIES+ needs to +contain +host-cargo+. + +To sum it up, to add a new Cargo-based package, the Makefile example can be +copied verbatim then edited to replace all occurences of +FOO+ with the +uppercase name of the new package and update the values of the standard +variables. + +==== About Dependencies Management + +A crate can depend on other libraries from crates.io or git repositories, listed +in its Cargo.toml file. Before starting a build, Cargo usually downloads +automatically them. This step can also be performed independently, via the ++cargo fetch+ command. + +Cargo maintains a local cache of the registry index and of git checkouts of the +crates, whose location is given by +$CARGO_HOME+. As seen in the package +Makefile example at line 15, this environment variable is set to ++$(HOST_DIR)/share/cargo+. + +This dependency download mechanism is not convenient when performing an offline +build, as Cargo will fail to fetch the dependencies. In that case, it is advised +to generate a tarball of the dependencies using the +cargo vendor+ and add it to ++FOO_EXTRA_DOWNLOADS+. diff --git a/docs/manual/adding-packages-cmake.txt b/docs/manual/adding-packages-cmake.txt new file mode 100644 index 00000000..73f09430 --- /dev/null +++ b/docs/manual/adding-packages-cmake.txt @@ -0,0 +1,157 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Infrastructure for CMake-based packages + +[[cmake-package-tutorial]] + +==== +cmake-package+ tutorial + +First, let's see how to write a +.mk+ file for a CMake-based package, +with an example : + +------------------------ +01: ################################################################################ +02: # +03: # libfoo +04: # +05: ################################################################################ +06: +07: LIBFOO_VERSION = 1.0 +08: LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz +09: LIBFOO_SITE = http://www.foosoftware.org/download +10: LIBFOO_INSTALL_STAGING = YES +11: LIBFOO_INSTALL_TARGET = NO +12: LIBFOO_CONF_OPTS = -DBUILD_DEMOS=ON +13: LIBFOO_DEPENDENCIES = libglib2 host-pkgconf +14: +15: $(eval $(cmake-package)) +------------------------ + +On line 7, we declare the version of the package. + +On line 8 and 9, we declare the name of the tarball (xz-ed tarball recommended) +and the location of the tarball on the Web. Buildroot will automatically +download the tarball from this location. + +On line 10, we tell Buildroot to install the package to the staging +directory. The staging directory, located in +output/staging/+ +is the directory where all the packages are installed, including their +development files, etc. By default, packages are not installed to the +staging directory, since usually, only libraries need to be installed in +the staging directory: their development files are needed to compile +other libraries or applications depending on them. Also by default, when +staging installation is enabled, packages are installed in this location +using the +make install+ command. + +On line 11, we tell Buildroot to not install the package to the +target directory. This directory contains what will become the root +filesystem running on the target. For purely static libraries, it is +not necessary to install them in the target directory because they will +not be used at runtime. By default, target installation is enabled; setting +this variable to NO is almost never needed. Also by default, packages are +installed in this location using the +make install+ command. + +On line 12, we tell Buildroot to pass custom options to CMake when it is +configuring the package. + +On line 13, we declare our dependencies, so that they are built +before the build process of our package starts. + +Finally, on line line 15, we invoke the +cmake-package+ +macro that generates all the Makefile rules that actually allows the +package to be built. + +[[cmake-package-reference]] + +==== +cmake-package+ reference + +The main macro of the CMake package infrastructure is ++cmake-package+. It is similar to the +generic-package+ macro. The ability to +have target and host packages is also available, with the ++host-cmake-package+ macro. + +Just like the generic infrastructure, the CMake infrastructure works +by defining a number of variables before calling the +cmake-package+ +macro. + +First, all the package metadata information variables that exist in +the generic infrastructure also exist in the CMake infrastructure: ++LIBFOO_VERSION+, +LIBFOO_SOURCE+, +LIBFOO_PATCH+, +LIBFOO_SITE+, ++LIBFOO_SUBDIR+, +LIBFOO_DEPENDENCIES+, +LIBFOO_INSTALL_STAGING+, ++LIBFOO_INSTALL_TARGET+. + +A few additional variables, specific to the CMake infrastructure, can +also be defined. Many of them are only useful in very specific cases, +typical packages will therefore only use a few of them. + +* +LIBFOO_SUBDIR+ may contain the name of a subdirectory inside the + package that contains the main CMakeLists.txt file. This is useful, + if for example, the main CMakeLists.txt file is not at the root of + the tree extracted by the tarball. If +HOST_LIBFOO_SUBDIR+ is not + specified, it defaults to +LIBFOO_SUBDIR+. + +* +LIBFOO_CONF_ENV+, to specify additional environment variables to + pass to CMake. By default, empty. + +* +LIBFOO_CONF_OPTS+, to specify additional configure options to pass + to CMake. By default, empty. A number of common CMake options are + set by the +cmake-package+ infrastructure; so it is normally not + necessary to set them in the package's +*.mk+ file unless you want + to override them: + +** +CMAKE_BUILD_TYPE+ is driven by +BR2_ENABLE_DEBUG+; +** +CMAKE_INSTALL_PREFIX+; +** +BUILD_SHARED_LIBS+ is driven by +BR2_STATIC_LIBS+; +** +BUILD_DOC+, +BUILD_DOCS+ are disabled; +** +BUILD_EXAMPLE+, +BUILD_EXAMPLES+ are disabled; +** +BUILD_TEST+, +BUILD_TESTS+, +BUILD_TESTING+ are disabled. + +* +LIBFOO_SUPPORTS_IN_SOURCE_BUILD = NO+ should be set when the package + cannot be built inside the source tree but needs a separate build + directory. + +* +LIBFOO_MAKE+, to specify an alternate +make+ command. This is + typically useful when parallel make is enabled in the configuration + (using +BR2_JLEVEL+) but that this feature should be disabled for + the given package, for one reason or another. By default, set to + +$(MAKE)+. If parallel building is not supported by the package, + then it should be set to +LIBFOO_MAKE=$(MAKE1)+. + +* +LIBFOO_MAKE_ENV+, to specify additional environment variables to + pass to make in the build step. These are passed before the +make+ + command. By default, empty. + +* +LIBFOO_MAKE_OPTS+, to specify additional variables to pass to make + in the build step. These are passed after the +make+ command. By + default, empty. + +* +LIBFOO_INSTALL_OPTS+ contains the make options used to + install the package to the host directory. By default, the value + is +install+, which is correct for most CMake packages. It is still + possible to override it. + +* +LIBFOO_INSTALL_STAGING_OPTS+ contains the make options used to + install the package to the staging directory. By default, the value + is +DESTDIR=$(STAGING_DIR) install/fast+, which is correct for most + CMake packages. It is still possible to override it. + +* +LIBFOO_INSTALL_TARGET_OPTS+ contains the make options used to + install the package to the target directory. By default, the value + is +DESTDIR=$(TARGET_DIR) install/fast+. The default value is correct + for most CMake packages, but it is still possible to override it if + needed. + +With the CMake infrastructure, all the steps required to build and +install the packages are already defined, and they generally work well +for most CMake-based packages. However, when required, it is still +possible to customize what is done in any particular step: + +* By adding a post-operation hook (after extract, patch, configure, + build or install). See xref:hooks[] for details. + +* By overriding one of the steps. For example, even if the CMake + infrastructure is used, if the package +.mk+ file defines its own + +LIBFOO_CONFIGURE_CMDS+ variable, it will be used instead of the + default CMake one. However, using this method should be restricted + to very specific cases. Do not use it in the general case. diff --git a/docs/manual/adding-packages-conclusion.txt b/docs/manual/adding-packages-conclusion.txt new file mode 100644 index 00000000..93f90a41 --- /dev/null +++ b/docs/manual/adding-packages-conclusion.txt @@ -0,0 +1,13 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Conclusion + +As you can see, adding a software package to Buildroot is simply a +matter of writing a Makefile using an existing example and modifying it +according to the compilation process required by the package. + +If you package software that might be useful for other people, don't +forget to send a patch to the Buildroot mailing list (see +xref:submitting-patches[])! + diff --git a/docs/manual/adding-packages-directory.txt b/docs/manual/adding-packages-directory.txt new file mode 100644 index 00000000..4ceb3fd7 --- /dev/null +++ b/docs/manual/adding-packages-directory.txt @@ -0,0 +1,556 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Package directory + +First of all, create a directory under the +package+ directory for +your software, for example +libfoo+. + +Some packages have been grouped by topic in a sub-directory: ++x11r7+, +qt5+ and +gstreamer+. If your package fits in +one of these categories, then create your package directory in these. +New subdirectories are discouraged, however. + +=== Config files + +For the package to be displayed in the configuration tool, you need to +create a Config file in your package directory. There are two types: ++Config.in+ and +Config.in.host+. + +==== +Config.in+ file + +For packages used on the target, create a file named +Config.in+. This +file will contain the option descriptions related to our +libfoo+ software +that will be used and displayed in the configuration tool. It should basically +contain: + +--------------------------- +config BR2_PACKAGE_LIBFOO + bool "libfoo" + help + This is a comment that explains what libfoo is. The help text + should be wrapped. + + http://foosoftware.org/libfoo/ +--------------------------- + +The +bool+ line, +help+ line and other metadata information about the +configuration option must be indented with one tab. The help text +itself should be indented with one tab and two spaces, lines should +be wrapped to fit 72 columns, where tab counts for 8, so 62 characters +in the text itself. The help text must mention the upstream URL of the +project after an empty line. + +As a convention specific to Buildroot, the ordering of the attributes +is as follows: + +1. The type of option: +bool+, +string+... with the prompt +2. If needed, the +default+ value(s) +3. Any dependencies on the target in +depends on+ form +4. Any dependencies on the toolchain in +depends on+ form +5. Any dependencies on other packages in +depends on+ form +6. Any dependency of the +select+ form +7. The help keyword and help text. + +You can add other sub-options into a +if BR2_PACKAGE_LIBFOO...endif+ +statement to configure particular things in your software. You can look at +examples in other packages. The syntax of the +Config.in+ file is the same +as the one for the kernel Kconfig file. The documentation for this syntax is +available at http://kernel.org/doc/Documentation/kbuild/kconfig-language.txt[] + +Finally you have to add your new +libfoo/Config.in+ to ++package/Config.in+ (or in a category subdirectory if you decided to +put your package in one of the existing categories). The files +included there are 'sorted alphabetically' per category and are 'NOT' +supposed to contain anything but the 'bare' name of the package. + +-------------------------- +source "package/libfoo/Config.in" +-------------------------- + + +==== +Config.in.host+ file + +Some packages also need to be built for the host system. There are two +options here: + +* The host package is only required to satisfy build-time + dependencies of one or more target packages. In this case, add + +host-foo+ to the target package's +BAR_DEPENDENCIES+ variable. No + +Config.in.host+ file should be created. + +* The host package should be explicitly selectable by the user from + the configuration menu. In this case, create a +Config.in.host+ file + for that host package: ++ +--------------------------- +config BR2_PACKAGE_HOST_FOO + bool "host foo" + help + This is a comment that explains what foo for the host is. + + http://foosoftware.org/foo/ +--------------------------- ++ +The same coding style and options as for the +Config.in+ file are valid. ++ +Finally you have to add your new +libfoo/Config.in.host+ to ++package/Config.in.host+. The files included there are 'sorted alphabetically' +and are 'NOT' supposed to contain anything but the 'bare' name of the package. ++ +-------------------------- +source "package/foo/Config.in.host" +-------------------------- ++ +The host package will then be available from the +Host utilities+ menu. + +[[depends-on-vs-select]] +==== Choosing +depends on+ or +select+ + +The +Config.in+ file of your package must also ensure that +dependencies are enabled. Typically, Buildroot uses the following +rules: + +* Use a +select+ type of dependency for dependencies on + libraries. These dependencies are generally not obvious and it + therefore make sense to have the kconfig system ensure that the + dependencies are selected. For example, the _libgtk2_ package uses + +select BR2_PACKAGE_LIBGLIB2+ to make sure this library is also + enabled. + The +select+ keyword expresses the dependency with a backward + semantic. + +* Use a +depends on+ type of dependency when the user really needs to + be aware of the dependency. Typically, Buildroot uses this type of + dependency for dependencies on target architecture, MMU support and + toolchain options (see xref:dependencies-target-toolchain-options[]), + or for dependencies on "big" things, such as the X.org system. + The +depends on+ keyword expresses the dependency with a forward + semantic. + +.Note +The current problem with the _kconfig_ language is that these two +dependency semantics are not internally linked. Therefore, it may be +possible to select a package, whom one of its dependencies/requirement +is not met. + +An example illustrates both the usage of +select+ and +depends on+. + +-------------------------- +config BR2_PACKAGE_RRDTOOL + bool "rrdtool" + depends on BR2_USE_WCHAR + select BR2_PACKAGE_FREETYPE + select BR2_PACKAGE_LIBART + select BR2_PACKAGE_LIBPNG + select BR2_PACKAGE_ZLIB + help + RRDtool is the OpenSource industry standard, high performance + data logging and graphing system for time series data. + + http://oss.oetiker.ch/rrdtool/ + +comment "rrdtool needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR +-------------------------- + + +Note that these two dependency types are only transitive with the +dependencies of the same kind. + +This means, in the following example: + +-------------------------- +config BR2_PACKAGE_A + bool "Package A" + +config BR2_PACKAGE_B + bool "Package B" + depends on BR2_PACKAGE_A + +config BR2_PACKAGE_C + bool "Package C" + depends on BR2_PACKAGE_B + +config BR2_PACKAGE_D + bool "Package D" + select BR2_PACKAGE_B + +config BR2_PACKAGE_E + bool "Package E" + select BR2_PACKAGE_D +-------------------------- + +* Selecting +Package C+ will be visible if +Package B+ has been + selected, which in turn is only visible if +Package A+ has been + selected. + +* Selecting +Package E+ will select +Package D+, which will select + +Package B+, it will not check for the dependencies of +Package B+, + so it will not select +Package A+. + +* Since +Package B+ is selected but +Package A+ is not, this violates + the dependency of +Package B+ on +Package A+. Therefore, in such a + situation, the transitive dependency has to be added explicitly: + +-------------------------- +config BR2_PACKAGE_D + bool "Package D" + select BR2_PACKAGE_B + depends on BR2_PACKAGE_A + +config BR2_PACKAGE_E + bool "Package E" + select BR2_PACKAGE_D + depends on BR2_PACKAGE_A +-------------------------- + +Overall, for package library dependencies, +select+ should be +preferred. + +Note that such dependencies will ensure that the dependency option +is also enabled, but not necessarily built before your package. To do +so, the dependency also needs to be expressed in the +.mk+ file of the +package. + +Further formatting details: see xref:writing-rules-config-in[the +coding style]. + +[[dependencies-target-toolchain-options]] +==== Dependencies on target and toolchain options + +Many packages depend on certain options of the toolchain: the choice of +C library, C++ support, thread support, RPC support, wchar support, +or dynamic library support. Some packages can only be built on certain +target architectures, or if an MMU is available in the processor. + +These dependencies have to be expressed with the appropriate 'depends +on' statements in the Config.in file. Additionally, for dependencies on +toolchain options, a +comment+ should be displayed when the option is +not enabled, so that the user knows why the package is not available. +Dependencies on target architecture or MMU support should not be +made visible in a comment: since it is unlikely that the user can +freely choose another target, it makes little sense to show these +dependencies explicitly. + +The +comment+ should only be visible if the +config+ option itself would +be visible when the toolchain option dependencies are met. This means +that all other dependencies of the package (including dependencies on +target architecture and MMU support) have to be repeated on the ++comment+ definition. To keep it clear, the +depends on+ statement for +these non-toolchain option should be kept separate from the +depends on+ +statement for the toolchain options. +If there is a dependency on a config option in that same file (typically +the main package) it is preferable to have a global +if ... endif+ +construct rather than repeating the +depends on+ statement on the +comment and other config options. + +The general format of a dependency +comment+ for package foo is: + +-------------------------- +foo needs a toolchain w/ featA, featB, featC +-------------------------- + +for example: + +-------------------------- +mpd needs a toolchain w/ C++, threads, wchar +-------------------------- + +or + +-------------------------- +crda needs a toolchain w/ threads +-------------------------- + +Note that this text is kept brief on purpose, so that it will fit on a +80-character terminal. + +The rest of this section enumerates the different target and toolchain +options, the corresponding config symbols to depend on, and the text to +use in the comment. + +* Target architecture +** Dependency symbol: +BR2_powerpc+, +BR2_mips+, ... (see +arch/Config.in+) +** Comment string: no comment to be added + +* MMU support +** Dependency symbol: +BR2_USE_MMU+ +** Comment string: no comment to be added + +* Gcc +__sync_*+ built-ins used for atomic operations. They are + available in variants operating on 1 byte, 2 bytes, 4 bytes and 8 + bytes. Since different architectures support atomic operations on + different sizes, one dependency symbol is available for each size: +** Dependency symbol: +BR2_TOOLCHAIN_HAS_SYNC_1+ for 1 byte, + +BR2_TOOLCHAIN_HAS_SYNC_2+ for 2 bytes, + +BR2_TOOLCHAIN_HAS_SYNC_4+ for 4 bytes, +BR2_TOOLCHAIN_HAS_SYNC_8+ + for 8 bytes. +** Comment string: no comment to be added + +* Gcc +__atomic_*+ built-ins used for atomic operations. +** Dependency symbol: +BR2_TOOLCHAIN_HAS_ATOMIC+. +** Comment string: no comment to be added + +* Kernel headers +** Dependency symbol: +BR2_TOOLCHAIN_HEADERS_AT_LEAST_X_Y+, (replace + +X_Y+ with the proper version, see +toolchain/Config.in+) +** Comment string: +headers >= X.Y+ and/or `headers <= X.Y` (replace + +X.Y+ with the proper version) + +* GCC version +** Dependency symbol: +BR2_TOOLCHAIN_GCC_AT_LEAST_X_Y+, (replace + +X_Y+ with the proper version, see +toolchain/Config.in+) +** Comment string: +gcc >= X.Y+ and/or `gcc <= X.Y` (replace + +X.Y+ with the proper version) + +* Host GCC version +** Dependency symbol: +BR2_HOST_GCC_AT_LEAST_X_Y+, (replace + +X_Y+ with the proper version, see +Config.in+) +** Comment string: no comment to be added +** Note that it is usually not the package itself that has a minimum + host GCC version, but rather a host-package on which it depends. + +* C library +** Dependency symbol: +BR2_TOOLCHAIN_USES_GLIBC+, + +BR2_TOOLCHAIN_USES_MUSL+, +BR2_TOOLCHAIN_USES_UCLIBC+ +** Comment string: for the C library, a slightly different comment text + is used: +foo needs a glibc toolchain+, or `foo needs a glibc + toolchain w/ C++` + +* C++ support +** Dependency symbol: +BR2_INSTALL_LIBSTDCPP+ +** Comment string: `C++` + +* D support +** Dependency symbol: +BR2_TOOLCHAIN_HAS_DLANG+ +** Comment string: `Dlang` + +* Fortran support +** Dependency symbol: +BR2_TOOLCHAIN_HAS_FORTRAN+ +** Comment string: `fortran` + +* thread support +** Dependency symbol: +BR2_TOOLCHAIN_HAS_THREADS+ +** Comment string: +threads+ (unless +BR2_TOOLCHAIN_HAS_THREADS_NPTL+ + is also needed, in which case, specifying only +NPTL+ is sufficient) + +* NPTL thread support +** Dependency symbol: +BR2_TOOLCHAIN_HAS_THREADS_NPTL+ +** Comment string: +NPTL+ + +* RPC support +** Dependency symbol: +BR2_TOOLCHAIN_HAS_NATIVE_RPC+ +** Comment string: +RPC+ + +* wchar support +** Dependency symbol: +BR2_USE_WCHAR+ +** Comment string: +wchar+ + +* dynamic library +** Dependency symbol: +!BR2_STATIC_LIBS+ +** Comment string: +dynamic library+ + +==== Dependencies on a Linux kernel built by buildroot + +Some packages need a Linux kernel to be built by buildroot. These are +typically kernel modules or firmware. A comment should be added in the +Config.in file to express this dependency, similar to dependencies on +toolchain options. The general format is: + +-------------------------- +foo needs a Linux kernel to be built +-------------------------- + +If there is a dependency on both toolchain options and the Linux +kernel, use this format: + +-------------------------- +foo needs a toolchain w/ featA, featB, featC and a Linux kernel to be built +-------------------------- + +==== Dependencies on udev /dev management + +If a package needs udev /dev management, it should depend on symbol ++BR2_PACKAGE_HAS_UDEV+, and the following comment should be added: + +-------------------------- +foo needs udev /dev management +-------------------------- + +If there is a dependency on both toolchain options and udev /dev +management, use this format: + +-------------------------- +foo needs udev /dev management and a toolchain w/ featA, featB, featC +-------------------------- + +==== Dependencies on features provided by virtual packages + +Some features can be provided by more than one package, such as the +openGL libraries. + +See xref:virtual-package-tutorial[] for more on the virtual packages. + +=== The +.mk+ file + +[[adding-packages-mk]] + +Finally, here's the hardest part. Create a file named +libfoo.mk+. It +describes how the package should be downloaded, configured, built, +installed, etc. + +Depending on the package type, the +.mk+ file must be written in a +different way, using different infrastructures: + +* *Makefiles for generic packages* (not using autotools or CMake): + These are based on an infrastructure similar to the one used for + autotools-based packages, but require a little more work from the + developer. They specify what should be done for the configuration, + compilation and installation of the package. This + infrastructure must be used for all packages that do not use the + autotools as their build system. In the future, other specialized + infrastructures might be written for other build systems. We cover + them through in a xref:generic-package-tutorial[tutorial] and a + xref:generic-package-reference[reference]. + +* *Makefiles for autotools-based software* (autoconf, automake, etc.): + We provide a dedicated infrastructure for such packages, since + autotools is a very common build system. This infrastructure 'must' + be used for new packages that rely on the autotools as their build + system. We cover them through a xref:autotools-package-tutorial[tutorial] + and xref:autotools-package-reference[reference]. + +* *Makefiles for cmake-based software*: We provide a dedicated + infrastructure for such packages, as CMake is a more and more + commonly used build system and has a standardized behaviour. This + infrastructure 'must' be used for new packages that rely on + CMake. We cover them through a xref:cmake-package-tutorial[tutorial] + and xref:cmake-package-reference[reference]. + +* *Makefiles for Python modules*: We have a dedicated infrastructure + for Python modules that use either the +distutils+ or the + +setuptools+ mechanism. We cover them through a + xref:python-package-tutorial[tutorial] and a + xref:python-package-reference[reference]. + +* *Makefiles for Lua modules*: We have a dedicated infrastructure for + Lua modules available through the LuaRocks web site. We cover them + through a xref:luarocks-package-tutorial[tutorial] and a + xref:luarocks-package-reference[reference]. + +Further formatting details: see xref:writing-rules-mk[the writing +rules]. + +[[adding-packages-hash]] +=== The +.hash+ file + +When possible, you must add a third file, named +libfoo.hash+, that +contains the hashes of the downloaded files for the +libfoo+ +package. The only reason for not adding a +.hash+ file is when hash +checking is not possible due to how the package is downloaded. + +When a package has a version selection choice, then the hash file may be +stored in a subdirectory named after the version, e.g. ++package/libfoo/1.2.3/libfoo.hash+. This is especially important if the +different versions have different licensing terms, but they are stored +in the same file. Otherwise, the hash file should stay in the package's +directory. + +The hashes stored in that file are used to validate the integrity of the +downloaded files and of the license files. + +The format of this file is one line for each file for which to check the +hash, each line with the following three fields separated by two spaces: + +* the type of hash, one of: +** +md5+, +sha1+, +sha224+, +sha256+, +sha384+, +sha512+, +none+ +* the hash of the file: +** for +none+, one or more non-space chars, usually just the string +xxx+ +** for +md5+, 32 hexadecimal characters +** for +sha1+, 40 hexadecimal characters +** for +sha224+, 56 hexadecimal characters +** for +sha256+, 64 hexadecimal characters +** for +sha384+, 96 hexadecimal characters +** for +sha512+, 128 hexadecimal characters +* the name of the file: +** for a source archive: the basename of the file, without any directory + component, +** for a license file: the path as it appears in +FOO_LICENSE_FILES+. + +Lines starting with a +#+ sign are considered comments, and ignored. Empty +lines are ignored. + +There can be more than one hash for a single file, each on its own line. In +this case, all hashes must match. + +.Note +Ideally, the hashes stored in this file should match the hashes published by +upstream, e.g. on their website, in the e-mail announcement... If upstream +provides more than one type of hash (e.g. +sha1+ and +sha512+), then it is +best to add all those hashes in the +.hash+ file. If upstream does not +provide any hash, or only provides an +md5+ hash, then compute at least one +strong hash yourself (preferably +sha256+, but not +md5+), and mention +this in a comment line above the hashes. + +.Note +The hashes for license files are used to detect a license change when a +package version is bumped. The hashes are checked during the make legal-info +target run. For a package with multiple versions (like Qt5), +create the hash file in a subdirectory ++ of that package +(see also xref:patch-apply-order[]). + +The +none+ hash type is reserved to those archives downloaded from a +repository, like a 'git clone', a 'subversion checkout'... + +The example below defines a +sha1+ and a +sha256+ published by upstream for +the main +libfoo-1.2.3.tar.bz2+ tarball, an +md5+ from upstream and a +locally-computed +sha256+ hashes for a binary blob, a +sha256+ for a +downloaded patch, and an archive with no hash: + +---- +# Hashes from: http://www.foosoftware.org/download/libfoo-1.2.3.tar.bz2.{sha1,sha256}: +sha1 486fb55c3efa71148fe07895fd713ea3a5ae343a libfoo-1.2.3.tar.bz2 +sha256 efc8103cc3bcb06bda6a781532d12701eb081ad83e8f90004b39ab81b65d4369 libfoo-1.2.3.tar.bz2 + +# md5 from: http://www.foosoftware.org/download/libfoo-1.2.3.tar.bz2.md5, sha256 locally computed: +md5 2d608f3c318c6b7557d551a5a09314f03452f1a1 libfoo-data.bin +sha256 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b libfoo-data.bin + +# Locally computed: +sha256 ff52101fb90bbfc3fe9475e425688c660f46216d7e751c4bbdb1dc85cdccacb9 libfoo-fix-blabla.patch + +# No hash for 1234: +none xxx libfoo-1234.tar.gz + +# Hash for license files: +sha256 a45a845012742796534f7e91fe623262ccfb99460a2bd04015bd28d66fba95b8 COPYING +sha256 01b1f9f2c8ee648a7a596a1abe8aa4ed7899b1c9e5551bda06da6e422b04aa55 doc/COPYING.LGPL +---- + +If the +.hash+ file is present, and it contains one or more hashes for a +downloaded file, the hash(es) computed by Buildroot (after download) must +match the hash(es) stored in the +.hash+ file. If one or more hashes do +not match, Buildroot considers this an error, deletes the downloaded file, +and aborts. + +If the +.hash+ file is present, but it does not contain a hash for a +downloaded file, Buildroot considers this an error and aborts. However, +the downloaded file is left in the download directory since this +typically indicates that the +.hash+ file is wrong but the downloaded +file is probably OK. + +Hashes are currently checked for files fetched from http/ftp servers, +Git repositories, files copied using scp and local files. Hashes are +not checked for other version control systems (such as Subversion, +CVS, etc.) because Buildroot currently does not generate reproducible +tarballs when source code is fetched from such version control +systems. + +Hashes should only be added in +.hash+ files for files that are +guaranteed to be stable. For example, patches auto-generated by Github +are not guaranteed to be stable, and therefore their hashes can change +over time. Such patches should not be downloaded, and instead be added +locally to the package folder. + +If the +.hash+ file is missing, then no check is done at all. diff --git a/docs/manual/adding-packages-generic.txt b/docs/manual/adding-packages-generic.txt new file mode 100644 index 00000000..2201d438 --- /dev/null +++ b/docs/manual/adding-packages-generic.txt @@ -0,0 +1,659 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Infrastructure for packages with specific build systems + +By 'packages with specific build systems' we mean all the packages +whose build system is not one of the standard ones, such as +'autotools' or 'CMake'. This typically includes packages whose build +system is based on hand-written Makefiles or shell scripts. + +[[generic-package-tutorial]] + +==== +generic-package+ tutorial + +------------------------------ +01: ################################################################################ +02: # +03: # libfoo +04: # +05: ################################################################################ +06: +07: LIBFOO_VERSION = 1.0 +08: LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz +09: LIBFOO_SITE = http://www.foosoftware.org/download +10: LIBFOO_LICENSE = GPL-3.0+ +11: LIBFOO_LICENSE_FILES = COPYING +12: LIBFOO_INSTALL_STAGING = YES +13: LIBFOO_CONFIG_SCRIPTS = libfoo-config +14: LIBFOO_DEPENDENCIES = host-libaaa libbbb +15: +16: define LIBFOO_BUILD_CMDS +17: $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) all +18: endef +19: +20: define LIBFOO_INSTALL_STAGING_CMDS +21: $(INSTALL) -D -m 0755 $(@D)/libfoo.a $(STAGING_DIR)/usr/lib/libfoo.a +22: $(INSTALL) -D -m 0644 $(@D)/foo.h $(STAGING_DIR)/usr/include/foo.h +23: $(INSTALL) -D -m 0755 $(@D)/libfoo.so* $(STAGING_DIR)/usr/lib +24: endef +25: +26: define LIBFOO_INSTALL_TARGET_CMDS +27: $(INSTALL) -D -m 0755 $(@D)/libfoo.so* $(TARGET_DIR)/usr/lib +28: $(INSTALL) -d -m 0755 $(TARGET_DIR)/etc/foo.d +29: endef +30: +31: define LIBFOO_USERS +32: foo -1 libfoo -1 * - - - LibFoo daemon +33: endef +34: +35: define LIBFOO_DEVICES +36: /dev/foo c 666 0 0 42 0 - - - +37: endef +38: +39: define LIBFOO_PERMISSIONS +40: /bin/foo f 4755 foo libfoo - - - - - +41: endef +42: +43: $(eval $(generic-package)) +-------------------------------- + +The Makefile begins on line 7 to 11 with metadata information: the +version of the package (+LIBFOO_VERSION+), the name of the +tarball containing the package (+LIBFOO_SOURCE+) (xz-ed tarball recommended) +the Internet location at which the tarball can be downloaded from +(+LIBFOO_SITE+), the license (+LIBFOO_LICENSE+) and file with the +license text (+LIBFOO_LICENSE_FILES+). All variables must start with +the same prefix, +LIBFOO_+ in this case. This prefix is always the +uppercased version of the package name (see below to understand where +the package name is defined). + +On line 12, we specify that this package wants to install something to +the staging space. This is often needed for libraries, since they must +install header files and other development files in the staging space. +This will ensure that the commands listed in the ++LIBFOO_INSTALL_STAGING_CMDS+ variable will be executed. + +On line 13, we specify that there is some fixing to be done to some +of the 'libfoo-config' files that were installed during ++LIBFOO_INSTALL_STAGING_CMDS+ phase. +These *-config files are executable shell script files that are +located in '$(STAGING_DIR)/usr/bin' directory and are executed +by other 3rd party packages to find out the location and the linking +flags of this particular package. + +The problem is that all these *-config files by default give wrong, +host system linking flags that are unsuitable for cross-compiling. + +For example: '-I/usr/include' instead of '-I$(STAGING_DIR)/usr/include' +or: '-L/usr/lib' instead of '-L$(STAGING_DIR)/usr/lib' + +So some sed magic is done to these scripts to make them give correct +flags. +The argument to be given to +LIBFOO_CONFIG_SCRIPTS+ is the file name(s) +of the shell script(s) needing fixing. All these names are relative to +'$(STAGING_DIR)/usr/bin' and if needed multiple names can be given. + +In addition, the scripts listed in +LIBFOO_CONFIG_SCRIPTS+ are removed +from +$(TARGET_DIR)/usr/bin+, since they are not needed on the target. + +.Config script: 'divine' package +================================ +Package divine installs shell script '$(STAGING_DIR)/usr/bin/divine-config'. + +So its fixup would be: + +-------------------------------- +DIVINE_CONFIG_SCRIPTS = divine-config +-------------------------------- +================================ + +.Config script: 'imagemagick' package: +================================ +Package imagemagick installs the following scripts: +'$(STAGING_DIR)/usr/bin/{Magick,Magick++,MagickCore,MagickWand,Wand}-config' + +So it's fixup would be: + +-------------------------------- +IMAGEMAGICK_CONFIG_SCRIPTS = \ + Magick-config Magick++-config \ + MagickCore-config MagickWand-config Wand-config +-------------------------------- +================================ + +On line 14, we specify the list of dependencies this package relies +on. These dependencies are listed in terms of lower-case package names, +which can be packages for the target (without the +host-+ +prefix) or packages for the host (with the +host-+) prefix). +Buildroot will ensure that all these packages are built and installed +'before' the current package starts its configuration. + +The rest of the Makefile, lines 16..29, defines what should be done +at the different steps of the package configuration, compilation and +installation. ++LIBFOO_BUILD_CMDS+ tells what steps should be performed to +build the package. +LIBFOO_INSTALL_STAGING_CMDS+ tells what +steps should be performed to install the package in the staging space. ++LIBFOO_INSTALL_TARGET_CMDS+ tells what steps should be +performed to install the package in the target space. + +All these steps rely on the +$(@D)+ variable, which +contains the directory where the source code of the package has been +extracted. + +On lines 31..33, we define a user that is used by this package (e.g. +to run a daemon as non-root) (+LIBFOO_USERS+). + +On line 35..37, we define a device-node file used by this package +(+LIBFOO_DEVICES+). + +On line 39..41, we define the permissions to set to specific files +installed by this package (+LIBFOO_PERMISSIONS+). + +Finally, on line 43, we call the +generic-package+ function, which +generates, according to the variables defined previously, all the +Makefile code necessary to make your package working. + +[[generic-package-reference]] + +==== +generic-package+ reference + +There are two variants of the generic target. The +generic-package+ macro is +used for packages to be cross-compiled for the target. The ++host-generic-package+ macro is used for host packages, natively compiled +for the host. It is possible to call both of them in a single +.mk+ +file: once to create the rules to generate a target +package and once to create the rules to generate a host package: + +---------------------- +$(eval $(generic-package)) +$(eval $(host-generic-package)) +---------------------- + +This might be useful if the compilation of the target package requires +some tools to be installed on the host. If the package name is ++libfoo+, then the name of the package for the target is also ++libfoo+, while the name of the package for the host is ++host-libfoo+. These names should be used in the DEPENDENCIES +variables of other packages, if they depend on +libfoo+ or ++host-libfoo+. + +The call to the +generic-package+ and/or +host-generic-package+ macro +*must* be at the end of the +.mk+ file, after all variable definitions. +The call to +host-generic-package+ *must* be after the call to ++generic-package+, if any. + +For the target package, the +generic-package+ uses the variables defined by +the .mk file and prefixed by the uppercased package name: ++LIBFOO_*+. +host-generic-package+ uses the +HOST_LIBFOO_*+ variables. For +'some' variables, if the +HOST_LIBFOO_+ prefixed variable doesn't +exist, the package infrastructure uses the corresponding variable +prefixed by +LIBFOO_+. This is done for variables that are likely to +have the same value for both the target and host packages. See below +for details. + +The list of variables that can be set in a +.mk+ file to give metadata +information is (assuming the package name is +libfoo+) : + +* +LIBFOO_VERSION+, mandatory, must contain the version of the + package. Note that if +HOST_LIBFOO_VERSION+ doesn't exist, it is + assumed to be the same as +LIBFOO_VERSION+. It can also be a + revision number or a tag for packages that are fetched directly + from their version control system. Examples: + ** a version for a release tarball: +LIBFOO_VERSION = 0.1.2+ + ** a sha1 for a git tree: +LIBFOO_VERSION = cb9d6aa9429e838f0e54faa3d455bcbab5eef057+ + ** a tag for a git tree +LIBFOO_VERSION = v0.1.2+ ++ +.Note: +Using a branch name as +FOO_VERSION+ is not supported, because it does +not and can not work as people would expect it should: ++ + 1. due to local caching, Buildroot will not re-fetch the repository, + so people who expect to be able to follow the remote repository + would be quite surprised and disappointed; + 2. because two builds can never be perfectly simultaneous, and because + the remote repository may get new commits on the branch anytime, + two users, using the same Buildroot tree and building the same + configuration, may get different source, thus rendering the build + non reproducible, and people would be quite surprised and + disappointed. + +* +LIBFOO_SOURCE+ may contain the name of the tarball of the package, + which Buildroot will use to download the tarball from + +LIBFOO_SITE+. If +HOST_LIBFOO_SOURCE+ is not specified, it defaults + to +LIBFOO_SOURCE+. If none are specified, then the value is assumed + to be +libfoo-$(LIBFOO_VERSION).tar.gz+. + + Example: +LIBFOO_SOURCE = foobar-$(LIBFOO_VERSION).tar.bz2+ + +* +LIBFOO_PATCH+ may contain a space-separated list of patch file + names, that Buildroot will download and apply to the package source + code. If an entry contains +://+, then Buildroot will assume it is a + full URL and download the patch from this location. Otherwise, + Buildroot will assume that the patch should be downloaded from + +LIBFOO_SITE+. If +HOST_LIBFOO_PATCH+ is not specified, it defaults + to +LIBFOO_PATCH+. Note that patches that are included in Buildroot + itself use a different mechanism: all files of the form + +*.patch+ present in the package directory inside + Buildroot will be applied to the package after extraction (see + xref:patch-policy[patching a package]). Finally, patches listed in + the +LIBFOO_PATCH+ variable are applied _before_ the patches stored + in the Buildroot package directory. + +* +LIBFOO_SITE+ provides the location of the package, which can be a + URL or a local filesystem path. HTTP, FTP and SCP are supported URL + types for retrieving package tarballs. In these cases don't include a + trailing slash: it will be added by Buildroot between the directory + and the filename as appropriate. Git, Subversion, Mercurial, + and Bazaar are supported URL types for retrieving packages directly + from source code management systems. There is a helper function to make + it easier to download source tarballs from GitHub (refer to + xref:github-download-url[] for details). A filesystem path may be used + to specify either a tarball or a directory containing the package + source code. See +LIBFOO_SITE_METHOD+ below for more details on how + retrieval works. + + Note that SCP URLs should be of the form + +scp://[user@]host:filepath+, and that filepath is relative to the + user's home directory, so you may want to prepend the path with a + slash for absolute paths: + +scp://[user@]host:/absolutepath+. + + If +HOST_LIBFOO_SITE+ is not specified, it defaults to + +LIBFOO_SITE+. + Examples: + + +LIBFOO_SITE=http://www.libfoosoftware.org/libfoo+ + + +LIBFOO_SITE=http://svn.xiph.org/trunk/Tremor+ + + +LIBFOO_SITE=/opt/software/libfoo.tar.gz+ + + +LIBFOO_SITE=$(TOPDIR)/../src/libfoo+ + +* +LIBFOO_DL_OPTS+ is a space-separated list of additional options to + pass to the downloader. Useful for retrieving documents with + server-side checking for user logins and passwords, or to use a proxy. + All download methods valid for +LIBFOO_SITE_METHOD+ are supported; + valid options depend on the download method (consult the man page + for the respective download utilities). + +* +LIBFOO_EXTRA_DOWNLOADS+ is a space-separated list of additional + files that Buildroot should download. If an entry contains +://+ + then Buildroot will assume it is a complete URL and will download + the file using this URL. Otherwise, Buildroot will assume the file + to be downloaded is located at +LIBFOO_SITE+. Buildroot will not do + anything with those additional files, except download them: it will + be up to the package recipe to use them from +$(LIBFOO_DL_DIR)+. + +* +LIBFOO_SITE_METHOD+ determines the method used to fetch or copy the + package source code. In many cases, Buildroot guesses the method + from the contents of +LIBFOO_SITE+ and setting +LIBFOO_SITE_METHOD+ + is unnecessary. When +HOST_LIBFOO_SITE_METHOD+ is not specified, it + defaults to the value of +LIBFOO_SITE_METHOD+. + + The possible values of +LIBFOO_SITE_METHOD+ are: + ** +wget+ for normal FTP/HTTP downloads of tarballs. Used by + default when +LIBFOO_SITE+ begins with +http://+, +https://+ or + +ftp://+. + ** +scp+ for downloads of tarballs over SSH with scp. Used by + default when +LIBFOO_SITE+ begins with +scp://+. + ** +svn+ for retrieving source code from a Subversion repository. + Used by default when +LIBFOO_SITE+ begins with +svn://+. When a + +http://+ Subversion repository URL is specified in + +LIBFOO_SITE+, one 'must' specify +LIBFOO_SITE_METHOD=svn+. + Buildroot performs a checkout which is preserved as a tarball in + the download cache; subsequent builds use the tarball instead of + performing another checkout. + ** +cvs+ for retrieving source code from a CVS repository. + Used by default when +LIBFOO_SITE+ begins with +cvs://+. + The downloaded source code is cached as with the +svn+ method. + Anonymous pserver mode is assumed otherwise explicitly defined + on +LIBFOO_SITE+. Both + +LIBFOO_SITE=cvs://libfoo.net:/cvsroot/libfoo+ and + +LIBFOO_SITE=cvs://:ext:libfoo.net:/cvsroot/libfoo+ + are accepted, on the former anonymous pserver access mode is + assumed. + +LIBFOO_SITE+ 'must' contain the source URL as well as the remote + repository directory. The module is the package name. + +LIBFOO_VERSION+ is 'mandatory' and 'must' be a tag, a branch, or + a date (e.g. "2014-10-20", "2014-10-20 13:45", "2014-10-20 + 13:45+01" see "man cvs" for further details). + ** +git+ for retrieving source code from a Git repository. Used by + default when +LIBFOO_SITE+ begins with +git://+. The downloaded + source code is cached as with the +svn+ + method. + ** +hg+ for retrieving source code from a Mercurial repository. One + 'must' specify +LIBFOO_SITE_METHOD=hg+ when +LIBFOO_SITE+ + contains a Mercurial repository URL. The downloaded source code + is cached as with the +svn+ method. + ** +bzr+ for retrieving source code from a Bazaar repository. Used + by default when +LIBFOO_SITE+ begins with +bzr://+. The + downloaded source code is cached as with the +svn+ method. + ** +file+ for a local tarball. One should use this when + +LIBFOO_SITE+ specifies a package tarball as a local filename. + Useful for software that isn't available publicly or in version + control. + ** +local+ for a local source code directory. One should use this + when +LIBFOO_SITE+ specifies a local directory path containing + the package source code. Buildroot copies the contents of the + source directory into the package's build directory. Note that + for +local+ packages, no patches are applied. If you need to + still patch the source code, use +LIBFOO_POST_RSYNC_HOOKS+, see + xref:hooks-rsync[]. + +* +LIBFOO_GIT_SUBMODULES+ can be set to +YES+ to create an archive + with the git submodules in the repository. This is only available + for packages downloaded with git (i.e. when + +LIBFOO_SITE_METHOD=git+). Note that we try not to use such git + submodules when they contain bundled libraries, in which case we + prefer to use those libraries from their own package. + +* +LIBFOO_STRIP_COMPONENTS+ is the number of leading components + (directories) that tar must strip from file names on extraction. + The tarball for most packages has one leading component named + "-", thus Buildroot passes + --strip-components=1 to tar to remove it. + For non-standard packages that don't have this component, or + that have more than one leading component to strip, set this + variable with the value to be passed to tar. Default: 1. + +* +LIBFOO_EXCLUDES+ is a space-separated list of patterns to exclude + when extracting the archive. Each item from that list is passed as + a tar's +--exclude+ option. By default, empty. + +* +LIBFOO_DEPENDENCIES+ lists the dependencies (in terms of package + name) that are required for the current target package to + compile. These dependencies are guaranteed to be compiled and + installed before the configuration of the current package starts. + However, modifications to configuration of these dependencies will + not force a rebuild of the current package. In a similar way, + +HOST_LIBFOO_DEPENDENCIES+ lists the dependencies for the current + host package. + +* +LIBFOO_EXTRACT_DEPENDENCIES+ lists the dependencies (in terms of + package name) that are required for the current target package to be + extracted. These dependencies are guaranteed to be compiled and + installed before the extract step of the current package + starts. This is only used internally by the package infrastructure, + and should typically not be used directly by packages. + +* +LIBFOO_PATCH_DEPENDENCIES+ lists the dependencies (in terms of + package name) that are required for the current package to be + patched. These dependencies are guaranteed to be extracted and + patched (but not necessarily built) before the current package is + patched. In a similar way, +HOST_LIBFOO_PATCH_DEPENDENCIES+ lists + the dependencies for the current host package. + This is seldom used; usually, +LIBFOO_DEPENDENCIES+ is what you + really want to use. + +* +LIBFOO_PROVIDES+ lists all the virtual packages +libfoo+ is an + implementation of. See xref:virtual-package-tutorial[]. + +* +LIBFOO_INSTALL_STAGING+ can be set to +YES+ or +NO+ (default). If + set to +YES+, then the commands in the +LIBFOO_INSTALL_STAGING_CMDS+ + variables are executed to install the package into the staging + directory. + +* +LIBFOO_INSTALL_TARGET+ can be set to +YES+ (default) or +NO+. If + set to +YES+, then the commands in the +LIBFOO_INSTALL_TARGET_CMDS+ + variables are executed to install the package into the target + directory. + +* +LIBFOO_INSTALL_IMAGES+ can be set to +YES+ or +NO+ (default). If + set to +YES+, then the commands in the +LIBFOO_INSTALL_IMAGES_CMDS+ + variable are executed to install the package into the images + directory. + +* +LIBFOO_CONFIG_SCRIPTS+ lists the names of the files in + '$(STAGING_DIR)/usr/bin' that need some special fixing to make them + cross-compiling friendly. Multiple file names separated by space can + be given and all are relative to '$(STAGING_DIR)/usr/bin'. The files + listed in +LIBFOO_CONFIG_SCRIPTS+ are also removed from + +$(TARGET_DIR)/usr/bin+ since they are not needed on the target. + +* +LIBFOO_DEVICES+ lists the device files to be created by Buildroot + when using the static device table. The syntax to use is the + makedevs one. You can find some documentation for this syntax in the + xref:makedev-syntax[]. This variable is optional. + +* +LIBFOO_PERMISSIONS+ lists the changes of permissions to be done at + the end of the build process. The syntax is once again the makedevs one. + You can find some documentation for this syntax in the xref:makedev-syntax[]. + This variable is optional. + +* +LIBFOO_USERS+ lists the users to create for this package, if it installs + a program you want to run as a specific user (e.g. as a daemon, or as a + cron-job). The syntax is similar in spirit to the makedevs one, and is + described in the xref:makeuser-syntax[]. This variable is optional. + +* +LIBFOO_LICENSE+ defines the license (or licenses) under which the package + is released. + This name will appear in the manifest file produced by +make legal-info+. + If the license appears in https://spdx.org/licenses/[the SPDX License List], + use the SPDX short identifier to make the manifest file uniform. + Otherwise, describe the license in a precise and concise way, avoiding + ambiguous names such as +BSD+ which actually name a family of licenses. + This variable is optional. If it is not defined, +unknown+ will appear in + the +license+ field of the manifest file for this package. + + The expected format for this variable must comply with the following rules: + ** If different parts of the package are released under different + licenses, then +comma+ separate licenses (e.g. +`LIBFOO_LICENSE = + GPL-2.0+, LGPL-2.1+`+). If there is clear distinction between which + component is licensed under what license, then annotate the license + with that component, between parenthesis (e.g. +`LIBFOO_LICENSE = + GPL-2.0+ (programs), LGPL-2.1+ (libraries)`+). + ** If some licenses are conditioned on a sub-option being enabled, append + the conditional licenses with a comma (e.g.: `FOO_LICENSE += , GPL-2.0+ + (programs)`); the infrastructure will internally remove the space before + the comma. + ** If the package is dual licensed, then separate licenses with the + +or+ keyword (e.g. +`LIBFOO_LICENSE = AFL-2.1 or GPL-2.0+`+). + +* +LIBFOO_LICENSE_FILES+ is a space-separated list of files in the package + tarball that contain the license(s) under which the package is released. + +make legal-info+ copies all of these files in the +legal-info+ directory. + See xref:legal-info[] for more information. + This variable is optional. If it is not defined, a warning will be produced + to let you know, and +not saved+ will appear in the +license files+ field + of the manifest file for this package. + +* +LIBFOO_ACTUAL_SOURCE_TARBALL+ only applies to packages whose + +LIBFOO_SITE+ / +LIBFOO_SOURCE+ pair points to an archive that does + not actually contain source code, but binary code. This a very + uncommon case, only known to apply to external toolchains which come + already compiled, although theoretically it might apply to other + packages. In such cases a separate tarball is usually available with + the actual source code. Set +LIBFOO_ACTUAL_SOURCE_TARBALL+ to the + name of the actual source code archive and Buildroot will download + it and use it when you run +make legal-info+ to collect + legally-relevant material. Note this file will not be downloaded + during regular builds nor by +make source+. + +* +LIBFOO_ACTUAL_SOURCE_SITE+ provides the location of the actual + source tarball. The default value is +LIBFOO_SITE+, so you don't + need to set this variable if the binary and source archives are + hosted on the same directory. If +LIBFOO_ACTUAL_SOURCE_TARBALL+ is + not set, it doesn't make sense to define + +LIBFOO_ACTUAL_SOURCE_SITE+. + +* +LIBFOO_REDISTRIBUTE+ can be set to +YES+ (default) or +NO+ to indicate if + the package source code is allowed to be redistributed. Set it to +NO+ for + non-opensource packages: Buildroot will not save the source code for this + package when collecting the +legal-info+. + +* +LIBFOO_FLAT_STACKSIZE+ defines the stack size of an application built into + the FLAT binary format. The application stack size on the NOMMU architecture + processors can't be enlarged at run time. The default stack size for the + FLAT binary format is only 4k bytes. If the application consumes more stack, + append the required number here. + +* +LIBFOO_BIN_ARCH_EXCLUDE+ is a space-separated list of paths (relative + to the target directory) to ignore when checking that the package + installs correctly cross-compiled binaries. You seldom need to set this + variable, unless the package installs binary blobs outside the default + locations, `/lib/firmware`, `/usr/lib/firmware`, `/lib/modules`, + `/usr/lib/modules`, and `/usr/share`, which are automatically excluded. + +* +LIBFOO_IGNORE_CVES+ is a space-separated list of CVEs that tells + Buildroot CVE tracking tools which CVEs should be ignored for this + package. This is typically used when the CVE is fixed by a patch in + the package, or when the CVE for some reason does not affect the + Buildroot package. A Makefile comment must always precede the + addition of a CVE to this variable. Example: + +---------------------- +# 0001-fix-cve-2020-12345.patch +LIBFOO_IGNORE_CVES += CVE-2020-12345 +# only when built with libbaz, which Buildroot doesn't support +LIBFOO_IGNORE_CVES += CVE-2020-54321 +---------------------- + +* +LIBFOO_CPE_ID_*+ variables is a set of variables that allows the + package to define its https://nvd.nist.gov/products/cpe[CPE + identifier]. The available variables are: ++ +-- +** +LIBFOO_CPE_ID_PREFIX+, specifies the prefix of the CPE identifier, + i.e the first three fields. When not defined, the default value is + +cpe:2.3:a+. + +** +LIBFOO_CPE_ID_VENDOR+, specifies the vendor part of the CPE + identifier. When not defined, the default value is + +_project+. + +** +LIBFOO_CPE_ID_PRODUCT+, specifies the product part of the CPE + identifier. When not defined, the default value is ++. + +** +LIBFOO_CPE_ID_VERSION+, specifies the version part of the CPE + identifier. When not defined the default value is + +$(LIBFOO_VERSION)+. + +** +LIBFOO_CPE_ID_UPDATE+ specifies the _update_ part of the CPE + identifier. When not defined the default value is +*+. +-- ++ +If any of those variables is defined, then the generic package +infrastructure assumes the package provides valid CPE information. In +this case, the generic package infrastructure will define ++LIBFOO_CPE_ID+. ++ +For a host package, if its +LIBFOO_CPE_ID_*+ variables are not +defined, it inherits the value of those variables from the +corresponding target package. + +The recommended way to define these variables is to use the following +syntax: + +---------------------- +LIBFOO_VERSION = 2.32 +---------------------- + +Now, the variables that define what should be performed at the +different steps of the build process. + +* +LIBFOO_EXTRACT_CMDS+ lists the actions to be performed to extract + the package. This is generally not needed as tarballs are + automatically handled by Buildroot. However, if the package uses a + non-standard archive format, such as a ZIP or RAR file, or has a + tarball with a non-standard organization, this variable allows to + override the package infrastructure default behavior. + +* +LIBFOO_CONFIGURE_CMDS+ lists the actions to be performed to + configure the package before its compilation. + +* +LIBFOO_BUILD_CMDS+ lists the actions to be performed to + compile the package. + +* +HOST_LIBFOO_INSTALL_CMDS+ lists the actions to be performed + to install the package, when the package is a host package. The + package must install its files to the directory given by + +$(HOST_DIR)+. All files, including development files such as + headers should be installed, since other packages might be compiled + on top of this package. + +* +LIBFOO_INSTALL_TARGET_CMDS+ lists the actions to be + performed to install the package to the target directory, when the + package is a target package. The package must install its files to + the directory given by +$(TARGET_DIR)+. Only the files required for + 'execution' of the package have to be + installed. Header files, static libraries and documentation will be + removed again when the target filesystem is finalized. + +* +LIBFOO_INSTALL_STAGING_CMDS+ lists the actions to be + performed to install the package to the staging directory, when the + package is a target package. The package must install its files to + the directory given by +$(STAGING_DIR)+. All development files + should be installed, since they might be needed to compile other + packages. + +* +LIBFOO_INSTALL_IMAGES_CMDS+ lists the actions to be performed to + install the package to the images directory, when the package is a + target package. The package must install its files to the directory + given by +$(BINARIES_DIR)+. Only files that are binary images (aka + images) that do not belong in the +TARGET_DIR+ but are necessary + for booting the board should be placed here. For example, a package + should utilize this step if it has binaries which would be similar + to the kernel image, bootloader or root filesystem images. + +* +LIBFOO_INSTALL_INIT_SYSV+, +LIBFOO_INSTALL_INIT_OPENRC+ and + +LIBFOO_INSTALL_INIT_SYSTEMD+ list the actions to install init + scripts either for the systemV-like init systems (busybox, + sysvinit, etc.), openrc or for the systemd units. These commands + will be run only when the relevant init system is installed (i.e. + if systemd is selected as the init system in the configuration, + only +LIBFOO_INSTALL_INIT_SYSTEMD+ will be run). The only exception + is when openrc is chosen as init system and +LIBFOO_INSTALL_INIT_OPENRC+ + has not been set, in such situation +LIBFOO_INSTALL_INIT_SYSV+ will + be called, since openrc supports sysv init scripts. + When systemd is used as the init system, buildroot will automatically enable + all services using the +systemctl preset-all+ command in the final phase of + image building. You can add preset files to prevent a particular unit from + being automatically enabled by buildroot. + +* +LIBFOO_HELP_CMDS+ lists the actions to print the package help, which + is included to the main +make help+ output. These commands can print + anything in any format. + This is seldom used, as packages rarely have custom rules. *Do not use + this variable*, unless you really know that you need to print help. + +* +LIBFOO_LINUX_CONFIG_FIXUPS+ lists the Linux kernel configuration + options that are needed to build and use this package, and without + which the package is fundamentally broken. This shall be a set of + calls to one of the kconfig tweaking option: `KCONFIG_ENABLE_OPT`, + `KCONFIG_DISABLE_OPT`, or `KCONFIG_SET_OPT`. + This is seldom used, as package usually have no strict requirements on + the kernel options. + +The preferred way to define these variables is: + +---------------------- +define LIBFOO_CONFIGURE_CMDS + action 1 + action 2 + action 3 +endef +---------------------- + +In the action definitions, you can use the following variables: + +* +$(LIBFOO_PKGDIR)+ contains the path to the directory containing the + +libfoo.mk+ and +Config.in+ files. This variable is useful when it is + necessary to install a file bundled in Buildroot, like a runtime + configuration file, a splashscreen image... + +* +$(@D)+, which contains the directory in which the package source + code has been uncompressed. + +* +$(LIBFOO_DL_DIR)+ contains the path to the directory where all the downloads + made by Buildroot for +libfoo+ are stored in. + +* +$(TARGET_CC)+, +$(TARGET_LD)+, etc. to get the target + cross-compilation utilities + +* +$(TARGET_CROSS)+ to get the cross-compilation toolchain prefix + +* Of course the +$(HOST_DIR)+, +$(STAGING_DIR)+ and +$(TARGET_DIR)+ + variables to install the packages properly. Those variables point to + the global _host_, _staging_ and _target_ directories, unless + _per-package directory_ support is used, in which case they point to + the current package _host_, _staging_ and _target_ directories. In + both cases, it doesn't make any difference from the package point of + view: it should simply use +HOST_DIR+, +STAGING_DIR+ and + +TARGET_DIR+. See xref:top-level-parallel-build[] for more details + about _per-package directory_ support. + +Finally, you can also use hooks. See xref:hooks[] for more information. diff --git a/docs/manual/adding-packages-gettext.txt b/docs/manual/adding-packages-gettext.txt new file mode 100644 index 00000000..e9c6968e --- /dev/null +++ b/docs/manual/adding-packages-gettext.txt @@ -0,0 +1,62 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Gettext integration and interaction with packages + +Many packages that support internationalization use the gettext +library. Dependencies for this library are fairly complicated and +therefore, deserve some explanation. + +The 'glibc' C library integrates a full-blown implementation of +'gettext', supporting translation. Native Language Support is +therefore built-in in 'glibc'. + +On the other hand, the 'uClibc' and 'musl' C libraries only provide a +stub implementation of the gettext functionality, which allows to +compile libraries and programs using gettext functions, but without +providing the translation capabilities of a full-blown gettext +implementation. With such C libraries, if real Native Language Support +is necessary, it can be provided by the +libintl+ library of the ++gettext+ package. + +Due to this, and in order to make sure that Native Language Support is +properly handled, packages in Buildroot that can use NLS support +should: + +1. Ensure NLS support is enabled when +BR2_SYSTEM_ENABLE_NLS=y+. This + is done automatically for 'autotools' packages and therefore should + only be done for packages using other package infrastructures. + +1. Add +$(TARGET_NLS_DEPENDENCIES)+ to the package + +_DEPENDENCIES+ variable. This addition should be done + unconditionally: the value of this variable is automatically + adjusted by the core infrastructure to contain the relevant list of + packages. If NLS support is disabled, this variable is empty. If + NLS support is enabled, this variable contains +host-gettext+ so + that tools needed to compile translation files are available on the + host. In addition, if 'uClibc' or 'musl' are used, this variable + also contains +gettext+ in order to get the full-blown 'gettext' + implementation. + +1. If needed, add +$(TARGET_NLS_LIBS)+ to the linker flags, so that + the package gets linked with +libintl+. This is generally not + needed with 'autotools' packages as they usually detect + automatically that they should link with +libintl+. However, + packages using other build systems, or problematic autotools-based + packages may need this. +$(TARGET_NLS_LIBS)+ should be added + unconditionally to the linker flags, as the core automatically + makes it empty or defined to +-lintl+ depending on the + configuration. + +No changes should be made to the +Config.in+ file to support NLS. + +Finally, certain packages need some gettext utilities on the target, +such as the +gettext+ program itself, which allows to retrieve +translated strings, from the command line. In such a case, the package +should: + +* use +select BR2_PACKAGE_GETTEXT+ in their +Config.in+ file, + indicating in a comment above that it's a runtime dependency only. + +* not add any +gettext+ dependency in the +DEPENDENCIES+ variable of + their +.mk+ file. diff --git a/docs/manual/adding-packages-golang.txt b/docs/manual/adding-packages-golang.txt new file mode 100644 index 00000000..3b345792 --- /dev/null +++ b/docs/manual/adding-packages-golang.txt @@ -0,0 +1,122 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Infrastructure for Go packages + +This infrastructure applies to Go packages that use the standard +build system and use bundled dependencies. + +[[golang-package-tutorial]] + +==== +golang-package+ tutorial + +First, let's see how to write a +.mk+ file for a go package, +with an example : + +------------------------ +01: ################################################################################ +02: # +03: # foo +04: # +05: ################################################################################ +06: +07: FOO_VERSION = 1.0 +08: FOO_SITE = $(call github,bar,foo,$(FOO_VERSION)) +09: FOO_LICENSE = BSD-3-Clause +10: FOO_LICENSE_FILES = LICENSE +11: +12: $(eval $(golang-package)) +------------------------ + +On line 7, we declare the version of the package. + +On line 8, we declare the upstream location of the package, here +fetched from Github, since a large number of Go packages are hosted on +Github. + +On line 9 and 10, we give licensing details about the package. + +Finally, on line 12, we invoke the +golang-package+ macro that +generates all the Makefile rules that actually allow the package to be +built. + +[[golang-package-reference]] + +==== +golang-package+ reference + +In their +Config.in+ file, packages using the +golang-package+ +infrastructure should depend on +BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS+ +because Buildroot will automatically add a dependency on +host-go+ +to such packages. +If you need CGO support in your package, you must add a dependency on ++BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS+. + +The main macro of the Go package infrastructure is ++golang-package+. It is similar to the +generic-package+ macro. The +ability to build host packages is also available, with the ++host-golang-package+ macro. +Host packages built by +host-golang-package+ macro should depend on +BR2_PACKAGE_HOST_GO_HOST_ARCH_SUPPORTS. + +Just like the generic infrastructure, the Go infrastructure works +by defining a number of variables before calling the +golang-package+. + +All the package metadata information variables that exist in the +xref:generic-package-reference[generic package infrastructure] also +exist in the Go infrastructure: +FOO_VERSION+, +FOO_SOURCE+, ++FOO_PATCH+, +FOO_SITE+, +FOO_SUBDIR+, +FOO_DEPENDENCIES+, ++FOO_LICENSE+, +FOO_LICENSE_FILES+, +FOO_INSTALL_STAGING+, etc. + +Note that it is not necessary to add +host-go+ in the ++FOO_DEPENDENCIES+ variable of a package, since this basic dependency +is automatically added as needed by the Go package infrastructure. + +A few additional variables, specific to the Go infrastructure, can +optionally be defined, depending on the package's needs. Many of them +are only useful in very specific cases, typical packages will +therefore only use a few of them, or none. + +* The package must specify its Go module name in the +FOO_GOMOD+ + variable. If not specified, it defaults to + +URL-domain/1st-part-of-URL/2nd-part-of-URL+, e.g +FOO_GOMOD+ will + take the value +github.com/bar/foo+ for a package that specifies + +FOO_SITE = $(call github,bar,foo,$(FOO_VERSION))+. The Go package + infrastructure will automatically generate a minimal +go.mod+ file + in the package source tree if it doesn't exist. + +* +FOO_LDFLAGS+ and +FOO_TAGS+ can be used to pass respectively the + +LDFLAGS+ or the +TAGS+ to the +go+ build command. + +* +FOO_BUILD_TARGETS+ can be used to pass the list of targets that + should be built. If +FOO_BUILD_TARGETS+ is not specified, it + defaults to +.+. We then have two cases: + +** +FOO_BUILD_TARGETS+ is +.+. In this case, we assume only one binary + will be produced, and that by default we name it after the package + name. If that is not appropriate, the name of the produced binary + can be overridden using +FOO_BIN_NAME+. + +** +FOO_BUILD_TARGETS+ is not +.+. In this case, we iterate over the + values to build each target, and for each produced a binary that is + the non-directory component of the target. For example if + +FOO_BUILD_TARGETS = cmd/docker cmd/dockerd+ the binaries produced + are +docker+ and +dockerd+. + +* +FOO_INSTALL_BINS+ can be used to pass the list of binaries that + should be installed in +/usr/bin+ on the target. If + +FOO_INSTALL_BINS+ is not specified, it defaults to the lower-case + name of package. + +With the Go infrastructure, all the steps required to build and +install the packages are already defined, and they generally work well +for most Go-based packages. However, when required, it is still +possible to customize what is done in any particular step: + +* By adding a post-operation hook (after extract, patch, configure, + build or install). See xref:hooks[] for details. + +* By overriding one of the steps. For example, even if the Go + infrastructure is used, if the package +.mk+ file defines its own + +FOO_BUILD_CMDS+ variable, it will be used instead of the default Go + one. However, using this method should be restricted to very + specific cases. Do not use it in the general case. diff --git a/docs/manual/adding-packages-hooks.txt b/docs/manual/adding-packages-hooks.txt new file mode 100644 index 00000000..0ce79f89 --- /dev/null +++ b/docs/manual/adding-packages-hooks.txt @@ -0,0 +1,87 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[hooks]] +=== Hooks available in the various build steps + +The generic infrastructure (and as a result also the derived autotools +and cmake infrastructures) allow packages to specify hooks. +These define further actions to perform after existing steps. +Most hooks aren't really useful for generic packages, since the +.mk+ +file already has full control over the actions performed in each step +of the package construction. + +The following hook points are available: + +* +LIBFOO_PRE_DOWNLOAD_HOOKS+ +* +LIBFOO_POST_DOWNLOAD_HOOKS+ + +* +LIBFOO_PRE_EXTRACT_HOOKS+ +* +LIBFOO_POST_EXTRACT_HOOKS+ + +* +LIBFOO_PRE_RSYNC_HOOKS+ +* +LIBFOO_POST_RSYNC_HOOKS+ + +* +LIBFOO_PRE_PATCH_HOOKS+ +* +LIBFOO_POST_PATCH_HOOKS+ + +* +LIBFOO_PRE_CONFIGURE_HOOKS+ +* +LIBFOO_POST_CONFIGURE_HOOKS+ + +* +LIBFOO_PRE_BUILD_HOOKS+ +* +LIBFOO_POST_BUILD_HOOKS+ + +* +LIBFOO_PRE_INSTALL_HOOKS+ (for host packages only) +* +LIBFOO_POST_INSTALL_HOOKS+ (for host packages only) + +* +LIBFOO_PRE_INSTALL_STAGING_HOOKS+ (for target packages only) +* +LIBFOO_POST_INSTALL_STAGING_HOOKS+ (for target packages only) + +* +LIBFOO_PRE_INSTALL_TARGET_HOOKS+ (for target packages only) +* +LIBFOO_POST_INSTALL_TARGET_HOOKS+ (for target packages only) + +* +LIBFOO_PRE_INSTALL_IMAGES_HOOKS+ +* +LIBFOO_POST_INSTALL_IMAGES_HOOKS+ + +* +LIBFOO_PRE_LEGAL_INFO_HOOKS+ +* +LIBFOO_POST_LEGAL_INFO_HOOKS+ + +These variables are 'lists' of variable names containing actions to be +performed at this hook point. This allows several hooks to be +registered at a given hook point. Here is an example: + +---------------------- +define LIBFOO_POST_PATCH_FIXUP + action1 + action2 +endef + +LIBFOO_POST_PATCH_HOOKS += LIBFOO_POST_PATCH_FIXUP +---------------------- + +[[hooks-rsync]] +==== Using the +POST_RSYNC+ hook +The +POST_RSYNC+ hook is run only for packages that use a local source, +either through the +local+ site method or the +OVERRIDE_SRCDIR+ +mechanism. In this case, package sources are copied using +rsync+ from +the local location into the buildroot build directory. The +rsync+ +command does not copy all files from the source directory, though. +Files belonging to a version control system, like the directories ++.git+, +.hg+, etc. are not copied. For most packages this is +sufficient, but a given package can perform additional actions using +the +POST_RSYNC+ hook. + +In principle, the hook can contain any command you want. One specific +use case, though, is the intentional copying of the version control +directory using +rsync+. The +rsync+ command you use in the hook can, among +others, use the following variables: + +* +$(SRCDIR)+: the path to the overridden source directory +* +$(@D)+: the path to the build directory + +==== Target-finalize hook + +Packages may also register hooks in +LIBFOO_TARGET_FINALIZE_HOOKS+. +These hooks are run after all packages are built, but before the +filesystem images are generated. They are seldom used, and your +package probably do not need them. diff --git a/docs/manual/adding-packages-kconfig.txt b/docs/manual/adding-packages-kconfig.txt new file mode 100644 index 00000000..8f40ea60 --- /dev/null +++ b/docs/manual/adding-packages-kconfig.txt @@ -0,0 +1,93 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Infrastructure for packages using kconfig for configuration files + +A popular way for a software package to handle user-specified +configuration is +kconfig+. Among others, it is used by the Linux +kernel, Busybox, and Buildroot itself. The presence of a .config file +and a +menuconfig+ target are two well-known symptoms of kconfig being +used. + +Buildroot features an infrastructure for packages that use kconfig for +their configuration. This infrastructure provides the necessary logic to +expose the package's +menuconfig+ target as +foo-menuconfig+ in +Buildroot, and to handle the copying back and forth of the configuration +file in a correct way. + +The +kconfig-package+ infrastructure is based on the +generic-package+ +infrastructure. All variables supported by +generic-package+ are +available in +kconfig-package+ as well. See +xref:generic-package-reference[] for more details. + +In order to use the +kconfig-package+ infrastructure for a Buildroot +package, the minimally required lines in the +.mk+ file, in addition to +the variables required by the +generic-package+ infrastructure, are: + +------------------------------ +FOO_KCONFIG_FILE = reference-to-source-configuration-file + +$(eval $(kconfig-package)) +------------------------------ + +This snippet creates the following make targets: + +* +foo-menuconfig+, which calls the package's +menuconfig+ target + +* +foo-update-config+, which copies the configuration back to the + source configuration file. It is not possible to use this target + when fragment files are set. + +* +foo-update-defconfig+, which copies the configuration back to the + source configuration file. The configuration file will only list the + options that differ from the default values. It is not possible to + use this target when fragment files are set. + +* +foo-diff-config+, which outputs the differences between the current + configuration and the one defined in the Buildroot configuration for + this kconfig package. The output is useful to identify the + configuration changes that may have to be propagated to + configuration fragments for example. + +and ensures that the source configuration file is copied to the build +directory at the right moment. + +There are two options to specify a configuration file to use, either ++FOO_KCONFIG_FILE+ (as in the example, above) or +FOO_KCONFIG_DEFCONFIG+. +It is mandatory to provide either, but not both: + +* +FOO_KCONFIG_FILE+ specifies the path to a defconfig or full-config file + to be used to configure the package. + +* +FOO_KCONFIG_DEFCONFIG+ specifies the defconfig 'make' rule to call to + configure the package. + +In addition to these minimally required lines, several optional variables can +be set to suit the needs of the package under consideration: + +* +FOO_KCONFIG_EDITORS+: a space-separated list of kconfig editors to + support, for example 'menuconfig xconfig'. By default, 'menuconfig'. + +* +FOO_KCONFIG_FRAGMENT_FILES+: a space-separated list of configuration + fragment files that are merged to the main configuration file. + Fragment files are typically used when there is a desire to stay in sync + with an upstream (def)config file, with some minor modifications. + +* +FOO_KCONFIG_OPTS+: extra options to pass when calling the kconfig + editors. This may need to include '$(FOO_MAKE_OPTS)', for example. By + default, empty. + +* +FOO_KCONFIG_FIXUP_CMDS+: a list of shell commands needed to fixup the + configuration file after copying it or running a kconfig editor. Such + commands may be needed to ensure a configuration consistent with other + configuration of Buildroot, for example. By default, empty. + +* +FOO_KCONFIG_DOTCONFIG+: path (with filename) of the +.config+ file, + relative to the package source tree. The default, +.config+, should + be well suited for all packages that use the standard kconfig + infrastructure as inherited from the Linux kernel; some packages use + a derivative of kconfig that use a different location. + +* +FOO_KCONFIG_DEPENDENCIES+: the list of packages (most probably, host + packages) that need to be built before this package's kconfig is + interpreted. Seldom used. By default, empty. diff --git a/docs/manual/adding-packages-kernel-module.txt b/docs/manual/adding-packages-kernel-module.txt new file mode 100644 index 00000000..b609ecc9 --- /dev/null +++ b/docs/manual/adding-packages-kernel-module.txt @@ -0,0 +1,143 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Infrastructure for packages building kernel modules + +Buildroot offers a helper infrastructure to make it easy to write packages that +build and install Linux kernel modules. Some packages only contain a kernel +module, other packages contain programs and libraries in addition to kernel +modules. Buildroot's helper infrastructure supports either case. + +[[kernel-module-tutorial]] +==== +kernel-module+ tutorial + +Let's start with an example on how to prepare a simple package that only +builds a kernel module, and no other component: + +---- +01: ################################################################################ +02: # +03: # foo +04: # +05: ################################################################################ +06: +07: FOO_VERSION = 1.2.3 +08: FOO_SOURCE = foo-$(FOO_VERSION).tar.xz +09: FOO_SITE = http://www.foosoftware.org/download +10: FOO_LICENSE = GPL-2.0 +11: FOO_LICENSE_FILES = COPYING +12: +13: $(eval $(kernel-module)) +14: $(eval $(generic-package)) +---- + +Lines 7-11 define the usual meta-data to specify the version, archive name, +remote URI where to find the package source, licensing information. + +On line 13, we invoke the +kernel-module+ helper infrastructure, that +generates all the appropriate Makefile rules and variables to build +that kernel module. + +Finally, on line 14, we invoke the +xref:generic-package-tutorial[+generic-package+ infrastructure]. + +The dependency on +linux+ is automatically added, so it is not needed to +specify it in +FOO_DEPENDENCIES+. + +What you may have noticed is that, unlike other package infrastructures, +we explicitly invoke a second infrastructure. This allows a package to +build a kernel module, but also, if needed, use any one of other package +infrastructures to build normal userland components (libraries, +executables...). Using the +kernel-module+ infrastructure on its own is +not sufficient; another package infrastructure *must* be used. + +Let's look at a more complex example: + +---- +01: ################################################################################ +02: # +03: # foo +04: # +05: ################################################################################ +06: +07: FOO_VERSION = 1.2.3 +08: FOO_SOURCE = foo-$(FOO_VERSION).tar.xz +09: FOO_SITE = http://www.foosoftware.org/download +10: FOO_LICENSE = GPL-2.0 +11: FOO_LICENSE_FILES = COPYING +12: +13: FOO_MODULE_SUBDIRS = driver/base +14: FOO_MODULE_MAKE_OPTS = KVERSION=$(LINUX_VERSION_PROBED) +15: +16: ifeq ($(BR2_PACKAGE_LIBBAR),y) +17: FOO_DEPENDENCIES = libbar +18: FOO_CONF_OPTS = --enable-bar +19: FOO_MODULE_SUBDIRS += driver/bar +20: else +21: FOO_CONF_OPTS = --disable-bar +22: endif +23: +24: $(eval $(kernel-module)) +26: $(eval $(autotools-package)) +---- + +Here, we see that we have an autotools-based package, that also builds +the kernel module located in sub-directory +driver/base+ and, if libbar +is enabled, the kernel module located in sub-directory +driver/bar+, and +defines the variable +KVERSION+ to be passed to the Linux buildsystem +when building the module(s). + + +[[kernel-module-reference]] +==== +kernel-module+ reference + +The main macro for the kernel module infrastructure is +kernel-module+. +Unlike other package infrastructures, it is not stand-alone, and requires +any of the other +*-package+ macros be called after it. + +The +kernel-module+ macro defines post-build and post-target-install +hooks to build the kernel modules. If the package's +.mk+ needs access +to the built kernel modules, it should do so in a post-build hook, +*registered after* the call to +kernel-module+. Similarly, if the +package's +.mk+ needs access to the kernel module after it has been +installed, it should do so in a post-install hook, *registered after* +the call to +kernel-module+. Here's an example: + +---- +$(eval $(kernel-module)) + +define FOO_DO_STUFF_WITH_KERNEL_MODULE + # Do something with it... +endef +FOO_POST_BUILD_HOOKS += FOO_DO_STUFF_WITH_KERNEL_MODULE + +$(eval $(generic-package)) +---- + +Finally, unlike the other package infrastructures, there is no ++host-kernel-module+ variant to build a host kernel module. + +The following additional variables can optionally be defined to further +configure the build of the kernel module: + +* +FOO_MODULE_SUBDIRS+ may be set to one or more sub-directories (relative + to the package source top-directory) where the kernel module sources are. + If empty or not set, the sources for the kernel module(s) are considered + to be located at the top of the package source tree. + +* +FOO_MODULE_MAKE_OPTS+ may be set to contain extra variable definitions + to pass to the Linux buildsystem. + +[[kernel-variables]] +You may also reference (but you may *not* set!) those variables: + + * +LINUX_DIR+ contains the path to where the Linux kernel has been + extracted and built. + + * +LINUX_VERSION+ contains the version string as configured by the user. + + * +LINUX_VERSION_PROBED+ contains the real version string of the kernel, + retrieved with running `make -C $(LINUX_DIR) kernelrelease` + + * +KERNEL_ARCH+ contains the name of the current architecture, like `arm`, + `mips`... diff --git a/docs/manual/adding-packages-linux-kernel-spec-infra.txt b/docs/manual/adding-packages-linux-kernel-spec-infra.txt new file mode 100644 index 00000000..b948e208 --- /dev/null +++ b/docs/manual/adding-packages-linux-kernel-spec-infra.txt @@ -0,0 +1,152 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[linux-kernel-specific-infra]] +=== Infrastructure specific to the Linux kernel package + +The Linux kernel package can use some specific infrastructures based on package +hooks for building Linux kernel tools or/and building Linux kernel extensions. + +[[linux-kernel-tools]] +==== linux-kernel-tools + +Buildroot offers a helper infrastructure to build some userspace tools +for the target available within the Linux kernel sources. Since their +source code is part of the kernel source code, a special package, ++linux-tools+, exists and re-uses the sources of the Linux kernel that +runs on the target. + +Let's look at an example of a Linux tool. For a new Linux tool named ++foo+, create a new menu entry in the existing ++package/linux-tools/Config.in+. This file will contain the option +descriptions related to each kernel tool that will be used and +displayed in the configuration tool. It would basically look like: + +------------------------------ +01: config BR2_PACKAGE_LINUX_TOOLS_FOO +02: bool "foo" +03: select BR2_PACKAGE_LINUX_TOOLS +04: help +05: This is a comment that explains what foo kernel tool is. +06: +07: http://foosoftware.org/foo/ +------------------------------ + +The name of the option starts with the prefix +BR2_PACKAGE_LINUX_TOOLS_+, +followed by the uppercase name of the tool (like is done for packages). + +.Note +Unlike other packages, the +linux-tools+ package options appear in the ++linux+ kernel menu, under the `Linux Kernel Tools` sub-menu, not under +the `Target packages` main menu. + +Then for each linux tool, add a new +.mk.in+ file named ++package/linux-tools/linux-tool-foo.mk.in+. It would basically look like: + +------------------------------ +01: ################################################################################ +02: # +03: # foo +04: # +05: ################################################################################ +06: +07: LINUX_TOOLS += foo +08: +09: FOO_DEPENDENCIES = libbbb +10: +11: define FOO_BUILD_CMDS +12: $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools foo +13: endef +14: +15: define FOO_INSTALL_STAGING_CMDS +16: $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools \ +17: DESTDIR=$(STAGING_DIR) \ +18: foo_install +19: endef +20: +21: define FOO_INSTALL_TARGET_CMDS +22: $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools \ +23: DESTDIR=$(TARGET_DIR) \ +24: foo_install +25: endef +-------------------------------- + +On line 7, we register the Linux tool +foo+ to the list of available +Linux tools. + +On line 9, we specify the list of dependencies this tool relies on. These +dependencies are added to the Linux package dependencies list only when the ++foo+ tool is selected. + +The rest of the Makefile, lines 11-25 defines what should be done at the +different steps of the Linux tool build process like for a +xref:generic-package-tutorial[+generic package+]. They will actually be +used only when the +foo+ tool is selected. The only supported commands are ++_BUILD_CMDS+, +_INSTALL_STAGING_CMDS+ and +_INSTALL_TARGET_CMDS+. + +.Note +One *must not* call +$(eval $(generic-package))+ or any other +package infrastructure! Linux tools are not packages by themselves, +they are part of the +linux-tools+ package. + +[[linux-kernel-ext]] +==== linux-kernel-extensions + +Some packages provide new features that require the Linux kernel tree +to be modified. This can be in the form of patches to be applied on +the kernel tree, or in the form of new files to be added to the +tree. The Buildroot's Linux kernel extensions infrastructure provides +a simple solution to automatically do this, just after the kernel +sources are extracted and before the kernel patches are +applied. Examples of extensions packaged using this mechanism are the +real-time extensions Xenomai and RTAI, as well as the set of +out-of-tree LCD screens drivers +fbtft+. + +Let's look at an example on how to add a new Linux extension +foo+. + +First, create the package +foo+ that provides the extension: this +package is a standard package; see the previous chapters on how to +create such a package. This package is in charge of downloading the +sources archive, checking the hash, defining the licence informations +and building user space tools if any. + +Then create the 'Linux extension' proper: create a new menu entry in +the existing +linux/Config.ext.in+. This file contains the option +descriptions related to each kernel extension that will be used and +displayed in the configuration tool. It would basically look like: + +------------------------------ +01: config BR2_LINUX_KERNEL_EXT_FOO +02: bool "foo" +03: help +04: This is a comment that explains what foo kernel extension is. +05: +06: http://foosoftware.org/foo/ +------------------------------ + +Then for each linux extension, add a new +.mk+ file named ++linux/linux-ext-foo.mk+. It should basically contain: + +------------------------------ +01: ################################################################################ +02: # +03: # foo +04: # +05: ################################################################################ +06: +07: LINUX_EXTENSIONS += foo +08: +09: define FOO_PREPARE_KERNEL +10: $(FOO_DIR)/prepare-kernel-tree.sh --linux-dir=$(@D) +11: endef +-------------------------------- + +On line 7, we add the Linux extension +foo+ to the list of available +Linux extensions. + +On line 9-11, we define what should be done by the extension to modify +the Linux kernel tree; this is specific to the linux extension and can +use the variables defined by the +foo+ package, like: +$(FOO_DIR)+ or ++$(FOO_VERSION)+... as well as all the Linux variables, like: ++$(LINUX_VERSION)+ or +$(LINUX_VERSION_PROBED)+, +$(KERNEL_ARCH)+... +See the xref:kernel-variables[definition of those kernel variables]. diff --git a/docs/manual/adding-packages-luarocks.txt b/docs/manual/adding-packages-luarocks.txt new file mode 100644 index 00000000..70f48fc0 --- /dev/null +++ b/docs/manual/adding-packages-luarocks.txt @@ -0,0 +1,109 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Infrastructure for LuaRocks-based packages + +[[luarocks-package-tutorial]] + +==== +luarocks-package+ tutorial + +First, let's see how to write a +.mk+ file for a LuaRocks-based package, +with an example : + +------------------------ +01: ################################################################################ +02: # +03: # lua-foo +04: # +05: ################################################################################ +06: +07: LUA_FOO_VERSION = 1.0.2-1 +08: LUA_FOO_NAME_UPSTREAM = foo +09: LUA_FOO_DEPENDENCIES = bar +10: +11: LUA_FOO_BUILD_OPTS += BAR_INCDIR=$(STAGING_DIR)/usr/include +12: LUA_FOO_BUILD_OPTS += BAR_LIBDIR=$(STAGING_DIR)/usr/lib +13: LUA_FOO_LICENSE = luaFoo license +14: LUA_FOO_LICENSE_FILES = $(LUA_FOO_SUBDIR)/COPYING +15: +16: $(eval $(luarocks-package)) +------------------------ + +On line 7, we declare the version of the package (the same as in the rockspec, +which is the concatenation of the upstream version and the rockspec revision, +separated by a hyphen '-'). + +On line 8, we declare that the package is called "foo" on LuaRocks. In +Buildroot, we give Lua-related packages a name that starts with "lua", so the +Buildroot name is different from the upstream name. +LUA_FOO_NAME_UPSTREAM+ +makes the link between the two names. + +On line 9, we declare our dependencies against native libraries, so that they +are built before the build process of our package starts. + +On lines 11-12, we tell Buildroot to pass custom options to LuaRocks when it is +building the package. + +On lines 13-14, we specify the licensing terms for the package. + +Finally, on line 16, we invoke the +luarocks-package+ +macro that generates all the Makefile rules that actually allows the +package to be built. + +Most of these details can be retrieved from the +rock+ and +rockspec+. +So, this file and the Config.in file can be generated by running the +command +luarocks buildroot foo lua-foo+ in the Buildroot +directory. This command runs a specific Buildroot addon of +luarocks+ +that will automatically generate a Buildroot package. The result must +still be manually inspected and possibly modified. + +* The +package/Config.in+ file has to be updated manually to include the + generated Config.in files. + +[[luarocks-package-reference]] + +==== +luarocks-package+ reference + +LuaRocks is a deployment and management system for Lua modules, and supports +various +build.type+: +builtin+, +make+ and +cmake+. In the context of +Buildroot, the +luarocks-package+ infrastructure only supports the +builtin+ +mode. LuaRocks packages that use the +make+ or +cmake+ build mechanisms +should instead be packaged using the +generic-package+ and +cmake-package+ +infrastructures in Buildroot, respectively. + +The main macro of the LuaRocks package infrastructure is +luarocks-package+: +like +generic-package+ it works by defining a number of variables providing +metadata information about the package, and then calling +luarocks-package+. + +Just like the generic infrastructure, the LuaRocks infrastructure works +by defining a number of variables before calling the +luarocks-package+ +macro. + +First, all the package metadata information variables that exist in +the generic infrastructure also exist in the LuaRocks infrastructure: ++LUA_FOO_VERSION+, +LUA_FOO_SOURCE+, +LUA_FOO_SITE+, ++LUA_FOO_DEPENDENCIES+, +LUA_FOO_LICENSE+, +LUA_FOO_LICENSE_FILES+. + +Two of them are populated by the LuaRocks infrastructure (for the ++download+ step). If your package is not hosted on the LuaRocks mirror ++$(BR2_LUAROCKS_MIRROR)+, you can override them: + +* +LUA_FOO_SITE+, which defaults to +$(BR2_LUAROCKS_MIRROR)+ + +* +LUA_FOO_SOURCE+, which defaults to + +$(lowercase LUA_FOO_NAME_UPSTREAM)-$(LUA_FOO_VERSION).src.rock+ + +A few additional variables, specific to the LuaRocks infrastructure, are +also defined. They can be overridden in specific cases. + +* +LUA_FOO_NAME_UPSTREAM+, which defaults to +lua-foo+, i.e. the Buildroot + package name + +* +LUA_FOO_ROCKSPEC+, which defaults to + +$(lowercase LUA_FOO_NAME_UPSTREAM)-$(LUA_FOO_VERSION).rockspec+ + +* +LUA_FOO_SUBDIR+, which defaults to + +$(LUA_FOO_NAME_UPSTREAM)-$(LUA_FOO_VERSION_WITHOUT_ROCKSPEC_REVISION)+ + +* +LUA_FOO_BUILD_OPTS+ contains additional build options for the + +luarocks build+ call. diff --git a/docs/manual/adding-packages-meson.txt b/docs/manual/adding-packages-meson.txt new file mode 100644 index 00000000..029c8c24 --- /dev/null +++ b/docs/manual/adding-packages-meson.txt @@ -0,0 +1,133 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Infrastructure for Meson-based packages + +[[meson-package-tutorial]] + +==== +meson-package+ tutorial + +http://mesonbuild.com[Meson] is an open source build system meant to be both +extremely fast, and, even more importantly, as user friendly as possible. It +uses https://ninja-build.org[Ninja] as a companion tool to perform the actual +build operations. + +Let's see how to write a +.mk+ file for a Meson-based package, with an example: + +------------------------------ +01: ################################################################################ +02: # +03: # foo +04: # +05: ################################################################################ +06: +07: FOO_VERSION = 1.0 +08: FOO_SOURCE = foo-$(FOO_VERSION).tar.gz +09: FOO_SITE = http://www.foosoftware.org/download +10: FOO_LICENSE = GPL-3.0+ +11: FOO_LICENSE_FILES = COPYING +12: FOO_INSTALL_STAGING = YES +13: +14: FOO_DEPENDENCIES = host-pkgconf bar +15: +16: ifeq ($(BR2_PACKAGE_BAZ),y) +17: FOO_CONF_OPTS += -Dbaz=true +18: FOO_DEPENDENCIES += baz +19: else +20: FOO_CONF_OPTS += -Dbaz=false +21: endif +22: +23: $(eval $(meson-package)) +-------------------------------- + +The Makefile starts with the definition of the standard variables for package +declaration (lines 7 to 11). + +On line line 23, we invoke the +meson-package+ macro that generates all the +Makefile rules that actually allows the package to be built. + +In the example, +host-pkgconf+ and +bar+ are declared as dependencies in ++FOO_DEPENDENCIES+ at line 14 because the Meson build file of +foo+ uses +`pkg-config` to determine the compilation flags and libraries of package +bar+. + +Note that it is not necessary to add +host-meson+ in the +FOO_DEPENDENCIES+ +variable of a package, since this basic dependency is automatically added as +needed by the Meson package infrastructure. + +If the "baz" package is selected, then support for the "baz" feature in "foo" is +activated by adding +-Dbaz=true+ to +FOO_CONF_OPTS+ at line 17, as specified in +the +meson_options.txt+ file in "foo" source tree. The "baz" package is also +added to +FOO_DEPENDENCIES+. Note that the support for +baz+ is explicitly +disabled at line 20, if the package is not selected. + +To sum it up, to add a new meson-based package, the Makefile example can be +copied verbatim then edited to replace all occurences of +FOO+ with the +uppercase name of the new package and update the values of the standard +variables. + +[[meson-package-reference]] + +==== +meson-package+ reference + +The main macro of the Meson package infrastructure is +meson-package+. It is +similar to the +generic-package+ macro. The ability to have target and host +packages is also available, with the +host-meson-package+ macro. + +Just like the generic infrastructure, the Meson infrastructure works by defining +a number of variables before calling the +meson-package+ macro. + +First, all the package metadata information variables that exist in the generic +infrastructure also exist in the Meson infrastructure: +FOO_VERSION+, ++FOO_SOURCE+, +FOO_PATCH+, +FOO_SITE+, +FOO_SUBDIR+, +FOO_DEPENDENCIES+, ++FOO_INSTALL_STAGING+, +FOO_INSTALL_TARGET+. + +A few additional variables, specific to the Meson infrastructure, can also be +defined. Many of them are only useful in very specific cases, typical packages +will therefore only use a few of them. + +* +FOO_SUBDIR+ may contain the name of a subdirectory inside the + package that contains the main meson.build file. This is useful, + if for example, the main meson.build file is not at the root of + the tree extracted by the tarball. If +HOST_FOO_SUBDIR+ is not + specified, it defaults to +FOO_SUBDIR+. + +* +FOO_CONF_ENV+, to specify additional environment variables to pass to + +meson+ for the configuration step. By default, empty. + +* +FOO_CONF_OPTS+, to specify additional options to pass to +meson+ for the + configuration step. By default, empty. + +* +FOO_CFLAGS+, to specify compiler arguments added to the package specific + +cross-compile.conf+ file +c_args+ property. By default, the value of + +TARGET_CFLAGS+. + +* +FOO_CXXFLAGS+, to specify compiler arguments added to the package specific + +cross-compile.conf+ file +cpp_args+ property. By default, the value of + +TARGET_CXXFLAGS+. + +* +FOO_LDFLAGS+, to specify compiler arguments added to the package specific + +cross-compile.conf+ file +c_link_args+ and +cpp_link_args+ properties. By + default, the value of +TARGET_LDFLAGS+. + +* +FOO_MESON_EXTRA_BINARIES+, to specify a space-separated list of programs + to add to the `[binaries]` section of the meson `cross-compilation.conf` + configuration file. The format is `program-name='/path/to/program'`, with + no space around the +=+ sign, and with the path of the program between + single quotes. By default, empty. Note that Buildroot already sets the + correct values for +c+, +cpp+, +ar+, +strip+, and +pkgconfig+. + +* +FOO_MESON_EXTRA_PROPERTIES+, to specify a space-separated list of + properties to add to the `[properties]` section of the meson + `cross-compilation.conf` configuration file. The format is + `property-name=` with no space around the +=+ sign, and with + single quotes around string values. By default, empty. Note that + Buildroot already sets values for +needs_exe_wrapper+, +c_args+, + +c_link_args+, +cpp_args+, +cpp_link_args+, +sys_root+, and + +pkg_config_libdir+. + +* +FOO_NINJA_ENV+, to specify additional environment variables to pass to + +ninja+, meson companion tool in charge of the build operations. By default, + empty. + +* +FOO_NINJA_OPTS+, to specify a space-separated list of targets to build. By + default, empty, to build the default target(s). diff --git a/docs/manual/adding-packages-perl.txt b/docs/manual/adding-packages-perl.txt new file mode 100644 index 00000000..6ce693fd --- /dev/null +++ b/docs/manual/adding-packages-perl.txt @@ -0,0 +1,129 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Infrastructure for Perl/CPAN packages + +[[perl-package-tutorial]] + +==== +perl-package+ tutorial + +First, let's see how to write a +.mk+ file for a Perl/CPAN package, +with an example : + +------------------------ +01: ################################################################################ +02: # +03: # perl-foo-bar +04: # +05: ################################################################################ +06: +07: PERL_FOO_BAR_VERSION = 0.02 +08: PERL_FOO_BAR_SOURCE = Foo-Bar-$(PERL_FOO_BAR_VERSION).tar.gz +09: PERL_FOO_BAR_SITE = $(BR2_CPAN_MIRROR)/authors/id/M/MO/MONGER +10: PERL_FOO_BAR_DEPENDENCIES = perl-strictures +11: PERL_FOO_BAR_LICENSE = Artistic or GPL-1.0+ +12: PERL_FOO_BAR_LICENSE_FILES = LICENSE +13: PERL_FOO_BAR_DISTNAME = Foo-Bar +14: +15: $(eval $(perl-package)) +------------------------ + +On line 7, we declare the version of the package. + +On line 8 and 9, we declare the name of the tarball and the location +of the tarball on a CPAN server. Buildroot will automatically download +the tarball from this location. + +On line 10, we declare our dependencies, so that they are built +before the build process of our package starts. + +On line 11 and 12, we give licensing details about the package (its +license on line 11, and the file containing the license text on line +12). + +On line 13, the name of the distribution as needed by the script ++utils/scancpan+ (in order to regenerate/upgrade these package files). + +Finally, on line 15, we invoke the +perl-package+ macro that +generates all the Makefile rules that actually allow the package to be +built. + +Most of these data can be retrieved from https://metacpan.org/. +So, this file and the Config.in can be generated by running +the script +utils/scancpan Foo-Bar+ in the Buildroot directory +(or in a br2-external tree). +This script creates a Config.in file and foo-bar.mk file for the +requested package, and also recursively for all dependencies specified by +CPAN. You should still manually edit the result. In particular, the +following things should be checked. + +* If the perl module links with a shared library that is provided by + another (non-perl) package, this dependency is not added automatically. + It has to be added manually to +PERL_FOO_BAR_DEPENDENCIES+. +* The +package/Config.in+ file has to be updated manually to include the + generated Config.in files. As a hint, the +scancpan+ script prints out + the required +source "..."+ statements, sorted alphabetically. + +[[perl-package-reference]] + +==== +perl-package+ reference + +As a policy, packages that provide Perl/CPAN modules should all be +named +perl-+ in Buildroot. + +This infrastructure handles various Perl build systems : ++ExtUtils-MakeMaker+ (EUMM), +Module-Build+ (MB) and +Module-Build-Tiny+. ++Build.PL+ is preferred by default when a package provides a +Makefile.PL+ +and a +Build.PL+. + +The main macro of the Perl/CPAN package infrastructure is ++perl-package+. It is similar to the +generic-package+ macro. The ability to +have target and host packages is also available, with the ++host-perl-package+ macro. + +Just like the generic infrastructure, the Perl/CPAN infrastructure +works by defining a number of variables before calling the ++perl-package+ macro. + +First, all the package metadata information variables that exist in the +generic infrastructure also exist in the Perl/CPAN infrastructure: ++PERL_FOO_VERSION+, +PERL_FOO_SOURCE+, ++PERL_FOO_PATCH+, +PERL_FOO_SITE+, ++PERL_FOO_SUBDIR+, +PERL_FOO_DEPENDENCIES+, ++PERL_FOO_INSTALL_TARGET+. + +Note that setting +PERL_FOO_INSTALL_STAGING+ to +YES+ has no effect +unless a +PERL_FOO_INSTALL_STAGING_CMDS+ variable is defined. The perl +infrastructure doesn't define these commands since Perl modules generally +don't need to be installed to the +staging+ directory. + +A few additional variables, specific to the Perl/CPAN infrastructure, +can also be defined. Many of them are only useful in very specific +cases, typical packages will therefore only use a few of them. + +* +PERL_FOO_PREFER_INSTALLER+/+HOST_PERL_FOO_PREFER_INSTALLER+, + specifies the preferred installation method. Possible values are + +EUMM+ (for +Makefile.PL+ based installation using + +ExtUtils-MakeMaker+) and +MB+ (for +Build.PL+ based installation + using +Module-Build+). This variable is only used when the package + provides both installation methods. + +* +PERL_FOO_CONF_ENV+/+HOST_PERL_FOO_CONF_ENV+, to specify additional + environment variables to pass to the +perl Makefile.PL+ or +perl Build.PL+. + By default, empty. + +* +PERL_FOO_CONF_OPTS+/+HOST_PERL_FOO_CONF_OPTS+, to specify additional + configure options to pass to the +perl Makefile.PL+ or +perl Build.PL+. + By default, empty. + +* +PERL_FOO_BUILD_OPTS+/+HOST_PERL_FOO_BUILD_OPTS+, to specify additional + options to pass to +make pure_all+ or +perl Build build+ in the build step. + By default, empty. + +* +PERL_FOO_INSTALL_TARGET_OPTS+, to specify additional options to + pass to +make pure_install+ or +perl Build install+ in the install step. + By default, empty. + +* +HOST_PERL_FOO_INSTALL_OPTS+, to specify additional options to + pass to +make pure_install+ or +perl Build install+ in the install step. + By default, empty. diff --git a/docs/manual/adding-packages-python.txt b/docs/manual/adding-packages-python.txt new file mode 100644 index 00000000..0c100859 --- /dev/null +++ b/docs/manual/adding-packages-python.txt @@ -0,0 +1,260 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Infrastructure for Python packages + +This infrastructure applies to Python packages that use the standard +Python setuptools mechanism as their build system, generally +recognizable by the usage of a +setup.py+ script. + +[[python-package-tutorial]] + +==== +python-package+ tutorial + +First, let's see how to write a +.mk+ file for a Python package, +with an example : + +------------------------ +01: ################################################################################ +02: # +03: # python-foo +04: # +05: ################################################################################ +06: +07: PYTHON_FOO_VERSION = 1.0 +08: PYTHON_FOO_SOURCE = python-foo-$(PYTHON_FOO_VERSION).tar.xz +09: PYTHON_FOO_SITE = http://www.foosoftware.org/download +10: PYTHON_FOO_LICENSE = BSD-3-Clause +11: PYTHON_FOO_LICENSE_FILES = LICENSE +12: PYTHON_FOO_ENV = SOME_VAR=1 +13: PYTHON_FOO_DEPENDENCIES = libmad +14: PYTHON_FOO_SETUP_TYPE = distutils +15: +16: $(eval $(python-package)) +------------------------ + +On line 7, we declare the version of the package. + +On line 8 and 9, we declare the name of the tarball (xz-ed tarball +recommended) and the location of the tarball on the Web. Buildroot +will automatically download the tarball from this location. + +On line 10 and 11, we give licensing details about the package (its +license on line 10, and the file containing the license text on line +11). + +On line 12, we tell Buildroot to pass custom options to the Python ++setup.py+ script when it is configuring the package. + +On line 13, we declare our dependencies, so that they are built +before the build process of our package starts. + +On line 14, we declare the specific Python build system being used. In +this case the +distutils+ Python build system is used. The two +supported ones are +distutils+ and +setuptools+. + +Finally, on line 16, we invoke the +python-package+ macro that +generates all the Makefile rules that actually allow the package to be +built. + +[[python-package-reference]] + +==== +python-package+ reference + +As a policy, packages that merely provide Python modules should all be +named +python-+ in Buildroot. Other packages that use the +Python build system, but are not Python modules, can freely choose +their name (existing examples in Buildroot are +scons+ and ++supervisor+). + +Packages that are only compatible with one version of Python (as in: +Python 2 or Python 3) should depend on that version explicitely in +their +Config.in+ file (+BR2_PACKAGE_PYTHON+ for Python 2, ++BR2_PACKAGE_PYTHON3+ for Python 3). Packages that are compatible +with both versions should not explicitely depend on them in their ++Config.in+ file, since that condition is already expressed for the +whole "External python modules" menu. + +The main macro of the Python package infrastructure is ++python-package+. It is similar to the +generic-package+ macro. It is +also possible to create Python host packages with the ++host-python-package+ macro. + +Just like the generic infrastructure, the Python infrastructure works +by defining a number of variables before calling the +python-package+ +or +host-python-package+ macros. + +All the package metadata information variables that exist in the +xref:generic-package-reference[generic package infrastructure] also +exist in the Python infrastructure: +PYTHON_FOO_VERSION+, ++PYTHON_FOO_SOURCE+, +PYTHON_FOO_PATCH+, +PYTHON_FOO_SITE+, ++PYTHON_FOO_SUBDIR+, +PYTHON_FOO_DEPENDENCIES+, +PYTHON_FOO_LICENSE+, ++PYTHON_FOO_LICENSE_FILES+, +PYTHON_FOO_INSTALL_STAGING+, etc. + +Note that: + + * It is not necessary to add +python+ or +host-python+ in the + +PYTHON_FOO_DEPENDENCIES+ variable of a package, since these basic + dependencies are automatically added as needed by the Python + package infrastructure. + + * Similarly, it is not needed to add +host-setuptools+ to + +PYTHON_FOO_DEPENDENCIES+ for setuptools-based packages, since it's + automatically added by the Python infrastructure as needed. + +One variable specific to the Python infrastructure is mandatory: + +* +PYTHON_FOO_SETUP_TYPE+, to define which Python build system is used + by the package. The two supported values are +distutils+ and + +setuptools+. If you don't know which one is used in your package, + look at the +setup.py+ file in your package source code, and see + whether it imports things from the +distutils+ module or the + +setuptools+ module. + +A few additional variables, specific to the Python infrastructure, can +optionally be defined, depending on the package's needs. Many of them +are only useful in very specific cases, typical packages will +therefore only use a few of them, or none. + +* +PYTHON_FOO_SUBDIR+ may contain the name of a subdirectory inside the + package that contains the main +setup.py+ file. This is useful, + if for example, the main +setup.py+ file is not at the root of + the tree extracted by the tarball. If +HOST_PYTHON_FOO_SUBDIR+ is not + specified, it defaults to +PYTHON_FOO_SUBDIR+. + +* +PYTHON_FOO_ENV+, to specify additional environment variables to + pass to the Python +setup.py+ script (for both the build and install + steps). Note that the infrastructure is automatically passing + several standard variables, defined in +PKG_PYTHON_DISTUTILS_ENV+ + (for distutils target packages), +HOST_PKG_PYTHON_DISTUTILS_ENV+ + (for distutils host packages), +PKG_PYTHON_SETUPTOOLS_ENV+ (for + setuptools target packages) and +HOST_PKG_PYTHON_SETUPTOOLS_ENV+ + (for setuptools host packages). + +* +PYTHON_FOO_BUILD_OPTS+, to specify additional options to pass to the + Python +setup.py+ script during the build step. For target distutils + packages, the +PKG_PYTHON_DISTUTILS_BUILD_OPTS+ options are already + passed automatically by the infrastructure. + +* +PYTHON_FOO_INSTALL_TARGET_OPTS+, +PYTHON_FOO_INSTALL_STAGING_OPTS+, + +HOST_PYTHON_FOO_INSTALL_OPTS+ to specify additional options to pass + to the Python +setup.py+ script during the target installation step, + the staging installation step or the host installation, + respectively. Note that the infrastructure is automatically passing + some options, defined in +PKG_PYTHON_DISTUTILS_INSTALL_TARGET_OPTS+ + or +PKG_PYTHON_DISTUTILS_INSTALL_STAGING_OPTS+ (for target distutils + packages), +HOST_PKG_PYTHON_DISTUTILS_INSTALL_OPTS+ (for host + distutils packages), +PKG_PYTHON_SETUPTOOLS_INSTALL_TARGET_OPTS+ or + +PKG_PYTHON_SETUPTOOLS_INSTALL_STAGING_OPTS+ (for target setuptools + packages) and +HOST_PKG_PYTHON_SETUPTOOLS_INSTALL_OPTS+ (for host + setuptools packages). + +* +HOST_PYTHON_FOO_NEEDS_HOST_PYTHON+, to define the host python + interpreter. The usage of this variable is limited to host + packages. The two supported value are +python2+ and +python3+. It + will ensure the right host python package is available and will + invoke it for the build. If some build steps are overloaded, the + right python interpreter must be explicitly called in the commands. + +With the Python infrastructure, all the steps required to build and +install the packages are already defined, and they generally work well +for most Python-based packages. However, when required, it is still +possible to customize what is done in any particular step: + +* By adding a post-operation hook (after extract, patch, configure, + build or install). See xref:hooks[] for details. + +* By overriding one of the steps. For example, even if the Python + infrastructure is used, if the package +.mk+ file defines its own + +PYTHON_FOO_BUILD_CMDS+ variable, it will be used instead of the + default Python one. However, using this method should be restricted + to very specific cases. Do not use it in the general case. + +[[scanpypi]] + +==== Generating a +python-package+ from a PyPI repository + +If the Python package for which you would like to create a Buildroot +package is available on PyPI, you may want to use the +scanpypi+ tool +located in +utils/+ to automate the process. + +You can find the list of existing PyPI packages +https://pypi.python.org[here]. + ++scanpypi+ requires Python's +setuptools+ package to be installed on +your host. + +When at the root of your buildroot directory just do : + +----------------------- +utils/scanpypi foo bar -o package +----------------------- + +This will generate packages +python-foo+ and +python-bar+ in the package +folder if they exist on https://pypi.python.org. + +Find the +external python modules+ menu and insert your package inside. +Keep in mind that the items inside a menu should be in alphabetical order. + +Please keep in mind that you'll most likely have to manually check the +package for any mistakes as there are things that cannot be guessed by +the generator (e.g. dependencies on any of the python core modules +such as BR2_PACKAGE_PYTHON_ZLIB). Also, please take note that the +license and license files are guessed and must be checked. You also +need to manually add the package to the +package/Config.in+ file. + +If your Buildroot package is not in the official Buildroot tree but in +a br2-external tree, use the -o flag as follows: + +----------------------- +utils/scanpypi foo bar -o other_package_dir +----------------------- + +This will generate packages +python-foo+ and +python-bar+ in the ++other_package_directory+ instead of +package+. + +Option +-h+ will list the available options: + +----------------------- +utils/scanpypi -h +----------------------- + +[[python-package-cffi-backend]] + +==== +python-package+ CFFI backend + +C Foreign Function Interface for Python (CFFI) provides a convenient +and reliable way to call compiled C code from Python using interface +declarations written in C. Python packages relying on this backend can +be identified by the appearance of a +cffi+ dependency in the ++install_requires+ field of their +setup.py+ file. + +Such a package should: + + * add +python-cffi+ as a runtime dependency in order to install the +compiled C library wrapper on the target. This is achieved by adding ++select BR2_PACKAGE_PYTHON_CFFI+ to the package +Config.in+. + +------------------------ +config BR2_PACKAGE_PYTHON_FOO + bool "python-foo" + select BR2_PACKAGE_PYTHON_CFFI # runtime +------------------------ + + * add +host-python-cffi+ as a build-time dependency in order to +cross-compile the C wrapper. This is achieved by adding ++host-python-cffi+ to the +PYTHON_FOO_DEPENDENCIES+ variable. + +------------------------ +################################################################################ +# +# python-foo +# +################################################################################ + +... + +PYTHON_FOO_DEPENDENCIES = host-python-cffi + +$(eval $(python-package)) +------------------------ diff --git a/docs/manual/adding-packages-qmake.txt b/docs/manual/adding-packages-qmake.txt new file mode 100644 index 00000000..c7e6ff35 --- /dev/null +++ b/docs/manual/adding-packages-qmake.txt @@ -0,0 +1,85 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Infrastructure for QMake-based packages + +[[qmake-package-tutorial]] + +==== +qmake-package+ tutorial + +First, let's see how to write a +.mk+ file for a QMake-based package, with +an example : + +------------------------ +01: ################################################################################ +02: # +03: # libfoo +04: # +05: ################################################################################ +06: +07: LIBFOO_VERSION = 1.0 +08: LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz +09: LIBFOO_SITE = http://www.foosoftware.org/download +10: LIBFOO_CONF_OPTS = QT_CONFIG+=bar QT_CONFIG-=baz +11: LIBFOO_DEPENDENCIES = bar +12: +13: $(eval $(qmake-package)) +------------------------ + +On line 7, we declare the version of the package. + +On line 8 and 9, we declare the name of the tarball (xz-ed tarball +recommended) and the location of the tarball on the Web. Buildroot +will automatically download the tarball from this location. + +On line 10, we tell Buildroot what options to enable for libfoo. + +On line 11, we tell Buildroot the dependencies of libfoo. + +Finally, on line line 13, we invoke the +qmake-package+ +macro that generates all the Makefile rules that actually allows the +package to be built. + +[[qmake-package-reference]] + +==== +qmake-package+ reference + +The main macro of the QMake package infrastructure is +qmake-package+. +It is similar to the +generic-package+ macro. + +Just like the generic infrastructure, the QMake infrastructure works +by defining a number of variables before calling the +qmake-package+ +macro. + +First, all the package metadata information variables that exist in +the generic infrastructure also exist in the QMake infrastructure: ++LIBFOO_VERSION+, +LIBFOO_SOURCE+, +LIBFOO_PATCH+, +LIBFOO_SITE+, ++LIBFOO_SUBDIR+, +LIBFOO_DEPENDENCIES+, +LIBFOO_INSTALL_STAGING+, ++LIBFOO_INSTALL_TARGET+. + +An additional variable, specific to the QMake infrastructure, can +also be defined. + +* +LIBFOO_CONF_ENV+, to specify additional environment variables to + pass to the +qmake+ script for the configuration step. By default, empty. + +* +LIBFOO_CONF_OPTS+, to specify additional options to pass to the + +qmake+ script for the configuration step. By default, empty. + +* +LIBFOO_MAKE_ENV+, to specify additional environment variables to the + +make+ command during the build and install steps. By default, empty. + +* +LIBFOO_MAKE_OPTS+, to specify additional targets to pass to the + +make+ command during the build step. By default, empty. + +* +LIBFOO_INSTALL_STAGING_OPTS+, to specify additional targets to pass + to the +make+ command during the staging installation step. By default, + +install+. + +* +LIBFOO_INSTALL_TARGET_OPTS+, to specify additional targets to pass + to the +make+ command during the target installation step. By default, + +install+. + +* +LIBFOO_SYNC_HEADERS+, to run syncqt.pl before qmake. Some packages + need this to have a properly populated include directory before + running the build. diff --git a/docs/manual/adding-packages-rebar.txt b/docs/manual/adding-packages-rebar.txt new file mode 100644 index 00000000..d78b3171 --- /dev/null +++ b/docs/manual/adding-packages-rebar.txt @@ -0,0 +1,108 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Infrastructure for rebar-based packages + +[[rebar-package-tutorial]] + +==== +rebar-package+ tutorial + +First, let's see how to write a +.mk+ file for a rebar-based package, +with an example : + +------------------------------ +01: ################################################################################ +02: # +03: # erlang-foobar +04: # +05: ################################################################################ +06: +07: ERLANG_FOOBAR_VERSION = 1.0 +08: ERLANG_FOOBAR_SOURCE = erlang-foobar-$(ERLANG_FOOBAR_VERSION).tar.xz +09: ERLANG_FOOBAR_SITE = http://www.foosoftware.org/download +10: ERLANG_FOOBAR_DEPENDENCIES = host-libaaa libbbb +11: +12: $(eval $(rebar-package)) +-------------------------------- + +On line 7, we declare the version of the package. + +On line 8 and 9, we declare the name of the tarball (xz-ed tarball +recommended) and the location of the tarball on the Web. Buildroot +will automatically download the tarball from this location. + +On line 10, we declare our dependencies, so that they are built +before the build process of our package starts. + +Finally, on line 12, we invoke the +rebar-package+ macro that +generates all the Makefile rules that actually allows the package to +be built. + +[[rebar-package-reference]] + +==== +rebar-package+ reference + +The main macro of the +rebar+ package infrastructure is ++rebar-package+. It is similar to the +generic-package+ macro. The +ability to have host packages is also available, with the ++host-rebar-package+ macro. + +Just like the generic infrastructure, the +rebar+ infrastructure works +by defining a number of variables before calling the +rebar-package+ +macro. + +First, all the package metadata information variables that exist in +the generic infrastructure also exist in the +rebar+ infrastructure: ++ERLANG_FOOBAR_VERSION+, +ERLANG_FOOBAR_SOURCE+, ++ERLANG_FOOBAR_PATCH+, +ERLANG_FOOBAR_SITE+, ++ERLANG_FOOBAR_SUBDIR+, +ERLANG_FOOBAR_DEPENDENCIES+, ++ERLANG_FOOBAR_INSTALL_STAGING+, +ERLANG_FOOBAR_INSTALL_TARGET+, ++ERLANG_FOOBAR_LICENSE+ and +ERLANG_FOOBAR_LICENSE_FILES+. + +A few additional variables, specific to the +rebar+ infrastructure, +can also be defined. Many of them are only useful in very specific +cases, typical packages will therefore only use a few of them. + +* +ERLANG_FOOBAR_USE_AUTOCONF+, to specify that the package uses + _autoconf_ at the configuration step. When a package sets this + variable to +YES+, the +autotools+ infrastructure is used. ++ +.Note +You can also use some of the variables from the +autotools+ + infrastructure: +ERLANG_FOOBAR_CONF_ENV+, +ERLANG_FOOBAR_CONF_OPTS+, + +ERLANG_FOOBAR_AUTORECONF+, +ERLANG_FOOBAR_AUTORECONF_ENV+ and + +ERLANG_FOOBAR_AUTORECONF_OPTS+. + +* +ERLANG_FOOBAR_USE_BUNDLED_REBAR+, to specify that the package has + a bundled version of _rebar_ *and* that it shall be used. Valid + values are +YES+ or +NO+ (the default). ++ +.Note +If the package bundles a _rebar_ utility, but can use the generic + one that Buildroot provides, just say +NO+ (i.e., do not specify + this variable). Only set if it is mandatory to use the _rebar_ + utility bundled in this package. + +* +ERLANG_FOOBAR_REBAR_ENV+, to specify additional environment + variables to pass to the _rebar_ utility. + +* +ERLANG_FOOBAR_KEEP_DEPENDENCIES+, to keep the dependencies + described in the rebar.config file. Valid values are +YES+ or +NO+ + (the default). Unless this variable is set to +YES+, the _rebar_ + infrastructure removes such dependencies in a post-patch hook to + ensure rebar does not download nor compile them. + +With the rebar infrastructure, all the steps required to build +and install the packages are already defined, and they generally work +well for most rebar-based packages. However, when required, it is +still possible to customize what is done in any particular step: + +* By adding a post-operation hook (after extract, patch, configure, + build or install). See xref:hooks[] for details. + +* By overriding one of the steps. For example, even if the rebar + infrastructure is used, if the package +.mk+ file defines its + own +ERLANG_FOOBAR_BUILD_CMDS+ variable, it will be used instead + of the default rebar one. However, using this method should be + restricted to very specific cases. Do not use it in the general + case. diff --git a/docs/manual/adding-packages-tips.txt b/docs/manual/adding-packages-tips.txt new file mode 100644 index 00000000..d8c2eceb --- /dev/null +++ b/docs/manual/adding-packages-tips.txt @@ -0,0 +1,242 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Tips and tricks + +[[package-name-variable-relation]] +==== Package name, config entry name and makefile variable relationship + +In Buildroot, there is some relationship between: + +* the _package name_, which is the package directory name (and the + name of the +*.mk+ file); + +* the config entry name that is declared in the +Config.in+ file; + +* the makefile variable prefix. + +It is mandatory to maintain consistency between these elements, +using the following rules: + +* the package directory and the +*.mk+ name are the _package name_ + itself (e.g.: +package/foo-bar_boo/foo-bar_boo.mk+); + +* the _make_ target name is the _package name_ itself (e.g.: + +foo-bar_boo+); + +* the config entry is the upper case _package name_ with `.` and `-` + characters substituted with `_`, prefixed with +BR2_PACKAGE_+ (e.g.: + +BR2_PACKAGE_FOO_BAR_BOO+); + +* the +*.mk+ file variable prefix is the upper case _package name_ + with `.` and `-` characters substituted with `_` (e.g.: + +FOO_BAR_BOO_VERSION+). + +[[check-package]] +==== How to check the coding style + +Buildroot provides a script in +utils/check-package+ that checks new or +changed files for coding style. It is not a complete language validator, +but it catches many common mistakes. It is meant to run in the actual +files you created or modified, before creating the patch for submission. + +This script can be used for packages, filesystem makefiles, Config.in +files, etc. It does not check the files defining the package +infrastructures and some other files containing similar common code. + +To use it, run the +check-package+ script, by telling which files you +created or changed: + +---- +$ ./utils/check-package package/new-package/* +---- + +If you have the +utils+ directory in your path you can also run: + +---- +$ cd package/new-package/ +$ check-package * +---- + +The tool can also be used for packages in a br2-external: + +---- +$ check-package -b /path/to/br2-ext-tree/package/my-package/* +---- + +[[testing-package]] +==== How to test your package + +Once you have added your new package, it is important that you test it +under various conditions: does it build for all architectures? Does it +build with the different C libraries? Does it need threads, NPTL? And +so on... + +Buildroot runs http://autobuild.buildroot.org/[autobuilders] which +continuously test random configurations. However, these only build the +`master` branch of the git tree, and your new fancy package is not yet +there. + +Buildroot provides a script in +utils/test-pkg+ that uses the same base +configurations as used by the autobuilders so you can test your package +in the same conditions. + +First, create a config snippet that contains all the necessary options +needed to enable your package, but without any architecture or toolchain +option. For example, let's create a config snippet that just enables ++libcurl+, without any TLS backend: + +---- +$ cat libcurl.config +BR2_PACKAGE_LIBCURL=y +---- + +If your package needs more configuration options, you can add them to the +config snippet. For example, here's how you would test +libcurl+ with ++openssl+ as a TLS backend and the +curl+ program: + +---- +$ cat libcurl.config +BR2_PACKAGE_LIBCURL=y +BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_OPENSSL=y +---- + +Then run the +test-pkg+ script, by telling it what config snippet to use +and what package to test: + +---- +$ ./utils/test-pkg -c libcurl.config -p libcurl +---- + +By default, +test-pkg+ will build your package against a subset of the +toolchains used by the autobuilders, which has been selected by the +Buildroot developers as being the most useful and representative +subset. If you want to test all toolchains, pass the +-a+ option. Note +that in any case, internal toolchains are excluded as they take too +long to build. + +The output lists all toolchains that are tested and the corresponding +result (excerpt, results are fake): + +---- +$ ./utils/test-pkg -c libcurl.config -p libcurl + armv5-ctng-linux-gnueabi [ 1/11]: OK + armv7-ctng-linux-gnueabihf [ 2/11]: OK + br-aarch64-glibc [ 3/11]: SKIPPED + br-arcle-hs38 [ 4/11]: SKIPPED + br-arm-basic [ 5/11]: FAILED + br-arm-cortex-a9-glibc [ 6/11]: OK + br-arm-cortex-a9-musl [ 7/11]: FAILED + br-arm-cortex-m4-full [ 8/11]: OK + br-arm-full [ 9/11]: OK + br-arm-full-nothread [10/11]: FAILED + br-arm-full-static [11/11]: OK +11 builds, 2 skipped, 2 build failed, 1 legal-info failed +---- + +The results mean: + +* `OK`: the build was successful. +* `SKIPPED`: one or more configuration options listed in the config + snippet were not present in the final configuration. This is due to + options having dependencies not satisfied by the toolchain, such as + for example a package that +depends on BR2_USE_MMU+ with a noMMU + toolchain. The missing options are reported in +missing.config+ in + the output build directory (+~/br-test-pkg/TOOLCHAIN_NAME/+ by + default). +* `FAILED`: the build failed. Inspect the +logfile+ file in the output + build directory to see what went wrong: +** the actual build failed, +** the legal-info failed, +** one of the preliminary steps (downloading the config file, applying + the configuration, running `dirclean` for the package) failed. + +When there are failures, you can just re-run the script with the same +options (after you fixed your package); the script will attempt to +re-build the package specified with +-p+ for all toolchains, without +the need to re-build all the dependencies of that package. + +The +test-pkg+ script accepts a few options, for which you can get some +help by running: + +---- +$ ./utils/test-pkg -h +---- + +[[github-download-url]] +==== How to add a package from GitHub + +Packages on GitHub often don't have a download area with release tarballs. +However, it is possible to download tarballs directly from the repository +on GitHub. As GitHub is known to have changed download mechanisms in the +past, the 'github' helper function should be used as shown below. + +------------------------ +# Use a tag or a full commit ID +FOO_VERSION = 1.0 +FOO_SITE = $(call github,,,v$(FOO_VERSION)) +------------------------ + +.Notes +- The FOO_VERSION can either be a tag or a commit ID. +- The tarball name generated by github matches the default one from + Buildroot (e.g.: +foo-f6fb6654af62045239caed5950bc6c7971965e60.tar.gz+), + so it is not necessary to specify it in the +.mk+ file. +- When using a commit ID as version, you should use the full 40 hex characters. +- When the tag contains a prefix such as +v+ in +v1.0+, then the + +VERSION+ variable should contain just +1.0+, and the +v+ should be + added directly in the +SITE+ variable, as illustrated above. This + ensures that the +VERSION+ variable value can be used to match + against http://www.release-monitoring.org/[release-monitoring.org] + results. + +If the package you wish to add does have a release section on GitHub, the +maintainer may have uploaded a release tarball, or the release may just point +to the automatically generated tarball from the git tag. If there is a +release tarball uploaded by the maintainer, we prefer to use that since it +may be slightly different (e.g. it contains a configure script so we don't +need to do AUTORECONF). + +You can see on the release page if it's an uploaded tarball or a git tag: + +image::github_hash_mongrel2.png[] + +- If it looks like the image above then it was uploaded by the + maintainer and you should use that link (in that example: + 'mongrel2-v1.9.2.tar.bz2') to specify +FOO_SITE+, and not use the + 'github' helper. + +- On the other hand, if there's is *only* the "Source code" link, then + it's an automatically generated tarball and you should use the + 'github' helper function. + +[[gitlab-download-url]] +==== How to add a package from Gitlab + +In a similar way to the +github+ macro described in +xref:github-download-url[], Buildroot also provides the +gitlab+ macro +to download from Gitlab repositories. It can be used to download +auto-generated tarballs produced by Gitlab, either for specific tags +or commits: + +------------------------ +# Use a tag or a full commit ID +FOO_VERSION = 1.0 +FOO_SITE = $(call gitlab,,,v$(FOO_VERSION)) +------------------------ + +By default, it will use a +.tar.gz+ tarball, but Gitlab also provides ++.tar.bz2+ tarballs, so by adding a +_SOURCE+ variable, this ++.tar.bz2+ tarball can be used: + +------------------------ +# Use a tag or a full commit ID +FOO_VERSION = 1.0 +FOO_SITE = $(call gitlab,,,v$(FOO_VERSION)) +FOO_SOURCE = foo-$(FOO_VERSION).tar.bz2 +------------------------ + +If there is a specific tarball uploaded by the upstream developers in ++https://gitlab.com//releases/+, do not use this macro, but +rather use directly the link to the tarball. diff --git a/docs/manual/adding-packages-virtual.txt b/docs/manual/adding-packages-virtual.txt new file mode 100644 index 00000000..6326bb54 --- /dev/null +++ b/docs/manual/adding-packages-virtual.txt @@ -0,0 +1,144 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Infrastructure for virtual packages + +[[virtual-package-tutorial]] + +In Buildroot, a virtual package is a package whose functionalities are +provided by one or more packages, referred to as 'providers'. The virtual +package management is an extensible mechanism allowing the user to choose +the provider used in the rootfs. + +For example, 'OpenGL ES' is an API for 2D and 3D graphics on embedded systems. +The implementation of this API is different for the 'Allwinner Tech Sunxi' and +the 'Texas Instruments OMAP35xx' platforms. So +libgles+ will be a virtual +package and +sunxi-mali+ and +ti-gfx+ will be the providers. + +==== +virtual-package+ tutorial + +In the following example, we will explain how to add a new virtual package +('something-virtual') and a provider for it ('some-provider'). + +First, let's create the virtual package. + +==== Virtual package's +Config.in+ file + +The +Config.in+ file of virtual package 'something-virtual' should contain: + +--------------------------- +01: config BR2_PACKAGE_HAS_SOMETHING_VIRTUAL +02: bool +03: +04: config BR2_PACKAGE_PROVIDES_SOMETHING_VIRTUAL +05: depends on BR2_PACKAGE_HAS_SOMETHING_VIRTUAL +06: string +--------------------------- + +In this file, we declare two options, +BR2_PACKAGE_HAS_SOMETHING_VIRTUAL+ and ++BR2_PACKAGE_PROVIDES_SOMETHING_VIRTUAL+, whose values will be used by the +providers. + +==== Virtual package's +.mk+ file + +The +.mk+ for the virtual package should just evaluate the +virtual-package+ macro: + +--------------------------- +01: ################################################################################ +02: # +03: # something-virtual +04: # +05: ################################################################################ +06: +07: $(eval $(virtual-package)) +--------------------------- + +The ability to have target and host packages is also available, with the ++host-virtual-package+ macro. + +==== Provider's +Config.in+ file + +When adding a package as a provider, only the +Config.in+ file requires some +modifications. + +The +Config.in+ file of the package 'some-provider', which provides the +functionalities of 'something-virtual', should contain: + +--------------------------- +01: config BR2_PACKAGE_SOME_PROVIDER +02: bool "some-provider" +03: select BR2_PACKAGE_HAS_SOMETHING_VIRTUAL +04: help +05: This is a comment that explains what some-provider is. +06: +07: http://foosoftware.org/some-provider/ +08: +09: if BR2_PACKAGE_SOME_PROVIDER +10: config BR2_PACKAGE_PROVIDES_SOMETHING_VIRTUAL +11: default "some-provider" +12: endif +--------------------------- + +On line 3, we select +BR2_PACKAGE_HAS_SOMETHING_VIRTUAL+, and on line 11, we +set the value of +BR2_PACKAGE_PROVIDES_SOMETHING_VIRTUAL+ to the name of the +provider, but only if it is selected. + +==== Provider's +.mk+ file + +The +.mk+ file should also declare an additional variable ++SOME_PROVIDER_PROVIDES+ to contain the names of all the virtual +packages it is an implementation of: + +--------------------------- +01: SOME_PROVIDER_PROVIDES = something-virtual +--------------------------- + +Of course, do not forget to add the proper build and runtime dependencies for +this package! + +==== Notes on depending on a virtual package + +When adding a package that requires a certain +FEATURE+ provided by a virtual +package, you have to use +depends on BR2_PACKAGE_HAS_FEATURE+, like so: + +--------------------------- +config BR2_PACKAGE_HAS_FEATURE + bool + +config BR2_PACKAGE_FOO + bool "foo" + depends on BR2_PACKAGE_HAS_FEATURE +--------------------------- + +==== Notes on depending on a specific provider + +If your package really requires a specific provider, then you'll have to +make your package +depends on+ this provider; you can _not_ +select+ a +provider. + +Let's take an example with two providers for a +FEATURE+: + +--------------------------- +config BR2_PACKAGE_HAS_FEATURE + bool + +config BR2_PACKAGE_FOO + bool "foo" + select BR2_PACKAGE_HAS_FEATURE + +config BR2_PACKAGE_BAR + bool "bar" + select BR2_PACKAGE_HAS_FEATURE +--------------------------- + +And you are adding a package that needs +FEATURE+ as provided by +foo+, +but not as provided by +bar+. + +If you were to use +select BR2_PACKAGE_FOO+, then the user would still +be able to select +BR2_PACKAGE_BAR+ in the menuconfig. This would create +a configuration inconsistency, whereby two providers of the same +FEATURE+ +would be enabled at once, one explicitly set by the user, the other +implicitly by your +select+. + +Instead, you have to use +depends on BR2_PACKAGE_FOO+, which avoids any +implicit configuration inconsistency. diff --git a/docs/manual/adding-packages-waf.txt b/docs/manual/adding-packages-waf.txt new file mode 100644 index 00000000..101cddf1 --- /dev/null +++ b/docs/manual/adding-packages-waf.txt @@ -0,0 +1,91 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Infrastructure for Waf-based packages + +[[waf-package-tutorial]] + +==== +waf-package+ tutorial + +First, let's see how to write a +.mk+ file for a Waf-based package, with +an example : + +------------------------ +01: ################################################################################ +02: # +03: # libfoo +04: # +05: ################################################################################ +06: +07: LIBFOO_VERSION = 1.0 +08: LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz +09: LIBFOO_SITE = http://www.foosoftware.org/download +10: LIBFOO_CONF_OPTS = --enable-bar --disable-baz +11: LIBFOO_DEPENDENCIES = bar +12: +13: $(eval $(waf-package)) +------------------------ + +On line 7, we declare the version of the package. + +On line 8 and 9, we declare the name of the tarball (xz-ed tarball +recommended) and the location of the tarball on the Web. Buildroot +will automatically download the tarball from this location. + +On line 10, we tell Buildroot what options to enable for libfoo. + +On line 11, we tell Buildroot the dependencies of libfoo. + +Finally, on line line 13, we invoke the +waf-package+ +macro that generates all the Makefile rules that actually allows the +package to be built. + +[[waf-package-reference]] + +==== +waf-package+ reference + +The main macro of the Waf package infrastructure is +waf-package+. +It is similar to the +generic-package+ macro. + +Just like the generic infrastructure, the Waf infrastructure works +by defining a number of variables before calling the +waf-package+ +macro. + +First, all the package metadata information variables that exist in +the generic infrastructure also exist in the Waf infrastructure: ++LIBFOO_VERSION+, +LIBFOO_SOURCE+, +LIBFOO_PATCH+, +LIBFOO_SITE+, ++LIBFOO_SUBDIR+, +LIBFOO_DEPENDENCIES+, +LIBFOO_INSTALL_STAGING+, ++LIBFOO_INSTALL_TARGET+. + +An additional variable, specific to the Waf infrastructure, can +also be defined. + +* +LIBFOO_SUBDIR+ may contain the name of a subdirectory inside the + package that contains the main wscript file. This is useful, + if for example, the main wscript file is not at the root of + the tree extracted by the tarball. If +HOST_LIBFOO_SUBDIR+ is not + specified, it defaults to +LIBFOO_SUBDIR+. + +* +LIBFOO_NEEDS_EXTERNAL_WAF+ can be set to +YES+ or +NO+ to tell + Buildroot to use the bundled +waf+ executable. If set to +NO+, the + default, then Buildroot will use the waf executable provided in the + package source tree; if set to +YES+, then Buildroot will download, + install waf as a host tool and use it to build the package. + +* +LIBFOO_WAF_OPTS+, to specify additional options to pass to the + +waf+ script at every step of the package build process: configure, + build and installation. By default, empty. + +* +LIBFOO_CONF_OPTS+, to specify additional options to pass to the + +waf+ script for the configuration step. By default, empty. + +* +LIBFOO_BUILD_OPTS+, to specify additional options to pass to the + +waf+ script during the build step. By default, empty. + +* +LIBFOO_INSTALL_STAGING_OPTS+, to specify additional options to pass + to the +waf+ script during the staging installation step. By default, + empty. + +* +LIBFOO_INSTALL_TARGET_OPTS+, to specify additional options to pass + to the +waf+ script during the target installation step. By default, + empty. diff --git a/docs/manual/adding-packages.txt b/docs/manual/adding-packages.txt new file mode 100644 index 00000000..814355cd --- /dev/null +++ b/docs/manual/adding-packages.txt @@ -0,0 +1,58 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[adding-packages]] +== Adding new packages to Buildroot + +This section covers how new packages (userspace libraries or +applications) can be integrated into Buildroot. It also shows how +existing packages are integrated, which is needed for fixing issues or +tuning their configuration. + +When you add a new package, be sure to test it in various conditions +(see xref:testing-package[]) and also check it for coding style (see +xref:check-package[]). + +include::adding-packages-directory.txt[] + +include::adding-packages-generic.txt[] + +include::adding-packages-autotools.txt[] + +include::adding-packages-cmake.txt[] + +include::adding-packages-python.txt[] + +include::adding-packages-luarocks.txt[] + +include::adding-packages-perl.txt[] + +include::adding-packages-virtual.txt[] + +include::adding-packages-kconfig.txt[] + +include::adding-packages-rebar.txt[] + +include::adding-packages-waf.txt[] + +include::adding-packages-meson.txt[] + +include::adding-packages-cargo.txt[] + +include::adding-packages-golang.txt[] + +include::adding-packages-qmake.txt[] + +include::adding-packages-kernel-module.txt[] + +include::adding-packages-asciidoc.txt[] + +include::adding-packages-linux-kernel-spec-infra.txt[] + +include::adding-packages-hooks.txt[] + +include::adding-packages-gettext.txt[] + +include::adding-packages-tips.txt[] + +include::adding-packages-conclusion.txt[] diff --git a/docs/manual/advanced.txt b/docs/manual/advanced.txt new file mode 100644 index 00000000..b7bfc492 --- /dev/null +++ b/docs/manual/advanced.txt @@ -0,0 +1,16 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Advanced usage + +include::using-buildroot-toolchain.txt[] + +include::using-buildroot-debugger.txt[] + +include::ccache-support.txt[] + +include::download-location.txt[] + +include::package-make-target.txt[] + +include::using-buildroot-development.txt[] diff --git a/docs/manual/appendix.txt b/docs/manual/appendix.txt new file mode 100644 index 00000000..86afa4bd --- /dev/null +++ b/docs/manual/appendix.txt @@ -0,0 +1,6 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +include::makedev-syntax.txt[] +include::makeusers-syntax.txt[] +include::migrating.txt[] diff --git a/docs/manual/beyond-buildroot.txt b/docs/manual/beyond-buildroot.txt new file mode 100644 index 00000000..eefea1fe --- /dev/null +++ b/docs/manual/beyond-buildroot.txt @@ -0,0 +1,66 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +== Beyond Buildroot + +=== Boot the generated images + +==== NFS boot + +To achieve NFS-boot, enable _tar root filesystem_ in the _Filesystem +images_ menu. + +After a complete build, just run the following commands to setup the +NFS-root directory: + +------------------- +sudo tar -xavf /path/to/output_dir/rootfs.tar -C /path/to/nfs_root_dir +------------------- + +Remember to add this path to +/etc/exports+. + +Then, you can execute a NFS-boot from your target. + +==== Live CD + +To build a live CD image, enable the _iso image_ option in the +_Filesystem images_ menu. Note that this option is only available on +the x86 and x86-64 architectures, and if you are building your kernel +with Buildroot. + +You can build a live CD image with either IsoLinux, Grub or Grub 2 as +a bootloader, but only Isolinux supports making this image usable both +as a live CD and live USB (through the _Build hybrid image_ option). + +You can test your live CD image using QEMU: + +------------------- +qemu-system-i386 -cdrom output/images/rootfs.iso9660 +------------------- + +Or use it as a hard-drive image if it is a hybrid ISO: + +------------------- +qemu-system-i386 -hda output/images/rootfs.iso9660 +------------------- + +It can be easily flashed to a USB drive with +dd+: + +------------------- +dd if=output/images/rootfs.iso9660 of=/dev/sdb +------------------- + +=== Chroot + +If you want to chroot in a generated image, then there are few thing +you should be aware of: + +* you should setup the new root from the _tar root filesystem_ image; + +* either the selected target architecture is compatible with your host + machine, or you should use some +qemu-*+ binary and correctly set it + within the +binfmt+ properties to be able to run the binaries built + for the target on your host machine; + +* Buildroot does not currently provide +host-qemu+ and +binfmt+ + correctly built and set for that kind of use. diff --git a/docs/manual/ccache-support.txt b/docs/manual/ccache-support.txt new file mode 100644 index 00000000..f6746ad7 --- /dev/null +++ b/docs/manual/ccache-support.txt @@ -0,0 +1,55 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[ccache]] +==== Using +ccache+ in Buildroot + +http://ccache.samba.org[ccache] is a compiler cache. It stores the +object files resulting from each compilation process, and is able to +skip future compilation of the same source file (with same compiler +and same arguments) by using the pre-existing object files. When doing +almost identical builds from scratch a number of times, it can nicely +speed up the build process. + ++ccache+ support is integrated in Buildroot. You just have to enable ++Enable compiler cache+ in +Build options+. This will automatically +build +ccache+ and use it for every host and target compilation. + +The cache is located in +$HOME/.buildroot-ccache+. It is stored +outside of Buildroot output directory so that it can be shared by +separate Buildroot builds. If you want to get rid of the cache, simply +remove this directory. + +You can get statistics on the cache (its size, number of hits, +misses, etc.) by running +make ccache-stats+. + +The make target +ccache-options+ and the +CCACHE_OPTIONS+ variable +provide more generic access to the ccache. For example + +----------------- +# set cache limit size +make CCACHE_OPTIONS="--max-size=5G" ccache-options + +# zero statistics counters +make CCACHE_OPTIONS="--zero-stats" ccache-options +----------------- + ++ccache+ makes a hash of the source files and of the compiler options. +If a compiler option is different, the cached object file will not be +used. Many compiler options, however, contain an absolute path to the +staging directory. Because of this, building in a different output +directory would lead to many cache misses. + +To avoid this issue, buildroot has the +Use relative paths+ option +(+BR2_CCACHE_USE_BASEDIR+). This will rewrite all absolute paths that +point inside the output directory into relative paths. Thus, changing +the output directory no longer leads to cache misses. + +A disadvantage of the relative paths is that they also end up to be +relative paths in the object file. Therefore, for example, the debugger +will no longer find the file, unless you cd to the output directory +first. + +See https://ccache.samba.org/manual.html#_compiling_in_different_directories[the +ccache manual's section on "Compiling in different directories"] for +more details about this rewriting of absolute paths. diff --git a/docs/manual/common-usage.txt b/docs/manual/common-usage.txt new file mode 100644 index 00000000..9ba87a83 --- /dev/null +++ b/docs/manual/common-usage.txt @@ -0,0 +1,422 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +== General Buildroot usage + +include::make-tips.txt[] + +include::rebuilding-packages.txt[] + +=== Offline builds + +If you intend to do an offline build and just want to download +all sources that you previously selected in the configurator +('menuconfig', 'nconfig', 'xconfig' or 'gconfig'), then issue: + +-------------------- + $ make source +-------------------- + +You can now disconnect or copy the content of your +dl+ +directory to the build-host. + +=== Building out-of-tree + +As default, everything built by Buildroot is stored in the directory ++output+ in the Buildroot tree. + +Buildroot also supports building out of tree with a syntax similar to +the Linux kernel. To use it, add +O=+ to the make command +line: + +-------------------- + $ make O=/tmp/build +-------------------- + +Or: + +-------------------- + $ cd /tmp/build; make O=$PWD -C path/to/buildroot +-------------------- + +All the output files will be located under +/tmp/build+. If the +O+ +path does not exist, Buildroot will create it. + +*Note:* the +O+ path can be either an absolute or a relative path, but if it's +passed as a relative path, it is important to note that it is interpreted +relative to the main Buildroot source directory, *not* the current working +directory. + +When using out-of-tree builds, the Buildroot +.config+ and temporary +files are also stored in the output directory. This means that you can +safely run multiple builds in parallel using the same source tree as +long as they use unique output directories. + +For ease of use, Buildroot generates a Makefile wrapper in the output +directory - so after the first run, you no longer need to pass +O=<...>+ +and +-C <...>+, simply run (in the output directory): + +-------------------- + $ make +-------------------- + +[[env-vars]] + +=== Environment variables + +Buildroot also honors some environment variables, when they are passed +to +make+ or set in the environment: + +* +HOSTCXX+, the host C++ compiler to use +* +HOSTCC+, the host C compiler to use +* +UCLIBC_CONFIG_FILE=+, path to + the uClibc configuration file, used to compile uClibc, if an + internal toolchain is being built. + + + Note that the uClibc configuration file can also be set from the + configuration interface, so through the Buildroot +.config+ file; this + is the recommended way of setting it. + + +* +BUSYBOX_CONFIG_FILE=+, path to + the BusyBox configuration file. + + + Note that the BusyBox configuration file can also be set from the + configuration interface, so through the Buildroot +.config+ file; this + is the recommended way of setting it. + + +* +BR2_CCACHE_DIR+ to override the directory where + Buildroot stores the cached files when using ccache. + + +* +BR2_DL_DIR+ to override the directory in which + Buildroot stores/retrieves downloaded files. + + + Note that the Buildroot download directory can also be set from the + configuration interface, so through the Buildroot +.config+ file. See + xref:download-location[] for more details on how you can set the download + directory. +* +BR2_GRAPH_ALT+, if set and non-empty, to use an alternate color-scheme in + build-time graphs +* +BR2_GRAPH_OUT+ to set the filetype of generated graphs, either +pdf+ (the + default), or +png+. +* +BR2_GRAPH_DEPS_OPTS+ to pass extra options to the dependency graph; see + xref:graph-depends[] for the accepted options +* +BR2_GRAPH_DOT_OPTS+ is passed verbatim as options to the +dot+ utility to + draw the dependency graph. +* +BR2_GRAPH_SIZE_OPTS+ to pass extra options to the size graph; see + xref:graph-size[] for the acepted options + +An example that uses config files located in the toplevel directory and +in your $HOME: + +-------------------- + $ make UCLIBC_CONFIG_FILE=uClibc.config BUSYBOX_CONFIG_FILE=$HOME/bb.config +-------------------- + +If you want to use a compiler other than the default +gcc+ +or +g+++ for building helper-binaries on your host, then do + +-------------------- + $ make HOSTCXX=g++-4.3-HEAD HOSTCC=gcc-4.3-HEAD +-------------------- + +=== Dealing efficiently with filesystem images + +Filesystem images can get pretty big, depending on the filesystem you choose, +the number of packages, whether you provisioned free space... Yet, some +locations in the filesystems images may just be _empty_ (e.g. a long run of +'zeroes'); such a file is called a _sparse_ file. + +Most tools can handle sparse files efficiently, and will only store or write +those parts of a sparse file that are not empty. + +For example: + +* +tar+ accepts the +-S+ option to tell it to only store non-zero blocks + of sparse files: +** +tar cf archive.tar -S [files...]+ will efficiently store sparse files + in a tarball +** +tar xf archive.tar -S+ will efficiently store sparse files extracted + from a tarball + +* +cp+ accepts the +--sparse=WHEN+ option (+WHEN+ is one of +auto+, + +never+ or +always+): +** +cp --sparse=always source.file dest.file+ will make +dest.file+ a + sparse file if +source.file+ has long runs of zeroes + +Other tools may have similar options. Please consult their respective man +pages. + +You can use sparse files if you need to store the filesystem images (e.g. +to transfer from one machine to another), or if you need to send them (e.g. +to the Q&A team). + +Note however that flashing a filesystem image to a device while using the +sparse mode of +dd+ may result in a broken filesystem (e.g. the block bitmap +of an ext2 filesystem may be corrupted; or, if you have sparse files in +your filesystem, those parts may not be all-zeroes when read back). You +should only use sparse files when handling files on the build machine, not +when transferring them to an actual device that will be used on the target. + +=== Details about packages + +[[package-details]] + +Buildroot can produce a JSON blurb that describes the set of enabled +packages in the current configuration, together with their +dependencies, licenses and other metadata. This JSON blurb is produced +by using the +show-info+ make target: + +------------------------ +make show-info +------------------------ + +Buildroot can also produce details about packages as HTML and JSON +output using the +pkg-stats+ make target. Amongst other things, these +details include whether known CVEs (security vulnerabilities) affect +the packages in your current configuration. It also shows if there is +a newer upstream version for those packages. + +------------------------ +make pkg-stats +------------------------ + +=== Graphing the dependencies between packages + +[[graph-depends]] + +One of Buildroot's jobs is to know the dependencies between packages, +and make sure they are built in the right order. These dependencies +can sometimes be quite complicated, and for a given system, it is +often not easy to understand why such or such package was brought into +the build by Buildroot. + +In order to help understanding the dependencies, and therefore better +understand what is the role of the different components in your +embedded Linux system, Buildroot is capable of generating dependency +graphs. + +To generate a dependency graph of the full system you have compiled, +simply run: + +------------------------ +make graph-depends +------------------------ + +You will find the generated graph in ++output/graphs/graph-depends.pdf+. + +If your system is quite large, the dependency graph may be too complex +and difficult to read. It is therefore possible to generate the +dependency graph just for a given package: + +------------------------ +make -graph-depends +------------------------ + +You will find the generated graph in ++output/graph/-graph-depends.pdf+. + +Note that the dependency graphs are generated using the +dot+ tool +from the _Graphviz_ project, which you must have installed on your +system to use this feature. In most distributions, it is available as +the +graphviz+ package. + +By default, the dependency graphs are generated in the PDF +format. However, by passing the +BR2_GRAPH_OUT+ environment variable, you +can switch to other output formats, such as PNG, PostScript or +SVG. All formats supported by the +-T+ option of the +dot+ tool are +supported. + +-------------------------------- +BR2_GRAPH_OUT=svg make graph-depends +-------------------------------- + +The +graph-depends+ behaviour can be controlled by setting options in the ++BR2_GRAPH_DEPS_OPTS+ environment variable. The accepted options are: + +* +--depth N+, +-d N+, to limit the dependency depth to +N+ levels. The + default, +0+, means no limit. + +* +--stop-on PKG+, +-s PKG+, to stop the graph on the package +PKG+. + +PKG+ can be an actual package name, a glob, the keyword 'virtual' + (to stop on virtual packages), or the keyword 'host' (to stop on + host packages). The package is still present on the graph, but its + dependencies are not. + +* +--exclude PKG+, +-x PKG+, like +--stop-on+, but also omits +PKG+ from + the graph. + +* +--transitive+, +--no-transitive+, to draw (or not) the transitive + dependencies. The default is to not draw transitive dependencies. + +* +--colors R,T,H+, the comma-separated list of colors to draw the + root package (+R+), the target packages (+T+) and the host packages + (+H+). Defaults to: +lightblue,grey,gainsboro+ + +-------------------------------- +BR2_GRAPH_DEPS_OPTS='-d 3 --no-transitive --colors=red,green,blue' make graph-depends +-------------------------------- + +=== Graphing the build duration + +[[graph-duration]] + +When the build of a system takes a long time, it is sometimes useful +to be able to understand which packages are the longest to build, to +see if anything can be done to speed up the build. In order to help +such build time analysis, Buildroot collects the build time of each +step of each package, and allows to generate graphs from this data. + +To generate the build time graph after a build, run: + +---------------- +make graph-build +---------------- + +This will generate a set of files in +output/graphs+ : + +* +build.hist-build.pdf+, a histogram of the build time for each + package, ordered in the build order. + +* +build.hist-duration.pdf+, a histogram of the build time for each + package, ordered by duration (longest first) + +* +build.hist-name.pdf+, a histogram of the build time for each + package, order by package name. + +* +build.pie-packages.pdf+, a pie chart of the build time per package + +* +build.pie-steps.pdf+, a pie chart of the global time spent in each + step of the packages build process. + +This +graph-build+ target requires the Python Matplotlib and Numpy +libraries to be installed (+python-matplotlib+ and +python-numpy+ on +most distributions), and also the +argparse+ module if you're using a +Python version older than 2.7 (+python-argparse+ on most +distributions). + +By default, the output format for the graph is PDF, but a different +format can be selected using the +BR2_GRAPH_OUT+ environment variable. The +only other format supported is PNG: + +---------------- +BR2_GRAPH_OUT=png make graph-build +---------------- + +[[graph-size]] +=== Graphing the filesystem size contribution of packages + +When your target system grows, it is sometimes useful to understand +how much each Buildroot package is contributing to the overall root +filesystem size. To help with such an analysis, Buildroot collects +data about files installed by each package and using this data, +generates a graph and CSV files detailing the size contribution of +the different packages. + +To generate these data after a build, run: + +---------------- +make graph-size +---------------- + +This will generate: + +* +output/graphs/graph-size.pdf+, a pie chart of the contribution of + each package to the overall root filesystem size + +* +output/graphs/package-size-stats.csv+, a CSV file giving the size + contribution of each package to the overall root filesystem size + +* +output/graphs/file-size-stats.csv+, a CSV file giving the size + contribution of each installed file to the package it belongs, and + to the overall filesystem size. + +This +graph-size+ target requires the Python Matplotlib library to be +installed (+python-matplotlib+ on most distributions), and also the ++argparse+ module if you're using a Python version older than 2.7 +(+python-argparse+ on most distributions). + +Just like for the duration graph, a +BR2_GRAPH_OUT+ environment variable +is supported to adjust the output file format. See xref:graph-depends[] +for details about this environment variable. + +Additionally, one may set the environment variable +BR2_GRAPH_SIZE_OPTS+ +to further control the generated graph. Accepted options are: + +* `--size-limit X`, `-l X`, will group all packages which individual + contribution is below `X` percent, to a single entry labelled _Others_ + in the graph. By default, `X=0.01`, which means packages each + contributing less than 1% are grouped under _Others_. Accepted values + are in the range `[0.0..1.0]`. + +* `--iec`, `--binary`, `--si`, `--decimal`, to use IEC (binary, powers + of 1024) or SI (decimal, powers of 1000; the default) prefixes. + +* `--biggest-first`, to sort packages in decreasing size order, rather + than in increasing size order. + +.Note +The collected filesystem size data is only meaningful after a complete +clean rebuild. Be sure to run +make clean all+ before using +make +graph-size+. + +To compare the root filesystem size of two different Buildroot compilations, +for example after adjusting the configuration or when switching to another +Buildroot release, use the +size-stats-compare+ script. It takes two ++file-size-stats.csv+ files (produced by +make graph-size+) as input. +Refer to the help text of this script for more details: + +---------------- +utils/size-stats-compare -h +---------------- + +[[top-level-parallel-build]] +=== Top-level parallel build + +.Note +This section deals with a very experimental feature, which is known to +break even in some non-unusual situations. Use at your own risk. + +Buildroot has always been capable of using parallel build on a per +package basis: each package is built by Buildroot using +make -jN+ (or +the equivalent invocation for non-make-based build systems). The level +of parallelism is by default number of CPUs + 1, but it can be +adjusted using the +BR2_JLEVEL+ configuration option. + +Until 2020.02, Buildroot was however building packages in a serial +fashion: each package was built one after the other, without +parallelization of the build between packages. As of 2020.02, +Buildroot has experimental support for *top-level parallel build*, +which allows some signicant build time savings by building packages +that have no dependency relationship in parallel. This feature is +however marked as experimental and is known not to work in some cases. + +In order to use top-level parallel build, one must: + +. Enable the option +BR2_PER_PACKAGE_DIRECTORIES+ in the Buildroot +configuration + +. Use +make -jN+ when starting the Buildroot build + +Internally, the +BR2_PER_PACKAGE_DIRECTORIES+ will enable a mechanism +called *per-package directories*, which will have the following +effects: + +* Instead of a global _target_ directory and a global _host_ directory + common to all packages, per-package _target_ and _host_ directories + will be used, in +$(O)/per-package//target/+ and + +$(O)/per-package//host/+ respectively. Those folders will be + populated from the corresponding folders of the package dependencies + at the beginning of ++ build. The compiler and all other tools + will therefore only be able to see and access files installed by + dependencies explicitly listed by ++. + +* At the end of the build, the global _target_ and _host_ directories + will be populated, located in +$(O)/target+ and +$(O)/host+ + respectively. This means that during the build, those folders will + be empty and it's only at the very end of the build that they will + be populated. + +include::eclipse-integration.txt[] + +include::advanced.txt[] diff --git a/docs/manual/configure-other-components.txt b/docs/manual/configure-other-components.txt new file mode 100644 index 00000000..60a80f0a --- /dev/null +++ b/docs/manual/configure-other-components.txt @@ -0,0 +1,60 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +== Configuration of other components + +Before attempting to modify any of the components below, make sure you +have already configured Buildroot itself, and have enabled the +corresponding package. + +BusyBox:: ++ +If you already have a BusyBox configuration file, you can directly +specify this file in the Buildroot configuration, using ++BR2_PACKAGE_BUSYBOX_CONFIG+. Otherwise, Buildroot will start from a +default BusyBox configuration file. ++ +To make subsequent changes to the configuration, use +make +busybox-menuconfig+ to open the BusyBox configuration editor. ++ +It is also possible to specify a BusyBox configuration file through an +environment variable, although this is not recommended. Refer to +xref:env-vars[] for more details. + +uClibc:: ++ +Configuration of uClibc is done in the same way as for BusyBox. The +configuration variable to specify an existing configuration file is ++BR2_UCLIBC_CONFIG+. The command to make subsequent changes is +make +uclibc-menuconfig+. + +Linux kernel:: ++ +If you already have a kernel configuration file, you can directly +specify this file in the Buildroot configuration, using ++BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG+. ++ +If you do not yet have a kernel configuration file, you can either start +by specifying a defconfig in the Buildroot configuration, using ++BR2_LINUX_KERNEL_USE_DEFCONFIG+, or start by creating an empty file and +specifying it as custom configuration file, using ++BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG+. ++ +To make subsequent changes to the configuration, use +make +linux-menuconfig+ to open the Linux configuration editor. + +Barebox:: ++ +Configuration of Barebox is done in the same way as for the Linux +kernel. The corresponding configuration variables are ++BR2_TARGET_BAREBOX_USE_CUSTOM_CONFIG+ and ++BR2_TARGET_BAREBOX_USE_DEFCONFIG+. To open the configuration editor, +use +make barebox-menuconfig+. + +U-Boot:: ++ +Configuration of U-Boot (version 2015.04 or newer) is done in the same +way as for the Linux kernel. The corresponding configuration variables +are +BR2_TARGET_UBOOT_USE_CUSTOM_CONFIG+ and ++BR2_TARGET_UBOOT_USE_DEFCONFIG+. To open the configuration editor, +use +make uboot-menuconfig+. diff --git a/docs/manual/configure.txt b/docs/manual/configure.txt new file mode 100644 index 00000000..c9eef567 --- /dev/null +++ b/docs/manual/configure.txt @@ -0,0 +1,430 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[configure]] +== Buildroot configuration + +All the configuration options in +make *config+ have a help text +providing details about the option. + +The +make *config+ commands also offer a search tool. Read the help +message in the different frontend menus to know how to use it: + +* in _menuconfig_, the search tool is called by pressing +/+; +* in _xconfig_, the search tool is called by pressing +Ctrl+ + +f+. + +The result of the search shows the help message of the matching items. +In _menuconfig_, numbers in the left column provide a shortcut to the +corresponding entry. Just type this number to directly jump to the +entry, or to the containing menu in case the entry is not selectable due +to a missing dependency. + +Although the menu structure and the help text of the entries should be +sufficiently self-explanatory, a number of topics require additional +explanation that cannot easily be covered in the help text and are +therefore covered in the following sections. + +=== Cross-compilation toolchain + +A compilation toolchain is the set of tools that allows you to compile +code for your system. It consists of a compiler (in our case, +gcc+), +binary utils like assembler and linker (in our case, +binutils+) and a +C standard library (for example +http://www.gnu.org/software/libc/libc.html[GNU Libc], +http://www.uclibc-ng.org/[uClibc-ng]). + +The system installed on your development station certainly already has +a compilation toolchain that you can use to compile an application +that runs on your system. If you're using a PC, your compilation +toolchain runs on an x86 processor and generates code for an x86 +processor. Under most Linux systems, the compilation toolchain uses +the GNU libc (glibc) as the C standard library. This compilation +toolchain is called the "host compilation toolchain". The machine on +which it is running, and on which you're working, is called the "host +system" footnote:[This terminology differs from what is used by GNU +configure, where the host is the machine on which the application will +run (which is usually the same as target)]. + +The compilation toolchain is provided by your distribution, and +Buildroot has nothing to do with it (other than using it to build a +cross-compilation toolchain and other tools that are run on the +development host). + +As said above, the compilation toolchain that comes with your system +runs on and generates code for the processor in your host system. As +your embedded system has a different processor, you need a +cross-compilation toolchain - a compilation toolchain that runs on +your _host system_ but generates code for your _target system_ (and +target processor). For example, if your host system uses x86 and your +target system uses ARM, the regular compilation toolchain on your host +runs on x86 and generates code for x86, while the cross-compilation +toolchain runs on x86 and generates code for ARM. + +Buildroot provides two solutions for the cross-compilation toolchain: + + * The *internal toolchain backend*, called +Buildroot toolchain+ in + the configuration interface. + + * The *external toolchain backend*, called +External toolchain+ in + the configuration interface. + +The choice between these two solutions is done using the +Toolchain +Type+ option in the +Toolchain+ menu. Once one solution has been +chosen, a number of configuration options appear, they are detailed in +the following sections. + +[[internal-toolchain-backend]] +==== Internal toolchain backend + +The _internal toolchain backend_ is the backend where Buildroot builds +by itself a cross-compilation toolchain, before building the userspace +applications and libraries for your target embedded system. + +This backend supports several C libraries: +http://www.uclibc-ng.org[uClibc-ng], +http://www.gnu.org/software/libc/libc.html[glibc] and +http://www.musl-libc.org[musl]. + +Once you have selected this backend, a number of options appear. The +most important ones allow to: + + * Change the version of the Linux kernel headers used to build the + toolchain. This item deserves a few explanations. In the process of + building a cross-compilation toolchain, the C library is being + built. This library provides the interface between userspace + applications and the Linux kernel. In order to know how to "talk" + to the Linux kernel, the C library needs to have access to the + _Linux kernel headers_ (i.e. the +.h+ files from the kernel), which + define the interface between userspace and the kernel (system + calls, data structures, etc.). Since this interface is backward + compatible, the version of the Linux kernel headers used to build + your toolchain do not need to match _exactly_ the version of the + Linux kernel you intend to run on your embedded system. They only + need to have a version equal or older to the version of the Linux + kernel you intend to run. If you use kernel headers that are more + recent than the Linux kernel you run on your embedded system, then + the C library might be using interfaces that are not provided by + your Linux kernel. + + * Change the version of the GCC compiler, binutils and the C library. + + * Select a number of toolchain options (uClibc only): whether the + toolchain should have RPC support (used mainly for NFS), + wide-char support, locale support (for internationalization), + C++ support or thread support. Depending on which options you choose, + the number of userspace applications and libraries visible in + Buildroot menus will change: many applications and libraries require + certain toolchain options to be enabled. Most packages show a comment + when a certain toolchain option is required to be able to enable + those packages. If needed, you can further refine the uClibc + configuration by running +make uclibc-menuconfig+. Note however that + all packages in Buildroot are tested against the default uClibc + configuration bundled in Buildroot: if you deviate from this + configuration by removing features from uClibc, some packages may no + longer build. + +It is worth noting that whenever one of those options is modified, +then the entire toolchain and system must be rebuilt. See +xref:full-rebuild[]. + +Advantages of this backend: + +* Well integrated with Buildroot +* Fast, only builds what's necessary + +Drawbacks of this backend: + +* Rebuilding the toolchain is needed when doing +make clean+, which + takes time. If you're trying to reduce your build time, consider + using the _External toolchain backend_. + +[[external-toolchain-backend]] +==== External toolchain backend + +The _external toolchain backend_ allows to use existing pre-built +cross-compilation toolchains. Buildroot knows about a number of +well-known cross-compilation toolchains (from +http://www.linaro.org[Linaro] for ARM, +http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/[Sourcery +CodeBench] for ARM, x86-64, PowerPC, and MIPS, and is capable of +downloading them automatically, or it can be pointed to a custom +toolchain, either available for download or installed locally. + +Then, you have three solutions to use an external toolchain: + +* Use a predefined external toolchain profile, and let Buildroot + download, extract and install the toolchain. Buildroot already knows + about a few CodeSourcery and Linaro toolchains. Just select the + toolchain profile in +Toolchain+ from the available ones. This is + definitely the easiest solution. + +* Use a predefined external toolchain profile, but instead of having + Buildroot download and extract the toolchain, you can tell Buildroot + where your toolchain is already installed on your system. Just + select the toolchain profile in +Toolchain+ through the available + ones, unselect +Download toolchain automatically+, and fill the + +Toolchain path+ text entry with the path to your cross-compiling + toolchain. + +* Use a completely custom external toolchain. This is particularly + useful for toolchains generated using crosstool-NG or with Buildroot + itself. To do this, select the +Custom toolchain+ solution in the + +Toolchain+ list. You need to fill the +Toolchain path+, +Toolchain + prefix+ and +External toolchain C library+ options. Then, you have + to tell Buildroot what your external toolchain supports. If your + external toolchain uses the 'glibc' library, you only have to tell + whether your toolchain supports C\++ or not and whether it has + built-in RPC support. If your external toolchain uses the 'uClibc' + library, then you have to tell Buildroot if it supports RPC, + wide-char, locale, program invocation, threads and C++. + At the beginning of the execution, Buildroot will tell you if + the selected options do not match the toolchain configuration. + +Our external toolchain support has been tested with toolchains from +CodeSourcery and Linaro, toolchains generated by +http://crosstool-ng.org[crosstool-NG], and toolchains generated by +Buildroot itself. In general, all toolchains that support the +'sysroot' feature should work. If not, do not hesitate to contact the +developers. + +We do not support toolchains or SDK generated by OpenEmbedded or +Yocto, because these toolchains are not pure toolchains (i.e. just the +compiler, binutils, the C and C++ libraries). Instead these toolchains +come with a very large set of pre-compiled libraries and +programs. Therefore, Buildroot cannot import the 'sysroot' of the +toolchain, as it would contain hundreds of megabytes of pre-compiled +libraries that are normally built by Buildroot. + +We also do not support using the distribution toolchain (i.e. the +gcc/binutils/C library installed by your distribution) as the +toolchain to build software for the target. This is because your +distribution toolchain is not a "pure" toolchain (i.e. only with the +C/C++ library), so we cannot import it properly into the Buildroot +build environment. So even if you are building a system for a x86 or +x86_64 target, you have to generate a cross-compilation toolchain with +Buildroot or crosstool-NG. + +If you want to generate a custom toolchain for your project, that can +be used as an external toolchain in Buildroot, our recommendation is +to build it either with Buildroot itself (see +xref:build-toolchain-with-buildroot[]) or with +http://crosstool-ng.org[crosstool-NG]. + +Advantages of this backend: + +* Allows to use well-known and well-tested cross-compilation + toolchains. + +* Avoids the build time of the cross-compilation toolchain, which is + often very significant in the overall build time of an embedded + Linux system. + +Drawbacks of this backend: + +* If your pre-built external toolchain has a bug, may be hard to get a + fix from the toolchain vendor, unless you build your external + toolchain by yourself using Buildroot or Crosstool-NG. + +[[build-toolchain-with-buildroot]] +==== Build an external toolchain with Buildroot + +The Buildroot internal toolchain option can be used to create an +external toolchain. Here are a series of steps to build an internal +toolchain and package it up for reuse by Buildroot itself (or other +projects). + +Create a new Buildroot configuration, with the following details: + +* Select the appropriate *Target options* for your target CPU + architecture + +* In the *Toolchain* menu, keep the default of *Buildroot toolchain* + for *Toolchain type*, and configure your toolchain as desired + +* In the *System configuration* menu, select *None* as the *Init + system* and *none* as */bin/sh* + +* In the *Target packages* menu, disable *BusyBox* + +* In the *Filesystem images* menu, disable *tar the root filesystem* + +Then, we can trigger the build, and also ask Buildroot to generate a +SDK. This will conveniently generate for us a tarball which contains +our toolchain: + +----- +make sdk +----- + +This produces the SDK tarball in +$(O)/images+, with a name similar to ++arm-buildroot-linux-uclibcgnueabi_sdk-buildroot.tar.gz+. Save this +tarball, as it is now the toolchain that you can re-use as an external +toolchain in other Buildroot projects. + +In those other Buildroot projects, in the *Toolchain* menu: + +* Set *Toolchain type* to *External toolchain* + +* Set *Toolchain* to *Custom toolchain* + +* Set *Toolchain origin* to *Toolchain to be downloaded and installed* + +* Set *Toolchain URL* to +file:///path/to/your/sdk/tarball.tar.gz+ + +===== External toolchain wrapper + +When using an external toolchain, Buildroot generates a wrapper program, +that transparently passes the appropriate options (according to the +configuration) to the external toolchain programs. In case you need to +debug this wrapper to check exactly what arguments are passed, you can +set the environment variable +BR2_DEBUG_WRAPPER+ to either one of: + +* +0+, empty or not set: no debug + +* +1+: trace all arguments on a single line + +* +2+: trace one argument per line + +=== /dev management + +On a Linux system, the +/dev+ directory contains special files, called +_device files_, that allow userspace applications to access the +hardware devices managed by the Linux kernel. Without these _device +files_, your userspace applications would not be able to use the +hardware devices, even if they are properly recognized by the Linux +kernel. + +Under +System configuration+, +/dev management+, Buildroot offers four +different solutions to handle the +/dev+ directory : + + * The first solution is *Static using device table*. This is the old + classical way of handling device files in Linux. With this method, + the device files are persistently stored in the root filesystem + (i.e. they persist across reboots), and there is nothing that will + automatically create and remove those device files when hardware + devices are added or removed from the system. Buildroot therefore + creates a standard set of device files using a _device table_, the + default one being stored in +system/device_table_dev.txt+ in the + Buildroot source code. This file is processed when Buildroot + generates the final root filesystem image, and the _device files_ + are therefore not visible in the +output/target+ directory. The + +BR2_ROOTFS_STATIC_DEVICE_TABLE+ option allows to change the + default device table used by Buildroot, or to add an additional + device table, so that additional _device files_ are created by + Buildroot during the build. So, if you use this method, and a + _device file_ is missing in your system, you can for example create + a +board///device_table_dev.txt+ file + that contains the description of your additional _device files_, + and then you can set +BR2_ROOTFS_STATIC_DEVICE_TABLE+ to + +system/device_table_dev.txt + board///device_table_dev.txt+. For more + details about the format of the device table file, see + xref:makedev-syntax[]. + + * The second solution is *Dynamic using devtmpfs only*. _devtmpfs_ is + a virtual filesystem inside the Linux kernel that has been + introduced in kernel 2.6.32 (if you use an older kernel, it is not + possible to use this option). When mounted in +/dev+, this virtual + filesystem will automatically make _device files_ appear and + disappear as hardware devices are added and removed from the + system. This filesystem is not persistent across reboots: it is + filled dynamically by the kernel. Using _devtmpfs_ requires the + following kernel configuration options to be enabled: + +CONFIG_DEVTMPFS+ and +CONFIG_DEVTMPFS_MOUNT+. When Buildroot is in + charge of building the Linux kernel for your embedded device, it + makes sure that those two options are enabled. However, if you + build your Linux kernel outside of Buildroot, then it is your + responsibility to enable those two options (if you fail to do so, + your Buildroot system will not boot). + + * The third solution is *Dynamic using devtmpfs + mdev*. This method + also relies on the _devtmpfs_ virtual filesystem detailed above (so + the requirement to have +CONFIG_DEVTMPFS+ and + +CONFIG_DEVTMPFS_MOUNT+ enabled in the kernel configuration still + apply), but adds the +mdev+ userspace utility on top of it. +mdev+ + is a program part of BusyBox that the kernel will call every time a + device is added or removed. Thanks to the +/etc/mdev.conf+ + configuration file, +mdev+ can be configured to for example, set + specific permissions or ownership on a device file, call a script + or application whenever a device appears or disappear, + etc. Basically, it allows _userspace_ to react on device addition + and removal events. +mdev+ can for example be used to automatically + load kernel modules when devices appear on the system. +mdev+ is + also important if you have devices that require a firmware, as it + will be responsible for pushing the firmware contents to the + kernel. +mdev+ is a lightweight implementation (with fewer + features) of +udev+. For more details about +mdev+ and the syntax + of its configuration file, see + http://git.busybox.net/busybox/tree/docs/mdev.txt. + + * The fourth solution is *Dynamic using devtmpfs + eudev*. This + method also relies on the _devtmpfs_ virtual filesystem detailed + above, but adds the +eudev+ userspace daemon on top of it. +eudev+ + is a daemon that runs in the background, and gets called by the + kernel when a device gets added or removed from the system. It is a + more heavyweight solution than +mdev+, but provides higher + flexibility. +eudev+ is a standalone version of +udev+, the + original userspace daemon used in most desktop Linux distributions, + which is now part of Systemd. For more details, see + http://en.wikipedia.org/wiki/Udev. + +The Buildroot developers recommendation is to start with the *Dynamic +using devtmpfs only* solution, until you have the need for userspace +to be notified when devices are added/removed, or if firmwares are +needed, in which case *Dynamic using devtmpfs + mdev* is usually a +good solution. + +Note that if +systemd+ is chosen as init system, /dev management will +be performed by the +udev+ program provided by +systemd+. + +=== init system + +The _init_ program is the first userspace program started by the +kernel (it carries the PID number 1), and is responsible for starting +the userspace services and programs (for example: web server, +graphical applications, other network servers, etc.). + +Buildroot allows to use three different types of init systems, which +can be chosen from +System configuration+, +Init system+: + + * The first solution is *BusyBox*. Amongst many programs, BusyBox has + an implementation of a basic +init+ program, which is sufficient + for most embedded systems. Enabling the +BR2_INIT_BUSYBOX+ will + ensure BusyBox will build and install its +init+ program. This is + the default solution in Buildroot. The BusyBox +init+ program will + read the +/etc/inittab+ file at boot to know what to do. The syntax + of this file can be found in + http://git.busybox.net/busybox/tree/examples/inittab (note that + BusyBox +inittab+ syntax is special: do not use a random +inittab+ + documentation from the Internet to learn about BusyBox + +inittab+). The default +inittab+ in Buildroot is stored in + +system/skeleton/etc/inittab+. Apart from mounting a few important + filesystems, the main job the default inittab does is to start the + +/etc/init.d/rcS+ shell script, and start a +getty+ program (which + provides a login prompt). + + * The second solution is *systemV*. This solution uses the old + traditional _sysvinit_ program, packed in Buildroot in + +package/sysvinit+. This was the solution used in most desktop + Linux distributions, until they switched to more recent + alternatives such as Upstart or Systemd. +sysvinit+ also works with + an +inittab+ file (which has a slightly different syntax than the + one from BusyBox). The default +inittab+ installed with this init + solution is located in +package/sysvinit/inittab+. + + * The third solution is *systemd*. +systemd+ is the new generation + init system for Linux. It does far more than traditional _init_ + programs: aggressive parallelization capabilities, uses socket and + D-Bus activation for starting services, offers on-demand starting + of daemons, keeps track of processes using Linux control groups, + supports snapshotting and restoring of the system state, + etc. +systemd+ will be useful on relatively complex embedded + systems, for example the ones requiring D-Bus and services + communicating between each other. It is worth noting that +systemd+ + brings a fairly big number of large dependencies: +dbus+, +udev+ + and more. For more details about +systemd+, see + http://www.freedesktop.org/wiki/Software/systemd. + +The solution recommended by Buildroot developers is to use the +*BusyBox init* as it is sufficient for most embedded +systems. *systemd* can be used for more complex situations. diff --git a/docs/manual/contribute.txt b/docs/manual/contribute.txt new file mode 100644 index 00000000..14ecdbd6 --- /dev/null +++ b/docs/manual/contribute.txt @@ -0,0 +1,685 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +== Contributing to Buildroot + +There are many ways in which you can contribute to Buildroot: analyzing +and fixing bugs, analyzing and fixing package build failures detected by +the autobuilders, testing and reviewing patches sent by other +developers, working on the items in our TODO list and sending your own +improvements to Buildroot or its manual. The following sections give a +little more detail on each of these items. + +If you are interested in contributing to Buildroot, the first thing you +should do is to subscribe to the Buildroot mailing list. This list is +the main way of interacting with other Buildroot developers and to send +contributions to. If you aren't subscribed yet, then refer to +xref:community-resources[] for the subscription link. + +If you are going to touch the code, it is highly recommended to use a +git repository of Buildroot, rather than starting from an extracted +source code tarball. Git is the easiest way to develop from and directly +send your patches to the mailing list. Refer to xref:getting-buildroot[] +for more information on obtaining a Buildroot git tree. + +=== Reproducing, analyzing and fixing bugs + +A first way of contributing is to have a look at the open bug reports in +the https://bugs.buildroot.org/buglist.cgi?product=buildroot[Buildroot bug +tracker]. As we strive to keep the bug count as small as possible, all +help in reproducing, analyzing and fixing reported bugs is more than +welcome. Don't hesitate to add a comment to bug reports reporting your +findings, even if you don't yet see the full picture. + +=== Analyzing and fixing autobuild failures + +The Buildroot autobuilders are a set of build machines that continuously +run Buildroot builds based on random configurations. This is done for +all architectures supported by Buildroot, with various toolchains, and +with a random selection of packages. With the large commit activity on +Buildroot, these autobuilders are a great help in detecting problems +very early after commit. + +All build results are available at http://autobuild.buildroot.org[], +statistics are at http://autobuild.buildroot.org/stats.php[]. Every day, +an overview of all failed packages is sent to the mailing list. + +Detecting problems is great, but obviously these problems have to be +fixed as well. Your contribution is very welcome here! There are +basically two things that can be done: + +- Analyzing the problems. The daily summary mails do not contain details + about the actual failures: in order to see what's going on you have to + open the build log and check the last output. Having someone doing + this for all packages in the mail is very useful for other developers, + as they can make a quick initial analysis based on this output alone. + +- Fixing a problem. When fixing autobuild failures, you should follow + these steps: + . Check if you can reproduce the problem by building with the same + configuration. You can do this manually, or use the + http://git.buildroot.org/buildroot-test/tree/utils/br-reproduce-build[br-reproduce-build] + script that will automatically clone a Buildroot git repository, + checkout the correct revision, download and set the right + configuration, and start the build. + . Analyze the problem and create a fix. + . Verify that the problem is really fixed by starting from a clean + Buildroot tree and only applying your fix. + . Send the fix to the Buildroot mailing list (see + xref:submitting-patches[]). In case you created a patch against the + package sources, you should also send the patch upstream so that the + problem will be fixed in a later release, and the patch in Buildroot + can be removed. + In the commit message of a patch fixing an autobuild failure, add a + reference to the build result directory, as follows: +--------------------- +Fixes: http://autobuild.buildroot.org/results/51000a9d4656afe9e0ea6f07b9f8ed374c2e4069 +--------------------- + +=== Reviewing and testing patches + +With the amount of patches sent to the mailing list each day, the +maintainer has a very hard job to judge which patches are ready to apply +and which ones aren't. Contributors can greatly help here by reviewing +and testing these patches. + +In the review process, do not hesitate to respond to patch submissions +for remarks, suggestions or anything that will help everyone to +understand the patches and make them better. Please use internet +style replies in plain text emails when responding to patch +submissions. + +To indicate approval of a patch, there are three formal tags that keep +track of this approval. To add your tag to a patch, reply to it with the +approval tag below the original author's Signed-off-by line. These tags +will be picked up automatically by patchwork (see +xref:apply-patches-patchwork[]) and will be part of the commit log when +the patch is accepted. + +Tested-by:: Indicates that the patch has been tested successfully. + You are encouraged to specify what kind of testing you performed + (compile-test on architecture X and Y, runtime test on target A, + ...). This additional information helps other testers and the + maintainer. + +Reviewed-by:: Indicates that you code-reviewed the patch and did your + best in spotting problems, but you are not sufficiently familiar with + the area touched to provide an Acked-by tag. This means that there + may be remaining problems in the patch that would be spotted by + someone with more experience in that area. Should such problems be + detected, your Reviewed-by tag remains appropriate and you cannot + be blamed. + +Acked-by:: Indicates that you code-reviewed the patch and you are + familiar enough with the area touched to feel that the patch can be + committed as-is (no additional changes required). In case it later + turns out that something is wrong with the patch, your Acked-by could + be considered inappropriate. The difference between Acked-by and + Reviewed-by is thus mainly that you are prepared to take the blame on + Acked patches, but not on Reviewed ones. + +If you reviewed a patch and have comments on it, you should simply reply +to the patch stating these comments, without providing a Reviewed-by or +Acked-by tag. These tags should only be provided if you judge the patch +to be good as it is. + +It is important to note that neither Reviewed-by nor Acked-by imply +that testing has been performed. To indicate that you both reviewed and +tested the patch, provide two separate tags (Reviewed/Acked-by and +Tested-by). + +Note also that _any developer_ can provide Tested/Reviewed/Acked-by +tags, without exception, and we encourage everyone to do this. Buildroot +does not have a defined group of _core_ developers, it just so happens +that some developers are more active than others. The maintainer will +value tags according to the track record of their submitter. Tags +provided by a regular contributor will naturally be trusted more than +tags provided by a newcomer. As you provide tags more regularly, your +'trustworthiness' (in the eyes of the maintainer) will go up, but _any_ +tag provided is valuable. + +Buildroot's Patchwork website can be used to pull in patches for testing +purposes. Please see xref:apply-patches-patchwork[] for more +information on using Buildroot's Patchwork website to apply patches. + +[[apply-patches-patchwork]] +==== Applying Patches from Patchwork + +The main use of Buildroot's Patchwork website for a developer is for +pulling in patches into their local git repository for testing +purposes. + +When browsing patches in the patchwork management interface, an +mbox+ +link is provided at the top of the page. Copy this link address and +run the following commands: + +--------------------- +$ git checkout -b +$ wget -O - | git am +--------------------- + +Another option for applying patches is to create a bundle. A bundle is +a set of patches that you can group together using the patchwork +interface. Once the bundle is created and the bundle is made public, +you can copy the +mbox+ link for the bundle and apply the bundle +using the above commands. + + +=== Work on items from the TODO list + +If you want to contribute to Buildroot but don't know where to start, +and you don't like any of the above topics, you can always work on items +from the http://elinux.org/Buildroot#Todo_list[Buildroot TODO list]. +Don't hesitate to discuss an item first on the mailing list or on IRC. +Do edit the wiki to indicate when you start working on an item, so we +avoid duplicate efforts. + +[[submitting-patches]] +=== Submitting patches + +[NOTE] +_Please, do not attach patches to bugs, send them to the mailing list +instead_. + +If you made some changes to Buildroot and you would like to contribute +them to the Buildroot project, proceed as follows. + +==== The formatting of a patch + +We expect patches to be formatted in a specific way. This is necessary +to make it easy to review patches, to be able to apply them easily to +the git repository, to make it easy to find back in the history how +and why things have changed, and to make it possible to use +git +bisect+ to locate the origin of a problem. + +First of all, it is essential that the patch has a good commit +message. The commit message should start with a separate line with a +brief summary of the change, prefixed by the area touched by the +patch. A few examples of good commit titles: + +* +package/linuxptp: bump version to 2.0+ + +* +configs/imx23evk: bump Linux version to 4.19+ + +* +package/pkg-generic: postpone evaluation of dependency conditions+ + +* +boot/uboot: needs host-{flex,bison}+ + +* +support/testing: add python-ubjson tests+ + +The description that follows the prefix should start with a lower case +letter (i.e "bump", "needs", "postpone", "add" in the above examples). + +Second, the body of the commit message should describe _why_ this +change is needed, and if necessary also give details about _how_ it +was done. When writing the commit message, think of how the reviewers +will read it, but also think about how you will read it when you look +at this change again a few years down the line. + +Third, the patch itself should do only one change, but do it +completely. Two unrelated or weakly related changes should usually be +done in two separate patches. This usually means that a patch affects +only a single package. If several changes are related, it is often +still possible to split them up in small patches and apply them in a +specific order. Small patches make it easier to review, and often +make it easier to understand afterwards why a change was done. +However, each patch must be complete. It is not allowed that the +build is broken when only the first but not the second patch is +applied. This is necessary to be able to use +git bisect+ afterwards. + +Of course, while you're doing your development, you're probably going +back and forth between packages, and certainly not committing things +immediately in a way that is clean enough for submission. So most +developers rewrite the history of commits to produce a clean set of +commits that is appropriate for submission. To do this, you need to +use _interactive rebasing_. You can learn about it +https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History[in the Pro +Git book]. Sometimes, it is even easier to discard you history with ++git reset --soft origin/master+ and select individual changes with ++git add -i+ or +git add -p+. + +Finally, the patch should be signed off. This is done by adding ++Signed-off-by: Your Real Name + at the end of the +commit message. +git commit -s+ does that for you, if configured +properly. The +Signed-off-by+ tag means that you publish the patch +under the Buildroot license (i.e. GPL-2.0+, except for package patches, +which have the upstream license), and that you are allowed to do so. +See http://developercertificate.org/[the Developer Certificate of +Origin] for details. + +When adding new packages, you should submit every package in a +separate patch. This patch should have the update to ++package/Config.in+, the package +Config.in+ file, the +.mk+ file, the ++.hash+ file, any init script, and all package patches. If the package +has many sub-options, these are sometimes better added as separate +follow-up patches. The summary line should be something like ++: new package+. The body of the commit message can be +empty for simple packages, or it can contain the description of the +package (like the Config.in help text). If anything special has to be +done to build the package, this should also be explained explicitly in +the commit message body. + +When you bump a package to a new version, you should also submit a +separate patch for each package. Don't forget to update the +.hash+ +file, or add it if it doesn't exist yet. Also don't forget to check if +the +_LICENSE+ and +_LICENSE_FILES+ are still valid. The summary line +should be something like +: bump to version +. If the new version only contains security updates compared +to the existing one, the summary should be +: security +bump to version + and the commit message body should show +the CVE numbers that are fixed. If some package patches can be removed +in the new version, it should be explained explicitly why they can be +removed, preferably with the upstream commit ID. Also any other +required changes should be explained explicitly, like configure +options that no longer exist or are no longer needed. + +If you are interested in getting notified of build failures and of +further changes in the packages you added or modified, please add +yourself to the DEVELOPERS file. This should be done in the same patch +creating or modifying the package. See xref:DEVELOPERS[the DEVELOPERS file] +for more information. + +Buildroot provides a handy tool to check for common coding style +mistakes on files you created or modified, called +check-package+ (see +xref:check-package[] for more information). + +==== Preparing a patch series + +Starting from the changes committed in your local git view, _rebase_ +your development branch on top of the upstream tree before generating +a patch set. To do so, run: + +--------------------- +$ git fetch --all --tags +$ git rebase origin/master +--------------------- + +Now, you are ready to generate then submit your patch set. + +To generate it, run: + +--------------------- +$ git format-patch -M -n -s -o outgoing origin/master +--------------------- + +This will generate patch files in the +outgoing+ subdirectory, +automatically adding the +Signed-off-by+ line. + +Once patch files are generated, you can review/edit the commit message +before submitting them, using your favorite text editor. + +Buildroot provides a handy tool to know to whom your patches should be +sent, called +get-developers+ (see xref:DEVELOPERS[] for more +information). This tool reads your patches and outputs the appropriate ++git send-email+ command to use: + +--------------------- +$ ./utils/get-developers outgoing/* +--------------------- + +Use the output of +get-developers+ to send your patches: + +--------------------- +$ git send-email --to buildroot@buildroot.org --cc bob --cc alice outgoing/* +--------------------- + +Alternatively, +get-developers -e+ can be used directly with the ++--cc-cmd+ argument to +git send-email+ to automatically CC the +affected developers: + +--------------------- +$ git send-email --to buildroot@buildroot.org \ + --cc-cmd './utils/get-developers -e' origin/master +--------------------- + ++git+ can be configured to automatically do this out of the box with: + +--------------------- +$ git config sendemail.to buildroot@buildroot.org +$ git config sendemail.ccCmd "$(pwd)/utils/get-developers -e" +--------------------- + +And then just do: + +--------------------- +$ git send-email origin/master +--------------------- + +Note that +git+ should be configured to use your mail account. +To configure +git+, see +man git-send-email+ or google it. + +If you do not use +git send-email+, make sure posted *patches are not +line-wrapped*, otherwise they cannot easily be applied. In such a case, +fix your e-mail client, or better yet, learn to use +git send-email+. + +==== Cover letter + +If you want to present the whole patch set in a separate mail, add ++--cover-letter+ to the +git format-patch+ command (see +man +git-format-patch+ for further information). This will generate a +template for an introduction e-mail to your patch series. + +A 'cover letter' may be useful to introduce the changes you propose +in the following cases: + +* large number of commits in the series; + +* deep impact of the changes in the rest of the project; + +* RFC footnote:[RFC: (Request for comments) change proposal]; + +* whenever you feel it will help presenting your work, your choices, + the review process, etc. + +==== Patches for maintenance branches + +When fixing bugs on a maintenance branch, bugs should be fixed on the +master branch first. The commit log for such a patch may then contain a +post-commit note specifying what branches are affected: + +---- +package/foo: fix stuff + +Signed-off-by: Your Real Name +--- +Backport to: 2020.02.x, 2020.05.x +(2020.08.x not affected as the version was bumped) +---- + +Those changes will then be backported by a maintainer to the affected +branches. + +However, some bugs may apply only to a specific release, for example +because it is using an older version of a package. In that case, patches +should be based off the maintenance branch, and the patch subject prefix +must include the maintenance branch name (for example "[PATCH 2020.02.x]"). +This can be done with the +git format-patch+ flag +--subject-prefix+: + +--------------------- +$ git format-patch --subject-prefix "PATCH 2020.02.x" \ + -M -s -o outgoing origin/2020.02.x +--------------------- + +Then send the patches with +git send-email+, as described above. + +==== Patch revision changelog + +When improvements are requested, the new revision of each commit +should include a changelog of the modifications between each +submission. Note that when your patch series is introduced by a cover +letter, an overall changelog may be added to the cover letter in +addition to the changelog in the individual commits. +The best thing to rework a patch series is by interactive rebasing: ++git rebase -i origin/master+. Consult the git manual for more +information. + +When added to the individual commits, this changelog is added when +editing the commit message. Below the +Signed-off-by+ section, add ++---+ and your changelog. + +Although the changelog will be visible for the reviewers in the mail +thread, as well as in http://patchwork.buildroot.org[patchwork], +git+ +will automatically ignores lines below +---+ when the patch will be +merged. This is the intended behavior: the changelog is not meant to +be preserved forever in the +git+ history of the project. + +Hereafter the recommended layout: + +--------------- +Patch title: short explanation, max 72 chars + +A paragraph that explains the problem, and how it manifests itself. If +the problem is complex, it is OK to add more paragraphs. All paragraphs +should be wrapped at 72 characters. + +A paragraph that explains the root cause of the problem. Again, more +than one paragraph is OK. + +Finally, one or more paragraphs that explain how the problem is solved. +Don't hesitate to explain complex solutions in detail. + +Signed-off-by: John DOE + +--- +Changes v2 -> v3: + - foo bar (suggested by Jane) + - bar buz + +Changes v1 -> v2: + - alpha bravo (suggested by John) + - charly delta +--------------- + +Any patch revision should include the version number. The version number +is simply composed of the letter +v+ followed by an +integer+ greater or +equal to two (i.e. "PATCH v2", "PATCH v3" ...). + +This can be easily handled with +git format-patch+ by using the option ++--subject-prefix+: + +--------------------- +$ git format-patch --subject-prefix "PATCH v4" \ + -M -s -o outgoing origin/master +--------------------- + +Since git version 1.8.1, you can also use +-v + (where is the +version number): + +--------------------- +$ git format-patch -v4 -M -s -o outgoing origin/master +--------------------- + +When you provide a new version of a patch, please mark the old one as +superseded in http://patchwork.buildroot.org[patchwork]. You need to +create an account on http://patchwork.buildroot.org[patchwork] to be +able to modify the status of your patches. Note that you can only change +the status of patches you submitted yourself, which means the email +address you register in http://patchwork.buildroot.org[patchwork] should +match the one you use for sending patches to the mailing list. + +You can also add the +--in-reply-to + option when +submitting a patch to the mailing list. The id of the mail to reply to +can be found under the "Message Id" tag on +http://patchwork.buildroot.org[patchwork]. The advantage of +*in-reply-to* is that patchwork will automatically mark the previous +version of the patch as superseded. + +[[reporting-bugs]] +=== Reporting issues/bugs or getting help + +Before reporting any issue, please check in +xref:community-resources[the mailing list archive] whether someone has +already reported and/or fixed a similar problem. + +However you choose to report bugs or get help, either by +opening a bug in the xref:community-resources[bug tracker] or by +xref:community-resources[sending a mail to the mailing list], there are +a number of details to provide in order to help people reproduce and +find a solution to the issue. + +Try to think as if you were trying to help someone else; in +that case, what would you need? + +Here is a short list of details to provide in such case: + +* host machine (OS/release) +* version of Buildroot +* target for which the build fails +* package(s) for which the build fails +* the command that fails and its output +* any information you think that may be relevant + +Additionally, you should add the +.config+ file (or if you know how, a ++defconfig+; see xref:customize-store-buildroot-config[]). + +If some of these details are too large, do not hesitate to use a +pastebin service. Note that not all available pastebin services will +preserve Unix-style line terminators when downloading raw pastes. +Following pastebin services are known to work correctly: +- https://gist.github.com/ +- http://code.bulix.org/ + +=== Using the run-tests framework + +Buildroot includes a run-time testing framework called run-tests built +upon Python scripting and QEMU runtime execution. There are two types of +test cases within the framework, one for build time tests and another for +run-time tests that have a QEMU dependency. The goals of the framework are +the following: + +* build a well defined configuration +* optionally, verify some properties of the build output +* if it is a run-time test: +** boot it under QEMU +** run some test condition to verify that a given feature is working + +The run-tests tool has a series of options documented in the tool's help '-h' +description. Some common options include setting the download folder, the +output folder, keeping build output, and for multiple test cases, you can set +the JLEVEL for each. + +Here is an example walk through of running a test case. + +* For a first step, let us see what all the test case options are. The test +cases can be listed by executing +support/testing/run-tests -l+. These tests +can all be run individually during test development from the console. Both +one at a time and selectively as a group of a subset of tests. + +--------------------- +$ support/testing/run-tests -l +List of tests +test_run (tests.utils.test_check_package.TestCheckPackage) +Test the various ways the script can be called in a simple top to ... ok +test_run (tests.toolchain.test_external.TestExternalToolchainBuildrootMusl) ... ok +test_run (tests.toolchain.test_external.TestExternalToolchainBuildrootuClibc) ... ok +test_run (tests.toolchain.test_external.TestExternalToolchainCCache) ... ok +test_run (tests.toolchain.test_external.TestExternalToolchainCtngMusl) ... ok +test_run (tests.toolchain.test_external.TestExternalToolchainLinaroArm) ... ok +test_run (tests.toolchain.test_external.TestExternalToolchainSourceryArmv4) ... ok +test_run (tests.toolchain.test_external.TestExternalToolchainSourceryArmv5) ... ok +test_run (tests.toolchain.test_external.TestExternalToolchainSourceryArmv7) ... ok +[snip] +test_run (tests.init.test_systemd.TestInitSystemSystemdRoFull) ... ok +test_run (tests.init.test_systemd.TestInitSystemSystemdRoIfupdown) ... ok +test_run (tests.init.test_systemd.TestInitSystemSystemdRoNetworkd) ... ok +test_run (tests.init.test_systemd.TestInitSystemSystemdRwFull) ... ok +test_run (tests.init.test_systemd.TestInitSystemSystemdRwIfupdown) ... ok +test_run (tests.init.test_systemd.TestInitSystemSystemdRwNetworkd) ... ok +test_run (tests.init.test_busybox.TestInitSystemBusyboxRo) ... ok +test_run (tests.init.test_busybox.TestInitSystemBusyboxRoNet) ... ok +test_run (tests.init.test_busybox.TestInitSystemBusyboxRw) ... ok +test_run (tests.init.test_busybox.TestInitSystemBusyboxRwNet) ... ok + +Ran 157 tests in 0.021s + +OK +--------------------- + +Those runtime tests are regularly executed by Buildroot Gitlab CI +infrastructure, see .gitlab.yml and https://gitlab.com/buildroot.org/buildroot/-/jobs. + +==== Creating a test case + +The best way to get familiar with how to create a test case is to look at a +few of the basic file system +support/testing/tests/fs/+ and init ++support/testing/tests/init/+ test scripts. Those tests give good examples +of a basic build and build with run type of tests. There are other more +advanced cases that use things like nested +br2-external+ folders to provide +skeletons and additional packages. + +The test cases by default use a br-arm-full-* uClibc-ng toolchain and the +prebuild kernel for a armv5/7 cpu. It is recommended to use the default +defconfig test configuration except when Glibc/musl or a newer kernel are +necessary. By using the default it saves build time and the test would +automatically inherit a kernel/std library upgrade when the default is +updated. + +The basic test case definition involves + +* Creation of a new test file +* Defining a unique test class +* Determining if the default defconfig plus test options can be used +* Implementing a +def test_run(self):+ function to optionally startup the +emulator and provide test case conditions. + +After creating the test script, add yourself to the +DEVELOPERS+ file to +be the maintainer of that test case. + +==== Debugging a test case + +Within the Buildroot repository, the testing framework is organized at the +top level in +support/testing/+ by folders of +conf+, +infra+ and +tests+. +All the test cases live under the +test+ folder and are organized in various +folders representing the catagory of test. + +Lets walk through an example. + +* Using the Busybox Init system test case with a read/write rootfs ++tests.init.test_busybox.TestInitSystemBusyboxRw+ +* A minimal set of command line arguments when debugging a test case would +include '-d' which points to your dl folder, '-o' to an output folder, and +'-k' to keep any output on both pass/fail. With those options, the test will +retain logging and build artifacts providing status of the build and +execution of the test case. + +--------------------- +$ support/testing/run-tests -d dl -o output_folder -k tests.init.test_busybox.TestInitSystemBusyboxRw +15:03:26 TestInitSystemBusyboxRw Starting +15:03:28 TestInitSystemBusyboxRw Building +15:08:18 TestInitSystemBusyboxRw Building done +15:08:27 TestInitSystemBusyboxRw Cleaning up +. +Ran 1 test in 301.140s + +OK +--------------------- + +* For the case of a successful build, the +output_folder+ would contain a + folder with the Buildroot build, build log and run-time log. If +the build failed, the console output would show the stage at which it failed +(setup / build / run). Depending on the failure stage, the build/run logs +and/or Buildroot build artifacts can be inspected and instrumented. If the +QEMU instance needs to be launched for additional testing, the first few +lines of the run-time log capture it and it would allow some incremental +testing without re-running +support/testing/run-tests+. + +* You can also make modifications to the current sources inside the ++output_folder+ (e.g. for debug purposes) and rerun the standard +Buildroot make targets (in order to regenerate the complete image with +the new modifications) and then rerun the test. Modifying the sources +directly can speed up debugging compared to adding patch files, wiping the +output directoy, and starting the test again. + +--------------------- +$ ls output_folder/ +TestInitSystemBusyboxRw/ +TestInitSystemBusyboxRw-build.log +TestInitSystemBusyboxRw-run.log +--------------------- + +* The source file used to implement this example test is found under ++support/testing/tests/init/test_busybox.py+. This file outlines the +minimal defconfig that creates the build, QEMU configuration to launch +the built images and the test case assertions. + +To test an existing or new test case within Gitlab CI, there is a method of +invoking a specific test by creating a Buildroot fork in Gitlab under your +account. This can be handy when adding/changing a run-time test or fixing a +bug on a use case tested by a run-time test case. + + +In the examples below, the component of the branch name is a unique +string you choose to identify this specific job being created. + +* to trigger all run-test test case jobs: + +--------------------- + $ git push gitlab HEAD:-runtime-tests +--------------------- + +* to trigger one test case job, a specific branch naming string is used that +includes the full test case name. + +--------------------- + $ git push gitlab HEAD:- +--------------------- diff --git a/docs/manual/customize-configuration.txt b/docs/manual/customize-configuration.txt new file mode 100644 index 00000000..ae6cebe6 --- /dev/null +++ b/docs/manual/customize-configuration.txt @@ -0,0 +1,64 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[customize-store-buildroot-config]] +=== Storing the Buildroot configuration + +The Buildroot configuration can be stored using the command + +make savedefconfig+. + +This strips the Buildroot configuration down by removing configuration +options that are at their default value. The result is stored in a file +called +defconfig+. If you want to save it in another place, change the ++BR2_DEFCONFIG+ option in the Buildroot configuration itself, or call +make with +make savedefconfig BR2_DEFCONFIG=+. + +The recommended place to store this defconfig is ++configs/_defconfig+. If you follow this recommendation, the +configuration will be listed in +make help+ and can be set again by +running +make _defconfig+. + +Alternatively, you can copy the file to any other place and rebuild with ++make defconfig BR2_DEFCONFIG=+. + +[[customize-store-package-config]] +=== Storing the configuration of other components + +The configuration files for BusyBox, the Linux kernel, Barebox, U-Boot +and uClibc should be stored as well if changed. For each of these +components, a Buildroot configuration option exists to point to an input +configuration file, e.g. +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE+. To store +their configuration, set these configuration options to a path where you +want to save the configuration files, and then use the helper targets +described below to actually store the configuration. + +As explained in xref:customize-dir-structure[], the recommended path to +store these configuration files is ++board///foo.config+. + +Make sure that you create a configuration file 'before' changing +the +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE+ etc. options. Otherwise, +Buildroot will try to access this config file, which doesn't exist +yet, and will fail. You can create the configuration file by running ++make linux-menuconfig+ etc. + +Buildroot provides a few helper targets to make the saving of +configuration files easier. + +* +make linux-update-defconfig+ saves the linux configuration to the + path specified by +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE+. It + simplifies the config file by removing default values. However, + this only works with kernels starting from 2.6.33. For earlier + kernels, use +make linux-update-config+. +* +make busybox-update-config+ saves the busybox configuration to the + path specified by +BR2_PACKAGE_BUSYBOX_CONFIG+. +* +make uclibc-update-config+ saves the uClibc configuration to the + path specified by +BR2_UCLIBC_CONFIG+. +* +make barebox-update-defconfig+ saves the barebox configuration to the + path specified by +BR2_TARGET_BAREBOX_CUSTOM_CONFIG_FILE+. +* +make uboot-update-defconfig+ saves the U-Boot configuration to the + path specified by +BR2_TARGET_UBOOT_CUSTOM_CONFIG_FILE+. +* For at91bootstrap3, no helper exists so you have to copy the config + file manually to +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_CONFIG_FILE+. + + diff --git a/docs/manual/customize-device-permission-tables.txt b/docs/manual/customize-device-permission-tables.txt new file mode 100644 index 00000000..02dd8ad9 --- /dev/null +++ b/docs/manual/customize-device-permission-tables.txt @@ -0,0 +1,30 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[customize-device-permission]] +==== Setting file permissions and ownership and adding custom devices nodes + +Sometimes it is needed to set specific permissions or ownership on files +or device nodes. For example, certain files may need to be owned by +root. Since the post-build scripts are not run as root, you cannot do +such changes from there unless you use an explicit fakeroot from the +post-build script. + +Instead, Buildroot provides support for so-called _permission tables_. +To use this feature, set config option +BR2_ROOTFS_DEVICE_TABLE+ to a +space-separated list of permission tables, regular text files following +the xref:makedev-syntax[makedev syntax]. + +If you are using a static device table (i.e. not using +devtmpfs+, ++mdev+, or +(e)udev+) then you can add device nodes using the same +syntax, in so-called _device tables_. To use this feature, set config +option +BR2_ROOTFS_STATIC_DEVICE_TABLE+ to a space-separated list of +device tables. + +As shown in xref:customize-dir-structure[], the recommended location for +such files is +board///+. + +It should be noted that if the specific permissions or device nodes are +related to a specific application, you should set variables ++FOO_PERMISSIONS+ and +FOO_DEVICES+ in the package's +.mk+ file instead +(see xref:generic-package-reference[]). diff --git a/docs/manual/customize-directory-structure.txt b/docs/manual/customize-directory-structure.txt new file mode 100644 index 00000000..a3a7ad4c --- /dev/null +++ b/docs/manual/customize-directory-structure.txt @@ -0,0 +1,111 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[customize-dir-structure]] +=== Recommended directory structure + +When customizing Buildroot for your project, you will be creating one or +more project-specific files that need to be stored somewhere. While most +of these files could be placed in _any_ location as their path is to be +specified in the Buildroot configuration, the Buildroot developers +recommend a specific directory structure which is described in this +section. + +Orthogonal to this directory structure, you can choose _where_ you place +this structure itself: either inside the Buildroot tree, or outside of +it using a br2-external tree. Both options are valid, the choice is up +to you. + +----- ++-- board/ +| +-- / +| +-- / +| +-- linux.config +| +-- busybox.config +| +-- +| +-- post_build.sh +| +-- post_image.sh +| +-- rootfs_overlay/ +| | +-- etc/ +| | +-- +| +-- patches/ +| +-- foo/ +| | +-- +| +-- libbar/ +| +-- +| ++-- configs/ +| +-- _defconfig +| ++-- package/ +| +-- / +| +-- Config.in (if not using a br2-external tree) +| +-- .mk (if not using a br2-external tree) +| +-- package1/ +| | +-- Config.in +| | +-- package1.mk +| +-- package2/ +| +-- Config.in +| +-- package2.mk +| ++-- Config.in (if using a br2-external tree) ++-- external.mk (if using a br2-external tree) ++-- external.desc (if using a br2-external tree) +------ + +Details on the files shown above are given further in this chapter. + +Note: if you choose to place this structure outside of the Buildroot +tree but in a br2-external tree, the and possibly +components may be superfluous and can be left out. + +==== Implementing layered customizations + +It is quite common for a user to have several related projects that partly +need the same customizations. Instead of duplicating these +customizations for each project, it is recommended to use a layered +customization approach, as explained in this section. + +Almost all of the customization methods available in Buildroot, like +post-build scripts and root filesystem overlays, accept a +space-separated list of items. The specified items are always treated in +order, from left to right. By creating more than one such item, one for +the common customizations and another one for the really +project-specific customizations, you can avoid unnecessary duplication. +Each layer is typically embodied by a separate directory inside ++board//+. Depending on your projects, you could even introduce +more than two layers. + +An example directory structure for where a user has two customization +layers 'common' and 'fooboard' is: + +----- ++-- board/ + +-- / + +-- common/ + | +-- post_build.sh + | +-- rootfs_overlay/ + | | +-- ... + | +-- patches/ + | +-- ... + | + +-- fooboard/ + +-- linux.config + +-- busybox.config + +-- + +-- post_build.sh + +-- rootfs_overlay/ + | +-- ... + +-- patches/ + +-- ... +----- + +For example, if the user has the +BR2_GLOBAL_PATCH_DIR+ configuration +option set as: + +----- +BR2_GLOBAL_PATCH_DIR="board//common/patches board//fooboard/patches" +----- + +then first the patches from the 'common' layer would be applied, +followed by the patches from the 'fooboard' layer. diff --git a/docs/manual/customize-outside-br.txt b/docs/manual/customize-outside-br.txt new file mode 100644 index 00000000..348f2b08 --- /dev/null +++ b/docs/manual/customize-outside-br.txt @@ -0,0 +1,446 @@ +// -*- mode:doc -*- ; +// vim: set syntax=asciidoc: + +[[outside-br-custom]] +=== Keeping customizations outside of Buildroot + +As already briefly mentioned in xref:customize-dir-structure[], you can +place project-specific customizations in two locations: + + * directly within the Buildroot tree, typically maintaining them using + branches in a version control system so that upgrading to a newer + Buildroot release is easy. + + * outside of the Buildroot tree, using the _br2-external_ mechanism. + This mechanism allows to keep package recipes, board support and + configuration files outside of the Buildroot tree, while still + having them nicely integrated in the build logic. We call this + location a _br2-external tree_. This section explains how to use + the br2-external mechanism and what to provide in a br2-external + tree. + +One can tell Buildroot to use one or more br2-external trees by setting +the +BR2_EXTERNAL+ make variable set to the path(s) of the br2-external +tree(s) to use. It can be passed to any Buildroot +make+ invocation. It +is automatically saved in the hidden +.br2-external.mk+ file in the output +directory. Thanks to this, there is no need to pass +BR2_EXTERNAL+ at +every +make+ invocation. It can however be changed at any time by +passing a new value, and can be removed by passing an empty value. + +.Note +The path to a br2-external tree can be either absolute or relative. +If it is passed as a relative path, it is important to note that it is +interpreted relative to the main Buildroot source directory, *not* to +the Buildroot output directory. + +.Note: +If using an br2-external tree from before Buildroot 2016.11, you need to +convert it before you can use it with Buildroot 2016.11 onward. See +xref:br2-external-converting[] for help on doing so. + +Some examples: + +----- +buildroot/ $ make BR2_EXTERNAL=/path/to/foo menuconfig +----- + +From now on, definitions from the +/path/to/foo+ br2-external tree +will be used: + +----- +buildroot/ $ make +buildroot/ $ make legal-info +----- + +We can switch to another br2-external tree at any time: + +----- +buildroot/ $ make BR2_EXTERNAL=/where/we/have/bar xconfig +----- + +We can also use multiple br2-external trees: + +---- +buildroot/ $ make BR2_EXTERNAL=/path/to/foo:/where/we/have/bar menuconfig +---- + +Or disable the usage of any br2-external tree: + +----- +buildroot/ $ make BR2_EXTERNAL= xconfig +----- + +==== Layout of a br2-external tree + +A br2-external tree must contain at least those three files, described +in the following chapters: + + * +external.desc+ + * +external.mk+ + * +Config.in+ + +Apart from those mandatory files, there may be additional and optional +content that may be present in a br2-external tree, like the +configs/+ +or +provides/+ directories. They are described in the following chapters +as well. + +A complete example br2-external tree layout is also described later. + +===== The +external.desc+ file + +That file describes the br2-external tree: the _name_ and _description_ +for that br2-external tree. + +The format for this file is line based, with each line starting by a +keyword, followed by a colon and one or more spaces, followed by the +value assigned to that keyword. There are two keywords currently +recognised: + + * +name+, mandatory, defines the name for that br2-external tree. That + name must only use ASCII characters in the set +[A-Za-z0-9_]+; any + other character is forbidden. Buildroot sets the variable + +BR2_EXTERNAL_$(NAME)_PATH+ to the absolute path of the br2-external + tree, so that you can use it to refer to your br2-external tree. This + variable is available both in Kconfig, so you can use it to source your + Kconfig files (see below) and in the Makefile, so that you can use it + to include other Makefiles (see below) or refer to other files (like + data files) from your br2-external tree. ++ +.Note: +Since it is possible to use multiple br2-external trees at once, this + name is used by Buildroot to generate variables for each of those trees. + That name is used to identify your br2-external tree, so try to come up + with a name that really describes your br2-external tree, in order for + it to be relatively unique, so that it does not clash with another name + from another br2-external tree, especially if you are planning on + somehow sharing your br2-external tree with third parties or using + br2-external trees from third parties. + + * +desc+, optional, provides a short description for that br2-external + tree. It shall fit on a single line, is mostly free-form (see below), + and is used when displaying information about a br2-external tree (e.g. + above the list of defconfig files, or as the prompt in the menuconfig); + as such, it should relatively brief (40 chars is probably a good upper + limit). The description is available in the +BR2_EXTERNAL_$(NAME)_DESC+ + variable. + +Examples of names and the corresponding +BR2_EXTERNAL_$(NAME)_PATH+ +variables: + + * +FOO+ -> +BR2_EXTERNAL_FOO_PATH+ + * +BAR_42+ -> +BR2_EXTERNAL_BAR_42_PATH+ + +In the following examples, it is assumed the name to be set to +BAR_42+. + +.Note: +Both +BR2_EXTERNAL_$(NAME)_PATH+ and `BR2_EXTERNAL_$(NAME)_DESC` are + available in the Kconfig files and the Makefiles. They are also + exported in the environment so are available in post-build, post-image + and in-fakeroot scripts. + +===== The +Config.in+ and +external.mk+ files + +Those files (which may each be empty) can be used to define package +recipes (i.e. +foo/Config.in+ and +foo/foo.mk+ like for packages bundled +in Buildroot itself) or other custom configuration options or make logic. + +Buildroot automatically includes the +Config.in+ from each br2-external +tree to make it appear in the top-level configuration menu, and includes +the +external.mk+ from each br2-external tree with the rest of the +makefile logic. + +The main usage of this is to store package recipes. The recommended way +to do this is to write a +Config.in+ file that looks like: + +------ +source "$BR2_EXTERNAL_BAR_42_PATH/package/package1/Config.in" +source "$BR2_EXTERNAL_BAR_42_PATH/package/package2/Config.in" +------ + +Then, have an +external.mk+ file that looks like: + +------ +include $(sort $(wildcard $(BR2_EXTERNAL_BAR_42_PATH)/package/*/*.mk)) +------ + +And then in +$(BR2_EXTERNAL_BAR_42_PATH)/package/package1+ and ++$(BR2_EXTERNAL_BAR_42_PATH)/package/package2+ create normal +Buildroot package recipes, as explained in xref:adding-packages[]. +If you prefer, you can also group the packages in subdirectories +called and adapt the above paths accordingly. + +You can also define custom configuration options in +Config.in+ and +custom make logic in +external.mk+. + +===== The +configs/+ directory + +One can store Buildroot defconfigs in the +configs+ subdirectory of +the br2-external tree. Buildroot will automatically show them in the +output of +make list-defconfigs+ and allow them to be loaded with the +normal +make _defconfig+ command. They will be visible in the +'make list-defconfigs' output, below an +External configs+ label that +contains the name of the br2-external tree they are defined in. + +.Note: +If a defconfig file is present in more than one br2-external tree, then +the one from the last br2-external tree is used. It is thus possible +to override a defconfig bundled in Buildroot or another br2-external +tree. + +===== The +provides/+ directory + +For some packages, Buildroot provides a choice between two (or more) +implementations of API-compatible such packages. For example, there is +a choice to choose either libjpeg ot jpeg-turbo; there is one between +openssl or libressl; there is one to select one of the known, +pre-configured toolchains... + +It is possible for a br2-external to extend those choices, by providing +a set of files that define those alternatives: + +* +provides/toolchains.in+ defines the pre-configured toolchains, which + will then be listed in the toolchain selection; +* +provides/jpeg.in+ defines the alternative libjpeg implementations; +* +provides/openssl.in+ defines the alternative openssl implementations; +* +provides/skeleton.in+ defines the alternative skeleton implementations; +* +provides/init.in+ defines the alternative init system implementations, this + can be used to select a default skeleton for your init. + +===== Free-form content + +One can store all the board-specific configuration files there, such +as the kernel configuration, the root filesystem overlay, or any other +configuration file for which Buildroot allows to set the location (by +using the +BR2_EXTERNAL_$(NAME)_PATH+ variable). For example, you +could set the paths to a global patch directory, to a rootfs overlay +and to the kernel configuration file as follows (e.g. by running +`make menuconfig` and filling in these options): + +---- +BR2_GLOBAL_PATCH_DIR=$(BR2_EXTERNAL_BAR_42_PATH)/patches/ +BR2_ROOTFS_OVERLAY=$(BR2_EXTERNAL_BAR_42_PATH)/board//overlay/ +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE=$(BR2_EXTERNAL_BAR_42_PATH)/board//kernel.config +---- + +===== Additional Linux kernel extensions + +Additional Linux kernel extensions (see xref:linux-kernel-ext[]) can +be added by storing them in the `linux/` directory at the root of a +br2-external tree. + +===== Example layout + +Here is an example layout using all features of br2-external (the sample +content is shown for the file above it, when it is relevant to explain +the br2-external tree; this is all entirely made up just for the sake of +illustration, of course): + +---- +/path/to/br2-ext-tree/ + |- external.desc + | |name: BAR_42 + | |desc: Example br2-external tree + | `---- + | + |- Config.in + | |source "$BR2_EXTERNAL_BAR_42_PATH/toolchain/toolchain-external-mine/Config.in.options" + | |source "$BR2_EXTERNAL_BAR_42_PATH/package/pkg-1/Config.in" + | |source "$BR2_EXTERNAL_BAR_42_PATH/package/pkg-2/Config.in" + | |source "$BR2_EXTERNAL_BAR_42_PATH/package/my-jpeg/Config.in" + | | + | |config BAR_42_FLASH_ADDR + | | hex "my-board flash address" + | | default 0x10AD + | `---- + | + |- external.mk + | |include $(sort $(wildcard $(BR2_EXTERNAL_BAR_42_PATH)/package/*/*.mk)) + | |include $(sort $(wildcard $(BR2_EXTERNAL_BAR_42_PATH)/toolchain/*/*.mk)) + | | + | |flash-my-board: + | | $(BR2_EXTERNAL_BAR_42_PATH)/board/my-board/flash-image \ + | | --image $(BINARIES_DIR)/image.bin \ + | | --address $(BAR_42_FLASH_ADDR) + | `---- + | + |- package/pkg-1/Config.in + | |config BR2_PACKAGE_PKG_1 + | | bool "pkg-1" + | | help + | | Some help about pkg-1 + | `---- + |- package/pkg-1/pkg-1.hash + |- package/pkg-1/pkg-1.mk + | |PKG_1_VERSION = 1.2.3 + | |PKG_1_SITE = /some/where/to/get/pkg-1 + | |PKG_1_LICENSE = blabla + | | + | |define PKG_1_INSTALL_INIT_SYSV + | | $(INSTALL) -D -m 0755 $(PKG_1_PKGDIR)/S99my-daemon \ + | | $(TARGET_DIR)/etc/init.d/S99my-daemon + | |endef + | | + | |$(eval $(autotools-package)) + | `---- + |- package/pkg-1/S99my-daemon + | + |- package/pkg-2/Config.in + |- package/pkg-2/pkg-2.hash + |- package/pkg-2/pkg-2.mk + | + |- provides/jpeg.in + | |config BR2_PACKAGE_MY_JPEG + | | bool "my-jpeg" + | `---- + |- package/my-jpeg/Config.in + | |config BR2_PACKAGE_PROVIDES_JPEG + | | default "my-jpeg" if BR2_PACKAGE_MY_JPEG + | `---- + |- package/my-jpeg/my-jpeg.mk + | |# This is a normal package .mk file + | |MY_JPEG_VERSION = 1.2.3 + | |MY_JPEG_SITE = https://example.net/some/place + | |MY_JPEG_PROVIDES = jpeg + | |$(eval $(autotools-package)) + | `---- + | + |- provides/init.in + | |config BR2_INIT_MINE + | | bool "my custom init" + | | select BR2_PACKAGE_MY_INIT + | | select BR2_PACKAGE_SKELETON_INIT_MINE if BR2_ROOTFS_SKELETON_DEFAULT + | `---- + | + |- provides/skeleton.in + | |config BR2_ROOTFS_SKELETON_MINE + | | bool "my custom skeleton" + | | select BR2_PACKAGE_SKELETON_MINE + | `---- + |- package/skeleton-mine/Config.in + | |config BR2_PACKAGE_SKELETON_MINE + | | bool + | | select BR2_PACKAGE_HAS_SKELETON + | | + | |config BR2_PACKAGE_PROVIDES_SKELETON + | | default "skeleton-mine" if BR2_PACKAGE_SKELETON_MINE + | `---- + |- package/skeleton-mine/skeleton-mine.mk + | |SKELETON_MINE_ADD_TOOLCHAIN_DEPENDENCY = NO + | |SKELETON_MINE_ADD_SKELETON_DEPENDENCY = NO + | |SKELETON_MINE_PROVIDES = skeleton + | |SKELETON_MINE_INSTALL_STAGING = YES + | |$(eval $(generic-package)) + | `---- + | + |- provides/toolchains.in + | |config BR2_TOOLCHAIN_EXTERNAL_MINE + | | bool "my custom toolchain" + | | depends on BR2_some_arch + | | select BR2_INSTALL_LIBSTDCPP + | `---- + |- toolchain/toolchain-external-mine/Config.in.options + | |if BR2_TOOLCHAIN_EXTERNAL_MINE + | |config BR2_TOOLCHAIN_EXTERNAL_PREFIX + | | default "arch-mine-linux-gnu" + | |config BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL + | | default "toolchain-external-mine" + | |endif + | `---- + |- toolchain/toolchain-external-mine/toolchain-external-mine.mk + | |TOOLCHAIN_EXTERNAL_MINE_SITE = https://example.net/some/place + | |TOOLCHAIN_EXTERNAL_MINE_SOURCE = my-toolchain.tar.gz + | |$(eval $(toolchain-external-package)) + | `---- + | + |- linux/Config.ext.in + | |config BR2_LINUX_KERNEL_EXT_EXAMPLE_DRIVER + | | bool "example-external-driver" + | | help + | | Example external driver + | |--- + |- linux/linux-ext-example-driver.mk + | + |- configs/my-board_defconfig + | |BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_BAR_42_PATH)/patches/" + | |BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_BAR_42_PATH)/board/my-board/overlay/" + | |BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_BAR_42_PATH)/board/my-board/post-image.sh" + | |BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_BAR_42_PATH)/board/my-board/kernel.config" + | `---- + | + |- patches/linux/0001-some-change.patch + |- patches/linux/0002-some-other-change.patch + |- patches/busybox/0001-fix-something.patch + | + |- board/my-board/kernel.config + |- board/my-board/overlay/var/www/index.html + |- board/my-board/overlay/var/www/my.css + |- board/my-board/flash-image + `- board/my-board/post-image.sh + |#!/bin/sh + |generate-my-binary-image \ + | --root ${BINARIES_DIR}/rootfs.tar \ + | --kernel ${BINARIES_DIR}/zImage \ + | --dtb ${BINARIES_DIR}/my-board.dtb \ + | --output ${BINARIES_DIR}/image.bin + `---- +---- + +The br2-external tree will then be visible in the menuconfig (with +the layout expanded): + +---- +External options ---> + *** Example br2-external tree (in /path/to/br2-ext-tree/) + [ ] pkg-1 + [ ] pkg-2 + (0x10AD) my-board flash address +---- + +If you are using more than one br2-external tree, it would look like +(with the layout expanded and the second one with name +FOO_27+ but no ++desc:+ field in +external.desc+): + +---- +External options ---> + Example br2-external tree ---> + *** Example br2-external tree (in /path/to/br2-ext-tree) + [ ] pkg-1 + [ ] pkg-2 + (0x10AD) my-board flash address + FOO_27 ---> + *** FOO_27 (in /path/to/another-br2-ext) + [ ] foo + [ ] bar +---- + +Additionally, the jpeg provider will be visible in the jpeg choice: + +---- +Target packages ---> + Libraries ---> + Graphics ---> + [*] jpeg support + jpeg variant () ---> + ( ) jpeg + ( ) jpeg-turbo + *** jpeg from: Example br2-external tree *** + (X) my-jpeg + *** jpeg from: FOO_27 *** + ( ) another-jpeg +---- + +And similarly for the toolchains: + +---- +Toolchain ---> + Toolchain () ---> + ( ) Custom toolchain + *** Toolchains from: Example br2-external tree *** + (X) my custom toolchain +---- + +.Note +The toolchain options in +toolchain/toolchain-external-mine/Config.in.options+ +will not appear in the `Toolchain` menu. They must be explicitly included +from within the br2-external's top-level +Config.in+ and will thus appear +in the `External options` menu. diff --git a/docs/manual/customize-packages.txt b/docs/manual/customize-packages.txt new file mode 100644 index 00000000..b57280ea --- /dev/null +++ b/docs/manual/customize-packages.txt @@ -0,0 +1,56 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[customize-packages]] +=== Adding project-specific packages + +In general, any new package should be added directly in the +package+ +directory and submitted to the Buildroot upstream project. How to add +packages to Buildroot in general is explained in full detail in +xref:adding-packages[] and will not be repeated here. However, your +project may need some proprietary packages that cannot be upstreamed. +This section will explain how you can keep such project-specific +packages in a project-specific directory. + +As shown in xref:customize-dir-structure[], the recommended location for +project-specific packages is +package//+. If you are using the +br2-external tree feature (see xref:outside-br-custom[]) the recommended +location is to put them in a sub-directory named +package/+ in your +br2-external tree. + +However, Buildroot will not be aware of the packages in this location, +unless we perform some additional steps. As explained in +xref:adding-packages[], a package in Buildroot basically consists of two +files: a +.mk+ file (describing how to build the package) and a ++Config.in+ file (describing the configuration options for this +package). + +Buildroot will automatically include the +.mk+ files in first-level +subdirectories of the +package+ directory (using the pattern ++package/\*/*.mk+). If we want Buildroot to include +.mk+ files from +deeper subdirectories (like +package//package1/+) then we +simply have to add a +.mk+ file in a first-level subdirectory that +includes these additional +.mk+ files. Therefore, create a file ++package//.mk+ with following contents (assuming you +have only one extra directory level below +package//+): + +----- +include $(sort $(wildcard package//*/*.mk)) +----- + +For the +Config.in+ files, create a file +package//Config.in+ +that includes the +Config.in+ files of all your packages. An exhaustive +list has to be provided since wildcards are not supported in the source command of kconfig. +For example: + +----- +source "package//package1/Config.in" +source "package//package2/Config.in" +----- + +Include this new file +package//Config.in+ from ++package/Config.in+, preferably in a company-specific menu to make +merges with future Buildroot versions easier. + +If using a br2-external tree, refer to xref:outside-br-custom[] for how +to fill in those files. diff --git a/docs/manual/customize-patches.txt b/docs/manual/customize-patches.txt new file mode 100644 index 00000000..eb98d1be --- /dev/null +++ b/docs/manual/customize-patches.txt @@ -0,0 +1,59 @@ +// -*- mode:doc -*- ; +// vim: set syntax=asciidoc: + +[[customize-patches]] +=== Adding project-specific patches + +It is sometimes useful to apply 'extra' patches to packages - on top of +those provided in Buildroot. This might be used to support custom +features in a project, for example, or when working on a new +architecture. + +The +BR2_GLOBAL_PATCH_DIR+ configuration option can be used to specify +a space separated list of one or more directories containing package +patches. + +For a specific version ++ of a specific package +++, patches are applied from +BR2_GLOBAL_PATCH_DIR+ as +follows: + +. For every directory - ++ - that exists in + +BR2_GLOBAL_PATCH_DIR+, a ++ will be determined as + follows: ++ +* +///+ if the + directory exists. ++ +* Otherwise, +/+ if the directory + exists. + +. Patches will then be applied from a ++ as + follows: ++ +* If a +series+ file exists in the package directory, then patches are + applied according to the +series+ file; ++ +* Otherwise, patch files matching +*.patch+ are applied in + alphabetical order. So, to ensure they are applied in the right + order, it is highly recommended to name the patch files like this: + +-.patch+, where ++ refers to the + 'apply order'. + +For information about how patches are applied for a package, see +xref:patch-apply-order[] + +The +BR2_GLOBAL_PATCH_DIR+ option is the preferred method for +specifying a custom patch directory for packages. It can be used to +specify a patch directory for any package in buildroot. It should also +be used in place of the custom patch directory options that are +available for packages such as U-Boot and Barebox. By doing this, it +will allow a user to manage their patches from one top-level +directory. + +The exception to +BR2_GLOBAL_PATCH_DIR+ being the preferred method for +specifying custom patches is +BR2_LINUX_KERNEL_PATCH+. ++BR2_LINUX_KERNEL_PATCH+ should be used to specify kernel patches that +are available at a URL. *Note:* +BR2_LINUX_KERNEL_PATCH+ specifies kernel +patches that are applied after patches available in +BR2_GLOBAL_PATCH_DIR+, +as it is done from a post-patch hook of the Linux package. + diff --git a/docs/manual/customize-post-image.txt b/docs/manual/customize-post-image.txt new file mode 100644 index 00000000..5308093d --- /dev/null +++ b/docs/manual/customize-post-image.txt @@ -0,0 +1,38 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Customization _after_ the images have been created + +While post-build scripts (xref:rootfs-custom[]) are run _before_ +building the filesystem image, kernel and bootloader, *post-image +scripts* can be used to perform some specific actions _after_ all images +have been created. + +Post-image scripts can for example be used to automatically extract your +root filesystem tarball in a location exported by your NFS server, or +to create a special firmware image that bundles your root filesystem and +kernel image, or any other custom action required for your project. + +To enable this feature, specify a space-separated list of post-image +scripts in config option +BR2_ROOTFS_POST_IMAGE_SCRIPT+ (in the +System +configuration+ menu). If you specify a relative path, it will be +relative to the root of the Buildroot tree. + +Just like post-build scripts, post-image scripts are run with the main +Buildroot tree as current working directory. The path to the +images+ +output directory is passed as the first argument to each script. If the +config option +BR2_ROOTFS_POST_SCRIPT_ARGS+ is not empty, these +arguments will be passed to the script too. All the scripts will be +passed the exact same set of arguments, it is not possible to pass +different sets of arguments to each script. + +Again just like for the post-build scripts, the scripts have access to +the environment variables +BR2_CONFIG+, +HOST_DIR+, +STAGING_DIR+, ++TARGET_DIR+, +BUILD_DIR+, +BINARIES_DIR+, +CONFIG_DIR+ and ++BASE_DIR+. + +The post-image scripts will be executed as the user that executes +Buildroot, which should normally _not_ be the root user. Therefore, any +action requiring root permissions in one of these scripts will require +special handling (usage of fakeroot or sudo), which is left to the +script developer. diff --git a/docs/manual/customize-quick-guide.txt b/docs/manual/customize-quick-guide.txt new file mode 100644 index 00000000..627ecbac --- /dev/null +++ b/docs/manual/customize-quick-guide.txt @@ -0,0 +1,66 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Quick guide to storing your project-specific customizations + +Earlier in this chapter, the different methods for making +project-specific customizations have been described. This section will +now summarize all this by providing step-by-step instructions to storing your +project-specific customizations. Clearly, the steps that are not relevant to +your project can be skipped. + +1. +make menuconfig+ to configure toolchain, packages and kernel. +1. +make linux-menuconfig+ to update the kernel config, similar for + other configuration like busybox, uclibc, ... +1. +mkdir -p board//+ +1. Set the following options to +board///.config+ + (as far as they are relevant): + * +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE+ + * +BR2_PACKAGE_BUSYBOX_CONFIG+ + * +BR2_UCLIBC_CONFIG+ + * +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_CONFIG_FILE+ + * +BR2_TARGET_BAREBOX_CUSTOM_CONFIG_FILE+ + * +BR2_TARGET_UBOOT_CUSTOM_CONFIG_FILE+ +1. Write the configuration files: + * +make linux-update-defconfig+ + * +make busybox-update-config+ + * +make uclibc-update-config+ + * +cp /build/at91bootstrap3-*/.config + board///at91bootstrap3.config+ + * +make barebox-update-defconfig+ + * +make uboot-update-defconfig+ +1. Create +board///rootfs-overlay/+ and fill it + with additional files you need on your rootfs, e.g. + +board///rootfs-overlay/etc/inittab+. + Set +BR2_ROOTFS_OVERLAY+ + to +board///rootfs-overlay+. +1. Create a post-build script + +board///post_build.sh+. Set + +BR2_ROOTFS_POST_BUILD_SCRIPT+ to + +board///post_build.sh+ +1. If additional setuid permissions have to be set or device nodes have + to be created, create +board///device_table.txt+ + and add that path to +BR2_ROOTFS_DEVICE_TABLE+. +1. If additional user accounts have to be created, create + +board///users_table.txt+ and add that path + to +BR2_ROOTFS_USERS_TABLES+. +1. To add custom patches to certain packages, set +BR2_GLOBAL_PATCH_DIR+ + to +board///patches/+ and add your patches + for each package in a subdirectory named after the package. Each + patch should be called +--.patch+. +1. Specifically for the Linux kernel, there also exists the option + +BR2_LINUX_KERNEL_PATCH+ with as main advantage that it can also + download patches from a URL. If you do not need this, + +BR2_GLOBAL_PATCH_DIR+ is preferred. U-Boot, Barebox, at91bootstrap + and at91bootstrap3 also have separate options, but these do not + provide any advantage over +BR2_GLOBAL_PATCH_DIR+ and will likely be + removed in the future. +1. If you need to add project-specific packages, create + +package//+ and place your packages in that + directory. Create an overall +.mk+ file that + includes the +.mk+ files of all your packages. Create an overall + +Config.in+ file that sources the +Config.in+ files of all your + packages. Include this +Config.in+ file from Buildroot's + +package/Config.in+ file. +1. +make savedefconfig+ to save the buildroot configuration. +1. +cp defconfig configs/_defconfig+ diff --git a/docs/manual/customize-rootfs.txt b/docs/manual/customize-rootfs.txt new file mode 100644 index 00000000..e46306fd --- /dev/null +++ b/docs/manual/customize-rootfs.txt @@ -0,0 +1,156 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[rootfs-custom]] +=== Customizing the generated target filesystem + +Besides changing the configuration through +make *config+, +there are a few other ways to customize the resulting target filesystem. + +The two recommended methods, which can co-exist, are root filesystem +overlay(s) and post build script(s). + +Root filesystem overlays (+BR2_ROOTFS_OVERLAY+):: ++ +A filesystem overlay is a tree of files that is copied directly + over the target filesystem after it has been built. To enable this + feature, set config option +BR2_ROOTFS_OVERLAY+ (in the +System + configuration+ menu) to the root of the overlay. You can even specify + multiple overlays, space-separated. If you specify a relative path, + it will be relative to the root of the Buildroot tree. Hidden + directories of version control systems, like +.git+, +.svn+, +.hg+, + etc., files called +.empty+ and files ending in +~+ are excluded from + the copy. ++ +When +BR2_ROOTFS_MERGED_USR+ is enabled, then the overlay must not + contain the '/bin', '/lib' or '/sbin' directories, as Buildroot will + create them as symbolic links to the relevant folders in '/usr'. In + such a situation, should the overlay have any programs or libraries, + they should be placed in '/usr/bin', '/usr/sbin' and '/usr/lib'. ++ +As shown in xref:customize-dir-structure[], the recommended path for + this overlay is +board///rootfs-overlay+. + +Post-build scripts (+BR2_ROOTFS_POST_BUILD_SCRIPT+):: ++ +Post-build scripts are shell scripts called 'after' Buildroot builds + all the selected software, but 'before' the rootfs images are + assembled. To enable this feature, specify a space-separated list of + post-build scripts in config option +BR2_ROOTFS_POST_BUILD_SCRIPT+ (in + the +System configuration+ menu). If you specify a relative path, it + will be relative to the root of the Buildroot tree. ++ +Using post-build scripts, you can remove or modify any file in your + target filesystem. You should, however, use this feature with care. + Whenever you find that a certain package generates wrong or unneeded + files, you should fix that package rather than work around it with some + post-build cleanup scripts. ++ +As shown in xref:customize-dir-structure[], the recommended path for + this script is +board///post_build.sh+. ++ +The post-build scripts are run with the main Buildroot tree as current + working directory. The path to the target filesystem is passed as the + first argument to each script. If the config option + +BR2_ROOTFS_POST_SCRIPT_ARGS+ is not empty, these arguments will be + passed to the script too. All the scripts will be passed the exact + same set of arguments, it is not possible to pass different sets of + arguments to each script. ++ +In addition, you may also use these environment variables: + + - +BR2_CONFIG+: the path to the Buildroot .config file + - +CONFIG_DIR+: the directory containing the .config file, and + therefore the top-level Buildroot Makefile to use (which is + correct for both in-tree and out-of-tree builds) + - +HOST_DIR+, +STAGING_DIR+, +TARGET_DIR+: see + xref:generic-package-reference[] + - +BUILD_DIR+: the directory where packages are extracted and built + - +BINARIES_DIR+: the place where all binary files (aka images) are + stored + - +BASE_DIR+: the base output directory + +Below three more methods of customizing the target filesystem are +described, but they are not recommended. + +Direct modification of the target filesystem:: ++ +For temporary modifications, you can modify the target filesystem + directly and rebuild the image. The target filesystem is available + under +output/target/+. After making your changes, run +make+ to + rebuild the target filesystem image. ++ +This method allows you to do anything to the target filesystem, but if + you need to clean your Buildroot tree using +make clean+, these + changes will be lost. Such cleaning is necessary in several cases, + refer to xref:full-rebuild[] for details. This solution is therefore + only useful for quick tests: _changes do not survive the +make clean+ + command_. Once you have validated your changes, you should make sure + that they will persist after a +make clean+, using a root filesystem + overlay or a post-build script. + +Custom target skeleton (+BR2_ROOTFS_SKELETON_CUSTOM+):: ++ +The root filesystem image is created from a target skeleton, on top of + which all packages install their files. The skeleton is copied to the + target directory +output/target+ before any package is built and + installed. The default target skeleton provides the standard Unix + filesystem layout and some basic init scripts and configuration files. ++ +If the default skeleton (available under +system/skeleton+) does not + match your needs, you would typically use a root filesystem overlay or + post-build script to adapt it. However, if the default skeleton is + entirely different than what you need, using a custom skeleton may be + more suitable. ++ +To enable this feature, enable config option + +BR2_ROOTFS_SKELETON_CUSTOM+ and set +BR2_ROOTFS_SKELETON_CUSTOM_PATH+ + to the path of your custom skeleton. Both options are available in the + +System configuration+ menu. If you specify a relative path, it will + be relative to the root of the Buildroot tree. ++ +Custom skeletons don't need to contain the '/bin', '/lib' or '/sbin' + directories, since they are created automatically during the build. + When +BR2_ROOTFS_MERGED_USR+ is enabled, then the custom skeleton must + not contain the '/bin', '/lib' or '/sbin' directories, as Buildroot + will create them as symbolic links to the relevant folders in '/usr'. + In such a situation, should the skeleton have any programs or + libraries, they should be placed in '/usr/bin', '/usr/sbin' and + '/usr/lib'. ++ +This method is not recommended because it duplicates the entire + skeleton, which prevents taking advantage of the fixes or improvements + brought to the default skeleton in later Buildroot releases. + +Post-fakeroot scripts (+BR2_ROOTFS_POST_FAKEROOT_SCRIPT+):: ++ +When aggregating the final images, some parts of the process requires + root rights: creating device nodes in `/dev`, setting permissions or + ownership to files and directories... To avoid requiring actual root + rights, Buildroot uses +fakeroot+ to simulate root rights. This is not + a complete substitute for actually being root, but is enough for what + Buildroot needs. ++ +Post-fakeroot scripts are shell scripts that are called at the 'end' of + the fakeroot phase, 'right before' the filesystem image generator is + called. As such, they are called in the fakeroot context. ++ +Post-fakeroot scripts can be useful in case you need to tweak the + filesystem to do modifications that are usually only available to the + root user. ++ +.Note: +It is recommended to use the existing mechanisms to set file permissions + or create entries in `/dev` (see xref:customize-device-permission[]) or + to create users (see xref:customize-users[]) ++ +.Note: +The difference between post-build scripts (above) and fakeroot scripts, + is that post-build scripts are not called in the fakeroot context. ++ +.Note: +Using `fakeroot` is not an absolute substitute for actually being root. + `fakeroot` only ever fakes the file access rights and types (regular, + block-or-char device...) and uid/gid; these are emulated in-memory. + +include::customize-device-permission-tables.txt[] diff --git a/docs/manual/customize-users-tables.txt b/docs/manual/customize-users-tables.txt new file mode 100644 index 00000000..e2d32e23 --- /dev/null +++ b/docs/manual/customize-users-tables.txt @@ -0,0 +1,18 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[customize-users]] +=== Adding custom user accounts + +Sometimes it is needed to add specific users in the target system. +To cover this requirement, Buildroot provides support for so-called +_users tables_. To use this feature, set config option ++BR2_ROOTFS_USERS_TABLES+ to a space-separated list of users tables, +regular text files following the xref:makeuser-syntax[makeusers syntax]. + +As shown in xref:customize-dir-structure[], the recommended location for +such files is +board///+. + +It should be noted that if the custom users are related to a specific +application, you should set variable +FOO_USERS+ in the package's +.mk+ +file instead (see xref:generic-package-reference[]). diff --git a/docs/manual/customize.txt b/docs/manual/customize.txt new file mode 100644 index 00000000..484413e4 --- /dev/null +++ b/docs/manual/customize.txt @@ -0,0 +1,60 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[customize]] +== Project-specific customization + +Typical actions you may need to perform for a given project are: + +* configuring Buildroot (including build options and toolchain, + bootloader, kernel, package and filesystem image type selection) +* configuring other components, like the Linux kernel and BusyBox +* customizing the generated target filesystem + ** adding or overwriting files on the target filesystem (using + +BR2_ROOTFS_OVERLAY+) + ** modifying or deleting files on the target filesystem (using + +BR2_ROOTFS_POST_BUILD_SCRIPT+) + ** running arbitrary commands prior to generating the filesystem image + (using +BR2_ROOTFS_POST_BUILD_SCRIPT+) + ** setting file permissions and ownership (using + +BR2_ROOTFS_DEVICE_TABLE+) + ** adding custom devices nodes (using + +BR2_ROOTFS_STATIC_DEVICE_TABLE+) +* adding custom user accounts (using +BR2_ROOTFS_USERS_TABLES+) +* running arbitrary commands after generating the filesystem image + (using +BR2_ROOTFS_POST_IMAGE_SCRIPT+) +* adding project-specific patches to some packages (using + +BR2_GLOBAL_PATCH_DIR+) +* adding project-specific packages + +An important note regarding such 'project-specific' customizations: +please carefully consider which changes are indeed project-specific and +which changes are also useful to developers outside your project. The +Buildroot community highly recommends and encourages the upstreaming of +improvements, packages and board support to the official Buildroot +project. Of course, it is sometimes not possible or desirable to +upstream because the changes are highly specific or proprietary. + +This chapter describes how to make such project-specific customizations +in Buildroot and how to store them in a way that you can build the same +image in a reproducible way, even after running 'make clean'. By +following the recommended strategy, you can even use the same Buildroot +tree to build multiple distinct projects! + +include::customize-directory-structure.txt[] + +include::customize-outside-br.txt[] + +include::customize-configuration.txt[] + +include::customize-rootfs.txt[] + +include::customize-users-tables.txt[] + +include::customize-post-image.txt[] + +include::customize-patches.txt[] + +include::customize-packages.txt[] + +include::customize-quick-guide.txt[] diff --git a/docs/manual/debugging-buildroot.txt b/docs/manual/debugging-buildroot.txt new file mode 100644 index 00000000..f575fc48 --- /dev/null +++ b/docs/manual/debugging-buildroot.txt @@ -0,0 +1,43 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[debugging-buildroot]] + +== Debugging Buildroot + +It is possible to instrument the steps +Buildroot+ does when building +packages. Define the variable +BR2_INSTRUMENTATION_SCRIPTS+ to contain +the path of one or more scripts (or other executables), in a +space-separated list, you want called before and after each step. The +scripts are called in sequence, with three parameters: + + - +start+ or +end+ to denote the start (resp. the end) of a step; + - the name of the step about to be started, or which just ended; + - the name of the package. + +For example : + +---- +make BR2_INSTRUMENTATION_SCRIPTS="/path/to/my/script1 /path/to/my/script2" +---- + +The list of steps is: + + - +extract+ + - +patch+ + - +configure+ + - +build+ + - +install-host+, when a host-package is installed in +$(HOST_DIR)+ + - +install-target+, when a target-package is installed in +$(TARGET_DIR)+ + - +install-staging+, when a target-package is installed in +$(STAGING_DIR)+ + - +install-image+, when a target-package installs files in +$(BINARIES_DIR)+ + +The script has access to the following variables: + + - +BR2_CONFIG+: the path to the Buildroot .config file + - +HOST_DIR+, +STAGING_DIR+, +TARGET_DIR+: see + xref:generic-package-reference[] + - +BUILD_DIR+: the directory where packages are extracted and built + - +BINARIES_DIR+: the place where all binary files (aka images) are + stored + - +BASE_DIR+: the base output directory diff --git a/docs/manual/developers.txt b/docs/manual/developers.txt new file mode 100644 index 00000000..7058d57b --- /dev/null +++ b/docs/manual/developers.txt @@ -0,0 +1,49 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[DEVELOPERS]] +== DEVELOPERS file and get-developers + +The main Buildroot directory contains a file named +DEVELOPERS+ that +lists the developers involved with various areas of Buildroot. Thanks +to this file, the +get-developers+ tool allows to: + +- Calculate the list of developers to whom patches should be sent, by + parsing the patches and matching the modified files with the + relevant developers. See xref:submitting-patches[] for details. + +- Find which developers are taking care of a given architecture or + package, so that they can be notified when a build failure occurs on + this architecture or package. This is done in interaction with + Buildroot's autobuild infrastructure. + +We ask developers adding new packages, new boards, or generally new +functionality in Buildroot, to register themselves in the +DEVELOPERS+ +file. As an example, we expect a developer contributing a new package +to include in his patch the appropriate modification to the ++DEVELOPERS+ file. + +The +DEVELOPERS+ file format is documented in detail inside the file +itself. + +The +get-developers+ tool, located in +utils/+ allows to use +the +DEVELOPERS+ file for various tasks: + +- When passing one or several patches as command line argument, + +get-developers+ will return the appropriate +git send-email+ + command. If the +-e+ option is passed, only the email addresses are + printed in a format suitable for +git send-email --cc-cmd+. + +- When using the +-a + command line option, +get-developers+ will + return the list of developers in charge of the given architecture. + +- When using the +-p + command line option, +get-developers+ + will return the list of developers in charge of the given package. + +- When using the +-c+ command line option, +get-developers+ will look + at all files under version control in the Buildroot repository, and + list the ones that are not handled by any developer. The purpose of + this option is to help completing the +DEVELOPERS+ file. + +- When using without any arguments, it validates the integrity of the + DEVELOPERS file and will note WARNINGS for items that don't match. diff --git a/docs/manual/docbook-xsl.css b/docs/manual/docbook-xsl.css new file mode 100644 index 00000000..ee9ca46d --- /dev/null +++ b/docs/manual/docbook-xsl.css @@ -0,0 +1,329 @@ +/* + CSS stylesheet for XHTML produced by DocBook XSL stylesheets. +*/ + +body { + font-family: Georgia,serif; +} + +code, pre { + font-family: "Courier New", Courier, monospace; +} + +span.strong { + font-weight: bold; +} + +body blockquote { + margin-top: .75em; + line-height: 1.5; + margin-bottom: .75em; +} + +html body { + margin: 1em 5% 1em 5%; + line-height: 1.2; +} + +body div { + margin: 0; +} + +h1, h2, h3, h4, h5, h6 +{ + color: #527bbd; + font-family: Arial,Helvetica,sans-serif; +} + +div.toc p:first-child, +div.list-of-figures p:first-child, +div.list-of-tables p:first-child, +div.list-of-examples p:first-child, +div.example p.title, +div.sidebar p.title +{ + font-weight: bold; + color: #527bbd; + font-family: Arial,Helvetica,sans-serif; + margin-bottom: 0.2em; +} + +body h1 { + margin: .0em 0 0 -4%; + line-height: 1.3; + border-bottom: 2px solid silver; +} + +body h2 { + margin: 0.5em 0 0 -4%; + line-height: 1.3; + border-bottom: 2px solid silver; +} + +body h3 { + margin: .8em 0 0 -3%; + line-height: 1.3; +} + +body h4 { + margin: .8em 0 0 -3%; + line-height: 1.3; +} + +body h5 { + margin: .8em 0 0 -2%; + line-height: 1.3; +} + +body h6 { + margin: .8em 0 0 -1%; + line-height: 1.3; +} + +body hr { + border: none; /* Broken on IE6 */ +} +div.footnotes hr { + border: 1px solid silver; +} + +div.navheader th, div.navheader td, div.navfooter td { + font-family: Arial,Helvetica,sans-serif; + font-size: 0.9em; + font-weight: bold; + color: #527bbd; +} +div.navheader img, div.navfooter img { + border-style: none; +} +div.navheader a, div.navfooter a { + font-weight: normal; +} +div.navfooter hr { + border: 1px solid silver; +} + +body td { + line-height: 1.2 +} + +body th { + line-height: 1.2; +} + +ol { + line-height: 1.2; +} + +ul, body dir, body menu { + line-height: 1.2; +} + +html { + margin: 0; + padding: 0; +} + +body h1, body h2, body h3, body h4, body h5, body h6 { + margin-left: 0 +} + +body pre { + margin: 0.5em 10% 0.5em 1em; + line-height: 1.0; + color: navy; +} + +tt.literal, code.literal { + color: navy; +} + +.programlisting, .screen { + border: 1px solid silver; + background: #f4f4f4; + margin: 0.5em 10% 0.5em 0; + padding: 0.5em 1em; +} + +div.sidebar { + background: #ffffee; + margin: 1.0em 10% 0.5em 0; + padding: 0.5em 1em; + border: 1px solid silver; +} +div.sidebar * { padding: 0; } +div.sidebar div { margin: 0; } +div.sidebar p.title { + margin-top: 0.5em; + margin-bottom: 0.2em; +} + +div.bibliomixed { + margin: 0.5em 5% 0.5em 1em; +} + +div.glossary dt { + font-weight: bold; +} +div.glossary dd p { + margin-top: 0.2em; +} + +dl { + margin: .8em 0; + line-height: 1.2; +} + +dt { + margin-top: 0.5em; +} + +dt span.term { + font-style: normal; + color: navy; +} + +div.variablelist dd p { + margin-top: 0; +} + +div.itemizedlist li, div.orderedlist li { + margin-left: -0.8em; + margin-top: 0.5em; +} + +ul, ol { + list-style-position: outside; +} + +div.sidebar ul, div.sidebar ol { + margin-left: 2.8em; +} + +div.itemizedlist p.title, +div.orderedlist p.title, +div.variablelist p.title +{ + margin-bottom: -0.8em; +} + +div.revhistory table { + border-collapse: collapse; + border: none; +} +div.revhistory th { + border: none; + color: #527bbd; + font-family: Arial,Helvetica,sans-serif; +} +div.revhistory td { + border: 1px solid silver; +} + +/* Keep TOC and index lines close together. */ +div.toc dl, div.toc dt, +div.list-of-figures dl, div.list-of-figures dt, +div.list-of-tables dl, div.list-of-tables dt, +div.indexdiv dl, div.indexdiv dt +{ + line-height: normal; + margin-top: 0; + margin-bottom: 0; +} + +/* + Table styling does not work because of overriding attributes in + generated HTML. +*/ +div.table table, +div.informaltable table +{ + margin-left: 0; + margin-right: 5%; + margin-bottom: 0.8em; +} +div.informaltable table +{ + margin-top: 0.4em +} +div.table thead, +div.table tfoot, +div.table tbody, +div.informaltable thead, +div.informaltable tfoot, +div.informaltable tbody +{ + /* No effect in IE6. */ + border-top: 3px solid #527bbd; + border-bottom: 3px solid #527bbd; +} +div.table thead, div.table tfoot, +div.informaltable thead, div.informaltable tfoot +{ + font-weight: bold; +} + +div.mediaobject img { + margin-bottom: 0.8em; +} +div.figure p.title, +div.table p.title +{ + margin-top: 1em; + margin-bottom: 0.4em; +} + +div.calloutlist p +{ + margin-top: 0em; + margin-bottom: 0.4em; +} + +a img { + border-style: none; +} + +@media print { + div.navheader, div.navfooter { display: none; } +} + +span.aqua { color: aqua; } +span.black { color: black; } +span.blue { color: blue; } +span.fuchsia { color: fuchsia; } +span.gray { color: gray; } +span.green { color: green; } +span.lime { color: lime; } +span.maroon { color: maroon; } +span.navy { color: navy; } +span.olive { color: olive; } +span.purple { color: purple; } +span.red { color: red; } +span.silver { color: silver; } +span.teal { color: teal; } +span.white { color: white; } +span.yellow { color: yellow; } + +span.aqua-background { background: aqua; } +span.black-background { background: black; } +span.blue-background { background: blue; } +span.fuchsia-background { background: fuchsia; } +span.gray-background { background: gray; } +span.green-background { background: green; } +span.lime-background { background: lime; } +span.maroon-background { background: maroon; } +span.navy-background { background: navy; } +span.olive-background { background: olive; } +span.purple-background { background: purple; } +span.red-background { background: red; } +span.silver-background { background: silver; } +span.teal-background { background: teal; } +span.white-background { background: white; } +span.yellow-background { background: yellow; } + +span.big { font-size: 2em; } +span.small { font-size: 0.6em; } + +span.underline { text-decoration: underline; } +span.overline { text-decoration: overline; } +span.line-through { text-decoration: line-through; } diff --git a/docs/manual/download-infra.txt b/docs/manual/download-infra.txt new file mode 100644 index 00000000..f2ccd149 --- /dev/null +++ b/docs/manual/download-infra.txt @@ -0,0 +1,8 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[download-infra]] + +== Download infrastructure + +TODO diff --git a/docs/manual/download-location.txt b/docs/manual/download-location.txt new file mode 100644 index 00000000..d485df94 --- /dev/null +++ b/docs/manual/download-location.txt @@ -0,0 +1,27 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[download-location]] + +==== Location of downloaded packages + +The various tarballs that are downloaded by Buildroot are all stored +in +BR2_DL_DIR+, which by default is the +dl+ directory. If you want +to keep a complete version of Buildroot which is known to be working +with the associated tarballs, you can make a copy of this directory. +This will allow you to regenerate the toolchain and the target +filesystem with exactly the same versions. + +If you maintain several Buildroot trees, it might be better to have a +shared download location. This can be achieved by pointing the ++BR2_DL_DIR+ environment variable to a directory. If this is +set, then the value of +BR2_DL_DIR+ in the Buildroot configuration is +overridden. The following line should be added to +<~/.bashrc>+. + +----------------- + export BR2_DL_DIR= +----------------- + +The download location can also be set in the +.config+ file, with the ++BR2_DL_DIR+ option. Unlike most options in the .config file, this value +is overridden by the +BR2_DL_DIR+ environment variable. diff --git a/docs/manual/eclipse-integration.txt b/docs/manual/eclipse-integration.txt new file mode 100644 index 00000000..1f726d82 --- /dev/null +++ b/docs/manual/eclipse-integration.txt @@ -0,0 +1,30 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +=== Integration with Eclipse + +While a part of the embedded Linux developers like classical text +editors like Vim or Emacs, and command-line based interfaces, a number +of other embedded Linux developers like richer graphical interfaces to +do their development work. Eclipse being one of the most popular +Integrated Development Environment, Buildroot integrates with Eclipse +in order to ease the development work of Eclipse users. + +Our integration with Eclipse simplifies the compilation, remote +execution and remote debugging of applications and libraries that are +built on top of a Buildroot system. It does not integrate the +Buildroot configuration and build processes themselves with +Eclipse. Therefore, the typical usage model of our Eclipse integration +would be: + +* Configure your Buildroot system with +make menuconfig+, +make + xconfig+ or any other configuration interface provided with + Buildroot. +* Build your Buildroot system by running +make+. +* Start Eclipse to develop, execute and debug your own custom + applications and libraries, that will rely on the libraries built + and installed by Buildroot. + +The Buildroot Eclipse integration installation process and usage is +described in detail at +https://github.com/mbats/eclipse-buildroot-bundle/wiki. diff --git a/docs/manual/faq-troubleshooting.txt b/docs/manual/faq-troubleshooting.txt new file mode 100644 index 00000000..5adf3fa6 --- /dev/null +++ b/docs/manual/faq-troubleshooting.txt @@ -0,0 +1,244 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +== Frequently Asked Questions & Troubleshooting + +[[faq-boot-hang-after-starting]] +=== The boot hangs after 'Starting network...' + +If the boot process seems to hang after the following messages +(messages not necessarily exactly similar, depending on the list of +packages selected): + +------------------------ +Freeing init memory: 3972K +Initializing random number generator... done. +Starting network... +Starting dropbear sshd: generating rsa key... generating dsa key... OK +------------------------ + +then it means that your system is running, but didn't start a shell on +the serial console. In order to have the system start a shell on your +serial console, you have to go into the Buildroot configuration, in ++System configuration+, modify +Run a getty (login prompt) after boot+ +and set the appropriate port and baud rate in the +getty options+ +submenu. This will automatically tune the +/etc/inittab+ file of the +generated system so that a shell starts on the correct serial port. + +[[faq-no-compiler-on-target]] +=== Why is there no compiler on the target? + +It has been decided that support for the _native compiler on the +target_ would be stopped from the Buildroot-2012.11 release because: + +* this feature was neither maintained nor tested, and often broken; +* this feature was only available for Buildroot toolchains; +* Buildroot mostly targets _small_ or _very small_ target hardware + with limited resource onboard (CPU, ram, mass-storage), for which + compiling on the target does not make much sense; +* Buildroot aims at easing the cross-compilation, making native + compilation on the target unnecessary. + +If you need a compiler on your target anyway, then Buildroot is not +suitable for your purpose. In such case, you need a _real +distribution_ and you should opt for something like: + +* http://www.openembedded.org[openembedded] +* https://www.yoctoproject.org[yocto] +* http://www.emdebian.org[emdebian] +* https://fedoraproject.org/wiki/Architectures[Fedora] +* http://en.opensuse.org/Portal:ARM[openSUSE ARM] +* http://archlinuxarm.org[Arch Linux ARM] +* ... + +[[faq-no-dev-files-on-target]] +=== Why are there no development files on the target? + +Since there is no compiler available on the target (see +xref:faq-no-compiler-on-target[]), it does not make sense to waste +space with headers or static libraries. + +Therefore, those files are always removed from the target since the +Buildroot-2012.11 release. + +[[faq-no-doc-on-target]] +=== Why is there no documentation on the target? + +Because Buildroot mostly targets _small_ or _very small_ target +hardware with limited resource onboard (CPU, ram, mass-storage), it +does not make sense to waste space with the documentation data. + +If you need documentation data on your target anyway, then Buildroot +is not suitable for your purpose, and you should look for a _real +distribution_ (see: xref:faq-no-compiler-on-target[]). + +[[faq-why-not-visible-package]] +=== Why are some packages not visible in the Buildroot config menu? + +If a package exists in the Buildroot tree and does not appear in the +config menu, this most likely means that some of the package's +dependencies are not met. + +To know more about the dependencies of a package, search for the +package symbol in the config menu (see xref:make-tips[]). + +Then, you may have to recursively enable several options (which +correspond to the unmet dependencies) to finally be able to select +the package. + +If the package is not visible due to some unmet toolchain options, +then you should certainly run a full rebuild (see xref:make-tips[] for +more explanations). + +[[faq-why-not-use-target-as-chroot]] +=== Why not use the target directory as a chroot directory? + +There are plenty of reasons to *not* use the target directory a chroot +one, among these: + +* file ownerships, modes and permissions are not correctly set in the + target directory; +* device nodes are not created in the target directory. + +For these reasons, commands run through chroot, using the target +directory as the new root, will most likely fail. + +If you want to run the target filesystem inside a chroot, or as an NFS +root, then use the tarball image generated in +images/+ and extract it +as root. + +[[faq-no-binary-packages]] +=== Why doesn't Buildroot generate binary packages (.deb, .ipkg...)? + +One feature that is often discussed on the Buildroot list is the +general topic of "package management". To summarize, the idea +would be to add some tracking of which Buildroot package installs +what files, with the goals of: + + * being able to remove files installed by a package when this package + gets unselected from the menuconfig; + + * being able to generate binary packages (ipk or other format) that + can be installed on the target without re-generating a new root + filesystem image. + +In general, most people think it is easy to do: just track which package +installed what and remove it when the package is unselected. However, it +is much more complicated than that: + + * It is not only about the +target/+ directory, but also the sysroot in + +host//sysroot+ and the +host/+ directory itself. All files + installed in those directories by various packages must be tracked. + + * When a package is unselected from the configuration, it is not + sufficient to remove just the files it installed. One must also + remove all its reverse dependencies (i.e. packages relying on it) + and rebuild all those packages. For example, package A depends + optionally on the OpenSSL library. Both are selected, and Buildroot + is built. Package A is built with crypto support using OpenSSL. + Later on, OpenSSL gets unselected from the configuration, but + package A remains (since OpenSSL is an optional dependency, this + is possible.) If only OpenSSL files are removed, then the files + installed by package A are broken: they use a library that is no + longer present on the target. Although this is technically doable, + it adds a lot of complexity to Buildroot, which goes against the + simplicity we try to stick to. + + * In addition to the previous problem, there is the case where the + optional dependency is not even known to Buildroot. For example, + package A in version 1.0 never used OpenSSL, but in version 2.0 it + automatically uses OpenSSL if available. If the Buildroot .mk file + hasn't been updated to take this into account, then package A will + not be part of the reverse dependencies of OpenSSL and will not be + removed and rebuilt when OpenSSL is removed. For sure, the .mk file + of package A should be fixed to mention this optional dependency, + but in the mean time, you can have non-reproducible behaviors. + + * The request is to also allow changes in the menuconfig to be + applied on the output directory without having to rebuild + everything from scratch. However, this is very difficult to achieve + in a reliable way: what happens when the suboptions of a package + are changed (we would have to detect this, and rebuild the package + from scratch and potentially all its reverse dependencies), what + happens if toolchain options are changed, etc. At the moment, what + Buildroot does is clear and simple so its behaviour is very + reliable and it is easy to support users. If configuration changes + done in menuconfig are applied after the next make, then it has to + work correctly and properly in all situations, and not have some + bizarre corner cases. The risk is to get bug reports like "I have + enabled package A, B and C, then ran make, then disabled package + C and enabled package D and ran make, then re-enabled package C + and enabled package E and then there is a build failure". Or worse + "I did some configuration, then built, then did some changes, + built, some more changes, built, some more changes, built, and now + it fails, but I don't remember all the changes I did and in which + order". This will be impossible to support. + +For all these reasons, the conclusion is that adding tracking of +installed files to remove them when the package is unselected, or to +generate a repository of binary packages, is something that is very +hard to achieve reliably and will add a lot of complexity. + +On this matter, the Buildroot developers make this position statement: + + * Buildroot strives to make it easy to generate a root filesystem (hence + the name, by the way.) That is what we want to make Buildroot good at: + building root filesystems. + + * Buildroot is not meant to be a distribution (or rather, a distribution + generator.) It is the opinion of most Buildroot developers that this + is not a goal we should pursue. We believe that there are other tools + better suited to generate a distro than Buildroot is. For example, + http://openembedded.org/[Open Embedded], or https://openwrt.org/[openWRT], + are such tools. + + * We prefer to push Buildroot in a direction that makes it easy (or even + easier) to generate complete root filesystems. This is what makes + Buildroot stands out in the crowd (among other things, of course!) + + * We believe that for most embedded Linux systems, binary packages are + not necessary, and potentially harmful. When binary packages are + used, it means that the system can be partially upgraded, which + creates an enormous number of possible combinations of package + versions that should be tested before doing the upgrade on the + embedded device. On the other hand, by doing complete system + upgrades by upgrading the entire root filesystem image at once, + the image deployed to the embedded system is guaranteed to really + be the one that has been tested and validated. + +[[faq-speeding-up-build]] +=== How to speed-up the build process? + +Since Buildroot often involves doing full rebuilds of the entire +system that can be quite long, we provide below a number of tips to +help reduce the build time: + + * Use a pre-built external toolchain instead of the default Buildroot + internal toolchain. By using a pre-built Linaro toolchain (on ARM) + or a Sourcery CodeBench toolchain (for ARM, x86, x86-64, MIPS, + etc.), you will save the build time of the toolchain at each + complete rebuild, approximately 15 to 20 minutes. Note that + temporarily using an external toolchain does not prevent you to + switch back to an internal toolchain (that may provide a higher + level of customization) once the rest of your system is working; + + * Use the +ccache+ compiler cache (see: xref:ccache[]); + + * Learn about rebuilding only the few packages you actually care + about (see xref:rebuild-pkg[]), but beware that sometimes full + rebuilds are anyway necessary (see xref:full-rebuild[]); + + * Make sure you are not using a virtual machine for the Linux system + used to run Buildroot. Most of the virtual machine technologies are + known to cause a significant performance impact on I/O, which is + really important for building source code; + + * Make sure that you're using only local files: do not attempt to do + a build over NFS, which significantly slows down the build. Having + the Buildroot download folder available locally also helps a bit. + + * Buy new hardware. SSDs and lots of RAM are key to speeding up the + builds. + + * Experiment with top-level parallel build, see + xref:top-level-parallel-build[]. diff --git a/docs/manual/getting.txt b/docs/manual/getting.txt new file mode 100644 index 00000000..549938a2 --- /dev/null +++ b/docs/manual/getting.txt @@ -0,0 +1,36 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[getting-buildroot]] +== Getting Buildroot + +Buildroot releases are made every 3 months, in February, May, August and +November. Release numbers are in the format YYYY.MM, so for example +2013.02, 2014.08. + +Release tarballs are available at http://buildroot.org/downloads/[]. + +For your convenience, a https://www.vagrantup.com/[Vagrantfile] is +available in `support/misc/Vagrantfile` in the Buildroot source tree +to quickly set up a virtual machine with the needed dependencies to +get started. + +If you want to setup an isolated buildroot environment on Linux or Mac +Os X, paste this line onto your terminal: + +-------------------- +curl -O https://buildroot.org/downloads/Vagrantfile; vagrant up +-------------------- + +If you are on Windows, paste this into your powershell: + +-------------------- +(new-object System.Net.WebClient).DownloadFile( +"https://buildroot.org/downloads/Vagrantfile","Vagrantfile"); +vagrant up +-------------------- + +If you want to follow development, you can use the daily snapshots or +make a clone of the Git repository. Refer to the +http://buildroot.org/download[Download page] of the Buildroot website +for more details. diff --git a/docs/manual/github_hash_mongrel2.png b/docs/manual/github_hash_mongrel2.png new file mode 100644 index 00000000..c695c318 Binary files /dev/null and b/docs/manual/github_hash_mongrel2.png differ diff --git a/docs/manual/how-buildroot-works.txt b/docs/manual/how-buildroot-works.txt new file mode 100644 index 00000000..1204d1ec --- /dev/null +++ b/docs/manual/how-buildroot-works.txt @@ -0,0 +1,69 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +== How Buildroot works + +As mentioned above, Buildroot is basically a set of Makefiles that +download, configure, and compile software with the correct options. It +also includes patches for various software packages - mainly the ones +involved in the cross-compilation toolchain (+gcc+, +binutils+ and ++uClibc+). + +There is basically one Makefile per software package, and they are +named with the +.mk+ extension. Makefiles are split into many different +parts. + +* The +toolchain/+ directory contains the Makefiles + and associated files for all software related to the + cross-compilation toolchain: +binutils+, +gcc+, +gdb+, + +kernel-headers+ and +uClibc+. + +* The +arch/+ directory contains the definitions for all the processor + architectures that are supported by Buildroot. + +* The +package/+ directory contains the Makefiles and + associated files for all user-space tools and libraries that Buildroot + can compile and add to the target root filesystem. There is one + sub-directory per package. + +* The +linux/+ directory contains the Makefiles and associated files for + the Linux kernel. + +* The +boot/+ directory contains the Makefiles and associated files for + the bootloaders supported by Buildroot. + +* The +system/+ directory contains support for system integration, e.g. + the target filesystem skeleton and the selection of an init system. + +* The +fs/+ directory contains the Makefiles and + associated files for software related to the generation of the + target root filesystem image. + +Each directory contains at least 2 files: + +* +something.mk+ is the Makefile that downloads, configures, + compiles and installs the package +something+. + +* +Config.in+ is a part of the configuration tool + description file. It describes the options related to the + package. + +The main Makefile performs the following steps (once the +configuration is done): + +* Create all the output directories: +staging+, +target+, +build+, + etc. in the output directory (+output/+ by default, + another value can be specified using +O=+) + +* Generate the toolchain target. When an internal toolchain is used, this + means generating the cross-compilation toolchain. When an external + toolchain is used, this means checking the features of the external + toolchain and importing it into the Buildroot environment. + +* Generate all the targets listed in the +TARGETS+ variable. This + variable is filled by all the individual components' + Makefiles. Generating these targets will trigger the compilation of + the userspace packages (libraries, programs), the kernel, the + bootloader and the generation of the root filesystem images, + depending on the configuration. + diff --git a/docs/manual/introduction.txt b/docs/manual/introduction.txt new file mode 100644 index 00000000..476aa81e --- /dev/null +++ b/docs/manual/introduction.txt @@ -0,0 +1,26 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +== About Buildroot + +Buildroot is a tool that simplifies and automates the process of +building a complete Linux system for an embedded system, using +cross-compilation. + +In order to achieve this, Buildroot is able to generate a +cross-compilation toolchain, a root filesystem, a Linux kernel image +and a bootloader for your target. Buildroot can be used for any +combination of these options, independently (you can for example use +an existing cross-compilation toolchain, and build only your root +filesystem with Buildroot). + +Buildroot is useful mainly for people working with embedded systems. +Embedded systems often use processors that are not the regular x86 +processors everyone is used to having in his PC. They can be PowerPC +processors, MIPS processors, ARM processors, etc. + +Buildroot supports numerous processors and their variants; it also +comes with default configurations for several boards available +off-the-shelf. Besides this, a number of third-party projects are based on, +or develop their BSP footnote:[BSP: Board Support Package] or +SDK footnote:[SDK: Software Development Kit] on top of Buildroot. diff --git a/docs/manual/known-issues.txt b/docs/manual/known-issues.txt new file mode 100644 index 00000000..ae29a48b --- /dev/null +++ b/docs/manual/known-issues.txt @@ -0,0 +1,15 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +== Known issues + +* It is not possible to pass extra linker options via +BR2_TARGET_LDFLAGS+ + if such options contain a +$+ sign. For example, the following is known + to break: +BR2_TARGET_LDFLAGS="-Wl,-rpath=\'$ORIGIN/../lib'"+ + +* The +libffi+ package is not supported on the SuperH 2 and ARC + architectures. + +* The +prboom+ package triggers a compiler failure with the SuperH 4 + compiler from Sourcery CodeBench, version 2012.09. + diff --git a/docs/manual/legal-notice.txt b/docs/manual/legal-notice.txt new file mode 100644 index 00000000..179aa6b1 --- /dev/null +++ b/docs/manual/legal-notice.txt @@ -0,0 +1,122 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[legal-info]] + +== Legal notice and licensing + +=== Complying with open source licenses + +All of the end products of Buildroot (toolchain, root filesystem, kernel, +bootloaders) contain open source software, released under various licenses. + +Using open source software gives you the freedom to build rich embedded +systems, choosing from a wide range of packages, but also imposes some +obligations that you must know and honour. +Some licenses require you to publish the license text in the documentation of +your product. Others require you to redistribute the source code of the +software to those that receive your product. + +The exact requirements of each license are documented in each package, and +it is your responsibility (or that of your legal office) to comply with those +requirements. +To make this easier for you, Buildroot can collect for you some material you +will probably need. To produce this material, after you have configured +Buildroot with +make menuconfig+, +make xconfig+ or +make gconfig+, run: + +-------------------- +make legal-info +-------------------- + +Buildroot will collect legally-relevant material in your output directory, +under the +legal-info/+ subdirectory. +There you will find: + +* A +README+ file, that summarizes the produced material and contains warnings + about material that Buildroot could not produce. +* +buildroot.config+: this is the Buildroot configuration file that is usually + produced with +make menuconfig+, and which is necessary to reproduce the + build. +* The source code for all packages; this is saved in the +sources/+ and + +host-sources/+ subdirectories for target and host packages respectively. + The source code for packages that set +_REDISTRIBUTE = NO+ will not be + saved. + Patches that were applied are also saved, along with a file named +series+ + that lists the patches in the order they were applied. Patches are under the + same license as the files that they modify. + Note: Buildroot applies additional patches to Libtool scripts of + autotools-based packages. These patches can be found under + +support/libtool+ in the Buildroot source and, due to technical + limitations, are not saved with the package sources. You may need to + collect them manually. +* A manifest file (one for host and one for target packages) listing the + configured packages, their version, license and related information. + Some of this information might not be defined in Buildroot; such items are + marked as "unknown". +* The license texts of all packages, in the +licenses/+ and +host-licenses/+ + subdirectories for target and host packages respectively. + If the license file(s) are not defined in Buildroot, the file is not produced + and a warning in the +README+ indicates this. + +Please note that the aim of the +legal-info+ feature of Buildroot is to +produce all the material that is somehow relevant for legal compliance with the +package licenses. Buildroot does not try to produce the exact material that +you must somehow make public. Certainly, more material is produced than is +needed for a strict legal compliance. For example, it produces the source code +for packages released under BSD-like licenses, that you are not required to +redistribute in source form. + +Moreover, due to technical limitations, Buildroot does not produce some +material that you will or may need, such as the toolchain source code for +some of the external toolchains and the Buildroot source code itself. +When you run +make legal-info+, Buildroot produces warnings in the +README+ +file to inform you of relevant material that could not be saved. + +Finally, keep in mind that the output of +make legal-info+ is based on +declarative statements in each of the packages recipes. The Buildroot +developers try to do their best to keep those declarative statements as +accurate as possible, to the best of their knowledge. However, it is very +well possible that those declarative statements are not all fully accurate +nor exhaustive. You (or your legal department) _have_ to check the output +of +make legal-info+ before using it as your own compliance delivery. See +the _NO WARRANTY_ clauses (clauses 11 and 12) in the +COPYING+ file at the +root of the Buildroot distribution. + +[[legal-info-buildroot]] +=== Complying with the Buildroot license + +Buildroot itself is an open source software, released under the +http://www.gnu.org/licenses/old-licenses/gpl-2.0.html[GNU General +Public License, version 2] or (at your option) any later version, with +the exception of the package patches detailed below. +However, being a build system, it is not normally part of the end product: +if you develop the root filesystem, kernel, bootloader or toolchain for a +device, the code of Buildroot is only present on the development machine, not +in the device storage. + +Nevertheless, the general view of the Buildroot developers is that you should +release the Buildroot source code along with the source code of other packages +when releasing a product that contains GPL-licensed software. +This is because the +http://www.gnu.org/licenses/old-licenses/gpl-2.0.html[GNU GPL] +defines the "'complete source code'" for an executable work as "'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'". +Buildroot is part of the 'scripts used to control compilation and +installation of the executable', and as such it is considered part of the +material that must be redistributed. + +Keep in mind that this is only the Buildroot developers' opinion, and you +should consult your legal department or lawyer in case of any doubt. + +==== Patches to packages + +Buildroot also bundles patch files, which are applied to the sources +of the various packages. Those patches are not covered by the license +of Buildroot. Instead, they are covered by the license of the software +to which the patches are applied. When said software is available +under multiple licenses, the Buildroot patches are only provided under +the publicly accessible licenses. + +See xref:patch-policy[] for the technical details. diff --git a/docs/manual/logo.png b/docs/manual/logo.png new file mode 100644 index 00000000..2db743b4 Binary files /dev/null and b/docs/manual/logo.png differ diff --git a/docs/manual/make-tips.txt b/docs/manual/make-tips.txt new file mode 100644 index 00000000..869b6807 --- /dev/null +++ b/docs/manual/make-tips.txt @@ -0,0 +1,133 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[make-tips]] +=== 'make' tips + +This is a collection of tips that help you make the most of Buildroot. + +.Display all commands executed by make: + +-------------------- + $ make V=1 +-------------------- + +.Display the list of boards with a defconfig: + +-------------------- + $ make list-defconfigs +-------------------- + +.Display all available targets: + +-------------------- + $ make help +-------------------- + +Not all targets are always available, +some settings in the +.config+ file may hide some targets: + +* +busybox-menuconfig+ only works when +busybox+ is enabled; +* +linux-menuconfig+ and +linux-savedefconfig+ only work when + +linux+ is enabled; +* +uclibc-menuconfig+ is only available when the uClibc C library is + selected in the internal toolchain backend; +* +barebox-menuconfig+ and +barebox-savedefconfig+ only work when the + +barebox+ bootloader is enabled. +* +uboot-menuconfig+ and +uboot-savedefconfig+ only work when the + +U-Boot+ bootloader is enabled. + +.Cleaning: + +Explicit cleaning is required when any of the architecture or toolchain +configuration options are changed. + +To delete all build products (including build directories, host, staging +and target trees, the images and the toolchain): + +-------------------- + $ make clean +-------------------- + +.Generating the manual: + +The present manual sources are located in the 'docs/manual' directory. +To generate the manual: + +--------------------------------- + $ make manual-clean + $ make manual +--------------------------------- + +The manual outputs will be generated in 'output/docs/manual'. + +.Notes +- A few tools are required to build the documentation (see: + xref:requirement-optional[]). + +.Resetting Buildroot for a new target: + +To delete all build products as well as the configuration: + +-------------------- + $ make distclean +-------------------- + +.Notes +If +ccache+ is enabled, running +make clean+ or +distclean+ does +not empty the compiler cache used by Buildroot. To delete it, refer +to xref:ccache[]. + +.Dumping the internal make variables: + +One can dump the variables known to make, along with their values: + +---- + $ make -s printvars VARS='VARIABLE1 VARIABLE2' + VARIABLE1=value_of_variable + VARIABLE2=value_of_variable +---- + +It is possible to tweak the output using some variables: + +- +VARS+ will limit the listing to variables which names match the + specified make-patterns - this must be set else nothing is printed +- +QUOTED_VARS+, if set to +YES+, will single-quote the value +- +RAW_VARS+, if set to +YES+, will print the unexpanded value + +For example: + +---- + $ make -s printvars VARS=BUSYBOX_%DEPENDENCIES + BUSYBOX_DEPENDENCIES=skeleton toolchain + BUSYBOX_FINAL_ALL_DEPENDENCIES=skeleton toolchain + BUSYBOX_FINAL_DEPENDENCIES=skeleton toolchain + BUSYBOX_FINAL_PATCH_DEPENDENCIES= + BUSYBOX_RDEPENDENCIES=ncurses util-linux +---- + +---- + $ make -s printvars VARS=BUSYBOX_%DEPENDENCIES QUOTED_VARS=YES + BUSYBOX_DEPENDENCIES='skeleton toolchain' + BUSYBOX_FINAL_ALL_DEPENDENCIES='skeleton toolchain' + BUSYBOX_FINAL_DEPENDENCIES='skeleton toolchain' + BUSYBOX_FINAL_PATCH_DEPENDENCIES='' + BUSYBOX_RDEPENDENCIES='ncurses util-linux' +---- + +---- + $ make -s printvars VARS=BUSYBOX_%DEPENDENCIES RAW_VARS=YES + BUSYBOX_DEPENDENCIES=skeleton toolchain + BUSYBOX_FINAL_ALL_DEPENDENCIES=$(sort $(BUSYBOX_FINAL_DEPENDENCIES) $(BUSYBOX_FINAL_PATCH_DEPENDENCIES)) + BUSYBOX_FINAL_DEPENDENCIES=$(sort $(BUSYBOX_DEPENDENCIES)) + BUSYBOX_FINAL_PATCH_DEPENDENCIES=$(sort $(BUSYBOX_PATCH_DEPENDENCIES)) + BUSYBOX_RDEPENDENCIES=ncurses util-linux +---- + +The output of quoted variables can be reused in shell scripts, for example: + +---- + $ eval $(make -s printvars VARS=BUSYBOX_DEPENDENCIES QUOTED_VARS=YES) + $ echo $BUSYBOX_DEPENDENCIES + skeleton toolchain +---- diff --git a/docs/manual/makedev-syntax.txt b/docs/manual/makedev-syntax.txt new file mode 100644 index 00000000..d6efb31d --- /dev/null +++ b/docs/manual/makedev-syntax.txt @@ -0,0 +1,103 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[makedev-syntax]] +== Makedev syntax documentation + +The makedev syntax is used in several places in Buildroot to +define changes to be made for permissions, or which device files to +create and how to create them, in order to avoid calls to mknod. + +This syntax is derived from the makedev utility, and more complete +documentation can be found in the +package/makedevs/README+ file. + +It takes the form of a space separated list of fields, one file per +line; the fields are: + +|=========================================================== +|name |type |mode |uid |gid |major |minor |start |inc |count +|=========================================================== + +There are a few non-trivial blocks: + +- +name+ is the path to the file you want to create/modify +- +type+ is the type of the file, being one of: + * f: a regular file + * d: a directory + * r: a directory recursively + * c: a character device file + * b: a block device file + * p: a named pipe +- +mode+ are the usual permissions settings (only numerical values + are allowed) +- +uid+ and +gid+ are the UID and GID to set on this file; can be + either numerical values or actual names +- +major+ and +minor+ are here for device files, set to +-+ for other + files +- +start+, +inc+ and +count+ are for when you want to create a batch + of files, and can be reduced to a loop, beginning at +start+, + incrementing its counter by +inc+ until it reaches +count+ + +Let's say you want to change the permissions of a given file; using +this syntax, you will need to write: + +---- +/usr/bin/foo f 755 0 0 - - - - - +/usr/bin/bar f 755 root root - - - - - +/data/buz f 644 buz-user buz-group - - - - - +---- + +Alternatively, if you want to change owner/permission of a directory +recursively, you can write (to set UID to foo, GID to bar and access +rights to rwxr-x--- for the directory /usr/share/myapp and all files +and directories below it): + +---- +/usr/share/myapp r 750 foo bar - - - - - +---- + +On the other hand, if you want to create the device file +/dev/hda+ +and the corresponding 15 files for the partitions, you will need for ++/dev/hda+: + +---- +/dev/hda b 640 root root 3 0 0 0 - +---- + +and then for device files corresponding to the partitions of ++/dev/hda+, +/dev/hdaX+, +X+ ranging from 1 to 15: + +---- +/dev/hda b 640 root root 3 1 1 1 15 +---- + +Extended attributes are supported if ++BR2_ROOTFS_DEVICE_TABLE_SUPPORTS_EXTENDED_ATTRIBUTES+ is enabled. +This is done by adding a line starting with +|xattr+ after +the line describing the file. Right now, only capability +is supported as extended attribute. + +|===================== +| \|xattr | capability +|===================== + +- +|xattr+ is a "flag" that indicate an extended attribute +- +capability+ is a capability to add to the previous file + +If you want to add the capability cap_sys_admin to the binary foo, +you will write : + +---- +/usr/bin/foo f 755 root root - - - - - +|xattr cap_sys_admin+eip +---- + +You can add several capabilities to a file by using several +|xattr+ lines. +If you want to add the capability cap_sys_admin and cap_net_admin to the +binary foo, you will write : + +---- +/usr/bin/foo f 755 root root - - - - - +|xattr cap_sys_admin+eip +|xattr cap_net_admin+eip +---- diff --git a/docs/manual/makeusers-syntax.txt b/docs/manual/makeusers-syntax.txt new file mode 100644 index 00000000..467e5962 --- /dev/null +++ b/docs/manual/makeusers-syntax.txt @@ -0,0 +1,89 @@ +// -*- mode:doc -*- ; +// vim: set syntax=asciidoc: + +[[makeuser-syntax]] +== Makeusers syntax documentation + +The syntax to create users is inspired by the makedev syntax, above, but +is specific to Buildroot. + +The syntax for adding a user is a space-separated list of fields, one +user per line; the fields are: + +|================================================================= +|username |uid |group |gid |password |home |shell |groups |comment +|================================================================= + +Where: + +- +username+ is the desired user name (aka login name) for the user. + It can not be +root+, and must be unique. If set to +-+, then just a + group will be created. +- +uid+ is the desired UID for the user. It must be unique, and not + +0+. If set to +-1+, then a unique UID will be computed by Buildroot + in the range [1000...1999] +- +group+ is the desired name for the user's main group. It can not + be +root+. If the group does not exist, it will be created. +- +gid+ is the desired GID for the user's main group. It must be unique, + and not +0+. If set to +-1+, and the group does not already exist, then + a unique GID will be computed by Buildroot in the range [1000..1999] +- +password+ is the crypt(3)-encoded password. If prefixed with +!+, + then login is disabled. If prefixed with +=+, then it is interpreted + as clear-text, and will be crypt-encoded (using MD5). If prefixed with + +!=+, then the password will be crypt-encoded (using MD5) and login + will be disabled. If set to +*+, then login is not allowed. If set to + +-+, then no password value will be set. +- +home+ is the desired home directory for the user. If set to '-', no + home directory will be created, and the user's home will be +/+. + Explicitly setting +home+ to +/+ is not allowed. +- +shell+ is the desired shell for the user. If set to +-+, then + +/bin/false+ is set as the user's shell. +- +groups+ is the comma-separated list of additional groups the user + should be part of. If set to +-+, then the user will be a member of + no additional group. Missing groups will be created with an arbitrary + +gid+. +- +comment+ (aka https://en.wikipedia.org/wiki/Gecos_field[GECOS] + field) is an almost-free-form text. + +There are a few restrictions on the content of each field: + +* except for +comment+, all fields are mandatory. +* except for +comment+, fields may not contain spaces. +* no field may contain a colon (+:+). + +If +home+ is not +-+, then the home directory, and all files below, +will belong to the user and its main group. + +Examples: + +---- +foo -1 bar -1 !=blabla /home/foo /bin/sh alpha,bravo Foo user +---- + +This will create this user: + +- +username+ (aka login name) is: +foo+ +- +uid+ is computed by Buildroot +- main +group+ is: +bar+ +- main group +gid+ is computed by Buildroot +- clear-text +password+ is: +blabla+, will be crypt(3)-encoded, and login is disabled. +- +home+ is: +/home/foo+ +- +shell+ is: +/bin/sh+ +- +foo+ is also a member of +groups+: +alpha+ and +bravo+ +- +comment+ is: +Foo user+ + +---- +test 8000 wheel -1 = - /bin/sh - Test user +---- + +This will create this user: + +- +username+ (aka login name) is: +test+ +- +uid+ is : +8000+ +- main +group+ is: +wheel+ +- main group +gid+ is computed by Buildroot, and will use the value defined in the rootfs skeleton +- +password+ is empty (aka no password). +- +home+ is +/+ but will not belong to +test+ +- +shell+ is: +/bin/sh+ +- +test+ is not a member of any additional +groups+ +- +comment+ is: +Test user+ diff --git a/docs/manual/manual.html b/docs/manual/manual.html new file mode 100644 index 00000000..8919f2d5 --- /dev/null +++ b/docs/manual/manual.html @@ -0,0 +1,5866 @@ + +The Buildroot user manual

The Buildroot user manual


Table of Contents

I. Getting started
1. About Buildroot
2. System requirements
2.1. Mandatory packages
2.2. Optional packages
3. Getting Buildroot
4. Buildroot quick start
5. Community resources
II. User guide
6. Buildroot configuration
6.1. Cross-compilation toolchain
6.2. /dev management
6.3. init system
7. Configuration of other components
8. General Buildroot usage
8.1. make tips
8.2. Understanding when a full rebuild is necessary
8.3. Understanding how to rebuild packages
8.4. Offline builds
8.5. Building out-of-tree
8.6. Environment variables
8.7. Dealing efficiently with filesystem images
8.8. Details about packages
8.9. Graphing the dependencies between packages
8.10. Graphing the build duration
8.11. Graphing the filesystem size contribution of packages
8.12. Top-level parallel build
8.13. Integration with Eclipse
8.14. Advanced usage
9. Project-specific customization
9.1. Recommended directory structure
9.2. Keeping customizations outside of Buildroot
9.3. Storing the Buildroot configuration
9.4. Storing the configuration of other components
9.5. Customizing the generated target filesystem
9.6. Adding custom user accounts
9.7. Customization after the images have been created
9.8. Adding project-specific patches
9.9. Adding project-specific packages
9.10. Quick guide to storing your project-specific customizations
10. Using SELinux in Buildroot
10.1. Enabling SELinux support
10.2. SELinux policy tweaking
11. Frequently Asked Questions & Troubleshooting
11.1. The boot hangs after Starting network…
11.2. Why is there no compiler on the target?
11.3. Why are there no development files on the target?
11.4. Why is there no documentation on the target?
11.5. Why are some packages not visible in the Buildroot config menu?
11.6. Why not use the target directory as a chroot directory?
11.7. Why doesn’t Buildroot generate binary packages (.deb, .ipkg…)?
11.8. How to speed-up the build process?
12. Known issues
13. Legal notice and licensing
13.1. Complying with open source licenses
13.2. Complying with the Buildroot license
14. Beyond Buildroot
14.1. Boot the generated images
14.2. Chroot
III. Developer guide
15. How Buildroot works
16. Coding style
16.1. Config.in file
16.2. The .mk file
16.3. The documentation
16.4. Support scripts
17. Adding support for a particular board
18. Adding new packages to Buildroot
18.1. Package directory
18.2. Config files
18.3. The .mk file
18.4. The .hash file
18.5. Infrastructure for packages with specific build systems
18.6. Infrastructure for autotools-based packages
18.7. Infrastructure for CMake-based packages
18.8. Infrastructure for Python packages
18.9. Infrastructure for LuaRocks-based packages
18.10. Infrastructure for Perl/CPAN packages
18.11. Infrastructure for virtual packages
18.12. Infrastructure for packages using kconfig for configuration files
18.13. Infrastructure for rebar-based packages
18.14. Infrastructure for Waf-based packages
18.15. Infrastructure for Meson-based packages
18.16. Integration of Cargo-based packages
18.17. Infrastructure for Go packages
18.18. Infrastructure for QMake-based packages
18.19. Infrastructure for packages building kernel modules
18.20. Infrastructure for asciidoc documents
18.21. Infrastructure specific to the Linux kernel package
18.22. Hooks available in the various build steps
18.23. Gettext integration and interaction with packages
18.24. Tips and tricks
18.25. Conclusion
19. Patching a package
19.1. Providing patches
19.2. How patches are applied
19.3. Format and licensing of the package patches
19.4. Integrating patches found on the Web
20. Download infrastructure
21. Debugging Buildroot
22. Contributing to Buildroot
22.1. Reproducing, analyzing and fixing bugs
22.2. Analyzing and fixing autobuild failures
22.3. Reviewing and testing patches
22.4. Work on items from the TODO list
22.5. Submitting patches
22.6. Reporting issues/bugs or getting help
22.7. Using the run-tests framework
23. DEVELOPERS file and get-developers
24. Release Engineering
24.1. Releases
24.2. Development
IV. Appendix
25. Makedev syntax documentation
26. Makeusers syntax documentation
27. Migrating from older Buildroot versions
27.1. Migrating to 2016.11
27.2. Migrating to 2017.08

Buildroot 2021.02.4 manual generated on 2021-08-10 +20:33:48 UTC from git revision 004a792dcf

The Buildroot manual is written by the Buildroot developers. +It is licensed under the GNU General Public License, version 2. Refer to the +COPYING +file in the Buildroot sources for the full text of this license.

Copyright © 2004-2020 The Buildroot developers

logo.png

Part I. Getting started

Chapter 1. About Buildroot

Buildroot is a tool that simplifies and automates the process of +building a complete Linux system for an embedded system, using +cross-compilation.

In order to achieve this, Buildroot is able to generate a +cross-compilation toolchain, a root filesystem, a Linux kernel image +and a bootloader for your target. Buildroot can be used for any +combination of these options, independently (you can for example use +an existing cross-compilation toolchain, and build only your root +filesystem with Buildroot).

Buildroot is useful mainly for people working with embedded systems. +Embedded systems often use processors that are not the regular x86 +processors everyone is used to having in his PC. They can be PowerPC +processors, MIPS processors, ARM processors, etc.

Buildroot supports numerous processors and their variants; it also +comes with default configurations for several boards available +off-the-shelf. Besides this, a number of third-party projects are based on, +or develop their BSP [1] or +SDK [2] on top of Buildroot.



[1] BSP: Board Support Package

[2] SDK: Software Development Kit

Chapter 2. System requirements

Buildroot is designed to run on Linux systems.

While Buildroot itself will build most host packages it needs for the +compilation, certain standard Linux utilities are expected to be +already installed on the host system. Below you will find an overview of +the mandatory and optional packages (note that package names may vary +between distributions).

2.1. Mandatory packages

  • +Build tools: +

    • +which +
    • +sed +
    • +make (version 3.81 or any later) +
    • +binutils +
    • +build-essential (only for Debian based systems) +
    • +gcc (version 4.8 or any later) +
    • +g++ (version 4.8 or any later) +
    • +bash +
    • +patch +
    • +gzip +
    • +bzip2 +
    • +perl (version 5.8.7 or any later) +
    • +tar +
    • +cpio +
    • +unzip +
    • +rsync +
    • +file (must be in /usr/bin/file) +
    • +bc +
  • +Source fetching tools: +

    • +wget +

2.2. Optional packages

  • +Recommended dependencies: +

    Some features or utilities in Buildroot, like the legal-info, or the +graph generation tools, have additional dependencies. Although they +are not mandatory for a simple build, they are still highly recommended:

    • +python (version 2.7 or any later) +
  • +Configuration interface dependencies: +

    For these libraries, you need to install both runtime and development +data, which in many distributions are packaged separately. The +development packages typically have a -dev or -devel suffix.

    • +ncurses5 to use the menuconfig interface +
    • +qt5 to use the xconfig interface +
    • +glib2, gtk2 and glade2 to use the gconfig interface +
  • +Source fetching tools: +

    In the official tree, most of the package sources are retrieved using +wget from ftp, http or https locations. A few packages are only +available through a version control system. Moreover, Buildroot is +capable of downloading sources via other tools, like rsync or scp +(refer to Chapter 20, Download infrastructure for more details). If you enable +packages using any of these methods, you will need to install the +corresponding tool on the host system:

    • +bazaar +
    • +cvs +
    • +git +
    • +mercurial +
    • +rsync +
    • +scp +
    • +subversion +
  • +Java-related packages, if the Java Classpath needs to be built for + the target system: +

    • +The javac compiler +
    • +The jar tool +
  • +Documentation generation tools: +

    • +asciidoc, version 8.6.3 or higher +
    • +w3m +
    • +python with the argparse module (automatically present in 2.7+ and 3.2+) +
    • +dblatex (required for the pdf manual only) +
  • +Graph generation tools: +

    • +graphviz to use graph-depends and <pkg>-graph-depends +
    • +python-matplotlib to use graph-build +

Chapter 3. Getting Buildroot

Buildroot releases are made every 3 months, in February, May, August and +November. Release numbers are in the format YYYY.MM, so for example +2013.02, 2014.08.

Release tarballs are available at http://buildroot.org/downloads/.

For your convenience, a Vagrantfile is +available in support/misc/Vagrantfile in the Buildroot source tree +to quickly set up a virtual machine with the needed dependencies to +get started.

If you want to setup an isolated buildroot environment on Linux or Mac +Os X, paste this line onto your terminal:

curl -O https://buildroot.org/downloads/Vagrantfile; vagrant up

If you are on Windows, paste this into your powershell:

(new-object System.Net.WebClient).DownloadFile(
+"https://buildroot.org/downloads/Vagrantfile","Vagrantfile");
+vagrant up

If you want to follow development, you can use the daily snapshots or +make a clone of the Git repository. Refer to the +Download page of the Buildroot website +for more details.

Chapter 4. Buildroot quick start

Important: you can and should build everything as a normal user. There +is no need to be root to configure and use Buildroot. By running all +commands as a regular user, you protect your system against packages +behaving badly during compilation and installation.

The first step when using Buildroot is to create a configuration. +Buildroot has a nice configuration tool similar to the one you can +find in the Linux kernel or in +BusyBox.

From the buildroot directory, run

 $ make menuconfig

for the original curses-based configurator, or

 $ make nconfig

for the new curses-based configurator, or

 $ make xconfig

for the Qt-based configurator, or

 $ make gconfig

for the GTK-based configurator.

All of these "make" commands will need to build a configuration +utility (including the interface), so you may need to install +"development" packages for relevant libraries used by the +configuration utilities. Refer to Chapter 2, System requirements for more details, +specifically the optional requirements +to get the dependencies of your favorite interface.

For each menu entry in the configuration tool, you can find associated +help that describes the purpose of the entry. Refer to Chapter 6, Buildroot configuration +for details on some specific configuration aspects.

Once everything is configured, the configuration tool generates a +.config file that contains the entire configuration. This file will be +read by the top-level Makefile.

To start the build process, simply run:

 $ make

By default, Buildroot does not support top-level parallel build, so +running make -jN is not necessary. There is however experimental +support for top-level parallel build, see +Section 8.12, “Top-level parallel build”.

The make command will generally perform the following steps:

  • +download source files (as required); +
  • +configure, build and install the cross-compilation toolchain, or + simply import an external toolchain; +
  • +configure, build and install selected target packages; +
  • +build a kernel image, if selected; +
  • +build a bootloader image, if selected; +
  • +create a root filesystem in selected formats. +

Buildroot output is stored in a single directory, output/. +This directory contains several subdirectories:

  • +images/ where all the images (kernel image, bootloader and root + filesystem images) are stored. These are the files you need to put + on your target system. +
  • +build/ where all the components are built (this includes tools + needed by Buildroot on the host and packages compiled for the + target). This directory contains one subdirectory for each of these + components. +
  • +host/ contains both the tools built for the host, and the sysroot + of the target toolchain. The former is an installation of tools + compiled for the host that are needed for the proper execution of + Buildroot, including the cross-compilation toolchain. The latter + is a hierarchy similar to a root filesystem hierarchy. It contains + the headers and libraries of all user-space packages that provide + and install libraries used by other packages. However, this + directory is not intended to be the root filesystem for the target: + it contains a lot of development files, unstripped binaries and + libraries that make it far too big for an embedded system. These + development files are used to compile libraries and applications for + the target that depend on other libraries. +
  • +staging/ is a symlink to the target toolchain sysroot inside + host/, which exists for backwards compatibility. +
  • +target/ which contains almost the complete root filesystem for + the target: everything needed is present except the device files in + /dev/ (Buildroot can’t create them because Buildroot doesn’t run + as root and doesn’t want to run as root). Also, it doesn’t have the correct + permissions (e.g. setuid for the busybox binary). Therefore, this directory + should not be used on your target. Instead, you should use one of + the images built in the images/ directory. If you need an + extracted image of the root filesystem for booting over NFS, then + use the tarball image generated in images/ and extract it as + root. Compared to staging/, target/ contains only the files and + libraries needed to run the selected target applications: the + development files (headers, etc.) are not present, the binaries are + stripped. +

These commands, make menuconfig|nconfig|gconfig|xconfig and make, are the +basic ones that allow to easily and quickly generate images fitting +your needs, with all the features and applications you enabled.

More details about the "make" command usage are given in +Section 8.1, “make tips”.

Chapter 5. Community resources

Like any open source project, Buildroot has different ways to share +information in its community and outside.

Each of those ways may interest you if you are looking for some help, +want to understand Buildroot or contribute to the project.

+Mailing List +

Buildroot has a mailing list for discussion and development. It is the +main method of interaction for Buildroot users and developers.

Only subscribers to the Buildroot mailing list are allowed to post to +this list. You can subscribe via the +mailing list info +page.

Mails that are sent to the mailing list are also available in the +mailing list archives, available through +Mailman or at +lore.kernel.org.

+IRC +

The Buildroot IRC channel #buildroot is +hosted on OFTC. It is a useful place to +ask quick questions or discuss on certain topics.

When asking for help on IRC, share relevant logs or pieces of code +using a code sharing website, such as https://paste.ack.tf/.

Note that for certain questions, posting to the mailing list may be +better as it will reach more people, both developers and users.

+Bug tracker +
Bugs in Buildroot can be reported via the mailing list or alternatively +via the Buildroot +bugtracker. Please refer to Section 22.6, “Reporting issues/bugs or getting help” before creating a bug +report.
+Wiki +
The Buildroot wiki page is hosted on +the eLinux wiki. It contains some useful links, an +overview of past and upcoming events, and a TODO list.
+Patchwork +

Patchwork is a web-based patch tracking system designed to facilitate +the contribution and management of contributions to an open-source +project. Patches that have been sent to a mailing list are 'caught' by +the system, and appear on a web page. Any comments posted that +reference the patch are appended to the patch page too. For more +information on Patchwork see +http://jk.ozlabs.org/projects/patchwork/.

Buildroot’s Patchwork website is mainly for use by Buildroot’s +maintainer to ensure patches aren’t missed. It is also used by Buildroot +patch reviewers (see also Section 22.3.1, “Applying Patches from Patchwork”). +However, since the website exposes patches and their corresponding +review comments in a clean and concise web interface, it can be useful +for all Buildroot developers.

The Buildroot patch management interface is available at +http://patchwork.buildroot.org.

Part II. User guide

Chapter 6. Buildroot configuration

All the configuration options in make *config have a help text +providing details about the option.

The make *config commands also offer a search tool. Read the help +message in the different frontend menus to know how to use it:

  • +in menuconfig, the search tool is called by pressing /; +
  • +in xconfig, the search tool is called by pressing Ctrl + f. +

The result of the search shows the help message of the matching items. +In menuconfig, numbers in the left column provide a shortcut to the +corresponding entry. Just type this number to directly jump to the +entry, or to the containing menu in case the entry is not selectable due +to a missing dependency.

Although the menu structure and the help text of the entries should be +sufficiently self-explanatory, a number of topics require additional +explanation that cannot easily be covered in the help text and are +therefore covered in the following sections.

6.1. Cross-compilation toolchain

A compilation toolchain is the set of tools that allows you to compile +code for your system. It consists of a compiler (in our case, gcc), +binary utils like assembler and linker (in our case, binutils) and a +C standard library (for example +GNU Libc, +uClibc-ng).

The system installed on your development station certainly already has +a compilation toolchain that you can use to compile an application +that runs on your system. If you’re using a PC, your compilation +toolchain runs on an x86 processor and generates code for an x86 +processor. Under most Linux systems, the compilation toolchain uses +the GNU libc (glibc) as the C standard library. This compilation +toolchain is called the "host compilation toolchain". The machine on +which it is running, and on which you’re working, is called the "host +system" [3].

The compilation toolchain is provided by your distribution, and +Buildroot has nothing to do with it (other than using it to build a +cross-compilation toolchain and other tools that are run on the +development host).

As said above, the compilation toolchain that comes with your system +runs on and generates code for the processor in your host system. As +your embedded system has a different processor, you need a +cross-compilation toolchain - a compilation toolchain that runs on +your host system but generates code for your target system (and +target processor). For example, if your host system uses x86 and your +target system uses ARM, the regular compilation toolchain on your host +runs on x86 and generates code for x86, while the cross-compilation +toolchain runs on x86 and generates code for ARM.

Buildroot provides two solutions for the cross-compilation toolchain:

  • +The internal toolchain backend, called Buildroot toolchain in + the configuration interface. +
  • +The external toolchain backend, called External toolchain in + the configuration interface. +

The choice between these two solutions is done using the Toolchain +Type option in the Toolchain menu. Once one solution has been +chosen, a number of configuration options appear, they are detailed in +the following sections.

6.1.1. Internal toolchain backend

The internal toolchain backend is the backend where Buildroot builds +by itself a cross-compilation toolchain, before building the userspace +applications and libraries for your target embedded system.

This backend supports several C libraries: +uClibc-ng, +glibc and +musl.

Once you have selected this backend, a number of options appear. The +most important ones allow to:

  • +Change the version of the Linux kernel headers used to build the + toolchain. This item deserves a few explanations. In the process of + building a cross-compilation toolchain, the C library is being + built. This library provides the interface between userspace + applications and the Linux kernel. In order to know how to "talk" + to the Linux kernel, the C library needs to have access to the + Linux kernel headers (i.e. the .h files from the kernel), which + define the interface between userspace and the kernel (system + calls, data structures, etc.). Since this interface is backward + compatible, the version of the Linux kernel headers used to build + your toolchain do not need to match exactly the version of the + Linux kernel you intend to run on your embedded system. They only + need to have a version equal or older to the version of the Linux + kernel you intend to run. If you use kernel headers that are more + recent than the Linux kernel you run on your embedded system, then + the C library might be using interfaces that are not provided by + your Linux kernel. +
  • +Change the version of the GCC compiler, binutils and the C library. +
  • +Select a number of toolchain options (uClibc only): whether the + toolchain should have RPC support (used mainly for NFS), + wide-char support, locale support (for internationalization), + C++ support or thread support. Depending on which options you choose, + the number of userspace applications and libraries visible in + Buildroot menus will change: many applications and libraries require + certain toolchain options to be enabled. Most packages show a comment + when a certain toolchain option is required to be able to enable + those packages. If needed, you can further refine the uClibc + configuration by running make uclibc-menuconfig. Note however that + all packages in Buildroot are tested against the default uClibc + configuration bundled in Buildroot: if you deviate from this + configuration by removing features from uClibc, some packages may no + longer build. +

It is worth noting that whenever one of those options is modified, +then the entire toolchain and system must be rebuilt. See +Section 8.2, “Understanding when a full rebuild is necessary”.

Advantages of this backend:

  • +Well integrated with Buildroot +
  • +Fast, only builds what’s necessary +

Drawbacks of this backend:

  • +Rebuilding the toolchain is needed when doing make clean, which + takes time. If you’re trying to reduce your build time, consider + using the External toolchain backend. +

6.1.2. External toolchain backend

The external toolchain backend allows to use existing pre-built +cross-compilation toolchains. Buildroot knows about a number of +well-known cross-compilation toolchains (from +Linaro for ARM, +Sourcery +CodeBench for ARM, x86-64, PowerPC, and MIPS, and is capable of +downloading them automatically, or it can be pointed to a custom +toolchain, either available for download or installed locally.

Then, you have three solutions to use an external toolchain:

  • +Use a predefined external toolchain profile, and let Buildroot + download, extract and install the toolchain. Buildroot already knows + about a few CodeSourcery and Linaro toolchains. Just select the + toolchain profile in Toolchain from the available ones. This is + definitely the easiest solution. +
  • +Use a predefined external toolchain profile, but instead of having + Buildroot download and extract the toolchain, you can tell Buildroot + where your toolchain is already installed on your system. Just + select the toolchain profile in Toolchain through the available + ones, unselect Download toolchain automatically, and fill the + Toolchain path text entry with the path to your cross-compiling + toolchain. +
  • +Use a completely custom external toolchain. This is particularly + useful for toolchains generated using crosstool-NG or with Buildroot + itself. To do this, select the Custom toolchain solution in the + Toolchain list. You need to fill the Toolchain path, Toolchain + prefix and External toolchain C library options. Then, you have + to tell Buildroot what your external toolchain supports. If your + external toolchain uses the glibc library, you only have to tell + whether your toolchain supports C++ or not and whether it has + built-in RPC support. If your external toolchain uses the uClibc + library, then you have to tell Buildroot if it supports RPC, + wide-char, locale, program invocation, threads and C++. + At the beginning of the execution, Buildroot will tell you if + the selected options do not match the toolchain configuration. +

Our external toolchain support has been tested with toolchains from +CodeSourcery and Linaro, toolchains generated by +crosstool-NG, and toolchains generated by +Buildroot itself. In general, all toolchains that support the +sysroot feature should work. If not, do not hesitate to contact the +developers.

We do not support toolchains or SDK generated by OpenEmbedded or +Yocto, because these toolchains are not pure toolchains (i.e. just the +compiler, binutils, the C and C++ libraries). Instead these toolchains +come with a very large set of pre-compiled libraries and +programs. Therefore, Buildroot cannot import the sysroot of the +toolchain, as it would contain hundreds of megabytes of pre-compiled +libraries that are normally built by Buildroot.

We also do not support using the distribution toolchain (i.e. the +gcc/binutils/C library installed by your distribution) as the +toolchain to build software for the target. This is because your +distribution toolchain is not a "pure" toolchain (i.e. only with the +C/C++ library), so we cannot import it properly into the Buildroot +build environment. So even if you are building a system for a x86 or +x86_64 target, you have to generate a cross-compilation toolchain with +Buildroot or crosstool-NG.

If you want to generate a custom toolchain for your project, that can +be used as an external toolchain in Buildroot, our recommendation is +to build it either with Buildroot itself (see +Section 6.1.3, “Build an external toolchain with Buildroot”) or with +crosstool-NG.

Advantages of this backend:

  • +Allows to use well-known and well-tested cross-compilation + toolchains. +
  • +Avoids the build time of the cross-compilation toolchain, which is + often very significant in the overall build time of an embedded + Linux system. +

Drawbacks of this backend:

  • +If your pre-built external toolchain has a bug, may be hard to get a + fix from the toolchain vendor, unless you build your external + toolchain by yourself using Buildroot or Crosstool-NG. +

6.1.3. Build an external toolchain with Buildroot

The Buildroot internal toolchain option can be used to create an +external toolchain. Here are a series of steps to build an internal +toolchain and package it up for reuse by Buildroot itself (or other +projects).

Create a new Buildroot configuration, with the following details:

  • +Select the appropriate Target options for your target CPU + architecture +
  • +In the Toolchain menu, keep the default of Buildroot toolchain + for Toolchain type, and configure your toolchain as desired +
  • +In the System configuration menu, select None as the Init + system and none as /bin/sh +
  • +In the Target packages menu, disable BusyBox +
  • +In the Filesystem images menu, disable tar the root filesystem +

Then, we can trigger the build, and also ask Buildroot to generate a +SDK. This will conveniently generate for us a tarball which contains +our toolchain:

make sdk

This produces the SDK tarball in $(O)/images, with a name similar to +arm-buildroot-linux-uclibcgnueabi_sdk-buildroot.tar.gz. Save this +tarball, as it is now the toolchain that you can re-use as an external +toolchain in other Buildroot projects.

In those other Buildroot projects, in the Toolchain menu:

  • +Set Toolchain type to External toolchain +
  • +Set Toolchain to Custom toolchain +
  • +Set Toolchain origin to Toolchain to be downloaded and installed +
  • +Set Toolchain URL to file:///path/to/your/sdk/tarball.tar.gz +

External toolchain wrapper

When using an external toolchain, Buildroot generates a wrapper program, +that transparently passes the appropriate options (according to the +configuration) to the external toolchain programs. In case you need to +debug this wrapper to check exactly what arguments are passed, you can +set the environment variable BR2_DEBUG_WRAPPER to either one of:

  • +0, empty or not set: no debug +
  • +1: trace all arguments on a single line +
  • +2: trace one argument per line +

6.2. /dev management

On a Linux system, the /dev directory contains special files, called +device files, that allow userspace applications to access the +hardware devices managed by the Linux kernel. Without these device +files, your userspace applications would not be able to use the +hardware devices, even if they are properly recognized by the Linux +kernel.

Under System configuration, /dev management, Buildroot offers four +different solutions to handle the /dev directory :

  • +The first solution is Static using device table. This is the old + classical way of handling device files in Linux. With this method, + the device files are persistently stored in the root filesystem + (i.e. they persist across reboots), and there is nothing that will + automatically create and remove those device files when hardware + devices are added or removed from the system. Buildroot therefore + creates a standard set of device files using a device table, the + default one being stored in system/device_table_dev.txt in the + Buildroot source code. This file is processed when Buildroot + generates the final root filesystem image, and the device files + are therefore not visible in the output/target directory. The + BR2_ROOTFS_STATIC_DEVICE_TABLE option allows to change the + default device table used by Buildroot, or to add an additional + device table, so that additional device files are created by + Buildroot during the build. So, if you use this method, and a + device file is missing in your system, you can for example create + a board/<yourcompany>/<yourproject>/device_table_dev.txt file + that contains the description of your additional device files, + and then you can set BR2_ROOTFS_STATIC_DEVICE_TABLE to + system/device_table_dev.txt + board/<yourcompany>/<yourproject>/device_table_dev.txt. For more + details about the format of the device table file, see + Chapter 25, Makedev syntax documentation. +
  • +The second solution is Dynamic using devtmpfs only. devtmpfs is + a virtual filesystem inside the Linux kernel that has been + introduced in kernel 2.6.32 (if you use an older kernel, it is not + possible to use this option). When mounted in /dev, this virtual + filesystem will automatically make device files appear and + disappear as hardware devices are added and removed from the + system. This filesystem is not persistent across reboots: it is + filled dynamically by the kernel. Using devtmpfs requires the + following kernel configuration options to be enabled: + CONFIG_DEVTMPFS and CONFIG_DEVTMPFS_MOUNT. When Buildroot is in + charge of building the Linux kernel for your embedded device, it + makes sure that those two options are enabled. However, if you + build your Linux kernel outside of Buildroot, then it is your + responsibility to enable those two options (if you fail to do so, + your Buildroot system will not boot). +
  • +The third solution is Dynamic using devtmpfs + mdev. This method + also relies on the devtmpfs virtual filesystem detailed above (so + the requirement to have CONFIG_DEVTMPFS and + CONFIG_DEVTMPFS_MOUNT enabled in the kernel configuration still + apply), but adds the mdev userspace utility on top of it. mdev + is a program part of BusyBox that the kernel will call every time a + device is added or removed. Thanks to the /etc/mdev.conf + configuration file, mdev can be configured to for example, set + specific permissions or ownership on a device file, call a script + or application whenever a device appears or disappear, + etc. Basically, it allows userspace to react on device addition + and removal events. mdev can for example be used to automatically + load kernel modules when devices appear on the system. mdev is + also important if you have devices that require a firmware, as it + will be responsible for pushing the firmware contents to the + kernel. mdev is a lightweight implementation (with fewer + features) of udev. For more details about mdev and the syntax + of its configuration file, see + http://git.busybox.net/busybox/tree/docs/mdev.txt. +
  • +The fourth solution is Dynamic using devtmpfs + eudev. This + method also relies on the devtmpfs virtual filesystem detailed + above, but adds the eudev userspace daemon on top of it. eudev + is a daemon that runs in the background, and gets called by the + kernel when a device gets added or removed from the system. It is a + more heavyweight solution than mdev, but provides higher + flexibility. eudev is a standalone version of udev, the + original userspace daemon used in most desktop Linux distributions, + which is now part of Systemd. For more details, see + http://en.wikipedia.org/wiki/Udev. +

The Buildroot developers recommendation is to start with the Dynamic +using devtmpfs only solution, until you have the need for userspace +to be notified when devices are added/removed, or if firmwares are +needed, in which case Dynamic using devtmpfs + mdev is usually a +good solution.

Note that if systemd is chosen as init system, /dev management will +be performed by the udev program provided by systemd.

6.3. init system

The init program is the first userspace program started by the +kernel (it carries the PID number 1), and is responsible for starting +the userspace services and programs (for example: web server, +graphical applications, other network servers, etc.).

Buildroot allows to use three different types of init systems, which +can be chosen from System configuration, Init system:

  • +The first solution is BusyBox. Amongst many programs, BusyBox has + an implementation of a basic init program, which is sufficient + for most embedded systems. Enabling the BR2_INIT_BUSYBOX will + ensure BusyBox will build and install its init program. This is + the default solution in Buildroot. The BusyBox init program will + read the /etc/inittab file at boot to know what to do. The syntax + of this file can be found in + http://git.busybox.net/busybox/tree/examples/inittab (note that + BusyBox inittab syntax is special: do not use a random inittab + documentation from the Internet to learn about BusyBox + inittab). The default inittab in Buildroot is stored in + system/skeleton/etc/inittab. Apart from mounting a few important + filesystems, the main job the default inittab does is to start the + /etc/init.d/rcS shell script, and start a getty program (which + provides a login prompt). +
  • +The second solution is systemV. This solution uses the old + traditional sysvinit program, packed in Buildroot in + package/sysvinit. This was the solution used in most desktop + Linux distributions, until they switched to more recent + alternatives such as Upstart or Systemd. sysvinit also works with + an inittab file (which has a slightly different syntax than the + one from BusyBox). The default inittab installed with this init + solution is located in package/sysvinit/inittab. +
  • +The third solution is systemd. systemd is the new generation + init system for Linux. It does far more than traditional init + programs: aggressive parallelization capabilities, uses socket and + D-Bus activation for starting services, offers on-demand starting + of daemons, keeps track of processes using Linux control groups, + supports snapshotting and restoring of the system state, + etc. systemd will be useful on relatively complex embedded + systems, for example the ones requiring D-Bus and services + communicating between each other. It is worth noting that systemd + brings a fairly big number of large dependencies: dbus, udev + and more. For more details about systemd, see + http://www.freedesktop.org/wiki/Software/systemd. +

The solution recommended by Buildroot developers is to use the +BusyBox init as it is sufficient for most embedded +systems. systemd can be used for more complex situations.



[3] This terminology differs from what is used by GNU +configure, where the host is the machine on which the application will +run (which is usually the same as target)

Chapter 7. Configuration of other components

Before attempting to modify any of the components below, make sure you +have already configured Buildroot itself, and have enabled the +corresponding package.

+BusyBox +

If you already have a BusyBox configuration file, you can directly +specify this file in the Buildroot configuration, using +BR2_PACKAGE_BUSYBOX_CONFIG. Otherwise, Buildroot will start from a +default BusyBox configuration file.

To make subsequent changes to the configuration, use make +busybox-menuconfig to open the BusyBox configuration editor.

It is also possible to specify a BusyBox configuration file through an +environment variable, although this is not recommended. Refer to +Section 8.6, “Environment variables” for more details.

+uClibc +
Configuration of uClibc is done in the same way as for BusyBox. The +configuration variable to specify an existing configuration file is +BR2_UCLIBC_CONFIG. The command to make subsequent changes is make +uclibc-menuconfig.
+Linux kernel +

If you already have a kernel configuration file, you can directly +specify this file in the Buildroot configuration, using +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG.

If you do not yet have a kernel configuration file, you can either start +by specifying a defconfig in the Buildroot configuration, using +BR2_LINUX_KERNEL_USE_DEFCONFIG, or start by creating an empty file and +specifying it as custom configuration file, using +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG.

To make subsequent changes to the configuration, use make +linux-menuconfig to open the Linux configuration editor.

+Barebox +
Configuration of Barebox is done in the same way as for the Linux +kernel. The corresponding configuration variables are +BR2_TARGET_BAREBOX_USE_CUSTOM_CONFIG and +BR2_TARGET_BAREBOX_USE_DEFCONFIG. To open the configuration editor, +use make barebox-menuconfig.
+U-Boot +
Configuration of U-Boot (version 2015.04 or newer) is done in the same +way as for the Linux kernel. The corresponding configuration variables +are BR2_TARGET_UBOOT_USE_CUSTOM_CONFIG and +BR2_TARGET_UBOOT_USE_DEFCONFIG. To open the configuration editor, +use make uboot-menuconfig.

Chapter 8. General Buildroot usage

8.1. make tips

This is a collection of tips that help you make the most of Buildroot.

Display all commands executed by make:  +

 $ make V=1 <target>

+

Display the list of boards with a defconfig:  +

 $ make list-defconfigs

+

Display all available targets:  +

 $ make help

+

Not all targets are always available, +some settings in the .config file may hide some targets:

  • +busybox-menuconfig only works when busybox is enabled; +
  • +linux-menuconfig and linux-savedefconfig only work when + linux is enabled; +
  • +uclibc-menuconfig is only available when the uClibc C library is + selected in the internal toolchain backend; +
  • +barebox-menuconfig and barebox-savedefconfig only work when the + barebox bootloader is enabled. +
  • +uboot-menuconfig and uboot-savedefconfig only work when the + U-Boot bootloader is enabled. +

Cleaning: Explicit cleaning is required when any of the architecture or toolchain +configuration options are changed.

To delete all build products (including build directories, host, staging +and target trees, the images and the toolchain):

 $ make clean

Generating the manual: The present manual sources are located in the docs/manual directory. +To generate the manual:

 $ make manual-clean
+ $ make manual

The manual outputs will be generated in output/docs/manual.

Notes

Resetting Buildroot for a new target: To delete all build products as well as the configuration:

 $ make distclean

Notes. If ccache is enabled, running make clean or distclean does +not empty the compiler cache used by Buildroot. To delete it, refer +to Section 8.14.3, “Using ccache in Buildroot”.

Dumping the internal make variables: One can dump the variables known to make, along with their values:

 $ make -s printvars VARS='VARIABLE1 VARIABLE2'
+ VARIABLE1=value_of_variable
+ VARIABLE2=value_of_variable

It is possible to tweak the output using some variables:

  • +VARS will limit the listing to variables which names match the + specified make-patterns - this must be set else nothing is printed +
  • +QUOTED_VARS, if set to YES, will single-quote the value +
  • +RAW_VARS, if set to YES, will print the unexpanded value +

For example:

 $ make -s printvars VARS=BUSYBOX_%DEPENDENCIES
+ BUSYBOX_DEPENDENCIES=skeleton toolchain
+ BUSYBOX_FINAL_ALL_DEPENDENCIES=skeleton toolchain
+ BUSYBOX_FINAL_DEPENDENCIES=skeleton toolchain
+ BUSYBOX_FINAL_PATCH_DEPENDENCIES=
+ BUSYBOX_RDEPENDENCIES=ncurses util-linux
 $ make -s printvars VARS=BUSYBOX_%DEPENDENCIES QUOTED_VARS=YES
+ BUSYBOX_DEPENDENCIES='skeleton toolchain'
+ BUSYBOX_FINAL_ALL_DEPENDENCIES='skeleton toolchain'
+ BUSYBOX_FINAL_DEPENDENCIES='skeleton toolchain'
+ BUSYBOX_FINAL_PATCH_DEPENDENCIES=''
+ BUSYBOX_RDEPENDENCIES='ncurses util-linux'
 $ make -s printvars VARS=BUSYBOX_%DEPENDENCIES RAW_VARS=YES
+ BUSYBOX_DEPENDENCIES=skeleton toolchain
+ BUSYBOX_FINAL_ALL_DEPENDENCIES=$(sort $(BUSYBOX_FINAL_DEPENDENCIES) $(BUSYBOX_FINAL_PATCH_DEPENDENCIES))
+ BUSYBOX_FINAL_DEPENDENCIES=$(sort $(BUSYBOX_DEPENDENCIES))
+ BUSYBOX_FINAL_PATCH_DEPENDENCIES=$(sort $(BUSYBOX_PATCH_DEPENDENCIES))
+ BUSYBOX_RDEPENDENCIES=ncurses util-linux

The output of quoted variables can be reused in shell scripts, for example:

 $ eval $(make -s printvars VARS=BUSYBOX_DEPENDENCIES QUOTED_VARS=YES)
+ $ echo $BUSYBOX_DEPENDENCIES
+ skeleton toolchain

8.2. Understanding when a full rebuild is necessary

Buildroot does not attempt to detect what parts of the system should +be rebuilt when the system configuration is changed through make +menuconfig, make xconfig or one of the other configuration +tools. In some cases, Buildroot should rebuild the entire system, in +some cases, only a specific subset of packages. But detecting this in +a completely reliable manner is very difficult, and therefore the +Buildroot developers have decided to simply not attempt to do this.

Instead, it is the responsibility of the user to know when a full +rebuild is necessary. As a hint, here are a few rules of thumb that +can help you understand how to work with Buildroot:

  • +When the target architecture configuration is changed, a complete + rebuild is needed. Changing the architecture variant, the binary + format or the floating point strategy for example has an impact on + the entire system. +
  • +When the toolchain configuration is changed, a complete rebuild + generally is needed. Changing the toolchain configuration often + involves changing the compiler version, the type of C library or + its configuration, or some other fundamental configuration item, + and these changes have an impact on the entire system. +
  • +When an additional package is added to the configuration, a full + rebuild is not necessarily needed. Buildroot will detect that this + package has never been built, and will build it. However, if this + package is a library that can optionally be used by packages that + have already been built, Buildroot will not automatically rebuild + those. Either you know which packages should be rebuilt, and you + can rebuild them manually, or you should do a full rebuild. For + example, let’s suppose you have built a system with the ctorrent + package, but without openssl. Your system works, but you realize + you would like to have SSL support in ctorrent, so you enable the + openssl package in Buildroot configuration and restart the + build. Buildroot will detect that openssl should be built and + will be build it, but it will not detect that ctorrent should be + rebuilt to benefit from openssl to add OpenSSL support. You will + either have to do a full rebuild, or rebuild ctorrent itself. +
  • +When a package is removed from the configuration, Buildroot does + not do anything special. It does not remove the files installed by + this package from the target root filesystem or from the toolchain + sysroot. A full rebuild is needed to get rid of this + package. However, generally you don’t necessarily need this package + to be removed right now: you can wait for the next lunch break to + restart the build from scratch. +
  • +When the sub-options of a package are changed, the package is not + automatically rebuilt. After making such changes, rebuilding only + this package is often sufficient, unless enabling the package + sub-option adds some features to the package that are useful for + another package which has already been built. Again, Buildroot does + not track when a package should be rebuilt: once a package has been + built, it is never rebuilt unless explicitly told to do so. +
  • +When a change to the root filesystem skeleton is made, a full + rebuild is needed. However, when changes to the root filesystem + overlay, a post-build script or a post-image script are made, + there is no need for a full rebuild: a simple make invocation + will take the changes into account. +
  • +When a package listed in FOO_DEPENDENCIES is rebuilt or removed, + the package foo is not automatically rebuilt. For example, if a + package bar is listed in FOO_DEPENDENCIES with FOO_DEPENDENCIES + = bar and the configuration of the bar package is changed, the + configuration change would not result in a rebuild of package foo + automatically. In this scenario, you may need to either rebuild any + packages in your build which reference bar in their DEPENDENCIES, + or perform a full rebuild to ensure any bar dependent packages are + up to date. +

Generally speaking, when you’re facing a build error and you’re unsure +of the potential consequences of the configuration changes you’ve +made, do a full rebuild. If you get the same build error, then you are +sure that the error is not related to partial rebuilds of packages, +and if this error occurs with packages from the official Buildroot, do +not hesitate to report the problem! As your experience with Buildroot +progresses, you will progressively learn when a full rebuild is really +necessary, and you will save more and more time.

For reference, a full rebuild is achieved by running:

$ make clean all

8.3. Understanding how to rebuild packages

One of the most common questions asked by Buildroot users is how to +rebuild a given package or how to remove a package without rebuilding +everything from scratch.

Removing a package is unsupported by Buildroot without +rebuilding from scratch. This is because Buildroot doesn’t keep track +of which package installs what files in the output/staging and +output/target directories, or which package would be compiled differently +depending on the availability of another package.

The easiest way to rebuild a single package from scratch is to remove +its build directory in output/build. Buildroot will then re-extract, +re-configure, re-compile and re-install this package from scratch. You +can ask buildroot to do this with the make <package>-dirclean command.

On the other hand, if you only want to restart the build process of a +package from its compilation step, you can run make <package>-rebuild. It +will restart the compilation and installation of the package, but not from +scratch: it basically re-executes make and make install inside the package, +so it will only rebuild files that changed.

If you want to restart the build process of a package from its configuration +step, you can run make <package>-reconfigure. It will restart the +configuration, compilation and installation of the package.

While <package>-rebuild implies <package>-reinstall and +<package>-reconfigure implies <package>-rebuild, these targets as well +as <package> only act on the said package, and do not trigger re-creating +the root filesystem image. If re-creating the root filesystem in necessary, +one should in addition run make or make all.

Internally, Buildroot creates so-called stamp files to keep track of +which build steps have been completed for each package. They are +stored in the package build directory, +output/build/<package>-<version>/ and are named +.stamp_<step-name>. The commands detailed above simply manipulate +these stamp files to force Buildroot to restart a specific set of +steps of a package build process.

Further details about package special make targets are explained in +Section 8.14.5, “Package-specific make targets”.

8.4. Offline builds

If you intend to do an offline build and just want to download +all sources that you previously selected in the configurator +(menuconfig, nconfig, xconfig or gconfig), then issue:

 $ make source

You can now disconnect or copy the content of your dl +directory to the build-host.

8.5. Building out-of-tree

As default, everything built by Buildroot is stored in the directory +output in the Buildroot tree.

Buildroot also supports building out of tree with a syntax similar to +the Linux kernel. To use it, add O=<directory> to the make command +line:

 $ make O=/tmp/build

Or:

 $ cd /tmp/build; make O=$PWD -C path/to/buildroot

All the output files will be located under /tmp/build. If the O +path does not exist, Buildroot will create it.

Note: the O path can be either an absolute or a relative path, but if it’s +passed as a relative path, it is important to note that it is interpreted +relative to the main Buildroot source directory, not the current working +directory.

When using out-of-tree builds, the Buildroot .config and temporary +files are also stored in the output directory. This means that you can +safely run multiple builds in parallel using the same source tree as +long as they use unique output directories.

For ease of use, Buildroot generates a Makefile wrapper in the output +directory - so after the first run, you no longer need to pass O=<…> +and -C <…>, simply run (in the output directory):

 $ make <target>

8.6. Environment variables

Buildroot also honors some environment variables, when they are passed +to make or set in the environment:

  • +HOSTCXX, the host C++ compiler to use +
  • +HOSTCC, the host C compiler to use +
  • +UCLIBC_CONFIG_FILE=<path/to/.config>, path to + the uClibc configuration file, used to compile uClibc, if an + internal toolchain is being built. + + Note that the uClibc configuration file can also be set from the + configuration interface, so through the Buildroot .config file; this + is the recommended way of setting it. + +
  • +BUSYBOX_CONFIG_FILE=<path/to/.config>, path to + the BusyBox configuration file. + + Note that the BusyBox configuration file can also be set from the + configuration interface, so through the Buildroot .config file; this + is the recommended way of setting it. + +
  • +BR2_CCACHE_DIR to override the directory where + Buildroot stores the cached files when using ccache. + +
  • +BR2_DL_DIR to override the directory in which + Buildroot stores/retrieves downloaded files. + + Note that the Buildroot download directory can also be set from the + configuration interface, so through the Buildroot .config file. See + Section 8.14.4, “Location of downloaded packages” for more details on how you can set the download + directory. +
  • +BR2_GRAPH_ALT, if set and non-empty, to use an alternate color-scheme in + build-time graphs +
  • +BR2_GRAPH_OUT to set the filetype of generated graphs, either pdf (the + default), or png. +
  • +BR2_GRAPH_DEPS_OPTS to pass extra options to the dependency graph; see + Section 8.9, “Graphing the dependencies between packages” for the accepted options +
  • +BR2_GRAPH_DOT_OPTS is passed verbatim as options to the dot utility to + draw the dependency graph. +
  • +BR2_GRAPH_SIZE_OPTS to pass extra options to the size graph; see + Section 8.11, “Graphing the filesystem size contribution of packages” for the acepted options +

An example that uses config files located in the toplevel directory and +in your $HOME:

 $ make UCLIBC_CONFIG_FILE=uClibc.config BUSYBOX_CONFIG_FILE=$HOME/bb.config

If you want to use a compiler other than the default gcc +or g++ for building helper-binaries on your host, then do

 $ make HOSTCXX=g++-4.3-HEAD HOSTCC=gcc-4.3-HEAD

8.7. Dealing efficiently with filesystem images

Filesystem images can get pretty big, depending on the filesystem you choose, +the number of packages, whether you provisioned free space… Yet, some +locations in the filesystems images may just be empty (e.g. a long run of +zeroes); such a file is called a sparse file.

Most tools can handle sparse files efficiently, and will only store or write +those parts of a sparse file that are not empty.

For example:

  • +tar accepts the -S option to tell it to only store non-zero blocks + of sparse files: +

    • +tar cf archive.tar -S [files…] will efficiently store sparse files + in a tarball +
    • +tar xf archive.tar -S will efficiently store sparse files extracted + from a tarball +
  • +cp accepts the --sparse=WHEN option (WHEN is one of auto, + never or always): +

    • +cp --sparse=always source.file dest.file will make dest.file a + sparse file if source.file has long runs of zeroes +

Other tools may have similar options. Please consult their respective man +pages.

You can use sparse files if you need to store the filesystem images (e.g. +to transfer from one machine to another), or if you need to send them (e.g. +to the Q&A team).

Note however that flashing a filesystem image to a device while using the +sparse mode of dd may result in a broken filesystem (e.g. the block bitmap +of an ext2 filesystem may be corrupted; or, if you have sparse files in +your filesystem, those parts may not be all-zeroes when read back). You +should only use sparse files when handling files on the build machine, not +when transferring them to an actual device that will be used on the target.

8.8. Details about packages

Buildroot can produce a JSON blurb that describes the set of enabled +packages in the current configuration, together with their +dependencies, licenses and other metadata. This JSON blurb is produced +by using the show-info make target:

make show-info

Buildroot can also produce details about packages as HTML and JSON +output using the pkg-stats make target. Amongst other things, these +details include whether known CVEs (security vulnerabilities) affect +the packages in your current configuration. It also shows if there is +a newer upstream version for those packages.

make pkg-stats

8.9. Graphing the dependencies between packages

One of Buildroot’s jobs is to know the dependencies between packages, +and make sure they are built in the right order. These dependencies +can sometimes be quite complicated, and for a given system, it is +often not easy to understand why such or such package was brought into +the build by Buildroot.

In order to help understanding the dependencies, and therefore better +understand what is the role of the different components in your +embedded Linux system, Buildroot is capable of generating dependency +graphs.

To generate a dependency graph of the full system you have compiled, +simply run:

make graph-depends

You will find the generated graph in +output/graphs/graph-depends.pdf.

If your system is quite large, the dependency graph may be too complex +and difficult to read. It is therefore possible to generate the +dependency graph just for a given package:

make <pkg>-graph-depends

You will find the generated graph in +output/graph/<pkg>-graph-depends.pdf.

Note that the dependency graphs are generated using the dot tool +from the Graphviz project, which you must have installed on your +system to use this feature. In most distributions, it is available as +the graphviz package.

By default, the dependency graphs are generated in the PDF +format. However, by passing the BR2_GRAPH_OUT environment variable, you +can switch to other output formats, such as PNG, PostScript or +SVG. All formats supported by the -T option of the dot tool are +supported.

BR2_GRAPH_OUT=svg make graph-depends

The graph-depends behaviour can be controlled by setting options in the +BR2_GRAPH_DEPS_OPTS environment variable. The accepted options are:

  • +--depth N, -d N, to limit the dependency depth to N levels. The + default, 0, means no limit. +
  • +--stop-on PKG, -s PKG, to stop the graph on the package PKG. + PKG can be an actual package name, a glob, the keyword virtual + (to stop on virtual packages), or the keyword host (to stop on + host packages). The package is still present on the graph, but its + dependencies are not. +
  • +--exclude PKG, -x PKG, like --stop-on, but also omits PKG from + the graph. +
  • +--transitive, --no-transitive, to draw (or not) the transitive + dependencies. The default is to not draw transitive dependencies. +
  • +--colors R,T,H, the comma-separated list of colors to draw the + root package (R), the target packages (T) and the host packages + (H). Defaults to: lightblue,grey,gainsboro +
BR2_GRAPH_DEPS_OPTS='-d 3 --no-transitive --colors=red,green,blue' make graph-depends

8.10. Graphing the build duration

When the build of a system takes a long time, it is sometimes useful +to be able to understand which packages are the longest to build, to +see if anything can be done to speed up the build. In order to help +such build time analysis, Buildroot collects the build time of each +step of each package, and allows to generate graphs from this data.

To generate the build time graph after a build, run:

make graph-build

This will generate a set of files in output/graphs :

  • +build.hist-build.pdf, a histogram of the build time for each + package, ordered in the build order. +
  • +build.hist-duration.pdf, a histogram of the build time for each + package, ordered by duration (longest first) +
  • +build.hist-name.pdf, a histogram of the build time for each + package, order by package name. +
  • +build.pie-packages.pdf, a pie chart of the build time per package +
  • +build.pie-steps.pdf, a pie chart of the global time spent in each + step of the packages build process. +

This graph-build target requires the Python Matplotlib and Numpy +libraries to be installed (python-matplotlib and python-numpy on +most distributions), and also the argparse module if you’re using a +Python version older than 2.7 (python-argparse on most +distributions).

By default, the output format for the graph is PDF, but a different +format can be selected using the BR2_GRAPH_OUT environment variable. The +only other format supported is PNG:

BR2_GRAPH_OUT=png make graph-build

8.11. Graphing the filesystem size contribution of packages

When your target system grows, it is sometimes useful to understand +how much each Buildroot package is contributing to the overall root +filesystem size. To help with such an analysis, Buildroot collects +data about files installed by each package and using this data, +generates a graph and CSV files detailing the size contribution of +the different packages.

To generate these data after a build, run:

make graph-size

This will generate:

  • +output/graphs/graph-size.pdf, a pie chart of the contribution of + each package to the overall root filesystem size +
  • +output/graphs/package-size-stats.csv, a CSV file giving the size + contribution of each package to the overall root filesystem size +
  • +output/graphs/file-size-stats.csv, a CSV file giving the size + contribution of each installed file to the package it belongs, and + to the overall filesystem size. +

This graph-size target requires the Python Matplotlib library to be +installed (python-matplotlib on most distributions), and also the +argparse module if you’re using a Python version older than 2.7 +(python-argparse on most distributions).

Just like for the duration graph, a BR2_GRAPH_OUT environment variable +is supported to adjust the output file format. See Section 8.9, “Graphing the dependencies between packages” +for details about this environment variable.

Additionally, one may set the environment variable BR2_GRAPH_SIZE_OPTS +to further control the generated graph. Accepted options are:

  • +--size-limit X, -l X, will group all packages which individual + contribution is below X percent, to a single entry labelled Others + in the graph. By default, X=0.01, which means packages each + contributing less than 1% are grouped under Others. Accepted values + are in the range [0.0..1.0]. +
  • +--iec, --binary, --si, --decimal, to use IEC (binary, powers + of 1024) or SI (decimal, powers of 1000; the default) prefixes. +
  • +--biggest-first, to sort packages in decreasing size order, rather + than in increasing size order. +

Note. The collected filesystem size data is only meaningful after a complete +clean rebuild. Be sure to run make clean all before using make +graph-size.

To compare the root filesystem size of two different Buildroot compilations, +for example after adjusting the configuration or when switching to another +Buildroot release, use the size-stats-compare script. It takes two +file-size-stats.csv files (produced by make graph-size) as input. +Refer to the help text of this script for more details:

utils/size-stats-compare -h

8.12. Top-level parallel build

Note. This section deals with a very experimental feature, which is known to +break even in some non-unusual situations. Use at your own risk.

Buildroot has always been capable of using parallel build on a per +package basis: each package is built by Buildroot using make -jN (or +the equivalent invocation for non-make-based build systems). The level +of parallelism is by default number of CPUs + 1, but it can be +adjusted using the BR2_JLEVEL configuration option.

Until 2020.02, Buildroot was however building packages in a serial +fashion: each package was built one after the other, without +parallelization of the build between packages. As of 2020.02, +Buildroot has experimental support for top-level parallel build, +which allows some signicant build time savings by building packages +that have no dependency relationship in parallel. This feature is +however marked as experimental and is known not to work in some cases.

In order to use top-level parallel build, one must:

  1. +Enable the option BR2_PER_PACKAGE_DIRECTORIES in the Buildroot +configuration +
  2. +Use make -jN when starting the Buildroot build +

Internally, the BR2_PER_PACKAGE_DIRECTORIES will enable a mechanism +called per-package directories, which will have the following +effects:

  • +Instead of a global target directory and a global host directory + common to all packages, per-package target and host directories + will be used, in $(O)/per-package/<pkg>/target/ and + $(O)/per-package/<pkg>/host/ respectively. Those folders will be + populated from the corresponding folders of the package dependencies + at the beginning of <pkg> build. The compiler and all other tools + will therefore only be able to see and access files installed by + dependencies explicitly listed by <pkg>. +
  • +At the end of the build, the global target and host directories + will be populated, located in $(O)/target and $(O)/host + respectively. This means that during the build, those folders will + be empty and it’s only at the very end of the build that they will + be populated. +

8.13. Integration with Eclipse

While a part of the embedded Linux developers like classical text +editors like Vim or Emacs, and command-line based interfaces, a number +of other embedded Linux developers like richer graphical interfaces to +do their development work. Eclipse being one of the most popular +Integrated Development Environment, Buildroot integrates with Eclipse +in order to ease the development work of Eclipse users.

Our integration with Eclipse simplifies the compilation, remote +execution and remote debugging of applications and libraries that are +built on top of a Buildroot system. It does not integrate the +Buildroot configuration and build processes themselves with +Eclipse. Therefore, the typical usage model of our Eclipse integration +would be:

  • +Configure your Buildroot system with make menuconfig, make + xconfig or any other configuration interface provided with + Buildroot. +
  • +Build your Buildroot system by running make. +
  • +Start Eclipse to develop, execute and debug your own custom + applications and libraries, that will rely on the libraries built + and installed by Buildroot. +

The Buildroot Eclipse integration installation process and usage is +described in detail at +https://github.com/mbats/eclipse-buildroot-bundle/wiki.

8.14. Advanced usage

8.14.1. Using the generated toolchain outside Buildroot

You may want to compile, for your target, your own programs or other +software that are not packaged in Buildroot. In order to do this you +can use the toolchain that was generated by Buildroot.

The toolchain generated by Buildroot is located by default in +output/host/. The simplest way to use it is to add +output/host/bin/ to your PATH environment variable and then to +use ARCH-linux-gcc, ARCH-linux-objdump, ARCH-linux-ld, etc.

Alternatively, Buildroot can also export the toolchain and the development +files of all selected packages, as an SDK, by running the command +make sdk. This generates a tarball of the content of the host directory +output/host/, named <TARGET-TUPLE>_sdk-buildroot.tar.gz (which can be +overriden by setting the environment variable BR2_SDK_PREFIX) and +located in the output directory output/images/.

This tarball can then be distributed to application developers, when +they want to develop their applications that are not (yet) packaged as +a Buildroot package.

Upon extracting the SDK tarball, the user must run the script +relocate-sdk.sh (located at the top directory of the SDK), to make +sure all paths are updated with the new location.

Alternatively, if you just want to prepare the SDK without generating +the tarball (e.g. because you will just be moving the host directory, +or will be generating the tarball on your own), Buildroot also allows +you to just prepare the SDK with make prepare-sdk without actually +generating a tarball.

For your convenience, by selecting the option +BR2_PACKAGE_HOST_ENVIRONMENT_SETUP, you can get a +environment-setup script installed in output/host/ and therefore +in your SDK. This script can be sourced with +. your/sdk/path/environment-setup to export a number of environment +variables that will help cross-compile your projects using the +Buildroot SDK: the PATH will contain the SDK binaries, standard +autotools variables will be defined with the appropriate values, and +CONFIGURE_FLAGS will contain basic ./configure options to +cross-compile autotools projects. It also provides some useful +commands. Note however that once this script is sourced, the +environment is setup only for cross-compilation, and no longer for +native compilation.

8.14.2. Using gdb in Buildroot

Buildroot allows to do cross-debugging, where the debugger runs on the +build machine and communicates with gdbserver on the target to +control the execution of the program.

To achieve this:

  • +If you are using an internal toolchain (built by Buildroot), you + must enable BR2_PACKAGE_HOST_GDB, BR2_PACKAGE_GDB and + BR2_PACKAGE_GDB_SERVER. This ensures that both the cross gdb and + gdbserver get built, and that gdbserver gets installed to your target. +
  • +If you are using an external toolchain, you should enable + BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY, which will copy the + gdbserver included with the external toolchain to the target. If your + external toolchain does not have a cross gdb or gdbserver, it is also + possible to let Buildroot build them, by enabling the same options as + for the internal toolchain backend. +

Now, to start debugging a program called foo, you should run on the +target:

gdbserver :2345 foo

This will cause gdbserver to listen on TCP port 2345 for a connection +from the cross gdb.

Then, on the host, you should start the cross gdb using the following +command line:

<buildroot>/output/host/bin/<tuple>-gdb -x <buildroot>/output/staging/usr/share/buildroot/gdbinit foo

Of course, foo must be available in the current directory, built +with debugging symbols. Typically you start this command from the +directory where foo is built (and not from output/target/ as the +binaries in that directory are stripped).

The <buildroot>/output/staging/usr/share/buildroot/gdbinit file will tell the +cross gdb where to find the libraries of the target.

Finally, to connect to the target from the cross gdb:

(gdb) target remote <target ip address>:2345

8.14.3. Using ccache in Buildroot

ccache is a compiler cache. It stores the +object files resulting from each compilation process, and is able to +skip future compilation of the same source file (with same compiler +and same arguments) by using the pre-existing object files. When doing +almost identical builds from scratch a number of times, it can nicely +speed up the build process.

ccache support is integrated in Buildroot. You just have to enable +Enable compiler cache in Build options. This will automatically +build ccache and use it for every host and target compilation.

The cache is located in $HOME/.buildroot-ccache. It is stored +outside of Buildroot output directory so that it can be shared by +separate Buildroot builds. If you want to get rid of the cache, simply +remove this directory.

You can get statistics on the cache (its size, number of hits, +misses, etc.) by running make ccache-stats.

The make target ccache-options and the CCACHE_OPTIONS variable +provide more generic access to the ccache. For example

# set cache limit size
+make CCACHE_OPTIONS="--max-size=5G" ccache-options
+
+# zero statistics counters
+make CCACHE_OPTIONS="--zero-stats" ccache-options

ccache makes a hash of the source files and of the compiler options. +If a compiler option is different, the cached object file will not be +used. Many compiler options, however, contain an absolute path to the +staging directory. Because of this, building in a different output +directory would lead to many cache misses.

To avoid this issue, buildroot has the Use relative paths option +(BR2_CCACHE_USE_BASEDIR). This will rewrite all absolute paths that +point inside the output directory into relative paths. Thus, changing +the output directory no longer leads to cache misses.

A disadvantage of the relative paths is that they also end up to be +relative paths in the object file. Therefore, for example, the debugger +will no longer find the file, unless you cd to the output directory +first.

See the +ccache manual’s section on "Compiling in different directories" for +more details about this rewriting of absolute paths.

8.14.4. Location of downloaded packages

The various tarballs that are downloaded by Buildroot are all stored +in BR2_DL_DIR, which by default is the dl directory. If you want +to keep a complete version of Buildroot which is known to be working +with the associated tarballs, you can make a copy of this directory. +This will allow you to regenerate the toolchain and the target +filesystem with exactly the same versions.

If you maintain several Buildroot trees, it might be better to have a +shared download location. This can be achieved by pointing the +BR2_DL_DIR environment variable to a directory. If this is +set, then the value of BR2_DL_DIR in the Buildroot configuration is +overridden. The following line should be added to <~/.bashrc>.

 export BR2_DL_DIR=<shared download location>

The download location can also be set in the .config file, with the +BR2_DL_DIR option. Unlike most options in the .config file, this value +is overridden by the BR2_DL_DIR environment variable.

8.14.5. Package-specific make targets

Running make <package> builds and installs that particular package +and its dependencies.

For packages relying on the Buildroot infrastructure, there are +numerous special make targets that can be called independently like +this:

make <package>-<target>

The package build targets are (in the order they are executed):

command/target Description

source

Fetch the source (download the tarball, clone +the source repository, etc)

depends

Build and install all dependencies required to +build the package

extract

Put the source in the package build directory +(extract the tarball, copy the source, etc)

patch

Apply the patches, if any

configure

Run the configure commands, if any

build

Run the compilation commands

install-staging

target package: Run the installation of the package in the +staging directory, if necessary

install-target

target package: Run the installation of the package in the +target directory, if necessary

install

target package: Run the 2 previous installation commands

+

host package: Run the installation of the package in the host +directory

Additionally, there are some other useful make targets:

command/target Description

show-depends

Displays the first-order dependencies required to build the +package

show-recursive-depends

Recursively displays the dependencies + required to build the package

show-rdepends

Displays the first-order reverse dependencies of + the package (i.e packages that directly depend on it)

show-recursive-rdepends

Recursively displays the reverse + dependencies of the package (i.e the packages that depend on it, + directly or indirectly)

graph-depends

Generate a dependency graph of the package, in the +context of the current Buildroot configuration. See +this section for more details about dependency +graphs.

graph-rdepends

Generate a graph of this package reverse + dependencies (i.e the packages that depend on it, directly or + indirectly)

dirclean

Remove the whole package build directory

reinstall

Re-run the install commands

rebuild

Re-run the compilation commands - this only makes +sense when using the OVERRIDE_SRCDIR feature or when you modified a file +directly in the build directory

reconfigure

Re-run the configure commands, then rebuild - this only +makes sense when using the OVERRIDE_SRCDIR feature or when you modified a +file directly in the build directory

8.14.6. Using Buildroot during development

The normal operation of Buildroot is to download a tarball, extract +it, configure, compile and install the software component found inside +this tarball. The source code is extracted in +output/build/<package>-<version>, which is a temporary directory: +whenever make clean is used, this directory is entirely removed, and +re-created at the next make invocation. Even when a Git or +Subversion repository is used as the input for the package source +code, Buildroot creates a tarball out of it, and then behaves as it +normally does with tarballs.

This behavior is well-suited when Buildroot is used mainly as an +integration tool, to build and integrate all the components of an +embedded Linux system. However, if one uses Buildroot during the +development of certain components of the system, this behavior is not +very convenient: one would instead like to make a small change to the +source code of one package, and be able to quickly rebuild the system +with Buildroot.

Making changes directly in output/build/<package>-<version> is not +an appropriate solution, because this directory is removed on make +clean.

Therefore, Buildroot provides a specific mechanism for this use case: +the <pkg>_OVERRIDE_SRCDIR mechanism. Buildroot reads an override +file, which allows the user to tell Buildroot the location of the +source for certain packages.

The default location of the override file is $(CONFIG_DIR)/local.mk, +as defined by the BR2_PACKAGE_OVERRIDE_FILE configuration option. +$(CONFIG_DIR) is the location of the Buildroot .config file, so +local.mk by default lives side-by-side with the .config file, +which means:

  • +In the top-level Buildroot source directory for in-tree builds + (i.e., when O= is not used) +
  • +In the out-of-tree directory for out-of-tree builds (i.e., when + O= is used) +

If a different location than these defaults is required, it can be +specified through the BR2_PACKAGE_OVERRIDE_FILE configuration +option.

In this override file, Buildroot expects to find lines of the form:

<pkg1>_OVERRIDE_SRCDIR = /path/to/pkg1/sources
+<pkg2>_OVERRIDE_SRCDIR = /path/to/pkg2/sources

For example:

LINUX_OVERRIDE_SRCDIR = /home/bob/linux/
+BUSYBOX_OVERRIDE_SRCDIR = /home/bob/busybox/

When Buildroot finds that for a given package, an +<pkg>_OVERRIDE_SRCDIR has been defined, it will no longer attempt to +download, extract and patch the package. Instead, it will directly use +the source code available in the specified directory and make clean +will not touch this directory. This allows to point Buildroot to your +own directories, that can be managed by Git, Subversion, or any other +version control system. To achieve this, Buildroot will use rsync to +copy the source code of the component from the specified +<pkg>_OVERRIDE_SRCDIR to output/build/<package>-custom/.

This mechanism is best used in conjunction with the make +<pkg>-rebuild and make <pkg>-reconfigure targets. A make +<pkg>-rebuild all sequence will rsync the source code from +<pkg>_OVERRIDE_SRCDIR to output/build/<package>-custom (thanks to +rsync, only the modified files are copied), and restart the build +process of just this package.

In the example of the linux package above, the developer can then +make a source code change in /home/bob/linux and then run:

make linux-rebuild all

and in a matter of seconds gets the updated Linux kernel image in +output/images. Similarly, a change can be made to the BusyBox source +code in /home/bob/busybox, and after:

make busybox-rebuild all

the root filesystem image in output/images contains the updated +BusyBox.

Source trees for big projects often contain hundreds or thousands of +files which are not needed for building, but will slow down the process +of copying the sources with rsync. Optionally, it is possible define +<pkg>_OVERRIDE_SRCDIR_RSYNC_EXCLUSIONS to skip syncing certain files +from the source tree. For example, when working on the webkitgtk +package, the following will exclude the tests and in-tree builds from +a local WebKit source tree:

WEBKITGTK_OVERRIDE_SRCDIR = /home/bob/WebKit
+WEBKITGTK_OVERRIDE_SRCDIR_RSYNC_EXCLUSIONS = \
+        --exclude JSTests --exclude ManualTests --exclude PerformanceTests \
+        --exclude WebDriverTests --exclude WebKitBuild --exclude WebKitLibraries \
+        --exclude WebKit.xcworkspace --exclude Websites --exclude Examples

By default, Buildroot skips syncing of VCS artifacts (e.g., the .git and +.svn directories). Some packages prefer to have these VCS directories +available during build, for example for automatically determining a precise +commit reference for version information. To undo this built-in filtering at a +cost of a slower speed, add these directories back:

LINUX_OVERRIDE_SRCDIR_RSYNC_EXCLUSIONS = --include .git

Chapter 9. Project-specific customization

Typical actions you may need to perform for a given project are:

  • +configuring Buildroot (including build options and toolchain, + bootloader, kernel, package and filesystem image type selection) +
  • +configuring other components, like the Linux kernel and BusyBox +
  • +customizing the generated target filesystem +

    • +adding or overwriting files on the target filesystem (using + BR2_ROOTFS_OVERLAY) +
    • +modifying or deleting files on the target filesystem (using + BR2_ROOTFS_POST_BUILD_SCRIPT) +
    • +running arbitrary commands prior to generating the filesystem image + (using BR2_ROOTFS_POST_BUILD_SCRIPT) +
    • +setting file permissions and ownership (using + BR2_ROOTFS_DEVICE_TABLE) +
    • +adding custom devices nodes (using + BR2_ROOTFS_STATIC_DEVICE_TABLE) +
  • +adding custom user accounts (using BR2_ROOTFS_USERS_TABLES) +
  • +running arbitrary commands after generating the filesystem image + (using BR2_ROOTFS_POST_IMAGE_SCRIPT) +
  • +adding project-specific patches to some packages (using + BR2_GLOBAL_PATCH_DIR) +
  • +adding project-specific packages +

An important note regarding such project-specific customizations: +please carefully consider which changes are indeed project-specific and +which changes are also useful to developers outside your project. The +Buildroot community highly recommends and encourages the upstreaming of +improvements, packages and board support to the official Buildroot +project. Of course, it is sometimes not possible or desirable to +upstream because the changes are highly specific or proprietary.

This chapter describes how to make such project-specific customizations +in Buildroot and how to store them in a way that you can build the same +image in a reproducible way, even after running make clean. By +following the recommended strategy, you can even use the same Buildroot +tree to build multiple distinct projects!

9.1. Recommended directory structure

When customizing Buildroot for your project, you will be creating one or +more project-specific files that need to be stored somewhere. While most +of these files could be placed in any location as their path is to be +specified in the Buildroot configuration, the Buildroot developers +recommend a specific directory structure which is described in this +section.

Orthogonal to this directory structure, you can choose where you place +this structure itself: either inside the Buildroot tree, or outside of +it using a br2-external tree. Both options are valid, the choice is up +to you.

+-- board/
+|   +-- <company>/
+|       +-- <boardname>/
+|           +-- linux.config
+|           +-- busybox.config
+|           +-- <other configuration files>
+|           +-- post_build.sh
+|           +-- post_image.sh
+|           +-- rootfs_overlay/
+|           |   +-- etc/
+|           |   +-- <some file>
+|           +-- patches/
+|               +-- foo/
+|               |   +-- <some patch>
+|               +-- libbar/
+|                   +-- <some other patches>
+|
++-- configs/
+|   +-- <boardname>_defconfig
+|
++-- package/
+|   +-- <company>/
+|       +-- Config.in (if not using a br2-external tree)
+|       +-- <company>.mk (if not using a br2-external tree)
+|       +-- package1/
+|       |    +-- Config.in
+|       |    +-- package1.mk
+|       +-- package2/
+|           +-- Config.in
+|           +-- package2.mk
+|
++-- Config.in (if using a br2-external tree)
++-- external.mk (if using a br2-external tree)
++-- external.desc (if using a br2-external tree)

Details on the files shown above are given further in this chapter.

Note: if you choose to place this structure outside of the Buildroot +tree but in a br2-external tree, the <company> and possibly <boardname> +components may be superfluous and can be left out.

9.1.1. Implementing layered customizations

It is quite common for a user to have several related projects that partly +need the same customizations. Instead of duplicating these +customizations for each project, it is recommended to use a layered +customization approach, as explained in this section.

Almost all of the customization methods available in Buildroot, like +post-build scripts and root filesystem overlays, accept a +space-separated list of items. The specified items are always treated in +order, from left to right. By creating more than one such item, one for +the common customizations and another one for the really +project-specific customizations, you can avoid unnecessary duplication. +Each layer is typically embodied by a separate directory inside +board/<company>/. Depending on your projects, you could even introduce +more than two layers.

An example directory structure for where a user has two customization +layers common and fooboard is:

+-- board/
+    +-- <company>/
+        +-- common/
+        |   +-- post_build.sh
+        |   +-- rootfs_overlay/
+        |   |   +-- ...
+        |   +-- patches/
+        |       +-- ...
+        |
+        +-- fooboard/
+            +-- linux.config
+            +-- busybox.config
+            +-- <other configuration files>
+            +-- post_build.sh
+            +-- rootfs_overlay/
+            |   +-- ...
+            +-- patches/
+                +-- ...

For example, if the user has the BR2_GLOBAL_PATCH_DIR configuration +option set as:

BR2_GLOBAL_PATCH_DIR="board/<company>/common/patches board/<company>/fooboard/patches"

then first the patches from the common layer would be applied, +followed by the patches from the fooboard layer.

9.2. Keeping customizations outside of Buildroot

As already briefly mentioned in Section 9.1, “Recommended directory structure”, you can +place project-specific customizations in two locations:

  • +directly within the Buildroot tree, typically maintaining them using + branches in a version control system so that upgrading to a newer + Buildroot release is easy. +
  • +outside of the Buildroot tree, using the br2-external mechanism. + This mechanism allows to keep package recipes, board support and + configuration files outside of the Buildroot tree, while still + having them nicely integrated in the build logic. We call this + location a br2-external tree. This section explains how to use + the br2-external mechanism and what to provide in a br2-external + tree. +

One can tell Buildroot to use one or more br2-external trees by setting +the BR2_EXTERNAL make variable set to the path(s) of the br2-external +tree(s) to use. It can be passed to any Buildroot make invocation. It +is automatically saved in the hidden .br2-external.mk file in the output +directory. Thanks to this, there is no need to pass BR2_EXTERNAL at +every make invocation. It can however be changed at any time by +passing a new value, and can be removed by passing an empty value.

Note. The path to a br2-external tree can be either absolute or relative. +If it is passed as a relative path, it is important to note that it is +interpreted relative to the main Buildroot source directory, not to +the Buildroot output directory.

Note: If using an br2-external tree from before Buildroot 2016.11, you need to +convert it before you can use it with Buildroot 2016.11 onward. See +Section 27.1, “Migrating to 2016.11” for help on doing so.

Some examples:

buildroot/ $ make BR2_EXTERNAL=/path/to/foo menuconfig

From now on, definitions from the /path/to/foo br2-external tree +will be used:

buildroot/ $ make
+buildroot/ $ make legal-info

We can switch to another br2-external tree at any time:

buildroot/ $ make BR2_EXTERNAL=/where/we/have/bar xconfig

We can also use multiple br2-external trees:

buildroot/ $ make BR2_EXTERNAL=/path/to/foo:/where/we/have/bar menuconfig

Or disable the usage of any br2-external tree:

buildroot/ $ make BR2_EXTERNAL= xconfig

9.2.1. Layout of a br2-external tree

A br2-external tree must contain at least those three files, described +in the following chapters:

  • +external.desc +
  • +external.mk +
  • +Config.in +

Apart from those mandatory files, there may be additional and optional +content that may be present in a br2-external tree, like the configs/ +or provides/ directories. They are described in the following chapters +as well.

A complete example br2-external tree layout is also described later.

The external.desc file

That file describes the br2-external tree: the name and description +for that br2-external tree.

The format for this file is line based, with each line starting by a +keyword, followed by a colon and one or more spaces, followed by the +value assigned to that keyword. There are two keywords currently +recognised:

  • +name, mandatory, defines the name for that br2-external tree. That + name must only use ASCII characters in the set [A-Za-z0-9_]; any + other character is forbidden. Buildroot sets the variable + BR2_EXTERNAL_$(NAME)_PATH to the absolute path of the br2-external + tree, so that you can use it to refer to your br2-external tree. This + variable is available both in Kconfig, so you can use it to source your + Kconfig files (see below) and in the Makefile, so that you can use it + to include other Makefiles (see below) or refer to other files (like + data files) from your br2-external tree. +

    Note: Since it is possible to use multiple br2-external trees at once, this + name is used by Buildroot to generate variables for each of those trees. + That name is used to identify your br2-external tree, so try to come up + with a name that really describes your br2-external tree, in order for + it to be relatively unique, so that it does not clash with another name + from another br2-external tree, especially if you are planning on + somehow sharing your br2-external tree with third parties or using + br2-external trees from third parties.

  • +desc, optional, provides a short description for that br2-external + tree. It shall fit on a single line, is mostly free-form (see below), + and is used when displaying information about a br2-external tree (e.g. + above the list of defconfig files, or as the prompt in the menuconfig); + as such, it should relatively brief (40 chars is probably a good upper + limit). The description is available in the BR2_EXTERNAL_$(NAME)_DESC + variable. +

Examples of names and the corresponding BR2_EXTERNAL_$(NAME)_PATH +variables:

  • +FOO → BR2_EXTERNAL_FOO_PATH +
  • +BAR_42 → BR2_EXTERNAL_BAR_42_PATH +

In the following examples, it is assumed the name to be set to BAR_42.

Note: Both BR2_EXTERNAL_$(NAME)_PATH and BR2_EXTERNAL_$(NAME)_DESC are + available in the Kconfig files and the Makefiles. They are also + exported in the environment so are available in post-build, post-image + and in-fakeroot scripts.

The Config.in and external.mk files

Those files (which may each be empty) can be used to define package +recipes (i.e. foo/Config.in and foo/foo.mk like for packages bundled +in Buildroot itself) or other custom configuration options or make logic.

Buildroot automatically includes the Config.in from each br2-external +tree to make it appear in the top-level configuration menu, and includes +the external.mk from each br2-external tree with the rest of the +makefile logic.

The main usage of this is to store package recipes. The recommended way +to do this is to write a Config.in file that looks like:

source "$BR2_EXTERNAL_BAR_42_PATH/package/package1/Config.in"
+source "$BR2_EXTERNAL_BAR_42_PATH/package/package2/Config.in"

Then, have an external.mk file that looks like:

include $(sort $(wildcard $(BR2_EXTERNAL_BAR_42_PATH)/package/*/*.mk))

And then in $(BR2_EXTERNAL_BAR_42_PATH)/package/package1 and +$(BR2_EXTERNAL_BAR_42_PATH)/package/package2 create normal +Buildroot package recipes, as explained in Chapter 18, Adding new packages to Buildroot. +If you prefer, you can also group the packages in subdirectories +called <boardname> and adapt the above paths accordingly.

You can also define custom configuration options in Config.in and +custom make logic in external.mk.

The configs/ directory

One can store Buildroot defconfigs in the configs subdirectory of +the br2-external tree. Buildroot will automatically show them in the +output of make list-defconfigs and allow them to be loaded with the +normal make <name>_defconfig command. They will be visible in the +make list-defconfigs output, below an External configs label that +contains the name of the br2-external tree they are defined in.

Note: If a defconfig file is present in more than one br2-external tree, then +the one from the last br2-external tree is used. It is thus possible +to override a defconfig bundled in Buildroot or another br2-external +tree.

The provides/ directory

For some packages, Buildroot provides a choice between two (or more) +implementations of API-compatible such packages. For example, there is +a choice to choose either libjpeg ot jpeg-turbo; there is one between +openssl or libressl; there is one to select one of the known, +pre-configured toolchains…

It is possible for a br2-external to extend those choices, by providing +a set of files that define those alternatives:

  • +provides/toolchains.in defines the pre-configured toolchains, which + will then be listed in the toolchain selection; +
  • +provides/jpeg.in defines the alternative libjpeg implementations; +
  • +provides/openssl.in defines the alternative openssl implementations; +
  • +provides/skeleton.in defines the alternative skeleton implementations; +
  • +provides/init.in defines the alternative init system implementations, this + can be used to select a default skeleton for your init. +

Free-form content

One can store all the board-specific configuration files there, such +as the kernel configuration, the root filesystem overlay, or any other +configuration file for which Buildroot allows to set the location (by +using the BR2_EXTERNAL_$(NAME)_PATH variable). For example, you +could set the paths to a global patch directory, to a rootfs overlay +and to the kernel configuration file as follows (e.g. by running +make menuconfig and filling in these options):

BR2_GLOBAL_PATCH_DIR=$(BR2_EXTERNAL_BAR_42_PATH)/patches/
+BR2_ROOTFS_OVERLAY=$(BR2_EXTERNAL_BAR_42_PATH)/board/<boardname>/overlay/
+BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE=$(BR2_EXTERNAL_BAR_42_PATH)/board/<boardname>/kernel.config

Additional Linux kernel extensions

Additional Linux kernel extensions (see Section 18.21.2, “linux-kernel-extensions”) can +be added by storing them in the linux/ directory at the root of a +br2-external tree.

Example layout

Here is an example layout using all features of br2-external (the sample +content is shown for the file above it, when it is relevant to explain +the br2-external tree; this is all entirely made up just for the sake of +illustration, of course):

/path/to/br2-ext-tree/
+  |- external.desc
+  |     |name: BAR_42
+  |     |desc: Example br2-external tree
+  |     `----
+  |
+  |- Config.in
+  |     |source "$BR2_EXTERNAL_BAR_42_PATH/toolchain/toolchain-external-mine/Config.in.options"
+  |     |source "$BR2_EXTERNAL_BAR_42_PATH/package/pkg-1/Config.in"
+  |     |source "$BR2_EXTERNAL_BAR_42_PATH/package/pkg-2/Config.in"
+  |     |source "$BR2_EXTERNAL_BAR_42_PATH/package/my-jpeg/Config.in"
+  |     |
+  |     |config BAR_42_FLASH_ADDR
+  |     |    hex "my-board flash address"
+  |     |    default 0x10AD
+  |     `----
+  |
+  |- external.mk
+  |     |include $(sort $(wildcard $(BR2_EXTERNAL_BAR_42_PATH)/package/*/*.mk))
+  |     |include $(sort $(wildcard $(BR2_EXTERNAL_BAR_42_PATH)/toolchain/*/*.mk))
+  |     |
+  |     |flash-my-board:
+  |     |    $(BR2_EXTERNAL_BAR_42_PATH)/board/my-board/flash-image \
+  |     |        --image $(BINARIES_DIR)/image.bin \
+  |     |        --address $(BAR_42_FLASH_ADDR)
+  |     `----
+  |
+  |- package/pkg-1/Config.in
+  |     |config BR2_PACKAGE_PKG_1
+  |     |    bool "pkg-1"
+  |     |    help
+  |     |      Some help about pkg-1
+  |     `----
+  |- package/pkg-1/pkg-1.hash
+  |- package/pkg-1/pkg-1.mk
+  |     |PKG_1_VERSION = 1.2.3
+  |     |PKG_1_SITE = /some/where/to/get/pkg-1
+  |     |PKG_1_LICENSE = blabla
+  |     |
+  |     |define PKG_1_INSTALL_INIT_SYSV
+  |     |    $(INSTALL) -D -m 0755 $(PKG_1_PKGDIR)/S99my-daemon \
+  |     |                          $(TARGET_DIR)/etc/init.d/S99my-daemon
+  |     |endef
+  |     |
+  |     |$(eval $(autotools-package))
+  |     `----
+  |- package/pkg-1/S99my-daemon
+  |
+  |- package/pkg-2/Config.in
+  |- package/pkg-2/pkg-2.hash
+  |- package/pkg-2/pkg-2.mk
+  |
+  |- provides/jpeg.in
+  |     |config BR2_PACKAGE_MY_JPEG
+  |     |    bool "my-jpeg"
+  |     `----
+  |- package/my-jpeg/Config.in
+  |     |config BR2_PACKAGE_PROVIDES_JPEG
+  |     |    default "my-jpeg" if BR2_PACKAGE_MY_JPEG
+  |     `----
+  |- package/my-jpeg/my-jpeg.mk
+  |     |# This is a normal package .mk file
+  |     |MY_JPEG_VERSION = 1.2.3
+  |     |MY_JPEG_SITE = https://example.net/some/place
+  |     |MY_JPEG_PROVIDES = jpeg
+  |     |$(eval $(autotools-package))
+  |     `----
+  |
+  |- provides/init.in
+  |     |config BR2_INIT_MINE
+  |     |    bool "my custom init"
+  |     |    select BR2_PACKAGE_MY_INIT
+  |     |    select BR2_PACKAGE_SKELETON_INIT_MINE if BR2_ROOTFS_SKELETON_DEFAULT
+  |     `----
+  |
+  |- provides/skeleton.in
+  |     |config BR2_ROOTFS_SKELETON_MINE
+  |     |    bool "my custom skeleton"
+  |     |    select BR2_PACKAGE_SKELETON_MINE
+  |     `----
+  |- package/skeleton-mine/Config.in
+  |     |config BR2_PACKAGE_SKELETON_MINE
+  |     |    bool
+  |     |    select BR2_PACKAGE_HAS_SKELETON
+  |     |
+  |     |config BR2_PACKAGE_PROVIDES_SKELETON
+  |     |    default "skeleton-mine" if BR2_PACKAGE_SKELETON_MINE
+  |     `----
+  |- package/skeleton-mine/skeleton-mine.mk
+  |     |SKELETON_MINE_ADD_TOOLCHAIN_DEPENDENCY = NO
+  |     |SKELETON_MINE_ADD_SKELETON_DEPENDENCY = NO
+  |     |SKELETON_MINE_PROVIDES = skeleton
+  |     |SKELETON_MINE_INSTALL_STAGING = YES
+  |     |$(eval $(generic-package))
+  |     `----
+  |
+  |- provides/toolchains.in
+  |     |config BR2_TOOLCHAIN_EXTERNAL_MINE
+  |     |    bool "my custom toolchain"
+  |     |    depends on BR2_some_arch
+  |     |    select BR2_INSTALL_LIBSTDCPP
+  |     `----
+  |- toolchain/toolchain-external-mine/Config.in.options
+  |     |if BR2_TOOLCHAIN_EXTERNAL_MINE
+  |     |config BR2_TOOLCHAIN_EXTERNAL_PREFIX
+  |     |    default "arch-mine-linux-gnu"
+  |     |config BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL
+  |     |    default "toolchain-external-mine"
+  |     |endif
+  |     `----
+  |- toolchain/toolchain-external-mine/toolchain-external-mine.mk
+  |     |TOOLCHAIN_EXTERNAL_MINE_SITE = https://example.net/some/place
+  |     |TOOLCHAIN_EXTERNAL_MINE_SOURCE = my-toolchain.tar.gz
+  |     |$(eval $(toolchain-external-package))
+  |     `----
+  |
+  |- linux/Config.ext.in
+  |     |config BR2_LINUX_KERNEL_EXT_EXAMPLE_DRIVER
+  |     |    bool "example-external-driver"
+  |     |    help
+  |     |      Example external driver
+  |     |---
+  |- linux/linux-ext-example-driver.mk
+  |
+  |- configs/my-board_defconfig
+  |     |BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_BAR_42_PATH)/patches/"
+  |     |BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_BAR_42_PATH)/board/my-board/overlay/"
+  |     |BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_BAR_42_PATH)/board/my-board/post-image.sh"
+  |     |BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_BAR_42_PATH)/board/my-board/kernel.config"
+  |     `----
+  |
+  |- patches/linux/0001-some-change.patch
+  |- patches/linux/0002-some-other-change.patch
+  |- patches/busybox/0001-fix-something.patch
+  |
+  |- board/my-board/kernel.config
+  |- board/my-board/overlay/var/www/index.html
+  |- board/my-board/overlay/var/www/my.css
+  |- board/my-board/flash-image
+  `- board/my-board/post-image.sh
+        |#!/bin/sh
+        |generate-my-binary-image \
+        |    --root ${BINARIES_DIR}/rootfs.tar \
+        |    --kernel ${BINARIES_DIR}/zImage \
+        |    --dtb ${BINARIES_DIR}/my-board.dtb \
+        |    --output ${BINARIES_DIR}/image.bin
+        `----

The br2-external tree will then be visible in the menuconfig (with +the layout expanded):

External options  --->
+    *** Example br2-external tree (in /path/to/br2-ext-tree/)
+    [ ] pkg-1
+    [ ] pkg-2
+    (0x10AD) my-board flash address

If you are using more than one br2-external tree, it would look like +(with the layout expanded and the second one with name FOO_27 but no +desc: field in external.desc):

External options  --->
+    Example br2-external tree  --->
+        *** Example br2-external tree (in /path/to/br2-ext-tree)
+        [ ] pkg-1
+        [ ] pkg-2
+        (0x10AD) my-board flash address
+    FOO_27  --->
+        *** FOO_27 (in /path/to/another-br2-ext)
+        [ ] foo
+        [ ] bar

Additionally, the jpeg provider will be visible in the jpeg choice:

Target packages  --->
+    Libraries  --->
+        Graphics  --->
+            [*] jpeg support
+                jpeg variant ()  --->
+                    ( ) jpeg
+                    ( ) jpeg-turbo
+                        *** jpeg from: Example br2-external tree ***
+                    (X) my-jpeg
+                        *** jpeg from: FOO_27 ***
+                    ( ) another-jpeg

And similarly for the toolchains:

Toolchain  --->
+    Toolchain ()  --->
+        ( ) Custom toolchain
+            *** Toolchains from: Example br2-external tree ***
+        (X) my custom toolchain

Note. The toolchain options in toolchain/toolchain-external-mine/Config.in.options +will not appear in the Toolchain menu. They must be explicitly included +from within the br2-external’s top-level Config.in and will thus appear +in the External options menu.

9.3. Storing the Buildroot configuration

The Buildroot configuration can be stored using the command + make savedefconfig.

This strips the Buildroot configuration down by removing configuration +options that are at their default value. The result is stored in a file +called defconfig. If you want to save it in another place, change the +BR2_DEFCONFIG option in the Buildroot configuration itself, or call +make with make savedefconfig BR2_DEFCONFIG=<path-to-defconfig>.

The recommended place to store this defconfig is +configs/<boardname>_defconfig. If you follow this recommendation, the +configuration will be listed in make help and can be set again by +running make <boardname>_defconfig.

Alternatively, you can copy the file to any other place and rebuild with +make defconfig BR2_DEFCONFIG=<path-to-defconfig-file>.

9.4. Storing the configuration of other components

The configuration files for BusyBox, the Linux kernel, Barebox, U-Boot +and uClibc should be stored as well if changed. For each of these +components, a Buildroot configuration option exists to point to an input +configuration file, e.g. BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE. To store +their configuration, set these configuration options to a path where you +want to save the configuration files, and then use the helper targets +described below to actually store the configuration.

As explained in Section 9.1, “Recommended directory structure”, the recommended path to +store these configuration files is +board/<company>/<boardname>/foo.config.

Make sure that you create a configuration file before changing +the BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE etc. options. Otherwise, +Buildroot will try to access this config file, which doesn’t exist +yet, and will fail. You can create the configuration file by running +make linux-menuconfig etc.

Buildroot provides a few helper targets to make the saving of +configuration files easier.

  • +make linux-update-defconfig saves the linux configuration to the + path specified by BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE. It + simplifies the config file by removing default values. However, + this only works with kernels starting from 2.6.33. For earlier + kernels, use make linux-update-config. +
  • +make busybox-update-config saves the busybox configuration to the + path specified by BR2_PACKAGE_BUSYBOX_CONFIG. +
  • +make uclibc-update-config saves the uClibc configuration to the + path specified by BR2_UCLIBC_CONFIG. +
  • +make barebox-update-defconfig saves the barebox configuration to the + path specified by BR2_TARGET_BAREBOX_CUSTOM_CONFIG_FILE. +
  • +make uboot-update-defconfig saves the U-Boot configuration to the + path specified by BR2_TARGET_UBOOT_CUSTOM_CONFIG_FILE. +
  • +For at91bootstrap3, no helper exists so you have to copy the config + file manually to BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_CONFIG_FILE. +

9.5. Customizing the generated target filesystem

Besides changing the configuration through make *config, +there are a few other ways to customize the resulting target filesystem.

The two recommended methods, which can co-exist, are root filesystem +overlay(s) and post build script(s).

+Root filesystem overlays (BR2_ROOTFS_OVERLAY) +

A filesystem overlay is a tree of files that is copied directly + over the target filesystem after it has been built. To enable this + feature, set config option BR2_ROOTFS_OVERLAY (in the System + configuration menu) to the root of the overlay. You can even specify + multiple overlays, space-separated. If you specify a relative path, + it will be relative to the root of the Buildroot tree. Hidden + directories of version control systems, like .git, .svn, .hg, + etc., files called .empty and files ending in ~ are excluded from + the copy.

When BR2_ROOTFS_MERGED_USR is enabled, then the overlay must not + contain the /bin, /lib or /sbin directories, as Buildroot will + create them as symbolic links to the relevant folders in /usr. In + such a situation, should the overlay have any programs or libraries, + they should be placed in /usr/bin, /usr/sbin and /usr/lib.

As shown in Section 9.1, “Recommended directory structure”, the recommended path for + this overlay is board/<company>/<boardname>/rootfs-overlay.

+Post-build scripts (BR2_ROOTFS_POST_BUILD_SCRIPT) +

Post-build scripts are shell scripts called after Buildroot builds + all the selected software, but before the rootfs images are + assembled. To enable this feature, specify a space-separated list of + post-build scripts in config option BR2_ROOTFS_POST_BUILD_SCRIPT (in + the System configuration menu). If you specify a relative path, it + will be relative to the root of the Buildroot tree.

Using post-build scripts, you can remove or modify any file in your + target filesystem. You should, however, use this feature with care. + Whenever you find that a certain package generates wrong or unneeded + files, you should fix that package rather than work around it with some + post-build cleanup scripts.

As shown in Section 9.1, “Recommended directory structure”, the recommended path for + this script is board/<company>/<boardname>/post_build.sh.

The post-build scripts are run with the main Buildroot tree as current + working directory. The path to the target filesystem is passed as the + first argument to each script. If the config option + BR2_ROOTFS_POST_SCRIPT_ARGS is not empty, these arguments will be + passed to the script too. All the scripts will be passed the exact + same set of arguments, it is not possible to pass different sets of + arguments to each script.

In addition, you may also use these environment variables:

  • +BR2_CONFIG: the path to the Buildroot .config file +
  • +CONFIG_DIR: the directory containing the .config file, and + therefore the top-level Buildroot Makefile to use (which is + correct for both in-tree and out-of-tree builds) +
  • +HOST_DIR, STAGING_DIR, TARGET_DIR: see + Section 18.5.2, “generic-package reference” +
  • +BUILD_DIR: the directory where packages are extracted and built +
  • +BINARIES_DIR: the place where all binary files (aka images) are + stored +
  • +BASE_DIR: the base output directory +

Below three more methods of customizing the target filesystem are +described, but they are not recommended.

+Direct modification of the target filesystem +

For temporary modifications, you can modify the target filesystem + directly and rebuild the image. The target filesystem is available + under output/target/. After making your changes, run make to + rebuild the target filesystem image.

This method allows you to do anything to the target filesystem, but if + you need to clean your Buildroot tree using make clean, these + changes will be lost. Such cleaning is necessary in several cases, + refer to Section 8.2, “Understanding when a full rebuild is necessary” for details. This solution is therefore + only useful for quick tests: changes do not survive the make clean + command. Once you have validated your changes, you should make sure + that they will persist after a make clean, using a root filesystem + overlay or a post-build script.

+Custom target skeleton (BR2_ROOTFS_SKELETON_CUSTOM) +

The root filesystem image is created from a target skeleton, on top of + which all packages install their files. The skeleton is copied to the + target directory output/target before any package is built and + installed. The default target skeleton provides the standard Unix + filesystem layout and some basic init scripts and configuration files.

If the default skeleton (available under system/skeleton) does not + match your needs, you would typically use a root filesystem overlay or + post-build script to adapt it. However, if the default skeleton is + entirely different than what you need, using a custom skeleton may be + more suitable.

To enable this feature, enable config option + BR2_ROOTFS_SKELETON_CUSTOM and set BR2_ROOTFS_SKELETON_CUSTOM_PATH + to the path of your custom skeleton. Both options are available in the + System configuration menu. If you specify a relative path, it will + be relative to the root of the Buildroot tree.

Custom skeletons don’t need to contain the /bin, /lib or /sbin + directories, since they are created automatically during the build. + When BR2_ROOTFS_MERGED_USR is enabled, then the custom skeleton must + not contain the /bin, /lib or /sbin directories, as Buildroot + will create them as symbolic links to the relevant folders in /usr. + In such a situation, should the skeleton have any programs or + libraries, they should be placed in /usr/bin, /usr/sbin and + /usr/lib.

This method is not recommended because it duplicates the entire + skeleton, which prevents taking advantage of the fixes or improvements + brought to the default skeleton in later Buildroot releases.

+Post-fakeroot scripts (BR2_ROOTFS_POST_FAKEROOT_SCRIPT) +

When aggregating the final images, some parts of the process requires + root rights: creating device nodes in /dev, setting permissions or + ownership to files and directories… To avoid requiring actual root + rights, Buildroot uses fakeroot to simulate root rights. This is not + a complete substitute for actually being root, but is enough for what + Buildroot needs.

Post-fakeroot scripts are shell scripts that are called at the end of + the fakeroot phase, right before the filesystem image generator is + called. As such, they are called in the fakeroot context.

Post-fakeroot scripts can be useful in case you need to tweak the + filesystem to do modifications that are usually only available to the + root user.

Note: It is recommended to use the existing mechanisms to set file permissions + or create entries in /dev (see Section 9.5.1, “Setting file permissions and ownership and adding custom devices nodes”) or + to create users (see Section 9.6, “Adding custom user accounts”)

Note: The difference between post-build scripts (above) and fakeroot scripts, + is that post-build scripts are not called in the fakeroot context.

Note: Using fakeroot is not an absolute substitute for actually being root. + fakeroot only ever fakes the file access rights and types (regular, + block-or-char device…) and uid/gid; these are emulated in-memory.

9.5.1. Setting file permissions and ownership and adding custom devices nodes

Sometimes it is needed to set specific permissions or ownership on files +or device nodes. For example, certain files may need to be owned by +root. Since the post-build scripts are not run as root, you cannot do +such changes from there unless you use an explicit fakeroot from the +post-build script.

Instead, Buildroot provides support for so-called permission tables. +To use this feature, set config option BR2_ROOTFS_DEVICE_TABLE to a +space-separated list of permission tables, regular text files following +the makedev syntax.

If you are using a static device table (i.e. not using devtmpfs, +mdev, or (e)udev) then you can add device nodes using the same +syntax, in so-called device tables. To use this feature, set config +option BR2_ROOTFS_STATIC_DEVICE_TABLE to a space-separated list of +device tables.

As shown in Section 9.1, “Recommended directory structure”, the recommended location for +such files is board/<company>/<boardname>/.

It should be noted that if the specific permissions or device nodes are +related to a specific application, you should set variables +FOO_PERMISSIONS and FOO_DEVICES in the package’s .mk file instead +(see Section 18.5.2, “generic-package reference”).

9.6. Adding custom user accounts

Sometimes it is needed to add specific users in the target system. +To cover this requirement, Buildroot provides support for so-called +users tables. To use this feature, set config option +BR2_ROOTFS_USERS_TABLES to a space-separated list of users tables, +regular text files following the makeusers syntax.

As shown in Section 9.1, “Recommended directory structure”, the recommended location for +such files is board/<company>/<boardname>/.

It should be noted that if the custom users are related to a specific +application, you should set variable FOO_USERS in the package’s .mk +file instead (see Section 18.5.2, “generic-package reference”).

9.7. Customization after the images have been created

While post-build scripts (Section 9.5, “Customizing the generated target filesystem”) are run before +building the filesystem image, kernel and bootloader, post-image +scripts can be used to perform some specific actions after all images +have been created.

Post-image scripts can for example be used to automatically extract your +root filesystem tarball in a location exported by your NFS server, or +to create a special firmware image that bundles your root filesystem and +kernel image, or any other custom action required for your project.

To enable this feature, specify a space-separated list of post-image +scripts in config option BR2_ROOTFS_POST_IMAGE_SCRIPT (in the System +configuration menu). If you specify a relative path, it will be +relative to the root of the Buildroot tree.

Just like post-build scripts, post-image scripts are run with the main +Buildroot tree as current working directory. The path to the images +output directory is passed as the first argument to each script. If the +config option BR2_ROOTFS_POST_SCRIPT_ARGS is not empty, these +arguments will be passed to the script too. All the scripts will be +passed the exact same set of arguments, it is not possible to pass +different sets of arguments to each script.

Again just like for the post-build scripts, the scripts have access to +the environment variables BR2_CONFIG, HOST_DIR, STAGING_DIR, +TARGET_DIR, BUILD_DIR, BINARIES_DIR, CONFIG_DIR and +BASE_DIR.

The post-image scripts will be executed as the user that executes +Buildroot, which should normally not be the root user. Therefore, any +action requiring root permissions in one of these scripts will require +special handling (usage of fakeroot or sudo), which is left to the +script developer.

9.8. Adding project-specific patches

It is sometimes useful to apply extra patches to packages - on top of +those provided in Buildroot. This might be used to support custom +features in a project, for example, or when working on a new +architecture.

The BR2_GLOBAL_PATCH_DIR configuration option can be used to specify +a space separated list of one or more directories containing package +patches.

For a specific version <packageversion> of a specific package +<packagename>, patches are applied from BR2_GLOBAL_PATCH_DIR as +follows:

  1. +For every directory - <global-patch-dir> - that exists in + BR2_GLOBAL_PATCH_DIR, a <package-patch-dir> will be determined as + follows: +

    • +<global-patch-dir>/<packagename>/<packageversion>/ if the + directory exists. +
    • +Otherwise, <global-patch-dir>/<packagename> if the directory + exists. +
  2. +Patches will then be applied from a <package-patch-dir> as + follows: +

    • +If a series file exists in the package directory, then patches are + applied according to the series file; +
    • +Otherwise, patch files matching *.patch are applied in + alphabetical order. So, to ensure they are applied in the right + order, it is highly recommended to name the patch files like this: + <number>-<description>.patch, where <number> refers to the + apply order. +

For information about how patches are applied for a package, see +Section 19.2, “How patches are applied”

The BR2_GLOBAL_PATCH_DIR option is the preferred method for +specifying a custom patch directory for packages. It can be used to +specify a patch directory for any package in buildroot. It should also +be used in place of the custom patch directory options that are +available for packages such as U-Boot and Barebox. By doing this, it +will allow a user to manage their patches from one top-level +directory.

The exception to BR2_GLOBAL_PATCH_DIR being the preferred method for +specifying custom patches is BR2_LINUX_KERNEL_PATCH. +BR2_LINUX_KERNEL_PATCH should be used to specify kernel patches that +are available at a URL. Note: BR2_LINUX_KERNEL_PATCH specifies kernel +patches that are applied after patches available in BR2_GLOBAL_PATCH_DIR, +as it is done from a post-patch hook of the Linux package.

9.9. Adding project-specific packages

In general, any new package should be added directly in the package +directory and submitted to the Buildroot upstream project. How to add +packages to Buildroot in general is explained in full detail in +Chapter 18, Adding new packages to Buildroot and will not be repeated here. However, your +project may need some proprietary packages that cannot be upstreamed. +This section will explain how you can keep such project-specific +packages in a project-specific directory.

As shown in Section 9.1, “Recommended directory structure”, the recommended location for +project-specific packages is package/<company>/. If you are using the +br2-external tree feature (see Section 9.2, “Keeping customizations outside of Buildroot”) the recommended +location is to put them in a sub-directory named package/ in your +br2-external tree.

However, Buildroot will not be aware of the packages in this location, +unless we perform some additional steps. As explained in +Chapter 18, Adding new packages to Buildroot, a package in Buildroot basically consists of two +files: a .mk file (describing how to build the package) and a +Config.in file (describing the configuration options for this +package).

Buildroot will automatically include the .mk files in first-level +subdirectories of the package directory (using the pattern +package/*/*.mk). If we want Buildroot to include .mk files from +deeper subdirectories (like package/<company>/package1/) then we +simply have to add a .mk file in a first-level subdirectory that +includes these additional .mk files. Therefore, create a file +package/<company>/<company>.mk with following contents (assuming you +have only one extra directory level below package/<company>/):

include $(sort $(wildcard package/<company>/*/*.mk))

For the Config.in files, create a file package/<company>/Config.in +that includes the Config.in files of all your packages. An exhaustive +list has to be provided since wildcards are not supported in the source command of kconfig. +For example:

source "package/<company>/package1/Config.in"
+source "package/<company>/package2/Config.in"

Include this new file package/<company>/Config.in from +package/Config.in, preferably in a company-specific menu to make +merges with future Buildroot versions easier.

If using a br2-external tree, refer to Section 9.2, “Keeping customizations outside of Buildroot” for how +to fill in those files.

9.10. Quick guide to storing your project-specific customizations

Earlier in this chapter, the different methods for making +project-specific customizations have been described. This section will +now summarize all this by providing step-by-step instructions to storing your +project-specific customizations. Clearly, the steps that are not relevant to +your project can be skipped.

  1. +make menuconfig to configure toolchain, packages and kernel. +
  2. +make linux-menuconfig to update the kernel config, similar for + other configuration like busybox, uclibc, … +
  3. +mkdir -p board/<manufacturer>/<boardname> +
  4. +Set the following options to board/<manufacturer>/<boardname>/<package>.config + (as far as they are relevant): +

    • +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE +
    • +BR2_PACKAGE_BUSYBOX_CONFIG +
    • +BR2_UCLIBC_CONFIG +
    • +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_CONFIG_FILE +
    • +BR2_TARGET_BAREBOX_CUSTOM_CONFIG_FILE +
    • +BR2_TARGET_UBOOT_CUSTOM_CONFIG_FILE +
  5. +Write the configuration files: +

    • +make linux-update-defconfig +
    • +make busybox-update-config +
    • +make uclibc-update-config +
    • +cp <output>/build/at91bootstrap3-*/.config + board/<manufacturer>/<boardname>/at91bootstrap3.config +
    • +make barebox-update-defconfig +
    • +make uboot-update-defconfig +
  6. +Create board/<manufacturer>/<boardname>/rootfs-overlay/ and fill it + with additional files you need on your rootfs, e.g. + board/<manufacturer>/<boardname>/rootfs-overlay/etc/inittab. + Set BR2_ROOTFS_OVERLAY + to board/<manufacturer>/<boardname>/rootfs-overlay. +
  7. +Create a post-build script + board/<manufacturer>/<boardname>/post_build.sh. Set + BR2_ROOTFS_POST_BUILD_SCRIPT to + board/<manufacturer>/<boardname>/post_build.sh +
  8. +If additional setuid permissions have to be set or device nodes have + to be created, create board/<manufacturer>/<boardname>/device_table.txt + and add that path to BR2_ROOTFS_DEVICE_TABLE. +
  9. +If additional user accounts have to be created, create + board/<manufacturer>/<boardname>/users_table.txt and add that path + to BR2_ROOTFS_USERS_TABLES. +
  10. +To add custom patches to certain packages, set BR2_GLOBAL_PATCH_DIR + to board/<manufacturer>/<boardname>/patches/ and add your patches + for each package in a subdirectory named after the package. Each + patch should be called <packagename>-<num>-<description>.patch. +
  11. +Specifically for the Linux kernel, there also exists the option + BR2_LINUX_KERNEL_PATCH with as main advantage that it can also + download patches from a URL. If you do not need this, + BR2_GLOBAL_PATCH_DIR is preferred. U-Boot, Barebox, at91bootstrap + and at91bootstrap3 also have separate options, but these do not + provide any advantage over BR2_GLOBAL_PATCH_DIR and will likely be + removed in the future. +
  12. +If you need to add project-specific packages, create + package/<manufacturer>/ and place your packages in that + directory. Create an overall <manufacturer>.mk file that + includes the .mk files of all your packages. Create an overall + Config.in file that sources the Config.in files of all your + packages. Include this Config.in file from Buildroot’s + package/Config.in file. +
  13. +make savedefconfig to save the buildroot configuration. +
  14. +cp defconfig configs/<boardname>_defconfig +

Chapter 10. Using SELinux in Buildroot

SELinux is a Linux kernel security module +enforcing access control policies. In addition to the traditional file +permissions and access control lists, SELinux allows to write rules +for users or processes to access specific functions of resources +(files, sockets…).

SELinux has three modes of operation:

  • +Disabled: the policy is not applied +
  • +Permissive: the policy is applied, and non-authorized actions are + simply logged. This mode is often used for troubleshooting SELinux + issues. +
  • +Enforcing: the policy is applied, and non-authorized actions are + denied +

In Buildroot the mode of operation is controlled by the +BR2_PACKAGE_REFPOLICY_POLICY_STATE_* configuration options. The +Linux kernel also has various configuration options that affect how +SELinux is enabled (see security/selinux/Kconfig in the Linux +kernel sources).

By default in Buildroot the SELinux policy is provided by the +upstream refpolicy +project, enabled with BR2_PACKAGE_REFPOLICY.

10.1. Enabling SELinux support

To have proper support for SELinux in a Buildroot generated system, +the following configuration options must be enabled:

  • +BR2_PACKAGE_LIBSELINUX +
  • +BR2_PACKAGE_REFPOLICY +

In addition, your filesystem image format must support extended +attributes.

10.2. SELinux policy tweaking

The SELinux refpolicy contains modules that can be enabled or +disabled when being built. Each module provide a number of SELinux +rules. In Buildroot the non-base modules are disabled by default and +several ways to enable such modules are provided:

  • +Packages can enable a list of SELinux modules within the refpolicy using + the <packagename>_SELINUX_MODULES variable. +
  • +Packages can provide additional SELinux modules by putting them (.fc, .if + and .te files) in package/<packagename>/selinux/. +
  • +Extra SELinux modules can be added in directories pointed by the + BR2_REFPOLICY_EXTRA_MODULES_DIRS configuration option. +
  • +Additional modules in the refpolicy can be enabled if listed in the + BR2_REFPOLICY_EXTRA_MODULES_DEPENDENCIES configuration option. +

Buildroot also allows to completely override the refpolicy. This +allows to provide a full custom policy designed specifically for a +given system. When going this way, all of the above mechanisms are +disabled: no extra SElinux module is added to the policy, and all +the available modules within the custom policy are enabled and built +into the final binary policy. The custom policy must be a fork of the +official refpolicy.

In order to fully override the refpolicy the following configuration +variables have to be set:

  • +BR2_PACKAGE_REFPOLICY_CUSTOM_GIT +
  • +BR2_PACKAGE_REFPOLICY_CUSTOM_REPO_URL +
  • +BR2_PACKAGE_REFPOLICY_CUSTOM_REPO_VERSION +

Chapter 11. Frequently Asked Questions & Troubleshooting

11.1. The boot hangs after Starting network…

If the boot process seems to hang after the following messages +(messages not necessarily exactly similar, depending on the list of +packages selected):

Freeing init memory: 3972K
+Initializing random number generator... done.
+Starting network...
+Starting dropbear sshd: generating rsa key... generating dsa key... OK

then it means that your system is running, but didn’t start a shell on +the serial console. In order to have the system start a shell on your +serial console, you have to go into the Buildroot configuration, in +System configuration, modify Run a getty (login prompt) after boot +and set the appropriate port and baud rate in the getty options +submenu. This will automatically tune the /etc/inittab file of the +generated system so that a shell starts on the correct serial port.

11.2. Why is there no compiler on the target?

It has been decided that support for the native compiler on the +target would be stopped from the Buildroot-2012.11 release because:

  • +this feature was neither maintained nor tested, and often broken; +
  • +this feature was only available for Buildroot toolchains; +
  • +Buildroot mostly targets small or very small target hardware + with limited resource onboard (CPU, ram, mass-storage), for which + compiling on the target does not make much sense; +
  • +Buildroot aims at easing the cross-compilation, making native + compilation on the target unnecessary. +

If you need a compiler on your target anyway, then Buildroot is not +suitable for your purpose. In such case, you need a real +distribution and you should opt for something like:

11.3. Why are there no development files on the target?

Since there is no compiler available on the target (see +Section 11.2, “Why is there no compiler on the target?”), it does not make sense to waste +space with headers or static libraries.

Therefore, those files are always removed from the target since the +Buildroot-2012.11 release.

11.4. Why is there no documentation on the target?

Because Buildroot mostly targets small or very small target +hardware with limited resource onboard (CPU, ram, mass-storage), it +does not make sense to waste space with the documentation data.

If you need documentation data on your target anyway, then Buildroot +is not suitable for your purpose, and you should look for a real +distribution (see: Section 11.2, “Why is there no compiler on the target?”).

11.5. Why are some packages not visible in the Buildroot config menu?

If a package exists in the Buildroot tree and does not appear in the +config menu, this most likely means that some of the package’s +dependencies are not met.

To know more about the dependencies of a package, search for the +package symbol in the config menu (see Section 8.1, “make tips”).

Then, you may have to recursively enable several options (which +correspond to the unmet dependencies) to finally be able to select +the package.

If the package is not visible due to some unmet toolchain options, +then you should certainly run a full rebuild (see Section 8.1, “make tips” for +more explanations).

11.6. Why not use the target directory as a chroot directory?

There are plenty of reasons to not use the target directory a chroot +one, among these:

  • +file ownerships, modes and permissions are not correctly set in the + target directory; +
  • +device nodes are not created in the target directory. +

For these reasons, commands run through chroot, using the target +directory as the new root, will most likely fail.

If you want to run the target filesystem inside a chroot, or as an NFS +root, then use the tarball image generated in images/ and extract it +as root.

11.7. Why doesn’t Buildroot generate binary packages (.deb, .ipkg…)?

One feature that is often discussed on the Buildroot list is the +general topic of "package management". To summarize, the idea +would be to add some tracking of which Buildroot package installs +what files, with the goals of:

  • +being able to remove files installed by a package when this package + gets unselected from the menuconfig; +
  • +being able to generate binary packages (ipk or other format) that + can be installed on the target without re-generating a new root + filesystem image. +

In general, most people think it is easy to do: just track which package +installed what and remove it when the package is unselected. However, it +is much more complicated than that:

  • +It is not only about the target/ directory, but also the sysroot in + host/<tuple>/sysroot and the host/ directory itself. All files + installed in those directories by various packages must be tracked. +
  • +When a package is unselected from the configuration, it is not + sufficient to remove just the files it installed. One must also + remove all its reverse dependencies (i.e. packages relying on it) + and rebuild all those packages. For example, package A depends + optionally on the OpenSSL library. Both are selected, and Buildroot + is built. Package A is built with crypto support using OpenSSL. + Later on, OpenSSL gets unselected from the configuration, but + package A remains (since OpenSSL is an optional dependency, this + is possible.) If only OpenSSL files are removed, then the files + installed by package A are broken: they use a library that is no + longer present on the target. Although this is technically doable, + it adds a lot of complexity to Buildroot, which goes against the + simplicity we try to stick to. +
  • +In addition to the previous problem, there is the case where the + optional dependency is not even known to Buildroot. For example, + package A in version 1.0 never used OpenSSL, but in version 2.0 it + automatically uses OpenSSL if available. If the Buildroot .mk file + hasn’t been updated to take this into account, then package A will + not be part of the reverse dependencies of OpenSSL and will not be + removed and rebuilt when OpenSSL is removed. For sure, the .mk file + of package A should be fixed to mention this optional dependency, + but in the mean time, you can have non-reproducible behaviors. +
  • +The request is to also allow changes in the menuconfig to be + applied on the output directory without having to rebuild + everything from scratch. However, this is very difficult to achieve + in a reliable way: what happens when the suboptions of a package + are changed (we would have to detect this, and rebuild the package + from scratch and potentially all its reverse dependencies), what + happens if toolchain options are changed, etc. At the moment, what + Buildroot does is clear and simple so its behaviour is very + reliable and it is easy to support users. If configuration changes + done in menuconfig are applied after the next make, then it has to + work correctly and properly in all situations, and not have some + bizarre corner cases. The risk is to get bug reports like "I have + enabled package A, B and C, then ran make, then disabled package + C and enabled package D and ran make, then re-enabled package C + and enabled package E and then there is a build failure". Or worse + "I did some configuration, then built, then did some changes, + built, some more changes, built, some more changes, built, and now + it fails, but I don’t remember all the changes I did and in which + order". This will be impossible to support. +

For all these reasons, the conclusion is that adding tracking of +installed files to remove them when the package is unselected, or to +generate a repository of binary packages, is something that is very +hard to achieve reliably and will add a lot of complexity.

On this matter, the Buildroot developers make this position statement:

  • +Buildroot strives to make it easy to generate a root filesystem (hence + the name, by the way.) That is what we want to make Buildroot good at: + building root filesystems. +
  • +Buildroot is not meant to be a distribution (or rather, a distribution + generator.) It is the opinion of most Buildroot developers that this + is not a goal we should pursue. We believe that there are other tools + better suited to generate a distro than Buildroot is. For example, + Open Embedded, or openWRT, + are such tools. +
  • +We prefer to push Buildroot in a direction that makes it easy (or even + easier) to generate complete root filesystems. This is what makes + Buildroot stands out in the crowd (among other things, of course!) +
  • +We believe that for most embedded Linux systems, binary packages are + not necessary, and potentially harmful. When binary packages are + used, it means that the system can be partially upgraded, which + creates an enormous number of possible combinations of package + versions that should be tested before doing the upgrade on the + embedded device. On the other hand, by doing complete system + upgrades by upgrading the entire root filesystem image at once, + the image deployed to the embedded system is guaranteed to really + be the one that has been tested and validated. +

11.8. How to speed-up the build process?

Since Buildroot often involves doing full rebuilds of the entire +system that can be quite long, we provide below a number of tips to +help reduce the build time:

  • +Use a pre-built external toolchain instead of the default Buildroot + internal toolchain. By using a pre-built Linaro toolchain (on ARM) + or a Sourcery CodeBench toolchain (for ARM, x86, x86-64, MIPS, + etc.), you will save the build time of the toolchain at each + complete rebuild, approximately 15 to 20 minutes. Note that + temporarily using an external toolchain does not prevent you to + switch back to an internal toolchain (that may provide a higher + level of customization) once the rest of your system is working; +
  • +Use the ccache compiler cache (see: Section 8.14.3, “Using ccache in Buildroot”); +
  • +Learn about rebuilding only the few packages you actually care + about (see Section 8.3, “Understanding how to rebuild packages”), but beware that sometimes full + rebuilds are anyway necessary (see Section 8.2, “Understanding when a full rebuild is necessary”); +
  • +Make sure you are not using a virtual machine for the Linux system + used to run Buildroot. Most of the virtual machine technologies are + known to cause a significant performance impact on I/O, which is + really important for building source code; +
  • +Make sure that you’re using only local files: do not attempt to do + a build over NFS, which significantly slows down the build. Having + the Buildroot download folder available locally also helps a bit. +
  • +Buy new hardware. SSDs and lots of RAM are key to speeding up the + builds. +
  • +Experiment with top-level parallel build, see + Section 8.12, “Top-level parallel build”. +

Chapter 12. Known issues

  • +It is not possible to pass extra linker options via BR2_TARGET_LDFLAGS + if such options contain a $ sign. For example, the following is known + to break: BR2_TARGET_LDFLAGS="-Wl,-rpath='$ORIGIN/../lib'" +
  • +The libffi package is not supported on the SuperH 2 and ARC + architectures. +
  • +The prboom package triggers a compiler failure with the SuperH 4 + compiler from Sourcery CodeBench, version 2012.09. +

Chapter 13. Legal notice and licensing

13.1. Complying with open source licenses

All of the end products of Buildroot (toolchain, root filesystem, kernel, +bootloaders) contain open source software, released under various licenses.

Using open source software gives you the freedom to build rich embedded +systems, choosing from a wide range of packages, but also imposes some +obligations that you must know and honour. +Some licenses require you to publish the license text in the documentation of +your product. Others require you to redistribute the source code of the +software to those that receive your product.

The exact requirements of each license are documented in each package, and +it is your responsibility (or that of your legal office) to comply with those +requirements. +To make this easier for you, Buildroot can collect for you some material you +will probably need. To produce this material, after you have configured +Buildroot with make menuconfig, make xconfig or make gconfig, run:

make legal-info

Buildroot will collect legally-relevant material in your output directory, +under the legal-info/ subdirectory. +There you will find:

  • +A README file, that summarizes the produced material and contains warnings + about material that Buildroot could not produce. +
  • +buildroot.config: this is the Buildroot configuration file that is usually + produced with make menuconfig, and which is necessary to reproduce the + build. +
  • +The source code for all packages; this is saved in the sources/ and + host-sources/ subdirectories for target and host packages respectively. + The source code for packages that set <PKG>_REDISTRIBUTE = NO will not be + saved. + Patches that were applied are also saved, along with a file named series + that lists the patches in the order they were applied. Patches are under the + same license as the files that they modify. + Note: Buildroot applies additional patches to Libtool scripts of + autotools-based packages. These patches can be found under + support/libtool in the Buildroot source and, due to technical + limitations, are not saved with the package sources. You may need to + collect them manually. +
  • +A manifest file (one for host and one for target packages) listing the + configured packages, their version, license and related information. + Some of this information might not be defined in Buildroot; such items are + marked as "unknown". +
  • +The license texts of all packages, in the licenses/ and host-licenses/ + subdirectories for target and host packages respectively. + If the license file(s) are not defined in Buildroot, the file is not produced + and a warning in the README indicates this. +

Please note that the aim of the legal-info feature of Buildroot is to +produce all the material that is somehow relevant for legal compliance with the +package licenses. Buildroot does not try to produce the exact material that +you must somehow make public. Certainly, more material is produced than is +needed for a strict legal compliance. For example, it produces the source code +for packages released under BSD-like licenses, that you are not required to +redistribute in source form.

Moreover, due to technical limitations, Buildroot does not produce some +material that you will or may need, such as the toolchain source code for +some of the external toolchains and the Buildroot source code itself. +When you run make legal-info, Buildroot produces warnings in the README +file to inform you of relevant material that could not be saved.

Finally, keep in mind that the output of make legal-info is based on +declarative statements in each of the packages recipes. The Buildroot +developers try to do their best to keep those declarative statements as +accurate as possible, to the best of their knowledge. However, it is very +well possible that those declarative statements are not all fully accurate +nor exhaustive. You (or your legal department) have to check the output +of make legal-info before using it as your own compliance delivery. See +the NO WARRANTY clauses (clauses 11 and 12) in the COPYING file at the +root of the Buildroot distribution.

13.2. Complying with the Buildroot license

Buildroot itself is an open source software, released under the +GNU General +Public License, version 2 or (at your option) any later version, with +the exception of the package patches detailed below. +However, being a build system, it is not normally part of the end product: +if you develop the root filesystem, kernel, bootloader or toolchain for a +device, the code of Buildroot is only present on the development machine, not +in the device storage.

Nevertheless, the general view of the Buildroot developers is that you should +release the Buildroot source code along with the source code of other packages +when releasing a product that contains GPL-licensed software. +This is because the +GNU GPL +defines the "complete source code" for an executable work as "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". +Buildroot is part of the scripts used to control compilation and +installation of the executable, and as such it is considered part of the +material that must be redistributed.

Keep in mind that this is only the Buildroot developers' opinion, and you +should consult your legal department or lawyer in case of any doubt.

13.2.1. Patches to packages

Buildroot also bundles patch files, which are applied to the sources +of the various packages. Those patches are not covered by the license +of Buildroot. Instead, they are covered by the license of the software +to which the patches are applied. When said software is available +under multiple licenses, the Buildroot patches are only provided under +the publicly accessible licenses.

See Chapter 19, Patching a package for the technical details.

Chapter 14. Beyond Buildroot

14.1. Boot the generated images

14.1.1. NFS boot

To achieve NFS-boot, enable tar root filesystem in the Filesystem +images menu.

After a complete build, just run the following commands to setup the +NFS-root directory:

sudo tar -xavf /path/to/output_dir/rootfs.tar -C /path/to/nfs_root_dir

Remember to add this path to /etc/exports.

Then, you can execute a NFS-boot from your target.

14.1.2. Live CD

To build a live CD image, enable the iso image option in the +Filesystem images menu. Note that this option is only available on +the x86 and x86-64 architectures, and if you are building your kernel +with Buildroot.

You can build a live CD image with either IsoLinux, Grub or Grub 2 as +a bootloader, but only Isolinux supports making this image usable both +as a live CD and live USB (through the Build hybrid image option).

You can test your live CD image using QEMU:

qemu-system-i386 -cdrom output/images/rootfs.iso9660

Or use it as a hard-drive image if it is a hybrid ISO:

qemu-system-i386 -hda output/images/rootfs.iso9660

It can be easily flashed to a USB drive with dd:

dd if=output/images/rootfs.iso9660 of=/dev/sdb

14.2. Chroot

If you want to chroot in a generated image, then there are few thing +you should be aware of:

  • +you should setup the new root from the tar root filesystem image; +
  • +either the selected target architecture is compatible with your host + machine, or you should use some qemu-* binary and correctly set it + within the binfmt properties to be able to run the binaries built + for the target on your host machine; +
  • +Buildroot does not currently provide host-qemu and binfmt + correctly built and set for that kind of use. +

Part III. Developer guide

Chapter 15. How Buildroot works

As mentioned above, Buildroot is basically a set of Makefiles that +download, configure, and compile software with the correct options. It +also includes patches for various software packages - mainly the ones +involved in the cross-compilation toolchain (gcc, binutils and +uClibc).

There is basically one Makefile per software package, and they are +named with the .mk extension. Makefiles are split into many different +parts.

  • +The toolchain/ directory contains the Makefiles + and associated files for all software related to the + cross-compilation toolchain: binutils, gcc, gdb, + kernel-headers and uClibc. +
  • +The arch/ directory contains the definitions for all the processor + architectures that are supported by Buildroot. +
  • +The package/ directory contains the Makefiles and + associated files for all user-space tools and libraries that Buildroot + can compile and add to the target root filesystem. There is one + sub-directory per package. +
  • +The linux/ directory contains the Makefiles and associated files for + the Linux kernel. +
  • +The boot/ directory contains the Makefiles and associated files for + the bootloaders supported by Buildroot. +
  • +The system/ directory contains support for system integration, e.g. + the target filesystem skeleton and the selection of an init system. +
  • +The fs/ directory contains the Makefiles and + associated files for software related to the generation of the + target root filesystem image. +

Each directory contains at least 2 files:

  • +something.mk is the Makefile that downloads, configures, + compiles and installs the package something. +
  • +Config.in is a part of the configuration tool + description file. It describes the options related to the + package. +

The main Makefile performs the following steps (once the +configuration is done):

  • +Create all the output directories: staging, target, build, + etc. in the output directory (output/ by default, + another value can be specified using O=) +
  • +Generate the toolchain target. When an internal toolchain is used, this + means generating the cross-compilation toolchain. When an external + toolchain is used, this means checking the features of the external + toolchain and importing it into the Buildroot environment. +
  • +Generate all the targets listed in the TARGETS variable. This + variable is filled by all the individual components' + Makefiles. Generating these targets will trigger the compilation of + the userspace packages (libraries, programs), the kernel, the + bootloader and the generation of the root filesystem images, + depending on the configuration. +

Chapter 16. Coding style

Overall, these coding style rules are here to help you to add new files in +Buildroot or refactor existing ones.

If you slightly modify some existing file, the important thing is +to keep the consistency of the whole file, so you can:

  • +either follow the potentially deprecated coding style used in this +file, +
  • +or entirely rework it in order to make it comply with these rules. +

16.1. Config.in file

Config.in files contain entries for almost anything configurable in +Buildroot.

An entry has the following pattern:

config BR2_PACKAGE_LIBFOO
+        bool "libfoo"
+        depends on BR2_PACKAGE_LIBBAZ
+        select BR2_PACKAGE_LIBBAR
+        help
+          This is a comment that explains what libfoo is. The help text
+          should be wrapped.
+
+          http://foosoftware.org/libfoo/
  • +The bool, depends on, select and help lines are indented + with one tab. +
  • +The help text itself should be indented with one tab and two + spaces. +
  • +The help text should be wrapped to fit 72 columns, where tab counts + for 8, so 62 characters in the text itself. +

The Config.in files are the input for the configuration tool +used in Buildroot, which is the regular Kconfig. For further +details about the Kconfig language, refer to +http://kernel.org/doc/Documentation/kbuild/kconfig-language.txt.

16.2. The .mk file

  • +Header: The file starts with a header. It contains the module name, +preferably in lowercase, enclosed between separators made of 80 hashes. A +blank line is mandatory after the header: +

    ################################################################################
    +#
    +# libfoo
    +#
    +################################################################################
  • +Assignment: use = preceded and followed by one space: +

    LIBFOO_VERSION = 1.0
    +LIBFOO_CONF_OPTS += --without-python-support

    Do not align the = signs.

  • +Indentation: use tab only: +

    define LIBFOO_REMOVE_DOC
    +        $(RM) -fr $(TARGET_DIR)/usr/share/libfoo/doc \
    +                $(TARGET_DIR)/usr/share/man/man3/libfoo*
    +endef

    Note that commands inside a define block should always start with a tab, +so make recognizes them as commands.

  • +Optional dependency: +

    • +Prefer multi-line syntax. +

      YES:

      ifeq ($(BR2_PACKAGE_PYTHON),y)
      +LIBFOO_CONF_OPTS += --with-python-support
      +LIBFOO_DEPENDENCIES += python
      +else
      +LIBFOO_CONF_OPTS += --without-python-support
      +endif

      NO:

      LIBFOO_CONF_OPTS += --with$(if $(BR2_PACKAGE_PYTHON),,out)-python-support
      +LIBFOO_DEPENDENCIES += $(if $(BR2_PACKAGE_PYTHON),python,)
    • +Keep configure options and dependencies close together. +
  • +Optional hooks: keep hook definition and assignment together in one + if block. +

    YES:

    ifneq ($(BR2_LIBFOO_INSTALL_DATA),y)
    +define LIBFOO_REMOVE_DATA
    +        $(RM) -fr $(TARGET_DIR)/usr/share/libfoo/data
    +endef
    +LIBFOO_POST_INSTALL_TARGET_HOOKS += LIBFOO_REMOVE_DATA
    +endif

    NO:

    define LIBFOO_REMOVE_DATA
    +        $(RM) -fr $(TARGET_DIR)/usr/share/libfoo/data
    +endef
    +
    +ifneq ($(BR2_LIBFOO_INSTALL_DATA),y)
    +LIBFOO_POST_INSTALL_TARGET_HOOKS += LIBFOO_REMOVE_DATA
    +endif

16.3. The documentation

The documentation uses the +asciidoc format.

For further details about the asciidoc syntax, refer to +http://www.methods.co.nz/asciidoc/userguide.html.

16.4. Support scripts

Some scripts in the support/ and utils/ directories are written in +Python and should follow the +PEP8 Style Guide for Python Code.

Chapter 17. Adding support for a particular board

Buildroot contains basic configurations for several publicly available +hardware boards, so that users of such a board can easily build a system +that is known to work. You are welcome to add support for other boards +to Buildroot too.

To do so, you need to create a normal Buildroot configuration that +builds a basic system for the hardware: (internal) toolchain, kernel, +bootloader, filesystem and a simple BusyBox-only userspace. No specific +package should be selected: the configuration should be as minimal as +possible, and should only build a working basic BusyBox system for the +target platform. You can of course use more complicated configurations +for your internal projects, but the Buildroot project will only +integrate basic board configurations. This is because package +selections are highly application-specific.

Once you have a known working configuration, run make +savedefconfig. This will generate a minimal defconfig file at the +root of the Buildroot source tree. Move this file into the configs/ +directory, and rename it <boardname>_defconfig. If the configuration +is a bit more complicated, it is nice to manually reformat it and +separate it into sections, with a comment before each section. Typical +sections are Architecture, Toolchain options (typically just linux +headers version), Firmware, Bootloader, Kernel, and Filesystem.

Always use fixed versions or commit hashes for the different +components, not the "latest" version. For example, set +BR2_LINUX_KERNEL_CUSTOM_VERSION=y and +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE to the kernel version you tested +with.

It is recommended to use as much as possible upstream versions of the +Linux kernel and bootloaders, and to use as much as possible default +kernel and bootloader configurations. If they are incorrect for your +board, or no default exists, we encourage you to send fixes to the +corresponding upstream projects.

However, in the mean time, you may want to store kernel or bootloader +configuration or patches specific to your target platform. To do so, +create a directory board/<manufacturer> and a subdirectory +board/<manufacturer>/<boardname>. You can then store your patches +and configurations in these directories, and reference them from the main +Buildroot configuration. Refer to Chapter 9, Project-specific customization for more details.

Chapter 18. Adding new packages to Buildroot

This section covers how new packages (userspace libraries or +applications) can be integrated into Buildroot. It also shows how +existing packages are integrated, which is needed for fixing issues or +tuning their configuration.

When you add a new package, be sure to test it in various conditions +(see Section 18.24.3, “How to test your package”) and also check it for coding style (see +Section 18.24.2, “How to check the coding style”).

18.1. Package directory

First of all, create a directory under the package directory for +your software, for example libfoo.

Some packages have been grouped by topic in a sub-directory: +x11r7, qt5 and gstreamer. If your package fits in +one of these categories, then create your package directory in these. +New subdirectories are discouraged, however.

18.2. Config files

For the package to be displayed in the configuration tool, you need to +create a Config file in your package directory. There are two types: +Config.in and Config.in.host.

18.2.1. Config.in file

For packages used on the target, create a file named Config.in. This +file will contain the option descriptions related to our libfoo software +that will be used and displayed in the configuration tool. It should basically +contain:

config BR2_PACKAGE_LIBFOO
+        bool "libfoo"
+        help
+          This is a comment that explains what libfoo is. The help text
+          should be wrapped.
+
+          http://foosoftware.org/libfoo/

The bool line, help line and other metadata information about the +configuration option must be indented with one tab. The help text +itself should be indented with one tab and two spaces, lines should +be wrapped to fit 72 columns, where tab counts for 8, so 62 characters +in the text itself. The help text must mention the upstream URL of the +project after an empty line.

As a convention specific to Buildroot, the ordering of the attributes +is as follows:

  1. +The type of option: bool, string… with the prompt +
  2. +If needed, the default value(s) +
  3. +Any dependencies on the target in depends on form +
  4. +Any dependencies on the toolchain in depends on form +
  5. +Any dependencies on other packages in depends on form +
  6. +Any dependency of the select form +
  7. +The help keyword and help text. +

You can add other sub-options into a if BR2_PACKAGE_LIBFOO…endif +statement to configure particular things in your software. You can look at +examples in other packages. The syntax of the Config.in file is the same +as the one for the kernel Kconfig file. The documentation for this syntax is +available at http://kernel.org/doc/Documentation/kbuild/kconfig-language.txt

Finally you have to add your new libfoo/Config.in to +package/Config.in (or in a category subdirectory if you decided to +put your package in one of the existing categories). The files +included there are sorted alphabetically per category and are NOT +supposed to contain anything but the bare name of the package.

source "package/libfoo/Config.in"

18.2.2. Config.in.host file

Some packages also need to be built for the host system. There are two +options here:

  • +The host package is only required to satisfy build-time + dependencies of one or more target packages. In this case, add + host-foo to the target package’s BAR_DEPENDENCIES variable. No + Config.in.host file should be created. +
  • +The host package should be explicitly selectable by the user from + the configuration menu. In this case, create a Config.in.host file + for that host package: +

    config BR2_PACKAGE_HOST_FOO
    +        bool "host foo"
    +        help
    +          This is a comment that explains what foo for the host is.
    +
    +          http://foosoftware.org/foo/

    The same coding style and options as for the Config.in file are valid.

    Finally you have to add your new libfoo/Config.in.host to +package/Config.in.host. The files included there are sorted alphabetically +and are NOT supposed to contain anything but the bare name of the package.

    source "package/foo/Config.in.host"

    The host package will then be available from the Host utilities menu.

18.2.3. Choosing depends on or select

The Config.in file of your package must also ensure that +dependencies are enabled. Typically, Buildroot uses the following +rules:

  • +Use a select type of dependency for dependencies on + libraries. These dependencies are generally not obvious and it + therefore make sense to have the kconfig system ensure that the + dependencies are selected. For example, the libgtk2 package uses + select BR2_PACKAGE_LIBGLIB2 to make sure this library is also + enabled. + The select keyword expresses the dependency with a backward + semantic. +
  • +Use a depends on type of dependency when the user really needs to + be aware of the dependency. Typically, Buildroot uses this type of + dependency for dependencies on target architecture, MMU support and + toolchain options (see Section 18.2.4, “Dependencies on target and toolchain options”), + or for dependencies on "big" things, such as the X.org system. + The depends on keyword expresses the dependency with a forward + semantic. +

Note. The current problem with the kconfig language is that these two +dependency semantics are not internally linked. Therefore, it may be +possible to select a package, whom one of its dependencies/requirement +is not met.

An example illustrates both the usage of select and depends on.

config BR2_PACKAGE_RRDTOOL
+        bool "rrdtool"
+        depends on BR2_USE_WCHAR
+        select BR2_PACKAGE_FREETYPE
+        select BR2_PACKAGE_LIBART
+        select BR2_PACKAGE_LIBPNG
+        select BR2_PACKAGE_ZLIB
+        help
+          RRDtool is the OpenSource industry standard, high performance
+          data logging and graphing system for time series data.
+
+          http://oss.oetiker.ch/rrdtool/
+
+comment "rrdtool needs a toolchain w/ wchar"
+        depends on !BR2_USE_WCHAR

Note that these two dependency types are only transitive with the +dependencies of the same kind.

This means, in the following example:

config BR2_PACKAGE_A
+        bool "Package A"
+
+config BR2_PACKAGE_B
+        bool "Package B"
+        depends on BR2_PACKAGE_A
+
+config BR2_PACKAGE_C
+        bool "Package C"
+        depends on BR2_PACKAGE_B
+
+config BR2_PACKAGE_D
+        bool "Package D"
+        select BR2_PACKAGE_B
+
+config BR2_PACKAGE_E
+        bool "Package E"
+        select BR2_PACKAGE_D
  • +Selecting Package C will be visible if Package B has been + selected, which in turn is only visible if Package A has been + selected. +
  • +Selecting Package E will select Package D, which will select + Package B, it will not check for the dependencies of Package B, + so it will not select Package A. +
  • +Since Package B is selected but Package A is not, this violates + the dependency of Package B on Package A. Therefore, in such a + situation, the transitive dependency has to be added explicitly: +
config BR2_PACKAGE_D
+        bool "Package D"
+        select BR2_PACKAGE_B
+        depends on BR2_PACKAGE_A
+
+config BR2_PACKAGE_E
+        bool "Package E"
+        select BR2_PACKAGE_D
+        depends on BR2_PACKAGE_A

Overall, for package library dependencies, select should be +preferred.

Note that such dependencies will ensure that the dependency option +is also enabled, but not necessarily built before your package. To do +so, the dependency also needs to be expressed in the .mk file of the +package.

Further formatting details: see the +coding style.

18.2.4. Dependencies on target and toolchain options

Many packages depend on certain options of the toolchain: the choice of +C library, C++ support, thread support, RPC support, wchar support, +or dynamic library support. Some packages can only be built on certain +target architectures, or if an MMU is available in the processor.

These dependencies have to be expressed with the appropriate depends +on statements in the Config.in file. Additionally, for dependencies on +toolchain options, a comment should be displayed when the option is +not enabled, so that the user knows why the package is not available. +Dependencies on target architecture or MMU support should not be +made visible in a comment: since it is unlikely that the user can +freely choose another target, it makes little sense to show these +dependencies explicitly.

The comment should only be visible if the config option itself would +be visible when the toolchain option dependencies are met. This means +that all other dependencies of the package (including dependencies on +target architecture and MMU support) have to be repeated on the +comment definition. To keep it clear, the depends on statement for +these non-toolchain option should be kept separate from the depends on +statement for the toolchain options. +If there is a dependency on a config option in that same file (typically +the main package) it is preferable to have a global if … endif +construct rather than repeating the depends on statement on the +comment and other config options.

The general format of a dependency comment for package foo is:

foo needs a toolchain w/ featA, featB, featC

for example:

mpd needs a toolchain w/ C++, threads, wchar

or

crda needs a toolchain w/ threads

Note that this text is kept brief on purpose, so that it will fit on a +80-character terminal.

The rest of this section enumerates the different target and toolchain +options, the corresponding config symbols to depend on, and the text to +use in the comment.

  • +Target architecture +

    • +Dependency symbol: BR2_powerpc, BR2_mips, … (see arch/Config.in) +
    • +Comment string: no comment to be added +
  • +MMU support +

    • +Dependency symbol: BR2_USE_MMU +
    • +Comment string: no comment to be added +
  • +Gcc _sync* built-ins used for atomic operations. They are + available in variants operating on 1 byte, 2 bytes, 4 bytes and 8 + bytes. Since different architectures support atomic operations on + different sizes, one dependency symbol is available for each size: +

    • +Dependency symbol: BR2_TOOLCHAIN_HAS_SYNC_1 for 1 byte, + BR2_TOOLCHAIN_HAS_SYNC_2 for 2 bytes, + BR2_TOOLCHAIN_HAS_SYNC_4 for 4 bytes, BR2_TOOLCHAIN_HAS_SYNC_8 + for 8 bytes. +
    • +Comment string: no comment to be added +
  • +Gcc _atomic* built-ins used for atomic operations. +

    • +Dependency symbol: BR2_TOOLCHAIN_HAS_ATOMIC. +
    • +Comment string: no comment to be added +
  • +Kernel headers +

    • +Dependency symbol: BR2_TOOLCHAIN_HEADERS_AT_LEAST_X_Y, (replace + X_Y with the proper version, see toolchain/Config.in) +
    • +Comment string: headers >= X.Y and/or headers <= X.Y (replace + X.Y with the proper version) +
  • +GCC version +

    • +Dependency symbol: BR2_TOOLCHAIN_GCC_AT_LEAST_X_Y, (replace + X_Y with the proper version, see toolchain/Config.in) +
    • +Comment string: gcc >= X.Y and/or gcc <= X.Y (replace + X.Y with the proper version) +
  • +Host GCC version +

    • +Dependency symbol: BR2_HOST_GCC_AT_LEAST_X_Y, (replace + X_Y with the proper version, see Config.in) +
    • +Comment string: no comment to be added +
    • +Note that it is usually not the package itself that has a minimum + host GCC version, but rather a host-package on which it depends. +
  • +C library +

    • +Dependency symbol: BR2_TOOLCHAIN_USES_GLIBC, + BR2_TOOLCHAIN_USES_MUSL, BR2_TOOLCHAIN_USES_UCLIBC +
    • +Comment string: for the C library, a slightly different comment text + is used: foo needs a glibc toolchain, or foo needs a glibc + toolchain w/ C++ +
  • +C++ support +

    • +Dependency symbol: BR2_INSTALL_LIBSTDCPP +
    • +Comment string: C++ +
  • +D support +

    • +Dependency symbol: BR2_TOOLCHAIN_HAS_DLANG +
    • +Comment string: Dlang +
  • +Fortran support +

    • +Dependency symbol: BR2_TOOLCHAIN_HAS_FORTRAN +
    • +Comment string: fortran +
  • +thread support +

    • +Dependency symbol: BR2_TOOLCHAIN_HAS_THREADS +
    • +Comment string: threads (unless BR2_TOOLCHAIN_HAS_THREADS_NPTL + is also needed, in which case, specifying only NPTL is sufficient) +
  • +NPTL thread support +

    • +Dependency symbol: BR2_TOOLCHAIN_HAS_THREADS_NPTL +
    • +Comment string: NPTL +
  • +RPC support +

    • +Dependency symbol: BR2_TOOLCHAIN_HAS_NATIVE_RPC +
    • +Comment string: RPC +
  • +wchar support +

    • +Dependency symbol: BR2_USE_WCHAR +
    • +Comment string: wchar +
  • +dynamic library +

    • +Dependency symbol: !BR2_STATIC_LIBS +
    • +Comment string: dynamic library +

18.2.5. Dependencies on a Linux kernel built by buildroot

Some packages need a Linux kernel to be built by buildroot. These are +typically kernel modules or firmware. A comment should be added in the +Config.in file to express this dependency, similar to dependencies on +toolchain options. The general format is:

foo needs a Linux kernel to be built

If there is a dependency on both toolchain options and the Linux +kernel, use this format:

foo needs a toolchain w/ featA, featB, featC and a Linux kernel to be built

18.2.6. Dependencies on udev /dev management

If a package needs udev /dev management, it should depend on symbol +BR2_PACKAGE_HAS_UDEV, and the following comment should be added:

foo needs udev /dev management

If there is a dependency on both toolchain options and udev /dev +management, use this format:

foo needs udev /dev management and a toolchain w/ featA, featB, featC

18.2.7. Dependencies on features provided by virtual packages

Some features can be provided by more than one package, such as the +openGL libraries.

See Section 18.11, “Infrastructure for virtual packages” for more on the virtual packages.

18.3. The .mk file

Finally, here’s the hardest part. Create a file named libfoo.mk. It +describes how the package should be downloaded, configured, built, +installed, etc.

Depending on the package type, the .mk file must be written in a +different way, using different infrastructures:

  • +Makefiles for generic packages (not using autotools or CMake): + These are based on an infrastructure similar to the one used for + autotools-based packages, but require a little more work from the + developer. They specify what should be done for the configuration, + compilation and installation of the package. This + infrastructure must be used for all packages that do not use the + autotools as their build system. In the future, other specialized + infrastructures might be written for other build systems. We cover + them through in a tutorial and a + reference. +
  • +Makefiles for autotools-based software (autoconf, automake, etc.): + We provide a dedicated infrastructure for such packages, since + autotools is a very common build system. This infrastructure must + be used for new packages that rely on the autotools as their build + system. We cover them through a tutorial + and reference. +
  • +Makefiles for cmake-based software: We provide a dedicated + infrastructure for such packages, as CMake is a more and more + commonly used build system and has a standardized behaviour. This + infrastructure must be used for new packages that rely on + CMake. We cover them through a tutorial + and reference. +
  • +Makefiles for Python modules: We have a dedicated infrastructure + for Python modules that use either the distutils or the + setuptools mechanism. We cover them through a + tutorial and a + reference. +
  • +Makefiles for Lua modules: We have a dedicated infrastructure for + Lua modules available through the LuaRocks web site. We cover them + through a tutorial and a + reference. +

Further formatting details: see the writing +rules.

18.4. The .hash file

When possible, you must add a third file, named libfoo.hash, that +contains the hashes of the downloaded files for the libfoo +package. The only reason for not adding a .hash file is when hash +checking is not possible due to how the package is downloaded.

When a package has a version selection choice, then the hash file may be +stored in a subdirectory named after the version, e.g. +package/libfoo/1.2.3/libfoo.hash. This is especially important if the +different versions have different licensing terms, but they are stored +in the same file. Otherwise, the hash file should stay in the package’s +directory.

The hashes stored in that file are used to validate the integrity of the +downloaded files and of the license files.

The format of this file is one line for each file for which to check the +hash, each line with the following three fields separated by two spaces:

  • +the type of hash, one of: +

    • +md5, sha1, sha224, sha256, sha384, sha512, none +
  • +the hash of the file: +

    • +for none, one or more non-space chars, usually just the string xxx +
    • +for md5, 32 hexadecimal characters +
    • +for sha1, 40 hexadecimal characters +
    • +for sha224, 56 hexadecimal characters +
    • +for sha256, 64 hexadecimal characters +
    • +for sha384, 96 hexadecimal characters +
    • +for sha512, 128 hexadecimal characters +
  • +the name of the file: +

    • +for a source archive: the basename of the file, without any directory + component, +
    • +for a license file: the path as it appears in FOO_LICENSE_FILES. +

Lines starting with a # sign are considered comments, and ignored. Empty +lines are ignored.

There can be more than one hash for a single file, each on its own line. In +this case, all hashes must match.

Note. Ideally, the hashes stored in this file should match the hashes published by +upstream, e.g. on their website, in the e-mail announcement… If upstream +provides more than one type of hash (e.g. sha1 and sha512), then it is +best to add all those hashes in the .hash file. If upstream does not +provide any hash, or only provides an md5 hash, then compute at least one +strong hash yourself (preferably sha256, but not md5), and mention +this in a comment line above the hashes.

Note. The hashes for license files are used to detect a license change when a +package version is bumped. The hashes are checked during the make legal-info +target run. For a package with multiple versions (like Qt5), +create the hash file in a subdirectory <packageversion> of that package +(see also Section 19.2, “How patches are applied”).

The none hash type is reserved to those archives downloaded from a +repository, like a git clone, a subversion checkout…

The example below defines a sha1 and a sha256 published by upstream for +the main libfoo-1.2.3.tar.bz2 tarball, an md5 from upstream and a +locally-computed sha256 hashes for a binary blob, a sha256 for a +downloaded patch, and an archive with no hash:

# Hashes from: http://www.foosoftware.org/download/libfoo-1.2.3.tar.bz2.{sha1,sha256}:
+sha1  486fb55c3efa71148fe07895fd713ea3a5ae343a  libfoo-1.2.3.tar.bz2
+sha256  efc8103cc3bcb06bda6a781532d12701eb081ad83e8f90004b39ab81b65d4369  libfoo-1.2.3.tar.bz2
+
+# md5 from: http://www.foosoftware.org/download/libfoo-1.2.3.tar.bz2.md5, sha256 locally computed:
+md5  2d608f3c318c6b7557d551a5a09314f03452f1a1  libfoo-data.bin
+sha256  01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b  libfoo-data.bin
+
+# Locally computed:
+sha256  ff52101fb90bbfc3fe9475e425688c660f46216d7e751c4bbdb1dc85cdccacb9  libfoo-fix-blabla.patch
+
+# No hash for 1234:
+none  xxx  libfoo-1234.tar.gz
+
+# Hash for license files:
+sha256  a45a845012742796534f7e91fe623262ccfb99460a2bd04015bd28d66fba95b8  COPYING
+sha256  01b1f9f2c8ee648a7a596a1abe8aa4ed7899b1c9e5551bda06da6e422b04aa55  doc/COPYING.LGPL

If the .hash file is present, and it contains one or more hashes for a +downloaded file, the hash(es) computed by Buildroot (after download) must +match the hash(es) stored in the .hash file. If one or more hashes do +not match, Buildroot considers this an error, deletes the downloaded file, +and aborts.

If the .hash file is present, but it does not contain a hash for a +downloaded file, Buildroot considers this an error and aborts. However, +the downloaded file is left in the download directory since this +typically indicates that the .hash file is wrong but the downloaded +file is probably OK.

Hashes are currently checked for files fetched from http/ftp servers, +Git repositories, files copied using scp and local files. Hashes are +not checked for other version control systems (such as Subversion, +CVS, etc.) because Buildroot currently does not generate reproducible +tarballs when source code is fetched from such version control +systems.

Hashes should only be added in .hash files for files that are +guaranteed to be stable. For example, patches auto-generated by Github +are not guaranteed to be stable, and therefore their hashes can change +over time. Such patches should not be downloaded, and instead be added +locally to the package folder.

If the .hash file is missing, then no check is done at all.

18.5. Infrastructure for packages with specific build systems

By packages with specific build systems we mean all the packages +whose build system is not one of the standard ones, such as +autotools or CMake. This typically includes packages whose build +system is based on hand-written Makefiles or shell scripts.

18.5.1. generic-package tutorial

01: ################################################################################
+02: #
+03: # libfoo
+04: #
+05: ################################################################################
+06:
+07: LIBFOO_VERSION = 1.0
+08: LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz
+09: LIBFOO_SITE = http://www.foosoftware.org/download
+10: LIBFOO_LICENSE = GPL-3.0+
+11: LIBFOO_LICENSE_FILES = COPYING
+12: LIBFOO_INSTALL_STAGING = YES
+13: LIBFOO_CONFIG_SCRIPTS = libfoo-config
+14: LIBFOO_DEPENDENCIES = host-libaaa libbbb
+15:
+16: define LIBFOO_BUILD_CMDS
+17:     $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) all
+18: endef
+19:
+20: define LIBFOO_INSTALL_STAGING_CMDS
+21:     $(INSTALL) -D -m 0755 $(@D)/libfoo.a $(STAGING_DIR)/usr/lib/libfoo.a
+22:     $(INSTALL) -D -m 0644 $(@D)/foo.h $(STAGING_DIR)/usr/include/foo.h
+23:     $(INSTALL) -D -m 0755 $(@D)/libfoo.so* $(STAGING_DIR)/usr/lib
+24: endef
+25:
+26: define LIBFOO_INSTALL_TARGET_CMDS
+27:     $(INSTALL) -D -m 0755 $(@D)/libfoo.so* $(TARGET_DIR)/usr/lib
+28:     $(INSTALL) -d -m 0755 $(TARGET_DIR)/etc/foo.d
+29: endef
+30:
+31: define LIBFOO_USERS
+32:     foo -1 libfoo -1 * - - - LibFoo daemon
+33: endef
+34:
+35: define LIBFOO_DEVICES
+36:     /dev/foo  c  666  0  0  42  0  -  -  -
+37: endef
+38:
+39: define LIBFOO_PERMISSIONS
+40:     /bin/foo  f  4755  foo  libfoo   -  -  -  -  -
+41: endef
+42:
+43: $(eval $(generic-package))

The Makefile begins on line 7 to 11 with metadata information: the +version of the package (LIBFOO_VERSION), the name of the +tarball containing the package (LIBFOO_SOURCE) (xz-ed tarball recommended) +the Internet location at which the tarball can be downloaded from +(LIBFOO_SITE), the license (LIBFOO_LICENSE) and file with the +license text (LIBFOO_LICENSE_FILES). All variables must start with +the same prefix, LIBFOO_ in this case. This prefix is always the +uppercased version of the package name (see below to understand where +the package name is defined).

On line 12, we specify that this package wants to install something to +the staging space. This is often needed for libraries, since they must +install header files and other development files in the staging space. +This will ensure that the commands listed in the +LIBFOO_INSTALL_STAGING_CMDS variable will be executed.

On line 13, we specify that there is some fixing to be done to some +of the libfoo-config files that were installed during +LIBFOO_INSTALL_STAGING_CMDS phase. +These *-config files are executable shell script files that are +located in $(STAGING_DIR)/usr/bin directory and are executed +by other 3rd party packages to find out the location and the linking +flags of this particular package.

The problem is that all these *-config files by default give wrong, +host system linking flags that are unsuitable for cross-compiling.

For example: -I/usr/include instead of -I$(STAGING_DIR)/usr/include +or: -L/usr/lib instead of -L$(STAGING_DIR)/usr/lib

So some sed magic is done to these scripts to make them give correct +flags. +The argument to be given to LIBFOO_CONFIG_SCRIPTS is the file name(s) +of the shell script(s) needing fixing. All these names are relative to +$(STAGING_DIR)/usr/bin and if needed multiple names can be given.

In addition, the scripts listed in LIBFOO_CONFIG_SCRIPTS are removed +from $(TARGET_DIR)/usr/bin, since they are not needed on the target.

Example 18.1. Config script: divine package

Package divine installs shell script $(STAGING_DIR)/usr/bin/divine-config.

So its fixup would be:

DIVINE_CONFIG_SCRIPTS = divine-config

Example 18.2. Config script: imagemagick package:

Package imagemagick installs the following scripts: +$(STAGING_DIR)/usr/bin/{Magick,Magick++,MagickCore,MagickWand,Wand}-config

So it’s fixup would be:

IMAGEMAGICK_CONFIG_SCRIPTS = \
+   Magick-config Magick++-config \
+   MagickCore-config MagickWand-config Wand-config

On line 14, we specify the list of dependencies this package relies +on. These dependencies are listed in terms of lower-case package names, +which can be packages for the target (without the host- +prefix) or packages for the host (with the host-) prefix). +Buildroot will ensure that all these packages are built and installed +before the current package starts its configuration.

The rest of the Makefile, lines 16..29, defines what should be done +at the different steps of the package configuration, compilation and +installation. +LIBFOO_BUILD_CMDS tells what steps should be performed to +build the package. LIBFOO_INSTALL_STAGING_CMDS tells what +steps should be performed to install the package in the staging space. +LIBFOO_INSTALL_TARGET_CMDS tells what steps should be +performed to install the package in the target space.

All these steps rely on the $(@D) variable, which +contains the directory where the source code of the package has been +extracted.

On lines 31..33, we define a user that is used by this package (e.g. +to run a daemon as non-root) (LIBFOO_USERS).

On line 35..37, we define a device-node file used by this package +(LIBFOO_DEVICES).

On line 39..41, we define the permissions to set to specific files +installed by this package (LIBFOO_PERMISSIONS).

Finally, on line 43, we call the generic-package function, which +generates, according to the variables defined previously, all the +Makefile code necessary to make your package working.

18.5.2. generic-package reference

There are two variants of the generic target. The generic-package macro is +used for packages to be cross-compiled for the target. The +host-generic-package macro is used for host packages, natively compiled +for the host. It is possible to call both of them in a single .mk +file: once to create the rules to generate a target +package and once to create the rules to generate a host package:

$(eval $(generic-package))
+$(eval $(host-generic-package))

This might be useful if the compilation of the target package requires +some tools to be installed on the host. If the package name is +libfoo, then the name of the package for the target is also +libfoo, while the name of the package for the host is +host-libfoo. These names should be used in the DEPENDENCIES +variables of other packages, if they depend on libfoo or +host-libfoo.

The call to the generic-package and/or host-generic-package macro +must be at the end of the .mk file, after all variable definitions. +The call to host-generic-package must be after the call to +generic-package, if any.

For the target package, the generic-package uses the variables defined by +the .mk file and prefixed by the uppercased package name: +LIBFOO_*. host-generic-package uses the HOST_LIBFOO_* variables. For +some variables, if the HOST_LIBFOO_ prefixed variable doesn’t +exist, the package infrastructure uses the corresponding variable +prefixed by LIBFOO_. This is done for variables that are likely to +have the same value for both the target and host packages. See below +for details.

The list of variables that can be set in a .mk file to give metadata +information is (assuming the package name is libfoo) :

  • +LIBFOO_VERSION, mandatory, must contain the version of the + package. Note that if HOST_LIBFOO_VERSION doesn’t exist, it is + assumed to be the same as LIBFOO_VERSION. It can also be a + revision number or a tag for packages that are fetched directly + from their version control system. Examples: +

    • +a version for a release tarball: LIBFOO_VERSION = 0.1.2 +
    • +a sha1 for a git tree: LIBFOO_VERSION = cb9d6aa9429e838f0e54faa3d455bcbab5eef057 +
    • +a tag for a git tree LIBFOO_VERSION = v0.1.2 +

      Note: Using a branch name as FOO_VERSION is not supported, because it does +not and can not work as people would expect it should:

      1. +due to local caching, Buildroot will not re-fetch the repository, + so people who expect to be able to follow the remote repository + would be quite surprised and disappointed; +
      2. +because two builds can never be perfectly simultaneous, and because + the remote repository may get new commits on the branch anytime, + two users, using the same Buildroot tree and building the same + configuration, may get different source, thus rendering the build + non reproducible, and people would be quite surprised and + disappointed. +
  • +LIBFOO_SOURCE may contain the name of the tarball of the package, + which Buildroot will use to download the tarball from + LIBFOO_SITE. If HOST_LIBFOO_SOURCE is not specified, it defaults + to LIBFOO_SOURCE. If none are specified, then the value is assumed + to be libfoo-$(LIBFOO_VERSION).tar.gz. + Example: LIBFOO_SOURCE = foobar-$(LIBFOO_VERSION).tar.bz2 +
  • +LIBFOO_PATCH may contain a space-separated list of patch file + names, that Buildroot will download and apply to the package source + code. If an entry contains ://, then Buildroot will assume it is a + full URL and download the patch from this location. Otherwise, + Buildroot will assume that the patch should be downloaded from + LIBFOO_SITE. If HOST_LIBFOO_PATCH is not specified, it defaults + to LIBFOO_PATCH. Note that patches that are included in Buildroot + itself use a different mechanism: all files of the form + *.patch present in the package directory inside + Buildroot will be applied to the package after extraction (see + patching a package). Finally, patches listed in + the LIBFOO_PATCH variable are applied before the patches stored + in the Buildroot package directory. +
  • +LIBFOO_SITE provides the location of the package, which can be a + URL or a local filesystem path. HTTP, FTP and SCP are supported URL + types for retrieving package tarballs. In these cases don’t include a + trailing slash: it will be added by Buildroot between the directory + and the filename as appropriate. Git, Subversion, Mercurial, + and Bazaar are supported URL types for retrieving packages directly + from source code management systems. There is a helper function to make + it easier to download source tarballs from GitHub (refer to + Section 18.24.4, “How to add a package from GitHub” for details). A filesystem path may be used + to specify either a tarball or a directory containing the package + source code. See LIBFOO_SITE_METHOD below for more details on how + retrieval works. + Note that SCP URLs should be of the form + scp://[user@]host:filepath, and that filepath is relative to the + user’s home directory, so you may want to prepend the path with a + slash for absolute paths: + scp://[user@]host:/absolutepath. + If HOST_LIBFOO_SITE is not specified, it defaults to + LIBFOO_SITE. + Examples: + LIBFOO_SITE=http://www.libfoosoftware.org/libfoo + LIBFOO_SITE=http://svn.xiph.org/trunk/Tremor + LIBFOO_SITE=/opt/software/libfoo.tar.gz + LIBFOO_SITE=$(TOPDIR)/../src/libfoo +
  • +LIBFOO_DL_OPTS is a space-separated list of additional options to + pass to the downloader. Useful for retrieving documents with + server-side checking for user logins and passwords, or to use a proxy. + All download methods valid for LIBFOO_SITE_METHOD are supported; + valid options depend on the download method (consult the man page + for the respective download utilities). +
  • +LIBFOO_EXTRA_DOWNLOADS is a space-separated list of additional + files that Buildroot should download. If an entry contains :// + then Buildroot will assume it is a complete URL and will download + the file using this URL. Otherwise, Buildroot will assume the file + to be downloaded is located at LIBFOO_SITE. Buildroot will not do + anything with those additional files, except download them: it will + be up to the package recipe to use them from $(LIBFOO_DL_DIR). +
  • +LIBFOO_SITE_METHOD determines the method used to fetch or copy the + package source code. In many cases, Buildroot guesses the method + from the contents of LIBFOO_SITE and setting LIBFOO_SITE_METHOD + is unnecessary. When HOST_LIBFOO_SITE_METHOD is not specified, it + defaults to the value of LIBFOO_SITE_METHOD. + The possible values of LIBFOO_SITE_METHOD are: +

    • +wget for normal FTP/HTTP downloads of tarballs. Used by + default when LIBFOO_SITE begins with http://, https:// or + ftp://. +
    • +scp for downloads of tarballs over SSH with scp. Used by + default when LIBFOO_SITE begins with scp://. +
    • +svn for retrieving source code from a Subversion repository. + Used by default when LIBFOO_SITE begins with svn://. When a + http:// Subversion repository URL is specified in + LIBFOO_SITE, one must specify LIBFOO_SITE_METHOD=svn. + Buildroot performs a checkout which is preserved as a tarball in + the download cache; subsequent builds use the tarball instead of + performing another checkout. +
    • +cvs for retrieving source code from a CVS repository. + Used by default when LIBFOO_SITE begins with cvs://. + The downloaded source code is cached as with the svn method. + Anonymous pserver mode is assumed otherwise explicitly defined + on LIBFOO_SITE. Both + LIBFOO_SITE=cvs://libfoo.net:/cvsroot/libfoo and + LIBFOO_SITE=cvs://:ext:libfoo.net:/cvsroot/libfoo + are accepted, on the former anonymous pserver access mode is + assumed. + LIBFOO_SITE must contain the source URL as well as the remote + repository directory. The module is the package name. + LIBFOO_VERSION is mandatory and must be a tag, a branch, or + a date (e.g. "2014-10-20", "2014-10-20 13:45", "2014-10-20 + 13:45+01" see "man cvs" for further details). +
    • +git for retrieving source code from a Git repository. Used by + default when LIBFOO_SITE begins with git://. The downloaded + source code is cached as with the svn + method. +
    • +hg for retrieving source code from a Mercurial repository. One + must specify LIBFOO_SITE_METHOD=hg when LIBFOO_SITE + contains a Mercurial repository URL. The downloaded source code + is cached as with the svn method. +
    • +bzr for retrieving source code from a Bazaar repository. Used + by default when LIBFOO_SITE begins with bzr://. The + downloaded source code is cached as with the svn method. +
    • +file for a local tarball. One should use this when + LIBFOO_SITE specifies a package tarball as a local filename. + Useful for software that isn’t available publicly or in version + control. +
    • +local for a local source code directory. One should use this + when LIBFOO_SITE specifies a local directory path containing + the package source code. Buildroot copies the contents of the + source directory into the package’s build directory. Note that + for local packages, no patches are applied. If you need to + still patch the source code, use LIBFOO_POST_RSYNC_HOOKS, see + Section 18.22.1, “Using the POST_RSYNC hook”. +
  • +LIBFOO_GIT_SUBMODULES can be set to YES to create an archive + with the git submodules in the repository. This is only available + for packages downloaded with git (i.e. when + LIBFOO_SITE_METHOD=git). Note that we try not to use such git + submodules when they contain bundled libraries, in which case we + prefer to use those libraries from their own package. +
  • +LIBFOO_STRIP_COMPONENTS is the number of leading components + (directories) that tar must strip from file names on extraction. + The tarball for most packages has one leading component named + "<pkg-name>-<pkg-version>", thus Buildroot passes + --strip-components=1 to tar to remove it. + For non-standard packages that don’t have this component, or + that have more than one leading component to strip, set this + variable with the value to be passed to tar. Default: 1. +
  • +LIBFOO_EXCLUDES is a space-separated list of patterns to exclude + when extracting the archive. Each item from that list is passed as + a tar’s --exclude option. By default, empty. +
  • +LIBFOO_DEPENDENCIES lists the dependencies (in terms of package + name) that are required for the current target package to + compile. These dependencies are guaranteed to be compiled and + installed before the configuration of the current package starts. + However, modifications to configuration of these dependencies will + not force a rebuild of the current package. In a similar way, + HOST_LIBFOO_DEPENDENCIES lists the dependencies for the current + host package. +
  • +LIBFOO_EXTRACT_DEPENDENCIES lists the dependencies (in terms of + package name) that are required for the current target package to be + extracted. These dependencies are guaranteed to be compiled and + installed before the extract step of the current package + starts. This is only used internally by the package infrastructure, + and should typically not be used directly by packages. +
  • +LIBFOO_PATCH_DEPENDENCIES lists the dependencies (in terms of + package name) that are required for the current package to be + patched. These dependencies are guaranteed to be extracted and + patched (but not necessarily built) before the current package is + patched. In a similar way, HOST_LIBFOO_PATCH_DEPENDENCIES lists + the dependencies for the current host package. + This is seldom used; usually, LIBFOO_DEPENDENCIES is what you + really want to use. +
  • +LIBFOO_PROVIDES lists all the virtual packages libfoo is an + implementation of. See Section 18.11, “Infrastructure for virtual packages”. +
  • +LIBFOO_INSTALL_STAGING can be set to YES or NO (default). If + set to YES, then the commands in the LIBFOO_INSTALL_STAGING_CMDS + variables are executed to install the package into the staging + directory. +
  • +LIBFOO_INSTALL_TARGET can be set to YES (default) or NO. If + set to YES, then the commands in the LIBFOO_INSTALL_TARGET_CMDS + variables are executed to install the package into the target + directory. +
  • +LIBFOO_INSTALL_IMAGES can be set to YES or NO (default). If + set to YES, then the commands in the LIBFOO_INSTALL_IMAGES_CMDS + variable are executed to install the package into the images + directory. +
  • +LIBFOO_CONFIG_SCRIPTS lists the names of the files in + $(STAGING_DIR)/usr/bin that need some special fixing to make them + cross-compiling friendly. Multiple file names separated by space can + be given and all are relative to $(STAGING_DIR)/usr/bin. The files + listed in LIBFOO_CONFIG_SCRIPTS are also removed from + $(TARGET_DIR)/usr/bin since they are not needed on the target. +
  • +LIBFOO_DEVICES lists the device files to be created by Buildroot + when using the static device table. The syntax to use is the + makedevs one. You can find some documentation for this syntax in the + Chapter 25, Makedev syntax documentation. This variable is optional. +
  • +LIBFOO_PERMISSIONS lists the changes of permissions to be done at + the end of the build process. The syntax is once again the makedevs one. + You can find some documentation for this syntax in the Chapter 25, Makedev syntax documentation. + This variable is optional. +
  • +LIBFOO_USERS lists the users to create for this package, if it installs + a program you want to run as a specific user (e.g. as a daemon, or as a + cron-job). The syntax is similar in spirit to the makedevs one, and is + described in the Chapter 26, Makeusers syntax documentation. This variable is optional. +
  • +LIBFOO_LICENSE defines the license (or licenses) under which the package + is released. + This name will appear in the manifest file produced by make legal-info. + If the license appears in the SPDX License List, + use the SPDX short identifier to make the manifest file uniform. + Otherwise, describe the license in a precise and concise way, avoiding + ambiguous names such as BSD which actually name a family of licenses. + This variable is optional. If it is not defined, unknown will appear in + the license field of the manifest file for this package. + The expected format for this variable must comply with the following rules: +

    • +If different parts of the package are released under different + licenses, then comma separate licenses (e.g. LIBFOO_LICENSE = + GPL-2.0+, LGPL-2.1+). If there is clear distinction between which + component is licensed under what license, then annotate the license + with that component, between parenthesis (e.g. LIBFOO_LICENSE = + GPL-2.0+ (programs), LGPL-2.1+ (libraries)). +
    • +If some licenses are conditioned on a sub-option being enabled, append + the conditional licenses with a comma (e.g.: FOO_LICENSE += , GPL-2.0+ + (programs)); the infrastructure will internally remove the space before + the comma. +
    • +If the package is dual licensed, then separate licenses with the + or keyword (e.g. LIBFOO_LICENSE = AFL-2.1 or GPL-2.0+). +
  • +LIBFOO_LICENSE_FILES is a space-separated list of files in the package + tarball that contain the license(s) under which the package is released. + make legal-info copies all of these files in the legal-info directory. + See Chapter 13, Legal notice and licensing for more information. + This variable is optional. If it is not defined, a warning will be produced + to let you know, and not saved will appear in the license files field + of the manifest file for this package. +
  • +LIBFOO_ACTUAL_SOURCE_TARBALL only applies to packages whose + LIBFOO_SITE / LIBFOO_SOURCE pair points to an archive that does + not actually contain source code, but binary code. This a very + uncommon case, only known to apply to external toolchains which come + already compiled, although theoretically it might apply to other + packages. In such cases a separate tarball is usually available with + the actual source code. Set LIBFOO_ACTUAL_SOURCE_TARBALL to the + name of the actual source code archive and Buildroot will download + it and use it when you run make legal-info to collect + legally-relevant material. Note this file will not be downloaded + during regular builds nor by make source. +
  • +LIBFOO_ACTUAL_SOURCE_SITE provides the location of the actual + source tarball. The default value is LIBFOO_SITE, so you don’t + need to set this variable if the binary and source archives are + hosted on the same directory. If LIBFOO_ACTUAL_SOURCE_TARBALL is + not set, it doesn’t make sense to define + LIBFOO_ACTUAL_SOURCE_SITE. +
  • +LIBFOO_REDISTRIBUTE can be set to YES (default) or NO to indicate if + the package source code is allowed to be redistributed. Set it to NO for + non-opensource packages: Buildroot will not save the source code for this + package when collecting the legal-info. +
  • +LIBFOO_FLAT_STACKSIZE defines the stack size of an application built into + the FLAT binary format. The application stack size on the NOMMU architecture + processors can’t be enlarged at run time. The default stack size for the + FLAT binary format is only 4k bytes. If the application consumes more stack, + append the required number here. +
  • +LIBFOO_BIN_ARCH_EXCLUDE is a space-separated list of paths (relative + to the target directory) to ignore when checking that the package + installs correctly cross-compiled binaries. You seldom need to set this + variable, unless the package installs binary blobs outside the default + locations, /lib/firmware, /usr/lib/firmware, /lib/modules, + /usr/lib/modules, and /usr/share, which are automatically excluded. +
  • +LIBFOO_IGNORE_CVES is a space-separated list of CVEs that tells + Buildroot CVE tracking tools which CVEs should be ignored for this + package. This is typically used when the CVE is fixed by a patch in + the package, or when the CVE for some reason does not affect the + Buildroot package. A Makefile comment must always precede the + addition of a CVE to this variable. Example: +
# 0001-fix-cve-2020-12345.patch
+LIBFOO_IGNORE_CVES += CVE-2020-12345
+# only when built with libbaz, which Buildroot doesn't support
+LIBFOO_IGNORE_CVES += CVE-2020-54321
  • +LIBFOO_CPE_ID_* variables is a set of variables that allows the + package to define its CPE + identifier. The available variables are: +

    • +LIBFOO_CPE_ID_PREFIX, specifies the prefix of the CPE identifier, + i.e the first three fields. When not defined, the default value is + cpe:2.3:a. +
    • +LIBFOO_CPE_ID_VENDOR, specifies the vendor part of the CPE + identifier. When not defined, the default value is + <pkgname>_project. +
    • +LIBFOO_CPE_ID_PRODUCT, specifies the product part of the CPE + identifier. When not defined, the default value is <pkgname>. +
    • +LIBFOO_CPE_ID_VERSION, specifies the version part of the CPE + identifier. When not defined the default value is + $(LIBFOO_VERSION). +
    • +LIBFOO_CPE_ID_UPDATE specifies the update part of the CPE + identifier. When not defined the default value is *. +

    If any of those variables is defined, then the generic package +infrastructure assumes the package provides valid CPE information. In +this case, the generic package infrastructure will define +LIBFOO_CPE_ID.

    For a host package, if its LIBFOO_CPE_ID_* variables are not +defined, it inherits the value of those variables from the +corresponding target package.

The recommended way to define these variables is to use the following +syntax:

LIBFOO_VERSION = 2.32

Now, the variables that define what should be performed at the +different steps of the build process.

  • +LIBFOO_EXTRACT_CMDS lists the actions to be performed to extract + the package. This is generally not needed as tarballs are + automatically handled by Buildroot. However, if the package uses a + non-standard archive format, such as a ZIP or RAR file, or has a + tarball with a non-standard organization, this variable allows to + override the package infrastructure default behavior. +
  • +LIBFOO_CONFIGURE_CMDS lists the actions to be performed to + configure the package before its compilation. +
  • +LIBFOO_BUILD_CMDS lists the actions to be performed to + compile the package. +
  • +HOST_LIBFOO_INSTALL_CMDS lists the actions to be performed + to install the package, when the package is a host package. The + package must install its files to the directory given by + $(HOST_DIR). All files, including development files such as + headers should be installed, since other packages might be compiled + on top of this package. +
  • +LIBFOO_INSTALL_TARGET_CMDS lists the actions to be + performed to install the package to the target directory, when the + package is a target package. The package must install its files to + the directory given by $(TARGET_DIR). Only the files required for + execution of the package have to be + installed. Header files, static libraries and documentation will be + removed again when the target filesystem is finalized. +
  • +LIBFOO_INSTALL_STAGING_CMDS lists the actions to be + performed to install the package to the staging directory, when the + package is a target package. The package must install its files to + the directory given by $(STAGING_DIR). All development files + should be installed, since they might be needed to compile other + packages. +
  • +LIBFOO_INSTALL_IMAGES_CMDS lists the actions to be performed to + install the package to the images directory, when the package is a + target package. The package must install its files to the directory + given by $(BINARIES_DIR). Only files that are binary images (aka + images) that do not belong in the TARGET_DIR but are necessary + for booting the board should be placed here. For example, a package + should utilize this step if it has binaries which would be similar + to the kernel image, bootloader or root filesystem images. +
  • +LIBFOO_INSTALL_INIT_SYSV, LIBFOO_INSTALL_INIT_OPENRC and + LIBFOO_INSTALL_INIT_SYSTEMD list the actions to install init + scripts either for the systemV-like init systems (busybox, + sysvinit, etc.), openrc or for the systemd units. These commands + will be run only when the relevant init system is installed (i.e. + if systemd is selected as the init system in the configuration, + only LIBFOO_INSTALL_INIT_SYSTEMD will be run). The only exception + is when openrc is chosen as init system and LIBFOO_INSTALL_INIT_OPENRC + has not been set, in such situation LIBFOO_INSTALL_INIT_SYSV will + be called, since openrc supports sysv init scripts. + When systemd is used as the init system, buildroot will automatically enable + all services using the systemctl preset-all command in the final phase of + image building. You can add preset files to prevent a particular unit from + being automatically enabled by buildroot. +
  • +LIBFOO_HELP_CMDS lists the actions to print the package help, which + is included to the main make help output. These commands can print + anything in any format. + This is seldom used, as packages rarely have custom rules. Do not use + this variable, unless you really know that you need to print help. +
  • +LIBFOO_LINUX_CONFIG_FIXUPS lists the Linux kernel configuration + options that are needed to build and use this package, and without + which the package is fundamentally broken. This shall be a set of + calls to one of the kconfig tweaking option: KCONFIG_ENABLE_OPT, + KCONFIG_DISABLE_OPT, or KCONFIG_SET_OPT. + This is seldom used, as package usually have no strict requirements on + the kernel options. +

The preferred way to define these variables is:

define LIBFOO_CONFIGURE_CMDS
+        action 1
+        action 2
+        action 3
+endef

In the action definitions, you can use the following variables:

  • +$(LIBFOO_PKGDIR) contains the path to the directory containing the + libfoo.mk and Config.in files. This variable is useful when it is + necessary to install a file bundled in Buildroot, like a runtime + configuration file, a splashscreen image… +
  • +$(@D), which contains the directory in which the package source + code has been uncompressed. +
  • +$(LIBFOO_DL_DIR) contains the path to the directory where all the downloads + made by Buildroot for libfoo are stored in. +
  • +$(TARGET_CC), $(TARGET_LD), etc. to get the target + cross-compilation utilities +
  • +$(TARGET_CROSS) to get the cross-compilation toolchain prefix +
  • +Of course the $(HOST_DIR), $(STAGING_DIR) and $(TARGET_DIR) + variables to install the packages properly. Those variables point to + the global host, staging and target directories, unless + per-package directory support is used, in which case they point to + the current package host, staging and target directories. In + both cases, it doesn’t make any difference from the package point of + view: it should simply use HOST_DIR, STAGING_DIR and + TARGET_DIR. See Section 8.12, “Top-level parallel build” for more details + about per-package directory support. +

Finally, you can also use hooks. See Section 18.22, “Hooks available in the various build steps” for more information.

18.6. Infrastructure for autotools-based packages

18.6.1. autotools-package tutorial

First, let’s see how to write a .mk file for an autotools-based +package, with an example :

01: ################################################################################
+02: #
+03: # libfoo
+04: #
+05: ################################################################################
+06:
+07: LIBFOO_VERSION = 1.0
+08: LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz
+09: LIBFOO_SITE = http://www.foosoftware.org/download
+10: LIBFOO_INSTALL_STAGING = YES
+11: LIBFOO_INSTALL_TARGET = NO
+12: LIBFOO_CONF_OPTS = --disable-shared
+13: LIBFOO_DEPENDENCIES = libglib2 host-pkgconf
+14:
+15: $(eval $(autotools-package))

On line 7, we declare the version of the package.

On line 8 and 9, we declare the name of the tarball (xz-ed tarball recommended) +and the location of the tarball on the Web. Buildroot will automatically +download the tarball from this location.

On line 10, we tell Buildroot to install the package to the staging +directory. The staging directory, located in output/staging/ +is the directory where all the packages are installed, including their +development files, etc. By default, packages are not installed to the +staging directory, since usually, only libraries need to be installed in +the staging directory: their development files are needed to compile +other libraries or applications depending on them. Also by default, when +staging installation is enabled, packages are installed in this location +using the make install command.

On line 11, we tell Buildroot to not install the package to the +target directory. This directory contains what will become the root +filesystem running on the target. For purely static libraries, it is +not necessary to install them in the target directory because they will +not be used at runtime. By default, target installation is enabled; setting +this variable to NO is almost never needed. Also by default, packages are +installed in this location using the make install command.

On line 12, we tell Buildroot to pass a custom configure option, that +will be passed to the ./configure script before configuring +and building the package.

On line 13, we declare our dependencies, so that they are built +before the build process of our package starts.

Finally, on line line 15, we invoke the autotools-package +macro that generates all the Makefile rules that actually allows the +package to be built.

18.6.2. autotools-package reference

The main macro of the autotools package infrastructure is +autotools-package. It is similar to the generic-package macro. The ability to +have target and host packages is also available, with the +host-autotools-package macro.

Just like the generic infrastructure, the autotools infrastructure +works by defining a number of variables before calling the +autotools-package macro.

First, all the package metadata information variables that exist in the +generic infrastructure also exist in the autotools infrastructure: +LIBFOO_VERSION, LIBFOO_SOURCE, +LIBFOO_PATCH, LIBFOO_SITE, +LIBFOO_SUBDIR, LIBFOO_DEPENDENCIES, +LIBFOO_INSTALL_STAGING, LIBFOO_INSTALL_TARGET.

A few additional variables, specific to the autotools infrastructure, +can also be defined. Many of them are only useful in very specific +cases, typical packages will therefore only use a few of them.

  • +LIBFOO_SUBDIR may contain the name of a subdirectory + inside the package that contains the configure script. This is useful, + if for example, the main configure script is not at the root of the + tree extracted by the tarball. If HOST_LIBFOO_SUBDIR is + not specified, it defaults to LIBFOO_SUBDIR. +
  • +LIBFOO_CONF_ENV, to specify additional environment + variables to pass to the configure script. By default, empty. +
  • +LIBFOO_CONF_OPTS, to specify additional configure + options to pass to the configure script. By default, empty. +
  • +LIBFOO_MAKE, to specify an alternate make + command. This is typically useful when parallel make is enabled in + the configuration (using BR2_JLEVEL) but that this + feature should be disabled for the given package, for one reason or + another. By default, set to $(MAKE). If parallel building + is not supported by the package, then it should be set to + LIBFOO_MAKE=$(MAKE1). +
  • +LIBFOO_MAKE_ENV, to specify additional environment + variables to pass to make in the build step. These are passed before + the make command. By default, empty. +
  • +LIBFOO_MAKE_OPTS, to specify additional variables to + pass to make in the build step. These are passed after the + make command. By default, empty. +
  • +LIBFOO_AUTORECONF, tells whether the package should + be autoreconfigured or not (i.e. if the configure script and + Makefile.in files should be re-generated by re-running autoconf, + automake, libtool, etc.). Valid values are YES and + NO. By default, the value is NO +
  • +LIBFOO_AUTORECONF_ENV, to specify additional environment + variables to pass to the autoreconf program if + LIBFOO_AUTORECONF=YES. These are passed in the environment of + the autoreconf command. By default, empty. +
  • +LIBFOO_AUTORECONF_OPTS to specify additional options + passed to the autoreconf program if + LIBFOO_AUTORECONF=YES. By default, empty. +
  • +LIBFOO_GETTEXTIZE, tells whether the package should be + gettextized or not (i.e. if the package uses a different gettext + version than Buildroot provides, and it is needed to run + gettextize.) Only valid when LIBFOO_AUTORECONF=YES. Valid + values are YES and NO. The default is NO. +
  • +LIBFOO_GETTEXTIZE_OPTS, to specify additional options passed to + the gettextize program, if LIBFOO_GETTEXTIZE=YES. You may + use that if, for example, the .po files are not located in the + standard place (i.e. in po/ at the root of the package.) By + default, -f. +
  • +LIBFOO_LIBTOOL_PATCH tells whether the Buildroot + patch to fix libtool cross-compilation issues should be applied or + not. Valid values are YES and NO. By + default, the value is YES +
  • +LIBFOO_INSTALL_STAGING_OPTS contains the make options + used to install the package to the staging directory. By default, the + value is DESTDIR=$(STAGING_DIR) install, which is + correct for most autotools packages. It is still possible to override + it. +
  • +LIBFOO_INSTALL_TARGET_OPTS contains the make options + used to install the package to the target directory. By default, the + value is DESTDIR=$(TARGET_DIR) install. The default + value is correct for most autotools packages, but it is still possible + to override it if needed. +

With the autotools infrastructure, all the steps required to build +and install the packages are already defined, and they generally work +well for most autotools-based packages. However, when required, it is +still possible to customize what is done in any particular step:

  • +By adding a post-operation hook (after extract, patch, configure, + build or install). See Section 18.22, “Hooks available in the various build steps” for details. +
  • +By overriding one of the steps. For example, even if the autotools + infrastructure is used, if the package .mk file defines its + own LIBFOO_CONFIGURE_CMDS variable, it will be used + instead of the default autotools one. However, using this method + should be restricted to very specific cases. Do not use it in the + general case. +

18.7. Infrastructure for CMake-based packages

18.7.1. cmake-package tutorial

First, let’s see how to write a .mk file for a CMake-based package, +with an example :

01: ################################################################################
+02: #
+03: # libfoo
+04: #
+05: ################################################################################
+06:
+07: LIBFOO_VERSION = 1.0
+08: LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz
+09: LIBFOO_SITE = http://www.foosoftware.org/download
+10: LIBFOO_INSTALL_STAGING = YES
+11: LIBFOO_INSTALL_TARGET = NO
+12: LIBFOO_CONF_OPTS = -DBUILD_DEMOS=ON
+13: LIBFOO_DEPENDENCIES = libglib2 host-pkgconf
+14:
+15: $(eval $(cmake-package))

On line 7, we declare the version of the package.

On line 8 and 9, we declare the name of the tarball (xz-ed tarball recommended) +and the location of the tarball on the Web. Buildroot will automatically +download the tarball from this location.

On line 10, we tell Buildroot to install the package to the staging +directory. The staging directory, located in output/staging/ +is the directory where all the packages are installed, including their +development files, etc. By default, packages are not installed to the +staging directory, since usually, only libraries need to be installed in +the staging directory: their development files are needed to compile +other libraries or applications depending on them. Also by default, when +staging installation is enabled, packages are installed in this location +using the make install command.

On line 11, we tell Buildroot to not install the package to the +target directory. This directory contains what will become the root +filesystem running on the target. For purely static libraries, it is +not necessary to install them in the target directory because they will +not be used at runtime. By default, target installation is enabled; setting +this variable to NO is almost never needed. Also by default, packages are +installed in this location using the make install command.

On line 12, we tell Buildroot to pass custom options to CMake when it is +configuring the package.

On line 13, we declare our dependencies, so that they are built +before the build process of our package starts.

Finally, on line line 15, we invoke the cmake-package +macro that generates all the Makefile rules that actually allows the +package to be built.

18.7.2. cmake-package reference

The main macro of the CMake package infrastructure is +cmake-package. It is similar to the generic-package macro. The ability to +have target and host packages is also available, with the +host-cmake-package macro.

Just like the generic infrastructure, the CMake infrastructure works +by defining a number of variables before calling the cmake-package +macro.

First, all the package metadata information variables that exist in +the generic infrastructure also exist in the CMake infrastructure: +LIBFOO_VERSION, LIBFOO_SOURCE, LIBFOO_PATCH, LIBFOO_SITE, +LIBFOO_SUBDIR, LIBFOO_DEPENDENCIES, LIBFOO_INSTALL_STAGING, +LIBFOO_INSTALL_TARGET.

A few additional variables, specific to the CMake infrastructure, can +also be defined. Many of them are only useful in very specific cases, +typical packages will therefore only use a few of them.

  • +LIBFOO_SUBDIR may contain the name of a subdirectory inside the + package that contains the main CMakeLists.txt file. This is useful, + if for example, the main CMakeLists.txt file is not at the root of + the tree extracted by the tarball. If HOST_LIBFOO_SUBDIR is not + specified, it defaults to LIBFOO_SUBDIR. +
  • +LIBFOO_CONF_ENV, to specify additional environment variables to + pass to CMake. By default, empty. +
  • +LIBFOO_CONF_OPTS, to specify additional configure options to pass + to CMake. By default, empty. A number of common CMake options are + set by the cmake-package infrastructure; so it is normally not + necessary to set them in the package’s *.mk file unless you want + to override them: +

    • +CMAKE_BUILD_TYPE is driven by BR2_ENABLE_DEBUG; +
    • +CMAKE_INSTALL_PREFIX; +
    • +BUILD_SHARED_LIBS is driven by BR2_STATIC_LIBS; +
    • +BUILD_DOC, BUILD_DOCS are disabled; +
    • +BUILD_EXAMPLE, BUILD_EXAMPLES are disabled; +
    • +BUILD_TEST, BUILD_TESTS, BUILD_TESTING are disabled. +
  • +LIBFOO_SUPPORTS_IN_SOURCE_BUILD = NO should be set when the package + cannot be built inside the source tree but needs a separate build + directory. +
  • +LIBFOO_MAKE, to specify an alternate make command. This is + typically useful when parallel make is enabled in the configuration + (using BR2_JLEVEL) but that this feature should be disabled for + the given package, for one reason or another. By default, set to + $(MAKE). If parallel building is not supported by the package, + then it should be set to LIBFOO_MAKE=$(MAKE1). +
  • +LIBFOO_MAKE_ENV, to specify additional environment variables to + pass to make in the build step. These are passed before the make + command. By default, empty. +
  • +LIBFOO_MAKE_OPTS, to specify additional variables to pass to make + in the build step. These are passed after the make command. By + default, empty. +
  • +LIBFOO_INSTALL_OPTS contains the make options used to + install the package to the host directory. By default, the value + is install, which is correct for most CMake packages. It is still + possible to override it. +
  • +LIBFOO_INSTALL_STAGING_OPTS contains the make options used to + install the package to the staging directory. By default, the value + is DESTDIR=$(STAGING_DIR) install/fast, which is correct for most + CMake packages. It is still possible to override it. +
  • +LIBFOO_INSTALL_TARGET_OPTS contains the make options used to + install the package to the target directory. By default, the value + is DESTDIR=$(TARGET_DIR) install/fast. The default value is correct + for most CMake packages, but it is still possible to override it if + needed. +

With the CMake infrastructure, all the steps required to build and +install the packages are already defined, and they generally work well +for most CMake-based packages. However, when required, it is still +possible to customize what is done in any particular step:

  • +By adding a post-operation hook (after extract, patch, configure, + build or install). See Section 18.22, “Hooks available in the various build steps” for details. +
  • +By overriding one of the steps. For example, even if the CMake + infrastructure is used, if the package .mk file defines its own + LIBFOO_CONFIGURE_CMDS variable, it will be used instead of the + default CMake one. However, using this method should be restricted + to very specific cases. Do not use it in the general case. +

18.8. Infrastructure for Python packages

This infrastructure applies to Python packages that use the standard +Python setuptools mechanism as their build system, generally +recognizable by the usage of a setup.py script.

18.8.1. python-package tutorial

First, let’s see how to write a .mk file for a Python package, +with an example :

01: ################################################################################
+02: #
+03: # python-foo
+04: #
+05: ################################################################################
+06:
+07: PYTHON_FOO_VERSION = 1.0
+08: PYTHON_FOO_SOURCE = python-foo-$(PYTHON_FOO_VERSION).tar.xz
+09: PYTHON_FOO_SITE = http://www.foosoftware.org/download
+10: PYTHON_FOO_LICENSE = BSD-3-Clause
+11: PYTHON_FOO_LICENSE_FILES = LICENSE
+12: PYTHON_FOO_ENV = SOME_VAR=1
+13: PYTHON_FOO_DEPENDENCIES = libmad
+14: PYTHON_FOO_SETUP_TYPE = distutils
+15:
+16: $(eval $(python-package))

On line 7, we declare the version of the package.

On line 8 and 9, we declare the name of the tarball (xz-ed tarball +recommended) and the location of the tarball on the Web. Buildroot +will automatically download the tarball from this location.

On line 10 and 11, we give licensing details about the package (its +license on line 10, and the file containing the license text on line +11).

On line 12, we tell Buildroot to pass custom options to the Python +setup.py script when it is configuring the package.

On line 13, we declare our dependencies, so that they are built +before the build process of our package starts.

On line 14, we declare the specific Python build system being used. In +this case the distutils Python build system is used. The two +supported ones are distutils and setuptools.

Finally, on line 16, we invoke the python-package macro that +generates all the Makefile rules that actually allow the package to be +built.

18.8.2. python-package reference

As a policy, packages that merely provide Python modules should all be +named python-<something> in Buildroot. Other packages that use the +Python build system, but are not Python modules, can freely choose +their name (existing examples in Buildroot are scons and +supervisor).

Packages that are only compatible with one version of Python (as in: +Python 2 or Python 3) should depend on that version explicitely in +their Config.in file (BR2_PACKAGE_PYTHON for Python 2, +BR2_PACKAGE_PYTHON3 for Python 3). Packages that are compatible +with both versions should not explicitely depend on them in their +Config.in file, since that condition is already expressed for the +whole "External python modules" menu.

The main macro of the Python package infrastructure is +python-package. It is similar to the generic-package macro. It is +also possible to create Python host packages with the +host-python-package macro.

Just like the generic infrastructure, the Python infrastructure works +by defining a number of variables before calling the python-package +or host-python-package macros.

All the package metadata information variables that exist in the +generic package infrastructure also +exist in the Python infrastructure: PYTHON_FOO_VERSION, +PYTHON_FOO_SOURCE, PYTHON_FOO_PATCH, PYTHON_FOO_SITE, +PYTHON_FOO_SUBDIR, PYTHON_FOO_DEPENDENCIES, PYTHON_FOO_LICENSE, +PYTHON_FOO_LICENSE_FILES, PYTHON_FOO_INSTALL_STAGING, etc.

Note that:

  • +It is not necessary to add python or host-python in the + PYTHON_FOO_DEPENDENCIES variable of a package, since these basic + dependencies are automatically added as needed by the Python + package infrastructure. +
  • +Similarly, it is not needed to add host-setuptools to + PYTHON_FOO_DEPENDENCIES for setuptools-based packages, since it’s + automatically added by the Python infrastructure as needed. +

One variable specific to the Python infrastructure is mandatory:

  • +PYTHON_FOO_SETUP_TYPE, to define which Python build system is used + by the package. The two supported values are distutils and + setuptools. If you don’t know which one is used in your package, + look at the setup.py file in your package source code, and see + whether it imports things from the distutils module or the + setuptools module. +

A few additional variables, specific to the Python infrastructure, can +optionally be defined, depending on the package’s needs. Many of them +are only useful in very specific cases, typical packages will +therefore only use a few of them, or none.

  • +PYTHON_FOO_SUBDIR may contain the name of a subdirectory inside the + package that contains the main setup.py file. This is useful, + if for example, the main setup.py file is not at the root of + the tree extracted by the tarball. If HOST_PYTHON_FOO_SUBDIR is not + specified, it defaults to PYTHON_FOO_SUBDIR. +
  • +PYTHON_FOO_ENV, to specify additional environment variables to + pass to the Python setup.py script (for both the build and install + steps). Note that the infrastructure is automatically passing + several standard variables, defined in PKG_PYTHON_DISTUTILS_ENV + (for distutils target packages), HOST_PKG_PYTHON_DISTUTILS_ENV + (for distutils host packages), PKG_PYTHON_SETUPTOOLS_ENV (for + setuptools target packages) and HOST_PKG_PYTHON_SETUPTOOLS_ENV + (for setuptools host packages). +
  • +PYTHON_FOO_BUILD_OPTS, to specify additional options to pass to the + Python setup.py script during the build step. For target distutils + packages, the PKG_PYTHON_DISTUTILS_BUILD_OPTS options are already + passed automatically by the infrastructure. +
  • +PYTHON_FOO_INSTALL_TARGET_OPTS, PYTHON_FOO_INSTALL_STAGING_OPTS, + HOST_PYTHON_FOO_INSTALL_OPTS to specify additional options to pass + to the Python setup.py script during the target installation step, + the staging installation step or the host installation, + respectively. Note that the infrastructure is automatically passing + some options, defined in PKG_PYTHON_DISTUTILS_INSTALL_TARGET_OPTS + or PKG_PYTHON_DISTUTILS_INSTALL_STAGING_OPTS (for target distutils + packages), HOST_PKG_PYTHON_DISTUTILS_INSTALL_OPTS (for host + distutils packages), PKG_PYTHON_SETUPTOOLS_INSTALL_TARGET_OPTS or + PKG_PYTHON_SETUPTOOLS_INSTALL_STAGING_OPTS (for target setuptools + packages) and HOST_PKG_PYTHON_SETUPTOOLS_INSTALL_OPTS (for host + setuptools packages). +
  • +HOST_PYTHON_FOO_NEEDS_HOST_PYTHON, to define the host python + interpreter. The usage of this variable is limited to host + packages. The two supported value are python2 and python3. It + will ensure the right host python package is available and will + invoke it for the build. If some build steps are overloaded, the + right python interpreter must be explicitly called in the commands. +

With the Python infrastructure, all the steps required to build and +install the packages are already defined, and they generally work well +for most Python-based packages. However, when required, it is still +possible to customize what is done in any particular step:

  • +By adding a post-operation hook (after extract, patch, configure, + build or install). See Section 18.22, “Hooks available in the various build steps” for details. +
  • +By overriding one of the steps. For example, even if the Python + infrastructure is used, if the package .mk file defines its own + PYTHON_FOO_BUILD_CMDS variable, it will be used instead of the + default Python one. However, using this method should be restricted + to very specific cases. Do not use it in the general case. +

18.8.3. Generating a python-package from a PyPI repository

If the Python package for which you would like to create a Buildroot +package is available on PyPI, you may want to use the scanpypi tool +located in utils/ to automate the process.

You can find the list of existing PyPI packages +here.

scanpypi requires Python’s setuptools package to be installed on +your host.

When at the root of your buildroot directory just do :

utils/scanpypi foo bar -o package

This will generate packages python-foo and python-bar in the package +folder if they exist on https://pypi.python.org.

Find the external python modules menu and insert your package inside. +Keep in mind that the items inside a menu should be in alphabetical order.

Please keep in mind that you’ll most likely have to manually check the +package for any mistakes as there are things that cannot be guessed by +the generator (e.g. dependencies on any of the python core modules +such as BR2_PACKAGE_PYTHON_ZLIB). Also, please take note that the +license and license files are guessed and must be checked. You also +need to manually add the package to the package/Config.in file.

If your Buildroot package is not in the official Buildroot tree but in +a br2-external tree, use the -o flag as follows:

utils/scanpypi foo bar -o other_package_dir

This will generate packages python-foo and python-bar in the +other_package_directory instead of package.

Option -h will list the available options:

utils/scanpypi -h

18.8.4. python-package CFFI backend

C Foreign Function Interface for Python (CFFI) provides a convenient +and reliable way to call compiled C code from Python using interface +declarations written in C. Python packages relying on this backend can +be identified by the appearance of a cffi dependency in the +install_requires field of their setup.py file.

Such a package should:

  • +add python-cffi as a runtime dependency in order to install the +compiled C library wrapper on the target. This is achieved by adding +select BR2_PACKAGE_PYTHON_CFFI to the package Config.in. +
config BR2_PACKAGE_PYTHON_FOO
+        bool "python-foo"
+        select BR2_PACKAGE_PYTHON_CFFI # runtime
  • +add host-python-cffi as a build-time dependency in order to +cross-compile the C wrapper. This is achieved by adding +host-python-cffi to the PYTHON_FOO_DEPENDENCIES variable. +
################################################################################
+#
+# python-foo
+#
+################################################################################
+
+...
+
+PYTHON_FOO_DEPENDENCIES = host-python-cffi
+
+$(eval $(python-package))

18.9. Infrastructure for LuaRocks-based packages

18.9.1. luarocks-package tutorial

First, let’s see how to write a .mk file for a LuaRocks-based package, +with an example :

01: ################################################################################
+02: #
+03: # lua-foo
+04: #
+05: ################################################################################
+06:
+07: LUA_FOO_VERSION = 1.0.2-1
+08: LUA_FOO_NAME_UPSTREAM = foo
+09: LUA_FOO_DEPENDENCIES = bar
+10:
+11: LUA_FOO_BUILD_OPTS += BAR_INCDIR=$(STAGING_DIR)/usr/include
+12: LUA_FOO_BUILD_OPTS += BAR_LIBDIR=$(STAGING_DIR)/usr/lib
+13: LUA_FOO_LICENSE = luaFoo license
+14: LUA_FOO_LICENSE_FILES = $(LUA_FOO_SUBDIR)/COPYING
+15:
+16: $(eval $(luarocks-package))

On line 7, we declare the version of the package (the same as in the rockspec, +which is the concatenation of the upstream version and the rockspec revision, +separated by a hyphen -).

On line 8, we declare that the package is called "foo" on LuaRocks. In +Buildroot, we give Lua-related packages a name that starts with "lua", so the +Buildroot name is different from the upstream name. LUA_FOO_NAME_UPSTREAM +makes the link between the two names.

On line 9, we declare our dependencies against native libraries, so that they +are built before the build process of our package starts.

On lines 11-12, we tell Buildroot to pass custom options to LuaRocks when it is +building the package.

On lines 13-14, we specify the licensing terms for the package.

Finally, on line 16, we invoke the luarocks-package +macro that generates all the Makefile rules that actually allows the +package to be built.

Most of these details can be retrieved from the rock and rockspec. +So, this file and the Config.in file can be generated by running the +command luarocks buildroot foo lua-foo in the Buildroot +directory. This command runs a specific Buildroot addon of luarocks +that will automatically generate a Buildroot package. The result must +still be manually inspected and possibly modified.

  • +The package/Config.in file has to be updated manually to include the + generated Config.in files. +

18.9.2. luarocks-package reference

LuaRocks is a deployment and management system for Lua modules, and supports +various build.type: builtin, make and cmake. In the context of +Buildroot, the luarocks-package infrastructure only supports the builtin +mode. LuaRocks packages that use the make or cmake build mechanisms +should instead be packaged using the generic-package and cmake-package +infrastructures in Buildroot, respectively.

The main macro of the LuaRocks package infrastructure is luarocks-package: +like generic-package it works by defining a number of variables providing +metadata information about the package, and then calling luarocks-package.

Just like the generic infrastructure, the LuaRocks infrastructure works +by defining a number of variables before calling the luarocks-package +macro.

First, all the package metadata information variables that exist in +the generic infrastructure also exist in the LuaRocks infrastructure: +LUA_FOO_VERSION, LUA_FOO_SOURCE, LUA_FOO_SITE, +LUA_FOO_DEPENDENCIES, LUA_FOO_LICENSE, LUA_FOO_LICENSE_FILES.

Two of them are populated by the LuaRocks infrastructure (for the +download step). If your package is not hosted on the LuaRocks mirror +$(BR2_LUAROCKS_MIRROR), you can override them:

  • +LUA_FOO_SITE, which defaults to $(BR2_LUAROCKS_MIRROR) +
  • +LUA_FOO_SOURCE, which defaults to + $(lowercase LUA_FOO_NAME_UPSTREAM)-$(LUA_FOO_VERSION).src.rock +

A few additional variables, specific to the LuaRocks infrastructure, are +also defined. They can be overridden in specific cases.

  • +LUA_FOO_NAME_UPSTREAM, which defaults to lua-foo, i.e. the Buildroot + package name +
  • +LUA_FOO_ROCKSPEC, which defaults to + $(lowercase LUA_FOO_NAME_UPSTREAM)-$(LUA_FOO_VERSION).rockspec +
  • +LUA_FOO_SUBDIR, which defaults to + $(LUA_FOO_NAME_UPSTREAM)-$(LUA_FOO_VERSION_WITHOUT_ROCKSPEC_REVISION) +
  • +LUA_FOO_BUILD_OPTS contains additional build options for the + luarocks build call. +

18.10. Infrastructure for Perl/CPAN packages

18.10.1. perl-package tutorial

First, let’s see how to write a .mk file for a Perl/CPAN package, +with an example :

01: ################################################################################
+02: #
+03: # perl-foo-bar
+04: #
+05: ################################################################################
+06:
+07: PERL_FOO_BAR_VERSION = 0.02
+08: PERL_FOO_BAR_SOURCE = Foo-Bar-$(PERL_FOO_BAR_VERSION).tar.gz
+09: PERL_FOO_BAR_SITE = $(BR2_CPAN_MIRROR)/authors/id/M/MO/MONGER
+10: PERL_FOO_BAR_DEPENDENCIES = perl-strictures
+11: PERL_FOO_BAR_LICENSE = Artistic or GPL-1.0+
+12: PERL_FOO_BAR_LICENSE_FILES = LICENSE
+13: PERL_FOO_BAR_DISTNAME = Foo-Bar
+14:
+15: $(eval $(perl-package))

On line 7, we declare the version of the package.

On line 8 and 9, we declare the name of the tarball and the location +of the tarball on a CPAN server. Buildroot will automatically download +the tarball from this location.

On line 10, we declare our dependencies, so that they are built +before the build process of our package starts.

On line 11 and 12, we give licensing details about the package (its +license on line 11, and the file containing the license text on line +12).

On line 13, the name of the distribution as needed by the script +utils/scancpan (in order to regenerate/upgrade these package files).

Finally, on line 15, we invoke the perl-package macro that +generates all the Makefile rules that actually allow the package to be +built.

Most of these data can be retrieved from https://metacpan.org/. +So, this file and the Config.in can be generated by running +the script utils/scancpan Foo-Bar in the Buildroot directory +(or in a br2-external tree). +This script creates a Config.in file and foo-bar.mk file for the +requested package, and also recursively for all dependencies specified by +CPAN. You should still manually edit the result. In particular, the +following things should be checked.

  • +If the perl module links with a shared library that is provided by + another (non-perl) package, this dependency is not added automatically. + It has to be added manually to PERL_FOO_BAR_DEPENDENCIES. +
  • +The package/Config.in file has to be updated manually to include the + generated Config.in files. As a hint, the scancpan script prints out + the required source "…" statements, sorted alphabetically. +

18.10.2. perl-package reference

As a policy, packages that provide Perl/CPAN modules should all be +named perl-<something> in Buildroot.

This infrastructure handles various Perl build systems : +ExtUtils-MakeMaker (EUMM), Module-Build (MB) and Module-Build-Tiny. +Build.PL is preferred by default when a package provides a Makefile.PL +and a Build.PL.

The main macro of the Perl/CPAN package infrastructure is +perl-package. It is similar to the generic-package macro. The ability to +have target and host packages is also available, with the +host-perl-package macro.

Just like the generic infrastructure, the Perl/CPAN infrastructure +works by defining a number of variables before calling the +perl-package macro.

First, all the package metadata information variables that exist in the +generic infrastructure also exist in the Perl/CPAN infrastructure: +PERL_FOO_VERSION, PERL_FOO_SOURCE, +PERL_FOO_PATCH, PERL_FOO_SITE, +PERL_FOO_SUBDIR, PERL_FOO_DEPENDENCIES, +PERL_FOO_INSTALL_TARGET.

Note that setting PERL_FOO_INSTALL_STAGING to YES has no effect +unless a PERL_FOO_INSTALL_STAGING_CMDS variable is defined. The perl +infrastructure doesn’t define these commands since Perl modules generally +don’t need to be installed to the staging directory.

A few additional variables, specific to the Perl/CPAN infrastructure, +can also be defined. Many of them are only useful in very specific +cases, typical packages will therefore only use a few of them.

  • +PERL_FOO_PREFER_INSTALLER/HOST_PERL_FOO_PREFER_INSTALLER, + specifies the preferred installation method. Possible values are + EUMM (for Makefile.PL based installation using + ExtUtils-MakeMaker) and MB (for Build.PL based installation + using Module-Build). This variable is only used when the package + provides both installation methods. +
  • +PERL_FOO_CONF_ENV/HOST_PERL_FOO_CONF_ENV, to specify additional + environment variables to pass to the perl Makefile.PL or perl Build.PL. + By default, empty. +
  • +PERL_FOO_CONF_OPTS/HOST_PERL_FOO_CONF_OPTS, to specify additional + configure options to pass to the perl Makefile.PL or perl Build.PL. + By default, empty. +
  • +PERL_FOO_BUILD_OPTS/HOST_PERL_FOO_BUILD_OPTS, to specify additional + options to pass to make pure_all or perl Build build in the build step. + By default, empty. +
  • +PERL_FOO_INSTALL_TARGET_OPTS, to specify additional options to + pass to make pure_install or perl Build install in the install step. + By default, empty. +
  • +HOST_PERL_FOO_INSTALL_OPTS, to specify additional options to + pass to make pure_install or perl Build install in the install step. + By default, empty. +

18.11. Infrastructure for virtual packages

In Buildroot, a virtual package is a package whose functionalities are +provided by one or more packages, referred to as providers. The virtual +package management is an extensible mechanism allowing the user to choose +the provider used in the rootfs.

For example, OpenGL ES is an API for 2D and 3D graphics on embedded systems. +The implementation of this API is different for the Allwinner Tech Sunxi and +the Texas Instruments OMAP35xx platforms. So libgles will be a virtual +package and sunxi-mali and ti-gfx will be the providers.

18.11.1. virtual-package tutorial

In the following example, we will explain how to add a new virtual package +(something-virtual) and a provider for it (some-provider).

First, let’s create the virtual package.

18.11.2. Virtual package’s Config.in file

The Config.in file of virtual package something-virtual should contain:

01: config BR2_PACKAGE_HAS_SOMETHING_VIRTUAL
+02:     bool
+03:
+04: config BR2_PACKAGE_PROVIDES_SOMETHING_VIRTUAL
+05:     depends on BR2_PACKAGE_HAS_SOMETHING_VIRTUAL
+06:     string

In this file, we declare two options, BR2_PACKAGE_HAS_SOMETHING_VIRTUAL and +BR2_PACKAGE_PROVIDES_SOMETHING_VIRTUAL, whose values will be used by the +providers.

18.11.3. Virtual package’s .mk file

The .mk for the virtual package should just evaluate the virtual-package macro:

01: ################################################################################
+02: #
+03: # something-virtual
+04: #
+05: ################################################################################
+06:
+07: $(eval $(virtual-package))

The ability to have target and host packages is also available, with the +host-virtual-package macro.

18.11.4. Provider’s Config.in file

When adding a package as a provider, only the Config.in file requires some +modifications.

The Config.in file of the package some-provider, which provides the +functionalities of something-virtual, should contain:

01: config BR2_PACKAGE_SOME_PROVIDER
+02:     bool "some-provider"
+03:     select BR2_PACKAGE_HAS_SOMETHING_VIRTUAL
+04:     help
+05:       This is a comment that explains what some-provider is.
+06:
+07:       http://foosoftware.org/some-provider/
+08:
+09: if BR2_PACKAGE_SOME_PROVIDER
+10: config BR2_PACKAGE_PROVIDES_SOMETHING_VIRTUAL
+11:     default "some-provider"
+12: endif

On line 3, we select BR2_PACKAGE_HAS_SOMETHING_VIRTUAL, and on line 11, we +set the value of BR2_PACKAGE_PROVIDES_SOMETHING_VIRTUAL to the name of the +provider, but only if it is selected.

18.11.5. Provider’s .mk file

The .mk file should also declare an additional variable +SOME_PROVIDER_PROVIDES to contain the names of all the virtual +packages it is an implementation of:

01: SOME_PROVIDER_PROVIDES = something-virtual

Of course, do not forget to add the proper build and runtime dependencies for +this package!

18.11.6. Notes on depending on a virtual package

When adding a package that requires a certain FEATURE provided by a virtual +package, you have to use depends on BR2_PACKAGE_HAS_FEATURE, like so:

config BR2_PACKAGE_HAS_FEATURE
+    bool
+
+config BR2_PACKAGE_FOO
+    bool "foo"
+    depends on BR2_PACKAGE_HAS_FEATURE

18.11.7. Notes on depending on a specific provider

If your package really requires a specific provider, then you’ll have to +make your package depends on this provider; you can not select a +provider.

Let’s take an example with two providers for a FEATURE:

config BR2_PACKAGE_HAS_FEATURE
+    bool
+
+config BR2_PACKAGE_FOO
+    bool "foo"
+    select BR2_PACKAGE_HAS_FEATURE
+
+config BR2_PACKAGE_BAR
+    bool "bar"
+    select BR2_PACKAGE_HAS_FEATURE

And you are adding a package that needs FEATURE as provided by foo, +but not as provided by bar.

If you were to use select BR2_PACKAGE_FOO, then the user would still +be able to select BR2_PACKAGE_BAR in the menuconfig. This would create +a configuration inconsistency, whereby two providers of the same FEATURE +would be enabled at once, one explicitly set by the user, the other +implicitly by your select.

Instead, you have to use depends on BR2_PACKAGE_FOO, which avoids any +implicit configuration inconsistency.

18.12. Infrastructure for packages using kconfig for configuration files

A popular way for a software package to handle user-specified +configuration is kconfig. Among others, it is used by the Linux +kernel, Busybox, and Buildroot itself. The presence of a .config file +and a menuconfig target are two well-known symptoms of kconfig being +used.

Buildroot features an infrastructure for packages that use kconfig for +their configuration. This infrastructure provides the necessary logic to +expose the package’s menuconfig target as foo-menuconfig in +Buildroot, and to handle the copying back and forth of the configuration +file in a correct way.

The kconfig-package infrastructure is based on the generic-package +infrastructure. All variables supported by generic-package are +available in kconfig-package as well. See +Section 18.5.2, “generic-package reference” for more details.

In order to use the kconfig-package infrastructure for a Buildroot +package, the minimally required lines in the .mk file, in addition to +the variables required by the generic-package infrastructure, are:

FOO_KCONFIG_FILE = reference-to-source-configuration-file
+
+$(eval $(kconfig-package))

This snippet creates the following make targets:

  • +foo-menuconfig, which calls the package’s menuconfig target +
  • +foo-update-config, which copies the configuration back to the + source configuration file. It is not possible to use this target + when fragment files are set. +
  • +foo-update-defconfig, which copies the configuration back to the + source configuration file. The configuration file will only list the + options that differ from the default values. It is not possible to + use this target when fragment files are set. +
  • +foo-diff-config, which outputs the differences between the current + configuration and the one defined in the Buildroot configuration for + this kconfig package. The output is useful to identify the + configuration changes that may have to be propagated to + configuration fragments for example. +

and ensures that the source configuration file is copied to the build +directory at the right moment.

There are two options to specify a configuration file to use, either +FOO_KCONFIG_FILE (as in the example, above) or FOO_KCONFIG_DEFCONFIG. +It is mandatory to provide either, but not both:

  • +FOO_KCONFIG_FILE specifies the path to a defconfig or full-config file + to be used to configure the package. +
  • +FOO_KCONFIG_DEFCONFIG specifies the defconfig make rule to call to + configure the package. +

In addition to these minimally required lines, several optional variables can +be set to suit the needs of the package under consideration:

  • +FOO_KCONFIG_EDITORS: a space-separated list of kconfig editors to + support, for example menuconfig xconfig. By default, menuconfig. +
  • +FOO_KCONFIG_FRAGMENT_FILES: a space-separated list of configuration + fragment files that are merged to the main configuration file. + Fragment files are typically used when there is a desire to stay in sync + with an upstream (def)config file, with some minor modifications. +
  • +FOO_KCONFIG_OPTS: extra options to pass when calling the kconfig + editors. This may need to include $(FOO_MAKE_OPTS), for example. By + default, empty. +
  • +FOO_KCONFIG_FIXUP_CMDS: a list of shell commands needed to fixup the + configuration file after copying it or running a kconfig editor. Such + commands may be needed to ensure a configuration consistent with other + configuration of Buildroot, for example. By default, empty. +
  • +FOO_KCONFIG_DOTCONFIG: path (with filename) of the .config file, + relative to the package source tree. The default, .config, should + be well suited for all packages that use the standard kconfig + infrastructure as inherited from the Linux kernel; some packages use + a derivative of kconfig that use a different location. +
  • +FOO_KCONFIG_DEPENDENCIES: the list of packages (most probably, host + packages) that need to be built before this package’s kconfig is + interpreted. Seldom used. By default, empty. +

18.13. Infrastructure for rebar-based packages

18.13.1. rebar-package tutorial

First, let’s see how to write a .mk file for a rebar-based package, +with an example :

01: ################################################################################
+02: #
+03: # erlang-foobar
+04: #
+05: ################################################################################
+06:
+07: ERLANG_FOOBAR_VERSION = 1.0
+08: ERLANG_FOOBAR_SOURCE = erlang-foobar-$(ERLANG_FOOBAR_VERSION).tar.xz
+09: ERLANG_FOOBAR_SITE = http://www.foosoftware.org/download
+10: ERLANG_FOOBAR_DEPENDENCIES = host-libaaa libbbb
+11:
+12: $(eval $(rebar-package))

On line 7, we declare the version of the package.

On line 8 and 9, we declare the name of the tarball (xz-ed tarball +recommended) and the location of the tarball on the Web. Buildroot +will automatically download the tarball from this location.

On line 10, we declare our dependencies, so that they are built +before the build process of our package starts.

Finally, on line 12, we invoke the rebar-package macro that +generates all the Makefile rules that actually allows the package to +be built.

18.13.2. rebar-package reference

The main macro of the rebar package infrastructure is +rebar-package. It is similar to the generic-package macro. The +ability to have host packages is also available, with the +host-rebar-package macro.

Just like the generic infrastructure, the rebar infrastructure works +by defining a number of variables before calling the rebar-package +macro.

First, all the package metadata information variables that exist in +the generic infrastructure also exist in the rebar infrastructure: +ERLANG_FOOBAR_VERSION, ERLANG_FOOBAR_SOURCE, +ERLANG_FOOBAR_PATCH, ERLANG_FOOBAR_SITE, +ERLANG_FOOBAR_SUBDIR, ERLANG_FOOBAR_DEPENDENCIES, +ERLANG_FOOBAR_INSTALL_STAGING, ERLANG_FOOBAR_INSTALL_TARGET, +ERLANG_FOOBAR_LICENSE and ERLANG_FOOBAR_LICENSE_FILES.

A few additional variables, specific to the rebar infrastructure, +can also be defined. Many of them are only useful in very specific +cases, typical packages will therefore only use a few of them.

  • +ERLANG_FOOBAR_USE_AUTOCONF, to specify that the package uses + autoconf at the configuration step. When a package sets this + variable to YES, the autotools infrastructure is used. +

    Note. You can also use some of the variables from the autotools + infrastructure: ERLANG_FOOBAR_CONF_ENV, ERLANG_FOOBAR_CONF_OPTS, + ERLANG_FOOBAR_AUTORECONF, ERLANG_FOOBAR_AUTORECONF_ENV and + ERLANG_FOOBAR_AUTORECONF_OPTS.

  • +ERLANG_FOOBAR_USE_BUNDLED_REBAR, to specify that the package has + a bundled version of rebar and that it shall be used. Valid + values are YES or NO (the default). +

    Note. If the package bundles a rebar utility, but can use the generic + one that Buildroot provides, just say NO (i.e., do not specify + this variable). Only set if it is mandatory to use the rebar + utility bundled in this package.

  • +ERLANG_FOOBAR_REBAR_ENV, to specify additional environment + variables to pass to the rebar utility. +
  • +ERLANG_FOOBAR_KEEP_DEPENDENCIES, to keep the dependencies + described in the rebar.config file. Valid values are YES or NO + (the default). Unless this variable is set to YES, the rebar + infrastructure removes such dependencies in a post-patch hook to + ensure rebar does not download nor compile them. +

With the rebar infrastructure, all the steps required to build +and install the packages are already defined, and they generally work +well for most rebar-based packages. However, when required, it is +still possible to customize what is done in any particular step:

  • +By adding a post-operation hook (after extract, patch, configure, + build or install). See Section 18.22, “Hooks available in the various build steps” for details. +
  • +By overriding one of the steps. For example, even if the rebar + infrastructure is used, if the package .mk file defines its + own ERLANG_FOOBAR_BUILD_CMDS variable, it will be used instead + of the default rebar one. However, using this method should be + restricted to very specific cases. Do not use it in the general + case. +

18.14. Infrastructure for Waf-based packages

18.14.1. waf-package tutorial

First, let’s see how to write a .mk file for a Waf-based package, with +an example :

01: ################################################################################
+02: #
+03: # libfoo
+04: #
+05: ################################################################################
+06:
+07: LIBFOO_VERSION = 1.0
+08: LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz
+09: LIBFOO_SITE = http://www.foosoftware.org/download
+10: LIBFOO_CONF_OPTS = --enable-bar --disable-baz
+11: LIBFOO_DEPENDENCIES = bar
+12:
+13: $(eval $(waf-package))

On line 7, we declare the version of the package.

On line 8 and 9, we declare the name of the tarball (xz-ed tarball +recommended) and the location of the tarball on the Web. Buildroot +will automatically download the tarball from this location.

On line 10, we tell Buildroot what options to enable for libfoo.

On line 11, we tell Buildroot the dependencies of libfoo.

Finally, on line line 13, we invoke the waf-package +macro that generates all the Makefile rules that actually allows the +package to be built.

18.14.2. waf-package reference

The main macro of the Waf package infrastructure is waf-package. +It is similar to the generic-package macro.

Just like the generic infrastructure, the Waf infrastructure works +by defining a number of variables before calling the waf-package +macro.

First, all the package metadata information variables that exist in +the generic infrastructure also exist in the Waf infrastructure: +LIBFOO_VERSION, LIBFOO_SOURCE, LIBFOO_PATCH, LIBFOO_SITE, +LIBFOO_SUBDIR, LIBFOO_DEPENDENCIES, LIBFOO_INSTALL_STAGING, +LIBFOO_INSTALL_TARGET.

An additional variable, specific to the Waf infrastructure, can +also be defined.

  • +LIBFOO_SUBDIR may contain the name of a subdirectory inside the + package that contains the main wscript file. This is useful, + if for example, the main wscript file is not at the root of + the tree extracted by the tarball. If HOST_LIBFOO_SUBDIR is not + specified, it defaults to LIBFOO_SUBDIR. +
  • +LIBFOO_NEEDS_EXTERNAL_WAF can be set to YES or NO to tell + Buildroot to use the bundled waf executable. If set to NO, the + default, then Buildroot will use the waf executable provided in the + package source tree; if set to YES, then Buildroot will download, + install waf as a host tool and use it to build the package. +
  • +LIBFOO_WAF_OPTS, to specify additional options to pass to the + waf script at every step of the package build process: configure, + build and installation. By default, empty. +
  • +LIBFOO_CONF_OPTS, to specify additional options to pass to the + waf script for the configuration step. By default, empty. +
  • +LIBFOO_BUILD_OPTS, to specify additional options to pass to the + waf script during the build step. By default, empty. +
  • +LIBFOO_INSTALL_STAGING_OPTS, to specify additional options to pass + to the waf script during the staging installation step. By default, + empty. +
  • +LIBFOO_INSTALL_TARGET_OPTS, to specify additional options to pass + to the waf script during the target installation step. By default, + empty. +

18.15. Infrastructure for Meson-based packages

18.15.1. meson-package tutorial

Meson is an open source build system meant to be both +extremely fast, and, even more importantly, as user friendly as possible. It +uses Ninja as a companion tool to perform the actual +build operations.

Let’s see how to write a .mk file for a Meson-based package, with an example:

01: ################################################################################
+02: #
+03: # foo
+04: #
+05: ################################################################################
+06:
+07: FOO_VERSION = 1.0
+08: FOO_SOURCE = foo-$(FOO_VERSION).tar.gz
+09: FOO_SITE = http://www.foosoftware.org/download
+10: FOO_LICENSE = GPL-3.0+
+11: FOO_LICENSE_FILES = COPYING
+12: FOO_INSTALL_STAGING = YES
+13:
+14: FOO_DEPENDENCIES = host-pkgconf bar
+15:
+16: ifeq ($(BR2_PACKAGE_BAZ),y)
+17: FOO_CONF_OPTS += -Dbaz=true
+18: FOO_DEPENDENCIES += baz
+19: else
+20: FOO_CONF_OPTS += -Dbaz=false
+21: endif
+22:
+23: $(eval $(meson-package))

The Makefile starts with the definition of the standard variables for package +declaration (lines 7 to 11).

On line line 23, we invoke the meson-package macro that generates all the +Makefile rules that actually allows the package to be built.

In the example, host-pkgconf and bar are declared as dependencies in +FOO_DEPENDENCIES at line 14 because the Meson build file of foo uses +pkg-config to determine the compilation flags and libraries of package bar.

Note that it is not necessary to add host-meson in the FOO_DEPENDENCIES +variable of a package, since this basic dependency is automatically added as +needed by the Meson package infrastructure.

If the "baz" package is selected, then support for the "baz" feature in "foo" is +activated by adding -Dbaz=true to FOO_CONF_OPTS at line 17, as specified in +the meson_options.txt file in "foo" source tree. The "baz" package is also +added to FOO_DEPENDENCIES. Note that the support for baz is explicitly +disabled at line 20, if the package is not selected.

To sum it up, to add a new meson-based package, the Makefile example can be +copied verbatim then edited to replace all occurences of FOO with the +uppercase name of the new package and update the values of the standard +variables.

18.15.2. meson-package reference

The main macro of the Meson package infrastructure is meson-package. It is +similar to the generic-package macro. The ability to have target and host +packages is also available, with the host-meson-package macro.

Just like the generic infrastructure, the Meson infrastructure works by defining +a number of variables before calling the meson-package macro.

First, all the package metadata information variables that exist in the generic +infrastructure also exist in the Meson infrastructure: FOO_VERSION, +FOO_SOURCE, FOO_PATCH, FOO_SITE, FOO_SUBDIR, FOO_DEPENDENCIES, +FOO_INSTALL_STAGING, FOO_INSTALL_TARGET.

A few additional variables, specific to the Meson infrastructure, can also be +defined. Many of them are only useful in very specific cases, typical packages +will therefore only use a few of them.

  • +FOO_SUBDIR may contain the name of a subdirectory inside the + package that contains the main meson.build file. This is useful, + if for example, the main meson.build file is not at the root of + the tree extracted by the tarball. If HOST_FOO_SUBDIR is not + specified, it defaults to FOO_SUBDIR. +
  • +FOO_CONF_ENV, to specify additional environment variables to pass to + meson for the configuration step. By default, empty. +
  • +FOO_CONF_OPTS, to specify additional options to pass to meson for the + configuration step. By default, empty. +
  • +FOO_CFLAGS, to specify compiler arguments added to the package specific + cross-compile.conf file c_args property. By default, the value of + TARGET_CFLAGS. +
  • +FOO_CXXFLAGS, to specify compiler arguments added to the package specific + cross-compile.conf file cpp_args property. By default, the value of + TARGET_CXXFLAGS. +
  • +FOO_LDFLAGS, to specify compiler arguments added to the package specific + cross-compile.conf file c_link_args and cpp_link_args properties. By + default, the value of TARGET_LDFLAGS. +
  • +FOO_MESON_EXTRA_BINARIES, to specify a space-separated list of programs + to add to the [binaries] section of the meson cross-compilation.conf + configuration file. The format is program-name='/path/to/program', with + no space around the = sign, and with the path of the program between + single quotes. By default, empty. Note that Buildroot already sets the + correct values for c, cpp, ar, strip, and pkgconfig. +
  • +FOO_MESON_EXTRA_PROPERTIES, to specify a space-separated list of + properties to add to the [properties] section of the meson + cross-compilation.conf configuration file. The format is + property-name=<value> with no space around the = sign, and with + single quotes around string values. By default, empty. Note that + Buildroot already sets values for needs_exe_wrapper, c_args, + c_link_args, cpp_args, cpp_link_args, sys_root, and + pkg_config_libdir. +
  • +FOO_NINJA_ENV, to specify additional environment variables to pass to + ninja, meson companion tool in charge of the build operations. By default, + empty. +
  • +FOO_NINJA_OPTS, to specify a space-separated list of targets to build. By + default, empty, to build the default target(s). +

18.16. Integration of Cargo-based packages

Cargo is the package manager for the Rust programming language. It allows the +user to build programs or libraries written in Rust, but it also downloads and +manages their dependencies, to ensure repeatable builds. Cargo packages are +called "crates".

18.16.1. Cargo-based package’s Config.in file

The Config.in file of Cargo-based package foo should contain:

01: config BR2_PACKAGE_FOO
+02:     bool "foo"
+03:     depends on BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS
+04:     select BR2_PACKAGE_HOST_RUSTC
+05:     help
+06:       This is a comment that explains what foo is.
+07:
+08:       http://foosoftware.org/foo/

18.16.2. Cargo-based package’s .mk file

Buildroot does not (yet) provide a dedicated package infrastructure for +Cargo-based packages. So, we will explain how to write a .mk file for such a +package. Let’s start with an example:

01: ################################################################################
+02: #
+03: # foo
+04: #
+05: ################################################################################
+06:
+07: FOO_VERSION = 1.0
+08: FOO_SOURCE = foo-$(FOO_VERSION).tar.gz
+09: FOO_SITE = http://www.foosoftware.org/download
+10: FOO_LICENSE = GPL-3.0+
+11: FOO_LICENSE_FILES = COPYING
+12:
+13: FOO_DEPENDENCIES = host-rustc
+14:
+15: FOO_CARGO_ENV = CARGO_HOME=$(HOST_DIR)/share/cargo
+16:
+17: FOO_BIN_DIR = target/$(RUSTC_TARGET_NAME)/$(FOO_CARGO_MODE)
+18:
+19: FOO_CARGO_OPTS = \
+20:     $(if $(BR2_ENABLE_DEBUG),,--release) \
+21:     --target=$(RUSTC_TARGET_NAME) \
+22:     --manifest-path=$(@D)/Cargo.toml
+23:
+24: define FOO_BUILD_CMDS
+25:     $(TARGET_MAKE_ENV) $(FOO_CARGO_ENV) \
+26:             cargo build $(FOO_CARGO_OPTS)
+27: endef
+28:
+29: define FOO_INSTALL_TARGET_CMDS
+30:     $(INSTALL) -D -m 0755 $(@D)/$(FOO_BIN_DIR)/foo \
+31:             $(TARGET_DIR)/usr/bin/foo
+32: endef
+33:
+34: $(eval $(generic-package))

The Makefile starts with the definition of the standard variables for package +declaration (lines 7 to 11).

As seen in line 34, it is based on the +generic-package infrastructure. So, it defines +the variables required by this particular infrastructure, where Cargo is +invoked:

  • +FOO_BUILD_CMDS: Cargo is invoked to perform the build. The options required + to configure the cross-compilation of the package are passed via + FOO_CONF_OPTS. +
  • +FOO_INSTALL_TARGET_CMDS: The binary executable generated is installed on + the target. +

In order to have Cargo available for the build, FOO_DEPENDENCIES needs to +contain host-cargo.

To sum it up, to add a new Cargo-based package, the Makefile example can be +copied verbatim then edited to replace all occurences of FOO with the +uppercase name of the new package and update the values of the standard +variables.

18.16.3. About Dependencies Management

A crate can depend on other libraries from crates.io or git repositories, listed +in its Cargo.toml file. Before starting a build, Cargo usually downloads +automatically them. This step can also be performed independently, via the +cargo fetch command.

Cargo maintains a local cache of the registry index and of git checkouts of the +crates, whose location is given by $CARGO_HOME. As seen in the package +Makefile example at line 15, this environment variable is set to +$(HOST_DIR)/share/cargo.

This dependency download mechanism is not convenient when performing an offline +build, as Cargo will fail to fetch the dependencies. In that case, it is advised +to generate a tarball of the dependencies using the cargo vendor and add it to +FOO_EXTRA_DOWNLOADS.

18.17. Infrastructure for Go packages

This infrastructure applies to Go packages that use the standard +build system and use bundled dependencies.

18.17.1. golang-package tutorial

First, let’s see how to write a .mk file for a go package, +with an example :

01: ################################################################################
+02: #
+03: # foo
+04: #
+05: ################################################################################
+06:
+07: FOO_VERSION = 1.0
+08: FOO_SITE = $(call github,bar,foo,$(FOO_VERSION))
+09: FOO_LICENSE = BSD-3-Clause
+10: FOO_LICENSE_FILES = LICENSE
+11:
+12: $(eval $(golang-package))

On line 7, we declare the version of the package.

On line 8, we declare the upstream location of the package, here +fetched from Github, since a large number of Go packages are hosted on +Github.

On line 9 and 10, we give licensing details about the package.

Finally, on line 12, we invoke the golang-package macro that +generates all the Makefile rules that actually allow the package to be +built.

18.17.2. golang-package reference

In their Config.in file, packages using the golang-package +infrastructure should depend on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS +because Buildroot will automatically add a dependency on host-go +to such packages. +If you need CGO support in your package, you must add a dependency on +BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS.

The main macro of the Go package infrastructure is +golang-package. It is similar to the generic-package macro. The +ability to build host packages is also available, with the +host-golang-package macro. +Host packages built by host-golang-package macro should depend on +BR2_PACKAGE_HOST_GO_HOST_ARCH_SUPPORTS.

Just like the generic infrastructure, the Go infrastructure works +by defining a number of variables before calling the golang-package.

All the package metadata information variables that exist in the +generic package infrastructure also +exist in the Go infrastructure: FOO_VERSION, FOO_SOURCE, +FOO_PATCH, FOO_SITE, FOO_SUBDIR, FOO_DEPENDENCIES, +FOO_LICENSE, FOO_LICENSE_FILES, FOO_INSTALL_STAGING, etc.

Note that it is not necessary to add host-go in the +FOO_DEPENDENCIES variable of a package, since this basic dependency +is automatically added as needed by the Go package infrastructure.

A few additional variables, specific to the Go infrastructure, can +optionally be defined, depending on the package’s needs. Many of them +are only useful in very specific cases, typical packages will +therefore only use a few of them, or none.

  • +The package must specify its Go module name in the FOO_GOMOD + variable. If not specified, it defaults to + URL-domain/1st-part-of-URL/2nd-part-of-URL, e.g FOO_GOMOD will + take the value github.com/bar/foo for a package that specifies + FOO_SITE = $(call github,bar,foo,$(FOO_VERSION)). The Go package + infrastructure will automatically generate a minimal go.mod file + in the package source tree if it doesn’t exist. +
  • +FOO_LDFLAGS and FOO_TAGS can be used to pass respectively the + LDFLAGS or the TAGS to the go build command. +
  • +FOO_BUILD_TARGETS can be used to pass the list of targets that + should be built. If FOO_BUILD_TARGETS is not specified, it + defaults to .. We then have two cases: +

    • +FOO_BUILD_TARGETS is .. In this case, we assume only one binary + will be produced, and that by default we name it after the package + name. If that is not appropriate, the name of the produced binary + can be overridden using FOO_BIN_NAME. +
    • +FOO_BUILD_TARGETS is not .. In this case, we iterate over the + values to build each target, and for each produced a binary that is + the non-directory component of the target. For example if + FOO_BUILD_TARGETS = cmd/docker cmd/dockerd the binaries produced + are docker and dockerd. +
  • +FOO_INSTALL_BINS can be used to pass the list of binaries that + should be installed in /usr/bin on the target. If + FOO_INSTALL_BINS is not specified, it defaults to the lower-case + name of package. +

With the Go infrastructure, all the steps required to build and +install the packages are already defined, and they generally work well +for most Go-based packages. However, when required, it is still +possible to customize what is done in any particular step:

  • +By adding a post-operation hook (after extract, patch, configure, + build or install). See Section 18.22, “Hooks available in the various build steps” for details. +
  • +By overriding one of the steps. For example, even if the Go + infrastructure is used, if the package .mk file defines its own + FOO_BUILD_CMDS variable, it will be used instead of the default Go + one. However, using this method should be restricted to very + specific cases. Do not use it in the general case. +

18.18. Infrastructure for QMake-based packages

18.18.1. qmake-package tutorial

First, let’s see how to write a .mk file for a QMake-based package, with +an example :

01: ################################################################################
+02: #
+03: # libfoo
+04: #
+05: ################################################################################
+06:
+07: LIBFOO_VERSION = 1.0
+08: LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz
+09: LIBFOO_SITE = http://www.foosoftware.org/download
+10: LIBFOO_CONF_OPTS = QT_CONFIG+=bar QT_CONFIG-=baz
+11: LIBFOO_DEPENDENCIES = bar
+12:
+13: $(eval $(qmake-package))

On line 7, we declare the version of the package.

On line 8 and 9, we declare the name of the tarball (xz-ed tarball +recommended) and the location of the tarball on the Web. Buildroot +will automatically download the tarball from this location.

On line 10, we tell Buildroot what options to enable for libfoo.

On line 11, we tell Buildroot the dependencies of libfoo.

Finally, on line line 13, we invoke the qmake-package +macro that generates all the Makefile rules that actually allows the +package to be built.

18.18.2. qmake-package reference

The main macro of the QMake package infrastructure is qmake-package. +It is similar to the generic-package macro.

Just like the generic infrastructure, the QMake infrastructure works +by defining a number of variables before calling the qmake-package +macro.

First, all the package metadata information variables that exist in +the generic infrastructure also exist in the QMake infrastructure: +LIBFOO_VERSION, LIBFOO_SOURCE, LIBFOO_PATCH, LIBFOO_SITE, +LIBFOO_SUBDIR, LIBFOO_DEPENDENCIES, LIBFOO_INSTALL_STAGING, +LIBFOO_INSTALL_TARGET.

An additional variable, specific to the QMake infrastructure, can +also be defined.

  • +LIBFOO_CONF_ENV, to specify additional environment variables to + pass to the qmake script for the configuration step. By default, empty. +
  • +LIBFOO_CONF_OPTS, to specify additional options to pass to the + qmake script for the configuration step. By default, empty. +
  • +LIBFOO_MAKE_ENV, to specify additional environment variables to the + make command during the build and install steps. By default, empty. +
  • +LIBFOO_MAKE_OPTS, to specify additional targets to pass to the + make command during the build step. By default, empty. +
  • +LIBFOO_INSTALL_STAGING_OPTS, to specify additional targets to pass + to the make command during the staging installation step. By default, + install. +
  • +LIBFOO_INSTALL_TARGET_OPTS, to specify additional targets to pass + to the make command during the target installation step. By default, + install. +
  • +LIBFOO_SYNC_HEADERS, to run syncqt.pl before qmake. Some packages + need this to have a properly populated include directory before + running the build. +

18.19. Infrastructure for packages building kernel modules

Buildroot offers a helper infrastructure to make it easy to write packages that +build and install Linux kernel modules. Some packages only contain a kernel +module, other packages contain programs and libraries in addition to kernel +modules. Buildroot’s helper infrastructure supports either case.

18.19.1. kernel-module tutorial

Let’s start with an example on how to prepare a simple package that only +builds a kernel module, and no other component:

01: ################################################################################
+02: #
+03: # foo
+04: #
+05: ################################################################################
+06:
+07: FOO_VERSION = 1.2.3
+08: FOO_SOURCE = foo-$(FOO_VERSION).tar.xz
+09: FOO_SITE = http://www.foosoftware.org/download
+10: FOO_LICENSE = GPL-2.0
+11: FOO_LICENSE_FILES = COPYING
+12:
+13: $(eval $(kernel-module))
+14: $(eval $(generic-package))

Lines 7-11 define the usual meta-data to specify the version, archive name, +remote URI where to find the package source, licensing information.

On line 13, we invoke the kernel-module helper infrastructure, that +generates all the appropriate Makefile rules and variables to build +that kernel module.

Finally, on line 14, we invoke the +generic-package infrastructure.

The dependency on linux is automatically added, so it is not needed to +specify it in FOO_DEPENDENCIES.

What you may have noticed is that, unlike other package infrastructures, +we explicitly invoke a second infrastructure. This allows a package to +build a kernel module, but also, if needed, use any one of other package +infrastructures to build normal userland components (libraries, +executables…). Using the kernel-module infrastructure on its own is +not sufficient; another package infrastructure must be used.

Let’s look at a more complex example:

01: ################################################################################
+02: #
+03: # foo
+04: #
+05: ################################################################################
+06:
+07: FOO_VERSION = 1.2.3
+08: FOO_SOURCE = foo-$(FOO_VERSION).tar.xz
+09: FOO_SITE = http://www.foosoftware.org/download
+10: FOO_LICENSE = GPL-2.0
+11: FOO_LICENSE_FILES = COPYING
+12:
+13: FOO_MODULE_SUBDIRS = driver/base
+14: FOO_MODULE_MAKE_OPTS = KVERSION=$(LINUX_VERSION_PROBED)
+15:
+16: ifeq ($(BR2_PACKAGE_LIBBAR),y)
+17: FOO_DEPENDENCIES = libbar
+18: FOO_CONF_OPTS = --enable-bar
+19: FOO_MODULE_SUBDIRS += driver/bar
+20: else
+21: FOO_CONF_OPTS = --disable-bar
+22: endif
+23:
+24: $(eval $(kernel-module))
+26: $(eval $(autotools-package))

Here, we see that we have an autotools-based package, that also builds +the kernel module located in sub-directory driver/base and, if libbar +is enabled, the kernel module located in sub-directory driver/bar, and +defines the variable KVERSION to be passed to the Linux buildsystem +when building the module(s).

18.19.2. kernel-module reference

The main macro for the kernel module infrastructure is kernel-module. +Unlike other package infrastructures, it is not stand-alone, and requires +any of the other *-package macros be called after it.

The kernel-module macro defines post-build and post-target-install +hooks to build the kernel modules. If the package’s .mk needs access +to the built kernel modules, it should do so in a post-build hook, +registered after the call to kernel-module. Similarly, if the +package’s .mk needs access to the kernel module after it has been +installed, it should do so in a post-install hook, registered after +the call to kernel-module. Here’s an example:

$(eval $(kernel-module))
+
+define FOO_DO_STUFF_WITH_KERNEL_MODULE
+    # Do something with it...
+endef
+FOO_POST_BUILD_HOOKS += FOO_DO_STUFF_WITH_KERNEL_MODULE
+
+$(eval $(generic-package))

Finally, unlike the other package infrastructures, there is no +host-kernel-module variant to build a host kernel module.

The following additional variables can optionally be defined to further +configure the build of the kernel module:

  • +FOO_MODULE_SUBDIRS may be set to one or more sub-directories (relative + to the package source top-directory) where the kernel module sources are. + If empty or not set, the sources for the kernel module(s) are considered + to be located at the top of the package source tree. +
  • +FOO_MODULE_MAKE_OPTS may be set to contain extra variable definitions + to pass to the Linux buildsystem. +

You may also reference (but you may not set!) those variables:

  • +LINUX_DIR contains the path to where the Linux kernel has been + extracted and built. +
  • +LINUX_VERSION contains the version string as configured by the user. +
  • +LINUX_VERSION_PROBED contains the real version string of the kernel, + retrieved with running make -C $(LINUX_DIR) kernelrelease +
  • +KERNEL_ARCH contains the name of the current architecture, like arm, + mips… +

18.20. Infrastructure for asciidoc documents

The Buildroot manual, which you are currently reading, is entirely written +using the AsciiDoc mark-up syntax. The manual is then +rendered to many formats:

  • +html +
  • +split-html +
  • +pdf +
  • +epub +
  • +text +

Although Buildroot only contains one document written in AsciiDoc, there +is, as for packages, an infrastructure for rendering documents using the +AsciiDoc syntax.

Also as for packages, the AsciiDoc infrastructure is available from a +br2-external tree. This allows documentation for +a br2-external tree to match the Buildroot documentation, as it will be +rendered to the same formats and use the same layout and theme.

18.20.1. asciidoc-document tutorial

Whereas package infrastructures are suffixed with -package, the document +infrastructures are suffixed with -document. So, the AsciiDoc infrastructure +is named asciidoc-document.

Here is an example to render a simple AsciiDoc document.

01: ################################################################################
+02: #
+03: # foo-document
+04: #
+05: ################################################################################
+06:
+07: FOO_SOURCES = $(sort $(wildcard $(pkgdir)/*))
+08: $(eval $(call asciidoc-document))

On line 7, the Makefile declares what the sources of the document are. +Currently, it is expected that the document’s sources are only local; +Buildroot will not attempt to download anything to render a document. +Thus, you must indicate where the sources are. Usually, the string +above is sufficient for a document with no sub-directory structure.

On line 8, we call the asciidoc-document function, which generates all +the Makefile code necessary to render the document.

18.20.2. asciidoc-document reference

The list of variables that can be set in a .mk file to give metadata +information is (assuming the document name is foo) :

  • +FOO_SOURCES, mandatory, defines the source files for the document. +
  • +FOO_RESOURCES, optional, may contain a space-separated list of paths + to one or more directories containing so-called resources (like CSS or + images). By default, empty. +
  • +FOO_DEPENDENCIES, optional, the list of packages (most probably, + host-packages) that must be built before building this document. +

There are also additional hooks (see Section 18.22, “Hooks available in the various build steps” for general information +on hooks), that a document may set to define extra actions to be done at +various steps:

  • +FOO_POST_RSYNC_HOOKS to run additional commands after the sources + have been copied by Buildroot. This can for example be used to + generate part of the manual with information extracted from the + tree. As an example, Buildroot uses this hook to generate the tables + in the appendices. +
  • +FOO_CHECK_DEPENDENCIES_HOOKS to run additional tests on required + components to generate the document. In AsciiDoc, it is possible to + call filters, that is, programs that will parse an AsciiDoc block and + render it appropriately (e.g. ditaa or + aafigure). +
  • +FOO_CHECK_DEPENDENCIES_<FMT>_HOOKS, to run additional tests for + the specified format <FMT> (see the list of rendered formats, above). +

Here is a complete example that uses all variables and all hooks:

01: ################################################################################
+02: #
+03: # foo-document
+04: #
+05: ################################################################################
+06:
+07: FOO_SOURCES = $(sort $(wildcard $(pkgdir)/*))
+08: FOO_RESOURCES = $(sort $(wildcard $(pkgdir)/ressources))
+09:
+10: define FOO_GEN_EXTRA_DOC
+11:     /path/to/generate-script --outdir=$(@D)
+12: endef
+13: FOO_POST_RSYNC_HOOKS += FOO_GEN_EXTRA_DOC
+14:
+15: define FOO_CHECK_MY_PROG
+16:     if ! which my-prog >/dev/null 2>&1; then \
+17:         echo "You need my-prog to generate the foo document"; \
+18:         exit 1; \
+19:     fi
+20: endef
+21: FOO_CHECK_DEPENDENCIES_HOOKS += FOO_CHECK_MY_PROG
+22:
+23: define FOO_CHECK_MY_OTHER_PROG
+24:     if ! which my-other-prog >/dev/null 2>&1; then \
+25:         echo "You need my-other-prog to generate the foo document as PDF"; \
+26:         exit 1; \
+27:     fi
+28: endef
+29: FOO_CHECK_DEPENDENCIES_PDF_HOOKS += FOO_CHECK_MY_OTHER_PROG
+30:
+31: $(eval $(call asciidoc-document))

18.21. Infrastructure specific to the Linux kernel package

The Linux kernel package can use some specific infrastructures based on package +hooks for building Linux kernel tools or/and building Linux kernel extensions.

18.21.1. linux-kernel-tools

Buildroot offers a helper infrastructure to build some userspace tools +for the target available within the Linux kernel sources. Since their +source code is part of the kernel source code, a special package, +linux-tools, exists and re-uses the sources of the Linux kernel that +runs on the target.

Let’s look at an example of a Linux tool. For a new Linux tool named +foo, create a new menu entry in the existing +package/linux-tools/Config.in. This file will contain the option +descriptions related to each kernel tool that will be used and +displayed in the configuration tool. It would basically look like:

01: config BR2_PACKAGE_LINUX_TOOLS_FOO
+02:     bool "foo"
+03:     select BR2_PACKAGE_LINUX_TOOLS
+04:     help
+05:       This is a comment that explains what foo kernel tool is.
+06:
+07:       http://foosoftware.org/foo/

The name of the option starts with the prefix BR2_PACKAGE_LINUX_TOOLS_, +followed by the uppercase name of the tool (like is done for packages).

Note. Unlike other packages, the linux-tools package options appear in the +linux kernel menu, under the Linux Kernel Tools sub-menu, not under +the Target packages main menu.

Then for each linux tool, add a new .mk.in file named +package/linux-tools/linux-tool-foo.mk.in. It would basically look like:

01: ################################################################################
+02: #
+03: # foo
+04: #
+05: ################################################################################
+06:
+07: LINUX_TOOLS += foo
+08:
+09: FOO_DEPENDENCIES = libbbb
+10:
+11: define FOO_BUILD_CMDS
+12:     $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools foo
+13: endef
+14:
+15: define FOO_INSTALL_STAGING_CMDS
+16:     $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools \
+17:             DESTDIR=$(STAGING_DIR) \
+18:             foo_install
+19: endef
+20:
+21: define FOO_INSTALL_TARGET_CMDS
+22:     $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools \
+23:             DESTDIR=$(TARGET_DIR) \
+24:             foo_install
+25: endef

On line 7, we register the Linux tool foo to the list of available +Linux tools.

On line 9, we specify the list of dependencies this tool relies on. These +dependencies are added to the Linux package dependencies list only when the +foo tool is selected.

The rest of the Makefile, lines 11-25 defines what should be done at the +different steps of the Linux tool build process like for a +generic package. They will actually be +used only when the foo tool is selected. The only supported commands are +_BUILD_CMDS, _INSTALL_STAGING_CMDS and _INSTALL_TARGET_CMDS.

Note. One must not call $(eval $(generic-package)) or any other +package infrastructure! Linux tools are not packages by themselves, +they are part of the linux-tools package.

18.21.2. linux-kernel-extensions

Some packages provide new features that require the Linux kernel tree +to be modified. This can be in the form of patches to be applied on +the kernel tree, or in the form of new files to be added to the +tree. The Buildroot’s Linux kernel extensions infrastructure provides +a simple solution to automatically do this, just after the kernel +sources are extracted and before the kernel patches are +applied. Examples of extensions packaged using this mechanism are the +real-time extensions Xenomai and RTAI, as well as the set of +out-of-tree LCD screens drivers fbtft.

Let’s look at an example on how to add a new Linux extension foo.

First, create the package foo that provides the extension: this +package is a standard package; see the previous chapters on how to +create such a package. This package is in charge of downloading the +sources archive, checking the hash, defining the licence informations +and building user space tools if any.

Then create the Linux extension proper: create a new menu entry in +the existing linux/Config.ext.in. This file contains the option +descriptions related to each kernel extension that will be used and +displayed in the configuration tool. It would basically look like:

01: config BR2_LINUX_KERNEL_EXT_FOO
+02:     bool "foo"
+03:     help
+04:       This is a comment that explains what foo kernel extension is.
+05:
+06:       http://foosoftware.org/foo/

Then for each linux extension, add a new .mk file named +linux/linux-ext-foo.mk. It should basically contain:

01: ################################################################################
+02: #
+03: # foo
+04: #
+05: ################################################################################
+06:
+07: LINUX_EXTENSIONS += foo
+08:
+09: define FOO_PREPARE_KERNEL
+10:     $(FOO_DIR)/prepare-kernel-tree.sh --linux-dir=$(@D)
+11: endef

On line 7, we add the Linux extension foo to the list of available +Linux extensions.

On line 9-11, we define what should be done by the extension to modify +the Linux kernel tree; this is specific to the linux extension and can +use the variables defined by the foo package, like: $(FOO_DIR) or +$(FOO_VERSION)… as well as all the Linux variables, like: +$(LINUX_VERSION) or $(LINUX_VERSION_PROBED), $(KERNEL_ARCH)… +See the definition of those kernel variables.

18.22. Hooks available in the various build steps

The generic infrastructure (and as a result also the derived autotools +and cmake infrastructures) allow packages to specify hooks. +These define further actions to perform after existing steps. +Most hooks aren’t really useful for generic packages, since the .mk +file already has full control over the actions performed in each step +of the package construction.

The following hook points are available:

  • +LIBFOO_PRE_DOWNLOAD_HOOKS +
  • +LIBFOO_POST_DOWNLOAD_HOOKS +
  • +LIBFOO_PRE_EXTRACT_HOOKS +
  • +LIBFOO_POST_EXTRACT_HOOKS +
  • +LIBFOO_PRE_RSYNC_HOOKS +
  • +LIBFOO_POST_RSYNC_HOOKS +
  • +LIBFOO_PRE_PATCH_HOOKS +
  • +LIBFOO_POST_PATCH_HOOKS +
  • +LIBFOO_PRE_CONFIGURE_HOOKS +
  • +LIBFOO_POST_CONFIGURE_HOOKS +
  • +LIBFOO_PRE_BUILD_HOOKS +
  • +LIBFOO_POST_BUILD_HOOKS +
  • +LIBFOO_PRE_INSTALL_HOOKS (for host packages only) +
  • +LIBFOO_POST_INSTALL_HOOKS (for host packages only) +
  • +LIBFOO_PRE_INSTALL_STAGING_HOOKS (for target packages only) +
  • +LIBFOO_POST_INSTALL_STAGING_HOOKS (for target packages only) +
  • +LIBFOO_PRE_INSTALL_TARGET_HOOKS (for target packages only) +
  • +LIBFOO_POST_INSTALL_TARGET_HOOKS (for target packages only) +
  • +LIBFOO_PRE_INSTALL_IMAGES_HOOKS +
  • +LIBFOO_POST_INSTALL_IMAGES_HOOKS +
  • +LIBFOO_PRE_LEGAL_INFO_HOOKS +
  • +LIBFOO_POST_LEGAL_INFO_HOOKS +

These variables are lists of variable names containing actions to be +performed at this hook point. This allows several hooks to be +registered at a given hook point. Here is an example:

define LIBFOO_POST_PATCH_FIXUP
+        action1
+        action2
+endef
+
+LIBFOO_POST_PATCH_HOOKS += LIBFOO_POST_PATCH_FIXUP

18.22.1. Using the POST_RSYNC hook

The POST_RSYNC hook is run only for packages that use a local source, +either through the local site method or the OVERRIDE_SRCDIR +mechanism. In this case, package sources are copied using rsync from +the local location into the buildroot build directory. The rsync +command does not copy all files from the source directory, though. +Files belonging to a version control system, like the directories +.git, .hg, etc. are not copied. For most packages this is +sufficient, but a given package can perform additional actions using +the POST_RSYNC hook.

In principle, the hook can contain any command you want. One specific +use case, though, is the intentional copying of the version control +directory using rsync. The rsync command you use in the hook can, among +others, use the following variables:

  • +$(SRCDIR): the path to the overridden source directory +
  • +$(@D): the path to the build directory +

18.22.2. Target-finalize hook

Packages may also register hooks in LIBFOO_TARGET_FINALIZE_HOOKS. +These hooks are run after all packages are built, but before the +filesystem images are generated. They are seldom used, and your +package probably do not need them.

18.23. Gettext integration and interaction with packages

Many packages that support internationalization use the gettext +library. Dependencies for this library are fairly complicated and +therefore, deserve some explanation.

The glibc C library integrates a full-blown implementation of +gettext, supporting translation. Native Language Support is +therefore built-in in glibc.

On the other hand, the uClibc and musl C libraries only provide a +stub implementation of the gettext functionality, which allows to +compile libraries and programs using gettext functions, but without +providing the translation capabilities of a full-blown gettext +implementation. With such C libraries, if real Native Language Support +is necessary, it can be provided by the libintl library of the +gettext package.

Due to this, and in order to make sure that Native Language Support is +properly handled, packages in Buildroot that can use NLS support +should:

  1. +Ensure NLS support is enabled when BR2_SYSTEM_ENABLE_NLS=y. This + is done automatically for autotools packages and therefore should + only be done for packages using other package infrastructures. +
  2. +Add $(TARGET_NLS_DEPENDENCIES) to the package + <pkg>_DEPENDENCIES variable. This addition should be done + unconditionally: the value of this variable is automatically + adjusted by the core infrastructure to contain the relevant list of + packages. If NLS support is disabled, this variable is empty. If + NLS support is enabled, this variable contains host-gettext so + that tools needed to compile translation files are available on the + host. In addition, if uClibc or musl are used, this variable + also contains gettext in order to get the full-blown gettext + implementation. +
  3. +If needed, add $(TARGET_NLS_LIBS) to the linker flags, so that + the package gets linked with libintl. This is generally not + needed with autotools packages as they usually detect + automatically that they should link with libintl. However, + packages using other build systems, or problematic autotools-based + packages may need this. $(TARGET_NLS_LIBS) should be added + unconditionally to the linker flags, as the core automatically + makes it empty or defined to -lintl depending on the + configuration. +

No changes should be made to the Config.in file to support NLS.

Finally, certain packages need some gettext utilities on the target, +such as the gettext program itself, which allows to retrieve +translated strings, from the command line. In such a case, the package +should:

  • +use select BR2_PACKAGE_GETTEXT in their Config.in file, + indicating in a comment above that it’s a runtime dependency only. +
  • +not add any gettext dependency in the DEPENDENCIES variable of + their .mk file. +

18.24. Tips and tricks

18.24.1. Package name, config entry name and makefile variable relationship

In Buildroot, there is some relationship between:

  • +the package name, which is the package directory name (and the + name of the *.mk file); +
  • +the config entry name that is declared in the Config.in file; +
  • +the makefile variable prefix. +

It is mandatory to maintain consistency between these elements, +using the following rules:

  • +the package directory and the *.mk name are the package name + itself (e.g.: package/foo-bar_boo/foo-bar_boo.mk); +
  • +the make target name is the package name itself (e.g.: + foo-bar_boo); +
  • +the config entry is the upper case package name with . and - + characters substituted with _, prefixed with BR2_PACKAGE_ (e.g.: + BR2_PACKAGE_FOO_BAR_BOO); +
  • +the *.mk file variable prefix is the upper case package name + with . and - characters substituted with _ (e.g.: + FOO_BAR_BOO_VERSION). +

18.24.2. How to check the coding style

Buildroot provides a script in utils/check-package that checks new or +changed files for coding style. It is not a complete language validator, +but it catches many common mistakes. It is meant to run in the actual +files you created or modified, before creating the patch for submission.

This script can be used for packages, filesystem makefiles, Config.in +files, etc. It does not check the files defining the package +infrastructures and some other files containing similar common code.

To use it, run the check-package script, by telling which files you +created or changed:

$ ./utils/check-package package/new-package/*

If you have the utils directory in your path you can also run:

$ cd package/new-package/
+$ check-package *

The tool can also be used for packages in a br2-external:

$ check-package -b /path/to/br2-ext-tree/package/my-package/*

18.24.3. How to test your package

Once you have added your new package, it is important that you test it +under various conditions: does it build for all architectures? Does it +build with the different C libraries? Does it need threads, NPTL? And +so on…

Buildroot runs autobuilders which +continuously test random configurations. However, these only build the +master branch of the git tree, and your new fancy package is not yet +there.

Buildroot provides a script in utils/test-pkg that uses the same base +configurations as used by the autobuilders so you can test your package +in the same conditions.

First, create a config snippet that contains all the necessary options +needed to enable your package, but without any architecture or toolchain +option. For example, let’s create a config snippet that just enables +libcurl, without any TLS backend:

$ cat libcurl.config
+BR2_PACKAGE_LIBCURL=y

If your package needs more configuration options, you can add them to the +config snippet. For example, here’s how you would test libcurl with +openssl as a TLS backend and the curl program:

$ cat libcurl.config
+BR2_PACKAGE_LIBCURL=y
+BR2_PACKAGE_LIBCURL_CURL=y
+BR2_PACKAGE_OPENSSL=y

Then run the test-pkg script, by telling it what config snippet to use +and what package to test:

$ ./utils/test-pkg -c libcurl.config -p libcurl

By default, test-pkg will build your package against a subset of the +toolchains used by the autobuilders, which has been selected by the +Buildroot developers as being the most useful and representative +subset. If you want to test all toolchains, pass the -a option. Note +that in any case, internal toolchains are excluded as they take too +long to build.

The output lists all toolchains that are tested and the corresponding +result (excerpt, results are fake):

$ ./utils/test-pkg -c libcurl.config -p libcurl
+                armv5-ctng-linux-gnueabi [ 1/11]: OK
+              armv7-ctng-linux-gnueabihf [ 2/11]: OK
+                        br-aarch64-glibc [ 3/11]: SKIPPED
+                           br-arcle-hs38 [ 4/11]: SKIPPED
+                            br-arm-basic [ 5/11]: FAILED
+                  br-arm-cortex-a9-glibc [ 6/11]: OK
+                   br-arm-cortex-a9-musl [ 7/11]: FAILED
+                   br-arm-cortex-m4-full [ 8/11]: OK
+                             br-arm-full [ 9/11]: OK
+                    br-arm-full-nothread [10/11]: FAILED
+                      br-arm-full-static [11/11]: OK
+11 builds, 2 skipped, 2 build failed, 1 legal-info failed

The results mean:

  • +OK: the build was successful. +
  • +SKIPPED: one or more configuration options listed in the config + snippet were not present in the final configuration. This is due to + options having dependencies not satisfied by the toolchain, such as + for example a package that depends on BR2_USE_MMU with a noMMU + toolchain. The missing options are reported in missing.config in + the output build directory (~/br-test-pkg/TOOLCHAIN_NAME/ by + default). +
  • +FAILED: the build failed. Inspect the logfile file in the output + build directory to see what went wrong: +

    • +the actual build failed, +
    • +the legal-info failed, +
    • +one of the preliminary steps (downloading the config file, applying + the configuration, running dirclean for the package) failed. +

When there are failures, you can just re-run the script with the same +options (after you fixed your package); the script will attempt to +re-build the package specified with -p for all toolchains, without +the need to re-build all the dependencies of that package.

The test-pkg script accepts a few options, for which you can get some +help by running:

$ ./utils/test-pkg -h

18.24.4. How to add a package from GitHub

Packages on GitHub often don’t have a download area with release tarballs. +However, it is possible to download tarballs directly from the repository +on GitHub. As GitHub is known to have changed download mechanisms in the +past, the github helper function should be used as shown below.

# Use a tag or a full commit ID
+FOO_VERSION = 1.0
+FOO_SITE = $(call github,<user>,<package>,v$(FOO_VERSION))

Notes

  • +The FOO_VERSION can either be a tag or a commit ID. +
  • +The tarball name generated by github matches the default one from + Buildroot (e.g.: foo-f6fb6654af62045239caed5950bc6c7971965e60.tar.gz), + so it is not necessary to specify it in the .mk file. +
  • +When using a commit ID as version, you should use the full 40 hex characters. +
  • +When the tag contains a prefix such as v in v1.0, then the + VERSION variable should contain just 1.0, and the v should be + added directly in the SITE variable, as illustrated above. This + ensures that the VERSION variable value can be used to match + against release-monitoring.org + results. +

If the package you wish to add does have a release section on GitHub, the +maintainer may have uploaded a release tarball, or the release may just point +to the automatically generated tarball from the git tag. If there is a +release tarball uploaded by the maintainer, we prefer to use that since it +may be slightly different (e.g. it contains a configure script so we don’t +need to do AUTORECONF).

You can see on the release page if it’s an uploaded tarball or a git tag:

github_hash_mongrel2.png
  • +If it looks like the image above then it was uploaded by the + maintainer and you should use that link (in that example: + mongrel2-v1.9.2.tar.bz2) to specify FOO_SITE, and not use the + github helper. +
  • +On the other hand, if there’s is only the "Source code" link, then + it’s an automatically generated tarball and you should use the + github helper function. +

18.24.5. How to add a package from Gitlab

In a similar way to the github macro described in +Section 18.24.4, “How to add a package from GitHub”, Buildroot also provides the gitlab macro +to download from Gitlab repositories. It can be used to download +auto-generated tarballs produced by Gitlab, either for specific tags +or commits:

# Use a tag or a full commit ID
+FOO_VERSION = 1.0
+FOO_SITE = $(call gitlab,<user>,<package>,v$(FOO_VERSION))

By default, it will use a .tar.gz tarball, but Gitlab also provides +.tar.bz2 tarballs, so by adding a <pkg>_SOURCE variable, this +.tar.bz2 tarball can be used:

# Use a tag or a full commit ID
+FOO_VERSION = 1.0
+FOO_SITE = $(call gitlab,<user>,<package>,v$(FOO_VERSION))
+FOO_SOURCE = foo-$(FOO_VERSION).tar.bz2

If there is a specific tarball uploaded by the upstream developers in +https://gitlab.com/<project>/releases/, do not use this macro, but +rather use directly the link to the tarball.

18.25. Conclusion

As you can see, adding a software package to Buildroot is simply a +matter of writing a Makefile using an existing example and modifying it +according to the compilation process required by the package.

If you package software that might be useful for other people, don’t +forget to send a patch to the Buildroot mailing list (see +Section 22.5, “Submitting patches”)!

Chapter 19. Patching a package

While integrating a new package or updating an existing one, it may be +necessary to patch the source of the software to get it cross-built within +Buildroot.

Buildroot offers an infrastructure to automatically handle this during +the builds. It supports three ways of applying patch sets: downloaded patches, +patches supplied within buildroot and patches located in a user-defined +global patch directory.

19.1. Providing patches

19.1.1. Downloaded

If it is necessary to apply a patch that is available for download, then add it +to the <packagename>_PATCH variable. If an entry contains ://, +then Buildroot will assume it is a full URL and download the patch +from this location. Otherwise, Buildroot will assume that the patch should be +downloaded from <packagename>_SITE. It can be a single patch, +or a tarball containing a patch series.

Like for all downloads, a hash should be added to the <packagename>.hash +file.

This method is typically used for packages from Debian.

19.1.2. Within Buildroot

Most patches are provided within Buildroot, in the package +directory; these typically aim to fix cross-compilation, libc support, +or other such issues.

These patch files should be named <number>-<description>.patch.

Notes

  • +The patch files coming with Buildroot should not contain any package version + reference in their filename. +
  • +The field <number> in the patch file name refers to the apply order, + and shall start at 1; It is preferred to pad the number with zeros up to 4 + digits, like git-format-patch does. E.g.: 0001-foobar-the-buz.patch +
  • +Previously, it was mandatory for patches to be prefixed with the name of + the package, like <package>-<number>-<description>.patch, but that is + no longer the case. Existing packages will be fixed as time passes. Do + not prefix patches with the package name. +
  • +Previously, a series file, as used by quilt, could also be added in + the package directory. In that case, the series file defines the patch + application order. This is deprecated, and will be removed in the future. + Do not use a series file. +

19.1.3. Global patch directory

The BR2_GLOBAL_PATCH_DIR configuration file option can be +used to specify a space separated list of one or more directories +containing global package patches. See Section 9.8, “Adding project-specific patches” for +details.

19.2. How patches are applied

  1. +Run the <packagename>_PRE_PATCH_HOOKS commands if defined; +
  2. +Cleanup the build directory, removing any existing *.rej files; +
  3. +If <packagename>_PATCH is defined, then patches from these + tarballs are applied; +
  4. +If there are some *.patch files in the package’s Buildroot + directory or in a package subdirectory named <packageversion>, + then: +

    • +If a series file exists in the package directory, then patches are + applied according to the series file; +
    • +Otherwise, patch files matching *.patch are applied in alphabetical + order. + So, to ensure they are applied in the right order, it is highly + recommended to name the patch files like this: + <number>-<description>.patch, where <number> refers to the + apply order. +
  5. +If BR2_GLOBAL_PATCH_DIR is defined, the directories will be + enumerated in the order they are specified. The patches are applied + as described in the previous step. +
  6. +Run the <packagename>_POST_PATCH_HOOKS commands if defined. +

If something goes wrong in the steps 3 or 4, then the build fails.

19.3. Format and licensing of the package patches

Patches are released under the same license as the software they apply +to (see Section 13.2, “Complying with the Buildroot license”).

A message explaining what the patch does, and why it is needed, should +be added in the header commentary of the patch.

You should add a Signed-off-by statement in the header of the each +patch to help with keeping track of the changes and to certify that the +patch is released under the same license as the software that is modified.

If the software is under version control, it is recommended to use the +upstream SCM software to generate the patch set.

Otherwise, concatenate the header with the output of the +diff -purN package-version.orig/ package-version/ command.

If you update an existing patch (e.g. when bumping the package version), +make sure the existing From header and Signed-off-by tags are not +removed, but do update the rest of the patch comment when appropriate.

At the end, the patch should look like:

configure.ac: add C++ support test
+
+Signed-off-by: John Doe <john.doe@noname.org>
+
+--- configure.ac.orig
++++ configure.ac
+@@ -40,2 +40,12 @@
+
+AC_PROG_MAKE_SET
++
++AC_CACHE_CHECK([whether the C++ compiler works],
++               [rw_cv_prog_cxx_works],
++               [AC_LANG_PUSH([C++])
++                AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
++                               [rw_cv_prog_cxx_works=yes],
++                               [rw_cv_prog_cxx_works=no])
++                AC_LANG_POP([C++])])
++
++AM_CONDITIONAL([CXX_WORKS], [test "x$rw_cv_prog_cxx_works" = "xyes"])

19.4. Integrating patches found on the Web

When integrating a patch of which you are not the author, you have to +add a few things in the header of the patch itself.

Depending on whether the patch has been obtained from the project +repository itself, or from somewhere on the web, add one of the +following tags:

Backported from: <some commit id>

or

Fetch from: <some url>

It is also sensible to add a few words about any changes to the patch +that may have been necessary.

Chapter 20. Download infrastructure

TODO

Chapter 21. Debugging Buildroot

It is possible to instrument the steps Buildroot does when building +packages. Define the variable BR2_INSTRUMENTATION_SCRIPTS to contain +the path of one or more scripts (or other executables), in a +space-separated list, you want called before and after each step. The +scripts are called in sequence, with three parameters:

  • +start or end to denote the start (resp. the end) of a step; +
  • +the name of the step about to be started, or which just ended; +
  • +the name of the package. +

For example :

make BR2_INSTRUMENTATION_SCRIPTS="/path/to/my/script1 /path/to/my/script2"

The list of steps is:

  • +extract +
  • +patch +
  • +configure +
  • +build +
  • +install-host, when a host-package is installed in $(HOST_DIR) +
  • +install-target, when a target-package is installed in $(TARGET_DIR) +
  • +install-staging, when a target-package is installed in $(STAGING_DIR) +
  • +install-image, when a target-package installs files in $(BINARIES_DIR) +

The script has access to the following variables:

  • +BR2_CONFIG: the path to the Buildroot .config file +
  • +HOST_DIR, STAGING_DIR, TARGET_DIR: see + Section 18.5.2, “generic-package reference” +
  • +BUILD_DIR: the directory where packages are extracted and built +
  • +BINARIES_DIR: the place where all binary files (aka images) are + stored +
  • +BASE_DIR: the base output directory +

Chapter 22. Contributing to Buildroot

There are many ways in which you can contribute to Buildroot: analyzing +and fixing bugs, analyzing and fixing package build failures detected by +the autobuilders, testing and reviewing patches sent by other +developers, working on the items in our TODO list and sending your own +improvements to Buildroot or its manual. The following sections give a +little more detail on each of these items.

If you are interested in contributing to Buildroot, the first thing you +should do is to subscribe to the Buildroot mailing list. This list is +the main way of interacting with other Buildroot developers and to send +contributions to. If you aren’t subscribed yet, then refer to +Chapter 5, Community resources for the subscription link.

If you are going to touch the code, it is highly recommended to use a +git repository of Buildroot, rather than starting from an extracted +source code tarball. Git is the easiest way to develop from and directly +send your patches to the mailing list. Refer to Chapter 3, Getting Buildroot +for more information on obtaining a Buildroot git tree.

22.1. Reproducing, analyzing and fixing bugs

A first way of contributing is to have a look at the open bug reports in +the Buildroot bug +tracker. As we strive to keep the bug count as small as possible, all +help in reproducing, analyzing and fixing reported bugs is more than +welcome. Don’t hesitate to add a comment to bug reports reporting your +findings, even if you don’t yet see the full picture.

22.2. Analyzing and fixing autobuild failures

The Buildroot autobuilders are a set of build machines that continuously +run Buildroot builds based on random configurations. This is done for +all architectures supported by Buildroot, with various toolchains, and +with a random selection of packages. With the large commit activity on +Buildroot, these autobuilders are a great help in detecting problems +very early after commit.

All build results are available at http://autobuild.buildroot.org, +statistics are at http://autobuild.buildroot.org/stats.php. Every day, +an overview of all failed packages is sent to the mailing list.

Detecting problems is great, but obviously these problems have to be +fixed as well. Your contribution is very welcome here! There are +basically two things that can be done:

  • +Analyzing the problems. The daily summary mails do not contain details + about the actual failures: in order to see what’s going on you have to + open the build log and check the last output. Having someone doing + this for all packages in the mail is very useful for other developers, + as they can make a quick initial analysis based on this output alone. +
  • +Fixing a problem. When fixing autobuild failures, you should follow + these steps: +

    1. +Check if you can reproduce the problem by building with the same + configuration. You can do this manually, or use the + br-reproduce-build + script that will automatically clone a Buildroot git repository, + checkout the correct revision, download and set the right + configuration, and start the build. +
    2. +Analyze the problem and create a fix. +
    3. +Verify that the problem is really fixed by starting from a clean + Buildroot tree and only applying your fix. +
    4. +Send the fix to the Buildroot mailing list (see + Section 22.5, “Submitting patches”). In case you created a patch against the + package sources, you should also send the patch upstream so that the + problem will be fixed in a later release, and the patch in Buildroot + can be removed. + In the commit message of a patch fixing an autobuild failure, add a + reference to the build result directory, as follows: +
Fixes: http://autobuild.buildroot.org/results/51000a9d4656afe9e0ea6f07b9f8ed374c2e4069

22.3. Reviewing and testing patches

With the amount of patches sent to the mailing list each day, the +maintainer has a very hard job to judge which patches are ready to apply +and which ones aren’t. Contributors can greatly help here by reviewing +and testing these patches.

In the review process, do not hesitate to respond to patch submissions +for remarks, suggestions or anything that will help everyone to +understand the patches and make them better. Please use internet +style replies in plain text emails when responding to patch +submissions.

To indicate approval of a patch, there are three formal tags that keep +track of this approval. To add your tag to a patch, reply to it with the +approval tag below the original author’s Signed-off-by line. These tags +will be picked up automatically by patchwork (see +Section 22.3.1, “Applying Patches from Patchwork”) and will be part of the commit log when +the patch is accepted.

+Tested-by +
+Indicates that the patch has been tested successfully. + You are encouraged to specify what kind of testing you performed + (compile-test on architecture X and Y, runtime test on target A, + …). This additional information helps other testers and the + maintainer. +
+Reviewed-by +
+Indicates that you code-reviewed the patch and did your + best in spotting problems, but you are not sufficiently familiar with + the area touched to provide an Acked-by tag. This means that there + may be remaining problems in the patch that would be spotted by + someone with more experience in that area. Should such problems be + detected, your Reviewed-by tag remains appropriate and you cannot + be blamed. +
+Acked-by +
+Indicates that you code-reviewed the patch and you are + familiar enough with the area touched to feel that the patch can be + committed as-is (no additional changes required). In case it later + turns out that something is wrong with the patch, your Acked-by could + be considered inappropriate. The difference between Acked-by and + Reviewed-by is thus mainly that you are prepared to take the blame on + Acked patches, but not on Reviewed ones. +

If you reviewed a patch and have comments on it, you should simply reply +to the patch stating these comments, without providing a Reviewed-by or +Acked-by tag. These tags should only be provided if you judge the patch +to be good as it is.

It is important to note that neither Reviewed-by nor Acked-by imply +that testing has been performed. To indicate that you both reviewed and +tested the patch, provide two separate tags (Reviewed/Acked-by and +Tested-by).

Note also that any developer can provide Tested/Reviewed/Acked-by +tags, without exception, and we encourage everyone to do this. Buildroot +does not have a defined group of core developers, it just so happens +that some developers are more active than others. The maintainer will +value tags according to the track record of their submitter. Tags +provided by a regular contributor will naturally be trusted more than +tags provided by a newcomer. As you provide tags more regularly, your +trustworthiness (in the eyes of the maintainer) will go up, but any +tag provided is valuable.

Buildroot’s Patchwork website can be used to pull in patches for testing +purposes. Please see Section 22.3.1, “Applying Patches from Patchwork” for more +information on using Buildroot’s Patchwork website to apply patches.

22.3.1. Applying Patches from Patchwork

The main use of Buildroot’s Patchwork website for a developer is for +pulling in patches into their local git repository for testing +purposes.

When browsing patches in the patchwork management interface, an mbox +link is provided at the top of the page. Copy this link address and +run the following commands:

$ git checkout -b <test-branch-name>
+$ wget -O - <mbox-url> | git am

Another option for applying patches is to create a bundle. A bundle is +a set of patches that you can group together using the patchwork +interface. Once the bundle is created and the bundle is made public, +you can copy the mbox link for the bundle and apply the bundle +using the above commands.

22.4. Work on items from the TODO list

If you want to contribute to Buildroot but don’t know where to start, +and you don’t like any of the above topics, you can always work on items +from the Buildroot TODO list. +Don’t hesitate to discuss an item first on the mailing list or on IRC. +Do edit the wiki to indicate when you start working on an item, so we +avoid duplicate efforts.

22.5. Submitting patches

Note

Please, do not attach patches to bugs, send them to the mailing list +instead.

If you made some changes to Buildroot and you would like to contribute +them to the Buildroot project, proceed as follows.

22.5.1. The formatting of a patch

We expect patches to be formatted in a specific way. This is necessary +to make it easy to review patches, to be able to apply them easily to +the git repository, to make it easy to find back in the history how +and why things have changed, and to make it possible to use git +bisect to locate the origin of a problem.

First of all, it is essential that the patch has a good commit +message. The commit message should start with a separate line with a +brief summary of the change, prefixed by the area touched by the +patch. A few examples of good commit titles:

  • +package/linuxptp: bump version to 2.0 +
  • +configs/imx23evk: bump Linux version to 4.19 +
  • +package/pkg-generic: postpone evaluation of dependency conditions +
  • +boot/uboot: needs host-{flex,bison} +
  • +support/testing: add python-ubjson tests +

The description that follows the prefix should start with a lower case +letter (i.e "bump", "needs", "postpone", "add" in the above examples).

Second, the body of the commit message should describe why this +change is needed, and if necessary also give details about how it +was done. When writing the commit message, think of how the reviewers +will read it, but also think about how you will read it when you look +at this change again a few years down the line.

Third, the patch itself should do only one change, but do it +completely. Two unrelated or weakly related changes should usually be +done in two separate patches. This usually means that a patch affects +only a single package. If several changes are related, it is often +still possible to split them up in small patches and apply them in a +specific order. Small patches make it easier to review, and often +make it easier to understand afterwards why a change was done. +However, each patch must be complete. It is not allowed that the +build is broken when only the first but not the second patch is +applied. This is necessary to be able to use git bisect afterwards.

Of course, while you’re doing your development, you’re probably going +back and forth between packages, and certainly not committing things +immediately in a way that is clean enough for submission. So most +developers rewrite the history of commits to produce a clean set of +commits that is appropriate for submission. To do this, you need to +use interactive rebasing. You can learn about it +in the Pro +Git book. Sometimes, it is even easier to discard you history with +git reset --soft origin/master and select individual changes with +git add -i or git add -p.

Finally, the patch should be signed off. This is done by adding +Signed-off-by: Your Real Name <your@email.address> at the end of the +commit message. git commit -s does that for you, if configured +properly. The Signed-off-by tag means that you publish the patch +under the Buildroot license (i.e. GPL-2.0+, except for package patches, +which have the upstream license), and that you are allowed to do so. +See the Developer Certificate of +Origin for details.

When adding new packages, you should submit every package in a +separate patch. This patch should have the update to +package/Config.in, the package Config.in file, the .mk file, the +.hash file, any init script, and all package patches. If the package +has many sub-options, these are sometimes better added as separate +follow-up patches. The summary line should be something like +<packagename>: new package. The body of the commit message can be +empty for simple packages, or it can contain the description of the +package (like the Config.in help text). If anything special has to be +done to build the package, this should also be explained explicitly in +the commit message body.

When you bump a package to a new version, you should also submit a +separate patch for each package. Don’t forget to update the .hash +file, or add it if it doesn’t exist yet. Also don’t forget to check if +the _LICENSE and _LICENSE_FILES are still valid. The summary line +should be something like <packagename>: bump to version <new +version>. If the new version only contains security updates compared +to the existing one, the summary should be <packagename>: security +bump to version <new version> and the commit message body should show +the CVE numbers that are fixed. If some package patches can be removed +in the new version, it should be explained explicitly why they can be +removed, preferably with the upstream commit ID. Also any other +required changes should be explained explicitly, like configure +options that no longer exist or are no longer needed.

If you are interested in getting notified of build failures and of +further changes in the packages you added or modified, please add +yourself to the DEVELOPERS file. This should be done in the same patch +creating or modifying the package. See the DEVELOPERS file +for more information.

Buildroot provides a handy tool to check for common coding style +mistakes on files you created or modified, called check-package (see +Section 18.24.2, “How to check the coding style” for more information).

22.5.2. Preparing a patch series

Starting from the changes committed in your local git view, rebase +your development branch on top of the upstream tree before generating +a patch set. To do so, run:

$ git fetch --all --tags
+$ git rebase origin/master

Now, you are ready to generate then submit your patch set.

To generate it, run:

$ git format-patch -M -n -s -o outgoing origin/master

This will generate patch files in the outgoing subdirectory, +automatically adding the Signed-off-by line.

Once patch files are generated, you can review/edit the commit message +before submitting them, using your favorite text editor.

Buildroot provides a handy tool to know to whom your patches should be +sent, called get-developers (see Chapter 23, DEVELOPERS file and get-developers for more +information). This tool reads your patches and outputs the appropriate +git send-email command to use:

$ ./utils/get-developers outgoing/*

Use the output of get-developers to send your patches:

$ git send-email --to buildroot@buildroot.org --cc bob --cc alice outgoing/*

Alternatively, get-developers -e can be used directly with the +--cc-cmd argument to git send-email to automatically CC the +affected developers:

$ git send-email --to buildroot@buildroot.org \
+      --cc-cmd './utils/get-developers -e' origin/master

git can be configured to automatically do this out of the box with:

$ git config sendemail.to buildroot@buildroot.org
+$ git config sendemail.ccCmd "$(pwd)/utils/get-developers -e"

And then just do:

$ git send-email origin/master

Note that git should be configured to use your mail account. +To configure git, see man git-send-email or google it.

If you do not use git send-email, make sure posted patches are not +line-wrapped, otherwise they cannot easily be applied. In such a case, +fix your e-mail client, or better yet, learn to use git send-email.

22.5.3. Cover letter

If you want to present the whole patch set in a separate mail, add +--cover-letter to the git format-patch command (see man +git-format-patch for further information). This will generate a +template for an introduction e-mail to your patch series.

A cover letter may be useful to introduce the changes you propose +in the following cases:

  • +large number of commits in the series; +
  • +deep impact of the changes in the rest of the project; +
  • +RFC [4]; +
  • +whenever you feel it will help presenting your work, your choices, + the review process, etc. +

22.5.4. Patches for maintenance branches

When fixing bugs on a maintenance branch, bugs should be fixed on the +master branch first. The commit log for such a patch may then contain a +post-commit note specifying what branches are affected:

package/foo: fix stuff
+
+Signed-off-by: Your Real Name <your@email.address>
+---
+Backport to: 2020.02.x, 2020.05.x
+(2020.08.x not affected as the version was bumped)

Those changes will then be backported by a maintainer to the affected +branches.

However, some bugs may apply only to a specific release, for example +because it is using an older version of a package. In that case, patches +should be based off the maintenance branch, and the patch subject prefix +must include the maintenance branch name (for example "[PATCH 2020.02.x]"). +This can be done with the git format-patch flag --subject-prefix:

$ git format-patch --subject-prefix "PATCH 2020.02.x" \
+    -M -s -o outgoing origin/2020.02.x

Then send the patches with git send-email, as described above.

22.5.5. Patch revision changelog

When improvements are requested, the new revision of each commit +should include a changelog of the modifications between each +submission. Note that when your patch series is introduced by a cover +letter, an overall changelog may be added to the cover letter in +addition to the changelog in the individual commits. +The best thing to rework a patch series is by interactive rebasing: +git rebase -i origin/master. Consult the git manual for more +information.

When added to the individual commits, this changelog is added when +editing the commit message. Below the Signed-off-by section, add +--- and your changelog.

Although the changelog will be visible for the reviewers in the mail +thread, as well as in patchwork, git +will automatically ignores lines below --- when the patch will be +merged. This is the intended behavior: the changelog is not meant to +be preserved forever in the git history of the project.

Hereafter the recommended layout:

Patch title: short explanation, max 72 chars
+
+A paragraph that explains the problem, and how it manifests itself. If
+the problem is complex, it is OK to add more paragraphs. All paragraphs
+should be wrapped at 72 characters.
+
+A paragraph that explains the root cause of the problem. Again, more
+than one paragraph is OK.
+
+Finally, one or more paragraphs that explain how the problem is solved.
+Don't hesitate to explain complex solutions in detail.
+
+Signed-off-by: John DOE <john.doe@example.net>
+
+---
+Changes v2 -> v3:
+  - foo bar  (suggested by Jane)
+  - bar buz
+
+Changes v1 -> v2:
+  - alpha bravo  (suggested by John)
+  - charly delta

Any patch revision should include the version number. The version number +is simply composed of the letter v followed by an integer greater or +equal to two (i.e. "PATCH v2", "PATCH v3" …).

This can be easily handled with git format-patch by using the option +--subject-prefix:

$ git format-patch --subject-prefix "PATCH v4" \
+    -M -s -o outgoing origin/master

Since git version 1.8.1, you can also use -v <n> (where <n> is the +version number):

$ git format-patch -v4 -M -s -o outgoing origin/master

When you provide a new version of a patch, please mark the old one as +superseded in patchwork. You need to +create an account on patchwork to be +able to modify the status of your patches. Note that you can only change +the status of patches you submitted yourself, which means the email +address you register in patchwork should +match the one you use for sending patches to the mailing list.

You can also add the --in-reply-to <message-id> option when +submitting a patch to the mailing list. The id of the mail to reply to +can be found under the "Message Id" tag on +patchwork. The advantage of +in-reply-to is that patchwork will automatically mark the previous +version of the patch as superseded.

22.6. Reporting issues/bugs or getting help

Before reporting any issue, please check in +the mailing list archive whether someone has +already reported and/or fixed a similar problem.

However you choose to report bugs or get help, either by +opening a bug in the bug tracker or by +sending a mail to the mailing list, there are +a number of details to provide in order to help people reproduce and +find a solution to the issue.

Try to think as if you were trying to help someone else; in +that case, what would you need?

Here is a short list of details to provide in such case:

  • +host machine (OS/release) +
  • +version of Buildroot +
  • +target for which the build fails +
  • +package(s) for which the build fails +
  • +the command that fails and its output +
  • +any information you think that may be relevant +

Additionally, you should add the .config file (or if you know how, a +defconfig; see Section 9.3, “Storing the Buildroot configuration”).

If some of these details are too large, do not hesitate to use a +pastebin service. Note that not all available pastebin services will +preserve Unix-style line terminators when downloading raw pastes. +Following pastebin services are known to work correctly: +- https://gist.github.com/ +- http://code.bulix.org/

22.7. Using the run-tests framework

Buildroot includes a run-time testing framework called run-tests built +upon Python scripting and QEMU runtime execution. There are two types of +test cases within the framework, one for build time tests and another for +run-time tests that have a QEMU dependency. The goals of the framework are +the following:

  • +build a well defined configuration +
  • +optionally, verify some properties of the build output +
  • +if it is a run-time test: +

    • +boot it under QEMU +
    • +run some test condition to verify that a given feature is working +

The run-tests tool has a series of options documented in the tool’s help -h +description. Some common options include setting the download folder, the +output folder, keeping build output, and for multiple test cases, you can set +the JLEVEL for each.

Here is an example walk through of running a test case.

  • +For a first step, let us see what all the test case options are. The test +cases can be listed by executing support/testing/run-tests -l. These tests +can all be run individually during test development from the console. Both +one at a time and selectively as a group of a subset of tests. +
$ support/testing/run-tests -l
+List of tests
+test_run (tests.utils.test_check_package.TestCheckPackage)
+Test the various ways the script can be called in a simple top to ... ok
+test_run (tests.toolchain.test_external.TestExternalToolchainBuildrootMusl) ... ok
+test_run (tests.toolchain.test_external.TestExternalToolchainBuildrootuClibc) ... ok
+test_run (tests.toolchain.test_external.TestExternalToolchainCCache) ... ok
+test_run (tests.toolchain.test_external.TestExternalToolchainCtngMusl) ... ok
+test_run (tests.toolchain.test_external.TestExternalToolchainLinaroArm) ... ok
+test_run (tests.toolchain.test_external.TestExternalToolchainSourceryArmv4) ... ok
+test_run (tests.toolchain.test_external.TestExternalToolchainSourceryArmv5) ... ok
+test_run (tests.toolchain.test_external.TestExternalToolchainSourceryArmv7) ... ok
+[snip]
+test_run (tests.init.test_systemd.TestInitSystemSystemdRoFull) ... ok
+test_run (tests.init.test_systemd.TestInitSystemSystemdRoIfupdown) ... ok
+test_run (tests.init.test_systemd.TestInitSystemSystemdRoNetworkd) ... ok
+test_run (tests.init.test_systemd.TestInitSystemSystemdRwFull) ... ok
+test_run (tests.init.test_systemd.TestInitSystemSystemdRwIfupdown) ... ok
+test_run (tests.init.test_systemd.TestInitSystemSystemdRwNetworkd) ... ok
+test_run (tests.init.test_busybox.TestInitSystemBusyboxRo) ... ok
+test_run (tests.init.test_busybox.TestInitSystemBusyboxRoNet) ... ok
+test_run (tests.init.test_busybox.TestInitSystemBusyboxRw) ... ok
+test_run (tests.init.test_busybox.TestInitSystemBusyboxRwNet) ... ok
+
+Ran 157 tests in 0.021s
+
+OK

Those runtime tests are regularly executed by Buildroot Gitlab CI +infrastructure, see .gitlab.yml and https://gitlab.com/buildroot.org/buildroot/-/jobs.

22.7.1. Creating a test case

The best way to get familiar with how to create a test case is to look at a +few of the basic file system support/testing/tests/fs/ and init +support/testing/tests/init/ test scripts. Those tests give good examples +of a basic build and build with run type of tests. There are other more +advanced cases that use things like nested br2-external folders to provide +skeletons and additional packages.

The test cases by default use a br-arm-full-* uClibc-ng toolchain and the +prebuild kernel for a armv5/7 cpu. It is recommended to use the default +defconfig test configuration except when Glibc/musl or a newer kernel are +necessary. By using the default it saves build time and the test would +automatically inherit a kernel/std library upgrade when the default is +updated.

The basic test case definition involves

  • +Creation of a new test file +
  • +Defining a unique test class +
  • +Determining if the default defconfig plus test options can be used +
  • +Implementing a def test_run(self): function to optionally startup the +emulator and provide test case conditions. +

After creating the test script, add yourself to the DEVELOPERS file to +be the maintainer of that test case.

22.7.2. Debugging a test case

Within the Buildroot repository, the testing framework is organized at the +top level in support/testing/ by folders of conf, infra and tests. +All the test cases live under the test folder and are organized in various +folders representing the catagory of test.

Lets walk through an example.

  • +Using the Busybox Init system test case with a read/write rootfs +tests.init.test_busybox.TestInitSystemBusyboxRw +
  • +A minimal set of command line arguments when debugging a test case would +include -d which points to your dl folder, -o to an output folder, and +-k to keep any output on both pass/fail. With those options, the test will +retain logging and build artifacts providing status of the build and +execution of the test case. +
$ support/testing/run-tests -d dl -o output_folder -k tests.init.test_busybox.TestInitSystemBusyboxRw
+15:03:26 TestInitSystemBusyboxRw                  Starting
+15:03:28 TestInitSystemBusyboxRw                  Building
+15:08:18 TestInitSystemBusyboxRw                  Building done
+15:08:27 TestInitSystemBusyboxRw                  Cleaning up
+.
+Ran 1 test in 301.140s
+
+OK
  • +For the case of a successful build, the output_folder would contain a +<test name> folder with the Buildroot build, build log and run-time log. If +the build failed, the console output would show the stage at which it failed +(setup / build / run). Depending on the failure stage, the build/run logs +and/or Buildroot build artifacts can be inspected and instrumented. If the +QEMU instance needs to be launched for additional testing, the first few +lines of the run-time log capture it and it would allow some incremental +testing without re-running support/testing/run-tests. +
  • +You can also make modifications to the current sources inside the +output_folder (e.g. for debug purposes) and rerun the standard +Buildroot make targets (in order to regenerate the complete image with +the new modifications) and then rerun the test. Modifying the sources +directly can speed up debugging compared to adding patch files, wiping the +output directoy, and starting the test again. +
$ ls output_folder/
+TestInitSystemBusyboxRw/
+TestInitSystemBusyboxRw-build.log
+TestInitSystemBusyboxRw-run.log
  • +The source file used to implement this example test is found under +support/testing/tests/init/test_busybox.py. This file outlines the +minimal defconfig that creates the build, QEMU configuration to launch +the built images and the test case assertions. +

To test an existing or new test case within Gitlab CI, there is a method of +invoking a specific test by creating a Buildroot fork in Gitlab under your +account. This can be handy when adding/changing a run-time test or fixing a +bug on a use case tested by a run-time test case.

In the examples below, the <name> component of the branch name is a unique +string you choose to identify this specific job being created.

  • +to trigger all run-test test case jobs: +
 $ git push gitlab HEAD:<name>-runtime-tests
  • +to trigger one test case job, a specific branch naming string is used that +includes the full test case name. +
 $ git push gitlab HEAD:<name>-<test case name>


[4] RFC: (Request for comments) change proposal

Chapter 23. DEVELOPERS file and get-developers

The main Buildroot directory contains a file named DEVELOPERS that +lists the developers involved with various areas of Buildroot. Thanks +to this file, the get-developers tool allows to:

  • +Calculate the list of developers to whom patches should be sent, by + parsing the patches and matching the modified files with the + relevant developers. See Section 22.5, “Submitting patches” for details. +
  • +Find which developers are taking care of a given architecture or + package, so that they can be notified when a build failure occurs on + this architecture or package. This is done in interaction with + Buildroot’s autobuild infrastructure. +

We ask developers adding new packages, new boards, or generally new +functionality in Buildroot, to register themselves in the DEVELOPERS +file. As an example, we expect a developer contributing a new package +to include in his patch the appropriate modification to the +DEVELOPERS file.

The DEVELOPERS file format is documented in detail inside the file +itself.

The get-developers tool, located in utils/ allows to use +the DEVELOPERS file for various tasks:

  • +When passing one or several patches as command line argument, + get-developers will return the appropriate git send-email + command. If the -e option is passed, only the email addresses are + printed in a format suitable for git send-email --cc-cmd. +
  • +When using the -a <arch> command line option, get-developers will + return the list of developers in charge of the given architecture. +
  • +When using the -p <package> command line option, get-developers + will return the list of developers in charge of the given package. +
  • +When using the -c command line option, get-developers will look + at all files under version control in the Buildroot repository, and + list the ones that are not handled by any developer. The purpose of + this option is to help completing the DEVELOPERS file. +
  • +When using without any arguments, it validates the integrity of the + DEVELOPERS file and will note WARNINGS for items that don’t match. +

Chapter 24. Release Engineering

24.1. Releases

The Buildroot project makes quarterly releases with monthly bugfix +releases. The first release of each year is a long term support +release, LTS.

  • +Quarterly releases: 2020.02, 2020.05, 2020.08, and 2020.11 +
  • +Bugfix releases: 2020.02.1, 2020.02.2, … +
  • +LTS releases: 2020.02, 2021.02, … +

Releases are supported until the first bugfix release of the next +release, e.g., 2020.05.x is EOL when 2020.08.1 is released.

LTS releases are supported until the first bugfix release of the next +LTS, e.g., 2020.02.x is supported until 2021.02.1 is released.

24.2. Development

Each release cycle consist of two months of development on the master +branch and one month stabilization before the release is made. During +this phase no new features are added to master, only bugfixes.

The stabilization phase starts with tagging -rc1, and every week until +the release, another release candidate is tagged.

To handle new features and version bumps during the stabilization phase, +a next branch may be created for these features. Once the current +release has been made, the next branch is merged into master and +the development cycle for the next release continues there.

Part IV. Appendix

Chapter 25. Makedev syntax documentation

The makedev syntax is used in several places in Buildroot to +define changes to be made for permissions, or which device files to +create and how to create them, in order to avoid calls to mknod.

This syntax is derived from the makedev utility, and more complete +documentation can be found in the package/makedevs/README file.

It takes the form of a space separated list of fields, one file per +line; the fields are:

name

type

mode

uid

gid

major

minor

start

inc

count

There are a few non-trivial blocks:

  • +name is the path to the file you want to create/modify +
  • +type is the type of the file, being one of: +

    • +f: a regular file +
    • +d: a directory +
    • +r: a directory recursively +
    • +c: a character device file +
    • +b: a block device file +
    • +p: a named pipe +
  • +mode are the usual permissions settings (only numerical values + are allowed) +
  • +uid and gid are the UID and GID to set on this file; can be + either numerical values or actual names +
  • +major and minor are here for device files, set to - for other + files +
  • +start, inc and count are for when you want to create a batch + of files, and can be reduced to a loop, beginning at start, + incrementing its counter by inc until it reaches count +

Let’s say you want to change the permissions of a given file; using +this syntax, you will need to write:

/usr/bin/foo f 755 0 0 - - - - -
+/usr/bin/bar f 755 root root - - - - -
+/data/buz f 644 buz-user buz-group - - - - -

Alternatively, if you want to change owner/permission of a directory +recursively, you can write (to set UID to foo, GID to bar and access +rights to rwxr-x--- for the directory /usr/share/myapp and all files +and directories below it):

/usr/share/myapp r 750 foo bar - - - - -

On the other hand, if you want to create the device file /dev/hda +and the corresponding 15 files for the partitions, you will need for +/dev/hda:

/dev/hda b 640 root root 3 0 0 0 -

and then for device files corresponding to the partitions of +/dev/hda, /dev/hdaX, X ranging from 1 to 15:

/dev/hda b 640 root root 3 1 1 1 15

Extended attributes are supported if +BR2_ROOTFS_DEVICE_TABLE_SUPPORTS_EXTENDED_ATTRIBUTES is enabled. +This is done by adding a line starting with |xattr after +the line describing the file. Right now, only capability +is supported as extended attribute.

|xattr

capability

  • +|xattr is a "flag" that indicate an extended attribute +
  • +capability is a capability to add to the previous file +

If you want to add the capability cap_sys_admin to the binary foo, +you will write :

/usr/bin/foo f 755 root root - - - - -
+|xattr cap_sys_admin+eip

You can add several capabilities to a file by using several |xattr lines. +If you want to add the capability cap_sys_admin and cap_net_admin to the +binary foo, you will write :

/usr/bin/foo f 755 root root - - - - -
+|xattr cap_sys_admin+eip
+|xattr cap_net_admin+eip

Chapter 26. Makeusers syntax documentation

The syntax to create users is inspired by the makedev syntax, above, but +is specific to Buildroot.

The syntax for adding a user is a space-separated list of fields, one +user per line; the fields are:

username

uid

group

gid

password

home

shell

groups

comment

Where:

  • +username is the desired user name (aka login name) for the user. + It can not be root, and must be unique. If set to -, then just a + group will be created. +
  • +uid is the desired UID for the user. It must be unique, and not + 0. If set to -1, then a unique UID will be computed by Buildroot + in the range [1000…1999] +
  • +group is the desired name for the user’s main group. It can not + be root. If the group does not exist, it will be created. +
  • +gid is the desired GID for the user’s main group. It must be unique, + and not 0. If set to -1, and the group does not already exist, then + a unique GID will be computed by Buildroot in the range [1000..1999] +
  • +password is the crypt(3)-encoded password. If prefixed with !, + then login is disabled. If prefixed with =, then it is interpreted + as clear-text, and will be crypt-encoded (using MD5). If prefixed with + !=, then the password will be crypt-encoded (using MD5) and login + will be disabled. If set to *, then login is not allowed. If set to + -, then no password value will be set. +
  • +home is the desired home directory for the user. If set to -, no + home directory will be created, and the user’s home will be /. + Explicitly setting home to / is not allowed. +
  • +shell is the desired shell for the user. If set to -, then + /bin/false is set as the user’s shell. +
  • +groups is the comma-separated list of additional groups the user + should be part of. If set to -, then the user will be a member of + no additional group. Missing groups will be created with an arbitrary + gid. +
  • +comment (aka GECOS + field) is an almost-free-form text. +

There are a few restrictions on the content of each field:

  • +except for comment, all fields are mandatory. +
  • +except for comment, fields may not contain spaces. +
  • +no field may contain a colon (:). +

If home is not -, then the home directory, and all files below, +will belong to the user and its main group.

Examples:

foo -1 bar -1 !=blabla /home/foo /bin/sh alpha,bravo Foo user

This will create this user:

  • +username (aka login name) is: foo +
  • +uid is computed by Buildroot +
  • +main group is: bar +
  • +main group gid is computed by Buildroot +
  • +clear-text password is: blabla, will be crypt(3)-encoded, and login is disabled. +
  • +home is: /home/foo +
  • +shell is: /bin/sh +
  • +foo is also a member of groups: alpha and bravo +
  • +comment is: Foo user +
test 8000 wheel -1 = - /bin/sh - Test user

This will create this user:

  • +username (aka login name) is: test +
  • +uid is : 8000 +
  • +main group is: wheel +
  • +main group gid is computed by Buildroot, and will use the value defined in the rootfs skeleton +
  • +password is empty (aka no password). +
  • +home is / but will not belong to test +
  • +shell is: /bin/sh +
  • +test is not a member of any additional groups +
  • +comment is: Test user + +

Chapter 27. Migrating from older Buildroot versions

Some versions have introduced backward incompatibilities. This section +explains those incompatibilities, and for each explains what to do to +complete the migration.

27.1. Migrating to 2016.11

Before Buildroot 2016.11, it was possible to use only one br2-external +tree at once. With Buildroot 2016.11 came the possibility to use more +than one simultaneously (for details, see Section 9.2, “Keeping customizations outside of Buildroot”).

This however means that older br2-external trees are not usable as-is. +A minor change has to be made: adding a name to your br2-external tree.

This can be done very easily in just a few steps:

  • +First, create a new file named external.desc, at the root of your + br2-external tree, with a single line defining the name of your + br2-external tree: +

    $ echo 'name: NAME_OF_YOUR_TREE' >external.desc

    Note. Be careful when choosing a name: It has to be unique and be made +with only ASCII characters from the set [A-Za-z0-9_].

  • +Then, change every occurence of BR2_EXTERNAL in your br2-external + tree with the new variable: +

    $ find . -type f | xargs sed -i 's/BR2_EXTERNAL/BR2_EXTERNAL_NAME_OF_YOUR_TREE_PATH/g'

Now, your br2-external tree can be used with Buildroot 2016.11 onward.

Note: This change makes your br2-external tree incompatible with Buildroot +before 2016.11.

27.2. Migrating to 2017.08

Before Buildroot 2017.08, host packages were installed in $(HOST_DIR)/usr +(with e.g. the autotools' --prefix=$(HOST_DIR)/usr). With Buildroot +2017.08, they are now installed directly in $(HOST_DIR).

Whenever a package installs an executable that is linked with a library +in $(HOST_DIR)/lib, it must have an RPATH pointing to that directory.

An RPATH pointing to $(HOST_DIR)/usr/lib is no longer accepted.

\ No newline at end of file diff --git a/docs/manual/manual.mk b/docs/manual/manual.mk new file mode 100644 index 00000000..1d03b213 --- /dev/null +++ b/docs/manual/manual.mk @@ -0,0 +1,10 @@ +################################################################################ +# +# The Buildroot manual +# +################################################################################ + +MANUAL_SOURCES = $(sort $(wildcard docs/manual/*.txt) $(wildcard docs/images/*)) +MANUAL_RESOURCES = $(TOPDIR)/docs/images + +$(eval $(call asciidoc-document)) diff --git a/docs/manual/manual.pdf b/docs/manual/manual.pdf new file mode 100644 index 00000000..9464614f Binary files /dev/null and b/docs/manual/manual.pdf differ diff --git a/docs/manual/manual.text b/docs/manual/manual.text new file mode 100644 index 00000000..4a303d2d --- /dev/null +++ b/docs/manual/manual.text @@ -0,0 +1,8420 @@ + +--------------------------------------------------------------------- + +The Buildroot user manual + +--------------------------------------------------------------------- +--------------------------------------------------------------------- + +Table of Contents + + +I. Getting started + + 1. About Buildroot + 2. System requirements + + 2.1. Mandatory packages + 2.2. Optional packages + + 3. Getting Buildroot + 4. Buildroot quick start + 5. Community resources + +II. User guide + + 6. Buildroot configuration + + 6.1. Cross-compilation toolchain + 6.2. /dev management + 6.3. init system + + 7. Configuration of other components + 8. General Buildroot usage + + 8.1. make tips + 8.2. Understanding when a full rebuild is necessary + 8.3. Understanding how to rebuild packages + 8.4. Offline builds + 8.5. Building out-of-tree + 8.6. Environment variables + 8.7. Dealing efficiently with filesystem images + 8.8. Details about packages + 8.9. Graphing the dependencies between packages + 8.10. Graphing the build duration + 8.11. Graphing the filesystem size contribution of packages + 8.12. Top-level parallel build + 8.13. Integration with Eclipse + 8.14. Advanced usage + + 9. Project-specific customization + + 9.1. Recommended directory structure + 9.2. Keeping customizations outside of Buildroot + 9.3. Storing the Buildroot configuration + 9.4. Storing the configuration of other components + 9.5. Customizing the generated target filesystem + 9.6. Adding custom user accounts + 9.7. Customization after the images have been created + 9.8. Adding project-specific patches + 9.9. Adding project-specific packages + 9.10. Quick guide to storing your project-specific + customizations + + 10. Using SELinux in Buildroot + + 10.1. Enabling SELinux support + 10.2. SELinux policy tweaking + + 11. Frequently Asked Questions & Troubleshooting + + 11.1. The boot hangs after Starting network… + 11.2. Why is there no compiler on the target? + 11.3. Why are there no development files on the target? + 11.4. Why is there no documentation on the target? + 11.5. Why are some packages not visible in the Buildroot + config menu? + 11.6. Why not use the target directory as a chroot directory? + 11.7. Why doesn’t Buildroot generate binary packages (.deb, + .ipkg…)? + 11.8. How to speed-up the build process? + + 12. Known issues + 13. Legal notice and licensing + + 13.1. Complying with open source licenses + 13.2. Complying with the Buildroot license + + 14. Beyond Buildroot + + 14.1. Boot the generated images + 14.2. Chroot + +III. Developer guide + + 15. How Buildroot works + 16. Coding style + + 16.1. Config.in file + 16.2. The .mk file + 16.3. The documentation + 16.4. Support scripts + + 17. Adding support for a particular board + 18. Adding new packages to Buildroot + + 18.1. Package directory + 18.2. Config files + 18.3. The .mk file + 18.4. The .hash file + 18.5. Infrastructure for packages with specific build systems + 18.6. Infrastructure for autotools-based packages + 18.7. Infrastructure for CMake-based packages + 18.8. Infrastructure for Python packages + 18.9. Infrastructure for LuaRocks-based packages + 18.10. Infrastructure for Perl/CPAN packages + 18.11. Infrastructure for virtual packages + 18.12. Infrastructure for packages using kconfig for + configuration files + 18.13. Infrastructure for rebar-based packages + 18.14. Infrastructure for Waf-based packages + 18.15. Infrastructure for Meson-based packages + 18.16. Integration of Cargo-based packages + 18.17. Infrastructure for Go packages + 18.18. Infrastructure for QMake-based packages + 18.19. Infrastructure for packages building kernel modules + 18.20. Infrastructure for asciidoc documents + 18.21. Infrastructure specific to the Linux kernel package + 18.22. Hooks available in the various build steps + 18.23. Gettext integration and interaction with packages + 18.24. Tips and tricks + 18.25. Conclusion + + 19. Patching a package + + 19.1. Providing patches + 19.2. How patches are applied + 19.3. Format and licensing of the package patches + 19.4. Integrating patches found on the Web + + 20. Download infrastructure + 21. Debugging Buildroot + 22. Contributing to Buildroot + + 22.1. Reproducing, analyzing and fixing bugs + 22.2. Analyzing and fixing autobuild failures + 22.3. Reviewing and testing patches + 22.4. Work on items from the TODO list + 22.5. Submitting patches + 22.6. Reporting issues/bugs or getting help + 22.7. Using the run-tests framework + + 23. DEVELOPERS file and get-developers + 24. Release Engineering + + 24.1. Releases + 24.2. Development + +IV. Appendix + + 25. Makedev syntax documentation + 26. Makeusers syntax documentation + 27. Migrating from older Buildroot versions + + 27.1. Migrating to 2016.11 + 27.2. Migrating to 2017.08 + +List of Examples + +18.1. Config script: divine package +18.2. Config script: imagemagick package: + + +--------------------------------------------------------------------- + +--------------------------------------------------------------------- + +Buildroot 2021.02.4 manual generated on 2021-08-10 20:33:55 UTC from +git revision 004a792dcf + +The Buildroot manual is written by the Buildroot developers. It is +licensed under the GNU General Public License, version 2. Refer to +the COPYING [http://git.buildroot.org/buildroot/tree/COPYING?id= +004a792dcf10e6c474070c9571f7504411e786cc] file in the Buildroot +sources for the full text of this license. + +Copyright © 2004-2020 The Buildroot developers + +Part I. Getting started + +Table of Contents + +1. About Buildroot +2. System requirements + + 2.1. Mandatory packages + 2.2. Optional packages + +3. Getting Buildroot +4. Buildroot quick start +5. Community resources + +Chapter 1. About Buildroot + +Buildroot is a tool that simplifies and automates the process of +building a complete Linux system for an embedded system, using +cross-compilation. + +In order to achieve this, Buildroot is able to generate a +cross-compilation toolchain, a root filesystem, a Linux kernel image +and a bootloader for your target. Buildroot can be used for any +combination of these options, independently (you can for example use +an existing cross-compilation toolchain, and build only your root +filesystem with Buildroot). + +Buildroot is useful mainly for people working with embedded systems. +Embedded systems often use processors that are not the regular x86 +processors everyone is used to having in his PC. They can be PowerPC +processors, MIPS processors, ARM processors, etc. + +Buildroot supports numerous processors and their variants; it also +comes with default configurations for several boards available +off-the-shelf. Besides this, a number of third-party projects are +based on, or develop their BSP ^[1] or SDK ^[2] on top of Buildroot. + + +--------------------------------------------------------------------- + +^[1] BSP: Board Support Package + +^[2] SDK: Software Development Kit + +Chapter 2. System requirements + +Buildroot is designed to run on Linux systems. + +While Buildroot itself will build most host packages it needs for the +compilation, certain standard Linux utilities are expected to be +already installed on the host system. Below you will find an overview +of the mandatory and optional packages (note that package names may +vary between distributions). + +2.1. Mandatory packages + + * Build tools: + + + which + + sed + + make (version 3.81 or any later) + + binutils + + build-essential (only for Debian based systems) + + gcc (version 4.8 or any later) + + g++ (version 4.8 or any later) + + bash + + patch + + gzip + + bzip2 + + perl (version 5.8.7 or any later) + + tar + + cpio + + unzip + + rsync + + file (must be in /usr/bin/file) + + bc + * Source fetching tools: + + + wget + +2.2. Optional packages + + * Recommended dependencies: + + Some features or utilities in Buildroot, like the legal-info, or + the graph generation tools, have additional dependencies. + Although they are not mandatory for a simple build, they are + still highly recommended: + + + python (version 2.7 or any later) + * Configuration interface dependencies: + + For these libraries, you need to install both runtime and + development data, which in many distributions are packaged + separately. The development packages typically have a -dev or + -devel suffix. + + + ncurses5 to use the menuconfig interface + + qt5 to use the xconfig interface + + glib2, gtk2 and glade2 to use the gconfig interface + * Source fetching tools: + + In the official tree, most of the package sources are retrieved + using wget from ftp, http or https locations. A few packages are + only available through a version control system. Moreover, + Buildroot is capable of downloading sources via other tools, like + rsync or scp (refer to Chapter 20, Download infrastructure for + more details). If you enable packages using any of these methods, + you will need to install the corresponding tool on the host + system: + + + bazaar + + cvs + + git + + mercurial + + rsync + + scp + + subversion + * Java-related packages, if the Java Classpath needs to be built + for the target system: + + + The javac compiler + + The jar tool + * Documentation generation tools: + + + asciidoc, version 8.6.3 or higher + + w3m + + python with the argparse module (automatically present in + 2.7+ and 3.2+) + + dblatex (required for the pdf manual only) + * Graph generation tools: + + + graphviz to use graph-depends and -graph-depends + + python-matplotlib to use graph-build + +Chapter 3. Getting Buildroot + +Buildroot releases are made every 3 months, in February, May, August +and November. Release numbers are in the format YYYY.MM, so for +example 2013.02, 2014.08. + +Release tarballs are available at http://buildroot.org/downloads/. + +For your convenience, a Vagrantfile [https://www.vagrantup.com/] is +available in support/misc/Vagrantfile in the Buildroot source tree to +quickly set up a virtual machine with the needed dependencies to get +started. + +If you want to setup an isolated buildroot environment on Linux or +Mac Os X, paste this line onto your terminal: + +curl -O https://buildroot.org/downloads/Vagrantfile; vagrant up + +If you are on Windows, paste this into your powershell: + +(new-object System.Net.WebClient).DownloadFile( +"https://buildroot.org/downloads/Vagrantfile","Vagrantfile"); +vagrant up + +If you want to follow development, you can use the daily snapshots or +make a clone of the Git repository. Refer to the Download page [http: +//buildroot.org/download] of the Buildroot website for more details. + +Chapter 4. Buildroot quick start + +Important: you can and should build everything as a normal user. +There is no need to be root to configure and use Buildroot. By +running all commands as a regular user, you protect your system +against packages behaving badly during compilation and installation. + +The first step when using Buildroot is to create a configuration. +Buildroot has a nice configuration tool similar to the one you can +find in the Linux kernel [http://www.kernel.org/] or in BusyBox +[http://www.busybox.net/]. + +From the buildroot directory, run + + $ make menuconfig + +for the original curses-based configurator, or + + $ make nconfig + +for the new curses-based configurator, or + + $ make xconfig + +for the Qt-based configurator, or + + $ make gconfig + +for the GTK-based configurator. + +All of these "make" commands will need to build a configuration +utility (including the interface), so you may need to install +"development" packages for relevant libraries used by the +configuration utilities. Refer to Chapter 2, System requirements for +more details, specifically the optional requirements to get the +dependencies of your favorite interface. + +For each menu entry in the configuration tool, you can find +associated help that describes the purpose of the entry. Refer to +Chapter 6, Buildroot configuration for details on some specific +configuration aspects. + +Once everything is configured, the configuration tool generates a +.config file that contains the entire configuration. This file will +be read by the top-level Makefile. + +To start the build process, simply run: + + $ make + +By default, Buildroot does not support top-level parallel build, so +running make -jN is not necessary. There is however experimental +support for top-level parallel build, see Section 8.12, “Top-level +parallel build”. + +The make command will generally perform the following steps: + + * download source files (as required); + * configure, build and install the cross-compilation toolchain, or + simply import an external toolchain; + * configure, build and install selected target packages; + * build a kernel image, if selected; + * build a bootloader image, if selected; + * create a root filesystem in selected formats. + +Buildroot output is stored in a single directory, output/. This +directory contains several subdirectories: + + * images/ where all the images (kernel image, bootloader and root + filesystem images) are stored. These are the files you need to + put on your target system. + * build/ where all the components are built (this includes tools + needed by Buildroot on the host and packages compiled for the + target). This directory contains one subdirectory for each of + these components. + * host/ contains both the tools built for the host, and the sysroot + of the target toolchain. The former is an installation of tools + compiled for the host that are needed for the proper execution of + Buildroot, including the cross-compilation toolchain. The latter + is a hierarchy similar to a root filesystem hierarchy. It + contains the headers and libraries of all user-space packages + that provide and install libraries used by other packages. + However, this directory is not intended to be the root filesystem + for the target: it contains a lot of development files, + unstripped binaries and libraries that make it far too big for an + embedded system. These development files are used to compile + libraries and applications for the target that depend on other + libraries. + * staging/ is a symlink to the target toolchain sysroot inside host + /, which exists for backwards compatibility. + * target/ which contains almost the complete root filesystem for + the target: everything needed is present except the device files + in /dev/ (Buildroot can’t create them because Buildroot doesn’t + run as root and doesn’t want to run as root). Also, it doesn’t + have the correct permissions (e.g. setuid for the busybox + binary). Therefore, this directory should not be used on your + target. Instead, you should use one of the images built in the + images/ directory. If you need an extracted image of the root + filesystem for booting over NFS, then use the tarball image + generated in images/ and extract it as root. Compared to staging + /, target/ contains only the files and libraries needed to run + the selected target applications: the development files (headers, + etc.) are not present, the binaries are stripped. + +These commands, make menuconfig|nconfig|gconfig|xconfig and make, are +the basic ones that allow to easily and quickly generate images +fitting your needs, with all the features and applications you +enabled. + +More details about the "make" command usage are given in Section 8.1, +“make tips”. + +Chapter 5. Community resources + +Like any open source project, Buildroot has different ways to share +information in its community and outside. + +Each of those ways may interest you if you are looking for some help, +want to understand Buildroot or contribute to the project. + +Mailing List + + Buildroot has a mailing list for discussion and development. It + is the main method of interaction for Buildroot users and + developers. + + Only subscribers to the Buildroot mailing list are allowed to + post to this list. You can subscribe via the mailing list info + page [http://lists.buildroot.org/mailman/listinfo/buildroot]. + + Mails that are sent to the mailing list are also available in the + mailing list archives, available through Mailman [http:// + lists.buildroot.org/pipermail/buildroot] or at lore.kernel.org + [https://lore.kernel.org/buildroot/]. + +IRC + + The Buildroot IRC channel #buildroot [irc://irc.oftc.net/# + buildroot] is hosted on OFTC [https://www.oftc.net/WebChat/]. It + is a useful place to ask quick questions or discuss on certain + topics. + + When asking for help on IRC, share relevant logs or pieces of + code using a code sharing website, such as https://paste.ack.tf/. + + Note that for certain questions, posting to the mailing list may + be better as it will reach more people, both developers and + users. + +Bug tracker + Bugs in Buildroot can be reported via the mailing list or + alternatively via the Buildroot bugtracker [https:// + bugs.buildroot.org/buglist.cgi?product=buildroot]. Please refer + to Section 22.6, “Reporting issues/bugs or getting help” before + creating a bug report. +Wiki + The Buildroot wiki page [http://elinux.org/Buildroot] is hosted + on the eLinux [http://elinux.org] wiki. It contains some useful + links, an overview of past and upcoming events, and a TODO list. +Patchwork + + Patchwork is a web-based patch tracking system designed to + facilitate the contribution and management of contributions to an + open-source project. Patches that have been sent to a mailing + list are 'caught' by the system, and appear on a web page. Any + comments posted that reference the patch are appended to the + patch page too. For more information on Patchwork see http:// + jk.ozlabs.org/projects/patchwork/. + + Buildroot’s Patchwork website is mainly for use by Buildroot’s + maintainer to ensure patches aren’t missed. It is also used by + Buildroot patch reviewers (see also Section 22.3.1, “Applying + Patches from Patchwork”). However, since the website exposes + patches and their corresponding review comments in a clean and + concise web interface, it can be useful for all Buildroot + developers. + + The Buildroot patch management interface is available at http:// + patchwork.buildroot.org. + +Part II. User guide + +Table of Contents + +6. Buildroot configuration + + 6.1. Cross-compilation toolchain + 6.2. /dev management + 6.3. init system + +7. Configuration of other components +8. General Buildroot usage + + 8.1. make tips + 8.2. Understanding when a full rebuild is necessary + 8.3. Understanding how to rebuild packages + 8.4. Offline builds + 8.5. Building out-of-tree + 8.6. Environment variables + 8.7. Dealing efficiently with filesystem images + 8.8. Details about packages + 8.9. Graphing the dependencies between packages + 8.10. Graphing the build duration + 8.11. Graphing the filesystem size contribution of packages + 8.12. Top-level parallel build + 8.13. Integration with Eclipse + 8.14. Advanced usage + +9. Project-specific customization + + 9.1. Recommended directory structure + 9.2. Keeping customizations outside of Buildroot + 9.3. Storing the Buildroot configuration + 9.4. Storing the configuration of other components + 9.5. Customizing the generated target filesystem + 9.6. Adding custom user accounts + 9.7. Customization after the images have been created + 9.8. Adding project-specific patches + 9.9. Adding project-specific packages + 9.10. Quick guide to storing your project-specific customizations + +10. Using SELinux in Buildroot + + 10.1. Enabling SELinux support + 10.2. SELinux policy tweaking + +11. Frequently Asked Questions & Troubleshooting + + 11.1. The boot hangs after Starting network… + 11.2. Why is there no compiler on the target? + 11.3. Why are there no development files on the target? + 11.4. Why is there no documentation on the target? + 11.5. Why are some packages not visible in the Buildroot config + menu? + 11.6. Why not use the target directory as a chroot directory? + 11.7. Why doesn’t Buildroot generate binary packages (.deb, + .ipkg…)? + 11.8. How to speed-up the build process? + +12. Known issues +13. Legal notice and licensing + + 13.1. Complying with open source licenses + 13.2. Complying with the Buildroot license + +14. Beyond Buildroot + + 14.1. Boot the generated images + 14.2. Chroot + +Chapter 6. Buildroot configuration + +All the configuration options in make *config have a help text +providing details about the option. + +The make *config commands also offer a search tool. Read the help +message in the different frontend menus to know how to use it: + + * in menuconfig, the search tool is called by pressing /; + * in xconfig, the search tool is called by pressing Ctrl + f. + +The result of the search shows the help message of the matching +items. In menuconfig, numbers in the left column provide a shortcut +to the corresponding entry. Just type this number to directly jump to +the entry, or to the containing menu in case the entry is not +selectable due to a missing dependency. + +Although the menu structure and the help text of the entries should +be sufficiently self-explanatory, a number of topics require +additional explanation that cannot easily be covered in the help text +and are therefore covered in the following sections. + +6.1. Cross-compilation toolchain + +A compilation toolchain is the set of tools that allows you to +compile code for your system. It consists of a compiler (in our case, +gcc), binary utils like assembler and linker (in our case, binutils) +and a C standard library (for example GNU Libc [http://www.gnu.org/ +software/libc/libc.html], uClibc-ng [http://www.uclibc-ng.org/]). + +The system installed on your development station certainly already +has a compilation toolchain that you can use to compile an +application that runs on your system. If you’re using a PC, your +compilation toolchain runs on an x86 processor and generates code for +an x86 processor. Under most Linux systems, the compilation toolchain +uses the GNU libc (glibc) as the C standard library. This compilation +toolchain is called the "host compilation toolchain". The machine on +which it is running, and on which you’re working, is called the "host +system" ^[3]. + +The compilation toolchain is provided by your distribution, and +Buildroot has nothing to do with it (other than using it to build a +cross-compilation toolchain and other tools that are run on the +development host). + +As said above, the compilation toolchain that comes with your system +runs on and generates code for the processor in your host system. As +your embedded system has a different processor, you need a +cross-compilation toolchain - a compilation toolchain that runs on +your host system but generates code for your target system (and +target processor). For example, if your host system uses x86 and your +target system uses ARM, the regular compilation toolchain on your +host runs on x86 and generates code for x86, while the +cross-compilation toolchain runs on x86 and generates code for ARM. + +Buildroot provides two solutions for the cross-compilation toolchain: + + * The internal toolchain backend, called Buildroot toolchain in the + configuration interface. + * The external toolchain backend, called External toolchain in the + configuration interface. + +The choice between these two solutions is done using the Toolchain +Type option in the Toolchain menu. Once one solution has been chosen, +a number of configuration options appear, they are detailed in the +following sections. + +6.1.1. Internal toolchain backend + +The internal toolchain backend is the backend where Buildroot builds +by itself a cross-compilation toolchain, before building the +userspace applications and libraries for your target embedded system. + +This backend supports several C libraries: uClibc-ng [http:// +www.uclibc-ng.org], glibc [http://www.gnu.org/software/libc/ +libc.html] and musl [http://www.musl-libc.org]. + +Once you have selected this backend, a number of options appear. The +most important ones allow to: + + * Change the version of the Linux kernel headers used to build the + toolchain. This item deserves a few explanations. In the process + of building a cross-compilation toolchain, the C library is being + built. This library provides the interface between userspace + applications and the Linux kernel. In order to know how to "talk" + to the Linux kernel, the C library needs to have access to the + Linux kernel headers (i.e. the .h files from the kernel), which + define the interface between userspace and the kernel (system + calls, data structures, etc.). Since this interface is backward + compatible, the version of the Linux kernel headers used to build + your toolchain do not need to match exactly the version of the + Linux kernel you intend to run on your embedded system. They only + need to have a version equal or older to the version of the Linux + kernel you intend to run. If you use kernel headers that are more + recent than the Linux kernel you run on your embedded system, + then the C library might be using interfaces that are not + provided by your Linux kernel. + * Change the version of the GCC compiler, binutils and the C + library. + * Select a number of toolchain options (uClibc only): whether the + toolchain should have RPC support (used mainly for NFS), + wide-char support, locale support (for internationalization), C++ + support or thread support. Depending on which options you choose, + the number of userspace applications and libraries visible in + Buildroot menus will change: many applications and libraries + require certain toolchain options to be enabled. Most packages + show a comment when a certain toolchain option is required to be + able to enable those packages. If needed, you can further refine + the uClibc configuration by running make uclibc-menuconfig. Note + however that all packages in Buildroot are tested against the + default uClibc configuration bundled in Buildroot: if you deviate + from this configuration by removing features from uClibc, some + packages may no longer build. + +It is worth noting that whenever one of those options is modified, +then the entire toolchain and system must be rebuilt. See +Section 8.2, “Understanding when a full rebuild is necessary”. + +Advantages of this backend: + + * Well integrated with Buildroot + * Fast, only builds what’s necessary + +Drawbacks of this backend: + + * Rebuilding the toolchain is needed when doing make clean, which + takes time. If you’re trying to reduce your build time, consider + using the External toolchain backend. + +6.1.2. External toolchain backend + +The external toolchain backend allows to use existing pre-built +cross-compilation toolchains. Buildroot knows about a number of +well-known cross-compilation toolchains (from Linaro [http:// +www.linaro.org] for ARM, Sourcery CodeBench [http://www.mentor.com/ +embedded-software/sourcery-tools/sourcery-codebench/editions/ +lite-edition/] for ARM, x86-64, PowerPC, and MIPS, and is capable of +downloading them automatically, or it can be pointed to a custom +toolchain, either available for download or installed locally. + +Then, you have three solutions to use an external toolchain: + + * Use a predefined external toolchain profile, and let Buildroot + download, extract and install the toolchain. Buildroot already + knows about a few CodeSourcery and Linaro toolchains. Just select + the toolchain profile in Toolchain from the available ones. This + is definitely the easiest solution. + * Use a predefined external toolchain profile, but instead of + having Buildroot download and extract the toolchain, you can tell + Buildroot where your toolchain is already installed on your + system. Just select the toolchain profile in Toolchain through + the available ones, unselect Download toolchain automatically, + and fill the Toolchain path text entry with the path to your + cross-compiling toolchain. + * Use a completely custom external toolchain. This is particularly + useful for toolchains generated using crosstool-NG or with + Buildroot itself. To do this, select the Custom toolchain + solution in the Toolchain list. You need to fill the Toolchain + path, Toolchain prefix and External toolchain C library options. + Then, you have to tell Buildroot what your external toolchain + supports. If your external toolchain uses the glibc library, you + only have to tell whether your toolchain supports C++ or not and + whether it has built-in RPC support. If your external toolchain + uses the uClibc library, then you have to tell Buildroot if it + supports RPC, wide-char, locale, program invocation, threads and + C++. At the beginning of the execution, Buildroot will tell you + if the selected options do not match the toolchain configuration. + +Our external toolchain support has been tested with toolchains from +CodeSourcery and Linaro, toolchains generated by crosstool-NG [http:/ +/crosstool-ng.org], and toolchains generated by Buildroot itself. In +general, all toolchains that support the sysroot feature should work. +If not, do not hesitate to contact the developers. + +We do not support toolchains or SDK generated by OpenEmbedded or +Yocto, because these toolchains are not pure toolchains (i.e. just +the compiler, binutils, the C and C++ libraries). Instead these +toolchains come with a very large set of pre-compiled libraries and +programs. Therefore, Buildroot cannot import the sysroot of the +toolchain, as it would contain hundreds of megabytes of pre-compiled +libraries that are normally built by Buildroot. + +We also do not support using the distribution toolchain (i.e. the gcc +/binutils/C library installed by your distribution) as the toolchain +to build software for the target. This is because your distribution +toolchain is not a "pure" toolchain (i.e. only with the C/C++ +library), so we cannot import it properly into the Buildroot build +environment. So even if you are building a system for a x86 or x86_64 +target, you have to generate a cross-compilation toolchain with +Buildroot or crosstool-NG. + +If you want to generate a custom toolchain for your project, that can +be used as an external toolchain in Buildroot, our recommendation is +to build it either with Buildroot itself (see Section 6.1.3, “Build +an external toolchain with Buildroot”) or with crosstool-NG [http:// +crosstool-ng.org]. + +Advantages of this backend: + + * Allows to use well-known and well-tested cross-compilation + toolchains. + * Avoids the build time of the cross-compilation toolchain, which + is often very significant in the overall build time of an + embedded Linux system. + +Drawbacks of this backend: + + * If your pre-built external toolchain has a bug, may be hard to + get a fix from the toolchain vendor, unless you build your + external toolchain by yourself using Buildroot or Crosstool-NG. + +6.1.3. Build an external toolchain with Buildroot + +The Buildroot internal toolchain option can be used to create an +external toolchain. Here are a series of steps to build an internal +toolchain and package it up for reuse by Buildroot itself (or other +projects). + +Create a new Buildroot configuration, with the following details: + + * Select the appropriate Target options for your target CPU + architecture + * In the Toolchain menu, keep the default of Buildroot toolchain + for Toolchain type, and configure your toolchain as desired + * In the System configuration menu, select None as the Init system + and none as /bin/sh + * In the Target packages menu, disable BusyBox + * In the Filesystem images menu, disable tar the root filesystem + +Then, we can trigger the build, and also ask Buildroot to generate a +SDK. This will conveniently generate for us a tarball which contains +our toolchain: + +make sdk + +This produces the SDK tarball in $(O)/images, with a name similar to +arm-buildroot-linux-uclibcgnueabi_sdk-buildroot.tar.gz. Save this +tarball, as it is now the toolchain that you can re-use as an +external toolchain in other Buildroot projects. + +In those other Buildroot projects, in the Toolchain menu: + + * Set Toolchain type to External toolchain + * Set Toolchain to Custom toolchain + * Set Toolchain origin to Toolchain to be downloaded and installed + * Set Toolchain URL to file:///path/to/your/sdk/tarball.tar.gz + +6.1.3.1. External toolchain wrapper + +When using an external toolchain, Buildroot generates a wrapper +program, that transparently passes the appropriate options (according +to the configuration) to the external toolchain programs. In case you +need to debug this wrapper to check exactly what arguments are +passed, you can set the environment variable BR2_DEBUG_WRAPPER to +either one of: + + * 0, empty or not set: no debug + * 1: trace all arguments on a single line + * 2: trace one argument per line + +6.2. /dev management + +On a Linux system, the /dev directory contains special files, called +device files, that allow userspace applications to access the +hardware devices managed by the Linux kernel. Without these device +files, your userspace applications would not be able to use the +hardware devices, even if they are properly recognized by the Linux +kernel. + +Under System configuration, /dev management, Buildroot offers four +different solutions to handle the /dev directory : + + * The first solution is Static using device table. This is the old + classical way of handling device files in Linux. With this + method, the device files are persistently stored in the root + filesystem (i.e. they persist across reboots), and there is + nothing that will automatically create and remove those device + files when hardware devices are added or removed from the system. + Buildroot therefore creates a standard set of device files using + a device table, the default one being stored in system/ + device_table_dev.txt in the Buildroot source code. This file is + processed when Buildroot generates the final root filesystem + image, and the device files are therefore not visible in the + output/target directory. The BR2_ROOTFS_STATIC_DEVICE_TABLE + option allows to change the default device table used by + Buildroot, or to add an additional device table, so that + additional device files are created by Buildroot during the + build. So, if you use this method, and a device file is missing + in your system, you can for example create a board// + /device_table_dev.txt file that contains the + description of your additional device files, and then you can set + BR2_ROOTFS_STATIC_DEVICE_TABLE to system/device_table_dev.txt + board///device_table_dev.txt. For more + details about the format of the device table file, see + Chapter 25, Makedev syntax documentation. + * The second solution is Dynamic using devtmpfs only. devtmpfs is a + virtual filesystem inside the Linux kernel that has been + introduced in kernel 2.6.32 (if you use an older kernel, it is + not possible to use this option). When mounted in /dev, this + virtual filesystem will automatically make device files appear + and disappear as hardware devices are added and removed from the + system. This filesystem is not persistent across reboots: it is + filled dynamically by the kernel. Using devtmpfs requires the + following kernel configuration options to be enabled: + CONFIG_DEVTMPFS and CONFIG_DEVTMPFS_MOUNT. When Buildroot is in + charge of building the Linux kernel for your embedded device, it + makes sure that those two options are enabled. However, if you + build your Linux kernel outside of Buildroot, then it is your + responsibility to enable those two options (if you fail to do so, + your Buildroot system will not boot). + * The third solution is Dynamic using devtmpfs + mdev. This method + also relies on the devtmpfs virtual filesystem detailed above (so + the requirement to have CONFIG_DEVTMPFS and CONFIG_DEVTMPFS_MOUNT + enabled in the kernel configuration still apply), but adds the + mdev userspace utility on top of it. mdev is a program part of + BusyBox that the kernel will call every time a device is added or + removed. Thanks to the /etc/mdev.conf configuration file, mdev + can be configured to for example, set specific permissions or + ownership on a device file, call a script or application whenever + a device appears or disappear, etc. Basically, it allows + userspace to react on device addition and removal events. mdev + can for example be used to automatically load kernel modules when + devices appear on the system. mdev is also important if you have + devices that require a firmware, as it will be responsible for + pushing the firmware contents to the kernel. mdev is a + lightweight implementation (with fewer features) of udev. For + more details about mdev and the syntax of its configuration file, + see http://git.busybox.net/busybox/tree/docs/mdev.txt. + * The fourth solution is Dynamic using devtmpfs + eudev. This + method also relies on the devtmpfs virtual filesystem detailed + above, but adds the eudev userspace daemon on top of it. eudev is + a daemon that runs in the background, and gets called by the + kernel when a device gets added or removed from the system. It is + a more heavyweight solution than mdev, but provides higher + flexibility. eudev is a standalone version of udev, the original + userspace daemon used in most desktop Linux distributions, which + is now part of Systemd. For more details, see http:// + en.wikipedia.org/wiki/Udev. + +The Buildroot developers recommendation is to start with the Dynamic +using devtmpfs only solution, until you have the need for userspace +to be notified when devices are added/removed, or if firmwares are +needed, in which case Dynamic using devtmpfs + mdev is usually a good +solution. + +Note that if systemd is chosen as init system, /dev management will +be performed by the udev program provided by systemd. + +6.3. init system + +The init program is the first userspace program started by the kernel +(it carries the PID number 1), and is responsible for starting the +userspace services and programs (for example: web server, graphical +applications, other network servers, etc.). + +Buildroot allows to use three different types of init systems, which +can be chosen from System configuration, Init system: + + * The first solution is BusyBox. Amongst many programs, BusyBox has + an implementation of a basic init program, which is sufficient + for most embedded systems. Enabling the BR2_INIT_BUSYBOX will + ensure BusyBox will build and install its init program. This is + the default solution in Buildroot. The BusyBox init program will + read the /etc/inittab file at boot to know what to do. The syntax + of this file can be found in http://git.busybox.net/busybox/tree/ + examples/inittab (note that BusyBox inittab syntax is special: do + not use a random inittab documentation from the Internet to learn + about BusyBox inittab). The default inittab in Buildroot is + stored in system/skeleton/etc/inittab. Apart from mounting a few + important filesystems, the main job the default inittab does is + to start the /etc/init.d/rcS shell script, and start a getty + program (which provides a login prompt). + * The second solution is systemV. This solution uses the old + traditional sysvinit program, packed in Buildroot in package/ + sysvinit. This was the solution used in most desktop Linux + distributions, until they switched to more recent alternatives + such as Upstart or Systemd. sysvinit also works with an inittab + file (which has a slightly different syntax than the one from + BusyBox). The default inittab installed with this init solution + is located in package/sysvinit/inittab. + * The third solution is systemd. systemd is the new generation init + system for Linux. It does far more than traditional init + programs: aggressive parallelization capabilities, uses socket + and D-Bus activation for starting services, offers on-demand + starting of daemons, keeps track of processes using Linux control + groups, supports snapshotting and restoring of the system state, + etc. systemd will be useful on relatively complex embedded + systems, for example the ones requiring D-Bus and services + communicating between each other. It is worth noting that systemd + brings a fairly big number of large dependencies: dbus, udev and + more. For more details about systemd, see http:// + www.freedesktop.org/wiki/Software/systemd. + +The solution recommended by Buildroot developers is to use the +BusyBox init as it is sufficient for most embedded systems. systemd +can be used for more complex situations. + + +--------------------------------------------------------------------- + +^[3] This terminology differs from what is used by GNU configure, +where the host is the machine on which the application will run +(which is usually the same as target) + +Chapter 7. Configuration of other components + +Before attempting to modify any of the components below, make sure +you have already configured Buildroot itself, and have enabled the +corresponding package. + +BusyBox + + If you already have a BusyBox configuration file, you can + directly specify this file in the Buildroot configuration, using + BR2_PACKAGE_BUSYBOX_CONFIG. Otherwise, Buildroot will start from + a default BusyBox configuration file. + + To make subsequent changes to the configuration, use make + busybox-menuconfig to open the BusyBox configuration editor. + + It is also possible to specify a BusyBox configuration file + through an environment variable, although this is not + recommended. Refer to Section 8.6, “Environment variables” for + more details. + +uClibc + Configuration of uClibc is done in the same way as for BusyBox. + The configuration variable to specify an existing configuration + file is BR2_UCLIBC_CONFIG. The command to make subsequent changes + is make uclibc-menuconfig. +Linux kernel + + If you already have a kernel configuration file, you can directly + specify this file in the Buildroot configuration, using + BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG. + + If you do not yet have a kernel configuration file, you can + either start by specifying a defconfig in the Buildroot + configuration, using BR2_LINUX_KERNEL_USE_DEFCONFIG, or start by + creating an empty file and specifying it as custom configuration + file, using BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG. + + To make subsequent changes to the configuration, use make + linux-menuconfig to open the Linux configuration editor. + +Barebox + Configuration of Barebox is done in the same way as for the Linux + kernel. The corresponding configuration variables are + BR2_TARGET_BAREBOX_USE_CUSTOM_CONFIG and + BR2_TARGET_BAREBOX_USE_DEFCONFIG. To open the configuration + editor, use make barebox-menuconfig. +U-Boot + Configuration of U-Boot (version 2015.04 or newer) is done in the + same way as for the Linux kernel. The corresponding configuration + variables are BR2_TARGET_UBOOT_USE_CUSTOM_CONFIG and + BR2_TARGET_UBOOT_USE_DEFCONFIG. To open the configuration editor, + use make uboot-menuconfig. + +Chapter 8. General Buildroot usage + +8.1. make tips + +This is a collection of tips that help you make the most of +Buildroot. + +Display all commands executed by make:  + + $ make V=1 + +Display the list of boards with a defconfig:  + + $ make list-defconfigs + +Display all available targets:  + + $ make help + +Not all targets are always available, some settings in the .config +file may hide some targets: + + * busybox-menuconfig only works when busybox is enabled; + * linux-menuconfig and linux-savedefconfig only work when linux is + enabled; + * uclibc-menuconfig is only available when the uClibc C library is + selected in the internal toolchain backend; + * barebox-menuconfig and barebox-savedefconfig only work when the + barebox bootloader is enabled. + * uboot-menuconfig and uboot-savedefconfig only work when the + U-Boot bootloader is enabled. + +Cleaning: Explicit cleaning is required when any of the architecture +or toolchain configuration options are changed. + +To delete all build products (including build directories, host, +staging and target trees, the images and the toolchain): + + $ make clean + +Generating the manual: The present manual sources are located in the +docs/manual directory. To generate the manual: + + $ make manual-clean + $ make manual + +The manual outputs will be generated in output/docs/manual. + +Notes + + * A few tools are required to build the documentation (see: + Section 2.2, “Optional packages”). + +Resetting Buildroot for a new target: To delete all build products as +well as the configuration: + + $ make distclean + +Notes. If ccache is enabled, running make clean or distclean does not +empty the compiler cache used by Buildroot. To delete it, refer to +Section 8.14.3, “Using ccache in Buildroot”. + +Dumping the internal make variables: One can dump the variables known +to make, along with their values: + + $ make -s printvars VARS='VARIABLE1 VARIABLE2' + VARIABLE1=value_of_variable + VARIABLE2=value_of_variable + +It is possible to tweak the output using some variables: + + * VARS will limit the listing to variables which names match the + specified make-patterns - this must be set else nothing is + printed + * QUOTED_VARS, if set to YES, will single-quote the value + * RAW_VARS, if set to YES, will print the unexpanded value + +For example: + + $ make -s printvars VARS=BUSYBOX_%DEPENDENCIES + BUSYBOX_DEPENDENCIES=skeleton toolchain + BUSYBOX_FINAL_ALL_DEPENDENCIES=skeleton toolchain + BUSYBOX_FINAL_DEPENDENCIES=skeleton toolchain + BUSYBOX_FINAL_PATCH_DEPENDENCIES= + BUSYBOX_RDEPENDENCIES=ncurses util-linux + + $ make -s printvars VARS=BUSYBOX_%DEPENDENCIES QUOTED_VARS=YES + BUSYBOX_DEPENDENCIES='skeleton toolchain' + BUSYBOX_FINAL_ALL_DEPENDENCIES='skeleton toolchain' + BUSYBOX_FINAL_DEPENDENCIES='skeleton toolchain' + BUSYBOX_FINAL_PATCH_DEPENDENCIES='' + BUSYBOX_RDEPENDENCIES='ncurses util-linux' + + $ make -s printvars VARS=BUSYBOX_%DEPENDENCIES RAW_VARS=YES + BUSYBOX_DEPENDENCIES=skeleton toolchain + BUSYBOX_FINAL_ALL_DEPENDENCIES=$(sort $(BUSYBOX_FINAL_DEPENDENCIES) $(BUSYBOX_FINAL_PATCH_DEPENDENCIES)) + BUSYBOX_FINAL_DEPENDENCIES=$(sort $(BUSYBOX_DEPENDENCIES)) + BUSYBOX_FINAL_PATCH_DEPENDENCIES=$(sort $(BUSYBOX_PATCH_DEPENDENCIES)) + BUSYBOX_RDEPENDENCIES=ncurses util-linux + +The output of quoted variables can be reused in shell scripts, for +example: + + $ eval $(make -s printvars VARS=BUSYBOX_DEPENDENCIES QUOTED_VARS=YES) + $ echo $BUSYBOX_DEPENDENCIES + skeleton toolchain + +8.2. Understanding when a full rebuild is necessary + +Buildroot does not attempt to detect what parts of the system should +be rebuilt when the system configuration is changed through make +menuconfig, make xconfig or one of the other configuration tools. In +some cases, Buildroot should rebuild the entire system, in some +cases, only a specific subset of packages. But detecting this in a +completely reliable manner is very difficult, and therefore the +Buildroot developers have decided to simply not attempt to do this. + +Instead, it is the responsibility of the user to know when a full +rebuild is necessary. As a hint, here are a few rules of thumb that +can help you understand how to work with Buildroot: + + * When the target architecture configuration is changed, a complete + rebuild is needed. Changing the architecture variant, the binary + format or the floating point strategy for example has an impact + on the entire system. + * When the toolchain configuration is changed, a complete rebuild + generally is needed. Changing the toolchain configuration often + involves changing the compiler version, the type of C library or + its configuration, or some other fundamental configuration item, + and these changes have an impact on the entire system. + * When an additional package is added to the configuration, a full + rebuild is not necessarily needed. Buildroot will detect that + this package has never been built, and will build it. However, if + this package is a library that can optionally be used by packages + that have already been built, Buildroot will not automatically + rebuild those. Either you know which packages should be rebuilt, + and you can rebuild them manually, or you should do a full + rebuild. For example, let’s suppose you have built a system with + the ctorrent package, but without openssl. Your system works, but + you realize you would like to have SSL support in ctorrent, so + you enable the openssl package in Buildroot configuration and + restart the build. Buildroot will detect that openssl should be + built and will be build it, but it will not detect that ctorrent + should be rebuilt to benefit from openssl to add OpenSSL support. + You will either have to do a full rebuild, or rebuild ctorrent + itself. + * When a package is removed from the configuration, Buildroot does + not do anything special. It does not remove the files installed + by this package from the target root filesystem or from the + toolchain sysroot. A full rebuild is needed to get rid of this + package. However, generally you don’t necessarily need this + package to be removed right now: you can wait for the next lunch + break to restart the build from scratch. + * When the sub-options of a package are changed, the package is not + automatically rebuilt. After making such changes, rebuilding only + this package is often sufficient, unless enabling the package + sub-option adds some features to the package that are useful for + another package which has already been built. Again, Buildroot + does not track when a package should be rebuilt: once a package + has been built, it is never rebuilt unless explicitly told to do + so. + * When a change to the root filesystem skeleton is made, a full + rebuild is needed. However, when changes to the root filesystem + overlay, a post-build script or a post-image script are made, + there is no need for a full rebuild: a simple make invocation + will take the changes into account. + * When a package listed in FOO_DEPENDENCIES is rebuilt or removed, + the package foo is not automatically rebuilt. For example, if a + package bar is listed in FOO_DEPENDENCIES with FOO_DEPENDENCIES = + bar and the configuration of the bar package is changed, the + configuration change would not result in a rebuild of package foo + automatically. In this scenario, you may need to either rebuild + any packages in your build which reference bar in their + DEPENDENCIES, or perform a full rebuild to ensure any bar + dependent packages are up to date. + +Generally speaking, when you’re facing a build error and you’re +unsure of the potential consequences of the configuration changes +you’ve made, do a full rebuild. If you get the same build error, then +you are sure that the error is not related to partial rebuilds of +packages, and if this error occurs with packages from the official +Buildroot, do not hesitate to report the problem! As your experience +with Buildroot progresses, you will progressively learn when a full +rebuild is really necessary, and you will save more and more time. + +For reference, a full rebuild is achieved by running: + +$ make clean all + +8.3. Understanding how to rebuild packages + +One of the most common questions asked by Buildroot users is how to +rebuild a given package or how to remove a package without rebuilding +everything from scratch. + +Removing a package is unsupported by Buildroot without rebuilding +from scratch. This is because Buildroot doesn’t keep track of which +package installs what files in the output/staging and output/target +directories, or which package would be compiled differently depending +on the availability of another package. + +The easiest way to rebuild a single package from scratch is to remove +its build directory in output/build. Buildroot will then re-extract, +re-configure, re-compile and re-install this package from scratch. +You can ask buildroot to do this with the make -dirclean +command. + +On the other hand, if you only want to restart the build process of a +package from its compilation step, you can run make +-rebuild. It will restart the compilation and installation of the +package, but not from scratch: it basically re-executes make and make +install inside the package, so it will only rebuild files that +changed. + +If you want to restart the build process of a package from its +configuration step, you can run make -reconfigure. It will +restart the configuration, compilation and installation of the +package. + +While -rebuild implies -reinstall and +-reconfigure implies -rebuild, these targets as well as + only act on the said package, and do not trigger +re-creating the root filesystem image. If re-creating the root +filesystem in necessary, one should in addition run make or make all. + +Internally, Buildroot creates so-called stamp files to keep track of +which build steps have been completed for each package. They are +stored in the package build directory, output/build/- +/ and are named .stamp_. The commands detailed +above simply manipulate these stamp files to force Buildroot to +restart a specific set of steps of a package build process. + +Further details about package special make targets are explained in +Section 8.14.5, “Package-specific make targets”. + +8.4. Offline builds + +If you intend to do an offline build and just want to download all +sources that you previously selected in the configurator (menuconfig, +nconfig, xconfig or gconfig), then issue: + + $ make source + +You can now disconnect or copy the content of your dl directory to +the build-host. + +8.5. Building out-of-tree + +As default, everything built by Buildroot is stored in the directory +output in the Buildroot tree. + +Buildroot also supports building out of tree with a syntax similar to +the Linux kernel. To use it, add O= to the make command +line: + + $ make O=/tmp/build + +Or: + + $ cd /tmp/build; make O=$PWD -C path/to/buildroot + +All the output files will be located under /tmp/build. If the O path +does not exist, Buildroot will create it. + +Note: the O path can be either an absolute or a relative path, but if +it’s passed as a relative path, it is important to note that it is +interpreted relative to the main Buildroot source directory, not the +current working directory. + +When using out-of-tree builds, the Buildroot .config and temporary +files are also stored in the output directory. This means that you +can safely run multiple builds in parallel using the same source tree +as long as they use unique output directories. + +For ease of use, Buildroot generates a Makefile wrapper in the output +directory - so after the first run, you no longer need to pass O=<…> +and -C <…>, simply run (in the output directory): + + $ make + +8.6. Environment variables + +Buildroot also honors some environment variables, when they are +passed to make or set in the environment: + + * HOSTCXX, the host C++ compiler to use + * HOSTCC, the host C compiler to use + * UCLIBC_CONFIG_FILE=, path to the uClibc + configuration file, used to compile uClibc, if an internal + toolchain is being built. Note that the uClibc configuration file + can also be set from the configuration interface, so through the + Buildroot .config file; this is the recommended way of setting + it. + * BUSYBOX_CONFIG_FILE=, path to the BusyBox + configuration file. Note that the BusyBox configuration file can + also be set from the configuration interface, so through the + Buildroot .config file; this is the recommended way of setting + it. + * BR2_CCACHE_DIR to override the directory where Buildroot stores + the cached files when using ccache. + * BR2_DL_DIR to override the directory in which Buildroot stores/ + retrieves downloaded files. Note that the Buildroot download + directory can also be set from the configuration interface, so + through the Buildroot .config file. See Section 8.14.4, “Location + of downloaded packages” for more details on how you can set the + download directory. + * BR2_GRAPH_ALT, if set and non-empty, to use an alternate + color-scheme in build-time graphs + * BR2_GRAPH_OUT to set the filetype of generated graphs, either pdf + (the default), or png. + * BR2_GRAPH_DEPS_OPTS to pass extra options to the dependency + graph; see Section 8.9, “Graphing the dependencies between + packages” for the accepted options + * BR2_GRAPH_DOT_OPTS is passed verbatim as options to the dot + utility to draw the dependency graph. + * BR2_GRAPH_SIZE_OPTS to pass extra options to the size graph; see + Section 8.11, “Graphing the filesystem size contribution of + packages” for the acepted options + +An example that uses config files located in the toplevel directory +and in your $HOME: + + $ make UCLIBC_CONFIG_FILE=uClibc.config BUSYBOX_CONFIG_FILE=$HOME/bb.config + +If you want to use a compiler other than the default gcc or g++ for +building helper-binaries on your host, then do + + $ make HOSTCXX=g++-4.3-HEAD HOSTCC=gcc-4.3-HEAD + +8.7. Dealing efficiently with filesystem images + +Filesystem images can get pretty big, depending on the filesystem you +choose, the number of packages, whether you provisioned free space… +Yet, some locations in the filesystems images may just be empty (e.g. +a long run of zeroes); such a file is called a sparse file. + +Most tools can handle sparse files efficiently, and will only store +or write those parts of a sparse file that are not empty. + +For example: + + * tar accepts the -S option to tell it to only store non-zero + blocks of sparse files: + + + tar cf archive.tar -S [files…] will efficiently store sparse + files in a tarball + + tar xf archive.tar -S will efficiently store sparse files + extracted from a tarball + * cp accepts the --sparse=WHEN option (WHEN is one of auto, never + or always): + + + cp --sparse=always source.file dest.file will make dest.file + a sparse file if source.file has long runs of zeroes + +Other tools may have similar options. Please consult their respective +man pages. + +You can use sparse files if you need to store the filesystem images +(e.g. to transfer from one machine to another), or if you need to +send them (e.g. to the Q&A team). + +Note however that flashing a filesystem image to a device while using +the sparse mode of dd may result in a broken filesystem (e.g. the +block bitmap of an ext2 filesystem may be corrupted; or, if you have +sparse files in your filesystem, those parts may not be all-zeroes +when read back). You should only use sparse files when handling files +on the build machine, not when transferring them to an actual device +that will be used on the target. + +8.8. Details about packages + +Buildroot can produce a JSON blurb that describes the set of enabled +packages in the current configuration, together with their +dependencies, licenses and other metadata. This JSON blurb is +produced by using the show-info make target: + +make show-info + +Buildroot can also produce details about packages as HTML and JSON +output using the pkg-stats make target. Amongst other things, these +details include whether known CVEs (security vulnerabilities) affect +the packages in your current configuration. It also shows if there is +a newer upstream version for those packages. + +make pkg-stats + +8.9. Graphing the dependencies between packages + +One of Buildroot’s jobs is to know the dependencies between packages, +and make sure they are built in the right order. These dependencies +can sometimes be quite complicated, and for a given system, it is +often not easy to understand why such or such package was brought +into the build by Buildroot. + +In order to help understanding the dependencies, and therefore better +understand what is the role of the different components in your +embedded Linux system, Buildroot is capable of generating dependency +graphs. + +To generate a dependency graph of the full system you have compiled, +simply run: + +make graph-depends + +You will find the generated graph in output/graphs/graph-depends.pdf. + +If your system is quite large, the dependency graph may be too +complex and difficult to read. It is therefore possible to generate +the dependency graph just for a given package: + +make -graph-depends + +You will find the generated graph in output/graph/ +-graph-depends.pdf. + +Note that the dependency graphs are generated using the dot tool from +the Graphviz project, which you must have installed on your system to +use this feature. In most distributions, it is available as the +graphviz package. + +By default, the dependency graphs are generated in the PDF format. +However, by passing the BR2_GRAPH_OUT environment variable, you can +switch to other output formats, such as PNG, PostScript or SVG. All +formats supported by the -T option of the dot tool are supported. + +BR2_GRAPH_OUT=svg make graph-depends + +The graph-depends behaviour can be controlled by setting options in +the BR2_GRAPH_DEPS_OPTS environment variable. The accepted options +are: + + * --depth N, -d N, to limit the dependency depth to N levels. The + default, 0, means no limit. + * --stop-on PKG, -s PKG, to stop the graph on the package PKG. PKG + can be an actual package name, a glob, the keyword virtual (to + stop on virtual packages), or the keyword host (to stop on host + packages). The package is still present on the graph, but its + dependencies are not. + * --exclude PKG, -x PKG, like --stop-on, but also omits PKG from + the graph. + * --transitive, --no-transitive, to draw (or not) the transitive + dependencies. The default is to not draw transitive dependencies. + * --colors R,T,H, the comma-separated list of colors to draw the + root package (R), the target packages (T) and the host packages + (H). Defaults to: lightblue,grey,gainsboro + +BR2_GRAPH_DEPS_OPTS='-d 3 --no-transitive --colors=red,green,blue' make graph-depends + +8.10. Graphing the build duration + +When the build of a system takes a long time, it is sometimes useful +to be able to understand which packages are the longest to build, to +see if anything can be done to speed up the build. In order to help +such build time analysis, Buildroot collects the build time of each +step of each package, and allows to generate graphs from this data. + +To generate the build time graph after a build, run: + +make graph-build + +This will generate a set of files in output/graphs : + + * build.hist-build.pdf, a histogram of the build time for each + package, ordered in the build order. + * build.hist-duration.pdf, a histogram of the build time for each + package, ordered by duration (longest first) + * build.hist-name.pdf, a histogram of the build time for each + package, order by package name. + * build.pie-packages.pdf, a pie chart of the build time per package + * build.pie-steps.pdf, a pie chart of the global time spent in each + step of the packages build process. + +This graph-build target requires the Python Matplotlib and Numpy +libraries to be installed (python-matplotlib and python-numpy on most +distributions), and also the argparse module if you’re using a Python +version older than 2.7 (python-argparse on most distributions). + +By default, the output format for the graph is PDF, but a different +format can be selected using the BR2_GRAPH_OUT environment variable. +The only other format supported is PNG: + +BR2_GRAPH_OUT=png make graph-build + +8.11. Graphing the filesystem size contribution of packages + +When your target system grows, it is sometimes useful to understand +how much each Buildroot package is contributing to the overall root +filesystem size. To help with such an analysis, Buildroot collects +data about files installed by each package and using this data, +generates a graph and CSV files detailing the size contribution of +the different packages. + +To generate these data after a build, run: + +make graph-size + +This will generate: + + * output/graphs/graph-size.pdf, a pie chart of the contribution of + each package to the overall root filesystem size + * output/graphs/package-size-stats.csv, a CSV file giving the size + contribution of each package to the overall root filesystem size + * output/graphs/file-size-stats.csv, a CSV file giving the size + contribution of each installed file to the package it belongs, + and to the overall filesystem size. + +This graph-size target requires the Python Matplotlib library to be +installed (python-matplotlib on most distributions), and also the +argparse module if you’re using a Python version older than 2.7 +(python-argparse on most distributions). + +Just like for the duration graph, a BR2_GRAPH_OUT environment +variable is supported to adjust the output file format. See +Section 8.9, “Graphing the dependencies between packages” for details +about this environment variable. + +Additionally, one may set the environment variable +BR2_GRAPH_SIZE_OPTS to further control the generated graph. Accepted +options are: + + * --size-limit X, -l X, will group all packages which individual + contribution is below X percent, to a single entry labelled + Others in the graph. By default, X=0.01, which means packages + each contributing less than 1% are grouped under Others. Accepted + values are in the range [0.0..1.0]. + * --iec, --binary, --si, --decimal, to use IEC (binary, powers of + 1024) or SI (decimal, powers of 1000; the default) prefixes. + * --biggest-first, to sort packages in decreasing size order, + rather than in increasing size order. + +Note. The collected filesystem size data is only meaningful after a +complete clean rebuild. Be sure to run make clean all before using +make graph-size. + +To compare the root filesystem size of two different Buildroot +compilations, for example after adjusting the configuration or when +switching to another Buildroot release, use the size-stats-compare +script. It takes two file-size-stats.csv files (produced by make +graph-size) as input. Refer to the help text of this script for more +details: + +utils/size-stats-compare -h + +8.12. Top-level parallel build + +Note. This section deals with a very experimental feature, which is +known to break even in some non-unusual situations. Use at your own +risk. + +Buildroot has always been capable of using parallel build on a per +package basis: each package is built by Buildroot using make -jN (or +the equivalent invocation for non-make-based build systems). The +level of parallelism is by default number of CPUs + 1, but it can be +adjusted using the BR2_JLEVEL configuration option. + +Until 2020.02, Buildroot was however building packages in a serial +fashion: each package was built one after the other, without +parallelization of the build between packages. As of 2020.02, +Buildroot has experimental support for top-level parallel build, +which allows some signicant build time savings by building packages +that have no dependency relationship in parallel. This feature is +however marked as experimental and is known not to work in some +cases. + +In order to use top-level parallel build, one must: + + 1. Enable the option BR2_PER_PACKAGE_DIRECTORIES in the Buildroot + configuration + 2. Use make -jN when starting the Buildroot build + +Internally, the BR2_PER_PACKAGE_DIRECTORIES will enable a mechanism +called per-package directories, which will have the following +effects: + + * Instead of a global target directory and a global host directory + common to all packages, per-package target and host directories + will be used, in $(O)/per-package//target/ and $(O)/ + per-package//host/ respectively. Those folders will be + populated from the corresponding folders of the package + dependencies at the beginning of build. The compiler and + all other tools will therefore only be able to see and access + files installed by dependencies explicitly listed by . + * At the end of the build, the global target and host directories + will be populated, located in $(O)/target and $(O)/host + respectively. This means that during the build, those folders + will be empty and it’s only at the very end of the build that + they will be populated. + +8.13. Integration with Eclipse + +While a part of the embedded Linux developers like classical text +editors like Vim or Emacs, and command-line based interfaces, a +number of other embedded Linux developers like richer graphical +interfaces to do their development work. Eclipse being one of the +most popular Integrated Development Environment, Buildroot integrates +with Eclipse in order to ease the development work of Eclipse users. + +Our integration with Eclipse simplifies the compilation, remote +execution and remote debugging of applications and libraries that are +built on top of a Buildroot system. It does not integrate the +Buildroot configuration and build processes themselves with Eclipse. +Therefore, the typical usage model of our Eclipse integration would +be: + + * Configure your Buildroot system with make menuconfig, make + xconfig or any other configuration interface provided with + Buildroot. + * Build your Buildroot system by running make. + * Start Eclipse to develop, execute and debug your own custom + applications and libraries, that will rely on the libraries built + and installed by Buildroot. + +The Buildroot Eclipse integration installation process and usage is +described in detail at https://github.com/mbats/ +eclipse-buildroot-bundle/wiki. + +8.14. Advanced usage + +8.14.1. Using the generated toolchain outside Buildroot + +You may want to compile, for your target, your own programs or other +software that are not packaged in Buildroot. In order to do this you +can use the toolchain that was generated by Buildroot. + +The toolchain generated by Buildroot is located by default in output/ +host/. The simplest way to use it is to add output/host/bin/ to your +PATH environment variable and then to use ARCH-linux-gcc, +ARCH-linux-objdump, ARCH-linux-ld, etc. + +Alternatively, Buildroot can also export the toolchain and the +development files of all selected packages, as an SDK, by running the +command make sdk. This generates a tarball of the content of the host +directory output/host/, named _sdk-buildroot.tar.gz +(which can be overriden by setting the environment variable +BR2_SDK_PREFIX) and located in the output directory output/images/. + +This tarball can then be distributed to application developers, when +they want to develop their applications that are not (yet) packaged +as a Buildroot package. + +Upon extracting the SDK tarball, the user must run the script +relocate-sdk.sh (located at the top directory of the SDK), to make +sure all paths are updated with the new location. + +Alternatively, if you just want to prepare the SDK without generating +the tarball (e.g. because you will just be moving the host directory, +or will be generating the tarball on your own), Buildroot also allows +you to just prepare the SDK with make prepare-sdk without actually +generating a tarball. + +For your convenience, by selecting the option +BR2_PACKAGE_HOST_ENVIRONMENT_SETUP, you can get a environment-setup +script installed in output/host/ and therefore in your SDK. This +script can be sourced with . your/sdk/path/environment-setup to +export a number of environment variables that will help cross-compile +your projects using the Buildroot SDK: the PATH will contain the SDK +binaries, standard autotools variables will be defined with the +appropriate values, and CONFIGURE_FLAGS will contain basic ./ +configure options to cross-compile autotools projects. It also +provides some useful commands. Note however that once this script is +sourced, the environment is setup only for cross-compilation, and no +longer for native compilation. + +8.14.2. Using gdb in Buildroot + +Buildroot allows to do cross-debugging, where the debugger runs on +the build machine and communicates with gdbserver on the target to +control the execution of the program. + +To achieve this: + + * If you are using an internal toolchain (built by Buildroot), you + must enable BR2_PACKAGE_HOST_GDB, BR2_PACKAGE_GDB and + BR2_PACKAGE_GDB_SERVER. This ensures that both the cross gdb and + gdbserver get built, and that gdbserver gets installed to your + target. + * If you are using an external toolchain, you should enable + BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY, which will copy the + gdbserver included with the external toolchain to the target. If + your external toolchain does not have a cross gdb or gdbserver, + it is also possible to let Buildroot build them, by enabling the + same options as for the internal toolchain backend. + +Now, to start debugging a program called foo, you should run on the +target: + +gdbserver :2345 foo + +This will cause gdbserver to listen on TCP port 2345 for a connection +from the cross gdb. + +Then, on the host, you should start the cross gdb using the following +command line: + +/output/host/bin/-gdb -x /output/staging/usr/share/buildroot/gdbinit foo + +Of course, foo must be available in the current directory, built with +debugging symbols. Typically you start this command from the +directory where foo is built (and not from output/target/ as the +binaries in that directory are stripped). + +The /output/staging/usr/share/buildroot/gdbinit file will +tell the cross gdb where to find the libraries of the target. + +Finally, to connect to the target from the cross gdb: + +(gdb) target remote :2345 + +8.14.3. Using ccache in Buildroot + +ccache [http://ccache.samba.org] is a compiler cache. It stores the +object files resulting from each compilation process, and is able to +skip future compilation of the same source file (with same compiler +and same arguments) by using the pre-existing object files. When +doing almost identical builds from scratch a number of times, it can +nicely speed up the build process. + +ccache support is integrated in Buildroot. You just have to enable +Enable compiler cache in Build options. This will automatically build +ccache and use it for every host and target compilation. + +The cache is located in $HOME/.buildroot-ccache. It is stored outside +of Buildroot output directory so that it can be shared by separate +Buildroot builds. If you want to get rid of the cache, simply remove +this directory. + +You can get statistics on the cache (its size, number of hits, +misses, etc.) by running make ccache-stats. + +The make target ccache-options and the CCACHE_OPTIONS variable +provide more generic access to the ccache. For example + +# set cache limit size +make CCACHE_OPTIONS="--max-size=5G" ccache-options + +# zero statistics counters +make CCACHE_OPTIONS="--zero-stats" ccache-options + +ccache makes a hash of the source files and of the compiler options. +If a compiler option is different, the cached object file will not be +used. Many compiler options, however, contain an absolute path to the +staging directory. Because of this, building in a different output +directory would lead to many cache misses. + +To avoid this issue, buildroot has the Use relative paths option +(BR2_CCACHE_USE_BASEDIR). This will rewrite all absolute paths that +point inside the output directory into relative paths. Thus, changing +the output directory no longer leads to cache misses. + +A disadvantage of the relative paths is that they also end up to be +relative paths in the object file. Therefore, for example, the +debugger will no longer find the file, unless you cd to the output +directory first. + +See the ccache manual’s section on "Compiling in different +directories" [https://ccache.samba.org/manual.html# +_compiling_in_different_directories] for more details about this +rewriting of absolute paths. + +8.14.4. Location of downloaded packages + +The various tarballs that are downloaded by Buildroot are all stored +in BR2_DL_DIR, which by default is the dl directory. If you want to +keep a complete version of Buildroot which is known to be working +with the associated tarballs, you can make a copy of this directory. +This will allow you to regenerate the toolchain and the target +filesystem with exactly the same versions. + +If you maintain several Buildroot trees, it might be better to have a +shared download location. This can be achieved by pointing the +BR2_DL_DIR environment variable to a directory. If this is set, then +the value of BR2_DL_DIR in the Buildroot configuration is overridden. +The following line should be added to <~/.bashrc>. + + export BR2_DL_DIR= + +The download location can also be set in the .config file, with the +BR2_DL_DIR option. Unlike most options in the .config file, this +value is overridden by the BR2_DL_DIR environment variable. + +8.14.5. Package-specific make targets + +Running make builds and installs that particular package +and its dependencies. + +For packages relying on the Buildroot infrastructure, there are +numerous special make targets that can be called independently like +this: + +make - + +The package build targets are (in the order they are executed): + ++------------------------------------------------------------+ +|command/target |Description | +|---------------+--------------------------------------------| +| source |Fetch the source (download the tarball, | +| |clone the source repository, etc) | +|---------------+--------------------------------------------| +| depends |Build and install all dependencies required | +| |to build the package | +|---------------+--------------------------------------------| +| extract |Put the source in the package build | +| |directory (extract the tarball, copy the | +| |source, etc) | +|---------------+--------------------------------------------| +| patch |Apply the patches, if any | +|---------------+--------------------------------------------| +| configure |Run the configure commands, if any | +|---------------+--------------------------------------------| +| build |Run the compilation commands | +|---------------+--------------------------------------------| +|install-staging|target package: Run the installation of the | +| |package in the staging directory, if | +| |necessary | +|---------------+--------------------------------------------| +|install-target |target package: Run the installation of the | +| |package in the target directory, if | +| |necessary | +|---------------+--------------------------------------------| +| install |target package: Run the 2 previous | +| |installation commands | +| | | +| |host package: Run the installation of the | +| |package in the host directory | ++------------------------------------------------------------+ + +Additionally, there are some other useful make targets: + ++------------------------------------------------------------+ +| command/target |Description | +|-----------------------+------------------------------------| +| show-depends |Displays the first-order | +| |dependencies required to build the | +| |package | +|-----------------------+------------------------------------| +|show-recursive-depends |Recursively displays the | +| |dependencies required to build the | +| |package | +|-----------------------+------------------------------------| +| show-rdepends |Displays the first-order reverse | +| |dependencies of the package (i.e | +| |packages that directly depend on it)| +|-----------------------+------------------------------------| +|show-recursive-rdepends|Recursively displays the reverse | +| |dependencies of the package (i.e the| +| |packages that depend on it, directly| +| |or indirectly) | +|-----------------------+------------------------------------| +| graph-depends |Generate a dependency graph of the | +| |package, in the context of the | +| |current Buildroot configuration. See| +| |this section for more details about | +| |dependency graphs. | +|-----------------------+------------------------------------| +| graph-rdepends |Generate a graph of this package | +| |reverse dependencies (i.e the | +| |packages that depend on it, directly| +| |or indirectly) | +|-----------------------+------------------------------------| +| dirclean |Remove the whole package build | +| |directory | +|-----------------------+------------------------------------| +| reinstall |Re-run the install commands | +|-----------------------+------------------------------------| +| rebuild |Re-run the compilation commands - | +| |this only makes sense when using the| +| |OVERRIDE_SRCDIR feature or when you | +| |modified a file directly in the | +| |build directory | +|-----------------------+------------------------------------| +| reconfigure |Re-run the configure commands, then | +| |rebuild - this only makes sense when| +| |using the OVERRIDE_SRCDIR feature or| +| |when you modified a file directly in| +| |the build directory | ++------------------------------------------------------------+ + +8.14.6. Using Buildroot during development + +The normal operation of Buildroot is to download a tarball, extract +it, configure, compile and install the software component found +inside this tarball. The source code is extracted in output/build/ +-, which is a temporary directory: whenever make +clean is used, this directory is entirely removed, and re-created at +the next make invocation. Even when a Git or Subversion repository is +used as the input for the package source code, Buildroot creates a +tarball out of it, and then behaves as it normally does with +tarballs. + +This behavior is well-suited when Buildroot is used mainly as an +integration tool, to build and integrate all the components of an +embedded Linux system. However, if one uses Buildroot during the +development of certain components of the system, this behavior is not +very convenient: one would instead like to make a small change to the +source code of one package, and be able to quickly rebuild the system +with Buildroot. + +Making changes directly in output/build/- is not an +appropriate solution, because this directory is removed on make +clean. + +Therefore, Buildroot provides a specific mechanism for this use case: +the _OVERRIDE_SRCDIR mechanism. Buildroot reads an override +file, which allows the user to tell Buildroot the location of the +source for certain packages. + +The default location of the override file is $(CONFIG_DIR)/local.mk, +as defined by the BR2_PACKAGE_OVERRIDE_FILE configuration option. $ +(CONFIG_DIR) is the location of the Buildroot .config file, so +local.mk by default lives side-by-side with the .config file, which +means: + + * In the top-level Buildroot source directory for in-tree builds + (i.e., when O= is not used) + * In the out-of-tree directory for out-of-tree builds (i.e., when O + = is used) + +If a different location than these defaults is required, it can be +specified through the BR2_PACKAGE_OVERRIDE_FILE configuration option. + +In this override file, Buildroot expects to find lines of the form: + +_OVERRIDE_SRCDIR = /path/to/pkg1/sources +_OVERRIDE_SRCDIR = /path/to/pkg2/sources + +For example: + +LINUX_OVERRIDE_SRCDIR = /home/bob/linux/ +BUSYBOX_OVERRIDE_SRCDIR = /home/bob/busybox/ + +When Buildroot finds that for a given package, an +_OVERRIDE_SRCDIR has been defined, it will no longer attempt to +download, extract and patch the package. Instead, it will directly +use the source code available in the specified directory and make +clean will not touch this directory. This allows to point Buildroot +to your own directories, that can be managed by Git, Subversion, or +any other version control system. To achieve this, Buildroot will use +rsync to copy the source code of the component from the specified +_OVERRIDE_SRCDIR to output/build/-custom/. + +This mechanism is best used in conjunction with the make +-rebuild and make -reconfigure targets. A make -rebuild all +sequence will rsync the source code from _OVERRIDE_SRCDIR to +output/build/-custom (thanks to rsync, only the modified +files are copied), and restart the build process of just this +package. + +In the example of the linux package above, the developer can then +make a source code change in /home/bob/linux and then run: + +make linux-rebuild all + +and in a matter of seconds gets the updated Linux kernel image in +output/images. Similarly, a change can be made to the BusyBox source +code in /home/bob/busybox, and after: + +make busybox-rebuild all + +the root filesystem image in output/images contains the updated +BusyBox. + +Source trees for big projects often contain hundreds or thousands of +files which are not needed for building, but will slow down the +process of copying the sources with rsync. Optionally, it is possible +define _OVERRIDE_SRCDIR_RSYNC_EXCLUSIONS to skip syncing certain +files from the source tree. For example, when working on the +webkitgtk package, the following will exclude the tests and in-tree +builds from a local WebKit source tree: + +WEBKITGTK_OVERRIDE_SRCDIR = /home/bob/WebKit +WEBKITGTK_OVERRIDE_SRCDIR_RSYNC_EXCLUSIONS = \ + --exclude JSTests --exclude ManualTests --exclude PerformanceTests \ + --exclude WebDriverTests --exclude WebKitBuild --exclude WebKitLibraries \ + --exclude WebKit.xcworkspace --exclude Websites --exclude Examples + +By default, Buildroot skips syncing of VCS artifacts (e.g., the .git +and .svn directories). Some packages prefer to have these VCS +directories available during build, for example for automatically +determining a precise commit reference for version information. To +undo this built-in filtering at a cost of a slower speed, add these +directories back: + +LINUX_OVERRIDE_SRCDIR_RSYNC_EXCLUSIONS = --include .git + +Chapter 9. Project-specific customization + +Typical actions you may need to perform for a given project are: + + * configuring Buildroot (including build options and toolchain, + bootloader, kernel, package and filesystem image type selection) + * configuring other components, like the Linux kernel and BusyBox + * customizing the generated target filesystem + + + adding or overwriting files on the target filesystem (using + BR2_ROOTFS_OVERLAY) + + modifying or deleting files on the target filesystem (using + BR2_ROOTFS_POST_BUILD_SCRIPT) + + running arbitrary commands prior to generating the filesystem + image (using BR2_ROOTFS_POST_BUILD_SCRIPT) + + setting file permissions and ownership (using + BR2_ROOTFS_DEVICE_TABLE) + + adding custom devices nodes (using + BR2_ROOTFS_STATIC_DEVICE_TABLE) + * adding custom user accounts (using BR2_ROOTFS_USERS_TABLES) + * running arbitrary commands after generating the filesystem image + (using BR2_ROOTFS_POST_IMAGE_SCRIPT) + * adding project-specific patches to some packages (using + BR2_GLOBAL_PATCH_DIR) + * adding project-specific packages + +An important note regarding such project-specific customizations: +please carefully consider which changes are indeed project-specific +and which changes are also useful to developers outside your project. +The Buildroot community highly recommends and encourages the +upstreaming of improvements, packages and board support to the +official Buildroot project. Of course, it is sometimes not possible +or desirable to upstream because the changes are highly specific or +proprietary. + +This chapter describes how to make such project-specific +customizations in Buildroot and how to store them in a way that you +can build the same image in a reproducible way, even after running +make clean. By following the recommended strategy, you can even use +the same Buildroot tree to build multiple distinct projects! + +9.1. Recommended directory structure + +When customizing Buildroot for your project, you will be creating one +or more project-specific files that need to be stored somewhere. +While most of these files could be placed in any location as their +path is to be specified in the Buildroot configuration, the Buildroot +developers recommend a specific directory structure which is +described in this section. + +Orthogonal to this directory structure, you can choose where you +place this structure itself: either inside the Buildroot tree, or +outside of it using a br2-external tree. Both options are valid, the +choice is up to you. + ++-- board/ +| +-- / +| +-- / +| +-- linux.config +| +-- busybox.config +| +-- +| +-- post_build.sh +| +-- post_image.sh +| +-- rootfs_overlay/ +| | +-- etc/ +| | +-- +| +-- patches/ +| +-- foo/ +| | +-- +| +-- libbar/ +| +-- +| ++-- configs/ +| +-- _defconfig +| ++-- package/ +| +-- / +| +-- Config.in (if not using a br2-external tree) +| +-- .mk (if not using a br2-external tree) +| +-- package1/ +| | +-- Config.in +| | +-- package1.mk +| +-- package2/ +| +-- Config.in +| +-- package2.mk +| ++-- Config.in (if using a br2-external tree) ++-- external.mk (if using a br2-external tree) ++-- external.desc (if using a br2-external tree) + +Details on the files shown above are given further in this chapter. + +Note: if you choose to place this structure outside of the Buildroot +tree but in a br2-external tree, the and possibly + components may be superfluous and can be left out. + +9.1.1. Implementing layered customizations + +It is quite common for a user to have several related projects that +partly need the same customizations. Instead of duplicating these +customizations for each project, it is recommended to use a layered +customization approach, as explained in this section. + +Almost all of the customization methods available in Buildroot, like +post-build scripts and root filesystem overlays, accept a +space-separated list of items. The specified items are always treated +in order, from left to right. By creating more than one such item, +one for the common customizations and another one for the really +project-specific customizations, you can avoid unnecessary +duplication. Each layer is typically embodied by a separate directory +inside board//. Depending on your projects, you could even +introduce more than two layers. + +An example directory structure for where a user has two customization +layers common and fooboard is: + ++-- board/ + +-- / + +-- common/ + | +-- post_build.sh + | +-- rootfs_overlay/ + | | +-- ... + | +-- patches/ + | +-- ... + | + +-- fooboard/ + +-- linux.config + +-- busybox.config + +-- + +-- post_build.sh + +-- rootfs_overlay/ + | +-- ... + +-- patches/ + +-- ... + +For example, if the user has the BR2_GLOBAL_PATCH_DIR configuration +option set as: + +BR2_GLOBAL_PATCH_DIR="board//common/patches board//fooboard/patches" + +then first the patches from the common layer would be applied, +followed by the patches from the fooboard layer. + +9.2. Keeping customizations outside of Buildroot + +As already briefly mentioned in Section 9.1, “Recommended directory +structure”, you can place project-specific customizations in two +locations: + + * directly within the Buildroot tree, typically maintaining them + using branches in a version control system so that upgrading to a + newer Buildroot release is easy. + * outside of the Buildroot tree, using the br2-external mechanism. + This mechanism allows to keep package recipes, board support and + configuration files outside of the Buildroot tree, while still + having them nicely integrated in the build logic. We call this + location a br2-external tree. This section explains how to use + the br2-external mechanism and what to provide in a br2-external + tree. + +One can tell Buildroot to use one or more br2-external trees by +setting the BR2_EXTERNAL make variable set to the path(s) of the +br2-external tree(s) to use. It can be passed to any Buildroot make +invocation. It is automatically saved in the hidden .br2-external.mk +file in the output directory. Thanks to this, there is no need to +pass BR2_EXTERNAL at every make invocation. It can however be changed +at any time by passing a new value, and can be removed by passing an +empty value. + +Note. The path to a br2-external tree can be either absolute or +relative. If it is passed as a relative path, it is important to note +that it is interpreted relative to the main Buildroot source +directory, not to the Buildroot output directory. + +Note: If using an br2-external tree from before Buildroot 2016.11, +you need to convert it before you can use it with Buildroot 2016.11 +onward. See Section 27.1, “Migrating to 2016.11” for help on doing +so. + +Some examples: + +buildroot/ $ make BR2_EXTERNAL=/path/to/foo menuconfig + +From now on, definitions from the /path/to/foo br2-external tree will +be used: + +buildroot/ $ make +buildroot/ $ make legal-info + +We can switch to another br2-external tree at any time: + +buildroot/ $ make BR2_EXTERNAL=/where/we/have/bar xconfig + +We can also use multiple br2-external trees: + +buildroot/ $ make BR2_EXTERNAL=/path/to/foo:/where/we/have/bar menuconfig + +Or disable the usage of any br2-external tree: + +buildroot/ $ make BR2_EXTERNAL= xconfig + +9.2.1. Layout of a br2-external tree + +A br2-external tree must contain at least those three files, +described in the following chapters: + + * external.desc + * external.mk + * Config.in + +Apart from those mandatory files, there may be additional and +optional content that may be present in a br2-external tree, like the +configs/ or provides/ directories. They are described in the +following chapters as well. + +A complete example br2-external tree layout is also described later. + +9.2.1.1. The external.desc file + +That file describes the br2-external tree: the name and description +for that br2-external tree. + +The format for this file is line based, with each line starting by a +keyword, followed by a colon and one or more spaces, followed by the +value assigned to that keyword. There are two keywords currently +recognised: + + * name, mandatory, defines the name for that br2-external tree. + That name must only use ASCII characters in the set [A-Za-z0-9_]; + any other character is forbidden. Buildroot sets the variable + BR2_EXTERNAL_$(NAME)_PATH to the absolute path of the + br2-external tree, so that you can use it to refer to your + br2-external tree. This variable is available both in Kconfig, so + you can use it to source your Kconfig files (see below) and in + the Makefile, so that you can use it to include other Makefiles + (see below) or refer to other files (like data files) from your + br2-external tree. + + Note: Since it is possible to use multiple br2-external trees at + once, this name is used by Buildroot to generate variables for + each of those trees. That name is used to identify your + br2-external tree, so try to come up with a name that really + describes your br2-external tree, in order for it to be + relatively unique, so that it does not clash with another name + from another br2-external tree, especially if you are planning on + somehow sharing your br2-external tree with third parties or + using br2-external trees from third parties. + + * desc, optional, provides a short description for that + br2-external tree. It shall fit on a single line, is mostly + free-form (see below), and is used when displaying information + about a br2-external tree (e.g. above the list of defconfig + files, or as the prompt in the menuconfig); as such, it should + relatively brief (40 chars is probably a good upper limit). The + description is available in the BR2_EXTERNAL_$(NAME)_DESC + variable. + +Examples of names and the corresponding BR2_EXTERNAL_$(NAME)_PATH +variables: + + * FOO → BR2_EXTERNAL_FOO_PATH + * BAR_42 → BR2_EXTERNAL_BAR_42_PATH + +In the following examples, it is assumed the name to be set to +BAR_42. + +Note: Both BR2_EXTERNAL_$(NAME)_PATH and BR2_EXTERNAL_$(NAME)_DESC +are available in the Kconfig files and the Makefiles. They are also +exported in the environment so are available in post-build, +post-image and in-fakeroot scripts. + +9.2.1.2. The Config.in and external.mk files + +Those files (which may each be empty) can be used to define package +recipes (i.e. foo/Config.in and foo/foo.mk like for packages bundled +in Buildroot itself) or other custom configuration options or make +logic. + +Buildroot automatically includes the Config.in from each br2-external +tree to make it appear in the top-level configuration menu, and +includes the external.mk from each br2-external tree with the rest of +the makefile logic. + +The main usage of this is to store package recipes. The recommended +way to do this is to write a Config.in file that looks like: + +source "$BR2_EXTERNAL_BAR_42_PATH/package/package1/Config.in" +source "$BR2_EXTERNAL_BAR_42_PATH/package/package2/Config.in" + +Then, have an external.mk file that looks like: + +include $(sort $(wildcard $(BR2_EXTERNAL_BAR_42_PATH)/package/*/*.mk)) + +And then in $(BR2_EXTERNAL_BAR_42_PATH)/package/package1 and $ +(BR2_EXTERNAL_BAR_42_PATH)/package/package2 create normal Buildroot +package recipes, as explained in Chapter 18, Adding new packages to +Buildroot. If you prefer, you can also group the packages in +subdirectories called and adapt the above paths +accordingly. + +You can also define custom configuration options in Config.in and +custom make logic in external.mk. + +9.2.1.3. The configs/ directory + +One can store Buildroot defconfigs in the configs subdirectory of the +br2-external tree. Buildroot will automatically show them in the +output of make list-defconfigs and allow them to be loaded with the +normal make _defconfig command. They will be visible in the +make list-defconfigs output, below an External configs label that +contains the name of the br2-external tree they are defined in. + +Note: If a defconfig file is present in more than one br2-external +tree, then the one from the last br2-external tree is used. It is +thus possible to override a defconfig bundled in Buildroot or another +br2-external tree. + +9.2.1.4. The provides/ directory + +For some packages, Buildroot provides a choice between two (or more) +implementations of API-compatible such packages. For example, there +is a choice to choose either libjpeg ot jpeg-turbo; there is one +between openssl or libressl; there is one to select one of the known, +pre-configured toolchains… + +It is possible for a br2-external to extend those choices, by +providing a set of files that define those alternatives: + + * provides/toolchains.in defines the pre-configured toolchains, + which will then be listed in the toolchain selection; + * provides/jpeg.in defines the alternative libjpeg implementations; + * provides/openssl.in defines the alternative openssl + implementations; + * provides/skeleton.in defines the alternative skeleton + implementations; + * provides/init.in defines the alternative init system + implementations, this can be used to select a default skeleton + for your init. + +9.2.1.5. Free-form content + +One can store all the board-specific configuration files there, such +as the kernel configuration, the root filesystem overlay, or any +other configuration file for which Buildroot allows to set the +location (by using the BR2_EXTERNAL_$(NAME)_PATH variable). For +example, you could set the paths to a global patch directory, to a +rootfs overlay and to the kernel configuration file as follows (e.g. +by running make menuconfig and filling in these options): + +BR2_GLOBAL_PATCH_DIR=$(BR2_EXTERNAL_BAR_42_PATH)/patches/ +BR2_ROOTFS_OVERLAY=$(BR2_EXTERNAL_BAR_42_PATH)/board//overlay/ +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE=$(BR2_EXTERNAL_BAR_42_PATH)/board//kernel.config + +9.2.1.6. Additional Linux kernel extensions + +Additional Linux kernel extensions (see Section 18.21.2, +“linux-kernel-extensions”) can be added by storing them in the linux/ +directory at the root of a br2-external tree. + +9.2.1.7. Example layout + +Here is an example layout using all features of br2-external (the +sample content is shown for the file above it, when it is relevant to +explain the br2-external tree; this is all entirely made up just for +the sake of illustration, of course): + +/path/to/br2-ext-tree/ + |- external.desc + | |name: BAR_42 + | |desc: Example br2-external tree + | `---- + | + |- Config.in + | |source "$BR2_EXTERNAL_BAR_42_PATH/toolchain/toolchain-external-mine/Config.in.options" + | |source "$BR2_EXTERNAL_BAR_42_PATH/package/pkg-1/Config.in" + | |source "$BR2_EXTERNAL_BAR_42_PATH/package/pkg-2/Config.in" + | |source "$BR2_EXTERNAL_BAR_42_PATH/package/my-jpeg/Config.in" + | | + | |config BAR_42_FLASH_ADDR + | | hex "my-board flash address" + | | default 0x10AD + | `---- + | + |- external.mk + | |include $(sort $(wildcard $(BR2_EXTERNAL_BAR_42_PATH)/package/*/*.mk)) + | |include $(sort $(wildcard $(BR2_EXTERNAL_BAR_42_PATH)/toolchain/*/*.mk)) + | | + | |flash-my-board: + | | $(BR2_EXTERNAL_BAR_42_PATH)/board/my-board/flash-image \ + | | --image $(BINARIES_DIR)/image.bin \ + | | --address $(BAR_42_FLASH_ADDR) + | `---- + | + |- package/pkg-1/Config.in + | |config BR2_PACKAGE_PKG_1 + | | bool "pkg-1" + | | help + | | Some help about pkg-1 + | `---- + |- package/pkg-1/pkg-1.hash + |- package/pkg-1/pkg-1.mk + | |PKG_1_VERSION = 1.2.3 + | |PKG_1_SITE = /some/where/to/get/pkg-1 + | |PKG_1_LICENSE = blabla + | | + | |define PKG_1_INSTALL_INIT_SYSV + | | $(INSTALL) -D -m 0755 $(PKG_1_PKGDIR)/S99my-daemon \ + | | $(TARGET_DIR)/etc/init.d/S99my-daemon + | |endef + | | + | |$(eval $(autotools-package)) + | `---- + |- package/pkg-1/S99my-daemon + | + |- package/pkg-2/Config.in + |- package/pkg-2/pkg-2.hash + |- package/pkg-2/pkg-2.mk + | + |- provides/jpeg.in + | |config BR2_PACKAGE_MY_JPEG + | | bool "my-jpeg" + | `---- + |- package/my-jpeg/Config.in + | |config BR2_PACKAGE_PROVIDES_JPEG + | | default "my-jpeg" if BR2_PACKAGE_MY_JPEG + | `---- + |- package/my-jpeg/my-jpeg.mk + | |# This is a normal package .mk file + | |MY_JPEG_VERSION = 1.2.3 + | |MY_JPEG_SITE = https://example.net/some/place + | |MY_JPEG_PROVIDES = jpeg + | |$(eval $(autotools-package)) + | `---- + | + |- provides/init.in + | |config BR2_INIT_MINE + | | bool "my custom init" + | | select BR2_PACKAGE_MY_INIT + | | select BR2_PACKAGE_SKELETON_INIT_MINE if BR2_ROOTFS_SKELETON_DEFAULT + | `---- + | + |- provides/skeleton.in + | |config BR2_ROOTFS_SKELETON_MINE + | | bool "my custom skeleton" + | | select BR2_PACKAGE_SKELETON_MINE + | `---- + |- package/skeleton-mine/Config.in + | |config BR2_PACKAGE_SKELETON_MINE + | | bool + | | select BR2_PACKAGE_HAS_SKELETON + | | + | |config BR2_PACKAGE_PROVIDES_SKELETON + | | default "skeleton-mine" if BR2_PACKAGE_SKELETON_MINE + | `---- + |- package/skeleton-mine/skeleton-mine.mk + | |SKELETON_MINE_ADD_TOOLCHAIN_DEPENDENCY = NO + | |SKELETON_MINE_ADD_SKELETON_DEPENDENCY = NO + | |SKELETON_MINE_PROVIDES = skeleton + | |SKELETON_MINE_INSTALL_STAGING = YES + | |$(eval $(generic-package)) + | `---- + | + |- provides/toolchains.in + | |config BR2_TOOLCHAIN_EXTERNAL_MINE + | | bool "my custom toolchain" + | | depends on BR2_some_arch + | | select BR2_INSTALL_LIBSTDCPP + | `---- + |- toolchain/toolchain-external-mine/Config.in.options + | |if BR2_TOOLCHAIN_EXTERNAL_MINE + | |config BR2_TOOLCHAIN_EXTERNAL_PREFIX + | | default "arch-mine-linux-gnu" + | |config BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL + | | default "toolchain-external-mine" + | |endif + | `---- + |- toolchain/toolchain-external-mine/toolchain-external-mine.mk + | |TOOLCHAIN_EXTERNAL_MINE_SITE = https://example.net/some/place + | |TOOLCHAIN_EXTERNAL_MINE_SOURCE = my-toolchain.tar.gz + | |$(eval $(toolchain-external-package)) + | `---- + | + |- linux/Config.ext.in + | |config BR2_LINUX_KERNEL_EXT_EXAMPLE_DRIVER + | | bool "example-external-driver" + | | help + | | Example external driver + | |--- + |- linux/linux-ext-example-driver.mk + | + |- configs/my-board_defconfig + | |BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_BAR_42_PATH)/patches/" + | |BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_BAR_42_PATH)/board/my-board/overlay/" + | |BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_BAR_42_PATH)/board/my-board/post-image.sh" + | |BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_BAR_42_PATH)/board/my-board/kernel.config" + | `---- + | + |- patches/linux/0001-some-change.patch + |- patches/linux/0002-some-other-change.patch + |- patches/busybox/0001-fix-something.patch + | + |- board/my-board/kernel.config + |- board/my-board/overlay/var/www/index.html + |- board/my-board/overlay/var/www/my.css + |- board/my-board/flash-image + `- board/my-board/post-image.sh + |#!/bin/sh + |generate-my-binary-image \ + | --root ${BINARIES_DIR}/rootfs.tar \ + | --kernel ${BINARIES_DIR}/zImage \ + | --dtb ${BINARIES_DIR}/my-board.dtb \ + | --output ${BINARIES_DIR}/image.bin + `---- + +The br2-external tree will then be visible in the menuconfig (with +the layout expanded): + +External options ---> + *** Example br2-external tree (in /path/to/br2-ext-tree/) + [ ] pkg-1 + [ ] pkg-2 + (0x10AD) my-board flash address + +If you are using more than one br2-external tree, it would look like +(with the layout expanded and the second one with name FOO_27 but no +desc: field in external.desc): + +External options ---> + Example br2-external tree ---> + *** Example br2-external tree (in /path/to/br2-ext-tree) + [ ] pkg-1 + [ ] pkg-2 + (0x10AD) my-board flash address + FOO_27 ---> + *** FOO_27 (in /path/to/another-br2-ext) + [ ] foo + [ ] bar + +Additionally, the jpeg provider will be visible in the jpeg choice: + +Target packages ---> + Libraries ---> + Graphics ---> + [*] jpeg support + jpeg variant () ---> + ( ) jpeg + ( ) jpeg-turbo + *** jpeg from: Example br2-external tree *** + (X) my-jpeg + *** jpeg from: FOO_27 *** + ( ) another-jpeg + +And similarly for the toolchains: + +Toolchain ---> + Toolchain () ---> + ( ) Custom toolchain + *** Toolchains from: Example br2-external tree *** + (X) my custom toolchain + +Note. The toolchain options in toolchain/toolchain-external-mine/ +Config.in.options will not appear in the Toolchain menu. They must be +explicitly included from within the br2-external’s top-level +Config.in and will thus appear in the External options menu. + +9.3. Storing the Buildroot configuration + +The Buildroot configuration can be stored using the command make +savedefconfig. + +This strips the Buildroot configuration down by removing +configuration options that are at their default value. The result is +stored in a file called defconfig. If you want to save it in another +place, change the BR2_DEFCONFIG option in the Buildroot configuration +itself, or call make with make savedefconfig BR2_DEFCONFIG= +. + +The recommended place to store this defconfig is configs/ +_defconfig. If you follow this recommendation, the configuration will +be listed in make help and can be set again by running make +_defconfig. + +Alternatively, you can copy the file to any other place and rebuild +with make defconfig BR2_DEFCONFIG=. + +9.4. Storing the configuration of other components + +The configuration files for BusyBox, the Linux kernel, Barebox, +U-Boot and uClibc should be stored as well if changed. For each of +these components, a Buildroot configuration option exists to point to +an input configuration file, e.g. +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE. To store their configuration, +set these configuration options to a path where you want to save the +configuration files, and then use the helper targets described below +to actually store the configuration. + +As explained in Section 9.1, “Recommended directory structure”, the +recommended path to store these configuration files is board/ +//foo.config. + +Make sure that you create a configuration file before changing the +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE etc. options. Otherwise, +Buildroot will try to access this config file, which doesn’t exist +yet, and will fail. You can create the configuration file by running +make linux-menuconfig etc. + +Buildroot provides a few helper targets to make the saving of +configuration files easier. + + * make linux-update-defconfig saves the linux configuration to the + path specified by BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE. It + simplifies the config file by removing default values. However, + this only works with kernels starting from 2.6.33. For earlier + kernels, use make linux-update-config. + * make busybox-update-config saves the busybox configuration to the + path specified by BR2_PACKAGE_BUSYBOX_CONFIG. + * make uclibc-update-config saves the uClibc configuration to the + path specified by BR2_UCLIBC_CONFIG. + * make barebox-update-defconfig saves the barebox configuration to + the path specified by BR2_TARGET_BAREBOX_CUSTOM_CONFIG_FILE. + * make uboot-update-defconfig saves the U-Boot configuration to the + path specified by BR2_TARGET_UBOOT_CUSTOM_CONFIG_FILE. + * For at91bootstrap3, no helper exists so you have to copy the + config file manually to + BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_CONFIG_FILE. + +9.5. Customizing the generated target filesystem + +Besides changing the configuration through make *config, there are a +few other ways to customize the resulting target filesystem. + +The two recommended methods, which can co-exist, are root filesystem +overlay(s) and post build script(s). + +Root filesystem overlays (BR2_ROOTFS_OVERLAY) + + A filesystem overlay is a tree of files that is copied directly + over the target filesystem after it has been built. To enable + this feature, set config option BR2_ROOTFS_OVERLAY (in the System + configuration menu) to the root of the overlay. You can even + specify multiple overlays, space-separated. If you specify a + relative path, it will be relative to the root of the Buildroot + tree. Hidden directories of version control systems, like .git, + .svn, .hg, etc., files called .empty and files ending in ~ are + excluded from the copy. + + When BR2_ROOTFS_MERGED_USR is enabled, then the overlay must not + contain the /bin, /lib or /sbin directories, as Buildroot will + create them as symbolic links to the relevant folders in /usr. In + such a situation, should the overlay have any programs or + libraries, they should be placed in /usr/bin, /usr/sbin and /usr/ + lib. + + As shown in Section 9.1, “Recommended directory structure”, the + recommended path for this overlay is board/// + rootfs-overlay. + +Post-build scripts (BR2_ROOTFS_POST_BUILD_SCRIPT) + + Post-build scripts are shell scripts called after Buildroot + builds all the selected software, but before the rootfs images + are assembled. To enable this feature, specify a space-separated + list of post-build scripts in config option + BR2_ROOTFS_POST_BUILD_SCRIPT (in the System configuration menu). + If you specify a relative path, it will be relative to the root + of the Buildroot tree. + + Using post-build scripts, you can remove or modify any file in + your target filesystem. You should, however, use this feature + with care. Whenever you find that a certain package generates + wrong or unneeded files, you should fix that package rather than + work around it with some post-build cleanup scripts. + + As shown in Section 9.1, “Recommended directory structure”, the + recommended path for this script is board/// + post_build.sh. + + The post-build scripts are run with the main Buildroot tree as + current working directory. The path to the target filesystem is + passed as the first argument to each script. If the config option + BR2_ROOTFS_POST_SCRIPT_ARGS is not empty, these arguments will be + passed to the script too. All the scripts will be passed the + exact same set of arguments, it is not possible to pass different + sets of arguments to each script. + + In addition, you may also use these environment variables: + + + BR2_CONFIG: the path to the Buildroot .config file + + CONFIG_DIR: the directory containing the .config file, and + therefore the top-level Buildroot Makefile to use (which is + correct for both in-tree and out-of-tree builds) + + HOST_DIR, STAGING_DIR, TARGET_DIR: see Section 18.5.2, + “generic-package reference” + + BUILD_DIR: the directory where packages are extracted and + built + + BINARIES_DIR: the place where all binary files (aka images) + are stored + + BASE_DIR: the base output directory + +Below three more methods of customizing the target filesystem are +described, but they are not recommended. + +Direct modification of the target filesystem + + For temporary modifications, you can modify the target filesystem + directly and rebuild the image. The target filesystem is + available under output/target/. After making your changes, run + make to rebuild the target filesystem image. + + This method allows you to do anything to the target filesystem, + but if you need to clean your Buildroot tree using make clean, + these changes will be lost. Such cleaning is necessary in several + cases, refer to Section 8.2, “Understanding when a full rebuild + is necessary” for details. This solution is therefore only useful + for quick tests: changes do not survive the make clean command. + Once you have validated your changes, you should make sure that + they will persist after a make clean, using a root filesystem + overlay or a post-build script. + +Custom target skeleton (BR2_ROOTFS_SKELETON_CUSTOM) + + The root filesystem image is created from a target skeleton, on + top of which all packages install their files. The skeleton is + copied to the target directory output/target before any package + is built and installed. The default target skeleton provides the + standard Unix filesystem layout and some basic init scripts and + configuration files. + + If the default skeleton (available under system/skeleton) does + not match your needs, you would typically use a root filesystem + overlay or post-build script to adapt it. However, if the default + skeleton is entirely different than what you need, using a custom + skeleton may be more suitable. + + To enable this feature, enable config option + BR2_ROOTFS_SKELETON_CUSTOM and set + BR2_ROOTFS_SKELETON_CUSTOM_PATH to the path of your custom + skeleton. Both options are available in the System configuration + menu. If you specify a relative path, it will be relative to the + root of the Buildroot tree. + + Custom skeletons don’t need to contain the /bin, /lib or /sbin + directories, since they are created automatically during the + build. When BR2_ROOTFS_MERGED_USR is enabled, then the custom + skeleton must not contain the /bin, /lib or /sbin directories, as + Buildroot will create them as symbolic links to the relevant + folders in /usr. In such a situation, should the skeleton have + any programs or libraries, they should be placed in /usr/bin, / + usr/sbin and /usr/lib. + + This method is not recommended because it duplicates the entire + skeleton, which prevents taking advantage of the fixes or + improvements brought to the default skeleton in later Buildroot + releases. + +Post-fakeroot scripts (BR2_ROOTFS_POST_FAKEROOT_SCRIPT) + + When aggregating the final images, some parts of the process + requires root rights: creating device nodes in /dev, setting + permissions or ownership to files and directories… To avoid + requiring actual root rights, Buildroot uses fakeroot to simulate + root rights. This is not a complete substitute for actually being + root, but is enough for what Buildroot needs. + + Post-fakeroot scripts are shell scripts that are called at the + end of the fakeroot phase, right before the filesystem image + generator is called. As such, they are called in the fakeroot + context. + + Post-fakeroot scripts can be useful in case you need to tweak the + filesystem to do modifications that are usually only available to + the root user. + + Note: It is recommended to use the existing mechanisms to set + file permissions or create entries in /dev (see Section 9.5.1, + “Setting file permissions and ownership and adding custom devices + nodes”) or to create users (see Section 9.6, “Adding custom user + accounts”) + + Note: The difference between post-build scripts (above) and + fakeroot scripts, is that post-build scripts are not called in + the fakeroot context. + + Note: Using fakeroot is not an absolute substitute for actually + being root. fakeroot only ever fakes the file access rights and + types (regular, block-or-char device…) and uid/gid; these are + emulated in-memory. + +9.5.1. Setting file permissions and ownership and adding custom +devices nodes + +Sometimes it is needed to set specific permissions or ownership on +files or device nodes. For example, certain files may need to be +owned by root. Since the post-build scripts are not run as root, you +cannot do such changes from there unless you use an explicit fakeroot +from the post-build script. + +Instead, Buildroot provides support for so-called permission tables. +To use this feature, set config option BR2_ROOTFS_DEVICE_TABLE to a +space-separated list of permission tables, regular text files +following the makedev syntax. + +If you are using a static device table (i.e. not using devtmpfs, +mdev, or (e)udev) then you can add device nodes using the same +syntax, in so-called device tables. To use this feature, set config +option BR2_ROOTFS_STATIC_DEVICE_TABLE to a space-separated list of +device tables. + +As shown in Section 9.1, “Recommended directory structure”, the +recommended location for such files is board///. + +It should be noted that if the specific permissions or device nodes +are related to a specific application, you should set variables +FOO_PERMISSIONS and FOO_DEVICES in the package’s .mk file instead +(see Section 18.5.2, “generic-package reference”). + +9.6. Adding custom user accounts + +Sometimes it is needed to add specific users in the target system. To +cover this requirement, Buildroot provides support for so-called +users tables. To use this feature, set config option +BR2_ROOTFS_USERS_TABLES to a space-separated list of users tables, +regular text files following the makeusers syntax. + +As shown in Section 9.1, “Recommended directory structure”, the +recommended location for such files is board///. + +It should be noted that if the custom users are related to a specific +application, you should set variable FOO_USERS in the package’s .mk +file instead (see Section 18.5.2, “generic-package reference”). + +9.7. Customization after the images have been created + +While post-build scripts (Section 9.5, “Customizing the generated +target filesystem”) are run before building the filesystem image, +kernel and bootloader, post-image scripts can be used to perform some +specific actions after all images have been created. + +Post-image scripts can for example be used to automatically extract +your root filesystem tarball in a location exported by your NFS +server, or to create a special firmware image that bundles your root +filesystem and kernel image, or any other custom action required for +your project. + +To enable this feature, specify a space-separated list of post-image +scripts in config option BR2_ROOTFS_POST_IMAGE_SCRIPT (in the System +configuration menu). If you specify a relative path, it will be +relative to the root of the Buildroot tree. + +Just like post-build scripts, post-image scripts are run with the +main Buildroot tree as current working directory. The path to the +images output directory is passed as the first argument to each +script. If the config option BR2_ROOTFS_POST_SCRIPT_ARGS is not +empty, these arguments will be passed to the script too. All the +scripts will be passed the exact same set of arguments, it is not +possible to pass different sets of arguments to each script. + +Again just like for the post-build scripts, the scripts have access +to the environment variables BR2_CONFIG, HOST_DIR, STAGING_DIR, +TARGET_DIR, BUILD_DIR, BINARIES_DIR, CONFIG_DIR and BASE_DIR. + +The post-image scripts will be executed as the user that executes +Buildroot, which should normally not be the root user. Therefore, any +action requiring root permissions in one of these scripts will +require special handling (usage of fakeroot or sudo), which is left +to the script developer. + +9.8. Adding project-specific patches + +It is sometimes useful to apply extra patches to packages - on top of +those provided in Buildroot. This might be used to support custom +features in a project, for example, or when working on a new +architecture. + +The BR2_GLOBAL_PATCH_DIR configuration option can be used to specify +a space separated list of one or more directories containing package +patches. + +For a specific version of a specific package +, patches are applied from BR2_GLOBAL_PATCH_DIR as +follows: + + 1. For every directory - - that exists in + BR2_GLOBAL_PATCH_DIR, a will be determined as + follows: + + + /// if the + directory exists. + + Otherwise, / if the directory + exists. + 2. Patches will then be applied from a as + follows: + + + If a series file exists in the package directory, then + patches are applied according to the series file; + + Otherwise, patch files matching *.patch are applied in + alphabetical order. So, to ensure they are applied in the + right order, it is highly recommended to name the patch files + like this: -.patch, where + refers to the apply order. + +For information about how patches are applied for a package, see +Section 19.2, “How patches are applied” + +The BR2_GLOBAL_PATCH_DIR option is the preferred method for +specifying a custom patch directory for packages. It can be used to +specify a patch directory for any package in buildroot. It should +also be used in place of the custom patch directory options that are +available for packages such as U-Boot and Barebox. By doing this, it +will allow a user to manage their patches from one top-level +directory. + +The exception to BR2_GLOBAL_PATCH_DIR being the preferred method for +specifying custom patches is BR2_LINUX_KERNEL_PATCH. +BR2_LINUX_KERNEL_PATCH should be used to specify kernel patches that +are available at a URL. Note: BR2_LINUX_KERNEL_PATCH specifies kernel +patches that are applied after patches available in +BR2_GLOBAL_PATCH_DIR, as it is done from a post-patch hook of the +Linux package. + +9.9. Adding project-specific packages + +In general, any new package should be added directly in the package +directory and submitted to the Buildroot upstream project. How to add +packages to Buildroot in general is explained in full detail in +Chapter 18, Adding new packages to Buildroot and will not be repeated +here. However, your project may need some proprietary packages that +cannot be upstreamed. This section will explain how you can keep such +project-specific packages in a project-specific directory. + +As shown in Section 9.1, “Recommended directory structure”, the +recommended location for project-specific packages is package/ +/. If you are using the br2-external tree feature (see +Section 9.2, “Keeping customizations outside of Buildroot”) the +recommended location is to put them in a sub-directory named package/ +in your br2-external tree. + +However, Buildroot will not be aware of the packages in this +location, unless we perform some additional steps. As explained in +Chapter 18, Adding new packages to Buildroot, a package in Buildroot +basically consists of two files: a .mk file (describing how to build +the package) and a Config.in file (describing the configuration +options for this package). + +Buildroot will automatically include the .mk files in first-level +subdirectories of the package directory (using the pattern package/*/ +*.mk). If we want Buildroot to include .mk files from deeper +subdirectories (like package//package1/) then we simply have +to add a .mk file in a first-level subdirectory that includes these +additional .mk files. Therefore, create a file package// +.mk with following contents (assuming you have only one +extra directory level below package//): + +include $(sort $(wildcard package//*/*.mk)) + +For the Config.in files, create a file package//Config.in +that includes the Config.in files of all your packages. An exhaustive +list has to be provided since wildcards are not supported in the +source command of kconfig. For example: + +source "package//package1/Config.in" +source "package//package2/Config.in" + +Include this new file package//Config.in from package/ +Config.in, preferably in a company-specific menu to make merges with +future Buildroot versions easier. + +If using a br2-external tree, refer to Section 9.2, “Keeping +customizations outside of Buildroot” for how to fill in those files. + +9.10. Quick guide to storing your project-specific customizations + +Earlier in this chapter, the different methods for making +project-specific customizations have been described. This section +will now summarize all this by providing step-by-step instructions to +storing your project-specific customizations. Clearly, the steps that +are not relevant to your project can be skipped. + + 1. make menuconfig to configure toolchain, packages and kernel. + 2. make linux-menuconfig to update the kernel config, similar for + other configuration like busybox, uclibc, … + 3. mkdir -p board// + 4. Set the following options to board/// + .config (as far as they are relevant): + + + BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE + + BR2_PACKAGE_BUSYBOX_CONFIG + + BR2_UCLIBC_CONFIG + + BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_CONFIG_FILE + + BR2_TARGET_BAREBOX_CUSTOM_CONFIG_FILE + + BR2_TARGET_UBOOT_CUSTOM_CONFIG_FILE + 5. Write the configuration files: + + + make linux-update-defconfig + + make busybox-update-config + + make uclibc-update-config + + cp /build/at91bootstrap3-*/.config board/ + //at91bootstrap3.config + + make barebox-update-defconfig + + make uboot-update-defconfig + 6. Create board///rootfs-overlay/ and fill + it with additional files you need on your rootfs, e.g. board/ + //rootfs-overlay/etc/inittab. Set + BR2_ROOTFS_OVERLAY to board/// + rootfs-overlay. + 7. Create a post-build script board/// + post_build.sh. Set BR2_ROOTFS_POST_BUILD_SCRIPT to board/ + //post_build.sh + 8. If additional setuid permissions have to be set or device nodes + have to be created, create board/// + device_table.txt and add that path to BR2_ROOTFS_DEVICE_TABLE. + 9. If additional user accounts have to be created, create board/ + //users_table.txt and add that path to + BR2_ROOTFS_USERS_TABLES. +10. To add custom patches to certain packages, set + BR2_GLOBAL_PATCH_DIR to board///patches/ + and add your patches for each package in a subdirectory named + after the package. Each patch should be called - + -.patch. +11. Specifically for the Linux kernel, there also exists the option + BR2_LINUX_KERNEL_PATCH with as main advantage that it can also + download patches from a URL. If you do not need this, + BR2_GLOBAL_PATCH_DIR is preferred. U-Boot, Barebox, at91bootstrap + and at91bootstrap3 also have separate options, but these do not + provide any advantage over BR2_GLOBAL_PATCH_DIR and will likely + be removed in the future. +12. If you need to add project-specific packages, create package/ + / and place your packages in that directory. Create + an overall .mk file that includes the .mk files of + all your packages. Create an overall Config.in file that sources + the Config.in files of all your packages. Include this Config.in + file from Buildroot’s package/Config.in file. +13. make savedefconfig to save the buildroot configuration. +14. cp defconfig configs/_defconfig + +Chapter 10. Using SELinux in Buildroot + +SELinux [https://selinuxproject.org] is a Linux kernel security +module enforcing access control policies. In addition to the +traditional file permissions and access control lists, SELinux allows +to write rules for users or processes to access specific functions of +resources (files, sockets…). + +SELinux has three modes of operation: + + * Disabled: the policy is not applied + * Permissive: the policy is applied, and non-authorized actions are + simply logged. This mode is often used for troubleshooting + SELinux issues. + * Enforcing: the policy is applied, and non-authorized actions are + denied + +In Buildroot the mode of operation is controlled by the +BR2_PACKAGE_REFPOLICY_POLICY_STATE_* configuration options. The Linux +kernel also has various configuration options that affect how SELinux +is enabled (see security/selinux/Kconfig in the Linux kernel +sources). + +By default in Buildroot the SELinux policy is provided by the +upstream refpolicy [https://github.com/SELinuxProject/refpolicy] +project, enabled with BR2_PACKAGE_REFPOLICY. + +10.1. Enabling SELinux support + +To have proper support for SELinux in a Buildroot generated system, +the following configuration options must be enabled: + + * BR2_PACKAGE_LIBSELINUX + * BR2_PACKAGE_REFPOLICY + +In addition, your filesystem image format must support extended +attributes. + +10.2. SELinux policy tweaking + +The SELinux refpolicy contains modules that can be enabled or +disabled when being built. Each module provide a number of SELinux +rules. In Buildroot the non-base modules are disabled by default and +several ways to enable such modules are provided: + + * Packages can enable a list of SELinux modules within the + refpolicy using the _SELINUX_MODULES variable. + * Packages can provide additional SELinux modules by putting them + (.fc, .if and .te files) in package//selinux/. + * Extra SELinux modules can be added in directories pointed by the + BR2_REFPOLICY_EXTRA_MODULES_DIRS configuration option. + * Additional modules in the refpolicy can be enabled if listed in + the BR2_REFPOLICY_EXTRA_MODULES_DEPENDENCIES configuration + option. + +Buildroot also allows to completely override the refpolicy. This +allows to provide a full custom policy designed specifically for a +given system. When going this way, all of the above mechanisms are +disabled: no extra SElinux module is added to the policy, and all the +available modules within the custom policy are enabled and built into +the final binary policy. The custom policy must be a fork of the +official refpolicy [https://github.com/SELinuxProject/refpolicy]. + +In order to fully override the refpolicy the following configuration +variables have to be set: + + * BR2_PACKAGE_REFPOLICY_CUSTOM_GIT + * BR2_PACKAGE_REFPOLICY_CUSTOM_REPO_URL + * BR2_PACKAGE_REFPOLICY_CUSTOM_REPO_VERSION + +Chapter 11. Frequently Asked Questions & Troubleshooting + +11.1. The boot hangs after Starting network… + +If the boot process seems to hang after the following messages +(messages not necessarily exactly similar, depending on the list of +packages selected): + +Freeing init memory: 3972K +Initializing random number generator... done. +Starting network... +Starting dropbear sshd: generating rsa key... generating dsa key... OK + +then it means that your system is running, but didn’t start a shell +on the serial console. In order to have the system start a shell on +your serial console, you have to go into the Buildroot configuration, +in System configuration, modify Run a getty (login prompt) after boot +and set the appropriate port and baud rate in the getty options +submenu. This will automatically tune the /etc/inittab file of the +generated system so that a shell starts on the correct serial port. + +11.2. Why is there no compiler on the target? + +It has been decided that support for the native compiler on the +target would be stopped from the Buildroot-2012.11 release because: + + * this feature was neither maintained nor tested, and often broken; + * this feature was only available for Buildroot toolchains; + * Buildroot mostly targets small or very small target hardware with + limited resource onboard (CPU, ram, mass-storage), for which + compiling on the target does not make much sense; + * Buildroot aims at easing the cross-compilation, making native + compilation on the target unnecessary. + +If you need a compiler on your target anyway, then Buildroot is not +suitable for your purpose. In such case, you need a real distribution +and you should opt for something like: + + * openembedded [http://www.openembedded.org] + * yocto [https://www.yoctoproject.org] + * emdebian [http://www.emdebian.org] + * Fedora [https://fedoraproject.org/wiki/Architectures] + * openSUSE ARM [http://en.opensuse.org/Portal:ARM] + * Arch Linux ARM [http://archlinuxarm.org] + * … + +11.3. Why are there no development files on the target? + +Since there is no compiler available on the target (see Section 11.2, +“Why is there no compiler on the target?”), it does not make sense to +waste space with headers or static libraries. + +Therefore, those files are always removed from the target since the +Buildroot-2012.11 release. + +11.4. Why is there no documentation on the target? + +Because Buildroot mostly targets small or very small target hardware +with limited resource onboard (CPU, ram, mass-storage), it does not +make sense to waste space with the documentation data. + +If you need documentation data on your target anyway, then Buildroot +is not suitable for your purpose, and you should look for a real +distribution (see: Section 11.2, “Why is there no compiler on the +target?”). + +11.5. Why are some packages not visible in the Buildroot config menu? + +If a package exists in the Buildroot tree and does not appear in the +config menu, this most likely means that some of the package’s +dependencies are not met. + +To know more about the dependencies of a package, search for the +package symbol in the config menu (see Section 8.1, “make tips”). + +Then, you may have to recursively enable several options (which +correspond to the unmet dependencies) to finally be able to select +the package. + +If the package is not visible due to some unmet toolchain options, +then you should certainly run a full rebuild (see Section 8.1, “make +tips” for more explanations). + +11.6. Why not use the target directory as a chroot directory? + +There are plenty of reasons to not use the target directory a chroot +one, among these: + + * file ownerships, modes and permissions are not correctly set in + the target directory; + * device nodes are not created in the target directory. + +For these reasons, commands run through chroot, using the target +directory as the new root, will most likely fail. + +If you want to run the target filesystem inside a chroot, or as an +NFS root, then use the tarball image generated in images/ and extract +it as root. + +11.7. Why doesn’t Buildroot generate binary packages (.deb, .ipkg…)? + +One feature that is often discussed on the Buildroot list is the +general topic of "package management". To summarize, the idea would +be to add some tracking of which Buildroot package installs what +files, with the goals of: + + * being able to remove files installed by a package when this + package gets unselected from the menuconfig; + * being able to generate binary packages (ipk or other format) that + can be installed on the target without re-generating a new root + filesystem image. + +In general, most people think it is easy to do: just track which +package installed what and remove it when the package is unselected. +However, it is much more complicated than that: + + * It is not only about the target/ directory, but also the sysroot + in host//sysroot and the host/ directory itself. All files + installed in those directories by various packages must be + tracked. + * When a package is unselected from the configuration, it is not + sufficient to remove just the files it installed. One must also + remove all its reverse dependencies (i.e. packages relying on it) + and rebuild all those packages. For example, package A depends + optionally on the OpenSSL library. Both are selected, and + Buildroot is built. Package A is built with crypto support using + OpenSSL. Later on, OpenSSL gets unselected from the + configuration, but package A remains (since OpenSSL is an + optional dependency, this is possible.) If only OpenSSL files are + removed, then the files installed by package A are broken: they + use a library that is no longer present on the target. Although + this is technically doable, it adds a lot of complexity to + Buildroot, which goes against the simplicity we try to stick to. + * In addition to the previous problem, there is the case where the + optional dependency is not even known to Buildroot. For example, + package A in version 1.0 never used OpenSSL, but in version 2.0 + it automatically uses OpenSSL if available. If the Buildroot .mk + file hasn’t been updated to take this into account, then package + A will not be part of the reverse dependencies of OpenSSL and + will not be removed and rebuilt when OpenSSL is removed. For + sure, the .mk file of package A should be fixed to mention this + optional dependency, but in the mean time, you can have + non-reproducible behaviors. + * The request is to also allow changes in the menuconfig to be + applied on the output directory without having to rebuild + everything from scratch. However, this is very difficult to + achieve in a reliable way: what happens when the suboptions of a + package are changed (we would have to detect this, and rebuild + the package from scratch and potentially all its reverse + dependencies), what happens if toolchain options are changed, + etc. At the moment, what Buildroot does is clear and simple so + its behaviour is very reliable and it is easy to support users. + If configuration changes done in menuconfig are applied after the + next make, then it has to work correctly and properly in all + situations, and not have some bizarre corner cases. The risk is + to get bug reports like "I have enabled package A, B and C, then + ran make, then disabled package C and enabled package D and ran + make, then re-enabled package C and enabled package E and then + there is a build failure". Or worse "I did some configuration, + then built, then did some changes, built, some more changes, + built, some more changes, built, and now it fails, but I don’t + remember all the changes I did and in which order". This will be + impossible to support. + +For all these reasons, the conclusion is that adding tracking of +installed files to remove them when the package is unselected, or to +generate a repository of binary packages, is something that is very +hard to achieve reliably and will add a lot of complexity. + +On this matter, the Buildroot developers make this position +statement: + + * Buildroot strives to make it easy to generate a root filesystem + (hence the name, by the way.) That is what we want to make + Buildroot good at: building root filesystems. + * Buildroot is not meant to be a distribution (or rather, a + distribution generator.) It is the opinion of most Buildroot + developers that this is not a goal we should pursue. We believe + that there are other tools better suited to generate a distro + than Buildroot is. For example, Open Embedded [http:// + openembedded.org/], or openWRT [https://openwrt.org/], are such + tools. + * We prefer to push Buildroot in a direction that makes it easy (or + even easier) to generate complete root filesystems. This is what + makes Buildroot stands out in the crowd (among other things, of + course!) + * We believe that for most embedded Linux systems, binary packages + are not necessary, and potentially harmful. When binary packages + are used, it means that the system can be partially upgraded, + which creates an enormous number of possible combinations of + package versions that should be tested before doing the upgrade + on the embedded device. On the other hand, by doing complete + system upgrades by upgrading the entire root filesystem image at + once, the image deployed to the embedded system is guaranteed to + really be the one that has been tested and validated. + +11.8. How to speed-up the build process? + +Since Buildroot often involves doing full rebuilds of the entire +system that can be quite long, we provide below a number of tips to +help reduce the build time: + + * Use a pre-built external toolchain instead of the default + Buildroot internal toolchain. By using a pre-built Linaro + toolchain (on ARM) or a Sourcery CodeBench toolchain (for ARM, + x86, x86-64, MIPS, etc.), you will save the build time of the + toolchain at each complete rebuild, approximately 15 to 20 + minutes. Note that temporarily using an external toolchain does + not prevent you to switch back to an internal toolchain (that may + provide a higher level of customization) once the rest of your + system is working; + * Use the ccache compiler cache (see: Section 8.14.3, “Using ccache + in Buildroot”); + * Learn about rebuilding only the few packages you actually care + about (see Section 8.3, “Understanding how to rebuild packages”), + but beware that sometimes full rebuilds are anyway necessary (see + Section 8.2, “Understanding when a full rebuild is necessary”); + * Make sure you are not using a virtual machine for the Linux + system used to run Buildroot. Most of the virtual machine + technologies are known to cause a significant performance impact + on I/O, which is really important for building source code; + * Make sure that you’re using only local files: do not attempt to + do a build over NFS, which significantly slows down the build. + Having the Buildroot download folder available locally also helps + a bit. + * Buy new hardware. SSDs and lots of RAM are key to speeding up the + builds. + * Experiment with top-level parallel build, see Section 8.12, + “Top-level parallel build”. + +Chapter 12. Known issues + + * It is not possible to pass extra linker options via + BR2_TARGET_LDFLAGS if such options contain a $ sign. For example, + the following is known to break: BR2_TARGET_LDFLAGS="-Wl,-rpath= + '$ORIGIN/../lib'" + * The libffi package is not supported on the SuperH 2 and ARC + architectures. + * The prboom package triggers a compiler failure with the SuperH 4 + compiler from Sourcery CodeBench, version 2012.09. + +Chapter 13. Legal notice and licensing + +13.1. Complying with open source licenses + +All of the end products of Buildroot (toolchain, root filesystem, +kernel, bootloaders) contain open source software, released under +various licenses. + +Using open source software gives you the freedom to build rich +embedded systems, choosing from a wide range of packages, but also +imposes some obligations that you must know and honour. Some licenses +require you to publish the license text in the documentation of your +product. Others require you to redistribute the source code of the +software to those that receive your product. + +The exact requirements of each license are documented in each +package, and it is your responsibility (or that of your legal office) +to comply with those requirements. To make this easier for you, +Buildroot can collect for you some material you will probably need. +To produce this material, after you have configured Buildroot with +make menuconfig, make xconfig or make gconfig, run: + +make legal-info + +Buildroot will collect legally-relevant material in your output +directory, under the legal-info/ subdirectory. There you will find: + + * A README file, that summarizes the produced material and contains + warnings about material that Buildroot could not produce. + * buildroot.config: this is the Buildroot configuration file that + is usually produced with make menuconfig, and which is necessary + to reproduce the build. + * The source code for all packages; this is saved in the sources/ + and host-sources/ subdirectories for target and host packages + respectively. The source code for packages that set + _REDISTRIBUTE = NO will not be saved. Patches that were applied + are also saved, along with a file named series that lists the + patches in the order they were applied. Patches are under the + same license as the files that they modify. Note: Buildroot + applies additional patches to Libtool scripts of autotools-based + packages. These patches can be found under support/libtool in the + Buildroot source and, due to technical limitations, are not saved + with the package sources. You may need to collect them manually. + * A manifest file (one for host and one for target packages) + listing the configured packages, their version, license and + related information. Some of this information might not be + defined in Buildroot; such items are marked as "unknown". + * The license texts of all packages, in the licenses/ and + host-licenses/ subdirectories for target and host packages + respectively. If the license file(s) are not defined in + Buildroot, the file is not produced and a warning in the README + indicates this. + +Please note that the aim of the legal-info feature of Buildroot is to +produce all the material that is somehow relevant for legal +compliance with the package licenses. Buildroot does not try to +produce the exact material that you must somehow make public. +Certainly, more material is produced than is needed for a strict +legal compliance. For example, it produces the source code for +packages released under BSD-like licenses, that you are not required +to redistribute in source form. + +Moreover, due to technical limitations, Buildroot does not produce +some material that you will or may need, such as the toolchain source +code for some of the external toolchains and the Buildroot source +code itself. When you run make legal-info, Buildroot produces +warnings in the README file to inform you of relevant material that +could not be saved. + +Finally, keep in mind that the output of make legal-info is based on +declarative statements in each of the packages recipes. The Buildroot +developers try to do their best to keep those declarative statements +as accurate as possible, to the best of their knowledge. However, it +is very well possible that those declarative statements are not all +fully accurate nor exhaustive. You (or your legal department) have to +check the output of make legal-info before using it as your own +compliance delivery. See the NO WARRANTY clauses (clauses 11 and 12) +in the COPYING file at the root of the Buildroot distribution. + +13.2. Complying with the Buildroot license + +Buildroot itself is an open source software, released under the GNU +General Public License, version 2 [http://www.gnu.org/licenses/ +old-licenses/gpl-2.0.html] or (at your option) any later version, +with the exception of the package patches detailed below. However, +being a build system, it is not normally part of the end product: if +you develop the root filesystem, kernel, bootloader or toolchain for +a device, the code of Buildroot is only present on the development +machine, not in the device storage. + +Nevertheless, the general view of the Buildroot developers is that +you should release the Buildroot source code along with the source +code of other packages when releasing a product that contains +GPL-licensed software. This is because the GNU GPL [http:// +www.gnu.org/licenses/old-licenses/gpl-2.0.html] defines the "complete +source code" for an executable work as "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". Buildroot is part of the scripts used to control +compilation and installation of the executable, and as such it is +considered part of the material that must be redistributed. + +Keep in mind that this is only the Buildroot developers' opinion, and +you should consult your legal department or lawyer in case of any +doubt. + +13.2.1. Patches to packages + +Buildroot also bundles patch files, which are applied to the sources +of the various packages. Those patches are not covered by the license +of Buildroot. Instead, they are covered by the license of the +software to which the patches are applied. When said software is +available under multiple licenses, the Buildroot patches are only +provided under the publicly accessible licenses. + +See Chapter 19, Patching a package for the technical details. + +Chapter 14. Beyond Buildroot + +14.1. Boot the generated images + +14.1.1. NFS boot + +To achieve NFS-boot, enable tar root filesystem in the Filesystem +images menu. + +After a complete build, just run the following commands to setup the +NFS-root directory: + +sudo tar -xavf /path/to/output_dir/rootfs.tar -C /path/to/nfs_root_dir + +Remember to add this path to /etc/exports. + +Then, you can execute a NFS-boot from your target. + +14.1.2. Live CD + +To build a live CD image, enable the iso image option in the +Filesystem images menu. Note that this option is only available on +the x86 and x86-64 architectures, and if you are building your kernel +with Buildroot. + +You can build a live CD image with either IsoLinux, Grub or Grub 2 as +a bootloader, but only Isolinux supports making this image usable +both as a live CD and live USB (through the Build hybrid image +option). + +You can test your live CD image using QEMU: + +qemu-system-i386 -cdrom output/images/rootfs.iso9660 + +Or use it as a hard-drive image if it is a hybrid ISO: + +qemu-system-i386 -hda output/images/rootfs.iso9660 + +It can be easily flashed to a USB drive with dd: + +dd if=output/images/rootfs.iso9660 of=/dev/sdb + +14.2. Chroot + +If you want to chroot in a generated image, then there are few thing +you should be aware of: + + * you should setup the new root from the tar root filesystem image; + * either the selected target architecture is compatible with your + host machine, or you should use some qemu-* binary and correctly + set it within the binfmt properties to be able to run the + binaries built for the target on your host machine; + * Buildroot does not currently provide host-qemu and binfmt + correctly built and set for that kind of use. + +Part III. Developer guide + +Table of Contents + +15. How Buildroot works +16. Coding style + + 16.1. Config.in file + 16.2. The .mk file + 16.3. The documentation + 16.4. Support scripts + +17. Adding support for a particular board +18. Adding new packages to Buildroot + + 18.1. Package directory + 18.2. Config files + 18.3. The .mk file + 18.4. The .hash file + 18.5. Infrastructure for packages with specific build systems + 18.6. Infrastructure for autotools-based packages + 18.7. Infrastructure for CMake-based packages + 18.8. Infrastructure for Python packages + 18.9. Infrastructure for LuaRocks-based packages + 18.10. Infrastructure for Perl/CPAN packages + 18.11. Infrastructure for virtual packages + 18.12. Infrastructure for packages using kconfig for + configuration files + 18.13. Infrastructure for rebar-based packages + 18.14. Infrastructure for Waf-based packages + 18.15. Infrastructure for Meson-based packages + 18.16. Integration of Cargo-based packages + 18.17. Infrastructure for Go packages + 18.18. Infrastructure for QMake-based packages + 18.19. Infrastructure for packages building kernel modules + 18.20. Infrastructure for asciidoc documents + 18.21. Infrastructure specific to the Linux kernel package + 18.22. Hooks available in the various build steps + 18.23. Gettext integration and interaction with packages + 18.24. Tips and tricks + 18.25. Conclusion + +19. Patching a package + + 19.1. Providing patches + 19.2. How patches are applied + 19.3. Format and licensing of the package patches + 19.4. Integrating patches found on the Web + +20. Download infrastructure +21. Debugging Buildroot +22. Contributing to Buildroot + + 22.1. Reproducing, analyzing and fixing bugs + 22.2. Analyzing and fixing autobuild failures + 22.3. Reviewing and testing patches + 22.4. Work on items from the TODO list + 22.5. Submitting patches + 22.6. Reporting issues/bugs or getting help + 22.7. Using the run-tests framework + +23. DEVELOPERS file and get-developers +24. Release Engineering + + 24.1. Releases + 24.2. Development + +Chapter 15. How Buildroot works + +As mentioned above, Buildroot is basically a set of Makefiles that +download, configure, and compile software with the correct options. +It also includes patches for various software packages - mainly the +ones involved in the cross-compilation toolchain (gcc, binutils and +uClibc). + +There is basically one Makefile per software package, and they are +named with the .mk extension. Makefiles are split into many different +parts. + + * The toolchain/ directory contains the Makefiles and associated + files for all software related to the cross-compilation + toolchain: binutils, gcc, gdb, kernel-headers and uClibc. + * The arch/ directory contains the definitions for all the + processor architectures that are supported by Buildroot. + * The package/ directory contains the Makefiles and associated + files for all user-space tools and libraries that Buildroot can + compile and add to the target root filesystem. There is one + sub-directory per package. + * The linux/ directory contains the Makefiles and associated files + for the Linux kernel. + * The boot/ directory contains the Makefiles and associated files + for the bootloaders supported by Buildroot. + * The system/ directory contains support for system integration, + e.g. the target filesystem skeleton and the selection of an init + system. + * The fs/ directory contains the Makefiles and associated files for + software related to the generation of the target root filesystem + image. + +Each directory contains at least 2 files: + + * something.mk is the Makefile that downloads, configures, compiles + and installs the package something. + * Config.in is a part of the configuration tool description file. + It describes the options related to the package. + +The main Makefile performs the following steps (once the +configuration is done): + + * Create all the output directories: staging, target, build, etc. + in the output directory (output/ by default, another value can be + specified using O=) + * Generate the toolchain target. When an internal toolchain is + used, this means generating the cross-compilation toolchain. When + an external toolchain is used, this means checking the features + of the external toolchain and importing it into the Buildroot + environment. + * Generate all the targets listed in the TARGETS variable. This + variable is filled by all the individual components' Makefiles. + Generating these targets will trigger the compilation of the + userspace packages (libraries, programs), the kernel, the + bootloader and the generation of the root filesystem images, + depending on the configuration. + +Chapter 16. Coding style + +Overall, these coding style rules are here to help you to add new +files in Buildroot or refactor existing ones. + +If you slightly modify some existing file, the important thing is to +keep the consistency of the whole file, so you can: + + * either follow the potentially deprecated coding style used in + this file, + * or entirely rework it in order to make it comply with these + rules. + +16.1. Config.in file + +Config.in files contain entries for almost anything configurable in +Buildroot. + +An entry has the following pattern: + +config BR2_PACKAGE_LIBFOO + bool "libfoo" + depends on BR2_PACKAGE_LIBBAZ + select BR2_PACKAGE_LIBBAR + help + This is a comment that explains what libfoo is. The help text + should be wrapped. + + http://foosoftware.org/libfoo/ + + * The bool, depends on, select and help lines are indented with one + tab. + * The help text itself should be indented with one tab and two + spaces. + * The help text should be wrapped to fit 72 columns, where tab + counts for 8, so 62 characters in the text itself. + +The Config.in files are the input for the configuration tool used in +Buildroot, which is the regular Kconfig. For further details about +the Kconfig language, refer to http://kernel.org/doc/Documentation/ +kbuild/kconfig-language.txt. + +16.2. The .mk file + + * Header: The file starts with a header. It contains the module + name, preferably in lowercase, enclosed between separators made + of 80 hashes. A blank line is mandatory after the header: + + ################################################################################ + # + # libfoo + # + ################################################################################ + + * Assignment: use = preceded and followed by one space: + + LIBFOO_VERSION = 1.0 + LIBFOO_CONF_OPTS += --without-python-support + + Do not align the = signs. + + * Indentation: use tab only: + + define LIBFOO_REMOVE_DOC + $(RM) -fr $(TARGET_DIR)/usr/share/libfoo/doc \ + $(TARGET_DIR)/usr/share/man/man3/libfoo* + endef + + Note that commands inside a define block should always start with + a tab, so make recognizes them as commands. + + * Optional dependency: + + + Prefer multi-line syntax. + + YES: + + ifeq ($(BR2_PACKAGE_PYTHON),y) + LIBFOO_CONF_OPTS += --with-python-support + LIBFOO_DEPENDENCIES += python + else + LIBFOO_CONF_OPTS += --without-python-support + endif + + NO: + + LIBFOO_CONF_OPTS += --with$(if $(BR2_PACKAGE_PYTHON),,out)-python-support + LIBFOO_DEPENDENCIES += $(if $(BR2_PACKAGE_PYTHON),python,) + + + Keep configure options and dependencies close together. + * Optional hooks: keep hook definition and assignment together in + one if block. + + YES: + + ifneq ($(BR2_LIBFOO_INSTALL_DATA),y) + define LIBFOO_REMOVE_DATA + $(RM) -fr $(TARGET_DIR)/usr/share/libfoo/data + endef + LIBFOO_POST_INSTALL_TARGET_HOOKS += LIBFOO_REMOVE_DATA + endif + + NO: + + define LIBFOO_REMOVE_DATA + $(RM) -fr $(TARGET_DIR)/usr/share/libfoo/data + endef + + ifneq ($(BR2_LIBFOO_INSTALL_DATA),y) + LIBFOO_POST_INSTALL_TARGET_HOOKS += LIBFOO_REMOVE_DATA + endif + +16.3. The documentation + +The documentation uses the asciidoc [http://www.methods.co.nz/ +asciidoc/] format. + +For further details about the asciidoc syntax, refer to http:// +www.methods.co.nz/asciidoc/userguide.html. + +16.4. Support scripts + +Some scripts in the support/ and utils/ directories are written in +Python and should follow the PEP8 Style Guide for Python Code [https: +//www.python.org/dev/peps/pep-0008/]. + +Chapter 17. Adding support for a particular board + +Buildroot contains basic configurations for several publicly +available hardware boards, so that users of such a board can easily +build a system that is known to work. You are welcome to add support +for other boards to Buildroot too. + +To do so, you need to create a normal Buildroot configuration that +builds a basic system for the hardware: (internal) toolchain, kernel, +bootloader, filesystem and a simple BusyBox-only userspace. No +specific package should be selected: the configuration should be as +minimal as possible, and should only build a working basic BusyBox +system for the target platform. You can of course use more +complicated configurations for your internal projects, but the +Buildroot project will only integrate basic board configurations. +This is because package selections are highly application-specific. + +Once you have a known working configuration, run make savedefconfig. +This will generate a minimal defconfig file at the root of the +Buildroot source tree. Move this file into the configs/ directory, +and rename it _defconfig. If the configuration is a bit +more complicated, it is nice to manually reformat it and separate it +into sections, with a comment before each section. Typical sections +are Architecture, Toolchain options (typically just linux headers +version), Firmware, Bootloader, Kernel, and Filesystem. + +Always use fixed versions or commit hashes for the different +components, not the "latest" version. For example, set +BR2_LINUX_KERNEL_CUSTOM_VERSION=y and +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE to the kernel version you +tested with. + +It is recommended to use as much as possible upstream versions of the +Linux kernel and bootloaders, and to use as much as possible default +kernel and bootloader configurations. If they are incorrect for your +board, or no default exists, we encourage you to send fixes to the +corresponding upstream projects. + +However, in the mean time, you may want to store kernel or bootloader +configuration or patches specific to your target platform. To do so, +create a directory board/ and a subdirectory board/ +/. You can then store your patches and +configurations in these directories, and reference them from the main +Buildroot configuration. Refer to Chapter 9, Project-specific +customization for more details. + +Chapter 18. Adding new packages to Buildroot + +This section covers how new packages (userspace libraries or +applications) can be integrated into Buildroot. It also shows how +existing packages are integrated, which is needed for fixing issues +or tuning their configuration. + +When you add a new package, be sure to test it in various conditions +(see Section 18.24.3, “How to test your package”) and also check it +for coding style (see Section 18.24.2, “How to check the coding +style”). + +18.1. Package directory + +First of all, create a directory under the package directory for your +software, for example libfoo. + +Some packages have been grouped by topic in a sub-directory: x11r7, +qt5 and gstreamer. If your package fits in one of these categories, +then create your package directory in these. New subdirectories are +discouraged, however. + +18.2. Config files + +For the package to be displayed in the configuration tool, you need +to create a Config file in your package directory. There are two +types: Config.in and Config.in.host. + +18.2.1. Config.in file + +For packages used on the target, create a file named Config.in. This +file will contain the option descriptions related to our libfoo +software that will be used and displayed in the configuration tool. +It should basically contain: + +config BR2_PACKAGE_LIBFOO + bool "libfoo" + help + This is a comment that explains what libfoo is. The help text + should be wrapped. + + http://foosoftware.org/libfoo/ + +The bool line, help line and other metadata information about the +configuration option must be indented with one tab. The help text +itself should be indented with one tab and two spaces, lines should +be wrapped to fit 72 columns, where tab counts for 8, so 62 +characters in the text itself. The help text must mention the +upstream URL of the project after an empty line. + +As a convention specific to Buildroot, the ordering of the attributes +is as follows: + + 1. The type of option: bool, string… with the prompt + 2. If needed, the default value(s) + 3. Any dependencies on the target in depends on form + 4. Any dependencies on the toolchain in depends on form + 5. Any dependencies on other packages in depends on form + 6. Any dependency of the select form + 7. The help keyword and help text. + +You can add other sub-options into a if BR2_PACKAGE_LIBFOO…endif +statement to configure particular things in your software. You can +look at examples in other packages. The syntax of the Config.in file +is the same as the one for the kernel Kconfig file. The documentation +for this syntax is available at http://kernel.org/doc/Documentation/ +kbuild/kconfig-language.txt + +Finally you have to add your new libfoo/Config.in to package/ +Config.in (or in a category subdirectory if you decided to put your +package in one of the existing categories). The files included there +are sorted alphabetically per category and are NOT supposed to +contain anything but the bare name of the package. + +source "package/libfoo/Config.in" + +18.2.2. Config.in.host file + +Some packages also need to be built for the host system. There are +two options here: + + * The host package is only required to satisfy build-time + dependencies of one or more target packages. In this case, add + host-foo to the target package’s BAR_DEPENDENCIES variable. No + Config.in.host file should be created. + * The host package should be explicitly selectable by the user from + the configuration menu. In this case, create a Config.in.host + file for that host package: + + config BR2_PACKAGE_HOST_FOO + bool "host foo" + help + This is a comment that explains what foo for the host is. + + http://foosoftware.org/foo/ + + The same coding style and options as for the Config.in file are + valid. + + Finally you have to add your new libfoo/Config.in.host to package + /Config.in.host. The files included there are sorted + alphabetically and are NOT supposed to contain anything but the + bare name of the package. + + source "package/foo/Config.in.host" + + The host package will then be available from the Host utilities + menu. + +18.2.3. Choosing depends on or select + +The Config.in file of your package must also ensure that dependencies +are enabled. Typically, Buildroot uses the following rules: + + * Use a select type of dependency for dependencies on libraries. + These dependencies are generally not obvious and it therefore + make sense to have the kconfig system ensure that the + dependencies are selected. For example, the libgtk2 package uses + select BR2_PACKAGE_LIBGLIB2 to make sure this library is also + enabled. The select keyword expresses the dependency with a + backward semantic. + * Use a depends on type of dependency when the user really needs to + be aware of the dependency. Typically, Buildroot uses this type + of dependency for dependencies on target architecture, MMU + support and toolchain options (see Section 18.2.4, “Dependencies + on target and toolchain options”), or for dependencies on "big" + things, such as the X.org system. The depends on keyword + expresses the dependency with a forward semantic. + +Note. The current problem with the kconfig language is that these two +dependency semantics are not internally linked. Therefore, it may be +possible to select a package, whom one of its dependencies/ +requirement is not met. + +An example illustrates both the usage of select and depends on. + +config BR2_PACKAGE_RRDTOOL + bool "rrdtool" + depends on BR2_USE_WCHAR + select BR2_PACKAGE_FREETYPE + select BR2_PACKAGE_LIBART + select BR2_PACKAGE_LIBPNG + select BR2_PACKAGE_ZLIB + help + RRDtool is the OpenSource industry standard, high performance + data logging and graphing system for time series data. + + http://oss.oetiker.ch/rrdtool/ + +comment "rrdtool needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR + +Note that these two dependency types are only transitive with the +dependencies of the same kind. + +This means, in the following example: + +config BR2_PACKAGE_A + bool "Package A" + +config BR2_PACKAGE_B + bool "Package B" + depends on BR2_PACKAGE_A + +config BR2_PACKAGE_C + bool "Package C" + depends on BR2_PACKAGE_B + +config BR2_PACKAGE_D + bool "Package D" + select BR2_PACKAGE_B + +config BR2_PACKAGE_E + bool "Package E" + select BR2_PACKAGE_D + + * Selecting Package C will be visible if Package B has been + selected, which in turn is only visible if Package A has been + selected. + * Selecting Package E will select Package D, which will select + Package B, it will not check for the dependencies of Package B, + so it will not select Package A. + * Since Package B is selected but Package A is not, this violates + the dependency of Package B on Package A. Therefore, in such a + situation, the transitive dependency has to be added explicitly: + +config BR2_PACKAGE_D + bool "Package D" + select BR2_PACKAGE_B + depends on BR2_PACKAGE_A + +config BR2_PACKAGE_E + bool "Package E" + select BR2_PACKAGE_D + depends on BR2_PACKAGE_A + +Overall, for package library dependencies, select should be +preferred. + +Note that such dependencies will ensure that the dependency option is +also enabled, but not necessarily built before your package. To do +so, the dependency also needs to be expressed in the .mk file of the +package. + +Further formatting details: see the coding style. + +18.2.4. Dependencies on target and toolchain options + +Many packages depend on certain options of the toolchain: the choice +of C library, C++ support, thread support, RPC support, wchar +support, or dynamic library support. Some packages can only be built +on certain target architectures, or if an MMU is available in the +processor. + +These dependencies have to be expressed with the appropriate depends +on statements in the Config.in file. Additionally, for dependencies +on toolchain options, a comment should be displayed when the option +is not enabled, so that the user knows why the package is not +available. Dependencies on target architecture or MMU support should +not be made visible in a comment: since it is unlikely that the user +can freely choose another target, it makes little sense to show these +dependencies explicitly. + +The comment should only be visible if the config option itself would +be visible when the toolchain option dependencies are met. This means +that all other dependencies of the package (including dependencies on +target architecture and MMU support) have to be repeated on the +comment definition. To keep it clear, the depends on statement for +these non-toolchain option should be kept separate from the depends +on statement for the toolchain options. If there is a dependency on a +config option in that same file (typically the main package) it is +preferable to have a global if … endif construct rather than +repeating the depends on statement on the comment and other config +options. + +The general format of a dependency comment for package foo is: + +foo needs a toolchain w/ featA, featB, featC + +for example: + +mpd needs a toolchain w/ C++, threads, wchar + +or + +crda needs a toolchain w/ threads + +Note that this text is kept brief on purpose, so that it will fit on +a 80-character terminal. + +The rest of this section enumerates the different target and +toolchain options, the corresponding config symbols to depend on, and +the text to use in the comment. + + * Target architecture + + + Dependency symbol: BR2_powerpc, BR2_mips, … (see arch/ + Config.in) + + Comment string: no comment to be added + * MMU support + + + Dependency symbol: BR2_USE_MMU + + Comment string: no comment to be added + * Gcc _sync* built-ins used for atomic operations. They are + available in variants operating on 1 byte, 2 bytes, 4 bytes and 8 + bytes. Since different architectures support atomic operations on + different sizes, one dependency symbol is available for each + size: + + + Dependency symbol: BR2_TOOLCHAIN_HAS_SYNC_1 for 1 byte, + BR2_TOOLCHAIN_HAS_SYNC_2 for 2 bytes, + BR2_TOOLCHAIN_HAS_SYNC_4 for 4 bytes, + BR2_TOOLCHAIN_HAS_SYNC_8 for 8 bytes. + + Comment string: no comment to be added + * Gcc _atomic* built-ins used for atomic operations. + + + Dependency symbol: BR2_TOOLCHAIN_HAS_ATOMIC. + + Comment string: no comment to be added + * Kernel headers + + + Dependency symbol: BR2_TOOLCHAIN_HEADERS_AT_LEAST_X_Y, + (replace X_Y with the proper version, see toolchain/ + Config.in) + + Comment string: headers >= X.Y and/or headers <= X.Y (replace + X.Y with the proper version) + * GCC version + + + Dependency symbol: BR2_TOOLCHAIN_GCC_AT_LEAST_X_Y, (replace + X_Y with the proper version, see toolchain/Config.in) + + Comment string: gcc >= X.Y and/or gcc <= X.Y (replace X.Y + with the proper version) + * Host GCC version + + + Dependency symbol: BR2_HOST_GCC_AT_LEAST_X_Y, (replace X_Y + with the proper version, see Config.in) + + Comment string: no comment to be added + + Note that it is usually not the package itself that has a + minimum host GCC version, but rather a host-package on which + it depends. + * C library + + + Dependency symbol: BR2_TOOLCHAIN_USES_GLIBC, + BR2_TOOLCHAIN_USES_MUSL, BR2_TOOLCHAIN_USES_UCLIBC + + Comment string: for the C library, a slightly different + comment text is used: foo needs a glibc toolchain, or foo + needs a glibc toolchain w/ C++ + * C++ support + + + Dependency symbol: BR2_INSTALL_LIBSTDCPP + + Comment string: C++ + * D support + + + Dependency symbol: BR2_TOOLCHAIN_HAS_DLANG + + Comment string: Dlang + * Fortran support + + + Dependency symbol: BR2_TOOLCHAIN_HAS_FORTRAN + + Comment string: fortran + * thread support + + + Dependency symbol: BR2_TOOLCHAIN_HAS_THREADS + + Comment string: threads (unless + BR2_TOOLCHAIN_HAS_THREADS_NPTL is also needed, in which case, + specifying only NPTL is sufficient) + * NPTL thread support + + + Dependency symbol: BR2_TOOLCHAIN_HAS_THREADS_NPTL + + Comment string: NPTL + * RPC support + + + Dependency symbol: BR2_TOOLCHAIN_HAS_NATIVE_RPC + + Comment string: RPC + * wchar support + + + Dependency symbol: BR2_USE_WCHAR + + Comment string: wchar + * dynamic library + + + Dependency symbol: !BR2_STATIC_LIBS + + Comment string: dynamic library + +18.2.5. Dependencies on a Linux kernel built by buildroot + +Some packages need a Linux kernel to be built by buildroot. These are +typically kernel modules or firmware. A comment should be added in +the Config.in file to express this dependency, similar to +dependencies on toolchain options. The general format is: + +foo needs a Linux kernel to be built + +If there is a dependency on both toolchain options and the Linux +kernel, use this format: + +foo needs a toolchain w/ featA, featB, featC and a Linux kernel to be built + +18.2.6. Dependencies on udev /dev management + +If a package needs udev /dev management, it should depend on symbol +BR2_PACKAGE_HAS_UDEV, and the following comment should be added: + +foo needs udev /dev management + +If there is a dependency on both toolchain options and udev /dev +management, use this format: + +foo needs udev /dev management and a toolchain w/ featA, featB, featC + +18.2.7. Dependencies on features provided by virtual packages + +Some features can be provided by more than one package, such as the +openGL libraries. + +See Section 18.11, “Infrastructure for virtual packages” for more on +the virtual packages. + +18.3. The .mk file + +Finally, here’s the hardest part. Create a file named libfoo.mk. It +describes how the package should be downloaded, configured, built, +installed, etc. + +Depending on the package type, the .mk file must be written in a +different way, using different infrastructures: + + * Makefiles for generic packages (not using autotools or CMake): + These are based on an infrastructure similar to the one used for + autotools-based packages, but require a little more work from the + developer. They specify what should be done for the + configuration, compilation and installation of the package. This + infrastructure must be used for all packages that do not use the + autotools as their build system. In the future, other specialized + infrastructures might be written for other build systems. We + cover them through in a tutorial and a reference. + * Makefiles for autotools-based software (autoconf, automake, + etc.): We provide a dedicated infrastructure for such packages, + since autotools is a very common build system. This + infrastructure must be used for new packages that rely on the + autotools as their build system. We cover them through a tutorial + and reference. + * Makefiles for cmake-based software: We provide a dedicated + infrastructure for such packages, as CMake is a more and more + commonly used build system and has a standardized behaviour. This + infrastructure must be used for new packages that rely on CMake. + We cover them through a tutorial and reference. + * Makefiles for Python modules: We have a dedicated infrastructure + for Python modules that use either the distutils or the + setuptools mechanism. We cover them through a tutorial and a + reference. + * Makefiles for Lua modules: We have a dedicated infrastructure for + Lua modules available through the LuaRocks web site. We cover + them through a tutorial and a reference. + +Further formatting details: see the writing rules. + +18.4. The .hash file + +When possible, you must add a third file, named libfoo.hash, that +contains the hashes of the downloaded files for the libfoo package. +The only reason for not adding a .hash file is when hash checking is +not possible due to how the package is downloaded. + +When a package has a version selection choice, then the hash file may +be stored in a subdirectory named after the version, e.g. package/ +libfoo/1.2.3/libfoo.hash. This is especially important if the +different versions have different licensing terms, but they are +stored in the same file. Otherwise, the hash file should stay in the +package’s directory. + +The hashes stored in that file are used to validate the integrity of +the downloaded files and of the license files. + +The format of this file is one line for each file for which to check +the hash, each line with the following three fields separated by two +spaces: + + * the type of hash, one of: + + + md5, sha1, sha224, sha256, sha384, sha512, none + * the hash of the file: + + + for none, one or more non-space chars, usually just the + string xxx + + for md5, 32 hexadecimal characters + + for sha1, 40 hexadecimal characters + + for sha224, 56 hexadecimal characters + + for sha256, 64 hexadecimal characters + + for sha384, 96 hexadecimal characters + + for sha512, 128 hexadecimal characters + * the name of the file: + + + for a source archive: the basename of the file, without any + directory component, + + for a license file: the path as it appears in + FOO_LICENSE_FILES. + +Lines starting with a # sign are considered comments, and ignored. +Empty lines are ignored. + +There can be more than one hash for a single file, each on its own +line. In this case, all hashes must match. + +Note. Ideally, the hashes stored in this file should match the hashes +published by upstream, e.g. on their website, in the e-mail +announcement… If upstream provides more than one type of hash (e.g. +sha1 and sha512), then it is best to add all those hashes in the +.hash file. If upstream does not provide any hash, or only provides +an md5 hash, then compute at least one strong hash yourself +(preferably sha256, but not md5), and mention this in a comment line +above the hashes. + +Note. The hashes for license files are used to detect a license +change when a package version is bumped. The hashes are checked +during the make legal-info target run. For a package with multiple +versions (like Qt5), create the hash file in a subdirectory + of that package (see also Section 19.2, “How patches +are applied”). + +The none hash type is reserved to those archives downloaded from a +repository, like a git clone, a subversion checkout… + +The example below defines a sha1 and a sha256 published by upstream +for the main libfoo-1.2.3.tar.bz2 tarball, an md5 from upstream and a +locally-computed sha256 hashes for a binary blob, a sha256 for a +downloaded patch, and an archive with no hash: + +# Hashes from: http://www.foosoftware.org/download/libfoo-1.2.3.tar.bz2.{sha1,sha256}: +sha1 486fb55c3efa71148fe07895fd713ea3a5ae343a libfoo-1.2.3.tar.bz2 +sha256 efc8103cc3bcb06bda6a781532d12701eb081ad83e8f90004b39ab81b65d4369 libfoo-1.2.3.tar.bz2 + +# md5 from: http://www.foosoftware.org/download/libfoo-1.2.3.tar.bz2.md5, sha256 locally computed: +md5 2d608f3c318c6b7557d551a5a09314f03452f1a1 libfoo-data.bin +sha256 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b libfoo-data.bin + +# Locally computed: +sha256 ff52101fb90bbfc3fe9475e425688c660f46216d7e751c4bbdb1dc85cdccacb9 libfoo-fix-blabla.patch + +# No hash for 1234: +none xxx libfoo-1234.tar.gz + +# Hash for license files: +sha256 a45a845012742796534f7e91fe623262ccfb99460a2bd04015bd28d66fba95b8 COPYING +sha256 01b1f9f2c8ee648a7a596a1abe8aa4ed7899b1c9e5551bda06da6e422b04aa55 doc/COPYING.LGPL + +If the .hash file is present, and it contains one or more hashes for +a downloaded file, the hash(es) computed by Buildroot (after +download) must match the hash(es) stored in the .hash file. If one or +more hashes do not match, Buildroot considers this an error, deletes +the downloaded file, and aborts. + +If the .hash file is present, but it does not contain a hash for a +downloaded file, Buildroot considers this an error and aborts. +However, the downloaded file is left in the download directory since +this typically indicates that the .hash file is wrong but the +downloaded file is probably OK. + +Hashes are currently checked for files fetched from http/ftp servers, +Git repositories, files copied using scp and local files. Hashes are +not checked for other version control systems (such as Subversion, +CVS, etc.) because Buildroot currently does not generate reproducible +tarballs when source code is fetched from such version control +systems. + +Hashes should only be added in .hash files for files that are +guaranteed to be stable. For example, patches auto-generated by +Github are not guaranteed to be stable, and therefore their hashes +can change over time. Such patches should not be downloaded, and +instead be added locally to the package folder. + +If the .hash file is missing, then no check is done at all. + +18.5. Infrastructure for packages with specific build systems + +By packages with specific build systems we mean all the packages +whose build system is not one of the standard ones, such as autotools +or CMake. This typically includes packages whose build system is +based on hand-written Makefiles or shell scripts. + +18.5.1. generic-package tutorial + +01: ################################################################################ +02: # +03: # libfoo +04: # +05: ################################################################################ +06: +07: LIBFOO_VERSION = 1.0 +08: LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz +09: LIBFOO_SITE = http://www.foosoftware.org/download +10: LIBFOO_LICENSE = GPL-3.0+ +11: LIBFOO_LICENSE_FILES = COPYING +12: LIBFOO_INSTALL_STAGING = YES +13: LIBFOO_CONFIG_SCRIPTS = libfoo-config +14: LIBFOO_DEPENDENCIES = host-libaaa libbbb +15: +16: define LIBFOO_BUILD_CMDS +17: $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) all +18: endef +19: +20: define LIBFOO_INSTALL_STAGING_CMDS +21: $(INSTALL) -D -m 0755 $(@D)/libfoo.a $(STAGING_DIR)/usr/lib/libfoo.a +22: $(INSTALL) -D -m 0644 $(@D)/foo.h $(STAGING_DIR)/usr/include/foo.h +23: $(INSTALL) -D -m 0755 $(@D)/libfoo.so* $(STAGING_DIR)/usr/lib +24: endef +25: +26: define LIBFOO_INSTALL_TARGET_CMDS +27: $(INSTALL) -D -m 0755 $(@D)/libfoo.so* $(TARGET_DIR)/usr/lib +28: $(INSTALL) -d -m 0755 $(TARGET_DIR)/etc/foo.d +29: endef +30: +31: define LIBFOO_USERS +32: foo -1 libfoo -1 * - - - LibFoo daemon +33: endef +34: +35: define LIBFOO_DEVICES +36: /dev/foo c 666 0 0 42 0 - - - +37: endef +38: +39: define LIBFOO_PERMISSIONS +40: /bin/foo f 4755 foo libfoo - - - - - +41: endef +42: +43: $(eval $(generic-package)) + +The Makefile begins on line 7 to 11 with metadata information: the +version of the package (LIBFOO_VERSION), the name of the tarball +containing the package (LIBFOO_SOURCE) (xz-ed tarball recommended) +the Internet location at which the tarball can be downloaded from +(LIBFOO_SITE), the license (LIBFOO_LICENSE) and file with the license +text (LIBFOO_LICENSE_FILES). All variables must start with the same +prefix, LIBFOO_ in this case. This prefix is always the uppercased +version of the package name (see below to understand where the +package name is defined). + +On line 12, we specify that this package wants to install something +to the staging space. This is often needed for libraries, since they +must install header files and other development files in the staging +space. This will ensure that the commands listed in the +LIBFOO_INSTALL_STAGING_CMDS variable will be executed. + +On line 13, we specify that there is some fixing to be done to some +of the libfoo-config files that were installed during +LIBFOO_INSTALL_STAGING_CMDS phase. These *-config files are +executable shell script files that are located in $(STAGING_DIR)/usr/ +bin directory and are executed by other 3rd party packages to find +out the location and the linking flags of this particular package. + +The problem is that all these *-config files by default give wrong, +host system linking flags that are unsuitable for cross-compiling. + +For example: -I/usr/include instead of -I$(STAGING_DIR)/usr/include +or: -L/usr/lib instead of -L$(STAGING_DIR)/usr/lib + +So some sed magic is done to these scripts to make them give correct +flags. The argument to be given to LIBFOO_CONFIG_SCRIPTS is the file +name(s) of the shell script(s) needing fixing. All these names are +relative to $(STAGING_DIR)/usr/bin and if needed multiple names can +be given. + +In addition, the scripts listed in LIBFOO_CONFIG_SCRIPTS are removed +from $(TARGET_DIR)/usr/bin, since they are not needed on the target. + +Example 18.1. Config script: divine package + +Package divine installs shell script $(STAGING_DIR)/usr/bin/ +divine-config. + +So its fixup would be: + +DIVINE_CONFIG_SCRIPTS = divine-config + + +Example 18.2. Config script: imagemagick package: + +Package imagemagick installs the following scripts: $(STAGING_DIR)/ +usr/bin/{Magick,Magick++,MagickCore,MagickWand,Wand}-config + +So it’s fixup would be: + +IMAGEMAGICK_CONFIG_SCRIPTS = \ + Magick-config Magick++-config \ + MagickCore-config MagickWand-config Wand-config + + +On line 14, we specify the list of dependencies this package relies +on. These dependencies are listed in terms of lower-case package +names, which can be packages for the target (without the host- +prefix) or packages for the host (with the host-) prefix). Buildroot +will ensure that all these packages are built and installed before +the current package starts its configuration. + +The rest of the Makefile, lines 16..29, defines what should be done +at the different steps of the package configuration, compilation and +installation. LIBFOO_BUILD_CMDS tells what steps should be performed +to build the package. LIBFOO_INSTALL_STAGING_CMDS tells what steps +should be performed to install the package in the staging space. +LIBFOO_INSTALL_TARGET_CMDS tells what steps should be performed to +install the package in the target space. + +All these steps rely on the $(@D) variable, which contains the +directory where the source code of the package has been extracted. + +On lines 31..33, we define a user that is used by this package (e.g. +to run a daemon as non-root) (LIBFOO_USERS). + +On line 35..37, we define a device-node file used by this package +(LIBFOO_DEVICES). + +On line 39..41, we define the permissions to set to specific files +installed by this package (LIBFOO_PERMISSIONS). + +Finally, on line 43, we call the generic-package function, which +generates, according to the variables defined previously, all the +Makefile code necessary to make your package working. + +18.5.2. generic-package reference + +There are two variants of the generic target. The generic-package +macro is used for packages to be cross-compiled for the target. The +host-generic-package macro is used for host packages, natively +compiled for the host. It is possible to call both of them in a +single .mk file: once to create the rules to generate a target +package and once to create the rules to generate a host package: + +$(eval $(generic-package)) +$(eval $(host-generic-package)) + +This might be useful if the compilation of the target package +requires some tools to be installed on the host. If the package name +is libfoo, then the name of the package for the target is also +libfoo, while the name of the package for the host is host-libfoo. +These names should be used in the DEPENDENCIES variables of other +packages, if they depend on libfoo or host-libfoo. + +The call to the generic-package and/or host-generic-package macro +must be at the end of the .mk file, after all variable definitions. +The call to host-generic-package must be after the call to +generic-package, if any. + +For the target package, the generic-package uses the variables +defined by the .mk file and prefixed by the uppercased package name: +LIBFOO_*. host-generic-package uses the HOST_LIBFOO_* variables. For +some variables, if the HOST_LIBFOO_ prefixed variable doesn’t exist, +the package infrastructure uses the corresponding variable prefixed +by LIBFOO_. This is done for variables that are likely to have the +same value for both the target and host packages. See below for +details. + +The list of variables that can be set in a .mk file to give metadata +information is (assuming the package name is libfoo) : + + * LIBFOO_VERSION, mandatory, must contain the version of the + package. Note that if HOST_LIBFOO_VERSION doesn’t exist, it is + assumed to be the same as LIBFOO_VERSION. It can also be a + revision number or a tag for packages that are fetched directly + from their version control system. Examples: + + + a version for a release tarball: LIBFOO_VERSION = 0.1.2 + + a sha1 for a git tree: LIBFOO_VERSION = + cb9d6aa9429e838f0e54faa3d455bcbab5eef057 + + a tag for a git tree LIBFOO_VERSION = v0.1.2 + + Note: Using a branch name as FOO_VERSION is not supported, + because it does not and can not work as people would expect + it should: + + 1. due to local caching, Buildroot will not re-fetch the + repository, so people who expect to be able to follow the + remote repository would be quite surprised and + disappointed; + 2. because two builds can never be perfectly simultaneous, + and because the remote repository may get new commits on + the branch anytime, two users, using the same Buildroot + tree and building the same configuration, may get + different source, thus rendering the build non + reproducible, and people would be quite surprised and + disappointed. + * LIBFOO_SOURCE may contain the name of the tarball of the package, + which Buildroot will use to download the tarball from + LIBFOO_SITE. If HOST_LIBFOO_SOURCE is not specified, it defaults + to LIBFOO_SOURCE. If none are specified, then the value is + assumed to be libfoo-$(LIBFOO_VERSION).tar.gz. Example: + LIBFOO_SOURCE = foobar-$(LIBFOO_VERSION).tar.bz2 + * LIBFOO_PATCH may contain a space-separated list of patch file + names, that Buildroot will download and apply to the package + source code. If an entry contains ://, then Buildroot will assume + it is a full URL and download the patch from this location. + Otherwise, Buildroot will assume that the patch should be + downloaded from LIBFOO_SITE. If HOST_LIBFOO_PATCH is not + specified, it defaults to LIBFOO_PATCH. Note that patches that + are included in Buildroot itself use a different mechanism: all + files of the form *.patch present in the package directory inside + Buildroot will be applied to the package after extraction (see + patching a package). Finally, patches listed in the LIBFOO_PATCH + variable are applied before the patches stored in the Buildroot + package directory. + * LIBFOO_SITE provides the location of the package, which can be a + URL or a local filesystem path. HTTP, FTP and SCP are supported + URL types for retrieving package tarballs. In these cases don’t + include a trailing slash: it will be added by Buildroot between + the directory and the filename as appropriate. Git, Subversion, + Mercurial, and Bazaar are supported URL types for retrieving + packages directly from source code management systems. There is a + helper function to make it easier to download source tarballs + from GitHub (refer to Section 18.24.4, “How to add a package from + GitHub” for details). A filesystem path may be used to specify + either a tarball or a directory containing the package source + code. See LIBFOO_SITE_METHOD below for more details on how + retrieval works. Note that SCP URLs should be of the form scp:// + [user@]host:filepath, and that filepath is relative to the user’s + home directory, so you may want to prepend the path with a slash + for absolute paths: scp://[user@]host:/absolutepath. If + HOST_LIBFOO_SITE is not specified, it defaults to LIBFOO_SITE. + Examples: LIBFOO_SITE=http://www.libfoosoftware.org/libfoo + LIBFOO_SITE=http://svn.xiph.org/trunk/Tremor LIBFOO_SITE=/opt/ + software/libfoo.tar.gz LIBFOO_SITE=$(TOPDIR)/../src/libfoo + * LIBFOO_DL_OPTS is a space-separated list of additional options to + pass to the downloader. Useful for retrieving documents with + server-side checking for user logins and passwords, or to use a + proxy. All download methods valid for LIBFOO_SITE_METHOD are + supported; valid options depend on the download method (consult + the man page for the respective download utilities). + * LIBFOO_EXTRA_DOWNLOADS is a space-separated list of additional + files that Buildroot should download. If an entry contains :// + then Buildroot will assume it is a complete URL and will download + the file using this URL. Otherwise, Buildroot will assume the + file to be downloaded is located at LIBFOO_SITE. Buildroot will + not do anything with those additional files, except download + them: it will be up to the package recipe to use them from $ + (LIBFOO_DL_DIR). + * LIBFOO_SITE_METHOD determines the method used to fetch or copy + the package source code. In many cases, Buildroot guesses the + method from the contents of LIBFOO_SITE and setting + LIBFOO_SITE_METHOD is unnecessary. When HOST_LIBFOO_SITE_METHOD + is not specified, it defaults to the value of LIBFOO_SITE_METHOD. + The possible values of LIBFOO_SITE_METHOD are: + + + wget for normal FTP/HTTP downloads of tarballs. Used by + default when LIBFOO_SITE begins with http://, https:// or + ftp://. + + scp for downloads of tarballs over SSH with scp. Used by + default when LIBFOO_SITE begins with scp://. + + svn for retrieving source code from a Subversion repository. + Used by default when LIBFOO_SITE begins with svn://. When a + http:// Subversion repository URL is specified in + LIBFOO_SITE, one must specify LIBFOO_SITE_METHOD=svn. + Buildroot performs a checkout which is preserved as a tarball + in the download cache; subsequent builds use the tarball + instead of performing another checkout. + + cvs for retrieving source code from a CVS repository. Used by + default when LIBFOO_SITE begins with cvs://. The downloaded + source code is cached as with the svn method. Anonymous + pserver mode is assumed otherwise explicitly defined on + LIBFOO_SITE. Both LIBFOO_SITE=cvs://libfoo.net:/cvsroot/ + libfoo and LIBFOO_SITE=cvs://:ext:libfoo.net:/cvsroot/libfoo + are accepted, on the former anonymous pserver access mode is + assumed. LIBFOO_SITE must contain the source URL as well as + the remote repository directory. The module is the package + name. LIBFOO_VERSION is mandatory and must be a tag, a + branch, or a date (e.g. "2014-10-20", "2014-10-20 13:45", + "2014-10-20 13:45+01" see "man cvs" for further details). + + git for retrieving source code from a Git repository. Used by + default when LIBFOO_SITE begins with git://. The downloaded + source code is cached as with the svn method. + + hg for retrieving source code from a Mercurial repository. + One must specify LIBFOO_SITE_METHOD=hg when LIBFOO_SITE + contains a Mercurial repository URL. The downloaded source + code is cached as with the svn method. + + bzr for retrieving source code from a Bazaar repository. Used + by default when LIBFOO_SITE begins with bzr://. The + downloaded source code is cached as with the svn method. + + file for a local tarball. One should use this when + LIBFOO_SITE specifies a package tarball as a local filename. + Useful for software that isn’t available publicly or in + version control. + + local for a local source code directory. One should use this + when LIBFOO_SITE specifies a local directory path containing + the package source code. Buildroot copies the contents of the + source directory into the package’s build directory. Note + that for local packages, no patches are applied. If you need + to still patch the source code, use LIBFOO_POST_RSYNC_HOOKS, + see Section 18.22.1, “Using the POST_RSYNC hook”. + * LIBFOO_GIT_SUBMODULES can be set to YES to create an archive with + the git submodules in the repository. This is only available for + packages downloaded with git (i.e. when LIBFOO_SITE_METHOD=git). + Note that we try not to use such git submodules when they contain + bundled libraries, in which case we prefer to use those libraries + from their own package. + * LIBFOO_STRIP_COMPONENTS is the number of leading components + (directories) that tar must strip from file names on extraction. + The tarball for most packages has one leading component named " + -", thus Buildroot passes + --strip-components=1 to tar to remove it. For non-standard + packages that don’t have this component, or that have more than + one leading component to strip, set this variable with the value + to be passed to tar. Default: 1. + * LIBFOO_EXCLUDES is a space-separated list of patterns to exclude + when extracting the archive. Each item from that list is passed + as a tar’s --exclude option. By default, empty. + * LIBFOO_DEPENDENCIES lists the dependencies (in terms of package + name) that are required for the current target package to + compile. These dependencies are guaranteed to be compiled and + installed before the configuration of the current package starts. + However, modifications to configuration of these dependencies + will not force a rebuild of the current package. In a similar + way, HOST_LIBFOO_DEPENDENCIES lists the dependencies for the + current host package. + * LIBFOO_EXTRACT_DEPENDENCIES lists the dependencies (in terms of + package name) that are required for the current target package to + be extracted. These dependencies are guaranteed to be compiled + and installed before the extract step of the current package + starts. This is only used internally by the package + infrastructure, and should typically not be used directly by + packages. + * LIBFOO_PATCH_DEPENDENCIES lists the dependencies (in terms of + package name) that are required for the current package to be + patched. These dependencies are guaranteed to be extracted and + patched (but not necessarily built) before the current package is + patched. In a similar way, HOST_LIBFOO_PATCH_DEPENDENCIES lists + the dependencies for the current host package. This is seldom + used; usually, LIBFOO_DEPENDENCIES is what you really want to + use. + * LIBFOO_PROVIDES lists all the virtual packages libfoo is an + implementation of. See Section 18.11, “Infrastructure for virtual + packages”. + * LIBFOO_INSTALL_STAGING can be set to YES or NO (default). If set + to YES, then the commands in the LIBFOO_INSTALL_STAGING_CMDS + variables are executed to install the package into the staging + directory. + * LIBFOO_INSTALL_TARGET can be set to YES (default) or NO. If set + to YES, then the commands in the LIBFOO_INSTALL_TARGET_CMDS + variables are executed to install the package into the target + directory. + * LIBFOO_INSTALL_IMAGES can be set to YES or NO (default). If set + to YES, then the commands in the LIBFOO_INSTALL_IMAGES_CMDS + variable are executed to install the package into the images + directory. + * LIBFOO_CONFIG_SCRIPTS lists the names of the files in $ + (STAGING_DIR)/usr/bin that need some special fixing to make them + cross-compiling friendly. Multiple file names separated by space + can be given and all are relative to $(STAGING_DIR)/usr/bin. The + files listed in LIBFOO_CONFIG_SCRIPTS are also removed from $ + (TARGET_DIR)/usr/bin since they are not needed on the target. + * LIBFOO_DEVICES lists the device files to be created by Buildroot + when using the static device table. The syntax to use is the + makedevs one. You can find some documentation for this syntax in + the Chapter 25, Makedev syntax documentation. This variable is + optional. + * LIBFOO_PERMISSIONS lists the changes of permissions to be done at + the end of the build process. The syntax is once again the + makedevs one. You can find some documentation for this syntax in + the Chapter 25, Makedev syntax documentation. This variable is + optional. + * LIBFOO_USERS lists the users to create for this package, if it + installs a program you want to run as a specific user (e.g. as a + daemon, or as a cron-job). The syntax is similar in spirit to the + makedevs one, and is described in the Chapter 26, Makeusers + syntax documentation. This variable is optional. + * LIBFOO_LICENSE defines the license (or licenses) under which the + package is released. This name will appear in the manifest file + produced by make legal-info. If the license appears in the SPDX + License List [https://spdx.org/licenses/], use the SPDX short + identifier to make the manifest file uniform. Otherwise, describe + the license in a precise and concise way, avoiding ambiguous + names such as BSD which actually name a family of licenses. This + variable is optional. If it is not defined, unknown will appear + in the license field of the manifest file for this package. The + expected format for this variable must comply with the following + rules: + + + If different parts of the package are released under + different licenses, then comma separate licenses (e.g. + LIBFOO_LICENSE = GPL-2.0+, LGPL-2.1+). If there is clear + distinction between which component is licensed under what + license, then annotate the license with that component, + between parenthesis (e.g. LIBFOO_LICENSE = GPL-2.0+ + (programs), LGPL-2.1+ (libraries)). + + If some licenses are conditioned on a sub-option being + enabled, append the conditional licenses with a comma (e.g.: + FOO_LICENSE += , GPL-2.0+ (programs)); the infrastructure + will internally remove the space before the comma. + + If the package is dual licensed, then separate licenses with + the or keyword (e.g. LIBFOO_LICENSE = AFL-2.1 or GPL-2.0+). + * LIBFOO_LICENSE_FILES is a space-separated list of files in the + package tarball that contain the license(s) under which the + package is released. make legal-info copies all of these files in + the legal-info directory. See Chapter 13, Legal notice and + licensing for more information. This variable is optional. If it + is not defined, a warning will be produced to let you know, and + not saved will appear in the license files field of the manifest + file for this package. + * LIBFOO_ACTUAL_SOURCE_TARBALL only applies to packages whose + LIBFOO_SITE / LIBFOO_SOURCE pair points to an archive that does + not actually contain source code, but binary code. This a very + uncommon case, only known to apply to external toolchains which + come already compiled, although theoretically it might apply to + other packages. In such cases a separate tarball is usually + available with the actual source code. Set + LIBFOO_ACTUAL_SOURCE_TARBALL to the name of the actual source + code archive and Buildroot will download it and use it when you + run make legal-info to collect legally-relevant material. Note + this file will not be downloaded during regular builds nor by + make source. + * LIBFOO_ACTUAL_SOURCE_SITE provides the location of the actual + source tarball. The default value is LIBFOO_SITE, so you don’t + need to set this variable if the binary and source archives are + hosted on the same directory. If LIBFOO_ACTUAL_SOURCE_TARBALL is + not set, it doesn’t make sense to define + LIBFOO_ACTUAL_SOURCE_SITE. + * LIBFOO_REDISTRIBUTE can be set to YES (default) or NO to indicate + if the package source code is allowed to be redistributed. Set it + to NO for non-opensource packages: Buildroot will not save the + source code for this package when collecting the legal-info. + * LIBFOO_FLAT_STACKSIZE defines the stack size of an application + built into the FLAT binary format. The application stack size on + the NOMMU architecture processors can’t be enlarged at run time. + The default stack size for the FLAT binary format is only 4k + bytes. If the application consumes more stack, append the + required number here. + * LIBFOO_BIN_ARCH_EXCLUDE is a space-separated list of paths + (relative to the target directory) to ignore when checking that + the package installs correctly cross-compiled binaries. You + seldom need to set this variable, unless the package installs + binary blobs outside the default locations, /lib/firmware, /usr/ + lib/firmware, /lib/modules, /usr/lib/modules, and /usr/share, + which are automatically excluded. + * LIBFOO_IGNORE_CVES is a space-separated list of CVEs that tells + Buildroot CVE tracking tools which CVEs should be ignored for + this package. This is typically used when the CVE is fixed by a + patch in the package, or when the CVE for some reason does not + affect the Buildroot package. A Makefile comment must always + precede the addition of a CVE to this variable. Example: + +# 0001-fix-cve-2020-12345.patch +LIBFOO_IGNORE_CVES += CVE-2020-12345 +# only when built with libbaz, which Buildroot doesn't support +LIBFOO_IGNORE_CVES += CVE-2020-54321 + + * LIBFOO_CPE_ID_* variables is a set of variables that allows the + package to define its CPE identifier [https://nvd.nist.gov/ + products/cpe]. The available variables are: + + + LIBFOO_CPE_ID_PREFIX, specifies the prefix of the CPE + identifier, i.e the first three fields. When not defined, the + default value is cpe:2.3:a. + + LIBFOO_CPE_ID_VENDOR, specifies the vendor part of the CPE + identifier. When not defined, the default value is + _project. + + LIBFOO_CPE_ID_PRODUCT, specifies the product part of the CPE + identifier. When not defined, the default value is . + + LIBFOO_CPE_ID_VERSION, specifies the version part of the CPE + identifier. When not defined the default value is $ + (LIBFOO_VERSION). + + LIBFOO_CPE_ID_UPDATE specifies the update part of the CPE + identifier. When not defined the default value is *. + + If any of those variables is defined, then the generic package + infrastructure assumes the package provides valid CPE + information. In this case, the generic package infrastructure + will define LIBFOO_CPE_ID. + + For a host package, if its LIBFOO_CPE_ID_* variables are not + defined, it inherits the value of those variables from the + corresponding target package. + +The recommended way to define these variables is to use the following +syntax: + +LIBFOO_VERSION = 2.32 + +Now, the variables that define what should be performed at the +different steps of the build process. + + * LIBFOO_EXTRACT_CMDS lists the actions to be performed to extract + the package. This is generally not needed as tarballs are + automatically handled by Buildroot. However, if the package uses + a non-standard archive format, such as a ZIP or RAR file, or has + a tarball with a non-standard organization, this variable allows + to override the package infrastructure default behavior. + * LIBFOO_CONFIGURE_CMDS lists the actions to be performed to + configure the package before its compilation. + * LIBFOO_BUILD_CMDS lists the actions to be performed to compile + the package. + * HOST_LIBFOO_INSTALL_CMDS lists the actions to be performed to + install the package, when the package is a host package. The + package must install its files to the directory given by $ + (HOST_DIR). All files, including development files such as + headers should be installed, since other packages might be + compiled on top of this package. + * LIBFOO_INSTALL_TARGET_CMDS lists the actions to be performed to + install the package to the target directory, when the package is + a target package. The package must install its files to the + directory given by $(TARGET_DIR). Only the files required for + execution of the package have to be installed. Header files, + static libraries and documentation will be removed again when the + target filesystem is finalized. + * LIBFOO_INSTALL_STAGING_CMDS lists the actions to be performed to + install the package to the staging directory, when the package is + a target package. The package must install its files to the + directory given by $(STAGING_DIR). All development files should + be installed, since they might be needed to compile other + packages. + * LIBFOO_INSTALL_IMAGES_CMDS lists the actions to be performed to + install the package to the images directory, when the package is + a target package. The package must install its files to the + directory given by $(BINARIES_DIR). Only files that are binary + images (aka images) that do not belong in the TARGET_DIR but are + necessary for booting the board should be placed here. For + example, a package should utilize this step if it has binaries + which would be similar to the kernel image, bootloader or root + filesystem images. + * LIBFOO_INSTALL_INIT_SYSV, LIBFOO_INSTALL_INIT_OPENRC and + LIBFOO_INSTALL_INIT_SYSTEMD list the actions to install init + scripts either for the systemV-like init systems (busybox, + sysvinit, etc.), openrc or for the systemd units. These commands + will be run only when the relevant init system is installed (i.e. + if systemd is selected as the init system in the configuration, + only LIBFOO_INSTALL_INIT_SYSTEMD will be run). The only exception + is when openrc is chosen as init system and + LIBFOO_INSTALL_INIT_OPENRC has not been set, in such situation + LIBFOO_INSTALL_INIT_SYSV will be called, since openrc supports + sysv init scripts. When systemd is used as the init system, + buildroot will automatically enable all services using the + systemctl preset-all command in the final phase of image + building. You can add preset files to prevent a particular unit + from being automatically enabled by buildroot. + * LIBFOO_HELP_CMDS lists the actions to print the package help, + which is included to the main make help output. These commands + can print anything in any format. This is seldom used, as + packages rarely have custom rules. Do not use this variable, + unless you really know that you need to print help. + * LIBFOO_LINUX_CONFIG_FIXUPS lists the Linux kernel configuration + options that are needed to build and use this package, and + without which the package is fundamentally broken. This shall be + a set of calls to one of the kconfig tweaking option: + KCONFIG_ENABLE_OPT, KCONFIG_DISABLE_OPT, or KCONFIG_SET_OPT. This + is seldom used, as package usually have no strict requirements on + the kernel options. + +The preferred way to define these variables is: + +define LIBFOO_CONFIGURE_CMDS + action 1 + action 2 + action 3 +endef + +In the action definitions, you can use the following variables: + + * $(LIBFOO_PKGDIR) contains the path to the directory containing + the libfoo.mk and Config.in files. This variable is useful when + it is necessary to install a file bundled in Buildroot, like a + runtime configuration file, a splashscreen image… + * $(@D), which contains the directory in which the package source + code has been uncompressed. + * $(LIBFOO_DL_DIR) contains the path to the directory where all the + downloads made by Buildroot for libfoo are stored in. + * $(TARGET_CC), $(TARGET_LD), etc. to get the target + cross-compilation utilities + * $(TARGET_CROSS) to get the cross-compilation toolchain prefix + * Of course the $(HOST_DIR), $(STAGING_DIR) and $(TARGET_DIR) + variables to install the packages properly. Those variables point + to the global host, staging and target directories, unless + per-package directory support is used, in which case they point + to the current package host, staging and target directories. In + both cases, it doesn’t make any difference from the package point + of view: it should simply use HOST_DIR, STAGING_DIR and + TARGET_DIR. See Section 8.12, “Top-level parallel build” for more + details about per-package directory support. + +Finally, you can also use hooks. See Section 18.22, “Hooks available +in the various build steps” for more information. + +18.6. Infrastructure for autotools-based packages + +18.6.1. autotools-package tutorial + +First, let’s see how to write a .mk file for an autotools-based +package, with an example : + +01: ################################################################################ +02: # +03: # libfoo +04: # +05: ################################################################################ +06: +07: LIBFOO_VERSION = 1.0 +08: LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz +09: LIBFOO_SITE = http://www.foosoftware.org/download +10: LIBFOO_INSTALL_STAGING = YES +11: LIBFOO_INSTALL_TARGET = NO +12: LIBFOO_CONF_OPTS = --disable-shared +13: LIBFOO_DEPENDENCIES = libglib2 host-pkgconf +14: +15: $(eval $(autotools-package)) + +On line 7, we declare the version of the package. + +On line 8 and 9, we declare the name of the tarball (xz-ed tarball +recommended) and the location of the tarball on the Web. Buildroot +will automatically download the tarball from this location. + +On line 10, we tell Buildroot to install the package to the staging +directory. The staging directory, located in output/staging/ is the +directory where all the packages are installed, including their +development files, etc. By default, packages are not installed to the +staging directory, since usually, only libraries need to be installed +in the staging directory: their development files are needed to +compile other libraries or applications depending on them. Also by +default, when staging installation is enabled, packages are installed +in this location using the make install command. + +On line 11, we tell Buildroot to not install the package to the +target directory. This directory contains what will become the root +filesystem running on the target. For purely static libraries, it is +not necessary to install them in the target directory because they +will not be used at runtime. By default, target installation is +enabled; setting this variable to NO is almost never needed. Also by +default, packages are installed in this location using the make +install command. + +On line 12, we tell Buildroot to pass a custom configure option, that +will be passed to the ./configure script before configuring and +building the package. + +On line 13, we declare our dependencies, so that they are built +before the build process of our package starts. + +Finally, on line line 15, we invoke the autotools-package macro that +generates all the Makefile rules that actually allows the package to +be built. + +18.6.2. autotools-package reference + +The main macro of the autotools package infrastructure is +autotools-package. It is similar to the generic-package macro. The +ability to have target and host packages is also available, with the +host-autotools-package macro. + +Just like the generic infrastructure, the autotools infrastructure +works by defining a number of variables before calling the +autotools-package macro. + +First, all the package metadata information variables that exist in +the generic infrastructure also exist in the autotools +infrastructure: LIBFOO_VERSION, LIBFOO_SOURCE, LIBFOO_PATCH, +LIBFOO_SITE, LIBFOO_SUBDIR, LIBFOO_DEPENDENCIES, +LIBFOO_INSTALL_STAGING, LIBFOO_INSTALL_TARGET. + +A few additional variables, specific to the autotools infrastructure, +can also be defined. Many of them are only useful in very specific +cases, typical packages will therefore only use a few of them. + + * LIBFOO_SUBDIR may contain the name of a subdirectory inside the + package that contains the configure script. This is useful, if + for example, the main configure script is not at the root of the + tree extracted by the tarball. If HOST_LIBFOO_SUBDIR is not + specified, it defaults to LIBFOO_SUBDIR. + * LIBFOO_CONF_ENV, to specify additional environment variables to + pass to the configure script. By default, empty. + * LIBFOO_CONF_OPTS, to specify additional configure options to pass + to the configure script. By default, empty. + * LIBFOO_MAKE, to specify an alternate make command. This is + typically useful when parallel make is enabled in the + configuration (using BR2_JLEVEL) but that this feature should be + disabled for the given package, for one reason or another. By + default, set to $(MAKE). If parallel building is not supported by + the package, then it should be set to LIBFOO_MAKE=$(MAKE1). + * LIBFOO_MAKE_ENV, to specify additional environment variables to + pass to make in the build step. These are passed before the make + command. By default, empty. + * LIBFOO_MAKE_OPTS, to specify additional variables to pass to make + in the build step. These are passed after the make command. By + default, empty. + * LIBFOO_AUTORECONF, tells whether the package should be + autoreconfigured or not (i.e. if the configure script and + Makefile.in files should be re-generated by re-running autoconf, + automake, libtool, etc.). Valid values are YES and NO. By + default, the value is NO + * LIBFOO_AUTORECONF_ENV, to specify additional environment + variables to pass to the autoreconf program if LIBFOO_AUTORECONF= + YES. These are passed in the environment of the autoreconf + command. By default, empty. + * LIBFOO_AUTORECONF_OPTS to specify additional options passed to + the autoreconf program if LIBFOO_AUTORECONF=YES. By default, + empty. + * LIBFOO_GETTEXTIZE, tells whether the package should be + gettextized or not (i.e. if the package uses a different gettext + version than Buildroot provides, and it is needed to run + gettextize.) Only valid when LIBFOO_AUTORECONF=YES. Valid values + are YES and NO. The default is NO. + * LIBFOO_GETTEXTIZE_OPTS, to specify additional options passed to + the gettextize program, if LIBFOO_GETTEXTIZE=YES. You may use + that if, for example, the .po files are not located in the + standard place (i.e. in po/ at the root of the package.) By + default, -f. + * LIBFOO_LIBTOOL_PATCH tells whether the Buildroot patch to fix + libtool cross-compilation issues should be applied or not. Valid + values are YES and NO. By default, the value is YES + * LIBFOO_INSTALL_STAGING_OPTS contains the make options used to + install the package to the staging directory. By default, the + value is DESTDIR=$(STAGING_DIR) install, which is correct for + most autotools packages. It is still possible to override it. + * LIBFOO_INSTALL_TARGET_OPTS contains the make options used to + install the package to the target directory. By default, the + value is DESTDIR=$(TARGET_DIR) install. The default value is + correct for most autotools packages, but it is still possible to + override it if needed. + +With the autotools infrastructure, all the steps required to build +and install the packages are already defined, and they generally work +well for most autotools-based packages. However, when required, it is +still possible to customize what is done in any particular step: + + * By adding a post-operation hook (after extract, patch, configure, + build or install). See Section 18.22, “Hooks available in the + various build steps” for details. + * By overriding one of the steps. For example, even if the + autotools infrastructure is used, if the package .mk file defines + its own LIBFOO_CONFIGURE_CMDS variable, it will be used instead + of the default autotools one. However, using this method should + be restricted to very specific cases. Do not use it in the + general case. + +18.7. Infrastructure for CMake-based packages + +18.7.1. cmake-package tutorial + +First, let’s see how to write a .mk file for a CMake-based package, +with an example : + +01: ################################################################################ +02: # +03: # libfoo +04: # +05: ################################################################################ +06: +07: LIBFOO_VERSION = 1.0 +08: LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz +09: LIBFOO_SITE = http://www.foosoftware.org/download +10: LIBFOO_INSTALL_STAGING = YES +11: LIBFOO_INSTALL_TARGET = NO +12: LIBFOO_CONF_OPTS = -DBUILD_DEMOS=ON +13: LIBFOO_DEPENDENCIES = libglib2 host-pkgconf +14: +15: $(eval $(cmake-package)) + +On line 7, we declare the version of the package. + +On line 8 and 9, we declare the name of the tarball (xz-ed tarball +recommended) and the location of the tarball on the Web. Buildroot +will automatically download the tarball from this location. + +On line 10, we tell Buildroot to install the package to the staging +directory. The staging directory, located in output/staging/ is the +directory where all the packages are installed, including their +development files, etc. By default, packages are not installed to the +staging directory, since usually, only libraries need to be installed +in the staging directory: their development files are needed to +compile other libraries or applications depending on them. Also by +default, when staging installation is enabled, packages are installed +in this location using the make install command. + +On line 11, we tell Buildroot to not install the package to the +target directory. This directory contains what will become the root +filesystem running on the target. For purely static libraries, it is +not necessary to install them in the target directory because they +will not be used at runtime. By default, target installation is +enabled; setting this variable to NO is almost never needed. Also by +default, packages are installed in this location using the make +install command. + +On line 12, we tell Buildroot to pass custom options to CMake when it +is configuring the package. + +On line 13, we declare our dependencies, so that they are built +before the build process of our package starts. + +Finally, on line line 15, we invoke the cmake-package macro that +generates all the Makefile rules that actually allows the package to +be built. + +18.7.2. cmake-package reference + +The main macro of the CMake package infrastructure is cmake-package. +It is similar to the generic-package macro. The ability to have +target and host packages is also available, with the +host-cmake-package macro. + +Just like the generic infrastructure, the CMake infrastructure works +by defining a number of variables before calling the cmake-package +macro. + +First, all the package metadata information variables that exist in +the generic infrastructure also exist in the CMake infrastructure: +LIBFOO_VERSION, LIBFOO_SOURCE, LIBFOO_PATCH, LIBFOO_SITE, +LIBFOO_SUBDIR, LIBFOO_DEPENDENCIES, LIBFOO_INSTALL_STAGING, +LIBFOO_INSTALL_TARGET. + +A few additional variables, specific to the CMake infrastructure, can +also be defined. Many of them are only useful in very specific cases, +typical packages will therefore only use a few of them. + + * LIBFOO_SUBDIR may contain the name of a subdirectory inside the + package that contains the main CMakeLists.txt file. This is + useful, if for example, the main CMakeLists.txt file is not at + the root of the tree extracted by the tarball. If + HOST_LIBFOO_SUBDIR is not specified, it defaults to + LIBFOO_SUBDIR. + * LIBFOO_CONF_ENV, to specify additional environment variables to + pass to CMake. By default, empty. + * LIBFOO_CONF_OPTS, to specify additional configure options to pass + to CMake. By default, empty. A number of common CMake options are + set by the cmake-package infrastructure; so it is normally not + necessary to set them in the package’s *.mk file unless you want + to override them: + + + CMAKE_BUILD_TYPE is driven by BR2_ENABLE_DEBUG; + + CMAKE_INSTALL_PREFIX; + + BUILD_SHARED_LIBS is driven by BR2_STATIC_LIBS; + + BUILD_DOC, BUILD_DOCS are disabled; + + BUILD_EXAMPLE, BUILD_EXAMPLES are disabled; + + BUILD_TEST, BUILD_TESTS, BUILD_TESTING are disabled. + * LIBFOO_SUPPORTS_IN_SOURCE_BUILD = NO should be set when the + package cannot be built inside the source tree but needs a + separate build directory. + * LIBFOO_MAKE, to specify an alternate make command. This is + typically useful when parallel make is enabled in the + configuration (using BR2_JLEVEL) but that this feature should be + disabled for the given package, for one reason or another. By + default, set to $(MAKE). If parallel building is not supported by + the package, then it should be set to LIBFOO_MAKE=$(MAKE1). + * LIBFOO_MAKE_ENV, to specify additional environment variables to + pass to make in the build step. These are passed before the make + command. By default, empty. + * LIBFOO_MAKE_OPTS, to specify additional variables to pass to make + in the build step. These are passed after the make command. By + default, empty. + * LIBFOO_INSTALL_OPTS contains the make options used to install the + package to the host directory. By default, the value is install, + which is correct for most CMake packages. It is still possible to + override it. + * LIBFOO_INSTALL_STAGING_OPTS contains the make options used to + install the package to the staging directory. By default, the + value is DESTDIR=$(STAGING_DIR) install/fast, which is correct + for most CMake packages. It is still possible to override it. + * LIBFOO_INSTALL_TARGET_OPTS contains the make options used to + install the package to the target directory. By default, the + value is DESTDIR=$(TARGET_DIR) install/fast. The default value is + correct for most CMake packages, but it is still possible to + override it if needed. + +With the CMake infrastructure, all the steps required to build and +install the packages are already defined, and they generally work +well for most CMake-based packages. However, when required, it is +still possible to customize what is done in any particular step: + + * By adding a post-operation hook (after extract, patch, configure, + build or install). See Section 18.22, “Hooks available in the + various build steps” for details. + * By overriding one of the steps. For example, even if the CMake + infrastructure is used, if the package .mk file defines its own + LIBFOO_CONFIGURE_CMDS variable, it will be used instead of the + default CMake one. However, using this method should be + restricted to very specific cases. Do not use it in the general + case. + +18.8. Infrastructure for Python packages + +This infrastructure applies to Python packages that use the standard +Python setuptools mechanism as their build system, generally +recognizable by the usage of a setup.py script. + +18.8.1. python-package tutorial + +First, let’s see how to write a .mk file for a Python package, with +an example : + +01: ################################################################################ +02: # +03: # python-foo +04: # +05: ################################################################################ +06: +07: PYTHON_FOO_VERSION = 1.0 +08: PYTHON_FOO_SOURCE = python-foo-$(PYTHON_FOO_VERSION).tar.xz +09: PYTHON_FOO_SITE = http://www.foosoftware.org/download +10: PYTHON_FOO_LICENSE = BSD-3-Clause +11: PYTHON_FOO_LICENSE_FILES = LICENSE +12: PYTHON_FOO_ENV = SOME_VAR=1 +13: PYTHON_FOO_DEPENDENCIES = libmad +14: PYTHON_FOO_SETUP_TYPE = distutils +15: +16: $(eval $(python-package)) + +On line 7, we declare the version of the package. + +On line 8 and 9, we declare the name of the tarball (xz-ed tarball +recommended) and the location of the tarball on the Web. Buildroot +will automatically download the tarball from this location. + +On line 10 and 11, we give licensing details about the package (its +license on line 10, and the file containing the license text on line +11). + +On line 12, we tell Buildroot to pass custom options to the Python +setup.py script when it is configuring the package. + +On line 13, we declare our dependencies, so that they are built +before the build process of our package starts. + +On line 14, we declare the specific Python build system being used. +In this case the distutils Python build system is used. The two +supported ones are distutils and setuptools. + +Finally, on line 16, we invoke the python-package macro that +generates all the Makefile rules that actually allow the package to +be built. + +18.8.2. python-package reference + +As a policy, packages that merely provide Python modules should all +be named python- in Buildroot. Other packages that use the +Python build system, but are not Python modules, can freely choose +their name (existing examples in Buildroot are scons and supervisor). + +Packages that are only compatible with one version of Python (as in: +Python 2 or Python 3) should depend on that version explicitely in +their Config.in file (BR2_PACKAGE_PYTHON for Python 2, +BR2_PACKAGE_PYTHON3 for Python 3). Packages that are compatible with +both versions should not explicitely depend on them in their +Config.in file, since that condition is already expressed for the +whole "External python modules" menu. + +The main macro of the Python package infrastructure is +python-package. It is similar to the generic-package macro. It is +also possible to create Python host packages with the +host-python-package macro. + +Just like the generic infrastructure, the Python infrastructure works +by defining a number of variables before calling the python-package +or host-python-package macros. + +All the package metadata information variables that exist in the +generic package infrastructure also exist in the Python +infrastructure: PYTHON_FOO_VERSION, PYTHON_FOO_SOURCE, +PYTHON_FOO_PATCH, PYTHON_FOO_SITE, PYTHON_FOO_SUBDIR, +PYTHON_FOO_DEPENDENCIES, PYTHON_FOO_LICENSE, +PYTHON_FOO_LICENSE_FILES, PYTHON_FOO_INSTALL_STAGING, etc. + +Note that: + + * It is not necessary to add python or host-python in the + PYTHON_FOO_DEPENDENCIES variable of a package, since these basic + dependencies are automatically added as needed by the Python + package infrastructure. + * Similarly, it is not needed to add host-setuptools to + PYTHON_FOO_DEPENDENCIES for setuptools-based packages, since it’s + automatically added by the Python infrastructure as needed. + +One variable specific to the Python infrastructure is mandatory: + + * PYTHON_FOO_SETUP_TYPE, to define which Python build system is + used by the package. The two supported values are distutils and + setuptools. If you don’t know which one is used in your package, + look at the setup.py file in your package source code, and see + whether it imports things from the distutils module or the + setuptools module. + +A few additional variables, specific to the Python infrastructure, +can optionally be defined, depending on the package’s needs. Many of +them are only useful in very specific cases, typical packages will +therefore only use a few of them, or none. + + * PYTHON_FOO_SUBDIR may contain the name of a subdirectory inside + the package that contains the main setup.py file. This is useful, + if for example, the main setup.py file is not at the root of the + tree extracted by the tarball. If HOST_PYTHON_FOO_SUBDIR is not + specified, it defaults to PYTHON_FOO_SUBDIR. + * PYTHON_FOO_ENV, to specify additional environment variables to + pass to the Python setup.py script (for both the build and + install steps). Note that the infrastructure is automatically + passing several standard variables, defined in + PKG_PYTHON_DISTUTILS_ENV (for distutils target packages), + HOST_PKG_PYTHON_DISTUTILS_ENV (for distutils host packages), + PKG_PYTHON_SETUPTOOLS_ENV (for setuptools target packages) and + HOST_PKG_PYTHON_SETUPTOOLS_ENV (for setuptools host packages). + * PYTHON_FOO_BUILD_OPTS, to specify additional options to pass to + the Python setup.py script during the build step. For target + distutils packages, the PKG_PYTHON_DISTUTILS_BUILD_OPTS options + are already passed automatically by the infrastructure. + * PYTHON_FOO_INSTALL_TARGET_OPTS, PYTHON_FOO_INSTALL_STAGING_OPTS, + HOST_PYTHON_FOO_INSTALL_OPTS to specify additional options to + pass to the Python setup.py script during the target installation + step, the staging installation step or the host installation, + respectively. Note that the infrastructure is automatically + passing some options, defined in + PKG_PYTHON_DISTUTILS_INSTALL_TARGET_OPTS or + PKG_PYTHON_DISTUTILS_INSTALL_STAGING_OPTS (for target distutils + packages), HOST_PKG_PYTHON_DISTUTILS_INSTALL_OPTS (for host + distutils packages), PKG_PYTHON_SETUPTOOLS_INSTALL_TARGET_OPTS or + PKG_PYTHON_SETUPTOOLS_INSTALL_STAGING_OPTS (for target setuptools + packages) and HOST_PKG_PYTHON_SETUPTOOLS_INSTALL_OPTS (for host + setuptools packages). + * HOST_PYTHON_FOO_NEEDS_HOST_PYTHON, to define the host python + interpreter. The usage of this variable is limited to host + packages. The two supported value are python2 and python3. It + will ensure the right host python package is available and will + invoke it for the build. If some build steps are overloaded, the + right python interpreter must be explicitly called in the + commands. + +With the Python infrastructure, all the steps required to build and +install the packages are already defined, and they generally work +well for most Python-based packages. However, when required, it is +still possible to customize what is done in any particular step: + + * By adding a post-operation hook (after extract, patch, configure, + build or install). See Section 18.22, “Hooks available in the + various build steps” for details. + * By overriding one of the steps. For example, even if the Python + infrastructure is used, if the package .mk file defines its own + PYTHON_FOO_BUILD_CMDS variable, it will be used instead of the + default Python one. However, using this method should be + restricted to very specific cases. Do not use it in the general + case. + +18.8.3. Generating a python-package from a PyPI repository + +If the Python package for which you would like to create a Buildroot +package is available on PyPI, you may want to use the scanpypi tool +located in utils/ to automate the process. + +You can find the list of existing PyPI packages here [https:// +pypi.python.org]. + +scanpypi requires Python’s setuptools package to be installed on your +host. + +When at the root of your buildroot directory just do : + +utils/scanpypi foo bar -o package + +This will generate packages python-foo and python-bar in the package +folder if they exist on https://pypi.python.org. + +Find the external python modules menu and insert your package inside. +Keep in mind that the items inside a menu should be in alphabetical +order. + +Please keep in mind that you’ll most likely have to manually check +the package for any mistakes as there are things that cannot be +guessed by the generator (e.g. dependencies on any of the python core +modules such as BR2_PACKAGE_PYTHON_ZLIB). Also, please take note that +the license and license files are guessed and must be checked. You +also need to manually add the package to the package/Config.in file. + +If your Buildroot package is not in the official Buildroot tree but +in a br2-external tree, use the -o flag as follows: + +utils/scanpypi foo bar -o other_package_dir + +This will generate packages python-foo and python-bar in the +other_package_directory instead of package. + +Option -h will list the available options: + +utils/scanpypi -h + +18.8.4. python-package CFFI backend + +C Foreign Function Interface for Python (CFFI) provides a convenient +and reliable way to call compiled C code from Python using interface +declarations written in C. Python packages relying on this backend +can be identified by the appearance of a cffi dependency in the +install_requires field of their setup.py file. + +Such a package should: + + * add python-cffi as a runtime dependency in order to install the + compiled C library wrapper on the target. This is achieved by + adding select BR2_PACKAGE_PYTHON_CFFI to the package Config.in. + +config BR2_PACKAGE_PYTHON_FOO + bool "python-foo" + select BR2_PACKAGE_PYTHON_CFFI # runtime + + * add host-python-cffi as a build-time dependency in order to + cross-compile the C wrapper. This is achieved by adding + host-python-cffi to the PYTHON_FOO_DEPENDENCIES variable. + +################################################################################ +# +# python-foo +# +################################################################################ + +... + +PYTHON_FOO_DEPENDENCIES = host-python-cffi + +$(eval $(python-package)) + +18.9. Infrastructure for LuaRocks-based packages + +18.9.1. luarocks-package tutorial + +First, let’s see how to write a .mk file for a LuaRocks-based +package, with an example : + +01: ################################################################################ +02: # +03: # lua-foo +04: # +05: ################################################################################ +06: +07: LUA_FOO_VERSION = 1.0.2-1 +08: LUA_FOO_NAME_UPSTREAM = foo +09: LUA_FOO_DEPENDENCIES = bar +10: +11: LUA_FOO_BUILD_OPTS += BAR_INCDIR=$(STAGING_DIR)/usr/include +12: LUA_FOO_BUILD_OPTS += BAR_LIBDIR=$(STAGING_DIR)/usr/lib +13: LUA_FOO_LICENSE = luaFoo license +14: LUA_FOO_LICENSE_FILES = $(LUA_FOO_SUBDIR)/COPYING +15: +16: $(eval $(luarocks-package)) + +On line 7, we declare the version of the package (the same as in the +rockspec, which is the concatenation of the upstream version and the +rockspec revision, separated by a hyphen -). + +On line 8, we declare that the package is called "foo" on LuaRocks. +In Buildroot, we give Lua-related packages a name that starts with +"lua", so the Buildroot name is different from the upstream name. +LUA_FOO_NAME_UPSTREAM makes the link between the two names. + +On line 9, we declare our dependencies against native libraries, so +that they are built before the build process of our package starts. + +On lines 11-12, we tell Buildroot to pass custom options to LuaRocks +when it is building the package. + +On lines 13-14, we specify the licensing terms for the package. + +Finally, on line 16, we invoke the luarocks-package macro that +generates all the Makefile rules that actually allows the package to +be built. + +Most of these details can be retrieved from the rock and rockspec. +So, this file and the Config.in file can be generated by running the +command luarocks buildroot foo lua-foo in the Buildroot directory. +This command runs a specific Buildroot addon of luarocks that will +automatically generate a Buildroot package. The result must still be +manually inspected and possibly modified. + + * The package/Config.in file has to be updated manually to include + the generated Config.in files. + +18.9.2. luarocks-package reference + +LuaRocks is a deployment and management system for Lua modules, and +supports various build.type: builtin, make and cmake. In the context +of Buildroot, the luarocks-package infrastructure only supports the +builtin mode. LuaRocks packages that use the make or cmake build +mechanisms should instead be packaged using the generic-package and +cmake-package infrastructures in Buildroot, respectively. + +The main macro of the LuaRocks package infrastructure is +luarocks-package: like generic-package it works by defining a number +of variables providing metadata information about the package, and +then calling luarocks-package. + +Just like the generic infrastructure, the LuaRocks infrastructure +works by defining a number of variables before calling the +luarocks-package macro. + +First, all the package metadata information variables that exist in +the generic infrastructure also exist in the LuaRocks infrastructure: +LUA_FOO_VERSION, LUA_FOO_SOURCE, LUA_FOO_SITE, LUA_FOO_DEPENDENCIES, +LUA_FOO_LICENSE, LUA_FOO_LICENSE_FILES. + +Two of them are populated by the LuaRocks infrastructure (for the +download step). If your package is not hosted on the LuaRocks mirror +$(BR2_LUAROCKS_MIRROR), you can override them: + + * LUA_FOO_SITE, which defaults to $(BR2_LUAROCKS_MIRROR) + * LUA_FOO_SOURCE, which defaults to $(lowercase + LUA_FOO_NAME_UPSTREAM)-$(LUA_FOO_VERSION).src.rock + +A few additional variables, specific to the LuaRocks infrastructure, +are also defined. They can be overridden in specific cases. + + * LUA_FOO_NAME_UPSTREAM, which defaults to lua-foo, i.e. the + Buildroot package name + * LUA_FOO_ROCKSPEC, which defaults to $(lowercase + LUA_FOO_NAME_UPSTREAM)-$(LUA_FOO_VERSION).rockspec + * LUA_FOO_SUBDIR, which defaults to $(LUA_FOO_NAME_UPSTREAM)-$ + (LUA_FOO_VERSION_WITHOUT_ROCKSPEC_REVISION) + * LUA_FOO_BUILD_OPTS contains additional build options for the + luarocks build call. + +18.10. Infrastructure for Perl/CPAN packages + +18.10.1. perl-package tutorial + +First, let’s see how to write a .mk file for a Perl/CPAN package, +with an example : + +01: ################################################################################ +02: # +03: # perl-foo-bar +04: # +05: ################################################################################ +06: +07: PERL_FOO_BAR_VERSION = 0.02 +08: PERL_FOO_BAR_SOURCE = Foo-Bar-$(PERL_FOO_BAR_VERSION).tar.gz +09: PERL_FOO_BAR_SITE = $(BR2_CPAN_MIRROR)/authors/id/M/MO/MONGER +10: PERL_FOO_BAR_DEPENDENCIES = perl-strictures +11: PERL_FOO_BAR_LICENSE = Artistic or GPL-1.0+ +12: PERL_FOO_BAR_LICENSE_FILES = LICENSE +13: PERL_FOO_BAR_DISTNAME = Foo-Bar +14: +15: $(eval $(perl-package)) + +On line 7, we declare the version of the package. + +On line 8 and 9, we declare the name of the tarball and the location +of the tarball on a CPAN server. Buildroot will automatically +download the tarball from this location. + +On line 10, we declare our dependencies, so that they are built +before the build process of our package starts. + +On line 11 and 12, we give licensing details about the package (its +license on line 11, and the file containing the license text on line +12). + +On line 13, the name of the distribution as needed by the script +utils/scancpan (in order to regenerate/upgrade these package files). + +Finally, on line 15, we invoke the perl-package macro that generates +all the Makefile rules that actually allow the package to be built. + +Most of these data can be retrieved from https://metacpan.org/. So, +this file and the Config.in can be generated by running the script +utils/scancpan Foo-Bar in the Buildroot directory (or in a +br2-external tree). This script creates a Config.in file and +foo-bar.mk file for the requested package, and also recursively for +all dependencies specified by CPAN. You should still manually edit +the result. In particular, the following things should be checked. + + * If the perl module links with a shared library that is provided + by another (non-perl) package, this dependency is not added + automatically. It has to be added manually to + PERL_FOO_BAR_DEPENDENCIES. + * The package/Config.in file has to be updated manually to include + the generated Config.in files. As a hint, the scancpan script + prints out the required source "…" statements, sorted + alphabetically. + +18.10.2. perl-package reference + +As a policy, packages that provide Perl/CPAN modules should all be +named perl- in Buildroot. + +This infrastructure handles various Perl build systems : +ExtUtils-MakeMaker (EUMM), Module-Build (MB) and Module-Build-Tiny. +Build.PL is preferred by default when a package provides a +Makefile.PL and a Build.PL. + +The main macro of the Perl/CPAN package infrastructure is +perl-package. It is similar to the generic-package macro. The ability +to have target and host packages is also available, with the +host-perl-package macro. + +Just like the generic infrastructure, the Perl/CPAN infrastructure +works by defining a number of variables before calling the +perl-package macro. + +First, all the package metadata information variables that exist in +the generic infrastructure also exist in the Perl/CPAN +infrastructure: PERL_FOO_VERSION, PERL_FOO_SOURCE, PERL_FOO_PATCH, +PERL_FOO_SITE, PERL_FOO_SUBDIR, PERL_FOO_DEPENDENCIES, +PERL_FOO_INSTALL_TARGET. + +Note that setting PERL_FOO_INSTALL_STAGING to YES has no effect +unless a PERL_FOO_INSTALL_STAGING_CMDS variable is defined. The perl +infrastructure doesn’t define these commands since Perl modules +generally don’t need to be installed to the staging directory. + +A few additional variables, specific to the Perl/CPAN infrastructure, +can also be defined. Many of them are only useful in very specific +cases, typical packages will therefore only use a few of them. + + * PERL_FOO_PREFER_INSTALLER/HOST_PERL_FOO_PREFER_INSTALLER, + specifies the preferred installation method. Possible values are + EUMM (for Makefile.PL based installation using + ExtUtils-MakeMaker) and MB (for Build.PL based installation using + Module-Build). This variable is only used when the package + provides both installation methods. + * PERL_FOO_CONF_ENV/HOST_PERL_FOO_CONF_ENV, to specify additional + environment variables to pass to the perl Makefile.PL or perl + Build.PL. By default, empty. + * PERL_FOO_CONF_OPTS/HOST_PERL_FOO_CONF_OPTS, to specify additional + configure options to pass to the perl Makefile.PL or perl + Build.PL. By default, empty. + * PERL_FOO_BUILD_OPTS/HOST_PERL_FOO_BUILD_OPTS, to specify + additional options to pass to make pure_all or perl Build build + in the build step. By default, empty. + * PERL_FOO_INSTALL_TARGET_OPTS, to specify additional options to + pass to make pure_install or perl Build install in the install + step. By default, empty. + * HOST_PERL_FOO_INSTALL_OPTS, to specify additional options to pass + to make pure_install or perl Build install in the install step. + By default, empty. + +18.11. Infrastructure for virtual packages + +In Buildroot, a virtual package is a package whose functionalities +are provided by one or more packages, referred to as providers. The +virtual package management is an extensible mechanism allowing the +user to choose the provider used in the rootfs. + +For example, OpenGL ES is an API for 2D and 3D graphics on embedded +systems. The implementation of this API is different for the +Allwinner Tech Sunxi and the Texas Instruments OMAP35xx platforms. So +libgles will be a virtual package and sunxi-mali and ti-gfx will be +the providers. + +18.11.1. virtual-package tutorial + +In the following example, we will explain how to add a new virtual +package (something-virtual) and a provider for it (some-provider). + +First, let’s create the virtual package. + +18.11.2. Virtual package’s Config.in file + +The Config.in file of virtual package something-virtual should +contain: + +01: config BR2_PACKAGE_HAS_SOMETHING_VIRTUAL +02: bool +03: +04: config BR2_PACKAGE_PROVIDES_SOMETHING_VIRTUAL +05: depends on BR2_PACKAGE_HAS_SOMETHING_VIRTUAL +06: string + +In this file, we declare two options, +BR2_PACKAGE_HAS_SOMETHING_VIRTUAL and +BR2_PACKAGE_PROVIDES_SOMETHING_VIRTUAL, whose values will be used by +the providers. + +18.11.3. Virtual package’s .mk file + +The .mk for the virtual package should just evaluate the +virtual-package macro: + +01: ################################################################################ +02: # +03: # something-virtual +04: # +05: ################################################################################ +06: +07: $(eval $(virtual-package)) + +The ability to have target and host packages is also available, with +the host-virtual-package macro. + +18.11.4. Provider’s Config.in file + +When adding a package as a provider, only the Config.in file requires +some modifications. + +The Config.in file of the package some-provider, which provides the +functionalities of something-virtual, should contain: + +01: config BR2_PACKAGE_SOME_PROVIDER +02: bool "some-provider" +03: select BR2_PACKAGE_HAS_SOMETHING_VIRTUAL +04: help +05: This is a comment that explains what some-provider is. +06: +07: http://foosoftware.org/some-provider/ +08: +09: if BR2_PACKAGE_SOME_PROVIDER +10: config BR2_PACKAGE_PROVIDES_SOMETHING_VIRTUAL +11: default "some-provider" +12: endif + +On line 3, we select BR2_PACKAGE_HAS_SOMETHING_VIRTUAL, and on line +11, we set the value of BR2_PACKAGE_PROVIDES_SOMETHING_VIRTUAL to the +name of the provider, but only if it is selected. + +18.11.5. Provider’s .mk file + +The .mk file should also declare an additional variable +SOME_PROVIDER_PROVIDES to contain the names of all the virtual +packages it is an implementation of: + +01: SOME_PROVIDER_PROVIDES = something-virtual + +Of course, do not forget to add the proper build and runtime +dependencies for this package! + +18.11.6. Notes on depending on a virtual package + +When adding a package that requires a certain FEATURE provided by a +virtual package, you have to use depends on BR2_PACKAGE_HAS_FEATURE, +like so: + +config BR2_PACKAGE_HAS_FEATURE + bool + +config BR2_PACKAGE_FOO + bool "foo" + depends on BR2_PACKAGE_HAS_FEATURE + +18.11.7. Notes on depending on a specific provider + +If your package really requires a specific provider, then you’ll have +to make your package depends on this provider; you can not select a +provider. + +Let’s take an example with two providers for a FEATURE: + +config BR2_PACKAGE_HAS_FEATURE + bool + +config BR2_PACKAGE_FOO + bool "foo" + select BR2_PACKAGE_HAS_FEATURE + +config BR2_PACKAGE_BAR + bool "bar" + select BR2_PACKAGE_HAS_FEATURE + +And you are adding a package that needs FEATURE as provided by foo, +but not as provided by bar. + +If you were to use select BR2_PACKAGE_FOO, then the user would still +be able to select BR2_PACKAGE_BAR in the menuconfig. This would +create a configuration inconsistency, whereby two providers of the +same FEATURE would be enabled at once, one explicitly set by the +user, the other implicitly by your select. + +Instead, you have to use depends on BR2_PACKAGE_FOO, which avoids any +implicit configuration inconsistency. + +18.12. Infrastructure for packages using kconfig for configuration +files + +A popular way for a software package to handle user-specified +configuration is kconfig. Among others, it is used by the Linux +kernel, Busybox, and Buildroot itself. The presence of a .config file +and a menuconfig target are two well-known symptoms of kconfig being +used. + +Buildroot features an infrastructure for packages that use kconfig +for their configuration. This infrastructure provides the necessary +logic to expose the package’s menuconfig target as foo-menuconfig in +Buildroot, and to handle the copying back and forth of the +configuration file in a correct way. + +The kconfig-package infrastructure is based on the generic-package +infrastructure. All variables supported by generic-package are +available in kconfig-package as well. See Section 18.5.2, +“generic-package reference” for more details. + +In order to use the kconfig-package infrastructure for a Buildroot +package, the minimally required lines in the .mk file, in addition to +the variables required by the generic-package infrastructure, are: + +FOO_KCONFIG_FILE = reference-to-source-configuration-file + +$(eval $(kconfig-package)) + +This snippet creates the following make targets: + + * foo-menuconfig, which calls the package’s menuconfig target + * foo-update-config, which copies the configuration back to the + source configuration file. It is not possible to use this target + when fragment files are set. + * foo-update-defconfig, which copies the configuration back to the + source configuration file. The configuration file will only list + the options that differ from the default values. It is not + possible to use this target when fragment files are set. + * foo-diff-config, which outputs the differences between the + current configuration and the one defined in the Buildroot + configuration for this kconfig package. The output is useful to + identify the configuration changes that may have to be propagated + to configuration fragments for example. + +and ensures that the source configuration file is copied to the build +directory at the right moment. + +There are two options to specify a configuration file to use, either +FOO_KCONFIG_FILE (as in the example, above) or FOO_KCONFIG_DEFCONFIG. +It is mandatory to provide either, but not both: + + * FOO_KCONFIG_FILE specifies the path to a defconfig or full-config + file to be used to configure the package. + * FOO_KCONFIG_DEFCONFIG specifies the defconfig make rule to call + to configure the package. + +In addition to these minimally required lines, several optional +variables can be set to suit the needs of the package under +consideration: + + * FOO_KCONFIG_EDITORS: a space-separated list of kconfig editors to + support, for example menuconfig xconfig. By default, menuconfig. + * FOO_KCONFIG_FRAGMENT_FILES: a space-separated list of + configuration fragment files that are merged to the main + configuration file. Fragment files are typically used when there + is a desire to stay in sync with an upstream (def)config file, + with some minor modifications. + * FOO_KCONFIG_OPTS: extra options to pass when calling the kconfig + editors. This may need to include $(FOO_MAKE_OPTS), for example. + By default, empty. + * FOO_KCONFIG_FIXUP_CMDS: a list of shell commands needed to fixup + the configuration file after copying it or running a kconfig + editor. Such commands may be needed to ensure a configuration + consistent with other configuration of Buildroot, for example. By + default, empty. + * FOO_KCONFIG_DOTCONFIG: path (with filename) of the .config file, + relative to the package source tree. The default, .config, should + be well suited for all packages that use the standard kconfig + infrastructure as inherited from the Linux kernel; some packages + use a derivative of kconfig that use a different location. + * FOO_KCONFIG_DEPENDENCIES: the list of packages (most probably, + host packages) that need to be built before this package’s + kconfig is interpreted. Seldom used. By default, empty. + +18.13. Infrastructure for rebar-based packages + +18.13.1. rebar-package tutorial + +First, let’s see how to write a .mk file for a rebar-based package, +with an example : + +01: ################################################################################ +02: # +03: # erlang-foobar +04: # +05: ################################################################################ +06: +07: ERLANG_FOOBAR_VERSION = 1.0 +08: ERLANG_FOOBAR_SOURCE = erlang-foobar-$(ERLANG_FOOBAR_VERSION).tar.xz +09: ERLANG_FOOBAR_SITE = http://www.foosoftware.org/download +10: ERLANG_FOOBAR_DEPENDENCIES = host-libaaa libbbb +11: +12: $(eval $(rebar-package)) + +On line 7, we declare the version of the package. + +On line 8 and 9, we declare the name of the tarball (xz-ed tarball +recommended) and the location of the tarball on the Web. Buildroot +will automatically download the tarball from this location. + +On line 10, we declare our dependencies, so that they are built +before the build process of our package starts. + +Finally, on line 12, we invoke the rebar-package macro that generates +all the Makefile rules that actually allows the package to be built. + +18.13.2. rebar-package reference + +The main macro of the rebar package infrastructure is rebar-package. +It is similar to the generic-package macro. The ability to have host +packages is also available, with the host-rebar-package macro. + +Just like the generic infrastructure, the rebar infrastructure works +by defining a number of variables before calling the rebar-package +macro. + +First, all the package metadata information variables that exist in +the generic infrastructure also exist in the rebar infrastructure: +ERLANG_FOOBAR_VERSION, ERLANG_FOOBAR_SOURCE, ERLANG_FOOBAR_PATCH, +ERLANG_FOOBAR_SITE, ERLANG_FOOBAR_SUBDIR, ERLANG_FOOBAR_DEPENDENCIES, +ERLANG_FOOBAR_INSTALL_STAGING, ERLANG_FOOBAR_INSTALL_TARGET, +ERLANG_FOOBAR_LICENSE and ERLANG_FOOBAR_LICENSE_FILES. + +A few additional variables, specific to the rebar infrastructure, can +also be defined. Many of them are only useful in very specific cases, +typical packages will therefore only use a few of them. + + * ERLANG_FOOBAR_USE_AUTOCONF, to specify that the package uses + autoconf at the configuration step. When a package sets this + variable to YES, the autotools infrastructure is used. + + Note. You can also use some of the variables from the autotools + infrastructure: ERLANG_FOOBAR_CONF_ENV, ERLANG_FOOBAR_CONF_OPTS, + ERLANG_FOOBAR_AUTORECONF, ERLANG_FOOBAR_AUTORECONF_ENV and + ERLANG_FOOBAR_AUTORECONF_OPTS. + + * ERLANG_FOOBAR_USE_BUNDLED_REBAR, to specify that the package has + a bundled version of rebar and that it shall be used. Valid + values are YES or NO (the default). + + Note. If the package bundles a rebar utility, but can use the + generic one that Buildroot provides, just say NO (i.e., do not + specify this variable). Only set if it is mandatory to use the + rebar utility bundled in this package. + + * ERLANG_FOOBAR_REBAR_ENV, to specify additional environment + variables to pass to the rebar utility. + * ERLANG_FOOBAR_KEEP_DEPENDENCIES, to keep the dependencies + described in the rebar.config file. Valid values are YES or NO + (the default). Unless this variable is set to YES, the rebar + infrastructure removes such dependencies in a post-patch hook to + ensure rebar does not download nor compile them. + +With the rebar infrastructure, all the steps required to build and +install the packages are already defined, and they generally work +well for most rebar-based packages. However, when required, it is +still possible to customize what is done in any particular step: + + * By adding a post-operation hook (after extract, patch, configure, + build or install). See Section 18.22, “Hooks available in the + various build steps” for details. + * By overriding one of the steps. For example, even if the rebar + infrastructure is used, if the package .mk file defines its own + ERLANG_FOOBAR_BUILD_CMDS variable, it will be used instead of the + default rebar one. However, using this method should be + restricted to very specific cases. Do not use it in the general + case. + +18.14. Infrastructure for Waf-based packages + +18.14.1. waf-package tutorial + +First, let’s see how to write a .mk file for a Waf-based package, +with an example : + +01: ################################################################################ +02: # +03: # libfoo +04: # +05: ################################################################################ +06: +07: LIBFOO_VERSION = 1.0 +08: LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz +09: LIBFOO_SITE = http://www.foosoftware.org/download +10: LIBFOO_CONF_OPTS = --enable-bar --disable-baz +11: LIBFOO_DEPENDENCIES = bar +12: +13: $(eval $(waf-package)) + +On line 7, we declare the version of the package. + +On line 8 and 9, we declare the name of the tarball (xz-ed tarball +recommended) and the location of the tarball on the Web. Buildroot +will automatically download the tarball from this location. + +On line 10, we tell Buildroot what options to enable for libfoo. + +On line 11, we tell Buildroot the dependencies of libfoo. + +Finally, on line line 13, we invoke the waf-package macro that +generates all the Makefile rules that actually allows the package to +be built. + +18.14.2. waf-package reference + +The main macro of the Waf package infrastructure is waf-package. It +is similar to the generic-package macro. + +Just like the generic infrastructure, the Waf infrastructure works by +defining a number of variables before calling the waf-package macro. + +First, all the package metadata information variables that exist in +the generic infrastructure also exist in the Waf infrastructure: +LIBFOO_VERSION, LIBFOO_SOURCE, LIBFOO_PATCH, LIBFOO_SITE, +LIBFOO_SUBDIR, LIBFOO_DEPENDENCIES, LIBFOO_INSTALL_STAGING, +LIBFOO_INSTALL_TARGET. + +An additional variable, specific to the Waf infrastructure, can also +be defined. + + * LIBFOO_SUBDIR may contain the name of a subdirectory inside the + package that contains the main wscript file. This is useful, if + for example, the main wscript file is not at the root of the tree + extracted by the tarball. If HOST_LIBFOO_SUBDIR is not specified, + it defaults to LIBFOO_SUBDIR. + * LIBFOO_NEEDS_EXTERNAL_WAF can be set to YES or NO to tell + Buildroot to use the bundled waf executable. If set to NO, the + default, then Buildroot will use the waf executable provided in + the package source tree; if set to YES, then Buildroot will + download, install waf as a host tool and use it to build the + package. + * LIBFOO_WAF_OPTS, to specify additional options to pass to the waf + script at every step of the package build process: configure, + build and installation. By default, empty. + * LIBFOO_CONF_OPTS, to specify additional options to pass to the + waf script for the configuration step. By default, empty. + * LIBFOO_BUILD_OPTS, to specify additional options to pass to the + waf script during the build step. By default, empty. + * LIBFOO_INSTALL_STAGING_OPTS, to specify additional options to + pass to the waf script during the staging installation step. By + default, empty. + * LIBFOO_INSTALL_TARGET_OPTS, to specify additional options to pass + to the waf script during the target installation step. By + default, empty. + +18.15. Infrastructure for Meson-based packages + +18.15.1. meson-package tutorial + +Meson [http://mesonbuild.com] is an open source build system meant to +be both extremely fast, and, even more importantly, as user friendly +as possible. It uses Ninja [https://ninja-build.org] as a companion +tool to perform the actual build operations. + +Let’s see how to write a .mk file for a Meson-based package, with an +example: + +01: ################################################################################ +02: # +03: # foo +04: # +05: ################################################################################ +06: +07: FOO_VERSION = 1.0 +08: FOO_SOURCE = foo-$(FOO_VERSION).tar.gz +09: FOO_SITE = http://www.foosoftware.org/download +10: FOO_LICENSE = GPL-3.0+ +11: FOO_LICENSE_FILES = COPYING +12: FOO_INSTALL_STAGING = YES +13: +14: FOO_DEPENDENCIES = host-pkgconf bar +15: +16: ifeq ($(BR2_PACKAGE_BAZ),y) +17: FOO_CONF_OPTS += -Dbaz=true +18: FOO_DEPENDENCIES += baz +19: else +20: FOO_CONF_OPTS += -Dbaz=false +21: endif +22: +23: $(eval $(meson-package)) + +The Makefile starts with the definition of the standard variables for +package declaration (lines 7 to 11). + +On line line 23, we invoke the meson-package macro that generates all +the Makefile rules that actually allows the package to be built. + +In the example, host-pkgconf and bar are declared as dependencies in +FOO_DEPENDENCIES at line 14 because the Meson build file of foo uses +pkg-config to determine the compilation flags and libraries of +package bar. + +Note that it is not necessary to add host-meson in the +FOO_DEPENDENCIES variable of a package, since this basic dependency +is automatically added as needed by the Meson package infrastructure. + +If the "baz" package is selected, then support for the "baz" feature +in "foo" is activated by adding -Dbaz=true to FOO_CONF_OPTS at line +17, as specified in the meson_options.txt file in "foo" source tree. +The "baz" package is also added to FOO_DEPENDENCIES. Note that the +support for baz is explicitly disabled at line 20, if the package is +not selected. + +To sum it up, to add a new meson-based package, the Makefile example +can be copied verbatim then edited to replace all occurences of FOO +with the uppercase name of the new package and update the values of +the standard variables. + +18.15.2. meson-package reference + +The main macro of the Meson package infrastructure is meson-package. +It is similar to the generic-package macro. The ability to have +target and host packages is also available, with the +host-meson-package macro. + +Just like the generic infrastructure, the Meson infrastructure works +by defining a number of variables before calling the meson-package +macro. + +First, all the package metadata information variables that exist in +the generic infrastructure also exist in the Meson infrastructure: +FOO_VERSION, FOO_SOURCE, FOO_PATCH, FOO_SITE, FOO_SUBDIR, +FOO_DEPENDENCIES, FOO_INSTALL_STAGING, FOO_INSTALL_TARGET. + +A few additional variables, specific to the Meson infrastructure, can +also be defined. Many of them are only useful in very specific cases, +typical packages will therefore only use a few of them. + + * FOO_SUBDIR may contain the name of a subdirectory inside the + package that contains the main meson.build file. This is useful, + if for example, the main meson.build file is not at the root of + the tree extracted by the tarball. If HOST_FOO_SUBDIR is not + specified, it defaults to FOO_SUBDIR. + * FOO_CONF_ENV, to specify additional environment variables to pass + to meson for the configuration step. By default, empty. + * FOO_CONF_OPTS, to specify additional options to pass to meson for + the configuration step. By default, empty. + * FOO_CFLAGS, to specify compiler arguments added to the package + specific cross-compile.conf file c_args property. By default, the + value of TARGET_CFLAGS. + * FOO_CXXFLAGS, to specify compiler arguments added to the package + specific cross-compile.conf file cpp_args property. By default, + the value of TARGET_CXXFLAGS. + * FOO_LDFLAGS, to specify compiler arguments added to the package + specific cross-compile.conf file c_link_args and cpp_link_args + properties. By default, the value of TARGET_LDFLAGS. + * FOO_MESON_EXTRA_BINARIES, to specify a space-separated list of + programs to add to the [binaries] section of the meson + cross-compilation.conf configuration file. The format is + program-name='/path/to/program', with no space around the = sign, + and with the path of the program between single quotes. By + default, empty. Note that Buildroot already sets the correct + values for c, cpp, ar, strip, and pkgconfig. + * FOO_MESON_EXTRA_PROPERTIES, to specify a space-separated list of + properties to add to the [properties] section of the meson + cross-compilation.conf configuration file. The format is + property-name= with no space around the = sign, and with + single quotes around string values. By default, empty. Note that + Buildroot already sets values for needs_exe_wrapper, c_args, + c_link_args, cpp_args, cpp_link_args, sys_root, and + pkg_config_libdir. + * FOO_NINJA_ENV, to specify additional environment variables to + pass to ninja, meson companion tool in charge of the build + operations. By default, empty. + * FOO_NINJA_OPTS, to specify a space-separated list of targets to + build. By default, empty, to build the default target(s). + +18.16. Integration of Cargo-based packages + +Cargo is the package manager for the Rust programming language. It +allows the user to build programs or libraries written in Rust, but +it also downloads and manages their dependencies, to ensure +repeatable builds. Cargo packages are called "crates". + +18.16.1. Cargo-based package’s Config.in file + +The Config.in file of Cargo-based package foo should contain: + +01: config BR2_PACKAGE_FOO +02: bool "foo" +03: depends on BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS +04: select BR2_PACKAGE_HOST_RUSTC +05: help +06: This is a comment that explains what foo is. +07: +08: http://foosoftware.org/foo/ + +18.16.2. Cargo-based package’s .mk file + +Buildroot does not (yet) provide a dedicated package infrastructure +for Cargo-based packages. So, we will explain how to write a .mk file +for such a package. Let’s start with an example: + +01: ################################################################################ +02: # +03: # foo +04: # +05: ################################################################################ +06: +07: FOO_VERSION = 1.0 +08: FOO_SOURCE = foo-$(FOO_VERSION).tar.gz +09: FOO_SITE = http://www.foosoftware.org/download +10: FOO_LICENSE = GPL-3.0+ +11: FOO_LICENSE_FILES = COPYING +12: +13: FOO_DEPENDENCIES = host-rustc +14: +15: FOO_CARGO_ENV = CARGO_HOME=$(HOST_DIR)/share/cargo +16: +17: FOO_BIN_DIR = target/$(RUSTC_TARGET_NAME)/$(FOO_CARGO_MODE) +18: +19: FOO_CARGO_OPTS = \ +20: $(if $(BR2_ENABLE_DEBUG),,--release) \ +21: --target=$(RUSTC_TARGET_NAME) \ +22: --manifest-path=$(@D)/Cargo.toml +23: +24: define FOO_BUILD_CMDS +25: $(TARGET_MAKE_ENV) $(FOO_CARGO_ENV) \ +26: cargo build $(FOO_CARGO_OPTS) +27: endef +28: +29: define FOO_INSTALL_TARGET_CMDS +30: $(INSTALL) -D -m 0755 $(@D)/$(FOO_BIN_DIR)/foo \ +31: $(TARGET_DIR)/usr/bin/foo +32: endef +33: +34: $(eval $(generic-package)) + +The Makefile starts with the definition of the standard variables for +package declaration (lines 7 to 11). + +As seen in line 34, it is based on the generic-package infrastructure +. So, it defines the variables required by this particular +infrastructure, where Cargo is invoked: + + * FOO_BUILD_CMDS: Cargo is invoked to perform the build. The + options required to configure the cross-compilation of the + package are passed via FOO_CONF_OPTS. + * FOO_INSTALL_TARGET_CMDS: The binary executable generated is + installed on the target. + +In order to have Cargo available for the build, FOO_DEPENDENCIES +needs to contain host-cargo. + +To sum it up, to add a new Cargo-based package, the Makefile example +can be copied verbatim then edited to replace all occurences of FOO +with the uppercase name of the new package and update the values of +the standard variables. + +18.16.3. About Dependencies Management + +A crate can depend on other libraries from crates.io or git +repositories, listed in its Cargo.toml file. Before starting a build, +Cargo usually downloads automatically them. This step can also be +performed independently, via the cargo fetch command. + +Cargo maintains a local cache of the registry index and of git +checkouts of the crates, whose location is given by $CARGO_HOME. As +seen in the package Makefile example at line 15, this environment +variable is set to $(HOST_DIR)/share/cargo. + +This dependency download mechanism is not convenient when performing +an offline build, as Cargo will fail to fetch the dependencies. In +that case, it is advised to generate a tarball of the dependencies +using the cargo vendor and add it to FOO_EXTRA_DOWNLOADS. + +18.17. Infrastructure for Go packages + +This infrastructure applies to Go packages that use the standard +build system and use bundled dependencies. + +18.17.1. golang-package tutorial + +First, let’s see how to write a .mk file for a go package, with an +example : + +01: ################################################################################ +02: # +03: # foo +04: # +05: ################################################################################ +06: +07: FOO_VERSION = 1.0 +08: FOO_SITE = $(call github,bar,foo,$(FOO_VERSION)) +09: FOO_LICENSE = BSD-3-Clause +10: FOO_LICENSE_FILES = LICENSE +11: +12: $(eval $(golang-package)) + +On line 7, we declare the version of the package. + +On line 8, we declare the upstream location of the package, here +fetched from Github, since a large number of Go packages are hosted +on Github. + +On line 9 and 10, we give licensing details about the package. + +Finally, on line 12, we invoke the golang-package macro that +generates all the Makefile rules that actually allow the package to +be built. + +18.17.2. golang-package reference + +In their Config.in file, packages using the golang-package +infrastructure should depend on +BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS because Buildroot will +automatically add a dependency on host-go to such packages. If you +need CGO support in your package, you must add a dependency on +BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS. + +The main macro of the Go package infrastructure is golang-package. It +is similar to the generic-package macro. The ability to build host +packages is also available, with the host-golang-package macro. Host +packages built by host-golang-package macro should depend on +BR2_PACKAGE_HOST_GO_HOST_ARCH_SUPPORTS. + +Just like the generic infrastructure, the Go infrastructure works by +defining a number of variables before calling the golang-package. + +All the package metadata information variables that exist in the +generic package infrastructure also exist in the Go infrastructure: +FOO_VERSION, FOO_SOURCE, FOO_PATCH, FOO_SITE, FOO_SUBDIR, +FOO_DEPENDENCIES, FOO_LICENSE, FOO_LICENSE_FILES, +FOO_INSTALL_STAGING, etc. + +Note that it is not necessary to add host-go in the FOO_DEPENDENCIES +variable of a package, since this basic dependency is automatically +added as needed by the Go package infrastructure. + +A few additional variables, specific to the Go infrastructure, can +optionally be defined, depending on the package’s needs. Many of them +are only useful in very specific cases, typical packages will +therefore only use a few of them, or none. + + * The package must specify its Go module name in the FOO_GOMOD + variable. If not specified, it defaults to URL-domain/ + 1st-part-of-URL/2nd-part-of-URL, e.g FOO_GOMOD will take the + value github.com/bar/foo for a package that specifies FOO_SITE = + $(call github,bar,foo,$(FOO_VERSION)). The Go package + infrastructure will automatically generate a minimal go.mod file + in the package source tree if it doesn’t exist. + * FOO_LDFLAGS and FOO_TAGS can be used to pass respectively the + LDFLAGS or the TAGS to the go build command. + * FOO_BUILD_TARGETS can be used to pass the list of targets that + should be built. If FOO_BUILD_TARGETS is not specified, it + defaults to .. We then have two cases: + + + FOO_BUILD_TARGETS is .. In this case, we assume only one + binary will be produced, and that by default we name it after + the package name. If that is not appropriate, the name of the + produced binary can be overridden using FOO_BIN_NAME. + + FOO_BUILD_TARGETS is not .. In this case, we iterate over the + values to build each target, and for each produced a binary + that is the non-directory component of the target. For + example if FOO_BUILD_TARGETS = cmd/docker cmd/dockerd the + binaries produced are docker and dockerd. + * FOO_INSTALL_BINS can be used to pass the list of binaries that + should be installed in /usr/bin on the target. If + FOO_INSTALL_BINS is not specified, it defaults to the lower-case + name of package. + +With the Go infrastructure, all the steps required to build and +install the packages are already defined, and they generally work +well for most Go-based packages. However, when required, it is still +possible to customize what is done in any particular step: + + * By adding a post-operation hook (after extract, patch, configure, + build or install). See Section 18.22, “Hooks available in the + various build steps” for details. + * By overriding one of the steps. For example, even if the Go + infrastructure is used, if the package .mk file defines its own + FOO_BUILD_CMDS variable, it will be used instead of the default + Go one. However, using this method should be restricted to very + specific cases. Do not use it in the general case. + +18.18. Infrastructure for QMake-based packages + +18.18.1. qmake-package tutorial + +First, let’s see how to write a .mk file for a QMake-based package, +with an example : + +01: ################################################################################ +02: # +03: # libfoo +04: # +05: ################################################################################ +06: +07: LIBFOO_VERSION = 1.0 +08: LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz +09: LIBFOO_SITE = http://www.foosoftware.org/download +10: LIBFOO_CONF_OPTS = QT_CONFIG+=bar QT_CONFIG-=baz +11: LIBFOO_DEPENDENCIES = bar +12: +13: $(eval $(qmake-package)) + +On line 7, we declare the version of the package. + +On line 8 and 9, we declare the name of the tarball (xz-ed tarball +recommended) and the location of the tarball on the Web. Buildroot +will automatically download the tarball from this location. + +On line 10, we tell Buildroot what options to enable for libfoo. + +On line 11, we tell Buildroot the dependencies of libfoo. + +Finally, on line line 13, we invoke the qmake-package macro that +generates all the Makefile rules that actually allows the package to +be built. + +18.18.2. qmake-package reference + +The main macro of the QMake package infrastructure is qmake-package. +It is similar to the generic-package macro. + +Just like the generic infrastructure, the QMake infrastructure works +by defining a number of variables before calling the qmake-package +macro. + +First, all the package metadata information variables that exist in +the generic infrastructure also exist in the QMake infrastructure: +LIBFOO_VERSION, LIBFOO_SOURCE, LIBFOO_PATCH, LIBFOO_SITE, +LIBFOO_SUBDIR, LIBFOO_DEPENDENCIES, LIBFOO_INSTALL_STAGING, +LIBFOO_INSTALL_TARGET. + +An additional variable, specific to the QMake infrastructure, can +also be defined. + + * LIBFOO_CONF_ENV, to specify additional environment variables to + pass to the qmake script for the configuration step. By default, + empty. + * LIBFOO_CONF_OPTS, to specify additional options to pass to the + qmake script for the configuration step. By default, empty. + * LIBFOO_MAKE_ENV, to specify additional environment variables to + the make command during the build and install steps. By default, + empty. + * LIBFOO_MAKE_OPTS, to specify additional targets to pass to the + make command during the build step. By default, empty. + * LIBFOO_INSTALL_STAGING_OPTS, to specify additional targets to + pass to the make command during the staging installation step. By + default, install. + * LIBFOO_INSTALL_TARGET_OPTS, to specify additional targets to pass + to the make command during the target installation step. By + default, install. + * LIBFOO_SYNC_HEADERS, to run syncqt.pl before qmake. Some packages + need this to have a properly populated include directory before + running the build. + +18.19. Infrastructure for packages building kernel modules + +Buildroot offers a helper infrastructure to make it easy to write +packages that build and install Linux kernel modules. Some packages +only contain a kernel module, other packages contain programs and +libraries in addition to kernel modules. Buildroot’s helper +infrastructure supports either case. + +18.19.1. kernel-module tutorial + +Let’s start with an example on how to prepare a simple package that +only builds a kernel module, and no other component: + +01: ################################################################################ +02: # +03: # foo +04: # +05: ################################################################################ +06: +07: FOO_VERSION = 1.2.3 +08: FOO_SOURCE = foo-$(FOO_VERSION).tar.xz +09: FOO_SITE = http://www.foosoftware.org/download +10: FOO_LICENSE = GPL-2.0 +11: FOO_LICENSE_FILES = COPYING +12: +13: $(eval $(kernel-module)) +14: $(eval $(generic-package)) + +Lines 7-11 define the usual meta-data to specify the version, archive +name, remote URI where to find the package source, licensing +information. + +On line 13, we invoke the kernel-module helper infrastructure, that +generates all the appropriate Makefile rules and variables to build +that kernel module. + +Finally, on line 14, we invoke the generic-package infrastructure. + +The dependency on linux is automatically added, so it is not needed +to specify it in FOO_DEPENDENCIES. + +What you may have noticed is that, unlike other package +infrastructures, we explicitly invoke a second infrastructure. This +allows a package to build a kernel module, but also, if needed, use +any one of other package infrastructures to build normal userland +components (libraries, executables…). Using the kernel-module +infrastructure on its own is not sufficient; another package +infrastructure must be used. + +Let’s look at a more complex example: + +01: ################################################################################ +02: # +03: # foo +04: # +05: ################################################################################ +06: +07: FOO_VERSION = 1.2.3 +08: FOO_SOURCE = foo-$(FOO_VERSION).tar.xz +09: FOO_SITE = http://www.foosoftware.org/download +10: FOO_LICENSE = GPL-2.0 +11: FOO_LICENSE_FILES = COPYING +12: +13: FOO_MODULE_SUBDIRS = driver/base +14: FOO_MODULE_MAKE_OPTS = KVERSION=$(LINUX_VERSION_PROBED) +15: +16: ifeq ($(BR2_PACKAGE_LIBBAR),y) +17: FOO_DEPENDENCIES = libbar +18: FOO_CONF_OPTS = --enable-bar +19: FOO_MODULE_SUBDIRS += driver/bar +20: else +21: FOO_CONF_OPTS = --disable-bar +22: endif +23: +24: $(eval $(kernel-module)) +26: $(eval $(autotools-package)) + +Here, we see that we have an autotools-based package, that also +builds the kernel module located in sub-directory driver/base and, if +libbar is enabled, the kernel module located in sub-directory driver/ +bar, and defines the variable KVERSION to be passed to the Linux +buildsystem when building the module(s). + +18.19.2. kernel-module reference + +The main macro for the kernel module infrastructure is kernel-module. +Unlike other package infrastructures, it is not stand-alone, and +requires any of the other *-package macros be called after it. + +The kernel-module macro defines post-build and post-target-install +hooks to build the kernel modules. If the package’s .mk needs access +to the built kernel modules, it should do so in a post-build hook, +registered after the call to kernel-module. Similarly, if the +package’s .mk needs access to the kernel module after it has been +installed, it should do so in a post-install hook, registered after +the call to kernel-module. Here’s an example: + +$(eval $(kernel-module)) + +define FOO_DO_STUFF_WITH_KERNEL_MODULE + # Do something with it... +endef +FOO_POST_BUILD_HOOKS += FOO_DO_STUFF_WITH_KERNEL_MODULE + +$(eval $(generic-package)) + +Finally, unlike the other package infrastructures, there is no +host-kernel-module variant to build a host kernel module. + +The following additional variables can optionally be defined to +further configure the build of the kernel module: + + * FOO_MODULE_SUBDIRS may be set to one or more sub-directories + (relative to the package source top-directory) where the kernel + module sources are. If empty or not set, the sources for the + kernel module(s) are considered to be located at the top of the + package source tree. + * FOO_MODULE_MAKE_OPTS may be set to contain extra variable + definitions to pass to the Linux buildsystem. + +You may also reference (but you may not set!) those variables: + + * LINUX_DIR contains the path to where the Linux kernel has been + extracted and built. + * LINUX_VERSION contains the version string as configured by the + user. + * LINUX_VERSION_PROBED contains the real version string of the + kernel, retrieved with running make -C $(LINUX_DIR) kernelrelease + * KERNEL_ARCH contains the name of the current architecture, like + arm, mips… + +18.20. Infrastructure for asciidoc documents + +The Buildroot manual, which you are currently reading, is entirely +written using the AsciiDoc [http://asciidoc.org/] mark-up syntax. The +manual is then rendered to many formats: + + * html + * split-html + * pdf + * epub + * text + +Although Buildroot only contains one document written in AsciiDoc, +there is, as for packages, an infrastructure for rendering documents +using the AsciiDoc syntax. + +Also as for packages, the AsciiDoc infrastructure is available from a +br2-external tree. This allows documentation for a br2-external tree +to match the Buildroot documentation, as it will be rendered to the +same formats and use the same layout and theme. + +18.20.1. asciidoc-document tutorial + +Whereas package infrastructures are suffixed with -package, the +document infrastructures are suffixed with -document. So, the +AsciiDoc infrastructure is named asciidoc-document. + +Here is an example to render a simple AsciiDoc document. + +01: ################################################################################ +02: # +03: # foo-document +04: # +05: ################################################################################ +06: +07: FOO_SOURCES = $(sort $(wildcard $(pkgdir)/*)) +08: $(eval $(call asciidoc-document)) + +On line 7, the Makefile declares what the sources of the document +are. Currently, it is expected that the document’s sources are only +local; Buildroot will not attempt to download anything to render a +document. Thus, you must indicate where the sources are. Usually, the +string above is sufficient for a document with no sub-directory +structure. + +On line 8, we call the asciidoc-document function, which generates +all the Makefile code necessary to render the document. + +18.20.2. asciidoc-document reference + +The list of variables that can be set in a .mk file to give metadata +information is (assuming the document name is foo) : + + * FOO_SOURCES, mandatory, defines the source files for the + document. + * FOO_RESOURCES, optional, may contain a space-separated list of + paths to one or more directories containing so-called resources + (like CSS or images). By default, empty. + * FOO_DEPENDENCIES, optional, the list of packages (most probably, + host-packages) that must be built before building this document. + +There are also additional hooks (see Section 18.22, “Hooks available +in the various build steps” for general information on hooks), that a +document may set to define extra actions to be done at various steps: + + * FOO_POST_RSYNC_HOOKS to run additional commands after the sources + have been copied by Buildroot. This can for example be used to + generate part of the manual with information extracted from the + tree. As an example, Buildroot uses this hook to generate the + tables in the appendices. + * FOO_CHECK_DEPENDENCIES_HOOKS to run additional tests on required + components to generate the document. In AsciiDoc, it is possible + to call filters, that is, programs that will parse an AsciiDoc + block and render it appropriately (e.g. ditaa [http:// + ditaa.sourceforge.net/] or aafigure [https://pythonhosted.org/ + aafigure/]). + * FOO_CHECK_DEPENDENCIES__HOOKS, to run additional tests for + the specified format (see the list of rendered formats, + above). + +Here is a complete example that uses all variables and all hooks: + +01: ################################################################################ +02: # +03: # foo-document +04: # +05: ################################################################################ +06: +07: FOO_SOURCES = $(sort $(wildcard $(pkgdir)/*)) +08: FOO_RESOURCES = $(sort $(wildcard $(pkgdir)/ressources)) +09: +10: define FOO_GEN_EXTRA_DOC +11: /path/to/generate-script --outdir=$(@D) +12: endef +13: FOO_POST_RSYNC_HOOKS += FOO_GEN_EXTRA_DOC +14: +15: define FOO_CHECK_MY_PROG +16: if ! which my-prog >/dev/null 2>&1; then \ +17: echo "You need my-prog to generate the foo document"; \ +18: exit 1; \ +19: fi +20: endef +21: FOO_CHECK_DEPENDENCIES_HOOKS += FOO_CHECK_MY_PROG +22: +23: define FOO_CHECK_MY_OTHER_PROG +24: if ! which my-other-prog >/dev/null 2>&1; then \ +25: echo "You need my-other-prog to generate the foo document as PDF"; \ +26: exit 1; \ +27: fi +28: endef +29: FOO_CHECK_DEPENDENCIES_PDF_HOOKS += FOO_CHECK_MY_OTHER_PROG +30: +31: $(eval $(call asciidoc-document)) + +18.21. Infrastructure specific to the Linux kernel package + +The Linux kernel package can use some specific infrastructures based +on package hooks for building Linux kernel tools or/and building +Linux kernel extensions. + +18.21.1. linux-kernel-tools + +Buildroot offers a helper infrastructure to build some userspace +tools for the target available within the Linux kernel sources. Since +their source code is part of the kernel source code, a special +package, linux-tools, exists and re-uses the sources of the Linux +kernel that runs on the target. + +Let’s look at an example of a Linux tool. For a new Linux tool named +foo, create a new menu entry in the existing package/linux-tools/ +Config.in. This file will contain the option descriptions related to +each kernel tool that will be used and displayed in the configuration +tool. It would basically look like: + +01: config BR2_PACKAGE_LINUX_TOOLS_FOO +02: bool "foo" +03: select BR2_PACKAGE_LINUX_TOOLS +04: help +05: This is a comment that explains what foo kernel tool is. +06: +07: http://foosoftware.org/foo/ + +The name of the option starts with the prefix +BR2_PACKAGE_LINUX_TOOLS_, followed by the uppercase name of the tool +(like is done for packages). + +Note. Unlike other packages, the linux-tools package options appear +in the linux kernel menu, under the Linux Kernel Tools sub-menu, not +under the Target packages main menu. + +Then for each linux tool, add a new .mk.in file named package/ +linux-tools/linux-tool-foo.mk.in. It would basically look like: + +01: ################################################################################ +02: # +03: # foo +04: # +05: ################################################################################ +06: +07: LINUX_TOOLS += foo +08: +09: FOO_DEPENDENCIES = libbbb +10: +11: define FOO_BUILD_CMDS +12: $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools foo +13: endef +14: +15: define FOO_INSTALL_STAGING_CMDS +16: $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools \ +17: DESTDIR=$(STAGING_DIR) \ +18: foo_install +19: endef +20: +21: define FOO_INSTALL_TARGET_CMDS +22: $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools \ +23: DESTDIR=$(TARGET_DIR) \ +24: foo_install +25: endef + +On line 7, we register the Linux tool foo to the list of available +Linux tools. + +On line 9, we specify the list of dependencies this tool relies on. +These dependencies are added to the Linux package dependencies list +only when the foo tool is selected. + +The rest of the Makefile, lines 11-25 defines what should be done at +the different steps of the Linux tool build process like for a +generic package. They will actually be used only when the foo tool is +selected. The only supported commands are _BUILD_CMDS, +_INSTALL_STAGING_CMDS and _INSTALL_TARGET_CMDS. + +Note. One must not call $(eval $(generic-package)) or any other +package infrastructure! Linux tools are not packages by themselves, +they are part of the linux-tools package. + +18.21.2. linux-kernel-extensions + +Some packages provide new features that require the Linux kernel tree +to be modified. This can be in the form of patches to be applied on +the kernel tree, or in the form of new files to be added to the tree. +The Buildroot’s Linux kernel extensions infrastructure provides a +simple solution to automatically do this, just after the kernel +sources are extracted and before the kernel patches are applied. +Examples of extensions packaged using this mechanism are the +real-time extensions Xenomai and RTAI, as well as the set of +out-of-tree LCD screens drivers fbtft. + +Let’s look at an example on how to add a new Linux extension foo. + +First, create the package foo that provides the extension: this +package is a standard package; see the previous chapters on how to +create such a package. This package is in charge of downloading the +sources archive, checking the hash, defining the licence informations +and building user space tools if any. + +Then create the Linux extension proper: create a new menu entry in +the existing linux/Config.ext.in. This file contains the option +descriptions related to each kernel extension that will be used and +displayed in the configuration tool. It would basically look like: + +01: config BR2_LINUX_KERNEL_EXT_FOO +02: bool "foo" +03: help +04: This is a comment that explains what foo kernel extension is. +05: +06: http://foosoftware.org/foo/ + +Then for each linux extension, add a new .mk file named linux/ +linux-ext-foo.mk. It should basically contain: + +01: ################################################################################ +02: # +03: # foo +04: # +05: ################################################################################ +06: +07: LINUX_EXTENSIONS += foo +08: +09: define FOO_PREPARE_KERNEL +10: $(FOO_DIR)/prepare-kernel-tree.sh --linux-dir=$(@D) +11: endef + +On line 7, we add the Linux extension foo to the list of available +Linux extensions. + +On line 9-11, we define what should be done by the extension to +modify the Linux kernel tree; this is specific to the linux extension +and can use the variables defined by the foo package, like: $ +(FOO_DIR) or $(FOO_VERSION)… as well as all the Linux variables, +like: $(LINUX_VERSION) or $(LINUX_VERSION_PROBED), $(KERNEL_ARCH)… +See the definition of those kernel variables. + +18.22. Hooks available in the various build steps + +The generic infrastructure (and as a result also the derived +autotools and cmake infrastructures) allow packages to specify hooks. +These define further actions to perform after existing steps. Most +hooks aren’t really useful for generic packages, since the .mk file +already has full control over the actions performed in each step of +the package construction. + +The following hook points are available: + + * LIBFOO_PRE_DOWNLOAD_HOOKS + * LIBFOO_POST_DOWNLOAD_HOOKS + * LIBFOO_PRE_EXTRACT_HOOKS + * LIBFOO_POST_EXTRACT_HOOKS + * LIBFOO_PRE_RSYNC_HOOKS + * LIBFOO_POST_RSYNC_HOOKS + * LIBFOO_PRE_PATCH_HOOKS + * LIBFOO_POST_PATCH_HOOKS + * LIBFOO_PRE_CONFIGURE_HOOKS + * LIBFOO_POST_CONFIGURE_HOOKS + * LIBFOO_PRE_BUILD_HOOKS + * LIBFOO_POST_BUILD_HOOKS + * LIBFOO_PRE_INSTALL_HOOKS (for host packages only) + * LIBFOO_POST_INSTALL_HOOKS (for host packages only) + * LIBFOO_PRE_INSTALL_STAGING_HOOKS (for target packages only) + * LIBFOO_POST_INSTALL_STAGING_HOOKS (for target packages only) + * LIBFOO_PRE_INSTALL_TARGET_HOOKS (for target packages only) + * LIBFOO_POST_INSTALL_TARGET_HOOKS (for target packages only) + * LIBFOO_PRE_INSTALL_IMAGES_HOOKS + * LIBFOO_POST_INSTALL_IMAGES_HOOKS + * LIBFOO_PRE_LEGAL_INFO_HOOKS + * LIBFOO_POST_LEGAL_INFO_HOOKS + +These variables are lists of variable names containing actions to be +performed at this hook point. This allows several hooks to be +registered at a given hook point. Here is an example: + +define LIBFOO_POST_PATCH_FIXUP + action1 + action2 +endef + +LIBFOO_POST_PATCH_HOOKS += LIBFOO_POST_PATCH_FIXUP + +18.22.1. Using the POST_RSYNC hook + +The POST_RSYNC hook is run only for packages that use a local source, +either through the local site method or the OVERRIDE_SRCDIR +mechanism. In this case, package sources are copied using rsync from +the local location into the buildroot build directory. The rsync +command does not copy all files from the source directory, though. +Files belonging to a version control system, like the directories +.git, .hg, etc. are not copied. For most packages this is sufficient, +but a given package can perform additional actions using the +POST_RSYNC hook. + +In principle, the hook can contain any command you want. One specific +use case, though, is the intentional copying of the version control +directory using rsync. The rsync command you use in the hook can, +among others, use the following variables: + + * $(SRCDIR): the path to the overridden source directory + * $(@D): the path to the build directory + +18.22.2. Target-finalize hook + +Packages may also register hooks in LIBFOO_TARGET_FINALIZE_HOOKS. +These hooks are run after all packages are built, but before the +filesystem images are generated. They are seldom used, and your +package probably do not need them. + +18.23. Gettext integration and interaction with packages + +Many packages that support internationalization use the gettext +library. Dependencies for this library are fairly complicated and +therefore, deserve some explanation. + +The glibc C library integrates a full-blown implementation of gettext +, supporting translation. Native Language Support is therefore +built-in in glibc. + +On the other hand, the uClibc and musl C libraries only provide a +stub implementation of the gettext functionality, which allows to +compile libraries and programs using gettext functions, but without +providing the translation capabilities of a full-blown gettext +implementation. With such C libraries, if real Native Language +Support is necessary, it can be provided by the libintl library of +the gettext package. + +Due to this, and in order to make sure that Native Language Support +is properly handled, packages in Buildroot that can use NLS support +should: + + 1. Ensure NLS support is enabled when BR2_SYSTEM_ENABLE_NLS=y. This + is done automatically for autotools packages and therefore should + only be done for packages using other package infrastructures. + 2. Add $(TARGET_NLS_DEPENDENCIES) to the package _DEPENDENCIES + variable. This addition should be done unconditionally: the value + of this variable is automatically adjusted by the core + infrastructure to contain the relevant list of packages. If NLS + support is disabled, this variable is empty. If NLS support is + enabled, this variable contains host-gettext so that tools needed + to compile translation files are available on the host. In + addition, if uClibc or musl are used, this variable also contains + gettext in order to get the full-blown gettext implementation. + 3. If needed, add $(TARGET_NLS_LIBS) to the linker flags, so that + the package gets linked with libintl. This is generally not + needed with autotools packages as they usually detect + automatically that they should link with libintl. However, + packages using other build systems, or problematic + autotools-based packages may need this. $(TARGET_NLS_LIBS) should + be added unconditionally to the linker flags, as the core + automatically makes it empty or defined to -lintl depending on + the configuration. + +No changes should be made to the Config.in file to support NLS. + +Finally, certain packages need some gettext utilities on the target, +such as the gettext program itself, which allows to retrieve +translated strings, from the command line. In such a case, the +package should: + + * use select BR2_PACKAGE_GETTEXT in their Config.in file, + indicating in a comment above that it’s a runtime dependency + only. + * not add any gettext dependency in the DEPENDENCIES variable of + their .mk file. + +18.24. Tips and tricks + +18.24.1. Package name, config entry name and makefile variable +relationship + +In Buildroot, there is some relationship between: + + * the package name, which is the package directory name (and the + name of the *.mk file); + * the config entry name that is declared in the Config.in file; + * the makefile variable prefix. + +It is mandatory to maintain consistency between these elements, using +the following rules: + + * the package directory and the *.mk name are the package name + itself (e.g.: package/foo-bar_boo/foo-bar_boo.mk); + * the make target name is the package name itself (e.g.: + foo-bar_boo); + * the config entry is the upper case package name with . and - + characters substituted with _, prefixed with BR2_PACKAGE_ (e.g.: + BR2_PACKAGE_FOO_BAR_BOO); + * the *.mk file variable prefix is the upper case package name with + . and - characters substituted with _ (e.g.: + FOO_BAR_BOO_VERSION). + +18.24.2. How to check the coding style + +Buildroot provides a script in utils/check-package that checks new or +changed files for coding style. It is not a complete language +validator, but it catches many common mistakes. It is meant to run in +the actual files you created or modified, before creating the patch +for submission. + +This script can be used for packages, filesystem makefiles, Config.in +files, etc. It does not check the files defining the package +infrastructures and some other files containing similar common code. + +To use it, run the check-package script, by telling which files you +created or changed: + +$ ./utils/check-package package/new-package/* + +If you have the utils directory in your path you can also run: + +$ cd package/new-package/ +$ check-package * + +The tool can also be used for packages in a br2-external: + +$ check-package -b /path/to/br2-ext-tree/package/my-package/* + +18.24.3. How to test your package + +Once you have added your new package, it is important that you test +it under various conditions: does it build for all architectures? +Does it build with the different C libraries? Does it need threads, +NPTL? And so on… + +Buildroot runs autobuilders [http://autobuild.buildroot.org/] which +continuously test random configurations. However, these only build +the master branch of the git tree, and your new fancy package is not +yet there. + +Buildroot provides a script in utils/test-pkg that uses the same base +configurations as used by the autobuilders so you can test your +package in the same conditions. + +First, create a config snippet that contains all the necessary +options needed to enable your package, but without any architecture +or toolchain option. For example, let’s create a config snippet that +just enables libcurl, without any TLS backend: + +$ cat libcurl.config +BR2_PACKAGE_LIBCURL=y + +If your package needs more configuration options, you can add them to +the config snippet. For example, here’s how you would test libcurl +with openssl as a TLS backend and the curl program: + +$ cat libcurl.config +BR2_PACKAGE_LIBCURL=y +BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_OPENSSL=y + +Then run the test-pkg script, by telling it what config snippet to +use and what package to test: + +$ ./utils/test-pkg -c libcurl.config -p libcurl + +By default, test-pkg will build your package against a subset of the +toolchains used by the autobuilders, which has been selected by the +Buildroot developers as being the most useful and representative +subset. If you want to test all toolchains, pass the -a option. Note +that in any case, internal toolchains are excluded as they take too +long to build. + +The output lists all toolchains that are tested and the corresponding +result (excerpt, results are fake): + +$ ./utils/test-pkg -c libcurl.config -p libcurl + armv5-ctng-linux-gnueabi [ 1/11]: OK + armv7-ctng-linux-gnueabihf [ 2/11]: OK + br-aarch64-glibc [ 3/11]: SKIPPED + br-arcle-hs38 [ 4/11]: SKIPPED + br-arm-basic [ 5/11]: FAILED + br-arm-cortex-a9-glibc [ 6/11]: OK + br-arm-cortex-a9-musl [ 7/11]: FAILED + br-arm-cortex-m4-full [ 8/11]: OK + br-arm-full [ 9/11]: OK + br-arm-full-nothread [10/11]: FAILED + br-arm-full-static [11/11]: OK +11 builds, 2 skipped, 2 build failed, 1 legal-info failed + +The results mean: + + * OK: the build was successful. + * SKIPPED: one or more configuration options listed in the config + snippet were not present in the final configuration. This is due + to options having dependencies not satisfied by the toolchain, + such as for example a package that depends on BR2_USE_MMU with a + noMMU toolchain. The missing options are reported in + missing.config in the output build directory (~/br-test-pkg/ + TOOLCHAIN_NAME/ by default). + * FAILED: the build failed. Inspect the logfile file in the output + build directory to see what went wrong: + + + the actual build failed, + + the legal-info failed, + + one of the preliminary steps (downloading the config file, + applying the configuration, running dirclean for the package) + failed. + +When there are failures, you can just re-run the script with the same +options (after you fixed your package); the script will attempt to +re-build the package specified with -p for all toolchains, without +the need to re-build all the dependencies of that package. + +The test-pkg script accepts a few options, for which you can get some +help by running: + +$ ./utils/test-pkg -h + +18.24.4. How to add a package from GitHub + +Packages on GitHub often don’t have a download area with release +tarballs. However, it is possible to download tarballs directly from +the repository on GitHub. As GitHub is known to have changed download +mechanisms in the past, the github helper function should be used as +shown below. + +# Use a tag or a full commit ID +FOO_VERSION = 1.0 +FOO_SITE = $(call github,,,v$(FOO_VERSION)) + +Notes + + * The FOO_VERSION can either be a tag or a commit ID. + * The tarball name generated by github matches the default one from + Buildroot (e.g.: + foo-f6fb6654af62045239caed5950bc6c7971965e60.tar.gz), so it is + not necessary to specify it in the .mk file. + * When using a commit ID as version, you should use the full 40 hex + characters. + * When the tag contains a prefix such as v in v1.0, then the + VERSION variable should contain just 1.0, and the v should be + added directly in the SITE variable, as illustrated above. This + ensures that the VERSION variable value can be used to match + against release-monitoring.org [http://www.release-monitoring.org + /] results. + +If the package you wish to add does have a release section on GitHub, +the maintainer may have uploaded a release tarball, or the release +may just point to the automatically generated tarball from the git +tag. If there is a release tarball uploaded by the maintainer, we +prefer to use that since it may be slightly different (e.g. it +contains a configure script so we don’t need to do AUTORECONF). + +You can see on the release page if it’s an uploaded tarball or a git +tag: + + * If it looks like the image above then it was uploaded by the + maintainer and you should use that link (in that example: + mongrel2-v1.9.2.tar.bz2) to specify FOO_SITE, and not use the + github helper. + * On the other hand, if there’s is only the "Source code" link, + then it’s an automatically generated tarball and you should use + the github helper function. + +18.24.5. How to add a package from Gitlab + +In a similar way to the github macro described in Section 18.24.4, +“How to add a package from GitHub”, Buildroot also provides the +gitlab macro to download from Gitlab repositories. It can be used to +download auto-generated tarballs produced by Gitlab, either for +specific tags or commits: + +# Use a tag or a full commit ID +FOO_VERSION = 1.0 +FOO_SITE = $(call gitlab,,,v$(FOO_VERSION)) + +By default, it will use a .tar.gz tarball, but Gitlab also provides +.tar.bz2 tarballs, so by adding a _SOURCE variable, this +.tar.bz2 tarball can be used: + +# Use a tag or a full commit ID +FOO_VERSION = 1.0 +FOO_SITE = $(call gitlab,,,v$(FOO_VERSION)) +FOO_SOURCE = foo-$(FOO_VERSION).tar.bz2 + +If there is a specific tarball uploaded by the upstream developers in +https://gitlab.com//releases/, do not use this macro, but +rather use directly the link to the tarball. + +18.25. Conclusion + +As you can see, adding a software package to Buildroot is simply a +matter of writing a Makefile using an existing example and modifying +it according to the compilation process required by the package. + +If you package software that might be useful for other people, don’t +forget to send a patch to the Buildroot mailing list (see +Section 22.5, “Submitting patches”)! + +Chapter 19. Patching a package + +While integrating a new package or updating an existing one, it may +be necessary to patch the source of the software to get it +cross-built within Buildroot. + +Buildroot offers an infrastructure to automatically handle this +during the builds. It supports three ways of applying patch sets: +downloaded patches, patches supplied within buildroot and patches +located in a user-defined global patch directory. + +19.1. Providing patches + +19.1.1. Downloaded + +If it is necessary to apply a patch that is available for download, +then add it to the _PATCH variable. If an entry contains +://, then Buildroot will assume it is a full URL and download the +patch from this location. Otherwise, Buildroot will assume that the +patch should be downloaded from _SITE. It can be a +single patch, or a tarball containing a patch series. + +Like for all downloads, a hash should be added to the +.hash file. + +This method is typically used for packages from Debian. + +19.1.2. Within Buildroot + +Most patches are provided within Buildroot, in the package directory; +these typically aim to fix cross-compilation, libc support, or other +such issues. + +These patch files should be named -.patch. + +Notes + + * The patch files coming with Buildroot should not contain any + package version reference in their filename. + * The field in the patch file name refers to the apply + order, and shall start at 1; It is preferred to pad the number + with zeros up to 4 digits, like git-format-patch does. E.g.: + 0001-foobar-the-buz.patch + * Previously, it was mandatory for patches to be prefixed with the + name of the package, like --.patch, + but that is no longer the case. Existing packages will be fixed + as time passes. Do not prefix patches with the package name. + * Previously, a series file, as used by quilt, could also be added + in the package directory. In that case, the series file defines + the patch application order. This is deprecated, and will be + removed in the future. Do not use a series file. + +19.1.3. Global patch directory + +The BR2_GLOBAL_PATCH_DIR configuration file option can be used to +specify a space separated list of one or more directories containing +global package patches. See Section 9.8, “Adding project-specific +patches” for details. + +19.2. How patches are applied + + 1. Run the _PRE_PATCH_HOOKS commands if defined; + 2. Cleanup the build directory, removing any existing *.rej files; + 3. If _PATCH is defined, then patches from these + tarballs are applied; + 4. If there are some *.patch files in the package’s Buildroot + directory or in a package subdirectory named , + then: + + + If a series file exists in the package directory, then + patches are applied according to the series file; + + Otherwise, patch files matching *.patch are applied in + alphabetical order. So, to ensure they are applied in the + right order, it is highly recommended to name the patch files + like this: -.patch, where + refers to the apply order. + 5. If BR2_GLOBAL_PATCH_DIR is defined, the directories will be + enumerated in the order they are specified. The patches are + applied as described in the previous step. + 6. Run the _POST_PATCH_HOOKS commands if defined. + +If something goes wrong in the steps 3 or 4, then the build fails. + +19.3. Format and licensing of the package patches + +Patches are released under the same license as the software they +apply to (see Section 13.2, “Complying with the Buildroot license”). + +A message explaining what the patch does, and why it is needed, +should be added in the header commentary of the patch. + +You should add a Signed-off-by statement in the header of the each +patch to help with keeping track of the changes and to certify that +the patch is released under the same license as the software that is +modified. + +If the software is under version control, it is recommended to use +the upstream SCM software to generate the patch set. + +Otherwise, concatenate the header with the output of the diff -purN +package-version.orig/ package-version/ command. + +If you update an existing patch (e.g. when bumping the package +version), make sure the existing From header and Signed-off-by tags +are not removed, but do update the rest of the patch comment when +appropriate. + +At the end, the patch should look like: + +configure.ac: add C++ support test + +Signed-off-by: John Doe + +--- configure.ac.orig ++++ configure.ac +@@ -40,2 +40,12 @@ + +AC_PROG_MAKE_SET ++ ++AC_CACHE_CHECK([whether the C++ compiler works], ++ [rw_cv_prog_cxx_works], ++ [AC_LANG_PUSH([C++]) ++ AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], ++ [rw_cv_prog_cxx_works=yes], ++ [rw_cv_prog_cxx_works=no]) ++ AC_LANG_POP([C++])]) ++ ++AM_CONDITIONAL([CXX_WORKS], [test "x$rw_cv_prog_cxx_works" = "xyes"]) + +19.4. Integrating patches found on the Web + +When integrating a patch of which you are not the author, you have to +add a few things in the header of the patch itself. + +Depending on whether the patch has been obtained from the project +repository itself, or from somewhere on the web, add one of the +following tags: + +Backported from: + +or + +Fetch from: + +It is also sensible to add a few words about any changes to the patch +that may have been necessary. + +Chapter 20. Download infrastructure + +TODO + +Chapter 21. Debugging Buildroot + +It is possible to instrument the steps Buildroot does when building +packages. Define the variable BR2_INSTRUMENTATION_SCRIPTS to contain +the path of one or more scripts (or other executables), in a +space-separated list, you want called before and after each step. The +scripts are called in sequence, with three parameters: + + * start or end to denote the start (resp. the end) of a step; + * the name of the step about to be started, or which just ended; + * the name of the package. + +For example : + +make BR2_INSTRUMENTATION_SCRIPTS="/path/to/my/script1 /path/to/my/script2" + +The list of steps is: + + * extract + * patch + * configure + * build + * install-host, when a host-package is installed in $(HOST_DIR) + * install-target, when a target-package is installed in $ + (TARGET_DIR) + * install-staging, when a target-package is installed in $ + (STAGING_DIR) + * install-image, when a target-package installs files in $ + (BINARIES_DIR) + +The script has access to the following variables: + + * BR2_CONFIG: the path to the Buildroot .config file + * HOST_DIR, STAGING_DIR, TARGET_DIR: see Section 18.5.2, + “generic-package reference” + * BUILD_DIR: the directory where packages are extracted and built + * BINARIES_DIR: the place where all binary files (aka images) are + stored + * BASE_DIR: the base output directory + +Chapter 22. Contributing to Buildroot + +There are many ways in which you can contribute to Buildroot: +analyzing and fixing bugs, analyzing and fixing package build +failures detected by the autobuilders, testing and reviewing patches +sent by other developers, working on the items in our TODO list and +sending your own improvements to Buildroot or its manual. The +following sections give a little more detail on each of these items. + +If you are interested in contributing to Buildroot, the first thing +you should do is to subscribe to the Buildroot mailing list. This +list is the main way of interacting with other Buildroot developers +and to send contributions to. If you aren’t subscribed yet, then +refer to Chapter 5, Community resources for the subscription link. + +If you are going to touch the code, it is highly recommended to use a +git repository of Buildroot, rather than starting from an extracted +source code tarball. Git is the easiest way to develop from and +directly send your patches to the mailing list. Refer to Chapter 3, +Getting Buildroot for more information on obtaining a Buildroot git +tree. + +22.1. Reproducing, analyzing and fixing bugs + +A first way of contributing is to have a look at the open bug reports +in the Buildroot bug tracker [https://bugs.buildroot.org/buglist.cgi? +product=buildroot]. As we strive to keep the bug count as small as +possible, all help in reproducing, analyzing and fixing reported bugs +is more than welcome. Don’t hesitate to add a comment to bug reports +reporting your findings, even if you don’t yet see the full picture. + +22.2. Analyzing and fixing autobuild failures + +The Buildroot autobuilders are a set of build machines that +continuously run Buildroot builds based on random configurations. +This is done for all architectures supported by Buildroot, with +various toolchains, and with a random selection of packages. With the +large commit activity on Buildroot, these autobuilders are a great +help in detecting problems very early after commit. + +All build results are available at http://autobuild.buildroot.org, +statistics are at http://autobuild.buildroot.org/stats.php. Every +day, an overview of all failed packages is sent to the mailing list. + +Detecting problems is great, but obviously these problems have to be +fixed as well. Your contribution is very welcome here! There are +basically two things that can be done: + + * Analyzing the problems. The daily summary mails do not contain + details about the actual failures: in order to see what’s going + on you have to open the build log and check the last output. + Having someone doing this for all packages in the mail is very + useful for other developers, as they can make a quick initial + analysis based on this output alone. + * Fixing a problem. When fixing autobuild failures, you should + follow these steps: + + 1. Check if you can reproduce the problem by building with the + same configuration. You can do this manually, or use the + br-reproduce-build [http://git.buildroot.org/buildroot-test/ + tree/utils/br-reproduce-build] script that will automatically + clone a Buildroot git repository, checkout the correct + revision, download and set the right configuration, and start + the build. + 2. Analyze the problem and create a fix. + 3. Verify that the problem is really fixed by starting from a + clean Buildroot tree and only applying your fix. + 4. Send the fix to the Buildroot mailing list (see Section 22.5, + “Submitting patches”). In case you created a patch against + the package sources, you should also send the patch upstream + so that the problem will be fixed in a later release, and the + patch in Buildroot can be removed. In the commit message of a + patch fixing an autobuild failure, add a reference to the + build result directory, as follows: + +Fixes: http://autobuild.buildroot.org/results/51000a9d4656afe9e0ea6f07b9f8ed374c2e4069 + +22.3. Reviewing and testing patches + +With the amount of patches sent to the mailing list each day, the +maintainer has a very hard job to judge which patches are ready to +apply and which ones aren’t. Contributors can greatly help here by +reviewing and testing these patches. + +In the review process, do not hesitate to respond to patch +submissions for remarks, suggestions or anything that will help +everyone to understand the patches and make them better. Please use +internet style replies in plain text emails when responding to patch +submissions. + +To indicate approval of a patch, there are three formal tags that +keep track of this approval. To add your tag to a patch, reply to it +with the approval tag below the original author’s Signed-off-by line. +These tags will be picked up automatically by patchwork (see +Section 22.3.1, “Applying Patches from Patchwork”) and will be part +of the commit log when the patch is accepted. + +Tested-by + Indicates that the patch has been tested successfully. You are + encouraged to specify what kind of testing you performed + (compile-test on architecture X and Y, runtime test on target A, + …). This additional information helps other testers and the + maintainer. +Reviewed-by + Indicates that you code-reviewed the patch and did your best in + spotting problems, but you are not sufficiently familiar with the + area touched to provide an Acked-by tag. This means that there + may be remaining problems in the patch that would be spotted by + someone with more experience in that area. Should such problems + be detected, your Reviewed-by tag remains appropriate and you + cannot be blamed. +Acked-by + Indicates that you code-reviewed the patch and you are familiar + enough with the area touched to feel that the patch can be + committed as-is (no additional changes required). In case it + later turns out that something is wrong with the patch, your + Acked-by could be considered inappropriate. The difference + between Acked-by and Reviewed-by is thus mainly that you are + prepared to take the blame on Acked patches, but not on Reviewed + ones. + +If you reviewed a patch and have comments on it, you should simply +reply to the patch stating these comments, without providing a +Reviewed-by or Acked-by tag. These tags should only be provided if +you judge the patch to be good as it is. + +It is important to note that neither Reviewed-by nor Acked-by imply +that testing has been performed. To indicate that you both reviewed +and tested the patch, provide two separate tags (Reviewed/Acked-by +and Tested-by). + +Note also that any developer can provide Tested/Reviewed/Acked-by +tags, without exception, and we encourage everyone to do this. +Buildroot does not have a defined group of core developers, it just +so happens that some developers are more active than others. The +maintainer will value tags according to the track record of their +submitter. Tags provided by a regular contributor will naturally be +trusted more than tags provided by a newcomer. As you provide tags +more regularly, your trustworthiness (in the eyes of the maintainer) +will go up, but any tag provided is valuable. + +Buildroot’s Patchwork website can be used to pull in patches for +testing purposes. Please see Section 22.3.1, “Applying Patches from +Patchwork” for more information on using Buildroot’s Patchwork +website to apply patches. + +22.3.1. Applying Patches from Patchwork + +The main use of Buildroot’s Patchwork website for a developer is for +pulling in patches into their local git repository for testing +purposes. + +When browsing patches in the patchwork management interface, an mbox +link is provided at the top of the page. Copy this link address and +run the following commands: + +$ git checkout -b +$ wget -O - | git am + +Another option for applying patches is to create a bundle. A bundle +is a set of patches that you can group together using the patchwork +interface. Once the bundle is created and the bundle is made public, +you can copy the mbox link for the bundle and apply the bundle using +the above commands. + +22.4. Work on items from the TODO list + +If you want to contribute to Buildroot but don’t know where to start, +and you don’t like any of the above topics, you can always work on +items from the Buildroot TODO list [http://elinux.org/Buildroot# +Todo_list]. Don’t hesitate to discuss an item first on the mailing +list or on IRC. Do edit the wiki to indicate when you start working +on an item, so we avoid duplicate efforts. + +22.5. Submitting patches + +Note + +Please, do not attach patches to bugs, send them to the mailing list +instead. + +If you made some changes to Buildroot and you would like to +contribute them to the Buildroot project, proceed as follows. + +22.5.1. The formatting of a patch + +We expect patches to be formatted in a specific way. This is +necessary to make it easy to review patches, to be able to apply them +easily to the git repository, to make it easy to find back in the +history how and why things have changed, and to make it possible to +use git bisect to locate the origin of a problem. + +First of all, it is essential that the patch has a good commit +message. The commit message should start with a separate line with a +brief summary of the change, prefixed by the area touched by the +patch. A few examples of good commit titles: + + * package/linuxptp: bump version to 2.0 + * configs/imx23evk: bump Linux version to 4.19 + * package/pkg-generic: postpone evaluation of dependency conditions + * boot/uboot: needs host-{flex,bison} + * support/testing: add python-ubjson tests + +The description that follows the prefix should start with a lower +case letter (i.e "bump", "needs", "postpone", "add" in the above +examples). + +Second, the body of the commit message should describe why this +change is needed, and if necessary also give details about how it was +done. When writing the commit message, think of how the reviewers +will read it, but also think about how you will read it when you look +at this change again a few years down the line. + +Third, the patch itself should do only one change, but do it +completely. Two unrelated or weakly related changes should usually be +done in two separate patches. This usually means that a patch affects +only a single package. If several changes are related, it is often +still possible to split them up in small patches and apply them in a +specific order. Small patches make it easier to review, and often +make it easier to understand afterwards why a change was done. +However, each patch must be complete. It is not allowed that the +build is broken when only the first but not the second patch is +applied. This is necessary to be able to use git bisect afterwards. + +Of course, while you’re doing your development, you’re probably going +back and forth between packages, and certainly not committing things +immediately in a way that is clean enough for submission. So most +developers rewrite the history of commits to produce a clean set of +commits that is appropriate for submission. To do this, you need to +use interactive rebasing. You can learn about it in the Pro Git book +[https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History]. +Sometimes, it is even easier to discard you history with git reset +--soft origin/master and select individual changes with git add -i or +git add -p. + +Finally, the patch should be signed off. This is done by adding +Signed-off-by: Your Real Name <> at the end of the commit message. +git commit -s does that for you, if configured properly. The +Signed-off-by tag means that you publish the patch under the +Buildroot license (i.e. GPL-2.0+, except for package patches, which +have the upstream license), and that you are allowed to do so. See +the Developer Certificate of Origin [http://developercertificate.org +/] for details. + +When adding new packages, you should submit every package in a +separate patch. This patch should have the update to package/ +Config.in, the package Config.in file, the .mk file, the .hash file, +any init script, and all package patches. If the package has many +sub-options, these are sometimes better added as separate follow-up +patches. The summary line should be something like : new +package. The body of the commit message can be empty for simple +packages, or it can contain the description of the package (like the +Config.in help text). If anything special has to be done to build the +package, this should also be explained explicitly in the commit +message body. + +When you bump a package to a new version, you should also submit a +separate patch for each package. Don’t forget to update the .hash +file, or add it if it doesn’t exist yet. Also don’t forget to check +if the _LICENSE and _LICENSE_FILES are still valid. The summary line +should be something like : bump to version . If the new version only contains security updates compared +to the existing one, the summary should be : security +bump to version and the commit message body should show +the CVE numbers that are fixed. If some package patches can be +removed in the new version, it should be explained explicitly why +they can be removed, preferably with the upstream commit ID. Also any +other required changes should be explained explicitly, like configure +options that no longer exist or are no longer needed. + +If you are interested in getting notified of build failures and of +further changes in the packages you added or modified, please add +yourself to the DEVELOPERS file. This should be done in the same +patch creating or modifying the package. See the DEVELOPERS file for +more information. + +Buildroot provides a handy tool to check for common coding style +mistakes on files you created or modified, called check-package (see +Section 18.24.2, “How to check the coding style” for more +information). + +22.5.2. Preparing a patch series + +Starting from the changes committed in your local git view, rebase +your development branch on top of the upstream tree before generating +a patch set. To do so, run: + +$ git fetch --all --tags +$ git rebase origin/master + +Now, you are ready to generate then submit your patch set. + +To generate it, run: + +$ git format-patch -M -n -s -o outgoing origin/master + +This will generate patch files in the outgoing subdirectory, +automatically adding the Signed-off-by line. + +Once patch files are generated, you can review/edit the commit +message before submitting them, using your favorite text editor. + +Buildroot provides a handy tool to know to whom your patches should +be sent, called get-developers (see Chapter 23, DEVELOPERS file and +get-developers for more information). This tool reads your patches +and outputs the appropriate git send-email command to use: + +$ ./utils/get-developers outgoing/* + +Use the output of get-developers to send your patches: + +$ git send-email --to buildroot@buildroot.org --cc bob --cc alice outgoing/* + +Alternatively, get-developers -e can be used directly with the +--cc-cmd argument to git send-email to automatically CC the affected +developers: + +$ git send-email --to buildroot@buildroot.org \ + --cc-cmd './utils/get-developers -e' origin/master + +git can be configured to automatically do this out of the box with: + +$ git config sendemail.to buildroot@buildroot.org +$ git config sendemail.ccCmd "$(pwd)/utils/get-developers -e" + +And then just do: + +$ git send-email origin/master + +Note that git should be configured to use your mail account. To +configure git, see man git-send-email or google it. + +If you do not use git send-email, make sure posted patches are not +line-wrapped, otherwise they cannot easily be applied. In such a +case, fix your e-mail client, or better yet, learn to use git +send-email. + +22.5.3. Cover letter + +If you want to present the whole patch set in a separate mail, add +--cover-letter to the git format-patch command (see man +git-format-patch for further information). This will generate a +template for an introduction e-mail to your patch series. + +A cover letter may be useful to introduce the changes you propose in +the following cases: + + * large number of commits in the series; + * deep impact of the changes in the rest of the project; + * RFC ^[4]; + * whenever you feel it will help presenting your work, your + choices, the review process, etc. + +22.5.4. Patches for maintenance branches + +When fixing bugs on a maintenance branch, bugs should be fixed on the +master branch first. The commit log for such a patch may then contain +a post-commit note specifying what branches are affected: + +package/foo: fix stuff + +Signed-off-by: Your Real Name +--- +Backport to: 2020.02.x, 2020.05.x +(2020.08.x not affected as the version was bumped) + +Those changes will then be backported by a maintainer to the affected +branches. + +However, some bugs may apply only to a specific release, for example +because it is using an older version of a package. In that case, +patches should be based off the maintenance branch, and the patch +subject prefix must include the maintenance branch name (for example +"[PATCH 2020.02.x]"). This can be done with the git format-patch flag +--subject-prefix: + +$ git format-patch --subject-prefix "PATCH 2020.02.x" \ + -M -s -o outgoing origin/2020.02.x + +Then send the patches with git send-email, as described above. + +22.5.5. Patch revision changelog + +When improvements are requested, the new revision of each commit +should include a changelog of the modifications between each +submission. Note that when your patch series is introduced by a cover +letter, an overall changelog may be added to the cover letter in +addition to the changelog in the individual commits. The best thing +to rework a patch series is by interactive rebasing: git rebase -i +origin/master. Consult the git manual for more information. + +When added to the individual commits, this changelog is added when +editing the commit message. Below the Signed-off-by section, add --- +and your changelog. + +Although the changelog will be visible for the reviewers in the mail +thread, as well as in patchwork [http://patchwork.buildroot.org], git +will automatically ignores lines below --- when the patch will be +merged. This is the intended behavior: the changelog is not meant to +be preserved forever in the git history of the project. + +Hereafter the recommended layout: + +Patch title: short explanation, max 72 chars + +A paragraph that explains the problem, and how it manifests itself. If +the problem is complex, it is OK to add more paragraphs. All paragraphs +should be wrapped at 72 characters. + +A paragraph that explains the root cause of the problem. Again, more +than one paragraph is OK. + +Finally, one or more paragraphs that explain how the problem is solved. +Don't hesitate to explain complex solutions in detail. + +Signed-off-by: John DOE + +--- +Changes v2 -> v3: + - foo bar (suggested by Jane) + - bar buz + +Changes v1 -> v2: + - alpha bravo (suggested by John) + - charly delta + +Any patch revision should include the version number. The version +number is simply composed of the letter v followed by an integer +greater or equal to two (i.e. "PATCH v2", "PATCH v3" …). + +This can be easily handled with git format-patch by using the option +--subject-prefix: + +$ git format-patch --subject-prefix "PATCH v4" \ + -M -s -o outgoing origin/master + +Since git version 1.8.1, you can also use -v (where is the +version number): + +$ git format-patch -v4 -M -s -o outgoing origin/master + +When you provide a new version of a patch, please mark the old one as +superseded in patchwork [http://patchwork.buildroot.org]. You need to +create an account on patchwork [http://patchwork.buildroot.org] to be +able to modify the status of your patches. Note that you can only +change the status of patches you submitted yourself, which means the +email address you register in patchwork [http:// +patchwork.buildroot.org] should match the one you use for sending +patches to the mailing list. + +You can also add the --in-reply-to option when +submitting a patch to the mailing list. The id of the mail to reply +to can be found under the "Message Id" tag on patchwork [http:// +patchwork.buildroot.org]. The advantage of in-reply-to is that +patchwork will automatically mark the previous version of the patch +as superseded. + +22.6. Reporting issues/bugs or getting help + +Before reporting any issue, please check in the mailing list archive +whether someone has already reported and/or fixed a similar problem. + +However you choose to report bugs or get help, either by opening a +bug in the bug tracker or by sending a mail to the mailing list, +there are a number of details to provide in order to help people +reproduce and find a solution to the issue. + +Try to think as if you were trying to help someone else; in that +case, what would you need? + +Here is a short list of details to provide in such case: + + * host machine (OS/release) + * version of Buildroot + * target for which the build fails + * package(s) for which the build fails + * the command that fails and its output + * any information you think that may be relevant + +Additionally, you should add the .config file (or if you know how, a +defconfig; see Section 9.3, “Storing the Buildroot configuration”). + +If some of these details are too large, do not hesitate to use a +pastebin service. Note that not all available pastebin services will +preserve Unix-style line terminators when downloading raw pastes. +Following pastebin services are known to work correctly: - https:// +gist.github.com/ - http://code.bulix.org/ + +22.7. Using the run-tests framework + +Buildroot includes a run-time testing framework called run-tests +built upon Python scripting and QEMU runtime execution. There are two +types of test cases within the framework, one for build time tests +and another for run-time tests that have a QEMU dependency. The goals +of the framework are the following: + + * build a well defined configuration + * optionally, verify some properties of the build output + * if it is a run-time test: + + + boot it under QEMU + + run some test condition to verify that a given feature is + working + +The run-tests tool has a series of options documented in the tool’s +help -h description. Some common options include setting the download +folder, the output folder, keeping build output, and for multiple +test cases, you can set the JLEVEL for each. + +Here is an example walk through of running a test case. + + * For a first step, let us see what all the test case options are. + The test cases can be listed by executing support/testing/ + run-tests -l. These tests can all be run individually during test + development from the console. Both one at a time and selectively + as a group of a subset of tests. + +$ support/testing/run-tests -l +List of tests +test_run (tests.utils.test_check_package.TestCheckPackage) +Test the various ways the script can be called in a simple top to ... ok +test_run (tests.toolchain.test_external.TestExternalToolchainBuildrootMusl) ... ok +test_run (tests.toolchain.test_external.TestExternalToolchainBuildrootuClibc) ... ok +test_run (tests.toolchain.test_external.TestExternalToolchainCCache) ... ok +test_run (tests.toolchain.test_external.TestExternalToolchainCtngMusl) ... ok +test_run (tests.toolchain.test_external.TestExternalToolchainLinaroArm) ... ok +test_run (tests.toolchain.test_external.TestExternalToolchainSourceryArmv4) ... ok +test_run (tests.toolchain.test_external.TestExternalToolchainSourceryArmv5) ... ok +test_run (tests.toolchain.test_external.TestExternalToolchainSourceryArmv7) ... ok +[snip] +test_run (tests.init.test_systemd.TestInitSystemSystemdRoFull) ... ok +test_run (tests.init.test_systemd.TestInitSystemSystemdRoIfupdown) ... ok +test_run (tests.init.test_systemd.TestInitSystemSystemdRoNetworkd) ... ok +test_run (tests.init.test_systemd.TestInitSystemSystemdRwFull) ... ok +test_run (tests.init.test_systemd.TestInitSystemSystemdRwIfupdown) ... ok +test_run (tests.init.test_systemd.TestInitSystemSystemdRwNetworkd) ... ok +test_run (tests.init.test_busybox.TestInitSystemBusyboxRo) ... ok +test_run (tests.init.test_busybox.TestInitSystemBusyboxRoNet) ... ok +test_run (tests.init.test_busybox.TestInitSystemBusyboxRw) ... ok +test_run (tests.init.test_busybox.TestInitSystemBusyboxRwNet) ... ok + +Ran 157 tests in 0.021s + +OK + +Those runtime tests are regularly executed by Buildroot Gitlab CI +infrastructure, see .gitlab.yml and https://gitlab.com/buildroot.org/ +buildroot/-/jobs. + +22.7.1. Creating a test case + +The best way to get familiar with how to create a test case is to +look at a few of the basic file system support/testing/tests/fs/ and +init support/testing/tests/init/ test scripts. Those tests give good +examples of a basic build and build with run type of tests. There are +other more advanced cases that use things like nested br2-external +folders to provide skeletons and additional packages. + +The test cases by default use a br-arm-full-* uClibc-ng toolchain and +the prebuild kernel for a armv5/7 cpu. It is recommended to use the +default defconfig test configuration except when Glibc/musl or a +newer kernel are necessary. By using the default it saves build time +and the test would automatically inherit a kernel/std library upgrade +when the default is updated. + +The basic test case definition involves + + * Creation of a new test file + * Defining a unique test class + * Determining if the default defconfig plus test options can be + used + * Implementing a def test_run(self): function to optionally startup + the emulator and provide test case conditions. + +After creating the test script, add yourself to the DEVELOPERS file +to be the maintainer of that test case. + +22.7.2. Debugging a test case + +Within the Buildroot repository, the testing framework is organized +at the top level in support/testing/ by folders of conf, infra and +tests. All the test cases live under the test folder and are +organized in various folders representing the catagory of test. + +Lets walk through an example. + + * Using the Busybox Init system test case with a read/write rootfs + tests.init.test_busybox.TestInitSystemBusyboxRw + * A minimal set of command line arguments when debugging a test + case would include -d which points to your dl folder, -o to an + output folder, and -k to keep any output on both pass/fail. With + those options, the test will retain logging and build artifacts + providing status of the build and execution of the test case. + +$ support/testing/run-tests -d dl -o output_folder -k tests.init.test_busybox.TestInitSystemBusyboxRw +15:03:26 TestInitSystemBusyboxRw Starting +15:03:28 TestInitSystemBusyboxRw Building +15:08:18 TestInitSystemBusyboxRw Building done +15:08:27 TestInitSystemBusyboxRw Cleaning up +. +Ran 1 test in 301.140s + +OK + + * For the case of a successful build, the output_folder would + contain a folder with the Buildroot build, build log + and run-time log. If the build failed, the console output would + show the stage at which it failed (setup / build / run). + Depending on the failure stage, the build/run logs and/or + Buildroot build artifacts can be inspected and instrumented. If + the QEMU instance needs to be launched for additional testing, + the first few lines of the run-time log capture it and it would + allow some incremental testing without re-running support/testing + /run-tests. + * You can also make modifications to the current sources inside the + output_folder (e.g. for debug purposes) and rerun the standard + Buildroot make targets (in order to regenerate the complete image + with the new modifications) and then rerun the test. Modifying + the sources directly can speed up debugging compared to adding + patch files, wiping the output directoy, and starting the test + again. + +$ ls output_folder/ +TestInitSystemBusyboxRw/ +TestInitSystemBusyboxRw-build.log +TestInitSystemBusyboxRw-run.log + + * The source file used to implement this example test is found + under support/testing/tests/init/test_busybox.py. This file + outlines the minimal defconfig that creates the build, QEMU + configuration to launch the built images and the test case + assertions. + +To test an existing or new test case within Gitlab CI, there is a +method of invoking a specific test by creating a Buildroot fork in +Gitlab under your account. This can be handy when adding/changing a +run-time test or fixing a bug on a use case tested by a run-time test +case. + +In the examples below, the component of the branch name is a +unique string you choose to identify this specific job being created. + + * to trigger all run-test test case jobs: + + $ git push gitlab HEAD:-runtime-tests + + * to trigger one test case job, a specific branch naming string is + used that includes the full test case name. + + $ git push gitlab HEAD:- + + +--------------------------------------------------------------------- + +^[4] RFC: (Request for comments) change proposal + +Chapter 23. DEVELOPERS file and get-developers + +The main Buildroot directory contains a file named DEVELOPERS that +lists the developers involved with various areas of Buildroot. Thanks +to this file, the get-developers tool allows to: + + * Calculate the list of developers to whom patches should be sent, + by parsing the patches and matching the modified files with the + relevant developers. See Section 22.5, “Submitting patches” for + details. + * Find which developers are taking care of a given architecture or + package, so that they can be notified when a build failure occurs + on this architecture or package. This is done in interaction with + Buildroot’s autobuild infrastructure. + +We ask developers adding new packages, new boards, or generally new +functionality in Buildroot, to register themselves in the DEVELOPERS +file. As an example, we expect a developer contributing a new package +to include in his patch the appropriate modification to the +DEVELOPERS file. + +The DEVELOPERS file format is documented in detail inside the file +itself. + +The get-developers tool, located in utils/ allows to use the +DEVELOPERS file for various tasks: + + * When passing one or several patches as command line argument, + get-developers will return the appropriate git send-email + command. If the -e option is passed, only the email addresses are + printed in a format suitable for git send-email --cc-cmd. + * When using the -a command line option, get-developers will + return the list of developers in charge of the given + architecture. + * When using the -p command line option, get-developers + will return the list of developers in charge of the given + package. + * When using the -c command line option, get-developers will look + at all files under version control in the Buildroot repository, + and list the ones that are not handled by any developer. The + purpose of this option is to help completing the DEVELOPERS file. + * When using without any arguments, it validates the integrity of + the DEVELOPERS file and will note WARNINGS for items that don’t + match. + +Chapter 24. Release Engineering + +24.1. Releases + +The Buildroot project makes quarterly releases with monthly bugfix +releases. The first release of each year is a long term support +release, LTS. + + * Quarterly releases: 2020.02, 2020.05, 2020.08, and 2020.11 + * Bugfix releases: 2020.02.1, 2020.02.2, … + * LTS releases: 2020.02, 2021.02, … + +Releases are supported until the first bugfix release of the next +release, e.g., 2020.05.x is EOL when 2020.08.1 is released. + +LTS releases are supported until the first bugfix release of the next +LTS, e.g., 2020.02.x is supported until 2021.02.1 is released. + +24.2. Development + +Each release cycle consist of two months of development on the master +branch and one month stabilization before the release is made. During +this phase no new features are added to master, only bugfixes. + +The stabilization phase starts with tagging -rc1, and every week +until the release, another release candidate is tagged. + +To handle new features and version bumps during the stabilization +phase, a next branch may be created for these features. Once the +current release has been made, the next branch is merged into master +and the development cycle for the next release continues there. + +Part IV. Appendix + +Table of Contents + +25. Makedev syntax documentation +26. Makeusers syntax documentation +27. Migrating from older Buildroot versions + + 27.1. Migrating to 2016.11 + 27.2. Migrating to 2017.08 + +Chapter 25. Makedev syntax documentation + +The makedev syntax is used in several places in Buildroot to define +changes to be made for permissions, or which device files to create +and how to create them, in order to avoid calls to mknod. + +This syntax is derived from the makedev utility, and more complete +documentation can be found in the package/makedevs/README file. + +It takes the form of a space separated list of fields, one file per +line; the fields are: + ++--------------------------------------------------+ +|name|type|mode|uid|gid|major|minor|start|inc|count| ++--------------------------------------------------+ + +There are a few non-trivial blocks: + + * name is the path to the file you want to create/modify + * type is the type of the file, being one of: + + + f: a regular file + + d: a directory + + r: a directory recursively + + c: a character device file + + b: a block device file + + p: a named pipe + * mode are the usual permissions settings (only numerical values + are allowed) + * uid and gid are the UID and GID to set on this file; can be + either numerical values or actual names + * major and minor are here for device files, set to - for other + files + * start, inc and count are for when you want to create a batch of + files, and can be reduced to a loop, beginning at start, + incrementing its counter by inc until it reaches count + +Let’s say you want to change the permissions of a given file; using +this syntax, you will need to write: + +/usr/bin/foo f 755 0 0 - - - - - +/usr/bin/bar f 755 root root - - - - - +/data/buz f 644 buz-user buz-group - - - - - + +Alternatively, if you want to change owner/permission of a directory +recursively, you can write (to set UID to foo, GID to bar and access +rights to rwxr-x--- for the directory /usr/share/myapp and all files +and directories below it): + +/usr/share/myapp r 750 foo bar - - - - - + +On the other hand, if you want to create the device file /dev/hda and +the corresponding 15 files for the partitions, you will need for /dev +/hda: + +/dev/hda b 640 root root 3 0 0 0 - + +and then for device files corresponding to the partitions of /dev/ +hda, /dev/hdaX, X ranging from 1 to 15: + +/dev/hda b 640 root root 3 1 1 1 15 + +Extended attributes are supported if +BR2_ROOTFS_DEVICE_TABLE_SUPPORTS_EXTENDED_ATTRIBUTES is enabled. This +is done by adding a line starting with |xattr after the line +describing the file. Right now, only capability is supported as +extended attribute. + ++------------------+ +||xattr|capability | ++------------------+ + + * |xattr is a "flag" that indicate an extended attribute + * capability is a capability to add to the previous file + +If you want to add the capability cap_sys_admin to the binary foo, +you will write : + +/usr/bin/foo f 755 root root - - - - - +|xattr cap_sys_admin+eip + +You can add several capabilities to a file by using several |xattr +lines. If you want to add the capability cap_sys_admin and +cap_net_admin to the binary foo, you will write : + +/usr/bin/foo f 755 root root - - - - - +|xattr cap_sys_admin+eip +|xattr cap_net_admin+eip + +Chapter 26. Makeusers syntax documentation + +The syntax to create users is inspired by the makedev syntax, above, +but is specific to Buildroot. + +The syntax for adding a user is a space-separated list of fields, one +user per line; the fields are: + ++---------------------------------------------------------+ +|username|uid|group|gid|password|home|shell|groups|comment| ++---------------------------------------------------------+ + +Where: + + * username is the desired user name (aka login name) for the user. + It can not be root, and must be unique. If set to -, then just a + group will be created. + * uid is the desired UID for the user. It must be unique, and not + 0. If set to -1, then a unique UID will be computed by Buildroot + in the range [1000…1999] + * group is the desired name for the user’s main group. It can not + be root. If the group does not exist, it will be created. + * gid is the desired GID for the user’s main group. It must be + unique, and not 0. If set to -1, and the group does not already + exist, then a unique GID will be computed by Buildroot in the + range [1000..1999] + * password is the crypt(3)-encoded password. If prefixed with !, + then login is disabled. If prefixed with =, then it is + interpreted as clear-text, and will be crypt-encoded (using MD5). + If prefixed with !=, then the password will be crypt-encoded + (using MD5) and login will be disabled. If set to *, then login + is not allowed. If set to -, then no password value will be set. + * home is the desired home directory for the user. If set to -, no + home directory will be created, and the user’s home will be /. + Explicitly setting home to / is not allowed. + * shell is the desired shell for the user. If set to -, then /bin/ + false is set as the user’s shell. + * groups is the comma-separated list of additional groups the user + should be part of. If set to -, then the user will be a member of + no additional group. Missing groups will be created with an + arbitrary gid. + * comment (aka GECOS [https://en.wikipedia.org/wiki/Gecos_field] + field) is an almost-free-form text. + +There are a few restrictions on the content of each field: + + * except for comment, all fields are mandatory. + * except for comment, fields may not contain spaces. + * no field may contain a colon (:). + +If home is not -, then the home directory, and all files below, will +belong to the user and its main group. + +Examples: + +foo -1 bar -1 !=blabla /home/foo /bin/sh alpha,bravo Foo user + +This will create this user: + + * username (aka login name) is: foo + * uid is computed by Buildroot + * main group is: bar + * main group gid is computed by Buildroot + * clear-text password is: blabla, will be crypt(3)-encoded, and + login is disabled. + * home is: /home/foo + * shell is: /bin/sh + * foo is also a member of groups: alpha and bravo + * comment is: Foo user + +test 8000 wheel -1 = - /bin/sh - Test user + +This will create this user: + + * username (aka login name) is: test + * uid is : 8000 + * main group is: wheel + * main group gid is computed by Buildroot, and will use the value + defined in the rootfs skeleton + * password is empty (aka no password). + * home is / but will not belong to test + * shell is: /bin/sh + * test is not a member of any additional groups + * comment is: Test user + +Chapter 27. Migrating from older Buildroot versions + +Some versions have introduced backward incompatibilities. This +section explains those incompatibilities, and for each explains what +to do to complete the migration. + +27.1. Migrating to 2016.11 + +Before Buildroot 2016.11, it was possible to use only one +br2-external tree at once. With Buildroot 2016.11 came the +possibility to use more than one simultaneously (for details, see +Section 9.2, “Keeping customizations outside of Buildroot”). + +This however means that older br2-external trees are not usable +as-is. A minor change has to be made: adding a name to your +br2-external tree. + +This can be done very easily in just a few steps: + + * First, create a new file named external.desc, at the root of your + br2-external tree, with a single line defining the name of your + br2-external tree: + + $ echo 'name: NAME_OF_YOUR_TREE' >external.desc + + Note. Be careful when choosing a name: It has to be unique and be + made with only ASCII characters from the set [A-Za-z0-9_]. + + * Then, change every occurence of BR2_EXTERNAL in your br2-external + tree with the new variable: + + $ find . -type f | xargs sed -i 's/BR2_EXTERNAL/BR2_EXTERNAL_NAME_OF_YOUR_TREE_PATH/g' + +Now, your br2-external tree can be used with Buildroot 2016.11 +onward. + +Note: This change makes your br2-external tree incompatible with +Buildroot before 2016.11. + +27.2. Migrating to 2017.08 + +Before Buildroot 2017.08, host packages were installed in $(HOST_DIR) +/usr (with e.g. the autotools' --prefix=$(HOST_DIR)/usr). With +Buildroot 2017.08, they are now installed directly in $(HOST_DIR). + +Whenever a package installs an executable that is linked with a +library in $(HOST_DIR)/lib, it must have an RPATH pointing to that +directory. + +An RPATH pointing to $(HOST_DIR)/usr/lib is no longer accepted. + diff --git a/docs/manual/manual.txt b/docs/manual/manual.txt new file mode 100644 index 00000000..b5cc0448 --- /dev/null +++ b/docs/manual/manual.txt @@ -0,0 +1,75 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + += The Buildroot user manual +:toc: + +Buildroot {sys:echo $\{BR2_VERSION%%-git*\}} manual generated on {localdate} +{localtime} from git revision {sys:git rev-parse --short HEAD} + +The Buildroot manual is written by the Buildroot developers. +It is licensed under the GNU General Public License, version 2. Refer to the +http://git.buildroot.org/buildroot/tree/COPYING?id={sys:git rev-parse HEAD}[COPYING] +file in the Buildroot sources for the full text of this license. + +Copyright (C) 2004-2020 The Buildroot developers + +image::logo.png[] + += Getting started + +include::introduction.txt[] + +include::prerequisite.txt[] + +include::getting.txt[] + +include::quickstart.txt[] + +include::resources.txt[] + += User guide + +include::configure.txt[] + +include::configure-other-components.txt[] + +include::common-usage.txt[] + +include::customize.txt[] + +include::selinux-support.txt[] + +include::faq-troubleshooting.txt[] + +include::known-issues.txt[] + +include::legal-notice.txt[] + +include::beyond-buildroot.txt[] + += Developer guide + +include::how-buildroot-works.txt[] + +include::writing-rules.txt[] + +include::adding-board-support.txt[] + +include::adding-packages.txt[] + +include::patch-policy.txt[] + +include::download-infra.txt[] + +include::debugging-buildroot.txt[] + +include::contribute.txt[] + +include::developers.txt[] + +include::release-engineering.txt[] + += Appendix + +include::appendix.txt[] diff --git a/docs/manual/migrating.txt b/docs/manual/migrating.txt new file mode 100644 index 00000000..92e487c7 --- /dev/null +++ b/docs/manual/migrating.txt @@ -0,0 +1,58 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[migrating-from-ol-versions]] +== Migrating from older Buildroot versions + +Some versions have introduced backward incompatibilities. This section +explains those incompatibilities, and for each explains what to do to +complete the migration. + +[[br2-external-converting]] +=== Migrating to 2016.11 + +Before Buildroot 2016.11, it was possible to use only one br2-external +tree at once. With Buildroot 2016.11 came the possibility to use more +than one simultaneously (for details, see xref:outside-br-custom[]). + +This however means that older br2-external trees are not usable as-is. +A minor change has to be made: adding a name to your br2-external tree. + +This can be done very easily in just a few steps: + + * First, create a new file named +external.desc+, at the root of your + br2-external tree, with a single line defining the name of your + br2-external tree: ++ +---- +$ echo 'name: NAME_OF_YOUR_TREE' >external.desc +---- ++ +.Note +Be careful when choosing a name: It has to be unique and be made +with only ASCII characters from the set +[A-Za-z0-9_]+. + + * Then, change every occurence of +BR2_EXTERNAL+ in your br2-external + tree with the new variable: ++ +---- +$ find . -type f | xargs sed -i 's/BR2_EXTERNAL/BR2_EXTERNAL_NAME_OF_YOUR_TREE_PATH/g' +---- + +Now, your br2-external tree can be used with Buildroot 2016.11 onward. + +.Note: +This change makes your br2-external tree incompatible with Buildroot +before 2016.11. + +[[migrating-host-usr]] +=== Migrating to 2017.08 + +Before Buildroot 2017.08, host packages were installed in +$(HOST_DIR)/usr+ +(with e.g. the autotools' +--prefix=$(HOST_DIR)/usr+). With Buildroot +2017.08, they are now installed directly in +$(HOST_DIR)+. + +Whenever a package installs an executable that is linked with a library +in +$(HOST_DIR)/lib+, it must have an RPATH pointing to that directory. + +An RPATH pointing to +$(HOST_DIR)/usr/lib+ is no longer accepted. diff --git a/docs/manual/package-make-target.txt b/docs/manual/package-make-target.txt new file mode 100644 index 00000000..795c7d46 --- /dev/null +++ b/docs/manual/package-make-target.txt @@ -0,0 +1,96 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[pkg-build-steps]] + +==== Package-specific _make_ targets + +Running +make + builds and installs that particular package +and its dependencies. + +For packages relying on the Buildroot infrastructure, there are +numerous special make targets that can be called independently like +this: + +------------ +make - +------------ + +The package build targets are (in the order they are executed): + +[width="90%",cols="^1,4",options="header"] +|=================================================== +| command/target | Description + +| +source+ | Fetch the source (download the tarball, clone +the source repository, etc) + +| +depends+ | Build and install all dependencies required to +build the package + +| +extract+ | Put the source in the package build directory +(extract the tarball, copy the source, etc) + +| +patch+ | Apply the patches, if any + +| +configure+ | Run the configure commands, if any + +| +build+ | Run the compilation commands + +| +install-staging+ | +*target package:* Run the installation of the package in the +staging directory, if necessary + +| +install-target+ | +*target package:* Run the installation of the package in the +target directory, if necessary + +| +install+ | +*target package:* Run the 2 previous installation commands + +*host package:* Run the installation of the package in the host +directory + +|=================================================== + +Additionally, there are some other useful make targets: + +[width="90%",cols="^1,4",options="header"] +|=================================================== +| command/target | Description + +| +show-depends+ | Displays the first-order dependencies required to build the +package + +| +show-recursive-depends+ | Recursively displays the dependencies + required to build the package + +| +show-rdepends+ | Displays the first-order reverse dependencies of + the package (i.e packages that directly depend on it) + +| +show-recursive-rdepends+ | Recursively displays the reverse + dependencies of the package (i.e the packages that depend on it, + directly or indirectly) + +| +graph-depends+ | Generate a dependency graph of the package, in the +context of the current Buildroot configuration. See +xref:graph-depends[this section] for more details about dependency +graphs. + +| +graph-rdepends+ | Generate a graph of this package reverse + dependencies (i.e the packages that depend on it, directly or + indirectly) + +| +dirclean+ | Remove the whole package build directory + +| +reinstall+ | Re-run the install commands + +| +rebuild+ | Re-run the compilation commands - this only makes +sense when using the +OVERRIDE_SRCDIR+ feature or when you modified a file +directly in the build directory + +| +reconfigure+ | Re-run the configure commands, then rebuild - this only +makes sense when using the +OVERRIDE_SRCDIR+ feature or when you modified a +file directly in the build directory + +|=================================================== diff --git a/docs/manual/patch-policy.txt b/docs/manual/patch-policy.txt new file mode 100644 index 00000000..e704a0d3 --- /dev/null +++ b/docs/manual/patch-policy.txt @@ -0,0 +1,162 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[patch-policy]] + +== Patching a package + +While integrating a new package or updating an existing one, it may be +necessary to patch the source of the software to get it cross-built within +Buildroot. + +Buildroot offers an infrastructure to automatically handle this during +the builds. It supports three ways of applying patch sets: downloaded patches, +patches supplied within buildroot and patches located in a user-defined +global patch directory. + +=== Providing patches + +==== Downloaded + +If it is necessary to apply a patch that is available for download, then add it +to the +_PATCH+ variable. If an entry contains +://+, +then Buildroot will assume it is a full URL and download the patch +from this location. Otherwise, Buildroot will assume that the patch should be +downloaded from +_SITE+. It can be a single patch, +or a tarball containing a patch series. + +Like for all downloads, a hash should be added to the +.hash+ +file. + +This method is typically used for packages from Debian. + +==== Within Buildroot + +Most patches are provided within Buildroot, in the package +directory; these typically aim to fix cross-compilation, libc support, +or other such issues. + +These patch files should be named +-.patch+. + +.Notes +- The patch files coming with Buildroot should not contain any package version + reference in their filename. +- The field ++ in the patch file name refers to the 'apply order', + and shall start at 1; It is preferred to pad the number with zeros up to 4 + digits, like 'git-format-patch' does. E.g.: +0001-foobar-the-buz.patch+ +- Previously, it was mandatory for patches to be prefixed with the name of + the package, like +--.patch+, but that is + no longer the case. Existing packages will be fixed as time passes. 'Do + not prefix patches with the package name.' +- Previously, a +series+ file, as used by +quilt+, could also be added in + the package directory. In that case, the +series+ file defines the patch + application order. This is deprecated, and will be removed in the future. + 'Do not use a series file.' + + +==== Global patch directory + +The +BR2_GLOBAL_PATCH_DIR+ configuration file option can be +used to specify a space separated list of one or more directories +containing global package patches. See xref:customize-patches[] for +details. + +[[patch-apply-order]] +=== How patches are applied + +. Run the +_PRE_PATCH_HOOKS+ commands if defined; + +. Cleanup the build directory, removing any existing +*.rej+ files; + +. If +_PATCH+ is defined, then patches from these + tarballs are applied; + +. If there are some +*.patch+ files in the package's Buildroot + directory or in a package subdirectory named ++, + then: ++ +* If a +series+ file exists in the package directory, then patches are + applied according to the +series+ file; ++ +* Otherwise, patch files matching +*.patch+ are applied in alphabetical + order. + So, to ensure they are applied in the right order, it is highly + recommended to name the patch files like this: + +-.patch+, where ++ refers to the + 'apply order'. + +. If +BR2_GLOBAL_PATCH_DIR+ is defined, the directories will be + enumerated in the order they are specified. The patches are applied + as described in the previous step. + +. Run the +_POST_PATCH_HOOKS+ commands if defined. + +If something goes wrong in the steps _3_ or _4_, then the build fails. + +=== Format and licensing of the package patches + +Patches are released under the same license as the software they apply +to (see xref:legal-info-buildroot[]). + +A message explaining what the patch does, and why it is needed, should +be added in the header commentary of the patch. + +You should add a +Signed-off-by+ statement in the header of the each +patch to help with keeping track of the changes and to certify that the +patch is released under the same license as the software that is modified. + +If the software is under version control, it is recommended to use the +upstream SCM software to generate the patch set. + +Otherwise, concatenate the header with the output of the ++diff -purN package-version.orig/ package-version/+ command. + +If you update an existing patch (e.g. when bumping the package version), +make sure the existing From header and Signed-off-by tags are not +removed, but do update the rest of the patch comment when appropriate. + +At the end, the patch should look like: + +--------------- +configure.ac: add C++ support test + +Signed-off-by: John Doe + +--- configure.ac.orig ++++ configure.ac +@@ -40,2 +40,12 @@ + +AC_PROG_MAKE_SET ++ ++AC_CACHE_CHECK([whether the C++ compiler works], ++ [rw_cv_prog_cxx_works], ++ [AC_LANG_PUSH([C++]) ++ AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], ++ [rw_cv_prog_cxx_works=yes], ++ [rw_cv_prog_cxx_works=no]) ++ AC_LANG_POP([C++])]) ++ ++AM_CONDITIONAL([CXX_WORKS], [test "x$rw_cv_prog_cxx_works" = "xyes"]) +--------------- + +=== Integrating patches found on the Web + +When integrating a patch of which you are not the author, you have to +add a few things in the header of the patch itself. + +Depending on whether the patch has been obtained from the project +repository itself, or from somewhere on the web, add one of the +following tags: + +--------------- +Backported from: +--------------- + +or + +--------------- +Fetch from: +--------------- + +It is also sensible to add a few words about any changes to the patch +that may have been necessary. diff --git a/docs/manual/prerequisite.txt b/docs/manual/prerequisite.txt new file mode 100644 index 00000000..4e614cfa --- /dev/null +++ b/docs/manual/prerequisite.txt @@ -0,0 +1,96 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[requirement]] +== System requirements + +Buildroot is designed to run on Linux systems. + +While Buildroot itself will build most host packages it needs for the +compilation, certain standard Linux utilities are expected to be +already installed on the host system. Below you will find an overview of +the mandatory and optional packages (note that package names may vary +between distributions). + +[[requirement-mandatory]] + +=== Mandatory packages + +* Build tools: + +** +which+ +** +sed+ +** +make+ (version 3.81 or any later) +** +binutils+ +** +build-essential+ (only for Debian based systems) +** +gcc+ (version 4.8 or any later) +** `g++` (version 4.8 or any later) +** +bash+ +** +patch+ +** +gzip+ +** +bzip2+ +** +perl+ (version 5.8.7 or any later) +** +tar+ +** +cpio+ +** +unzip+ +** +rsync+ +** +file+ (must be in +/usr/bin/file+) +** +bc+ + +* Source fetching tools: +** +wget+ + +[[requirement-optional]] + +=== Optional packages + +* Recommended dependencies: ++ +Some features or utilities in Buildroot, like the legal-info, or the +graph generation tools, have additional dependencies. Although they +are not mandatory for a simple build, they are still highly recommended: ++ +** +python+ (version 2.7 or any later) + +* Configuration interface dependencies: ++ +For these libraries, you need to install both runtime and development +data, which in many distributions are packaged separately. The +development packages typically have a _-dev_ or _-devel_ suffix. ++ +** +ncurses5+ to use the 'menuconfig' interface +** +qt5+ to use the 'xconfig' interface +** +glib2+, +gtk2+ and +glade2+ to use the 'gconfig' interface + +* Source fetching tools: ++ +In the official tree, most of the package sources are retrieved using ++wget+ from _ftp_, _http_ or _https_ locations. A few packages are only +available through a version control system. Moreover, Buildroot is +capable of downloading sources via other tools, like +rsync+ or +scp+ +(refer to xref:download-infra[] for more details). If you enable +packages using any of these methods, you will need to install the +corresponding tool on the host system: ++ +** +bazaar+ +** +cvs+ +** +git+ +** +mercurial+ +** +rsync+ +** +scp+ +** +subversion+ + +* Java-related packages, if the Java Classpath needs to be built for + the target system: +** The +javac+ compiler +** The +jar+ tool + +* Documentation generation tools: +** +asciidoc+, version 8.6.3 or higher +** +w3m+ +** +python+ with the +argparse+ module (automatically present in 2.7+ and 3.2+) +** +dblatex+ (required for the pdf manual only) + +* Graph generation tools: +** +graphviz+ to use 'graph-depends' and '-graph-depends' +** +python-matplotlib+ to use 'graph-build' diff --git a/docs/manual/quickstart.txt b/docs/manual/quickstart.txt new file mode 100644 index 00000000..80569e85 --- /dev/null +++ b/docs/manual/quickstart.txt @@ -0,0 +1,125 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +== Buildroot quick start + +*Important*: you can and should *build everything as a normal user*. There +is no need to be root to configure and use Buildroot. By running all +commands as a regular user, you protect your system against packages +behaving badly during compilation and installation. + +The first step when using Buildroot is to create a configuration. +Buildroot has a nice configuration tool similar to the one you can +find in the http://www.kernel.org/[Linux kernel] or in +http://www.busybox.net/[BusyBox]. + +From the buildroot directory, run + +-------------------- + $ make menuconfig +-------------------- + +for the original curses-based configurator, or + +-------------------- + $ make nconfig +-------------------- + +for the new curses-based configurator, or + +-------------------- + $ make xconfig +-------------------- + +for the Qt-based configurator, or + +-------------------- + $ make gconfig +-------------------- + +for the GTK-based configurator. + +All of these "make" commands will need to build a configuration +utility (including the interface), so you may need to install +"development" packages for relevant libraries used by the +configuration utilities. Refer to xref:requirement[] for more details, +specifically the xref:requirement-optional[optional requirements] +to get the dependencies of your favorite interface. + +For each menu entry in the configuration tool, you can find associated +help that describes the purpose of the entry. Refer to xref:configure[] +for details on some specific configuration aspects. + +Once everything is configured, the configuration tool generates a ++.config+ file that contains the entire configuration. This file will be +read by the top-level Makefile. + +To start the build process, simply run: + +-------------------- + $ make +-------------------- + +By default, Buildroot does not support top-level parallel build, so +running +make -jN+ is not necessary. There is however experimental +support for top-level parallel build, see +xref:top-level-parallel-build[]. + +The `make` command will generally perform the following steps: + +* download source files (as required); +* configure, build and install the cross-compilation toolchain, or + simply import an external toolchain; +* configure, build and install selected target packages; +* build a kernel image, if selected; +* build a bootloader image, if selected; +* create a root filesystem in selected formats. + +Buildroot output is stored in a single directory, +output/+. +This directory contains several subdirectories: + +* +images/+ where all the images (kernel image, bootloader and root + filesystem images) are stored. These are the files you need to put + on your target system. + +* +build/+ where all the components are built (this includes tools + needed by Buildroot on the host and packages compiled for the + target). This directory contains one subdirectory for each of these + components. + +* +host/+ contains both the tools built for the host, and the sysroot + of the target toolchain. The former is an installation of tools + compiled for the host that are needed for the proper execution of + Buildroot, including the cross-compilation toolchain. The latter + is a hierarchy similar to a root filesystem hierarchy. It contains + the headers and libraries of all user-space packages that provide + and install libraries used by other packages. However, this + directory is 'not' intended to be the root filesystem for the target: + it contains a lot of development files, unstripped binaries and + libraries that make it far too big for an embedded system. These + development files are used to compile libraries and applications for + the target that depend on other libraries. + +* +staging/+ is a symlink to the target toolchain sysroot inside + +host/+, which exists for backwards compatibility. + +* +target/+ which contains 'almost' the complete root filesystem for + the target: everything needed is present except the device files in + +/dev/+ (Buildroot can't create them because Buildroot doesn't run + as root and doesn't want to run as root). Also, it doesn't have the correct + permissions (e.g. setuid for the busybox binary). Therefore, this directory + *should not be used on your target*. Instead, you should use one of + the images built in the +images/+ directory. If you need an + extracted image of the root filesystem for booting over NFS, then + use the tarball image generated in +images/+ and extract it as + root. Compared to +staging/+, +target/+ contains only the files and + libraries needed to run the selected target applications: the + development files (headers, etc.) are not present, the binaries are + stripped. + +These commands, +make menuconfig|nconfig|gconfig|xconfig+ and +make+, are the +basic ones that allow to easily and quickly generate images fitting +your needs, with all the features and applications you enabled. + +More details about the "make" command usage are given in +xref:make-tips[]. diff --git a/docs/manual/rebuilding-packages.txt b/docs/manual/rebuilding-packages.txt new file mode 100644 index 00000000..06d38551 --- /dev/null +++ b/docs/manual/rebuilding-packages.txt @@ -0,0 +1,136 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[full-rebuild]] +=== Understanding when a full rebuild is necessary + +Buildroot does not attempt to detect what parts of the system should +be rebuilt when the system configuration is changed through +make +menuconfig+, +make xconfig+ or one of the other configuration +tools. In some cases, Buildroot should rebuild the entire system, in +some cases, only a specific subset of packages. But detecting this in +a completely reliable manner is very difficult, and therefore the +Buildroot developers have decided to simply not attempt to do this. + +Instead, it is the responsibility of the user to know when a full +rebuild is necessary. As a hint, here are a few rules of thumb that +can help you understand how to work with Buildroot: + + * When the target architecture configuration is changed, a complete + rebuild is needed. Changing the architecture variant, the binary + format or the floating point strategy for example has an impact on + the entire system. + + * When the toolchain configuration is changed, a complete rebuild + generally is needed. Changing the toolchain configuration often + involves changing the compiler version, the type of C library or + its configuration, or some other fundamental configuration item, + and these changes have an impact on the entire system. + + * When an additional package is added to the configuration, a full + rebuild is not necessarily needed. Buildroot will detect that this + package has never been built, and will build it. However, if this + package is a library that can optionally be used by packages that + have already been built, Buildroot will not automatically rebuild + those. Either you know which packages should be rebuilt, and you + can rebuild them manually, or you should do a full rebuild. For + example, let's suppose you have built a system with the +ctorrent+ + package, but without +openssl+. Your system works, but you realize + you would like to have SSL support in +ctorrent+, so you enable the + +openssl+ package in Buildroot configuration and restart the + build. Buildroot will detect that +openssl+ should be built and + will be build it, but it will not detect that +ctorrent+ should be + rebuilt to benefit from +openssl+ to add OpenSSL support. You will + either have to do a full rebuild, or rebuild +ctorrent+ itself. + + * When a package is removed from the configuration, Buildroot does + not do anything special. It does not remove the files installed by + this package from the target root filesystem or from the toolchain + _sysroot_. A full rebuild is needed to get rid of this + package. However, generally you don't necessarily need this package + to be removed right now: you can wait for the next lunch break to + restart the build from scratch. + + * When the sub-options of a package are changed, the package is not + automatically rebuilt. After making such changes, rebuilding only + this package is often sufficient, unless enabling the package + sub-option adds some features to the package that are useful for + another package which has already been built. Again, Buildroot does + not track when a package should be rebuilt: once a package has been + built, it is never rebuilt unless explicitly told to do so. + + * When a change to the root filesystem skeleton is made, a full + rebuild is needed. However, when changes to the root filesystem + overlay, a post-build script or a post-image script are made, + there is no need for a full rebuild: a simple +make+ invocation + will take the changes into account. + + * When a package listed in +FOO_DEPENDENCIES+ is rebuilt or removed, + the package +foo+ is not automatically rebuilt. For example, if a + package +bar+ is listed in +FOO_DEPENDENCIES+ with +FOO_DEPENDENCIES + = bar+ and the configuration of the +bar+ package is changed, the + configuration change would not result in a rebuild of package +foo+ + automatically. In this scenario, you may need to either rebuild any + packages in your build which reference +bar+ in their +DEPENDENCIES+, + or perform a full rebuild to ensure any +bar+ dependent packages are + up to date. + +Generally speaking, when you're facing a build error and you're unsure +of the potential consequences of the configuration changes you've +made, do a full rebuild. If you get the same build error, then you are +sure that the error is not related to partial rebuilds of packages, +and if this error occurs with packages from the official Buildroot, do +not hesitate to report the problem! As your experience with Buildroot +progresses, you will progressively learn when a full rebuild is really +necessary, and you will save more and more time. + +For reference, a full rebuild is achieved by running: + +--------------- +$ make clean all +--------------- + +[[rebuild-pkg]] +=== Understanding how to rebuild packages + +One of the most common questions asked by Buildroot users is how to +rebuild a given package or how to remove a package without rebuilding +everything from scratch. + +Removing a package is unsupported by Buildroot without +rebuilding from scratch. This is because Buildroot doesn't keep track +of which package installs what files in the +output/staging+ and ++output/target+ directories, or which package would be compiled differently +depending on the availability of another package. + +The easiest way to rebuild a single package from scratch is to remove +its build directory in +output/build+. Buildroot will then re-extract, +re-configure, re-compile and re-install this package from scratch. You +can ask buildroot to do this with the +make -dirclean+ command. + +On the other hand, if you only want to restart the build process of a +package from its compilation step, you can run +make -rebuild+. It +will restart the compilation and installation of the package, but not from +scratch: it basically re-executes +make+ and +make install+ inside the package, +so it will only rebuild files that changed. + +If you want to restart the build process of a package from its configuration +step, you can run +make -reconfigure+. It will restart the +configuration, compilation and installation of the package. + +While +-rebuild+ implies +-reinstall+ and ++-reconfigure+ implies +-rebuild+, these targets as well +as ++ only act on the said package, and do not trigger re-creating +the root filesystem image. If re-creating the root filesystem in necessary, +one should in addition run +make+ or +make all+. + +Internally, Buildroot creates so-called _stamp files_ to keep track of +which build steps have been completed for each package. They are +stored in the package build directory, ++output/build/-/+ and are named ++.stamp_+. The commands detailed above simply manipulate +these stamp files to force Buildroot to restart a specific set of +steps of a package build process. + +Further details about package special make targets are explained in +xref:pkg-build-steps[]. diff --git a/docs/manual/release-engineering.txt b/docs/manual/release-engineering.txt new file mode 100644 index 00000000..0cf38183 --- /dev/null +++ b/docs/manual/release-engineering.txt @@ -0,0 +1,34 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[RELENG]] +== Release Engineering +=== Releases + +The Buildroot project makes quarterly releases with monthly bugfix +releases. The first release of each year is a long term support +release, LTS. + + - Quarterly releases: 2020.02, 2020.05, 2020.08, and 2020.11 + - Bugfix releases: 2020.02.1, 2020.02.2, ... + - LTS releases: 2020.02, 2021.02, ... + +Releases are supported until the first bugfix release of the next +release, e.g., 2020.05.x is EOL when 2020.08.1 is released. + +LTS releases are supported until the first bugfix release of the next +LTS, e.g., 2020.02.x is supported until 2021.02.1 is released. + +=== Development + +Each release cycle consist of two months of development on the +master+ +branch and one month stabilization before the release is made. During +this phase no new features are added to +master+, only bugfixes. + +The stabilization phase starts with tagging +-rc1+, and every week until +the release, another release candidate is tagged. + +To handle new features and version bumps during the stabilization phase, +a +next+ branch may be created for these features. Once the current +release has been made, the +next+ branch is merged into +master+ and +the development cycle for the next release continues there. diff --git a/docs/manual/resources.txt b/docs/manual/resources.txt new file mode 100644 index 00000000..e90a49b2 --- /dev/null +++ b/docs/manual/resources.txt @@ -0,0 +1,71 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[community-resources]] +== Community resources + +Like any open source project, Buildroot has different ways to share +information in its community and outside. + +Each of those ways may interest you if you are looking for some help, +want to understand Buildroot or contribute to the project. + +Mailing List:: ++ +Buildroot has a mailing list for discussion and development. It is the +main method of interaction for Buildroot users and developers. ++ +Only subscribers to the Buildroot mailing list are allowed to post to +this list. You can subscribe via the +http://lists.buildroot.org/mailman/listinfo/buildroot[mailing list info +page]. ++ +Mails that are sent to the mailing list are also available in the +mailing list archives, available through +http://lists.buildroot.org/pipermail/buildroot[Mailman] or at +https://lore.kernel.org/buildroot/[lore.kernel.org]. + +IRC:: ++ +The Buildroot IRC channel irc://irc.oftc.net/#buildroot[#buildroot] is +hosted on https://www.oftc.net/WebChat/[OFTC]. It is a useful place to +ask quick questions or discuss on certain topics. ++ +When asking for help on IRC, share relevant logs or pieces of code +using a code sharing website, such as https://paste.ack.tf/. ++ +Note that for certain questions, posting to the mailing list may be +better as it will reach more people, both developers and users. + +Bug tracker:: ++ +Bugs in Buildroot can be reported via the mailing list or alternatively +via the https://bugs.buildroot.org/buglist.cgi?product=buildroot[Buildroot +bugtracker]. Please refer to xref:reporting-bugs[] before creating a bug +report. + +Wiki:: ++ +http://elinux.org/Buildroot[The Buildroot wiki page] is hosted on +the http://elinux.org[eLinux] wiki. It contains some useful links, an +overview of past and upcoming events, and a TODO list. + +Patchwork:: ++ +Patchwork is a web-based patch tracking system designed to facilitate +the contribution and management of contributions to an open-source +project. Patches that have been sent to a mailing list are \'caught' by +the system, and appear on a web page. Any comments posted that +reference the patch are appended to the patch page too. For more +information on Patchwork see +http://jk.ozlabs.org/projects/patchwork/[]. ++ +Buildroot's Patchwork website is mainly for use by Buildroot's +maintainer to ensure patches aren't missed. It is also used by Buildroot +patch reviewers (see also xref:apply-patches-patchwork[]). +However, since the website exposes patches and their corresponding +review comments in a clean and concise web interface, it can be useful +for all Buildroot developers. ++ +The Buildroot patch management interface is available at +http://patchwork.buildroot.org[]. diff --git a/docs/manual/selinux-support.txt b/docs/manual/selinux-support.txt new file mode 100644 index 00000000..21137ae6 --- /dev/null +++ b/docs/manual/selinux-support.txt @@ -0,0 +1,74 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +[[selinux]] +== Using SELinux in Buildroot + +https://selinuxproject.org[SELinux] is a Linux kernel security module +enforcing access control policies. In addition to the traditional file +permissions and access control lists, +SELinux+ allows to write rules +for users or processes to access specific functions of resources +(files, sockets...). + +_SELinux_ has three modes of operation: + +* _Disabled_: the policy is not applied +* _Permissive_: the policy is applied, and non-authorized actions are + simply logged. This mode is often used for troubleshooting SELinux + issues. +* _Enforcing_: the policy is applied, and non-authorized actions are + denied + +In Buildroot the mode of operation is controlled by the ++BR2_PACKAGE_REFPOLICY_POLICY_STATE_*+ configuration options. The +Linux kernel also has various configuration options that affect how ++SELinux+ is enabled (see +security/selinux/Kconfig+ in the Linux +kernel sources). + +By default in Buildroot the +SELinux+ policy is provided by the +upstream https://github.com/SELinuxProject/refpolicy[refpolicy] +project, enabled with +BR2_PACKAGE_REFPOLICY+. + +[[enabling-selinux]] +=== Enabling SELinux support + +To have proper support for +SELinux+ in a Buildroot generated system, +the following configuration options must be enabled: + +* +BR2_PACKAGE_LIBSELINUX+ +* +BR2_PACKAGE_REFPOLICY+ + +In addition, your filesystem image format must support extended +attributes. + +[[selinux-policy-tweaking]] +=== SELinux policy tweaking + +The +SELinux refpolicy+ contains modules that can be enabled or +disabled when being built. Each module provide a number of +SELinux+ +rules. In Buildroot the non-base modules are disabled by default and +several ways to enable such modules are provided: + +- Packages can enable a list of +SELinux+ modules within the +refpolicy+ using + the +_SELINUX_MODULES+ variable. +- Packages can provide additional +SELinux+ modules by putting them (.fc, .if + and .te files) in +package//selinux/+. +- Extra +SELinux+ modules can be added in directories pointed by the + +BR2_REFPOLICY_EXTRA_MODULES_DIRS+ configuration option. +- Additional modules in the +refpolicy+ can be enabled if listed in the + +BR2_REFPOLICY_EXTRA_MODULES_DEPENDENCIES+ configuration option. + +Buildroot also allows to completely override the +refpolicy+. This +allows to provide a full custom policy designed specifically for a +given system. When going this way, all of the above mechanisms are +disabled: no extra +SElinux+ module is added to the policy, and all +the available modules within the custom policy are enabled and built +into the final binary policy. The custom policy must be a fork of the +official https://github.com/SELinuxProject/refpolicy[refpolicy]. + +In order to fully override the +refpolicy+ the following configuration +variables have to be set: + +- +BR2_PACKAGE_REFPOLICY_CUSTOM_GIT+ +- +BR2_PACKAGE_REFPOLICY_CUSTOM_REPO_URL+ +- +BR2_PACKAGE_REFPOLICY_CUSTOM_REPO_VERSION+ diff --git a/docs/manual/using-buildroot-debugger.txt b/docs/manual/using-buildroot-debugger.txt new file mode 100644 index 00000000..d5293beb --- /dev/null +++ b/docs/manual/using-buildroot-debugger.txt @@ -0,0 +1,53 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +==== Using +gdb+ in Buildroot + +Buildroot allows to do cross-debugging, where the debugger runs on the +build machine and communicates with +gdbserver+ on the target to +control the execution of the program. + +To achieve this: + +* If you are using an _internal toolchain_ (built by Buildroot), you + must enable +BR2_PACKAGE_HOST_GDB+, +BR2_PACKAGE_GDB+ and + +BR2_PACKAGE_GDB_SERVER+. This ensures that both the cross gdb and + gdbserver get built, and that gdbserver gets installed to your target. + +* If you are using an _external toolchain_, you should enable + +BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY+, which will copy the + gdbserver included with the external toolchain to the target. If your + external toolchain does not have a cross gdb or gdbserver, it is also + possible to let Buildroot build them, by enabling the same options as + for the _internal toolchain backend_. + +Now, to start debugging a program called +foo+, you should run on the +target: + +---------------------------- +gdbserver :2345 foo +---------------------------- + +This will cause +gdbserver+ to listen on TCP port 2345 for a connection +from the cross gdb. + +Then, on the host, you should start the cross gdb using the following +command line: + +---------------------------- +/output/host/bin/-gdb -x /output/staging/usr/share/buildroot/gdbinit foo +---------------------------- + +Of course, +foo+ must be available in the current directory, built +with debugging symbols. Typically you start this command from the +directory where +foo+ is built (and not from +output/target/+ as the +binaries in that directory are stripped). + +The +/output/staging/usr/share/buildroot/gdbinit+ file will tell the +cross gdb where to find the libraries of the target. + +Finally, to connect to the target from the cross gdb: + +---------------------------- +(gdb) target remote :2345 +---------------------------- diff --git a/docs/manual/using-buildroot-development.txt b/docs/manual/using-buildroot-development.txt new file mode 100644 index 00000000..da6dd822 --- /dev/null +++ b/docs/manual/using-buildroot-development.txt @@ -0,0 +1,121 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +==== Using Buildroot during development + +The normal operation of Buildroot is to download a tarball, extract +it, configure, compile and install the software component found inside +this tarball. The source code is extracted in ++output/build/-+, which is a temporary directory: +whenever +make clean+ is used, this directory is entirely removed, and +re-created at the next +make+ invocation. Even when a Git or +Subversion repository is used as the input for the package source +code, Buildroot creates a tarball out of it, and then behaves as it +normally does with tarballs. + +This behavior is well-suited when Buildroot is used mainly as an +integration tool, to build and integrate all the components of an +embedded Linux system. However, if one uses Buildroot during the +development of certain components of the system, this behavior is not +very convenient: one would instead like to make a small change to the +source code of one package, and be able to quickly rebuild the system +with Buildroot. + +Making changes directly in +output/build/-+ is not +an appropriate solution, because this directory is removed on +make +clean+. + +Therefore, Buildroot provides a specific mechanism for this use case: +the +_OVERRIDE_SRCDIR+ mechanism. Buildroot reads an _override_ +file, which allows the user to tell Buildroot the location of the +source for certain packages. + +The default location of the override file is +$(CONFIG_DIR)/local.mk+, +as defined by the +BR2_PACKAGE_OVERRIDE_FILE+ configuration option. ++$(CONFIG_DIR)+ is the location of the Buildroot +.config+ file, so ++local.mk+ by default lives side-by-side with the +.config+ file, +which means: + +* In the top-level Buildroot source directory for in-tree builds + (i.e., when +O=+ is not used) +* In the out-of-tree directory for out-of-tree builds (i.e., when + +O=+ is used) + +If a different location than these defaults is required, it can be +specified through the +BR2_PACKAGE_OVERRIDE_FILE+ configuration +option. + +In this _override_ file, Buildroot expects to find lines of the form: + +------------------ +_OVERRIDE_SRCDIR = /path/to/pkg1/sources +_OVERRIDE_SRCDIR = /path/to/pkg2/sources +------------------ + +For example: + +------------------ +LINUX_OVERRIDE_SRCDIR = /home/bob/linux/ +BUSYBOX_OVERRIDE_SRCDIR = /home/bob/busybox/ +------------------ + +When Buildroot finds that for a given package, an ++_OVERRIDE_SRCDIR+ has been defined, it will no longer attempt to +download, extract and patch the package. Instead, it will directly use +the source code available in the specified directory and +make clean+ +will not touch this directory. This allows to point Buildroot to your +own directories, that can be managed by Git, Subversion, or any other +version control system. To achieve this, Buildroot will use _rsync_ to +copy the source code of the component from the specified ++_OVERRIDE_SRCDIR+ to +output/build/-custom/+. + +This mechanism is best used in conjunction with the +make +-rebuild+ and +make -reconfigure+ targets. A +make +-rebuild all+ sequence will _rsync_ the source code from ++_OVERRIDE_SRCDIR+ to +output/build/-custom+ (thanks to +_rsync_, only the modified files are copied), and restart the build +process of just this package. + +In the example of the +linux+ package above, the developer can then +make a source code change in +/home/bob/linux+ and then run: + +----------------------- +make linux-rebuild all +----------------------- + +and in a matter of seconds gets the updated Linux kernel image in ++output/images+. Similarly, a change can be made to the BusyBox source +code in +/home/bob/busybox+, and after: + +----------------------- +make busybox-rebuild all +----------------------- + +the root filesystem image in +output/images+ contains the updated +BusyBox. + +Source trees for big projects often contain hundreds or thousands of +files which are not needed for building, but will slow down the process +of copying the sources with _rsync_. Optionally, it is possible define ++_OVERRIDE_SRCDIR_RSYNC_EXCLUSIONS+ to skip syncing certain files +from the source tree. For example, when working on the +webkitgtk+ +package, the following will exclude the tests and in-tree builds from +a local WebKit source tree: + +------------------ +WEBKITGTK_OVERRIDE_SRCDIR = /home/bob/WebKit +WEBKITGTK_OVERRIDE_SRCDIR_RSYNC_EXCLUSIONS = \ + --exclude JSTests --exclude ManualTests --exclude PerformanceTests \ + --exclude WebDriverTests --exclude WebKitBuild --exclude WebKitLibraries \ + --exclude WebKit.xcworkspace --exclude Websites --exclude Examples +------------------ + +By default, Buildroot skips syncing of VCS artifacts (e.g., the *.git* and +*.svn* directories). Some packages prefer to have these VCS directories +available during build, for example for automatically determining a precise +commit reference for version information. To undo this built-in filtering at a +cost of a slower speed, add these directories back: + +------------------ +LINUX_OVERRIDE_SRCDIR_RSYNC_EXCLUSIONS = --include .git +------------------ diff --git a/docs/manual/using-buildroot-toolchain.txt b/docs/manual/using-buildroot-toolchain.txt new file mode 100644 index 00000000..09408ef0 --- /dev/null +++ b/docs/manual/using-buildroot-toolchain.txt @@ -0,0 +1,48 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +==== Using the generated toolchain outside Buildroot + +You may want to compile, for your target, your own programs or other +software that are not packaged in Buildroot. In order to do this you +can use the toolchain that was generated by Buildroot. + +The toolchain generated by Buildroot is located by default in ++output/host/+. The simplest way to use it is to add ++output/host/bin/+ to your PATH environment variable and then to +use +ARCH-linux-gcc+, +ARCH-linux-objdump+, +ARCH-linux-ld+, etc. + +Alternatively, Buildroot can also export the toolchain and the development +files of all selected packages, as an SDK, by running the command ++make sdk+. This generates a tarball of the content of the host directory ++output/host/+, named +_sdk-buildroot.tar.gz+ (which can be +overriden by setting the environment variable +BR2_SDK_PREFIX+) and +located in the output directory +output/images/+. + +This tarball can then be distributed to application developers, when +they want to develop their applications that are not (yet) packaged as +a Buildroot package. + +Upon extracting the SDK tarball, the user must run the script ++relocate-sdk.sh+ (located at the top directory of the SDK), to make +sure all paths are updated with the new location. + +Alternatively, if you just want to prepare the SDK without generating +the tarball (e.g. because you will just be moving the +host+ directory, +or will be generating the tarball on your own), Buildroot also allows +you to just prepare the SDK with +make prepare-sdk+ without actually +generating a tarball. + +For your convenience, by selecting the option ++BR2_PACKAGE_HOST_ENVIRONMENT_SETUP+, you can get a ++environment-setup+ script installed in +output/host/+ and therefore +in your SDK. This script can be sourced with ++. your/sdk/path/environment-setup+ to export a number of environment +variables that will help cross-compile your projects using the +Buildroot SDK: the +PATH+ will contain the SDK binaries, standard +_autotools_ variables will be defined with the appropriate values, and ++CONFIGURE_FLAGS+ will contain basic +./configure+ options to +cross-compile _autotools_ projects. It also provides some useful +commands. Note however that once this script is sourced, the +environment is setup only for cross-compilation, and no longer for +native compilation. diff --git a/docs/manual/writing-rules.txt b/docs/manual/writing-rules.txt new file mode 100644 index 00000000..3b809d5c --- /dev/null +++ b/docs/manual/writing-rules.txt @@ -0,0 +1,151 @@ +// -*- mode:doc; -*- +// vim: set syntax=asciidoc: + +== Coding style + +Overall, these coding style rules are here to help you to add new files in +Buildroot or refactor existing ones. + +If you slightly modify some existing file, the important thing is +to keep the consistency of the whole file, so you can: + +* either follow the potentially deprecated coding style used in this +file, + +* or entirely rework it in order to make it comply with these rules. + +[[writing-rules-config-in]] + +=== +Config.in+ file + ++Config.in+ files contain entries for almost anything configurable in +Buildroot. + +An entry has the following pattern: + +--------------------- +config BR2_PACKAGE_LIBFOO + bool "libfoo" + depends on BR2_PACKAGE_LIBBAZ + select BR2_PACKAGE_LIBBAR + help + This is a comment that explains what libfoo is. The help text + should be wrapped. + + http://foosoftware.org/libfoo/ +--------------------- + +* The +bool+, +depends on+, +select+ and +help+ lines are indented + with one tab. + +* The help text itself should be indented with one tab and two + spaces. + +* The help text should be wrapped to fit 72 columns, where tab counts + for 8, so 62 characters in the text itself. + +The +Config.in+ files are the input for the configuration tool +used in Buildroot, which is the regular _Kconfig_. For further +details about the _Kconfig_ language, refer to +http://kernel.org/doc/Documentation/kbuild/kconfig-language.txt[]. + +[[writing-rules-mk]] + +=== The +.mk+ file + +* Header: The file starts with a header. It contains the module name, +preferably in lowercase, enclosed between separators made of 80 hashes. A +blank line is mandatory after the header: ++ +--------------------- +################################################################################ +# +# libfoo +# +################################################################################ +--------------------- ++ +* Assignment: use +=+ preceded and followed by one space: ++ +--------------------- +LIBFOO_VERSION = 1.0 +LIBFOO_CONF_OPTS += --without-python-support +--------------------- ++ +Do not align the +=+ signs. + +* Indentation: use tab only: ++ +--------------------- +define LIBFOO_REMOVE_DOC + $(RM) -fr $(TARGET_DIR)/usr/share/libfoo/doc \ + $(TARGET_DIR)/usr/share/man/man3/libfoo* +endef +--------------------- ++ +Note that commands inside a +define+ block should always start with a tab, +so _make_ recognizes them as commands. + +* Optional dependency: + +** Prefer multi-line syntax. ++ +YES: ++ +--------------------- +ifeq ($(BR2_PACKAGE_PYTHON),y) +LIBFOO_CONF_OPTS += --with-python-support +LIBFOO_DEPENDENCIES += python +else +LIBFOO_CONF_OPTS += --without-python-support +endif +--------------------- ++ +NO: ++ +--------------------- +LIBFOO_CONF_OPTS += --with$(if $(BR2_PACKAGE_PYTHON),,out)-python-support +LIBFOO_DEPENDENCIES += $(if $(BR2_PACKAGE_PYTHON),python,) +--------------------- + +** Keep configure options and dependencies close together. + +* Optional hooks: keep hook definition and assignment together in one + if block. ++ +YES: ++ +--------------------- +ifneq ($(BR2_LIBFOO_INSTALL_DATA),y) +define LIBFOO_REMOVE_DATA + $(RM) -fr $(TARGET_DIR)/usr/share/libfoo/data +endef +LIBFOO_POST_INSTALL_TARGET_HOOKS += LIBFOO_REMOVE_DATA +endif +--------------------- ++ +NO: ++ +--------------------- +define LIBFOO_REMOVE_DATA + $(RM) -fr $(TARGET_DIR)/usr/share/libfoo/data +endef + +ifneq ($(BR2_LIBFOO_INSTALL_DATA),y) +LIBFOO_POST_INSTALL_TARGET_HOOKS += LIBFOO_REMOVE_DATA +endif +--------------------- + +=== The documentation + +The documentation uses the +http://www.methods.co.nz/asciidoc/[asciidoc] format. + +For further details about the asciidoc syntax, refer to +http://www.methods.co.nz/asciidoc/userguide.html[]. + +=== Support scripts + +Some scripts in the +support/+ and +utils/+ directories are written in +Python and should follow the +https://www.python.org/dev/peps/pep-0008/[PEP8 Style Guide for Python Code]. diff --git a/docs/website/.htaccess b/docs/website/.htaccess new file mode 100644 index 00000000..b02beb88 --- /dev/null +++ b/docs/website/.htaccess @@ -0,0 +1,62 @@ +# BEGIN Compress text files + + + SetOutputFilter DEFLATE + + +# END Compress text files + +# BEGIN Expire headers + + ExpiresActive On + ExpiresDefault "access plus 1 seconds" + ExpiresByType image/x-icon "access plus 2592000 seconds" + ExpiresByType image/jpeg "access plus 2592000 seconds" + ExpiresByType image/png "access plus 2592000 seconds" + ExpiresByType image/gif "access plus 2592000 seconds" + ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds" + ExpiresByType text/css "access plus 604800 seconds" + ExpiresByType text/javascript "access plus 216000 seconds" + ExpiresByType application/javascript "access plus 216000 seconds" + ExpiresByType application/x-javascript "access plus 216000 seconds" + ExpiresByType text/html "access plus 600 seconds" + ExpiresByType application/xhtml+xml "access plus 600 seconds" + +# END Expire headers + +# BEGIN Cache-Control Headers + + + Header set Cache-Control "max-age=2592000, public" + + + Header set Cache-Control "max-age=604800, public" + + + Header set Cache-Control "max-age=216000, private" + + + Header set Cache-Control "max-age=600, private, must-revalidate" + + +# END Cache-Control Headers + +# BEGIN Turn ETags Off + + Header unset ETag + +FileETag None +# END Turn ETags Off + +# BEGIN gzip + +mod_gzip_on Yes +mod_gzip_dechunk Yes +mod_gzip_item_include file .(html?|txt|css|js)$ +mod_gzip_item_include handler ^cgi-script$ +mod_gzip_item_include mime ^text/.* +mod_gzip_item_include mime ^application/x-javascript.* +mod_gzip_item_exclude mime ^image/.* +mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.* + +# END gzip diff --git a/docs/website/association.html b/docs/website/association.html new file mode 100644 index 00000000..0215f858 --- /dev/null +++ b/docs/website/association.html @@ -0,0 +1,122 @@ + + +
+
+
+
+
Association
+
+ +

The Buildroot open-source project is supported by a + non-profit organization called the Buildroot + Association. The goal of this non-profit + organization is to engage actions to promote, help + develop and democratise the Buildroot project.

+ +

This non-profit organization is registered as a legal + entity in France, more precisely as an association loi + 1901.

+ +

This organization can receive funding from members, + donors and sponsors. This funding is then used to pay for:

+ +
    +
  • the meeting rooms used during the Buildroot + Developers Meeting twice per year;
  • +
  • travel expenses for contributors + willing to attend the Buildroot Developers + Meeting, and not covered by their employer to do + so;
  • +
  • renting servers and services used to host the + Buildroot infrastructure.
  • +
+ +

The bylaws of the association are available + in French + (official) and + in English + (unofficial translation). The association was declared on + March 14, 2016 to the Préfecture de Haute-Garonne + (France) and is registered under the n°W313024278. See this + official receipt + from the French authorities.

+ +

Our accounting is fully public, including the bank + account summaries, + see accounting. Numerous + other administrative documents related to the association + are available on + its Github + repository

+
+
+ +
+
Becoming a member
+
+ +

To become a member, an individual or a company simply has + to pay its yearly membership. For an individual, the minimum + membership fee per year is 10 EUR. For a company, the + minimum membership fee per year is 150 EUR. Individuals and + companies are free to give more than the minimum + required.

+ +

The membership is valid for the current civil year, i.e + any membership fee paid in 2019 is valid through December 31, + 2019.

+ +

Once the membership fee is received, it will be listed in + the + association accounting + files, which serve as the official list of + members. Therefore, members accept that their name and the + amount of their membership fee is made public.

+ +

There are two possibilities to pay the membership + fee:

+ +
    + +
  • A direct wire-transfer to the association bank + account. Since the bank account is located in France, this + is completely free of charge for any person or company + located in the European Union. The IBAN number of the + association bank account is FR53 2004 1010 1615 0958 + 0P03 772.
  • + +
  • A Paypal payment to the association Paypal account, + whose address + is buildroot-association@buildroot.org.
  • + +
+ +
+
+ +
+
Sponsoring the project
+
+ +

Companies willing to help the Buildroot project can do so + by making a donation to the Buildroot + Association. In exchange for these donations, companies + will be listed on our Sponsors + page and will be thanked in our release announcements.

+ +

As the Buildroot Association is a legal entity + registered in France, it is able to deliver a bill and/or + receipt.

+ +

Please + contact buildroot-association@buildroot.org + if you are a company interested in making a donation.

+ +
+
+ +
+
+
+ + diff --git a/docs/website/contribute.html b/docs/website/contribute.html new file mode 100644 index 00000000..aa1cf93f --- /dev/null +++ b/docs/website/contribute.html @@ -0,0 +1,44 @@ + + +
+
+
+ +
+
Contribute
+
+

Buildroot is an open source project and you are very welcome to contribute to + it.
+ There are many different ways to contribute:

+ + + +

For more details on these topics, check out the + + Contributing to buildroot chapter in the Buildroot manual. Thanks for your help!

+ +

If you need any support yourself, have a look at + Support.

+
+
+ +
+
+
+ + diff --git a/docs/website/copyright.txt b/docs/website/copyright.txt new file mode 100644 index 00000000..b15ac5f9 --- /dev/null +++ b/docs/website/copyright.txt @@ -0,0 +1,30 @@ + +The code and graphics on this website (and it's mirror sites, if any) are +Copyright (c) 1999-2005 by Erik Andersen, 2006-2020 The Buildroot +developers. All rights reserved. + +Documents on this Web site including their graphical elements, design, and +layout are protected by trade dress and other laws and MAY BE COPIED OR +IMITATED IN WHOLE OR IN PART. THIS WEBSITE IS LICENSED FREE OF CHARGE, THERE +IS NO WARRANTY FOR THE WEBSITE TO THE EXTENT PERMITTED BY APPLICABLE LAW. +SHOULD THIS WEBSITE PROVE DEFECTIVE, YOU MAY ASSUME THAT SOMEONE MIGHT GET +AROUND TO SERVICING, REPAIRING OR CORRECTING IT SOMETIME WHEN THEY HAVE NOTHING +BETTER TO DO. REGARDLESS, YOU GET TO KEEP BOTH PIECES. + +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 THIS +WEBSITE 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 THIS WEBSITE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR +LOSS OF HAIR, LOSS OF LIFE, LOSS OF MEMORY, LOSS OF YOUR CARKEYS, MISPLACEMENT +OF YOUR PAYCHECK, OR COMMANDER DATA BEING RENDERED UNABLE TO ASSIST THE +STARFLEET OFFICERS ABORD THE STARSHIP ENTERPRISE TO RECALIBRATE THE MAIN +DEFLECTOR ARRAY, LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE +WEBSITE TO OPERATE WITH YOUR WEBBROWSER), EVEN IF SUCH HOLDER OR OTHER PARTY +HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +You have been warned. + +You can contact the webmaster at if you have some sort +of problem with this. + diff --git a/docs/website/css/main.css b/docs/website/css/main.css new file mode 100644 index 00000000..5255531b --- /dev/null +++ b/docs/website/css/main.css @@ -0,0 +1,260 @@ +/* + * Author: Carlos Alvarez + * URL: http://alvarez.is + * + * Project Name: FLATTY - Free Bootstrap 3 Theme + * Version: 1.0 + * URL: http://blacktie.co + */ + +body { + background-color: #f2f2f2; + font-family: 'Roboto', sans-serif; + font-weight: 300; + font-size: 16px; + color: #555; + + -webkit-font-smoothing: antialiased; + -webkit-overflow-scrolling: touch; +} + +/* Titles */ +h1, h2, h3, h4, h5, h6 { + font-family: 'Roboto', sans-serif; + font-weight: 300; + color: #333; +} + +h1 { + font-size: 40px; +} + +h3 { + color: #95a5a6; + font-weight: 400; +} + +h4 { + color: #95a5a6; + font-weight: 400; + font-size: 20px; +} + +.ellipsis p { + margin-bottom:10px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.centered { + text-align: center; +} + +/* Links */ +a { + color: #3498db; + word-wrap: break-word; + + -webkit-transition: color 0.1s ease-in, background 0.1s ease-in; + -moz-transition: color 0.1s ease-in, background 0.1s ease-in; + -ms-transition: color 0.1s ease-in, background 0.1s ease-in; + -o-transition: color 0.1s ease-in, background 0.1s ease-in; + transition: color 0.1s ease-in, background 0.1s ease-in; +} + +a:hover, +a:focus { + color: #7b7b7b; + text-decoration: none; + outline: 0; +} + +a:before, +a:after { + -webkit-transition: color 0.1s ease-in, background 0.1s ease-in; + -moz-transition: color 0.1s ease-in, background 0.1s ease-in; + -ms-transition: color 0.1s ease-in, background 0.1s ease-in; + -o-transition: color 0.1s ease-in, background 0.1s ease-in; + transition: color 0.1s ease-in, background 0.1s ease-in; +} + + hr { + display: block; + height: 1px; + border: 0; + border-top: 1px solid #ccc; + margin: 1em 0; + padding: 0; +} + +.navbar-default { + background-color: #3498db; + border-color: transparent; +} + +.navbar-default .navbar-brand { + color: white; +} + +.navbar-default .navbar-nav > li > a { + color: white; +} + +/* Helpers */ + +.mt { + margin-top: 40px; + margin-bottom: 40px; +} + +.nh { + margin-top: 80px; + margin-bottom: 40px; +} + +.form-control { + height: 42px; + font-size: 18px; + width: 280px; +} + +i { + margin: 8px; + color: #3498db; +} + + +/* HeaderWrap */ +#headerwrap { + /* background: url(../img/bg01.jpg) no-repeat center top; */ + background-color: #3498db; + margin-top: -20px; + padding-top:120px; + background-attachment: relative; + background-position: center center; + min-height: 400px; + max-height: 800px; + width: 100%; + + -webkit-background-size: 100%; + -moz-background-size: 100%; + -o-background-size: 100%; + background-size: 100%; + + -webkit-background-size: cover; + -moz-background-size: cover; + -o-background-size: cover; + background-size: cover; +} + +#headerwrap h1 { + color: white; + font-size: 60px; + font-weight: bold; + letter-spacing: 1px; +} + +#menubutton { + max-height: 50px; + margin-top: 6px; + padding-top: 15px; + margin-left: 10px; +} + +.panel-sponsor { + min-height: 350px; + text-align: justify; + text-justify: inter-word; +} + +@media (min-width: 768px) and (max-width: 991px) { + .navbar-collapse.collapse { + display: none !important; + } + .navbar-collapse.collapse.in { + display: block !important; + } + .navbar-header .collapse, .navbar-toggle { + display:block !important; + } + .navbar-header { + float:none; + } + .navbar-collapse { + overflow:hidden; + } + #menubutton { + margin-right: 40px; + width: 45px; + } + .text-shrink { + visibility: hidden; + } +} + +@media (max-width:767px) { + #menubutton { + max-height: 50px; + margin-top: 6px; + padding-top: 15px; + margin-left: 15px; + margin-right: 15px; + } +} + +/* entire container, keeps perspective */ +.flip-container { + perspective: 1000; +} + /* flip the pane when hovered */ + .flip-container:hover .flipper, .flip-container.hover .flipper { + transform: rotateY(180deg); + } + +.flip-container, .front, .back { + width: 180px; + height: 180px; +} + +/* flip speed goes here */ +.flipper { + transition: 0.6s; + transform-style: preserve-3d; + + position: relative; +} + +/* hide back of pane during swap */ +.front, .back { + backface-visibility: hidden; + + position: absolute; + top: 0; + left: 0; +} + +/* front pane, placed above back */ +.front { + z-index: 2; + /* for firefox 31 */ + transform: rotateY(0deg); +} + +/* back, initially hidden pane */ +.back { + transform: rotateY(180deg); +} + +.back img { + -moz-transform: scaleX(-1); + -o-transform: scaleX(-1); + -webkit-transform: scaleX(-1); + transform: scaleX(-1); + filter: FlipH; + -ms-filter: "FlipH"; +} + +.panel-box p { + height: 1.5em; +} diff --git a/docs/website/css/timeline.css b/docs/website/css/timeline.css new file mode 100644 index 00000000..df58461a --- /dev/null +++ b/docs/website/css/timeline.css @@ -0,0 +1,184 @@ +.timeline { + list-style: none; + padding: 20px 0 20px; + position: relative; +} + +.timeline:before { + top: 0; + bottom: 0; + position: absolute; + content: " "; + width: 3px; + background-color: #E4E4E4; + left: 50%; + margin-left: -1.5px; + } + +.timeline > li { + margin-bottom: 20px; + position: relative; +} + +.timeline > li:before, +.timeline > li:after { + content: " "; + display: table; +} + +.timeline > li:after { + clear: both; +} + +.timeline > li:before, +.timeline > li:after { + content: " "; + display: table; +} + +.timeline > li:after { + clear: both; +} + +.timeline > li > .timeline-panel { + width: 46%; + float: left; + border: 1px solid #d4d4d4; + border-radius: 2px; + padding: 20px; + position: relative; + -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.175); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.175); + background-color: white; +} + +.timeline > li > .timeline-panel:before { + position: absolute; + top: 26px; + right: -15px; + display: inline-block; + border-top: 15px solid transparent; + border-left: 15px solid #ccc; + border-right: 0 solid #ccc; + border-bottom: 15px solid transparent; + content: " "; +} + +.timeline > li > .timeline-panel:after { + position: absolute; + top: 27px; + right: -14px; + display: inline-block; + border-top: 14px solid transparent; + border-left: 14px solid #fff; + border-right: 0 solid #fff; + border-bottom: 14px solid transparent; + content: " "; +} + +.timeline > li > .timeline-badge { + color: #fff; + width: 50px; + height: 50px; + line-height: 50px; + font-size: 1.4em; + text-align: center; + position: absolute; + top: 16px; + left: 50%; + margin-left: -25px; + background-color: #E6E6E6; + z-index: 100; + border-top-right-radius: 50%; + border-top-left-radius: 50%; + border-bottom-right-radius: 50%; + border-bottom-left-radius: 50%; +} + +.timeline > li.timeline-inverted > .timeline-panel { + float: right; +} + +.timeline > li.timeline-inverted > .timeline-panel:before { + border-left-width: 0; + border-right-width: 15px; + left: -15px; + right: auto; +} + +.timeline > li.timeline-inverted > .timeline-panel:after { + border-left-width: 0; + border-right-width: 14px; + left: -14px; + right: auto; +} + +.timeline-badge.primary { + background-color: #2e6da4 !important; +} + +.timeline-badge.success { + background-color: #3f903f !important; +} + +.timeline-badge.warning { + background-color: #f0ad4e !important; +} + +.timeline-badge.danger { + background-color: #d9534f !important; +} + +.timeline-badge.info { + background-color: #5bc0de !important; +} + +.timeline-title { + margin-top: 0; + color: inherit; +} + +.timeline-body > p, +.timeline-body > ul { + margin-bottom: 0; +} + +.timeline-body > p + p { + margin-top: 5px; +} + +@media (max-width: 767px) { + ul.timeline:before { + left: 40px; + } + + ul.timeline > li > .timeline-panel { + width: calc(100% - 90px); + width: -moz-calc(100% - 90px); + width: -webkit-calc(100% - 90px); + } + + ul.timeline > li > .timeline-badge { + left: 15px; + margin-left: 0; + top: 16px; + } + + ul.timeline > li > .timeline-panel { + float: right; + } + + ul.timeline > li > .timeline-panel:before { + border-left-width: 0; + border-right-width: 15px; + left: -15px; + right: auto; + } + + ul.timeline > li > .timeline-panel:after { + border-left-width: 0; + border-right-width: 14px; + left: -14px; + right: auto; + } +} diff --git a/docs/website/docs.html b/docs/website/docs.html new file mode 100644 index 00000000..c619c16f --- /dev/null +++ b/docs/website/docs.html @@ -0,0 +1,131 @@ + + +
+
+
+ +
+
Documentation
+
+

The Buildroot user manual is where you want to start reading if you + wish to understand how Buildroot works, or wish to change/extend/fix + things. It is available as:

+ +
+
+
+
+
+ +
+
+ +
+
+
+ +

HTML
+ Stable | + Nightly +

+ +
+ +
+
+
+
+ +
+
+ +
+
+
+ +

PDF
+ Stable | + Nightly +

+ +
+ +
+
+
+
+ +
+
+ +
+
+
+ +

ASCII
+ Stable | + Nightly +

+ +
+
+ +

If you find any errors (factual, grammatical, whatever) please + report them to us.

+
+
+ +
+
Training
+
+

Bootlin (formerly Free Electrons) + offers a complete 3-days + training course on Buildroot. They also make the training + materials freely available:

+ +
+
+
+
Slides preview
+
+
+ buildroot slides +
+
+
+
+ +
+
+
Training materials
+ +
+ +
+
Public training course
+
+ The next online public training course on Buildroot + organized + by Bootlin will + take place on March 8-11, 2021, with Thomas Petazzoni as + trainer. Infos + and registration. +
+
+
+
+
+
+ +
+
+
+ + + diff --git a/docs/website/download.html b/docs/website/download.html new file mode 100644 index 00000000..bd6499df --- /dev/null +++ b/docs/website/download.html @@ -0,0 +1,217 @@ + + +
+
+
+ +
+
Download
+
+ +

Latest stable / long term support release: 2021.02

+ +
+
+
+
+
+ +
+
+ +
+
+
+

buildroot-2021.02.tar.gz

+

PGP signature

+
+
+
+
+
+ +
+
+ +
+
+
+ +

buildroot-2021.02.tar.bz2

+

PGP signature

+
+
+ + This and earlier releases (and their PGP signatures) can always be downloaded from + http://buildroot.net/downloads/. +
+
+ +
+
Source code
+
+ +
+
+
+
Repository
+
+

The buildroot repository can be browsed online through cgit at + http://git.buildroot.net/buildroot. + To grab a copy of the repository use

+ + +
+ + + + +

+ +

+ Or if you're behind a firewall blocking git: +

+ +
+ + + + +

+ +

+ + Please use the native git protocol if at all possible, as it's a lot + more efficient than HTTP. + +

+ + If you are not already familiar with using Git, we recommend you visit the Git website. + +

+ + Once you've checked out a copy of the source tree, you can update your source + tree at any time so it is in sync with the latest and greatest by entering your + buildroot directory and running the command: + +

+git pull
+
+ + Because you've only been granted anonymous access to the tree, you won't be + able to push your changes to the repo. Changes can instead be submitted for + inclusion by posting them to the buildroot mailing list. +
+
+
+ +
+
+
Tarballs
+
+ You can also obtain daily snapshots of the latest Buildroot source tree if you + want to follow development, but cannot or do not wish to use Git. + + + +

+ Older versions can be downloaded from the release archive. +

+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/website/favicon.ico b/docs/website/favicon.ico new file mode 100644 index 00000000..fa9d2407 Binary files /dev/null and b/docs/website/favicon.ico differ diff --git a/docs/website/favicon.png b/docs/website/favicon.png new file mode 100644 index 00000000..3bfe1ba7 Binary files /dev/null and b/docs/website/favicon.png differ diff --git a/docs/website/fonts/glyphicons-halflings-regular.woff b/docs/website/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 00000000..d83c539b Binary files /dev/null and b/docs/website/fonts/glyphicons-halflings-regular.woff differ diff --git a/docs/website/footer.html b/docs/website/footer.html new file mode 100644 index 00000000..82901b7e --- /dev/null +++ b/docs/website/footer.html @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/website/header.html b/docs/website/header.html new file mode 100644 index 00000000..e1909291 --- /dev/null +++ b/docs/website/header.html @@ -0,0 +1,54 @@ + + + + + + + + + + + Buildroot - Making Embedded Linux Easy + + + + + + + + + + diff --git a/docs/website/images/amarula-solutions-logo.png b/docs/website/images/amarula-solutions-logo.png new file mode 100644 index 00000000..3fe4aeef Binary files /dev/null and b/docs/website/images/amarula-solutions-logo.png differ diff --git a/docs/website/images/bootlin-logo.png b/docs/website/images/bootlin-logo.png new file mode 100644 index 00000000..4f918750 Binary files /dev/null and b/docs/website/images/bootlin-logo.png differ diff --git a/docs/website/images/boundary-devices-logo.png b/docs/website/images/boundary-devices-logo.png new file mode 100644 index 00000000..35d7a931 Binary files /dev/null and b/docs/website/images/boundary-devices-logo.png differ diff --git a/docs/website/images/browser.png b/docs/website/images/browser.png new file mode 100644 index 00000000..56039dfa Binary files /dev/null and b/docs/website/images/browser.png differ diff --git a/docs/website/images/bug-buddy.png b/docs/website/images/bug-buddy.png new file mode 100644 index 00000000..5d38fd83 Binary files /dev/null and b/docs/website/images/bug-buddy.png differ diff --git a/docs/website/images/buildroot-slides.png b/docs/website/images/buildroot-slides.png new file mode 100644 index 00000000..6ecba3d4 Binary files /dev/null and b/docs/website/images/buildroot-slides.png differ diff --git a/docs/website/images/calao-logo.png b/docs/website/images/calao-logo.png new file mode 100644 index 00000000..c01ecf67 Binary files /dev/null and b/docs/website/images/calao-logo.png differ diff --git a/docs/website/images/circuitco-logo.png b/docs/website/images/circuitco-logo.png new file mode 100644 index 00000000..8b315da4 Binary files /dev/null and b/docs/website/images/circuitco-logo.png differ diff --git a/docs/website/images/clippy.svg b/docs/website/images/clippy.svg new file mode 100644 index 00000000..d827e82e --- /dev/null +++ b/docs/website/images/clippy.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/docs/website/images/email.png b/docs/website/images/email.png new file mode 100644 index 00000000..367dadc7 Binary files /dev/null and b/docs/website/images/email.png differ diff --git a/docs/website/images/fluendo-logo.png b/docs/website/images/fluendo-logo.png new file mode 100644 index 00000000..b4d02cb6 Binary files /dev/null and b/docs/website/images/fluendo-logo.png differ diff --git a/docs/website/images/free-electrons-logo.png b/docs/website/images/free-electrons-logo.png new file mode 100644 index 00000000..0a774041 Binary files /dev/null and b/docs/website/images/free-electrons-logo.png differ diff --git a/docs/website/images/gift.png b/docs/website/images/gift.png new file mode 100644 index 00000000..f527f828 Binary files /dev/null and b/docs/website/images/gift.png differ diff --git a/docs/website/images/github_hash_mongrel2.png b/docs/website/images/github_hash_mongrel2.png new file mode 100644 index 00000000..c695c318 Binary files /dev/null and b/docs/website/images/github_hash_mongrel2.png differ diff --git a/docs/website/images/google-logo.png b/docs/website/images/google-logo.png new file mode 100644 index 00000000..bceab166 Binary files /dev/null and b/docs/website/images/google-logo.png differ diff --git a/docs/website/images/hammer.png b/docs/website/images/hammer.png new file mode 100644 index 00000000..454a5e58 Binary files /dev/null and b/docs/website/images/hammer.png differ diff --git a/docs/website/images/imgtec-logo.png b/docs/website/images/imgtec-logo.png new file mode 100644 index 00000000..f8a0ffa3 Binary files /dev/null and b/docs/website/images/imgtec-logo.png differ diff --git a/docs/website/images/irc.png b/docs/website/images/irc.png new file mode 100644 index 00000000..442be4d7 Binary files /dev/null and b/docs/website/images/irc.png differ diff --git a/docs/website/images/logilin-logo.png b/docs/website/images/logilin-logo.png new file mode 100644 index 00000000..8e8396cf Binary files /dev/null and b/docs/website/images/logilin-logo.png differ diff --git a/docs/website/images/logo.png b/docs/website/images/logo.png new file mode 100644 index 00000000..2db743b4 Binary files /dev/null and b/docs/website/images/logo.png differ diff --git a/docs/website/images/logo.xcf b/docs/website/images/logo.xcf new file mode 100644 index 00000000..97248904 Binary files /dev/null and b/docs/website/images/logo.xcf differ diff --git a/docs/website/images/logo_small.png b/docs/website/images/logo_small.png new file mode 100644 index 00000000..eab95402 Binary files /dev/null and b/docs/website/images/logo_small.png differ diff --git a/docs/website/images/menuconfig.png b/docs/website/images/menuconfig.png new file mode 100644 index 00000000..423694f3 Binary files /dev/null and b/docs/website/images/menuconfig.png differ diff --git a/docs/website/images/mind-logo.png b/docs/website/images/mind-logo.png new file mode 100644 index 00000000..ecc3fa09 Binary files /dev/null and b/docs/website/images/mind-logo.png differ diff --git a/docs/website/images/nconfig.png b/docs/website/images/nconfig.png new file mode 100644 index 00000000..cc05d6e8 Binary files /dev/null and b/docs/website/images/nconfig.png differ diff --git a/docs/website/images/package.png b/docs/website/images/package.png new file mode 100644 index 00000000..9dd8b1e0 Binary files /dev/null and b/docs/website/images/package.png differ diff --git a/docs/website/images/pdf-icon.png b/docs/website/images/pdf-icon.png new file mode 100644 index 00000000..71ae983d Binary files /dev/null and b/docs/website/images/pdf-icon.png differ diff --git a/docs/website/images/rockwell-collins-logo.png b/docs/website/images/rockwell-collins-logo.png new file mode 100644 index 00000000..b5956a82 Binary files /dev/null and b/docs/website/images/rockwell-collins-logo.png differ diff --git a/docs/website/images/scaleway-logo.png b/docs/website/images/scaleway-logo.png new file mode 100644 index 00000000..16859145 Binary files /dev/null and b/docs/website/images/scaleway-logo.png differ diff --git a/docs/website/images/smile-logo.png b/docs/website/images/smile-logo.png new file mode 100644 index 00000000..046c999a Binary files /dev/null and b/docs/website/images/smile-logo.png differ diff --git a/docs/website/images/synopsys-logo.png b/docs/website/images/synopsys-logo.png new file mode 100644 index 00000000..d4fbd89a Binary files /dev/null and b/docs/website/images/synopsys-logo.png differ diff --git a/docs/website/images/tap2open-logo.png b/docs/website/images/tap2open-logo.png new file mode 100644 index 00000000..136019b6 Binary files /dev/null and b/docs/website/images/tap2open-logo.png differ diff --git a/docs/website/images/text.png b/docs/website/images/text.png new file mode 100644 index 00000000..e2eee546 Binary files /dev/null and b/docs/website/images/text.png differ diff --git a/docs/website/images/tkos-logo.png b/docs/website/images/tkos-logo.png new file mode 100644 index 00000000..6fe58826 Binary files /dev/null and b/docs/website/images/tkos-logo.png differ diff --git a/docs/website/images/tux-flat.png b/docs/website/images/tux-flat.png new file mode 100644 index 00000000..782699f5 Binary files /dev/null and b/docs/website/images/tux-flat.png differ diff --git a/docs/website/images/xconfig.png b/docs/website/images/xconfig.png new file mode 100644 index 00000000..cb99a3a3 Binary files /dev/null and b/docs/website/images/xconfig.png differ diff --git a/docs/website/images/zillabit-logo.png b/docs/website/images/zillabit-logo.png new file mode 100644 index 00000000..6a2ac31f Binary files /dev/null and b/docs/website/images/zillabit-logo.png differ diff --git a/docs/website/images/zip.png b/docs/website/images/zip.png new file mode 100644 index 00000000..02a1dc11 Binary files /dev/null and b/docs/website/images/zip.png differ diff --git a/docs/website/index.html b/docs/website/index.html new file mode 100644 index 00000000..300adbb8 --- /dev/null +++ b/docs/website/index.html @@ -0,0 +1,151 @@ + + +
+
+
+
+ +
+
+

Buildroot
+ Making Embedded Linux Easy

+ + +
+
+
+
+ + +
+
+
+

Buildroot is a simple, efficient and easy-to-use tool to + generate embedded Linux systems through cross-compilation.

+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+ +

Can handle everything

+

Cross-compilation toolchain, root filesystem generation, + kernel image compilation and bootloader compilation.

+
+ +
+
+
+
+ +
+
+ +
+
+
+ +

Is very easy

+

Thanks to its kernel-like menuconfig, gconfig and + xconfig configuration interfaces, building a basic system with + Buildroot is easy and typically takes 15-30 minutes.

+ +
+ +
+
+
+
+ +
+
+ +
+
+
+ +

Supports several thousand packages

+

X.org stack, Gtk3, Qt 5, GStreamer, Webkit, Kodi, a large number of network-related and system-related utilities are supported.

+ +
+
+
+
+ +
+
+
+

Buildroot is for Everyone.

+

Has a simple structure that makes it easy to understand and extend. It relies only on the well-known Makefile language.

+
+
+ +
+
+ +
+
+
+ +
+
+
+

Our recent activity.

+

Buildroot is an open source project: many developers contribute to it daily.

+
+
+
+ +
+
+
+
+ +
+
+
+
+
+ +
+
+
+ + diff --git a/docs/website/js/buildroot.js b/docs/website/js/buildroot.js new file mode 100644 index 00000000..bf80f11d --- /dev/null +++ b/docs/website/js/buildroot.js @@ -0,0 +1,93 @@ +function load_activity(feedurl, divid) { + let container = document.getElementById(divid); + $.ajax({ + url: "https://cors-anywhere.herokuapp.com/" + feedurl + }) + .done(function(data){ + let x2js = new X2JS(); + let result = x2js.xml_str2json(data.documentElement.outerHTML); + let loaded = 0; + let nb_display = 8; + if (result==null) return; + for (let i = 0; i < result.feed.entry.length; i++) { + let entry = result.feed.entry[i]; + if (entry.title.indexOf("git commit") !== -1) + continue; + loaded += 1; + if (loaded > nb_display) + break; + let div = document.createElement("p"); + let link = document.createElement("a"); + let d = new Date(entry.published); + let data = '[' + d.toLocaleDateString() + '] ' + entry.title; + let text = document.createTextNode(data); + link.appendChild(text); + link.title = entry.title; + link.href = entry.link._href; + div.appendChild(link); + container.appendChild(div); + } + let empty = nb_display - loaded; + for (let i = 0; i < empty; i++) { + container.appendChild(document.createElement("p")); + } + }); +} + +function google_analytics() { + let _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-21761074-1']); + _gaq.push(['_setDomainName', 'none']); + _gaq.push(['_setAllowLinker', true]); + _gaq.push(['_trackPageview']); + + let ga = document.createElement('script'); + ga.type = 'text/javascript'; + ga.async = true; + ga.src = ('https:' === document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + let s = document.getElementsByTagName('script')[0]; + s.parentNode.insertBefore(ga, s); +} + +function showTooltip(elem, msg) { + elem.setAttribute('class', 'btn tooltipped tooltipped-s'); + elem.setAttribute('aria-label', msg); +} + +let clipboard = new Clipboard('.btn'); + +$(function () { + $('[data-toggle="tooltip"]').tooltip() +}); + +clipboard.on('success', function(e) { + e.clearSelection(); + $(e.trigger).tooltip('show'); +}); + +$(function() { + $('a[href*=\\#]:not([href=\\#])').click(function() { + if (location.pathname.replace(/^\//,'') === this.pathname.replace(/^\//,'') && location.hostname === this.hostname) { + let target = $(this.hash); + target = target.length ? target : $('[name=' + this.hash.slice(1) +']'); + if (target.length) { + $('html,body').animate({ + scrollTop: target.offset().top + }, 1000); + return false; + } + } + }); +}); + +jQuery(document).ready(function($) { + let url = window.location.href; + // Get the basename of the URL + url = url.split(/[\\/]/).pop(); + $('.nav a[href="/' + url + '"]').parent().addClass('active'); + + load_activity("http://buildroot-busybox.2317881.n4.nabble.com/Buildroot-busybox-ft2.xml", "mailing-list-activity"); + load_activity("http://git.buildroot.org/buildroot/atom/?h=master", "commit-activity"); + + $('#slides').html('') +}); diff --git a/docs/website/news.html b/docs/website/news.html new file mode 100644 index 00000000..c882664c --- /dev/null +++ b/docs/website/news.html @@ -0,0 +1,6212 @@ + + + + +
+
+
+ +

News

+
    + +
  • +
    +
    +
    +

    2021.02 released

    +

    6 March 2021

    +
    +
    +

    The stable 2021.02 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details + and go to the downloads page to pick up the + 2021.02 release.

    + +

    Notice that this is a long term support release which will be + supported with security and other important fixes until March 2022.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2021.02-rc3 released

    +

    27 February 2021

    +
    +
    +

    2021.02-rc3 has been released with more cleanups and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2021.02-rc3 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.02.11 released

    +

    17 February 2021

    +
    +
    +

    The 2020.02.11 bugfix release is out, fixing a number of important / + security related issues discovered since the 2020.02.10 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.02.11 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.11.3 released

    +

    17 February 2021

    +
    +
    +

    The 2020.11.3 bugfix release is out, fixing a number of important / + security related issues discovered since the 2020.11.2 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.11.3 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2021.02-rc2 released

    +

    17 February 2021

    +
    +
    +

    2021.02-rc2 has been released with more cleanups and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2021.02-rc2 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2021.02-rc1 released

    +

    9 February 2021

    +
    +
    +

    We have a new release candidate! Lots of changes all over the tree, see the + CHANGES + file for more details.

    + +

    Go to the downloads page to pick up the + 2021.02-rc1 + release, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.02.10 released

    +

    31 January 2021

    +
    +
    +

    The 2020.02.10 bugfix release is out, fixing a number of important / + security related issues discovered since the 2020.02.9 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.02.10 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.11.2 released

    +

    31 January 2021

    +
    +
    +

    The 2020.11.2 bugfix release is out, fixing a number of important / + security related issues discovered since the 2020.11.1 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.11.2 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.02.9 released

    +

    27 December 2020

    +
    +
    +

    The 2020.02.9 bugfix release is out, fixing a number of important / + security related issues discovered since the 2020.02.8 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.02.9 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.08.3 released, 2020.08.x series EOL

    +

    27 December 2020

    +
    +
    +

    The 2020.08.3 bugfix release is out, fixing a number of important / + security related issues discovered since the 2020.08.2 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.08.3 release.

    + +

    Notice that the 2020.08.x series is now end of life. Please migrate to + the 2020.11 series instead which will be supported until March 2021.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.11.1 released

    +

    27 December 2020

    +
    +
    +

    The 2020.11.1 bugfix release is out, fixing a number of important / + security related issues discovered since the 2020.11 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.11.1 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.11 released

    +

    2 December 2020

    +
    +
    +

    The stable 2020.11 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.11 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.11-rc3 released

    +

    28 November 2020

    +
    +
    +

    Another week, another release candidate with more cleanups and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2020.11-rc3 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.02.8 released

    +

    17 November 2020

    +
    +
    +

    The 2020.02.8 bugfix release is out, fixing a number of important / + security related issues discovered since the 2020.02.7 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.02.8 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.08.2 released

    +

    16 November 2020

    +
    +
    +

    The 2020.08.2 bugfix release is out, fixing a number of important / + security related issues discovered since the 2020.08.1 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.08.2 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.11-rc2 released

    +

    14 November 2020

    +
    +
    +

    2020.11-rc2 has been released with more cleanups and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2020.11-rc2 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.11-rc1 released

    +

    4 November 2020

    +
    +
    +

    We have a new release candidate! Lots of changes all over the tree, see the + CHANGES + file for more details.

    + +

    Go to the downloads page to pick up the + 2020.11-rc1 + release, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.02.7 released

    +

    12 October 2020

    +
    +
    +

    The 2020.02.7 bugfix release is out, fixing a number of important / + security related issues discovered since the 2020.02.6 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.02.7 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.05.3 released

    +

    12 October 2020

    +
    +
    +

    The 2020.05.3 bugfix release is out, fixing a number of important / + security related issues discovered since the 2020.05.2 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.05.3 release.

    + +

    Notice that the 2020.05.x series is now end of life. Please migrate to + the 2020.08 series instead which will be supported until December 2020.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.08.1 released

    +

    12 October 2020

    +
    +
    +

    The 2020.08.1 bugfix release is out, fixing a number of important / + security related issues discovered since the 2020.08 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.08.1 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.02.6 released

    +

    5 September 2020

    +
    +
    +

    The 2020.02.6 bugfix release is out, fixing a number of important / + security related issues discovered since the 2020.02.5 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.02.6 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.08 released

    +

    1 September 2020

    +
    +
    +

    The stable 2020.08 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.08 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.02.5 released

    +

    29 august 2020

    +
    +
    +

    The 2020.02.5 bugfix release is out, fixing a number of important / + security related issues discovered since the 2020.02.4 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.02.5 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.05.2 released

    +

    29 August 2020

    +
    +
    +

    The 2020.05.2 bugfix release is out, fixing a number of important / + security related issues discovered since the 2020.05.1 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.05.2 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.08-rc3 released

    +

    28 August 2020

    +
    +
    +

    Another week, another release candidate with more cleanups and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2020.08-rc3 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.08-rc2 released

    +

    24 August 2020

    +
    +
    +

    2020.08-rc2 has been released with more cleanups and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2020.08-rc2 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.08-rc1 released

    +

    6 August 2020

    +
    +
    +

    The 2020.08-rc1 release candidate is out. It is the first + release candidate for 2020.08, which we aim at releasing end + of August 2020. It contains a number of new packages, new + defconfigs, toolchain improvements, package updates and + more. See + the CHANGES. Go + to the downloads page to pick up the + 2020.08-rc1 + release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.02.4 released

    +

    26 July 2020

    +
    +
    +

    The 2020.02.4 bugfix release is out, fixing a number of important / + security related issues discovered since the 2020.02.3 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.02.4 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.05.1 released

    +

    25 July 2020

    +
    +
    +

    The 2020.05.1 bugfix release is out, fixing a number of important / + security related issues discovered since the 2020.05 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.05.1 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.02.3 released

    +

    3 June 2020

    +
    +
    +

    The 2020.02.3 bugfix release is out, fixing a number of important / + security related issues discovered since the 2020.02.2 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.02.3 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.05 released

    +

    1 June 2020

    +
    +
    +

    The stable 2020.05 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.05 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.05-rc3 released

    +

    29 May 2020

    +
    +
    +

    Another week, another release candidate with more cleanups and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2020.05-rc3 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.05-rc2 released

    +

    22 May 2020

    +
    +
    +

    Another week, another release candidate with more cleanups and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2020.05-rc2 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.02.2 released

    +

    12 May 2020

    +
    +
    +

    The 2020.02.2 bugfix release is out, fixing a number of important / + security related issues discovered since the 2020.02.1 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.02.2 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.05-rc1 released

    +

    10 April 2020

    +
    +
    +

    We have a new release candidate! Lots of changes all over the tree, see the + CHANGES + file for more details.

    + +

    Go to the downloads page to pick up the + 2020.05-rc1 + release, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.02.1 released

    +

    10 April 2020

    +
    +
    +

    The 2020.02.1 bugfix release is out, fixing a number of important / + security related issues discovered since the 2020.02 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.02.1 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.11.3 released, 2019.11.x series EOL

    +

    10 April 2020

    +
    +
    +

    The 2019.11.3 bugfix release is out, fixing a number of important / + security related issues discovered since the 2019.11.2 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.11.3 release.

    + +

    Notice that the 2019.11.x series is now end of life. Please migrate to + the 2020.02 series instead which will be supported until April 2021.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.02.11 released, 2019.02.x series EOL

    +

    9 April 2020

    +
    +
    +

    The 2019.02.11 bugfix release is out, fixing a number of important / + security related issues discovered since the 2019.02.10 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.02.11 release.

    + +

    Notice that the 2019.02.x series is now end of life. Please migrate to + the 2020.02 series instead which will be supported until April 2021.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.02.10 released

    +

    16 march 2020

    +
    +
    +

    The 2019.02.10 bugfix release is out, fixing a number of important / + security related issues discovered since the 2019.02.9 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.02.10 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.11.2 released

    +

    16 March 2020

    +
    +
    +

    The 2019.11.2 bugfix release is out, fixing a number of important / + security related issues discovered since the 2019.11.1 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.11.2 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.02 released

    +

    8 March 2020

    +
    +
    +

    The stable 2020.02 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2020.02 release.

    + +

    Notice that this is a long term support release which will be + supported with security and other important fixes until March 2021.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.02-rc3 released

    +

    2 March 2020

    +
    +
    +

    Another week, another release candidate with more cleanups and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2020.02-rc3 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.02-rc2 released

    +

    26 February 2020

    +
    +
    +

    Another week, another release candidate with more cleanups and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2020.02-rc2 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2020.02-rc1 released

    +

    18 February 2020

    +
    +
    +

    We have a new release candidate! Lots of changes all over the + tree, see the + CHANGES + file for details. +

    + +

    Head to the downloads page to pick up the + 2020.02-rc1 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.02.9 released

    +

    12 January 2020

    +
    +
    +

    The 2019.02.9 bugfix release is out, fixing a number of important / + security related issues discovered since the 2019.02.8 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.02.9 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.11.1 released

    +

    12 January 2020

    +
    +
    +

    The 2019.11.1 bugfix release is out, fixing a number of important / + security related issues discovered since the 2019.11 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.11.1 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.02.8 released

    +

    7 December 2019

    +
    +
    +

    The 2019.02.8 bugfix release is out, fixing a number of important / + security related issues discovered since the 2019.02.7 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.02.8 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.08.3 released

    +

    7 December 2019

    +
    +
    +

    The 2019.08.3 bugfix release is out, fixing a number of important / + security related issues discovered since the 2019.08.2 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.08.3 release.

    + +

    Notice that the 2019.08.x series is now end of life. Please migrate to + the 2019.02 or 2019.11 series instead.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.11 released

    +

    1 December 2019

    +
    +
    +

    The stable 2019.11 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.11 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.11-rc3 released

    +

    24 November 2019

    +
    +
    +

    Another week, another release candidate with more cleanups and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2019.11-rc3 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.11-rc2 released

    +

    16 November 2019

    +
    +
    +

    Another week, another release candidate with more cleanups and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2019.11-rc2 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.02.7 released

    +

    10 November 2019

    +
    +
    +

    The 2019.02.7 bugfix release is out, fixing a number of important / + security related issues discovered since the 2019.02.6 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.02.7 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.08.2 released

    +

    9 November 2019

    +
    +
    +

    The 2019.08.2 bugfix release is out, fixing a number of important / + security related issues discovered since the 2019.08.1 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.08.2 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.11-rc1 released

    +

    5 November 2019

    +
    +
    +

    We have a new release candidate! Lots of changes all over the + tree, see the + CHANGES + file for details. +

    + +

    Head to the downloads page to pick up the + 2019.11-rc1 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.02.6 released

    +

    4 October 2019

    +
    +
    +

    The 2019.02.6 bugfix release is out, fixing a number of important / + security related issues discovered since the 2019.02.5 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.02.6 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.05.3 released

    +

    4 October 2019

    +
    +
    +

    The 2019.05.3 bugfix release is out, fixing a number of important / + security related issues discovered since the 2019.05.2 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.05.3 release.

    + +

    Notice that the 2019.05.x series is now end of life. Please migrate to + the 2019.02 or 2019.08 series instead.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.08.1 released

    +

    4 October 2019

    +
    +
    +

    The 2019.08.1 bugfix release is out, fixing a number of important / + security related issues discovered since the 2019.08 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.08.1 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.05.2 released

    +

    3 September 2019

    +
    +
    +

    The 2019.05.2 bugfix release is out, fixing a number of important / + security related issues discovered since the 2019.05.1 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.05.2 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.02.5 released

    +

    2 September 2019

    +
    +
    +

    The 2019.02.5 bugfix release is out, fixing a number of important / + security related issues discovered since the 2019.02.4 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.02.5 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.08 released

    +

    1 September 2019

    +
    +
    +

    The stable 2019.08 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.08 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.08-rc3 released

    +

    28 August 2019

    +
    +
    +

    Another week, another release candidate with more cleanups and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2019.08-rc3 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.08-rc2 released

    +

    20 August 2019

    +
    +
    +

    Another week, another release candidate with more cleanups and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2019.08-rc2 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.08-rc1 released

    +

    9 August 2019

    +
    +
    +

    We have a new release candidate! Lots of changes all over the + tree, see the + CHANGES + file for details. +

    + +

    Head to the downloads page to pick up the + 2019.08-rc1 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.02.4 released

    +

    7 June 2019

    +
    +
    +

    The 2019.02.4 bugfix release is out, fixing a number of important / + security related issues discovered since the 2019.02.2 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.02.4 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.05.1 released

    +

    7 July 2019

    +
    +
    +

    The 2019.05.1 bugfix release is out, fixing a number of important / + security related issues discovered since the 2019.05 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.05.1 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.02.3 released

    +

    7 June 2019

    +
    +
    +

    The 2019.02.3 bugfix release is out, fixing a number of important / + security related issues discovered since the 2019.02.2 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.02.3 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.05 released

    +

    2 June 2019

    +
    +
    +

    The stable 2019.05 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.05 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.05-rc3 released

    +

    25 May 2019

    +
    +
    +

    Another week, another release candidate with more cleanups and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2019.05-rc3 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.05-rc2 released

    +

    15 May 2019

    +
    +
    +

    Another week, another release candidate with more cleanups and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2019.05-rc2 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.05-rc1 released

    +

    8 May 2019

    +
    +
    +

    We have a new release candidate! Lots of changes all over the + tree, see the + CHANGES + file for details, and read the + announcement. +

    + +

    Head to the downloads page to pick up the + 2019.05-rc1 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.02.2 released

    +

    29 April 2019

    +
    +
    +

    The 2019.02.2 bugfix release is out, fixing a number of important / + security related issues discovered since the 2019.02.1 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.02.2 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.02.1 released

    +

    29 March 2019

    +
    +
    +

    The 2019.02.1 bugfix release is out, fixing a number of important / + security related issues discovered since the 2019.02 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.02.1 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.02.12 released, 2018.02.x series EOL

    +

    29 March 2019

    +
    +
    +

    The 2018.02.12 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.02.11 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.02.12 release.

    + +

    Notice that the 2018.02.x series is now end of life. Please migrate to + the 2019.02 series instead which will be supported until March 2020.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.11.4 released

    +

    28 March 2019

    +
    +
    +

    The 2018.11.4 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.11.3 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.11.4 release.

    + +

    Notice that the 2018.11.x series is now end of life. Please migrate to + the 2019.02 series instead which will be supported until March 2020.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.02 released

    +

    4 March 2019

    +
    +
    +

    The stable 2019.02 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2019.02 release.

    + +

    Notice that this is a long term support release which will be + supported with security and other important fixes until March 2020.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.02-rc3 released

    +

    1 March 2019

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2019.02-rc3 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.11.3 released

    +

    23 February 2019

    +
    +
    +

    The 2018.11.3 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.11.2 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.11.3 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.02.11 released

    +

    23 February 2019

    +
    +
    +

    The 2018.02.11 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.02.10 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.02.11 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.02-rc2 released

    +

    23 February 2019

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2019.02-rc2 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2019.02-rc1 released

    +

    13 February 2019

    +
    +
    +

    We have a new release candidate! Lots of changes all over the + tree, see the + CHANGES + file for details and read the + announcement. +

    + +

    Head to the downloads page to pick up the + 2019.02-rc1 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.02.10 released

    +

    31 January 2019

    +
    +
    +

    The 2018.02.10 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.02.9 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.02.10 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.11.2 released

    +

    30 January 2019

    +
    +
    +

    The 2018.11.2 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.11.1 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.11.2 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.02.9 released

    +

    20 December 2018

    +
    +
    +

    The 2018.02.9 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.02.8 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.02.9 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.08.4 released, 2018.08 series EOL

    +

    20 December 2018

    +
    +
    +

    The 2018.08.4 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.08.3 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.08.4 release.

    +

    Notice that the 2018.08 series is now end of life, please + consider migrating to 2018.11 instead.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.11.1 released

    +

    19 December 2018

    +
    +
    +

    The 2018.11.1 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.11 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.11.1 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.11 released

    +

    1 December 2018

    +
    +
    +

    The stable 2018.11 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.11 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.11-rc3 released

    +

    30 November 2018

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2018.11-rc3 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.02.8 released

    +

    26 November 2018

    +
    +
    +

    The 2018.02.8 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.02.7 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.02.8 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.08.3 released

    +

    26 November 2018

    +
    +
    +

    The 2018.08.3 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.08.2 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.08.3 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.11-rc2 released

    +

    21 November 2018

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2018.11-rc2 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.11-rc1 released

    +

    9 November 2018

    +
    +
    +

    We have a new release candidate! Lots of changes all over the + tree, see the + CHANGES + file for details and/or read + the announcement. +

    + +

    Head to the downloads page to pick up the + 2018.11-rc1 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.02.7 released

    +

    25 October 2018

    +
    +
    +

    The 2018.02.7 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.02.6 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.02.7 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.08.2 released

    +

    25 October 2018

    +
    +
    +

    The 2018.08.2 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.08.1 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.08.2 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.08.1 released

    +

    7 October 2018

    +
    +
    +

    The 2018.08.1 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.08 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.08.1 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.02.6 released

    +

    7 October 2018

    +
    +
    +

    The 2018.02.6 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.02.5 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.02.6 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.05.3 released

    +

    6 October 2018

    +
    +
    +

    The 2018.05.3 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.05.2 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.05.3 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.08 released

    +

    6 September 2018

    +
    +
    +

    The stable 2018.08 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.08 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.08-rc3 released

    +

    31 August 2018

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2018.08-rc3 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.02.5 released

    +

    29 August 2018

    +
    +
    +

    The 2018.02.5 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.02.4 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.02.5 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.05.2 released

    +

    28 August 2018

    +
    +
    +

    The 2018.05.2 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.05.1 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.05.2 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.08-rc2 released

    +

    20 August 2018

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2018.08-rc2 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.08-rc1 released

    +

    5 August 2018

    +
    +
    +

    We have a new release candidate! Lots of changes all over the + tree, see the + CHANGES + file for details and/or read + the announcement. +

    + +

    Head to the downloads page to pick up the + 2018.08-rc1 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.02.4 released

    +

    21 July 2018

    +
    +
    +

    The 2018.02.4 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.02.3 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.02.4 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.05.1 released

    +

    20 July 2018

    +
    +
    +

    The 2018.05.1 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.05 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.05.1 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.02.3 released

    +

    18 June 2018

    +
    +
    +

    The 2018.02.3 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.02.2 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.02.3 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.05 released

    +

    1 June 2018

    +
    +
    +

    The stable 2018.05 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.05 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.05-rc3 released

    +

    28 May 2018

    +
    +
    +

    Release candidate 3 is out with more cleanups and security + / build fixes. See + the CHANGES + file for details.

    +

    Head to the downloads page to + pick up + the 2018.05-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.05-rc2 released

    +

    22 May 2018

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2018.05-rc2 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.05-rc1 released

    +

    9 May 2018

    +
    +
    +

    We have a new release candidate! Lots of changes all over the + tree, see the + CHANGES + file for details and read the + announcement. +

    + +

    Head to the downloads page to pick up the + 2018.05-rc1 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.02.2 released

    +

    4 May 2018

    +
    +
    +

    The 2018.02.2 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.02.1 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.02.2 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.02.11 released

    +

    11 April 2018

    +
    +
    +

    The 2017.02.11 bugfix release is out, fixing a number of important / + security related issues discovered since the 2017.02.10 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2017.02.11 release.

    +

    Notice that the 2017.02 series is now end of life, so please consider + updating to 2018.02 instead.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.02.1 released

    +

    10 April 2018

    +
    +
    +

    The 2018.02.1 bugfix release is out, fixing a number of important / + security related issues discovered since the 2018.02 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.02.1 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.02 released

    +

    4 March 2018

    +
    +
    +

    The stable 2018.02 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2018.02 release.

    + +

    Notice that this is a long term support release which will be + supported with security and other important fixes until February 2019.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.02-rc3 released

    +

    27 February 2018

    +
    +
    +

    Release candidate 3 is out with more cleanups and security + / build fixes. See + the CHANGES + file for details.

    +

    Head to the downloads page to + pick up + the 2018.02-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.02-rc2 released

    +

    15 February 2018

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2018.02-rc2 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2018.02-rc1 released

    +

    5 February 2018

    +
    +
    +

    We have a new release candidate! Lots of changes all over the + tree, see the + CHANGES + file for details and read the + announcement. +

    + +

    Head to the downloads page to pick up the + 2018.02-rc1 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.02.10 released

    +

    31 January 2018

    +
    +
    +

    The 2017.02.10 bugfix release is out, fixing a number of important / + security related issues discovered since the 2017.02.9 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2017.02.10 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.11.2 released

    +

    21 January 2018

    +
    +
    +

    The 2017.11.2 bugfix release is out, fixing a number of important / + security related issues discovered since the 2017.11.1 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2017.11.2 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.02.9 released

    +

    1 January 2018

    +
    +
    +

    The 2017.02.9 bugfix release is out, fixing a number of important / + security related issues discovered since the 2017.02.8 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2017.02.9 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.11.1 released

    +

    31 December 2017

    +
    +
    +

    The 2017.11.1 bugfix release is out, fixing a number of important / + security related issues discovered since the 2017.11 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2017.11.1 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.11 released

    +

    30 November 2017

    +
    +
    +

    The stable 2017.11 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2017.11 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.08.2 released

    +

    29 November 2017

    +
    +
    +

    The 2017.08.2 bugfix release is out, fixing a number of important / + security related issues discovered since the 2017.08.1 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2017.08.2 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.02.8 released

    +

    27 November 2017

    +
    +
    +

    The 2017.02.8 bugfix release is out, fixing a number of important / + security related issues discovered since the 2017.02.7 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2017.02.8 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.11-rc2 released

    +

    13 November 2017

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2017.11-rc2 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.11-rc1 released

    +

    6 November 2017

    +
    +
    +

    We have a new release candidate! Lots of changes all over + the tree, see + the CHANGES + file for details. +

    + +

    Head to the downloads page to pick up the + 2017.11-rc1 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.02.7 released

    +

    28 October 2017

    +
    +
    +

    The 2017.02.7 bugfix release is out, fixing a number of important / + security related issues discovered since the 2017.02.6 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2017.02.7 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.08.1 released

    +

    23 October 2017

    +
    +
    +

    The 2017.08.1 bugfix release is out, fixing a number of important / + security related issues discovered since the 2017.08 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2017.08.1 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.02.6 released

    +

    24 September 2017

    +
    +
    +

    The 2017.02.6 bugfix release is out, fixing a number of important / + security related issues discovered since the 2017.02.5 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2017.02.6 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.08 released

    +

    1 September 2017

    +
    +
    +

    The stable 2017.08 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details + and go to the downloads page to pick up the + 2017.08 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.08-rc3 released

    +

    23 August 2017

    +
    +
    +

    Another release candidate, on the road to the final 2017.08 + release. A number of fixes and cleanups in various packages + and defconfigs. See + the CHANGES + file for details. +

    + +

    Head to the downloads page to pick up the + 2017.08-rc3 + release candidate, and report any + problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.08-rc2 released

    +

    11 August 2017

    +
    +
    +

    Another release candidate, on the road to the final 2017.08 + release. A number of fixes and cleanups in various packages + and defconfigs. See + the CHANGES + file for details. +

    + +

    Head to the downloads page to pick up the + 2017.08-rc2 + release candidate, and report any + problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.08-rc1 released

    +

    2 August 2017

    +
    +
    +

    We have a new release candidate! Lots of changes all over + the tree, see + the CHANGES + file for details. +

    + +

    Head to the downloads page to pick up the + 2017.08-rc1 + release candidate, and report any + problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.05.2 released

    +

    27 July 2017

    +
    +
    +

    The 2017.05.2 bugfix release is out, fixing a number of important / + security related issues discovered since the 2017.05.1 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2017.05.2 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.02.5 released

    +

    27 July 2017

    +
    +
    +

    The 2017.02.5 bugfix release is out, fixing a number of important / + security related issues discovered since the 2017.02.4 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2017.02.5 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.05.1 released

    +

    4 July 2017

    +
    +
    +

    The 2017.05.1 bugfix release is out, fixing a number of important / + security related issues discovered since the 2017.05 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2017.05.1 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.02.4 released

    +

    4 July 2017

    +
    +
    +

    The 2017.02.4 bugfix release is out, fixing a number of important / + security related issues discovered since the 2017.02.3 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2017.02.4 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.02.3 released

    +

    2 June 2017

    +
    +
    +

    The 2017.02.3 bugfix release is out, fixing a number of important / + security related issues discovered since the 2017.02.2 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2017.02.3 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.05 released

    +

    31 May 2017

    +
    +
    +

    The stable 2017.05 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2017.05 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.05-rc3 released

    +

    30 May 2017

    +
    +
    +

    Release candidate 3 is out with more cleanups and security + / build fixes. See + the CHANGES + file for details.

    +

    Head to the downloads page to + pick up + the 2017.05-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.05-rc2 released

    +

    17 May 2017

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See the + CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2017.05-rc2 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.05-rc1 released

    +

    8 May 2017

    +
    +
    +

    We have a new release candidate! Lots of changes all over + the tree, see + the CHANGES + file for details. +

    + +

    Head to the downloads page to pick up the + 2017.05-rc1 + release candidate, and report any + problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.02.2 released

    +

    1 May 2017

    +
    +
    +

    The 2017.02.2 bugfix release is out, fixing a number of important / + security related issues discovered since the 2017.02.1 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2017.02.2 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.02.1 released

    +

    4 April 2017

    +
    +
    +

    The 2017.02.1 bugfix release is out, fixing a number of important / + security related issues discovered since the 2017.02 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2017.02.1 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2016.11.3 released

    +

    10 March 2017

    +
    +
    +

    The 2016.11.3 bugfix release is out, fixing a number of important / + security related issues discovered since the 2016.11.2 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2016.11.3 release.

    +

    Notice that this is the final 2016.11.x release. Users are + urged to migrate to the 2017.02.x series instead.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.02 released

    +

    28 February 2017

    +
    +
    +

    The stable 2017.02 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2017.02 release.

    + +

    Notice that this is a long term support release which will be + supported with security and other important fixes until February 2018.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.02-rc3 released

    +

    26 February 2017

    +
    +
    +

    Release candidate 3 is out with more cleanups and security + / build fixes. See + the CHANGES + file for details.

    +

    Head to the downloads page to + pick up + the 2017.02-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.02-rc2 released

    +

    20 February 2017

    +
    +
    +

    We have a new release candidate! Lots of changes all over the tree, see + the CHANGES + file for details. +

    + +

    Head to the downloads page to pick up the + 2017.02-rc2 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2017.02-rc1 released

    +

    11 February 2017

    +
    +
    +

    We have a new release candidate! Lots of changes all over + the tree, see + the CHANGES + file for details, read + the announcement. +

    + +

    Head to the downloads page to pick up the + 2017.12-rc1 + release candidate, and report any + problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2016.11.2 released

    +

    25 January 2017

    +
    +
    +

    The 2016.11.2 bugfix release is out, fixing a number of important / + security related issues discovered since the 2016.11.1 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2016.11.2 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2016.11.1 released

    +

    29 December 2016

    +
    +
    +

    The 2016.11.1 bugfix release is out, fixing a number of important / + security related issues discovered since the 2016.11 release. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2016.11.1 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2016.11 released

    +

    30 November 2016

    +
    +
    +

    The stable 2016.11 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2016.11 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2016.11-rc3 released

    +

    28 November 2016

    +
    +
    +

    Release candidate 3 is out with more cleanups and security + / build fixes. See + the CHANGES + file for details.

    +

    Head to the downloads page to + pick up + the 2016.11-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2016.11-rc2 released

    +

    13 November 2016

    +
    +
    +

    We have a new release candidate! Lots of + changes all over the tree, see + the CHANGES + file for details. +

    + +

    Head to the downloads page to pick up the + 2016.11-rc2 + release candidate, and report any + problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2016.11-rc1 released

    +

    3 November 2016

    +
    +
    +

    We have a new release candidate! Lots of + changes all over the tree, see + the CHANGES + file for details, read the + announcement. +

    + +

    Head to the downloads page to pick up the + 2016.11-rc1 + release candidate, and report any + problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2016.08.1 released

    +

    21 September 2016

    +
    +
    +

    The 2016.08.1 bugfix release is out. This release fixes a + potential entire root filesystem removal issue with the + external toolchain handling discovered since the 2016.08 + release. See the + CHANGES + file for more details, read the + announcement and go to the + downloads page to pick up the + 2016.08.1 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2016.08 released

    +

    1 September 2016

    +
    +
    +

    The stable 2016.08 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2016.08 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2016.08-rc3 released

    +

    30 August 2016

    +
    +
    +

    Release candidate 3 is out with more cleanups and security + / build fixes. See + the CHANGES + file for details.

    +

    Head to the downloads page to + pick up + the 2016.08-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2016.08-rc2 released

    +

    17 August 2016

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See + the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2016.08-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2016.08-rc1 released

    +

    6 August 2016

    +
    +
    +

    We have a new release candidate! Lots of + changes all over the tree, see + the CHANGES + file for details and read the + announcement +

    + +

    Head to the downloads page to pick up the + 2016.08-rc1 + release candidate, and report any + problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2016.05 released

    +

    1 March 2016

    +
    +
    +

    The stable 2016.05 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2016.05 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2016.05-rc3 released

    +

    26 May 2016

    +
    +
    +

    Release candidate 3 is out with more cleanups and security + / build fixes. See + the CHANGES + file for details.

    +

    Head to the downloads page to + pick up + the 2016.05-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2016.05-rc2 released

    +

    17 May 2016

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See + the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2016.05-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2016.05-rc1 released

    +

    10 May 2016

    +
    +
    +

    We have a new release candidate! Lots of + changes all over the tree, see + the CHANGES + file for details and read the + announcement. +

    + +

    Head to the downloads page to pick up the + 2016.05-rc1 + release candidate, and report any + problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2016.02 released

    +

    1 March 2016

    +
    +
    +

    The stable 2016.02 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2016.02 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2016.02-rc3 released

    +

    27 February 2016

    +
    +
    +

    Release candidate 3 is out with more cleanups and security + / build fixes. See + the CHANGES + file for details.

    +

    Head to the downloads page to + pick up + the 2016.02-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2016.02-rc2 released

    +

    18 February 2016

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See + the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2016.02-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2016.02-rc1 released

    +

    10 February 2016

    +
    +
    +

    We have a new release candidate! Lots of + changes all over the tree, see + the CHANGES + file for details and read the + announcement. +

    + +

    Head to the downloads page to pick up the + 2016.02-rc1 + release candidate, and report any + problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2015.11.1 released

    +

    5 December 2015

    +
    +
    +

    The 2015.11.1 bugfix release is out - Thanks to everyone + contributing. This release fixes critical issues discovered + since the 2015.11 release. See the + CHANGES + file for more details, and go to the + downloads page to pick up the + 2015.11.1 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2015.11 released

    +

    30 November 2015

    +
    +
    +

    The stable 2015.11 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2015.11 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2015.11-rc3 released

    +

    26 November 2015

    +
    +
    +

    Release candidate 3 is out with more cleanups and security + / build fixes. See + the CHANGES + file for details.

    +

    Head to the downloads page to + pick up + the 2015.11-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2015.11-rc2 released

    +

    19 November 2015

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See the + CHANGES + file for details.

    +

    Head to the downloads page to + pick up + the 2015.11-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2015.11-rc1 released

    +

    7 November 2015

    +
    +
    +

    We have a new release candidate! Lots of + changes all over the tree, see + the CHANGES + file for details. See also + the announcement + e-mail.

    + +

    Head to the downloads page to pick up the + 2015.11-rc1 + release candidate, and report any + problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2015.08.1 released

    +

    6 September 2015

    +
    +
    +

    The 2015.08.1 bugfix release is out - Thanks to everyone + contributing. This release fixes critical issues discovered since + the 2015.08 release. See the + CHANGES + file for more details, + and go to the downloads page to pick up the + 2015.08.1 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2015.08 released

    +

    31 August 2015

    +
    +
    +

    The stable 2015.08 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2015.08 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2015.08-rc2 released

    +

    24 August 2015

    +
    +
    +

    We have a new release candidate! Lots of changes all over the + tree, see + the CHANGES + file for details, and + the release + announcement.

    + +

    Head to the downloads page to pick up the + 2015.08-rc2 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2015.08-rc1 released

    +

    5 August 2015

    +
    +
    +

    We have a new release candidate! Lots of changes all over the tree, see + the CHANGES + file for details, read + the announcement.

    + +

    Head to the downloads page to pick up the + 2015.08-rc1 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2015.05 released

    +

    31 May 2015

    +
    +
    +

    The stable 2015.05 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2015.05 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2015.05-rc3 released

    +

    22 May 2015

    +
    +
    +

    Release candidate 3 is out with more cleanups and security + / build fixes. See + the CHANGES + file for details.

    +

    Head to the downloads page to + pick up + the 2015.05-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2015.05-rc2 released

    +

    11 May 2015

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See + the CHANGES + file for details.

    +

    Head to the downloads page to + pick up the + 2015.05-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2015.05-rc1 released

    +

    4 May 2015

    +
    +
    +

    We have a new release candidate! Lots of changes all over the + tree, see the CHANGES + file for details, and read the + announcement.

    + +

    Head to the downloads page to pick up the + 2015.05-rc1 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2015.02 released

    +

    1 March 2015

    +
    +
    +

    The stable 2015.02 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2015.02 release.

    +
    +
    +
  • + + +
  • +
    +
    +
    +

    2015.02-rc3 released

    +

    24 February 2015

    +
    +
    +

    Release candidate 3 is out with more cleanups and security + / build fixes. See + the CHANGES + file for details.

    +

    Head to the downloads page to + pick up the + 2015.02-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2015.02-rc2 released

    +

    15 February 2015

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See + the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2015.02-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2015.02-rc1 released

    +

    8 February 2015

    +
    +
    +

    We have a new release candidate! Lots of changes all over + the tree, see + the CHANGES + file for details, and read the + announcement.

    + +

    Head to the downloads page to pick up the + 2015.02-rc1 + release candidate, and report any problems found to + the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2014.11 released

    +

    1 December 2014

    +
    +
    +

    The stable 2014.11 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, + and go to the downloads page to pick up the + 2014.11 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2014.11-rc3 released

    +

    28 November 2014

    +
    +
    +

    Release candidate 3 is out with more cleanups and build + fixes. See + the CHANGES + file for details.

    + +

    Head to the downloads page to + pick up the + 2014.11-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2014.11-rc2 released

    +

    21 November 2014

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See + the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2014.11-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    Report from Buildroot Developers Meeting

    +

    13 November 2014

    +
    +
    +

    A report from the recent + + Buildroot Developers Meeting is now + available.

    + +

    Once again, thanks to all the participants and to + Mind for sponsoring the event.

    + +

    The next Developer Days will take place on February 2nd and + 3rd in Brussels, Belgium, right + after FOSDEM. See + the wiki + for more details.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2014.11-rc1 released

    +

    12 November 2014

    +
    +
    +

    We have a new release candidate! Lots of changes all over the + tree, see the CHANGES + file for details, and read the + announcement.

    + +

    Head to the downloads page to pick up the + 2014.11-rc1 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2014.08 released

    +

    1 September 2014

    +
    +
    +

    The stable 2014.08 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2014.08 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2014.08-rc3 released

    +

    26 August 2014

    +
    +
    +

    Release candidate 3 is out with more cleanups and build + fixes. See + the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2014.08-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2014.08-rc2 released

    +

    18 August 2014

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See + the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2014.08-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2014.08-rc1 released

    +

    8 August 2014

    +
    +
    +

    We have a new release candidate! Lots of changes all over the + tree, see the CHANGES + file for details, and read the + announcement.

    + +

    Head to the downloads page to pick up the + 2014.08-rc1 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2014.05 released

    +

    31 May 2014

    +
    +
    +

    The stable 2014.05 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2014.05 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2014.05-rc3 released

    +

    28 May 2014

    +
    +
    +

    Release candidate 3 is out with more cleanups and build + fixes. See + the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2014.05-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2014.05-rc2 released

    +

    21 May 2014

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See + the CHANGES + file for details.

    + +

    Head to the downloads page to + pick up the + 2014.05-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2014.05-rc1 released

    +

    13 May 2014

    +
    +
    +

    We have a new release candidate! Lots of changes all over the + tree, see the CHANGES + file for details, and read the + announcement.

    + +

    Head to the downloads page to pick up the + 2014.05-rc1 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    27 February 2014

    +

    2014.02 released

    +
    +
    +

    The stable 2014.02 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, + and go to the downloads page to pick up the + 2014.02 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    25 February 2014

    +

    2014.02-rc3 released

    +
    +
    +

    Release candidate 3 is out with more cleanups and build + fixes. See + the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2014.02-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    20 February 2014

    +

    2014.02-rc2 released

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See + the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2014.02-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2014.02-rc1 released

    +

    11 February 2014

    +
    +
    +

    We have a new release candidate! Lots of changes all over the + tree, see the CHANGES + file for details, and read the + announcement.

    + +

    Head to the downloads page to pick up the + 2014.02-rc1 + release candidate, and report any problems found to the + mailing list or + bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    9 February 2014

    +

    Report from Buildroot Developers Meeting

    +
    +
    +

    A report from the recent + + Buildroot Developers Meeting is now + available.

    + +

    Once again, thanks to all the participants and to + Google and + Mind for sponsoring the event.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    Upcoming Buildroot Developers meeting

    +

    30 January 2014

    +
    +
    +

    The upcoming Buildroot Developers meeting will take place in + Brussels on February, 3rd and 4th, after the + FOSDEM conference. Additional + details about the meeting can be found on the corresponding + + wiki page.

    + +

    Persons not able to join the meeting in Brussels can participate + remotely using Google Hangouts. Simply give your Google address to + thomas.petazzoni@free-electrons.com.

    + +

    This meeting is sponsored by + Google (for the meeting room) + and Mind (for the dinner). + Thanks to our sponsors!

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2013.11 released

    +

    30 November 2013

    +
    +
    +

    The stable 2013.11 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the announcement + and go to the downloads page to pick up the + 2013.11 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    Slides from Embedded Linux Conference Europe

    +

    30 November 2013

    +
    +
    +

    The slides from the Buildroot presentation at the recent + Embedded Linux Conference Europe 2013 + are now + available.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2013.11-rc3 released

    +

    18 November 2013

    +
    +
    +

    Another week, another release candidate with more + fixes. See + the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2013.11-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2013.11-rc2 released

    +

    18 November 2013

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See + the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2013.11-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    Announcement of the next Buildroot Developer Days

    +

    13 November 2013

    +
    +
    +

    The next Buildroot Developer Days meeting will take + place on Monday 3rd and Tuesday 4th February 2014 in Brussels, + Belgium - Just after + FOSDEM (February + 1st/2nd). This two days meeting is mainly open to Buildroot + developers and contributors, or Buildroot users having a prior + experience with the tool. It will allow developers to work on + Buildroot and discuss current issues, the future directions, and + more.

    + +

    In addition to the Buildroot event, we encourage embedded Linux + developers to propose talks for the Embedded and Mobile Developer + Room at FOSDEM. See + the CFP.

    + +

    We would like to thank our + sponsor Google for sponsoring + the event by providing all the needed logistics.

    + +

    For more details, see the + wiki + page dedicated to the meeting.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2013.11-rc1 released

    +

    12 November 2013

    +
    +
    +

    We have a new release candidate! Lots of changes all over the + tree, see the CHANGES + file for details, and read the + announcement.

    + +

    Head to the downloads page to pick up the + 2013.11-rc1 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    Report from Buildroot Developers Meeting

    +

    11 November 2013

    +
    +
    +

    A report from the recent + + Buildroot Developers Meeting is now + available.

    + +

    Once again, thanks to all the participants and to + Imagination Technologies + for sponsoring the event.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2013.08.1 released

    +

    17 September 2013

    +
    +
    +

    The 2013.08.1 bugfix release is out - Thanks to everyone + contributing. This release fixes critical issues discovered since + the 2013.08 release. See the + CHANGES + file for more details, + and go to the downloads page to pick up the + 2013.08.1 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    Buildroot Developer Days

    +

    16 September 2013

    +
    +
    +

    The next Buildroot Developer Days meeting will take + place on Saturday October 26th and Sunday October 27th 2013 in + Edinburgh, UK - Just after the + Embedded Linux Conference Europe (October 23th-24th). This two + days meeting is mainly open to Buildroot developers and + contributors, or Buildroot users having a prior experience with + the tool. It will allow developers to work on Buildroot and + discuss current issues, the future directions, and more.

    + +

    For more details, see the + wiki + page dedicated to the meeting.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2013.08 released

    +

    31 August 2013

    +
    +
    +

    The stable 2013.08 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the announcement + and go to the downloads page to pick up the + 2013.08 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2013.08-rc3 released

    +

    29 August 2013

    +
    +
    +

    Another week, another release candidate with more cleanups and + build fixes. See the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2013.08-rc3 + release candidate, and report any problems found to the mailing list or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2013.08-rc2 released

    +

    16 August 2013

    +
    +
    +

    We have a new release candidate! Lots of changes all over the + tree, see + the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2013.08-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2013.08-rc1 released

    +

    5 August 2013

    +
    +
    +

    We have a new release candidate! Lots of changes all over the + tree, see + the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2013.08-rc1 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2013.05 released

    +

    31 May 2013

    +
    +
    +

    The stable 2013.05 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2013.05 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2013.05-rc3 released

    +

    25 May 2013

    +
    +
    +

    Another week, another release candidate with more cleanups and + build fixes. See the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2013.05-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2013.05-rc2 released

    +

    15 May 2013

    +
    +
    +

    Another week, another release candidate with more cleanups and + build fixes. See the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2013.05-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2013.05-rc1 released

    +

    8 May 2013

    +
    +
    +

    We have a new release candidate! Lots of changes all over the + tree, see the CHANGES + file for details, and read the + announcement.

    + +

    Head to the downloads page to pick up the + 2013.05-rc1 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2013.02 released

    +

    28 February 2013

    +
    +
    +

    The stable 2013.02 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details + and go to the downloads page to pick up the + 2013.02 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2013.02-rc3 released

    +

    26 February 2013

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See + the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2013.02-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2013.02-rc2 released

    +

    19 February 2013

    +
    +
    +

    Another week, another release candidate with more cleanups and + build fixes. See the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2013.02-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2013.02-rc1 released

    +

    10 February 2013

    +
    +
    +

    We have a new release candidate! Lots of changes all over the + tree, see the CHANGES + file for details, and read the + announcement.

    + +

    Head to the downloads page to pick up the + 2013.02-rc1 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    Report from Buildroot Developers Meeting

    +

    10 February 2013

    +
    +
    +

    A report from the recent Buildroot Developers Meeting is now + available. + Embedded Linux News also has a + + writeup about the event, including photos.

    + +

    Once again, thanks to all the participants and to + Google for sponsoring the event.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    Next Buildroot Developers Meeting next to FOSDEM, Brussels

    +

    12 January 2013

    +
    +
    +

    The next Buildroot Developers Meeting will take place on Monday + 4th February 2013 and Tuesday 5th February 2013 in Brussels, + Belgium. Those dates have been chosen to immediately follow the + great FOSDEM conference.

    + +

    Attending this meeting is free, after registration by + contacting Thomas + Petazzoni. For more details about the meeting, please see + the related + Wiki page.

    + +

    We would like to + thank Google for providing the + meeting location and the Internet connection, and offering free + lunch and refreshments to the participants.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2012.11.1 released

    +

    3 January 2013

    +
    +
    +

    The 2012.11.1 bugfix release is out - Thanks to everyone + contributing. This release fixes critical issues discovered since + the 2012.11 release, most importantly with non-largefile builds on + recent Ubuntu versions. See the + CHANGES + file for more details, + and go to the downloads page to pick up the + 2012.11.1 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2012.11 released

    +

    2 December 2012

    +
    +
    +

    The stable 2012.11 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details + and go to the downloads page to pick up the + 2012.11 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2012.11-rc2 released

    +

    30 November 2012

    +
    +
    +

    RC2 is out with more bugfixes - See + the CHANGES + file for details. + +

    Head to the downloads page to pick up the + 2012.11-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2012.11-rc1 released

    +

    17 November 2012

    +
    +
    +

    We have a new release candidate! Lots of changes all over the + tree, see the CHANGES + file for details, and read the + announcement.

    + +

    Head to the downloads page to pick up the + 2012.11-rc1 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    Buildroot Developer Day

    +

    17 November 2012

    +
    +
    +

    A report from the recent Buildroot Developer Days + meeting in Barcelona, Spain is + now available. + Many thanks to all the participants, and a special thanks to + Arnout Vandecappelle from mind + for taking notes and Thomas Petazzoni + from Free Electrons + for handling all the practical arrangements, and naturally + our sponsors, Fluendo + and Synopsis. +

    +

    The next Developer Days will take place on February 4th and + 5th in Brussels, Belgium, right + after FOSDEM.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2012.08 released

    +

    31 August 2012

    +
    +
    +

    The stable 2012.08 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details and go to the downloads page to pick up the + 2012.08 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2012.08-rc3 released

    +

    25 August 2012

    +
    +
    +

    We have a new release candidate! Various fixes, and + addition of licensing informations on many + packages. See CHANGES + file for details

    + +

    Head to the downloads page to pick up the + 2012.08-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2012.08-rc2 released

    +

    15 August 2012

    +
    +
    +

    We have a new release candidate! Various fixes, and addition + of licensing informations on many + packages. See CHANGES + file for details

    + +

    Head to the downloads page to pick up the + 2012.08-rc2 + release candidate, and report any problems found to the mailing list or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2012.08-rc1 released

    +

    1 August 2012

    +
    +
    +

    We have a new release candidate! Lots of changes all over + the tree, see + the CHANGES + file for details

    + +

    Head to the downloads page to pick up the + 2012.08-rc1 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    Buildroot Developer Day

    +

    22 July 2012

    +
    +
    +

    The next Buildroot Developer Day meeting will take place + on Saturday November 3th and Sunday November 4th 2012 in + Barcelona, Spain, just before + the Embedded + Linux Conference Europe (November 5th-7th). This two days + meeting is mainly opened to Buildroot developers and contributors, + or Buildroot users having a prior experience with the tool. This + meeting will allow developers to work and Buildroot, and discuss + current issues, the future directions, and more.

    + +

    For more details, see + the wiki + page dedicated to the meeting.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2012.05 released

    +

    30 May 2012

    +
    +
    +

    The stable 2012.05 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2012.05 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2012.05-rc3 released

    +

    25 May 2012

    +
    +
    +

    RC3 is out with more bugfixes - See + the CHANGES + file for details. + +

    Head to the downloads page to pick up the + 2012.05-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2012.05-rc2 released

    +

    18 May 2012

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See + the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2012.05-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2012.05-rc1 released

    +

    10 May 2012

    +
    +
    +

    We have a new release candidate! Lots of changes all over + the tree, see + the CHANGES + file for details, and read the + announcement.

    + +

    Head to the downloads page to pick up the + 2012.05-rc1 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    Autobuilder Results Online

    +

    20 April 2012

    +
    +
    +

    The status of the autobuilders, which do repeated + randpackageconfig builds for continuous + integration testing, is now online + at autobuild.buildroot.org. The + code behind it can be found + in git.

    + +

    Thanks to Thomas Petazzoni for running the web interface, and + to The GCC Compile + Farm and Free + Electrons for hosting builders. Thomas also sends out a daily + summary of the build status to the mailing list.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2012.02 released

    +

    29 February 2012

    +
    +
    +

    The stable 2012.02 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2012.02 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2012.02-rc3 released

    +

    27 February 2012

    +
    +
    +

    RC3 is out with more bugfixes - See + the CHANGES + file for details. + +

    Head to the downloads page to pick up the + 2012.02-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2012.02-rc2 released

    +

    19 February 2012

    +
    +
    +

    Another week, another release candidate with more cleanups + and build fixes. See + the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2012.02-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2012.02-rc1 released

    +

    12 February 2012

    +
    +
    +

    We have a new release candidate! Lots of changes all over + the tree, see + the CHANGES + file for details, and read the + announcement.

    + +

    Head to the downloads page to pick up the + 2012.02-rc1 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    Buildroot Developer Day

    +

    31 January 2012

    +
    +
    +

    Another Buildroot Developer Day will take place on + Friday, February 3rd in Brussels, Belgium - The day + before FOSDEM. See the + announcement + or + the Free + Electrons blog for more info.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2011.11 released

    +

    30 November 2011

    +
    +
    +

    The stable 2011.11 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2011.11 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2011.11-rc3 released

    +

    26 November 2011

    +
    +
    +

    RC3 is out with more bugfixes - See + the CHANGES + file for details. + +

    Head to the downloads page to pick up the + 2011.11-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2011.11-rc2 released

    +

    18 November 2011

    +
    +
    +

    Another week, another release candidate with a bunch of + cleanups and build fixes. See + the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2011.11-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2011.11-rc1 released

    +

    11 November 2011

    +
    +
    +

    We have a new release candidate! Lots of changes all over + the tree, see + the CHANGES + file for details, and read the + announcement + +

    Head to the downloads page to pick up the + 2011.11-rc1 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2011.08 released

    +

    31 August 2011

    +
    +
    +

    The stable 2011.08 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, and go to the downloads page to pick up the + 2011.08 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2011.08-rc2 released

    +

    29 August 2011

    +
    +
    +

    RC2 is out with more bugfixes. See + the CHANGES + file for details, and read the + announcement. + +

    Head to the downloads page to pick up the + 2011.08-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2011.08-rc1 released

    +

    4 August 2011

    +
    +
    +

    We have a new release candidate! Lots of changes all over + the tree, see + the CHANGES + file for details, and read the + announcement. + +

    Head to the downloads page to pick up the + 2011.08-rc1 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2011.05 released

    +

    27 May 2011

    +
    +
    +

    The stable 2011.05 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, and go to the downloads page to pick up the + 2011.05 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2011.05-rc2 released

    +

    24 May 2011

    +
    +
    +

    RC2 is out with more bugfixes. See + the CHANGES + file for details. + +

    Head to the downloads page to pick up the + 2011.05-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2011.05-rc1 released

    +

    18 May 2011

    +
    +
    +

    We have a new release candidate! Lots of changes all over + the tree, see + the CHANGES + file for details, and read the + announcement. + +

    Head to the downloads page to pick up the + 2011.05-rc1 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2011.02 released

    +

    28 February 2011

    +
    +
    +

    The stable 2011.02 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2011.02 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2011.02-rc2 released

    +

    24 February 2011

    +
    +
    +

    RC2 is out with more cleanups and bugfixes, see + the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2011.02-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2011.02-rc1 released

    +

    14 February 2011

    +
    +
    +

    We have a new release candidate! Lots of changes all over + the tree, see + the CHANGES + file for details, and read the + announcement. + +

    Head to the downloads page to pick up the + 2011.02-rc1 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2010.11 released

    +

    30 November 2010

    +
    +
    +

    The stable 2010.11 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2010.11 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2010.11-rc2 released

    +

    25 November 2010

    +
    +
    +

    RC2 is out with more cleanups and bugfixes, see + the CHANGES + file for details.

    + +

    Head to the downloads page to pick up the + 2010.11-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2010.11-rc1 released

    +

    8 November 2010

    +
    +
    +

    We have a new release candidate! Lots of changes all over + the tree, see + the CHANGES + file for details, and read the + announcement. + +

    Head to the downloads page to pick up the + 2010.11-rc1 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    Buildroot Developer Day

    +

    28 September 2010

    +
    +
    +

    A Buildroot Developer Day will take place on + Friday, October 29th in Cambridge, UK - Just the day after the + Embedded + Linux Conference Europe. This Developer Day + aims at allowing Buildroot developers to meet and exchange + ideas on the project and its future. See the + announcement + for more info.

    + +

    Thanks to Thomas Petazzoni for taking care of the practical + arrangements.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2010.08 released

    +

    31 August 2010

    +
    +
    +

    The stable 2010.08 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2010.08 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2010.08-rc2 released

    +

    30 August 2010

    +
    +
    +

    RC2 is out with more cleanups and bugfixes, see + the CHANGES + file for details. + +

    Head to the downloads page to pick up the + 2010.08-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    + + This is very much expected to be the final release candidate, + so give it a good test and expect a final 2010.08 release + before September unless critical issues are found.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2010.08-rc1 released

    +

    30 July 2010

    +
    +
    +

    We have a new release candidate! Lots of changes all over + the tree, see + the CHANGES + file for details. + +

    Head to the downloads page to pick up the + 2010.08-rc1 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2010.05 released

    +

    30 May 2010

    +
    +
    +

    The stable 2010.05 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, read the + announcement + and go to the downloads page to pick up the + 2010.05 release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2010.05-rc3 released

    +

    27 May 2010

    +
    +
    +

    RC3 is out with more cleanups and bugfixes, see + the CHANGES + file for details. + +

    Head to the downloads page to pick up the + 2010.05-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2010.05-rc2 released

    +

    11 May 2010

    +
    +
    +

    Another week, another release candidate with a bunch of + cleanups and build fixes.

    + +

    Head to the downloads page to pick up the + 2010.05-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2010.05-rc1 released

    +

    3 May 2010

    +
    +
    +

    We have a new release candidate! Lots of changes all over + the tree, see + the CHANGES + file for details. + +

    Head to the downloads page to pick up the + 2010.05-rc1 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    FOSDEM slides online

    +

    2 May 2010

    +
    +
    +

    The slides from + the Cross + Build Systems: Present & Future session + at FOSDEM are + now online. +

    +
    +
  • + +
  • +
    +
    +
    +

    2010.02 released

    +

    26 February 2010

    +
    +
    +

    The stable 2010.02 release is out - Thanks to everyone + contributing and testing the release candidates. See the + CHANGES + file for more details, and go to + the downloads page to pick up + the 2010.02 + release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2010.02-rc2 released

    +

    23 February 2010

    +
    +
    +

    RC2 is out with more cleanups and bugfixes, see + the CHANGES + file for details. + +

    Head to the downloads page to pick up the + 2010.02-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2010.02-rc1 released

    +

    9 February 2010

    +
    +
    +

    We have a new release candidate! Lots of changes all over + the tree, see + the CHANGES + file for details. + +

    Head to the downloads page to pick up the + 2010.02-rc1 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2009.11 released

    +

    1 December 2009

    +
    +
    +

    The stable 2009.11 release is out - Thanks to everyone + contributing and testing the release candidates. See the + announcement + or CHANGES + for more details, and go to the downloads page + to pick up the 2009.11 + release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2009.11-rc2 released

    +

    29 November 2009

    +
    +
    +

    RC2 is out with more cleanups and bugfixes, see + the CHANGES + file for details. + +

    Head to the downloads page to pick up the + 2009.11-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2009.11-rc1 released

    +

    23 November 2009

    +
    +
    +

    We have a new release candidate! Lots of changes all over + the tree, see + the CHANGES + file for details. + +

    Head to the downloads page to pick up the + 2009.11-rc1 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    First Buildroot Developer Day

    +

    7 September 2009

    +
    +
    +

    The first Buildroot Developer Day will take place on + Saturday, October 17th in Grenoble, France, just the day after + Embedded Linux Conference Europe. This Developer Day aims + at allowing Buildroot developers to meet and exchange ideas on the + project and its future.

    + +

    As the number of places is limited, interested candidates are + invited to send an e-mail to Peter Korsgaard (jacmet at + uclibc dot org) and Thomas Petazzoni (thomas dot + petazzoni at free-electrons dot com).

    + +

    This Developer Day will take place thanks to the + sponsoring of Calao + Systems and Free + Electrons.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2009.08 released

    +

    31 August 2009

    +
    +
    +

    The stable 2009.08 release is out - Thanks to everyone + contributing and testing the release candidates. See the + announcement + or CHANGES + for more details, and go to the downloads page + to pick up the 2009.08 + release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2009.08-rc3 released

    +

    26 August 2009

    +
    +
    +

    A number of bugfixes have been added to the tree since RC2 + (especially thanks to Thomas Petazzoni) - See + the CHANGES + file for details. This is very much expected to be the final + release candidate, so give it a good test and expect a final + 2009.08 release next weekend unless critical issues are + found.

    + +

    Head to the downloads page to + pick up the + 2009.08-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2009.08-rc2 released

    +

    6 August 2009

    +
    +
    +

    RC2 is out with more cleanups and bugfixes, see + the CHANGES + file for details. + +

    Head to the downloads page to pick up the + 2009.08-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2009.08-rc1 released

    +

    2 August 2009

    +
    +
    +

    We have a new release candidate! Lots of changes all over + the tree, see + the CHANGES + file for details. + +

    Head to the downloads page to pick up the + 2009.08-rc1 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2009.05 released

    +

    1 June 2009

    +
    +
    +

    The stable 2009.05 release is out - Thanks to everyone + contributing and testing the release candidates. See the + announcement + or CHANGES + for more details, and go to the downloads page + to pick up the 2009.05 + release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2009.05-rc3 released

    +

    27 May 2009

    +
    +
    +

    We had a number of fixes post-RC2, so RC3 is out + (see CHANGES + for details). Now is the moment to test and verify that + everything is working for your favorite config - Expect a + final 2009.05 very soon.

    + +

    Head to the downloads page to pick up the + 2009.05-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2009.05-rc2 released

    +

    19 May 2009

    +
    +
    +

    RC2 is out with more cleanups and bug fixes + (see CHANGES). + Unless big issues are found, expect this to be the last + release candidate before the release - So give it a good + test.

    + +

    Head to the downloads page to pick up the + 2009.05-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    Buildroot.org

    +

    14 May 2009

    +
    +
    +

    Earl Levine has been so kind to donate + the buildroot.org domain to us, so the website can + now also be reached + at www.buildroot.org + (and git at + git.buildroot.org). + + Thanks a lot Earl!

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2009.05-rc1 released

    +

    5 May 2009

    +
    +
    +

    We have a new release candidate! Lots of changes all over the + tree, see the CHANGES + file for details. + +

    Head to the downloads page to pick up the + 2009.05-rc1 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    Moved to git

    +

    3 May 2009

    +
    +
    +

    We've moved the source code + from Subversion + to Git. You can browse the + repo online + here, and clone + the repo using: +

    git clone git://git.buildroot.net/buildroot
    + See the Git Access page for more details. +

    +
    +
    +
  • + +
  • +
    +
    +
    +

    +

    27 March 2009

    +

    +
    +

    We have a logo! We have so + far been using the Busybox + logo on the website, as the website was a copy of + the Busybox one - But not + anymore, we now have a shiny new logo of our own.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2009.02 released

    +

    12 February 2009

    +
    +
    +

    The stable 2009.02 release is out - Thanks to everyone + contributing and testing the release candidates. See the + announcement + for more details, and go to the downloads page + to pick up the 2009.02 + release.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2009.02-rc4 released

    +

    9 February 2009

    +
    +
    +

    We had more than 50 changes since RC3, several of them + toolchain related, so decided to make a RC4 as well. This is + very much expected to be the final release candidate, so + give it a good test and expect a final 2009.02 release this + week unless critical issues are found.

    + +

    Head to the downloads page to + pick up the + 2009.02-rc4 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2009.02-rc3 released

    +

    31 January 2009

    +
    +
    +

    RC3 is out with more cleanups and bug fixes. Unless big + issues are found, expect this to be the last release + candidate before the release - So give it a good test.

    + +

    Head to the downloads page to + pick up the + 2009.02-rc3 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    2009.02-rc2 released

    +

    23 January 2009

    +
    +
    +

    Another week, another release candidate with a bunch of + cleanups and build fixes.

    +

    Head to the downloads page to + pick up the + 2009.02-rc2 + release candidate, and report any problems found to + the mailing list + or bug tracker.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    Release candidate and new maintainer

    +

    16 January 2009

    +
    +
    + +

    It has been a long time coming, but we finally have a new + release candidate! - And a new maintainer to match (Peter + Korsgaard).

    + +

    Head to the downloads page to + pick up the + 2009.02-rc1 + release candidate, and report any problems found to + the mailing list + or bug tracker. The + plan is to release 2009.02 in time + for FOSDEM.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    Buildroot mailing list

    +

    16 July 2006

    +
    +
    +

    Buildroot now has its own mailing list.

    +
    +
    +
  • + +
  • +
    +
    +
    +

    Buildroot webpage added

    +

    21 February 2005

    + +

    Buildroot is a set of Makefiles and patches that makes it easy generate a + cross-compilation toolchain and root filesystem for your target Linux + system using the uClibc C library. + Buildroot is useful mainly for people working with small or embedded + systems. Embedded systems often use processors that are not the regular + x86 processors everyone is used to using on their PC. It can be PowerPC + processors, MIPS processors, ARM processors, etc. And to be extra safe, + you do not need to be root to build or run buildroot.

    + +

    And as of today buildroot even has its own webpage, making it a first class + citizen of uclibc.org and busybox.net, and more importantly, make it easy + to find and point to buildroot.

    + +

    If you find a bug in buildroot, or wish to submit a patch + to fix a problem or add a shiny new feature, please use + the Bug and Patch + Tracking System to post the details, to make certain + your work is not lost

    +
    +
    +
  • +
+ +
+
+
+ + + diff --git a/docs/website/robots.txt b/docs/website/robots.txt new file mode 100644 index 00000000..1b425ee0 --- /dev/null +++ b/docs/website/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: /cgi-bin/ diff --git a/docs/website/sponsors.html b/docs/website/sponsors.html new file mode 100644 index 00000000..2f3f6309 --- /dev/null +++ b/docs/website/sponsors.html @@ -0,0 +1,350 @@ + + +
+
+
+ +
+
Current sponsors
+
+ +
+
+
+
+
+ + + +
+
+ Tap2Open + financially sponsored the Buildroot Association + in 2020.
+
+
+
+ +
+
+
+
+ + + +
+
+ Logilin + financially sponsored the Buildroot Association + in 2020.
+
+
+
+
+
+
+ +
+
Sponsor of the Buildroot.org domain
+
+
+

The Buildroot community would like to thank + Zillabit for + donating the buildroot.org domain name and sponsoring + the registration fees 2009 - 2019.

+
+
+ + + +
+
+
+ +
+
Past sponsors
+
+

Throughout its history, the Buildroot project has been sponsored by + various companies, that we would like to thank below.

+ +
+
+
+
+
+ + + +
+
+ Smile provided the meeting location for the + ELCE 2019 + meeting and sponsored the Buildroot Summer Camp that took place on July 1-5 2016 + in Toulouse, France. Smile sponsored the participation of Romain Naour and paid + the food expenses for the meeting participants. + In 2018, Smile sponsored of LLVM/Clang integration into Buildroot, see the final + report. +
+
+
+
+ +
+
+
+
+ + + +
+
+ Mind sponsored + financially the Buildroot Association for the ELCE + 2018 meeting, sponsored the dinner of the FOSDEM 2014, + 2015, 2016, 2017 and 2018 Developers Meeting + (Brussels) and ELCE 2016 (Berlin) and 2017 (Prague), + and the meeting room and the dinner for the ELCE 2014 + Developers Meeting (Düsseldorf). +
+
+
+
+ +
+
+
+
+

+

+
+
+

Google provided + the logistics for the FOSDEM 2013, FOSDEM 2014, + FOSDEM 2015, FOSDEM 2016, FOSDEM 2017, FOSDEM 2018, + FOSDEM 2019 and FOSDEM 2020 Developer Days in Brussels, + Belgium.

+
+
+
+
+
+ +
+ +
+
+
+
+

+

+
+
+ Amarula + Solutions sponsored the event by contributing + financially to the Buildroot Association. +
+
+
+
+ +
+
+
+
+

+

+
+ +
+

Bootlin + sponsored financially the Buildroot Association for + the ELCE 2018 meeting, sponsored the meeting + location for the ELCE 2016 Developer Days in Berlin, + Germany, and the lunch for the ELCE 2009 Developer + Days in Grenoble, France.

+
+
+
+
+ +
+
+
+
+ + + +
+
+ Logilin sponsored + the ELCE 2018 Buildroot Developers meeting by + contributing financially to the Buildroot + Association. +
+
+
+
+ +
+ +
+ +
+
+
+
+ + + +
+
+ Tk Open Systems + sponsored the ELCE 2018 Buildroot Developers meeting + by contributing financially to the Buildroot + Association. +
+
+
+
+ +
+
+
+
+ + + +
+
+ Rockwell + Collins sponsored the ELCE 2018 Buildroot + Developers meeting by funding the social Saturday + dinner for the participants. +
+
+
+
+ +
+
+
+
+ + + +
+
+ Scaleway + sponsored the complete logistics to organize our Buildroot + Hackathon in Paris in March 2018: meeting room, Internet + connectivity and accommodation. +
+
+
+
+
+ +
+
+
+
+
+

+

+
+
+ Imagination Technologies + sponsored the meeting room and dinner of the ELCE 2013 + Developer Days in Edinburgh, UK. +
+
+
+
+ +
+
+
+
+

+

+
+
+

CircuitCo sponsored + several development boards for the Google Summer of Code + 2013 project on Buildroot.

+
+
+
+
+ +
+
+
+
+

+

+
+
+

BoundaryDevices + sponsored an i.MX6 development board for the Google Summer of + Code 2013 project on Buildroot.

+
+
+
+
+
+ +
+
+
+
+
+

+

+
+
+

Fluendo sponsored the + meeting room for the ELCE 2012 Developer Days in Barcelona + Spain.

+
+
+
+
+ +
+
+
+
+

+

+
+
+

Synopsys sponsored the + dinner for the ELCE 2012 Developer Days in Barcelona, Spain.

+
+
+
+
+ +
+
+
+
+

+

+
+
+

Calao Systems + provided a a meeting room for the ELCE 2009 Developer Days + in Grenoble, France.

+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/website/support.html b/docs/website/support.html new file mode 100644 index 00000000..eef969d4 --- /dev/null +++ b/docs/website/support.html @@ -0,0 +1,124 @@ + + +
+
+
+ +
+
Support
+
+

You can get support for Buildroot through three main channels:

+ +
+
+
+
IRC
+
+
+
+ +
+
+

The Buildroot IRC channel is + #buildroot, hosted on OFTC. If you do not have an IRC client, you can + use the OFTC web interface. + When asking for help on IRC, share relevant logs or pieces of code using a code + sharing website.

+ +

Note that due to excessive spamming on IRC, the channel can only be + joined if you are a registered user with + OFTC NickServ + service. Follow the instructions to register as a user with a password, + and then join the #buildroot channel.

+
+
+
+
+
+ +
+
+
Mailing List Information
+
+
+
+ +
+
+

The mailing list is for discussion and + development. You can subscribe by visiting + this page. + Only subscribers to the Buildroot mailing list are allowed to post + to this list.

+ +

Search the List Archives

+

Please search the mailing list archives before asking questions on the mailing + list, since there is a good chance someone else has asked the same question + before.

+ +
+ + + + + +
+
+
+
+
+
+ +
+
+
Bug Tracker
+
+
+
+ +
+
+

If you think you found a bug in Buildroot, you can use the + Bug Tracker to post your bugs and/or + participate to find solutions to existing problems.

+ +

Note: patches are only accepted through the mailing list.

+
+
+
+
+
+
+
+
+ +
+
Commercial support
+
+

In addition, the following companies are able to provide commercial + support. Only companies heavily involved in Buildroot maintenance and + community are listed here.

+ +
+
+
+ + + + + + + + + +
+
+
+
+
+ +
+
+
+ + diff --git a/fs/Config.in b/fs/Config.in new file mode 100644 index 00000000..37a2aa21 --- /dev/null +++ b/fs/Config.in @@ -0,0 +1,21 @@ +menu "Filesystem images" + +source "fs/axfs/Config.in" +source "fs/btrfs/Config.in" +source "fs/cloop/Config.in" +source "fs/cpio/Config.in" +source "fs/cramfs/Config.in" +source "fs/erofs/Config.in" +source "fs/ext2/Config.in" +source "fs/f2fs/Config.in" +source "fs/initramfs/Config.in" +source "fs/iso9660/Config.in" +source "fs/jffs2/Config.in" +source "fs/romfs/Config.in" +source "fs/squashfs/Config.in" +source "fs/tar/Config.in" +source "fs/ubi/Config.in" +source "fs/ubifs/Config.in" +source "fs/yaffs2/Config.in" + +endmenu diff --git a/fs/axfs/Config.in b/fs/axfs/Config.in new file mode 100644 index 00000000..8dfaffab --- /dev/null +++ b/fs/axfs/Config.in @@ -0,0 +1,17 @@ +config BR2_TARGET_ROOTFS_AXFS + bool "axfs root filesystem" + help + The Advanced XIP File System is a Linux kernel filesystem + driver that enables files to be executed directly from flash + or ROM memory rather than being copied into RAM. It has the + ability to store individual *pages* in a file + uncompressed/XIP or compressed/Demand Paged. + + So far, the only supported mode is 'XIP all', so all the + files that have the execute attribute set will be XIP'ed. + + At the moment, the FS is not supported in Linux mainline + (v4.3-rc5), so the kernel has to be built with the axfs + patches to be able to read it. Patches can be found at: + + https://github.com/jaredeh/axfs diff --git a/fs/axfs/axfs.mk b/fs/axfs/axfs.mk new file mode 100644 index 00000000..4b93df55 --- /dev/null +++ b/fs/axfs/axfs.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# Build the axfs root filesystem image +# +################################################################################ + +ROOTFS_AXFS_DEPENDENCIES = host-axfsutils + +define ROOTFS_AXFS_CMD + $(HOST_DIR)/bin/mkfs.axfs -s -a $(TARGET_DIR) $@ +endef + +$(eval $(rootfs)) diff --git a/fs/btrfs/Config.in b/fs/btrfs/Config.in new file mode 100644 index 00000000..85be68e7 --- /dev/null +++ b/fs/btrfs/Config.in @@ -0,0 +1,50 @@ +config BR2_TARGET_ROOTFS_BTRFS + bool "btrfs root filesystem" + select BR2_PACKAGE_HOST_BTRFS_PROGS + help + Build a btrfs root filesystem. If you enable this option, you + probably want to enable the btrfs-progs package too. + +if BR2_TARGET_ROOTFS_BTRFS + +config BR2_TARGET_ROOTFS_BTRFS_LABEL + string "filesystem label" + +config BR2_TARGET_ROOTFS_BTRFS_SIZE + string "filesystem size" + default "100m" + help + The size of the filesystem image in bytes. + Suffix with k, m, g or t for power-of-two kilo-, mega-, giga- + or terabytes. + +config BR2_TARGET_ROOTFS_BTRFS_SIZE_SECTOR + string "sector size" + default "4096" + help + This value should be set to the page size in bytes. The + default value of 4096 is the the most common page size for + most systems. If the sectorsize differs from the page size, + the created filesystem may not be mountable by the kernel. + Therefore it is recommended to leave this value at + 4096. Unless you know that your kernel uses a different page + size. Suffix with k for power-of-two kilobytes. + +config BR2_TARGET_ROOTFS_BTRFS_SIZE_NODE + string "btree node size" + default "16384" + help + The tree block size in which btrfs stores metadata in bytes. + This must be a multiple of the sectorsize, but not larger + than 64KiB (65536). + Suffix with k for power-of-two kilobytes. + +config BR2_TARGET_ROOTFS_BTRFS_FEATURES + string "Filesystem Features" + help + A comma separated string of features that can be enabled + during creation time. + For a list of available options, use: + `.../host/bin/mkfs.btrfs -O list-all` + +endif # BR2_TARGET_ROOTFS_BTRFS diff --git a/fs/btrfs/btrfs.mk b/fs/btrfs/btrfs.mk new file mode 100644 index 00000000..70e3ead9 --- /dev/null +++ b/fs/btrfs/btrfs.mk @@ -0,0 +1,36 @@ +################################################################################ +# +# Build the btrfs root filesystem image +# +################################################################################ + +BTRFS_SIZE = $(call qstrip,$(BR2_TARGET_ROOTFS_BTRFS_SIZE)) +ifeq ($(BR2_TARGET_ROOTFS_BTRFS)-$(BTRFS_SIZE),y-) +$(error BR2_TARGET_ROOTFS_BTRFS_SIZE cannot be empty) +endif + +BTRFS_SIZE_NODE = $(call qstrip,$(BR2_TARGET_ROOTFS_BTRFS_SIZE_NODE)) +BTRFS_SIZE_SECTOR = $(call qstrip,$(BR2_TARGET_ROOTFS_BTRFS_SIZE_SECTOR)) +BTRFS_FEATURES = $(call qstrip,$(BR2_TARGET_ROOTFS_BTRFS_FEATURES)) +# qstrip results in stripping consecutive spaces into a single one. So the +# variable is not qstrip-ed to preserve the integrity of the string value. +BTRFS_LABEL = $(subst ",,$(BR2_TARGET_ROOTFS_BTRFS_LABEL)) +# ") + +BTRFS_OPTS = \ + -f \ + -r '$(TARGET_DIR)' \ + -L '$(BTRFS_LABEL)' \ + --byte-count '$(BTRFS_SIZE)' \ + $(if $(BTRFS_SIZE_NODE),--nodesize '$(BTRFS_SIZE_NODE)') \ + $(if $(BTRFS_SIZE_SECTOR),--sectorsize '$(BTRFS_SIZE_SECTOR)') \ + $(if $(BTRFS_FEATURES),--features '$(BTRFS_FEATURES)') + +ROOTFS_BTRFS_DEPENDENCIES = host-btrfs-progs + +define ROOTFS_BTRFS_CMD + $(RM) -f $@ + $(HOST_DIR)/bin/mkfs.btrfs $(BTRFS_OPTS) $@ +endef + +$(eval $(rootfs)) diff --git a/fs/cloop/Config.in b/fs/cloop/Config.in new file mode 100644 index 00000000..3e01067a --- /dev/null +++ b/fs/cloop/Config.in @@ -0,0 +1,10 @@ +config BR2_TARGET_ROOTFS_CLOOP + bool "cloop root filesystem for the target device" + help + Build a cloop root filesystem + + cloop is a Linux kernel module that enables compressed + loopback filesystem support. With it you can mount a + compressed filesystem like a block device and seamlessly + decompress its data while accessing it. The majority of the + software on an LNX-BBC is accessed in this fashion. diff --git a/fs/cloop/cloop.mk b/fs/cloop/cloop.mk new file mode 100644 index 00000000..17749c5a --- /dev/null +++ b/fs/cloop/cloop.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# Build the compressed loop root filesystem image +# +################################################################################ + +ROOTFS_CLOOP_DEPENDENCIES = host-cloop host-cdrkit + +define ROOTFS_CLOOP_CMD + $(HOST_DIR)/bin/genisoimage -r $(TARGET_DIR) | \ + $(HOST_DIR)/bin/create_compressed_fs - 65536 > $@ +endef + +$(eval $(rootfs)) diff --git a/fs/common.mk b/fs/common.mk new file mode 100644 index 00000000..afab7b50 --- /dev/null +++ b/fs/common.mk @@ -0,0 +1,227 @@ +# +# Macro that builds the needed Makefile target to create a root +# filesystem image. +# +# The following variable must be defined before calling this macro +# +# ROOTFS_$(FSTYPE)_CMD, the command that generates the root +# filesystem image. A single command is allowed. The filename of the +# filesystem image that it must generate is $$@. +# +# The following variables can optionaly be defined +# +# ROOTFS_$(FSTYPE)_DEPENDENCIES, the list of dependencies needed to +# build the root filesystem (usually host tools) +# +# ROOTFS_$(FSTYPE)_PRE_GEN_HOOKS, a list of hooks to call before +# generating the filesystem image +# +# ROOTFS_$(FSTYPE)_POST_GEN_HOOKS, a list of hooks to call after +# generating the filesystem image +# +# In terms of configuration option, this macro assumes that the +# BR2_TARGET_ROOTFS_$(FSTYPE) config option allows to enable/disable +# the generation of a filesystem image of a particular type. If +# the configuration options BR2_TARGET_ROOTFS_$(FSTYPE)_GZIP, +# BR2_TARGET_ROOTFS_$(FSTYPE)_BZIP2 or +# BR2_TARGET_ROOTFS_$(FSTYPE)_LZMA exist and are enabled, then the +# macro will automatically generate a compressed filesystem image. + +FS_DIR = $(BUILD_DIR)/buildroot-fs +ROOTFS_DEVICE_TABLES = $(call qstrip,$(BR2_ROOTFS_DEVICE_TABLE) \ + $(BR2_ROOTFS_STATIC_DEVICE_TABLE)) + +ROOTFS_USERS_TABLES = $(call qstrip,$(BR2_ROOTFS_USERS_TABLES)) + +ROOTFS_FULL_DEVICES_TABLE = $(FS_DIR)/full_devices_table.txt +ROOTFS_FULL_USERS_TABLE = $(FS_DIR)/full_users_table.txt + +ROOTFS_COMMON_NAME = rootfs-common +ROOTFS_COMMON_TYPE = rootfs +ROOTFS_COMMON_DEPENDENCIES = \ + host-fakeroot host-makedevs \ + $(BR2_TAR_HOST_DEPENDENCY) \ + $(if $(PACKAGES_USERS)$(ROOTFS_USERS_TABLES),host-mkpasswd) + +ifeq ($(BR2_REPRODUCIBLE),y) +define ROOTFS_REPRODUCIBLE + find $(TARGET_DIR) -print0 | xargs -0 -r touch -hd @$(SOURCE_DATE_EPOCH) +endef +endif + +ifeq ($(BR2_PACKAGE_REFPOLICY),y) +define ROOTFS_SELINUX + $(HOST_DIR)/sbin/setfiles -m -r $(TARGET_DIR) \ + -c $(TARGET_DIR)/etc/selinux/targeted/policy/policy.$(BR2_PACKAGE_LIBSEPOL_POLICY_VERSION) \ + $(TARGET_DIR)/etc/selinux/targeted/contexts/files/file_contexts \ + $(TARGET_DIR) +endef +ROOTFS_COMMON_DEPENDENCIES += host-policycoreutils +endif + +ROOTFS_COMMON_FINAL_RECURSIVE_DEPENDENCIES = $(sort \ + $(if $(filter undefined,$(origin ROOTFS_COMMON_FINAL_RECURSIVE_DEPENDENCIES__X)), \ + $(eval ROOTFS_COMMON_FINAL_RECURSIVE_DEPENDENCIES__X := \ + $(foreach p, \ + $(ROOTFS_COMMON_DEPENDENCIES), \ + $(p) \ + $($(call UPPERCASE,$(p))_FINAL_RECURSIVE_DEPENDENCIES) \ + ) \ + ) \ + ) \ + $(ROOTFS_COMMON_FINAL_RECURSIVE_DEPENDENCIES__X)) + +.PHONY: rootfs-common +rootfs-common: $(ROOTFS_COMMON_DEPENDENCIES) target-finalize + @$(call MESSAGE,"Generating root filesystems common tables") + rm -rf $(FS_DIR) + mkdir -p $(FS_DIR) + + $(call PRINTF,$(PACKAGES_USERS)) >> $(ROOTFS_FULL_USERS_TABLE) +ifneq ($(ROOTFS_USERS_TABLES),) + cat $(ROOTFS_USERS_TABLES) >> $(ROOTFS_FULL_USERS_TABLE) +endif + + $(call PRINTF,$(PACKAGES_PERMISSIONS_TABLE)) > $(ROOTFS_FULL_DEVICES_TABLE) +ifneq ($(ROOTFS_DEVICE_TABLES),) + cat $(ROOTFS_DEVICE_TABLES) >> $(ROOTFS_FULL_DEVICES_TABLE) +endif +ifeq ($(BR2_ROOTFS_DEVICE_CREATION_STATIC),y) + $(call PRINTF,$(PACKAGES_DEVICES_TABLE)) >> $(ROOTFS_FULL_DEVICES_TABLE) +endif + +rootfs-common-show-depends: + @echo $(ROOTFS_COMMON_DEPENDENCIES) + +.PHONY: rootfs-common-show-info +rootfs-common-show-info: + @: + $(info $(call clean-json,{ $(call json-info,ROOTFS_COMMON) })) + +# Since this function will be called from within an $(eval ...) +# all variable references except the arguments must be $$-quoted. +define inner-rootfs + +ROOTFS_$(2)_NAME = rootfs-$(1) +ROOTFS_$(2)_TYPE = rootfs +ROOTFS_$(2)_IMAGE_NAME ?= rootfs.$(1) +ROOTFS_$(2)_FINAL_IMAGE_NAME = $$(strip $$(ROOTFS_$(2)_IMAGE_NAME)) +ROOTFS_$(2)_DIR = $$(FS_DIR)/$(1) +ROOTFS_$(2)_TARGET_DIR = $$(ROOTFS_$(2)_DIR)/target + +ROOTFS_$(2)_DEPENDENCIES += rootfs-common + +ROOTFS_$(2)_FINAL_RECURSIVE_DEPENDENCIES = $$(sort \ + $$(if $$(filter undefined,$$(origin ROOTFS_$(2)_FINAL_RECURSIVE_DEPENDENCIES__X)), \ + $$(eval ROOTFS_$(2)_FINAL_RECURSIVE_DEPENDENCIES__X := \ + $$(foreach p, \ + $$(ROOTFS_$(2)_DEPENDENCIES), \ + $$(p) \ + $$($$(call UPPERCASE,$$(p))_FINAL_RECURSIVE_DEPENDENCIES) \ + ) \ + ) \ + ) \ + $$(ROOTFS_$(2)_FINAL_RECURSIVE_DEPENDENCIES__X)) + +ifeq ($$(BR2_TARGET_ROOTFS_$(2)_GZIP),y) +ROOTFS_$(2)_COMPRESS_EXT = .gz +ROOTFS_$(2)_COMPRESS_CMD = gzip -9 -c -n +endif +ifeq ($$(BR2_TARGET_ROOTFS_$(2)_BZIP2),y) +ROOTFS_$(2)_COMPRESS_EXT = .bz2 +ROOTFS_$(2)_COMPRESS_CMD = bzip2 -9 -c +endif +ifeq ($$(BR2_TARGET_ROOTFS_$(2)_LZMA),y) +ROOTFS_$(2)_DEPENDENCIES += host-lzma +ROOTFS_$(2)_COMPRESS_EXT = .lzma +ROOTFS_$(2)_COMPRESS_CMD = $$(LZMA) -9 -c +endif +ifeq ($$(BR2_TARGET_ROOTFS_$(2)_LZ4),y) +ROOTFS_$(2)_DEPENDENCIES += host-lz4 +ROOTFS_$(2)_COMPRESS_EXT = .lz4 +ROOTFS_$(2)_COMPRESS_CMD = lz4 -l -9 -c +endif +ifeq ($$(BR2_TARGET_ROOTFS_$(2)_LZO),y) +ROOTFS_$(2)_DEPENDENCIES += host-lzop +ROOTFS_$(2)_COMPRESS_EXT = .lzo +ROOTFS_$(2)_COMPRESS_CMD = $$(LZOP) -9 -c +endif +ifeq ($$(BR2_TARGET_ROOTFS_$(2)_XZ),y) +ROOTFS_$(2)_DEPENDENCIES += host-xz +ROOTFS_$(2)_COMPRESS_EXT = .xz +ROOTFS_$(2)_COMPRESS_CMD = xz -9 -C crc32 -c +ifeq ($(BR2_REPRODUCIBLE),) +ROOTFS_$(2)_COMPRESS_CMD += -T $(PARALLEL_JOBS) +endif +endif +ifeq ($(BR2_TARGET_ROOTFS_$(2)_ZSTD),y) +ROOTFS_$(2)_DEPENDENCIES += host-zstd +ROOTFS_$(2)_COMPRESS_EXT = .zst +ROOTFS_$(2)_COMPRESS_CMD = zstd -19 -z -f -T$(PARALLEL_JOBS) +endif + +$$(BINARIES_DIR)/$$(ROOTFS_$(2)_FINAL_IMAGE_NAME): ROOTFS=$(2) +$$(BINARIES_DIR)/$$(ROOTFS_$(2)_FINAL_IMAGE_NAME): FAKEROOT_SCRIPT=$$(ROOTFS_$(2)_DIR)/fakeroot +$$(BINARIES_DIR)/$$(ROOTFS_$(2)_FINAL_IMAGE_NAME): $$(ROOTFS_$(2)_DEPENDENCIES) + @$$(call MESSAGE,"Generating filesystem image $$(ROOTFS_$(2)_FINAL_IMAGE_NAME)") + mkdir -p $$(@D) + rm -rf $$(ROOTFS_$(2)_DIR) + mkdir -p $$(ROOTFS_$(2)_DIR) + rsync -auH \ + --exclude=/$$(notdir $$(TARGET_DIR_WARNING_FILE)) \ + $$(BASE_TARGET_DIR)/ \ + $$(TARGET_DIR) + + echo '#!/bin/sh' > $$(FAKEROOT_SCRIPT) + echo "set -e" >> $$(FAKEROOT_SCRIPT) + + echo "chown -h -R 0:0 $$(TARGET_DIR)" >> $$(FAKEROOT_SCRIPT) + PATH=$$(BR_PATH) $$(TOPDIR)/support/scripts/mkusers $$(ROOTFS_FULL_USERS_TABLE) $$(TARGET_DIR) >> $$(FAKEROOT_SCRIPT) + echo "$$(HOST_DIR)/bin/makedevs -d $$(ROOTFS_FULL_DEVICES_TABLE) $$(TARGET_DIR)" >> $$(FAKEROOT_SCRIPT) + $$(foreach hook,$$(ROOTFS_PRE_CMD_HOOKS),\ + $$(call PRINTF,$$($$(hook))) >> $$(FAKEROOT_SCRIPT)$$(sep)) + $$(foreach s,$$(call qstrip,$$(BR2_ROOTFS_POST_FAKEROOT_SCRIPT)),\ + echo "echo '$$(TERM_BOLD)>>> Executing fakeroot script $$(s)$$(TERM_RESET)'" >> $$(FAKEROOT_SCRIPT); \ + echo $$(EXTRA_ENV) $$(s) $$(TARGET_DIR) $$(BR2_ROOTFS_POST_SCRIPT_ARGS) >> $$(FAKEROOT_SCRIPT)$$(sep)) + + $$(foreach hook,$$(ROOTFS_$(2)_PRE_GEN_HOOKS),\ + $$(call PRINTF,$$($$(hook))) >> $$(FAKEROOT_SCRIPT)$$(sep)) + $$(call PRINTF,$$(ROOTFS_REPRODUCIBLE)) >> $$(FAKEROOT_SCRIPT) + $$(call PRINTF,$$(ROOTFS_SELINUX)) >> $$(FAKEROOT_SCRIPT) + $$(call PRINTF,$$(ROOTFS_$(2)_CMD)) >> $$(FAKEROOT_SCRIPT) + chmod a+x $$(FAKEROOT_SCRIPT) + PATH=$$(BR_PATH) FAKEROOTDONTTRYCHOWN=1 $$(HOST_DIR)/bin/fakeroot -- $$(FAKEROOT_SCRIPT) + $(Q)rm -rf $$(TARGET_DIR) +ifneq ($$(ROOTFS_$(2)_COMPRESS_CMD),) + PATH=$$(BR_PATH) $$(ROOTFS_$(2)_COMPRESS_CMD) $$@ > $$@$$(ROOTFS_$(2)_COMPRESS_EXT) +endif + $$(foreach hook,$$(ROOTFS_$(2)_POST_GEN_HOOKS),$$(call $$(hook))$$(sep)) + +rootfs-$(1)-show-depends: + @echo $$(ROOTFS_$(2)_DEPENDENCIES) + +rootfs-$(1)-show-info: + @: + $$(info $$(call clean-json,{ $$(call json-info,ROOTFS_$(2)) })) + +rootfs-$(1): $$(BINARIES_DIR)/$$(ROOTFS_$(2)_FINAL_IMAGE_NAME) + +.PHONY: rootfs-$(1) rootfs-$(1)-show-depends rootfs-$(1)-show-info + +ifeq ($$(BR2_TARGET_ROOTFS_$(2)),y) +TARGETS_ROOTFS += rootfs-$(1) +PACKAGES += $$(filter-out rootfs-%,$$(ROOTFS_$(2)_FINAL_RECURSIVE_DEPENDENCIES)) +endif + +# Check for legacy POST_TARGETS rules +ifneq ($$(ROOTFS_$(2)_POST_TARGETS),) +$$(error Filesystem $(1) uses post-target rules, which are no longer supported.\ + Update $(1) to use post-gen hooks instead) +endif + +endef + +# $(pkgname) also works well to return the filesystem name +rootfs = $(call inner-rootfs,$(pkgname),$(call UPPERCASE,$(pkgname))) + +include $(sort $(wildcard fs/*/*.mk)) diff --git a/fs/cpio/Config.in b/fs/cpio/Config.in new file mode 100644 index 00000000..c1151a28 --- /dev/null +++ b/fs/cpio/Config.in @@ -0,0 +1,70 @@ +config BR2_TARGET_ROOTFS_CPIO + bool "cpio the root filesystem (for use as an initial RAM filesystem)" + help + Build a cpio archive of the root filesystem. This is typically + used for an initial RAM filesystem that is passed to the + kernel by the bootloader. + +if BR2_TARGET_ROOTFS_CPIO + +choice + prompt "Compression method" + default BR2_TARGET_ROOTFS_CPIO_NONE + help + Select compressor for cpio filesystem of the root filesystem. + If you use the cpio archive as an initial RAM filesystem, make + sure the kernel contains the decompression algorithm selected + here. + +config BR2_TARGET_ROOTFS_CPIO_NONE + bool "no compression" + help + Do not compress the cpio filesystem. + +config BR2_TARGET_ROOTFS_CPIO_GZIP + bool "gzip" + help + Do compress the cpio filesystem with gzip. + +config BR2_TARGET_ROOTFS_CPIO_BZIP2 + bool "bzip2" + help + Do compress the cpio filesystem with bzip2. + +config BR2_TARGET_ROOTFS_CPIO_LZ4 + bool "lz4" + help + Do compress the cpio filesystem with lz4. + +config BR2_TARGET_ROOTFS_CPIO_LZMA + bool "lzma" + help + Do compress the cpio filesystem with lzma. + +config BR2_TARGET_ROOTFS_CPIO_LZO + bool "lzo" + help + Do compress the cpio filesystem with lzop. + +config BR2_TARGET_ROOTFS_CPIO_XZ + bool "xz" + help + Do compress the cpio filesystem with xz. + +config BR2_TARGET_ROOTFS_CPIO_ZSTD + bool "zstd" + help + Do compress the cpio filesystem with zstd. + +endchoice + +config BR2_TARGET_ROOTFS_CPIO_UIMAGE + bool "Create U-Boot image of the root filesystem" + select BR2_PACKAGE_HOST_UBOOT_TOOLS + help + Add a U-Boot header to the cpio root filesystem. This allows + the initramfs to be loaded with the bootm command in U-Boot. + + The U-Boot image will be called rootfs.cpio.uboot + +endif # BR2_TARGET_ROOTFS_CPIO diff --git a/fs/cpio/cpio.mk b/fs/cpio/cpio.mk new file mode 100644 index 00000000..81f8c393 --- /dev/null +++ b/fs/cpio/cpio.mk @@ -0,0 +1,56 @@ +################################################################################ +# +# cpio to archive target filesystem +# +################################################################################ + +ifeq ($(BR2_ROOTFS_DEVICE_CREATION_STATIC),y) + +define ROOTFS_CPIO_ADD_INIT + if [ ! -e $(TARGET_DIR)/init ]; then \ + ln -sf sbin/init $(TARGET_DIR)/init; \ + fi +endef + +else +# devtmpfs does not get automounted when initramfs is used. +# Add a pre-init script to mount it before running init +# We must have /dev/console very early, even before /init runs, +# for stdin/stdout/stderr +define ROOTFS_CPIO_ADD_INIT + if [ ! -e $(TARGET_DIR)/init ]; then \ + $(INSTALL) -m 0755 fs/cpio/init $(TARGET_DIR)/init; \ + fi + mkdir -p $(TARGET_DIR)/dev + mknod -m 0622 $(TARGET_DIR)/dev/console c 5 1 +endef + +endif # BR2_ROOTFS_DEVICE_CREATION_STATIC + +ROOTFS_CPIO_PRE_GEN_HOOKS += ROOTFS_CPIO_ADD_INIT + +# --reproducible option was introduced in cpio v2.12, which may not be +# available in some old distributions, so we build host-cpio +ifeq ($(BR2_REPRODUCIBLE),y) +ROOTFS_CPIO_DEPENDENCIES += host-cpio +ROOTFS_CPIO_OPTS += --reproducible +endif + +define ROOTFS_CPIO_CMD + cd $(TARGET_DIR) && \ + find . \ + | LC_ALL=C sort \ + | cpio $(ROOTFS_CPIO_OPTS) --quiet -o -H newc \ + > $@ +endef + +ifeq ($(BR2_TARGET_ROOTFS_CPIO_UIMAGE),y) +ROOTFS_CPIO_DEPENDENCIES += host-uboot-tools +define ROOTFS_CPIO_UBOOT_MKIMAGE + $(MKIMAGE) -A $(MKIMAGE_ARCH) -T ramdisk \ + -C none -d $@$(ROOTFS_CPIO_COMPRESS_EXT) $@.uboot +endef +ROOTFS_CPIO_POST_GEN_HOOKS += ROOTFS_CPIO_UBOOT_MKIMAGE +endif + +$(eval $(rootfs)) diff --git a/fs/cpio/init b/fs/cpio/init new file mode 100755 index 00000000..f74ef7e1 --- /dev/null +++ b/fs/cpio/init @@ -0,0 +1,15 @@ +#!/bin/sh +# devtmpfs does not get automounted for initramfs +/bin/mount -t devtmpfs devtmpfs /dev + +# use the /dev/console device node from devtmpfs if possible to not +# confuse glibc's ttyname_r(). +# This may fail (E.G. booted with console=), and errors from exec will +# terminate the shell, so use a subshell for the test +if (exec 0/dev/null; then + exec 0/dev/console + exec 2>/dev/console +fi + +exec /sbin/init "$@" diff --git a/fs/cramfs/Config.in b/fs/cramfs/Config.in new file mode 100644 index 00000000..89f8ad52 --- /dev/null +++ b/fs/cramfs/Config.in @@ -0,0 +1,26 @@ +config BR2_TARGET_ROOTFS_CRAMFS + bool "cramfs root filesystem" + help + Build a cramfs root filesystem + + https://github.com/npitre/cramfs-tools + +if BR2_TARGET_ROOTFS_CRAMFS + +config BR2_TARGET_ROOTFS_CRAMFS_XIP + bool "Support XIP of all ELF files" + help + For ELF files, uncompressed and properly aligned data blocks + will be automatically be mapped directly into user space + whenever possible providing eXecute-In-Place (XIP) from ROM + of read-only segments. Data segments mapped read-write + (hence they have to be copied to RAM) may still be + compressed in the cramfs image in the same file along with + non compressed read-only segments. Both MMU and no-MMU + systems are supported. This is particularly handy for tiny + embedded systems with very tight memory constraints. + + The CRAMFS_MTD Kconfig option must also be enabled in a + 4.15+ kernel. + +endif # BR2_TARGET_ROOTFS_CRAMFS diff --git a/fs/cramfs/cramfs.mk b/fs/cramfs/cramfs.mk new file mode 100644 index 00000000..92506388 --- /dev/null +++ b/fs/cramfs/cramfs.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# Build the cramfs root filesystem image +# +################################################################################ + +ifeq ($(BR2_ENDIAN),"BIG") +CRAMFS_OPTS = -B +else +CRAMFS_OPTS = -L +endif + +ifeq ($(BR2_TARGET_ROOTFS_CRAMFS_XIP),y) +ifeq ($(BR2_USE_MMU),y) +CRAMFS_OPTS += -X -X +else +CRAMFS_OPTS += -X +endif +endif + +define ROOTFS_CRAMFS_CMD + $(HOST_DIR)/bin/mkcramfs $(CRAMFS_OPTS) $(TARGET_DIR) $@ +endef + +ROOTFS_CRAMFS_DEPENDENCIES = host-cramfs + +$(eval $(rootfs)) diff --git a/fs/erofs/Config.in b/fs/erofs/Config.in new file mode 100644 index 00000000..d7360ede --- /dev/null +++ b/fs/erofs/Config.in @@ -0,0 +1,14 @@ +config BR2_TARGET_ROOTFS_EROFS + bool "erofs root filesystem" + select BR2_PACKAGE_HOST_EROFS_UTILS + help + Build a EROFS root filesystem. + +if BR2_TARGET_ROOTFS_EROFS + +config BR2_TARGET_ROOTFS_EROFS_LZ4HC + bool "lz4hc compression" + help + Use lz4 high-compression to compress data in the filesystem. + +endif # BR2_TARGET_ROOTFS_EROFS diff --git a/fs/erofs/erofs.mk b/fs/erofs/erofs.mk new file mode 100644 index 00000000..58559d48 --- /dev/null +++ b/fs/erofs/erofs.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# Build the EROFS root filesystem image +# +################################################################################ + +ROOTFS_EROFS_DEPENDENCIES = host-erofs-utils + +ifeq ($(BR2_TARGET_ROOTFS_EROFS_LZ4HC),y) +ROOTFS_EROFS_ARGS += -zlz4hc +endif + +define ROOTFS_EROFS_CMD + $(HOST_DIR)/bin/mkfs.erofs $(ROOTFS_EROFS_ARGS) $@ $(TARGET_DIR) +endef + +$(eval $(rootfs)) diff --git a/fs/ext2/Config.in b/fs/ext2/Config.in new file mode 100644 index 00000000..333ead95 --- /dev/null +++ b/fs/ext2/Config.in @@ -0,0 +1,136 @@ +config BR2_TARGET_ROOTFS_EXT2 + bool "ext2/3/4 root filesystem" + select BR2_PACKAGE_HOST_E2FSPROGS + help + Build an ext2/3/4 root filesystem + +if BR2_TARGET_ROOTFS_EXT2 + +config BR2_TARGET_ROOTFS_EXT2_2 + bool + +choice + bool "ext2/3/4 variant" + default BR2_TARGET_ROOTFS_EXT2_2r1 + +config BR2_TARGET_ROOTFS_EXT2_2r0 + bool "ext2 (rev0)" + select BR2_TARGET_ROOTFS_EXT2_2 + +config BR2_TARGET_ROOTFS_EXT2_2r1 + bool "ext2 (rev1)" + select BR2_TARGET_ROOTFS_EXT2_2 + +config BR2_TARGET_ROOTFS_EXT2_3 + bool "ext3" + +config BR2_TARGET_ROOTFS_EXT2_4 + bool "ext4" + +endchoice + +config BR2_TARGET_ROOTFS_EXT2_GEN + int + default 2 if BR2_TARGET_ROOTFS_EXT2_2 + default 3 if BR2_TARGET_ROOTFS_EXT2_3 + default 4 if BR2_TARGET_ROOTFS_EXT2_4 + +# All ext generations are revision 1, except ext2r0, which is revision 0 +config BR2_TARGET_ROOTFS_EXT2_REV + int + default 0 if BR2_TARGET_ROOTFS_EXT2_2r0 + default 1 if !BR2_TARGET_ROOTFS_EXT2_2r0 + +config BR2_TARGET_ROOTFS_EXT2_LABEL + string "filesystem label" + default "rootfs" + +config BR2_TARGET_ROOTFS_EXT2_SIZE + string "exact size" + default BR2_TARGET_ROOTFS_EXT2_BLOCKS if BR2_TARGET_ROOTFS_EXT2_BLOCKS_WRAP # legacy 2017.08 + default "60M" + help + The size of the filesystem image. If it does not have a + suffix, it is interpreted as power-of-two kilobytes. If it is + suffixed by 'k', 'm', 'g', 't' (either upper-case or + lower-case), then it is interpreted in power-of-two kilobytes, + megabytes, gigabytes, terabytes, etc. + +config BR2_TARGET_ROOTFS_EXT2_INODES + int "exact number of inodes (leave at 0 for auto calculation)" + default 0 + +config BR2_TARGET_ROOTFS_EXT2_RESBLKS + int "reserved blocks percentage" + default 5 + help + The number of blocks on the filesystem (as a percentage of the + total number of blocks), that are reserved for use by root. + Traditionally, this has been 5%, and all ext-related tools + still default to reserving 5% when creating a new ext + filesystem. + +config BR2_TARGET_ROOTFS_EXT2_MKFS_OPTIONS + string "additional mke2fs options" + default "-O ^64bit" + help + Specify a space-separated list of mke2fs options, including + any ext2/3/4 filesystem features. + + For more information about the mke2fs options, see the manual + page mke2fs(8). + + For more information about the ext2/3/4 features which can be + set, see the manual page ext4(5). + + The default is "-O ^64bit", i.e. disable 64-bit filesystem + support. This default value has been chosen because U-Boot + versions before 2017.02 don't support this filesystem + option: using it may make the filesystem unreadable by + U-Boot. + +choice + prompt "Compression method" + default BR2_TARGET_ROOTFS_EXT2_NONE + help + Select compressor for ext2/3/4 filesystem of the root + filesystem + +config BR2_TARGET_ROOTFS_EXT2_NONE + bool "no compression" + help + Do not compress the ext2/3/4 filesystem. + +config BR2_TARGET_ROOTFS_EXT2_GZIP + bool "gzip" + help + Do compress the ext2/3/4 filesystem with gzip. + +config BR2_TARGET_ROOTFS_EXT2_BZIP2 + bool "bzip2" + help + Do compress the ext2/3/4 filesystem with bzip2. + +config BR2_TARGET_ROOTFS_EXT2_LZ4 + bool "lz4" + help + Do compress the ext2 filesystem with lz4. + +config BR2_TARGET_ROOTFS_EXT2_LZMA + bool "lzma" + help + Do compress the ext2/3/4 filesystem with lzma. + +config BR2_TARGET_ROOTFS_EXT2_LZO + bool "lzo" + help + Do compress the ext2 filesystem with lzop. + +config BR2_TARGET_ROOTFS_EXT2_XZ + bool "xz" + help + Do compress the ext2 filesystem with xz. + +endchoice + +endif # BR2_TARGET_ROOTFS_EXT2 diff --git a/fs/ext2/ext2.mk b/fs/ext2/ext2.mk new file mode 100644 index 00000000..74c99bd7 --- /dev/null +++ b/fs/ext2/ext2.mk @@ -0,0 +1,46 @@ +################################################################################ +# +# Build the ext2 root filesystem image +# +################################################################################ + +EXT2_SIZE = $(call qstrip,$(BR2_TARGET_ROOTFS_EXT2_SIZE)) +ifeq ($(BR2_TARGET_ROOTFS_EXT2)-$(EXT2_SIZE),y-) +$(error BR2_TARGET_ROOTFS_EXT2_SIZE cannot be empty) +endif + +EXT2_MKFS_OPTS = $(call qstrip,$(BR2_TARGET_ROOTFS_EXT2_MKFS_OPTIONS)) + +# qstrip results in stripping consecutive spaces into a single one. So the +# variable is not qstrip-ed to preserve the integrity of the string value. +EXT2_LABEL = $(subst ",,$(BR2_TARGET_ROOTFS_EXT2_LABEL)) +#" Syntax highlighting... :-/ ) + +EXT2_OPTS = \ + -d $(TARGET_DIR) \ + -r $(BR2_TARGET_ROOTFS_EXT2_REV) \ + -N $(BR2_TARGET_ROOTFS_EXT2_INODES) \ + -m $(BR2_TARGET_ROOTFS_EXT2_RESBLKS) \ + -L "$(EXT2_LABEL)" \ + $(EXT2_MKFS_OPTS) + +ROOTFS_EXT2_DEPENDENCIES = host-e2fsprogs + +define ROOTFS_EXT2_CMD + rm -f $@ + $(HOST_DIR)/sbin/mkfs.ext$(BR2_TARGET_ROOTFS_EXT2_GEN) $(EXT2_OPTS) $@ \ + "$(EXT2_SIZE)" \ + || { ret=$$?; \ + echo "*** Maybe you need to increase the filesystem size (BR2_TARGET_ROOTFS_EXT2_SIZE)" 1>&2; \ + exit $$ret; \ + } +endef + +ifneq ($(BR2_TARGET_ROOTFS_EXT2_GEN),2) +define ROOTFS_EXT2_SYMLINK + ln -sf rootfs.ext2$(ROOTFS_EXT2_COMPRESS_EXT) $(BINARIES_DIR)/rootfs.ext$(BR2_TARGET_ROOTFS_EXT2_GEN)$(ROOTFS_EXT2_COMPRESS_EXT) +endef +ROOTFS_EXT2_POST_GEN_HOOKS += ROOTFS_EXT2_SYMLINK +endif + +$(eval $(rootfs)) diff --git a/fs/f2fs/Config.in b/fs/f2fs/Config.in new file mode 100644 index 00000000..20d70fbf --- /dev/null +++ b/fs/f2fs/Config.in @@ -0,0 +1,59 @@ +config BR2_TARGET_ROOTFS_F2FS + bool "f2fs root filesystem" + select BR2_PACKAGE_HOST_F2FS_TOOLS + help + Build a f2fs root filesystem. If you enable this option, you + probably want to enable the f2fs-tools package too. + +if BR2_TARGET_ROOTFS_F2FS + +config BR2_TARGET_ROOTFS_F2FS_LABEL + string "filesystem label" + +config BR2_TARGET_ROOTFS_F2FS_SIZE + string "filesystem size" + default "100M" + help + The size of the filesystem image in bytes. + Suffix with K, M, G or T for power-of-two kilo-, mega-, giga- + or terabytes. + +config BR2_TARGET_ROOTFS_F2FS_COLD_FILES + string "extension list for cold files" + help + Specify a comma separated file extension list in order f2fs + to treat them as cold files. The default list includes most + of multimedia file extensions such as jpg, gif, mpeg, mkv, + and so on. + +config BR2_TARGET_ROOTFS_F2FS_HOT_FILES + string "extension list for hot files" + help + Specify a comma separated file extension list in order f2fs + to treat them as hot files. The default list includes only + a db extension. + +config BR2_TARGET_ROOTFS_F2FS_OVERPROVISION + int "overprovision ratio" + default 0 + help + The percentage over the volume size for overprovision + area. This area is hidden to users, and utilized by F2FS + cleaner. + + Leave at 0 for autocalculation according to the partition + size. + +config BR2_TARGET_ROOTFS_F2FS_DISCARD + bool "discard policy" + default y + help + Enable or disable discard policy. + +config BR2_TARGET_ROOTFS_F2FS_FEATURES + string "filesystem features" + help + List of features that the F2FS filesystem should support + (e.g "encrypt") + +endif # BR2_TARGET_ROOTFS_F2FS diff --git a/fs/f2fs/f2fs.mk b/fs/f2fs/f2fs.mk new file mode 100644 index 00000000..21a2879c --- /dev/null +++ b/fs/f2fs/f2fs.mk @@ -0,0 +1,45 @@ +################################################################################ +# +# Build the f2fs root filesystem image +# +################################################################################ + +F2FS_SIZE = $(call qstrip,$(BR2_TARGET_ROOTFS_F2FS_SIZE)) +ifeq ($(BR2_TARGET_ROOTFS_F2FS)-$(F2FS_SIZE),y-) +$(error BR2_TARGET_ROOTFS_F2FS_SIZE cannot be empty) +endif + +# qstrip results in stripping consecutive spaces into a single one. So the +# variable is not qstrip-ed to preserve the integrity of the string value. +F2FS_LABEL = $(subst ",,$(BR2_TARGET_ROOTFS_F2FS_LABEL)) +# ") +F2FS_COLD_FILES = $(call qstrip,$(BR2_TARGET_ROOTFS_F2FS_COLD_FILES)) +F2FS_HOT_FILES = $(call qstrip,$(BR2_TARGET_ROOTFS_F2FS_HOT_FILES)) + +ifeq ($(BR2_TARGET_ROOTFS_F2FS_DISCARD),y) +F2FS_DISCARD = 1 +else +F2FS_DISCARD = 0 +endif + +F2FS_FEATURES = $(call qstrip,$(BR2_TARGET_ROOTFS_F2FS_FEATURES)) + +F2FS_OPTS = \ + -f \ + -l "$(F2FS_LABEL)" \ + -t $(F2FS_DISCARD) \ + -o $(BR2_TARGET_ROOTFS_F2FS_OVERPROVISION) \ + $(if $(F2FS_COLD_FILES),-e "$(F2FS_COLD_FILES)") \ + $(if $(F2FS_HOT_FILES),-E "$(F2FS_HOT_FILES)") \ + $(if $(F2FS_FEATURES),-O "$(F2FS_FEATURES)") + +ROOTFS_F2FS_DEPENDENCIES = host-f2fs-tools + +define ROOTFS_F2FS_CMD + $(RM) -f $@ + truncate -s $(F2FS_SIZE) $@ + $(HOST_DIR)/sbin/mkfs.f2fs $(F2FS_OPTS) $@ + $(HOST_DIR)/sbin/sload.f2fs -f $(TARGET_DIR) $@ +endef + +$(eval $(rootfs)) diff --git a/fs/initramfs/Config.in b/fs/initramfs/Config.in new file mode 100644 index 00000000..9d5a3f92 --- /dev/null +++ b/fs/initramfs/Config.in @@ -0,0 +1,22 @@ +config BR2_TARGET_ROOTFS_INITRAMFS + bool "initial RAM filesystem linked into linux kernel" + depends on BR2_LINUX_KERNEL + select BR2_TARGET_ROOTFS_CPIO + help + Integrate the root filesystem generated by Buildroot as an + initramfs inside the kernel image. This integration will + take place automatically. + + A rootfs.cpio file will be generated in the images/ directory. + This is the archive that will be included in the kernel image. + The default rootfs compression set in the kernel configuration + is used, regardless of how buildroot's cpio archive is + configured. + + Note that enabling initramfs together with another filesystem + formats doesn't make sense: you would end up having two + identical root filesystems, one embedded inside the kernel + image, and one separately. + +comment "initramfs needs a Linux kernel to be built" + depends on !BR2_LINUX_KERNEL diff --git a/fs/initramfs/initramfs.mk b/fs/initramfs/initramfs.mk new file mode 100644 index 00000000..3b3d4ed8 --- /dev/null +++ b/fs/initramfs/initramfs.mk @@ -0,0 +1,36 @@ +################################################################################ +# +# Build a kernel with an integrated initial ramdisk filesystem based on cpio. +# +################################################################################ + +# The generic fs infrastructure isn't very useful here. +# +# The initramfs image does not actually build an image; its only purpose is: +# 1- to ensure rootfs.cpio is generated, +# 2- to then rebuild the kernel with rootfs.cpio as initramfs +# +# Note: ordering of the dependencies is not guaranteed here, but in +# linux/linux.mk, via the linux-rebuild-with-initramfs rule, which depends +# on the rootfs-cpio filesystem rule. +# +# Note: the trick here is that we directly depend on rebuilding the Linux +# kernel image (which itself depends on the rootfs-cpio rule), while we +# advertise that our dependency is on the rootfs-cpio rule, which is +# cleaner in the dependency graph. + +rootfs-initramfs: linux-rebuild-with-initramfs + +rootfs-initramfs-show-depends: + @echo rootfs-cpio + +.PHONY: rootfs-initramfs rootfs-initramfs-show-depends + +ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS),y) +TARGETS_ROOTFS += rootfs-initramfs +endif + +# Not using the rootfs infra, so fake the variables +ROOTFS_INITRAMFS_NAME = rootfs-initramfs +ROOTFS_INITRAMFS_TYPE = rootfs +ROOTFS_INITRAMFS_DEPENDENCIES = rootfs-cpio linux diff --git a/fs/iso9660/Config.in b/fs/iso9660/Config.in new file mode 100644 index 00000000..6f001c06 --- /dev/null +++ b/fs/iso9660/Config.in @@ -0,0 +1,89 @@ +config BR2_TARGET_ROOTFS_ISO9660 + bool "iso image" + depends on (BR2_i386 || BR2_x86_64) + depends on BR2_LINUX_KERNEL + depends on BR2_TARGET_GRUB2_I386_PC || \ + BR2_TARGET_SYSLINUX_ISOLINUX + select BR2_LINUX_KERNEL_INSTALL_TARGET \ + if (!BR2_TARGET_ROOTFS_ISO9660_INITRD && !BR2_TARGET_ROOTFS_INITRAMFS) + help + Build a bootable ISO9660 image. By default, the root + filesystem is directly packed as the ISO9660 filesystem, + which means the root filesystem will be read-only. It + requires ISO9660 filesystem support and CDROM support in the + kernel. + + However, if BR2_TARGET_ROOTFS_INITRAMFS or + BR2_TARGET_ROOTFS_ISO9660_INITRD have been enabled, the + ISO9660 filesystem will only contain a kernel image and + optionally an external initrd image. In this case, the + filesystem being in RAM, it will be read/write. No ISO9660 + or CDROM support is needed in the kernel. + +if BR2_TARGET_ROOTFS_ISO9660 + +choice + prompt "Bootloader" + +config BR2_TARGET_ROOTFS_ISO9660_GRUB2 + bool "grub2" + depends on BR2_TARGET_GRUB2_I386_PC + help + Use Grub 2 as the bootloader for the ISO9660 image. Make + sure to enable the 'iso9660' module in + BR2_TARGET_GRUB2_BUILTIN_MODULES and to use 'cd' as the boot + partition in BR2_TARGET_GRUB2_BOOT_PARTITION=. + +config BR2_TARGET_ROOTFS_ISO9660_ISOLINUX + bool "isolinux" + depends on BR2_TARGET_SYSLINUX_ISOLINUX + +endchoice + +config BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU + string "Boot menu config file" + default "fs/iso9660/grub.cfg" if BR2_TARGET_ROOTFS_ISO9660_GRUB2 + default "fs/iso9660/isolinux.cfg" if BR2_TARGET_ROOTFS_ISO9660_ISOLINUX + help + Use this option to provide a custom bootloader configuration + file (grub.cfg for Grub 2, isolinux.cfg for isolinux). + + Note that the strings __KERNEL_PATH__ and __INITRD_PATH__ + will automatically be replaced by the path to the kernel and + initrd images respectively. + +config BR2_TARGET_ROOTFS_ISO9660_INITRD + bool "Use initrd" + default y + select BR2_TARGET_ROOTFS_CPIO + help + Enable this option to have the root filesystem bundled as an + initrd/initramfs rather than directly as the ISO9660 + filesystem. With this option enabled, the ISO9660 will only + contain a kernel image, an initrd image (unless an initramfs + linked into the kernel is used) and the bootloader. + +config BR2_TARGET_ROOTFS_ISO9660_TRANSPARENT_COMPRESSION + bool "transparent compression" + depends on !BR2_TARGET_ROOTFS_ISO9660_INITRD + depends on !BR2_TARGET_ROOTFS_INITRAMFS + help + Say 'y' to enable use of transparent (de)compression. Files + are stored compressed and will be decompressed on-the-fly + upon access at runtime. + +config BR2_TARGET_ROOTFS_ISO9660_HYBRID + bool "Build hybrid image" + depends on BR2_TARGET_ROOTFS_ISO9660_ISOLINUX + help + Enable this option to build an hybrid image, i.e an image + which can either be booted from a CD-ROM or from a device + which BIOS considers a hard disk or ZIP disk, e.g. a USB key + or similar. + +endif + +comment "iso image needs a Linux kernel and either grub2 i386-pc or isolinux to be built" + depends on BR2_i386 || BR2_x86_64 + depends on !BR2_LINUX_KERNEL || \ + !(BR2_TARGET_GRUB2_I386_PC || BR2_TARGET_SYSLINUX_ISOLINUX) diff --git a/fs/iso9660/grub.cfg b/fs/iso9660/grub.cfg new file mode 100644 index 00000000..5a74b235 --- /dev/null +++ b/fs/iso9660/grub.cfg @@ -0,0 +1,7 @@ +set default="0" +set timeout="10" + +menuentry "Buildroot" { + linux __KERNEL_PATH__ root=/dev/sr0 + initrd __INITRD_PATH__ +} diff --git a/fs/iso9660/iso9660.mk b/fs/iso9660/iso9660.mk new file mode 100644 index 00000000..a129655c --- /dev/null +++ b/fs/iso9660/iso9660.mk @@ -0,0 +1,146 @@ +################################################################################ +# +# Build the iso96600 root filesystem image +# +################################################################################ + +# +# We need to handle three cases: +# +# 1. The ISO9660 filesystem will really be the real root filesystem +# itself. This is when BR2_TARGET_ROOTFS_ISO9660_INITRD is +# disabled. +# +# 2. The ISO9660 filesystem will be a filesystem with just a kernel +# image, initrd and grub. This is when +# BR2_TARGET_ROOTFS_ISO9660_INITRD is enabled, but +# BR2_TARGET_ROOTFS_INITRAMFS is disabled. +# +# 3. The ISO9660 filesystem will be a filesystem with just a kernel +# image and grub. This is like (2), except that the initrd is +# built into the kernel image. This is when +# BR2_TARGET_ROOTFS_INITRAMFS is enabled (regardless of the value +# of BR2_TARGET_ROOTFS_ISO9660_INITRD). + +ROOTFS_ISO9660_BOOT_MENU = $(call qstrip,$(BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU)) + +ROOTFS_ISO9660_DEPENDENCIES = host-cdrkit linux + +ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS),y) +ROOTFS_ISO9660_USE_INITRD = YES +endif + +ifeq ($(BR2_TARGET_ROOTFS_ISO9660_INITRD),y) +ROOTFS_ISO9660_USE_INITRD = YES +endif + +ifeq ($(ROOTFS_ISO9660_USE_INITRD),YES) +ROOTFS_ISO9660_TMP_TARGET_DIR = $(FS_DIR)/rootfs.iso9660.tmp +define ROOTFS_ISO9660_CREATE_TEMPDIR + $(RM) -rf $(ROOTFS_ISO9660_TMP_TARGET_DIR) + mkdir -p $(ROOTFS_ISO9660_TMP_TARGET_DIR) +endef +ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_CREATE_TEMPDIR +else ifeq ($(BR2_TARGET_ROOTFS_ISO9660_TRANSPARENT_COMPRESSION),y) +ROOTFS_ISO9660_DEPENDENCIES += host-zisofs-tools +ROOTFS_ISO9660_TMP_TARGET_DIR = $(FS_DIR)/rootfs.iso9660.tmp +# This must be early, before we copy the bootloader files. +define ROOTFS_ISO9660_MKZFTREE + $(RM) -rf $(ROOTFS_ISO9660_TMP_TARGET_DIR) + $(HOST_DIR)/bin/mkzftree -X -z 9 -p $(PARALLEL_JOBS) \ + $(TARGET_DIR) \ + $(ROOTFS_ISO9660_TMP_TARGET_DIR) +endef +ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_MKZFTREE +ROOTFS_ISO9660_GENISOIMAGE_OPTS += -z +else +ROOTFS_ISO9660_TMP_TARGET_DIR = $(TARGET_DIR) +endif + +ifeq ($(BR2_TARGET_ROOTFS_ISO9660_GRUB2),y) +ROOTFS_ISO9660_DEPENDENCIES += grub2 +ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH = \ + $(ROOTFS_ISO9660_TMP_TARGET_DIR)/boot/grub/grub.cfg +ROOTFS_ISO9660_BOOT_IMAGE = boot/grub/grub-eltorito.img +define ROOTFS_ISO9660_INSTALL_BOOTLOADER + $(INSTALL) -D -m 0644 $(BINARIES_DIR)/grub-eltorito.img \ + $(ROOTFS_ISO9660_TMP_TARGET_DIR)/boot/grub/grub-eltorito.img +endef +else ifeq ($(BR2_TARGET_ROOTFS_ISO9660_ISOLINUX),y) +ROOTFS_ISO9660_DEPENDENCIES += syslinux +ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH = \ + $(ROOTFS_ISO9660_TMP_TARGET_DIR)/isolinux/isolinux.cfg +ROOTFS_ISO9660_BOOT_IMAGE = isolinux/isolinux.bin +define ROOTFS_ISO9660_INSTALL_BOOTLOADER + $(INSTALL) -D -m 0644 $(BINARIES_DIR)/syslinux/* \ + $(ROOTFS_ISO9660_TMP_TARGET_DIR)/isolinux/ + $(INSTALL) -D -m 0644 $(HOST_DIR)/share/syslinux/ldlinux.c32 \ + $(ROOTFS_ISO9660_TMP_TARGET_DIR)/isolinux/ldlinux.c32 +endef +endif + +define ROOTFS_ISO9660_PREPARATION + $(INSTALL) -D -m 0644 $(ROOTFS_ISO9660_BOOT_MENU) \ + $(ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH) + $(SED) "s%__KERNEL_PATH__%/boot/$(LINUX_IMAGE_NAME)%" \ + $(ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH) + $(ROOTFS_ISO9660_INSTALL_BOOTLOADER) +endef + +ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_PREPARATION + +define ROOTFS_ISO9660_DISABLE_EXTERNAL_INITRD + $(SED) '/__INITRD_PATH__/d' $(ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH) +endef + +# Copy the kernel to temporary filesystem +define ROOTFS_ISO9660_COPY_KERNEL + $(INSTALL) -D -m 0644 $(LINUX_IMAGE_PATH) \ + $(ROOTFS_ISO9660_TMP_TARGET_DIR)/boot/$(LINUX_IMAGE_NAME) +endef + +ifeq ($(ROOTFS_ISO9660_USE_INITRD),YES) +ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_COPY_KERNEL + +# If initramfs is used, disable loading the initrd as the rootfs is +# already inside the kernel image. Otherwise, make sure a cpio is +# generated and use it as the initrd. +ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS),y) +ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_DISABLE_EXTERNAL_INITRD +else +ROOTFS_ISO9660_DEPENDENCIES += rootfs-cpio +define ROOTFS_ISO9660_COPY_INITRD + $(INSTALL) -D -m 0644 $(BINARIES_DIR)/rootfs.cpio$(ROOTFS_CPIO_COMPRESS_EXT) \ + $(ROOTFS_ISO9660_TMP_TARGET_DIR)/boot/initrd + $(SED) "s%__INITRD_PATH__%/boot/initrd%" \ + $(ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH) +endef +ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_COPY_INITRD +endif + +else # ROOTFS_ISO9660_USE_INITRD +ifeq ($(BR2_TARGET_ROOTFS_ISO9660_TRANSPARENT_COMPRESSION),y) +# We must use the uncompressed kernel image +ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_COPY_KERNEL +endif + +ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_DISABLE_EXTERNAL_INITRD + +endif # ROOTFS_ISO9660_USE_INITRD + +define ROOTFS_ISO9660_CMD + $(HOST_DIR)/bin/genisoimage -J -R -b $(ROOTFS_ISO9660_BOOT_IMAGE) \ + -no-emul-boot -boot-load-size 4 -boot-info-table \ + $(ROOTFS_ISO9660_GENISOIMAGE_OPTS) \ + -o $@ $(ROOTFS_ISO9660_TMP_TARGET_DIR) +endef + +ifeq ($(BR2_TARGET_ROOTFS_ISO9660_HYBRID),y) +define ROOTFS_ISO9660_GEN_HYBRID + $(HOST_DIR)/bin/isohybrid -t 0x96 $@ +endef + +ROOTFS_ISO9660_POST_GEN_HOOKS += ROOTFS_ISO9660_GEN_HYBRID +endif + +$(eval $(rootfs)) diff --git a/fs/iso9660/isolinux.cfg b/fs/iso9660/isolinux.cfg new file mode 100644 index 00000000..28be4fa0 --- /dev/null +++ b/fs/iso9660/isolinux.cfg @@ -0,0 +1,5 @@ +default 1 +label 1 + kernel __KERNEL_PATH__ + initrd __INITRD_PATH__ + append root=/dev/sr0 diff --git a/fs/jffs2/Config.in b/fs/jffs2/Config.in new file mode 100644 index 00000000..44c0b104 --- /dev/null +++ b/fs/jffs2/Config.in @@ -0,0 +1,113 @@ +config BR2_TARGET_ROOTFS_JFFS2 + bool "jffs2 root filesystem" + help + Build a jffs2 root filesystem + +if BR2_TARGET_ROOTFS_JFFS2 + +choice + prompt "Flash Type" + default BR2_TARGET_ROOTFS_JFFS2_FLASH_128 + +config BR2_TARGET_ROOTFS_JFFS2_DATAFLASH_1056 + bool "AT45 dataflash with 1056 byte pagesize" + select BR2_TARGET_ROOTFS_JFFS2_NOCLEANMARKER + +config BR2_TARGET_ROOTFS_JFFS2_DATAFLASH_528 + bool "AT45 dataflash with 528 byte pagesize" + select BR2_TARGET_ROOTFS_JFFS2_NOCLEANMARKER + +config BR2_TARGET_ROOTFS_JFFS2_NANDFLASH_16K + bool "NAND flash with 16 kB erasesize" + select BR2_TARGET_ROOTFS_JFFS2_NOCLEANMARKER + +config BR2_TARGET_ROOTFS_JFFS2_NANDFLASH_128K + bool "NAND flash with 128 kB erasesize" + select BR2_TARGET_ROOTFS_JFFS2_NOCLEANMARKER + +config BR2_TARGET_ROOTFS_JFFS2_FLASH_128 + bool "Parallel flash with 128 kB erase size" + +config BR2_TARGET_ROOTFS_JFFS2_FLASH_64 + bool "Parallel flash with 64 kB erase size" + +config BR2_TARGET_ROOTFS_JFFS2_CUSTOM + bool "Select custom erase size" + +endchoice + +config BR2_TARGET_ROOTFS_JFFS2_CUSTOM_EBSIZE + hex "Erase block size" + default 0x20000 + depends on BR2_TARGET_ROOTFS_JFFS2_CUSTOM + help + Set to erase size of memory + +config BR2_TARGET_ROOTFS_JFFS2_EBSIZE + hex + default 0x2100 if BR2_TARGET_ROOTFS_JFFS2_DATAFLASH_1056 + default 0x1080 if BR2_TARGET_ROOTFS_JFFS2_DATAFLASH_528 + default 0x4000 if BR2_TARGET_ROOTFS_JFFS2_NANDFLASH_16K + default 0x20000 if BR2_TARGET_ROOTFS_JFFS2_NANDFLASH_128K + default 0x20000 if BR2_TARGET_ROOTFS_JFFS2_FLASH_128 + default 0x10000 if BR2_TARGET_ROOTFS_JFFS2_FLASH_64 + default BR2_TARGET_ROOTFS_JFFS2_CUSTOM_EBSIZE if BR2_TARGET_ROOTFS_JFFS2_CUSTOM + +config BR2_TARGET_ROOTFS_JFFS2_NOCLEANMARKER + bool "Do not use Cleanmarker" + default y if BR2_TARGET_ROOTFS_JFFS2_DATAFLASH_1056 + default y if BR2_TARGET_ROOTFS_JFFS2_DATAFLASH_528 + default y if BR2_TARGET_ROOTFS_JFFS2_NANDFLASH_16K + default y if BR2_TARGET_ROOTFS_JFFS2_NANDFLASH_128K + help + Do not use cleanmarkers if using NAND flash or Dataflash where + the pagesize is not a power of 2 + +config BR2_TARGET_ROOTFS_JFFS2_PAD + bool "Pad output" + +config BR2_TARGET_ROOTFS_JFFS2_PADSIZE + hex "Pad output size (0x0 = to end of EB)" + default 0x0 + depends on BR2_TARGET_ROOTFS_JFFS2_PAD + help + Set to 0x0 to pad to end of erase block. + +choice + prompt "Endianess" + default BR2_TARGET_ROOTFS_JFFS2_BE if BR2_ENDIAN = "BIG" + +config BR2_TARGET_ROOTFS_JFFS2_LE + bool "little-endian" + +config BR2_TARGET_ROOTFS_JFFS2_BE + bool "big-endian" + +endchoice + +config BR2_TARGET_ROOTFS_JFFS2_SUMMARY + bool "Produce a summarized JFFS2 image" + help + A summarised image can be mounted faster if support is + enabled in the kernel (CONFIG_JFFS2_SUMMARY) + +config BR2_TARGET_ROOTFS_JFFS2_USE_CUSTOM_PAGESIZE + bool "Select custom virtual memory page size" + help + Use a custom virtual memory page size. Note that this is not + related to the flash memory page size. Using this option is + only needed if Linux is configured to use a page size + different than 4kB. + +config BR2_TARGET_ROOTFS_JFFS2_CUSTOM_PAGESIZE + hex "Virtual memory page size" + default 0x1000 + depends on BR2_TARGET_ROOTFS_JFFS2_USE_CUSTOM_PAGESIZE + help + Set to virtual memory page size of target system (in bytes). + This value should match the virtual page size in Linux (i.e. + this should have the same value as the value of the PAGE_SIZE + macro in Linux). It is not related to the flash memory page + size. + +endif diff --git a/fs/jffs2/jffs2.mk b/fs/jffs2/jffs2.mk new file mode 100644 index 00000000..0096af2e --- /dev/null +++ b/fs/jffs2/jffs2.mk @@ -0,0 +1,52 @@ +################################################################################ +# +# Build the jffs2 root filesystem image +# +################################################################################ + +JFFS2_OPTS = -e $(BR2_TARGET_ROOTFS_JFFS2_EBSIZE) --with-xattr +SUMTOOL_OPTS = -e $(BR2_TARGET_ROOTFS_JFFS2_EBSIZE) + +ifeq ($(BR2_TARGET_ROOTFS_JFFS2_PAD),y) +ifneq ($(strip $(BR2_TARGET_ROOTFS_JFFS2_PADSIZE)),0x0) +JFFS2_OPTS += --pad=$(strip $(BR2_TARGET_ROOTFS_JFFS2_PADSIZE)) +else +JFFS2_OPTS += -p +endif +SUMTOOL_OPTS += -p +endif + +ifeq ($(BR2_TARGET_ROOTFS_JFFS2_LE),y) +JFFS2_OPTS += -l +SUMTOOL_OPTS += -l +endif + +ifeq ($(BR2_TARGET_ROOTFS_JFFS2_BE),y) +JFFS2_OPTS += -b +SUMTOOL_OPTS += -b +endif + +ifeq ($(BR2_TARGET_ROOTFS_JFFS2_USE_CUSTOM_PAGESIZE),y) +JFFS2_OPTS += -s $(BR2_TARGET_ROOTFS_JFFS2_CUSTOM_PAGESIZE) +endif + +ifeq ($(BR2_TARGET_ROOTFS_JFFS2_NOCLEANMARKER),y) +JFFS2_OPTS += -n +SUMTOOL_OPTS += -n +endif + +ROOTFS_JFFS2_DEPENDENCIES = host-mtd + +ifneq ($(BR2_TARGET_ROOTFS_JFFS2_SUMMARY),) +define ROOTFS_JFFS2_CMD + $(MKFS_JFFS2) $(JFFS2_OPTS) -d $(TARGET_DIR) -o $@.nosummary + $(SUMTOOL) $(SUMTOOL_OPTS) -i $@.nosummary -o $@ + rm $@.nosummary +endef +else +define ROOTFS_JFFS2_CMD + $(MKFS_JFFS2) $(JFFS2_OPTS) -d $(TARGET_DIR) -o $@ +endef +endif + +$(eval $(rootfs)) diff --git a/fs/romfs/Config.in b/fs/romfs/Config.in new file mode 100644 index 00000000..84944a0f --- /dev/null +++ b/fs/romfs/Config.in @@ -0,0 +1,4 @@ +config BR2_TARGET_ROOTFS_ROMFS + bool "romfs root filesystem" + help + Build a romfs image of the root filesystem. diff --git a/fs/romfs/romfs.mk b/fs/romfs/romfs.mk new file mode 100644 index 00000000..163751b4 --- /dev/null +++ b/fs/romfs/romfs.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# Build the romfs root filesystem image +# +################################################################################ + +ROOTFS_ROMFS_DEPENDENCIES = host-genromfs + +define ROOTFS_ROMFS_CMD + $(HOST_DIR)/bin/genromfs -d $(TARGET_DIR) -f $@ +endef + +$(eval $(rootfs)) diff --git a/fs/squashfs/Config.in b/fs/squashfs/Config.in new file mode 100644 index 00000000..70d4a20c --- /dev/null +++ b/fs/squashfs/Config.in @@ -0,0 +1,42 @@ +config BR2_TARGET_ROOTFS_SQUASHFS + bool "squashfs root filesystem" + help + Build a squashfs root filesystem + +if BR2_TARGET_ROOTFS_SQUASHFS + +config BR2_TARGET_ROOTFS_SQUASHFS_PAD + bool "pad to a 4K boundary" + default y # legacy was always ON + help + Say 'y' here (the default) to pad the the filesystem image + to a 4K boundary. Say 'n' to disable padding. + +choice + prompt "Compression algorithm" + default BR2_TARGET_ROOTFS_SQUASHFS4_GZIP + help + Select the squashfs compression algorithm to use when + generating the filesystem. + +config BR2_TARGET_ROOTFS_SQUASHFS4_GZIP + bool "gzip" + +config BR2_TARGET_ROOTFS_SQUASHFS4_LZ4 + bool "lz4" + +config BR2_TARGET_ROOTFS_SQUASHFS4_LZMA + bool "lzma" + +config BR2_TARGET_ROOTFS_SQUASHFS4_LZO + bool "lzo" + +config BR2_TARGET_ROOTFS_SQUASHFS4_XZ + bool "xz" + +config BR2_TARGET_ROOTFS_SQUASHFS4_ZSTD + bool "zstd" + +endchoice + +endif diff --git a/fs/squashfs/squashfs.mk b/fs/squashfs/squashfs.mk new file mode 100644 index 00000000..7a5e3e31 --- /dev/null +++ b/fs/squashfs/squashfs.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# Build the squashfs root filesystem image +# +################################################################################ + +ROOTFS_SQUASHFS_DEPENDENCIES = host-squashfs + +ROOTFS_SQUASHFS_ARGS = -noappend -processors $(PARALLEL_JOBS) + +ifeq ($(BR2_TARGET_ROOTFS_SQUASHFS_PAD),) +ROOTFS_SQUASHFS_ARGS += -nopad +endif + +ifeq ($(BR2_TARGET_ROOTFS_SQUASHFS4_LZ4),y) +ROOTFS_SQUASHFS_ARGS += -comp lz4 -Xhc +else ifeq ($(BR2_TARGET_ROOTFS_SQUASHFS4_LZO),y) +ROOTFS_SQUASHFS_ARGS += -comp lzo +else ifeq ($(BR2_TARGET_ROOTFS_SQUASHFS4_LZMA),y) +ROOTFS_SQUASHFS_ARGS += -comp lzma +else ifeq ($(BR2_TARGET_ROOTFS_SQUASHFS4_XZ),y) +ROOTFS_SQUASHFS_ARGS += -comp xz +else ifeq ($(BR2_TARGET_ROOTFS_SQUASHFS4_ZSTD),y) +ROOTFS_SQUASHFS_ARGS += -comp zstd +else +ROOTFS_SQUASHFS_ARGS += -comp gzip +endif + +define ROOTFS_SQUASHFS_CMD + $(HOST_DIR)/bin/mksquashfs $(TARGET_DIR) $@ $(ROOTFS_SQUASHFS_ARGS) +endef + +$(eval $(rootfs)) diff --git a/fs/tar/Config.in b/fs/tar/Config.in new file mode 100644 index 00000000..a4e375c6 --- /dev/null +++ b/fs/tar/Config.in @@ -0,0 +1,57 @@ +config BR2_TARGET_ROOTFS_TAR + bool "tar the root filesystem" + default y + help + Build a tar archive of the root filesystem + +choice + prompt "Compression method" + default BR2_TARGET_ROOTFS_TAR_NONE + depends on BR2_TARGET_ROOTFS_TAR + help + Select compressor for tar archive of the root filesystem + +config BR2_TARGET_ROOTFS_TAR_NONE + bool "no compression" + help + Do not compress the tarball. + +config BR2_TARGET_ROOTFS_TAR_GZIP + bool "gzip" + help + Do compress the tarball with gzip. + +config BR2_TARGET_ROOTFS_TAR_BZIP2 + bool "bzip2" + help + Do compress the tarball with bzip2. + +config BR2_TARGET_ROOTFS_TAR_LZ4 + bool "lz4" + help + Do compress the tarball with lz4. + +config BR2_TARGET_ROOTFS_TAR_LZMA + bool "lzma" + help + Do compress the tarball with lzma. + +config BR2_TARGET_ROOTFS_TAR_LZO + bool "lzo" + help + Do compress the tarball with lzop. + +config BR2_TARGET_ROOTFS_TAR_XZ + bool "xz" + help + Do compress the tarball with xz. + +endchoice + +config BR2_TARGET_ROOTFS_TAR_OPTIONS + string "other random options to pass to tar" + default "" + depends on BR2_TARGET_ROOTFS_TAR + help + Any other flags you want to pass to tar + Refer to tar --help for details diff --git a/fs/tar/tar.mk b/fs/tar/tar.mk new file mode 100644 index 00000000..841af147 --- /dev/null +++ b/fs/tar/tar.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# tar to archive target filesystem +# +################################################################################ + +TAR_OPTS = $(call qstrip,$(BR2_TARGET_ROOTFS_TAR_OPTIONS)) + +ROOTFS_TAR_DEPENDENCIES = $(BR2_TAR_HOST_DEPENDENCY) + +# do not store atime/ctime in PaxHeaders to ensure reproducbility +TAR_OPTS += --pax-option=exthdr.name=%d/PaxHeaders/%f,atime:=0,ctime:=0 + +define ROOTFS_TAR_CMD + (cd $(TARGET_DIR); find -print0 | LC_ALL=C sort -z | \ + tar $(TAR_OPTS) -cf $@ --null --xattrs-include='*' --no-recursion -T - --numeric-owner) +endef + +$(eval $(rootfs)) diff --git a/fs/ubi/Config.in b/fs/ubi/Config.in new file mode 100644 index 00000000..3427ea05 --- /dev/null +++ b/fs/ubi/Config.in @@ -0,0 +1,57 @@ +config BR2_TARGET_ROOTFS_UBI + bool "ubi image containing an ubifs root filesystem" + select BR2_TARGET_ROOTFS_UBIFS + help + Build an ubi image from the ubifs one (with ubinize). + +if BR2_TARGET_ROOTFS_UBI + +config BR2_TARGET_ROOTFS_UBI_PEBSIZE + hex "physical eraseblock size" + default 0x20000 + help + Tells ubinize the physical eraseblock (PEB) size of the + flash chip the ubi image is created for. The value provided + here is passed to the -p/--peb-size option of ubinize. + +config BR2_TARGET_ROOTFS_UBI_SUBSIZE + int "sub-page size" + default 512 + help + Tells ubinize that the flash supports sub-pages and the + sub-page size. Use 0 if sub-pages are not supported on flash + chip. + The value provided here is passed to the -s/--sub-page-size + option of ubinize. + +config BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG + bool "Use custom config file" + help + Select this option to use a custom ubinize configuration file, + rather than the default configuration used by Buildroot (which + defines a single dynamic volume marked as auto-resize). + Passing a custom ubinize configuration file allows you to + create several volumes, specify volume types, etc. + + As a convenience, buildroot replaces the string + "BR2_ROOTFS_UBIFS_PATH" with the path to the built ubifs file. + So the volume defined for the root filesystem can specify the + image path as: image=BR2_ROOTFS_UBIFS_PATH + + Buildroot also replaces the string "BINARIES_DIR" with the + value of $(BINARIES_DIR), so that it is possible to reference + other build artefacts (e.g. to include the kernel in a UBI + volume). + +config BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE + string "Configuration file path" + depends on BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG + help + Path to the ubinize configuration file. + +config BR2_TARGET_ROOTFS_UBI_OPTS + string "Additional ubinize options" + help + Any additional ubinize options you may want to include. + +endif # BR2_TARGET_ROOTFS_UBI diff --git a/fs/ubi/ubi.mk b/fs/ubi/ubi.mk new file mode 100644 index 00000000..54bb81ea --- /dev/null +++ b/fs/ubi/ubi.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# Embed the ubifs image into an ubi image +# +################################################################################ + +UBI_UBINIZE_OPTS = -m $(BR2_TARGET_ROOTFS_UBIFS_MINIOSIZE) +UBI_UBINIZE_OPTS += -p $(BR2_TARGET_ROOTFS_UBI_PEBSIZE) +ifneq ($(BR2_TARGET_ROOTFS_UBI_SUBSIZE),0) +UBI_UBINIZE_OPTS += -s $(BR2_TARGET_ROOTFS_UBI_SUBSIZE) +endif + +UBI_UBINIZE_OPTS += $(call qstrip,$(BR2_TARGET_ROOTFS_UBI_OPTS)) + +ROOTFS_UBI_DEPENDENCIES = rootfs-ubifs + +ifeq ($(BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG),y) +UBI_UBINIZE_CONFIG_FILE_PATH = $(call qstrip,$(BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE)) +else +UBI_UBINIZE_CONFIG_FILE_PATH = fs/ubi/ubinize.cfg +endif + +# don't use sed -i as it misbehaves on systems with SELinux enabled when this is +# executed through fakeroot (see #9386) +define ROOTFS_UBI_CMD + sed 's;BR2_ROOTFS_UBIFS_PATH;$@fs;;s;BINARIES_DIR;$(BINARIES_DIR);' \ + $(UBI_UBINIZE_CONFIG_FILE_PATH) > $(BUILD_DIR)/ubinize.cfg + $(HOST_DIR)/sbin/ubinize -o $@ $(UBI_UBINIZE_OPTS) $(BUILD_DIR)/ubinize.cfg + rm $(BUILD_DIR)/ubinize.cfg +endef + +$(eval $(rootfs)) diff --git a/fs/ubi/ubinize.cfg b/fs/ubi/ubinize.cfg new file mode 100644 index 00000000..b0aace7b --- /dev/null +++ b/fs/ubi/ubinize.cfg @@ -0,0 +1,8 @@ +[ubifs] +mode=ubi +vol_id=0 +vol_type=dynamic +vol_name=rootfs +vol_alignment=1 +vol_flags=autoresize +image=BR2_ROOTFS_UBIFS_PATH diff --git a/fs/ubifs/Config.in b/fs/ubifs/Config.in new file mode 100644 index 00000000..e79ab9a1 --- /dev/null +++ b/fs/ubifs/Config.in @@ -0,0 +1,98 @@ +config BR2_TARGET_ROOTFS_UBIFS + bool "ubifs root filesystem" + help + Build a ubifs root filesystem + +if BR2_TARGET_ROOTFS_UBIFS + +config BR2_TARGET_ROOTFS_UBIFS_LEBSIZE + hex "logical eraseblock size" + default 0x1f800 + help + Logical eraseblock (LEB) size. The value provided here is + passed to the -e/--leb-size option of mkfs.ubifs. + +config BR2_TARGET_ROOTFS_UBIFS_MINIOSIZE + hex "minimum I/O unit size" + default 0x800 + help + Minimum I/O unit size. The value provided here is passed + to the -m/--min-io-size option of mkfs.ubifs/ubinize. + +config BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT + int "maximum logical eraseblock count" + default 2048 + help + Maximum logical eraseblock (LEB) count. The value provided + here is passed to the -c/--max-leb-cnt option of mkfs.ubifs. + +choice + prompt "ubifs runtime compression" + default BR2_TARGET_ROOTFS_UBIFS_RT_LZO + help + Select which compression format to use at run-time within + the ubifs file system. The choice made here is passed to + the -x/--compr option of mkfs.ubifs + +config BR2_TARGET_ROOTFS_UBIFS_RT_NONE + bool "no compression" + help + Don't use run-time compression. + +config BR2_TARGET_ROOTFS_UBIFS_RT_ZLIB + bool "gzip" + help + Use zlib compression at run-time. + +config BR2_TARGET_ROOTFS_UBIFS_RT_LZO + bool "lzo" + help + Use lzo compression at run-time. + +endchoice + +choice + prompt "Compression method" + default BR2_TARGET_ROOTFS_UBIFS_NONE + help + Select which compression format to compress the final image + into. + +config BR2_TARGET_ROOTFS_UBIFS_NONE + bool "no compression" + help + Do not compress the ubifs filesystem. + +config BR2_TARGET_ROOTFS_UBIFS_GZIP + bool "gzip" + help + Do compress the ubifs filesystem with gzip. + +config BR2_TARGET_ROOTFS_UBIFS_BZIP2 + bool "bzip2" + help + Do compress the ubifs filesystem with bzip2. + +config BR2_TARGET_ROOTFS_UBIFS_LZMA + bool "lzma" + help + Do compress the ubifs filesystem with lzma. + +config BR2_TARGET_ROOTFS_UBIFS_LZO + bool "lzo" + help + Do compress the ubifs filesystem with lzop. + +config BR2_TARGET_ROOTFS_UBIFS_XZ + bool "xz" + help + Do compress the ubifs filesystem with xz. + +endchoice + +config BR2_TARGET_ROOTFS_UBIFS_OPTS + string "Additional mkfs.ubifs options" + help + Any additional mkfs.ubifs options you may want to include. + +endif # BR2_TARGET_ROOTFS_UBIFS diff --git a/fs/ubifs/ubifs.mk b/fs/ubifs/ubifs.mk new file mode 100644 index 00000000..2cfc397a --- /dev/null +++ b/fs/ubifs/ubifs.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# Build the ubifs root filesystem image +# +################################################################################ + +UBIFS_OPTS = \ + -e $(BR2_TARGET_ROOTFS_UBIFS_LEBSIZE) \ + -c $(BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT) \ + -m $(BR2_TARGET_ROOTFS_UBIFS_MINIOSIZE) + +ifeq ($(BR2_TARGET_ROOTFS_UBIFS_RT_ZLIB),y) +UBIFS_OPTS += -x zlib +endif +ifeq ($(BR2_TARGET_ROOTFS_UBIFS_RT_LZO),y) +UBIFS_OPTS += -x lzo +endif +ifeq ($(BR2_TARGET_ROOTFS_UBIFS_RT_NONE),y) +UBIFS_OPTS += -x none +endif + +UBIFS_OPTS += $(call qstrip,$(BR2_TARGET_ROOTFS_UBIFS_OPTS)) + +ROOTFS_UBIFS_DEPENDENCIES = host-mtd + +define ROOTFS_UBIFS_CMD + $(HOST_DIR)/sbin/mkfs.ubifs -d $(TARGET_DIR) $(UBIFS_OPTS) -o $@ +endef + +$(eval $(rootfs)) diff --git a/fs/yaffs2/Config.in b/fs/yaffs2/Config.in new file mode 100644 index 00000000..27da4ba6 --- /dev/null +++ b/fs/yaffs2/Config.in @@ -0,0 +1,4 @@ +config BR2_TARGET_ROOTFS_YAFFS2 + bool "yaffs2 root filesystem" + help + Build a yaffs2 root filesystem diff --git a/fs/yaffs2/yaffs2.mk b/fs/yaffs2/yaffs2.mk new file mode 100644 index 00000000..9cba27af --- /dev/null +++ b/fs/yaffs2/yaffs2.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# Build the yaffs2 root filesystem image +# +################################################################################ + +ROOTFS_YAFFS2_DEPENDENCIES = host-yaffs2utils + +define ROOTFS_YAFFS2_CMD + $(HOST_DIR)/bin/mkyaffs2 --all-root $(TARGET_DIR) $@ +endef + +$(eval $(rootfs)) diff --git a/linux/0001-timeconst.pl-Eliminate-Perl-warning.patch.conditional b/linux/0001-timeconst.pl-Eliminate-Perl-warning.patch.conditional new file mode 100644 index 00000000..02abadd3 --- /dev/null +++ b/linux/0001-timeconst.pl-Eliminate-Perl-warning.patch.conditional @@ -0,0 +1,45 @@ +From 63a3f603413ffe82ad775f2d62a5afff87fd94a0 Mon Sep 17 00:00:00 2001 +From: "H. Peter Anvin" +Date: Thu, 7 Feb 2013 17:14:08 -0800 +Subject: [PATCH] timeconst.pl: Eliminate Perl warning + +defined(@array) is deprecated in Perl and gives off a warning. +Restructure the code to remove that warning. + +[ hpa: it would be interesting to revert to the timeconst.bc script. + It appears that the failures reported by akpm during testing of + that script was due to a known broken version of make, not a problem + with bc. The Makefile rules could probably be restructured to avoid + the make bug, or it is probably old enough that it doesn't matter. ] + +Reported-by: Andi Kleen +Signed-off-by: H. Peter Anvin +Cc: Andrew Morton +Cc: +Signed-off-by: Gustavo Zacarias +--- +Patch status: upstream + + kernel/timeconst.pl | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/kernel/timeconst.pl b/kernel/timeconst.pl +index eb51d76..3f42652 100644 +--- a/kernel/timeconst.pl ++++ b/kernel/timeconst.pl +@@ -369,10 +369,8 @@ if ($hz eq '--can') { + die "Usage: $0 HZ\n"; + } + +- @val = @{$canned_values{$hz}}; +- if (!defined(@val)) { +- @val = compute_values($hz); +- } ++ $cv = $canned_values{$hz}; ++ @val = defined($cv) ? @$cv : compute_values($hz); + output($hz, @val); + } + exit 0; +-- +2.4.10 + diff --git a/linux/Config.ext.in b/linux/Config.ext.in new file mode 100644 index 00000000..734a52a5 --- /dev/null +++ b/linux/Config.ext.in @@ -0,0 +1,148 @@ +menu "Linux Kernel Extensions" + +#------------------------------------------------------------------------------- +# Xenomai +config BR2_LINUX_KERNEL_EXT_XENOMAI + bool "Adeos/Xenomai Real-time patch" + depends on BR2_PACKAGE_XENOMAI_COBALT_ARCH_SUPPORTS + depends on BR2_USE_MMU # xenomai + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # xenomai + depends on BR2_TOOLCHAIN_HAS_THREADS # xenomai + depends on !BR2_TOOLCHAIN_USES_MUSL # xenomai + select BR2_PACKAGE_XENOMAI + help + Xenomai is split in two parts: a kernel part and a userspace + part. Enabling this option automatically selects the Xenomai + package and helps in patching the Linux kernel built by + Buildroot with the Xenomai kernel part (ie Adeos/Ipipe). + + You can find the currently supported kernel versions by + looking at the available patches in the Xenomai sources + tree: ksrc/arch/$(ARCH)/patches + + However, it is recommended to use the latest version of the + Adeos/Ipipe patch available at + https://xenomai.org/downloads/ipipe/ + + Xenomai is know to support Blackfin, SH4, x86, ARM, NIOS2 + and PowerPC architectures. + +config BR2_LINUX_KERNEL_EXT_XENOMAI_ADEOS_PATCH + string "Path/URL for Adeos patch file" + depends on BR2_LINUX_KERNEL_EXT_XENOMAI + help + Optionally, explicitly specify where to find the Adeos + patch to use. + Examples: + https://xenomai.org/downloads/ipipe/v4.x/arm/ipipe-core-4.19.33-arm-2.patch + or /home/foo/ipipe-core-4.19.33-arm-2.patch + Please verify that your kernel version in Buildroot matches. + +comment "xenomai needs a uClibc or glibc toolchain w/ threads" + depends on BR2_PACKAGE_XENOMAI_COBALT_ARCH_SUPPORTS + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_TOOLCHAIN_USES_MUSL + +#------------------------------------------------------------------------------- +# RTAI +config BR2_LINUX_KERNEL_EXT_RTAI + bool "RTAI Real-time patch" + select BR2_PACKAGE_RTAI + help + RTAI Kernel part. + +#------------------------------------------------------------------------------- +# ev3dev Linux drivers +config BR2_LINUX_KERNEL_EXT_EV3DEV_LINUX_DRIVERS + bool "ev3dev Linux drivers" + select BR2_PACKAGE_EV3DEV_LINUX_DRIVERS + help + Linux drivers for LEGO MINDSTORMS EV3 from the ev3dev project. + + https://github.com/ev3dev/lego-linux-drivers + +#------------------------------------------------------------------------------- +# fbtft +config BR2_LINUX_KERNEL_EXT_FBTFT + bool "FB TFT drivers" + select BR2_PACKAGE_FBTFT + help + Linux Framebuffer drivers for small TFT LCD display modules, + e.g. Adafruit PiTFT displays for Raspberry Pi (this extra + package is only needed for linux kernels until v3.19, since + v4.0 the drivers are included in the staging area). + + To enable fbtft, e.g. for Adafruit 2.8 PiTFT, enable the + following kernel configurations: + - CONFIG_SPI + - CONFIG_GPIOLIB + - CONFIG_FB + - CONFIG_FB_TFT + - CONFIG_FB_TFT_ILI9341 + + https://github.com/notro/fbtft + +# aufs-standalone +config BR2_LINUX_KERNEL_EXT_AUFS + bool "Aufs Filesystem Module patch" + select BR2_PACKAGE_AUFS + help + Aufs is split in two parts: a kernel part and a userspace + part. Enabling this option automatically selects the aufs + standalone (module) package and patches the Linux kernel + built by Buildroot with the aufs kernel part (ie fs/aufs). + + It is important to use the correct branch of aufs-standalone. + +if BR2_LINUX_KERNEL_EXT_AUFS + +choice + bool "aufs-standalone series" + help + Select the major series of this version. This must match the + major version of your kernel (e.g. for kernels 3.x, select + aufs3.x; for kernels 4.x, select aufs4.x; for kernels 5.x, + select aufs5.x ). + + Note: neither aufs1.x nor aufs2.x (both for kernels older than + 3.x) are supported. + +config BR2_LINUX_KERNEL_EXT_AUFS_SERIES_3 + bool "aufs3.x" + +config BR2_LINUX_KERNEL_EXT_AUFS_SERIES_4 + bool "aufs4.x" + +config BR2_LINUX_KERNEL_EXT_AUFS_SERIES_5 + bool "aufs5.x" + +endchoice + +config BR2_LINUX_KERNEL_EXT_AUFS_SERIES + int + default 3 if BR2_LINUX_KERNEL_EXT_AUFS_SERIES_3 + default 4 if BR2_LINUX_KERNEL_EXT_AUFS_SERIES_4 + default 5 if BR2_LINUX_KERNEL_EXT_AUFS_SERIES_5 + +config BR2_LINUX_KERNEL_EXT_AUFS_VERSION + string "aufs-standalone version" + default "" + help + The version you choose must match that of your kernel. + Usually, the sha1 of the cset you want to use; avoid using a + branch name as this yields non-reproducible builds. + + See the following resources to see what versions are + available: + + For aufs3.x: + https://sourceforge.net/p/aufs/aufs3-standalone/ref/master/branches/ + For aufs4.x: + https://github.com/sfjro/aufs4-standalone/branches/all + For aufs5.x: + https://github.com/sfjro/aufs5-standalone/branches/all + +endif # aufs + +endmenu diff --git a/linux/Config.in b/linux/Config.in new file mode 100644 index 00000000..be1a850c --- /dev/null +++ b/linux/Config.in @@ -0,0 +1,481 @@ +menu "Kernel" + +config BR2_LINUX_KERNEL + bool "Linux Kernel" + select BR2_PACKAGE_HOST_KMOD # Unconditional, even if modules not enabled + select BR2_PACKAGE_HOST_IMAGEMAGICK if BR2_LINUX_KERNEL_CUSTOM_LOGO_PATH != "" + help + Enable this option if you want to build a Linux kernel for + your embedded device + +if BR2_LINUX_KERNEL + +# Packages that need to have a kernel with support for loadable modules, +# but do not use the kernel-modules infrastructure, should select that +# option. +config BR2_LINUX_NEEDS_MODULES + bool + +# +# Version selection. We provide the choice between: +# +# 1. A single fairly recent stable kernel version +# 2. A custom stable version +# 3. A custom tarball +# 4. A set of custom repository locations +# +choice + prompt "Kernel version" + +config BR2_LINUX_KERNEL_LATEST_VERSION + bool "Latest version (5.10)" + +config BR2_LINUX_KERNEL_LATEST_CIP_VERSION + bool "Latest CIP SLTS version (4.19.182-cip45)" + help + CIP launched in the spring of 2016 to address the needs of + organizations in industries such as power generation and + distribution, water, oil and gas, transportation, building + automation and more for reliable and secure Linux-based + embedded systems that can be sustained over a period of + 10 to as many as 60 years. + The project's goal is to provide an open source base layer + of industrial-grade software that permits the use and + implementation of software building blocks that meet + these requirements. + + The CIP community plans to maintain 4.19 for security and + bug fixes for more than 10 years. + + https://www.cip-project.org + +config BR2_LINUX_KERNEL_LATEST_CIP_RT_VERSION + bool "Latest CIP RT SLTS version (4.19.165-cip41-rt18)" + help + Same as the CIP version, but this is the PREEMPT_RT realtime + variant. + + The CIP community plans to maintain 4.19 for security and + bug fixes for more than 10 years. + + https://www.cip-project.org + +config BR2_LINUX_KERNEL_CUSTOM_VERSION + bool "Custom version" + help + This option allows to use a specific official version from + kernel.org, like 2.6.x, 2.6.x.y, 3.x.y, ... + + Note: you cannot use this option to select a _longterm_ 2.6 + kernel, because these kernels are not located at the standard + URL at kernel.org. Instead, select "Custom tarball" and + specify the right URL directly. + +config BR2_LINUX_KERNEL_CUSTOM_TARBALL + bool "Custom tarball" + help + This option allows to specify a URL pointing to a kernel + source tarball. This URL can use any protocol recognized by + Buildroot, like http://, ftp://, file:// or scp://. + + When pointing to a local tarball using file://, you may want + to use a make variable like $(TOPDIR) to reference the root of + the Buildroot tree. + +config BR2_LINUX_KERNEL_CUSTOM_GIT + bool "Custom Git repository" + help + This option allows Buildroot to get the Linux kernel source + code from a Git repository. + +config BR2_LINUX_KERNEL_CUSTOM_HG + bool "Custom Mercurial repository" + help + This option allows Buildroot to get the Linux kernel source + code from a Mercurial repository. + +config BR2_LINUX_KERNEL_CUSTOM_SVN + bool "Custom Subversion repository" + help + This option allows Buildroot to get the Linux kernel source + code from a Subversion repository. + +endchoice + +config BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE + string "Kernel version" + depends on BR2_LINUX_KERNEL_CUSTOM_VERSION + +config BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION + string "URL of custom kernel tarball" + depends on BR2_LINUX_KERNEL_CUSTOM_TARBALL + +if BR2_LINUX_KERNEL_CUSTOM_GIT || BR2_LINUX_KERNEL_CUSTOM_HG || BR2_LINUX_KERNEL_CUSTOM_SVN + +config BR2_LINUX_KERNEL_CUSTOM_REPO_URL + string "URL of custom repository" + +config BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION + string "Custom repository version" + help + Revision to use in the typical format used by + Git/Mercurial/Subversion E.G. a sha id, a tag, branch, .. + +endif + +config BR2_LINUX_KERNEL_VERSION + string + default "5.10.57" if BR2_LINUX_KERNEL_LATEST_VERSION + default "4.19.182-cip45" if BR2_LINUX_KERNEL_LATEST_CIP_VERSION + default "4.19.165-cip41-rt18" if BR2_LINUX_KERNEL_LATEST_CIP_RT_VERSION + default BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE \ + if BR2_LINUX_KERNEL_CUSTOM_VERSION + default "custom" if BR2_LINUX_KERNEL_CUSTOM_TARBALL + default BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION \ + if BR2_LINUX_KERNEL_CUSTOM_GIT || BR2_LINUX_KERNEL_CUSTOM_HG || BR2_LINUX_KERNEL_CUSTOM_SVN + +# +# Patch selection +# + +config BR2_LINUX_KERNEL_PATCH + string "Custom kernel patches" + help + A space-separated list of patches to apply to the + kernel. Each patch can be described as an URL, a local file + path, or a directory. In the case of a directory, all files + matching *.patch in the directory will be applied. + +# +# Configuration selection +# + +choice + prompt "Kernel configuration" + default BR2_LINUX_KERNEL_USE_DEFCONFIG + +config BR2_LINUX_KERNEL_USE_DEFCONFIG + bool "Using an in-tree defconfig file" + +config BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG + bool "Use the architecture default configuration" + help + This option will use the default configuration for the + selected architecture. I.e, it is equivalent to running + "make ARCH= defconfig". This is useful on architectures + that have a single defconfig file, such as ARM64. + +config BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG + bool "Using a custom (def)config file" + +endchoice + +config BR2_LINUX_KERNEL_DEFCONFIG + string "Defconfig name" + depends on BR2_LINUX_KERNEL_USE_DEFCONFIG + help + Name of the kernel defconfig file to use, without the + trailing _defconfig. The defconfig is located in + arch//configs in the kernel tree. + +config BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE + string "Configuration file path" + depends on BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG + help + Path to the kernel configuration file + + Note: this can be a defconfig file or a complete .config file, + which can later be saved back with make + linux-update-(def)config. + +config BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES + string "Additional configuration fragment files" + help + A space-separated list of kernel configuration fragment files, + that will be merged to the main kernel configuration file. + +config BR2_LINUX_KERNEL_CUSTOM_LOGO_PATH + string "Custom boot logo file path" + help + Use a custom Linux framebuffer boot logo. + Custom logo should be in PNG or JPEG format, it will be + converted to the linux kernel format (224 colors only) + and copied over the original logo file. + +# +# Binary format +# + +choice + prompt "Kernel binary format" + default BR2_LINUX_KERNEL_ZIMAGE if BR2_arm || BR2_armeb + +config BR2_LINUX_KERNEL_UIMAGE + bool "uImage" + depends on BR2_arc || BR2_arm || BR2_armeb || \ + BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le || \ + BR2_sh || BR2_mips || BR2_mipsel || \ + BR2_mips64 || BR2_mips64el || BR2_xtensa + select BR2_PACKAGE_HOST_UBOOT_TOOLS + +config BR2_LINUX_KERNEL_APPENDED_UIMAGE + bool "uImage with appended DT" + depends on BR2_arm || BR2_armeb + select BR2_LINUX_KERNEL_DTS_SUPPORT + select BR2_LINUX_KERNEL_APPENDED_DTB + select BR2_PACKAGE_HOST_UBOOT_TOOLS + +config BR2_LINUX_KERNEL_BZIMAGE + bool "bzImage" + depends on BR2_i386 || BR2_x86_64 || BR2_s390x + +config BR2_LINUX_KERNEL_ZIMAGE + bool "zImage" + depends on BR2_arm || BR2_armeb || BR2_powerpc || \ + BR2_powerpc64 || BR2_powerpc64le || BR2_sparc || \ + BR2_sh || BR2_xtensa + +config BR2_LINUX_KERNEL_ZIMAGE_EPAPR + bool "zImage.epapr" + depends on BR2_powerpc64 || BR2_powerpc64le + +config BR2_LINUX_KERNEL_APPENDED_ZIMAGE + bool "zImage with appended DT" + depends on BR2_arm || BR2_armeb + select BR2_LINUX_KERNEL_DTS_SUPPORT + select BR2_LINUX_KERNEL_APPENDED_DTB + +config BR2_LINUX_KERNEL_CUIMAGE + bool "cuImage" + depends on BR2_powerpc + select BR2_PACKAGE_HOST_UBOOT_TOOLS + select BR2_LINUX_KERNEL_DTS_SUPPORT + select BR2_LINUX_KERNEL_DTB_IS_SELF_BUILT + +config BR2_LINUX_KERNEL_SIMPLEIMAGE + bool "simpleImage" + depends on BR2_microblaze + select BR2_PACKAGE_HOST_UBOOT_TOOLS + select BR2_LINUX_KERNEL_DTS_SUPPORT + select BR2_LINUX_KERNEL_DTB_IS_SELF_BUILT + +config BR2_LINUX_KERNEL_IMAGE + bool "Image" + depends on BR2_aarch64 || BR2_riscv + +config BR2_LINUX_KERNEL_IMAGEGZ + bool "Image.gz" + depends on BR2_aarch64 || BR2_riscv + +config BR2_LINUX_KERNEL_LINUX_BIN + bool "linux.bin" + depends on BR2_microblaze + select BR2_PACKAGE_HOST_UBOOT_TOOLS + +config BR2_LINUX_KERNEL_VMLINUX_BIN + bool "vmlinux.bin" + depends on BR2_mips || BR2_mipsel || BR2_sh + +config BR2_LINUX_KERNEL_VMLINUX + bool "vmlinux" + +config BR2_LINUX_KERNEL_VMLINUZ + bool "vmlinuz" + depends on BR2_mips || BR2_mipsel + +config BR2_LINUX_KERNEL_VMLINUZ_BIN + bool "vmlinuz.bin" + depends on BR2_mips || BR2_mipsel + +config BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM + bool "custom target" + help + For certain cases a board-specific target image must be + used. For example, on powerPC where the OpenFirmware + description is attached in a board-specific kernel image + target like 'cuImage.mpc8379_rdb'. + + Select this option and specify the make target in "Kernel + image target name". + +endchoice + +# +# Kernel compression format +# + +choice + prompt "Kernel compression format" + help + This selection will just ensure that the correct host tools + are built. The actual compression for the kernel should be + selected in the kernel configuration menu. + +config BR2_LINUX_KERNEL_GZIP + bool "gzip compression" + +config BR2_LINUX_KERNEL_LZ4 + bool "lz4 compression" + +config BR2_LINUX_KERNEL_LZMA + bool "lzma compression" + +config BR2_LINUX_KERNEL_LZO + bool "lzo compression" + +config BR2_LINUX_KERNEL_XZ + bool "xz compression" + +config BR2_LINUX_KERNEL_ZSTD + bool "zstd compression" + +config BR2_LINUX_KERNEL_UNCOMPRESSED + bool "uncompressed" + depends on BR2_s390x + +endchoice + +config BR2_LINUX_KERNEL_IMAGE_TARGET_NAME + string "Kernel image target name" + depends on BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM + help + Specify the kernel make target to build the kernel that you + need. + +config BR2_LINUX_KERNEL_IMAGE_NAME + string "Kernel image name" + depends on BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM + help + The filename of the kernel image, if it is different from + the make target (above). Defaults to + BR2_LINUX_KERNEL_IMAGE_TARGET_NAME. If specified, the + filename is relative to arch/ARCH/boot/. + + If unsure, leave it empty. + +config BR2_LINUX_KERNEL_UIMAGE_LOADADDR + string "load address (for 3.7+ multi-platform image)" + depends on BR2_arm || BR2_armeb + depends on BR2_LINUX_KERNEL_UIMAGE || BR2_LINUX_KERNEL_APPENDED_UIMAGE + help + If your ARM system's Linux kernel is configured with the new + (3.7+) multi-architecture support (CONFIG_ARCH_MULTIPLATFORM=y + in your kernel config), then it is necessary to specify a + kernel load address when building the uImage. This should be a + hexadecimal string beginning with 0x, for example: 0x00008000. + + If unsure, let this option empty. + +config BR2_LINUX_KERNEL_DTS_SUPPORT + bool "Build a Device Tree Blob (DTB)" + help + Compile one or more device tree sources into device tree + blobs. + Select the dts files to compile in the options below. + +if BR2_LINUX_KERNEL_DTS_SUPPORT + +# We have mainly three cases when it comes to device tree support: +# 1) We don't want any support at all. Then the ..DTS_SUPPORT +# variable won't be set +# 2) We want device tree support, so we need the user to enter the +# device tree name or the path to the custom device he uses, but +# the kernel abstracts this from us and only build an image that +# looks like a regular kernel image. In this case, we only need +# to derive the kernel image name from the given device tree +# name, and all the rest is as usual +# 3) We want device tree support, but the kernel requires us to +# build the device tree blob separately. In this case, some +# more logic will be needed. +# The variable below address the second case, were you only want +# limited actions from buildroot. +config BR2_LINUX_KERNEL_DTB_IS_SELF_BUILT + bool "DTB is built by kernel itself" + help + Normally, the device tree(s) to be built have to be passed + explicitly to the kernel build system. For some binary + formats, however, the kernel build system links in the + device tree directly in the kernel binary. Select this option + if you have such a kernel binary format. + +config BR2_LINUX_KERNEL_APPENDED_DTB + bool + +config BR2_LINUX_KERNEL_INTREE_DTS_NAME + string "In-tree Device Tree Source file names" + help + Name of in-tree device tree source file, without + the trailing .dts. You can provide a list of + dts files to build, separated by spaces. + +config BR2_LINUX_KERNEL_CUSTOM_DTS_PATH + string "Out-of-tree Device Tree Source file paths" + help + Path to to out-of-tree device tree source files. + You can provide a list of dts paths to copy and + build, separated by spaces. + +config BR2_LINUX_KERNEL_DTB_KEEP_DIRNAME + bool "Keep the directory name of the Device Tree" + help + If enabled, the device tree blobs keep their + directory prefixes when they get copied to the + output image directory or the target directory. + +config BR2_LINUX_KERNEL_DTB_OVERLAY_SUPPORT + bool "Build Device Tree with overlay support" + help + If enabled, pass the "-@" option to dtc, such that + symbols are generated in the compiled Device Tree. + Choose this option to support Device Tree overlays + on the target system. + +endif + +config BR2_LINUX_KERNEL_INSTALL_TARGET + bool "Install kernel image to /boot in target" + depends on !BR2_TARGET_ROOTFS_INITRAMFS + help + Select this option to have the kernel image installed to + /boot in the target root filesystem, as is typically done on + x86/x86_64 systems. + + Note that this option also installs the Device Tree Blobs to + /boot if DTBs have been generated by the kernel build + process. + +config BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL + bool "Needs host OpenSSL" + help + Some Linux kernel configuration options (such as + CONFIG_SYSTEM_TRUSTED_KEYRING) require building a host + program called extract-cert, which itself needs + OpenSSL. Enabling this option will ensure host-openssl gets + built before the Linux kernel. + + Enable this option if you get a Linux kernel build failure + such as "scripts/extract-cert.c:21:25: fatal error: + openssl/bio.h: No such file or directory". + +config BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF + bool "Needs host libelf" + help + Some Linux kernel configuration options (such as + CONFIG_UNWINDER_ORC) require building a host program that + needs libelf. Enabling this option will ensure host-elfutils + (which provides libelf) gets built before the Linux kernel. + + Enable this option if you get a Linux kernel build failure + such as "Cannot generate ORC metadata for + CONFIG_UNWINDER_ORC=y, please install libelf-dev, + libelf-devel or elfutils-libelf-devel". + +# Linux extensions +source "linux/Config.ext.in" + +# Linux tools +source "package/linux-tools/Config.in" + +endif # BR2_LINUX_KERNEL + +endmenu diff --git a/linux/linux-ext-aufs.mk b/linux/linux-ext-aufs.mk new file mode 100644 index 00000000..d4bbb071 --- /dev/null +++ b/linux/linux-ext-aufs.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# Patch the linux kernel with aufs extension +# +################################################################################ + +LINUX_EXTENSIONS += aufs + +define AUFS_PREPARE_KERNEL + if test -d $(@D)/fs/aufs/; then \ + echo "Your kernel already supports AUFS."; \ + exit 1; \ + fi + $(APPLY_PATCHES) $(@D) $(AUFS_DIR) \ + aufs$(BR2_PACKAGE_AUFS_SERIES)-kbuild.patch \ + aufs$(BR2_PACKAGE_AUFS_SERIES)-base.patch \ + aufs$(BR2_PACKAGE_AUFS_SERIES)-mmap.patch \ + aufs$(BR2_PACKAGE_AUFS_SERIES)-standalone.patch + cp -r $(AUFS_DIR)/fs/aufs/ $(@D)/fs/ + cp $(AUFS_DIR)/include/uapi/linux/aufs_type.h $(@D)/include/uapi/linux/ +endef diff --git a/linux/linux-ext-ev3dev-linux-drivers.mk b/linux/linux-ext-ev3dev-linux-drivers.mk new file mode 100644 index 00000000..3bb12db3 --- /dev/null +++ b/linux/linux-ext-ev3dev-linux-drivers.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# Patch the linux kernel with ev3dev extension +# +################################################################################ + +LINUX_EXTENSIONS += ev3dev-linux-drivers + +define EV3DEV_LINUX_DRIVERS_PREPARE_KERNEL + mkdir -p $(LINUX_DIR)/drivers/lego + cp -dpfr $(EV3DEV_LINUX_DRIVERS_DIR)/* $(LINUX_DIR)/drivers/lego/ +endef diff --git a/linux/linux-ext-fbtft.mk b/linux/linux-ext-fbtft.mk new file mode 100644 index 00000000..cbc9c58e --- /dev/null +++ b/linux/linux-ext-fbtft.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# Patch the linux kernel with fbtft extension +# +################################################################################ + +LINUX_EXTENSIONS += fbtft + +# for linux >= 3.15 install to drivers/video/fbdev/fbtft +# for linux < 3.15 install to drivers/video/fbtft +define FBTFT_PREPARE_KERNEL + if [ -e $(LINUX_DIR)/drivers/video/fbdev ]; then \ + dest=drivers/video/fbdev ; \ + else \ + dest=drivers/video ; \ + fi ; \ + mkdir -p $(LINUX_DIR)/$${dest}/fbtft; \ + cp -dpfr $(FBTFT_DIR)/* $(LINUX_DIR)/$${dest}/fbtft/ ; \ + echo "source \"$${dest}/fbtft/Kconfig\"" \ + >> $(LINUX_DIR)/$${dest}/Kconfig ; \ + echo 'obj-y += fbtft/' >> $(LINUX_DIR)/$${dest}/Makefile +endef diff --git a/linux/linux-ext-rtai.mk b/linux/linux-ext-rtai.mk new file mode 100644 index 00000000..50f79f8d --- /dev/null +++ b/linux/linux-ext-rtai.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# Patch the linux kernel with RTAI extension +# +################################################################################ + +LINUX_EXTENSIONS += rtai + +ifeq ($(KERNEL_ARCH),i386) +RTAI_ARCH = x86 +else ifeq ($(KERNEL_ARCH),x86_64) +RTAI_ARCH = x86 +else ifeq ($(KERNEL_ARCH),powerpc) +RTAI_ARCH = ppc +else +RTAI_ARCH = $(KERNEL_ARCH) +endif + +# Prepare kernel patch +define RTAI_PREPARE_KERNEL + kver=`$(MAKE) $(LINUX_MAKE_FLAGS) -C $(LINUX_DIR) --no-print-directory -s kernelversion` ; \ + if test -f $(RTAI_DIR)/base/arch/$(RTAI_ARCH)/patches/hal-linux-$${kver}-*patch ; then \ + $(APPLY_PATCHES) $(LINUX_DIR) \ + $(RTAI_DIR)/base/arch/$(RTAI_ARCH)/patches/ \ + hal-linux-$${kver}-*patch ; \ + else \ + echo "No RTAI patch for your kernel version" ; \ + exit 1 ; \ + fi +endef diff --git a/linux/linux-ext-xenomai.mk b/linux/linux-ext-xenomai.mk new file mode 100644 index 00000000..5ec6891b --- /dev/null +++ b/linux/linux-ext-xenomai.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# Patch the linux kernel with Adeos/Xenomai extension +# +################################################################################ + +LINUX_EXTENSIONS += xenomai + +# Adeos patch version +XENOMAI_ADEOS_PATCH = $(call qstrip,$(BR2_LINUX_KERNEL_EXT_XENOMAI_ADEOS_PATCH)) + +ifneq ($(filter ftp://% http://% https://%,$(XENOMAI_ADEOS_PATCH)),) +XENOMAI_ADEOS_PATCH_NAME = $(notdir $(XENOMAI_ADEOS_PATCH)) +XENOMAI_ADEOS_PATCH_PATH = $(LINUX_DL_DIR)/$(XENOMAI_ADEOS_PATCH_NAME) +# check-package TypoInPackageVariable +LINUX_EXTRA_DOWNLOADS += $(XENOMAI_ADEOS_PATCH) +BR_NO_CHECK_HASH_FOR += $(XENOMAI_ADEOS_PATCH_NAME) +else +XENOMAI_ADEOS_PATCH_PATH = $(XENOMAI_ADEOS_PATCH) +endif + +ifeq ($(XENOMAI_ADEOS_PATCH),) +XENOMAI_ADEOS_OPTS = --default +else +XENOMAI_ADEOS_OPTS = --adeos=$(XENOMAI_ADEOS_PATCH_PATH) +endif + +# Prepare kernel patch +define XENOMAI_PREPARE_KERNEL + $(XENOMAI_DIR)/scripts/prepare-kernel.sh \ + --linux=$(LINUX_DIR) \ + --arch=$(KERNEL_ARCH) \ + $(XENOMAI_ADEOS_OPTS) \ + --verbose +endef diff --git a/linux/linux.hash b/linux/linux.hash new file mode 100644 index 00000000..2b0240e0 --- /dev/null +++ b/linux/linux.hash @@ -0,0 +1,16 @@ +# From https://www.kernel.org/pub/linux/kernel/v5.x/sha256sums.asc +sha256 00bbaeaac17f82d9a6d93cbc42cafd39d3b2fa3a6087333503d2344fa5e3142d linux-5.10.57.tar.xz +sha256 0471d0ccb7953cdae7d235192588ac5d72344851969962676d1703e69084a37f linux-5.4.139.tar.xz +# From https://www.kernel.org/pub/linux/kernel/v4.x/sha256sums.asc +sha256 4bdf66494be66a1da857f09b40b95026a0388e373fb01a206c60f67834746cb4 linux-4.4.279.tar.xz +sha256 21edb57dea0fe04a51fcfb6d4e8c0c052787a20015bc74a0a0e63329601f2e07 linux-4.9.279.tar.xz +sha256 7f235d454d703112e86574150652807f42abead92f3837da32ea86b4f148b371 linux-4.14.243.tar.xz +sha256 f2827d0506622fcae0dae0bc72b2f016469210f50c2d3dd1bdd1211a813dca27 linux-4.19.202.tar.xz +# Locally computed +sha256 9f1de83c5c2bb582a33bd4ee892d45671901cd06af9dc159f0f499f1b5265b20 linux-cip-4.19.182-cip45.tar.gz +sha256 0eeba6d6ecc45cf8f16458842b64d22e7064b9de9c31c11d1c395b08a47e3855 linux-cip-4.19.165-cip41-rt18.tar.gz + +# Licenses hashes +sha256 fb5a425bd3b3cd6071a3a9aff9909a859e7c1158d54d32e07658398cd67eb6a0 COPYING +sha256 f6b78c087c3ebdf0f3c13415070dd480a3f35d8fc76f3d02180a407c1c812f79 LICENSES/preferred/GPL-2.0 +sha256 8e378ab93586eb55135d3bc119cce787f7324f48394777d00c34fa3d0be3303f LICENSES/exceptions/Linux-syscall-note diff --git a/linux/linux.mk b/linux/linux.mk new file mode 100644 index 00000000..7114c8d2 --- /dev/null +++ b/linux/linux.mk @@ -0,0 +1,591 @@ +################################################################################ +# +# Linux kernel target +# +################################################################################ + +LINUX_VERSION = $(call qstrip,$(BR2_LINUX_KERNEL_VERSION)) +LINUX_LICENSE = GPL-2.0 +ifeq ($(BR2_LINUX_KERNEL_LATEST_VERSION),y) +LINUX_LICENSE_FILES = \ + COPYING \ + LICENSES/preferred/GPL-2.0 \ + LICENSES/exceptions/Linux-syscall-note +endif +LINUX_CPE_ID_VENDOR = linux +LINUX_CPE_ID_PRODUCT = linux_kernel +LINUX_CPE_ID_PREFIX = cpe:2.3:o + +define LINUX_HELP_CMDS + @echo ' linux-menuconfig - Run Linux kernel menuconfig' + @echo ' linux-savedefconfig - Run Linux kernel savedefconfig' + @echo ' linux-update-defconfig - Save the Linux configuration to the path specified' + @echo ' by BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE' +endef + +# Compute LINUX_SOURCE and LINUX_SITE from the configuration +ifeq ($(BR2_LINUX_KERNEL_CUSTOM_TARBALL),y) +LINUX_TARBALL = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION)) +LINUX_SITE = $(patsubst %/,%,$(dir $(LINUX_TARBALL))) +LINUX_SOURCE = $(notdir $(LINUX_TARBALL)) +else ifeq ($(BR2_LINUX_KERNEL_CUSTOM_GIT),y) +LINUX_SITE = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_REPO_URL)) +LINUX_SITE_METHOD = git +else ifeq ($(BR2_LINUX_KERNEL_CUSTOM_HG),y) +LINUX_SITE = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_REPO_URL)) +LINUX_SITE_METHOD = hg +else ifeq ($(BR2_LINUX_KERNEL_CUSTOM_SVN),y) +LINUX_SITE = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_REPO_URL)) +LINUX_SITE_METHOD = svn +else ifeq ($(BR2_LINUX_KERNEL_LATEST_CIP_VERSION)$(BR2_LINUX_KERNEL_LATEST_CIP_RT_VERSION),y) +LINUX_SOURCE = linux-cip-$(LINUX_VERSION).tar.gz +LINUX_SITE = https://git.kernel.org/pub/scm/linux/kernel/git/cip/linux-cip.git/snapshot +else ifneq ($(findstring -rc,$(LINUX_VERSION)),) +# Since 4.12-rc1, -rc kernels are generated from cgit. This also works for +# older -rc kernels. +LINUX_SITE = https://git.kernel.org/torvalds/t +else +LINUX_SOURCE = linux-$(LINUX_VERSION).tar.xz +ifeq ($(findstring x2.6.,x$(LINUX_VERSION)),x2.6.) +LINUX_SITE = $(BR2_KERNEL_MIRROR)/linux/kernel/v2.6 +else +LINUX_SITE = $(BR2_KERNEL_MIRROR)/linux/kernel/v$(firstword $(subst ., ,$(LINUX_VERSION))).x +endif +endif + +ifeq ($(BR2_LINUX_KERNEL)$(BR2_LINUX_KERNEL_LATEST_VERSION),y) +BR_NO_CHECK_HASH_FOR += $(LINUX_SOURCE) +endif + +LINUX_PATCHES = $(call qstrip,$(BR2_LINUX_KERNEL_PATCH)) + +# We have no way to know the hashes for user-supplied patches. +BR_NO_CHECK_HASH_FOR += $(notdir $(LINUX_PATCHES)) + +# We rely on the generic package infrastructure to download and apply +# remote patches (downloaded from ftp, http or https). For local +# patches, we can't rely on that infrastructure, because there might +# be directories in the patch list (unlike for other packages). +LINUX_PATCH = $(filter ftp://% http://% https://%,$(LINUX_PATCHES)) + +# while the kernel is built for the target, the build may need various +# host libraries depending on config (and version), so use +# HOST_MAKE_ENV here. In particular, this ensures that our +# host-pkgconf will look for host libraries and not target ones. +LINUX_MAKE_ENV = \ + $(HOST_MAKE_ENV) \ + BR_BINARIES_DIR=$(BINARIES_DIR) + +LINUX_INSTALL_IMAGES = YES +LINUX_DEPENDENCIES = host-kmod \ + $(if $(BR2_PACKAGE_INTEL_MICROCODE),intel-microcode) + +# Starting with 4.16, the generated kconfig paser code is no longer +# shipped with the kernel sources, so we need flex and bison, but +# only if the host does not have them. +LINUX_KCONFIG_DEPENDENCIES = \ + $(BR2_BISON_HOST_DEPENDENCY) \ + $(BR2_FLEX_HOST_DEPENDENCY) + +# Starting with 4.18, the kconfig in the kernel calls the +# cross-compiler to check its capabilities. So we need the +# toolchain before we can call the configurators. +LINUX_KCONFIG_DEPENDENCIES += toolchain + +# host tools needed for kernel compression +ifeq ($(BR2_LINUX_KERNEL_LZ4),y) +LINUX_DEPENDENCIES += host-lz4 +else ifeq ($(BR2_LINUX_KERNEL_LZMA),y) +LINUX_DEPENDENCIES += host-lzma +else ifeq ($(BR2_LINUX_KERNEL_LZO),y) +LINUX_DEPENDENCIES += host-lzop +else ifeq ($(BR2_LINUX_KERNEL_XZ),y) +LINUX_DEPENDENCIES += host-xz +else ifeq ($(BR2_LINUX_KERNEL_ZSTD),y) +LINUX_DEPENDENCIES += host-zstd +endif +LINUX_COMPRESSION_OPT_$(BR2_LINUX_KERNEL_GZIP) += CONFIG_KERNEL_GZIP +LINUX_COMPRESSION_OPT_$(BR2_LINUX_KERNEL_LZ4) += CONFIG_KERNEL_LZ4 +LINUX_COMPRESSION_OPT_$(BR2_LINUX_KERNEL_LZMA) += CONFIG_KERNEL_LZMA +LINUX_COMPRESSION_OPT_$(BR2_LINUX_KERNEL_LZO) += CONFIG_KERNEL_LZO +LINUX_COMPRESSION_OPT_$(BR2_LINUX_KERNEL_XZ) += CONFIG_KERNEL_XZ +LINUX_COMPRESSION_OPT_$(BR2_LINUX_KERNEL_ZSTD) += CONFIG_KERNEL_ZSTD +LINUX_COMPRESSION_OPT_$(BR2_LINUX_KERNEL_UNCOMPRESSED) += CONFIG_KERNEL_UNCOMPRESSED + +ifeq ($(BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL),y) +LINUX_DEPENDENCIES += host-openssl +endif + +ifeq ($(BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF),y) +LINUX_DEPENDENCIES += host-elfutils host-pkgconf +endif + +# If host-uboot-tools is selected by the user, assume it is needed to +# create a custom image +ifeq ($(BR2_PACKAGE_HOST_UBOOT_TOOLS),y) +LINUX_DEPENDENCIES += host-uboot-tools +endif + +ifneq ($(ARCH_XTENSA_OVERLAY_FILE),) +define LINUX_XTENSA_OVERLAY_EXTRACT + $(call arch-xtensa-overlay-extract,$(@D),linux) +endef +LINUX_POST_EXTRACT_HOOKS += LINUX_XTENSA_OVERLAY_EXTRACT +LINUX_EXTRA_DOWNLOADS += $(ARCH_XTENSA_OVERLAY_URL) +endif + +# We don't want to run depmod after installing the kernel. It's done in a +# target-finalize hook, to encompass modules installed by packages. +LINUX_MAKE_FLAGS = \ + HOSTCC="$(HOSTCC) $(HOST_CFLAGS) $(HOST_LDFLAGS)" \ + ARCH=$(KERNEL_ARCH) \ + INSTALL_MOD_PATH=$(TARGET_DIR) \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + DEPMOD=$(HOST_DIR)/sbin/depmod + +ifeq ($(BR2_REPRODUCIBLE),y) +LINUX_MAKE_ENV += \ + KBUILD_BUILD_VERSION=1 \ + KBUILD_BUILD_USER=buildroot \ + KBUILD_BUILD_HOST=buildroot \ + KBUILD_BUILD_TIMESTAMP="$(shell LC_ALL=C date -d @$(SOURCE_DATE_EPOCH))" +endif + +# gcc-8 started warning about function aliases that have a +# non-matching prototype. This seems rather useful in general, but it +# causes tons of warnings in the Linux kernel, where we rely on +# abusing those aliases for system call entry points, in order to +# sanitize the arguments passed from user space in registers. +# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82435 +ifeq ($(BR2_TOOLCHAIN_GCC_AT_LEAST_8),y) +LINUX_MAKE_ENV += KCFLAGS=-Wno-attribute-alias +endif + +ifeq ($(BR2_LINUX_KERNEL_DTB_OVERLAY_SUPPORT),y) +LINUX_MAKE_ENV += DTC_FLAGS=-@ +endif + +# Get the real Linux version, which tells us where kernel modules are +# going to be installed in the target filesystem. +# Filter out 'w' from MAKEFLAGS, to workaround a bug in make 4.1 (#13141) +LINUX_VERSION_PROBED = `MAKEFLAGS='$(filter-out w,$(MAKEFLAGS))' $(MAKE) $(LINUX_MAKE_FLAGS) -C $(LINUX_DIR) --no-print-directory -s kernelrelease 2>/dev/null` + +LINUX_DTS_NAME += $(call qstrip,$(BR2_LINUX_KERNEL_INTREE_DTS_NAME)) + +# We keep only the .dts files, so that the user can specify both .dts +# and .dtsi files in BR2_LINUX_KERNEL_CUSTOM_DTS_PATH. Both will be +# copied to arch//boot/dts, but only the .dts files will +# actually be generated as .dtb. +LINUX_DTS_NAME += $(basename $(filter %.dts,$(notdir $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_DTS_PATH))))) + +LINUX_DTBS = $(addsuffix .dtb,$(LINUX_DTS_NAME)) + +ifeq ($(BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM),y) +LINUX_IMAGE_NAME = $(call qstrip,$(BR2_LINUX_KERNEL_IMAGE_NAME)) +LINUX_TARGET_NAME = $(call qstrip,$(BR2_LINUX_KERNEL_IMAGE_TARGET_NAME)) +ifeq ($(LINUX_IMAGE_NAME),) +LINUX_IMAGE_NAME = $(LINUX_TARGET_NAME) +endif +else +ifeq ($(BR2_LINUX_KERNEL_UIMAGE),y) +LINUX_IMAGE_NAME = uImage +else ifeq ($(BR2_LINUX_KERNEL_APPENDED_UIMAGE),y) +LINUX_IMAGE_NAME = uImage +else ifeq ($(BR2_LINUX_KERNEL_BZIMAGE),y) +LINUX_IMAGE_NAME = bzImage +else ifeq ($(BR2_LINUX_KERNEL_ZIMAGE),y) +LINUX_IMAGE_NAME = zImage +else ifeq ($(BR2_LINUX_KERNEL_ZIMAGE_EPAPR),y) +LINUX_IMAGE_NAME = zImage.epapr +else ifeq ($(BR2_LINUX_KERNEL_APPENDED_ZIMAGE),y) +LINUX_IMAGE_NAME = zImage +else ifeq ($(BR2_LINUX_KERNEL_CUIMAGE),y) +LINUX_IMAGE_NAME = cuImage.$(firstword $(LINUX_DTS_NAME)) +else ifeq ($(BR2_LINUX_KERNEL_SIMPLEIMAGE),y) +LINUX_IMAGE_NAME = simpleImage.$(firstword $(LINUX_DTS_NAME)) +else ifeq ($(BR2_LINUX_KERNEL_IMAGE),y) +LINUX_IMAGE_NAME = Image +else ifeq ($(BR2_LINUX_KERNEL_IMAGEGZ),y) +LINUX_IMAGE_NAME = Image.gz +else ifeq ($(BR2_LINUX_KERNEL_LINUX_BIN),y) +LINUX_IMAGE_NAME = linux.bin +else ifeq ($(BR2_LINUX_KERNEL_VMLINUX_BIN),y) +LINUX_IMAGE_NAME = vmlinux.bin +else ifeq ($(BR2_LINUX_KERNEL_VMLINUX),y) +LINUX_IMAGE_NAME = vmlinux +else ifeq ($(BR2_LINUX_KERNEL_VMLINUZ),y) +LINUX_IMAGE_NAME = vmlinuz +else ifeq ($(BR2_LINUX_KERNEL_VMLINUZ_BIN),y) +LINUX_IMAGE_NAME = vmlinuz.bin +endif +# The if-else blocks above are all the image types we know of, and all +# come from a Kconfig choice, so we know we have LINUX_IMAGE_NAME set +# to something +LINUX_TARGET_NAME = $(LINUX_IMAGE_NAME) +endif + +LINUX_KERNEL_UIMAGE_LOADADDR = $(call qstrip,$(BR2_LINUX_KERNEL_UIMAGE_LOADADDR)) +ifneq ($(LINUX_KERNEL_UIMAGE_LOADADDR),) +LINUX_MAKE_FLAGS += LOADADDR="$(LINUX_KERNEL_UIMAGE_LOADADDR)" +endif + +# Compute the arch path, since i386 and x86_64 are in arch/x86 and not +# in arch/$(KERNEL_ARCH). Even if the kernel creates symbolic links +# for bzImage, arch/i386 and arch/x86_64 do not exist when copying the +# defconfig file. +ifeq ($(KERNEL_ARCH),i386) +LINUX_ARCH_PATH = $(LINUX_DIR)/arch/x86 +else ifeq ($(KERNEL_ARCH),x86_64) +LINUX_ARCH_PATH = $(LINUX_DIR)/arch/x86 +else +LINUX_ARCH_PATH = $(LINUX_DIR)/arch/$(KERNEL_ARCH) +endif + +ifeq ($(BR2_LINUX_KERNEL_VMLINUX),y) +LINUX_IMAGE_PATH = $(LINUX_DIR)/$(LINUX_IMAGE_NAME) +else ifeq ($(BR2_LINUX_KERNEL_VMLINUZ),y) +LINUX_IMAGE_PATH = $(LINUX_DIR)/$(LINUX_IMAGE_NAME) +else ifeq ($(BR2_LINUX_KERNEL_VMLINUZ_BIN),y) +LINUX_IMAGE_PATH = $(LINUX_DIR)/$(LINUX_IMAGE_NAME) +else +LINUX_IMAGE_PATH = $(LINUX_ARCH_PATH)/boot/$(LINUX_IMAGE_NAME) +endif # BR2_LINUX_KERNEL_VMLINUX + +define LINUX_APPLY_LOCAL_PATCHES + for p in $(filter-out ftp://% http://% https://%,$(LINUX_PATCHES)) ; do \ + if test -d $$p ; then \ + $(APPLY_PATCHES) $(@D) $$p \*.patch || exit 1 ; \ + else \ + $(APPLY_PATCHES) $(@D) `dirname $$p` `basename $$p` || exit 1; \ + fi \ + done +endef + +LINUX_POST_PATCH_HOOKS += LINUX_APPLY_LOCAL_PATCHES + +# Older linux kernels use deprecated perl constructs in timeconst.pl +# that were removed for perl 5.22+ so it breaks on newer distributions +# Try a dry-run patch to see if this applies, if it does go ahead +define LINUX_TRY_PATCH_TIMECONST + @if patch -p1 --dry-run -f -s -d $(@D) <$(LINUX_PKGDIR)/0001-timeconst.pl-Eliminate-Perl-warning.patch.conditional >/dev/null ; then \ + $(APPLY_PATCHES) $(@D) $(LINUX_PKGDIR) 0001-timeconst.pl-Eliminate-Perl-warning.patch.conditional ; \ + fi +endef +LINUX_POST_PATCH_HOOKS += LINUX_TRY_PATCH_TIMECONST + +LINUX_KERNEL_CUSTOM_LOGO_PATH = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_LOGO_PATH)) +ifneq ($(LINUX_KERNEL_CUSTOM_LOGO_PATH),) +LINUX_DEPENDENCIES += host-imagemagick +define LINUX_KERNEL_CUSTOM_LOGO_CONVERT + $(HOST_DIR)/bin/convert $(LINUX_KERNEL_CUSTOM_LOGO_PATH) \ + -dither None -colors 224 -compress none \ + $(LINUX_DIR)/drivers/video/logo/logo_linux_clut224.ppm +endef +LINUX_PRE_BUILD_HOOKS += LINUX_KERNEL_CUSTOM_LOGO_CONVERT +endif + +ifeq ($(BR2_LINUX_KERNEL_USE_DEFCONFIG),y) +LINUX_KCONFIG_DEFCONFIG = $(call qstrip,$(BR2_LINUX_KERNEL_DEFCONFIG))_defconfig +else ifeq ($(BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG),y) +LINUX_KCONFIG_DEFCONFIG = defconfig +else ifeq ($(BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG),y) +LINUX_KCONFIG_FILE = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE)) +endif +LINUX_KCONFIG_FRAGMENT_FILES = $(call qstrip,$(BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES)) +LINUX_KCONFIG_EDITORS = menuconfig xconfig gconfig nconfig + +# LINUX_MAKE_FLAGS overrides HOSTCC to allow the kernel build to find +# our host-openssl and host-libelf. However, this triggers a bug in +# the kconfig build script that causes it to build with +# /usr/include/ncurses.h (which is typically wchar) but link with +# $(HOST_DIR)/lib/libncurses.so (which is not). We don't actually +# need any host-package for kconfig, so remove the HOSTCC override +# again. In addition, even though linux depends on the toolchain and +# therefore host-ccache would be ready, we use HOSTCC_NOCCACHE for +# consistency with other kconfig packages. +LINUX_KCONFIG_OPTS = $(LINUX_MAKE_FLAGS) HOSTCC="$(HOSTCC_NOCCACHE)" + +# If no package has yet set it, set it from the Kconfig option +LINUX_NEEDS_MODULES ?= $(BR2_LINUX_NEEDS_MODULES) + +# Make sure the Linux kernel is built with the right endianness. Not +# all architectures support +# CONFIG_CPU_BIG_ENDIAN/CONFIG_CPU_LITTLE_ENDIAN in Linux, but the +# option will be thrown away and ignored if it doesn't exist. +ifeq ($(BR2_ENDIAN),"BIG") +define LINUX_FIXUP_CONFIG_ENDIANNESS + $(call KCONFIG_ENABLE_OPT,CONFIG_CPU_BIG_ENDIAN) +endef +else +define LINUX_FIXUP_CONFIG_ENDIANNESS + $(call KCONFIG_ENABLE_OPT,CONFIG_CPU_LITTLE_ENDIAN) +endef +endif + +define LINUX_KCONFIG_FIXUP_CMDS + $(if $(LINUX_NEEDS_MODULES), + $(call KCONFIG_ENABLE_OPT,CONFIG_MODULES)) + $(call KCONFIG_ENABLE_OPT,$(strip $(LINUX_COMPRESSION_OPT_y))) + $(foreach opt, $(LINUX_COMPRESSION_OPT_), + $(call KCONFIG_DISABLE_OPT,$(opt)) + ) + $(LINUX_FIXUP_CONFIG_ENDIANNESS) + $(if $(BR2_arm)$(BR2_armeb), + $(call KCONFIG_ENABLE_OPT,CONFIG_AEABI)) + $(if $(BR2_powerpc)$(BR2_powerpc64)$(BR2_powerpc64le), + $(call KCONFIG_ENABLE_OPT,CONFIG_PPC_DISABLE_WERROR)) + $(if $(BR2_ARC_PAGE_SIZE_4K), + $(call KCONFIG_ENABLE_OPT,CONFIG_ARC_PAGE_SIZE_4K) + $(call KCONFIG_DISABLE_OPT,CONFIG_ARC_PAGE_SIZE_8K) + $(call KCONFIG_DISABLE_OPT,CONFIG_ARC_PAGE_SIZE_16K)) + $(if $(BR2_ARC_PAGE_SIZE_8K), + $(call KCONFIG_DISABLE_OPT,CONFIG_ARC_PAGE_SIZE_4K) + $(call KCONFIG_ENABLE_OPT,CONFIG_ARC_PAGE_SIZE_8K) + $(call KCONFIG_DISABLE_OPT,CONFIG_ARC_PAGE_SIZE_16K)) + $(if $(BR2_ARC_PAGE_SIZE_16K), + $(call KCONFIG_DISABLE_OPT,CONFIG_ARC_PAGE_SIZE_4K) + $(call KCONFIG_DISABLE_OPT,CONFIG_ARC_PAGE_SIZE_8K) + $(call KCONFIG_ENABLE_OPT,CONFIG_ARC_PAGE_SIZE_16K)) + $(if $(BR2_TARGET_ROOTFS_CPIO), + $(call KCONFIG_ENABLE_OPT,CONFIG_BLK_DEV_INITRD)) + # As the kernel gets compiled before root filesystems are + # built, we create a fake cpio file. It'll be + # replaced later by the real cpio archive, and the kernel will be + # rebuilt using the linux-rebuild-with-initramfs target. + $(if $(BR2_TARGET_ROOTFS_INITRAMFS), + mkdir -p $(BINARIES_DIR) + touch $(BINARIES_DIR)/rootfs.cpio + $(call KCONFIG_SET_OPT,CONFIG_INITRAMFS_SOURCE,"$${BR_BINARIES_DIR}/rootfs.cpio") + $(call KCONFIG_SET_OPT,CONFIG_INITRAMFS_ROOT_UID,0) + $(call KCONFIG_SET_OPT,CONFIG_INITRAMFS_ROOT_GID,0)) + $(if $(BR2_ROOTFS_DEVICE_CREATION_STATIC),, + $(call KCONFIG_ENABLE_OPT,CONFIG_DEVTMPFS) + $(call KCONFIG_ENABLE_OPT,CONFIG_DEVTMPFS_MOUNT)) + $(if $(BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV), + $(call KCONFIG_ENABLE_OPT,CONFIG_INOTIFY_USER)) + $(if $(BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV), + $(call KCONFIG_ENABLE_OPT,CONFIG_NET)) + $(if $(BR2_LINUX_KERNEL_APPENDED_DTB), + $(call KCONFIG_ENABLE_OPT,CONFIG_ARM_APPENDED_DTB)) + $(if $(LINUX_KERNEL_CUSTOM_LOGO_PATH), + $(call KCONFIG_ENABLE_OPT,CONFIG_FB) + $(call KCONFIG_ENABLE_OPT,CONFIG_LOGO) + $(call KCONFIG_ENABLE_OPT,CONFIG_LOGO_LINUX_CLUT224)) + $(call KCONFIG_DISABLE_OPT,CONFIG_GCC_PLUGINS) + $(PACKAGES_LINUX_CONFIG_FIXUPS) +endef + +ifeq ($(BR2_LINUX_KERNEL_DTS_SUPPORT),y) +# Starting with 4.17, the generated dtc parser code is no longer +# shipped with the kernel sources, so we need flex and bison. For +# reproducibility, we use our owns rather than the host ones. +LINUX_DEPENDENCIES += host-bison host-flex + +ifeq ($(BR2_LINUX_KERNEL_DTB_IS_SELF_BUILT),) +define LINUX_BUILD_DTB + $(LINUX_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) $(LINUX_DTBS) +endef +ifeq ($(BR2_LINUX_KERNEL_APPENDED_DTB),) +define LINUX_INSTALL_DTB + # dtbs moved from arch//boot to arch//boot/dts since 3.8-rc1 + $(foreach dtb,$(LINUX_DTBS), \ + install -D \ + $(or $(wildcard $(LINUX_ARCH_PATH)/boot/dts/$(dtb)),$(LINUX_ARCH_PATH)/boot/$(dtb)) \ + $(1)/$(if $(BR2_LINUX_KERNEL_DTB_KEEP_DIRNAME),$(dtb),$(notdir $(dtb))) + ) +endef +endif # BR2_LINUX_KERNEL_APPENDED_DTB +endif # BR2_LINUX_KERNEL_DTB_IS_SELF_BUILT +endif # BR2_LINUX_KERNEL_DTS_SUPPORT + +ifeq ($(BR2_LINUX_KERNEL_APPENDED_DTB),y) +# dtbs moved from arch/$ARCH/boot to arch/$ARCH/boot/dts since 3.8-rc1 +define LINUX_APPEND_DTB + (cd $(LINUX_ARCH_PATH)/boot; \ + for dtb in $(LINUX_DTS_NAME); do \ + if test -e $${dtb}.dtb ; then \ + dtbpath=$${dtb}.dtb ; \ + else \ + dtbpath=dts/$${dtb}.dtb ; \ + fi ; \ + cat zImage $${dtbpath} > zImage.$${dtb} || exit 1; \ + done) +endef +ifeq ($(BR2_LINUX_KERNEL_APPENDED_UIMAGE),y) +# We need to generate a new u-boot image that takes into +# account the extra-size added by the device tree at the end +# of the image. To do so, we first need to retrieve both load +# address and entry point for the kernel from the already +# generate uboot image before using mkimage -l. +LINUX_APPEND_DTB += ; \ + MKIMAGE_ARGS=`$(MKIMAGE) -l $(LINUX_IMAGE_PATH) |\ + sed -n -e 's/Image Name:[ ]*\(.*\)/-n \1/p' -e 's/Load Address:/-a/p' -e 's/Entry Point:/-e/p'`; \ + for dtb in $(LINUX_DTS_NAME); do \ + $(MKIMAGE) -A $(MKIMAGE_ARCH) -O linux \ + -T kernel -C none $${MKIMAGE_ARGS} \ + -d $(LINUX_ARCH_PATH)/boot/zImage.$${dtb} $(LINUX_IMAGE_PATH).$${dtb}; \ + done +endif +endif + +# Compilation. We make sure the kernel gets rebuilt when the +# configuration has changed. We call the 'all' and +# '$(LINUX_TARGET_NAME)' targets separately because calling them in +# the same $(MAKE) invocation has shown to cause parallel build +# issues. +# The call to disable gcc-plugins is a stop-gap measure: +# http://lists.busybox.net/pipermail/buildroot/2020-May/282727.html +define LINUX_BUILD_CMDS + $(call KCONFIG_DISABLE_OPT,CONFIG_GCC_PLUGINS) + $(foreach dts,$(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_DTS_PATH)), \ + cp -f $(dts) $(LINUX_ARCH_PATH)/boot/dts/ + ) + $(LINUX_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) all + $(LINUX_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) $(LINUX_TARGET_NAME) + $(LINUX_BUILD_DTB) + $(LINUX_APPEND_DTB) +endef + +ifeq ($(BR2_LINUX_KERNEL_APPENDED_DTB),y) +# When a DTB was appended, install the potential several images with +# appended DTBs. +define LINUX_INSTALL_IMAGE + mkdir -p $(1) + cp $(LINUX_ARCH_PATH)/boot/$(LINUX_IMAGE_NAME).* $(1) +endef +else +# Otherwise, just install the unique image generated by the kernel +# build process. +define LINUX_INSTALL_IMAGE + $(INSTALL) -m 0644 -D $(LINUX_IMAGE_PATH) $(1)/$(notdir $(LINUX_IMAGE_NAME)) +endef +endif + +ifeq ($(BR2_LINUX_KERNEL_INSTALL_TARGET),y) +define LINUX_INSTALL_KERNEL_IMAGE_TO_TARGET + $(call LINUX_INSTALL_IMAGE,$(TARGET_DIR)/boot) + $(call LINUX_INSTALL_DTB,$(TARGET_DIR)/boot) +endef +endif + +define LINUX_INSTALL_HOST_TOOLS + # Installing dtc (device tree compiler) as host tool, if selected + if grep -q "CONFIG_DTC=y" $(@D)/.config; then \ + $(INSTALL) -D -m 0755 $(@D)/scripts/dtc/dtc $(HOST_DIR)/bin/linux-dtc ; \ + $(if $(BR2_PACKAGE_HOST_DTC),,ln -sf linux-dtc $(HOST_DIR)/bin/dtc;) \ + fi +endef + +define LINUX_INSTALL_IMAGES_CMDS + $(call LINUX_INSTALL_IMAGE,$(BINARIES_DIR)) + $(call LINUX_INSTALL_DTB,$(BINARIES_DIR)) +endef + +ifeq ($(BR2_STRIP_strip),y) +LINUX_MAKE_FLAGS += INSTALL_MOD_STRIP=1 +endif + +define LINUX_INSTALL_TARGET_CMDS + $(LINUX_INSTALL_KERNEL_IMAGE_TO_TARGET) + # Install modules and remove symbolic links pointing to build + # directories, not relevant on the target + @if grep -q "CONFIG_MODULES=y" $(@D)/.config; then \ + $(LINUX_MAKE_ENV) $(MAKE1) $(LINUX_MAKE_FLAGS) -C $(@D) modules_install; \ + rm -f $(TARGET_DIR)/lib/modules/$(LINUX_VERSION_PROBED)/build ; \ + rm -f $(TARGET_DIR)/lib/modules/$(LINUX_VERSION_PROBED)/source ; \ + fi + $(LINUX_INSTALL_HOST_TOOLS) +endef + +# Run depmod in a target-finalize hook, to encompass modules installed by +# packages. +define LINUX_RUN_DEPMOD + if test -d $(TARGET_DIR)/lib/modules/$(LINUX_VERSION_PROBED) \ + && grep -q "CONFIG_MODULES=y" $(LINUX_DIR)/.config; then \ + $(HOST_DIR)/sbin/depmod -a -b $(TARGET_DIR) $(LINUX_VERSION_PROBED); \ + fi +endef +LINUX_TARGET_FINALIZE_HOOKS += LINUX_RUN_DEPMOD + +# Include all our extensions. +# +# Note: our package infrastructure uses the full-path of the last-scanned +# Makefile to determine what package we're currently defining, using the +# last directory component in the path. Additionally, the full path of +# the package directory is also stored in _PKGDIR (e.g. to find patches) +# +# As such, including other Makefiles, like below, before we call one of +# the *-package macros usually doesn't work. +# +# However, by including the in-tree extensions after the ones from the +# br2-external trees, we're back to the situation where the last Makefile +# scanned *is* included from the correct directory. +# +# NOTE: this is very fragile, and extra care must be taken to ensure that +# we always end up with an in-tree included file. That's mostly OK, because +# we do have in-tree linux-extensions. +# +include $(sort $(wildcard $(foreach ext,$(BR2_EXTERNAL_DIRS), \ + $(ext)/linux/linux-ext-*.mk))) +include $(sort $(wildcard linux/linux-ext-*.mk)) + +LINUX_PATCH_DEPENDENCIES += $(foreach ext,$(LINUX_EXTENSIONS),\ + $(if $(BR2_LINUX_KERNEL_EXT_$(call UPPERCASE,$(ext))),$(ext))) + +LINUX_PRE_PATCH_HOOKS += $(foreach ext,$(LINUX_EXTENSIONS),\ + $(if $(BR2_LINUX_KERNEL_EXT_$(call UPPERCASE,$(ext))),\ + $(call UPPERCASE,$(ext))_PREPARE_KERNEL)) + +# Checks to give errors that the user can understand + +# When a custom repository has been set, check for the repository version +ifeq ($(BR2_LINUX_KERNEL_CUSTOM_SVN)$(BR2_LINUX_KERNEL_CUSTOM_GIT)$(BR2_LINUX_KERNEL_CUSTOM_HG),y) +ifeq ($(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION)),) +$(error No custom repository version set. Check your BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION setting) +endif +ifeq ($(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_REPO_URL)),) +$(error No custom repo URL set. Check your BR2_LINUX_KERNEL_CUSTOM_REPO_URL setting) +endif +endif + +ifeq ($(BR_BUILDING),y) + +ifeq ($(BR2_LINUX_KERNEL_USE_DEFCONFIG),y) +# We must use the user-supplied kconfig value, because +# LINUX_KCONFIG_DEFCONFIG will at least contain the +# trailing _defconfig +ifeq ($(call qstrip,$(BR2_LINUX_KERNEL_DEFCONFIG)),) +$(error No kernel defconfig name specified, check your BR2_LINUX_KERNEL_DEFCONFIG setting) +endif +endif + +ifeq ($(BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG),y) +ifeq ($(LINUX_KCONFIG_FILE),) +$(error No kernel configuration file specified, check your BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE setting) +endif +endif + +ifeq ($(BR2_LINUX_KERNEL_DTS_SUPPORT):$(strip $(LINUX_DTS_NAME)),y:) +$(error No kernel device tree source specified, check your \ + BR2_LINUX_KERNEL_INTREE_DTS_NAME / BR2_LINUX_KERNEL_CUSTOM_DTS_PATH settings) +endif + +endif # BR_BUILDING + +$(eval $(kconfig-package)) + +# Support for rebuilding the kernel after the cpio archive has +# been generated. +.PHONY: linux-rebuild-with-initramfs +linux-rebuild-with-initramfs: $(LINUX_DIR)/.stamp_target_installed +linux-rebuild-with-initramfs: $(LINUX_DIR)/.stamp_images_installed +linux-rebuild-with-initramfs: rootfs-cpio +linux-rebuild-with-initramfs: + @$(call MESSAGE,"Rebuilding kernel with initramfs") + # Build the kernel. + $(LINUX_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(LINUX_DIR) $(LINUX_TARGET_NAME) + $(LINUX_APPEND_DTB) + # Copy the kernel image(s) to its(their) final destination + $(call LINUX_INSTALL_IMAGE,$(BINARIES_DIR)) + # If there is a .ub file copy it to the final destination + test ! -f $(LINUX_IMAGE_PATH).ub || cp $(LINUX_IMAGE_PATH).ub $(BINARIES_DIR) diff --git a/loongson-custom/LA64_config_arch/config.guess b/loongson-custom/LA64_config_arch/config.guess new file mode 100755 index 00000000..70806849 --- /dev/null +++ b/loongson-custom/LA64_config_arch/config.guess @@ -0,0 +1,1483 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2018 Free Software Foundation, Inc. + +timestamp='2018-02-24' + +# This file 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 3 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, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. +# +# You can get the latest version of this script from: +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# +# Please send patches to . + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Options: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2018 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > "$dummy.c" ; + for c in cc gcc c89 c99 ; do + if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "$UNAME_SYSTEM" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + eval "$set_cc_for_build" + cat <<-EOF > "$dummy.c" + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" + + # If ldd exists, use it to detect musl libc. + if command -v ldd >/dev/null && \ + ldd --version 2>&1 | grep -q ^musl + then + LIBC=musl + fi + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + "/sbin/$sysctl" 2>/dev/null || \ + "/usr/sbin/$sysctl" 2>/dev/null || \ + echo unknown)` + case "$UNAME_MACHINE_ARCH" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + earmv*) + arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` + machine="${arch}${endian}"-unknown + ;; + *) machine="$UNAME_MACHINE_ARCH"-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently (or will in the future) and ABI. + case "$UNAME_MACHINE_ARCH" in + earm*) + os=netbsdelf + ;; + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval "$set_cc_for_build" + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # Determine ABI tags. + case "$UNAME_MACHINE_ARCH" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "$UNAME_VERSION" in + Debian*) + release='-gnu' + ;; + *) + release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "$machine-${os}${release}${abi}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" + exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" + exit ;; + *:MidnightBSD:*:*) + echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" + exit ;; + *:ekkoBSD:*:*) + echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" + exit ;; + *:SolidBSD:*:*) + echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd"$UNAME_RELEASE" + exit ;; + *:MirBSD:*:*) + echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" + exit ;; + *:Sortix:*:*) + echo "$UNAME_MACHINE"-unknown-sortix + exit ;; + *:Redox:*:*) + echo "$UNAME_MACHINE"-unknown-redox + exit ;; + mips:OSF1:*.*) + echo mips-dec-osf1 + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE=alpha ;; + "EV4.5 (21064)") + UNAME_MACHINE=alpha ;; + "LCA4 (21066/21068)") + UNAME_MACHINE=alpha ;; + "EV5 (21164)") + UNAME_MACHINE=alphaev5 ;; + "EV5.6 (21164A)") + UNAME_MACHINE=alphaev56 ;; + "EV5.6 (21164PC)") + UNAME_MACHINE=alphapca56 ;; + "EV5.7 (21164PC)") + UNAME_MACHINE=alphapca57 ;; + "EV6 (21264)") + UNAME_MACHINE=alphaev6 ;; + "EV6.7 (21264A)") + UNAME_MACHINE=alphaev67 ;; + "EV6.8CB (21264C)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8AL (21264B)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8CX (21264D)") + UNAME_MACHINE=alphaev68 ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE=alphaev69 ;; + "EV7 (21364)") + UNAME_MACHINE=alphaev7 ;; + "EV7.9 (21364A)") + UNAME_MACHINE=alphaev79 ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo "$UNAME_MACHINE"-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo "$UNAME_MACHINE"-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix"$UNAME_RELEASE" + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux"$UNAME_RELEASE" + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval "$set_cc_for_build" + SUN_ARCH=i386 + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH=x86_64 + fi + fi + echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos"$UNAME_RELEASE" + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos"$UNAME_RELEASE" + ;; + sun4) + echo sparc-sun-sunos"$UNAME_RELEASE" + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos"$UNAME_RELEASE" + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint"$UNAME_RELEASE" + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint"$UNAME_RELEASE" + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint"$UNAME_RELEASE" + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten"$UNAME_RELEASE" + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten"$UNAME_RELEASE" + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix"$UNAME_RELEASE" + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix"$UNAME_RELEASE" + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix"$UNAME_RELEASE" + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && + dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`"$dummy" "$dummyarg"` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos"$UNAME_RELEASE" + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] + then + if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ + [ "$TARGET_BINARY_INTERFACE"x = x ] + then + echo m88k-dg-dgux"$UNAME_RELEASE" + else + echo m88k-dg-dguxbcs"$UNAME_RELEASE" + fi + else + echo i586-dg-dgux"$UNAME_RELEASE" + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" + fi + echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` + else + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" + fi + echo "$IBM_ARCH"-ibm-aix"$IBM_REV" + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + case "$UNAME_MACHINE" in + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "$sc_cpu_version" in + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "$sc_kernel_bits" in + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "$HP_ARCH" = "" ]; then + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ "$HP_ARCH" = hppa2.0w ] + then + eval "$set_cc_for_build" + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH=hppa2.0w + else + HP_ARCH=hppa64 + fi + fi + echo "$HP_ARCH"-hp-hpux"$HPUX_REV" + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux"$HPUX_REV" + exit ;; + 3050*:HI-UX:*:*) + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo "$UNAME_MACHINE"-unknown-osf1mk + else + echo "$UNAME_MACHINE"-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi"$UNAME_RELEASE" + exit ;; + *:BSD/OS:*:*) + echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case "$UNAME_PROCESSOR" in + amd64) + UNAME_PROCESSOR=x86_64 ;; + i386) + UNAME_PROCESSOR=i586 ;; + esac + echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" + exit ;; + i*:CYGWIN*:*) + echo "$UNAME_MACHINE"-pc-cygwin + exit ;; + *:MINGW64*:*) + echo "$UNAME_MACHINE"-pc-mingw64 + exit ;; + *:MINGW*:*) + echo "$UNAME_MACHINE"-pc-mingw32 + exit ;; + *:MSYS*:*) + echo "$UNAME_MACHINE"-pc-msys + exit ;; + i*:PW*:*) + echo "$UNAME_MACHINE"-pc-pw32 + exit ;; + *:Interix*:*) + case "$UNAME_MACHINE" in + x86) + echo i586-pc-interix"$UNAME_RELEASE" + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix"$UNAME_RELEASE" + exit ;; + IA64) + echo ia64-unknown-interix"$UNAME_RELEASE" + exit ;; + esac ;; + i*:UWIN*:*) + echo "$UNAME_MACHINE"-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + exit ;; + *:GNU:*:*) + # the GNU system + echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" + exit ;; + i*86:Minix:*:*) + echo "$UNAME_MACHINE"-pc-minix + exit ;; + aarch64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + arm*:Linux:*:*) + eval "$set_cc_for_build" + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi + else + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + cris:Linux:*:*) + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" + exit ;; + crisv32:Linux:*:*) + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" + exit ;; + e2k:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + frv:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + hexagon:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + i*86:Linux:*:*) + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" + exit ;; + ia64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + loongarch32:Linux:*:* | loongarch64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + k1om:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + m32r*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + m68*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`" + test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; } + ;; + mips64el:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + openrisc*:Linux:*:*) + echo or1k-unknown-linux-"$LIBC" + exit ;; + or32:Linux:*:* | or1k*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-"$LIBC" + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-"$LIBC" + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; + PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; + *) echo hppa-unknown-linux-"$LIBC" ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-"$LIBC" + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-"$LIBC" + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-"$LIBC" + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-"$LIBC" + exit ;; + riscv32:Linux:*:* | riscv64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" + exit ;; + sh64*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + sh*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + tile*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + vax:Linux:*:*) + echo "$UNAME_MACHINE"-dec-linux-"$LIBC" + exit ;; + x86_64:Linux:*:*) + if objdump -f /bin/sh | grep -q elf32-x86-64; then + echo "$UNAME_MACHINE"-pc-linux-"$LIBC"x32 + else + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" + fi + exit ;; + xtensa*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo "$UNAME_MACHINE"-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo "$UNAME_MACHINE"-unknown-stop + exit ;; + i*86:atheos:*:*) + echo "$UNAME_MACHINE"-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo "$UNAME_MACHINE"-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos"$UNAME_RELEASE" + exit ;; + i*86:*DOS:*:*) + echo "$UNAME_MACHINE"-pc-msdosdjgpp + exit ;; + i*86:*:4.*:*) + UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" + else + echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}" + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" + else + echo "$UNAME_MACHINE"-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configure will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos"$UNAME_RELEASE" + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos"$UNAME_RELEASE" + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos"$UNAME_RELEASE" + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos"$UNAME_RELEASE" + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv"$UNAME_RELEASE" + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo "$UNAME_MACHINE"-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo "$UNAME_MACHINE"-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux"$UNAME_RELEASE" + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv"$UNAME_RELEASE" + else + echo mips-unknown-sysv"$UNAME_RELEASE" + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux"$UNAME_RELEASE" + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux"$UNAME_RELEASE" + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux"$UNAME_RELEASE" + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux"$UNAME_RELEASE" + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux"$UNAME_RELEASE" + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux"$UNAME_RELEASE" + exit ;; + SX-ACE:SUPER-UX:*:*) + echo sxace-nec-superux"$UNAME_RELEASE" + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody"$UNAME_RELEASE" + exit ;; + *:Rhapsody:*:*) + echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + eval "$set_cc_for_build" + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc + fi + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 + fi + echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = x86; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-*:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSR-*:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSV-*:NONSTOP_KERNEL:*:*) + echo nsv-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSX-*:NONSTOP_KERNEL:*:*) + echo nsx-tandem-nsk"$UNAME_RELEASE" + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = 386; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo "$UNAME_MACHINE"-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux"$UNAME_RELEASE" + exit ;; + *:DragonFly:*:*) + echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "$UNAME_MACHINE" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" + exit ;; + i*86:rdos:*:*) + echo "$UNAME_MACHINE"-pc-rdos + exit ;; + i*86:AROS:*:*) + echo "$UNAME_MACHINE"-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo "$UNAME_MACHINE"-unknown-esx + exit ;; + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs + exit ;; +esac + +echo "$0: unable to guess system type" >&2 + +case "$UNAME_MACHINE:$UNAME_SYSTEM" in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <&2 </dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = "$UNAME_MACHINE" +UNAME_RELEASE = "$UNAME_RELEASE" +UNAME_SYSTEM = "$UNAME_SYSTEM" +UNAME_VERSION = "$UNAME_VERSION" +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-functions 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/loongson-custom/LA64_config_arch/config.sub b/loongson-custom/LA64_config_arch/config.sub new file mode 100755 index 00000000..682f5976 --- /dev/null +++ b/loongson-custom/LA64_config_arch/config.sub @@ -0,0 +1,1803 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright 1992-2018 Free Software Foundation, Inc. + +timestamp='2018-02-22' + +# This file 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 3 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, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches to . +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS + +Canonicalize a configuration name. + +Options: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2018 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo "$1" + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ + kopensolaris*-gnu* | cloudabi*-eabi* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + android-linux) + os=-linux-android + basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; + *) + basic_machine=`echo "$1" | sed 's/-[^-]*$//'` + if [ "$basic_machine" != "$1" ] + then os=`echo "$1" | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze* | loongson) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arceb \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | ba \ + | be32 | be64 \ + | bfin \ + | c4x | c8051 | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | e2k | epiphany \ + | fido | fr30 | frv | ft32 \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia16 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | loongarch32 | loongarch64 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 | nios2eb | nios2el \ + | ns16k | ns32k \ + | open8 | or1k | or1knd | or32 \ + | pdp10 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pru \ + | pyramid \ + | riscv32 | riscv64 \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | visium \ + | wasm32 \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | ba-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | e2k-* | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ + | ip2k-* | iq2000-* \ + | k1om-* \ + | le32-* | le64-* \ + | loongarch32-* | loongarch64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | or1k*-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pru-* \ + | pyramid-* \ + | riscv32-* | riscv64-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | visium-* \ + | wasm32-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-pc + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + asmjs) + basic_machine=asmjs-unknown + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2*) + basic_machine=m68k-bull + os=-sysv3 + ;; + e500v[12]) + basic_machine=powerpc-unknown + os=$os"spe" + ;; + e500v[12]-*) + basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` + os=$os"spe" + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; + i*86v32) + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'` + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'` + os=-linux + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze*) + basic_machine=microblaze-xilinx + ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; + mingw32) + basic_machine=i686-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'` + ;; + msys) + basic_machine=i686-pc + os=-msys + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + nsv-tandem) + basic_machine=nsv-tandem + ;; + nsx-tandem) + basic_machine=nsx-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + x64) + basic_machine=x86_64-pc + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases that might get confused + # with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # es1800 is here to avoid being matched by es* (a different OS) + -es1800*) + os=-ose + ;; + # Now accept the basic system types. + # The portable systems comes first. + # Each alternative MUST end in a * to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* | -plan9* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* | -cloudabi* | -sortix* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \ + | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ + | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \ + | -midnightbsd*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -xray | -os68k* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo "$os" | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo "$os" | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo "$os" | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4*) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -pikeos*) + # Until real need of OS specific support for + # particular features comes up, bare metal + # configurations are quite functional. + case $basic_machine in + arm*) + os=-eabi + ;; + *) + os=-elf + ;; + esac + ;; + -nacl*) + ;; + -ios) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + c8051-*) + os=-elf + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + pru-*) + os=-elf + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"` + ;; +esac + +echo "$basic_machine$os" +exit + +# Local variables: +# eval: (add-hook 'write-file-functions 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/loongson-custom/host-cross-compiler-env.sh b/loongson-custom/host-cross-compiler-env.sh new file mode 100755 index 00000000..8d1c0174 --- /dev/null +++ b/loongson-custom/host-cross-compiler-env.sh @@ -0,0 +1,66 @@ +#! /bin/bash + +host_dir="../output/host" +host_file_name="host.tar.gz" +host_file="../output/$host_file_name" + +if [ ! -d $host_dir ]; then + echo "not found host dir($host_dir)!!!" + exit 0; +fi + +cur_path=$PWD + +echo "start zip host cross compile env" +cd ../output/host +cd $(ls | grep buildroot) +cd sysroot/usr/ + +if [ -d host ]; then + rm -rf ./host +fi +mkdir host +cp -a ./include ./lib ./lib64 ./share ./libexec ./host +tar -zcf $host_file_name host +rm -rf ./host +mv $host_file_name $cur_path +cd $cur_path +echo "zip env finish!" + +#mv $host_file ./ + +echo "unzip $host_file_name" +tar -zxf $host_file_name + +toolchain_path=$(cat ../configs/$2 | grep BR2_TOOLCHAIN_EXTERNAL_PATH | cut -d "=" -f 2) + +echo $toolchain_path > temp-path.txt +sed -i 's/^.//' temp-path.txt +sed -i 's/.$//' temp-path.txt +toolchain_path=$(cat temp-path.txt) +rm temp-path.txt + +pwd_path=$PWD + +echo "to delete all gcc lib" +cd ./host/lib64 +#cd $(ls | grep buildroot) +#cd sysroot/usr/lib64 +rm -r $(ls $toolchain_path/sysroot/usr/lib64) + +cd ../include +rm -r $(ls $toolchain_path/sysroot/usr/include) + +cd $pwd_path + +rm -r $host_file_name + +echo "re zip package" +tar -zcf $host_file_name host + +rm -rf ./host + +if [ $# -eq 2 ]; then + mv $host_file_name ./$1 +fi + diff --git a/loongson-custom/setup_libopenssl.sh b/loongson-custom/setup_libopenssl.sh new file mode 100755 index 00000000..08b03087 --- /dev/null +++ b/loongson-custom/setup_libopenssl.sh @@ -0,0 +1,39 @@ +#!/bin/bash +#set -x + +dest_dir=../package/ +file_name=libopenssl +file=$dest_dir/$file_name + +if [ -e $file ]; then + if [ -L $file ]; then + rm -rvf $file + fi +fi + + +cd $dest_dir +if [ $# = 1 ] ; then + if [ $1 = 3 ]; then + echo "use openssl3.x" + ln -sv ${file_name}3 $file_name + if [ -e $file_name/${file_name}.mk3 ] ; then + cd $file_name + mv ${file_name}.mk{3,} + cd - + fi + else + echo "use openssl1.x" + ln -sv ${file_name}1 $file_name + cd ${file_name}3 + mv ${file_name}.mk{,3} + cd - + fi +else + echo "use default openssl1.x" + ln -sv ${file_name}1 $file_name + cd ${file_name}3 + mv ${file_name}.mk{,3} + cd - +fi +cd - diff --git a/loongson-custom/update_LA64_support_to_config_guess_sub.sh b/loongson-custom/update_LA64_support_to_config_guess_sub.sh new file mode 100755 index 00000000..38ee57f3 --- /dev/null +++ b/loongson-custom/update_LA64_support_to_config_guess_sub.sh @@ -0,0 +1,40 @@ +#! /bin/sh + +bak_config_name="bak_LA64_config" +bak_config_dir="" +new_config_dir="./LA64_config_arch" + +check_dir1="/usr/share/misc/" +check_dir2="../support/gnuconfig/" + +target="" + +check_and_update() +{ + target=`cat $1/config.sub | grep loongarch | head -n1` + if [ -z "$target" ]; then + bak_config_dir="$1/$bak_config_name" + if [ ! -d $bak_config_dir ]; then + sudo mkdir $bak_config_dir + sudo mv "$1/config.guess" "$1/config.sub" "$bak_config_dir/" + fi + sudo cp "$new_config_dir/config.guess" "$new_config_dir/config.sub" $1 + fi +} + +check_and_update_no_root() +{ + target=`cat $1/config.sub | grep loongarch | head -n1` + if [ -z "$target" ]; then + bak_config_dir="$1/$bak_config_name" + if [ ! -d $bak_config_dir ]; then + mkdir $bak_config_dir + mv "$1/config.guess" "$1/config.sub" "$bak_config_dir/" + fi + cp "$new_config_dir/config.guess" "$new_config_dir/config.sub" $1 + fi +} + +check_and_update $check_dir1 +check_and_update_no_root $check_dir2 +echo finish! diff --git a/package/18xx-ti-utils/0001-plt.h-fix-build-with-gcc-10.patch b/package/18xx-ti-utils/0001-plt.h-fix-build-with-gcc-10.patch new file mode 100644 index 00000000..36480dfc --- /dev/null +++ b/package/18xx-ti-utils/0001-plt.h-fix-build-with-gcc-10.patch @@ -0,0 +1,38 @@ +From 12d3b3c01b0ec28d45427754541a8156939346d9 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Thu, 13 Aug 2020 23:24:05 +0200 +Subject: [PATCH] plt.h: fix build with gcc 10 + +Drop EFUSE_PARAMETER_TYPE_ENM to fix the following build failure with +gcc 10: + +/home/buildroot/autobuild/run/instance-3/output-1/host/bin/arm-buildroot-linux-gnueabihf-gcc -L/home/buildroot/autobuild/run/instance-3/output-1/host/arm-buildroot-linux-gnueabihf/sysroot/lib nvs.o misc_cmds.o calibrator.o plt.o wl18xx_plt.o ini.o -lm -lnl-3 -lnl-genl-3 -o calibrator +/home/buildroot/autobuild/run/instance-3/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: misc_cmds.o:(.bss+0x0): multiple definition of `EFUSE_PARAMETER_TYPE_ENM'; nvs.o:(.bss+0x0): first defined here +/home/buildroot/autobuild/run/instance-3/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: calibrator.o: in function `.LANCHOR0': +calibrator.c:(.bss+0xc): multiple definition of `EFUSE_PARAMETER_TYPE_ENM'; nvs.o:(.bss+0x0): first defined here + +Fixes: + - http://autobuild.buildroot.org/results/df2d04de4b2e5003f3fc56c9e84db5054bd4d499 + +Signed-off-by: Fabrice Fontaine +[Upstream status: sent to sudharshan ] +--- + plt.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/plt.h b/plt.h +index 8b534a9..43d5dbc 100644 +--- a/plt.h ++++ b/plt.h +@@ -399,7 +399,7 @@ enum EFUSE_PARAMETER_TYPE_ENMT { + TX_BIP_PD_BUFFER_VBIAS_ERROR_E, + EFUSE_NUMBER_OF_PARAMETERS_E, + EFUSE_LAST_PARAMETER_E = (EFUSE_NUMBER_OF_PARAMETERS_E - 1) +-} EFUSE_PARAMETER_TYPE_ENM; ++}; + + int get_mac_addr(int ifc_num, unsigned char *mac_addr); + +-- +2.27.0 + diff --git a/package/18xx-ti-utils/18xx-ti-utils.hash b/package/18xx-ti-utils/18xx-ti-utils.hash new file mode 100644 index 00000000..7ecca54b --- /dev/null +++ b/package/18xx-ti-utils/18xx-ti-utils.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 ce0185ba8a9bf456cc94a798bf66903775065e337e53ff812f18a6d88f5bac13 18xx-ti-utils-R8.8.tar.xz +sha256 363cef40b276a7a91ebcff3f78626d9cfe5e5a51927c725236007259403d5fc4 COPYING diff --git a/package/18xx-ti-utils/18xx-ti-utils.mk b/package/18xx-ti-utils/18xx-ti-utils.mk new file mode 100644 index 00000000..5d45191c --- /dev/null +++ b/package/18xx-ti-utils/18xx-ti-utils.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# 18xx-ti-utils +# +################################################################################ + +18XX_TI_UTILS_VERSION = 8.8 +18XX_TI_UTILS_SITE = https://git.ti.com/cgit/wilink8-wlan/18xx-ti-utils/snapshot +18XX_TI_UTILS_SOURCE = 18xx-ti-utils-R$(18XX_TI_UTILS_VERSION).tar.xz +18XX_TI_UTILS_DEPENDENCIES = libnl +18XX_TI_UTILS_LICENSE = BSD-3-Clause +18XX_TI_UTILS_LICENSE_FILES = COPYING + +18XX_TI_UTILS_CFLAGS = -I$(STAGING_DIR)/usr/include/libnl3 -DCONFIG_LIBNL32 + +ifeq ($(BR2_STATIC_LIBS),y) +18XX_TI_UTILS_BUILD_TARGET = static +endif + +define 18XX_TI_UTILS_BUILD_CMDS + $(TARGET_MAKE_ENV) CROSS_COMPILE=$(TARGET_CROSS) \ + NFSROOT="$(STAGING_DIR)" NLVER=3 $(MAKE) -C $(@D) \ + CFLAGS="$(TARGET_CFLAGS) $(18XX_TI_UTILS_CFLAGS)" \ + $(18XX_TI_UTILS_BUILD_TARGET) + + $(HOST_MAKE_ENV) $(MAKE) -C $(@D)/wlconf \ + $(HOST_CONFIGURE_OPTS) +endef + +define 18XX_TI_UTILS_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 $(@D)/calibrator $(TARGET_DIR)/usr/bin/calibrator + $(INSTALL) -m 0755 $(@D)/wlconf/wlconf $(HOST_DIR)/bin/wlconf +endef + +$(eval $(generic-package)) diff --git a/package/18xx-ti-utils/Config.in b/package/18xx-ti-utils/Config.in new file mode 100644 index 00000000..571d196e --- /dev/null +++ b/package/18xx-ti-utils/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_18XX_TI_UTILS + bool "18xx-ti-utils" + depends on BR2_TOOLCHAIN_HAS_THREADS # libnl + select BR2_PACKAGE_LIBNL + help + TI Wilink calibration utilities. + + CONFIG_NL80211_TESTMODE must be enabled in the kernel + configuration for this package to work. + + http://processors.wiki.ti.com/index.php/WL18xx_TX_Testing + +comment "18xx-ti-utils needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/4th/0001-avoid-regen-during-install.patch b/package/4th/0001-avoid-regen-during-install.patch new file mode 100644 index 00000000..436cff1f --- /dev/null +++ b/package/4th/0001-avoid-regen-during-install.patch @@ -0,0 +1,17 @@ +avoid regen during install + +Signed-off-by: Francois Perrad + +--- a/sources/Makefile ++++ b/sources/Makefile +@@ -120,7 +120,7 @@ + ln -sf $(SHARED_LIB) $(LIBRARIES)/lib4th.so + endif + +-mostlyinstall: libinstall all ++mostlyinstall: libinstall + cp 4th 4tsh pp4th $(BINARIES) + + install: mostlyinstall +-- + diff --git a/package/4th/4th.hash b/package/4th/4th.hash new file mode 100644 index 00000000..36d29410 --- /dev/null +++ b/package/4th/4th.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 f822f7dd8cfb0b1744a62d653c6efe933578ae1789ec60a088509a38bca4b4fc 4th-3.62.5-unix.tar.gz +sha256 8c6111b645a02219579ea66e84aa8e78a0ed4f4dd80857ffb91bcda5528717d4 COPYING diff --git a/package/4th/4th.mk b/package/4th/4th.mk new file mode 100644 index 00000000..aee59c46 --- /dev/null +++ b/package/4th/4th.mk @@ -0,0 +1,70 @@ +################################################################################ +# +# 4th +# +################################################################################ + +4TH_VERSION = 3.62.5 +4TH_SOURCE = 4th-$(4TH_VERSION)-unix.tar.gz +4TH_SITE = http://downloads.sourceforge.net/project/forth-4th/4th-$(4TH_VERSION) +4TH_LICENSE = GPL-3.0+, LGPL-3.0+ +# The COPYING file only contains the text of the LGPL-3.0, but the +# source code really contains parts under GPL-3.0+. +4TH_LICENSE_FILES = COPYING +4TH_DEPENDENCIES = host-4th +4TH_INSTALL_STAGING = YES + +4TH_CFLAGS = $(TARGET_CFLAGS) -DUNIX -fsigned-char + +ifeq ($(BR2_STATIC_LIBS),y) +4TH_MAKE_ENV = $(TARGET_MAKE_ENV) STATIC=1 +else +4TH_MAKE_ENV = $(TARGET_MAKE_ENV) SHARED=1 +4TH_CFLAGS += -fPIC +endif + +define 4TH_BUILD_CMDS + $(4TH_MAKE_ENV) $(MAKE) -C $(@D)/sources all \ + CROSS="$(TARGET_CROSS)" \ + CFLAGS="$(4TH_CFLAGS)" \ + FOURTH=$(HOST_DIR)/bin/4th +endef + +define 4TH_INSTALL_STAGING_CMDS + $(4TH_MAKE_ENV) $(MAKE) -C $(@D)/sources libinstall \ + LIBRARIES=$(STAGING_DIR)/usr/lib + $(INSTALL) -D -m 0644 $(@D)/sources/4th.h \ + $(STAGING_DIR)/usr/include/4th.h +endef + +define 4TH_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/usr/bin + mkdir -p $(TARGET_DIR)/usr/lib + $(4TH_MAKE_ENV) $(MAKE) -C $(@D)/sources mostlyinstall \ + BINARIES=$(TARGET_DIR)/usr/bin \ + LIBRARIES=$(TARGET_DIR)/usr/lib + mkdir -p $(TARGET_DIR)/usr/share/4th/lib + cp -dpf $(@D)/4th/*.4th $(TARGET_DIR)/usr/share/4th + cp -dpf $(@D)/4th/lib/*.4th $(TARGET_DIR)/usr/share/4th/lib + mkdir -p $(TARGET_DIR)/usr/share/4th/demo + cp -dpf $(@D)/4th/demo/*.4th $(TARGET_DIR)/usr/share/4th/demo + mkdir -p $(TARGET_DIR)/usr/share/4th/4pp/lib + cp -dpf $(@D)/4th/4pp/*.4pp $(TARGET_DIR)/usr/share/4th/4pp + cp -dpf $(@D)/4th/4pp/lib/*.4pp $(TARGET_DIR)/usr/share/4th/4pp/lib +endef + +define HOST_4TH_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D)/sources all \ + CFLAGS="$(HOST_CFLAGS) -DUNIX -fsigned-char" +endef + +define HOST_4TH_INSTALL_CMDS + mkdir -p $(HOST_DIR)/bin + mkdir -p $(HOST_DIR)/lib + $(HOST_MAKE_ENV) $(MAKE) -C $(@D)/sources mostlyinstall \ + BINARIES=$(HOST_DIR)/bin \ + LIBRARIES=$(HOST_DIR)/lib +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/4th/Config.in b/package/4th/Config.in new file mode 100644 index 00000000..4554664a --- /dev/null +++ b/package/4th/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_4TH + bool "4th" + help + 4tH is a Forth compiler that can create bytecode, + C-embeddable bytecode, standalone executables, but also + works fine as a scripting language + + http://thebeez.home.xs4all.nl/4tH/ diff --git a/package/Config.in b/package/Config.in new file mode 100644 index 00000000..48767d35 --- /dev/null +++ b/package/Config.in @@ -0,0 +1,2544 @@ +menu "Target packages" + + source "package/busybox/Config.in" + source "package/skeleton/Config.in" + source "package/skeleton-custom/Config.in" + source "package/skeleton-init-common/Config.in" + source "package/skeleton-init-none/Config.in" + source "package/skeleton-init-openrc/Config.in" + source "package/skeleton-init-systemd/Config.in" + source "package/skeleton-init-sysv/Config.in" + +menu "Audio and video applications" + source "package/alsa-utils/Config.in" + source "package/atest/Config.in" + source "package/aumix/Config.in" + source "package/bluez-alsa/Config.in" + source "package/dvblast/Config.in" + source "package/dvdauthor/Config.in" + source "package/dvdrw-tools/Config.in" + source "package/espeak/Config.in" + source "package/faad2/Config.in" + source "package/ffmpeg/Config.in" + source "package/flac/Config.in" + source "package/flite/Config.in" + source "package/fluid-soundfont/Config.in" + source "package/fluidsynth/Config.in" + source "package/gmrender-resurrect/Config.in" + source "package/gstreamer1/Config.in" + source "package/jack1/Config.in" + source "package/jack2/Config.in" + source "package/kodi/Config.in" + source "package/lame/Config.in" + source "package/madplay/Config.in" + source "package/mimic/Config.in" + source "package/minimodem/Config.in" + source "package/miraclecast/Config.in" + source "package/mjpegtools/Config.in" + source "package/modplugtools/Config.in" + source "package/motion/Config.in" + source "package/mpd/Config.in" + source "package/mpd-mpc/Config.in" + source "package/mpg123/Config.in" + source "package/mpv/Config.in" + source "package/multicat/Config.in" + source "package/musepack/Config.in" + source "package/ncmpc/Config.in" + source "package/omxplayer/Config.in" + source "package/on2-8170-libs/Config.in" + source "package/opus-tools/Config.in" + source "package/pulseaudio/Config.in" + source "package/sox/Config.in" + source "package/squeezelite/Config.in" + source "package/tovid/Config.in" + source "package/tstools/Config.in" + source "package/twolame/Config.in" + source "package/udpxy/Config.in" + source "package/upmpdcli/Config.in" + source "package/v4l2grab/Config.in" + source "package/v4l2loopback/Config.in" + source "package/vlc/Config.in" + source "package/vorbis-tools/Config.in" + source "package/wavpack/Config.in" + source "package/yavta/Config.in" + source "package/ympd/Config.in" +endmenu + +menu "Compressors and decompressors" + source "package/brotli/Config.in" + source "package/bzip2/Config.in" + source "package/gzip/Config.in" + source "package/lrzip/Config.in" + source "package/lzip/Config.in" + source "package/lzop/Config.in" + source "package/p7zip/Config.in" + source "package/pigz/Config.in" + source "package/pixz/Config.in" + source "package/unrar/Config.in" + source "package/unzip/Config.in" + source "package/xz/Config.in" + source "package/zip/Config.in" + source "package/zstd/Config.in" +endmenu + +menu "Debugging, profiling and benchmark" + source "package/babeltrace2/Config.in" + source "package/blktrace/Config.in" + source "package/bonnie/Config.in" + source "package/cache-calibrator/Config.in" + source "package/clinfo/Config.in" + source "package/coremark/Config.in" + source "package/coremark-pro/Config.in" + source "package/dacapo/Config.in" + source "package/delve/Config.in" + source "package/dhrystone/Config.in" + source "package/dieharder/Config.in" + source "package/dmalloc/Config.in" + source "package/dropwatch/Config.in" + source "package/dstat/Config.in" + source "package/dt/Config.in" + source "package/duma/Config.in" + source "package/fio/Config.in" + source "package/fwts/Config.in" + source "package/gdb/Config.in" + source "package/google-breakpad/Config.in" + source "package/iozone/Config.in" + source "package/kexec/Config.in" + source "package/kexec-lite/Config.in" + source "package/ktap/Config.in" + source "package/kvm-unit-tests/Config.in" + source "package/kyua/Config.in" + source "package/latencytop/Config.in" + source "package/lmbench/Config.in" + source "package/lsof/Config.in" + source "package/ltp-testsuite/Config.in" + source "package/ltrace/Config.in" + source "package/lttng-babeltrace/Config.in" + source "package/lttng-modules/Config.in" + source "package/lttng-tools/Config.in" + source "package/mcelog/Config.in" + source "package/memstat/Config.in" + source "package/netperf/Config.in" + source "package/netsniff-ng/Config.in" + source "package/nmon/Config.in" + source "package/oprofile/Config.in" + source "package/pax-utils/Config.in" + source "package/pcm-tools/Config.in" + source "package/piglit/Config.in" + source "package/ply/Config.in" + source "package/ptm2human/Config.in" + source "package/pv/Config.in" + source "package/racehound/Config.in" + source "package/ramsmp/Config.in" + source "package/ramspeed/Config.in" + source "package/rt-tests/Config.in" + source "package/sentry-native/Config.in" + source "package/spidev_test/Config.in" + source "package/strace/Config.in" + source "package/stress/Config.in" + source "package/stress-ng/Config.in" + source "package/stressapptest/Config.in" + source "package/sysdig/Config.in" + source "package/sysprof/Config.in" + source "package/tcf-agent/Config.in" + source "package/tinymembench/Config.in" + source "package/trace-cmd/Config.in" + source "package/trinity/Config.in" + source "package/uclibc-ng-test/Config.in" + source "package/valgrind/Config.in" + source "package/vmtouch/Config.in" + source "package/whetstone/Config.in" +endmenu + +menu "Development tools" + source "package/bats-core/Config.in" + source "package/binutils/Config.in" + source "package/bitwise/Config.in" + source "package/bsdiff/Config.in" + source "package/bustle/Config.in" + source "package/check/Config.in" + source "package/cmake/Config.in" + source "package/cppunit/Config.in" + source "package/cukinia/Config.in" + source "package/cunit/Config.in" + source "package/cvs/Config.in" + source "package/cxxtest/Config.in" + source "package/diffutils/Config.in" + source "package/dos2unix/Config.in" + source "package/findutils/Config.in" + source "package/flex/Config.in" + source "package/gawk/Config.in" + source "package/gettext/Config.in" + source "package/gettext-gnu/Config.in" + source "package/gettext-tiny/Config.in" + source "package/git/Config.in" + source "package/git-crypt/Config.in" + source "package/gperf/Config.in" + source "package/grep/Config.in" + source "package/jo/Config.in" + source "package/jq/Config.in" + source "package/libtool/Config.in" + source "package/make/Config.in" + source "package/patch/Config.in" + source "package/pkgconf/Config.in" + source "package/ripgrep/Config.in" + source "package/sed/Config.in" + source "package/subversion/Config.in" + source "package/tree/Config.in" + source "package/yasm/Config.in" +endmenu + +menu "Filesystem and flash utilities" + source "package/abootimg/Config.in" + source "package/aufs/Config.in" + source "package/aufs-util/Config.in" + source "package/autofs/Config.in" + source "package/btrfs-progs/Config.in" + source "package/cifs-utils/Config.in" + source "package/cpio/Config.in" + source "package/cramfs/Config.in" + source "package/curlftpfs/Config.in" + source "package/davfs2/Config.in" + source "package/dosfstools/Config.in" + source "package/e2fsprogs/Config.in" + source "package/e2tools/Config.in" + source "package/ecryptfs-utils/Config.in" + source "package/erofs-utils/Config.in" + source "package/exfat/Config.in" + source "package/exfat-utils/Config.in" + source "package/exfatprogs/Config.in" + source "package/f2fs-tools/Config.in" + source "package/flashbench/Config.in" + source "package/fscryptctl/Config.in" + source "package/fuse-overlayfs/Config.in" + source "package/fwup/Config.in" + source "package/genext2fs/Config.in" + source "package/genpart/Config.in" + source "package/genromfs/Config.in" + source "package/imx-usb-loader/Config.in" + source "package/mmc-utils/Config.in" + source "package/mtd/Config.in" + source "package/mtools/Config.in" + source "package/nfs-utils/Config.in" + source "package/nilfs-utils/Config.in" + source "package/ntfs-3g/Config.in" + source "package/sp-oops-extract/Config.in" + source "package/squashfs/Config.in" + source "package/sshfs/Config.in" + source "package/sunxi-tools/Config.in" + source "package/udftools/Config.in" + source "package/unionfs/Config.in" + source "package/xfsprogs/Config.in" +endmenu + +menu "Fonts, cursors, icons, sounds and themes" + +comment "Cursors" + source "package/comix-cursors/Config.in" + source "package/obsidian-cursors/Config.in" + +comment "Fonts" + source "package/bitstream-vera/Config.in" + source "package/cantarell/Config.in" + source "package/dejavu/Config.in" + source "package/font-awesome/Config.in" + source "package/ghostscript-fonts/Config.in" + source "package/inconsolata/Config.in" + source "package/liberation/Config.in" + source "package/wqy-zenhei/Config.in" + source "package/sourcehanserif/Config.in" + +comment "Icons" + source "package/adwaita-icon-theme/Config.in" + source "package/google-material-design-icons/Config.in" + source "package/hicolor-icon-theme/Config.in" + +comment "Sounds" + source "package/sound-theme-borealis/Config.in" + source "package/sound-theme-freedesktop/Config.in" + +comment "Themes" + source "package/gtk2-engines/Config.in" + +endmenu + +menu "Games" + source "package/ascii-invaders/Config.in" + source "package/chocolate-doom/Config.in" + source "package/doom-wad/Config.in" + source "package/flare-engine/Config.in" + source "package/flare-game/Config.in" + source "package/frotz/Config.in" + source "package/gnuchess/Config.in" + source "package/lbreakout2/Config.in" + source "package/ltris/Config.in" + source "package/lugaru/Config.in" + source "package/minetest/Config.in" + source "package/minetest-game/Config.in" + source "package/opentyrian/Config.in" + source "package/opentyrian-data/Config.in" + source "package/prboom/Config.in" + source "package/rubix/Config.in" + source "package/sl/Config.in" + source "package/solarus/Config.in" + source "package/stella/Config.in" + source "package/supertux/Config.in" + source "package/supertuxkart/Config.in" + source "package/xorcurses/Config.in" +endmenu + +menu "Graphic libraries and applications (graphic/text)" + +comment "Graphic applications" + source "package/cage/Config.in" + source "package/cog/Config.in" + source "package/fswebcam/Config.in" + source "package/ghostscript/Config.in" + source "package/glmark2/Config.in" + source "package/glslsandbox-player/Config.in" + source "package/gnuplot/Config.in" + source "package/jhead/Config.in" + source "package/kmscube/Config.in" + source "package/libva-utils/Config.in" + source "package/mesa3d-demos/Config.in" + source "package/netsurf/Config.in" + source "package/pngquant/Config.in" + source "package/qt5cinex/Config.in" + source "package/rrdtool/Config.in" + source "package/stellarium/Config.in" + source "package/tesseract-ocr/Config.in" + +comment "Graphic libraries" + source "package/cegui/Config.in" + source "package/directfb/Config.in" + source "package/directfb-examples/Config.in" + source "package/efl/Config.in" + source "package/fb-test-app/Config.in" + source "package/fbdump/Config.in" + source "package/fbgrab/Config.in" + source "package/fbset/Config.in" + source "package/fbterm/Config.in" + source "package/fbv/Config.in" + source "package/freerdp/Config.in" + source "package/graphicsmagick/Config.in" + source "package/imagemagick/Config.in" + source "package/linux-fusion/Config.in" + source "package/lite/Config.in" + source "package/mesa3d/Config.in" + source "package/mesa3d-headers/Config.in" + source "package/ocrad/Config.in" + source "package/ogre/Config.in" + source "package/psplash/Config.in" + source "package/sdl/Config.in" + source "package/sdl_gfx/Config.in" + source "package/sdl_image/Config.in" + source "package/sdl_mixer/Config.in" + source "package/sdl_net/Config.in" + source "package/sdl_sound/Config.in" + source "package/sdl_ttf/Config.in" + source "package/sdl2/Config.in" + source "package/sdl2_gfx/Config.in" + source "package/sdl2_image/Config.in" + source "package/sdl2_mixer/Config.in" + source "package/sdl2_net/Config.in" + source "package/sdl2_ttf/Config.in" + source "package/tk/Config.in" + +comment "Other GUIs" + source "package/qt5/Config.in" + source "package/minigui5/Config.in" +if BR2_PACKAGE_QT5 +comment "QT libraries and helper libraries" + source "package/cutelyst/Config.in" + source "package/grantlee/Config.in" + source "package/kf5/Config.in" + source "package/qextserialport/Config.in" + source "package/qjson/Config.in" + source "package/quazip/Config.in" + source "package/qwt/Config.in" +endif + source "package/tekui/Config.in" + source "package/weston/Config.in" + source "package/x11r7/Config.in" + +comment "X applications" + depends on BR2_PACKAGE_XORG7 + + source "package/alsamixergui/Config.in" + source "package/apitrace/Config.in" + source "package/dillo/Config.in" + source "package/docker/Config.in" + source "package/feh/Config.in" + source "package/gmpc/Config.in" + source "package/gtkperf/Config.in" + source "package/leafpad/Config.in" + source "package/midori/Config.in" + source "package/nodm/Config.in" + source "package/pcmanfm/Config.in" + source "package/qt-webkit-kiosk/Config.in" + source "package/rdesktop/Config.in" + source "package/synergy/Config.in" + source "package/vte/Config.in" + source "package/wmctrl/Config.in" + source "package/x11vnc/Config.in" + source "package/xdotool/Config.in" + source "package/xscreensaver/Config.in" + source "package/xterm/Config.in" + source "package/xvkbd/Config.in" + source "package/yad/Config.in" + +comment "X libraries and helper libraries" + depends on BR2_PACKAGE_XORG7 + + source "package/libsexy/Config.in" + source "package/x11r7/xkeyboard-config/Config.in" + +comment "X window managers" + depends on BR2_PACKAGE_XORG7 + + source "package/enlightenment/Config.in" + source "package/fluxbox/Config.in" + source "package/matchbox/Config.in" + source "package/metacity/Config.in" + source "package/openbox/Config.in" + source "package/ratpoison/Config.in" +endmenu + +menu "Hardware handling" +menu "Firmware" + source "package/am33x-cm3/Config.in" + source "package/armbian-firmware/Config.in" + source "package/b43-firmware/Config.in" + source "package/linux-firmware/Config.in" + source "package/murata-cyw-fw/Config.in" + source "package/odroidc2-firmware/Config.in" + source "package/qcom-db410c-firmware/Config.in" + source "package/rcw-smarc-sal28/Config.in" + source "package/rpi-bt-firmware/Config.in" + source "package/rpi-firmware/Config.in" + source "package/rpi-wifi-firmware/Config.in" + source "package/sunxi-boards/Config.in" + source "package/ts4900-fpga/Config.in" + source "package/ux500-firmware/Config.in" + source "package/wilc1000-firmware/Config.in" + source "package/wilink-bt-firmware/Config.in" + source "package/zd1211-firmware/Config.in" +endmenu + source "package/18xx-ti-utils/Config.in" + source "package/a10disp/Config.in" + source "package/acpica/Config.in" + source "package/acpid/Config.in" + source "package/acpitool/Config.in" + source "package/aer-inject/Config.in" + source "package/altera-stapl/Config.in" + source "package/am335x-pru-package/Config.in" + source "package/apcupsd/Config.in" + source "package/avrdude/Config.in" + source "package/bcache-tools/Config.in" + source "package/biosdevname/Config.in" + source "package/brickd/Config.in" + source "package/brltty/Config.in" + source "package/cbootimage/Config.in" + source "package/cc-tool/Config.in" + source "package/cdrkit/Config.in" + source "package/cpuburn-arm/Config.in" + source "package/cryptsetup/Config.in" + source "package/cwiid/Config.in" + source "package/dahdi-linux/Config.in" + source "package/dahdi-tools/Config.in" + source "package/dbus/Config.in" + source "package/dbus-cpp/Config.in" + source "package/dbus-glib/Config.in" + source "package/dbus-python/Config.in" + source "package/dbus-triggerd/Config.in" + source "package/dfu-util/Config.in" + source "package/dmidecode/Config.in" + source "package/dmraid/Config.in" + source "package/dt-utils/Config.in" + source "package/dtv-scan-tables/Config.in" + source "package/dump1090/Config.in" + source "package/dvb-apps/Config.in" + source "package/dvbsnoop/Config.in" + source "package/edid-decode/Config.in" + source "package/eudev/Config.in" + source "package/ev3dev-linux-drivers/Config.in" + source "package/evemu/Config.in" + source "package/evtest/Config.in" + source "package/fan-ctrl/Config.in" + source "package/fbtft/Config.in" + source "package/fconfig/Config.in" + source "package/flashrom/Config.in" + source "package/fmtools/Config.in" + source "package/freescale-imx/Config.in" + source "package/fxload/Config.in" + source "package/gcnano-binaries/Config.in" + source "package/gpm/Config.in" + source "package/gpsd/Config.in" + source "package/gptfdisk/Config.in" + source "package/gvfs/Config.in" + source "package/hdparm/Config.in" + source "package/hwdata/Config.in" + source "package/hwloc/Config.in" + source "package/i2c-tools/Config.in" + source "package/i7z/Config.in" + source "package/input-event-daemon/Config.in" + source "package/intel-microcode/Config.in" + source "package/iostat/Config.in" + source "package/ipmitool/Config.in" + source "package/ipmiutil/Config.in" + source "package/irda-utils/Config.in" + source "package/iucode-tool/Config.in" + source "package/kbd/Config.in" + source "package/lcdproc/Config.in" + source "package/libiec61850/Config.in" + source "package/libubootenv/Config.in" + source "package/libuio/Config.in" + source "package/linux-backports/Config.in" + source "package/linux-serial-test/Config.in" + source "package/linuxconsoletools/Config.in" + source "package/lirc-tools/Config.in" + source "package/lm-sensors/Config.in" + source "package/lshw/Config.in" + source "package/lsscsi/Config.in" + source "package/lsuio/Config.in" + source "package/luksmeta/Config.in" + source "package/lvm2/Config.in" + source "package/mali-t76x/Config.in" + source "package/mbpfan/Config.in" + source "package/mdadm/Config.in" + source "package/mdevd/Config.in" + source "package/memtest86/Config.in" + source "package/memtester/Config.in" + source "package/memtool/Config.in" + source "package/minicom/Config.in" + source "package/msr-tools/Config.in" + source "package/nanocom/Config.in" + source "package/neard/Config.in" + source "package/nvidia-driver/Config.in" + source "package/nvidia-modprobe/Config.in" + source "package/nvme/Config.in" + source "package/ofono/Config.in" + source "package/on2-8170-modules/Config.in" + source "package/open2300/Config.in" + source "package/openfpgaloader/Config.in" + source "package/openipmi/Config.in" + source "package/openocd/Config.in" + source "package/openpowerlink/Config.in" + source "package/owl-linux/Config.in" + source "package/parted/Config.in" + source "package/pciutils/Config.in" + source "package/pdbg/Config.in" + source "package/picocom/Config.in" + source "package/pifmrds/Config.in" + source "package/pigpio/Config.in" + source "package/powertop/Config.in" + source "package/pps-tools/Config.in" + source "package/pru-software-support/Config.in" + source "package/pulseview/Config.in" + source "package/raspi-gpio/Config.in" + source "package/read-edid/Config.in" + source "package/rng-tools/Config.in" + source "package/rpi-userland/Config.in" + source "package/rs485conf/Config.in" + source "package/rtc-tools/Config.in" + source "package/rtl8188eu/Config.in" + source "package/rtl8189fs/Config.in" + source "package/rtl8723bs/Config.in" + source "package/rtl8723bu/Config.in" + source "package/rtl8821au/Config.in" + source "package/sane-backends/Config.in" + source "package/sdparm/Config.in" + source "package/sedutil/Config.in" + source "package/setserial/Config.in" + source "package/sg3_utils/Config.in" + source "package/sigrok-cli/Config.in" + source "package/sispmctl/Config.in" + source "package/smartmontools/Config.in" + source "package/smstools3/Config.in" + source "package/spi-tools/Config.in" + source "package/sredird/Config.in" + source "package/statserial/Config.in" + source "package/stm32flash/Config.in" + source "package/sunxi-cedarx/Config.in" + source "package/sunxi-mali-mainline/Config.in" + source "package/sunxi-mali-mainline-driver/Config.in" + source "package/sysstat/Config.in" + source "package/targetcli-fb/Config.in" + source "package/ti-gfx/Config.in" + source "package/ti-sgx-demos/Config.in" + source "package/ti-sgx-km/Config.in" + source "package/ti-sgx-um/Config.in" + source "package/ti-uim/Config.in" + source "package/ti-utils/Config.in" + source "package/tio/Config.in" + source "package/triggerhappy/Config.in" + source "package/uboot-tools/Config.in" + source "package/ubus/Config.in" + source "package/uccp420wlan/Config.in" + source "package/udev/Config.in" + source "package/udev-gentoo-scripts/Config.in" + source "package/udisks/Config.in" + source "package/uhubctl/Config.in" + source "package/umtprd/Config.in" + source "package/upower/Config.in" + source "package/usb_modeswitch/Config.in" + source "package/usb_modeswitch_data/Config.in" + source "package/usbmount/Config.in" + source "package/usbutils/Config.in" + source "package/w_scan/Config.in" + source "package/wf111/Config.in" + source "package/wipe/Config.in" + source "package/xorriso/Config.in" + source "package/xr819-xradio/Config.in" +endmenu + +menu "Interpreter languages and scripting" + source "package/4th/Config.in" + source "package/enscript/Config.in" + source "package/erlang/Config.in" +if BR2_PACKAGE_ERLANG +menu "Erlang libraries/modules" + source "package/erlang-base64url/Config.in" + source "package/erlang-eimp/Config.in" + source "package/erlang-goldrush/Config.in" + source "package/erlang-idna/Config.in" + source "package/erlang-jiffy/Config.in" + source "package/erlang-jose/Config.in" + source "package/erlang-lager/Config.in" + source "package/erlang-p1-acme/Config.in" + source "package/erlang-p1-cache-tab/Config.in" + source "package/erlang-p1-mqtree/Config.in" + source "package/erlang-p1-oauth2/Config.in" + source "package/erlang-p1-pkix/Config.in" + source "package/erlang-p1-sip/Config.in" + source "package/erlang-p1-stringprep/Config.in" + source "package/erlang-p1-stun/Config.in" + source "package/erlang-p1-tls/Config.in" + source "package/erlang-p1-utils/Config.in" + source "package/erlang-p1-xml/Config.in" + source "package/erlang-p1-xmpp/Config.in" + source "package/erlang-p1-yaml/Config.in" + source "package/erlang-p1-yconf/Config.in" + source "package/erlang-p1-zlib/Config.in" +endmenu +endif + source "package/execline/Config.in" + source "package/ficl/Config.in" + source "package/gauche/Config.in" + source "package/guile/Config.in" + source "package/haserl/Config.in" + source "package/jimtcl/Config.in" + source "package/lua/Config.in" + source "package/luainterpreter/Config.in" + source "package/luajit/Config.in" +if BR2_PACKAGE_HAS_LUAINTERPRETER && !BR2_STATIC_LIBS +# lua modules are dynamically loaded, so not available on static builds +menu "Lua libraries/modules" +# When adding lua packages, make sure the name start with "lua". If the +# upstream package is "luafoo", call it "luafoo" in Buildroot; if the upstream +# package is "foo", call it "lua-foo". Many packages currently don't follow +# this convention, but that's historical accident. + source "package/argparse/Config.in" + source "package/cgilua/Config.in" + source "package/copas/Config.in" + source "package/coxpcall/Config.in" + source "package/dado/Config.in" + source "package/easydbus/Config.in" + source "package/lbase64/Config.in" + source "package/ljlinenoise/Config.in" + source "package/ljsyscall/Config.in" + source "package/lpeg/Config.in" + source "package/lpty/Config.in" + source "package/lrandom/Config.in" + source "package/lsqlite3/Config.in" + source "package/lua-basexx/Config.in" + source "package/lua-binaryheap/Config.in" + source "package/lua-bit32/Config.in" + source "package/lua-cjson/Config.in" + source "package/lua-coat/Config.in" + source "package/lua-coatpersistent/Config.in" + source "package/lua-codegen/Config.in" + source "package/lua-compat53/Config.in" + source "package/lua-cqueues/Config.in" + source "package/lua-csnappy/Config.in" + source "package/lua-curl/Config.in" + source "package/lua-datafile/Config.in" + source "package/lua-ev/Config.in" + source "package/lua-fifo/Config.in" + source "package/lua-flu/Config.in" + source "package/lua-gd/Config.in" + source "package/lua-http/Config.in" + source "package/lua-iconv/Config.in" + source "package/lua-livr/Config.in" + source "package/lua-livr-extra/Config.in" + source "package/lua-lpeg-patterns/Config.in" + source "package/lua-lunitx/Config.in" + source "package/lua-lyaml/Config.in" + source "package/lua-markdown/Config.in" + source "package/lua-messagepack/Config.in" + source "package/lua-msgpack-native/Config.in" + source "package/lua-periphery/Config.in" + source "package/lua-resty-http/Config.in" + source "package/lua-rotas/Config.in" + source "package/lua-sailor/Config.in" + source "package/lua-sdl2/Config.in" + source "package/lua-silva/Config.in" + source "package/lua-std-debug/Config.in" + source "package/lua-std-normalize/Config.in" + source "package/lua-stdlib/Config.in" + source "package/lua-testmore/Config.in" + source "package/lua-utf8/Config.in" + source "package/lua-valua/Config.in" + source "package/luabitop/Config.in" + source "package/luadbi/Config.in" + source "package/luadbi-sqlite3/Config.in" + source "package/luaexpat/Config.in" + source "package/luaexpatutils/Config.in" + source "package/luafilesystem/Config.in" + source "package/luajson/Config.in" + source "package/lualdap/Config.in" + source "package/lualogging/Config.in" + source "package/luaossl/Config.in" + source "package/luaposix/Config.in" + source "package/luasec/Config.in" + source "package/luasocket/Config.in" + source "package/luasql-sqlite3/Config.in" + source "package/luasyslog/Config.in" + source "package/lutok/Config.in" + source "package/luv/Config.in" + source "package/luvi/Config.in" + source "package/lzlib/Config.in" + source "package/orbit/Config.in" + source "package/rings/Config.in" + source "package/turbolua/Config.in" + source "package/wsapi/Config.in" + source "package/wsapi-fcgi/Config.in" + source "package/wsapi-xavante/Config.in" + source "package/xavante/Config.in" +endmenu +endif + source "package/micropython/Config.in" + source "package/micropython-lib/Config.in" + source "package/moarvm/Config.in" + source "package/mono/Config.in" +if BR2_PACKAGE_MONO +menu "Mono libraries/modules" + source "package/mono-gtksharp3/Config.in" +endmenu +endif + source "package/nodejs/Config.in" + source "package/openjdk/Config.in" + source "package/perl/Config.in" +if BR2_PACKAGE_PERL +menu "Perl libraries/modules" + source "package/perl-apache-logformat-compiler/Config.in" + source "package/perl-appconfig/Config.in" + source "package/perl-astro-suntime/Config.in" + source "package/perl-class-inspector/Config.in" + source "package/perl-class-load/Config.in" + source "package/perl-class-method-modifiers/Config.in" + source "package/perl-class-std/Config.in" + source "package/perl-class-std-fast/Config.in" + source "package/perl-convert-asn1/Config.in" + source "package/perl-cookie-baker/Config.in" + source "package/perl-crypt-blowfish/Config.in" + source "package/perl-crypt-cbc/Config.in" + source "package/perl-crypt-openssl-aes/Config.in" + source "package/perl-crypt-openssl-random/Config.in" + source "package/perl-crypt-openssl-rsa/Config.in" + source "package/perl-data-dump/Config.in" + source "package/perl-data-optlist/Config.in" + source "package/perl-data-uuid/Config.in" + source "package/perl-date-manip/Config.in" + source "package/perl-datetime-tiny/Config.in" + source "package/perl-dbd-mysql/Config.in" + source "package/perl-dbi/Config.in" + source "package/perl-devel-cycle/Config.in" + source "package/perl-devel-globaldestruction/Config.in" + source "package/perl-devel-size/Config.in" + source "package/perl-devel-stacktrace/Config.in" + source "package/perl-devel-stacktrace-ashtml/Config.in" + source "package/perl-device-serialport/Config.in" + source "package/perl-digest-hmac/Config.in" + source "package/perl-digest-sha1/Config.in" + source "package/perl-dist-checkconflicts/Config.in" + source "package/perl-encode-detect/Config.in" + source "package/perl-encode-locale/Config.in" + source "package/perl-exporter-tiny/Config.in" + source "package/perl-file-listing/Config.in" + source "package/perl-file-sharedir/Config.in" + source "package/perl-file-slurp/Config.in" + source "package/perl-file-util/Config.in" + source "package/perl-filesys-notify-simple/Config.in" + source "package/perl-gd/Config.in" + source "package/perl-gdgraph/Config.in" + source "package/perl-gdtextutil/Config.in" + source "package/perl-hash-multivalue/Config.in" + source "package/perl-html-parser/Config.in" + source "package/perl-html-tagset/Config.in" + source "package/perl-http-cookies/Config.in" + source "package/perl-http-daemon/Config.in" + source "package/perl-http-date/Config.in" + source "package/perl-http-entity-parser/Config.in" + source "package/perl-http-headers-fast/Config.in" + source "package/perl-http-message/Config.in" + source "package/perl-http-multipartparser/Config.in" + source "package/perl-http-negotiate/Config.in" + source "package/perl-i18n/Config.in" + source "package/perl-io-html/Config.in" + source "package/perl-io-interface/Config.in" + source "package/perl-io-socket-multicast/Config.in" + source "package/perl-io-socket-ssl/Config.in" + source "package/perl-json-maybexs/Config.in" + source "package/perl-json-tiny/Config.in" + source "package/perl-libwww-perl/Config.in" + source "package/perl-locale-maketext-lexicon/Config.in" + source "package/perl-lwp-mediatypes/Config.in" + source "package/perl-lwp-protocol-https/Config.in" + source "package/perl-mail-dkim/Config.in" + source "package/perl-mailtools/Config.in" + source "package/perl-math-int64/Config.in" + source "package/perl-math-prime-util/Config.in" + source "package/perl-mime-base64-urlsafe/Config.in" + source "package/perl-mime-tools/Config.in" + source "package/perl-module-implementation/Config.in" + source "package/perl-module-runtime/Config.in" + source "package/perl-mojolicious/Config.in" + source "package/perl-mojolicious-plugin-authentication/Config.in" + source "package/perl-mojolicious-plugin-authorization/Config.in" + source "package/perl-mojolicious-plugin-cspheader/Config.in" + source "package/perl-mojolicious-plugin-i18n/Config.in" + source "package/perl-mojolicious-plugin-securityheader/Config.in" + source "package/perl-moo/Config.in" + source "package/perl-mozilla-ca/Config.in" + source "package/perl-net-dns/Config.in" + source "package/perl-net-http/Config.in" + source "package/perl-net-snmp/Config.in" + source "package/perl-net-ssh2/Config.in" + source "package/perl-net-ssleay/Config.in" + source "package/perl-net-telnet/Config.in" + source "package/perl-netaddr-ip/Config.in" + source "package/perl-number-bytes-human/Config.in" + source "package/perl-package-stash/Config.in" + source "package/perl-params-util/Config.in" + source "package/perl-parse-yapp/Config.in" + source "package/perl-path-tiny/Config.in" + source "package/perl-plack/Config.in" + source "package/perl-posix-strftime-compiler/Config.in" + source "package/perl-role-tiny/Config.in" + source "package/perl-stream-buffered/Config.in" + source "package/perl-sub-exporter-progressive/Config.in" + source "package/perl-sub-install/Config.in" + source "package/perl-sub-quote/Config.in" + source "package/perl-sys-cpu/Config.in" + source "package/perl-sys-meminfo/Config.in" + source "package/perl-sys-mmap/Config.in" + source "package/perl-time-parsedate/Config.in" + source "package/perl-timedate/Config.in" + source "package/perl-try-tiny/Config.in" + source "package/perl-type-tiny/Config.in" + source "package/perl-uri/Config.in" + source "package/perl-www-form-urlencoded/Config.in" + source "package/perl-www-robotrules/Config.in" + source "package/perl-x10/Config.in" + source "package/perl-xml-libxml/Config.in" + source "package/perl-xml-namespacesupport/Config.in" + source "package/perl-xml-sax/Config.in" + source "package/perl-xml-sax-base/Config.in" +endmenu +endif + source "package/php/Config.in" +if BR2_PACKAGE_PHP +if !BR2_STATIC_LIBS +menu "External php extensions" + source "package/php-amqp/Config.in" + source "package/php-geoip/Config.in" + source "package/php-gnupg/Config.in" + source "package/php-imagick/Config.in" + source "package/php-memcached/Config.in" + source "package/php-ssh2/Config.in" + source "package/php-xdebug/Config.in" + source "package/php-yaml/Config.in" + source "package/php-zmq/Config.in" +endmenu +endif +if BR2_STATIC_LIBS +comment "External PHP extensions need a toolchain w/ dynamic library" +endif +endif + source "package/python/Config.in" + source "package/python3/Config.in" +if BR2_PACKAGE_PYTHON || BR2_PACKAGE_PYTHON3 +menu "External python modules" + source "package/python-aenum/Config.in" + source "package/python-aioblescan/Config.in" + source "package/python-aiocoap/Config.in" + source "package/python-aioconsole/Config.in" + source "package/python-aiodns/Config.in" + source "package/python-aiofiles/Config.in" + source "package/python-aiohttp/Config.in" + source "package/python-aiohttp-cors/Config.in" + source "package/python-aiohttp-debugtoolbar/Config.in" + source "package/python-aiohttp-jinja2/Config.in" + source "package/python-aiohttp-mako/Config.in" + source "package/python-aiohttp-remotes/Config.in" + source "package/python-aiohttp-security/Config.in" + source "package/python-aiohttp-session/Config.in" + source "package/python-aiohttp-sse/Config.in" + source "package/python-aiojobs/Config.in" + source "package/python-aiologstash/Config.in" + source "package/python-aiomonitor/Config.in" + source "package/python-aioredis/Config.in" + source "package/python-aiorwlock/Config.in" + source "package/python-aiosignal/Config.in" + source "package/python-aiozipkin/Config.in" + source "package/python-alsaaudio/Config.in" + source "package/python-ansicolors/Config.in" + source "package/python-argh/Config.in" + source "package/python-argon2-cffi/Config.in" + source "package/python-arrow/Config.in" + source "package/python-asgiref/Config.in" + source "package/python-asn1crypto/Config.in" + source "package/python-async-lru/Config.in" + source "package/python-async-timeout/Config.in" + source "package/python-attrs/Config.in" + source "package/python-autobahn/Config.in" + source "package/python-automat/Config.in" + source "package/python-avro/Config.in" + source "package/python-babel/Config.in" + source "package/python-backcall/Config.in" + source "package/python-backports-abc/Config.in" + source "package/python-backports-functools-lru-cache/Config.in" + source "package/python-backports-shutil-get-terminal-size/Config.in" + source "package/python-backports-ssl-match-hostname/Config.in" + source "package/python-bcrypt/Config.in" + source "package/python-beautifulsoup4/Config.in" + source "package/python-bitstring/Config.in" + source "package/python-bleak/Config.in" + source "package/python-bluezero/Config.in" + source "package/python-boto3/Config.in" + source "package/python-botocore/Config.in" + source "package/python-bottle/Config.in" + source "package/python-brotli/Config.in" + source "package/python-bsdiff4/Config.in" + source "package/python-bunch/Config.in" + source "package/python-cached-property/Config.in" + source "package/python-can/Config.in" + source "package/python-canopen/Config.in" + source "package/python-cbor/Config.in" + source "package/python-cbor2/Config.in" + source "package/python-cchardet/Config.in" + source "package/python-certifi/Config.in" + source "package/python-cffi/Config.in" + source "package/python-channels/Config.in" + source "package/python-channels-redis/Config.in" + source "package/python-characteristic/Config.in" + source "package/python-chardet/Config.in" + source "package/python-cheetah/Config.in" + source "package/python-cheroot/Config.in" + source "package/python-cherrypy/Config.in" + source "package/python-click/Config.in" + source "package/python-coherence/Config.in" + source "package/python-colorama/Config.in" + source "package/python-colorlog/Config.in" + source "package/python-colorzero/Config.in" + source "package/python-configobj/Config.in" + source "package/python-configshell-fb/Config.in" + source "package/python-constantly/Config.in" + source "package/python-couchdb/Config.in" + source "package/python-crayons/Config.in" + source "package/python-crc16/Config.in" + source "package/python-crcmod/Config.in" + source "package/python-crontab/Config.in" + source "package/python-crossbar/Config.in" + source "package/python-cryptography/Config.in" + source "package/python-cssselect/Config.in" + source "package/python-cssutils/Config.in" + source "package/python-cycler/Config.in" + source "package/python-daemon/Config.in" + source "package/python-daemonize/Config.in" + source "package/python-daphne/Config.in" + source "package/python-dataproperty/Config.in" + source "package/python-dateutil/Config.in" + source "package/python-decorator/Config.in" + source "package/python-defusedxml/Config.in" + source "package/python-dialog/Config.in" + source "package/python-dialog3/Config.in" + source "package/python-dicttoxml/Config.in" + source "package/python-django/Config.in" + source "package/python-django-enumfields/Config.in" + source "package/python-dnspython/Config.in" + source "package/python-docker/Config.in" + source "package/python-docker-pycreds/Config.in" + source "package/python-dockerpty/Config.in" + source "package/python-docopt/Config.in" + source "package/python-docutils/Config.in" + source "package/python-dominate/Config.in" + source "package/python-dpkt/Config.in" + source "package/python-ecdsa/Config.in" + source "package/python-engineio/Config.in" + source "package/python-entrypoints/Config.in" + source "package/python-enum/Config.in" + source "package/python-enum34/Config.in" + source "package/python-esptool/Config.in" + source "package/python-falcon/Config.in" + source "package/python-filelock/Config.in" + source "package/python-fire/Config.in" + source "package/python-flask/Config.in" + source "package/python-flask-babel/Config.in" + source "package/python-flask-cors/Config.in" + source "package/python-flask-jsonrpc/Config.in" + source "package/python-flask-login/Config.in" + source "package/python-flask-sqlalchemy/Config.in" + source "package/python-flatbuffers/Config.in" + source "package/python-flup/Config.in" + source "package/python-frozenlist/Config.in" + source "package/python-functools32/Config.in" + source "package/python-future/Config.in" + source "package/python-futures/Config.in" + source "package/python-gitdb2/Config.in" + source "package/python-gobject/Config.in" + source "package/python-gpiozero/Config.in" + source "package/python-greenlet/Config.in" + source "package/python-gunicorn/Config.in" + source "package/python-h2/Config.in" + source "package/python-hiredis/Config.in" + source "package/python-hpack/Config.in" + source "package/python-html5lib/Config.in" + source "package/python-httplib2/Config.in" + source "package/python-huepy/Config.in" + source "package/python-humanize/Config.in" + source "package/python-hyperframe/Config.in" + source "package/python-hyperlink/Config.in" + source "package/python-ibmiotf/Config.in" + source "package/python-id3/Config.in" + source "package/python-idna/Config.in" + source "package/python-ifaddr/Config.in" + source "package/python-incremental/Config.in" + source "package/python-inflection/Config.in" + source "package/python-influxdb/Config.in" + source "package/python-iniconfig/Config.in" + source "package/python-iniparse/Config.in" + source "package/python-intelhex/Config.in" + source "package/python-iowait/Config.in" + source "package/python-ipaddr/Config.in" + source "package/python-ipaddress/Config.in" + source "package/python-ipdb/Config.in" + source "package/python-iptables/Config.in" + source "package/python-ipy/Config.in" + source "package/python-ipython/Config.in" + source "package/python-ipython-genutils/Config.in" + source "package/python-iso8601/Config.in" + source "package/python-itsdangerous/Config.in" + source "package/python-janus/Config.in" + source "package/python-jaraco-classes/Config.in" + source "package/python-jaraco-functools/Config.in" + source "package/python-jedi/Config.in" + source "package/python-jinja2/Config.in" + source "package/python-jmespath/Config.in" + source "package/python-json-schema-validator/Config.in" + source "package/python-jsonmodels/Config.in" + source "package/python-jsonschema/Config.in" + source "package/python-keyring/Config.in" + source "package/python-kiwisolver/Config.in" + source "package/python-libconfig/Config.in" + source "package/python-libusb1/Config.in" + source "package/python-lmdb/Config.in" + source "package/python-lockfile/Config.in" + source "package/python-logbook/Config.in" + source "package/python-logstash/Config.in" + source "package/python-lxml/Config.in" + source "package/python-m2crypto/Config.in" + source "package/python-m2r/Config.in" + source "package/python-mad/Config.in" + source "package/python-mako/Config.in" + source "package/python-markdown/Config.in" + source "package/python-markdown2/Config.in" + source "package/python-markupsafe/Config.in" + source "package/python-matplotlib/Config.in" + source "package/python-mbstrdecoder/Config.in" + source "package/python-meld3/Config.in" + source "package/python-mimeparse/Config.in" + source "package/python-mistune/Config.in" + source "package/python-modbus-tk/Config.in" + source "package/python-more-itertools/Config.in" + source "package/python-msgfy/Config.in" + source "package/python-msgpack/Config.in" + source "package/python-multidict/Config.in" + source "package/python-mutagen/Config.in" + source "package/python-mwclient/Config.in" + source "package/python-mwscrape/Config.in" + source "package/python-mwscrape2slob/Config.in" + source "package/python-nested-dict/Config.in" + source "package/python-netaddr/Config.in" + source "package/python-netifaces/Config.in" + source "package/python-networkmanager/Config.in" + source "package/python-networkx/Config.in" + source "package/python-nfc/Config.in" + source "package/python-numpy/Config.in" + source "package/python-oauthlib/Config.in" + source "package/python-opcua-asyncio/Config.in" + source "package/python-packaging/Config.in" + source "package/python-paho-mqtt/Config.in" + source "package/python-pam/Config.in" + source "package/python-paramiko/Config.in" + source "package/python-parso/Config.in" + source "package/python-passlib/Config.in" + source "package/python-pathlib2/Config.in" + source "package/python-pathpy/Config.in" + source "package/python-pathtools/Config.in" + source "package/python-pathvalidate/Config.in" + source "package/python-periphery/Config.in" + source "package/python-pexpect/Config.in" + source "package/python-pickleshare/Config.in" + source "package/python-piexif/Config.in" + source "package/python-pigpio/Config.in" + source "package/python-pillow/Config.in" + source "package/python-pip/Config.in" + source "package/python-pluggy/Config.in" + source "package/python-ply/Config.in" + source "package/python-portend/Config.in" + source "package/python-posix-ipc/Config.in" + source "package/python-priority/Config.in" + source "package/python-prompt-toolkit/Config.in" + source "package/python-protobuf/Config.in" + source "package/python-psutil/Config.in" + source "package/python-psycopg2/Config.in" + source "package/python-ptyprocess/Config.in" + source "package/python-pudb/Config.in" + source "package/python-py/Config.in" + source "package/python-pyaes/Config.in" + source "package/python-pyalsa/Config.in" + source "package/python-pyasn1/Config.in" + source "package/python-pyasn1-modules/Config.in" + source "package/python-pybind/Config.in" + source "package/python-pycairo/Config.in" + source "package/python-pycares/Config.in" + source "package/python-pycli/Config.in" + source "package/python-pycparser/Config.in" + source "package/python-pycryptodomex/Config.in" + source "package/python-pycups/Config.in" + source "package/python-pydal/Config.in" + source "package/python-pydantic/Config.in" + source "package/python-pyelftools/Config.in" + source "package/python-pyftpdlib/Config.in" + source "package/python-pygame/Config.in" + source "package/python-pygments/Config.in" + source "package/python-pyhamcrest/Config.in" + source "package/python-pyicu/Config.in" + source "package/python-pyinotify/Config.in" + source "package/python-pyjwt/Config.in" + source "package/python-pylibftdi/Config.in" + source "package/python-pylru/Config.in" + source "package/python-pymodbus/Config.in" + source "package/python-pymysql/Config.in" + source "package/python-pynacl/Config.in" + source "package/python-pyopenssl/Config.in" + source "package/python-pyparsing/Config.in" + source "package/python-pyparted/Config.in" + source "package/python-pypcap/Config.in" + source "package/python-pyqrcode/Config.in" + source "package/python-pyqt5/Config.in" + source "package/python-pyratemp/Config.in" + source "package/python-pyro/Config.in" + source "package/python-pyroute2/Config.in" + source "package/python-pysendfile/Config.in" + source "package/python-pysftp/Config.in" + source "package/python-pysmb/Config.in" + source "package/python-pysmi/Config.in" + source "package/python-pysnmp/Config.in" + source "package/python-pysnmp-mibs/Config.in" + source "package/python-pysocks/Config.in" + source "package/python-pytablereader/Config.in" + source "package/python-pytablewriter/Config.in" + source "package/python-pytest/Config.in" + source "package/python-pytest-asyncio/Config.in" + source "package/python-pytrie/Config.in" + source "package/python-pytz/Config.in" + source "package/python-pyudev/Config.in" + source "package/python-pyusb/Config.in" + source "package/python-pyxb/Config.in" + source "package/python-pyyaml/Config.in" + source "package/python-pyzmq/Config.in" + source "package/python-raven/Config.in" + source "package/python-redis/Config.in" + source "package/python-reentry/Config.in" + source "package/python-regex/Config.in" + source "package/python-remi/Config.in" + source "package/python-request-id/Config.in" + source "package/python-requests/Config.in" + source "package/python-requests-oauthlib/Config.in" + source "package/python-requests-toolbelt/Config.in" + source "package/python-rpi-gpio/Config.in" + source "package/python-rpi-ws281x/Config.in" + source "package/python-rtslib-fb/Config.in" + source "package/python-s3transfer/Config.in" + source "package/python-scandir/Config.in" + source "package/python-scapy/Config.in" + source "package/python-schedule/Config.in" + source "package/python-sdnotify/Config.in" + source "package/python-secretstorage/Config.in" + source "package/python-see/Config.in" + source "package/python-semver/Config.in" + source "package/python-sentry-sdk/Config.in" + source "package/python-serial/Config.in" + source "package/python-serial-asyncio/Config.in" + source "package/python-service-identity/Config.in" + source "package/python-setproctitle/Config.in" + source "package/python-setuptools/Config.in" + source "package/python-sh/Config.in" + source "package/python-shutilwhich/Config.in" + source "package/python-simpleaudio/Config.in" + source "package/python-simplegeneric/Config.in" + source "package/python-simplejson/Config.in" + source "package/python-simplelogging/Config.in" + source "package/python-simplesqlite/Config.in" + source "package/python-singledispatch/Config.in" + source "package/python-sip/Config.in" + source "package/python-six/Config.in" + source "package/python-slob/Config.in" + source "package/python-smbus-cffi/Config.in" + source "package/python-smmap2/Config.in" + source "package/python-snappy/Config.in" + source "package/python-socketio/Config.in" + source "package/python-sockjs/Config.in" + source "package/python-sortedcontainers/Config.in" + source "package/python-soupsieve/Config.in" + source "package/python-spidev/Config.in" + source "package/python-sqlalchemy/Config.in" + source "package/python-sqliteschema/Config.in" + source "package/python-sqlparse/Config.in" + source "package/python-subprocess32/Config.in" + source "package/python-systemd/Config.in" + source "package/python-tabledata/Config.in" + source "package/python-tempora/Config.in" + source "package/python-termcolor/Config.in" + source "package/python-terminaltables/Config.in" + source "package/python-texttable/Config.in" + source "package/python-thrift/Config.in" + source "package/python-tinyrpc/Config.in" + source "package/python-tomako/Config.in" + source "package/python-toml/Config.in" + source "package/python-tornado/Config.in" + source "package/python-tqdm/Config.in" + source "package/python-traitlets/Config.in" + source "package/python-treq/Config.in" + source "package/python-twisted/Config.in" + source "package/python-txaio/Config.in" + source "package/python-txdbus/Config.in" + source "package/python-txtorcon/Config.in" + source "package/python-typepy/Config.in" + source "package/python-typing/Config.in" + source "package/python-typing-extensions/Config.in" + source "package/python-u-msgpack/Config.in" + source "package/python-ubjson/Config.in" + source "package/python-ujson/Config.in" + source "package/python-urllib3/Config.in" + source "package/python-urwid/Config.in" + source "package/python-uvloop/Config.in" + source "package/python-validators/Config.in" + source "package/python-versiontools/Config.in" + source "package/python-visitor/Config.in" + source "package/python-watchdog/Config.in" + source "package/python-wcwidth/Config.in" + source "package/python-web2py/Config.in" + source "package/python-webencodings/Config.in" + source "package/python-webob/Config.in" + source "package/python-webpy/Config.in" + source "package/python-websocket-client/Config.in" + source "package/python-websockets/Config.in" + source "package/python-werkzeug/Config.in" + source "package/python-whoosh/Config.in" + source "package/python-wrapt/Config.in" + source "package/python-ws4py/Config.in" + source "package/python-wsaccel/Config.in" + source "package/python-wtforms/Config.in" + source "package/python-xlib/Config.in" + source "package/python-xlrd/Config.in" + source "package/python-xlsxwriter/Config.in" + source "package/python-xlutils/Config.in" + source "package/python-xlwt/Config.in" + source "package/python-xmltodict/Config.in" + source "package/python-xmodem/Config.in" + source "package/python-yarl/Config.in" + source "package/python-yatl/Config.in" + source "package/python-yieldfrom/Config.in" + source "package/python-zc-lockfile/Config.in" + source "package/python-zeroconf/Config.in" + source "package/python-zope-interface/Config.in" +endmenu +endif + source "package/quickjs/Config.in" + source "package/ruby/Config.in" + source "package/tcl/Config.in" +if BR2_PACKAGE_TCL +menu "Tcl libraries/modules" + source "package/expect/Config.in" + source "package/tcllib/Config.in" +endmenu +endif +endmenu + +menu "Libraries" + +menu "Audio/Sound" + source "package/alsa-lib/Config.in" + source "package/alure/Config.in" + source "package/aubio/Config.in" + source "package/bcg729/Config.in" + source "package/caps/Config.in" + source "package/fdk-aac/Config.in" + source "package/libao/Config.in" + source "package/libasplib/Config.in" + source "package/libbroadvoice/Config.in" + source "package/libcdaudio/Config.in" + source "package/libcddb/Config.in" + source "package/libcdio/Config.in" + source "package/libcdio-paranoia/Config.in" + source "package/libcodec2/Config.in" + source "package/libcue/Config.in" + source "package/libcuefile/Config.in" + source "package/libebur128/Config.in" + source "package/libg7221/Config.in" + source "package/libgsm/Config.in" + source "package/libid3tag/Config.in" + source "package/libilbc/Config.in" + source "package/liblo/Config.in" + source "package/libmad/Config.in" + source "package/libmodplug/Config.in" + source "package/libmpd/Config.in" + source "package/libmpdclient/Config.in" + source "package/libreplaygain/Config.in" + source "package/libsamplerate/Config.in" + source "package/libsidplay2/Config.in" + source "package/libsilk/Config.in" + source "package/libsndfile/Config.in" + source "package/libsoundtouch/Config.in" + source "package/libsoxr/Config.in" + source "package/libvorbis/Config.in" + source "package/mp4v2/Config.in" + source "package/openal/Config.in" + source "package/opencore-amr/Config.in" + source "package/opus/Config.in" + source "package/opusfile/Config.in" + source "package/portaudio/Config.in" + source "package/sbc/Config.in" + source "package/spandsp/Config.in" + source "package/speex/Config.in" + source "package/speexdsp/Config.in" + source "package/taglib/Config.in" + source "package/tinyalsa/Config.in" + source "package/tremor/Config.in" + source "package/vo-aacenc/Config.in" + source "package/webrtc-audio-processing/Config.in" +endmenu + +menu "Compression and decompression" + source "package/libarchive/Config.in" + source "package/libmspack/Config.in" + source "package/libsquish/Config.in" + source "package/libzip/Config.in" + source "package/lz4/Config.in" + source "package/lzo/Config.in" + source "package/minizip/Config.in" + source "package/snappy/Config.in" + source "package/szip/Config.in" + source "package/zlib/Config.in" + source "package/zziplib/Config.in" +endmenu + +menu "Crypto" + source "package/bearssl/Config.in" + source "package/beecrypt/Config.in" + source "package/botan/Config.in" + source "package/ca-certificates/Config.in" + source "package/cryptodev/Config.in" + source "package/gcr/Config.in" + source "package/gnutls/Config.in" + source "package/libargon2/Config.in" + source "package/libassuan/Config.in" + source "package/libgcrypt/Config.in" + source "package/libgpg-error/Config.in" + source "package/libgpgme/Config.in" + source "package/libkcapi/Config.in" + source "package/libksba/Config.in" + source "package/libmcrypt/Config.in" + source "package/libmhash/Config.in" + source "package/libnss/Config.in" + source "package/libolm/Config.in" + source "package/libp11/Config.in" + source "package/libscrypt/Config.in" + source "package/libsecret/Config.in" + source "package/libsha1/Config.in" + source "package/libsodium/Config.in" + source "package/libssh/Config.in" + source "package/libssh2/Config.in" + source "package/libtomcrypt/Config.in" + source "package/libuecc/Config.in" + source "package/mbedtls/Config.in" + source "package/nettle/Config.in" + source "package/openssl/Config.in" + source "package/pkcs11-helper/Config.in" + source "package/rhash/Config.in" + source "package/tinydtls/Config.in" + source "package/tpm2-pkcs11/Config.in" + source "package/tpm2-tss/Config.in" + source "package/trousers/Config.in" + source "package/ustream-ssl/Config.in" + source "package/wolfssl/Config.in" +endmenu + +menu "Database" + source "package/berkeleydb/Config.in" + source "package/cppdb/Config.in" + source "package/gdbm/Config.in" + source "package/hiredis/Config.in" + source "package/kompexsqlite/Config.in" + source "package/leveldb/Config.in" + source "package/libgit2/Config.in" + source "package/libmdbx/Config.in" + source "package/libodb/Config.in" + source "package/libodb-boost/Config.in" + source "package/libodb-mysql/Config.in" + source "package/libodb-pgsql/Config.in" + source "package/libpqxx/Config.in" + source "package/mongodb/Config.in" + source "package/mysql/Config.in" + source "package/postgresql/Config.in" + source "package/redis/Config.in" + source "package/rocksdb/Config.in" + source "package/sqlcipher/Config.in" + source "package/sqlite/Config.in" + source "package/timescaledb/Config.in" + source "package/unixodbc/Config.in" +endmenu + +menu "Filesystem" + source "package/gamin/Config.in" + source "package/libconfig/Config.in" + source "package/libconfuse/Config.in" + source "package/libfuse/Config.in" + source "package/libfuse3/Config.in" + source "package/liblockfile/Config.in" + source "package/libnfs/Config.in" + source "package/libsysfs/Config.in" + source "package/lockdev/Config.in" + source "package/physfs/Config.in" +endmenu + +menu "Graphics" + source "package/assimp/Config.in" + source "package/at-spi2-atk/Config.in" + source "package/at-spi2-core/Config.in" + source "package/atk/Config.in" + source "package/atkmm/Config.in" + source "package/bayer2rgb-neon/Config.in" + source "package/bullet/Config.in" + source "package/cairo/Config.in" + source "package/cairomm/Config.in" + source "package/chipmunk/Config.in" + source "package/exempi/Config.in" + source "package/exiv2/Config.in" + source "package/fltk/Config.in" + source "package/fontconfig/Config.in" + source "package/freetype/Config.in" + source "package/gd/Config.in" + source "package/gdk-pixbuf/Config.in" + source "package/giblib/Config.in" + source "package/giflib/Config.in" + source "package/granite/Config.in" + source "package/graphite2/Config.in" + source "package/gtkmm3/Config.in" + source "package/gtksourceview/Config.in" + source "package/harfbuzz/Config.in" + source "package/ijs/Config.in" + source "package/imlib2/Config.in" + source "package/intel-gmmlib/Config.in" + source "package/intel-mediadriver/Config.in" + source "package/intel-mediasdk/Config.in" + source "package/irrlicht/Config.in" + source "package/jasper/Config.in" + source "package/jbig2dec/Config.in" + source "package/jpeg/Config.in" + source "package/kmsxx/Config.in" + source "package/lcms2/Config.in" + source "package/lensfun/Config.in" + source "package/leptonica/Config.in" + source "package/lesstif/Config.in" + source "package/libart/Config.in" + source "package/libdmtx/Config.in" + source "package/libdri2/Config.in" + source "package/libdrm/Config.in" + source "package/libepoxy/Config.in" + source "package/libexif/Config.in" + source "package/libfm/Config.in" + source "package/libfm-extra/Config.in" + source "package/libfreeglut/Config.in" + source "package/libfreeimage/Config.in" + source "package/libgdiplus/Config.in" + source "package/libgeotiff/Config.in" + source "package/libglade/Config.in" + source "package/libglew/Config.in" + source "package/libglfw/Config.in" + source "package/libglu/Config.in" + source "package/libgta/Config.in" + source "package/libgtk2/Config.in" + source "package/libgtk3/Config.in" + source "package/libmediaart/Config.in" + source "package/libmng/Config.in" + source "package/libpng/Config.in" + source "package/libqrencode/Config.in" + source "package/libraw/Config.in" + source "package/librsvg/Config.in" + source "package/libsoil/Config.in" + source "package/libsvg/Config.in" + source "package/libsvg-cairo/Config.in" + source "package/libsvgtiny/Config.in" + source "package/libva/Config.in" + source "package/libva-intel-driver/Config.in" + source "package/libvdpau/Config.in" + source "package/libvips/Config.in" + source "package/libwpe/Config.in" + source "package/menu-cache/Config.in" + source "package/opencv3/Config.in" + source "package/opengl/Config.in" + source "package/openjpeg/Config.in" + source "package/pango/Config.in" + source "package/pangomm/Config.in" + source "package/pipewire/Config.in" + source "package/pixman/Config.in" + source "package/poppler/Config.in" + source "package/powervr/Config.in" + source "package/tiff/Config.in" + source "package/unclutter-xfixes/Config.in" + source "package/waffle/Config.in" + source "package/wayland/Config.in" + source "package/wayland-protocols/Config.in" + source "package/wayland-utils/Config.in" + source "package/waylandpp/Config.in" + source "package/webkitgtk/Config.in" + source "package/webp/Config.in" + source "package/wlroots/Config.in" + source "package/woff2/Config.in" + source "package/wpebackend-fdo/Config.in" + source "package/wpewebkit/Config.in" + source "package/zbar/Config.in" + source "package/zxing-cpp/Config.in" +endmenu + +menu "Hardware handling" + source "package/acsccid/Config.in" + source "package/bcm2835/Config.in" + source "package/c-periphery/Config.in" + source "package/ccid/Config.in" + source "package/dtc/Config.in" + source "package/gnu-efi/Config.in" + source "package/hackrf/Config.in" + source "package/hidapi/Config.in" + source "package/jitterentropy-library/Config.in" + source "package/lcdapi/Config.in" + source "package/let-me-create/Config.in" + source "package/libaio/Config.in" + source "package/libatasmart/Config.in" + source "package/libblockdev/Config.in" + source "package/libcec/Config.in" + source "package/libfreefare/Config.in" + source "package/libftdi/Config.in" + source "package/libftdi1/Config.in" + source "package/libgphoto2/Config.in" + source "package/libgpiod/Config.in" + source "package/libgudev/Config.in" + source "package/libhid/Config.in" + source "package/libiio/Config.in" + source "package/libinput/Config.in" + source "package/libiqrf/Config.in" + source "package/libllcp/Config.in" + source "package/libmbim/Config.in" + source "package/libnfc/Config.in" + source "package/libpciaccess/Config.in" + source "package/libphidget/Config.in" + source "package/libpri/Config.in" + source "package/libqmi/Config.in" + source "package/libraw1394/Config.in" + source "package/librtas/Config.in" + source "package/librtlsdr/Config.in" + source "package/libserial/Config.in" + source "package/libserialport/Config.in" + source "package/libsigrok/Config.in" + source "package/libsigrokdecode/Config.in" + source "package/libsoc/Config.in" + source "package/libss7/Config.in" + source "package/libusb/Config.in" + source "package/libusb-compat/Config.in" + source "package/libusbgx/Config.in" + source "package/libv4l/Config.in" + source "package/libxkbcommon/Config.in" + source "package/mraa/Config.in" + source "package/mtdev/Config.in" + source "package/ne10/Config.in" + source "package/neardal/Config.in" + source "package/owfs/Config.in" + source "package/pcsc-lite/Config.in" + source "package/tslib/Config.in" + source "package/uhd/Config.in" + source "package/urg/Config.in" +endmenu + +menu "Javascript" + source "package/angularjs/Config.in" +if BR2_PACKAGE_ANGULARJS +menu "External AngularJS plugins" + source "package/angular-websocket/Config.in" +endmenu +endif + source "package/bootstrap/Config.in" + source "package/chartjs/Config.in" + source "package/datatables/Config.in" + source "package/datatables-buttons/Config.in" + source "package/datatables-fixedcolumns/Config.in" + source "package/datatables-responsive/Config.in" + source "package/duktape/Config.in" + source "package/explorercanvas/Config.in" + source "package/flot/Config.in" + source "package/jquery/Config.in" +if BR2_PACKAGE_JQUERY +menu "External jQuery plugins" + source "package/jquery-datetimepicker/Config.in" + source "package/jquery-keyboard/Config.in" + source "package/jquery-mobile/Config.in" + source "package/jquery-sidebar/Config.in" + source "package/jquery-sparkline/Config.in" + source "package/jquery-ui/Config.in" + source "package/jquery-ui-themes/Config.in" + source "package/jquery-validation/Config.in" +endmenu +endif + source "package/jsmin/Config.in" + source "package/json-javascript/Config.in" + source "package/jszip/Config.in" + source "package/openlayers/Config.in" + source "package/popperjs/Config.in" + source "package/spidermonkey/Config.in" + source "package/vuejs/Config.in" +endmenu + +menu "JSON/XML" + source "package/benejson/Config.in" + source "package/cjson/Config.in" + source "package/expat/Config.in" + source "package/jansson/Config.in" + source "package/jose/Config.in" + source "package/jsmn/Config.in" + source "package/json-c/Config.in" + source "package/json-for-modern-cpp/Config.in" + source "package/json-glib/Config.in" + source "package/jsoncpp/Config.in" + source "package/libbson/Config.in" + source "package/libfastjson/Config.in" + source "package/libjson/Config.in" + source "package/libroxml/Config.in" + source "package/libucl/Config.in" + source "package/libxml2/Config.in" + source "package/libxmlpp/Config.in" + source "package/libxmlrpc/Config.in" + source "package/libxslt/Config.in" + source "package/libyaml/Config.in" + source "package/mxml/Config.in" + source "package/pugixml/Config.in" + source "package/rapidjson/Config.in" + source "package/rapidxml/Config.in" + source "package/raptor/Config.in" + source "package/tinyxml/Config.in" + source "package/tinyxml2/Config.in" + source "package/valijson/Config.in" + source "package/xerces/Config.in" + source "package/yajl/Config.in" + source "package/yaml-cpp/Config.in" +endmenu + +menu "Logging" + source "package/glog/Config.in" + source "package/liblog4c-localtime/Config.in" + source "package/liblogging/Config.in" + source "package/log4cplus/Config.in" + source "package/log4cpp/Config.in" + source "package/log4cxx/Config.in" + source "package/opentracing-cpp/Config.in" + source "package/spdlog/Config.in" + source "package/zlog/Config.in" +endmenu + +menu "Multimedia" + source "package/bitstream/Config.in" + source "package/dav1d/Config.in" + source "package/kvazaar/Config.in" + source "package/libaacs/Config.in" + source "package/libass/Config.in" + source "package/libbdplus/Config.in" + source "package/libbluray/Config.in" + source "package/libcamera/Config.in" + source "package/libdcadec/Config.in" + source "package/libdvbcsa/Config.in" + source "package/libdvbpsi/Config.in" + source "package/libdvbsi/Config.in" + source "package/libdvdcss/Config.in" + source "package/libdvdnav/Config.in" + source "package/libdvdread/Config.in" + source "package/libebml/Config.in" + source "package/libhdhomerun/Config.in" + source "package/libimxvpuapi/Config.in" + source "package/libmatroska/Config.in" + source "package/libmms/Config.in" + source "package/libmpeg2/Config.in" + source "package/libogg/Config.in" + source "package/libopenh264/Config.in" + source "package/libopusenc/Config.in" + source "package/libtheora/Config.in" + source "package/libudfread/Config.in" + source "package/libvpx/Config.in" + source "package/libyuv/Config.in" + source "package/live555/Config.in" + source "package/mediastreamer/Config.in" + source "package/x264/Config.in" + source "package/x265/Config.in" +endmenu + +menu "Networking" + source "package/agentpp/Config.in" + source "package/azmq/Config.in" + source "package/azure-iot-sdk-c/Config.in" + source "package/batman-adv/Config.in" + source "package/belle-sip/Config.in" + source "package/bluez5_utils-headers/Config.in" + source "package/c-ares/Config.in" + source "package/canfestival/Config.in" + source "package/cgic/Config.in" + source "package/cppzmq/Config.in" + source "package/curlpp/Config.in" + source "package/czmq/Config.in" + source "package/daq/Config.in" + source "package/davici/Config.in" + source "package/enet/Config.in" + source "package/filemq/Config.in" + source "package/flickcurl/Config.in" + source "package/fmlib/Config.in" + source "package/freeradius-client/Config.in" + source "package/gensio/Config.in" + source "package/geoip/Config.in" + source "package/glib-networking/Config.in" + source "package/grpc/Config.in" + source "package/gssdp/Config.in" + source "package/gupnp/Config.in" + source "package/gupnp-av/Config.in" + source "package/gupnp-dlna/Config.in" + source "package/ibrcommon/Config.in" + source "package/ibrdtn/Config.in" + source "package/libcgi/Config.in" + source "package/libcgicc/Config.in" + source "package/libcoap/Config.in" + source "package/libcpprestsdk/Config.in" + source "package/libcurl/Config.in" + source "package/libdnet/Config.in" + source "package/libeXosip2/Config.in" + source "package/libfcgi/Config.in" + source "package/libgsasl/Config.in" + source "package/libhtp/Config.in" + source "package/libhttpparser/Config.in" + source "package/libhttpserver/Config.in" + source "package/libidn/Config.in" + source "package/libidn2/Config.in" + source "package/libiscsi/Config.in" + source "package/libkrb5/Config.in" + source "package/libldns/Config.in" + source "package/libmaxminddb/Config.in" + source "package/libmbus/Config.in" + source "package/libmemcached/Config.in" + source "package/libmicrohttpd/Config.in" + source "package/libminiupnpc/Config.in" + source "package/libmnl/Config.in" + source "package/libmodbus/Config.in" + source "package/libmodsecurity/Config.in" + source "package/libnatpmp/Config.in" + source "package/libndp/Config.in" + source "package/libnet/Config.in" + source "package/libnetconf2/Config.in" + source "package/libnetfilter_acct/Config.in" + source "package/libnetfilter_conntrack/Config.in" + source "package/libnetfilter_cthelper/Config.in" + source "package/libnetfilter_cttimeout/Config.in" + source "package/libnetfilter_log/Config.in" + source "package/libnetfilter_queue/Config.in" + source "package/libnfnetlink/Config.in" + source "package/libnftnl/Config.in" + source "package/libnice/Config.in" + source "package/libnids/Config.in" + source "package/libnl/Config.in" + source "package/libnpupnp/Config.in" + source "package/liboauth/Config.in" + source "package/liboping/Config.in" + source "package/libosip2/Config.in" + source "package/libpagekite/Config.in" + source "package/libpcap/Config.in" + source "package/libpjsip/Config.in" + source "package/librelp/Config.in" + source "package/librsync/Config.in" + source "package/libshairplay/Config.in" + source "package/libshout/Config.in" + source "package/libsocketcan/Config.in" + source "package/libsoup/Config.in" + source "package/libsrtp/Config.in" + source "package/libstrophe/Config.in" + source "package/libtelnet/Config.in" + source "package/libtirpc/Config.in" + source "package/libtorrent/Config.in" + source "package/libtorrent-rasterbar/Config.in" + source "package/libuev/Config.in" + source "package/libuhttpd/Config.in" + source "package/libupnp/Config.in" + source "package/libupnpp/Config.in" + source "package/liburiparser/Config.in" + source "package/libuwsc/Config.in" + source "package/libvncserver/Config.in" + source "package/libwebsock/Config.in" + source "package/libwebsockets/Config.in" + source "package/libyang/Config.in" + source "package/lksctp-tools/Config.in" + source "package/mbuffer/Config.in" + source "package/mongoose/Config.in" + source "package/nanomsg/Config.in" + source "package/neon/Config.in" + source "package/netopeer2/Config.in" + source "package/nghttp2/Config.in" + source "package/norm/Config.in" + source "package/nss-mdns/Config.in" + source "package/nss-myhostname/Config.in" + source "package/nss-pam-ldapd/Config.in" + source "package/omniorb/Config.in" + source "package/open62541/Config.in" + source "package/openldap/Config.in" + source "package/openmpi/Config.in" + source "package/openpgm/Config.in" + source "package/openzwave/Config.in" + source "package/ortp/Config.in" + source "package/paho-mqtt-c/Config.in" + source "package/paho-mqtt-cpp/Config.in" + source "package/pistache/Config.in" + source "package/qdecoder/Config.in" + source "package/qpid-proton/Config.in" + source "package/rabbitmq-c/Config.in" + source "package/resiprocate/Config.in" + source "package/restclient-cpp/Config.in" + source "package/rtmpdump/Config.in" + source "package/slirp/Config.in" + source "package/snmppp/Config.in" + source "package/sofia-sip/Config.in" + source "package/sysrepo/Config.in" + source "package/thrift/Config.in" + source "package/usbredir/Config.in" + source "package/wampcc/Config.in" + source "package/websocketpp/Config.in" + source "package/zeromq/Config.in" + source "package/zmqpp/Config.in" + source "package/zyre/Config.in" + source "package/swconfig/Config.in" +endmenu + +menu "Other" + source "package/apr/Config.in" + source "package/apr-util/Config.in" + source "package/argp-standalone/Config.in" + source "package/armadillo/Config.in" + source "package/atf/Config.in" + source "package/avro-c/Config.in" + source "package/bctoolbox/Config.in" + source "package/bdwgc/Config.in" + source "package/belr/Config.in" + source "package/boost/Config.in" + source "package/c-capnproto/Config.in" + source "package/capnproto/Config.in" + source "package/cctz/Config.in" + source "package/cereal/Config.in" + source "package/clang/Config.in" + source "package/clapack/Config.in" + source "package/cmocka/Config.in" + source "package/cppcms/Config.in" + source "package/cracklib/Config.in" + source "package/dawgdic/Config.in" + source "package/ding-libs/Config.in" + source "package/eigen/Config.in" + source "package/elfutils/Config.in" + source "package/ell/Config.in" + source "package/fftw/Config.in" + source "package/flann/Config.in" + source "package/flatbuffers/Config.in" + source "package/flatcc/Config.in" + source "package/gconf/Config.in" + source "package/gflags/Config.in" + source "package/gli/Config.in" + source "package/glibmm/Config.in" + source "package/glm/Config.in" + source "package/gmp/Config.in" + source "package/gobject-introspection/Config.in" + source "package/gsl/Config.in" + source "package/gtest/Config.in" + source "package/jemalloc/Config.in" + source "package/lapack/Config.in" + source "package/libabseil-cpp/Config.in" + source "package/libargtable2/Config.in" + source "package/libatomic_ops/Config.in" + source "package/libavl/Config.in" + source "package/libb64/Config.in" + source "package/libbacktrace/Config.in" + source "package/libbsd/Config.in" + source "package/libbytesize/Config.in" + source "package/libcap/Config.in" + source "package/libcap-ng/Config.in" + source "package/libcgroup/Config.in" + source "package/libclc/Config.in" + source "package/libcofi/Config.in" + source "package/libcorrect/Config.in" + source "package/libcrossguid/Config.in" + source "package/libcsv/Config.in" + source "package/libdaemon/Config.in" + source "package/libeastl/Config.in" + source "package/libee/Config.in" + source "package/libev/Config.in" + source "package/libevdev/Config.in" + source "package/libevent/Config.in" + source "package/libffi/Config.in" + source "package/libgee/Config.in" + source "package/libgeos/Config.in" + source "package/libglib2/Config.in" + source "package/libglob/Config.in" + source "package/libical/Config.in" + source "package/libite/Config.in" + source "package/liblinear/Config.in" + source "package/libloki/Config.in" + source "package/libnpth/Config.in" + source "package/libnspr/Config.in" + source "package/libpfm4/Config.in" + source "package/libplatform/Config.in" + source "package/libplist/Config.in" + source "package/libpthread-stubs/Config.in" + source "package/libpthsem/Config.in" + source "package/libpwquality/Config.in" + source "package/libseccomp/Config.in" + source "package/libsigc/Config.in" + source "package/libsigsegv/Config.in" + source "package/libspatialindex/Config.in" + source "package/libtasn1/Config.in" + source "package/libtommath/Config.in" + source "package/libtpl/Config.in" + source "package/libubox/Config.in" + source "package/libuci/Config.in" + source "package/libunwind/Config.in" + source "package/liburcu/Config.in" + source "package/libuv/Config.in" + source "package/lightning/Config.in" + source "package/linux-pam/Config.in" +if BR2_PACKAGE_LINUX_PAM +comment "linux-pam plugins" + source "package/libpam-nfc/Config.in" + source "package/libpam-radius-auth/Config.in" + source "package/libpam-tacplus/Config.in" +endif + source "package/liquid-dsp/Config.in" + source "package/llvm/Config.in" + source "package/lttng-libust/Config.in" + source "package/matio/Config.in" + source "package/mpc/Config.in" + source "package/mpdecimal/Config.in" + source "package/mpfr/Config.in" + source "package/mpir/Config.in" + source "package/msgpack/Config.in" + source "package/musl-compat-headers/Config.in" + source "package/musl-fts/Config.in" + source "package/openblas/Config.in" + source "package/orc/Config.in" + source "package/p11-kit/Config.in" + source "package/poco/Config.in" + source "package/protobuf/Config.in" + source "package/protobuf-c/Config.in" + source "package/qhull/Config.in" + source "package/qlibc/Config.in" + source "package/riemann-c-client/Config.in" + source "package/shapelib/Config.in" + source "package/skalibs/Config.in" + source "package/sphinxbase/Config.in" + source "package/startup-notification/Config.in" + source "package/tinycbor/Config.in" + source "package/tz/Config.in" + source "package/tzdata/Config.in" + source "package/uvw/Config.in" + source "package/xapian/Config.in" +endmenu + +menu "Security" + source "package/libapparmor/Config.in" + source "package/libselinux/Config.in" + source "package/libsemanage/Config.in" + source "package/libsepol/Config.in" + source "package/safeclib/Config.in" + source "package/libelectric-fence/Config.in" +endmenu + +menu "Text and terminal handling" + source "package/augeas/Config.in" + source "package/enchant/Config.in" + source "package/fmt/Config.in" + source "package/fstrcmp/Config.in" + source "package/icu/Config.in" + source "package/inih/Config.in" + source "package/libcli/Config.in" + source "package/libedit/Config.in" + source "package/libenca/Config.in" + source "package/libestr/Config.in" + source "package/libfribidi/Config.in" + source "package/libiconv/Config.in" + source "package/libunistring/Config.in" + source "package/linenoise/Config.in" + source "package/ncurses/Config.in" + source "package/newt/Config.in" + source "package/oniguruma/Config.in" + source "package/pcre/Config.in" + source "package/pcre2/Config.in" + source "package/popt/Config.in" + source "package/re2/Config.in" + source "package/readline/Config.in" + source "package/slang/Config.in" + source "package/tclap/Config.in" + source "package/utf8proc/Config.in" +endmenu + +endmenu + +menu "Mail" + source "package/dovecot/Config.in" + source "package/exim/Config.in" + source "package/fetchmail/Config.in" + source "package/heirloom-mailx/Config.in" + source "package/libesmtp/Config.in" + source "package/msmtp/Config.in" + source "package/mutt/Config.in" + source "package/sylpheed/Config.in" +endmenu + +menu "Miscellaneous" + source "package/aespipe/Config.in" + source "package/bc/Config.in" + source "package/bitcoin/Config.in" + source "package/clamav/Config.in" + source "package/collectd/Config.in" + source "package/collectl/Config.in" + source "package/domoticz/Config.in" + source "package/empty/Config.in" + source "package/gnuradio/Config.in" + source "package/googlefontdirectory/Config.in" + source "package/gqrx/Config.in" + source "package/gr-osmosdr/Config.in" + source "package/gsettings-desktop-schemas/Config.in" + source "package/haveged/Config.in" + source "package/linux-syscall-support/Config.in" + source "package/mcrypt/Config.in" + source "package/mobile-broadband-provider-info/Config.in" + source "package/netdata/Config.in" + source "package/proj/Config.in" + source "package/qemu/Config.in" + source "package/qpdf/Config.in" + source "package/shared-mime-info/Config.in" + source "package/sunwait/Config.in" + source "package/taskd/Config.in" + source "package/wine/Config.in" + source "package/xutil_util-macros/Config.in" +endmenu + +menu "Networking applications" + source "package/aircrack-ng/Config.in" + source "package/aoetools/Config.in" + source "package/apache/Config.in" + source "package/argus/Config.in" + source "package/arp-scan/Config.in" + source "package/arptables/Config.in" + source "package/asterisk/Config.in" + source "package/atftp/Config.in" + source "package/autossh/Config.in" + source "package/avahi/Config.in" + source "package/axel/Config.in" + source "package/babeld/Config.in" + source "package/bandwidthd/Config.in" + source "package/batctl/Config.in" + source "package/bcusdk/Config.in" + source "package/bind/Config.in" + source "package/bird/Config.in" + source "package/bluez-tools/Config.in" + source "package/bluez5_utils/Config.in" + source "package/bmon/Config.in" + source "package/boinc/Config.in" + source "package/brcm-patchram-plus/Config.in" + source "package/bridge-utils/Config.in" + source "package/bwm-ng/Config.in" + source "package/c-icap/Config.in" + source "package/c-icap-modules/Config.in" + source "package/can-utils/Config.in" + source "package/pengutronix-can-utils/Config.in" + source "package/cannelloni/Config.in" + source "package/casync/Config.in" + source "package/chrony/Config.in" + source "package/civetweb/Config.in" + source "package/connman/Config.in" + source "package/connman-gtk/Config.in" + source "package/conntrack-tools/Config.in" + source "package/corkscrew/Config.in" + source "package/crda/Config.in" + source "package/ctorrent/Config.in" + source "package/cups/Config.in" + source "package/cups-filters/Config.in" + source "package/dante/Config.in" + source "package/darkhttpd/Config.in" + source "package/dehydrated/Config.in" + source "package/dhcp/Config.in" + source "package/dhcpcd/Config.in" + source "package/dhcpcd5/Config.in" + source "package/dhcpdump/Config.in" + source "package/dnsmasq/Config.in" + source "package/drbd-utils/Config.in" + source "package/dropbear/Config.in" + source "package/easyframes/Config.in" + source "package/ebtables/Config.in" + source "package/ejabberd/Config.in" + source "package/ethtool/Config.in" + source "package/faifa/Config.in" + source "package/fail2ban/Config.in" + source "package/fastd/Config.in" + source "package/fcgiwrap/Config.in" + source "package/flannel/Config.in" + source "package/fmc/Config.in" + source "package/fping/Config.in" + source "package/freeswitch/Config.in" + source "package/freeswitch-mod-bcg729/Config.in" + source "package/frr/Config.in" + source "package/gerbera/Config.in" + source "package/gesftpserver/Config.in" + source "package/gloox/Config.in" + source "package/glorytun/Config.in" + source "package/gupnp-tools/Config.in" + source "package/gutenprint/Config.in" + source "package/hans/Config.in" + source "package/haproxy/Config.in" + source "package/hiawatha/Config.in" + source "package/hostapd/Config.in" + source "package/hplip/Config.in" + source "package/htpdate/Config.in" + source "package/httping/Config.in" + source "package/i2pd/Config.in" + source "package/ibrdtn-tools/Config.in" + source "package/ibrdtnd/Config.in" + source "package/ifenslave/Config.in" + source "package/ifmetric/Config.in" + source "package/ifplugd/Config.in" + source "package/iftop/Config.in" + source "package/ifupdown/Config.in" + source "package/ifupdown-scripts/Config.in" + source "package/igd2-for-linux/Config.in" + source "package/igh-ethercat/Config.in" + source "package/igmpproxy/Config.in" + source "package/inadyn/Config.in" + source "package/iodine/Config.in" + source "package/ipcalc/Config.in" + source "package/iperf/Config.in" + source "package/iperf3/Config.in" + source "package/iproute2/Config.in" + source "package/ipset/Config.in" + source "package/iptables/Config.in" + source "package/iptraf-ng/Config.in" + source "package/iputils/Config.in" + source "package/irssi/Config.in" + source "package/iw/Config.in" + source "package/iwd/Config.in" + source "package/janus-gateway/Config.in" + source "package/keepalived/Config.in" + source "package/kismet/Config.in" + source "package/knock/Config.in" + source "package/leafnode2/Config.in" + source "package/lft/Config.in" + source "package/lftp/Config.in" + source "package/lighttpd/Config.in" + source "package/linknx/Config.in" + source "package/links/Config.in" + source "package/linphone/Config.in" + source "package/linux-zigbee/Config.in" + source "package/linuxptp/Config.in" + source "package/lldpd/Config.in" + source "package/lrzsz/Config.in" + source "package/lynx/Config.in" + source "package/macchanger/Config.in" + source "package/memcached/Config.in" + source "package/mii-diag/Config.in" + source "package/mini-snmpd/Config.in" + source "package/minidlna/Config.in" + source "package/minissdpd/Config.in" + source "package/mjpg-streamer/Config.in" + source "package/modem-manager/Config.in" + source "package/mongrel2/Config.in" + source "package/monkey/Config.in" + source "package/mosh/Config.in" + source "package/mosquitto/Config.in" + source "package/mrouted/Config.in" + source "package/mrp/Config.in" + source "package/mtr/Config.in" + source "package/nbd/Config.in" + source "package/ncftp/Config.in" + source "package/ndisc6/Config.in" + source "package/net-tools/Config.in" + source "package/netatalk/Config.in" + source "package/netcalc/Config.in" + source "package/netcat/Config.in" + source "package/netcat-openbsd/Config.in" + source "package/netplug/Config.in" + source "package/netsnmp/Config.in" + source "package/netstat-nat/Config.in" + source "package/network-manager/Config.in" + source "package/network-manager-openvpn/Config.in" + source "package/nfacct/Config.in" + source "package/nftables/Config.in" + source "package/nginx/Config.in" +if BR2_PACKAGE_NGINX +menu "External nginx modules" + source "package/nginx-dav-ext/Config.in" + source "package/nginx-modsecurity/Config.in" + source "package/nginx-naxsi/Config.in" + source "package/nginx-upload/Config.in" +endmenu +endif + source "package/ngircd/Config.in" + source "package/ngrep/Config.in" + source "package/nload/Config.in" + source "package/nmap/Config.in" + source "package/noip/Config.in" + source "package/ntp/Config.in" + source "package/nuttcp/Config.in" + source "package/odhcp6c/Config.in" + source "package/odhcploc/Config.in" + source "package/olsr/Config.in" + source "package/open-lldp/Config.in" + source "package/open-plc-utils/Config.in" + source "package/openntpd/Config.in" + source "package/openobex/Config.in" + source "package/openresolv/Config.in" + source "package/openssh/Config.in" + source "package/openswan/Config.in" + source "package/openvpn/Config.in" + source "package/p910nd/Config.in" + source "package/parprouted/Config.in" + source "package/phidgetwebservice/Config.in" + source "package/phytool/Config.in" + source "package/pimd/Config.in" + source "package/pixiewps/Config.in" + source "package/pound/Config.in" + source "package/pppd/Config.in" + source "package/pptp-linux/Config.in" + source "package/privoxy/Config.in" + source "package/proftpd/Config.in" + source "package/prosody/Config.in" + source "package/proxychains-ng/Config.in" + source "package/ptpd/Config.in" + source "package/ptpd2/Config.in" + source "package/pure-ftpd/Config.in" + source "package/putty/Config.in" + source "package/quagga/Config.in" + source "package/rabbitmq-server/Config.in" + source "package/radvd/Config.in" + source "package/reaver/Config.in" + source "package/redir/Config.in" + source "package/rp-pppoe/Config.in" + source "package/rpcbind/Config.in" + source "package/rsh-redone/Config.in" + source "package/rsync/Config.in" + source "package/rtorrent/Config.in" + source "package/rtptools/Config.in" + source "package/rygel/Config.in" + source "package/s6-dns/Config.in" + source "package/s6-networking/Config.in" + source "package/samba4/Config.in" + source "package/sconeserver/Config.in" + source "package/ser2net/Config.in" + source "package/shadowsocks-libev/Config.in" + source "package/shairport-sync/Config.in" + source "package/shellinabox/Config.in" + source "package/smcroute/Config.in" + source "package/sngrep/Config.in" + source "package/snmpclitools/Config.in" + source "package/snort/Config.in" + source "package/socat/Config.in" + source "package/socketcand/Config.in" + source "package/softether/Config.in" + source "package/spawn-fcgi/Config.in" + source "package/spice/Config.in" + source "package/spice-protocol/Config.in" + source "package/squid/Config.in" + source "package/ssdp-responder/Config.in" + source "package/sshguard/Config.in" + source "package/sshpass/Config.in" + source "package/sslh/Config.in" + source "package/strongswan/Config.in" + source "package/stunnel/Config.in" + source "package/suricata/Config.in" + source "package/tcpdump/Config.in" + source "package/tcping/Config.in" + source "package/tcpreplay/Config.in" + source "package/tftpd/Config.in" + source "package/thttpd/Config.in" + source "package/tinc/Config.in" + source "package/tinyproxy/Config.in" + source "package/tinyssh/Config.in" + source "package/tor/Config.in" + source "package/traceroute/Config.in" + source "package/transmission/Config.in" + source "package/tunctl/Config.in" + source "package/tvheadend/Config.in" + source "package/uacme/Config.in" + source "package/udpcast/Config.in" + source "package/uftp/Config.in" + source "package/uhttpd/Config.in" + source "package/ulogd/Config.in" + source "package/unbound/Config.in" + source "package/uredir/Config.in" + source "package/ushare/Config.in" + source "package/ussp-push/Config.in" + source "package/vde2/Config.in" + source "package/vdr/Config.in" + source "package/vdr-plugin-vnsiserver/Config.in" + source "package/vnstat/Config.in" + source "package/vpnc/Config.in" + source "package/vsftpd/Config.in" + source "package/vtun/Config.in" + source "package/wavemon/Config.in" + source "package/wget/Config.in" + source "package/whois/Config.in" + source "package/wireguard-linux-compat/Config.in" + source "package/wireguard-tools/Config.in" + source "package/wireless-regdb/Config.in" + source "package/wireless_tools/Config.in" + source "package/wireshark/Config.in" + source "package/wpa_supplicant/Config.in" + source "package/wpan-tools/Config.in" + source "package/xinetd/Config.in" + source "package/xl2tp/Config.in" + source "package/xtables-addons/Config.in" + source "package/znc/Config.in" + +endmenu + +menu "Package managers" +comment "-------------------------------------------------------" +comment "Please note: " +comment "- Buildroot does *not* generate binary packages, " +comment "- Buildroot does *not* install any package database. " +comment "* " +comment "It is up to you to provide those by yourself if you " +comment "want to use any of those package managers. " +comment "* " +comment "See the manual: " +comment "http://buildroot.org/manual.html#faq-no-binary-packages" +comment "-------------------------------------------------------" + source "package/opkg/Config.in" + source "package/rpm/Config.in" +endmenu + +menu "Real-Time" + source "package/rtai/Config.in" + source "package/xenomai/Config.in" +endmenu + +menu "Security" + source "package/apparmor/Config.in" + source "package/checkpolicy/Config.in" + source "package/ima-evm-utils/Config.in" + source "package/optee-benchmark/Config.in" + source "package/optee-client/Config.in" + source "package/optee-examples/Config.in" + source "package/optee-test/Config.in" + source "package/paxtest/Config.in" + source "package/policycoreutils/Config.in" + source "package/refpolicy/Config.in" + source "package/restorecond/Config.in" + source "package/selinux-python/Config.in" + source "package/semodule-utils/Config.in" + source "package/setools/Config.in" + source "package/urandom-scripts/Config.in" +endmenu + +menu "Shell and utilities" +comment "Shells" + source "package/bash/Config.in" + source "package/dash/Config.in" + source "package/mksh/Config.in" + source "package/zsh/Config.in" +comment "Utilities" + source "package/at/Config.in" + source "package/bash-completion/Config.in" + source "package/ccrypt/Config.in" + source "package/crudini/Config.in" + source "package/dialog/Config.in" + source "package/dtach/Config.in" + source "package/easy-rsa/Config.in" + source "package/file/Config.in" + source "package/gnupg/Config.in" + source "package/gnupg2/Config.in" + source "package/inotify-tools/Config.in" + source "package/lockfile-progs/Config.in" + source "package/logrotate/Config.in" + source "package/logsurfer/Config.in" + source "package/neofetch/Config.in" + source "package/pdmenu/Config.in" + source "package/pinentry/Config.in" + source "package/qprint/Config.in" + source "package/ranger/Config.in" + source "package/rtty/Config.in" + source "package/screen/Config.in" + source "package/screenfetch/Config.in" + source "package/sudo/Config.in" + source "package/terminology/Config.in" + source "package/time/Config.in" + source "package/tini/Config.in" + source "package/tmux/Config.in" + source "package/ttyd/Config.in" + source "package/which/Config.in" + source "package/xmlstarlet/Config.in" + source "package/xxhash/Config.in" + source "package/ytree/Config.in" +endmenu + +menu "System tools" + source "package/acl/Config.in" + source "package/android-tools/Config.in" + source "package/atop/Config.in" + source "package/attr/Config.in" + source "package/audit/Config.in" + source "package/balena-engine/Config.in" + source "package/bubblewrap/Config.in" + source "package/cgroupfs-mount/Config.in" + source "package/circus/Config.in" + source "package/coreutils/Config.in" + source "package/cpuload/Config.in" + source "package/daemon/Config.in" + source "package/dc3dd/Config.in" + source "package/dcron/Config.in" + source "package/ddrescue/Config.in" + source "package/debianutils/Config.in" + source "package/docker-cli/Config.in" + source "package/docker-compose/Config.in" + source "package/docker-containerd/Config.in" + source "package/docker-engine/Config.in" + source "package/docker-proxy/Config.in" + source "package/earlyoom/Config.in" + source "package/efibootmgr/Config.in" + source "package/efivar/Config.in" + source "package/emlog/Config.in" + source "package/ftop/Config.in" + source "package/getent/Config.in" + source "package/gkrellm/Config.in" + source "package/htop/Config.in" + source "package/ibm-sw-tpm2/Config.in" + source "package/initscripts/Config.in" + source "package/iotop/Config.in" + source "package/iprutils/Config.in" + source "package/irqbalance/Config.in" + source "package/jailhouse/Config.in" + source "package/keyutils/Config.in" + source "package/kmod/Config.in" + source "package/kvmtool/Config.in" + source "package/libostree/Config.in" + source "package/lxc/Config.in" + source "package/makedumpfile/Config.in" + source "package/mender/Config.in" + source "package/mender-grubenv/Config.in" + source "package/mfoc/Config.in" + source "package/monit/Config.in" + source "package/multipath-tools/Config.in" + source "package/ncdu/Config.in" + source "package/netifrc/Config.in" + source "package/numactl/Config.in" + source "package/nut/Config.in" + source "package/openrc/Config.in" + source "package/openvmtools/Config.in" + source "package/pamtester/Config.in" + source "package/polkit/Config.in" + source "package/powerpc-utils/Config.in" + source "package/procps-ng/Config.in" + source "package/procrank_linux/Config.in" + source "package/psmisc/Config.in" + source "package/pwgen/Config.in" + source "package/quota/Config.in" + source "package/quotatool/Config.in" + source "package/rauc/Config.in" + source "package/rsyslog/Config.in" + source "package/runc/Config.in" + source "package/s390-tools/Config.in" + source "package/s6/Config.in" + source "package/s6-linux-init/Config.in" + source "package/s6-linux-utils/Config.in" + source "package/s6-portable-utils/Config.in" + source "package/s6-rc/Config.in" + source "package/scrub/Config.in" + source "package/scrypt/Config.in" + source "package/sdbusplus/Config.in" + source "package/smack/Config.in" + source "package/start-stop-daemon/Config.in" + source "package/supervisor/Config.in" + source "package/swupdate/Config.in" + source "package/sysklogd/Config.in" + source "package/syslog-ng/Config.in" + source "package/systemd/Config.in" + source "package/systemd-bootchart/Config.in" + source "package/sysvinit/Config.in" + source "package/tar/Config.in" + source "package/thermald/Config.in" + source "package/tpm-tools/Config.in" + source "package/tpm2-abrmd/Config.in" + source "package/tpm2-tools/Config.in" + source "package/tpm2-totp/Config.in" + source "package/unscd/Config.in" + source "package/util-linux/Config.in" + source "package/watchdog/Config.in" + source "package/xdg-dbus-proxy/Config.in" + source "package/xen/Config.in" + source "package/xvisor/Config.in" +endmenu + +menu "Text editors and viewers" + source "package/ed/Config.in" + source "package/joe/Config.in" + source "package/less/Config.in" + source "package/mc/Config.in" + source "package/mg/Config.in" + source "package/most/Config.in" + source "package/nano/Config.in" + source "package/uemacs/Config.in" + source "package/vim/Config.in" +endmenu + +menu "Loongson board software" + source "package/boot_run/Config.in" + source "package/driver_testcase/Config.in" + source "package/git_info_lsgd/Config.in" + source "package/mdio/Config.in" + source "package/qtperf/Config.in" + source "package/qt_movie/Config.in" + source "package/qt_music_player/Config.in" + source "package/lvgl_kit/Config.in" + source "package/ls_default_eth_config/Config.in" + source "package/fastboot_busybox/Config.in" + source "package/ls-modload/Config.in" + source "package/ls-usb-mount/Config.in" + source "package/qt_use_tslib/Config.in" + source "package/libgo_la/Config.in" + source "package/autoreboot/Config.in" + source "package/ls2_sys_config_tool/Config.in" + source "package/ls3_system_tool/Config.in" + source "package/loongson_resize/Config.in" + source "package/loongson_kernel/Config.in" + source "package/loongson_build_essential/Config.in" +endmenu + +endmenu diff --git a/package/Config.in.host b/package/Config.in.host new file mode 100644 index 00000000..ba6a68c7 --- /dev/null +++ b/package/Config.in.host @@ -0,0 +1,95 @@ +menu "Host utilities" + + source "package/abootimg/Config.in.host" + source "package/aespipe/Config.in.host" + source "package/android-tools/Config.in.host" + source "package/asn1c/Config.in.host" + source "package/babeltrace2/Config.in.host" + source "package/btrfs-progs/Config.in.host" + source "package/cbootimage/Config.in.host" + source "package/checkpolicy/Config.in.host" + source "package/checksec/Config.in.host" + source "package/cmake/Config.in.host" + source "package/cramfs/Config.in.host" + source "package/cryptsetup/Config.in.host" + source "package/dbus-python/Config.in.host" + source "package/dfu-util/Config.in.host" + source "package/dos2unix/Config.in.host" + source "package/dosfstools/Config.in.host" + source "package/doxygen/Config.in.host" + source "package/dtc/Config.in.host" + source "package/e2fsprogs/Config.in.host" + source "package/e2tools/Config.in.host" + source "package/environment-setup/Config.in.host" + source "package/erofs-utils/Config.in.host" + source "package/eudev/Config.in.host" + source "package/exfatprogs/Config.in.host" + source "package/f2fs-tools/Config.in.host" + source "package/faketime/Config.in.host" + source "package/fatcat/Config.in.host" + source "package/fwup/Config.in.host" + source "package/genext2fs/Config.in.host" + source "package/genimage/Config.in.host" + source "package/genpart/Config.in.host" + source "package/gnupg/Config.in.host" + source "package/go/Config.in.host" + source "package/go-bootstrap/Config.in.host" + source "package/google-breakpad/Config.in.host" + source "package/gptfdisk/Config.in.host" + source "package/imagemagick/Config.in.host" + source "package/imx-mkimage/Config.in.host" + source "package/imx-usb-loader/Config.in.host" + source "package/jq/Config.in.host" + source "package/jsmin/Config.in.host" + source "package/kmod/Config.in.host" + source "package/libp11/Config.in.host" + source "package/lld/Config.in.host" + source "package/lpc3250loader/Config.in.host" + source "package/lttng-babeltrace/Config.in.host" + source "package/mender-artifact/Config.in.host" + source "package/meson-tools/Config.in.host" + source "package/mfgtools/Config.in.host" + source "package/mkpasswd/Config.in.host" + source "package/mtd/Config.in.host" + source "package/mtools/Config.in.host" + source "package/mxsldr/Config.in.host" + source "package/odb/Config.in.host" + source "package/omap-u-boot-utils/Config.in.host" + source "package/openocd/Config.in.host" + source "package/opkg-utils/Config.in.host" + source "package/parted/Config.in.host" + source "package/patchelf/Config.in.host" + source "package/pigz/Config.in.host" + source "package/pkgconf/Config.in.host" + source "package/pru-software-support/Config.in.host" + source "package/pwgen/Config.in.host" + source "package/python/Config.in.host" + source "package/python-cython/Config.in.host" + source "package/python-lxml/Config.in.host" + source "package/python-six/Config.in.host" + source "package/python-xlrd/Config.in.host" + source "package/python3/Config.in.host" + source "package/qemu/Config.in.host" + source "package/qoriq-rcw/Config.in.host" + source "package/raspberrypi-usbboot/Config.in.host" + source "package/rauc/Config.in.host" + source "package/rustc/Config.in.host" + source "package/s6-rc/Config.in.host" + source "package/sam-ba/Config.in.host" + source "package/sdbusplus/Config.in.host" + source "package/sentry-cli/Config.in.host" + source "package/squashfs/Config.in.host" + source "package/sunxi-tools/Config.in.host" + source "package/swig/Config.in.host" + source "package/systemd/Config.in.host" + source "package/tegrarcm/Config.in.host" + source "package/ti-cgt-pru/Config.in.host" + source "package/uboot-tools/Config.in.host" + source "package/util-linux/Config.in.host" + source "package/utp_com/Config.in.host" + source "package/vboot-utils/Config.in.host" + source "package/xorriso/Config.in.host" + source "package/zip/Config.in.host" + source "package/zstd/Config.in.host" + +endmenu diff --git a/package/Makefile.in b/package/Makefile.in new file mode 100644 index 00000000..f4028bc6 --- /dev/null +++ b/package/Makefile.in @@ -0,0 +1,430 @@ +ifndef MAKE +MAKE := make +endif +ifndef HOSTMAKE +HOSTMAKE = $(MAKE) +endif +HOSTMAKE := $(shell which $(HOSTMAKE) || type -p $(HOSTMAKE) || echo make) + +# If BR2_JLEVEL is 0, scale the maximum concurrency with the number of +# CPUs. An additional job is used in order to keep processors busy +# while waiting on I/O. +# If the number of processors is not available, assume one. +ifeq ($(BR2_JLEVEL),0) +PARALLEL_JOBS := $(shell echo \ + $$((1 + `getconf _NPROCESSORS_ONLN 2>/dev/null || echo 1`))) +else +PARALLEL_JOBS := $(BR2_JLEVEL) +endif + +MAKE1 := $(HOSTMAKE) -j1 +override MAKE = $(HOSTMAKE) \ + $(if $(findstring j,$(filter-out --%,$(MAKEFLAGS))),,-j$(PARALLEL_JOBS)) + +ifeq ($(BR2_TOOLCHAIN_BUILDROOT),y) +TARGET_VENDOR = $(call qstrip,$(BR2_TOOLCHAIN_BUILDROOT_VENDOR)) +else +TARGET_VENDOR = buildroot +endif + +# Sanity checks +ifeq ($(TARGET_VENDOR),) +$(error BR2_TOOLCHAIN_BUILDROOT_VENDOR is not allowed to be empty) +endif +ifeq ($(TARGET_VENDOR),unknown) +$(error BR2_TOOLCHAIN_BUILDROOT_VENDOR cannot be 'unknown'. \ + It might be confused with the native toolchain) +endif + +# Compute GNU_TARGET_NAME +GNU_TARGET_NAME = $(ARCH)-$(TARGET_VENDOR)-$(TARGET_OS)-$(LIBC)$(ABI) + +# FLAT binary format needs uclinux +ifeq ($(BR2_BINFMT_FLAT),y) +TARGET_OS = uclinux +else +TARGET_OS = linux +endif + +ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y) +LIBC = uclibc +else ifeq ($(BR2_TOOLCHAIN_USES_MUSL),y) +LIBC = musl +else +LIBC = gnu +endif + +# The ABI suffix is a bit special on ARM, as it needs to be +# -uclibcgnueabi for uClibc EABI, and -gnueabi for glibc EABI. +# This means that the LIBC and ABI aren't strictly orthogonal, +# which explains why we need the test on LIBC below. +ifeq ($(BR2_arm)$(BR2_armeb),y) +ifeq ($(LIBC),uclibc) +ABI = gnueabi +else +ABI = eabi +endif + +ifeq ($(BR2_ARM_EABIHF),y) +ABI := $(ABI)hf +endif +endif + +# For C-SKY abiv1 & abiv2 +ifeq ($(BR2_csky),y) +ifeq ($(BR2_ck610),y) +ABI = abiv1 +else +ABI = abiv2 +endif +endif + +# For FSL PowerPC there's SPE +ifeq ($(BR2_powerpc_SPE),y) +ABI = spe +# MPC8540s are e500v1 with single precision FP +ifeq ($(BR2_powerpc_8540),y) +TARGET_ABI += -mabi=spe -mfloat-gprs=single -Wa,-me500 +endif +ifeq ($(BR2_powerpc_8548),y) +TARGET_ABI += -mabi=spe -mfloat-gprs=double -Wa,-me500x2 +endif +ifeq ($(BR2_powerpc_e500mc),y) +TARGET_ABI += -mabi=spe -mfloat-gprs=double -Wa,-me500mc +endif +endif + +# Use longcalls option for Xtensa globally. +# The 'longcalls' option allows calls across a greater range of addresses, +# and is required for some packages. While this option can degrade both +# code size and performance, the linker can usually optimize away the +# overhead when a call ends up within a certain range. +# +# Use auto-litpools for Xtensa globally. +# Collecting literals into separate section can be advantageous if that +# section is placed into DTCM at link time. This is applicable for code +# running on bare metal, but makes no sense under linux, where userspace +# is isolated from the physical memory details. OTOH placing literals into +# separate section breaks build of huge source files, because l32r +# instruction can only access literals in 256 KBytes range. +# +ifeq ($(BR2_xtensa),y) +TARGET_ABI += -mlongcalls -mauto-litpools +endif + +STAGING_SUBDIR = $(GNU_TARGET_NAME)/sysroot +STAGING_DIR = $(HOST_DIR)/$(STAGING_SUBDIR) + +ifeq ($(BR2_OPTIMIZE_0),y) +TARGET_OPTIMIZATION = -O0 +endif +ifeq ($(BR2_OPTIMIZE_1),y) +TARGET_OPTIMIZATION = -O1 +endif +ifeq ($(BR2_OPTIMIZE_2),y) +TARGET_OPTIMIZATION = -O2 +endif +ifeq ($(BR2_OPTIMIZE_3),y) +TARGET_OPTIMIZATION = -O3 +endif +ifeq ($(BR2_OPTIMIZE_G),y) +TARGET_OPTIMIZATION = -Og +endif +ifeq ($(BR2_OPTIMIZE_S),y) +TARGET_OPTIMIZATION = -Os +endif +ifeq ($(BR2_OPTIMIZE_FAST),y) +TARGET_OPTIMIZATION = -Ofast +endif +ifeq ($(BR2_DEBUG_1),y) +TARGET_DEBUGGING = -g1 +endif +ifeq ($(BR2_DEBUG_2),y) +TARGET_DEBUGGING = -g2 +endif +ifeq ($(BR2_DEBUG_3),y) +TARGET_DEBUGGING = -g3 +endif + +TARGET_LDFLAGS = $(call qstrip,$(BR2_TARGET_LDFLAGS)) + +# By design, _FORTIFY_SOURCE requires gcc optimization to be enabled. +# Therefore, we need to pass _FORTIFY_SOURCE and the optimization level +# through the same mechanism, i.e currently through CFLAGS. Passing +# _FORTIFY_SOURCE through the wrapper and the optimization level +# through CFLAGS would not work, because CFLAGS are sometimes +# ignored/overridden by packages, but the flags passed by the wrapper +# are enforced: this would cause _FORTIFY_SOURCE to be used without any +# optimization level, leading to a build / configure failure. So we keep +# passing _FORTIFY_SOURCE and the optimization level both through CFLAGS. +ifeq ($(BR2_FORTIFY_SOURCE_1),y) +TARGET_HARDENED += -D_FORTIFY_SOURCE=1 +else ifeq ($(BR2_FORTIFY_SOURCE_2),y) +TARGET_HARDENED += -D_FORTIFY_SOURCE=2 +endif + +TARGET_CPPFLAGS += -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 +TARGET_CFLAGS = $(TARGET_CPPFLAGS) $(TARGET_ABI) $(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING) $(TARGET_HARDENED) +TARGET_CXXFLAGS = $(TARGET_CFLAGS) +TARGET_FCFLAGS = $(TARGET_ABI) $(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING) + +# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79509 +ifeq ($(BR2_m68k_cf),y) +TARGET_CFLAGS += -fno-dwarf2-cfi-asm +TARGET_CXXFLAGS += -fno-dwarf2-cfi-asm +endif + +ifeq ($(BR2_BINFMT_FLAT),y) +TARGET_CFLAGS += $(if $($(PKG)_FLAT_STACKSIZE),-Wl$(comma)-elf2flt=-s$($(PKG)_FLAT_STACKSIZE),\ + -Wl$(comma)-elf2flt) +TARGET_CXXFLAGS += $(if $($(PKG)_FLAT_STACKSIZE),-Wl$(comma)-elf2flt=-s$($(PKG)_FLAT_STACKSIZE),\ + -Wl$(comma)-elf2flt) +TARGET_FCFLAGS += $(if $($(PKG)_FLAT_STACKSIZE),-Wl$(comma)-elf2flt=-s$($(PKG)_FLAT_STACKSIZE),\ + -Wl$(comma)-elf2flt) +TARGET_LDFLAGS += $(if $($(PKG)_FLAT_STACKSIZE),-Wl$(comma)-elf2flt=-s$($(PKG)_FLAT_STACKSIZE),-Wl$(comma)-elf2flt) +endif + +ifeq ($(BR2_BINFMT_FLAT_SHARED),y) +TARGET_LDFLAGS += -mid-shared-library -mshared-library-id=0 +TARGET_CFLAGS += -mid-shared-library -mshared-library-id=0 +TARGET_FCFLAGS += -mid-shared-library -mshared-library-id=0 +TARGET_CXXFLAGS += -mid-shared-library -mshared-library-id=0 +endif + +ifeq ($(BR2_TOOLCHAIN_BUILDROOT),y) +TARGET_CROSS = $(HOST_DIR)/bin/$(GNU_TARGET_NAME)- +else +TARGET_CROSS = $(HOST_DIR)/bin/$(TOOLCHAIN_EXTERNAL_PREFIX)- +endif + +# Define TARGET_xx variables for all common binutils/gcc +TARGET_AR = $(TARGET_CROSS)ar +TARGET_AS = $(TARGET_CROSS)as +TARGET_CC = $(TARGET_CROSS)gcc +TARGET_CPP = $(TARGET_CROSS)cpp +TARGET_CXX = $(TARGET_CROSS)g++ +TARGET_FC = $(TARGET_CROSS)gfortran +TARGET_LD = $(TARGET_CROSS)ld +TARGET_NM = $(TARGET_CROSS)nm +TARGET_RANLIB = $(TARGET_CROSS)ranlib +TARGET_READELF = $(TARGET_CROSS)readelf +TARGET_OBJCOPY = $(TARGET_CROSS)objcopy +TARGET_OBJDUMP = $(TARGET_CROSS)objdump + +ifeq ($(BR2_STRIP_strip),y) +STRIP_STRIP_DEBUG := --strip-debug +TARGET_STRIP = $(TARGET_CROSS)strip +STRIPCMD = $(TARGET_CROSS)strip --remove-section=.comment --remove-section=.note +else +TARGET_STRIP = /bin/true +STRIPCMD = $(TARGET_STRIP) +endif +INSTALL := $(shell which install || type -p install) +UNZIP := $(shell which unzip || type -p unzip) -q + +APPLY_PATCHES = PATH=$(HOST_DIR)/bin:$$PATH support/scripts/apply-patches.sh $(if $(QUIET),-s) + +HOST_CPPFLAGS = -I$(HOST_DIR)/include +HOST_CFLAGS ?= -O2 +HOST_CFLAGS += $(HOST_CPPFLAGS) +HOST_CXXFLAGS += $(HOST_CFLAGS) +HOST_LDFLAGS += -L$(HOST_DIR)/lib -Wl,-rpath,$(HOST_DIR)/lib + +# host-intltool should be executed with the system perl, so we save +# the path to the system perl, before a host-perl built by Buildroot +# might get installed into $(HOST_DIR)/bin and therefore appears +# in our PATH. This system perl will be used as INTLTOOL_PERL. +export PERL=$(shell which perl) + +# host-intltool needs libxml-parser-perl, which Buildroot installs in +# $(HOST_DIR)/lib/perl, so we must make sure that the system perl +# finds this perl module by exporting the proper value for PERL5LIB. +export PERL5LIB=$(HOST_DIR)/lib/perl + +TARGET_MAKE_ENV = PATH=$(BR_PATH) + +TARGET_CONFIGURE_OPTS = \ + $(TARGET_MAKE_ENV) \ + AR="$(TARGET_AR)" \ + AS="$(TARGET_AS)" \ + LD="$(TARGET_LD)" \ + NM="$(TARGET_NM)" \ + CC="$(TARGET_CC)" \ + GCC="$(TARGET_CC)" \ + CPP="$(TARGET_CPP)" \ + CXX="$(TARGET_CXX)" \ + FC="$(TARGET_FC)" \ + F77="$(TARGET_FC)" \ + RANLIB="$(TARGET_RANLIB)" \ + READELF="$(TARGET_READELF)" \ + STRIP="$(TARGET_STRIP)" \ + OBJCOPY="$(TARGET_OBJCOPY)" \ + OBJDUMP="$(TARGET_OBJDUMP)" \ + AR_FOR_BUILD="$(HOSTAR)" \ + AS_FOR_BUILD="$(HOSTAS)" \ + CC_FOR_BUILD="$(HOSTCC)" \ + GCC_FOR_BUILD="$(HOSTCC)" \ + CXX_FOR_BUILD="$(HOSTCXX)" \ + LD_FOR_BUILD="$(HOSTLD)" \ + CPPFLAGS_FOR_BUILD="$(HOST_CPPFLAGS)" \ + CFLAGS_FOR_BUILD="$(HOST_CFLAGS)" \ + CXXFLAGS_FOR_BUILD="$(HOST_CXXFLAGS)" \ + LDFLAGS_FOR_BUILD="$(HOST_LDFLAGS)" \ + FCFLAGS_FOR_BUILD="$(HOST_FCFLAGS)" \ + DEFAULT_ASSEMBLER="$(TARGET_AS)" \ + DEFAULT_LINKER="$(TARGET_LD)" \ + CPPFLAGS="$(TARGET_CPPFLAGS)" \ + CFLAGS="$(TARGET_CFLAGS)" \ + CXXFLAGS="$(TARGET_CXXFLAGS)" \ + LDFLAGS="$(TARGET_LDFLAGS)" \ + FCFLAGS="$(TARGET_FCFLAGS)" \ + FFLAGS="$(TARGET_FCFLAGS)" \ + PKG_CONFIG="$(PKG_CONFIG_HOST_BINARY)" \ + STAGING_DIR="$(STAGING_DIR)" \ + INTLTOOL_PERL=$(PERL) + + +HOST_MAKE_ENV = \ + PATH=$(BR_PATH) \ + PKG_CONFIG="$(PKG_CONFIG_HOST_BINARY)" \ + PKG_CONFIG_SYSROOT_DIR="/" \ + PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 \ + PKG_CONFIG_ALLOW_SYSTEM_LIBS=1 \ + PKG_CONFIG_LIBDIR="$(HOST_DIR)/lib/pkgconfig:$(HOST_DIR)/share/pkgconfig" + +HOST_CONFIGURE_OPTS = \ + $(HOST_MAKE_ENV) \ + AR="$(HOSTAR)" \ + AS="$(HOSTAS)" \ + LD="$(HOSTLD)" \ + NM="$(HOSTNM)" \ + CC="$(HOSTCC)" \ + GCC="$(HOSTCC)" \ + CXX="$(HOSTCXX)" \ + CPP="$(HOSTCPP)" \ + OBJCOPY="$(HOSTOBJCOPY)" \ + RANLIB="$(HOSTRANLIB)" \ + CPPFLAGS="$(HOST_CPPFLAGS)" \ + CFLAGS="$(HOST_CFLAGS)" \ + CXXFLAGS="$(HOST_CXXFLAGS)" \ + LDFLAGS="$(HOST_LDFLAGS)" \ + INTLTOOL_PERL=$(PERL) + +# This is extra environment we can not export ourselves (eg. because some +# packages use that variable internally, eg. uboot), so we have to +# explicitly pass it to user-supplied external hooks (eg. post-build, +# post-images) +EXTRA_ENV = \ + PATH=$(BR_PATH) \ + BR2_DL_DIR=$(BR2_DL_DIR) \ + BUILD_DIR=$(BUILD_DIR) \ + CONFIG_DIR=$(CONFIG_DIR) \ + O=$(CANONICAL_O) + +################################################################################ +# settings we need to pass to configure + +# does unaligned access trap? +BR2_AC_CV_TRAP_CHECK = ac_cv_lbl_unaligned_fail=yes +ifeq ($(BR2_i386),y) +BR2_AC_CV_TRAP_CHECK = ac_cv_lbl_unaligned_fail=no +endif +ifeq ($(BR2_x86_64),y) +BR2_AC_CV_TRAP_CHECK = ac_cv_lbl_unaligned_fail=no +endif +ifeq ($(BR2_m68k),y) +BR2_AC_CV_TRAP_CHECK = ac_cv_lbl_unaligned_fail=no +endif +ifeq ($(BR2_powerpc)$(BR2_powerpc64)$(BR2_powerpc64le),y) +BR2_AC_CV_TRAP_CHECK = ac_cv_lbl_unaligned_fail=no +endif + +ifeq ($(BR2_ENDIAN),"BIG") +BR2_AC_CV_C_BIGENDIAN = ac_cv_c_bigendian=yes +else +BR2_AC_CV_C_BIGENDIAN = ac_cv_c_bigendian=no +endif + +# AM_GNU_GETTEXT misdetects musl gettext support. +# musl currently implements api level 1 and 2 (basic + ngettext) +# http://www.openwall.com/lists/musl/2015/04/16/3 +# +# These autoconf variables should only be pre-seeded when the minimal +# gettext implementation of musl is used. When the full blown +# implementation provided by gettext libintl is used, auto-detection +# works fine, and pre-seeding those values is actually wrong. +ifeq ($(BR2_TOOLCHAIN_USES_MUSL):$(BR2_PACKAGE_GETTEXT_PROVIDES_LIBINTL),y:) +BR2_GT_CV_FUNC_GNUGETTEXT_LIBC = \ + gt_cv_func_gnugettext1_libc=yes \ + gt_cv_func_gnugettext2_libc=yes +endif + +TARGET_CONFIGURE_ARGS = \ + $(BR2_AC_CV_TRAP_CHECK) \ + ac_cv_func_mmap_fixed_mapped=yes \ + ac_cv_func_memcmp_working=yes \ + ac_cv_have_decl_malloc=yes \ + gl_cv_func_malloc_0_nonnull=yes \ + ac_cv_func_malloc_0_nonnull=yes \ + ac_cv_func_calloc_0_nonnull=yes \ + ac_cv_func_realloc_0_nonnull=yes \ + lt_cv_sys_lib_search_path_spec="" \ + $(BR2_AC_CV_C_BIGENDIAN) \ + $(BR2_GT_CV_FUNC_GNUGETTEXT_LIBC) + +################################################################################ + +ifeq ($(BR2_SYSTEM_ENABLE_NLS),y) +NLS_OPTS = --enable-nls +TARGET_NLS_DEPENDENCIES = host-gettext +ifeq ($(BR2_PACKAGE_GETTEXT_PROVIDES_LIBINTL),y) +TARGET_NLS_DEPENDENCIES += gettext +TARGET_NLS_LIBS += -lintl +endif +else +NLS_OPTS = --disable-nls +endif + +# We need anything that is invalid. Traditionally, we'd have used 'false' (and +# we did so in the past). However, that breaks libtool for packages that have +# optional C++ support (e.g. gnutls), because libtool will *require* a *valid* +# C++ preprocessor as long as CXX is not 'no'. +# Now, whether we use 'no' or 'false' for CXX as the same side effect: it is an +# invalid C++ compiler, and thus will cause detection of C++ to fail (which is +# expected and what we want), while at the same time taming libtool into +# silence. +ifneq ($(BR2_INSTALL_LIBSTDCPP),y) +TARGET_CONFIGURE_OPTS += CXX=no +endif + +ifeq ($(BR2_STATIC_LIBS),y) +SHARED_STATIC_LIBS_OPTS = --enable-static --disable-shared +TARGET_CFLAGS += -static +TARGET_CXXFLAGS += -static +TARGET_FCFLAGS += -static +TARGET_LDFLAGS += -static +else ifeq ($(BR2_SHARED_LIBS),y) +SHARED_STATIC_LIBS_OPTS = --disable-static --enable-shared +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +SHARED_STATIC_LIBS_OPTS = --enable-static --enable-shared +endif + +ifeq ($(BR2_COMPILER_PARANOID_UNSAFE_PATH),y) +export BR_COMPILER_PARANOID_UNSAFE_PATH=enabled +endif + +include package/pkg-download.mk +include package/pkg-autotools.mk +include package/pkg-cmake.mk +include package/pkg-luarocks.mk +include package/pkg-perl.mk +include package/pkg-python.mk +include package/pkg-virtual.mk +include package/pkg-generic.mk +include package/pkg-kconfig.mk +include package/pkg-rebar.mk +include package/pkg-kernel-module.mk +include package/pkg-waf.mk +include package/pkg-golang.mk +include package/pkg-meson.mk +include package/pkg-qmake.mk diff --git a/package/a10disp/Config.in b/package/a10disp/Config.in new file mode 100644 index 00000000..99ae0aad --- /dev/null +++ b/package/a10disp/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_A10DISP + bool "a10disp" + depends on BR2_arm + depends on BR2_LINUX_KERNEL + help + Program to change the display mode of Allwinner ARM SOCs + running the linux-sunxi kernel (and not the mainline kernel.) + + http://github.com/hglm/a10disp + +comment "a10disp needs a Linux kernel to be built" + depends on BR2_arm + depends on !BR2_LINUX_KERNEL diff --git a/package/a10disp/a10disp.hash b/package/a10disp/a10disp.hash new file mode 100644 index 00000000..acaafc35 --- /dev/null +++ b/package/a10disp/a10disp.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 5077405030e8f97a1edd4b86d469466abbc4d32b4a4609e58459347fcd1ba35b a10disp-0.6.1.tar.gz +sha256 ddf849966f57fee8f9675f5a3c7791353d1cba71695cd58016212fc236bbdbee a10disp.c diff --git a/package/a10disp/a10disp.mk b/package/a10disp/a10disp.mk new file mode 100644 index 00000000..c9192023 --- /dev/null +++ b/package/a10disp/a10disp.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# a10disp +# +################################################################################ + +A10DISP_VERSION = 0.6.1 +A10DISP_SITE = $(call github,hglm,a10disp,v$(A10DISP_VERSION)) +A10DISP_LICENSE = MIT +A10DISP_LICENSE_FILES = a10disp.c + +A10DISP_DEPENDENCIES = linux + +define A10DISP_BUILD_CMDS + cp -f $(LINUX_DIR)/include/video/sunxi_disp_ioctl.h $(@D)/ + $(TARGET_CC) $(TARGET_CFLAGS) $(@D)/a10disp.c -o $(@D)/a10disp +endef + +define A10DISP_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/a10disp $(TARGET_DIR)/usr/bin/a10disp +endef + +$(eval $(generic-package)) diff --git a/package/abootimg/Config.in b/package/abootimg/Config.in new file mode 100644 index 00000000..30e5bd1f --- /dev/null +++ b/package/abootimg/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_ABOOTIMG + bool "abootimg" + depends on BR2_USE_MMU # libblkid + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBBLKID + help + Tool to manipulate Android Boot Images, either on files + or directly on /dev block devices. + + https://github.com/ggrandou/abootimg diff --git a/package/abootimg/Config.in.host b/package/abootimg/Config.in.host new file mode 100644 index 00000000..65dc4798 --- /dev/null +++ b/package/abootimg/Config.in.host @@ -0,0 +1,8 @@ +config BR2_PACKAGE_HOST_ABOOTIMG + bool "host abootimg" + select BR2_PACKAGE_HOST_UTIL_LINUX + help + Tool to manipulate Android Boot Images, either on files + or directly on /dev block devices. + + https://github.com/ggrandou/abootimg diff --git a/package/abootimg/abootimg.hash b/package/abootimg/abootimg.hash new file mode 100644 index 00000000..fa5282c6 --- /dev/null +++ b/package/abootimg/abootimg.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 eb8d912bc7b5454c2afd3385fd86f4917d3587c48a6f5ae45df7856d88502cab abootimg-7e127fee6a3981f6b0a50ce9910267cd501e09d4.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE diff --git a/package/abootimg/abootimg.mk b/package/abootimg/abootimg.mk new file mode 100644 index 00000000..ab6c7093 --- /dev/null +++ b/package/abootimg/abootimg.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# abootimg +# +################################################################################ + +ABOOTIMG_VERSION = 7e127fee6a3981f6b0a50ce9910267cd501e09d4 +ABOOTIMG_SITE = $(call github,ggrandou,abootimg,$(ABOOTIMG_VERSION)) +ABOOTIMG_LICENSE = GPL-2.0+ +ABOOTIMG_LICENSE_FILES = LICENSE + +# depends on libblkid from util-linux +ABOOTIMG_DEPENDENCIES = util-linux +HOST_ABOOTIMG_DEPENDENCIES = host-util-linux + +define ABOOTIMG_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) +endef + +define ABOOTIMG_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 $(@D)/abootimg $(TARGET_DIR)/usr/bin/abootimg +endef + +define HOST_ABOOTIMG_BUILD_CMDS + $(MAKE) $(HOST_CONFIGURE_OPTS) -C $(@D) +endef + +define HOST_ABOOTIMG_INSTALL_CMDS + $(INSTALL) -m 0755 $(@D)/abootimg $(HOST_DIR)/usr/bin/abootimg +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/acl/0001-Build-with-old-GCC-versions.patch b/package/acl/0001-Build-with-old-GCC-versions.patch new file mode 100644 index 00000000..a05ff5d9 --- /dev/null +++ b/package/acl/0001-Build-with-old-GCC-versions.patch @@ -0,0 +1,32 @@ +From a42519dceef0493ece45538375ae1791313f16d3 Mon Sep 17 00:00:00 2001 +From: Hollis Blanchard +Date: Mon, 30 Jul 2018 14:29:46 -0700 +Subject: [PATCH] Remove pragmas inside functions + +GCC 4.4.7, as found in RHEL6, reports: + libacl/acl_from_text.c:307: error: #pragma GCC diagnostic not allowed inside functions + +Signed-off-by: Hollis Blanchard +--- + libacl/acl_from_text.c | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/libacl/acl_from_text.c b/libacl/acl_from_text.c +index 09790c9..fb6bc07 100644 +--- a/libacl/acl_from_text.c ++++ b/libacl/acl_from_text.c +@@ -304,11 +304,8 @@ parse_acl_entry(const char **text_p, acl_t *acl_p) + create_entry: + if (acl_create_entry(acl_p, &entry_d) != 0) + return -1; +-#pragma GCC diagnostic push +-#pragma GCC diagnostic ignored "-Waddress" + if (acl_copy_entry(entry_d, int2ext(&entry_obj)) != 0) + return -1; +-#pragma GCC diagnostic pop + return 0; + + fail: +-- +2.13.0 + diff --git a/package/acl/Config.in b/package/acl/Config.in new file mode 100644 index 00000000..92f22518 --- /dev/null +++ b/package/acl/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_ACL + bool "acl" + select BR2_PACKAGE_ATTR + help + POSIX Access Control Lists, which are used to define more + fine-grained discretionary access rights for files and + directories. + This package also provides libacl. + + http://savannah.nongnu.org/projects/acl diff --git a/package/acl/acl.hash b/package/acl/acl.hash new file mode 100644 index 00000000..50c32d77 --- /dev/null +++ b/package/acl/acl.hash @@ -0,0 +1,6 @@ +# Locally calculated after checking pgp signature +sha256 06be9865c6f418d851ff4494e12406568353b891ffe1f596b34693c387af26c7 acl-2.2.53.tar.gz + +# Locally calculated +sha256 a45a845012742796534f7e91fe623262ccfb99460a2bd04015bd28d66fba95b8 doc/COPYING +sha256 01b1f9f2c8ee648a7a596a1abe8aa4ed7899b1c9e5551bda06da6e422b04aa55 doc/COPYING.LGPL diff --git a/package/acl/acl.mk b/package/acl/acl.mk new file mode 100644 index 00000000..1591f4c8 --- /dev/null +++ b/package/acl/acl.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# acl +# +################################################################################ + +ACL_VERSION = 2.2.53 +ACL_SITE = http://download.savannah.gnu.org/releases/acl +ACL_LICENSE = GPL-2.0+ (programs), LGPL-2.1+ (libraries) +ACL_LICENSE_FILES = doc/COPYING doc/COPYING.LGPL +ACL_CPE_ID_VENDOR = acl_project + +ACL_DEPENDENCIES = attr +HOST_ACL_DEPENDENCIES = host-attr + +ACL_INSTALL_STAGING = YES + +ACL_CONF_OPTS = --disable-nls + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/acpica/0001-build-do-not-use-Werror.patch b/package/acpica/0001-build-do-not-use-Werror.patch new file mode 100644 index 00000000..f905e552 --- /dev/null +++ b/package/acpica/0001-build-do-not-use-Werror.patch @@ -0,0 +1,82 @@ +From 9382ae2431d2962c430e7149302c8690f5bc159c Mon Sep 17 00:00:00 2001 +From: "Yann E. MORIN" +Date: Sun, 10 Jul 2016 15:06:15 +0200 +Subject: [PATCH] build: do not use -Werror + +Warnings come and go with various compiler versions, so using -Werror is +prone to cause build failures with various compiler versions, especially +newer versions that introduce new warnings. + +Remove use of -Werror. + +[Vincent: tweak patch for 20170531 release] +[Bernd: tweak patch for 20191018 release] + +Signed-off-by: "Yann E. MORIN" +Signed-off-by: "Vicente Olivert Riera" +Signed-off-by: Bernd Kuhls +--- + generate/unix/Makefile.config | 1 - + generate/unix/iasl/Makefile | 16 ++++++++-------- + 2 files changed, 8 insertions(+), 9 deletions(-) + +diff --git a/generate/unix/Makefile.config b/generate/unix/Makefile.config +index c28e8a9b1..7064bed97 100644 +--- a/generate/unix/Makefile.config ++++ b/generate/unix/Makefile.config +@@ -204,7 +204,6 @@ CWARNINGFLAGS = \ + -Wall\ + -Wbad-function-cast\ + -Wdeclaration-after-statement\ +- -Werror\ + -Wformat=2\ + -Wmissing-declarations\ + -Wmissing-prototypes\ +diff --git a/generate/unix/iasl/Makefile b/generate/unix/iasl/Makefile +index 47ea73cab..2c756af79 100644 +--- a/generate/unix/iasl/Makefile ++++ b/generate/unix/iasl/Makefile +@@ -360,32 +360,32 @@ $(OBJDIR)/prparserparse.c $(OBJDIR)/prparser.y.h : $(ASL_COMPILER)/prparse + # + $(OBJDIR)/aslcompilerlex.o : $(OBJDIR)/aslcompilerlex.c + @echo "- " "Intermediate" $< +- @$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $< ++ @$(CC) -c $(CFLAGS) -Wall -o$@ $< + + $(OBJDIR)/aslcompilerparse.o : $(OBJDIR)/aslcompilerparse.c + @echo "- " "Intermediate" $< +- @$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $< ++ @$(CC) -c $(CFLAGS) -Wall -o$@ $< + + $(OBJDIR)/dtcompilerparserlex.o : $(OBJDIR)/dtcompilerparserlex.c + @echo "- " "Intermediate" $< +- @$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $< ++ @$(CC) -c $(CFLAGS) -Wall -o$@ $< + + $(OBJDIR)/dtcompilerparserparse.o : $(OBJDIR)/dtcompilerparserparse.c + @echo "- " "Intermediate" $< +- @$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $< ++ @$(CC) -c $(CFLAGS) -Wall -o$@ $< + + $(OBJDIR)/dtparserlex.o : $(OBJDIR)/dtparserlex.c + @echo "- " "Intermediate" $< +- @$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $< ++ @$(CC) -c $(CFLAGS) -Wall -o$@ $< + + $(OBJDIR)/dtparserparse.o : $(OBJDIR)/dtparserparse.c + @echo "- " "Intermediate" $< +- @$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $< ++ @$(CC) -c $(CFLAGS) -Wall -o$@ $< + + $(OBJDIR)/prparserlex.o : $(OBJDIR)/prparserlex.c + @echo "- " "Intermediate" $< +- @$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $< ++ @$(CC) -c $(CFLAGS) -Wall -o$@ $< + + $(OBJDIR)/prparserparse.o : $(OBJDIR)/prparserparse.c + @echo "- " "Intermediate" $< +- @$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $< ++ @$(CC) -c $(CFLAGS) -Wall -o$@ $< +-- +2.20.1 + diff --git a/package/acpica/Config.in b/package/acpica/Config.in new file mode 100644 index 00000000..c5ffb005 --- /dev/null +++ b/package/acpica/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_ACPICA + bool "acpica" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + The ACPI Component Architecture (ACPICA) project provides an + operating system (OS)-independent reference implementation + of the Advanced Configuration and Power Interface + Specification (ACPI). + + https://www.acpica.org + +comment "acpica needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/acpica/acpica.hash b/package/acpica/acpica.hash new file mode 100644 index 00000000..a2fdfe60 --- /dev/null +++ b/package/acpica/acpica.hash @@ -0,0 +1,3 @@ +# locally computed hash +sha256 8a49904744a8159b7f325ed941b56968ba37a0371c634036628064f97538de4b acpica-unix2-20200717.tar.gz +sha256 cb17c679d3291eba1a70a1336062fb07eec2e839b0821b443b24f41de18c5218 source/include/acpi.h diff --git a/package/acpica/acpica.mk b/package/acpica/acpica.mk new file mode 100644 index 00000000..21ecc155 --- /dev/null +++ b/package/acpica/acpica.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# acpica +# +################################################################################ + +ACPICA_VERSION = 20200717 +ACPICA_SOURCE = acpica-unix2-$(ACPICA_VERSION).tar.gz +ACPICA_SITE = https://acpica.org/sites/acpica/files +ACPICA_LICENSE = BSD-3-Clause or GPL-2.0 +ACPICA_LICENSE_FILES = source/include/acpi.h +ACPICA_DEPENDENCIES = host-bison host-flex +HOST_ACPICA_DEPENDENCIES = host-bison host-flex + +define ACPICA_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + HARDWARE_NAME=$(BR2_ARCH) HOST=_LINUX CC="$(TARGET_CC)" \ + all +endef + +define HOST_ACPICA_BUILD_CMDS + $(HOST_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + all +endef + +define ACPICA_INSTALL_TARGET_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + HARDWARE_NAME=$(BR2_ARCH) DESTDIR="$(TARGET_DIR)" \ + INSTALLFLAGS=-m755 install +endef + +define HOST_ACPICA_INSTALL_CMDS + $(HOST_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + PREFIX="$(HOST_DIR)" \ + INSTALLFLAGS=-m755 install +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/acpid/0001-dont-use-isfdtype.patch b/package/acpid/0001-dont-use-isfdtype.patch new file mode 100644 index 00000000..2fe6c218 --- /dev/null +++ b/package/acpid/0001-dont-use-isfdtype.patch @@ -0,0 +1,20 @@ +Partially roll back upstream commit 4711119089e1ad08dad206f4fded68f1972fdeed +since released versions of uClibc don't support isfdtype(). + +Signed-off-by: Gustavo Zaarias + +diff -Nura acpid-2.0.22.orig/sock.c acpid-2.0.22/sock.c +--- acpid-2.0.22.orig/sock.c 2014-04-22 18:04:19.706841764 -0300 ++++ acpid-2.0.22/sock.c 2014-04-22 18:05:08.285479625 -0300 +@@ -53,7 +53,10 @@ + int + is_socket(int fd) + { +- return (isfdtype(fd, S_IFSOCK) == 1); ++ int v; ++ socklen_t l = sizeof(int); ++ ++ return (getsockopt(fd, SOL_SOCKET, SO_TYPE, (char *)&v, &l) == 0); + } + + /* accept a new client connection */ diff --git a/package/acpid/0002-add-missing-defines.patch b/package/acpid/0002-add-missing-defines.patch new file mode 100644 index 00000000..a8531591 --- /dev/null +++ b/package/acpid/0002-add-missing-defines.patch @@ -0,0 +1,40 @@ +Add missing MSG_CMSG_CLOEXEC + +Unpatched uClibc toolchains, even using the latest 0.9.33.2, do not +have the MSG_CMSG_CLOEXEC definition. Even though the Buildroot +internal toolchain backend has a uClibc patch to provide it, it +doesn't apply to external toolchains. This patch provides the +definition of MSG_CMSG_CLOEXEC. + +Signed-off-by: Thomas Petazzoni + +Index: b/libnetlink.h +=================================================================== +--- a/libnetlink.h ++++ b/libnetlink.h +@@ -7,6 +7,10 @@ + #include + #include + ++#ifndef MSG_CMSG_CLOEXEC ++#define MSG_CMSG_CLOEXEC 0x40000000 ++#endif ++ + struct rtnl_handle + { + int fd; +Index: b/kacpimon/libnetlink.h +=================================================================== +--- a/kacpimon/libnetlink.h ++++ b/kacpimon/libnetlink.h +@@ -7,6 +7,10 @@ + #include + #include + ++#ifndef MSG_CMSG_CLOEXEC ++#define MSG_CMSG_CLOEXEC 0x40000000 ++#endif ++ + struct rtnl_handle + { + int fd; diff --git a/package/acpid/Config.in b/package/acpid/Config.in new file mode 100644 index 00000000..0c8ecf24 --- /dev/null +++ b/package/acpid/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_ACPID + bool "acpid" + depends on BR2_USE_MMU # fork() + help + Advanced Configuration and Power Interface event daemon. + + Acpid is designed to notify user-space programs of ACPI + events, and allows you to configure specific actions for + specific events. + + http://sourceforge.net/projects/acpid2/ diff --git a/package/acpid/S02acpid b/package/acpid/S02acpid new file mode 100644 index 00000000..9017d508 --- /dev/null +++ b/package/acpid/S02acpid @@ -0,0 +1,53 @@ +#!/bin/sh + +DAEMON="acpid" +EXEC="/usr/sbin/$DAEMON" +PIDFILE="/var/run/$DAEMON.pid" + +ACPID_ARGS="" + +# shellcheck source=/dev/null +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON" + +start() { + printf 'Starting %s: ' "$DAEMON" + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon -S -q -p "$PIDFILE" -x "$EXEC" \ + -- -n $ACPID_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" -x "$EXEC" + status=$? + if [ "$status" -eq 0 ]; then + # Give acpid time to send dying gasp to syslog + sleep 1 + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + start +} + +case "$1" in + start|stop|restart) + "$1";; + reload) + restart;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/acpid/acpid.hash b/package/acpid/acpid.hash new file mode 100644 index 00000000..f325325b --- /dev/null +++ b/package/acpid/acpid.hash @@ -0,0 +1,7 @@ +# From https://sourceforge.net/projects/acpid2/files/ +md5 248995264b9d1cd8bdb923d5b190fd44 acpid-2.0.32.tar.xz +sha1 a194e99c5b596186c7865e7ddfec55dea6d7fc73 acpid-2.0.32.tar.xz + +# Locally computed +sha256 f2d2d30b3edc3234bd82f6f7186699a6aa3c85c8d20bc4e30e9b3c68a1ed157e acpid-2.0.32.tar.xz +sha256 91df39d1816bfb17a4dda2d3d2c83b1f6f2d38d53e53e41e8f97ad5ac46a0cad COPYING diff --git a/package/acpid/acpid.mk b/package/acpid/acpid.mk new file mode 100644 index 00000000..3473e7b5 --- /dev/null +++ b/package/acpid/acpid.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# acpid +# +################################################################################ + +ACPID_VERSION = 2.0.32 +ACPID_SOURCE = acpid-$(ACPID_VERSION).tar.xz +ACPID_SITE = http://downloads.sourceforge.net/project/acpid2 +ACPID_LICENSE = GPL-2.0+ +ACPID_LICENSE_FILES = COPYING +ACPID_CPE_ID_VENDOR = tedfelix +ACPID_CPE_ID_PRODUCT = acpid2 + +define ACPID_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0644 package/acpid/acpid.service \ + $(TARGET_DIR)/usr/lib/systemd/system/acpid.service +endef + +define ACPID_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/acpid/S02acpid \ + $(TARGET_DIR)/etc/init.d/S02acpid +endef + +ifeq ($(BR2_INIT_SYSV)$(BR2_INIT_SYSTEMD),y) +ACPID_POWEROFF_CMD = /sbin/shutdown -hP now +else +ACPID_POWEROFF_CMD = /sbin/poweroff +endif + +define ACPID_SET_EVENTS + mkdir -p $(TARGET_DIR)/etc/acpi/events + printf 'event=button[ /]power\naction=%s\n' '$(ACPID_POWEROFF_CMD)' \ + >$(TARGET_DIR)/etc/acpi/events/powerbtn +endef + +ACPID_POST_INSTALL_TARGET_HOOKS += ACPID_SET_EVENTS + +$(eval $(autotools-package)) diff --git a/package/acpid/acpid.service b/package/acpid/acpid.service new file mode 100644 index 00000000..5252b52f --- /dev/null +++ b/package/acpid/acpid.service @@ -0,0 +1,9 @@ +[Unit] +Description=ACPI event daemon +Documentation=man:acpid(8) + +[Service] +ExecStart=/usr/sbin/acpid --foreground --netlink + +[Install] +WantedBy=multi-user.target diff --git a/package/acpitool/Config.in b/package/acpitool/Config.in new file mode 100644 index 00000000..2600a789 --- /dev/null +++ b/package/acpitool/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_ACPITOOL + bool "acpitool" + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_INSTALL_LIBSTDCPP + help + A small, convenient command-line ACPI client with a lot of + features for Linux + + http://acpitool.sourceforge.net + +comment "acpitool needs a toolchain w/ threads, C++, dynamic library" + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS \ + || !BR2_INSTALL_LIBSTDCPP diff --git a/package/acpitool/acpitool.hash b/package/acpitool/acpitool.hash new file mode 100644 index 00000000..b43bc374 --- /dev/null +++ b/package/acpitool/acpitool.hash @@ -0,0 +1,3 @@ +# locally computed hash +sha256 004fb6cd43102918b6302cf537a2db7ceadda04aef2e0906ddf230f820dad34f acpitool-0.5.1.tar.bz2 +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/acpitool/acpitool.mk b/package/acpitool/acpitool.mk new file mode 100644 index 00000000..547da375 --- /dev/null +++ b/package/acpitool/acpitool.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# acpitool +# +################################################################################ + +ACPITOOL_VERSION = 0.5.1 +ACPITOOL_SOURCE = acpitool-$(ACPITOOL_VERSION).tar.bz2 +ACPITOOL_SITE = http://downloads.sourceforge.net/sourceforge/acpitool +ACPITOOL_LICENSE = GPL-2.0+ +ACPITOOL_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/acsccid/Config.in b/package/acsccid/Config.in new file mode 100644 index 00000000..a926be6e --- /dev/null +++ b/package/acsccid/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_ACSCCID + bool "acsccid" + depends on BR2_TOOLCHAIN_HAS_THREADS # pcsc-lite, libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + depends on BR2_USE_MMU # pcsc-lite + depends on !BR2_STATIC_LIBS # pcsc-lite + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + select BR2_PACKAGE_PCSC_LITE + # Even though there is a --disable-libusb option, it has in + # fact no effect, and acsccid really requires libusb. + select BR2_PACKAGE_LIBUSB + help + acsccid is a PC/SC driver for Linux/Mac OS X and it supports + ACS CCID smart card readers. + + http://acsccid.sourceforge.net/ + +comment "acsccid needs a toolchain w/ threads, dynamic library, gcc >= 4.9" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/acsccid/acsccid.hash b/package/acsccid/acsccid.hash new file mode 100644 index 00000000..f43a7930 --- /dev/null +++ b/package/acsccid/acsccid.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/acsccid/files/acsccid/1.1.7/ +sha1 c0062401e5fedf3ec12c8c2d375d6e1561a8a8ed acsccid-1.1.8.tar.bz2 +md5 3eba7b2527aa0b14c73b1a620a1d72d2 acsccid-1.1.8.tar.bz2 +# Locally computed +sha256 f86fd846bc88594a569ea27040cb441d933b7eca8d51d2a90bacf161e7740051 acsccid-1.1.8.tar.bz2 +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 COPYING diff --git a/package/acsccid/acsccid.mk b/package/acsccid/acsccid.mk new file mode 100644 index 00000000..db74e9cb --- /dev/null +++ b/package/acsccid/acsccid.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# acsccid +# +################################################################################ + +ACSCCID_VERSION = 1.1.8 +ACSCCID_SOURCE = acsccid-$(ACSCCID_VERSION).tar.bz2 +ACSCCID_SITE = http://downloads.sourceforge.net/acsccid +ACSCCID_LICENSE = LGPL-2.1+ +ACSCCID_LICENSE_FILES = COPYING +ACSCCID_INSTALL_STAGING = YES +ACSCCID_DEPENDENCIES = pcsc-lite host-flex host-pkgconf libusb +ACSCCID_CONF_OPTS = --enable-usbdropdir=/usr/lib/pcsc/drivers + +ifeq ($(BR2_PACKAGE_LIBICONV),y) +ACSCCID_DEPENDENCIES += libiconv +endif + +$(eval $(autotools-package)) diff --git a/package/adwaita-icon-theme/Config.in b/package/adwaita-icon-theme/Config.in new file mode 100644 index 00000000..d200570e --- /dev/null +++ b/package/adwaita-icon-theme/Config.in @@ -0,0 +1,5 @@ +config BR2_PACKAGE_ADWAITA_ICON_THEME + bool "adwaita icon theme" + depends on BR2_PACKAGE_LIBGTK2 || BR2_PACKAGE_LIBGTK3 + help + Adwaita icon theme diff --git a/package/adwaita-icon-theme/adwaita-icon-theme.hash b/package/adwaita-icon-theme/adwaita-icon-theme.hash new file mode 100644 index 00000000..ce6acb8d --- /dev/null +++ b/package/adwaita-icon-theme/adwaita-icon-theme.hash @@ -0,0 +1,6 @@ +# From http://ftp.gnome.org/pub/gnome/sources/adwaita-icon-theme/3.22/adwaita-icon-theme-3.22.0.sha256sum +sha256 a594e7440971f860cc61b1b8291be15ffc1b8dd06a9f11485a5a7faf189bcf6b adwaita-icon-theme-3.37.2.tar.xz +# locally computed +sha256 51f83b2b4e9ed2beebc9b8eed2ecad29314a58ed8c5184b22ad8f9df703d3ce5 COPYING +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 COPYING_LGPL +sha256 207fe75c396c0ae197c57d42c727163428b6667d98cef3644e41c6f1afe1895f COPYING_CCBYSA3 diff --git a/package/adwaita-icon-theme/adwaita-icon-theme.mk b/package/adwaita-icon-theme/adwaita-icon-theme.mk new file mode 100644 index 00000000..3950cfa6 --- /dev/null +++ b/package/adwaita-icon-theme/adwaita-icon-theme.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# adwaita-icon-theme +# +################################################################################ + +ADWAITA_ICON_THEME_VERSION_MAJOR = 3.37 +ADWAITA_ICON_THEME_VERSION = $(ADWAITA_ICON_THEME_VERSION_MAJOR).2 +ADWAITA_ICON_THEME_SITE = http://ftp.gnome.org/pub/gnome/sources/adwaita-icon-theme/$(ADWAITA_ICON_THEME_VERSION_MAJOR) +ADWAITA_ICON_THEME_SOURCE = adwaita-icon-theme-$(ADWAITA_ICON_THEME_VERSION).tar.xz +ADWAITA_ICON_THEME_INSTALL_STAGING = YES +ADWAITA_ICON_THEME_LICENSE = LGPL-3.0 or CC-BY-SA-3.0 +ADWAITA_ICON_THEME_LICENSE_FILES = COPYING COPYING_LGPL COPYING_CCBYSA3 +ADWAITA_ICON_THEME_DEPENDENCIES = host-intltool host-libgtk3 + +$(eval $(autotools-package)) diff --git a/package/aer-inject/Config.in b/package/aer-inject/Config.in new file mode 100644 index 00000000..7c737d42 --- /dev/null +++ b/package/aer-inject/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_AER_INJECT + bool "aer-inject" + help + aer-inject allows to inject PCIE AER errors on the software + level into a running Linux kernel. This is intended for + validation of the PCIE driver error recovery handler and + PCIE AER core handler. + + Requires a new Linux kernel with PCIE AER error injection + patches. + + https://git.kernel.org/cgit/linux/kernel/git/gong.chen/aer-inject.git/ diff --git a/package/aer-inject/aer-inject.hash b/package/aer-inject/aer-inject.hash new file mode 100644 index 00000000..6259bb90 --- /dev/null +++ b/package/aer-inject/aer-inject.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 2dd2bd73aa738c1cc26ba04b6e502329778d18c2cc873c0bd00e6b2d38e9477c aer-inject-9bd5e2c7886fca72f139cd8402488a2235957d41-br1.tar.gz +sha256 659a191d8775e05c6c6a9a4ba66b3577c577342bb83f20d393135eb6633c8973 README diff --git a/package/aer-inject/aer-inject.mk b/package/aer-inject/aer-inject.mk new file mode 100644 index 00000000..72495bbe --- /dev/null +++ b/package/aer-inject/aer-inject.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# aer-inject +# +################################################################################ + +AER_INJECT_VERSION = 9bd5e2c7886fca72f139cd8402488a2235957d41 +AER_INJECT_SITE = git://git.kernel.org/pub/scm/linux/kernel/git/gong.chen/aer-inject.git +AER_INJECT_LICENSE = GPL-2.0 +AER_INJECT_LICENSE_FILES = README +AER_INJECT_DEPENDENCIES = host-flex host-bison + +define AER_INJECT_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) +endef + +define AER_INJECT_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) \ + DESTDIR=$(TARGET_DIR) PREFIX=/usr/bin install +endef + +$(eval $(generic-package)) diff --git a/package/aespipe/Config.in b/package/aespipe/Config.in new file mode 100644 index 00000000..e1683a0a --- /dev/null +++ b/package/aespipe/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_AESPIPE + bool "aespipe" + depends on BR2_USE_MMU # fork() + help + aespipe program is AES encrypting or decrypting pipe. It reads + from standard input and writes to standard output. It can be + used to create and restore encrypted tar or cpio archives. + It can be used to encrypt and decrypt loop-AES compatible + encrypted disk images. + + http://loop-aes.sourceforge.net/ diff --git a/package/aespipe/Config.in.host b/package/aespipe/Config.in.host new file mode 100644 index 00000000..1e98c21c --- /dev/null +++ b/package/aespipe/Config.in.host @@ -0,0 +1,10 @@ +config BR2_PACKAGE_HOST_AESPIPE + bool "host aespipe" + help + aespipe program is AES encrypting or decrypting pipe. It + reads from standard input and writes to standard output. It + can be used to create and restore encrypted tar or cpio + archives. It can be used to encrypt and decrypt loop-AES + compatible encrypted disk images. + + http://loop-aes.sourceforge.net/ diff --git a/package/aespipe/aespipe.hash b/package/aespipe/aespipe.hash new file mode 100644 index 00000000..134a16df --- /dev/null +++ b/package/aespipe/aespipe.hash @@ -0,0 +1,5 @@ +# From https://sourceforge.net/projects/loop-aes/files/aespipe/v2.4f/ +sha1 2c23e1a6be298cf4f173f06b1123e4ecd5e9a202 aespipe-v2.4f.tar.bz2 +md5 ed05c62c1954110f009bedda4bc1562f aespipe-v2.4f.tar.bz2 +# Locally computed: +sha256 b135e1659f58dc9be5e3c88923cd03d2a936096ab8cd7f2b3af4cb7a844cef96 aespipe-v2.4f.tar.bz2 diff --git a/package/aespipe/aespipe.mk b/package/aespipe/aespipe.mk new file mode 100644 index 00000000..fd4f776d --- /dev/null +++ b/package/aespipe/aespipe.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# aespipe +# +################################################################################ + +AESPIPE_VERSION = 2.4f +AESPIPE_SOURCE = aespipe-v$(AESPIPE_VERSION).tar.bz2 +AESPIPE_SITE = http://loop-aes.sourceforge.net/aespipe +AESPIPE_LICENSE = GPL + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/agentpp/0001-Fix-build-when-SNMPv3-is-disabled.patch b/package/agentpp/0001-Fix-build-when-SNMPv3-is-disabled.patch new file mode 100644 index 00000000..f16c2b4b --- /dev/null +++ b/package/agentpp/0001-Fix-build-when-SNMPv3-is-disabled.patch @@ -0,0 +1,102 @@ +From 2a0fe384eec254643ca2176ccfcbbd036a5aad06 Mon Sep 17 00:00:00 2001 +From: Luca Ceresoli +Date: Tue, 14 Jul 2020 10:30:10 +0200 +Subject: [PATCH] Fix build when SNMPv3 is disabled + +agentpp has ifdefs to disable v3 code when SNMPv3 is disabled. However it +is missing one and it has a few ones in excess. Fix them. + +Upstream is aware, says "will fix in later version", but thinks to make v3 +mandatory. See discussion at +https://forum.snmp.app/t/agent-compile-fails-if-snmp-has-disable-snmpv3/326 + +Upstream status: none, upstream is not welcoming contributions. + +Signed-off-by: Luca Ceresoli +--- + include/agent_pp/notification_log_mib.h | 4 ++-- + include/agent_pp/notification_originator.h | 2 ++ + include/agent_pp/snmp_community_mib.h | 4 ++-- + src/notification_originator.cpp | 2 ++ + 4 files changed, 8 insertions(+), 4 deletions(-) + +diff --git a/include/agent_pp/notification_log_mib.h b/include/agent_pp/notification_log_mib.h +index ddac05e515d9..8fd8cfec32ca 100644 +--- a/include/agent_pp/notification_log_mib.h ++++ b/include/agent_pp/notification_log_mib.h +@@ -22,7 +22,7 @@ + + //--AgentGen BEGIN=_BEGIN + #include +-#ifdef _SNMPv3 ++// #ifdef _SNMPv3 // This file deos not look SNMPv3-specific + #include + //--AgentGen END + +@@ -688,6 +688,6 @@ protected: + */ + + +-#endif ++// #endif // _SNMPv3 + + +diff --git a/include/agent_pp/notification_originator.h b/include/agent_pp/notification_originator.h +index 95e8b4e1836d..6f50cd52625b 100644 +--- a/include/agent_pp/notification_originator.h ++++ b/include/agent_pp/notification_originator.h +@@ -307,7 +307,9 @@ class AGENTPP_DECL NotificationOriginator: public NotificationSender { + */ + virtual nlmLogEntry* get_nlm_log_entry(); + ++#ifdef _SNMPv3 + virtual v3MP* get_v3mp(); ++#endif + + protected: + +diff --git a/include/agent_pp/snmp_community_mib.h b/include/agent_pp/snmp_community_mib.h +index 7d5c4558f36d..d9eb2b4a87ec 100644 +--- a/include/agent_pp/snmp_community_mib.h ++++ b/include/agent_pp/snmp_community_mib.h +@@ -49,7 +49,7 @@ namespace Agentpp { + #define oidSnmpTrapAddress "1.3.6.1.6.3.18.1.3.0" + #define oidSnmpTrapCommunity "1.3.6.1.6.3.18.1.4.0" + +-#ifdef _SNMPv3 ++// #ifdef _SNMPv3 // This file deos not look SNMPv3-specific + + /** + * snmpCommunityName +@@ -346,7 +346,7 @@ class AGENTPP_DECL snmp_community_mib: public MibGroup + static void add_public(); + static void add_public(Mib* mib); + }; +-#endif ++// #endif // _SNMPv3 + + #ifdef AGENTPP_NAMESPACE + } +diff --git a/src/notification_originator.cpp b/src/notification_originator.cpp +index d7d566869998..39ddbe08cdeb 100644 +--- a/src/notification_originator.cpp ++++ b/src/notification_originator.cpp +@@ -237,6 +237,7 @@ nlmLogEntry* NotificationOriginator::get_nlm_log_entry() { + return nlmLogEntry::instance; + } + ++#ifdef _SNMPv3 + v3MP* NotificationOriginator::get_v3mp() { + if (mib) { + return mib->get_request_list()->get_v3mp(); +@@ -244,6 +245,7 @@ v3MP* NotificationOriginator::get_v3mp() { + return v3MP::I; + } + } ++#endif + + + bool NotificationOriginator::check_access(ListCursor& cur, +-- +2.27.0 + diff --git a/package/agentpp/Config.in b/package/agentpp/Config.in new file mode 100644 index 00000000..8c6b11d6 --- /dev/null +++ b/package/agentpp/Config.in @@ -0,0 +1,23 @@ +config BR2_PACKAGE_AGENTPP + bool "agent++" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS # snmp++ + depends on !BR2_STATIC_LIBS # snmp++ + select BR2_PACKAGE_SNMPPP + help + AGENT++ is a set of C++ classes which provides a complete + protocol engine and dispatch table for the development of + SNMP agents. AGENT++ is a multilingual API which supports + SNMPv1, SNMPv2c, and SNMPv3. It provides various C++ classes + implementing prototypes for scalar and table SNMP managed + objects that can be customized by derivation. Additional + classes support the development of proxy agents as well as + sending notifications. + + SNMPv3 support is enabled if SNMP++ enables it. + + http://www.agentpp.com/agentpp3_5/agentpp3_5.html + +comment "agent++ needs a toolchain w/ threads, C++, dynamic library" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS diff --git a/package/agentpp/agentpp.hash b/package/agentpp/agentpp.hash new file mode 100644 index 00000000..11b23c8e --- /dev/null +++ b/package/agentpp/agentpp.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 9b45123df45e803198a1181540b37a4ccd0e63c68df6e826702e2ba49167edac agent++-4.3.1.tar.gz +sha256 1eb85fc97224598dad1852b5d6483bbcf0aa8608790dcc657a5a2a761ae9c8c6 LICENSE-2_0.txt diff --git a/package/agentpp/agentpp.mk b/package/agentpp/agentpp.mk new file mode 100644 index 00000000..8982d9e5 --- /dev/null +++ b/package/agentpp/agentpp.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# agentpp +# +################################################################################ + +AGENTPP_VERSION = 4.3.1 +AGENTPP_SOURCE = agent++-$(AGENTPP_VERSION).tar.gz +AGENTPP_SITE = http://www.agentpp.com/download +AGENTPP_LICENSE = Apache-2.0 +AGENTPP_LICENSE_FILES = LICENSE-2_0.txt +AGENTPP_INSTALL_STAGING = YES +AGENTPP_DEPENDENCIES = host-pkgconf snmppp +AGENTPP_CONF_OPTS += \ + --disable-proxy \ + --disable-forwarder \ + --disable-rpath + +$(eval $(autotools-package)) diff --git a/package/aircrack-ng/0001-Expand-packed-definition.patch b/package/aircrack-ng/0001-Expand-packed-definition.patch new file mode 100644 index 00000000..f0c033a1 --- /dev/null +++ b/package/aircrack-ng/0001-Expand-packed-definition.patch @@ -0,0 +1,26 @@ +From d4496006ac1e0c99908108b998ae39afb0658733 Mon Sep 17 00:00:00 2001 +From: Joseph Benden +Date: Tue, 7 Jul 2020 11:42:40 -0700 +Subject: [PATCH] Expand __packed definition. + +Signed-off-by: Joseph Benden +[Retrieved from: +https://github.com/aircrack-ng/aircrack-ng/commit/d4496006ac1e0c99908108b998ae39afb0658733] +Signed-off-by: Fabrice Fontaine +--- + lib/radiotap/radiotap.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/radiotap/radiotap.h b/lib/radiotap/radiotap.h +index 57f784b8d..bb5a41dfc 100644 +--- a/lib/radiotap/radiotap.h ++++ b/lib/radiotap/radiotap.h +@@ -56,7 +56,7 @@ struct ieee80211_radiotap_header { + * @it_present: (first) present word + */ + uint32_t it_present; +-} __packed; ++} __attribute__((__packed__)); + + /* version is always 0 */ + #define PKTHDR_RADIOTAP_VERSION 0 diff --git a/package/aircrack-ng/0002-Fix-duplicated-symbols.patch b/package/aircrack-ng/0002-Fix-duplicated-symbols.patch new file mode 100644 index 00000000..f1815808 --- /dev/null +++ b/package/aircrack-ng/0002-Fix-duplicated-symbols.patch @@ -0,0 +1,74 @@ +From f6f1396807607f5649d20631db517cfca3a1f5c4 Mon Sep 17 00:00:00 2001 +From: Joseph Benden +Date: Tue, 7 Jul 2020 11:44:40 -0700 +Subject: [PATCH] Fix duplicated symbols. + +Signed-off-by: Joseph Benden +[Retrieved from: +https://github.com/aircrack-ng/aircrack-ng/commit/f6f1396807607f5649d20631db517cfca3a1f5c4] +Signed-off-by: Fabrice Fontaine +--- + src/airodump-ng/airodump-ng.c | 2 -- + src/airventriloquist-ng/airventriloquist-ng.c | 6 +++--- + src/tkiptun-ng/tkiptun-ng.c | 4 ++-- + 3 files changed, 5 insertions(+), 7 deletions(-) + +diff --git a/src/airodump-ng/airodump-ng.c b/src/airodump-ng/airodump-ng.c +index 3ae6994dd..e72bc88e2 100644 +--- a/src/airodump-ng/airodump-ng.c ++++ b/src/airodump-ng/airodump-ng.c +@@ -92,8 +92,6 @@ + #include "radiotap/radiotap_iter.h" + + struct devices dev; +-uint8_t h80211[4096] __attribute__((aligned(16))); +-uint8_t tmpbuf[4096] __attribute__((aligned(16))); + + static const unsigned char llcnull[] = {0, 0, 0, 0}; + +diff --git a/src/airventriloquist-ng/airventriloquist-ng.c b/src/airventriloquist-ng/airventriloquist-ng.c +index ac6b7647e..267d95540 100644 +--- a/src/airventriloquist-ng/airventriloquist-ng.c ++++ b/src/airventriloquist-ng/airventriloquist-ng.c +@@ -173,7 +173,7 @@ static struct local_options + } lopt; + + struct devices dev; +-struct wif *_wi_in, *_wi_out; ++extern struct wif *_wi_in, *_wi_out; + + struct ARP_req + { +@@ -195,8 +195,8 @@ struct APt + }; + + unsigned long nb_pkt_sent; +-u_int8_t h80211[4096]; +-static u_int8_t tmpbuf[4096]; ++extern u_int8_t h80211[4096]; ++extern u_int8_t tmpbuf[4096]; + + static int tcp_test(const char * ip_str, const short port) + { +diff --git a/src/tkiptun-ng/tkiptun-ng.c b/src/tkiptun-ng/tkiptun-ng.c +index dc67f5d58..43db0bc23 100644 +--- a/src/tkiptun-ng/tkiptun-ng.c ++++ b/src/tkiptun-ng/tkiptun-ng.c +@@ -267,7 +267,7 @@ static struct local_options + + // unused, but needed for link + struct devices dev; +-struct wif *_wi_in, *_wi_out; ++extern struct wif *_wi_in, *_wi_out; + + struct ARP_req + { +@@ -289,7 +289,7 @@ struct APt + }; + + unsigned long nb_pkt_sent; +-unsigned char h80211[4096]; ++extern unsigned char h80211[4096]; + static unsigned char srcbuf[4096]; + static char strbuf[512]; + static int alarmed; diff --git a/package/aircrack-ng/Config.in b/package/aircrack-ng/Config.in new file mode 100644 index 00000000..f3e2bc4e --- /dev/null +++ b/package/aircrack-ng/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_AIRCRACK_NG + bool "aircrack-ng" + depends on BR2_USE_MMU # uses fork() + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS # dlfcn.h + select BR2_PACKAGE_OPENSSL if !BR2_PACKAGE_LIBGCRYPT + help + A set of tools for auditing wireless networks + + For complete functionality, also select ethtool, iw, + util-linux (utilities and rfkill), and wireless_tools. + + http://www.aircrack-ng.org/ + +comment "aircrack-ng needs a toolchain w/ dynamic library, threads, C++" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS \ + || !BR2_INSTALL_LIBSTDCPP diff --git a/package/aircrack-ng/aircrack-ng.hash b/package/aircrack-ng/aircrack-ng.hash new file mode 100644 index 00000000..990c3ef5 --- /dev/null +++ b/package/aircrack-ng/aircrack-ng.hash @@ -0,0 +1,6 @@ +# From http://www.aircrack-ng.org/downloads.html +sha1 ffeb4816476e7b329dc0c154f1aa4a30ad171beb aircrack-ng-1.6.tar.gz +md5 22ddc85549b51ed0da0931d01ef215e5 aircrack-ng-1.6.tar.gz + +# Hash for license file: +sha256 fc51fd3a97223f2fd47b057202d4a6b0daaedf23b5a1f5ff8723c192fc1e021d LICENSE diff --git a/package/aircrack-ng/aircrack-ng.mk b/package/aircrack-ng/aircrack-ng.mk new file mode 100644 index 00000000..ff87766d --- /dev/null +++ b/package/aircrack-ng/aircrack-ng.mk @@ -0,0 +1,77 @@ +################################################################################ +# +# aircrack-ng +# +################################################################################ + +AIRCRACK_NG_VERSION = 1.6 +AIRCRACK_NG_SITE = http://download.aircrack-ng.org +AIRCRACK_NG_LICENSE = GPL-2.0+ +AIRCRACK_NG_LICENSE_FILES = LICENSE +AIRCRACK_NG_CPE_ID_VENDOR = aircrack-ng +AIRCRACK_NG_DEPENDENCIES = \ + $(if $(BR2_PACKAGE_CMOCKA),cmocka) \ + $(if $(BR2_PACKAGE_LIBNL),libnl) \ + $(if $(BR2_PACKAGE_OPENSSL),openssl) \ + $(if $(BR2_PACKAGE_PCRE),pcre) \ + $(if $(BR2_PACKAGE_ZLIB),zlib) \ + host-pkgconf +AIRCRACK_NG_AUTORECONF = YES +# Enable buddy-ng, easside-ng, tkiptun-ng, wesside-ng +AIRCRACK_NG_CONF_OPTS = --with-experimental + +ifeq ($(BR2_TOOLCHAIN_HAS_SSP),y) +AIRCRACK_NG_CONF_OPTS += --with-opt +else +AIRCRACK_NG_CONF_OPTS += --without-opt +endif + +ifeq ($(BR2_PACKAGE_DUMA),y) +AIRCRACK_NG_DEPENDENCIES += duma +AIRCRACK_NG_CONF_OPTS += --with-duma +else +AIRCRACK_NG_CONF_OPTS += --without-duma +endif + +ifeq ($(BR2_PACKAGE_HWLOC),y) +AIRCRACK_NG_DEPENDENCIES += hwloc +AIRCRACK_NG_CONF_OPTS += --enable-hwloc +else +AIRCRACK_NG_CONF_OPTS += --disable-hwloc +endif + +ifeq ($(BR2_PACKAGE_JEMALLOC),y) +AIRCRACK_NG_DEPENDENCIES += jemalloc +AIRCRACK_NG_CONF_OPTS += --with-jemalloc +else +AIRCRACK_NG_CONF_OPTS += --without-jemalloc +endif + +ifeq ($(BR2_PACKAGE_LIBGCRYPT),y) +AIRCRACK_NG_DEPENDENCIES += libgcrypt +AIRCRACK_NG_CONF_OPTS += \ + --with-gcrypt \ + --with-libgcrypt-prefix=$(STAGING_DIR)/usr +else +AIRCRACK_NG_CONF_OPTS += --without-gcrypt +endif + +ifeq ($(BR2_PACKAGE_LIBPCAP),y) +AIRCRACK_NG_DEPENDENCIES += libpcap +AIRCRACK_NG_CONF_OPTS += \ + --with-libpcap-include=$(STAGING_DIR)/usr/include \ + --with-libpcap-lib=$(STAGING_DIR)/usr/lib +ifeq ($(BR2_STATIC_LIBS),y) +AIRCRACK_NG_CONF_ENV += \ + LIBS="`$(STAGING_DIR)/usr/bin/pcap-config --static --additional-libs`" +endif +endif + +ifeq ($(BR2_PACKAGE_SQLITE),y) +AIRCRACK_NG_DEPENDENCIES += sqlite +AIRCRACK_NG_CONF_OPTS += --with-sqlite3 +else +AIRCRACK_NG_CONF_OPTS += --without-sqlite3 +endif + +$(eval $(autotools-package)) diff --git a/package/alsa-lib/0001-Don-t-use-fork-on-noMMU-platforms.patch b/package/alsa-lib/0001-Don-t-use-fork-on-noMMU-platforms.patch new file mode 100644 index 00000000..17b57d1f --- /dev/null +++ b/package/alsa-lib/0001-Don-t-use-fork-on-noMMU-platforms.patch @@ -0,0 +1,62 @@ +From 41c029755502acf01ed634db437ac06d09be6c41 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Fri, 13 Apr 2018 09:02:37 +0200 +Subject: [PATCH] Don't use fork() on noMMU platforms +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Thomas Petazzoni +[Jörg: update patch for 1.1.6] +Signed-off-by: Jörg Krause +Upstream: http://mailman.alsa-project.org/pipermail/alsa-devel/2018-November/141376.html +[Bernd: update patch for 1.2.4] +Signed-off-by: Bernd Kuhls +--- + configure.ac | 2 ++ + src/pcm/pcm_direct.c | 10 +++++++++- + 2 files changed, 11 insertions(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index cce195ae..0c852434 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -51,6 +51,8 @@ dnl Checks for library functions. + AC_PROG_GCC_TRADITIONAL + AC_CHECK_FUNCS([uselocale]) + ++AC_CHECK_FUNC([fork]) ++ + SAVE_LIBRARY_VERSION + AC_SUBST(LIBTOOL_VERSION_INFO) + +diff --git a/src/pcm/pcm_direct.c b/src/pcm/pcm_direct.c +index 2b07eff9..4dc3ea26 100644 +--- a/src/pcm/pcm_direct.c ++++ b/src/pcm/pcm_direct.c +@@ -437,13 +437,21 @@ int snd_pcm_direct_server_create(snd_pcm_direct_t *dmix) + close(dmix->server_fd); + return ret; + } +- ++ ++#ifdef HAVE_FORK + ret = fork(); ++#else ++ ret = vfork(); ++#endif + if (ret < 0) { + close(dmix->server_fd); + return ret; + } else if (ret == 0) { ++#ifdef HAVE_FORK + ret = fork(); ++#else ++ ret = vfork(); ++#endif + if (ret == 0) + server_job(dmix); + _exit(EXIT_SUCCESS); +-- +2.14.3 + diff --git a/package/alsa-lib/0002-dlmisc-the-snd_plugin_dir_set.patch b/package/alsa-lib/0002-dlmisc-the-snd_plugin_dir_set.patch new file mode 100644 index 00000000..61d94545 --- /dev/null +++ b/package/alsa-lib/0002-dlmisc-the-snd_plugin_dir_set.patch @@ -0,0 +1,34 @@ +From ad8c8e5503980295dd8e5e54a6285d2d7e32eb1e Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Thu, 22 Oct 2020 20:57:32 +0200 +Subject: [PATCH] dlmisc: the snd_plugin_dir_set / snd_plugin_dir must be + declared even for \!DL_ORIGIN_AVAILABLE + +Fixes: 8580c081c2 ("dlsym: add support for ALSA_PLUGIN_DIR environment variable") +BugLink: https://github.com/alsa-project/alsa-lib/issues/91 +Signed-off-by: Jaroslav Kysela + +Downloaded from upstream commit +https://github.com/alsa-project/alsa-lib/commit/ad8c8e5503980295dd8e5e54a6285d2d7e32eb1e + +Signed-off-by: Bernd Kuhls +--- + src/dlmisc.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/src/dlmisc.c b/src/dlmisc.c +index c9517c55..f20eb593 100644 +--- a/src/dlmisc.c ++++ b/src/dlmisc.c +@@ -42,11 +42,9 @@ + #ifndef PIC + struct snd_dlsym_link *snd_dlsym_start = NULL; + #endif +-#ifdef DL_ORIGIN_AVAILABLE + static int snd_plugin_dir_set = 0; + static char *snd_plugin_dir = NULL; + #endif +-#endif + + #if defined(DL_ORIGIN_AVAILABLE) && defined(HAVE_LIBPTHREAD) + static pthread_mutex_t snd_dlpath_mutex = PTHREAD_MUTEX_INITIALIZER; diff --git a/package/alsa-lib/Config.in b/package/alsa-lib/Config.in new file mode 100644 index 00000000..f334b66b --- /dev/null +++ b/package/alsa-lib/Config.in @@ -0,0 +1,83 @@ +comment "alsa-lib needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS + +menuconfig BR2_PACKAGE_ALSA_LIB + bool "alsa-lib" + # Even though some parts of alsa-lib use threads only when + # available, some PCM plugins use them unconditionally. Since + # the usage of alsa-lib on no-thread systems is pretty + # unlikely, just require thread support globally for alsa-lib. + depends on BR2_TOOLCHAIN_HAS_THREADS + # Temporary until + # https://bugtrack.alsa-project.org/alsa-bug/view.php?id=4913 + # is fixed + select BR2_PACKAGE_ALSA_LIB_PCM + help + The Advanced Linux Sound Architecture (ALSA) provides audio + and MIDI functionality to the Linux operating system. + + http://www.alsa-project.org/ + +if BR2_PACKAGE_ALSA_LIB + +config BR2_PACKAGE_ALSA_LIB_PYTHON + bool "Python support for alsa-lib" + depends on BR2_PACKAGE_PYTHON + help + Add python support for alsa-lib. + Python will be built and libpython will be installed + in the target directory + http://www.alsa-project.org/ + +config BR2_PACKAGE_ALSA_LIB_DEVDIR + string "directory with ALSA device files" + default "/dev/snd" + +config BR2_PACKAGE_ALSA_LIB_PCM_PLUGINS + string "built PCM plugins" + default "all" if BR2_USE_MMU + default "copy linear route mulaw alaw adpcm rate plug multi file null empty share meter hooks lfloat ladspa dmix dshare dsnoop asym iec958 softvol extplug ioplug mmap_emul" if !BR2_USE_MMU + +config BR2_PACKAGE_ALSA_LIB_CTL_PLUGINS + string "built control plugins" + default "all" + +config BR2_PACKAGE_ALSA_LIB_ALOAD + bool "aload" + default y + +config BR2_PACKAGE_ALSA_LIB_MIXER + bool "mixer" + default y + +config BR2_PACKAGE_ALSA_LIB_PCM + bool "pcm" + default y + +config BR2_PACKAGE_ALSA_LIB_RAWMIDI + bool "rawmidi" + default y + +config BR2_PACKAGE_ALSA_LIB_HWDEP + bool "hwdep" + default y + +config BR2_PACKAGE_ALSA_LIB_SEQ + bool "seq" + default y + +config BR2_PACKAGE_ALSA_LIB_UCM + bool "ucm" + default y + select BR2_PACKAGE_ALSA_LIB_MIXER + +config BR2_PACKAGE_ALSA_LIB_ALISP + bool "alisp" + default y + depends on BR2_USE_MMU + +config BR2_PACKAGE_ALSA_LIB_OLD_SYMBOLS + bool "old-symbols" + default y + +endif diff --git a/package/alsa-lib/alsa-lib.hash b/package/alsa-lib/alsa-lib.hash new file mode 100644 index 00000000..6e65fb71 --- /dev/null +++ b/package/alsa-lib/alsa-lib.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 f7554be1a56cdff468b58fc1c29b95b64864c590038dd309c7a978c7116908f7 alsa-lib-1.2.4.tar.bz2 +sha256 32434afcc8666ba060e111d715bfdb6c2d5dd8a35fa4d3ab8ad67d8f850d2f2b COPYING +sha256 bfe16cf823bcff261fc6a062c07ee96660e3c39678f42f39a788a68dbc234ced aserver/COPYING diff --git a/package/alsa-lib/alsa-lib.mk b/package/alsa-lib/alsa-lib.mk new file mode 100644 index 00000000..b1bfaf30 --- /dev/null +++ b/package/alsa-lib/alsa-lib.mk @@ -0,0 +1,73 @@ +################################################################################ +# +# alsa-lib +# +################################################################################ + +ALSA_LIB_VERSION = 1.2.4 +ALSA_LIB_SOURCE = alsa-lib-$(ALSA_LIB_VERSION).tar.bz2 +ALSA_LIB_SITE = https://www.alsa-project.org/files/pub/lib +ALSA_LIB_LICENSE = LGPL-2.1+ (library), GPL-2.0+ (aserver) +ALSA_LIB_LICENSE_FILES = COPYING aserver/COPYING +ALSA_LIB_CPE_ID_VENDOR = alsa-project +ALSA_LIB_INSTALL_STAGING = YES +ALSA_LIB_CFLAGS = $(TARGET_CFLAGS) +ALSA_LIB_AUTORECONF = YES +ALSA_LIB_CONF_OPTS = \ + --with-alsa-devdir=$(call qstrip,$(BR2_PACKAGE_ALSA_LIB_DEVDIR)) \ + --with-pcm-plugins="$(call qstrip,$(BR2_PACKAGE_ALSA_LIB_PCM_PLUGINS))" \ + --with-ctl-plugins="$(call qstrip,$(BR2_PACKAGE_ALSA_LIB_CTL_PLUGINS))" \ + --without-versioned + +# Can't build with static & shared at the same time (1.0.25+) +ifeq ($(BR2_STATIC_LIBS),y) +ALSA_LIB_CONF_OPTS += \ + --enable-shared=no \ + --without-libdl +else +ALSA_LIB_CONF_OPTS += --enable-static=no +endif + +ifneq ($(BR2_PACKAGE_ALSA_LIB_ALOAD),y) +ALSA_LIB_CONF_OPTS += --disable-aload +endif +ifneq ($(BR2_PACKAGE_ALSA_LIB_MIXER),y) +ALSA_LIB_CONF_OPTS += --disable-mixer +endif +ifneq ($(BR2_PACKAGE_ALSA_LIB_PCM),y) +ALSA_LIB_CONF_OPTS += --disable-pcm +endif +ifneq ($(BR2_PACKAGE_ALSA_LIB_RAWMIDI),y) +ALSA_LIB_CONF_OPTS += --disable-rawmidi +endif +ifneq ($(BR2_PACKAGE_ALSA_LIB_HWDEP),y) +ALSA_LIB_CONF_OPTS += --disable-hwdep +endif +ifneq ($(BR2_PACKAGE_ALSA_LIB_SEQ),y) +ALSA_LIB_CONF_OPTS += --disable-seq +endif +ifneq ($(BR2_PACKAGE_ALSA_LIB_UCM),y) +ALSA_LIB_CONF_OPTS += --disable-ucm +endif +ifneq ($(BR2_PACKAGE_ALSA_LIB_ALISP),y) +ALSA_LIB_CONF_OPTS += --disable-alisp +endif +ifneq ($(BR2_PACKAGE_ALSA_LIB_OLD_SYMBOLS),y) +ALSA_LIB_CONF_OPTS += --disable-old-symbols +endif + +ifeq ($(BR2_PACKAGE_ALSA_LIB_PYTHON),y) +ALSA_LIB_CONF_OPTS += \ + --with-pythonlibs=-lpython$(PYTHON_VERSION_MAJOR) \ + --with-pythonincludes=$(STAGING_DIR)/usr/include/python$(PYTHON_VERSION_MAJOR) +ALSA_LIB_CFLAGS += -I$(STAGING_DIR)/usr/include/python$(PYTHON_VERSION_MAJOR) +ALSA_LIB_DEPENDENCIES = python +else +ALSA_LIB_CONF_OPTS += --disable-python +endif + +ALSA_LIB_CONF_ENV = \ + CFLAGS="$(ALSA_LIB_CFLAGS)" \ + LDFLAGS="$(TARGET_LDFLAGS) -lm" + +$(eval $(autotools-package)) diff --git a/package/alsa-utils/Config.in b/package/alsa-utils/Config.in new file mode 100644 index 00000000..2d7062b0 --- /dev/null +++ b/package/alsa-utils/Config.in @@ -0,0 +1,95 @@ +comment "alsa-utils needs a toolchain w/ threads" + depends on BR2_USE_MMU # fork + depends on !BR2_TOOLCHAIN_HAS_THREADS + +menuconfig BR2_PACKAGE_ALSA_UTILS + bool "alsa-utils" + depends on BR2_USE_MMU # fork + depends on BR2_TOOLCHAIN_HAS_THREADS # alsa-lib + select BR2_PACKAGE_ALSA_LIB + help + This package contains the command line utilities for the ALSA + project. + + http://www.alsa-project.org/ + +if BR2_PACKAGE_ALSA_UTILS + +config BR2_PACKAGE_ALSA_UTILS_ALSACONF + bool "alsaconf" + +config BR2_PACKAGE_ALSA_UTILS_ACONNECT + bool "aconnect" + select BR2_PACKAGE_ALSA_LIB_SEQ + +config BR2_PACKAGE_ALSA_UTILS_ALSACTL + bool "alsactl" + default y + +config BR2_PACKAGE_ALSA_UTILS_ALSALOOP + bool "alsaloop" + +config BR2_PACKAGE_ALSA_UTILS_ALSAMIXER + bool "alsamixer" + default y + depends on BR2_USE_WCHAR + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_ALSA_LIB_MIXER + +comment "alsamixer needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR + +config BR2_PACKAGE_ALSA_UTILS_ALSAUCM + bool "alsaucm" + select BR2_PACKAGE_ALSA_LIB_UCM + +config BR2_PACKAGE_ALSA_UTILS_ALSATPLG + bool "alsatplg" + +config BR2_PACKAGE_ALSA_UTILS_AMIDI + bool "amidi" + select BR2_PACKAGE_ALSA_LIB_RAWMIDI + +config BR2_PACKAGE_ALSA_UTILS_AMIXER + bool "amixer" + select BR2_PACKAGE_ALSA_LIB_MIXER + +config BR2_PACKAGE_ALSA_UTILS_APLAY + bool "aplay/arecord" + select BR2_PACKAGE_ALSA_LIB_PCM + +config BR2_PACKAGE_ALSA_UTILS_APLAYMIDI + bool "aplaymidi" + select BR2_PACKAGE_ALSA_LIB_SEQ + +config BR2_PACKAGE_ALSA_UTILS_ARECORDMIDI + bool "arecordmidi" + select BR2_PACKAGE_ALSA_LIB_SEQ + +config BR2_PACKAGE_ALSA_UTILS_ASEQDUMP + bool "aseqdump" + select BR2_PACKAGE_ALSA_LIB_SEQ + +config BR2_PACKAGE_ALSA_UTILS_ASEQNET + bool "aseqnet" + select BR2_PACKAGE_ALSA_LIB_SEQ + +config BR2_PACKAGE_ALSA_UTILS_BAT + bool "bat" + help + ALSABAT (ALSA Basic Audio Tester) is a simple command-line + utility intended to help automate audio driver and sound + server testing with little human interaction. + + Note that analysis support in alsabat requires fftw single + precision. + +config BR2_PACKAGE_ALSA_UTILS_IECSET + bool "iecset" + select BR2_PACKAGE_ALSA_LIB_PCM + +config BR2_PACKAGE_ALSA_UTILS_SPEAKER_TEST + bool "speaker-test" + select BR2_PACKAGE_ALSA_LIB_PCM + +endif diff --git a/package/alsa-utils/alsa-utils.hash b/package/alsa-utils/alsa-utils.hash new file mode 100644 index 00000000..dda009c1 --- /dev/null +++ b/package/alsa-utils/alsa-utils.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 98ffc2d599de0577d423a48fa5f20a992ca0b82d812ed1f2e58ade49ac6da426 alsa-utils-1.2.4.tar.bz2 +sha256 231f7edcc7352d7734a96eef0b8030f77982678c516876fcb81e25b32d68564c COPYING diff --git a/package/alsa-utils/alsa-utils.mk b/package/alsa-utils/alsa-utils.mk new file mode 100644 index 00000000..2658c827 --- /dev/null +++ b/package/alsa-utils/alsa-utils.mk @@ -0,0 +1,102 @@ +################################################################################ +# +# alsa-utils +# +################################################################################ + +ALSA_UTILS_VERSION = 1.2.4 +ALSA_UTILS_SOURCE = alsa-utils-$(ALSA_UTILS_VERSION).tar.bz2 +ALSA_UTILS_SITE = https://www.alsa-project.org/files/pub/utils +ALSA_UTILS_LICENSE = GPL-2.0 +ALSA_UTILS_LICENSE_FILES = COPYING +ALSA_UTILS_INSTALL_STAGING = YES +ALSA_UTILS_DEPENDENCIES = host-pkgconf alsa-lib \ + $(if $(BR2_PACKAGE_NCURSES),ncurses) \ + $(if $(BR2_PACKAGE_LIBSAMPLERATE),libsamplerate) \ + $(TARGET_NLS_DEPENDENCIES) + +ifeq ($(BR2_PACKAGE_ALSA_UTILS_ALSACTL),y) +ALSA_UTILS_SELINUX_MODULES += alsa +endif + +ALSA_UTILS_CONF_ENV = \ + ac_cv_prog_ncurses5_config=$(STAGING_DIR)/usr/bin/$(NCURSES_CONFIG_SCRIPTS) \ + LIBS=$(TARGET_NLS_LIBS) + +ALSA_UTILS_CONF_OPTS = \ + --disable-xmlto \ + --disable-rst2man \ + --with-curses=$(if $(BR2_PACKAGE_NCURSES_WCHAR),ncursesw,ncurses) + +ifeq ($(BR2_PACKAGE_ALSA_UTILS_ALSALOOP),y) +ALSA_UTILS_CONF_OPTS += --enable-alsaloop +else +ALSA_UTILS_CONF_OPTS += --disable-alsaloop +endif + +ifneq ($(BR2_PACKAGE_ALSA_UTILS_ALSAMIXER),y) +ALSA_UTILS_CONF_OPTS += --disable-alsamixer +endif + +ifeq ($(BR2_PACKAGE_ALSA_UTILS_BAT),y) +ALSA_UTILS_CONF_OPTS += --enable-bat +# Analysis support requires fftw single precision +ALSA_UTILS_DEPENDENCIES += $(if $(BR2_PACKAGE_FFTW_SINGLE),fftw-single) +else +ALSA_UTILS_CONF_OPTS += --disable-bat +endif + +ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_ALSACONF) += usr/sbin/alsaconf +ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_ALSACTL) += usr/sbin/alsactl +ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_ALSALOOP) += usr/bin/alsaloop +ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_ALSAMIXER) += usr/bin/alsamixer +ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_ALSATPLG) += usr/bin/alsatplg +ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_AMIDI) += usr/bin/amidi +ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_AMIXER) += usr/bin/amixer +ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_APLAY) += usr/bin/aplay usr/bin/arecord +ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_BAT) += usr/bin/alsabat +ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_IECSET) += usr/bin/iecset +ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_ACONNECT) += usr/bin/aconnect +ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_ALSAUCM) += usr/bin/alsaucm +ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_APLAYMIDI) += usr/bin/aplaymidi +ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_ARECORDMIDI) += usr/bin/arecordmidi +ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_ASEQDUMP) += usr/bin/aseqdump +ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_ASEQNET) += usr/bin/aseqnet +ALSA_UTILS_TARGETS_$(BR2_PACKAGE_ALSA_UTILS_SPEAKER_TEST) += usr/bin/speaker-test + +define ALSA_UTILS_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/var/lib/alsa + for i in $(ALSA_UTILS_TARGETS_y); do \ + $(INSTALL) -D -m 755 $(STAGING_DIR)/$$i $(TARGET_DIR)/$$i || exit 1; \ + done + if [ -x "$(TARGET_DIR)/usr/bin/speaker-test" ]; then \ + mkdir -p $(TARGET_DIR)/usr/share/alsa/speaker-test; \ + mkdir -p $(TARGET_DIR)/usr/share/sounds/alsa; \ + cp -rdpf $(STAGING_DIR)/usr/share/alsa/speaker-test/* $(TARGET_DIR)/usr/share/alsa/speaker-test/; \ + cp -rdpf $(STAGING_DIR)/usr/share/sounds/alsa/* $(TARGET_DIR)/usr/share/sounds/alsa/; \ + fi + if [ -x "$(TARGET_DIR)/usr/sbin/alsactl" ]; then \ + mkdir -p $(TARGET_DIR)/usr/share/; \ + rm -rf $(TARGET_DIR)/usr/share/alsa/; \ + cp -rdpf $(STAGING_DIR)/usr/share/alsa/ $(TARGET_DIR)/usr/share/alsa/; \ + fi +endef + +ifeq ($(BR2_PACKAGE_ALSA_UTILS_ALSACTL)$(BR2_INIT_SYSTEMD),yy) +ALSA_UTILS_DEPENDENCIES += systemd +ALSA_UTILS_CONF_OPTS += --with-systemdsystemunitdir=/usr/lib/systemd/system +define ALSA_UTILS_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0644 $(@D)/alsactl/alsa-restore.service \ + $(TARGET_DIR)/usr/lib/systemd/system/alsa-restore.service + $(INSTALL) -D -m 0644 $(@D)/alsactl/alsa-state.service \ + $(TARGET_DIR)/usr/lib/systemd/system/alsa-state.service + $(INSTALL) -d -m 0755 $(TARGET_DIR)/usr/lib/systemd/system/alsa-restore.service.d + printf '[Install]\nWantedBy=multi-user.target\n' \ + >$(TARGET_DIR)/usr/lib/systemd/system/alsa-restore.service.d/buildroot-enable.conf + $(INSTALL) -d -m 0755 $(TARGET_DIR)/usr/lib/systemd/system/alsa-state.service.d + printf '[Install]\nWantedBy=multi-user.target\n' \ + >$(TARGET_DIR)/usr/lib/systemd/system/alsa-state.service.d/buildroot-enable.conf; +endef +endif + +$(eval $(autotools-package)) diff --git a/package/alsamixergui/0001-misc-fixes.patch b/package/alsamixergui/0001-misc-fixes.patch new file mode 100644 index 00000000..6b498dad --- /dev/null +++ b/package/alsamixergui/0001-misc-fixes.patch @@ -0,0 +1,40 @@ +--- a/configure.in ++++ b/configure.in +@@ -11,7 +11,10 @@ + AC_PROG_LN_S + + dnl Checks for libraries. +-AC_CHECK_LIB(fltk,numericsort,,AC_MSG_ERROR("missing fltk")) ++AC_CHECK_LIB(fltk,numericsort,, ++AC_CHECK_LIB(fltk,fl_numericsort,, ++AC_MSG_ERROR("missing fltk")) ++) + AM_PATH_ALSA(0.9.0) + + dnl Checks for header files. +--- a/src/alsamixer.cxx 2007-10-21 12:39:11.000000000 -0400 ++++ b/src/alsamixer.cxx 2007-10-21 12:49:10.000000000 -0400 +@@ -2081,8 +2081,8 @@ static void + mixer_signal_handler (int signal) + { + if (signal != SIGSEGV) +- mixer_abort (ERR_SIGNAL, sys_siglist[signal], 0); +- else ++ // mixer_abort (ERR_SIGNAL, sys_siglist[signal], 0); ++ //else + { + fprintf (stderr, "\nSegmentation fault.\n"); + _exit (11); +--- a/src/alsamixer.cxx 2006-01-16 12:41:54.000000000 -0600 ++++ b/src/alsamixer.cxx 2006-01-16 12:45:44.000000000 -0600 +@@ -653,8 +653,8 @@ + if (vleft >= 0 && vright >= 0) { + if (joined) { + #ifdef ALSAMIXER_GUI +- for (chn = snd_mixer_selem_channel_id_t(0); chn < SND_MIXER_SCHN_LAST; +- snd_mixer_selem_channel_id_t(int(chn)++)) ++ for (chn = snd_mixer_selem_channel_id_t(0); chn < SND_MIXER_SCHN_LAST; ++ snd_mixer_selem_channel_id_t(int(chn)+1)) + #else + for (chn = 0; chn < SND_MIXER_SCHN_LAST; chn++) + #endif diff --git a/package/alsamixergui/0002-configure-fix-detection-of-fltk-libs.patch b/package/alsamixergui/0002-configure-fix-detection-of-fltk-libs.patch new file mode 100644 index 00000000..cc72d33b --- /dev/null +++ b/package/alsamixergui/0002-configure-fix-detection-of-fltk-libs.patch @@ -0,0 +1,53 @@ +From c154195fa161575363280aac9e928b7225f0de9e Mon Sep 17 00:00:00 2001 +From: "Yann E. MORIN" +Date: Sun, 29 Dec 2019 17:42:13 +0100 +Subject: [PATCH] configure: fix detection of fltk libs + +Chaining calls to AC_CHECK_LIB one in the other, breaks the configure +script, because some internal functions (e.g. ac_fn_c_try_link) would +not be defined before they are needed, leading the build to fail as +thus: + + checking for snd_tplg_new in -latopology... ./configure: line 4630: + ac_fn_c_try_link: command not found + no + configure: error: No linkable libatopology was found. + +Using AC_CHECK_LIB() in sequence (i.e. one after the other) and +memorising the result is not trivial: AC_CHECK_LIB() implements a +ddefault action-if-found that append to LIBS, but not if the user +ptrovides their own action-if-found. + +Instead, AC_SEARH_LIBS() always append to LIBS, *and* run the +user-provided action. + +So, we switch to AC_SEARCH_LIBS() and memorise the result for each +test, to eventually test if ether worked. + +Signed-off-by: Yann E. MORIN +--- + configure.in | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/configure.in b/configure.in +index 9307cc2..55f6864 100644 +--- a/configure.in ++++ b/configure.in +@@ -11,10 +11,10 @@ AC_PROG_INSTALL + AC_PROG_LN_S + + dnl Checks for libraries. +-AC_CHECK_LIB(fltk,numericsort,, +-AC_CHECK_LIB(fltk,fl_numericsort,, +-AC_MSG_ERROR("missing fltk")) +-) ++has_fltk=false ++AC_SEARCH_LIBS(numericsort,fltk,has_fltk=true) ++AC_SEARCH_LIBS(fl_numericsort,fltk,has_fltk=true) ++AS_IF(test "${has_fltk}" = "false", AC_MSG_ERROR("missing fltk")) + AM_PATH_ALSA(0.9.0) + + dnl Checks for header files. +-- +2.20.1 + diff --git a/package/alsamixergui/Config.in b/package/alsamixergui/Config.in new file mode 100644 index 00000000..2016a28a --- /dev/null +++ b/package/alsamixergui/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_ALSAMIXERGUI + bool "alsamixergui" + depends on BR2_PACKAGE_XORG7 + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_MMU # fltk fork() + depends on BR2_TOOLCHAIN_HAS_THREADS # alsa-lib + select BR2_PACKAGE_FLTK + select BR2_PACKAGE_ALSA_LIB + select BR2_PACKAGE_ALSA_LIB_PCM + select BR2_PACKAGE_ALSA_LIB_MIXER + help + A nice GUI mixer for Alsa using fltk + + http://www.iua.upf.es/~mdeboer/projects/alsamixergui/ + +comment "alsamixergui needs a toolchain w/ C++, threads" + depends on BR2_PACKAGE_XORG7 && BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/alsamixergui/alsamixergui.hash b/package/alsamixergui/alsamixergui.hash new file mode 100644 index 00000000..85c9ffe7 --- /dev/null +++ b/package/alsamixergui/alsamixergui.hash @@ -0,0 +1,4 @@ +# From http://snapshot.debian.org/archive/debian/20141023T043132Z/pool/main/a/alsamixergui/alsamixergui_0.9.0rc2-1-9.dsc +md5 af942a41b81ba27e2e4d0a1e1ab0decb alsamixergui_0.9.0rc2-1.orig.tar.gz +# locally computed +sha256 ea617b76dcd0df74576686ca34c281f43bb9d844015cea91e3debc91538d2b1d debian/copyright diff --git a/package/alsamixergui/alsamixergui.mk b/package/alsamixergui/alsamixergui.mk new file mode 100644 index 00000000..8bf3f8e0 --- /dev/null +++ b/package/alsamixergui/alsamixergui.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# alsamixergui +# +################################################################################ + +ALSAMIXERGUI_VERSION = 0.9.0rc2-1 +ALSAMIXERGUI_SOURCE = alsamixergui_$(ALSAMIXERGUI_VERSION).orig.tar.gz +ALSAMIXERGUI_SITE = http://snapshot.debian.org/archive/debian/20141023T043132Z/pool/main/a/alsamixergui +ALSAMIXERGUI_LICENSE = GPL-2.0+ +ALSAMIXERGUI_LICENSE_FILES = debian/copyright +ALSAMIXERGUI_AUTORECONF = YES + +ALSAMIXERGUI_DEPENDENCIES = fltk alsa-lib + +$(eval $(autotools-package)) diff --git a/package/altera-stapl/Config.in b/package/altera-stapl/Config.in new file mode 100644 index 00000000..ff7d23f8 --- /dev/null +++ b/package/altera-stapl/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_ALTERA_STAPL + bool "altera-stapl" + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_8 # libgpiod + select BR2_PACKAGE_LIBGPIOD + help + Altera Jam STAPL Bytecode Player. + + https://github.com/kontron/altera-stapl diff --git a/package/altera-stapl/altera-stapl.hash b/package/altera-stapl/altera-stapl.hash new file mode 100644 index 00000000..c3af649c --- /dev/null +++ b/package/altera-stapl/altera-stapl.hash @@ -0,0 +1,2 @@ +sha256 a4d85a79790eab851399132fce4524979fe764d5297413b2445673e6a190bb42 altera-stapl-0.3.3.tar.gz +sha256 d8c320ffc0030d1b096ae4732b50d2b811cf95e9a9b7377c1127b2563e0a0388 COPYING diff --git a/package/altera-stapl/altera-stapl.mk b/package/altera-stapl/altera-stapl.mk new file mode 100644 index 00000000..afafbe2d --- /dev/null +++ b/package/altera-stapl/altera-stapl.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# altera-stapl +# +################################################################################ + +ALTERA_STAPL_VERSION = 0.3.3 +ALTERA_STAPL_SITE = $(call github,kontron,altera-stapl,$(ALTERA_STAPL_VERSION)) +ALTERA_STAPL_LICENSE = GPLv2+ +ALTERA_STAPL_LICENSE_FILES = COPYING +ALTERA_STAPL_DEPENDENCIES = libgpiod + +define ALTERA_STAPL_BUILD_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) all +endef + +define ALTERA_STAPL_INSTALL_TARGET_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/alure/Config.in b/package/alure/Config.in new file mode 100644 index 00000000..e0064acc --- /dev/null +++ b/package/alure/Config.in @@ -0,0 +1,61 @@ +config BR2_PACKAGE_ALURE + bool "alure" + depends on BR2_PACKAGE_OPENAL_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C++11 + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # openal + depends on BR2_USE_WCHAR # use wchar_t + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # std::shared_future + select BR2_PACKAGE_OPENAL + help + Alure is a C++ 3D audio API. It uses OpenAL for audio + rendering, and provides common higher-level features such as + file loading and decoding, buffer caching, background + streaming, and source management for virtually unlimited + sound source handles. + + https://kcat.strangesoft.net/alure.html + +if BR2_PACKAGE_ALURE + +config BR2_PACKAGE_ALURE_FLAC_DECODER + bool "flac decoder" + help + Enables the built-in FLAC decoder. + +config BR2_PACKAGE_ALURE_MINIMP3_DECODER + bool "minimp3 decoder" + help + Enables the built-in minimp3 decoder. + +config BR2_PACKAGE_ALURE_OPUS_DECODER + bool "opus decoder" + select BR2_PACKAGE_LIBOGG + select BR2_PACKAGE_OPUS + help + Enables the built-in libopusfile decoder. + +config BR2_PACKAGE_ALURE_SNDFILE_DECODER + bool "sndfile decoder" + select BR2_PACKAGE_LIBSNDFILE + help + Enables the built-in libsndfile decoder. + +config BR2_PACKAGE_ALURE_VORBIS_DECODER + bool "vorbis decoder" + select BR2_PACKAGE_LIBOGG + select BR2_PACKAGE_LIBVORBIS + help + Enables the built-in libvorbis decoder. + +endif + +comment "alure needs a toolchain w/ C++, gcc >= 4.9, NPTL, wchar" + depends on BR2_PACKAGE_OPENAL_ARCH_SUPPORTS + depends on !BR2_INSTALL_LIBSTDCPP \ + || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 \ + || !BR2_TOOLCHAIN_HAS_THREADS_NPTL || !BR2_USE_WCHAR + +comment "alure needs a toolchain not affected by GCC bug 64735" + depends on BR2_PACKAGE_OPENAL_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 diff --git a/package/alure/alure.hash b/package/alure/alure.hash new file mode 100644 index 00000000..d84af0a3 --- /dev/null +++ b/package/alure/alure.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 9b808e5b5a54d156348221dc86704c7831115047d5238691e6088f8c4814b2ca alure-14beed2a86d5a36030e907b21c46614d505f07cd.tar.gz +sha256 7331ddc67daaf1a283c81e8dc17bac8dc40f54ed3fab3d3964616f4bd502a0a3 LICENSE diff --git a/package/alure/alure.mk b/package/alure/alure.mk new file mode 100644 index 00000000..f0eca8a2 --- /dev/null +++ b/package/alure/alure.mk @@ -0,0 +1,65 @@ +################################################################################ +# +# alure +# +################################################################################ + +ALURE_VERSION = 14beed2a86d5a36030e907b21c46614d505f07cd +ALURE_SITE = $(call github,kcat,alure,$(ALURE_VERSION)) +ALURE_LICENSE = Zlib, Public Domain (src/decoders/dr_flac.h) +ALURE_LICENSE_FILES = LICENSE +ALURE_INSTALL_STAGING = YES + +ALURE_DEPENDENCIES = openal + +# Disabling alure examples remove the dependecies on physfs and dump libraries. +# Enable at least one built-in decoder (wave). +ALURE_CONF_OPTS = -DALURE_INSTALL=ON \ + -DALURE_BUILD_EXAMPLES=OFF \ + -DALURE_ENABLE_WAVE=ON + +ifeq ($(BR2_PACKAGE_ALURE_FLAC_DECODER),y) +ALURE_CONF_OPTS += -DALURE_ENABLE_FLAC=ON +else +ALURE_CONF_OPTS += -DALURE_ENABLE_FLAC=OFF +endif + +ifeq ($(BR2_PACKAGE_ALURE_MINIMP3_DECODER),y) +ALURE_CONF_OPTS += -DALURE_ENABLE_MINIMP3=ON +else +ALURE_CONF_OPTS += -DALURE_ENABLE_MINIMP3=OFF +endif + +ifeq ($(BR2_PACKAGE_ALURE_OPUS_DECODER),y) +ALURE_CONF_OPTS += -DALURE_ENABLE_OPUS=ON +ALURE_DEPENDENCIES += libogg opus +else +ALURE_CONF_OPTS += -DALURE_ENABLE_OPUS=OFF +endif + +ifeq ($(BR2_PACKAGE_ALURE_SNDFILE_DECODER),y) +ALURE_CONF_OPTS += -DALURE_ENABLE_SNDFILE=ON +ALURE_DEPENDENCIES += libsndfile +else +ALURE_CONF_OPTS += -DALURE_ENABLE_SNDFILE=OFF +endif + +ifeq ($(BR2_PACKAGE_ALURE_VORBIS_DECODER),y) +ALURE_CONF_OPTS += -DALURE_ENABLE_VORBIS=ON +ALURE_DEPENDENCIES += libogg libvorbis +else +ALURE_CONF_OPTS += -DALURE_ENABLE_VORBIS=OFF +endif + +ifeq ($(BR2_STATIC_LIBS),y) +ALURE_CONF_OPTS += -DALURE_BUILD_SHARED=OFF \ + -DALURE_BUILD_STATIC=ON +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +ALURE_CONF_OPTS += -DALURE_BUILD_SHARED=ON \ + -DALURE_BUILD_STATIC=ON +else +ALURE_CONF_OPTS += -DALURE_BUILD_SHARED=ON \ + -DALURE_BUILD_STATIC=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/am335x-pru-package/0001-install-does-not-build.patch b/package/am335x-pru-package/0001-install-does-not-build.patch new file mode 100644 index 00000000..e2f29284 --- /dev/null +++ b/package/am335x-pru-package/0001-install-does-not-build.patch @@ -0,0 +1,23 @@ +Makefile: do not force the release build on install + +If we did build any of the other targets, and are just interested +in those and not the release one, we still want to use the 'install' +rule, but not build (and install) the release libraries. + +So, remove the dependency on the 'release' target from the 'install' +rule. + +Signed-off-by: "Yann E. MORIN" + +diff -durN am335x-pru-package-506e074859891a2b350eb4f5fcb451c4961410ea.orig/pru_sw/app_loader/interface/Makefile am335x-pru-package-506e074859891a2b350eb4f5fcb451c4961410ea/pru_sw/app_loader/interface/Makefile +--- am335x-pru-package-506e074859891a2b350eb4f5fcb451c4961410ea.orig/pru_sw/app_loader/interface/Makefile 2014-08-18 00:24:36.000000000 +0200 ++++ am335x-pru-package-506e074859891a2b350eb4f5fcb451c4961410ea/pru_sw/app_loader/interface/Makefile 2014-10-12 11:39:17.144682697 +0200 +@@ -38,7 +38,7 @@ + + all: debug release sodebug sorelease + +-install: release ++install: + install -m 0755 -d $(DESTDIR)$(PREFIX)/lib + install -m 0755 -d $(DESTDIR)$(PREFIX)/include + install -m 0644 $(LIBDIR)/* $(DESTDIR)$(PREFIX)/lib diff --git a/package/am335x-pru-package/Config.in b/package/am335x-pru-package/Config.in new file mode 100644 index 00000000..66d77733 --- /dev/null +++ b/package/am335x-pru-package/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_AM335X_PRU_PACKAGE + bool "am335x-pru-package" + depends on BR2_arm # only relevant for TI am335x + help + TI AM335X PRU program loader + + https://github.com/beagleboard/am335x_pru_package diff --git a/package/am335x-pru-package/am335x-pru-package.hash b/package/am335x-pru-package/am335x-pru-package.hash new file mode 100644 index 00000000..ad386fe0 --- /dev/null +++ b/package/am335x-pru-package/am335x-pru-package.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 2a902f825ccc1885c5dccd83e1ccee104aa30e601c9964a24f49459f76f674b9 am335x-pru-package-5f374ad57cc195f28bf5e585c3d446aba6ee7096.tar.gz +sha256 f0fcdf9b2090896389eb4b784f23be96d5544c5ce5282d84f82ae9a8e8331beb pru_sw/utils/LICENCE.txt diff --git a/package/am335x-pru-package/am335x-pru-package.mk b/package/am335x-pru-package/am335x-pru-package.mk new file mode 100644 index 00000000..24a5df48 --- /dev/null +++ b/package/am335x-pru-package/am335x-pru-package.mk @@ -0,0 +1,74 @@ +################################################################################ +# +# am335x-pru-package +# +################################################################################ + +AM335X_PRU_PACKAGE_VERSION = 5f374ad57cc195f28bf5e585c3d446aba6ee7096 +AM335X_PRU_PACKAGE_SITE = $(call github,beagleboard,am335x_pru_package,$(AM335X_PRU_PACKAGE_VERSION)) +AM335X_PRU_PACKAGE_LICENSE = BSD-3-Clause +AM335X_PRU_PACKAGE_LICENSE_FILES = pru_sw/utils/LICENCE.txt +AM335X_PRU_PACKAGE_DEPENDENCIES = host-am335x-pru-package +AM335X_PRU_PACKAGE_INSTALL_STAGING = YES + +# The default 'all' rule builds everything, when we just need the library +ifeq ($(BR2_ENABLE_DEBUG),y) +AM335X_PRU_PACKAGE_MAKE_TARGET = debug $(if $(BR2_STATIC_LIBS),,sodebug) +else +AM335X_PRU_PACKAGE_MAKE_TARGET = release $(if $(BR2_STATIC_LIBS),,sorelease) +endif + +define AM335X_PRU_PACKAGE_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) CROSS_COMPILE="$(TARGET_CROSS)" \ + -C $(@D)/pru_sw/app_loader/interface $(AM335X_PRU_PACKAGE_MAKE_TARGET) +endef + +# 'install' installs whatever was built, and our patch removes the dependency +# on the release build, so we can use it to install whatever we built above. +define AM335X_PRU_PACKAGE_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) DESTDIR="$(STAGING_DIR)" PREFIX="/usr" \ + -C $(@D)/pru_sw/app_loader/interface install +endef + +define AM335X_PRU_PACKAGE_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) DESTDIR="$(TARGET_DIR)" PREFIX="/usr" \ + -C $(@D)/pru_sw/app_loader/interface install +endef + +# The debug libraries are named differently than the release ones, +# so we must provide a symlink to still be able to link with them. +ifeq ($(BR2_ENABLE_DEBUG),y) + +define AM335X_PRU_PACKAGE_LN_DEBUG_STAGING_STATIC + ln -sf libprussdrvd.a $(STAGING_DIR)/usr/lib/libprussdrv.a +endef +AM335X_PRU_PACKAGE_POST_INSTALL_STAGING_HOOKS += AM335X_PRU_PACKAGE_LN_DEBUG_STAGING_STATIC + +ifeq ($(BR2_STATIC_LIBS),) + +define AM335X_PRU_PACKAGE_LN_DEBUG_STAGING_SHARED + ln -sf libprussdrvd.so $(STAGING_DIR)/usr/lib/libprussdrv.so +endef +AM335X_PRU_PACKAGE_POST_INSTALL_STAGING_HOOKS += AM335X_PRU_PACKAGE_LN_DEBUG_STAGING_SHARED + +define AM335X_PRU_PACKAGE_LN_DEBUG_TARGET + ln -sf libprussdrvd.so $(TARGET_DIR)/usr/lib/libprussdrv.so +endef +AM335X_PRU_PACKAGE_POST_INSTALL_TARGET_HOOKS += AM335X_PRU_PACKAGE_LN_DEBUG_TARGET + +endif # !STATIC + +endif # DEBUG + +define HOST_AM335X_PRU_PACKAGE_BUILD_CMDS + cd $(@D)/pru_sw/utils/pasm_source; \ + $(HOSTCC) -Wall -D_UNIX_ pasm.c pasmpp.c pasmexp.c pasmop.c \ + pasmdot.c pasmstruct.c pasmmacro.c path_utils.c -o ../pasm +endef + +define HOST_AM335X_PRU_PACKAGE_INSTALL_CMDS + $(INSTALL) -m 0755 -D $(@D)/pru_sw/utils/pasm $(HOST_DIR)/bin/pasm +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/am33x-cm3/0001-fix-makefile.patch b/package/am33x-cm3/0001-fix-makefile.patch new file mode 100644 index 00000000..f3cdb5e2 --- /dev/null +++ b/package/am33x-cm3/0001-fix-makefile.patch @@ -0,0 +1,30 @@ +Enforce correct -march option + +Buildroot uses a normal ARM compiler to build the AM33X CM3 firmware +(which runs on a Cortex-M3 processor), but Buildroot will have a +default -march value that doesn't necessarily match the one needed for +Cortex-M3, leading to build failures (gcc complains that the +-mcpu=cortex-m3 option being passed is not compatible with the +selected -march). + +Fix this by explicitly indicating -march=armv7-m. + +Signed-off-by: Thomas Petazzoni + +Updated the patch to the latest version of the Makefile + +Signed-off-by: Anders Darander + +Index: b/Makefile +=================================================================== +--- a/Makefile ++++ b/Makefile +@@ -13,7 +13,7 @@ SRCDIR = src + BINDIR = bin + + INCLUDES = $(SRCDIR)/include +-CFLAGS =-mcpu=cortex-m3 -mthumb -nostdlib -Wall -Wundef \ ++CFLAGS =-march=armv7-m -mcpu=cortex-m3 -mthumb -nostdlib -Wall -Wundef \ + -Werror-implicit-function-declaration -Wstrict-prototypes \ + -Wdeclaration-after-statement -fno-delete-null-pointer-checks \ + -Wempty-body -fno-strict-overflow -g -I$(INCLUDES) -O2 diff --git a/package/am33x-cm3/0002-Makefile-unconditionally-disable-SSP.patch b/package/am33x-cm3/0002-Makefile-unconditionally-disable-SSP.patch new file mode 100644 index 00000000..ed333bfe --- /dev/null +++ b/package/am33x-cm3/0002-Makefile-unconditionally-disable-SSP.patch @@ -0,0 +1,35 @@ +From 6c3b05b74ccd49d8ba246bfef0c2e549b9f2bf7b Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Tue, 29 Oct 2019 16:14:18 +0100 +Subject: [PATCH] Makefile: unconditionally disable SSP + +Though -nostdlib is passed in $(CFLAGS), -fno-stack-protector must also be +passed to avoid linking errors related to undefined references to +'__stack_chk_guard' and '__stack_chk_fail' if toolchain enforces +-fstack-protector. + +Fixes: + - http://autobuild.buildroot.net/results/3a3a21f3c35ea025e9b93e09c2454aed0ad31034 + +Signed-off-by: Fabrice Fontaine +--- + Makefile | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index c3ec071..5226006 100644 +--- a/Makefile ++++ b/Makefile +@@ -16,7 +16,8 @@ INCLUDES = $(SRCDIR)/include + CFLAGS =-march=armv7-m -mcpu=cortex-m3 -mthumb -nostdlib -Wall -Wundef \ + -Werror-implicit-function-declaration -Wstrict-prototypes \ + -Wdeclaration-after-statement -fno-delete-null-pointer-checks \ +- -Wempty-body -fno-strict-overflow -g -I$(INCLUDES) -O2 ++ -Wempty-body -fno-strict-overflow -fno-stack-protector \ ++ -g -I$(INCLUDES) -O2 + LDFLAGS =-nostartfiles -fno-exceptions -Tfirmware.ld + + EXECUTABLE=am335x-pm-firmware.elf +-- +2.23.0 + diff --git a/package/am33x-cm3/0003-Makefile-unconditionally-disable-PIE.patch b/package/am33x-cm3/0003-Makefile-unconditionally-disable-PIE.patch new file mode 100644 index 00000000..6be15793 --- /dev/null +++ b/package/am33x-cm3/0003-Makefile-unconditionally-disable-PIE.patch @@ -0,0 +1,33 @@ +From 0e8c3c4851ce64268a8ae1810ef72594251d917d Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 10 Nov 2019 21:57:12 +0100 +Subject: [PATCH] Makefile: unconditionally disable PIE + +Though -nostdlib is passed in $(CFLAGS), -fno-pie must also be passed to +avoid linking errors related to overlapping sections if toolchain +enforces PIE. + +Fixes: + - http://autobuild.buildroot.org/results/418a40b995e91bc66e692dfbc4b0521db3fa5fbb + +Signed-off-by: Fabrice Fontaine +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index 5226006..fe3d844 100644 +--- a/Makefile ++++ b/Makefile +@@ -17,7 +17,7 @@ CFLAGS =-march=armv7-m -mcpu=cortex-m3 -mthumb -nostdlib -Wall -Wundef \ + -Werror-implicit-function-declaration -Wstrict-prototypes \ + -Wdeclaration-after-statement -fno-delete-null-pointer-checks \ + -Wempty-body -fno-strict-overflow -fno-stack-protector \ +- -g -I$(INCLUDES) -O2 ++ -fno-pie -g -I$(INCLUDES) -O2 + LDFLAGS =-nostartfiles -fno-exceptions -Tfirmware.ld + + EXECUTABLE=am335x-pm-firmware.elf +-- +2.23.0 + diff --git a/package/am33x-cm3/0004-Makefile-add-fno-builtin.patch b/package/am33x-cm3/0004-Makefile-add-fno-builtin.patch new file mode 100644 index 00000000..7478bd45 --- /dev/null +++ b/package/am33x-cm3/0004-Makefile-add-fno-builtin.patch @@ -0,0 +1,41 @@ +From 25fc567ba8a0cd199e48bfa82863247d953784ea Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 30 Aug 2020 20:59:29 +0200 +Subject: [PATCH] Makefile: add -fno-builtin + +Build with gcc 10 fails on: + +/srv/storage/autobuild/run/instance-2/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: src/foundation/startup.o: in function `reset_handler': +/srv/storage/autobuild/run/instance-2/output-1/build/am33x-cm3-11107db2f1e9e58ee75d4fe9cc38423c9a6e4365/src/foundation/startup.c:177: undefined reference to `memcpy' + +This is due to the fact that gcc 10 replaces the following statement by +a memcpy call: + +*puldest++ = *pulsrc++; + +To fix this build failure, add -fno-builtin + +Fixes: + - http://autobuild.buildroot.org/results/a991e6efa012df518ff1bb35017ad2c96c8feedc + +Signed-off-by: Fabrice Fontaine +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index fe3d844..fa24d4b 100644 +--- a/Makefile ++++ b/Makefile +@@ -17,7 +17,7 @@ CFLAGS =-march=armv7-m -mcpu=cortex-m3 -mthumb -nostdlib -Wall -Wundef \ + -Werror-implicit-function-declaration -Wstrict-prototypes \ + -Wdeclaration-after-statement -fno-delete-null-pointer-checks \ + -Wempty-body -fno-strict-overflow -fno-stack-protector \ +- -fno-pie -g -I$(INCLUDES) -O2 ++ -fno-pie -fno-builtin -g -I$(INCLUDES) -O2 + LDFLAGS =-nostartfiles -fno-exceptions -Tfirmware.ld + + EXECUTABLE=am335x-pm-firmware.elf +-- +2.28.0 + diff --git a/package/am33x-cm3/Config.in b/package/am33x-cm3/Config.in new file mode 100644 index 00000000..d33dfaa6 --- /dev/null +++ b/package/am33x-cm3/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_AM33X_CM3 + bool "am33x-cm3" + depends on BR2_arm # only relevant for TI am335x + depends on BR2_BINFMT_ELF # assumes the compiler builds ELF file + help + Cortex-M3 binary blob for suspend-resume on am335x + + http://arago-project.org/git/projects/am33x-cm3.git diff --git a/package/am33x-cm3/S93-am335x-pm-firmware-load b/package/am33x-cm3/S93-am335x-pm-firmware-load new file mode 100644 index 00000000..56c17b33 --- /dev/null +++ b/package/am33x-cm3/S93-am335x-pm-firmware-load @@ -0,0 +1,6 @@ +#!/bin/sh + +# Load the PM CM3 firmware +echo 1 > /sys/devices/ocp.2/44d00000.wkup_m3/firmware/am335x-pm-firmware.bin/loading +cat /lib/firmware/am335x-pm-firmware.bin > /sys/devices/ocp.2/44d00000.wkup_m3/firmware/am335x-pm-firmware.bin/data +echo 0 > /sys/devices/ocp.2/44d00000.wkup_m3/firmware/am335x-pm-firmware.bin/loading diff --git a/package/am33x-cm3/am33x-cm3.hash b/package/am33x-cm3/am33x-cm3.hash new file mode 100644 index 00000000..2210e8ac --- /dev/null +++ b/package/am33x-cm3/am33x-cm3.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 c0b11d7ed2300172354f2948e858ddb5cae19d084bd1ab6d48cfa7b6bfa13261 am33x-cm3-11107db2f1e9e58ee75d4fe9cc38423c9a6e4365-br1.tar.gz +sha256 e136e6949a1d3ca144374375af8b9387faa11d2eee7debff8cf22ca8fe7bf7e9 License.txt diff --git a/package/am33x-cm3/am33x-cm3.mk b/package/am33x-cm3/am33x-cm3.mk new file mode 100644 index 00000000..629a8323 --- /dev/null +++ b/package/am33x-cm3/am33x-cm3.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# am33x-cm3 +# +################################################################################ + +# This should correpsond to v05.00.00.02 +AM33X_CM3_VERSION = 11107db2f1e9e58ee75d4fe9cc38423c9a6e4365 +AM33X_CM3_SITE = http://arago-project.org/git/projects/am33x-cm3.git +AM33X_CM3_SITE_METHOD = git +AM33X_CM3_LICENSE = TI Publicly Available Software License +AM33X_CM3_LICENSE_FILES = License.txt + +# The build command below will use the standard cross-compiler (normally +# build for Cortex-A8, to build the FW for the Cortex-M3. +define AM33X_CM3_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) CC="$(TARGET_CC)" CROSS_COMPILE="$(TARGET_CROSS)" -C $(@D) all +endef + +# Not all of the firmware files are used +define AM33X_CM3_INSTALL_TARGET_CMDS + $(INSTALL) -m 0644 -D $(@D)/bin/am335x-pm-firmware.bin \ + $(TARGET_DIR)/lib/firmware/am335x-pm-firmware.bin +endef + +define AM33X_CM3_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/am33x-cm3/S93-am335x-pm-firmware-load \ + $(TARGET_DIR)/etc/init.d/S93-am335x-pm-firmware-load +endef + +$(eval $(generic-package)) diff --git a/package/android-tools/0001-Fix-makefiles-for-out-of-tree-build.patch b/package/android-tools/0001-Fix-makefiles-for-out-of-tree-build.patch new file mode 100644 index 00000000..af072362 --- /dev/null +++ b/package/android-tools/0001-Fix-makefiles-for-out-of-tree-build.patch @@ -0,0 +1,162 @@ +[PATCH] Fix makefiles for out-of-tree build + +Signed-off-by: Gary Bisson +--- + debian/makefiles/adb.mk | 10 +++++----- + debian/makefiles/adbd.mk | 33 ++++++++++++++++----------------- + debian/makefiles/fastboot.mk | 17 +++++++++-------- + 3 files changed, 30 insertions(+), 30 deletions(-) + +diff --git a/debian/makefiles/adb.mk b/debian/makefiles/adb.mk +index d9d4feb..654b9f1 100644 +--- a/debian/makefiles/adb.mk ++++ b/debian/makefiles/adb.mk +@@ -1,5 +1,6 @@ + # Makefile for adb; from https://heiher.info/2227.html + ++VPATH+= $(SRCDIR)/core/adb + SRCS+= adb.c + SRCS+= adb_client.c + SRCS+= adb_auth_host.c +@@ -17,7 +18,7 @@ SRCS+= usb_linux.c + SRCS+= usb_vendors.c + SRCS+= utils.c + +-VPATH+= ../libcutils ++VPATH+= $(SRCDIR)/core/libcutils + SRCS+= abort_socket.c + SRCS+= socket_inaddr_any_server.c + SRCS+= socket_local_client.c +@@ -28,7 +29,7 @@ SRCS+= socket_network_client.c + SRCS+= list.c + SRCS+= load_file.c + +-VPATH+= ../libzipfile ++VPATH+= $(SRCDIR)/core/libzipfile + SRCS+= centraldir.c + SRCS+= zipfile.c + +@@ -37,9 +38,8 @@ CPPFLAGS+= -DADB_HOST=1 + CPPFLAGS+= -DHAVE_FORKEXEC=1 + CPPFLAGS+= -DHAVE_SYMLINKS + CPPFLAGS+= -DHAVE_TERMIO_H +-CPPFLAGS+= -I. +-CPPFLAGS+= -I../include +-CPPFLAGS+= -I../../../external/zlib ++CPPFLAGS+= -I$(SRCDIR)/core/adb ++CPPFLAGS+= -I$(SRCDIR)/core/include + + LIBS+= -lc -lpthread -lz -lcrypto + +diff --git a/debian/makefiles/adbd.mk b/debian/makefiles/adbd.mk +index 94d3a90..49dab8c 100644 +--- a/debian/makefiles/adbd.mk ++++ b/debian/makefiles/adbd.mk +@@ -1,18 +1,6 @@ + # Makefile for adbd + +-VPATH+= ../libcutils +-SRCS+= abort_socket.c +-SRCS+= socket_inaddr_any_server.c +-SRCS+= socket_local_client.c +-SRCS+= socket_local_server.c +-SRCS+= socket_loopback_client.c +-SRCS+= socket_loopback_server.c +-SRCS+= socket_network_client.c +-SRCS+= list.c +-SRCS+= load_file.c +-SRCS+= android_reboot.c +- +-#VPATH+= ../adb ++VPATH+= $(SRCDIR)/core/adbd + SRCS+= adb.c + SRCS+= backup_service.c + SRCS+= fdevent.c +@@ -31,7 +19,19 @@ SRCS+= log_service.c + SRCS+= utils.c + SRCS+= base64.c + +-VPATH+= ../libzipfile ++VPATH+= $(SRCDIR)/core/libcutils ++SRCS+= abort_socket.c ++SRCS+= socket_inaddr_any_server.c ++SRCS+= socket_local_client.c ++SRCS+= socket_local_server.c ++SRCS+= socket_loopback_client.c ++SRCS+= socket_loopback_server.c ++SRCS+= socket_network_client.c ++SRCS+= list.c ++SRCS+= load_file.c ++SRCS+= android_reboot.c ++ ++VPATH+= $(SRCDIR)/core/libzipfile + SRCS+= centraldir.c + SRCS+= zipfile.c + +@@ -40,10 +40,9 @@ CPPFLAGS+= -O2 -g -Wall -Wno-unused-parameter + CPPFLAGS+= -DADB_HOST=0 -DHAVE_FORKEXEC=1 -D_XOPEN_SOURCE -D_GNU_SOURCE -DALLOW_ADBD_ROOT=1 + CPPFLAGS+= -DHAVE_SYMLINKS -DBOARD_ALWAYS_INSECURE + CPPFLAGS+= -DHAVE_TERMIO_H +-CPPFLAGS+= -I. +-CPPFLAGS+= -I../include +-CPPFLAGS+= -I../../../external/zlib + CPPFLAGS+= `pkg-config --cflags glib-2.0 gio-2.0` ++CPPFLAGS+= -I$(SRCDIR)/core/adbd ++CPPFLAGS+= -I$(SRCDIR)/core/include + + LIBS+= -lc -lpthread -lz -lcrypto -lcrypt `pkg-config --libs glib-2.0 gio-2.0` + +diff --git a/debian/makefiles/fastboot.mk b/debian/makefiles/fastboot.mk +index 9e8b751..94a069b 100644 +--- a/debian/makefiles/fastboot.mk ++++ b/debian/makefiles/fastboot.mk +@@ -1,5 +1,6 @@ + # Makefile for fastboot; from https://heiher.info/2227.html + ++VPATH+= $(SRCDIR)/core/fastboot + SRCS+= bootimg.c + SRCS+= engine.c + SRCS+= fastboot.c +@@ -7,11 +8,11 @@ SRCS+= protocol.c + SRCS+= usb_linux.c + SRCS+= util_linux.c + +-VPATH+= ../libzipfile ++VPATH+= $(SRCDIR)/core/libzipfile + SRCS+= centraldir.c + SRCS+= zipfile.c + +-VPATH+= ../libsparse ++VPATH+= $(SRCDIR)/core/libsparse + SRCS+= backed_block.c + SRCS+= sparse_crc32.c + SRCS+= sparse.c +@@ -19,7 +20,7 @@ SRCS+= sparse_read.c + SRCS+= sparse_err.c + SRCS+= output_file.c + +-VPATH+= ../../extras/ext4_utils/ ++VPATH+= $(SRCDIR)/extras/ext4_utils/ + SRCS+= make_ext4fs.c + SRCS+= crc16.c + SRCS+= ext4_utils.c +@@ -31,11 +32,11 @@ SRCS+= extent.c + SRCS+= wipe.c + SRCS+= sha1.c + +-CPPFLAGS+= -I. +-CPPFLAGS+= -I../include +-CPPFLAGS+= -I../mkbootimg +-CPPFLAGS+= -I../../extras/ext4_utils/ +-CPPFLAGS+= -I../libsparse/include/ ++CPPFLAGS+= -I$(SRCDIR)/core/fastboot ++CPPFLAGS+= -I$(SRCDIR)/core/include ++CPPFLAGS+= -I$(SRCDIR)/core/mkbootimg ++CPPFLAGS+= -I$(SRCDIR)/extras/ext4_utils/ ++CPPFLAGS+= -I$(SRCDIR)/core/libsparse/include/ + + LIBS+= -lz -lselinux + +-- +2.5.1 + diff --git a/package/android-tools/0002-Fix-adbd-for-non-Ubuntu-systems.patch b/package/android-tools/0002-Fix-adbd-for-non-Ubuntu-systems.patch new file mode 100644 index 00000000..35f6c8a3 --- /dev/null +++ b/package/android-tools/0002-Fix-adbd-for-non-Ubuntu-systems.patch @@ -0,0 +1,264 @@ +[PATCH] Fix adbd for non-Ubuntu systems + +Remove glib/dbus dependencies and partially restore services.c to be +closer to the original source code in order to run on systems without +sudo. + +Signed-off-by: Gary Bisson +--- + core/adbd/adb.c | 1 - + core/adbd/services.c | 160 ++++------------------------------------------- + debian/makefiles/adbd.mk | 4 +- + 3 files changed, 14 insertions(+), 151 deletions(-) + +diff --git a/core/adbd/adb.c b/core/adbd/adb.c +index d90e6b8..7fe6445 100644 +--- a/core/adbd/adb.c ++++ b/core/adbd/adb.c +@@ -1165,7 +1165,6 @@ void build_local_name(char* target_str, size_t target_size, int server_port) + + #if !ADB_HOST + static int should_drop_privileges() { +- return 1; + #ifndef ALLOW_ADBD_ROOT + return 1; + #else /* ALLOW_ADBD_ROOT */ +diff --git a/core/adbd/services.c b/core/adbd/services.c +index 05bd0d0..5adcefe 100644 +--- a/core/adbd/services.c ++++ b/core/adbd/services.c +@@ -20,15 +20,6 @@ + #include + #include + #include +-#include +-#include +- +-#define UNITY_SERVICE "com.canonical.UnityGreeter" +-#define GREETER_OBJ "/" +-#define GREETER_INTERFACE "com.canonical.UnityGreeter" +-#define PROPERTIES_INTERFACE "org.freedesktop.DBus.Properties" +-#define ACTIVE_PROPERTY "IsActive" +-#define UNLOCK_PATH "/userdata/.adb_onlock" + + #include "sysdeps.h" + +@@ -268,11 +259,11 @@ static int create_service_thread(void (*func)(int, void *), void *cookie) + } + + #if !ADB_HOST +-static int create_subprocess(const char *cmd, const char *arg0, const char *arg1, const char *arg2, const char *arg3, const char *arg4, pid_t *pid) ++static int create_subprocess(const char *cmd, const char *arg0, const char *arg1, pid_t *pid) + { + #ifdef HAVE_WIN32_PROC +- D("create_subprocess(cmd=%s, arg0=%s, arg1=%s, arg2=%s, arg3=%, arg4=%ss)\n", cmd, arg0, arg1, arg2, arg3, arg4); +- fprintf(stderr, "error: create_subprocess not implemented on Win32 (%s %s %s %s %s %s)\n", cmd, arg0, arg1, arg2, arg3, arg4); ++ D("create_subprocess(cmd=%s, arg0=%s, arg1=%s)\n", cmd, arg0, arg1); ++ fprintf(stderr, "error: create_subprocess not implemented on Win32 (%s %s %s)\n", cmd, arg0, arg1); + return -1; + #else /* !HAVE_WIN32_PROC */ + char *devname; +@@ -327,7 +318,7 @@ static int create_subprocess(const char *cmd, const char *arg0, const char *arg1 + } else { + D("adb: unable to open %s\n", text); + } +- execl(cmd, cmd, arg0, arg1, arg2, arg3, arg4, NULL); ++ execl(cmd, cmd, arg0, arg1, NULL); + fprintf(stderr, "- exec '%s' failed: %s (%d) -\n", + cmd, strerror(errno), errno); + exit(-1); +@@ -342,7 +333,7 @@ static int create_subprocess(const char *cmd, const char *arg0, const char *arg1 + } + #endif /* !ABD_HOST */ + +-#if ADB_HOST ++#if ADB_HOST || ADBD_NON_ANDROID + #define SHELL_COMMAND "/bin/sh" + #else + #define SHELL_COMMAND "/system/bin/sh" +@@ -380,139 +371,16 @@ static void subproc_waiter_service(int fd, void *cookie) + } + } + +-int is_phone_locked() { +- GError *error = NULL; +- GVariant *variant = NULL; +- GDBusConnection *connection = NULL; +- +- if (g_file_test(UNLOCK_PATH, G_FILE_TEST_EXISTS)) { +- D("unlock path present."); +- return 0; +- } +- +- // check if the environment variable is present, if not we grab it from +- // the phablet user +- if (g_getenv("DBUS_SESSION_BUS_ADDRESS") == NULL) { +- D("DBUS_SESSION_BUS_ADDRESS missing.\n"); +- struct passwd *pw = getpwuid(AID_SHELL); +- char user_id[15]; +- gchar *path = NULL; +- gchar *contents = NULL; +- gchar *session_path = NULL; +- +- snprintf(user_id, sizeof user_id, "%d", pw->pw_uid); +- +- path = g_build_filename("/run", "user", user_id, "dbus-session", NULL); +- +- g_file_get_contents(path, &contents, NULL, &error); +- session_path = g_strstrip(g_strsplit(contents, "DBUS_SESSION_BUS_ADDRESS=", -1)[1]); +- D("Session bus is %s\n", session_path); +- +- // path is not longer used +- g_free(path); +- +- if (error != NULL) { +- g_clear_error(&error); +- D("Couldn't set session bus\n"); +- return 1; +- } +- +- g_setenv("DBUS_SESSION_BUS_ADDRESS", session_path, TRUE); +- g_free(contents); +- } +- +- // set the uid to be able to connect to the phablet user session bus +- setuid(AID_SHELL); +- connection = g_dbus_connection_new_for_address_sync(g_getenv("DBUS_SESSION_BUS_ADDRESS"), +- G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT | G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION, +- NULL, +- NULL, +- &error); +- if (connection == NULL) { +- D("session bus not available: %s", error->message); +- g_error_free (error); +- return 1; +- } +- +- variant = g_dbus_connection_call_sync(connection, +- UNITY_SERVICE, +- GREETER_OBJ, +- PROPERTIES_INTERFACE, +- "Get", +- g_variant_new("(ss)", GREETER_INTERFACE, ACTIVE_PROPERTY), +- g_variant_type_new("(v)"), +- G_DBUS_CALL_FLAGS_NONE, +- -1, +- NULL, +- &error); +- +- if (error != NULL) { +- D("Could not get property: %s", error->message); +- g_object_unref(connection); +- g_error_free(error); +- return 1; +- } +- +- if (variant == NULL) { +- D("Failed to get property '%s': %s", "IsActive", error->message); +- g_object_unref(connection); +- g_error_free(error); +- return 1; +- } +- +- variant = g_variant_get_variant(g_variant_get_child_value(variant, 0)); +- +- int active = 1; +- if (!g_variant_get_boolean(variant)) { +- active = 0; +- } +- +- // get back to be root and return the value +- g_object_unref(connection); +- g_variant_unref(variant); +- setuid(0); +- return active; +-} +- + static int create_subproc_thread(const char *name) + { +- if (is_phone_locked() ) { +- fprintf(stderr, "device is locked\n"); +- return -1; +- } +- + stinfo *sti; + adb_thread_t t; + int ret_fd; + pid_t pid; +- +- struct passwd *user = getpwuid(getuid()); +- char *shell; +- char *shellopts = "-c"; +- char *home; +- char *sudo = "/usr/bin/sudo"; +- char useropt[256] = "-u"; +- +- if (user->pw_name) +- strcat(useropt, user->pw_name); +- +- if (user && user->pw_shell) { +- shell = user->pw_shell; +- shellopts = "-cl"; +- } else { +- shell = SHELL_COMMAND; +- } +- +- if (user->pw_dir) +- home = user->pw_dir; +- if(chdir(home) < 0 ) +- return 1; +- + if(name) { +- ret_fd = create_subprocess(sudo, useropt, "-i", shell, shellopts, name, &pid); ++ ret_fd = create_subprocess(SHELL_COMMAND, "-c", name, &pid); + } else { +- shellopts = "-l"; +- ret_fd = create_subprocess(sudo, useropt, "-i", shell, shellopts, 0, &pid); ++ ret_fd = create_subprocess(SHELL_COMMAND, "-", 0, &pid); + } + D("create_subprocess() ret_fd=%d pid=%d\n", ret_fd, pid); + +@@ -585,17 +453,13 @@ int service_to_fd(const char *name) + } else if (!strncmp(name, "log:", 4)) { + ret = create_service_thread(log_service, get_log_file_path(name + 4)); + } else if(!HOST && !strncmp(name, "shell:", 6)) { +- if (!is_phone_locked() ) { +- if(name[6]) { +- ret = create_subproc_thread(name + 6); +- } else { +- ret = create_subproc_thread(0); +- } ++ if(name[6]) { ++ ret = create_subproc_thread(name + 6); ++ } else { ++ ret = create_subproc_thread(0); + } + } else if(!strncmp(name, "sync:", 5)) { +- if (!is_phone_locked() ) { +- ret = create_service_thread(file_sync_service, NULL); +- } ++ ret = create_service_thread(file_sync_service, NULL); + } else if(!strncmp(name, "remount:", 8)) { + ret = create_service_thread(remount_service, NULL); + } else if(!strncmp(name, "reboot:", 7)) { +diff --git a/debian/makefiles/adbd.mk b/debian/makefiles/adbd.mk +index 49dab8c..22c1816 100644 +--- a/debian/makefiles/adbd.mk ++++ b/debian/makefiles/adbd.mk +@@ -40,11 +40,11 @@ CPPFLAGS+= -O2 -g -Wall -Wno-unused-parameter + CPPFLAGS+= -DADB_HOST=0 -DHAVE_FORKEXEC=1 -D_XOPEN_SOURCE -D_GNU_SOURCE -DALLOW_ADBD_ROOT=1 + CPPFLAGS+= -DHAVE_SYMLINKS -DBOARD_ALWAYS_INSECURE + CPPFLAGS+= -DHAVE_TERMIO_H +-CPPFLAGS+= `pkg-config --cflags glib-2.0 gio-2.0` ++CPPFLAGS+= -DADBD_NON_ANDROID + CPPFLAGS+= -I$(SRCDIR)/core/adbd + CPPFLAGS+= -I$(SRCDIR)/core/include + +-LIBS+= -lc -lpthread -lz -lcrypto -lcrypt `pkg-config --libs glib-2.0 gio-2.0` ++LIBS+= -lc -lpthread -lz -lcrypto -lcrypt + + OBJS= $(patsubst %, %.o, $(basename $(SRCS))) + +-- +2.5.1 + diff --git a/package/android-tools/0003-Fix-build-issue-with-uclibc.patch b/package/android-tools/0003-Fix-build-issue-with-uclibc.patch new file mode 100644 index 00000000..95517c30 --- /dev/null +++ b/package/android-tools/0003-Fix-build-issue-with-uclibc.patch @@ -0,0 +1,36 @@ +[PATCH] Fix build issue with uclibc + +Signed-off-by: Gary Bisson +--- + core/adbd/adb_auth_client.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/core/adb/adb_auth_client.c b/core/adb/adb_auth_client.c +index 0b4913e..068d837 100644 +--- a/core/adb/adb_auth_client.c ++++ b/core/adb/adb_auth_client.c +@@ -72,7 +72,7 @@ static void read_keys(const char *file, struct listnode *list) + if (sep) + *sep = '\0'; + +- ret = __b64_pton(buf, (u_char *)&key->key, sizeof(key->key) + 4); ++ ret = b64_pton(buf, (u_char *)&key->key, sizeof(key->key) + 4); + if (ret != sizeof(key->key)) { + D("%s: Invalid base64 data ret=%d\n", file, ret); + free(key); +diff --git a/core/adbd/adb_auth_client.c b/core/adbd/adb_auth_client.c +index 0b4913e..068d837 100644 +--- a/core/adbd/adb_auth_client.c ++++ b/core/adbd/adb_auth_client.c +@@ -72,7 +72,7 @@ static void read_keys(const char *file, struct listnode *list) + if (sep) + *sep = '\0'; + +- ret = __b64_pton(buf, (u_char *)&key->key, sizeof(key->key) + 4); ++ ret = b64_pton(buf, (u_char *)&key->key, sizeof(key->key) + 4); + if (ret != sizeof(key->key)) { + D("%s: Invalid base64 data ret=%d\n", file, ret); + free(key); +-- +2.6.1 + diff --git a/package/android-tools/0004-Fix-build-issue-with-musl.patch b/package/android-tools/0004-Fix-build-issue-with-musl.patch new file mode 100644 index 00000000..964eb87a --- /dev/null +++ b/package/android-tools/0004-Fix-build-issue-with-musl.patch @@ -0,0 +1,54 @@ +[PATCH] Fix build issue with musl + +arpa/nameser.h doesn't use the same macro name to avoid several +inclusions. + +Finally had an issue with framebuffer_service.c since it was missing the +TEMP_FAILURE_RETRY macro. + +Signed-off-by: Gary Bisson +--- + core/adbd/arpa_nameser.h | 12 +++++++++--- + core/adbd/base64.c | 1 - + core/adbd/framebuffer_service.c | 1 + + core/adbd/qemu_pipe.h | 1 - + core/include/cutils/android_reboot.h | 8 ++++++-- + core/include/cutils/bitops.h | 10 ++++++---- + core/include/cutils/partition_utils.h | 8 ++++++-- + extras/ext4_utils/sha1.c | 3 --- + extras/ext4_utils/sha1.h | 13 ++++++------- + 9 files changed, 34 insertions(+), 23 deletions(-) + +diff --git a/core/adbd/arpa_nameser.h b/core/adbd/arpa_nameser.h +index 438dc04..b2a28d6 100644 +--- a/core/adbd/arpa_nameser.h ++++ b/core/adbd/arpa_nameser.h +@@ -52,6 +52,8 @@ + + #ifndef _ARPA_NAMESER_H_ + #define _ARPA_NAMESER_H_ ++#ifndef _ARPA_NAMESER_H ++#define _ARPA_NAMESER_H + + #define BIND_4_COMPAT + +@@ -574,4 +579,5 @@ __END_DECLS + #define XLOG(...) do {} while (0) + #endif + ++#endif /* !_ARPA_NAMESER_H */ + #endif /* !_ARPA_NAMESER_H_ */ +diff --git a/core/adbd/framebuffer_service.c b/core/adbd/framebuffer_service.c +index 20c08d2..48e0241 100644 +--- a/core/adbd/framebuffer_service.c ++++ b/core/adbd/framebuffer_service.c +@@ -26,6 +26,7 @@ + #include "fdevent.h" + #include "adb.h" + ++#include + #include + #include + #include +-- +2.6.1 diff --git a/package/android-tools/0005-Use-pkgconf-to-get-libs-deps.patch b/package/android-tools/0005-Use-pkgconf-to-get-libs-deps.patch new file mode 100644 index 00000000..63ea1fb6 --- /dev/null +++ b/package/android-tools/0005-Use-pkgconf-to-get-libs-deps.patch @@ -0,0 +1,35 @@ +makefiles: use pkgconf to get libs deps + +LIBS lists library dependencies without taking into account static linking +that need ordered listing and more libraries listed since differently from +shared linking dependency is not transparent(i.e. -lcrypto could need +-latomic etc.). + +Replace -lcrypto with `pkg-config --libs libcrypto` command to be sure all +needed libraries are listed during linking. + +Signed-off-by: Giulio Benetti +--- +diff -urpN android-tools-4.2.2+git20130218.orig/debian/makefiles/adbd.mk android-tools-4.2.2+git20130218/debian/makefiles/adbd.mk +--- android-tools-4.2.2+git20130218.orig/debian/makefiles/adbd.mk 2019-04-08 16:05:02.967710428 +0200 ++++ android-tools-4.2.2+git20130218/debian/makefiles/adbd.mk 2019-04-08 16:30:42.463084426 +0200 +@@ -44,7 +44,7 @@ CPPFLAGS+= -DADBD_NON_ANDROID + CPPFLAGS+= -I$(SRCDIR)/core/adbd + CPPFLAGS+= -I$(SRCDIR)/core/include + +-LIBS+= -lc -lpthread -lz -lcrypto -lcrypt ++LIBS+= -lc -lpthread -lz `pkg-config --libs libcrypto` -lcrypt + + OBJS= $(patsubst %, %.o, $(basename $(SRCS))) + +diff -urpN android-tools-4.2.2+git20130218.orig/debian/makefiles/adb.mk android-tools-4.2.2+git20130218/debian/makefiles/adb.mk +--- android-tools-4.2.2+git20130218.orig/debian/makefiles/adb.mk 2019-04-08 16:05:02.959701400 +0200 ++++ android-tools-4.2.2+git20130218/debian/makefiles/adb.mk 2019-04-08 16:31:06.529426250 +0200 +@@ -41,7 +41,7 @@ CPPFLAGS+= -DHAVE_TERMIO_H + CPPFLAGS+= -I$(SRCDIR)/core/adb + CPPFLAGS+= -I$(SRCDIR)/core/include + +-LIBS+= -lc -lpthread -lz -lcrypto ++LIBS+= -lc -lpthread -lz `pkg-config --libs libcrypto` + + OBJS= $(SRCS:.c=.o) diff --git a/package/android-tools/0006-fix-big-endian-build.patch b/package/android-tools/0006-fix-big-endian-build.patch new file mode 100644 index 00000000..c35fdcb8 --- /dev/null +++ b/package/android-tools/0006-fix-big-endian-build.patch @@ -0,0 +1,61 @@ +Fix build on big endian systems + +The usb_linux_client.c file defines cpu_to_le16/32 by using the C +library htole16/32 function calls. However, cpu_to_le16/32 are used +when initializing structures, i.e in a context where a function call +is not allowed. + +It works fine on little endian systems because htole16/32 are defined +by the C library as no-ops. But on big-endian systems, they are +actually doing something, which might involve calling a function, +causing build failures. + +To solve this, we simply open-code cpu_to_le16/32 in a way that allows +them to be used when initializing structures. + +Signed-off-by: Thomas Petazzoni + +Index: b/core/adb/usb_linux_client.c +=================================================================== +--- a/core/adb/usb_linux_client.c ++++ b/core/adb/usb_linux_client.c +@@ -34,8 +34,15 @@ + #define MAX_PACKET_SIZE_FS 64 + #define MAX_PACKET_SIZE_HS 512 + +-#define cpu_to_le16(x) htole16(x) +-#define cpu_to_le32(x) htole32(x) ++#if __BYTE_ORDER == __LITTLE_ENDIAN ++# define cpu_to_le16(x) (x) ++# define cpu_to_le32(x) (x) ++#else ++# define cpu_to_le16(x) ((((x) >> 8) & 0xffu) | (((x) & 0xffu) << 8)) ++# define cpu_to_le32(x) \ ++ ((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >> 8) | \ ++ (((x) & 0x0000ff00u) << 8) | (((x) & 0x000000ffu) << 24)) ++#endif + + struct usb_handle + { +Index: b/core/adbd/usb_linux_client.c +=================================================================== +--- a/core/adbd/usb_linux_client.c ++++ b/core/adbd/usb_linux_client.c +@@ -34,8 +34,15 @@ + #define MAX_PACKET_SIZE_FS 64 + #define MAX_PACKET_SIZE_HS 512 + +-#define cpu_to_le16(x) htole16(x) +-#define cpu_to_le32(x) htole32(x) ++#if __BYTE_ORDER == __LITTLE_ENDIAN ++# define cpu_to_le16(x) (x) ++# define cpu_to_le32(x) (x) ++#else ++# define cpu_to_le16(x) ((((x) >> 8) & 0xffu) | (((x) & 0xffu) << 8)) ++# define cpu_to_le32(x) \ ++ ((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >> 8) | \ ++ (((x) & 0x0000ff00u) << 8) | (((x) & 0x000000ffu) << 24)) ++#endif + + struct usb_handle + { diff --git a/package/android-tools/0007-include-cdefs-h-when-needed.patch b/package/android-tools/0007-include-cdefs-h-when-needed.patch new file mode 100644 index 00000000..da4ee13a --- /dev/null +++ b/package/android-tools/0007-include-cdefs-h-when-needed.patch @@ -0,0 +1,41 @@ +Include cdefs.h wherever it is needed + +cdefs.h is included from within a lot of glibc headers, so it almost +invariably and automagically gets pulled in with glibc. + +However, this might not be the case with other C libraries. musl does +not provide cdefs.h so it does not include it from its own headers +(cdefs.h must be provided separately). + +So we must include it when we are going to use macros it provides. + +Signed-off-by: "Yann E. MORIN" +--- + core/adbd/services.c | 1 + + core/libcutils/android_reboot.c | 1 + + 2 files changed, 2 insertions(+), 0 deletion(-) + +diff --git a/core/adbd/services.c b/core/adbd/services.c +index 20c08d2..48e0241 100644 +--- a/core/adbd/services.c ++++ b/core/adbd/services.c +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + + #include "sysdeps.h" + +diff --git a/core/libcutils/android_reboot.c b/core/libcutils/android_reboot.c +index 20c08d2..48e0241 100644 +--- a/core/libcutils/android_reboot.c ++++ b/core/libcutils/android_reboot.c +@@ -23,6 +23,7 @@ + #include + #include + #include ++#include + + #include + diff --git a/package/android-tools/0008-Include-sysmacros.h-to-compile-with-glibc-2.28.patch b/package/android-tools/0008-Include-sysmacros.h-to-compile-with-glibc-2.28.patch new file mode 100644 index 00000000..77b457f6 --- /dev/null +++ b/package/android-tools/0008-Include-sysmacros.h-to-compile-with-glibc-2.28.patch @@ -0,0 +1,42 @@ +usb_linux.c: fix minor()/major() build failure due to glibc 2.28 + +glibc 2.28 no longer includes from , +and therefore must be included explicitly when +major()/minor() are used. + +This commit adds a patch to directly include into +all usb_linux.c files where minor() and major() macros are used. + +diff -urpN host-android-tools-4.2.2+git20130218.orig/core/adb/usb_linux.c host-android-tools-4.2.2+git20130218/core/adb/usb_linux.c +--- host-android-tools-4.2.2+git20130218.orig/core/adb/usb_linux.c 2013-02-18 15:49:03.000000000 +0100 ++++ host-android-tools-4.2.2+git20130218/core/adb/usb_linux.c 2018-09-09 11:47:16.476292546 +0200 +@@ -20,6 +20,7 @@ + #include + + #include ++#include + #include + #include + #include +diff -urpN host-android-tools-4.2.2+git20130218.orig/core/adbd/usb_linux.c host-android-tools-4.2.2+git20130218/core/adbd/usb_linux.c +--- host-android-tools-4.2.2+git20130218.orig/core/adbd/usb_linux.c 2018-09-09 02:32:57.154503866 +0200 ++++ host-android-tools-4.2.2+git20130218/core/adbd/usb_linux.c 2018-09-09 11:47:28.148353880 +0200 +@@ -20,6 +20,7 @@ + #include + + #include ++#include + #include + #include + #include +diff -urpN host-android-tools-4.2.2+git20130218.orig/core/fastboot/usb_linux.c host-android-tools-4.2.2+git20130218/core/fastboot/usb_linux.c +--- host-android-tools-4.2.2+git20130218.orig/core/fastboot/usb_linux.c 2013-02-18 15:49:03.000000000 +0100 ++++ host-android-tools-4.2.2+git20130218/core/fastboot/usb_linux.c 2018-09-09 11:46:53.028169154 +0200 +@@ -33,6 +33,7 @@ + + #include + #include ++#include + #include + #include + #include diff --git a/package/android-tools/0009-Fix-makefiles-for-out-of-tree-ext4_utils-build.patch b/package/android-tools/0009-Fix-makefiles-for-out-of-tree-ext4_utils-build.patch new file mode 100644 index 00000000..80ea1ec1 --- /dev/null +++ b/package/android-tools/0009-Fix-makefiles-for-out-of-tree-ext4_utils-build.patch @@ -0,0 +1,48 @@ +From d24abbec201975a5eb7f8589614cfb424b8c80b6 Mon Sep 17 00:00:00 2001 +From: Alex Kaplan +Date: Sat, 10 Nov 2018 19:50:51 -0800 +Subject: [PATCH] Fix makefiles for out-of-tree ext4_utils build + +Signed-off-by: Alex Kaplan +--- + debian/makefiles/ext4_utils.mk | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/debian/makefiles/ext4_utils.mk b/debian/makefiles/ext4_utils.mk +index cb64916..c5904bf 100644 +--- a/debian/makefiles/ext4_utils.mk ++++ b/debian/makefiles/ext4_utils.mk +@@ -1,6 +1,7 @@ + # Makefile for ext4_utils; based on https://heiher.info/2227.html + # Author: Dmitrijs Ledkovs + ++VPATH+=$(SRCDIR)/extras/ext4_utils + SRCS+=make_ext4fs.c + SRCS+=ext4fixup.c + SRCS+=ext4_utils.c +@@ -13,7 +14,7 @@ SRCS+=sha1.c + SRCS+=wipe.c + SRCS+=crc16.c + +-VPATH+=../../core/libsparse ++VPATH+=$(SRCDIR)/core/libsparse + SRCS+= backed_block.c + SRCS+= sparse_crc32.c + SRCS+= sparse.c +@@ -31,10 +32,9 @@ SRCS+=img2simg.c + SRCS+=simg2img.c + SRCS+=simg2simg.c + +-CPPFLAGS+= -I. +-CPPFLAGS+= -I/usr/include +-CPPFLAGS+= -I../../core/include +-CPPFLAGS+= -I../../core/libsparse/include/ ++CPPFLAGS+= -I$(SRCDIR) ++CPPFLAGS+= -I$(SRCDIR)/core/include ++CPPFLAGS+= -I$(SRCDIR)/core/libsparse/include/ + + LIBS+= -lz -lselinux + +-- +2.7.4 + diff --git a/package/android-tools/0010-adb-added-patch-for-openssl-1.1.0-compatibility.patch b/package/android-tools/0010-adb-added-patch-for-openssl-1.1.0-compatibility.patch new file mode 100644 index 00000000..2de33836 --- /dev/null +++ b/package/android-tools/0010-adb-added-patch-for-openssl-1.1.0-compatibility.patch @@ -0,0 +1,47 @@ +From bb3da0e32be4f2260940edf3ee0f88103dfd0dcc Mon Sep 17 00:00:00 2001 +From: Eneas U de Queiroz +Date: Tue, 5 Feb 2019 01:12:19 +0200 +Subject: [PATCH] adb: added patch for openssl 1.1.0 compatibility + +Signed-off-by: Eneas U de Queiroz + +[Vadim: took only adb related part from +https://github.com/lede-project/source/commit/f63f20fb93c7e67775cb01d97fc88b5b29452b81] +Signed-off-by: Vadim Kochan +--- + core/adb/adb_auth_host.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/core/adb/adb_auth_host.c b/core/adb/adb_auth_host.c +index 9039d42..debd2ef 100644 +--- a/core/adb/adb_auth_host.c ++++ b/core/adb/adb_auth_host.c +@@ -79,7 +79,13 @@ static int RSA_to_RSAPublicKey(RSA *rsa, RSAPublicKey *pkey) + } + + BN_set_bit(r32, 32); ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ const BIGNUM *rsa_n, *rsa_e; ++ RSA_get0_key(rsa, &rsa_n, &rsa_e, NULL); ++ BN_copy(n, rsa_n); ++#else + BN_copy(n, rsa->n); ++#endif + BN_set_bit(r, RSANUMWORDS * 32); + BN_mod_sqr(rr, r, n, ctx); + BN_div(NULL, rem, n, r32, ctx); +@@ -93,7 +99,11 @@ static int RSA_to_RSAPublicKey(RSA *rsa, RSAPublicKey *pkey) + BN_div(n, rem, n, r32, ctx); + pkey->n[i] = BN_get_word(rem); + } ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ pkey->exponent = BN_get_word(rsa_e); ++#else + pkey->exponent = BN_get_word(rsa->e); ++#endif + + out: + BN_free(n0inv); +-- +2.14.1 + diff --git a/package/android-tools/Config.in b/package/android-tools/Config.in new file mode 100644 index 00000000..a36c4db1 --- /dev/null +++ b/package/android-tools/Config.in @@ -0,0 +1,80 @@ +config BR2_PACKAGE_ANDROID_TOOLS + bool "android-tools" + # Technically, fastboot could build on noMMU systems. But + # since we need at least one of the three sub-options enabled, + # and adb/adbd can't be built on noMMU systems, and fastboot + # has some complicated dependencies, we simply make the whole + # package not available on noMMU platforms. + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_ANDROID_TOOLS_ADBD if \ + !BR2_PACKAGE_ANDROID_TOOLS_FASTBOOT && \ + !BR2_PACKAGE_ANDROID_TOOLS_ADB + help + This package contains the fastboot and adb utilities, that + can be used to interact with target devices using of these + protocols. + + https://wiki.debian.org/AndroidTools#Original_android-tools_package + +if BR2_PACKAGE_ANDROID_TOOLS + +# We need kernel headers that support the __SANE_USERSPACE_TYPES__ +# mechanism for 64 bits architectures, so that u64 gets defined as +# "unsigned long long" and not "unsigned long". We know that >= 3.16 +# is needed for MIPS64 (kernel commit +# f4b3aa7cd9d32407670e67238c5ee752bb98f481) and >= 3.10 is needed for +# PowerPC64 (kernel commit +# 2c9c6ce0199a4d252e20c531cfdc9d24e39235c0). Without this, the build +# fails with a bad redefinition of u64 (the android-tools fastboot +# code defines it as "unsigned long long"). +config BR2_PACKAGE_ANDROID_TOOLS_FASTBOOT_GOOD_KERNEL_HEADERS + bool + default y if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10 && (BR2_powerpc64 || BR2_powerpc64le) + default y if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16 && (BR2_mips64 || BR2_mips64el) + default y if !BR2_powerpc64 && !BR2_powerpc64le && !BR2_mips64 && !BR2_mips64el + +config BR2_PACKAGE_ANDROID_TOOLS_FASTBOOT + bool "fastboot" + depends on BR2_TOOLCHAIN_HAS_THREADS # libselinux + depends on !BR2_STATIC_LIBS # libselinux + depends on BR2_PACKAGE_ANDROID_TOOLS_FASTBOOT_GOOD_KERNEL_HEADERS + select BR2_PACKAGE_LIBSELINUX + select BR2_PACKAGE_ZLIB + help + This option will build and install the fastboot utility for + the target, which can be used to reflash other target devices + implementing the fastboot protocol. + +comment "fastboot needs a toolchain w/ threads, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS + +comment "fastboot needs headers >= 3.10 (PowerPC64), headers >= 3.16 (MIPS64)" + depends on !BR2_arc + depends on !BR2_PACKAGE_ANDROID_TOOLS_FASTBOOT_GOOD_KERNEL_HEADERS + +config BR2_PACKAGE_ANDROID_TOOLS_ADB + bool "adb" + depends on BR2_USE_MMU # uses fork() + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_ZLIB + help + This option will build and install the adb utility for the + target, which can be used to interact with other target + devices implementing the ADB protocol. + +config BR2_PACKAGE_ANDROID_TOOLS_ADBD + bool "adbd" + depends on BR2_USE_MMU # uses fork() + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_ZLIB + help + This option will build and install the adbd utility for the + target, which can be used to interact with a host machine + implementing the ADB protocol. + +endif + +comment "android-tools needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/android-tools/Config.in.host b/package/android-tools/Config.in.host new file mode 100644 index 00000000..433f4e38 --- /dev/null +++ b/package/android-tools/Config.in.host @@ -0,0 +1,33 @@ +config BR2_PACKAGE_HOST_ANDROID_TOOLS + bool "host android-tools" + select BR2_PACKAGE_HOST_ANDROID_TOOLS_ADB if \ + !BR2_PACKAGE_HOST_ANDROID_TOOLS_FASTBOOT + help + This package contains the fastboot and adb utilities, that + can be used to interact with target devices using of these + protocols. + +if BR2_PACKAGE_HOST_ANDROID_TOOLS + +config BR2_PACKAGE_HOST_ANDROID_TOOLS_FASTBOOT + bool "fastboot" + help + This option will build and install the fastboot utility for + the host, which can be used to reflash target devices + implementing the fastboot protocol. + +config BR2_PACKAGE_HOST_ANDROID_TOOLS_ADB + bool "adb" + help + This option will build and install the adb utility for the + host, which can be used to interact with target devices + implementing the ADB protocol. + +config BR2_PACKAGE_HOST_ANDROID_TOOLS_EXT4_UTILS + bool "ext4 utils" + help + This option will build and install the ext4 utils for the + host, i.e. make_ext4fs, ext4fixup, ext2simg, img2simg, + simg2img and simg2simg. + +endif diff --git a/package/android-tools/android-tools.hash b/package/android-tools/android-tools.hash new file mode 100644 index 00000000..27602fb2 --- /dev/null +++ b/package/android-tools/android-tools.hash @@ -0,0 +1,4 @@ +# locally computed +sha256 9bfba987e1351b12aa983787b9ae4424ab752e9e646d8e93771538dc1e5d932f android-tools_4.2.2+git20130218.orig.tar.xz +sha256 73c3078de3e44d8a3cadf7a360863c63155d9d558c2f0933cf38ad901a3f5998 android-tools_4.2.2+git20130218-3ubuntu41.debian.tar.gz +sha256 170c5939bf8c8eed1db8f66f2d6155e8c1a3e799e390b55e7aad253195b1ebf5 debian/copyright diff --git a/package/android-tools/android-tools.mk b/package/android-tools/android-tools.mk new file mode 100644 index 00000000..3d5c76a3 --- /dev/null +++ b/package/android-tools/android-tools.mk @@ -0,0 +1,96 @@ +################################################################################ +# +# android-tools +# +################################################################################ + +ANDROID_TOOLS_SITE = https://launchpad.net/ubuntu/+archive/primary/+files +ANDROID_TOOLS_VERSION = 4.2.2+git20130218 +ANDROID_TOOLS_SOURCE = android-tools_$(ANDROID_TOOLS_VERSION).orig.tar.xz +ANDROID_TOOLS_EXTRA_DOWNLOADS = android-tools_$(ANDROID_TOOLS_VERSION)-3ubuntu41.debian.tar.gz +HOST_ANDROID_TOOLS_EXTRA_DOWNLOADS = $(ANDROID_TOOLS_EXTRA_DOWNLOADS) +ANDROID_TOOLS_LICENSE = Apache-2.0 +ANDROID_TOOLS_LICENSE_FILES = debian/copyright +ANDROID_TOOLS_DEPENDENCIES = host-pkgconf +HOST_ANDROID_TOOLS_DEPENDENCIES = host-pkgconf + +# Extract the Debian tarball inside the sources +define ANDROID_TOOLS_DEBIAN_EXTRACT + $(call suitable-extractor,$(notdir $(ANDROID_TOOLS_EXTRA_DOWNLOADS))) \ + $(ANDROID_TOOLS_DL_DIR)/$(notdir $(ANDROID_TOOLS_EXTRA_DOWNLOADS)) | \ + $(TAR) -C $(@D) $(TAR_OPTIONS) - +endef + +HOST_ANDROID_TOOLS_POST_EXTRACT_HOOKS += ANDROID_TOOLS_DEBIAN_EXTRACT +ANDROID_TOOLS_POST_EXTRACT_HOOKS += ANDROID_TOOLS_DEBIAN_EXTRACT + +# Apply the Debian patches before applying the Buildroot patches +define ANDROID_TOOLS_DEBIAN_PATCH + $(APPLY_PATCHES) $(@D) $(@D)/debian/patches \* +endef + +HOST_ANDROID_TOOLS_PRE_PATCH_HOOKS += ANDROID_TOOLS_DEBIAN_PATCH +ANDROID_TOOLS_PRE_PATCH_HOOKS += ANDROID_TOOLS_DEBIAN_PATCH + +ifeq ($(BR2_PACKAGE_HOST_ANDROID_TOOLS_FASTBOOT),y) +HOST_ANDROID_TOOLS_BUILD_TARGETS += fastboot +HOST_ANDROID_TOOLS_INSTALL_TARGETS += build-fastboot/fastboot +HOST_ANDROID_TOOLS_DEPENDENCIES += host-zlib host-libselinux +endif + +ifeq ($(BR2_PACKAGE_HOST_ANDROID_TOOLS_ADB),y) +HOST_ANDROID_TOOLS_BUILD_TARGETS += adb +HOST_ANDROID_TOOLS_INSTALL_TARGETS += build-adb/adb +HOST_ANDROID_TOOLS_DEPENDENCIES += host-zlib host-openssl +endif + +ifeq ($(BR2_PACKAGE_HOST_ANDROID_TOOLS_EXT4_UTILS),y) +HOST_ANDROID_TOOLS_BUILD_TARGETS += ext4_utils +HOST_ANDROID_TOOLS_INSTALL_TARGETS += \ + $(addprefix build-ext4_utils/,make_ext4fs ext4fixup ext2simg img2simg simg2img simg2simg) +HOST_ANDROID_TOOLS_DEPENDENCIES += host-libselinux +endif + +ifeq ($(BR2_PACKAGE_ANDROID_TOOLS_FASTBOOT),y) +ANDROID_TOOLS_TARGETS += fastboot +ANDROID_TOOLS_DEPENDENCIES += zlib libselinux +endif + +ifeq ($(BR2_PACKAGE_ANDROID_TOOLS_ADB),y) +ANDROID_TOOLS_TARGETS += adb +ANDROID_TOOLS_DEPENDENCIES += zlib openssl +endif + +ifeq ($(BR2_PACKAGE_ANDROID_TOOLS_ADBD),y) +ANDROID_TOOLS_TARGETS += adbd +ANDROID_TOOLS_DEPENDENCIES += zlib openssl +endif + +# Build each tool in its own directory not to share object files + +define HOST_ANDROID_TOOLS_BUILD_CMDS + $(foreach t,$(HOST_ANDROID_TOOLS_BUILD_TARGETS),\ + mkdir -p $(@D)/build-$(t) && \ + $(HOST_MAKE_ENV) $(HOST_CONFIGURE_OPTS) $(MAKE) SRCDIR=$(@D) \ + -C $(@D)/build-$(t) -f $(@D)/debian/makefiles/$(t).mk$(sep)) +endef + +define ANDROID_TOOLS_BUILD_CMDS + $(foreach t,$(ANDROID_TOOLS_TARGETS),\ + mkdir -p $(@D)/build-$(t) && \ + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) SRCDIR=$(@D) \ + -C $(@D)/build-$(t) -f $(@D)/debian/makefiles/$(t).mk$(sep)) +endef + +define HOST_ANDROID_TOOLS_INSTALL_CMDS + $(foreach t,$(HOST_ANDROID_TOOLS_INSTALL_TARGETS),\ + $(INSTALL) -D -m 0755 $(@D)/$(t) $(HOST_DIR)/bin/$(notdir $(t))$(sep)) +endef + +define ANDROID_TOOLS_INSTALL_TARGET_CMDS + $(foreach t,$(ANDROID_TOOLS_TARGETS),\ + $(INSTALL) -D -m 0755 $(@D)/build-$(t)/$(t) $(TARGET_DIR)/usr/bin/$(t)$(sep)) +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/angular-websocket/Config.in b/package/angular-websocket/Config.in new file mode 100644 index 00000000..0981bd0d --- /dev/null +++ b/package/angular-websocket/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_ANGULAR_WEBSOCKET + bool "angular-websocket" + help + An AngularJS WebSocket service for connecting client + applications to servers. + + https://github.com/AngularClass/angular-websocket diff --git a/package/angular-websocket/angular-websocket.hash b/package/angular-websocket/angular-websocket.hash new file mode 100644 index 00000000..f589abe5 --- /dev/null +++ b/package/angular-websocket/angular-websocket.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 69d752896bc17c08750a2fda24b5eb3c6d653afc6f406dd90a6b7c920b22a14a angular-websocket-2.0.0.tar.gz +sha256 3013a57f2c8df37775804b8be5b107665a2ca209607bb92c618bcc084feb00a7 LICENSE diff --git a/package/angular-websocket/angular-websocket.mk b/package/angular-websocket/angular-websocket.mk new file mode 100644 index 00000000..d45bfdf9 --- /dev/null +++ b/package/angular-websocket/angular-websocket.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# angular-websocket +# +################################################################################ + +ANGULAR_WEBSOCKET_VERSION = 2.0.0 +ANGULAR_WEBSOCKET_SITE = $(call github,AngularClass,angular-websocket,v$(ANGULAR_WEBSOCKET_VERSION)) +ANGULAR_WEBSOCKET_LICENSE = MIT +ANGULAR_WEBSOCKET_LICENSE_FILES = LICENSE + +# install .min.js as .js +define ANGULAR_WEBSOCKET_INSTALL_TARGET_CMDS + $(INSTALL) -m 0644 -D $(@D)/dist/angular-websocket.min.js \ + $(TARGET_DIR)/var/www/angular-websocket.js +endef + +$(eval $(generic-package)) diff --git a/package/angularjs/Config.in b/package/angularjs/Config.in new file mode 100644 index 00000000..f0d2015a --- /dev/null +++ b/package/angularjs/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_ANGULARJS + bool "angularjs" + help + AngularJS web application framework. + + http://angularjs.org diff --git a/package/angularjs/angularjs.hash b/package/angularjs/angularjs.hash new file mode 100644 index 00000000..5468174e --- /dev/null +++ b/package/angularjs/angularjs.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 471b57064031da8c5fd3b1ba3f52dd1e0d2740a97ed34da2e8ab2a4cc2718280 angular-1.8.2.zip +sha256 237656fae6e39d02cd71cbcfbf91b7964eba5796aafca1bfcfff3b054ce3fed6 angular.js diff --git a/package/angularjs/angularjs.mk b/package/angularjs/angularjs.mk new file mode 100644 index 00000000..d393c82c --- /dev/null +++ b/package/angularjs/angularjs.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# angularjs +# +################################################################################ + +ANGULARJS_VERSION = 1.8.2 +ANGULARJS_SOURCE = angular-$(ANGULARJS_VERSION).zip +ANGULARJS_SITE = https://code.angularjs.org/$(ANGULARJS_VERSION) +ANGULARJS_LICENSE = MIT +# There's no separate license file in the archive, so use angular.js instead. +ANGULARJS_LICENSE_FILES = angular.js +ANGULARJS_CPE_ID_VENDOR = angularjs +ANGULARJS_CPE_ID_PRODUCT = angular.js + +define ANGULARJS_EXTRACT_CMDS + unzip $(ANGULARJS_DL_DIR)/$(ANGULARJS_SOURCE) -d $(@D) + mv $(@D)/angular-$(ANGULARJS_VERSION)/* $(@D) + rmdir $(@D)/angular-$(ANGULARJS_VERSION) +endef + +# install .min.js as .js +define ANGULARJS_INSTALL_TARGET_CMDS + $(foreach f,$(notdir $(wildcard $(@D)/*.min.js)), + $(INSTALL) -m 0644 -D $(@D)/$(f) \ + $(TARGET_DIR)/var/www/$(f:.min.js=.js)$(sep)) +endef + +$(eval $(generic-package)) diff --git a/package/aoetools/0001-Change-shell-script-interpreter-from-bin-bash-to-bin.patch b/package/aoetools/0001-Change-shell-script-interpreter-from-bin-bash-to-bin.patch new file mode 100644 index 00000000..00b24c89 --- /dev/null +++ b/package/aoetools/0001-Change-shell-script-interpreter-from-bin-bash-to-bin.patch @@ -0,0 +1,26 @@ +From 4ef42740538cefd3c1554aa4df5bcb1388ac927b Mon Sep 17 00:00:00 2001 +From: Sergio Prado +Date: Tue, 16 Jan 2018 22:28:32 -0200 +Subject: [PATCH] Change shell script interpreter from /bin/bash to /bin/sh + +This will make the script more portable, making it possible to run on +systems that do not have bash. + +Signed-off-by: Sergio Prado +--- + aoe-stat.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/aoe-stat.in b/aoe-stat.in +index 50e6ac674169..0c1d6f5ebe1e 100755 +--- a/aoe-stat.in ++++ b/aoe-stat.in +@@ -1,4 +1,4 @@ +-#! /bin/bash ++#! /bin/sh + # aoe-stat - collate and present information about AoE storage + # Copyright 2012, CORAID, Inc., and licensed under GPL v.2. + +-- +1.9.1 + diff --git a/package/aoetools/Config.in b/package/aoetools/Config.in new file mode 100644 index 00000000..70a838f6 --- /dev/null +++ b/package/aoetools/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_AOETOOLS + bool "aoetools" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + The aoetools are programs for users of the ATA over Ethernet + (AoE) network storage protocol, a simple protocol for using + storage over an ethernet LAN. + + http://aoetools.sourceforge.net/ + +comment "aoetools needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/aoetools/aoetools.hash b/package/aoetools/aoetools.hash new file mode 100644 index 00000000..76c30562 --- /dev/null +++ b/package/aoetools/aoetools.hash @@ -0,0 +1,5 @@ +# Locally computed: +sha256 477e796f5c18e8c0e61b5d88e1759c68249e8e0210c2f3de2b98680e2cc63e32 aoetools-37.tar.gz + +# Hash for license files: +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/aoetools/aoetools.mk b/package/aoetools/aoetools.mk new file mode 100644 index 00000000..3f6340ff --- /dev/null +++ b/package/aoetools/aoetools.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# aoetools +# +################################################################################ + +AOETOOLS_VERSION = 37 +AOETOOLS_SITE = $(call github,OpenAoE,aoetools,aoetools-$(AOETOOLS_VERSION)) +AOETOOLS_LICENSE = GPL-2.0 +AOETOOLS_LICENSE_FILES = COPYING + +define AOETOOLS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) +endef + +define AOETOOLS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) DESTDIR=$(TARGET_DIR) \ + -C $(@D) install +endef + +$(eval $(generic-package)) diff --git a/package/apache/0001-cross-compile.patch b/package/apache/0001-cross-compile.patch new file mode 100644 index 00000000..790b7a04 --- /dev/null +++ b/package/apache/0001-cross-compile.patch @@ -0,0 +1,63 @@ +Fix cross-compilation + +Fetched httpd-2.4.x-cross_compile.diff from upstream bugtracker: +https://issues.apache.org/bugzilla/show_bug.cgi?id=51257#c6 + +which is a bundle of upstream revisions: + http://svn.apache.org/viewvc?view=revision&revision=1327907 + http://svn.apache.org/viewvc?view=revision&revision=1328390 + http://svn.apache.org/viewvc?view=revision&revision=1328714 + +Signed-off-by: Bernd Kuhls + +Index: server/Makefile.in +=================================================================== +--- a/server/Makefile.in (revision 1328714) ++++ b/server/Makefile.in (working copy) +@@ -22,9 +22,14 @@ + include $(top_builddir)/build/rules.mk + include $(top_srcdir)/build/library.mk + ++ifdef CC_FOR_BUILD ++gen_test_char: gen_test_char.c ++ $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) -DCROSS_COMPILE -o $@ $< ++else + gen_test_char_OBJECTS = gen_test_char.lo + gen_test_char: $(gen_test_char_OBJECTS) + $(LINK) $(EXTRA_LDFLAGS) $(gen_test_char_OBJECTS) $(EXTRA_LIBS) ++endif + + test_char.h: gen_test_char + ./gen_test_char > test_char.h +Index: configure.in +=================================================================== +--- a/configure.in (revision 1328714) ++++ b/configure.in (working copy) +@@ -193,6 +193,14 @@ + dnl Try to get c99 support for variadic macros + ifdef([AC_PROG_CC_C99], [AC_PROG_CC_C99]) + ++dnl In case of cross compilation we set CC_FOR_BUILD to cc unless ++dnl we got already CC_FOR_BUILD from environment. ++if test "x${build_alias}" != "x${host_alias}"; then ++ if test "x${CC_FOR_BUILD}" = "x"; then ++ CC_FOR_BUILD=cc ++ fi ++fi ++ + if test "x${cache_file}" = "x/dev/null"; then + # Likewise, ensure that CC and CPP are passed through to the pcre + # configure script iff caching is disabled (the autoconf 2.5x default). +Index: acinclude.m4 +=================================================================== +--- a/acinclude.m4 (revision 1328714) ++++ ab/cinclude.m4 (working copy) +@@ -53,6 +53,8 @@ + APACHE_SUBST(CPPFLAGS) + APACHE_SUBST(CFLAGS) + APACHE_SUBST(CXXFLAGS) ++ APACHE_SUBST(CC_FOR_BUILD) ++ APACHE_SUBST(CFLAGS_FOR_BUILD) + APACHE_SUBST(LTFLAGS) + APACHE_SUBST(LDFLAGS) + APACHE_SUBST(LT_LDFLAGS) diff --git a/package/apache/0002-nios2_is_not_os2.patch b/package/apache/0002-nios2_is_not_os2.patch new file mode 100644 index 00000000..9da8ccac --- /dev/null +++ b/package/apache/0002-nios2_is_not_os2.patch @@ -0,0 +1,18 @@ +Fix nios2 detection. + +Apache treats nios2 as OS/2. + +Signed-off-by: Bernd Kuhls + +diff -uNr httpd-2.4.12.org/configure.in httpd-2.4.12/configure.in +--- httpd-2.4.12.org/configure.in 2015-01-22 18:33:07.000000000 +0100 ++++ httpd-2.4.12/configure.in 2015-04-02 22:01:32.851102219 +0200 +@@ -268,7 +268,7 @@ + AC_MSG_NOTICE([]) + + case $host in +- *os2*) ++ *-os2*) + # Use a custom made libtool replacement + echo "using aplibtool" + LIBTOOL="$abs_srcdir/srclib/apr/build/aplibtool" diff --git a/package/apache/0003-server-Makefile.in-handle-separate-APR_INCLUDE_DIR-A.patch b/package/apache/0003-server-Makefile.in-handle-separate-APR_INCLUDE_DIR-A.patch new file mode 100644 index 00000000..b4ad1286 --- /dev/null +++ b/package/apache/0003-server-Makefile.in-handle-separate-APR_INCLUDE_DIR-A.patch @@ -0,0 +1,48 @@ +From 00281390e82db18fe0de4033be4045f9391a8ee5 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Thu, 15 Nov 2018 14:04:29 +0100 +Subject: [PATCH] server/Makefile.in: handle separate + APR_INCLUDE_DIR/APU_INCLUDE_DIR + +If APR_INCLUDEDIR and APU_INCLUDEDIR point to different directories, +but for example APU_INCLUDEDIR contains both the apr headers and apu +headers, the "export_files" file will contain duplicate header files, +causing the exports.c file to contain duplicate definitions, making +the build fail. + +This commit fixes that by making sure we only use the apr headers from +APR_INCLUDEDIR and the apu headers from the APU_INCLUDEDIR. + +Signed-off-by: Thomas Petazzoni +Upstream: https://bz.apache.org/bugzilla/show_bug.cgi?id=62930 +--- + server/Makefile.in | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/server/Makefile.in b/server/Makefile.in +index 1fa334467d..2258f0bdf2 100644 +--- a/server/Makefile.in ++++ b/server/Makefile.in +@@ -34,7 +34,6 @@ test_char.h: gen_test_char + util.lo: test_char.h + + EXPORT_DIRS = $(top_srcdir)/include $(top_srcdir)/os/$(OS_DIR) +-EXPORT_DIRS_APR = $(APR_INCLUDEDIR) $(APU_INCLUDEDIR) + + # If export_files is a dependency here, but we remove it during this stage, + # when exports.c is generated, make will not detect that export_files is no +@@ -60,9 +59,8 @@ export_files: + ls $$dir/*.h ; \ + done; \ + echo "$(top_srcdir)/server/mpm_fdqueue.h"; \ +- for dir in $(EXPORT_DIRS_APR); do \ +- ls $$dir/ap[ru].h $$dir/ap[ru]_*.h 2>/dev/null; \ +- done; \ ++ ls $(APR_INCLUDE_DIR)/{apr.h,apr_*.h} 2>/dev/null; \ ++ ls $(APU_INCLUDE_DIR)/{apu.h,apu_*.h} 2>/dev/null; \ + ) | sed -e s,//,/,g | sort -u > $@ + + exports.c: export_files +-- +2.19.1 + diff --git a/package/apache/Config.in b/package/apache/Config.in new file mode 100644 index 00000000..693ee20a --- /dev/null +++ b/package/apache/Config.in @@ -0,0 +1,48 @@ +config BR2_PACKAGE_APACHE + bool "apache" + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # apr + select BR2_PACKAGE_APR_UTIL + select BR2_PACKAGE_PCRE + help + The Apache HTTP Server Project is an effort to develop and + maintain an open-source HTTP server for modern operating + systems including UNIX and Windows NT. The goal of this + project is to provide a secure, efficient and extensible + server that provides HTTP services in sync with the current + HTTP standards. + + http://httpd.apache.org + +if BR2_PACKAGE_APACHE + +choice + prompt "Multi-Processing Module (MPM)" + default BR2_PACKAGE_APACHE_MPM_WORKER + help + Select the Multi-Processing Module (MPM). + +config BR2_PACKAGE_APACHE_MPM_EVENT + bool "event" + help + A variant of the worker MPM with the goal of consuming threads + only for connections with active processing + +config BR2_PACKAGE_APACHE_MPM_PREFORK + bool "prefork" + help + Implements a non-threaded, pre-forking web server + +config BR2_PACKAGE_APACHE_MPM_WORKER + bool "worker" + help + Implements a hybrid multi-threaded multi-process web server + +endchoice + +endif + +comment "apache needs a toolchain w/ dynamic library, threads" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/apache/S50apache b/package/apache/S50apache new file mode 100644 index 00000000..b6874190 --- /dev/null +++ b/package/apache/S50apache @@ -0,0 +1,15 @@ +#!/bin/sh + +case "$1" in + start|restart|graceful|graceful-stop|stop) + apachectl -k $1 + ;; + reload) + apachectl -k restart + ;; + *) + echo "Usage: $0 {start|restart|reload|graceful|graceful-stop|stop}" + exit 1 +esac + +exit $? diff --git a/package/apache/apache.hash b/package/apache/apache.hash new file mode 100644 index 00000000..c03934b4 --- /dev/null +++ b/package/apache/apache.hash @@ -0,0 +1,5 @@ +# From http://archive.apache.org/dist/httpd/httpd-2.4.46.tar.bz2.{sha256,sha512} +sha256 1bc826e7b2e88108c7e4bf43c026636f77a41d849cfb667aa7b5c0b86dbf966c httpd-2.4.48.tar.bz2 +sha512 6c250626f1e7d10428a92d984fd48ff841effcc8705f7816ab71b681bbd51d0012ad158dcd13763fe7d630311f2de258b27574603140d648be42796ab8326724 httpd-2.4.48.tar.bz2 +# Locally computed +sha256 47b8c2b6c3309282a99d4a3001575c790fead690cc14734628c4667d2bbffc43 LICENSE diff --git a/package/apache/apache.mk b/package/apache/apache.mk new file mode 100644 index 00000000..403dc0f7 --- /dev/null +++ b/package/apache/apache.mk @@ -0,0 +1,126 @@ +################################################################################ +# +# apache +# +################################################################################ + +APACHE_VERSION = 2.4.48 +APACHE_SOURCE = httpd-$(APACHE_VERSION).tar.bz2 +APACHE_SITE = http://archive.apache.org/dist/httpd +APACHE_LICENSE = Apache-2.0 +APACHE_LICENSE_FILES = LICENSE +APACHE_CPE_ID_VENDOR = apache +APACHE_CPE_ID_PRODUCT = http_server +APACHE_SELINUX_MODULES = apache +# Needed for mod_php +APACHE_INSTALL_STAGING = YES +# We have a patch touching configure.in and Makefile.in, +# so we need to autoreconf: +APACHE_AUTORECONF = YES +APACHE_DEPENDENCIES = apr apr-util pcre + +ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y) +define APACHE_FIXUP_APR_LIBTOOL + $(SED) "s@$(PER_PACKAGE_DIR)/[^/]\+/@$(PER_PACKAGE_DIR)/apache/@g" \ + $(STAGING_DIR)/usr/build-1/libtool +endef +APACHE_POST_CONFIGURE_HOOKS += APACHE_FIXUP_APR_LIBTOOL +endif + +APACHE_CONF_ENV= \ + ap_cv_void_ptr_lt_long=no \ + PCRE_CONFIG=$(STAGING_DIR)/usr/bin/pcre-config + +ifeq ($(BR2_PACKAGE_APACHE_MPM_EVENT),y) +APACHE_MPM = event +else ifeq ($(BR2_PACKAGE_APACHE_MPM_PREFORK),y) +APACHE_MPM = prefork +else ifeq ($(BR2_PACKAGE_APACHE_MPM_WORKER),y) +APACHE_MPM = worker +endif + +APACHE_CONF_OPTS = \ + --sysconfdir=/etc/apache2 \ + --with-apr=$(STAGING_DIR)/usr \ + --with-apr-util=$(STAGING_DIR)/usr \ + --with-pcre=$(STAGING_DIR)/usr/bin/pcre-config \ + --enable-http \ + --enable-dbd \ + --enable-proxy \ + --enable-mime-magic \ + --without-suexec-bin \ + --enable-mods-shared=all \ + --with-mpm=$(APACHE_MPM) \ + --disable-luajit + +ifeq ($(BR2_PACKAGE_LIBXML2),y) +APACHE_DEPENDENCIES += libxml2 +# Apache wants the path to the header file, where it can find +# . +APACHE_CONF_OPTS += \ + --enable-xml2enc \ + --enable-proxy-html \ + --with-libxml2=$(STAGING_DIR)/usr/include/libxml2 +else +APACHE_CONF_OPTS += \ + --disable-xml2enc \ + --disable-proxy-html +endif + +ifeq ($(BR2_PACKAGE_LUA),y) +APACHE_CONF_OPTS += --enable-lua +APACHE_DEPENDENCIES += lua +else +APACHE_CONF_OPTS += --disable-lua +endif + +ifeq ($(BR2_PACKAGE_NGHTTP2),y) +APACHE_CONF_OPTS += \ + --enable-http2 \ + --with-nghttp2=$(STAGING_DIR)/usr +APACHE_DEPENDENCIES += nghttp2 +else +APACHE_CONF_OPTS += --disable-http2 +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +APACHE_DEPENDENCIES += openssl +APACHE_CONF_OPTS += \ + --enable-ssl \ + --with-ssl=$(STAGING_DIR)/usr +else +APACHE_CONF_OPTS += --disable-ssl +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +APACHE_DEPENDENCIES += zlib +APACHE_CONF_OPTS += \ + --enable-deflate \ + --with-z=$(STAGING_DIR)/usr +else +APACHE_CONF_OPTS += --disable-deflate +endif + +define APACHE_FIX_STAGING_APACHE_CONFIG + $(SED) 's%"/usr/bin"%"$(STAGING_DIR)/usr/bin"%' $(STAGING_DIR)/usr/bin/apxs + $(SED) 's%/usr/build%$(STAGING_DIR)/usr/build%' $(STAGING_DIR)/usr/bin/apxs + $(SED) 's%^prefix =.*%prefix = $(STAGING_DIR)/usr%' $(STAGING_DIR)/usr/build/config_vars.mk +endef +APACHE_POST_INSTALL_STAGING_HOOKS += APACHE_FIX_STAGING_APACHE_CONFIG + +define APACHE_CLEANUP_TARGET + $(RM) -rf $(TARGET_DIR)/usr/manual $(TARGET_DIR)/usr/build +endef +APACHE_POST_INSTALL_TARGET_HOOKS += APACHE_CLEANUP_TARGET + +define APACHE_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/apache/S50apache \ + $(TARGET_DIR)/etc/init.d/S50apache +endef + +define APACHE_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/apache/apache.service \ + $(TARGET_DIR)/usr/lib/systemd/system/apache.service +endef + +$(eval $(autotools-package)) diff --git a/package/apache/apache.service b/package/apache/apache.service new file mode 100644 index 00000000..b8747e26 --- /dev/null +++ b/package/apache/apache.service @@ -0,0 +1,13 @@ +[Unit] +Description=Apache HTTP Server +After=network.target + +[Service] +Type=forking +ExecStart=/usr/bin/apachectl start +ExecReload=/usr/bin/apachectl graceful +ExecStop=/usr/bin/apachectl stop +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/package/apcupsd/Config.in b/package/apcupsd/Config.in new file mode 100644 index 00000000..2a00d43d --- /dev/null +++ b/package/apcupsd/Config.in @@ -0,0 +1,74 @@ +config BR2_PACKAGE_APCUPSD + bool "apcupsd" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + help + A daemon for controlling APC UPSes. + + http://www.apcupsd.org/ + +if BR2_PACKAGE_APCUPSD + +config BR2_PACKAGE_APCUPSD_APCSMART + bool "apcsmart" + help + Compile APC SmartUPS serial driver + +config BR2_PACKAGE_APCUPSD_DUMB + bool "dumb" + help + Compile dumb UPS driver + +config BR2_PACKAGE_APCUPSD_MODBUS + bool "modbus" + help + Compile MODBUS driver code + +config BR2_PACKAGE_APCUPSD_MODBUS_USB + bool "modbus usb" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_LIBUSB_COMPAT + select BR2_PACKAGE_APCUPSD_MODBUS + help + Compile MODBUS/USB driver code + +comment "modbus usb support needs a toolchain w/ threads, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + +config BR2_PACKAGE_APCUPSD_NET + bool "net" + help + Compile networking driver for slaves + +config BR2_PACKAGE_APCUPSD_PCNET + bool "pcnet" + help + Compile PCNET driver code + +config BR2_PACKAGE_APCUPSD_SNMP + bool "snmp" + help + Compile SNMP driver + +config BR2_PACKAGE_APCUPSD_USB + bool "usb" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_LIBUSB_COMPAT + help + Compile USB UPS code + +comment "usb support needs a toolchain w/ threads, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + +endif + +comment "apcupsd needs a toolchain w/ C++, threads" + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/apcupsd/apcupsd.hash b/package/apcupsd/apcupsd.hash new file mode 100644 index 00000000..6795560f --- /dev/null +++ b/package/apcupsd/apcupsd.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/apcupsd/files/apcupsd%20-%20Stable/3.14.14/ +md5 cc8f5ced77f38906a274787acb9bc980 apcupsd-3.14.14.tar.gz +sha1 f027fa141c929371fe860443b6d911ef3a3606fb apcupsd-3.14.14.tar.gz +# Locally computed: +sha256 db7748559b6b4c3784f9856561ef6ac6199ef7bd019b3edcd7e0a647bf8f9867 apcupsd-3.14.14.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/apcupsd/apcupsd.mk b/package/apcupsd/apcupsd.mk new file mode 100644 index 00000000..9e707e1a --- /dev/null +++ b/package/apcupsd/apcupsd.mk @@ -0,0 +1,82 @@ +################################################################################ +# +# apcupsd +# +################################################################################ + +APCUPSD_VERSION = 3.14.14 +APCUPSD_SITE = http://downloads.sourceforge.net/project/apcupsd/apcupsd%20-%20Stable/$(APCUPSD_VERSION) +APCUPSD_LICENSE = GPL-2.0 +APCUPSD_LICENSE_FILES = COPYING +APCUPSD_CPE_ID_VENDOR = apcupsd +APCUPSD_CONF_OPTS = --disable-test + +ifneq ($(BR2_PACKAGE_APCUPSD_MODBUS_USB)$(BR2_PACKAGE_APCUPSD_USB),) +APCUPSD_CONF_ENV += ac_cv_path_usbcfg=$(STAGING_DIR)/usr/bin/libusb-config +ifeq ($(BR2_STATIC_LIBS),y) +APCUPSD_DEPENDENCIES += host-pkgconf +APCUPSD_CONF_ENV += LIBS="`$(PKG_CONFIG_HOST_BINARY) --libs libusb`" +endif +endif + +ifeq ($(BR2_PACKAGE_APCUPSD_APCSMART),y) +APCUPSD_CONF_OPTS += --enable-apcsmart +else +APCUPSD_CONF_OPTS += --disable-apcsmart +endif + +ifeq ($(BR2_PACKAGE_APCUPSD_DUMB),y) +APCUPSD_CONF_OPTS += --enable-dumb +else +APCUPSD_CONF_OPTS += --disable-dumb +endif + +ifeq ($(BR2_PACKAGE_APCUPSD_MODBUS_USB),y) +APCUPSD_CONF_OPTS += --enable-modbus-usb +APCUPSD_DEPENDENCIES = libusb libusb-compat +else +APCUPSD_CONF_OPTS += --disable-modbus-usb +endif + +ifeq ($(BR2_PACKAGE_APCUPSD_MODBUS),y) +APCUPSD_CONF_OPTS += --enable-modbus +else +APCUPSD_CONF_OPTS += --disable-modbus +endif + +ifeq ($(BR2_PACKAGE_APCUPSD_NET),y) +APCUPSD_CONF_OPTS += --enable-net +else +APCUPSD_CONF_OPTS += --disable-net +endif + +ifeq ($(BR2_PACKAGE_APCUPSD_PCNET),y) +APCUPSD_CONF_OPTS += --enable-pcnet +else +APCUPSD_CONF_OPTS += --disable-pcnet +endif + +ifeq ($(BR2_PACKAGE_APCUPSD_SNMP),y) +APCUPSD_CONF_OPTS += --enable-snmp +else +APCUPSD_CONF_OPTS += --disable-snmp +endif + +ifeq ($(BR2_PACKAGE_APCUPSD_USB),y) +APCUPSD_CONF_OPTS += --enable-usb +APCUPSD_DEPENDENCIES = libusb libusb-compat +else +APCUPSD_CONF_OPTS += --disable-usb +endif + +define APCUPSD_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/src + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/platforms +endef + +define APCUPSD_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/src DESTDIR=$(TARGET_DIR) install + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/platforms DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(autotools-package)) diff --git a/package/apitrace/0001-dlsym-Fix-build-under-uClibc.patch b/package/apitrace/0001-dlsym-Fix-build-under-uClibc.patch new file mode 100644 index 00000000..bf47bba9 --- /dev/null +++ b/package/apitrace/0001-dlsym-Fix-build-under-uClibc.patch @@ -0,0 +1,31 @@ +From 189a3b8397c61ba262a2221885e38dc514c59d94 Mon Sep 17 00:00:00 2001 +From: Paul Cercueil +Date: Sat, 7 Dec 2019 00:00:57 +0100 +Subject: [PATCH] dlsym: Fix build under uClibc + +uClibc defines the __GLIBC__ macro too (I know, right?), so verify that +__UCLIBC__ is not defined before we can use glibc-specific internal +functions. + +Signed-off-by: Paul Cercueil +Upstream: https://github.com/apitrace/apitrace/commit/189a3b8397c61ba262a2221885e38dc514c59d94 +--- + wrappers/dlsym.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/wrappers/dlsym.cpp b/wrappers/dlsym.cpp +index 2eda082a..5ab8465b 100644 +--- a/wrappers/dlsym.cpp ++++ b/wrappers/dlsym.cpp +@@ -34,7 +34,7 @@ + #include "os.hpp" + + +-#ifdef __GLIBC__ ++#if defined(__GLIBC__) && !defined(__UCLIBC__) + + + #include +-- +2.24.0 + diff --git a/package/apitrace/0002-Support-libc-that-don-t-have-RTLD_DEEPBIND.patch b/package/apitrace/0002-Support-libc-that-don-t-have-RTLD_DEEPBIND.patch new file mode 100644 index 00000000..e3435742 --- /dev/null +++ b/package/apitrace/0002-Support-libc-that-don-t-have-RTLD_DEEPBIND.patch @@ -0,0 +1,25 @@ +From d495d15e20bf655afa3be62ada792e8dfc8d29b6 Mon Sep 17 00:00:00 2001 +From: Gleb Mazovetskiy +Date: Fri, 13 Dec 2019 13:39:19 +0000 +Subject: [PATCH] Support libc that don't have RTLD_DEEPBIND + +[Retrieved from: https://github.com/apitrace/apitrace/pull/646] +Signed-off-by: Fabrice Fontaine +--- + dispatch/glproc_gl.cpp | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/dispatch/glproc_gl.cpp b/dispatch/glproc_gl.cpp +index 5d7903a0c..456fcc42e 100644 +--- a/dispatch/glproc_gl.cpp ++++ b/dispatch/glproc_gl.cpp +@@ -148,6 +148,9 @@ _getPrivateProcAddress(const char *procName) + + #else + ++#ifndef RTLD_DEEPBIND ++#define RTLD_DEEPBIND 0 ++#endif + + static inline void + logSymbol(const char *name, void *ptr) { diff --git a/package/apitrace/0003-CMakeLists.txt-respect-BUILD_TESTING-OFF.patch b/package/apitrace/0003-CMakeLists.txt-respect-BUILD_TESTING-OFF.patch new file mode 100644 index 00000000..8cc1f8bb --- /dev/null +++ b/package/apitrace/0003-CMakeLists.txt-respect-BUILD_TESTING-OFF.patch @@ -0,0 +1,104 @@ +From 7f0f1e7e34f997eef697856804dd478b54bb365e Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Tue, 22 Dec 2020 10:45:21 +0100 +Subject: [PATCH] CMakeLists.txt: respect BUILD_TESTING=OFF + +Allow the user to disable unit tests through BUILD_TESTING=OFF: +https://cmake.org/cmake/help/latest/command/enable_testing.html + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/apitrace/apitrace/pull/698] +--- + CMakeLists.txt | 6 +++++- + gui/CMakeLists.txt | 6 ++++-- + lib/guids/CMakeLists.txt | 6 ++++-- + lib/os/CMakeLists.txt | 6 ++++-- + lib/trace/CMakeLists.txt | 6 ++++-- + 5 files changed, 21 insertions(+), 9 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 4a07f069..ee401887 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -41,6 +41,8 @@ option (ENABLE_FRAME_POINTER "Disable frame pointer omission" ON) + + option (ENABLE_ASAN "Enable Address Sanitizer" OFF) + ++option (BUILD_TESTING "Enable unit tests" ON) ++ + option (ENABLE_TESTS "Enable additional tests" OFF) + + if (ANDROID) +@@ -433,7 +435,9 @@ endmacro () + # which subdirectory they are declared + set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) + +-enable_testing () ++if (BUILD_TESTING) ++ enable_testing () ++endif () + if (CMAKE_CROSSCOMPILING) + add_custom_target (check) + elseif (DEFINED CMAKE_BUILD_TYPE) +diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt +index 5baf3552..ad6ee501 100644 +--- a/gui/CMakeLists.txt ++++ b/gui/CMakeLists.txt +@@ -13,8 +13,10 @@ add_library (qubjson STATIC + qubjson.cpp + ) + +-add_gtest (qubjson_test qubjson_test.cpp) +-target_link_libraries (qubjson_test qubjson) ++if (BUILD_TESTING) ++ add_gtest (qubjson_test qubjson_test.cpp) ++ target_link_libraries (qubjson_test qubjson) ++endif () + + set(qapitrace_SRCS + apisurface.cpp +diff --git a/lib/guids/CMakeLists.txt b/lib/guids/CMakeLists.txt +index ce0f86da..ea28a18f 100644 +--- a/lib/guids/CMakeLists.txt ++++ b/lib/guids/CMakeLists.txt +@@ -5,5 +5,7 @@ add_library (guids STATIC + guids.hpp + ) + +-add_gtest (guids_test guids_test.cpp) +-target_link_libraries (guids_test guids) ++if (BUILD_TESTING) ++ add_gtest (guids_test guids_test.cpp) ++ target_link_libraries (guids_test guids) ++endif () +diff --git a/lib/os/CMakeLists.txt b/lib/os/CMakeLists.txt +index 222411e0..b7134b57 100644 +--- a/lib/os/CMakeLists.txt ++++ b/lib/os/CMakeLists.txt +@@ -36,5 +36,7 @@ if (APPLE) + ) + endif () + +-add_gtest (os_thread_test os_thread_test.cpp) +-target_link_libraries (os_thread_test os) ++if (BUILD_TESTING) ++ add_gtest (os_thread_test os_thread_test.cpp) ++ target_link_libraries (os_thread_test os) ++endif () +diff --git a/lib/trace/CMakeLists.txt b/lib/trace/CMakeLists.txt +index c68bd00f..d95df978 100644 +--- a/lib/trace/CMakeLists.txt ++++ b/lib/trace/CMakeLists.txt +@@ -34,5 +34,7 @@ target_link_libraries (common + brotli_dec brotli_common + ) + +-add_gtest (trace_parser_flags_test trace_parser_flags_test.cpp) +-target_link_libraries (trace_parser_flags_test common) ++if (BUILD_TESTING) ++ add_gtest (trace_parser_flags_test trace_parser_flags_test.cpp) ++ target_link_libraries (trace_parser_flags_test common) ++endif () +-- +2.29.2 + diff --git a/package/apitrace/Config.in b/package/apitrace/Config.in new file mode 100644 index 00000000..263eec5e --- /dev/null +++ b/package/apitrace/Config.in @@ -0,0 +1,22 @@ +comment "apitrace needs a toolchain w/ C++, wchar, dynamic library, threads, gcc >= 4.9" + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \ + BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + +config BR2_PACKAGE_APITRACE + bool "apitrace" + depends on BR2_USE_MMU # fork() + depends on BR2_USE_WCHAR + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS # dlfcn.h + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_XLIB_LIBX11 if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_LIBPNG + help + Trace and replay OpenGL and OpenGL ES APIs calls to/from a + file. You may install apitrace GUI from your distribution to + inspect generated traces. + + http://apitrace.github.io/ diff --git a/package/apitrace/apitrace.hash b/package/apitrace/apitrace.hash new file mode 100644 index 00000000..9479f064 --- /dev/null +++ b/package/apitrace/apitrace.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 0eec81ba7d3799622336319785465a2982a0621898842517a07894d7e2aa18eb apitrace-9.0.tar.gz +sha256 7066bb1b787519c42f8278b77757c21de522cd97755cb30a22759ac401c62260 LICENSE diff --git a/package/apitrace/apitrace.mk b/package/apitrace/apitrace.mk new file mode 100644 index 00000000..b962ac01 --- /dev/null +++ b/package/apitrace/apitrace.mk @@ -0,0 +1,45 @@ +################################################################################ +# +# apitrace +# +################################################################################ + +APITRACE_VERSION = 9.0 +APITRACE_SITE = $(call github,apitrace,apitrace,$(APITRACE_VERSION)) +APITRACE_LICENSE = MIT +APITRACE_LICENSE_FILES = LICENSE + +APITRACE_DEPENDENCIES = host-python3 libpng + +ifeq ($(BR2_PACKAGE_XORG7),y) +APITRACE_DEPENDENCIES += xlib_libX11 +APITRACE_CONF_OPTS += -DENABLE_X11=ON +else +APITRACE_CONF_OPTS += -DENABLE_X11=OFF +endif + +# Gui was never tested, so we prefer to explicitly disable it +APITRACE_CONF_OPTS += -DENABLE_GUI=false + +APITRACE_CFLAGS = $(TARGET_CFLAGS) +APITRACE_CXXFLAGS = $(TARGET_CXXFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_68485),y) +# This works around embedded Brotli build failure +APITRACE_CFLAGS += -O0 +# CMakeLists.txt sets CMAKE_CXX_FLAGS_ depending on +# BUILD_TYPE, and this comes after the generic CMAKE_CXX_FLAGS. +# Override CMAKE_BUILD_TYPE so no overrides are applied. +APITRACE_CONF_OPTS += -DCMAKE_BUILD_TYPE=Buildroot +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y) +# This works around Apitrace itself build failure +APITRACE_CXXFLAGS += -O0 +endif + +APITRACE_CONF_OPTS += \ + -DCMAKE_C_FLAGS="$(APITRACE_CFLAGS)" \ + -DCMAKE_CXX_FLAGS="$(APITRACE_CXXFLAGS)" + +$(eval $(cmake-package)) diff --git a/package/apparmor/Config.in b/package/apparmor/Config.in new file mode 100644 index 00000000..1cc9daa7 --- /dev/null +++ b/package/apparmor/Config.in @@ -0,0 +1,77 @@ +config BR2_PACKAGE_APPARMOR + bool "apparmor" + depends on BR2_USE_MMU # fork() + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # libapparmor + depends on BR2_TOOLCHAIN_HAS_THREADS # libapparmor + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16 # libapparmor + select BR2_PACKAGE_LIBAPPARMOR + help + AppArmor is an effective and easy-to-use Linux application + security system. AppArmor proactively protects the operating + system and applications from external or internal threats, + even zero-day attacks, by enforcing good behavior and + preventing even unknown application flaws from being + exploited. + + This package builds the parser (which can load profiles). + + http://wiki.apparmor.net + +if BR2_PACKAGE_APPARMOR + +config BR2_PACKAGE_APPARMOR_BINUTILS + bool "binutils" + help + A set of utilities (written in C): + aa-enabled aa-exec + +comment "utils need python3" + depends on !BR2_PACKAGE_PYTHON3 + +config BR2_PACKAGE_APPARMOR_UTILS + bool "utils" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_BUSYBOX_SHOW_OTHERS # net-tools + select BR2_PACKAGE_NET_TOOLS # runtime (aa-unconfined) + select BR2_PACKAGE_PYTHON3_READLINE + help + A set of utilities (written in python): + aa-audit aa-disable aa-logprof + aa-autodep aa-easyprof aa-mergeprof + aa-cleanprof aa-enforce aa-status + aa-complain aa-genprof aa-unconfined + +if BR2_PACKAGE_APPARMOR_UTILS + +comment "utils (extras) need bash and perl, and busybox or gawk" + depends on !BR2_PACKAGE_BASH || !BR2_PACKAGE_PERL \ + || !(BR2_PACKAGE_BUSYBOX || BR2_PACKAGE_GAWK) + +config BR2_PACKAGE_APPARMOR_UTILS_EXTRA + bool "utils (extras)" + depends on BR2_PACKAGE_BASH + depends on BR2_PACKAGE_PERL + depends on BR2_PACKAGE_BUSYBOX || BR2_PACKAGE_GAWK + help + An extra set of utilities (written in a mixture of sh, + bash, perl, and awk): + aa-decode (bash + perl) + aa-notify (perl) + aa-remove-unknown (sh + awk) + +endif # BR2_PACKAGE_APPARMOR_UTILS + +config BR2_PACKAGE_APPARMOR_PROFILES + bool "profiles" + help + Installs server-class profiles for a wide range of + usual programs and daemons. + +endif # BR2_PACKAGE_APPARMOR + +comment "apparmor needs a toolchain w/ headers >= 3.16, threads, C++" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS \ + || !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16 diff --git a/package/apparmor/apparmor.hash b/package/apparmor/apparmor.hash new file mode 100644 index 00000000..ddbe87c5 --- /dev/null +++ b/package/apparmor/apparmor.hash @@ -0,0 +1,6 @@ +# From: https://gitlab.com/apparmor/apparmor/-/wikis/home#userspace +sha256 8fada772d9a60989525594346d9aa22af938daafc1781adce9a1acb3c75bdf24 apparmor-3.0.1.tar.gz + +# locally computed +sha256 a7e0cdcbea5c14927cedfc600d46526bdcbb1eb0a4d951e2ea53c2a6de159cb4 LICENSE +sha256 dd54950fa69a3096fe907a466a454d217ccca9bca77398d5232704766d5a0040 parser/COPYING.GPL diff --git a/package/apparmor/apparmor.mk b/package/apparmor/apparmor.mk new file mode 100644 index 00000000..6c23e1bb --- /dev/null +++ b/package/apparmor/apparmor.mk @@ -0,0 +1,96 @@ +################################################################################ +# +# apparmor +# +################################################################################ + +# When updating the version here, please also update the libapparmor package +APPARMOR_VERSION_MAJOR = 3.0 +APPARMOR_VERSION = $(APPARMOR_VERSION_MAJOR).1 +APPARMOR_SITE = https://launchpad.net/apparmor/$(APPARMOR_VERSION_MAJOR)/$(APPARMOR_VERSION)/+download +APPARMOR_DL_SUBDIR = libapparmor +APPARMOR_LICENSE = GPL-2.0 +APPARMOR_LICENSE_FILES = LICENSE parser/COPYING.GPL +APPARMOR_CPE_ID_VENDOR = canonical + +APPARMOR_DEPENDENCIES = libapparmor + +APPARMOR_TOOLS = parser +APPARMOR_MAKE_OPTS = USE_SYSTEM=1 DISTRO=unknown POD2MAN=true POD2HTML=true + +ifeq ($(BR2_PACKAGE_GETTEXT_PROVIDES_LIBINTL),y) +APPARMOR_DEPENDENCIES += gettext +APPARMOR_MAKE_OPTS += WITH_LIBINTL=1 +endif + +ifeq ($(BR2_PACKAGE_APPARMOR_BINUTILS),y) +APPARMOR_TOOLS += binutils +endif + +ifeq ($(BR2_PACKAGE_APPARMOR_UTILS),y) +APPARMOR_DEPENDENCIES += host-python3 python3 +APPARMOR_TOOLS += utils +APPARMOR_MAKE_OPTS += PYTHON=$(HOST_DIR)/bin/python3 + +ifeq ($(BR2_PACKAGE_APPARMOR_UTILS_EXTRA),) +define APPARMOR_UTILS_NO_EXTRA + $(Q)rm -f $(addprefix $(TARGET_DIR)/usr/sbin/,aa-decode aa-notify aa-remove-unknown) +endef +APPARMOR_POST_INSTALL_TARGET_HOOKS += APPARMOR_UTILS_NO_EXTRA +endif # BR2_PACKAGE_APPARMOR_UTILS_EXTRA + +endif # BR2_PACKAGE_APPARMOR_UTILS + +ifeq ($(BR2_PACKAGE_APPARMOR_PROFILES),y) +APPARMOR_TOOLS += profiles +endif + +ifeq ($(BR2_PACKAGE_LINUX_PAM),y) +APPARMOR_DEPENDENCIES += linux-pam +APPARMOR_TOOLS += changehat/pam_apparmor +endif + +ifeq ($(BR2_PACKAGE_APACHE),y) +APPARMOR_DEPENDENCIES += apache +APPARMOR_TOOLS += changehat/mod_apparmor +APPARMOR_MAKE_OPTS += APXS=$(STAGING_DIR)/usr/bin/apxs + +ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y) +define APPARMOR_FIXUP_APXS + $(SED) "s@$(PER_PACKAGE_DIR)/[^/]\+/@$(PER_PACKAGE_DIR)/apparmor/@g" \ + $(STAGING_DIR)/usr/bin/apxs \ + $(STAGING_DIR)/usr/build/config_vars.mk +endef +APPARMOR_POST_CONFIGURE_HOOKS += APPARMOR_FIXUP_APXS +endif +endif + +define APPARMOR_BUILD_CMDS + $(foreach tool,$(APPARMOR_TOOLS),\ + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) \ + $(MAKE) -C $(@D)/$(tool) $(APPARMOR_MAKE_OPTS) + ) +endef + +define APPARMOR_INSTALL_TARGET_CMDS + $(foreach tool,$(APPARMOR_TOOLS),\ + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) \ + $(MAKE) -C $(@D)/$(tool) $(APPARMOR_MAKE_OPTS) \ + DESTDIR=$(TARGET_DIR) install + ) +endef + +# Despite its name, apparmor.systemd is a sysv-init compatible startup script +define APPARMOR_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 $(@D)/parser/apparmor.systemd \ + $(TARGET_DIR)/etc/init.d/S00apparmor +endef + +define APPARMOR_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0755 $(@D)/parser/apparmor.systemd \ + $(TARGET_DIR)/lib/apparmor/apparmor.systemd + $(INSTALL) -D -m 0644 $(@D)/parser/apparmor.service \ + $(TARGET_DIR)/usr/lib/systemd/system/apparmor.service +endef + +$(eval $(generic-package)) diff --git a/package/apr-util/0001-remove-checkapr.patch b/package/apr-util/0001-remove-checkapr.patch new file mode 100644 index 00000000..42ad12fc --- /dev/null +++ b/package/apr-util/0001-remove-checkapr.patch @@ -0,0 +1,21 @@ +remove check apr + +this patch removes the check of apr which fails the build + +Signed-off-by: Rico Bachmann +--- +v1: disable the check for APU_FIND_APR because the check only looks into folders +named apr, and our source-tree is called apr-versionnumber (e.g. apr-1.4.6) + +diff -rupN apr-util-1.4.1/configure.in apr-util-1.4.1-fix/configure.in +--- apr-util-1.4.1/configure.in 2009-12-17 20:15:19.000000000 +0100 ++++ apr-util-1.4.1-fix/configure.in 2012-04-24 10:10:32.000000000 +0200 +@@ -99,7 +99,7 @@ fi + dnl + dnl Find the APR includes directory and (possibly) the source (base) dir. + dnl +-APU_FIND_APR ++dnl APU_FIND_APR + + dnl + dnl even though we use apr_rules.mk for building apr-util, we need diff --git a/package/apr-util/Config.in b/package/apr-util/Config.in new file mode 100644 index 00000000..6c5e3bbd --- /dev/null +++ b/package/apr-util/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_APR_UTIL + bool "apr-util" + # apr really needs shared library support + depends on !BR2_STATIC_LIBS + depends on BR2_USE_MMU # apr + select BR2_PACKAGE_APR + select BR2_PACKAGE_EXPAT + help + The utility library for the apache runtime project + + http://apr.apache.org/ + +comment "apr-util needs a toolchain w/ dynamic library" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS diff --git a/package/apr-util/apr-util.hash b/package/apr-util/apr-util.hash new file mode 100644 index 00000000..82ad4756 --- /dev/null +++ b/package/apr-util/apr-util.hash @@ -0,0 +1,4 @@ +# From http://www.apache.org/dist/apr/apr-util-1.6.1.tar.bz2.sha256 +sha256 d3e12f7b6ad12687572a3a39475545a072608f4ba03a6ce8a3778f607dd0035b apr-util-1.6.1.tar.bz2 +# Locally calculated +sha256 ef5609d18601645ad6fe22c6c122094be40e976725c1d0490778abacc836e7a2 LICENSE diff --git a/package/apr-util/apr-util.mk b/package/apr-util/apr-util.mk new file mode 100644 index 00000000..db4df915 --- /dev/null +++ b/package/apr-util/apr-util.mk @@ -0,0 +1,96 @@ +################################################################################ +# +# apr-util +# +################################################################################ + +APR_UTIL_VERSION = 1.6.1 +APR_UTIL_SOURCE = apr-util-$(APR_UTIL_VERSION).tar.bz2 +APR_UTIL_SITE = http://archive.apache.org/dist/apr +APR_UTIL_LICENSE = Apache-2.0 +APR_UTIL_LICENSE_FILES = LICENSE +APR_UTIL_CPE_ID_VENDOR = apache +APR_UTIL_CPE_ID_PRODUCT = portable_runtime_utility +APR_UTIL_INSTALL_STAGING = YES +APR_UTIL_DEPENDENCIES = apr expat +APR_UTIL_CONF_OPTS = \ + --with-apr=$(STAGING_DIR)/usr/bin/apr-1-config +APR_UTIL_CONFIG_SCRIPTS = apu-1-config + +ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y) +define APR_UTIL_FIX_RULES_MK_LIBTOOL + $(SED) 's,$(PER_PACKAGE_DIR)/apr/,$(PER_PACKAGE_DIR)/apr-util/,g' \ + $(@D)/build/rules.mk + $(SED) 's,$(PER_PACKAGE_DIR)/apr/,$(PER_PACKAGE_DIR)/apr-util/,g' \ + $(STAGING_DIR)/usr/build-1/libtool +endef +APR_UTIL_POST_CONFIGURE_HOOKS += APR_UTIL_FIX_RULES_MK_LIBTOOL +endif + +# When iconv is available, then use it to provide charset conversion +# features. +APR_UTIL_DEPENDENCIES += $(if $(BR2_PACKAGE_LIBICONV),libiconv) + +ifeq ($(BR2_PACKAGE_BERKELEYDB),y) +APR_UTIL_CONF_OPTS += --with-dbm=db53 --with-berkeley-db="$(STAGING_DIR)/usr" +APR_UTIL_DEPENDENCIES += berkeleydb +else +APR_UTIL_CONF_OPTS += --without-berkeley-db +endif + +ifeq ($(BR2_PACKAGE_GDBM),y) +APR_UTIL_CONF_OPTS += --with-gdbm="$(STAGING_DIR)/usr" +APR_UTIL_DEPENDENCIES += gdbm +else +APR_UTIL_CONF_OPTS += --without-gdbm +endif + +ifeq ($(BR2_PACKAGE_MYSQL),y) +APR_UTIL_CONF_OPTS += --with-mysql="$(STAGING_DIR)/usr" +APR_UTIL_DEPENDENCIES += mysql +else +APR_UTIL_CONF_OPTS += --without-mysql +endif + +ifeq ($(BR2_PACKAGE_SQLITE),y) +APR_UTIL_CONF_OPTS += --with-sqlite3="$(STAGING_DIR)/usr" +APR_UTIL_DEPENDENCIES += sqlite +else +APR_UTIL_CONF_OPTS += --without-sqlite3 +endif + +ifeq ($(BR2_PACKAGE_OPENLDAP),y) +APR_UTIL_CONF_ENV += ac_cv_ldap_set_rebind_proc_style=three +APR_UTIL_CONF_OPTS += \ + --with-ldap \ + --with-ldap-include="$(STAGING_DIR)/usr/include/" \ + --with-ldap-lib="$(STAGING_DIR)/usr/lib" +APR_UTIL_DEPENDENCIES += openldap +else +APR_UTIL_CONF_OPTS += --without-ldap +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +APR_UTIL_CONF_OPTS += --with-crypto --with-openssl="$(STAGING_DIR)/usr" +APR_UTIL_DEPENDENCIES += openssl +else +APR_UTIL_CONF_OPTS += --without-crypto +endif + +ifeq ($(BR2_PACKAGE_POSTGRESQL),y) +APR_UTIL_CONF_OPTS += --with-pgsql="$(STAGING_DIR)/usr" +APR_UTIL_DEPENDENCIES += postgresql +else +APR_UTIL_CONF_OPTS += --without-pgsql +endif + +ifeq ($(BR2_PACKAGE_UNIXODBC),y) +APR_UTIL_CONF_OPTS += --with-odbc="$(STAGING_DIR)/usr" +# avoid using target binary $(STAGING_DIR)/usr/bin/odbc_config +APR_UTIL_CONF_ENV += ac_cv_path_ODBC_CONFIG="" +APR_UTIL_DEPENDENCIES += unixodbc +else +APR_UTIL_CONF_OPTS += --without-odbc +endif + +$(eval $(autotools-package)) diff --git a/package/apr/0001-cross-compile.patch b/package/apr/0001-cross-compile.patch new file mode 100644 index 00000000..559ebb74 --- /dev/null +++ b/package/apr/0001-cross-compile.patch @@ -0,0 +1,58 @@ +Fix cross-compilation + +Patch was backported from Apache httpd: +http://svn.apache.org/viewvc?view=revision&revision=1327907 +http://svn.apache.org/viewvc?view=revision&revision=1328390 +http://svn.apache.org/viewvc?view=revision&revision=1328714 + +Patch submitted upstream: +https://issues.apache.org/bugzilla/show_bug.cgi?id=57058 + +Signed-off-by: Bernd Kuhls + +diff -uNr apr-1.5.1.org/configure.in apr-1.5.1/configure.in +--- apr-1.5.1.org/configure.in 2014-01-25 16:17:29.000000000 +0100 ++++ apr-1.5.1/configure.in 2014-10-05 11:20:40.080746760 +0200 +@@ -118,6 +118,16 @@ + echo "Configuring APR library" + echo "Platform: $host" + ++dnl In case of cross compilation we set CC_FOR_BUILD to cc unless ++dnl we got already CC_FOR_BUILD from environment. ++if test "x${build_alias}" != "x${host_alias}"; then ++ if test "x${CC_FOR_BUILD}" = "x"; then ++ CC_FOR_BUILD=cc ++ fi ++fi ++AC_SUBST(CC_FOR_BUILD) ++AC_SUBST(CFLAGS_FOR_BUILD) ++ + dnl Some initial steps for configuration. We setup the default directory + dnl and which files are to be configured. + +diff -uNr apr-1.5.1.org/Makefile.in apr-1.5.1/Makefile.in +--- apr-1.5.1.org/Makefile.in 2014-03-17 16:10:26.000000000 +0100 ++++ apr-1.5.1/Makefile.in 2014-10-05 11:22:53.031070519 +0200 +@@ -8,6 +8,8 @@ + # APR (Apache Portable Runtime) library Makefile. + # + CPP = @CPP@ ++CC_FOR_BUILD = @CC_FOR_BUILD@ ++CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ + + # get substituted into some targets + APR_MAJOR_VERSION=@APR_MAJOR_VERSION@ +@@ -134,8 +134,13 @@ + $(APR_MKDIR) tools + $(LT_COMPILE) + ++ifdef CC_FOR_BUILD ++tools/gen_test_char@EXEEXT@: tools/gen_test_char.c $(LOCAL_LIBS) ++ $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) -DCROSS_COMPILE -o $@ $< ++else + tools/gen_test_char@EXEEXT@: $(OBJECTS_gen_test_char) + $(LINK_PROG) $(OBJECTS_gen_test_char) $(ALL_LIBS) ++endif + + include/private/apr_escape_test_char.h: tools/gen_test_char@EXEEXT@ + $(APR_MKDIR) include/private diff --git a/package/apr/0002-sys-param-h.patch b/package/apr/0002-sys-param-h.patch new file mode 100644 index 00000000..49f963c4 --- /dev/null +++ b/package/apr/0002-sys-param-h.patch @@ -0,0 +1,39 @@ +Fix PATH_MAX detection by including sys/param.h if available + +Patch sent upstream: +https://bz.apache.org/bugzilla/show_bug.cgi?id=63782 + +Signed-off-by: Bernd Kuhls + +diff -uNr apr-1.7.0.orig/configure.in apr-1.7.0/configure.in +--- apr-1.7.0.orig/configure.in 2019-04-01 19:40:46.000000000 +0200 ++++ apr-1.7.0/configure.in 2019-09-29 17:03:41.803326791 +0200 +@@ -1586,6 +1586,7 @@ + AC_SUBST(stringh) + AC_SUBST(stringsh) + AC_SUBST(sys_ioctlh) ++AC_SUBST(sys_paramh) + AC_SUBST(sys_sendfileh) + AC_SUBST(sys_signalh) + AC_SUBST(sys_socketh) +diff -uNr apr-1.7.0.orig/include/apr.h.in apr-1.7.0/include/apr.h.in +--- apr-1.7.0.orig/include/apr.h.in 2019-03-22 14:30:31.000000000 +0100 ++++ apr-1.7.0/include/apr.h.in 2019-09-29 17:04:54.203815469 +0200 +@@ -95,6 +95,7 @@ + #define APR_HAVE_STRINGS_H @stringsh@ + #define APR_HAVE_INTTYPES_H @inttypesh@ + #define APR_HAVE_SYS_IOCTL_H @sys_ioctlh@ ++#define APR_HAVE_SYS_PARAM_H @sys_paramh@ + #define APR_HAVE_SYS_SENDFILE_H @sys_sendfileh@ + #define APR_HAVE_SYS_SIGNAL_H @sys_signalh@ + #define APR_HAVE_SYS_SOCKET_H @sys_socketh@ +@@ -206,6 +207,9 @@ + #include + #endif + #endif ++#if APR_HAVE_SYS_PARAM_H ++#include ++#endif + + /* __APPLE__ is now the official pre-defined macro for macOS */ + #ifdef __APPLE__ diff --git a/package/apr/Config.in b/package/apr/Config.in new file mode 100644 index 00000000..67de9254 --- /dev/null +++ b/package/apr/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_APR + bool "apr" + # apr really needs shared library support + depends on !BR2_STATIC_LIBS + depends on BR2_USE_MMU # fork() in apr_proc_fork() + help + The mission of the Apache Portable Runtime (APR) project is to + create and maintain software libraries that provide a + predictable and consistent interface to underlying + platform-specific implementations + + http://apr.apache.org/ + +comment "apr needs a toolchain w/ dynamic library" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS diff --git a/package/apr/apr.hash b/package/apr/apr.hash new file mode 100644 index 00000000..0a3f5c85 --- /dev/null +++ b/package/apr/apr.hash @@ -0,0 +1,4 @@ +# From http://archive.apache.org/dist/apr/apr-1.7.0.tar.bz2.sha256 +sha256 e2e148f0b2e99b8e5c6caa09f6d4fb4dd3e83f744aa72a952f94f5a14436f7ea apr-1.7.0.tar.bz2 +# Locally calculated +sha256 f854aeef66ecd55a126226e82b3f26793fc3b1c584647f6a0edc5639974c38ad LICENSE diff --git a/package/apr/apr.mk b/package/apr/apr.mk new file mode 100644 index 00000000..46622258 --- /dev/null +++ b/package/apr/apr.mk @@ -0,0 +1,86 @@ +################################################################################ +# +# apr +# +################################################################################ + +APR_VERSION = 1.7.0 +APR_SOURCE = apr-$(APR_VERSION).tar.bz2 +APR_SITE = http://archive.apache.org/dist/apr +APR_LICENSE = Apache-2.0 +APR_LICENSE_FILES = LICENSE +APR_INSTALL_STAGING = YES +# We have a patch touching configure.in and Makefile.in, +# so we need to autoreconf: +APR_AUTORECONF = YES + +# avoid apr_hints.m4 by setting apr_preload_done=yes and set +# the needed CFLAGS on our own (avoids '-D_REENTRANT' in case +# not supported by toolchain and subsequent configure failure) +APR_CFLAGS = $(TARGET_CFLAGS) -DLINUX -D_GNU_SOURCE +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +APR_CFLAGS += -D_REENTRANT +endif + +APR_CONF_ENV = \ + CC_FOR_BUILD="$(HOSTCC)" \ + CFLAGS_FOR_BUILD="$(HOST_CFLAGS)" \ + CFLAGS="$(APR_CFLAGS)" \ + ac_cv_file__dev_zero=yes \ + ac_cv_func_setpgrp_void=yes \ + apr_cv_process_shared_works=yes \ + apr_cv_mutex_robust_shared=no \ + apr_cv_tcp_nodelay_with_cork=yes \ + ac_cv_sizeof_struct_iovec=8 \ + ac_cv_sizeof_pid_t=4 \ + ac_cv_struct_rlimit=yes \ + ac_cv_o_nonblock_inherited=no \ + apr_cv_mutex_recursive=yes \ + apr_cv_epoll=yes \ + apr_cv_epoll_create1=yes \ + apr_cv_dup3=yes \ + apr_cv_sock_cloexec=yes \ + apr_cv_accept4=yes \ + apr_preload_done=yes +APR_CONFIG_SCRIPTS = apr-1-config + +# Doesn't even try to guess when cross compiling +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +APR_CONF_ENV += apr_cv_pthreads_lib="-lpthread" +endif + +# Fix lfs detection when cross compiling +APR_CONF_ENV += apr_cv_use_lfs64=yes + +# Use non-portable atomics when available. We have to override +# ap_cv_atomic_builtins because the test used to check for atomic +# builtins uses AC_TRY_RUN, which doesn't work when cross-compiling. +ifeq ($(BR2_TOOLCHAIN_HAS_SYNC_8),y) +APR_CONF_OPTS += --enable-nonportable-atomics +APR_CONF_ENV += ap_cv_atomic_builtins=yes +else +APR_CONF_OPTS += --disable-nonportable-atomics +endif + +ifeq ($(BR2_PACKAGE_UTIL_LINUX_LIBUUID),y) +APR_DEPENDENCIES += util-linux +endif + +define APR_CLEANUP_UNNEEDED_FILES + $(RM) -rf $(TARGET_DIR)/usr/build-1/ +endef + +APR_POST_INSTALL_TARGET_HOOKS += APR_CLEANUP_UNNEEDED_FILES + +define APR_FIXUP_RULES_MK + $(SED) 's%apr_builddir=%apr_builddir=$(STAGING_DIR)%' \ + $(STAGING_DIR)/usr/build-1/apr_rules.mk + $(SED) 's%apr_builders=%apr_builders=$(STAGING_DIR)%' \ + $(STAGING_DIR)/usr/build-1/apr_rules.mk + $(SED) 's%top_builddir=%top_builddir=$(STAGING_DIR)%' \ + $(STAGING_DIR)/usr/build-1/apr_rules.mk +endef + +APR_POST_INSTALL_STAGING_HOOKS += APR_FIXUP_RULES_MK + +$(eval $(autotools-package)) diff --git a/package/argp-standalone/0001-throw-in-funcdef.patch b/package/argp-standalone/0001-throw-in-funcdef.patch new file mode 100644 index 00000000..4a90751e --- /dev/null +++ b/package/argp-standalone/0001-throw-in-funcdef.patch @@ -0,0 +1,79 @@ +# --- T2-COPYRIGHT-NOTE-BEGIN --- +# This copyright note is auto-generated by ./scripts/Create-CopyPatch. +# +# T2 SDE: package/.../rng-tools/throw-in-funcdef.patch.argp-standalone +# Copyright (C) 2006 The T2 SDE Project +# +# More information can be found in the files COPYING and README. +# +# This patch file is dual-licensed. It is available under the license the +# patched project is licensed under, as long as it is an OpenSource license +# as defined at http://www.opensource.org/ (e.g. BSD, X11) or 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. +# --- T2-COPYRIGHT-NOTE-END --- + + +No __THROW in function implementation. + --jsaw + +--- argp-standalone-1.4-test2/argp.h.orig 2006-01-06 02:29:59.000000000 +0100 ++++ argp-standalone-1.4-test2/argp.h 2006-01-06 02:41:10.000000000 +0100 +@@ -560,17 +560,17 @@ + # endif + + # ifndef ARGP_EI +-# define ARGP_EI extern __inline__ ++# define ARGP_EI extern inline + # endif + + ARGP_EI void +-__argp_usage (__const struct argp_state *__state) __THROW ++__argp_usage (__const struct argp_state *__state) + { + __argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE); + } + + ARGP_EI int +-__option_is_short (__const struct argp_option *__opt) __THROW ++__option_is_short (__const struct argp_option *__opt) + { + if (__opt->flags & OPTION_DOC) + return 0; +@@ -582,7 +582,7 @@ + } + + ARGP_EI int +-__option_is_end (__const struct argp_option *__opt) __THROW ++__option_is_end (__const struct argp_option *__opt) + { + return !__opt->key && !__opt->name && !__opt->doc && !__opt->group; + } +--- argp-standalone-1.4-test2/argp-parse.c.orig 2006-01-06 02:47:48.000000000 +0100 ++++ argp-standalone-1.4-test2/argp-parse.c 2006-01-06 02:48:16.000000000 +0100 +@@ -1290,13 +1290,13 @@ + /* Defined here, in case a user is not inlining the definitions in + * argp.h */ + void +-__argp_usage (__const struct argp_state *__state) __THROW ++__argp_usage (__const struct argp_state *__state) + { + __argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE); + } + + int +-__option_is_short (__const struct argp_option *__opt) __THROW ++__option_is_short (__const struct argp_option *__opt) + { + if (__opt->flags & OPTION_DOC) + return 0; +@@ -1310,7 +1310,7 @@ + } + + int +-__option_is_end (__const struct argp_option *__opt) __THROW ++__option_is_end (__const struct argp_option *__opt) + { + return !__opt->key && !__opt->name && !__opt->doc && !__opt->group; + } diff --git a/package/argp-standalone/0002-isprint.patch b/package/argp-standalone/0002-isprint.patch new file mode 100644 index 00000000..9c08366f --- /dev/null +++ b/package/argp-standalone/0002-isprint.patch @@ -0,0 +1,45 @@ +Subject: restrict value range passed to isprint function + +According to C standards isprint argument shall be representable as an +unsigned char or be equal to EOF, otherwise the behaviour is undefined. + +Passing arbitrary ints leads to segfault in nm program from elfutils. + +Restrict isprint argument range to values representable by unsigned char. + +Signed-off-by: Max Filippov +--- +Index: b/argp.h +=================================================================== +--- a/argp.h ++++ b/argp.h +@@ -23,6 +23,7 @@ + + #include + #include ++#include + + #define __need_error_t + #include +@@ -577,7 +578,7 @@ + else + { + int __key = __opt->key; +- return __key > 0 && isprint (__key); ++ return __key > 0 && __key <= UCHAR_MAX && isprint (__key); + } + } + +Index: b/argp-parse.c +=================================================================== +--- a/argp-parse.c ++++ b/argp-parse.c +@@ -1292,7 +1292,7 @@ + int __key = __opt->key; + /* FIXME: whether or not a particular key implies a short option + * ought not to be locale dependent. */ +- return __key > 0 && isprint (__key); ++ return __key > 0 && __key <= UCHAR_MAX && isprint (__key); + } + } + diff --git a/package/argp-standalone/0003-fix_build_with_c99_compilers.patch b/package/argp-standalone/0003-fix_build_with_c99_compilers.patch new file mode 100644 index 00000000..56b753b6 --- /dev/null +++ b/package/argp-standalone/0003-fix_build_with_c99_compilers.patch @@ -0,0 +1,68 @@ +From b2dfa011a3fdcb7d22764d143517d0fbd1c2a201 Mon Sep 17 00:00:00 2001 +From: Emmanuel Dreyfus +Date: Wed, 22 Jan 2014 14:47:23 +0100 +Subject: [PATCH] Fix build with c99 compilers + +BUG: 764655 +Change-Id: If5dfdc9c7427bd3d39d8da8f79e33ae2da6a3137 +Signed-off-by: Emmanuel Dreyfus +Reviewed-on: http://review.gluster.org/6034 +Reviewed-by: Harshavardhana +Tested-by: Gluster Build System +--- + +diff --git a/argp-fmtstream.c b/argp-fmtstream.c +index 7f79285..494b6b3 100644 +--- a/argp-fmtstream.c ++++ b/argp-fmtstream.c +@@ -389,6 +389,7 @@ + weak_alias (__argp_fmtstream_printf, argp_fmtstream_printf) + #endif + ++#if __STDC_VERSION__ - 199900L < 1 + /* Duplicate the inline definitions in argp-fmtstream.h, for compilers + * that don't do inlining. */ + size_t +@@ -471,5 +472,6 @@ + __argp_fmtstream_update (__fs); + return __fs->point_col >= 0 ? __fs->point_col : 0; + } ++#endif /* __STDC_VERSION__ - 199900L < 1 */ + + #endif /* !ARGP_FMTSTREAM_USE_LINEWRAP */ +diff --git a/argp-fmtstream.h b/argp-fmtstream.h +index e797b11..828f435 100644 +--- a/argp-fmtstream.h ++++ b/argp-fmtstream.h +@@ -153,6 +153,7 @@ + __const char *__fmt, ...) + PRINTF_STYLE(2,3); + ++#if __STDC_VERSION__ - 199900L < 1 + extern int __argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch); + extern int argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch); + +@@ -163,6 +164,7 @@ + __const char *__str, size_t __len); + extern size_t argp_fmtstream_write (argp_fmtstream_t __fs, + __const char *__str, size_t __len); ++#endif /* __STDC_VERSION__ - 199900L < 1 */ + + /* Access macros for various bits of state. */ + #define argp_fmtstream_lmargin(__fs) ((__fs)->lmargin) +@@ -172,6 +174,7 @@ + #define __argp_fmtstream_rmargin argp_fmtstream_rmargin + #define __argp_fmtstream_wmargin argp_fmtstream_wmargin + ++#if __STDC_VERSION__ - 199900L < 1 + /* Set __FS's left margin to LMARGIN and return the old value. */ + extern size_t argp_fmtstream_set_lmargin (argp_fmtstream_t __fs, + size_t __lmargin); +@@ -193,6 +196,7 @@ + /* Return the column number of the current output point in __FS. */ + extern size_t argp_fmtstream_point (argp_fmtstream_t __fs); + extern size_t __argp_fmtstream_point (argp_fmtstream_t __fs); ++#endif /* __STDC_VERSION__ - 199900L < 1 */ + + /* Internal routines. */ + extern void _argp_fmtstream_update (argp_fmtstream_t __fs); diff --git a/package/argp-standalone/Config.in b/package/argp-standalone/Config.in new file mode 100644 index 00000000..3319dd94 --- /dev/null +++ b/package/argp-standalone/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_ARGP_STANDALONE + bool "argp-standalone" + # glibc provides its own argp implementation. + depends on !BR2_TOOLCHAIN_USES_GLIBC + help + Glibc hierarchical argument parsing standalone library. + + http://www.lysator.liu.se/~nisse/misc/ diff --git a/package/argp-standalone/argp-standalone.hash b/package/argp-standalone/argp-standalone.hash new file mode 100644 index 00000000..c780f9e5 --- /dev/null +++ b/package/argp-standalone/argp-standalone.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +sha256 dec79694da1319acd2238ce95df57f3680fea2482096e483323fddf3d818d8be argp-standalone-1.3.tar.gz + +# License file +sha256 bbb8919aa520069b0234faf5e83a94052d278419ffe97ca8e843ecc9b212d1ab argp.h diff --git a/package/argp-standalone/argp-standalone.mk b/package/argp-standalone/argp-standalone.mk new file mode 100644 index 00000000..651bc400 --- /dev/null +++ b/package/argp-standalone/argp-standalone.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# argp-standalone +# +################################################################################ + +ARGP_STANDALONE_VERSION = 1.3 +ARGP_STANDALONE_SITE = http://www.lysator.liu.se/~nisse/archive +ARGP_STANDALONE_INSTALL_STAGING = YES +ARGP_STANDALONE_LICENSE = LGPL-2.0+ +ARGP_STANDALONE_LICENSE_FILES = argp.h + +ARGP_STANDALONE_CONF_ENV = \ + CFLAGS="$(TARGET_CFLAGS) -fPIC -fgnu89-inline" + +define ARGP_STANDALONE_INSTALL_STAGING_CMDS + $(INSTALL) -D $(@D)/libargp.a $(STAGING_DIR)/usr/lib/libargp.a + $(INSTALL) -D $(@D)/argp.h $(STAGING_DIR)/usr/include/argp.h +endef + +define ARGP_STANDALONE_INSTALL_TARGET_CMDS + $(INSTALL) -D $(@D)/libargp.a $(TARGET_DIR)/usr/lib/libargp.a + $(INSTALL) -D $(@D)/argp.h $(TARGET_DIR)/usr/include/argp.h +endef + +$(eval $(autotools-package)) diff --git a/package/argparse/Config.in b/package/argparse/Config.in new file mode 100644 index 00000000..d02b1912 --- /dev/null +++ b/package/argparse/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_ARGPARSE + bool "argparse" + help + Argparse is a feature-rich command line parser for Lua + inspired by argparse for Python. Argparse supports + positional arguments, options, flags, optional arguments, + subcommands and more. Argparse automatically generates + usage, help and error messages. + + https://github.com/luarocks/argparse diff --git a/package/argparse/argparse.hash b/package/argparse/argparse.hash new file mode 100644 index 00000000..fd7c48ea --- /dev/null +++ b/package/argparse/argparse.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 ea30d0643586a20aeb6349ca8cb7db63aefc21d9aa007c7b7168a7c564817879 argparse-0.7.1-1.src.rock +sha256 9a918f21485b2a4529c901491d9101392f03586d65ad5b024a4445ebc1dc37b4 argparse-0.7.1/LICENSE diff --git a/package/argparse/argparse.mk b/package/argparse/argparse.mk new file mode 100644 index 00000000..d719e67d --- /dev/null +++ b/package/argparse/argparse.mk @@ -0,0 +1,11 @@ +################################################################################ +# +# argparse +# +################################################################################ + +ARGPARSE_VERSION = 0.7.1-1 +ARGPARSE_LICENSE = MIT +ARGPARSE_LICENSE_FILES = $(ARGPARSE_SUBDIR)/LICENSE + +$(eval $(luarocks-package)) diff --git a/package/argus/Config.in b/package/argus/Config.in new file mode 100644 index 00000000..7a7d2b65 --- /dev/null +++ b/package/argus/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_ARGUS + bool "argus" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBPCAP + select BR2_PACKAGE_LIBTIRPC if !BR2_TOOLCHAIN_HAS_NATIVE_RPC + help + A Real Time Flow Monitor-based audit engine. + + http://qosient.com/argus/ + +comment "argus needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU diff --git a/package/argus/argus.hash b/package/argus/argus.hash new file mode 100644 index 00000000..b3196cce --- /dev/null +++ b/package/argus/argus.hash @@ -0,0 +1,6 @@ +# From http://qosient.com/argus/src/argus-3.0.8.2.tar.gz.md5 +md5 eaf5f5ec66569e556392802a70ef9ca5 argus-3.0.8.2.tar.gz + +# Locally computed +sha256 ca4e3bd5b9d4a8ff7c01cc96d1bffd46dbd6321237ec94c52f8badd51032eeff argus-3.0.8.2.tar.gz +sha256 c68221f7207486bfce863fada4ba9b2aaf4adc9e1c672f965ae98e88143e5f16 README diff --git a/package/argus/argus.mk b/package/argus/argus.mk new file mode 100644 index 00000000..0441df49 --- /dev/null +++ b/package/argus/argus.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# argus +# +################################################################################ + +ARGUS_VERSION = 3.0.8.2 +ARGUS_SITE = http://qosient.com/argus/src +ARGUS_DEPENDENCIES = libpcap +ARGUS_CONF_ENV = arg_cv_sys_errlist=yes +# Code is really v2+ though COPYING is v3 so ship README to avoid confusion +ARGUS_LICENSE = GPL-2.0+ +ARGUS_LICENSE_FILES = README + +ifeq ($(BR2_PACKAGE_LIBTIRPC),y) +ARGUS_DEPENDENCIES += libtirpc host-pkgconf +ARGUS_CONF_ENV += \ + CFLAGS="$(TARGET_CFLAGS) `$(PKG_CONFIG_HOST_BINARY) --cflags libtirpc`" \ + LIBS="`$(PKG_CONFIG_HOST_BINARY) --libs libtirpc`" +endif + +$(eval $(autotools-package)) diff --git a/package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.hash b/package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.hash new file mode 100644 index 00000000..b18e56c1 --- /dev/null +++ b/package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.hash @@ -0,0 +1,2 @@ +# Locally calculated +sha256 ac952d89ae0fc3543e81099e7d34917efc621f5def112eee843fd1ce755eca8c gcc-arm-9.2-2019.12-x86_64-arm-none-eabi.tar.xz diff --git a/package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.mk b/package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.mk new file mode 100644 index 00000000..d7088892 --- /dev/null +++ b/package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# arm-gnu-a-toolchain +# +################################################################################ + +ARM_GNU_A_TOOLCHAIN_VERSION = 9.2-2019.12 +ARM_GNU_A_TOOLCHAIN_SITE = https://developer.arm.com/-/media/Files/downloads/gnu-a/$(ARM_GNU_A_TOOLCHAIN_VERSION)/binrel +ARM_GNU_A_TOOLCHAIN_SOURCE = gcc-arm-$(ARM_GNU_A_TOOLCHAIN_VERSION)-x86_64-arm-none-eabi.tar.xz +ARM_GNU_A_TOOLCHAIN_LICENSE = GPL-3.0+ + +HOST_ARM_GNU_A_TOOLCHAIN_INSTALL_DIR = $(HOST_DIR)/opt/gcc-arm-none-eabi + +define HOST_ARM_GNU_A_TOOLCHAIN_INSTALL_CMDS + rm -rf $(HOST_ARM_GNU_A_TOOLCHAIN_INSTALL_DIR) + mkdir -p $(HOST_ARM_GNU_A_TOOLCHAIN_INSTALL_DIR) + cp -rf $(@D)/* $(HOST_ARM_GNU_A_TOOLCHAIN_INSTALL_DIR)/ + + mkdir -p $(HOST_DIR)/bin + cd $(HOST_DIR)/bin && \ + for i in ../opt/gcc-arm-none-eabi/bin/*; do \ + ln -sf $$i; \ + done +endef + +$(eval $(host-generic-package)) diff --git a/package/armadillo/Config.in b/package/armadillo/Config.in new file mode 100644 index 00000000..b2b61a32 --- /dev/null +++ b/package/armadillo/Config.in @@ -0,0 +1,20 @@ +comment "armadillo needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + depends on !BR2_powerpc + depends on !BR2_m68k_cf + +comment "armadillo needs a glibc toolchain w/ C++" + depends on BR2_powerpc + depends on !BR2_INSTALL_LIBSTDCPP || BR2_TOOLCHAIN_USES_UCLIBC + +config BR2_PACKAGE_ARMADILLO + bool "armadillo" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_powerpc || BR2_TOOLCHAIN_USES_GLIBC # clapack + depends on !BR2_m68k_cf # clapack + select BR2_PACKAGE_CLAPACK + help + Armadillo: An Open Source C++ Linear Algebra Library for + Fast Prototyping and Computationally Intensive Experiments. + + http://arma.sourceforge.net/ diff --git a/package/armadillo/armadillo.hash b/package/armadillo/armadillo.hash new file mode 100644 index 00000000..cc91fb45 --- /dev/null +++ b/package/armadillo/armadillo.hash @@ -0,0 +1,4 @@ +# Locally computed: +sha256 d78658c9442addf7f718eb05881150ee3ec25604d06dd3af4942422b3ce26d05 armadillo-9.900.2.tar.xz +# License files, locally calculated +sha256 3ddf9be5c28fe27dad143a5dc76eea25222ad1dd68934a047064e56ed2fa40c5 LICENSE.txt diff --git a/package/armadillo/armadillo.mk b/package/armadillo/armadillo.mk new file mode 100644 index 00000000..624b842e --- /dev/null +++ b/package/armadillo/armadillo.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# armadillo +# +################################################################################ + +ARMADILLO_VERSION = 9.900.2 +ARMADILLO_SOURCE = armadillo-$(ARMADILLO_VERSION).tar.xz +ARMADILLO_SITE = https://downloads.sourceforge.net/project/arma +ARMADILLO_DEPENDENCIES = clapack +ARMADILLO_INSTALL_STAGING = YES +ARMADILLO_LICENSE = Apache-2.0 +ARMADILLO_LICENSE_FILES = LICENSE.txt + +ARMADILLO_CONF_OPTS = -DDETECT_HDF5=false + +$(eval $(cmake-package)) diff --git a/package/armbian-firmware/Config.in b/package/armbian-firmware/Config.in new file mode 100644 index 00000000..7c5f6ba1 --- /dev/null +++ b/package/armbian-firmware/Config.in @@ -0,0 +1,26 @@ +config BR2_PACKAGE_ARMBIAN_FIRMWARE + bool "armbian-firmware" + help + This package enables access to various firmware + blobs from the Armbian firmware repository. + + https://github.com/armbian/firmware + +if BR2_PACKAGE_ARMBIAN_FIRMWARE + +config BR2_PACKAGE_ARMBIAN_FIRMWARE_AP6212 + bool "AP6212 WiFi/BT" + help + Firmware files for AP6212 WiFi/BT combo chip. + +config BR2_PACKAGE_ARMBIAN_FIRMWARE_AP6256 + bool "AP6256 WiFi/BT" + help + Firmware files for AP6256 WiFi/BT combo chip. + +config BR2_PACKAGE_ARMBIAN_FIRMWARE_XR819 + bool "XR819 WiFi" + help + Firmware files for XR819 WiFi SDIO chip. + +endif diff --git a/package/armbian-firmware/armbian-firmware.hash b/package/armbian-firmware/armbian-firmware.hash new file mode 100644 index 00000000..ceefafd9 --- /dev/null +++ b/package/armbian-firmware/armbian-firmware.hash @@ -0,0 +1,2 @@ +# Locally calculated +sha256 a370a6aeb30f12a17f8d47c81a4d81aa822b9408589305a4d6a67d544280520d armbian-firmware-70a08503ac9e765f5d1ccf4fa3e825db0751e53e-br1.tar.gz diff --git a/package/armbian-firmware/armbian-firmware.mk b/package/armbian-firmware/armbian-firmware.mk new file mode 100644 index 00000000..0ed06902 --- /dev/null +++ b/package/armbian-firmware/armbian-firmware.mk @@ -0,0 +1,61 @@ +################################################################################ +# +# armbian-firmware +# +################################################################################ + +ARMBIAN_FIRMWARE_VERSION = 70a08503ac9e765f5d1ccf4fa3e825db0751e53e +ARMBIAN_FIRMWARE_SITE = https://github.com/armbian/firmware +ARMBIAN_FIRMWARE_SITE_METHOD = git + +# AP6212 WiFi/BT combo firmware +ifeq ($(BR2_PACKAGE_ARMBIAN_FIRMWARE_AP6212),y) +ARMBIAN_FIRMWARE_DIRS += ap6212 +endif + +# AP6256 WiFi/BT combo firmware +ifeq ($(BR2_PACKAGE_ARMBIAN_FIRMWARE_AP6256),y) +ARMBIAN_FIRMWARE_FILES += \ + brcm/BCM4345C5.hcd \ + brcm/brcmfmac43456-sdio.bin \ + brcm/brcmfmac43456-sdio.txt +endif + +# XR819 WiFi firmware +ifeq ($(BR2_PACKAGE_ARMBIAN_FIRMWARE_XR819),y) +ARMBIAN_FIRMWARE_FILES += \ + xr819/boot_xr819.bin \ + xr819/fw_xr819.bin \ + xr819/sdd_xr819.bin +endif + +ifneq ($(ARMBIAN_FIRMWARE_FILES),) +define ARMBIAN_FIRMWARE_INSTALL_FILES + cd $(@D) && \ + $(TAR) cf install.tar $(sort $(ARMBIAN_FIRMWARE_FILES)) && \ + $(TAR) xf install.tar -C $(TARGET_DIR)/lib/firmware +endef +endif + +ifneq ($(ARMBIAN_FIRMWARE_DIRS),) +# We need to rm -rf the destination directory to avoid copying +# into it in itself, should we re-install the package. +define ARMBIAN_FIRMWARE_INSTALL_DIRS + $(foreach d,$(ARMBIAN_FIRMWARE_DIRS), \ + rm -rf $(TARGET_DIR)/lib/firmware/$(d); \ + cp -a $(@D)/$(d) $(TARGET_DIR)/lib/firmware/$(d)$(sep)) +endef +endif + +ifneq ($(ARMBIAN_FIRMWARE_FILES)$(ARMBIAN_FIRMWARE_DIRS),) +ARMBIAN_FIRMWARE_LICENSE = PROPRIETARY +ARMBIAN_FIRMWARE_REDISTRIBUTE = NO +endif + +define ARMBIAN_FIRMWARE_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/lib/firmware + $(ARMBIAN_FIRMWARE_INSTALL_FILES) + $(ARMBIAN_FIRMWARE_INSTALL_DIRS) +endef + +$(eval $(generic-package)) diff --git a/package/arp-scan/Config.in b/package/arp-scan/Config.in new file mode 100644 index 00000000..ed70b395 --- /dev/null +++ b/package/arp-scan/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_ARP_SCAN + bool "arp-scan" + select BR2_PACKAGE_LIBPCAP + help + The ARP scanner + + arp-scan is a command-line tool that uses the ARP protocol to + discover and fingerprint IP hosts on the local network. + + https://github.com/royhills/arp-scan diff --git a/package/arp-scan/arp-scan.hash b/package/arp-scan/arp-scan.hash new file mode 100644 index 00000000..562deb8f --- /dev/null +++ b/package/arp-scan/arp-scan.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 e03c36e4933c655bd0e4a841272554a347cd0136faf42c4a6564059e0761c039 arp-scan-1.9.7.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/arp-scan/arp-scan.mk b/package/arp-scan/arp-scan.mk new file mode 100644 index 00000000..cc1efe84 --- /dev/null +++ b/package/arp-scan/arp-scan.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# arp-scan +# +################################################################################ + +ARP_SCAN_VERSION = 1.9.7 +ARP_SCAN_SITE = $(call github,royhills,arp-scan,$(ARP_SCAN_VERSION)) +ARP_SCAN_LICENSE = GPL-3.0+ +ARP_SCAN_LICENSE_FILES = COPYING +ARP_SCAN_DEPENDENCIES = libpcap +ARP_SCAN_AUTORECONF = YES + +ifeq ($(BR2_STATIC_LIBS),y) +ARP_SCAN_CONF_OPTS = LIBS="`$(STAGING_DIR)/usr/bin/pcap-config --static --additional-libs`" +endif + +ARP_SCAN_CONF_ENV = pgac_cv_snprintf_long_long_int_format='%lld' + +$(eval $(autotools-package)) diff --git a/package/arptables/0001-Fix-musl-build-issue.patch b/package/arptables/0001-Fix-musl-build-issue.patch new file mode 100644 index 00000000..e9419b0a --- /dev/null +++ b/package/arptables/0001-Fix-musl-build-issue.patch @@ -0,0 +1,71 @@ +From cbf84a0bc377c6a368d30571f37ebfab27784697 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=B6rg=20Krause?= +Date: Wed, 2 Dec 2015 04:57:33 +0100 +Subject: [PATCH 4/4] Fix musl build issue +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Due to clashes in the namespace between the Linux Kernel headers and the +netinet headers building arptables with the musl C library fails. + +Best advice from the musl developers is to not include both headers in a +userspace tool (see the thread on the musl mailing list [1], especially [2]). + +Since arptables only requires a few definitions from the Linux Kernel headers +we opt-out the clashing header files and define the needed definitions. + +[1] http://www.openwall.com/lists/musl/2012/10/09/1 +[2] http://www.openwall.com/lists/musl/2012/10/11/1 + +Signed-off-by: Jörg Krause +--- + extensions/arpt_CLASSIFY.c | 7 +++++++ + include/linux/netfilter_arp.h | 11 +++++++++++ + 2 files changed, 18 insertions(+) + +diff --git a/extensions/arpt_CLASSIFY.c b/extensions/arpt_CLASSIFY.c +index cb5770b..c58129f 100644 +--- a/extensions/arpt_CLASSIFY.c ++++ b/extensions/arpt_CLASSIFY.c +@@ -21,7 +21,14 @@ + #include + #include + #include ++ ++#ifdef __KERNEL__ + #include ++#else ++struct xt_classify_target_info { ++ uint32_t priority; ++}; ++#endif + + #define TC_H_MAJ_MASK (0xFFFF0000U) + #define TC_H_MIN_MASK (0x0000FFFFU) +diff --git a/include/linux/netfilter_arp.h b/include/linux/netfilter_arp.h +index 92bc6dd..2a63e82 100644 +--- a/include/linux/netfilter_arp.h ++++ b/include/linux/netfilter_arp.h +@@ -5,7 +5,18 @@ + * (C)2002 Rusty Russell IBM -- This code is GPL. + */ + ++#ifdef __KERNEL__ + #include ++#else ++/* Responses from hook functions. */ ++#define NF_DROP 0 ++#define NF_ACCEPT 1 ++#define NF_STOLEN 2 ++#define NF_QUEUE 3 ++#define NF_REPEAT 4 ++#define NF_STOP 5 ++#define NF_MAX_VERDICT NF_STOP ++#endif + + /* There is no PF_ARP. */ + #define NF_ARP 0 +-- +2.6.2 + diff --git a/package/arptables/Config.in b/package/arptables/Config.in new file mode 100644 index 00000000..aeb7250a --- /dev/null +++ b/package/arptables/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_ARPTABLES + bool "arptables-legacy" + depends on BR2_USE_MMU # needs fork() + help + Legacy tool to set up, maintain, and inspect the tables of ARP + rules. + + A more uptodate client of the arptables tool is provided in + the iptables package. The new tool was formerly known as + arptables-compat. + + http://git.netfilter.org/arptables diff --git a/package/arptables/arptables.hash b/package/arptables/arptables.hash new file mode 100644 index 00000000..8366cea4 --- /dev/null +++ b/package/arptables/arptables.hash @@ -0,0 +1,5 @@ +# From http://ftp.netfilter.org/pub/arptables/arptables-0.0.5.tar.gz.sha256sum +sha256 4f9a0656ce5c90868f551cd4deeb2d04f33899667e1fb2818b64e432fe8f629c arptables-0.0.5.tar.gz + +# Hash for license file +sha256 ebdb8ae564c952792017ec680e2edd30443642216eb9f8a3d8fa166c0cb628c1 COPYING diff --git a/package/arptables/arptables.mk b/package/arptables/arptables.mk new file mode 100644 index 00000000..320a33bb --- /dev/null +++ b/package/arptables/arptables.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# arptables +# +################################################################################ + +ARPTABLES_VERSION = 0.0.5 +ARPTABLES_SITE = http://ftp.netfilter.org/pub/arptables +ARPTABLES_LICENSE = GPL-2.0+ +ARPTABLES_LICENSE_FILES = COPYING + +define ARPTABLES_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + CC="$(TARGET_CC)" COPT_FLAGS="$(TARGET_CFLAGS)" +endef + +define ARPTABLES_INSTALL_TARGET_CMDS + $(INSTALL) -m 755 -D $(@D)/arptables-legacy \ + $(TARGET_DIR)/usr/sbin/arptables-legacy +endef + +$(eval $(generic-package)) diff --git a/package/ascii-invaders/Config.in b/package/ascii-invaders/Config.in new file mode 100644 index 00000000..f02ab749 --- /dev/null +++ b/package/ascii-invaders/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_ASCII_INVADERS + bool "ascii_invaders" + select BR2_PACKAGE_NCURSES + help + An ASCII-art game like Space Invaders using ncurses. + + https://github.com/macdice/ascii-invaders diff --git a/package/ascii-invaders/ascii-invaders.hash b/package/ascii-invaders/ascii-invaders.hash new file mode 100644 index 00000000..f08fc2a7 --- /dev/null +++ b/package/ascii-invaders/ascii-invaders.hash @@ -0,0 +1,5 @@ +# Locally calculated +sha512 326708ffc2c277e04575920c58f6a267e0bf46f8d2a3dbca9b5c317fb01006d4f673ab35f92f292549cc52dbee4400a84c85478eb81b9bd7703689a705547bc7 ascii-invaders-1.0.1.tar.gz + +# Hash for license file +sha512 1e455684996d7733b2f1ccd4606d034694d16ceff6ede6125d7f1537d20dabe05976cca4cef5cbf6c31352cbd62a515fd8e34a2ffb54dae1181c1116b24c6cf7 LICENSE diff --git a/package/ascii-invaders/ascii-invaders.mk b/package/ascii-invaders/ascii-invaders.mk new file mode 100644 index 00000000..a5a25d7a --- /dev/null +++ b/package/ascii-invaders/ascii-invaders.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# ASCII-Invaders +# +################################################################################ + +ASCII_INVADERS_VERSION = 1.0.1 +ASCII_INVADERS_SITE = $(call github,macdice,ascii-invaders,v$(ASCII_INVADERS_VERSION)) +ASCII_INVADERS_DEPENDENCIES = ncurses +ASCII_INVADERS_LICENSE = GPL-2.0+ +ASCII_INVADERS_LICENSE_FILES = LICENSE + +# For compiling statically, libraries must be specified after the object file +define ASCII_INVADERS_POST_EXTRACT_FIXUP + sed -i 's/\$$(LIBS) invaders.o/invaders.o \$$(LIBS)/' $(@D)/Makefile +endef +ASCII_INVADERS_POST_EXTRACT_HOOKS += ASCII_INVADERS_POST_EXTRACT_FIXUP + +define ASCII_INVADERS_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) +endef + +define ASCII_INVADERS_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/ascii_invaders $(TARGET_DIR)/usr/bin/ascii_invaders +endef + +$(eval $(generic-package)) diff --git a/package/asn1c/Config.in.host b/package/asn1c/Config.in.host new file mode 100644 index 00000000..951f5f66 --- /dev/null +++ b/package/asn1c/Config.in.host @@ -0,0 +1,11 @@ +config BR2_PACKAGE_HOST_ASN1C + bool "host asn1c" + help + ASN.1 stands for Abstract Syntax Notation One and allows + to describe complex data structures independently of any + particular programming language. + + The asn1c is a free, open source compiler of ASN.1 + specifications into C source code. + + http://lionet.info/asn1c diff --git a/package/asn1c/asn1c.hash b/package/asn1c/asn1c.hash new file mode 100644 index 00000000..abc4d77e --- /dev/null +++ b/package/asn1c/asn1c.hash @@ -0,0 +1,5 @@ +# Locally computed: +sha256 8007440b647ef2dd9fb73d931c33ac11764e6afb2437dbe638bb4e5fc82386b9 asn1c-0.9.28.tar.gz + +# Hash for license files: +sha256 bcc636802a52ace2255212be15fb707084af87061b5cfd37eb84dcf6a02cc48b LICENSE diff --git a/package/asn1c/asn1c.mk b/package/asn1c/asn1c.mk new file mode 100644 index 00000000..a5fb9ccf --- /dev/null +++ b/package/asn1c/asn1c.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# asn1c +# +################################################################################ + +ASN1C_VERSION = 0.9.28 +ASN1C_SITE = https://github.com/vlm/asn1c/releases/download/v$(ASN1C_VERSION) +ASN1C_LICENSE = BSD-2-Clause +ASN1C_LICENSE_FILES = LICENSE +ASN1C_CPE_ID_VENDOR = asn1c_project + +$(eval $(host-autotools-package)) diff --git a/package/assimp/0001-Fix-FBXConverter-use-proper-64-bit-constant.patch b/package/assimp/0001-Fix-FBXConverter-use-proper-64-bit-constant.patch new file mode 100644 index 00000000..1b23d663 --- /dev/null +++ b/package/assimp/0001-Fix-FBXConverter-use-proper-64-bit-constant.patch @@ -0,0 +1,37 @@ +From 30a2ecc7939449f235282eb6de42e367fc5b1867 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Thu, 14 Jan 2016 22:13:15 +0100 +Subject: [PATCH] Fix FBXConverter: use proper 64-bit constant + +Use proper 64-bit constant for CONVERT_FBX_TIME(time) conversion, fixes: + + code/FBXConverter.cpp:2025: error: integer constant is too large for 'long' type + code/FBXConverter.cpp:2026: error: integer constant is too large for 'long' type + code/FBXConverter.cpp:2794: error: integer constant is too large for 'long' type + code/FBXConverter.cpp:2868: error: integer constant is too large for 'long' type + code/FBXConverter.cpp:2878: error: integer constant is too large for 'long' type + code/FBXConverter.cpp:2888: error: integer constant is too large for 'long' type + +Signed-off-by: Peter Seiderer +[Rebased on 5.0.1] +Signed-off-by: Peter Seiderer +--- + code/FBX/FBXConverter.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/code/FBX/FBXConverter.cpp b/code/FBXConverter.cpp +index e0c6b9c..b1e9a71 100644 +--- a/code/FBX/FBXConverter.cpp ++++ b/code/FBX/FBXConverter.cpp +@@ -67,7 +67,7 @@ namespace FBX { + + #define MAGIC_NODE_TAG "_$AssimpFbx$" + +-#define CONVERT_FBX_TIME(time) static_cast(time) / 46186158000L ++#define CONVERT_FBX_TIME(time) static_cast(time) / 46186158000LL + + // XXX vc9's debugger won't step into anonymous namespaces + //namespace { +-- +2.1.4 + diff --git a/package/assimp/0002-closes-2733-update-of-zlip-to-fix-gcc-build-for-v9-2-0-32-bit.patch b/package/assimp/0002-closes-2733-update-of-zlip-to-fix-gcc-build-for-v9-2-0-32-bit.patch new file mode 100644 index 00000000..4b86cc58 --- /dev/null +++ b/package/assimp/0002-closes-2733-update-of-zlip-to-fix-gcc-build-for-v9-2-0-32-bit.patch @@ -0,0 +1,1638 @@ +From f78446b14aff46db2ef27d062a275b6a01fd68b1 Mon Sep 17 00:00:00 2001 +From: Kim Kulling +Date: Tue, 19 Nov 2019 20:30:40 +0100 +Subject: [PATCH] closes https://github.com/assimp/assimp/issues/2733: update + of zlip to fix gcc build for v9.2.0 32 bit + +[Retrieved (and updated to remove .gitignore and appveyor.yml) from: +https://github.com/assimp/assimp/commit/f78446b14aff46db2ef27d062a275b6a01fd68b1] +Signed-off-by: Fabrice Fontaine +--- + contrib/zip/.gitignore | 2 + + contrib/zip/CMakeLists.txt | 83 +++++- + contrib/zip/README.md | 12 +- + contrib/zip/appveyor.yml | 2 +- + contrib/zip/src/miniz.h | 457 ++++++++++++++++++++++++++++---- + contrib/zip/src/zip.c | 62 +++-- + contrib/zip/src/zip.h | 457 ++++++++++++++++---------------- + contrib/zip/test/CMakeLists.txt | 27 +- + contrib/zip/test/test.c | 38 ++- + contrib/zip/test/test_miniz.c | 25 +- + 10 files changed, 821 insertions(+), 344 deletions(-) + +diff --git a/contrib/zip/CMakeLists.txt b/contrib/zip/CMakeLists.txt +index b46dbb1db0..77916d2e14 100644 +--- a/contrib/zip/CMakeLists.txt ++++ b/contrib/zip/CMakeLists.txt +@@ -1,10 +1,14 @@ +-cmake_minimum_required(VERSION 2.8) +-project(zip) +-enable_language(C) ++cmake_minimum_required(VERSION 3.0) ++ ++project(zip ++ LANGUAGES C ++ VERSION "0.1.15") + set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) + ++option(CMAKE_DISABLE_TESTING "Disable test creation" OFF) ++ + if (MSVC) +- # Use secure functions by defaualt and suppress warnings about "deprecated" functions ++ # Use secure functions by default and suppress warnings about "deprecated" functions + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_NONSTDC_NO_WARNINGS=1 /D _CRT_SECURE_NO_WARNINGS=1") +@@ -12,28 +16,80 @@ elseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR + "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR + "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -Wall -Wextra -Werror -pedantic") ++ if(ENABLE_COVERAGE) ++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage") ++ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") ++ endif() + endif (MSVC) + + # zip + set(SRC src/miniz.h src/zip.h src/zip.c) + add_library(${PROJECT_NAME} ${SRC}) +-target_include_directories(${PROJECT_NAME} INTERFACE src) ++target_include_directories(${PROJECT_NAME} PUBLIC ++ $ ++ $ ++) + + # test + if (NOT CMAKE_DISABLE_TESTING) + enable_testing() + add_subdirectory(test) + find_package(Sanitizers) +- add_sanitizers(${PROJECT_NAME} test.exe) +- add_sanitizers(${PROJECT_NAME} test_miniz.exe) ++ add_sanitizers(${PROJECT_NAME} ${test_out} ${test_miniz_out}) + endif() + ++#### ++# Installation (https://github.com/forexample/package-example) { ++ ++set(CONFIG_INSTALL_DIR "lib/cmake/${PROJECT_NAME}") ++set(INCLUDE_INSTALL_DIR "include") ++ ++set(GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated") ++ ++# Configuration ++set(VERSION_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}ConfigVersion.cmake") ++set(PROJECT_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}Config.cmake") ++set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") ++set(NAMESPACE "${PROJECT_NAME}::") ++ ++# Include module with fuction 'write_basic_package_version_file' ++include(CMakePackageConfigHelpers) ++ ++# Note: PROJECT_VERSION is used as a VERSION ++write_basic_package_version_file( ++ "${VERSION_CONFIG}" COMPATIBILITY SameMajorVersion ++) ++ ++# Use variables: ++# * TARGETS_EXPORT_NAME ++# * PROJECT_NAME ++configure_package_config_file( ++ "cmake/Config.cmake.in" ++ "${PROJECT_CONFIG}" ++ INSTALL_DESTINATION "${CONFIG_INSTALL_DIR}" ++) ++ ++install( ++ FILES "${PROJECT_CONFIG}" "${VERSION_CONFIG}" ++ DESTINATION "${CONFIG_INSTALL_DIR}" ++) ++ ++install( ++ EXPORT "${TARGETS_EXPORT_NAME}" ++ NAMESPACE "${NAMESPACE}" ++ DESTINATION "${CONFIG_INSTALL_DIR}" ++) ++ ++# } ++ + install(TARGETS ${PROJECT_NAME} ++ EXPORT ${TARGETS_EXPORT_NAME} + RUNTIME DESTINATION bin + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib +- COMPONENT library) +-install(FILES ${PROJECT_SOURCE_DIR}/src/zip.h DESTINATION include) ++ INCLUDES DESTINATION ${INCLUDE_INSTALL_DIR} ++) ++install(FILES ${PROJECT_SOURCE_DIR}/src/zip.h DESTINATION ${INCLUDE_INSTALL_DIR}/zip) + + # uninstall target (https://gitlab.kitware.com/cmake/community/wikis/FAQ#can-i-do-make-uninstall-with-cmake) + if(NOT TARGET uninstall) +@@ -45,3 +101,12 @@ if(NOT TARGET uninstall) + add_custom_target(uninstall + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake) + endif() ++ ++find_package(Doxygen) ++if(DOXYGEN_FOUND) ++ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) ++ add_custom_target(doc ++ ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile ++ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} ++ COMMENT "Generating API documentation with Doxygen" VERBATIM) ++endif() +diff --git a/contrib/zip/README.md b/contrib/zip/README.md +index d5fb8cd203..14eb9a34c8 100644 +--- a/contrib/zip/README.md ++++ b/contrib/zip/README.md +@@ -71,7 +71,7 @@ int arg = 2; + zip_extract("foo.zip", "/tmp", on_extract_entry, &arg); + ``` + +-* Extract a zip entry into memory. ++* Extract a zip entry into memory. + ```c + void *buf = NULL; + size_t bufsize; +@@ -89,7 +89,7 @@ zip_close(zip); + free(buf); + ``` + +-* Extract a zip entry into memory (no internal allocation). ++* Extract a zip entry into memory (no internal allocation). + ```c + unsigned char *buf; + size_t bufsize; +@@ -110,7 +110,7 @@ zip_close(zip); + free(buf); + ``` + +-* Extract a zip entry into memory using callback. ++* Extract a zip entry into memory using callback. + ```c + struct buffer_t { + char *data; +@@ -144,7 +144,7 @@ free(buf.data); + ``` + + +-* Extract a zip entry into a file. ++* Extract a zip entry into a file. + ```c + struct zip_t *zip = zip_open("foo.zip", 0, 'r'); + { +@@ -157,7 +157,7 @@ struct zip_t *zip = zip_open("foo.zip", 0, 'r'); + zip_close(zip); + ``` + +-* List of all zip entries ++* List of all zip entries + ```c + struct zip_t *zip = zip_open("foo.zip", 0, 'r'); + int i, n = zip_total_entries(zip); +@@ -174,7 +174,7 @@ for (i = 0; i < n; ++i) { + zip_close(zip); + ``` + +-## Bindings ++# Bindings + Compile zip library as a dynamic library. + ```shell + $ mkdir build +diff --git a/contrib/zip/src/miniz.h b/contrib/zip/src/miniz.h +index 2c27a94d8d..c4fcfb83e6 100644 +--- a/contrib/zip/src/miniz.h ++++ b/contrib/zip/src/miniz.h +@@ -221,6 +221,7 @@ + #ifndef MINIZ_HEADER_INCLUDED + #define MINIZ_HEADER_INCLUDED + ++#include + #include + + // Defines to completely disable specific portions of miniz.c: +@@ -284,7 +285,8 @@ + /* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES only if not set */ + #if !defined(MINIZ_USE_UNALIGNED_LOADS_AND_STORES) + #if MINIZ_X86_OR_X64_CPU +-/* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient integer loads and stores from unaligned addresses. */ ++/* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient ++ * integer loads and stores from unaligned addresses. */ + #define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1 + #define MINIZ_UNALIGNED_USE_MEMCPY + #else +@@ -354,6 +356,44 @@ enum { + MZ_FIXED = 4 + }; + ++/* miniz error codes. Be sure to update mz_zip_get_error_string() if you add or ++ * modify this enum. */ ++typedef enum { ++ MZ_ZIP_NO_ERROR = 0, ++ MZ_ZIP_UNDEFINED_ERROR, ++ MZ_ZIP_TOO_MANY_FILES, ++ MZ_ZIP_FILE_TOO_LARGE, ++ MZ_ZIP_UNSUPPORTED_METHOD, ++ MZ_ZIP_UNSUPPORTED_ENCRYPTION, ++ MZ_ZIP_UNSUPPORTED_FEATURE, ++ MZ_ZIP_FAILED_FINDING_CENTRAL_DIR, ++ MZ_ZIP_NOT_AN_ARCHIVE, ++ MZ_ZIP_INVALID_HEADER_OR_CORRUPTED, ++ MZ_ZIP_UNSUPPORTED_MULTIDISK, ++ MZ_ZIP_DECOMPRESSION_FAILED, ++ MZ_ZIP_COMPRESSION_FAILED, ++ MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE, ++ MZ_ZIP_CRC_CHECK_FAILED, ++ MZ_ZIP_UNSUPPORTED_CDIR_SIZE, ++ MZ_ZIP_ALLOC_FAILED, ++ MZ_ZIP_FILE_OPEN_FAILED, ++ MZ_ZIP_FILE_CREATE_FAILED, ++ MZ_ZIP_FILE_WRITE_FAILED, ++ MZ_ZIP_FILE_READ_FAILED, ++ MZ_ZIP_FILE_CLOSE_FAILED, ++ MZ_ZIP_FILE_SEEK_FAILED, ++ MZ_ZIP_FILE_STAT_FAILED, ++ MZ_ZIP_INVALID_PARAMETER, ++ MZ_ZIP_INVALID_FILENAME, ++ MZ_ZIP_BUF_TOO_SMALL, ++ MZ_ZIP_INTERNAL_ERROR, ++ MZ_ZIP_FILE_NOT_FOUND, ++ MZ_ZIP_ARCHIVE_TOO_LARGE, ++ MZ_ZIP_VALIDATION_FAILED, ++ MZ_ZIP_WRITE_CALLBACK_FAILED, ++ MZ_ZIP_TOTAL_ERRORS ++} mz_zip_error; ++ + // Method + #define MZ_DEFLATED 8 + +@@ -696,6 +736,7 @@ typedef size_t (*mz_file_read_func)(void *pOpaque, mz_uint64 file_ofs, + void *pBuf, size_t n); + typedef size_t (*mz_file_write_func)(void *pOpaque, mz_uint64 file_ofs, + const void *pBuf, size_t n); ++typedef mz_bool (*mz_file_needs_keepalive)(void *pOpaque); + + struct mz_zip_internal_state_tag; + typedef struct mz_zip_internal_state_tag mz_zip_internal_state; +@@ -707,13 +748,27 @@ typedef enum { + MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED = 3 + } mz_zip_mode; + +-typedef struct mz_zip_archive_tag { ++typedef enum { ++ MZ_ZIP_TYPE_INVALID = 0, ++ MZ_ZIP_TYPE_USER, ++ MZ_ZIP_TYPE_MEMORY, ++ MZ_ZIP_TYPE_HEAP, ++ MZ_ZIP_TYPE_FILE, ++ MZ_ZIP_TYPE_CFILE, ++ MZ_ZIP_TOTAL_TYPES ++} mz_zip_type; ++ ++typedef struct { + mz_uint64 m_archive_size; + mz_uint64 m_central_directory_file_ofs; +- mz_uint m_total_files; ++ ++ /* We only support up to UINT32_MAX files in zip64 mode. */ ++ mz_uint32 m_total_files; + mz_zip_mode m_zip_mode; ++ mz_zip_type m_zip_type; ++ mz_zip_error m_last_error; + +- mz_uint m_file_offset_alignment; ++ mz_uint64 m_file_offset_alignment; + + mz_alloc_func m_pAlloc; + mz_free_func m_pFree; +@@ -722,6 +777,7 @@ typedef struct mz_zip_archive_tag { + + mz_file_read_func m_pRead; + mz_file_write_func m_pWrite; ++ mz_file_needs_keepalive m_pNeeds_keepalive; + void *m_pIO_opaque; + + mz_zip_internal_state *m_pState; +@@ -1263,6 +1319,9 @@ mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, + int strategy); + #endif // #ifndef MINIZ_NO_ZLIB_APIS + ++#define MZ_UINT16_MAX (0xFFFFU) ++#define MZ_UINT32_MAX (0xFFFFFFFFU) ++ + #ifdef __cplusplus + } + #endif +@@ -1311,6 +1370,11 @@ typedef unsigned char mz_validate_uint64[sizeof(mz_uint64) == 8 ? 1 : -1]; + ((mz_uint32)(((const mz_uint8 *)(p))[3]) << 24U)) + #endif + ++#define MZ_READ_LE64(p) \ ++ (((mz_uint64)MZ_READ_LE32(p)) | \ ++ (((mz_uint64)MZ_READ_LE32((const mz_uint8 *)(p) + sizeof(mz_uint32))) \ ++ << 32U)) ++ + #ifdef _MSC_VER + #define MZ_FORCEINLINE __forceinline + #elif defined(__GNUC__) +@@ -4160,6 +4224,17 @@ enum { + MZ_ZIP_LOCAL_DIR_HEADER_SIZE = 30, + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE = 46, + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE = 22, ++ ++ /* ZIP64 archive identifier and record sizes */ ++ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG = 0x06064b50, ++ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG = 0x07064b50, ++ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE = 56, ++ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE = 20, ++ MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID = 0x0001, ++ MZ_ZIP_DATA_DESCRIPTOR_ID = 0x08074b50, ++ MZ_ZIP_DATA_DESCRIPTER_SIZE64 = 24, ++ MZ_ZIP_DATA_DESCRIPTER_SIZE32 = 16, ++ + // Central directory header record offsets + MZ_ZIP_CDH_SIG_OFS = 0, + MZ_ZIP_CDH_VERSION_MADE_BY_OFS = 4, +@@ -4199,6 +4274,31 @@ enum { + MZ_ZIP_ECDH_CDIR_SIZE_OFS = 12, + MZ_ZIP_ECDH_CDIR_OFS_OFS = 16, + MZ_ZIP_ECDH_COMMENT_SIZE_OFS = 20, ++ ++ /* ZIP64 End of central directory locator offsets */ ++ MZ_ZIP64_ECDL_SIG_OFS = 0, /* 4 bytes */ ++ MZ_ZIP64_ECDL_NUM_DISK_CDIR_OFS = 4, /* 4 bytes */ ++ MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS = 8, /* 8 bytes */ ++ MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS = 16, /* 4 bytes */ ++ ++ /* ZIP64 End of central directory header offsets */ ++ MZ_ZIP64_ECDH_SIG_OFS = 0, /* 4 bytes */ ++ MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS = 4, /* 8 bytes */ ++ MZ_ZIP64_ECDH_VERSION_MADE_BY_OFS = 12, /* 2 bytes */ ++ MZ_ZIP64_ECDH_VERSION_NEEDED_OFS = 14, /* 2 bytes */ ++ MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS = 16, /* 4 bytes */ ++ MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS = 20, /* 4 bytes */ ++ MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS = 24, /* 8 bytes */ ++ MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS = 32, /* 8 bytes */ ++ MZ_ZIP64_ECDH_CDIR_SIZE_OFS = 40, /* 8 bytes */ ++ MZ_ZIP64_ECDH_CDIR_OFS_OFS = 48, /* 8 bytes */ ++ MZ_ZIP_VERSION_MADE_BY_DOS_FILESYSTEM_ID = 0, ++ MZ_ZIP_DOS_DIR_ATTRIBUTE_BITFLAG = 0x10, ++ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED = 1, ++ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG = 32, ++ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION = 64, ++ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED = 8192, ++ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_UTF8 = 1 << 11 + }; + + typedef struct { +@@ -4211,7 +4311,24 @@ struct mz_zip_internal_state_tag { + mz_zip_array m_central_dir; + mz_zip_array m_central_dir_offsets; + mz_zip_array m_sorted_central_dir_offsets; ++ ++ /* The flags passed in when the archive is initially opened. */ ++ uint32_t m_init_flags; ++ ++ /* MZ_TRUE if the archive has a zip64 end of central directory headers, etc. ++ */ ++ mz_bool m_zip64; ++ ++ /* MZ_TRUE if we found zip64 extended info in the central directory (m_zip64 ++ * will also be slammed to true too, even if we didn't find a zip64 end of ++ * central dir header, etc.) */ ++ mz_bool m_zip64_has_extended_info_fields; ++ ++ /* These fields are used by the file, FILE, memory, and memory/heap read/write ++ * helpers. */ + MZ_FILE *m_pFile; ++ mz_uint64 m_file_archive_start_ofs; ++ + void *m_pMem; + size_t m_mem_size; + size_t m_mem_capacity; +@@ -4363,6 +4480,13 @@ static mz_bool mz_zip_set_file_times(const char *pFilename, time_t access_time, + #endif /* #ifndef MINIZ_NO_STDIO */ + #endif /* #ifndef MINIZ_NO_TIME */ + ++static MZ_FORCEINLINE mz_bool mz_zip_set_error(mz_zip_archive *pZip, ++ mz_zip_error err_num) { ++ if (pZip) ++ pZip->m_last_error = err_num; ++ return MZ_FALSE; ++} ++ + static mz_bool mz_zip_reader_init_internal(mz_zip_archive *pZip, + mz_uint32 flags) { + (void)flags; +@@ -4480,127 +4604,346 @@ mz_zip_reader_sort_central_dir_offsets_by_filename(mz_zip_archive *pZip) { + } + } + +-static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip, +- mz_uint32 flags) { +- mz_uint cdir_size, num_this_disk, cdir_disk_index; +- mz_uint64 cdir_ofs; ++static mz_bool mz_zip_reader_locate_header_sig(mz_zip_archive *pZip, ++ mz_uint32 record_sig, ++ mz_uint32 record_size, ++ mz_int64 *pOfs) { + mz_int64 cur_file_ofs; +- const mz_uint8 *p; + mz_uint32 buf_u32[4096 / sizeof(mz_uint32)]; + mz_uint8 *pBuf = (mz_uint8 *)buf_u32; +- mz_bool sort_central_dir = +- ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0); +- // Basic sanity checks - reject files which are too small, and check the first +- // 4 bytes of the file to make sure a local header is there. +- if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) ++ ++ /* Basic sanity checks - reject files which are too small */ ++ if (pZip->m_archive_size < record_size) + return MZ_FALSE; +- // Find the end of central directory record by scanning the file from the end +- // towards the beginning. ++ ++ /* Find the record by scanning the file from the end towards the beginning. */ + cur_file_ofs = + MZ_MAX((mz_int64)pZip->m_archive_size - (mz_int64)sizeof(buf_u32), 0); + for (;;) { + int i, + n = (int)MZ_MIN(sizeof(buf_u32), pZip->m_archive_size - cur_file_ofs); ++ + if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, n) != (mz_uint)n) + return MZ_FALSE; +- for (i = n - 4; i >= 0; --i) +- if (MZ_READ_LE32(pBuf + i) == MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) +- break; ++ ++ for (i = n - 4; i >= 0; --i) { ++ mz_uint s = MZ_READ_LE32(pBuf + i); ++ if (s == record_sig) { ++ if ((pZip->m_archive_size - (cur_file_ofs + i)) >= record_size) ++ break; ++ } ++ } ++ + if (i >= 0) { + cur_file_ofs += i; + break; + } ++ ++ /* Give up if we've searched the entire file, or we've gone back "too far" ++ * (~64kb) */ + if ((!cur_file_ofs) || ((pZip->m_archive_size - cur_file_ofs) >= +- (0xFFFF + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE))) ++ (MZ_UINT16_MAX + record_size))) + return MZ_FALSE; ++ + cur_file_ofs = MZ_MAX(cur_file_ofs - (sizeof(buf_u32) - 3), 0); + } +- // Read and verify the end of central directory record. ++ ++ *pOfs = cur_file_ofs; ++ return MZ_TRUE; ++} ++ ++static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip, ++ mz_uint flags) { ++ mz_uint cdir_size = 0, cdir_entries_on_this_disk = 0, num_this_disk = 0, ++ cdir_disk_index = 0; ++ mz_uint64 cdir_ofs = 0; ++ mz_int64 cur_file_ofs = 0; ++ const mz_uint8 *p; ++ ++ mz_uint32 buf_u32[4096 / sizeof(mz_uint32)]; ++ mz_uint8 *pBuf = (mz_uint8 *)buf_u32; ++ mz_bool sort_central_dir = ++ ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0); ++ mz_uint32 zip64_end_of_central_dir_locator_u32 ++ [(MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE + sizeof(mz_uint32) - 1) / ++ sizeof(mz_uint32)]; ++ mz_uint8 *pZip64_locator = (mz_uint8 *)zip64_end_of_central_dir_locator_u32; ++ ++ mz_uint32 zip64_end_of_central_dir_header_u32 ++ [(MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / ++ sizeof(mz_uint32)]; ++ mz_uint8 *pZip64_end_of_central_dir = ++ (mz_uint8 *)zip64_end_of_central_dir_header_u32; ++ ++ mz_uint64 zip64_end_of_central_dir_ofs = 0; ++ ++ /* Basic sanity checks - reject files which are too small, and check the first ++ * 4 bytes of the file to make sure a local header is there. */ ++ if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) ++ return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); ++ ++ if (!mz_zip_reader_locate_header_sig( ++ pZip, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG, ++ MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE, &cur_file_ofs)) ++ return mz_zip_set_error(pZip, MZ_ZIP_FAILED_FINDING_CENTRAL_DIR); ++ ++ /* Read and verify the end of central directory record. */ + if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) != + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) +- return MZ_FALSE; +- if ((MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) != +- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) || +- ((pZip->m_total_files = +- MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS)) != +- MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS))) +- return MZ_FALSE; ++ return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); ++ ++ if (MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) != ++ MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) ++ return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); ++ ++ if (cur_file_ofs >= (MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE + ++ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE)) { ++ if (pZip->m_pRead(pZip->m_pIO_opaque, ++ cur_file_ofs - MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE, ++ pZip64_locator, ++ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) == ++ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) { ++ if (MZ_READ_LE32(pZip64_locator + MZ_ZIP64_ECDL_SIG_OFS) == ++ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG) { ++ zip64_end_of_central_dir_ofs = MZ_READ_LE64( ++ pZip64_locator + MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS); ++ if (zip64_end_of_central_dir_ofs > ++ (pZip->m_archive_size - MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE)) ++ return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); ++ ++ if (pZip->m_pRead(pZip->m_pIO_opaque, zip64_end_of_central_dir_ofs, ++ pZip64_end_of_central_dir, ++ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) == ++ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) { ++ if (MZ_READ_LE32(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_SIG_OFS) == ++ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG) { ++ pZip->m_pState->m_zip64 = MZ_TRUE; ++ } ++ } ++ } ++ } ++ } + ++ pZip->m_total_files = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS); ++ cdir_entries_on_this_disk = ++ MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS); + num_this_disk = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_THIS_DISK_OFS); + cdir_disk_index = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS); ++ cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS); ++ cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS); ++ ++ if (pZip->m_pState->m_zip64) { ++ mz_uint32 zip64_total_num_of_disks = ++ MZ_READ_LE32(pZip64_locator + MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS); ++ mz_uint64 zip64_cdir_total_entries = MZ_READ_LE64( ++ pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS); ++ mz_uint64 zip64_cdir_total_entries_on_this_disk = MZ_READ_LE64( ++ pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS); ++ mz_uint64 zip64_size_of_end_of_central_dir_record = MZ_READ_LE64( ++ pZip64_end_of_central_dir + MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS); ++ mz_uint64 zip64_size_of_central_directory = ++ MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_SIZE_OFS); ++ ++ if (zip64_size_of_end_of_central_dir_record < ++ (MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE - 12)) ++ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); ++ ++ if (zip64_total_num_of_disks != 1U) ++ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); ++ ++ /* Check for miniz's practical limits */ ++ if (zip64_cdir_total_entries > MZ_UINT32_MAX) ++ return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); ++ ++ pZip->m_total_files = (mz_uint32)zip64_cdir_total_entries; ++ ++ if (zip64_cdir_total_entries_on_this_disk > MZ_UINT32_MAX) ++ return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); ++ ++ cdir_entries_on_this_disk = ++ (mz_uint32)zip64_cdir_total_entries_on_this_disk; ++ ++ /* Check for miniz's current practical limits (sorry, this should be enough ++ * for millions of files) */ ++ if (zip64_size_of_central_directory > MZ_UINT32_MAX) ++ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE); ++ ++ cdir_size = (mz_uint32)zip64_size_of_central_directory; ++ ++ num_this_disk = MZ_READ_LE32(pZip64_end_of_central_dir + ++ MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS); ++ ++ cdir_disk_index = MZ_READ_LE32(pZip64_end_of_central_dir + ++ MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS); ++ ++ cdir_ofs = ++ MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_OFS_OFS); ++ } ++ ++ if (pZip->m_total_files != cdir_entries_on_this_disk) ++ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); ++ + if (((num_this_disk | cdir_disk_index) != 0) && + ((num_this_disk != 1) || (cdir_disk_index != 1))) +- return MZ_FALSE; ++ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); + +- if ((cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS)) < +- pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) +- return MZ_FALSE; ++ if (cdir_size < pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) ++ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + +- cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS); + if ((cdir_ofs + (mz_uint64)cdir_size) > pZip->m_archive_size) +- return MZ_FALSE; ++ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + pZip->m_central_directory_file_ofs = cdir_ofs; + + if (pZip->m_total_files) { + mz_uint i, n; +- +- // Read the entire central directory into a heap block, and allocate another +- // heap block to hold the unsorted central dir file record offsets, and +- // another to hold the sorted indices. ++ /* Read the entire central directory into a heap block, and allocate another ++ * heap block to hold the unsorted central dir file record offsets, and ++ * possibly another to hold the sorted indices. */ + if ((!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir, cdir_size, + MZ_FALSE)) || + (!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir_offsets, + pZip->m_total_files, MZ_FALSE))) +- return MZ_FALSE; ++ return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + + if (sort_central_dir) { + if (!mz_zip_array_resize(pZip, + &pZip->m_pState->m_sorted_central_dir_offsets, + pZip->m_total_files, MZ_FALSE)) +- return MZ_FALSE; ++ return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + } + + if (pZip->m_pRead(pZip->m_pIO_opaque, cdir_ofs, + pZip->m_pState->m_central_dir.m_p, + cdir_size) != cdir_size) +- return MZ_FALSE; ++ return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); + +- // Now create an index into the central directory file records, do some +- // basic sanity checking on each record, and check for zip64 entries (which +- // are not yet supported). ++ /* Now create an index into the central directory file records, do some ++ * basic sanity checking on each record */ + p = (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p; + for (n = cdir_size, i = 0; i < pZip->m_total_files; ++i) { +- mz_uint total_header_size, comp_size, decomp_size, disk_index; ++ mz_uint total_header_size, disk_index, bit_flags, filename_size, ++ ext_data_size; ++ mz_uint64 comp_size, decomp_size, local_header_ofs; ++ + if ((n < MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) || + (MZ_READ_LE32(p) != MZ_ZIP_CENTRAL_DIR_HEADER_SIG)) +- return MZ_FALSE; ++ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); ++ + MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, + i) = + (mz_uint32)(p - (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p); ++ + if (sort_central_dir) + MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_sorted_central_dir_offsets, + mz_uint32, i) = i; ++ + comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS); + decomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS); +- if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) && +- (decomp_size != comp_size)) || +- (decomp_size && !comp_size) || (decomp_size == 0xFFFFFFFF) || +- (comp_size == 0xFFFFFFFF)) +- return MZ_FALSE; ++ local_header_ofs = MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS); ++ filename_size = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); ++ ext_data_size = MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS); ++ ++ if ((!pZip->m_pState->m_zip64_has_extended_info_fields) && ++ (ext_data_size) && ++ (MZ_MAX(MZ_MAX(comp_size, decomp_size), local_header_ofs) == ++ MZ_UINT32_MAX)) { ++ /* Attempt to find zip64 extended information field in the entry's extra ++ * data */ ++ mz_uint32 extra_size_remaining = ext_data_size; ++ ++ if (extra_size_remaining) { ++ const mz_uint8 *pExtra_data; ++ void *buf = NULL; ++ ++ if (MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size + ext_data_size > ++ n) { ++ buf = MZ_MALLOC(ext_data_size); ++ if (buf == NULL) ++ return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); ++ ++ if (pZip->m_pRead(pZip->m_pIO_opaque, ++ cdir_ofs + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + ++ filename_size, ++ buf, ext_data_size) != ext_data_size) { ++ MZ_FREE(buf); ++ return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); ++ } ++ ++ pExtra_data = (mz_uint8 *)buf; ++ } else { ++ pExtra_data = p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size; ++ } ++ ++ do { ++ mz_uint32 field_id; ++ mz_uint32 field_data_size; ++ ++ if (extra_size_remaining < (sizeof(mz_uint16) * 2)) { ++ MZ_FREE(buf); ++ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); ++ } ++ ++ field_id = MZ_READ_LE16(pExtra_data); ++ field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16)); ++ ++ if ((field_data_size + sizeof(mz_uint16) * 2) > ++ extra_size_remaining) { ++ MZ_FREE(buf); ++ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); ++ } ++ ++ if (field_id == MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) { ++ /* Ok, the archive didn't have any zip64 headers but it uses a ++ * zip64 extended information field so mark it as zip64 anyway ++ * (this can occur with infozip's zip util when it reads ++ * compresses files from stdin). */ ++ pZip->m_pState->m_zip64 = MZ_TRUE; ++ pZip->m_pState->m_zip64_has_extended_info_fields = MZ_TRUE; ++ break; ++ } ++ ++ pExtra_data += sizeof(mz_uint16) * 2 + field_data_size; ++ extra_size_remaining = ++ extra_size_remaining - sizeof(mz_uint16) * 2 - field_data_size; ++ } while (extra_size_remaining); ++ ++ MZ_FREE(buf); ++ } ++ } ++ ++ /* I've seen archives that aren't marked as zip64 that uses zip64 ext ++ * data, argh */ ++ if ((comp_size != MZ_UINT32_MAX) && (decomp_size != MZ_UINT32_MAX)) { ++ if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) && ++ (decomp_size != comp_size)) || ++ (decomp_size && !comp_size)) ++ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); ++ } ++ + disk_index = MZ_READ_LE16(p + MZ_ZIP_CDH_DISK_START_OFS); +- if ((disk_index != num_this_disk) && (disk_index != 1)) +- return MZ_FALSE; +- if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) + +- MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) > pZip->m_archive_size) +- return MZ_FALSE; ++ if ((disk_index == MZ_UINT16_MAX) || ++ ((disk_index != num_this_disk) && (disk_index != 1))) ++ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); ++ ++ if (comp_size != MZ_UINT32_MAX) { ++ if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) + ++ MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) > pZip->m_archive_size) ++ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); ++ } ++ ++ bit_flags = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS); ++ if (bit_flags & MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED) ++ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION); ++ + if ((total_header_size = MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + + MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) + + MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS) + + MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS)) > + n) +- return MZ_FALSE; ++ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); ++ + n -= total_header_size; + p += total_header_size; + } +diff --git a/contrib/zip/src/zip.c b/contrib/zip/src/zip.c +index ff3a8fe1e6..1abcfd8fd1 100644 +--- a/contrib/zip/src/zip.c ++++ b/contrib/zip/src/zip.c +@@ -24,7 +24,6 @@ + ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) && \ + (P)[1] == ':') + #define FILESYSTEM_PREFIX_LEN(P) (HAS_DEVICE(P) ? 2 : 0) +-#define ISSLASH(C) ((C) == '/' || (C) == '\\') + + #else + +@@ -48,7 +47,7 @@ int symlink(const char *target, const char *linkpath); // needed on Linux + #endif + + #ifndef ISSLASH +-#define ISSLASH(C) ((C) == '/') ++#define ISSLASH(C) ((C) == '/' || (C) == '\\') + #endif + + #define CLEANUP(ptr) \ +@@ -78,26 +77,34 @@ static const char *base_name(const char *name) { + return base; + } + +-static int mkpath(const char *path) { +- char const *p; ++static int mkpath(char *path) { ++ char *p; + char npath[MAX_PATH + 1]; + int len = 0; + int has_device = HAS_DEVICE(path); + + memset(npath, 0, MAX_PATH + 1); +- +-#ifdef _WIN32 +- // only on windows fix the path +- npath[0] = path[0]; +- npath[1] = path[1]; +- len = 2; +-#endif // _WIN32 +- ++ if (has_device) { ++ // only on windows ++ npath[0] = path[0]; ++ npath[1] = path[1]; ++ len = 2; ++ } + for (p = path + len; *p && len < MAX_PATH; p++) { + if (ISSLASH(*p) && ((!has_device && len > 0) || (has_device && len > 2))) { +- if (MKDIR(npath) == -1) +- if (errno != EEXIST) ++#if defined(_WIN32) || defined(__WIN32__) || defined(_MSC_VER) || \ ++ defined(__MINGW32__) ++#else ++ if ('\\' == *p) { ++ *p = '/'; ++ } ++#endif ++ ++ if (MKDIR(npath) == -1) { ++ if (errno != EEXIST) { + return -1; ++ } ++ } + } + npath[len++] = *p; + } +@@ -279,7 +286,14 @@ int zip_entry_open(struct zip_t *zip, const char *entryname) { + zip->entry.header_offset = zip->archive.m_archive_size; + memset(zip->entry.header, 0, MZ_ZIP_LOCAL_DIR_HEADER_SIZE * sizeof(mz_uint8)); + zip->entry.method = 0; ++ ++ // UNIX or APPLE ++#if MZ_PLATFORM == 3 || MZ_PLATFORM == 19 ++ // regular file with rw-r--r-- persmissions ++ zip->entry.external_attr = (mz_uint32)(0100644) << 16; ++#else + zip->entry.external_attr = 0; ++#endif + + num_alignment_padding_bytes = + mz_zip_writer_compute_padding_needed_for_file_alignment(pzip); +@@ -660,7 +674,7 @@ ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, size_t bufsize) { + } + + if (!mz_zip_reader_extract_to_mem_no_alloc(pzip, (mz_uint)zip->entry.index, +- buf, bufsize, 0, NULL, 0)) { ++ buf, bufsize, 0, NULL, 0)) { + return -1; + } + +@@ -670,10 +684,7 @@ ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, size_t bufsize) { + int zip_entry_fread(struct zip_t *zip, const char *filename) { + mz_zip_archive *pzip = NULL; + mz_uint idx; +-#if defined(_MSC_VER) +-#else + mz_uint32 xattr = 0; +-#endif + mz_zip_archive_file_stat info; + + if (!zip) { +@@ -875,12 +886,19 @@ int zip_extract(const char *zipname, const char *dir, + goto out; + } + +- if ((((info.m_version_made_by >> 8) == 3) || ((info.m_version_made_by >> 8) == 19)) // if zip is produced on Unix or macOS (3 and 19 from section 4.4.2.2 of zip standard) +- && info.m_external_attr & (0x20 << 24)) { // and has sym link attribute (0x80 is file, 0x40 is directory) ++ if ((((info.m_version_made_by >> 8) == 3) || ++ ((info.m_version_made_by >> 8) == ++ 19)) // if zip is produced on Unix or macOS (3 and 19 from ++ // section 4.4.2.2 of zip standard) ++ && info.m_external_attr & ++ (0x20 << 24)) { // and has sym link attribute (0x80 is file, 0x40 ++ // is directory) + #if defined(_WIN32) || defined(__WIN32__) || defined(_MSC_VER) || \ + defined(__MINGW32__) +-#else +- if (info.m_uncomp_size > MAX_PATH || !mz_zip_reader_extract_to_mem_no_alloc(&zip_archive, i, symlink_to, MAX_PATH, 0, NULL, 0)) { ++#else ++ if (info.m_uncomp_size > MAX_PATH || ++ !mz_zip_reader_extract_to_mem_no_alloc(&zip_archive, i, symlink_to, ++ MAX_PATH, 0, NULL, 0)) { + goto out; + } + symlink_to[info.m_uncomp_size] = '\0'; +diff --git a/contrib/zip/src/zip.h b/contrib/zip/src/zip.h +index 5f39df50ad..a48d64d6de 100644 +--- a/contrib/zip/src/zip.h ++++ b/contrib/zip/src/zip.h +@@ -20,241 +20,240 @@ extern "C" { + #endif + + #if !defined(_SSIZE_T_DEFINED) && !defined(_SSIZE_T_DEFINED_) && \ +- !defined(_SSIZE_T) && !defined(_SSIZE_T_) && !defined(__ssize_t_defined) +-#define _SSIZE_T ++ !defined(__DEFINED_ssize_t) && !defined(__ssize_t_defined) && \ ++ !defined(_SSIZE_T) && !defined(_SSIZE_T_) ++ + // 64-bit Windows is the only mainstream platform + // where sizeof(long) != sizeof(void*) + #ifdef _WIN64 +-typedef long long ssize_t; /* byte count or error */ ++typedef long long ssize_t; /* byte count or error */ + #else +-typedef long ssize_t; /* byte count or error */ ++typedef long ssize_t; /* byte count or error */ + #endif ++ ++#define _SSIZE_T_DEFINED ++#define _SSIZE_T_DEFINED_ ++#define __DEFINED_ssize_t ++#define __ssize_t_defined ++#define _SSIZE_T ++#define _SSIZE_T_ ++ + #endif + + #ifndef MAX_PATH + #define MAX_PATH 32767 /* # chars in a path name including NULL */ + #endif + ++/** ++ * @mainpage ++ * ++ * Documenation for @ref zip. ++ */ ++ ++/** ++ * @addtogroup zip ++ * @{ ++ */ ++ ++/** ++ * Default zip compression level. ++ */ ++ + #define ZIP_DEFAULT_COMPRESSION_LEVEL 6 + +-/* +- This data structure is used throughout the library to represent zip archive +- - forward declaration. +-*/ ++/** ++ * @struct zip_t ++ * ++ * This data structure is used throughout the library to represent zip archive - ++ * forward declaration. ++ */ + struct zip_t; + +-/* +- Opens zip archive with compression level using the given mode. +- +- Args: +- zipname: zip archive file name. +- level: compression level (0-9 are the standard zlib-style levels). +- mode: file access mode. +- 'r': opens a file for reading/extracting (the file must exists). +- 'w': creates an empty file for writing. +- 'a': appends to an existing archive. +- +- Returns: +- The zip archive handler or NULL on error +-*/ ++/** ++ * Opens zip archive with compression level using the given mode. ++ * ++ * @param zipname zip archive file name. ++ * @param level compression level (0-9 are the standard zlib-style levels). ++ * @param mode file access mode. ++ * - 'r': opens a file for reading/extracting (the file must exists). ++ * - 'w': creates an empty file for writing. ++ * - 'a': appends to an existing archive. ++ * ++ * @return the zip archive handler or NULL on error ++ */ + extern struct zip_t *zip_open(const char *zipname, int level, char mode); + +-/* +- Closes the zip archive, releases resources - always finalize. +- +- Args: +- zip: zip archive handler. +-*/ ++/** ++ * Closes the zip archive, releases resources - always finalize. ++ * ++ * @param zip zip archive handler. ++ */ + extern void zip_close(struct zip_t *zip); + +-/* +- Opens an entry by name in the zip archive. +- For zip archive opened in 'w' or 'a' mode the function will append +- a new entry. In readonly mode the function tries to locate the entry +- in global dictionary. +- +- Args: +- zip: zip archive handler. +- entryname: an entry name in local dictionary. +- +- Returns: +- The return code - 0 on success, negative number (< 0) on error. +-*/ ++/** ++ * Opens an entry by name in the zip archive. ++ * ++ * For zip archive opened in 'w' or 'a' mode the function will append ++ * a new entry. In readonly mode the function tries to locate the entry ++ * in global dictionary. ++ * ++ * @param zip zip archive handler. ++ * @param entryname an entry name in local dictionary. ++ * ++ * @return the return code - 0 on success, negative number (< 0) on error. ++ */ + extern int zip_entry_open(struct zip_t *zip, const char *entryname); + +-/* +- Opens a new entry by index in the zip archive. +- This function is only valid if zip archive was opened in 'r' (readonly) mode. +- +- Args: +- zip: zip archive handler. +- index: index in local dictionary. +- +- Returns: +- The return code - 0 on success, negative number (< 0) on error. +-*/ ++/** ++ * Opens a new entry by index in the zip archive. ++ * ++ * This function is only valid if zip archive was opened in 'r' (readonly) mode. ++ * ++ * @param zip zip archive handler. ++ * @param index index in local dictionary. ++ * ++ * @return the return code - 0 on success, negative number (< 0) on error. ++ */ + extern int zip_entry_openbyindex(struct zip_t *zip, int index); + +-/* +- Closes a zip entry, flushes buffer and releases resources. +- +- Args: +- zip: zip archive handler. +- +- Returns: +- The return code - 0 on success, negative number (< 0) on error. +-*/ ++/** ++ * Closes a zip entry, flushes buffer and releases resources. ++ * ++ * @param zip zip archive handler. ++ * ++ * @return the return code - 0 on success, negative number (< 0) on error. ++ */ + extern int zip_entry_close(struct zip_t *zip); + +-/* +- Returns a local name of the current zip entry. +- The main difference between user's entry name and local entry name +- is optional relative path. +- Following .ZIP File Format Specification - the path stored MUST not contain +- a drive or device letter, or a leading slash. +- All slashes MUST be forward slashes '/' as opposed to backwards slashes '\' +- for compatibility with Amiga and UNIX file systems etc. +- +- Args: +- zip: zip archive handler. +- +- Returns: +- The pointer to the current zip entry name, or NULL on error. +-*/ ++/** ++ * Returns a local name of the current zip entry. ++ * ++ * The main difference between user's entry name and local entry name ++ * is optional relative path. ++ * Following .ZIP File Format Specification - the path stored MUST not contain ++ * a drive or device letter, or a leading slash. ++ * All slashes MUST be forward slashes '/' as opposed to backwards slashes '\' ++ * for compatibility with Amiga and UNIX file systems etc. ++ * ++ * @param zip: zip archive handler. ++ * ++ * @return the pointer to the current zip entry name, or NULL on error. ++ */ + extern const char *zip_entry_name(struct zip_t *zip); + +-/* +- Returns an index of the current zip entry. +- +- Args: +- zip: zip archive handler. +- +- Returns: +- The index on success, negative number (< 0) on error. +-*/ ++/** ++ * Returns an index of the current zip entry. ++ * ++ * @param zip zip archive handler. ++ * ++ * @return the index on success, negative number (< 0) on error. ++ */ + extern int zip_entry_index(struct zip_t *zip); + +-/* +- Determines if the current zip entry is a directory entry. +- +- Args: +- zip: zip archive handler. +- +- Returns: +- The return code - 1 (true), 0 (false), negative number (< 0) on error. +-*/ ++/** ++ * Determines if the current zip entry is a directory entry. ++ * ++ * @param zip zip archive handler. ++ * ++ * @return the return code - 1 (true), 0 (false), negative number (< 0) on ++ * error. ++ */ + extern int zip_entry_isdir(struct zip_t *zip); + +-/* +- Returns an uncompressed size of the current zip entry. +- +- Args: +- zip: zip archive handler. +- +- Returns: +- The uncompressed size in bytes. +-*/ ++/** ++ * Returns an uncompressed size of the current zip entry. ++ * ++ * @param zip zip archive handler. ++ * ++ * @return the uncompressed size in bytes. ++ */ + extern unsigned long long zip_entry_size(struct zip_t *zip); + +-/* +- Returns CRC-32 checksum of the current zip entry. +- +- Args: +- zip: zip archive handler. +- +- Returns: +- The CRC-32 checksum. +-*/ ++/** ++ * Returns CRC-32 checksum of the current zip entry. ++ * ++ * @param zip zip archive handler. ++ * ++ * @return the CRC-32 checksum. ++ */ + extern unsigned int zip_entry_crc32(struct zip_t *zip); + +-/* +- Compresses an input buffer for the current zip entry. +- +- Args: +- zip: zip archive handler. +- buf: input buffer. +- bufsize: input buffer size (in bytes). +- +- Returns: +- The return code - 0 on success, negative number (< 0) on error. +-*/ ++/** ++ * Compresses an input buffer for the current zip entry. ++ * ++ * @param zip zip archive handler. ++ * @param buf input buffer. ++ * @param bufsize input buffer size (in bytes). ++ * ++ * @return the return code - 0 on success, negative number (< 0) on error. ++ */ + extern int zip_entry_write(struct zip_t *zip, const void *buf, size_t bufsize); + +-/* +- Compresses a file for the current zip entry. +- +- Args: +- zip: zip archive handler. +- filename: input file. +- +- Returns: +- The return code - 0 on success, negative number (< 0) on error. +-*/ ++/** ++ * Compresses a file for the current zip entry. ++ * ++ * @param zip zip archive handler. ++ * @param filename input file. ++ * ++ * @return the return code - 0 on success, negative number (< 0) on error. ++ */ + extern int zip_entry_fwrite(struct zip_t *zip, const char *filename); + +-/* +- Extracts the current zip entry into output buffer. +- The function allocates sufficient memory for a output buffer. +- +- Args: +- zip: zip archive handler. +- buf: output buffer. +- bufsize: output buffer size (in bytes). +- +- Note: +- - remember to release memory allocated for a output buffer. +- - for large entries, please take a look at zip_entry_extract function. +- +- Returns: +- The return code - the number of bytes actually read on success. +- Otherwise a -1 on error. +-*/ ++/** ++ * Extracts the current zip entry into output buffer. ++ * ++ * The function allocates sufficient memory for a output buffer. ++ * ++ * @param zip zip archive handler. ++ * @param buf output buffer. ++ * @param bufsize output buffer size (in bytes). ++ * ++ * @note remember to release memory allocated for a output buffer. ++ * for large entries, please take a look at zip_entry_extract function. ++ * ++ * @return the return code - the number of bytes actually read on success. ++ * Otherwise a -1 on error. ++ */ + extern ssize_t zip_entry_read(struct zip_t *zip, void **buf, size_t *bufsize); + +-/* +- Extracts the current zip entry into a memory buffer using no memory +- allocation. +- +- Args: +- zip: zip archive handler. +- buf: preallocated output buffer. +- bufsize: output buffer size (in bytes). +- +- Note: +- - ensure supplied output buffer is large enough. +- - zip_entry_size function (returns uncompressed size for the current entry) +- can be handy to estimate how big buffer is needed. +- - for large entries, please take a look at zip_entry_extract function. +- +- Returns: +- The return code - the number of bytes actually read on success. +- Otherwise a -1 on error (e.g. bufsize is not large enough). +-*/ +-extern ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, size_t bufsize); +- +-/* +- Extracts the current zip entry into output file. +- +- Args: +- zip: zip archive handler. +- filename: output file. +- +- Returns: +- The return code - 0 on success, negative number (< 0) on error. +-*/ ++/** ++ * Extracts the current zip entry into a memory buffer using no memory ++ * allocation. ++ * ++ * @param zip zip archive handler. ++ * @param buf preallocated output buffer. ++ * @param bufsize output buffer size (in bytes). ++ * ++ * @note ensure supplied output buffer is large enough. ++ * zip_entry_size function (returns uncompressed size for the current ++ * entry) can be handy to estimate how big buffer is needed. for large ++ * entries, please take a look at zip_entry_extract function. ++ * ++ * @return the return code - the number of bytes actually read on success. ++ * Otherwise a -1 on error (e.g. bufsize is not large enough). ++ */ ++extern ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, ++ size_t bufsize); ++ ++/** ++ * Extracts the current zip entry into output file. ++ * ++ * @param zip zip archive handler. ++ * @param filename output file. ++ * ++ * @return the return code - 0 on success, negative number (< 0) on error. ++ */ + extern int zip_entry_fread(struct zip_t *zip, const char *filename); + +-/* +- Extracts the current zip entry using a callback function (on_extract). +- +- Args: +- zip: zip archive handler. +- on_extract: callback function. +- arg: opaque pointer (optional argument, +- which you can pass to the on_extract callback) +- +- Returns: +- The return code - 0 on success, negative number (< 0) on error. ++/** ++ * Extracts the current zip entry using a callback function (on_extract). ++ * ++ * @param zip zip archive handler. ++ * @param on_extract callback function. ++ * @param arg opaque pointer (optional argument, which you can pass to the ++ * on_extract callback) ++ * ++ * @return the return code - 0 on success, negative number (< 0) on error. + */ + extern int + zip_entry_extract(struct zip_t *zip, +@@ -262,53 +261,49 @@ zip_entry_extract(struct zip_t *zip, + const void *data, size_t size), + void *arg); + +-/* +- Returns the number of all entries (files and directories) in the zip archive. +- +- Args: +- zip: zip archive handler. +- +- Returns: +- The return code - the number of entries on success, +- negative number (< 0) on error. +-*/ ++/** ++ * Returns the number of all entries (files and directories) in the zip archive. ++ * ++ * @param zip zip archive handler. ++ * ++ * @return the return code - the number of entries on success, negative number ++ * (< 0) on error. ++ */ + extern int zip_total_entries(struct zip_t *zip); + +-/* +- Creates a new archive and puts files into a single zip archive. +- +- Args: +- zipname: zip archive file. +- filenames: input files. +- len: number of input files. +- +- Returns: +- The return code - 0 on success, negative number (< 0) on error. +-*/ ++/** ++ * Creates a new archive and puts files into a single zip archive. ++ * ++ * @param zipname zip archive file. ++ * @param filenames input files. ++ * @param len: number of input files. ++ * ++ * @return the return code - 0 on success, negative number (< 0) on error. ++ */ + extern int zip_create(const char *zipname, const char *filenames[], size_t len); + +-/* +- Extracts a zip archive file into directory. +- +- If on_extract_entry is not NULL, the callback will be called after +- successfully extracted each zip entry. +- Returning a negative value from the callback will cause abort and return an +- error. The last argument (void *arg) is optional, which you can use to pass +- data to the on_extract_entry callback. +- +- Args: +- zipname: zip archive file. +- dir: output directory. +- on_extract_entry: on extract callback. +- arg: opaque pointer. +- +- Returns: +- The return code - 0 on success, negative number (< 0) on error. +-*/ ++/** ++ * Extracts a zip archive file into directory. ++ * ++ * If on_extract_entry is not NULL, the callback will be called after ++ * successfully extracted each zip entry. ++ * Returning a negative value from the callback will cause abort and return an ++ * error. The last argument (void *arg) is optional, which you can use to pass ++ * data to the on_extract_entry callback. ++ * ++ * @param zipname zip archive file. ++ * @param dir output directory. ++ * @param on_extract_entry on extract callback. ++ * @param arg opaque pointer. ++ * ++ * @return the return code - 0 on success, negative number (< 0) on error. ++ */ + extern int zip_extract(const char *zipname, const char *dir, + int (*on_extract_entry)(const char *filename, void *arg), + void *arg); + ++/** @} */ ++ + #ifdef __cplusplus + } + #endif +diff --git a/contrib/zip/test/CMakeLists.txt b/contrib/zip/test/CMakeLists.txt +index 9b2a8db106..cc060b00fe 100644 +--- a/contrib/zip/test/CMakeLists.txt ++++ b/contrib/zip/test/CMakeLists.txt +@@ -1,19 +1,16 @@ + cmake_minimum_required(VERSION 2.8) + +-if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang") +- if(ENABLE_COVERAGE) +- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g ") +- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0") +- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs") +- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ftest-coverage") +- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") +- endif() +-endif () +- + # test +-include_directories(../src) +-add_executable(test.exe test.c ../src/zip.c) +-add_executable(test_miniz.exe test_miniz.c) ++set(test_out test.out) ++set(test_miniz_out test_miniz.out) ++ ++add_executable(${test_out} test.c) ++target_link_libraries(${test_out} zip) ++add_executable(${test_miniz_out} test_miniz.c) ++target_link_libraries(${test_miniz_out} zip) ++ ++add_test(NAME ${test_out} COMMAND ${test_out}) ++add_test(NAME ${test_miniz_out} COMMAND ${test_miniz_out}) + +-add_test(NAME test COMMAND test.exe) +-add_test(NAME test_miniz COMMAND test_miniz.exe) ++set(test_out ${test_out} PARENT_SCOPE) ++set(test_miniz_out ${test_miniz_out} PARENT_SCOPE) +diff --git a/contrib/zip/test/test.c b/contrib/zip/test/test.c +index 454430533a..a9b2ddab1e 100644 +--- a/contrib/zip/test/test.c ++++ b/contrib/zip/test/test.c +@@ -29,6 +29,8 @@ + #define XFILE "7.txt\0" + #define XMODE 0100777 + ++#define UNIXMODE 0100644 ++ + #define UNUSED(x) (void)x + + static int total_entries = 0; +@@ -102,7 +104,8 @@ static void test_read(void) { + assert(0 == zip_entry_close(zip)); + free(buf); + buf = NULL; +- ++ bufsize = 0; ++ + assert(0 == zip_entry_open(zip, "test/test-2.txt")); + assert(strlen(TESTDATA2) == zip_entry_size(zip)); + assert(CRC32DATA2 == zip_entry_crc32(zip)); +@@ -131,7 +134,8 @@ static void test_read(void) { + assert(0 == zip_entry_close(zip)); + free(buf); + buf = NULL; +- ++ bufsize = 0; ++ + buftmp = strlen(TESTDATA1); + buf = calloc(buftmp, sizeof(char)); + assert(0 == zip_entry_open(zip, "test/test-1.txt")); +@@ -433,6 +437,35 @@ static void test_mtime(void) { + remove(ZIPNAME); + } + ++static void test_unix_permissions(void) { ++#if defined(_WIN64) || defined(_WIN32) || defined(__WIN32__) ++#else ++ // UNIX or APPLE ++ struct MZ_FILE_STAT_STRUCT file_stats; ++ ++ remove(ZIPNAME); ++ ++ struct zip_t *zip = zip_open(ZIPNAME, ZIP_DEFAULT_COMPRESSION_LEVEL, 'w'); ++ assert(zip != NULL); ++ ++ assert(0 == zip_entry_open(zip, RFILE)); ++ assert(0 == zip_entry_write(zip, TESTDATA1, strlen(TESTDATA1))); ++ assert(0 == zip_entry_close(zip)); ++ ++ zip_close(zip); ++ ++ remove(RFILE); ++ ++ assert(0 == zip_extract(ZIPNAME, ".", NULL, NULL)); ++ ++ assert(0 == MZ_FILE_STAT(RFILE, &file_stats)); ++ assert(UNIXMODE == file_stats.st_mode); ++ ++ remove(RFILE); ++ remove(ZIPNAME); ++#endif ++} ++ + int main(int argc, char *argv[]) { + UNUSED(argc); + UNUSED(argv); +@@ -453,6 +486,7 @@ int main(int argc, char *argv[]) { + test_write_permissions(); + test_exe_permissions(); + test_mtime(); ++ test_unix_permissions(); + + remove(ZIPNAME); + return 0; +diff --git a/contrib/zip/test/test_miniz.c b/contrib/zip/test/test_miniz.c +index ebc0564dc3..babcaecdb6 100644 +--- a/contrib/zip/test/test_miniz.c ++++ b/contrib/zip/test/test_miniz.c +@@ -23,16 +23,39 @@ int main(int argc, char *argv[]) { + uint step = 0; + int cmp_status; + uLong src_len = (uLong)strlen(s_pStr); +- uLong cmp_len = compressBound(src_len); + uLong uncomp_len = src_len; ++ uLong cmp_len; + uint8 *pCmp, *pUncomp; ++ size_t sz; + uint total_succeeded = 0; + (void)argc, (void)argv; + + printf("miniz.c version: %s\n", MZ_VERSION); + + do { ++ pCmp = (uint8 *)tdefl_compress_mem_to_heap(s_pStr, src_len, &cmp_len, 0); ++ if (!pCmp) { ++ printf("tdefl_compress_mem_to_heap failed\n"); ++ return EXIT_FAILURE; ++ } ++ if (src_len <= cmp_len) { ++ printf("tdefl_compress_mem_to_heap failed: from %u to %u bytes\n", ++ (mz_uint32)uncomp_len, (mz_uint32)cmp_len); ++ free(pCmp); ++ return EXIT_FAILURE; ++ } ++ ++ sz = tdefl_compress_mem_to_mem(pCmp, cmp_len, s_pStr, src_len, 0); ++ if (sz != cmp_len) { ++ printf("tdefl_compress_mem_to_mem failed: expected %u, got %u\n", ++ (mz_uint32)cmp_len, (mz_uint32)sz); ++ free(pCmp); ++ return EXIT_FAILURE; ++ } ++ + // Allocate buffers to hold compressed and uncompressed data. ++ free(pCmp); ++ cmp_len = compressBound(src_len); + pCmp = (mz_uint8 *)malloc((size_t)cmp_len); + pUncomp = (mz_uint8 *)malloc((size_t)src_len); + if ((!pCmp) || (!pUncomp)) { diff --git a/package/assimp/0003-closes-2954-upgrade-to-latest-greatest.patch b/package/assimp/0003-closes-2954-upgrade-to-latest-greatest.patch new file mode 100644 index 00000000..9bd24630 --- /dev/null +++ b/package/assimp/0003-closes-2954-upgrade-to-latest-greatest.patch @@ -0,0 +1,243 @@ +From bb3db0ebaffc6b76de256e597ec1d1e4d2a6663f Mon Sep 17 00:00:00 2001 +From: kimkulling +Date: Mon, 9 Mar 2020 10:51:26 +0100 +Subject: [PATCH] closes https://github.com/assimp/assimp/issues/2954: upgrade + to latest greatest. + +[Retrieved from: +https://github.com/assimp/assimp/commit/bb3db0ebaffc6b76de256e597ec1d1e4d2a6663f] +Signed-off-by: Fabrice Fontaine +--- + contrib/zip/CMakeLists.txt | 8 ++---- + contrib/zip/README.md | 51 +++++++++++++++++++++++++++++++-- + contrib/zip/src/zip.c | 17 ++++++++++- + contrib/zip/src/zip.h | 13 ++++++++- + contrib/zip/test/CMakeLists.txt | 5 ---- + contrib/zip/test/test.c | 4 ++- + 6 files changed, 81 insertions(+), 17 deletions(-) + +diff --git a/contrib/zip/CMakeLists.txt b/contrib/zip/CMakeLists.txt +index 77916d2e14..f194649ede 100644 +--- a/contrib/zip/CMakeLists.txt ++++ b/contrib/zip/CMakeLists.txt +@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.0) + + project(zip + LANGUAGES C +- VERSION "0.1.15") ++ VERSION "0.1.18") + set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) + + option(CMAKE_DISABLE_TESTING "Disable test creation" OFF) +@@ -16,10 +16,6 @@ elseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR + "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR + "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -Wall -Wextra -Werror -pedantic") +- if(ENABLE_COVERAGE) +- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage") +- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") +- endif() + endif (MSVC) + + # zip +@@ -35,7 +31,7 @@ if (NOT CMAKE_DISABLE_TESTING) + enable_testing() + add_subdirectory(test) + find_package(Sanitizers) +- add_sanitizers(${PROJECT_NAME} ${test_out} ${test_miniz_out}) ++ add_sanitizers(${PROJECT_NAME} ${test_out}) + endif() + + #### +diff --git a/contrib/zip/README.md b/contrib/zip/README.md +index 14eb9a34c8..bdd0822b67 100644 +--- a/contrib/zip/README.md ++++ b/contrib/zip/README.md +@@ -1,10 +1,8 @@ + ### A portable (OSX/Linux/Windows), simple zip library written in C + This is done by hacking awesome [miniz](https://code.google.com/p/miniz) library and layering functions on top of the miniz v1.15 API. + +-[![Windows](https://ci.appveyor.com/api/projects/status/bph8dr3jacgmjv32/branch/master?svg=true&label=windows)](https://ci.appveyor.com/project/kuba--/zip) +-[![Linux](https://travis-ci.org/kuba--/zip.svg?branch=master&label=linux%2fosx)](https://travis-ci.org/kuba--/zip) ++[![Build](https://github.com/kuba--/zip/workflows/build/badge.svg)](https://github.com/kuba--/zip/actions?query=workflow%3Abuild) + [![Version](https://badge.fury.io/gh/kuba--%2Fzip.svg)](https://github.com/kuba--/zip/releases) +-[![Codecov](https://codecov.io/gh/kuba--/zip/branch/master/graph/badge.svg)](https://codecov.io/gh/kuba--/zip) + + + # The Idea +@@ -213,6 +211,53 @@ func main() { + } + ``` + ++### Rust (ffi) ++```rust ++extern crate libc; ++use std::ffi::CString; ++ ++#[repr(C)] ++pub struct Zip { ++ _private: [u8; 0], ++} ++ ++#[link(name = "zip")] ++extern "C" { ++ fn zip_open(path: *const libc::c_char, level: libc::c_int, mode: libc::c_char) -> *mut Zip; ++ fn zip_close(zip: *mut Zip) -> libc::c_void; ++ ++ fn zip_entry_open(zip: *mut Zip, entryname: *const libc::c_char) -> libc::c_int; ++ fn zip_entry_close(zip: *mut Zip) -> libc::c_int; ++ fn zip_entry_write( ++ zip: *mut Zip, ++ buf: *const libc::c_void, ++ bufsize: libc::size_t, ++ ) -> libc::c_int; ++} ++ ++fn main() { ++ let path = CString::new("/tmp/test.zip").unwrap(); ++ let mode: libc::c_char = 'w' as libc::c_char; ++ ++ let entryname = CString::new("test.txt").unwrap(); ++ let content = "test content\0"; ++ ++ unsafe { ++ let zip: *mut Zip = zip_open(path.as_ptr(), 5, mode); ++ { ++ zip_entry_open(zip, entryname.as_ptr()); ++ { ++ let buf = content.as_ptr() as *const libc::c_void; ++ let bufsize = content.len() as libc::size_t; ++ zip_entry_write(zip, buf, bufsize); ++ } ++ zip_entry_close(zip); ++ } ++ zip_close(zip); ++ } ++} ++``` ++ + ### Ruby (ffi) + Install _ffi_ gem. + ```shell +diff --git a/contrib/zip/src/zip.c b/contrib/zip/src/zip.c +index 1abcfd8fd1..3b2821e6a3 100644 +--- a/contrib/zip/src/zip.c ++++ b/contrib/zip/src/zip.c +@@ -222,6 +222,20 @@ void zip_close(struct zip_t *zip) { + } + } + ++int zip_is64(struct zip_t *zip) { ++ if (!zip) { ++ // zip_t handler is not initialized ++ return -1; ++ } ++ ++ if (!zip->archive.m_pState) { ++ // zip state is not initialized ++ return -1; ++ } ++ ++ return (int)zip->archive.m_pState->m_zip64; ++} ++ + int zip_entry_open(struct zip_t *zip, const char *entryname) { + size_t entrylen = 0; + mz_zip_archive *pzip = NULL; +@@ -794,7 +808,8 @@ int zip_create(const char *zipname, const char *filenames[], size_t len) { + + if (MZ_FILE_STAT(name, &file_stat) != 0) { + // problem getting information - check errno +- return -1; ++ status = -1; ++ break; + } + + if ((file_stat.st_mode & 0200) == 0) { +diff --git a/contrib/zip/src/zip.h b/contrib/zip/src/zip.h +index a48d64d6de..cd3ab5cd00 100644 +--- a/contrib/zip/src/zip.h ++++ b/contrib/zip/src/zip.h +@@ -21,7 +21,7 @@ extern "C" { + + #if !defined(_SSIZE_T_DEFINED) && !defined(_SSIZE_T_DEFINED_) && \ + !defined(__DEFINED_ssize_t) && !defined(__ssize_t_defined) && \ +- !defined(_SSIZE_T) && !defined(_SSIZE_T_) ++ !defined(_SSIZE_T) && !defined(_SSIZE_T_) && !defined(_SSIZE_T_DECLARED) + + // 64-bit Windows is the only mainstream platform + // where sizeof(long) != sizeof(void*) +@@ -37,6 +37,7 @@ typedef long ssize_t; /* byte count or error */ + #define __ssize_t_defined + #define _SSIZE_T + #define _SSIZE_T_ ++#define _SSIZE_T_DECLARED + + #endif + +@@ -90,6 +91,16 @@ extern struct zip_t *zip_open(const char *zipname, int level, char mode); + */ + extern void zip_close(struct zip_t *zip); + ++/** ++ * Determines if the archive has a zip64 end of central directory headers. ++ * ++ * @param zip zip archive handler. ++ * ++ * @return the return code - 1 (true), 0 (false), negative number (< 0) on ++ * error. ++ */ ++extern int zip_is64(struct zip_t *zip); ++ + /** + * Opens an entry by name in the zip archive. + * +diff --git a/contrib/zip/test/CMakeLists.txt b/contrib/zip/test/CMakeLists.txt +index cc060b00fe..1224115858 100644 +--- a/contrib/zip/test/CMakeLists.txt ++++ b/contrib/zip/test/CMakeLists.txt +@@ -2,15 +2,10 @@ cmake_minimum_required(VERSION 2.8) + + # test + set(test_out test.out) +-set(test_miniz_out test_miniz.out) + + add_executable(${test_out} test.c) + target_link_libraries(${test_out} zip) +-add_executable(${test_miniz_out} test_miniz.c) +-target_link_libraries(${test_miniz_out} zip) + + add_test(NAME ${test_out} COMMAND ${test_out}) +-add_test(NAME ${test_miniz_out} COMMAND ${test_miniz_out}) + + set(test_out ${test_out} PARENT_SCOPE) +-set(test_miniz_out ${test_miniz_out} PARENT_SCOPE) +diff --git a/contrib/zip/test/test.c b/contrib/zip/test/test.c +index a9b2ddab1e..9cc2248ac0 100644 +--- a/contrib/zip/test/test.c ++++ b/contrib/zip/test/test.c +@@ -47,7 +47,7 @@ static void test_write(void) { + assert(CRC32DATA1 == zip_entry_crc32(zip)); + ++total_entries; + assert(0 == zip_entry_close(zip)); +- ++ assert(0 == zip_is64(zip)); + zip_close(zip); + } + +@@ -92,6 +92,7 @@ static void test_read(void) { + size_t buftmp; + struct zip_t *zip = zip_open(ZIPNAME, 0, 'r'); + assert(zip != NULL); ++ assert(0 == zip_is64(zip)); + + assert(0 == zip_entry_open(zip, "test\\test-1.txt")); + assert(strlen(TESTDATA1) == zip_entry_size(zip)); +@@ -310,6 +311,7 @@ static void test_fwrite(void) { + assert(0 == zip_entry_open(zip, WFILE)); + assert(0 == zip_entry_fwrite(zip, WFILE)); + assert(0 == zip_entry_close(zip)); ++ assert(0 == zip_is64(zip)); + + zip_close(zip); + remove(WFILE); diff --git a/package/assimp/Config.in b/package/assimp/Config.in new file mode 100644 index 00000000..c535240e --- /dev/null +++ b/package/assimp/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_ASSIMP + bool "assimp" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + depends on BR2_PACKAGE_LIBZLIB + help + Open Asset Import Library (assimp) is a portable Open Source + library to import various well-known 3D model formats in a + uniform manner. The most recent version also knows how to + export 3d files and is therefore suitable as a general-purpose + 3D model converter. + + http://www.assimp.org + +comment "assimp needs a toolchain w/ C++, wchar" + depends on BR2_PACKAGE_LIBZLIB + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR + +comment "assimp needs libzlib" + depends on !BR2_PACKAGE_LIBZLIB diff --git a/package/assimp/assimp.hash b/package/assimp/assimp.hash new file mode 100644 index 00000000..df5daa79 --- /dev/null +++ b/package/assimp/assimp.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 11310ec1f2ad2cd46b95ba88faca8f7aaa1efe9aa12605c55e3de2b977b3dbfc assimp-5.0.1.tar.gz +sha256 a26ccc3dbf2f58ea99c100945a8a126fa0f9f4d7fd2b49aa8bdb8e09355864d8 LICENSE diff --git a/package/assimp/assimp.mk b/package/assimp/assimp.mk new file mode 100644 index 00000000..eddfbc48 --- /dev/null +++ b/package/assimp/assimp.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# assimp +# +################################################################################ + +ASSIMP_VERSION = 5.0.1 +ASSIMP_SITE = $(call github,assimp,assimp,v$(ASSIMP_VERSION)) +ASSIMP_LICENSE = BSD-3-Clause +ASSIMP_LICENSE_FILES = LICENSE +ASSIMP_DEPENDENCIES = zlib +ASSIMP_INSTALL_STAGING = YES + +# relocation truncated to fit: R_68K_GOT16O. We also need to disable +# optimizations to not run into "Error: value -43420 out of range" +# assembler issues. +ifeq ($(BR2_m68k),y) +ASSIMP_CXXFLAGS += -mxgot -O0 +endif + +# just like m68k coldfire, mips64 also has some limitations on the GOT +# size for large libraries, which can be overcome by passing +# -mxgot. Solves "relocation truncated to fit: R_MIPS_CALL16" issues. +ifeq ($(BR2_mips64)$(BR2_mips64el),y) +ASSIMP_CXXFLAGS += -mxgot +endif + +# workaround SuperH compiler failure when static linking (i.e -fPIC is +# not passed) in gcc versions 5.x or older. The -Os optimization level +# causes a "unable to find a register to spill in class +# 'GENERAL_REGS'" error. -O2 works fine. +ifeq ($(BR2_sh):$(BR2_STATIC_LIBS):$(BR2_TOOLCHAIN_GCC_AT_LEAST_6),y:y:) +ASSIMP_CXXFLAGS += -O2 +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y) +ASSIMP_CXXFLAGS += -O0 +endif + +ASSIMP_CONF_OPTS += -DASSIMP_BUILD_TESTS=OFF \ + -DCMAKE_CXX_FLAGS="$(TARGET_CXXFLAGS) $(ASSIMP_CXXFLAGS)" + +$(eval $(cmake-package)) diff --git a/package/asterisk/0001-sounds-do-not-download-and-check-sha1s.patch b/package/asterisk/0001-sounds-do-not-download-and-check-sha1s.patch new file mode 100644 index 00000000..8412843d --- /dev/null +++ b/package/asterisk/0001-sounds-do-not-download-and-check-sha1s.patch @@ -0,0 +1,52 @@ +From 3e8a9e9a1c7eae515eb628778c3c8a04338b3bb3 Mon Sep 17 00:00:00 2001 +From: "Yann E. MORIN" +Date: Tue, 27 Dec 2016 11:21:09 +0100 +Subject: [PATCH] sounds: do not download and check sha1s + +To validate the sound archives, the corresponding sha1s are also +downloaded from the same location, and that download is done at install +time. + +However, that poses at least two problems: + + - in Buildroot, we already have validated the downloads with the sha1s + anyway, and trying to download anything at install time is not + always possible (e.g. for off-line builds); + + - since the download scheme is not secured (plain http), a + man-in-the-middle for the sounds will also be able to MITM the + download of the sha1s, so there is absolutely no additional safety + in doing so. + +So we just do without the sha1 download and checks. + +Signed-off-by: "Yann E. MORIN" +--- + sounds/Makefile | 10 ---------- + 1 file changed, 10 deletions(-) + +diff --git a/sounds/Makefile b/sounds/Makefile +index 84d0f45..7a80d56 100644 +--- a/sounds/Makefile ++++ b/sounds/Makefile +@@ -100,17 +100,7 @@ ifneq ($(SOUNDS_CACHE_DIR),) + if test ! -f "$$(SOUNDS_CACHE_DIR)/$$@"; then \ + (cd "$$(SOUNDS_CACHE_DIR)"; $$(DOWNLOAD) $$(SOUNDS_URL)/$$@); \ + fi; \ +- if test ! -f "$$(SOUNDS_CACHE_DIR)/$$@.sha1"; then \ +- (cd "$$(SOUNDS_CACHE_DIR)"; $$(DOWNLOAD) $$(SOUNDS_URL)/$$@.sha1); \ +- fi; \ + $$(LN) -sf "$$(SOUNDS_CACHE_DIR)/$$@" .; \ +- $$(LN) -sf "$$(SOUNDS_CACHE_DIR)/$$@.sha1" .; \ +- $$(SHA1SUM) -c --status $$@.sha1 || \ +- ( \ +- rm -f "$$(SOUNDS_CACHE_DIR)/$$@" "$$(SOUNDS_CACHE_DIR)/$$@.sha1" $$@ $$@.sha1; \ +- echo "Bad checksum: $$@" 1>&2; \ +- exit 1; \ +- ) || exit 1; \ + fi + else + $(CMD_PREFIX) \ +-- +2.7.4 + diff --git a/package/asterisk/0002-configure-fix-detection-of-libcrypt.patch b/package/asterisk/0002-configure-fix-detection-of-libcrypt.patch new file mode 100644 index 00000000..d82f5084 --- /dev/null +++ b/package/asterisk/0002-configure-fix-detection-of-libcrypt.patch @@ -0,0 +1,43 @@ +From 8996503f6c55e55f326ab11c18278954ad7abaf3 Mon Sep 17 00:00:00 2001 +From: "Yann E. MORIN" +Date: Tue, 27 Dec 2016 11:21:57 +0100 +Subject: [PATCH] configure: fix detection of libcrypt + +The crypt() function is searched in two locations: -lcrypt and the +standard C library. + +The result of the former is stored in the LIBCRYPT 'scheme' while that +of the latter is stored in the 'SYSCRYPT' scheme. + +However, the check for mandatory modules looks at the CRYPT 'scheme', +and thus concludes that crypt is missing when it was successfully found. + +Fix that by also storing the result of either check in the 'CRYPT' +scheme. + +Signed-off-by: "Yann E. MORIN" +--- + configure | 2 ++ + configure.ac | 2 ++ + 2 files changed, 4 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 121dd93..d459ff5 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2406,10 +2406,12 @@ AC_CHECK_FUNC([crypt], [SYSCRYPT=true], [SYSCRYPT=""]) + if test "x$LIBCRYPT_LIB" != "x" ; then + CRYPT_LIB="$LIBCRYPT_LIB" + CRYPT_INCLUDE="$LIBCRYPT_INCLUDE" ++ PBX_CRYPT=1 + AC_DEFINE([HAVE_CRYPT], [1], [Define to 1 if you have the 'crypt' function.]) + elif test "x$SYSCRYPT" != "x" ; then + CRYPT_LIB="" + CRYPT_INCLUDE="" ++ PBX_CRYPT=1 + AC_DEFINE([HAVE_CRYPT], [1], [Define to 1 if you have the 'crypt' function.]) + fi + +-- +2.7.4 + diff --git a/package/asterisk/0003-build-ensure-target-directory-for-modules-exists.patch b/package/asterisk/0003-build-ensure-target-directory-for-modules-exists.patch new file mode 100644 index 00000000..20cfc938 --- /dev/null +++ b/package/asterisk/0003-build-ensure-target-directory-for-modules-exists.patch @@ -0,0 +1,32 @@ +From 933b2554a40f932571bdbdbb5217cda3e35fd61f Mon Sep 17 00:00:00 2001 +From: "Yann E. MORIN" +Date: Mon, 27 Nov 2017 12:52:52 +0100 +Subject: [PATCH] build: ensure target directory for modules exists + +Currently, in highly-parallel builds, it is possible that installing +modules fails because the target directory does not exist yet. + +We fix that by instructing $(INSTALL) to create the destination directory +first. + +Signed-off-by: "Yann E. MORIN" +--- + Makefile.moddir_rules | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile.moddir_rules b/Makefile.moddir_rules +index 59190bece9..b73153a9a5 100644 +--- a/Makefile.moddir_rules ++++ b/Makefile.moddir_rules +@@ -110,7 +110,7 @@ clean:: + + install:: all + @echo "Installing modules from `basename $(CURDIR)`..." +- @for x in $(LOADABLE_MODS:%=%.so); do $(INSTALL) -m 755 $$x "$(DESTDIR)$(ASTMODDIR)" ; done ++ @for x in $(LOADABLE_MODS:%=%.so); do $(INSTALL) -D -m 755 $$x "$(DESTDIR)$(ASTMODDIR)" ; done + ifneq ($(findstring :,$(XMLSTARLET)$(BASH)),:) + @if [ -f .moduleinfo ] ; then \ + declare -A DISABLED_MODS ;\ +-- +2.11.0 + diff --git a/package/asterisk/0004-install-samples-need-the-data-files.patch b/package/asterisk/0004-install-samples-need-the-data-files.patch new file mode 100644 index 00000000..a9560e82 --- /dev/null +++ b/package/asterisk/0004-install-samples-need-the-data-files.patch @@ -0,0 +1,35 @@ +From 05680ea9899c2246c23d11860c2c8e10aa8f80c7 Mon Sep 17 00:00:00 2001 +From: "Yann E. MORIN" +Date: Fri, 1 Dec 2017 11:08:16 +0100 +Subject: [PATCH] install: samples need the data files + +When installing samples, "sample voicemail" is generated from the +already-installed sound files. + +However, when doing the install and the samples at the same time in a +parallel install, it is possible that the sound files are not already +installed at the time we try to generate the voicemail data. + +Ensure the needed dependency. + +Signed-off-by: "Yann E. MORIN" +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index f29c07f680..b58f707b61 100644 +--- a/Makefile ++++ b/Makefile +@@ -779,7 +779,7 @@ adsi: + $(INSTALL) -m 644 "$$x" "$(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x`" ; \ + done + +-samples: adsi ++samples: adsi datafiles + @echo Installing other config files... + $(call INSTALL_CONFIGS,samples,.sample) + $(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/voicemail/default/1234/INBOX" +-- +2.11.0 + diff --git a/package/asterisk/0005-configure-fix-detection-of-re-entrant-resolver-funct.patch b/package/asterisk/0005-configure-fix-detection-of-re-entrant-resolver-funct.patch new file mode 100644 index 00000000..bee8fdbb --- /dev/null +++ b/package/asterisk/0005-configure-fix-detection-of-re-entrant-resolver-funct.patch @@ -0,0 +1,38 @@ +From 9b4070944578336506cd0a76de6f733c72d0ca74 Mon Sep 17 00:00:00 2001 +From: "Yann E. MORIN" +Date: Sat, 13 Oct 2018 11:11:15 +0200 +Subject: [PATCH] configure: fix detection of re-entrant resolver functions + +Fixes https://issues.asterisk.org/jira/browse/ASTERISK-21795 + +uClibc does not provide res_nsearch: +asterisk-16.0.0/main/dns.c:506: undefined reference to `res_nsearch' + +Patch coded by Yann E. MORIN: +http://lists.busybox.net/pipermail/buildroot/2018-October/232630.html + +Signed-off-by: Bernd Kuhls +--- + configure.ac | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index dd0c8edd13..ee1ca9ceb6 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1388,7 +1388,11 @@ AC_LINK_IFELSE( + #include + #endif + #include ], +- [int foo = res_ninit(NULL);])], ++ [ ++ int foo; ++ foo = res_ninit(NULL); ++ foo = res_nsearch(NULL, NULL, 0, 0, NULL, 0); ++ ])], + AC_MSG_RESULT(yes) + AC_DEFINE([HAVE_RES_NINIT], 1, [Define to 1 if your system has the re-entrant resolver functions.]) + AC_SEARCH_LIBS(res_9_ndestroy, resolv) +-- +2.19.1 + diff --git a/package/asterisk/Config.in b/package/asterisk/Config.in new file mode 100644 index 00000000..c52456f8 --- /dev/null +++ b/package/asterisk/Config.in @@ -0,0 +1,32 @@ +config BR2_PACKAGE_ASTERISK + bool "asterisk" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS # dlfcn.h + depends on !BR2_TOOLCHAIN_USES_MUSL + depends on BR2_USE_MMU # libedit + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_WCHAR # libedit + select BR2_PACKAGE_JANSSON + select BR2_PACKAGE_LIBCURL + select BR2_PACKAGE_LIBEDIT + select BR2_PACKAGE_LIBILBC + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_SQLITE + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + help + Asterisk is an open source framework for building + communications applications. Asterisk turns an ordinary + computer into a communications server. Asterisk powers IP PBX + systems, VoIP gateways, conference servers and other custom + solutions. It is used by small businesses, large businesses, + call centers, carriers and government agencies, worldwide. + Asterisk is free and open source. + + http://www.asterisk.org/ + +comment "asterisk needs a glibc or uClibc toolchain w/ C++, dynamic library, threads, wchar" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_USES_MUSL || !BR2_INSTALL_LIBSTDCPP \ + || BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS \ + || !BR2_USE_WCHAR diff --git a/package/asterisk/asterisk.hash b/package/asterisk/asterisk.hash new file mode 100644 index 00000000..bd836362 --- /dev/null +++ b/package/asterisk/asterisk.hash @@ -0,0 +1,15 @@ +# Locally computed +sha256 226eaef400d2d335ce29d7b3c8aca8dfdfc5e854c215e0c47615c095ced12171 asterisk-16.14.1.tar.gz + +# sha1 from: http://downloads.asterisk.org/pub/telephony/sounds/releases +# sha256 locally computed +sha1 721c512feaea102700d5bdce952fdc0bb29dc640 asterisk-core-sounds-en-gsm-1.6.1.tar.gz +sha256 d79c3d2044d41da8f363c447dfccc140be86b4fcc41b1ca5a60a80da52f24f2d asterisk-core-sounds-en-gsm-1.6.1.tar.gz +sha1 f40fd6ea03dfe8d72ada2540b2288bfdc006381d asterisk-moh-opsound-wav-2.03.tar.gz +sha256 449fb810d16502c3052fedf02f7e77b36206ac5a145f3dacf4177843a2fcb538 asterisk-moh-opsound-wav-2.03.tar.gz + +# License files, locally computed +sha256 82af40ed7f49c08685360811993d9396320842f021df828801d733e8fdc0312f COPYING +sha256 ac5571f00e558e3b7c9b3f13f421b874cc12cf4250c4f70094c71544cf486312 main/sha1.c +sha256 6215e3ed73c3982a5c6701127d681ec0b9f1121ac78a28805bd93f93c3eb84c0 codecs/speex/speex_resampler.h +sha256 ea69cc96ab8a779c180a362377caeada71926897d1b55b980f04d74ba5aaa388 utils/db1-ast/include/db.h diff --git a/package/asterisk/asterisk.mk b/package/asterisk/asterisk.mk new file mode 100644 index 00000000..67b6da56 --- /dev/null +++ b/package/asterisk/asterisk.mk @@ -0,0 +1,342 @@ +################################################################################ +# +# asterisk +# +################################################################################ + +ASTERISK_VERSION = 16.14.1 +# Use the github mirror: it's an official mirror maintained by Digium, and +# provides tarballs, which the main Asterisk git tree (behind Gerrit) does not. +ASTERISK_SITE = $(call github,asterisk,asterisk,$(ASTERISK_VERSION)) + +ASTERISK_SOUNDS_BASE_URL = http://downloads.asterisk.org/pub/telephony/sounds/releases +ASTERISK_EXTRA_DOWNLOADS = \ + $(ASTERISK_SOUNDS_BASE_URL)/asterisk-core-sounds-en-gsm-1.6.1.tar.gz \ + $(ASTERISK_SOUNDS_BASE_URL)/asterisk-moh-opsound-wav-2.03.tar.gz + +ASTERISK_LICENSE = GPL-2.0, BSD-3c (SHA1, resample), BSD-4c (db1-ast) +ASTERISK_LICENSE_FILES = \ + COPYING \ + main/sha1.c \ + codecs/speex/speex_resampler.h \ + utils/db1-ast/include/db.h + +ASTERISK_CPE_ID_VENDOR = asterisk +ASTERISK_CPE_ID_PRODUCT = open_source + +# For patches 0002, 0003 and 0005 +ASTERISK_AUTORECONF = YES +ASTERISK_AUTORECONF_OPTS = -Iautoconf -Ithird-party -Ithird-party/pjproject -Ithird-party/jansson + +ASTERISK_DEPENDENCIES = \ + host-asterisk \ + jansson \ + libcurl \ + libedit \ + libxml2 \ + sqlite \ + util-linux + +# Asterisk wants to run its menuselect tool (a highly tweaked derivative of +# kconfig), but builds it using the target tools. So we build it in the host +# variant (see below), and copy the full build tree of menuselect. +define ASTERISK_COPY_MENUSELECT + rm -rf $(@D)/menuselect + cp -a $(HOST_ASTERISK_DIR)/menuselect $(@D)/menuselect +endef +ASTERISK_PRE_CONFIGURE_HOOKS += ASTERISK_COPY_MENUSELECT + +ASTERISK_CONF_OPTS = \ + --disable-xmldoc \ + --disable-internal-poll \ + --disable-asteriskssl \ + --disable-rpath \ + --without-bfd \ + --without-cap \ + --without-cpg \ + --without-curses \ + --without-gtk2 \ + --without-gmime \ + --without-hoard \ + --without-iconv \ + --without-iksemel \ + --without-imap \ + --without-inotify \ + --without-iodbc \ + --without-isdnnet \ + --without-jack \ + --without-uriparser \ + --without-kqueue \ + --without-libedit \ + --without-libxslt \ + --without-lua \ + --without-misdn \ + --without-mysqlclient \ + --without-nbs \ + --without-neon29 \ + --without-newt \ + --without-openr2 \ + --without-osptk \ + --without-oss \ + --without-postgres \ + --without-pjproject \ + --without-pjproject-bundled \ + --without-popt \ + --without-resample \ + --without-sdl \ + --without-SDL_image \ + --without-sqlite \ + --without-suppserv \ + --without-tds \ + --without-termcap \ + --without-timerfd \ + --without-tinfo \ + --without-unbound \ + --without-unixodbc \ + --without-vpb \ + --without-x11 \ + --with-crypt \ + --with-jansson \ + --with-libcurl \ + --with-ilbc \ + --with-libxml2 \ + --with-libedit="$(STAGING_DIR)/usr" \ + --with-sqlite3="$(STAGING_DIR)/usr" \ + --with-sounds-cache=$(ASTERISK_DL_DIR) + +# avcodec are from ffmpeg. There is virtually zero chance this could +# even work; asterisk is looking for ffmpeg/avcodec.h which has not +# been installed in this location since early 2007 (~10 years ago at +# the time of this writing). +ASTERISK_CONF_OPTS += --without-avcodec + +# asterisk is not compatible with freeswitch spandsp +ASTERISK_CONF_OPTS += --without-spandsp + +ASTERISK_CONF_ENV = \ + ac_cv_file_bridges_bridge_softmix_include_hrirs_h=true \ + ac_cv_path_CONFIG_LIBXML2=$(STAGING_DIR)/usr/bin/xml2-config + +# Uses __atomic_fetch_add_4 +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +ASTERISK_CONF_ENV += LIBS="-latomic" +endif + +ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),y) +ASTERISK_CONF_OPTS += --with-execinfo +else +ASTERISK_CONF_OPTS += --without-execinfo +endif + +ifeq ($(BR2_PACKAGE_LIBGSM),y) +ASTERISK_DEPENDENCIES += libgsm +ASTERISK_CONF_OPTS += --with-gsm +else +ASTERISK_CONF_OPTS += --without-gsm +endif + +ifeq ($(BR2_PACKAGE_ALSA_LIB),y) +ASTERISK_DEPENDENCIES += alsa-lib +ASTERISK_CONF_OPTS += --with-asound +else +ASTERISK_CONF_OPTS += --without-asound +endif + +ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS),y) +ASTERISK_DEPENDENCIES += bluez5_utils +ASTERISK_CONF_OPTS += --with-bluetooth +else +ASTERISK_CONF_OPTS += --without-bluetooth +endif + +ifeq ($(BR2_PACKAGE_LIBICAL),y) +ASTERISK_DEPENDENCIES += libical +ASTERISK_CONF_OPTS += --with-ical +else +ASTERISK_CONF_OPTS += --without-ical +endif + +ifeq ($(BR2_PACKAGE_OPENLDAP),y) +ASTERISK_DEPENDENCIES += openldap +ASTERISK_CONF_OPTS += --with-ldap +else +ASTERISK_CONF_OPTS += --without-ldap +endif + +ifeq ($(BR2_PACKAGE_NEON),y) +ASTERISK_DEPENDENCIES += neon +ASTERISK_CONF_OPTS += --with-neon +ASTERISK_CONF_ENV += \ + ac_cv_path_CONFIG_NEON=$(STAGING_DIR)/usr/bin/neon-config +else +ASTERISK_CONF_OPTS += --without-neon +endif + +ifeq ($(BR2_PACKAGE_NETSNMP),y) +ASTERISK_DEPENDENCIES += netsnmp +ASTERISK_CONF_OPTS += --with-netsnmp=$(STAGING_DIR)/usr +else +ASTERISK_CONF_OPTS += --without-netsnmp +endif + +ifeq ($(BR2_PACKAGE_LIBOGG),y) +ASTERISK_DEPENDENCIES += libogg +ASTERISK_CONF_OPTS += --with-ogg +else +ASTERISK_CONF_OPTS += --without-ogg +endif + +ifeq ($(BR2_PACKAGE_OPUS),y) +ASTERISK_DEPENDENCIES += opus +ASTERISK_CONF_OPTS += --with-opus +else +ASTERISK_CONF_OPTS += --without-opus +endif + +ifeq ($(BR2_PACKAGE_PORTAUDIO),y) +ASTERISK_DEPENDENCIES += portaudio +ASTERISK_CONF_OPTS += --with-portaudio +else +ASTERISK_CONF_OPTS += --without-portaudio +endif + +ifeq ($(BR2_PACKAGE_FREERADIUS_CLIENT),y) +ASTERISK_DEPENDENCIES += freeradius-client +ASTERISK_CONF_OPTS += --with-radius +else +ASTERISK_CONF_OPTS += --without-radius +endif + +ifeq ($(BR2_PACKAGE_DAHDI_LINUX)$(BR2_PACKAGE_DAHDI_TOOLS),yy) +ASTERISK_DEPENDENCIES += dahdi-linux dahdi-tools +ASTERISK_CONF_OPTS += --with-dahdi --with-tonezone + +ifeq ($(BR2_PACKAGE_LIBPRI),y) +ASTERISK_DEPENDENCIES += libpri +ASTERISK_CONF_OPTS += --with-pri +else +ASTERISK_CONF_OPTS += --without-pri +endif # PRI + +ifeq ($(BR2_PACKAGE_LIBSS7),y) +ASTERISK_DEPENDENCIES += libss7 +ASTERISK_CONF_OPTS += --with-ss7 +else +ASTERISK_CONF_OPTS += --without-ss7 +endif # SS7 + +else +ASTERISK_CONF_OPTS += \ + --without-dahdi --without-tonezone \ + --without-pri --without-ss7 +endif # DAHDI + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +ASTERISK_DEPENDENCIES += openssl +ASTERISK_CONF_OPTS += --with-ssl +else +ASTERISK_CONF_OPTS += --without-ssl +endif + +ifeq ($(BR2_PACKAGE_SPEEX)$(BR2_PACKAGE_SPEEXDSP),yy) +ASTERISK_DEPENDENCIES += speex +ASTERISK_CONF_OPTS += --with-speex --with-speexdsp +else +ASTERISK_CONF_OPTS += --without-speex --without-speexdsp +endif + +# asterisk needs an openssl-enabled libsrtp +ifeq ($(BR2_PACKAGE_LIBSRTP)$(BR2_PACKAGE_OPENSSL)x$(BR2_STATIC_LIBS),yyx) +ASTERISK_DEPENDENCIES += libsrtp +ASTERISK_CONF_OPTS += --with-srtp +else +ASTERISK_CONF_OPTS += --without-srtp +endif + +ifeq ($(BR2_PACKAGE_LIBVORBIS),y) +ASTERISK_DEPENDENCIES += libvorbis +ASTERISK_CONF_OPTS += --with-vorbis +else +ASTERISK_CONF_OPTS += --without-vorbis +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +ASTERISK_DEPENDENCIES += zlib +ASTERISK_CONF_OPTS += --with-z +else +ASTERISK_CONF_OPTS += --without-z +endif + +ASTERISK_DIRS = \ + ASTVARLIBDIR="/usr/lib/asterisk" \ + ASTDATADIR="/usr/lib/asterisk" \ + ASTKEYDIR="/usr/lib/asterisk" \ + ASTDBDIR="/usr/lib/asterisk" + +ASTERISK_MAKE_OPTS = $(ASTERISK_DIRS) + +# Uses __atomic_fetch_add_4 +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +ASTERISK_MAKE_OPTS += ASTLDFLAGS="-latomic" +endif + +# Remove default -O3 optimization flag +ASTERISK_MAKE_OPTS += OPTIMIZE="" + +ASTERISK_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_93847),y) +ASTERISK_CFLAGS += -O0 +endif + +ASTERISK_CONF_OPTS += CFLAGS="$(ASTERISK_CFLAGS)" + +# We want to install sample configuration files, too. +ASTERISK_INSTALL_TARGET_OPTS = \ + $(ASTERISK_DIRS) \ + DESTDIR=$(TARGET_DIR) \ + LDCONFIG=true \ + install samples + +$(eval $(autotools-package)) + +#------------------------------------------------------------------------------- +# This part deals with building the menuselect tool as a host package + +HOST_ASTERISK_DEPENDENCIES = host-pkgconf host-libxml2 host-ncurses +HOST_ASTERISK_SUBDIR = menuselect + +HOST_ASTERISK_LICENSE = GPL-2.0 +HOST_ASTERISK_LICENSE_FILES = COPYING + +# No need to autoreconf for the host variant, +# so do not inherit the target setup. +HOST_ASTERISK_AUTORECONF = NO + +HOST_ASTERISK_CONF_ENV = CONFIG_LIBXML2=$(HOST_DIR)/bin/xml2-config + +HOST_ASTERISK_CONF_OPTS = \ + --without-newt \ + --without-curses \ + --with-ncurses=$(HOST_DIR) + +# Not an automake package, so does not inherit LDFLAGS et al. from +# the configure run. +HOST_ASTERISK_MAKE_ENV = $(HOST_CONFIGURE_OPTS) + +# Even though menuselect is an autotools package, it is not an automake +# package and does not have an 'install' rule, as asterisk does expect +# it to be in a sub-directory of its source tree. We do so by copying +# the full menuselect build tree as a pre-configure hook in the target +# variant. +# However, the sanity checks on host packages are not run on menuselect. +# But we still want to catch that menuselect has the proper rpath set, +# for example, as it uses host libraries that we do build, like +# host-libxml2. +# So we do manually install the menuselect tool. +define HOST_ASTERISK_INSTALL_CMDS + $(INSTALL) -D -m 0755 $(@D)/menuselect/menuselect \ + $(HOST_DIR)/bin/asterisk-menuselect +endef + +$(eval $(host-autotools-package)) diff --git a/package/at-spi2-atk/0001-meson-add-tests-option.patch b/package/at-spi2-atk/0001-meson-add-tests-option.patch new file mode 100644 index 00000000..3a2aefa0 --- /dev/null +++ b/package/at-spi2-atk/0001-meson-add-tests-option.patch @@ -0,0 +1,43 @@ +From 466d04a57b32417dbf2d5e818af1b7593af5f802 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 3 May 2020 10:29:36 +0200 +Subject: [PATCH] meson: add tests option + +Add tests option to allow the user to build at-spi2-atk without tests, +it is especially useful as one of the test requires libxml-2.0 + +Signed-off-by: Fabrice Fontaine +[Upstream status: +https://gitlab.gnome.org/GNOME/at-spi2-atk/-/merge_requests/22] +--- + meson.build | 4 +++- + meson_options.txt | 4 ++++ + 2 files changed, 7 insertions(+), 1 deletion(-) + +diff --git a/meson.build b/meson.build +index 9fce5d6..61bc93d 100644 +--- a/meson.build ++++ b/meson.build +@@ -61,4 +61,6 @@ install_data('at-spi2-atk.desktop', + + subdir('droute') + subdir('atk-adaptor') +-subdir('tests') ++if get_option('tests') ++ subdir('tests') ++endif +diff --git a/meson_options.txt b/meson_options.txt +index 24c9228..a4abdc2 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -2,3 +2,7 @@ option('disable_p2p', + description: 'Disable peer-to-peer DBus connections', + type: 'boolean', + value: false) ++option('tests', ++ description: 'Whether to build tests', ++ type: 'boolean', ++ value: true) +-- +2.26.2 + diff --git a/package/at-spi2-atk/Config.in b/package/at-spi2-atk/Config.in new file mode 100644 index 00000000..9a7cfde0 --- /dev/null +++ b/package/at-spi2-atk/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_AT_SPI2_ATK + bool "at-spi2-atk" + depends on BR2_PACKAGE_XORG7 # at-spi2-core + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + depends on BR2_USE_WCHAR # glib2 + select BR2_PACKAGE_ATK + select BR2_PACKAGE_AT_SPI2_CORE + select BR2_PACKAGE_LIBGLIB2 + help + The At-Spi2 Atk package contains a library that bridges + ATK to At-Spi2 D-Bus service. + + https://www.freedesktop.org/wiki/Accessibility/AT-SPI2/ + +comment "at-spi2-atk needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS + +comment "at-spi2-atk depends on X.org" + depends on BR2_USE_MMU + depends on !BR2_PACKAGE_XORG7 diff --git a/package/at-spi2-atk/at-spi2-atk.hash b/package/at-spi2-atk/at-spi2-atk.hash new file mode 100644 index 00000000..9c564c32 --- /dev/null +++ b/package/at-spi2-atk/at-spi2-atk.hash @@ -0,0 +1,5 @@ +# From http://ftp.acc.umu.se/pub/gnome/sources/at-spi2-atk/2.34/at-spi2-atk-2.34.2.sha256sum +sha256 901323cee0eef05c01ec4dee06c701aeeca81a314a7d60216fa363005e27f4f0 at-spi2-atk-2.34.2.tar.xz + +# locally calculated +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/at-spi2-atk/at-spi2-atk.mk b/package/at-spi2-atk/at-spi2-atk.mk new file mode 100644 index 00000000..232b5772 --- /dev/null +++ b/package/at-spi2-atk/at-spi2-atk.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# at-spi2-atk +# +################################################################################ + +AT_SPI2_ATK_VERSION_MAJOR = 2.34 +AT_SPI2_ATK_VERSION = $(AT_SPI2_ATK_VERSION_MAJOR).2 +AT_SPI2_ATK_SOURCE = at-spi2-atk-$(AT_SPI2_ATK_VERSION).tar.xz +AT_SPI2_ATK_SITE = \ + http://ftp.gnome.org/pub/gnome/sources/at-spi2-atk/$(AT_SPI2_ATK_VERSION_MAJOR) +AT_SPI2_ATK_LICENSE = LGPL-2.1+ +AT_SPI2_ATK_LICENSE_FILES = COPYING +AT_SPI2_ATK_CPE_ID_VENDOR = gnome +AT_SPI2_ATK_INSTALL_STAGING = YES +AT_SPI2_ATK_DEPENDENCIES = atk at-spi2-core libglib2 host-pkgconf +AT_SPI2_ATK_CONF_OPTS = -Dtests=false + +$(eval $(meson-package)) diff --git a/package/at-spi2-core/Config.in b/package/at-spi2-core/Config.in new file mode 100644 index 00000000..f56c5b93 --- /dev/null +++ b/package/at-spi2-core/Config.in @@ -0,0 +1,25 @@ +config BR2_PACKAGE_AT_SPI2_CORE + bool "at-spi2-core" + depends on BR2_PACKAGE_XORG7 # xlib-libxtst + depends on BR2_TOOLCHAIN_HAS_THREADS # dbus, glib2 + depends on BR2_USE_MMU # glib2 + depends on BR2_USE_WCHAR # glib2 + select BR2_PACKAGE_DBUS + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_XLIB_LIBXTST + help + The At-Spi2 Core package is a part of the GNOME + Accessibility Project. It provides a Service Provider + Interface for the Assistive Technologies available on the + GNOME platform and a library against which applications + can be linked. + + https://wiki.gnome.org/Accessibility + +comment "at-spi2-core needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS + +comment "at-spi2-core depends on X.org" + depends on BR2_USE_MMU + depends on !BR2_PACKAGE_XORG7 diff --git a/package/at-spi2-core/at-spi2-core.hash b/package/at-spi2-core/at-spi2-core.hash new file mode 100644 index 00000000..e2cc403e --- /dev/null +++ b/package/at-spi2-core/at-spi2-core.hash @@ -0,0 +1,5 @@ +# From http://ftp.acc.umu.se/pub/gnome/sources/at-spi2-core/2.36/at-spi2-core-2.36.0.sha256sum +sha256 88da57de0a7e3c60bc341a974a80fdba091612db3547c410d6deab039ca5c05a at-spi2-core-2.36.0.tar.xz + +# locally calculated +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/at-spi2-core/at-spi2-core.mk b/package/at-spi2-core/at-spi2-core.mk new file mode 100644 index 00000000..cf7fdd29 --- /dev/null +++ b/package/at-spi2-core/at-spi2-core.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# at-spi2-core +# +################################################################################ + +AT_SPI2_CORE_VERSION_MAJOR = 2.36 +AT_SPI2_CORE_VERSION = $(AT_SPI2_CORE_VERSION_MAJOR).0 +AT_SPI2_CORE_SOURCE = at-spi2-core-$(AT_SPI2_CORE_VERSION).tar.xz +AT_SPI2_CORE_SITE = http://ftp.gnome.org/pub/gnome/sources/at-spi2-core/$(AT_SPI2_CORE_VERSION_MAJOR) +AT_SPI2_CORE_LICENSE = LGPL-2.1+ +AT_SPI2_CORE_LICENSE_FILES = COPYING +AT_SPI2_CORE_INSTALL_STAGING = YES +AT_SPI2_CORE_DEPENDENCIES = host-pkgconf dbus libglib2 xlib_libXtst \ + $(TARGET_NLS_DEPENDENCIES) +AT_SPI2_CORE_CONF_OPTS = -Ddbus_daemon=/usr/bin/dbus-daemon + +AT_SPI2_CORE_LDFLAGS = $(TARGET_LDFLAGS) $(TARGET_NLS_LIBS) + +$(eval $(meson-package)) diff --git a/package/at/0001-Makefile.in-replace-IROOT-by-DESTDIR.patch b/package/at/0001-Makefile.in-replace-IROOT-by-DESTDIR.patch new file mode 100644 index 00000000..856b6c8d --- /dev/null +++ b/package/at/0001-Makefile.in-replace-IROOT-by-DESTDIR.patch @@ -0,0 +1,108 @@ +From 195d30e2e01fe2f91ed3bdaeec3982aa66b309dd Mon Sep 17 00:00:00 2001 +From: Marc Kleine-Budde +Date: Tue, 1 Dec 2009 20:57:45 +0100 +Subject: [PATCH 5/5] Makefile.in: replace IROOT by DESTDIR + +This patch replaces IROOT by DESTDIR, which is the autotools standard +variable. For backwards compatibilty IROOT overwrites the DESTDIR. + +[Vincent: tweak the patch for the new version] + +Signed-off-by: Marc Kleine-Budde +Signed-off-by: Vicente Olivert Riera +--- + Makefile.in | 68 ++++++++++++++++++++++++++++++++----------------------------- + 1 file changed, 36 insertions(+), 32 deletions(-) + +diff --git a/Makefile.in b/Makefile.in +index 06544f9..1f699d9 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -17,6 +17,10 @@ atdocdir = $(docdir)/at + etcdir = @ETCDIR@ + systemdsystemunitdir = @systemdsystemunitdir@ + ++ifdef IROOT ++DESTDIR = $(DESTDIR) ++endif ++ + DAEMON_USERNAME = @DAEMON_USERNAME@ + DAEMON_GROUPNAME= @DAEMON_GROUPNAME@ + LOADAVG_MX = @LOADAVG_MX@ +@@ -91,41 +95,41 @@ atrun: atrun.in + $(CC) -c $(CFLAGS) $(DEFS) $*.c + + install: all +- $(INSTALL) -g root -o root -m 755 -d $(IROOT)$(etcdir) +- $(INSTALL) -g root -o root -m 755 -d $(IROOT)$(bindir) +- $(INSTALL) -g root -o root -m 755 -d $(IROOT)$(sbindir) +- $(INSTALL) -g root -o root -m 755 -d $(IROOT)$(docdir) +- $(INSTALL) -g root -o root -m 755 -d $(IROOT)$(atdocdir) +- $(INSTALL) -g $(DAEMON_GROUPNAME) -o $(DAEMON_USERNAME) -m 755 -d $(IROOT)$(ATSPOOL_DIR) $(IROOT)$(ATJOB_DIR) +- chmod 1770 $(IROOT)$(ATSPOOL_DIR) $(IROOT)$(ATJOB_DIR) +- touch $(IROOT)$(LFILE) +- chmod 600 $(IROOT)$(LFILE) +- chown $(DAEMON_USERNAME):$(DAEMON_GROUPNAME) $(IROOT)$(LFILE) +- test -f $(IROOT)$(etcdir)/at.allow || test -f $(IROOT)$(etcdir)/at.deny || $(INSTALL) -o root -g $(DAEMON_GROUPNAME) -m 640 at.deny $(IROOT)$(etcdir)/ +- $(INSTALL) -g $(DAEMON_GROUPNAME) -o $(DAEMON_USERNAME) -m 6755 at $(IROOT)$(bindir) +- $(LN_S) -f at $(IROOT)$(bindir)/atq +- $(LN_S) -f at $(IROOT)$(bindir)/atrm +- $(INSTALL) -g root -o root -m 755 batch $(IROOT)$(bindir) +- $(INSTALL) -d -o root -g root -m 755 $(IROOT)$(man1dir) +- $(INSTALL) -d -o root -g root -m 755 $(IROOT)$(man5dir) +- $(INSTALL) -d -o root -g root -m 755 $(IROOT)$(man8dir) +- $(INSTALL) -g root -o root -m 755 atd $(IROOT)$(sbindir) +- $(INSTALL) -g root -o root -m 755 atrun $(IROOT)$(sbindir) +- $(INSTALL) -g root -o root -m 644 at.1 $(IROOT)$(man1dir)/ +- cd $(IROOT)$(man1dir) && $(LN_S) -f at.1 atq.1 && $(LN_S) -f at.1 batch.1 && $(LN_S) -f at.1 atrm.1 +- $(INSTALL) -g root -o root -m 644 atd.8 $(IROOT)$(man8dir)/ ++ $(INSTALL) -g root -o root -m 755 -d $(DESTDIR)$(etcdir) ++ $(INSTALL) -g root -o root -m 755 -d $(DESTDIR)$(bindir) ++ $(INSTALL) -g root -o root -m 755 -d $(DESTDIR)$(sbindir) ++ $(INSTALL) -g root -o root -m 755 -d $(DESTDIR)$(docdir) ++ $(INSTALL) -g root -o root -m 755 -d $(DESTDIR)$(atdocdir) ++ $(INSTALL) -g $(DAEMON_GROUPNAME) -o $(DAEMON_USERNAME) -m 755 -d $(DESTDIR)$(ATSPOOL_DIR) $(DESTDIR)$(ATJOB_DIR) ++ chmod 1770 $(DESTDIR)$(ATSPOOL_DIR) $(DESTDIR)$(ATJOB_DIR) ++ touch $(DESTDIR)$(LFILE) ++ chmod 600 $(DESTDIR)$(LFILE) ++ chown $(DAEMON_USERNAME):$(DAEMON_GROUPNAME) $(DESTDIR)$(LFILE) ++ test -f $(DESTDIR)$(etcdir)/at.allow || test -f $(DESTDIR)$(etcdir)/at.deny || $(INSTALL) -o root -g $(DAEMON_GROUPNAME) -m 640 at.deny $(DESTDIR)$(etcdir)/ ++ $(INSTALL) -g $(DAEMON_GROUPNAME) -o $(DAEMON_USERNAME) -m 6755 at $(DESTDIR)$(bindir) ++ $(LN_S) -f at $(DESTDIR)$(bindir)/atq ++ $(LN_S) -f at $(DESTDIR)$(bindir)/atrm ++ $(INSTALL) -g root -o root -m 755 batch $(DESTDIR)$(bindir) ++ $(INSTALL) -d -o root -g root -m 755 $(DESTDIR)$(man1dir) ++ $(INSTALL) -d -o root -g root -m 755 $(DESTDIR)$(man5dir) ++ $(INSTALL) -d -o root -g root -m 755 $(DESTDIR)$(man8dir) ++ $(INSTALL) -g root -o root -m 755 atd $(DESTDIR)$(sbindir) ++ $(INSTALL) -g root -o root -m 755 atrun $(DESTDIR)$(sbindir) ++ $(INSTALL) -g root -o root -m 644 at.1 $(DESTDIR)$(man1dir)/ ++ cd $(DESTDIR)$(man1dir) && $(LN_S) -f at.1 atq.1 && $(LN_S) -f at.1 batch.1 && $(LN_S) -f at.1 atrm.1 ++ $(INSTALL) -g root -o root -m 644 atd.8 $(DESTDIR)$(man8dir)/ + sed "s,\$${exec_prefix},$(exec_prefix),g" tmpman +- $(INSTALL) -g root -o root -m 644 tmpman $(IROOT)$(man8dir)/atrun.8 ++ $(INSTALL) -g root -o root -m 644 tmpman $(DESTDIR)$(man8dir)/atrun.8 + rm -f tmpman +- $(INSTALL) -g root -o root -m 644 at.allow.5 $(IROOT)$(man5dir)/ +- cd $(IROOT)$(man5dir) && $(LN_S) -f at.allow.5 at.deny.5 +- $(INSTALL) -g root -o root -m 644 $(DOCS) $(IROOT)$(atdocdir) +- rm -f $(IROOT)$(mandir)/cat1/at.1* $(IROOT)$(mandir)/cat1/batch.1* \ +- $(IROOT)$(mandir)/cat1/atq.1* +- rm -f $(IROOT)$(mandir)/cat1/atd.8* ++ $(INSTALL) -g root -o root -m 644 at.allow.5 $(DESTDIR)$(man5dir)/ ++ cd $(DESTDIR)$(man5dir) && $(LN_S) -f at.allow.5 at.deny.5 ++ $(INSTALL) -g root -o root -m 644 $(DOCS) $(DESTDIR)$(atdocdir) ++ rm -f $(DESTDIR)$(mandir)/cat1/at.1* $(DESTDIR)$(mandir)/cat1/batch.1* \ ++ $(DESTDIR)$(mandir)/cat1/atq.1* ++ rm -f $(DESTDIR)$(mandir)/cat1/atd.8* + if test x"$(systemdsystemunitdir)" != xno; then \ +- $(INSTALL) -o root -g root -m 755 -d $(IROOT)$(systemdsystemunitdir); \ +- $(INSTALL) -o root -g root -m 644 atd.service $(IROOT)$(systemdsystemunitdir); \ ++ $(INSTALL) -o root -g root -m 755 -d $(DESTDIR)$(systemdsystemunitdir); \ ++ $(INSTALL) -o root -g root -m 644 atd.service $(DESTDIR)$(systemdsystemunitdir); \ + fi + + dist: checkin $(DIST) $(LIST) Filelist.asc +-- +2.4.10 + diff --git a/package/at/0002-Makefile.in-make-install-fix.patch b/package/at/0002-Makefile.in-make-install-fix.patch new file mode 100644 index 00000000..831ea1a3 --- /dev/null +++ b/package/at/0002-Makefile.in-make-install-fix.patch @@ -0,0 +1,83 @@ +[PATCH]: Makefile.in: fix make install for non-root, don't strip + +Buildroot will ensure all files are owned by root and stripped anyway +(if needed) before the rootfs is created. + +[Vincent: tweak the patch for the new version] + +Signed-off-by: Peter Korsgaard +Signed-off-by: Vicente Olivert Riera +--- + Makefile.in | 43 +++++++++++++++++++++---------------------- + 1 file changed, 21 insertions(+), 22 deletions(-) + +diff --git a/Makefile.in b/Makefile.in +index 1f699d9..f313f9b 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -95,41 +95,40 @@ atrun: atrun.in + $(CC) -c $(CFLAGS) $(DEFS) $*.c + + install: all +- $(INSTALL) -g root -o root -m 755 -d $(DESTDIR)$(etcdir) +- $(INSTALL) -g root -o root -m 755 -d $(DESTDIR)$(bindir) +- $(INSTALL) -g root -o root -m 755 -d $(DESTDIR)$(sbindir) +- $(INSTALL) -g root -o root -m 755 -d $(DESTDIR)$(docdir) +- $(INSTALL) -g root -o root -m 755 -d $(DESTDIR)$(atdocdir) +- $(INSTALL) -g $(DAEMON_GROUPNAME) -o $(DAEMON_USERNAME) -m 755 -d $(DESTDIR)$(ATSPOOL_DIR) $(DESTDIR)$(ATJOB_DIR) ++ $(INSTALL) -m 755 -d $(DESTDIR)$(etcdir) ++ $(INSTALL) -m 755 -d $(DESTDIR)$(bindir) ++ $(INSTALL) -m 755 -d $(DESTDIR)$(sbindir) ++ $(INSTALL) -m 755 -d $(DESTDIR)$(docdir) ++ $(INSTALL) -m 755 -d $(DESTDIR)$(atdocdir) ++ $(INSTALL) -m 755 -d $(DESTDIR)$(ATSPOOL_DIR) $(DESTDIR)$(ATJOB_DIR) + chmod 1770 $(DESTDIR)$(ATSPOOL_DIR) $(DESTDIR)$(ATJOB_DIR) + touch $(DESTDIR)$(LFILE) + chmod 600 $(DESTDIR)$(LFILE) +- chown $(DAEMON_USERNAME):$(DAEMON_GROUPNAME) $(DESTDIR)$(LFILE) +- test -f $(DESTDIR)$(etcdir)/at.allow || test -f $(DESTDIR)$(etcdir)/at.deny || $(INSTALL) -o root -g $(DAEMON_GROUPNAME) -m 640 at.deny $(DESTDIR)$(etcdir)/ +- $(INSTALL) -g $(DAEMON_GROUPNAME) -o $(DAEMON_USERNAME) -m 6755 at $(DESTDIR)$(bindir) ++ test -f $(DESTDIR)$(etcdir)/at.allow || test -f $(DESTDIR)$(etcdir)/at.deny || $(INSTALL) -m 640 at.deny $(DESTDIR)$(etcdir)/ ++ $(INSTALL) -m 6755 at $(DESTDIR)$(bindir) + $(LN_S) -f at $(DESTDIR)$(bindir)/atq + $(LN_S) -f at $(DESTDIR)$(bindir)/atrm +- $(INSTALL) -g root -o root -m 755 batch $(DESTDIR)$(bindir) +- $(INSTALL) -d -o root -g root -m 755 $(DESTDIR)$(man1dir) +- $(INSTALL) -d -o root -g root -m 755 $(DESTDIR)$(man5dir) +- $(INSTALL) -d -o root -g root -m 755 $(DESTDIR)$(man8dir) +- $(INSTALL) -g root -o root -m 755 atd $(DESTDIR)$(sbindir) +- $(INSTALL) -g root -o root -m 755 atrun $(DESTDIR)$(sbindir) +- $(INSTALL) -g root -o root -m 644 at.1 $(DESTDIR)$(man1dir)/ ++ $(INSTALL) -m 755 batch $(DESTDIR)$(bindir) ++ $(INSTALL) -d -m 755 $(DESTDIR)$(man1dir) ++ $(INSTALL) -d -m 755 $(DESTDIR)$(man5dir) ++ $(INSTALL) -d -m 755 $(DESTDIR)$(man8dir) ++ $(INSTALL) -m 755 atd $(DESTDIR)$(sbindir) ++ $(INSTALL) -m 755 atrun $(DESTDIR)$(sbindir) ++ $(INSTALL) -m 644 at.1 $(DESTDIR)$(man1dir)/ + cd $(DESTDIR)$(man1dir) && $(LN_S) -f at.1 atq.1 && $(LN_S) -f at.1 batch.1 && $(LN_S) -f at.1 atrm.1 +- $(INSTALL) -g root -o root -m 644 atd.8 $(DESTDIR)$(man8dir)/ ++ $(INSTALL) -m 644 atd.8 $(DESTDIR)$(man8dir)/ + sed "s,\$${exec_prefix},$(exec_prefix),g" tmpman +- $(INSTALL) -g root -o root -m 644 tmpman $(DESTDIR)$(man8dir)/atrun.8 ++ $(INSTALL) -m 644 tmpman $(DESTDIR)$(man8dir)/atrun.8 + rm -f tmpman +- $(INSTALL) -g root -o root -m 644 at.allow.5 $(DESTDIR)$(man5dir)/ ++ $(INSTALL) -m 644 at.allow.5 $(DESTDIR)$(man5dir)/ + cd $(DESTDIR)$(man5dir) && $(LN_S) -f at.allow.5 at.deny.5 +- $(INSTALL) -g root -o root -m 644 $(DOCS) $(DESTDIR)$(atdocdir) ++ $(INSTALL) -m 644 $(DOCS) $(DESTDIR)$(atdocdir) + rm -f $(DESTDIR)$(mandir)/cat1/at.1* $(DESTDIR)$(mandir)/cat1/batch.1* \ + $(DESTDIR)$(mandir)/cat1/atq.1* + rm -f $(DESTDIR)$(mandir)/cat1/atd.8* + if test x"$(systemdsystemunitdir)" != xno; then \ +- $(INSTALL) -o root -g root -m 755 -d $(DESTDIR)$(systemdsystemunitdir); \ +- $(INSTALL) -o root -g root -m 644 atd.service $(DESTDIR)$(systemdsystemunitdir); \ ++ $(INSTALL) -m 755 -d $(DESTDIR)$(systemdsystemunitdir); \ ++ $(INSTALL) -m 644 atd.service $(DESTDIR)$(systemdsystemunitdir); \ + fi + + dist: checkin $(DIST) $(LIST) Filelist.asc +-- +2.4.10 + diff --git a/package/at/0003-getloadavg.c-fix.patch b/package/at/0003-getloadavg.c-fix.patch new file mode 100644 index 00000000..e0739271 --- /dev/null +++ b/package/at/0003-getloadavg.c-fix.patch @@ -0,0 +1,30 @@ +[PATCH]: fix getloadavg.c compilation, revert to 3.1.10 version + +getloadavg.c shipped with 3.1.13 doesn't compile because it references +headers not shipped. Fix it by simply reverting to the 3.1.10 version. + +Signed-off-by: Peter Korsgaard +--- + getloadavg.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +Index: at-3.1.13/getloadavg.c +=================================================================== +--- at-3.1.13.orig/getloadavg.c ++++ at-3.1.13/getloadavg.c +@@ -66,11 +66,12 @@ Boston, MA 02110-1301 USA */ + + /* This should always be first. */ + #ifdef HAVE_CONFIG_H +-#include ++#include "config.h" + #endif + +-#include "lisp.h" +-#include "sysfile.h" /* for encapsulated open, close, read, write */ ++#include ++#include ++#include + + #ifndef HAVE_GETLOADAVG + diff --git a/package/at/0004-Makefile-fix-parallel-build-failure.patch b/package/at/0004-Makefile-fix-parallel-build-failure.patch new file mode 100644 index 00000000..6e3dc24c --- /dev/null +++ b/package/at/0004-Makefile-fix-parallel-build-failure.patch @@ -0,0 +1,41 @@ +From 3ace0b57e2aacb784c01a3c7694c6c92461937ff Mon Sep 17 00:00:00 2001 +From: Giulio Benetti +Date: Thu, 20 Feb 2020 22:00:11 +0100 +Subject: [PATCH] Makefile: fix parallel build failure + +At the moment parallel build fails due to 2 causes: +1) parsetime.l tries to include incomplete y.tab.h, since y.tab.h is the +result of yacc -d parsetime.y +2) when compiling y.tab.c, y.tab.c itself is not complete, since it is +the result of yacc -d parsetime.y + +So fix it by: +1) making parsetime.l to wait for y.tab.h to be created by yacc +2) waiting for y.tab.c and y.tab.h to be created before compile them + +Signed-off-by: Giulio Benetti +--- + Makefile.in | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/Makefile.in b/Makefile.in +index 4c11913..57c3a0c 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -83,6 +83,8 @@ y.tab.c y.tab.h: parsetime.y + lex.yy.c: parsetime.l + $(LEX) -i parsetime.l + ++parsetime.l: y.tab.h ++ + atd.service: atd.service.in + cat $< | sed -e 's![@]sbindir[@]!$(sbindir)!g' | sed -e 's![@]atjobdir[@]!$(atjobdir)!g' > $@ + +@@ -173,3 +175,4 @@ perm.o: perm.c config.h privs.h at.h + posixtm.o: posixtm.c posixtm.h + daemon.o: daemon.c config.h daemon.h privs.h + getloadavg.o: getloadavg.c config.h getloadavg.h ++y.tab.o: y.tab.c y.tab.h +-- +2.20.1 + diff --git a/package/at/Config.in b/package/at/Config.in new file mode 100644 index 00000000..cbc5be47 --- /dev/null +++ b/package/at/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_AT + bool "at" + depends on BR2_USE_MMU + help + At and batch read shell commands from standard input and + store them as jobs to be scheduled for execution in the + future. + + at - run the job at a specified time + batch - run the job when system load levels permit + + https://salsa.debian.org/debian/at diff --git a/package/at/S99at b/package/at/S99at new file mode 100644 index 00000000..f132a46c --- /dev/null +++ b/package/at/S99at @@ -0,0 +1,47 @@ +#!/bin/sh +# +# Starts at daemon +# + +umask 077 + +start() { + # Since /var/spool can be linked to /tmp (tmpfs) + # /var/spool/cron/atjobs/.SEQ created could be not available + # Check if not exists otherwise create it + if [ ! -f /var/spool/cron/atjobs/.SEQ ]; then + mkdir -p /var/spool/cron/atjobs/ + touch /var/spool/cron/atjobs/.SEQ + printf "atd: created missing .SEQ file (atjobs will be lost on reboot)\n" + fi + + printf "Starting atd: " + start-stop-daemon --start --quiet --make-pidfile --pidfile /var/run/atd.pid --background --exec /usr/sbin/atd -- -f + echo "OK" +} +stop() { + printf "Stopping atd: " + start-stop-daemon --stop --quiet --pidfile /var/run/atd.pid + echo "OK" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/at/at.hash b/package/at/at.hash new file mode 100644 index 00000000..c5daf4ef --- /dev/null +++ b/package/at/at.hash @@ -0,0 +1,5 @@ +# Locally calculated +sha256 62123a6fcf02b2606673afca80c2874358b83880c12db7f276a7c6cc70068cb2 at-upstream-3.2.1.tar.bz2 + +sha256 01dccc0975aa9ba1a9f83e7c5e04f16077353d3c72a0a759b8846ee7a5b2b616 Copyright +sha256 c38aee9e3c8c4d5d594ff548a1be05453023016d6286931f6512db215ec1fd42 COPYING diff --git a/package/at/at.mk b/package/at/at.mk new file mode 100644 index 00000000..6ac82e2d --- /dev/null +++ b/package/at/at.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# at +# +################################################################################ + +AT_VERSION = 3.2.1 +AT_SOURCE = at-upstream-$(AT_VERSION).tar.bz2 +AT_SITE = https://salsa.debian.org/debian/at/-/archive/upstream/$(AT_VERSION) +AT_AUTORECONF = YES +AT_DEPENDENCIES = $(if $(BR2_PACKAGE_FLEX),flex) host-bison host-flex +AT_LICENSE = GPL-2.0+, GPL-3.0+, ISC +AT_LICENSE_FILES = Copyright COPYING + +AT_CONF_OPTS = \ + --with-jobdir=/var/spool/cron/atjobs \ + --with-atspool=/var/spool/cron/atspool \ + --with-daemon_username=root \ + --with-daemon_groupname=root \ + SENDMAIL=/usr/sbin/sendmail + +define AT_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/at/S99at $(TARGET_DIR)/etc/init.d/S99at +endef + +$(eval $(autotools-package)) diff --git a/package/atest/0001-seq.h-fix-build-with-gcc-10.patch b/package/atest/0001-seq.h-fix-build-with-gcc-10.patch new file mode 100644 index 00000000..c0ae042b --- /dev/null +++ b/package/atest/0001-seq.h-fix-build-with-gcc-10.patch @@ -0,0 +1,40 @@ +From fb374e0775fd9772a2cd7b99a5c21f96f7fe2a9a Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 10 Aug 2020 12:12:07 +0200 +Subject: [PATCH] seq.h: fix build with gcc 10 + +Rename state structure to avoid the following build failure with gcc +10.0: + +/bin/bash ./libtool --tag=CC --mode=link /home/test/autobuild/run/instance-0/output-1/host/bin/arm-buildroot-linux-gnueabihf-gcc -include config.h -Wall -Wno-sign-compare -Wno-strict-aliasing -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -o atest atest.o seq.o alsa.o capture.o playback.o loopback_delay.o -L/home/test/autobuild/run/instance-0/output-1/host/bin/../arm-buildroot-linux-gnueabihf/sysroot/usr/lib -lasound -lev +libtool: link: /home/test/autobuild/run/instance-0/output-1/host/bin/arm-buildroot-linux-gnueabihf-gcc -include config.h -Wall -Wno-sign-compare -Wno-strict-aliasing -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -o atest atest.o seq.o alsa.o capture.o playback.o loopback_delay.o -L/home/test/autobuild/run/instance-0/output-1/host/bin/../arm-buildroot-linux-gnueabihf/sysroot/usr/lib /home/test/autobuild/run/instance-0/output-1/host/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/libasound.so -ldl -lpthread -lrt /home/test/autobuild/run/instance-0/output-1/host/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/libev.so -lm -Wl,-rpath -Wl,/home/test/autobuild/run/instance-0/output-1/host/arm-buildroot-linux-gnueabihf/sysroot/usr/lib -Wl,-rpath -Wl,/home/test/autobuild/run/instance-0/output-1/host/arm-buildroot-linux-gnueabihf/sysroot/usr/lib +/home/test/autobuild/run/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: seq.o:(.bss+0x8): multiple definition of `state'; atest.o:(.bss+0xbc): first defined here +/home/test/autobuild/run/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: capture.o:(.bss+0x0): multiple definition of `state'; atest.o:(.bss+0xbc): first defined here +/home/test/autobuild/run/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: playback.o:(.bss+0x0): multiple definition of `state'; atest.o:(.bss+0xbc): first defined here +/home/test/autobuild/run/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: loopback_delay.o:(.bss+0x0): multiple definition of `state'; atest.o:(.bss+0xbc): first defined here + +Fixes: + - http://autobuild.buildroot.org/results/887c466b3703449239eedaf86f3f4dd2a2dc8afe + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/amouiche/atest/pull/3] +--- + seq.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/seq.h b/seq.h +index 0fa1a95..b7ba8d1 100644 +--- a/seq.h ++++ b/seq.h +@@ -30,7 +30,7 @@ enum seq_stat_e { + NULL_FRAME = 0, + INVALID_FRAME, + VALID_FRAME, +-} state; ++}; + + + struct seq_info { +-- +2.27.0 + diff --git a/package/atest/Config.in b/package/atest/Config.in new file mode 100644 index 00000000..647b2163 --- /dev/null +++ b/package/atest/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_ATEST + bool "atest" + depends on BR2_TOOLCHAIN_HAS_THREADS # alsa-lib + select BR2_PACKAGE_ALSA_LIB + select BR2_PACKAGE_LIBEV + help + atest is a test software for checking ALSA Asoc drivers + concerning the proper frame generation and capture. + + https://github.com/amouiche/atest + +comment "atest needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/atest/atest.hash b/package/atest/atest.hash new file mode 100644 index 00000000..8384f317 --- /dev/null +++ b/package/atest/atest.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 91da5a6d4d0b0a8d4bae156a40e91a6dccf62863bfa7acae948efbbd2b4154ca atest-895b0183a89c15f5e2305a6795bb1667753cd3f0.tar.gz +sha256 204d8eff92f95aac4df6c8122bc1505f468f3a901e5a4cc08940e0ede1938994 COPYING diff --git a/package/atest/atest.mk b/package/atest/atest.mk new file mode 100644 index 00000000..68def46c --- /dev/null +++ b/package/atest/atest.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# atest +# +################################################################################ + +ATEST_VERSION = 895b0183a89c15f5e2305a6795bb1667753cd3f0 +ATEST_SITE = $(call github,amouiche,atest,$(ATEST_VERSION)) +ATEST_LICENSE = GPL-2.0+ +ATEST_LICENSE_FILES = COPYING +ATEST_DEPENDENCIES = host-pkgconf libev alsa-lib +# Fetched from Github, with no configure script +ATEST_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/atf/Config.in b/package/atf/Config.in new file mode 100644 index 00000000..43a5d4f2 --- /dev/null +++ b/package/atf/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_ATF + bool "atf" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_MMU # fork() + help + ATF, or Automated Testing Framework, is a collection of + libraries to write test programs in C, C++ and POSIX shell. + + https://github.com/jmmv/atf + +comment "atf needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_MMU diff --git a/package/atf/atf.hash b/package/atf/atf.hash new file mode 100644 index 00000000..49c235a6 --- /dev/null +++ b/package/atf/atf.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 92bc64180135eea8fe84c91c9f894e678767764f6dbc8482021d4dde09857505 atf-0.21.tar.gz +sha256 2a15172ddf6386297734c9800c899e6e8dc16c5a03931dcf95a9ab321a24cfe4 COPYING diff --git a/package/atf/atf.mk b/package/atf/atf.mk new file mode 100644 index 00000000..9630cf1a --- /dev/null +++ b/package/atf/atf.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# atf +# +################################################################################ + +ATF_VERSION = 0.21 +ATF_SITE = https://github.com/jmmv/atf/releases/download/atf-$(ATF_VERSION) +ATF_INSTALL_STAGING = YES +ATF_LICENSE = BSD-2-Clause, BSD-3-Clause +ATF_LICENSE_FILES = COPYING +# Ships a beta libtool version hence our patch doesn't apply. +ATF_AUTORECONF = YES +# Do not install precompiled tests. +ATF_INSTALL_TARGET_OPTS = DESTDIR=$(TARGET_DIR) install-exec + +# ATF_SHELL defaults to the host's bash +ATF_CONF_ENV = \ + kyua_cv_getopt_plus=yes \ + kyua_cv_attribute_noreturn=yes \ + kyua_cv_getcwd_works=yes \ + ATF_SHELL=/bin/sh + +$(eval $(autotools-package)) diff --git a/package/atftp/Config.in b/package/atftp/Config.in new file mode 100644 index 00000000..70747163 --- /dev/null +++ b/package/atftp/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_ATFTP + bool "atftp" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + atftp is a client/server implementation of the TFTP + protocol that implements RFCs 1350, 2090, 2347, 2348, + and 2349. The server is multi-threaded and the client + presents a friendly interface using libreadline + (if enabled). + + http://sourceforge.net/projects/atftp/ + +comment "atftp needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/atftp/atftp.hash b/package/atftp/atftp.hash new file mode 100644 index 00000000..158e9e3b --- /dev/null +++ b/package/atftp/atftp.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 d3c9cd0d971dfc786d7a5f4055c35d4e66aafc8102ac03473ef225bdf7edb26a atftp-0.7.4.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 LICENSE diff --git a/package/atftp/atftp.mk b/package/atftp/atftp.mk new file mode 100644 index 00000000..a2df4af0 --- /dev/null +++ b/package/atftp/atftp.mk @@ -0,0 +1,36 @@ +################################################################################ +# +# atftp +# +################################################################################ + +ATFTP_VERSION = 0.7.4 +ATFTP_SITE = http://sourceforge.net/projects/atftp/files +ATFTP_LICENSE = GPL-2.0+ +ATFTP_LICENSE_FILES = LICENSE +ATFTP_CPE_ID_VENDOR = atftp_project +ATFTP_CONF_OPTS = --disable-libwrap --disable-mtftp +# For static we need to explicitly link against libpthread +ATFTP_LIBS = -lpthread +# -fgnu89-inline is needed to avoid multiple definition error with gcc 5. See +# https://gcc.gnu.org/gcc-5/porting_to.html. +ATFTP_CONF_ENV = LIBS="$(ATFTP_LIBS)" \ + CFLAGS="$(TARGET_CFLAGS) -fgnu89-inline" + +ifeq ($(BR2_PACKAGE_READLINE),y) +ATFTP_DEPENDENCIES += readline +ATFTP_CONF_OPTS += --enable-libreadline +# For static, readline links with ncurses +ATFTP_LIBS += -lncurses +else +ATFTP_CONF_OPTS += --disable-libreadline +endif + +ifeq ($(BR2_PACKAGE_PCRE),y) +ATFTP_DEPENDENCIES += pcre +ATFTP_CONF_OPTS += --enable-libpcre +else +ATFTP_CONF_OPTS += --disable-libpcre +endif + +$(eval $(autotools-package)) diff --git a/package/atk/Config.in b/package/atk/Config.in new file mode 100644 index 00000000..d9371b87 --- /dev/null +++ b/package/atk/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_ATK + bool "atk" + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + select BR2_PACKAGE_LIBGLIB2 + help + The ATK accessibility toolkit, needed to build GTK+-2.x. + + https://gitlab.gnome.org/GNOME/atk + +comment "atk needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/atk/atk.hash b/package/atk/atk.hash new file mode 100644 index 00000000..2e7c3b5f --- /dev/null +++ b/package/atk/atk.hash @@ -0,0 +1,5 @@ +# From http://ftp.gnome.org/pub/gnome/sources/atk/2.36/atk-2.36.0.sha256sum +sha256 fb76247e369402be23f1f5c65d38a9639c1164d934e40f6a9cf3c9e96b652788 atk-2.36.0.tar.xz + +# Hash for license file +sha256 d245807f90032872d1438d741ed21e2490e1175dc8aa3afa5ddb6c8e529b58e5 COPYING diff --git a/package/atk/atk.mk b/package/atk/atk.mk new file mode 100644 index 00000000..dfeb4de8 --- /dev/null +++ b/package/atk/atk.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# atk +# +################################################################################ + +ATK_VERSION_MAJOR = 2.36 +ATK_VERSION = $(ATK_VERSION_MAJOR).0 +ATK_SOURCE = atk-$(ATK_VERSION).tar.xz +ATK_SITE = http://ftp.gnome.org/pub/gnome/sources/atk/$(ATK_VERSION_MAJOR) +ATK_LICENSE = LGPL-2.0+ +ATK_LICENSE_FILES = COPYING +ATK_INSTALL_STAGING = YES +ATK_DEPENDENCIES = libglib2 $(TARGET_NLS_DEPENDENCIES) + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +ATK_CONF_OPTS += -Dintrospection=true +ATK_DEPENDENCIES += gobject-introspection +else +ATK_CONF_OPTS += -Dintrospection=false +endif + +ATK_LDFLAGS = $(TARGET_LDFLAGS) $(TARGET_NLS_LIBS) + +$(eval $(meson-package)) diff --git a/package/atkmm/Config.in b/package/atkmm/Config.in new file mode 100644 index 00000000..ce1e24d4 --- /dev/null +++ b/package/atkmm/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_ATKMM + bool "atkmm" + depends on BR2_INSTALL_LIBSTDCPP # glibmm + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C++11 + depends on BR2_TOOLCHAIN_HAS_THREADS # atk/glibmm -> libglib2 + depends on BR2_USE_MMU # atk/glibmm -> libglib2 + depends on BR2_USE_WCHAR # atk/glibmm -> libglib2 + select BR2_PACKAGE_ATK + select BR2_PACKAGE_GLIBMM + select BR2_PACKAGE_LIBSIGC + + help + The atkmm package is a set of C++ bindings for Atk. + + http://www.gtkmm.org/ + +comment "atkmm needs a toolchain w/ C++, wchar, threads, gcc >= 4.9" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || !BR2_USE_WCHAR \ + || !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/atkmm/atkmm.hash b/package/atkmm/atkmm.hash new file mode 100644 index 00000000..42cc2d72 --- /dev/null +++ b/package/atkmm/atkmm.hash @@ -0,0 +1,5 @@ +# From http://ftp.gnome.org/pub/gnome/sources/atkmm/2.24/atkmm-2.24.2.sha256sum +sha256 ff95385759e2af23828d4056356f25376cfabc41e690ac1df055371537e458bd atkmm-2.24.2.tar.xz +# locally computed +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 COPYING +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING.tools diff --git a/package/atkmm/atkmm.mk b/package/atkmm/atkmm.mk new file mode 100644 index 00000000..234a937b --- /dev/null +++ b/package/atkmm/atkmm.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# atkmm +# +################################################################################ + +ATKMM_VERSION_MAJOR = 2.24 +ATKMM_VERSION = $(ATKMM_VERSION_MAJOR).2 +ATKMM_SOURCE = atkmm-$(ATKMM_VERSION).tar.xz +ATKMM_SITE = http://ftp.gnome.org/pub/gnome/sources/atkmm/$(ATKMM_VERSION_MAJOR) +ATKMM_LICENSE = LGPL-2.1+ (library), GPL-2.0+ (tools) +ATKMM_LICENSE_FILES = COPYING COPYING.tools +ATKMM_INSTALL_STAGING = YES +ATKMM_DEPENDENCIES = atk glibmm libsigc host-pkgconf + +$(eval $(autotools-package)) diff --git a/package/atop/0001-ifprop.c-fix-build-with-kernel-4.6.patch b/package/atop/0001-ifprop.c-fix-build-with-kernel-4.6.patch new file mode 100644 index 00000000..0dfe4f43 --- /dev/null +++ b/package/atop/0001-ifprop.c-fix-build-with-kernel-4.6.patch @@ -0,0 +1,51 @@ +From aff473ee28903775e1bb35793b9c4c50ee0c7270 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Tue, 22 Dec 2020 12:23:33 +0100 +Subject: [PATCH] ifprop.c: fix build with kernel < 4.6 + +Build fails with kernel headers < 4.6 since version 2.6.0 and +https://github.com/Atoptool/atop/commit/08c622ecaa5bb0bb260984ceaddc4730d1b312a7 + +Indeed, ethtool_link_settings and ETHTOOL_GLINKSETTINGS are only +available since +https://github.com/torvalds/linux/commit/3f1ac7a700d039c61d8d8b99f28d605d489a60cf + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/Atoptool/atop/pull/142] +--- + ifprop.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/ifprop.c b/ifprop.c +index 60fa3fa..63fce5a 100644 +--- a/ifprop.c ++++ b/ifprop.c +@@ -104,7 +104,9 @@ initifprop(void) + char *cp, linebuf[2048]; + int i=0, sockfd; + ++#ifdef ETHTOOL_GLINKSETTINGS + struct ethtool_link_settings ethlink; // preferred! ++#endif + struct ethtool_cmd ethcmd; // deprecated + + struct ifreq ifreq; +@@ -153,6 +155,7 @@ initifprop(void) + strncpy((void *)&ifreq.ifr_ifrn.ifrn_name, ifprops[i].name, + sizeof ifreq.ifr_ifrn.ifrn_name-1); + ++#ifdef ETHTOOL_GLINKSETTINGS + ethlink.cmd = ETHTOOL_GLINKSETTINGS; + ifreq.ifr_ifru.ifru_data = (void *)ðlink; + +@@ -164,6 +167,7 @@ initifprop(void) + phy_addr = ethlink.phy_address; + } + else ++#endif + { + ethcmd.cmd = ETHTOOL_GSET; + ifreq.ifr_ifru.ifru_data = (void *)ðcmd; +-- +2.29.2 + diff --git a/package/atop/0002-photosyst.c-fix-build-on-musl.patch b/package/atop/0002-photosyst.c-fix-build-on-musl.patch new file mode 100644 index 00000000..8573d59d --- /dev/null +++ b/package/atop/0002-photosyst.c-fix-build-on-musl.patch @@ -0,0 +1,38 @@ +From 34996ad1eb6d295382e7737ef34bd362abdd4944 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Tue, 19 Jan 2021 22:15:45 +0100 +Subject: [PATCH] photosyst.c: fix build on musl +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Build on musl is broken since version 2.6.0 and +https://github.com/Atoptool/atop/commit/e889c66fbe1d0b7ae38fbcbaa46cea749257f486 +because limits.h is not included: + +photosyst.c: In function ‘lvmmapname’: +photosyst.c:1624:14: error: ‘PATH_MAX’ undeclared (first use in this function); did you mean ‘AF_MAX’? + char path[PATH_MAX]; + ^~~~~~~~ + AF_MAX + +Signed-off-by: Fabrice Fontaine +--- + photosyst.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/photosyst.c b/photosyst.c +index 3de874b..67ae92f 100644 +--- a/photosyst.c ++++ b/photosyst.c +@@ -165,6 +165,7 @@ + #include + #include + #include ++#include + + #define SCALINGMAXCPU 8 // threshold for scaling info per CPU + +-- +2.29.2 + diff --git a/package/atop/Config.in b/package/atop/Config.in new file mode 100644 index 00000000..b8ee30c3 --- /dev/null +++ b/package/atop/Config.in @@ -0,0 +1,26 @@ +config BR2_PACKAGE_ATOP + bool "atop" + depends on BR2_USE_MMU # fork() + depends on BR2_USE_WCHAR # ncurses wchar + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14 # PERF_FLAG_FD_CLOEXEC + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_NCURSES_WCHAR + select BR2_PACKAGE_ZLIB + help + Atop is an ASCII full-screen performance monitor for Linux + that is capable of reporting the activity of all processes + (even if processes have finished during the interval), daily + logging of system and process activity for long-term analysis, + highlighting overloaded system resources by using colors, etc. + At regular intervals, it shows system-level activity related + to the CPU, memory, swap, disks (including LVM) and network + layers, and for every process (and thread) it shows e.g. the + CPU utilization, memory growth, disk utilization, priority, + username, state, and exit code. + + http://www.atoptool.nl + +comment "atop needs a toolchain w/ wchar, headers >= 3.14" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14 diff --git a/package/atop/atop.hash b/package/atop/atop.hash new file mode 100644 index 00000000..65148b85 --- /dev/null +++ b/package/atop/atop.hash @@ -0,0 +1,5 @@ +# Locally computed: +sha256 9ec2ca3a571692f7efaa095f99a5106432bcb71cc22cd6c49597ef0481058f72 atop-2.6.0.tar.gz + +# Hash for license file: +sha256 204d8eff92f95aac4df6c8122bc1505f468f3a901e5a4cc08940e0ede1938994 COPYING diff --git a/package/atop/atop.mk b/package/atop/atop.mk new file mode 100644 index 00000000..88f292b6 --- /dev/null +++ b/package/atop/atop.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# atop +# +################################################################################ + +ATOP_VERSION = 2.6.0 +ATOP_SITE = http://www.atoptool.nl/download +ATOP_LICENSE = GPL-2.0+ +ATOP_LICENSE_FILES = COPYING +ATOP_CPE_ID_VENDOR = atop_project +ATOP_DEPENDENCIES = ncurses zlib + +ATOP_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y) +ATOP_CFLAGS += -O0 +endif + +define ATOP_BUILD_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) CFLAGS="$(ATOP_CFLAGS)" \ + -C $(@D) +endef + +define ATOP_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/atop $(TARGET_DIR)/usr/bin/atop +endef + +$(eval $(generic-package)) diff --git a/package/attr/0001-build-with-older-GCCs.patch b/package/attr/0001-build-with-older-GCCs.patch new file mode 100644 index 00000000..22cfac2c --- /dev/null +++ b/package/attr/0001-build-with-older-GCCs.patch @@ -0,0 +1,87 @@ +From 3ac428794ea0f95c854166c9c0cffb0267c5e98b Mon Sep 17 00:00:00 2001 +From: Hollis Blanchard +Date: Mon, 30 Jul 2018 14:17:21 -0700 +Subject: [PATCH] Remove messages in "deprecated" gcc attributes + +GCC versions up through 4.4.7 (which is used in RHEL 6) do not accept +any argument for the deprecated attribute. GCC 4.5 and later say the +"msg" argument is optional. We don't need the messages during +Buildroot builds anyways. + +Signed-off-by: Hollis Blanchard +--- + include/attributes.h | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +diff --git a/include/attributes.h b/include/attributes.h +index 14beb8f..23c39c8 100644 +--- a/include/attributes.h ++++ b/include/attributes.h +@@ -127,10 +127,10 @@ typedef struct attr_multiop { + */ + EXPORT int attr_get (const char *__path, const char *__attrname, + char *__attrvalue, int *__valuelength, int __flags) +- __attribute__ ((deprecated ("Use getxattr or lgetxattr instead"))); ++ __attribute__ ((deprecated)); + EXPORT int attr_getf (int __fd, const char *__attrname, char *__attrvalue, + int *__valuelength, int __flags) +- __attribute__ ((deprecated ("Use fgetxattr instead"))); ++ __attribute__ ((deprecated)); + + /* + * Set the value of an attribute, creating the attribute if necessary. +@@ -139,11 +139,11 @@ EXPORT int attr_getf (int __fd, const char *__attrname, char *__attrvalue, + EXPORT int attr_set (const char *__path, const char *__attrname, + const char *__attrvalue, const int __valuelength, + int __flags) +- __attribute__ ((deprecated ("Use setxattr or lsetxattr instead"))); ++ __attribute__ ((deprecated)); + EXPORT int attr_setf (int __fd, const char *__attrname, + const char *__attrvalue, const int __valuelength, + int __flags) +- __attribute__ ((deprecated ("Use fsetxattr instead"))); ++ __attribute__ ((deprecated)); + + /* + * Remove an attribute. +@@ -151,9 +151,9 @@ EXPORT int attr_setf (int __fd, const char *__attrname, + */ + EXPORT int attr_remove (const char *__path, const char *__attrname, + int __flags) +- __attribute__ ((deprecated ("Use removexattr or lremovexattr instead"))); ++ __attribute__ ((deprecated)); + EXPORT int attr_removef (int __fd, const char *__attrname, int __flags) +- __attribute__ ((deprecated ("Use fremovexattr instead"))); ++ __attribute__ ((deprecated)); + + /* + * List the names and sizes of the values of all the attributes of an object. +@@ -164,10 +164,10 @@ EXPORT int attr_removef (int __fd, const char *__attrname, int __flags) + */ + EXPORT int attr_list(const char *__path, char *__buffer, const int __buffersize, + int __flags, attrlist_cursor_t *__cursor) +- __attribute__ ((deprecated ("Use listxattr or llistxattr instead"))); ++ __attribute__ ((deprecated)); + EXPORT int attr_listf(int __fd, char *__buffer, const int __buffersize, + int __flags, attrlist_cursor_t *__cursor) +- __attribute__ ((deprecated ("Use flistxattr instead"))); ++ __attribute__ ((deprecated)); + + /* + * Operate on multiple attributes of the same object simultaneously. +@@ -188,10 +188,10 @@ EXPORT int attr_listf(int __fd, char *__buffer, const int __buffersize, + */ + EXPORT int attr_multi (const char *__path, attr_multiop_t *__oplist, + int __count, int __flags) +- __attribute__ ((deprecated ("Use getxattr, setxattr, listxattr, removexattr instead"))); ++ __attribute__ ((deprecated)); + EXPORT int attr_multif (int __fd, attr_multiop_t *__oplist, + int __count, int __flags) +- __attribute__ ((deprecated ("Use getxattr, setxattr, listxattr, removexattr instead"))); ++ __attribute__ ((deprecated)); + + #ifdef __cplusplus + } +-- +2.13.0 + diff --git a/package/attr/0002-Switch-back-to-syscall.patch b/package/attr/0002-Switch-back-to-syscall.patch new file mode 100644 index 00000000..de879e23 --- /dev/null +++ b/package/attr/0002-Switch-back-to-syscall.patch @@ -0,0 +1,126 @@ +From 14adc898a36948267bfe5c63b399996879e94c98 Mon Sep 17 00:00:00 2001 +From: Andreas Gruenbacher +Date: Fri, 17 Aug 2018 14:07:31 +0200 +Subject: Switch back to syscall() + +Switch back to syscall() for the *xattr system calls. The current +mechanism of forwarding those calls to glibc breaks libraries like +libfakeroot (fakeroot) and libasan (the gcc address sanitizer; gcc +-fsanitize=address). + +Those libraries provide wrappers for functions defined in other shared +libraries, usually glibc, do their own processing, and forward calls to +the original symbols looke dup via dlsym(RTLD_NEXT, "symbol_name"). In +our case, dlsym returns the libattr_*xattr wrappers. However, when our +wrappers try calling glibc, they end up calling the libfakeroot / +libasan wrappers instead because those override the original symbols => +recursion. + +The libattr_*xattr wrappers will only be used when symbols are looked up +at runtime (dlopen / dlsym). Programs linking against libattr will +directly use the glibc provided symbols. Therefore, the slightly worse +performance of syscall() won't affect any of the "normal" users of +libattr. + +[nicolas.cavallari: with uclibc-ng, the recursion always happen] +Signed-off-by: Nicolas Cavallari +--- + libattr/syscalls.c | 26 ++++++++++++++------------ + 1 file changed, 14 insertions(+), 12 deletions(-) + +diff --git a/libattr/syscalls.c b/libattr/syscalls.c +index 3013aa0..721ad7f 100644 +--- a/libattr/syscalls.c ++++ b/libattr/syscalls.c +@@ -22,6 +22,8 @@ + + #include "config.h" + ++#include ++#include + #include + + #ifdef HAVE_VISIBILITY_ATTRIBUTE +@@ -31,67 +33,67 @@ + int libattr_setxattr(const char *path, const char *name, + void *value, size_t size, int flags) + { +- return setxattr(path, name, value, size, flags); ++ return syscall(__NR_setxattr, path, name, value, size, flags); + } + + int libattr_lsetxattr(const char *path, const char *name, + void *value, size_t size, int flags) + { +- return lsetxattr(path, name, value, size, flags); ++ return syscall(__NR_lsetxattr, path, name, value, size, flags); + } + + int libattr_fsetxattr(int filedes, const char *name, + void *value, size_t size, int flags) + { +- return fsetxattr(filedes, name, value, size, flags); ++ return syscall(__NR_fsetxattr, filedes, name, value, size, flags); + } + + ssize_t libattr_getxattr(const char *path, const char *name, + void *value, size_t size) + { +- return getxattr(path, name, value, size); ++ return syscall(__NR_getxattr, path, name, value, size); + } + + ssize_t libattr_lgetxattr(const char *path, const char *name, + void *value, size_t size) + { +- return lgetxattr(path, name, value, size); ++ return syscall(__NR_lgetxattr, path, name, value, size); + } + + ssize_t libattr_fgetxattr(int filedes, const char *name, + void *value, size_t size) + { +- return fgetxattr(filedes, name, value, size); ++ return syscall(__NR_fgetxattr, filedes, name, value, size); + } + + ssize_t libattr_listxattr(const char *path, char *list, size_t size) + { +- return listxattr(path, list, size); ++ return syscall(__NR_listxattr, path, list, size); + } + + ssize_t libattr_llistxattr(const char *path, char *list, size_t size) + { +- return llistxattr(path, list, size); ++ return syscall(__NR_llistxattr, path, list, size); + } + + ssize_t libattr_flistxattr(int filedes, char *list, size_t size) + { +- return flistxattr(filedes, list, size); ++ return syscall(__NR_flistxattr, filedes, list, size); + } + + int libattr_removexattr(const char *path, const char *name) + { +- return removexattr(path, name); ++ return syscall(__NR_removexattr, path, name); + } + + int libattr_lremovexattr(const char *path, const char *name) + { +- return lremovexattr(path, name); ++ return syscall(__NR_lremovexattr, path, name); + } + + int libattr_fremovexattr(int filedes, const char *name) + { +- return fremovexattr(filedes, name); ++ return syscall(__NR_fremovexattr, filedes, name); + } + + #ifdef HAVE_VISIBILITY_ATTRIBUTE +-- +cgit v1.0-41-gc330 + diff --git a/package/attr/Config.in b/package/attr/Config.in new file mode 100644 index 00000000..554772b7 --- /dev/null +++ b/package/attr/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_ATTR + bool "attr" + help + Commands for Manipulating Filesystem Extended Attributes. + This package also provides libattr. + + http://savannah.nongnu.org/projects/attr diff --git a/package/attr/attr.hash b/package/attr/attr.hash new file mode 100644 index 00000000..ba9f4566 --- /dev/null +++ b/package/attr/attr.hash @@ -0,0 +1,6 @@ +# Locally calculated after checking pgp signature +sha256 5ead72b358ec709ed00bbf7a9eaef1654baad937c001c044fe8b74c57f5324e7 attr-2.4.48.tar.gz + +# Locally calculated +sha256 98f318493be6b08bff3cd295791cde06c54e17882a3c74a1ed245eaa02533d52 doc/COPYING +sha256 5decad7e58d90d44335bf2f45ce27563bd911065c6a1a02dfa7647c4efee75c8 doc/COPYING.LGPL diff --git a/package/attr/attr.mk b/package/attr/attr.mk new file mode 100644 index 00000000..b6b46453 --- /dev/null +++ b/package/attr/attr.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# attr +# +################################################################################ + +ATTR_VERSION = 2.4.48 +ATTR_SITE = http://download.savannah.gnu.org/releases/attr +ATTR_LICENSE = GPL-2.0+ (programs), LGPL-2.1+ (libraries) +ATTR_LICENSE_FILES = doc/COPYING doc/COPYING.LGPL +ATTR_CPE_ID_VENDOR = attr_project + +ATTR_INSTALL_STAGING = YES + +ATTR_CONF_OPTS = --disable-nls + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/aubio/Config.in b/package/aubio/Config.in new file mode 100644 index 00000000..18e7c4cc --- /dev/null +++ b/package/aubio/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_AUBIO + bool "aubio" + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS + help + aubio is a tool designed for the extraction of annotations + from audio signals. Its features include segmenting a sound + file before each of its attacks, performing pitch detection, + tapping the beat and producing midi streams from live audio. + + Because these tasks are difficult, we thought it was important + to gather them in a dedicated library. To increase the fun, we + have made these algorithms work in a causal way, so as to be + used in real time applications with as low delay as possible. + Functions can be used offline in sound editors and software + samplers, or online in audio effects and virtual instruments. + + https://aubio.org + +comment "aubio needs a toolchain w/ threads, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/aubio/aubio.hash b/package/aubio/aubio.hash new file mode 100644 index 00000000..f484776c --- /dev/null +++ b/package/aubio/aubio.hash @@ -0,0 +1,5 @@ +# From https://aubio.org/pub/aubio-0.4.9.tar.bz2.sha256 +sha256 d48282ae4dab83b3dc94c16cf011bcb63835c1c02b515490e1883049c3d1f3da aubio-0.4.9.tar.bz2 + +# Hash for license file: +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/aubio/aubio.mk b/package/aubio/aubio.mk new file mode 100644 index 00000000..b79beccd --- /dev/null +++ b/package/aubio/aubio.mk @@ -0,0 +1,62 @@ +################################################################################ +# +# aubio +# +################################################################################ + +AUBIO_VERSION = 0.4.9 +AUBIO_SITE = https://aubio.org/pub +AUBIO_SOURCE = aubio-$(AUBIO_VERSION).tar.bz2 +AUBIO_LICENSE = GPL-3.0+ +AUBIO_LICENSE_FILES = COPYING +AUBIO_INSTALL_STAGING = YES + +AUBIO_CONF_OPTS = \ + --disable-docs \ + --disable-atlas + +# Add --notests for each build step to avoid running unit tests on the +# build machine. +AUBIO_WAF_OPTS = --notests + +ifeq ($(BR2_PACKAGE_LIBSNDFILE),y) +AUBIO_DEPENDENCIES += libsndfile +AUBIO_CONF_OPTS += --enable-sndfile +else +AUBIO_CONF_OPTS += --disable-sndfile +endif + +# Could not compile aubio in double precision mode with libsamplerate +ifeq ($(BR2_PACKAGE_LIBSAMPLERATE):$(BR2_PACKAGE_FFTW_DOUBLE),y:) +AUBIO_DEPENDENCIES += libsamplerate +AUBIO_CONF_OPTS += --enable-samplerate +else +AUBIO_CONF_OPTS += --disable-samplerate +endif + +ifeq ($(BR2_PACKAGE_JACK2),y) +AUBIO_DEPENDENCIES += jack2 +AUBIO_CONF_OPTS += --enable-jack +else +AUBIO_CONF_OPTS += --disable-jack +endif + +# fftw3 require double otherwise it will look for fftw3f +ifeq ($(BR2_PACKAGE_FFTW_DOUBLE),y) +AUBIO_CONF_OPTS += --enable-fftw3 --enable-double +AUBIO_DEPENDENCIES += fftw-double +else ifeq ($(BR2_PACKAGE_FFTW_SINGLE),y) +AUBIO_CONF_OPTS += --enable-fftw3f --disable-double +AUBIO_DEPENDENCIES += fftw-single +else +AUBIO_CONF_OPTS += --disable-fftw3 +endif + +ifeq ($(BR2_PACKAGE_FFMPEG_AVRESAMPLE),y) +AUBIO_DEPENDENCIES += ffmpeg +AUBIO_CONF_OPTS += --enable-avcodec +else +AUBIO_CONF_OPTS += --disable-avcodec +endif + +$(eval $(waf-package)) diff --git a/package/audit/0001-Fix-audispd-path-in-auditd.conf.patch b/package/audit/0001-Fix-audispd-path-in-auditd.conf.patch new file mode 100644 index 00000000..ccf45db9 --- /dev/null +++ b/package/audit/0001-Fix-audispd-path-in-auditd.conf.patch @@ -0,0 +1,32 @@ +From 6e1fd09f7bc131c8f16d9cc43e2455ba4650c651 Mon Sep 17 00:00:00 2001 +From: Carlos Santos +Date: Sat, 3 Nov 2018 08:25:58 -0300 +Subject: [PATCH] Fix audispd path in auditd.conf + +audispd is installed at /usr/sbin but the configuration file pointed +to /sbin, causing auditd to fail on startup. + +This patch cannot be sent upstream because audispd does not exist +anymore on the master branch (it was merged to auditd). + +Signed-off-by: Carlos Santos +--- + init.d/auditd.conf | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/init.d/auditd.conf b/init.d/auditd.conf +index 4dcda83..998904f 100644 +--- a/init.d/auditd.conf ++++ b/init.d/auditd.conf +@@ -13,7 +13,7 @@ max_log_file = 8 + num_logs = 5 + priority_boost = 4 + disp_qos = lossy +-dispatcher = /sbin/audispd ++dispatcher = /usr/sbin/audispd + name_format = NONE + ##name = mydomain + max_log_file_action = ROTATE +-- +2.17.1 + diff --git a/package/audit/0002-Add-substitue-functions-for-strndupa-rawmemchr.patch b/package/audit/0002-Add-substitue-functions-for-strndupa-rawmemchr.patch new file mode 100644 index 00000000..ac292c57 --- /dev/null +++ b/package/audit/0002-Add-substitue-functions-for-strndupa-rawmemchr.patch @@ -0,0 +1,133 @@ +From c39a071e7c021f6ff3554aca2758e97b47a9777c Mon Sep 17 00:00:00 2001 +From: Steve Grubb +Date: Tue, 26 Feb 2019 18:33:33 -0500 +Subject: [PATCH] Add substitue functions for strndupa & rawmemchr + +(cherry picked from commit d579a08bb1cde71f939c13ac6b2261052ae9f77e) +Signed-off-by: Thomas Petazzoni +--- + auparse/auparse.c | 12 +++++++++++- + auparse/interpret.c | 9 ++++++++- + configure.ac | 14 +++++++++++++- + src/ausearch-lol.c | 12 +++++++++++- + 4 files changed, 43 insertions(+), 4 deletions(-) + +diff --git a/auparse/auparse.c b/auparse/auparse.c +index 650db02..2e1c737 100644 +--- a/auparse/auparse.c ++++ b/auparse/auparse.c +@@ -1,5 +1,5 @@ + /* auparse.c -- +- * Copyright 2006-08,2012-17 Red Hat Inc., Durham, North Carolina. ++ * Copyright 2006-08,2012-19 Red Hat Inc., Durham, North Carolina. + * All Rights Reserved. + * + * This library is free software; you can redistribute it and/or +@@ -1118,6 +1118,16 @@ static int str2event(char *s, au_event_t *e) + return 0; + } + ++#ifndef HAVE_STRNDUPA ++static inline char *strndupa(const char *old, size_t n) ++{ ++ size_t len = strnlen(old, n); ++ char *tmp = alloca(len + 1); ++ tmp[len] = 0; ++ return memcpy(tmp, old, len); ++} ++#endif ++ + /* Returns 0 on success and 1 on error */ + static int extract_timestamp(const char *b, au_event_t *e) + { +diff --git a/auparse/interpret.c b/auparse/interpret.c +index 51c4a5e..67b7b77 100644 +--- a/auparse/interpret.c ++++ b/auparse/interpret.c +@@ -853,6 +853,13 @@ err_out: + return print_escaped(id->val); + } + ++// rawmemchr is faster. Let's use it if we have it. ++#ifdef HAVE_RAWMEMCHR ++#define STRCHR rawmemchr ++#else ++#define STRCHR strchr ++#endif ++ + static const char *print_proctitle(const char *val) + { + char *out = (char *)print_escaped(val); +@@ -863,7 +870,7 @@ static const char *print_proctitle(const char *val) + // Proctitle has arguments separated by NUL bytes + // We need to write over the NUL bytes with a space + // so that we can see the arguments +- while ((ptr = rawmemchr(ptr, '\0'))) { ++ while ((ptr = STRCHR(ptr, '\0'))) { + if (ptr >= end) + break; + *ptr = ' '; +diff --git a/configure.ac b/configure.ac +index 6e345f1..6f3007e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1,7 +1,7 @@ + dnl + define([AC_INIT_NOTICE], + [### Generated automatically using autoconf version] AC_ACVERSION [ +-### Copyright 2005-18 Steve Grubb ++### Copyright 2005-19 Steve Grubb + ### + ### Permission is hereby granted, free of charge, to any person obtaining a + ### copy of this software and associated documentation files (the "Software"), +@@ -72,6 +72,18 @@ dnl; posix_fallocate is used in audisp-remote + AC_CHECK_FUNCS([posix_fallocate]) + dnl; signalfd is needed for libev + AC_CHECK_FUNC([signalfd], [], [ AC_MSG_ERROR([The signalfd system call is necessary for auditd]) ]) ++dnl; check if rawmemchr is available ++AC_CHECK_FUNCS([rawmemchr]) ++dnl; check if strndupa is available ++AC_LINK_IFELSE( ++ [AC_LANG_SOURCE( ++ [[ ++ #define _GNU_SOURCE ++ #include ++ int main() { (void) strndupa("test", 10); return 0; }]])], ++ [AC_DEFINE(HAVE_STRNDUPA, 1, [Let us know if we have it or not])], ++ [] ++) + + ALLWARNS="" + ALLDEBUG="-g" +diff --git a/src/ausearch-lol.c b/src/ausearch-lol.c +index 5d17a72..758c33e 100644 +--- a/src/ausearch-lol.c ++++ b/src/ausearch-lol.c +@@ -1,6 +1,6 @@ + /* + * ausearch-lol.c - linked list of linked lists library +-* Copyright (c) 2008,2010,2014,2016 Red Hat Inc., Durham, North Carolina. ++* Copyright (c) 2008,2010,2014,2016,2019 Red Hat Inc., Durham, North Carolina. + * All Rights Reserved. + * + * This software may be freely redistributed and/or modified under the +@@ -152,6 +152,16 @@ static int compare_event_time(event *e1, event *e2) + return 0; + } + ++#ifndef HAVE_STRNDUPA ++static inline char *strndupa(const char *old, size_t n) ++{ ++ size_t len = strnlen(old, n); ++ char *tmp = alloca(len + 1); ++ tmp[len] = 0; ++ return memcpy(tmp, old, len); ++} ++#endif ++ + /* + * This function will look at the line and pick out pieces of it. + */ +-- +2.21.0 + diff --git a/package/audit/0003-Header-definitions-need-to-be-external-when-building.patch b/package/audit/0003-Header-definitions-need-to-be-external-when-building.patch new file mode 100644 index 00000000..9a546261 --- /dev/null +++ b/package/audit/0003-Header-definitions-need-to-be-external-when-building.patch @@ -0,0 +1,28 @@ +From 017e6c6ab95df55f34e339d2139def83e5dada1f Mon Sep 17 00:00:00 2001 +From: Steve Grubb +Date: Fri, 10 Jan 2020 21:13:50 -0500 +Subject: [PATCH] Header definitions need to be external when building with + -fno-common (which is default in GCC 10) - Tony Jones + +Patch taken from upstream: https://github.com/linux-audit/audit-userspace/commit/017e6c6ab95df55f34e339d2139def83e5dada1f +Signed-off-by: Heiko Thiery +--- + src/ausearch-common.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/ausearch-common.h b/src/ausearch-common.h +index 6669203..3040547 100644 +--- a/src/ausearch-common.h ++++ b/src/ausearch-common.h +@@ -50,7 +50,7 @@ extern pid_t event_pid; + extern int event_exact_match; + extern uid_t event_uid, event_euid, event_loginuid; + extern const char *event_tuid, *event_teuid, *event_tauid; +-slist *event_node_list; ++extern slist *event_node_list; + extern const char *event_comm; + extern const char *event_filename; + extern const char *event_hostname; +-- +2.20.1 + diff --git a/package/audit/Config.in b/package/audit/Config.in new file mode 100644 index 00000000..6e576153 --- /dev/null +++ b/package/audit/Config.in @@ -0,0 +1,24 @@ +# audit has some builtin per-architecture system call tables +config BR2_PACKAGE_AUDIT_ARCH_SUPPORTS + bool + default y if BR2_aarch64 || BR2_arm || BR2_armeb || \ + BR2_i386 || BR2_powerpc || BR2_powerpc64 || \ + BR2_x86_64 + +config BR2_PACKAGE_AUDIT + bool "audit" + depends on BR2_PACKAGE_AUDIT_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + help + The audit package contains the user space utilities for + storing and searching the audit records generated by + the audit subsystem in the Linux 2.6 kernel + + Note: The z/OS remote plugin is disabled in this package + + http://people.redhat.com/sgrubb/audit/ + +comment "audit needs a toolchain w/ threads, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS + depends on BR2_PACKAGE_AUDIT_ARCH_SUPPORTS diff --git a/package/audit/S02auditd b/package/audit/S02auditd new file mode 100644 index 00000000..0eef881c --- /dev/null +++ b/package/audit/S02auditd @@ -0,0 +1,80 @@ +#!/bin/sh +# +# auditd This starts and stops auditd +# +# description: This starts the Linux Auditing System Daemon, +# which collects security related events in a dedicated +# audit log. If this daemon is turned off, audit events +# will be sent to syslog. +# + +NAME=auditd +DAEMON=/usr/sbin/${NAME} +CONFIG=/etc/audit/auditd.conf +PIDFILE=/var/run/${NAME}.pid + +start(){ + printf "Starting ${NAME}: " + + # Create dir to store log files in if one doesn't exist. Create + # the directory with SELinux permissions if possible + command -v selabel_lookup >/dev/null 2>&1 + if [ $? = 0 ]; then + mkdir -p /var/log/audit -Z `selabel_lookup -b file -k /var/log/audit` + else + mkdir -p /var/log/audit + fi + + # Run audit daemon executable + start-stop-daemon -S -q -p ${PIDFILE} --exec ${DAEMON} + + if [ $? = 0 ]; then + # Load the default rules + test -f /etc/audit/rules.d/audit.rules && /usr/sbin/auditctl -R /etc/audit/rules.d/audit.rules >/dev/null + echo "OK" + else + echo "FAIL" + fi +} + +stop(){ + printf "Stopping ${NAME}: " + + start-stop-daemon -K -q -p ${PIDFILE} + [ $? = 0 ] && echo "OK" || echo "FAIL" +} + +reload(){ + printf "Reloading ${NAME} configuration: " + start-stop-daemon --stop -s 1 -p ${PIDFILE} 1>/dev/null + [ $? = 0 ] && echo "OK" || echo "FAIL" +} + +rotate(){ + printf "Rotating ${NAME} logs: " + start-stop-daemon --stop -s 10 -p ${PIDFILE} 1>/dev/null + [ $? = 0 ] && echo "OK" || echo "FAIL" +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + stop + start + ;; + reload) + reload + ;; + rotate) + rotate + ;; + *) + echo "Usage: $0 {start|stop|restart|reload|rotate}" + exit 1 + ;; +esac diff --git a/package/audit/audit.hash b/package/audit/audit.hash new file mode 100644 index 00000000..71e7df7d --- /dev/null +++ b/package/audit/audit.hash @@ -0,0 +1,4 @@ +#Locally computed +sha256 0e5d4103646e00f8d1981e1cd2faea7a2ae28e854c31a803e907a383c5e2ecb7 audit-2.8.5.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING +sha256 f18a0811fa0e220ccbc42f661545e77f0388631e209585ed582a1c693029c6aa COPYING.LIB diff --git a/package/audit/audit.mk b/package/audit/audit.mk new file mode 100644 index 00000000..05a16e6e --- /dev/null +++ b/package/audit/audit.mk @@ -0,0 +1,71 @@ +################################################################################ +# +# audit +# +################################################################################ + +AUDIT_VERSION = 2.8.5 +AUDIT_SITE = http://people.redhat.com/sgrubb/audit +AUDIT_LICENSE = GPL-2.0+ (programs), LGPL-2.1+ (libraries) +AUDIT_LICENSE_FILES = COPYING COPYING.LIB +# 0002-Add-substitue-functions-for-strndupa-rawmemchr.patch +AUDIT_AUTORECONF = YES +AUDIT_CPE_ID_VENDOR = linux_audit_project +AUDIT_CPE_ID_PRODUCT = linux_audit + +AUDIT_INSTALL_STAGING = YES + +AUDIT_CONF_OPTS = --without-python --without-python3 --disable-zos-remote + +ifeq ($(BR2_PACKAGE_LIBCAP_NG),y) +AUDIT_DEPENDENCIES += libcap-ng +AUDIT_CONF_OPTS += --with-libcap-ng=yes +else +AUDIT_CONF_OPTS += --with-libcap-ng=no +endif + +# For i386, x86-64 and PowerPC, the system call tables are +# unconditionally included. However, for ARM(eb) and AArch64, then +# need to be explicitly enabled. + +ifeq ($(BR2_arm)$(BR2_armeb),y) +AUDIT_CONF_OPTS += --with-arm +endif +ifeq ($(BR2_aarch64),y) +AUDIT_CONF_OPTS += --with-aarch64 +endif + +ifeq ($(BR2_INIT_SYSTEMD),y) +AUDIT_CONF_OPTS += --enable-systemd +else +AUDIT_CONF_OPTS += --disable-systemd +endif + +define AUDIT_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 package/audit/S02auditd $(TARGET_DIR)/etc/init.d/S02auditd +endef + +define AUDIT_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/audit/audit_tmpfiles.conf \ + $(TARGET_DIR)/usr/lib/tmpfiles.d/audit.conf +endef + +define AUDIT_INSTALL_CLEANUP + $(RM) $(TARGET_DIR)/etc/rc.d/init.d/auditd + $(RM) $(TARGET_DIR)/etc/sysconfig/auditd +endef +AUDIT_POST_INSTALL_TARGET_HOOKS += AUDIT_INSTALL_CLEANUP + +define AUDIT_LINUX_CONFIG_FIXUPS + $(call KCONFIG_ENABLE_OPT,CONFIG_NET) + $(call KCONFIG_ENABLE_OPT,CONFIG_AUDIT) +endef + +HOST_AUDIT_CONF_OPTS = \ + --without-python \ + --without-python3 \ + --disable-zos-remote \ + --without-libcap-ng + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/audit/audit_tmpfiles.conf b/package/audit/audit_tmpfiles.conf new file mode 100644 index 00000000..6b8325b5 --- /dev/null +++ b/package/audit/audit_tmpfiles.conf @@ -0,0 +1 @@ +d /var/log/audit 0755 - - diff --git a/package/aufs-util/0001-remove-user-settings.patch b/package/aufs-util/0001-remove-user-settings.patch new file mode 100644 index 00000000..7eebc95d --- /dev/null +++ b/package/aufs-util/0001-remove-user-settings.patch @@ -0,0 +1,16 @@ +install: drop setting ownership + +Signed-off-by: "Yann E. MORIN" + +diff --git a/Makefile b/Makefile +--- a/Makefile ++++ b/Makefile +@@ -21,7 +21,7 @@ + override CPPFLAGS += -DAUFHSM_CMD=\"/usr/bin/aufhsm\" + override CFLAGS += -O -Wall + INSTALL ?= install +-Install = ${INSTALL} -o root -g root -p ++Install = ${INSTALL} -p + ManDir = /usr/share/man + + # diff --git a/package/aufs-util/0002-no-check-ver.patch b/package/aufs-util/0002-no-check-ver.patch new file mode 100644 index 00000000..5fe69207 --- /dev/null +++ b/package/aufs-util/0002-no-check-ver.patch @@ -0,0 +1,24 @@ +Makefile: do not check version + +The aufs-util package tries to ensure that its version is compatible +with the one in the running kernel. However, this test is flawed: the +version string in the aufs4x branch for aufs-util is aufs3.x, so it does +not match the version in the kernel when it is aufs4.x. + +Disengage this check, ion the assumption the user knows what he is +doing. + +Signed-off-by: "Yann E. MORIN" + +diff --git a/Makefile b/Makefile +--- a/Makefile ++++ b/Makefile +@@ -62,7 +62,7 @@ + $(foreach v, CPPFLAGS CFLAGS INSTALL Install ManDir LibUtilHdr, \ + $(eval MAKE += ${v}="$${${v}}")) + +-all: ver_test ${Man} ${Bin} ${Etc} ++all: ${Man} ${Bin} ${Etc} + ${MAKE} -C libau $@ + ln -sf ./libau/libau*.so . + $(call MakeFHSM, $@) diff --git a/package/aufs-util/0003-no-strip-lib.patch b/package/aufs-util/0003-no-strip-lib.patch new file mode 100644 index 00000000..15830503 --- /dev/null +++ b/package/aufs-util/0003-no-strip-lib.patch @@ -0,0 +1,18 @@ +install: do not strip libs when installing + +We want unstripped binaries in staging; stripping is done by Buildroot +as a whole in target-finalize if needed, anyway. + +Signed-off-by: "Yann E. MORIN" + +diff --git a/libau/Makefile b/libau/Makefile +--- a/libau/Makefile ++++ b/libau/Makefile +@@ -37,7 +37,6 @@ + ln -sf $< $@ + ${LibSo}.${LibSoMajor}: ${LibSo}.${LibSoMajor}.${LibSoMinor} + ln -sf $< $@ +-${LibSo}.${LibSoMajor}.${LibSoMinor}: override LDFLAGS += -s + ${LibSo}.${LibSoMajor}.${LibSoMinor}: override LDLIBS += -ldl -lpthread + ${LibSo}.${LibSoMajor}.${LibSoMinor}: ${LibSoObj} + ${CC} --shared -Wl,-soname,${LibSo}.${LibSoMajor} ${LDFLAGS} \ diff --git a/package/aufs-util/Config.in b/package/aufs-util/Config.in new file mode 100644 index 00000000..a426343f --- /dev/null +++ b/package/aufs-util/Config.in @@ -0,0 +1,36 @@ +comment "aufs-util needs a linux kernel and a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_LINUX_KERNEL || !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_AUFS_UTIL + bool "aufs-util" + depends on BR2_USE_MMU + depends on BR2_LINUX_KERNEL + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Aufs command line utilities. + + Needs a kernel with aufs support. A kernel + extension package is available. + + http://sourceforge.net/p/aufs/aufs-util/ + +if BR2_PACKAGE_AUFS_UTIL + +config BR2_PACKAGE_AUFS_UTIL_VERSION + string "aufs-util version" + default "" + help + The version you choose must match that of the aufs support + in your kernel. Usually, this is aufs3.x for 3.x kernels and + aufs4.x for 4.x kernels. + + Usually, the sha1 of the cset you want to use; avoid using a + branch name as this yields non-reproducible builds. + + See the following resources to see what versions are + available: + + https://sourceforge.net/p/aufs/aufs-util/ci/master/tree/ + +endif diff --git a/package/aufs-util/aufs-util.mk b/package/aufs-util/aufs-util.mk new file mode 100644 index 00000000..d954f029 --- /dev/null +++ b/package/aufs-util/aufs-util.mk @@ -0,0 +1,59 @@ +################################################################################ +# +# aufs-util +# +################################################################################ + +# linux-headers +AUFS_UTIL_VERSION = $(call qstrip,$(BR2_PACKAGE_AUFS_UTIL_VERSION)) +AUFS_UTIL_SITE = http://git.code.sf.net/p/aufs/aufs-util +AUFS_UTIL_SITE_METHOD = git +AUFS_UTIL_LICENSE = GPL-2.0 +AUFS_UTIL_LICENSE_FILES = COPYING + +AUFS_UTIL_DEPENDENCIES = linux + +# Building aufs-util requires access to the kernel headers of aufs, +# which are only available in the kernel build directory, which is why +# we add -I$(LINUX_DIR)/include/uapi. These headers have not been +# prepared for usage by userspace, so to workaround this we have to +# defined the "__user" macro as empty. +AUFS_UTIL_HOST_CPPFLAGS = \ + $(HOST_CPPFLAGS) \ + -I$(LINUX_DIR)/include/uapi \ + -D__user= + +AUFS_UTIL_CPPFLAGS = \ + $(TARGET_CPPFLAGS) \ + -I$(LINUX_DIR)/include/uapi \ + -D__user= + +# rdu64 is supposed to provide the LFS variant of readdir(), +# readdir64(). However, because Buildroot is always LFS-enabled, +# readdir() is always the LFS variant. Drop rdu64 from the build, as +# it causes build failures due to multiple implementations of +# readdir64(). +define AUFS_UTIL_REMOVE_RDU64 + $(SED) 's% rdu64.o%%' $(@D)/libau/Makefile +endef + +AUFS_UTIL_POST_PATCH_HOOKS += AUFS_UTIL_REMOVE_RDU64 + +# First, we build the host tools, needed to build the target tools. +define AUFS_UTIL_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) \ + $(HOST_CONFIGURE_OPTS) \ + CPPFLAGS="$(AUFS_UTIL_HOST_CPPFLAGS)" \ + HOSTCC="$(HOSTCC)" HOSTLD="$(HOSTLD)" \ + INSTALL="$(INSTALL)" c2sh c2tmac + $(TARGET_MAKE_ENV) $(MAKE1) -C $(@D) \ + $(TARGET_CONFIGURE_OPTS) \ + CPPFLAGS="$(AUFS_UTIL_CPPFLAGS)" \ + INSTALL="$(INSTALL)" all +endef + +define AUFS_UTIL_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) INSTALL="$(INSTALL)" DESTDIR="$(TARGET_DIR)" install +endef + +$(eval $(generic-package)) diff --git a/package/aufs/Config.in b/package/aufs/Config.in new file mode 100644 index 00000000..cc5ff365 --- /dev/null +++ b/package/aufs/Config.in @@ -0,0 +1,16 @@ +# Automatically selected by the corresponding linux extension +config BR2_PACKAGE_AUFS + bool + +if BR2_PACKAGE_AUFS + +# Both come from the selection of the linux extension. +config BR2_PACKAGE_AUFS_SERIES + int + default BR2_LINUX_KERNEL_EXT_AUFS_SERIES + +config BR2_PACKAGE_AUFS_VERSION + string + default BR2_LINUX_KERNEL_EXT_AUFS_VERSION + +endif diff --git a/package/aufs/aufs.mk b/package/aufs/aufs.mk new file mode 100644 index 00000000..4e95a350 --- /dev/null +++ b/package/aufs/aufs.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# aufs +# +################################################################################ + +AUFS_VERSION = $(call qstrip,$(BR2_PACKAGE_AUFS_VERSION)) +AUFS_LICENSE = GPL-2.0 +AUFS_LICENSE_FILES = COPYING + +ifeq ($(BR2_PACKAGE_AUFS_SERIES),3) +AUFS_SITE = http://git.code.sf.net/p/aufs/aufs3-standalone +AUFS_SITE_METHOD = git +else ifeq ($(BR2_PACKAGE_AUFS_SERIES),4) +AUFS_SITE = $(call github,sfjro,aufs4-standalone,$(AUFS_VERSION)) +else ifeq ($(BR2_PACKAGE_AUFS_SERIES),5) +AUFS_SITE = $(call github,sfjro,aufs5-standalone,$(AUFS_VERSION)) +endif + +ifeq ($(BR_BUILDING):$(BR2_PACKAGE_AUFS):$(AUFS_VERSION),y:y:) +$(error No aufs version specified) +endif + +$(eval $(generic-package)) diff --git a/package/augeas/Config.in b/package/augeas/Config.in new file mode 100644 index 00000000..df8c5174 --- /dev/null +++ b/package/augeas/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_AUGEAS + bool "augeas" + # ARC toolchain issue: + # https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/issues/108 + depends on !BR2_arc + depends on BR2_USE_WCHAR + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_READLINE + help + Augeas is a configuration editing tool. It parses + configuration files in their native formats and transforms + them into a tree. Configuration changes are made by + manipulating this tree and saving it back into native config + files. + + http://augeas.net + +comment "augeas needs a toolchain w/ wchar" + depends on !BR2_arc + depends on !BR2_USE_WCHAR diff --git a/package/augeas/augeas.hash b/package/augeas/augeas.hash new file mode 100644 index 00000000..03b71349 --- /dev/null +++ b/package/augeas/augeas.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature from +# http://download.augeas.net/augeas-1.12.0.tar.gz.sig +sha256 321942c9cc32185e2e9cb72d0a70eea106635b50269075aca6714e3ec282cb87 augeas-1.12.0.tar.gz +sha256 ca0061fc1381a3ab242310e4b3f56389f28e3d460eb2fd822ed7a21c6f030532 COPYING diff --git a/package/augeas/augeas.mk b/package/augeas/augeas.mk new file mode 100644 index 00000000..a0bc2945 --- /dev/null +++ b/package/augeas/augeas.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# augeas +# +################################################################################ + +AUGEAS_VERSION = 1.12.0 +AUGEAS_SITE = http://download.augeas.net +AUGEAS_INSTALL_STAGING = YES +AUGEAS_LICENSE = LGPL-2.1+ +AUGEAS_LICENSE_FILES = COPYING +AUGEAS_CPE_ID_VENDOR = augeas +AUGEAS_DEPENDENCIES = host-pkgconf readline libxml2 + +AUGEAS_CONF_OPTS = --disable-gnulib-tests + +# Remove the test lenses which occupy about 1.4 MB on the target +define AUGEAS_REMOVE_TEST_LENSES + rm -rf $(TARGET_DIR)/usr/share/augeas/lenses/dist/tests +endef +AUGEAS_POST_INSTALL_TARGET_HOOKS += AUGEAS_REMOVE_TEST_LENSES + +$(eval $(autotools-package)) diff --git a/package/aumix/0001-fix-incorrect-makefile-am.patch b/package/aumix/0001-fix-incorrect-makefile-am.patch new file mode 100644 index 00000000..143174de --- /dev/null +++ b/package/aumix/0001-fix-incorrect-makefile-am.patch @@ -0,0 +1,28 @@ +Aumix's src/Makefile.am incorrect adds @includedir@ to the list of +include paths and @libdir@ to the list of libraries paths. This is +incorrect, as @includedir@ and @libdir@ are respectively /usr/include +and /usr/lib, even in cross-compilation mode. + +At the same time, use AM_CFLAGS instead of CFLAGS, as is done on the +similar patch found in OpenEmbedded. + +Signed-off-by: Thomas Petazzoni +--- + src/Makefile.am | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +Index: aumix-2.8/src/Makefile.am +=================================================================== +--- aumix-2.8.orig/src/Makefile.am ++++ aumix-2.8/src/Makefile.am +@@ -9,9 +9,8 @@ + mouse.c common.h curses.h gpm-xterm.h gtk.h interactive.h \ + mouse.h play.xpm record.xpm + localedir = $(datadir)/locale +-INCLUDES = -I../intl -DLOCALEDIR=\"$(localedir)\" -I@includedir@ ++INCLUDES = -I../intl -DLOCALEDIR=\"$(localedir)\" + AM_CFLAGS = @CFLAGS@ @GLIB_CFLAGS@ @GTK_CFLAGS@ +-LDADD = -L@libdir@ + LIBS = @LIBS@ @GTK_LIBS@ @LIBINTL@ + DEFS = @DEFS@ + diff --git a/package/aumix/Config.in b/package/aumix/Config.in new file mode 100644 index 00000000..3d320825 --- /dev/null +++ b/package/aumix/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_AUMIX + bool "aumix" + select BR2_PACKAGE_NCURSES + help + aumix is a small, easy-to-use program to control the mixer + of your sound card. It runs in text mode using the ncurses + library, or from the command line (non-interactively). + It can read default settings from a file, and it can also + automatically save and restore the mixer settings at shutdown + and boot. + + http://jpj.net/~trevor/aumix.html diff --git a/package/aumix/aumix.hash b/package/aumix/aumix.hash new file mode 100644 index 00000000..43c09dc5 --- /dev/null +++ b/package/aumix/aumix.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 d2ce43d532ef75072c8d4e7922e3bc06be6d97765a508d9ceb0d1766bbe70e29 aumix-2.9.1.tar.bz2 +sha256 1ca3e8f71b7de618968e7ea9fe47822d9e704dc476aef8544033abedec355225 COPYING +sha256 3bfa74db4aeb68bfef7ee213bb1dbf236d784dea3d35a52f6e23a48c847375dd 19_no-common.patch diff --git a/package/aumix/aumix.mk b/package/aumix/aumix.mk new file mode 100644 index 00000000..a4001f5b --- /dev/null +++ b/package/aumix/aumix.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# aumix +# +################################################################################ + +AUMIX_VERSION = 2.9.1 +AUMIX_SOURCE = aumix-$(AUMIX_VERSION).tar.bz2 +AUMIX_SITE = http://jpj.net/~trevor/aumix/releases +AUMIX_AUTORECONF = YES +AUMIX_GETTEXTIZE = YES +AUMIX_LICENSE = GPL-2.0+ +AUMIX_LICENSE_FILES = COPYING + +AUMIX_PATCH = \ + https://sources.debian.org/data/main/a/aumix/2.9.1-7/debian/patches/19_no-common.patch + +AUMIX_CONF_OPTS = \ + --without-gtk \ + --without-gtk1 \ + --without-alsa \ + --without-gpm \ + --without-sysmouse + +AUMIX_DEPENDENCIES = host-gettext ncurses + +$(eval $(autotools-package)) diff --git a/package/autoconf-archive/autoconf-archive.hash b/package/autoconf-archive/autoconf-archive.hash new file mode 100644 index 00000000..3ef98f2f --- /dev/null +++ b/package/autoconf-archive/autoconf-archive.hash @@ -0,0 +1,4 @@ +# Computed locally +sha256 17195c833098da79de5778ee90948f4c5d90ed1a0cf8391b4ab348e2ec511e3f autoconf-archive-2019.01.06.tar.xz +sha256 e6037104443f9a7829b2aa7c5370d0789a7bda3ca65a0b904cdc0c2e285d9195 COPYING +sha256 23ed0b84fa023bfa33433b498192cd08a3bfb1f4864a8ed791a84f3eb48b2dd2 COPYING.EXCEPTION diff --git a/package/autoconf-archive/autoconf-archive.mk b/package/autoconf-archive/autoconf-archive.mk new file mode 100644 index 00000000..3f1f0a5b --- /dev/null +++ b/package/autoconf-archive/autoconf-archive.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# autoconf-archive +# +################################################################################ + +AUTOCONF_ARCHIVE_VERSION = 2019.01.06 +AUTOCONF_ARCHIVE_SOURCE = autoconf-archive-$(AUTOCONF_ARCHIVE_VERSION).tar.xz +AUTOCONF_ARCHIVE_SITE = $(BR2_GNU_MIRROR)/autoconf-archive +AUTOCONF_ARCHIVE_LICENSE = GPL-3.0+ with exception +AUTOCONF_ARCHIVE_LICENSE_FILES = COPYING COPYING.EXCEPTION +HOST_AUTOCONF_ARCHIVE_INSTALL_OPTS = aclocaldir=$(HOST_DIR)/share/autoconf-archive install + +$(eval $(host-autotools-package)) diff --git a/package/autoconf/0001-dont-add-dirty-to-version.patch b/package/autoconf/0001-dont-add-dirty-to-version.patch new file mode 100644 index 00000000..e8d9f6a2 --- /dev/null +++ b/package/autoconf/0001-dont-add-dirty-to-version.patch @@ -0,0 +1,28 @@ +autoconf: don't append -dirty to version + +Don't append -dirty to autoconf version number if the buildroot git tree +has uncommited changes. + +This script is meant for the autoconf developers, but it also activates +if you build autoconf in a subdirectory of a git tree (E.G. like how it's +commonly done in buildroot). + +The affect is that autoconf gets built as being version 2.65-dirty, which +breaks programs (like Python) which explicitly checks for autoconf-2.65. + +[Gustavo: update for autoconf 2.69] +Signed-off-by: Peter Korsgaard +Signed-off-by: Gustavo Zacarias + +diff -Nura autoconf-2.69.orig/build-aux/git-version-gen autoconf-2.69/build-aux/git-version-gen +--- autoconf-2.69.orig/build-aux/git-version-gen 2013-06-27 11:31:02.340200154 -0300 ++++ autoconf-2.69/build-aux/git-version-gen 2013-06-27 11:31:13.734577033 -0300 +@@ -203,7 +203,7 @@ + *) # Append the suffix only if there isn't one already. + case $v in + *-dirty) ;; +- *) v="$v-dirty" ;; ++ #*) v="$v-dirty" ;; + esac ;; + esac + fi diff --git a/package/autoconf/autoconf.hash b/package/autoconf/autoconf.hash new file mode 100644 index 00000000..f53e8979 --- /dev/null +++ b/package/autoconf/autoconf.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 64ebcec9f8ac5b2487125a86a7760d2591ac9e1d3dbd59489633f9de62a57684 autoconf-2.69.tar.xz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYINGv3 +sha256 23ed0b84fa023bfa33433b498192cd08a3bfb1f4864a8ed791a84f3eb48b2dd2 COPYING.EXCEPTION diff --git a/package/autoconf/autoconf.mk b/package/autoconf/autoconf.mk new file mode 100644 index 00000000..336ac59b --- /dev/null +++ b/package/autoconf/autoconf.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# autoconf +# +################################################################################ + +AUTOCONF_VERSION = 2.69 +AUTOCONF_SOURCE = autoconf-$(AUTOCONF_VERSION).tar.xz +AUTOCONF_SITE = $(BR2_GNU_MIRROR)/autoconf + +AUTOCONF_LICENSE = GPL-3.0+ with exceptions +AUTOCONF_LICENSE_FILES = COPYINGv3 COPYING.EXCEPTION + +HOST_AUTOCONF_CONF_ENV = \ + EMACS="no" \ + ac_cv_path_M4=$(HOST_DIR)/bin/m4 \ + ac_cv_prog_gnu_m4_gnu=no + +HOST_AUTOCONF_DEPENDENCIES = host-m4 host-libtool + +$(eval $(host-autotools-package)) + +# variables used by other packages +AUTOCONF = $(HOST_DIR)/bin/autoconf -I "$(ACLOCAL_DIR)" -I "$(ACLOCAL_HOST_DIR)" +AUTOHEADER = $(HOST_DIR)/bin/autoheader -I "$(ACLOCAL_DIR)" -I "$(ACLOCAL_HOST_DIR)" +AUTORECONF = $(HOST_CONFIGURE_OPTS) ACLOCAL="$(ACLOCAL)" AUTOCONF="$(AUTOCONF)" AUTOHEADER="$(AUTOHEADER)" AUTOMAKE="$(AUTOMAKE)" AUTOPOINT=/bin/true $(HOST_DIR)/bin/autoreconf -f -i diff --git a/package/autofs/Config.in b/package/autofs/Config.in new file mode 100644 index 00000000..8bb5fe27 --- /dev/null +++ b/package/autofs/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_AUTOFS + bool "autofs" + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_USE_MMU + depends on !BR2_STATIC_LIBS # dlfcn + depends on !BR2_TOOLCHAIN_USES_MUSL # nsswitch + select BR2_PACKAGE_LIBTIRPC if !BR2_TOOLCHAIN_HAS_NATIVE_RPC + help + Autofs controls the operation of the automount daemons. The + automount daemons automatically mount filesystems when they + are used and unmount them after a period of inactivity based + on a set of pre-configured maps defined by default in + /etc/auto.master. The kernel automounter implements SunOS + style automounter under Linux and requires a kernel version + of at least 2.6.17 and the autofs4 kernel module. + + http://www.linuxfromscratch.org/blfs/view/svn/general/autofs.html + +comment "autofs needs a glibc or uClibc toolchain w/ NPTL and dynamic library" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIBS \ + || BR2_TOOLCHAIN_USES_MUSL diff --git a/package/autofs/autofs.hash b/package/autofs/autofs.hash new file mode 100644 index 00000000..10ca42eb --- /dev/null +++ b/package/autofs/autofs.hash @@ -0,0 +1,6 @@ +# From https://www.kernel.org/pub/linux/daemons/autofs/v5/sha256sums.asc +sha256 a36b268611b79b07051749870ba540b139938efc84bc0293244c483e94f9ced7 autofs-5.1.7.tar.xz + +# Hash for license files +sha256 458028929f712b4795bc5adc31a1d6a2151364ce1b372ac43f613f56c8448fed COPYING +sha256 26c826658dfa9e5ce5f182fbfbadf3fda2d184e78dba3d99da34c60113b2ce54 COPYRIGHT diff --git a/package/autofs/autofs.mk b/package/autofs/autofs.mk new file mode 100644 index 00000000..4c520058 --- /dev/null +++ b/package/autofs/autofs.mk @@ -0,0 +1,48 @@ +################################################################################ +# +# autofs +# +################################################################################ + +AUTOFS_VERSION = 5.1.7 +AUTOFS_SOURCE = autofs-$(AUTOFS_VERSION).tar.xz +AUTOFS_SITE = $(BR2_KERNEL_MIRROR)/linux/daemons/autofs/v5 +AUTOFS_LICENSE = GPL-2.0+ +AUTOFS_LICENSE_FILES = COPYING COPYRIGHT +AUTOFS_DEPENDENCIES = host-flex host-bison host-pkgconf host-nfs-utils + +# autofs looks on the build machine for the path of modprobe, mount, +# umount and fsck programs so tell it explicitly where they will be +# located on the target. +AUTOFS_CONF_ENV = \ + ac_cv_path_E2FSCK=/sbin/fsck \ + ac_cv_path_E3FSCK=no \ + ac_cv_path_E4FSCK=no \ + ac_cv_path_KRB5_CONFIG=no \ + ac_cv_path_MODPROBE=/sbin/modprobe \ + ac_cv_path_MOUNT=/bin/mount \ + ac_cv_path_MOUNT_NFS=/usr/sbin/mount.nfs \ + ac_cv_path_UMOUNT=/bin/umount \ + ac_cv_linux_procfs=yes + +# instead of looking in the PATH like any reasonable package, autofs +# configure looks only in an hardcoded search path for host tools, +# which we have to override with --with-path. +AUTOFS_CONF_OPTS = \ + --disable-mount-locking \ + --enable-ignore-busy \ + --without-openldap \ + --without-sasl \ + --with-path="$(BR_PATH)" \ + --with-hesiod=no + +AUTOFS_MAKE_ENV = DONTSTRIP=1 + +ifeq ($(BR2_PACKAGE_LIBTIRPC),y) +AUTOFS_CONF_OPTS += --with-libtirpc +AUTOFS_DEPENDENCIES += libtirpc +else +AUTOFS_CONF_OPTS += --without-libtirpc +endif + +$(eval $(autotools-package)) diff --git a/package/automake/0001-noman.patch b/package/automake/0001-noman.patch new file mode 100644 index 00000000..a4ad16dd --- /dev/null +++ b/package/automake/0001-noman.patch @@ -0,0 +1,27 @@ +Disable manpages build and installation, seems the bundled version of +help2man is somewhat old and breaks on modern distributions such as +Fedora 20, as reported by Kanibal on IRC. + +Signed-off-by: Gustavo Zacarias + +diff -Nura automake-1.14.1.orig/Makefile.in automake-1.14.1/Makefile.in +--- automake-1.14.1.orig/Makefile.in 2014-09-10 18:40:57.554164448 -0300 ++++ automake-1.14.1/Makefile.in 2014-09-10 18:42:01.050348068 -0300 +@@ -3387,7 +3387,7 @@ + check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS check-local + check: check-am +-all-am: Makefile $(INFO_DEPS) $(SCRIPTS) $(MANS) $(DATA) ++all-am: Makefile $(INFO_DEPS) $(SCRIPTS) $(DATA) + installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(amdir)" "$(DESTDIR)$(automake_acdir)" "$(DESTDIR)$(automake_internal_acdir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(perllibdir)" "$(DESTDIR)$(pkgvdatadir)" "$(DESTDIR)$(scriptdir)" "$(DESTDIR)$(system_acdir)" "$(DESTDIR)$(perllibdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ +@@ -3454,7 +3454,7 @@ + install-dist_automake_internal_acDATA install-dist_docDATA \ + install-dist_perllibDATA install-dist_pkgvdataDATA \ + install-dist_scriptDATA install-dist_system_acDATA \ +- install-info-am install-man install-nodist_perllibDATA ++ install-info-am install-nodist_perllibDATA + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook + install-dvi: install-dvi-am diff --git a/package/automake/automake.hash b/package/automake/automake.hash new file mode 100644 index 00000000..b194c3c2 --- /dev/null +++ b/package/automake/automake.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 af6ba39142220687c500f79b4aa2f181d9b24e4f8d8ec497cea4ba26c64bedaf automake-1.15.1.tar.xz +# License files, locally calculated +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/automake/automake.mk b/package/automake/automake.mk new file mode 100644 index 00000000..ad8f0f47 --- /dev/null +++ b/package/automake/automake.mk @@ -0,0 +1,38 @@ +################################################################################ +# +# automake +# +################################################################################ + +AUTOMAKE_VERSION = 1.15.1 +AUTOMAKE_SOURCE = automake-$(AUTOMAKE_VERSION).tar.xz +AUTOMAKE_SITE = $(BR2_GNU_MIRROR)/automake +AUTOMAKE_LICENSE = GPL-2.0+ +AUTOMAKE_LICENSE_FILES = COPYING +AUTOMAKE_CPE_ID_VENDOR = gnu + +HOST_AUTOMAKE_DEPENDENCIES = host-autoconf + +ACLOCAL_HOST_DIR = $(HOST_DIR)/share/aclocal + +define GTK_DOC_M4_INSTALL + $(INSTALL) -D -m 0644 package/automake/gtk-doc.m4 \ + $(ACLOCAL_HOST_DIR)/gtk-doc.m4 +endef + +# ensure staging aclocal dir exists +define HOST_AUTOMAKE_MAKE_ACLOCAL + mkdir -p $(ACLOCAL_DIR) +endef + +HOST_AUTOMAKE_POST_INSTALL_HOOKS += GTK_DOC_M4_INSTALL +HOST_AUTOMAKE_POST_INSTALL_HOOKS += HOST_AUTOMAKE_MAKE_ACLOCAL + +$(eval $(host-autotools-package)) + +# variables used by other packages +AUTOMAKE = $(HOST_DIR)/bin/automake +ACLOCAL_DIR = $(STAGING_DIR)/usr/share/aclocal +ACLOCAL = $(HOST_DIR)/bin/aclocal +ACLOCAL_PATH = $(ACLOCAL_DIR):$(ACLOCAL_HOST_DIR) +export ACLOCAL_PATH diff --git a/package/automake/gtk-doc.m4 b/package/automake/gtk-doc.m4 new file mode 100644 index 00000000..36755432 --- /dev/null +++ b/package/automake/gtk-doc.m4 @@ -0,0 +1,88 @@ +dnl -*- mode: autoconf -*- + +# serial 2 + +dnl Usage: +dnl GTK_DOC_CHECK([minimum-gtk-doc-version]) +AC_DEFUN([GTK_DOC_CHECK], +[ + AC_REQUIRE([PKG_PROG_PKG_CONFIG]) + AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first + AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first + + ifelse([$1],[],[gtk_doc_requires="gtk-doc"],[gtk_doc_requires="gtk-doc >= $1"]) + AC_MSG_CHECKING([for gtk-doc]) + PKG_CHECK_EXISTS([$gtk_doc_requires],[have_gtk_doc=yes],[have_gtk_doc=no]) + AC_MSG_RESULT($have_gtk_doc) + + if test "$have_gtk_doc" = "no"; then + AC_MSG_WARN([ + You will not be able to create source packages with 'make dist' + because $gtk_doc_requires is not found.]) + fi + + dnl check for tools we added during development + dnl Use AC_CHECK_PROG to avoid the check target using an absolute path that + dnl may not be writable by the user. Currently, automake requires that the + dnl test name must end in '.test'. + dnl https://bugzilla.gnome.org/show_bug.cgi?id=701638 + AC_CHECK_PROG([GTKDOC_CHECK],[gtkdoc-check],[gtkdoc-check.test]) + AC_PATH_PROG([GTKDOC_CHECK_PATH],[gtkdoc-check]) + AC_PATH_PROGS([GTKDOC_REBASE],[gtkdoc-rebase],[true]) + AC_PATH_PROG([GTKDOC_MKPDF],[gtkdoc-mkpdf]) + + dnl for overriding the documentation installation directory + AC_ARG_WITH([html-dir], + AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),, + [with_html_dir='${datadir}/gtk-doc/html']) + HTML_DIR="$with_html_dir" + AC_SUBST([HTML_DIR]) + + dnl enable/disable documentation building + AC_ARG_ENABLE([gtk-doc], + AS_HELP_STRING([--enable-gtk-doc], + [use gtk-doc to build documentation [[default=no]]]),, + [enable_gtk_doc=no]) + + AC_MSG_CHECKING([whether to build gtk-doc documentation]) + AC_MSG_RESULT($enable_gtk_doc) + + if test "x$enable_gtk_doc" = "xyes" && test "$have_gtk_doc" = "no"; then + AC_MSG_ERROR([ + You must have $gtk_doc_requires installed to build documentation for + $PACKAGE_NAME. Please install gtk-doc or disable building the + documentation by adding '--disable-gtk-doc' to '[$]0'.]) + fi + + dnl don't check for glib if we build glib + if test "x$PACKAGE_NAME" != "xglib"; then + dnl don't fail if someone does not have glib + PKG_CHECK_MODULES(GTKDOC_DEPS, glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0,,[:]) + fi + + dnl enable/disable output formats + AC_ARG_ENABLE([gtk-doc-html], + AS_HELP_STRING([--enable-gtk-doc-html], + [build documentation in html format [[default=yes]]]),, + [enable_gtk_doc_html=yes]) + AC_ARG_ENABLE([gtk-doc-pdf], + AS_HELP_STRING([--enable-gtk-doc-pdf], + [build documentation in pdf format [[default=no]]]),, + [enable_gtk_doc_pdf=no]) + + if test -z "$GTKDOC_MKPDF"; then + enable_gtk_doc_pdf=no + fi + + if test -z "$AM_DEFAULT_VERBOSITY"; then + AM_DEFAULT_VERBOSITY=1 + fi + AC_SUBST([AM_DEFAULT_VERBOSITY]) + + AM_CONDITIONAL([HAVE_GTK_DOC], [test x$have_gtk_doc = xyes]) + AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes]) + AM_CONDITIONAL([GTK_DOC_BUILD_HTML], [test x$enable_gtk_doc_html = xyes]) + AM_CONDITIONAL([GTK_DOC_BUILD_PDF], [test x$enable_gtk_doc_pdf = xyes]) + AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"]) + AM_CONDITIONAL([GTK_DOC_USE_REBASE], [test -n "$GTKDOC_REBASE"]) +]) diff --git a/package/autoreboot/Config.in b/package/autoreboot/Config.in new file mode 100644 index 00000000..850ca729 --- /dev/null +++ b/package/autoreboot/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_AUTOREBOOT + bool "loongson buildroot system autoreboot test" + depends on BR2_INIT_SYSTEMD || BR2_INIT_BUSYBOX + help + this will create a service which name is autoboot.service + and create a script in /opt which name is autoreboot.sh + so this service will run this script after system reboot. + when the script start run it'll make /opt/log_autoreboot for store log + which to record the count of reboot and reboot time. the default reboot + times is 1000. + if you don't need it you can run this command + 'systemctl disable autoreboot' + if you want to enable this service you can run this command + 'systemctl enable autoreboot' + diff --git a/package/autoreboot/autoreboot.mk b/package/autoreboot/autoreboot.mk new file mode 100644 index 00000000..3a10a256 --- /dev/null +++ b/package/autoreboot/autoreboot.mk @@ -0,0 +1,50 @@ +################################################################################ +# +# autoreboot +# +################################################################################ + +AUTOREBOOT_SITE = $(TOPDIR)/package/autoreboot/autoreboot.tar.gz +AUTOREBOOT_SITE_METHOD = file + +ifeq ($(BR2_INIT_SYSTEMD),y) +AUTOREBOOT_DEPENDENCIES = busybox systemd +endif + +define AUTOREBOOT_EXTRACT_CMDS + echo $(AUTOREBOOT_SITE) + tar -zxf $(AUTOREBOOT_SITE) -C $(@D)/ +endef + + +define AUTOREBOOT_BUILD_CMDS + echo "[build]nothing to do" +endef + +define AUTOREBOOT_INSTALL_STAGING_CMDS + echo "[install_staging]nothing to do" +endef + +ifeq ($(BR2_INIT_SYSTEMD),y) +define AUTOREBOOT_INSTALL_TARGET_CMDS + echo "[install_target]install autoreboot.service" + + mkdir -p $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants + cd $(@D)/autoreboot && cp autoreboot.service $(TARGET_DIR)/usr/lib/systemd/system/ + cd $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants && ln -b -s ../autoreboot.service autoreboot_service + mkdir -p $(TARGET_DIR)/opt + cd $(@D)/autoreboot && cp autoreboot.sh $(TARGET_DIR)/opt +endef +else +define AUTOREBOOT_INSTALL_TARGET_CMDS + echo "[install_target][busybox] nothing to do" +endef +endif + +#define BUILD_AUTOREBOOT_ADD_TLS_LINK +# mkdir -p $(TARGET_DIR)/usr/lib64/tls; cd $(TARGET_DIR)/usr/lib64/tls; if ! test -L loongarch ; then ln -s ../../lib64/ loongarch; fi +#endef +# +#AUTOREBOOT_TARGET_FINALIZE_HOOKS += BUILD_AUTOREBOOT_ADD_TLS_LINK + +$(eval $(generic-package)) diff --git a/package/autoreboot/autoreboot.tar.gz b/package/autoreboot/autoreboot.tar.gz new file mode 100644 index 00000000..aab8dcdf Binary files /dev/null and b/package/autoreboot/autoreboot.tar.gz differ diff --git a/package/autossh/Config.in b/package/autossh/Config.in new file mode 100644 index 00000000..351e23ff --- /dev/null +++ b/package/autossh/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_AUTOSSH + bool "autossh" + depends on BR2_USE_MMU # fork() + depends on BR2_PACKAGE_DROPBEAR || BR2_PACKAGE_OPENSSH + help + autossh is a program to start a copy of ssh and monitor it, + restarting it as necessary should it die or stop passing + traffic. + + http://www.harding.motd.ca/autossh/ diff --git a/package/autossh/autossh.hash b/package/autossh/autossh.hash new file mode 100644 index 00000000..226003f8 --- /dev/null +++ b/package/autossh/autossh.hash @@ -0,0 +1,6 @@ +# From http://www.harding.motd.ca/autossh/autossh-1.4g.cksums +sha256 5fc3cee3361ca1615af862364c480593171d0c54ec156de79fc421e31ae21277 autossh-1.4g.tgz +sha1 bd88da0e296b8d85722ee9e7c314e9319e5b2db8 autossh-1.4g.tgz +md5 2b804bc1bf6d2f2afaa526d02df7c0a2 autossh-1.4g.tgz +# Locally computed +sha256 014ec5a85a8899d4ea0e0a886bb3fc4c72b4bbec6414093ba1fdac5b178c25b4 autossh.c diff --git a/package/autossh/autossh.mk b/package/autossh/autossh.mk new file mode 100644 index 00000000..899e5cdb --- /dev/null +++ b/package/autossh/autossh.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# autossh +# +################################################################################ + +AUTOSSH_VERSION = 1.4g +AUTOSSH_SITE = http://www.harding.motd.ca/autossh +AUTOSSH_SOURCE = autossh-$(AUTOSSH_VERSION).tgz +AUTOSSH_LICENSE = Modified BSD +AUTOSSH_LICENSE_FILES = autossh.c +# Fix AC_ARG_WITH code generation for --with-ssh +AUTOSSH_AUTORECONF = YES + +AUTOSSH_CONF_OPTS = --with-ssh=/usr/bin/ssh + +$(eval $(autotools-package)) diff --git a/package/avahi/0001-Fix-NULL-pointer-crashes-from-175.patch b/package/avahi/0001-Fix-NULL-pointer-crashes-from-175.patch new file mode 100644 index 00000000..7e191e8d --- /dev/null +++ b/package/avahi/0001-Fix-NULL-pointer-crashes-from-175.patch @@ -0,0 +1,152 @@ +From 9d31939e55280a733d930b15ac9e4dda4497680c Mon Sep 17 00:00:00 2001 +From: Tommi Rantala +Date: Mon, 8 Feb 2021 11:04:43 +0200 +Subject: [PATCH] Fix NULL pointer crashes from #175 + +avahi-daemon is crashing when running "ping .local". +The crash is due to failing assertion from NULL pointer. +Add missing NULL pointer checks to fix it. + +Introduced in #175 - merge commit 8f75a045709a780c8cf92a6a21e9d35b593bdecd + +[Retrieved from: +https://github.com/lathiat/avahi/commit/9d31939e55280a733d930b15ac9e4dda4497680c] +Signed-off-by: Fabrice Fontaine +--- + avahi-core/browse-dns-server.c | 5 ++++- + avahi-core/browse-domain.c | 5 ++++- + avahi-core/browse-service-type.c | 3 +++ + avahi-core/browse-service.c | 3 +++ + avahi-core/browse.c | 3 +++ + avahi-core/resolve-address.c | 5 ++++- + avahi-core/resolve-host-name.c | 5 ++++- + avahi-core/resolve-service.c | 5 ++++- + 8 files changed, 29 insertions(+), 5 deletions(-) + +diff --git a/avahi-core/browse-dns-server.c b/avahi-core/browse-dns-server.c +index 049752e9..c2d914fa 100644 +--- a/avahi-core/browse-dns-server.c ++++ b/avahi-core/browse-dns-server.c +@@ -343,7 +343,10 @@ AvahiSDNSServerBrowser *avahi_s_dns_server_browser_new( + AvahiSDNSServerBrowser* b; + + b = avahi_s_dns_server_browser_prepare(server, interface, protocol, domain, type, aprotocol, flags, callback, userdata); ++ if (!b) ++ return NULL; ++ + avahi_s_dns_server_browser_start(b); + + return b; +-} +\ No newline at end of file ++} +diff --git a/avahi-core/browse-domain.c b/avahi-core/browse-domain.c +index f145d56a..06fa70c0 100644 +--- a/avahi-core/browse-domain.c ++++ b/avahi-core/browse-domain.c +@@ -253,7 +253,10 @@ AvahiSDomainBrowser *avahi_s_domain_browser_new( + AvahiSDomainBrowser *b; + + b = avahi_s_domain_browser_prepare(server, interface, protocol, domain, type, flags, callback, userdata); ++ if (!b) ++ return NULL; ++ + avahi_s_domain_browser_start(b); + + return b; +-} +\ No newline at end of file ++} +diff --git a/avahi-core/browse-service-type.c b/avahi-core/browse-service-type.c +index fdd22dcd..b1fc7af8 100644 +--- a/avahi-core/browse-service-type.c ++++ b/avahi-core/browse-service-type.c +@@ -171,6 +171,9 @@ AvahiSServiceTypeBrowser *avahi_s_service_type_browser_new( + AvahiSServiceTypeBrowser *b; + + b = avahi_s_service_type_browser_prepare(server, interface, protocol, domain, flags, callback, userdata); ++ if (!b) ++ return NULL; ++ + avahi_s_service_type_browser_start(b); + + return b; +diff --git a/avahi-core/browse-service.c b/avahi-core/browse-service.c +index 5531360c..63e0275a 100644 +--- a/avahi-core/browse-service.c ++++ b/avahi-core/browse-service.c +@@ -184,6 +184,9 @@ AvahiSServiceBrowser *avahi_s_service_browser_new( + AvahiSServiceBrowser *b; + + b = avahi_s_service_browser_prepare(server, interface, protocol, service_type, domain, flags, callback, userdata); ++ if (!b) ++ return NULL; ++ + avahi_s_service_browser_start(b); + + return b; +diff --git a/avahi-core/browse.c b/avahi-core/browse.c +index 2941e579..e8a915e9 100644 +--- a/avahi-core/browse.c ++++ b/avahi-core/browse.c +@@ -634,6 +634,9 @@ AvahiSRecordBrowser *avahi_s_record_browser_new( + AvahiSRecordBrowser *b; + + b = avahi_s_record_browser_prepare(server, interface, protocol, key, flags, callback, userdata); ++ if (!b) ++ return NULL; ++ + avahi_s_record_browser_start_query(b); + + return b; +diff --git a/avahi-core/resolve-address.c b/avahi-core/resolve-address.c +index ac0b29b1..e61dd242 100644 +--- a/avahi-core/resolve-address.c ++++ b/avahi-core/resolve-address.c +@@ -286,7 +286,10 @@ AvahiSAddressResolver *avahi_s_address_resolver_new( + AvahiSAddressResolver *b; + + b = avahi_s_address_resolver_prepare(server, interface, protocol, address, flags, callback, userdata); ++ if (!b) ++ return NULL; ++ + avahi_s_address_resolver_start(b); + + return b; +-} +\ No newline at end of file ++} +diff --git a/avahi-core/resolve-host-name.c b/avahi-core/resolve-host-name.c +index 808b0e72..4e8e5973 100644 +--- a/avahi-core/resolve-host-name.c ++++ b/avahi-core/resolve-host-name.c +@@ -318,7 +318,10 @@ AvahiSHostNameResolver *avahi_s_host_name_resolver_new( + AvahiSHostNameResolver *b; + + b = avahi_s_host_name_resolver_prepare(server, interface, protocol, host_name, aprotocol, flags, callback, userdata); ++ if (!b) ++ return NULL; ++ + avahi_s_host_name_resolver_start(b); + + return b; +-} +\ No newline at end of file ++} +diff --git a/avahi-core/resolve-service.c b/avahi-core/resolve-service.c +index 66bf3cae..43771763 100644 +--- a/avahi-core/resolve-service.c ++++ b/avahi-core/resolve-service.c +@@ -519,7 +519,10 @@ AvahiSServiceResolver *avahi_s_service_resolver_new( + AvahiSServiceResolver *b; + + b = avahi_s_service_resolver_prepare(server, interface, protocol, name, type, domain, aprotocol, flags, callback, userdata); ++ if (!b) ++ return NULL; ++ + avahi_s_service_resolver_start(b); + + return b; +-} +\ No newline at end of file ++} diff --git a/package/avahi/Config.in b/package/avahi/Config.in new file mode 100644 index 00000000..5e303d04 --- /dev/null +++ b/package/avahi/Config.in @@ -0,0 +1,49 @@ +config BR2_PACKAGE_AVAHI + bool "avahi" + # libdaemon uses fork() + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + help + Avahi is a system which facilitates service + discovery on a local network. + + http://www.avahi.org/ + +if BR2_PACKAGE_AVAHI + +config BR2_PACKAGE_AVAHI_AUTOIPD + bool "IPv4LL network address configuration daemon" + default y + select BR2_PACKAGE_LIBDAEMON + help + Avahi-autoipd implements IPv4LL, "Dynamic Configuration of + IPv4 Link-Local Addresses" (IETF RFC3927), a protocol for + automatic IP address configuration from the link-local + 169.254.0.0/16 range without the need for a central server. + It is primarily intended to be used in ad-hoc networks which + lack a DHCP server. + +config BR2_PACKAGE_AVAHI_DAEMON + bool "mDNS/DNS-SD daemon" + select BR2_PACKAGE_LIBDAEMON + select BR2_PACKAGE_EXPAT + help + The Avahi mDNS/DNS-SD daemon implementing Apple's ZeroConf + architecture (also known as "Rendezvous" or "Bonjour"). + The daemon registers local IP addresses and services using + mDNS/DNS-SD. + +config BR2_PACKAGE_AVAHI_LIBDNSSD_COMPATIBILITY + bool "libdns_sd compatibility (Bonjour)" + depends on BR2_PACKAGE_AVAHI_DAEMON + select BR2_PACKAGE_DBUS + help + Enable the libdns_sd (Bonjour) compatibility library support + for legacy applications. + +endif + +comment "avahi needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/avahi/S05avahi-setup.sh b/package/avahi/S05avahi-setup.sh new file mode 100644 index 00000000..90ccbcea --- /dev/null +++ b/package/avahi/S05avahi-setup.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +case "$1" in + start|"") + if [ ! -d /tmp/avahi-autoipd ]; then + rm -rf /tmp/avahi-autoipd + mkdir /tmp/avahi-autoipd + chown avahi.avahi /tmp/avahi-autoipd + fi + ;; + stop) ;; + *) + echo "Usage: S05avahi-setup.sh {start|stop}" >&2 + exit 1 + ;; +esac diff --git a/package/avahi/S50avahi-daemon b/package/avahi/S50avahi-daemon new file mode 100644 index 00000000..81ac5131 --- /dev/null +++ b/package/avahi/S50avahi-daemon @@ -0,0 +1,20 @@ +#!/bin/sh +# +# avahi-daemon init script + +DAEMON=/usr/sbin/avahi-daemon +case "$1" in + start) + $DAEMON -c || $DAEMON -D + ;; + stop) + $DAEMON -c && $DAEMON -k + ;; + reload) + $DAEMON -c && $DAEMON -r + ;; + *) + echo "Usage: S50avahi-daemon {start|stop|reload}" >&2 + exit 1 + ;; +esac diff --git a/package/avahi/avahi.hash b/package/avahi/avahi.hash new file mode 100644 index 00000000..cfc7ba02 --- /dev/null +++ b/package/avahi/avahi.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 060309d7a333d38d951bc27598c677af1796934dbd98e1024e7ad8de798fedda avahi-0.8.tar.gz +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 LICENSE diff --git a/package/avahi/avahi.mk b/package/avahi/avahi.mk new file mode 100644 index 00000000..9de6ebc4 --- /dev/null +++ b/package/avahi/avahi.mk @@ -0,0 +1,196 @@ +################################################################################ +# +# avahi +# +################################################################################ + +AVAHI_VERSION = 0.8 +AVAHI_SITE = https://github.com/lathiat/avahi/releases/download/v$(AVAHI_VERSION) +AVAHI_LICENSE = LGPL-2.1+ +AVAHI_LICENSE_FILES = LICENSE +AVAHI_CPE_ID_VENDOR = avahi +AVAHI_SELINUX_MODULES = avahi +AVAHI_INSTALL_STAGING = YES + +# CVE-2021-26720 is an issue in avahi-daemon-check-dns.sh, which is +# part of the Debian packaging and not part of upstream avahi +AVAHI_IGNORE_CVES += CVE-2021-26720 + +# 0001-Fix-NULL-pointer-crashes-from-175.patch +AVAHI_IGNORE_CVES += CVE-2021-36217 + +AVAHI_CONF_ENV = \ + avahi_cv_sys_cxx_works=yes \ + DATADIRNAME=share + +# Note: even if we have Gtk2 and Gtk3 support in Buildroot, we +# explicitly disable support for them, in order to avoid the following +# circular dependencies: +# +# avahi -> libglade -> libgtk2 -> cups -> avahi +# avahi -> libgtk3 -> cups -> avahi +# +# Since Gtk2 and Gtk3 in Avahi are only used for some example/demo +# programs, we decided to disable their support to solve the circular +# dependency. +AVAHI_CONF_OPTS = \ + --disable-qt3 \ + --disable-qt4 \ + --disable-qt5 \ + --disable-gtk \ + --disable-gtk3 \ + --disable-gdbm \ + --disable-pygobject \ + --disable-mono \ + --disable-monodoc \ + --disable-stack-protector \ + --disable-introspection \ + --with-distro=none \ + --disable-manpages \ + $(if $(BR2_PACKAGE_AVAHI_AUTOIPD),--enable,--disable)-autoipd \ + --with-avahi-user=avahi \ + --with-avahi-group=avahi \ + --with-autoipd-user=avahi \ + --with-autoipd-group=avahi + +AVAHI_DEPENDENCIES = host-pkgconf $(TARGET_NLS_DEPENDENCIES) + +AVAHI_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +AVAHI_CONF_OPTS += --with-systemdsystemunitdir=/usr/lib/systemd/system +else +AVAHI_CONF_OPTS += --with-systemdsystemunitdir=no +AVAHI_CFLAGS += -DDISABLE_SYSTEMD +endif + +ifneq ($(BR2_PACKAGE_AVAHI_DAEMON)$(BR2_PACKAGE_AVAHI_AUTOIPD),) +AVAHI_DEPENDENCIES += libdaemon +else +AVAHI_CONF_OPTS += --disable-libdaemon +endif + +ifeq ($(BR2_PACKAGE_LIBCAP),y) +AVAHI_DEPENDENCIES += libcap +endif + +ifeq ($(BR2_PACKAGE_AVAHI_DAEMON),y) +AVAHI_DEPENDENCIES += expat +AVAHI_CONF_OPTS += --with-xml=expat +else +AVAHI_CONF_OPTS += --with-xml=none +endif + +ifeq ($(BR2_PACKAGE_AVAHI_LIBDNSSD_COMPATIBILITY),y) +AVAHI_CONF_OPTS += --enable-compat-libdns_sd +endif + +ifeq ($(BR2_PACKAGE_DBUS),y) +AVAHI_DEPENDENCIES += dbus +AVAHI_CONF_OPTS += --with-dbus-sys=/usr/share/dbus-1/system.d +else +AVAHI_CONF_OPTS += --disable-dbus +endif + +ifeq ($(BR2_PACKAGE_LIBEVENT),y) +AVAHI_DEPENDENCIES += libevent +else +AVAHI_CONF_OPTS += --disable-libevent +endif + +ifeq ($(BR2_PACKAGE_LIBGLIB2),y) +AVAHI_DEPENDENCIES += libglib2 +else +AVAHI_CONF_OPTS += --disable-glib --disable-gobject +endif + +ifeq ($(BR2_PACKAGE_PYTHON),y) +AVAHI_CONF_ENV += \ + am_cv_pathless_PYTHON=python \ + am_cv_path_PYTHON=$(PYTHON_TARGET_BINARY) \ + am_cv_python_version=$(PYTHON_VERSION) \ + am_cv_python_platform=linux2 \ + am_cv_python_pythondir=/usr/lib/python$(PYTHON_VERSION_MAJOR)/site-packages \ + am_cv_python_pyexecdir=/usr/lib/python$(PYTHON_VERSION_MAJOR)/site-packages \ + py_cv_mod_socket_=yes + +AVAHI_DEPENDENCIES += python +AVAHI_CONF_OPTS += --enable-python +else +AVAHI_CONF_OPTS += --disable-python +endif + +ifeq ($(BR2_PACKAGE_DBUS_PYTHON),y) +AVAHI_CONF_OPTS += --enable-python-dbus +AVAHI_CONF_ENV += py_cv_mod_dbus_=yes +AVAHI_DEPENDENCIES += dbus-python +else +AVAHI_CONF_OPTS += --disable-python-dbus +endif + +AVAHI_CONF_ENV += CFLAGS="$(AVAHI_CFLAGS)" + +AVAHI_MAKE_OPTS += LIBS=$(TARGET_NLS_LIBS) + +define AVAHI_USERS + avahi -1 avahi -1 * - - - +endef + +define AVAHI_REMOVE_INITSCRIPT + rm -rf $(TARGET_DIR)/etc/init.d/avahi-* +endef + +AVAHI_POST_INSTALL_TARGET_HOOKS += AVAHI_REMOVE_INITSCRIPT + +ifeq ($(BR2_PACKAGE_AVAHI_AUTOIPD),y) +define AVAHI_INSTALL_AUTOIPD + rm -f $(TARGET_DIR)/var/lib/avahi-autoipd + $(INSTALL) -d -m 0755 $(TARGET_DIR)/var/lib + ln -sf /tmp/avahi-autoipd $(TARGET_DIR)/var/lib/avahi-autoipd +endef + +define AVAHI_INSTALL_AUTOIPD_INIT_SYSV + $(INSTALL) -D -m 0755 package/avahi/S05avahi-setup.sh $(TARGET_DIR)/etc/init.d/S05avahi-setup.sh +endef + +AVAHI_POST_INSTALL_TARGET_HOOKS += AVAHI_INSTALL_AUTOIPD +endif + +ifeq ($(BR2_PACKAGE_AVAHI_DAEMON),y) + +ifeq ($(BR2_PACKAGE_SYSTEMD_SYSUSERS),y) +define AVAHI_INSTALL_SYSTEMD_SYSUSERS + $(INSTALL) -D -m 644 package/avahi/avahi_sysusers.conf \ + $(TARGET_DIR)/usr/lib/sysusers.d/avahi.conf +endef +endif + +define AVAHI_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/avahi/avahi_tmpfiles.conf \ + $(TARGET_DIR)/usr/lib/tmpfiles.d/avahi.conf + + $(AVAHI_INSTALL_SYSTEMD_SYSUSERS) +endef + +define AVAHI_INSTALL_DAEMON_INIT_SYSV + $(INSTALL) -D -m 0755 package/avahi/S50avahi-daemon $(TARGET_DIR)/etc/init.d/S50avahi-daemon +endef + +endif + +define AVAHI_INSTALL_INIT_SYSV + $(AVAHI_INSTALL_AUTOIPD_INIT_SYSV) + $(AVAHI_INSTALL_DAEMON_INIT_SYSV) +endef + +ifeq ($(BR2_PACKAGE_AVAHI_LIBDNSSD_COMPATIBILITY),y) +# applications expects to be able to #include +define AVAHI_STAGING_INSTALL_LIBDNSSD_LINK + ln -sf avahi-compat-libdns_sd/dns_sd.h \ + $(STAGING_DIR)/usr/include/dns_sd.h +endef + +AVAHI_POST_INSTALL_STAGING_HOOKS += AVAHI_STAGING_INSTALL_LIBDNSSD_LINK +endif + +$(eval $(autotools-package)) diff --git a/package/avahi/avahi_sysusers.conf b/package/avahi/avahi_sysusers.conf new file mode 100644 index 00000000..463ce97c --- /dev/null +++ b/package/avahi/avahi_sysusers.conf @@ -0,0 +1,5 @@ +# sysusers.d snippet for creating the avahi system user automatically +# at boot on systemd-based systems that ship with an unpopulated +# /etc. See sysusers.d(5) for details. + +u avahi - "Avahi mDNS/DNS-SD Stack" diff --git a/package/avahi/avahi_tmpfiles.conf b/package/avahi/avahi_tmpfiles.conf new file mode 100644 index 00000000..da23c147 --- /dev/null +++ b/package/avahi/avahi_tmpfiles.conf @@ -0,0 +1 @@ +d /tmp/avahi-autoipd 0755 avahi avahi diff --git a/package/avrdude/Config.in b/package/avrdude/Config.in new file mode 100644 index 00000000..fba4253a --- /dev/null +++ b/package/avrdude/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_AVRDUDE + bool "avrdude" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_WCHAR # elfutils + depends on !BR2_STATIC_LIBS # elfutils + depends on BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC # elfutils + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_ELFUTILS + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_LIBUSB_COMPAT + select BR2_PACKAGE_NCURSES + help + avrdude is a programmer for Atmel AVR microcontrollers + this package provides a version with new linuxspi driver + + https://github.com/kcuzner/avrdude + +comment "avrdude needs a uClibc or glibc toolchain w/ threads, wchar, dynamic library, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR \ + || BR2_STATIC_LIBS || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 \ + || !(BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC) diff --git a/package/avrdude/avrdude.hash b/package/avrdude/avrdude.hash new file mode 100644 index 00000000..888668ae --- /dev/null +++ b/package/avrdude/avrdude.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 cfa97af7badc713c62306ab85d0e7a288b064bf72e698494f73cb16c5b2c659e avrdude-f8893ccf0aceeff67c45f95ae4e86bc7fbe342aa.tar.gz +sha256 201babc7da198873304a77a30dbfc7ca449c9bba52df2dffa4cca0009dbdfcb2 avrdude/COPYING diff --git a/package/avrdude/avrdude.mk b/package/avrdude/avrdude.mk new file mode 100644 index 00000000..ae378dfb --- /dev/null +++ b/package/avrdude/avrdude.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# avrdude +# +################################################################################ + +AVRDUDE_VERSION = f8893ccf0aceeff67c45f95ae4e86bc7fbe342aa +AVRDUDE_SITE = $(call github,kcuzner,avrdude,$(AVRDUDE_VERSION)) +AVRDUDE_LICENSE = GPL-2.0+ +AVRDUDE_LICENSE_FILES = avrdude/COPYING +AVRDUDE_SUBDIR = avrdude +# Sources coming from git, without generated configure and Makefile.in +# files. +AVRDUDE_AUTORECONF = YES +AVRDUDE_CONF_OPTS = --enable-linuxgpio +AVRDUDE_DEPENDENCIES = elfutils libusb libusb-compat ncurses \ + host-flex host-bison + +ifeq ($(BR2_PACKAGE_LIBFTDI1),y) +AVRDUDE_DEPENDENCIES += libftdi1 +else ifeq ($(BR2_PACKAGE_LIBFTDI),y) +AVRDUDE_DEPENDENCIES += libftdi +endif + +# if /etc/avrdude.conf exists, the installation process creates a +# backup file, which we do not want in the context of Buildroot. +define AVRDUDE_REMOVE_BACKUP_FILE + $(RM) -f $(TARGET_DIR)/etc/avrdude.conf.bak +endef + +AVRDUDE_POST_INSTALL_TARGET_HOOKS += AVRDUDE_REMOVE_BACKUP_FILE + +$(eval $(autotools-package)) diff --git a/package/avro-c/0001-cmake-Build-failure-without-a-C-compiler-again.patch b/package/avro-c/0001-cmake-Build-failure-without-a-C-compiler-again.patch new file mode 100644 index 00000000..8f7e59cf --- /dev/null +++ b/package/avro-c/0001-cmake-Build-failure-without-a-C-compiler-again.patch @@ -0,0 +1,34 @@ +From 8f5633a29b083a84876c00b88fba6d3e8dbbf1a8 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 19 Jul 2020 09:35:09 +0200 +Subject: [PATCH] cmake: Build failure without a C++ compiler (again) + +avro-c fails to build (again) without a C++ compiler because commit +664c2fc7fba19709c1f974055f9cf4c8a799e108 reverted the change made by +commit 414a51fdc1856083bb16851f09a4c61a48796132 + +Fixes: + - http://autobuild.buildroot.org/results/cfa91db53cf5502cbb6f902d1e7ad6397c8d70fd + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://issues.apache.org/jira/browse/AVRO-2898] +--- + CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 6c8d7aaf..aa923e18 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -17,7 +17,7 @@ + # under the License. + # + cmake_minimum_required(VERSION 3.1) +-project(AvroC) ++project(AvroC C) + enable_testing() + + set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}) +-- +2.27.0 + diff --git a/package/avro-c/Config.in b/package/avro-c/Config.in new file mode 100644 index 00000000..76d9123a --- /dev/null +++ b/package/avro-c/Config.in @@ -0,0 +1,27 @@ +comment "avro-c needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + +config BR2_PACKAGE_AVRO_C + bool "avro-c" + depends on !BR2_STATIC_LIBS # Avro unconditionally compiles shared libs + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + select BR2_PACKAGE_JANSSON + help + Select this option to install the Avro C language bindings, + and the command line tools avroappend, avrocat, avromod and + avropipe. + + Apache Avro is a data serialization system. + Avro provides: + - Rich data structures. + - A compact, fast, binary data format. + - A container file, to store persistent data. + - Remote procedure call (RPC). + - Simple integration with dynamic languages. + - Code generation is not required to read or write data + files nor to use or implement RPC protocols. + - Code generation as an optional optimization, + only worth implementing for statically typed languages. + + http://avro.apache.org/ diff --git a/package/avro-c/avro-c.hash b/package/avro-c/avro-c.hash new file mode 100644 index 00000000..c4fd7d3f --- /dev/null +++ b/package/avro-c/avro-c.hash @@ -0,0 +1,5 @@ +# From https://downloads.apache.org/avro/avro-1.10.0/c/avro-c-1.10.0.tar.gz.sha512 +sha512 2e64926b214fd996abf0553572ec6f46b312cf84df17149d1a7e89f4033b63cc34fabef62b98d727799a8a5d452ac9254e275bdea4bf894e9e1e4588bc5dfc9b avro-c-1.10.0.tar.gz + +# License files +sha256 d62488d6ba17132e92c23c03c80bfedc848267f96ab36489fec860f76cf6819a LICENSE diff --git a/package/avro-c/avro-c.mk b/package/avro-c/avro-c.mk new file mode 100644 index 00000000..ee6e8641 --- /dev/null +++ b/package/avro-c/avro-c.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# avro-c +# +################################################################################ + +AVRO_C_VERSION = 1.10.0 +AVRO_C_SITE = https://www-eu.apache.org/dist/avro/avro-$(AVRO_C_VERSION)/c +AVRO_C_LICENSE = Apache-2.0 +AVRO_C_LICENSE_FILES = LICENSE +AVRO_C_INSTALL_STAGING = YES +AVRO_C_DEPENDENCIES = host-pkgconf jansson + +ifeq ($(BR2_PACKAGE_SNAPPY),y) +AVRO_C_DEPENDENCIES += snappy +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +AVRO_C_DEPENDENCIES += zlib +endif + +ifeq ($(BR2_PACKAGE_XZ),y) +AVRO_C_DEPENDENCIES += xz +endif + +$(eval $(cmake-package)) diff --git a/package/axel/Config.in b/package/axel/Config.in new file mode 100644 index 00000000..4507855f --- /dev/null +++ b/package/axel/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_AXEL + bool "axel" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + HTTP/FTP download accelerator. + + https://github.com/axel-download-accelerator/axel/ + +comment "axel needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/axel/axel.hash b/package/axel/axel.hash new file mode 100644 index 00000000..552f9406 --- /dev/null +++ b/package/axel/axel.hash @@ -0,0 +1,2 @@ +sha256 46eb4f10a11c4e50320ae6a034ef03ffe59dc11c3c6542a9867a3e4dc0c4b44e axel-2.17.10.tar.xz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/axel/axel.mk b/package/axel/axel.mk new file mode 100644 index 00000000..8e3d7679 --- /dev/null +++ b/package/axel/axel.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# axel +# +################################################################################ + +AXEL_VERSION = 2.17.10 +AXEL_SITE = https://github.com/axel-download-accelerator/axel/releases/download/v$(AXEL_VERSION) +AXEL_SOURCE = axel-$(AXEL_VERSION).tar.xz +AXEL_LICENSE = GPL-2.0+ +AXEL_LICENSE_FILES = COPYING +AXEL_CPE_ID_VENDOR = axel_project +AXEL_DEPENDENCIES = host-pkgconf $(TARGET_NLS_DEPENDENCIES) + +# ac_cv_prog_cc_c99 is required for BR2_USE_WCHAR=n because the C99 test +# provided by autoconf relies on wchar_t. +AXEL_CONF_OPTS = \ + ac_cv_prog_cc_c99=-std=c99 \ + CFLAGS="$(TARGET_CFLAGS)" + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +AXEL_CONF_OPTS += --with-ssl +AXEL_DEPENDENCIES += openssl +else +AXEL_CONF_OPTS += --without-ssl +endif + +$(eval $(autotools-package)) diff --git a/package/axfsutils/axfsutils.hash b/package/axfsutils/axfsutils.hash new file mode 100644 index 00000000..b7a5943d --- /dev/null +++ b/package/axfsutils/axfsutils.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 7d8c0febaf6f104c2b179475ea1ee6d361688ad7fa4c98dfdf7395fcff2be685 axfsutils-384a1ea214c8cf8359faba00a12513ee7ae1a9f5.tar.gz +sha256 1929a1e67d189aa3a24de76255841b33818f7f65944b6e73a1568ba575ab54d5 mkfs.axfs-legacy/COPYING diff --git a/package/axfsutils/axfsutils.mk b/package/axfsutils/axfsutils.mk new file mode 100644 index 00000000..88792216 --- /dev/null +++ b/package/axfsutils/axfsutils.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# axfsutils +# +################################################################################ + +AXFSUTILS_VERSION = 384a1ea214c8cf8359faba00a12513ee7ae1a9f5 +AXFSUTILS_SITE = $(call github,jaredeh,axfs,$(AXFSUTILS_VERSION)) +AXFSUTILS_LICENSE = GPL-2.0 +AXFSUTILS_LICENSE_FILES = mkfs.axfs-legacy/COPYING +HOST_AXFSUTILS_DEPENDENCIES = host-zlib + +# The 'new' mkfs.axfs version requires GNUstep which is not a buildroot +# prerequisite. The 'legacy' one works just as well without that requirement. +define HOST_AXFSUTILS_BUILD_CMDS + $(HOST_MAKE_ENV) $(HOST_CONFIGURE_OPTS) $(MAKE) -C $(@D)/mkfs.axfs-legacy +endef + +define HOST_AXFSUTILS_INSTALL_CMDS + $(INSTALL) -D -m 0755 $(@D)/mkfs.axfs-legacy/mkfs.axfs \ + $(HOST_DIR)/bin/mkfs.axfs +endef + +$(eval $(host-generic-package)) diff --git a/package/azmq/0001-Conditionally-disable-test-and-doc-builds.patch b/package/azmq/0001-Conditionally-disable-test-and-doc-builds.patch new file mode 100644 index 00000000..98975d27 --- /dev/null +++ b/package/azmq/0001-Conditionally-disable-test-and-doc-builds.patch @@ -0,0 +1,43 @@ +From d960f93fb52e373f76cfedbee5f4fb0c5276856a Mon Sep 17 00:00:00 2001 +From: RJ Ascani +Date: Thu, 20 Jul 2017 15:53:40 -0700 +Subject: [PATCH] Conditionally disable test and doc builds + +Signed-off-by: RJ Ascani +--- + CMakeLists.txt | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 5b5b9cc..97006a4 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -49,7 +49,9 @@ include_directories(${Boost_INCLUDE_DIRS} + ${ZeroMQ_INCLUDE_DIRS} + ${PROJECT_SOURCE_DIR}) + +-enable_testing() ++if (BUILD_TESTING) ++ enable_testing() ++endif() + + macro(add_catch_test name) + if (TEST_REPORT_FORMAT) +@@ -59,8 +61,12 @@ macro(add_catch_test name) + endif() + endmacro() + +-add_subdirectory(test) +-add_subdirectory(doc) ++if (BUILD_TESTING) ++ add_subdirectory(test) ++endif() ++if (BUILD_DOC) ++ add_subdirectory(doc) ++endif() + + install(DIRECTORY ${PROJECT_SOURCE_DIR}/azmq + DESTINATION include) +-- +2.13.3 + diff --git a/package/azmq/Config.in b/package/azmq/Config.in new file mode 100644 index 00000000..6751d533 --- /dev/null +++ b/package/azmq/Config.in @@ -0,0 +1,33 @@ +config BR2_PACKAGE_AZMQ + bool "azmq" + depends on !BR2_RISCV_32 # boost-log + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_ATOMIC + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # boost-log + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11 + depends on BR2_USE_WCHAR # boost + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS # boost-thread + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # exception_ptr + select BR2_PACKAGE_ZEROMQ + select BR2_PACKAGE_BOOST + select BR2_PACKAGE_BOOST_CHRONO + select BR2_PACKAGE_BOOST_DATE_TIME + select BR2_PACKAGE_BOOST_LOG + select BR2_PACKAGE_BOOST_RANDOM + select BR2_PACKAGE_BOOST_REGEX + select BR2_PACKAGE_BOOST_SYSTEM + select BR2_PACKAGE_BOOST_THREAD + help + This library provides Boost Asio style bindings for ZeroMQ. + + https://github.com/zeromq/azmq + +comment "azmq needs a toolchain w/ C++11, wchar and NPTL" + depends on !BR2_RISCV_32 + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS + depends on !(BR2_INSTALL_LIBSTDCPP && BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 \ + && BR2_USE_WCHAR && BR2_TOOLCHAIN_HAS_THREADS_NPTL) + +comment "azmq needs exception_ptr" + depends on !BR2_RISCV_32 + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 diff --git a/package/azmq/azmq.hash b/package/azmq/azmq.hash new file mode 100644 index 00000000..f5d24e79 --- /dev/null +++ b/package/azmq/azmq.hash @@ -0,0 +1,4 @@ +# Locally calculated +# https://github.com/zeromq/azmq/archive/v1.0.2.tar.gz +sha256 25fa8b07756cffae95e25a55c7ea42efe02e8cd797552201aa771dd69cfc8fbf azmq-1.0.2.tar.gz +sha256 c9bff75738922193e67fa726fa225535870d2aa1059f91452c411736284ad566 LICENSE-BOOST_1_0 diff --git a/package/azmq/azmq.mk b/package/azmq/azmq.mk new file mode 100644 index 00000000..918c6e1a --- /dev/null +++ b/package/azmq/azmq.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# azmq +# +################################################################################ + +AZMQ_VERSION = 1.0.2 +AZMQ_SITE = $(call github,zeromq,azmq,v$(AZMQ_VERSION)) +AZMQ_DEPENDENCIES = boost zeromq +AZMQ_LICENSE = BSL-1.0 +AZMQ_LICENSE_FILES = LICENSE-BOOST_1_0 + +# AZMQ is a header only library, so it does not need to be installed on the +# target. +AZMQ_INSTALL_STAGING = YES +AZMQ_INSTALL_TARGET = NO + +$(eval $(cmake-package)) diff --git a/package/azure-iot-sdk-c/0001-Fix-redirection-of-errno-header.patch b/package/azure-iot-sdk-c/0001-Fix-redirection-of-errno-header.patch new file mode 100644 index 00000000..efc3d332 --- /dev/null +++ b/package/azure-iot-sdk-c/0001-Fix-redirection-of-errno-header.patch @@ -0,0 +1,32 @@ +From 9ff62052a9490c96366d97096a039dca30702b2d Mon Sep 17 00:00:00 2001 +From: Sergio Prado +Date: Fri, 3 Jul 2020 21:09:20 -0300 +Subject: [PATCH] Fix redirection of errno header + +The POSIX correct header to include is . + +The glibc silently redirects incorrect includes, but musl libc prints +a warning: + #warning redirecting incorrect #include to + +Signed-off-by: Sergio Prado +--- + c-utility/pal/linux/socket_async_os.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/c-utility/pal/linux/socket_async_os.h b/c-utility/pal/linux/socket_async_os.h +index bd59e487c099..1797089851e3 100644 +--- a/c-utility/pal/linux/socket_async_os.h ++++ b/c-utility/pal/linux/socket_async_os.h +@@ -10,7 +10,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +-- +2.17.1 + diff --git a/package/azure-iot-sdk-c/Config.in b/package/azure-iot-sdk-c/Config.in new file mode 100644 index 00000000..86074652 --- /dev/null +++ b/package/azure-iot-sdk-c/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_AZURE_IOT_SDK_C + bool "azure-iot-sdk-c" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_USE_WCHAR + select BR2_PACKAGE_LIBCURL + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + help + Microsoft Azure IoT Hub device SDK for C is used + to connect devices running C code to Azure IoT Hub. + + https://github.com/Azure/azure-iot-sdk-c + +comment "azure-iot-sdk-c needs a toolchain w/ C++, NPTL and wchar" + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_HAS_THREADS_NPTL || !BR2_USE_WCHAR diff --git a/package/azure-iot-sdk-c/azure-iot-sdk-c.hash b/package/azure-iot-sdk-c/azure-iot-sdk-c.hash new file mode 100644 index 00000000..124c7a11 --- /dev/null +++ b/package/azure-iot-sdk-c/azure-iot-sdk-c.hash @@ -0,0 +1,5 @@ +# Locally computed: +sha256 61874790b66c7e120550fdffff88cb1e3cbfbfebcf324e41982f04461f8793a0 azure-iot-sdk-c-LTS_07_2020_Ref02-br1.tar.gz + +# Hash for license files: +sha256 be2e9913fad9ff33607287c728f392579e2a6cc83e51b203ef6274c41db02ee7 LICENSE diff --git a/package/azure-iot-sdk-c/azure-iot-sdk-c.mk b/package/azure-iot-sdk-c/azure-iot-sdk-c.mk new file mode 100644 index 00000000..c664ad83 --- /dev/null +++ b/package/azure-iot-sdk-c/azure-iot-sdk-c.mk @@ -0,0 +1,75 @@ +################################################################################ +# +# azure-iot-sdk-c +# +################################################################################ + +AZURE_IOT_SDK_C_VERSION = LTS_07_2020_Ref02 +AZURE_IOT_SDK_C_SITE = https://github.com/Azure/azure-iot-sdk-c +AZURE_IOT_SDK_C_SITE_METHOD = git +AZURE_IOT_SDK_C_GIT_SUBMODULES = YES +AZURE_IOT_SDK_C_LICENSE = MIT +AZURE_IOT_SDK_C_LICENSE_FILES = LICENSE +AZURE_IOT_SDK_C_INSTALL_STAGING = YES +AZURE_IOT_SDK_C_DEPENDENCIES = libxml2 openssl libcurl util-linux +AZURE_IOT_SDK_C_CONF_OPTS = -Dskip_samples=ON + +# The project only supports building one kind of library. +# Further the install target installs the wrong files, so we do it here: +ifeq ($(BR2_STATIC_LIBS),y) +AZURE_IOT_SDK_C_LIBS += \ + uamqp/libuamqp.a \ + c-utility/libaziotsharedutil.a \ + iothub_client/libiothub_client.a \ + iothub_client/libiothub_client_mqtt_ws_transport.a \ + iothub_client/libiothub_client_amqp_ws_transport.a \ + iothub_client/libiothub_client_http_transport.a \ + iothub_client/libiothub_client_amqp_transport.a \ + iothub_client/libiothub_client_mqtt_transport.a \ + iothub_service_client/libiothub_service_client.a \ + serializer/libserializer.a \ + umqtt/libumqtt.a \ + deps/uhttp/libuhttp.a \ + deps/umock-c/libumock_c.a \ + libparson.a +else +AZURE_IOT_SDK_C_LIBS += \ + uamqp/libuamqp.so \ + c-utility/libaziotsharedutil.so \ + iothub_client/libiothub_client.so \ + iothub_client/libiothub_client_mqtt_ws_transport.so \ + iothub_client/libiothub_client_amqp_ws_transport.so \ + iothub_client/libiothub_client_http_transport.so \ + iothub_client/libiothub_client_amqp_transport.so \ + iothub_client/libiothub_client_mqtt_transport.so \ + iothub_service_client/libiothub_service_client.so \ + serializer/libserializer.so \ + umqtt/libumqtt.so.1.1.12 \ + deps/uhttp/libuhttp.so \ + deps/umock-c/libumock_c.so \ + libparson.so + +define AZURE_IOT_SDK_C_CREATE_SYMLINKS + ln -sf libumqtt.so.1.1.12 $(1)/usr/lib/libumqtt.so.1 + ln -sf libumqtt.so.1.1.12 $(1)/usr/lib/libumqtt.so +endef +endif + +define AZURE_IOT_SDK_C_INSTALL_LIBS + $(foreach l,$(AZURE_IOT_SDK_C_LIBS), \ + $(INSTALL) -D -m 0755 $(@D)/$(l) $(1)/usr/lib/$(notdir $(l)) + ) + $(call AZURE_IOT_SDK_C_CREATE_SYMLINKS,$(1)) +endef + +define AZURE_IOT_SDK_C_INSTALL_STAGING_CMDS + $(call AZURE_IOT_SDK_C_INSTALL_LIBS,$(STAGING_DIR)) + cp -a $(@D)/c-utility/inc/* $(STAGING_DIR)/usr/include/ + cp -a $(@D)/iothub_client/inc/* $(STAGING_DIR)/usr/include/ +endef + +define AZURE_IOT_SDK_C_INSTALL_TARGET_CMDS + $(call AZURE_IOT_SDK_C_INSTALL_LIBS,$(TARGET_DIR)) +endef + +$(eval $(cmake-package)) diff --git a/package/b43-firmware/Config.in b/package/b43-firmware/Config.in new file mode 100644 index 00000000..7cef0239 --- /dev/null +++ b/package/b43-firmware/Config.in @@ -0,0 +1,25 @@ +config BR2_PACKAGE_B43_FIRMWARE + bool "b43-firmware" + help + Firmware for the Broadcom Wifi devices supported by the b43 + kernel driver. + +if BR2_PACKAGE_B43_FIRMWARE + +choice + prompt "Kernel version" + default BR2_PACKAGE_B43_FIRMWARE_KERNEL_AFTER_3_2 + help + Select the kernel version you're using. The b43 driver in + kernel >= 3.2 need a different firmware than the b43 drivers + from kernel < 3.2. + +config BR2_PACKAGE_B43_FIRMWARE_KERNEL_AFTER_3_2 + bool ">= 3.2" + +config BR2_PACKAGE_B43_FIRMWARE_KERNEL_BEFORE_3_2 + bool "< 3.2" + +endchoice + +endif diff --git a/package/b43-firmware/b43-firmware.hash b/package/b43-firmware/b43-firmware.hash new file mode 100644 index 00000000..efc1a6cf --- /dev/null +++ b/package/b43-firmware/b43-firmware.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 f1e7067aac5b62b67b8b6e4c517990277804339ac16065eb13c731ff909ae46f broadcom-wl-5.100.138.tar.bz2 +sha256 26a8c370f48fc129d0731cfd751c36cae1419b0bc8ca35781126744e60eae009 broadcom-wl-5.10.56.27.3_mipsel.tar.bz2 diff --git a/package/b43-firmware/b43-firmware.mk b/package/b43-firmware/b43-firmware.mk new file mode 100644 index 00000000..8e9e8776 --- /dev/null +++ b/package/b43-firmware/b43-firmware.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# b43-firmware +# +################################################################################ + +ifeq ($(BR2_PACKAGE_B43_FIRMWARE_KERNEL_AFTER_3_2),y) +B43_FIRMWARE_VERSION = 5.100.138 +B43_FIRMWARE_SITE = http://www.lwfinger.com/b43-firmware +B43_FIRMWARE_SOURCE = broadcom-wl-$(B43_FIRMWARE_VERSION).tar.bz2 +B43_FIRMWARE_DRIVER_FILE = linux/wl_apsta.o +else ifeq ($(BR2_PACKAGE_B43_FIRMWARE_KERNEL_BEFORE_3_2),y) +B43_FIRMWARE_VERSION = 5.10.56.27.3 +B43_FIRMWARE_SITE = http://mirror2.openwrt.org/sources +B43_FIRMWARE_SOURCE = broadcom-wl-$(B43_FIRMWARE_VERSION)_mipsel.tar.bz2 +B43_FIRMWARE_DRIVER_FILE = driver/wl_apsta/wl_prebuilt.o +endif + +B43_FIRMWARE_LICENSE = PROPRIETARY +B43_FIRMWARE_REDISTRIBUTE = NO + +B43_FIRMWARE_DEPENDENCIES = host-b43-fwcutter + +define B43_FIRMWARE_INSTALL_TARGET_CMDS + $(INSTALL) -d -m 0755 $(TARGET_DIR)/lib/firmware/ + $(HOST_DIR)/bin/b43-fwcutter -w $(TARGET_DIR)/lib/firmware/ $(@D)/$(B43_FIRMWARE_DRIVER_FILE) +endef + +$(eval $(generic-package)) diff --git a/package/b43-fwcutter/b43-fwcutter.hash b/package/b43-fwcutter/b43-fwcutter.hash new file mode 100644 index 00000000..e83a4971 --- /dev/null +++ b/package/b43-fwcutter/b43-fwcutter.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +sha256 d6ea85310df6ae08e7f7e46d8b975e17fc867145ee249307413cfbe15d7121ce b43-fwcutter-019.tar.bz2 + +# Hash for license file +sha256 6af9fc424d57f29b7e59b35e52d4a91aca80304506275f2c0c076317fc6eb583 COPYING diff --git a/package/b43-fwcutter/b43-fwcutter.mk b/package/b43-fwcutter/b43-fwcutter.mk new file mode 100644 index 00000000..9c1e1110 --- /dev/null +++ b/package/b43-fwcutter/b43-fwcutter.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# b43-fwcutter +# +################################################################################ + +B43_FWCUTTER_VERSION = 019 +B43_FWCUTTER_SITE = http://bues.ch/b43/fwcutter +B43_FWCUTTER_SOURCE = b43-fwcutter-$(B43_FWCUTTER_VERSION).tar.bz2 +B43_FWCUTTER_LICENSE = BSD-2-Clause +B43_FWCUTTER_LICENSE_FILES = COPYING + +define HOST_B43_FWCUTTER_BUILD_CMDS + $(HOST_CONFIGURE_OPTS) $(MAKE) -C $(@D) +endef + +define HOST_B43_FWCUTTER_INSTALL_CMDS + $(INSTALL) -D -m 0755 $(@D)/b43-fwcutter $(HOST_DIR)/bin/b43-fwcutter +endef + +$(eval $(host-generic-package)) diff --git a/package/babeld/Config.in b/package/babeld/Config.in new file mode 100644 index 00000000..c7010e1f --- /dev/null +++ b/package/babeld/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_BABELD + bool "babeld" + depends on BR2_USE_MMU # fork() + help + Babel is a loop-avoiding distance-vector routing protocol for + IPv6 and IPv4 with fast convergence properties. + + http://www.pps.univ-paris-diderot.fr/~jch/software/babel/ diff --git a/package/babeld/S50babeld b/package/babeld/S50babeld new file mode 100644 index 00000000..c75b4c37 --- /dev/null +++ b/package/babeld/S50babeld @@ -0,0 +1,40 @@ +#!/bin/sh +# +# Starts babeld. +# + +# Allow a few customizations from a config file +test -r /etc/default/babeld && . /etc/default/babeld + +start() { + printf "Starting babeld: " + start-stop-daemon -S -q -p /run/babeld.pid \ + --exec /usr/sbin/babeld -- $DAEMON_ARGS + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +stop() { + printf "Stopping babeld: " + start-stop-daemon -K -q -p /run/babeld.pid + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/babeld/babeld.hash b/package/babeld/babeld.hash new file mode 100644 index 00000000..2e0513ef --- /dev/null +++ b/package/babeld/babeld.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 154f00e0a8bf35d6ea9028886c3dc5c3c342dd1a367df55ef29a547b75867f07 babeld-1.9.2.tar.gz +sha256 b415c41292cedef6c97b243609e50552887c29343566c639f23282d31efd2afd LICENCE diff --git a/package/babeld/babeld.mk b/package/babeld/babeld.mk new file mode 100644 index 00000000..785fa2bc --- /dev/null +++ b/package/babeld/babeld.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# babeld +# +################################################################################ + +BABELD_VERSION = 1.9.2 +BABELD_SITE = http://www.pps.univ-paris-diderot.fr/~jch/software/files +BABELD_LICENSE = MIT +BABELD_LICENSE_FILES = LICENCE + +define BABELD_BUILD_CMDS + $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) +endef + +define BABELD_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 755 $(@D)/babeld $(TARGET_DIR)/usr/sbin/babeld +endef + +define BABELD_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 package/babeld/S50babeld \ + $(TARGET_DIR)/etc/init.d/S50babeld +endef + +define BABELD_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/babeld/babeld.service \ + $(TARGET_DIR)/usr/lib/systemd/system/babeld.service +endef + +$(eval $(generic-package)) diff --git a/package/babeld/babeld.service b/package/babeld/babeld.service new file mode 100644 index 00000000..abe72a8c --- /dev/null +++ b/package/babeld/babeld.service @@ -0,0 +1,10 @@ +[Unit] +Description=Babel daemon + +[Service] +EnvironmentFile=-/etc/default/babeld +ExecStart=/usr/sbin/babeld $DAEMON_ARGS +ExecReload=/bin/kill -HUP $MAINPID + +[Install] +WantedBy=multi-user.target diff --git a/package/babeltrace2/0001-configure-simplify-warning-flags-detection.patch b/package/babeltrace2/0001-configure-simplify-warning-flags-detection.patch new file mode 100644 index 00000000..ec7ea83f --- /dev/null +++ b/package/babeltrace2/0001-configure-simplify-warning-flags-detection.patch @@ -0,0 +1,669 @@ +From 28ba44ad9ca14153e96c94a9100423ea224c1af3 Mon Sep 17 00:00:00 2001 +From: Simon Marchi +Date: Tue, 18 Feb 2020 13:14:22 -0500 +Subject: [PATCH] configure: simplify warning flags detection + +We currently use the AX_COMPILER_FLAGS macro to detect the warning flags +that the current compiler supports. It works, but is quite invasive. +It unconditionally enables a bunch of warnings we don't want, which +forces us to disable them with many -Wno-foo switches. + +Instead of using AX_COMPILER_FLAGS, we can use the slightly lower lever +macro AX_APPEND_COMPILE_FLAGS to achieve our goal of detecting which +warning flags are supported. This is what we ended up using in +lttng-tools (a completely unrelated project, but that has a suspiciously +high ratio of contributors in common with Babeltrace). + +I looked in our git history to see which warning flags were mentioned in +commit messages. I have added the flags that did find actual problems +and are not enabled by default to the AX_APPEND_COMPILE_FLAGS invocation. +I have also added the flags that AX_COMPILER_FLAGS did provide, which we +didn't need to disable. + +The --{enable,disable}-Werror flag is added using an explicit +AC_ARG_ENABLE. In lttng-tools, it was decided to _not_ have -Werror by +default, so I suggest we do the same in Babeltrace, for consistency +(although it saddens me very much). Developers who want to build with +-Werror will need to pass --enable-Werror. + +Note that with this patch, we lose the following configure switch, that +is provided by AX_COMPILER_FLAGS: + + --enable-compile-warnings=[no/yes/error] + +Change-Id: If968f7385a7f5c48d27f402c76bc26241a8f505a +Signed-off-by: Simon Marchi +Reviewed-on: https://review.lttng.org/c/babeltrace/+/3209 +Tested-by: jenkins +Reviewed-by: Michael Jeanson + +[Retrieved from: +https://github.com/efficios/babeltrace/commit/28ba44ad9ca14153e96c94a9100423ea224c1af3] +Signed-off-by: Fabrice Fontaine +--- + configure.ac | 74 +++++++++------ + m4/ax_compiler_flags.m4 | 158 ------------------------------- + m4/ax_compiler_flags_cflags.m4 | 161 -------------------------------- + m4/ax_compiler_flags_gir.m4 | 60 ------------ + m4/ax_compiler_flags_ldflags.m4 | 111 ---------------------- + 5 files changed, 46 insertions(+), 518 deletions(-) + delete mode 100644 m4/ax_compiler_flags.m4 + delete mode 100644 m4/ax_compiler_flags_cflags.m4 + delete mode 100644 m4/ax_compiler_flags_gir.m4 + delete mode 100644 m4/ax_compiler_flags_ldflags.m4 + +diff --git a/configure.ac b/configure.ac +index 055fba101..7ebcf2ad4 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -660,25 +660,35 @@ target. + CFLAGS=${save_CFLAGS} + + # Detect C and LD warning flags supported by the compiler. +-AX_COMPILER_FLAGS( +- [WARN_CFLAGS], dnl CFLAGS variable name +- [WARN_LDFLAGS], dnl LDFLAGS variable name (unused for now) +- [], dnl is-release +- [], dnl Extra base CFLAGS +- [ dnl Extra "yes" CFLAGS +- dnl Disable these flags, either because we don't want them +- dnl or because we want them but are not ready to enable them +- dnl yet. +- -Wno-sign-compare dnl +- -Wno-inline dnl +- -Wno-declaration-after-statement dnl +- -Wno-switch-enum dnl +- -Wno-switch-default dnl +- -Wno-packed dnl +- -Wno-pointer-arith dnl ++ ++# Detect warning flags supported by the compiler, append them to WARN_CFLAGS. ++# ++# Pass -Werror as an extra flag during the test: this is needed to make the ++# -Wunknown-warning-option diagnostic fatal with clang. ++AX_APPEND_COMPILE_FLAGS([ dnl ++ -Wall dnl ++ -Wextra dnl ++ -Wstrict-prototypes dnl ++ -Wmissing-prototypes dnl ++ -Wmissing-declarations dnl ++ -Wnull-dereference dnl ++ -Wundef dnl ++ -Wredundant-decls dnl ++ -Wshadow dnl ++ -Wjump-misses-init dnl ++ -Wtautological-constant-out-of-range-compare dnl ++ -Wnested-externs dnl ++ -Wwrite-strings dnl ++ -Wformat=2 dnl + -Wno-format-nonliteral dnl +- -Wno-double-promotion dnl +- -Wno-cast-align dnl ++ -Wstrict-aliasing dnl ++ -Wmissing-noreturn dnl ++ -Winit-self dnl ++ -Wduplicated-cond dnl ++ -Wduplicated-branches dnl ++ -Wlogical-op dnl ++ -Wno-unused-parameter dnl ++ -Wno-sign-compare dnl + dnl + dnl Some versions of SWIG (like 3.0.12) generate code that produces + dnl -Wcast-function-type warnings. This warning is present in gcc >= 8. This +@@ -692,24 +702,32 @@ AX_COMPILER_FLAGS( + dnl + dnl Ref: https://github.com/swig/swig/issues/1259 + -Wno-cast-function-type dnl +- ]) +- +-# CFLAGS from AX_COMPILER_FLAGS. +-AM_CFLAGS="${AM_CFLAGS} ${WARN_CFLAGS}" ++ -Wno-missing-field-initializers dnl ++ ], ++ [WARN_CFLAGS], ++ [-Werror]) ++ ++# When given, add -Werror to WARN_CFLAGS. ++AC_ARG_ENABLE([Werror], ++ [AS_HELP_STRING([--enable-Werror], [Treat compiler warnings as errors.])] ++) ++AS_IF([test "x$enable_Werror" = "xyes"], ++ [WARN_CFLAGS="${WARN_CFLAGS} -Werror"] ++) + +-# The test used in AX_COMPILER_FLAGS, generated using AC_LANG_PROGRAM, is ++# The test used in AX_APPEND_COMPILE_FLAGS, generated using AC_LANG_PROGRAM, is + # written in such a way that it triggers a -Wold-style-definition warning. So +-# if the user has -Werror in their CFLAGS, that warning flag will end up +-# disabled, because the test program will not build. ++# this warning always ends up disabled if we put it there, because the test ++# program does not build. + # + # Enable it here unconditionally. It is supported by GCC >= 4.8 and by Clang + # (it is accepted for compatibility although it has no effect), and there is + # not reason to not want it. + +-AM_CFLAGS="${AM_CFLAGS} -Wold-style-definition" ++WARN_CFLAGS="${WARN_CFLAGS} -Wold-style-definition" + +-# We want this one to always be an error. +-AM_CFLAGS="${AM_CFLAGS} -Werror=implicit-function-declaration" ++# CFLAGS from AX_APPEND_COMPILE_FLAGS. ++AM_CFLAGS="${AM_CFLAGS} ${WARN_CFLAGS}" + + # Done for AM_CFLAGS. + AC_SUBST(AM_CFLAGS) +diff --git a/m4/ax_compiler_flags.m4 b/m4/ax_compiler_flags.m4 +deleted file mode 100644 +index ddb0456c4..000000000 +--- a/m4/ax_compiler_flags.m4 ++++ /dev/null +@@ -1,158 +0,0 @@ +-# =========================================================================== +-# https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html +-# =========================================================================== +-# +-# SYNOPSIS +-# +-# AX_COMPILER_FLAGS([CFLAGS-VARIABLE], [LDFLAGS-VARIABLE], [IS-RELEASE], [EXTRA-BASE-CFLAGS], [EXTRA-YES-CFLAGS], [UNUSED], [UNUSED], [UNUSED], [EXTRA-BASE-LDFLAGS], [EXTRA-YES-LDFLAGS], [UNUSED], [UNUSED], [UNUSED]) +-# +-# DESCRIPTION +-# +-# Check for the presence of an --enable-compile-warnings option to +-# configure, defaulting to "error" in normal operation, or "yes" if +-# IS-RELEASE is equal to "yes". Return the value in the variable +-# $ax_enable_compile_warnings. +-# +-# Depending on the value of --enable-compile-warnings, different compiler +-# warnings are checked to see if they work with the current compiler and, +-# if so, are appended to CFLAGS-VARIABLE and LDFLAGS-VARIABLE. This +-# allows a consistent set of baseline compiler warnings to be used across +-# a code base, irrespective of any warnings enabled locally by individual +-# developers. By standardising the warnings used by all developers of a +-# project, the project can commit to a zero-warnings policy, using -Werror +-# to prevent compilation if new warnings are introduced. This makes +-# catching bugs which are flagged by warnings a lot easier. +-# +-# By providing a consistent --enable-compile-warnings argument across all +-# projects using this macro, continuous integration systems can easily be +-# configured the same for all projects. Automated systems or build +-# systems aimed at beginners may want to pass the --disable-Werror +-# argument to unconditionally prevent warnings being fatal. +-# +-# --enable-compile-warnings can take the values: +-# +-# * no: Base compiler warnings only; not even -Wall. +-# * yes: The above, plus a broad range of useful warnings. +-# * error: The above, plus -Werror so that all warnings are fatal. +-# Use --disable-Werror to override this and disable fatal +-# warnings. +-# +-# The set of base and enabled flags can be augmented using the +-# EXTRA-*-CFLAGS and EXTRA-*-LDFLAGS variables, which are tested and +-# appended to the output variable if --enable-compile-warnings is not +-# "no". Flags should not be disabled using these arguments, as the entire +-# point of AX_COMPILER_FLAGS is to enforce a consistent set of useful +-# compiler warnings on code, using warnings which have been chosen for low +-# false positive rates. If a compiler emits false positives for a +-# warning, a #pragma should be used in the code to disable the warning +-# locally. See: +-# +-# https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas +-# +-# The EXTRA-* variables should only be used to supply extra warning flags, +-# and not general purpose compiler flags, as they are controlled by +-# configure options such as --disable-Werror. +-# +-# IS-RELEASE can be used to disable -Werror when making a release, which +-# is useful for those hairy moments when you just want to get the release +-# done as quickly as possible. Set it to "yes" to disable -Werror. By +-# default, it uses the value of $ax_is_release, so if you are using the +-# AX_IS_RELEASE macro, there is no need to pass this parameter. For +-# example: +-# +-# AX_IS_RELEASE([git-directory]) +-# AX_COMPILER_FLAGS() +-# +-# CFLAGS-VARIABLE defaults to WARN_CFLAGS, and LDFLAGS-VARIABLE defaults +-# to WARN_LDFLAGS. Both variables are AC_SUBST-ed by this macro, but must +-# be manually added to the CFLAGS and LDFLAGS variables for each target in +-# the code base. +-# +-# If C++ language support is enabled with AC_PROG_CXX, which must occur +-# before this macro in configure.ac, warning flags for the C++ compiler +-# are AC_SUBST-ed as WARN_CXXFLAGS, and must be manually added to the +-# CXXFLAGS variables for each target in the code base. EXTRA-*-CFLAGS can +-# be used to augment the base and enabled flags. +-# +-# Warning flags for g-ir-scanner (from GObject Introspection) are +-# AC_SUBST-ed as WARN_SCANNERFLAGS. This variable must be manually added +-# to the SCANNERFLAGS variable for each GIR target in the code base. If +-# extra g-ir-scanner flags need to be enabled, the AX_COMPILER_FLAGS_GIR +-# macro must be invoked manually. +-# +-# AX_COMPILER_FLAGS may add support for other tools in future, in addition +-# to the compiler and linker. No extra EXTRA-* variables will be added +-# for those tools, and all extra support will still use the single +-# --enable-compile-warnings configure option. For finer grained control +-# over the flags for individual tools, use AX_COMPILER_FLAGS_CFLAGS, +-# AX_COMPILER_FLAGS_LDFLAGS and AX_COMPILER_FLAGS_* for new tools. +-# +-# The UNUSED variables date from a previous version of this macro, and are +-# automatically appended to the preceding non-UNUSED variable. They should +-# be left empty in new uses of the macro. +-# +-# LICENSE +-# +-# Copyright (c) 2014, 2015 Philip Withnall +-# Copyright (c) 2015 David King +-# +-# Copying and distribution of this file, with or without modification, are +-# permitted in any medium without royalty provided the copyright notice +-# and this notice are preserved. This file is offered as-is, without any +-# warranty. +- +-#serial 14 +- +-# _AX_COMPILER_FLAGS_LANG([LANGNAME]) +-m4_defun([_AX_COMPILER_FLAGS_LANG], +-[m4_ifdef([_AX_COMPILER_FLAGS_LANG_]$1[_enabled], [], +- [m4_define([_AX_COMPILER_FLAGS_LANG_]$1[_enabled], [])dnl +- AX_REQUIRE_DEFINED([AX_COMPILER_FLAGS_]$1[FLAGS])])dnl +-]) +- +-AC_DEFUN([AX_COMPILER_FLAGS],[ +- # C support is enabled by default. +- _AX_COMPILER_FLAGS_LANG([C]) +- # Only enable C++ support if AC_PROG_CXX is called. The redefinition of +- # AC_PROG_CXX is so that a fatal error is emitted if this macro is called +- # before AC_PROG_CXX, which would otherwise cause no C++ warnings to be +- # checked. +- AC_PROVIDE_IFELSE([AC_PROG_CXX], +- [_AX_COMPILER_FLAGS_LANG([CXX])], +- [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AX_COMPILER_FLAGS_LANG([CXX])])]) +- AX_REQUIRE_DEFINED([AX_COMPILER_FLAGS_LDFLAGS]) +- +- # Default value for IS-RELEASE is $ax_is_release +- ax_compiler_flags_is_release=m4_tolower(m4_normalize(ifelse([$3],, +- [$ax_is_release], +- [$3]))) +- +- AC_ARG_ENABLE([compile-warnings], +- AS_HELP_STRING([--enable-compile-warnings=@<:@no/yes/error@:>@], +- [Enable compiler warnings and errors]),, +- [AS_IF([test "$ax_compiler_flags_is_release" = "yes"], +- [enable_compile_warnings="yes"], +- [enable_compile_warnings="error"])]) +- AC_ARG_ENABLE([Werror], +- AS_HELP_STRING([--disable-Werror], +- [Unconditionally make all compiler warnings non-fatal]),, +- [enable_Werror=maybe]) +- +- # Return the user's chosen warning level +- AS_IF([test "$enable_Werror" = "no" -a \ +- "$enable_compile_warnings" = "error"],[ +- enable_compile_warnings="yes" +- ]) +- +- ax_enable_compile_warnings=$enable_compile_warnings +- +- AX_COMPILER_FLAGS_CFLAGS([$1],[$ax_compiler_flags_is_release], +- [$4],[$5 $6 $7 $8]) +- m4_ifdef([_AX_COMPILER_FLAGS_LANG_CXX_enabled], +- [AX_COMPILER_FLAGS_CXXFLAGS([WARN_CXXFLAGS], +- [$ax_compiler_flags_is_release], +- [$4],[$5 $6 $7 $8])]) +- AX_COMPILER_FLAGS_LDFLAGS([$2],[$ax_compiler_flags_is_release], +- [$9],[$10 $11 $12 $13]) +- AX_COMPILER_FLAGS_GIR([WARN_SCANNERFLAGS],[$ax_compiler_flags_is_release]) +-])dnl AX_COMPILER_FLAGS +diff --git a/m4/ax_compiler_flags_cflags.m4 b/m4/ax_compiler_flags_cflags.m4 +deleted file mode 100644 +index 916f91837..000000000 +--- a/m4/ax_compiler_flags_cflags.m4 ++++ /dev/null +@@ -1,161 +0,0 @@ +-# ============================================================================= +-# https://www.gnu.org/software/autoconf-archive/ax_compiler_flags_cflags.html +-# ============================================================================= +-# +-# SYNOPSIS +-# +-# AX_COMPILER_FLAGS_CFLAGS([VARIABLE], [IS-RELEASE], [EXTRA-BASE-FLAGS], [EXTRA-YES-FLAGS]) +-# +-# DESCRIPTION +-# +-# Add warning flags for the C compiler to VARIABLE, which defaults to +-# WARN_CFLAGS. VARIABLE is AC_SUBST-ed by this macro, but must be +-# manually added to the CFLAGS variable for each target in the code base. +-# +-# This macro depends on the environment set up by AX_COMPILER_FLAGS. +-# Specifically, it uses the value of $ax_enable_compile_warnings to decide +-# which flags to enable. +-# +-# LICENSE +-# +-# Copyright (c) 2014, 2015 Philip Withnall +-# Copyright (c) 2017, 2018 Reini Urban +-# +-# Copying and distribution of this file, with or without modification, are +-# permitted in any medium without royalty provided the copyright notice +-# and this notice are preserved. This file is offered as-is, without any +-# warranty. +- +-#serial 17 +- +-AC_DEFUN([AX_COMPILER_FLAGS_CFLAGS],[ +- AC_REQUIRE([AC_PROG_SED]) +- AX_REQUIRE_DEFINED([AX_APPEND_COMPILE_FLAGS]) +- AX_REQUIRE_DEFINED([AX_APPEND_FLAG]) +- AX_REQUIRE_DEFINED([AX_CHECK_COMPILE_FLAG]) +- +- # Variable names +- m4_define([ax_warn_cflags_variable], +- [m4_normalize(ifelse([$1],,[WARN_CFLAGS],[$1]))]) +- +- AC_LANG_PUSH([C]) +- +- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ +- [#ifndef __cplusplus +- #error "no C++" +- #endif]])], +- [ax_compiler_cxx=yes;], +- [ax_compiler_cxx=no;]) +- +- # Always pass -Werror=unknown-warning-option to get Clang to fail on bad +- # flags, otherwise they are always appended to the warn_cflags variable, and +- # Clang warns on them for every compilation unit. +- # If this is passed to GCC, it will explode, so the flag must be enabled +- # conditionally. +- AX_CHECK_COMPILE_FLAG([-Werror=unknown-warning-option],[ +- ax_compiler_flags_test="-Werror=unknown-warning-option" +- ],[ +- ax_compiler_flags_test="" +- ]) +- +- # Check that -Wno-suggest-attribute=format is supported +- AX_CHECK_COMPILE_FLAG([-Wno-suggest-attribute=format],[ +- ax_compiler_no_suggest_attribute_flags="-Wno-suggest-attribute=format" +- ],[ +- ax_compiler_no_suggest_attribute_flags="" +- ]) +- +- # Base flags +- AX_APPEND_COMPILE_FLAGS([ dnl +- -fno-strict-aliasing dnl +- $3 dnl +- ],ax_warn_cflags_variable,[$ax_compiler_flags_test]) +- +- AS_IF([test "$ax_enable_compile_warnings" != "no"],[ +- if test "$ax_compiler_cxx" = "no" ; then +- # C-only flags. Warn in C++ +- AX_APPEND_COMPILE_FLAGS([ dnl +- -Wnested-externs dnl +- -Wmissing-prototypes dnl +- -Wstrict-prototypes dnl +- -Wdeclaration-after-statement dnl +- -Wimplicit-function-declaration dnl +- -Wold-style-definition dnl +- -Wjump-misses-init dnl +- ],ax_warn_cflags_variable,[$ax_compiler_flags_test]) +- fi +- +- # "yes" flags +- AX_APPEND_COMPILE_FLAGS([ dnl +- -Wall dnl +- -Wextra dnl +- -Wundef dnl +- -Wwrite-strings dnl +- -Wpointer-arith dnl +- -Wmissing-declarations dnl +- -Wredundant-decls dnl +- -Wno-unused-parameter dnl +- -Wno-missing-field-initializers dnl +- -Wformat=2 dnl +- -Wcast-align dnl +- -Wformat-nonliteral dnl +- -Wformat-security dnl +- -Wsign-compare dnl +- -Wstrict-aliasing dnl +- -Wshadow dnl +- -Winline dnl +- -Wpacked dnl +- -Wmissing-format-attribute dnl +- -Wmissing-noreturn dnl +- -Winit-self dnl +- -Wredundant-decls dnl +- -Wmissing-include-dirs dnl +- -Wunused-but-set-variable dnl +- -Warray-bounds dnl +- -Wreturn-type dnl +- -Wswitch-enum dnl +- -Wswitch-default dnl +- -Wduplicated-cond dnl +- -Wduplicated-branches dnl +- -Wlogical-op dnl +- -Wrestrict dnl +- -Wnull-dereference dnl +- -Wdouble-promotion dnl +- $4 dnl +- $5 dnl +- $6 dnl +- $7 dnl +- ],ax_warn_cflags_variable,[$ax_compiler_flags_test]) +- ]) +- AS_IF([test "$ax_enable_compile_warnings" = "error"],[ +- # "error" flags; -Werror has to be appended unconditionally because +- # it's not possible to test for +- # +- # suggest-attribute=format is disabled because it gives too many false +- # positives +- AX_APPEND_FLAG([-Werror],ax_warn_cflags_variable) +- +- AX_APPEND_COMPILE_FLAGS([ dnl +- [$ax_compiler_no_suggest_attribute_flags] dnl +- ],ax_warn_cflags_variable,[$ax_compiler_flags_test]) +- ]) +- +- # In the flags below, when disabling specific flags, always add *both* +- # -Wno-foo and -Wno-error=foo. This fixes the situation where (for example) +- # we enable -Werror, disable a flag, and a build bot passes CFLAGS=-Wall, +- # which effectively turns that flag back on again as an error. +- for flag in $ax_warn_cflags_variable; do +- AS_CASE([$flag], +- [-Wno-*=*],[], +- [-Wno-*],[ +- AX_APPEND_COMPILE_FLAGS([-Wno-error=$(AS_ECHO([$flag]) | $SED 's/^-Wno-//')], +- ax_warn_cflags_variable, +- [$ax_compiler_flags_test]) +- ]) +- done +- +- AC_LANG_POP([C]) +- +- # Substitute the variables +- AC_SUBST(ax_warn_cflags_variable) +-])dnl AX_COMPILER_FLAGS +diff --git a/m4/ax_compiler_flags_gir.m4 b/m4/ax_compiler_flags_gir.m4 +deleted file mode 100644 +index 5b4924a20..000000000 +--- a/m4/ax_compiler_flags_gir.m4 ++++ /dev/null +@@ -1,60 +0,0 @@ +-# =========================================================================== +-# https://www.gnu.org/software/autoconf-archive/ax_compiler_flags_gir.html +-# =========================================================================== +-# +-# SYNOPSIS +-# +-# AX_COMPILER_FLAGS_GIR([VARIABLE], [IS-RELEASE], [EXTRA-BASE-FLAGS], [EXTRA-YES-FLAGS]) +-# +-# DESCRIPTION +-# +-# Add warning flags for the g-ir-scanner (from GObject Introspection) to +-# VARIABLE, which defaults to WARN_SCANNERFLAGS. VARIABLE is AC_SUBST-ed +-# by this macro, but must be manually added to the SCANNERFLAGS variable +-# for each GIR target in the code base. +-# +-# This macro depends on the environment set up by AX_COMPILER_FLAGS. +-# Specifically, it uses the value of $ax_enable_compile_warnings to decide +-# which flags to enable. +-# +-# LICENSE +-# +-# Copyright (c) 2015 Philip Withnall +-# +-# Copying and distribution of this file, with or without modification, are +-# permitted in any medium without royalty provided the copyright notice +-# and this notice are preserved. This file is offered as-is, without any +-# warranty. +- +-#serial 6 +- +-AC_DEFUN([AX_COMPILER_FLAGS_GIR],[ +- AX_REQUIRE_DEFINED([AX_APPEND_FLAG]) +- +- # Variable names +- m4_define([ax_warn_scannerflags_variable], +- [m4_normalize(ifelse([$1],,[WARN_SCANNERFLAGS],[$1]))]) +- +- # Base flags +- AX_APPEND_FLAG([$3],ax_warn_scannerflags_variable) +- +- AS_IF([test "$ax_enable_compile_warnings" != "no"],[ +- # "yes" flags +- AX_APPEND_FLAG([ dnl +- --warn-all dnl +- $4 dnl +- $5 dnl +- $6 dnl +- $7 dnl +- ],ax_warn_scannerflags_variable) +- ]) +- AS_IF([test "$ax_enable_compile_warnings" = "error"],[ +- # "error" flags +- AX_APPEND_FLAG([ dnl +- --warn-error dnl +- ],ax_warn_scannerflags_variable) +- ]) +- +- # Substitute the variables +- AC_SUBST(ax_warn_scannerflags_variable) +-])dnl AX_COMPILER_FLAGS +diff --git a/m4/ax_compiler_flags_ldflags.m4 b/m4/ax_compiler_flags_ldflags.m4 +deleted file mode 100644 +index 976d1198d..000000000 +--- a/m4/ax_compiler_flags_ldflags.m4 ++++ /dev/null +@@ -1,111 +0,0 @@ +-# ============================================================================== +-# https://www.gnu.org/software/autoconf-archive/ax_compiler_flags_ldflags.html +-# ============================================================================== +-# +-# SYNOPSIS +-# +-# AX_COMPILER_FLAGS_LDFLAGS([VARIABLE], [IS-RELEASE], [EXTRA-BASE-FLAGS], [EXTRA-YES-FLAGS]) +-# +-# DESCRIPTION +-# +-# Add warning flags for the linker to VARIABLE, which defaults to +-# WARN_LDFLAGS. VARIABLE is AC_SUBST-ed by this macro, but must be +-# manually added to the LDFLAGS variable for each target in the code base. +-# +-# This macro depends on the environment set up by AX_COMPILER_FLAGS. +-# Specifically, it uses the value of $ax_enable_compile_warnings to decide +-# which flags to enable. +-# +-# LICENSE +-# +-# Copyright (c) 2014, 2015 Philip Withnall +-# Copyright (c) 2017, 2018 Reini Urban +-# +-# Copying and distribution of this file, with or without modification, are +-# permitted in any medium without royalty provided the copyright notice +-# and this notice are preserved. This file is offered as-is, without any +-# warranty. +- +-#serial 9 +- +-AC_DEFUN([AX_COMPILER_FLAGS_LDFLAGS],[ +- AX_REQUIRE_DEFINED([AX_APPEND_LINK_FLAGS]) +- AX_REQUIRE_DEFINED([AX_APPEND_FLAG]) +- AX_REQUIRE_DEFINED([AX_CHECK_COMPILE_FLAG]) +- AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG]) +- +- # Variable names +- m4_define([ax_warn_ldflags_variable], +- [m4_normalize(ifelse([$1],,[WARN_LDFLAGS],[$1]))]) +- +- # Always pass -Werror=unknown-warning-option to get Clang to fail on bad +- # flags, otherwise they are always appended to the warn_ldflags variable, +- # and Clang warns on them for every compilation unit. +- # If this is passed to GCC, it will explode, so the flag must be enabled +- # conditionally. +- AX_CHECK_COMPILE_FLAG([-Werror=unknown-warning-option],[ +- ax_compiler_flags_test="-Werror=unknown-warning-option" +- ],[ +- ax_compiler_flags_test="" +- ]) +- +- AX_CHECK_LINK_FLAG([-Wl,--as-needed], [ +- AX_APPEND_LINK_FLAGS([-Wl,--as-needed], +- [AM_LDFLAGS],[$ax_compiler_flags_test]) +- ]) +- AX_CHECK_LINK_FLAG([-Wl,-z,relro], [ +- AX_APPEND_LINK_FLAGS([-Wl,-z,relro], +- [AM_LDFLAGS],[$ax_compiler_flags_test]) +- ]) +- AX_CHECK_LINK_FLAG([-Wl,-z,now], [ +- AX_APPEND_LINK_FLAGS([-Wl,-z,now], +- [AM_LDFLAGS],[$ax_compiler_flags_test]) +- ]) +- AX_CHECK_LINK_FLAG([-Wl,-z,noexecstack], [ +- AX_APPEND_LINK_FLAGS([-Wl,-z,noexecstack], +- [AM_LDFLAGS],[$ax_compiler_flags_test]) +- ]) +- # textonly, retpolineplt not yet +- +- # macOS and cygwin linker do not have --as-needed +- AX_CHECK_LINK_FLAG([-Wl,--no-as-needed], [ +- ax_compiler_flags_as_needed_option="-Wl,--no-as-needed" +- ], [ +- ax_compiler_flags_as_needed_option="" +- ]) +- +- # macOS linker speaks with a different accent +- ax_compiler_flags_fatal_warnings_option="" +- AX_CHECK_LINK_FLAG([-Wl,--fatal-warnings], [ +- ax_compiler_flags_fatal_warnings_option="-Wl,--fatal-warnings" +- ]) +- AX_CHECK_LINK_FLAG([-Wl,-fatal_warnings], [ +- ax_compiler_flags_fatal_warnings_option="-Wl,-fatal_warnings" +- ]) +- +- # Base flags +- AX_APPEND_LINK_FLAGS([ dnl +- $ax_compiler_flags_as_needed_option dnl +- $3 dnl +- ],ax_warn_ldflags_variable,[$ax_compiler_flags_test]) +- +- AS_IF([test "$ax_enable_compile_warnings" != "no"],[ +- # "yes" flags +- AX_APPEND_LINK_FLAGS([$4 $5 $6 $7], +- ax_warn_ldflags_variable, +- [$ax_compiler_flags_test]) +- ]) +- AS_IF([test "$ax_enable_compile_warnings" = "error"],[ +- # "error" flags; -Werror has to be appended unconditionally because +- # it's not possible to test for +- # +- # suggest-attribute=format is disabled because it gives too many false +- # positives +- AX_APPEND_LINK_FLAGS([ dnl +- $ax_compiler_flags_fatal_warnings_option dnl +- ],ax_warn_ldflags_variable,[$ax_compiler_flags_test]) +- ]) +- +- # Substitute the variables +- AC_SUBST(ax_warn_ldflags_variable) +-])dnl AX_COMPILER_FLAGS diff --git a/package/babeltrace2/0002-tests-lib-test_trace_ir_ref.c-rename-user-structure.patch b/package/babeltrace2/0002-tests-lib-test_trace_ir_ref.c-rename-user-structure.patch new file mode 100644 index 00000000..ac9eee82 --- /dev/null +++ b/package/babeltrace2/0002-tests-lib-test_trace_ir_ref.c-rename-user-structure.patch @@ -0,0 +1,57 @@ +From 7a27f13c192d15cae47740f3e884bba16f15ed41 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 26 Sep 2020 22:03:10 +0200 +Subject: [PATCH] tests/lib/test_trace_ir_ref.c: rename user structure + +Rename user structure to bt_user to avoid the following build failure +with uclibc: + +test_trace_ir_ref.c:41:8: error: redefinition of 'struct user' + struct user { + ^ +In file included from /home/naourr/work/instance-0/output-1/per-package/babeltrace2/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/include/sys/procfs.h:33, + from /home/naourr/work/instance-0/output-1/per-package/babeltrace2/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/include/sys/ucontext.h:25, + from /home/naourr/work/instance-0/output-1/per-package/babeltrace2/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/include/signal.h:329, + from /home/naourr/work/instance-0/output-1/per-package/babeltrace2/host/bin/../arm-buildroot-linux-uclibcgnueabi/sysroot/usr/include/glib-2.0/glib/gbacktrace.h:36, + from /home/naourr/work/instance-0/output-1/per-package/babeltrace2/host/bin/../arm-buildroot-linux-uclibcgnueabi/sysroot/usr/include/glib-2.0/glib.h:34, + from ../../src/common/assert.h:28, + from ../../src/lib/object.h:28, + from test_trace_ir_ref.c:25: +/home/naourr/work/instance-0/output-1/per-package/babeltrace2/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/include/sys/user.h:48:8: note: originally defined here + struct user + ^~~~ + +Fixes: + - http://autobuild.buildroot.org/results/e4229e2b9c892b419a9d2eaa6929b80ea62dd130 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/efficios/babeltrace/pull/115] +--- + tests/lib/test_trace_ir_ref.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/tests/lib/test_trace_ir_ref.c b/tests/lib/test_trace_ir_ref.c +index d5dfa9cf..70caf29c 100644 +--- a/tests/lib/test_trace_ir_ref.c ++++ b/tests/lib/test_trace_ir_ref.c +@@ -25,7 +25,7 @@ + + #define NR_TESTS 37 + +-struct user { ++struct bt_user { + bt_trace_class *tc; + bt_stream_class *sc; + bt_event_class *ec; +@@ -265,7 +265,7 @@ static void test_example_scenario(bt_self_component_source *self_comp) + bt_stream_class *weak_sc1 = NULL, *weak_sc2 = NULL; + bt_event_class *weak_ec1 = NULL, *weak_ec2 = NULL, + *weak_ec3 = NULL; +- struct user user_a = { 0 }, user_b = { 0 }, user_c = { 0 }; ++ struct bt_user user_a = { 0 }, user_b = { 0 }, user_c = { 0 }; + + /* The only reference which exists at this point is on TC1. */ + tc1 = create_tc1(self_comp); +-- +2.28.0 + diff --git a/package/babeltrace2/Config.in b/package/babeltrace2/Config.in new file mode 100644 index 00000000..a020d4a7 --- /dev/null +++ b/package/babeltrace2/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_BABELTRACE2 + bool "babeltrace2" + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + select BR2_PACKAGE_LIBGLIB2 + help + Babeltrace 2 is an open-source trace manipulation toolkit. + + The Babeltrace 2 project offers a library with a C API, + Python 3 bindings, and a command-line tool which makes it + very easy for mere mortals to view, convert, transform, and + analyze traces. + + Babeltrace 2 is also the reference parser implementation of + the Common Trace Format (CTF), a very versatile trace format + followed by various tracers and tools such as LTTng and + barectf. The Babeltrace 2 library and its Python bindings + can read and write CTF traces. + + To get support for the debugging information filter + component class, enable the elfutils package + (BR2_PACKAGE_ELFUTILS). + + https://babeltrace.org/ + +comment "babeltrace2 needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/babeltrace2/Config.in.host b/package/babeltrace2/Config.in.host new file mode 100644 index 00000000..852ad870 --- /dev/null +++ b/package/babeltrace2/Config.in.host @@ -0,0 +1,17 @@ +config BR2_PACKAGE_HOST_BABELTRACE2 + bool "host babeltrace2" + help + Babeltrace 2 is an open-source trace manipulation toolkit. + + The Babeltrace 2 project offers a library with a C API, + Python 3 bindings, and a command-line tool which makes it + very easy for mere mortals to view, convert, transform, and + analyze traces. + + Babeltrace 2 is also the reference parser implementation of + the Common Trace Format (CTF), a very versatile trace format + followed by various tracers and tools such as LTTng and + barectf. The Babeltrace 2 library and its Python bindings + can read and write CTF traces. + + https://babeltrace.org/ diff --git a/package/babeltrace2/babeltrace2.hash b/package/babeltrace2/babeltrace2.hash new file mode 100644 index 00000000..27c47ba2 --- /dev/null +++ b/package/babeltrace2/babeltrace2.hash @@ -0,0 +1,8 @@ +# From https://www.efficios.com/files/babeltrace/babeltrace2-2.0.3.tar.bz2.sha256 +sha256 a53625152554102d868ba8395347d0daba0bec9c4b854c3e9bd97c77b0bf04a0 babeltrace2-2.0.3.tar.bz2 + +# Hash for license files +sha256 d919c6347409efde6dea63c6f349fb06bc060a2b721fc3df07b5f720b5f1d60e LICENSE +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 gpl-2.0.txt +sha256 c68fd1ffc1623ea0dace21abf57305818e4998a4ae0c79010aaaa943eb660b55 lgpl-2.1.txt +sha256 2f801b7c2494850c3d91da820eb230502dc0192c9d0db024db37ec08d0be1434 mit-license.txt diff --git a/package/babeltrace2/babeltrace2.mk b/package/babeltrace2/babeltrace2.mk new file mode 100644 index 00000000..1e03f5fd --- /dev/null +++ b/package/babeltrace2/babeltrace2.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# babeltrace2 +# +################################################################################ + +BABELTRACE2_SITE = https://www.efficios.com/files/babeltrace +BABELTRACE2_VERSION = 2.0.3 +BABELTRACE2_SOURCE = babeltrace2-$(BABELTRACE2_VERSION).tar.bz2 +BABELTRACE2_LICENSE = MIT, LGPL-2.1 (src/common/list.h), GPL-2.0 (test code) +BABELTRACE2_LICENSE_FILES = mit-license.txt lgpl-2.1.txt gpl-2.0.txt LICENSE +# We're patching configure.ac +BABELTRACE2_AUTORECONF = YES +BABELTRACE2_CONF_OPTS = --disable-man-pages +BABELTRACE2_DEPENDENCIES = libglib2 host-pkgconf +# The host-elfutils dependency is optional, but since we don't have +# options for host packages, just build support for it +# unconditionally. +HOST_BABELTRACE2_DEPENDENCIES = host-libglib2 host-pkgconf host-elfutils +HOST_BABELTRACE2_CONF_OPTS += --enable-debug-info + +ifeq ($(BR2_PACKAGE_ELFUTILS),y) +BABELTRACE2_DEPENDENCIES += elfutils +BABELTRACE2_CONF_OPTS += --enable-debug-info +BABELTRACE2_CONF_ENV += bt_cv_lib_elfutils=yes +else +BABELTRACE2_CONF_OPTS += --disable-debug-info +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +BABELTRACE2_CONF_ENV += LIBS=-latomic +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/balena-engine/Config.in b/package/balena-engine/Config.in new file mode 100644 index 00000000..f48f361d --- /dev/null +++ b/package/balena-engine/Config.in @@ -0,0 +1,26 @@ +config BR2_PACKAGE_BALENA_ENGINE + bool "balena-engine" + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + depends on !BR2_TOOLCHAIN_USES_UCLIBC # no fexecve + depends on BR2_USE_MMU # util-linux + select BR2_PACKAGE_CGROUPFS_MOUNT if !BR2_PACKAGE_SYSTEMD # runtime + select BR2_PACKAGE_IPTABLES # runtime + select BR2_PACKAGE_SQLITE # runtime + select BR2_PACKAGE_UTIL_LINUX # runtime + select BR2_PACKAGE_UTIL_LINUX_BINARIES # runtime + select BR2_PACKAGE_UTIL_LINUX_MOUNT # runtime + select BR2_PACKAGE_UTIL_LINUX_MOUNTPOINT # runtime + select BR2_PACKAGE_UTIL_LINUX_PIVOT_ROOT # runtime + help + balenaEngine is a new container engine purpose-built for + embedded and IoT use cases and compatible with Docker + containers. + + https://github.com/balena-os/balena-engine + +comment "balena-engine needs a glibc or musl toolchain w/ threads" + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_TOOLCHAIN_USES_UCLIBC + depends on BR2_USE_MMU diff --git a/package/balena-engine/balena-engine.hash b/package/balena-engine/balena-engine.hash new file mode 100644 index 00000000..3f632ef3 --- /dev/null +++ b/package/balena-engine/balena-engine.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 389282706562118608b6ac580e7beacd6a43f0bb3481c69fb1856bed9ac49b85 balena-engine-19.03.14.tar.gz +sha256 7c87873291f289713ac5df48b1f2010eb6963752bbd6b530416ab99fc37914a8 LICENSE diff --git a/package/balena-engine/balena-engine.mk b/package/balena-engine/balena-engine.mk new file mode 100644 index 00000000..b3eb2ca7 --- /dev/null +++ b/package/balena-engine/balena-engine.mk @@ -0,0 +1,109 @@ +################################################################################ +# +# balena-engine +# +################################################################################ + +BALENA_ENGINE_VERSION = 19.03.14 +BALENA_ENGINE_SITE = $(call github,balena-os,balena-engine,v$(BALENA_ENGINE_VERSION)) + +BALENA_ENGINE_LICENSE = Apache-2.0 +BALENA_ENGINE_LICENSE_FILES = LICENSE + +BALENA_ENGINE_DEPENDENCIES = host-pkgconf +BALENA_ENGINE_GOMOD = github.com/docker/docker + +BALENA_ENGINE_LDFLAGS = \ + -X github.com/docker/cli/cli/version.Version=N/A \ + -X github.com/docker/cli/cli/version.GitCommit= \ + -X github.com/docker/cli/cli/version.BuildTime= \ + -X github.com/containerd/containerd/version.Version=N/A \ + -X github.com/opencontainers/runc.version=N/A + +BALENA_ENGINE_TAGS = \ + cgo \ + exclude_graphdriver_zfs \ + autogen \ + no_buildkit \ + no_btrfs \ + no_cri \ + no_devmapper \ + no_zfs \ + exclude_disk_quota \ + exclude_graphdriver_btrfs \ + exclude_graphdriver_devicemapper + +BALENA_ENGINE_BUILD_TARGETS = cmd/balena-engine + +ifeq ($(BR2_INIT_SYSTEMD),y) +BALENA_ENGINE_DEPENDENCIES += systemd +BALENA_ENGINE_TAGS += journald +endif + +define BALENA_ENGINE_RUN_AUTOGEN + cd $(@D) && \ + VERSION=$(BALENA_ENGINE_VERSION) \ + PKG_CONFIG=$(PKG_CONFIG_HOST_BINARY) \ + $(TARGET_MAKE_ENV) \ + $(SHELL) hack/make/.go-autogen +endef + +BALENA_ENGINE_POST_CONFIGURE_HOOKS += BALENA_ENGINE_RUN_AUTOGEN + +define BALENA_ENGINE_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 $(@D)/contrib/init/systemd/balena-engine.service \ + $(TARGET_DIR)/usr/lib/systemd/system/balena-engine.service + $(INSTALL) -D -m 644 $(@D)/contrib/init/systemd/balena-engine.socket \ + $(TARGET_DIR)/usr/lib/systemd/system/balena-engine.socket +endef + +define BALENA_ENGINE_USERS + - - balena-engine -1 * - - - balenaEngine daemon +endef + +define BALENA_ENGINE_LINUX_CONFIG_FIXUPS + $(call KCONFIG_ENABLE_OPT,CONFIG_POSIX_MQUEUE) + $(call KCONFIG_ENABLE_OPT,CONFIG_CGROUPS) + $(call KCONFIG_ENABLE_OPT,CONFIG_MEMCG) + $(call KCONFIG_ENABLE_OPT,CONFIG_CGROUP_SCHED) + $(call KCONFIG_ENABLE_OPT,CONFIG_CGROUP_FREEZER) + $(call KCONFIG_ENABLE_OPT,CONFIG_CPUSETS) + $(call KCONFIG_ENABLE_OPT,CONFIG_CGROUP_DEVICE) + $(call KCONFIG_ENABLE_OPT,CONFIG_CGROUP_CPUACCT) + $(call KCONFIG_ENABLE_OPT,CONFIG_NAMESPACES) + $(call KCONFIG_ENABLE_OPT,CONFIG_UTS_NS) + $(call KCONFIG_ENABLE_OPT,CONFIG_IPC_NS) + $(call KCONFIG_ENABLE_OPT,CONFIG_PID_NS) + $(call KCONFIG_ENABLE_OPT,CONFIG_NET_NS) + $(call KCONFIG_ENABLE_OPT,CONFIG_NETFILTER) + $(call KCONFIG_ENABLE_OPT,CONFIG_NETFILTER_ADVANCED) + $(call KCONFIG_ENABLE_OPT,CONFIG_BRIDGE_NETFILTER) + $(call KCONFIG_ENABLE_OPT,CONFIG_NF_CONNTRACK) + $(call KCONFIG_ENABLE_OPT,CONFIG_NETFILTER_XT_MATCH_ADDRTYPE) + $(call KCONFIG_ENABLE_OPT,CONFIG_NETFILTER_XT_MATCH_CONNTRACK) + $(call KCONFIG_ENABLE_OPT,CONFIG_NETFILTER_XT_MATCH_IPVS) + $(call KCONFIG_ENABLE_OPT,CONFIG_IP_NF_IPTABLES) + $(call KCONFIG_ENABLE_OPT,CONFIG_IP_NF_FILTER) + $(call KCONFIG_ENABLE_OPT,CONFIG_IP_NF_NAT) + $(call KCONFIG_ENABLE_OPT,CONFIG_IP_NF_TARGET_MASQUERADE) + $(call KCONFIG_ENABLE_OPT,CONFIG_BRIDGE) + $(call KCONFIG_ENABLE_OPT,CONFIG_DUMMY) + $(call KCONFIG_ENABLE_OPT,CONFIG_MACVLAN) + $(call KCONFIG_ENABLE_OPT,CONFIG_VXLAN) + $(call KCONFIG_ENABLE_OPT,CONFIG_VETH) + $(call KCONFIG_ENABLE_OPT,CONFIG_OVERLAY_FS) + $(call KCONFIG_ENABLE_OPT,CONFIG_KEYS) +endef + +define BALENA_ENGINE_INSTALL_SYMLINK + ln -f -s balena-engine $(TARGET_DIR)/usr/bin/balena-engine-daemon + ln -f -s balena-engine $(TARGET_DIR)/usr/bin/balena-engine-containerd + ln -f -s balena-engine $(TARGET_DIR)/usr/bin/balena-engine-containerd-shim + ln -f -s balena-engine $(TARGET_DIR)/usr/bin/balena-engine-containerd-ctr + ln -f -s balena-engine $(TARGET_DIR)/usr/bin/balena-engine-runc + ln -f -s balena-engine $(TARGET_DIR)/usr/bin/balena-engine-proxy + $(if $(BR2_PACKAGE_TINI),ln -f -s tini $(TARGET_DIR)/usr/bin/balena-engine-init) +endef +BALENA_ENGINE_POST_INSTALL_TARGET_HOOKS += BALENA_ENGINE_INSTALL_SYMLINK + +$(eval $(golang-package)) diff --git a/package/bandwidthd/0001-src-bandwidthd.h-fix-build-with-gcc-10.patch b/package/bandwidthd/0001-src-bandwidthd.h-fix-build-with-gcc-10.patch new file mode 100644 index 00000000..e7d0dec8 --- /dev/null +++ b/package/bandwidthd/0001-src-bandwidthd.h-fix-build-with-gcc-10.patch @@ -0,0 +1,60 @@ +From dde68ed77114d7b19bfed3068edefc9dc0644445 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 16 Aug 2020 10:21:46 +0200 +Subject: [PATCH] src/bandwidthd.h: fix build with gcc 10 + +Remove SubnetTable[SUBNET_NUM] and IpTable[IP_NUM] from bandwidthd.h as +they are already in bandwidthd.c otherwise the build with gcc 10 will +fail on: + +/home/buildroot/autobuild/instance-2/output-1/host/bin/arm-buildroot-linux-gnueabihf-gcc -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -o bandwidthd bandwidthd.o graph.o extensions.o sqlight.o parser.o lexer.o pgsql.o -lpcap -lgd -lm -lresolv -L/home/buildroot/autobuild/instance-2/output-1/host/bin/../arm-buildroot-linux-gnueabihf/sysroot/usr/lib -lpng16 -lz -L/home/buildroot/autobuild/instance-2/output-1/host/arm-buildroot-linux-gnueabihf/sysroot/usr/bin/../../../../arm-buildroot-linux-gnueabihf/sysroot/usr/lib/.libs -lnl-genl-3 -lnl-3 +/home/buildroot/autobuild/instance-2/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: graph.o:(.bss+0x4b0): multiple definition of `IpTable'; bandwidthd.o:(.bss+0x3e0): first defined here +/home/buildroot/autobuild/instance-2/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: graph.o:(.bss+0x18c): multiple definition of `SubnetTable'; bandwidthd.o:(.bss+0x88): first defined here + +Fixes: + - http://autobuild.buildroot.org/results/6308c8ee38b6017215038d47c009b238113bd36f + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/nroach44/bandwidthd/pull/1] +--- + src/bandwidthd.h | 4 ++-- + src/graph.c | 1 + + 2 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/src/bandwidthd.h b/src/bandwidthd.h +index 870fdf7..eb4c830 100644 +--- a/src/bandwidthd.h ++++ b/src/bandwidthd.h +@@ -134,7 +134,7 @@ struct SubnetData + { + uint32_t ip; + uint32_t mask; +-} SubnetTable[SUBNET_NUM]; ++}; + + struct Statistics + { +@@ -157,7 +157,7 @@ struct IPData + uint32_t ip; // Host byte order + struct Statistics Send; + struct Statistics Receive; +-} IpTable[IP_NUM]; ++}; + + struct SummaryData + { +diff --git a/src/graph.c b/src/graph.c +index b4b68f0..058e8c7 100644 +--- a/src/graph.c ++++ b/src/graph.c +@@ -18,6 +18,7 @@ + #include + #endif + ++extern struct SubnetData SubnetTable[SUBNET_NUM]; + extern unsigned int SubnetCount; + extern struct config config; + +-- +2.27.0 + diff --git a/package/bandwidthd/Config.in b/package/bandwidthd/Config.in new file mode 100644 index 00000000..5a3529e0 --- /dev/null +++ b/package/bandwidthd/Config.in @@ -0,0 +1,56 @@ +config BR2_PACKAGE_BANDWIDTHD + bool "bandwidthd" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBPNG + select BR2_PACKAGE_LIBPCAP + select BR2_PACKAGE_GD + help + BandwidthD - Bandwidth monitoring + + Provides a method to measure the bandwidth that travels + through the machine, grouped by subnet and IP. This + information can be stored locally in /var/lib/bandwidthd and + can be configured to generate static HTML pages which can be + hosted by a web server. + + It is highly recommended that the target has some way of + retaining the time between reboots. (e.g. NTP on boot or an + RTC) + + It is suggested to use sqlite for logfile storage but works + fine without, and can be completely ignored if the + postgresql portion is used. + + As upstream is no longer actively maintained, a fork is + available on github that works on making BandwidthD's build + process more compatible with buildroot's. + + Upstream: + http://bandwidthd.sourceforge.net/ + Github fork: + http://github.com/nroach44/bandwidthd + +if BR2_PACKAGE_BANDWIDTHD + +config BR2_PACKAGE_BANDWIDTHD_POSTGRESQL + bool "enable postgresql log target support" + depends on !BR2_STATIC_LIBS + depends on BR2_USE_WCHAR # postgresql + select BR2_PACKAGE_POSTGRESQL + help + Enable support for logging the bandwidthd data to a remote + (or local) postgresql server. This data can then be viewed + through a php site. See README in the source code + (github.com/nroach44/bandwidthd) for more information. + +comment "postgresql support needs a toolchain w/ dynamic library, wchar" + depends on BR2_STATIC_LIBS || !BR2_USE_WCHAR + +config BR2_PACKAGE_BANDWIDTHD_SQLITE3 + bool "enable sqlite3 log storage" + select BR2_PACKAGE_SQLITE + help + Enable support for storing the aggregated data in an sqlite + db instead of a plain text file. + +endif diff --git a/package/bandwidthd/bandwidthd.hash b/package/bandwidthd/bandwidthd.hash new file mode 100644 index 00000000..5b1bbce9 --- /dev/null +++ b/package/bandwidthd/bandwidthd.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 0270d0def6cc53c8d47d59a9dd093d51fbca1620adeef85c15e35a32010e26ab bandwidthd-2.0.1-auto-r11.tar.gz +sha256 58573c40770e0c0b91f3eef8192952832321a344f66a4fb2d966095cbbfc86c2 README diff --git a/package/bandwidthd/bandwidthd.mk b/package/bandwidthd/bandwidthd.mk new file mode 100644 index 00000000..88222a91 --- /dev/null +++ b/package/bandwidthd/bandwidthd.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# bandwidthd +# +################################################################################ + +BANDWIDTHD_VERSION = 2.0.1-auto-r11 +BANDWIDTHD_SITE = $(call github,nroach44,bandwidthd,v$(BANDWIDTHD_VERSION)) + +# Specified as "any version of the GPL that is current as of your +# download" by upstream. +BANDWIDTHD_LICENSE = GPL +BANDWIDTHD_LICENSE_FILES = README + +BANDWIDTHD_DEPENDENCIES = gd libpng libpcap host-pkgconf + +BANDWIDTHD_AUTORECONF = YES + +BANDWIDTHD_CONF_OPTS += --with-pcap-config=$(STAGING_DIR)/usr/bin/pcap-config + +ifeq ($(BR2_PACKAGE_BANDWIDTHD_POSTGRESQL),y) +BANDWIDTHD_DEPENDENCIES += postgresql +BANDWIDTHD_CONF_OPTS += --with-postgresql-logging=true +else +BANDWIDTHD_CONF_OPTS += --with-postgresql-logging=false +endif + +ifeq ($(BR2_PACKAGE_BANDWIDTHD_SQLITE3),y) +BANDWIDTHD_DEPENDENCIES += sqlite +BANDWIDTHD_CONF_OPTS += --with-sqlite-storage=true +else +BANDWIDTHD_CONF_OPTS += --with-sqlite-storage=false +endif + +define BANDWIDTHD_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/bandwidthd/bandwidthd.service \ + $(TARGET_DIR)/usr/lib/systemd/system/bandwidthd.service +endef + +$(eval $(autotools-package)) diff --git a/package/bandwidthd/bandwidthd.service b/package/bandwidthd/bandwidthd.service new file mode 100644 index 00000000..ab7f05a2 --- /dev/null +++ b/package/bandwidthd/bandwidthd.service @@ -0,0 +1,11 @@ +[Unit] +Description=Bandwidth usage monitor and reporter +After=network.target + +[Service] +Type=forking +ExecStart=/usr/bin/bandwidthd +PIDFile=/run/bandwidthd.pid + +[Install] +WantedBy=multi-user.target diff --git a/package/bash-completion/Config.in b/package/bash-completion/Config.in new file mode 100644 index 00000000..c907c04a --- /dev/null +++ b/package/bash-completion/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_BASH_COMPLETION + bool "bash completion" + depends on BR2_PACKAGE_BASH + help + Add bash completion infrastructure. + + The bash completion infrastructure is enabled by + /etc/profile.d/bash_completion.sh, which is normally + sourced by /etc/profile. + + If the system does not use the /etc/profile.d directory + mechanism, the /etc/profile.d/bash_completion.sh script can + be sourced from /etc/bashrc or ~/.bashrc. + + https://github.com/scop/bash-completion diff --git a/package/bash-completion/bash-completion.hash b/package/bash-completion/bash-completion.hash new file mode 100644 index 00000000..fa98272b --- /dev/null +++ b/package/bash-completion/bash-completion.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 123c17998e34b937ce57bb1b111cd817bc369309e9a8047c0bcf06ead4a3ec92 bash-completion-2.10.tar.xz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/bash-completion/bash-completion.mk b/package/bash-completion/bash-completion.mk new file mode 100644 index 00000000..4b86e9f1 --- /dev/null +++ b/package/bash-completion/bash-completion.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# bash-completion +# +################################################################################ + +BASH_COMPLETION_VERSION = 2.10 +BASH_COMPLETION_SITE = https://github.com/scop/bash-completion/releases/download/$(BASH_COMPLETION_VERSION) +BASH_COMPLETION_SOURCE = bash-completion-$(BASH_COMPLETION_VERSION).tar.xz +BASH_COMPLETION_LICENSE = GPL-2.0 +BASH_COMPLETION_LICENSE_FILES = COPYING + +# Install bash-completion.pc file +BASH_COMPLETION_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/bash/0001-bash50-001.patch b/package/bash/0001-bash50-001.patch new file mode 100644 index 00000000..90e89ce5 --- /dev/null +++ b/package/bash/0001-bash50-001.patch @@ -0,0 +1,170 @@ +From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-001 + +Signed-off-by: Pascal de Bruijn + + BASH PATCH REPORT + ================= + +Bash-Release: 5.0 +Patch-ID: bash50-001 + +Bug-Reported-by: axel@freakout.de +Bug-Reference-ID: <201901082050.x08KoShS006731@bongo.freakout.de> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00079.html + +Bug-Description: + +Under certain circumstances, the glob expansion code did not remove +backslashes escaping characters in directory names (or portions of a +pattern preceding a slash). + +Patch (apply with `patch -p0'): + +*** ../bash-5.0/bashline.c 2018-11-27 13:20:16.000000000 -0500 +--- b/bashline.c 2019-01-16 16:06:03.000000000 -0500 +*************** +*** 232,235 **** +--- 232,236 ---- + static int bash_possible_command_completions __P((int, int)); + ++ static int completion_glob_pattern __P((char *)); + static char *glob_complete_word __P((const char *, int)); + static int bash_glob_completion_internal __P((int)); +*************** +*** 1742,1746 **** + /* This could be a globbing pattern, so try to expand it using pathname + expansion. */ +! if (!matches && glob_pattern_p (text)) + { + matches = rl_completion_matches (text, glob_complete_word); +--- 1743,1747 ---- + /* This could be a globbing pattern, so try to expand it using pathname + expansion. */ +! if (!matches && completion_glob_pattern ((char *)text)) + { + matches = rl_completion_matches (text, glob_complete_word); +*************** +*** 1851,1855 **** + } + +! globpat = glob_pattern_p (hint_text); + + /* If this is an absolute program name, do not check it against +--- 1852,1856 ---- + } + +! globpat = completion_glob_pattern ((char *)hint_text); + + /* If this is an absolute program name, do not check it against +*************** +*** 3714,3717 **** +--- 3715,3773 ---- + } + ++ static int ++ completion_glob_pattern (string) ++ char *string; ++ { ++ register int c; ++ char *send; ++ int open; ++ ++ DECLARE_MBSTATE; ++ ++ open = 0; ++ send = string + strlen (string); ++ ++ while (c = *string++) ++ { ++ switch (c) ++ { ++ case '?': ++ case '*': ++ return (1); ++ ++ case '[': ++ open++; ++ continue; ++ ++ case ']': ++ if (open) ++ return (1); ++ continue; ++ ++ case '+': ++ case '@': ++ case '!': ++ if (*string == '(') /*)*/ ++ return (1); ++ continue; ++ ++ case '\\': ++ if (*string == 0) ++ return (0); ++ } ++ ++ /* Advance one fewer byte than an entire multibyte character to ++ account for the auto-increment in the loop above. */ ++ #ifdef HANDLE_MULTIBYTE ++ string--; ++ ADVANCE_CHAR_P (string, send - string); ++ string++; ++ #else ++ ADVANCE_CHAR_P (string, send - string); ++ #endif ++ } ++ return (0); ++ } ++ + static char *globtext; + static char *globorig; +*************** +*** 3878,3882 **** + } + +! if (t && glob_pattern_p (t) == 0) + rl_explicit_arg = 1; /* XXX - force glob_complete_word to append `*' */ + FREE (t); +--- 3934,3938 ---- + } + +! if (t && completion_glob_pattern (t) == 0) + rl_explicit_arg = 1; /* XXX - force glob_complete_word to append `*' */ + FREE (t); +*** ../bash-5.0/lib/glob/glob_loop.c 2018-12-31 13:35:15.000000000 -0500 +--- b/lib/glob/glob_loop.c 2019-01-09 09:44:36.000000000 -0500 +*************** +*** 55,59 **** + + case L('\\'): +- #if 0 + /* Don't let the pattern end in a backslash (GMATCH returns no match + if the pattern ends in a backslash anyway), but otherwise return 1, +--- 55,58 ---- +*************** +*** 61,69 **** + and it can be removed. */ + return (*p != L('\0')); +- #else +- /* The pattern may not end with a backslash. */ +- if (*p++ == L('\0')) +- return 0; +- #endif + } + +--- 60,63 ---- +*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 +--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 0 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 1 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/package/bash/0002-bash50-002.patch b/package/bash/0002-bash50-002.patch new file mode 100644 index 00000000..60d0a76f --- /dev/null +++ b/package/bash/0002-bash50-002.patch @@ -0,0 +1,117 @@ +From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-002 + +Signed-off-by: Pascal de Bruijn + + BASH PATCH REPORT + ================= + +Bash-Release: 5.0 +Patch-ID: bash50-002 + +Bug-Reported-by: Ante Peric +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00095.html + +Bug-Description: + +When an alias value ends with an unquoted literal tab (not part of a quoted +string or comment), alias expansion cannot correctly detect the end of the +alias value after expanding it. + +Patch (apply with `patch -p0'): + +*** ../bash-5.0/parser.h 2018-12-28 19:11:18.000000000 -0500 +--- b/parser.h 2019-01-11 15:13:03.000000000 -0500 +*************** +*** 48,51 **** +--- 48,52 ---- + #define PST_REDIRLIST 0x080000 /* parsing a list of redirections preceding a simple command name */ + #define PST_COMMENT 0x100000 /* parsing a shell comment; used by aliases */ ++ #define PST_ENDALIAS 0x200000 /* just finished expanding and consuming an alias */ + + /* Definition of the delimiter stack. Needed by parse.y and bashhist.c. */ +*** ../bash-5.0/parse.y 2019-01-02 13:57:34.000000000 -0500 +--- b/parse.y 2019-01-14 08:23:31.000000000 -0500 +*************** +*** 2558,2567 **** + pushed_string_list->flags != PSH_DPAREN && + (parser_state & PST_COMMENT) == 0 && + shell_input_line_index > 0 && +! shell_input_line[shell_input_line_index-1] != ' ' && + shell_input_line[shell_input_line_index-1] != '\n' && + shellmeta (shell_input_line[shell_input_line_index-1]) == 0 && + (current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"')) + { + return ' '; /* END_ALIAS */ + } +--- 2558,2569 ---- + pushed_string_list->flags != PSH_DPAREN && + (parser_state & PST_COMMENT) == 0 && ++ (parser_state & PST_ENDALIAS) == 0 && /* only once */ + shell_input_line_index > 0 && +! shellblank (shell_input_line[shell_input_line_index-1]) == 0 && + shell_input_line[shell_input_line_index-1] != '\n' && + shellmeta (shell_input_line[shell_input_line_index-1]) == 0 && + (current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"')) + { ++ parser_state |= PST_ENDALIAS; + return ' '; /* END_ALIAS */ + } +*************** +*** 2572,2575 **** +--- 2574,2578 ---- + if (uc == 0 && pushed_string_list && pushed_string_list->flags != PSH_SOURCE) + { ++ parser_state &= ~PST_ENDALIAS; + pop_string (); + uc = shell_input_line[shell_input_line_index]; +*** ../bash-5.0/y.tab.c 2019-01-02 13:57:43.000000000 -0500 +--- b/y.tab.c 2019-01-14 08:39:23.000000000 -0500 +*************** +*** 4874,4883 **** + pushed_string_list->flags != PSH_DPAREN && + (parser_state & PST_COMMENT) == 0 && + shell_input_line_index > 0 && +! shell_input_line[shell_input_line_index-1] != ' ' && + shell_input_line[shell_input_line_index-1] != '\n' && + shellmeta (shell_input_line[shell_input_line_index-1]) == 0 && + (current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"')) + { + return ' '; /* END_ALIAS */ + } +--- 4874,4885 ---- + pushed_string_list->flags != PSH_DPAREN && + (parser_state & PST_COMMENT) == 0 && ++ (parser_state & PST_ENDALIAS) == 0 && /* only once */ + shell_input_line_index > 0 && +! shellblank (shell_input_line[shell_input_line_index-1]) == 0 && + shell_input_line[shell_input_line_index-1] != '\n' && + shellmeta (shell_input_line[shell_input_line_index-1]) == 0 && + (current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"')) + { ++ parser_state |= PST_ENDALIAS; + return ' '; /* END_ALIAS */ + } +*************** +*** 4888,4891 **** +--- 4890,4894 ---- + if (uc == 0 && pushed_string_list && pushed_string_list->flags != PSH_SOURCE) + { ++ parser_state &= ~PST_ENDALIAS; + pop_string (); + uc = shell_input_line[shell_input_line_index]; +*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 +--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 1 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 2 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/package/bash/0003-bash50-003.patch b/package/bash/0003-bash50-003.patch new file mode 100644 index 00000000..12edb16a --- /dev/null +++ b/package/bash/0003-bash50-003.patch @@ -0,0 +1,243 @@ +From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-003 + +Signed-off-by: Pascal de Bruijn + + BASH PATCH REPORT + ================= + +Bash-Release: 5.0 +Patch-ID: bash50-003 + +Bug-Reported-by: Andrew Church +Bug-Reference-ID: <5c534aa2.04371@msgid.achurch.org> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00276.html + +Bug-Description: + +There are several incompatibilities in how bash-5.0 processes pathname +expansion (globbing) of filename arguments that have backslashes in the +directory portion. + +Patch (apply with `patch -p0'): + +*** ../bash-5.0-patched/lib/glob/glob_loop.c 2019-01-16 16:13:21.000000000 -0500 +--- b/lib/glob/glob_loop.c 2019-02-01 09:45:11.000000000 -0500 +*************** +*** 27,34 **** + register const GCHAR *p; + register GCHAR c; +! int bopen; + + p = pattern; +! bopen = 0; + + while ((c = *p++) != L('\0')) +--- 27,34 ---- + register const GCHAR *p; + register GCHAR c; +! int bopen, bsquote; + + p = pattern; +! bopen = bsquote = 0; + + while ((c = *p++) != L('\0')) +*************** +*** 56,66 **** + case L('\\'): + /* Don't let the pattern end in a backslash (GMATCH returns no match +! if the pattern ends in a backslash anyway), but otherwise return 1, +! since the matching engine uses backslash as an escape character +! and it can be removed. */ +! return (*p != L('\0')); + } + +! return 0; + } + +--- 56,75 ---- + case L('\\'): + /* Don't let the pattern end in a backslash (GMATCH returns no match +! if the pattern ends in a backslash anyway), but otherwise note that +! we have seen this, since the matching engine uses backslash as an +! escape character and it can be removed. We return 2 later if we +! have seen only backslash-escaped characters, so interested callers +! know they can shortcut and just dequote the pathname. */ +! if (*p != L('\0')) +! { +! p++; +! bsquote = 1; +! continue; +! } +! else /* (*p == L('\0')) */ +! return 0; + } + +! return bsquote ? 2 : 0; + } + +*** ../bash-5.0-patched/lib/glob/glob.h 2013-10-28 14:46:12.000000000 -0400 +--- b/lib/glob/glob.h 2019-03-07 11:06:47.000000000 -0500 +*************** +*** 31,34 **** +--- 31,35 ---- + #define GX_ADDCURDIR 0x200 /* internal -- add passed directory name */ + #define GX_GLOBSTAR 0x400 /* turn on special handling of ** */ ++ #define GX_RECURSE 0x800 /* internal -- glob_filename called recursively */ + + extern int glob_pattern_p __P((const char *)); +*** ../bash-5.0-patched/lib/glob/glob.c 2018-09-20 10:53:23.000000000 -0400 +--- b/lib/glob/glob.c 2019-03-07 14:23:43.000000000 -0500 +*************** +*** 1062,1066 **** + unsigned int directory_len; + int free_dirname; /* flag */ +! int dflags; + + result = (char **) malloc (sizeof (char *)); +--- 1078,1082 ---- + unsigned int directory_len; + int free_dirname; /* flag */ +! int dflags, hasglob; + + result = (char **) malloc (sizeof (char *)); +*************** +*** 1111,1117 **** + } + + /* If directory_name contains globbing characters, then we +! have to expand the previous levels. Just recurse. */ +! if (directory_len > 0 && glob_pattern_p (directory_name)) + { + char **directories, *d, *p; +--- 1127,1136 ---- + } + ++ hasglob = 0; + /* If directory_name contains globbing characters, then we +! have to expand the previous levels. Just recurse. +! If glob_pattern_p returns != [0,1] we have a pattern that has backslash +! quotes but no unquoted glob pattern characters. We dequote it below. */ +! if (directory_len > 0 && (hasglob = glob_pattern_p (directory_name)) == 1) + { + char **directories, *d, *p; +*************** +*** 1176,1180 **** + d[directory_len - 1] = '\0'; + +! directories = glob_filename (d, dflags); + + if (free_dirname) +--- 1195,1199 ---- + d[directory_len - 1] = '\0'; + +! directories = glob_filename (d, dflags|GX_RECURSE); + + if (free_dirname) +*************** +*** 1333,1336 **** +--- 1352,1369 ---- + return (NULL); + } ++ /* If we have a directory name with quoted characters, and we are ++ being called recursively to glob the directory portion of a pathname, ++ we need to dequote the directory name before returning it so the ++ caller can read the directory */ ++ if (directory_len > 0 && hasglob == 2 && (flags & GX_RECURSE) != 0) ++ { ++ dequote_pathname (directory_name); ++ directory_len = strlen (directory_name); ++ } ++ ++ /* We could check whether or not the dequoted directory_name is a ++ directory and return it here, returning the original directory_name ++ if not, but we don't do that yet. I'm not sure it matters. */ ++ + /* Handle GX_MARKDIRS here. */ + result[0] = (char *) malloc (directory_len + 1); +*** ../bash-5.0-patched/pathexp.c 2018-04-29 17:44:48.000000000 -0400 +--- b/pathexp.c 2019-01-31 20:19:41.000000000 -0500 +*************** +*** 66,74 **** + register int c; + char *send; +! int open; + + DECLARE_MBSTATE; + +! open = 0; + send = string + strlen (string); + +--- 66,74 ---- + register int c; + char *send; +! int open, bsquote; + + DECLARE_MBSTATE; + +! open = bsquote = 0; + send = string + strlen (string); + +*************** +*** 101,105 **** + globbing. */ + case '\\': +! return (*string != 0); + + case CTLESC: +--- 101,112 ---- + globbing. */ + case '\\': +! if (*string != '\0' && *string != '/') +! { +! bsquote = 1; +! string++; +! continue; +! } +! else if (*string == 0) +! return (0); + + case CTLESC: +*************** +*** 118,122 **** + #endif + } +! return (0); + } + +--- 125,130 ---- + #endif + } +! +! return (bsquote ? 2 : 0); + } + +*** ../bash-5.0-patched/bashline.c 2019-01-16 16:13:21.000000000 -0500 +--- b/bashline.c 2019-02-22 09:29:08.000000000 -0500 +*************** +*** 3753,3757 **** + + case '\\': +! if (*string == 0) + return (0); + } +--- 3766,3770 ---- + + case '\\': +! if (*string++ == 0) + return (0); + } +*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 +--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 2 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 3 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/package/bash/0004-bash50-004.patch b/package/bash/0004-bash50-004.patch new file mode 100644 index 00000000..b2735860 --- /dev/null +++ b/package/bash/0004-bash50-004.patch @@ -0,0 +1,57 @@ +From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-004 + +Signed-off-by: Pascal de Bruijn + + BASH PATCH REPORT + ================= + +Bash-Release: 5.0 +Patch-ID: bash50-004 + +Bug-Reported-by: Daniel Kahn Gillmor +Bug-Reference-ID: <87lg0g8aiw.fsf@fifthhorseman.net> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-04/msg00076.html + +Bug-Description: + +In bash-5.0, the `wait' builtin without arguments waits for all children of the +shell. This includes children it `inherited' at shell invocation time. This +patch modifies the behavior to not wait for these inherited children, some +of which might be long-lived. + +Patch (apply with `patch -p0'): + +*** ../bash-5.0-patched/jobs.c 2018-12-06 11:44:34.000000000 -0500 +--- b/jobs.c 2019-04-12 15:15:10.000000000 -0400 +*************** +*** 2489,2496 **** + wait_procsubs (); + reap_procsubs (); +! #if 1 + /* We don't want to wait indefinitely if we have stopped children. */ +- /* XXX - should add a loop that goes through the list of process +- substitutions and waits for each proc in turn before this code. */ + if (any_stopped == 0) + { +--- 2490,2495 ---- + wait_procsubs (); + reap_procsubs (); +! #if 0 + /* We don't want to wait indefinitely if we have stopped children. */ + if (any_stopped == 0) + { +*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 +--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 3 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 4 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/package/bash/0005-bash50-005.patch b/package/bash/0005-bash50-005.patch new file mode 100644 index 00000000..df1772f9 --- /dev/null +++ b/package/bash/0005-bash50-005.patch @@ -0,0 +1,114 @@ +From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-005 + +Signed-off-by: Pascal de Bruijn + + BASH PATCH REPORT + ================= + +Bash-Release: 5.0 +Patch-ID: bash50-005 + +Bug-Reported-by: Brad Spencer +Bug-Reference-ID: <1b993ff2-ce4f-662a-6be4-393457362e47@blackberry.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00250.html + +Bug-Description: + +In certain cases, bash optimizes out a fork() call too early and prevents +traps from running. + +Patch (apply with `patch -p0'): + +*** ../bash-5.0-patched/command.h 2018-07-20 21:16:31.000000000 -0400 +--- b/command.h 2019-02-20 11:09:36.000000000 -0500 +*************** +*** 187,190 **** +--- 188,192 ---- + #define CMD_LASTPIPE 0x2000 + #define CMD_STDPATH 0x4000 /* use standard path for command lookup */ ++ #define CMD_TRY_OPTIMIZING 0x8000 /* try to optimize this simple command */ + + /* What a command looks like. */ +*** ../bash-5.0-patched/builtins/evalstring.c 2018-12-26 11:19:21.000000000 -0500 +--- b/builtins/evalstring.c 2019-01-29 14:15:19.000000000 -0500 +*************** +*** 101,104 **** +--- 101,113 ---- + } + ++ int ++ can_optimize_connection (command) ++ COMMAND *command; ++ { ++ return (*bash_input.location.string == '\0' && ++ (command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR || command->value.Connection->connector == ';') && ++ command->value.Connection->second->type == cm_simple); ++ } ++ + void + optimize_fork (command) +*************** +*** 106,110 **** + { + if (command->type == cm_connection && +! (command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR) && + should_suppress_fork (command->value.Connection->second)) + { +--- 115,120 ---- + { + if (command->type == cm_connection && +! (command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR || command->value.Connection->connector == ';') && +! (command->value.Connection->second->flags & CMD_TRY_OPTIMIZING) && + should_suppress_fork (command->value.Connection->second)) + { +*************** +*** 413,418 **** + command->value.Simple->flags |= CMD_NO_FORK; + } +! else if (command->type == cm_connection) +! optimize_fork (command); + #endif /* ONESHOT */ + +--- 423,438 ---- + command->value.Simple->flags |= CMD_NO_FORK; + } +! +! /* Can't optimize forks out here execept for simple commands. +! This knows that the parser sets up commands as left-side heavy +! (&& and || are left-associative) and after the single parse, +! if we are at the end of the command string, the last in a +! series of connection commands is +! command->value.Connection->second. */ +! else if (command->type == cm_connection && can_optimize_connection (command)) +! { +! command->value.Connection->second->flags |= CMD_TRY_OPTIMIZING; +! command->value.Connection->second->value.Simple->flags |= CMD_TRY_OPTIMIZING; +! } + #endif /* ONESHOT */ + +*** ../bash-5.0-patched/execute_cmd.c 2018-12-05 09:05:14.000000000 -0500 +--- b/execute_cmd.c 2019-01-25 15:59:00.000000000 -0500 +*************** +*** 2768,2771 **** +--- 2768,2773 ---- + (exec_result != EXECUTION_SUCCESS))) + { ++ optimize_fork (command); ++ + second = command->value.Connection->second; + if (ignore_return && second) +*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 +--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 4 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 5 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/package/bash/0006-bash50-006.patch b/package/bash/0006-bash50-006.patch new file mode 100644 index 00000000..e447989d --- /dev/null +++ b/package/bash/0006-bash50-006.patch @@ -0,0 +1,51 @@ +From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-006 + +Signed-off-by: Pascal de Bruijn + + BASH PATCH REPORT + ================= + +Bash-Release: 5.0 +Patch-ID: bash50-006 + +Bug-Reported-by: Tomas Mozes +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-03/msg00037.html + +Bug-Description: + +Bash-5.0 did not build successfully if SYSLOG_HISTORY was defined without +also defining SYSLOG_SHOPT. + +Patch (apply with `patch -p0'): + +*** ../bash-5.0-patched/builtins/shopt.def 2018-10-05 14:49:02.000000000 -0400 +--- b/builtins/shopt.def 2019-01-23 09:55:22.000000000 -0500 +*************** +*** 123,127 **** + #endif + +! #if defined (SYSLOG_HISTORY) && defined (SYSLOG_SHOPT) + extern int syslog_history; + #endif +--- 123,127 ---- + #endif + +! #if defined (SYSLOG_HISTORY) + extern int syslog_history; + #endif +*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 +--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 5 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 6 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/package/bash/0007-bash50-007.patch b/package/bash/0007-bash50-007.patch new file mode 100644 index 00000000..164dfcc9 --- /dev/null +++ b/package/bash/0007-bash50-007.patch @@ -0,0 +1,66 @@ +From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-007 + +Signed-off-by: Pascal de Bruijn + + BASH PATCH REPORT + ================= + +Bash-Release: 5.0 +Patch-ID: bash50-007 + +Bug-Reported-by: Grisha Levit +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-02/msg00067.html + +Bug-Description: + +Running `exec' when job control was disabled, even temporarily, but after it +had been initialized, could leave the terminal in the wrong process group for +the executed process. + +Patch (apply with `patch -p0'): + +*** ../bash-5.0-patched/jobs.c 2018-12-06 11:44:34.000000000 -0500 +--- b/jobs.c 2019-04-12 15:15:10.000000000 -0400 +*************** +*** 4838,4850 **** + { + if (job_control) +! { +! terminate_stopped_jobs (); + +! if (original_pgrp >= 0) +! give_terminal_to (original_pgrp, 1); +! } + +! if (original_pgrp >= 0) +! setpgid (0, original_pgrp); + } + +--- 4838,4848 ---- + { + if (job_control) +! terminate_stopped_jobs (); + +! if (original_pgrp >= 0 && terminal_pgrp != original_pgrp) +! give_terminal_to (original_pgrp, 1); + +! if (original_pgrp >= 0 && setpgid (0, original_pgrp) == 0) +! shell_pgrp = original_pgrp; + } + +*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 +--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 6 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 7 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/package/bash/0008-bash50-008.patch b/package/bash/0008-bash50-008.patch new file mode 100644 index 00000000..b571c923 --- /dev/null +++ b/package/bash/0008-bash50-008.patch @@ -0,0 +1,72 @@ +From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-008 + +Signed-off-by: Pascal de Bruijn + + BASH PATCH REPORT + ================= + +Bash-Release: 5.0 +Patch-ID: bash50-008 + +Bug-Reported-by: Michael Albinus +Bug-Reference-ID: <87bm36k3kz.fsf@gmx.de> +Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-02/msg00111.html + +Bug-Description: + +When HISTSIZE is set to 0, history expansion can leave the history length +set to an incorrect value, leading to subsequent attempts to access invalid +memory. + +Patch (apply with `patch -p0'): + +*** ../bash-5.0-patched/bashhist.c 2018-07-05 22:41:14.000000000 -0400 +--- b/bashhist.c 2019-02-20 16:20:04.000000000 -0500 +*************** +*** 561,573 **** + if (!history_expansion_inhibited && history_expansion && history_expansion_p (line)) + { + /* If we are expanding the second or later line of a multi-line + command, decrease history_length so references to history expansions + in these lines refer to the previous history entry and not the + current command. */ + if (history_length > 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1) + history_length--; + expanded = history_expand (line, &history_value); + if (history_length >= 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1) +! history_length++; + + if (expanded) +--- 561,576 ---- + if (!history_expansion_inhibited && history_expansion && history_expansion_p (line)) + { ++ int old_len; ++ + /* If we are expanding the second or later line of a multi-line + command, decrease history_length so references to history expansions + in these lines refer to the previous history entry and not the + current command. */ ++ old_len = history_length; + if (history_length > 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1) + history_length--; + expanded = history_expand (line, &history_value); + if (history_length >= 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1) +! history_length = old_len; + + if (expanded) + +*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 +--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 7 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 8 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/package/bash/0009-bash50-009.patch b/package/bash/0009-bash50-009.patch new file mode 100644 index 00000000..c53f464a --- /dev/null +++ b/package/bash/0009-bash50-009.patch @@ -0,0 +1,46 @@ +From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-009 + +Signed-off-by: Pascal de Bruijn + + BASH PATCH REPORT + ================= + +Bash-Release: 5.0 +Patch-ID: bash50-009 + +Bug-Reported-by: chet.ramey@case.edu +Bug-Reference-ID: +Bug-Reference-URL: + +Bug-Description: + +The history file reading code doesn't close the file descriptor open to +the history file when it encounters a zero-length file. + +Patch (apply with `patch -p0'): + +*** ../bash-5.0-patched/lib/readline/histfile.c 2018-06-11 09:14:52.000000000 -0400 +--- b/lib/readline/histfile.c 2019-05-16 15:55:57.000000000 -0400 +*************** +*** 306,309 **** +--- 312,316 ---- + { + free (input); ++ close (file); + return 0; /* don't waste time if we don't have to */ + } +*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 +--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 8 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 9 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/package/bash/0010-bash50-010.patch b/package/bash/0010-bash50-010.patch new file mode 100644 index 00000000..ebc06a66 --- /dev/null +++ b/package/bash/0010-bash50-010.patch @@ -0,0 +1,176 @@ +From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-010 + +Signed-off-by: Pascal de Bruijn + + BASH PATCH REPORT + ================= + +Bash-Release: 5.0 +Patch-ID: bash50-010 + +Bug-Reported-by: Thorsten Glaser +Bug-Reference-ID: <156622962831.19438.16374961114836556294.reportbug@tglase.lan.tarent.de> +Bug-Reference-URL: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=935115 + +Bug-Description: + +Bash-5.0 changed the way assignment statements preceding special builtins +and shell functions were handled in posix mode. They automatically created +or modified global variables instead of modifying existing local variables +as in bash-4.4. + +The bash-4.4 posix-mode semantics were buggy, and resulted in creating +local variables where they were not intended and modifying global variables +and local variables simultaneously. + +The bash-5.0 changes were intended to fix this issue, but did not preserve +enough backwards compatibility. The posix standard also changed what it +required in these cases, so bash-5.0 is not bound by the strict conformance +requirements that existed in previous issues of the standard. + +This patch modifies the bash-5.0 posix mode behavior in an effort to restore +some backwards compatibility and rationalize the behavior in the presence of +local variables. It + +1. Changes the assignment semantics to be more similar to standalone assignment + statements: assignments preceding a function call or special builtin while + executing in a shell function will modify the value of a local variable + with the same name for the duration of the function's execution; + +2. Changes assignments preceding shell function calls or special builtins + from within a shell function to no longer create or modify global variables + in the presence of a local variable with the same name; + +3. Assignment statements preceding a shell function call or special builtin + at the global scope continue to modify the (global) calling environment, + but are unaffected by assignments preceding function calls or special + builtins within a function, as described in item 2. This is also similar + to the behavior of a standalone assignment statement. + +Patch (apply with `patch -p0'): + +*** ../bash-5.0-patched/variables.c 2018-12-18 11:07:21.000000000 -0500 +--- b/variables.c 2019-08-22 10:53:44.000000000 -0400 +*************** +*** 4461,4467 **** + + /* Take a variable from an assignment statement preceding a posix special +! builtin (including `return') and create a global variable from it. This +! is called from merge_temporary_env, which is only called when in posix +! mode. */ + static void + push_posix_temp_var (data) +--- 4461,4467 ---- + + /* Take a variable from an assignment statement preceding a posix special +! builtin (including `return') and create a variable from it as if a +! standalone assignment statement had been performed. This is called from +! merge_temporary_env, which is only called when in posix mode. */ + static void + push_posix_temp_var (data) +*************** +*** 4473,4486 **** + var = (SHELL_VAR *)data; + +! binding_table = global_variables->table; +! if (binding_table == 0) +! binding_table = global_variables->table = hash_create (VARIABLES_HASH_BUCKETS); +! +! v = bind_variable_internal (var->name, value_cell (var), binding_table, 0, ASS_FORCE|ASS_NOLONGJMP); + + /* global variables are no longer temporary and don't need propagating. */ +! var->attributes &= ~(att_tempvar|att_propagate); + if (v) +! v->attributes |= var->attributes; + + if (find_special_var (var->name) >= 0) +--- 4473,4497 ---- + var = (SHELL_VAR *)data; + +! /* Just like do_assignment_internal(). This makes assignments preceding +! special builtins act like standalone assignment statements when in +! posix mode, satisfying the posix requirement that this affect the +! "current execution environment." */ +! v = bind_variable (var->name, value_cell (var), ASS_FORCE|ASS_NOLONGJMP); +! +! /* If this modifies an existing local variable, v->context will be non-zero. +! If it comes back with v->context == 0, we bound at the global context. +! Set binding_table appropriately. It doesn't matter whether it's correct +! if the variable is local, only that it's not global_variables->table */ +! binding_table = v->context ? shell_variables->table : global_variables->table; + + /* global variables are no longer temporary and don't need propagating. */ +! if (binding_table == global_variables->table) +! var->attributes &= ~(att_tempvar|att_propagate); +! + if (v) +! { +! v->attributes |= var->attributes; +! v->attributes &= ~att_tempvar; /* not a temp var now */ +! } + + if (find_special_var (var->name) >= 0) +*************** +*** 4576,4587 **** + { + int i; + + tempvar_list = strvec_create (HASH_ENTRIES (temporary_env) + 1); + tempvar_list[tvlist_ind = 0] = 0; +! +! hash_flush (temporary_env, pushf); +! hash_dispose (temporary_env); + temporary_env = (HASH_TABLE *)NULL; + + tempvar_list[tvlist_ind] = 0; + +--- 4587,4601 ---- + { + int i; ++ HASH_TABLE *disposer; + + tempvar_list = strvec_create (HASH_ENTRIES (temporary_env) + 1); + tempvar_list[tvlist_ind = 0] = 0; +! +! disposer = temporary_env; + temporary_env = (HASH_TABLE *)NULL; + ++ hash_flush (disposer, pushf); ++ hash_dispose (disposer); ++ + tempvar_list[tvlist_ind] = 0; + +*** ../bash-5.0-patched/tests/varenv.right 2018-12-17 15:39:48.000000000 -0500 +--- b/tests/varenv.right 2019-08-22 16:05:25.000000000 -0400 +*************** +*** 147,153 **** + outside: declare -- var="one" + inside: declare -x var="value" +! outside: declare -x var="value" +! inside: declare -- var="local" +! outside: declare -x var="global" + foo= environment foo= + foo=foo environment foo=foo +--- 147,153 ---- + outside: declare -- var="one" + inside: declare -x var="value" +! outside: declare -- var="outside" +! inside: declare -x var="global" +! outside: declare -- var="outside" + foo= environment foo= + foo=foo environment foo=foo +*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 +--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 9 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 10 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/package/bash/0011-bash50-011.patch b/package/bash/0011-bash50-011.patch new file mode 100644 index 00000000..555d0f8f --- /dev/null +++ b/package/bash/0011-bash50-011.patch @@ -0,0 +1,63 @@ +From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-011 + +Signed-off-by: Pascal de Bruijn + + BASH PATCH REPORT + ================= + +Bash-Release: 5.0 +Patch-ID: bash50-011 + +Bug-Reported-by: Matt Whitlock +Bug-Reference-ID: +Bug-Reference-URL: https://savannah.gnu.org/support/?109671 + +Bug-Description: + +The conditional command did not perform appropriate quoted null character +removal on its arguments, causing syntax errors and attempts to stat +invalid pathnames. + +Patch (apply with `patch -p0'): + +*** ../bash-5.0-patched/subst.c 2018-12-22 17:43:37.000000000 -0500 +--- b/subst.c 2019-04-14 13:25:41.000000000 -0400 +*************** +*** 3626,3630 **** + SPECIAL is 2, this is an rhs argument for the =~ operator, and should + be quoted appropriately for regcomp/regexec. The caller is responsible +! for removing the backslashes if the unquoted word is needed later. */ + char * + cond_expand_word (w, special) +--- 3642,3648 ---- + SPECIAL is 2, this is an rhs argument for the =~ operator, and should + be quoted appropriately for regcomp/regexec. The caller is responsible +! for removing the backslashes if the unquoted word is needed later. In +! any case, since we don't perform word splitting, we need to do quoted +! null character removal. */ + char * + cond_expand_word (w, special) +*************** +*** 3647,3650 **** +--- 3665,3670 ---- + if (special == 0) /* LHS */ + { ++ if (l->word) ++ word_list_remove_quoted_nulls (l); + dequote_list (l); + r = string_list (l); +*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 +--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 10 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 11 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/package/bash/0012-bash50-012.patch b/package/bash/0012-bash50-012.patch new file mode 100644 index 00000000..d634932e --- /dev/null +++ b/package/bash/0012-bash50-012.patch @@ -0,0 +1,68 @@ +From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-012 + +Signed-off-by: Fabrice Fontaine + + BASH PATCH REPORT + ================= + +Bash-Release: 5.0 +Patch-ID: bash50-012 + +Bug-Reported-by: lessbug@qq.com +Bug-Reference-ID: +Bug-Reference-URL: + +Bug-Description: + +When using previous-history to go back beyond the beginning of the history list, +it's possible to move to an incorrect partial line. + +Patch (apply with `patch -p0'): + +*** ../bash-5.0-patched/lib/readline/misc.c 2017-07-07 17:30:12.000000000 -0400 +--- b/lib/readline/misc.c 2019-05-16 11:43:46.000000000 -0400 +*************** +*** 577,580 **** +--- 590,594 ---- + { + HIST_ENTRY *old_temp, *temp; ++ int had_saved_line; + + if (count < 0) +*************** +*** 589,592 **** +--- 603,607 ---- + + /* If we don't have a line saved, then save this one. */ ++ had_saved_line = _rl_saved_line_for_history != 0; + rl_maybe_save_line (); + +*************** +*** 612,616 **** + if (temp == 0) + { +! rl_maybe_unsave_line (); + rl_ding (); + } +--- 627,632 ---- + if (temp == 0) + { +! if (had_saved_line == 0) +! _rl_free_saved_history_line (); + rl_ding (); + } +*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 +--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 11 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 12 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/package/bash/0013-bash50-013.patch b/package/bash/0013-bash50-013.patch new file mode 100644 index 00000000..1c99f5c8 --- /dev/null +++ b/package/bash/0013-bash50-013.patch @@ -0,0 +1,77 @@ +From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-013 + +Signed-off-by: Fabrice Fontaine + + BASH PATCH REPORT + ================= + +Bash-Release: 5.0 +Patch-ID: bash50-013 + +Bug-Reported-by: HIROSE Masaaki +Bug-Reference-ID: +Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-05/msg00038.html + +Bug-Description: + +Reading history entries with timestamps can result in history entries joined +by linefeeds. + +Patch (apply with `patch -p0'): + +*** ../bash-5.0-patched/lib/readline/histfile.c 2018-06-11 09:14:52.000000000 -0400 +--- b/lib/readline/histfile.c 2019-05-16 15:55:57.000000000 -0400 +*************** +*** 370,376 **** + + has_timestamps = HIST_TIMESTAMP_START (buffer); +! history_multiline_entries += has_timestamps && history_write_timestamps; + + /* Skip lines until we are at FROM. */ + for (line_start = line_end = buffer; line_end < bufend && current_line < from; line_end++) + if (*line_end == '\n') +--- 370,378 ---- + + has_timestamps = HIST_TIMESTAMP_START (buffer); +! history_multiline_entries += has_timestamps && history_write_timestamps; + + /* Skip lines until we are at FROM. */ ++ if (has_timestamps) ++ last_ts = buffer; + for (line_start = line_end = buffer; line_end < bufend && current_line < from; line_end++) + if (*line_end == '\n') +*************** +*** 381,385 **** +--- 383,398 ---- + if (HIST_TIMESTAMP_START(p) == 0) + current_line++; ++ else ++ last_ts = p; + line_start = p; ++ /* If we are at the last line (current_line == from) but we have ++ timestamps (has_timestamps), then line_start points to the ++ text of the last command, and we need to skip to its end. */ ++ if (current_line >= from && has_timestamps) ++ { ++ for (line_end = p; line_end < bufend && *line_end != '\n'; line_end++) ++ ; ++ line_start = (*line_end == '\n') ? line_end + 1 : line_end; ++ } + } + + +*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 +--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 12 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 13 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/package/bash/0014-bash50-014.patch b/package/bash/0014-bash50-014.patch new file mode 100644 index 00000000..2aadbda8 --- /dev/null +++ b/package/bash/0014-bash50-014.patch @@ -0,0 +1,56 @@ +From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-014 + +Signed-off-by: Fabrice Fontaine + + BASH PATCH REPORT + ================= + +Bash-Release: 5.0 +Patch-ID: bash50-014 + +Bug-Reported-by: Johannes Hielscher +Bug-Reference-ID: <20190208205048.77c25a83@hordevm> +Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-02/msg00032.html + +Bug-Description: + +If the current line is empty, using the emacs C-xC-e binding to enter the +editor will edit the previous command instead of the current (empty) one. + +Patch (apply with `patch -p0'): + +*** ../bash-5.0-patched/bashline.c 2019-01-16 16:13:21.000000000 -0500 +--- b/bashline.c 2019-02-11 11:18:57.000000000 -0500 +*************** +*** 962,970 **** + finished with the command, so we should not ignore the last command */ + using_history (); +! if (rl_line_buffer[0]) +! { +! current_command_line_count++; /* for rl_newline above */ +! bash_add_history (rl_line_buffer); +! } + current_command_line_count = 0; /* for dummy history entry */ + bash_add_history (""); +--- 965,970 ---- + finished with the command, so we should not ignore the last command */ + using_history (); +! current_command_line_count++; /* for rl_newline above */ +! bash_add_history (rl_line_buffer); + current_command_line_count = 0; /* for dummy history entry */ + bash_add_history (""); +*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 +--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 13 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 14 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/package/bash/0015-bash50-015.patch b/package/bash/0015-bash50-015.patch new file mode 100644 index 00000000..d927f41a --- /dev/null +++ b/package/bash/0015-bash50-015.patch @@ -0,0 +1,82 @@ +From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-015 + +Signed-off-by: Fabrice Fontaine + + BASH PATCH REPORT + ================= + +Bash-Release: 5.0 +Patch-ID: bash50-015 + +Bug-Reported-by: Yu Kou +Bug-Reference-ID: +Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-05/msg00032.html + +Bug-Description: + +If alias expansion is enabled when processing the command argument to the +`-c' option, an alias is defined in that command, and the command ends with +the invocation of that alias, the shell's command parser can prematurely +terminate before the entire command is executed. + +Patch (apply with `patch -p0'): + +*** ../bash-20190426/builtins/evalstring.c 2019-01-29 14:15:19.000000000 -0500 +--- b/builtins/evalstring.c 2019-05-15 14:19:36.000000000 -0400 +*************** +*** 92,95 **** +--- 92,96 ---- + running_trap == 0 && + *bash_input.location.string == '\0' && ++ parser_expanding_alias () == 0 && + command->type == cm_simple && + signal_is_trapped (EXIT_TRAP) == 0 && +*************** +*** 106,109 **** +--- 107,111 ---- + { + return (*bash_input.location.string == '\0' && ++ parser_expanding_alias () == 0 && + (command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR || command->value.Connection->connector == ';') && + command->value.Connection->second->type == cm_simple); +*************** +*** 291,295 **** + with_input_from_string (string, from_file); + clear_shell_input_line (); +! while (*(bash_input.location.string)) + { + command = (COMMAND *)NULL; +--- 293,297 ---- + with_input_from_string (string, from_file); + clear_shell_input_line (); +! while (*(bash_input.location.string) || parser_expanding_alias ()) + { + command = (COMMAND *)NULL; +*************** +*** 546,550 **** + + with_input_from_string (string, from_file); +! while (*(bash_input.location.string)) + { + command = (COMMAND *)NULL; +--- 548,552 ---- + + with_input_from_string (string, from_file); +! while (*(bash_input.location.string)) /* XXX - parser_expanding_alias () ? */ + { + command = (COMMAND *)NULL; +*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 +--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 14 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 15 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/package/bash/0016-bash50-016.patch b/package/bash/0016-bash50-016.patch new file mode 100644 index 00000000..8dec1fb3 --- /dev/null +++ b/package/bash/0016-bash50-016.patch @@ -0,0 +1,62 @@ +From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-016 + +Signed-off-by: Fabrice Fontaine + + BASH PATCH REPORT + ================= + +Bash-Release: 5.0 +Patch-ID: bash50-016 + +Bug-Reported-by: sunnycemetery@gmail.com +Bug-Reference-ID: <20190316041534.GB22884@midnight> +Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-03/msg00070.html + +Bug-Description: + +Bash waits too long to reap /dev/fd process substitutions used as redirections +with loops and group commands, which can lead to file descriptor exhaustion. + +Patch (apply with `patch -p0'): + +*** ../bash-5.0-patched/execute_cmd.c 2019-04-19 15:46:36.000000000 -0400 +--- b/execute_cmd.c 2019-07-01 16:45:49.000000000 -0400 +*************** +*** 1104,1107 **** +--- 1085,1104 ---- + discard_unwind_frame ("internal_fifos"); + } ++ # if defined (HAVE_DEV_FD) ++ /* Reap process substitutions at the end of loops */ ++ switch (command->type) ++ { ++ case cm_while: ++ case cm_until: ++ case cm_for: ++ case cm_group: ++ # if defined (ARITH_FOR_COMMAND) ++ case cm_arith_for: ++ # endif ++ reap_procsubs (); ++ default: ++ break; ++ } ++ # endif /* HAVE_DEV_FD */ + #endif + + +*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 +--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 15 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 16 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/package/bash/0017-bash50-017.patch b/package/bash/0017-bash50-017.patch new file mode 100644 index 00000000..6758b203 --- /dev/null +++ b/package/bash/0017-bash50-017.patch @@ -0,0 +1,293 @@ +From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash55-017 + +Signed-off-by: Peter Korsgaard + + BASH PATCH REPORT + ================= + +Bash-Release: 5.0 +Patch-ID: bash50-017 + +Bug-Reported-by: Valentin Lab +Bug-Reference-ID: +Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2020-03/msg00062.html + +Bug-Description: + +There were cases where patch 16 reaped process substitution file descriptors +(or FIFOs) and processes to early. This is a better fix for the problem that +bash50-016 attempted to solve. + +Patch (apply with `patch -p0'): + +*** bash-5.0-patched/subst.c 2019-08-29 11:16:49.000000000 -0400 +--- b/subst.c 2020-04-02 16:24:19.000000000 -0400 +*************** +*** 5337,5341 **** + } + +! char * + copy_fifo_list (sizep) + int *sizep; +--- b/5337,5341 ---- + } + +! void * + copy_fifo_list (sizep) + int *sizep; +*************** +*** 5343,5347 **** + if (sizep) + *sizep = 0; +! return (char *)NULL; + } + +--- b/5343,5347 ---- + if (sizep) + *sizep = 0; +! return (void *)NULL; + } + +*************** +*** 5409,5414 **** + if (fifo_list[i].file) + { +! fifo_list[j].file = fifo_list[i].file; +! fifo_list[j].proc = fifo_list[i].proc; + j++; + } +--- b/5409,5419 ---- + if (fifo_list[i].file) + { +! if (i != j) +! { +! fifo_list[j].file = fifo_list[i].file; +! fifo_list[j].proc = fifo_list[i].proc; +! fifo_list[i].file = (char *)NULL; +! fifo_list[i].proc = 0; +! } + j++; + } +*************** +*** 5426,5433 **** + void + close_new_fifos (list, lsize) +! char *list; + int lsize; + { + int i; + + if (list == 0) +--- b/5431,5439 ---- + void + close_new_fifos (list, lsize) +! void *list; + int lsize; + { + int i; ++ char *plist; + + if (list == 0) +*************** +*** 5437,5442 **** + } + +! for (i = 0; i < lsize; i++) +! if (list[i] == 0 && i < fifo_list_size && fifo_list[i].proc != -1) + unlink_fifo (i); + +--- b/5443,5448 ---- + } + +! for (plist = (char *)list, i = 0; i < lsize; i++) +! if (plist[i] == 0 && i < fifo_list_size && fifo_list[i].proc != -1) + unlink_fifo (i); + +*************** +*** 5560,5568 **** + } + +! char * + copy_fifo_list (sizep) + int *sizep; + { +! char *ret; + + if (nfds == 0 || totfds == 0) +--- b/5566,5574 ---- + } + +! void * + copy_fifo_list (sizep) + int *sizep; + { +! void *ret; + + if (nfds == 0 || totfds == 0) +*************** +*** 5570,5579 **** + if (sizep) + *sizep = 0; +! return (char *)NULL; + } + + if (sizep) + *sizep = totfds; +! ret = (char *)xmalloc (totfds * sizeof (pid_t)); + return (memcpy (ret, dev_fd_list, totfds * sizeof (pid_t))); + } +--- b/5576,5585 ---- + if (sizep) + *sizep = 0; +! return (void *)NULL; + } + + if (sizep) + *sizep = totfds; +! ret = xmalloc (totfds * sizeof (pid_t)); + return (memcpy (ret, dev_fd_list, totfds * sizeof (pid_t))); + } +*************** +*** 5648,5655 **** + void + close_new_fifos (list, lsize) +! char *list; + int lsize; + { + int i; + + if (list == 0) +--- b/5654,5662 ---- + void + close_new_fifos (list, lsize) +! void *list; + int lsize; + { + int i; ++ pid_t *plist; + + if (list == 0) +*************** +*** 5659,5664 **** + } + +! for (i = 0; i < lsize; i++) +! if (list[i] == 0 && i < totfds && dev_fd_list[i]) + unlink_fifo (i); + +--- b/5666,5671 ---- + } + +! for (plist = (pid_t *)list, i = 0; i < lsize; i++) +! if (plist[i] == 0 && i < totfds && dev_fd_list[i]) + unlink_fifo (i); + +*** bash-5.0-patched/subst.h 2018-10-21 18:46:09.000000000 -0400 +--- b/subst.h 2020-04-02 16:29:28.000000000 -0400 +*************** +*** 274,280 **** + extern void unlink_fifo __P((int)); + +! extern char *copy_fifo_list __P((int *)); +! extern void unlink_new_fifos __P((char *, int)); +! extern void close_new_fifos __P((char *, int)); + + extern void clear_fifo_list __P((void)); +--- b/274,279 ---- + extern void unlink_fifo __P((int)); + +! extern void *copy_fifo_list __P((int *)); +! extern void close_new_fifos __P((void *, int)); + + extern void clear_fifo_list __P((void)); +*** bash-5.0-patched/execute_cmd.c 2020-02-06 20:16:48.000000000 -0500 +--- b/execute_cmd.c 2020-04-02 17:00:10.000000000 -0400 +*************** +*** 565,569 **** + #if defined (PROCESS_SUBSTITUTION) + volatile int ofifo, nfifo, osize, saved_fifo; +! volatile char *ofifo_list; + #endif + +--- b/565,569 ---- + #if defined (PROCESS_SUBSTITUTION) + volatile int ofifo, nfifo, osize, saved_fifo; +! volatile void *ofifo_list; + #endif + +*************** +*** 751,760 **** + # endif + +! if (variable_context != 0) /* XXX - also if sourcelevel != 0? */ + { + ofifo = num_fifos (); + ofifo_list = copy_fifo_list ((int *)&osize); + begin_unwind_frame ("internal_fifos"); +! add_unwind_protect (xfree, ofifo_list); + saved_fifo = 1; + } +--- b/751,762 ---- + # endif + +! /* XXX - also if sourcelevel != 0? */ +! if (variable_context != 0) + { + ofifo = num_fifos (); + ofifo_list = copy_fifo_list ((int *)&osize); + begin_unwind_frame ("internal_fifos"); +! if (ofifo_list) +! add_unwind_protect (xfree, ofifo_list); + saved_fifo = 1; + } +*************** +*** 1100,1123 **** + nfifo = num_fifos (); + if (nfifo > ofifo) +! close_new_fifos ((char *)ofifo_list, osize); + free ((void *)ofifo_list); + discard_unwind_frame ("internal_fifos"); + } +- # if defined (HAVE_DEV_FD) +- /* Reap process substitutions at the end of loops */ +- switch (command->type) +- { +- case cm_while: +- case cm_until: +- case cm_for: +- case cm_group: +- # if defined (ARITH_FOR_COMMAND) +- case cm_arith_for: +- # endif +- reap_procsubs (); +- default: +- break; +- } +- # endif /* HAVE_DEV_FD */ + #endif + +--- b/1102,1109 ---- + nfifo = num_fifos (); + if (nfifo > ofifo) +! close_new_fifos ((void *)ofifo_list, osize); + free ((void *)ofifo_list); + discard_unwind_frame ("internal_fifos"); + } + #endif + + +*** bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 +--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 16 + + #endif /* _PATCHLEVEL_H_ */ +--- b/26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 17 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/package/bash/0018-bash50-018.patch b/package/bash/0018-bash50-018.patch new file mode 100644 index 00000000..efecb189 --- /dev/null +++ b/package/bash/0018-bash50-018.patch @@ -0,0 +1,49 @@ +From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash55-018 + +Signed-off-by: Peter Korsgaard + + BASH PATCH REPORT + ================= + +Bash-Release: 5.0 +Patch-ID: bash50-018 + +Bug-Reported-by: oguzismailuysal@gmail.com +Bug-Reference-ID: +Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-10/msg00098.html + +Bug-Description: + +In certain cases, bash does not perform quoted null removal on patterns +that are used as part of word expansions such as ${parameter##pattern}, so +empty patterns are treated as non-empty. + +Patch (apply with `patch -p0'): + +*** bash-5.0.17/subst.c 2020-04-02 17:14:58.000000000 -0400 +--- b/subst.c 2020-07-09 15:28:19.000000000 -0400 +*************** +*** 5113,5116 **** +--- b/5113,5118 ---- + (int *)NULL, (int *)NULL) + : (WORD_LIST *)0; ++ if (l) ++ word_list_remove_quoted_nulls (l); + pat = string_list (l); + dispose_words (l); + +*** bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 +--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 17 + + #endif /* _PATCHLEVEL_H_ */ +--- b/26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 18 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/package/bash/0019-input.h-add-missing-include-on-stdio.h.patch b/package/bash/0019-input.h-add-missing-include-on-stdio.h.patch new file mode 100644 index 00000000..fd008e94 --- /dev/null +++ b/package/bash/0019-input.h-add-missing-include-on-stdio.h.patch @@ -0,0 +1,38 @@ +From 4fa85c85b9a76afd3b19ed75bf17ccd2940f1f55 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 16 Feb 2020 16:18:48 +0100 +Subject: [PATCH] input.h: add missing include on stdio.h + +This will fix the following build failure on uclibc: + +test -n "/usr/lfs/hdd_v1/rc-buildroot-test/scripts/instance-2/output/host/bin/arm-linux-ranlib" && /usr/lfs/hdd_v1/rc-buildroot-test/scripts/instance-2/output/host/bin/arm-linux-ranlib libsh.a +In file included from ./exec.def:71: +../input.h:76:3: error: unknown type name 'FILE' + FILE *file; + ^~~~ + +Fixes: + - http://autobuild.buildroot.org/results/bfca306868df54c567215c45c8cdac838d02f567 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://savannah.gnu.org/support/?110196] +--- + input.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/input.h b/input.h +index 6aef1269..08b0fdea 100644 +--- a/input.h ++++ b/input.h +@@ -21,6 +21,8 @@ + #if !defined (_INPUT_H_) + #define _INPUT_H_ + ++#include ++ + #include "stdc.h" + + /* Function pointers can be declared as (Function *)foo. */ +-- +2.24.1 + diff --git a/package/bash/0020-locale.c-fix-build-without-wchar.patch b/package/bash/0020-locale.c-fix-build-without-wchar.patch new file mode 100644 index 00000000..15c5f2e4 --- /dev/null +++ b/package/bash/0020-locale.c-fix-build-without-wchar.patch @@ -0,0 +1,84 @@ +From 73ca494c60d46103f806325e6ccbe9e400238008 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 23 Feb 2020 11:41:09 +0100 +Subject: [PATCH] locale.c: fix build without wchar + +bash unconditionally builds locale.c which depends on mblen since +version 5.0 and +https://github.com/bminor/bash/commit/d233b485e83c3a784b803fb894280773f16f2deb + +This results in the following build failure if wchar is not available: + +/home/buildroot/autobuild/run/instance-0/output-1/host/bin/microblazeel-buildroot-linux-uclibc-gcc -L./builtins -L/home/buildroot/autobuild/run/instance-0/output-1/host/microblazeel-buildroot-linux-uclibc/sysroot/lib -L/home/buildroot/autobuild/run/instance-0/output-1/host/microblazeel-buildroot-linux-uclibc/sysroot/lib -L./lib/glob -L./lib/tilde -L./lib/sh -rdynamic -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -Wno-parentheses -Wno-format-security -o bash shell.o eval.o y.tab.o general.o make_cmd.o print_cmd.o dispose_cmd.o execute_cmd.o variables.o copy_cmd.o error.o expr.o flags.o jobs.o subst.o hashcmd.o hashlib.o mailcheck.o trap.o input.o unwind_prot.o pathexp.o sig.o test.o version.o alias.o array.o arrayfunc.o assoc.o braces.o bracecomp.o bashhist.o bashline.o list.o stringlib.o locale.o findcmd.o redir.o pcomplete.o pcomplib.o syntax.o xmalloc.o signames.o -lbuiltins -lglob -lsh -lreadline -lhistory -lcurses -ltilde -ldl +/home/buildroot/autobuild/run/instance-0/output-1/host/lib/gcc/microblazeel-buildroot-linux-uclibc/8.3.0/../../../../microblazeel-buildroot-linux-uclibc/bin/ld: locale.o: in function `set_default_locale': +(.text+0x260): undefined reference to `mblen' + +To fix this issue, don't use mblen if HANDLE_MULTIBYTE is not defined, +an other possibility would be to use MBLEN wrapper defined in shmbutil.h + +Fixes: + - http://autobuild.buildroot.org/results/298fb9c785e137bff432dd304eb56986e54ce3ed + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://savannah.gnu.org/support/index.php?110200] +--- + locale.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/locale.c b/locale.c +index d62547f6..a64c5b4b 100644 +--- a/locale.c ++++ b/locale.c +@@ -86,7 +86,9 @@ set_default_locale () + + locale_mb_cur_max = MB_CUR_MAX; + locale_utf8locale = locale_isutf8 (default_locale); ++#if defined (HANDLE_MULTIBYTE) + locale_shiftstates = mblen ((char *)NULL, 0); ++#endif + } + + /* Set default values for LC_CTYPE, LC_COLLATE, LC_MESSAGES, LC_NUMERIC and +@@ -107,7 +109,9 @@ set_default_locale_vars () + locale_setblanks (); + locale_mb_cur_max = MB_CUR_MAX; + locale_utf8locale = locale_isutf8 (lc_all); ++# if defined (HANDLE_MULTIBYTE) + locale_shiftstates = mblen ((char *)NULL, 0); ++# endif + u32reset (); + } + # endif +@@ -211,7 +215,9 @@ set_locale_var (var, value) + /* if LC_ALL == "", reset_locale_vars has already called this */ + if (*lc_all && x) + locale_utf8locale = locale_isutf8 (lc_all); ++# if defined (HANDLE_MULTIBYTE) + locale_shiftstates = mblen ((char *)NULL, 0); ++# endif + u32reset (); + return r; + #else +@@ -231,7 +237,9 @@ set_locale_var (var, value) + /* if setlocale() returns NULL, the locale is not changed */ + if (x) + locale_utf8locale = locale_isutf8 (x); ++# if defined (HANDLE_MULTIBYTE) + locale_shiftstates = mblen ((char *)NULL, 0); ++# endif + u32reset (); + } + # endif +@@ -368,7 +376,9 @@ reset_locale_vars () + locale_mb_cur_max = MB_CUR_MAX; + if (x) + locale_utf8locale = locale_isutf8 (x); ++# if defined (HANDLE_MULTIBYTE) + locale_shiftstates = mblen ((char *)NULL, 0); ++# endif + u32reset (); + #endif + return 1; +-- +2.25.0 + diff --git a/package/bash/Config.in b/package/bash/Config.in new file mode 100644 index 00000000..5a9ebb8d --- /dev/null +++ b/package/bash/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_BASH + bool "bash" + # uses fork() + depends on BR2_USE_MMU + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_READLINE + help + The standard GNU Bourne again shell. + + http://tiswww.case.edu/php/chet/bash/bashtop.html diff --git a/package/bash/bash.hash b/package/bash/bash.hash new file mode 100644 index 00000000..9113b165 --- /dev/null +++ b/package/bash/bash.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature from +# http://ftp.gnu.org/gnu/bash/bash-4.4.18.tar.gz.sig +sha256 b4a80f2ac66170b2913efbfb9f2594f1f76c7b1afd11f799e22035d63077fb4d bash-5.0.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/bash/bash.mk b/package/bash/bash.mk new file mode 100644 index 00000000..2e163bb5 --- /dev/null +++ b/package/bash/bash.mk @@ -0,0 +1,58 @@ +################################################################################ +# +# bash +# +################################################################################ + +BASH_VERSION = 5.0 +BASH_SITE = $(BR2_GNU_MIRROR)/bash +BASH_DEPENDENCIES = ncurses readline host-bison +BASH_LICENSE = GPL-3.0+ +BASH_LICENSE_FILES = COPYING +BASH_CPE_ID_VENDOR = gnu + +# We want the bash binary in /bin +BASH_CONF_OPTS = \ + --bindir=/bin \ + --with-installed-readline \ + --without-bash-malloc + +BASH_CONF_ENV += \ + ac_cv_rl_prefix="$(STAGING_DIR)" \ + ac_cv_rl_version="$(READLINE_VERSION)" \ + bash_cv_getcwd_malloc=yes \ + bash_cv_job_control_missing=present \ + bash_cv_sys_named_pipes=present \ + bash_cv_func_sigsetjmp=present \ + bash_cv_printf_a_format=yes + +# The static build needs some trickery +ifeq ($(BR2_STATIC_LIBS),y) +BASH_CONF_OPTS += --enable-static-link +# bash wants to redefine the getenv() function. To check whether this is +# possible, AC_TRY_RUN is used which is not possible in +# cross-compilation. +# On uClibc, redefining getenv is not possible; on glibc and musl it is. +# Related: +# http://lists.gnu.org/archive/html/bug-bash/2012-03/msg00052.html +ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y) +BASH_CONF_ENV += bash_cv_getenv_redef=no +else +BASH_CONF_ENV += bash_cv_getenv_redef=yes +endif +endif + +define BASH_REMOVE_UNUSED_FILES + rm -f $(TARGET_DIR)/bin/bashbug +endef +BASH_POST_INSTALL_TARGET_HOOKS += BASH_REMOVE_UNUSED_FILES + +# Add /bin/bash to /etc/shells otherwise some login tools like dropbear +# can reject the user connection. See man shells. +define BASH_ADD_MKSH_TO_SHELLS + grep -qsE '^/bin/bash$$' $(TARGET_DIR)/etc/shells \ + || echo "/bin/bash" >> $(TARGET_DIR)/etc/shells +endef +BASH_TARGET_FINALIZE_HOOKS += BASH_ADD_MKSH_TO_SHELLS + +$(eval $(autotools-package)) diff --git a/package/batctl/Config.in b/package/batctl/Config.in new file mode 100644 index 00000000..25574189 --- /dev/null +++ b/package/batctl/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_BATCTL + bool "batctl" + depends on BR2_TOOLCHAIN_HAS_THREADS # libnl + select BR2_PACKAGE_LIBNL + help + Batctl is the configuration and debugging tool for batman-adv. + + http://www.open-mesh.org/projects/batman-adv/wiki/Using-batctl + +comment "batctl needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/batctl/batctl.hash b/package/batctl/batctl.hash new file mode 100644 index 00000000..e8127aa2 --- /dev/null +++ b/package/batctl/batctl.hash @@ -0,0 +1,6 @@ +# From https://downloads.open-mesh.org/batman/releases/batman-adv-2020.2/batctl-2020.2.tar.gz.sha1 +sha1 e347fb126e2a8f6d21516296325afc043062e3bd batctl-2020.2.tar.gz +# Locally calculated +sha256 d29cdb53ee68abd5027eae07d9fd645b3f154e0d577efa2666c1334bb6d60efd batctl-2020.2.tar.gz +sha256 cecbf53d1148e13256ac29f8b900655b7fc8dc12d59939a95bc2323ea1747025 LICENSES/preferred/GPL-2.0 +sha256 323c587d0ccf10e376f8bf9a7f31fb4ca6078105194b42e0b1e0ee2bc9bde71f LICENSES/preferred/MIT diff --git a/package/batctl/batctl.mk b/package/batctl/batctl.mk new file mode 100644 index 00000000..229c042a --- /dev/null +++ b/package/batctl/batctl.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# batctl +# +################################################################################ + +BATCTL_VERSION = 2020.2 +BATCTL_SITE = http://downloads.open-mesh.org/batman/releases/batman-adv-$(BATCTL_VERSION) +BATCTL_LICENSE = GPL-2.0, MIT (batman_adv.h, list.h) +BATCTL_LICENSE_FILES = LICENSES/preferred/GPL-2.0 LICENSES/preferred/MIT +BATCTL_DEPENDENCIES = libnl host-pkgconf + +define BATCTL_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) all +endef + +define BATCTL_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + PREFIX=/usr DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/batman-adv/Config.in b/package/batman-adv/Config.in new file mode 100644 index 00000000..eae94fd1 --- /dev/null +++ b/package/batman-adv/Config.in @@ -0,0 +1,38 @@ +comment "batman-adv needs a Linux kernel to be built" + depends on !BR2_LINUX_KERNEL + +config BR2_PACKAGE_BATMAN_ADV + bool "batman-adv" + depends on BR2_LINUX_KERNEL + help + batman-adv mesh networking kernel module + Note: batman-adv is part of the linux mainline + kernel since version 2.6.38 + + https://www.open-mesh.org/projects/batman-adv/ + +if BR2_PACKAGE_BATMAN_ADV + +config BR2_PACKAGE_BATMAN_ADV_DEBUG + bool "enable debugging" + help + Enables B.A.T.M.A.N. debugging. + +config BR2_PACKAGE_BATMAN_ADV_NC + bool "enable network coding" + help + Enables B.A.T.M.A.N. network coding. + Note: this requires promiscuous mode on ALL nodes! + + https://www.open-mesh.org/projects/batman-adv/wiki/NetworkCoding + +config BR2_PACKAGE_BATMAN_ADV_BATMAN_V + bool "enable B.A.T.M.A.N. V protocol (experimental)" + help + Enables B.A.T.M.A.N. V network protocol. + This is the next-gen protocol and is experimental at this + time. + + https://www.open-mesh.org/projects/batman-adv/wiki/BATMAN_V + +endif diff --git a/package/batman-adv/batman-adv.hash b/package/batman-adv/batman-adv.hash new file mode 100644 index 00000000..dabbec81 --- /dev/null +++ b/package/batman-adv/batman-adv.hash @@ -0,0 +1,7 @@ +# From https://downloads.open-mesh.org/batman/stable/sources/batman-adv/batman-adv-2019.3.tar.gz.{md5,sha1} +md5 39345688ddf12a542853b2318325f07b batman-adv-2019.3.tar.gz +sha1 202539c0cbf4604f6c8e9d427b338d4e807bd220 batman-adv-2019.3.tar.gz + +# Hash for license files +sha256 cecbf53d1148e13256ac29f8b900655b7fc8dc12d59939a95bc2323ea1747025 LICENSES/preferred/GPL-2.0 +sha256 323c587d0ccf10e376f8bf9a7f31fb4ca6078105194b42e0b1e0ee2bc9bde71f LICENSES/preferred/MIT diff --git a/package/batman-adv/batman-adv.mk b/package/batman-adv/batman-adv.mk new file mode 100644 index 00000000..194951a7 --- /dev/null +++ b/package/batman-adv/batman-adv.mk @@ -0,0 +1,42 @@ +################################################################################ +# +# batman-adv +# +################################################################################ + +BATMAN_ADV_VERSION = 2019.3 +BATMAN_ADV_SITE = https://downloads.open-mesh.org/batman/stable/sources/batman-adv +BATMAN_ADV_LICENSE = GPL-2.0, MIT (batman_adv.h) +BATMAN_ADV_LICENSE_FILES = LICENSES/preferred/GPL-2.0 LICENSES/preferred/MIT + +BATMAN_ADV_CFLAGS = \ + -I$(@D)/compat-include/ \ + -I$(@D)/include/ \ + -include $(@D)/compat.h \ + -DBATADV_SOURCE_VERSION=\"\\\"$(BATMAN_ADV_VERSION)\\\"\" + +# Bridge Loop Avoidance, Distributed Arp Table are always enabled +BATMAN_ADV_MODULE_MAKE_OPTS = \ + KVER=$(LINUX_VERSION_PROBED) \ + INSTALL_MOD_DIR=updates/net/batman-adv \ + NOSTDINC_FLAGS="$(BATMAN_ADV_CFLAGS)" \ + CONFIG_BATMAN_ADV=m \ + CONFIG_BATMAN_ADV_BLA=y \ + CONFIG_BATMAN_ADV_DAT=y \ + CONFIG_BATMAN_ADV_MCAST=y \ + CONFIG_BATMAN_ADV_BATMAN_V=$(if $(BR2_PACKAGE_BATMAN_ADV_BATMAN_V),y,n) \ + CONFIG_BATMAN_ADV_DEBUG=$(if $(BR2_PACKAGE_BATMAN_ADV_DEBUG),y,n) \ + CONFIG_BATMAN_ADV_NC=$(if $(BR2_PACKAGE_BATMAN_ADV_NC),y,n) + +BATMAN_ADV_MODULE_SUBDIRS = net/batman-adv + +define BATMAN_ADV_CONFIGURE_CMDS + $(BATMAN_ADV_MODULE_MAKE_OPTS) $(@D)/gen-compat-autoconf.sh $(@D)/compat-autoconf.h +endef + +define BATMAN_ADV_LINUX_CONFIG_FIXUPS + $(call KCONFIG_ENABLE_OPT,CONFIG_LIBCRC32C) +endef + +$(eval $(kernel-module)) +$(eval $(generic-package)) diff --git a/package/bats-core/Config.in b/package/bats-core/Config.in new file mode 100644 index 00000000..73c38e5a --- /dev/null +++ b/package/bats-core/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_BATS_CORE + bool "bats" + depends on BR2_PACKAGE_BASH # runtime + help + Bats: Bash Automated Testing System + + Bats is a TAP-compliant testing framework for Bash. It + provides a simple way to verify that the UNIX programs you + write behave as expected. + + https://github.com/bats-core/bats-core diff --git a/package/bats-core/bats-core.hash b/package/bats-core/bats-core.hash new file mode 100644 index 00000000..b50543a2 --- /dev/null +++ b/package/bats-core/bats-core.hash @@ -0,0 +1,5 @@ +# Locally calculated +sha256 91c49b1fe6f0656c46491929ed728f8dfa9a96df0cce294963e8c6082bff87a2 bats-core-1.2.1.tar.gz + +# License files +sha256 55074b2b3b87809105034e1468e59076554d76a80c67bcc592000cc3d929852d LICENSE.md diff --git a/package/bats-core/bats-core.mk b/package/bats-core/bats-core.mk new file mode 100644 index 00000000..fc8ac674 --- /dev/null +++ b/package/bats-core/bats-core.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# bats-core +# +################################################################################ + +BATS_CORE_VERSION = 1.2.1 +BATS_CORE_SITE = $(call github,bats-core,bats-core,v$(BATS_CORE_VERSION)) +BATS_CORE_LICENSE = MIT +BATS_CORE_LICENSE_FILES = LICENSE.md + +define BATS_CORE_INSTALL_TARGET_CMDS + $(@D)/install.sh $(TARGET_DIR)/usr +endef + +$(eval $(generic-package)) diff --git a/package/bayer2rgb-neon/Config.in b/package/bayer2rgb-neon/Config.in new file mode 100644 index 00000000..ed065c1e --- /dev/null +++ b/package/bayer2rgb-neon/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_BAYER2RGB_NEON + bool "bayer2rgb-neon" + depends on BR2_arm && BR2_ARM_CPU_HAS_NEON + depends on !BR2_STATIC_LIBS + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C++11 + help + bayer2rgb-neon is a library which allows + to decode raw camera bayer to RGB using + NEON hardware acceleration. + + https://git.phytec.de/bayer2rgb-neon/ + +comment "bayer2rgb-neon needs a toolchain w/ C++, dynamic library, gcc >= 4.9" + depends on BR2_arm && BR2_ARM_CPU_HAS_NEON + depends on BR2_STATIC_LIBS || !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/bayer2rgb-neon/bayer2rgb-neon.hash b/package/bayer2rgb-neon/bayer2rgb-neon.hash new file mode 100644 index 00000000..b1e87d7a --- /dev/null +++ b/package/bayer2rgb-neon/bayer2rgb-neon.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 d2e3e97bb9da218f223c03b2f080c5da727224e6e4cb99979398971110dfae04 bayer2rgb-neon-bef3ecafe290d61a50fd27da3e5d0df6f4b88045-br1.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/bayer2rgb-neon/bayer2rgb-neon.mk b/package/bayer2rgb-neon/bayer2rgb-neon.mk new file mode 100644 index 00000000..34510e76 --- /dev/null +++ b/package/bayer2rgb-neon/bayer2rgb-neon.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# bayer2rgb-neon +# +################################################################################ + +BAYER2RGB_NEON_VERSION = bef3ecafe290d61a50fd27da3e5d0df6f4b88045 +BAYER2RGB_NEON_SITE = https://gitlab-ext.sigma-chemnitz.de/ensc/bayer2rgb.git +BAYER2RGB_NEON_SITE_METHOD = git +BAYER2RGB_NEON_LICENSE = GPL-3.0 +BAYER2RGB_NEON_LICENSE_FILES = COPYING +BAYER2RGB_NEON_INSTALL_STAGING = YES +BAYER2RGB_NEON_DEPENDENCIES = host-pkgconf host-gengetopt +BAYER2RGB_NEON_AUTORECONF = YES + +BAYER2RGB_NEON_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -mfpu=neon" + +$(eval $(autotools-package)) diff --git a/package/bc/0001-bc-use-MAKEINFO-variable-for-docs.patch b/package/bc/0001-bc-use-MAKEINFO-variable-for-docs.patch new file mode 100644 index 00000000..03d15f55 --- /dev/null +++ b/package/bc/0001-bc-use-MAKEINFO-variable-for-docs.patch @@ -0,0 +1,35 @@ +From 7dc22308b2974fd093b6a564b7b28ddc20ddf4a6 Mon Sep 17 00:00:00 2001 +From: Matt Weber +Date: Fri, 13 Sep 2019 13:45:02 -0500 +Subject: [PATCH] bc: use MAKEINFO variable for docs + +Use the appropiate MAKEINFO variable rather than the hardcoded makeinfo +command directly, otherwise missing logic never works. + +Fixes: +http://autobuild.buildroot.net/results/b0b/b0b9dced0014a5a8026fa972f95085e8bd16a07b/ + +[Recreated for 1.0.7.1 by Matt W and applied to Makefile.am instead of + Makefile.in] +Signed-off-by: Gustavo Zacarias +Signed-off-by: Matthew Weber +--- + doc/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/doc/Makefile.am b/doc/Makefile.am +index 1bdc478..f873b6a 100644 +--- a/doc/Makefile.am ++++ b/doc/Makefile.am +@@ -1,7 +1,7 @@ + ## Process this file with automake to produce Makefile.in + + info_TEXINFOS = bc.texi dc.texi +-MAKEINFO = makeinfo --no-split ++MAKEINFO = @MAKEINFO@ --no-split + + MAINTAINERCLEANFILES = Makefile.in + +-- +2.17.1 + diff --git a/package/bc/0002-notice-read-and-write-errors-on-input-and-output.patch b/package/bc/0002-notice-read-and-write-errors-on-input-and-output.patch new file mode 100644 index 00000000..cc72e5cd --- /dev/null +++ b/package/bc/0002-notice-read-and-write-errors-on-input-and-output.patch @@ -0,0 +1,754 @@ +From af96fb92052c307818eefa4b687f964f1e3f542e Mon Sep 17 00:00:00 2001 +From: Matt Weber +Date: Thu, 12 Sep 2019 15:04:35 -0500 +Subject: [PATCH] notice read and write errors on input and output + +Quoting from the bug report: + bc (1.06-19ubuntu1) dapper; urgency=low + * Make dc notice read and write errors on its input and output. + I grepped for mentions of the strings `putc', `print', `getc', + `FILE', `stdin', `stdout' and `stderr' and added calls to new + error-checking functions unless it was clear from the + immediately-surrounding code that the program was exiting + nonzero, or would exit nonzero if the call failed. I ignored + hits in lib/getopt*, which seems to pervasively ignore write + errors when printing usage messages, in the hope that these + were correct. I _think_ I got them all. -iwj. + -- Ian Jackson Tue, 4 Apr 2006 17:21:02 +0100 + +Upsteam: +https://sources.debian.org/patches/bc/1.07.1-2/05_notice_read_write_errors.diff/ + +[Reformatted to GIT for 1.0.7.1 by Matt W] +Updated by Ryan Kavanagh for 1.0.7.1 on 26 July 2017. +Author: Ian Jackson +Origin: other +Bug-Debian: http://bugs.debian.org/488735 + +Signed-off-by: Matthew Weber +--- + bc/execute.c | 10 +++++++++- + bc/main.c | 3 +++ + bc/sbc.y | 2 ++ + bc/scan.c | 2 ++ + bc/scan.l | 3 +++ + bc/util.c | 15 ++++++++++++-- + dc/dc.c | 3 +++ + dc/eval.c | 55 +++++++++++++++++++++++++++++++++++++++------------- + dc/misc.c | 1 + + dc/numeric.c | 9 +++++++++ + dc/stack.c | 11 ++++++++++- + dc/string.c | 2 ++ + h/number.h | 11 +++++++---- + lib/number.c | 24 +++++++++++++++++++++++ + 14 files changed, 129 insertions(+), 22 deletions(-) + +diff --git a/bc/execute.c b/bc/execute.c +index 256e4b7..50eac49 100644 +--- a/bc/execute.c ++++ b/bc/execute.c +@@ -104,6 +104,7 @@ execute (void) + } + out_char ('\n'); + } ++ checkferror_output(stdout); + } + #endif + +@@ -224,6 +225,7 @@ execute (void) + } + } + fflush (stdout); ++ checkferror_output(stdout); + break; + + case 'R' : /* Return from function */ +@@ -259,6 +261,7 @@ execute (void) + if (inst == 'W') out_char ('\n'); + store_var (4); /* Special variable "last". */ + fflush (stdout); ++ checkferror_output(stdout); + pop (); + break; + +@@ -342,6 +345,7 @@ execute (void) + case 'w' : /* Write a string to the output. */ + while ((ch = byte(&pc)) != '"') out_schar (ch); + fflush (stdout); ++ checkferror_output(stdout); + break; + + case 'x' : /* Exchange Top of Stack with the one under the tos. */ +@@ -549,7 +553,10 @@ execute (void) + { + signal (SIGINT, use_quit); + if (had_sigint) +- printf ("\ninterrupted execution.\n"); ++ { ++ printf ("\ninterrupted execution.\n"); ++ checkferror_output(stdout); ++ } + } + } + +@@ -584,6 +591,7 @@ input_char (void) + out_col = 0; /* Saw a new line */ + } + } ++ checkferror_input(stdin); + + /* Classify and preprocess the input character. */ + if (isdigit(in_ch)) +diff --git a/bc/main.c b/bc/main.c +index 012075c..c96207b 100644 +--- a/bc/main.c ++++ b/bc/main.c +@@ -353,6 +353,9 @@ use_quit (int sig) + errno = save; + #else + write (1, "\n(interrupt) Exiting bc.\n", 26); ++#ifdef READLINE ++ rl_initialize (); /* Clear readline buffer */ ++#endif + bc_exit(0); + #endif + } +diff --git a/bc/sbc.y b/bc/sbc.y +index 586686b..921ab1e 100644 +--- a/bc/sbc.y ++++ b/bc/sbc.y +@@ -86,7 +86,9 @@ program : /* empty */ + if (interactive && !quiet) + { + show_bc_version (); ++ checkferror_output(stdout); + welcome (); ++ checkferror_output(stdout); + } + } + | program input_item +diff --git a/bc/scan.c b/bc/scan.c +index b237f55..8dee4e9 100644 +--- a/bc/scan.c ++++ b/bc/scan.c +@@ -791,6 +791,7 @@ bcel_input (char *buf, yy_size_t *result, int max) + if (bcel_len != 0) + history (hist, &histev, H_ENTER, bcel_line); + fflush (stdout); ++ checkferror_output(stdout); + } + + if (bcel_len <= max) +@@ -863,6 +864,7 @@ rl_input (char *buf, int *result, int max) + add_history (rl_line); + rl_line[rl_len-1] = '\n'; + fflush (stdout); ++ checkferror_output(stdout); + } + + if (rl_len <= max) +diff --git a/bc/scan.l b/bc/scan.l +index eb2e2dd..79186bb 100644 +--- a/bc/scan.l ++++ b/bc/scan.l +@@ -99,6 +99,7 @@ bcel_input (char *buf, yy_size_t *result, int max) + if (bcel_len != 0) + history (hist, &histev, H_ENTER, bcel_line); + fflush (stdout); ++ checkferror_output(stdout); + } + + if (bcel_len <= max) +@@ -171,6 +172,7 @@ rl_input (char *buf, int *result, int max) + add_history (rl_line); + rl_line[rl_len-1] = '\n'; + fflush (stdout); ++ checkferror_output(stdout); + } + + if (rl_len <= max) +@@ -295,6 +297,7 @@ limits return(Limits); + if (c == EOF) + { + fprintf (stderr,"EOF encountered in a comment.\n"); ++ checkferror_output(stderr); + break; + } + } +diff --git a/bc/util.c b/bc/util.c +index 8eba093..cacd796 100644 +--- a/bc/util.c ++++ b/bc/util.c +@@ -247,9 +247,10 @@ init_gen (void) + continue_label = 0; + next_label = 1; + out_count = 2; +- if (compile_only) ++ if (compile_only) { + printf ("@i"); +- else ++ checkferror_output(stdout); ++ } else + init_load (); + had_error = FALSE; + did_gen = FALSE; +@@ -272,6 +273,7 @@ generate (const char *str) + printf ("\n"); + out_count = 0; + } ++ checkferror_output(stdout); + } + else + load_code (str); +@@ -289,6 +291,7 @@ run_code(void) + if (compile_only) + { + printf ("@r\n"); ++ checkferror_output(stdout); + out_count = 0; + } + else +@@ -326,6 +329,7 @@ out_char (int ch) + } + putchar (ch); + } ++ checkferror_output(stdout); + } + + /* Output routines: Write a character CH to the standard output. +@@ -355,6 +359,7 @@ out_schar (int ch) + } + putchar (ch); + } ++ checkferror_output(stdout); + } + + +@@ -639,6 +644,7 @@ limits(void) + #ifdef OLD_EQ_OP + printf ("Old assignment operatiors are valid. (=-, =+, ...)\n"); + #endif ++ checkferror_output(stdout); + } + + /* bc_malloc will check the return value so all other places do not +@@ -703,6 +709,7 @@ yyerror (str, va_alist) + fprintf (stderr,"%s %d: ",name,line_no); + vfprintf (stderr, str, args); + fprintf (stderr, "\n"); ++ checkferror_output(stderr); + had_error = TRUE; + va_end (args); + } +@@ -743,6 +750,7 @@ ct_warn (mesg, va_alist) + fprintf (stderr,"%s %d: Error: ",name,line_no); + vfprintf (stderr, mesg, args); + fprintf (stderr, "\n"); ++ checkferror_output(stderr); + had_error = TRUE; + } + else +@@ -755,6 +763,7 @@ ct_warn (mesg, va_alist) + fprintf (stderr,"%s %d: (Warning) ",name,line_no); + vfprintf (stderr, mesg, args); + fprintf (stderr, "\n"); ++ checkferror_output(stderr); + } + va_end (args); + } +@@ -789,6 +798,7 @@ rt_error (mesg, va_alist) + va_end (args); + + fprintf (stderr, "\n"); ++ checkferror_output(stderr); + runtime_error = TRUE; + } + +@@ -823,6 +833,7 @@ rt_warn (const char *mesg) + va_end (args); + + fprintf (stderr, "\n"); ++ checkferror_output(stderr); + } + + /* bc_exit: Make sure to reset the edit state. */ +diff --git a/dc/dc.c b/dc/dc.c +index 6a2bb26..ccdb1c2 100644 +--- a/dc/dc.c ++++ b/dc/dc.c +@@ -59,6 +59,7 @@ static void + bug_report_info DC_DECLVOID() + { + printf("Email bug reports to: bug-dc@gnu.org .\n"); ++ checkferror_output(stdout); + } + + static void +@@ -69,6 +70,7 @@ show_version DC_DECLVOID() + This is free software; see the source for copying conditions. There is NO\n\ + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,\n\ + to the extent permitted by law.\n", DC_COPYRIGHT); ++ checkferror_output(stdout); + } + + /* your generic usage function */ +@@ -85,6 +87,7 @@ Usage: %s [OPTION] [file ...]\n\ + \n\ + ", progname); + bug_report_info(); ++ checkferror_output(f); + } + + /* returns a pointer to one past the last occurance of c in s, +diff --git a/dc/eval.c b/dc/eval.c +index 05a3d9e..6c54e61 100644 +--- a/dc/eval.c ++++ b/dc/eval.c +@@ -97,12 +97,15 @@ static int input_pushback; + static int + input_fil DC_DECLVOID() + { ++ int c; + if (input_pushback != EOF){ +- int c = input_pushback; ++ c = input_pushback; + input_pushback = EOF; + return c; + } +- return getc(input_fil_fp); ++ c = getc(input_fil_fp); ++ checkferror_input(input_fil_fp); ++ return c; + } + + /* passed as an argument to dc_getnum */ +@@ -301,11 +304,13 @@ dc_func DC_DECLARG((c, peekc, negcmp)) + tmpint = dc_num2int(datum.v.number, DC_TOSS); + if (2 <= tmpint && tmpint <= DC_IBASE_MAX) + dc_ibase = tmpint; +- else ++ else { + fprintf(stderr, + "%s: input base must be a number \ + between 2 and %d (inclusive)\n", + progname, DC_IBASE_MAX); ++ checkferror_output(stderr); ++ } + } + break; + case 'k': /* set scale to value on top of stack */ +@@ -313,11 +318,12 @@ between 2 and %d (inclusive)\n", + tmpint = -1; + if (datum.dc_type == DC_NUMBER) + tmpint = dc_num2int(datum.v.number, DC_TOSS); +- if ( ! (tmpint >= 0) ) ++ if ( ! (tmpint >= 0) ) { + fprintf(stderr, + "%s: scale must be a nonnegative number\n", + progname); +- else ++ checkferror_output(stderr); ++ } else + dc_scale = tmpint; + } + break; +@@ -341,11 +347,12 @@ between 2 and %d (inclusive)\n", + tmpint = 0; + if (datum.dc_type == DC_NUMBER) + tmpint = dc_num2int(datum.v.number, DC_TOSS); +- if ( ! (tmpint > 1) ) ++ if ( ! (tmpint > 1) ) { + fprintf(stderr, + "%s: output base must be a number greater than 1\n", + progname); +- else ++ checkferror_output(stderr); ++ } else + dc_obase = tmpint; + } + break; +@@ -378,6 +385,7 @@ between 2 and %d (inclusive)\n", + fprintf(stderr, + "%s: square root of nonnumeric attempted\n", + progname); ++ checkferror_output(stderr); + }else if (dc_sqrt(datum.v.number, dc_scale, &tmpnum) == DC_SUCCESS){ + dc_free_num(&datum.v.number); + datum.v.number = tmpnum; +@@ -424,6 +432,7 @@ between 2 and %d (inclusive)\n", + dc_garbage("at top of stack", -1); + } + fflush(stdout); ++ checkferror_output(stdout); + break; + case 'Q': /* quit out of top-of-stack nested evals; + * pops value from stack; +@@ -440,6 +449,7 @@ between 2 and %d (inclusive)\n", + fprintf(stderr, + "%s: Q command requires a number >= 1\n", + progname); ++ checkferror_output(stderr); + } + break; + case 'R': /* pop a value off of the evaluation stack,; +@@ -483,11 +493,12 @@ between 2 and %d (inclusive)\n", + if (datum.dc_type == DC_NUMBER) + tmpint = dc_num2int(datum.v.number, DC_TOSS); + if (dc_pop(&datum) == DC_SUCCESS){ +- if (tmpint < 0) ++ if (tmpint < 0) { + fprintf(stderr, + "%s: array index must be a nonnegative integer\n", + progname); +- else ++ checkferror_output(stderr); ++ } else + dc_array_set(peekc, tmpint, datum); + } + } +@@ -499,18 +510,21 @@ between 2 and %d (inclusive)\n", + tmpint = -1; + if (datum.dc_type == DC_NUMBER) + tmpint = dc_num2int(datum.v.number, DC_TOSS); +- if (tmpint < 0) ++ if (tmpint < 0) { + fprintf(stderr, + "%s: array index must be a nonnegative integer\n", + progname); +- else ++ checkferror_output(stderr); ++ } else + dc_push(dc_array_get(peekc, tmpint)); + } + return DC_EATONE; + + default: /* What did that user mean? */ + fprintf(stderr, "%s: ", progname); ++ checkferror_output(stderr); + dc_show_id(stdout, c, " unimplemented\n"); ++ checkferror_output(stdout); + break; + } + return DC_OKAY; +@@ -538,6 +552,7 @@ evalstr DC_DECLARG((string)) + fprintf(stderr, + "%s: eval called with non-string argument\n", + progname); ++ checkferror_output(stderr); + return DC_OKAY; + } + interrupt_seen = 0; +@@ -635,6 +650,7 @@ evalstr DC_DECLARG((string)) + return DC_FAIL; + } + fprintf(stderr, "%s: unexpected EOS\n", progname); ++ checkferror_output(stderr); + return DC_OKAY; + } + } +@@ -692,6 +708,7 @@ dc_evalfile DC_DECLARG((fp)) + stdin_lookahead = EOF; + for (c=getc(fp); c!=EOF; c=peekc){ + peekc = getc(fp); ++ checkferror_input(stdin); + /* + * The following if() is the only place where ``stdin_lookahead'' + * might be set to other than EOF: +@@ -717,24 +734,30 @@ dc_evalfile DC_DECLARG((fp)) + signal(SIGINT, sigint_handler); + switch (dc_func(c, peekc, negcmp)){ + case DC_OKAY: +- if (stdin_lookahead != peekc && fp == stdin) ++ if (stdin_lookahead != peekc && fp == stdin) { + peekc = getc(fp); ++ checkferror_input(stdin); ++ } + break; + case DC_EATONE: + peekc = getc(fp); ++ checkferror_input(fp); + break; + case DC_EVALREG: + /*commands which send us here shall guarantee that peekc!=EOF*/ + c = peekc; + peekc = getc(fp); ++ checkferror_input(fp); + stdin_lookahead = peekc; + if (dc_register_get(c, &datum) != DC_SUCCESS) + break; + dc_push(datum); + /*@fallthrough@*/ + case DC_EVALTOS: +- if (stdin_lookahead != peekc && fp == stdin) ++ if (stdin_lookahead != peekc && fp == stdin) { + peekc = getc(fp); ++ checkferror_input(stdin); ++ } + if (dc_pop(&datum) == DC_SUCCESS){ + if (datum.dc_type == DC_NUMBER){ + dc_push(datum); +@@ -744,6 +767,7 @@ dc_evalfile DC_DECLARG((fp)) + goto reset_and_exit_quit; + fprintf(stderr, "%s: Q command argument exceeded \ + string execution depth\n", progname); ++ checkferror_output(stderr); + } + }else{ + dc_garbage("at top of stack", -1); +@@ -756,8 +780,11 @@ string execution depth\n", progname); + fprintf(stderr, + "%s: Q command argument exceeded string execution depth\n", + progname); +- if (stdin_lookahead != peekc && fp == stdin) ++ checkferror_output(stderr); ++ if (stdin_lookahead != peekc && fp == stdin) { + peekc = getc(fp); ++ checkferror_input(stdin); ++ } + break; + + case DC_INT: +diff --git a/dc/misc.c b/dc/misc.c +index cd23602..cd910b8 100644 +--- a/dc/misc.c ++++ b/dc/misc.c +@@ -89,6 +89,7 @@ dc_show_id DC_DECLARG((fp, id, suffix)) + fprintf(fp, "'%c' (%#o)%s", (unsigned int) id, id, suffix); + else + fprintf(fp, "%#o%s", (unsigned int) id, suffix); ++ checkferror_output(fp); + } + + +diff --git a/dc/numeric.c b/dc/numeric.c +index 37759de..60cfb85 100644 +--- a/dc/numeric.c ++++ b/dc/numeric.c +@@ -133,6 +133,7 @@ dc_div DC_DECLARG((a, b, kscale, result)) + bc_init_num(CastNumPtr(result)); + if (bc_divide(CastNum(a), CastNum(b), CastNumPtr(result), kscale)){ + fprintf(stderr, "%s: divide by zero\n", progname); ++ checkferror_output(stderr); + return DC_DOMAIN_ERROR; + } + return DC_SUCCESS; +@@ -155,6 +156,7 @@ dc_divrem DC_DECLARG((a, b, kscale, quotient, remainder)) + if (bc_divmod(CastNum(a), CastNum(b), + CastNumPtr(quotient), CastNumPtr(remainder), kscale)){ + fprintf(stderr, "%s: divide by zero\n", progname); ++ checkferror_output(stderr); + return DC_DOMAIN_ERROR; + } + return DC_SUCCESS; +@@ -173,6 +175,7 @@ dc_rem DC_DECLARG((a, b, kscale, result)) + bc_init_num(CastNumPtr(result)); + if (bc_modulo(CastNum(a), CastNum(b), CastNumPtr(result), kscale)){ + fprintf(stderr, "%s: remainder by zero\n", progname); ++ checkferror_output(stderr); + return DC_DOMAIN_ERROR; + } + return DC_SUCCESS; +@@ -225,6 +228,7 @@ dc_sqrt DC_DECLARG((value, kscale, result)) + tmp = bc_copy_num(CastNum(value)); + if (!bc_sqrt(&tmp, kscale)){ + fprintf(stderr, "%s: square root of negative number\n", progname); ++ checkferror_output(stderr); + bc_free_num(&tmp); + return DC_DOMAIN_ERROR; + } +@@ -470,6 +474,7 @@ dc_dump_num DC_DECLARG((dcvalue, discard_p)) + + for (cur=top_of_stack; cur; cur=next) { + putchar(cur->digit); ++ checkferror_output(stdout); + next = cur->link; + free(cur); + } +@@ -587,6 +592,8 @@ out_char (ch) + out_col = 1; + } + putchar(ch); ++ checkferror_output(stdout); ++ checkferror_output(stderr); + } + } + +@@ -626,6 +633,7 @@ rt_error (mesg, va_alist) + vfprintf (stderr, mesg, args); + va_end (args); + fprintf (stderr, "\n"); ++ checkferror_output(stderr); + } + + +@@ -659,6 +667,7 @@ rt_warn (mesg, va_alist) + vfprintf (stderr, mesg, args); + va_end (args); + fprintf (stderr, "\n"); ++ checkferror_output(stderr); + } + + +diff --git a/dc/stack.c b/dc/stack.c +index 49422df..174411d 100644 +--- a/dc/stack.c ++++ b/dc/stack.c +@@ -35,7 +35,10 @@ + #include "dc-regdef.h" + + /* an oft-used error message: */ +-#define Empty_Stack fprintf(stderr, "%s: stack empty\n", progname) ++#define Empty_Stack do{ \ ++ fprintf(stderr, "%s: stack empty\n", progname); \ ++ checkferror_output(stderr); \ ++ }while(0) + + + /* simple linked-list implementation suffices: */ +@@ -91,6 +94,7 @@ dc_binop DC_DECLARG((op, kscale)) + if (dc_stack->value.dc_type!=DC_NUMBER + || dc_stack->link->value.dc_type!=DC_NUMBER){ + fprintf(stderr, "%s: non-numeric value\n", progname); ++ checkferror_output(stderr); + return; + } + (void)dc_pop(&b); +@@ -131,6 +135,7 @@ dc_binop2 DC_DECLARG((op, kscale)) + if (dc_stack->value.dc_type!=DC_NUMBER + || dc_stack->link->value.dc_type!=DC_NUMBER){ + fprintf(stderr, "%s: non-numeric value\n", progname); ++ checkferror_output(stderr); + return; + } + (void)dc_pop(&b); +@@ -169,6 +174,7 @@ dc_cmpop DC_DECLVOID() + if (dc_stack->value.dc_type!=DC_NUMBER + || dc_stack->link->value.dc_type!=DC_NUMBER){ + fprintf(stderr, "%s: non-numeric value\n", progname); ++ checkferror_output(stderr); + return 0; + } + (void)dc_pop(&b); +@@ -206,6 +212,7 @@ dc_triop DC_DECLARG((op, kscale)) + || dc_stack->link->value.dc_type!=DC_NUMBER + || dc_stack->link->link->value.dc_type!=DC_NUMBER){ + fprintf(stderr, "%s: non-numeric value\n", progname); ++ checkferror_output(stderr); + return; + } + (void)dc_pop(&c); +@@ -327,6 +334,7 @@ dc_register_get DC_DECLARG((regid, result)) + *result = dc_int2data(0); + }else if (r->value.dc_type==DC_UNINITIALIZED){ + fprintf(stderr, "%s: BUG: register ", progname); ++ checkferror_output(stderr); + dc_show_id(stderr, regid, " exists but is uninitialized?\n"); + return DC_FAIL; + }else{ +@@ -402,6 +410,7 @@ dc_register_pop DC_DECLARG((stackid, result)) + r = dc_register[stackid]; + if (r==NULL || r->value.dc_type==DC_UNINITIALIZED){ + fprintf(stderr, "%s: stack register ", progname); ++ checkferror_output(stderr); + dc_show_id(stderr, stackid, " is empty\n"); + return DC_FAIL; + } +diff --git a/dc/string.c b/dc/string.c +index dee9169..389d899 100644 +--- a/dc/string.c ++++ b/dc/string.c +@@ -94,6 +94,7 @@ dc_out_str DC_DECLARG((value, discard_flag)) + dc_discard discard_flag DC_DECLEND + { + fwrite(value->s_ptr, value->s_len, sizeof *value->s_ptr, stdout); ++ checkferror_output(stdout); + if (discard_flag == DC_TOSS) + dc_free_str(&value); + } +@@ -169,6 +170,7 @@ dc_readstring DC_DECLARG((fp, ldelim, rdelim)) + } + *p++ = c; + } ++ checkferror_input(fp); + return dc_makestring(line_buf, (size_t)(p-line_buf)); + } + +diff --git a/h/number.h b/h/number.h +index abf6332..1983ab4 100644 +--- a/h/number.h ++++ b/h/number.h +@@ -23,10 +23,10 @@ + You may contact the author by: + e-mail: philnelson@acm.org + us-mail: Philip A. Nelson +- Computer Science Department, 9062 +- Western Washington University +- Bellingham, WA 98226-9062 +- ++ Computer Science Department, 9062 ++ Western Washington University ++ Bellingham, WA 98226-9062 ++ + *************************************************************************/ + + #ifndef _NUMBER_H_ +@@ -140,4 +140,7 @@ void bc_out_num (bc_num num, int o_base, void (* out_char)(int), + int leading_zero); + + void bc_out_long (long val, int size, int space, void (*out_char)(int)); ++ ++void checkferror_input (FILE*); ++void checkferror_output (FILE*); + #endif +diff --git a/lib/number.c b/lib/number.c +index f394e92..80b33e3 100644 +--- a/lib/number.c ++++ b/lib/number.c +@@ -1713,6 +1713,7 @@ static void + out_char (int c) + { + putchar(c); ++ checkferror_output(stdout); + } + + +@@ -1721,6 +1722,7 @@ pn (bc_num num) + { + bc_out_num (num, 10, out_char, 0); + out_char ('\n'); ++ checkferror_output(stdout); + } + + +@@ -1732,6 +1734,28 @@ pv (char *name, unsigned char *num, int len) + printf ("%s=", name); + for (i=0; i +Date: Thu, 27 Jun 2019 13:10:47 +0800 +Subject: [PATCH] dc: fix exit code of q command + +The exit code for "echo q | dc" is 1 for dc-1.4.1; +while the exit code for "echo q | dc" is 0 for dc-1.4. + +Here is the answer from ken@gnu.org: +dc-1.4 was right. There was a rewrite of a chunk of code for 1.4.1 to +fix a corner case in the Q command, and somehow the placement of the +clean-up label for the 'q' command got misplaced on the error-handling +branch instead of the clean-exit branch. The patch below fixes this +(it is committed for whenever the next bc/dc release gets made). + +Thanks for the report, + --Ken Pizzini + +Upstream: +https://git.yoctoproject.org/cgit.cgi/poky/plain/meta/recipes-extended/bc/bc/0001-dc-fix-exit-code-of-q-command.patch + +Signed-off-by: Li Zhou +Signed-off-by: Matthew Weber +--- + dc/eval.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/dc/eval.c b/dc/eval.c +index 6c54e61..9c28f18 100644 +--- a/dc/eval.c ++++ b/dc/eval.c +@@ -841,10 +841,10 @@ error_fail: + fprintf(stderr, "%s: ", progname); + perror("error reading input"); + return DC_FAIL; +-reset_and_exit_quit: + reset_and_exit_fail: + signal(SIGINT, sigint_default); + return DC_FAIL; ++reset_and_exit_quit: + reset_and_exit_success: + signal(SIGINT, sigint_default); + return DC_SUCCESS; +-- +2.17.1 + diff --git a/package/bc/0004-no-gen-libmath.patch b/package/bc/0004-no-gen-libmath.patch new file mode 100644 index 00000000..7cd506be --- /dev/null +++ b/package/bc/0004-no-gen-libmath.patch @@ -0,0 +1,97 @@ +From a543af443c5f86b24ca89a994b75b6ef4751ac66 Mon Sep 17 00:00:00 2001 +From: Matt Weber +Date: Thu, 12 Sep 2019 15:12:40 -0500 +Subject: [PATCH] no gen libmath + +These rules are not cross-friendly so delete them. libmath has been +generated offline and included as part of this patch as the fbc tool +used to generate that header is assuming the cross archtecture and +can't execute. + +Upstream: +https://git.yoctoproject.org/cgit.cgi/poky/plain/meta/recipes-extended/bc/bc/no-gen-libmath.patch +https://git.yoctoproject.org/cgit.cgi/poky/plain/meta/recipes-extended/bc/bc/libmath.h + +[Reformatted to GIT for 1.0.7.1 by Matt W] +Signed-off-by: Ross Burton +Signed-off-by: Matthew Weber +--- + bc/Makefile.am | 8 -------- + bc/libmath.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 46 insertions(+), 8 deletions(-) + create mode 100644 bc/libmath.h + +diff --git a/bc/Makefile.am b/bc/Makefile.am +index d9d412e..f244241 100644 +--- a/bc/Makefile.am ++++ b/bc/Makefile.am +@@ -31,14 +31,6 @@ global.o: libmath.h + + fbcOBJ = main.o bc.o scan.o execute.o load.o storage.o util.o warranty.o + +-libmath.h: libmath.b $(fbcOBJ) $(LIBBC) +- echo '{0}' > libmath.h +- $(MAKE) global.o +- $(LINK) -o fbc $(fbcOBJ) global.o $(LIBBC) $(LIBL) $(READLINELIB) $(LIBS) +- ./fbc -c $(srcdir)/libmath.b libmath.h +- $(srcdir)/fix-libmath_h +- rm -f ./fbc ./global.o +- + sbcOBJ = main.o sbc.o scan.o execute.o global.o load.o storage.o util.o \ + warranty.o + sbc.o: sbc.c +diff --git a/bc/libmath.h b/bc/libmath.h +new file mode 100644 +index 0000000..63e1acb +--- /dev/null ++++ b/bc/libmath.h +@@ -0,0 +1,46 @@ ++{"@iK20:s2:p@r", ++"@iF1,5.6,7,8,9,10,11,12,13,14,15[l0:KA:#Z1:l0:s7:pKA:s0:pl5:C1,0:", ++"s14:pl7:s0:pl14:RN1:l5:0Z4:l10:1+s10:pl5:K2:/s5:pl2:", ++"1+s2:pJ3:N4:l13:s2:p1l5:+s14:pl5:s6:p1s8:pK2:s11:pN6:1B7:J5:N8:", ++"l11:i11:pJ6:N7:l6:l5:*s6:l8:l11:*s8:/s9:pl9:0=Z9:l10:0>Z10:N11:", ++"l10:d10:Z12:l14:l14:*s14:pJ11:N12:N10:l15:s2:pl12:Z13:1l14:/R", ++"N13:l14:1/RN9:l14:l9:+s14:pJ8:N5:0R]@r", ++"@iF2,5.7,9,10,11,12,13,14,15[l0:KA:#Z1:l0:s7:pKA:s0:pl5:C2,0:", ++"s14:pl7:s0:pl14:RN1:l5:0{Z2:1K10:l2:^-1/RN2:l2:s15:pK6:l2:+s2:", ++"pK2:s10:p0s11:pN3:l5:K2:}Z4:l10:K2:*s10:pl5:cRs5:pJ3:N4:N5:l5:", ++"K.5:{Z6:l10:K2:*s10:pl5:cRs5:pJ5:N6:l5:1-l5:1+/s13:s14:pl13:l13:", ++"*s12:pK3:s11:pN8:1B9:J7:N10:l11:K2:+s11:pJ8:N9:l13:l12:*s13:l11:", ++"/s9:pl9:0=Z11:l10:l14:*s14:pl15:s2:pl14:1/RN11:l14:l9:+s14:pJ10:N7:", ++"0R]@r", ++"@iF3,5.7,9,11,12,13,16,14,15[l0:KA:#Z1:l0:s7:pKA:s0:pl5:C3,0:", ++"s14:pl7:s0:pl14:RN1:l2:s15:pK1.1:l15:*K2:+s2:p1C4,0:s14:pl5:0", ++"Z11:l15:K5:+s2:pK.2:C4,0:s6:pN11:", ++"l15:K3:+s2:pN12:l5:K.2:>Z13:l10:1+s10:pl5:K.2:-1l5:K.2:*+/s5:", ++"pJ12:N13:l5:s13:s14:pl5:nl5:*s16:pK3:s11:pN15:1B16:J14:N17:l11:", ++"K2:+s11:pJ15:N16:l13:l16:*s13:l11:/s9:pl9:0=Z18:l15:s2:pl10:l6:", ++"*l14:+l12:/RN18:l14:l9:+s14:pJ17:N14:0R]@r", ++"@iF6,13,5.6,7,8,9,10,11,12,16,14,15[l0:KA:#Z1:l0:s7:pKA:s0:pl13:", ++"l5:C6,00:s14:pl7:s0:pl14:RN1:l2:s15:p0s2:pl13:1/s13:pl13:0 + +From: David Mohr +Date: Tue, 26 May 2015 20:34:31 -0600 +Subject: Don't inline crc64 for gcc-5 compatability + +Forwarded: http://article.gmane.org/gmane.linux.kernel.bcache.devel/2919 + +By James Cowgill, see Debian bug #777798 +--- + bcache.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/bcache.c b/bcache.c +index 8f37445..8b4b986 100644 +--- a/bcache.c ++++ b/bcache.c +@@ -115,7 +115,7 @@ static const uint64_t crc_table[256] = { + 0x9AFCE626CE85B507ULL + }; + +-inline uint64_t crc64(const void *_data, size_t len) ++uint64_t crc64(const void *_data, size_t len) + { + uint64_t crc = 0xFFFFFFFFFFFFFFFFULL; + const unsigned char *data = _data; diff --git a/package/bcache-tools/Config.in b/package/bcache-tools/Config.in new file mode 100644 index 00000000..c8e3f6d1 --- /dev/null +++ b/package/bcache-tools/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_BCACHE_TOOLS + bool "bcache tools" + depends on BR2_PACKAGE_HAS_UDEV + depends on BR2_USE_MMU # util-linux (libblkid) + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + select BR2_PACKAGE_UTIL_LINUX_LIBBLKID + help + Bcache is a Linux kernel block layer cache. It allows one or + more fast disk drives such as flash-based solid state drives + (SSDs) to act as a cache for one or more slower hard disk + drives. + + http://bcache.evilpiepirate.org/ + + This is the user space bcache tools, required to setup the + linux bcache feature of the Linux kernel. + +comment "bcache-tools needs udev /dev management" + depends on BR2_USE_MMU + depends on !BR2_PACKAGE_HAS_UDEV diff --git a/package/bcache-tools/bcache-tools.hash b/package/bcache-tools/bcache-tools.hash new file mode 100644 index 00000000..d80ec44a --- /dev/null +++ b/package/bcache-tools/bcache-tools.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 d56923936f37287efc57a46315679102ef2c86cd0be5874590320acd48c1201c bcache-tools-1.0.8.tar.gz +sha256 e6d6a009505e345fe949e1310334fcb0747f28dae2856759de102ab66b722cb4 COPYING diff --git a/package/bcache-tools/bcache-tools.mk b/package/bcache-tools/bcache-tools.mk new file mode 100644 index 00000000..4ff10cc4 --- /dev/null +++ b/package/bcache-tools/bcache-tools.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# bcache-tools +# +################################################################################ + +BCACHE_TOOLS_VERSION = 1.0.8 +BCACHE_TOOLS_SITE = $(call github,g2p,bcache-tools,v$(BCACHE_TOOLS_VERSION)) +BCACHE_TOOLS_LICENSE = GPL-2.0 +BCACHE_TOOLS_LICENSE_FILES = COPYING +BCACHE_TOOLS_DEPENDENCIES = host-pkgconf util-linux + +# We pass $(TARGET_CONFIGURE_OPTS) as environment variable to allow +# the bcache-tools Makefile to alter CFLAGS +define BCACHE_TOOLS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) +endef + +# The bcache-tools Makefile expects the man8 directory to exist +# expects the /lib/udev/rules.d directory to exist. +define BCACHE_TOOLS_CREATE_MISSING_DIRS + $(INSTALL) -m 0755 -d $(TARGET_DIR)/usr/share/man/man8 + $(INSTALL) -m 0755 -d $(TARGET_DIR)/lib/udev/rules.d +endef + +BCACHE_TOOLS_PRE_INSTALL_TARGET_HOOKS += BCACHE_TOOLS_CREATE_MISSING_DIRS + +define BCACHE_TOOLS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/bcg729/Config.in b/package/bcg729/Config.in new file mode 100644 index 00000000..cb936ae1 --- /dev/null +++ b/package/bcg729/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_BCG729 + bool "bcg729" + help + Bcg729 is an opensource implementation of both encoder and + decoder of the ITU G729 Annex A/B speech codec. + + https://www.linphone.org/technical-corner/bcg729 diff --git a/package/bcg729/bcg729.hash b/package/bcg729/bcg729.hash new file mode 100644 index 00000000..4dbfbbbb --- /dev/null +++ b/package/bcg729/bcg729.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 94b3542a06cbd96306efc19f959f9febae62806a22599063f82a8c33e989d48b bcg729-1.0.4.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/bcg729/bcg729.mk b/package/bcg729/bcg729.mk new file mode 100644 index 00000000..426cfd90 --- /dev/null +++ b/package/bcg729/bcg729.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# bcg729 +# +################################################################################ + +BCG729_VERSION = 1.0.4 +BCG729_SITE = $(call github,BelledonneCommunications,bcg729,$(BCG729_VERSION)) +BCG729_LICENSE = GPL-2.0+ +BCG729_LICENSE_FILES = COPYING +BCG729_INSTALL_STAGING = YES + +ifeq ($(BR2_STATIC_LIBS),y) +BCG729_CONF_OPTS += -DENABLE_SHARED=OFF -DENABLE_STATIC=ON +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +BCG729_CONF_OPTS += -DENABLE_SHARED=ON -DENABLE_STATIC=ON +else ifeq ($(BR2_SHARED_LIBS),y) +BCG729_CONF_OPTS += -DENABLE_SHARED=ON -DENABLE_STATIC=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/bcm2835/Config.in b/package/bcm2835/Config.in new file mode 100644 index 00000000..4c3eb2cb --- /dev/null +++ b/package/bcm2835/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_BCM2835 + bool "bcm2835" + depends on BR2_arm + help + C library for Broadcom BCM 2835 as used in Raspberry Pi. + It provides access to GPIO and other IO functions on the + Broadcom BCM 2835 chip, allowing access to the GPIO pins + on the 26 pin IDE plug on the RPi board so you can control + and interface with various external devices. + + WARNING: the opinion of the Buildroot developers is that + such library is a complete abomination as it entirely works + around the standard Linux interfaces to access GPIOs, I2C, + SPI busses or other IOs. The library directly remaps the + hardware registers in user-space, completely bypassing what + the kernel drivers are doing, and potentially conflicting + with them. + + http://www.airspayce.com/mikem/bcm2835 diff --git a/package/bcm2835/bcm2835.hash b/package/bcm2835/bcm2835.hash new file mode 100644 index 00000000..e366f190 --- /dev/null +++ b/package/bcm2835/bcm2835.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 b7eda59fd7bc3cb97fdac14e8455e86ddad75006d69270358ac8d00108e369a9 bcm2835-1.68.tar.gz +sha256 8b1ba204bb69a0ade2bfcf65ef294a920f6bb361b317dba43c7ef29d96332b9b COPYING diff --git a/package/bcm2835/bcm2835.mk b/package/bcm2835/bcm2835.mk new file mode 100644 index 00000000..1ddd0358 --- /dev/null +++ b/package/bcm2835/bcm2835.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# bcm2835 +# +################################################################################ + +BCM2835_VERSION = 1.68 +BCM2835_SITE = http://www.airspayce.com/mikem/bcm2835 +BCM2835_LICENSE = GPL-3.0 +BCM2835_LICENSE_FILES = COPYING +BCM2835_INSTALL_STAGING = YES + +# disable doxygen doc generation +BCM2835_CONF_ENV = ac_cv_prog_DOXYGEN=/bin/true + +$(eval $(autotools-package)) diff --git a/package/bctoolbox/0001-Fix-Libs.private-flags-for-mbedtls.patch b/package/bctoolbox/0001-Fix-Libs.private-flags-for-mbedtls.patch new file mode 100644 index 00000000..342042d5 --- /dev/null +++ b/package/bctoolbox/0001-Fix-Libs.private-flags-for-mbedtls.patch @@ -0,0 +1,37 @@ +From b7f14a800bbdad193f45695bc5b8c5173f3882ba Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 10 Feb 2019 17:51:05 +0100 +Subject: [PATCH] CMakeLists.txt: fix mbedtls libraries in bctoolbox.pc +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +bctoolbox.pc should not contain the full libraries path, path should be +given by -L and library names by -l +So sent back the fix already suggested by Jörg Krause in +https://github.com/BelledonneCommunications/bctoolbox/pull/4 + +Signed-off-by: Jörg Krause +Signed-off-by: Fabrice Fontaine +[Upstream status: +https://github.com/BelledonneCommunications/bctoolbox/pull/7] +--- + CMakeLists.txt | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 29f3eb6..b2f26c2 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -101,9 +101,8 @@ else() + endif() + + if(MBEDTLS_FOUND) +- get_filename_component(mbedtls_library_path "${MBEDTLS_LIBRARIES}" PATH) +- string(REPLACE ";" " " MBEDTLS_LIBRARIES_STR "${MBEDTLS_LIBRARIES}") +- set(LIBS_PRIVATE "${LIBS_PRIVATE} ${MBEDTLS_LIBRARIES_STR}") ++ get_filename_component(mbedtls_library_path "${MBEDTLS_LIBRARY}" PATH) ++ set(LIBS_PRIVATE "${LIBS_PRIVATE} -L${mbedtls_library_path} -lmbedtls -lmbedcrypto -lmbedx509") + endif() + if(POLARSSL_FOUND) + get_filename_component(polarssl_library_path "${POLARSSL_LIBRARIES}" PATH) diff --git a/package/bctoolbox/Config.in b/package/bctoolbox/Config.in new file mode 100644 index 00000000..1cf2b7e2 --- /dev/null +++ b/package/bctoolbox/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_BCTOOLBOX + bool "bctoolbox" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # exception_ptr + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + Utilities library used by Belledonne Communications + softwares like belle-sip, mediastreamer2 and linphone. + + Select BR2_PACKAGE_MBEDTLS for crypto support. + + https://github.com/BelledonneCommunications/bctoolbox + +comment "bctoolbox needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS + +comment "bctoolbox needs a toolchain not affected by GCC bug 64735" + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 diff --git a/package/bctoolbox/bctoolbox.hash b/package/bctoolbox/bctoolbox.hash new file mode 100644 index 00000000..9b1f9e82 --- /dev/null +++ b/package/bctoolbox/bctoolbox.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 446b60e81a79b11e8212c44e312aeb0ce46e9ecf0269a35c492ecdca3e7428c3 bctoolbox-4.4.8.tar.gz +sha256 1b3782ccad7b8614100cda30d3faf42fc39f2e97932908c543005053b654ca68 LICENSE.txt diff --git a/package/bctoolbox/bctoolbox.mk b/package/bctoolbox/bctoolbox.mk new file mode 100644 index 00000000..ac936102 --- /dev/null +++ b/package/bctoolbox/bctoolbox.mk @@ -0,0 +1,42 @@ +################################################################################ +# +# bctoolbox +# +################################################################################ + +BCTOOLBOX_VERSION = 4.4.8 +BCTOOLBOX_SITE = $(call github,BelledonneCommunications,bctoolbox,$(BCTOOLBOX_VERSION)) +BCTOOLBOX_LICENSE = GPL-3.0+ +BCTOOLBOX_LICENSE_FILES = LICENSE.txt +BCTOOLBOX_INSTALL_STAGING = YES + +# Set CMAKE_SKIP_RPATH to prevent bctoolbox from adding the rpath to +# shared library. +BCTOOLBOX_CONF_OPTS = \ + -DENABLE_POLARSSL=OFF \ + -DENABLE_STRICT=OFF \ + -DENABLE_TESTS_COMPONENT=OFF \ + -DENABLE_TESTS=OFF \ + -DCMAKE_SKIP_RPATH=ON + +ifeq ($(BR2_PACKAGE_LIBICONV),y) +BCTOOLBOX_DEPENDENCIES += libiconv +BCTOOLBOX_CONF_OPTS += -DCMAKE_CXX_FLAGS="$(TARGET_CXXFLAGS) -liconv" +endif + +ifeq ($(BR2_PACKAGE_MBEDTLS),y) +BCTOOLBOX_DEPENDENCIES += mbedtls +BCTOOLBOX_CONF_OPTS += -DENABLE_MBEDTLS=ON +else +BCTOOLBOX_CONF_OPTS += -DENABLE_MBEDTLS=OFF +endif + +ifeq ($(BR2_STATIC_LIBS),y) +BCTOOLBOX_CONF_OPTS += -DENABLE_SHARED=OFF -DENABLE_STATIC=ON +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +BCTOOLBOX_CONF_OPTS += -DENABLE_SHARED=ON -DENABLE_STATIC=ON +else ifeq ($(BR2_SHARED_LIBS),y) +BCTOOLBOX_CONF_OPTS += -DENABLE_SHARED=ON -DENABLE_STATIC=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/bcusdk/0001-fd_set-requires-inclusion-of-sys-select.h.patch b/package/bcusdk/0001-fd_set-requires-inclusion-of-sys-select.h.patch new file mode 100644 index 00000000..723de5c1 --- /dev/null +++ b/package/bcusdk/0001-fd_set-requires-inclusion-of-sys-select.h.patch @@ -0,0 +1,31 @@ +From 2541ee3d709803096b17e45610ccc1404e2e5eee Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sat, 8 Aug 2015 17:46:34 +0200 +Subject: [PATCH] fd_set requires inclusion of + +According to POSIX.1-2001, the definition fd_set and related macros is +in , so it should be included in files using fd_set to +make the code compatible with all standard C libraries. + +Submitted upstream: https://sourceforge.net/p/bcusdk/patches/3/ + +Signed-off-by: Thomas Petazzoni +--- + eibd/examples/common.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/eibd/examples/common.h b/eibd/examples/common.h +index 51fc514..f038da1 100644 +--- a/eibd/examples/common.h ++++ b/eibd/examples/common.h +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + #include "eibclient.h" + + /** unsigned char*/ +-- +2.5.0 + diff --git a/package/bcusdk/0002-eibd-fix-endless-recursion-when-using-USB-backends.patch b/package/bcusdk/0002-eibd-fix-endless-recursion-when-using-USB-backends.patch new file mode 100644 index 00000000..3b90289c --- /dev/null +++ b/package/bcusdk/0002-eibd-fix-endless-recursion-when-using-USB-backends.patch @@ -0,0 +1,35 @@ +From 6bd1b4958e949d83468e053c34bf6c89d14d687a Mon Sep 17 00:00:00 2001 +From: Kurt Van Dijck +Date: Fri, 25 Aug 2017 23:01:14 +0200 +Subject: [PATCH] eibd: drop local clock_gettime in USB backends + +clock_gettime is defined locally, and calls pth_int_time, which +in turn calls clock_gettime. +The USB backend shouldn't overrule clock_gettime in the first place. +This patch fixes this endless recursion by removing the local defition. + +Signed-off-by: Kurt Van Dijck +--- + eibd/usb/linux_usbfs.c | 6 ------ + 1 file changed, 6 deletions(-) + +diff --git a/eibd/usb/linux_usbfs.c b/eibd/usb/linux_usbfs.c +index c3ec410..957b908 100644 +--- a/eibd/usb/linux_usbfs.c ++++ b/eibd/usb/linux_usbfs.c +@@ -52,12 +52,6 @@ int pthread_mutex_trylock(pthread_mutex_t *mutex) + return 0; + } + +-int clock_gettime(clockid_t clk_id, struct timespec *tp) +-{ +- pth_int_time (tp); +- return 0; +-} +- + /* sysfs vs usbfs: + * opening a usbfs node causes the device to be resumed, so we attempt to + * avoid this during enumeration. +-- +1.8.5.rc3 + diff --git a/package/bcusdk/Config.in b/package/bcusdk/Config.in new file mode 100644 index 00000000..8f9330e0 --- /dev/null +++ b/package/bcusdk/Config.in @@ -0,0 +1,25 @@ +config BR2_PACKAGE_BCUSDK + bool "bcusdk" + depends on BR2_USE_MMU # libpthsem + depends on BR2_INSTALL_LIBSTDCPP + select BR2_PACKAGE_LIBPTHSEM + select BR2_PACKAGE_ARGP_STANDALONE if BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_MUSL + help + A free development environment for the Bus Coupling Units of + the European Installation Bus. + + The European Installation Bus EIB is a home and building + automation bus system. It is optimized for low-speed control + applications like lighting and blinds control. + + BCUs (Bus Coupling Units) are standardized, generic + platforms for embedded EIB devices. They include the entire + physical layer network interface, power supply and a + microcontroller with an implementation of the EIB protocol + stack stored in the ROM. + + http://www.auto.tuwien.ac.at/~mkoegler/eib/ + +comment "bcusdk needs a toolchain w/ C++" + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/bcusdk/bcusdk.hash b/package/bcusdk/bcusdk.hash new file mode 100644 index 00000000..a9706214 --- /dev/null +++ b/package/bcusdk/bcusdk.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 014cdaafc36f223c584b39ae5d698dd037a8e15aba4e78a2e531b51ff1331304 bcusdk_0.0.5.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/bcusdk/bcusdk.mk b/package/bcusdk/bcusdk.mk new file mode 100644 index 00000000..ff5becd8 --- /dev/null +++ b/package/bcusdk/bcusdk.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# bcusdk +# +################################################################################ + +BCUSDK_VERSION = 0.0.5 +BCUSDK_SOURCE = bcusdk_$(BCUSDK_VERSION).tar.gz +BCUSDK_SITE = http://www.auto.tuwien.ac.at/~mkoegler/eib +BCUSDK_LICENSE = GPL-2.0+ +BCUSDK_LICENSE_FILES = COPYING +BCUSDK_INSTALL_STAGING = YES +BCUSDK_CONF_OPTS = \ + --enable-onlyeibd \ + --enable-ft12 \ + --enable-pei16 \ + --enable-tpuarts \ + --enable-eibnetip \ + --enable-eibnetipserver \ + --enable-eibnetiptunnel \ + --without-pth-test \ + --with-pth=$(STAGING_DIR)/usr + +BCUSDK_DEPENDENCIES = \ + libpthsem \ + $(if $(BR2_PACKAGE_ARGP_STANDALONE),argp-standalone) + +define BCUSDK_REMOVE_EXAMPLES + $(RM) -rf $(TARGET_DIR)/usr/share/bcusdk +endef + +BCUSDK_POST_INSTALL_TARGET_HOOKS += BCUSDK_REMOVE_EXAMPLES + +$(eval $(autotools-package)) diff --git a/package/bdwgc/Config.in b/package/bdwgc/Config.in new file mode 100644 index 00000000..95139efb --- /dev/null +++ b/package/bdwgc/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_BDWGC + bool "bdwgc" + depends on BR2_PACKAGE_LIBATOMIC_OPS_ARCH_SUPPORTS + select BR2_PACKAGE_LIBATOMIC_OPS + help + The Boehm-Demers-Weiser conservative garbage collector can + be used as a garbage collecting replacement for C 'malloc' + or C++ 'new'. + + http://www.hboehm.info/gc/ diff --git a/package/bdwgc/bdwgc.hash b/package/bdwgc/bdwgc.hash new file mode 100644 index 00000000..4d221319 --- /dev/null +++ b/package/bdwgc/bdwgc.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 436a0ddc67b1ac0b0405b61a9675bca9e075c8156f4debd1d06f3a56c7cd289d gc-8.0.4.tar.gz +sha256 aeeaabbf44e67d413e18719f0c6ac9c23387ab0b33e7a15ee46cf59ddef12cc7 README.QUICK diff --git a/package/bdwgc/bdwgc.mk b/package/bdwgc/bdwgc.mk new file mode 100644 index 00000000..57dd82ca --- /dev/null +++ b/package/bdwgc/bdwgc.mk @@ -0,0 +1,36 @@ +################################################################################ +# +# bdwgc +# +################################################################################ + +BDWGC_VERSION = 8.0.4 +BDWGC_SOURCE = gc-$(BDWGC_VERSION).tar.gz +BDWGC_SITE = http://www.hboehm.info/gc/gc_source +BDWGC_INSTALL_STAGING = YES +BDWGC_LICENSE = bdwgc license +BDWGC_LICENSE_FILES = README.QUICK +BDWGC_CPE_ID_VENDOR = bdwgc_project +BDWGC_DEPENDENCIES = libatomic_ops host-pkgconf +HOST_BDWGC_DEPENDENCIES = host-libatomic_ops host-pkgconf + +BDWGC_CONF_OPTS = CFLAGS_EXTRA="$(BDWGC_CFLAGS_EXTRA)" +ifeq ($(BR2_sparc),y) +BDWGC_CFLAGS_EXTRA += -DAO_NO_SPARC_V9 +endif +ifeq ($(BR2_STATIC_LIBS),y) +BDWGC_CFLAGS_EXTRA += -DGC_NO_DLOPEN +endif + +# Ensure we use the system libatomic_ops, and not the internal one. +BDWGC_CONF_OPTS += --with-libatomic-ops=yes +HOST_BDWGC_CONF_OPTS = --with-libatomic-ops=yes + +ifeq ($(BR2_INSTALL_LIBSTDCPP),y) +BDWGC_CONF_OPTS += --enable-cplusplus +else +BDWGC_CONF_OPTS += --disable-cplusplus +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/bearssl/Config.in b/package/bearssl/Config.in new file mode 100644 index 00000000..b10ce602 --- /dev/null +++ b/package/bearssl/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_BEARSSL + bool "bearssl" + help + BearSSL is an implementation of the SSL/TLS protocol + (RFC 5246) written in C. + + https://bearssl.org diff --git a/package/bearssl/bearssl.hash b/package/bearssl/bearssl.hash new file mode 100644 index 00000000..e0007626 --- /dev/null +++ b/package/bearssl/bearssl.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 6705bba1714961b41a728dfc5debbe348d2966c117649392f8c8139efc83ff14 bearssl-0.6.tar.gz +sha256 771bf18c8633ea69ec9b07d2e604c4b99b7bef41b0f5ce6385d24df4448f61ca LICENSE.txt diff --git a/package/bearssl/bearssl.mk b/package/bearssl/bearssl.mk new file mode 100644 index 00000000..ff5f4e87 --- /dev/null +++ b/package/bearssl/bearssl.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# bearssl +# +################################################################################ + +BEARSSL_VERSION = 0.6 +BEARSSL_SITE = https://bearssl.org +BEARSSL_LICENSE = MIT +BEARSSL_LICENSE_FILES = LICENSE.txt +BEARSSL_INSTALL_STAGING = YES + +BEARSSL_MAKE_OPTS = \ + $(TARGET_CONFIGURE_OPTS) \ + LDDLL=$(TARGET_CC) + +ifeq ($(BR2_SHARED_LIBS)$(BR2_SHARED_STATIC_LIBS),y) +BEARSSL_TARGETS += dll +BEARSSL_MAKE_OPTS += CFLAGS="$(TARGET_CFLAGS) -fPIC" +endif + +ifeq ($(BR2_STATIC_LIBS)$(BR2_SHARED_STATIC_LIBS),y) +BEARSSL_TARGETS += lib +endif + +define BEARSSL_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(BEARSSL_MAKE_OPTS) -C $(@D) \ + $(BEARSSL_TARGETS) +endef + +define BEARSSL_INSTALL_STAGING_CMDS + mkdir -p $(STAGING_DIR)/usr/include + cp -dpfr $(@D)/inc/*.h $(STAGING_DIR)/usr/include + mkdir -p $(STAGING_DIR)/usr/lib + cp -dpfr $(@D)/build/lib* $(STAGING_DIR)/usr/lib +endef + +define BEARSSL_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/usr/lib + cp -dpfr $(@D)/build/lib* $(TARGET_DIR)/usr/lib +endef + +$(eval $(generic-package)) diff --git a/package/beecrypt/0001-cppglue.cxx-cplusplus-only.patch b/package/beecrypt/0001-cppglue.cxx-cplusplus-only.patch new file mode 100644 index 00000000..298e3eba --- /dev/null +++ b/package/beecrypt/0001-cppglue.cxx-cplusplus-only.patch @@ -0,0 +1,28 @@ +Makefile.am: Only compile/link cppglue.cxx if --with-cplusplus is used + +Bloats libbeecrypt for no use and breaks build on systems without a C++ +compiler. + +Signed-off-by: Peter Korsgaard +--- + Makefile.am | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +Index: beecrypt-4.2.1/Makefile.am +=================================================================== +--- beecrypt-4.2.1.orig/Makefile.am ++++ beecrypt-4.2.1/Makefile.am +@@ -62,7 +62,12 @@ + + lib_LTLIBRARIES = libbeecrypt.la + +-libbeecrypt_la_SOURCES = aes.c base64.c beecrypt.c blockmode.c blockpad.c blowfish.c dhies.c dldp.c dlkp.c dlpk.c dlsvdp-dh.c dsa.c elgamal.c endianness.c entropy.c fips186.c hmac.c hmacmd5.c hmacsha1.c hmacsha224.c hmacsha256.c md4.c md5.c hmacsha384.c hmacsha512.c memchunk.c mp.c mpbarrett.c mpnumber.c mpprime.c mtprng.c pkcs1.c pkcs12.c ripemd128.c ripemd160.c ripemd256.c ripemd320.c rsa.c rsakp.c rsapk.c sha1.c sha224.c sha256.c sha384.c sha512.c sha2k32.c sha2k64.c timestamp.c cppglue.cxx ++libbeecrypt_la_SOURCES = aes.c base64.c beecrypt.c blockmode.c blockpad.c blowfish.c dhies.c dldp.c dlkp.c dlpk.c dlsvdp-dh.c dsa.c elgamal.c endianness.c entropy.c fips186.c hmac.c hmacmd5.c hmacsha1.c hmacsha224.c hmacsha256.c md4.c md5.c hmacsha384.c hmacsha512.c memchunk.c mp.c mpbarrett.c mpnumber.c mpprime.c mtprng.c pkcs1.c pkcs12.c ripemd128.c ripemd160.c ripemd256.c ripemd320.c rsa.c rsakp.c rsapk.c sha1.c sha224.c sha256.c sha384.c sha512.c sha2k32.c sha2k64.c timestamp.c ++ ++if WITH_CPLUSPLUS ++libbeecrypt_la_SOURCES += cppglue.cxx ++endif ++ + libbeecrypt_la_DEPENDENCIES = $(BEECRYPT_OBJECTS) + libbeecrypt_la_LIBADD = blowfishopt.lo mpopt.lo sha1opt.lo $(OPENMP_LIBS) + libbeecrypt_la_LDFLAGS = -no-undefined -version-info $(LIBBEECRYPT_LT_CURRENT):$(LIBBEECRYPT_LT_REVISION):$(LIBBEECRYPT_LT_AGE) diff --git a/package/beecrypt/0002-build-system.patch b/package/beecrypt/0002-build-system.patch new file mode 100644 index 00000000..05746899 --- /dev/null +++ b/package/beecrypt/0002-build-system.patch @@ -0,0 +1,173 @@ +Fix build with BR2_ENABLE_DEBUG=yes, no need for expert mode anymore + +Otherwise configure issues this error message: +configure: error: --enable-debug cannot be used in conjunction with --enable-expert-mode + +Downloaded from Gentoo: +http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/dev-libs/beecrypt/files/beecrypt-4.2.1-build-system.patch?revision=1.2&view=markup + +This patch also removes the hard-coded CFLAGS provided by beecrypt in favour +of the CFLAGS provided by buildroot. + +Signed-off-by: Bernd Kuhls + +--- beecrypt-4.2.1/configure.ac ++++ beecrypt-4.2.1/configure.ac +@@ -11,7 +11,7 @@ + + # Checks for package options + AC_ARG_ENABLE(expert-mode, [ --enable-expert-mode follow user-defined CFLAGS settings [[default=no]]],[ +- ac_enable_expert_mode=yes ++ ac_enable_expert_mode=$enableval + ],[ + if test "X$CFLAGS" != "X"; then + echo "enabling expert mode" +@@ -25,7 +25,7 @@ + if test "$ac_enable_expert_mode" = yes; then + AC_MSG_ERROR([--enable-debug cannot be used in conjunction with --enable-expert-mode]) + fi +- ac_enable_debug=yes ++ ac_enable_debug=$enableval + ],[ + ac_enable_debug=no + ]) +@@ -456,7 +456,7 @@ + ac_cv_python_include="-I`$PYTHON -c 'import distutils.sysconfig; print distutils.sysconfig.get_python_inc()'`" + ]) + AC_CACHE_CHECK([where to install python libraries], ac_cv_python_libdir, [ +- ac_cv_python_libdir=`$PYTHON -c 'import distutils.sysconfig; print distutils.sysconfig.get_python_lib()'` ++ ac_cv_python_libdir=`$PYTHON -c 'import distutils.sysconfig; print distutils.sysconfig.get_python_lib(1, 0)'` + ]) + fi + fi +--- beecrypt-4.2.1/acinclude.m4 ++++ beecrypt-4.2.1/acinclude.m4 +@@ -498,15 +498,6 @@ AC_DEFUN([BEE_GNU_CC],[ + AC_SUBST(OPENMP_LIBS,"-lgomp") + fi + case $bc_target_arch in +- x86_64 | athlon64 | athlon-fx | k8 | opteron | em64t | nocona) +- CC="$CC -m64" +- ;; +- i[[3456]]86 | \ +- pentium* | \ +- athlon*) +- CC="$CC -m32" +- CCAS="$CCAS -m32" +- ;; + ia64) + case $target_os in + # HP/UX on Itanium needs to be told that a long is 64-bit! +@@ -525,17 +516,8 @@ AC_DEFUN([BEE_GNU_CC],[ + aix*) + CC="$CC -maix64" + ;; +- linux*) +- CC="$CC -m64" +- ;; + esac + ;; +- sparc | sparcv8*) +- CC="$CC -m32" +- ;; +- sparc64 | sparcv9*) +- CC="$CC -m64" +- ;; + esac + # Certain platforms needs special flags for multi-threaded code + if test "$ac_enable_threads" = yes; then +@@ -646,14 +646,6 @@ dnl BEE_GNU_CXX + AC_DEFUN([BEE_GNU_CXX],[ + AC_REQUIRE([AC_PROG_CXX]) + case $bc_target_arch in +- x86_64 | athlon64 | athlon-fx | k8 | opteron | em64t | nocona | core2) +- CXX="$CXX -m64" +- ;; +- i[[3456]]86 | \ +- pentium* | \ +- athlon*) +- CXX="$CXX -m32" +- ;; + ia64) + case $target_os in + # HP/UX on Itanium needs to be told that a long is 64-bit! +@@ -672,17 +664,8 @@ AC_DEFUN([BEE_GNU_CXX],[ + aix*) + CXX="$CXX -maix64" + ;; +- linux*) +- CXX="$CXX -m64" +- ;; + esac + ;; +- sparc | sparcv8*) +- CXX="$CXX -m32" +- ;; +- sparc64 | sparcv9*) +- CXX="$CXX -m64" +- ;; + esac + # Certain platforms needs special flags for multi-threaded code + if test "$ac_enable_threads" = yes; then +--- beecrypt-4.2.1/java/Makefile.am ++++ beecrypt-4.2.1/java/Makefile.am +@@ -26,7 +26,7 @@ + + INCLUDES = -I$(top_srcdir)/include + +-libaltdir=$(prefix)/lib@LIBALT@ ++libaltdir=$(libdir) + + libalt_LTLIBRARIES = libbeecrypt_java.la + +--- beecrypt-4.2.1/acinclude.m4 ++++ beecrypt-4.2.1/acinclude.m4 +@@ -1589,20 +1589,5 @@ + AC_SUBST(TYPEDEF_BC_THREADID_T,$bc_typedef_bc_threadid_t) + ]) +- +-AH_BOTTOM([ +-#if ENABLE_THREADS +-# ifndef _REENTRANT +-# define _REENTRANT +-# endif +-# if LINUX +-# define _LIBC_REENTRANT +-# endif +-#else +-# ifdef _REENTRANT +-# undef _REENTRANT +-# endif +-#endif +-]) + + + dnl BEE_THREAD_LOCAL_STORAGE +@@ -1623,7 +1609,5 @@ + ]) + + AH_BOTTOM([ +-#if !ENABLE_THREAD_LOCAL_STORAGE +-# define __thread +-#endif ++#include "config.threads.h" + ]) +--- beecrypt-4.2.1/config.threads.h ++++ beecrypt-4.2.1/config.threads.h +@@ -0,0 +1,16 @@ ++#if ENABLE_THREADS ++# ifndef _REENTRANT ++# define _REENTRANT ++# endif ++# if LINUX ++# define _LIBC_REENTRANT ++# endif ++#else ++# ifdef _REENTRANT ++# undef _REENTRANT ++# endif ++#endif ++ ++#if !ENABLE_THREAD_LOCAL_STORAGE ++# define __thread ++#endif diff --git a/package/beecrypt/0003-don-t-check-for-cplusplus-compiler.patch b/package/beecrypt/0003-don-t-check-for-cplusplus-compiler.patch new file mode 100644 index 00000000..32f16799 --- /dev/null +++ b/package/beecrypt/0003-don-t-check-for-cplusplus-compiler.patch @@ -0,0 +1,27 @@ +configure.ac: don't check for C++ compiler + +Signed-off-by: Fabrice Fontaine + +diff -durN beecrypt-4.2.1-orig/configure.ac beecrypt-4.2.1/configure.ac +--- beecrypt-4.2.1-orig/configure.ac 2019-03-01 19:58:16.516117640 +0100 ++++ beecrypt-4.2.1/configure.ac 2019-03-01 21:10:17.707391803 +0100 +@@ -119,9 +119,6 @@ + + # Checks for C compiler and preprocessor + AC_PROG_CC +-AC_PROG_CPP +-AC_PROG_CXX +-AC_PROG_CXXCPP + AM_PROG_AS + AC_PROG_LD + AC_PROG_LN_S +@@ -133,9 +130,6 @@ + AC_LANG_PUSH(C) + AC_OPENMP + AC_LANG_POP(C) +-AC_LANG_PUSH(C++) +-AC_OPENMP +-AC_LANG_POP(C++) + + # Checks for compiler characteristics and flags + if test "$ac_enable_expert_mode" = no; then diff --git a/package/beecrypt/Config.in b/package/beecrypt/Config.in new file mode 100644 index 00000000..9aec85af --- /dev/null +++ b/package/beecrypt/Config.in @@ -0,0 +1,10 @@ +comment "beecrypt needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_BEECRYPT + bool "beecrypt" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Beecrypt is a general-purpose cryptography library. + + http://beecrypt.sf.net diff --git a/package/beecrypt/beecrypt.hash b/package/beecrypt/beecrypt.hash new file mode 100644 index 00000000..2f84007b --- /dev/null +++ b/package/beecrypt/beecrypt.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 286f1f56080d1a6b1d024003a5fa2158f4ff82cae0c6829d3c476a4b5898c55d beecrypt-4.2.1.tar.gz +sha256 512d2d21b6b3384ba64781abb0208a1b87740bc31e2df48e2b206ddb7e4d5779 COPYING.LIB diff --git a/package/beecrypt/beecrypt.mk b/package/beecrypt/beecrypt.mk new file mode 100644 index 00000000..78c3c2eb --- /dev/null +++ b/package/beecrypt/beecrypt.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# beecrypt +# +################################################################################ + +BEECRYPT_VERSION = 4.2.1 +BEECRYPT_SITE = http://downloads.sourceforge.net/project/beecrypt/beecrypt/$(BEECRYPT_VERSION) +BEECRYPT_AUTORECONF = YES +BEECRYPT_INSTALL_STAGING = YES +BEECRYPT_LICENSE = LGPL-2.1+ +BEECRYPT_LICENSE_FILES = COPYING.LIB +BEECRYPT_CPE_ID_VENDOR = beecrypt_project + +BEECRYPT_CONF_OPTS = \ + --disable-expert-mode \ + --without-java \ + --without-python \ + --disable-openmp \ + --without-cplusplus + +# disable optimized m68k assembly as it doesn't compile for coldfire +ifeq ($(BR2_m68k_cf),y) +BEECRYPT_CONF_OPTS += --enable-debug +endif + +# arm asm optimization doesn't work for thumb-only +ifeq ($(BR2_arm):$(BR2_ARM_CPU_HAS_ARM),y:) +BEECRYPT_CONF_OPTS += --enable-debug +endif + +# automake/libtool uses the C++ compiler to link libbeecrypt because of +# (the optional) cppglue.cxx. Force it to use the C compiler instead. +define BEECRYPT_LINK_WITH_CC + $(SED) 's/--tag=CXX/--tag=CC/g' $(@D)/Makefile +endef +BEECRYPT_POST_CONFIGURE_HOOKS += BEECRYPT_LINK_WITH_CC + +$(eval $(autotools-package)) diff --git a/package/belle-sip/Config.in b/package/belle-sip/Config.in new file mode 100644 index 00000000..8e4de366 --- /dev/null +++ b/package/belle-sip/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_BELLE_SIP + bool "belle-sip" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS # dlfcn.h + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # bctoolbox + depends on BR2_USE_WCHAR + select BR2_PACKAGE_BCTOOLBOX + # needs crypto support in bctoolbox + select BR2_PACKAGE_MBEDTLS + help + Belle-sip is a modern library implementing SIP (RFC 3261) + transport, transaction and dialog layers. + + http://www.linphone.org/technical-corner/belle-sip + +comment "belle-sip needs a toolchain w/ threads, C++, dynamic library, wchar" + depends on !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS || \ + !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR + +comment "belle-sip needs a toolchain not affected by GCC bug 64735" + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 diff --git a/package/belle-sip/belle-sip.hash b/package/belle-sip/belle-sip.hash new file mode 100644 index 00000000..670ce006 --- /dev/null +++ b/package/belle-sip/belle-sip.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 eabba615c97080572c1b9d3c76f8f9cf6a7432eedf37482672e5fa178a688f72 belle-sip-4.4.8.tar.gz +sha256 1b3782ccad7b8614100cda30d3faf42fc39f2e97932908c543005053b654ca68 LICENSE.txt diff --git a/package/belle-sip/belle-sip.mk b/package/belle-sip/belle-sip.mk new file mode 100644 index 00000000..23b60e51 --- /dev/null +++ b/package/belle-sip/belle-sip.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# belle-sip +# +################################################################################ + +BELLE_SIP_VERSION = 4.4.8 +BELLE_SIP_SITE = \ + https://gitlab.linphone.org/BC/public/belle-sip/-/archive/$(BELLE_SIP_VERSION) +BELLE_SIP_LICENSE = GPL-3.0+ +BELLE_SIP_LICENSE_FILES = LICENSE.txt +BELLE_SIP_INSTALL_STAGING = YES +BELLE_SIP_DEPENDENCIES = \ + bctoolbox \ + $(if $(BR2_PACKAGE_ZLIB),zlib) +BELLE_SIP_CONF_OPTS = \ + -DENABLE_STRICT=OFF \ + -DENABLE_TESTS=OFF + +ifeq ($(BR2_PACKAGE_AVAHI_LIBDNSSD_COMPATIBILITY),y) +BELLE_SIP_CONF_OPTS += -DENABLE_MDNS=ON +BELLE_SIP_DEPENDENCIES += avahi +else +BELLE_SIP_CONF_OPTS += -DENABLE_MDNS=OFF +endif + +ifeq ($(BR2_STATIC_LIBS),y) +BELLE_SIP_CONF_OPTS += -DENABLE_SHARED=OFF -DENABLE_STATIC=ON +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +BELLE_SIP_CONF_OPTS += -DENABLE_SHARED=ON -DENABLE_STATIC=ON +else ifeq ($(BR2_SHARED_LIBS),y) +BELLE_SIP_CONF_OPTS += -DENABLE_SHARED=ON -DENABLE_STATIC=OFF +endif + +BELLE_SIP_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_99140),y) +BELLE_SIP_CFLAGS += -O0 +endif + +BELLE_SIP_CONF_OPTS += -DCMAKE_C_FLAGS="$(BELLE_SIP_CFLAGS)" + +$(eval $(cmake-package)) diff --git a/package/belr/Config.in b/package/belr/Config.in new file mode 100644 index 00000000..f3f742ad --- /dev/null +++ b/package/belr/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_BELR + bool "belr" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS # bctoolbox + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # bctoolbox + select BR2_PACKAGE_BCTOOLBOX + help + Belr is Belledonne Communications' language recognition + library, written in C++11. It parses text inputs formatted + according to a language defined by an ABNF grammar, such as + the protocols standardized at IETF. + + https://gitlab.linphone.org/BC/public/belr + +comment "belr needs a toolchain w/ threads, C++" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS + +comment "belr needs a toolchain not affected by GCC bug 64735" + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 diff --git a/package/belr/belr.hash b/package/belr/belr.hash new file mode 100644 index 00000000..00c733c7 --- /dev/null +++ b/package/belr/belr.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 6358aa680193d972c831d677da1652c7f57d7e00649b971d4d9fbdebf4331b48 belr-4.4.8.tar.gz +sha256 1b3782ccad7b8614100cda30d3faf42fc39f2e97932908c543005053b654ca68 LICENSE.txt diff --git a/package/belr/belr.mk b/package/belr/belr.mk new file mode 100644 index 00000000..f243830a --- /dev/null +++ b/package/belr/belr.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# belr +# +################################################################################ + +BELR_VERSION = 4.4.8 +BELR_SITE = https://gitlab.linphone.org/BC/public/belr/-/archive/$(BELR_VERSION) +BELR_LICENSE = GPL-3.0+ +BELR_LICENSE_FILES = LICENSE.txt +BELR_INSTALL_STAGING = YES +BELR_DEPENDENCIES = bctoolbox +BELR_CONF_OPTS = \ + -DENABLE_STRICT=OFF \ + -DENABLE_TESTS=OFF \ + -DENABLE_TOOLS=OFF + +ifeq ($(BR2_STATIC_LIBS),y) +BELR_CONF_OPTS += -DENABLE_SHARED=OFF -DENABLE_STATIC=ON +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +BELR_CONF_OPTS += -DENABLE_SHARED=ON -DENABLE_STATIC=ON +else ifeq ($(BR2_SHARED_LIBS),y) +BELR_CONF_OPTS += -DENABLE_SHARED=ON -DENABLE_STATIC=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/benejson/0001-c-std.patch b/package/benejson/0001-c-std.patch new file mode 100644 index 00000000..2330b790 --- /dev/null +++ b/package/benejson/0001-c-std.patch @@ -0,0 +1,22 @@ +Some older toolchains do not recognize c11 as a valid standard. +Since the code actually builds well with c99, use that instead. + +The only two non-standard features used are // comments +and for(int i ...) declarations in C. + +Signed-off-by: Alex Suykov + +--- a/SConstruct ++++ b/SConstruct +@@ -9,9 +9,8 @@ mydir = os.getcwd() + #Set default C++ building flags for both libraries and executables + default_env = Environment(ENV = os.environ) + default_env.Append(CPPPATH = [mydir + '/include']) +-default_env.Append(CCFLAGS = ' -Wall -pedantic') +-default_env.Append(CFLAGS = ' -std=c11') +-default_env.Append(CXXFLAGS = ' -std=c++11') ++default_env.Append(CFLAGS = ' -Wall') ++default_env.Append(CFLAGS = ' -std=c99') + #default_env.Append(CCFLAGS = ' -O2 -fomit-frame-pointer') + default_env.Append(CCFLAGS = ' -O0 -g') + diff --git a/package/benejson/0002-Use-print-as-a-function-for-Py3-compatibility.patch b/package/benejson/0002-Use-print-as-a-function-for-Py3-compatibility.patch new file mode 100644 index 00000000..287d7bf0 --- /dev/null +++ b/package/benejson/0002-Use-print-as-a-function-for-Py3-compatibility.patch @@ -0,0 +1,31 @@ +Use print as a function in SConstruct build file for Py3 compatibility. +This allow to run SCons on Python 3 + +[Upstream status: https://github.com/codehero/benejson/pull/12] + +Signed-off-by: Titouan Christophe +--- + benejson/SConscript | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/benejson/SConscript b/benejson/SConscript +index b7c5d10..80b4875 100644 +--- a/benejson/SConscript ++++ b/benejson/SConscript +@@ -9,11 +9,11 @@ lib_env = lib_env.Clone() + conf = Configure(lib_env) + + if not conf.CheckFunc("stpcpy"): +- print "Did not find stpcpy(), using bnj local version" ++ print("Did not find stpcpy(), using bnj local version") + conf.env.Append(CPPDEFINES = ["-Dstpcpy=bnj_local_stpcpy"]) + + if not conf.CheckFunc("stpncpy"): +- print "Did not find stpncpy(), using bnj local version" ++ print("Did not find stpncpy(), using bnj local version") + conf.env.Append(CPPDEFINES = ["-Dstpncpy=bnj_local_stpncpy"]) + lib_env = conf.Finish() + +-- +2.21.0 + diff --git a/package/benejson/Config.in b/package/benejson/Config.in new file mode 100644 index 00000000..cb86d672 --- /dev/null +++ b/package/benejson/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_BENEJSON + bool "benejson" + depends on BR2_INSTALL_LIBSTDCPP + help + benejson is a buffering SAX-style JSON parser library. + The library package contains 3 major components: + + - benejson.js: SAX-style parser written in Javascript + - PullParser: A C++ class for JSON pull parsing + - Core: The parsing core with minimal dependencies + + https://codehero.github.io/benejson/ + +comment "benejson needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/benejson/benejson.hash b/package/benejson/benejson.hash new file mode 100644 index 00000000..437e1d9d --- /dev/null +++ b/package/benejson/benejson.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 2ce5f3c2323500bdf651e7fcaecbd1011997141e6067567b8d2caa4cf7182f4a benejson-0.9.7.tar.gz +sha256 d0b7dae881fcb18c4dddfd8b0c1643ae671d5f356d14ba5b4e95ca889cc9ec32 LICENSE diff --git a/package/benejson/benejson.mk b/package/benejson/benejson.mk new file mode 100644 index 00000000..5bb57d02 --- /dev/null +++ b/package/benejson/benejson.mk @@ -0,0 +1,60 @@ +################################################################################ +# +# benejson +# +################################################################################ + +BENEJSON_VERSION = 0.9.7 +BENEJSON_SITE = $(call github,codehero,benejson,$(BENEJSON_VERSION)) +BENEJSON_LICENSE = MIT +BENEJSON_LICENSE_FILES = LICENSE +BENEJSON_INSTALL_STAGING = YES +BENEJSON_DEPENDENCIES = host-python3 host-scons + +# wchar support needs to be manually disabled +ifeq ($(BR2_USE_WCHAR),) +define BENEJSON_DISABLE_WCHAR + $(SED) 's,^#define BNJ_WCHAR_SUPPORT,#undef BNJ_WCHAR_SUPPORT,' \ + $(@D)/benejson/benejson.h +endef +BENEJSON_POST_PATCH_HOOKS += BENEJSON_DISABLE_WCHAR +endif + +BENEJSON_SCONS_TARGETS = include + +ifeq ($(BR2_STATIC_LIBS)$(BR2_SHARED_STATIC_LIBS),y) +BENEJSON_SCONS_TARGETS += lib/libbenejson.a +define BENEJSON_INSTALL_STATIC_LIB + $(INSTALL) -D -m 0644 $(@D)/lib/libbenejson.a \ + $(1)/usr/lib/libbenejson.a +endef +endif # Static enabled + +ifeq ($(BR2_SHARED_LIBS)$(BR2_SHARED_STATIC_LIBS),y) +BENEJSON_SCONS_TARGETS += lib/libbenejson.so +define BENEJSON_INSTALL_SHARED_LIB + $(INSTALL) -D -m 0644 $(@D)/lib/libbenejson.so \ + $(1)/usr/lib/libbenejson.so +endef +endif # Shared enabled + +define BENEJSON_BUILD_CMDS + (cd $(@D); \ + $(TARGET_CONFIGURE_OPTS) CROSS=$(TARGET_CROSS) \ + $(HOST_DIR)/bin/python3 $(SCONS) $(BENEJSON_SCONS_TARGETS)) +endef + +define BENEJSON_INSTALL_STAGING_CMDS + $(INSTALL) -D -m 0644 $(@D)/include/benejson/benejson.h \ + $(STAGING_DIR)/usr/include/benejson/benejson.h; \ + $(INSTALL) -D -m 0644 $(@D)/include/benejson/pull.hh \ + $(STAGING_DIR)/usr/include/benejson/pull.hh + $(call BENEJSON_INSTALL_STATIC_LIB,$(STAGING_DIR)) + $(call BENEJSON_INSTALL_SHARED_LIB,$(STAGING_DIR)) +endef + +define BENEJSON_INSTALL_TARGET_CMDS + $(call BENEJSON_INSTALL_SHARED_LIB,$(TARGET_DIR)) +endef + +$(eval $(generic-package)) diff --git a/package/berkeleydb/0001-cwd-db_config.patch b/package/berkeleydb/0001-cwd-db_config.patch new file mode 100644 index 00000000..08ce5a39 --- /dev/null +++ b/package/berkeleydb/0001-cwd-db_config.patch @@ -0,0 +1,21 @@ +Do not access DB_CONFIG when db_home is not set + +Fixes CVE-2017-10140: +https://bugzilla.redhat.com/show_bug.cgi?id=1464032#c9 + +Downloaded from +http://pkgs.fedoraproject.org/cgit/rpms/libdb.git/commit/?id=8047fa8580659fcae740c25e91b490539b8453eb + +Signed-off-by: Bernd Kuhls + +--- db-5.3.28/src/env/env_open.c.old 2017-06-26 10:32:11.011419981 +0200 ++++ db-5.3.28/src/env/env_open.c 2017-06-26 10:32:46.893721233 +0200 +@@ -473,7 +473,7 @@ + env->db_mode = mode == 0 ? DB_MODE_660 : mode; + + /* Read the DB_CONFIG file. */ +- if ((ret = __env_read_db_config(env)) != 0) ++ if (env->db_home != NULL && (ret = __env_read_db_config(env)) != 0) + return (ret); + + /* diff --git a/package/berkeleydb/0002-atomic_compare_exchange.patch b/package/berkeleydb/0002-atomic_compare_exchange.patch new file mode 100644 index 00000000..81e18ac9 --- /dev/null +++ b/package/berkeleydb/0002-atomic_compare_exchange.patch @@ -0,0 +1,27 @@ +Rename __atomic_compare_exchange to not clash with gcc built-in + +Downloaded from +https://src.fedoraproject.org/cgit/rpms/libdb.git/commit/?id=d6841b3b46a51db98c162347211a5a64d154ea37 + +Signed-off-by: Bernd Kuhls + +--- db-5.3.28/src/dbinc/atomic.h.old 2018-05-23 09:20:04.216914922 +0200 ++++ db-5.3.28/src/dbinc/atomic.h 2018-05-23 09:20:49.510057897 +0200 +@@ -144,7 +144,7 @@ + #define atomic_inc(env, p) __atomic_inc(p) + #define atomic_dec(env, p) __atomic_dec(p) + #define atomic_compare_exchange(env, p, o, n) \ +- __atomic_compare_exchange((p), (o), (n)) ++ __db_atomic_compare_exchange((p), (o), (n)) + static inline int __atomic_inc(db_atomic_t *p) + { + int temp; +@@ -176,7 +176,7 @@ + * http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html + * which configure could be changed to use. + */ +-static inline int __atomic_compare_exchange( ++static inline int __db_atomic_compare_exchange( + db_atomic_t *p, atomic_value_t oldval, atomic_value_t newval) + { + atomic_value_t was; diff --git a/package/berkeleydb/Config.in b/package/berkeleydb/Config.in new file mode 100644 index 00000000..f32d13ab --- /dev/null +++ b/package/berkeleydb/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_BERKELEYDB + bool "berkeleydb" + help + The Berkeley database. A very common library for + database applications. + + http://www.sleepycat.com/products/db.shtml + +if BR2_PACKAGE_BERKELEYDB + +config BR2_PACKAGE_BERKELEYDB_COMPAT185 + bool "DB 1.85 compatibility" + help + Build and install DB 1.85 compatibility API. + +config BR2_PACKAGE_BERKELEYDB_TOOLS + bool "install tools" + help + Install berkeleydb tools, mostly useful for debugging + purposes. + +endif diff --git a/package/berkeleydb/berkeleydb.hash b/package/berkeleydb/berkeleydb.hash new file mode 100644 index 00000000..75293297 --- /dev/null +++ b/package/berkeleydb/berkeleydb.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 76a25560d9e52a198d37a31440fd07632b5f1f8f9f2b6d5438f4bc3e7c9013ef db-5.3.28.NC.tar.gz +sha256 b78815181a53241f9347c6b47d1031fd669946f863e1edc807a291354cec024b LICENSE diff --git a/package/berkeleydb/berkeleydb.mk b/package/berkeleydb/berkeleydb.mk new file mode 100644 index 00000000..36b1894f --- /dev/null +++ b/package/berkeleydb/berkeleydb.mk @@ -0,0 +1,82 @@ +################################################################################ +# +# berkeleydb +# +################################################################################ + +# Since BerkeleyDB version 6 and above are licensed under the Affero +# GPL (AGPL), we want to keep this 'bdb' package at version 5.x to +# avoid licensing issues. +# BerkeleyDB version 6 or above should be provided by a dedicated +# package instead. +BERKELEYDB_VERSION = 5.3.28 +BERKELEYDB_SITE = http://download.oracle.com/berkeley-db +BERKELEYDB_SOURCE = db-$(BERKELEYDB_VERSION).NC.tar.gz +BERKELEYDB_SUBDIR = build_unix +BERKELEYDB_LICENSE = BerkeleyDB License +BERKELEYDB_LICENSE_FILES = LICENSE +BERKELEYDB_CPE_ID_VENDOR = oracle +BERKELEYDB_CPE_ID_PRODUCT = berkeley_db +BERKELEYDB_INSTALL_STAGING = YES +BERKELEYDB_BINARIES = db_archive db_checkpoint db_deadlock db_dump \ + db_hotbackup db_load db_log_verify db_printlog db_recover db_replicate \ + db_stat db_tuner db_upgrade db_verify + +# build directory can't be the directory where configure are there, so.. +define BERKELEYDB_CONFIGURE_CMDS + (cd $(@D)/build_unix; rm -rf config.cache; \ + $(TARGET_CONFIGURE_OPTS) \ + $(TARGET_CONFIGURE_ARGS) \ + ../dist/configure $(QUIET) \ + --target=$(GNU_TARGET_NAME) \ + --host=$(GNU_TARGET_NAME) \ + --build=$(GNU_HOST_NAME) \ + --prefix=/usr \ + --exec-prefix=/usr \ + --sysconfdir=/etc \ + --with-gnu-ld \ + $(if $(BR2_INSTALL_LIBSTDCPP),--enable-cxx,--disable-cxx) \ + --disable-java \ + --disable-tcl \ + $(if $(BR2_PACKAGE_BERKELEYDB_COMPAT185),--enable-compat185,--disable-compat185) \ + $(SHARED_STATIC_LIBS_OPTS) \ + --with-pic \ + --enable-o_direct \ + $(if $(BR2_TOOLCHAIN_HAS_THREADS),--enable-mutexsupport,--disable-mutexsupport) \ + ) +endef + +define HOST_BERKELEYDB_CONFIGURE_CMDS + (cd $(@D)/build_unix; rm -rf config.cache; \ + $(HOST_CONFIGURE_OPTS) \ + ../dist/configure $(QUIET) \ + --prefix=$(HOST_DIR) \ + --with-gnu-ld \ + --disable-cxx \ + --disable-java \ + --disable-tcl \ + --disable-compat185 \ + --with-pic \ + --enable-o_direct \ + --disable-mutexsupport \ + ) +endef + +ifneq ($(BR2_PACKAGE_BERKELEYDB_TOOLS),y) + +define BERKELEYDB_REMOVE_TOOLS + rm -f $(addprefix $(TARGET_DIR)/usr/bin/, $(BERKELEYDB_BINARIES)) +endef + +BERKELEYDB_POST_INSTALL_TARGET_HOOKS += BERKELEYDB_REMOVE_TOOLS + +endif + +define BERKELEYDB_REMOVE_DOCS + rm -rf $(TARGET_DIR)/usr/docs +endef + +BERKELEYDB_POST_INSTALL_TARGET_HOOKS += BERKELEYDB_REMOVE_DOCS + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/bind/0001-cross.patch b/package/bind/0001-cross.patch new file mode 100644 index 00000000..f39be2f8 --- /dev/null +++ b/package/bind/0001-cross.patch @@ -0,0 +1,34 @@ +From 505cc9fcadda5607dc4c5bacb03928c0b35162a8 Mon Sep 17 00:00:00 2001 +From: Gustavo Zacarias +Date: Wed, 4 Nov 2020 17:51:38 +0100 +Subject: [PATCH] Use host compiler to build 'gen' since it's run when + building. + +Signed-off-by: Gustavo Zacarias +[Fabrice: updated for 9.11.10] +Signed-off-by: Fabrice Fontaine +Signed-off-by: Petr Vorel +--- + lib/dns/Makefile.in | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/lib/dns/Makefile.in b/lib/dns/Makefile.in +index 8fc4e94f26..4ac92857e0 100644 +--- a/lib/dns/Makefile.in ++++ b/lib/dns/Makefile.in +@@ -184,10 +184,8 @@ code.h: gen + ./gen -s ${srcdir} > code.h || { rm -f $@ ; exit 1; } + + gen: gen.c +- ${BUILD_CC} ${BUILD_CFLAGS} -I${top_srcdir}/lib/isc/include \ +- ${LFS_CFLAGS} ${LFS_LDFLAGS} \ +- ${BUILD_CPPFLAGS} ${BUILD_LDFLAGS} -o $@ ${srcdir}/gen.c \ +- ${BUILD_LIBS} ${LFS_LIBS} ++ ${HOSTCC} ${HOST_CFLAGS} -I${top_srcdir}/lib/isc/include \ ++ ${HOST_LDFLAGS} -o $@ ${srcdir}/gen.c + + timestamp: include libdns.@A@ + touch timestamp +-- +2.29.1 + diff --git a/package/bind/Config.in b/package/bind/Config.in new file mode 100644 index 00000000..db10ceb3 --- /dev/null +++ b/package/bind/Config.in @@ -0,0 +1,39 @@ +config BR2_PACKAGE_BIND + bool "bind" + depends on BR2_USE_MMU # fork() + help + BIND (Berkeley Internet Name Domain) is an + implementation of the Domain Name System (DNS) protocols + and provides an openly redistributable reference + implementation of the major components of the Domain + Name System, including: + + * a Domain Name System server (named) + * a Domain Name System resolver library + * tools for verifying the proper operation of the DNS + server + + The BIND DNS Server is used on the vast majority of name + serving machines on the Internet, providing a robust and + stable architecture on top of which an organization's naming + architecture can be built. The resolver library included in + the BIND distribution provides the standard APIs for + translation between domain names and Internet addresses and is + intended to be linked with applications requiring name + service. + + https://www.isc.org/bind/ + +if BR2_PACKAGE_BIND + +config BR2_PACKAGE_BIND_SERVER + bool "Install server components" + help + Install server components (named, lwresd) + +config BR2_PACKAGE_BIND_TOOLS + bool "Install tools" + help + Install tools (dig, host, nslookup, nsupdate) + +endif diff --git a/package/bind/S81named b/package/bind/S81named new file mode 100644 index 00000000..1da3008a --- /dev/null +++ b/package/bind/S81named @@ -0,0 +1,38 @@ +#!/bin/sh + +CONFIG=/etc/bind/named.conf +DAEMON=/usr/sbin/named + +[ -f $CONFIG ] || exit 0 + +case "$1" in + start) + if [ ! -f /etc/rndc.key ]; then + printf "Initializing bind control key: " + # if rndc.key is a symlink, the target must exist + touch /etc/rndc.key + rndc-confgen -a -r /dev/urandom 2>/dev/null && echo "OK" || echo "FAIL" + fi + printf "Starting domain name daemon: " + start-stop-daemon -S -x $DAEMON -- -c $CONFIG -u named + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + stop) + printf "Stopping domain name daemon: " + rndc stop || start-stop-daemon -K -x $DAEMON + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + restart) + $0 stop || true + sleep 1 + $0 start + ;; + reload|force-reload) + rndc reload || $0 restart + ;; + *) + echo "Usage: $0 {start|stop|restart|reload|force-reload}" + exit 1 +esac + +exit 0 diff --git a/package/bind/bind.hash b/package/bind/bind.hash new file mode 100644 index 00000000..9311d82d --- /dev/null +++ b/package/bind/bind.hash @@ -0,0 +1,4 @@ +# Verified from https://ftp.isc.org/isc/bind9/9.11.31/bind-9.11.31.tar.gz.asc +# with key 2455774D42FDFE6B9C383EB8FE1002BC5970811F +sha256 f5f24457f42b2e86870d887596e47500e4d40521a098dcb96f3a06f18adfa36a bind-9.11.31.tar.gz +sha256 cad49daa42654bc241762cd998630168a2542c8fd6fad3881e2eac1510bb6fcd COPYRIGHT diff --git a/package/bind/bind.mk b/package/bind/bind.mk new file mode 100644 index 00000000..a5c246a5 --- /dev/null +++ b/package/bind/bind.mk @@ -0,0 +1,134 @@ +################################################################################ +# +# bind +# +################################################################################ + +BIND_VERSION = 9.11.31 +BIND_SITE = https://ftp.isc.org/isc/bind9/$(BIND_VERSION) +# bind does not support parallel builds. +BIND_MAKE = $(MAKE1) +BIND_INSTALL_STAGING = YES +BIND_CONFIG_SCRIPTS = bind9-config isc-config.sh +BIND_LICENSE = MPL-2.0 +BIND_LICENSE_FILES = COPYRIGHT +BIND_CPE_ID_VENDOR = isc +BIND_SELINUX_MODULES = bind +# Only applies to RHEL6.x with DNSSEC validation on +BIND_IGNORE_CVES = CVE-2017-3139 +# Library CVE and not used by bind but used by ISC DHCP +BIND_IGNORE_CVES += CVE-2019-6470 +BIND_TARGET_SERVER_SBIN = arpaname ddns-confgen dnssec-checkds dnssec-coverage +BIND_TARGET_SERVER_SBIN += dnssec-importkey dnssec-keygen dnssec-revoke +BIND_TARGET_SERVER_SBIN += dnssec-settime dnssec-verify genrandom +BIND_TARGET_SERVER_SBIN += isc-hmac-fixup named-journalprint nsec3hash +BIND_TARGET_SERVER_SBIN += lwresd named named-checkconf named-checkzone +BIND_TARGET_SERVER_SBIN += named-compilezone rndc rndc-confgen dnssec-dsfromkey +BIND_TARGET_SERVER_SBIN += dnssec-keyfromlabel dnssec-signzone tsig-keygen +BIND_TARGET_TOOLS_BIN = dig host nslookup nsupdate +BIND_CONF_ENV = \ + BUILD_CC="$(TARGET_CC)" \ + BUILD_CFLAGS="$(TARGET_CFLAGS)" +BIND_CONF_OPTS = \ + $(if $(BR2_TOOLCHAIN_HAS_THREADS),--enable-threads,--disable-threads) \ + --without-lmdb \ + --with-libjson=no \ + --with-randomdev=/dev/urandom \ + --enable-epoll \ + --with-gssapi=no \ + --enable-filter-aaaa \ + --disable-backtrace + +ifeq ($(BR2_PACKAGE_ZLIB),y) +BIND_CONF_OPTS += --with-zlib=$(STAGING_DIR)/usr +BIND_DEPENDENCIES += zlib +else +BIND_CONF_OPTS += --without-zlib +endif + +ifeq ($(BR2_PACKAGE_LIBCAP),y) +BIND_CONF_OPTS += --enable-linux-caps +BIND_DEPENDENCIES += libcap +else +BIND_CONF_OPTS += --disable-linux-caps +endif + +ifeq ($(BR2_PACKAGE_LIBXML2),y) +BIND_CONF_OPTS += --with-libxml2=$(STAGING_DIR)/usr +BIND_DEPENDENCIES += libxml2 +else +BIND_CONF_OPTS += --with-libxml2=no +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +BIND_DEPENDENCIES += host-pkgconf openssl +BIND_CONF_OPTS += \ + --with-openssl=$(STAGING_DIR)/usr \ + --with-ecdsa=yes \ + --with-eddsa=no \ + --with-aes=yes +BIND_CONF_ENV += LIBS=`$(PKG_CONFIG_HOST_BINARY) --libs openssl` +# GOST cipher support requires openssl extra engines +ifeq ($(BR2_PACKAGE_OPENSSL_ENGINES),y) +BIND_CONF_OPTS += --with-gost=yes +else +BIND_CONF_OPTS += --with-gost=no +endif +else +BIND_CONF_OPTS += --with-openssl=no +endif + +# Used by dnssec-keymgr +ifeq ($(BR2_PACKAGE_PYTHON_PLY),y) +BIND_DEPENDENCIES += host-python-ply +BIND_CONF_OPTS += --with-python=$(HOST_DIR)/usr/bin/python +else +BIND_CONF_OPTS += --with-python=no +endif + +ifeq ($(BR2_PACKAGE_READLINE),y) +BIND_DEPENDENCIES += readline +else +BIND_CONF_OPTS += --with-readline=no +endif + +ifeq ($(BR2_STATIC_LIBS),y) +BIND_CONF_OPTS += \ + --without-dlopen \ + --without-libtool +else +BIND_CONF_OPTS += \ + --with-dlopen \ + --with-libtool +endif + +define BIND_TARGET_REMOVE_SERVER + rm -rf $(addprefix $(TARGET_DIR)/usr/sbin/, $(BIND_TARGET_SERVER_SBIN)) +endef + +define BIND_TARGET_REMOVE_TOOLS + rm -rf $(addprefix $(TARGET_DIR)/usr/bin/, $(BIND_TARGET_TOOLS_BIN)) +endef + +ifeq ($(BR2_PACKAGE_BIND_SERVER),y) +define BIND_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D $(BIND_PKGDIR)/S81named \ + $(TARGET_DIR)/etc/init.d/S81named +endef +define BIND_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 $(BIND_PKGDIR)/named.service \ + $(TARGET_DIR)/usr/lib/systemd/system/named.service +endef +else +BIND_POST_INSTALL_TARGET_HOOKS += BIND_TARGET_REMOVE_SERVER +endif + +ifeq ($(BR2_PACKAGE_BIND_TOOLS),) +BIND_POST_INSTALL_TARGET_HOOKS += BIND_TARGET_REMOVE_TOOLS +endif + +define BIND_USERS + named -1 named -1 * /etc/bind - - BIND daemon +endef + +$(eval $(autotools-package)) diff --git a/package/bind/named.service b/package/bind/named.service new file mode 100644 index 00000000..be0158b2 --- /dev/null +++ b/package/bind/named.service @@ -0,0 +1,12 @@ +[Unit] +Description=BIND Domain Name Server +Documentation=man:named(8) +After=network.target + +[Service] +ExecStart=/usr/sbin/named -f -u named +ExecReload=/usr/sbin/rndc reload +ExecStop=/usr/sbin/rndc stop + +[Install] +WantedBy=multi-user.target diff --git a/package/binutils/2.32/0001-sh-conf.patch b/package/binutils/2.32/0001-sh-conf.patch new file mode 100644 index 00000000..fff91ae3 --- /dev/null +++ b/package/binutils/2.32/0001-sh-conf.patch @@ -0,0 +1,48 @@ +From 98b2acf2bd3a527d114a9f8931083c2617a2daa9 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Fri, 25 Dec 2015 11:38:13 +0100 +Subject: [PATCH] sh-conf + +Likewise, binutils has no idea about any of these new targets either, so we +fix that up too.. now we're able to actually build a real toolchain for +sh2a_nofpu- and other more ineptly named toolchains (and yes, there are more +inept targets than that one, really. Go look, I promise). + +[Romain: rebase on top of 2.32] +Signed-off-by: Romain Naour +[Thomas: rebase on top of 2.29, in which sh64 support was removed.] +Signed-off-by: Thomas Petazzoni +--- + configure | 2 +- + configure.ac | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/configure b/configure +index 37476459612..66fbc19f9ff 100755 +--- a/configure ++++ b/configure +@@ -3861,7 +3861,7 @@ case "${target}" in + nvptx*-*-*) + noconfigdirs="$noconfigdirs target-libssp target-libstdc++-v3 target-libobjc" + ;; +- sh-*-*) ++ sh*-*-*) + case "${target}" in + sh*-*-elf) + ;; +diff --git a/configure.ac b/configure.ac +index 46501c28826..6c731930884 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1158,7 +1158,7 @@ case "${target}" in + nvptx*-*-*) + noconfigdirs="$noconfigdirs target-libssp target-libstdc++-v3 target-libobjc" + ;; +- sh-*-*) ++ sh*-*-*) + case "${target}" in + sh*-*-elf) + ;; +-- +2.14.5 + diff --git a/package/binutils/2.32/0002-poison-system-directories.patch b/package/binutils/2.32/0002-poison-system-directories.patch new file mode 100644 index 00000000..98f41e87 --- /dev/null +++ b/package/binutils/2.32/0002-poison-system-directories.patch @@ -0,0 +1,306 @@ +From f559402ea868d370ddf25089c68cda2600db3bfa Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Fri, 25 Dec 2015 11:45:38 +0100 +Subject: [PATCH] poison-system-directories + +Patch adapted to binutils 2.23.2 and extended to use +BR_COMPILER_PARANOID_UNSAFE_PATH by Thomas Petazzoni. + +[Romain: rebase on top of 2.32] +Signed-off-by: Romain Naour +[Gustavo: adapt to binutils 2.25] +Signed-off-by: Thomas Petazzoni +Signed-off-by: Gustavo Zacarias + +Upstream-Status: Inappropriate [distribution: codesourcery] + +Patch originally created by Mark Hatle, forward-ported to +binutils 2.21 by Scott Garman. + +purpose: warn for uses of system directories when cross linking + +Code Merged from Sourcery G++ binutils 2.19 - 4.4-277 + +2008-07-02 Joseph Myers + + ld/ + * ld.h (args_type): Add error_poison_system_directories. + * ld.texinfo (--error-poison-system-directories): Document. + * ldfile.c (ldfile_add_library_path): Check + command_line.error_poison_system_directories. + * ldmain.c (main): Initialize + command_line.error_poison_system_directories. + * lexsup.c (enum option_values): Add + OPTION_ERROR_POISON_SYSTEM_DIRECTORIES. + (ld_options): Add --error-poison-system-directories. + (parse_args): Handle new option. + +2007-06-13 Joseph Myers + + ld/ + * config.in: Regenerate. + * ld.h (args_type): Add poison_system_directories. + * ld.texinfo (--no-poison-system-directories): Document. + * ldfile.c (ldfile_add_library_path): Check + command_line.poison_system_directories. + * ldmain.c (main): Initialize + command_line.poison_system_directories. + * lexsup.c (enum option_values): Add + OPTION_NO_POISON_SYSTEM_DIRECTORIES. + (ld_options): Add --no-poison-system-directories. + (parse_args): Handle new option. + +2007-04-20 Joseph Myers + + Merge from Sourcery G++ binutils 2.17: + + 2007-03-20 Joseph Myers + Based on patch by Mark Hatle . + ld/ + * configure.ac (--enable-poison-system-directories): New option. + * configure, config.in: Regenerate. + * ldfile.c (ldfile_add_library_path): If + ENABLE_POISON_SYSTEM_DIRECTORIES defined, warn for use of /lib, + /usr/lib, /usr/local/lib or /usr/X11R6/lib. + +Signed-off-by: Mark Hatle +Signed-off-by: Scott Garman +--- + ld/config.in | 3 +++ + ld/configure | 14 ++++++++++++++ + ld/configure.ac | 10 ++++++++++ + ld/ld.h | 8 ++++++++ + ld/ld.texi | 12 ++++++++++++ + ld/ldfile.c | 17 +++++++++++++++++ + ld/ldlex.h | 2 ++ + ld/ldmain.c | 2 ++ + ld/lexsup.c | 21 +++++++++++++++++++++ + 9 files changed, 89 insertions(+) + +diff --git a/ld/config.in b/ld/config.in +index d93c9b08300..5da2742beac 100644 +--- a/ld/config.in ++++ b/ld/config.in +@@ -31,6 +31,9 @@ + language is requested. */ + #undef ENABLE_NLS + ++/* Define to warn for use of native system library directories */ ++#undef ENABLE_POISON_SYSTEM_DIRECTORIES ++ + /* Additional extension a shared object might have. */ + #undef EXTRA_SHLIB_EXTENSION + +diff --git a/ld/configure b/ld/configure +index 18ada7808f5..7e7d2f97809 100755 +--- a/ld/configure ++++ b/ld/configure +@@ -822,6 +822,7 @@ with_lib_path + enable_targets + enable_64_bit_bfd + with_sysroot ++enable_poison_system_directories + enable_gold + enable_got + enable_compressed_debug_sections +@@ -1486,6 +1487,8 @@ Optional Features: + --disable-largefile omit support for large files + --enable-targets alternative target configurations + --enable-64-bit-bfd 64-bit support (on hosts with narrower word sizes) ++ --enable-poison-system-directories ++ warn for use of native system library directories + --enable-gold[=ARG] build gold [ARG={default,yes,no}] + --enable-got= GOT handling scheme (target, single, negative, + multigot) +@@ -15803,7 +15806,18 @@ else + fi + + ++# Check whether --enable-poison-system-directories was given. ++if test "${enable_poison_system_directories+set}" = set; then : ++ enableval=$enable_poison_system_directories; ++else ++ enable_poison_system_directories=no ++fi ++ ++if test "x${enable_poison_system_directories}" = "xyes"; then + ++$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h ++ ++fi + + # Check whether --enable-got was given. + if test "${enable_got+set}" = set; then : +diff --git a/ld/configure.ac b/ld/configure.ac +index d335f210917..7f692d93873 100644 +--- a/ld/configure.ac ++++ b/ld/configure.ac +@@ -94,6 +94,16 @@ AC_SUBST(use_sysroot) + AC_SUBST(TARGET_SYSTEM_ROOT) + AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE) + ++AC_ARG_ENABLE([poison-system-directories], ++ AS_HELP_STRING([--enable-poison-system-directories], ++ [warn for use of native system library directories]),, ++ [enable_poison_system_directories=no]) ++if test "x${enable_poison_system_directories}" = "xyes"; then ++ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES], ++ [1], ++ [Define to warn for use of native system library directories]) ++fi ++ + dnl Use --enable-gold to decide if this linker should be the default. + dnl "install_as_default" is set to false if gold is the default linker. + dnl "installed_linker" is the installed BFD linker name. +diff --git a/ld/ld.h b/ld/ld.h +index b97d977f37b..f3bbd2d55d4 100644 +--- a/ld/ld.h ++++ b/ld/ld.h +@@ -180,6 +180,14 @@ typedef struct + in the linker script. */ + bfd_boolean force_group_allocation; + ++ /* If TRUE (the default) warn for uses of system directories when ++ cross linking. */ ++ bfd_boolean poison_system_directories; ++ ++ /* If TRUE (default FALSE) give an error for uses of system ++ directories when cross linking instead of a warning. */ ++ bfd_boolean error_poison_system_directories; ++ + /* Big or little endian as set on command line. */ + enum endian_enum endian; + +diff --git a/ld/ld.texi b/ld/ld.texi +index 5179af3e0e1..f78bf746822 100644 +--- a/ld/ld.texi ++++ b/ld/ld.texi +@@ -2524,6 +2524,18 @@ string identifying the original linked file does not change. + + Passing @code{none} for @var{style} disables the setting from any + @code{--build-id} options earlier on the command line. ++ ++@kindex --no-poison-system-directories ++@item --no-poison-system-directories ++Do not warn for @option{-L} options using system directories such as ++@file{/usr/lib} when cross linking. This option is intended for use ++in chroot environments when such directories contain the correct ++libraries for the target system rather than the host. ++ ++@kindex --error-poison-system-directories ++@item --error-poison-system-directories ++Give an error instead of a warning for @option{-L} options using ++system directories when cross linking. + @end table + + @c man end +diff --git a/ld/ldfile.c b/ld/ldfile.c +index fcadc08c73f..63e295ce8ae 100644 +--- a/ld/ldfile.c ++++ b/ld/ldfile.c +@@ -116,6 +116,23 @@ ldfile_add_library_path (const char *name, bfd_boolean cmdline) + new_dirs->name = concat (ld_sysroot, name + strlen ("$SYSROOT"), (const char *) NULL); + else + new_dirs->name = xstrdup (name); ++ ++#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES ++ if (command_line.poison_system_directories ++ && ((!strncmp (name, "/lib", 4)) ++ || (!strncmp (name, "/usr/lib", 8)) ++ || (!strncmp (name, "/usr/local/lib", 14)) ++ || (!strncmp (name, "/usr/X11R6/lib", 14)))) ++ { ++ if (command_line.error_poison_system_directories) ++ einfo (_("%X%P: error: library search path \"%s\" is unsafe for " ++ "cross-compilation\n"), name); ++ else ++ einfo (_("%P: warning: library search path \"%s\" is unsafe for " ++ "cross-compilation\n"), name); ++ } ++#endif ++ + } + + /* Try to open a BFD for a lang_input_statement. */ +diff --git a/ld/ldlex.h b/ld/ldlex.h +index 32853debe45..8135361c498 100644 +--- a/ld/ldlex.h ++++ b/ld/ldlex.h +@@ -148,6 +148,8 @@ enum option_values + OPTION_REQUIRE_DEFINED_SYMBOL, + OPTION_ORPHAN_HANDLING, + OPTION_FORCE_GROUP_ALLOCATION, ++ OPTION_NO_POISON_SYSTEM_DIRECTORIES, ++ OPTION_ERROR_POISON_SYSTEM_DIRECTORIES, + }; + + /* The initial parser states. */ +diff --git a/ld/ldmain.c b/ld/ldmain.c +index 77cdbd0dd29..725512f1260 100644 +--- a/ld/ldmain.c ++++ b/ld/ldmain.c +@@ -269,6 +269,8 @@ main (int argc, char **argv) + command_line.warn_mismatch = TRUE; + command_line.warn_search_mismatch = TRUE; + command_line.check_section_addresses = -1; ++ command_line.poison_system_directories = TRUE; ++ command_line.error_poison_system_directories = FALSE; + + /* We initialize DEMANGLING based on the environment variable + COLLECT_NO_DEMANGLE. The gcc collect2 program will demangle the +diff --git a/ld/lexsup.c b/ld/lexsup.c +index 88e85c73f49..be4cd492d14 100644 +--- a/ld/lexsup.c ++++ b/ld/lexsup.c +@@ -543,6 +543,14 @@ static const struct ld_option ld_options[] = + { {"orphan-handling", required_argument, NULL, OPTION_ORPHAN_HANDLING}, + '\0', N_("=MODE"), N_("Control how orphan sections are handled."), + TWO_DASHES }, ++ { {"no-poison-system-directories", no_argument, NULL, ++ OPTION_NO_POISON_SYSTEM_DIRECTORIES}, ++ '\0', NULL, N_("Do not warn for -L options using system directories"), ++ TWO_DASHES }, ++ { {"error-poison-system-directories", no_argument, NULL, ++ OPTION_ERROR_POISON_SYSTEM_DIRECTORIES}, ++ '\0', NULL, N_("Give an error for -L options using system directories"), ++ TWO_DASHES }, + }; + + #define OPTION_COUNT ARRAY_SIZE (ld_options) +@@ -555,6 +563,7 @@ parse_args (unsigned argc, char **argv) + int ingroup = 0; + char *default_dirlist = NULL; + char *shortopts; ++ char *BR_paranoid_env; + struct option *longopts; + struct option *really_longopts; + int last_optind; +@@ -1543,6 +1552,14 @@ parse_args (unsigned argc, char **argv) + } + break; + ++ case OPTION_NO_POISON_SYSTEM_DIRECTORIES: ++ command_line.poison_system_directories = FALSE; ++ break; ++ ++ case OPTION_ERROR_POISON_SYSTEM_DIRECTORIES: ++ command_line.error_poison_system_directories = TRUE; ++ break; ++ + case OPTION_PUSH_STATE: + input_flags.pushed = xmemdup (&input_flags, + sizeof (input_flags), +@@ -1586,6 +1603,10 @@ parse_args (unsigned argc, char **argv) + command_line.soname = NULL; + } + ++ BR_paranoid_env = getenv("BR_COMPILER_PARANOID_UNSAFE_PATH"); ++ if (BR_paranoid_env && strlen(BR_paranoid_env) > 0) ++ command_line.error_poison_system_directories = TRUE; ++ + while (ingroup) + { + lang_leave_group (); +-- +2.14.5 + diff --git a/package/binutils/2.32/0003-bfd-xtensa-fix-shrink_dynamic_reloc_sections-for-exp.patch b/package/binutils/2.32/0003-bfd-xtensa-fix-shrink_dynamic_reloc_sections-for-exp.patch new file mode 100644 index 00000000..b80e1fa7 --- /dev/null +++ b/package/binutils/2.32/0003-bfd-xtensa-fix-shrink_dynamic_reloc_sections-for-exp.patch @@ -0,0 +1,41 @@ +From 278989f23735aa501be1052e085540c75c126dbb Mon Sep 17 00:00:00 2001 +From: Max Filippov +Date: Thu, 28 Mar 2019 17:03:57 -0700 +Subject: [PATCH] bfd: xtensa: fix shrink_dynamic_reloc_sections for + export-dynamic + +shrink_dynamic_reloc_sections must remove PLT entry that was created for +an undefined weak symbol in the presence of --export-dynamic option when +relaxation coalesces literals pointing to that symbol. This fixes the +following assertion: + + ld: BFD (GNU Binutils) 2.31.1 internal error, aborting at + elf32-xtensa.c:3292 in elf_xtensa_finish_dynamic_sections + +2019-03-28 Max Filippov +bfd/ + * elf32-xtensa.c (shrink_dynamic_reloc_sections): Add + info->export_dynamic to the conditional. + +Signed-off-by: Max Filippov +--- + bfd/elf32-xtensa.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c +index c3df3d6db756..37ea200eea74 100644 +--- a/bfd/elf32-xtensa.c ++++ b/bfd/elf32-xtensa.c +@@ -10083,7 +10083,8 @@ shrink_dynamic_reloc_sections (struct bfd_link_info *info, + && (input_section->flags & SEC_ALLOC) != 0 + && (dynamic_symbol || bfd_link_pic (info)) + && (!h || h->root.type != bfd_link_hash_undefweak +- || (dynamic_symbol && bfd_link_dll (info)))) ++ || (dynamic_symbol ++ && (bfd_link_dll (info) || info->export_dynamic)))) + { + asection *srel; + bfd_boolean is_plt = FALSE; +-- +2.11.0 + diff --git a/package/binutils/2.32/0004-gas-use-literals-const16-for-xtensa-loop-relaxation.patch b/package/binutils/2.32/0004-gas-use-literals-const16-for-xtensa-loop-relaxation.patch new file mode 100644 index 00000000..ed617bca --- /dev/null +++ b/package/binutils/2.32/0004-gas-use-literals-const16-for-xtensa-loop-relaxation.patch @@ -0,0 +1,294 @@ +From 0dbdfb7918d0b0cfcb8883b24c1291574bf5bb7c Mon Sep 17 00:00:00 2001 +From: Max Filippov +Date: Tue, 2 Apr 2019 14:32:42 -0700 +Subject: [PATCH] gas: use literals/const16 for xtensa loop relaxation + +Loop opcode relaxation that uses addi/addmi doesn't work well with other +relaxations that may cause code movement. Instead of encoding fixed loop +end offset in the relaxed sequence use l32r or a pair of const16 to load +loop end address. This way the address of the loop end gets a relocation +record and it gets updated appropriately. + +gas/ +2019-04-02 Max Filippov + + * config/tc-xtensa.c (convert_frag_immed): Drop + convert_frag_immed_finish_loop invocation. + (convert_frag_immed_finish_loop): Drop declaration and + definition. + * config/xtensa-relax.c (widen_spec_list): Replace loop + widening that uses addi/addmi with widening that uses l32r + and const16. + +Signed-off-by: Max Filippov +--- + gas/config/tc-xtensa.c | 120 ---------------------------------------------- + gas/config/xtensa-relax.c | 77 ++++++++++++++++++++--------- + 2 files changed, 55 insertions(+), 142 deletions(-) + +diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c +index 3bdbbc931cfc..0cc06361cf6f 100644 +--- a/gas/config/tc-xtensa.c ++++ b/gas/config/tc-xtensa.c +@@ -10668,7 +10668,6 @@ convert_frag_fill_nop (fragS *fragP) + static fixS *fix_new_exp_in_seg + (segT, subsegT, fragS *, int, int, expressionS *, int, + bfd_reloc_code_real_type); +-static void convert_frag_immed_finish_loop (segT, fragS *, TInsn *); + + static void + convert_frag_immed (segT segP, +@@ -10910,9 +10909,6 @@ convert_frag_immed (segT segP, + } + } + +- if (expanded && xtensa_opcode_is_loop (isa, orig_tinsn.opcode) == 1) +- convert_frag_immed_finish_loop (segP, fragP, &orig_tinsn); +- + if (expanded && is_direct_call_opcode (orig_tinsn.opcode)) + { + /* Add an expansion note on the expanded instruction. */ +@@ -10949,122 +10945,6 @@ fix_new_exp_in_seg (segT new_seg, + } + + +-/* Relax a loop instruction so that it can span loop >256 bytes. +- +- loop as, .L1 +- .L0: +- rsr as, LEND +- wsr as, LBEG +- addi as, as, lo8 (label-.L1) +- addmi as, as, mid8 (label-.L1) +- wsr as, LEND +- isync +- rsr as, LCOUNT +- addi as, as, 1 +- .L1: +- <> +- label: +-*/ +- +-static void +-convert_frag_immed_finish_loop (segT segP, fragS *fragP, TInsn *tinsn) +-{ +- TInsn loop_insn; +- TInsn addi_insn; +- TInsn addmi_insn; +- unsigned long target; +- static xtensa_insnbuf insnbuf = NULL; +- unsigned int loop_length, loop_length_hi, loop_length_lo; +- xtensa_isa isa = xtensa_default_isa; +- addressT loop_offset; +- addressT addi_offset = 9; +- addressT addmi_offset = 12; +- fragS *next_fragP; +- int target_count; +- +- if (!insnbuf) +- insnbuf = xtensa_insnbuf_alloc (isa); +- +- /* Get the loop offset. */ +- loop_offset = get_expanded_loop_offset (tinsn->opcode); +- +- /* Validate that there really is a LOOP at the loop_offset. Because +- loops are not bundleable, we can assume that the instruction will be +- in slot 0. */ +- tinsn_from_chars (&loop_insn, fragP->fr_opcode + loop_offset, 0); +- tinsn_immed_from_frag (&loop_insn, fragP, 0); +- +- gas_assert (xtensa_opcode_is_loop (isa, loop_insn.opcode) == 1); +- addi_offset += loop_offset; +- addmi_offset += loop_offset; +- +- gas_assert (tinsn->ntok == 2); +- if (tinsn->tok[1].X_op == O_constant) +- target = tinsn->tok[1].X_add_number; +- else if (tinsn->tok[1].X_op == O_symbol) +- { +- /* Find the fragment. */ +- symbolS *sym = tinsn->tok[1].X_add_symbol; +- gas_assert (S_GET_SEGMENT (sym) == segP +- || S_GET_SEGMENT (sym) == absolute_section); +- target = (S_GET_VALUE (sym) + tinsn->tok[1].X_add_number); +- } +- else +- { +- as_bad (_("invalid expression evaluation type %d"), tinsn->tok[1].X_op); +- target = 0; +- } +- +- loop_length = target - (fragP->fr_address + fragP->fr_fix); +- loop_length_hi = loop_length & ~0x0ff; +- loop_length_lo = loop_length & 0x0ff; +- if (loop_length_lo >= 128) +- { +- loop_length_lo -= 256; +- loop_length_hi += 256; +- } +- +- /* Because addmi sign-extends the immediate, 'loop_length_hi' can be at most +- 32512. If the loop is larger than that, then we just fail. */ +- if (loop_length_hi > 32512) +- as_bad_where (fragP->fr_file, fragP->fr_line, +- _("loop too long for LOOP instruction")); +- +- tinsn_from_chars (&addi_insn, fragP->fr_opcode + addi_offset, 0); +- gas_assert (addi_insn.opcode == xtensa_addi_opcode); +- +- tinsn_from_chars (&addmi_insn, fragP->fr_opcode + addmi_offset, 0); +- gas_assert (addmi_insn.opcode == xtensa_addmi_opcode); +- +- set_expr_const (&addi_insn.tok[2], loop_length_lo); +- tinsn_to_insnbuf (&addi_insn, insnbuf); +- +- fragP->tc_frag_data.is_insn = TRUE; +- xtensa_insnbuf_to_chars +- (isa, insnbuf, (unsigned char *) fragP->fr_opcode + addi_offset, 0); +- +- set_expr_const (&addmi_insn.tok[2], loop_length_hi); +- tinsn_to_insnbuf (&addmi_insn, insnbuf); +- xtensa_insnbuf_to_chars +- (isa, insnbuf, (unsigned char *) fragP->fr_opcode + addmi_offset, 0); +- +- /* Walk through all of the frags from here to the loop end +- and mark them as no_transform to keep them from being modified +- by the linker. If we ever have a relocation for the +- addi/addmi of the difference of two symbols we can remove this. */ +- +- target_count = 0; +- for (next_fragP = fragP; next_fragP != NULL; +- next_fragP = next_fragP->fr_next) +- { +- next_fragP->tc_frag_data.is_no_transform = TRUE; +- if (next_fragP->tc_frag_data.is_loop_target) +- target_count++; +- if (target_count == 2) +- break; +- } +-} +- + + /* A map that keeps information on a per-subsegment basis. This is + maintained during initial assembly, but is invalid once the +diff --git a/gas/config/xtensa-relax.c b/gas/config/xtensa-relax.c +index cb296ed85ed2..daf15d52c259 100644 +--- a/gas/config/xtensa-relax.c ++++ b/gas/config/xtensa-relax.c +@@ -87,13 +87,7 @@ + when the first and second operands are not the same as specified + by the "| %at!=%as" precondition clause. + {"l32i %at,%as,%imm | %at!=%as", +- "LITERAL %imm; l32r %at,%LITERAL; add %at,%at,%as; l32i %at,%at,0"} +- +- There is special case for loop instructions here, but because we do +- not currently have the ability to represent the difference of two +- symbols, the conversion requires special code in the assembler to +- write the operands of the addi/addmi pair representing the +- difference of the old and new loop end label. */ ++ "LITERAL %imm; l32r %at,%LITERAL; add %at,%at,%as; l32i %at,%at,0"} */ + + #include "as.h" + #include "xtensa-isa.h" +@@ -306,44 +300,83 @@ static string_pattern_pair widen_spec_list[] = + {"l32i %at,%as,%imm | %at!=%as ? IsaUseConst16", + "const16 %at,HI16U(%imm); const16 %at,LOW16U(%imm); add %at,%at,%as; l32i %at,%at,0"}, + +- /* This is only PART of the loop instruction. In addition, +- hardcoded into its use is a modification of the final operand in +- the instruction in bytes 9 and 12. */ +- {"loop %as,%label | %as!=1 ? IsaUseLoops", ++ /* Widening loops with literals. */ ++ {"loop %as,%label | %as!=1 ? IsaUseLoops ? IsaUseL32R", ++ "loop %as,%LABEL;" ++ "rsr.lend %as;" /* LEND */ ++ "wsr.lbeg %as;" /* LBEG */ ++ "LITERAL %label;" ++ "l32r %as, %LITERAL;" ++ "nop;" ++ "wsr.lend %as;" ++ "isync;" ++ "rsr.lcount %as;" /* LCOUNT */ ++ "addi %as, %as, 1;" ++ "LABEL"}, ++ {"loopgtz %as,%label | %as!=1 ? IsaUseLoops ? IsaUseL32R", ++ "beqz %as,%label;" ++ "bltz %as,%label;" ++ "loopgtz %as,%LABEL;" ++ "rsr.lend %as;" /* LEND */ ++ "wsr.lbeg %as;" /* LBEG */ ++ "LITERAL %label;" ++ "l32r %as, %LITERAL;" ++ "nop;" ++ "wsr.lend %as;" ++ "isync;" ++ "rsr.lcount %as;" /* LCOUNT */ ++ "addi %as, %as, 1;" ++ "LABEL"}, ++ {"loopnez %as,%label | %as!=1 ? IsaUseLoops ? IsaUseL32R", ++ "beqz %as,%label;" ++ "loopnez %as,%LABEL;" ++ "rsr.lend %as;" /* LEND */ ++ "wsr.lbeg %as;" /* LBEG */ ++ "LITERAL %label;" ++ "l32r %as, %LITERAL;" ++ "nop;" ++ "wsr.lend %as;" ++ "isync;" ++ "rsr.lcount %as;" /* LCOUNT */ ++ "addi %as, %as, 1;" ++ "LABEL"}, ++ ++ /* Widening loops with const16. */ ++ {"loop %as,%label | %as!=1 ? IsaUseLoops ? IsaUseConst16", + "loop %as,%LABEL;" + "rsr.lend %as;" /* LEND */ + "wsr.lbeg %as;" /* LBEG */ +- "addi %as, %as, 0;" /* lo8(%label-%LABEL1) */ +- "addmi %as, %as, 0;" /* mid8(%label-%LABEL1) */ ++ "const16 %as,HI16U(%label);" ++ "const16 %as,LOW16U(%label);" + "wsr.lend %as;" + "isync;" + "rsr.lcount %as;" /* LCOUNT */ +- "addi %as, %as, 1;" /* density -> addi.n %as, %as, 1 */ ++ "addi %as, %as, 1;" + "LABEL"}, +- {"loopgtz %as,%label | %as!=1 ? IsaUseLoops", ++ {"loopgtz %as,%label | %as!=1 ? IsaUseLoops ? IsaUseConst16", + "beqz %as,%label;" + "bltz %as,%label;" + "loopgtz %as,%LABEL;" + "rsr.lend %as;" /* LEND */ + "wsr.lbeg %as;" /* LBEG */ +- "addi %as, %as, 0;" /* lo8(%label-%LABEL1) */ +- "addmi %as, %as, 0;" /* mid8(%label-%LABEL1) */ ++ "const16 %as,HI16U(%label);" ++ "const16 %as,LOW16U(%label);" + "wsr.lend %as;" + "isync;" + "rsr.lcount %as;" /* LCOUNT */ +- "addi %as, %as, 1;" /* density -> addi.n %as, %as, 1 */ ++ "addi %as, %as, 1;" + "LABEL"}, +- {"loopnez %as,%label | %as!=1 ? IsaUseLoops", ++ {"loopnez %as,%label | %as!=1 ? IsaUseLoops ? IsaUseConst16", + "beqz %as,%label;" + "loopnez %as,%LABEL;" + "rsr.lend %as;" /* LEND */ + "wsr.lbeg %as;" /* LBEG */ +- "addi %as, %as, 0;" /* lo8(%label-%LABEL1) */ +- "addmi %as, %as, 0;" /* mid8(%label-%LABEL1) */ ++ "const16 %as,HI16U(%label);" ++ "const16 %as,LOW16U(%label);" + "wsr.lend %as;" + "isync;" + "rsr.lcount %as;" /* LCOUNT */ +- "addi %as, %as, 1;" /* density -> addi.n %as, %as, 1 */ ++ "addi %as, %as, 1;" + "LABEL"}, + + /* Relaxing to wide branches. Order is important here. With wide +-- +2.11.0 + diff --git a/package/binutils/2.32/0005-xtensa-gas-put-.literal_position-at-section-start.patch b/package/binutils/2.32/0005-xtensa-gas-put-.literal_position-at-section-start.patch new file mode 100644 index 00000000..b4bbc27b --- /dev/null +++ b/package/binutils/2.32/0005-xtensa-gas-put-.literal_position-at-section-start.patch @@ -0,0 +1,96 @@ +From 471702ac4a57878a06e8167f063274cf413e548d Mon Sep 17 00:00:00 2001 +From: Max Filippov +Date: Mon, 8 Apr 2019 13:47:18 -0700 +Subject: [PATCH] xtensa: gas: put .literal_position at section start + +Provide literal position at the beginning of each section for literal +space reserved by relaxations when text-section-literals or +auto-litpools options are used. Remove code that adds fill frag to the +literal section for every .literal_position directive to avoid creation +of empty literal sections. + +Fix auto-litpools tests that got literal pool address changes. + +gas/ +2019-04-11 Max Filippov + + * config/tc-xtensa.c (xtensa_is_init_fini): Add declaration. + (xtensa_mark_literal_pool_location): Don't add fill frag to literal + section that records literal pool location. + (md_begin): Call xtensa_mark_literal_pool_location when text + section literals or auto litpools are used. + (xtensa_elf_section_change_hook): Call + xtensa_mark_literal_pool_location when text section literals or + auto litpools are used, there's no literal pool location defined + for the current section and it's not .init or .fini. + +Signed-off-by: Max Filippov +--- + gas/config/tc-xtensa.c | 22 +++++++++------------- + 1 file changed, 9 insertions(+), 13 deletions(-) + +diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c +index 0cc06361cf6f..6a80e76fed8c 100644 +--- a/gas/config/tc-xtensa.c ++++ b/gas/config/tc-xtensa.c +@@ -497,6 +497,7 @@ static fixS *xg_append_jump (fragS *fragP, symbolS *sym, offsetT offset); + static void xtensa_maybe_create_literal_pool_frag (bfd_boolean, bfd_boolean); + static bfd_boolean auto_litpools = FALSE; + static int auto_litpool_limit = 0; ++static bfd_boolean xtensa_is_init_fini (segT seg); + + /* Alignment Functions. */ + +@@ -4797,7 +4798,6 @@ xtensa_mark_literal_pool_location (void) + { + /* Any labels pointing to the current location need + to be adjusted to after the literal pool. */ +- emit_state s; + fragS *pool_location; + + if (use_literal_section) +@@ -4818,19 +4818,7 @@ xtensa_mark_literal_pool_location (void) + RELAX_LITERAL_POOL_END, NULL, 0, NULL); + xtensa_set_frag_assembly_state (frag_now); + +- /* Now put a frag into the literal pool that points to this location. */ + set_literal_pool_location (now_seg, pool_location); +- xtensa_switch_to_non_abs_literal_fragment (&s); +- frag_align (2, 0, 0); +- record_alignment (now_seg, 2); +- +- /* Close whatever frag is there. */ +- frag_variant (rs_fill, 0, 0, 0, NULL, 0, NULL); +- xtensa_set_frag_assembly_state (frag_now); +- frag_now->tc_frag_data.literal_frag = pool_location; +- frag_variant (rs_fill, 0, 0, 0, NULL, 0, NULL); +- xtensa_restore_emit_state (&s); +- xtensa_set_frag_assembly_state (frag_now); + } + + +@@ -5334,6 +5322,9 @@ md_begin (void) + /* Set up the assembly state. */ + if (!frag_now->tc_frag_data.is_assembly_state_set) + xtensa_set_frag_assembly_state (frag_now); ++ ++ if (!use_literal_section) ++ xtensa_mark_literal_pool_location (); + } + + +@@ -5933,6 +5924,11 @@ xtensa_elf_section_change_hook (void) + /* Set up the assembly state. */ + if (!frag_now->tc_frag_data.is_assembly_state_set) + xtensa_set_frag_assembly_state (frag_now); ++ ++ if (!use_literal_section ++ && seg_info (now_seg)->tc_segment_info_data.literal_pool_loc == NULL ++ && !xtensa_is_init_fini (now_seg)) ++ xtensa_mark_literal_pool_location (); + } + + +-- +2.11.0 + diff --git a/package/binutils/2.32/0006-or1k-Fix-incorrect-value-in-PLT-GOT-entries-causing-.patch b/package/binutils/2.32/0006-or1k-Fix-incorrect-value-in-PLT-GOT-entries-causing-.patch new file mode 100644 index 00000000..8527b667 --- /dev/null +++ b/package/binutils/2.32/0006-or1k-Fix-incorrect-value-in-PLT-GOT-entries-causing-.patch @@ -0,0 +1,46 @@ +From b17678f639f953d687d96cd52690e7cbfae50f91 Mon Sep 17 00:00:00 2001 +From: Stafford Horne +Date: Fri, 23 Aug 2019 22:25:55 +0900 +Subject: [PATCH] or1k: Fix incorrect value in PLT GOT entries, causing + infinite loop + +The PLT GOT entry should point to the first PLT entry which contains the +runtime linker function. It was pointing back to the symbol PLT entry +causing an infinite loop. + +I found this when testing the OpenRISC glibc port which uses the runtime +dynamic linker. It seems other libc's we use so far have not been +making use of the initial PLT GOT entries. + +bfd/ChangeLog: + + * elf32-or1k.c (or1k_elf_finish_dynamic_symbol): Use correct value for + PLT GOT entries. + +(cherry picked from commit 09f7b0de537d465fc8ed9f9433e348c1bc78aab2) +Signed-off-by: Romain Naour +--- + bfd/elf32-or1k.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index 2f200b197b8..32839cfa7b6 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -2379,8 +2379,11 @@ or1k_elf_finish_dynamic_symbol (bfd *output_bfd, + or1k_write_plt_entry (output_bfd, splt->contents + h->plt.offset, + plt0, plt1, plt2, OR1K_JR(12)); + +- /* Fill in the entry in the global offset table. */ +- bfd_put_32 (output_bfd, plt_addr, sgot->contents + got_offset); ++ /* Fill in the entry in the global offset table. We initialize it to ++ point to the top of the plt. This is done to lazy lookup the actual ++ symbol as the first plt entry will be setup by libc to call the ++ runtime dynamic linker. */ ++ bfd_put_32 (output_bfd, plt_base_addr, sgot->contents + got_offset); + + /* Fill in the entry in the .rela.plt section. */ + rela.r_offset = got_addr; +-- +2.23.0 + diff --git a/package/binutils/2.32/0007-bfd-xtensa-fix-PR-ld-25630.patch b/package/binutils/2.32/0007-bfd-xtensa-fix-PR-ld-25630.patch new file mode 100644 index 00000000..f499426b --- /dev/null +++ b/package/binutils/2.32/0007-bfd-xtensa-fix-PR-ld-25630.patch @@ -0,0 +1,37 @@ +From 85dcca5997cf3822d6456a5c9c59c46b56adfbb8 Mon Sep 17 00:00:00 2001 +From: Max Filippov +Date: Wed, 4 Mar 2020 14:54:27 -0800 +Subject: [PATCH] bfd: xtensa: fix PR ld/25630 + +bfd/ +2020-03-05 Max Filippov + + * elf32-xtensa.c (shrink_dynamic_reloc_sections): Shrink dynamic + relocation sections for any removed reference to a dynamic symbol. + +Signed-off-by: Max Filippov +--- + bfd/elf32-xtensa.c | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c +index 12ff9f772aaf..65e14d87940c 100644 +--- a/bfd/elf32-xtensa.c ++++ b/bfd/elf32-xtensa.c +@@ -10148,10 +10148,9 @@ shrink_dynamic_reloc_sections (struct bfd_link_info *info, + + if ((r_type == R_XTENSA_32 || r_type == R_XTENSA_PLT) + && (input_section->flags & SEC_ALLOC) != 0 +- && (dynamic_symbol || bfd_link_pic (info)) +- && (!h || h->root.type != bfd_link_hash_undefweak +- || (dynamic_symbol +- && (bfd_link_dll (info) || info->export_dynamic)))) ++ && (dynamic_symbol ++ || (bfd_link_pic (info) ++ && (!h || h->root.type != bfd_link_hash_undefweak)))) + { + asection *srel; + bfd_boolean is_plt = FALSE; +-- +2.20.1 + diff --git a/package/binutils/2.32/0008-xtensa-fix-PR-ld-25861.patch b/package/binutils/2.32/0008-xtensa-fix-PR-ld-25861.patch new file mode 100644 index 00000000..2df46c65 --- /dev/null +++ b/package/binutils/2.32/0008-xtensa-fix-PR-ld-25861.patch @@ -0,0 +1,432 @@ +From c7a1d1f656c717394937a92cb970f0f4cecce128 Mon Sep 17 00:00:00 2001 +From: Max Filippov +Date: Sun, 19 Apr 2020 19:04:41 -0700 +Subject: [PATCH] xtensa: fix PR ld/25861 + +Introduce new relaxations XTENSA_PDIFF{8,16,32} for positive differences +(subtracted symbol precedes diminished symbol) and XTENSA_NDIFF{8,16,32} +for negative differences (subtracted symbol follows diminished symbol). +Don't generate XTENSA_DIFF relocations in the assembler, generate +XTENSA_PDIFF or XTENSA_NDIFF based on relative symbol position. + +Handle XTENSA_DIFF in BFD for compatibility with old object files. +Handle XTENSA_PDIFF and XTENSA_NDIFF in BFD, treating difference value +as unsigned. + +2020-04-22 Max Filippov +bfd/ + * bfd-in2.h: Regenerated. + * elf32-xtensa.c (elf_howto_table): New entries for + R_XTENSA_PDIFF{8,16,32} and R_XTENSA_NDIFF{8,16,32}. + (elf_xtensa_reloc_type_lookup, elf_xtensa_do_reloc) + (relax_section): Add cases for R_XTENSA_PDIFF{8,16,32} and + R_XTENSA_NDIFF{8,16,32}. + * libbfd.h (bfd_reloc_code_real_names): Add names for + BFD_RELOC_XTENSA_PDIFF{8,16,32} and + BFD_RELOC_XTENSA_NDIFF{8,16,32}. + * reloc.c: Add documentation for BFD_RELOC_XTENSA_PDIFF{8,16,32} + and BFD_RELOC_XTENSA_NDIFF{8,16,32}. + +binutils/ + * readelf.c (is_none_reloc): Recognize + BFD_RELOC_XTENSA_PDIFF{8,16,32} and + BFD_RELOC_XTENSA_NDIFF{8,16,32}. + +gas/ + * config/tc-xtensa.c (md_apply_fix): Replace + BFD_RELOC_XTENSA_DIFF{8,16,32} generation with + BFD_RELOC_XTENSA_PDIFF{8,16,32} and + BFD_RELOC_XTENSA_NDIFF{8,16,32} generation. + * testsuite/gas/xtensa/loc.d: Replace BFD_RELOC_XTENSA_DIFF16 + with BFD_RELOC_XTENSA_PDIFF16 in the expected output. + +include/ + * elf/xtensa.h (elf_xtensa_reloc_type): New entries for + R_XTENSA_PDIFF{8,16,32} and R_XTENSA_NDIFF{8,16,32}. + +ld/ + * testsuite/ld-xtensa/relax-loc.d: New test definition. + * testsuite/ld-xtensa/relax-loc.s: New test source. + * testsuite/ld-xtensa/xtensa.exp (relax-loc): New test. + +Signed-off-by: Max Filippov +--- +Backported from: 30ce8e47fad9b057b6d7af9e1d43061126d34d20 + + bfd/bfd-in2.h | 20 ++++++- + bfd/elf32-xtensa.c | 89 +++++++++++++++++++++++++++++- + bfd/libbfd.h | 6 ++ + bfd/reloc.c | 24 ++++++++ + binutils/readelf.c | 8 ++- + gas/config/tc-xtensa.c | 12 +++- + gas/testsuite/gas/xtensa/loc.d | 2 +- + include/elf/xtensa.h | 6 ++ + ld/testsuite/ld-xtensa/relax-loc.d | 7 +++ + ld/testsuite/ld-xtensa/relax-loc.s | 15 +++++ + ld/testsuite/ld-xtensa/xtensa.exp | 1 + + 11 files changed, 183 insertions(+), 7 deletions(-) + create mode 100644 ld/testsuite/ld-xtensa/relax-loc.d + create mode 100644 ld/testsuite/ld-xtensa/relax-loc.s + +diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h +index 37114607b515..be6a30f57955 100644 +--- a/bfd/bfd-in2.h ++++ b/bfd/bfd-in2.h +@@ -5217,7 +5217,9 @@ to one of its own internal functions or data structures. */ + PLT entries. Otherwise, this is just a generic 32-bit relocation. */ + BFD_RELOC_XTENSA_PLT, + +-/* Xtensa relocations to mark the difference of two local symbols. ++/* Xtensa relocations for backward compatibility. These have been replaced ++by BFD_RELOC_XTENSA_PDIFF and BFD_RELOC_XTENSA_NDIFF. ++Xtensa relocations to mark the difference of two local symbols. + These are only needed to support linker relaxation and can be ignored + when not relaxing. The field is set to the value of the difference + assuming no relaxation. The relocation encodes the position of the +@@ -5291,6 +5293,22 @@ BFD_RELOC_XTENSA_ASM_EXPAND. */ + BFD_RELOC_XTENSA_TLS_ARG, + BFD_RELOC_XTENSA_TLS_CALL, + ++/* Xtensa relocations to mark the difference of two local symbols. ++These are only needed to support linker relaxation and can be ignored ++when not relaxing. The field is set to the value of the difference ++assuming no relaxation. The relocation encodes the position of the ++subtracted symbol so the linker can determine whether to adjust the field ++value. PDIFF relocations are used for positive differences, NDIFF ++relocations are used for negative differences. The difference value ++is treated as unsigned with these relocation types, giving full ++8/16 value ranges. */ ++ BFD_RELOC_XTENSA_PDIFF8, ++ BFD_RELOC_XTENSA_PDIFF16, ++ BFD_RELOC_XTENSA_PDIFF32, ++ BFD_RELOC_XTENSA_NDIFF8, ++ BFD_RELOC_XTENSA_NDIFF16, ++ BFD_RELOC_XTENSA_NDIFF32, ++ + /* 8 bit signed offset in (ix+d) or (iy+d). */ + BFD_RELOC_Z80_DISP8, + +diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c +index 473a9d76f289..fded42d52a9a 100644 +--- a/bfd/elf32-xtensa.c ++++ b/bfd/elf32-xtensa.c +@@ -325,6 +325,20 @@ static reloc_howto_type elf_howto_table[] = + HOWTO (R_XTENSA_TLS_CALL, 0, 0, 0, FALSE, 0, complain_overflow_dont, + bfd_elf_xtensa_reloc, "R_XTENSA_TLS_CALL", + FALSE, 0, 0, FALSE), ++ ++ HOWTO (R_XTENSA_PDIFF8, 0, 0, 8, FALSE, 0, complain_overflow_bitfield, ++ bfd_elf_xtensa_reloc, "R_XTENSA_PDIFF8", FALSE, 0, 0xff, FALSE), ++ HOWTO (R_XTENSA_PDIFF16, 0, 1, 16, FALSE, 0, complain_overflow_bitfield, ++ bfd_elf_xtensa_reloc, "R_XTENSA_PDIFF16", FALSE, 0, 0xffff, FALSE), ++ HOWTO (R_XTENSA_PDIFF32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield, ++ bfd_elf_xtensa_reloc, "R_XTENSA_PDIFF32", FALSE, 0, 0xffffffff, FALSE), ++ ++ HOWTO (R_XTENSA_NDIFF8, 0, 0, 8, FALSE, 0, complain_overflow_bitfield, ++ bfd_elf_xtensa_reloc, "R_XTENSA_NDIFF8", FALSE, 0, 0xff, FALSE), ++ HOWTO (R_XTENSA_NDIFF16, 0, 1, 16, FALSE, 0, complain_overflow_bitfield, ++ bfd_elf_xtensa_reloc, "R_XTENSA_NDIFF16", FALSE, 0, 0xffff, FALSE), ++ HOWTO (R_XTENSA_NDIFF32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield, ++ bfd_elf_xtensa_reloc, "R_XTENSA_NDIFF32", FALSE, 0, 0xffffffff, FALSE), + }; + + #if DEBUG_GEN_RELOC +@@ -364,6 +378,30 @@ elf_xtensa_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, + TRACE ("BFD_RELOC_XTENSA_DIFF32"); + return &elf_howto_table[(unsigned) R_XTENSA_DIFF32 ]; + ++ case BFD_RELOC_XTENSA_PDIFF8: ++ TRACE ("BFD_RELOC_XTENSA_PDIFF8"); ++ return &elf_howto_table[(unsigned) R_XTENSA_PDIFF8 ]; ++ ++ case BFD_RELOC_XTENSA_PDIFF16: ++ TRACE ("BFD_RELOC_XTENSA_PDIFF16"); ++ return &elf_howto_table[(unsigned) R_XTENSA_PDIFF16 ]; ++ ++ case BFD_RELOC_XTENSA_PDIFF32: ++ TRACE ("BFD_RELOC_XTENSA_PDIFF32"); ++ return &elf_howto_table[(unsigned) R_XTENSA_PDIFF32 ]; ++ ++ case BFD_RELOC_XTENSA_NDIFF8: ++ TRACE ("BFD_RELOC_XTENSA_NDIFF8"); ++ return &elf_howto_table[(unsigned) R_XTENSA_NDIFF8 ]; ++ ++ case BFD_RELOC_XTENSA_NDIFF16: ++ TRACE ("BFD_RELOC_XTENSA_NDIFF16"); ++ return &elf_howto_table[(unsigned) R_XTENSA_NDIFF16 ]; ++ ++ case BFD_RELOC_XTENSA_NDIFF32: ++ TRACE ("BFD_RELOC_XTENSA_NDIFF32"); ++ return &elf_howto_table[(unsigned) R_XTENSA_NDIFF32 ]; ++ + case BFD_RELOC_XTENSA_RTLD: + TRACE ("BFD_RELOC_XTENSA_RTLD"); + return &elf_howto_table[(unsigned) R_XTENSA_RTLD ]; +@@ -1851,6 +1889,12 @@ elf_xtensa_do_reloc (reloc_howto_type *howto, + case R_XTENSA_DIFF8: + case R_XTENSA_DIFF16: + case R_XTENSA_DIFF32: ++ case R_XTENSA_PDIFF8: ++ case R_XTENSA_PDIFF16: ++ case R_XTENSA_PDIFF32: ++ case R_XTENSA_NDIFF8: ++ case R_XTENSA_NDIFF16: ++ case R_XTENSA_NDIFF32: + case R_XTENSA_TLS_FUNC: + case R_XTENSA_TLS_ARG: + case R_XTENSA_TLS_CALL: +@@ -9604,7 +9648,13 @@ relax_section (bfd *abfd, asection *sec, struct bfd_link_info *link_info) + + if (r_type == R_XTENSA_DIFF8 + || r_type == R_XTENSA_DIFF16 +- || r_type == R_XTENSA_DIFF32) ++ || r_type == R_XTENSA_DIFF32 ++ || r_type == R_XTENSA_PDIFF8 ++ || r_type == R_XTENSA_PDIFF16 ++ || r_type == R_XTENSA_PDIFF32 ++ || r_type == R_XTENSA_NDIFF8 ++ || r_type == R_XTENSA_NDIFF16 ++ || r_type == R_XTENSA_NDIFF32) + { + bfd_signed_vma diff_value = 0; + bfd_vma new_end_offset, diff_mask = 0; +@@ -9631,8 +9681,27 @@ relax_section (bfd *abfd, asection *sec, struct bfd_link_info *link_info) + diff_value = + bfd_get_signed_32 (abfd, &contents[old_source_offset]); + break; ++ case R_XTENSA_PDIFF8: ++ case R_XTENSA_NDIFF8: ++ diff_value = ++ bfd_get_8 (abfd, &contents[old_source_offset]); ++ break; ++ case R_XTENSA_PDIFF16: ++ case R_XTENSA_NDIFF16: ++ diff_value = ++ bfd_get_16 (abfd, &contents[old_source_offset]); ++ break; ++ case R_XTENSA_PDIFF32: ++ case R_XTENSA_NDIFF32: ++ diff_value = ++ bfd_get_32 (abfd, &contents[old_source_offset]); ++ break; + } + ++ if (r_type >= R_XTENSA_NDIFF8 ++ && r_type <= R_XTENSA_NDIFF32) ++ diff_value = -diff_value; ++ + new_end_offset = offset_with_removed_text_map + (&target_relax_info->action_list, + r_rel.target_offset + diff_value); +@@ -9655,6 +9724,24 @@ relax_section (bfd *abfd, asection *sec, struct bfd_link_info *link_info) + bfd_put_signed_32 (abfd, diff_value, + &contents[old_source_offset]); + break; ++ case R_XTENSA_PDIFF8: ++ case R_XTENSA_NDIFF8: ++ diff_mask = 0xff; ++ bfd_put_8 (abfd, diff_value, ++ &contents[old_source_offset]); ++ break; ++ case R_XTENSA_PDIFF16: ++ case R_XTENSA_NDIFF16: ++ diff_mask = 0xffff; ++ bfd_put_16 (abfd, diff_value, ++ &contents[old_source_offset]); ++ break; ++ case R_XTENSA_PDIFF32: ++ case R_XTENSA_NDIFF32: ++ diff_mask = 0xffffffff; ++ bfd_put_32 (abfd, diff_value, ++ &contents[old_source_offset]); ++ break; + } + + /* Check for overflow. Sign bits must be all zeroes or all ones */ +diff --git a/bfd/libbfd.h b/bfd/libbfd.h +index 3c184fcadadf..989f4bc0b595 100644 +--- a/bfd/libbfd.h ++++ b/bfd/libbfd.h +@@ -2919,6 +2919,12 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", + "BFD_RELOC_XTENSA_TLS_FUNC", + "BFD_RELOC_XTENSA_TLS_ARG", + "BFD_RELOC_XTENSA_TLS_CALL", ++ "BFD_RELOC_XTENSA_PDIFF8", ++ "BFD_RELOC_XTENSA_PDIFF16", ++ "BFD_RELOC_XTENSA_PDIFF32", ++ "BFD_RELOC_XTENSA_NDIFF8", ++ "BFD_RELOC_XTENSA_NDIFF16", ++ "BFD_RELOC_XTENSA_NDIFF32", + "BFD_RELOC_Z80_DISP8", + "BFD_RELOC_Z80_BYTE0", + "BFD_RELOC_Z80_BYTE1", +diff --git a/bfd/reloc.c b/bfd/reloc.c +index c4dec86d1d46..f5df8e2ab3eb 100644 +--- a/bfd/reloc.c ++++ b/bfd/reloc.c +@@ -6556,6 +6556,8 @@ ENUMX + ENUMX + BFD_RELOC_XTENSA_DIFF32 + ENUMDOC ++ Xtensa relocations for backward compatibility. These have been replaced ++ by BFD_RELOC_XTENSA_PDIFF and BFD_RELOC_XTENSA_NDIFF. + Xtensa relocations to mark the difference of two local symbols. + These are only needed to support linker relaxation and can be ignored + when not relaxing. The field is set to the value of the difference +@@ -6668,6 +6670,28 @@ ENUMX + BFD_RELOC_XTENSA_TLS_CALL + ENUMDOC + Xtensa TLS relocations. ++ENUM ++ BFD_RELOC_XTENSA_PDIFF8 ++ENUMX ++ BFD_RELOC_XTENSA_PDIFF16 ++ENUMX ++ BFD_RELOC_XTENSA_PDIFF32 ++ENUMX ++ BFD_RELOC_XTENSA_NDIFF8 ++ENUMX ++ BFD_RELOC_XTENSA_NDIFF16 ++ENUMX ++ BFD_RELOC_XTENSA_NDIFF32 ++ENUMDOC ++ Xtensa relocations to mark the difference of two local symbols. ++ These are only needed to support linker relaxation and can be ignored ++ when not relaxing. The field is set to the value of the difference ++ assuming no relaxation. The relocation encodes the position of the ++ subtracted symbol so the linker can determine whether to adjust the field ++ value. PDIFF relocations are used for positive differences, NDIFF ++ relocations are used for negative differences. The difference value ++ is treated as unsigned with these relocation types, giving full ++ 8/16 value ranges. + + ENUM + BFD_RELOC_Z80_DISP8 +diff --git a/binutils/readelf.c b/binutils/readelf.c +index d4756c93b345..800918f901c8 100644 +--- a/binutils/readelf.c ++++ b/binutils/readelf.c +@@ -13262,7 +13262,13 @@ is_none_reloc (Filedata * filedata, unsigned int reloc_type) + return (reloc_type == 0 /* R_XTENSA_NONE. */ + || reloc_type == 17 /* R_XTENSA_DIFF8. */ + || reloc_type == 18 /* R_XTENSA_DIFF16. */ +- || reloc_type == 19 /* R_XTENSA_DIFF32. */); ++ || reloc_type == 19 /* R_XTENSA_DIFF32. */ ++ || reloc_type == 57 /* R_XTENSA_PDIFF8. */ ++ || reloc_type == 58 /* R_XTENSA_PDIFF16. */ ++ || reloc_type == 59 /* R_XTENSA_PDIFF32. */ ++ || reloc_type == 60 /* R_XTENSA_NDIFF8. */ ++ || reloc_type == 61 /* R_XTENSA_NDIFF16. */ ++ || reloc_type == 62 /* R_XTENSA_NDIFF32. */); + } + return FALSE; + } +diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c +index 71d4d94a8d7d..ee75c13548ff 100644 +--- a/gas/config/tc-xtensa.c ++++ b/gas/config/tc-xtensa.c +@@ -5974,18 +5974,24 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg) + case BFD_RELOC_8: + if (fixP->fx_subsy) + { ++ bfd_boolean neg = S_GET_VALUE (fixP->fx_addsy) + fixP->fx_offset ++ < S_GET_VALUE (fixP->fx_subsy); ++ + switch (fixP->fx_r_type) + { + case BFD_RELOC_8: +- fixP->fx_r_type = BFD_RELOC_XTENSA_DIFF8; ++ fixP->fx_r_type = neg ++ ? BFD_RELOC_XTENSA_NDIFF8 : BFD_RELOC_XTENSA_PDIFF8; + fixP->fx_signed = 0; + break; + case BFD_RELOC_16: +- fixP->fx_r_type = BFD_RELOC_XTENSA_DIFF16; ++ fixP->fx_r_type = neg ++ ? BFD_RELOC_XTENSA_NDIFF16 : BFD_RELOC_XTENSA_PDIFF16; + fixP->fx_signed = 0; + break; + case BFD_RELOC_32: +- fixP->fx_r_type = BFD_RELOC_XTENSA_DIFF32; ++ fixP->fx_r_type = neg ++ ? BFD_RELOC_XTENSA_NDIFF32 : BFD_RELOC_XTENSA_PDIFF32; + fixP->fx_signed = 0; + break; + default: +diff --git a/gas/testsuite/gas/xtensa/loc.d b/gas/testsuite/gas/xtensa/loc.d +index 71983cc90055..8fb3425999d5 100644 +--- a/gas/testsuite/gas/xtensa/loc.d ++++ b/gas/testsuite/gas/xtensa/loc.d +@@ -6,5 +6,5 @@ + + RELOCATION RECORDS FOR \[\.debug_line\]: + #... +-.*R_XTENSA_DIFF16.*\.text\+0x00009c42 ++.*R_XTENSA_PDIFF16.*\.text\+0x00009c42 + #... +diff --git a/include/elf/xtensa.h b/include/elf/xtensa.h +index 2eb5e4e52941..bd5c80d13777 100644 +--- a/include/elf/xtensa.h ++++ b/include/elf/xtensa.h +@@ -87,6 +87,12 @@ START_RELOC_NUMBERS (elf_xtensa_reloc_type) + RELOC_NUMBER (R_XTENSA_TLS_FUNC, 54) + RELOC_NUMBER (R_XTENSA_TLS_ARG, 55) + RELOC_NUMBER (R_XTENSA_TLS_CALL, 56) ++ RELOC_NUMBER (R_XTENSA_PDIFF8, 57) ++ RELOC_NUMBER (R_XTENSA_PDIFF16, 58) ++ RELOC_NUMBER (R_XTENSA_PDIFF32, 59) ++ RELOC_NUMBER (R_XTENSA_NDIFF8, 60) ++ RELOC_NUMBER (R_XTENSA_NDIFF16, 61) ++ RELOC_NUMBER (R_XTENSA_NDIFF32, 62) + END_RELOC_NUMBERS (R_XTENSA_max) + + /* Processor-specific flags for the ELF header e_flags field. */ +diff --git a/ld/testsuite/ld-xtensa/relax-loc.d b/ld/testsuite/ld-xtensa/relax-loc.d +new file mode 100644 +index 000000000000..3c8d673732ff +--- /dev/null ++++ b/ld/testsuite/ld-xtensa/relax-loc.d +@@ -0,0 +1,7 @@ ++#as: --text-section-literals ++#ld: ++#objdump: --dwarf=decodedline ++#... ++relax-loc.s[ ]+1[ ]+0x400054[ ]+.* ++relax-loc.s[ ]+2[ ]+0x40005c[ ]+.* ++#... +diff --git a/ld/testsuite/ld-xtensa/relax-loc.s b/ld/testsuite/ld-xtensa/relax-loc.s +new file mode 100644 +index 000000000000..d768470e287a +--- /dev/null ++++ b/ld/testsuite/ld-xtensa/relax-loc.s +@@ -0,0 +1,15 @@ ++ .file 1 "relax-loc.s" ++ .globl _start ++ .globl _ResetVector ++ .text ++_ResetVector: ++_start: ++ .loc 1 1 ++ j 1f ++ .literal_position ++1: ++ .loc 1 2 ++ ++ .rep 10000 ++ movi a2, 0x12345678 ++ .endr +diff --git a/ld/testsuite/ld-xtensa/xtensa.exp b/ld/testsuite/ld-xtensa/xtensa.exp +index 9b2235b2151b..de39887936ad 100644 +--- a/ld/testsuite/ld-xtensa/xtensa.exp ++++ b/ld/testsuite/ld-xtensa/xtensa.exp +@@ -27,6 +27,7 @@ run_dump_test "call_overflow" + run_dump_test "coalesce" + run_dump_test "diff_overflow" + run_dump_test "lcall" ++run_dump_test "relax-loc" + + run_dump_test "relax-static-pie" + run_dump_test "relax-static-local-pie" +-- +2.20.1 + diff --git a/package/binutils/2.32/0009-xtensa-fix-XTENSA_NDIFF-handling-for-PR-ld-25861.patch b/package/binutils/2.32/0009-xtensa-fix-XTENSA_NDIFF-handling-for-PR-ld-25861.patch new file mode 100644 index 00000000..28f17d7c --- /dev/null +++ b/package/binutils/2.32/0009-xtensa-fix-XTENSA_NDIFF-handling-for-PR-ld-25861.patch @@ -0,0 +1,128 @@ +From 735321812435ae278d3766a3371f55937dc776d6 Mon Sep 17 00:00:00 2001 +From: Max Filippov +Date: Sat, 25 Apr 2020 00:40:25 -0700 +Subject: [PATCH] xtensa: fix XTENSA_NDIFF handling for PR ld/25861 + +Fields marked with XTENSA_NDIFF relocations are not negated, they only +have sign bits removed. Don't negate their values when relaxation is +performed. Don't add sign bits when the value is zero. Report overflow +when the result has negative sign but all significant bits are zero. + +2020-04-29 Max Filippov +bfd/ + * elf32-xtensa.c (relax_section): Don't negate diff_value for + XTENSA_NDIFF relocations. Don't add sign bits whe diff_value + equals 0. Report overflow when the result has negative sign but + all significant bits are zero. + +Signed-off-by: Max Filippov +Backported from: d548f47df4d2e3d117d504a4c9977982c78a0556 +--- + + bfd/elf32-xtensa.c | 26 +++++++++++++++----------- + 1 file changed, 15 insertions(+), 11 deletions(-) + +diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c +index fded42d52a9a..4327b027911f 100644 +--- a/bfd/elf32-xtensa.c ++++ b/bfd/elf32-xtensa.c +@@ -9670,37 +9670,44 @@ relax_section (bfd *abfd, asection *sec, struct bfd_link_info *link_info) + switch (r_type) + { + case R_XTENSA_DIFF8: ++ diff_mask = 0x7f; + diff_value = + bfd_get_signed_8 (abfd, &contents[old_source_offset]); + break; + case R_XTENSA_DIFF16: ++ diff_mask = 0x7fff; + diff_value = + bfd_get_signed_16 (abfd, &contents[old_source_offset]); + break; + case R_XTENSA_DIFF32: ++ diff_mask = 0x7fffffff; + diff_value = + bfd_get_signed_32 (abfd, &contents[old_source_offset]); + break; + case R_XTENSA_PDIFF8: + case R_XTENSA_NDIFF8: ++ diff_mask = 0xff; + diff_value = + bfd_get_8 (abfd, &contents[old_source_offset]); + break; + case R_XTENSA_PDIFF16: + case R_XTENSA_NDIFF16: ++ diff_mask = 0xffff; + diff_value = + bfd_get_16 (abfd, &contents[old_source_offset]); + break; + case R_XTENSA_PDIFF32: + case R_XTENSA_NDIFF32: ++ diff_mask = 0xffffffff; + diff_value = + bfd_get_32 (abfd, &contents[old_source_offset]); + break; + } + + if (r_type >= R_XTENSA_NDIFF8 +- && r_type <= R_XTENSA_NDIFF32) +- diff_value = -diff_value; ++ && r_type <= R_XTENSA_NDIFF32 ++ && diff_value) ++ diff_value |= ~diff_mask; + + new_end_offset = offset_with_removed_text_map + (&target_relax_info->action_list, +@@ -9710,43 +9717,40 @@ relax_section (bfd *abfd, asection *sec, struct bfd_link_info *link_info) + switch (r_type) + { + case R_XTENSA_DIFF8: +- diff_mask = 0x7f; + bfd_put_signed_8 (abfd, diff_value, + &contents[old_source_offset]); + break; + case R_XTENSA_DIFF16: +- diff_mask = 0x7fff; + bfd_put_signed_16 (abfd, diff_value, + &contents[old_source_offset]); + break; + case R_XTENSA_DIFF32: +- diff_mask = 0x7fffffff; + bfd_put_signed_32 (abfd, diff_value, + &contents[old_source_offset]); + break; + case R_XTENSA_PDIFF8: + case R_XTENSA_NDIFF8: +- diff_mask = 0xff; + bfd_put_8 (abfd, diff_value, + &contents[old_source_offset]); + break; + case R_XTENSA_PDIFF16: + case R_XTENSA_NDIFF16: +- diff_mask = 0xffff; + bfd_put_16 (abfd, diff_value, + &contents[old_source_offset]); + break; + case R_XTENSA_PDIFF32: + case R_XTENSA_NDIFF32: +- diff_mask = 0xffffffff; + bfd_put_32 (abfd, diff_value, + &contents[old_source_offset]); + break; + } + +- /* Check for overflow. Sign bits must be all zeroes or all ones */ +- if ((diff_value & ~diff_mask) != 0 && +- (diff_value & ~diff_mask) != (-1 & ~diff_mask)) ++ /* Check for overflow. Sign bits must be all zeroes or ++ all ones. When sign bits are all ones diff_value ++ may not be zero. */ ++ if (((diff_value & ~diff_mask) != 0 ++ && (diff_value & ~diff_mask) != ~diff_mask) ++ || (diff_value && (bfd_vma) diff_value == ~diff_mask)) + { + (*link_info->callbacks->reloc_dangerous) + (link_info, _("overflow after relaxation"), +-- +2.20.1 + diff --git a/package/binutils/2.32/0010-or1k-Fix-issue-with-plt-link-failure-for-local-calls.patch b/package/binutils/2.32/0010-or1k-Fix-issue-with-plt-link-failure-for-local-calls.patch new file mode 100644 index 00000000..a67d1278 --- /dev/null +++ b/package/binutils/2.32/0010-or1k-Fix-issue-with-plt-link-failure-for-local-calls.patch @@ -0,0 +1,59 @@ +From 788cda9f9447e0fe67e582e8fb5adafd678d08b2 Mon Sep 17 00:00:00 2001 +From: Stafford Horne +Date: Sun, 2 May 2021 06:02:14 +0900 +Subject: [PATCH] or1k: Fix issue with plt link failure for local calls + +When building protobuf we were seeing the assert failure: + + /home/giuliobenetti/git/upstream/or1k-binutils-2.36.1/host/lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: + BFD (GNU Binutils) 2.36.1 assertion fail elf32-or1k.c:2377 + /home/giuliobenetti/git/upstream/or1k-binutils-2.36.1/host/lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: + BFD (GNU Binutils) 2.36.1 assertion fail elf32-or1k.c:2377 + /home/giuliobenetti/git/upstream/or1k-binutils-2.36.1/host/lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: + BFD (GNU Binutils) 2.36.1 assertion fail elf32-or1k.c:2377 + collect2: error: ld returned 1 exit status + +This failure happens while writing out PLT entries, there is a check +"BFD_ASSERT (h->dynindx != -1)" to confirm all plt entries have dynamic +symbol attributes. This was failing for symbols that were +"forced_local" in previous linking code. + +The fix adds logic to or1k_elf_adjust_dynamic_symbol to identify +"forced_local" symbols and exclude them from the the PLT. + +bfd/ChangeLog: + + PR 27624 + * elf32-or1k.c (or1k_elf_adjust_dynamic_symbol): Change + condition used to cleanup plt entries to cleanup forced local + entries. + +Cc: Giulio Benetti +Signed-off-by: Giulio Benetti +--- + bfd/elf32-or1k.c | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index 2f200b197b8..1f2c88b0b3a 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -2535,11 +2535,10 @@ or1k_elf_adjust_dynamic_symbol (struct bfd_link_info *info, + if (h->type == STT_FUNC + || h->needs_plt) + { +- if (! bfd_link_pic (info) +- && !h->def_dynamic +- && !h->ref_dynamic +- && h->root.type != bfd_link_hash_undefweak +- && h->root.type != bfd_link_hash_undefined) ++ if (h->plt.refcount <= 0 ++ || (SYMBOL_CALLS_LOCAL (info, h) ++ || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT ++ && h->root.type == bfd_link_hash_undefweak))) + { + /* This case can occur if we saw a PLT reloc in an input + file, but the symbol was never referred to by a dynamic +-- +2.25.1 + diff --git a/package/binutils/2.32/0011-or1k-Implement-relocation-R_OR1K_GOT_AHI16-for-gotha.patch b/package/binutils/2.32/0011-or1k-Implement-relocation-R_OR1K_GOT_AHI16-for-gotha.patch new file mode 100644 index 00000000..5a2b91fe --- /dev/null +++ b/package/binutils/2.32/0011-or1k-Implement-relocation-R_OR1K_GOT_AHI16-for-gotha.patch @@ -0,0 +1,256 @@ +From b10e6230dea0015bf3b7748580b82c551f9a3a4a Mon Sep 17 00:00:00 2001 +From: Stafford Horne +Date: Sun, 2 May 2021 06:02:15 +0900 +Subject: [PATCH] or1k: Implement relocation R_OR1K_GOT_AHI16 for gotha() + +The gotha() relocation mnemonic will be outputted by OpenRISC GCC when +using the -mcmodel=large option. This relocation is used along with +got() to generate 32-bit GOT offsets. This increases the previous GOT +offset limit from the previous 16-bit (64K) limit. + +This is needed on large binaries where the GOT grows larger than 64k. + +bfd/ChangeLog: + + PR 21464 + * bfd-in2.h: Add BFD_RELOC_OR1K_GOT_AHI16 relocation. + * elf32-or1k.c (or1k_elf_howto_table, or1k_reloc_map): Likewise. + (or1k_final_link_relocate, or1k_elf_relocate_section, + or1k_elf_check_relocs): Likewise. + * libbfd.h (bfd_reloc_code_real_names): Likewise. + * reloc.c: Likewise. + +cpu/ChangeLog: + + PR 21464 + * or1k.opc (or1k_imm16_relocs, parse_reloc): Define parse logic + for gotha() relocation. + +include/ChangeLog: + + PR 21464 + * elf/or1k.h (elf_or1k_reloc_type): Define R_OR1K_GOT_AHI16 number. + +opcodes/ChangeLog: + + PR 21464 + * or1k-asm.c: Regenerate. + +gas/ChangeLog: + + PR 21464 + * testsuite/gas/or1k/reloc-1.s: Add test for new relocation. + * testsuite/gas/or1k/reloc-1.d: Add test result for new + relocation. + +Cc: Giulio Benetti + +fixup reloc, add tests + +Signed-off-by: Giulio Benetti +--- + bfd/bfd-in2.h | 1 + + bfd/elf32-or1k.c | 21 ++++++++++++++++++++- + bfd/libbfd.h | 1 + + bfd/reloc.c | 2 ++ + cpu/or1k.opc | 7 ++++++- + gas/testsuite/gas/or1k/reloc-1.d | 4 +++- + gas/testsuite/gas/or1k/reloc-1.s | 4 ++++ + include/elf/or1k.h | 1 + + opcodes/or1k-asm.c | 7 ++++++- + 9 files changed, 44 insertions(+), 4 deletions(-) + +diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h +index e25da50aafb..530a41fca43 100644 +--- a/bfd/bfd-in2.h ++++ b/bfd/bfd-in2.h +@@ -5517,6 +5517,7 @@ then it may be truncated to 8 bits. */ + BFD_RELOC_OR1K_TLS_TPOFF, + BFD_RELOC_OR1K_TLS_DTPOFF, + BFD_RELOC_OR1K_TLS_DTPMOD, ++ BFD_RELOC_OR1K_GOT_AHI16, + + /* H8 elf Relocations. */ + BFD_RELOC_H8_DIR16A8, +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index 1f2c88b0b3a..a4a64f73b7c 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -808,6 +808,20 @@ static reloc_howto_type or1k_elf_howto_table[] = + 0, /* Source Mask. */ + 0x03ffffff, /* Dest Mask. */ + TRUE), /* PC relative offset? */ ++ ++ HOWTO (R_OR1K_GOT_AHI16, /* type */ ++ 16, /* rightshift */ ++ 2, /* size (0 = byte, 1 = short, 2 = long) */ ++ 16, /* bitsize */ ++ FALSE, /* pc_relative */ ++ 0, /* bitpos */ ++ complain_overflow_signed, /* complain_on_overflow */ ++ bfd_elf_generic_reloc, /* special_function */ ++ "R_OR1K_GOT_AHI16", /* name */ ++ FALSE, /* partial_inplace */ ++ 0, /* src_mask */ ++ 0xffff, /* dst_mask */ ++ FALSE), /* pcrel_offset */ + }; + + /* Map BFD reloc types to Or1k ELF reloc types. */ +@@ -871,6 +885,7 @@ static const struct or1k_reloc_map or1k_reloc_map[] = + { BFD_RELOC_OR1K_TLS_IE_LO13, R_OR1K_TLS_IE_LO13 }, + { BFD_RELOC_OR1K_SLO13, R_OR1K_SLO13 }, + { BFD_RELOC_OR1K_PLTA26, R_OR1K_PLTA26 }, ++ { BFD_RELOC_OR1K_GOT_AHI16, R_OR1K_GOT_AHI16 }, + }; + + #define TLS_UNKNOWN 0 +@@ -1080,6 +1095,7 @@ or1k_final_link_relocate (reloc_howto_type *howto, bfd *input_bfd, + switch (howto->type) + { + case R_OR1K_AHI16: ++ case R_OR1K_GOT_AHI16: + case R_OR1K_GOTOFF_AHI16: + case R_OR1K_TLS_IE_AHI16: + case R_OR1K_TLS_LE_AHI16: +@@ -1344,6 +1360,7 @@ or1k_elf_relocate_section (bfd *output_bfd, + } + break; + ++ case R_OR1K_GOT_AHI16: + case R_OR1K_GOT16: + case R_OR1K_GOT_PG21: + case R_OR1K_GOT_LO13: +@@ -1435,7 +1452,8 @@ or1k_elf_relocate_section (bfd *output_bfd, + /* The GOT_PG21 and GOT_LO13 relocs are pc-relative, + while the GOT16 reloc is GOT relative. */ + relocation = got_base + off; +- if (r_type == R_OR1K_GOT16) ++ if (r_type == R_OR1K_GOT16 ++ || r_type == R_OR1K_GOT_AHI16) + relocation -= got_sym_value; + + /* Addend should be zero. */ +@@ -1945,6 +1963,7 @@ or1k_elf_check_relocs (bfd *abfd, + } + break; + ++ case R_OR1K_GOT_AHI16: + case R_OR1K_GOT16: + case R_OR1K_GOT_PG21: + case R_OR1K_GOT_LO13: +diff --git a/bfd/libbfd.h b/bfd/libbfd.h +index 36284d71a9b..6e9e3190bb8 100644 +--- a/bfd/libbfd.h ++++ b/bfd/libbfd.h +@@ -2702,6 +2702,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", + "BFD_RELOC_OR1K_TLS_TPOFF", + "BFD_RELOC_OR1K_TLS_DTPOFF", + "BFD_RELOC_OR1K_TLS_DTPMOD", ++ "BFD_RELOC_OR1K_GOT_AHI16", + "BFD_RELOC_H8_DIR16A8", + "BFD_RELOC_H8_DIR16R8", + "BFD_RELOC_H8_DIR24A8", +diff --git a/bfd/reloc.c b/bfd/reloc.c +index e6446a78098..b0003ab1175 100644 +--- a/bfd/reloc.c ++++ b/bfd/reloc.c +@@ -6164,6 +6164,8 @@ ENUMX + BFD_RELOC_OR1K_GOTPC_HI16 + ENUMX + BFD_RELOC_OR1K_GOTPC_LO16 ++ENUMX ++ BFD_RELOC_OR1K_GOT_AHI16 + ENUMX + BFD_RELOC_OR1K_GOT16 + ENUMX +diff --git a/cpu/or1k.opc b/cpu/or1k.opc +index 5082a30cee1..85163fc96c9 100644 +--- a/cpu/or1k.opc ++++ b/cpu/or1k.opc +@@ -173,7 +173,7 @@ static const bfd_reloc_code_real_type or1k_imm16_relocs[][6] = { + BFD_RELOC_OR1K_GOT_LO13, + BFD_RELOC_UNUSED, + BFD_RELOC_UNUSED, +- BFD_RELOC_UNUSED }, ++ BFD_RELOC_OR1K_GOT_AHI16 }, + { BFD_RELOC_OR1K_GOTPC_LO16, + BFD_RELOC_UNUSED, + BFD_RELOC_UNUSED, +@@ -276,6 +276,11 @@ parse_reloc (const char **strp) + str += 5; + cls = RCLASS_TPOFF; + } ++ else if (strncasecmp (str, "got", 3) == 0) ++ { ++ str += 3; ++ cls = RCLASS_GOT; ++ } + + if (strncasecmp (str, "hi(", 3) == 0) + { +diff --git a/gas/testsuite/gas/or1k/reloc-1.d b/gas/testsuite/gas/or1k/reloc-1.d +index d1bcf5608bb..3a001c4ed99 100644 +--- a/gas/testsuite/gas/or1k/reloc-1.d ++++ b/gas/testsuite/gas/or1k/reloc-1.d +@@ -68,5 +68,7 @@ OFFSET TYPE VALUE + 000000ec R_OR1K_LO13 x + 000000f0 R_OR1K_GOT_LO13 x + 000000f4 R_OR1K_SLO13 x +- ++000000f8 R_OR1K_GOT_AHI16 x ++000000fc R_OR1K_GOT_AHI16 x ++00000100 R_OR1K_GOT_AHI16 x + +diff --git a/gas/testsuite/gas/or1k/reloc-1.s b/gas/testsuite/gas/or1k/reloc-1.s +index e76abef6532..562609aa869 100644 +--- a/gas/testsuite/gas/or1k/reloc-1.s ++++ b/gas/testsuite/gas/or1k/reloc-1.s +@@ -74,3 +74,7 @@ + l.lbz r5,po(x)(r3) + l.lbz r5,gotpo(x)(r3) + l.sb po(x)(r3),r6 ++ ++ l.movhi r4,gotha(x) ++ l.ori r3,r4,gotha(x) ++ l.addi r3,r4,gotha(x) +diff --git a/include/elf/or1k.h b/include/elf/or1k.h +index 0abef046202..7db3cad18eb 100644 +--- a/include/elf/or1k.h ++++ b/include/elf/or1k.h +@@ -77,6 +77,7 @@ START_RELOC_NUMBERS (elf_or1k_reloc_type) + RELOC_NUMBER (R_OR1K_TLS_IE_LO13, 51) + RELOC_NUMBER (R_OR1K_SLO13, 52) + RELOC_NUMBER (R_OR1K_PLTA26, 53) ++ RELOC_NUMBER (R_OR1K_GOT_AHI16, 54) + END_RELOC_NUMBERS (R_OR1K_max) + + #define EF_OR1K_NODELAY (1UL << 0) +diff --git a/opcodes/or1k-asm.c b/opcodes/or1k-asm.c +index 7d058d03f5f..332f4b7a9b5 100644 +--- a/opcodes/or1k-asm.c ++++ b/opcodes/or1k-asm.c +@@ -177,7 +177,7 @@ static const bfd_reloc_code_real_type or1k_imm16_relocs[][6] = { + BFD_RELOC_OR1K_GOT_LO13, + BFD_RELOC_UNUSED, + BFD_RELOC_UNUSED, +- BFD_RELOC_UNUSED }, ++ BFD_RELOC_OR1K_GOT_AHI16 }, + { BFD_RELOC_OR1K_GOTPC_LO16, + BFD_RELOC_UNUSED, + BFD_RELOC_UNUSED, +@@ -280,6 +280,11 @@ parse_reloc (const char **strp) + str += 5; + cls = RCLASS_TPOFF; + } ++ else if (strncasecmp (str, "got", 3) == 0) ++ { ++ str += 3; ++ cls = RCLASS_GOT; ++ } + + if (strncasecmp (str, "hi(", 3) == 0) + { +-- +2.25.1 + diff --git a/package/binutils/2.32/0012-or1k-Avoid-R_OR1K_GOT16-overflow-failures-in-presenc.patch b/package/binutils/2.32/0012-or1k-Avoid-R_OR1K_GOT16-overflow-failures-in-presenc.patch new file mode 100644 index 00000000..adc6f5f8 --- /dev/null +++ b/package/binutils/2.32/0012-or1k-Avoid-R_OR1K_GOT16-overflow-failures-in-presenc.patch @@ -0,0 +1,61 @@ +From 0f61f76454a9420f158f626cb09a4fbc08c3709e Mon Sep 17 00:00:00 2001 +From: Stafford Horne +Date: Sun, 2 May 2021 06:02:16 +0900 +Subject: [PATCH] or1k: Avoid R_OR1K_GOT16 overflow failures in presence + of R_OR1K_GOT_AHI16 + +Now that we support R_OR1K_GOT_AHI16 we can relax the R_OR1K_GOT16 +overflow validation check if the section has R_OR1K_GOT_AHI16. + +We cannot simple disable R_OR1K_GOT16 overflow validation as there will +still be binaries that will have only R_OR1K_GOT16. The +R_OR1K_GOT_AHI16 relocation will only be added by GCC when building with +the option -mcmodel=large. + +This assumes that R_OR1K_GOT_AHI16 will come before R_OR1K_GOT16, which +is the code pattern that will be emitted by GCC. + +bfd/ChangeLog: + + PR 21464 + * elf32-or1k.c (or1k_elf_relocate_section): Relax R_OR1K_GOT16 + overflow check if we have R_OR1K_GOT_AHI16 followed by + R_OR1K_GOT16. + +Signed-off-by: Giulio Benetti +--- + bfd/elf32-or1k.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index a4a64f73b7c..07fff3602a3 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -1248,6 +1248,7 @@ or1k_elf_relocate_section (bfd *output_bfd, + asection *sgot, *splt; + bfd_vma plt_base, got_base, got_sym_value; + bfd_boolean ret_val = TRUE; ++ bfd_boolean saw_gotha = FALSE; + + if (htab == NULL) + return FALSE; +@@ -1456,6 +1457,16 @@ or1k_elf_relocate_section (bfd *output_bfd, + || r_type == R_OR1K_GOT_AHI16) + relocation -= got_sym_value; + ++ if (r_type == R_OR1K_GOT_AHI16) ++ saw_gotha = TRUE; ++ ++ /* If we have a R_OR1K_GOT16 followed by a R_OR1K_GOT_AHI16 ++ relocation we assume the code is doing the right thing to avoid ++ overflows. Here we mask the lower 16-bit of the relocation to ++ avoid overflow validation failures. */ ++ if (r_type == R_OR1K_GOT16 && saw_gotha) ++ relocation &= 0xffff; ++ + /* Addend should be zero. */ + if (rel->r_addend != 0) + { +-- +2.25.1 + diff --git a/package/binutils/2.32/0013-or1k-Support-large-plt_relocs-when-generating-plt-en.patch b/package/binutils/2.32/0013-or1k-Support-large-plt_relocs-when-generating-plt-en.patch new file mode 100644 index 00000000..dc0431e0 --- /dev/null +++ b/package/binutils/2.32/0013-or1k-Support-large-plt_relocs-when-generating-plt-en.patch @@ -0,0 +1,500 @@ +From 36c7de7ef77ab0c30cb33e2c7ea7a6f4e3052c73 Mon Sep 17 00:00:00 2001 +From: Stafford Horne +Date: Sun, 2 May 2021 06:02:17 +0900 +Subject: [PATCH] or1k: Support large plt_relocs when generating plt + entries + +The current PLT generation code will generate invalid code when the PLT +relocation offset exceeds 64k. This fixes the issue by detecting large +plt_reloc offsets and generare code sequences to create larger plt +relocations. + +The "large" plt code needs 2 extra instructions to create 32-bit offsets. + +bfd/ChangeLog: + + PR 27746 + * elf32-or1k.c (PLT_ENTRY_SIZE_LARGE, PLT_MAX_INSN_COUNT, + OR1K_ADD, OR1K_ORI): New macros to help with plt creation. + (elf_or1k_link_hash_table): New field plt_count. + (elf_or1k_link_hash_entry): New field plt_index. + (elf_or1k_plt_entry_size): New function. + (or1k_write_plt_entry): Update to support variable size PLTs. + (or1k_elf_finish_dynamic_sections): Use new or1k_write_plt_entry + API. + (or1k_elf_finish_dynamic_symbol): Update to write large PLTs + when needed. + (allocate_dynrelocs): Use elf_or1k_plt_entry_size to account for + PLT size. + +ld/ChangeLog: + + PR 27746 + testsuite/ld-or1k/or1k.exp (or1kplttests): Add tests for linking + along with gotha() relocations. + testsuite/ld-or1k/gotha1.dd: New file. + testsuite/ld-or1k/gotha1.s: New file. + testsuite/ld-or1k/gotha2.dd: New file. + testsuite/ld-or1k/gotha2.s: New file + testsuite/ld-or1k/pltlib.s (x): Define size to avoid link + failure. + +Signed-off-by: Giulio Benetti +--- + bfd/elf32-or1k.c | 149 ++++++++++++++++++++++++--------- + ld/testsuite/ld-or1k/gotha1.dd | 34 ++++++++ + ld/testsuite/ld-or1k/gotha1.s | 24 ++++++ + ld/testsuite/ld-or1k/gotha2.dd | 21 +++++ + ld/testsuite/ld-or1k/gotha2.s | 22 +++++ + ld/testsuite/ld-or1k/or1k.exp | 8 ++ + ld/testsuite/ld-or1k/pltlib.s | 1 + + 7 files changed, 220 insertions(+), 39 deletions(-) + create mode 100644 ld/testsuite/ld-or1k/gotha1.dd + create mode 100644 ld/testsuite/ld-or1k/gotha1.s + create mode 100644 ld/testsuite/ld-or1k/gotha2.dd + create mode 100644 ld/testsuite/ld-or1k/gotha2.s + +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index 07fff3602a3..fcebbe5f23a 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -30,10 +30,14 @@ + #define N_ONES(X) (((bfd_vma)2 << (X)) - 1) + + #define PLT_ENTRY_SIZE 16 ++#define PLT_ENTRY_SIZE_LARGE (6*4) ++#define PLT_MAX_INSN_COUNT 6 + + #define OR1K_MOVHI(D) (0x18000000 | (D << 21)) + #define OR1K_ADRP(D) (0x08000000 | (D << 21)) + #define OR1K_LWZ(D,A) (0x84000000 | (D << 21) | (A << 16)) ++#define OR1K_ADD(D,A,B) (0xE0000000 | (D << 21) | (A << 16) | (B << 11)) ++#define OR1K_ORI(D,A) (0xA8000000 | (D << 21) | (A << 16)) + #define OR1K_ORI0(D) (0xA8000000 | (D << 21)) + #define OR1K_JR(B) (0x44000000 | (B << 11)) + #define OR1K_NOP 0x15000000 +@@ -903,6 +907,8 @@ struct elf_or1k_link_hash_entry + /* Track dynamic relocs copied for this symbol. */ + struct elf_dyn_relocs *dyn_relocs; + ++ /* For calculating PLT size. */ ++ bfd_vma plt_index; + /* Track type of TLS access. */ + unsigned char tls_type; + }; +@@ -930,9 +936,20 @@ struct elf_or1k_link_hash_table + /* Small local sym to section mapping cache. */ + struct sym_cache sym_sec; + ++ bfd_vma plt_count; + bfd_boolean saw_plta; + }; + ++static size_t ++elf_or1k_plt_entry_size (bfd_vma plt_index) ++{ ++ bfd_vma plt_reloc; ++ ++ plt_reloc = plt_index * sizeof (Elf32_External_Rela); ++ ++ return (plt_reloc > 0xffff) ? PLT_ENTRY_SIZE_LARGE : PLT_ENTRY_SIZE; ++} ++ + /* Get the ELF linker hash table from a link_info structure. */ + #define or1k_elf_hash_table(p) \ + (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ +@@ -2176,33 +2193,46 @@ or1k_elf_check_relocs (bfd *abfd, + } + + static void +-or1k_write_plt_entry (bfd *output_bfd, bfd_byte *contents, unsigned insn1, +- unsigned insn2, unsigned insn3, unsigned insnj) ++or1k_write_plt_entry (bfd *output_bfd, bfd_byte *contents, unsigned insnj, ++ unsigned insns[], size_t insn_count) + { + unsigned nodelay = elf_elfheader (output_bfd)->e_flags & EF_OR1K_NODELAY; +- unsigned insn4; ++ unsigned output_insns[PLT_MAX_INSN_COUNT]; ++ ++ /* Copy instructions into the output buffer. */ ++ for (size_t i = 0; i < insn_count; i++) ++ output_insns[i] = insns[i]; + + /* Honor the no-delay-slot setting. */ +- if (insn3 == OR1K_NOP) ++ if (insns[insn_count-1] == OR1K_NOP) + { +- insn4 = insn3; ++ unsigned slot1, slot2; ++ + if (nodelay) +- insn3 = insnj; ++ slot1 = insns[insn_count-2], slot2 = insnj; + else +- insn3 = insn2, insn2 = insnj; ++ slot1 = insnj, slot2 = insns[insn_count-2]; ++ ++ output_insns[insn_count-2] = slot1; ++ output_insns[insn_count-1] = slot2; ++ output_insns[insn_count] = OR1K_NOP; + } + else + { ++ unsigned slot1, slot2; ++ + if (nodelay) +- insn4 = insnj; ++ slot1 = insns[insn_count-1], slot2 = insnj; + else +- insn4 = insn3, insn3 = insnj; ++ slot1 = insnj, slot2 = insns[insn_count-1]; ++ ++ output_insns[insn_count-1] = slot1; ++ output_insns[insn_count] = slot2; + } + +- bfd_put_32 (output_bfd, insn1, contents); +- bfd_put_32 (output_bfd, insn2, contents + 4); +- bfd_put_32 (output_bfd, insn3, contents + 8); +- bfd_put_32 (output_bfd, insn4, contents + 12); ++ /* Write out the output buffer. */ ++ for (size_t i = 0; i < (insn_count+1); i++) ++ bfd_put_32 (output_bfd, output_insns[i], contents + (i*4)); + } + + /* Finish up the dynamic sections. */ +@@ -2269,7 +2299,8 @@ or1k_elf_finish_dynamic_sections (bfd *output_bfd, + splt = htab->root.splt; + if (splt && splt->size > 0) + { +- unsigned plt0, plt1, plt2; ++ unsigned plt[PLT_MAX_INSN_COUNT]; ++ size_t plt_insn_count = 3; + bfd_vma got_addr = sgot->output_section->vma + sgot->output_offset; + + /* Note we force 16 byte alignment on the .got, so that +@@ -2280,27 +2311,27 @@ or1k_elf_finish_dynamic_sections (bfd *output_bfd, + bfd_vma pc = splt->output_section->vma + splt->output_offset; + unsigned pa = ((got_addr >> 13) - (pc >> 13)) & 0x1fffff; + unsigned po = got_addr & 0x1fff; +- plt0 = OR1K_ADRP(12) | pa; +- plt1 = OR1K_LWZ(15,12) | (po + 8); +- plt2 = OR1K_LWZ(12,12) | (po + 4); ++ plt[0] = OR1K_ADRP(12) | pa; ++ plt[1] = OR1K_LWZ(15,12) | (po + 8); ++ plt[2] = OR1K_LWZ(12,12) | (po + 4); + } + else if (bfd_link_pic (info)) + { +- plt0 = OR1K_LWZ(15, 16) | 8; /* .got+8 */ +- plt1 = OR1K_LWZ(12, 16) | 4; /* .got+4 */ +- plt2 = OR1K_NOP; ++ plt[0] = OR1K_LWZ(15, 16) | 8; /* .got+8 */ ++ plt[1] = OR1K_LWZ(12, 16) | 4; /* .got+4 */ ++ plt[2] = OR1K_NOP; + } + else + { + unsigned ha = ((got_addr + 0x8000) >> 16) & 0xffff; + unsigned lo = got_addr & 0xffff; +- plt0 = OR1K_MOVHI(12) | ha; +- plt1 = OR1K_LWZ(15,12) | (lo + 8); +- plt2 = OR1K_LWZ(12,12) | (lo + 4); ++ plt[0] = OR1K_MOVHI(12) | ha; ++ plt[1] = OR1K_LWZ(15,12) | (lo + 8); ++ plt[2] = OR1K_LWZ(12,12) | (lo + 4); + } + +- or1k_write_plt_entry (output_bfd, splt->contents, +- plt0, plt1, plt2, OR1K_JR(15)); ++ or1k_write_plt_entry (output_bfd, splt->contents, OR1K_JR(15), ++ plt, plt_insn_count); + + elf_section_data (splt->output_section)->this_hdr.sh_entsize = 4; + } +@@ -2343,7 +2374,8 @@ or1k_elf_finish_dynamic_symbol (bfd *output_bfd, + + if (h->plt.offset != (bfd_vma) -1) + { +- unsigned int plt0, plt1, plt2; ++ unsigned int plt[PLT_MAX_INSN_COUNT]; ++ size_t plt_insn_count = 3; + asection *splt; + asection *sgot; + asection *srela; +@@ -2355,6 +2387,7 @@ or1k_elf_finish_dynamic_symbol (bfd *output_bfd, + bfd_vma got_offset; + bfd_vma got_addr; + Elf_Internal_Rela rela; ++ bfd_boolean large_plt_entry; + + /* This symbol has an entry in the procedure linkage table. Set + it up. */ +@@ -2372,10 +2405,13 @@ or1k_elf_finish_dynamic_symbol (bfd *output_bfd, + corresponds to this symbol. This is the index of this symbol + in all the symbols for which we are making plt entries. The + first entry in the procedure linkage table is reserved. */ +- plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1; ++ plt_index = ((struct elf_or1k_link_hash_entry *) h)->plt_index; + plt_addr = plt_base_addr + h->plt.offset; + plt_reloc = plt_index * sizeof (Elf32_External_Rela); + ++ large_plt_entry = (elf_or1k_plt_entry_size (plt_index) ++ == PLT_ENTRY_SIZE_LARGE); ++ + /* Get the offset into the .got table of the entry that + corresponds to this function. Each .got entry is 4 bytes. + The first three are reserved. */ +@@ -2387,27 +2423,57 @@ or1k_elf_finish_dynamic_symbol (bfd *output_bfd, + { + unsigned pa = ((got_addr >> 13) - (plt_addr >> 13)) & 0x1fffff; + unsigned po = (got_addr & 0x1fff); +- plt0 = OR1K_ADRP(12) | pa; +- plt1 = OR1K_LWZ(12,12) | po; +- plt2 = OR1K_ORI0(11) | plt_reloc; ++ plt[0] = OR1K_ADRP(12) | pa; ++ plt[1] = OR1K_LWZ(12,12) | po; ++ plt[2] = OR1K_ORI0(11) | plt_reloc; + } + else if (bfd_link_pic (info)) + { +- plt0 = OR1K_LWZ(12,16) | got_offset; +- plt1 = OR1K_ORI0(11) | plt_reloc; +- plt2 = OR1K_NOP; ++ if (large_plt_entry) ++ { ++ unsigned gotha = ((got_offset + 0x8000) >> 16) & 0xffff; ++ unsigned got = got_offset & 0xffff; ++ unsigned pltrelhi = (plt_reloc >> 16) & 0xffff; ++ unsigned pltrello = plt_reloc & 0xffff; ++ ++ plt[0] = OR1K_MOVHI(12) | gotha; ++ plt[1] = OR1K_ADD(12,12,16); ++ plt[2] = OR1K_LWZ(12,12) | got; ++ plt[3] = OR1K_MOVHI(11) | pltrelhi; ++ plt[4] = OR1K_ORI(11,11) | pltrello; ++ plt_insn_count = 5; ++ } ++ else ++ { ++ plt[0] = OR1K_LWZ(12,16) | got_offset; ++ plt[1] = OR1K_ORI0(11) | plt_reloc; ++ plt[2] = OR1K_NOP; ++ } + } + else + { + unsigned ha = ((got_addr + 0x8000) >> 16) & 0xffff; + unsigned lo = got_addr & 0xffff; +- plt0 = OR1K_MOVHI(12) | ha; +- plt1 = OR1K_LWZ(12,12) | lo; +- plt2 = OR1K_ORI0(11) | plt_reloc; ++ plt[0] = OR1K_MOVHI(12) | ha; ++ plt[1] = OR1K_LWZ(12,12) | lo; ++ plt[2] = OR1K_ORI0(11) | plt_reloc; ++ } ++ ++ /* For large code model we fixup the non-PIC PLT relocation instructions ++ here. */ ++ if (large_plt_entry && !bfd_link_pic (info)) ++ { ++ unsigned pltrelhi = (plt_reloc >> 16) & 0xffff; ++ unsigned pltrello = plt_reloc & 0xffff; ++ ++ plt[2] = OR1K_MOVHI(11) | pltrelhi; ++ plt[3] = OR1K_ORI(11,11) | pltrello; ++ plt[4] = OR1K_NOP; ++ plt_insn_count = 5; + } + + or1k_write_plt_entry (output_bfd, splt->contents + h->plt.offset, +- plt0, plt1, plt2, OR1K_JR(12)); ++ OR1K_JR(12), plt, plt_insn_count); + + /* Fill in the entry in the global offset table. */ + bfd_put_32 (output_bfd, plt_addr, sgot->contents + got_offset); +@@ -2699,11 +2765,16 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h)) + { + asection *s = htab->root.splt; ++ bfd_vma plt_index; ++ ++ /* Track the index of our plt entry for use in calculating size. */ ++ plt_index = htab->plt_count++; ++ ((struct elf_or1k_link_hash_entry *) h)->plt_index = plt_index; + + /* If this is the first .plt entry, make room for the special + first entry. */ + if (s->size == 0) +- s->size = PLT_ENTRY_SIZE; ++ s->size = elf_or1k_plt_entry_size (plt_index); + + h->plt.offset = s->size; + +@@ -2720,7 +2791,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) + } + + /* Make room for this entry. */ +- s->size += PLT_ENTRY_SIZE; ++ s->size += elf_or1k_plt_entry_size (plt_index); + + /* We also need to make an entry in the .got.plt section, which + will be placed in the .got section by the linker script. */ +diff --git a/ld/testsuite/ld-or1k/gotha1.dd b/ld/testsuite/ld-or1k/gotha1.dd +new file mode 100644 +index 00000000000..0ad1f8f5399 +--- /dev/null ++++ b/ld/testsuite/ld-or1k/gotha1.dd +@@ -0,0 +1,34 @@ ++ ++.*\.x: file format elf32-or1k ++ ++ ++Disassembly of section \.plt: ++ ++[0-9a-f]+ <\.plt>: ++ +[0-9a-f]+: 19 80 00 00 l\.movhi r12,0x0 ++ +[0-9a-f]+: 85 ec [0-9a-f]+ [0-9a-f]+ l\.lwz r15,[0-9]+\(r12\) ++ +[0-9a-f]+: 44 00 78 00 l\.jr r15 ++ +[0-9a-f]+: 85 8c [0-9a-f]+ [0-9a-f]+ l\.lwz r12,[0-9]+\(r12\) ++ +[0-9a-f]+: 19 80 00 00 l\.movhi r12,0x0 ++ +[0-9a-f]+: 85 8c [0-9a-f]+ [0-9a-f]+ l\.lwz r12,[0-9]+\(r12\) ++ +[0-9a-f]+: 44 00 60 00 l\.jr r12 ++ +[0-9a-f]+: a9 60 00 00 l\.ori r11,r0,0x0 ++ ++Disassembly of section \.text: ++ ++[0-9a-f]+ <_start>: ++ +[0-9a-f]+: 9c 21 ff fc l\.addi r1,r1,-4 ++ +[0-9a-f]+: d4 01 48 00 l\.sw 0\(r1\),r9 ++ +[0-9a-f]+: 04 00 00 02 l\.jal [0-9a-f]+ <_start\+0x10> ++ +[0-9a-f]+: 1a 60 00 00 l\.movhi r19,0x0 ++ +[0-9a-f]+: aa 73 [0-9a-f]+ [0-9a-f]+ l\.ori r19,r19,0x[0-9a-f]+ ++ +[0-9a-f]+: e2 73 48 00 l\.add r19,r19,r9 ++ +[0-9a-f]+: 1a 20 00 00 l\.movhi r17,0x0 ++ +[0-9a-f]+: e2 31 98 00 l\.add r17,r17,r19 ++ +[0-9a-f]+: 86 31 00 10 l\.lwz r17,16\(r17\) ++ +[0-9a-f]+: 84 71 00 00 l\.lwz r3,0\(r17\) ++ +[0-9a-f]+: 07 ff ff f2 l\.jal [0-9a-f]+ <\.plt\+0x10> ++ +[0-9a-f]+: 15 00 00 00 l\.nop 0x0 ++ +[0-9a-f]+: 85 21 00 00 l\.lwz r9,0\(r1\) ++ +[0-9a-f]+: 44 00 48 00 l\.jr r9 ++ +[0-9a-f]+: 9c 21 00 04 l\.addi r1,r1,4 +diff --git a/ld/testsuite/ld-or1k/gotha1.s b/ld/testsuite/ld-or1k/gotha1.s +new file mode 100644 +index 00000000000..42b16db425c +--- /dev/null ++++ b/ld/testsuite/ld-or1k/gotha1.s +@@ -0,0 +1,24 @@ ++ .data ++ .p2align 16 ++ ++ .text ++ .globl _start ++_start: ++ l.addi r1, r1, -4 ++ l.sw 0(r1), r9 ++ ++ l.jal 8 ++ l.movhi r19, gotpchi(_GLOBAL_OFFSET_TABLE_-4) ++ l.ori r19, r19, gotpclo(_GLOBAL_OFFSET_TABLE_+0) ++ l.add r19, r19, r9 ++ ++ l.movhi r17, gotha(x) ++ l.add r17, r17, r19 ++ l.lwz r17, got(x)(r17) ++ l.lwz r3, 0(r17) ++ ++ l.jal plt(func) ++ l.nop ++ l.lwz r9, 0(r1) ++ l.jr r9 ++ l.addi r1, r1, 4 +diff --git a/ld/testsuite/ld-or1k/gotha2.dd b/ld/testsuite/ld-or1k/gotha2.dd +new file mode 100644 +index 00000000000..fe09da5466b +--- /dev/null ++++ b/ld/testsuite/ld-or1k/gotha2.dd +@@ -0,0 +1,21 @@ ++ ++.*\.x: file format elf32-or1k ++ ++ ++Disassembly of section \.text: ++ ++[0-9a-f]+ : ++ +[0-9a-f]+: 9c 21 ff f8 l\.addi r1,r1,-8 ++ +[0-9a-f]+: d4 01 80 00 l\.sw 0\(r1\),r16 ++ +[0-9a-f]+: d4 01 48 04 l\.sw 4\(r1\),r9 ++ +[0-9a-f]+: 04 00 [0-9a-f]+ [0-9a-f]+ l\.jal [0-9a-f]+ ++ +[0-9a-f]+: 1a 00 00 00 l\.movhi r16,0x0 ++ +[0-9a-f]+: aa 10 [0-9a-f]+ [0-9a-f]+ l\.ori r16,r16,0x[0-9a-f]+ ++ +[0-9a-f]+: e2 10 48 00 l\.add r16,r16,r9 ++ +[0-9a-f]+: 1a 20 00 00 l\.movhi r17,0x0 ++ +[0-9a-f]+: e2 31 80 00 l\.add r17,r17,r16 ++ +[0-9a-f]+: 86 31 00 0c l\.lwz r17,12\(r17\) ++ +[0-9a-f]+: 85 21 00 04 l\.lwz r9,4\(r1\) ++ +[0-9a-f]+: 86 01 00 00 l\.lwz r16,0\(r1\) ++ +[0-9a-f]+: 44 00 48 00 l\.jr r9 ++ +[0-9a-f]+: 9c 21 00 08 l\.addi r1,r1,8 +diff --git a/ld/testsuite/ld-or1k/gotha2.s b/ld/testsuite/ld-or1k/gotha2.s +new file mode 100644 +index 00000000000..164b282f2dd +--- /dev/null ++++ b/ld/testsuite/ld-or1k/gotha2.s +@@ -0,0 +1,22 @@ ++ .section .text ++ .align 4 ++ .global test ++ .type test, @function ++test: ++ l.addi r1, r1, -8 ++ l.sw 0(r1), r16 ++ l.sw 4(r1), r9 ++ ++ l.jal 8 ++ l.movhi r16, gotpchi(_GLOBAL_OFFSET_TABLE_-4) ++ l.ori r16, r16, gotpclo(_GLOBAL_OFFSET_TABLE_+0) ++ l.add r16, r16, r9 ++ ++ l.movhi r17, gotha(i) ++ l.add r17, r17, r16 ++ l.lwz r17, got(i)(r17) ++ ++ l.lwz r9, 4(r1) ++ l.lwz r16, 0(r1) ++ l.jr r9 ++ l.addi r1, r1, 8 +diff --git a/ld/testsuite/ld-or1k/or1k.exp b/ld/testsuite/ld-or1k/or1k.exp +index 24cdbe5fbf3..9cebc49b946 100644 +--- a/ld/testsuite/ld-or1k/or1k.exp ++++ b/ld/testsuite/ld-or1k/or1k.exp +@@ -53,6 +53,14 @@ set or1kplttests { + "" {plt1.s} + {{objdump -dr plt1.x.dd}} + "plt1.x"} ++ {"gotha exec plt" "tmpdir/libpltlib.so" "" ++ "" {gotha1.s} ++ {{objdump -dr gotha1.dd}} ++ "gotha1.x"} ++ {"gotha -fpic -shared" "-fpic -shared" "" ++ "" {gotha2.s} ++ {{objdump -dr gotha2.dd}} ++ "gotha2.x"} + } + + # Not implemented yet +diff --git a/ld/testsuite/ld-or1k/pltlib.s b/ld/testsuite/ld-or1k/pltlib.s +index baf76ca1af7..8b4d7ba48fd 100644 +--- a/ld/testsuite/ld-or1k/pltlib.s ++++ b/ld/testsuite/ld-or1k/pltlib.s +@@ -1,5 +1,6 @@ + .section .data + .globl x, y ++ .size x, 4 + x: .long 33 + y: .long 44 + +-- +2.25.1 + diff --git a/package/binutils/2.32/0014-bfd-elf32-or1k-fix-building-with-gcc-version-5.patch b/package/binutils/2.32/0014-bfd-elf32-or1k-fix-building-with-gcc-version-5.patch new file mode 100644 index 00000000..c3978e22 --- /dev/null +++ b/package/binutils/2.32/0014-bfd-elf32-or1k-fix-building-with-gcc-version-5.patch @@ -0,0 +1,50 @@ +From c3003947e4bad18faea4337fd2073feeb30ee078 Mon Sep 17 00:00:00 2001 +From: Giulio Benetti +Date: Wed, 9 Jun 2021 17:28:27 +0200 +Subject: [PATCH] bfd/elf32-or1k: fix building with gcc version < 5 + +Gcc version >= 5 has standard C mode not set to -std=gnu11, so if we use +an old compiler(i.e. gcc 4.9) build fails on: +``` +elf32-or1k.c:2251:3: error: 'for' loop initial declarations are only allowed in +C99 or C11 mode + for (size_t i = 0; i < insn_count; i++) + ^ +``` + +So let's declare `size_t i` at the top of the function instead of inside +for loop. + +Signed-off-by: Giulio Benetti +--- + bfd/elf32-or1k.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index 4ae7f324d33..32063ab0289 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -2244,9 +2244,10 @@ or1k_write_plt_entry (bfd *output_bfd, bfd_byte *contents, unsigned insnj, + { + unsigned nodelay = elf_elfheader (output_bfd)->e_flags & EF_OR1K_NODELAY; + unsigned output_insns[PLT_MAX_INSN_COUNT]; ++ size_t i; + + /* Copy instructions into the output buffer. */ +- for (size_t i = 0; i < insn_count; i++) ++ for (i = 0; i < insn_count; i++) + output_insns[i] = insns[i]; + + /* Honor the no-delay-slot setting. */ +@@ -2277,7 +2278,7 @@ or1k_write_plt_entry (bfd *output_bfd, bfd_byte *contents, unsigned insnj, + } + + /* Write out the output buffer. */ +- for (size_t i = 0; i < (insn_count+1); i++) ++ for (i = 0; i < (insn_count+1); i++) + bfd_put_32 (output_bfd, output_insns[i], contents + (i*4)); + } + +-- +2.25.1 + diff --git a/package/binutils/2.32/0015-or1k-fix-pc-relative-relocation-against-dynamic-on-P.patch b/package/binutils/2.32/0015-or1k-fix-pc-relative-relocation-against-dynamic-on-P.patch new file mode 100644 index 00000000..585b97b2 --- /dev/null +++ b/package/binutils/2.32/0015-or1k-fix-pc-relative-relocation-against-dynamic-on-P.patch @@ -0,0 +1,59 @@ +From 9af93e143a7fbdb75aa1ed37277f9250eb111628 Mon Sep 17 00:00:00 2001 +From: Giulio Benetti +Date: Sat, 10 Jul 2021 17:57:34 +0200 +Subject: [PATCH] or1k: fix pc-relative relocation against dynamic on PC + relative 26 bit relocation + +When building openal we were seeing the assert failure: + +/home/buildroot/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: CMakeFiles/OpenAL.dir/al/source.cpp.o: +pc-relative relocation against dynamic symbol alSourcePausev +/home/buildroot/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: CMakeFiles/OpenAL.dir/al/source.cpp.o: +pc-relative relocation against dynamic symbol alSourceStopv +/home/buildroot/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: CMakeFiles/OpenAL.dir/al/source.cpp.o: +pc-relative relocation against dynamic symbol alSourceRewindv +/home/buildroot/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: CMakeFiles/OpenAL.dir/al/source.cpp.o: +pc-relative relocation against dynamic symbol alSourcePlayv +collect2: error: ld returned 1 exit status + +This happens because in R_OR1K_INSN_REL_26 case we can't reference local +symbol as previously done but we need to make sure that calls to actual +symbol always call the version of current object. + +bfd/Changelog: + + * elf32-or1k.c (or1k_elf_relocate_section): use a separate entry + in switch case R_OR1K_INSN_REL_26 where we need to check for + !SYMBOL_CALLS_LOCAL() instead of !SYMBOL_REFERENCES_LOCAL(). + +Signed-off-by: Giulio Benetti +--- + bfd/elf32-or1k.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index 4ae7f324d33..4f9092539f5 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -1543,6 +1543,18 @@ or1k_elf_relocate_section (bfd *output_bfd, + break; + + case R_OR1K_INSN_REL_26: ++ /* For a non-shared link, these will reference plt or call the ++ version of actual object. */ ++ if (bfd_link_pic (info) && !SYMBOL_CALLS_LOCAL (info, h)) ++ { ++ _bfd_error_handler ++ (_("%pB: pc-relative relocation against dynamic symbol %s"), ++ input_bfd, name); ++ ret_val = FALSE; ++ bfd_set_error (bfd_error_bad_value); ++ } ++ break; ++ + case R_OR1K_PCREL_PG21: + case R_OR1K_LO13: + case R_OR1K_SLO13: +-- +2.25.1 + diff --git a/package/binutils/2.34/0001-sh-conf.patch b/package/binutils/2.34/0001-sh-conf.patch new file mode 100644 index 00000000..6f873691 --- /dev/null +++ b/package/binutils/2.34/0001-sh-conf.patch @@ -0,0 +1,48 @@ +From a4292f2852027008714c5ccdbab77af0b36f3928 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Fri, 25 Dec 2015 11:38:13 +0100 +Subject: [PATCH] sh-conf + +Likewise, binutils has no idea about any of these new targets either, so we +fix that up too.. now we're able to actually build a real toolchain for +sh2a_nofpu- and other more ineptly named toolchains (and yes, there are more +inept targets than that one, really. Go look, I promise). + +[Romain: rebase on top of 2.32] +Signed-off-by: Romain Naour +[Thomas: rebase on top of 2.29, in which sh64 support was removed.] +Signed-off-by: Thomas Petazzoni +--- + configure | 2 +- + configure.ac | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/configure b/configure +index 91dc42f6c7..92f70a4ce6 100755 +--- a/configure ++++ b/configure +@@ -3915,7 +3915,7 @@ case "${target}" in + nvptx*-*-*) + noconfigdirs="$noconfigdirs target-libssp target-libstdc++-v3 target-libobjc" + ;; +- sh-*-*) ++ sh*-*-*) + case "${target}" in + sh*-*-elf) + ;; +diff --git a/configure.ac b/configure.ac +index 4bd869a63a..139e0aa6ab 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1159,7 +1159,7 @@ case "${target}" in + nvptx*-*-*) + noconfigdirs="$noconfigdirs target-libssp target-libstdc++-v3 target-libobjc" + ;; +- sh-*-*) ++ sh*-*-*) + case "${target}" in + sh*-*-elf) + ;; +-- +2.24.1 + diff --git a/package/binutils/2.34/0002-poison-system-directories.patch b/package/binutils/2.34/0002-poison-system-directories.patch new file mode 100644 index 00000000..fc0c6984 --- /dev/null +++ b/package/binutils/2.34/0002-poison-system-directories.patch @@ -0,0 +1,306 @@ +From 9952aec22006cfd0e1f5dd0106523e2b93ad20a8 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Fri, 25 Dec 2015 11:45:38 +0100 +Subject: [PATCH] poison-system-directories + +Patch adapted to binutils 2.23.2 and extended to use +BR_COMPILER_PARANOID_UNSAFE_PATH by Thomas Petazzoni. + +[Romain: rebase on top of 2.33.1] +Signed-off-by: Romain Naour +[Gustavo: adapt to binutils 2.25] +Signed-off-by: Thomas Petazzoni +Signed-off-by: Gustavo Zacarias + +Upstream-Status: Inappropriate [distribution: codesourcery] + +Patch originally created by Mark Hatle, forward-ported to +binutils 2.21 by Scott Garman. + +purpose: warn for uses of system directories when cross linking + +Code Merged from Sourcery G++ binutils 2.19 - 4.4-277 + +2008-07-02 Joseph Myers + + ld/ + * ld.h (args_type): Add error_poison_system_directories. + * ld.texinfo (--error-poison-system-directories): Document. + * ldfile.c (ldfile_add_library_path): Check + command_line.error_poison_system_directories. + * ldmain.c (main): Initialize + command_line.error_poison_system_directories. + * lexsup.c (enum option_values): Add + OPTION_ERROR_POISON_SYSTEM_DIRECTORIES. + (ld_options): Add --error-poison-system-directories. + (parse_args): Handle new option. + +2007-06-13 Joseph Myers + + ld/ + * config.in: Regenerate. + * ld.h (args_type): Add poison_system_directories. + * ld.texinfo (--no-poison-system-directories): Document. + * ldfile.c (ldfile_add_library_path): Check + command_line.poison_system_directories. + * ldmain.c (main): Initialize + command_line.poison_system_directories. + * lexsup.c (enum option_values): Add + OPTION_NO_POISON_SYSTEM_DIRECTORIES. + (ld_options): Add --no-poison-system-directories. + (parse_args): Handle new option. + +2007-04-20 Joseph Myers + + Merge from Sourcery G++ binutils 2.17: + + 2007-03-20 Joseph Myers + Based on patch by Mark Hatle . + ld/ + * configure.ac (--enable-poison-system-directories): New option. + * configure, config.in: Regenerate. + * ldfile.c (ldfile_add_library_path): If + ENABLE_POISON_SYSTEM_DIRECTORIES defined, warn for use of /lib, + /usr/lib, /usr/local/lib or /usr/X11R6/lib. + +Signed-off-by: Mark Hatle +Signed-off-by: Scott Garman +--- + ld/config.in | 3 +++ + ld/configure | 14 ++++++++++++++ + ld/configure.ac | 10 ++++++++++ + ld/ld.h | 8 ++++++++ + ld/ld.texi | 12 ++++++++++++ + ld/ldfile.c | 17 +++++++++++++++++ + ld/ldlex.h | 2 ++ + ld/ldmain.c | 2 ++ + ld/lexsup.c | 21 +++++++++++++++++++++ + 9 files changed, 89 insertions(+) + +diff --git a/ld/config.in b/ld/config.in +index d93c9b0830..5da2742bea 100644 +--- a/ld/config.in ++++ b/ld/config.in +@@ -31,6 +31,9 @@ + language is requested. */ + #undef ENABLE_NLS + ++/* Define to warn for use of native system library directories */ ++#undef ENABLE_POISON_SYSTEM_DIRECTORIES ++ + /* Additional extension a shared object might have. */ + #undef EXTRA_SHLIB_EXTENSION + +diff --git a/ld/configure b/ld/configure +index d55a6a779f..7e5314d24a 100755 +--- a/ld/configure ++++ b/ld/configure +@@ -826,6 +826,7 @@ with_lib_path + enable_targets + enable_64_bit_bfd + with_sysroot ++enable_poison_system_directories + enable_gold + enable_got + enable_compressed_debug_sections +@@ -1491,6 +1492,8 @@ Optional Features: + --disable-largefile omit support for large files + --enable-targets alternative target configurations + --enable-64-bit-bfd 64-bit support (on hosts with narrower word sizes) ++ --enable-poison-system-directories ++ warn for use of native system library directories + --enable-gold[=ARG] build gold [ARG={default,yes,no}] + --enable-got= GOT handling scheme (target, single, negative, + multigot) +@@ -15809,7 +15812,18 @@ else + fi + + ++# Check whether --enable-poison-system-directories was given. ++if test "${enable_poison_system_directories+set}" = set; then : ++ enableval=$enable_poison_system_directories; ++else ++ enable_poison_system_directories=no ++fi ++ ++if test "x${enable_poison_system_directories}" = "xyes"; then + ++$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h ++ ++fi + + # Check whether --enable-got was given. + if test "${enable_got+set}" = set; then : +diff --git a/ld/configure.ac b/ld/configure.ac +index b5e849d84a..22e022ec03 100644 +--- a/ld/configure.ac ++++ b/ld/configure.ac +@@ -94,6 +94,16 @@ AC_SUBST(use_sysroot) + AC_SUBST(TARGET_SYSTEM_ROOT) + AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE) + ++AC_ARG_ENABLE([poison-system-directories], ++ AS_HELP_STRING([--enable-poison-system-directories], ++ [warn for use of native system library directories]),, ++ [enable_poison_system_directories=no]) ++if test "x${enable_poison_system_directories}" = "xyes"; then ++ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES], ++ [1], ++ [Define to warn for use of native system library directories]) ++fi ++ + dnl Use --enable-gold to decide if this linker should be the default. + dnl "install_as_default" is set to false if gold is the default linker. + dnl "installed_linker" is the installed BFD linker name. +diff --git a/ld/ld.h b/ld/ld.h +index 71fd781267..5c7843100b 100644 +--- a/ld/ld.h ++++ b/ld/ld.h +@@ -166,6 +166,14 @@ typedef struct + in the linker script. */ + bfd_boolean force_group_allocation; + ++ /* If TRUE (the default) warn for uses of system directories when ++ cross linking. */ ++ bfd_boolean poison_system_directories; ++ ++ /* If TRUE (default FALSE) give an error for uses of system ++ directories when cross linking instead of a warning. */ ++ bfd_boolean error_poison_system_directories; ++ + /* Big or little endian as set on command line. */ + enum endian_enum endian; + +diff --git a/ld/ld.texi b/ld/ld.texi +index eb7bcb9933..3c73d445a0 100644 +--- a/ld/ld.texi ++++ b/ld/ld.texi +@@ -2551,6 +2551,18 @@ string identifying the original linked file does not change. + + Passing @code{none} for @var{style} disables the setting from any + @code{--build-id} options earlier on the command line. ++ ++@kindex --no-poison-system-directories ++@item --no-poison-system-directories ++Do not warn for @option{-L} options using system directories such as ++@file{/usr/lib} when cross linking. This option is intended for use ++in chroot environments when such directories contain the correct ++libraries for the target system rather than the host. ++ ++@kindex --error-poison-system-directories ++@item --error-poison-system-directories ++Give an error instead of a warning for @option{-L} options using ++system directories when cross linking. + @end table + + @c man end +diff --git a/ld/ldfile.c b/ld/ldfile.c +index 411f7ddf97..17db16c2cc 100644 +--- a/ld/ldfile.c ++++ b/ld/ldfile.c +@@ -117,6 +117,23 @@ ldfile_add_library_path (const char *name, bfd_boolean cmdline) + new_dirs->name = concat (ld_sysroot, name + strlen ("$SYSROOT"), (const char *) NULL); + else + new_dirs->name = xstrdup (name); ++ ++#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES ++ if (command_line.poison_system_directories ++ && ((!strncmp (name, "/lib", 4)) ++ || (!strncmp (name, "/usr/lib", 8)) ++ || (!strncmp (name, "/usr/local/lib", 14)) ++ || (!strncmp (name, "/usr/X11R6/lib", 14)))) ++ { ++ if (command_line.error_poison_system_directories) ++ einfo (_("%X%P: error: library search path \"%s\" is unsafe for " ++ "cross-compilation\n"), name); ++ else ++ einfo (_("%P: warning: library search path \"%s\" is unsafe for " ++ "cross-compilation\n"), name); ++ } ++#endif ++ + } + + /* Try to open a BFD for a lang_input_statement. */ +diff --git a/ld/ldlex.h b/ld/ldlex.h +index 5287f19a7f..55096e4fc9 100644 +--- a/ld/ldlex.h ++++ b/ld/ldlex.h +@@ -150,6 +150,8 @@ enum option_values + OPTION_FORCE_GROUP_ALLOCATION, + OPTION_PRINT_MAP_DISCARDED, + OPTION_NO_PRINT_MAP_DISCARDED, ++ OPTION_NO_POISON_SYSTEM_DIRECTORIES, ++ OPTION_ERROR_POISON_SYSTEM_DIRECTORIES, + }; + + /* The initial parser states. */ +diff --git a/ld/ldmain.c b/ld/ldmain.c +index c4af10f4e9..95b56b2d2d 100644 +--- a/ld/ldmain.c ++++ b/ld/ldmain.c +@@ -273,6 +273,8 @@ main (int argc, char **argv) + command_line.warn_mismatch = TRUE; + command_line.warn_search_mismatch = TRUE; + command_line.check_section_addresses = -1; ++ command_line.poison_system_directories = TRUE; ++ command_line.error_poison_system_directories = FALSE; + + /* We initialize DEMANGLING based on the environment variable + COLLECT_NO_DEMANGLE. The gcc collect2 program will demangle the +diff --git a/ld/lexsup.c b/ld/lexsup.c +index 3d15cc491d..54f52dc72f 100644 +--- a/ld/lexsup.c ++++ b/ld/lexsup.c +@@ -550,6 +550,14 @@ static const struct ld_option ld_options[] = + { {"no-print-map-discarded", no_argument, NULL, OPTION_NO_PRINT_MAP_DISCARDED}, + '\0', NULL, N_("Do not show discarded sections in map file output"), + TWO_DASHES }, ++ { {"no-poison-system-directories", no_argument, NULL, ++ OPTION_NO_POISON_SYSTEM_DIRECTORIES}, ++ '\0', NULL, N_("Do not warn for -L options using system directories"), ++ TWO_DASHES }, ++ { {"error-poison-system-directories", no_argument, NULL, ++ OPTION_ERROR_POISON_SYSTEM_DIRECTORIES}, ++ '\0', NULL, N_("Give an error for -L options using system directories"), ++ TWO_DASHES }, + }; + + #define OPTION_COUNT ARRAY_SIZE (ld_options) +@@ -562,6 +570,7 @@ parse_args (unsigned argc, char **argv) + int ingroup = 0; + char *default_dirlist = NULL; + char *shortopts; ++ char *BR_paranoid_env; + struct option *longopts; + struct option *really_longopts; + int last_optind; +@@ -1562,6 +1571,14 @@ parse_args (unsigned argc, char **argv) + } + break; + ++ case OPTION_NO_POISON_SYSTEM_DIRECTORIES: ++ command_line.poison_system_directories = FALSE; ++ break; ++ ++ case OPTION_ERROR_POISON_SYSTEM_DIRECTORIES: ++ command_line.error_poison_system_directories = TRUE; ++ break; ++ + case OPTION_PUSH_STATE: + input_flags.pushed = xmemdup (&input_flags, + sizeof (input_flags), +@@ -1613,6 +1630,10 @@ parse_args (unsigned argc, char **argv) + command_line.soname = NULL; + } + ++ BR_paranoid_env = getenv("BR_COMPILER_PARANOID_UNSAFE_PATH"); ++ if (BR_paranoid_env && strlen(BR_paranoid_env) > 0) ++ command_line.error_poison_system_directories = TRUE; ++ + while (ingroup) + { + einfo (_("%P: missing --end-group; added as last command line option\n")); +-- +2.24.1 + diff --git a/package/binutils/2.34/0003-or1k-Fix-issue-with-plt-link-failure-for-local-calls.patch b/package/binutils/2.34/0003-or1k-Fix-issue-with-plt-link-failure-for-local-calls.patch new file mode 100644 index 00000000..bc0ef2b2 --- /dev/null +++ b/package/binutils/2.34/0003-or1k-Fix-issue-with-plt-link-failure-for-local-calls.patch @@ -0,0 +1,59 @@ +From 651c3617a04a1d1f78e89623b81be7ba32ff59a5 Mon Sep 17 00:00:00 2001 +From: Stafford Horne +Date: Sun, 2 May 2021 06:02:14 +0900 +Subject: [PATCH] or1k: Fix issue with plt link failure for local calls + +When building protobuf we were seeing the assert failure: + + /home/giuliobenetti/git/upstream/or1k-binutils-2.36.1/host/lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: + BFD (GNU Binutils) 2.36.1 assertion fail elf32-or1k.c:2377 + /home/giuliobenetti/git/upstream/or1k-binutils-2.36.1/host/lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: + BFD (GNU Binutils) 2.36.1 assertion fail elf32-or1k.c:2377 + /home/giuliobenetti/git/upstream/or1k-binutils-2.36.1/host/lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: + BFD (GNU Binutils) 2.36.1 assertion fail elf32-or1k.c:2377 + collect2: error: ld returned 1 exit status + +This failure happens while writing out PLT entries, there is a check +"BFD_ASSERT (h->dynindx != -1)" to confirm all plt entries have dynamic +symbol attributes. This was failing for symbols that were +"forced_local" in previous linking code. + +The fix adds logic to or1k_elf_adjust_dynamic_symbol to identify +"forced_local" symbols and exclude them from the the PLT. + +bfd/ChangeLog: + + PR 27624 + * elf32-or1k.c (or1k_elf_adjust_dynamic_symbol): Change + condition used to cleanup plt entries to cleanup forced local + entries. + +Cc: Giulio Benetti +Signed-off-by: Giulio Benetti +--- + bfd/elf32-or1k.c | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index 31ef758a926..58246875546 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -2535,11 +2535,10 @@ or1k_elf_adjust_dynamic_symbol (struct bfd_link_info *info, + if (h->type == STT_FUNC + || h->needs_plt) + { +- if (! bfd_link_pic (info) +- && !h->def_dynamic +- && !h->ref_dynamic +- && h->root.type != bfd_link_hash_undefweak +- && h->root.type != bfd_link_hash_undefined) ++ if (h->plt.refcount <= 0 ++ || (SYMBOL_CALLS_LOCAL (info, h) ++ || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT ++ && h->root.type == bfd_link_hash_undefweak))) + { + /* This case can occur if we saw a PLT reloc in an input + file, but the symbol was never referred to by a dynamic +-- +2.25.1 + diff --git a/package/binutils/2.34/0004-or1k-Implement-relocation-R_OR1K_GOT_AHI16-for-gotha.patch b/package/binutils/2.34/0004-or1k-Implement-relocation-R_OR1K_GOT_AHI16-for-gotha.patch new file mode 100644 index 00000000..5edef90e --- /dev/null +++ b/package/binutils/2.34/0004-or1k-Implement-relocation-R_OR1K_GOT_AHI16-for-gotha.patch @@ -0,0 +1,256 @@ +From 5fb945116ba058eb8f032f94ab2e0c71024388ec Mon Sep 17 00:00:00 2001 +From: Stafford Horne +Date: Sun, 2 May 2021 06:02:15 +0900 +Subject: [PATCH] or1k: Implement relocation R_OR1K_GOT_AHI16 for gotha() + +The gotha() relocation mnemonic will be outputted by OpenRISC GCC when +using the -mcmodel=large option. This relocation is used along with +got() to generate 32-bit GOT offsets. This increases the previous GOT +offset limit from the previous 16-bit (64K) limit. + +This is needed on large binaries where the GOT grows larger than 64k. + +bfd/ChangeLog: + + PR 21464 + * bfd-in2.h: Add BFD_RELOC_OR1K_GOT_AHI16 relocation. + * elf32-or1k.c (or1k_elf_howto_table, or1k_reloc_map): Likewise. + (or1k_final_link_relocate, or1k_elf_relocate_section, + or1k_elf_check_relocs): Likewise. + * libbfd.h (bfd_reloc_code_real_names): Likewise. + * reloc.c: Likewise. + +cpu/ChangeLog: + + PR 21464 + * or1k.opc (or1k_imm16_relocs, parse_reloc): Define parse logic + for gotha() relocation. + +include/ChangeLog: + + PR 21464 + * elf/or1k.h (elf_or1k_reloc_type): Define R_OR1K_GOT_AHI16 number. + +opcodes/ChangeLog: + + PR 21464 + * or1k-asm.c: Regenerate. + +gas/ChangeLog: + + PR 21464 + * testsuite/gas/or1k/reloc-1.s: Add test for new relocation. + * testsuite/gas/or1k/reloc-1.d: Add test result for new + relocation. + +Cc: Giulio Benetti + +fixup reloc, add tests + +Signed-off-by: Giulio Benetti +--- + bfd/bfd-in2.h | 1 + + bfd/elf32-or1k.c | 21 ++++++++++++++++++++- + bfd/libbfd.h | 1 + + bfd/reloc.c | 2 ++ + cpu/or1k.opc | 7 ++++++- + gas/testsuite/gas/or1k/reloc-1.d | 4 +++- + gas/testsuite/gas/or1k/reloc-1.s | 4 ++++ + include/elf/or1k.h | 1 + + opcodes/or1k-asm.c | 7 ++++++- + 9 files changed, 44 insertions(+), 4 deletions(-) + +diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h +index 7c13bc8c91a..ae1082a67c2 100644 +--- a/bfd/bfd-in2.h ++++ b/bfd/bfd-in2.h +@@ -5017,6 +5017,7 @@ then it may be truncated to 8 bits. */ + BFD_RELOC_OR1K_TLS_TPOFF, + BFD_RELOC_OR1K_TLS_DTPOFF, + BFD_RELOC_OR1K_TLS_DTPMOD, ++ BFD_RELOC_OR1K_GOT_AHI16, + + /* H8 elf Relocations. */ + BFD_RELOC_H8_DIR16A8, +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index 58246875546..1273fbacb3c 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -808,6 +808,20 @@ static reloc_howto_type or1k_elf_howto_table[] = + 0, /* Source Mask. */ + 0x03ffffff, /* Dest Mask. */ + TRUE), /* PC relative offset? */ ++ ++ HOWTO (R_OR1K_GOT_AHI16, /* type */ ++ 16, /* rightshift */ ++ 2, /* size (0 = byte, 1 = short, 2 = long) */ ++ 16, /* bitsize */ ++ FALSE, /* pc_relative */ ++ 0, /* bitpos */ ++ complain_overflow_signed, /* complain_on_overflow */ ++ bfd_elf_generic_reloc, /* special_function */ ++ "R_OR1K_GOT_AHI16", /* name */ ++ FALSE, /* partial_inplace */ ++ 0, /* src_mask */ ++ 0xffff, /* dst_mask */ ++ FALSE), /* pcrel_offset */ + }; + + /* Map BFD reloc types to Or1k ELF reloc types. */ +@@ -871,6 +885,7 @@ static const struct or1k_reloc_map or1k_reloc_map[] = + { BFD_RELOC_OR1K_TLS_IE_LO13, R_OR1K_TLS_IE_LO13 }, + { BFD_RELOC_OR1K_SLO13, R_OR1K_SLO13 }, + { BFD_RELOC_OR1K_PLTA26, R_OR1K_PLTA26 }, ++ { BFD_RELOC_OR1K_GOT_AHI16, R_OR1K_GOT_AHI16 }, + }; + + #define TLS_UNKNOWN 0 +@@ -1080,6 +1095,7 @@ or1k_final_link_relocate (reloc_howto_type *howto, bfd *input_bfd, + switch (howto->type) + { + case R_OR1K_AHI16: ++ case R_OR1K_GOT_AHI16: + case R_OR1K_GOTOFF_AHI16: + case R_OR1K_TLS_IE_AHI16: + case R_OR1K_TLS_LE_AHI16: +@@ -1344,6 +1360,7 @@ or1k_elf_relocate_section (bfd *output_bfd, + } + break; + ++ case R_OR1K_GOT_AHI16: + case R_OR1K_GOT16: + case R_OR1K_GOT_PG21: + case R_OR1K_GOT_LO13: +@@ -1435,7 +1452,8 @@ or1k_elf_relocate_section (bfd *output_bfd, + /* The GOT_PG21 and GOT_LO13 relocs are pc-relative, + while the GOT16 reloc is GOT relative. */ + relocation = got_base + off; +- if (r_type == R_OR1K_GOT16) ++ if (r_type == R_OR1K_GOT16 ++ || r_type == R_OR1K_GOT_AHI16) + relocation -= got_sym_value; + + /* Addend should be zero. */ +@@ -1943,6 +1961,7 @@ or1k_elf_check_relocs (bfd *abfd, + } + break; + ++ case R_OR1K_GOT_AHI16: + case R_OR1K_GOT16: + case R_OR1K_GOT_PG21: + case R_OR1K_GOT_LO13: +diff --git a/bfd/libbfd.h b/bfd/libbfd.h +index d97d4e57a77..9edc71e0558 100644 +--- a/bfd/libbfd.h ++++ b/bfd/libbfd.h +@@ -2704,6 +2704,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", + "BFD_RELOC_OR1K_TLS_TPOFF", + "BFD_RELOC_OR1K_TLS_DTPOFF", + "BFD_RELOC_OR1K_TLS_DTPMOD", ++ "BFD_RELOC_OR1K_GOT_AHI16", + "BFD_RELOC_H8_DIR16A8", + "BFD_RELOC_H8_DIR16R8", + "BFD_RELOC_H8_DIR24A8", +diff --git a/bfd/reloc.c b/bfd/reloc.c +index 33cd67150cf..f57ad14a501 100644 +--- a/bfd/reloc.c ++++ b/bfd/reloc.c +@@ -6175,6 +6175,8 @@ ENUMX + BFD_RELOC_OR1K_GOTPC_HI16 + ENUMX + BFD_RELOC_OR1K_GOTPC_LO16 ++ENUMX ++ BFD_RELOC_OR1K_GOT_AHI16 + ENUMX + BFD_RELOC_OR1K_GOT16 + ENUMX +diff --git a/cpu/or1k.opc b/cpu/or1k.opc +index f0adcbb00a5..5d20a1f33a7 100644 +--- a/cpu/or1k.opc ++++ b/cpu/or1k.opc +@@ -193,7 +193,7 @@ static const bfd_reloc_code_real_type or1k_imm16_relocs[][6] = { + BFD_RELOC_OR1K_GOT_LO13, + BFD_RELOC_UNUSED, + BFD_RELOC_UNUSED, +- BFD_RELOC_UNUSED }, ++ BFD_RELOC_OR1K_GOT_AHI16 }, + { BFD_RELOC_OR1K_GOTPC_LO16, + BFD_RELOC_UNUSED, + BFD_RELOC_UNUSED, +@@ -296,6 +296,11 @@ parse_reloc (const char **strp) + str += 5; + cls = RCLASS_TPOFF; + } ++ else if (strncasecmp (str, "got", 3) == 0) ++ { ++ str += 3; ++ cls = RCLASS_GOT; ++ } + + if (strncasecmp (str, "hi(", 3) == 0) + { +diff --git a/gas/testsuite/gas/or1k/reloc-1.d b/gas/testsuite/gas/or1k/reloc-1.d +index d1bcf5608bb..3a001c4ed99 100644 +--- a/gas/testsuite/gas/or1k/reloc-1.d ++++ b/gas/testsuite/gas/or1k/reloc-1.d +@@ -68,5 +68,7 @@ OFFSET TYPE VALUE + 000000ec R_OR1K_LO13 x + 000000f0 R_OR1K_GOT_LO13 x + 000000f4 R_OR1K_SLO13 x +- ++000000f8 R_OR1K_GOT_AHI16 x ++000000fc R_OR1K_GOT_AHI16 x ++00000100 R_OR1K_GOT_AHI16 x + +diff --git a/gas/testsuite/gas/or1k/reloc-1.s b/gas/testsuite/gas/or1k/reloc-1.s +index e76abef6532..562609aa869 100644 +--- a/gas/testsuite/gas/or1k/reloc-1.s ++++ b/gas/testsuite/gas/or1k/reloc-1.s +@@ -74,3 +74,7 @@ + l.lbz r5,po(x)(r3) + l.lbz r5,gotpo(x)(r3) + l.sb po(x)(r3),r6 ++ ++ l.movhi r4,gotha(x) ++ l.ori r3,r4,gotha(x) ++ l.addi r3,r4,gotha(x) +diff --git a/include/elf/or1k.h b/include/elf/or1k.h +index a215ef5c17e..dff37d875f2 100644 +--- a/include/elf/or1k.h ++++ b/include/elf/or1k.h +@@ -77,6 +77,7 @@ START_RELOC_NUMBERS (elf_or1k_reloc_type) + RELOC_NUMBER (R_OR1K_TLS_IE_LO13, 51) + RELOC_NUMBER (R_OR1K_SLO13, 52) + RELOC_NUMBER (R_OR1K_PLTA26, 53) ++ RELOC_NUMBER (R_OR1K_GOT_AHI16, 54) + END_RELOC_NUMBERS (R_OR1K_max) + + #define EF_OR1K_NODELAY (1UL << 0) +diff --git a/opcodes/or1k-asm.c b/opcodes/or1k-asm.c +index 4715c4f2826..a72a4e85363 100644 +--- a/opcodes/or1k-asm.c ++++ b/opcodes/or1k-asm.c +@@ -177,7 +177,7 @@ static const bfd_reloc_code_real_type or1k_imm16_relocs[][6] = { + BFD_RELOC_OR1K_GOT_LO13, + BFD_RELOC_UNUSED, + BFD_RELOC_UNUSED, +- BFD_RELOC_UNUSED }, ++ BFD_RELOC_OR1K_GOT_AHI16 }, + { BFD_RELOC_OR1K_GOTPC_LO16, + BFD_RELOC_UNUSED, + BFD_RELOC_UNUSED, +@@ -280,6 +280,11 @@ parse_reloc (const char **strp) + str += 5; + cls = RCLASS_TPOFF; + } ++ else if (strncasecmp (str, "got", 3) == 0) ++ { ++ str += 3; ++ cls = RCLASS_GOT; ++ } + + if (strncasecmp (str, "hi(", 3) == 0) + { +-- +2.25.1 + diff --git a/package/binutils/2.34/0005-or1k-Avoid-R_OR1K_GOT16-overflow-failures-in-presenc.patch b/package/binutils/2.34/0005-or1k-Avoid-R_OR1K_GOT16-overflow-failures-in-presenc.patch new file mode 100644 index 00000000..e292c9cb --- /dev/null +++ b/package/binutils/2.34/0005-or1k-Avoid-R_OR1K_GOT16-overflow-failures-in-presenc.patch @@ -0,0 +1,61 @@ +From d92116c7df340ff40063c5c97d202e7e87400027 Mon Sep 17 00:00:00 2001 +From: Stafford Horne +Date: Sun, 2 May 2021 06:02:16 +0900 +Subject: [PATCH] or1k: Avoid R_OR1K_GOT16 overflow failures in presence of + R_OR1K_GOT_AHI16 + +Now that we support R_OR1K_GOT_AHI16 we can relax the R_OR1K_GOT16 +overflow validation check if the section has R_OR1K_GOT_AHI16. + +We cannot simple disable R_OR1K_GOT16 overflow validation as there will +still be binaries that will have only R_OR1K_GOT16. The +R_OR1K_GOT_AHI16 relocation will only be added by GCC when building with +the option -mcmodel=large. + +This assumes that R_OR1K_GOT_AHI16 will come before R_OR1K_GOT16, which +is the code pattern that will be emitted by GCC. + +bfd/ChangeLog: + + PR 21464 + * elf32-or1k.c (or1k_elf_relocate_section): Relax R_OR1K_GOT16 + overflow check if we have R_OR1K_GOT_AHI16 followed by + R_OR1K_GOT16. + +Signed-off-by: Giulio Benetti +--- + bfd/elf32-or1k.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index 1273fbacb3c..ce2c4fdb3bd 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -1248,6 +1248,7 @@ or1k_elf_relocate_section (bfd *output_bfd, + asection *sgot, *splt; + bfd_vma plt_base, got_base, got_sym_value; + bfd_boolean ret_val = TRUE; ++ bfd_boolean saw_gotha = FALSE; + + if (htab == NULL) + return FALSE; +@@ -1456,6 +1457,16 @@ or1k_elf_relocate_section (bfd *output_bfd, + || r_type == R_OR1K_GOT_AHI16) + relocation -= got_sym_value; + ++ if (r_type == R_OR1K_GOT_AHI16) ++ saw_gotha = TRUE; ++ ++ /* If we have a R_OR1K_GOT16 followed by a R_OR1K_GOT_AHI16 ++ relocation we assume the code is doing the right thing to avoid ++ overflows. Here we mask the lower 16-bit of the relocation to ++ avoid overflow validation failures. */ ++ if (r_type == R_OR1K_GOT16 && saw_gotha) ++ relocation &= 0xffff; ++ + /* Addend should be zero. */ + if (rel->r_addend != 0) + { +-- +2.25.1 + diff --git a/package/binutils/2.34/0006-or1k-Support-large-plt_relocs-when-generating-plt-en.patch b/package/binutils/2.34/0006-or1k-Support-large-plt_relocs-when-generating-plt-en.patch new file mode 100644 index 00000000..d6695d41 --- /dev/null +++ b/package/binutils/2.34/0006-or1k-Support-large-plt_relocs-when-generating-plt-en.patch @@ -0,0 +1,500 @@ +From cba29e387040eaa401c52eb20e7cab5a4401185c Mon Sep 17 00:00:00 2001 +From: Stafford Horne +Date: Sun, 2 May 2021 06:02:17 +0900 +Subject: [PATCH] or1k: Support large plt_relocs when generating plt + entries + +The current PLT generation code will generate invalid code when the PLT +relocation offset exceeds 64k. This fixes the issue by detecting large +plt_reloc offsets and generare code sequences to create larger plt +relocations. + +The "large" plt code needs 2 extra instructions to create 32-bit offsets. + +bfd/ChangeLog: + + PR 27746 + * elf32-or1k.c (PLT_ENTRY_SIZE_LARGE, PLT_MAX_INSN_COUNT, + OR1K_ADD, OR1K_ORI): New macros to help with plt creation. + (elf_or1k_link_hash_table): New field plt_count. + (elf_or1k_link_hash_entry): New field plt_index. + (elf_or1k_plt_entry_size): New function. + (or1k_write_plt_entry): Update to support variable size PLTs. + (or1k_elf_finish_dynamic_sections): Use new or1k_write_plt_entry + API. + (or1k_elf_finish_dynamic_symbol): Update to write large PLTs + when needed. + (allocate_dynrelocs): Use elf_or1k_plt_entry_size to account for + PLT size. + +ld/ChangeLog: + + PR 27746 + testsuite/ld-or1k/or1k.exp (or1kplttests): Add tests for linking + along with gotha() relocations. + testsuite/ld-or1k/gotha1.dd: New file. + testsuite/ld-or1k/gotha1.s: New file. + testsuite/ld-or1k/gotha2.dd: New file. + testsuite/ld-or1k/gotha2.s: New file + testsuite/ld-or1k/pltlib.s (x): Define size to avoid link + failure. + +Signed-off-by: Giulio Benetti +--- + bfd/elf32-or1k.c | 149 ++++++++++++++++++++++++--------- + ld/testsuite/ld-or1k/gotha1.dd | 34 ++++++++ + ld/testsuite/ld-or1k/gotha1.s | 24 ++++++ + ld/testsuite/ld-or1k/gotha2.dd | 21 +++++ + ld/testsuite/ld-or1k/gotha2.s | 22 +++++ + ld/testsuite/ld-or1k/or1k.exp | 8 ++ + ld/testsuite/ld-or1k/pltlib.s | 1 + + 7 files changed, 220 insertions(+), 39 deletions(-) + create mode 100644 ld/testsuite/ld-or1k/gotha1.dd + create mode 100644 ld/testsuite/ld-or1k/gotha1.s + create mode 100644 ld/testsuite/ld-or1k/gotha2.dd + create mode 100644 ld/testsuite/ld-or1k/gotha2.s + +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index ce2c4fdb3bd..8b021b79d92 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -30,10 +30,14 @@ + #define N_ONES(X) (((bfd_vma)2 << (X)) - 1) + + #define PLT_ENTRY_SIZE 16 ++#define PLT_ENTRY_SIZE_LARGE (6*4) ++#define PLT_MAX_INSN_COUNT 6 + + #define OR1K_MOVHI(D) (0x18000000 | (D << 21)) + #define OR1K_ADRP(D) (0x08000000 | (D << 21)) + #define OR1K_LWZ(D,A) (0x84000000 | (D << 21) | (A << 16)) ++#define OR1K_ADD(D,A,B) (0xE0000000 | (D << 21) | (A << 16) | (B << 11)) ++#define OR1K_ORI(D,A) (0xA8000000 | (D << 21) | (A << 16)) + #define OR1K_ORI0(D) (0xA8000000 | (D << 21)) + #define OR1K_JR(B) (0x44000000 | (B << 11)) + #define OR1K_NOP 0x15000000 +@@ -903,6 +907,8 @@ struct elf_or1k_link_hash_entry + /* Track dynamic relocs copied for this symbol. */ + struct elf_dyn_relocs *dyn_relocs; + ++ /* For calculating PLT size. */ ++ bfd_vma plt_index; + /* Track type of TLS access. */ + unsigned char tls_type; + }; +@@ -930,9 +936,20 @@ struct elf_or1k_link_hash_table + /* Small local sym to section mapping cache. */ + struct sym_cache sym_sec; + ++ bfd_vma plt_count; + bfd_boolean saw_plta; + }; + ++static size_t ++elf_or1k_plt_entry_size (bfd_vma plt_index) ++{ ++ bfd_vma plt_reloc; ++ ++ plt_reloc = plt_index * sizeof (Elf32_External_Rela); ++ ++ return (plt_reloc > 0xffff) ? PLT_ENTRY_SIZE_LARGE : PLT_ENTRY_SIZE; ++} ++ + /* Get the ELF linker hash table from a link_info structure. */ + #define or1k_elf_hash_table(p) \ + (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ +@@ -2173,33 +2190,46 @@ or1k_elf_check_relocs (bfd *abfd, + } + + static void +-or1k_write_plt_entry (bfd *output_bfd, bfd_byte *contents, unsigned insn1, +- unsigned insn2, unsigned insn3, unsigned insnj) ++or1k_write_plt_entry (bfd *output_bfd, bfd_byte *contents, unsigned insnj, ++ unsigned insns[], size_t insn_count) + { + unsigned nodelay = elf_elfheader (output_bfd)->e_flags & EF_OR1K_NODELAY; +- unsigned insn4; ++ unsigned output_insns[PLT_MAX_INSN_COUNT]; ++ ++ /* Copy instructions into the output buffer. */ ++ for (size_t i = 0; i < insn_count; i++) ++ output_insns[i] = insns[i]; + + /* Honor the no-delay-slot setting. */ +- if (insn3 == OR1K_NOP) ++ if (insns[insn_count-1] == OR1K_NOP) + { +- insn4 = insn3; ++ unsigned slot1, slot2; ++ + if (nodelay) +- insn3 = insnj; ++ slot1 = insns[insn_count-2], slot2 = insnj; + else +- insn3 = insn2, insn2 = insnj; ++ slot1 = insnj, slot2 = insns[insn_count-2]; ++ ++ output_insns[insn_count-2] = slot1; ++ output_insns[insn_count-1] = slot2; ++ output_insns[insn_count] = OR1K_NOP; + } + else + { ++ unsigned slot1, slot2; ++ + if (nodelay) +- insn4 = insnj; ++ slot1 = insns[insn_count-1], slot2 = insnj; + else +- insn4 = insn3, insn3 = insnj; ++ slot1 = insnj, slot2 = insns[insn_count-1]; ++ ++ output_insns[insn_count-1] = slot1; ++ output_insns[insn_count] = slot2; + } + +- bfd_put_32 (output_bfd, insn1, contents); +- bfd_put_32 (output_bfd, insn2, contents + 4); +- bfd_put_32 (output_bfd, insn3, contents + 8); +- bfd_put_32 (output_bfd, insn4, contents + 12); ++ /* Write out the output buffer. */ ++ for (size_t i = 0; i < (insn_count+1); i++) ++ bfd_put_32 (output_bfd, output_insns[i], contents + (i*4)); + } + + /* Finish up the dynamic sections. */ +@@ -2266,7 +2296,8 @@ or1k_elf_finish_dynamic_sections (bfd *output_bfd, + splt = htab->root.splt; + if (splt && splt->size > 0) + { +- unsigned plt0, plt1, plt2; ++ unsigned plt[PLT_MAX_INSN_COUNT]; ++ size_t plt_insn_count = 3; + bfd_vma got_addr = sgot->output_section->vma + sgot->output_offset; + + /* Note we force 16 byte alignment on the .got, so that +@@ -2277,27 +2308,27 @@ or1k_elf_finish_dynamic_sections (bfd *output_bfd, + bfd_vma pc = splt->output_section->vma + splt->output_offset; + unsigned pa = ((got_addr >> 13) - (pc >> 13)) & 0x1fffff; + unsigned po = got_addr & 0x1fff; +- plt0 = OR1K_ADRP(12) | pa; +- plt1 = OR1K_LWZ(15,12) | (po + 8); +- plt2 = OR1K_LWZ(12,12) | (po + 4); ++ plt[0] = OR1K_ADRP(12) | pa; ++ plt[1] = OR1K_LWZ(15,12) | (po + 8); ++ plt[2] = OR1K_LWZ(12,12) | (po + 4); + } + else if (bfd_link_pic (info)) + { +- plt0 = OR1K_LWZ(15, 16) | 8; /* .got+8 */ +- plt1 = OR1K_LWZ(12, 16) | 4; /* .got+4 */ +- plt2 = OR1K_NOP; ++ plt[0] = OR1K_LWZ(15, 16) | 8; /* .got+8 */ ++ plt[1] = OR1K_LWZ(12, 16) | 4; /* .got+4 */ ++ plt[2] = OR1K_NOP; + } + else + { + unsigned ha = ((got_addr + 0x8000) >> 16) & 0xffff; + unsigned lo = got_addr & 0xffff; +- plt0 = OR1K_MOVHI(12) | ha; +- plt1 = OR1K_LWZ(15,12) | (lo + 8); +- plt2 = OR1K_LWZ(12,12) | (lo + 4); ++ plt[0] = OR1K_MOVHI(12) | ha; ++ plt[1] = OR1K_LWZ(15,12) | (lo + 8); ++ plt[2] = OR1K_LWZ(12,12) | (lo + 4); + } + +- or1k_write_plt_entry (output_bfd, splt->contents, +- plt0, plt1, plt2, OR1K_JR(15)); ++ or1k_write_plt_entry (output_bfd, splt->contents, OR1K_JR(15), ++ plt, plt_insn_count); + + elf_section_data (splt->output_section)->this_hdr.sh_entsize = 4; + } +@@ -2340,7 +2371,8 @@ or1k_elf_finish_dynamic_symbol (bfd *output_bfd, + + if (h->plt.offset != (bfd_vma) -1) + { +- unsigned int plt0, plt1, plt2; ++ unsigned int plt[PLT_MAX_INSN_COUNT]; ++ size_t plt_insn_count = 3; + asection *splt; + asection *sgot; + asection *srela; +@@ -2352,6 +2384,7 @@ or1k_elf_finish_dynamic_symbol (bfd *output_bfd, + bfd_vma got_offset; + bfd_vma got_addr; + Elf_Internal_Rela rela; ++ bfd_boolean large_plt_entry; + + /* This symbol has an entry in the procedure linkage table. Set + it up. */ +@@ -2369,10 +2402,13 @@ or1k_elf_finish_dynamic_symbol (bfd *output_bfd, + corresponds to this symbol. This is the index of this symbol + in all the symbols for which we are making plt entries. The + first entry in the procedure linkage table is reserved. */ +- plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1; ++ plt_index = ((struct elf_or1k_link_hash_entry *) h)->plt_index; + plt_addr = plt_base_addr + h->plt.offset; + plt_reloc = plt_index * sizeof (Elf32_External_Rela); + ++ large_plt_entry = (elf_or1k_plt_entry_size (plt_index) ++ == PLT_ENTRY_SIZE_LARGE); ++ + /* Get the offset into the .got table of the entry that + corresponds to this function. Each .got entry is 4 bytes. + The first three are reserved. */ +@@ -2384,27 +2420,57 @@ or1k_elf_finish_dynamic_symbol (bfd *output_bfd, + { + unsigned pa = ((got_addr >> 13) - (plt_addr >> 13)) & 0x1fffff; + unsigned po = (got_addr & 0x1fff); +- plt0 = OR1K_ADRP(12) | pa; +- plt1 = OR1K_LWZ(12,12) | po; +- plt2 = OR1K_ORI0(11) | plt_reloc; ++ plt[0] = OR1K_ADRP(12) | pa; ++ plt[1] = OR1K_LWZ(12,12) | po; ++ plt[2] = OR1K_ORI0(11) | plt_reloc; + } + else if (bfd_link_pic (info)) + { +- plt0 = OR1K_LWZ(12,16) | got_offset; +- plt1 = OR1K_ORI0(11) | plt_reloc; +- plt2 = OR1K_NOP; ++ if (large_plt_entry) ++ { ++ unsigned gotha = ((got_offset + 0x8000) >> 16) & 0xffff; ++ unsigned got = got_offset & 0xffff; ++ unsigned pltrelhi = (plt_reloc >> 16) & 0xffff; ++ unsigned pltrello = plt_reloc & 0xffff; ++ ++ plt[0] = OR1K_MOVHI(12) | gotha; ++ plt[1] = OR1K_ADD(12,12,16); ++ plt[2] = OR1K_LWZ(12,12) | got; ++ plt[3] = OR1K_MOVHI(11) | pltrelhi; ++ plt[4] = OR1K_ORI(11,11) | pltrello; ++ plt_insn_count = 5; ++ } ++ else ++ { ++ plt[0] = OR1K_LWZ(12,16) | got_offset; ++ plt[1] = OR1K_ORI0(11) | plt_reloc; ++ plt[2] = OR1K_NOP; ++ } + } + else + { + unsigned ha = ((got_addr + 0x8000) >> 16) & 0xffff; + unsigned lo = got_addr & 0xffff; +- plt0 = OR1K_MOVHI(12) | ha; +- plt1 = OR1K_LWZ(12,12) | lo; +- plt2 = OR1K_ORI0(11) | plt_reloc; ++ plt[0] = OR1K_MOVHI(12) | ha; ++ plt[1] = OR1K_LWZ(12,12) | lo; ++ plt[2] = OR1K_ORI0(11) | plt_reloc; ++ } ++ ++ /* For large code model we fixup the non-PIC PLT relocation instructions ++ here. */ ++ if (large_plt_entry && !bfd_link_pic (info)) ++ { ++ unsigned pltrelhi = (plt_reloc >> 16) & 0xffff; ++ unsigned pltrello = plt_reloc & 0xffff; ++ ++ plt[2] = OR1K_MOVHI(11) | pltrelhi; ++ plt[3] = OR1K_ORI(11,11) | pltrello; ++ plt[4] = OR1K_NOP; ++ plt_insn_count = 5; + } + + or1k_write_plt_entry (output_bfd, splt->contents + h->plt.offset, +- plt0, plt1, plt2, OR1K_JR(12)); ++ OR1K_JR(12), plt, plt_insn_count); + + /* Fill in the entry in the global offset table. We initialize it to + point to the top of the plt. This is done to lazy lookup the actual +@@ -2699,11 +2765,16 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h)) + { + asection *s = htab->root.splt; ++ bfd_vma plt_index; ++ ++ /* Track the index of our plt entry for use in calculating size. */ ++ plt_index = htab->plt_count++; ++ ((struct elf_or1k_link_hash_entry *) h)->plt_index = plt_index; + + /* If this is the first .plt entry, make room for the special + first entry. */ + if (s->size == 0) +- s->size = PLT_ENTRY_SIZE; ++ s->size = elf_or1k_plt_entry_size (plt_index); + + h->plt.offset = s->size; + +@@ -2720,7 +2791,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) + } + + /* Make room for this entry. */ +- s->size += PLT_ENTRY_SIZE; ++ s->size += elf_or1k_plt_entry_size (plt_index); + + /* We also need to make an entry in the .got.plt section, which + will be placed in the .got section by the linker script. */ +diff --git a/ld/testsuite/ld-or1k/gotha1.dd b/ld/testsuite/ld-or1k/gotha1.dd +new file mode 100644 +index 00000000000..0ad1f8f5399 +--- /dev/null ++++ b/ld/testsuite/ld-or1k/gotha1.dd +@@ -0,0 +1,34 @@ ++ ++.*\.x: file format elf32-or1k ++ ++ ++Disassembly of section \.plt: ++ ++[0-9a-f]+ <\.plt>: ++ +[0-9a-f]+: 19 80 00 00 l\.movhi r12,0x0 ++ +[0-9a-f]+: 85 ec [0-9a-f]+ [0-9a-f]+ l\.lwz r15,[0-9]+\(r12\) ++ +[0-9a-f]+: 44 00 78 00 l\.jr r15 ++ +[0-9a-f]+: 85 8c [0-9a-f]+ [0-9a-f]+ l\.lwz r12,[0-9]+\(r12\) ++ +[0-9a-f]+: 19 80 00 00 l\.movhi r12,0x0 ++ +[0-9a-f]+: 85 8c [0-9a-f]+ [0-9a-f]+ l\.lwz r12,[0-9]+\(r12\) ++ +[0-9a-f]+: 44 00 60 00 l\.jr r12 ++ +[0-9a-f]+: a9 60 00 00 l\.ori r11,r0,0x0 ++ ++Disassembly of section \.text: ++ ++[0-9a-f]+ <_start>: ++ +[0-9a-f]+: 9c 21 ff fc l\.addi r1,r1,-4 ++ +[0-9a-f]+: d4 01 48 00 l\.sw 0\(r1\),r9 ++ +[0-9a-f]+: 04 00 00 02 l\.jal [0-9a-f]+ <_start\+0x10> ++ +[0-9a-f]+: 1a 60 00 00 l\.movhi r19,0x0 ++ +[0-9a-f]+: aa 73 [0-9a-f]+ [0-9a-f]+ l\.ori r19,r19,0x[0-9a-f]+ ++ +[0-9a-f]+: e2 73 48 00 l\.add r19,r19,r9 ++ +[0-9a-f]+: 1a 20 00 00 l\.movhi r17,0x0 ++ +[0-9a-f]+: e2 31 98 00 l\.add r17,r17,r19 ++ +[0-9a-f]+: 86 31 00 10 l\.lwz r17,16\(r17\) ++ +[0-9a-f]+: 84 71 00 00 l\.lwz r3,0\(r17\) ++ +[0-9a-f]+: 07 ff ff f2 l\.jal [0-9a-f]+ <\.plt\+0x10> ++ +[0-9a-f]+: 15 00 00 00 l\.nop 0x0 ++ +[0-9a-f]+: 85 21 00 00 l\.lwz r9,0\(r1\) ++ +[0-9a-f]+: 44 00 48 00 l\.jr r9 ++ +[0-9a-f]+: 9c 21 00 04 l\.addi r1,r1,4 +diff --git a/ld/testsuite/ld-or1k/gotha1.s b/ld/testsuite/ld-or1k/gotha1.s +new file mode 100644 +index 00000000000..42b16db425c +--- /dev/null ++++ b/ld/testsuite/ld-or1k/gotha1.s +@@ -0,0 +1,24 @@ ++ .data ++ .p2align 16 ++ ++ .text ++ .globl _start ++_start: ++ l.addi r1, r1, -4 ++ l.sw 0(r1), r9 ++ ++ l.jal 8 ++ l.movhi r19, gotpchi(_GLOBAL_OFFSET_TABLE_-4) ++ l.ori r19, r19, gotpclo(_GLOBAL_OFFSET_TABLE_+0) ++ l.add r19, r19, r9 ++ ++ l.movhi r17, gotha(x) ++ l.add r17, r17, r19 ++ l.lwz r17, got(x)(r17) ++ l.lwz r3, 0(r17) ++ ++ l.jal plt(func) ++ l.nop ++ l.lwz r9, 0(r1) ++ l.jr r9 ++ l.addi r1, r1, 4 +diff --git a/ld/testsuite/ld-or1k/gotha2.dd b/ld/testsuite/ld-or1k/gotha2.dd +new file mode 100644 +index 00000000000..fe09da5466b +--- /dev/null ++++ b/ld/testsuite/ld-or1k/gotha2.dd +@@ -0,0 +1,21 @@ ++ ++.*\.x: file format elf32-or1k ++ ++ ++Disassembly of section \.text: ++ ++[0-9a-f]+ : ++ +[0-9a-f]+: 9c 21 ff f8 l\.addi r1,r1,-8 ++ +[0-9a-f]+: d4 01 80 00 l\.sw 0\(r1\),r16 ++ +[0-9a-f]+: d4 01 48 04 l\.sw 4\(r1\),r9 ++ +[0-9a-f]+: 04 00 [0-9a-f]+ [0-9a-f]+ l\.jal [0-9a-f]+ ++ +[0-9a-f]+: 1a 00 00 00 l\.movhi r16,0x0 ++ +[0-9a-f]+: aa 10 [0-9a-f]+ [0-9a-f]+ l\.ori r16,r16,0x[0-9a-f]+ ++ +[0-9a-f]+: e2 10 48 00 l\.add r16,r16,r9 ++ +[0-9a-f]+: 1a 20 00 00 l\.movhi r17,0x0 ++ +[0-9a-f]+: e2 31 80 00 l\.add r17,r17,r16 ++ +[0-9a-f]+: 86 31 00 0c l\.lwz r17,12\(r17\) ++ +[0-9a-f]+: 85 21 00 04 l\.lwz r9,4\(r1\) ++ +[0-9a-f]+: 86 01 00 00 l\.lwz r16,0\(r1\) ++ +[0-9a-f]+: 44 00 48 00 l\.jr r9 ++ +[0-9a-f]+: 9c 21 00 08 l\.addi r1,r1,8 +diff --git a/ld/testsuite/ld-or1k/gotha2.s b/ld/testsuite/ld-or1k/gotha2.s +new file mode 100644 +index 00000000000..164b282f2dd +--- /dev/null ++++ b/ld/testsuite/ld-or1k/gotha2.s +@@ -0,0 +1,22 @@ ++ .section .text ++ .align 4 ++ .global test ++ .type test, @function ++test: ++ l.addi r1, r1, -8 ++ l.sw 0(r1), r16 ++ l.sw 4(r1), r9 ++ ++ l.jal 8 ++ l.movhi r16, gotpchi(_GLOBAL_OFFSET_TABLE_-4) ++ l.ori r16, r16, gotpclo(_GLOBAL_OFFSET_TABLE_+0) ++ l.add r16, r16, r9 ++ ++ l.movhi r17, gotha(i) ++ l.add r17, r17, r16 ++ l.lwz r17, got(i)(r17) ++ ++ l.lwz r9, 4(r1) ++ l.lwz r16, 0(r1) ++ l.jr r9 ++ l.addi r1, r1, 8 +diff --git a/ld/testsuite/ld-or1k/or1k.exp b/ld/testsuite/ld-or1k/or1k.exp +index 7592e8307c1..8e19ec6c31a 100644 +--- a/ld/testsuite/ld-or1k/or1k.exp ++++ b/ld/testsuite/ld-or1k/or1k.exp +@@ -53,6 +53,14 @@ set or1kplttests { + "" {plt1.s} + {{objdump -dr plt1.x.dd}} + "plt1.x"} ++ {"gotha exec plt" "tmpdir/libpltlib.so" "" ++ "" {gotha1.s} ++ {{objdump -dr gotha1.dd}} ++ "gotha1.x"} ++ {"gotha -fpic -shared" "-fpic -shared" "" ++ "" {gotha2.s} ++ {{objdump -dr gotha2.dd}} ++ "gotha2.x"} + } + + # Not implemented yet +diff --git a/ld/testsuite/ld-or1k/pltlib.s b/ld/testsuite/ld-or1k/pltlib.s +index baf76ca1af7..8b4d7ba48fd 100644 +--- a/ld/testsuite/ld-or1k/pltlib.s ++++ b/ld/testsuite/ld-or1k/pltlib.s +@@ -1,5 +1,6 @@ + .section .data + .globl x, y ++ .size x, 4 + x: .long 33 + y: .long 44 + +-- +2.25.1 + diff --git a/package/binutils/2.34/0007-bfd-elf32-or1k-fix-building-with-gcc-version-5.patch b/package/binutils/2.34/0007-bfd-elf32-or1k-fix-building-with-gcc-version-5.patch new file mode 100644 index 00000000..c3978e22 --- /dev/null +++ b/package/binutils/2.34/0007-bfd-elf32-or1k-fix-building-with-gcc-version-5.patch @@ -0,0 +1,50 @@ +From c3003947e4bad18faea4337fd2073feeb30ee078 Mon Sep 17 00:00:00 2001 +From: Giulio Benetti +Date: Wed, 9 Jun 2021 17:28:27 +0200 +Subject: [PATCH] bfd/elf32-or1k: fix building with gcc version < 5 + +Gcc version >= 5 has standard C mode not set to -std=gnu11, so if we use +an old compiler(i.e. gcc 4.9) build fails on: +``` +elf32-or1k.c:2251:3: error: 'for' loop initial declarations are only allowed in +C99 or C11 mode + for (size_t i = 0; i < insn_count; i++) + ^ +``` + +So let's declare `size_t i` at the top of the function instead of inside +for loop. + +Signed-off-by: Giulio Benetti +--- + bfd/elf32-or1k.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index 4ae7f324d33..32063ab0289 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -2244,9 +2244,10 @@ or1k_write_plt_entry (bfd *output_bfd, bfd_byte *contents, unsigned insnj, + { + unsigned nodelay = elf_elfheader (output_bfd)->e_flags & EF_OR1K_NODELAY; + unsigned output_insns[PLT_MAX_INSN_COUNT]; ++ size_t i; + + /* Copy instructions into the output buffer. */ +- for (size_t i = 0; i < insn_count; i++) ++ for (i = 0; i < insn_count; i++) + output_insns[i] = insns[i]; + + /* Honor the no-delay-slot setting. */ +@@ -2277,7 +2278,7 @@ or1k_write_plt_entry (bfd *output_bfd, bfd_byte *contents, unsigned insnj, + } + + /* Write out the output buffer. */ +- for (size_t i = 0; i < (insn_count+1); i++) ++ for (i = 0; i < (insn_count+1); i++) + bfd_put_32 (output_bfd, output_insns[i], contents + (i*4)); + } + +-- +2.25.1 + diff --git a/package/binutils/2.34/0008-or1k-fix-pc-relative-relocation-against-dynamic-on-P.patch b/package/binutils/2.34/0008-or1k-fix-pc-relative-relocation-against-dynamic-on-P.patch new file mode 100644 index 00000000..585b97b2 --- /dev/null +++ b/package/binutils/2.34/0008-or1k-fix-pc-relative-relocation-against-dynamic-on-P.patch @@ -0,0 +1,59 @@ +From 9af93e143a7fbdb75aa1ed37277f9250eb111628 Mon Sep 17 00:00:00 2001 +From: Giulio Benetti +Date: Sat, 10 Jul 2021 17:57:34 +0200 +Subject: [PATCH] or1k: fix pc-relative relocation against dynamic on PC + relative 26 bit relocation + +When building openal we were seeing the assert failure: + +/home/buildroot/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: CMakeFiles/OpenAL.dir/al/source.cpp.o: +pc-relative relocation against dynamic symbol alSourcePausev +/home/buildroot/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: CMakeFiles/OpenAL.dir/al/source.cpp.o: +pc-relative relocation against dynamic symbol alSourceStopv +/home/buildroot/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: CMakeFiles/OpenAL.dir/al/source.cpp.o: +pc-relative relocation against dynamic symbol alSourceRewindv +/home/buildroot/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: CMakeFiles/OpenAL.dir/al/source.cpp.o: +pc-relative relocation against dynamic symbol alSourcePlayv +collect2: error: ld returned 1 exit status + +This happens because in R_OR1K_INSN_REL_26 case we can't reference local +symbol as previously done but we need to make sure that calls to actual +symbol always call the version of current object. + +bfd/Changelog: + + * elf32-or1k.c (or1k_elf_relocate_section): use a separate entry + in switch case R_OR1K_INSN_REL_26 where we need to check for + !SYMBOL_CALLS_LOCAL() instead of !SYMBOL_REFERENCES_LOCAL(). + +Signed-off-by: Giulio Benetti +--- + bfd/elf32-or1k.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index 4ae7f324d33..4f9092539f5 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -1543,6 +1543,18 @@ or1k_elf_relocate_section (bfd *output_bfd, + break; + + case R_OR1K_INSN_REL_26: ++ /* For a non-shared link, these will reference plt or call the ++ version of actual object. */ ++ if (bfd_link_pic (info) && !SYMBOL_CALLS_LOCAL (info, h)) ++ { ++ _bfd_error_handler ++ (_("%pB: pc-relative relocation against dynamic symbol %s"), ++ input_bfd, name); ++ ret_val = FALSE; ++ bfd_set_error (bfd_error_bad_value); ++ } ++ break; ++ + case R_OR1K_PCREL_PG21: + case R_OR1K_LO13: + case R_OR1K_SLO13: +-- +2.25.1 + diff --git a/package/binutils/2.35.2/0001-sh-conf.patch b/package/binutils/2.35.2/0001-sh-conf.patch new file mode 100644 index 00000000..44d5f4e8 --- /dev/null +++ b/package/binutils/2.35.2/0001-sh-conf.patch @@ -0,0 +1,48 @@ +From ae50e875f4292c99b859cded1d036e401b6ddaec Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Fri, 25 Dec 2015 11:38:13 +0100 +Subject: [PATCH] sh-conf + +Likewise, binutils has no idea about any of these new targets either, so we +fix that up too.. now we're able to actually build a real toolchain for +sh2a_nofpu- and other more ineptly named toolchains (and yes, there are more +inept targets than that one, really. Go look, I promise). + +[Romain: rebase on top of 2.32] +Signed-off-by: Romain Naour +[Thomas: rebase on top of 2.29, in which sh64 support was removed.] +Signed-off-by: Thomas Petazzoni +--- + configure | 2 +- + configure.ac | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/configure b/configure +index 54d0339ab9e..c2f51ffcebb 100755 +--- a/configure ++++ b/configure +@@ -3937,7 +3937,7 @@ case "${target}" in + nvptx*-*-*) + noconfigdirs="$noconfigdirs target-libssp target-libstdc++-v3 target-libobjc" + ;; +- sh-*-*) ++ sh*-*-*) + case "${target}" in + sh*-*-elf) + ;; +diff --git a/configure.ac b/configure.ac +index a910c4fd6ba..a93d93c81c3 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1178,7 +1178,7 @@ case "${target}" in + nvptx*-*-*) + noconfigdirs="$noconfigdirs target-libssp target-libstdc++-v3 target-libobjc" + ;; +- sh-*-*) ++ sh*-*-*) + case "${target}" in + sh*-*-elf) + ;; +-- +2.25.4 + diff --git a/package/binutils/2.35.2/0002-poison-system-directories.patch b/package/binutils/2.35.2/0002-poison-system-directories.patch new file mode 100644 index 00000000..b77a5e1a --- /dev/null +++ b/package/binutils/2.35.2/0002-poison-system-directories.patch @@ -0,0 +1,306 @@ +From db405d1bc5607892ddb25433354b46d78e23b343 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Fri, 25 Dec 2015 11:45:38 +0100 +Subject: [PATCH] poison-system-directories + +Patch adapted to binutils 2.23.2 and extended to use +BR_COMPILER_PARANOID_UNSAFE_PATH by Thomas Petazzoni. + +[Romain: rebase on top of 2.33.1] +Signed-off-by: Romain Naour +[Gustavo: adapt to binutils 2.25] +Signed-off-by: Thomas Petazzoni +Signed-off-by: Gustavo Zacarias + +Upstream-Status: Inappropriate [distribution: codesourcery] + +Patch originally created by Mark Hatle, forward-ported to +binutils 2.21 by Scott Garman. + +purpose: warn for uses of system directories when cross linking + +Code Merged from Sourcery G++ binutils 2.19 - 4.4-277 + +2008-07-02 Joseph Myers + + ld/ + * ld.h (args_type): Add error_poison_system_directories. + * ld.texinfo (--error-poison-system-directories): Document. + * ldfile.c (ldfile_add_library_path): Check + command_line.error_poison_system_directories. + * ldmain.c (main): Initialize + command_line.error_poison_system_directories. + * lexsup.c (enum option_values): Add + OPTION_ERROR_POISON_SYSTEM_DIRECTORIES. + (ld_options): Add --error-poison-system-directories. + (parse_args): Handle new option. + +2007-06-13 Joseph Myers + + ld/ + * config.in: Regenerate. + * ld.h (args_type): Add poison_system_directories. + * ld.texinfo (--no-poison-system-directories): Document. + * ldfile.c (ldfile_add_library_path): Check + command_line.poison_system_directories. + * ldmain.c (main): Initialize + command_line.poison_system_directories. + * lexsup.c (enum option_values): Add + OPTION_NO_POISON_SYSTEM_DIRECTORIES. + (ld_options): Add --no-poison-system-directories. + (parse_args): Handle new option. + +2007-04-20 Joseph Myers + + Merge from Sourcery G++ binutils 2.17: + + 2007-03-20 Joseph Myers + Based on patch by Mark Hatle . + ld/ + * configure.ac (--enable-poison-system-directories): New option. + * configure, config.in: Regenerate. + * ldfile.c (ldfile_add_library_path): If + ENABLE_POISON_SYSTEM_DIRECTORIES defined, warn for use of /lib, + /usr/lib, /usr/local/lib or /usr/X11R6/lib. + +Signed-off-by: Mark Hatle +Signed-off-by: Scott Garman +--- + ld/config.in | 3 +++ + ld/configure | 14 ++++++++++++++ + ld/configure.ac | 10 ++++++++++ + ld/ld.h | 8 ++++++++ + ld/ld.texi | 12 ++++++++++++ + ld/ldfile.c | 17 +++++++++++++++++ + ld/ldlex.h | 2 ++ + ld/ldmain.c | 2 ++ + ld/lexsup.c | 21 +++++++++++++++++++++ + 9 files changed, 89 insertions(+) + +diff --git a/ld/config.in b/ld/config.in +index 2f4e5ea33e3..8fbb29682b2 100644 +--- a/ld/config.in ++++ b/ld/config.in +@@ -40,6 +40,9 @@ + language is requested. */ + #undef ENABLE_NLS + ++/* Define to warn for use of native system library directories */ ++#undef ENABLE_POISON_SYSTEM_DIRECTORIES ++ + /* Additional extension a shared object might have. */ + #undef EXTRA_SHLIB_EXTENSION + +diff --git a/ld/configure b/ld/configure +index 6be5280621f..d62e7b12382 100755 +--- a/ld/configure ++++ b/ld/configure +@@ -826,6 +826,7 @@ with_lib_path + enable_targets + enable_64_bit_bfd + with_sysroot ++enable_poison_system_directories + enable_gold + enable_got + enable_compressed_debug_sections +@@ -1493,6 +1494,8 @@ Optional Features: + --disable-largefile omit support for large files + --enable-targets alternative target configurations + --enable-64-bit-bfd 64-bit support (on hosts with narrower word sizes) ++ --enable-poison-system-directories ++ warn for use of native system library directories + --enable-gold[=ARG] build gold [ARG={default,yes,no}] + --enable-got= GOT handling scheme (target, single, negative, + multigot) +@@ -15814,7 +15817,18 @@ else + fi + + ++# Check whether --enable-poison-system-directories was given. ++if test "${enable_poison_system_directories+set}" = set; then : ++ enableval=$enable_poison_system_directories; ++else ++ enable_poison_system_directories=no ++fi ++ ++if test "x${enable_poison_system_directories}" = "xyes"; then + ++$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h ++ ++fi + + # Check whether --enable-got was given. + if test "${enable_got+set}" = set; then : +diff --git a/ld/configure.ac b/ld/configure.ac +index 172398ff847..b77f8510ca6 100644 +--- a/ld/configure.ac ++++ b/ld/configure.ac +@@ -94,6 +94,16 @@ AC_SUBST(use_sysroot) + AC_SUBST(TARGET_SYSTEM_ROOT) + AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE) + ++AC_ARG_ENABLE([poison-system-directories], ++ AS_HELP_STRING([--enable-poison-system-directories], ++ [warn for use of native system library directories]),, ++ [enable_poison_system_directories=no]) ++if test "x${enable_poison_system_directories}" = "xyes"; then ++ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES], ++ [1], ++ [Define to warn for use of native system library directories]) ++fi ++ + dnl Use --enable-gold to decide if this linker should be the default. + dnl "install_as_default" is set to false if gold is the default linker. + dnl "installed_linker" is the installed BFD linker name. +diff --git a/ld/ld.h b/ld/ld.h +index 1790dc81a66..73f832eb169 100644 +--- a/ld/ld.h ++++ b/ld/ld.h +@@ -166,6 +166,14 @@ typedef struct + in the linker script. */ + bfd_boolean force_group_allocation; + ++ /* If TRUE (the default) warn for uses of system directories when ++ cross linking. */ ++ bfd_boolean poison_system_directories; ++ ++ /* If TRUE (default FALSE) give an error for uses of system ++ directories when cross linking instead of a warning. */ ++ bfd_boolean error_poison_system_directories; ++ + /* Big or little endian as set on command line. */ + enum endian_enum endian; + +diff --git a/ld/ld.texi b/ld/ld.texi +index 2a93e9456ac..3eeb70607fd 100644 +--- a/ld/ld.texi ++++ b/ld/ld.texi +@@ -2655,6 +2655,18 @@ string identifying the original linked file does not change. + + Passing @code{none} for @var{style} disables the setting from any + @code{--build-id} options earlier on the command line. ++ ++@kindex --no-poison-system-directories ++@item --no-poison-system-directories ++Do not warn for @option{-L} options using system directories such as ++@file{/usr/lib} when cross linking. This option is intended for use ++in chroot environments when such directories contain the correct ++libraries for the target system rather than the host. ++ ++@kindex --error-poison-system-directories ++@item --error-poison-system-directories ++Give an error instead of a warning for @option{-L} options using ++system directories when cross linking. + @end table + + @c man end +diff --git a/ld/ldfile.c b/ld/ldfile.c +index e39170b5d94..fadc248a140 100644 +--- a/ld/ldfile.c ++++ b/ld/ldfile.c +@@ -117,6 +117,23 @@ ldfile_add_library_path (const char *name, bfd_boolean cmdline) + new_dirs->name = concat (ld_sysroot, name + strlen ("$SYSROOT"), (const char *) NULL); + else + new_dirs->name = xstrdup (name); ++ ++#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES ++ if (command_line.poison_system_directories ++ && ((!strncmp (name, "/lib", 4)) ++ || (!strncmp (name, "/usr/lib", 8)) ++ || (!strncmp (name, "/usr/local/lib", 14)) ++ || (!strncmp (name, "/usr/X11R6/lib", 14)))) ++ { ++ if (command_line.error_poison_system_directories) ++ einfo (_("%X%P: error: library search path \"%s\" is unsafe for " ++ "cross-compilation\n"), name); ++ else ++ einfo (_("%P: warning: library search path \"%s\" is unsafe for " ++ "cross-compilation\n"), name); ++ } ++#endif ++ + } + + /* Try to open a BFD for a lang_input_statement. */ +diff --git a/ld/ldlex.h b/ld/ldlex.h +index 5ea083ebeb3..417f9b858ce 100644 +--- a/ld/ldlex.h ++++ b/ld/ldlex.h +@@ -155,6 +155,8 @@ enum option_values + OPTION_NON_CONTIGUOUS_REGIONS, + OPTION_NON_CONTIGUOUS_REGIONS_WARNINGS, + OPTION_DEPENDENCY_FILE, ++ OPTION_NO_POISON_SYSTEM_DIRECTORIES, ++ OPTION_ERROR_POISON_SYSTEM_DIRECTORIES, + }; + + /* The initial parser states. */ +diff --git a/ld/ldmain.c b/ld/ldmain.c +index 08be9030cb5..92dc16399eb 100644 +--- a/ld/ldmain.c ++++ b/ld/ldmain.c +@@ -321,6 +321,8 @@ main (int argc, char **argv) + command_line.warn_mismatch = TRUE; + command_line.warn_search_mismatch = TRUE; + command_line.check_section_addresses = -1; ++ command_line.poison_system_directories = TRUE; ++ command_line.error_poison_system_directories = FALSE; + + /* We initialize DEMANGLING based on the environment variable + COLLECT_NO_DEMANGLE. The gcc collect2 program will demangle the +diff --git a/ld/lexsup.c b/ld/lexsup.c +index 6cab41cf5df..c497f36b148 100644 +--- a/ld/lexsup.c ++++ b/ld/lexsup.c +@@ -572,6 +572,14 @@ static const struct ld_option ld_options[] = + { {"no-print-map-discarded", no_argument, NULL, OPTION_NO_PRINT_MAP_DISCARDED}, + '\0', NULL, N_("Do not show discarded sections in map file output"), + TWO_DASHES }, ++ { {"no-poison-system-directories", no_argument, NULL, ++ OPTION_NO_POISON_SYSTEM_DIRECTORIES}, ++ '\0', NULL, N_("Do not warn for -L options using system directories"), ++ TWO_DASHES }, ++ { {"error-poison-system-directories", no_argument, NULL, ++ OPTION_ERROR_POISON_SYSTEM_DIRECTORIES}, ++ '\0', NULL, N_("Give an error for -L options using system directories"), ++ TWO_DASHES }, + }; + + #define OPTION_COUNT ARRAY_SIZE (ld_options) +@@ -584,6 +592,7 @@ parse_args (unsigned argc, char **argv) + int ingroup = 0; + char *default_dirlist = NULL; + char *shortopts; ++ char *BR_paranoid_env; + struct option *longopts; + struct option *really_longopts; + int last_optind; +@@ -1591,6 +1600,14 @@ parse_args (unsigned argc, char **argv) + } + break; + ++ case OPTION_NO_POISON_SYSTEM_DIRECTORIES: ++ command_line.poison_system_directories = FALSE; ++ break; ++ ++ case OPTION_ERROR_POISON_SYSTEM_DIRECTORIES: ++ command_line.error_poison_system_directories = TRUE; ++ break; ++ + case OPTION_PUSH_STATE: + input_flags.pushed = xmemdup (&input_flags, + sizeof (input_flags), +@@ -1681,6 +1698,10 @@ parse_args (unsigned argc, char **argv) + command_line.soname = NULL; + } + ++ BR_paranoid_env = getenv("BR_COMPILER_PARANOID_UNSAFE_PATH"); ++ if (BR_paranoid_env && strlen(BR_paranoid_env) > 0) ++ command_line.error_poison_system_directories = TRUE; ++ + while (ingroup) + { + einfo (_("%P: missing --end-group; added as last command line option\n")); +-- +2.25.4 + diff --git a/package/binutils/2.35.2/0003-or1k-Fix-issue-with-plt-link-failure-for-local-calls.patch b/package/binutils/2.35.2/0003-or1k-Fix-issue-with-plt-link-failure-for-local-calls.patch new file mode 100644 index 00000000..81fb6b85 --- /dev/null +++ b/package/binutils/2.35.2/0003-or1k-Fix-issue-with-plt-link-failure-for-local-calls.patch @@ -0,0 +1,59 @@ +From baf313f84b106a5a29f01796afd857e69abf8b08 Mon Sep 17 00:00:00 2001 +From: Stafford Horne +Date: Sun, 2 May 2021 06:02:14 +0900 +Subject: [PATCH] or1k: Fix issue with plt link failure for local calls + +When building protobuf we were seeing the assert failure: + + /home/giuliobenetti/git/upstream/or1k-binutils-2.36.1/host/lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: + BFD (GNU Binutils) 2.36.1 assertion fail elf32-or1k.c:2377 + /home/giuliobenetti/git/upstream/or1k-binutils-2.36.1/host/lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: + BFD (GNU Binutils) 2.36.1 assertion fail elf32-or1k.c:2377 + /home/giuliobenetti/git/upstream/or1k-binutils-2.36.1/host/lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: + BFD (GNU Binutils) 2.36.1 assertion fail elf32-or1k.c:2377 + collect2: error: ld returned 1 exit status + +This failure happens while writing out PLT entries, there is a check +"BFD_ASSERT (h->dynindx != -1)" to confirm all plt entries have dynamic +symbol attributes. This was failing for symbols that were +"forced_local" in previous linking code. + +The fix adds logic to or1k_elf_adjust_dynamic_symbol to identify +"forced_local" symbols and exclude them from the the PLT. + +bfd/ChangeLog: + + PR 27624 + * elf32-or1k.c (or1k_elf_adjust_dynamic_symbol): Change + condition used to cleanup plt entries to cleanup forced local + entries. + +Cc: Giulio Benetti +Signed-off-by: Giulio Benetti +--- + bfd/elf32-or1k.c | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index 7c02d004cc7..bbfa2bfe614 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -2568,11 +2568,10 @@ or1k_elf_adjust_dynamic_symbol (struct bfd_link_info *info, + if (h->type == STT_FUNC + || h->needs_plt) + { +- if (! bfd_link_pic (info) +- && !h->def_dynamic +- && !h->ref_dynamic +- && h->root.type != bfd_link_hash_undefweak +- && h->root.type != bfd_link_hash_undefined) ++ if (h->plt.refcount <= 0 ++ || (SYMBOL_CALLS_LOCAL (info, h) ++ || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT ++ && h->root.type == bfd_link_hash_undefweak))) + { + /* This case can occur if we saw a PLT reloc in an input + file, but the symbol was never referred to by a dynamic +-- +2.25.1 + diff --git a/package/binutils/2.35.2/0004-or1k-Implement-relocation-R_OR1K_GOT_AHI16-for-gotha.patch b/package/binutils/2.35.2/0004-or1k-Implement-relocation-R_OR1K_GOT_AHI16-for-gotha.patch new file mode 100644 index 00000000..a4af57d5 --- /dev/null +++ b/package/binutils/2.35.2/0004-or1k-Implement-relocation-R_OR1K_GOT_AHI16-for-gotha.patch @@ -0,0 +1,256 @@ +From c67656e248d6dadaa2729975a17c8dd03afe48d0 Mon Sep 17 00:00:00 2001 +From: Stafford Horne +Date: Sun, 2 May 2021 06:02:15 +0900 +Subject: [PATCH] or1k: Implement relocation R_OR1K_GOT_AHI16 for gotha() + +The gotha() relocation mnemonic will be outputted by OpenRISC GCC when +using the -mcmodel=large option. This relocation is used along with +got() to generate 32-bit GOT offsets. This increases the previous GOT +offset limit from the previous 16-bit (64K) limit. + +This is needed on large binaries where the GOT grows larger than 64k. + +bfd/ChangeLog: + + PR 21464 + * bfd-in2.h: Add BFD_RELOC_OR1K_GOT_AHI16 relocation. + * elf32-or1k.c (or1k_elf_howto_table, or1k_reloc_map): Likewise. + (or1k_final_link_relocate, or1k_elf_relocate_section, + or1k_elf_check_relocs): Likewise. + * libbfd.h (bfd_reloc_code_real_names): Likewise. + * reloc.c: Likewise. + +cpu/ChangeLog: + + PR 21464 + * or1k.opc (or1k_imm16_relocs, parse_reloc): Define parse logic + for gotha() relocation. + +include/ChangeLog: + + PR 21464 + * elf/or1k.h (elf_or1k_reloc_type): Define R_OR1K_GOT_AHI16 number. + +opcodes/ChangeLog: + + PR 21464 + * or1k-asm.c: Regenerate. + +gas/ChangeLog: + + PR 21464 + * testsuite/gas/or1k/reloc-1.s: Add test for new relocation. + * testsuite/gas/or1k/reloc-1.d: Add test result for new + relocation. + +Cc: Giulio Benetti + +fixup reloc, add tests + +Signed-off-by: Giulio Benetti +--- + bfd/bfd-in2.h | 1 + + bfd/elf32-or1k.c | 21 ++++++++++++++++++++- + bfd/libbfd.h | 1 + + bfd/reloc.c | 2 ++ + cpu/or1k.opc | 7 ++++++- + gas/testsuite/gas/or1k/reloc-1.d | 4 +++- + gas/testsuite/gas/or1k/reloc-1.s | 4 ++++ + include/elf/or1k.h | 1 + + opcodes/or1k-asm.c | 7 ++++++- + 9 files changed, 44 insertions(+), 4 deletions(-) + +diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h +index df6f9f45673..ab861395e93 100644 +--- a/bfd/bfd-in2.h ++++ b/bfd/bfd-in2.h +@@ -5041,6 +5041,7 @@ then it may be truncated to 8 bits. */ + BFD_RELOC_OR1K_TLS_TPOFF, + BFD_RELOC_OR1K_TLS_DTPOFF, + BFD_RELOC_OR1K_TLS_DTPMOD, ++ BFD_RELOC_OR1K_GOT_AHI16, + + /* H8 elf Relocations. */ + BFD_RELOC_H8_DIR16A8, +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index bbfa2bfe614..8e395827123 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -808,6 +808,20 @@ static reloc_howto_type or1k_elf_howto_table[] = + 0, /* Source Mask. */ + 0x03ffffff, /* Dest Mask. */ + TRUE), /* PC relative offset? */ ++ ++ HOWTO (R_OR1K_GOT_AHI16, /* type */ ++ 16, /* rightshift */ ++ 2, /* size (0 = byte, 1 = short, 2 = long) */ ++ 16, /* bitsize */ ++ FALSE, /* pc_relative */ ++ 0, /* bitpos */ ++ complain_overflow_signed, /* complain_on_overflow */ ++ bfd_elf_generic_reloc, /* special_function */ ++ "R_OR1K_GOT_AHI16", /* name */ ++ FALSE, /* partial_inplace */ ++ 0, /* src_mask */ ++ 0xffff, /* dst_mask */ ++ FALSE), /* pcrel_offset */ + }; + + /* Map BFD reloc types to Or1k ELF reloc types. */ +@@ -871,6 +885,7 @@ static const struct or1k_reloc_map or1k_reloc_map[] = + { BFD_RELOC_OR1K_TLS_IE_LO13, R_OR1K_TLS_IE_LO13 }, + { BFD_RELOC_OR1K_SLO13, R_OR1K_SLO13 }, + { BFD_RELOC_OR1K_PLTA26, R_OR1K_PLTA26 }, ++ { BFD_RELOC_OR1K_GOT_AHI16, R_OR1K_GOT_AHI16 }, + }; + + /* tls_type is a mask used to track how each symbol is accessed, +@@ -1113,6 +1128,7 @@ or1k_final_link_relocate (reloc_howto_type *howto, bfd *input_bfd, + switch (howto->type) + { + case R_OR1K_AHI16: ++ case R_OR1K_GOT_AHI16: + case R_OR1K_GOTOFF_AHI16: + case R_OR1K_TLS_IE_AHI16: + case R_OR1K_TLS_LE_AHI16: +@@ -1375,6 +1391,7 @@ or1k_elf_relocate_section (bfd *output_bfd, + } + break; + ++ case R_OR1K_GOT_AHI16: + case R_OR1K_GOT16: + case R_OR1K_GOT_PG21: + case R_OR1K_GOT_LO13: +@@ -1466,7 +1483,8 @@ or1k_elf_relocate_section (bfd *output_bfd, + /* The GOT_PG21 and GOT_LO13 relocs are pc-relative, + while the GOT16 reloc is GOT relative. */ + relocation = got_base + off; +- if (r_type == R_OR1K_GOT16) ++ if (r_type == R_OR1K_GOT16 ++ || r_type == R_OR1K_GOT_AHI16) + relocation -= got_sym_value; + + /* Addend should be zero. */ +@@ -1992,6 +2010,7 @@ or1k_elf_check_relocs (bfd *abfd, + } + break; + ++ case R_OR1K_GOT_AHI16: + case R_OR1K_GOT16: + case R_OR1K_GOT_PG21: + case R_OR1K_GOT_LO13: +diff --git a/bfd/libbfd.h b/bfd/libbfd.h +index b97534fc9fe..795c9b9d27f 100644 +--- a/bfd/libbfd.h ++++ b/bfd/libbfd.h +@@ -2755,6 +2755,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", + "BFD_RELOC_OR1K_TLS_TPOFF", + "BFD_RELOC_OR1K_TLS_DTPOFF", + "BFD_RELOC_OR1K_TLS_DTPMOD", ++ "BFD_RELOC_OR1K_GOT_AHI16", + "BFD_RELOC_H8_DIR16A8", + "BFD_RELOC_H8_DIR16R8", + "BFD_RELOC_H8_DIR24A8", +diff --git a/bfd/reloc.c b/bfd/reloc.c +index 9aba84ca81e..1e021febef2 100644 +--- a/bfd/reloc.c ++++ b/bfd/reloc.c +@@ -6175,6 +6175,8 @@ ENUMX + BFD_RELOC_OR1K_GOTPC_HI16 + ENUMX + BFD_RELOC_OR1K_GOTPC_LO16 ++ENUMX ++ BFD_RELOC_OR1K_GOT_AHI16 + ENUMX + BFD_RELOC_OR1K_GOT16 + ENUMX +diff --git a/cpu/or1k.opc b/cpu/or1k.opc +index f0adcbb00a5..5d20a1f33a7 100644 +--- a/cpu/or1k.opc ++++ b/cpu/or1k.opc +@@ -193,7 +193,7 @@ static const bfd_reloc_code_real_type or1k_imm16_relocs[][6] = { + BFD_RELOC_OR1K_GOT_LO13, + BFD_RELOC_UNUSED, + BFD_RELOC_UNUSED, +- BFD_RELOC_UNUSED }, ++ BFD_RELOC_OR1K_GOT_AHI16 }, + { BFD_RELOC_OR1K_GOTPC_LO16, + BFD_RELOC_UNUSED, + BFD_RELOC_UNUSED, +@@ -296,6 +296,11 @@ parse_reloc (const char **strp) + str += 5; + cls = RCLASS_TPOFF; + } ++ else if (strncasecmp (str, "got", 3) == 0) ++ { ++ str += 3; ++ cls = RCLASS_GOT; ++ } + + if (strncasecmp (str, "hi(", 3) == 0) + { +diff --git a/gas/testsuite/gas/or1k/reloc-1.d b/gas/testsuite/gas/or1k/reloc-1.d +index d1bcf5608bb..3a001c4ed99 100644 +--- a/gas/testsuite/gas/or1k/reloc-1.d ++++ b/gas/testsuite/gas/or1k/reloc-1.d +@@ -68,5 +68,7 @@ OFFSET TYPE VALUE + 000000ec R_OR1K_LO13 x + 000000f0 R_OR1K_GOT_LO13 x + 000000f4 R_OR1K_SLO13 x +- ++000000f8 R_OR1K_GOT_AHI16 x ++000000fc R_OR1K_GOT_AHI16 x ++00000100 R_OR1K_GOT_AHI16 x + +diff --git a/gas/testsuite/gas/or1k/reloc-1.s b/gas/testsuite/gas/or1k/reloc-1.s +index e76abef6532..562609aa869 100644 +--- a/gas/testsuite/gas/or1k/reloc-1.s ++++ b/gas/testsuite/gas/or1k/reloc-1.s +@@ -74,3 +74,7 @@ + l.lbz r5,po(x)(r3) + l.lbz r5,gotpo(x)(r3) + l.sb po(x)(r3),r6 ++ ++ l.movhi r4,gotha(x) ++ l.ori r3,r4,gotha(x) ++ l.addi r3,r4,gotha(x) +diff --git a/include/elf/or1k.h b/include/elf/or1k.h +index a215ef5c17e..dff37d875f2 100644 +--- a/include/elf/or1k.h ++++ b/include/elf/or1k.h +@@ -77,6 +77,7 @@ START_RELOC_NUMBERS (elf_or1k_reloc_type) + RELOC_NUMBER (R_OR1K_TLS_IE_LO13, 51) + RELOC_NUMBER (R_OR1K_SLO13, 52) + RELOC_NUMBER (R_OR1K_PLTA26, 53) ++ RELOC_NUMBER (R_OR1K_GOT_AHI16, 54) + END_RELOC_NUMBERS (R_OR1K_max) + + #define EF_OR1K_NODELAY (1UL << 0) +diff --git a/opcodes/or1k-asm.c b/opcodes/or1k-asm.c +index 5f3c6c74b12..e0c49b3b8cd 100644 +--- a/opcodes/or1k-asm.c ++++ b/opcodes/or1k-asm.c +@@ -177,7 +177,7 @@ static const bfd_reloc_code_real_type or1k_imm16_relocs[][6] = { + BFD_RELOC_OR1K_GOT_LO13, + BFD_RELOC_UNUSED, + BFD_RELOC_UNUSED, +- BFD_RELOC_UNUSED }, ++ BFD_RELOC_OR1K_GOT_AHI16 }, + { BFD_RELOC_OR1K_GOTPC_LO16, + BFD_RELOC_UNUSED, + BFD_RELOC_UNUSED, +@@ -280,6 +280,11 @@ parse_reloc (const char **strp) + str += 5; + cls = RCLASS_TPOFF; + } ++ else if (strncasecmp (str, "got", 3) == 0) ++ { ++ str += 3; ++ cls = RCLASS_GOT; ++ } + + if (strncasecmp (str, "hi(", 3) == 0) + { +-- +2.25.1 + diff --git a/package/binutils/2.35.2/0005-or1k-Avoid-R_OR1K_GOT16-overflow-failures-in-presenc.patch b/package/binutils/2.35.2/0005-or1k-Avoid-R_OR1K_GOT16-overflow-failures-in-presenc.patch new file mode 100644 index 00000000..82198dd3 --- /dev/null +++ b/package/binutils/2.35.2/0005-or1k-Avoid-R_OR1K_GOT16-overflow-failures-in-presenc.patch @@ -0,0 +1,61 @@ +From 097b83a1c9c694a14e6081cee034bf24f16875c1 Mon Sep 17 00:00:00 2001 +From: Stafford Horne +Date: Sun, 2 May 2021 06:02:16 +0900 +Subject: [PATCH] or1k: Avoid R_OR1K_GOT16 overflow failures in presence of + R_OR1K_GOT_AHI16 + +Now that we support R_OR1K_GOT_AHI16 we can relax the R_OR1K_GOT16 +overflow validation check if the section has R_OR1K_GOT_AHI16. + +We cannot simple disable R_OR1K_GOT16 overflow validation as there will +still be binaries that will have only R_OR1K_GOT16. The +R_OR1K_GOT_AHI16 relocation will only be added by GCC when building with +the option -mcmodel=large. + +This assumes that R_OR1K_GOT_AHI16 will come before R_OR1K_GOT16, which +is the code pattern that will be emitted by GCC. + +bfd/ChangeLog: + + PR 21464 + * elf32-or1k.c (or1k_elf_relocate_section): Relax R_OR1K_GOT16 + overflow check if we have R_OR1K_GOT_AHI16 followed by + R_OR1K_GOT16. + +Signed-off-by: Giulio Benetti +--- + bfd/elf32-or1k.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index 8e395827123..9f315bfda99 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -1280,6 +1280,7 @@ or1k_elf_relocate_section (bfd *output_bfd, + asection *sgot, *splt; + bfd_vma plt_base, got_base, got_sym_value; + bfd_boolean ret_val = TRUE; ++ bfd_boolean saw_gotha = FALSE; + + if (htab == NULL) + return FALSE; +@@ -1487,6 +1488,16 @@ or1k_elf_relocate_section (bfd *output_bfd, + || r_type == R_OR1K_GOT_AHI16) + relocation -= got_sym_value; + ++ if (r_type == R_OR1K_GOT_AHI16) ++ saw_gotha = TRUE; ++ ++ /* If we have a R_OR1K_GOT16 followed by a R_OR1K_GOT_AHI16 ++ relocation we assume the code is doing the right thing to avoid ++ overflows. Here we mask the lower 16-bit of the relocation to ++ avoid overflow validation failures. */ ++ if (r_type == R_OR1K_GOT16 && saw_gotha) ++ relocation &= 0xffff; ++ + /* Addend should be zero. */ + if (rel->r_addend != 0) + { +-- +2.25.1 + diff --git a/package/binutils/2.35.2/0006-or1k-Support-large-plt_relocs-when-generating-plt-en.patch b/package/binutils/2.35.2/0006-or1k-Support-large-plt_relocs-when-generating-plt-en.patch new file mode 100644 index 00000000..c884ab87 --- /dev/null +++ b/package/binutils/2.35.2/0006-or1k-Support-large-plt_relocs-when-generating-plt-en.patch @@ -0,0 +1,500 @@ +From c87692eb894b4b86eced7b7ba205f9bf27c2c213 Mon Sep 17 00:00:00 2001 +From: Stafford Horne +Date: Sun, 2 May 2021 06:02:17 +0900 +Subject: [PATCH] or1k: Support large plt_relocs when generating plt + entries + +The current PLT generation code will generate invalid code when the PLT +relocation offset exceeds 64k. This fixes the issue by detecting large +plt_reloc offsets and generare code sequences to create larger plt +relocations. + +The "large" plt code needs 2 extra instructions to create 32-bit offsets. + +bfd/ChangeLog: + + PR 27746 + * elf32-or1k.c (PLT_ENTRY_SIZE_LARGE, PLT_MAX_INSN_COUNT, + OR1K_ADD, OR1K_ORI): New macros to help with plt creation. + (elf_or1k_link_hash_table): New field plt_count. + (elf_or1k_link_hash_entry): New field plt_index. + (elf_or1k_plt_entry_size): New function. + (or1k_write_plt_entry): Update to support variable size PLTs. + (or1k_elf_finish_dynamic_sections): Use new or1k_write_plt_entry + API. + (or1k_elf_finish_dynamic_symbol): Update to write large PLTs + when needed. + (allocate_dynrelocs): Use elf_or1k_plt_entry_size to account for + PLT size. + +ld/ChangeLog: + + PR 27746 + testsuite/ld-or1k/or1k.exp (or1kplttests): Add tests for linking + along with gotha() relocations. + testsuite/ld-or1k/gotha1.dd: New file. + testsuite/ld-or1k/gotha1.s: New file. + testsuite/ld-or1k/gotha2.dd: New file. + testsuite/ld-or1k/gotha2.s: New file + testsuite/ld-or1k/pltlib.s (x): Define size to avoid link + failure. + +Signed-off-by: Giulio Benetti +--- + bfd/elf32-or1k.c | 149 ++++++++++++++++++++++++--------- + ld/testsuite/ld-or1k/gotha1.dd | 34 ++++++++ + ld/testsuite/ld-or1k/gotha1.s | 24 ++++++ + ld/testsuite/ld-or1k/gotha2.dd | 21 +++++ + ld/testsuite/ld-or1k/gotha2.s | 22 +++++ + ld/testsuite/ld-or1k/or1k.exp | 8 ++ + ld/testsuite/ld-or1k/pltlib.s | 1 + + 7 files changed, 220 insertions(+), 39 deletions(-) + create mode 100644 ld/testsuite/ld-or1k/gotha1.dd + create mode 100644 ld/testsuite/ld-or1k/gotha1.s + create mode 100644 ld/testsuite/ld-or1k/gotha2.dd + create mode 100644 ld/testsuite/ld-or1k/gotha2.s + +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index 9f315bfda99..7a14eaa3a46 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -30,10 +30,14 @@ + #define N_ONES(X) (((bfd_vma)2 << (X)) - 1) + + #define PLT_ENTRY_SIZE 16 ++#define PLT_ENTRY_SIZE_LARGE (6*4) ++#define PLT_MAX_INSN_COUNT 6 + + #define OR1K_MOVHI(D) (0x18000000 | (D << 21)) + #define OR1K_ADRP(D) (0x08000000 | (D << 21)) + #define OR1K_LWZ(D,A) (0x84000000 | (D << 21) | (A << 16)) ++#define OR1K_ADD(D,A,B) (0xE0000000 | (D << 21) | (A << 16) | (B << 11)) ++#define OR1K_ORI(D,A) (0xA8000000 | (D << 21) | (A << 16)) + #define OR1K_ORI0(D) (0xA8000000 | (D << 21)) + #define OR1K_JR(B) (0x44000000 | (B << 11)) + #define OR1K_NOP 0x15000000 +@@ -907,6 +911,8 @@ struct elf_or1k_link_hash_entry + { + struct elf_link_hash_entry root; + ++ /* For calculating PLT size. */ ++ bfd_vma plt_index; + /* Track type of TLS access. */ + unsigned char tls_type; + }; +@@ -934,9 +940,20 @@ struct elf_or1k_link_hash_table + /* Small local sym to section mapping cache. */ + struct sym_cache sym_sec; + ++ bfd_vma plt_count; + bfd_boolean saw_plta; + }; + ++static size_t ++elf_or1k_plt_entry_size (bfd_vma plt_index) ++{ ++ bfd_vma plt_reloc; ++ ++ plt_reloc = plt_index * sizeof (Elf32_External_Rela); ++ ++ return (plt_reloc > 0xffff) ? PLT_ENTRY_SIZE_LARGE : PLT_ENTRY_SIZE; ++} ++ + /* Get the ELF linker hash table from a link_info structure. */ + #define or1k_elf_hash_table(p) \ + (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ +@@ -2224,33 +2241,46 @@ or1k_elf_check_relocs (bfd *abfd, + } + + static void +-or1k_write_plt_entry (bfd *output_bfd, bfd_byte *contents, unsigned insn1, +- unsigned insn2, unsigned insn3, unsigned insnj) ++or1k_write_plt_entry (bfd *output_bfd, bfd_byte *contents, unsigned insnj, ++ unsigned insns[], size_t insn_count) + { + unsigned nodelay = elf_elfheader (output_bfd)->e_flags & EF_OR1K_NODELAY; +- unsigned insn4; ++ unsigned output_insns[PLT_MAX_INSN_COUNT]; ++ ++ /* Copy instructions into the output buffer. */ ++ for (size_t i = 0; i < insn_count; i++) ++ output_insns[i] = insns[i]; + + /* Honor the no-delay-slot setting. */ +- if (insn3 == OR1K_NOP) ++ if (insns[insn_count-1] == OR1K_NOP) + { +- insn4 = insn3; ++ unsigned slot1, slot2; ++ + if (nodelay) +- insn3 = insnj; ++ slot1 = insns[insn_count-2], slot2 = insnj; + else +- insn3 = insn2, insn2 = insnj; ++ slot1 = insnj, slot2 = insns[insn_count-2]; ++ ++ output_insns[insn_count-2] = slot1; ++ output_insns[insn_count-1] = slot2; ++ output_insns[insn_count] = OR1K_NOP; + } + else + { ++ unsigned slot1, slot2; ++ + if (nodelay) +- insn4 = insnj; ++ slot1 = insns[insn_count-1], slot2 = insnj; + else +- insn4 = insn3, insn3 = insnj; ++ slot1 = insnj, slot2 = insns[insn_count-1]; ++ ++ output_insns[insn_count-1] = slot1; ++ output_insns[insn_count] = slot2; + } + +- bfd_put_32 (output_bfd, insn1, contents); +- bfd_put_32 (output_bfd, insn2, contents + 4); +- bfd_put_32 (output_bfd, insn3, contents + 8); +- bfd_put_32 (output_bfd, insn4, contents + 12); ++ /* Write out the output buffer. */ ++ for (size_t i = 0; i < (insn_count+1); i++) ++ bfd_put_32 (output_bfd, output_insns[i], contents + (i*4)); + } + + /* Finish up the dynamic sections. */ +@@ -2317,7 +2347,8 @@ or1k_elf_finish_dynamic_sections (bfd *output_bfd, + splt = htab->root.splt; + if (splt && splt->size > 0) + { +- unsigned plt0, plt1, plt2; ++ unsigned plt[PLT_MAX_INSN_COUNT]; ++ size_t plt_insn_count = 3; + bfd_vma got_addr = sgot->output_section->vma + sgot->output_offset; + + /* Note we force 16 byte alignment on the .got, so that +@@ -2328,27 +2359,27 @@ or1k_elf_finish_dynamic_sections (bfd *output_bfd, + bfd_vma pc = splt->output_section->vma + splt->output_offset; + unsigned pa = ((got_addr >> 13) - (pc >> 13)) & 0x1fffff; + unsigned po = got_addr & 0x1fff; +- plt0 = OR1K_ADRP(12) | pa; +- plt1 = OR1K_LWZ(15,12) | (po + 8); +- plt2 = OR1K_LWZ(12,12) | (po + 4); ++ plt[0] = OR1K_ADRP(12) | pa; ++ plt[1] = OR1K_LWZ(15,12) | (po + 8); ++ plt[2] = OR1K_LWZ(12,12) | (po + 4); + } + else if (bfd_link_pic (info)) + { +- plt0 = OR1K_LWZ(15, 16) | 8; /* .got+8 */ +- plt1 = OR1K_LWZ(12, 16) | 4; /* .got+4 */ +- plt2 = OR1K_NOP; ++ plt[0] = OR1K_LWZ(15, 16) | 8; /* .got+8 */ ++ plt[1] = OR1K_LWZ(12, 16) | 4; /* .got+4 */ ++ plt[2] = OR1K_NOP; + } + else + { + unsigned ha = ((got_addr + 0x8000) >> 16) & 0xffff; + unsigned lo = got_addr & 0xffff; +- plt0 = OR1K_MOVHI(12) | ha; +- plt1 = OR1K_LWZ(15,12) | (lo + 8); +- plt2 = OR1K_LWZ(12,12) | (lo + 4); ++ plt[0] = OR1K_MOVHI(12) | ha; ++ plt[1] = OR1K_LWZ(15,12) | (lo + 8); ++ plt[2] = OR1K_LWZ(12,12) | (lo + 4); + } + +- or1k_write_plt_entry (output_bfd, splt->contents, +- plt0, plt1, plt2, OR1K_JR(15)); ++ or1k_write_plt_entry (output_bfd, splt->contents, OR1K_JR(15), ++ plt, plt_insn_count); + + elf_section_data (splt->output_section)->this_hdr.sh_entsize = 4; + } +@@ -2391,7 +2422,8 @@ or1k_elf_finish_dynamic_symbol (bfd *output_bfd, + + if (h->plt.offset != (bfd_vma) -1) + { +- unsigned int plt0, plt1, plt2; ++ unsigned int plt[PLT_MAX_INSN_COUNT]; ++ size_t plt_insn_count = 3; + asection *splt; + asection *sgot; + asection *srela; +@@ -2403,6 +2435,7 @@ or1k_elf_finish_dynamic_symbol (bfd *output_bfd, + bfd_vma got_offset; + bfd_vma got_addr; + Elf_Internal_Rela rela; ++ bfd_boolean large_plt_entry; + + /* This symbol has an entry in the procedure linkage table. Set + it up. */ +@@ -2420,10 +2453,13 @@ or1k_elf_finish_dynamic_symbol (bfd *output_bfd, + corresponds to this symbol. This is the index of this symbol + in all the symbols for which we are making plt entries. The + first entry in the procedure linkage table is reserved. */ +- plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1; ++ plt_index = ((struct elf_or1k_link_hash_entry *) h)->plt_index; + plt_addr = plt_base_addr + h->plt.offset; + plt_reloc = plt_index * sizeof (Elf32_External_Rela); + ++ large_plt_entry = (elf_or1k_plt_entry_size (plt_index) ++ == PLT_ENTRY_SIZE_LARGE); ++ + /* Get the offset into the .got table of the entry that + corresponds to this function. Each .got entry is 4 bytes. + The first three are reserved. */ +@@ -2435,27 +2471,57 @@ or1k_elf_finish_dynamic_symbol (bfd *output_bfd, + { + unsigned pa = ((got_addr >> 13) - (plt_addr >> 13)) & 0x1fffff; + unsigned po = (got_addr & 0x1fff); +- plt0 = OR1K_ADRP(12) | pa; +- plt1 = OR1K_LWZ(12,12) | po; +- plt2 = OR1K_ORI0(11) | plt_reloc; ++ plt[0] = OR1K_ADRP(12) | pa; ++ plt[1] = OR1K_LWZ(12,12) | po; ++ plt[2] = OR1K_ORI0(11) | plt_reloc; + } + else if (bfd_link_pic (info)) + { +- plt0 = OR1K_LWZ(12,16) | got_offset; +- plt1 = OR1K_ORI0(11) | plt_reloc; +- plt2 = OR1K_NOP; ++ if (large_plt_entry) ++ { ++ unsigned gotha = ((got_offset + 0x8000) >> 16) & 0xffff; ++ unsigned got = got_offset & 0xffff; ++ unsigned pltrelhi = (plt_reloc >> 16) & 0xffff; ++ unsigned pltrello = plt_reloc & 0xffff; ++ ++ plt[0] = OR1K_MOVHI(12) | gotha; ++ plt[1] = OR1K_ADD(12,12,16); ++ plt[2] = OR1K_LWZ(12,12) | got; ++ plt[3] = OR1K_MOVHI(11) | pltrelhi; ++ plt[4] = OR1K_ORI(11,11) | pltrello; ++ plt_insn_count = 5; ++ } ++ else ++ { ++ plt[0] = OR1K_LWZ(12,16) | got_offset; ++ plt[1] = OR1K_ORI0(11) | plt_reloc; ++ plt[2] = OR1K_NOP; ++ } + } + else + { + unsigned ha = ((got_addr + 0x8000) >> 16) & 0xffff; + unsigned lo = got_addr & 0xffff; +- plt0 = OR1K_MOVHI(12) | ha; +- plt1 = OR1K_LWZ(12,12) | lo; +- plt2 = OR1K_ORI0(11) | plt_reloc; ++ plt[0] = OR1K_MOVHI(12) | ha; ++ plt[1] = OR1K_LWZ(12,12) | lo; ++ plt[2] = OR1K_ORI0(11) | plt_reloc; ++ } ++ ++ /* For large code model we fixup the non-PIC PLT relocation instructions ++ here. */ ++ if (large_plt_entry && !bfd_link_pic (info)) ++ { ++ unsigned pltrelhi = (plt_reloc >> 16) & 0xffff; ++ unsigned pltrello = plt_reloc & 0xffff; ++ ++ plt[2] = OR1K_MOVHI(11) | pltrelhi; ++ plt[3] = OR1K_ORI(11,11) | pltrello; ++ plt[4] = OR1K_NOP; ++ plt_insn_count = 5; + } + + or1k_write_plt_entry (output_bfd, splt->contents + h->plt.offset, +- plt0, plt1, plt2, OR1K_JR(12)); ++ OR1K_JR(12), plt, plt_insn_count); + + /* Fill in the entry in the global offset table. We initialize it to + point to the top of the plt. This is done to lazy lookup the actual +@@ -2779,11 +2845,16 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h)) + { + asection *splt = htab->root.splt; ++ bfd_vma plt_index; ++ ++ /* Track the index of our plt entry for use in calculating size. */ ++ plt_index = htab->plt_count++; ++ ((struct elf_or1k_link_hash_entry *) h)->plt_index = plt_index; + + /* If this is the first .plt entry, make room for the special + first entry. */ + if (splt->size == 0) +- splt->size = PLT_ENTRY_SIZE; ++ splt->size = elf_or1k_plt_entry_size (plt_index); + + h->plt.offset = splt->size; + +@@ -2800,7 +2871,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) + } + + /* Make room for this entry. */ +- splt->size += PLT_ENTRY_SIZE; ++ splt->size += elf_or1k_plt_entry_size (plt_index); + + /* We also need to make an entry in the .got.plt section, which + will be placed in the .got section by the linker script. */ +diff --git a/ld/testsuite/ld-or1k/gotha1.dd b/ld/testsuite/ld-or1k/gotha1.dd +new file mode 100644 +index 00000000000..0ad1f8f5399 +--- /dev/null ++++ b/ld/testsuite/ld-or1k/gotha1.dd +@@ -0,0 +1,34 @@ ++ ++.*\.x: file format elf32-or1k ++ ++ ++Disassembly of section \.plt: ++ ++[0-9a-f]+ <\.plt>: ++ +[0-9a-f]+: 19 80 00 00 l\.movhi r12,0x0 ++ +[0-9a-f]+: 85 ec [0-9a-f]+ [0-9a-f]+ l\.lwz r15,[0-9]+\(r12\) ++ +[0-9a-f]+: 44 00 78 00 l\.jr r15 ++ +[0-9a-f]+: 85 8c [0-9a-f]+ [0-9a-f]+ l\.lwz r12,[0-9]+\(r12\) ++ +[0-9a-f]+: 19 80 00 00 l\.movhi r12,0x0 ++ +[0-9a-f]+: 85 8c [0-9a-f]+ [0-9a-f]+ l\.lwz r12,[0-9]+\(r12\) ++ +[0-9a-f]+: 44 00 60 00 l\.jr r12 ++ +[0-9a-f]+: a9 60 00 00 l\.ori r11,r0,0x0 ++ ++Disassembly of section \.text: ++ ++[0-9a-f]+ <_start>: ++ +[0-9a-f]+: 9c 21 ff fc l\.addi r1,r1,-4 ++ +[0-9a-f]+: d4 01 48 00 l\.sw 0\(r1\),r9 ++ +[0-9a-f]+: 04 00 00 02 l\.jal [0-9a-f]+ <_start\+0x10> ++ +[0-9a-f]+: 1a 60 00 00 l\.movhi r19,0x0 ++ +[0-9a-f]+: aa 73 [0-9a-f]+ [0-9a-f]+ l\.ori r19,r19,0x[0-9a-f]+ ++ +[0-9a-f]+: e2 73 48 00 l\.add r19,r19,r9 ++ +[0-9a-f]+: 1a 20 00 00 l\.movhi r17,0x0 ++ +[0-9a-f]+: e2 31 98 00 l\.add r17,r17,r19 ++ +[0-9a-f]+: 86 31 00 10 l\.lwz r17,16\(r17\) ++ +[0-9a-f]+: 84 71 00 00 l\.lwz r3,0\(r17\) ++ +[0-9a-f]+: 07 ff ff f2 l\.jal [0-9a-f]+ <\.plt\+0x10> ++ +[0-9a-f]+: 15 00 00 00 l\.nop 0x0 ++ +[0-9a-f]+: 85 21 00 00 l\.lwz r9,0\(r1\) ++ +[0-9a-f]+: 44 00 48 00 l\.jr r9 ++ +[0-9a-f]+: 9c 21 00 04 l\.addi r1,r1,4 +diff --git a/ld/testsuite/ld-or1k/gotha1.s b/ld/testsuite/ld-or1k/gotha1.s +new file mode 100644 +index 00000000000..42b16db425c +--- /dev/null ++++ b/ld/testsuite/ld-or1k/gotha1.s +@@ -0,0 +1,24 @@ ++ .data ++ .p2align 16 ++ ++ .text ++ .globl _start ++_start: ++ l.addi r1, r1, -4 ++ l.sw 0(r1), r9 ++ ++ l.jal 8 ++ l.movhi r19, gotpchi(_GLOBAL_OFFSET_TABLE_-4) ++ l.ori r19, r19, gotpclo(_GLOBAL_OFFSET_TABLE_+0) ++ l.add r19, r19, r9 ++ ++ l.movhi r17, gotha(x) ++ l.add r17, r17, r19 ++ l.lwz r17, got(x)(r17) ++ l.lwz r3, 0(r17) ++ ++ l.jal plt(func) ++ l.nop ++ l.lwz r9, 0(r1) ++ l.jr r9 ++ l.addi r1, r1, 4 +diff --git a/ld/testsuite/ld-or1k/gotha2.dd b/ld/testsuite/ld-or1k/gotha2.dd +new file mode 100644 +index 00000000000..fe09da5466b +--- /dev/null ++++ b/ld/testsuite/ld-or1k/gotha2.dd +@@ -0,0 +1,21 @@ ++ ++.*\.x: file format elf32-or1k ++ ++ ++Disassembly of section \.text: ++ ++[0-9a-f]+ : ++ +[0-9a-f]+: 9c 21 ff f8 l\.addi r1,r1,-8 ++ +[0-9a-f]+: d4 01 80 00 l\.sw 0\(r1\),r16 ++ +[0-9a-f]+: d4 01 48 04 l\.sw 4\(r1\),r9 ++ +[0-9a-f]+: 04 00 [0-9a-f]+ [0-9a-f]+ l\.jal [0-9a-f]+ ++ +[0-9a-f]+: 1a 00 00 00 l\.movhi r16,0x0 ++ +[0-9a-f]+: aa 10 [0-9a-f]+ [0-9a-f]+ l\.ori r16,r16,0x[0-9a-f]+ ++ +[0-9a-f]+: e2 10 48 00 l\.add r16,r16,r9 ++ +[0-9a-f]+: 1a 20 00 00 l\.movhi r17,0x0 ++ +[0-9a-f]+: e2 31 80 00 l\.add r17,r17,r16 ++ +[0-9a-f]+: 86 31 00 0c l\.lwz r17,12\(r17\) ++ +[0-9a-f]+: 85 21 00 04 l\.lwz r9,4\(r1\) ++ +[0-9a-f]+: 86 01 00 00 l\.lwz r16,0\(r1\) ++ +[0-9a-f]+: 44 00 48 00 l\.jr r9 ++ +[0-9a-f]+: 9c 21 00 08 l\.addi r1,r1,8 +diff --git a/ld/testsuite/ld-or1k/gotha2.s b/ld/testsuite/ld-or1k/gotha2.s +new file mode 100644 +index 00000000000..164b282f2dd +--- /dev/null ++++ b/ld/testsuite/ld-or1k/gotha2.s +@@ -0,0 +1,22 @@ ++ .section .text ++ .align 4 ++ .global test ++ .type test, @function ++test: ++ l.addi r1, r1, -8 ++ l.sw 0(r1), r16 ++ l.sw 4(r1), r9 ++ ++ l.jal 8 ++ l.movhi r16, gotpchi(_GLOBAL_OFFSET_TABLE_-4) ++ l.ori r16, r16, gotpclo(_GLOBAL_OFFSET_TABLE_+0) ++ l.add r16, r16, r9 ++ ++ l.movhi r17, gotha(i) ++ l.add r17, r17, r16 ++ l.lwz r17, got(i)(r17) ++ ++ l.lwz r9, 4(r1) ++ l.lwz r16, 0(r1) ++ l.jr r9 ++ l.addi r1, r1, 8 +diff --git a/ld/testsuite/ld-or1k/or1k.exp b/ld/testsuite/ld-or1k/or1k.exp +index 7592e8307c1..8e19ec6c31a 100644 +--- a/ld/testsuite/ld-or1k/or1k.exp ++++ b/ld/testsuite/ld-or1k/or1k.exp +@@ -53,6 +53,14 @@ set or1kplttests { + "" {plt1.s} + {{objdump -dr plt1.x.dd}} + "plt1.x"} ++ {"gotha exec plt" "tmpdir/libpltlib.so" "" ++ "" {gotha1.s} ++ {{objdump -dr gotha1.dd}} ++ "gotha1.x"} ++ {"gotha -fpic -shared" "-fpic -shared" "" ++ "" {gotha2.s} ++ {{objdump -dr gotha2.dd}} ++ "gotha2.x"} + } + + # Not implemented yet +diff --git a/ld/testsuite/ld-or1k/pltlib.s b/ld/testsuite/ld-or1k/pltlib.s +index baf76ca1af7..8b4d7ba48fd 100644 +--- a/ld/testsuite/ld-or1k/pltlib.s ++++ b/ld/testsuite/ld-or1k/pltlib.s +@@ -1,5 +1,6 @@ + .section .data + .globl x, y ++ .size x, 4 + x: .long 33 + y: .long 44 + +-- +2.25.1 + diff --git a/package/binutils/2.35.2/0007-bfd-elf32-or1k-fix-building-with-gcc-version-5.patch b/package/binutils/2.35.2/0007-bfd-elf32-or1k-fix-building-with-gcc-version-5.patch new file mode 100644 index 00000000..c3978e22 --- /dev/null +++ b/package/binutils/2.35.2/0007-bfd-elf32-or1k-fix-building-with-gcc-version-5.patch @@ -0,0 +1,50 @@ +From c3003947e4bad18faea4337fd2073feeb30ee078 Mon Sep 17 00:00:00 2001 +From: Giulio Benetti +Date: Wed, 9 Jun 2021 17:28:27 +0200 +Subject: [PATCH] bfd/elf32-or1k: fix building with gcc version < 5 + +Gcc version >= 5 has standard C mode not set to -std=gnu11, so if we use +an old compiler(i.e. gcc 4.9) build fails on: +``` +elf32-or1k.c:2251:3: error: 'for' loop initial declarations are only allowed in +C99 or C11 mode + for (size_t i = 0; i < insn_count; i++) + ^ +``` + +So let's declare `size_t i` at the top of the function instead of inside +for loop. + +Signed-off-by: Giulio Benetti +--- + bfd/elf32-or1k.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index 4ae7f324d33..32063ab0289 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -2244,9 +2244,10 @@ or1k_write_plt_entry (bfd *output_bfd, bfd_byte *contents, unsigned insnj, + { + unsigned nodelay = elf_elfheader (output_bfd)->e_flags & EF_OR1K_NODELAY; + unsigned output_insns[PLT_MAX_INSN_COUNT]; ++ size_t i; + + /* Copy instructions into the output buffer. */ +- for (size_t i = 0; i < insn_count; i++) ++ for (i = 0; i < insn_count; i++) + output_insns[i] = insns[i]; + + /* Honor the no-delay-slot setting. */ +@@ -2277,7 +2278,7 @@ or1k_write_plt_entry (bfd *output_bfd, bfd_byte *contents, unsigned insnj, + } + + /* Write out the output buffer. */ +- for (size_t i = 0; i < (insn_count+1); i++) ++ for (i = 0; i < (insn_count+1); i++) + bfd_put_32 (output_bfd, output_insns[i], contents + (i*4)); + } + +-- +2.25.1 + diff --git a/package/binutils/2.35.2/0008-or1k-fix-pc-relative-relocation-against-dynamic-on-P.patch b/package/binutils/2.35.2/0008-or1k-fix-pc-relative-relocation-against-dynamic-on-P.patch new file mode 100644 index 00000000..585b97b2 --- /dev/null +++ b/package/binutils/2.35.2/0008-or1k-fix-pc-relative-relocation-against-dynamic-on-P.patch @@ -0,0 +1,59 @@ +From 9af93e143a7fbdb75aa1ed37277f9250eb111628 Mon Sep 17 00:00:00 2001 +From: Giulio Benetti +Date: Sat, 10 Jul 2021 17:57:34 +0200 +Subject: [PATCH] or1k: fix pc-relative relocation against dynamic on PC + relative 26 bit relocation + +When building openal we were seeing the assert failure: + +/home/buildroot/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: CMakeFiles/OpenAL.dir/al/source.cpp.o: +pc-relative relocation against dynamic symbol alSourcePausev +/home/buildroot/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: CMakeFiles/OpenAL.dir/al/source.cpp.o: +pc-relative relocation against dynamic symbol alSourceStopv +/home/buildroot/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: CMakeFiles/OpenAL.dir/al/source.cpp.o: +pc-relative relocation against dynamic symbol alSourceRewindv +/home/buildroot/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: CMakeFiles/OpenAL.dir/al/source.cpp.o: +pc-relative relocation against dynamic symbol alSourcePlayv +collect2: error: ld returned 1 exit status + +This happens because in R_OR1K_INSN_REL_26 case we can't reference local +symbol as previously done but we need to make sure that calls to actual +symbol always call the version of current object. + +bfd/Changelog: + + * elf32-or1k.c (or1k_elf_relocate_section): use a separate entry + in switch case R_OR1K_INSN_REL_26 where we need to check for + !SYMBOL_CALLS_LOCAL() instead of !SYMBOL_REFERENCES_LOCAL(). + +Signed-off-by: Giulio Benetti +--- + bfd/elf32-or1k.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index 4ae7f324d33..4f9092539f5 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -1543,6 +1543,18 @@ or1k_elf_relocate_section (bfd *output_bfd, + break; + + case R_OR1K_INSN_REL_26: ++ /* For a non-shared link, these will reference plt or call the ++ version of actual object. */ ++ if (bfd_link_pic (info) && !SYMBOL_CALLS_LOCAL (info, h)) ++ { ++ _bfd_error_handler ++ (_("%pB: pc-relative relocation against dynamic symbol %s"), ++ input_bfd, name); ++ ret_val = FALSE; ++ bfd_set_error (bfd_error_bad_value); ++ } ++ break; ++ + case R_OR1K_PCREL_PG21: + case R_OR1K_LO13: + case R_OR1K_SLO13: +-- +2.25.1 + diff --git a/package/binutils/2.36.1/0001-sh-conf.patch b/package/binutils/2.36.1/0001-sh-conf.patch new file mode 100644 index 00000000..0070e582 --- /dev/null +++ b/package/binutils/2.36.1/0001-sh-conf.patch @@ -0,0 +1,48 @@ +From f88f4c77266b9669b285ab64386cf39e183661bb Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Fri, 25 Dec 2015 11:38:13 +0100 +Subject: [PATCH] sh-conf + +Likewise, binutils has no idea about any of these new targets either, so we +fix that up too.. now we're able to actually build a real toolchain for +sh2a_nofpu- and other more ineptly named toolchains (and yes, there are more +inept targets than that one, really. Go look, I promise). + +[Romain: rebase on top of 2.32] +Signed-off-by: Romain Naour +[Thomas: rebase on top of 2.29, in which sh64 support was removed.] +Signed-off-by: Thomas Petazzoni +--- + configure | 2 +- + configure.ac | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/configure b/configure +index 68779feb42b..8b4333b2c15 100755 +--- a/configure ++++ b/configure +@@ -3887,7 +3887,7 @@ case "${target}" in + nvptx*-*-*) + noconfigdirs="$noconfigdirs target-libssp target-libstdc++-v3 target-libobjc" + ;; +- sh-*-*) ++ sh*-*-*) + case "${target}" in + sh*-*-elf) + ;; +diff --git a/configure.ac b/configure.ac +index d16a2757689..035854759ed 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1177,7 +1177,7 @@ case "${target}" in + nvptx*-*-*) + noconfigdirs="$noconfigdirs target-libssp target-libstdc++-v3 target-libobjc" + ;; +- sh-*-*) ++ sh*-*-*) + case "${target}" in + sh*-*-elf) + ;; +-- +2.29.2 + diff --git a/package/binutils/2.36.1/0002-poison-system-directories.patch b/package/binutils/2.36.1/0002-poison-system-directories.patch new file mode 100644 index 00000000..071b67ac --- /dev/null +++ b/package/binutils/2.36.1/0002-poison-system-directories.patch @@ -0,0 +1,306 @@ +From a9652a60af6254d07066f08377415f05e3a9462e Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Fri, 25 Dec 2015 11:45:38 +0100 +Subject: [PATCH] poison-system-directories + +Patch adapted to binutils 2.23.2 and extended to use +BR_COMPILER_PARANOID_UNSAFE_PATH by Thomas Petazzoni. + +[Romain: rebase on top of 2.33.1] +Signed-off-by: Romain Naour +[Gustavo: adapt to binutils 2.25] +Signed-off-by: Thomas Petazzoni +Signed-off-by: Gustavo Zacarias + +Upstream-Status: Inappropriate [distribution: codesourcery] + +Patch originally created by Mark Hatle, forward-ported to +binutils 2.21 by Scott Garman. + +purpose: warn for uses of system directories when cross linking + +Code Merged from Sourcery G++ binutils 2.19 - 4.4-277 + +2008-07-02 Joseph Myers + + ld/ + * ld.h (args_type): Add error_poison_system_directories. + * ld.texinfo (--error-poison-system-directories): Document. + * ldfile.c (ldfile_add_library_path): Check + command_line.error_poison_system_directories. + * ldmain.c (main): Initialize + command_line.error_poison_system_directories. + * lexsup.c (enum option_values): Add + OPTION_ERROR_POISON_SYSTEM_DIRECTORIES. + (ld_options): Add --error-poison-system-directories. + (parse_args): Handle new option. + +2007-06-13 Joseph Myers + + ld/ + * config.in: Regenerate. + * ld.h (args_type): Add poison_system_directories. + * ld.texinfo (--no-poison-system-directories): Document. + * ldfile.c (ldfile_add_library_path): Check + command_line.poison_system_directories. + * ldmain.c (main): Initialize + command_line.poison_system_directories. + * lexsup.c (enum option_values): Add + OPTION_NO_POISON_SYSTEM_DIRECTORIES. + (ld_options): Add --no-poison-system-directories. + (parse_args): Handle new option. + +2007-04-20 Joseph Myers + + Merge from Sourcery G++ binutils 2.17: + + 2007-03-20 Joseph Myers + Based on patch by Mark Hatle . + ld/ + * configure.ac (--enable-poison-system-directories): New option. + * configure, config.in: Regenerate. + * ldfile.c (ldfile_add_library_path): If + ENABLE_POISON_SYSTEM_DIRECTORIES defined, warn for use of /lib, + /usr/lib, /usr/local/lib or /usr/X11R6/lib. + +Signed-off-by: Mark Hatle +Signed-off-by: Scott Garman +--- + ld/config.in | 3 +++ + ld/configure | 14 ++++++++++++++ + ld/configure.ac | 10 ++++++++++ + ld/ld.h | 8 ++++++++ + ld/ld.texi | 12 ++++++++++++ + ld/ldfile.c | 17 +++++++++++++++++ + ld/ldlex.h | 2 ++ + ld/ldmain.c | 2 ++ + ld/lexsup.c | 21 +++++++++++++++++++++ + 9 files changed, 89 insertions(+) + +diff --git a/ld/config.in b/ld/config.in +index 7b60d778587..37b8e9b6f6c 100644 +--- a/ld/config.in ++++ b/ld/config.in +@@ -40,6 +40,9 @@ + language is requested. */ + #undef ENABLE_NLS + ++/* Define to warn for use of native system library directories */ ++#undef ENABLE_POISON_SYSTEM_DIRECTORIES ++ + /* Additional extension a shared object might have. */ + #undef EXTRA_SHLIB_EXTENSION + +diff --git a/ld/configure b/ld/configure +index a8d248eab58..f52e1f3c18f 100755 +--- a/ld/configure ++++ b/ld/configure +@@ -828,6 +828,7 @@ with_lib_path + enable_targets + enable_64_bit_bfd + with_sysroot ++enable_poison_system_directories + enable_gold + enable_got + enable_compressed_debug_sections +@@ -1496,6 +1497,8 @@ Optional Features: + --disable-largefile omit support for large files + --enable-targets alternative target configurations + --enable-64-bit-bfd 64-bit support (on hosts with narrower word sizes) ++ --enable-poison-system-directories ++ warn for use of native system library directories + --enable-gold[=ARG] build gold [ARG={default,yes,no}] + --enable-got= GOT handling scheme (target, single, negative, + multigot) +@@ -15841,7 +15844,18 @@ else + fi + + ++# Check whether --enable-poison-system-directories was given. ++if test "${enable_poison_system_directories+set}" = set; then : ++ enableval=$enable_poison_system_directories; ++else ++ enable_poison_system_directories=no ++fi ++ ++if test "x${enable_poison_system_directories}" = "xyes"; then + ++$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h ++ ++fi + + # Check whether --enable-got was given. + if test "${enable_got+set}" = set; then : +diff --git a/ld/configure.ac b/ld/configure.ac +index c9c69ab9245..59dab0a6ac4 100644 +--- a/ld/configure.ac ++++ b/ld/configure.ac +@@ -94,6 +94,16 @@ AC_SUBST(use_sysroot) + AC_SUBST(TARGET_SYSTEM_ROOT) + AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE) + ++AC_ARG_ENABLE([poison-system-directories], ++ AS_HELP_STRING([--enable-poison-system-directories], ++ [warn for use of native system library directories]),, ++ [enable_poison_system_directories=no]) ++if test "x${enable_poison_system_directories}" = "xyes"; then ++ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES], ++ [1], ++ [Define to warn for use of native system library directories]) ++fi ++ + dnl Use --enable-gold to decide if this linker should be the default. + dnl "install_as_default" is set to false if gold is the default linker. + dnl "installed_linker" is the installed BFD linker name. +diff --git a/ld/ld.h b/ld/ld.h +index 93f5af92c7d..ff7f71a7b66 100644 +--- a/ld/ld.h ++++ b/ld/ld.h +@@ -166,6 +166,14 @@ typedef struct + in the linker script. */ + bfd_boolean force_group_allocation; + ++ /* If TRUE (the default) warn for uses of system directories when ++ cross linking. */ ++ bfd_boolean poison_system_directories; ++ ++ /* If TRUE (default FALSE) give an error for uses of system ++ directories when cross linking instead of a warning. */ ++ bfd_boolean error_poison_system_directories; ++ + /* Big or little endian as set on command line. */ + enum endian_enum endian; + +diff --git a/ld/ld.texi b/ld/ld.texi +index 7a602b9c6ab..cccbfbab3bb 100644 +--- a/ld/ld.texi ++++ b/ld/ld.texi +@@ -2810,6 +2810,18 @@ string identifying the original linked file does not change. + + Passing @code{none} for @var{style} disables the setting from any + @code{--build-id} options earlier on the command line. ++ ++@kindex --no-poison-system-directories ++@item --no-poison-system-directories ++Do not warn for @option{-L} options using system directories such as ++@file{/usr/lib} when cross linking. This option is intended for use ++in chroot environments when such directories contain the correct ++libraries for the target system rather than the host. ++ ++@kindex --error-poison-system-directories ++@item --error-poison-system-directories ++Give an error instead of a warning for @option{-L} options using ++system directories when cross linking. + @end table + + @c man end +diff --git a/ld/ldfile.c b/ld/ldfile.c +index 81cb86d51e2..cd5c2752679 100644 +--- a/ld/ldfile.c ++++ b/ld/ldfile.c +@@ -117,6 +117,23 @@ ldfile_add_library_path (const char *name, bfd_boolean cmdline) + new_dirs->name = concat (ld_sysroot, name + strlen ("$SYSROOT"), (const char *) NULL); + else + new_dirs->name = xstrdup (name); ++ ++#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES ++ if (command_line.poison_system_directories ++ && ((!strncmp (name, "/lib", 4)) ++ || (!strncmp (name, "/usr/lib", 8)) ++ || (!strncmp (name, "/usr/local/lib", 14)) ++ || (!strncmp (name, "/usr/X11R6/lib", 14)))) ++ { ++ if (command_line.error_poison_system_directories) ++ einfo (_("%X%P: error: library search path \"%s\" is unsafe for " ++ "cross-compilation\n"), name); ++ else ++ einfo (_("%P: warning: library search path \"%s\" is unsafe for " ++ "cross-compilation\n"), name); ++ } ++#endif ++ + } + + /* Try to open a BFD for a lang_input_statement. */ +diff --git a/ld/ldlex.h b/ld/ldlex.h +index b0101028321..77f5accb5d9 100644 +--- a/ld/ldlex.h ++++ b/ld/ldlex.h +@@ -161,6 +161,8 @@ enum option_values + OPTION_CTF_VARIABLES, + OPTION_NO_CTF_VARIABLES, + OPTION_CTF_SHARE_TYPES, ++ OPTION_NO_POISON_SYSTEM_DIRECTORIES, ++ OPTION_ERROR_POISON_SYSTEM_DIRECTORIES, + }; + + /* The initial parser states. */ +diff --git a/ld/ldmain.c b/ld/ldmain.c +index 863df0293ea..f06f2546ef5 100644 +--- a/ld/ldmain.c ++++ b/ld/ldmain.c +@@ -323,6 +323,8 @@ main (int argc, char **argv) + command_line.warn_mismatch = TRUE; + command_line.warn_search_mismatch = TRUE; + command_line.check_section_addresses = -1; ++ command_line.poison_system_directories = TRUE; ++ command_line.error_poison_system_directories = FALSE; + + /* We initialize DEMANGLING based on the environment variable + COLLECT_NO_DEMANGLE. The gcc collect2 program will demangle the +diff --git a/ld/lexsup.c b/ld/lexsup.c +index f005a58a045..eb383d3755b 100644 +--- a/ld/lexsup.c ++++ b/ld/lexsup.c +@@ -591,6 +591,14 @@ static const struct ld_option ld_options[] = + " is: share-unconflicted (default),\n" + " share-duplicated"), + TWO_DASHES }, ++ { {"no-poison-system-directories", no_argument, NULL, ++ OPTION_NO_POISON_SYSTEM_DIRECTORIES}, ++ '\0', NULL, N_("Do not warn for -L options using system directories"), ++ TWO_DASHES }, ++ { {"error-poison-system-directories", no_argument, NULL, ++ OPTION_ERROR_POISON_SYSTEM_DIRECTORIES}, ++ '\0', NULL, N_("Give an error for -L options using system directories"), ++ TWO_DASHES }, + }; + + #define OPTION_COUNT ARRAY_SIZE (ld_options) +@@ -603,6 +611,7 @@ parse_args (unsigned argc, char **argv) + int ingroup = 0; + char *default_dirlist = NULL; + char *shortopts; ++ char *BR_paranoid_env; + struct option *longopts; + struct option *really_longopts; + int last_optind; +@@ -1633,6 +1642,14 @@ parse_args (unsigned argc, char **argv) + } + break; + ++ case OPTION_NO_POISON_SYSTEM_DIRECTORIES: ++ command_line.poison_system_directories = FALSE; ++ break; ++ ++ case OPTION_ERROR_POISON_SYSTEM_DIRECTORIES: ++ command_line.error_poison_system_directories = TRUE; ++ break; ++ + case OPTION_PUSH_STATE: + input_flags.pushed = xmemdup (&input_flags, + sizeof (input_flags), +@@ -1778,6 +1795,10 @@ parse_args (unsigned argc, char **argv) + command_line.soname = NULL; + } + ++ BR_paranoid_env = getenv("BR_COMPILER_PARANOID_UNSAFE_PATH"); ++ if (BR_paranoid_env && strlen(BR_paranoid_env) > 0) ++ command_line.error_poison_system_directories = TRUE; ++ + while (ingroup) + { + einfo (_("%P: missing --end-group; added as last command line option\n")); +-- +2.29.2 + diff --git a/package/binutils/2.36.1/0003-or1k-Fix-issue-with-plt-link-failure-for-local-calls.patch b/package/binutils/2.36.1/0003-or1k-Fix-issue-with-plt-link-failure-for-local-calls.patch new file mode 100644 index 00000000..85931ff6 --- /dev/null +++ b/package/binutils/2.36.1/0003-or1k-Fix-issue-with-plt-link-failure-for-local-calls.patch @@ -0,0 +1,59 @@ +From b5fdaa85790dff45fd2c3fd15405c16dbc50a074 Mon Sep 17 00:00:00 2001 +From: Stafford Horne +Date: Sun, 2 May 2021 06:02:14 +0900 +Subject: [PATCH] or1k: Fix issue with plt link failure for local calls + +When building protobuf we were seeing the assert failure: + + /home/giuliobenetti/git/upstream/or1k-binutils-2.36.1/host/lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: + BFD (GNU Binutils) 2.36.1 assertion fail elf32-or1k.c:2377 + /home/giuliobenetti/git/upstream/or1k-binutils-2.36.1/host/lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: + BFD (GNU Binutils) 2.36.1 assertion fail elf32-or1k.c:2377 + /home/giuliobenetti/git/upstream/or1k-binutils-2.36.1/host/lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: + BFD (GNU Binutils) 2.36.1 assertion fail elf32-or1k.c:2377 + collect2: error: ld returned 1 exit status + +This failure happens while writing out PLT entries, there is a check +"BFD_ASSERT (h->dynindx != -1)" to confirm all plt entries have dynamic +symbol attributes. This was failing for symbols that were +"forced_local" in previous linking code. + +The fix adds logic to or1k_elf_adjust_dynamic_symbol to identify +"forced_local" symbols and exclude them from the the PLT. + +bfd/ChangeLog: + + PR 27624 + * elf32-or1k.c (or1k_elf_adjust_dynamic_symbol): Change + condition used to cleanup plt entries to cleanup forced local + entries. + +Cc: Giulio Benetti +Signed-off-by: Giulio Benetti +--- + bfd/elf32-or1k.c | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index 65938e51378..4f82cc4c667 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -2566,11 +2566,10 @@ or1k_elf_adjust_dynamic_symbol (struct bfd_link_info *info, + if (h->type == STT_FUNC + || h->needs_plt) + { +- if (! bfd_link_pic (info) +- && !h->def_dynamic +- && !h->ref_dynamic +- && h->root.type != bfd_link_hash_undefweak +- && h->root.type != bfd_link_hash_undefined) ++ if (h->plt.refcount <= 0 ++ || (SYMBOL_CALLS_LOCAL (info, h) ++ || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT ++ && h->root.type == bfd_link_hash_undefweak))) + { + /* This case can occur if we saw a PLT reloc in an input + file, but the symbol was never referred to by a dynamic +-- +2.25.1 + diff --git a/package/binutils/2.36.1/0004-or1k-Implement-relocation-R_OR1K_GOT_AHI16-for-gotha.patch b/package/binutils/2.36.1/0004-or1k-Implement-relocation-R_OR1K_GOT_AHI16-for-gotha.patch new file mode 100644 index 00000000..08c23d27 --- /dev/null +++ b/package/binutils/2.36.1/0004-or1k-Implement-relocation-R_OR1K_GOT_AHI16-for-gotha.patch @@ -0,0 +1,256 @@ +From 141dee7402871c7b3994838c3eddf64a92d67be7 Mon Sep 17 00:00:00 2001 +From: Stafford Horne +Date: Sun, 2 May 2021 06:02:15 +0900 +Subject: [PATCH] or1k: Implement relocation R_OR1K_GOT_AHI16 for gotha() + +The gotha() relocation mnemonic will be outputted by OpenRISC GCC when +using the -mcmodel=large option. This relocation is used along with +got() to generate 32-bit GOT offsets. This increases the previous GOT +offset limit from the previous 16-bit (64K) limit. + +This is needed on large binaries where the GOT grows larger than 64k. + +bfd/ChangeLog: + + PR 21464 + * bfd-in2.h: Add BFD_RELOC_OR1K_GOT_AHI16 relocation. + * elf32-or1k.c (or1k_elf_howto_table, or1k_reloc_map): Likewise. + (or1k_final_link_relocate, or1k_elf_relocate_section, + or1k_elf_check_relocs): Likewise. + * libbfd.h (bfd_reloc_code_real_names): Likewise. + * reloc.c: Likewise. + +cpu/ChangeLog: + + PR 21464 + * or1k.opc (or1k_imm16_relocs, parse_reloc): Define parse logic + for gotha() relocation. + +include/ChangeLog: + + PR 21464 + * elf/or1k.h (elf_or1k_reloc_type): Define R_OR1K_GOT_AHI16 number. + +opcodes/ChangeLog: + + PR 21464 + * or1k-asm.c: Regenerate. + +gas/ChangeLog: + + PR 21464 + * testsuite/gas/or1k/reloc-1.s: Add test for new relocation. + * testsuite/gas/or1k/reloc-1.d: Add test result for new + relocation. + +Cc: Giulio Benetti + +fixup reloc, add tests + +Signed-off-by: Giulio Benetti +--- + bfd/bfd-in2.h | 1 + + bfd/elf32-or1k.c | 21 ++++++++++++++++++++- + bfd/libbfd.h | 1 + + bfd/reloc.c | 2 ++ + cpu/or1k.opc | 7 ++++++- + gas/testsuite/gas/or1k/reloc-1.d | 4 +++- + gas/testsuite/gas/or1k/reloc-1.s | 4 ++++ + include/elf/or1k.h | 1 + + opcodes/or1k-asm.c | 7 ++++++- + 9 files changed, 44 insertions(+), 4 deletions(-) + +diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h +index 7eff85b7eaa..e76b9e7a319 100644 +--- a/bfd/bfd-in2.h ++++ b/bfd/bfd-in2.h +@@ -5048,6 +5048,7 @@ then it may be truncated to 8 bits. */ + BFD_RELOC_OR1K_TLS_TPOFF, + BFD_RELOC_OR1K_TLS_DTPOFF, + BFD_RELOC_OR1K_TLS_DTPMOD, ++ BFD_RELOC_OR1K_GOT_AHI16, + + /* H8 elf Relocations. */ + BFD_RELOC_H8_DIR16A8, +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index 4f82cc4c667..48461854a96 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -808,6 +808,20 @@ static reloc_howto_type or1k_elf_howto_table[] = + 0, /* Source Mask. */ + 0x03ffffff, /* Dest Mask. */ + TRUE), /* PC relative offset? */ ++ ++ HOWTO (R_OR1K_GOT_AHI16, /* type */ ++ 16, /* rightshift */ ++ 2, /* size (0 = byte, 1 = short, 2 = long) */ ++ 16, /* bitsize */ ++ FALSE, /* pc_relative */ ++ 0, /* bitpos */ ++ complain_overflow_signed, /* complain_on_overflow */ ++ bfd_elf_generic_reloc, /* special_function */ ++ "R_OR1K_GOT_AHI16", /* name */ ++ FALSE, /* partial_inplace */ ++ 0, /* src_mask */ ++ 0xffff, /* dst_mask */ ++ FALSE), /* pcrel_offset */ + }; + + /* Map BFD reloc types to Or1k ELF reloc types. */ +@@ -871,6 +885,7 @@ static const struct or1k_reloc_map or1k_reloc_map[] = + { BFD_RELOC_OR1K_TLS_IE_LO13, R_OR1K_TLS_IE_LO13 }, + { BFD_RELOC_OR1K_SLO13, R_OR1K_SLO13 }, + { BFD_RELOC_OR1K_PLTA26, R_OR1K_PLTA26 }, ++ { BFD_RELOC_OR1K_GOT_AHI16, R_OR1K_GOT_AHI16 }, + }; + + /* tls_type is a mask used to track how each symbol is accessed, +@@ -1111,6 +1126,7 @@ or1k_final_link_relocate (reloc_howto_type *howto, bfd *input_bfd, + switch (howto->type) + { + case R_OR1K_AHI16: ++ case R_OR1K_GOT_AHI16: + case R_OR1K_GOTOFF_AHI16: + case R_OR1K_TLS_IE_AHI16: + case R_OR1K_TLS_LE_AHI16: +@@ -1373,6 +1389,7 @@ or1k_elf_relocate_section (bfd *output_bfd, + } + break; + ++ case R_OR1K_GOT_AHI16: + case R_OR1K_GOT16: + case R_OR1K_GOT_PG21: + case R_OR1K_GOT_LO13: +@@ -1464,7 +1481,8 @@ or1k_elf_relocate_section (bfd *output_bfd, + /* The GOT_PG21 and GOT_LO13 relocs are pc-relative, + while the GOT16 reloc is GOT relative. */ + relocation = got_base + off; +- if (r_type == R_OR1K_GOT16) ++ if (r_type == R_OR1K_GOT16 ++ || r_type == R_OR1K_GOT_AHI16) + relocation -= got_sym_value; + + /* Addend should be zero. */ +@@ -1990,6 +2008,7 @@ or1k_elf_check_relocs (bfd *abfd, + } + break; + ++ case R_OR1K_GOT_AHI16: + case R_OR1K_GOT16: + case R_OR1K_GOT_PG21: + case R_OR1K_GOT_LO13: +diff --git a/bfd/libbfd.h b/bfd/libbfd.h +index 7271a2ad5a1..e0ee2dafc07 100644 +--- a/bfd/libbfd.h ++++ b/bfd/libbfd.h +@@ -2757,6 +2757,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", + "BFD_RELOC_OR1K_TLS_TPOFF", + "BFD_RELOC_OR1K_TLS_DTPOFF", + "BFD_RELOC_OR1K_TLS_DTPMOD", ++ "BFD_RELOC_OR1K_GOT_AHI16", + "BFD_RELOC_H8_DIR16A8", + "BFD_RELOC_H8_DIR16R8", + "BFD_RELOC_H8_DIR24A8", +diff --git a/bfd/reloc.c b/bfd/reloc.c +index 4f4b95a0b7f..fe94e0d8f91 100644 +--- a/bfd/reloc.c ++++ b/bfd/reloc.c +@@ -6204,6 +6204,8 @@ ENUMX + BFD_RELOC_OR1K_GOTPC_HI16 + ENUMX + BFD_RELOC_OR1K_GOTPC_LO16 ++ENUMX ++ BFD_RELOC_OR1K_GOT_AHI16 + ENUMX + BFD_RELOC_OR1K_GOT16 + ENUMX +diff --git a/cpu/or1k.opc b/cpu/or1k.opc +index f0adcbb00a5..5d20a1f33a7 100644 +--- a/cpu/or1k.opc ++++ b/cpu/or1k.opc +@@ -193,7 +193,7 @@ static const bfd_reloc_code_real_type or1k_imm16_relocs[][6] = { + BFD_RELOC_OR1K_GOT_LO13, + BFD_RELOC_UNUSED, + BFD_RELOC_UNUSED, +- BFD_RELOC_UNUSED }, ++ BFD_RELOC_OR1K_GOT_AHI16 }, + { BFD_RELOC_OR1K_GOTPC_LO16, + BFD_RELOC_UNUSED, + BFD_RELOC_UNUSED, +@@ -296,6 +296,11 @@ parse_reloc (const char **strp) + str += 5; + cls = RCLASS_TPOFF; + } ++ else if (strncasecmp (str, "got", 3) == 0) ++ { ++ str += 3; ++ cls = RCLASS_GOT; ++ } + + if (strncasecmp (str, "hi(", 3) == 0) + { +diff --git a/gas/testsuite/gas/or1k/reloc-1.d b/gas/testsuite/gas/or1k/reloc-1.d +index d1bcf5608bb..3a001c4ed99 100644 +--- a/gas/testsuite/gas/or1k/reloc-1.d ++++ b/gas/testsuite/gas/or1k/reloc-1.d +@@ -68,5 +68,7 @@ OFFSET TYPE VALUE + 000000ec R_OR1K_LO13 x + 000000f0 R_OR1K_GOT_LO13 x + 000000f4 R_OR1K_SLO13 x +- ++000000f8 R_OR1K_GOT_AHI16 x ++000000fc R_OR1K_GOT_AHI16 x ++00000100 R_OR1K_GOT_AHI16 x + +diff --git a/gas/testsuite/gas/or1k/reloc-1.s b/gas/testsuite/gas/or1k/reloc-1.s +index e76abef6532..562609aa869 100644 +--- a/gas/testsuite/gas/or1k/reloc-1.s ++++ b/gas/testsuite/gas/or1k/reloc-1.s +@@ -74,3 +74,7 @@ + l.lbz r5,po(x)(r3) + l.lbz r5,gotpo(x)(r3) + l.sb po(x)(r3),r6 ++ ++ l.movhi r4,gotha(x) ++ l.ori r3,r4,gotha(x) ++ l.addi r3,r4,gotha(x) +diff --git a/include/elf/or1k.h b/include/elf/or1k.h +index 7f281481061..69ab90584a2 100644 +--- a/include/elf/or1k.h ++++ b/include/elf/or1k.h +@@ -77,6 +77,7 @@ START_RELOC_NUMBERS (elf_or1k_reloc_type) + RELOC_NUMBER (R_OR1K_TLS_IE_LO13, 51) + RELOC_NUMBER (R_OR1K_SLO13, 52) + RELOC_NUMBER (R_OR1K_PLTA26, 53) ++ RELOC_NUMBER (R_OR1K_GOT_AHI16, 54) + END_RELOC_NUMBERS (R_OR1K_max) + + #define EF_OR1K_NODELAY (1UL << 0) +diff --git a/opcodes/or1k-asm.c b/opcodes/or1k-asm.c +index 045ab6230b6..fdccf67f9e1 100644 +--- a/opcodes/or1k-asm.c ++++ b/opcodes/or1k-asm.c +@@ -177,7 +177,7 @@ static const bfd_reloc_code_real_type or1k_imm16_relocs[][6] = { + BFD_RELOC_OR1K_GOT_LO13, + BFD_RELOC_UNUSED, + BFD_RELOC_UNUSED, +- BFD_RELOC_UNUSED }, ++ BFD_RELOC_OR1K_GOT_AHI16 }, + { BFD_RELOC_OR1K_GOTPC_LO16, + BFD_RELOC_UNUSED, + BFD_RELOC_UNUSED, +@@ -280,6 +280,11 @@ parse_reloc (const char **strp) + str += 5; + cls = RCLASS_TPOFF; + } ++ else if (strncasecmp (str, "got", 3) == 0) ++ { ++ str += 3; ++ cls = RCLASS_GOT; ++ } + + if (strncasecmp (str, "hi(", 3) == 0) + { +-- +2.25.1 + diff --git a/package/binutils/2.36.1/0005-or1k-Avoid-R_OR1K_GOT16-overflow-failures-in-presenc.patch b/package/binutils/2.36.1/0005-or1k-Avoid-R_OR1K_GOT16-overflow-failures-in-presenc.patch new file mode 100644 index 00000000..618072fb --- /dev/null +++ b/package/binutils/2.36.1/0005-or1k-Avoid-R_OR1K_GOT16-overflow-failures-in-presenc.patch @@ -0,0 +1,61 @@ +From de914df5f2ba23a9f6f1fbf6efdc22e1b045901c Mon Sep 17 00:00:00 2001 +From: Stafford Horne +Date: Sun, 2 May 2021 06:02:16 +0900 +Subject: [PATCH] or1k: Avoid R_OR1K_GOT16 overflow failures in presence of + R_OR1K_GOT_AHI16 + +Now that we support R_OR1K_GOT_AHI16 we can relax the R_OR1K_GOT16 +overflow validation check if the section has R_OR1K_GOT_AHI16. + +We cannot simple disable R_OR1K_GOT16 overflow validation as there will +still be binaries that will have only R_OR1K_GOT16. The +R_OR1K_GOT_AHI16 relocation will only be added by GCC when building with +the option -mcmodel=large. + +This assumes that R_OR1K_GOT_AHI16 will come before R_OR1K_GOT16, which +is the code pattern that will be emitted by GCC. + +bfd/ChangeLog: + + PR 21464 + * elf32-or1k.c (or1k_elf_relocate_section): Relax R_OR1K_GOT16 + overflow check if we have R_OR1K_GOT_AHI16 followed by + R_OR1K_GOT16. + +Signed-off-by: Giulio Benetti +--- + bfd/elf32-or1k.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index 48461854a96..44e67f2b84b 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -1278,6 +1278,7 @@ or1k_elf_relocate_section (bfd *output_bfd, + asection *sgot, *splt; + bfd_vma plt_base, got_base, got_sym_value; + bfd_boolean ret_val = TRUE; ++ bfd_boolean saw_gotha = FALSE; + + if (htab == NULL) + return FALSE; +@@ -1485,6 +1486,16 @@ or1k_elf_relocate_section (bfd *output_bfd, + || r_type == R_OR1K_GOT_AHI16) + relocation -= got_sym_value; + ++ if (r_type == R_OR1K_GOT_AHI16) ++ saw_gotha = TRUE; ++ ++ /* If we have a R_OR1K_GOT16 followed by a R_OR1K_GOT_AHI16 ++ relocation we assume the code is doing the right thing to avoid ++ overflows. Here we mask the lower 16-bit of the relocation to ++ avoid overflow validation failures. */ ++ if (r_type == R_OR1K_GOT16 && saw_gotha) ++ relocation &= 0xffff; ++ + /* Addend should be zero. */ + if (rel->r_addend != 0) + { +-- +2.25.1 + diff --git a/package/binutils/2.36.1/0006-or1k-Support-large-plt_relocs-when-generating-plt-en.patch b/package/binutils/2.36.1/0006-or1k-Support-large-plt_relocs-when-generating-plt-en.patch new file mode 100644 index 00000000..6d50852f --- /dev/null +++ b/package/binutils/2.36.1/0006-or1k-Support-large-plt_relocs-when-generating-plt-en.patch @@ -0,0 +1,500 @@ +From 4a7b357d0c802685bee7706bafb9702c821286e1 Mon Sep 17 00:00:00 2001 +From: Stafford Horne +Date: Sun, 2 May 2021 06:02:17 +0900 +Subject: [PATCH] or1k: Support large plt_relocs when generating plt + entries + +The current PLT generation code will generate invalid code when the PLT +relocation offset exceeds 64k. This fixes the issue by detecting large +plt_reloc offsets and generare code sequences to create larger plt +relocations. + +The "large" plt code needs 2 extra instructions to create 32-bit offsets. + +bfd/ChangeLog: + + PR 27746 + * elf32-or1k.c (PLT_ENTRY_SIZE_LARGE, PLT_MAX_INSN_COUNT, + OR1K_ADD, OR1K_ORI): New macros to help with plt creation. + (elf_or1k_link_hash_table): New field plt_count. + (elf_or1k_link_hash_entry): New field plt_index. + (elf_or1k_plt_entry_size): New function. + (or1k_write_plt_entry): Update to support variable size PLTs. + (or1k_elf_finish_dynamic_sections): Use new or1k_write_plt_entry + API. + (or1k_elf_finish_dynamic_symbol): Update to write large PLTs + when needed. + (allocate_dynrelocs): Use elf_or1k_plt_entry_size to account for + PLT size. + +ld/ChangeLog: + + PR 27746 + testsuite/ld-or1k/or1k.exp (or1kplttests): Add tests for linking + along with gotha() relocations. + testsuite/ld-or1k/gotha1.dd: New file. + testsuite/ld-or1k/gotha1.s: New file. + testsuite/ld-or1k/gotha2.dd: New file. + testsuite/ld-or1k/gotha2.s: New file + testsuite/ld-or1k/pltlib.s (x): Define size to avoid link + failure. + +Signed-off-by: Giulio Benetti +--- + bfd/elf32-or1k.c | 149 ++++++++++++++++++++++++--------- + ld/testsuite/ld-or1k/gotha1.dd | 34 ++++++++ + ld/testsuite/ld-or1k/gotha1.s | 24 ++++++ + ld/testsuite/ld-or1k/gotha2.dd | 21 +++++ + ld/testsuite/ld-or1k/gotha2.s | 22 +++++ + ld/testsuite/ld-or1k/or1k.exp | 8 ++ + ld/testsuite/ld-or1k/pltlib.s | 1 + + 7 files changed, 220 insertions(+), 39 deletions(-) + create mode 100644 ld/testsuite/ld-or1k/gotha1.dd + create mode 100644 ld/testsuite/ld-or1k/gotha1.s + create mode 100644 ld/testsuite/ld-or1k/gotha2.dd + create mode 100644 ld/testsuite/ld-or1k/gotha2.s + +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index 44e67f2b84b..3da68e52425 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -30,10 +30,14 @@ + #define N_ONES(X) (((bfd_vma)2 << (X)) - 1) + + #define PLT_ENTRY_SIZE 16 ++#define PLT_ENTRY_SIZE_LARGE (6*4) ++#define PLT_MAX_INSN_COUNT 6 + + #define OR1K_MOVHI(D) (0x18000000 | (D << 21)) + #define OR1K_ADRP(D) (0x08000000 | (D << 21)) + #define OR1K_LWZ(D,A) (0x84000000 | (D << 21) | (A << 16)) ++#define OR1K_ADD(D,A,B) (0xE0000000 | (D << 21) | (A << 16) | (B << 11)) ++#define OR1K_ORI(D,A) (0xA8000000 | (D << 21) | (A << 16)) + #define OR1K_ORI0(D) (0xA8000000 | (D << 21)) + #define OR1K_JR(B) (0x44000000 | (B << 11)) + #define OR1K_NOP 0x15000000 +@@ -907,6 +911,8 @@ struct elf_or1k_link_hash_entry + { + struct elf_link_hash_entry root; + ++ /* For calculating PLT size. */ ++ bfd_vma plt_index; + /* Track type of TLS access. */ + unsigned char tls_type; + }; +@@ -931,9 +937,20 @@ struct elf_or1k_link_hash_table + { + struct elf_link_hash_table root; + ++ bfd_vma plt_count; + bfd_boolean saw_plta; + }; + ++static size_t ++elf_or1k_plt_entry_size (bfd_vma plt_index) ++{ ++ bfd_vma plt_reloc; ++ ++ plt_reloc = plt_index * sizeof (Elf32_External_Rela); ++ ++ return (plt_reloc > 0xffff) ? PLT_ENTRY_SIZE_LARGE : PLT_ENTRY_SIZE; ++} ++ + /* Get the ELF linker hash table from a link_info structure. */ + #define or1k_elf_hash_table(p) \ + ((is_elf_hash_table ((p)->hash) \ +@@ -2222,33 +2239,46 @@ or1k_elf_check_relocs (bfd *abfd, + } + + static void +-or1k_write_plt_entry (bfd *output_bfd, bfd_byte *contents, unsigned insn1, +- unsigned insn2, unsigned insn3, unsigned insnj) ++or1k_write_plt_entry (bfd *output_bfd, bfd_byte *contents, unsigned insnj, ++ unsigned insns[], size_t insn_count) + { + unsigned nodelay = elf_elfheader (output_bfd)->e_flags & EF_OR1K_NODELAY; +- unsigned insn4; ++ unsigned output_insns[PLT_MAX_INSN_COUNT]; ++ ++ /* Copy instructions into the output buffer. */ ++ for (size_t i = 0; i < insn_count; i++) ++ output_insns[i] = insns[i]; + + /* Honor the no-delay-slot setting. */ +- if (insn3 == OR1K_NOP) ++ if (insns[insn_count-1] == OR1K_NOP) + { +- insn4 = insn3; ++ unsigned slot1, slot2; ++ + if (nodelay) +- insn3 = insnj; ++ slot1 = insns[insn_count-2], slot2 = insnj; + else +- insn3 = insn2, insn2 = insnj; ++ slot1 = insnj, slot2 = insns[insn_count-2]; ++ ++ output_insns[insn_count-2] = slot1; ++ output_insns[insn_count-1] = slot2; ++ output_insns[insn_count] = OR1K_NOP; + } + else + { ++ unsigned slot1, slot2; ++ + if (nodelay) +- insn4 = insnj; ++ slot1 = insns[insn_count-1], slot2 = insnj; + else +- insn4 = insn3, insn3 = insnj; ++ slot1 = insnj, slot2 = insns[insn_count-1]; ++ ++ output_insns[insn_count-1] = slot1; ++ output_insns[insn_count] = slot2; + } + +- bfd_put_32 (output_bfd, insn1, contents); +- bfd_put_32 (output_bfd, insn2, contents + 4); +- bfd_put_32 (output_bfd, insn3, contents + 8); +- bfd_put_32 (output_bfd, insn4, contents + 12); ++ /* Write out the output buffer. */ ++ for (size_t i = 0; i < (insn_count+1); i++) ++ bfd_put_32 (output_bfd, output_insns[i], contents + (i*4)); + } + + /* Finish up the dynamic sections. */ +@@ -2315,7 +2345,8 @@ or1k_elf_finish_dynamic_sections (bfd *output_bfd, + splt = htab->root.splt; + if (splt && splt->size > 0) + { +- unsigned plt0, plt1, plt2; ++ unsigned plt[PLT_MAX_INSN_COUNT]; ++ size_t plt_insn_count = 3; + bfd_vma got_addr = sgot->output_section->vma + sgot->output_offset; + + /* Note we force 16 byte alignment on the .got, so that +@@ -2326,27 +2357,27 @@ or1k_elf_finish_dynamic_sections (bfd *output_bfd, + bfd_vma pc = splt->output_section->vma + splt->output_offset; + unsigned pa = ((got_addr >> 13) - (pc >> 13)) & 0x1fffff; + unsigned po = got_addr & 0x1fff; +- plt0 = OR1K_ADRP(12) | pa; +- plt1 = OR1K_LWZ(15,12) | (po + 8); +- plt2 = OR1K_LWZ(12,12) | (po + 4); ++ plt[0] = OR1K_ADRP(12) | pa; ++ plt[1] = OR1K_LWZ(15,12) | (po + 8); ++ plt[2] = OR1K_LWZ(12,12) | (po + 4); + } + else if (bfd_link_pic (info)) + { +- plt0 = OR1K_LWZ(15, 16) | 8; /* .got+8 */ +- plt1 = OR1K_LWZ(12, 16) | 4; /* .got+4 */ +- plt2 = OR1K_NOP; ++ plt[0] = OR1K_LWZ(15, 16) | 8; /* .got+8 */ ++ plt[1] = OR1K_LWZ(12, 16) | 4; /* .got+4 */ ++ plt[2] = OR1K_NOP; + } + else + { + unsigned ha = ((got_addr + 0x8000) >> 16) & 0xffff; + unsigned lo = got_addr & 0xffff; +- plt0 = OR1K_MOVHI(12) | ha; +- plt1 = OR1K_LWZ(15,12) | (lo + 8); +- plt2 = OR1K_LWZ(12,12) | (lo + 4); ++ plt[0] = OR1K_MOVHI(12) | ha; ++ plt[1] = OR1K_LWZ(15,12) | (lo + 8); ++ plt[2] = OR1K_LWZ(12,12) | (lo + 4); + } + +- or1k_write_plt_entry (output_bfd, splt->contents, +- plt0, plt1, plt2, OR1K_JR(15)); ++ or1k_write_plt_entry (output_bfd, splt->contents, OR1K_JR(15), ++ plt, plt_insn_count); + + elf_section_data (splt->output_section)->this_hdr.sh_entsize = 4; + } +@@ -2389,7 +2420,8 @@ or1k_elf_finish_dynamic_symbol (bfd *output_bfd, + + if (h->plt.offset != (bfd_vma) -1) + { +- unsigned int plt0, plt1, plt2; ++ unsigned int plt[PLT_MAX_INSN_COUNT]; ++ size_t plt_insn_count = 3; + asection *splt; + asection *sgot; + asection *srela; +@@ -2401,6 +2433,7 @@ or1k_elf_finish_dynamic_symbol (bfd *output_bfd, + bfd_vma got_offset; + bfd_vma got_addr; + Elf_Internal_Rela rela; ++ bfd_boolean large_plt_entry; + + /* This symbol has an entry in the procedure linkage table. Set + it up. */ +@@ -2418,10 +2451,13 @@ or1k_elf_finish_dynamic_symbol (bfd *output_bfd, + corresponds to this symbol. This is the index of this symbol + in all the symbols for which we are making plt entries. The + first entry in the procedure linkage table is reserved. */ +- plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1; ++ plt_index = ((struct elf_or1k_link_hash_entry *) h)->plt_index; + plt_addr = plt_base_addr + h->plt.offset; + plt_reloc = plt_index * sizeof (Elf32_External_Rela); + ++ large_plt_entry = (elf_or1k_plt_entry_size (plt_index) ++ == PLT_ENTRY_SIZE_LARGE); ++ + /* Get the offset into the .got table of the entry that + corresponds to this function. Each .got entry is 4 bytes. + The first three are reserved. */ +@@ -2433,27 +2469,57 @@ or1k_elf_finish_dynamic_symbol (bfd *output_bfd, + { + unsigned pa = ((got_addr >> 13) - (plt_addr >> 13)) & 0x1fffff; + unsigned po = (got_addr & 0x1fff); +- plt0 = OR1K_ADRP(12) | pa; +- plt1 = OR1K_LWZ(12,12) | po; +- plt2 = OR1K_ORI0(11) | plt_reloc; ++ plt[0] = OR1K_ADRP(12) | pa; ++ plt[1] = OR1K_LWZ(12,12) | po; ++ plt[2] = OR1K_ORI0(11) | plt_reloc; + } + else if (bfd_link_pic (info)) + { +- plt0 = OR1K_LWZ(12,16) | got_offset; +- plt1 = OR1K_ORI0(11) | plt_reloc; +- plt2 = OR1K_NOP; ++ if (large_plt_entry) ++ { ++ unsigned gotha = ((got_offset + 0x8000) >> 16) & 0xffff; ++ unsigned got = got_offset & 0xffff; ++ unsigned pltrelhi = (plt_reloc >> 16) & 0xffff; ++ unsigned pltrello = plt_reloc & 0xffff; ++ ++ plt[0] = OR1K_MOVHI(12) | gotha; ++ plt[1] = OR1K_ADD(12,12,16); ++ plt[2] = OR1K_LWZ(12,12) | got; ++ plt[3] = OR1K_MOVHI(11) | pltrelhi; ++ plt[4] = OR1K_ORI(11,11) | pltrello; ++ plt_insn_count = 5; ++ } ++ else ++ { ++ plt[0] = OR1K_LWZ(12,16) | got_offset; ++ plt[1] = OR1K_ORI0(11) | plt_reloc; ++ plt[2] = OR1K_NOP; ++ } + } + else + { + unsigned ha = ((got_addr + 0x8000) >> 16) & 0xffff; + unsigned lo = got_addr & 0xffff; +- plt0 = OR1K_MOVHI(12) | ha; +- plt1 = OR1K_LWZ(12,12) | lo; +- plt2 = OR1K_ORI0(11) | plt_reloc; ++ plt[0] = OR1K_MOVHI(12) | ha; ++ plt[1] = OR1K_LWZ(12,12) | lo; ++ plt[2] = OR1K_ORI0(11) | plt_reloc; ++ } ++ ++ /* For large code model we fixup the non-PIC PLT relocation instructions ++ here. */ ++ if (large_plt_entry && !bfd_link_pic (info)) ++ { ++ unsigned pltrelhi = (plt_reloc >> 16) & 0xffff; ++ unsigned pltrello = plt_reloc & 0xffff; ++ ++ plt[2] = OR1K_MOVHI(11) | pltrelhi; ++ plt[3] = OR1K_ORI(11,11) | pltrello; ++ plt[4] = OR1K_NOP; ++ plt_insn_count = 5; + } + + or1k_write_plt_entry (output_bfd, splt->contents + h->plt.offset, +- plt0, plt1, plt2, OR1K_JR(12)); ++ OR1K_JR(12), plt, plt_insn_count); + + /* Fill in the entry in the global offset table. We initialize it to + point to the top of the plt. This is done to lazy lookup the actual +@@ -2777,11 +2843,16 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h)) + { + asection *splt = htab->root.splt; ++ bfd_vma plt_index; ++ ++ /* Track the index of our plt entry for use in calculating size. */ ++ plt_index = htab->plt_count++; ++ ((struct elf_or1k_link_hash_entry *) h)->plt_index = plt_index; + + /* If this is the first .plt entry, make room for the special + first entry. */ + if (splt->size == 0) +- splt->size = PLT_ENTRY_SIZE; ++ splt->size = elf_or1k_plt_entry_size (plt_index); + + h->plt.offset = splt->size; + +@@ -2798,7 +2869,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) + } + + /* Make room for this entry. */ +- splt->size += PLT_ENTRY_SIZE; ++ splt->size += elf_or1k_plt_entry_size (plt_index); + + /* We also need to make an entry in the .got.plt section, which + will be placed in the .got section by the linker script. */ +diff --git a/ld/testsuite/ld-or1k/gotha1.dd b/ld/testsuite/ld-or1k/gotha1.dd +new file mode 100644 +index 00000000000..0ad1f8f5399 +--- /dev/null ++++ b/ld/testsuite/ld-or1k/gotha1.dd +@@ -0,0 +1,34 @@ ++ ++.*\.x: file format elf32-or1k ++ ++ ++Disassembly of section \.plt: ++ ++[0-9a-f]+ <\.plt>: ++ +[0-9a-f]+: 19 80 00 00 l\.movhi r12,0x0 ++ +[0-9a-f]+: 85 ec [0-9a-f]+ [0-9a-f]+ l\.lwz r15,[0-9]+\(r12\) ++ +[0-9a-f]+: 44 00 78 00 l\.jr r15 ++ +[0-9a-f]+: 85 8c [0-9a-f]+ [0-9a-f]+ l\.lwz r12,[0-9]+\(r12\) ++ +[0-9a-f]+: 19 80 00 00 l\.movhi r12,0x0 ++ +[0-9a-f]+: 85 8c [0-9a-f]+ [0-9a-f]+ l\.lwz r12,[0-9]+\(r12\) ++ +[0-9a-f]+: 44 00 60 00 l\.jr r12 ++ +[0-9a-f]+: a9 60 00 00 l\.ori r11,r0,0x0 ++ ++Disassembly of section \.text: ++ ++[0-9a-f]+ <_start>: ++ +[0-9a-f]+: 9c 21 ff fc l\.addi r1,r1,-4 ++ +[0-9a-f]+: d4 01 48 00 l\.sw 0\(r1\),r9 ++ +[0-9a-f]+: 04 00 00 02 l\.jal [0-9a-f]+ <_start\+0x10> ++ +[0-9a-f]+: 1a 60 00 00 l\.movhi r19,0x0 ++ +[0-9a-f]+: aa 73 [0-9a-f]+ [0-9a-f]+ l\.ori r19,r19,0x[0-9a-f]+ ++ +[0-9a-f]+: e2 73 48 00 l\.add r19,r19,r9 ++ +[0-9a-f]+: 1a 20 00 00 l\.movhi r17,0x0 ++ +[0-9a-f]+: e2 31 98 00 l\.add r17,r17,r19 ++ +[0-9a-f]+: 86 31 00 10 l\.lwz r17,16\(r17\) ++ +[0-9a-f]+: 84 71 00 00 l\.lwz r3,0\(r17\) ++ +[0-9a-f]+: 07 ff ff f2 l\.jal [0-9a-f]+ <\.plt\+0x10> ++ +[0-9a-f]+: 15 00 00 00 l\.nop 0x0 ++ +[0-9a-f]+: 85 21 00 00 l\.lwz r9,0\(r1\) ++ +[0-9a-f]+: 44 00 48 00 l\.jr r9 ++ +[0-9a-f]+: 9c 21 00 04 l\.addi r1,r1,4 +diff --git a/ld/testsuite/ld-or1k/gotha1.s b/ld/testsuite/ld-or1k/gotha1.s +new file mode 100644 +index 00000000000..42b16db425c +--- /dev/null ++++ b/ld/testsuite/ld-or1k/gotha1.s +@@ -0,0 +1,24 @@ ++ .data ++ .p2align 16 ++ ++ .text ++ .globl _start ++_start: ++ l.addi r1, r1, -4 ++ l.sw 0(r1), r9 ++ ++ l.jal 8 ++ l.movhi r19, gotpchi(_GLOBAL_OFFSET_TABLE_-4) ++ l.ori r19, r19, gotpclo(_GLOBAL_OFFSET_TABLE_+0) ++ l.add r19, r19, r9 ++ ++ l.movhi r17, gotha(x) ++ l.add r17, r17, r19 ++ l.lwz r17, got(x)(r17) ++ l.lwz r3, 0(r17) ++ ++ l.jal plt(func) ++ l.nop ++ l.lwz r9, 0(r1) ++ l.jr r9 ++ l.addi r1, r1, 4 +diff --git a/ld/testsuite/ld-or1k/gotha2.dd b/ld/testsuite/ld-or1k/gotha2.dd +new file mode 100644 +index 00000000000..fe09da5466b +--- /dev/null ++++ b/ld/testsuite/ld-or1k/gotha2.dd +@@ -0,0 +1,21 @@ ++ ++.*\.x: file format elf32-or1k ++ ++ ++Disassembly of section \.text: ++ ++[0-9a-f]+ : ++ +[0-9a-f]+: 9c 21 ff f8 l\.addi r1,r1,-8 ++ +[0-9a-f]+: d4 01 80 00 l\.sw 0\(r1\),r16 ++ +[0-9a-f]+: d4 01 48 04 l\.sw 4\(r1\),r9 ++ +[0-9a-f]+: 04 00 [0-9a-f]+ [0-9a-f]+ l\.jal [0-9a-f]+ ++ +[0-9a-f]+: 1a 00 00 00 l\.movhi r16,0x0 ++ +[0-9a-f]+: aa 10 [0-9a-f]+ [0-9a-f]+ l\.ori r16,r16,0x[0-9a-f]+ ++ +[0-9a-f]+: e2 10 48 00 l\.add r16,r16,r9 ++ +[0-9a-f]+: 1a 20 00 00 l\.movhi r17,0x0 ++ +[0-9a-f]+: e2 31 80 00 l\.add r17,r17,r16 ++ +[0-9a-f]+: 86 31 00 0c l\.lwz r17,12\(r17\) ++ +[0-9a-f]+: 85 21 00 04 l\.lwz r9,4\(r1\) ++ +[0-9a-f]+: 86 01 00 00 l\.lwz r16,0\(r1\) ++ +[0-9a-f]+: 44 00 48 00 l\.jr r9 ++ +[0-9a-f]+: 9c 21 00 08 l\.addi r1,r1,8 +diff --git a/ld/testsuite/ld-or1k/gotha2.s b/ld/testsuite/ld-or1k/gotha2.s +new file mode 100644 +index 00000000000..164b282f2dd +--- /dev/null ++++ b/ld/testsuite/ld-or1k/gotha2.s +@@ -0,0 +1,22 @@ ++ .section .text ++ .align 4 ++ .global test ++ .type test, @function ++test: ++ l.addi r1, r1, -8 ++ l.sw 0(r1), r16 ++ l.sw 4(r1), r9 ++ ++ l.jal 8 ++ l.movhi r16, gotpchi(_GLOBAL_OFFSET_TABLE_-4) ++ l.ori r16, r16, gotpclo(_GLOBAL_OFFSET_TABLE_+0) ++ l.add r16, r16, r9 ++ ++ l.movhi r17, gotha(i) ++ l.add r17, r17, r16 ++ l.lwz r17, got(i)(r17) ++ ++ l.lwz r9, 4(r1) ++ l.lwz r16, 0(r1) ++ l.jr r9 ++ l.addi r1, r1, 8 +diff --git a/ld/testsuite/ld-or1k/or1k.exp b/ld/testsuite/ld-or1k/or1k.exp +index 8bb943aacc9..f10949e89aa 100644 +--- a/ld/testsuite/ld-or1k/or1k.exp ++++ b/ld/testsuite/ld-or1k/or1k.exp +@@ -53,6 +53,14 @@ set or1kplttests { + "" {plt1.s} + {{objdump -dr plt1.x.dd}} + "plt1.x"} ++ {"gotha exec plt" "tmpdir/libpltlib.so" "" ++ "" {gotha1.s} ++ {{objdump -dr gotha1.dd}} ++ "gotha1.x"} ++ {"gotha -fpic -shared" "-fpic -shared" "" ++ "" {gotha2.s} ++ {{objdump -dr gotha2.dd}} ++ "gotha2.x"} + } + + # Not implemented yet +diff --git a/ld/testsuite/ld-or1k/pltlib.s b/ld/testsuite/ld-or1k/pltlib.s +index baf76ca1af7..8b4d7ba48fd 100644 +--- a/ld/testsuite/ld-or1k/pltlib.s ++++ b/ld/testsuite/ld-or1k/pltlib.s +@@ -1,5 +1,6 @@ + .section .data + .globl x, y ++ .size x, 4 + x: .long 33 + y: .long 44 + +-- +2.25.1 + diff --git a/package/binutils/2.36.1/0007-bfd-elf32-or1k-fix-building-with-gcc-version-5.patch b/package/binutils/2.36.1/0007-bfd-elf32-or1k-fix-building-with-gcc-version-5.patch new file mode 100644 index 00000000..c3978e22 --- /dev/null +++ b/package/binutils/2.36.1/0007-bfd-elf32-or1k-fix-building-with-gcc-version-5.patch @@ -0,0 +1,50 @@ +From c3003947e4bad18faea4337fd2073feeb30ee078 Mon Sep 17 00:00:00 2001 +From: Giulio Benetti +Date: Wed, 9 Jun 2021 17:28:27 +0200 +Subject: [PATCH] bfd/elf32-or1k: fix building with gcc version < 5 + +Gcc version >= 5 has standard C mode not set to -std=gnu11, so if we use +an old compiler(i.e. gcc 4.9) build fails on: +``` +elf32-or1k.c:2251:3: error: 'for' loop initial declarations are only allowed in +C99 or C11 mode + for (size_t i = 0; i < insn_count; i++) + ^ +``` + +So let's declare `size_t i` at the top of the function instead of inside +for loop. + +Signed-off-by: Giulio Benetti +--- + bfd/elf32-or1k.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index 4ae7f324d33..32063ab0289 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -2244,9 +2244,10 @@ or1k_write_plt_entry (bfd *output_bfd, bfd_byte *contents, unsigned insnj, + { + unsigned nodelay = elf_elfheader (output_bfd)->e_flags & EF_OR1K_NODELAY; + unsigned output_insns[PLT_MAX_INSN_COUNT]; ++ size_t i; + + /* Copy instructions into the output buffer. */ +- for (size_t i = 0; i < insn_count; i++) ++ for (i = 0; i < insn_count; i++) + output_insns[i] = insns[i]; + + /* Honor the no-delay-slot setting. */ +@@ -2277,7 +2278,7 @@ or1k_write_plt_entry (bfd *output_bfd, bfd_byte *contents, unsigned insnj, + } + + /* Write out the output buffer. */ +- for (size_t i = 0; i < (insn_count+1); i++) ++ for (i = 0; i < (insn_count+1); i++) + bfd_put_32 (output_bfd, output_insns[i], contents + (i*4)); + } + +-- +2.25.1 + diff --git a/package/binutils/2.36.1/0008-or1k-fix-pc-relative-relocation-against-dynamic-on-P.patch b/package/binutils/2.36.1/0008-or1k-fix-pc-relative-relocation-against-dynamic-on-P.patch new file mode 100644 index 00000000..585b97b2 --- /dev/null +++ b/package/binutils/2.36.1/0008-or1k-fix-pc-relative-relocation-against-dynamic-on-P.patch @@ -0,0 +1,59 @@ +From 9af93e143a7fbdb75aa1ed37277f9250eb111628 Mon Sep 17 00:00:00 2001 +From: Giulio Benetti +Date: Sat, 10 Jul 2021 17:57:34 +0200 +Subject: [PATCH] or1k: fix pc-relative relocation against dynamic on PC + relative 26 bit relocation + +When building openal we were seeing the assert failure: + +/home/buildroot/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: CMakeFiles/OpenAL.dir/al/source.cpp.o: +pc-relative relocation against dynamic symbol alSourcePausev +/home/buildroot/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: CMakeFiles/OpenAL.dir/al/source.cpp.o: +pc-relative relocation against dynamic symbol alSourceStopv +/home/buildroot/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: CMakeFiles/OpenAL.dir/al/source.cpp.o: +pc-relative relocation against dynamic symbol alSourceRewindv +/home/buildroot/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld: CMakeFiles/OpenAL.dir/al/source.cpp.o: +pc-relative relocation against dynamic symbol alSourcePlayv +collect2: error: ld returned 1 exit status + +This happens because in R_OR1K_INSN_REL_26 case we can't reference local +symbol as previously done but we need to make sure that calls to actual +symbol always call the version of current object. + +bfd/Changelog: + + * elf32-or1k.c (or1k_elf_relocate_section): use a separate entry + in switch case R_OR1K_INSN_REL_26 where we need to check for + !SYMBOL_CALLS_LOCAL() instead of !SYMBOL_REFERENCES_LOCAL(). + +Signed-off-by: Giulio Benetti +--- + bfd/elf32-or1k.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c +index 4ae7f324d33..4f9092539f5 100644 +--- a/bfd/elf32-or1k.c ++++ b/bfd/elf32-or1k.c +@@ -1543,6 +1543,18 @@ or1k_elf_relocate_section (bfd *output_bfd, + break; + + case R_OR1K_INSN_REL_26: ++ /* For a non-shared link, these will reference plt or call the ++ version of actual object. */ ++ if (bfd_link_pic (info) && !SYMBOL_CALLS_LOCAL (info, h)) ++ { ++ _bfd_error_handler ++ (_("%pB: pc-relative relocation against dynamic symbol %s"), ++ input_bfd, name); ++ ret_val = FALSE; ++ bfd_set_error (bfd_error_bad_value); ++ } ++ break; ++ + case R_OR1K_PCREL_PG21: + case R_OR1K_LO13: + case R_OR1K_SLO13: +-- +2.25.1 + diff --git a/package/binutils/Config.in b/package/binutils/Config.in new file mode 100644 index 00000000..e17a8ec6 --- /dev/null +++ b/package/binutils/Config.in @@ -0,0 +1,25 @@ +config BR2_PACKAGE_BINUTILS + bool "binutils" + depends on !BR2_nios2 + depends on BR2_USE_WCHAR + help + Install binutils on the target + +if BR2_PACKAGE_BINUTILS + +config BR2_PACKAGE_BINUTILS_TARGET + bool "binutils binaries" + help + The GNU Binutils are a collection of binary tools: + + ld - the GNU linker. + as - the GNU assembler. + and others... + + http://www.gnu.org/software/binutils/ + +endif + +comment "binutils needs a toolchain w/ wchar" + depends on !BR2_nios2 + depends on !BR2_USE_WCHAR diff --git a/package/binutils/Config.in.host b/package/binutils/Config.in.host new file mode 100644 index 00000000..d6909617 --- /dev/null +++ b/package/binutils/Config.in.host @@ -0,0 +1,67 @@ +comment "Binutils Options" + +config BR2_PACKAGE_HOST_BINUTILS_SUPPORTS_CFI + bool + default y + depends on !BR2_microblaze + +choice + prompt "Binutils Version" + default BR2_BINUTILS_VERSION_2_35_X if !BR2_arc && !BR2_csky + default BR2_BINUTILS_VERSION_ARC if BR2_arc + default BR2_BINUTILS_VERSION_CSKY if BR2_csky + help + Select the version of binutils you wish to use. + +config BR2_BINUTILS_VERSION_2_32_X + bool "binutils 2.32" + depends on !BR2_csky + +config BR2_BINUTILS_VERSION_2_34_X + bool "binutils 2.34" + depends on !BR2_csky + # https://github.com/uclinux-dev/elf2flt/pull/16 + # https://github.com/uclinux-dev/elf2flt/issues/12 + depends on !BR2_BINFMT_FLAT + +config BR2_BINUTILS_VERSION_2_35_X + bool "binutils 2.35.2" + depends on !BR2_csky + # https://github.com/uclinux-dev/elf2flt/pull/16 + # https://github.com/uclinux-dev/elf2flt/issues/12 + depends on !BR2_BINFMT_FLAT + +config BR2_BINUTILS_VERSION_2_36_X + bool "binutils 2.36.1" + depends on !BR2_csky + # https://github.com/uclinux-dev/elf2flt/pull/16 + # https://github.com/uclinux-dev/elf2flt/issues/12 + depends on !BR2_BINFMT_FLAT + +config BR2_BINUTILS_VERSION_ARC + bool "binutils arc (2.34.50)" + depends on BR2_arc + +config BR2_BINUTILS_VERSION_CSKY + bool "binutils csky" + depends on BR2_csky + +endchoice + +config BR2_BINUTILS_VERSION + string + default "arc-2020.09-release" if BR2_BINUTILS_VERSION_ARC + default "c66d8bbcebfddf713b2b436e1b135e6b125a55a5" if BR2_BINUTILS_VERSION_CSKY + default "2.32" if BR2_BINUTILS_VERSION_2_32_X + default "2.34" if BR2_BINUTILS_VERSION_2_34_X + default "2.35.2" if BR2_BINUTILS_VERSION_2_35_X + default "2.36.1" if BR2_BINUTILS_VERSION_2_36_X + +config BR2_BINUTILS_ENABLE_LTO + bool + +config BR2_BINUTILS_EXTRA_CONFIG_OPTIONS + string "Additional binutils options" + default "" + help + Any additional binutils options you may want to include. diff --git a/package/binutils/arc-2020.09-release/0001-poison-system-directories.patch b/package/binutils/arc-2020.09-release/0001-poison-system-directories.patch new file mode 100644 index 00000000..7a76ef29 --- /dev/null +++ b/package/binutils/arc-2020.09-release/0001-poison-system-directories.patch @@ -0,0 +1,310 @@ +From 5f62ad7ce534e3384d6ed8892614979da297bd70 Mon Sep 17 00:00:00 2001 +From: Evgeniy Didin +Date: Mon, 14 Oct 2019 16:45:15 +0300 +Subject: [PATCH] [PATCH] poison-system-directories + +Patch adapted to arc-binutils-gdb-2019.09 +Signed-off-by: Evgeniy Didin + +Patch adapted to binutils 2.23.2 and extended to use +BR_COMPILER_PARANOID_UNSAFE_PATH by Thomas Petazzoni. + +[Romain: rebase on top of 2.26] +Signed-off-by: Romain Naour +[Gustavo: adapt to binutils 2.25] +Signed-off-by: Thomas Petazzoni +Signed-off-by: Gustavo Zacarias + +Upstream-Status: Inappropriate [distribution: codesourcery] + +Patch originally created by Mark Hatle, forward-ported to +binutils 2.21 by Scott Garman. + +purpose: warn for uses of system directories when cross linking + +Code Merged from Sourcery G++ binutils 2.19 - 4.4-277 + +2008-07-02 Joseph Myers + + ld/ + * ld.h (args_type): Add error_poison_system_directories. + * ld.texinfo (--error-poison-system-directories): Document. + * ldfile.c (ldfile_add_library_path): Check + command_line.error_poison_system_directories. + * ldmain.c (main): Initialize + command_line.error_poison_system_directories. + * lexsup.c (enum option_values): Add + OPTION_ERROR_POISON_SYSTEM_DIRECTORIES. + (ld_options): Add --error-poison-system-directories. + (parse_args): Handle new option. + +2007-06-13 Joseph Myers + + ld/ + * config.in: Regenerate. + * ld.h (args_type): Add poison_system_directories. + * ld.texinfo (--no-poison-system-directories): Document. + * ldfile.c (ldfile_add_library_path): Check + command_line.poison_system_directories. + * ldmain.c (main): Initialize + command_line.poison_system_directories. + * lexsup.c (enum option_values): Add + OPTION_NO_POISON_SYSTEM_DIRECTORIES. + (ld_options): Add --no-poison-system-directories. + (parse_args): Handle new option. + +2007-04-20 Joseph Myers + + Merge from Sourcery G++ binutils 2.17: + + 2007-03-20 Joseph Myers + Based on patch by Mark Hatle . + ld/ + * configure.ac (--enable-poison-system-directories): New option. + * configure, config.in: Regenerate. + * ldfile.c (ldfile_add_library_path): If + ENABLE_POISON_SYSTEM_DIRECTORIES defined, warn for use of /lib, + /usr/lib, /usr/local/lib or /usr/X11R6/lib. + +Signed-off-by: Mark Hatle +Signed-off-by: Scott Garman +--- + ld/config.in | 3 +++ + ld/configure | 14 ++++++++++++++ + ld/configure.ac | 10 ++++++++++ + ld/ld.h | 8 ++++++++ + ld/ld.texi | 12 ++++++++++++ + ld/ldfile.c | 17 +++++++++++++++++ + ld/ldlex.h | 2 ++ + ld/ldmain.c | 2 ++ + ld/lexsup.c | 21 +++++++++++++++++++++ + 9 files changed, 89 insertions(+) + +diff --git a/ld/config.in b/ld/config.in +index d93c9b08300..5da2742beac 100644 +--- a/ld/config.in ++++ b/ld/config.in +@@ -31,6 +31,9 @@ + language is requested. */ + #undef ENABLE_NLS + ++/* Define to warn for use of native system library directories */ ++#undef ENABLE_POISON_SYSTEM_DIRECTORIES ++ + /* Additional extension a shared object might have. */ + #undef EXTRA_SHLIB_EXTENSION + +diff --git a/ld/configure b/ld/configure +index 2d6ca5c0445..563f9921f7f 100755 +--- a/ld/configure ++++ b/ld/configure +@@ -823,6 +823,7 @@ with_lib_path + enable_targets + enable_64_bit_bfd + with_sysroot ++enable_poison_system_directories + enable_gold + enable_got + enable_compressed_debug_sections +@@ -1487,6 +1488,8 @@ Optional Features: + --disable-largefile omit support for large files + --enable-targets alternative target configurations + --enable-64-bit-bfd 64-bit support (on hosts with narrower word sizes) ++ --enable-poison-system-directories ++ warn for use of native system library directories + --enable-gold[=ARG] build gold [ARG={default,yes,no}] + --enable-got= GOT handling scheme (target, single, negative, + multigot) +@@ -15804,7 +15807,18 @@ else + fi + + ++# Check whether --enable-poison-system-directories was given. ++if test "${enable_poison_system_directories+set}" = set; then : ++ enableval=$enable_poison_system_directories; ++else ++ enable_poison_system_directories=no ++fi ++ ++if test "x${enable_poison_system_directories}" = "xyes"; then + ++$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h ++ ++fi + + # Check whether --enable-got was given. + if test "${enable_got+set}" = set; then : +diff --git a/ld/configure.ac b/ld/configure.ac +index 41a51bbb7e9..dbaa98a9e17 100644 +--- a/ld/configure.ac ++++ b/ld/configure.ac +@@ -94,6 +94,16 @@ AC_SUBST(use_sysroot) + AC_SUBST(TARGET_SYSTEM_ROOT) + AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE) + ++AC_ARG_ENABLE([poison-system-directories], ++ AS_HELP_STRING([--enable-poison-system-directories], ++ [warn for use of native system library directories]),, ++ [enable_poison_system_directories=no]) ++if test "x${enable_poison_system_directories}" = "xyes"; then ++ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES], ++ [1], ++ [Define to warn for use of native system library directories]) ++fi ++ + dnl Use --enable-gold to decide if this linker should be the default. + dnl "install_as_default" is set to false if gold is the default linker. + dnl "installed_linker" is the installed BFD linker name. +diff --git a/ld/ld.h b/ld/ld.h +index 55078a9637b..511e9bc34b7 100644 +--- a/ld/ld.h ++++ b/ld/ld.h +@@ -180,6 +180,14 @@ typedef struct + in the linker script. */ + bfd_boolean force_group_allocation; + ++ /* If TRUE (the default) warn for uses of system directories when ++ cross linking. */ ++ bfd_boolean poison_system_directories; ++ ++ /* If TRUE (default FALSE) give an error for uses of system ++ directories when cross linking instead of a warning. */ ++ bfd_boolean error_poison_system_directories; ++ + /* Big or little endian as set on command line. */ + enum endian_enum endian; + +diff --git a/ld/ld.texi b/ld/ld.texi +index fcbc335c95e..6ba7ebdb32a 100644 +--- a/ld/ld.texi ++++ b/ld/ld.texi +@@ -2557,6 +2557,18 @@ string identifying the original linked file does not change. + + Passing @code{none} for @var{style} disables the setting from any + @code{--build-id} options earlier on the command line. ++ ++@kindex --no-poison-system-directories ++@item --no-poison-system-directories ++Do not warn for @option{-L} options using system directories such as ++@file{/usr/lib} when cross linking. This option is intended for use ++in chroot environments when such directories contain the correct ++libraries for the target system rather than the host. ++ ++@kindex --error-poison-system-directories ++@item --error-poison-system-directories ++Give an error instead of a warning for @option{-L} options using ++system directories when cross linking. + @end table + + @c man end +diff --git a/ld/ldfile.c b/ld/ldfile.c +index 7f60319390e..0bcc06db964 100644 +--- a/ld/ldfile.c ++++ b/ld/ldfile.c +@@ -116,6 +116,23 @@ ldfile_add_library_path (const char *name, bfd_boolean cmdline) + new_dirs->name = concat (ld_sysroot, name + strlen ("$SYSROOT"), (const char *) NULL); + else + new_dirs->name = xstrdup (name); ++ ++#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES ++ if (command_line.poison_system_directories ++ && ((!strncmp (name, "/lib", 4)) ++ || (!strncmp (name, "/usr/lib", 8)) ++ || (!strncmp (name, "/usr/local/lib", 14)) ++ || (!strncmp (name, "/usr/X11R6/lib", 14)))) ++ { ++ if (command_line.error_poison_system_directories) ++ einfo (_("%X%P: error: library search path \"%s\" is unsafe for " ++ "cross-compilation\n"), name); ++ else ++ einfo (_("%P: warning: library search path \"%s\" is unsafe for " ++ "cross-compilation\n"), name); ++ } ++#endif ++ + } + + /* Try to open a BFD for a lang_input_statement. */ +diff --git a/ld/ldlex.h b/ld/ldlex.h +index 32a7a6409e8..c02b64bf92f 100644 +--- a/ld/ldlex.h ++++ b/ld/ldlex.h +@@ -152,6 +152,8 @@ enum option_values + OPTION_NO_PRINT_MAP_DISCARDED, + OPTION_NON_CONTIGUOUS_REGIONS, + OPTION_NON_CONTIGUOUS_REGIONS_WARNINGS, ++ OPTION_NO_POISON_SYSTEM_DIRECTORIES, ++ OPTION_ERROR_POISON_SYSTEM_DIRECTORIES, + }; + + + /* The initial parser states. */ +diff --git a/ld/ldmain.c b/ld/ldmain.c +index 34c19223137..66d2c3f4bcf 100644 +--- a/ld/ldmain.c ++++ b/ld/ldmain.c +@@ -270,6 +270,8 @@ main (int argc, char **argv) + command_line.warn_mismatch = TRUE; + command_line.warn_search_mismatch = TRUE; + command_line.check_section_addresses = -1; ++ command_line.poison_system_directories = TRUE; ++ command_line.error_poison_system_directories = FALSE; + + /* We initialize DEMANGLING based on the environment variable + COLLECT_NO_DEMANGLE. The gcc collect2 program will demangle the +diff --git a/ld/lexsup.c b/ld/lexsup.c +index 1c15ac29c0c..8b714e10a40 100644 +--- a/ld/lexsup.c ++++ b/ld/lexsup.c +@@ -549,6 +549,14 @@ static const struct ld_option ld_options[] = + { {"no-print-map-discarded", no_argument, NULL, OPTION_NO_PRINT_MAP_DISCARDED}, + '\0', NULL, N_("Do not show discarded sections in map file output"), + TWO_DASHES }, ++ { {"no-poison-system-directories", no_argument, NULL, ++ OPTION_NO_POISON_SYSTEM_DIRECTORIES}, ++ '\0', NULL, N_("Do not warn for -L options using system directories"), ++ TWO_DASHES }, ++ { {"error-poison-system-directories", no_argument, NULL, ++ OPTION_ERROR_POISON_SYSTEM_DIRECTORIES}, ++ '\0', NULL, N_("Give an error for -L options using system directories"), ++ TWO_DASHES }, + }; + + #define OPTION_COUNT ARRAY_SIZE (ld_options) +@@ -561,6 +569,7 @@ parse_args (unsigned argc, char **argv) + int ingroup = 0; + char *default_dirlist = NULL; + char *shortopts; ++ char *BR_paranoid_env; + struct option *longopts; + struct option *really_longopts; + int last_optind; +@@ -1549,6 +1558,14 @@ parse_args (unsigned argc, char **argv) + } + break; + ++ case OPTION_NO_POISON_SYSTEM_DIRECTORIES: ++ command_line.poison_system_directories = FALSE; ++ break; ++ ++ case OPTION_ERROR_POISON_SYSTEM_DIRECTORIES: ++ command_line.error_poison_system_directories = TRUE; ++ break; ++ + case OPTION_PUSH_STATE: + input_flags.pushed = xmemdup (&input_flags, + sizeof (input_flags), +@@ -1600,6 +1617,10 @@ parse_args (unsigned argc, char **argv) + command_line.soname = NULL; + } + ++ BR_paranoid_env = getenv("BR_COMPILER_PARANOID_UNSAFE_PATH"); ++ if (BR_paranoid_env && strlen(BR_paranoid_env) > 0) ++ command_line.error_poison_system_directories = TRUE; ++ + while (ingroup) + { + einfo (_("%P: missing --end-group; added as last command line option\n")); +-- +2.16.2 + diff --git a/package/binutils/binutils.hash b/package/binutils/binutils.hash new file mode 100644 index 00000000..20462b38 --- /dev/null +++ b/package/binutils/binutils.hash @@ -0,0 +1,15 @@ +# From ftp://gcc.gnu.org/pub/binutils/releases/sha512.sum +sha512 d326408f12a03d9a61a9de56584c2af12f81c2e50d2d7e835d51565df8314df01575724afa1e43bd0db45cfc9916b41519b67dfce03232aa4978704492a6994a binutils-2.32.tar.xz +sha512 2c7976939dcf5e8c5b7374cccd39bfe803b1bec73c6abfa0eb17c24e1942574c6bdb874c66a092a82adc443182eacd8a5a8001c19a76101f0c7ba40c27de0bbd binutils-2.34.tar.xz +sha512 9974ede5978d32e0d68fef23da48fa00bd06b0bff7ec45b00ca075c126d6bbe0cf2defc03ecc3f17bc6cc85b64271a13009c4049d7ba17de26e84e3a6e2c0348 binutils-2.35.2.tar.xz +sha512 cc24590bcead10b90763386b6f96bb027d7594c659c2d95174a6352e8b98465a50ec3e4088d0da038428abe059bbc4ae5f37b269f31a40fc048072c8a234f4e9 binutils-2.36.1.tar.xz + +# Locally calculated (fetched from Github) +sha512 76a8227a19218435319c660e4983ea17985194b7f496f163e97543e7f6fd3e9249241fdc05a16ba512fba96a1d846c1f7b080983404d821d6215f10e7f11e238 binutils-gdb-arc-2020.09-release.tar.gz + +# Locally calculated (fetched from https://github.com/c-sky/binutils-gdb) +sha512 979552d4b3a4f31e9f3b9a7027321bd4eb3ac6c2d8deac1720e94e54f81d736db09c53c5d87c301010e307b64127e14400a036c7a35e5d63a954a4edd9cc8e2c binutils-c66d8bbcebfddf713b2b436e1b135e6b125a55a5.tar.gz + +# locally computed +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING3 +sha256 56bdea73b6145ef6ac5259b3da390b981d840c24cb03b8e1cbc678de7ecfa18d COPYING.LIB diff --git a/package/binutils/binutils.mk b/package/binutils/binutils.mk new file mode 100644 index 00000000..e469febb --- /dev/null +++ b/package/binutils/binutils.mk @@ -0,0 +1,150 @@ +################################################################################ +# +# binutils +# +################################################################################ + +# Version is set when using buildroot toolchain. +# If not, we do like other packages +BINUTILS_VERSION = $(call qstrip,$(BR2_BINUTILS_VERSION)) +ifeq ($(BINUTILS_VERSION),) +ifeq ($(BR2_arc),y) +BINUTILS_VERSION = arc-2020.09-release +else +BINUTILS_VERSION = 2.35.2 +endif +endif # BINUTILS_VERSION + +ifeq ($(BINUTILS_VERSION),arc-2020.09-release) +BINUTILS_SITE = $(call github,foss-for-synopsys-dwc-arc-processors,binutils-gdb,$(BINUTILS_VERSION)) +BINUTILS_SOURCE = binutils-gdb-$(BINUTILS_VERSION).tar.gz +BINUTILS_FROM_GIT = y +endif + +ifeq ($(BR2_csky),y) +BINUTILS_SITE = $(call github,c-sky,binutils-gdb,$(BINUTILS_VERSION)) +BINUTILS_SOURCE = binutils-$(BINUTILS_VERSION).tar.gz +BINUTILS_FROM_GIT = y +endif + +BINUTILS_SITE ?= $(BR2_GNU_MIRROR)/binutils +BINUTILS_SOURCE ?= binutils-$(BINUTILS_VERSION).tar.xz +BINUTILS_EXTRA_CONFIG_OPTIONS = $(call qstrip,$(BR2_BINUTILS_EXTRA_CONFIG_OPTIONS)) +BINUTILS_INSTALL_STAGING = YES +BINUTILS_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) +BINUTILS_MAKE_OPTS = LIBS=$(TARGET_NLS_LIBS) +BINUTILS_LICENSE = GPL-3.0+, libiberty LGPL-2.1+ +BINUTILS_LICENSE_FILES = COPYING3 COPYING.LIB +BINUTILS_CPE_ID_VENDOR = gnu + +ifeq ($(BINUTILS_FROM_GIT),y) +BINUTILS_DEPENDENCIES += host-flex host-bison +HOST_BINUTILS_DEPENDENCIES += host-flex host-bison +endif + +# When binutils sources are fetched from the binutils-gdb repository, +# they also contain the gdb sources, but gdb shouldn't be built, so we +# disable it. +BINUTILS_DISABLE_GDB_CONF_OPTS = \ + --disable-sim \ + --disable-gdb + +# We need to specify host & target to avoid breaking ARM EABI +BINUTILS_CONF_OPTS = \ + --disable-multilib \ + --disable-werror \ + --host=$(GNU_TARGET_NAME) \ + --target=$(GNU_TARGET_NAME) \ + --enable-install-libiberty \ + --enable-build-warnings=no \ + $(BINUTILS_DISABLE_GDB_CONF_OPTS) \ + $(BINUTILS_EXTRA_CONFIG_OPTIONS) + +ifeq ($(BR2_STATIC_LIBS),y) +BINUTILS_CONF_OPTS += --disable-plugins +endif + +# Don't build documentation. It takes up extra space / build time, +# and sometimes needs specific makeinfo versions to work +BINUTILS_CONF_ENV += MAKEINFO=true +BINUTILS_MAKE_OPTS += MAKEINFO=true +BINUTILS_INSTALL_TARGET_OPTS = DESTDIR=$(TARGET_DIR) MAKEINFO=true install +HOST_BINUTILS_CONF_ENV += MAKEINFO=true +HOST_BINUTILS_MAKE_OPTS += MAKEINFO=true +HOST_BINUTILS_INSTALL_OPTS += MAKEINFO=true install + +# Workaround a build issue with -Os for ARM Cortex-M cpus. +# (Binutils 2.25.1 and 2.26.1) +# https://sourceware.org/bugzilla/show_bug.cgi?id=20552 +ifeq ($(BR2_ARM_CPU_ARMV7M)$(BR2_OPTIMIZE_S),yy) +BINUTILS_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) -O2" +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +BINUTILS_DEPENDENCIES += zlib +endif + +# "host" binutils should actually be "cross" +# We just keep the convention of "host utility" for now +HOST_BINUTILS_CONF_OPTS = \ + --disable-multilib \ + --disable-werror \ + --target=$(GNU_TARGET_NAME) \ + --disable-shared \ + --enable-static \ + --with-sysroot=$(STAGING_DIR) \ + --enable-poison-system-directories \ + --without-debuginfod \ + $(BINUTILS_DISABLE_GDB_CONF_OPTS) \ + $(BINUTILS_EXTRA_CONFIG_OPTIONS) + +# binutils run configure script of subdirs at make time, so ensure +# our TARGET_CONFIGURE_ARGS are taken into consideration for those +BINUTILS_MAKE_ENV = $(TARGET_CONFIGURE_ARGS) + +# We just want libbfd, libiberty and libopcodes, +# not the full-blown binutils in staging +define BINUTILS_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/bfd DESTDIR=$(STAGING_DIR) install + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/opcodes DESTDIR=$(STAGING_DIR) install + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/libiberty DESTDIR=$(STAGING_DIR) install +endef + +# If we don't want full binutils on target +ifneq ($(BR2_PACKAGE_BINUTILS_TARGET),y) +define BINUTILS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/bfd DESTDIR=$(TARGET_DIR) install + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/opcodes DESTDIR=$(TARGET_DIR) install + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/libiberty DESTDIR=$(STAGING_DIR) install +endef +endif + +ifneq ($(ARCH_XTENSA_OVERLAY_FILE),) +define BINUTILS_XTENSA_OVERLAY_EXTRACT + $(call arch-xtensa-overlay-extract,$(@D),binutils) +endef +BINUTILS_POST_EXTRACT_HOOKS += BINUTILS_XTENSA_OVERLAY_EXTRACT +BINUTILS_EXTRA_DOWNLOADS += $(ARCH_XTENSA_OVERLAY_URL) +HOST_BINUTILS_POST_EXTRACT_HOOKS += BINUTILS_XTENSA_OVERLAY_EXTRACT +HOST_BINUTILS_EXTRA_DOWNLOADS += $(ARCH_XTENSA_OVERLAY_URL) +endif + +ifeq ($(BR2_BINUTILS_ENABLE_LTO),y) +HOST_BINUTILS_CONF_OPTS += --enable-plugins --enable-lto +endif + +# Hardlinks between binaries in different directories cause a problem +# with rpath fixup, so we de-hardlink those binaries, and replace them +# with copies instead. +BINUTILS_TOOLS = ar as ld ld.bfd nm objcopy objdump ranlib readelf strip +define HOST_BINUTILS_FIXUP_HARDLINKS + $(foreach tool,$(BINUTILS_TOOLS),\ + rm -f $(HOST_DIR)/$(GNU_TARGET_NAME)/bin/$(tool) && \ + cp -a $(HOST_DIR)/bin/$(GNU_TARGET_NAME)-$(tool) \ + $(HOST_DIR)/$(GNU_TARGET_NAME)/bin/$(tool) + ) +endef +HOST_BINUTILS_POST_INSTALL_HOOKS += HOST_BINUTILS_FIXUP_HARDLINKS + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/biosdevname/Config.in b/package/biosdevname/Config.in new file mode 100644 index 00000000..5cdf5426 --- /dev/null +++ b/package/biosdevname/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_BIOSDEVNAME + bool "biosdevname" + depends on BR2_i386 || BR2_x86_64 + depends on BR2_PACKAGE_HAS_UDEV + select BR2_PACKAGE_PCIUTILS + select BR2_PACKAGE_ZLIB + help + Biosdevname is a udev helper that looks at various BIOS tables + to figure out what the actual hardware names are for Ethernet + ports and renames the ports accordingly. This has the + advantage of always referring to the same port regardless of + system or hardware changes that might otherwise alter the + typical ethX naming. + + https://github.com/dell/biosdevname/ diff --git a/package/biosdevname/biosdevname.hash b/package/biosdevname/biosdevname.hash new file mode 100644 index 00000000..f4470c32 --- /dev/null +++ b/package/biosdevname/biosdevname.hash @@ -0,0 +1,3 @@ +# Locally computed hashes, not provided by upstream +sha256 3a67fee0c315996bbba586c1c077e57625382d38dc48fb3c9e84d56a7a5effad biosdevname-0.7.3.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/biosdevname/biosdevname.mk b/package/biosdevname/biosdevname.mk new file mode 100644 index 00000000..574608c5 --- /dev/null +++ b/package/biosdevname/biosdevname.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# biosdevname +# +################################################################################ + +BIOSDEVNAME_VERSION = 0.7.3 +BIOSDEVNAME_SITE = $(call github,dell,biosdevname,v$(BIOSDEVNAME_VERSION)) +BIOSDEVNAME_LICENSE = GPL +BIOSDEVNAME_LICENSE_FILES = COPYING +BIOSDEVNAME_CONF_OPTS = --exec-prefix=/ +BIOSDEVNAME_DEPENDENCIES = pciutils udev zlib +BIOSDEVNAME_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/bird/0001-Nest-Fix-build-without-protocols.patch b/package/bird/0001-Nest-Fix-build-without-protocols.patch new file mode 100644 index 00000000..48d21441 --- /dev/null +++ b/package/bird/0001-Nest-Fix-build-without-protocols.patch @@ -0,0 +1,28 @@ +From f9eb9b4cab65b850c61738dd56632bae0e7329ca Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 19 Oct 2019 12:50:27 +0200 +Subject: [PATCH] Nest: Fix build without protocols + +(CHECK keyword added by commiter) +[Retrieved from: +https://gitlab.labs.nic.cz/labs/bird/commit/f9eb9b4cab65b850c61738dd56632bae0e7329ca] +Signed-off-by: Fabrice Fontaine +--- + nest/config.Y | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/nest/config.Y b/nest/config.Y +index c62501a3..1bc203dd 100644 +--- a/nest/config.Y ++++ b/nest/config.Y +@@ -75,6 +75,7 @@ CF_KEYWORDS(BGP, PASSWORDS, DESCRIPTION, SORTED) + CF_KEYWORDS(RELOAD, IN, OUT, MRTDUMP, MESSAGES, RESTRICT, MEMORY, IGP_METRIC, CLASS, DSCP) + CF_KEYWORDS(TIMEFORMAT, ISO, SHORT, LONG, ROUTE, PROTOCOL, BASE, LOG, S, MS, US) + CF_KEYWORDS(GRACEFUL, RESTART, WAIT, MAX, FLUSH, AS) ++CF_KEYWORDS(CHECK, LINK) + + /* For r_args_channel */ + CF_KEYWORDS(IPV4, IPV4_MC, IPV4_MPLS, IPV6, IPV6_MC, IPV6_MPLS, IPV6_SADR, VPN4, VPN4_MC, VPN4_MPLS, VPN6, VPN6_MC, VPN6_MPLS, ROA4, ROA6, FLOW4, FLOW6, MPLS, PRI, SEC) +-- +2.21.0 + diff --git a/package/bird/0002-Added-missing-extern.patch b/package/bird/0002-Added-missing-extern.patch new file mode 100644 index 00000000..00aab3e9 --- /dev/null +++ b/package/bird/0002-Added-missing-extern.patch @@ -0,0 +1,34 @@ +From 4bbc10614f3431c37e6352f5a6ea5c693c31021e Mon Sep 17 00:00:00 2001 +From: Maria Matejka +Date: Tue, 4 Feb 2020 10:11:16 +0100 +Subject: [PATCH] Added missing extern +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Thanks to Robert Scheck who reported it +and Toke Høiland-Jørgensen who suggested this patch. + +[Retrieved from: +https://gitlab.nic.cz/labs/bird/-/commit/4bbc10614f3431c37e6352f5a6ea5c693c31021e] +Signed-off-by: Fabrice Fontaine +--- + nest/route.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/nest/route.h b/nest/route.h +index d2a07f09..b927db5f 100644 +--- a/nest/route.h ++++ b/nest/route.h +@@ -458,7 +458,7 @@ typedef struct rta { + protocol-specific metric is availabe */ + + +-const char * rta_dest_names[RTD_MAX]; ++extern const char * rta_dest_names[RTD_MAX]; + + static inline const char *rta_dest_name(uint n) + { return (n < RTD_MAX) ? rta_dest_names[n] : "???"; } +-- +2.26.2 + diff --git a/package/bird/Config.in b/package/bird/Config.in new file mode 100644 index 00000000..e78dfdf9 --- /dev/null +++ b/package/bird/Config.in @@ -0,0 +1,81 @@ +config BR2_PACKAGE_BIRD + bool "bird" + depends on !BR2_nios2 # relocations don't fit + depends on BR2_USE_MMU # fork() + help + BIRD Internet Routing Daemon + + The BIRD project aims to develop a dynamic IP routing daemon + with full support of all modern routing protocols, easy to + use configuration interface and powerful route filtering + language + + http://bird.network.cz/ + +if BR2_PACKAGE_BIRD + +config BR2_PACKAGE_BIRD_CLIENT + bool "birdc" + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_READLINE + help + Enable the BIRD client + +comment "protocol support" + +config BR2_PACKAGE_BIRD_BABEL + bool "babel" + help + Enable Babel protocol. + +config BR2_PACKAGE_BIRD_BFD + bool "bfd" + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + help + Enable BFD protocol. + +comment "BFD protocol needs a toolchain w/ NPTL" + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL + +config BR2_PACKAGE_BIRD_BGP + bool "bgp" + default y + help + Enable BGP protocol. + +config BR2_PACKAGE_BIRD_MRT + bool "mrt" + help + Enable MRT protocol. + +config BR2_PACKAGE_BIRD_OSPF + bool "ospf" + help + Enable OSPFv2 and OSPFv3 protocol. + +config BR2_PACKAGE_BIRD_PERF + bool "perf" + help + Enable Perf protocol. + +config BR2_PACKAGE_BIRD_PIPE + bool "pipe" + help + Enable Pipe protocol. + +config BR2_PACKAGE_BIRD_RADV + bool "radv" + help + Enable RAdv protocol. + +config BR2_PACKAGE_BIRD_RIP + bool "rip" + help + Enable RIP protocol. + +config BR2_PACKAGE_BIRD_STATIC + bool "static" + help + Enable Static protocol. + +endif diff --git a/package/bird/bird.hash b/package/bird/bird.hash new file mode 100644 index 00000000..303fc212 --- /dev/null +++ b/package/bird/bird.hash @@ -0,0 +1,2 @@ +sha256 631d2b58aebdbd651aaa3c68c3756c02ebfe5b1e60d307771ea909eeaa5b1066 bird-2.0.7.tar.gz +sha256 94c53c84320078920ac1f0d49c81a4e9004512f534521a58bdf145acbcbc2cd2 README diff --git a/package/bird/bird.mk b/package/bird/bird.mk new file mode 100644 index 00000000..4d4dfe1d --- /dev/null +++ b/package/bird/bird.mk @@ -0,0 +1,36 @@ +################################################################################ +# +# bird +# +################################################################################ + +BIRD_VERSION = 2.0.7 +BIRD_SITE = ftp://bird.network.cz/pub/bird +BIRD_LICENSE = GPL-2.0+ +BIRD_LICENSE_FILES = README +BIRD_CPE_ID_VENDOR = nic +BIRD_SELINUX_MODULES = bird +BIRD_DEPENDENCIES = host-flex host-bison + +ifeq ($(BR2_PACKAGE_BIRD_CLIENT),y) +BIRD_CONF_OPTS += --enable-client +BIRD_DEPENDENCIES += ncurses readline +else +BIRD_CONF_OPTS += --disable-client +endif + +BIRD_PROTOCOLS = \ + $(if $(BR2_PACKAGE_BIRD_BFD),bfd) \ + $(if $(BR2_PACKAGE_BIRD_BABEL),babel) \ + $(if $(BR2_PACKAGE_BIRD_BGP),bgp) \ + $(if $(BR2_PACKAGE_BIRD_MRT),mrt) \ + $(if $(BR2_PACKAGE_BIRD_OSPF),ospf) \ + $(if $(BR2_PACKAGE_BIRD_PERF),perf) \ + $(if $(BR2_PACKAGE_BIRD_PIPE),pipe) \ + $(if $(BR2_PACKAGE_BIRD_RADV),radv) \ + $(if $(BR2_PACKAGE_BIRD_RIP),rip) \ + $(if $(BR2_PACKAGE_BIRD_STATIC),static) + +BIRD_CONF_OPTS += --with-protocols=$(subst $(space),$(comma),$(strip $(BIRD_PROTOCOLS))) + +$(eval $(autotools-package)) diff --git a/package/bison/bison.hash b/package/bison/bison.hash new file mode 100644 index 00000000..123b6100 --- /dev/null +++ b/package/bison/bison.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 55c215521a13982a9bee68cd42eed51a65713f96c530a739a57de4438ac1bb69 bison-3.7.1.tar.xz +# License files, locally calculated +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/bison/bison.mk b/package/bison/bison.mk new file mode 100644 index 00000000..efd75afd --- /dev/null +++ b/package/bison/bison.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# bison +# +################################################################################ + +BISON_VERSION = 3.7.1 +BISON_SOURCE = bison-$(BISON_VERSION).tar.xz +BISON_SITE = $(BR2_GNU_MIRROR)/bison +BISON_LICENSE = GPL-3.0+ +BISON_LICENSE_FILES = COPYING +BISON_CPE_ID_VENDOR = gnu +# parallel build issue in examples/c/reccalc/ +BISON_MAKE = $(MAKE1) +HOST_BISON_DEPENDENCIES = host-m4 +HOST_BISON_CONF_OPTS = --enable-relocatable +HOST_BISON_CONF_ENV = ac_cv_libtextstyle=no + +$(eval $(host-autotools-package)) diff --git a/package/bitcoin/0001-src-randomenv.cpp-fix-build-on-uclibc.patch b/package/bitcoin/0001-src-randomenv.cpp-fix-build-on-uclibc.patch new file mode 100644 index 00000000..8038a311 --- /dev/null +++ b/package/bitcoin/0001-src-randomenv.cpp-fix-build-on-uclibc.patch @@ -0,0 +1,48 @@ +From 330cb33985d0ce97c20f4a0f0bbda0fbffe098d4 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 9 Nov 2020 21:18:40 +0100 +Subject: [PATCH] src/randomenv.cpp: fix build on uclibc + +Check for HAVE_STRONG_GETAUXVAL or HAVE_WEAK_GETAUXVAL before using +getauxval to avoid a build failure on uclibc + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/bitcoin/bitcoin/pull/20358] +--- + src/randomenv.cpp | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/randomenv.cpp b/src/randomenv.cpp +index 07122b7f6..5e07c3db4 100644 +--- a/src/randomenv.cpp ++++ b/src/randomenv.cpp +@@ -53,7 +53,7 @@ + #include + #endif + #endif +-#ifdef __linux__ ++#if defined(HAVE_STRONG_GETAUXVAL) || defined(HAVE_WEAK_GETAUXVAL) + #include + #endif + +@@ -326,7 +326,7 @@ void RandAddStaticEnv(CSHA512& hasher) + // Bitcoin client version + hasher << CLIENT_VERSION; + +-#ifdef __linux__ ++#if defined(HAVE_STRONG_GETAUXVAL) || defined(HAVE_WEAK_GETAUXVAL) + // Information available through getauxval() + # ifdef AT_HWCAP + hasher << getauxval(AT_HWCAP); +@@ -346,7 +346,7 @@ void RandAddStaticEnv(CSHA512& hasher) + const char* exec_str = (const char*)getauxval(AT_EXECFN); + if (exec_str) hasher.Write((const unsigned char*)exec_str, strlen(exec_str) + 1); + # endif +-#endif // __linux__ ++#endif // HAVE_STRONG_GETAUXVAL || HAVE_WEAK_GETAUXVAL + + #ifdef HAVE_GETCPUID + AddAllCPUID(hasher); +-- +2.28.0 + diff --git a/package/bitcoin/Config.in b/package/bitcoin/Config.in new file mode 100644 index 00000000..7ce4f806 --- /dev/null +++ b/package/bitcoin/Config.in @@ -0,0 +1,47 @@ +config BR2_PACKAGE_BITCOIN_ARCH_SUPPORTS + bool + default y if BR2_TOOLCHAIN_HAS_ATOMIC + # bitcoin uses 8-byte __atomic intrinsics, which are not + # available on ARM noMMU platforms that we + # support. BR2_TOOLCHAIN_HAS_ATOMIC does not provide a + # size-level granularity to express this dependency. + depends on !(BR2_arm || BR2_armeb) || BR2_USE_MMU + +config BR2_PACKAGE_BITCOIN + bool "bitcoin" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS # boost-thread + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # std::future + depends on BR2_PACKAGE_BITCOIN_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS # boost + depends on BR2_USE_WCHAR + select BR2_PACKAGE_BOOST + select BR2_PACKAGE_BOOST_SYSTEM + select BR2_PACKAGE_BOOST_FILESYSTEM + select BR2_PACKAGE_BOOST_THREAD + select BR2_PACKAGE_LIBEVENT + help + Bitcoin Core is an open source project which maintains and + releases Bitcoin client software called “Bitcoin Core”. + + It is a direct descendant of the original Bitcoin software + client released by Satoshi Nakamoto after he published the + famous Bitcoin whitepaper. + + Bitcoin Core consists of both "full-node" software for fully + validating the blockchain as well as a bitcoin wallet. The + project also currently maintains related software such as + the cryptography library libsecp256k1 and others located at + GitHub. + + https://bitcoincore.org + +comment "bitcoin needs a toolchain w/ C++, threads, wchar" + depends on BR2_PACKAGE_BITCOIN_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR + +comment "bitcoin needs a toolchain not affected by GCC bug 64735" + depends on BR2_PACKAGE_BITCOIN_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 diff --git a/package/bitcoin/bitcoin.hash b/package/bitcoin/bitcoin.hash new file mode 100644 index 00000000..6ea33980 --- /dev/null +++ b/package/bitcoin/bitcoin.hash @@ -0,0 +1,5 @@ +# From https://bitcoincore.org/bin/bitcoin-core-0.21.1/SHA256SUMS.asc +sha256 caff23449220cf45753f312cefede53a9eac64000bb300797916526236b6a1e0 bitcoin-0.21.1.tar.gz + +# Hash for license file +sha256 96fe807030b21f88305adc32af62f9aa19915f2783509fd6f52aea02cf83f644 COPYING diff --git a/package/bitcoin/bitcoin.mk b/package/bitcoin/bitcoin.mk new file mode 100644 index 00000000..14252183 --- /dev/null +++ b/package/bitcoin/bitcoin.mk @@ -0,0 +1,38 @@ +################################################################################ +# +# bitcoin +# +################################################################################ + +BITCOIN_VERSION = 0.21.1 +BITCOIN_SITE = https://bitcoincore.org/bin/bitcoin-core-$(BITCOIN_VERSION) +BITCOIN_AUTORECONF = YES +BITCOIN_LICENSE = MIT +BITCOIN_LICENSE_FILES = COPYING +BITCOIN_CPE_ID_VENDOR = bitcoin +BITCOIN_CPE_ID_PRODUCT = bitcoin_core +BITCOIN_DEPENDENCIES = host-pkgconf boost libevent +BITCOIN_MAKE_ENV = BITCOIN_GENBUILD_NO_GIT=1 +BITCOIN_CONF_OPTS = \ + --disable-bench \ + --disable-wallet \ + --disable-tests \ + --with-boost-libdir=$(STAGING_DIR)/usr/lib/ \ + --disable-hardening \ + --without-gui + +ifeq ($(BR2_PACKAGE_LIBMINIUPNPC),y) +BITCOIN_DEPENDENCIES += libminiupnpc +BITCOIN_CONF_OPTS += --with-miniupnpc +else +BITCOIN_CONF_OPTS += --without-miniupnpc +endif + +ifeq ($(BR2_PACKAGE_ZEROMQ),y) +BITCOIN_DEPENDENCIES += zeromq +BITCOIN_CONF_OPTS += --with-zmq +else +BITCOIN_CONF_OPTS += --without-zmq +endif + +$(eval $(autotools-package)) diff --git a/package/bitstream-vera/Config.in b/package/bitstream-vera/Config.in new file mode 100644 index 00000000..034f115b --- /dev/null +++ b/package/bitstream-vera/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_BITSTREAM_VERA + bool "Bitstream Vera" + help + Bitstream Vera font family. + + https://www.gnome.org/fonts/ diff --git a/package/bitstream-vera/bitstream-vera.hash b/package/bitstream-vera/bitstream-vera.hash new file mode 100644 index 00000000..bb31b17a --- /dev/null +++ b/package/bitstream-vera/bitstream-vera.hash @@ -0,0 +1,4 @@ +# From http://ftp.gnome.org/pub/GNOME/sources/ttf-bitstream-vera/1.10/ttf-bitstream-vera-1.10.tar.bz2.sha256sum +sha256 db5b27df7bbb318036ebdb75acd3e98f1bd6eb6608fb70a67d478cd243d178dc ttf-bitstream-vera-1.10.tar.bz2 +# locally computed +sha256 3361d054759a2fc686a2c058be82deaf9c2e6fe549be9004d7935a6c1736315d COPYRIGHT.TXT diff --git a/package/bitstream-vera/bitstream-vera.mk b/package/bitstream-vera/bitstream-vera.mk new file mode 100644 index 00000000..f487d637 --- /dev/null +++ b/package/bitstream-vera/bitstream-vera.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# bitstream-vera +# +################################################################################ + +BITSTREAM_VERA_VERSION = 1.10 +BITSTREAM_VERA_SITE = http://ftp.gnome.org/pub/GNOME/sources/ttf-bitstream-vera/$(BITSTREAM_VERA_VERSION) +BITSTREAM_VERA_SOURCE = ttf-bitstream-vera-$(BITSTREAM_VERA_VERSION).tar.bz2 +BITSTREAM_VERA_TARGET_DIR = $(TARGET_DIR)/usr/share/fonts/ttf-bitstream-vera +BITSTREAM_VERA_LICENSE = BitstreamVera +BITSTREAM_VERA_LICENSE_FILES = COPYRIGHT.TXT + +define BITSTREAM_VERA_INSTALL_TARGET_CMDS + mkdir -p $(BITSTREAM_VERA_TARGET_DIR) + $(INSTALL) -m 644 $(@D)/*.ttf $(BITSTREAM_VERA_TARGET_DIR) +endef + +$(eval $(generic-package)) diff --git a/package/bitstream/Config.in b/package/bitstream/Config.in new file mode 100644 index 00000000..9d967a0f --- /dev/null +++ b/package/bitstream/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_BITSTREAM + bool "bitstream" + help + biTStream is a set of C headers allowing a simpler access to + binary structures such as specified by MPEG, DVB, IETF, + SMPTE, IEEE, SCTE, etc. + + http://www.videolan.org/developers/bitstream.html diff --git a/package/bitstream/bitstream.hash b/package/bitstream/bitstream.hash new file mode 100644 index 00000000..0d2e5a1f --- /dev/null +++ b/package/bitstream/bitstream.hash @@ -0,0 +1,6 @@ +# From https://get.videolan.org/bitstream/1.5/bitstream-1.5.tar.bz2.md5 +md5 34630d13332fd1575bcc8531b0a596be bitstream-1.5.tar.bz2 +# From https://get.videolan.org/bitstream/1.5/bitstream-1.5.tar.bz2.sha256 +sha256 45fc5a5a6e4537a69fa8440821e87b76252135180a3070c631b0b36ce0a3b90a bitstream-1.5.tar.bz2 +# Locally computed +sha256 9644a812f9a8377a59acb7092a36ce8882a39743425d9171a8fb84637e2f6e04 COPYING diff --git a/package/bitstream/bitstream.mk b/package/bitstream/bitstream.mk new file mode 100644 index 00000000..12124a63 --- /dev/null +++ b/package/bitstream/bitstream.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# bitstream +# +################################################################################ + +BITSTREAM_VERSION = 1.5 +BITSTREAM_SOURCE = bitstream-$(BITSTREAM_VERSION).tar.bz2 +BITSTREAM_SITE = https://get.videolan.org/bitstream/$(BITSTREAM_VERSION) +BITSTREAM_LICENSE = MIT +BITSTREAM_LICENSE_FILES = COPYING + +# package consists of header files only +BITSTREAM_INSTALL_STAGING = YES +BITSTREAM_INSTALL_TARGET = NO + +define BITSTREAM_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) PREFIX=/usr install +endef + +$(eval $(generic-package)) diff --git a/package/bitwise/Config.in b/package/bitwise/Config.in new file mode 100644 index 00000000..e955da37 --- /dev/null +++ b/package/bitwise/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_BITWISE + bool "bitwise" + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_READLINE + help + Bitwise is multi base interactive calculator + supporting dynamic base conversion and bit manipulation. + It's a handy tool for low level hackers, + kernel developers and device drivers developers. + + https://github.com/mellowcandle/bitwise diff --git a/package/bitwise/bitwise.hash b/package/bitwise/bitwise.hash new file mode 100644 index 00000000..061c5e52 --- /dev/null +++ b/package/bitwise/bitwise.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 33ce934fb99dadf7652224152cc135a0abf6a211adde53d96e9be7067567749c bitwise-v0.41.tar.gz +sha256 3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986 COPYING diff --git a/package/bitwise/bitwise.mk b/package/bitwise/bitwise.mk new file mode 100644 index 00000000..581eac6f --- /dev/null +++ b/package/bitwise/bitwise.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# bitwise +# +################################################################################ + +BITWISE_VERSION = 0.41 +BITWISE_SITE = https://github.com/mellowcandle/bitwise/releases/download/v$(BITWISE_VERSION) +BITWISE_SOURCE = bitwise-v$(BITWISE_VERSION).tar.gz +BITWISE_DEPENDENCIES = ncurses readline +BITWISE_LICENSE = GPL-3.0 +BITWISE_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/blktrace/0001-btt-make-device-devno-use-PATH_MAX-to-avoid-overflow.patch b/package/blktrace/0001-btt-make-device-devno-use-PATH_MAX-to-avoid-overflow.patch new file mode 100644 index 00000000..764410d4 --- /dev/null +++ b/package/blktrace/0001-btt-make-device-devno-use-PATH_MAX-to-avoid-overflow.patch @@ -0,0 +1,146 @@ +From d61ff409cb4dda31386373d706ea0cfb1aaac5b7 Mon Sep 17 00:00:00 2001 +From: Jens Axboe +Date: Wed, 2 May 2018 10:24:17 -0600 +Subject: btt: make device/devno use PATH_MAX to avoid overflow + +Herbo Zhang reports: + +I found a bug in blktrace/btt/devmap.c. The code is just as follows: + +https://git.kernel.org/pub/scm/linux/kernel/git/axboe/blktrace.git/tree/btt/devmap.c?id=8349ad2f2d19422a6241f94ea84d696b21de4757 + + struct devmap { + +struct list_head head; +char device[32], devno[32]; // #1 +}; + +LIST_HEAD(all_devmaps); + +static int dev_map_add(char *line) +{ +struct devmap *dmp; + +if (strstr(line, "Device") != NULL) +return 1; + +dmp = malloc(sizeof(struct devmap)); +if (sscanf(line, "%s %s", dmp->device, dmp->devno) != 2) { //#2 +free(dmp); +return 1; +} + +list_add_tail(&dmp->head, &all_devmaps); +return 0; +} + +int dev_map_read(char *fname) +{ +char line[256]; // #3 +FILE *fp = my_fopen(fname, "r"); + +if (!fp) { +perror(fname); +return 1; +} + +while (fscanf(fp, "%255[a-zA-Z0-9 :.,/_-]\n", line) == 1) { +if (dev_map_add(line)) +break; +} + +fclose(fp); +return 0; +} + + The line length is 256, but the dmp->device, dmp->devno max length +is only 32. We can put strings longer than 32 into dmp->device and +dmp->devno , and then they will be overflowed. + + we can trigger this bug just as follows: + + $ python -c "print 'A'*256" > ./test + $ btt -M ./test + + *** Error in btt': free(): invalid next size (fast): 0x000055ad7349b250 *** + ======= Backtrace: ========= + /lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7f7f158ce7e5] + /lib/x86_64-linux-gnu/libc.so.6(+0x7fe0a)[0x7f7f158d6e0a] + /lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7f7f158da98c] + btt(+0x32e0)[0x55ad7306f2e0] + btt(+0x2c5f)[0x55ad7306ec5f] + btt(+0x251f)[0x55ad7306e51f] + /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7f7f15877830] + btt(+0x26b9)[0x55ad7306e6b9] + ======= Memory map: ======== + 55ad7306c000-55ad7307f000 r-xp 00000000 08:14 3698139 + /usr/bin/btt + 55ad7327e000-55ad7327f000 r--p 00012000 08:14 3698139 + /usr/bin/btt + 55ad7327f000-55ad73280000 rw-p 00013000 08:14 3698139 + /usr/bin/btt + 55ad73280000-55ad73285000 rw-p 00000000 00:00 0 + 55ad7349a000-55ad734bb000 rw-p 00000000 00:00 0 + [heap] + 7f7f10000000-7f7f10021000 rw-p 00000000 00:00 0 + 7f7f10021000-7f7f14000000 ---p 00000000 00:00 0 + 7f7f15640000-7f7f15656000 r-xp 00000000 08:14 14942237 + /lib/x86_64-linux-gnu/libgcc_s.so.1 + 7f7f15656000-7f7f15855000 ---p 00016000 08:14 14942237 + /lib/x86_64-linux-gnu/libgcc_s.so.1 + 7f7f15855000-7f7f15856000 r--p 00015000 08:14 14942237 + /lib/x86_64-linux-gnu/libgcc_s.so.1 + 7f7f15856000-7f7f15857000 rw-p 00016000 08:14 14942237 + /lib/x86_64-linux-gnu/libgcc_s.so.1 + 7f7f15857000-7f7f15a16000 r-xp 00000000 08:14 14948477 + /lib/x86_64-linux-gnu/libc-2.23.so + 7f7f15a16000-7f7f15c16000 ---p 001bf000 08:14 14948477 + /lib/x86_64-linux-gnu/libc-2.23.so + 7f7f15c16000-7f7f15c1a000 r--p 001bf000 08:14 14948477 + /lib/x86_64-linux-gnu/libc-2.23.so + 7f7f15c1a000-7f7f15c1c000 rw-p 001c3000 08:14 14948477 + /lib/x86_64-linux-gnu/libc-2.23.so + 7f7f15c1c000-7f7f15c20000 rw-p 00000000 00:00 0 + 7f7f15c20000-7f7f15c46000 r-xp 00000000 08:14 14948478 + /lib/x86_64-linux-gnu/ld-2.23.so + 7f7f15e16000-7f7f15e19000 rw-p 00000000 00:00 0 + 7f7f15e42000-7f7f15e45000 rw-p 00000000 00:00 0 + 7f7f15e45000-7f7f15e46000 r--p 00025000 08:14 14948478 + /lib/x86_64-linux-gnu/ld-2.23.so + 7f7f15e46000-7f7f15e47000 rw-p 00026000 08:14 14948478 + /lib/x86_64-linux-gnu/ld-2.23.so + 7f7f15e47000-7f7f15e48000 rw-p 00000000 00:00 0 + 7ffdebe5c000-7ffdebe7d000 rw-p 00000000 00:00 0 + [stack] + 7ffdebebc000-7ffdebebe000 r--p 00000000 00:00 0 + [vvar] + 7ffdebebe000-7ffdebec0000 r-xp 00000000 00:00 0 + [vdso] + ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 + [vsyscall] + [1] 6272 abort btt -M test + +Signed-off-by: Jens Axboe +[Retrieved from: +https://git.kernel.org/pub/scm/linux/kernel/git/axboe/blktrace.git/commit/?id=d61ff409cb4dda31386373d706ea0cfb1aaac5b7] +Signed-off-by: Fabrice Fontaine +--- + btt/devmap.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/btt/devmap.c b/btt/devmap.c +index 0553a9e..5fc1cb2 100644 +--- a/btt/devmap.c ++++ b/btt/devmap.c +@@ -23,7 +23,7 @@ + + struct devmap { + struct list_head head; +- char device[32], devno[32]; ++ char device[PATH_MAX], devno[PATH_MAX]; + }; + + LIST_HEAD(all_devmaps); +-- +cgit 1.2-0.3.lf.el7 + diff --git a/package/blktrace/Config.in b/package/blktrace/Config.in new file mode 100644 index 00000000..951caed5 --- /dev/null +++ b/package/blktrace/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_BLKTRACE + bool "blktrace" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # system() + select BR2_PACKAGE_LIBAIO + help + blktrace is a block layer IO tracing mechanism which provides + detailed information about request queue operations + up to user space. + + http://git.kernel.dk/?p=blktrace.git;a=summary + +comment "blktrace needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/blktrace/blktrace.hash b/package/blktrace/blktrace.hash new file mode 100644 index 00000000..d4f62184 --- /dev/null +++ b/package/blktrace/blktrace.hash @@ -0,0 +1,6 @@ +# From http://brick.kernel.dk/snaps/MD5SUMS +md5 05abb873b4de96c5e7b2deba80695bf1 blktrace-1.2.0.tar.gz + +# Locally computed +sha256 d14029bc096026dacb206bf115c912dcdb795320b5aba6dff3e46d7f94c5242d blktrace-1.2.0.tar.gz +sha256 204d8eff92f95aac4df6c8122bc1505f468f3a901e5a4cc08940e0ede1938994 COPYING diff --git a/package/blktrace/blktrace.mk b/package/blktrace/blktrace.mk new file mode 100644 index 00000000..1a5f59bc --- /dev/null +++ b/package/blktrace/blktrace.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# blktrace +# +################################################################################ + +BLKTRACE_VERSION = 1.2.0 +BLKTRACE_SITE = http://brick.kernel.dk/snaps +BLKTRACE_DEPENDENCIES = libaio +BLKTRACE_LICENSE = GPL-2.0+ +BLKTRACE_LICENSE_FILES = COPYING +BLKTRACE_CPE_ID_VENDOR = blktrace_project + +# 0001-btt-make-device-devno-use-PATH_MAX-to-avoid-overflow.patch +BLKTRACE_IGNORE_CVES += CVE-2018-10689 + +define BLKTRACE_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) -C $(@D) $(TARGET_CONFIGURE_OPTS) +endef + +define BLKTRACE_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) -C $(@D) $(TARGET_CONFIGURE_OPTS) install \ + DESTDIR=$(TARGET_DIR) prefix=/usr +endef + +$(eval $(generic-package)) diff --git a/package/bluez-alsa/Config.in b/package/bluez-alsa/Config.in new file mode 100644 index 00000000..2f103f40 --- /dev/null +++ b/package/bluez-alsa/Config.in @@ -0,0 +1,40 @@ +config BR2_PACKAGE_BLUEZ_ALSA + bool "bluez-alsa" + depends on !BR2_STATIC_LIBS # bluez5 + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4 # bluez5 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # bluez5 + depends on BR2_USE_MMU # bluez5 -> dbus + depends on BR2_USE_WCHAR # libglib2 + select BR2_PACKAGE_ALSA_LIB + select BR2_PACKAGE_BLUEZ5_UTILS + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_SBC + help + Bluetooth Audio ALSA Backend. + + https://github.com/Arkq/bluez-alsa + +if BR2_PACKAGE_BLUEZ_ALSA + +config BR2_PACKAGE_BLUEZ_ALSA_HCITOP + bool "hcitop" + depends on BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS + select BR2_PACKAGE_LIBBSD + select BR2_PACKAGE_NCURSES + help + Enable top-like monitoring tool for HCI. + +config BR2_PACKAGE_BLUEZ_ALSA_RFCOMM + bool "rfcomm" + select BR2_PACKAGE_READLINE + help + Simple tool for sending RFCOMM commands. + +endif + +comment "bluez-alsa needs a toolchain w/ wchar, NPTL, headers >= 3.4, dynamic library" + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS_NPTL || \ + !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4 || BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_USE_MMU diff --git a/package/bluez-alsa/bluez-alsa.hash b/package/bluez-alsa/bluez-alsa.hash new file mode 100644 index 00000000..6be93bc0 --- /dev/null +++ b/package/bluez-alsa/bluez-alsa.hash @@ -0,0 +1,3 @@ +# Locally calculated: +sha256 8b9bc36be922c10c6628ddf84b13dfadfeb3ab0bcf72bad842c66f3120abc6b2 bluez-alsa-3.0.0.tar.gz +sha256 60253922a459245128c34eb379cbda7c76936636d4c10edc576663a0f560dd4d LICENSE diff --git a/package/bluez-alsa/bluez-alsa.mk b/package/bluez-alsa/bluez-alsa.mk new file mode 100644 index 00000000..9262a7f6 --- /dev/null +++ b/package/bluez-alsa/bluez-alsa.mk @@ -0,0 +1,72 @@ +################################################################################ +# +# bluez-alsa +# +################################################################################ + +BLUEZ_ALSA_VERSION = 3.0.0 +BLUEZ_ALSA_SITE = $(call github,Arkq,bluez-alsa,v$(BLUEZ_ALSA_VERSION)) +BLUEZ_ALSA_LICENSE = MIT +BLUEZ_ALSA_LICENSE_FILES = LICENSE +BLUEZ_ALSA_DEPENDENCIES = alsa-lib bluez5_utils libglib2 sbc host-pkgconf + +# git repo, no configure +BLUEZ_ALSA_AUTORECONF = YES + +BLUEZ_ALSA_CONF_OPTS = \ + --enable-a2dpconf \ + --enable-aplay \ + --disable-debug-time \ + --with-alsaplugindir=/usr/lib/alsa-lib \ + --with-alsaconfdir=/etc/alsa/conf.d + +ifeq ($(BR2_PACKAGE_FDK_AAC),y) +BLUEZ_ALSA_DEPENDENCIES += fdk-aac +BLUEZ_ALSA_CONF_OPTS += --enable-aac +else +BLUEZ_ALSA_CONF_OPTS += --disable-aac +endif + +ifeq ($(BR2_PACKAGE_LAME),y) +BLUEZ_ALSA_DEPENDENCIES += lame +BLUEZ_ALSA_CONF_OPTS += --enable-mp3lame +else +BLUEZ_ALSA_CONF_OPTS += --disable-mp3lame +endif + +ifeq ($(BR2_PACKAGE_MPG123),y) +BLUEZ_ALSA_DEPENDENCIES += mpg123 +BLUEZ_ALSA_CONF_OPTS += --enable-mpg123 +else +BLUEZ_ALSA_CONF_OPTS += --disable-mpg123 +endif + +# no build dependency, disables internal HFP in favor of oFonos HFP profile +ifeq ($(BR2_PACKAGE_OFONO),y) +BLUEZ_ALSA_CONF_OPTS += --enable-ofono +else +BLUEZ_ALSA_CONF_OPTS += --disable-ofono +endif + +# no build dependency, enables integration with UPower D-Bus service +ifeq ($(BR2_PACKAGE_UPOWER),y) +BLUEZ_ALSA_CONF_OPTS += --enable-upower +else +BLUEZ_ALSA_CONF_OPTS += --disable-upower +endif + +ifeq ($(BR2_PACKAGE_BLUEZ_ALSA_HCITOP),y) +BLUEZ_ALSA_DEPENDENCIES += libbsd ncurses +BLUEZ_ALSA_CONF_OPTS += --enable-hcitop +else +BLUEZ_ALSA_CONF_OPTS += --disable-hcitop +endif + +ifeq ($(BR2_PACKAGE_BLUEZ_ALSA_RFCOMM),y) +BLUEZ_ALSA_DEPENDENCIES += readline +BLUEZ_ALSA_CONF_OPTS += --enable-rfcomm +else +BLUEZ_ALSA_CONF_OPTS += --disable-rfcomm +endif + +$(eval $(autotools-package)) diff --git a/package/bluez-tools/0001-fix-gcc-10-compile.patch b/package/bluez-tools/0001-fix-gcc-10-compile.patch new file mode 100644 index 00000000..028c2db6 --- /dev/null +++ b/package/bluez-tools/0001-fix-gcc-10-compile.patch @@ -0,0 +1,46 @@ +From 687105d611b38961f390f0a328f9cfa3b93aeb18 Mon Sep 17 00:00:00 2001 +From: Leigh Scott +Date: Tue, 28 Jan 2020 22:46:37 +0000 +Subject: [PATCH] fix gcc-10 compile + +[Retrieved from: +https://github.com/khvzak/bluez-tools/pull/34/commits/687105d611b38961f390f0a328f9cfa3b93aeb18] +Signed-off-by: Fabrice Fontaine +--- + src/lib/agent-helper.c | 2 ++ + src/lib/agent-helper.h | 4 ++-- + 2 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/src/lib/agent-helper.c b/src/lib/agent-helper.c +index bf50bcc..2b94100 100644 +--- a/src/lib/agent-helper.c ++++ b/src/lib/agent-helper.c +@@ -33,6 +33,8 @@ + + #include "agent-helper.h" + ++gboolean agent_need_unregister; ++ + static const gchar *_bt_agent_introspect_xml = "\n\t\n\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\n\n"; + static guint _bt_agent_registration_id = 0; + static GHashTable *_pin_hash_table = NULL; +diff --git a/src/lib/agent-helper.h b/src/lib/agent-helper.h +index 8e1cc85..9a952c4 100644 +--- a/src/lib/agent-helper.h ++++ b/src/lib/agent-helper.h +@@ -35,7 +35,7 @@ extern "C" { + #define AGENT_DBUS_INTERFACE "org.bluez.Agent1" + #define AGENT_PATH "/org/blueztools" + +-gboolean agent_need_unregister; ++extern gboolean agent_need_unregister; + + void register_agent_callbacks(gboolean interactive_console, GHashTable *pin_dictonary, gpointer main_loop_object, GError **error); + void unregister_agent_callbacks(GError **error); +@@ -44,4 +44,4 @@ void unregister_agent_callbacks(GError **error); + } + #endif + +-#endif /* __AGENT_HELPER_H */ +\ No newline at end of file ++#endif /* __AGENT_HELPER_H */ diff --git a/package/bluez-tools/Config.in b/package/bluez-tools/Config.in new file mode 100644 index 00000000..6db874b2 --- /dev/null +++ b/package/bluez-tools/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_BLUEZ_TOOLS + bool "bluez-tools" + depends on BR2_PACKAGE_BLUEZ5_UTILS + depends on BR2_USE_MMU # dbus, libglib2 + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # dbus, libglib2 + select BR2_PACKAGE_DBUS + select BR2_PACKAGE_DBUS_GLIB + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_READLINE if BR2_PACKAGE_BLUEZ5_UTILS + help + A set of tools to manage bluetooth devices for linux + + https://github.com/khvzak/bluez-tools + +comment "bluez-tools needs a toolchain w/ wchar, threads" + depends on BR2_PACKAGE_BLUEZ5_UTILS + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/bluez-tools/bluez-tools.hash b/package/bluez-tools/bluez-tools.hash new file mode 100644 index 00000000..808e5c60 --- /dev/null +++ b/package/bluez-tools/bluez-tools.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 62ca98af63d2ae142dbc77995c6bd4c259eaba4a5832daa33ae9e3d585b9205f bluez-tools-97efd293491ad7ec96a655665339908f2478b3d1.tar.gz +sha256 b499eddebda05a8859e32b820a64577d91f1de2b52efa2a1575a2cb4000bc259 COPYING diff --git a/package/bluez-tools/bluez-tools.mk b/package/bluez-tools/bluez-tools.mk new file mode 100644 index 00000000..c5870198 --- /dev/null +++ b/package/bluez-tools/bluez-tools.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# bluez-tools +# +################################################################################ + +BLUEZ_TOOLS_VERSION = 97efd293491ad7ec96a655665339908f2478b3d1 +BLUEZ_TOOLS_SITE = $(call github,khvzak,bluez-tools,$(BLUEZ_TOOLS_VERSION)) + +# sources fetched from github, no configure script) +BLUEZ_TOOLS_AUTORECONF = YES +BLUEZ_TOOLS_DEPENDENCIES = host-pkgconf dbus dbus-glib bluez5_utils readline +BLUEZ_TOOLS_LICENSE = GPL-2.0+ +BLUEZ_TOOLS_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/bluez5_utils-headers/Config.in b/package/bluez5_utils-headers/Config.in new file mode 100644 index 00000000..e29e3dfe --- /dev/null +++ b/package/bluez5_utils-headers/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_BLUEZ5_UTILS_HEADERS + bool + help + Header files from bluez utils version 5.x + + http://www.bluez.org + http://www.kernel.org/pub/linux/bluetooth diff --git a/package/bluez5_utils-headers/bluez5_utils-headers.hash b/package/bluez5_utils-headers/bluez5_utils-headers.hash new file mode 120000 index 00000000..1f489458 --- /dev/null +++ b/package/bluez5_utils-headers/bluez5_utils-headers.hash @@ -0,0 +1 @@ +../bluez5_utils/bluez5_utils.hash \ No newline at end of file diff --git a/package/bluez5_utils-headers/bluez5_utils-headers.mk b/package/bluez5_utils-headers/bluez5_utils-headers.mk new file mode 100644 index 00000000..a2e22148 --- /dev/null +++ b/package/bluez5_utils-headers/bluez5_utils-headers.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# bluez5_utils-headers +# +################################################################################ + +# Keep the version and patches in sync with bluez5_utils +BLUEZ5_UTILS_HEADERS_VERSION = 5.55 +BLUEZ5_UTILS_HEADERS_SOURCE = bluez-$(BLUEZ5_UTILS_VERSION).tar.xz +BLUEZ5_UTILS_HEADERS_SITE = $(BR2_KERNEL_MIRROR)/linux/bluetooth +BLUEZ5_UTILS_HEADERS_DL_SUBDIR = bluez5_utils +BLUEZ5_UTILS_HEADERS_LICENSE = GPL-2.0+, LGPL-2.1+ +BLUEZ5_UTILS_HEADERS_LICENSE_FILES = COPYING COPYING.LIB +BLUEZ5_UTILS_HEADERS_CPE_ID_VENDOR = bluez +BLUEZ5_UTILS_HEADERS_CPE_ID_PRODUCT = bluez + +BLUEZ5_UTILS_HEADERS_INSTALL_STAGING = YES +BLUEZ5_UTILS_HEADERS_INSTALL_TARGET = NO + +define BLUEZ5_UTILS_HEADERS_INSTALL_STAGING_CMDS + $(INSTALL) -d $(STAGING_DIR)/usr/include/bluetooth/ + $(INSTALL) -m 644 $(@D)/lib/*.h $(STAGING_DIR)/usr/include/bluetooth/ +endef + +$(eval $(generic-package)) diff --git a/package/bluez5_utils/Config.in b/package/bluez5_utils/Config.in new file mode 100644 index 00000000..2c8625a6 --- /dev/null +++ b/package/bluez5_utils/Config.in @@ -0,0 +1,119 @@ +config BR2_PACKAGE_BLUEZ5_UTILS + bool "bluez-utils" + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # dbus, libglib2 + depends on BR2_USE_MMU # dbus + depends on !BR2_STATIC_LIBS # uses dlfcn + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + select BR2_PACKAGE_DBUS + select BR2_PACKAGE_LIBGLIB2 + help + BlueZ utils + + Provides Stack, Library and Tooling for Bluetooth Classic + and Bluetooth LE. + + BlueZ utils will use systemd and/or udev if enabled. + + http://www.bluez.org + http://www.kernel.org/pub/linux/bluetooth + +if BR2_PACKAGE_BLUEZ5_UTILS + +config BR2_PACKAGE_BLUEZ5_UTILS_OBEX + bool "build OBEX support" + depends on BR2_INSTALL_LIBSTDCPP + select BR2_PACKAGE_LIBICAL + help + Enable OBEX support. + +comment "OBEX support needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + +config BR2_PACKAGE_BLUEZ5_UTILS_CLIENT + bool "build CLI client" + select BR2_PACKAGE_READLINE + help + Build the command line client "bluetoothctl". + +config BR2_PACKAGE_BLUEZ5_UTILS_DEPRECATED + bool "install deprecated tools" + depends on BR2_PACKAGE_BLUEZ5_UTILS_CLIENT + help + Build deprecated tools. These currently include: + hciattach, hciconfig, hcitool, hcidump, rfcomm, sdptool, + ciptool, gatttool. + +config BR2_PACKAGE_BLUEZ5_UTILS_EXPERIMENTAL + bool "build experimental tools" + help + Build experimental tools. This is currently only the + "Nokia OBEX PC Suite tool". So, only if OBEX support is + enabled this option has an effect. + +config BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_HEALTH + bool "build health plugin" + help + Build plugin for health profiles. + +config BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_MESH + bool "build mesh plugin" + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12 # ell + select BR2_PACKAGE_ELL + select BR2_PACKAGE_JSON_C + select BR2_PACKAGE_READLINE + help + Build plugin for Mesh support. + +comment "mesh profile needs a toolchain w/ headers >= 4.12" + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12 + +config BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_MIDI + bool "build midi plugin" + select BR2_PACKAGE_ALSA_LIB + select BR2_PACKAGE_ALSA_LIB_SEQ + help + Build MIDI support via ALSA sequencer. + +config BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_NFC + bool "build nfc plugin" + help + Build plugin for NFC pairing. + +config BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_SAP + bool "build sap plugin" + help + Build plugin for SAP profile. + +config BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_SIXAXIS + bool "build sixaxis plugin" + depends on BR2_PACKAGE_HAS_UDEV + help + Build sixaxis plugin (support Sony Dualshock + controller) + +comment "sixaxis plugin needs udev /dev management" + depends on !BR2_PACKAGE_HAS_UDEV + +config BR2_PACKAGE_BLUEZ5_UTILS_TEST + bool "install test scripts" + help + Install the python test scripts from the "test" directory. + +config BR2_PACKAGE_BLUEZ5_UTILS_TOOLS_HID2HCI + bool "build hid2hci tool" + depends on BR2_PACKAGE_HAS_UDEV + help + Build hid2hci tool + +comment "hid2hci tool needs udev /dev management" + depends on !BR2_PACKAGE_HAS_UDEV + +endif + +comment "bluez5-utils needs a toolchain w/ wchar, threads, headers >= 3.4, dynamic library" + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4 || BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_USE_MMU diff --git a/package/bluez5_utils/S40bluetooth b/package/bluez5_utils/S40bluetooth new file mode 100755 index 00000000..ee4abe8b --- /dev/null +++ b/package/bluez5_utils/S40bluetooth @@ -0,0 +1,61 @@ +#!/bin/sh + +DAEMON="bluetoothd" +PIDFILE="/var/run/$DAEMON.pid" + +BLUETOOTHD_ARGS="-n" + +# shellcheck source=/dev/null +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON" + +start() { + printf 'Starting %s: ' "$DAEMON" + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon -S -q -m -b -p "$PIDFILE" -x "/usr/libexec/bluetooth/$DAEMON" \ + -- $BLUETOOTHD_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +reload() { + printf 'Reloading %s: ' "$DAEMON" + start-stop-daemon -K -s HUP -q -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +case "$1" in + start|stop|restart|reload) + "$1";; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/bluez5_utils/bluez5_utils.hash b/package/bluez5_utils/bluez5_utils.hash new file mode 100644 index 00000000..d0f3b805 --- /dev/null +++ b/package/bluez5_utils/bluez5_utils.hash @@ -0,0 +1,4 @@ +# From https://www.kernel.org/pub/linux/bluetooth/sha256sums.asc: +sha256 8863717113c4897e2ad3271fc808ea245319e6fd95eed2e934fae8e0894e9b88 bluez-5.55.tar.xz +sha256 b499eddebda05a8859e32b820a64577d91f1de2b52efa2a1575a2cb4000bc259 COPYING +sha256 ec60b993835e2c6b79e6d9226345f4e614e686eb57dc13b6420c15a33a8996e5 COPYING.LIB diff --git a/package/bluez5_utils/bluez5_utils.mk b/package/bluez5_utils/bluez5_utils.mk new file mode 100644 index 00000000..2fd3016b --- /dev/null +++ b/package/bluez5_utils/bluez5_utils.mk @@ -0,0 +1,143 @@ +################################################################################ +# +# bluez5_utils +# +################################################################################ + +# Keep the version and patches in sync with bluez5_utils-headers +BLUEZ5_UTILS_VERSION = 5.55 +BLUEZ5_UTILS_SOURCE = bluez-$(BLUEZ5_UTILS_VERSION).tar.xz +BLUEZ5_UTILS_SITE = $(BR2_KERNEL_MIRROR)/linux/bluetooth +BLUEZ5_UTILS_INSTALL_STAGING = YES +BLUEZ5_UTILS_LICENSE = GPL-2.0+, LGPL-2.1+ +BLUEZ5_UTILS_LICENSE_FILES = COPYING COPYING.LIB +BLUEZ5_UTILS_CPE_ID_VENDOR = bluez +BLUEZ5_UTILS_CPE_ID_PRODUCT = bluez + +BLUEZ5_UTILS_DEPENDENCIES = \ + $(if $(BR2_PACKAGE_BLUEZ5_UTILS_HEADERS),bluez5_utils-headers) \ + dbus \ + libglib2 + +BLUEZ5_UTILS_CONF_OPTS = \ + --enable-tools \ + --enable-library \ + --disable-cups \ + --with-dbusconfdir=/etc + +ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS_OBEX),y) +BLUEZ5_UTILS_CONF_OPTS += --enable-obex +BLUEZ5_UTILS_DEPENDENCIES += libical +else +BLUEZ5_UTILS_CONF_OPTS += --disable-obex +endif + +ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS_CLIENT),y) +BLUEZ5_UTILS_CONF_OPTS += --enable-client +BLUEZ5_UTILS_DEPENDENCIES += readline +else +BLUEZ5_UTILS_CONF_OPTS += --disable-client +endif + +# experimental plugins +ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS_EXPERIMENTAL),y) +BLUEZ5_UTILS_CONF_OPTS += --enable-experimental +else +BLUEZ5_UTILS_CONF_OPTS += --disable-experimental +endif + +# enable health plugin +ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_HEALTH),y) +BLUEZ5_UTILS_CONF_OPTS += --enable-health +else +BLUEZ5_UTILS_CONF_OPTS += --disable-health +endif + +# enable mesh profile +ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_MESH),y) +BLUEZ5_UTILS_CONF_OPTS += --enable-external-ell --enable-mesh +BLUEZ5_UTILS_DEPENDENCIES += ell json-c readline +else +BLUEZ5_UTILS_CONF_OPTS += --disable-external-ell --disable-mesh +endif + +# enable midi profile +ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_MIDI),y) +BLUEZ5_UTILS_CONF_OPTS += --enable-midi +BLUEZ5_UTILS_DEPENDENCIES += alsa-lib +else +BLUEZ5_UTILS_CONF_OPTS += --disable-midi +endif + +# enable nfc plugin +ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_NFC),y) +BLUEZ5_UTILS_CONF_OPTS += --enable-nfc +else +BLUEZ5_UTILS_CONF_OPTS += --disable-nfc +endif + +# enable sap plugin +ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_SAP),y) +BLUEZ5_UTILS_CONF_OPTS += --enable-sap +else +BLUEZ5_UTILS_CONF_OPTS += --disable-sap +endif + +# enable sixaxis plugin +ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_SIXAXIS),y) +BLUEZ5_UTILS_CONF_OPTS += --enable-sixaxis +else +BLUEZ5_UTILS_CONF_OPTS += --disable-sixaxis +endif + +# install gatttool (For some reason upstream choose not to do it by default) +ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS_DEPRECATED),y) +define BLUEZ5_UTILS_INSTALL_GATTTOOL + $(INSTALL) -D -m 0755 $(@D)/attrib/gatttool $(TARGET_DIR)/usr/bin/gatttool +endef +BLUEZ5_UTILS_POST_INSTALL_TARGET_HOOKS += BLUEZ5_UTILS_INSTALL_GATTTOOL +# hciattach_bcm43xx defines default firmware path in `/etc/firmware`, but +# Broadcom firmware blobs are usually located in `/lib/firmware`. +BLUEZ5_UTILS_CONF_ENV += \ + CPPFLAGS='$(TARGET_CPPFLAGS) -DFIRMWARE_DIR=\"/lib/firmware\"' +BLUEZ5_UTILS_CONF_OPTS += --enable-deprecated +else +BLUEZ5_UTILS_CONF_OPTS += --disable-deprecated +endif + +# enable test +ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS_TEST),y) +BLUEZ5_UTILS_CONF_OPTS += --enable-test +else +BLUEZ5_UTILS_CONF_OPTS += --disable-test +endif + +# enable hid2hci tool +ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS_TOOLS_HID2HCI),y) +BLUEZ5_UTILS_CONF_OPTS += --enable-hid2hci +else +BLUEZ5_UTILS_CONF_OPTS += --disable-hid2hci +endif + +# use udev if available +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +BLUEZ5_UTILS_CONF_OPTS += --enable-udev +BLUEZ5_UTILS_DEPENDENCIES += udev +else +BLUEZ5_UTILS_CONF_OPTS += --disable-udev +endif + +# integrate with systemd if available +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +BLUEZ5_UTILS_CONF_OPTS += --enable-systemd +BLUEZ5_UTILS_DEPENDENCIES += systemd +else +BLUEZ5_UTILS_CONF_OPTS += --disable-systemd +endif + +define BLUEZ5_UTILS_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/bluez5_utils/S40bluetooth \ + $(TARGET_DIR)/etc/init.d/S40bluetooth +endef + +$(eval $(autotools-package)) diff --git a/package/bmon/Config.in b/package/bmon/Config.in new file mode 100644 index 00000000..cb83cc28 --- /dev/null +++ b/package/bmon/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_BMON + bool "bmon" + depends on BR2_TOOLCHAIN_HAS_THREADS # libnl + select BR2_PACKAGE_LIBCONFUSE + select BR2_PACKAGE_LIBNL + select BR2_PACKAGE_NCURSES + help + bmon is a bandwidth monitor capable of retrieving statistics + from various input modules. It provides various output methods + including a curses based interface. + + https://github.com/tgraf/bmon/ + +comment "bmon needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/bmon/bmon.hash b/package/bmon/bmon.hash new file mode 100644 index 00000000..2cdf315a --- /dev/null +++ b/package/bmon/bmon.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 02fdc312b8ceeb5786b28bf905f54328f414040ff42f45c83007f24b76cc9f7a bmon-4.0.tar.gz +sha256 59ae3d59c672bfb955917a8e32f5cacba7f8ce716c499a4c63dc8cd8cb5c4991 LICENSE.BSD +sha256 a2a6760c2c6fa779a635e4a7ad00f668862ebcadb2a8a57d16662543e103e08c LICENSE.MIT diff --git a/package/bmon/bmon.mk b/package/bmon/bmon.mk new file mode 100644 index 00000000..84dab703 --- /dev/null +++ b/package/bmon/bmon.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# bmon +# +################################################################################ + +BMON_VERSION = 4.0 +BMON_SITE = https://github.com/tgraf/bmon/releases/download/v$(BMON_VERSION) +BMON_DEPENDENCIES = host-pkgconf libconfuse libnl ncurses +BMON_CONF_ENV = ac_cv_prog_cc_c99='-std=gnu99' +BMON_LICENSE = BSD-2-Clause, MIT +BMON_LICENSE_FILES = LICENSE.BSD LICENSE.MIT + +# link dynamically unless explicitly requested otherwise +ifeq ($(BR2_STATIC_LIBS),) +BMON_CONF_OPTS += --disable-static +else +# forgets to explicitly link with pthread for libnl +BMON_CONF_OPTS += LIBS=-lpthread +endif + +$(eval $(autotools-package)) diff --git a/package/boinc/Config.in b/package/boinc/Config.in new file mode 100644 index 00000000..5239019a --- /dev/null +++ b/package/boinc/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_BOINC + bool "boinc" + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS # dlfcn.h + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_INSTALL_LIBSTDCPP + select BR2_PACKAGE_LIBCURL + select BR2_PACKAGE_OPENSSL + help + Open-source software for volunteer computing and grid + computing. + + Use the idle time on your computer to cure diseases, study + global warming, discover pulsars, and do many other types of + scientific research. + + https://boinc.berkeley.edu + +comment "boinc needs a toolchain w/ dynamic library, C++, threads" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS || !BR2_INSTALL_LIBSTDCPP \ + || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/boinc/S99boinc-client b/package/boinc/S99boinc-client new file mode 100644 index 00000000..f4b2a2c7 --- /dev/null +++ b/package/boinc/S99boinc-client @@ -0,0 +1,37 @@ +#!/bin/sh + +NAME=boinc_client +PIDFILE=/var/run/$NAME.pid +DAEMON=/usr/bin/$NAME + +start() { + printf "Starting $NAME: " + start-stop-daemon -S -q -m -b -p $PIDFILE --exec $DAEMON + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +stop() { + printf "Stopping $NAME: " + start-stop-daemon -K -q -p $PIDFILE + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac + +exit $? diff --git a/package/boinc/boinc.hash b/package/boinc/boinc.hash new file mode 100644 index 00000000..b842b6c0 --- /dev/null +++ b/package/boinc/boinc.hash @@ -0,0 +1,4 @@ +# Locally computed: +sha256 caa567da8d3eb50859efe2eeba1c23c7b27d3b0f15b548136e75302713b25303 boinc-7.16.6.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING +sha256 a853c2ffec17057872340eee242ae4d96cbf2b520ae27d903e1b2fef1a5f9d1c COPYING.LESSER diff --git a/package/boinc/boinc.mk b/package/boinc/boinc.mk new file mode 100644 index 00000000..700683e2 --- /dev/null +++ b/package/boinc/boinc.mk @@ -0,0 +1,56 @@ +################################################################################ +# +# boinc +# +################################################################################ + +BOINC_VERSION_MAJOR = 7.16 +BOINC_VERSION = $(BOINC_VERSION_MAJOR).6 +BOINC_SITE = \ + $(call github,BOINC,boinc,client_release/$(BOINC_VERSION_MAJOR)/$(BOINC_VERSION)) +BOINC_LICENSE = LGPL-3.0+ +BOINC_LICENSE_FILES = COPYING COPYING.LESSER +BOINC_CPE_ID_VENDOR = rom_walton +BOINC_SELINUX_MODULES = boinc +BOINC_DEPENDENCIES = host-pkgconf libcurl openssl +BOINC_AUTORECONF = YES +BOINC_CONF_ENV = ac_cv_path__libcurl_config=$(STAGING_DIR)/usr/bin/curl-config +BOINC_CONF_OPTS = \ + --disable-apps \ + --disable-boinczip \ + --disable-manager \ + --disable-server \ + --enable-client \ + --enable-dynamic-client-linkage \ + --enable-libraries \ + --with-pkg-config=$(PKG_CONFIG_HOST_BINARY) \ + --with-libcurl=$(STAGING_DIR)/usr + +ifeq ($(BR2_PACKAGE_FREETYPE),y) +BOINC_DEPENDENCIES += freetype +endif + +ifeq ($(BR2_PACKAGE_LIBFCGI),y) +BOINC_DEPENDENCIES += libfcgi +BOINC_CONF_OPTS += --enable-fcgi +else +BOINC_CONF_OPTS += --disable-fcgi +endif + +# Remove boinc-client because it is incompatible with buildroot +define BOINC_REMOVE_UNNEEDED_FILE + $(RM) $(TARGET_DIR)/etc/init.d/boinc-client +endef + +BOINC_POST_INSTALL_TARGET_HOOKS += BOINC_REMOVE_UNNEEDED_FILE + +define BOINC_USERS + boinc -1 boinc -1 * /var/lib/boinc - BOINC user +endef + +define BOINC_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/boinc/S99boinc-client \ + $(TARGET_DIR)/etc/init.d/S99boinc-client +endef + +$(eval $(autotools-package)) diff --git a/package/bonnie/Config.in b/package/bonnie/Config.in new file mode 100644 index 00000000..4b0adda0 --- /dev/null +++ b/package/bonnie/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_BONNIE + bool "bonnie++" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_MMU # fork() + help + A benchmark suite that is aimed at performing a number of + simple tests of hard drive and file system performance. + + http://www.coker.com.au/bonnie++/ + +comment "bonnie++ needs a toolchain w/ C++" + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/bonnie/bonnie.hash b/package/bonnie/bonnie.hash new file mode 100644 index 00000000..c8118e9d --- /dev/null +++ b/package/bonnie/bonnie.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 cb3866116634bf65760b6806be4afa7e24a1cad6f145c876df8721f01ba2e2cb bonnie++-1.03e.tgz +sha256 bdfeef85436885bc317fdbae3732b17a39e7910eb855553a83b4d2cf9032e773 copyright.txt diff --git a/package/bonnie/bonnie.mk b/package/bonnie/bonnie.mk new file mode 100644 index 00000000..e5c8640d --- /dev/null +++ b/package/bonnie/bonnie.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# bonnie +# +################################################################################ + +BONNIE_VERSION = 1.03e +BONNIE_SOURCE = bonnie++-$(BONNIE_VERSION).tgz +BONNIE_SITE = http://www.coker.com.au/bonnie++ +BONNIE_LICENSE = GPL-2.0 +BONNIE_LICENSE_FILES = copyright.txt + +define BONNIE_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 755 $(@D)/bonnie++ $(TARGET_DIR)/usr/sbin/bonnie++ + $(INSTALL) -D -m 755 $(@D)/zcav $(TARGET_DIR)/usr/sbin/zcav +endef + +$(eval $(autotools-package)) diff --git a/package/boost/0001-fenv.patch b/package/boost/0001-fenv.patch new file mode 100644 index 00000000..9dc7848c --- /dev/null +++ b/package/boost/0001-fenv.patch @@ -0,0 +1,37 @@ +Disable fenv.h in certain configurations + +The boost build system does not properly test whether fenv.h is +available, and if it is, if it supports all the features used by +Boost. This causes build failures with uClibc (reported upstream at +https://svn.boost.org/trac/boost/ticket/11756) but also with glibc on +specific architectures that don't have a full fenv implementation, +such as NIOSII or Microblaze. + +To address this, we forcefully disable the use of fenv support in the +affected configurations. + +Signed-off-by: Bernd Kuhls +[Thomas: add Microblaze/NIOSII exclusions.] +Signed-off-by: Thomas Petazzoni + +Index: b/boost/config/platform/linux.hpp +=================================================================== +--- a/boost/config/platform/linux.hpp ++++ b/boost/config/platform/linux.hpp +@@ -48,6 +48,16 @@ + #endif + + // ++// uClibc has no support for fenv.h, and also a few architectures ++// don't have fenv.h support at all (or incomplete support) even with ++// glibc. ++ ++// ++#if defined(__UCLIBC__) || defined(__nios2__) || defined(__microblaze__) ++# define BOOST_NO_FENV_H ++#endif ++ ++// + // If glibc is past version 2 then we definitely have + // gettimeofday, earlier versions may or may not have it: + // diff --git a/package/boost/Config.in b/package/boost/Config.in new file mode 100644 index 00000000..342b25b1 --- /dev/null +++ b/package/boost/Config.in @@ -0,0 +1,414 @@ +comment "boost needs a toolchain w/ C++, threads, wchar" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR + +config BR2_PACKAGE_BOOST + bool "boost" + depends on BR2_INSTALL_LIBSTDCPP + # Boost could theorically be built with threading=single, but + # that unfortunately doesn't work. Until someone fixes that, + # let's depend on threads. + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_WCHAR + help + A general purpose C++ library + + http://www.boost.org/ + +if BR2_PACKAGE_BOOST + +choice + prompt "Layout" + default BR2_PACKAGE_BOOST_LAYOUT_SYSTEM + help + Selects the layout of Boost binary names + +config BR2_PACKAGE_BOOST_LAYOUT_SYSTEM + bool "system" + help + Boost binary names do not include the Boost version number + or the name and version number of the compiler. + +config BR2_PACKAGE_BOOST_LAYOUT_TAGGED + bool "tagged" + help + Boost binary names include the encoded build properties such + as variant and threading, but do not include compiler name + and version, or Boost version. This option is useful if you + build several variants of Boost, using the same compiler. + +config BR2_PACKAGE_BOOST_LAYOUT_VERSIONED + bool "versioned" + help + Boost binary names include the Boost version number, name + and version of the compiler and encoded build properties. + +endchoice + +choice + prompt "Version" + default BR2_PACKAGE_BOOST_VERSION_1_75 + help + Selects version of Boost + +config BR2_PACKAGE_BOOST_VERSION_1_75 + bool "1.75.0" + +config BR2_PACKAGE_BOOST_VERSION_1_67 + bool "1.67.0" + +endchoice + +config BR2_PACKAGE_BOOST_LAYOUT + string + default "system" if BR2_PACKAGE_BOOST_LAYOUT_SYSTEM + default "tagged" if BR2_PACKAGE_BOOST_LAYOUT_TAGGED + default "versioned" if BR2_PACKAGE_BOOST_LAYOUT_VERSIONED + +config BR2_PACKAGE_BOOST_ATOMIC + bool "boost-atomic" + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS + help + C++11-style atomic<>. + +config BR2_PACKAGE_BOOST_CHRONO + bool "boost-chrono" + select BR2_PACKAGE_BOOST_SYSTEM + help + Useful time utilities. C++11. + +config BR2_PACKAGE_BOOST_CONTAINER + bool "boost-container" + help + Standard library containers and extensions. + +# see +# http://www.boost.org/doc/libs/1_59_0/libs/context/doc/html/context/architectures.html +# for the list of supported architectures. Sparc pretends to be +# supported, but it doesn't build. +config BR2_PACKAGE_BOOST_CONTEXT_ARCH_SUPPORTS + bool + default y if ((BR2_arm || BR2_armeb) && BR2_ARM_CPU_HAS_ARM) + default y if BR2_i386 + default y if BR2_mips + default y if BR2_mipsel + default y if BR2_powerpc + default y if BR2_x86_64 + +config BR2_PACKAGE_BOOST_CONTEXT + bool "boost-context" + depends on BR2_PACKAGE_BOOST_CONTEXT_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS \ + || BR2_TOOLCHAIN_GCC_AT_LEAST_6 # boost-thread + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 + select BR2_PACKAGE_BOOST_THREAD if !BR2_TOOLCHAIN_GCC_AT_LEAST_6 + help + C++11 context switching library. + +config BR2_PACKAGE_BOOST_CONTRACT + bool "boost-contract" + # pthread_condattr_setclock + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + select BR2_PACKAGE_BOOST_SYSTEM + help + Contract programming for C++. + +comment "boost-contract needs a toolchain w/ NPTL" + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL + +config BR2_PACKAGE_BOOST_COROUTINE + bool "boost-coroutine" + depends on BR2_PACKAGE_BOOST_CONTEXT_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS # boost-thread + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # boost-context, boost-thread + select BR2_PACKAGE_BOOST_CHRONO + select BR2_PACKAGE_BOOST_CONTEXT + select BR2_PACKAGE_BOOST_SYSTEM + select BR2_PACKAGE_BOOST_THREAD + help + deprecated coroutine library, the non-depricated coroutine2 + library is a header-only library and does not need to be + selected. + +comment "boost-coroutine needs a toolchain not affected by GCC bug 64735" + depends on BR2_PACKAGE_BOOST_CONTEXT_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 + +config BR2_PACKAGE_BOOST_DATE_TIME + bool "boost-date_time" + help + A set of date-time libraries based on generic programming + concepts. + +config BR2_PACKAGE_BOOST_EXCEPTION + bool "boost-exception" + help + The Boost Exception library supports transporting of arbitrary + data in exception objects, and transporting of exceptions + between threads. + +config BR2_PACKAGE_BOOST_FIBER + bool "boost-fiber" + depends on BR2_PACKAGE_BOOST_CONTEXT_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + # mips support uses the "pause" instruction, only available + # since mips32r2/mips64r2. + depends on !BR2_MIPS_CPU_MIPS32 && !BR2_MIPS_CPU_MIPS64 + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS \ + || BR2_TOOLCHAIN_GCC_AT_LEAST_6 # boost-context -> boost-thread + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # boost-context + select BR2_PACKAGE_BOOST_CONTEXT + select BR2_PACKAGE_BOOST_FILESYSTEM + select BR2_PACKAGE_BOOST_SYSTEM + help + C++11 userland threads library. + +comment "boost-fiber needs a toolchain w/ NPTL" + depends on BR2_PACKAGE_BOOST_CONTEXT_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS \ + || BR2_TOOLCHAIN_GCC_AT_LEAST_6 + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL + +comment "boost-fiber needs a toolchain not affected by GCC bug 64735" + depends on BR2_PACKAGE_BOOST_CONTEXT_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS \ + || BR2_TOOLCHAIN_GCC_AT_LEAST_6 + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 + +config BR2_PACKAGE_BOOST_FILESYSTEM + bool "boost-filesystem" + select BR2_PACKAGE_BOOST_SYSTEM + help + The Boost Filesystem Library provides portable facilities to + query and manipulate paths, files, and directories. + +config BR2_PACKAGE_BOOST_GRAPH + bool "boost-graph" + select BR2_PACKAGE_BOOST_REGEX + help + The BGL graph interface and graph components are generic, in + the same sense as the the Standard Template Library (STL). + +config BR2_PACKAGE_BOOST_GRAPH_PARALLEL + bool "boost-graph_parallel" + help + The PBGL graph interface and graph components are generic, in + the same sense as the the Standard Template Library (STL). + +config BR2_PACKAGE_BOOST_IOSTREAMS + bool "boost-iostreams" + select BR2_PACKAGE_BZIP2 + select BR2_PACKAGE_ZLIB + help + Boost.IOStreams provides a framework for defining streams, + stream buffers and i/o filters. + +config BR2_PACKAGE_BOOST_JSON + bool "boost-json" + select BR2_PACKAGE_BOOST_CONTAINER + help + Boost.JSON is a portable C++ library which provides containers + and algorithms that implement JavaScript Object Notation, or + simply "JSON", a lightweight data-interchange format. + + To use the library "header-only" this option is not needed. + +config BR2_PACKAGE_BOOST_LOCALE + bool "boost-locale" + # When boost-locale is enabled with icu support, Boost no + # longer supports building the libboost_* libraries as static + # libraries, causing build failures when other boost features + # than boost-locale are enabled. To work around this, we + # prevent using boost-locale on static linking configurations + # with icu enabled. See + # https://svn.boost.org/trac/boost/ticket/9685 for more + # details. + depends on !(BR2_STATIC_LIBS && BR2_PACKAGE_ICU) + depends on !(BR2_TOOLCHAIN_HAS_GCC_BUG_64735 && BR2_PACKAGE_ICU) # boost-thread + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS \ + || !BR2_PACKAGE_ICU # boost-thread + select BR2_PACKAGE_BOOST_SYSTEM + select BR2_PACKAGE_BOOST_THREAD if BR2_PACKAGE_ICU + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + Provide localization and Unicode handling tools for C++. + +comment "boost-locale needs a toolchain w/ dynamic library" + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS + depends on BR2_PACKAGE_ICU + depends on BR2_STATIC_LIBS + +comment "boost-locale needs a toolchain not affected by GCC bug 64735" + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS + depends on BR2_PACKAGE_ICU + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 + +config BR2_PACKAGE_BOOST_LOG + bool "boost-log" + depends on !BR2_RISCV_32 + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS # boost-atomic + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # boost-thread + select BR2_PACKAGE_BOOST_ATOMIC + select BR2_PACKAGE_BOOST_DATE_TIME + select BR2_PACKAGE_BOOST_FILESYSTEM + select BR2_PACKAGE_BOOST_REGEX + select BR2_PACKAGE_BOOST_SYSTEM + select BR2_PACKAGE_BOOST_THREAD + help + Logging library. + +comment "boost-log needs a toolchain w/ NPTL" + depends on !BR2_RISCV_32 + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL + +comment "boost-log needs a toolchain not affected by GCC bug 64735" + depends on !BR2_RISCV_32 + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 + +config BR2_PACKAGE_BOOST_MATH + bool "boost-math" + help + Boost.Math includes several contributions in the domain of + mathematics: + + The Greatest Common Divisor and Least Common + Multiple library provides run-time and compile-time evaluation + of the greatest common divisor (GCD) or least common multiple + (LCM) of two integers. + + The Special Functions library currently provides eight + templated special functions, in namespace boost. + + The Complex Number Inverse Trigonometric Functions are the + inverses of trigonometric functions currently present in the + C++ standard. + + Quaternions are a relative of complex numbers often used to + parameterise rotations in three dimentional space. + + Octonions, like quaternions, are a relative of complex + numbers. + +config BR2_PACKAGE_BOOST_MPI + bool "boost-mpi" + help + Message Passing Interface library, for use in + distributed-memory parallel application programming. + +config BR2_PACKAGE_BOOST_NOWIDE + bool "boost-nowide" + help + Library for cross-platform, unicode aware programming. + +config BR2_PACKAGE_BOOST_PROGRAM_OPTIONS + bool "boost-program_options" + help + The program_options library allows program developers to + obtain program options, that is (name, value) pairs from the + user, via conventional methods such as command line and config + file. + +config BR2_PACKAGE_BOOST_PYTHON + bool "boost-python" + depends on BR2_PACKAGE_PYTHON || BR2_PACKAGE_PYTHON3 + help + The Boost Python Library is a framework for interfacing Python + and C++. It allows you to quickly and seamlessly expose C++ + classes functions and objects to Python, and vice-versa, + using no special tools -- just your C++ compiler. + +config BR2_PACKAGE_BOOST_RANDOM + bool "boost-random" + select BR2_PACKAGE_BOOST_SYSTEM + help + A complete system for random number generation. + +config BR2_PACKAGE_BOOST_REGEX + bool "boost-regex" + help + A new infrastructure for generic algorithms that builds on top + of the new iterator concepts. + +config BR2_PACKAGE_BOOST_SERIALIZATION + bool "boost-serialization" + help + Serialization for persistence and marshalling. + +config BR2_PACKAGE_BOOST_STACKTRACE + bool "boost-stacktrace" + depends on !BR2_STATIC_LIBS + help + Gather, store, copy and print backtraces. + +comment "boost-stacktrace needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +config BR2_PACKAGE_BOOST_SYSTEM + bool "boost-system" + help + Operating system support, including the diagnostics support + that will be part of the C++0x standard library. + +config BR2_PACKAGE_BOOST_TEST + bool "boost-test" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_BOOST_SYSTEM + select BR2_PACKAGE_BOOST_TIMER + help + Support for simple program testing, full unit testing, and for + program execution monitoring. + +config BR2_PACKAGE_BOOST_THREAD + bool "boost-thread" + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # std::current_exception + select BR2_PACKAGE_BOOST_CHRONO + select BR2_PACKAGE_BOOST_SYSTEM + help + Portable C++ multi-threading. C++11, C++14. + +comment "boost-thread needs a toolchain not affected by GCC bug 64735" + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 + +config BR2_PACKAGE_BOOST_TIMER + bool "boost-timer" + select BR2_PACKAGE_BOOST_CHRONO + select BR2_PACKAGE_BOOST_SYSTEM + help + Event timer, progress timer, and progress display classes. + +config BR2_PACKAGE_BOOST_TYPE_ERASURE + bool "boost-type_erasure" + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS # boost-thread + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # boost-thread + select BR2_PACKAGE_BOOST_SYSTEM + select BR2_PACKAGE_BOOST_THREAD + help + Runtime polymorphism based on concepts. + +comment "boost-type_erasure needs a toolchain not affected by GCC bug 64735" + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 + +config BR2_PACKAGE_BOOST_WAVE + bool "boost-wave" + # limitation of assembler for coldfire + # error: Tried to convert PC relative branch to absolute jump + depends on !BR2_m68k_cf + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS # boost-thread + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # boost-thread + select BR2_PACKAGE_BOOST_DATE_TIME + select BR2_PACKAGE_BOOST_FILESYSTEM + select BR2_PACKAGE_BOOST_SYSTEM + select BR2_PACKAGE_BOOST_THREAD + help + The Boost.Wave library is a Standards conformant, and highly + configurable implementation of the mandated C99/C++ + preprocessor functionality packed behind an easy to use + iterator interface. + +comment "boost-wave needs a toolchain not affected by GCC bug 64735" + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 + +endif diff --git a/package/boost/boost.hash b/package/boost/boost.hash new file mode 100644 index 00000000..2b32e908 --- /dev/null +++ b/package/boost/boost.hash @@ -0,0 +1,6 @@ +# From https://www.boost.org/users/history/version_1_74_0.html +sha256 2684c972994ee57fc5632e03bf044746f6eb45d4920c343937a465fd67a5adba boost_1_67_0.tar.bz2 +sha256 953db31e016db7bb207f11432bef7df100516eeb746843fa0486a222e3fd49cb boost_1_75_0.tar.bz2 + +# Locally computed +sha256 c9bff75738922193e67fa726fa225535870d2aa1059f91452c411736284ad566 LICENSE_1_0.txt diff --git a/package/boost/boost.mk b/package/boost/boost.mk new file mode 100644 index 00000000..06ceee1e --- /dev/null +++ b/package/boost/boost.mk @@ -0,0 +1,216 @@ +################################################################################ +# +# boost +# +################################################################################ + + +ifeq ($(BR2_PACKAGE_BOOST_VERSION_1_67),y) +BOOST_VERSION = 1.67.0 +BUILD_BOOST_BJAM_PATH = ./tools/build/src/engine/bin.linuxx86_64/bjam +else +BOOST_VERSION = 1.75.0 +BUILD_BOOST_BJAM_PATH = ./tools/build/src/engine/bjam +endif + +BOOST_SOURCE = boost_$(subst .,_,$(BOOST_VERSION)).tar.bz2 +BOOST_SITE = https://boostorg.jfrog.io/artifactory/main/release/$(BOOST_VERSION)/source +BOOST_INSTALL_STAGING = YES +BOOST_LICENSE = BSL-1.0 +BOOST_LICENSE_FILES = LICENSE_1_0.txt +BOOST_CPE_ID_VENDOR = boost + +# keep host variant as minimal as possible +HOST_BOOST_FLAGS = --without-icu --with-toolset=gcc \ + --without-libraries=$(subst $(space),$(comma),atomic chrono context \ + contract container coroutine date_time exception fiber filesystem graph \ + graph_parallel iostreams json locale log math mpi nowide program_options \ + python random regex serialization stacktrace system test thread timer \ + type_erasure wave) + +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_ATOMIC),,atomic) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_CHRONO),,chrono) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_CONTAINER),,container) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_CONTEXT),,context) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_CONTRACT),,contract) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_COROUTINE),,coroutine) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_DATE_TIME),,date_time) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_EXCEPTION),,exception) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_FIBER),,fiber) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_FILESYSTEM),,filesystem) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_GRAPH),,graph) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_GRAPH_PARALLEL),,graph_parallel) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_IOSTREAMS),,iostreams) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_JSON),,json) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_LOCALE),,locale) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_LOG),,log) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_MATH),,math) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_MPI),,mpi) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_NOWIDE),,nowide) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_PROGRAM_OPTIONS),,program_options) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_PYTHON),,python) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_RANDOM),,random) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_REGEX),,regex) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_SERIALIZATION),,serialization) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_STACKTRACE),,stacktrace) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_SYSTEM),,system) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_TEST),,test) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_THREAD),,thread) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_TIMER),,timer) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_TYPE_ERASURE),,type_erasure) +BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_WAVE),,wave) + +BOOST_TARGET_CXXFLAGS = $(TARGET_CXXFLAGS) + +BOOST_FLAGS = --with-toolset=gcc + +ifeq ($(BR2_PACKAGE_ICU),y) +BOOST_FLAGS += --with-icu=$(STAGING_DIR)/usr +BOOST_DEPENDENCIES += icu +else +BOOST_FLAGS += --without-icu +endif + +ifeq ($(BR2_PACKAGE_BOOST_IOSTREAMS),y) +BOOST_DEPENDENCIES += bzip2 zlib +endif + +ifeq ($(BR2_PACKAGE_BOOST_PYTHON),y) +BOOST_FLAGS += --with-python-root=$(HOST_DIR) +ifeq ($(BR2_PACKAGE_PYTHON3),y) +BOOST_FLAGS += --with-python=$(HOST_DIR)/bin/python$(PYTHON3_VERSION_MAJOR) +BOOST_TARGET_CXXFLAGS += -I$(STAGING_DIR)/usr/include/python$(PYTHON3_VERSION_MAJOR) +BOOST_DEPENDENCIES += python3 +else +BOOST_FLAGS += --with-python=$(HOST_DIR)/bin/python$(PYTHON_VERSION_MAJOR) +BOOST_TARGET_CXXFLAGS += -I$(STAGING_DIR)/usr/include/python$(PYTHON_VERSION_MAJOR) +BOOST_DEPENDENCIES += python +endif +endif + +HOST_BOOST_OPTS += --no-cmake-config toolset=gcc threading=multi \ + variant=release link=shared runtime-link=shared + +ifeq ($(BR2_MIPS_OABI32),y) +BOOST_ABI = o32 +else ifeq ($(BR2_arm),y) +BOOST_ABI = aapcs +else +BOOST_ABI = sysv +endif + +BOOST_OPTS += --no-cmake-config \ + toolset=gcc \ + threading=multi \ + abi=$(BOOST_ABI) \ + variant=$(if $(BR2_ENABLE_DEBUG),debug,release) + +ifeq ($(BR2_sparc64),y) +BOOST_OPTS += architecture=sparc instruction-set=ultrasparc +endif + +ifeq ($(BR2_sparc),y) +BOOST_OPTS += architecture=sparc instruction-set=v8 +endif + +# By default, Boost build and installs both the shared and static +# variants. Override that if we want static only or shared only. +ifeq ($(BR2_STATIC_LIBS),y) +BOOST_OPTS += link=static runtime-link=static +else ifeq ($(BR2_SHARED_LIBS),y) +BOOST_OPTS += link=shared runtime-link=shared +endif + +ifeq ($(BR2_PACKAGE_BOOST_LOCALE),y) +ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y) +# posix backend needs monetary.h which isn't available on uClibc +BOOST_OPTS += boost.locale.posix=off +endif + +BOOST_DEPENDENCIES += $(if $(BR2_ENABLE_LOCALE),,libiconv) +endif + +BOOST_WITHOUT_FLAGS_COMMASEPARATED += $(subst $(space),$(comma),$(strip $(BOOST_WITHOUT_FLAGS))) +BOOST_FLAGS += $(if $(BOOST_WITHOUT_FLAGS_COMMASEPARATED), --without-libraries=$(BOOST_WITHOUT_FLAGS_COMMASEPARATED)) +BOOST_LAYOUT = $(call qstrip, $(BR2_PACKAGE_BOOST_LAYOUT)) + +# how verbose should the build be? +BOOST_OPTS += $(if $(QUIET),-d,-d+1) +HOST_BOOST_OPTS += $(if $(QUIET),-d,-d+1) + +define BOOST_CONFIGURE_CMDS + (cd $(@D) && ./bootstrap.sh $(BOOST_FLAGS)) + echo "using gcc : `$(TARGET_CC) -dumpversion` : $(TARGET_CXX) : \"$(BOOST_TARGET_CXXFLAGS)\" \"$(TARGET_LDFLAGS)\" ;" > $(@D)/user-config.jam + echo "" >> $(@D)/user-config.jam + sed -i "s/: -O.* ;/: $(TARGET_OPTIMIZATION) ;/" $(@D)/tools/build/src/tools/gcc.jam +endef + +define BOOST_BUILD_CMDS + (cd $(@D) && $(TARGET_MAKE_ENV) $(BUILD_BOOST_BJAM_PATH) -j$(PARALLEL_JOBS) -q \ + --user-config=$(@D)/user-config.jam \ + $(BOOST_OPTS) \ + --ignore-site-config \ + --layout=$(BOOST_LAYOUT)) +endef + +define BOOST_INSTALL_TARGET_CMDS + (cd $(@D) && $(TARGET_MAKE_ENV) ./b2 -j$(PARALLEL_JOBS) -q \ + --user-config=$(@D)/user-config.jam \ + $(BOOST_OPTS) \ + --prefix=$(TARGET_DIR)/usr \ + --ignore-site-config \ + --layout=$(BOOST_LAYOUT) install ) +endef + +define BOOST_INSTALL_STAGING_CMDS + (cd $(@D) && $(TARGET_MAKE_ENV) $(BUILD_BOOST_BJAM_PATH) -j$(PARALLEL_JOBS) -q \ + --user-config=$(@D)/user-config.jam \ + $(BOOST_OPTS) \ + --prefix=$(STAGING_DIR)/usr \ + --ignore-site-config \ + --layout=$(BOOST_LAYOUT) install) +endef + +# These hooks will help us to detect missing select in Config.in +# Indeed boost buildsystem can select a library even if the user has +# disable it +define BOOST_REMOVE_TARGET_LIBRARIES + rm -rf $(TARGET_DIR)/usr/lib/libboost_* +endef + +BOOST_PRE_INSTALL_TARGET_HOOKS += BOOST_REMOVE_TARGET_LIBRARIES + +define BOOST_CHECK_TARGET_LIBRARIES + @$(foreach disabled,$(BOOST_WITHOUT_FLAGS),\ + ! ls $(TARGET_DIR)/usr/lib/libboost_$(disabled)* 1>/dev/null 2>&1 || \ + ! echo "libboost_$(disabled) shouldn't have been installed: missing select in boost/Config.in" || \ + exit 1;) +endef + +BOOST_POST_INSTALL_TARGET_HOOKS += BOOST_CHECK_TARGET_LIBRARIES + +define HOST_BOOST_CONFIGURE_CMDS + (cd $(@D) && ./bootstrap.sh $(HOST_BOOST_FLAGS)) + echo "using gcc : `$(HOST_CC) -dumpversion` : $(HOSTCXX) : \"$(HOST_CXXFLAGS)\" \"$(HOST_LDFLAGS)\" ;" > $(@D)/user-config.jam + echo "" >> $(@D)/user-config.jam +endef + +define HOST_BOOST_BUILD_CMDS + (cd $(@D) && ./b2 -j$(PARALLEL_JOBS) -q \ + --user-config=$(@D)/user-config.jam \ + $(HOST_BOOST_OPTS) \ + --ignore-site-config \ + --prefix=$(HOST_DIR) ) +endef + +define HOST_BOOST_INSTALL_CMDS + (cd $(@D) && ./b2 -j$(PARALLEL_JOBS) -q \ + --user-config=$(@D)/user-config.jam \ + $(HOST_BOOST_OPTS) \ + --prefix=$(HOST_DIR) \ + --ignore-site-config \ + --layout=$(BOOST_LAYOUT) install ) +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/boot_run/Config.in b/package/boot_run/Config.in new file mode 100644 index 00000000..73c55158 --- /dev/null +++ b/package/boot_run/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_BOOT_RUN + bool "loongson buildroot system autorun script after boot" + depends on BR2_INIT_SYSTEMD || BR2_INIT_BUSYBOX + help + this will create a service which name is boot_run.service + and create a script in /root which name is boot_run.sh + so this service will run this script after system boot + just like /etc/profile + if you don't need it you can run this command + 'systemctl disable boot_run' + if you want to enable this service you can run this command + 'systemctl enable boot_run' + diff --git a/package/boot_run/boot_run.mk b/package/boot_run/boot_run.mk new file mode 100644 index 00000000..8bf169f2 --- /dev/null +++ b/package/boot_run/boot_run.mk @@ -0,0 +1,134 @@ +################################################################################ +# +# boot_run +# +################################################################################ + +BOOT_RUN_SITE = $(TOPDIR)/package/boot_run/boot_run.tar.gz +BOOT_RUN_SITE_METHOD = file + +ifeq ($(BR2_INIT_SYSTEMD),y) +BOOT_RUN_DEPENDENCIES = busybox systemd +endif + +define BOOT_RUN_EXTRACT_CMDS + echo $(BOOT_RUN_SITE) + tar -zxf $(BOOT_RUN_SITE) -C $(@D)/ +endef + +ifeq ($(BR2_PACKAGE_PSPLASH),y) +define BUILD_BOOT_RUN_PSPLASH_END_SETUP + cd $(@D) && echo -n "psplash-write \"MSG " >> boot_run.sh + cd $(@D) && echo -n $(BR2_TARGET_GENERIC_ISSUE) >> boot_run.sh + cd $(@D) && echo "\"" >> boot_run.sh + cd $(@D) && echo "psplash-write \"PROGRESS 100\"" >> boot_run.sh + cd $(@D) && echo "psplash-write \"QUIT\"" >> boot_run.sh +endef +else +define BUILD_BOOT_RUN_PSPLASH_END_SETUP + echo "" +endef +endif + +ifneq ($(findstring $(BR2_PACKAGE_DRIVER_TESTCASE_QT_AUTO_START)$(BR2_PACKAGE_QT_MOVIE_AUTOBOOT),yy),) +define BUILD_BOOT_RUN_QT_START_SLEEP_SETUP + cd $(@D) && echo "if [ -z \"\$$(cat /proc/cmdline | grep ubifs)\" ]; then" >> boot_run.sh + cd $(@D) && echo " sleep 5" >> boot_run.sh + cd $(@D) && echo "fi" >> boot_run.sh +endef +else +define BUILD_BOOT_RUN_QT_START_SLEEP_SETUP + echo "" +endef +endif + +ifeq ($(BR2_PACKAGE_QT_USE_TSLIB),y) +define BUILD_BOOT_RUN_QT_TSLIB_EXPORT_SETUP + cd $(@D) && echo "export QT_QPA_FB_TSLIB=1" >> boot_run.sh +endef + +define BUILD_BOOT_RUN_PROFILE_ADD_QT_TSLIB_EXPORT + cd $(TARGET_DIR)/etc/ && if ! grep -q QT_QPA_FB_TSLIB=1 profile ; then echo "export QT_QPA_FB_TSLIB=1" >> profile; fi +endef + +else +define BUILD_BOOT_RUN_QT_TSLIB_EXPORT_SETUP + echo "not tslib not setup" +endef + +define BUILD_BOOT_RUN_PROFILE_ADD_QT_TSLIB_EXPORT + echo "not tslib export add to profile" +endef + +endif + +ifeq ($(BR2_PACKAGE_DRIVER_TESTCASE_QT_AUTO_START),y) +define BUILD_BOOT_RUN_QT_DRIVER_TESTCASE_SETUP + echo "setup driver_testcase Qt ver run after boot" && cd $(@D) && echo "/root/loongson_test_case/driver_testcase &" >> boot_run.sh +endef +else +define BUILD_BOOT_RUN_QT_DRIVER_TESTCASE_SETUP + echo "" +endef +endif + +ifeq ($(BR2_PACKAGE_QT_MOVIE_AUTOBOOT),y) +define BUILD_BOOT_RUN_LOGO_PLAYER_SETUP + echo "setup logo_player run after boot" && cd $(@D) && echo "cd /root/logo_player && ./logo_player &" >> boot_run.sh +endef +else +define BUILD_BOOT_RUN_LOGO_PLAYER_SETUP + echo "" +endef +endif + +ifeq ($(BR2_PACKAGE_LS3_SYSTEM_TOOL_QT_AUTO_START),y) +define BUILD_BOOT_RUN_QT_LS3_SYSTEM_TOOL_SETUP + echo "setup ls3_system_tool Qt ver run after boot" && cd $(@D) && echo "sleep 5;ls_system_tool_qt &" >> boot_run.sh +endef +else +define BUILD_BOOT_RUN_QT_LS3_SYSTEM_TOOL_SETUP + echo "" +endef +endif + +define BOOT_RUN_BUILD_CMDS + echo "create boot_run.sh" + cd $(@D) && cp boot_run_ori.sh boot_run.sh + $(BUILD_BOOT_RUN_PSPLASH_END_SETUP) + $(BUILD_BOOT_RUN_QT_START_SLEEP_SETUP) + $(BUILD_BOOT_RUN_QT_TSLIB_EXPORT_SETUP) + $(BUILD_BOOT_RUN_LOGO_PLAYER_SETUP) + $(BUILD_BOOT_RUN_QT_DRIVER_TESTCASE_SETUP) + $(BUILD_BOOT_RUN_QT_LS3_SYSTEM_TOOL_SETUP) +endef + +define BOOT_RUN_INSTALL_STAGING_CMDS + echo "nothing to do" +endef + +ifeq ($(BR2_INIT_SYSTEMD),y) +define BOOT_RUN_INSTALL_TARGET_CMDS + echo "install boot_run.service and boot_run.sh" + mkdir -p $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants + cd $(@D) && cp boot_run.service $(TARGET_DIR)/usr/lib/systemd/system/ + cd $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants && ln -b -s ../boot_run.service boot_run_service + cd $(@D) && chmod a+x ./boot_run.sh && cp boot_run.sh $(TARGET_DIR)/root/ +endef +else +define BOOT_RUN_INSTALL_TARGET_CMDS + echo "install boot_run.sh" + mkdir -p $(TARGET_DIR)/etc/init.d + cd $(@D) && chmod a+x S90_boot_run && cp S90_boot_run $(TARGET_DIR)/etc/init.d/ + cd $(@D) && chmod a+x ./boot_run.sh && cp boot_run.sh $(TARGET_DIR)/root/ +endef +endif + +define BUILD_BOOT_RUN_ADD_TLS_LINK + mkdir -p $(TARGET_DIR)/usr/lib64/tls; cd $(TARGET_DIR)/usr/lib64/tls; if ! test -L loongarch ; then ln -s ../../lib64/ loongarch; fi +endef + +BOOT_RUN_TARGET_FINALIZE_HOOKS += BUILD_BOOT_RUN_PROFILE_ADD_QT_TSLIB_EXPORT +BOOT_RUN_TARGET_FINALIZE_HOOKS += BUILD_BOOT_RUN_ADD_TLS_LINK + +$(eval $(generic-package)) diff --git a/package/boot_run/boot_run.tar.gz b/package/boot_run/boot_run.tar.gz new file mode 100644 index 00000000..11898475 Binary files /dev/null and b/package/boot_run/boot_run.tar.gz differ diff --git a/package/bootstrap/Config.in b/package/bootstrap/Config.in new file mode 100644 index 00000000..743d8a32 --- /dev/null +++ b/package/bootstrap/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_BOOTSTRAP + bool "bootstrap" + help + Bootstrap is the most popular HTML, CSS, and JS framework + for developing responsive, mobile first projects on the web. + + http://getbootstrap.com diff --git a/package/bootstrap/bootstrap.hash b/package/bootstrap/bootstrap.hash new file mode 100644 index 00000000..a9602f7e --- /dev/null +++ b/package/bootstrap/bootstrap.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 888ffd30b7e192381e2f6a948ca04669fdcc2ccc2ba016de00d38c8e30793323 bootstrap-4.3.1-dist.zip +sha256 35fbb6dc3891aacaf1ffa07abec2344fdbc454aab533a2a03bcf93577eb7837b css/bootstrap.css diff --git a/package/bootstrap/bootstrap.mk b/package/bootstrap/bootstrap.mk new file mode 100644 index 00000000..eba1244a --- /dev/null +++ b/package/bootstrap/bootstrap.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# bootstrap +# +################################################################################ + +BOOTSTRAP_VERSION = 4.3.1 +BOOTSTRAP_SITE = https://github.com/twbs/bootstrap/releases/download/v$(BOOTSTRAP_VERSION) +BOOTSTRAP_SOURCE = bootstrap-$(BOOTSTRAP_VERSION)-dist.zip +BOOTSTRAP_LICENSE = MIT +BOOTSTRAP_LICENSE_FILES = css/bootstrap.css +BOOTSTRAP_CPE_ID_VENDOR = getbootstrap + +define BOOTSTRAP_EXTRACT_CMDS + $(UNZIP) $(BOOTSTRAP_DL_DIR)/$(BOOTSTRAP_SOURCE) -d $(@D) + mv $(@D)/bootstrap-$(BOOTSTRAP_VERSION)-dist/* $(@D) +endef + +define BOOTSTRAP_INSTALL_TARGET_CMDS + $(INSTALL) -m 0644 -D $(@D)/css/bootstrap.min.css \ + $(TARGET_DIR)/var/www/bootstrap/css/bootstrap.min.css + $(INSTALL) -m 0644 -D $(@D)/css/bootstrap.min.css.map \ + $(TARGET_DIR)/var/www/bootstrap/css/bootstrap.min.css.map + $(INSTALL) -m 0644 -D $(@D)/js/bootstrap.min.js \ + $(TARGET_DIR)/var/www/bootstrap/js/bootstrap.min.js +endef + +$(eval $(generic-package)) diff --git a/package/botan/0001-Add--extra-libs-option-and-group-l-flags-from-LDFLAGS-to-the-end.patch b/package/botan/0001-Add--extra-libs-option-and-group-l-flags-from-LDFLAGS-to-the-end.patch new file mode 100644 index 00000000..8aa5c686 --- /dev/null +++ b/package/botan/0001-Add--extra-libs-option-and-group-l-flags-from-LDFLAGS-to-the-end.patch @@ -0,0 +1,75 @@ +From af63fe89228172e5a395f7e6491fae3bfa9da4b1 Mon Sep 17 00:00:00 2001 +From: Jack Lloyd +Date: Mon, 15 Feb 2021 15:01:38 -0500 +Subject: [PATCH] Add --extra-libs option and group -l flags from LDFLAGS to + the end + +Ref #2622 + +[Retrieved from: +https://github.com/randombit/botan/commit/af63fe89228172e5a395f7e6491fae3bfa9da4b1] +Signed-off-by: Fabrice Fontaine +--- + configure.py | 14 ++++++++++++++ + src/build-data/makefile.in | 2 +- + 2 files changed, 15 insertions(+), 1 deletion(-) + +diff --git a/configure.py b/configure.py +index 73fc0271e9..865a6c8e62 100755 +--- a/configure.py ++++ b/configure.py +@@ -333,6 +333,9 @@ def process_command_line(args): # pylint: disable=too-many-locals,too-many-state + target_group.add_option('--ldflags', metavar='FLAGS', + help='set linker flags', default=None) + ++ target_group.add_option('--extra-libs', metavar='LIBS', ++ help='specify extra libraries to link against', default='') ++ + target_group.add_option('--ar-command', dest='ar_command', metavar='AR', default=None, + help='set path to static archive creator') + +@@ -2020,6 +2023,12 @@ def choose_cxx_exe(): + else: + return '%s %s' % (options.compiler_cache, cxx) + ++ def extra_libs(libs, cc): ++ if libs is None: ++ return '' ++ ++ return ' '.join([(cc.add_lib_option % lib) for lib in libs.split(',')]) ++ + variables = { + 'version_major': Version.major(), + 'version_minor': Version.minor(), +@@ -2149,6 +2158,7 @@ def choose_cxx_exe(): + 'cc_sysroot': sysroot_option(), + 'cc_compile_flags': options.cxxflags or cc.cc_compile_flags(options), + 'ldflags': options.ldflags or '', ++ 'extra_libs': extra_libs(options.extra_libs, cc), + 'cc_warning_flags': cc.cc_warning_flags(options), + 'output_to_exe': cc.output_to_exe, + 'cc_macro': cc.macro_name, +@@ -3029,6 +3039,10 @@ def canonicalize_build_targets(options): + if options.build_fuzzers == 'libfuzzer' and options.fuzzer_lib is None: + options.fuzzer_lib = 'Fuzzer' + ++ if options.ldflags is not None: ++ libs = [m.group(1) for m in re.finditer(r'-l([a-z0-9]+)', options.ldflags)] ++ options.extra_libs += ','.join(libs) ++ + # Checks user options for consistency + # This method DOES NOT change options on behalf of the user but explains + # why the given configuration does not work. +diff --git a/src/build-data/makefile.in b/src/build-data/makefile.in +index 4692d00f71..82f6576650 100644 +--- a/src/build-data/makefile.in ++++ b/src/build-data/makefile.in +@@ -20,7 +20,7 @@ LDFLAGS = %{ldflags} + EXE_LINK_CMD = %{exe_link_cmd} + + LIB_LINKS_TO = %{external_link_cmd} %{link_to} +-EXE_LINKS_TO = %{link_to_botan} $(LIB_LINKS_TO) ++EXE_LINKS_TO = %{link_to_botan} $(LIB_LINKS_TO) %{extra_libs} + + BUILD_FLAGS = $(ABI_FLAGS) $(LANG_FLAGS) $(CXXFLAGS) $(WARN_FLAGS) + diff --git a/package/botan/0002-Avoid-empty-l.patch b/package/botan/0002-Avoid-empty-l.patch new file mode 100644 index 00000000..91023602 --- /dev/null +++ b/package/botan/0002-Avoid-empty-l.patch @@ -0,0 +1,25 @@ +From 4b2225ea54988e09b649768848b3c14b43e064de Mon Sep 17 00:00:00 2001 +From: Jack Lloyd +Date: Mon, 15 Feb 2021 15:11:12 -0500 +Subject: [PATCH] Avoid empty -l + +[Retrieved from: +https://github.com/randombit/botan/commit/4b2225ea54988e09b649768848b3c14b43e064de] +Signed-off-by: Fabrice Fontaine +--- + configure.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.py b/configure.py +index 865a6c8e62..a79f672eca 100755 +--- a/configure.py ++++ b/configure.py +@@ -2027,7 +2027,7 @@ def extra_libs(libs, cc): + if libs is None: + return '' + +- return ' '.join([(cc.add_lib_option % lib) for lib in libs.split(',')]) ++ return ' '.join([(cc.add_lib_option % lib) for lib in libs.split(',') if lib != '']) + + variables = { + 'version_major': Version.major(), diff --git a/package/botan/0003-Add-support-for-riscv32.patch b/package/botan/0003-Add-support-for-riscv32.patch new file mode 100644 index 00000000..d8978b2f --- /dev/null +++ b/package/botan/0003-Add-support-for-riscv32.patch @@ -0,0 +1,31 @@ +From 443bf46ee2b1b1d7acd63e3f00dcbe66646138f8 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Fri, 2 Apr 2021 20:37:03 +0200 +Subject: [PATCH] Add support for riscv32 + +Fix the following build failure: + + ERROR: Unknown or unidentifiable processor "riscv32" + +Fixes: + - http://autobuild.buildroot.org/results/1c399312dbec5d7a28ec90d62fdd8f47fa14ff4b + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/randombit/botan/commit/aa7958880bee2091a8a71bf9e1f6e6efb34581e3] +--- + src/build-data/arch/riscv32.txt | 2 ++ + 1 file changed, 2 insertions(+) + create mode 100644 src/build-data/arch/riscv32.txt + +diff --git a/src/build-data/arch/riscv32.txt b/src/build-data/arch/riscv32.txt +new file mode 100644 +index 000000000..ba88b42e9 +--- /dev/null ++++ b/src/build-data/arch/riscv32.txt +@@ -0,0 +1,2 @@ ++family riscv32 ++endian little +-- +2.30.2 + diff --git a/package/botan/Config.in b/package/botan/Config.in new file mode 100644 index 00000000..95367b90 --- /dev/null +++ b/package/botan/Config.in @@ -0,0 +1,35 @@ +config BR2_PACKAGE_BOTAN_ARCH_SUPPORTS + bool + default y if BR2_aarch64 || BR2_aarch64_be + default y if BR2_arm || BR2_armeb + default y if BR2_i386 || BR2_x86_64 + default y if BR2_m68k + default y if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el + default y if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le + default y if BR2_riscv + default y if BR2_sparc || BR2_sparc64 + default y if BR2_s390x + default y if BR2_sh + +config BR2_PACKAGE_BOTAN + bool "botan" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_PACKAGE_BOTAN_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # std::future + select BR2_PACKAGE_BOOST_FILESYSTEM if BR2_PACKAGE_BOOST + select BR2_PACKAGE_BOOST_SYSTEM if BR2_PACKAGE_BOOST + help + Botan is a crypto library for C++ + + http://botan.randombit.net + +comment "botan needs a toolchain w/ C++, threads, gcc >= 4.8" + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP \ + || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + depends on BR2_PACKAGE_BOTAN_ARCH_SUPPORTS + +comment "botan needs a toolchain not affected by GCC bug 64735" + depends on BR2_PACKAGE_BOTAN_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 diff --git a/package/botan/botan.hash b/package/botan/botan.hash new file mode 100644 index 00000000..d1b1d14a --- /dev/null +++ b/package/botan/botan.hash @@ -0,0 +1,4 @@ +# From https://botan.randombit.net/releases/sha256sums.txt +sha256 79123b654445a4abba486e09a431788545c708237382a3e765664c9f55b03b88 Botan-2.17.3.tar.xz +# Locally computed +sha256 fb7f0322d36fba55ca17d77bc203a9f09a40daa8a249b75cf8887aba36cec9d0 license.txt diff --git a/package/botan/botan.mk b/package/botan/botan.mk new file mode 100644 index 00000000..2e3f99b4 --- /dev/null +++ b/package/botan/botan.mk @@ -0,0 +1,107 @@ +################################################################################ +# +# botan +# +################################################################################ + +BOTAN_VERSION = 2.17.3 +BOTAN_SOURCE = Botan-$(BOTAN_VERSION).tar.xz +BOTAN_SITE = http://botan.randombit.net/releases +BOTAN_LICENSE = BSD-2-Clause +BOTAN_LICENSE_FILES = license.txt +BOTAN_CPE_ID_VENDOR = botan_project + +BOTAN_INSTALL_STAGING = YES + +BOTAN_CONF_OPTS = \ + --cpu=$(BR2_ARCH) \ + --os=linux \ + --cc=gcc \ + --cc-bin="$(TARGET_CXX)" \ + --prefix=/usr \ + --without-documentation + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +BOTAN_CONF_OPTS += --extra-libs=atomic +endif + +ifeq ($(BR2_SHARED_LIBS),y) +BOTAN_CONF_OPTS += \ + --disable-static-library \ + --enable-shared-library +else ifeq ($(BR2_STATIC_LIBS),y) +BOTAN_CONF_OPTS += \ + --disable-shared-library \ + --enable-static-library \ + --no-autoload +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +BOTAN_CONF_OPTS += \ + --enable-shared-library \ + --enable-static-library +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_SSP),y) +BOTAN_CONF_OPTS += --with-stack-protector +else +BOTAN_CONF_OPTS += --without-stack-protector +endif + +ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y) +BOTAN_CONF_OPTS += --without-os-feature=getauxval +endif + +ifeq ($(BR2_PACKAGE_BOOST),y) +BOTAN_DEPENDENCIES += boost +BOTAN_CONF_OPTS += --with-boost +endif + +ifeq ($(BR2_PACKAGE_BZIP2),y) +BOTAN_DEPENDENCIES += bzip2 +BOTAN_CONF_OPTS += --with-bzip2 +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +BOTAN_DEPENDENCIES += openssl +BOTAN_CONF_OPTS += --with-openssl +endif + +ifeq ($(BR2_PACKAGE_SQLITE),y) +BOTAN_DEPENDENCIES += sqlite +BOTAN_CONF_OPTS += --with-sqlite +endif + +ifeq ($(BR2_PACKAGE_XZ),y) +BOTAN_DEPENDENCIES += xz +BOTAN_CONF_OPTS += --with-lzma +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +BOTAN_DEPENDENCIES += zlib +BOTAN_CONF_OPTS += --with-zlib +endif + +ifeq ($(BR2_POWERPC_CPU_HAS_ALTIVEC),) +BOTAN_CONF_OPTS += --disable-altivec +endif + +ifeq ($(BR2_ARM_CPU_HAS_NEON),) +BOTAN_CONF_OPTS += --disable-neon +endif + +define BOTAN_CONFIGURE_CMDS + (cd $(@D); $(TARGET_MAKE_ENV) ./configure.py $(BOTAN_CONF_OPTS)) +endef + +define BOTAN_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) AR="$(TARGET_AR)" +endef + +define BOTAN_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR="$(STAGING_DIR)" install +endef + +define BOTAN_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR="$(TARGET_DIR)" install +endef + +$(eval $(generic-package)) diff --git a/package/brcm-patchram-plus/Config.in b/package/brcm-patchram-plus/Config.in new file mode 100644 index 00000000..2742016e --- /dev/null +++ b/package/brcm-patchram-plus/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_BRCM_PATCHRAM_PLUS + bool "brcm-patchram-plus" + help + Broadcom utility to flash Bluetooth firmwares, extended with + per-device Low Power Mode configuration. + + https://github.com/AsteroidOS/brcm-patchram-plus diff --git a/package/brcm-patchram-plus/brcm-patchram-plus.hash b/package/brcm-patchram-plus/brcm-patchram-plus.hash new file mode 100644 index 00000000..f6910e71 --- /dev/null +++ b/package/brcm-patchram-plus/brcm-patchram-plus.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 febad69fbc9185b4c6a31188cf381fd280b88d93cb7f5a40dfdbab9c599c29a7 brcm-patchram-plus-95b7b6916d661a4da3f9c0adf52d5e1f4f8ab042.tar.gz +sha256 26324f5c563b7e338c2876c8abe90c3681c1e9a6163fc59b494c94ad6493eda4 COPYING diff --git a/package/brcm-patchram-plus/brcm-patchram-plus.mk b/package/brcm-patchram-plus/brcm-patchram-plus.mk new file mode 100644 index 00000000..329571d9 --- /dev/null +++ b/package/brcm-patchram-plus/brcm-patchram-plus.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# brcm-patchram-plus +# +################################################################################ + +BRCM_PATCHRAM_PLUS_VERSION = 95b7b6916d661a4da3f9c0adf52d5e1f4f8ab042 +BRCM_PATCHRAM_PLUS_SITE = $(call github,AsteroidOS,brcm-patchram-plus,$(BRCM_PATCHRAM_PLUS_VERSION)) +BRCM_PATCHRAM_PLUS_LICENSE = Apache-2.0 +BRCM_PATCHRAM_PLUS_LICENSE_FILES = COPYING +BRCM_PATCHRAM_PLUS_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/brickd/Config.in b/package/brickd/Config.in new file mode 100644 index 00000000..7c5b8eb4 --- /dev/null +++ b/package/brickd/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_BRICKD + bool "brickd" + depends on BR2_PACKAGE_HAS_UDEV # gudev + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_WCHAR # glib2 + depends on BR2_USE_MMU # glib2, gudev + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBGUDEV + help + Brick daemon for LEGO MINDSTORMS EV3 (and other LEGO- + compatible devices). This performs tasks like battery + management and controls device-specific hardware. + + https://github.com/ev3dev/brickd + +comment "brickd needs udev /dev management, a toolchain w/ threads, wchar" + depends on BR2_USE_MMU + depends on !BR2_PACKAGE_HAS_UDEV || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_USE_WCHAR diff --git a/package/brickd/S70brickd b/package/brickd/S70brickd new file mode 100644 index 00000000..063ad875 --- /dev/null +++ b/package/brickd/S70brickd @@ -0,0 +1,37 @@ +#!/bin/sh + +NAME=brickd +PIDFILE=/var/run/$NAME.pid +DAEMON=/usr/sbin/$NAME + +start() { + printf "Starting $NAME: " + start-stop-daemon -S -q -m -b -p $PIDFILE --exec $DAEMON + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +stop() { + printf "Stopping $NAME: " + start-stop-daemon -K -q -p $PIDFILE + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac + +exit $? diff --git a/package/brickd/brickd.hash b/package/brickd/brickd.hash new file mode 100644 index 00000000..e9be1b10 --- /dev/null +++ b/package/brickd/brickd.hash @@ -0,0 +1,5 @@ +# Locally computed hash +sha256 205f581103512599cb10992275da8c7207ed732e1a686600877c51b7a742de73 brickd-ev3dev-stretch_1.2.1-br1.tar.gz + +# Hashes for license files: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.txt diff --git a/package/brickd/brickd.mk b/package/brickd/brickd.mk new file mode 100644 index 00000000..7fe28daf --- /dev/null +++ b/package/brickd/brickd.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# brickd +# +################################################################################ + +BRICKD_VERSION = ev3dev-stretch/1.2.1 +BRICKD_SITE = https://github.com/ev3dev/brickd +BRICKD_SITE_METHOD = git +BRICKD_GIT_SUBMODULES = YES + +BRICKD_LICENSE = GPL-2.0 +BRICKD_LICENSE_FILES = LICENSE.txt + +BRICKD_INSTALL_STAGING = YES +BRICKD_DEPENDENCIES = host-pkgconf host-vala libglib2 libgudev + +define BRICKD_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/brickd/S70brickd $(TARGET_DIR)/etc/init.d/S70brickd +endef + +$(eval $(cmake-package)) diff --git a/package/bridge-utils/0001-fix-build-on-musl.patch b/package/bridge-utils/0001-fix-build-on-musl.patch new file mode 100644 index 00000000..1a5d1eb2 --- /dev/null +++ b/package/bridge-utils/0001-fix-build-on-musl.patch @@ -0,0 +1,51 @@ +From 1d5a2e0f88e0c53fede03632fa92ffade5e79ac5 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 11 Apr 2021 10:04:59 +0200 +Subject: [PATCH] fix build on musl + +Build on musl is broken since version 1.7.1 and commit +a1f20223cfcf7b9eae8c9e7e7a07e7bf1377f65b: + +libbridge_devif.c: In function 'fpopen': +libbridge_devif.c:33:12: error: 'PATH_MAX' undeclared (first use in this function); did you mean 'AF_MAX'? + 33 | char path[PATH_MAX]; + | ^~~~~~~~ + | AF_MAX + +Fixes: + - http://autobuild.buildroot.org/results/0f080ff6913595ee2732b93206e5001c837c1bcc + +Signed-off-by: Fabrice Fontaine +[Upstream status: sent to Stephen Hemminger ] +--- + libbridge/libbridge_devif.c | 1 + + libbridge/libbridge_init.c | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/libbridge/libbridge_devif.c b/libbridge/libbridge_devif.c +index 8b7d954..6c679f6 100644 +--- a/libbridge/libbridge_devif.c ++++ b/libbridge/libbridge_devif.c +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + #include + #include + #include +diff --git a/libbridge/libbridge_init.c b/libbridge/libbridge_init.c +index c914971..83a97cd 100644 +--- a/libbridge/libbridge_init.c ++++ b/libbridge/libbridge_init.c +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + #include + #include + #include +-- +2.30.2 + diff --git a/package/bridge-utils/Config.in b/package/bridge-utils/Config.in new file mode 100644 index 00000000..de5883f0 --- /dev/null +++ b/package/bridge-utils/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_BRIDGE_UTILS + bool "bridge-utils" + help + Manage ethernet bridging; a way to connect networks together + to form a larger network. + + This utility is DEPRECATED. No new features will ever be + added. Instead use the bridge command from the iproute2 + package which supports more features. + + https://git.kernel.org/cgit/linux/kernel/git/shemminger/bridge-utils.git/ diff --git a/package/bridge-utils/bridge-utils.hash b/package/bridge-utils/bridge-utils.hash new file mode 100644 index 00000000..60cdd1ce --- /dev/null +++ b/package/bridge-utils/bridge-utils.hash @@ -0,0 +1,5 @@ +# From https://mirrors.edge.kernel.org/pub/linux/utils/net/bridge-utils/sha256sums.asc +sha256 a61d8be4f1a1405c60c8ef38d544f0c18c05b33b9b07e5b4b31033536165e60e bridge-utils-1.7.1.tar.xz + +# locally computed +sha256 995a31f60a9ddb4c609214cc7d17ca94cc3cbc7f37e1e64dba81e7f8ea9d4f91 COPYING diff --git a/package/bridge-utils/bridge-utils.mk b/package/bridge-utils/bridge-utils.mk new file mode 100644 index 00000000..e8e9a3ca --- /dev/null +++ b/package/bridge-utils/bridge-utils.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# bridge-utils +# +################################################################################ + +BRIDGE_UTILS_VERSION = 1.7.1 +BRIDGE_UTILS_SITE = $(BR2_KERNEL_MIRROR)/linux/utils/net/bridge-utils +BRIDGE_UTILS_SOURCE = bridge-utils-$(BRIDGE_UTILS_VERSION).tar.xz +BRIDGE_UTILS_AUTORECONF = YES +BRIDGE_UTILS_LICENSE = GPL-2.0+ +BRIDGE_UTILS_LICENSE_FILES = COPYING +BRIDGE_UTILS_CPE_ID_VENDOR = kernel +BRIDGE_UTILS_SELINUX_MODULES = brctl + +# Avoid using the host's headers. Location is not important as +# required headers will anyway be found from within the sysroot. +BRIDGE_UTILS_CONF_OPTS = --with-linux-headers=$(STAGING_DIR)/usr/include + +$(eval $(autotools-package)) diff --git a/package/brltty/0001-Fix-linking-error-on-mips64el.patch b/package/brltty/0001-Fix-linking-error-on-mips64el.patch new file mode 100644 index 00000000..4882a226 --- /dev/null +++ b/package/brltty/0001-Fix-linking-error-on-mips64el.patch @@ -0,0 +1,42 @@ +From ddb06335935ef1458fe98f99cdc5d5fe6757fd02 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Wed, 3 Oct 2018 19:06:40 +0200 +Subject: [PATCH] Fix linking error on mips64el + +Patch that was fixing build on mips64el was reverted: +https://github.com/brltty/brltty/commit/9e7d62c869d3c1cbe12dda8b0291a4692c193416 + +So fix the issue again, this time by checking if $(GCC) is available as +suggested by Arnout during review of buildroot patch: +https://patchwork.ozlabs.org/patch/972614 + +Fixes: + - http://autobuild.buildroot.org/results/31f682838b3d3b2c7103b5c51f2aba0b89d4f630 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/brltty/brltty/pull/149] +--- + configure.ac | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 1e2774abf..a488d3d52 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -481,7 +481,12 @@ AC_CACHE_CHECK([for make relocatable object command], [brltty_cv_prog_make_objec + case "${host_os}" + in + *) +- brltty_cv_prog_make_object_relocatable="\$(LD) -r -o" ++ if test "${GCC}" = "yes" ++ then ++ brltty_cv_prog_make_object_relocatable="\$(CC) -shared -o" ++ else ++ brltty_cv_prog_make_object_relocatable="\$(LD) -r -o" ++ fi + ;; + esac]) + MKREL="${brltty_cv_prog_make_object_relocatable}" +-- +2.17.1 + diff --git a/package/brltty/0002-Programs-pgmprivs_linux.c-fix-build-with-gcc-5.patch b/package/brltty/0002-Programs-pgmprivs_linux.c-fix-build-with-gcc-5.patch new file mode 100644 index 00000000..92b5aea2 --- /dev/null +++ b/package/brltty/0002-Programs-pgmprivs_linux.c-fix-build-with-gcc-5.patch @@ -0,0 +1,55 @@ +From 92b3fca2d55757680398b55869214fc2d19e9b71 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 21 Feb 2021 20:47:06 +0100 +Subject: [PATCH] Programs/pgmprivs_linux.c: fix build with gcc < 5 + +Build with gcc < 5 is broken since version 6.2 and +https://github.com/brltty/brltty/commit/8ce262f2c15f10a40d9cbae0b3c88b466970a055: + +./pgmprivs_linux.c: In function 'getPrivilegeParameterNames': +./pgmprivs_linux.c:2220:3: error: array initialized from non-constant array expression + static const char *const names[] = NULL_TERMINATED_STRING_ARRAY( + ^ + +Build was partially fixed since +https://github.com/brltty/brltty/commit/8ae78dd560d00c5074158f90be5ac8dac80183db +but it forgot to update pgmprivs_linux.c + +Fixes: + - http://autobuild.buildroot.org/results/58afeb50a0ecdb8b527d7c9946bcae290b79b055 + +Signed-off-by: Fabrice Fontaine +[yann.morin.1998@free.fr: use an actual backport after upstream merge] +Signed-off-by: Yann E. MORIN +--- + Programs/pgmprivs_linux.c | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/Programs/pgmprivs_linux.c b/Programs/pgmprivs_linux.c +index 56e464a82..7dfabaf9b 100644 +--- a/Programs/pgmprivs_linux.c ++++ b/Programs/pgmprivs_linux.c +@@ -2215,13 +2215,15 @@ typedef enum { + PARM_USER, + } Parameters; + ++ ++static const char *const *const pgmprivs_names = ++ NULL_TERMINATED_STRING_ARRAY( ++ "path", "scfmode", "shell", "user" ++ ); ++ + const char *const * + getPrivilegeParameterNames (void) { +- static const char *const names[] = NULL_TERMINATED_STRING_ARRAY( +- "path", "scfmode", "shell", "user" +- ); +- +- return names; ++ return pgmprivs_names; + } + + const char * +-- +2.25.1 + diff --git a/package/brltty/Config.in b/package/brltty/Config.in new file mode 100644 index 00000000..de11af3b --- /dev/null +++ b/package/brltty/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_BRLTTY + bool "brltty" + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + depends on BR2_USE_MMU # fork() + help + A daemon providing access to the Linux console for a blind + person using a refreshable braille display. + + http://brltty.app/ + +if BR2_PACKAGE_BRLTTY + +config BR2_PACKAGE_BRLTTY_TEXT_TABLE + string "text-table" + +endif + +comment "brltty needs a toolchain w/ dynamic lib, threads, wchar" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR diff --git a/package/brltty/S10brltty b/package/brltty/S10brltty new file mode 100644 index 00000000..18e274dc --- /dev/null +++ b/package/brltty/S10brltty @@ -0,0 +1,40 @@ +#!/bin/sh +# +# brltty Starts brltty. +# + +start() { + printf "Starting brltty: " + start-stop-daemon -S -q -p /var/run/brltty.pid \ + --exec /usr/bin/brltty -- -P /var/run/brltty.pid "$@" + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +stop() { + printf "Stopping brltty: " + start-stop-daemon -K -q -p /var/run/brltty.pid + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +restart() { + stop + start "$@" +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + force-reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart|force-reload}" + exit 1 +esac + +exit $? diff --git a/package/brltty/brltty.hash b/package/brltty/brltty.hash new file mode 100644 index 00000000..504b0d80 --- /dev/null +++ b/package/brltty/brltty.hash @@ -0,0 +1,4 @@ +# Locally computed +sha256 b256df8f86b4d6a597cfe982cc5a7c831915de37cfece683ddb02b2329256a8a brltty-6.3.tar.xz +sha256 d80c9d084ebfb50ea1ed91bfbc2410d6ce542097a32c43b00781b83adcb8c77f LICENSE-LGPL +sha256 da78e60359a86eeefb6d6e02bc47d386ece10ae45309d998981157c3746724ab README diff --git a/package/brltty/brltty.mk b/package/brltty/brltty.mk new file mode 100644 index 00000000..602750c9 --- /dev/null +++ b/package/brltty/brltty.mk @@ -0,0 +1,140 @@ +################################################################################ +# +# brltty +# +################################################################################ + +BRLTTY_VERSION = 6.3 +BRLTTY_SOURCE = brltty-$(BRLTTY_VERSION).tar.xz +BRLTTY_SITE = http://brltty.com/archive +BRLTTY_INSTALL_STAGING_OPTS = INSTALL_ROOT=$(STAGING_DIR) install +BRLTTY_INSTALL_TARGET_OPTS = INSTALL_ROOT=$(TARGET_DIR) install +BRLTTY_LICENSE = LGPL-2.1+ +BRLTTY_LICENSE_FILES = LICENSE-LGPL README + +BRLTTY_DEPENDENCIES = \ + $(TARGET_NLS_DEPENDENCIES) \ + host-autoconf \ + host-gawk \ + host-pkgconf \ + $(if $(BR2_PACKAGE_AT_SPI2_CORE),at-spi2-core) + +BRLTTY_CONF_ENV = \ + PKG_CONFIG_FOR_BUILD=$(HOST_DIR)/bin/pkgconf + +BRLTTY_CONF_OPTS = \ + --disable-java-bindings \ + --disable-lisp-bindings \ + --disable-ocaml-bindings \ + --disable-python-bindings \ + --disable-tcl-bindings \ + --disable-x \ + --without-espeak-ng \ + --without-midi-package \ + --without-mikropuhe --without-speechd --without-swift \ + --without-theta + +# Autoreconf is needed because we're patching configure.ac in +# 0001-Fix-linking-error-on-mips64el. However, a plain autoreconf doesn't work, +# because this package is only autoconf-based. +define BRLTTY_AUTOCONF + cd $(BRLTTY_SRCDIR) && $(AUTOCONF) +endef + +BRLTTY_PRE_CONFIGURE_HOOKS += BRLTTY_AUTOCONF + +ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS),y) +BRLTTY_DEPENDENCIES += bluez5_utils +BRLTTY_CONF_OPTS += --with-bluetooth-package +else +BRLTTY_CONF_OPTS += --without-bluetooth-package +endif + +ifeq ($(BR2_PACKAGE_ESPEAK),y) +BRLTTY_DEPENDENCIES += espeak +BRLTTY_CONF_OPTS += --with-espeak=$(TARGET_DIR)/usr +else +BRLTTY_CONF_OPTS += --without-espeak +endif + +ifeq ($(BR2_PACKAGE_EXPAT),y) +# host-expat is needed by tbl2hex's host program +BRLTTY_DEPENDENCIES += host-expat expat +BRLTTY_CONF_OPTS += --enable-expat +else +BRLTTY_CONF_OPTS += --disable-expat +endif + +ifeq ($(BR2_PACKAGE_FLITE),y) +BRLTTY_DEPENDENCIES += flite +BRLTTY_CONF_OPTS += --with-flite=$(STAGING_DIR)/usr +else +BRLTTY_CONF_OPTS += --without-flite +endif + +ifeq ($(BR2_PACKAGE_ICU),y) +BRLTTY_DEPENDENCIES += icu +BRLTTY_CONF_OPTS += --enable-icu +else +BRLTTY_CONF_OPTS += --disable-icu +endif + +ifeq ($(BR2_PACKAGE_NCURSES),y) +BRLTTY_DEPENDENCIES += ncurses +BRLTTY_CONF_OPTS += --with-curses +else +BRLTTY_CONF_OPTS += --without-curses +endif + +ifeq ($(BR2_PACKAGE_PCRE2_32),y) +BRLTTY_DEPENDENCIES += pcre2 +BRLTTY_CONF_OPTS += --with-rgx-package +else ifeq ($(BR2_PACKAGE_PCRE_32),y) +BRLTTY_DEPENDENCIES += pcre +BRLTTY_CONF_OPTS += --with-rgx-package +else +BRLTTY_CONF_OPTS += --without-rgx-package +endif + +ifeq ($(BR2_PACKAGE_POLKIT),y) +BRLTTY_DEPENDENCIES += polkit +BRLTTY_CONF_OPTS += --enable-polkit +else +BRLTTY_CONF_OPTS += --disable-polkit +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +BRLTTY_DEPENDENCIES += systemd +BRLTTY_CONF_OPTS += --with-service-package +else +BRLTTY_CONF_OPTS += --without-service-package +endif + +ifeq ($(BR2_SYSTEM_ENABLE_NLS),y) +BRLTTY_CONF_OPTS += --enable-i18n +else +BRLTTY_CONF_OPTS += --disable-i18n +endif + +BRLTTY_TEXT_TABLE = $(call qstrip,$(BR2_PACKAGE_BRLTTY_TEXT_TABLE)) +ifneq ($(BRLTTY_TEXT_TABLE),) +BRLTTY_CONF_OPTS += --with-text-table=$(BRLTTY_TEXT_TABLE) +endif + +define BRLTTY_INSTALL_CONF + $(INSTALL) -D -m 644 $(@D)/Documents/brltty.conf $(TARGET_DIR)/etc/brltty.conf +endef + +BRLTTY_POST_INSTALL_TARGET_HOOKS += BRLTTY_INSTALL_CONF + +define BRLTTY_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/brltty/S10brltty \ + $(TARGET_DIR)/etc/init.d/S10brltty +endef + +define BRLTTY_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0644 package/brltty/brltty.service \ + $(TARGET_DIR)/usr/lib/systemd/system/brltty.service +endef + +$(eval $(autotools-package)) diff --git a/package/brltty/brltty.service b/package/brltty/brltty.service new file mode 100644 index 00000000..070ec94b --- /dev/null +++ b/package/brltty/brltty.service @@ -0,0 +1,23 @@ +[Unit] +Description=Braille Device Support +Documentation=man:brltty(1) +Documentation=http://brltty.com/ + +DefaultDependencies=no +Before=sysinit.target +After=systemd-udev-settle.service +Wants=systemd-udev-settle.service + +[Service] +Type=simple +ExecStart=/usr/bin/brltty --no-daemon +TimeoutStartSec=5 +TimeoutStopSec=10 +Restart=always +RestartSec=30 +Nice=-10 +OOMScoreAdjust=-900 + +[Install] +WantedBy=sysinit.target + diff --git a/package/brotli/0001-CMake-Allow-using-BUILD_SHARED_LIBS-to-choose-static.patch b/package/brotli/0001-CMake-Allow-using-BUILD_SHARED_LIBS-to-choose-static.patch new file mode 100644 index 00000000..2a3204fc --- /dev/null +++ b/package/brotli/0001-CMake-Allow-using-BUILD_SHARED_LIBS-to-choose-static.patch @@ -0,0 +1,130 @@ +From 6cb16322decd643fed9de332d9cda77f7738b7af Mon Sep 17 00:00:00 2001 +From: Adrian Perez de Castro +Date: Mon, 7 Sep 2020 12:14:22 +0300 +Subject: [PATCH] CMake: Allow using BUILD_SHARED_LIBS to choose static/shared + libs + +By convention projects using CMake which can build either static or +shared libraries use a BUILD_SHARED_LIBS flag to allow selecting between +both: the add_library() command automatically switches between both using +this variable when the library kind is not passed to add_library(). It +is also usual to expose the BUILD_SHARED_LIBS as an user-facing setting +with the option() command. + +This way, the following will both work as expected: + + % cmake -DBUILD_SHARED_LIBS=OFF ... + % cmake -DBUILS_SHARED_LIBS=ON ... + +This is helpful for distributions which need (or want) to build only +static libraries. + +Signed-off-by: Adrian Perez de Castro +[Upstream status: https://github.com/google/brotli/pull/655] +--- + CMakeLists.txt | 46 ++++++++++++++----------------------------- + c/fuzz/test_fuzzer.sh | 6 +++--- + 2 files changed, 18 insertions(+), 34 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 4ff3401..f889311 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -6,6 +6,8 @@ cmake_minimum_required(VERSION 2.8.6) + + project(brotli C) + ++option(BUILD_SHARED_LIBS "Build shared libraries" ON) ++ + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + message(STATUS "Setting build type to Release as none was specified.") + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE) +@@ -137,10 +139,6 @@ set(BROTLI_LIBRARIES_CORE brotlienc brotlidec brotlicommon) + set(BROTLI_LIBRARIES ${BROTLI_LIBRARIES_CORE} ${LIBM_LIBRARY}) + mark_as_advanced(BROTLI_LIBRARIES) + +-set(BROTLI_LIBRARIES_CORE_STATIC brotlienc-static brotlidec-static brotlicommon-static) +-set(BROTLI_LIBRARIES_STATIC ${BROTLI_LIBRARIES_CORE_STATIC} ${LIBM_LIBRARY}) +-mark_as_advanced(BROTLI_LIBRARIES_STATIC) +- + if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") + add_definitions(-DOS_LINUX) + elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") +@@ -161,29 +159,25 @@ transform_sources_list("scripts/sources.lst" "${CMAKE_CURRENT_BINARY_DIR}/source + include("${CMAKE_CURRENT_BINARY_DIR}/sources.lst.cmake") + + if(BROTLI_EMSCRIPTEN) +- set(BROTLI_SHARED_LIBS "") +-else() +- set(BROTLI_SHARED_LIBS brotlicommon brotlidec brotlienc) +- add_library(brotlicommon SHARED ${BROTLI_COMMON_C}) +- add_library(brotlidec SHARED ${BROTLI_DEC_C}) +- add_library(brotlienc SHARED ${BROTLI_ENC_C}) ++ set(BUILD_SHARED_LIBS OFF) + endif() + +-set(BROTLI_STATIC_LIBS brotlicommon-static brotlidec-static brotlienc-static) +-add_library(brotlicommon-static STATIC ${BROTLI_COMMON_C}) +-add_library(brotlidec-static STATIC ${BROTLI_DEC_C}) +-add_library(brotlienc-static STATIC ${BROTLI_ENC_C}) ++add_library(brotlicommon ${BROTLI_COMMON_C}) ++add_library(brotlidec ${BROTLI_DEC_C}) ++add_library(brotlienc ${BROTLI_ENC_C}) + + # Older CMake versions does not understand INCLUDE_DIRECTORIES property. + include_directories(${BROTLI_INCLUDE_DIRS}) + +-foreach(lib IN LISTS BROTLI_SHARED_LIBS) +- target_compile_definitions(${lib} PUBLIC "BROTLI_SHARED_COMPILATION" ) +- string(TOUPPER "${lib}" LIB) +- set_target_properties (${lib} PROPERTIES DEFINE_SYMBOL "${LIB}_SHARED_COMPILATION") +-endforeach() ++if(BUILD_SHARED_LIBS) ++ foreach(lib brotlicommon brotlidec brotlienc) ++ target_compile_definitions(${lib} PUBLIC "BROTLI_SHARED_COMPILATION" ) ++ string(TOUPPER "${lib}" LIB) ++ set_target_properties (${lib} PROPERTIES DEFINE_SYMBOL "${LIB}_SHARED_COMPILATION") ++ endforeach() ++endif() + +-foreach(lib IN LISTS BROTLI_SHARED_LIBS BROTLI_STATIC_LIBS) ++foreach(lib brotlicommon brotlidec brotlienc) + target_link_libraries(${lib} ${LIBM_LIBRARY}) + set_property(TARGET ${lib} APPEND PROPERTY INCLUDE_DIRECTORIES ${BROTLI_INCLUDE_DIRS}) + set_target_properties(${lib} PROPERTIES +@@ -200,9 +194,6 @@ target_link_libraries(brotlidec brotlicommon) + target_link_libraries(brotlienc brotlicommon) + endif() + +-target_link_libraries(brotlidec-static brotlicommon-static) +-target_link_libraries(brotlienc-static brotlicommon-static) +- + # For projects stuck on older versions of CMake, this will set the + # BROTLI_INCLUDE_DIRS and BROTLI_LIBRARIES variables so they still + # have a relatively easy way to use Brotli: +@@ -216,7 +207,7 @@ endif() + + # Build the brotli executable + add_executable(brotli ${BROTLI_CLI_C}) +-target_link_libraries(brotli ${BROTLI_LIBRARIES_STATIC}) ++target_link_libraries(brotli ${BROTLI_LIBRARIES}) + + # Installation + if(NOT BROTLI_EMSCRIPTEN) +@@ -233,13 +224,6 @@ if(NOT BROTLI_BUNDLED_MODE) + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + ) + +- install( +- TARGETS ${BROTLI_LIBRARIES_CORE_STATIC} +- ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" +- LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" +- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" +- ) +- + install( + DIRECTORY ${BROTLI_INCLUDE_DIRS}/brotli + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" +-- +2.28.0 + diff --git a/package/brotli/0002-Revert-Add-runtime-linker-path-to-pkg-config-files.patch b/package/brotli/0002-Revert-Add-runtime-linker-path-to-pkg-config-files.patch new file mode 100644 index 00000000..892aa1da --- /dev/null +++ b/package/brotli/0002-Revert-Add-runtime-linker-path-to-pkg-config-files.patch @@ -0,0 +1,51 @@ +From 09b0992b6acb7faa6fd3b23f9bc036ea117230fc Mon Sep 17 00:00:00 2001 +From: Eugene Kliuchnikov +Date: Wed, 2 Sep 2020 11:38:26 +0200 +Subject: [PATCH] Revert "Add runtime linker path to pkg-config files (#740)" + (#838) + +This reverts commit 31754d4ffce14153b5c2addf7a11019ec23f51c1. +[Retrieved from: +https://github.com/google/brotli/commit/09b0992b6acb7faa6fd3b23f9bc036ea117230fc] +Signed-off-by: Fabrice Fontaine +--- + scripts/libbrotlicommon.pc.in | 2 +- + scripts/libbrotlidec.pc.in | 2 +- + scripts/libbrotlienc.pc.in | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/scripts/libbrotlicommon.pc.in b/scripts/libbrotlicommon.pc.in +index 10ca969e..2a8cf7a3 100644 +--- a/scripts/libbrotlicommon.pc.in ++++ b/scripts/libbrotlicommon.pc.in +@@ -7,5 +7,5 @@ Name: libbrotlicommon + URL: https://github.com/google/brotli + Description: Brotli common dictionary library + Version: @PACKAGE_VERSION@ +-Libs: -L${libdir} -R${libdir} -lbrotlicommon ++Libs: -L${libdir} -lbrotlicommon + Cflags: -I${includedir} +diff --git a/scripts/libbrotlidec.pc.in b/scripts/libbrotlidec.pc.in +index e7c3124f..6f8ef2e4 100644 +--- a/scripts/libbrotlidec.pc.in ++++ b/scripts/libbrotlidec.pc.in +@@ -7,6 +7,6 @@ Name: libbrotlidec + URL: https://github.com/google/brotli + Description: Brotli decoder library + Version: @PACKAGE_VERSION@ +-Libs: -L${libdir} -R${libdir} -lbrotlidec ++Libs: -L${libdir} -lbrotlidec + Requires.private: libbrotlicommon >= 1.0.2 + Cflags: -I${includedir} +diff --git a/scripts/libbrotlienc.pc.in b/scripts/libbrotlienc.pc.in +index 4dd0811b..2098afe2 100644 +--- a/scripts/libbrotlienc.pc.in ++++ b/scripts/libbrotlienc.pc.in +@@ -7,6 +7,6 @@ Name: libbrotlienc + URL: https://github.com/google/brotli + Description: Brotli encoder library + Version: @PACKAGE_VERSION@ +-Libs: -L${libdir} -R${libdir} -lbrotlienc ++Libs: -L${libdir} -lbrotlienc + Requires.private: libbrotlicommon >= 1.0.2 + Cflags: -I${includedir} diff --git a/package/brotli/Config.in b/package/brotli/Config.in new file mode 100644 index 00000000..e40f5b6b --- /dev/null +++ b/package/brotli/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_BROTLI + bool "brotli" + help + Generic-purpose lossless compression library. The algorithm + compresses data using a combination of a modern variant of + the LZ77 algorithm, Huffman coding and 2nd order context + modeling, with a compression ratio comparable to the best + currently available general-purpose compression methods. It + is similar in speed with deflate but offers more dense + compression. + + https://github.com/google/brotli diff --git a/package/brotli/brotli.hash b/package/brotli/brotli.hash new file mode 100644 index 00000000..22f894c4 --- /dev/null +++ b/package/brotli/brotli.hash @@ -0,0 +1,5 @@ +# Locally generated: +sha512 b8e2df955e8796ac1f022eb4ebad29532cb7e3aa6a4b6aee91dbd2c7d637eee84d9a144d3e878895bb5e62800875c2c01c8f737a1261020c54feacf9f676b5f5 v1.0.9.tar.gz + +# Hash for license files: +sha512 bae78184c2f50f86d8c727826d3982c469454c42b9af81f4ef007e39036434fa894cf5be3bf5fc65b7de2301f0a72d067a8186e303327db8a96bd14867e0a3a8 LICENSE diff --git a/package/brotli/brotli.mk b/package/brotli/brotli.mk new file mode 100644 index 00000000..43c8524c --- /dev/null +++ b/package/brotli/brotli.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# brotli +# +################################################################################ + +BROTLI_VERSION = 1.0.9 +BROTLI_SOURCE = v$(BROTLI_VERSION).tar.gz +BROTLI_SITE = https://github.com/google/brotli/archive +BROTLI_LICENSE = MIT +BROTLI_LICENSE_FILES = LICENSE +BROTLI_CPE_ID_VENDOR = google +BROTLI_INSTALL_STAGING = YES +BROTLI_CONF_OPTS = \ + -DBROTLI_DISABLE_TESTS=ON \ + -DBROTLI_BUNDLED_MODE=OFF + +BROTLI_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_68485),y) +BROTLI_CFLAGS += -O0 +endif + +BROTLI_CONF_OPTS += -DCMAKE_C_FLAGS="$(BROTLI_CFLAGS)" + +$(eval $(cmake-package)) diff --git a/package/bsdiff/0001-Add-missing-header-for-u_char.patch b/package/bsdiff/0001-Add-missing-header-for-u_char.patch new file mode 100644 index 00000000..56affb41 --- /dev/null +++ b/package/bsdiff/0001-Add-missing-header-for-u_char.patch @@ -0,0 +1,17 @@ +bspatch: Fix missing header for u_char + +Fixes http://autobuild.buildroot.net/results/31a/31a837cf6e34b02dce498f2b12e40d6d16a5a8e6/ + +Signed-off-by: Jörg Krause + +diff -purN bsdiff-4.3.orig/bspatch.c bsdiff-4.3/bspatch.c +--- bsdiff-4.3.orig/bspatch.c 2015-04-30 13:47:26.485903359 +0200 ++++ bsdiff-4.3/bspatch.c 2015-04-30 13:48:14.808908672 +0200 +@@ -35,6 +35,7 @@ __FBSDID("$FreeBSD: src/usr.bin/bsdiff/b + #include + #include + #include ++#include + + static off_t offtin(u_char *buf) + { diff --git a/package/bsdiff/Config.in b/package/bsdiff/Config.in new file mode 100644 index 00000000..11fd8b9d --- /dev/null +++ b/package/bsdiff/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_BSDIFF + bool "bsdiff" + select BR2_PACKAGE_BZIP2 + help + Binary patch/diff like xdelta but creates smaller diffs. + Needs bzip2 support. + + http://www.daemonology.net/bsdiff/ diff --git a/package/bsdiff/bsdiff.hash b/package/bsdiff/bsdiff.hash new file mode 100644 index 00000000..2c6d02f4 --- /dev/null +++ b/package/bsdiff/bsdiff.hash @@ -0,0 +1,4 @@ +# From http://www.daemonology.net/bsdiff/: +md5 e6d812394f0e0ecc8d5df255aa1db22a bsdiff-4.3.tar.gz +# locally computed +sha256 fc0a6e634ef77dcf14bf36c7b6d1e57ba1ac5c4809073dfaacb3b5f7ab277eb7 bsdiff.c diff --git a/package/bsdiff/bsdiff.mk b/package/bsdiff/bsdiff.mk new file mode 100644 index 00000000..97a1b392 --- /dev/null +++ b/package/bsdiff/bsdiff.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# bsdiff +# +################################################################################ + +BSDIFF_VERSION = 4.3 +BSDIFF_SITE = http://www.daemonology.net/bsdiff +BSDIFF_DEPENDENCIES = bzip2 +BSDIFF_LICENSE = BSD-2-Clause +BSDIFF_LICENSE_FILES = bsdiff.c +BSDIFF_CPE_ID_VENDOR = daemonology + +define BSDIFF_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_LDFLAGS) \ + $(@D)/bsdiff.c -lbz2 -o $(@D)/bsdiff + $(TARGET_MAKE_ENV) $(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_LDFLAGS) \ + $(@D)/bspatch.c -lbz2 -o $(@D)/bspatch +endef + +define BSDIFF_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 755 $(@D)/bsdiff $(TARGET_DIR)/usr/bin/bsdiff + $(INSTALL) -D -m 755 $(@D)/bspatch $(TARGET_DIR)/usr/bin/bspatch +endef + +$(eval $(generic-package)) diff --git a/package/btrfs-progs/Config.in b/package/btrfs-progs/Config.in new file mode 100644 index 00000000..35dfc391 --- /dev/null +++ b/package/btrfs-progs/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_BTRFS_PROGS + bool "btrfs-progs" + depends on BR2_USE_MMU # util-linux + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_LZO + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBBLKID + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + select BR2_PACKAGE_ZLIB + help + Btrfs filesystem utilities + + https://btrfs.wiki.kernel.org/index.php/Main_Page + +comment "btrfs-progs needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/btrfs-progs/Config.in.host b/package/btrfs-progs/Config.in.host new file mode 100644 index 00000000..cdcd2e4e --- /dev/null +++ b/package/btrfs-progs/Config.in.host @@ -0,0 +1,6 @@ +config BR2_PACKAGE_HOST_BTRFS_PROGS + bool "host btrfs-progs" + help + Btrfs filesystem utilities + + https://btrfs.wiki.kernel.org/index.php/Main_Page diff --git a/package/btrfs-progs/btrfs-progs.hash b/package/btrfs-progs/btrfs-progs.hash new file mode 100644 index 00000000..90085136 --- /dev/null +++ b/package/btrfs-progs/btrfs-progs.hash @@ -0,0 +1,6 @@ +# From https://www.kernel.org/pub/linux/kernel/people/kdave/btrfs-progs/sha256sums.asc +sha256 5c2f048b8c814852614b0b262ab2d468ea02774ef01124ebc0ab708df262de5c btrfs-progs-v5.7.tar.xz +# Locally computed +sha256 0d5bf346df9e635a29dcdddf832dc5b002ca6cdc1c5c9c6c567d2a61bb0c5c15 COPYING +sha256 3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986 libbtrfsutil/COPYING +sha256 e3a994d82e644b03a792a930f574002658412f62407f5fee083f2555c5f23118 libbtrfsutil/COPYING.LESSER diff --git a/package/btrfs-progs/btrfs-progs.mk b/package/btrfs-progs/btrfs-progs.mk new file mode 100644 index 00000000..22e1e330 --- /dev/null +++ b/package/btrfs-progs/btrfs-progs.mk @@ -0,0 +1,42 @@ +################################################################################ +# +# btrfs-progs +# +################################################################################ + +BTRFS_PROGS_VERSION = 5.7 +BTRFS_PROGS_SITE = $(BR2_KERNEL_MIRROR)/linux/kernel/people/kdave/btrfs-progs +BTRFS_PROGS_SOURCE = btrfs-progs-v$(BTRFS_PROGS_VERSION).tar.xz +BTRFS_PROGS_DEPENDENCIES = host-pkgconf lzo util-linux zlib +BTRFS_PROGS_CONF_OPTS = --disable-backtrace --disable-zstd --disable-python +BTRFS_PROGS_LICENSE = GPL-2.0, LGPL-3.0+ (libbtrfsutil) +BTRFS_PROGS_LICENSE_FILES = COPYING libbtrfsutil/COPYING \ + libbtrfsutil/COPYING.LESSER +BTRFS_PROGS_INSTALL_STAGING = YES + +# Doesn't autodetect static-only and tries to build both +ifeq ($(BR2_STATIC_LIBS),y) +BTRFS_PROGS_MAKE_OPTS = static +BTRFS_PROGS_INSTALL_TARGET_OPTS = DESTDIR=$(TARGET_DIR) install-static +BTRFS_PROGS_INSTALL_STAGING_OPTS = DESTDIR=$(STAGING_DIR) install-static +endif + +# convert also supports conversion from reiserfs, which needs some +# reiserfs libraries, but we have no package for them in Buildroot, so +# we keep things simple and only handle ext2. +ifeq ($(BR2_PACKAGE_E2FSPROGS),y) +BTRFS_PROGS_CONF_OPTS += --enable-convert --with-convert=ext2 +BTRFS_PROGS_DEPENDENCIES += e2fsprogs +else +BTRFS_PROGS_CONF_OPTS += --disable-convert +endif + +HOST_BTRFS_PROGS_DEPENDENCIES = host-util-linux host-lzo host-zlib +HOST_BTRFS_PROGS_CONF_OPTS = \ + --disable-backtrace \ + --disable-zstd \ + --disable-python \ + --disable-convert + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/bubblewrap/Config.in b/package/bubblewrap/Config.in new file mode 100644 index 00000000..2492cee0 --- /dev/null +++ b/package/bubblewrap/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_BUBBLEWRAP + bool "bubblewrap" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBCAP + help + Unprivileged sandbox tool based on Linux namespaces. + + https://github.com/projectatomic/bubblewrap diff --git a/package/bubblewrap/bubblewrap.hash b/package/bubblewrap/bubblewrap.hash new file mode 100644 index 00000000..d3ccb4cb --- /dev/null +++ b/package/bubblewrap/bubblewrap.hash @@ -0,0 +1,5 @@ +# Locally computed: +sha256 b9c69b9b1c61a608f34325c8e1a495229bacf6e4a07cbb0c80cf7a814d7ccc03 bubblewrap-0.4.1.tar.xz + +# Hash for license files: +sha256 b7993225104d90ddd8024fd838faf300bea5e83d91203eab98e29512acebd69c COPYING diff --git a/package/bubblewrap/bubblewrap.mk b/package/bubblewrap/bubblewrap.mk new file mode 100644 index 00000000..18c17595 --- /dev/null +++ b/package/bubblewrap/bubblewrap.mk @@ -0,0 +1,41 @@ +################################################################################ +# +# bubblewrap +# +################################################################################ + +BUBBLEWRAP_VERSION = 0.4.1 +BUBBLEWRAP_SITE = https://github.com/containers/bubblewrap/releases/download/v$(BUBBLEWRAP_VERSION) +BUBBLEWRAP_SOURCE = bubblewrap-$(BUBBLEWRAP_VERSION).tar.xz +BUBBLEWRAP_DEPENDENCIES = host-pkgconf libcap + +BUBBLEWRAP_LICENSE = LGPL-2.0+ +BUBBLEWRAP_LICENSE_FILES = COPYING +BUBBLEWRAP_CPE_ID_VENDOR = projectatomic + +BUBBLEWRAP_CONF_OPTS = \ + --enable-require-userns=no \ + --disable-man \ + --disable-sudo \ + --with-priv-mode=none + +ifeq ($(BR2_PACKAGE_BASH_COMPLETION),y) +BUBBLEWRAP_CONF_OPTS += --with-bash-completion-dir=/usr/share/bash-completion/completions +else +BUBBLEWRAP_CONF_OPTS += --without-bash-completion-dir +endif + +ifeq ($(BR2_PACKAGE_LIBSELINUX),y) +BUBBLEWRAP_CONF_OPTS += --enable-selinux +BUBBLEWRAP_DEPENDENCIES += libselinux +else +BUBBLEWRAP_CONF_OPTS += --disable-selinux +endif + +# We need to mark bwrap as setuid, in case the kernel +# has user namespaces disabled for non-root users. +define BUBBLEWRAP_PERMISSIONS + /usr/bin/bwrap f 1755 0 0 - - - - - +endef + +$(eval $(autotools-package)) diff --git a/package/bullet/Config.in b/package/bullet/Config.in new file mode 100644 index 00000000..fc285ab3 --- /dev/null +++ b/package/bullet/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_BULLET + bool "bullet" + depends on BR2_INSTALL_LIBSTDCPP + help + Bullet is a Collision Detection and Rigid Body Dynamics + Library. + + http://bulletphysics.org + +comment "bullet needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/bullet/bullet.hash b/package/bullet/bullet.hash new file mode 100644 index 00000000..9da8c733 --- /dev/null +++ b/package/bullet/bullet.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 621b36e91c0371933f3c2156db22c083383164881d2a6b84636759dc4cbb0bb8 bullet-2.89.tar.gz +sha256 885cd516a8420acb7c3e0b1a7119913b686495001ae564e3229740460e8cff59 LICENSE.txt diff --git a/package/bullet/bullet.mk b/package/bullet/bullet.mk new file mode 100644 index 00000000..b25fc5d2 --- /dev/null +++ b/package/bullet/bullet.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# bullet +# +################################################################################ + +BULLET_VERSION = 2.89 +BULLET_SITE = $(call github,bulletphysics,bullet3,$(BULLET_VERSION)) +BULLET_INSTALL_STAGING = YES +BULLET_LICENSE = Zlib +BULLET_LICENSE_FILES = LICENSE.txt + +# Disable demos apps and unit tests. +# Disable Bullet3 library. +BULLET_CONF_OPTS = -DBUILD_UNIT_TESTS=OFF \ + -DBUILD_BULLET2_DEMOS=OFF \ + -DBUILD_BULLET3=OFF + +# extras needs dlfcn.h and NPTL (pthread_barrier_init) +ifeq ($(BR2_STATIC_LIBS):$(BR2_TOOLCHAIN_HAS_THREADS_NPTL),:y) +BULLET_CONF_OPTS += -DBUILD_EXTRAS=ON +else +BULLET_CONF_OPTS += -DBUILD_EXTRAS=OFF +endif + +BULLET_CXXFLAGS = $(TARGET_CXXFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y) +BULLET_CXXFLAGS += -O0 +endif + +BULLET_CONF_OPTS += -DCMAKE_CXX_FLAGS="$(BULLET_CXXFLAGS)" + +$(eval $(cmake-package)) diff --git a/package/bustle/Config.in b/package/bustle/Config.in new file mode 100644 index 00000000..c9d38d0d --- /dev/null +++ b/package/bustle/Config.in @@ -0,0 +1,26 @@ +config BR2_PACKAGE_BUSTLE + bool "bustle" + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + depends on BR2_PACKAGE_DBUS # runtime + select BR2_PACKAGE_LIBPCAP + select BR2_PACKAGE_LIBGLIB2 + help + Bustle is a better dbus-monitor! It records and draws + sequence diagrams of D-Bus activity, showing signal + emissions, method calls and their corresponding returns, + with timestamps for each individual event and the duration + of each method call. This can help you check for unwanted + D-Bus traffic, and pinpoint why your D-Bus-based application + isn't performing as well as you like. + + This only installs the command line bustle-pcap tool, not + the graphical viewer. + + https://gitlab.freedesktop.org/bustle/bustle/ + +comment "bustle needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_DBUS + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/bustle/bustle.hash b/package/bustle/bustle.hash new file mode 100644 index 00000000..0bb899f1 --- /dev/null +++ b/package/bustle/bustle.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 2fb3e9d9a97db3cd9a3ce763e86947b642bd7733b46206177a1677f08726573c bustle-0.8.0.tar.gz +sha256 ad168b537264fba8f94380cb10f60847da7db551fb4281bb6d4f24c74f652a1d LICENSE diff --git a/package/bustle/bustle.mk b/package/bustle/bustle.mk new file mode 100644 index 00000000..b92d1a3e --- /dev/null +++ b/package/bustle/bustle.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# bustle +# +################################################################################ + +BUSTLE_VERSION = 0.8.0 +BUSTLE_SITE = https://hackage.haskell.org/package/bustle-$(BUSTLE_VERSION) +BUSTLE_LICENSE = LGPL-2.1+ +BUSTLE_LICENSE_FILES = LICENSE +BUSTLE_DEPENDENCIES = libglib2 libpcap host-pkgconf + +ifeq ($(BR2_STATIC_LIBS),y) +BUSTLE_MAKE_OPTS += PCAP_CONFIG="$(STAGING_DIR)/usr/bin/pcap-config --static" +else +BUSTLE_MAKE_OPTS += PCAP_CONFIG="$(STAGING_DIR)/usr/bin/pcap-config" +endif + +define BUSTLE_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) \ + $(BUSTLE_MAKE_OPTS) -C $(@D) dist/build/bustle-pcap +endef + +define BUSTLE_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/dist/build/bustle-pcap \ + $(TARGET_DIR)/usr/bin/bustle-pcap +endef + +$(eval $(generic-package)) diff --git a/package/busybox/0001-networking-libiproute-use-linux-if_packet.h-instead-.patch b/package/busybox/0001-networking-libiproute-use-linux-if_packet.h-instead-.patch new file mode 100644 index 00000000..3aabc960 --- /dev/null +++ b/package/busybox/0001-networking-libiproute-use-linux-if_packet.h-instead-.patch @@ -0,0 +1,29 @@ +From d4fec31889ad660a58dab633c511221feb66e817 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sat, 5 Oct 2013 15:55:06 +0200 +Subject: [PATCH] networking/libiproute: use instead of + + +The musl C library doesn't provide the since the +corresponding kernel headers already provides the +necessary definitions. Replacing by + also removes the need to include + + +This commit fixes the build of iplink with the musl C library. + +Signed-off-by: Thomas Petazzoni +[Gustavo: update for busybox 1.22.0] + +diff -Nura busybox-1.22.0.orig/networking/libiproute/iplink.c busybox-1.22.0/networking/libiproute/iplink.c +--- busybox-1.22.0.orig/networking/libiproute/iplink.c 2014-01-01 09:42:40.301137882 -0300 ++++ busybox-1.22.0/networking/libiproute/iplink.c 2014-01-01 09:43:01.282827700 -0300 +@@ -7,7 +7,7 @@ + */ + #include + /*#include - not needed? */ +-#include ++#include + #include + + #include diff --git a/package/busybox/0002-Makefile.flags-strip-non-l-arguments-returned-by-pkg.patch b/package/busybox/0002-Makefile.flags-strip-non-l-arguments-returned-by-pkg.patch new file mode 100644 index 00000000..84435442 --- /dev/null +++ b/package/busybox/0002-Makefile.flags-strip-non-l-arguments-returned-by-pkg.patch @@ -0,0 +1,32 @@ +From 67eb23d2be8aba3c474dac81a15b0fa11e5847b7 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Mon, 25 Nov 2013 22:51:53 +0100 +Subject: [PATCH] Makefile.flags: strip non -l arguments returned by pkg-config + +Signed-off-by: Thomas Petazzoni +[yann.morin.1998@free.fr: refresh for 1.29.0] +[petr.vorel@gmail.com: refresh for 1.32.0] +Signed-off-by: "Yann E. MORIN" +Signed-off-by: Petr Vorel +--- + Makefile.flags | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/Makefile.flags b/Makefile.flags +index 307afa7..885e323 100644 +--- a/Makefile.flags ++++ b/Makefile.flags +@@ -176,7 +176,9 @@ ifeq ($(CONFIG_SELINUX),y) + SELINUX_PC_MODULES = libselinux libsepol + $(eval $(call pkg_check_modules,SELINUX,$(SELINUX_PC_MODULES))) + CPPFLAGS += $(SELINUX_CFLAGS) +-LDLIBS += $(if $(SELINUX_LIBS),$(SELINUX_LIBS:-l%=%),$(SELINUX_PC_MODULES:lib%=%)) ++LDLIBS += $(if $(SELINUX_LIBS),\ ++ $(patsubst -l%,%,$(filter -l%,$(SELINUX_LIBS))),\ ++ $(SELINUX_PC_MODULES:lib%=%)) + endif + + ifeq ($(CONFIG_FEATURE_NSLOOKUP_BIG),y) +-- +1.8.1.2 + diff --git a/package/busybox/0003-busybox-normal-profile.patch b/package/busybox/0003-busybox-normal-profile.patch new file mode 100644 index 00000000..5d1ffe28 --- /dev/null +++ b/package/busybox/0003-busybox-normal-profile.patch @@ -0,0 +1,23 @@ +diff -Nprua busybox-1.33.1-bak/profile busybox-1.33.1/profile +--- busybox-1.33.1-bak/profile 1970-01-01 08:00:00.000000000 +0800 ++++ busybox-1.33.1/profile 2022-10-21 10:31:00.152888616 +0800 +@@ -0,0 +1,19 @@ ++export PATH="/bin:/sbin:/usr/bin:/usr/sbin" ++ ++if [ "$PS1" ]; then ++ if [ "`id -u`" -eq 0 ]; then ++ export PS1='[\u@\h \W]# ' ++ else ++ export PS1='$ ' ++ fi ++fi ++ ++export EDITOR='/bin/vi' ++ ++# Source configuration files from /etc/profile.d ++for i in /etc/profile.d/*.sh ; do ++ if [ -r "$i" ]; then ++ . $i ++ fi ++done ++unset i diff --git a/package/busybox/Config.in b/package/busybox/Config.in new file mode 100644 index 00000000..5e5c5867 --- /dev/null +++ b/package/busybox/Config.in @@ -0,0 +1,103 @@ +config BR2_PACKAGE_BUSYBOX + bool "BusyBox" + default y + help + The Swiss Army Knife of embedded Linux. It slices, it dices, + it makes Julian Fries. + + http://busybox.net/ + + Most people will answer Y. + +if BR2_PACKAGE_BUSYBOX + +config BR2_PACKAGE_BUSYBOX_CONFIG + string "BusyBox configuration file to use?" + default "package/busybox/busybox.config" + help + Some people may wish to use their own modified BusyBox + configuration file, and will specify their config file + location with this option. + + Most people will just use the default BusyBox configuration + file. + +config BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES + string "Additional BusyBox configuration fragment files" + help + A space-separated list of configuration fragment files, + that will be merged to the main BusyBox configuration file. + +# This option is not an option of Busybox, it can be selected even +# if Busybox is not enabled. +config BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + bool "Show packages that are also provided by busybox" + help + Show packages in menuconfig that are potentially also provided + by busybox. + +config BR2_PACKAGE_BUSYBOX_SELINUX + bool "Enable SELinux support" + default y + depends on BR2_PACKAGE_LIBSELINUX + select BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES + help + Enable SELinux support in BusyBox. Please note that + depending on your BusyBox configuration and the SELinux + policy implementation, you may want to also enable + BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES. + + For instance, if your BusyBox configuration only uses a + couple of minor BusyBox features, such as simple command + line utilities, the symlinked version of BusyBox can be used + to save space. If BusyBox provides more features, such as + crond, then individual binaries have to be enabled for the + SELinux type transitions to occur properly. + +config BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES + bool "Individual binaries" + depends on !BR2_STATIC_LIBS + help + By default (i.e with this option disabled), Busybox is + installed as a single binary in /bin/busybox and all applets + are a symbolic link to /bin/busybox. + + With this option enabled, each applet is a separate binary, + which is needed for proper operation with SELinux. + +comment "Busybox individual binaries need a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +config BR2_PACKAGE_BUSYBOX_WATCHDOG + bool "Install the watchdog daemon startup script" + help + Install the watchdog daemon startup script, + that just start at the boot the busybox watchdog daemon. + +if BR2_PACKAGE_BUSYBOX_WATCHDOG + +config BR2_PACKAGE_BUSYBOX_WATCHDOG_PERIOD + string "Delay between reset" + default "5" + help + Select the number of seconds between each + reset of the watchdog (default 5) + + Use ms suffix to specify milliseconds (e.g. 500ms) + +endif + +endif + +if !BR2_PACKAGE_BUSYBOX # kconfig doesn't support else + +comment "You may need to enable other packages to get a working system" +comment "You better know what you're doing!" + +# This option is not an option of Busybox, it can be selected even if +# Busybox is not enabled. This dummy option ensures that packages that +# depend on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS are visible when Busybox +# is disabled. +config BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + default y +endif diff --git a/package/busybox/S01syslogd b/package/busybox/S01syslogd new file mode 100644 index 00000000..15006bc0 --- /dev/null +++ b/package/busybox/S01syslogd @@ -0,0 +1,55 @@ +#!/bin/sh + +DAEMON="syslogd" +PIDFILE="/var/run/$DAEMON.pid" + +SYSLOGD_ARGS="" + +# shellcheck source=/dev/null +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON" + +# BusyBox' syslogd does not create a pidfile, so pass "-n" in the command line +# and use "-m" to instruct start-stop-daemon to create one. +start() { + printf 'Starting %s: ' "$DAEMON" + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon -b -m -S -q -p "$PIDFILE" -x "/sbin/$DAEMON" \ + -- -n $SYSLOGD_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + rm -f "$PIDFILE" + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +case "$1" in + start|stop|restart) + "$1";; + reload) + # Restart, since there is no true "reload" feature. + restart;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/busybox/S02klogd b/package/busybox/S02klogd new file mode 100644 index 00000000..0677e1e5 --- /dev/null +++ b/package/busybox/S02klogd @@ -0,0 +1,55 @@ +#!/bin/sh + +DAEMON="klogd" +PIDFILE="/var/run/$DAEMON.pid" + +KLOGD_ARGS="" + +# shellcheck source=/dev/null +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON" + +# BusyBox' klogd does not create a pidfile, so pass "-n" in the command line +# and use "-m" to instruct start-stop-daemon to create one. +start() { + printf 'Starting %s: ' "$DAEMON" + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon -b -m -S -q -p "$PIDFILE" -x "/sbin/$DAEMON" \ + -- -n $KLOGD_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + rm -f "$PIDFILE" + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +case "$1" in + start|stop|restart) + "$1";; + reload) + # Restart, since there is no true "reload" feature. + restart;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/busybox/S02sysctl b/package/busybox/S02sysctl new file mode 120000 index 00000000..796855c3 --- /dev/null +++ b/package/busybox/S02sysctl @@ -0,0 +1 @@ +../procps-ng/S02sysctl \ No newline at end of file diff --git a/package/busybox/S10mdev b/package/busybox/S10mdev new file mode 100644 index 00000000..3c6f47c1 --- /dev/null +++ b/package/busybox/S10mdev @@ -0,0 +1,42 @@ +#!/bin/sh +# +# Run the mdev daemon +# + +DAEMON="mdev" +PIDFILE="/var/run/$DAEMON.pid" + + +start() { + echo -n "Starting $DAEMON... " + start-stop-daemon -S -b -m -p $PIDFILE -x /sbin/mdev -- -df + [ $? -eq 0 ] && echo "OK" || echo "ERROR" + + # coldplug modules + find /sys/ -name modalias -print0 | \ + xargs -0 sort -u | \ + tr '\n' '\0' | \ + xargs -0 modprobe -abq +} + +stop() { + echo -n "Stopping $DAEMON... " + start-stop-daemon -K -p $PIDFILE + [ $? -eq 0 ] && echo "OK" || echo "ERROR" +} + +restart() { + stop + start +} + +case "$1" in + start|stop|restart) + "$1" + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/busybox/S15watchdog b/package/busybox/S15watchdog new file mode 100644 index 00000000..470c6d73 --- /dev/null +++ b/package/busybox/S15watchdog @@ -0,0 +1,20 @@ +#!/bin/sh +# +# Start watchdog +# + +case "$1" in + start) + echo "Starting watchdog..." + watchdog -t PERIOD /dev/watchdog + ;; + stop) + ;; + restart|reload) + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/busybox/S50telnet b/package/busybox/S50telnet new file mode 100644 index 00000000..82952b8c --- /dev/null +++ b/package/busybox/S50telnet @@ -0,0 +1,39 @@ +#!/bin/sh +# +# Start telnet.... +# + +TELNETD_ARGS=-F +[ -r /etc/default/telnet ] && . /etc/default/telnet + +start() { + printf "Starting telnetd: " + start-stop-daemon -S -q -m -b -p /var/run/telnetd.pid \ + -x /usr/sbin/telnetd -- $TELNETD_ARGS + [ $? = 0 ] && echo "OK" || echo "FAIL" +} + +stop() { + printf "Stopping telnetd: " + start-stop-daemon -K -q -p /var/run/telnetd.pid \ + -x /usr/sbin/telnetd + [ $? = 0 ] && echo "OK" || echo "FAIL" +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + stop + start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/busybox/busybox-minimal.config b/package/busybox/busybox-minimal.config new file mode 100644 index 00000000..a7aa19ea --- /dev/null +++ b/package/busybox/busybox-minimal.config @@ -0,0 +1,1143 @@ +# +# Automatically generated make config: don't edit +# Busybox version: 1.28.0 +# Wed Feb 7 09:47:09 2018 +# +CONFIG_HAVE_DOT_CONFIG=y + +# +# Settings +# +# CONFIG_DESKTOP is not set +# CONFIG_EXTRA_COMPAT is not set +# CONFIG_FEDORA_COMPAT is not set +CONFIG_INCLUDE_SUSv2=y +CONFIG_LONG_OPTS=y +# CONFIG_SHOW_USAGE is not set +# CONFIG_FEATURE_VERBOSE_USAGE is not set +# CONFIG_FEATURE_COMPRESS_USAGE is not set +CONFIG_LFS=y +# CONFIG_PAM is not set +CONFIG_FEATURE_DEVPTS=y +CONFIG_FEATURE_UTMP=y +CONFIG_FEATURE_WTMP=y +# CONFIG_FEATURE_PIDFILE is not set +CONFIG_PID_FILE_PATH="" +CONFIG_BUSYBOX=y +CONFIG_FEATURE_INSTALLER=y +# CONFIG_INSTALL_NO_USR is not set +CONFIG_FEATURE_SUID=y +# CONFIG_FEATURE_SUID_CONFIG is not set +# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set +# CONFIG_FEATURE_PREFER_APPLETS is not set +CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" +# CONFIG_SELINUX is not set +# CONFIG_FEATURE_CLEAN_UP is not set +CONFIG_FEATURE_SYSLOG=y +CONFIG_PLATFORM_LINUX=y + +# +# Build Options +# +CONFIG_STATIC=y +# CONFIG_PIE is not set +# CONFIG_NOMMU is not set +# CONFIG_BUILD_LIBBUSYBOX is not set +# CONFIG_FEATURE_LIBBUSYBOX_STATIC is not set +# CONFIG_FEATURE_INDIVIDUAL is not set +# CONFIG_FEATURE_SHARED_BUSYBOX is not set +CONFIG_CROSS_COMPILER_PREFIX="" +CONFIG_SYSROOT="" +CONFIG_EXTRA_CFLAGS="" +CONFIG_EXTRA_LDFLAGS="" +CONFIG_EXTRA_LDLIBS="" +# CONFIG_USE_PORTABLE_CODE is not set + +# +# Installation Options ("make install" behavior) +# +CONFIG_INSTALL_APPLET_SYMLINKS=y +# CONFIG_INSTALL_APPLET_HARDLINKS is not set +# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set +# CONFIG_INSTALL_APPLET_DONT is not set +# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set +# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set +# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set +CONFIG_PREFIX="./_install" + +# +# Debugging Options +# +# CONFIG_DEBUG is not set +# CONFIG_DEBUG_PESSIMIZE is not set +# CONFIG_DEBUG_SANITIZE is not set +# CONFIG_UNIT_TEST is not set +# CONFIG_WERROR is not set +CONFIG_NO_DEBUG_LIB=y +# CONFIG_DMALLOC is not set +# CONFIG_EFENCE is not set + +# +# Library Tuning +# +# CONFIG_FEATURE_USE_BSS_TAIL is not set +CONFIG_FEATURE_RTMINMAX=y +CONFIG_FEATURE_BUFFERS_USE_MALLOC=y +# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set +# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set +CONFIG_PASSWORD_MINLEN=6 +CONFIG_MD5_SMALL=1 +CONFIG_SHA3_SMALL=1 +# CONFIG_FEATURE_FAST_TOP is not set +# CONFIG_FEATURE_ETC_NETWORKS is not set +CONFIG_FEATURE_EDITING=y +CONFIG_FEATURE_EDITING_MAX_LEN=1024 +CONFIG_FEATURE_EDITING_VI=y +CONFIG_FEATURE_EDITING_HISTORY=999 +CONFIG_FEATURE_EDITING_SAVEHISTORY=y +# CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set +CONFIG_FEATURE_REVERSE_SEARCH=y +CONFIG_FEATURE_TAB_COMPLETION=y +# CONFIG_FEATURE_USERNAME_COMPLETION is not set +CONFIG_FEATURE_EDITING_FANCY_PROMPT=y +# CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set +# CONFIG_LOCALE_SUPPORT is not set +# CONFIG_UNICODE_SUPPORT is not set +# CONFIG_UNICODE_USING_LOCALE is not set +# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set +CONFIG_SUBST_WCHAR=0 +CONFIG_LAST_SUPPORTED_WCHAR=0 +# CONFIG_UNICODE_COMBINING_WCHARS is not set +# CONFIG_UNICODE_WIDE_WCHARS is not set +# CONFIG_UNICODE_BIDI_SUPPORT is not set +# CONFIG_UNICODE_NEUTRAL_TABLE is not set +# CONFIG_UNICODE_PRESERVE_BROKEN is not set +CONFIG_FEATURE_NON_POSIX_CP=y +# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set +CONFIG_FEATURE_USE_SENDFILE=y +CONFIG_FEATURE_COPYBUF_KB=4 +CONFIG_FEATURE_SKIP_ROOTFS=y +CONFIG_MONOTONIC_SYSCALL=y +CONFIG_IOCTL_HEX2STR_ERROR=y +CONFIG_FEATURE_HWIB=y + +# +# Applets +# + +# +# Archival Utilities +# +# CONFIG_FEATURE_SEAMLESS_XZ is not set +# CONFIG_FEATURE_SEAMLESS_LZMA is not set +# CONFIG_FEATURE_SEAMLESS_BZ2 is not set +# CONFIG_FEATURE_SEAMLESS_GZ is not set +# CONFIG_FEATURE_SEAMLESS_Z is not set +# CONFIG_AR is not set +# CONFIG_FEATURE_AR_LONG_FILENAMES is not set +# CONFIG_FEATURE_AR_CREATE is not set +# CONFIG_UNCOMPRESS is not set +# CONFIG_GUNZIP is not set +CONFIG_ZCAT=y +# CONFIG_FEATURE_GUNZIP_LONG_OPTIONS is not set +# CONFIG_BUNZIP2 is not set +CONFIG_BZCAT=y +# CONFIG_UNLZMA is not set +CONFIG_LZCAT=y +# CONFIG_LZMA is not set +# CONFIG_UNXZ is not set +CONFIG_XZCAT=y +# CONFIG_XZ is not set +# CONFIG_BZIP2 is not set +CONFIG_FEATURE_BZIP2_DECOMPRESS=y +# CONFIG_CPIO is not set +# CONFIG_FEATURE_CPIO_O is not set +# CONFIG_FEATURE_CPIO_P is not set +# CONFIG_DPKG is not set +# CONFIG_DPKG_DEB is not set +# CONFIG_GZIP is not set +# CONFIG_FEATURE_GZIP_LONG_OPTIONS is not set +CONFIG_GZIP_FAST=0 +# CONFIG_FEATURE_GZIP_LEVELS is not set +CONFIG_FEATURE_GZIP_DECOMPRESS=y +# CONFIG_LZOP is not set +CONFIG_UNLZOP=y +CONFIG_LZOPCAT=y +# CONFIG_LZOP_COMPR_HIGH is not set +# CONFIG_RPM is not set +# CONFIG_RPM2CPIO is not set +# CONFIG_TAR is not set +# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set +# CONFIG_FEATURE_TAR_CREATE is not set +# CONFIG_FEATURE_TAR_AUTODETECT is not set +# CONFIG_FEATURE_TAR_FROM is not set +# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set +# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set +# CONFIG_FEATURE_TAR_GNU_EXTENSIONS is not set +# CONFIG_FEATURE_TAR_TO_COMMAND is not set +# CONFIG_FEATURE_TAR_UNAME_GNAME is not set +# CONFIG_FEATURE_TAR_NOPRESERVE_TIME is not set +# CONFIG_FEATURE_TAR_SELINUX is not set +# CONFIG_UNZIP is not set +# CONFIG_FEATURE_UNZIP_CDF is not set +# CONFIG_FEATURE_UNZIP_BZIP2 is not set +# CONFIG_FEATURE_UNZIP_LZMA is not set +# CONFIG_FEATURE_UNZIP_XZ is not set +# CONFIG_FEATURE_LZMA_FAST is not set + +# +# Coreutils +# +CONFIG_BASENAME=y +CONFIG_CAT=y +CONFIG_FEATURE_CATN=y +CONFIG_FEATURE_CATV=y +CONFIG_CHGRP=y +CONFIG_CHMOD=y +CONFIG_CHOWN=y +# CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set +CONFIG_CHROOT=y +CONFIG_CKSUM=y +# CONFIG_COMM is not set +CONFIG_CP=y +# CONFIG_FEATURE_CP_LONG_OPTIONS is not set +CONFIG_CUT=y +CONFIG_DATE=y +CONFIG_FEATURE_DATE_ISOFMT=y +# CONFIG_FEATURE_DATE_NANO is not set +CONFIG_FEATURE_DATE_COMPAT=y +CONFIG_DD=y +CONFIG_FEATURE_DD_SIGNAL_HANDLING=y +# CONFIG_FEATURE_DD_THIRD_STATUS_LINE is not set +CONFIG_FEATURE_DD_IBS_OBS=y +CONFIG_FEATURE_DD_STATUS=y +CONFIG_DF=y +# CONFIG_FEATURE_DF_FANCY is not set +CONFIG_DIRNAME=y +CONFIG_DOS2UNIX=y +CONFIG_UNIX2DOS=y +CONFIG_DU=y +CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y +CONFIG_ECHO=y +CONFIG_FEATURE_FANCY_ECHO=y +CONFIG_ENV=y +# CONFIG_EXPAND is not set +# CONFIG_UNEXPAND is not set +CONFIG_EXPR=y +CONFIG_EXPR_MATH_SUPPORT_64=y +CONFIG_FACTOR=y +CONFIG_FALSE=y +CONFIG_FOLD=y +# CONFIG_FSYNC is not set +CONFIG_HEAD=y +CONFIG_FEATURE_FANCY_HEAD=y +CONFIG_HOSTID=y +CONFIG_ID=y +# CONFIG_GROUPS is not set +CONFIG_INSTALL=y +CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y +CONFIG_LINK=y +CONFIG_LN=y +CONFIG_LOGNAME=y +CONFIG_LS=y +CONFIG_FEATURE_LS_FILETYPES=y +CONFIG_FEATURE_LS_FOLLOWLINKS=y +CONFIG_FEATURE_LS_RECURSIVE=y +CONFIG_FEATURE_LS_WIDTH=y +CONFIG_FEATURE_LS_SORTFILES=y +CONFIG_FEATURE_LS_TIMESTAMPS=y +CONFIG_FEATURE_LS_USERNAME=y +CONFIG_FEATURE_LS_COLOR=y +CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y +CONFIG_MD5SUM=y +CONFIG_SHA1SUM=y +CONFIG_SHA256SUM=y +CONFIG_SHA512SUM=y +CONFIG_SHA3SUM=y + +# +# Common options for md5sum, sha1sum, sha256sum, sha512sum, sha3sum +# +CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y +CONFIG_MKDIR=y +CONFIG_MKFIFO=y +CONFIG_MKNOD=y +# CONFIG_MKTEMP is not set +CONFIG_MV=y +CONFIG_NICE=y +CONFIG_NL=y +CONFIG_NOHUP=y +CONFIG_NPROC=y +CONFIG_OD=y +CONFIG_PASTE=y +CONFIG_PRINTENV=y +CONFIG_PRINTF=y +CONFIG_PWD=y +CONFIG_READLINK=y +CONFIG_FEATURE_READLINK_FOLLOW=y +CONFIG_REALPATH=y +CONFIG_RM=y +CONFIG_RMDIR=y +CONFIG_SEQ=y +CONFIG_SHRED=y +# CONFIG_SHUF is not set +CONFIG_SLEEP=y +CONFIG_FEATURE_FANCY_SLEEP=y +CONFIG_FEATURE_FLOAT_SLEEP=y +CONFIG_SORT=y +CONFIG_FEATURE_SORT_BIG=y +# CONFIG_SPLIT is not set +# CONFIG_FEATURE_SPLIT_FANCY is not set +# CONFIG_STAT is not set +# CONFIG_FEATURE_STAT_FORMAT is not set +# CONFIG_FEATURE_STAT_FILESYSTEM is not set +CONFIG_STTY=y +# CONFIG_SUM is not set +CONFIG_SYNC=y +# CONFIG_FEATURE_SYNC_FANCY is not set +# CONFIG_TAC is not set +CONFIG_TAIL=y +CONFIG_FEATURE_FANCY_TAIL=y +CONFIG_TEE=y +CONFIG_FEATURE_TEE_USE_BLOCK_IO=y +CONFIG_TEST=y +CONFIG_TEST1=y +CONFIG_TEST2=y +CONFIG_FEATURE_TEST_64=y +# CONFIG_TIMEOUT is not set +CONFIG_TOUCH=y +# CONFIG_FEATURE_TOUCH_NODEREF is not set +CONFIG_FEATURE_TOUCH_SUSV3=y +CONFIG_TR=y +CONFIG_FEATURE_TR_CLASSES=y +CONFIG_FEATURE_TR_EQUIV=y +CONFIG_TRUE=y +CONFIG_TRUNCATE=y +CONFIG_TTY=y +CONFIG_UNAME=y +CONFIG_UNAME_OSNAME="GNU/Linux" +CONFIG_BB_ARCH=y +CONFIG_UNIQ=y +CONFIG_UNLINK=y +CONFIG_USLEEP=y +CONFIG_UUDECODE=y +# CONFIG_BASE64 is not set +CONFIG_UUENCODE=y +CONFIG_WC=y +# CONFIG_FEATURE_WC_LARGE is not set +CONFIG_WHOAMI=y +CONFIG_WHO=y +CONFIG_W=y +# CONFIG_USERS is not set +CONFIG_YES=y + +# +# Common options +# +CONFIG_FEATURE_VERBOSE=y + +# +# Common options for cp and mv +# +CONFIG_FEATURE_PRESERVE_HARDLINKS=y + +# +# Common options for df, du, ls +# +CONFIG_FEATURE_HUMAN_READABLE=y + +# +# Console Utilities +# +# CONFIG_CHVT is not set +# CONFIG_CLEAR is not set +# CONFIG_DEALLOCVT is not set +# CONFIG_DUMPKMAP is not set +# CONFIG_FGCONSOLE is not set +# CONFIG_KBD_MODE is not set +# CONFIG_LOADFONT is not set +# CONFIG_SETFONT is not set +# CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set +CONFIG_DEFAULT_SETFONT_DIR="" +# CONFIG_FEATURE_LOADFONT_PSF2 is not set +# CONFIG_FEATURE_LOADFONT_RAW is not set +# CONFIG_LOADKMAP is not set +# CONFIG_OPENVT is not set +# CONFIG_RESET is not set +# CONFIG_RESIZE is not set +# CONFIG_FEATURE_RESIZE_PRINT is not set +# CONFIG_SETCONSOLE is not set +# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set +# CONFIG_SETKEYCODES is not set +# CONFIG_SETLOGCONS is not set +# CONFIG_SHOWKEY is not set + +# +# Debian Utilities +# +# CONFIG_PIPE_PROGRESS is not set +CONFIG_RUN_PARTS=y +CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y +CONFIG_FEATURE_RUN_PARTS_FANCY=y +CONFIG_START_STOP_DAEMON=y +CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y +CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y +CONFIG_WHICH=y + +# +# klibc-utils +# +# CONFIG_MINIPS is not set +CONFIG_NUKE=y +CONFIG_RESUME=y +CONFIG_RUN_INIT=y + +# +# Editors +# +# CONFIG_AWK is not set +# CONFIG_FEATURE_AWK_LIBM is not set +# CONFIG_FEATURE_AWK_GNU_EXTENSIONS is not set +# CONFIG_CMP is not set +# CONFIG_DIFF is not set +# CONFIG_FEATURE_DIFF_LONG_OPTIONS is not set +# CONFIG_FEATURE_DIFF_DIR is not set +# CONFIG_ED is not set +# CONFIG_PATCH is not set +CONFIG_SED=y +# CONFIG_VI is not set +CONFIG_FEATURE_VI_MAX_LEN=0 +# CONFIG_FEATURE_VI_8BIT is not set +# CONFIG_FEATURE_VI_COLON is not set +# CONFIG_FEATURE_VI_YANKMARK is not set +# CONFIG_FEATURE_VI_SEARCH is not set +# CONFIG_FEATURE_VI_REGEX_SEARCH is not set +# CONFIG_FEATURE_VI_USE_SIGNALS is not set +# CONFIG_FEATURE_VI_DOT_CMD is not set +# CONFIG_FEATURE_VI_READONLY is not set +# CONFIG_FEATURE_VI_SETOPTS is not set +# CONFIG_FEATURE_VI_SET is not set +# CONFIG_FEATURE_VI_WIN_RESIZE is not set +# CONFIG_FEATURE_VI_ASK_TERMINAL is not set +# CONFIG_FEATURE_VI_UNDO is not set +# CONFIG_FEATURE_VI_UNDO_QUEUE is not set +CONFIG_FEATURE_VI_UNDO_QUEUE_MAX=0 +# CONFIG_FEATURE_ALLOW_EXEC is not set + +# +# Finding Utilities +# +# CONFIG_FIND is not set +# CONFIG_FEATURE_FIND_PRINT0 is not set +# CONFIG_FEATURE_FIND_MTIME is not set +# CONFIG_FEATURE_FIND_MMIN is not set +# CONFIG_FEATURE_FIND_PERM is not set +# CONFIG_FEATURE_FIND_TYPE is not set +# CONFIG_FEATURE_FIND_XDEV is not set +# CONFIG_FEATURE_FIND_MAXDEPTH is not set +# CONFIG_FEATURE_FIND_NEWER is not set +# CONFIG_FEATURE_FIND_INUM is not set +# CONFIG_FEATURE_FIND_EXEC is not set +# CONFIG_FEATURE_FIND_EXEC_PLUS is not set +# CONFIG_FEATURE_FIND_USER is not set +# CONFIG_FEATURE_FIND_GROUP is not set +# CONFIG_FEATURE_FIND_NOT is not set +# CONFIG_FEATURE_FIND_DEPTH is not set +# CONFIG_FEATURE_FIND_PAREN is not set +# CONFIG_FEATURE_FIND_SIZE is not set +# CONFIG_FEATURE_FIND_PRUNE is not set +# CONFIG_FEATURE_FIND_DELETE is not set +# CONFIG_FEATURE_FIND_PATH is not set +# CONFIG_FEATURE_FIND_REGEX is not set +# CONFIG_FEATURE_FIND_CONTEXT is not set +# CONFIG_FEATURE_FIND_LINKS is not set +CONFIG_GREP=y +CONFIG_EGREP=y +CONFIG_FGREP=y +CONFIG_FEATURE_GREP_CONTEXT=y +CONFIG_XARGS=y +# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set +CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y +CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y +CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y +CONFIG_FEATURE_XARGS_SUPPORT_REPL_STR=y +CONFIG_FEATURE_XARGS_SUPPORT_PARALLEL=y +CONFIG_FEATURE_XARGS_SUPPORT_ARGS_FILE=y + +# +# Init Utilities +# +# CONFIG_BOOTCHARTD is not set +# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set +# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set +CONFIG_HALT=y +CONFIG_POWEROFF=y +CONFIG_REBOOT=y +# CONFIG_FEATURE_CALL_TELINIT is not set +CONFIG_TELINIT_PATH="" +CONFIG_INIT=y +CONFIG_LINUXRC=y +CONFIG_FEATURE_USE_INITTAB=y +CONFIG_FEATURE_KILL_REMOVED=y +CONFIG_FEATURE_KILL_DELAY=0 +CONFIG_FEATURE_INIT_SCTTY=y +CONFIG_FEATURE_INIT_SYSLOG=y +CONFIG_FEATURE_INIT_QUIET=y +# CONFIG_FEATURE_INIT_COREDUMPS is not set +CONFIG_INIT_TERMINAL_TYPE="linux" +CONFIG_FEATURE_INIT_MODIFY_CMDLINE=y + +# +# Login/Password Management Utilities +# +CONFIG_FEATURE_SHADOWPASSWDS=y +# CONFIG_USE_BB_PWD_GRP is not set +# CONFIG_USE_BB_SHADOW is not set +CONFIG_USE_BB_CRYPT=y +# CONFIG_USE_BB_CRYPT_SHA is not set +# CONFIG_ADDGROUP is not set +# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set +# CONFIG_ADD_SHELL is not set +# CONFIG_REMOVE_SHELL is not set +CONFIG_ADDUSER=y +# CONFIG_FEATURE_CHECK_NAMES is not set +CONFIG_LAST_ID=60000 +CONFIG_FIRST_SYSTEM_ID=100 +CONFIG_LAST_SYSTEM_ID=999 +# CONFIG_CHPASSWD is not set +CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="des" +# CONFIG_CRYPTPW is not set +# CONFIG_MKPASSWD is not set +# CONFIG_DELUSER is not set +# CONFIG_DELGROUP is not set +# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set +CONFIG_GETTY=y +CONFIG_LOGIN=y +# CONFIG_LOGIN_SESSION_AS_CHILD is not set +# CONFIG_LOGIN_SCRIPTS is not set +CONFIG_FEATURE_NOLOGIN=y +CONFIG_FEATURE_SECURETTY=y +CONFIG_PASSWD=y +CONFIG_FEATURE_PASSWD_WEAK_CHECK=y +# CONFIG_SU is not set +# CONFIG_FEATURE_SU_SYSLOG is not set +# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set +# CONFIG_FEATURE_SU_BLANK_PW_NEEDS_SECURE_TTY is not set +# CONFIG_SULOGIN is not set +# CONFIG_VLOCK is not set + +# +# Linux Ext2 FS Progs +# +# CONFIG_CHATTR is not set +# CONFIG_FSCK is not set +# CONFIG_LSATTR is not set +# CONFIG_TUNE2FS is not set + +# +# Linux Module Utilities +# +# CONFIG_MODPROBE_SMALL is not set +# CONFIG_DEPMOD is not set +# CONFIG_INSMOD is not set +# CONFIG_LSMOD is not set +# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set +# CONFIG_MODINFO is not set +# CONFIG_MODPROBE is not set +# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set +# CONFIG_RMMOD is not set + +# +# Options common to multiple modutils +# +# CONFIG_FEATURE_CMDLINE_MODULE_OPTIONS is not set +# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set +# CONFIG_FEATURE_2_4_MODULES is not set +# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set +# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set +# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set +# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set +# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set +# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set +# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set +# CONFIG_FEATURE_MODUTILS_ALIAS is not set +# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set +CONFIG_DEFAULT_MODULES_DIR="" +CONFIG_DEFAULT_DEPMOD_FILE="" + +# +# Linux System Utilities +# +# CONFIG_ACPID is not set +# CONFIG_FEATURE_ACPID_COMPAT is not set +# CONFIG_BLKDISCARD is not set +# CONFIG_BLKID is not set +# CONFIG_FEATURE_BLKID_TYPE is not set +# CONFIG_BLOCKDEV is not set +# CONFIG_CAL is not set +# CONFIG_CHRT is not set +CONFIG_DMESG=y +CONFIG_FEATURE_DMESG_PRETTY=y +# CONFIG_EJECT is not set +# CONFIG_FEATURE_EJECT_SCSI is not set +CONFIG_FALLOCATE=y +# CONFIG_FATATTR is not set +# CONFIG_FBSET is not set +# CONFIG_FEATURE_FBSET_FANCY is not set +# CONFIG_FEATURE_FBSET_READMODE is not set +# CONFIG_FDFORMAT is not set +# CONFIG_FDISK is not set +# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set +# CONFIG_FEATURE_FDISK_WRITABLE is not set +# CONFIG_FEATURE_AIX_LABEL is not set +# CONFIG_FEATURE_SGI_LABEL is not set +# CONFIG_FEATURE_SUN_LABEL is not set +# CONFIG_FEATURE_OSF_LABEL is not set +# CONFIG_FEATURE_GPT_LABEL is not set +# CONFIG_FEATURE_FDISK_ADVANCED is not set +# CONFIG_FINDFS is not set +# CONFIG_FLOCK is not set +# CONFIG_FDFLUSH is not set +CONFIG_FREERAMDISK=y +# CONFIG_FSCK_MINIX is not set +CONFIG_FSFREEZE=y +# CONFIG_FSTRIM is not set +CONFIG_GETOPT=y +CONFIG_FEATURE_GETOPT_LONG=y +# CONFIG_HEXDUMP is not set +# CONFIG_FEATURE_HEXDUMP_REVERSE is not set +# CONFIG_HD is not set +CONFIG_XXD=y +# CONFIG_HWCLOCK is not set +# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set +# CONFIG_IONICE is not set +# CONFIG_IPCRM is not set +# CONFIG_IPCS is not set +# CONFIG_LAST is not set +# CONFIG_FEATURE_LAST_FANCY is not set +# CONFIG_LOSETUP is not set +# CONFIG_LSPCI is not set +# CONFIG_LSUSB is not set +# CONFIG_MDEV is not set +# CONFIG_FEATURE_MDEV_CONF is not set +# CONFIG_FEATURE_MDEV_RENAME is not set +# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set +# CONFIG_FEATURE_MDEV_EXEC is not set +# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set +CONFIG_MESG=y +CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP=y +CONFIG_MKE2FS=y +# CONFIG_MKFS_EXT2 is not set +# CONFIG_MKFS_MINIX is not set +# CONFIG_FEATURE_MINIX2 is not set +# CONFIG_MKFS_REISER is not set +CONFIG_MKDOSFS=y +# CONFIG_MKFS_VFAT is not set +# CONFIG_MKSWAP is not set +# CONFIG_FEATURE_MKSWAP_UUID is not set +CONFIG_MORE=y +CONFIG_MOUNT=y +# CONFIG_FEATURE_MOUNT_FAKE is not set +# CONFIG_FEATURE_MOUNT_VERBOSE is not set +# CONFIG_FEATURE_MOUNT_HELPERS is not set +# CONFIG_FEATURE_MOUNT_LABEL is not set +# CONFIG_FEATURE_MOUNT_NFS is not set +CONFIG_FEATURE_MOUNT_CIFS=y +CONFIG_FEATURE_MOUNT_FLAGS=y +CONFIG_FEATURE_MOUNT_FSTAB=y +CONFIG_FEATURE_MOUNT_OTHERTAB=y +# CONFIG_MOUNTPOINT is not set +# CONFIG_NSENTER is not set +# CONFIG_PIVOT_ROOT is not set +# CONFIG_RDATE is not set +# CONFIG_RDEV is not set +# CONFIG_READPROFILE is not set +# CONFIG_RENICE is not set +# CONFIG_REV is not set +# CONFIG_RTCWAKE is not set +# CONFIG_SCRIPT is not set +# CONFIG_SCRIPTREPLAY is not set +# CONFIG_SETARCH is not set +CONFIG_LINUX32=y +CONFIG_LINUX64=y +CONFIG_SETPRIV=y +CONFIG_FEATURE_SETPRIV_DUMP=y +CONFIG_FEATURE_SETPRIV_CAPABILITIES=y +CONFIG_FEATURE_SETPRIV_CAPABILITY_NAMES=y +# CONFIG_SETSID is not set +CONFIG_SWAPON=y +# CONFIG_FEATURE_SWAPON_DISCARD is not set +# CONFIG_FEATURE_SWAPON_PRI is not set +CONFIG_SWAPOFF=y +CONFIG_FEATURE_SWAPONOFF_LABEL=y +# CONFIG_SWITCH_ROOT is not set +# CONFIG_TASKSET is not set +# CONFIG_FEATURE_TASKSET_FANCY is not set +# CONFIG_UEVENT is not set +CONFIG_UMOUNT=y +CONFIG_FEATURE_UMOUNT_ALL=y +# CONFIG_UNSHARE is not set +# CONFIG_WALL is not set + +# +# Common options for mount/umount +# +CONFIG_FEATURE_MOUNT_LOOP=y +CONFIG_FEATURE_MOUNT_LOOP_CREATE=y +# CONFIG_FEATURE_MTAB_SUPPORT is not set +CONFIG_VOLUMEID=y + +# +# Filesystem/Volume identification +# +# CONFIG_FEATURE_VOLUMEID_BCACHE is not set +# CONFIG_FEATURE_VOLUMEID_BTRFS is not set +# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set +# CONFIG_FEATURE_VOLUMEID_EXFAT is not set +# CONFIG_FEATURE_VOLUMEID_EXT is not set +# CONFIG_FEATURE_VOLUMEID_F2FS is not set +# CONFIG_FEATURE_VOLUMEID_FAT is not set +# CONFIG_FEATURE_VOLUMEID_HFS is not set +# CONFIG_FEATURE_VOLUMEID_ISO9660 is not set +# CONFIG_FEATURE_VOLUMEID_JFS is not set +# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set +# CONFIG_FEATURE_VOLUMEID_LINUXSWAP is not set +# CONFIG_FEATURE_VOLUMEID_LUKS is not set +CONFIG_FEATURE_VOLUMEID_MINIX=y +# CONFIG_FEATURE_VOLUMEID_NILFS is not set +# CONFIG_FEATURE_VOLUMEID_NTFS is not set +# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set +# CONFIG_FEATURE_VOLUMEID_REISERFS is not set +# CONFIG_FEATURE_VOLUMEID_ROMFS is not set +# CONFIG_FEATURE_VOLUMEID_SQUASHFS is not set +# CONFIG_FEATURE_VOLUMEID_SYSV is not set +# CONFIG_FEATURE_VOLUMEID_UBIFS is not set +# CONFIG_FEATURE_VOLUMEID_UDF is not set +# CONFIG_FEATURE_VOLUMEID_XFS is not set + +# +# Miscellaneous Utilities +# +# CONFIG_ADJTIMEX is not set +# CONFIG_BBCONFIG is not set +# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set +# CONFIG_BEEP is not set +CONFIG_FEATURE_BEEP_FREQ=0 +CONFIG_FEATURE_BEEP_LENGTH_MS=0 +# CONFIG_CHAT is not set +# CONFIG_FEATURE_CHAT_NOFAIL is not set +# CONFIG_FEATURE_CHAT_TTY_HIFI is not set +# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set +# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set +# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set +# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set +# CONFIG_FEATURE_CHAT_CLR_ABORT is not set +# CONFIG_CONSPY is not set +# CONFIG_CROND is not set +# CONFIG_FEATURE_CROND_D is not set +# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set +# CONFIG_FEATURE_CROND_SPECIAL_TIMES is not set +CONFIG_FEATURE_CROND_DIR="" +# CONFIG_CRONTAB is not set +# CONFIG_DC is not set +# CONFIG_FEATURE_DC_LIBM is not set +# CONFIG_DEVFSD is not set +# CONFIG_DEVFSD_MODLOAD is not set +# CONFIG_DEVFSD_FG_NP is not set +# CONFIG_DEVFSD_VERBOSE is not set +# CONFIG_FEATURE_DEVFS is not set +# CONFIG_DEVMEM is not set +# CONFIG_FBSPLASH is not set +# CONFIG_FLASHCP is not set +# CONFIG_FLASH_ERASEALL is not set +# CONFIG_FLASH_LOCK is not set +# CONFIG_FLASH_UNLOCK is not set +# CONFIG_HDPARM is not set +# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set +# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set +# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set +CONFIG_HEXEDIT=y +# CONFIG_I2CGET is not set +# CONFIG_I2CSET is not set +# CONFIG_I2CDUMP is not set +# CONFIG_I2CDETECT is not set +# CONFIG_INOTIFYD is not set +# CONFIG_LESS is not set +CONFIG_FEATURE_LESS_MAXLINES=0 +# CONFIG_FEATURE_LESS_BRACKETS is not set +# CONFIG_FEATURE_LESS_FLAGS is not set +# CONFIG_FEATURE_LESS_TRUNCATE is not set +# CONFIG_FEATURE_LESS_MARKS is not set +# CONFIG_FEATURE_LESS_REGEXP is not set +# CONFIG_FEATURE_LESS_WINCH is not set +# CONFIG_FEATURE_LESS_ASK_TERMINAL is not set +# CONFIG_FEATURE_LESS_DASHCMD is not set +# CONFIG_FEATURE_LESS_LINENUMS is not set +CONFIG_LSSCSI=y +# CONFIG_MAKEDEVS is not set +# CONFIG_FEATURE_MAKEDEVS_LEAF is not set +# CONFIG_FEATURE_MAKEDEVS_TABLE is not set +# CONFIG_MAN is not set +# CONFIG_MICROCOM is not set +# CONFIG_MT is not set +# CONFIG_NANDWRITE is not set +# CONFIG_NANDDUMP is not set +CONFIG_PARTPROBE=y +# CONFIG_RAIDAUTORUN is not set +# CONFIG_READAHEAD is not set +# CONFIG_RFKILL is not set +# CONFIG_RUNLEVEL is not set +# CONFIG_RX is not set +CONFIG_SETFATTR=y +CONFIG_SETSERIAL=y +# CONFIG_STRINGS is not set +# CONFIG_TIME is not set +# CONFIG_TTYSIZE is not set +# CONFIG_UBIRENAME is not set +# CONFIG_UBIATTACH is not set +# CONFIG_UBIDETACH is not set +# CONFIG_UBIMKVOL is not set +# CONFIG_UBIRMVOL is not set +# CONFIG_UBIRSVOL is not set +# CONFIG_UBIUPDATEVOL is not set +# CONFIG_VOLNAME is not set +# CONFIG_WATCHDOG is not set + +# +# Networking Utilities +# +# CONFIG_FEATURE_IPV6 is not set +# CONFIG_FEATURE_UNIX_LOCAL is not set +# CONFIG_FEATURE_PREFER_IPV4_ADDRESS is not set +# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set +# CONFIG_ARP is not set +# CONFIG_ARPING is not set +# CONFIG_BRCTL is not set +# CONFIG_FEATURE_BRCTL_FANCY is not set +# CONFIG_FEATURE_BRCTL_SHOW is not set +# CONFIG_DNSD is not set +# CONFIG_ETHER_WAKE is not set +# CONFIG_FTPD is not set +# CONFIG_FEATURE_FTPD_WRITE is not set +# CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST is not set +# CONFIG_FEATURE_FTPD_AUTHENTICATION is not set +# CONFIG_FTPGET is not set +# CONFIG_FTPPUT is not set +# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set +CONFIG_HOSTNAME=y +CONFIG_DNSDOMAINNAME=y +# CONFIG_HTTPD is not set +# CONFIG_FEATURE_HTTPD_RANGES is not set +# CONFIG_FEATURE_HTTPD_SETUID is not set +# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set +# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set +# CONFIG_FEATURE_HTTPD_CGI is not set +# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set +# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set +# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set +# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set +# CONFIG_FEATURE_HTTPD_PROXY is not set +# CONFIG_FEATURE_HTTPD_GZIP is not set +CONFIG_IFCONFIG=y +CONFIG_FEATURE_IFCONFIG_STATUS=y +# CONFIG_FEATURE_IFCONFIG_SLIP is not set +# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set +CONFIG_FEATURE_IFCONFIG_HW=y +CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y +# CONFIG_IFENSLAVE is not set +# CONFIG_IFPLUGD is not set +CONFIG_IFUP=y +CONFIG_IFDOWN=y +CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate" +CONFIG_FEATURE_IFUPDOWN_IP=y +CONFIG_FEATURE_IFUPDOWN_IPV4=y +# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set +# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set +CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP=y +# CONFIG_INETD is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set +# CONFIG_FEATURE_INETD_RPC is not set +CONFIG_IP=y +CONFIG_IPADDR=y +CONFIG_IPLINK=y +CONFIG_IPROUTE=y +# CONFIG_IPTUNNEL is not set +# CONFIG_IPRULE is not set +# CONFIG_IPNEIGH is not set +CONFIG_FEATURE_IP_ADDRESS=y +CONFIG_FEATURE_IP_LINK=y +CONFIG_FEATURE_IP_ROUTE=y +CONFIG_FEATURE_IP_ROUTE_DIR="/etc/iproute2" +# CONFIG_FEATURE_IP_TUNNEL is not set +# CONFIG_FEATURE_IP_RULE is not set +# CONFIG_FEATURE_IP_NEIGH is not set +# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set +# CONFIG_IPCALC is not set +# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set +# CONFIG_FEATURE_IPCALC_FANCY is not set +# CONFIG_FAKEIDENTD is not set +# CONFIG_NAMEIF is not set +# CONFIG_FEATURE_NAMEIF_EXTENDED is not set +# CONFIG_NBDCLIENT is not set +CONFIG_NC=y +# CONFIG_NETCAT is not set +CONFIG_NC_SERVER=y +# CONFIG_NC_EXTRA is not set +# CONFIG_NC_110_COMPAT is not set +CONFIG_NETSTAT=y +# CONFIG_FEATURE_NETSTAT_WIDE is not set +CONFIG_FEATURE_NETSTAT_PRG=y +# CONFIG_NSLOOKUP is not set +# CONFIG_NTPD is not set +# CONFIG_FEATURE_NTPD_SERVER is not set +# CONFIG_FEATURE_NTPD_CONF is not set +CONFIG_PING=y +# CONFIG_PING6 is not set +# CONFIG_FEATURE_FANCY_PING is not set +# CONFIG_PSCAN is not set +CONFIG_ROUTE=y +# CONFIG_SLATTACH is not set +# CONFIG_SSL_CLIENT is not set +# CONFIG_TCPSVD is not set +# CONFIG_UDPSVD is not set +CONFIG_TELNET=y +CONFIG_FEATURE_TELNET_TTYPE=y +CONFIG_FEATURE_TELNET_AUTOLOGIN=y +CONFIG_FEATURE_TELNET_WIDTH=y +# CONFIG_TELNETD is not set +# CONFIG_FEATURE_TELNETD_STANDALONE is not set +# CONFIG_FEATURE_TELNETD_INETD_WAIT is not set +# CONFIG_TFTP is not set +# CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set +# CONFIG_TFTPD is not set +# CONFIG_FEATURE_TFTP_GET is not set +# CONFIG_FEATURE_TFTP_PUT is not set +# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set +# CONFIG_TFTP_DEBUG is not set +# CONFIG_TLS is not set +# CONFIG_TRACEROUTE is not set +# CONFIG_TRACEROUTE6 is not set +# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set +# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set +# CONFIG_TUNCTL is not set +# CONFIG_FEATURE_TUNCTL_UG is not set +# CONFIG_VCONFIG is not set +CONFIG_WGET=y +# CONFIG_FEATURE_WGET_LONG_OPTIONS is not set +# CONFIG_FEATURE_WGET_STATUSBAR is not set +# CONFIG_FEATURE_WGET_AUTHENTICATION is not set +# CONFIG_FEATURE_WGET_TIMEOUT is not set +# CONFIG_FEATURE_WGET_HTTPS is not set +# CONFIG_FEATURE_WGET_OPENSSL is not set +# CONFIG_WHOIS is not set +# CONFIG_ZCIP is not set +# CONFIG_UDHCPD is not set +# CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set +# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set +CONFIG_DHCPD_LEASES_FILE="" +# CONFIG_DUMPLEASES is not set +# CONFIG_DHCPRELAY is not set +CONFIG_UDHCPC=y +# CONFIG_FEATURE_UDHCPC_ARPING is not set +CONFIG_FEATURE_UDHCPC_SANITIZEOPT=y +CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script" +# CONFIG_UDHCPC6 is not set +# CONFIG_FEATURE_UDHCPC6_RFC3646 is not set +# CONFIG_FEATURE_UDHCPC6_RFC4704 is not set +# CONFIG_FEATURE_UDHCPC6_RFC4833 is not set + +# +# Common options for DHCP applets +# +# CONFIG_FEATURE_UDHCP_PORT is not set +CONFIG_UDHCP_DEBUG=9 +CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80 +# CONFIG_FEATURE_UDHCP_RFC3397 is not set +# CONFIG_FEATURE_UDHCP_8021Q is not set +CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -n" + +# +# Print Utilities +# +# CONFIG_LPD is not set +# CONFIG_LPR is not set +# CONFIG_LPQ is not set + +# +# Mail Utilities +# +# CONFIG_MAKEMIME is not set +# CONFIG_POPMAILDIR is not set +# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set +# CONFIG_REFORMIME is not set +# CONFIG_FEATURE_REFORMIME_COMPAT is not set +# CONFIG_SENDMAIL is not set +CONFIG_FEATURE_MIME_CHARSET="" + +# +# Process Utilities +# +# CONFIG_FREE is not set +# CONFIG_FUSER is not set +# CONFIG_IOSTAT is not set +CONFIG_KILL=y +CONFIG_KILLALL=y +CONFIG_KILLALL5=y +# CONFIG_LSOF is not set +# CONFIG_MPSTAT is not set +# CONFIG_NMETER is not set +# CONFIG_PGREP is not set +# CONFIG_PKILL is not set +# CONFIG_PIDOF is not set +# CONFIG_FEATURE_PIDOF_SINGLE is not set +# CONFIG_FEATURE_PIDOF_OMIT is not set +# CONFIG_PMAP is not set +# CONFIG_POWERTOP is not set +# CONFIG_FEATURE_POWERTOP_INTERACTIVE is not set +CONFIG_PS=y +CONFIG_FEATURE_PS_WIDE=y +CONFIG_FEATURE_PS_LONG=y +# CONFIG_FEATURE_PS_TIME is not set +# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set +# CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set +# CONFIG_PSTREE is not set +# CONFIG_PWDX is not set +# CONFIG_SMEMCAP is not set +# CONFIG_BB_SYSCTL is not set +# CONFIG_TOP is not set +# CONFIG_FEATURE_TOP_INTERACTIVE is not set +# CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE is not set +# CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS is not set +# CONFIG_FEATURE_TOP_SMP_CPU is not set +# CONFIG_FEATURE_TOP_DECIMALS is not set +# CONFIG_FEATURE_TOP_SMP_PROCESS is not set +# CONFIG_FEATURE_TOPMEM is not set +# CONFIG_UPTIME is not set +# CONFIG_FEATURE_UPTIME_UTMP_SUPPORT is not set +# CONFIG_WATCH is not set +# CONFIG_FEATURE_SHOW_THREADS is not set + +# +# Runit Utilities +# +# CONFIG_CHPST is not set +# CONFIG_SETUIDGID is not set +# CONFIG_ENVUIDGID is not set +# CONFIG_ENVDIR is not set +# CONFIG_SOFTLIMIT is not set +# CONFIG_RUNSV is not set +# CONFIG_RUNSVDIR is not set +# CONFIG_FEATURE_RUNSVDIR_LOG is not set +# CONFIG_SV is not set +CONFIG_SV_DEFAULT_SERVICE_DIR="" +CONFIG_SVC=y +# CONFIG_SVLOGD is not set +# CONFIG_CHCON is not set +# CONFIG_GETENFORCE is not set +# CONFIG_GETSEBOOL is not set +# CONFIG_LOAD_POLICY is not set +# CONFIG_MATCHPATHCON is not set +# CONFIG_RUNCON is not set +# CONFIG_SELINUXENABLED is not set +# CONFIG_SESTATUS is not set +# CONFIG_SETENFORCE is not set +# CONFIG_SETFILES is not set +# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set +# CONFIG_RESTORECON is not set +# CONFIG_SETSEBOOL is not set + +# +# Shells +# +# CONFIG_SH_IS_ASH is not set +CONFIG_SH_IS_HUSH=y +# CONFIG_SH_IS_NONE is not set +# CONFIG_BASH_IS_ASH is not set +# CONFIG_BASH_IS_HUSH is not set +CONFIG_BASH_IS_NONE=y +# CONFIG_ASH is not set +# CONFIG_ASH_OPTIMIZE_FOR_SIZE is not set +# CONFIG_ASH_INTERNAL_GLOB is not set +# CONFIG_ASH_BASH_COMPAT is not set +# CONFIG_ASH_JOB_CONTROL is not set +# CONFIG_ASH_ALIAS is not set +# CONFIG_ASH_RANDOM_SUPPORT is not set +# CONFIG_ASH_EXPAND_PRMT is not set +# CONFIG_ASH_IDLE_TIMEOUT is not set +# CONFIG_ASH_MAIL is not set +# CONFIG_ASH_ECHO is not set +# CONFIG_ASH_PRINTF is not set +# CONFIG_ASH_TEST is not set +# CONFIG_ASH_HELP is not set +# CONFIG_ASH_GETOPTS is not set +# CONFIG_ASH_CMDCMD is not set +# CONFIG_CTTYHACK is not set +CONFIG_HUSH=y +CONFIG_HUSH_BASH_COMPAT=y +CONFIG_HUSH_BRACE_EXPANSION=y +CONFIG_HUSH_INTERACTIVE=y +CONFIG_HUSH_SAVEHISTORY=y +CONFIG_HUSH_JOB=y +CONFIG_HUSH_TICK=y +CONFIG_HUSH_IF=y +CONFIG_HUSH_LOOPS=y +CONFIG_HUSH_CASE=y +CONFIG_HUSH_FUNCTIONS=y +CONFIG_HUSH_LOCAL=y +CONFIG_HUSH_RANDOM_SUPPORT=y +CONFIG_HUSH_MODE_X=y +CONFIG_HUSH_ECHO=y +CONFIG_HUSH_PRINTF=y +CONFIG_HUSH_TEST=y +CONFIG_HUSH_HELP=y +CONFIG_HUSH_EXPORT=y +CONFIG_HUSH_EXPORT_N=y +CONFIG_HUSH_READONLY=y +CONFIG_HUSH_KILL=y +CONFIG_HUSH_WAIT=y +CONFIG_HUSH_TRAP=y +CONFIG_HUSH_TYPE=y +CONFIG_HUSH_TIMES=y +CONFIG_HUSH_READ=y +CONFIG_HUSH_SET=y +CONFIG_HUSH_UNSET=y +CONFIG_HUSH_ULIMIT=y +CONFIG_HUSH_UMASK=y +CONFIG_HUSH_GETOPTS=y +# CONFIG_HUSH_MEMLEAK is not set + +# +# Options common to all shells +# +CONFIG_FEATURE_SH_MATH=y +CONFIG_FEATURE_SH_MATH_64=y +CONFIG_FEATURE_SH_EXTRA_QUIET=y +# CONFIG_FEATURE_SH_STANDALONE is not set +# CONFIG_FEATURE_SH_NOFORK is not set +CONFIG_FEATURE_SH_READ_FRAC=y +# CONFIG_FEATURE_SH_HISTFILESIZE is not set + +# +# System Logging Utilities +# +# CONFIG_KLOGD is not set +# CONFIG_FEATURE_KLOGD_KLOGCTL is not set +# CONFIG_LOGGER is not set +# CONFIG_LOGREAD is not set +# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set +# CONFIG_SYSLOGD is not set +# CONFIG_FEATURE_ROTATE_LOGFILE is not set +# CONFIG_FEATURE_REMOTE_LOG is not set +# CONFIG_FEATURE_SYSLOGD_DUP is not set +# CONFIG_FEATURE_SYSLOGD_CFG is not set +CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=0 +# CONFIG_FEATURE_IPC_SYSLOG is not set +CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0 +# CONFIG_FEATURE_KMSG_SYSLOG is not set diff --git a/package/busybox/busybox.config b/package/busybox/busybox.config new file mode 100644 index 00000000..d8e24fde --- /dev/null +++ b/package/busybox/busybox.config @@ -0,0 +1,1152 @@ +# +# Automatically generated make config: don't edit +# Busybox version: 1.28.0 +# Wed Feb 7 09:44:57 2018 +# +CONFIG_HAVE_DOT_CONFIG=y + +# +# Settings +# +CONFIG_DESKTOP=y +# CONFIG_EXTRA_COMPAT is not set +# CONFIG_FEDORA_COMPAT is not set +CONFIG_INCLUDE_SUSv2=y +CONFIG_LONG_OPTS=y +CONFIG_SHOW_USAGE=y +CONFIG_FEATURE_VERBOSE_USAGE=y +# CONFIG_FEATURE_COMPRESS_USAGE is not set +CONFIG_LFS=y +# CONFIG_PAM is not set +CONFIG_FEATURE_DEVPTS=y +CONFIG_FEATURE_UTMP=y +CONFIG_FEATURE_WTMP=y +# CONFIG_FEATURE_PIDFILE is not set +CONFIG_PID_FILE_PATH="" +CONFIG_BUSYBOX=y +CONFIG_FEATURE_INSTALLER=y +# CONFIG_INSTALL_NO_USR is not set +CONFIG_FEATURE_SUID=y +# CONFIG_FEATURE_SUID_CONFIG is not set +# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set +# CONFIG_FEATURE_PREFER_APPLETS is not set +CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" +# CONFIG_SELINUX is not set +# CONFIG_FEATURE_CLEAN_UP is not set +CONFIG_FEATURE_SYSLOG=y +CONFIG_PLATFORM_LINUX=y + +# +# Build Options +# +# CONFIG_STATIC is not set +# CONFIG_PIE is not set +# CONFIG_NOMMU is not set +# CONFIG_BUILD_LIBBUSYBOX is not set +# CONFIG_FEATURE_LIBBUSYBOX_STATIC is not set +# CONFIG_FEATURE_INDIVIDUAL is not set +# CONFIG_FEATURE_SHARED_BUSYBOX is not set +CONFIG_CROSS_COMPILER_PREFIX="" +CONFIG_SYSROOT="" +CONFIG_EXTRA_CFLAGS="" +CONFIG_EXTRA_LDFLAGS="" +CONFIG_EXTRA_LDLIBS="" +# CONFIG_USE_PORTABLE_CODE is not set + +# +# Installation Options ("make install" behavior) +# +CONFIG_INSTALL_APPLET_SYMLINKS=y +# CONFIG_INSTALL_APPLET_HARDLINKS is not set +# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set +# CONFIG_INSTALL_APPLET_DONT is not set +# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set +# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set +# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set +CONFIG_PREFIX="./_install" + +# +# Debugging Options +# +# CONFIG_DEBUG is not set +# CONFIG_DEBUG_PESSIMIZE is not set +# CONFIG_DEBUG_SANITIZE is not set +# CONFIG_UNIT_TEST is not set +# CONFIG_WERROR is not set +CONFIG_NO_DEBUG_LIB=y +# CONFIG_DMALLOC is not set +# CONFIG_EFENCE is not set + +# +# Library Tuning +# +# CONFIG_FEATURE_USE_BSS_TAIL is not set +CONFIG_FEATURE_RTMINMAX=y +CONFIG_FEATURE_BUFFERS_USE_MALLOC=y +# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set +# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set +CONFIG_PASSWORD_MINLEN=6 +CONFIG_MD5_SMALL=1 +CONFIG_SHA3_SMALL=1 +# CONFIG_FEATURE_FAST_TOP is not set +# CONFIG_FEATURE_ETC_NETWORKS is not set +CONFIG_FEATURE_EDITING=y +CONFIG_FEATURE_EDITING_MAX_LEN=1024 +CONFIG_FEATURE_EDITING_VI=y +CONFIG_FEATURE_EDITING_HISTORY=999 +CONFIG_FEATURE_EDITING_SAVEHISTORY=y +# CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set +CONFIG_FEATURE_REVERSE_SEARCH=y +CONFIG_FEATURE_TAB_COMPLETION=y +# CONFIG_FEATURE_USERNAME_COMPLETION is not set +CONFIG_FEATURE_EDITING_FANCY_PROMPT=y +# CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set +# CONFIG_LOCALE_SUPPORT is not set +# CONFIG_UNICODE_SUPPORT is not set +# CONFIG_UNICODE_USING_LOCALE is not set +# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set +CONFIG_SUBST_WCHAR=0 +CONFIG_LAST_SUPPORTED_WCHAR=0 +# CONFIG_UNICODE_COMBINING_WCHARS is not set +# CONFIG_UNICODE_WIDE_WCHARS is not set +# CONFIG_UNICODE_BIDI_SUPPORT is not set +# CONFIG_UNICODE_NEUTRAL_TABLE is not set +# CONFIG_UNICODE_PRESERVE_BROKEN is not set +CONFIG_FEATURE_NON_POSIX_CP=y +# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set +CONFIG_FEATURE_USE_SENDFILE=y +CONFIG_FEATURE_COPYBUF_KB=4 +CONFIG_FEATURE_SKIP_ROOTFS=y +CONFIG_MONOTONIC_SYSCALL=y +CONFIG_IOCTL_HEX2STR_ERROR=y +CONFIG_FEATURE_HWIB=y + +# +# Applets +# + +# +# Archival Utilities +# +# CONFIG_FEATURE_SEAMLESS_XZ is not set +# CONFIG_FEATURE_SEAMLESS_LZMA is not set +# CONFIG_FEATURE_SEAMLESS_BZ2 is not set +CONFIG_FEATURE_SEAMLESS_GZ=y +# CONFIG_FEATURE_SEAMLESS_Z is not set +CONFIG_AR=y +# CONFIG_FEATURE_AR_LONG_FILENAMES is not set +CONFIG_FEATURE_AR_CREATE=y +# CONFIG_UNCOMPRESS is not set +CONFIG_GUNZIP=y +CONFIG_ZCAT=y +CONFIG_FEATURE_GUNZIP_LONG_OPTIONS=y +CONFIG_BUNZIP2=y +CONFIG_BZCAT=y +CONFIG_UNLZMA=y +CONFIG_LZCAT=y +CONFIG_LZMA=y +CONFIG_UNXZ=y +CONFIG_XZCAT=y +CONFIG_XZ=y +# CONFIG_BZIP2 is not set +CONFIG_FEATURE_BZIP2_DECOMPRESS=y +CONFIG_CPIO=y +# CONFIG_FEATURE_CPIO_O is not set +# CONFIG_FEATURE_CPIO_P is not set +# CONFIG_DPKG is not set +# CONFIG_DPKG_DEB is not set +CONFIG_GZIP=y +# CONFIG_FEATURE_GZIP_LONG_OPTIONS is not set +CONFIG_GZIP_FAST=0 +# CONFIG_FEATURE_GZIP_LEVELS is not set +CONFIG_FEATURE_GZIP_DECOMPRESS=y +# CONFIG_LZOP is not set +CONFIG_UNLZOP=y +CONFIG_LZOPCAT=y +# CONFIG_LZOP_COMPR_HIGH is not set +# CONFIG_RPM is not set +# CONFIG_RPM2CPIO is not set +CONFIG_TAR=y +CONFIG_FEATURE_TAR_LONG_OPTIONS=y +CONFIG_FEATURE_TAR_CREATE=y +# CONFIG_FEATURE_TAR_AUTODETECT is not set +CONFIG_FEATURE_TAR_FROM=y +# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set +CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY=y +CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y +CONFIG_FEATURE_TAR_TO_COMMAND=y +# CONFIG_FEATURE_TAR_UNAME_GNAME is not set +# CONFIG_FEATURE_TAR_NOPRESERVE_TIME is not set +# CONFIG_FEATURE_TAR_SELINUX is not set +CONFIG_UNZIP=y +CONFIG_FEATURE_UNZIP_CDF=y +CONFIG_FEATURE_UNZIP_BZIP2=y +CONFIG_FEATURE_UNZIP_LZMA=y +CONFIG_FEATURE_UNZIP_XZ=y +# CONFIG_FEATURE_LZMA_FAST is not set + +# +# Coreutils +# +CONFIG_BASENAME=y +CONFIG_CAT=y +CONFIG_FEATURE_CATN=y +CONFIG_FEATURE_CATV=y +CONFIG_CHGRP=y +CONFIG_CHMOD=y +CONFIG_CHOWN=y +# CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set +CONFIG_CHROOT=y +CONFIG_CKSUM=y +# CONFIG_COMM is not set +CONFIG_CP=y +# CONFIG_FEATURE_CP_LONG_OPTIONS is not set +CONFIG_CUT=y +CONFIG_DATE=y +CONFIG_FEATURE_DATE_ISOFMT=y +# CONFIG_FEATURE_DATE_NANO is not set +CONFIG_FEATURE_DATE_COMPAT=y +CONFIG_DD=y +CONFIG_FEATURE_DD_SIGNAL_HANDLING=y +# CONFIG_FEATURE_DD_THIRD_STATUS_LINE is not set +CONFIG_FEATURE_DD_IBS_OBS=y +CONFIG_FEATURE_DD_STATUS=y +CONFIG_DF=y +# CONFIG_FEATURE_DF_FANCY is not set +CONFIG_DIRNAME=y +CONFIG_DOS2UNIX=y +CONFIG_UNIX2DOS=y +CONFIG_DU=y +CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y +CONFIG_ECHO=y +CONFIG_FEATURE_FANCY_ECHO=y +CONFIG_ENV=y +# CONFIG_EXPAND is not set +# CONFIG_UNEXPAND is not set +CONFIG_EXPR=y +CONFIG_EXPR_MATH_SUPPORT_64=y +CONFIG_FACTOR=y +CONFIG_FALSE=y +CONFIG_FOLD=y +# CONFIG_FSYNC is not set +CONFIG_HEAD=y +CONFIG_FEATURE_FANCY_HEAD=y +CONFIG_HOSTID=y +CONFIG_ID=y +# CONFIG_GROUPS is not set +CONFIG_INSTALL=y +CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y +CONFIG_LINK=y +CONFIG_LN=y +CONFIG_LOGNAME=y +CONFIG_LS=y +CONFIG_FEATURE_LS_FILETYPES=y +CONFIG_FEATURE_LS_FOLLOWLINKS=y +CONFIG_FEATURE_LS_RECURSIVE=y +CONFIG_FEATURE_LS_WIDTH=y +CONFIG_FEATURE_LS_SORTFILES=y +CONFIG_FEATURE_LS_TIMESTAMPS=y +CONFIG_FEATURE_LS_USERNAME=y +CONFIG_FEATURE_LS_COLOR=y +CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y +CONFIG_MD5SUM=y +CONFIG_SHA1SUM=y +CONFIG_SHA256SUM=y +CONFIG_SHA512SUM=y +CONFIG_SHA3SUM=y + +# +# Common options for md5sum, sha1sum, sha256sum, sha512sum, sha3sum +# +CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y +CONFIG_MKDIR=y +CONFIG_MKFIFO=y +CONFIG_MKNOD=y +CONFIG_MKTEMP=y +CONFIG_MV=y +CONFIG_NICE=y +CONFIG_NL=y +CONFIG_NOHUP=y +CONFIG_NPROC=y +CONFIG_OD=y +CONFIG_PASTE=y +CONFIG_PRINTENV=y +CONFIG_PRINTF=y +CONFIG_PWD=y +CONFIG_READLINK=y +CONFIG_FEATURE_READLINK_FOLLOW=y +CONFIG_REALPATH=y +CONFIG_RM=y +CONFIG_RMDIR=y +CONFIG_SEQ=y +CONFIG_SHRED=y +# CONFIG_SHUF is not set +CONFIG_SLEEP=y +CONFIG_FEATURE_FANCY_SLEEP=y +CONFIG_FEATURE_FLOAT_SLEEP=y +CONFIG_SORT=y +CONFIG_FEATURE_SORT_BIG=y +# CONFIG_SPLIT is not set +# CONFIG_FEATURE_SPLIT_FANCY is not set +# CONFIG_STAT is not set +# CONFIG_FEATURE_STAT_FORMAT is not set +# CONFIG_FEATURE_STAT_FILESYSTEM is not set +CONFIG_STTY=y +# CONFIG_SUM is not set +CONFIG_SYNC=y +# CONFIG_FEATURE_SYNC_FANCY is not set +# CONFIG_TAC is not set +CONFIG_TAIL=y +CONFIG_FEATURE_FANCY_TAIL=y +CONFIG_TEE=y +CONFIG_FEATURE_TEE_USE_BLOCK_IO=y +CONFIG_TEST=y +CONFIG_TEST1=y +CONFIG_TEST2=y +CONFIG_FEATURE_TEST_64=y +# CONFIG_TIMEOUT is not set +CONFIG_TOUCH=y +# CONFIG_FEATURE_TOUCH_NODEREF is not set +CONFIG_FEATURE_TOUCH_SUSV3=y +CONFIG_TR=y +CONFIG_FEATURE_TR_CLASSES=y +CONFIG_FEATURE_TR_EQUIV=y +CONFIG_TRUE=y +CONFIG_TRUNCATE=y +CONFIG_TTY=y +CONFIG_UNAME=y +CONFIG_UNAME_OSNAME="GNU/Linux" +CONFIG_BB_ARCH=y +CONFIG_UNIQ=y +CONFIG_UNLINK=y +CONFIG_USLEEP=y +CONFIG_UUDECODE=y +CONFIG_BASE64=y +CONFIG_UUENCODE=y +CONFIG_WC=y +# CONFIG_FEATURE_WC_LARGE is not set +CONFIG_WHOAMI=y +CONFIG_WHO=y +CONFIG_W=y +# CONFIG_USERS is not set +CONFIG_YES=y + +# +# Common options +# +CONFIG_FEATURE_VERBOSE=y + +# +# Common options for cp and mv +# +CONFIG_FEATURE_PRESERVE_HARDLINKS=y + +# +# Common options for df, du, ls +# +CONFIG_FEATURE_HUMAN_READABLE=y + +# +# Console Utilities +# +CONFIG_CHVT=y +CONFIG_CLEAR=y +CONFIG_DEALLOCVT=y +CONFIG_DUMPKMAP=y +# CONFIG_FGCONSOLE is not set +# CONFIG_KBD_MODE is not set +CONFIG_LOADFONT=y +# CONFIG_SETFONT is not set +# CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set +CONFIG_DEFAULT_SETFONT_DIR="" + +# +# Common options for loadfont and setfont +# +CONFIG_FEATURE_LOADFONT_PSF2=y +CONFIG_FEATURE_LOADFONT_RAW=y +CONFIG_LOADKMAP=y +CONFIG_OPENVT=y +CONFIG_RESET=y +CONFIG_RESIZE=y +CONFIG_FEATURE_RESIZE_PRINT=y +CONFIG_SETCONSOLE=y +# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set +CONFIG_SETKEYCODES=y +CONFIG_SETLOGCONS=y +# CONFIG_SHOWKEY is not set + +# +# Debian Utilities +# +CONFIG_PIPE_PROGRESS=y +CONFIG_RUN_PARTS=y +CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y +# CONFIG_FEATURE_RUN_PARTS_FANCY is not set +CONFIG_START_STOP_DAEMON=y +CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y +CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y +CONFIG_WHICH=y + +# +# klibc-utils +# +# CONFIG_MINIPS is not set +CONFIG_NUKE=y +CONFIG_RESUME=y +CONFIG_RUN_INIT=y + +# +# Editors +# +CONFIG_AWK=y +# CONFIG_FEATURE_AWK_LIBM is not set +CONFIG_FEATURE_AWK_GNU_EXTENSIONS=y +CONFIG_CMP=y +CONFIG_DIFF=y +# CONFIG_FEATURE_DIFF_LONG_OPTIONS is not set +CONFIG_FEATURE_DIFF_DIR=y +# CONFIG_ED is not set +CONFIG_PATCH=y +CONFIG_SED=y +CONFIG_VI=y +CONFIG_FEATURE_VI_MAX_LEN=4096 +CONFIG_FEATURE_VI_8BIT=y +CONFIG_FEATURE_VI_COLON=y +CONFIG_FEATURE_VI_YANKMARK=y +CONFIG_FEATURE_VI_SEARCH=y +# CONFIG_FEATURE_VI_REGEX_SEARCH is not set +CONFIG_FEATURE_VI_USE_SIGNALS=y +CONFIG_FEATURE_VI_DOT_CMD=y +CONFIG_FEATURE_VI_READONLY=y +CONFIG_FEATURE_VI_SETOPTS=y +CONFIG_FEATURE_VI_SET=y +CONFIG_FEATURE_VI_WIN_RESIZE=y +CONFIG_FEATURE_VI_ASK_TERMINAL=y +CONFIG_FEATURE_VI_UNDO=y +CONFIG_FEATURE_VI_UNDO_QUEUE=y +CONFIG_FEATURE_VI_UNDO_QUEUE_MAX=256 +CONFIG_FEATURE_ALLOW_EXEC=y + +# +# Finding Utilities +# +CONFIG_FIND=y +CONFIG_FEATURE_FIND_PRINT0=y +CONFIG_FEATURE_FIND_MTIME=y +CONFIG_FEATURE_FIND_MMIN=y +CONFIG_FEATURE_FIND_PERM=y +CONFIG_FEATURE_FIND_TYPE=y +CONFIG_FEATURE_FIND_XDEV=y +CONFIG_FEATURE_FIND_MAXDEPTH=y +CONFIG_FEATURE_FIND_NEWER=y +# CONFIG_FEATURE_FIND_INUM is not set +CONFIG_FEATURE_FIND_EXEC=y +CONFIG_FEATURE_FIND_EXEC_PLUS=y +CONFIG_FEATURE_FIND_USER=y +CONFIG_FEATURE_FIND_GROUP=y +CONFIG_FEATURE_FIND_NOT=y +CONFIG_FEATURE_FIND_DEPTH=y +CONFIG_FEATURE_FIND_PAREN=y +CONFIG_FEATURE_FIND_SIZE=y +CONFIG_FEATURE_FIND_PRUNE=y +# CONFIG_FEATURE_FIND_DELETE is not set +CONFIG_FEATURE_FIND_PATH=y +CONFIG_FEATURE_FIND_REGEX=y +# CONFIG_FEATURE_FIND_CONTEXT is not set +# CONFIG_FEATURE_FIND_LINKS is not set +CONFIG_GREP=y +CONFIG_EGREP=y +CONFIG_FGREP=y +CONFIG_FEATURE_GREP_CONTEXT=y +CONFIG_XARGS=y +# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set +CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y +CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y +CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y +CONFIG_FEATURE_XARGS_SUPPORT_REPL_STR=y +CONFIG_FEATURE_XARGS_SUPPORT_PARALLEL=y +CONFIG_FEATURE_XARGS_SUPPORT_ARGS_FILE=y + +# +# Init Utilities +# +# CONFIG_BOOTCHARTD is not set +# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set +# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set +CONFIG_HALT=y +CONFIG_POWEROFF=y +CONFIG_REBOOT=y +# CONFIG_FEATURE_CALL_TELINIT is not set +CONFIG_TELINIT_PATH="" +CONFIG_INIT=y +CONFIG_LINUXRC=y +CONFIG_FEATURE_USE_INITTAB=y +CONFIG_FEATURE_KILL_REMOVED=y +CONFIG_FEATURE_KILL_DELAY=0 +CONFIG_FEATURE_INIT_SCTTY=y +CONFIG_FEATURE_INIT_SYSLOG=y +CONFIG_FEATURE_INIT_QUIET=y +# CONFIG_FEATURE_INIT_COREDUMPS is not set +CONFIG_INIT_TERMINAL_TYPE="linux" +CONFIG_FEATURE_INIT_MODIFY_CMDLINE=y + +# +# Login/Password Management Utilities +# +CONFIG_FEATURE_SHADOWPASSWDS=y +# CONFIG_USE_BB_PWD_GRP is not set +# CONFIG_USE_BB_SHADOW is not set +CONFIG_USE_BB_CRYPT=y +# CONFIG_USE_BB_CRYPT_SHA is not set +CONFIG_ADDGROUP=y +# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set +# CONFIG_ADD_SHELL is not set +# CONFIG_REMOVE_SHELL is not set +CONFIG_ADDUSER=y +# CONFIG_FEATURE_CHECK_NAMES is not set +CONFIG_LAST_ID=60000 +CONFIG_FIRST_SYSTEM_ID=100 +CONFIG_LAST_SYSTEM_ID=999 +# CONFIG_CHPASSWD is not set +CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="md5" +# CONFIG_CRYPTPW is not set +CONFIG_MKPASSWD=y +CONFIG_DELUSER=y +CONFIG_DELGROUP=y +# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set +CONFIG_GETTY=y +CONFIG_LOGIN=y +# CONFIG_LOGIN_SESSION_AS_CHILD is not set +# CONFIG_LOGIN_SCRIPTS is not set +CONFIG_FEATURE_NOLOGIN=y +CONFIG_FEATURE_SECURETTY=y +CONFIG_PASSWD=y +CONFIG_FEATURE_PASSWD_WEAK_CHECK=y +CONFIG_SU=y +CONFIG_FEATURE_SU_SYSLOG=y +CONFIG_FEATURE_SU_CHECKS_SHELLS=y +# CONFIG_FEATURE_SU_BLANK_PW_NEEDS_SECURE_TTY is not set +CONFIG_SULOGIN=y +CONFIG_VLOCK=y + +# +# Linux Ext2 FS Progs +# +CONFIG_CHATTR=y +CONFIG_FSCK=y +CONFIG_LSATTR=y +# CONFIG_TUNE2FS is not set + +# +# Linux Module Utilities +# +# CONFIG_MODPROBE_SMALL is not set +# CONFIG_DEPMOD is not set +CONFIG_INSMOD=y +CONFIG_LSMOD=y +CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y +# CONFIG_MODINFO is not set +CONFIG_MODPROBE=y +# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set +CONFIG_RMMOD=y + +# +# Options common to multiple modutils +# +CONFIG_FEATURE_CMDLINE_MODULE_OPTIONS=y +# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set +# CONFIG_FEATURE_2_4_MODULES is not set +# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set +# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set +# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set +# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set +# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set +CONFIG_FEATURE_CHECK_TAINTED_MODULE=y +# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set +CONFIG_FEATURE_MODUTILS_ALIAS=y +CONFIG_FEATURE_MODUTILS_SYMBOLS=y +CONFIG_DEFAULT_MODULES_DIR="/lib/modules" +CONFIG_DEFAULT_DEPMOD_FILE="modules.dep" + +# +# Linux System Utilities +# +# CONFIG_ACPID is not set +# CONFIG_FEATURE_ACPID_COMPAT is not set +# CONFIG_BLKDISCARD is not set +CONFIG_BLKID=y +# CONFIG_FEATURE_BLKID_TYPE is not set +# CONFIG_BLOCKDEV is not set +# CONFIG_CAL is not set +CONFIG_CHRT=y +CONFIG_DMESG=y +CONFIG_FEATURE_DMESG_PRETTY=y +CONFIG_EJECT=y +# CONFIG_FEATURE_EJECT_SCSI is not set +CONFIG_FALLOCATE=y +# CONFIG_FATATTR is not set +CONFIG_FBSET=y +CONFIG_FEATURE_FBSET_FANCY=y +CONFIG_FEATURE_FBSET_READMODE=y +CONFIG_FDFORMAT=y +CONFIG_FDISK=y +# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set +CONFIG_FEATURE_FDISK_WRITABLE=y +# CONFIG_FEATURE_AIX_LABEL is not set +# CONFIG_FEATURE_SGI_LABEL is not set +# CONFIG_FEATURE_SUN_LABEL is not set +# CONFIG_FEATURE_OSF_LABEL is not set +CONFIG_FEATURE_GPT_LABEL=y +CONFIG_FEATURE_FDISK_ADVANCED=y +# CONFIG_FINDFS is not set +CONFIG_FLOCK=y +CONFIG_FDFLUSH=y +CONFIG_FREERAMDISK=y +# CONFIG_FSCK_MINIX is not set +CONFIG_FSFREEZE=y +CONFIG_FSTRIM=y +CONFIG_GETOPT=y +CONFIG_FEATURE_GETOPT_LONG=y +CONFIG_HEXDUMP=y +# CONFIG_FEATURE_HEXDUMP_REVERSE is not set +# CONFIG_HD is not set +CONFIG_XXD=y +CONFIG_HWCLOCK=y +CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y +# CONFIG_IONICE is not set +CONFIG_IPCRM=y +CONFIG_IPCS=y +CONFIG_LAST=y +# CONFIG_FEATURE_LAST_FANCY is not set +CONFIG_LOSETUP=y +CONFIG_LSPCI=y +CONFIG_LSUSB=y +CONFIG_MDEV=y +CONFIG_FEATURE_MDEV_CONF=y +CONFIG_FEATURE_MDEV_RENAME=y +# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set +CONFIG_FEATURE_MDEV_EXEC=y +# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set +CONFIG_FEATURE_MDEV_DAEMON=y +CONFIG_MESG=y +CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP=y +CONFIG_MKE2FS=y +# CONFIG_MKFS_EXT2 is not set +# CONFIG_MKFS_MINIX is not set +# CONFIG_FEATURE_MINIX2 is not set +# CONFIG_MKFS_REISER is not set +CONFIG_MKDOSFS=y +# CONFIG_MKFS_VFAT is not set +CONFIG_MKSWAP=y +# CONFIG_FEATURE_MKSWAP_UUID is not set +CONFIG_MORE=y +CONFIG_MOUNT=y +# CONFIG_FEATURE_MOUNT_FAKE is not set +# CONFIG_FEATURE_MOUNT_VERBOSE is not set +# CONFIG_FEATURE_MOUNT_HELPERS is not set +# CONFIG_FEATURE_MOUNT_LABEL is not set +# CONFIG_FEATURE_MOUNT_NFS is not set +CONFIG_FEATURE_MOUNT_CIFS=y +CONFIG_FEATURE_MOUNT_FLAGS=y +CONFIG_FEATURE_MOUNT_FSTAB=y +CONFIG_FEATURE_MOUNT_OTHERTAB=y +CONFIG_MOUNTPOINT=y +# CONFIG_NSENTER is not set +CONFIG_PIVOT_ROOT=y +CONFIG_RDATE=y +# CONFIG_RDEV is not set +CONFIG_READPROFILE=y +CONFIG_RENICE=y +# CONFIG_REV=y +# CONFIG_RTCWAKE is not set +# CONFIG_SCRIPT is not set +# CONFIG_SCRIPTREPLAY is not set +CONFIG_SETARCH=y +CONFIG_LINUX32=y +CONFIG_LINUX64=y +CONFIG_SETPRIV=y +CONFIG_FEATURE_SETPRIV_DUMP=y +CONFIG_FEATURE_SETPRIV_CAPABILITIES=y +CONFIG_FEATURE_SETPRIV_CAPABILITY_NAMES=y +CONFIG_SETSID=y +CONFIG_SWAPON=y +# CONFIG_FEATURE_SWAPON_DISCARD is not set +# CONFIG_FEATURE_SWAPON_PRI is not set +CONFIG_SWAPOFF=y +CONFIG_FEATURE_SWAPONOFF_LABEL=y +CONFIG_SWITCH_ROOT=y +# CONFIG_TASKSET is not set +# CONFIG_FEATURE_TASKSET_FANCY is not set +CONFIG_UEVENT=y +CONFIG_UMOUNT=y +CONFIG_FEATURE_UMOUNT_ALL=y +# CONFIG_UNSHARE is not set +# CONFIG_WALL is not set + +# +# Common options for mount/umount +# +CONFIG_FEATURE_MOUNT_LOOP=y +CONFIG_FEATURE_MOUNT_LOOP_CREATE=y +# CONFIG_FEATURE_MTAB_SUPPORT is not set +CONFIG_VOLUMEID=y + +# +# Filesystem/Volume identification +# +# CONFIG_FEATURE_VOLUMEID_BCACHE is not set +# CONFIG_FEATURE_VOLUMEID_BTRFS is not set +# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set +CONFIG_FEATURE_VOLUMEID_EXFAT=y +CONFIG_FEATURE_VOLUMEID_EXT=y +CONFIG_FEATURE_VOLUMEID_F2FS=y +CONFIG_FEATURE_VOLUMEID_FAT=y +# CONFIG_FEATURE_VOLUMEID_HFS is not set +# CONFIG_FEATURE_VOLUMEID_ISO9660 is not set +# CONFIG_FEATURE_VOLUMEID_JFS is not set +# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set +# CONFIG_FEATURE_VOLUMEID_LINUXSWAP is not set +# CONFIG_FEATURE_VOLUMEID_LUKS is not set +CONFIG_FEATURE_VOLUMEID_MINIX=y +# CONFIG_FEATURE_VOLUMEID_NILFS is not set +# CONFIG_FEATURE_VOLUMEID_NTFS is not set +# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set +# CONFIG_FEATURE_VOLUMEID_REISERFS is not set +# CONFIG_FEATURE_VOLUMEID_ROMFS is not set +# CONFIG_FEATURE_VOLUMEID_SQUASHFS is not set +# CONFIG_FEATURE_VOLUMEID_SYSV is not set +CONFIG_FEATURE_VOLUMEID_UBIFS=y +# CONFIG_FEATURE_VOLUMEID_UDF is not set +# CONFIG_FEATURE_VOLUMEID_XFS is not set + +# +# Miscellaneous Utilities +# +# CONFIG_ADJTIMEX is not set +# CONFIG_BBCONFIG is not set +# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set +# CONFIG_BEEP is not set +CONFIG_FEATURE_BEEP_FREQ=0 +CONFIG_FEATURE_BEEP_LENGTH_MS=0 +# CONFIG_CHAT is not set +# CONFIG_FEATURE_CHAT_NOFAIL is not set +# CONFIG_FEATURE_CHAT_TTY_HIFI is not set +# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set +# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set +# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set +# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set +# CONFIG_FEATURE_CHAT_CLR_ABORT is not set +# CONFIG_CONSPY is not set +CONFIG_CROND=y +# CONFIG_FEATURE_CROND_D is not set +# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set +CONFIG_FEATURE_CROND_SPECIAL_TIMES=y +CONFIG_FEATURE_CROND_DIR="/var/spool/cron" +CONFIG_CRONTAB=y +CONFIG_DC=y +# CONFIG_FEATURE_DC_LIBM is not set +# CONFIG_DEVFSD is not set +# CONFIG_DEVFSD_MODLOAD is not set +# CONFIG_DEVFSD_FG_NP is not set +# CONFIG_DEVFSD_VERBOSE is not set +# CONFIG_FEATURE_DEVFS is not set +CONFIG_DEVMEM=y +# CONFIG_FBSPLASH is not set +# CONFIG_FLASHCP is not set +# CONFIG_FLASH_ERASEALL is not set +# CONFIG_FLASH_LOCK is not set +# CONFIG_FLASH_UNLOCK is not set +CONFIG_HDPARM=y +CONFIG_FEATURE_HDPARM_GET_IDENTITY=y +# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set +# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set +CONFIG_HEXEDIT=y +CONFIG_I2CGET=y +CONFIG_I2CSET=y +CONFIG_I2CDUMP=y +CONFIG_I2CDETECT=y +# CONFIG_INOTIFYD is not set +CONFIG_LESS=y +CONFIG_FEATURE_LESS_MAXLINES=9999999 +CONFIG_FEATURE_LESS_BRACKETS=y +CONFIG_FEATURE_LESS_FLAGS=y +CONFIG_FEATURE_LESS_TRUNCATE=y +# CONFIG_FEATURE_LESS_MARKS is not set +CONFIG_FEATURE_LESS_REGEXP=y +# CONFIG_FEATURE_LESS_WINCH is not set +# CONFIG_FEATURE_LESS_ASK_TERMINAL is not set +# CONFIG_FEATURE_LESS_DASHCMD is not set +# CONFIG_FEATURE_LESS_LINENUMS is not set +CONFIG_LSSCSI=y +CONFIG_MAKEDEVS=y +# CONFIG_FEATURE_MAKEDEVS_LEAF is not set +CONFIG_FEATURE_MAKEDEVS_TABLE=y +# CONFIG_MAN is not set +CONFIG_MICROCOM=y +CONFIG_MT=y +# CONFIG_NANDWRITE is not set +# CONFIG_NANDDUMP is not set +CONFIG_PARTPROBE=y +# CONFIG_RAIDAUTORUN is not set +# CONFIG_READAHEAD is not set +# CONFIG_RFKILL is not set +CONFIG_RUNLEVEL=y +# CONFIG_RX is not set +CONFIG_SETFATTR=y +CONFIG_SETSERIAL=y +CONFIG_STRINGS=y +CONFIG_TIME=y +# CONFIG_TTYSIZE is not set +CONFIG_UBIRENAME=y +# CONFIG_UBIATTACH is not set +# CONFIG_UBIDETACH is not set +# CONFIG_UBIMKVOL is not set +# CONFIG_UBIRMVOL is not set +# CONFIG_UBIRSVOL is not set +# CONFIG_UBIUPDATEVOL is not set +# CONFIG_VOLNAME is not set +CONFIG_WATCHDOG=y + +# +# Networking Utilities +# +CONFIG_FEATURE_IPV6=y +# CONFIG_FEATURE_UNIX_LOCAL is not set +CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y +# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set +CONFIG_ARP=y +CONFIG_ARPING=y +# CONFIG_BRCTL is not set +# CONFIG_FEATURE_BRCTL_FANCY is not set +# CONFIG_FEATURE_BRCTL_SHOW is not set +CONFIG_DNSD=y +CONFIG_ETHER_WAKE=y +# CONFIG_FTPD is not set +# CONFIG_FEATURE_FTPD_WRITE is not set +# CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST is not set +# CONFIG_FEATURE_FTPD_AUTHENTICATION is not set +# CONFIG_FTPGET is not set +# CONFIG_FTPPUT is not set +# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set +CONFIG_HOSTNAME=y +CONFIG_DNSDOMAINNAME=y +# CONFIG_HTTPD is not set +# CONFIG_FEATURE_HTTPD_RANGES is not set +# CONFIG_FEATURE_HTTPD_SETUID is not set +# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set +# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set +# CONFIG_FEATURE_HTTPD_CGI is not set +# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set +# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set +# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set +# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set +# CONFIG_FEATURE_HTTPD_PROXY is not set +# CONFIG_FEATURE_HTTPD_GZIP is not set +CONFIG_IFCONFIG=y +CONFIG_FEATURE_IFCONFIG_STATUS=y +CONFIG_FEATURE_IFCONFIG_SLIP=y +CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y +CONFIG_FEATURE_IFCONFIG_HW=y +# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set +# CONFIG_IFENSLAVE is not set +# CONFIG_IFPLUGD is not set +CONFIG_IFUP=y +CONFIG_IFDOWN=y +CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate" +CONFIG_FEATURE_IFUPDOWN_IP=y +CONFIG_FEATURE_IFUPDOWN_IPV4=y +CONFIG_FEATURE_IFUPDOWN_IPV6=y +CONFIG_FEATURE_IFUPDOWN_MAPPING=y +# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set +CONFIG_INETD=y +CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO=y +CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD=y +CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME=y +CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME=y +CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN=y +# CONFIG_FEATURE_INETD_RPC is not set +CONFIG_IP=y +CONFIG_IPADDR=y +CONFIG_IPLINK=y +CONFIG_IPROUTE=y +CONFIG_IPTUNNEL=y +CONFIG_IPRULE=y +CONFIG_IPNEIGH=y +CONFIG_FEATURE_IP_ADDRESS=y +CONFIG_FEATURE_IP_LINK=y +CONFIG_FEATURE_IP_ROUTE=y +CONFIG_FEATURE_IP_ROUTE_DIR="/etc/iproute2" +CONFIG_FEATURE_IP_TUNNEL=y +CONFIG_FEATURE_IP_RULE=y +CONFIG_FEATURE_IP_NEIGH=y +# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set +# CONFIG_IPCALC is not set +# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set +# CONFIG_FEATURE_IPCALC_FANCY is not set +# CONFIG_FAKEIDENTD is not set +CONFIG_NAMEIF=y +# CONFIG_FEATURE_NAMEIF_EXTENDED is not set +# CONFIG_NBDCLIENT is not set +# CONFIG_NC is not set +# CONFIG_NETCAT is not set +# CONFIG_NC_SERVER is not set +# CONFIG_NC_EXTRA is not set +# CONFIG_NC_110_COMPAT is not set +CONFIG_NETSTAT=y +# CONFIG_FEATURE_NETSTAT_WIDE is not set +# CONFIG_FEATURE_NETSTAT_PRG is not set +CONFIG_NSLOOKUP=y +# CONFIG_NTPD is not set +# CONFIG_FEATURE_NTPD_SERVER is not set +# CONFIG_FEATURE_NTPD_CONF is not set +CONFIG_PING=y +# CONFIG_PING6 is not set +CONFIG_FEATURE_FANCY_PING=y +# CONFIG_PSCAN is not set +CONFIG_ROUTE=y +# CONFIG_SLATTACH is not set +# CONFIG_SSL_CLIENT is not set +# CONFIG_TCPSVD is not set +# CONFIG_UDPSVD is not set +CONFIG_TELNET=y +CONFIG_FEATURE_TELNET_TTYPE=y +CONFIG_FEATURE_TELNET_AUTOLOGIN=y +CONFIG_FEATURE_TELNET_WIDTH=y +CONFIG_TELNETD=y +CONFIG_FEATURE_TELNETD_STANDALONE=y +CONFIG_FEATURE_TELNETD_INETD_WAIT=y +CONFIG_TFTP=y +# CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set +# CONFIG_TFTPD is not set + +# +# Common options for tftp/tftpd +# +CONFIG_FEATURE_TFTP_GET=y +CONFIG_FEATURE_TFTP_PUT=y +CONFIG_FEATURE_TFTP_BLOCKSIZE=y +# CONFIG_TFTP_DEBUG is not set +# CONFIG_TLS is not set +CONFIG_TRACEROUTE=y +# CONFIG_TRACEROUTE6 is not set +# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set +# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set +# CONFIG_TUNCTL is not set +# CONFIG_FEATURE_TUNCTL_UG is not set +CONFIG_VCONFIG=y +CONFIG_WGET=y +CONFIG_FEATURE_WGET_LONG_OPTIONS=y +CONFIG_FEATURE_WGET_STATUSBAR=y +CONFIG_FEATURE_WGET_AUTHENTICATION=y +CONFIG_FEATURE_WGET_TIMEOUT=y +# CONFIG_FEATURE_WGET_HTTPS is not set +# CONFIG_FEATURE_WGET_OPENSSL is not set +# CONFIG_WHOIS is not set +# CONFIG_ZCIP is not set +# CONFIG_UDHCPD is not set +# CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set +# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set +CONFIG_DHCPD_LEASES_FILE="" +# CONFIG_DUMPLEASES is not set +# CONFIG_DHCPRELAY is not set +CONFIG_UDHCPC=y +CONFIG_FEATURE_UDHCPC_ARPING=y +CONFIG_FEATURE_UDHCPC_SANITIZEOPT=y +CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script" +# CONFIG_UDHCPC6 is not set +# CONFIG_FEATURE_UDHCPC6_RFC3646 is not set +# CONFIG_FEATURE_UDHCPC6_RFC4704 is not set +# CONFIG_FEATURE_UDHCPC6_RFC4833 is not set + +# +# Common options for DHCP applets +# +# CONFIG_FEATURE_UDHCP_PORT is not set +CONFIG_UDHCP_DEBUG=0 +CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80 +CONFIG_FEATURE_UDHCP_RFC3397=y +CONFIG_FEATURE_UDHCP_8021Q=y +CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -n -O search" + +# +# Print Utilities +# +# CONFIG_LPD is not set +# CONFIG_LPR is not set +# CONFIG_LPQ is not set + +# +# Mail Utilities +# +# CONFIG_MAKEMIME is not set +# CONFIG_POPMAILDIR is not set +# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set +# CONFIG_REFORMIME is not set +# CONFIG_FEATURE_REFORMIME_COMPAT is not set +# CONFIG_SENDMAIL is not set +CONFIG_FEATURE_MIME_CHARSET="" + +# +# Process Utilities +# +CONFIG_FREE=y +CONFIG_FUSER=y +# CONFIG_IOSTAT is not set +CONFIG_KILL=y +CONFIG_KILLALL=y +CONFIG_KILLALL5=y +CONFIG_LSOF=y +# CONFIG_MPSTAT is not set +# CONFIG_NMETER is not set +# CONFIG_PGREP is not set +# CONFIG_PKILL is not set +CONFIG_PIDOF=y +CONFIG_FEATURE_PIDOF_SINGLE=y +CONFIG_FEATURE_PIDOF_OMIT=y +# CONFIG_PMAP is not set +# CONFIG_POWERTOP is not set +# CONFIG_FEATURE_POWERTOP_INTERACTIVE is not set +CONFIG_PS=y +# CONFIG_FEATURE_PS_WIDE is not set +# CONFIG_FEATURE_PS_LONG is not set +# CONFIG_FEATURE_PS_TIME is not set +# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set +# CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set +# CONFIG_PSTREE is not set +# CONFIG_PWDX is not set +# CONFIG_SMEMCAP is not set +CONFIG_BB_SYSCTL=y +CONFIG_TOP=y +CONFIG_FEATURE_TOP_INTERACTIVE=y +CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y +CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y +# CONFIG_FEATURE_TOP_SMP_CPU is not set +# CONFIG_FEATURE_TOP_DECIMALS is not set +# CONFIG_FEATURE_TOP_SMP_PROCESS is not set +# CONFIG_FEATURE_TOPMEM is not set +CONFIG_UPTIME=y +# CONFIG_FEATURE_UPTIME_UTMP_SUPPORT is not set +CONFIG_WATCH=y +# CONFIG_FEATURE_SHOW_THREADS is not set + +# +# Runit Utilities +# +# CONFIG_CHPST is not set +# CONFIG_SETUIDGID is not set +# CONFIG_ENVUIDGID is not set +# CONFIG_ENVDIR is not set +# CONFIG_SOFTLIMIT is not set +# CONFIG_RUNSV is not set +# CONFIG_RUNSVDIR is not set +# CONFIG_FEATURE_RUNSVDIR_LOG is not set +# CONFIG_SV is not set +CONFIG_SV_DEFAULT_SERVICE_DIR="" +CONFIG_SVC=y +# CONFIG_SVLOGD is not set +# CONFIG_CHCON is not set +# CONFIG_GETENFORCE is not set +# CONFIG_GETSEBOOL is not set +# CONFIG_LOAD_POLICY is not set +# CONFIG_MATCHPATHCON is not set +# CONFIG_RUNCON is not set +# CONFIG_SELINUXENABLED is not set +# CONFIG_SESTATUS is not set +# CONFIG_SETENFORCE is not set +# CONFIG_SETFILES is not set +# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set +# CONFIG_RESTORECON is not set +# CONFIG_SETSEBOOL is not set + +# +# Shells +# +CONFIG_SH_IS_ASH=y +# CONFIG_SH_IS_HUSH is not set +# CONFIG_SH_IS_NONE is not set +# CONFIG_BASH_IS_ASH is not set +# CONFIG_BASH_IS_HUSH is not set +CONFIG_BASH_IS_NONE=y +CONFIG_ASH=y +CONFIG_ASH_OPTIMIZE_FOR_SIZE=y +CONFIG_ASH_INTERNAL_GLOB=y +CONFIG_ASH_BASH_COMPAT=y +CONFIG_ASH_JOB_CONTROL=y +CONFIG_ASH_ALIAS=y +CONFIG_ASH_RANDOM_SUPPORT=y +CONFIG_ASH_EXPAND_PRMT=y +CONFIG_ASH_IDLE_TIMEOUT=y +# CONFIG_ASH_MAIL is not set +CONFIG_ASH_ECHO=y +CONFIG_ASH_PRINTF=y +CONFIG_ASH_TEST=y +CONFIG_ASH_HELP=y +CONFIG_ASH_GETOPTS=y +CONFIG_ASH_CMDCMD=y +# CONFIG_CTTYHACK is not set +# CONFIG_HUSH is not set +# CONFIG_HUSH_BASH_COMPAT is not set +# CONFIG_HUSH_BRACE_EXPANSION is not set +# CONFIG_HUSH_INTERACTIVE is not set +# CONFIG_HUSH_SAVEHISTORY is not set +# CONFIG_HUSH_JOB is not set +# CONFIG_HUSH_TICK is not set +# CONFIG_HUSH_IF is not set +# CONFIG_HUSH_LOOPS is not set +# CONFIG_HUSH_CASE is not set +# CONFIG_HUSH_FUNCTIONS is not set +# CONFIG_HUSH_LOCAL is not set +# CONFIG_HUSH_RANDOM_SUPPORT is not set +# CONFIG_HUSH_MODE_X is not set +# CONFIG_HUSH_ECHO is not set +# CONFIG_HUSH_PRINTF is not set +# CONFIG_HUSH_TEST is not set +# CONFIG_HUSH_HELP is not set +# CONFIG_HUSH_EXPORT is not set +# CONFIG_HUSH_EXPORT_N is not set +# CONFIG_HUSH_READONLY is not set +# CONFIG_HUSH_KILL is not set +# CONFIG_HUSH_WAIT is not set +# CONFIG_HUSH_TRAP is not set +# CONFIG_HUSH_TYPE is not set +# CONFIG_HUSH_TIMES is not set +# CONFIG_HUSH_READ is not set +# CONFIG_HUSH_SET is not set +# CONFIG_HUSH_UNSET is not set +# CONFIG_HUSH_ULIMIT is not set +# CONFIG_HUSH_UMASK is not set +# CONFIG_HUSH_GETOPTS is not set +# CONFIG_HUSH_MEMLEAK is not set + +# +# Options common to all shells +# +CONFIG_FEATURE_SH_MATH=y +CONFIG_FEATURE_SH_MATH_64=y +CONFIG_FEATURE_SH_EXTRA_QUIET=y +# CONFIG_FEATURE_SH_STANDALONE is not set +# CONFIG_FEATURE_SH_NOFORK is not set +CONFIG_FEATURE_SH_READ_FRAC=y +# CONFIG_FEATURE_SH_HISTFILESIZE is not set + +# +# System Logging Utilities +# +CONFIG_KLOGD=y +CONFIG_FEATURE_KLOGD_KLOGCTL=y +CONFIG_LOGGER=y +# CONFIG_LOGREAD is not set +# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set +CONFIG_SYSLOGD=y +CONFIG_FEATURE_ROTATE_LOGFILE=y +CONFIG_FEATURE_REMOTE_LOG=y +# CONFIG_FEATURE_SYSLOGD_DUP is not set +# CONFIG_FEATURE_SYSLOGD_CFG is not set +CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=256 +# CONFIG_FEATURE_IPC_SYSLOG is not set +CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0 +# CONFIG_FEATURE_KMSG_SYSLOG is not set diff --git a/package/busybox/busybox.hash b/package/busybox/busybox.hash new file mode 100644 index 00000000..3e9c30ca --- /dev/null +++ b/package/busybox/busybox.hash @@ -0,0 +1,5 @@ +# From https://busybox.net/downloads/busybox-1.33.1.tar.bz2.sha256 +sha256 12cec6bd2b16d8a9446dd16130f2b92982f1819f6e1c5f5887b6db03f5660d28 busybox-1.33.1.tar.bz2 +# Locally computed +sha256 bbfc9843646d483c334664f651c208b9839626891d8f17604db2146962f43548 LICENSE +sha256 b5a136ed67798e51fe2e0ca0b2a21cb01b904ff0c9f7d563a6292e276607e58f archival/libarchive/bz/LICENSE diff --git a/package/busybox/busybox.mk b/package/busybox/busybox.mk new file mode 100644 index 00000000..5269e862 --- /dev/null +++ b/package/busybox/busybox.mk @@ -0,0 +1,561 @@ +################################################################################ +# +# busybox +# +################################################################################ + +BUSYBOX_VERSION = 1.33.1 +BUSYBOX_SITE = https://www.busybox.net/downloads +BUSYBOX_SOURCE = busybox-$(BUSYBOX_VERSION).tar.bz2 +BUSYBOX_LICENSE = GPL-2.0, bzip2-1.0.4 +BUSYBOX_LICENSE_FILES = LICENSE archival/libarchive/bz/LICENSE +BUSYBOX_CPE_ID_VENDOR = busybox + +define BUSYBOX_HELP_CMDS + @echo ' busybox-menuconfig - Run BusyBox menuconfig' +endef + +BUSYBOX_CFLAGS = \ + $(TARGET_CFLAGS) + +BUSYBOX_LDFLAGS = \ + $(TARGET_LDFLAGS) + +# Packages that provide commands that may also be busybox applets: +BUSYBOX_DEPENDENCIES = \ + $(if $(BR2_PACKAGE_ATTR),attr) \ + $(if $(BR2_PACKAGE_BASH),bash) \ + $(if $(BR2_PACKAGE_BC),bc) \ + $(if $(BR2_PACKAGE_BINUTILS),binutils) \ + $(if $(BR2_PACKAGE_COREUTILS),coreutils) \ + $(if $(BR2_PACKAGE_CPIO),cpio) \ + $(if $(BR2_PACKAGE_DCRON),dcron) \ + $(if $(BR2_PACKAGE_DEBIANUTILS),debianutils) \ + $(if $(BR2_PACKAGE_DIFFUTILS),diffutils) \ + $(if $(BR2_PACKAGE_DOS2UNIX),dos2unix) \ + $(if $(BR2_PACKAGE_DOSFSTOOLS),dosfstools) \ + $(if $(BR2_PACKAGE_E2FSPROGS),e2fsprogs) \ + $(if $(BR2_PACKAGE_FBSET),fbset) \ + $(if $(BR2_PACKAGE_GAWK),gawk) \ + $(if $(BR2_PACKAGE_GREP),grep) \ + $(if $(BR2_PACKAGE_GZIP),gzip) \ + $(if $(BR2_PACKAGE_I2C_TOOLS),i2c-tools) \ + $(if $(BR2_PACKAGE_IFENSLAVE),ifenslave) \ + $(if $(BR2_PACKAGE_IFPLUGD),ifplugd) \ + $(if $(BR2_PACKAGE_IFUPDOWN),ifupdown) \ + $(if $(BR2_PACKAGE_IPCALC),ipcalc) \ + $(if $(BR2_PACKAGE_IPROUTE2),iproute2) \ + $(if $(BR2_PACKAGE_IPUTILS),iputils) \ + $(if $(BR2_PACKAGE_KMOD),kmod) \ + $(if $(BR2_PACKAGE_LESS),less) \ + $(if $(BR2_PACKAGE_LSOF),lsof) \ + $(if $(BR2_PACKAGE_MTD),mtd) \ + $(if $(BR2_PACKAGE_NET_TOOLS),net-tools) \ + $(if $(BR2_PACKAGE_NETCAT),netcat) \ + $(if $(BR2_PACKAGE_NETCAT_OPENSBSD),netcat-openbsd) \ + $(if $(BR2_PACKAGE_NMAP),nmap) \ + $(if $(BR2_PACKAGE_NTP),ntp) \ + $(if $(BR2_PACKAGE_PCIUTILS),pciutils) \ + $(if $(BR2_PACKAGE_PROCPS_NG),procps-ng) \ + $(if $(BR2_PACKAGE_PSMISC),psmisc) \ + $(if $(BR2_PACKAGE_START_STOP_DAEMON),start-stop-daemon) \ + $(if $(BR2_PACKAGE_SYSKLOGD),sysklogd) \ + $(if $(BR2_PACKAGE_SYSTEMD),systemd) \ + $(if $(BR2_PACKAGE_SYSVINIT),sysvinit) \ + $(if $(BR2_PACKAGE_TAR),tar) \ + $(if $(BR2_PACKAGE_TFTPD),tftpd) \ + $(if $(BR2_PACKAGE_TRACEROUTE),traceroute) \ + $(if $(BR2_PACKAGE_UNZIP),unzip) \ + $(if $(BR2_PACKAGE_USBUTILS),usbutils) \ + $(if $(BR2_PACKAGE_UTIL_LINUX),util-linux) \ + $(if $(BR2_PACKAGE_VIM),vim) \ + $(if $(BR2_PACKAGE_WATCHDOG),watchdog) \ + $(if $(BR2_PACKAGE_WGET),wget) \ + $(if $(BR2_PACKAGE_WHOIS),whois) + +# Link against libtirpc if available so that we can leverage its RPC +# support for NFS mounting with BusyBox +ifeq ($(BR2_PACKAGE_LIBTIRPC),y) +BUSYBOX_DEPENDENCIES += libtirpc host-pkgconf +BUSYBOX_CFLAGS += "`$(PKG_CONFIG_HOST_BINARY) --cflags libtirpc`" +# Don't use LDFLAGS for -ltirpc, because LDFLAGS is used for +# the non-final link of modules as well. +BUSYBOX_CFLAGS_busybox += "`$(PKG_CONFIG_HOST_BINARY) --libs libtirpc`" +endif + +# Allows the build system to tweak CFLAGS +BUSYBOX_MAKE_ENV = \ + $(TARGET_MAKE_ENV) \ + CFLAGS="$(BUSYBOX_CFLAGS)" \ + CFLAGS_busybox="$(BUSYBOX_CFLAGS_busybox)" + +ifeq ($(BR2_REPRODUCIBLE),y) +BUSYBOX_MAKE_ENV += \ + KCONFIG_NOTIMESTAMP=1 +endif + +BUSYBOX_MAKE_OPTS = \ + CC="$(TARGET_CC)" \ + ARCH=$(KERNEL_ARCH) \ + PREFIX="$(TARGET_DIR)" \ + EXTRA_LDFLAGS="$(BUSYBOX_LDFLAGS)" \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + CONFIG_PREFIX="$(TARGET_DIR)" \ + SKIP_STRIP=y + +ifndef BUSYBOX_CONFIG_FILE +BUSYBOX_CONFIG_FILE = $(call qstrip,$(BR2_PACKAGE_BUSYBOX_CONFIG)) +endif + +BUSYBOX_KCONFIG_FILE = $(BUSYBOX_CONFIG_FILE) +BUSYBOX_KCONFIG_FRAGMENT_FILES = $(call qstrip,$(BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES)) +BUSYBOX_KCONFIG_EDITORS = menuconfig xconfig gconfig +BUSYBOX_KCONFIG_OPTS = $(BUSYBOX_MAKE_OPTS) + +ifeq ($(BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES),y) +define BUSYBOX_PERMISSIONS +# Set permissions on all applets with BB_SUID_REQUIRE and BB_SUID_MAYBE. +# 12 Applets are pulled from applets.h using grep command : +# grep -r -e "APPLET.*BB_SUID_REQUIRE\|APPLET.*BB_SUID_MAYBE" \ +# $(@D)/include/applets.h +# These applets are added to the device table and the makedev file +# ignores the files with type 'F' ( optional files). + /usr/bin/wall F 4755 0 0 - - - - - + /bin/ping F 4755 0 0 - - - - - + /bin/ping6 F 4755 0 0 - - - - - + /usr/bin/crontab F 4755 0 0 - - - - - + /sbin/findfs F 4755 0 0 - - - - - + /bin/login F 4755 0 0 - - - - - + /bin/mount F 4755 0 0 - - - - - + /usr/bin/passwd F 4755 0 0 - - - - - + /bin/su F 4755 0 0 - - - - - + /usr/bin/traceroute F 4755 0 0 - - - - - + /usr/bin/traceroute6 F 4755 0 0 - - - - - + /usr/bin/vlock F 4755 0 0 - - - - - +endef +else +define BUSYBOX_PERMISSIONS + /bin/busybox f 4755 0 0 - - - - - +endef +endif + +# If mdev will be used for device creation enable it and copy S10mdev to /etc/init.d +ifeq ($(BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV),y) +define BUSYBOX_INSTALL_MDEV_SCRIPT + $(INSTALL) -D -m 0755 package/busybox/S10mdev \ + $(TARGET_DIR)/etc/init.d/S10mdev +endef +define BUSYBOX_INSTALL_MDEV_CONF + $(INSTALL) -D -m 0644 package/busybox/mdev.conf \ + $(TARGET_DIR)/etc/mdev.conf +endef +define BUSYBOX_SET_MDEV + $(call KCONFIG_ENABLE_OPT,CONFIG_MDEV) + $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_MDEV_CONF) + $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_MDEV_EXEC) + $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_MDEV_LOAD_FIRMWARE) +endef +endif + +# sha passwords need USE_BB_CRYPT_SHA +ifeq ($(BR2_TARGET_GENERIC_PASSWD_SHA256)$(BR2_TARGET_GENERIC_PASSWD_SHA512),y) +define BUSYBOX_SET_CRYPT_SHA + $(call KCONFIG_ENABLE_OPT,CONFIG_USE_BB_CRYPT_SHA) +endef +endif + +ifeq ($(BR2_USE_MMU),y) +define BUSYBOX_SET_MMU + $(call KCONFIG_DISABLE_OPT,CONFIG_NOMMU) +endef +else +define BUSYBOX_SET_MMU + $(call KCONFIG_ENABLE_OPT,CONFIG_NOMMU) + $(call KCONFIG_DISABLE_OPT,CONFIG_SWAPON) + $(call KCONFIG_DISABLE_OPT,CONFIG_SWAPOFF) + $(call KCONFIG_DISABLE_OPT,CONFIG_ASH) + $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH) + $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_BASH_COMPAT) + $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_BRACE_EXPANSION) + $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_HELP) + $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_INTERACTIVE) + $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_SAVEHISTORY) + $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_JOB) + $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_TICK) + $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_IF) + $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_LOOPS) + $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_CASE) + $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_FUNCTIONS) + $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_LOCAL) + $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_RANDOM_SUPPORT) + $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_EXPORT_N) + $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_MODE_X) +endef +endif + +# If we're using static libs do the same for busybox +ifeq ($(BR2_STATIC_LIBS),y) +define BUSYBOX_PREFER_STATIC + $(call KCONFIG_ENABLE_OPT,CONFIG_STATIC) +endef +endif + +define BUSYBOX_INSTALL_UDHCPC_SCRIPT + if grep -q CONFIG_UDHCPC=y $(@D)/.config; then \ + $(INSTALL) -m 0755 -D package/busybox/udhcpc.script \ + $(TARGET_DIR)/usr/share/udhcpc/default.script; \ + $(INSTALL) -m 0755 -d \ + $(TARGET_DIR)/usr/share/udhcpc/default.script.d; \ + fi +endef + +define BUSYBOX_INSTALL_ZCIP_SCRIPT + if grep -q CONFIG_ZCIP=y $(@D)/.config; then \ + $(INSTALL) -m 0755 -D $(@D)/examples/zcip.script \ + $(TARGET_DIR)/usr/share/zcip/default.script; \ + fi +endef + +ifeq ($(BR2_INIT_BUSYBOX),y) + +define BUSYBOX_SET_INIT + $(call KCONFIG_ENABLE_OPT,CONFIG_INIT) +endef + +ifeq ($(BR2_TARGET_GENERIC_GETTY),y) + +ifeq ($(BR2_TARGET_GENERIC_GETTY_AUTOLOGIN),y) + +define BUSYBOX_SET_GETTY + $(SED) '/# GENERIC_SERIAL$$/s~^.*#~$(SYSTEM_GETTY_PORT)::respawn:/sbin/getty -L $(SYSTEM_GETTY_OPTIONS) $(SYSTEM_GETTY_PORT) $(SYSTEM_GETTY_BAUDRATE) $(SYSTEM_GETTY_TERM) -l ls-autologin -n #~' \ + $(TARGET_DIR)/etc/inittab +endef + +else + +define BUSYBOX_SET_GETTY + $(SED) '/# GENERIC_SERIAL$$/s~^.*#~$(SYSTEM_GETTY_PORT)::respawn:/sbin/getty -L $(SYSTEM_GETTY_OPTIONS) $(SYSTEM_GETTY_PORT) $(SYSTEM_GETTY_BAUDRATE) $(SYSTEM_GETTY_TERM) #~' \ + $(TARGET_DIR)/etc/inittab +endef + +endif # BR2_TARGET_GENERIC_GETTY_AUTOLOGIN + +else + +ifeq ($(BR2_TARGET_GENERIC_GETTY_AUTOLOGIN),y) + +define BUSYBOX_SET_GETTY + $(SED) '/# GENERIC_SERIAL$$/s~^.*#~#ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 -l ls-autologin -n #~' $(TARGET_DIR)/etc/inittab +endef + +else + +define BUSYBOX_SET_GETTY + $(SED) '/# GENERIC_SERIAL$$/s~^.*#~#ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 #~' $(TARGET_DIR)/etc/inittab +endef + +endif # BR2_TARGET_GENERIC_GETTY_AUTOLOGIN + +endif # BR2_TARGET_GENERIC_GETTY + +ifeq ($(BR2_TARGET_GENERIC_GETTY_AUTOLOGIN),y) +define BUSYBOX_SET_AUTO_LOGIN + cd $(TARGET_DIR)/bin && echo "#! /bin/sh" > ls-autologin && echo "/bin/login -f root" >> ls-autologin && chmod a+x ls-autologin +endef +endif # BR2_TARGET_GENERIC_GETTY_AUTOLOGIN + +ifeq ($(BR2_TARGET_TTY0_GETTY_ENABLE),y) + +ifeq ($(BR2_TARGET_GENERIC_GETTY_AUTOLOGIN),y) + +define BUSYBOX_SET_GETTY_TTY0 + $(SED) '/# tty0-console$$/d' $(TARGET_DIR)/etc/inittab + $(SED) '/^ttyS*/a tty0::respawn:/sbin/getty -L $(SYSTEM_GETTY_OPTIONS) tty0 $(SYSTEM_GETTY_BAUDRATE) $(SYSTEM_GETTY_TERM) -l ls-autologin -n # tty0-console' \ + $(TARGET_DIR)/etc/inittab +endef + +else + +define BUSYBOX_SET_GETTY_TTY0 + $(SED) '/# tty0-console$$/d' $(TARGET_DIR)/etc/inittab + $(SED) '/^ttyS*/a tty0::respawn:/sbin/getty -L $(SYSTEM_GETTY_OPTIONS) tty0 $(SYSTEM_GETTY_BAUDRATE) $(SYSTEM_GETTY_TERM) # tty0-console' \ + $(TARGET_DIR)/etc/inittab +endef + +endif # BR2_TARGET_GENERIC_GETTY_AUTOLOGIN + +else + +define BUSYBOX_SET_GETTY_TTY0 + $(SED) '/# tty0-console$$/d' $(TARGET_DIR)/etc/inittab +endef + +endif # BR2_TARGET_TTY0_GETTY_ENABLE + +BUSYBOX_TARGET_FINALIZE_HOOKS += BUSYBOX_SET_GETTY + +BUSYBOX_TARGET_FINALIZE_HOOKS += BUSYBOX_SET_GETTY_TTY0 + +BUSYBOX_TARGET_FINALIZE_HOOKS += BUSYBOX_SET_AUTO_LOGIN + +BUSYBOX_TARGET_FINALIZE_HOOKS += SYSTEM_REMOUNT_ROOT_INITTAB + +BUSYBOX_TARGET_FINALIZE_HOOKS += BUSYBOX_NAND_DATA_MOUNT_SERVICE + +BUSYBOX_TARGET_FINALIZE_HOOKS += BUSYBOX_WPA_WLAN_AUTO_LINK_SERVICE +endif # BR2_INIT_BUSYBOX + +ifeq ($(BR2_BUSYBOX_UBIFS_NAND_DATA_PART),y) + +ifeq ($(BR2_INIT_BUSYBOX),y) +define BUSYBOX_NAND_DATA_MOUNT_SERVICE_INITD + cp $(TOPDIR)/package/busybox/ubi_mount_data_s/initd/S91ubi_mount $(TARGET_DIR)/etc/init.d/ + chmod a+x $(TARGET_DIR)/etc/init.d/S91ubi_mount +endef +endif + +ifeq ($(BR2_INIT_SYSTEMD),y) +define BUSYBOX_NAND_DATA_MOUNT_SERVICE_SYSTEMD + cp $(TOPDIR)/package/busybox/ubi_mount_data_s/systemd/nand_data_mount.service $(TARGET_DIR)/usr/lib/systemd/system/ + cd $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants && ln -b -s -f ../nand_data_mount.service nand_data_mount.service +endef +endif + +ifeq ($(BR2_BUSYBOX_UBIFS_NAND_DATA_PART_DELAY),y) +define BUSYBOX_NAND_DATA_MOUNT_SERVICE_DELAY + cd $(TARGET_DIR)/root/init_shell/ && $(SED) 's/#sleep 5/sleep 5/g' ubi_mount_data.sh +endef +endif + +define BUSYBOX_NAND_DATA_MOUNT_SERVICE + mkdir -p $(TARGET_DIR)/root/init_shell + cp $(TOPDIR)/package/busybox/ubi_mount_data_s/ubi_mount_data.sh $(TARGET_DIR)/root/init_shell/ + chmod a+x $(TARGET_DIR)/root/init_shell/ubi_mount_data.sh + + $(BUSYBOX_NAND_DATA_MOUNT_SERVICE_INITD) + $(BUSYBOX_NAND_DATA_MOUNT_SERVICE_SYSTEMD) + $(BUSYBOX_NAND_DATA_MOUNT_SERVICE_DELAY) +endef +BUSYBOX_TARGET_FINALIZE_HOOKS += BUSYBOX_NAND_DATA_MOUNT_SERVICE +endif + +ifeq ($(BR2_BUSYBOX_WPA_WLAN_AUTO_LINK),y) + +ifeq ($(BR2_INIT_BUSYBOX),y) +define BUSYBOX_WPA_WLAN_AUTO_LINK_SERVICE_INITD + cp $(TOPDIR)/package/busybox/wpa_wlan_auto_link_s/initd/S91wpa_wlan_auto_link $(TARGET_DIR)/etc/init.d/ + chmod a+x $(TARGET_DIR)/etc/init.d/S91wpa_wlan_auto_link +endef +endif + +ifeq ($(BR2_INIT_SYSTEMD),y) +define BUSYBOX_WPA_WLAN_AUTO_LINK_SERVICE_SYSTEMD + cp $(TOPDIR)/package/busybox/wpa_wlan_auto_link_s/systemd/wpa_wlan_auto_link.service $(TARGET_DIR)/usr/lib/systemd/system/ + cd $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants && ln -b -s -f ../wpa_wlan_auto_link.service wpa_wlan_auto_link.service +endef +endif + +ifeq ($(BR2_BUSYBOX_WPA_WLAN_AUTO_LINK_DELAY),y) +define BUSYBOX_WPA_WLAN_AUTO_LINK_SERVICE_DELAY + cd $(TARGET_DIR)/root/init_shell/ && $(SED) 's/#sleep 5/sleep 5/g' wpa_wlan_auto_link.sh +endef +endif + +define BUSYBOX_WPA_WLAN_AUTO_LINK_SERVICE + mkdir -p $(TARGET_DIR)/root/init_shell + cp $(TOPDIR)/package/busybox/wpa_wlan_auto_link_s/wpa_wlan_auto_link.sh $(TARGET_DIR)/root/init_shell/ + chmod a+x $(TARGET_DIR)/root/init_shell/wpa_wlan_auto_link.sh + + $(BUSYBOX_WPA_WLAN_AUTO_LINK_SERVICE_INITD) + $(BUSYBOX_WPA_WLAN_AUTO_LINK_SERVICE_SYSTEMD) + $(BUSYBOX_WPA_WLAN_AUTO_LINK_SERVICE_DELAY) +endef +BUSYBOX_TARGET_FINALIZE_HOOKS += BUSYBOX_WPA_WLAN_AUTO_LINK_SERVICE +endif + +ifeq ($(BR2_PACKAGE_BUSYBOX_SELINUX),y) +BUSYBOX_DEPENDENCIES += host-pkgconf libselinux libsepol +define BUSYBOX_SET_SELINUX + $(call KCONFIG_ENABLE_OPT,CONFIG_SELINUX) + $(call KCONFIG_ENABLE_OPT,CONFIG_SELINUXENABLED) +endef +endif + +# enable relevant options to allow the Busybox less applet to be used +# as a systemd pager +ifeq ($(BR2_PACKAGE_SYSTEMD):$(BR2_PACKAGE_LESS),y:) +define BUSYBOX_SET_LESS_FLAGS + $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_LESS_DASHCMD) + $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_LESS_RAW) + $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_LESS_TRUNCATE) + $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_LESS_FLAGS) + $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_LESS_ENV) +endef +endif + +ifeq ($(BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES),y) +define BUSYBOX_SET_INDIVIDUAL_BINARIES + $(call KCONFIG_ENABLE_OPT,CONFIG_BUILD_LIBBUSYBOX) + $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_INDIVIDUAL) +endef + +define BUSYBOX_INSTALL_INDIVIDUAL_BINARIES + rm -f $(TARGET_DIR)/bin/busybox +endef +endif + +# Only install our logging scripts if no other package does it. +ifeq ($(BR2_PACKAGE_SYSKLOGD)$(BR2_PACKAGE_RSYSLOG)$(BR2_PACKAGE_SYSLOG_NG),) +define BUSYBOX_INSTALL_LOGGING_SCRIPT + if grep -q CONFIG_SYSLOGD=y $(@D)/.config; \ + then \ + $(INSTALL) -m 0755 -D package/busybox/S01syslogd \ + $(TARGET_DIR)/etc/init.d/S01syslogd; \ + fi; \ + if grep -q CONFIG_KLOGD=y $(@D)/.config; \ + then \ + $(INSTALL) -m 0755 -D package/busybox/S02klogd \ + $(TARGET_DIR)/etc/init.d/S02klogd; \ + fi +endef +endif + +# Only install our sysctl scripts if no other package does it. +ifeq ($(BR2_PACKAGE_PROCPS_NG),) +define BUSYBOX_INSTALL_SYSCTL_SCRIPT + if grep -q CONFIG_BB_SYSCTL=y $(@D)/.config; \ + then \ + $(INSTALL) -m 0755 -D package/busybox/S02sysctl \ + $(TARGET_DIR)/etc/init.d/S02sysctl ; \ + fi +endef +endif + +ifeq ($(BR2_INIT_BUSYBOX),y) +define BUSYBOX_INSTALL_INITTAB + if test ! -e $(TARGET_DIR)/etc/inittab; then \ + $(INSTALL) -D -m 0644 package/busybox/inittab $(TARGET_DIR)/etc/inittab; \ + fi +endef +endif + +ifeq ($(BR2_PACKAGE_BUSYBOX_WATCHDOG),y) +define BUSYBOX_SET_WATCHDOG + $(call KCONFIG_ENABLE_OPT,CONFIG_WATCHDOG) +endef +define BUSYBOX_INSTALL_WATCHDOG_SCRIPT + $(INSTALL) -D -m 0755 package/busybox/S15watchdog \ + $(TARGET_DIR)/etc/init.d/S15watchdog + $(SED) s/PERIOD/$(call qstrip,$(BR2_PACKAGE_BUSYBOX_WATCHDOG_PERIOD))/ \ + $(TARGET_DIR)/etc/init.d/S15watchdog +endef +endif + +# PAM support requires thread support in the toolchain +ifeq ($(BR2_PACKAGE_LINUX_PAM)$(BR2_TOOLCHAIN_HAS_THREADS),yy) +define BUSYBOX_LINUX_PAM + $(call KCONFIG_ENABLE_OPT,CONFIG_PAM) +endef +BUSYBOX_DEPENDENCIES += linux-pam +else +define BUSYBOX_LINUX_PAM + $(call KCONFIG_DISABLE_OPT,CONFIG_PAM) +endef +endif + +# Telnet support +define BUSYBOX_INSTALL_TELNET_SCRIPT + if grep -q CONFIG_FEATURE_TELNETD_STANDALONE=y $(@D)/.config; then \ + $(INSTALL) -m 0755 -D package/busybox/S50telnet \ + $(TARGET_DIR)/etc/init.d/S50telnet ; \ + fi +endef + +# Add /bin/{a,hu}sh to /etc/shells otherwise some login tools like dropbear +# can reject the user connection. See man shells. +define BUSYBOX_INSTALL_ADD_TO_SHELLS + if grep -q CONFIG_ASH=y $(BUSYBOX_DIR)/.config; then \ + grep -qsE '^/bin/ash$$' $(TARGET_DIR)/etc/shells \ + || echo "/bin/ash" >> $(TARGET_DIR)/etc/shells; \ + fi + if grep -q CONFIG_HUSH=y $(BUSYBOX_DIR)/.config; then \ + grep -qsE '^/bin/hush$$' $(TARGET_DIR)/etc/shells \ + || echo "/bin/hush" >> $(TARGET_DIR)/etc/shells; \ + fi +endef +BUSYBOX_TARGET_FINALIZE_HOOKS += BUSYBOX_INSTALL_ADD_TO_SHELLS + +define BUSYBOX_KCONFIG_FIXUP_CMDS + $(BUSYBOX_SET_MMU) + $(BUSYBOX_PREFER_STATIC) + $(BUSYBOX_SET_MDEV) + $(BUSYBOX_SET_CRYPT_SHA) + $(BUSYBOX_LINUX_PAM) + $(BUSYBOX_SET_INIT) + $(BUSYBOX_SET_WATCHDOG) + $(BUSYBOX_SET_SELINUX) + $(BUSYBOX_SET_LESS_FLAGS) + $(BUSYBOX_SET_INDIVIDUAL_BINARIES) +endef + +define BUSYBOX_BUILD_CMDS + $(BUSYBOX_MAKE_ENV) $(MAKE) $(BUSYBOX_MAKE_OPTS) -C $(@D) +endef + +ifeq ($(BR2_INIT_SYSTEMD),y) +define CHANGE_LINUXRC_INIT_CMDS + cd $(TARGET_DIR) && rm linuxrc && ln -s /sbin/init linuxrc +endef +else +define CHANGE_LINUXRC_INIT_CMDS +endef +endif + +ifeq ($(BR2_BUSYBOX_PROFILE), y) +define BUSYBOX_INSTALL_ETC_PROFILE + cp $(@D)/profile $(TARGET_DIR)/etc/profile +endef +else +define BUSYBOX_INSTALL_ETC_PROFILE +endef +endif + +define BUSYBOX_INSTALL_TARGET_CMDS + # Use the 'noclobber' install rule, to prevent BusyBox from overwriting + # any full-blown versions of apps installed by other packages. + $(BUSYBOX_MAKE_ENV) $(MAKE) $(BUSYBOX_MAKE_OPTS) -C $(@D) install-noclobber + $(BUSYBOX_INSTALL_INDIVIDUAL_BINARIES) + $(BUSYBOX_INSTALL_INITTAB) + $(BUSYBOX_INSTALL_UDHCPC_SCRIPT) + $(BUSYBOX_INSTALL_ZCIP_SCRIPT) + $(BUSYBOX_INSTALL_MDEV_CONF) + $(CHANGE_LINUXRC_INIT_CMDS) + $(BUSYBOX_INSTALL_ETC_PROFILE) +endef + +# Install the sysvinit scripts, for the moment, but not those that already +# have a corresponding one in openrc. +define BUSYBOX_INSTALL_INIT_OPENRC + $(BUSYBOX_INSTALL_MDEV_SCRIPT) + $(BUSYBOX_INSTALL_LOGGING_SCRIPT) + $(BUSYBOX_INSTALL_WATCHDOG_SCRIPT) + $(BUSYBOX_INSTALL_TELNET_SCRIPT) +endef + +define BUSYBOX_INSTALL_INIT_SYSV + $(BUSYBOX_INSTALL_MDEV_SCRIPT) + $(BUSYBOX_INSTALL_LOGGING_SCRIPT) + $(BUSYBOX_INSTALL_WATCHDOG_SCRIPT) + $(BUSYBOX_INSTALL_SYSCTL_SCRIPT) + $(BUSYBOX_INSTALL_TELNET_SCRIPT) +endef + +# Checks to give errors that the user can understand +# Must be before we call to kconfig-package +ifeq ($(BR2_PACKAGE_BUSYBOX)$(BR_BUILDING),yy) +ifeq ($(call qstrip,$(BR2_PACKAGE_BUSYBOX_CONFIG)),) +$(error No BusyBox configuration file specified, check your BR2_PACKAGE_BUSYBOX_CONFIG setting) +endif +endif + +$(eval $(kconfig-package)) diff --git a/package/busybox/inittab b/package/busybox/inittab new file mode 100644 index 00000000..ff1725c7 --- /dev/null +++ b/package/busybox/inittab @@ -0,0 +1,39 @@ +# /etc/inittab +# +# Copyright (C) 2001 Erik Andersen +# +# Note: BusyBox init doesn't support runlevels. The runlevels field is +# completely ignored by BusyBox init. If you want runlevels, use +# sysvinit. +# +# Format for each entry: ::: +# +# id == tty to run on, or empty for /dev/console +# runlevels == ignored +# action == one of sysinit, respawn, askfirst, wait, and once +# process == program to run + +# Startup the system +::sysinit:/bin/mount -t proc proc /proc +::sysinit:/bin/mount -o remount,rw / +::sysinit:/bin/mkdir -p /dev/pts /dev/shm +::sysinit:/bin/mount -a +::sysinit:/sbin/swapon -a +null::sysinit:/bin/ln -sf /proc/self/fd /dev/fd +null::sysinit:/bin/ln -sf /proc/self/fd/0 /dev/stdin +null::sysinit:/bin/ln -sf /proc/self/fd/1 /dev/stdout +null::sysinit:/bin/ln -sf /proc/self/fd/2 /dev/stderr +::sysinit:/bin/hostname -F /etc/hostname +# now run any rc scripts +::sysinit:/etc/init.d/rcS + +# Put a getty on the serial port +#ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 # GENERIC_SERIAL + +# Stuff to do for the 3-finger salute +#::ctrlaltdel:/sbin/reboot + +# Stuff to do before rebooting +::shutdown:/etc/init.d/rcK +::shutdown:/sbin/swapoff -a +::shutdown:/bin/umount -a -r diff --git a/package/busybox/mdev.conf b/package/busybox/mdev.conf new file mode 100644 index 00000000..eaece1b7 --- /dev/null +++ b/package/busybox/mdev.conf @@ -0,0 +1,39 @@ +# null may already exist; therefore ownership has to be changed with command +null root:root 666 @chmod 666 $MDEV +zero root:root 666 +full root:root 666 +random root:root 444 +urandom root:root 444 +hwrandom root:root 444 +grsec root:root 660 + +kmem root:root 640 +mem root:root 640 +port root:root 640 +# console may already exist; therefore ownership has to be changed with command +console root:tty 600 @chmod 600 $MDEV +ptmx root:tty 666 +pty.* root:tty 660 + +# Typical devices +tty root:tty 666 +tty[0-9]* root:tty 660 +vcsa*[0-9]* root:tty 660 +ttyS[0-9]* root:root 660 +ttyUSB[0-9]* root:root 660 + +# alsa sound devices +snd/pcm.* root:audio 660 +snd/control.* root:audio 660 +snd/midi.* root:audio 660 +snd/seq root:audio 660 +snd/timer root:audio 660 + +# input stuff +input/event[0-9]+ root:root 640 +input/mice root:root 640 +input/mouse[0-9] root:root 640 +input/ts[0-9] root:root 600 + +# load modules +$MODALIAS=.* root:root 660 @modprobe "$MODALIAS" diff --git a/package/busybox/ubi_mount_data_s/initd/S91ubi_mount b/package/busybox/ubi_mount_data_s/initd/S91ubi_mount new file mode 100755 index 00000000..eb5c1ae9 --- /dev/null +++ b/package/busybox/ubi_mount_data_s/initd/S91ubi_mount @@ -0,0 +1,15 @@ +#!/bin/sh +# +case "$1" in + start) + /root/init_shell/ubi_mount_data.sh & + ;; + stop) + ;; + restart|reload) + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + diff --git a/package/busybox/ubi_mount_data_s/systemd/nand_data_mount.service b/package/busybox/ubi_mount_data_s/systemd/nand_data_mount.service new file mode 100644 index 00000000..bffa399b --- /dev/null +++ b/package/busybox/ubi_mount_data_s/systemd/nand_data_mount.service @@ -0,0 +1,12 @@ +[Unit] +Description=run a script(default:/root/init_shell/ubi_mount_data.sh) after boot +After=getty@.service + +[Service] +Type=forking +ExecStart=/root/init_shell/ubi_mount_data.sh +TimeoutSec=0 +RemainAfterExit=no + +[Install] +WantedBy=multi-user.target diff --git a/package/busybox/ubi_mount_data_s/ubi_mount_data.sh b/package/busybox/ubi_mount_data_s/ubi_mount_data.sh new file mode 100755 index 00000000..d8877233 --- /dev/null +++ b/package/busybox/ubi_mount_data_s/ubi_mount_data.sh @@ -0,0 +1,72 @@ +#! /bin/sh + +mount_point="/home" +mount_disk="ubi1:data" + +check_env() +{ + line_num=$(cat /proc/mtd | grep data | wc -l) + + if [ $line_num -eq 0 ]; then + echo "error: not found about ubi data info!" + return 1 + fi + + if [ -e "/dev/ubi1" ]; then + echo "error: /dev/ubi1 already exist!" + return 2 + fi + + mountpoint -q $mount_point + if [ $? -eq 0 ]; then + echo "error: $mount_point already mount!" + return 3 + fi + + df | grep "$mount_disk" > /dev/null + if [ $? -eq 0 ]; then + echo "error: $mount_disk already mount!" + return 4 + fi + + return 0 +} + +#sleep 5 + +mkdir -p $mount_point +check_env + +if [ $? -ne 0 ]; then + exit 1; +fi + +mtd_num=$(cat /proc/mtd | grep data | head -n1 | cut -d ' ' -f 1 | sed 's/[^0-9]//g') + +mkdir -p $mount_point +echo "nand ubi attch..." +ubiattach -m $mtd_num -d 1 +mount -t ubifs $mount_disk $mount_point + +if [ $? -ne 0 ]; then + echo "init ubi data vol" + ubidetach -d 1 + echo y >> ubi_mount_data_ok + echo y >> ubi_mount_data_ok + ubiformat /dev/mtd$mtd_num < ubi_mount_data_ok + rm ubi_mount_data_ok + echo "nand ubi attch..." + ubiattach -m $mtd_num -d 1 + ubimkvol /dev/ubi1 -N data -m + + echo "init ubi dat vol finish" + + mount -t ubifs $mount_disk $mount_point + + if [ $? -ne 0 ]; then + echo "error: coundlnt mount nand data vol as data part" + fi +fi + +echo "success mount nand data vol as data part" + diff --git a/package/busybox/udhcpc.script b/package/busybox/udhcpc.script new file mode 100755 index 00000000..c73ad6c2 --- /dev/null +++ b/package/busybox/udhcpc.script @@ -0,0 +1,121 @@ +#!/bin/sh + +# udhcpc script edited by Tim Riker + +[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1 + +RESOLV_CONF="/etc/resolv.conf" +[ -e $RESOLV_CONF ] || touch $RESOLV_CONF +[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast" +[ -n "$subnet" ] && NETMASK="netmask $subnet" +# Handle stateful DHCPv6 like DHCPv4 +[ -n "$ipv6" ] && ip="$ipv6/128" + +if [ -z "${IF_WAIT_DELAY}" ]; then + IF_WAIT_DELAY=10 +fi + +wait_for_ipv6_default_route() { + printf "Waiting for IPv6 default route to appear" + while [ $IF_WAIT_DELAY -gt 0 ]; do + if ip -6 route list | grep -q default; then + printf "\n" + return + fi + sleep 1 + printf "." + : $((IF_WAIT_DELAY -= 1)) + done + printf " timeout!\n" +} + +case "$1" in + deconfig) + /sbin/ifconfig $interface up + /sbin/ifconfig $interface 0.0.0.0 + + # drop info from this interface + # resolv.conf may be a symlink to /tmp/, so take care + TMPFILE=$(mktemp) + grep -vE "# $interface\$" $RESOLV_CONF > $TMPFILE + cat $TMPFILE > $RESOLV_CONF + rm -f $TMPFILE + + if [ -x /usr/sbin/avahi-autoipd ]; then + /usr/sbin/avahi-autoipd -c $interface && /usr/sbin/avahi-autoipd -k $interface + fi + ;; + + leasefail|nak) + if [ -x /usr/sbin/avahi-autoipd ]; then + /usr/sbin/avahi-autoipd -c $interface || /usr/sbin/avahi-autoipd -wD $interface --no-chroot + fi + ;; + + renew|bound) + if [ -x /usr/sbin/avahi-autoipd ]; then + /usr/sbin/avahi-autoipd -c $interface && /usr/sbin/avahi-autoipd -k $interface + fi + /sbin/ifconfig $interface $ip $BROADCAST $NETMASK + if [ -n "$ipv6" ] ; then + wait_for_ipv6_default_route + fi + + # RFC3442: If the DHCP server returns both a Classless + # Static Routes option and a Router option, the DHCP + # client MUST ignore the Router option. + if [ -n "$staticroutes" ]; then + echo "deleting routers" + route -n | while read dest gw mask flags metric ref use iface; do + [ "$iface" != "$interface" -o "$gw" = "0.0.0.0" ] || \ + route del -net "$dest" netmask "$mask" gw "$gw" dev "$interface" + done + + # format: dest1/mask gw1 ... destn/mask gwn + set -- $staticroutes + while [ -n "$1" -a -n "$2" ]; do + route add -net "$1" gw "$2" dev "$interface" + shift 2 + done + elif [ -n "$router" ] ; then + echo "deleting routers" + while route del default gw 0.0.0.0 dev $interface 2> /dev/null; do + : + done + + for i in $router ; do + route add default gw $i dev $interface + done + fi + + # drop info from this interface + # resolv.conf may be a symlink to /tmp/, so take care + TMPFILE=$(mktemp) + grep -vE "# $interface\$" $RESOLV_CONF > $TMPFILE + cat $TMPFILE > $RESOLV_CONF + rm -f $TMPFILE + + # prefer rfc3397 domain search list (option 119) if available + if [ -n "$search" ]; then + search_list=$search + elif [ -n "$domain" ]; then + search_list=$domain + fi + + [ -n "$search_list" ] && + echo "search $search_list # $interface" >> $RESOLV_CONF + + for i in $dns ; do + echo adding dns $i + echo "nameserver $i # $interface" >> $RESOLV_CONF + done + ;; +esac + +HOOK_DIR="$0.d" +for hook in "${HOOK_DIR}/"*; do + [ -f "${hook}" -a -x "${hook}" ] || continue + "${hook}" "${@}" +done + +exit 0 diff --git a/package/busybox/wpa_wlan_auto_link_s/initd/S91wpa_wlan_auto_link b/package/busybox/wpa_wlan_auto_link_s/initd/S91wpa_wlan_auto_link new file mode 100755 index 00000000..cb18dd4d --- /dev/null +++ b/package/busybox/wpa_wlan_auto_link_s/initd/S91wpa_wlan_auto_link @@ -0,0 +1,15 @@ +#!/bin/sh +# +case "$1" in + start) + /root/init_shell/wpa_wlan_auto_link.sh & + ;; + stop) + ;; + restart|reload) + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + diff --git a/package/busybox/wpa_wlan_auto_link_s/systemd/wpa_wlan_auto_link.service b/package/busybox/wpa_wlan_auto_link_s/systemd/wpa_wlan_auto_link.service new file mode 100644 index 00000000..0c61c4e9 --- /dev/null +++ b/package/busybox/wpa_wlan_auto_link_s/systemd/wpa_wlan_auto_link.service @@ -0,0 +1,12 @@ +[Unit] +Description=run a script(default:/root/init_shell/wpa_wlan_auto_link.sh) after boot +After=getty@.service + +[Service] +Type=forking +ExecStart=/root/init_shell/wpa_wlan_auto_link.sh +TimeoutSec=0 +RemainAfterExit=no + +[Install] +WantedBy=multi-user.target diff --git a/package/busybox/wpa_wlan_auto_link_s/wpa_wlan_auto_link.sh b/package/busybox/wpa_wlan_auto_link_s/wpa_wlan_auto_link.sh new file mode 100755 index 00000000..2b871b41 --- /dev/null +++ b/package/busybox/wpa_wlan_auto_link_s/wpa_wlan_auto_link.sh @@ -0,0 +1,19 @@ +#! /bin/sh + +default_user="wifi-test" +default_passwd="wifi-test123" +default_wlan_dev="wlan0" + +wpa_config="/etc/wpa_supplicant.config" + +#sleep 5 + +if [ ! -f $wpa_config ]; then + wpa_passphrase $default_user $default_passwd > $wpa_config +fi + +wpa_supplicant -B -i $default_wlan_dev -c $wpa_config +dhcpcd $default_wlan_dev + +echo "success run wpa wlan auto link service" + diff --git a/package/bwm-ng/Config.in b/package/bwm-ng/Config.in new file mode 100644 index 00000000..f93dd935 --- /dev/null +++ b/package/bwm-ng/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_BWM_NG + bool "bwm-ng" + help + Bandwidth Monitor NG is a small and console-based live + network and disk-io bandwidth monitor for Linux, BSD, + Solaris, Mac OS X and others. + + http://www.gropp.org/?id=projects&sub=bwm-ng diff --git a/package/bwm-ng/bwm-ng.hash b/package/bwm-ng/bwm-ng.hash new file mode 100644 index 00000000..4b662276 --- /dev/null +++ b/package/bwm-ng/bwm-ng.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 906a2d561f2ec9e0dd68b7f51b302908e99515ea1216d0ecaf14d873ef54ae70 bwm-ng-0.6.2.tar.gz +sha256 8556cc15ba3c0a411bf7d94bac5870829fb725f294b450c724c1e0856a601556 COPYING diff --git a/package/bwm-ng/bwm-ng.mk b/package/bwm-ng/bwm-ng.mk new file mode 100644 index 00000000..4a34559e --- /dev/null +++ b/package/bwm-ng/bwm-ng.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# bwm-ng +# +################################################################################ + +BWM_NG_VERSION = 0.6.2 +BWM_NG_SITE = $(call github,vgropp,bwm-ng,v$(BWM_NG_VERSION)) +BWM_NG_CONF_OPTS = --with-procnetdev --with-diskstats +BWM_NG_LICENSE = GPL-2.0+ +BWM_NG_LICENSE_FILES = COPYING +BWM_NG_AUTORECONF = YES + +ifeq ($(BR2_PACKAGE_NCURSES),y) +BWM_NG_CONF_OPTS += --with-ncurses +BWM_NG_DEPENDENCIES += ncurses +endif + +$(eval $(autotools-package)) diff --git a/package/bzip2/0001-build-objects-twice.patch b/package/bzip2/0001-build-objects-twice.patch new file mode 100644 index 00000000..9bde0f64 --- /dev/null +++ b/package/bzip2/0001-build-objects-twice.patch @@ -0,0 +1,56 @@ +Build objects twice for shared and static libraries + +The existing Makefile causes problems on MIPS because the same object +files (not compiled with -fPIC) are used in static and shared libraries. +MIPS will refuce to link non-pic objects in shared libraries. +We fix this problems by creating a new rule for the shared library +and build the shared objects as *.sho instead of *.o. +Then, we use these objects to create the shared library. + +Signed-off-by: Markos Chandras + +Index: bzip2-1.0.6/Makefile-libbz2_so +=================================================================== +--- bzip2-1.0.6.orig/Makefile-libbz2_so ++++ bzip2-1.0.6/Makefile-libbz2_so +@@ -25,13 +25,13 @@ SHELL=/bin/sh + CC=gcc + override CFLAGS += -fpic -fPIC -Wall + +-OBJS= blocksort.o \ +- huffman.o \ +- crctable.o \ +- randtable.o \ +- compress.o \ +- decompress.o \ +- bzlib.o ++OBJS= blocksort.sho \ ++ huffman.sho \ ++ crctable.sho \ ++ randtable.sho \ ++ compress.sho \ ++ decompress.sho \ ++ bzlib.sho + + all: $(OBJS) + $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.6 $(OBJS) +@@ -45,17 +45,5 @@ install: + clean: + rm -f $(OBJS) bzip2.o libbz2.so.1.0.6 libbz2.so.1.0 bzip2-shared + +-blocksort.o: blocksort.c +- $(CC) $(CFLAGS) -c blocksort.c +-huffman.o: huffman.c +- $(CC) $(CFLAGS) -c huffman.c +-crctable.o: crctable.c +- $(CC) $(CFLAGS) -c crctable.c +-randtable.o: randtable.c +- $(CC) $(CFLAGS) -c randtable.c +-compress.o: compress.c +- $(CC) $(CFLAGS) -c compress.c +-decompress.o: decompress.c +- $(CC) $(CFLAGS) -c decompress.c +-bzlib.o: bzlib.c +- $(CC) $(CFLAGS) -c bzlib.c ++%.sho: %.c ++ $(CC) $(CFLAGS) -o $@ -c $< diff --git a/package/bzip2/0002-improve-build-system.patch b/package/bzip2/0002-improve-build-system.patch new file mode 100644 index 00000000..2d6e2cf9 --- /dev/null +++ b/package/bzip2/0002-improve-build-system.patch @@ -0,0 +1,84 @@ +Improve bzip2 build system + +This patch makes a number of improvements to the bzip2 build system: + + * Remove the BIGFILE variable that was used to force largefile + support. Now, the user of the Makefile is supposed to pass + -D_FILE_OFFSET_BITS=64 when largefile support is desired. + + * Use override CFLAGS += so that additional CFLAGS can be passed on + the command line. + + * Removed "forced" CFLAGS -O2, -g and -Winline. We don't want them by + default, and want the build system to use its own ones. + + * When creating the symbolic links bzegrep, bzfgrep, bzless and + bzcmp, don't link them to an absolute path, or they'll point to + some path on the build machine. + + * Provide an install target for the shared library, which creates the + appropriate symbolic links. + +Signed-off-by: Thomas Petazzoni + +Index: b/Makefile +=================================================================== +--- a/Makefile ++++ b/Makefile +@@ -20,8 +20,7 @@ + RANLIB=ranlib + LDFLAGS= + +-BIGFILES=-D_FILE_OFFSET_BITS=64 +-CFLAGS=-Wall -Winline -O2 -g $(BIGFILES) ++override CFLAGS += -Wall + + # Where you want it installed when you do 'make install' + PREFIX=/usr/local +@@ -90,14 +89,14 @@ + cp -f libbz2.a $(PREFIX)/lib + chmod a+r $(PREFIX)/lib/libbz2.a + cp -f bzgrep $(PREFIX)/bin/bzgrep +- ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzegrep +- ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzfgrep ++ ln -s -f bzgrep $(PREFIX)/bin/bzegrep ++ ln -s -f bzgrep $(PREFIX)/bin/bzfgrep + chmod a+x $(PREFIX)/bin/bzgrep + cp -f bzmore $(PREFIX)/bin/bzmore +- ln -s -f $(PREFIX)/bin/bzmore $(PREFIX)/bin/bzless ++ ln -s -f bzmore $(PREFIX)/bin/bzless + chmod a+x $(PREFIX)/bin/bzmore + cp -f bzdiff $(PREFIX)/bin/bzdiff +- ln -s -f $(PREFIX)/bin/bzdiff $(PREFIX)/bin/bzcmp ++ ln -s -f bzdiff $(PREFIX)/bin/bzcmp + chmod a+x $(PREFIX)/bin/bzdiff + cp -f bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX)/man/man1 + chmod a+r $(PREFIX)/man/man1/bzgrep.1 +Index: b/Makefile-libbz2_so +=================================================================== +--- a/Makefile-libbz2_so ++++ b/Makefile-libbz2_so +@@ -23,8 +23,7 @@ + + SHELL=/bin/sh + CC=gcc +-BIGFILES=-D_FILE_OFFSET_BITS=64 +-CFLAGS=-fpic -fPIC -Wall -Winline -O2 -g $(BIGFILES) ++override CFLAGS += -fpic -fPIC -Wall + + OBJS= blocksort.o \ + huffman.o \ +@@ -37,8 +36,11 @@ + all: $(OBJS) + $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.8 $(OBJS) + $(CC) $(CFLAGS) -o bzip2-shared bzip2.c libbz2.so.1.0.8 +- rm -f libbz2.so.1.0 +- ln -s libbz2.so.1.0.8 libbz2.so.1.0 ++ ++install: ++ install -m 0755 -D libbz2.so.1.0.8 $(PREFIX)/lib/libbz2.so.1.0.8 ++ ln -sf libbz2.so.1.0.8 $(PREFIX)/lib/libbz2.so ++ ln -sf libbz2.so.1.0.8 $(PREFIX)/lib/libbz2.so.1.0 + + clean: + rm -f $(OBJS) bzip2.o libbz2.so.1.0.8 libbz2.so.1.0 bzip2-shared diff --git a/package/bzip2/Config.in b/package/bzip2/Config.in new file mode 100644 index 00000000..7db1902b --- /dev/null +++ b/package/bzip2/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_BZIP2 + bool "bzip2" + help + Freely available, patent free, high-quality data compressor. + It typically compresses files to within 10% to 15% of the best + available techniques, while being around twice as fast at + compression and six times faster at decompression. + + https://sourceware.org/bzip2/ diff --git a/package/bzip2/bzip2.hash b/package/bzip2/bzip2.hash new file mode 100644 index 00000000..cf66c402 --- /dev/null +++ b/package/bzip2/bzip2.hash @@ -0,0 +1,4 @@ +# From https://sourceware.org/pub/bzip2/sha512.sum +sha512 083f5e675d73f3233c7930ebe20425a533feedeaaa9d8cc86831312a6581cefbe6ed0d08d2fa89be81082f2a5abdabca8b3c080bf97218a1bd59dc118a30b9f3 bzip2-1.0.8.tar.gz +# Locally calculated +sha256 c6dbbf828498be844a89eaa3b84adbab3199e342eb5cb2ed2f0d4ba7ec0f38a3 LICENSE diff --git a/package/bzip2/bzip2.mk b/package/bzip2/bzip2.mk new file mode 100644 index 00000000..c2e5f761 --- /dev/null +++ b/package/bzip2/bzip2.mk @@ -0,0 +1,70 @@ +################################################################################ +# +# bzip2 +# +################################################################################ + +BZIP2_VERSION = 1.0.8 +BZIP2_SITE = https://sourceware.org/pub/bzip2 +BZIP2_INSTALL_STAGING = YES +BZIP2_LICENSE = bzip2 license +BZIP2_LICENSE_FILES = LICENSE +BZIP2_CPE_ID_VENDOR = bzip + +ifeq ($(BR2_STATIC_LIBS),) +define BZIP2_BUILD_SHARED_CMDS + $(TARGET_MAKE_ENV) \ + $(MAKE) -C $(@D) -f Makefile-libbz2_so $(TARGET_CONFIGURE_OPTS) +endef +endif + +define BZIP2_BUILD_CMDS + $(TARGET_MAKE_ENV) \ + $(MAKE) -C $(@D) libbz2.a bzip2 bzip2recover $(TARGET_CONFIGURE_OPTS) + $(BZIP2_BUILD_SHARED_CMDS) +endef + +ifeq ($(BR2_STATIC_LIBS),) +define BZIP2_INSTALL_STAGING_SHARED_CMDS + $(TARGET_MAKE_ENV) $(MAKE) \ + -f Makefile-libbz2_so PREFIX=$(STAGING_DIR)/usr -C $(@D) install +endef +endif + +define BZIP2_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) \ + PREFIX=$(STAGING_DIR)/usr -C $(@D) install + $(BZIP2_INSTALL_STAGING_SHARED_CMDS) +endef + +ifeq ($(BR2_STATIC_LIBS),) +define BZIP2_INSTALL_TARGET_SHARED_CMDS + $(TARGET_MAKE_ENV) $(MAKE) \ + -f Makefile-libbz2_so PREFIX=$(TARGET_DIR)/usr -C $(@D) install +endef +endif + +# make sure busybox doesn't get overwritten by make install +define BZIP2_INSTALL_TARGET_CMDS + rm -f $(addprefix $(TARGET_DIR)/usr/bin/,bzip2 bunzip2 bzcat) + $(TARGET_MAKE_ENV) $(MAKE) \ + PREFIX=$(TARGET_DIR)/usr -C $(@D) install + $(BZIP2_INSTALL_TARGET_SHARED_CMDS) +endef + +define HOST_BZIP2_BUILD_CMDS + $(HOST_MAKE_ENV) $(HOST_CONFIGURE_OPTS) \ + $(MAKE) -C $(@D) -f Makefile-libbz2_so + $(HOST_MAKE_ENV) $(HOST_CONFIGURE_OPTS) \ + $(MAKE) -C $(@D) libbz2.a bzip2 bzip2recover +endef + +define HOST_BZIP2_INSTALL_CMDS + $(HOST_MAKE_ENV) \ + $(MAKE) PREFIX=$(HOST_DIR) -C $(@D) install + $(HOST_MAKE_ENV) \ + $(MAKE) -f Makefile-libbz2_so PREFIX=$(HOST_DIR) -C $(@D) install +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/c-ares/Config.in b/package/c-ares/Config.in new file mode 100644 index 00000000..be17b166 --- /dev/null +++ b/package/c-ares/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_C_ARES + bool "c-ares" + help + C library for asynchronous DNS requests. + + http://c-ares.haxx.se/ diff --git a/package/c-ares/c-ares.hash b/package/c-ares/c-ares.hash new file mode 100644 index 00000000..235b7dbc --- /dev/null +++ b/package/c-ares/c-ares.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +sha256 d73dd0f6de824afd407ce10750ea081af47eba52b8a6cb307d220131ad93fc40 c-ares-1.17.1.tar.gz + +# Hash for license file +sha256 db4eb63fe09daebdf57d3f79b091bb5ee5070c0d761040e83264e648d307af4c LICENSE.md diff --git a/package/c-ares/c-ares.mk b/package/c-ares/c-ares.mk new file mode 100644 index 00000000..8f200237 --- /dev/null +++ b/package/c-ares/c-ares.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# c-ares +# +################################################################################ + +C_ARES_VERSION = 1.17.1 +C_ARES_SITE = http://c-ares.haxx.se/download +C_ARES_INSTALL_STAGING = YES +C_ARES_CONF_OPTS = --with-random=/dev/urandom +C_ARES_LICENSE = MIT +C_ARES_LICENSE_FILES = LICENSE.md + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/c-capnproto/Config.in b/package/c-capnproto/Config.in new file mode 100644 index 00000000..41a59d7a --- /dev/null +++ b/package/c-capnproto/Config.in @@ -0,0 +1,27 @@ +config BR2_PACKAGE_C_CAPNPROTO + bool "c-capnproto" + depends on BR2_USE_MMU # capnproto + depends on BR2_HOST_GCC_AT_LEAST_5 # capnproto + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5 # capnproto + depends on BR2_INSTALL_LIBSTDCPP # capnproto + depends on BR2_TOOLCHAIN_HAS_THREADS # capnproto + depends on BR2_TOOLCHAIN_HAS_ATOMIC # capnproto + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # capnproto + depends on BR2_TOOLCHAIN_HAS_UCONTEXT # capnproto + select BR2_PACKAGE_CAPNPROTO + help + A C plugin for Cap'n Proto. Generates the code generator + plugin for C. Requires regular Cap'n Proto and only + provides serialization (no RPC). + + https://github.com/opensourcerouting/c-capnproto + +comment "c-capnproto needs host and target gcc >= 5 w/ C++14, threads, atomic, ucontext and not gcc bug 64735" + depends on BR2_USE_MMU + depends on!BR2_HOST_GCC_AT_LEAST_5 || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_5 || \ + !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_HAS_ATOMIC || \ + BR2_TOOLCHAIN_HAS_GCC_BUG_64735 || \ + !BR2_TOOLCHAIN_HAS_UCONTEXT diff --git a/package/c-capnproto/c-capnproto.hash b/package/c-capnproto/c-capnproto.hash new file mode 100644 index 00000000..e215400c --- /dev/null +++ b/package/c-capnproto/c-capnproto.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 1e35ef786bd8e418ff04fccb20ac881a87fa2fa76df1cbddc4774e35423bafb8 c-capnproto-9053ebe6eeb2ae762655b982e27c341cb568366d-br1.tar.gz +sha256 27797e6c7dce96675d79ed250584d157b7a86405db6eb6fba9644e6d96d42c57 COPYING diff --git a/package/c-capnproto/c-capnproto.mk b/package/c-capnproto/c-capnproto.mk new file mode 100644 index 00000000..c144a4be --- /dev/null +++ b/package/c-capnproto/c-capnproto.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# c-capnproto +# +################################################################################ + +C_CAPNPROTO_VERSION = 9053ebe6eeb2ae762655b982e27c341cb568366d +C_CAPNPROTO_SITE = https://github.com/opensourcerouting/c-capnproto.git +C_CAPNPROTO_SITE_METHOD = git +C_CAPNPROTO_GIT_SUBMODULES = YES +C_CAPNPROTO_LICENSE = MIT +C_CAPNPROTO_LICENSE_FILES = COPYING +C_CAPNPROTO_INSTALL_STAGING = YES + +# Fetched from git with no configure script +C_CAPNPROTO_AUTORECONF = YES + +# As a plugin for capnproto's capnpc, requires capnproto. Needs to be on the +# host to generate C code from message definitions. +C_CAPNPROTO_DEPENDENCIES = host-c-capnproto capnproto +HOST_C_CAPNPROTO_DEPENDENCIES = host-capnproto + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/c-icap-modules/Config.in b/package/c-icap-modules/Config.in new file mode 100644 index 00000000..616456b4 --- /dev/null +++ b/package/c-icap-modules/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_C_ICAP_MODULES + bool "c-icap-modules" + depends on BR2_PACKAGE_C_ICAP + help + Additionals modules for c-icap server. + + http://c-icap.sourceforge.net/ diff --git a/package/c-icap-modules/c-icap-modules.hash b/package/c-icap-modules/c-icap-modules.hash new file mode 100644 index 00000000..cc7949a0 --- /dev/null +++ b/package/c-icap-modules/c-icap-modules.hash @@ -0,0 +1,7 @@ +# From http://sourceforge.net/projects/c-icap/files/c-icap-modules/0.5.x/ +md5 2f8c174f7a5414616f5a0a976ac4a221 c_icap_modules-0.5.4.tar.gz +sha1 ec7bb138d7775895cd8b2e12adc41dbf48eba1b7 c_icap_modules-0.5.4.tar.gz + +# Locally calculated +sha256 87409920c66027204e9cca5f20e137b63cd12daf6dfcd85c1fa62ab2bd1c57cc c_icap_modules-0.5.4.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/c-icap-modules/c-icap-modules.mk b/package/c-icap-modules/c-icap-modules.mk new file mode 100644 index 00000000..2eaa141a --- /dev/null +++ b/package/c-icap-modules/c-icap-modules.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# c-icap-modules +# +################################################################################ + +C_ICAP_MODULES_VERSION = 0.5.4 +C_ICAP_MODULES_SOURCE = c_icap_modules-$(C_ICAP_MODULES_VERSION).tar.gz +C_ICAP_MODULES_SITE = http://downloads.sourceforge.net/c-icap +C_ICAP_MODULES_LICENSE = GPL-2.0+ +C_ICAP_MODULES_LICENSE_FILES = COPYING +C_ICAP_MODULES_DEPENDENCIES = c-icap + +C_ICAP_MODULES_CONF_OPTS = \ + --with-c-icap=$(STAGING_DIR)/usr/ \ + --without-clamav + +ifeq ($(BR2_PACKAGE_BERKELEYDB),y) +C_ICAP_MODULES_CONF_OPTS += --with-bdb +C_ICAP_MODULES_DEPENDENCIES += berkeleydb +else +C_ICAP_MODULES_CONF_OPTS += --without-bdb +endif + +$(eval $(autotools-package)) diff --git a/package/c-icap/0001-Required-fixes-to-compile-and-run-under-cygwin.patch b/package/c-icap/0001-Required-fixes-to-compile-and-run-under-cygwin.patch new file mode 100644 index 00000000..6f886c9b --- /dev/null +++ b/package/c-icap/0001-Required-fixes-to-compile-and-run-under-cygwin.patch @@ -0,0 +1,391 @@ +From 1631a6c1f50e152b8a45d8279c96086e5636795b Mon Sep 17 00:00:00 2001 +From: Christos Tsantilas +Date: Fri, 25 Jan 2019 06:42:22 -0800 +Subject: [PATCH] Required fixes to compile and run under cygwin + +[Retrieved (and backported) from: +https://github.com/c-icap/c-icap-server/commit/1631a6c1f50e152b8a45d8279c96086e5636795b, +which has the side effect of fixing the build with the musl C library] +Signed-off-by: Fabrice Fontaine +--- + Makefile.am | 2 +- + configure.ac | 10 +++++++--- + header.c | 34 ---------------------------------- + include/header.h | 8 -------- + modules/Makefile.am | 34 ++++++++++++++++++++-------------- + modules/bdb_tables.c | 17 +++++++++++++++-- + modules/shared_cache.c | 12 ++++++++++++ + modules/sys_logger.c | 13 +++++++++++++ + services/echo/Makefile.am | 10 ++++++++-- + services/ex-206/Makefile.am | 10 ++++++++-- + utils/c-icap-mkbdb.c | 8 ++++---- + 11 files changed, 88 insertions(+), 70 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 4c34033..ab80f4f 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -53,7 +53,7 @@ c_icap_SOURCES = aserver.c request.c cfg_param.c \ + libicapapi_la_CFLAGS= $(INVISIBILITY_CFLAG) -I$(srcdir)/include/ -Iinclude/ @ZLIB_ADD_FLAG@ @OPENSSL_ADD_FLAG@ @BZLIB_ADD_FLAG@ @BROTLI_ADD_FLAG@ @PCRE_ADD_FLAG@ -DCI_BUILD_LIB + + libicapapi_la_LIBADD = @ZLIB_ADD_LDADD@ @BZLIB_ADD_LDADD@ @BROTLI_ADD_LDADD@ @PCRE_ADD_LDADD@ @DL_ADD_FLAG@ @THREADS_LDADD@ @OPENSSL_ADD_LDADD@ +-libicapapi_la_LDFLAGS= -shared -version-info @CICAPLIB_VERSION@ @THREADS_LDFLAGS@ ++libicapapi_la_LDFLAGS= -shared -version-info @CICAPLIB_VERSION@ @LIBS_LDFLAGS@ @THREADS_LDFLAGS@ + + export EXT_PROGRAMS_MKLIB = @ZLIB_LNDIR_LDADD@ @BZLIB_LNDIR_LDADD@ @BROTLI_LNDIR_LDADD@ @PCRE_LNDIR_LDADD@ @OPENSSL_LNDIR_LDADD@ + +diff --git a/configure.ac b/configure.ac +index 405571b..8059cb7 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -45,12 +45,14 @@ case "$host_os" in + CFLAGS="-D_REENTRANT $CFLAGS" + THREADS_LDADD="-lpthread" + THREADS_LDFLAGS="" ++ LIBS_LDFLAGS="" + ;; + solaris2.*) + CFLAGS="-D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS $CFLAGS" + LIBS="-lsocket -lnsl -lrt $LIBS" + THREADS_LDADD="-lpthread" + THREADS_LDFLAGS="" ++ LIBS_LDFLAGS="" + ;; + freebsd5*) + ## If I understand how all those threading models works correctly +@@ -69,6 +71,7 @@ case "$host_os" in + CFLAGS="-pthread -D_THREAD_SAFE $CFLAGS" + THREADS_LDADD="-XCClinker -lc_r" + THREADS_LDFLAGS="" ++ LIBS_LDFLAGS="" + ## FreeBSD has pthreads rwlocks from version 3 (I think) + # AC_DEFINE(HAVE_PTHREADS_RWLOCK,1,[Define HAVE_PTHREADS_RWLOCK if pthreads library supports rwlocks]) + ## 1:1 threads +@@ -82,24 +85,28 @@ case "$host_os" in + CFLAGS="-D_THREAD_SAFE $CFLAGS" + THREADS_LDADD="-XCClinker -lthr" + THREADS_LDFLAGS="" ++ LIBS_LDFLAGS="" + ;; + + cygwin*) + CFLAGS="-D_REENTRANT $CFLAGS" + THREADS_LDADD="-lpthread" + THREADS_LDFLAGS=""; ++ LIBS_LDFLAGS="-no-undefined" + iscygwin="yes" + ;; + *) + CFLAGS="-D_REENTRANT $CFLAGS" + THREADS_LDADD="-lpthread" + THREADS_LDFLAGS="" ++ LIBS_LDFLAGS="" + ;; + esac + + TEST_LIBS="$TEST_LIBS $THREADS_LDADD" + AC_SUBST(THREADS_LDADD) + AC_SUBST(THREADS_LDFLAGS) ++AC_SUBST(LIBS_LDFLAGS) + + AC_DEFINE_UNQUOTED(C_ICAP_CONFIGURE_OPTIONS, "$ac_configure_args", + [configure command line used to configure c-icap]) +@@ -984,9 +991,6 @@ LIBS="$LIBS $EXTRALIBS" + + #Configure common flags + MODULES_LIBADD="" +-if test a"$iscygwin" != a; then +- MODULES_LIBADD="-L../../ -licapapi" +-fi + MODULES_CFLAGS="$INVISIBILITY_CFLAG -DCI_BUILD_MODULE" + AC_SUBST(MODULES_LIBADD) + AC_SUBST(MODULES_CFLAGS) +diff --git a/header.c b/header.c +index 807a2e0..266b958 100644 +--- a/header.c ++++ b/header.c +@@ -110,21 +110,6 @@ const struct ci_error_code ci_error_codes[] = { + {505, "Unsupported version"} /*ICAP version not supported by server. */ + }; + +-/* +-#ifdef __CYGWIN__ +-int ci_error_code(int ec){ +- return (ec >= EC_100 && ec < EC_MAX ? ci_error_codes[ec].code:1000); +-} +- +-const char *unknownerrorcode = "UNKNOWN ERROR CODE"; +- +-const char *ci_error_code_string(int ec){ +- return (ec >= EC_100 && ec < EC_MAX?ci_error_codes[ec].str:unknownerrorcode); +-} +-#endif +-*/ +- +- + const char *ci_encaps_entities[] = { + "req-hdr", + "res-hdr", +@@ -134,25 +119,6 @@ const char *ci_encaps_entities[] = { + "opt-body" + }; + +-#ifdef __CYGWIN__ +- +-const char *unknownentity = "UNKNOWN"; +-const char *unknownmethod = "UNKNOWN"; +- +-const char *ci_method_string(int method) +-{ +- return (method <= ICAP_RESPMOD +- && method >= ICAP_OPTIONS ? CI_Methods[method] : unknownmethod); +-} +- +- +-const char *ci_encaps_entity_string(int e) +-{ +- return (e <= ICAP_OPT_BODY +- && e >= ICAP_REQ_HDR ? CI_EncapsEntities[e] : unknownentity); +-} +-#endif +- + ci_headers_list_t *ci_headers_create() + { + ci_headers_list_t *h; +diff --git a/include/header.h b/include/header.h +index 4cab365..ed2de88 100644 +--- a/include/header.h ++++ b/include/header.h +@@ -52,16 +52,8 @@ enum ci_encapsulated_entities {ICAP_REQ_HDR, ICAP_RES_HDR, + }; + CI_DECLARE_DATA extern const char *ci_encaps_entities[]; + +-#ifdef __CYGWIN__ +- +-const char *ci_encaps_entity_string(int e); +- +-#else +- + #define ci_encaps_entity_string(e) (e <= ICAP_OPT_BODY && e >= ICAP_REQ_HDR?ci_encaps_entities[e]:"UNKNOWN") + +-#endif +- + /** + \typedef ci_headers_list_t + \ingroup HEADERS +diff --git a/modules/Makefile.am b/modules/Makefile.am +index e6e9270..2d43a60 100644 +--- a/modules/Makefile.am ++++ b/modules/Makefile.am +@@ -21,38 +21,44 @@ endif + + AM_CPPFLAGS=-I$(top_srcdir)/ -I$(top_srcdir)/include/ -I$(top_builddir)/include/ + +-sys_logger_la_LIBADD = @MODULES_LIBADD@ ++if ISCYGWIN ++MODS_LIB_ADD=$(top_builddir)/libicapapi.la ++else ++MODS_LIB_ADD= ++endif ++ ++sys_logger_la_LIBADD = $(MODS_LIB_ADD) + sys_logger_la_CFLAGS= @MODULES_CFLAGS@ @OPENSSL_ADD_FLAG@ +-sys_logger_la_LDFLAGS= -module -avoid-version ++sys_logger_la_LDFLAGS= -module -avoid-version @LIBS_LDFLAGS@ + sys_logger_la_SOURCES = sys_logger.c + +-dnsbl_tables_la_LIBADD = @MODULES_LIBADD@ ++dnsbl_tables_la_LIBADD = $(MODS_LIB_ADD) + dnsbl_tables_la_CFLAGS= @MODULES_CFLAGS@ @OPENSSL_ADD_FLAG@ +-dnsbl_tables_la_LDFLAGS= -module -avoid-version ++dnsbl_tables_la_LDFLAGS= -module -avoid-version @LIBS_LDFLAGS@ + dnsbl_tables_la_SOURCES = dnsbl_tables.c + +-perl_handler_la_LIBADD = @MODULES_LIBADD@ @perllib@ -L@perlcore@ -lperl ++perl_handler_la_LIBADD = $(MODS_LIB_ADD) @perllib@ -L@perlcore@ -lperl + perl_handler_la_CFLAGS= @MODULES_CFLAGS@ @perlccflags@ -I@perlcore@ +-perl_handler_la_LDFLAGS= -module -avoid-version @perlldflags@ ++perl_handler_la_LDFLAGS= -module -avoid-version @LIBS_LDFLAGS@ @perlldflags@ + perl_handler_la_SOURCES = perl_handler.c + + +-bdb_tables_la_LIBADD = @MODULES_LIBADD@ @BDB_ADD_LDADD@ ++bdb_tables_la_LIBADD = $(MODS_LIB_ADD) @BDB_ADD_LDADD@ + bdb_tables_la_CFLAGS= @MODULES_CFLAGS@ @BDB_ADD_FLAG@ +-bdb_tables_la_LDFLAGS= -module -avoid-version ++bdb_tables_la_LDFLAGS= -module -avoid-version @LIBS_LDFLAGS@ + bdb_tables_la_SOURCES = bdb_tables.c + +-ldap_module_la_LIBADD = @MODULES_LIBADD@ @LDAP_ADD_LDADD@ $(top_builddir)/libicapapi.la ++ldap_module_la_LIBADD = $(MODS_LIB_ADD) @LDAP_ADD_LDADD@ + ldap_module_la_CFLAGS= @MODULES_CFLAGS@ @LDAP_ADD_FLAG@ +-ldap_module_la_LDFLAGS= -module -avoid-version ++ldap_module_la_LDFLAGS= -module -avoid-version @LIBS_LDFLAGS@ + ldap_module_la_SOURCES = ldap_module.c + +-memcached_cache_la_LIBADD= @MODULES_LIBADD@ @MEMCACHED_ADD_LDADD@ ++memcached_cache_la_LIBADD= $(MODS_LIB_ADD) @MEMCACHED_ADD_LDADD@ + memcached_cache_la_CFLAGS= @MODULES_CFLAGS@ @MEMCACHED_ADD_FLAG@ +-memcached_cache_la_LDFLAGS= -module -avoid-version ++memcached_cache_la_LDFLAGS= -module -avoid-version @LIBS_LDFLAGS@ + memcached_cache_la_SOURCES= memcached.c + +-shared_cache_la_LIBADD= @MODULES_LIBADD@ ++shared_cache_la_LIBADD= $(MODS_LIB_ADD) + shared_cache_la_CFLAGS= @OPENSSL_ADD_FLAG@ +-shared_cache_la_LDFLAGS= -module -avoid-version ++shared_cache_la_LDFLAGS= -module -avoid-version @LIBS_LDFLAGS@ + shared_cache_la_SOURCES= shared_cache.c +diff --git a/modules/bdb_tables.c b/modules/bdb_tables.c +index b8459be..1e908a9 100644 +--- a/modules/bdb_tables.c ++++ b/modules/bdb_tables.c +@@ -176,8 +176,8 @@ void *bdb_table_open(struct ci_lookup_table *table) + + /*We can not fork a Berkeley DB table, so we have to + open bdb tables for every child, on childs start-up procedure*/ +- register_command_extend("openBDBtable", CHILD_START_CMD, table, +- command_real_open_table); ++ ci_command_register_action("openBDBtable", CHILD_START_CMD, table, ++ command_real_open_table); + + return table->data; + } +@@ -257,3 +257,16 @@ void bdb_table_release_result(struct ci_lookup_table *table,void **val) + { + ci_buffer_free(val); + } ++ ++ #ifdef __CYGWIN__ ++#include ++void ci_command_register_action(const char *name, int type, void *data, ++ void (*command_action) (const char *name, int type, void *data)) ++ { ++ typedef void (*RA)(const char *, int, void *, void(*)(const char *, int, void *)); ++ RA fn; ++ fn = (RA)GetProcAddress(GetModuleHandle(NULL), "ci_command_register_action"); ++ if (fn) ++ (*fn)(name, type, data, command_action); ++ } ++#endif +diff --git a/modules/shared_cache.c b/modules/shared_cache.c +index 103b760..a79d51a 100644 +--- a/modules/shared_cache.c ++++ b/modules/shared_cache.c +@@ -345,3 +345,15 @@ void ci_shared_cache_destroy(struct ci_cache *cache) + ci_shared_mem_detach(&data->id); + } + ++#ifdef __CYGWIN__ ++#include ++void ci_command_register_action(const char *name, int type, void *data, ++ void (*command_action) (const char *name, int type, void *data)) ++ { ++ typedef void (*RA)(const char *, int, void *, void(*)(const char *, int, void *)); ++ RA fn; ++ fn = (RA)GetProcAddress(GetModuleHandle(NULL), "ci_command_register_action"); ++ if (fn) ++ (*fn)(name, type, data, command_action); ++ } ++#endif +diff --git a/modules/sys_logger.c b/modules/sys_logger.c +index 1c47753..1764b0d 100644 +--- a/modules/sys_logger.c ++++ b/modules/sys_logger.c +@@ -60,7 +60,20 @@ int cfg_syslog_access(const char *directive, const char **argv, void *setdata); + functions declared in log.c. This file is not included in c-icap library + but defined in primary c-icap binary. + */ ++#ifdef __CYGWIN__ ++#include ++char *logformat_fmt(const char *name) ++{ ++ typedef char* (*LF_FMT)(const char *); ++ LF_FMT fn; ++ fn = (LF_FMT)GetProcAddress(GetModuleHandle(NULL), "logformat_fmt"); ++ if (fn) ++ return (*fn)(name); ++ return NULL; ++} ++#else + extern char *logformat_fmt(const char *name); ++#endif + + /*Configuration Table .....*/ + static struct ci_conf_entry conf_variables[] = { +diff --git a/services/echo/Makefile.am b/services/echo/Makefile.am +index 402c8f9..7d701b1 100644 +--- a/services/echo/Makefile.am ++++ b/services/echo/Makefile.am +@@ -3,9 +3,15 @@ pkglib_LTLIBRARIES=srv_echo.la + + AM_CPPFLAGS=-I$(top_srcdir)/ -I$(top_srcdir)/include/ -I$(top_builddir)/include/ + +-srv_echo_la_LIBADD = @MODULES_LIBADD@ ++if ISCYGWIN ++MODS_LIB_ADD=$(top_builddir)/libicapapi.la ++else ++MODS_LIB_ADD= ++endif ++ ++srv_echo_la_LIBADD = $(MODS_LIB_ADD) + srv_echo_la_CFLAGS= @MODULES_CFLAGS@ @OPENSSL_ADD_FLAG@ +-srv_echo_la_LDFLAGS= -module -avoid-version ++srv_echo_la_LDFLAGS= -module -avoid-version @LIBS_LDFLAGS@ + srv_echo_la_SOURCES = srv_echo.c + + +diff --git a/services/ex-206/Makefile.am b/services/ex-206/Makefile.am +index 44bbf21..ff73399 100644 +--- a/services/ex-206/Makefile.am ++++ b/services/ex-206/Makefile.am +@@ -3,8 +3,14 @@ pkglib_LTLIBRARIES=srv_ex206.la + + AM_CPPFLAGS=-I$(top_srcdir)/ -I$(top_srcdir)/include/ -I$(top_builddir)/include/ + +-srv_ex206_la_LIBADD = @MODULES_LIBADD@ ++if ISCYGWIN ++MODS_LIB_ADD=$(top_builddir)/libicapapi.la ++else ++MODS_LIB_ADD= ++endif ++ ++srv_ex206_la_LIBADD = $(MODS_LIB_ADD) + srv_ex206_la_CFLAGS= @MODULES_CFLAGS@ @OPENSSL_ADD_FLAG@ +-srv_ex206_la_LDFLAGS= -module -avoid-version ++srv_ex206_la_LDFLAGS= -module -avoid-version @LIBS_LDFLAGS@ + srv_ex206_la_SOURCES = srv_ex206.c + +diff --git a/utils/c-icap-mkbdb.c b/utils/c-icap-mkbdb.c +index c29a46f..326ee1c 100644 +--- a/utils/c-icap-mkbdb.c ++++ b/utils/c-icap-mkbdb.c +@@ -23,7 +23,7 @@ char *dbfile = NULL; + int DUMP_MODE = 0; + int VERSION_MODE = 0; + int USE_DBTREE = 0; +-long int PAGE_SIZE; ++long int DB_PAGE_SIZE; + + ci_mem_allocator_t *allocator = NULL; + int cfg_set_type(const char *directive, const char **argv, void *setdata); +@@ -52,7 +52,7 @@ static struct ci_options_entry options[] = { + "The type of values" + }, + { +- "-p", "page_size", &PAGE_SIZE, ci_cfg_size_long, ++ "-p", "page_size", &DB_PAGE_SIZE, ci_cfg_size_long, + "The page size to use for the database" + }, + { +@@ -107,8 +107,8 @@ int open_db(char *path) + return 0; + } + +- if (PAGE_SIZE > 512 && PAGE_SIZE <= 64*1024) +- db->set_pagesize(db, (uint32_t)PAGE_SIZE); ++ if (DB_PAGE_SIZE > 512 && DB_PAGE_SIZE <= 64*1024) ++ db->set_pagesize(db, (uint32_t)DB_PAGE_SIZE); + + if ((ret = db->open(db, NULL, path, NULL, + (USE_DBTREE ? DB_BTREE : DB_HASH), diff --git a/package/c-icap/Config.in b/package/c-icap/Config.in new file mode 100644 index 00000000..8f7963c2 --- /dev/null +++ b/package/c-icap/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_C_ICAP + bool "c-icap" + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + help + c-icap is an implementation of an ICAP server. It can be + used with HTTP proxies that support the ICAP protocol to + implement content adaptation and filtering services. Most + of the commercial HTTP proxies must support the ICAP + protocol. The open source Squid 3.x proxy server supports + it. + + http://c-icap.sourceforge.net/ + +comment "c-icap needs a toolchain w/ threads and dynamic library" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/c-icap/S96cicap b/package/c-icap/S96cicap new file mode 100644 index 00000000..7b95f860 --- /dev/null +++ b/package/c-icap/S96cicap @@ -0,0 +1,27 @@ +#!/bin/sh + +# (Re)create directories +mkdir -p /var/run/c-icap +mkdir -p /var/log/c-icap + +case "$1" in + start) + printf "Starting c-icap server: " + start-stop-daemon -S -q -b -m -p /var/run/c-icap.pid \ + -x /usr/bin/c-icap -- -N + [ $? == 0 ] && echo "OK" || echo "FAIL" + ;; + stop) + printf "Stopping c-icap server: " + start-stop-daemon -K -q -p /var/run/c-icap.pid + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + restart|reload) + $0 stop + sleep 1 + $0 start + ;; + *) + echo "Usage: /etc/init.d/S96cicap {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/c-icap/c-icap.hash b/package/c-icap/c-icap.hash new file mode 100644 index 00000000..6aa81c26 --- /dev/null +++ b/package/c-icap/c-icap.hash @@ -0,0 +1,6 @@ +# Retrieved from https://sourceforge.net/projects/c-icap/files/c-icap/0.5.x/ +md5 82fd2fba1a08a8a0cf3567fe24aa035d c_icap-0.5.7.tar.gz +sha1 3b2470e00abd1418bec3a440d3073d7a6231c4c1 c_icap-0.5.7.tar.gz +# Locally calculated +sha256 01ef17d7999d3476fe705abc56d0da562c2f180aafe08fc1269f419cad8521a9 c_icap-0.5.7.tar.gz +sha256 36b6d3fa47916943fd5fec313c584784946047ec1337a78b440e5992cb595f89 COPYING diff --git a/package/c-icap/c-icap.mk b/package/c-icap/c-icap.mk new file mode 100644 index 00000000..fb66c75e --- /dev/null +++ b/package/c-icap/c-icap.mk @@ -0,0 +1,102 @@ +################################################################################ +# +# c-icap +# +################################################################################ + +C_ICAP_VERSION = 0.5.7 +C_ICAP_SOURCE = c_icap-$(C_ICAP_VERSION).tar.gz +C_ICAP_SITE = http://downloads.sourceforge.net/c-icap +C_ICAP_LICENSE = LGPL-2.1+ +C_ICAP_LICENSE_FILES = COPYING +C_ICAP_CPE_ID_VENDOR = c-icap_project +C_ICAP_INSTALL_STAGING = YES +C_ICAP_CONFIG_SCRIPTS = c-icap-config c-icap-libicapapi-config +C_ICAP_CONF_OPTS = \ + --without-perl \ + --enable-large-files \ + --enable-ipv6 +# Pre-seed cache variables for tests done with AC_TRY_RUN that are not +# cross-compile friendly +C_ICAP_CONF_ENV = ac_cv_10031b_ipc_sem=yes ac_cv_fcntl=yes +# c-icap adds '-Wl,-rpath -Wl,/usr/lib' to the link command line. This +# causes the linker to search for libraries that are listed as NEEDED +# in the libicapapi.so ELF header in host libraries, which breaks the +# build. The affected library is libz. Forcing AUTORECONF adds -lz to +# the link command line, and that makes the linker look first in +# sysroot, thus avoiding the build breakage. +C_ICAP_AUTORECONF = YES + +ifeq ($(BR2_PACKAGE_BERKELEYDB),y) +C_ICAP_CONF_OPTS += --with-bdb +C_ICAP_DEPENDENCIES += berkeleydb +else +C_ICAP_CONF_OPTS += --without-bdb +endif + +ifeq ($(BR2_PACKAGE_BZIP2),y) +C_ICAP_CONF_OPTS += --with-bzlib +C_ICAP_DEPENDENCIES += bzip2 +else +C_ICAP_CONF_OPTS += --without-bzlib +endif + +ifeq ($(BR2_PACKAGE_LIBMEMCACHED),y) +C_ICAP_CONF_OPTS += --with-memcached +C_ICAP_DEPENDENCIES += libmemcached +else +C_ICAP_CONF_OPTS += --without-memcached +endif + +ifeq ($(BR2_PACKAGE_OPENLDAP),y) +C_ICAP_CONF_OPTS += --with-ldap +C_ICAP_DEPENDENCIES += openldap +else +C_ICAP_CONF_OPTS += --without-ldap +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +C_ICAP_CONF_OPTS += --with-openssl +C_ICAP_DEPENDENCIES += openssl +else +C_ICAP_CONF_OPTS += --without-openssl +endif + +ifeq ($(BR2_PACKAGE_PCRE),y) +C_ICAP_CONF_OPTS += --with-pcre +C_ICAP_DEPENDENCIES += pcre +else +C_ICAP_CONF_OPTS += --without-pcre +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +C_ICAP_CONF_OPTS += --with-zlib +C_ICAP_DEPENDENCIES += zlib +else +C_ICAP_CONF_OPTS += --without-zlib +endif + +define C_ICAP_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/c-icap/S96cicap $(TARGET_DIR)/etc/init.d/S96cicap +endef + +# Tweak the installation: +# - Removed unneeded sample configuration files (c-icap.*.default), +# since some real ones are also installed +# - Tweak some paths in the c-icap.conf configuration file +# - Tweak the -config scripts, because the generic +# _CONFIG_SCRIPTS logic doesn't tweak them enough +define C_ICAP_TUNE_INSTALLATION + $(RM) -f $(TARGET_DIR)/etc/c-icap.*.default + $(SED) 's%/usr/etc/%/etc/%' $(TARGET_DIR)/etc/c-icap.conf + $(SED) 's%/usr/var/%/var/%' $(TARGET_DIR)/etc/c-icap.conf + $(SED) 's%INCDIR=.*%INCDIR=$(STAGING_DIR)/usr/include%' \ + $(STAGING_DIR)/usr/bin/{c-icap,c-icap-libicapapi}-config + $(SED) 's%INCDIR2=.*%INCDIR2=$(STAGING_DIR)/usr/include/c_icap%' \ + $(STAGING_DIR)/usr/bin/{c-icap,c-icap-libicapapi}-config + $(SED) 's%-L$$LIBDIR %%' $(STAGING_DIR)/usr/bin/c-icap-libicapapi-config +endef + +C_ICAP_POST_INSTALL_TARGET_HOOKS += C_ICAP_TUNE_INSTALLATION + +$(eval $(autotools-package)) diff --git a/package/c-periphery/Config.in b/package/c-periphery/Config.in new file mode 100644 index 00000000..0bfb4b1f --- /dev/null +++ b/package/c-periphery/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_C_PERIPHERY + bool "c-periphery" + help + c-periphery is a set of C wrapper functions for GPIO, SPI, + I2C, MMIO, and Serial peripheral I/O interface access in + userspace Linux. The c-periphery wrappers simplify and + consolidate the native Linux APIs to these + interfaces. c-periphery is useful in embedded Linux + environments (including BeagleBone, Raspberry Pi, + etc. platforms) for interfacing with external + peripherals. c-periphery is re-entrant, uses static + allocations, has no dependencies outside the standard C + library and Linux, compiles into a static library for easy + integration with other projects, and is MIT licensed. + + https://github.com/vsergeev/c-periphery diff --git a/package/c-periphery/c-periphery.hash b/package/c-periphery/c-periphery.hash new file mode 100644 index 00000000..516cfb33 --- /dev/null +++ b/package/c-periphery/c-periphery.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 ba298aac5c1f6ebe2b89ed623a2f678bedfa3b9dc78aaf4f0534a1dd304629da c-periphery-2.3.1.tar.gz +sha256 7121a0a2ba36ed9388be2f1a916f0e3584d8e49cc7888fbcfcf83bab2a8bebef LICENSE diff --git a/package/c-periphery/c-periphery.mk b/package/c-periphery/c-periphery.mk new file mode 100644 index 00000000..722679f9 --- /dev/null +++ b/package/c-periphery/c-periphery.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# c-periphery +# +################################################################################ + +C_PERIPHERY_VERSION = 2.3.1 +C_PERIPHERY_SITE = $(call github,vsergeev,c-periphery,v$(C_PERIPHERY_VERSION)) +C_PERIPHERY_INSTALL_STAGING = YES +C_PERIPHERY_LICENSE = MIT +C_PERIPHERY_LICENSE_FILES = LICENSE +C_PERIPHERY_CPE_ID_VENDOR = c-periphery_project + +$(eval $(cmake-package)) diff --git a/package/ca-certificates/Config.in b/package/ca-certificates/Config.in new file mode 100644 index 00000000..cd9825a8 --- /dev/null +++ b/package/ca-certificates/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_CA_CERTIFICATES + bool "CA Certificates" + help + This package includes PEM files of CA certificates to allow + SSL-based applications to check for the authenticity of SSL + connections. + + It includes, among others, certificate authorities used by the + Debian infrastructure and those shipped with Mozilla's + browsers. + + https://salsa.debian.org/debian/ca-certificates diff --git a/package/ca-certificates/ca-certificates.hash b/package/ca-certificates/ca-certificates.hash new file mode 100644 index 00000000..024034c9 --- /dev/null +++ b/package/ca-certificates/ca-certificates.hash @@ -0,0 +1,6 @@ +# hashes from: $(CA_CERTIFICATES_SITE)/ca-certificates_$(CA_CERTIFICATES_VERSION).dsc : +sha1 c9875aa16e42981c6975e59a11727539053e2299 ca-certificates_20210119.tar.xz +sha256 daa3afae563711c30a0586ddae4336e8e3974c2b627faaca404c4e0141b64665 ca-certificates_20210119.tar.xz + +# Locally computed +sha256 e85e1bcad3a915dc7e6f41412bc5bdeba275cadd817896ea0451f2140a93967c debian/copyright diff --git a/package/ca-certificates/ca-certificates.mk b/package/ca-certificates/ca-certificates.mk new file mode 100644 index 00000000..94302ea9 --- /dev/null +++ b/package/ca-certificates/ca-certificates.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# ca-certificates +# +################################################################################ + +CA_CERTIFICATES_VERSION = 20210119 +CA_CERTIFICATES_SOURCE = ca-certificates_$(CA_CERTIFICATES_VERSION).tar.xz +CA_CERTIFICATES_SITE = https://snapshot.debian.org/archive/debian/20210325T091936Z/pool/main/c/ca-certificates +CA_CERTIFICATES_DEPENDENCIES = host-openssl host-python3 +CA_CERTIFICATES_LICENSE = GPL-2.0+ (script), MPL-2.0 (data) +CA_CERTIFICATES_LICENSE_FILES = debian/copyright + +define CA_CERTIFICATES_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) clean all +endef + +define CA_CERTIFICATES_INSTALL_TARGET_CMDS + $(INSTALL) -d -m 0755 $(TARGET_DIR)/usr/share/ca-certificates + $(INSTALL) -d -m 0755 $(TARGET_DIR)/etc/ssl/certs + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install DESTDIR=$(TARGET_DIR) + rm -f $(TARGET_DIR)/usr/sbin/update-ca-certificates + + # Remove any existing certificates under /etc/ssl/certs + rm -f $(TARGET_DIR)/etc/ssl/certs/* + + # Create symlinks to certificates under /etc/ssl/certs + # and generate the bundle + cd $(TARGET_DIR) ;\ + for i in `find usr/share/ca-certificates -name "*.crt" | LC_COLLATE=C sort` ; do \ + ln -sf ../../../$$i etc/ssl/certs/`basename $${i} .crt`.pem ;\ + cat $$i ;\ + done >$(@D)/ca-certificates.crt + + # Create symlinks to the certificates by their hash values + $(HOST_DIR)/bin/c_rehash $(TARGET_DIR)/etc/ssl/certs + + # Install the certificates bundle + $(INSTALL) -D -m 644 $(@D)/ca-certificates.crt \ + $(TARGET_DIR)/etc/ssl/certs/ca-certificates.crt +endef + +$(eval $(generic-package)) diff --git a/package/cache-calibrator/0001-Fix-conflicting-round-function.patch b/package/cache-calibrator/0001-Fix-conflicting-round-function.patch new file mode 100644 index 00000000..71181a63 --- /dev/null +++ b/package/cache-calibrator/0001-Fix-conflicting-round-function.patch @@ -0,0 +1,108 @@ +From 39ac7268c4350040976005da98daf10edf676d3e Mon Sep 17 00:00:00 2001 +From: Stephan Hoffmann +Date: Mon, 28 Jan 2013 17:32:10 +0100 +Subject: [PATCH] Fix conflicting round() function + +calibrator.c defines a local round() function that conflicts +with the one from the standard library. + +This is fixed by renaming the local function. + +Signed-off-by: Stephan Hoffmann +--- + calibrator.c | 30 +++++++++++++++--------------- + 1 files changed, 15 insertions(+), 15 deletions(-) + +diff --git a/calibrator.c b/calibrator.c +index e045dfd..8471c04 100644 +--- a/calibrator.c ++++ b/calibrator.c +@@ -128,7 +128,7 @@ void ErrXit(char *format, ...) { + exit(1); + } + +-lng round(dbl x) ++lng lng_round(dbl x) + { + return (lng)(x + 0.5); + } +@@ -890,16 +890,16 @@ void plotCache(cacheInfo *cache, lng **result, lng MHz, char *fn, FILE *fp, lng + fprintf(fp, ")\n"); + fprintf(fp, "set y2tics"); + for (l = 0, s = " ("; l <= cache->levels; l++, s = ", ") { +- if (!delay) fprintf(fp, "%s'(%ld)' %f", s, round(CYperIt(cache->latency1[l] - delay)), NSperIt(cache->latency1[l] - delay)); +- else fprintf(fp, "%s'(%ld)' %f", s, round(CYperIt(cache->latency2[l] - delay)), NSperIt(cache->latency2[l] - delay)); ++ if (!delay) fprintf(fp, "%s'(%ld)' %f", s, lng_round(CYperIt(cache->latency1[l] - delay)), NSperIt(cache->latency1[l] - delay)); ++ else fprintf(fp, "%s'(%ld)' %f", s, lng_round(CYperIt(cache->latency2[l] - delay)), NSperIt(cache->latency2[l] - delay)); + } + for (y = 1; y <= yh; y *= 10) { + fprintf(fp, "%s'%1.3g' %ld", s, (dbl)(y * MHz) / 1000.0, y); + } + fprintf(fp, ")\n"); + for (l = 0; l <= cache->levels; l++) { +- if (!delay) z = (dbl)round(CYperIt(cache->latency1[l] - delay)) * 1000.0 / (dbl)MHz; +- else z = (dbl)round(CYperIt(cache->latency2[l] - delay)) * 1000.0 / (dbl)MHz; ++ if (!delay) z = (dbl)lng_round(CYperIt(cache->latency1[l] - delay)) * 1000.0 / (dbl)MHz; ++ else z = (dbl)lng_round(CYperIt(cache->latency2[l] - delay)) * 1000.0 / (dbl)MHz; + fprintf(fp, "set label %ld '(%1.3g) ' at %f,%f right\n", l + 1, z, xl, z); + fprintf(fp, "set arrow %ld from %f,%f to %f,%f nohead lt 0\n", l + 1, xl, z, xh, z); + } +@@ -986,16 +986,16 @@ void plotTLB(TLBinfo *TLB, lng **result, lng MHz, char *fn, FILE *fp, lng delay) + fprintf(fp, "%s'' %ld)\n", s, TLB->mincachelines); + fprintf(fp, "set y2tics"); + for (l = 0, s = " ("; l <= TLB->levels; l++, s = ", ") { +- if (!delay) fprintf(fp, "%s'(%ld)' %f", s, round(CYperIt(TLB->latency1[l] - delay)), NSperIt(TLB->latency1[l] - delay)); +- else fprintf(fp, "%s'(%ld)' %f", s, round(CYperIt(TLB->latency2[l] - delay)), NSperIt(TLB->latency2[l] - delay)); ++ if (!delay) fprintf(fp, "%s'(%ld)' %f", s, lng_round(CYperIt(TLB->latency1[l] - delay)), NSperIt(TLB->latency1[l] - delay)); ++ else fprintf(fp, "%s'(%ld)' %f", s, lng_round(CYperIt(TLB->latency2[l] - delay)), NSperIt(TLB->latency2[l] - delay)); + } + for (y = 1; y <= yh; y *= 10) { + fprintf(fp, "%s'%1.3g' %ld", s, (dbl)(y * MHz) / 1000.0, y); + } + fprintf(fp, ")\n"); + for (l = 0; l <= TLB->levels; l++) { +- if (!delay) z = (dbl)round(CYperIt(TLB->latency1[l] - delay)) * 1000.0 / (dbl)MHz; +- else z = (dbl)round(CYperIt(TLB->latency2[l] - delay)) * 1000.0 / (dbl)MHz; ++ if (!delay) z = (dbl)lng_round(CYperIt(TLB->latency1[l] - delay)) * 1000.0 / (dbl)MHz; ++ else z = (dbl)lng_round(CYperIt(TLB->latency2[l] - delay)) * 1000.0 / (dbl)MHz; + fprintf(fp, "set label %ld '(%1.3g) ' at %f,%f right\n", l + 1, z, xl, z); + fprintf(fp, "set arrow %ld from %f,%f to %f,%f nohead lt 0\n", l + 1, xl, z, xh, z); + } +@@ -1023,9 +1023,9 @@ void printCPU(cacheInfo *cache, lng MHz, lng delay) + FILE *fp = stdout; + + fprintf(fp, "CPU loop + L1 access: "); +- fprintf(fp, " %6.2f ns = %3ld cy\n", NSperIt(cache->latency1[0]), round(CYperIt(cache->latency1[0]))); ++ fprintf(fp, " %6.2f ns = %3ld cy\n", NSperIt(cache->latency1[0]), lng_round(CYperIt(cache->latency1[0]))); + fprintf(fp, " ( delay: "); +- fprintf(fp, " %6.2f ns = %3ld cy )\n", NSperIt(delay), round(CYperIt(delay))); ++ fprintf(fp, " %6.2f ns = %3ld cy )\n", NSperIt(delay), lng_round(CYperIt(delay))); + fprintf(fp, "\n"); + fflush(fp); + } +@@ -1047,8 +1047,8 @@ void printCache(cacheInfo *cache, lng MHz) + fprintf(fp, " %3ld KB ", cache->size[l] / 1024); + } + fprintf(fp, " %3ld bytes ", cache->linesize[l + 1]); +- fprintf(fp, " %6.2f ns = %3ld cy " , NSperIt(cache->latency2[l + 1] - cache->latency2[l]), round(CYperIt(cache->latency2[l + 1] - cache->latency2[l]))); +- fprintf(fp, " %6.2f ns = %3ld cy\n", NSperIt(cache->latency1[l + 1] - cache->latency1[l]), round(CYperIt(cache->latency1[l + 1] - cache->latency1[l]))); ++ fprintf(fp, " %6.2f ns = %3ld cy " , NSperIt(cache->latency2[l + 1] - cache->latency2[l]), lng_round(CYperIt(cache->latency2[l + 1] - cache->latency2[l]))); ++ fprintf(fp, " %6.2f ns = %3ld cy\n", NSperIt(cache->latency1[l + 1] - cache->latency1[l]), lng_round(CYperIt(cache->latency1[l + 1] - cache->latency1[l]))); + } + fprintf(fp, "\n"); + fflush(fp); +@@ -1075,9 +1075,9 @@ void printTLB(TLBinfo *TLB, lng MHz) + } else { + fprintf(fp, " %3ld KB ", TLB->pagesize[l + 1] / 1024); + } +- fprintf(fp, " %6.2f ns = %3ld cy ", NSperIt(TLB->latency2[l + 1] - TLB->latency2[l]), round(CYperIt(TLB->latency2[l + 1] - TLB->latency2[l]))); ++ fprintf(fp, " %6.2f ns = %3ld cy ", NSperIt(TLB->latency2[l + 1] - TLB->latency2[l]), lng_round(CYperIt(TLB->latency2[l + 1] - TLB->latency2[l]))); + /* +- fprintf(fp, " %6.2f ns = %3ld cy" , NSperIt(TLB->latency1[l + 1] - TLB->latency1[l]), round(CYperIt(TLB->latency1[l + 1] - TLB->latency1[l]))); ++ fprintf(fp, " %6.2f ns = %3ld cy" , NSperIt(TLB->latency1[l + 1] - TLB->latency1[l]), lng_round(CYperIt(TLB->latency1[l + 1] - TLB->latency1[l]))); + */ + fprintf(fp, "\n"); + } +-- +1.7.0.4 + diff --git a/package/cache-calibrator/Config.in b/package/cache-calibrator/Config.in new file mode 100644 index 00000000..db780e9f --- /dev/null +++ b/package/cache-calibrator/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_CACHE_CALIBRATOR + bool "cache-calibrator" + help + Cache calibrator is a small C program that is supposed to + analyze a computers (cache-) memory system and extract + useful information + + http://homepages.cwi.nl/~manegold/Calibrator/ + + It is also recommended as a load generator for realtime + testing in: + + https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO diff --git a/package/cache-calibrator/cache-calibrator.hash b/package/cache-calibrator/cache-calibrator.hash new file mode 100644 index 00000000..a4b4b70c --- /dev/null +++ b/package/cache-calibrator/cache-calibrator.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 2018ed8fa733155d44ceb1c0066c5cf8df7771cdf7cfca0a07b8dd9bebd9c221 calibrator.c +sha256 a853663f5b4fb3ad77bf2790ab53146f456b8d9b9ddf83b99fe28c0bdec42514 calibrator.c.license diff --git a/package/cache-calibrator/cache-calibrator.mk b/package/cache-calibrator/cache-calibrator.mk new file mode 100644 index 00000000..203732e4 --- /dev/null +++ b/package/cache-calibrator/cache-calibrator.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# cache-calibrator +# +################################################################################ + +CACHE_CALIBRATOR_SOURCE = calibrator.c +CACHE_CALIBRATOR_SITE = http://homepages.cwi.nl/~manegold/Calibrator/src +CACHE_CALIBRATOR_LICENSE = Cache calibrator license +CACHE_CALIBRATOR_LICENSE_FILES = calibrator.c.license + +define CACHE_CALIBRATOR_EXTRACT_CMDS + cp $(CACHE_CALIBRATOR_DL_DIR)/$(CACHE_CALIBRATOR_SOURCE) $(@D) +endef + +define CACHE_CALIBRATOR_EXTRACT_LICENSE + head -n 38 $(@D)/calibrator.c >$(@D)/calibrator.c.license +endef +CACHE_CALIBRATOR_PRE_PATCH_HOOKS += CACHE_CALIBRATOR_EXTRACT_LICENSE + +define CACHE_CALIBRATOR_BUILD_CMDS + $(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_LDFLAGS) $(@D)/calibrator.c -o $(@D)/cache_calibrator -lm +endef + +define CACHE_CALIBRATOR_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/cache_calibrator $(TARGET_DIR)/usr/bin/cache_calibrator +endef + +$(eval $(generic-package)) diff --git a/package/cage/Config.in b/package/cage/Config.in new file mode 100644 index 00000000..3bef08f0 --- /dev/null +++ b/package/cage/Config.in @@ -0,0 +1,22 @@ +comment "cage needs udev, mesa3d w/ EGL and GLES support" + depends on !BR2_PACKAGE_MESA3D_OPENGL_EGL || \ + !BR2_PACKAGE_MESA3D_OPENGL_ES || \ + !BR2_PACKAGE_HAS_UDEV + +comment "cage needs a toolchain w/ threads, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS + +config BR2_PACKAGE_CAGE + bool "cage" + depends on !BR2_STATIC_LIBS # wlroots + depends on BR2_TOOLCHAIN_HAS_THREADS # wlroots + depends on BR2_PACKAGE_HAS_UDEV # wlroots + depends on BR2_PACKAGE_MESA3D_OPENGL_EGL # wlroots + depends on BR2_PACKAGE_MESA3D_OPENGL_ES # wlroots + select BR2_PACKAGE_WLROOTS + help + Kiosk compositor for Wayland, which displays a single + maximized application at a time. + + https://www.hjdskes.nl/projects/cage/ diff --git a/package/cage/cage.hash b/package/cage/cage.hash new file mode 100644 index 00000000..5cae952d --- /dev/null +++ b/package/cage/cage.hash @@ -0,0 +1,5 @@ +# Generated locally +sha256 38a3e3968f00cc58fe1d9448e972cfac7d1efa30c48699f09032f264101a55ac cage-0.1.2.1.tar.gz + +# Hashes for license files: +sha256 e117104073335dbaf78596fb1bedf89dda63c71f60f0b665947b2d369c77ecee LICENSE diff --git a/package/cage/cage.mk b/package/cage/cage.mk new file mode 100644 index 00000000..9fc01d36 --- /dev/null +++ b/package/cage/cage.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# cage +# +################################################################################ + +CAGE_VERSION = 0.1.2.1 +CAGE_SITE = https://github.com/Hjdskes/cage/releases/download/v$(CAGE_VERSION) +CAGE_LICENSE = MIT +CAGE_LICENSE_FILES = LICENSE +CAGE_DEPENDENCIES = host-pkgconf wlroots + +ifeq ($(BR2_PACKAGE_XORG7),y) +CAGE_CONF_OPTS = -Dxwayland=true +else +CAGE_CONF_OPTS = -Dxwayland=false +endif + +$(eval $(meson-package)) diff --git a/package/cairo/0001-fix-nofork-build.patch b/package/cairo/0001-fix-nofork-build.patch new file mode 100644 index 00000000..702e9910 --- /dev/null +++ b/package/cairo/0001-fix-nofork-build.patch @@ -0,0 +1,29 @@ +test: fix build when SHOULD_FORK is false + +The code in test/cairo-test-runner.c properly takes into account +platforms that do have fork() support, and uses the SHOULD_FORK define +to know whether fork is available or not. + +However, this SHOULD_FORK macro is used to guard the inclusion of +, which is needed to get the prototype of other functions +(namely readlink and getppid), that are used in portions of this file +not guarded by SHOULD_FORK. + +Signed-off-by: Thomas Petazzoni + +Index: b/test/cairo-test-runner.c +=================================================================== +--- a/test/cairo-test-runner.c ++++ b/test/cairo-test-runner.c +@@ -36,10 +36,10 @@ + #include /* for version information */ + + #define SHOULD_FORK HAVE_FORK && HAVE_WAITPID +-#if SHOULD_FORK + #if HAVE_UNISTD_H + #include + #endif ++#if SHOULD_FORK + #if HAVE_SIGNAL_H + #include + #endif diff --git a/package/cairo/0002-ft-Use-FT_Done_MM_Var-instead-of-free-when-available-in-cairo_ft_apply_variation.patch b/package/cairo/0002-ft-Use-FT_Done_MM_Var-instead-of-free-when-available-in-cairo_ft_apply_variation.patch new file mode 100644 index 00000000..10e000d1 --- /dev/null +++ b/package/cairo/0002-ft-Use-FT_Done_MM_Var-instead-of-free-when-available-in-cairo_ft_apply_variation.patch @@ -0,0 +1,33 @@ +From 90e85c2493fdfa3551f202ff10282463f1e36645 Mon Sep 17 00:00:00 2001 +From: Carlos Garcia Campos +Date: Mon, 19 Nov 2018 12:33:07 +0100 +Subject: [PATCH] ft: Use FT_Done_MM_Var instead of free when available in + cairo_ft_apply_variations + +Fixes a crash when using freetype >= 2.9 +[Retrieved from: +https://gitlab.freedesktop.org/cairo/cairo/-/commit/90e85c2493fdfa3551f202ff10282463f1e36645] +Signed-off-by: Fabrice Fontaine +--- + src/cairo-ft-font.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/cairo-ft-font.c b/src/cairo-ft-font.c +index 325dd61b4..981973f78 100644 +--- a/src/cairo-ft-font.c ++++ b/src/cairo-ft-font.c +@@ -2393,7 +2393,11 @@ skip: + done: + free (coords); + free (current_coords); ++#if HAVE_FT_DONE_MM_VAR ++ FT_Done_MM_Var (face->glyph->library, ft_mm_var); ++#else + free (ft_mm_var); ++#endif + } + } + +-- +2.24.1 + diff --git a/package/cairo/Config.in b/package/cairo/Config.in new file mode 100644 index 00000000..0c87a290 --- /dev/null +++ b/package/cairo/Config.in @@ -0,0 +1,48 @@ +config BR2_PACKAGE_CAIRO + bool "cairo" + select BR2_PACKAGE_PIXMAN + select BR2_PACKAGE_FONTCONFIG + select BR2_PACKAGE_XLIB_LIBX11 if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBXEXT if BR2_PACKAGE_XORG7 + help + Cairo is a 2D graphics library with support for multiple + output devices. Currently supported output targets include + the X Window System, Win32, image buffers, and PostScript, + PDF, and SVG file output. Experimental backends include + OpenGL (through glitz), Quartz, and XCB. + + http://cairographics.org/ + +if BR2_PACKAGE_CAIRO + +config BR2_PACKAGE_CAIRO_PS + bool "postscript support" + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_CAIRO_PDF + +config BR2_PACKAGE_CAIRO_PDF + bool "pdf support" + select BR2_PACKAGE_ZLIB + +config BR2_PACKAGE_CAIRO_PNG + bool "png support" + select BR2_PACKAGE_LIBPNG + select BR2_PACKAGE_ZLIB + +config BR2_PACKAGE_CAIRO_SCRIPT + bool "script support" + select BR2_PACKAGE_CAIRO_PNG + +config BR2_PACKAGE_CAIRO_SVG + bool "svg support" + select BR2_PACKAGE_CAIRO_PNG + select BR2_PACKAGE_CAIRO_PDF + +config BR2_PACKAGE_CAIRO_TEE + bool "tee support" + +config BR2_PACKAGE_CAIRO_XML + bool "xml support" + select BR2_PACKAGE_CAIRO_PNG + +endif diff --git a/package/cairo/cairo.hash b/package/cairo/cairo.hash new file mode 100644 index 00000000..949ed3ff --- /dev/null +++ b/package/cairo/cairo.hash @@ -0,0 +1,9 @@ +# From https://www.cairographics.org/releases/cairo-1.16.0.tar.xz.sha1 +sha1 00e81842ae5e81bb0343108884eb5205be0eac14 cairo-1.16.0.tar.xz +# Calculated based on the hash above +sha256 5e7b29b3f113ef870d1e3ecf8adf21f923396401604bda16d44be45e66052331 cairo-1.16.0.tar.xz + +# Hash for license files: +sha256 67228a9f7c5f9b67c58f556f1be178f62da4d9e2e6285318d8c74d567255abdf COPYING +sha256 9e9e8608c4cdda51a78cc3a385f4ec9a2e4c96d5ecad74ac8bca5fca3e563b7d COPYING-LGPL-2.1 +sha256 53692a2ed6c6a2c6ec9b32dd0b820dfae91e0a1fcdf625ca9ed0bdf8705fcc4f COPYING-MPL-1.1 diff --git a/package/cairo/cairo.mk b/package/cairo/cairo.mk new file mode 100644 index 00000000..98f27044 --- /dev/null +++ b/package/cairo/cairo.mk @@ -0,0 +1,175 @@ +################################################################################ +# +# cairo +# +################################################################################ + +CAIRO_VERSION = 1.16.0 +CAIRO_SOURCE = cairo-$(CAIRO_VERSION).tar.xz +CAIRO_LICENSE = LGPL-2.1 or MPL-1.1 (library) +CAIRO_LICENSE_FILES = COPYING COPYING-LGPL-2.1 COPYING-MPL-1.1 +CAIRO_CPE_ID_VENDOR = cairographics +CAIRO_SITE = http://cairographics.org/releases +CAIRO_INSTALL_STAGING = YES + +# 0002-ft-Use-FT_Done_MM_Var-instead-of-free-when-available-in-cairo_ft_apply_variation.patch +CAIRO_IGNORE_CVES += CVE-2018-19876 + +# relocation truncated to fit: R_68K_GOT16O +ifeq ($(BR2_m68k_cf),y) +CAIRO_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) -mxgot" +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),) +CAIRO_CONF_ENV += CPPFLAGS="$(TARGET_CPPFLAGS) -DCAIRO_NO_MUTEX=1" +endif + +# cairo can use C++11 atomics when available, so we need to link with +# libatomic for the architectures who need libatomic. +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +CAIRO_CONF_ENV += LIBS="-latomic" +endif + +CAIRO_CONF_OPTS = \ + --enable-trace=no \ + --enable-interpreter=no + +CAIRO_DEPENDENCIES = host-pkgconf fontconfig pixman + +# Just the bare minimum to make other host-* packages happy +HOST_CAIRO_CONF_OPTS = \ + --enable-trace=no \ + --enable-interpreter=no \ + --disable-directfb \ + --enable-ft \ + --enable-gobject \ + --disable-glesv2 \ + --disable-vg \ + --disable-xlib \ + --disable-xcb \ + --without-x \ + --disable-xlib-xrender \ + --disable-ps \ + --disable-pdf \ + --enable-png \ + --enable-script \ + --disable-svg \ + --disable-tee \ + --disable-xml +HOST_CAIRO_DEPENDENCIES = \ + host-freetype \ + host-fontconfig \ + host-libglib2 \ + host-libpng \ + host-pixman \ + host-pkgconf + +# DirectFB svg support rely on Cairo and Cairo DirectFB support depends on +# DirectFB. Break circular dependency by disabling DirectFB support in Cairo +# (which is experimental) +ifeq ($(BR2_PACKAGE_DIRECTFB)x$(BR2_PACKAGE_DIRECTFB_SVG),yx) +CAIRO_CONF_OPTS += --enable-directfb +CAIRO_DEPENDENCIES += directfb +else +CAIRO_CONF_OPTS += --disable-directfb +endif + +ifeq ($(BR2_PACKAGE_FREETYPE),y) +CAIRO_CONF_OPTS += --enable-ft +CAIRO_DEPENDENCIES += freetype +else +CAIRO_CONF_OPTS += --disable-ft +endif + +ifeq ($(BR2_PACKAGE_LIBGLIB2),y) +CAIRO_CONF_OPTS += --enable-gobject +CAIRO_DEPENDENCIES += libglib2 +else +CAIRO_CONF_OPTS += --disable-gobject +endif + +# Can use GL or GLESv2 but not both +ifeq ($(BR2_PACKAGE_HAS_LIBGL),y) +CAIRO_CONF_OPTS += --enable-gl --disable-glesv2 +CAIRO_DEPENDENCIES += libgl +else +ifeq ($(BR2_PACKAGE_HAS_LIBGLES),y) +CAIRO_CONF_OPTS += --disable-gl --enable-glesv2 +CAIRO_DEPENDENCIES += libgles +else +CAIRO_CONF_OPTS += --disable-gl --disable-glesv2 +endif +endif + +ifeq ($(BR2_PACKAGE_HAS_LIBOPENVG),y) +CAIRO_CONF_OPTS += --enable-vg +CAIRO_DEPENDENCIES += libopenvg +else +CAIRO_CONF_OPTS += --disable-vg +endif + +ifeq ($(BR2_PACKAGE_LZO),y) +CAIRO_DEPENDENCIES += lzo +endif + +ifeq ($(BR2_PACKAGE_XORG7),y) +CAIRO_CONF_OPTS += --enable-xlib --enable-xcb --with-x +CAIRO_DEPENDENCIES += xlib_libX11 xlib_libXext +else +CAIRO_CONF_OPTS += --disable-xlib --disable-xcb --without-x +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXRENDER),y) +CAIRO_CONF_OPTS += --enable-xlib-xrender +CAIRO_DEPENDENCIES += xlib_libXrender +else +CAIRO_CONF_OPTS += --disable-xlib-xrender +endif + +ifeq ($(BR2_PACKAGE_CAIRO_PS),y) +CAIRO_CONF_OPTS += --enable-ps +CAIRO_DEPENDENCIES += zlib +else +CAIRO_CONF_OPTS += --disable-ps +endif + +ifeq ($(BR2_PACKAGE_CAIRO_PDF),y) +CAIRO_CONF_OPTS += --enable-pdf +CAIRO_DEPENDENCIES += zlib +else +CAIRO_CONF_OPTS += --disable-pdf +endif + +ifeq ($(BR2_PACKAGE_CAIRO_PNG),y) +CAIRO_CONF_OPTS += --enable-png +CAIRO_DEPENDENCIES += libpng +else +CAIRO_CONF_OPTS += --disable-png +endif + +ifeq ($(BR2_PACKAGE_CAIRO_SCRIPT),y) +CAIRO_CONF_OPTS += --enable-script +else +CAIRO_CONF_OPTS += --disable-script +endif + +ifeq ($(BR2_PACKAGE_CAIRO_SVG),y) +CAIRO_CONF_OPTS += --enable-svg +else +CAIRO_CONF_OPTS += --disable-svg +endif + +ifeq ($(BR2_PACKAGE_CAIRO_TEE),y) +CAIRO_CONF_OPTS += --enable-tee +else +CAIRO_CONF_OPTS += --disable-tee +endif + +ifeq ($(BR2_PACKAGE_CAIRO_XML),y) +CAIRO_CONF_OPTS += --enable-xml +else +CAIRO_CONF_OPTS += --disable-xml +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/cairomm/Config.in b/package/cairomm/Config.in new file mode 100644 index 00000000..840549b4 --- /dev/null +++ b/package/cairomm/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_CAIROMM + bool "cairomm" + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_USE_MMU # libglib2 + depends on BR2_INSTALL_LIBSTDCPP + select BR2_PACKAGE_CAIRO + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBSIGC + help + The cairomm package is a set of C++ bindings for Cairo. + + http://www.gtkmm.org/ + +comment "cairomm needs a toolchain w/ C++, wchar, threads, gcc >= 4.8" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 || !BR2_USE_WCHAR \ + || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP diff --git a/package/cairomm/cairomm.hash b/package/cairomm/cairomm.hash new file mode 100644 index 00000000..573104ec --- /dev/null +++ b/package/cairomm/cairomm.hash @@ -0,0 +1,4 @@ +# From http://ftp.gnome.org/pub/gnome/sources/cairomm/1.12/cairomm-1.12.0.sha256sum +sha256 a54ada8394a86182525c0762e6f50db6b9212a2109280d13ec6a0b29bfd1afe6 cairomm-1.12.0.tar.xz +# Locally computed +sha256 bfe4a52dc4645385f356a8e83cc54216a293e3b6f1cb4f79f5fc0277abf937fd COPYING diff --git a/package/cairomm/cairomm.mk b/package/cairomm/cairomm.mk new file mode 100644 index 00000000..07aae971 --- /dev/null +++ b/package/cairomm/cairomm.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# cairomm +# +################################################################################ + +CAIROMM_VERSION_MAJOR = 1.12 +CAIROMM_VERSION = $(CAIROMM_VERSION_MAJOR).0 +CAIROMM_LICENSE = LGPL-2.0+ +CAIROMM_LICENSE_FILES = COPYING +CAIROMM_SOURCE = cairomm-$(CAIROMM_VERSION).tar.xz +CAIROMM_SITE = http://ftp.gnome.org/pub/gnome/sources/cairomm/$(CAIROMM_VERSION_MAJOR) +CAIROMM_INSTALL_STAGING = YES +CAIROMM_DEPENDENCIES = cairo libglib2 libsigc host-pkgconf + +$(eval $(autotools-package)) diff --git a/package/can-utils/Config.in b/package/can-utils/Config.in new file mode 100644 index 00000000..bdc84b46 --- /dev/null +++ b/package/can-utils/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_CAN_UTILS + bool "can-utils" + depends on BR2_USE_MMU # fork() + help + SocketCAN is a set of open source CAN drivers and a + networking stack. + This package provides various tools for this stack. + + https://github.com/linux-can/can-utils diff --git a/package/can-utils/can-utils.hash b/package/can-utils/can-utils.hash new file mode 100644 index 00000000..d7d46245 --- /dev/null +++ b/package/can-utils/can-utils.hash @@ -0,0 +1,4 @@ +# Locally computed +sha256 b8e53081c076fca248c39ae9ae5791359a81f1eb3e5fe23ff6fb0d0e1f1033fa can-utils-2020.11.0.tar.gz +sha256 c3dc748f5e725cf5ed89784fe78e4ff1b05d309bf1e7ade4c572e8fde1b8406c LICENSES/BSD-3-Clause +sha256 995a31f60a9ddb4c609214cc7d17ca94cc3cbc7f37e1e64dba81e7f8ea9d4f91 LICENSES/GPL-2.0-only.txt diff --git a/package/can-utils/can-utils.mk b/package/can-utils/can-utils.mk new file mode 100644 index 00000000..2cd7777d --- /dev/null +++ b/package/can-utils/can-utils.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# can-utils +# +################################################################################ + +CAN_UTILS_VERSION = 2020.11.0 +CAN_UTILS_SITE = $(call github,linux-can,can-utils,v$(CAN_UTILS_VERSION)) +CAN_UTILS_LICENSE = BSD-3-Clause or GPL-2.0 +CAN_UTILS_LICENSE_FILES = LICENSES/BSD-3-Clause LICENSES/GPL-2.0-only.txt +CAN_UTILS_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/canfestival/0001-install-pkgconfig-module-for-canfestival.patch b/package/canfestival/0001-install-pkgconfig-module-for-canfestival.patch new file mode 100644 index 00000000..23f3d899 --- /dev/null +++ b/package/canfestival/0001-install-pkgconfig-module-for-canfestival.patch @@ -0,0 +1,74 @@ +From s.martin49@gmail.com Sun Sep 28 14:59:53 2014 +Content-Type: text/plain; charset="us-ascii" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [PATCH] Install pkgconfig module for canfestival +X-Mercurial-Node: c408fdc77aa18fcda81db4f0d038e8a69ba84bb2 +X-Mercurial-Series-Index: 1 +X-Mercurial-Series-Total: 1 +Message-Id: +X-Mercurial-Series-Id: +User-Agent: Mercurial-patchbomb/3.1.1 +Date: Sun, 28 Sep 2014 14:59:53 +0200 +From: Samuel Martin +To: canfestival-devel@lists.sourceforge.net +Cc: Samuel Martin + +# HG changeset patch +# User "Samuel Martin" +# Date 1411906817 -7200 +# Sun Sep 28 14:20:17 2014 +0200 +# Node ID c408fdc77aa18fcda81db4f0d038e8a69ba84bb2 +# Parent 7740ac6fdedc23e1ed6908d3d7db54833c88572b +Install pkgconfig module for canfestival. + +Signed-off-by: Samuel Martin +Cc: Cluadio Laurita + +diff -r 7740ac6fdedc -r c408fdc77aa1 canfestival.pc.in +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ b/canfestival.pc.in Sun Sep 28 14:20:17 2014 +0200 +@@ -0,0 +1,12 @@ ++PREFIX = SUB_PREFIX ++TARGET = SUB_TARGET ++ ++prefix=${PREFIX} ++libdir=${prefix}/lib ++includedir=${prefix}/include/canfestival ++ ++Name: Canfestival ++Description: Canfestival CANOpen library ++Version: 1 ++Libs: -L${libdir} -lcanfestival -lcanfestival_${TARGET} -lrt -ldl -lpthread ++Cflags: -I${includedir} +diff -r 7740ac6fdedc -r c408fdc77aa1 configure +--- a/configure Thu Jun 12 14:07:16 2014 +0200 ++++ b/configure Sun Sep 28 14:20:17 2014 +0200 +@@ -813,6 +813,10 @@ + MAKEFILES=$MAKEFILES\ drivers/$SUB_TARGET/Makefile.in + fi + ++if [ "$SUB_TARGET" = "unix" ]; then ++ MAKEFILES=$MAKEFILES\ canfestival.pc.in ++fi ++ + if [ "$SUB_TARGET" = "unix" -a "$SUB_TIMERS_DRIVER" = "kernel" ]; then + MAKEFILES=$MAKEFILES\ + \ examples/kerneltest/Makefile.in\ +diff -r 7740ac6fdedc -r c408fdc77aa1 src/Makefile.in +--- a/src/Makefile.in Thu Jun 12 14:07:16 2014 +0200 ++++ b/src/Makefile.in Sun Sep 28 14:20:17 2014 +0200 +@@ -132,9 +132,10 @@ + $(CC) $(CFLAGS) $(PROG_CFLAGS) ${PROGDEFINES} $(INCLUDES) -o $@ -c $< + + install: libcanfestival.a +- mkdir -p $(DESTDIR)$(PREFIX)/lib/ ++ mkdir -p $(DESTDIR)$(PREFIX)/lib/pkgconfig + mkdir -p $(DESTDIR)$(PREFIX)/include/canfestival + cp libcanfestival.a $(DESTDIR)$(PREFIX)/lib/ ++ cp ../canfestival.pc $(DESTDIR)$(PREFIX)/lib/pkgconfig/ + cp ../include/*.h $(DESTDIR)$(PREFIX)/include/canfestival + + uninstall: + + diff --git a/package/canfestival/0002-allow-to-set-python-interpreter.patch b/package/canfestival/0002-allow-to-set-python-interpreter.patch new file mode 100644 index 00000000..bb603165 --- /dev/null +++ b/package/canfestival/0002-allow-to-set-python-interpreter.patch @@ -0,0 +1,176 @@ +From s.martin49@gmail.com Fri Oct 10 23:43:32 2014 +Content-Type: text/plain; charset="us-ascii" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [PATCH] allow to set python interpreter +X-Mercurial-Node: 4805f636c2317d989a5f704ba691369f41be6595 +X-Mercurial-Series-Index: 1 +X-Mercurial-Series-Total: 1 +Message-Id: <4805f636c2317d989a5f.1412977412@bobook> +X-Mercurial-Series-Id: <4805f636c2317d989a5f.1412977412@bobook> +User-Agent: Mercurial-patchbomb/3.1.2 +Date: Fri, 10 Oct 2014 23:43:32 +0200 +From: Samuel Martin +To: canfestival-devel@lists.sourceforge.net +Cc: Samuel Martin + +# HG changeset patch +# User "Samuel Martin" +# Date 1412977082 -7200 +# Fri Oct 10 23:38:02 2014 +0200 +# Node ID 4805f636c2317d989a5f704ba691369f41be6595 +# Parent c408fdc77aa18fcda81db4f0d038e8a69ba84bb2 +allow to set python interpreter + +Canfestival python modules and scripts are not python3 compliant. + +Allow to pass the python interperter to be used to make. + +Signed-off-by: Samuel Martin + +diff --git a/Makefile.in b/Makefile.in +--- a/Makefile.in ++++ b/Makefile.in +@@ -21,6 +21,9 @@ + # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + # + ++PYTHON ?= python ++export PYTHON ++ + all: objdictedit canfestival examples + + examples: canfestival driver +diff --git a/doc/manual/en/manual.tex b/doc/manual/en/manual.tex +--- a/doc/manual/en/manual.tex ++++ b/doc/manual/en/manual.tex +@@ -1134,6 +1134,7 @@ + python objdictedit.py [od files...] + \end{verbatim} + ++Note that Gnosis modules only run with python2 as interpreter. + + \subsubsection{Installation and usage on Windows} + +diff --git a/examples/CANOpenShell/Makefile.in b/examples/CANOpenShell/Makefile.in +--- a/examples/CANOpenShell/Makefile.in ++++ b/examples/CANOpenShell/Makefile.in +@@ -69,11 +69,11 @@ + + CANOpenShellMasterOD.c: CANOpenShellMasterOD.od + $(MAKE) -C ../../objdictgen gnosis +- python ../../objdictgen/objdictgen.py CANOpenShellMasterOD.od CANOpenShellMasterOD.c ++ $(PYTHON) ../../objdictgen/objdictgen.py CANOpenShellMasterOD.od CANOpenShellMasterOD.c + + CANOpenShellSlaveOD.c: CANOpenShellSlaveOD.od + $(MAKE) -C ../../objdictgen gnosis +- python ../../objdictgen/objdictgen.py CANOpenShellSlaveOD.od CANOpenShellSlaveOD.c ++ $(PYTHON) ../../objdictgen/objdictgen.py CANOpenShellSlaveOD.od CANOpenShellSlaveOD.c + + %.o: %.c + $(CC) $(CFLAGS) $(PROG_CFLAGS) ${PROGDEFINES} $(INCLUDES) -o $@ -c $< +diff --git a/examples/DS401_Master/Makefile.in b/examples/DS401_Master/Makefile.in +--- a/examples/DS401_Master/Makefile.in ++++ b/examples/DS401_Master/Makefile.in +@@ -53,7 +53,7 @@ + + TestMaster.c: TestMaster.od + $(MAKE) -C ../../objdictgen gnosis +- python ../../objdictgen/objdictgen.py TestMaster.od TestMaster.c ++ $(PYTHON) ../../objdictgen/objdictgen.py TestMaster.od TestMaster.c + + %.o: %.c + $(CC) $(CFLAGS) $(PROG_CFLAGS) ${PROGDEFINES} $(INCLUDES) -o $@ -c $< +diff --git a/examples/DS401_Slave_Gui/Makefile.in b/examples/DS401_Slave_Gui/Makefile.in +--- a/examples/DS401_Slave_Gui/Makefile.in ++++ b/examples/DS401_Slave_Gui/Makefile.in +@@ -59,7 +59,7 @@ + + ObjDict.c: ObjDict.od + $(MAKE) -C ../../objdictgen gnosis +- python ../../objdictgen/objdictgen.py ObjDict.od ObjDict.c ++ $(PYTHON) ../../objdictgen/objdictgen.py ObjDict.od ObjDict.c + + .cpp.o: + $(CXX) -c $(CFLAGS) $(PROG_CFLAGS) ${PROGDEFINES} $(INCLUDES) `wx-config --cxxflags` $< -o $@ +diff --git a/examples/SillySlave/Makefile.in b/examples/SillySlave/Makefile.in +--- a/examples/SillySlave/Makefile.in ++++ b/examples/SillySlave/Makefile.in +@@ -53,7 +53,7 @@ + + SillySlave.c: SillySlave.od + $(MAKE) -C ../../objdictgen gnosis +- python ../../objdictgen/objdictgen.py SillySlave.od SillySlave.c ++ $(PYTHON) ../../objdictgen/objdictgen.py SillySlave.od SillySlave.c + + %.o: %.c + $(CC) $(CFLAGS) $(PROG_CFLAGS) ${PROGDEFINES} $(INCLUDES) -o $@ -c $< +diff --git a/examples/TestMasterMicroMod/Makefile.in b/examples/TestMasterMicroMod/Makefile.in +--- a/examples/TestMasterMicroMod/Makefile.in ++++ b/examples/TestMasterMicroMod/Makefile.in +@@ -61,7 +61,7 @@ + + TestMaster.c: TestMaster.od + $(MAKE) -C ../../objdictgen gnosis +- python ../../objdictgen/objdictgen.py TestMaster.od TestMaster.c ++ $(PYTHON) ../../objdictgen/objdictgen.py TestMaster.od TestMaster.c + + %.o: %.c + $(CC) $(CFLAGS) $(PROG_CFLAGS) ${PROGDEFINES} $(INCLUDES) -o $@ -c $< +diff --git a/examples/TestMasterSlave/Makefile.in b/examples/TestMasterSlave/Makefile.in +--- a/examples/TestMasterSlave/Makefile.in ++++ b/examples/TestMasterSlave/Makefile.in +@@ -69,11 +69,11 @@ + + TestSlave.c: TestSlave.od + $(MAKE) -C ../../objdictgen gnosis +- python ../../objdictgen/objdictgen.py TestSlave.od TestSlave.c ++ $(PYTHON) ../../objdictgen/objdictgen.py TestSlave.od TestSlave.c + + TestMaster.c: TestMaster.od + $(MAKE) -C ../../objdictgen gnosis +- python ../../objdictgen/objdictgen.py TestMaster.od TestMaster.c ++ $(PYTHON) ../../objdictgen/objdictgen.py TestMaster.od TestMaster.c + + %.o: %.c + $(CC) $(CFLAGS) $(PROG_CFLAGS) ${PROGDEFINES} $(INCLUDES) -o $@ -c $< +diff --git a/examples/TestMasterSlaveLSS/Makefile.in b/examples/TestMasterSlaveLSS/Makefile.in +--- a/examples/TestMasterSlaveLSS/Makefile.in ++++ b/examples/TestMasterSlaveLSS/Makefile.in +@@ -64,15 +64,15 @@ + + TestSlaveA.c: TestSlaveA.od + $(MAKE) -C ../../objdictgen gnosis +- python ../../objdictgen/objdictgen.py TestSlaveA.od TestSlaveA.c ++ $(PYTHON) ../../objdictgen/objdictgen.py TestSlaveA.od TestSlaveA.c + + TestSlaveB.c: TestSlaveB.od + $(MAKE) -C ../../objdictgen gnosis +- python ../../objdictgen/objdictgen.py TestSlaveB.od TestSlaveB.c ++ $(PYTHON) ../../objdictgen/objdictgen.py TestSlaveB.od TestSlaveB.c + + TestMaster.c: TestMaster.od + $(MAKE) -C ../../objdictgen gnosis +- python ../../objdictgen/objdictgen.py TestMaster.od TestMaster.c ++ $(PYTHON) ../../objdictgen/objdictgen.py TestMaster.od TestMaster.c + + %.o: %.c + $(CC) $(CFLAGS) $(PROG_CFLAGS) ${PROGDEFINES} $(INCLUDES) -o $@ -c $< +diff --git a/examples/kerneltest/Makefile.in b/examples/kerneltest/Makefile.in +--- a/examples/kerneltest/Makefile.in ++++ b/examples/kerneltest/Makefile.in +@@ -79,10 +79,10 @@ + + TestSlave.c: TestSlave.od + $(MAKE) -C ../../objdictgen gnosis +- python ../../objdictgen/objdictgen.py TestSlave.od TestSlave.c ++ $(PYTHON) ../../objdictgen/objdictgen.py TestSlave.od TestSlave.c + + TestMaster.c: TestMaster.od + $(MAKE) -C ../../objdictgen gnosis +- python ../../objdictgen/objdictgen.py TestMaster.od TestMaster.c ++ $(PYTHON) ../../objdictgen/objdictgen.py TestMaster.od TestMaster.c + + #endif + + diff --git a/package/canfestival/Config.in b/package/canfestival/Config.in new file mode 100644 index 00000000..8300e265 --- /dev/null +++ b/package/canfestival/Config.in @@ -0,0 +1,90 @@ +config BR2_PACKAGE_CANFESTIVAL_ARCH_SUPPORTS + bool + default y if BR2_i386 || BR2_x86_64 || BR2_powerpc || BR2_arm + +comment "canfestival needs a glibc or uClibc toolchain w/ threads and dynamic library" + depends on BR2_PACKAGE_CANFESTIVAL_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_USES_MUSL || \ + !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS + +config BR2_PACKAGE_CANFESTIVAL + bool "canfestival" + depends on BR2_PACKAGE_CANFESTIVAL_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_USES_MUSL # sigval_t + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + help + CanFestival is an OpenSource CANOpen framework, licensed under + LGPLv2.1 and GPLv2 for some drivers (virtual_kernel, lincan + and copcican_comedi). + + http://www.canfestival.org + +if BR2_PACKAGE_CANFESTIVAL + +choice + prompt "driver" + default BR2_PACKAGE_CANFESTIVAL_SOCKET + +# - The AnaGate CAN(duo) [1], PeakSystem CAN [2] and CO-PCICAN [3] +# drivers are not available (not packaged in Buildroot), so their +# support are disabled. +# - The virtual_kernel driver is disabled because it uses very old +# kernel APIs, that have been renamed, or marked as deprecated or +# removed for a long while. The question has been raised on the +# canfestival mailing list [4]. +# +# [1] http://www.anagate.de/en/index.html +# [2] http://www.peak-system.com/linux/ +# [3] http://www.cosateq.com/ +# [4] http://sourceforge.net/p/canfestival/mailman/message/32519648/ + +config BR2_PACKAGE_CANFESTIVAL_VIRTUAL + bool "virtual" + help + Unix pipe based virtual CAN driver. + +config BR2_PACKAGE_CANFESTIVAL_SOCKET + bool "socket" + help + SocketCAN (the standard mainline CAN bus interface). + + http://developer.berlios.de/projects/socketcan/ + +config BR2_PACKAGE_CANFESTIVAL_LINCAN + bool "lincan" + help + Lincan driver. + + http://www.ocera.org/download/components/WP7/lincan-0.3.3.html + +config BR2_PACKAGE_CANFESTIVAL_CAN4LINUX + bool "can4linux" + help + Can4linux driver. + + http://www.port.de/engl/canprod/hw_can4linux.html + +endchoice + +config BR2_PACKAGE_CANFESTIVAL_DRIVER + string + default "virtual" if BR2_PACKAGE_CANFESTIVAL_VIRTUAL + default "socket" if BR2_PACKAGE_CANFESTIVAL_SOCKET + default "lincan" if BR2_PACKAGE_CANFESTIVAL_LINCAN + default "can4linux" if BR2_PACKAGE_CANFESTIVAL_CAN4LINUX + +config BR2_PACKAGE_CANFESTIVAL_ADDITIONAL_OPTIONS + string "additional configure options" + help + Additional options can be passed directly to the configure + script (e.g.: --MAX_CAN_BUS_ID=..., + --SDO_MAX_LENGTH_TRANSFER=..., --SDO_BLOCK_SIZE=...). + +config BR2_PACKAGE_CANFESTIVAL_INSTALL_EXAMPLES + bool "install examples" + help + Install binary application examples. + +endif diff --git a/package/canfestival/canfestival.hash b/package/canfestival/canfestival.hash new file mode 100644 index 00000000..dc32bd9a --- /dev/null +++ b/package/canfestival/canfestival.hash @@ -0,0 +1,3 @@ +# License files, locally calculated +sha256 b5c45f160093a6c2fb7bd0078f50c62f4b4089b6206b0e90b0f122b40a2fe110 COPYING +sha256 d4594b82f4d50840df6a7e9d14132a8c0a3cc05d0ac46d15310a264a1f75447e LICENCE diff --git a/package/canfestival/canfestival.mk b/package/canfestival/canfestival.mk new file mode 100644 index 00000000..760f14ae --- /dev/null +++ b/package/canfestival/canfestival.mk @@ -0,0 +1,59 @@ +################################################################################ +# +# canfestival +# +################################################################################ + +CANFESTIVAL_VERSION = 7740ac6fdedc23e1ed6908d3d7db54833c88572b +CANFESTIVAL_SITE = http://dev.automforge.net/CanFestival-3 +CANFESTIVAL_SITE_METHOD = hg +CANFESTIVAL_LICENSE = LGPL-2.1+ +CANFESTIVAL_LICENSE_FILES = COPYING LICENCE +CANFESTIVAL_INSTALL_STAGING = YES +CANFESTIVAL_INSTALLED-y = src drivers +CANFESTIVAL_INSTALLED-$(BR2_PACKAGE_CANFESTIVAL_INSTALL_EXAMPLES) += examples + +# Canfestival provides and used some python modules and scripts only compliant +# with python2. +CANFESTIVAL_DEPENDENCIES = host-python + +# canfestival uses its own hand-written build-system. Though there is +# a configure script, it does not use the autotools, so, we use the +# generic-package infrastructure. +define CANFESTIVAL_CONFIGURE_CMDS + cd $(@D) && \ + $(TARGET_CONFIGURE_OPTS) ./configure \ + --target=unix \ + --arch=$(BR2_ARCH) \ + --timers=unix \ + --binutils=$(TARGET_CROSS) \ + --cc="$(TARGET_CC)" \ + --cxx="$(TARGET_CC)" \ + --ld="$(TARGET_CC)" \ + --prefix=/usr \ + --can=$(BR2_PACKAGE_CANFESTIVAL_DRIVER) \ + $(call qstrip,$(BR2_PACKAGE_CANFESTIVAL_ADDITIONAL_OPTIONS)) +endef + +define CANFESTIVAL_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) -C $(@D) all \ + PYTHON=$(HOST_DIR)/bin/python2 +endef + +define CANFESTIVAL_INSTALL_TARGET_CMDS + for d in $(CANFESTIVAL_INSTALLED-y) ; do \ + $(TARGET_MAKE_ENV) $(MAKE1) -C $(@D)/$$d install \ + PYTHON=$(HOST_DIR)/bin/python2 \ + DESTDIR=$(TARGET_DIR) || exit 1 ; \ + done +endef + +define CANFESTIVAL_INSTALL_STAGING_CMDS + for d in $(CANFESTIVAL_INSTALLED-y) ; do \ + $(TARGET_MAKE_ENV) $(MAKE1) -C $(@D)/$$d install \ + PYTHON=$(HOST_DIR)/bin/python2 \ + DESTDIR=$(STAGING_DIR) || exit 1 ; \ + done +endef + +$(eval $(generic-package)) diff --git a/package/cannelloni/Config.in b/package/cannelloni/Config.in new file mode 100644 index 00000000..e137e60c --- /dev/null +++ b/package/cannelloni/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_CANNELLONI + bool "cannelloni" + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11 + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_MMU # lksctp-tools + depends on BR2_TOOLCHAIN_HAS_THREADS # lksctp-tools + depends on !BR2_STATIC_LIBS # lksctp-tools + help + A SocketCAN over Ethernet tunnel. The tunnel supports both + UDP and SCTP protocols. + + https://github.com/mguentner/cannelloni + +comment "cannelloni needs a toolchain w/ C++, threads, dynamic library, gcc >= 4.8" + depends on !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 || !BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU diff --git a/package/cannelloni/cannelloni.hash b/package/cannelloni/cannelloni.hash new file mode 100644 index 00000000..107415b0 --- /dev/null +++ b/package/cannelloni/cannelloni.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 de44b7e327fbf38883f46e51a5afd07de5144f2e44c5f42b7f2f0741165f0b13 cannelloni-1.0.0.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 gpl-2.0.txt diff --git a/package/cannelloni/cannelloni.mk b/package/cannelloni/cannelloni.mk new file mode 100644 index 00000000..f97a0917 --- /dev/null +++ b/package/cannelloni/cannelloni.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# cannelloni +# +################################################################################ + +CANNELLONI_VERSION = 1.0.0 +CANNELLONI_SITE = $(call github,mguentner,cannelloni,v$(CANNELLONI_VERSION)) +CANNELLONI_LICENSE = GPL-2.0 +CANNELLONI_LICENSE_FILES = gpl-2.0.txt +CANNELLONI_CONF_OPTS = -DCMAKE_CXX_FLAGS="-std=c++11" + +ifeq ($(BR2_PACKAGE_LKSCTP_TOOLS),y) +CANNELLONI_CONF_OPTS += -DSCTP_SUPPORT=ON +CANNELLONI_DEPENDENCIES += lksctp-tools +else +CANNELLONI_CONF_OPTS += -DSCTP_SUPPORT=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/cantarell/Config.in b/package/cantarell/Config.in new file mode 100644 index 00000000..78af96d5 --- /dev/null +++ b/package/cantarell/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_CANTARELL + bool "cantarell" + help + The Cantarell font family is a contemporary Humanist + sans serif designed for on-screen reading. + + https://wiki.gnome.org/Projects/CantarellFonts diff --git a/package/cantarell/cantarell.hash b/package/cantarell/cantarell.hash new file mode 100644 index 00000000..49b46340 --- /dev/null +++ b/package/cantarell/cantarell.hash @@ -0,0 +1,4 @@ +# From http://ftp.acc.umu.se/pub/gnome/sources/cantarell-fonts/0.0/cantarell-fonts-0.0.25.sha256sum +sha256 14a228aa0b516dfc367b434a850f955a00c57fc549cbb05348e2b150196a737f cantarell-fonts-0.0.25.tar.xz +# locally computed +sha256 79a9d6198c0d9192c1b0bf55bcbc404a39390bd0d8c650cf20d652c2eaa284d8 COPYING diff --git a/package/cantarell/cantarell.mk b/package/cantarell/cantarell.mk new file mode 100644 index 00000000..2769b35c --- /dev/null +++ b/package/cantarell/cantarell.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# cantarell +# +################################################################################ + +CANTARELL_VERSION_MAJOR = 0.0 +CANTARELL_VERSION = $(CANTARELL_VERSION_MAJOR).25 +CANTARELL_SITE = http://ftp.gnome.org/pub/gnome/sources/cantarell-fonts/$(CANTARELL_VERSION_MAJOR) +CANTARELL_SOURCE = cantarell-fonts-$(CANTARELL_VERSION).tar.xz +CANTARELL_DEPENDENCIES = host-pkgconf +CANTARELL_LICENSE = OFL-1.1 +CANTARELL_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/capnproto/0001-mutex-Fix-build-on-32-bit-architectures-using-64-bit-time_t.patch b/package/capnproto/0001-mutex-Fix-build-on-32-bit-architectures-using-64-bit-time_t.patch new file mode 100644 index 00000000..ce70ab8f --- /dev/null +++ b/package/capnproto/0001-mutex-Fix-build-on-32-bit-architectures-using-64-bit-time_t.patch @@ -0,0 +1,37 @@ +From e2a05a19e9dc51287e19cc9f11fd91449219e361 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sun, 15 Nov 2020 12:10:28 -0800 +Subject: [PATCH] mutex: Fix build on 32-bit architectures using 64-bit time_t + +mutex code uses SYS_futex, which it expects from system C library. +in glibc (/usr/include/bits/syscall.h defines it in terms of of NR_futex) +rv32 is using 64bit time_t from get go unlike other 32bit architectures +in glibc, therefore it wont have NR_futex defined but just NR_futex_time64 +this aliases it to NR_futex so that SYS_futex is then defined for rv32 + +Signed-off-by: Khem Raj +[Retrieved from: +https://github.com/capnproto/capnproto/commit/e2a05a19e9dc51287e19cc9f11fd91449219e361] +Signed-off-by: Fabrice Fontaine +--- + c++/src/kj/mutex.c++ | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/c++/src/kj/mutex.c++ b/c++/src/kj/mutex.c++ +index c81cead7b..e1594b117 100644 +--- a/c++/src/kj/mutex.c++ ++++ b/c++/src/kj/mutex.c++ +@@ -39,7 +39,13 @@ + + #ifndef SYS_futex + // Missing on Android/Bionic. ++#ifdef __NR_futex + #define SYS_futex __NR_futex ++#elif defined(SYS_futex_time64) ++#define SYS_futex SYS_futex_time64 ++#else ++#error "Need working SYS_futex" ++#endif + #endif + + #ifndef FUTEX_WAIT_PRIVATE diff --git a/package/capnproto/Config.in b/package/capnproto/Config.in new file mode 100644 index 00000000..943ba9de --- /dev/null +++ b/package/capnproto/Config.in @@ -0,0 +1,28 @@ +config BR2_PACKAGE_CAPNPROTO + bool "capnproto" + depends on BR2_USE_MMU + depends on BR2_HOST_GCC_AT_LEAST_5 # C++14 + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5 # C++14 + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_HAS_ATOMIC + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 + depends on BR2_TOOLCHAIN_HAS_UCONTEXT + help + Cap'n Proto is an insanely fast data interchange format + and capability-based RPC system. Think JSON, except + binary. Or think Protocol Buffers, except faster. In + fact, in benchmarks, Cap'n Proto is INFINITY TIMES + faster than Protocol Buffers. + + https://capnproto.org/index.html + +comment "capnproto needs host and target gcc >= 5 w/ C++14, threads, atomic, ucontext and not gcc bug 64735" + depends on BR2_USE_MMU + depends on !BR2_HOST_GCC_AT_LEAST_5 || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_5 || \ + !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_HAS_ATOMIC || \ + BR2_TOOLCHAIN_HAS_GCC_BUG_64735 || \ + !BR2_TOOLCHAIN_HAS_UCONTEXT diff --git a/package/capnproto/capnproto.hash b/package/capnproto/capnproto.hash new file mode 100644 index 00000000..d4500e0a --- /dev/null +++ b/package/capnproto/capnproto.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 6d8b43a7ec2a764b4dfe4139a7cdd070ad9057f106898050d9f4db3754b98820 capnproto-0.8.0.tar.gz +sha256 9564998c8d7f270a61a8b89869a8d17a9d5e3783b64027788b5e339ec8479e10 LICENSE diff --git a/package/capnproto/capnproto.mk b/package/capnproto/capnproto.mk new file mode 100644 index 00000000..901b57ec --- /dev/null +++ b/package/capnproto/capnproto.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# capnproto +# +################################################################################ + +CAPNPROTO_VERSION = 0.8.0 +CAPNPROTO_SITE = $(call github,capnproto,capnproto,v$(CAPNPROTO_VERSION)) +CAPNPROTO_LICENSE = MIT +CAPNPROTO_LICENSE_FILES = LICENSE +CAPNPROTO_CPE_ID_VENDOR = capnproto +CAPNPROTO_INSTALL_STAGING = YES +# Fetched from Github with no configure script +CAPNPROTO_AUTORECONF = YES +CAPNPROTO_CONF_OPTS = --with-external-capnp +# Needs the capnproto compiler on the host to generate C++ code from message +# definitions +CAPNPROTO_DEPENDENCIES = host-autoconf host-capnproto +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +CAPNPROTO_CONF_ENV += LIBS=-latomic +endif +# The actual source to be compiled is within a 'c++' subdirectory +CAPNPROTO_SUBDIR = c++ + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +CAPNPROTO_CONF_OPTS += --with-openssl +CAPNPROTO_DEPENDENCIES += openssl +else +CAPNPROTO_CONF_OPTS += --without-openssl +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/caps/0001-Fix-stdint-types-with-musl.patch b/package/caps/0001-Fix-stdint-types-with-musl.patch new file mode 100644 index 00000000..23002c07 --- /dev/null +++ b/package/caps/0001-Fix-stdint-types-with-musl.patch @@ -0,0 +1,54 @@ +From 626e60a82120961ccee117dfcb5c28f72f8a26e5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=B6rg=20Krause?= +Date: Wed, 28 Aug 2019 11:25:49 +0200 +Subject: [PATCH] Fix stdint types with musl +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Fetched from: +https://github.com/dsacre/meta-lad/blob/master/recipes-multimedia/lv2/caps-lv2/fix-stdint-types-with-musl.patch + +Signed-off-by: Jörg Krause +--- + basics.h | 17 +++++++++-------- + 1 file changed, 9 insertions(+), 8 deletions(-) + +diff --git a/basics.h b/basics.h +index 643d96e..34e5f63 100644 +--- a/basics.h ++++ b/basics.h +@@ -39,6 +39,7 @@ + #define _ISOC9X_SOURCE 1 + + #include ++#include + #include + + #include +@@ -49,14 +50,14 @@ + + #include "ladspa.h" + +-typedef __int8_t int8; +-typedef __uint8_t uint8; +-typedef __int16_t int16; +-typedef __uint16_t uint16; +-typedef __int32_t int32; +-typedef __uint32_t uint32; +-typedef __int64_t int64; +-typedef __uint64_t uint64; ++typedef int8_t int8; ++typedef uint8_t uint8; ++typedef int16_t int16; ++typedef uint16_t uint16; ++typedef int32_t int32; ++typedef uint32_t uint32; ++typedef int64_t int64; ++typedef uint64_t uint64; + + #define MIN_GAIN 1e-6 /* -120 dB */ + /* smallest non-denormal 32 bit IEEE float is 1.18e-38 */ +-- +2.22.0 + diff --git a/package/caps/Config.in b/package/caps/Config.in new file mode 100644 index 00000000..f48e176d --- /dev/null +++ b/package/caps/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_CAPS + bool "caps" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS + help + CAPS is a collection of audio plugins comprising virtual + guitar amplification and a small range of basic classic + effects, signal processors and generators of often + elementary and occasionally exotic nature. + + The plugins aim to satisfy the highest demands in sound + quality with maximal computational efficiency and zero + latency. + + http://quitte.de/dsp/caps.html + +comment "caps needs a toolchain w/ C++, dynamic library" + depends on !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS diff --git a/package/caps/caps.hash b/package/caps/caps.hash new file mode 100644 index 00000000..958f4b68 --- /dev/null +++ b/package/caps/caps.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 e7496c5bce05abebe3dcb635926153bbb58a9337a6e423f048d3b61d8a4f98c9 caps_0.9.26.tar.bz2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/caps/caps.mk b/package/caps/caps.mk new file mode 100644 index 00000000..e307a689 --- /dev/null +++ b/package/caps/caps.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# caps +# +################################################################################ + +CAPS_VERSION = 0.9.26 +CAPS_SOURCE = caps_$(CAPS_VERSION).tar.bz2 +CAPS_SITE = http://quitte.de/dsp +CAPS_LICENSE = GPL-3.0+ +CAPS_LICENSE_FILES = COPYING + +# Need to pass TARGET_CONFIGURE_OPTS in the environment to not +# override the LDFLAGS definition of the Makefile. +CAPS_MAKE_ENV = \ + $(TARGET_MAKE_ENV) \ + $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(TARGET_CXXFLAGS)" + +# caps Makefile uses CC and CFLAGS, but for C++ +CAPS_MAKE_OPTS = \ + CC="$(TARGET_CXX)" \ + STRIP=/bin/true + +define CAPS_BUILD_CMDS + $(CAPS_MAKE_ENV) $(MAKE) $(CAPS_MAKE_OPTS) all -C $(@D) +endef + +define CAPS_INSTALL_TARGET_CMDS + $(CAPS_MAKE_ENV) $(MAKE) $(CAPS_MAKE_OPTS) \ + DESTDIR=$(TARGET_DIR) install -C $(@D) +endef + +$(eval $(generic-package)) diff --git a/package/casync/0001-castore-fix-build-without-lzma-or-xz.patch b/package/casync/0001-castore-fix-build-without-lzma-or-xz.patch new file mode 100644 index 00000000..a528b124 --- /dev/null +++ b/package/casync/0001-castore-fix-build-without-lzma-or-xz.patch @@ -0,0 +1,35 @@ +From 06b667de02df34e3efa1864b4031853bd4ee010d Mon Sep 17 00:00:00 2001 +From: Yair Ben-Avraham +Date: Sun, 10 Jan 2021 06:34:58 +0100 +Subject: [PATCH] castore: fix build without lzma or xz + +castore.c unconditioanlly includes lzma.h, but lzma support if optional. +Furthermore, castore.c does not need anything from lzma.h. + +Drop the include altogether. + +Signed-off-by: Yair Ben-Avraham +[yann.morin.1998@free.fr: + - lzma.h is not needed at all + - rewrite commit log accordingly +] +Signed-off-by: Yann E. MORIN +--- + src/castore.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/castore.c b/src/castore.c +index c290dfd..b2e5320 100644 +--- a/src/castore.c ++++ b/src/castore.c +@@ -2,7 +2,6 @@ + + #include + #include +-#include + #include + #include + +-- +2.25.1 + diff --git a/package/casync/0002-build-don-t-install-udev-rules-without-udev-support.patch b/package/casync/0002-build-don-t-install-udev-rules-without-udev-support.patch new file mode 100644 index 00000000..838b0655 --- /dev/null +++ b/package/casync/0002-build-don-t-install-udev-rules-without-udev-support.patch @@ -0,0 +1,53 @@ +From e3f683dc3013d14bddb9f9ec5bdc31367dc51a1c Mon Sep 17 00:00:00 2001 +From: "Yann E. MORIN" +Date: Sun, 10 Jan 2021 10:44:39 +0100 +Subject: [PATCH] build: don't install udev rules without udev support + +Signed-off-by: Yann E. MORIN +--- + meson.build | 15 ++++++++------- + 1 file changed, 8 insertions(+), 7 deletions(-) + +diff --git a/meson.build b/meson.build +index aac7727..92be1ea 100644 +--- a/meson.build ++++ b/meson.build +@@ -151,6 +151,11 @@ conf.set10('HAVE_SELINUX', get_option('selinux')) + + if get_option('udev') + libudev = dependency('libudev') ++ udevrulesdir = get_option('udevrulesdir') ++ if udevrulesdir == '' ++ udev = dependency('udev', required : false) ++ udevrulesdir = join_paths(udev.get_pkgconfig_variable('udevdir'), 'rules.d') ++ endif + else + libudev = [] + endif +@@ -175,12 +180,6 @@ subdir('test') + + includes = include_directories('src') + +-udevrulesdir = get_option('udevrulesdir') +-if udevrulesdir == '' +- udev = dependency('udev', required : false) +- udevrulesdir = join_paths(udev.get_pkgconfig_variable('udevdir'), 'rules.d') +-endif +- + subdir('shell-completion/bash') + subdir('doc') + +@@ -318,7 +317,9 @@ udev_rule = configure_file( + input : 'src/75-casync.rules.in', + configuration : substs) + +-install_data(udev_rule, install_dir : udevrulesdir) ++if get_option('udev') ++ install_data(udev_rule, install_dir : udevrulesdir) ++endif + + ############################################################ + +-- +2.25.1 + diff --git a/package/casync/Config.in b/package/casync/Config.in new file mode 100644 index 00000000..89a9520e --- /dev/null +++ b/package/casync/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_CASYNC + bool "casync" + depends on BR2_TOOLCHAIN_USES_GLIBC # scandirat() is not implemented by musl and uclibc-ng + select BR2_PACKAGE_ACL + select BR2_PACKAGE_LIBCURL + select BR2_PACKAGE_OPENSSL + help + Content-Addressable Data Synchronization Tool + + https://github.com/systemd/casync + +comment "casync needs a glibc toolchain" + depends on !BR2_TOOLCHAIN_USES_GLIBC diff --git a/package/casync/casync.hash b/package/casync/casync.hash new file mode 100644 index 00000000..dbb85520 --- /dev/null +++ b/package/casync/casync.hash @@ -0,0 +1,3 @@ +# sha256 locally computed +sha256 d07f43e70e3c466152033da4c55c065f815d3025234a046c2bce1cfe4ac7d273 casync-4ad9bcb94bc83ff36cfc65515107ea06a88c2dfc.tar.gz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 LICENSE.LGPL2.1 diff --git a/package/casync/casync.mk b/package/casync/casync.mk new file mode 100644 index 00000000..d74cb1bf --- /dev/null +++ b/package/casync/casync.mk @@ -0,0 +1,64 @@ +################################################################################ +# +# casync +# +################################################################################ + +CASYNC_VERSION = 4ad9bcb94bc83ff36cfc65515107ea06a88c2dfc +CASYNC_SITE = $(call github,systemd,casync,$(CASYNC_VERSION)) +CASYNC_LICENSE = LGPL-2.1+ +CASYNC_LICENSE_FILES = LICENSE.LGPL2.1 +CASYNC_DEPENDENCIES = acl libcurl openssl + +CASYNC_CONF_OPTS = -Dman=false -Doss-fuzz=false -Dllvm-fuzz=false + +ifeq ($(BR2_PACKAGE_BASH_COMPLETION),y) +CASYNC_DEPENDENCIES += bash-completion +# The default path is correct, leave it as-is +else +CASYNC_CONF_OPTS += -Dbashcompletiondir=no +endif + +ifeq ($(BR2_PACKAGE_LIBFUSE),y) +CASYNC_DEPENDENCIES += libfuse +CASYNC_CONF_OPTS += -Dfuse=true +else +CASYNC_CONF_OPTS += -Dfuse=false +endif + +ifeq ($(BR2_PACKAGE_LIBSELINUX),y) +CASYNC_DEPENDENCIES += libselinux +CASYNC_CONF_OPTS += -Dselinux=true +else +CASYNC_CONF_OPTS += -Dselinux=false +endif + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +CASYNC_DEPENDENCIES += udev +CASYNC_CONF_OPTS += -Dudev=true +else +CASYNC_CONF_OPTS += -Dudev=false +endif + +ifeq ($(BR2_PACKAGE_LIBZSTD),y) +CASYNC_DEPENDENCIES += libzstd +CASYNC_CONF_OPTS += -Dlibzstd=enabled +else +CASYNC_CONF_OPTS += -Dlibzstd=disabled +endif + +ifeq ($(BR2_PACKAGE_XZ),y) +CASYNC_DEPENDENCIES += xz +CASYNC_CONF_OPTS += -Dliblzma=enabled +else +CASYNC_CONF_OPTS += -Dliblzma=disabled +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +CASYNC_DEPENDENCIES += zlib +CASYNC_CONF_OPTS += -Dlibz=enabled +else +CASYNC_CONF_OPTS += -Dlibz=disabled +endif + +$(eval $(meson-package)) diff --git a/package/cbootimage/Config.in b/package/cbootimage/Config.in new file mode 100644 index 00000000..1a7fef0b --- /dev/null +++ b/package/cbootimage/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_CBOOTIMAGE + bool "cbootimage" + depends on BR2_arm || BR2_armeb + help + This project provides a tool which compiles BCT (Boot + Configuration Table) images to place into the boot flash of + a Tegra-based device. + + https://github.com/NVIDIA/cbootimage diff --git a/package/cbootimage/Config.in.host b/package/cbootimage/Config.in.host new file mode 100644 index 00000000..1913afa2 --- /dev/null +++ b/package/cbootimage/Config.in.host @@ -0,0 +1,9 @@ +config BR2_PACKAGE_HOST_CBOOTIMAGE + bool "host cbootimage" + depends on BR2_arm || BR2_armeb + help + This project provides a tool which compiles BCT (Boot + Configuration Table) images to place into the boot flash of + a Tegra-based device. + + https://github.com/NVIDIA/cbootimage diff --git a/package/cbootimage/cbootimage.hash b/package/cbootimage/cbootimage.hash new file mode 100644 index 00000000..7113f84f --- /dev/null +++ b/package/cbootimage/cbootimage.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 46cce01f07df977668de9e1d49884d8ed539169994215606a9719d17b9db8804 cbootimage-1.8.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/cbootimage/cbootimage.mk b/package/cbootimage/cbootimage.mk new file mode 100644 index 00000000..19819e4b --- /dev/null +++ b/package/cbootimage/cbootimage.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# cbootimage +# +################################################################################ + +CBOOTIMAGE_VERSION = 1.8 +CBOOTIMAGE_SITE = $(call github,NVIDIA,cbootimage,v$(CBOOTIMAGE_VERSION)) +CBOOTIMAGE_LICENSE = GPL-2.0 +CBOOTIMAGE_LICENSE_FILES = COPYING +CBOOTIMAGE_AUTORECONF = YES + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/cc-tool/Config.in b/package/cc-tool/Config.in new file mode 100644 index 00000000..2661592d --- /dev/null +++ b/package/cc-tool/Config.in @@ -0,0 +1,23 @@ +config BR2_PACKAGE_CC_TOOL + bool "cc-tool" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_WCHAR # boost-filesystem + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_BOOST + select BR2_PACKAGE_BOOST_PROGRAM_OPTIONS + select BR2_PACKAGE_BOOST_SYSTEM + select BR2_PACKAGE_BOOST_REGEX + select BR2_PACKAGE_BOOST_FILESYSTEM + help + cc-tool provides support for Texas Instruments CC Debugger + for Linux OS in order to program 8051-based System-On-Chip + devices: CC254x CC253x CC243x CC251x CC111x + + https://github.com/dashesy/cc-tool/ + +comment "cc-tool needs a toolchain w/ C++, threads, wchar, gcc >= 4.9 " + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/cc-tool/cc-tool.hash b/package/cc-tool/cc-tool.hash new file mode 100644 index 00000000..53c74730 --- /dev/null +++ b/package/cc-tool/cc-tool.hash @@ -0,0 +1,5 @@ +# Locally computed +sha256 1d26be4446c68413a02bf3156e6434d7fe9ce76aa0a169464ca5d7b2a731610d cc-tool-0.27.tar.gz + +# Hash for license file +sha256 231f7edcc7352d7734a96eef0b8030f77982678c516876fcb81e25b32d68564c COPYING diff --git a/package/cc-tool/cc-tool.mk b/package/cc-tool/cc-tool.mk new file mode 100644 index 00000000..6864589a --- /dev/null +++ b/package/cc-tool/cc-tool.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# cc-tool +# +################################################################################ + +CC_TOOL_VERSION = 0.27 +CC_TOOL_SITE = $(call github,dashesy,cc-tool,v$(CC_TOOL_VERSION)) +CC_TOOL_LICENSE = GPL-2.0 +CC_TOOL_LICENSE_FILES = COPYING +CC_TOOL_DEPENDENCIES = boost libusb + +# From git +CC_TOOL_AUTORECONF = YES + +# Configure script "discovers" boost in /usr/local if not given explicitly +CC_TOOL_CONF_OPTS = --with-boost=$(STAGING_DIR)/usr +CC_TOOL_CONF_ENV = LIBS="$(CC_TOOL_LIBS)" + +# Help boost.m4 find the Boost Regex library, which needs the pthread +# library, but isn't detected using a modern (pkg-config) mechanism. +ifeq ($(BR2_STATIC_LIBS),y) +CC_TOOL_LIBS += -lpthread +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +CC_TOOL_LIBS += -latomic +endif + +$(eval $(autotools-package)) diff --git a/package/ccache/ccache.hash b/package/ccache/ccache.hash new file mode 100644 index 00000000..16cfad60 --- /dev/null +++ b/package/ccache/ccache.hash @@ -0,0 +1,4 @@ +# sha256 computed locally +sha256 a02f4e8360dc6618bc494ca35b0ae21cea080f804a4898eab1ad3fcd108eb400 ccache-3.7.12.tar.xz +sha256 ec6b1a326ff93b2cc21df88a697ae470ff6927a55b8929e7e491b315e1563361 GPL-3.0.txt +sha256 4f63223bcdee822d55a6768cc8399ffe06401d7a03cfe79e1dc305f50dc22c59 LICENSE.adoc diff --git a/package/ccache/ccache.mk b/package/ccache/ccache.mk new file mode 100644 index 00000000..97aa8b1c --- /dev/null +++ b/package/ccache/ccache.mk @@ -0,0 +1,79 @@ +################################################################################ +# +# ccache +# +################################################################################ + +CCACHE_VERSION = 3.7.12 +CCACHE_SITE = https://github.com/ccache/ccache/releases/download/v$(CCACHE_VERSION) +CCACHE_SOURCE = ccache-$(CCACHE_VERSION).tar.xz +CCACHE_LICENSE = GPL-3.0+, others +CCACHE_LICENSE_FILES = LICENSE.adoc GPL-3.0.txt + +# Force ccache to use its internal zlib. The problem is that without +# this, ccache would link against the zlib of the build system, but we +# might build and install a different version of zlib in $(O)/host +# afterwards, which ccache will pick up. This might break if there is +# a version mismatch. A solution would be to add host-zlib has a +# dependency of ccache, but it would require tuning the zlib .mk file +# to use HOSTCC_NOCCACHE as the compiler. Instead, we take the easy +# path: tell ccache to use its internal copy of zlib, so that ccache +# has zero dependency besides the C library. +HOST_CCACHE_CONF_OPTS += --with-bundled-zlib + +# We are ccache, so we can't use ccache +HOST_CCACHE_CONF_ENV = \ + CC="$(HOSTCC_NOCCACHE)" \ + CXX="$(HOSTCXX_NOCCACHE)" + +# Patch host-ccache as follows: +# - Use BR_CACHE_DIR instead of CCACHE_DIR, because CCACHE_DIR +# is already used by autotargets for the ccache package. +# BR_CACHE_DIR is exported by Makefile based on config option +# BR2_CCACHE_DIR. +# - Change hard-coded last-ditch default to match path in .config, to avoid +# the need to specify BR_CACHE_DIR when invoking ccache directly. +# CCache replaces "%s" with the home directory of the current user, +# So rewrite BR_CACHE_DIR to take that into consideration for SDK purpose +HOST_CCACHE_DEFAULT_CCACHE_DIR = $(patsubst $(HOME)/%,\%s/%,$(BR_CACHE_DIR)) + +define HOST_CCACHE_PATCH_CONFIGURATION + sed -i 's,getenv("CCACHE_DIR"),getenv("BR_CACHE_DIR"),' $(@D)/src/ccache.c + sed -i 's,"%s/.ccache","$(HOST_CCACHE_DEFAULT_CCACHE_DIR)",' $(@D)/src/conf.c +endef + +HOST_CCACHE_POST_PATCH_HOOKS += HOST_CCACHE_PATCH_CONFIGURATION + +define HOST_CCACHE_MAKE_CACHE_DIR + mkdir -p $(BR_CACHE_DIR) +endef + +HOST_CCACHE_POST_INSTALL_HOOKS += HOST_CCACHE_MAKE_CACHE_DIR + +# Provide capability to do initial ccache setup (e.g. increase default size) +BR_CCACHE_INITIAL_SETUP = $(call qstrip,$(BR2_CCACHE_INITIAL_SETUP)) +ifneq ($(BR_CCACHE_INITIAL_SETUP),) +define HOST_CCACHE_DO_INITIAL_SETUP + @$(call MESSAGE,"Applying initial settings") + $(CCACHE) $(BR_CCACHE_INITIAL_SETUP) + $(CCACHE) -s +endef + +HOST_CCACHE_POST_INSTALL_HOOKS += HOST_CCACHE_DO_INITIAL_SETUP +endif + +$(eval $(host-autotools-package)) + +ifeq ($(BR2_CCACHE),y) +ccache-stats: host-ccache + $(Q)$(CCACHE) -s + +ccache-options: host-ccache +ifeq ($(CCACHE_OPTIONS),) + $(Q)echo "Usage: make ccache-options CCACHE_OPTIONS=\"opts\"" + $(Q)echo "where 'opts' corresponds to one or more valid ccache options" \ + "(see ccache help text below)" + $(Q)echo +endif + $(Q)$(CCACHE) $(CCACHE_OPTIONS) +endif diff --git a/package/ccid/Config.in b/package/ccid/Config.in new file mode 100644 index 00000000..aae5a718 --- /dev/null +++ b/package/ccid/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_CCID + bool "ccid" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + depends on BR2_USE_MMU # pcsc-lite + depends on !BR2_STATIC_LIBS # pcsc-lite + select BR2_PACKAGE_PCSC_LITE + select BR2_PACKAGE_LIBUSB + help + PC/SC driver for USB CCID smart card readers + + https://ccid.apdu.fr/ + +comment "ccid needs a toolchain w/ threads, dynamic library, gcc >= 4.9" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/ccid/ccid.hash b/package/ccid/ccid.hash new file mode 100644 index 00000000..4ef7aff3 --- /dev/null +++ b/package/ccid/ccid.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 e6f7645b59a9a2844eb4b1a7eff512960d7f04a4654af02f7fd2f8aded5db40a ccid-1.4.34.tar.bz2 +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 COPYING diff --git a/package/ccid/ccid.mk b/package/ccid/ccid.mk new file mode 100644 index 00000000..3cb599d5 --- /dev/null +++ b/package/ccid/ccid.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# ccid +# +################################################################################ + +CCID_VERSION = 1.4.34 +CCID_SOURCE = ccid-$(CCID_VERSION).tar.bz2 +CCID_SITE = https://ccid.apdu.fr/files +CCID_LICENSE = LGPL-2.1+ +CCID_LICENSE_FILES = COPYING +CCID_INSTALL_STAGING = YES +CCID_DEPENDENCIES = pcsc-lite host-pkgconf libusb +CCID_CONF_OPTS = --enable-usbdropdir=/usr/lib/pcsc/drivers + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +define CCID_INSTALL_UDEV_RULES + if test -d $(TARGET_DIR)/etc/udev/rules.d ; then \ + cp $(@D)/src/92_pcscd_ccid.rules $(TARGET_DIR)/etc/udev/rules.d/ ; \ + fi; +endef + +CCID_POST_INSTALL_TARGET_HOOKS += CCID_INSTALL_UDEV_RULES +endif + +$(eval $(autotools-package)) diff --git a/package/ccrypt/Config.in b/package/ccrypt/Config.in new file mode 100644 index 00000000..109271ae --- /dev/null +++ b/package/ccrypt/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_CCRYPT + bool "ccrypt" + help + ccrypt is a utility for encrypting and decrypting files and + streams. + + http://ccrypt.sourceforge.net/ diff --git a/package/ccrypt/ccrypt.hash b/package/ccrypt/ccrypt.hash new file mode 100644 index 00000000..4f81c491 --- /dev/null +++ b/package/ccrypt/ccrypt.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 b19c47500a96ee5fbd820f704c912f6efcc42b638c0a6aa7a4e3dc0a6b51a44f ccrypt-1.11.tar.gz +sha256 d48d3af3cf27b32106ee3418c7c892cae745ece26cd909e72aa59b08e3f9c93d COPYING diff --git a/package/ccrypt/ccrypt.mk b/package/ccrypt/ccrypt.mk new file mode 100644 index 00000000..f8d63282 --- /dev/null +++ b/package/ccrypt/ccrypt.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# ccrypt +# +################################################################################ + +CCRYPT_VERSION = 1.11 +CCRYPT_SITE = http://ccrypt.sourceforge.net/download/$(CCRYPT_VERSION) + +CCRYPT_LICENSE = GPL-2.0+ +CCRYPT_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/cctz/Config.in b/package/cctz/Config.in new file mode 100644 index 00000000..73a0f9f7 --- /dev/null +++ b/package/cctz/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_CCTZ + bool "cctz" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11 + select BR2_TARGET_TZ_INFO # runtime dependency + help + CCTZ is a C++ library for translating between absolute + and civil times using the rules of a time zone. + + https://github.com/google/cctz + +if BR2_PACKAGE_CCTZ + +config BR2_PACKAGE_CCTZ_INSTALL_TOOLS + bool "Install tools" + help + This option allows installing CCTZ tools. + +config BR2_PACKAGE_CCTZ_INSTALL_EXAMPLES + bool "Install example programs" + help + This option allows installing CCTZ example programs. + +endif + +comment "cctz needs a toolchain w/ C++, threads, gcc >= 4.8" + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_HAS_THREADS || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 diff --git a/package/cctz/cctz.hash b/package/cctz/cctz.hash new file mode 100644 index 00000000..fe8897c5 --- /dev/null +++ b/package/cctz/cctz.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 8615b20d4e33e02a271c3b93a3b208e3d7d5d66880f5f6208b03426e448f32db cctz-2.3.tar.gz +sha256 c79a7fea0e3cac04cd43f20e7b648e5a0ff8fa5344e644b0ee09ca1162b62747 LICENSE.txt diff --git a/package/cctz/cctz.mk b/package/cctz/cctz.mk new file mode 100644 index 00000000..bcc80bad --- /dev/null +++ b/package/cctz/cctz.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# cctz +# +################################################################################ + +CCTZ_VERSION = 2.3 +CCTZ_SITE = $(call github,google,cctz,v$(CCTZ_VERSION)) +CCTZ_LICENSE = Apache-2.0 +CCTZ_LICENSE_FILES = LICENSE.txt +CCTZ_INSTALL_STAGING = YES + +CCTZ_CONF_OPTS = -DBUILD_TESTING=OFF + +ifeq ($(BR2_PACKAGE_CCTZ_INSTALL_TOOLS),y) +CCTZ_CONF_OPTS += -DBUILD_TOOLS=ON +else +CCTZ_CONF_OPTS += -DBUILD_TOOLS=OFF +endif + +ifeq ($(BR2_PACKAGE_CCTZ_INSTALL_EXAMPLES),y) +CCTZ_CONF_OPTS += -DBUILD_EXAMPLES=ON +else +CCTZ_CONF_OPTS += -DBUILD_EXAMPLES=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/cdrkit/0001-no-rcmd.patch b/package/cdrkit/0001-no-rcmd.patch new file mode 100644 index 00000000..294779f7 --- /dev/null +++ b/package/cdrkit/0001-no-rcmd.patch @@ -0,0 +1,22 @@ +[PATCH] fix build with uClibc + +cdrkit unconditionally enables code using rcmd(3), which isn't available +on uClibc. + +Signed-off-by: Peter Korsgaard +--- + include/xconfig.h.in | 1 - + 1 file changed, 1 deletion(-) + +Index: cdrkit-1.1.10/include/xconfig.h.in +=================================================================== +--- cdrkit-1.1.10.orig/include/xconfig.h.in ++++ cdrkit-1.1.10/include/xconfig.h.in +@@ -187,7 +187,6 @@ + * they are placed before the large file tests. + */ + +-#define HAVE_RCMD 1 /* rcmd() is present in libc/libsocket */ + #define HAVE_SOCKET 1 /* socket() is present in libc/libsocket */ + #define HAVE_SOCKETPAIR 1 /* socketpair() is present in libc/libsocket */ + #define HAVE_GETSERVBYNAME 1 /* getservbyname() is present in libc/libsocket */ diff --git a/package/cdrkit/0002-define-__THROW-to-avoid-build-issue-with-musl.patch b/package/cdrkit/0002-define-__THROW-to-avoid-build-issue-with-musl.patch new file mode 100644 index 00000000..2e0f6d52 --- /dev/null +++ b/package/cdrkit/0002-define-__THROW-to-avoid-build-issue-with-musl.patch @@ -0,0 +1,47 @@ +From 9454ef47db30caa4359766c8730d9d92f65c64f7 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sat, 8 Aug 2015 22:58:57 +0200 +Subject: [PATCH] define __THROW to avoid build issue with musl + +Fixes: +http://autobuild.buildroot.net/results/d27/d2781e70b04a207e2e9397d888032294c7285034/build-end.log + +Signed-off-by: Romain Naour +--- + genisoimage/sha256.h | 4 ++++ + genisoimage/sha512.h | 4 ++++ + 2 files changed, 8 insertions(+) + +diff --git a/genisoimage/sha256.h b/genisoimage/sha256.h +index e7f4cb9..bcae7ef 100644 +--- a/genisoimage/sha256.h ++++ b/genisoimage/sha256.h +@@ -29,6 +29,10 @@ + #include + #include + ++/* define __THROW to avoid build issue when it's not available from the libc */ ++#ifndef __THROW ++# define __THROW ++#endif + + /* Structure to save state of computation between the single steps. */ + struct sha256_ctx +diff --git a/genisoimage/sha512.h b/genisoimage/sha512.h +index 7298355..8cee8b0 100644 +--- a/genisoimage/sha512.h ++++ b/genisoimage/sha512.h +@@ -29,6 +29,10 @@ + #include + #include + ++/* define __THROW to avoid build issue when it's not available from the libc */ ++#ifndef __THROW ++# define __THROW ++#endif + + /* Structure to save state of computation between the single steps. */ + struct sha512_ctx +-- +2.4.3 + diff --git a/package/cdrkit/0003-Add-extern-to-char-outfile-declaration-to-fix-build-.patch b/package/cdrkit/0003-Add-extern-to-char-outfile-declaration-to-fix-build-.patch new file mode 100644 index 00000000..30f4c8d0 --- /dev/null +++ b/package/cdrkit/0003-Add-extern-to-char-outfile-declaration-to-fix-build-.patch @@ -0,0 +1,30 @@ +From eabcc8a6e39dc3c28faee3e04aa56cc65a38d65a Mon Sep 17 00:00:00 2001 +From: Urja Rannikko +Date: Sun, 19 Jul 2020 20:28:27 +0300 +Subject: [PATCH] Add extern to char* outfile declaration to fix build with gcc + 10 + +Without this linking fails with a rather long spew of +"multiple definition of `outfile'". + +Signed-off-by: Urja Rannikko +--- + genisoimage/genisoimage.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/genisoimage/genisoimage.h b/genisoimage/genisoimage.h +index bbedfb0..82c859b 100644 +--- a/genisoimage/genisoimage.h ++++ b/genisoimage/genisoimage.h +@@ -376,7 +376,7 @@ extern int use_fileversion; + extern int split_SL_component; + extern int split_SL_field; + extern char *trans_tbl; +-char *outfile; ++extern char *outfile; + + #define JMAX 64 /* maximum Joliet file name length (spec) */ + #define JLONGMAX 103 /* out of spec Joliet file name length */ +-- +2.27.0 + diff --git a/package/cdrkit/Config.in b/package/cdrkit/Config.in new file mode 100644 index 00000000..7b5b8865 --- /dev/null +++ b/package/cdrkit/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_CDRKIT + bool "cdrkit" + depends on BR2_USE_MMU # fork + # Needed for libbz + select BR2_PACKAGE_BZIP2 + select BR2_PACKAGE_LIBCAP + select BR2_PACKAGE_ZLIB + help + cdrkit is a suite of programs for recording CDs and DVDs, + blanking CD-RW media, creating ISO-9660 filesystem images, + extracting audio CD data, and more. + + http://www.cdrkit.org/ diff --git a/package/cdrkit/cdrkit.hash b/package/cdrkit/cdrkit.hash new file mode 100644 index 00000000..8b574c70 --- /dev/null +++ b/package/cdrkit/cdrkit.hash @@ -0,0 +1,4 @@ +# From http://snapshot.debian.org/archive/debian/20141023T043132Z/pool/main/c/cdrkit/cdrkit_1.1.11-3.dsc +sha256 d1c030756ecc182defee9fe885638c1785d35a2c2a297b4604c0e0dcc78e47da cdrkit_1.1.11.orig.tar.gz +# locally computed +sha256 90daae00475a992a367da5b0658469a5d1c4449dbbe964c5b7246e1aec92f491 COPYING diff --git a/package/cdrkit/cdrkit.mk b/package/cdrkit/cdrkit.mk new file mode 100644 index 00000000..67814f14 --- /dev/null +++ b/package/cdrkit/cdrkit.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# cdrkit +# +################################################################################ + +CDRKIT_VERSION = 1.1.11 +CDRKIT_SOURCE = cdrkit_$(CDRKIT_VERSION).orig.tar.gz +CDRKIT_SITE = http://snapshot.debian.org/archive/debian/20141023T043132Z/pool/main/c/cdrkit +CDRKIT_DEPENDENCIES = libcap bzip2 zlib +HOST_CDRKIT_DEPENDENCIES = host-libcap host-bzip2 host-zlib +CDRKIT_LICENSE = GPL-2.0 +CDRKIT_LICENSE_FILES = COPYING + +ifeq ($(BR2_ENDIAN),"BIG") +CDRKIT_CONF_OPTS += -DBITFIELDS_HTOL=1 +else +CDRKIT_CONF_OPTS += -DBITFIELDS_HTOL=0 +endif + +ifeq ($(BR2_PACKAGE_FILE),y) +CDRKIT_DEPENDENCIES += host-pkgconf file +CDRKIT_CONF_OPTS += \ + -DUSE_MAGIC=ON \ + -DEXTRA_LIBS="`$(PKG_CONFIG_HOST_BINARY) --libs libmagic`" +else +CDRKIT_CONF_OPTS += -DUSE_MAGIC=OFF +endif + +$(eval $(cmake-package)) +$(eval $(host-cmake-package)) diff --git a/package/cegui/0001-src-Exceptions.cpp-check-if-execinfo-header-is-avail.patch b/package/cegui/0001-src-Exceptions.cpp-check-if-execinfo-header-is-avail.patch new file mode 100644 index 00000000..dd5dba9e --- /dev/null +++ b/package/cegui/0001-src-Exceptions.cpp-check-if-execinfo-header-is-avail.patch @@ -0,0 +1,33 @@ +From e18e48624cd45910917e5e4fb0aa16cef490bb6d Mon Sep 17 00:00:00 2001 +From: Bartosz Bilas +Date: Sun, 22 Mar 2020 14:25:53 +0100 +Subject: [PATCH] src/Exceptions.cpp: check if execinfo header is available + +Fixes: + fatal error: execinfo.h: No such file or directory + compilation terminated. + +Signed-off-by: Bartosz Bilas +--- + Upstream status: https://github.com/cegui/cegui/pull/1189 + +cegui/src/Exceptions.cpp | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/cegui/src/Exceptions.cpp b/cegui/src/Exceptions.cpp +index 8e4890378..6a8420491 100644 +--- a/cegui/src/Exceptions.cpp ++++ b/cegui/src/Exceptions.cpp +@@ -46,7 +46,9 @@ + #elif (defined(__linux__) && !defined(__ANDROID__)) \ + || defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) \ + || defined(__HAIKU__) ++#ifdef HAVE_EXECINFO_H + # include ++#endif + # include + # include + # include +-- +2.25.2 + diff --git a/package/cegui/0002-cegui-src-IconvStringTranscoder.cpp-use-cast-notatio.patch b/package/cegui/0002-cegui-src-IconvStringTranscoder.cpp-use-cast-notatio.patch new file mode 100644 index 00000000..f30438b9 --- /dev/null +++ b/package/cegui/0002-cegui-src-IconvStringTranscoder.cpp-use-cast-notatio.patch @@ -0,0 +1,34 @@ +From 4561bac9dddad8fd79e746ea1ddd89c20647a162 Mon Sep 17 00:00:00 2001 +From: Bartosz Bilas +Date: Thu, 2 Apr 2020 18:04:28 +0200 +Subject: [PATCH] cegui/src/IconvStringTranscoder.cpp: use cast notation + instead of reinterpret_cast + +Fixes: + IconvStringTranscoder.cpp:50:49: error: invalid cast from type 'int' to + type 'iconv_t' {aka 'long int'} + if (d_cd == reinterpret_cast(-1)) + +Signed-off-by: Bartosz Bilas +--- + Upstream status: https://github.com/cegui/cegui/pull/1194 + + cegui/src/IconvStringTranscoder.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/cegui/src/IconvStringTranscoder.cpp b/cegui/src/IconvStringTranscoder.cpp +index 1a5df2995..f6b5aa816 100644 +--- a/cegui/src/IconvStringTranscoder.cpp ++++ b/cegui/src/IconvStringTranscoder.cpp +@@ -47,7 +47,7 @@ public: + d_toCode(tocode), + d_cd(iconv_open(d_toCode.c_str(), d_fromCode.c_str())) + { +- if (d_cd == reinterpret_cast(-1)) ++ if (d_cd == (iconv_t)(-1)) + CEGUI_THROW(InvalidRequestException(String( + "Failed to create conversion descriptor from \"") + + d_fromCode.c_str() + "\" to \"" + d_toCode.c_str() + "\".")); +-- +2.26.0 + diff --git a/package/cegui/Config.in b/package/cegui/Config.in new file mode 100644 index 00000000..1bd0ee1c --- /dev/null +++ b/package/cegui/Config.in @@ -0,0 +1,22 @@ +comment "cegui needs a toolchain w/ C++, threads, dynamic library, wchar" + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP \ + || BR2_STATIC_LIBS || !BR2_USE_WCHAR + +config BR2_PACKAGE_CEGUI + bool "cegui" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_WCHAR + select BR2_PACKAGE_GLM + select BR2_PACKAGE_LIBGLFW if BR2_PACKAGE_HAS_LIBGL # SampleBrowser dependency + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + Crazy Eddie's GUI System is a free library providing windowing + and widgets for graphics APIs / engines where such + functionality is not natively available, or severely lacking. + The library is object orientated, written in C++, and targeted + at games developers who should be spending their time creating + great games, not building GUI sub-systems! + + http://www.cegui.org.uk/ diff --git a/package/cegui/cegui.hash b/package/cegui/cegui.hash new file mode 100644 index 00000000..82950390 --- /dev/null +++ b/package/cegui/cegui.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 7be289d2d8562e7d20bd155d087d6ccb0ba62f7e99cc25d20684b8edf2ba15cd cegui-0-8-7.tar.gz +sha256 cc869e2ece8ad039f6d7fd17259db4ea0ae0a502d02a1bb506c0168deb12e40d COPYING diff --git a/package/cegui/cegui.mk b/package/cegui/cegui.mk new file mode 100644 index 00000000..23a5859b --- /dev/null +++ b/package/cegui/cegui.mk @@ -0,0 +1,110 @@ +################################################################################ +# +# cegui +# +################################################################################ + +CEGUI_VERSION = 0-8-7 +CEGUI_SITE = $(call github,cegui,cegui,v$(CEGUI_VERSION)) +CEGUI_LICENSE = MIT +CEGUI_LICENSE_FILES = COPYING +CEGUI_INSTALL_STAGING = YES +CEGUI_CONF_OPTS = \ + -DCEGUI_BUILD_XMLPARSER_XERCES=OFF \ + -DCEGUI_HAS_MINIZIP_RESOURCE_PROVIDER=OFF \ + -DCEGUI_BUILD_RENDERER_OGRE=OFF +CEGUI_DEPENDENCIES = glm \ + $(if $(BR2_PACKAGE_LIBGLFW),libglfw) \ + $(if $(BR2_PACKAGE_HAS_LIBGL),libgl) \ + $(if $(BR2_PACKAGE_HAS_LIBGLES),libgles) \ + $(if $(BR2_PACKAGE_LIBICONV),libiconv) + +# libepoxy support cannot be enabled together with libglew +ifeq ($(BR2_PACKAGE_LIBGLEW)$(BR2_PACKAGE_LIBGLU),yy) +CEGUI_DEPENDENCIES += libglew libglu +CEGUI_CONF_OPTS += -DCEGUI_USE_GLEW=ON -DCEGUI_USE_EPOXY=OFF \ + -DCEGUI_BUILD_RENDERER_OPENGL=ON \ + -DCEGUI_BUILD_RENDERER_OPENGL3=ON +else ifeq ($(BR2_PACKAGE_LIBEPOXY),y) +CEGUI_DEPENDENCIES += libepoxy +# old OpenGL renderer module is only supported using GLEW +CEGUI_CONF_OPTS += -DCEGUI_USE_EPOXY=ON -DCEGUI_USE_GLEW=OFF \ + -DCEGUI_BUILD_RENDERER_OPENGL=OFF \ + -DCEGUI_BUILD_RENDERER_OPENGL3=ON +else +CEGUI_CONF_OPTS += -DCEGUI_USE_EPOXY=OFF -DCEGUI_USE_GLEW=OFF \ + -DCEGUI_BUILD_RENDERER_OPENGL=OFF \ + -DCEGUI_BUILD_RENDERER_OPENGL3=OFF +endif + +ifeq ($(BR2_PACKAGE_EXPAT),y) +CEGUI_DEPENDENCIES += expat +CEGUI_CONF_OPTS += -DCEGUI_BUILD_XMLPARSER_EXPAT=ON +else +CEGUI_CONF_OPTS += -DCEGUI_BUILD_XMLPARSER_EXPAT=OFF +endif + +ifeq ($(BR2_PACKAGE_IRRLICHT),y) +CEGUI_DEPENDENCIES += irrlicht +CEGUI_CONF_OPTS += -DCEGUI_BUILD_RENDERER_IRRLICHT=ON +else +CEGUI_CONF_OPTS += -DCEGUI_BUILD_RENDERER_IRRLICHT=OFF +endif + +ifeq ($(BR2_PACKAGE_SDL2)$(BR2_PACKAGE_SDL2_IMAGE),yy) +CEGUI_DEPENDENCIES += sdl2 sdl2_image +CEGUI_CONF_OPTS += -DCEGUI_BUILD_IMAGECODEC_SDL2=ON +else +CEGUI_CONF_OPTS += -DCEGUI_BUILD_IMAGECODEC_SDL2=OFF +endif + +ifeq ($(BR2_PACKAGE_PCRE),y) +CEGUI_DEPENDENCIES += pcre +CEGUI_CONF_OPTS += -DCEGUI_HAS_PCRE_REGEX=ON +else +CEGUI_CONF_OPTS += -DCEGUI_HAS_PCRE_REGEX=OFF +endif + +ifeq ($(BR2_PACKAGE_FREETYPE),y) +CEGUI_DEPENDENCIES += freetype +CEGUI_CONF_OPTS += -DCEGUI_HAS_FREETYPE=ON +else +CEGUI_CONF_OPTS += -DCEGUI_HAS_FREETYPE=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBFRIBIDI),y) +CEGUI_DEPENDENCIES += libfribidi +CEGUI_CONF_OPTS += -DCEGUI_USE_FRIBIDI=ON +else +CEGUI_CONF_OPTS += -DCEGUI_USE_FRIBIDI=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBXML2),y) +CEGUI_DEPENDENCIES += libxml2 +CEGUI_CONF_OPTS += -DCEGUI_BUILD_XMLPARSER_LIBXML2=ON +else +CEGUI_CONF_OPTS += -DCEGUI_BUILD_XMLPARSER_LIBXML2=OFF +endif + +ifeq ($(BR2_PACKAGE_RAPIDXML),y) +CEGUI_DEPENDENCIES += rapidxml +CEGUI_CONF_OPTS += -DCEGUI_BUILD_XMLPARSER_RAPIDXML=ON +else +CEGUI_CONF_OPTS += -DCEGUI_BUILD_XMLPARSER_RAPIDXML=OFF +endif + +ifeq ($(BR2_PACKAGE_TINYXML),y) +CEGUI_DEPENDENCIES += tinyxml +CEGUI_CONF_OPTS += -DCEGUI_BUILD_XMLPARSER_TINYXML=ON +else +CEGUI_CONF_OPTS += -DCEGUI_BUILD_XMLPARSER_TINYXML=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBFREEIMAGE),y) +CEGUI_DEPENDENCIES += libfreeimage +CEGUI_CONF_OPTS += -DCEGUI_BUILD_IMAGECODEC_FREEIMAGE=ON +else +CEGUI_CONF_OPTS += -DCEGUI_BUILD_IMAGECODEC_FREEIMAGE=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/cereal/0001-Store-a-copy-of-each-serialized-shared_ptr-within-the-archive.patch b/package/cereal/0001-Store-a-copy-of-each-serialized-shared_ptr-within-the-archive.patch new file mode 100644 index 00000000..3458ec1b --- /dev/null +++ b/package/cereal/0001-Store-a-copy-of-each-serialized-shared_ptr-within-the-archive.patch @@ -0,0 +1,67 @@ +From f27c12d491955c94583512603bf32c4568f20929 Mon Sep 17 00:00:00 2001 +From: Michael Walz +Date: Tue, 2 Feb 2021 00:50:29 +0100 +Subject: [PATCH] Store a copy of each serialized shared_ptr within the archive + to prevent the shared_ptr to be freed to early. (#667) + +The archives use the memory address pointed by the shared_ptr as a +unique id which must not be reused during lifetime of the archive. +Therefore, the archives stores a copy of it. +This problem was also reported as CVE-2020-11105. + +[Retrieved from: +https://github.com/USCiLab/cereal/commit/f27c12d491955c94583512603bf32c4568f20929] +Signed-off-by: Fabrice Fontaine +--- + include/cereal/cereal.hpp | 13 +++++++++++-- + include/cereal/types/memory.hpp | 2 +- + 2 files changed, 12 insertions(+), 3 deletions(-) + +diff --git a/include/cereal/cereal.hpp b/include/cereal/cereal.hpp +index 99bed9d6..f0d15e8b 100644 +--- a/include/cereal/cereal.hpp ++++ b/include/cereal/cereal.hpp +@@ -369,12 +369,17 @@ namespace cereal + point to the same data. + + @internal +- @param addr The address (see shared_ptr get()) pointed to by the shared pointer ++ @param sharedPointer The shared pointer itself (the adress is taked via get()). ++ The archive takes a copy to prevent the memory location to be freed ++ as long as the address is used as id. This is needed to prevent CVE-2020-11105. + @return A key that uniquely identifies the pointer */ +- inline std::uint32_t registerSharedPointer( void const * addr ) ++ inline std::uint32_t registerSharedPointer(const std::shared_ptr& sharedPointer) + { ++ void const * addr = sharedPointer.get(); ++ + // Handle null pointers by just returning 0 + if(addr == 0) return 0; ++ itsSharedPointerStorage.push_back(sharedPointer); + + auto id = itsSharedPointerMap.find( addr ); + if( id == itsSharedPointerMap.end() ) +@@ -645,6 +650,10 @@ namespace cereal + //! Maps from addresses to pointer ids + std::unordered_map itsSharedPointerMap; + ++ //! Copy of shared pointers used in #itsSharedPointerMap to make sure they are kept alive ++ // during lifetime of itsSharedPointerMap to prevent CVE-2020-11105. ++ std::vector> itsSharedPointerStorage; ++ + //! The id to be given to the next pointer + std::uint32_t itsCurrentPointerId; + +diff --git a/include/cereal/types/memory.hpp b/include/cereal/types/memory.hpp +index 59e9da9b..cac1f334 100644 +--- a/include/cereal/types/memory.hpp ++++ b/include/cereal/types/memory.hpp +@@ -263,7 +263,7 @@ namespace cereal + { + auto & ptr = wrapper.ptr; + +- uint32_t id = ar.registerSharedPointer( ptr.get() ); ++ uint32_t id = ar.registerSharedPointer( ptr ); + ar( CEREAL_NVP_("id", id) ); + + if( id & detail::msb_32bit ) diff --git a/package/cereal/Config.in b/package/cereal/Config.in new file mode 100644 index 00000000..3ac463c4 --- /dev/null +++ b/package/cereal/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_CEREAL + bool "cereal" + depends on BR2_USE_WCHAR + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 # C++11 + help + cereal is a header-only C++11 serialization library. + cereal takes arbitrary data types and reversibly turns them + into different representations, such as compact binary + encodings, XML or JSON. cereal was designed to be fast, + light-weight, and easy to extend - it has no external + dependencies and can be easily bundled with other code or used + standalone. + + https://github.com/USCiLab/cereal + +comment "cereal needs a toolchain w/ C++, gcc >= 4.7, threads, wchar" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_USE_WCHAR || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 diff --git a/package/cereal/cereal.hash b/package/cereal/cereal.hash new file mode 100644 index 00000000..ddaf54e7 --- /dev/null +++ b/package/cereal/cereal.hash @@ -0,0 +1,6 @@ +# Locally computed +sha256 329ea3e3130b026c03a4acc50e168e7daff4e6e661bc6a7dfec0d77b570851d5 cereal-1.3.0.tar.gz +sha256 18fd7618c44c9fe28b5f54cd19747df3c0472ed33e8507fea571e2acf6e72f34 LICENSE +sha256 d9e523e8736ac0c68064c7ad312a222f285e82bf6c96a1b1c2cadaffff9fc64f include/cereal/external/base64.hpp +sha256 7fb69c707f0ed3a8b59b8f949f0928a9cc06d67bc15d599094693703ff70ea26 include/cereal/external/rapidjson/rapidjson.h +sha256 794bf3b2ecf5cf0c740ac6c524d66ce6284c4b1de1f983d21a242b8abbeb9720 include/cereal/external/rapidxml/license.txt diff --git a/package/cereal/cereal.mk b/package/cereal/cereal.mk new file mode 100644 index 00000000..19faa2ac --- /dev/null +++ b/package/cereal/cereal.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# cereal +# +################################################################################ + +CEREAL_VERSION = 1.3.0 +CEREAL_SITE = $(call github,USCiLab,cereal,v$(CEREAL_VERSION)) +# For licensing, see also: https://github.com/USCiLab/cereal/issues/609 +CEREAL_LICENSE = BSD-3-Clause (cereal), Zlib (base64.hpp), MIT (rapidjson), BSL-1.0 or MIT (rapidxml) +CEREAL_LICENSE_FILES = LICENSE include/cereal/external/base64.hpp include/cereal/external/rapidjson/rapidjson.h include/cereal/external/rapidxml/license.txt +CEREAL_CPE_ID_VENDOR = usc +CEREAL_INSTALL_STAGING = YES +CEREAL_INSTALL_TARGET = NO +CEREAL_CONF_OPTS = \ + -DTHREAD_SAFE=ON \ + -DJUST_INSTALL_CEREAL=ON + +# 0001-Store-a-copy-of-each-serialized-shared_ptr-within-the-archive.patch +CEREAL_IGNORE_CVES += CVE-2020-11105 + +$(eval $(cmake-package)) diff --git a/package/cgic/0001-prepare_makefile.patch b/package/cgic/0001-prepare_makefile.patch new file mode 100644 index 00000000..15adc4cd --- /dev/null +++ b/package/cgic/0001-prepare_makefile.patch @@ -0,0 +1,44 @@ +Makefile: fix for cross-compilation + +Probably-Signed-off-by: Dave Bender +[yann.morin.1998@free.fr: patch was made by Dave, but he + forgot his SoB line, so I added it] +Signed-off-by: "Yann E. MORIN" +diff -rupN cgic206/Makefile cgic206-br/Makefile +--- cgic206/Makefile 2014-03-16 18:17:11.000000000 -0400 ++++ cgic206-br/Makefile 2015-01-16 11:18:03.714874000 -0500 +@@ -1,15 +1,14 @@ +-CFLAGS=-g -Wall +-CC=gcc +-AR=ar +-RANLIB=ranlib + LIBS=-L./ -lcgic + + all: libcgic.a cgictest.cgi capture + + install: libcgic.a +- cp libcgic.a /usr/local/lib +- cp cgic.h /usr/local/include +- @echo libcgic.a is in /usr/local/lib. cgic.h is in /usr/local/include. ++ cp libcgic.a $(PREFIX)/usr/lib ++ cp cgic.h $(PREFIX)/usr/include ++ @echo libcgic.a is in $(PREFIX)/usr/lib. cgic.h is in $(PREFIX)/usr/include. ++ ++cgi.o: cgic.c cgic.h ++ $(CC) $(CFLAGS) cgic.c -o cgic.o + + libcgic.a: cgic.o cgic.h + rm -f libcgic.a +@@ -19,10 +18,10 @@ libcgic.a: cgic.o cgic.h + #mingw32 and cygwin users: replace .cgi with .exe + + cgictest.cgi: cgictest.o libcgic.a +- gcc cgictest.o -o cgictest.cgi ${LIBS} ++ $(CC) cgictest.o -o cgictest.cgi ${LIBS} + + capture: capture.o libcgic.a +- gcc capture.o -o capture ${LIBS} ++ $(CC) capture.o -o capture ${LIBS} + + clean: + rm -f *.o *.a cgictest.cgi capture diff --git a/package/cgic/0002-file_enhancements.patch b/package/cgic/0002-file_enhancements.patch new file mode 100644 index 00000000..a6f82fce --- /dev/null +++ b/package/cgic/0002-file_enhancements.patch @@ -0,0 +1,56 @@ +Create better temporary files. + +Probably-Signed-off-by: Dave Bender +[yann.morin.1998@free.fr: patch was made by Dave, but he + forgot his SoB line, so I added it; split the patch in two + independent fixes] +Signed-off-by: "Yann E. MORIN" + +diff -rupN cgic206/cgic.c cgic206_tempfile/cgic.c +--- cgic206/cgic.c 2014-03-16 18:17:11.000000000 -0400 ++++ cgic206_tempfile/cgic.c 2015-01-21 11:58:45.436384908 -0500 +@@ -22,6 +22,8 @@ + #define CGICDEBUGEND + #endif /* CGICDEBUG */ + ++#define _GNU_SOURCE ++ + #include + #include + #include +@@ -34,11 +36,11 @@ + #include + + /* cgic 2.01 */ +-#include + + #else + #include + #endif /* WIN32 */ ++#include + #include "cgic.h" + + #define cgiStrEq(a, b) (!strcmp((a), (b))) +@@ -636,16 +638,17 @@ static cgiParseResultType getTempFileNam + window between the file's creation and the + chmod call (glibc 2.0.6 and lower might + otherwise have allowed this). */ ++ mode_t umode; + int outfd; ++ umode = umask(0600); + strcpy(tfileName, cgicTempDir "/cgicXXXXXX"); +- outfd = mkstemp(tfileName); ++ outfd = mkostemp(tfileName, O_CLOEXEC | O_NOATIME); ++ umask(umode); + if (outfd == -1) { + return cgiParseIO; + } +- close(outfd); +- /* Fix the permissions */ +- if (chmod(tfileName, 0600) != 0) { +- unlink(tfileName); ++ ++ if (close(outfd)) { + return cgiParseIO; + } + #else diff --git a/package/cgic/0003-restore-cgiFormFileGetTempfileName.patch b/package/cgic/0003-restore-cgiFormFileGetTempfileName.patch new file mode 100644 index 00000000..f66227b6 --- /dev/null +++ b/package/cgic/0003-restore-cgiFormFileGetTempfileName.patch @@ -0,0 +1,43 @@ +Restore lost functionality + +Probably-Signed-off-by: Dave Bender +[yann.morin.1998@free.fr: patch was made by Dave, but he + forgot his SoB line, so I added it] +Signed-off-by: "Yann E. MORIN" + +diff -rupN cgic206/cgic.c cgic206_tempfile/cgic.c +--- cgic206/cgic.c 2014-03-16 18:17:11.000000000 -0400 ++++ cgic206_tempfile/cgic.c 2015-01-21 11:58:45.436384908 -0500 +@@ -1278,6 +1278,20 @@ cgiFormResultType cgiFormFileContentType + } + } + ++const char* cgiFormFileGetTempfileName( ++ char* name) ++{ ++ cgiFormEntry *e; ++ e = cgiFormEntryFindFirst(name); ++ if (!e) { ++ return NULL; ++ } else if (!strlen(e->tfileName)) { ++ return NULL; ++ } else { ++ return e->tfileName; ++ } ++} ++ + cgiFormResultType cgiFormFileSize( + char *name, int *sizeP) + { +diff -rupN cgic206/cgic.h cgic206_tempfile/cgic.h +--- cgic206/cgic.h 2014-03-16 18:17:11.000000000 -0400 ++++ cgic206_tempfile/cgic.h 2015-01-21 11:53:02.915148026 -0500 +@@ -141,6 +141,8 @@ extern cgiFormResultType cgiFormRadio( + char *name, char **valuesText, int valuesTotal, + int *result, int defaultV); + ++extern const char* cgiFormFileGetTempfileName(char* name); ++ + /* The paths returned by this function are the original names of files + as reported by the uploading web browser and shoult NOT be + blindly assumed to be "safe" names for server-side use! */ diff --git a/package/cgic/Config.in b/package/cgic/Config.in new file mode 100644 index 00000000..402460d0 --- /dev/null +++ b/package/cgic/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_CGIC + bool "cgic" + help + C CGI library + + http://www.boutell.com/cgic/ diff --git a/package/cgic/cgic.hash b/package/cgic/cgic.hash new file mode 100644 index 00000000..d3f082e8 --- /dev/null +++ b/package/cgic/cgic.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 1e8834642a4b89528bb7bde2f287e133c6b07e210e68681a34137c436d59d320 cgic207.tar.gz +sha256 6a7de92593d64dbf7630d8f66f97e04a899769bef1e055f2434bc06b87b9de62 license.txt diff --git a/package/cgic/cgic.mk b/package/cgic/cgic.mk new file mode 100644 index 00000000..cd084130 --- /dev/null +++ b/package/cgic/cgic.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# cgic +# +################################################################################ + +CGIC_VERSION = 2.07 +CGIC_SOURCE = cgic207.tar.gz +CGIC_SITE = http://boutell.com/cgic +CGIC_LICENSE = Custom +CGIC_LICENSE_FILES = license.txt + +# Installs only a static library and a header file +CGIC_INSTALL_STAGING = YES +CGIC_INSTALL_TARGET = NO + +define CGIC_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) libcgic.a +endef + +define CGIC_INSTALL_STAGING_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) PREFIX=$(STAGING_DIR) -C $(@D) install +endef + +$(eval $(generic-package)) diff --git a/package/cgilua/Config.in b/package/cgilua/Config.in new file mode 100644 index 00000000..a6761313 --- /dev/null +++ b/package/cgilua/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_CGILUA + bool "cgilua" + select BR2_PACKAGE_LUAFILESYSTEM # runtime + help + CGILua is a tool for creating dynamic HTML pages + and manipulating input data from Web forms. + + http://keplerproject.github.com/cgilua diff --git a/package/cgilua/cgilua.hash b/package/cgilua/cgilua.hash new file mode 100644 index 00000000..8bdb1d18 --- /dev/null +++ b/package/cgilua/cgilua.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 7d4883e6a89b3463a1d35b8084a6e2afbbb584af7aca1169380e92af0f848413 cgilua-5.2.1-1.src.rock +sha256 0cf6f0858b0fd90bb5705c8ace77a8afd11e8fce1427fe0a48156937222b8c28 cgilua-5.2.1/doc/us/license.html diff --git a/package/cgilua/cgilua.mk b/package/cgilua/cgilua.mk new file mode 100644 index 00000000..cd78841f --- /dev/null +++ b/package/cgilua/cgilua.mk @@ -0,0 +1,11 @@ +################################################################################ +# +# cgilua +# +################################################################################ + +CGILUA_VERSION = 5.2.1-1 +CGILUA_LICENSE = MIT +CGILUA_LICENSE_FILES = $(CGILUA_SUBDIR)/doc/us/license.html + +$(eval $(luarocks-package)) diff --git a/package/cgroupfs-mount/Config.in b/package/cgroupfs-mount/Config.in new file mode 100644 index 00000000..0b2e4ba1 --- /dev/null +++ b/package/cgroupfs-mount/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_CGROUPFS_MOUNT + bool "cgroupfs-mount" + depends on !BR2_INIT_SYSTEMD + help + cgroupfs mount and umount scripts. + + requires a Linux kernel >= 3.0 with the following options + enabled: + + - CONFIG_BLK_CGROUP + - CONFIG_CGROUPS + - CONFIG_CGROUP_CPUACCT + - CONFIG_CGROUP_DEVICE + - CONFIG_CGROUP_FREEZER + - CONFIG_CGROUP_WRITEBACK + - CONFIG_CGROUP_SCHED + - CONFIG_CGROUP_PIDS + + https://github.com/tianon/cgroupfs-mount diff --git a/package/cgroupfs-mount/S30cgroupfs b/package/cgroupfs-mount/S30cgroupfs new file mode 100644 index 00000000..aa0a29b1 --- /dev/null +++ b/package/cgroupfs-mount/S30cgroupfs @@ -0,0 +1,34 @@ +#!/bin/sh +# +# Set up cgroupfs mounts. +# + +start() { + printf "Mounting cgroupfs hierarchy: " + /usr/bin/cgroupfs-mount + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +stop() { + printf "Unmounting cgroupfs hierarchy: " + /usr/bin/cgroupfs-umount + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac diff --git a/package/cgroupfs-mount/cgroupfs-mount.hash b/package/cgroupfs-mount/cgroupfs-mount.hash new file mode 100644 index 00000000..dc103646 --- /dev/null +++ b/package/cgroupfs-mount/cgroupfs-mount.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 d6c8aff7af59c7d0082ee3018c97f73b0421e81a49bb28ad9f66a36da5cd6ec7 cgroupfs-mount-1.4.tar.gz +sha256 e52f47a650734f70c40c8fd9318f85e42777bf3fba7ff1dfb72f845bb417f7e6 debian/copyright diff --git a/package/cgroupfs-mount/cgroupfs-mount.mk b/package/cgroupfs-mount/cgroupfs-mount.mk new file mode 100644 index 00000000..acf74420 --- /dev/null +++ b/package/cgroupfs-mount/cgroupfs-mount.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# cgroupfs-mount +# +################################################################################ + +CGROUPFS_MOUNT_VERSION = 1.4 +CGROUPFS_MOUNT_SITE = $(call github,tianon,cgroupfs-mount,$(CGROUPFS_MOUNT_VERSION)) +CGROUPFS_MOUNT_LICENSE = GPL-3.0+ +CGROUPFS_MOUNT_LICENSE_FILES = debian/copyright +CGROUPFS_MOUNT_CPE_ID_VENDOR = cgroupfs-mount_project + +define CGROUPFS_MOUNT_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/cgroupfs-mount $(TARGET_DIR)/usr/bin/cgroupfs-mount + $(INSTALL) -D -m 0755 $(@D)/cgroupfs-umount $(TARGET_DIR)/usr/bin/cgroupfs-umount +endef + +define CGROUPFS_MOUNT_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D $(CGROUPFS_MOUNT_PKGDIR)/S30cgroupfs \ + $(TARGET_DIR)/etc/init.d/S30cgroupfs +endef + +$(eval $(generic-package)) diff --git a/package/chartjs/Config.in b/package/chartjs/Config.in new file mode 100644 index 00000000..73cc9b77 --- /dev/null +++ b/package/chartjs/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_CHARTJS + bool "chartjs" + help + Chart.js, a simple yet flexible JavaScript charting library + for designers & developers + + https://www.chartjs.org/ diff --git a/package/chartjs/chartjs.hash b/package/chartjs/chartjs.hash new file mode 100644 index 00000000..de4d6d4e --- /dev/null +++ b/package/chartjs/chartjs.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 9ef3697e279a585c79730f35dba16ad4e24ddeed49a150adb341c31f191fb78e chartjs-2.9.4.tar.gz +sha256 7b43caae91f31b18dc81fae6e0f7aa1acbecaa6d84e3249905cbe15308307d67 LICENSE.md diff --git a/package/chartjs/chartjs.mk b/package/chartjs/chartjs.mk new file mode 100644 index 00000000..2748a94d --- /dev/null +++ b/package/chartjs/chartjs.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# chartjs +# +################################################################################ + +CHARTJS_VERSION = 2.9.4 +CHARTJS_SITE = $(call github,chartjs,Chart.js,v$(CHARTJS_VERSION)) +CHARTJS_LICENSE = MIT +CHARTJS_LICENSE_FILES = LICENSE.md +CHARTJS_CPE_ID_VENDOR = chartjs +CHARTJS_CPE_ID_PRODUCT = chart.js + +define CHARTJS_INSTALL_TARGET_CMDS + $(INSTALL) -m 0644 -D $(@D)/dist/Chart.min.css \ + $(TARGET_DIR)/var/www/chartjs/css/Chart.css + $(INSTALL) -m 0644 -D $(@D)/dist/Chart.min.js \ + $(TARGET_DIR)/var/www/chartjs/js/Chart.js + $(INSTALL) -m 0644 -D $(@D)/dist/Chart.bundle.min.js \ + $(TARGET_DIR)/var/www/chartjs/js/Chart.bundle.js +endef + +$(eval $(generic-package)) diff --git a/package/check/Config.in b/package/check/Config.in new file mode 100644 index 00000000..2312fbf8 --- /dev/null +++ b/package/check/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_CHECK + bool "check" + help + Check is a unit testing framework for C. + + https://libcheck.github.io/check/ diff --git a/package/check/check.hash b/package/check/check.hash new file mode 100644 index 00000000..d00956c7 --- /dev/null +++ b/package/check/check.hash @@ -0,0 +1,4 @@ +# Locally computed +sha256 c1cc3d64975c0edd8042ab90d881662f1571278f8ea79d8e3c2cc877dac60001 check-0.15.1.tar.gz +# License files, locally calculated +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 COPYING.LESSER diff --git a/package/check/check.mk b/package/check/check.mk new file mode 100644 index 00000000..f80e6b63 --- /dev/null +++ b/package/check/check.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# check +# +################################################################################ + +CHECK_VERSION = 0.15.1 +CHECK_SITE = https://github.com/libcheck/check/releases/download/$(CHECK_VERSION) +CHECK_INSTALL_STAGING = YES +CHECK_DEPENDENCIES = host-pkgconf +CHECK_LICENSE = LGPL-2.1+ +CHECK_LICENSE_FILES = COPYING.LESSER + +# Having checkmk in the target makes no sense +define CHECK_REMOVE_CHECKMK + rm -f $(TARGET_DIR)/usr/bin/checkmk +endef +CHECK_POST_INSTALL_TARGET_HOOKS += CHECK_REMOVE_CHECKMK + +$(eval $(autotools-package)) diff --git a/package/checkpolicy/Config.in b/package/checkpolicy/Config.in new file mode 100644 index 00000000..ad769d22 --- /dev/null +++ b/package/checkpolicy/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_CHECKPOLICY + bool "checkpolicy" + depends on BR2_TOOLCHAIN_HAS_THREADS # libselinux + depends on !BR2_STATIC_LIBS # libselinux + select BR2_PACKAGE_LIBSELINUX + select BR2_PACKAGE_FLEX + help + checkpolicy is the SELinux policy compiler. It uses libsepol + to generate the binary policy. checkpolicy uses the static + libsepol since it deals with low level details of the policy + that have not been encapsulated/abstracted by a proper + shared library interface. + + http://selinuxproject.org/page/Main_Page + +comment "checkpolicy needs a toolchain w/ threads, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/checkpolicy/Config.in.host b/package/checkpolicy/Config.in.host new file mode 100644 index 00000000..240a5b6d --- /dev/null +++ b/package/checkpolicy/Config.in.host @@ -0,0 +1,10 @@ +config BR2_PACKAGE_HOST_CHECKPOLICY + bool "host checkpolicy" + help + checkpolicy is the SELinux policy compiler. It uses libsepol + to generate the binary policy. checkpolicy uses the static + libsepol since it deals with low level details of the policy + that have not been encapsulated/abstracted by a proper + shared library interface. + + http://selinuxproject.org/page/Main_Page diff --git a/package/checkpolicy/checkpolicy.hash b/package/checkpolicy/checkpolicy.hash new file mode 100644 index 00000000..55f4f09f --- /dev/null +++ b/package/checkpolicy/checkpolicy.hash @@ -0,0 +1,5 @@ +# https://github.com/SELinuxProject/selinux/wiki/Releases +sha256 dfc7707070520c93b14fbbdfdbe081364d806bf28e3e79e10318c2594c77bbb2 checkpolicy-3.1.tar.gz + +# Hash for license file +sha256 204d8eff92f95aac4df6c8122bc1505f468f3a901e5a4cc08940e0ede1938994 COPYING diff --git a/package/checkpolicy/checkpolicy.mk b/package/checkpolicy/checkpolicy.mk new file mode 100644 index 00000000..86eaffcc --- /dev/null +++ b/package/checkpolicy/checkpolicy.mk @@ -0,0 +1,50 @@ +################################################################################ +# +# checkpolicy +# +################################################################################ + +CHECKPOLICY_VERSION = 3.1 +CHECKPOLICY_SITE = https://github.com/SELinuxProject/selinux/releases/download/20200710 +CHECKPOLICY_LICENSE = GPL-2.0 +CHECKPOLICY_LICENSE_FILES = COPYING + +CHECKPOLICY_DEPENDENCIES = libselinux flex host-flex host-bison + +CHECKPOLICY_MAKE_OPTS = $(TARGET_CONFIGURE_OPTS) \ + LEX="$(HOST_DIR)/bin/flex" \ + YACC="$(HOST_DIR)/bin/bison -y" + +# DESTDIR is used at build time to find libselinux +define CHECKPOLICY_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(CHECKPOLICY_MAKE_OPTS) DESTDIR=$(STAGING_DIR) +endef + +define CHECKPOLICY_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(CHECKPOLICY_MAKE_OPTS) DESTDIR=$(STAGING_DIR) install + +endef + +define CHECKPOLICY_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(CHECKPOLICY_MAKE_OPTS) DESTDIR=$(TARGET_DIR) install +endef + +HOST_CHECKPOLICY_DEPENDENCIES = host-libselinux host-flex host-bison + +# PREFIX is used at build time to find host-libselinux +HOST_CHECKPOLICY_MAKE_OPTS = \ + $(HOST_CONFIGURE_OPTS) \ + PREFIX=$(HOST_DIR) \ + LEX="$(HOST_DIR)/bin/flex" \ + YACC="$(HOST_DIR)/bin/bison -y" + +define HOST_CHECKPOLICY_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) $(HOST_CHECKPOLICY_MAKE_OPTS) +endef + +define HOST_CHECKPOLICY_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) $(HOST_CHECKPOLICY_MAKE_OPTS) install +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/checksec/Config.in.host b/package/checksec/Config.in.host new file mode 100644 index 00000000..e4e8903b --- /dev/null +++ b/package/checksec/Config.in.host @@ -0,0 +1,17 @@ +config BR2_PACKAGE_HOST_CHECKSEC + bool "host checksec" + help + This tool provides a shell script to check the + properties of executables + (PIE,RELRO,Stack Canaries,Fortify Source). + It also has a kernel test mode that can run on target + for testing of PaX, ASLR, heap and config hardening. + + NOTE: when using this tool as a host tool, the tool + can offline check a target folder of elf files for + hardening features enabled in those elf files. There + are other features of this tool, like the kernel test + feature that are not functional offline, but require the + user to execute in a chroot or on target. + + https://github.com/slimm609/checksec.sh.git diff --git a/package/checksec/checksec.hash b/package/checksec/checksec.hash new file mode 100644 index 00000000..397cfe38 --- /dev/null +++ b/package/checksec/checksec.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 c5e2a8e188040fc34eb9362084778a2e25f8d1f888e47a2be09efa7cecd9c70d LICENSE.txt +sha256 d3c8e80bdd1cee0c2f0e60cb7a8a9482b82f651ea069e3a4453ae9a44072a632 checksec-2.2.2.tar.gz diff --git a/package/checksec/checksec.mk b/package/checksec/checksec.mk new file mode 100644 index 00000000..e46e8584 --- /dev/null +++ b/package/checksec/checksec.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# checksec +# +################################################################################ + +CHECKSEC_VERSION = 2.2.2 +CHECKSEC_SITE = $(call github,slimm609,checksec.sh,$(CHECKSEC_VERSION)) +CHECKSEC_LICENSE = BSD-3-Clause +CHECKSEC_LICENSE_FILES = LICENSE.txt + +define HOST_CHECKSEC_INSTALL_CMDS + $(INSTALL) -D -m 0755 $(@D)/checksec $(HOST_DIR)/bin/checksec +endef + +$(eval $(host-generic-package)) diff --git a/package/chipmunk/0001-Fix-build-failure-on-musl.patch b/package/chipmunk/0001-Fix-build-failure-on-musl.patch new file mode 100644 index 00000000..4485e937 --- /dev/null +++ b/package/chipmunk/0001-Fix-build-failure-on-musl.patch @@ -0,0 +1,37 @@ +From 231c1fb97785290aaac89ed74d7cb24eaa74b363 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 2 Sep 2018 12:05:22 +0200 +Subject: [PATCH] Fix build failure on musl + +Build fails on: +/home/test/autobuild/run/instance-0/output/build/chipmunk-7.0.2/src/cpHastySpace.c:11:24: fatal error: sys/sysctl.h: No such file or directory + +Indeed, sys/sysctl.h is not available on musl so include this header +only if __APPLE__ is defined as sysctlbyname is only used in this case. + +Fixes: + - http://autobuild.buildroot.org/results/e5be2f8eb9315a9054e1c8d854dec37cbb28eed7 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/slembcke/Chipmunk2D/pull/171] +--- + src/cpHastySpace.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/cpHastySpace.c b/src/cpHastySpace.c +index 8dca425..e087df8 100644 +--- a/src/cpHastySpace.c ++++ b/src/cpHastySpace.c +@@ -8,7 +8,9 @@ + + //#include + #ifndef _WIN32 ++#ifdef __APPLE__ + #include ++#endif + #include + #else + #ifndef WIN32_LEAN_AND_MEAN +-- +2.17.1 + diff --git a/package/chipmunk/Config.in b/package/chipmunk/Config.in new file mode 100644 index 00000000..7275d684 --- /dev/null +++ b/package/chipmunk/Config.in @@ -0,0 +1,12 @@ + +comment "chipmunk needs an OpenGL backend" + depends on !BR2_PACKAGE_HAS_LIBGL + +config BR2_PACKAGE_CHIPMUNK + bool "chipmunk" + depends on BR2_PACKAGE_HAS_LIBGL + help + Chipmunk2D is a simple, lightweight, fast and portable 2D + rigid body physics library written in C. + + http://chipmunk-physics.net/ diff --git a/package/chipmunk/chipmunk.hash b/package/chipmunk/chipmunk.hash new file mode 100644 index 00000000..fc34639a --- /dev/null +++ b/package/chipmunk/chipmunk.hash @@ -0,0 +1,5 @@ +# Locally calculated +sha256 1e6f093812d6130e45bdf4cb80280cb3c93d1e1833d8cf989d554d7963b7899a Chipmunk-7.0.3.tar.gz + +# Hash for license file: +sha256 109cedb0301cba4e05fa99241f162bdad015c9541ae84b420b0148ac1ea588e2 LICENSE.txt diff --git a/package/chipmunk/chipmunk.mk b/package/chipmunk/chipmunk.mk new file mode 100644 index 00000000..e85af5d1 --- /dev/null +++ b/package/chipmunk/chipmunk.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# chipmunk +# +################################################################################ + +CHIPMUNK_VERSION = 7.0.3 +CHIPMUNK_SITE = https://github.com/slembcke/Chipmunk2D/archive +CHIPMUNK_SOURCE = Chipmunk-$(CHIPMUNK_VERSION).tar.gz +CHIPMUNK_INSTALL_STAGING = YES +CHIPMUNK_LICENSE = MIT +CHIPMUNK_LICENSE_FILES = LICENSE.txt +CHIPMUNK_DEPENDENCIES = libgl +CHIPMUNK_CONF_OPTS = -DBUILD_DEMOS=OFF + +ifeq ($(BR2_STATIC_LIBS)$(BR2_SHARED_STATIC_LIBS),y) +CHIPMUNK_CONF_OPTS += -DBUILD_STATIC=ON -DINSTALL_STATIC=ON +else +CHIPMUNK_CONF_OPTS += -DBUILD_STATIC=OFF -DINSTALL_STATIC=OFF +endif + +ifeq ($(BR2_SHARED_LIBS)$(BR2_SHARED_STATIC_LIBS),y) +CHIPMUNK_CONF_OPTS += -DBUILD_SHARED=ON +else +CHIPMUNK_CONF_OPTS += -DBUILD_SHARED=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/chocolate-doom/0001-Remove-redundant-demoextend-definition.patch b/package/chocolate-doom/0001-Remove-redundant-demoextend-definition.patch new file mode 100644 index 00000000..bbfbdbb2 --- /dev/null +++ b/package/chocolate-doom/0001-Remove-redundant-demoextend-definition.patch @@ -0,0 +1,29 @@ +From a8fd4b1f563d24d4296c3e8225c8404e2724d4c2 Mon Sep 17 00:00:00 2001 +From: Jordan Christiansen +Date: Sun, 15 Mar 2020 16:55:33 -0500 +Subject: [PATCH] Remove redundant demoextend definition + +GCC 10 enables -fno-common by default, which causes the linker to fail when +there are multple definitions of a global variable. + +See https://gcc.gnu.org/gcc-10/porting_to.html + +[Retrieved from: +https://github.com/chocolate-doom/chocolate-doom/commit/a8fd4b1f563d24d4296c3e8225c8404e2724d4c2] +Signed-off-by: Fabrice Fontaine +--- + src/hexen/mn_menu.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/hexen/mn_menu.c b/src/hexen/mn_menu.c +index 059f45b3e..a97b7fcd1 100644 +--- a/src/hexen/mn_menu.c ++++ b/src/hexen/mn_menu.c +@@ -131,7 +131,6 @@ boolean MenuActive; + int InfoType; + int messageson = true; + boolean mn_SuicideConsole; +-boolean demoextend; // from h2def.h + + // PRIVATE DATA DEFINITIONS ------------------------------------------------ + diff --git a/package/chocolate-doom/Config.in b/package/chocolate-doom/Config.in new file mode 100644 index 00000000..406b04ec --- /dev/null +++ b/package/chocolate-doom/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_CHOCOLATE_DOOM + bool "chocolate-doom" + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS # sdl2 + select BR2_PACKAGE_SDL2 + select BR2_PACKAGE_SDL2_MIXER + select BR2_PACKAGE_SDL2_NET + help + Chocolate Doom is a set of conservative source ports for Doom, + Heretic, Hexen and Strife, with a philosophy of preserving the + look, feel, and bugs of the vanilla versions of each. + + http://www.chocolate-doom.org + +comment "chocolate-doom needs a toolchain w/ dynamic library" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS diff --git a/package/chocolate-doom/chocolate-doom.hash b/package/chocolate-doom/chocolate-doom.hash new file mode 100644 index 00000000..79eb1c6a --- /dev/null +++ b/package/chocolate-doom/chocolate-doom.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 d435d6177423491d60be706da9f07d3ab4fabf3e077ec2a3fc216e394fcfc8c7 chocolate-doom-3.0.1.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/chocolate-doom/chocolate-doom.mk b/package/chocolate-doom/chocolate-doom.mk new file mode 100644 index 00000000..8318c123 --- /dev/null +++ b/package/chocolate-doom/chocolate-doom.mk @@ -0,0 +1,38 @@ +################################################################################ +# +# chocolate-doom +# +################################################################################ + +CHOCOLATE_DOOM_VERSION = 3.0.1 +CHOCOLATE_DOOM_SITE = http://www.chocolate-doom.org/downloads/$(CHOCOLATE_DOOM_VERSION) +CHOCOLATE_DOOM_LICENSE = GPL-2.0+ +CHOCOLATE_DOOM_LICENSE_FILES = COPYING +CHOCOLATE_DOOM_DEPENDENCIES = host-pkgconf sdl2 sdl2_mixer sdl2_net + +# Avoid installing desktop entries, icons, etc. +CHOCOLATE_DOOM_INSTALL_TARGET_OPTS = DESTDIR=$(TARGET_DIR) install-exec + +CHOCOLATE_DOOM_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y) +CHOCOLATE_DOOM_CFLAGS += -O0 +endif + +CHOCOLATE_DOOM_CONF_ENV += CFLAGS="$(CHOCOLATE_DOOM_CFLAGS)" + +ifeq ($(BR2_PACKAGE_LIBPNG),y) +CHOCOLATE_DOOM_DEPENDENCIES += libpng +CHOCOLATE_DOOM_CONF_OPTS += --with-libpng +else +CHOCOLATE_DOOM_CONF_OPTS += --without-libpng +endif + +ifeq ($(BR2_PACKAGE_LIBSAMPLERATE),y) +CHOCOLATE_DOOM_DEPENDENCIES += libsamplerate +CHOCOLATE_DOOM_CONF_OPTS += --with-libsamplerate +else +CHOCOLATE_DOOM_CONF_OPTS += --without-libsamplerate +endif + +$(eval $(autotools-package)) diff --git a/package/chrony/0001-sys_linux-fix-build-with-older-kernel-headers.patch b/package/chrony/0001-sys_linux-fix-build-with-older-kernel-headers.patch new file mode 100644 index 00000000..892664f4 --- /dev/null +++ b/package/chrony/0001-sys_linux-fix-build-with-older-kernel-headers.patch @@ -0,0 +1,33 @@ +From 5dab78341bd515692f1b9ff8716a911c3ebf9ee1 Mon Sep 17 00:00:00 2001 +Message-Id: <5dab78341bd515692f1b9ff8716a911c3ebf9ee1.1611839550.git.baruch@tkos.co.il> +From: Baruch Siach +Date: Thu, 28 Jan 2021 15:02:40 +0200 +Subject: [PATCH] sys_linux: fix build with older kernel headers + +The renameat2 system call was introduced in kernel version 3.15. Fix +build against older headers. + +Signed-off-by: Baruch Siach +--- +Upstream status: commit a2372b0c3abfc85d11c1684c0fb6370cc329e5c4 + + sys_linux.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/sys_linux.c b/sys_linux.c +index 0b24445e173d..202da845edac 100644 +--- a/sys_linux.c ++++ b/sys_linux.c +@@ -547,7 +547,9 @@ SYS_Linux_EnableSystemCallFilter(int level, SYS_ProcessContext context) + SCMP_SYS(readlinkat), + SCMP_SYS(rename), + SCMP_SYS(renameat), ++#ifdef __NR_renameat2 + SCMP_SYS(renameat2), ++#endif + SCMP_SYS(stat), + SCMP_SYS(stat64), + SCMP_SYS(statfs), +-- +2.29.2 + diff --git a/package/chrony/Config.in b/package/chrony/Config.in new file mode 100644 index 00000000..158dc205 --- /dev/null +++ b/package/chrony/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_CHRONY + bool "chrony" + depends on BR2_USE_MMU # fork() + help + Chrony is a pair of programs which are used to maintain the + accuracy of the system clock. + + http://chrony.tuxfamily.org/ + +config BR2_PACKAGE_CHRONY_DEBUG_LOGGING + bool "enable debug logging support" + depends on BR2_PACKAGE_CHRONY + help + Enable support for debug logging output from Chrony when + enabled at runtime. If disabled, code for debug logging will + not be compiled in. diff --git a/package/chrony/S49chrony b/package/chrony/S49chrony new file mode 100644 index 00000000..f75233fe --- /dev/null +++ b/package/chrony/S49chrony @@ -0,0 +1,26 @@ +#!/bin/sh +# +# Start chrony + +[ -r /etc/default/chrony ] && . /etc/default/chrony + +case "$1" in + start) + printf "Starting chrony: " + chronyd $CHRONY_ARGS && echo "OK" || echo "FAIL" + ;; + stop) + printf "Stopping chrony: " + killall chronyd && echo "OK" || echo "FAIL" + ;; + restart|reload) + "$0" stop + sleep 1 + "$0" start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/chrony/chrony.hash b/package/chrony/chrony.hash new file mode 100644 index 00000000..87e0cf8e --- /dev/null +++ b/package/chrony/chrony.hash @@ -0,0 +1,4 @@ +# From https://listengine.tuxfamily.org/chrony.tuxfamily.org/chrony-announce/2020/10/msg00000.html +sha256 be27ea14c55e7a4434b2fa51d53018c7051c42fa6a3198c9aa6a1658bae0c625 chrony-4.0.tar.gz +# Locally calculated +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/chrony/chrony.mk b/package/chrony/chrony.mk new file mode 100644 index 00000000..dc162a6c --- /dev/null +++ b/package/chrony/chrony.mk @@ -0,0 +1,86 @@ +################################################################################ +# +# chrony +# +################################################################################ + +CHRONY_VERSION = 4.0 +CHRONY_SITE = http://download.tuxfamily.org/chrony +CHRONY_LICENSE = GPL-2.0 +CHRONY_LICENSE_FILES = COPYING +CHRONY_CPE_ID_VENDOR = tuxfamily +CHRONY_SELINUX_MODULES = chronyd +CHRONY_DEPENDENCIES = host-pkgconf + +CHRONY_CONF_OPTS = \ + --host-system=Linux \ + --host-machine=$(BR2_ARCH) \ + --prefix=/usr \ + --without-tomcrypt \ + $(if $(BR2_PACKAGE_CHRONY_DEBUG_LOGGING),--enable-debug,--disable-debug) + +ifeq ($(BR2_PACKAGE_LIBCAP),y) +CHRONY_DEPENDENCIES += libcap +else +CHRONY_CONF_OPTS += --without-libcap +endif + +ifeq ($(BR2_PACKAGE_LIBNSS),y) +CHRONY_DEPENDENCIES += libnss +else +CHRONY_CONF_OPTS += --without-nss +endif + +ifeq ($(BR2_PACKAGE_LIBSECCOMP),y) +CHRONY_CONF_OPTS += --enable-scfilter +CHRONY_DEPENDENCIES += libseccomp +else +CHRONY_CONF_OPTS += --without-seccomp +endif + +ifeq ($(BR2_PACKAGE_LIBEDIT),y) +CHRONY_DEPENDENCIES += libedit +else +CHRONY_CONF_OPTS += --without-editline --disable-readline +endif + +# If pps-tools is available, build it before so the package can use it +# (HAVE_SYS_TIMEPPS_H). +ifeq ($(BR2_PACKAGE_PPS_TOOLS),y) +CHRONY_DEPENDENCIES += pps-tools +endif + +ifeq ($(BR2_PACKAGE_GNUTLS),y) +CHRONY_DEPENDENCIES += gnutls +else +CHRONY_CONF_OPTS += --without-gnutls +endif + +ifeq ($(BR2_PACKAGE_NETTLE),y) +CHRONY_DEPENDENCIES += nettle +else +CHRONY_CONF_OPTS += --without-nettle +endif + +define CHRONY_CONFIGURE_CMDS + cd $(@D) && $(TARGET_CONFIGURE_OPTS) ./configure $(CHRONY_CONF_OPTS) +endef + +define CHRONY_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define CHRONY_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR="$(TARGET_DIR)" install +endef + +define CHRONY_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 package/chrony/S49chrony $(TARGET_DIR)/etc/init.d/S49chrony +endef + +define CHRONY_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/chrony/chrony.service \ + $(TARGET_DIR)/usr/lib/systemd/system/chrony.service +endef + +$(eval $(generic-package)) diff --git a/package/chrony/chrony.service b/package/chrony/chrony.service new file mode 100644 index 00000000..210122cf --- /dev/null +++ b/package/chrony/chrony.service @@ -0,0 +1,15 @@ +[Unit] +Description=Chrony Network Time Daemon +After=syslog.target network.target +Conflicts=systemd-timesyncd.service + +[Service] +# Turn off DNSSEC validation for hostname look-ups, since those need the +# correct time to work, but we likely won't acquire that without NTP. Let's +# break this chicken-and-egg cycle here. +Environment=SYSTEMD_NSS_RESOLVE_VALIDATE=0 +ExecStart=/usr/sbin/chronyd -n +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/package/cifs-utils/Config.in b/package/cifs-utils/Config.in new file mode 100644 index 00000000..f15d1e3d --- /dev/null +++ b/package/cifs-utils/Config.in @@ -0,0 +1,33 @@ +config BR2_PACKAGE_CIFS_UTILS + bool "cifs-utils" + # uses fork() + depends on BR2_USE_MMU + help + The in-kernel CIFS filesystem is generally the preferred + method for mounting SMB/CIFS shares on Linux. The in-kernel + CIFS filesystem relies on a set of user-space tools. That + package of tools is called cifs-utils. Although not really + part of Samba proper, these tools were originally part of + the Samba package. For several reasons, shipping these tools + as part of Samba was problematic and it was deemed better to + split them off into their own package. + + http://wiki.samba.org/index.php/LinuxCIFS_utils + +if BR2_PACKAGE_CIFS_UTILS + +config BR2_PACKAGE_CIFS_UTILS_SMBTOOLS + bool "smbtools" + depends on BR2_USE_WCHAR # python3 + depends on BR2_TOOLCHAIN_HAS_THREADS # python3 + depends on !BR2_STATIC_LIBS # python3 + select BR2_PACKAGE_PYTHON3 if !BR2_PACKAGE_PYTHON # runtime + help + Install the smb tools smbinfo and smb2-quota (python + implementations). + +comment "smbtools needs a toolchain w/ wchar, threads, dynamic library" + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS + +endif diff --git a/package/cifs-utils/cifs-utils.hash b/package/cifs-utils/cifs-utils.hash new file mode 100644 index 00000000..566a5c4b --- /dev/null +++ b/package/cifs-utils/cifs-utils.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +sha256 43d8786c8613caccfa84913081c1d62bc2409575854cf895b05b48af0863d056 cifs-utils-6.13.tar.bz2 + +# Hash for license file: +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/cifs-utils/cifs-utils.mk b/package/cifs-utils/cifs-utils.mk new file mode 100644 index 00000000..b29557cb --- /dev/null +++ b/package/cifs-utils/cifs-utils.mk @@ -0,0 +1,42 @@ +################################################################################ +# +# cifs-utils +# +################################################################################ + +CIFS_UTILS_VERSION = 6.13 +CIFS_UTILS_SOURCE = cifs-utils-$(CIFS_UTILS_VERSION).tar.bz2 +CIFS_UTILS_SITE = http://ftp.samba.org/pub/linux-cifs/cifs-utils +CIFS_UTILS_LICENSE = GPL-3.0+ +CIFS_UTILS_LICENSE_FILES = COPYING +CIFS_UTILS_CPE_ID_VENDOR = samba +# Missing install-sh in release tarball +CIFS_UTILS_AUTORECONF = YES +CIFS_UTILS_DEPENDENCIES = host-pkgconf + +# Let's disable PIE unconditionally. We want PIE to be enabled only by +# the global BR2_RELRO_FULL option. +CIFS_UTILS_CONF_OPTS = --disable-pie --disable-man + +# uses C11 code in smbinfo.c and mtab.c +CIFS_UTILS_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) -std=gnu11" + +ifeq ($(BR2_PACKAGE_KEYUTILS),y) +CIFS_UTILS_DEPENDENCIES += keyutils +endif + +define CIFS_UTILS_NO_WERROR + $(SED) 's/-Werror//' $(@D)/Makefile.in +endef + +CIFS_UTILS_POST_PATCH_HOOKS += CIFS_UTILS_NO_WERROR + +ifeq ($(BR2_PACKAGE_CIFS_UTILS_SMBTOOLS),) +define CIFS_UTILS_REMOVE_SMBTOOLS + rm -f $(TARGET_DIR)/usr/bin/smbinfo + rm -f $(TARGET_DIR)/usr/bin/smb2-quota +endef +CIFS_UTILS_POST_INSTALL_TARGET_HOOKS += CIFS_UTILS_REMOVE_SMBTOOLS +endif + +$(eval $(autotools-package)) diff --git a/package/circus/Config.in b/package/circus/Config.in new file mode 100644 index 00000000..832b04df --- /dev/null +++ b/package/circus/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_CIRCUS + bool "circus" + depends on BR2_PACKAGE_PYTHON3 # python-tornado + depends on BR2_INSTALL_LIBSTDCPP # pyzmq -> zeromq + depends on BR2_TOOLCHAIN_HAS_THREADS # pyzmq -> zeromq + select BR2_PACKAGE_PYTHON_IOWAIT # runtime + select BR2_PACKAGE_PYTHON_PSUTIL # runtime + select BR2_PACKAGE_PYTHON_PYZMQ # runtime + select BR2_PACKAGE_PYTHON_TORNADO # runtime + select BR2_PACKAGE_PYTHON_SETUPTOOLS # runtime + help + Circus is a program that will let you run and watch multiple + processes and sockets. + + https://circus.readthedocs.org/en/latest/ + +comment "circus needs Python 3 and a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_PACKAGE_PYTHON3 diff --git a/package/circus/circus.hash b/package/circus/circus.hash new file mode 100644 index 00000000..b9e1ef2e --- /dev/null +++ b/package/circus/circus.hash @@ -0,0 +1,4 @@ +# md5, sha256 from https://pypi.org/pypi/circus/json +md5 9887ddafebef7475c08ff2c8e5cc2fad circus-0.16.1.tar.gz +sha256 dd7c011eb67785a1c96a4db94a56a22810c6ed608cebf301152dabc771654c5d circus-0.16.1.tar.gz +sha256 3df739c05a4eed7efdf4987142658d2a4f1243e5f08e72a5ecedac5749c92a49 LICENSE diff --git a/package/circus/circus.mk b/package/circus/circus.mk new file mode 100644 index 00000000..8f650de1 --- /dev/null +++ b/package/circus/circus.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# circus +# +################################################################################ + +CIRCUS_VERSION = 0.16.1 +CIRCUS_SITE = https://files.pythonhosted.org/packages/09/8a/44a0b6b35ecf5dcf22bf51e4bcf188ec9e7ab9dd4c14330ba1b8bea51102 +CIRCUS_SETUP_TYPE = setuptools +CIRCUS_LICENSE = Apache-2.0 +CIRCUS_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/civetweb/Config.in b/package/civetweb/Config.in new file mode 100644 index 00000000..9e439690 --- /dev/null +++ b/package/civetweb/Config.in @@ -0,0 +1,40 @@ +config BR2_PACKAGE_CIVETWEB + bool "civetweb" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_CIVETWEB_SERVER if !BR2_PACKAGE_CIVETWEB_LIB + help + Full featured embedded web server with Lua support. + + https://sourceforge.net/projects/civetweb + +if BR2_PACKAGE_CIVETWEB + +config BR2_PACKAGE_CIVETWEB_SERVER + bool "enable the web server application" + help + Include the web server and its config files. + +config BR2_PACKAGE_CIVETWEB_LIB + bool "enable library for embedding" + help + Enable the civetweb library for embedding in another + application. + +config BR2_PACKAGE_CIVETWEB_WITH_LUA + bool "enable Lua support" + # required by the bundled Sqlite3 and Lua code + depends on !BR2_STATIC_LIBS + help + Enable Lua support in Civetweb. Note that this will use a + version of Lua and Sqlite bundled within the Civetweb + sources, and not the packages from Buildroot. + +comment "lua support needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +endif + +comment "civetweb needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/civetweb/civetweb.hash b/package/civetweb/civetweb.hash new file mode 100644 index 00000000..cf9d6768 --- /dev/null +++ b/package/civetweb/civetweb.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 a7ccc76c2f1b5f4e8d855eb328ed542f8fe3b882a6da868781799a98f4acdedc civetweb-1.13.tar.gz +sha256 291622dfbbf4fb35829726fbe97177b7227c0d4d6392b350660af73af4f86df8 LICENSE.md diff --git a/package/civetweb/civetweb.mk b/package/civetweb/civetweb.mk new file mode 100644 index 00000000..94fbb4f9 --- /dev/null +++ b/package/civetweb/civetweb.mk @@ -0,0 +1,93 @@ +################################################################################ +# +# civetweb +# +################################################################################ + +CIVETWEB_VERSION = 1.13 +CIVETWEB_SITE = $(call github,civetweb,civetweb,v$(CIVETWEB_VERSION)) +CIVETWEB_LICENSE = MIT +CIVETWEB_LICENSE_FILES = LICENSE.md +CIVETWEB_CPE_ID_VENDOR = civetweb_project + +CIVETWEB_CONF_OPTS = TARGET_OS=LINUX WITH_IPV6=1 \ + $(if $(BR2_INSTALL_LIBSTDCPP),WITH_CPP=1) +CIVETWEB_COPT = -DHAVE_POSIX_FALLOCATE=0 +CIVETWEB_LIBS = -lpthread -lm +CIVETWEB_SYSCONFDIR = /etc +CIVETWEB_HTMLDIR = /var/www +CIVETWEB_INSTALL_OPTS = \ + DOCUMENT_ROOT="$(CIVETWEB_HTMLDIR)" \ + CONFIG_FILE2="$(CIVETWEB_SYSCONFDIR)/civetweb.conf" \ + HTMLDIR="$(TARGET_DIR)$(CIVETWEB_HTMLDIR)" \ + SYSCONFDIR="$(TARGET_DIR)$(CIVETWEB_SYSCONFDIR)" + +ifeq ($(BR2_TOOLCHAIN_HAS_SYNC_4),) +CIVETWEB_COPT += -DNO_ATOMICS=1 +endif + +ifeq ($(BR2_PACKAGE_CIVETWEB_WITH_LUA),y) +CIVETWEB_CONF_OPTS += WITH_LUA=1 +CIVETWEB_LIBS += -ldl +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +CIVETWEB_COPT += -DNO_SSL_DL +CIVETWEB_LIBS += `$(PKG_CONFIG_HOST_BINARY) --libs openssl` +CIVETWEB_DEPENDENCIES += openssl host-pkgconf +else +CIVETWEB_COPT += -DNO_SSL +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +CIVETWEB_CONF_OPTS += WITH_ZLIB=1 +CIVETWEB_LIBS += -lz +CIVETWEB_DEPENDENCIES += zlib +endif + +ifeq ($(BR2_PACKAGE_CIVETWEB_SERVER),y) +CIVETWEB_BUILD_TARGETS += build +CIVETWEB_INSTALL_TARGETS += install +endif + +ifeq ($(BR2_PACKAGE_CIVETWEB_LIB),y) +CIVETWEB_INSTALL_STAGING = YES +CIVETWEB_INSTALL_TARGETS += install-headers + +ifeq ($(BR2_STATIC_LIBS)$(BR2_STATIC_SHARED_LIBS),y) +CIVETWEB_BUILD_TARGETS += lib +CIVETWEB_INSTALL_TARGETS += install-lib +endif + +ifeq ($(BR2_SHARED_LIBS)$(BR2_STATIC_SHARED_LIBS),y) +CIVETWEB_BUILD_TARGETS += slib +CIVETWEB_INSTALL_TARGETS += install-slib +endif + +endif # BR2_PACKAGE_CIVETWEB_LIB + +define CIVETWEB_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) $(CIVETWEB_BUILD_TARGETS) \ + $(CIVETWEB_CONF_OPTS) \ + COPT="$(CIVETWEB_COPT)" LIBS="$(CIVETWEB_LIBS)" +endef + +define CIVETWEB_INSTALL_STAGING_CMDS + mkdir -p $(STAGING_DIR)/usr/include + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) $(CIVETWEB_INSTALL_TARGETS) \ + PREFIX="$(STAGING_DIR)/usr" \ + $(CIVETWEB_INSTALL_OPTS) \ + $(CIVETWEB_CONF_OPTS) \ + COPT='$(CIVETWEB_COPT)' +endef + +define CIVETWEB_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/usr/include + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) $(CIVETWEB_INSTALL_TARGETS) \ + PREFIX="$(TARGET_DIR)/usr" \ + $(CIVETWEB_INSTALL_OPTS) \ + $(CIVETWEB_CONF_OPTS) \ + COPT='$(CIVETWEB_COPT)' +endef + +$(eval $(generic-package)) diff --git a/package/cjson/Config.in b/package/cjson/Config.in new file mode 100644 index 00000000..ee18fced --- /dev/null +++ b/package/cjson/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_CJSON + bool "cJSON" + help + An ultra-lightweight, portable, single-file, simple-as-can-be + ANSI-C compliant JSON parser, under MIT license. + + https://github.com/DaveGamble/cJSON diff --git a/package/cjson/cjson.hash b/package/cjson/cjson.hash new file mode 100644 index 00000000..b99fcee8 --- /dev/null +++ b/package/cjson/cjson.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 d4e77a38f540f2c37f55758f2666655314f1f51c716fea5f279659940efdcf04 cjson-1.7.13.tar.gz +sha256 a36dda207c36db5818729c54e7ad4e8b0c6fba847491ba64f372c1a2037b6d5c LICENSE diff --git a/package/cjson/cjson.mk b/package/cjson/cjson.mk new file mode 100644 index 00000000..47f8ecfd --- /dev/null +++ b/package/cjson/cjson.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# cjson +# +################################################################################ + +CJSON_VERSION = 1.7.13 +CJSON_SITE = $(call github,DaveGamble,cjson,v$(CJSON_VERSION)) +CJSON_INSTALL_STAGING = YES +CJSON_LICENSE = MIT +CJSON_LICENSE_FILES = LICENSE +CJSON_CPE_ID_VENDOR = cjson_project +# Set ENABLE_CUSTOM_COMPILER_FLAGS to OFF in particular to disable +# -fstack-protector-strong which depends on BR2_TOOLCHAIN_HAS_SSP +CJSON_CONF_OPTS += \ + -DENABLE_CJSON_TEST=OFF \ + -DENABLE_CUSTOM_COMPILER_FLAGS=OFF + +# If BUILD_SHARED_AND_STATIC_LIBS is set to OFF, cjson uses the +# standard BUILD_SHARED_LIBS option which is passed by the +# cmake-package infrastructure. +ifeq ($(BR2_SHARED_STATIC_LIBS),y) +CJSON_CONF_OPTS += -DBUILD_SHARED_AND_STATIC_LIBS=ON +else +CJSON_CONF_OPTS += -DBUILD_SHARED_AND_STATIC_LIBS=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/clamav/0001-clamdscan-proto.c-fix-build-error-due-to-missing-soc.patch b/package/clamav/0001-clamdscan-proto.c-fix-build-error-due-to-missing-soc.patch new file mode 100644 index 00000000..daac677e --- /dev/null +++ b/package/clamav/0001-clamdscan-proto.c-fix-build-error-due-to-missing-soc.patch @@ -0,0 +1,34 @@ +From 52fda6e6689e22866a39ec4273713fb6035c38b2 Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Mon, 7 May 2018 23:14:46 +0200 +Subject: [PATCH] clamdscan/proto.c: fix build error due to missing sockaddr_un + definition +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +proto.c: In function ‘dconnect’: +proto.c:86:67: error: invalid application of ‘sizeof’ to incomplete type ‘struct sockaddr_un’ + if (connect(sockd, (struct sockaddr *)&nixsock, sizeof(nixsock)) == 0) + +Signed-off-by: Bernd Kuhls +Upstream-status: http://lurker.clamav.net/message/20140928.130829.5494fd68.en.html +--- + clamdscan/proto.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/clamdscan/proto.c b/clamdscan/proto.c +index 0205f6da0..d3396732f 100644 +--- a/clamdscan/proto.c ++++ b/clamdscan/proto.c +@@ -42,6 +42,7 @@ + #include + #include + #include ++#include + #ifdef HAVE_SYS_SELECT_H + #include + #endif +-- +2.14.3 + diff --git a/package/clamav/0002-mbox-do-not-use-backtrace-if-using-uClibc-without-ba.patch b/package/clamav/0002-mbox-do-not-use-backtrace-if-using-uClibc-without-ba.patch new file mode 100644 index 00000000..d4be5c7b --- /dev/null +++ b/package/clamav/0002-mbox-do-not-use-backtrace-if-using-uClibc-without-ba.patch @@ -0,0 +1,36 @@ +From 053bac34b9f0f947c58fcdf80ac03d5a6b05aa12 Mon Sep 17 00:00:00 2001 +From: "Yann E. MORIN" +Date: Mon, 7 May 2018 23:15:58 +0200 +Subject: [PATCH] mbox: do not use backtrace if using uClibc without backtrace + support + +Since uClibc can be configured without support for backtrace, disable +the backtrace if we are building with a uClibc that was built without +backtrace. + +This is a bit hacky, and would greatly benefit from a test in ./configure +instead, but does nicely as a quick fix for now. + +Signed-off-by: "Yann E. MORIN" +Signed-off-by: Bernd Kuhls +[Bernd: rebased for 0.103.0] +--- + libclamav/mbox.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libclamav/mbox.c b/libclamav/mbox.c +index 71f540c0a..4851297a9 100644 +--- a/libclamav/mbox.c ++++ b/libclamav/mbox.c +@@ -91,7 +91,7 @@ + #include + #endif + +-#if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 ++#if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 && !defined(__UCLIBC__) || defined(__UCLIBC_HAS_BACKTRACE__) + #define HAVE_BACKTRACE + #endif + #endif +-- +2.14.3 + diff --git a/package/clamav/Config.in b/package/clamav/Config.in new file mode 100644 index 00000000..990a818b --- /dev/null +++ b/package/clamav/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_CLAMAV + bool "clamav" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS # dlopen + depends on BR2_USE_WCHAR + select BR2_PACKAGE_LIBCURL + select BR2_PACKAGE_LIBMSPACK + select BR2_PACKAGE_MUSL_FTS if !BR2_TOOLCHAIN_USES_GLIBC + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_ZLIB + help + ClamAV is an open source antivirus engine for detecting + trojans, viruses, malware & other malicious threats. + + http://www.clamav.net + +comment "clamav needs a toolchain w/ C++, dynamic library, threads, wchar" + depends on !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS \ + || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR + depends on BR2_USE_MMU diff --git a/package/clamav/clamav.hash b/package/clamav/clamav.hash new file mode 100644 index 00000000..67924098 --- /dev/null +++ b/package/clamav/clamav.hash @@ -0,0 +1,14 @@ +# Locally calculated +sha256 d4b5d0ac666262e423a326fb54778caa7c69624d6c3f9542895feb8478271bd2 clamav-0.103.2.tar.gz +sha256 0c4fd2fa9733fc9122503797648710851e4ee6d9e4969dd33fcbd8c63cd2f584 COPYING +sha256 d72a145c90918184a05ef65a04c9e6f7466faa59bc1b82c8f6a8ddc7ddcb9bed COPYING.bzip2 +sha256 dfb818a0d41411c6fb1c193c68b73018ceadd1994bda41ad541cbff292894bc6 COPYING.file +sha256 6dce638b76399e7521ad8e182d3e33e4496c85b3b69b6ff434b53017101e82ad COPYING.getopt +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 COPYING.LGPL +sha256 e3a9b913515a42f8ff3ef1551c3a2cdba383c39ed959729e0e2911219496ad74 COPYING.llvm +sha256 d96d71b66aa32c4a2d1619b9ca3347dafa9460bcf0fb5ac2408916067ad31dfc COPYING.lzma +sha256 accdcf2455c07b99abea59016b3663eaef926a92092d103bfaa25fed27cf6b24 COPYING.pcre +sha256 e2c1395a3d9fea6d5d25847c9d783db6e2cc8b085b4025861f459139c5dfd90b COPYING.regex +sha256 1faccc6b5c7b958fb807a3f573d5be9bf7889fe898f7e0617c544b05a81bfd00 COPYING.unrar +sha256 a20d6317c5384e8d4c05f9c31097878675d9429ec46090656166039cc10bc957 COPYING.YARA +sha256 c2f77553f8d870c5635b0dace0519253233f172b33ce1fdf6578610706294eee COPYING.zlib diff --git a/package/clamav/clamav.mk b/package/clamav/clamav.mk new file mode 100644 index 00000000..b3e1ca98 --- /dev/null +++ b/package/clamav/clamav.mk @@ -0,0 +1,102 @@ +################################################################################ +# +# clamav +# +################################################################################ + +CLAMAV_VERSION = 0.103.2 +CLAMAV_SITE = https://www.clamav.net/downloads/production +CLAMAV_LICENSE = GPL-2.0 +CLAMAV_LICENSE_FILES = COPYING COPYING.bzip2 COPYING.file COPYING.getopt \ + COPYING.LGPL COPYING.llvm COPYING.lzma COPYING.pcre COPYING.regex \ + COPYING.unrar COPYING.zlib +CLAMAV_CPE_ID_VENDOR = clamav +CLAMAV_SELINUX_MODULES = clamav +CLAMAV_DEPENDENCIES = \ + host-pkgconf \ + libcurl \ + libmspack \ + openssl \ + zlib \ + $(TARGET_NLS_DEPENDENCIES) + +# mmap cannot be detected when cross-compiling, needed for mempool support +CLAMAV_CONF_ENV = \ + ac_cv_c_mmap_private=yes \ + have_cv_ipv6=yes \ + OBJC=$(TARGET_CC) + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +CLAMAV_LIBS += -latomic +endif + +ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),) +CLAMAV_DEPENDENCIES += musl-fts +CLAMAV_LIBS += -lfts +endif + +CLAMAV_CONF_ENV += LIBS="$(CLAMAV_LIBS)" + +CLAMAV_CONF_OPTS = \ + --with-dbdir=/var/lib/clamav \ + --with-libcurl=$(STAGING_DIR)/usr \ + --with-openssl=$(STAGING_DIR)/usr \ + --with-system-libmspack=$(STAGING_DIR)/usr \ + --with-zlib=$(STAGING_DIR)/usr \ + --disable-zlib-vcheck \ + --disable-rpath \ + --disable-clamav \ + --disable-milter \ + --disable-llvm \ + --disable-clamdtop \ + --enable-mempool + +ifeq ($(BR2_PACKAGE_BZIP2),y) +CLAMAV_DEPENDENCIES += bzip2 +# autodetection gets confused if host has bzip2, so force it +CLAMAV_CONF_ENV += \ + ac_cv_libbz2_libs=-lbz2 \ + ac_cv_libbz2_ltlibs=-lbz2 +else +CLAMAV_CONF_OPTS += --disable-bzip2 +endif + +ifeq ($(BR2_PACKAGE_JSON_C),y) +CLAMAV_CONF_OPTS += --with-libjson=$(STAGING_DIR)/usr +CLAMAV_DEPENDENCIES += json-c +else +CLAMAV_CONF_OPTS += --without-libjson +endif + +ifeq ($(BR2_PACKAGE_LIBXML2),y) +CLAMAV_CONF_OPTS += --with-xml=$(STAGING_DIR)/usr +CLAMAV_DEPENDENCIES += libxml2 +else +CLAMAV_CONF_OPTS += --disable-xml +endif + +ifeq ($(BR2_PACKAGE_LIBICONV),y) +CLAMAV_CONF_OPTS += --with-iconv +CLAMAV_DEPENDENCIES += libiconv +else +CLAMAV_CONF_OPTS += --without-iconv +endif + +ifeq ($(BR2_PACKAGE_PCRE2),y) +CLAMAV_CONF_OPTS += --with-pcre=$(STAGING_DIR)/usr +CLAMAV_DEPENDENCIES += pcre2 +else ifeq ($(BR2_PACKAGE_PCRE),y) +CLAMAV_CONF_OPTS += --with-pcre=$(STAGING_DIR)/usr +CLAMAV_DEPENDENCIES += pcre +else +CLAMAV_CONF_OPTS += --without-pcre +endif + +ifeq ($(BR2_INIT_SYSTEMD),y) +CLAMAV_CONF_OPTS += --with-systemdsystemunitdir=/usr/lib/systemd/system +CLAMAV_DEPENDENCIES += systemd +else +CLAMAV_CONF_OPTS += --with-systemdsystemunitdir=no +endif + +$(eval $(autotools-package)) diff --git a/package/clang/Config.in b/package/clang/Config.in new file mode 100644 index 00000000..a67e7631 --- /dev/null +++ b/package/clang/Config.in @@ -0,0 +1,25 @@ +config BR2_PACKAGE_CLANG + bool "clang" + depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # std::shared_future + depends on !BR2_STATIC_LIBS + depends on BR2_USE_WCHAR # std::wstring + select BR2_PACKAGE_LLVM + help + Clang is a C/C++, Objective C/C++ and OpenCL C front-end + for the LLVM compiler. + + http://clang.llvm.org + +comment "clang needs a toolchain w/ wchar, threads, C++, gcc >= 4.8, dynamic library" + depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 \ + || BR2_STATIC_LIBS || !BR2_USE_WCHAR + +comment "clang needs a toolchain not affected by GCC bug 64735" + depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 diff --git a/package/clang/clang.hash b/package/clang/clang.hash new file mode 100644 index 00000000..067a2c04 --- /dev/null +++ b/package/clang/clang.hash @@ -0,0 +1,3 @@ +# locally calculated +sha256 5778512b2e065c204010f88777d44b95250671103e434f9dc7363ab2e3804253 clang-9.0.1.src.tar.xz +sha256 ebcd9bbf783a73d05c53ba4d586b8d5813dcdf3bbec50265860ccc885e606f47 LICENSE.TXT diff --git a/package/clang/clang.mk b/package/clang/clang.mk new file mode 100644 index 00000000..939f000c --- /dev/null +++ b/package/clang/clang.mk @@ -0,0 +1,108 @@ +################################################################################ +# +# clang +# +################################################################################ + +# LLVM, Clang and lld should be version bumped together +CLANG_VERSION = 9.0.1 +CLANG_SITE = https://github.com/llvm/llvm-project/releases/download/llvmorg-$(CLANG_VERSION) +CLANG_SOURCE = clang-$(CLANG_VERSION).src.tar.xz +CLANG_LICENSE = Apache-2.0 with exceptions +CLANG_LICENSE_FILES = LICENSE.TXT +CLANG_CPE_ID_VENDOR = llvm +CLANG_SUPPORTS_IN_SOURCE_BUILD = NO +CLANG_INSTALL_STAGING = YES + +HOST_CLANG_DEPENDENCIES = host-llvm host-libxml2 +CLANG_DEPENDENCIES = llvm host-clang + +# LLVM >= 9.0 will soon require C++14 support, building llvm 8.x using a +# toolchain using gcc < 5.1 gives an error but actually still works. Setting +# this option makes it still build with gcc >= 4.8. +# https://reviews.llvm.org/D57264 +HOST_CLANG_CONF_OPTS += -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON +CLANG_CONF_OPTS += -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON + +# This option is needed, otherwise multiple shared libs +# (libclangAST.so, libclangBasic.so, libclangFrontend.so, etc.) will +# be generated. As a final shared lib containing all these components +# (libclang.so) is also generated, this resulted in the following +# error when trying to use tools that use libclang: +# $ CommandLine Error: Option 'track-memory' registered more than once! +# $ LLVM ERROR: inconsistency in registered CommandLine options +# By setting BUILD_SHARED_LIBS to OFF, we generate multiple static +# libraries (the same way as host's clang build) and finally +# libclang.so to be installed on the target. +HOST_CLANG_CONF_OPTS += -DBUILD_SHARED_LIBS=OFF +CLANG_CONF_OPTS += -DBUILD_SHARED_LIBS=OFF + +# Default is Debug build, which requires considerably more disk space +# and build time. Release build is selected for host and target +# because the linker can run out of memory in Debug mode. +HOST_CLANG_CONF_OPTS += -DCMAKE_BUILD_TYPE=Release +CLANG_CONF_OPTS += -DCMAKE_BUILD_TYPE=Release + +CLANG_CONF_OPTS += -DCMAKE_CROSSCOMPILING=1 + +# We need to build tools because libclang is a tool +HOST_CLANG_CONF_OPTS += -DCLANG_BUILD_TOOLS=ON +CLANG_CONF_OPTS += -DCLANG_BUILD_TOOLS=ON + +HOST_CLANG_CONF_OPTS += \ + -DCLANG_BUILD_EXAMPLES=OFF \ + -DCLANG_INCLUDE_DOCS=OFF \ + -DCLANG_INCLUDE_TESTS=OFF + +CLANG_CONF_OPTS += \ + -DCLANG_BUILD_EXAMPLES=OFF \ + -DCLANG_INCLUDE_DOCS=OFF \ + -DCLANG_INCLUDE_TESTS=OFF + +HOST_CLANG_CONF_OPTS += -DLLVM_DIR=$(HOST_DIR)/lib/cmake/llvm \ + -DCLANG_DEFAULT_LINKER=$(TARGET_LD) +CLANG_CONF_OPTS += -DLLVM_DIR=$(STAGING_DIR)/usr/lib/cmake/llvm \ + -DCLANG_TABLEGEN:FILEPATH=$(HOST_DIR)/bin/clang-tblgen \ + -DLLVM_TABLEGEN_EXE:FILEPATH=$(HOST_DIR)/bin/llvm-tblgen + +# Clang can't be used as compiler on the target since there are no +# development files (headers) and other build tools. So remove clang +# binaries and some other unnecessary files from target. +CLANG_FILES_TO_REMOVE = \ + /usr/bin/clang* \ + /usr/bin/c-index-test \ + /usr/bin/git-clang-format \ + /usr/bin/scan-build \ + /usr/bin/scan-view \ + /usr/libexec/c++-analyzer \ + /usr/libexec/ccc-analyzer \ + /usr/share/clang \ + /usr/share/opt-viewer \ + /usr/share/scan-build \ + /usr/share/scan-view \ + /usr/share/man/man1/scan-build.1 \ + /usr/lib/clang + +define CLANG_CLEANUP_TARGET + rm -rf $(addprefix $(TARGET_DIR),$(CLANG_FILES_TO_REMOVE)) +endef +CLANG_POST_INSTALL_TARGET_HOOKS += CLANG_CLEANUP_TARGET + +# clang-tblgen is not installed by default, however it is necessary +# for cross-compiling clang +define HOST_CLANG_INSTALL_CLANG_TBLGEN + $(INSTALL) -D -m 0755 $(HOST_CLANG_BUILDDIR)/bin/clang-tblgen \ + $(HOST_DIR)/bin/clang-tblgen +endef +HOST_CLANG_POST_INSTALL_HOOKS = HOST_CLANG_INSTALL_CLANG_TBLGEN + +# This option must be enabled to link libclang dynamically against libLLVM.so +HOST_CLANG_CONF_OPTS += -DLLVM_LINK_LLVM_DYLIB=ON +CLANG_CONF_OPTS += -DLLVM_LINK_LLVM_DYLIB=ON + +# Prevent clang binaries from linking against LLVM static libs +HOST_CLANG_CONF_OPTS += -DLLVM_DYLIB_COMPONENTS=all +CLANG_CONF_OPTS += -DLLVM_DYLIB_COMPONENTS=all + +$(eval $(cmake-package)) +$(eval $(host-cmake-package)) diff --git a/package/clapack/0001-cmake-force-libf2c-to-be-built-as-a-static-library.patch b/package/clapack/0001-cmake-force-libf2c-to-be-built-as-a-static-library.patch new file mode 100644 index 00000000..8fede9da --- /dev/null +++ b/package/clapack/0001-cmake-force-libf2c-to-be-built-as-a-static-library.patch @@ -0,0 +1,32 @@ +From 4fe2f454e454d9e6b1e83b2ea67581990461ed36 Mon Sep 17 00:00:00 2001 +From: Samuel Martin +Date: Sat, 11 Jan 2014 22:05:25 +0100 +Subject: [PATCH 1/6] cmake: force libf2c to be built as a static library + +As stated in INSTALL/LAPACK_version.c, liblapack requires to be linked +against the static library of libf2c. + +Signed-off-by: Samuel Martin +--- + F2CLIBS/libf2c/CMakeLists.txt | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/F2CLIBS/libf2c/CMakeLists.txt b/F2CLIBS/libf2c/CMakeLists.txt +index 43d7b3f..f98d66a 100644 +--- a/F2CLIBS/libf2c/CMakeLists.txt ++++ b/F2CLIBS/libf2c/CMakeLists.txt +@@ -58,5 +58,10 @@ if(WIN32) + endif() + include_directories(${CLAPACK_SOURCE_DIR}/F2CLIBS/libf2c) + include_directories(${CLAPACK_BINARY_DIR}/F2CLIBS/libf2c) +-add_library(f2c ${OFILES} ${CMAKE_CURRENT_BINARY_DIR}/arith.h) ++add_library(f2c STATIC ${OFILES} ${CMAKE_CURRENT_BINARY_DIR}/arith.h) + set_property(TARGET f2c PROPERTY PREFIX lib) ++# Set fPIC on the library when build shared libraries is enabled, because ++# libf2c.a will most likely be included by some shared libraries in such cases. ++if(UNIX AND BUILD_SHARED_LIBS) ++ set_target_properties(f2c PROPERTIES COMPILE_FLAGS "-fPIC") ++endif() +-- +1.8.5.3 + diff --git a/package/clapack/0002-cmake-make-test-build-sensitive-to-BUILD_TESTING.patch b/package/clapack/0002-cmake-make-test-build-sensitive-to-BUILD_TESTING.patch new file mode 100644 index 00000000..eac4164f --- /dev/null +++ b/package/clapack/0002-cmake-make-test-build-sensitive-to-BUILD_TESTING.patch @@ -0,0 +1,80 @@ +From 834c221936d9c460b44e3a65b6fedfb3193f491b Mon Sep 17 00:00:00 2001 +From: Samuel Martin +Date: Sat, 11 Jan 2014 21:33:12 +0100 +Subject: [PATCH 2/6] cmake: make test build sensitive to BUILD_TESTING + +This patch prevent from wasting time building the tests if it's our +wish. + +The test build takes a significant amount of time, and the binaries +are not installed. + +Signed-off-by: Samuel Martin +--- + BLAS/TESTING/CMakeLists.txt | 3 +++ + CMakeLists.txt | 9 ++++++--- + TESTING/CMakeLists.txt | 4 ++++ + 3 files changed, 13 insertions(+), 3 deletions(-) + +diff --git a/BLAS/TESTING/CMakeLists.txt b/BLAS/TESTING/CMakeLists.txt +index ec2c587..e7dc0b7 100644 +--- a/BLAS/TESTING/CMakeLists.txt ++++ b/BLAS/TESTING/CMakeLists.txt +@@ -25,6 +25,9 @@ + # make single FRC=FRC + # + ####################################################################### ++if(NOT BUILD_TESTING) ++ return() ++endif() + + macro(add_blas_test name src) + get_filename_component(baseNAME ${src} NAME_WE) +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 320ccc6..0a362c0 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1,6 +1,5 @@ + cmake_minimum_required(VERSION 2.6) + project(CLAPACK C) +-enable_testing() + include(CTest) + + if(WIN32 AND NOT CYGWIN) +@@ -11,7 +10,9 @@ else() + set(SECOND_SRC ${CLAPACK_SOURCE_DIR}/INSTALL/second.c) + set(DSECOND_SRC ${CLAPACK_SOURCE_DIR}/INSTALL/dsecnd.c) + endif() +-enable_testing() ++if(NOT BUILD_TESTING) ++ enable_testing() ++endif() + option(USE_BLAS_WRAP "pre-pend f2c_ to each function in blas" OFF) + if(NOT USE_BLAS_WRAP) + # _zrotg_ seems to be missing in the wrap header +@@ -21,7 +22,9 @@ include_directories(${CLAPACK_SOURCE_DIR}/INCLUDE) + add_subdirectory(F2CLIBS) + add_subdirectory(BLAS) + add_subdirectory(SRC) +-add_subdirectory(TESTING) ++if(NOT BUILD_TESTING) ++ add_subdirectory(TESTING) ++endif() + set(CLAPACK_VERSION 3.2.1) + set(CPACK_PACKAGE_VERSION_MAJOR 3) + set(CPACK_PACKAGE_VERSION_MINOR 2) +diff --git a/TESTING/CMakeLists.txt b/TESTING/CMakeLists.txt +index d59359d..f6b083a 100644 +--- a/TESTING/CMakeLists.txt ++++ b/TESTING/CMakeLists.txt +@@ -1,3 +1,7 @@ ++if(NOT BUILD_TESTING) ++ return() ++endif() ++ + if(MSVC_VERSION) + # string(REPLACE "/STACK:10000000" "/STACK:900000000000000000" + # CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") +-- +1.8.5.3 + diff --git a/package/clapack/0003-cmake-do-not-try-to-run-arithchk-when-cross-compilin.patch b/package/clapack/0003-cmake-do-not-try-to-run-arithchk-when-cross-compilin.patch new file mode 100644 index 00000000..cd9828ff --- /dev/null +++ b/package/clapack/0003-cmake-do-not-try-to-run-arithchk-when-cross-compilin.patch @@ -0,0 +1,70 @@ +From a2f0669fac1f8e7183b15cf7d14f0e99a2d8b012 Mon Sep 17 00:00:00 2001 +From: Samuel Martin +Date: Sat, 11 Jan 2014 21:47:39 +0100 +Subject: [PATCH 3/6] cmake: do not try to run arithchk when cross-compiling to + generate sources + +Instead, use a predefined arith.h if provided, or generate a default one. + +The arithchk binary is still built (but not installed) to allow the user to +run it on its target and use it; so then allowing to build an optimized +blas library. + +Signed-off-by: Samuel Martin +--- + F2CLIBS/libf2c/CMakeLists.txt | 38 ++++++++++++++++++++++++++++---------- + 1 file changed, 28 insertions(+), 10 deletions(-) + +diff --git a/F2CLIBS/libf2c/CMakeLists.txt b/F2CLIBS/libf2c/CMakeLists.txt +index f98d66a..45a0804 100644 +--- a/F2CLIBS/libf2c/CMakeLists.txt ++++ b/F2CLIBS/libf2c/CMakeLists.txt +@@ -38,17 +38,35 @@ set(TIME dtime_.c etime_.c) + + # For INTEGER*8 support (which requires system-dependent adjustments to + # f2c.h), add ${QINT} to the OFILES assignment below... +-add_executable(arithchk arithchk.c) +-if(UNIX) +- target_link_libraries(arithchk m) ++if(CMAKE_CROSSCOMPILING) ++ if(ARITH_H) ++ message(STATUS "Using the user-defined '${ARITH_H}' as arith.h header.") ++ configure_file("${ARITH_H}" "${CMAKE_CURRENT_BINARY_DIR}/arith.h" COPYONLY) ++ else() ++ message(STATUS "No user-defined arith.h header.") ++ if(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/arith.h") ++ message(WARNING "Generating the default non-optimized 'arith.h' header. ++ ++To generate and provide a custom arith.h header: ++run the cross-compiled arithchk binary on your target, ++and use its output to fill your custom arith.h header.") ++ file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/arith.h" ++ "/* default, not optimized arith.h */") ++ endif() ++ endif() ++else() ++ add_executable(arithchk arithchk.c) ++ if(UNIX) ++ target_link_libraries(arithchk m) ++ endif() ++ set_target_properties(arithchk PROPERTIES COMPILE_DEFINITIONS ++ "NO_FPINIT;NO_LONG_LONG") ++ ADD_CUSTOM_COMMAND( ++ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/arith.h ++ COMMAND arithchk > ${CMAKE_CURRENT_BINARY_DIR}/arith.h ++ DEPENDS arithchk ++ ) + endif() +-set_target_properties(arithchk PROPERTIES COMPILE_DEFINITIONS +- "NO_FPINIT;NO_LONG_LONG") +-ADD_CUSTOM_COMMAND( +- OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/arith.h +- COMMAND arithchk > ${CMAKE_CURRENT_BINARY_DIR}/arith.h +- DEPENDS arithchk +- ) + + + set(OFILES ${MISC} ${POW} ${CX} ${DCX} ${REAL} ${DBL} ${INT} +-- +1.8.5.3 + diff --git a/package/clapack/0004-cmake-blas-add-library-and-header-install-rules.patch b/package/clapack/0004-cmake-blas-add-library-and-header-install-rules.patch new file mode 100644 index 00000000..e83b066d --- /dev/null +++ b/package/clapack/0004-cmake-blas-add-library-and-header-install-rules.patch @@ -0,0 +1,23 @@ +From 675111e8ffc179276a7e4950fe4a4eda4d38a703 Mon Sep 17 00:00:00 2001 +From: Samuel Martin +Date: Sat, 11 Jan 2014 21:48:32 +0100 +Subject: [PATCH 4/6] cmake: blas: add library and header install rules + +Signed-off-by: Samuel Martin +--- + BLAS/SRC/CMakeLists.txt | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/BLAS/SRC/CMakeLists.txt b/BLAS/SRC/CMakeLists.txt +index d1caff8..a5de5a1 100644 +--- a/BLAS/SRC/CMakeLists.txt ++++ b/BLAS/SRC/CMakeLists.txt +@@ -141,3 +141,5 @@ if(UNIX) + target_link_libraries(blas m) + endif() + target_link_libraries(blas f2c) ++install(TARGETS blas LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) ++install(FILES "${CLAPACK_SOURCE_DIR}/INCLUDE/blaswrap.h" DESTINATION include) +-- +1.8.5.3 + diff --git a/package/clapack/0005-cmake-lapack-add-library-and-header-install-rules.patch b/package/clapack/0005-cmake-lapack-add-library-and-header-install-rules.patch new file mode 100644 index 00000000..abba460b --- /dev/null +++ b/package/clapack/0005-cmake-lapack-add-library-and-header-install-rules.patch @@ -0,0 +1,24 @@ +From 9dfac0d55a31be59a856bad9d3a5071d65176597 Mon Sep 17 00:00:00 2001 +From: Samuel Martin +Date: Sat, 11 Jan 2014 21:49:22 +0100 +Subject: [PATCH 5/6] cmake: lapack: add library and header install rules + +Signed-off-by: Samuel Martin +--- + SRC/CMakeLists.txt | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/SRC/CMakeLists.txt b/SRC/CMakeLists.txt +index ac4cce3..aa60555 100644 +--- a/SRC/CMakeLists.txt ++++ b/SRC/CMakeLists.txt +@@ -377,4 +377,5 @@ if(BUILD_COMPLEX16) + endif() + add_library(lapack ${ALLOBJ} ${ALLXOBJ}) + target_link_libraries(lapack blas) +- ++install(TARGETS lapack LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) ++install(FILES "${CLAPACK_SOURCE_DIR}/INCLUDE/clapack.h" DESTINATION include) +-- +1.8.5.3 + diff --git a/package/clapack/0006-remove-uninit-f2c.patch b/package/clapack/0006-remove-uninit-f2c.patch new file mode 100644 index 00000000..83c2c5c7 --- /dev/null +++ b/package/clapack/0006-remove-uninit-f2c.patch @@ -0,0 +1,24 @@ +uninit.c includes glibc-specific not provided by musl. +Somewhat portable replacement is , which is available in musl +but requires non-trivial changes to uninit.c. + +f2c uses _uninit_f2c() from uninit.c to implement its -trapuv option, +pre-initializiing floating-point variables to NaN and asking FPU to send +SIGFPE whenever NaN value is encountered. + +clapack source has already been run through f2c without -trapuv, +so uninit.c code is not used anywhere and can be safely excluded. + +Signed-off-by: Alex Suykov + +--- a/F2CLIBS/libf2c/CMakeLists.txt ++++ b/F2CLIBS/libf2c/CMakeLists.txt +@@ -1,7 +1,7 @@ + set(MISC + f77vers.c i77vers.c main.c s_rnge.c abort_.c exit_.c getarg_.c iargc_.c + getenv_.c signal_.c s_stop.c s_paus.c system_.c cabs.c ctype.c +- derf_.c derfc_.c erf_.c erfc_.c sig_die.c uninit.c) ++ derf_.c derfc_.c erf_.c erfc_.c sig_die.c) + set(POW pow_ci.c pow_dd.c pow_di.c pow_hh.c pow_ii.c pow_ri.c pow_zi.c pow_zz.c) + set(CX c_abs.c c_cos.c c_div.c c_exp.c c_log.c c_sin.c c_sqrt.c) + set(DCX z_abs.c z_cos.c z_div.c z_exp.c z_log.c z_sin.c z_sqrt.c) diff --git a/package/clapack/0007-off64-t.patch b/package/clapack/0007-off64-t.patch new file mode 100644 index 00000000..bf66d3c9 --- /dev/null +++ b/package/clapack/0007-off64-t.patch @@ -0,0 +1,16 @@ +musl only provides off64_t, not __off64_t. +glibc and uclibc have both defined. + +Signed-off-by: Alex Suykov + +--- a/F2CLIBS/libf2c/sysdep1.h ++++ b/F2CLIBS/libf2c/sysdep1.h +@@ -10,7 +10,7 @@ + + #ifdef __linux__ + #define USE_LARGEFILE +-#define OFF_T __off64_t ++#define OFF_T off64_t + #endif + + #ifdef _AIX43 diff --git a/package/clapack/Config.in b/package/clapack/Config.in new file mode 100644 index 00000000..a912eb6c --- /dev/null +++ b/package/clapack/Config.in @@ -0,0 +1,28 @@ +comment "clapack needs a glibc toolchain" + depends on BR2_powerpc + depends on !BR2_TOOLCHAIN_USES_GLIBC + +config BR2_PACKAGE_CLAPACK + bool "cblas/clapack" + # _fpu_control is used on PowerPC, but not available with + # uClibc or musl + depends on !BR2_powerpc || BR2_TOOLCHAIN_USES_GLIBC + # assembler: Error: value out of range + depends on !BR2_m68k_cf + help + BLAS and LAPACK C implementation (f2c'ed version of). + + http://www.netlib.org/clapack/ + +config BR2_PACKAGE_CLAPACK_ARITH_H + string "Custom BLAS arith.h" + depends on BR2_PACKAGE_CLAPACK + help + To optimize BLAS library for the hardware, an 'arith.h' header + should be provided. + + If empty, the library will not be optimized by the compiler. + + In any case an 'arithchk' program is built + (but not installed), to be run on the target to generate this + arith.h header. diff --git a/package/clapack/clapack.hash b/package/clapack/clapack.hash new file mode 100644 index 00000000..ad586fac --- /dev/null +++ b/package/clapack/clapack.hash @@ -0,0 +1,5 @@ +# Locally calculated +sha256 0b3f782bc24845d85f36bafbff0f2f1384dc72df730fda4e7924ec1a70baca5a clapack-3.2.1-CMAKE.tgz +# License files, locally calculated +sha256 23014869214a231525b38c39fdb5f82364fa24154ac80fdcab2a79671460fd09 COPYING +sha256 44561c447e91203ddc747beeca5cc2794d95ee982c17c578670e4f0408bc3904 F2CLIBS/libf2c/Notice diff --git a/package/clapack/clapack.mk b/package/clapack/clapack.mk new file mode 100644 index 00000000..9a083f32 --- /dev/null +++ b/package/clapack/clapack.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# clapack +# +################################################################################ + +CLAPACK_VERSION = 3.2.1 +CLAPACK_SOURCE = clapack-$(CLAPACK_VERSION)-CMAKE.tgz +# This package provides 3 libraries: +# - libf2c.a (not installed) +# - libblas (statically linked with libf2c.a) +# - liblapack (statically linked with libf2c.a) +CLAPACK_LICENSE = HPND (libf2c), BSD-3-Clause (libblas and liblapack) +CLAPACK_LICENSE_FILES = F2CLIBS/libf2c/Notice COPYING +CLAPACK_SITE = http://www.netlib.org/clapack +CLAPACK_INSTALL_STAGING = YES + +ifneq ($(BR2_PACKAGE_CLAPACK_ARITH_H),) +CLAPACK_CONF_OPTS += -DARITH_H=$(BR2_PACKAGE_CLAPACK_ARITH_H) +endif + +$(eval $(cmake-package)) diff --git a/package/clinfo/Config.in b/package/clinfo/Config.in new file mode 100644 index 00000000..3df4feec --- /dev/null +++ b/package/clinfo/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_CLINFO + bool "clinfo" + depends on BR2_PACKAGE_HAS_LIBOPENCL + help + clinfo is a simple command-line application that enumerates + all possible (known) properties of the OpenCL platform and + devices available on the system. + + https://github.com/Oblomov/clinfo + +comment "clinfo needs an OpenCL provider" + depends on !BR2_PACKAGE_HAS_LIBOPENCL diff --git a/package/clinfo/clinfo.hash b/package/clinfo/clinfo.hash new file mode 100644 index 00000000..2528a9e6 --- /dev/null +++ b/package/clinfo/clinfo.hash @@ -0,0 +1,4 @@ +# locally calculated +sha256 3c506083e72e9ee09fc7d5de513be7c5eff0284f198a60fb60ab493f6f0a549a clinfo-3.0.20.11.20.tar.gz +sha256 a2010f343487d3f7618affe54f789f5487602331c0a8d03f49e9a7c547cf0499 legalcode.txt +sha256 2a7a9321be169ea6edbc6b1010e8f7bb0f4c1482a2f65c34a49e9719f129b79a LICENSE diff --git a/package/clinfo/clinfo.mk b/package/clinfo/clinfo.mk new file mode 100644 index 00000000..404e5f75 --- /dev/null +++ b/package/clinfo/clinfo.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# clinfo +# +################################################################################ + +CLINFO_VERSION = 3.0.20.11.20 +CLINFO_SITE = $(call github,Oblomov,clinfo,$(CLINFO_VERSION)) +CLINFO_LICENSE = CC0-1.0 +CLINFO_LICENSE_FILES = legalcode.txt LICENSE +CLINFO_DEPENDENCIES = libopencl + +define CLINFO_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) +endef + +define CLINFO_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 755 $(@D)/clinfo $(TARGET_DIR)/usr/bin/clinfo +endef + +$(eval $(generic-package)) diff --git a/package/cloop/cloop.hash b/package/cloop/cloop.hash new file mode 100644 index 00000000..7af1a959 --- /dev/null +++ b/package/cloop/cloop.hash @@ -0,0 +1,6 @@ +# From http://snapshot.debian.org/archive/debian/20150503T155713Z/pool/main/c/cloop/cloop_3.14.1.2.dsc +sha256 ac344225b3a5c4ddbb0d4b20cd4874798b51427b707b53e2ee9fbdada7497c95 cloop_3.14.1.2.tar.xz + +# Hash for license files +sha256 91df39d1816bfb17a4dda2d3d2c83b1f6f2d38d53e53e41e8f97ad5ac46a0cad advancecomp-1.15/COPYING +sha256 1b1f89e94e131e259b9e334565c5c3500d4b8aa755b75c3f145ddcdff3b89124 README diff --git a/package/cloop/cloop.mk b/package/cloop/cloop.mk new file mode 100644 index 00000000..046d98c8 --- /dev/null +++ b/package/cloop/cloop.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# cloop +# +################################################################################ + +CLOOP_VERSION = 3.14.1.2 +CLOOP_SOURCE = cloop_$(CLOOP_VERSION).tar.xz +CLOOP_SITE = http://snapshot.debian.org/archive/debian/20150503T155713Z/pool/main/c/cloop +CLOOP_LICENSE = GPL-2.0 (module), GPL-2.0+ (advancecomp) +CLOOP_LICENSE_FILES = README advancecomp-1.15/COPYING + +HOST_CLOOP_DEPENDENCIES = host-zlib + +define HOST_CLOOP_BUILD_CMDS + $(HOST_CONFIGURE_OPTS) $(MAKE1) -C $(@D) APPSONLY=yes \ + CFLAGS="$(HOST_CFLAGS) -D_GNU_SOURCE" +endef + +define HOST_CLOOP_INSTALL_CMDS + $(INSTALL) -m 0755 -d $(HOST_DIR)/bin + $(INSTALL) -m 755 $(@D)/create_compressed_fs $(HOST_DIR)/bin + $(INSTALL) -m 755 $(@D)/extract_compressed_fs $(HOST_DIR)/bin +endef + +$(eval $(host-generic-package)) diff --git a/package/cmake/0001-rename-cmake-rootfile.patch b/package/cmake/0001-rename-cmake-rootfile.patch new file mode 100644 index 00000000..a8cd3ee8 --- /dev/null +++ b/package/cmake/0001-rename-cmake-rootfile.patch @@ -0,0 +1,43 @@ +From 68d3b1dfbbd2f54bf81986d1d733deaf66658b15 Mon Sep 17 00:00:00 2001 +From: Davide Viti +Date: Thu, 14 Jul 2016 10:14:59 +0100 +Subject: [PATCH] rename cmake rootfile + +ctest fails on the target, because it cannot find CMake.cmake inside +CMAKE_DATA_DIR (typically set to "/usr/share/cmake-3.0"): all *.cmake +files are removed at build time via the target-finalize rule. + +This buildroot-specific patch makes sure ctest looks also for +"Modules/CMake.cmake.ctest" before complaining + +[Vincent: tweak patch for 3.6.3] +[James: tweak patch for 3.15.4] + +Signed-off-by: Davide Viti +Signed-off-by: Vicente Olivert Riera +Signed-off-by: James Hilliard +--- + Source/cmake.cxx | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/Source/cmake.cxx b/Source/cmake.cxx +index 3772f09985..c317e4af38 100644 +--- a/Source/cmake.cxx ++++ b/Source/cmake.cxx +@@ -1009,7 +1009,12 @@ int cmake::AddCMakePaths() + "Path to cpack program executable.", cmStateEnums::INTERNAL); + #endif + if (!cmSystemTools::FileExists( +- (cmSystemTools::GetCMakeRoot() + "/Modules/CMake.cmake"))) { ++ (cmSystemTools::GetCMakeRoot() + "/Modules/CMake.cmake")) && ++ !cmSystemTools::FileExists( ++ (cmSystemTools::GetCMakeRoot()+"/Modules/CMake.cmake.ctest") ++ ) ++ ) ++ { + // couldn't find modules + cmSystemTools::Error( + "Could not find CMAKE_ROOT !!!\n" +-- +2.20.1 + diff --git a/package/cmake/Config.in b/package/cmake/Config.in new file mode 100644 index 00000000..3c47fdcb --- /dev/null +++ b/package/cmake/Config.in @@ -0,0 +1,49 @@ +config BR2_PACKAGE_CMAKE_ARCH_SUPPORTS + bool + default y + depends on BR2_arm || BR2_armeb || BR2_aarch64 || \ + BR2_m68k || BR2_mips || BR2_mips64 || \ + BR2_mipsel || BR2_mips64el || BR2_powerpc || \ + BR2_powerpc64 || BR2_powerpc64le || BR2_sparc || \ + BR2_i386 || BR2_x86_64 || BR2_xtensa || \ + BR2_s390x + +config BR2_PACKAGE_CMAKE + bool + +config BR2_PACKAGE_CMAKE_CTEST + bool "ctest" + depends on BR2_PACKAGE_CMAKE_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 # from jsoncpp + depends on BR2_USE_WCHAR # libarchive + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # libuv + depends on BR2_USE_MMU # libuv + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # libuv + select BR2_PACKAGE_CMAKE + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_JSONCPP + select BR2_PACKAGE_LIBCURL + select BR2_PACKAGE_LIBARCHIVE + select BR2_PACKAGE_EXPAT + select BR2_PACKAGE_BZIP2 + select BR2_PACKAGE_XZ + select BR2_PACKAGE_LIBUV + select BR2_PACKAGE_RHASH + help + CTest is a testing tool distributed as a part of CMake. It + can be used to automate updating (using CVS for example), + configuring, building, testing, performing memory checking, + performing coverage, and submitting results to a CDash or + Dart dashboard system. + + http://www.cmake.org/ + +comment "ctest needs a toolchain w/ C++, wchar, dynamic library, gcc >= 4.7, NPTL" + depends on BR2_PACKAGE_CMAKE_ARCH_SUPPORTS + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \ + BR2_STATIC_LIBS || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 || \ + !BR2_TOOLCHAIN_HAS_THREADS_NPTL diff --git a/package/cmake/Config.in.host b/package/cmake/Config.in.host new file mode 100644 index 00000000..b2e210ee --- /dev/null +++ b/package/cmake/Config.in.host @@ -0,0 +1,11 @@ +config BR2_PACKAGE_HOST_CMAKE + bool "host cmake" + help + CMake is an open-source, cross-platform family of tools + designed to build, test and package software. CMake is used + to control the software compilation process using simple + platform and compiler independent configuration files, and + generate native makefiles and workspaces that can be used in + the compiler environment of your choice. + + http://www.cmake.org/ diff --git a/package/cmake/cmake.hash b/package/cmake/cmake.hash new file mode 100644 index 00000000..983c2929 --- /dev/null +++ b/package/cmake/cmake.hash @@ -0,0 +1,5 @@ +# From https://cmake.org/files/v3.15/cmake-3.15.5-SHA-256.txt +sha256 fbdd7cef15c0ced06bb13024bfda0ecc0dedbcaaaa6b8a5d368c75255243beb4 cmake-3.15.5.tar.gz + +# Locally calculated +sha256 dc628fb936a5d229296d42083f9a8218aa32204c016919e784404c9ec58776e9 Copyright.txt diff --git a/package/cmake/cmake.mk b/package/cmake/cmake.mk new file mode 100644 index 00000000..90fe868f --- /dev/null +++ b/package/cmake/cmake.mk @@ -0,0 +1,87 @@ +################################################################################ +# +# cmake +# +################################################################################ + +CMAKE_VERSION_MAJOR = 3.15 +CMAKE_VERSION = $(CMAKE_VERSION_MAJOR).5 +CMAKE_SITE = https://cmake.org/files/v$(CMAKE_VERSION_MAJOR) +CMAKE_LICENSE = BSD-3-Clause +CMAKE_LICENSE_FILES = Copyright.txt +CMAKE_CPE_ID_VENDOR = cmake_project +# Tool download MITM attack warning if using npm package to install cmake +CMAKE_IGNORE_CVES = CVE-2016-10642 + +# CMake is a particular package: +# * CMake can be built using the generic infrastructure or the cmake one. +# Since Buildroot has no requirement regarding the host system cmake +# program presence, it uses the generic infrastructure to build the +# host-cmake package, then the (target-)cmake package can be built +# using the cmake infrastructure; +# * CMake bundles its dependencies within its sources. This is the +# reason why the host-cmake package has no dependencies:, whereas +# the (target-)cmake package has a lot of dependencies, using only +# the system-wide libraries instead of rebuilding and statically +# linking with the ones bundled into the CMake sources. + +CMAKE_DEPENDENCIES = zlib jsoncpp libcurl libarchive expat bzip2 xz libuv rhash + +CMAKE_CONF_OPTS = \ + -DKWSYS_LFS_WORKS=TRUE \ + -DKWSYS_CHAR_IS_SIGNED=TRUE \ + -DCMAKE_USE_SYSTEM_LIBRARIES=1 \ + -DCTEST_USE_XMLRPC=OFF \ + -DBUILD_CursesDialog=OFF + +# Get rid of -I* options from $(HOST_CPPFLAGS) to prevent that a +# header available in $(HOST_DIR)/include is used instead of a +# CMake internal header, e.g. lzma* headers of the xz package +HOST_CMAKE_CFLAGS = $(shell echo $(HOST_CFLAGS) | sed -r "s%$(HOST_CPPFLAGS)%%") +HOST_CMAKE_CXXFLAGS = $(shell echo $(HOST_CXXFLAGS) | sed -r "s%$(HOST_CPPFLAGS)%%") + +define HOST_CMAKE_CONFIGURE_CMDS + (cd $(@D); \ + $(HOST_CONFIGURE_OPTS) \ + CFLAGS="$(HOST_CMAKE_CFLAGS)" \ + ./bootstrap --prefix=$(HOST_DIR) \ + --parallel=$(PARALLEL_JOBS) -- \ + -DCMAKE_C_FLAGS="$(HOST_CMAKE_CFLAGS)" \ + -DCMAKE_CXX_FLAGS="$(HOST_CMAKE_CXXFLAGS)" \ + -DCMAKE_EXE_LINKER_FLAGS="$(HOST_LDFLAGS)" \ + -DCMAKE_USE_OPENSSL:BOOL=OFF \ + -DBUILD_CursesDialog=OFF \ + ) +endef + +define HOST_CMAKE_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define HOST_CMAKE_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) install/fast +endef + +define CMAKE_REMOVE_EXTRA_DATA + rm $(TARGET_DIR)/usr/bin/{cmake,cpack} + rm -fr $(TARGET_DIR)/usr/share/cmake-$(CMAKE_VERSION_MAJOR)/{completions,editors} + rm -fr $(TARGET_DIR)/usr/share/cmake-$(CMAKE_VERSION_MAJOR)/{Help,include} +endef + +define CMAKE_INSTALL_CTEST_CFG_FILE + $(INSTALL) -m 0644 -D $(@D)/Modules/CMake.cmake \ + $(TARGET_DIR)/usr/share/cmake-$(CMAKE_VERSION_MAJOR)/Modules/CMake.cmake.ctest +endef + +CMAKE_POST_INSTALL_TARGET_HOOKS += CMAKE_REMOVE_EXTRA_DATA +CMAKE_POST_INSTALL_TARGET_HOOKS += CMAKE_INSTALL_CTEST_CFG_FILE + +define CMAKE_INSTALL_TARGET_CMDS + (cd $(@D); \ + $(HOST_MAKE_ENV) DESTDIR=$(TARGET_DIR) \ + cmake -P cmake_install.cmake \ + ) +endef + +$(eval $(cmake-package)) +$(eval $(host-generic-package)) diff --git a/package/cmocka/0001-Don-t-redefine-uintptr_t.patch b/package/cmocka/0001-Don-t-redefine-uintptr_t.patch new file mode 100644 index 00000000..4123d8db --- /dev/null +++ b/package/cmocka/0001-Don-t-redefine-uintptr_t.patch @@ -0,0 +1,77 @@ +From 28ce16b29911e5adc60140b572dee177adc7a178 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 18 Nov 2019 18:56:46 +0100 +Subject: [PATCH] Don't redefine uintptr_t + +Add a call to check_type_size in ConfigureChecks.cmake and use it in +include/cmocka.h to avoid the following redefinition error on riscv64: + +In file included from /data/buildroot/buildroot-test/instance-0/output/build/cmocka-1.1.5/src/cmocka.c:62: +/data/buildroot/buildroot-test/instance-0/output/build/cmocka-1.1.5/include/cmocka.h:132:28: error: conflicting types for 'uintptr_t' + typedef unsigned int uintptr_t; + ^~~~~~~~~ +In file included from /data/buildroot/buildroot-test/instance-0/output/host/riscv64-buildroot-linux-musl/sysroot/usr/include/stdint.h:20, + from /data/buildroot/buildroot-test/instance-0/output/host/riscv64-buildroot-linux-musl/sysroot/usr/include/inttypes.h:9, + from /data/buildroot/buildroot-test/instance-0/output/build/cmocka-1.1.5/src/cmocka.c:27: +/data/buildroot/buildroot-test/instance-0/output/host/riscv64-buildroot-linux-musl/sysroot/usr/include/bits/alltypes.h:104:24: note: previous declaration of 'uintptr_t' was here + typedef unsigned _Addr uintptr_t; + ^~~~~~~~~ + +Fixes: + - http://autobuild.buildroot.org/results/30922c18150ea62aefe123d1b7cd1444efab963f + +Signed-off-by: Fabrice Fontaine +Reviewed-by: Andreas Schneider +[Retrieved from: +https://gitlab.com/cmocka/cmocka/commit/28ce16b29911e5adc60140b572dee177adc7a178] +--- + ConfigureChecks.cmake | 3 +++ + config.h.cmake | 4 ++++ + include/cmocka.h | 2 +- + 3 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake +index fe8da35..028774f 100644 +--- a/ConfigureChecks.cmake ++++ b/ConfigureChecks.cmake +@@ -70,6 +70,9 @@ if (HAVE_TIME_H) + check_struct_has_member("struct timespec" tv_sec "time.h" HAVE_STRUCT_TIMESPEC) + endif (HAVE_TIME_H) + ++# TYPES ++check_type_size(uintptr_t UINTPTR_T) ++ + # FUNCTIONS + check_function_exists(calloc HAVE_CALLOC) + check_function_exists(exit HAVE_EXIT) +diff --git a/config.h.cmake b/config.h.cmake +index f8d79da..55fc69f 100644 +--- a/config.h.cmake ++++ b/config.h.cmake +@@ -75,6 +75,10 @@ + + #cmakedefine HAVE_STRUCT_TIMESPEC 1 + ++/***************************** TYPES *****************************/ ++ ++#cmakedefine HAVE_UINTPTR_T 1 ++ + /*************************** FUNCTIONS ***************************/ + + /* Define to 1 if you have the `calloc' function. */ +diff --git a/include/cmocka.h b/include/cmocka.h +index 3e923dd..0aa557e 100644 +--- a/include/cmocka.h ++++ b/include/cmocka.h +@@ -120,7 +120,7 @@ typedef uintmax_t LargestIntegralType; + ((LargestIntegralType)(value)) + + /* Smallest integral type capable of holding a pointer. */ +-#if !defined(_UINTPTR_T) && !defined(_UINTPTR_T_DEFINED) ++#if !defined(_UINTPTR_T) && !defined(_UINTPTR_T_DEFINED) && !defined(HAVE_UINTPTR_T) + # if defined(_WIN32) + /* WIN32 is an ILP32 platform */ + typedef unsigned int uintptr_t; +-- +2.22.0 + diff --git a/package/cmocka/Config.in b/package/cmocka/Config.in new file mode 100644 index 00000000..cf49d0f6 --- /dev/null +++ b/package/cmocka/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_CMOCKA + bool cmocka + depends on !BR2_STATIC_LIBS + help + cmocka is an elegant unit testing framework for C with support + for mock objects. It only requires the standard C library, + works on a range of computing platforms (including embedded) + and with different compilers. It is a fork of Google's very + popular cmockery unit testing framework to fix bugs and + support it in the future. + + https://cmocka.org + +comment "cmocka needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/cmocka/cmocka.hash b/package/cmocka/cmocka.hash new file mode 100644 index 00000000..007dd7a7 --- /dev/null +++ b/package/cmocka/cmocka.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 f0ccd8242d55e2fd74b16ba518359151f6f8383ff8aef4976e48393f77bba8b6 cmocka-1.1.5.tar.xz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 COPYING diff --git a/package/cmocka/cmocka.mk b/package/cmocka/cmocka.mk new file mode 100644 index 00000000..eafb4898 --- /dev/null +++ b/package/cmocka/cmocka.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# cmocka +# +################################################################################ + +CMOCKA_VERSION = 1.1.5 +CMOCKA_SOURCE = cmocka-$(CMOCKA_VERSION).tar.xz +CMOCKA_SITE = https://cmocka.org/files/1.1 +CMOCKA_LICENSE = Apache-2.0 +CMOCKA_LICENSE_FILES = COPYING +CMOCKA_INSTALL_STAGING = YES +CMOCKA_CONF_OPTS = -DWITH_EXAMPLES=OFF + +# cmocka only supports out of source builds +CMOCKA_SUPPORTS_IN_SOURCE_BUILD = NO + +# cmocka always builds a shared library, but you can optionally build a static +# library as well +ifeq ($(BR2_SHARED_STATIC_LIBS),y) +CMOCKA_CONF_OPTS += -DWITH_STATIC_LIB=ON +endif + +$(eval $(cmake-package)) diff --git a/package/cog/Config.in b/package/cog/Config.in new file mode 100644 index 00000000..a9ca7473 --- /dev/null +++ b/package/cog/Config.in @@ -0,0 +1,53 @@ +comment "cog needs wpewebkit and a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_PACKAGE_WPEWEBKIT || !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_COG + bool "cog" + depends on BR2_PACKAGE_WPEWEBKIT + depends on BR2_TOOLCHAIN_HAS_THREADS # dbus + depends on BR2_USE_MMU # dbus + select BR2_PACKAGE_DBUS + select BR2_PACKAGE_WAYLAND + help + Single "window" launcher for the WebKit WPE port, and + helper library for implementing WPE launcher. It does + not provide any chrome, and is suitable to be used + as a Web application container. + + https://github.com/Igalia/cog + +if BR2_PACKAGE_COG + +config BR2_PACKAGE_COG_PROGRAMS_HOME_URI + string "home uri" + default "https://wpewebkit.org" + help + Default URI to open when "cog" is launched. If an empty + string is used, there is no default and the URI to open + must be always specified in the command line. + +config BR2_PACKAGE_COG_PLATFORM_FDO + bool "FreeDesktop.org backend" + default y + select BR2_PACKAGE_LIBXKBCOMMON + select BR2_PACKAGE_WAYLAND_PROTOCOLS + help + Enable the FreeDesktop.org backend. Cog will interface with + a compositor over the Wayland protocol. + +config BR2_PACKAGE_COG_PLATFORM_DRM + bool "DRM backend" + depends on BR2_PACKAGE_HAS_UDEV # libinput + depends on BR2_PACKAGE_MESA3D_OPENGL_EGL # gbm + select BR2_PACKAGE_LIBDRM + select BR2_PACKAGE_LIBINPUT + help + Enable the DRM platform backend. Cog will interface directly + with video drivers that support kernel mode-setting (KMS) + via the DRM user-space API. + +comment "DRM platform needs mesa3d w/ EGL driver and GBM" + depends on !BR2_PACKAGE_MESA3D_OPENGL_EGL + +endif diff --git a/package/cog/cog.hash b/package/cog/cog.hash new file mode 100644 index 00000000..2cafe8ca --- /dev/null +++ b/package/cog/cog.hash @@ -0,0 +1,7 @@ +# From https://wpewebkit.org/releases/cog-0.8.1.tar.xz.sums +md5 21664fb04c9149dea6d68e13e6074276 cog-0.8.1.tar.xz +sha1 baabba7f0f6009c64ef0c4f7c5f807382cffef5d cog-0.8.1.tar.xz +sha256 b82e917eb764943b9859c631974f8f0e748b79ae87bb7a944f46c818740e0208 cog-0.8.1.tar.xz + +# Hashes for license files: +sha256 e6c42d93c68b292bcccf6d2ec3e13da85df90b718ba27c2c2a01053a9d009252 COPYING diff --git a/package/cog/cog.mk b/package/cog/cog.mk new file mode 100644 index 00000000..c7fc5e6f --- /dev/null +++ b/package/cog/cog.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# cog +# +################################################################################ + +COG_VERSION = 0.8.1 +COG_SITE = https://wpewebkit.org/releases +COG_SOURCE = cog-$(COG_VERSION).tar.xz +COG_INSTALL_STAGING = YES +COG_DEPENDENCIES = dbus wpewebkit wpebackend-fdo wayland +COG_LICENSE = MIT +COG_LICENSE_FILES = COPYING +COG_CONF_OPTS = \ + -DCOG_BUILD_PROGRAMS=ON \ + -DCOG_WESTON_DIRECT_DISPLAY=OFF \ + -DINSTALL_MAN_PAGES=OFF \ + -DCOG_HOME_URI='$(call qstrip,$(BR2_PACKAGE_COG_PROGRAMS_HOME_URI))' + +ifeq ($(BR2_PACKAGE_COG_PLATFORM_FDO),y) +COG_CONF_OPTS += -DCOG_PLATFORM_FDO=ON +COG_DEPENDENCIES += libxkbcommon wayland-protocols +else +COG_CONF_OPTS += -DCOG_PLATFORM_FDO=OFF +endif + +ifeq ($(BR2_PACKAGE_COG_PLATFORM_DRM),y) +COG_CONF_OPTS += -DCOG_PLATFORM_DRM=ON +COG_DEPENDENCIES += libdrm libinput +else +COG_CONF_OPTS += -DCOG_PLATFORM_DRM=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/collectd/0001-src-netlink.c-remove-REG_NOERROR.patch b/package/collectd/0001-src-netlink.c-remove-REG_NOERROR.patch new file mode 100644 index 00000000..14af0d76 --- /dev/null +++ b/package/collectd/0001-src-netlink.c-remove-REG_NOERROR.patch @@ -0,0 +1,43 @@ +From 5e600ae2ad370ddbb759e84ce55a7dfaa9a0bdd7 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 6 Sep 2020 14:17:23 +0200 +Subject: [PATCH] src/netlink.c: remove REG_NOERROR + +REG_NOERROR is used since version 5.12.0 and +https://github.com/collectd/collectd/commit/f7fd32e5209e188db7985a42054252fc4cbfe7c1 + +However, REG_NOERROR is not defined by musl, even GNU regex do not +mention REG_NOERROR, so just remove it to avoid the following build +failure: + +src/netlink.c: In function 'check_ignorelist': +src/netlink.c:243:51: error: 'REG_NOERROR' undeclared (first use in this function); did you mean 'REG_NOTBOL'? + if (regexec(i->rdevice, dev, 0, NULL, 0) != REG_NOERROR) + ^~~~~~~~~~~ + REG_NOTBOL + +Fixes: + - http://autobuild.buildroot.org/results/cd4d75888b5259b028132dd224be34f69bcbb702 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/collectd/collectd/pull/3569] +--- + src/netlink.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/netlink.c b/src/netlink.c +index 7a5da762..fac2fb1e 100644 +--- a/src/netlink.c ++++ b/src/netlink.c +@@ -240,7 +240,7 @@ static int check_ignorelist(const char *dev, const char *type, + for (ir_ignorelist_t *i = ir_ignorelist_head; i != NULL; i = i->next) { + #if HAVE_REGEX_H + if (i->rdevice != NULL) { +- if (regexec(i->rdevice, dev, 0, NULL, 0) != REG_NOERROR) ++ if (regexec(i->rdevice, dev, 0, NULL, 0)) + continue; + } else + #endif +-- +2.28.0 + diff --git a/package/collectd/Config.in b/package/collectd/Config.in new file mode 100644 index 00000000..82c24fdb --- /dev/null +++ b/package/collectd/Config.in @@ -0,0 +1,754 @@ +menuconfig BR2_PACKAGE_COLLECTD + bool "collectd" + # Uses fork() + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + help + collectd is a daemon which collects system performance + statistics periodically and provides mechanisms to store + the values in a variety of ways, for example in RRD files. + + http://collectd.org/ + +if BR2_PACKAGE_COLLECTD + +menu "match plugins" + +config BR2_PACKAGE_COLLECTD_EMPTY_COUNTER + bool "empty counter" + help + Match counter values which are currently zero. + +config BR2_PACKAGE_COLLECTD_HASHED + bool "hashed" + help + Match values using a hash function of the hostname. + +config BR2_PACKAGE_COLLECTD_REGEX + bool "regex" + help + Match values by their identifier based on regular expressions. + +config BR2_PACKAGE_COLLECTD_TIMEDIFF + bool "timediff" + help + Match values with an invalid timestamp. + +config BR2_PACKAGE_COLLECTD_VALUE + bool "value" + help + Select values by their data sources' values. + +endmenu + +menu "misc plugins" + +config BR2_PACKAGE_COLLECTD_AGGREGATION + bool "aggregation" + help + The Aggregate plugin allows to aggregate multiple values into + a single value using one or several consolidation functions, + e.g. summation and average. + +config BR2_PACKAGE_COLLECTD_LOGFILE + bool "logfile" + default y + help + Writes log messages to a file or STDOUT/STDERR. + +config BR2_PACKAGE_COLLECTD_LOGSTASH + bool "logstash" + select BR2_PACKAGE_YAJL + help + Writes log messages formatted as logstash JSON events. + +config BR2_PACKAGE_COLLECTD_LUA + bool "lua" + depends on BR2_PACKAGE_HAS_LUAINTERPRETER + help + Embeds a Lua interpreter into collectd and provides an + interface to collectd's plugin system. + +comment "lua support needs a Lua interpreter" + depends on !BR2_PACKAGE_HAS_LUAINTERPRETER + +config BR2_PACKAGE_COLLECTD_NOTIFY_EMAIL + bool "notify_email" + depends on !BR2_STATIC_LIBS # libesmtp + select BR2_PACKAGE_LIBESMTP + select BR2_PACKAGE_OPENSSL + help + Send an E-mail with the notification message to the + configured recipients. + +comment "notify_email needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +config BR2_PACKAGE_COLLECTD_NOTIFY_NAGIOS + bool "notify_nagios" + help + Sends notifications to Nagios as a passive check result. + +config BR2_PACKAGE_COLLECTD_SYSLOG + bool "syslog" + default y + help + Logs to the standard UNIX logging mechanism. + +config BR2_PACKAGE_COLLECTD_THRESHOLD + bool "threshold" + help + Checks values against configured thresholds and creates + notifications if values are out of bounds. + +endmenu + +menu "read plugins" + +comment "Select at least one for collectd to be useful" + +config BR2_PACKAGE_COLLECTD_APACHE + bool "apache" + select BR2_PACKAGE_LIBCURL + help + Collects Apache's mod_status information. + +config BR2_PACKAGE_COLLECTD_APCUPS + bool "apcups" + help + Collects UPS statistics from apcupsd. + +config BR2_PACKAGE_COLLECTD_BATTERY + bool "battery" + help + Collects the battery's charge, the drawn current and voltage. + +config BR2_PACKAGE_COLLECTD_BIND + bool "bind" + select BR2_PACKAGE_LIBCURL + select BR2_PACKAGE_LIBXML2 + help + Collects BIND DNS statistics. + +config BR2_PACKAGE_COLLECTD_BUDDYINFO + bool "buddyinfo" + help + Statistics from buddyinfo file about memory fragmentation. + +config BR2_PACKAGE_COLLECTD_CAPABILITIES + bool "capabilities" + depends on BR2_aarch64 || BR2_i386 || BR2_x86_64 # dmidecode + select BR2_PACKAGE_DMIDECODE # runtime + select BR2_PACKAGE_JANSSON + select BR2_PACKAGE_LIBMICROHTTPD + help + Collects selected static platform data using dmidecode and + expose it through micro embedded webserver. + +config BR2_PACKAGE_COLLECTD_CEPH + bool "ceph" + select BR2_PACKAGE_YAJL + help + Statistics from the Ceph distributed storage system. + +config BR2_PACKAGE_COLLECTD_CHRONY + bool "chrony" + help + Collects NTP data from the chrony NTP server. + +config BR2_PACKAGE_COLLECTD_CGROUPS + bool "cgroups" + help + Collects CGroups CPU usage accounting. + +config BR2_PACKAGE_COLLECTD_CONNTRACK + bool "conntrack" + help + Collects the number of entries in Linux's connection tracking + table. + +config BR2_PACKAGE_COLLECTD_CONTEXTSWITCH + bool "contextswitch" + help + Collects the number of context switches done by the operating + system. + +config BR2_PACKAGE_COLLECTD_CPU + bool "cpu" + help + Collects the amount of time spent by the CPU in various + states. + +config BR2_PACKAGE_COLLECTD_CPUFREQ + bool "cpufreq" + help + Collects the current CPU's frequency. + +config BR2_PACKAGE_COLLECTD_CPUSLEEP + bool "cpusleep" + help + Measures time spent by CPU in deep sleep mode. + +config BR2_PACKAGE_COLLECTD_CURL + bool "curl" + select BR2_PACKAGE_LIBCURL + help + Uses libcurl to read files and then parses them according + to the configuration. + +config BR2_PACKAGE_COLLECTD_CURL_JSON + bool "curl-json" + select BR2_PACKAGE_LIBCURL + select BR2_PACKAGE_YAJL + help + Queries JSON data using the cURL library and parses it + according to the user's configuration using YAJL. + +config BR2_PACKAGE_COLLECTD_CURL_XML + bool "curl-xml" + select BR2_PACKAGE_LIBCURL + select BR2_PACKAGE_LIBXML2 + help + Reads files using libcurl and parses it as XML. + +config BR2_PACKAGE_COLLECTD_DF + bool "df" + help + Collects file system usage information. + +config BR2_PACKAGE_COLLECTD_DISK + bool "disk" + help + Collects performance statistics of hard-disks and partitions. + +config BR2_PACKAGE_COLLECTD_DNS + bool "dns" + select BR2_PACKAGE_LIBPCAP + help + Collects statistics of DNS traffic using libpcap. + +config BR2_PACKAGE_COLLECTD_DPDK_TELEMETRY + bool "dpdk_telemetry" + select BR2_PACKAGE_JANSSON + help + Collects DPDK ethernet device metrics via dpdk_telemetry + library. + +config BR2_PACKAGE_COLLECTD_DRBD + bool "drbd" + help + Collect individual drbd resource statistics. + +config BR2_PACKAGE_COLLECTD_ENTROPY + bool "entropy" + help + Collects the available entropy on a system. + +config BR2_PACKAGE_COLLECTD_ETHSTAT + bool "ethstat" + help + Collects network interface card statistics. + +config BR2_PACKAGE_COLLECTD_EXEC + bool "exec" + help + Executes scripts and reads values back that are printed + to STDOUT by that program. + +config BR2_PACKAGE_COLLECTD_FHCOUNT + bool "fhcount" + help + File handles statistics. + +config BR2_PACKAGE_COLLECTD_FILECOUNT + bool "filecount" + help + Counts the number of files in a directory and all its + subdirectories. + +config BR2_PACKAGE_COLLECTD_FSCACHE + bool "fscache" + help + Collects information about the file-system based caching + infrastructure for network file-systems and other slow media. + +config BR2_PACKAGE_COLLECTD_GPS + bool "gps" + select BR2_PACKAGE_GPSD + help + Reports the number of sattelites seen by and precision + of a GPS receiver. + +config BR2_PACKAGE_COLLECTD_HUGEPAGES + bool "hugepages" + help + Reports the number of used and free hugepages on Linux. + +config BR2_PACKAGE_COLLECTD_INFINIBAND + bool "infiniband" + help + Attributes and counters for each port on each IB device. + +config BR2_PACKAGE_COLLECTD_INTERFACE + bool "interface" + help + Collects information about the traffic of network interfaces. + +config BR2_PACKAGE_COLLECTD_IPC + bool "ipc" + help + IPC counters: semaphores used, number of allocated segments + in shared memory and more. + +config BR2_PACKAGE_COLLECTD_IPTABLES + bool "iptables" + select BR2_PACKAGE_IPTABLES + help + Gather statistics from iptables packet filter. + +config BR2_PACKAGE_COLLECTD_IPVS + bool "ipvs" + help + Extracts statistics from IP Virtual Server (IPVS), the + transport-layer load-balancer of the LVS project. + It stores traffic and connections history for each of the + Real Servers (RS) behind a local Virtual Server (VS). + Collectd must be run on Directors (in LVS jargon). + +config BR2_PACKAGE_COLLECTD_IRQ + bool "irq" + help + Collects the number of interrupts. + +config BR2_PACKAGE_COLLECTD_LOAD + bool "load" + help + Collects the system load. + +config BR2_PACKAGE_COLLECTD_LOGPARSER + bool "logparser" + help + Plugin for filtering and parsing log messages. + +config BR2_PACKAGE_COLLECTD_MD + bool "md" + help + Collects software-RAID device information. + +config BR2_PACKAGE_COLLECTD_MDEVENTS + bool "mdevents" + help + Events from md (Linux Software RAID) devices. + +config BR2_PACKAGE_COLLECTD_MEMCACHEC + bool "memcachec" + depends on BR2_INSTALL_LIBSTDCPP + select BR2_PACKAGE_LIBMEMCACHED + help + Query and parse data from a memcache daemon. + +comment "memcachec needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + +config BR2_PACKAGE_COLLECTD_MEMCACHED + bool "memcached" + help + Collects statistics from a memcached daemon. + +config BR2_PACKAGE_COLLECTD_MEMORY + bool "memory" + help + Collects physical memory utilization. + +config BR2_PACKAGE_COLLECTD_MODBUS + bool "modbus" + select BR2_PACKAGE_LIBMODBUS + help + Reads register values from a modbus "slave" via Modbus/TCP. + +config BR2_PACKAGE_COLLECTD_MYSQL + bool "mysql" + depends on BR2_INSTALL_LIBSTDCPP # mysql + depends on BR2_USE_MMU # mysql + depends on BR2_TOOLCHAIN_HAS_THREADS # mysql + select BR2_PACKAGE_MYSQL + help + Connects to a MySQL database and issues a "show status" + command. + +config BR2_PACKAGE_COLLECTD_NETLINK + bool "netlink" + select BR2_PACKAGE_LIBMNL + help + Get statistics for interfaces, qdiscs, classes, and filters. + +config BR2_PACKAGE_COLLECTD_NFS + bool "nfs" + help + Collects information about the usage of the Network File + System. + +config BR2_PACKAGE_COLLECTD_NGINX + bool "nginx" + select BR2_PACKAGE_LIBCURL + help + Collects the number of requests handled by the nginx daemon + since startup and the number of current connections by state. + +config BR2_PACKAGE_COLLECTD_NTPD + bool "ntpd" + help + Queries an NTP server and extracts parameters. + +config BR2_PACKAGE_COLLECTD_NUT + bool "nut" + depends on BR2_INSTALL_LIBSTDCPP + select BR2_PACKAGE_NUT + help + The NUT plugin collects uninterruptible power supply (UPS) + statistics using the Network UPS Tools (NUT). + +comment "nut needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + +config BR2_PACKAGE_COLLECTD_OLSRD + bool "olsrd" + help + Reads information about meshed networks from olsrd. + +config BR2_PACKAGE_COLLECTD_ONEWIRE + bool "onewire" + select BR2_PACKAGE_OWFS + help + Collects temperature information from sensors connected over + the OneWire bus. + +config BR2_PACKAGE_COLLECTD_OPENLDAP + bool "openldap" + depends on BR2_USE_WCHAR + select BR2_PACKAGE_OPENLDAP + help + Read monitoring information from OpenLDAP's cn=Monitor + subtree. + +comment "openldap support needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR + +config BR2_PACKAGE_COLLECTD_OPENVPN + bool "openvpn" + help + Reads the status file of OpenVPN to collect statistics. + +config BR2_PACKAGE_COLLECTD_PING + bool "ping" + select BR2_PACKAGE_LIBOPING + help + Mesures network latency using ICMP "echo requests". + +config BR2_PACKAGE_COLLECTD_POSTGRESQL + bool "postgresql" + depends on BR2_USE_WCHAR # postgresql + select BR2_PACKAGE_POSTGRESQL + help + Connects to and executes SQL statements on a PostgreSQL + database. It then reads back the results and, depending on the + configuration, the returned values are then converted into + collectd 'value lists'. + +comment "postgresql support needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR + +config BR2_PACKAGE_COLLECTD_PROCESSES + bool "processes" + help + Collects the number of processes gruped by state. + +config BR2_PACKAGE_COLLECTD_PROTOCOLS + bool "protocols" + help + Collects information about the network protocols. + +config BR2_PACKAGE_COLLECTD_REDIS + bool "redis" + select BR2_PACKAGE_HIREDIS + help + Connects to one or more instances of Redis. + +config BR2_PACKAGE_COLLECTD_SENSORS + bool "sensors" + select BR2_PACKAGE_LM_SENSORS + help + Collects data from lm-sensors. + +config BR2_PACKAGE_COLLECTD_SERIAL + bool "serial" + help + Collects the traffic on serial interfaces. + +config BR2_PACKAGE_COLLECTD_SMART + bool "SMART" + depends on BR2_PACKAGE_HAS_UDEV # libatasmart + select BR2_PACKAGE_LIBATASMART + help + Collect SMART statistics, notably load cycle count, + temperature and bad sectors. + +comment "SMART requires udev to be enabled" + depends on !BR2_PACKAGE_HAS_UDEV + +config BR2_PACKAGE_COLLECTD_STATSD + bool "StatsD" + help + StatsD network protocol to allow clients to report "events". + +config BR2_PACKAGE_COLLECTD_SNMP + bool "snmp" + select BR2_PACKAGE_NETSNMP + help + Reads values from SNMP devices. + +config BR2_PACKAGE_COLLECTD_SWAP + bool "swap" + help + Collects the amount of memory currently written to disk. + +config BR2_PACKAGE_COLLECTD_SYNPROXY + bool "synproxy" + help + Synproxy stats plugin. + +config BR2_PACKAGE_COLLECTD_TABLE + bool "table" + help + Parses table-like structured plain-text files. + +config BR2_PACKAGE_COLLECTD_TAIL + bool "tail" + help + Tails log files and each line is given to one or more matches + which test if the line is relevant for any statistics. + +config BR2_PACKAGE_COLLECTD_TAIL_CSV + bool "tail csv" + help + Follows (tails) files in CSV format, parses each line and + submits extracted values. + +config BR2_PACKAGE_COLLECTD_TCPCONNS + bool "tcpconns" + help + Counts the number of TCP connections to/from a specified port. + +config BR2_PACKAGE_COLLECTD_THERMAL + bool "thermal" + help + Reads ACPI thermal zone information. + +config BR2_PACKAGE_COLLECTD_UBI + bool "ubi" + help + UBI (Unsorted Block Images) is an erase block management layer + for flash memory devices. UBI serves two purposes, tracking + NAND flash bad blocks and providing wear leveling. + This plugin collects some stats about UBI devices: + * bad physical underlying blocks (bad_peb_count) + * max erase counter value (max_ec) + +config BR2_PACKAGE_COLLECTD_UPTIME + bool "uptime" + help + Keeps track of the system uptime. + +config BR2_PACKAGE_COLLECTD_USERS + bool "users" + help + Counts the number of users currently logged in. + +config BR2_PACKAGE_COLLECTD_VMEM + bool "vmem" + help + Collects information about the virtual memory subsystem. + +config BR2_PACKAGE_COLLECTD_WIRELESS + bool "wireless" + help + Collects signal quality, power and noise ratio for WLAN cards. + +config BR2_PACKAGE_COLLECTD_ZOOKEEPER + bool "zookeeper" + help + Read data from Zookeeper's MNTR command. + +endmenu + +menu "target plugins" + +config BR2_PACKAGE_COLLECTD_NOTIFICATION + bool "notification" + help + Create and dispatch a notification. + +config BR2_PACKAGE_COLLECTD_REPLACE + bool "replace" + help + Replace parts of an identifier using regular expressions. + +config BR2_PACKAGE_COLLECTD_SCALE + bool "scale" + help + Scale (multiply) values by an arbitrary number. + +config BR2_PACKAGE_COLLECTD_SET + bool "set" + help + Set (overwrite) entire parts of an identifier. + +endmenu + +menu "write plugins" + +comment "Select at least one for collectd to be useful" + +config BR2_PACKAGE_COLLECTD_AMQP + bool "amqp" + select BR2_PACKAGE_OPENSSL # needs rabbitmq-c with ssl support + select BR2_PACKAGE_RABBITMQ_C + help + Send/receive values via the Advanced Message Queuing Protocol + (AMQP). + +config BR2_PACKAGE_COLLECTD_CSV + bool "csv" + help + Writes values to a plain-text file in Comma Separated Values + format. + +config BR2_PACKAGE_COLLECTD_GRAPHITE + bool "graphite" + help + Writes data collected to Carbon (Graphite's) storage API. + http://graphite.wikidot.com/start + +config BR2_PACKAGE_COLLECTD_GRPC + bool "grpc" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 || BR2_TOOLCHAIN_HAS_ATOMIC # grpc + depends on BR2_INSTALL_LIBSTDCPP # grpc -> protobuf + depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS # grpc -> protobuf + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # grpc -> libabseil-cpp + depends on BR2_HOST_GCC_AT_LEAST_4_9 # grpc -> host-libabseil-cpp + depends on BR2_PACKAGE_LIBABSEIL_CPP_ARCH_SUPPORTS # grpc + select BR2_PACKAGE_GRPC + help + Send/receive values using the gRPC protocol. + +comment "grpc needs a toolchain w/ C++, gcc >= 4.9, host gcc >= 4.9" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 || BR2_TOOLCHAIN_HAS_ATOMIC + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 \ + || !BR2_HOST_GCC_AT_LEAST_4_9 + depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS + depends on BR2_PACKAGE_LIBABSEIL_CPP_ARCH_SUPPORTS # grpc + +config BR2_PACKAGE_COLLECTD_MQTT + bool "mqtt" + select BR2_PACKAGE_MOSQUITTO + help + Sends metrics to and/or receives metrics from an MQTT broker. + +config BR2_PACKAGE_COLLECTD_NETWORK + bool "network" + help + Send/receive values from other instances of collectd. + +config BR2_PACKAGE_COLLECTD_NETWORK_GCRYPT + bool "crypto support" + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgcrypt + depends on BR2_PACKAGE_COLLECTD_NETWORK + select BR2_PACKAGE_LIBGCRYPT + help + Enable crypto support + +config BR2_PACKAGE_COLLECTD_RRDTOOL + bool "rrdtool" + depends on BR2_USE_WCHAR # rrdtool + select BR2_PACKAGE_RRDTOOL + help + Writes values to RRD-files. + +comment "rrdtool support needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR + +config BR2_PACKAGE_COLLECTD_RIEMANN + bool "riemann" + # riemann-c-client -> protobuf-c + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86" + select BR2_PACKAGE_RIEMANN_C_CLIENT + select BR2_PACKAGE_LIBTOOL + help + Sends data to Riemann, a stream processing and monitoring + system. + +config BR2_PACKAGE_COLLECTD_UNIXSOCK + bool "unixsock" + help + Opens a UNIX domain socket and accepts connections. + One can send commands to the daemon and receive information. + +config BR2_PACKAGE_COLLECTD_WRITEHTTP + bool "write_http" + select BR2_PACKAGE_LIBCURL + help + Sends values collected to a web-server using HTTP POST and + PUTVAL. + +config BR2_PACKAGE_COLLECTD_WRITEINFLUXDBUDP + bool "write_influxdb_udp" + help + Sends data to an instance of InfluxDB using the "Line + Protocol". + +config BR2_PACKAGE_COLLECTD_WRITELOG + bool "write_log" + help + Writes data to the log. + +config BR2_PACKAGE_COLLECTD_WRITEPROMETHEUS + bool "write_prometheus" + depends on BR2_INSTALL_LIBSTDCPP # protobuf-c + depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86" # protobuf-c + select BR2_PACKAGE_LIBMICROHTTPD + select BR2_PACKAGE_PROTOBUF_C + help + Publishes values using an embedded HTTP server, in a format + compatible with Prometheus' collectd_exporter. + +comment "write_prometheus needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86" + +config BR2_PACKAGE_COLLECTD_WRITEREDIS + bool "write_redis" + select BR2_PACKAGE_HIREDIS + help + Sends data to Redis. + +config BR2_PACKAGE_COLLECTD_WRITESENSU + bool "write_sensu" + help + Sends data to Sensu, a stream processing and monitoring + system, via the Sensu client local TCP socket. + +config BR2_PACKAGE_COLLECTD_WRITETSDB + bool "write_tsdb" + help + Sends data OpenTSDB, a scalable no master, no shared state + time series database. + +endmenu + +endif + +comment "collectd needs a toolchain w/ threads, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS + depends on BR2_USE_MMU diff --git a/package/collectd/S90collectd b/package/collectd/S90collectd new file mode 100644 index 00000000..cf11c7b3 --- /dev/null +++ b/package/collectd/S90collectd @@ -0,0 +1,51 @@ +#!/bin/sh + +DAEMON="collectd" +EXEC="/usr/sbin/$DAEMON" +PIDFILE="/var/run/$DAEMON.pid" +COLLECTD_ARGS="" + +# shellcheck source=/dev/null +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON" + +start() { + printf 'Starting %s: ' "$DAEMON" + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon -S -q -p "$PIDFILE" -x "$EXEC" \ + -- $COLLECTD_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +case "$1" in + start|stop|restart) + "$1";; + reload) + restart;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/collectd/collectd.hash b/package/collectd/collectd.hash new file mode 100644 index 00000000..394904a1 --- /dev/null +++ b/package/collectd/collectd.hash @@ -0,0 +1,5 @@ +# Locally computed checksums +sha512 7a15e4c0ae587db4987d673a790a4f3bea1cab29ce24a506fb21fa7bd2f60bfec70867eaa1c1395cb5b0e0ae81a024fb6109b064da0ef50e7c146d2198871c70 collectd-5.12.0.tar.bz2 +sha256 5bae043042c19c31f77eb8464e56a01a5454e0b39fa07cf7ad0f1bfc9c3a09d6 collectd-5.12.0.tar.bz2 +sha1 af36fe83e2995270b5632fc21e5a001e6702cdce collectd-5.12.0.tar.bz2 +sha256 ed0409b2b1c30566dab5fcdaf46ee70e140c99788e22f0267645a9357b476ae4 COPYING diff --git a/package/collectd/collectd.mk b/package/collectd/collectd.mk new file mode 100644 index 00000000..7db753b3 --- /dev/null +++ b/package/collectd/collectd.mk @@ -0,0 +1,253 @@ +################################################################################ +# +# collectd +# +################################################################################ + +COLLECTD_VERSION = 5.12.0 +COLLECTD_SITE = \ + https://github.com/collectd/collectd/releases/download/collectd-$(COLLECTD_VERSION) +COLLECTD_SOURCE = collectd-$(COLLECTD_VERSION).tar.bz2 +COLLECTD_CONF_ENV = ac_cv_lib_yajl_yajl_alloc=yes +COLLECTD_INSTALL_STAGING = YES +COLLECTD_LICENSE = MIT (daemon, plugins), GPL-2.0 (plugins), LGPL-2.1 (plugins) +COLLECTD_LICENSE_FILES = COPYING +COLLECTD_CPE_ID_VENDOR = collectd + +# These require unmet dependencies, are fringe, pointless or deprecated +COLLECTD_PLUGINS_DISABLE = \ + apple_sensors aquaero ascent barometer dbi dpdkstat email \ + gmond hddtemp intel_rdt ipmi java lpar \ + madwifi mbmon mic multimeter netapp notify_desktop numa \ + oracle perl pf pinba powerdns python routeros \ + rrdcached sigrok tape target_v5upgrade teamspeak2 ted \ + tokyotyrant turbostat uuid varnish virt vserver write_kafka \ + write_mongodb xencpu xmms zfs_arc zone + +COLLECTD_CONF_ENV += LIBS="-lm" + +# +# NOTE: There's also a third availible setting "intswap", which might +# be needed on some old ARM hardware (see [2]), but is not being +# accounted for as per discussion [1] +# +# [1] http://lists.busybox.net/pipermail/buildroot/2017-November/206100.html +# [2] http://lists.busybox.net/pipermail/buildroot/2017-November/206251.html +# +ifeq ($(BR2_ENDIAN),"BIG") +COLLECTD_FP_LAYOUT=endianflip +else +COLLECTD_FP_LAYOUT=nothing +endif + +COLLECTD_CONF_OPTS += \ + --with-nan-emulation \ + --with-fp-layout=$(COLLECTD_FP_LAYOUT) \ + --with-perl-bindings=no \ + --disable-werror \ + $(foreach p, $(COLLECTD_PLUGINS_DISABLE), --disable-$(p)) \ + $(if $(BR2_PACKAGE_COLLECTD_AGGREGATION),--enable-aggregation,--disable-aggregation) \ + $(if $(BR2_PACKAGE_COLLECTD_AMQP),--enable-amqp,--disable-amqp) \ + $(if $(BR2_PACKAGE_COLLECTD_APACHE),--enable-apache,--disable-apache) \ + $(if $(BR2_PACKAGE_COLLECTD_APCUPS),--enable-apcups,--disable-apcups) \ + $(if $(BR2_PACKAGE_COLLECTD_BATTERY),--enable-battery,--disable-battery) \ + $(if $(BR2_PACKAGE_COLLECTD_BIND),--enable-bind,--disable-bind) \ + $(if $(BR2_PACKAGE_COLLECTD_BUDDYINFO),--enable-buddyinfo,--disable-buddyinfo) \ + $(if $(BR2_PACKAGE_COLLECTD_CAPABILITIES),--enable-capabilities,--disable-capabilities) \ + $(if $(BR2_PACKAGE_COLLECTD_CEPH),--enable-ceph,--disable-ceph) \ + $(if $(BR2_PACKAGE_COLLECTD_CHRONY),--enable-chrony,--disable-chrony) \ + $(if $(BR2_PACKAGE_COLLECTD_CGROUPS),--enable-cgroups,--disable-cgroups) \ + $(if $(BR2_PACKAGE_COLLECTD_CONNTRACK),--enable-conntrack,--disable-conntrack) \ + $(if $(BR2_PACKAGE_COLLECTD_CONTEXTSWITCH),--enable-contextswitch,--disable-contextswitch) \ + $(if $(BR2_PACKAGE_COLLECTD_CPU),--enable-cpu,--disable-cpu) \ + $(if $(BR2_PACKAGE_COLLECTD_CPUFREQ),--enable-cpufreq,--disable-cpufreq) \ + $(if $(BR2_PACKAGE_COLLECTD_CPUSLEEP),--enable-cpusleep,--disable-cpusleep) \ + $(if $(BR2_PACKAGE_COLLECTD_CSV),--enable-csv,--disable-csv) \ + $(if $(BR2_PACKAGE_COLLECTD_CURL),--enable-curl,--disable-curl) \ + $(if $(BR2_PACKAGE_COLLECTD_CURL_JSON),--enable-curl_json,--disable-curl_json) \ + $(if $(BR2_PACKAGE_COLLECTD_CURL_XML),--enable-curl_xml,--disable-curl_xml) \ + $(if $(BR2_PACKAGE_COLLECTD_DF),--enable-df,--disable-df) \ + $(if $(BR2_PACKAGE_COLLECTD_DISK),--enable-disk,--disable-disk) \ + $(if $(BR2_PACKAGE_COLLECTD_DNS),--enable-dns,--disable-dns) \ + $(if $(BR2_PACKAGE_COLLECTD_DPDK_TELEMETRY),--enable-dpdk_telemetry,--disable-dpdk_telemetry) \ + $(if $(BR2_PACKAGE_COLLECTD_DRBD),--enable-drbd,--disable-drbd) \ + $(if $(BR2_PACKAGE_COLLECTD_EMPTY_COUNTER),--enable-match_empty_counter,--disable-match_empty_counter) \ + $(if $(BR2_PACKAGE_COLLECTD_ENTROPY),--enable-entropy,--disable-entropy) \ + $(if $(BR2_PACKAGE_COLLECTD_ETHSTAT),--enable-ethstat,--disable-ethstat) \ + $(if $(BR2_PACKAGE_COLLECTD_EXEC),--enable-exec,--disable-exec) \ + $(if $(BR2_PACKAGE_COLLECTD_FHCOUNT),--enable-fhcount,--disable-fhcount) \ + $(if $(BR2_PACKAGE_COLLECTD_FILECOUNT),--enable-filecount,--disable-filecount) \ + $(if $(BR2_PACKAGE_COLLECTD_FSCACHE),--enable-fscache,--disable-fscache) \ + $(if $(BR2_PACKAGE_COLLECTD_GPS),--enable-gps,--disable-gps) \ + $(if $(BR2_PACKAGE_COLLECTD_GRAPHITE),--enable-write_graphite,--disable-write_graphite) \ + $(if $(BR2_PACKAGE_COLLECTD_GRPC),--enable-grpc,--disable-grpc) \ + $(if $(BR2_PACKAGE_COLLECTD_HASHED),--enable-match_hashed,--disable-match_hashed) \ + $(if $(BR2_PACKAGE_COLLECTD_HUGEPAGES),--enable-hugepages,--disable-hugepages) \ + $(if $(BR2_PACKAGE_COLLECTD_INFINIBAND),--enable-infiniband,--disable-infiniband) \ + $(if $(BR2_PACKAGE_COLLECTD_INTERFACE),--enable-interface,--disable-interface) \ + $(if $(BR2_PACKAGE_COLLECTD_IPC),--enable-ipc,--disable-ipc) \ + $(if $(BR2_PACKAGE_COLLECTD_IPTABLES),--enable-iptables,--disable-iptables) \ + $(if $(BR2_PACKAGE_COLLECTD_IPVS),--enable-ipvs,--disable-ipvs) \ + $(if $(BR2_PACKAGE_COLLECTD_IRQ),--enable-irq,--disable-irq) \ + $(if $(BR2_PACKAGE_COLLECTD_LOAD),--enable-load,--disable-load) \ + $(if $(BR2_PACKAGE_COLLECTD_LOGFILE),--enable-logfile,--disable-logfile) \ + $(if $(BR2_PACKAGE_COLLECTD_LOGPARSER),--enable-logparser,--disable-logparser) \ + $(if $(BR2_PACKAGE_COLLECTD_LOGSTASH),--enable-log_logstash,--disable-log_logstash) \ + $(if $(BR2_PACKAGE_COLLECTD_LUA),--enable-lua,--disable-lua) \ + $(if $(BR2_PACKAGE_COLLECTD_MD),--enable-md,--disable-md) \ + $(if $(BR2_PACKAGE_COLLECTD_MDEVENTS),--enable-mdevents,--disable-mdevents) \ + $(if $(BR2_PACKAGE_COLLECTD_MEMCACHEC),--enable-memcachec,--disable-memcachec) \ + $(if $(BR2_PACKAGE_COLLECTD_MEMCACHED),--enable-memcached,--disable-memcached) \ + $(if $(BR2_PACKAGE_COLLECTD_MEMORY),--enable-memory,--disable-memory) \ + $(if $(BR2_PACKAGE_COLLECTD_MODBUS),--enable-modbus,--disable-modbus) \ + $(if $(BR2_PACKAGE_COLLECTD_MQTT),--enable-mqtt,--disable-mqtt) \ + $(if $(BR2_PACKAGE_COLLECTD_MYSQL),--enable-mysql,--disable-mysql) \ + $(if $(BR2_PACKAGE_COLLECTD_NETLINK),--enable-netlink,--disable-netlink) \ + $(if $(BR2_PACKAGE_COLLECTD_NETWORK),--enable-network,--disable-network) \ + $(if $(BR2_PACKAGE_COLLECTD_NFS),--enable-nfs,--disable-nfs) \ + $(if $(BR2_PACKAGE_COLLECTD_NGINX),--enable-nginx,--disable-nginx) \ + $(if $(BR2_PACKAGE_COLLECTD_NOTIFICATION),--enable-target_notification,--disable-target_notification) \ + $(if $(BR2_PACKAGE_COLLECTD_NOTIFY_EMAIL),--enable-notify_email,--disable-notify_email) \ + $(if $(BR2_PACKAGE_COLLECTD_NOTIFY_NAGIOS),--enable-notify_nagios,--disable-notify_nagios) \ + $(if $(BR2_PACKAGE_COLLECTD_NTPD),--enable-ntpd,--disable-ntpd) \ + $(if $(BR2_PACKAGE_COLLECTD_NUT),--enable-nut,--disable-nut) \ + $(if $(BR2_PACKAGE_COLLECTD_OLSRD),--enable-olsrd,--disable-olsrd) \ + $(if $(BR2_PACKAGE_COLLECTD_ONEWIRE),--enable-onewire,--disable-onewire) \ + $(if $(BR2_PACKAGE_COLLECTD_OPENLDAP),--enable-openldap,--disable-openldap) \ + $(if $(BR2_PACKAGE_COLLECTD_OPENVPN),--enable-openvpn,--disable-openvpn) \ + $(if $(BR2_PACKAGE_COLLECTD_PING),--enable-ping,--disable-ping) \ + $(if $(BR2_PACKAGE_COLLECTD_POSTGRESQL),--enable-postgresql,--disable-postgresql) \ + $(if $(BR2_PACKAGE_COLLECTD_PROCESSES),--enable-processes,--disable-processes) \ + $(if $(BR2_PACKAGE_COLLECTD_PROTOCOLS),--enable-protocols,--disable-protocols) \ + $(if $(BR2_PACKAGE_COLLECTD_REDIS),--enable-redis,--disable-redis) \ + $(if $(BR2_PACKAGE_COLLECTD_REGEX),--enable-match_regex,--disable-match-regex) \ + $(if $(BR2_PACKAGE_COLLECTD_REPLACE),--enable-target_replace,--disable-target_replace) \ + $(if $(BR2_PACKAGE_COLLECTD_RIEMANN),--enable-write_riemann,--disable-write_riemann) \ + $(if $(BR2_PACKAGE_COLLECTD_RRDTOOL),--enable-rrdtool,--disable-rrdtool) \ + $(if $(BR2_PACKAGE_COLLECTD_SCALE),--enable-target_scale,--disable-target_scale) \ + $(if $(BR2_PACKAGE_COLLECTD_SENSORS),--enable-sensors,--disable-sensors) \ + $(if $(BR2_PACKAGE_COLLECTD_SERIAL),--enable-serial,--disable-serial) \ + $(if $(BR2_PACKAGE_COLLECTD_STATSD),--enable-statsd,--disable-statsd) \ + $(if $(BR2_PACKAGE_COLLECTD_SET),--enable-target_set,--disable-target_set) \ + $(if $(BR2_PACKAGE_COLLECTD_SMART),--enable-smart,--disable-smart) \ + $(if $(BR2_PACKAGE_COLLECTD_SNMP),--enable-snmp,--disable-snmp) \ + $(if $(BR2_PACKAGE_COLLECTD_SWAP),--enable-swap,--disable-swap) \ + $(if $(BR2_PACKAGE_COLLECTD_SYNPROXY),--enable-synproxy,--disable-synproxy) \ + $(if $(BR2_PACKAGE_COLLECTD_SYSLOG),--enable-syslog,--disable-syslog) \ + $(if $(BR2_PACKAGE_COLLECTD_TABLE),--enable-table,--disable-table) \ + $(if $(BR2_PACKAGE_COLLECTD_TAIL),--enable-tail,--disable-tail) \ + $(if $(BR2_PACKAGE_COLLECTD_TAIL_CSV),--enable-tail_csv,--disable-tail_csv) \ + $(if $(BR2_PACKAGE_COLLECTD_TCPCONNS),--enable-tcpconns,--disable-tcpconns) \ + $(if $(BR2_PACKAGE_COLLECTD_THERMAL),--enable-thermal,--disable-thermal) \ + $(if $(BR2_PACKAGE_COLLECTD_THRESHOLD),--enable-threshold,--disable-threshold) \ + $(if $(BR2_PACKAGE_COLLECTD_TIMEDIFF),--enable-match_timediff,--disable-match_timediff) \ + $(if $(BR2_PACKAGE_COLLECTD_UBI),--enable-ubi,--disable-ubi) \ + $(if $(BR2_PACKAGE_COLLECTD_UNIXSOCK),--enable-unixsock,--disable-unixsock) \ + $(if $(BR2_PACKAGE_COLLECTD_UPTIME),--enable-uptime,--disable-uptime) \ + $(if $(BR2_PACKAGE_COLLECTD_USERS),--enable-users,--disable-users) \ + $(if $(BR2_PACKAGE_COLLECTD_VALUE),--enable-match_value,--disable-match_value) \ + $(if $(BR2_PACKAGE_COLLECTD_VMEM),--enable-vmem,--disable-vmem) \ + $(if $(BR2_PACKAGE_COLLECTD_WIRELESS),--enable-wireless,--disable-wireless) \ + $(if $(BR2_PACKAGE_COLLECTD_WRITEHTTP),--enable-write_http,--disable-write_http) \ + $(if $(BR2_PACKAGE_COLLECTD_WRITEINFLUXDBUDP),--enable-write_influxdb_udp,--disable-write_influxdb_udp) \ + $(if $(BR2_PACKAGE_COLLECTD_WRITELOG),--enable-write_log,--disable-write_log) \ + $(if $(BR2_PACKAGE_COLLECTD_WRITEPROMETHEUS),--enable-write_prometheus,--disable-write_prometheus) \ + $(if $(BR2_PACKAGE_COLLECTD_WRITEREDIS),--enable-write_redis,--disable-write_redis) \ + $(if $(BR2_PACKAGE_COLLECTD_WRITESENSU),--enable-write_sensu,--disable-write_sensu) \ + $(if $(BR2_PACKAGE_COLLECTD_WRITETSDB),--enable-write_tsdb,--disable-write_tsdb) \ + $(if $(BR2_PACKAGE_COLLECTD_ZOOKEEPER),--enable-zookeeper,--disable-zookeeper) + +COLLECTD_DEPENDENCIES = \ + host-pkgconf \ + $(if $(BR2_PACKAGE_COLLECTD_AMQP),rabbitmq-c) \ + $(if $(BR2_PACKAGE_COLLECTD_APACHE),libcurl) \ + $(if $(BR2_PACKAGE_COLLECTD_BIND),libcurl libxml2) \ + $(if $(BR2_PACKAGE_COLLECTD_CAPABILITIES),jansson libmicrohttpd) \ + $(if $(BR2_PACKAGE_COLLECTD_CEPH),yajl) \ + $(if $(BR2_PACKAGE_COLLECTD_CURL),libcurl) \ + $(if $(BR2_PACKAGE_COLLECTD_CURL_JSON),libcurl yajl) \ + $(if $(BR2_PACKAGE_COLLECTD_CURL_XML),libcurl libxml2) \ + $(if $(BR2_PACKAGE_COLLECTD_DNS),libpcap) \ + $(if $(BR2_PACKAGE_COLLECTD_DPDK_TELEMETRY),jansson) \ + $(if $(BR2_PACKAGE_COLLECTD_GPS),gpsd) \ + $(if $(BR2_PACKAGE_COLLECTD_GRPC),grpc) \ + $(if $(BR2_PACKAGE_COLLECTD_IPTABLES),iptables) \ + $(if $(BR2_PACKAGE_COLLECTD_LOGSTASH),yajl) \ + $(if $(BR2_PACKAGE_COLLECTD_LUA),luainterpreter) \ + $(if $(BR2_PACKAGE_COLLECTD_MEMCACHEC),libmemcached) \ + $(if $(BR2_PACKAGE_COLLECTD_MODBUS),libmodbus) \ + $(if $(BR2_PACKAGE_COLLECTD_MQTT),mosquitto) \ + $(if $(BR2_PACKAGE_COLLECTD_MYSQL),mysql) \ + $(if $(BR2_PACKAGE_COLLECTD_NETLINK),libmnl) \ + $(if $(BR2_PACKAGE_COLLECTD_NGINX),libcurl) \ + $(if $(BR2_PACKAGE_COLLECTD_NOTIFY_EMAIL),libesmtp) \ + $(if $(BR2_PACKAGE_COLLECTD_NUT),nut) \ + $(if $(BR2_PACKAGE_COLLECTD_ONEWIRE),owfs) \ + $(if $(BR2_PACKAGE_COLLECTD_OPENLDAP),openldap) \ + $(if $(BR2_PACKAGE_COLLECTD_PING),liboping) \ + $(if $(BR2_PACKAGE_COLLECTD_POSTGRESQL),postgresql) \ + $(if $(BR2_PACKAGE_COLLECTD_REDIS),hiredis) \ + $(if $(BR2_PACKAGE_COLLECTD_RIEMANN),libtool riemann-c-client) \ + $(if $(BR2_PACKAGE_COLLECTD_RRDTOOL),rrdtool) \ + $(if $(BR2_PACKAGE_COLLECTD_SENSORS),lm-sensors) \ + $(if $(BR2_PACKAGE_COLLECTD_SMART),libatasmart) \ + $(if $(BR2_PACKAGE_COLLECTD_SNMP),netsnmp) \ + $(if $(BR2_PACKAGE_COLLECTD_WRITEHTTP),libcurl) \ + $(if $(BR2_PACKAGE_COLLECTD_WRITEPROMETHEUS),libmicrohttpd protobuf-c) \ + $(if $(BR2_PACKAGE_COLLECTD_WRITEREDIS),hiredis) + +# include/library fixups +ifeq ($(BR2_PACKAGE_JANSSON),y) +COLLECTD_CONF_OPTS += --with-libjansson=$(STAGING_DIR)/usr +endif +ifeq ($(BR2_PACKAGE_LIBCURL),y) +COLLECTD_CONF_OPTS += --with-libcurl=$(STAGING_DIR)/usr +endif +ifeq ($(BR2_PACKAGE_LUAJIT),y) +COLLECTD_CONF_ENV += LIBLUA_PKG_CONFIG_NAME=luajit +endif +ifeq ($(BR2_PACKAGE_MYSQL),y) +COLLECTD_CONF_OPTS += --with-libmysql=$(STAGING_DIR)/usr +endif +ifeq ($(BR2_PACKAGE_NETSNMP),y) +COLLECTD_CONF_OPTS += --with-libnetsnmp=$(STAGING_DIR)/usr +endif +ifeq ($(BR2_PACKAGE_POSTGRESQL),y) +COLLECTD_CONF_OPTS += --with-libpq=$(STAGING_DIR)/usr/bin/pg_config +COLLECTD_CONF_ENV += LIBS="-lpthread -lm" +endif +ifeq ($(BR2_PACKAGE_YAJL),y) +COLLECTD_CONF_OPTS += --with-libyajl=$(STAGING_DIR)/usr +endif + +# network can use libgcrypt +ifeq ($(BR2_PACKAGE_LIBGCRYPT),y) +COLLECTD_DEPENDENCIES += libgcrypt +COLLECTD_CONF_OPTS += --with-libgcrypt=$(STAGING_DIR)/usr/bin/libgcrypt-config +else +COLLECTD_CONF_OPTS += --with-libgcrypt=no +endif + +define COLLECTD_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) DESTDIR=$(TARGET_DIR) -C $(@D) install + rm -f $(TARGET_DIR)/usr/bin/collectd-nagios +endef + +ifeq ($(BR2_PACKAGE_COLLECTD_POSTGRESQL),) +define COLLECTD_REMOVE_UNNEEDED_POSTGRESQL_DEFAULT_CONF + rm -f $(TARGET_DIR)/usr/share/collectd/postgresql_default.conf +endef +COLLECTD_POST_INSTALL_TARGET_HOOKS += COLLECTD_REMOVE_UNNEEDED_POSTGRESQL_DEFAULT_CONF +endif + +define COLLECTD_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/collectd/collectd.service \ + $(TARGET_DIR)/usr/lib/systemd/system/collectd.service +endef + +define COLLECTD_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/collectd/S90collectd \ + $(TARGET_DIR)/etc/init.d/S90collectd +endef + +$(eval $(autotools-package)) diff --git a/package/collectd/collectd.service b/package/collectd/collectd.service new file mode 100644 index 00000000..e203806f --- /dev/null +++ b/package/collectd/collectd.service @@ -0,0 +1,17 @@ +[Unit] +Description=Statistics collection and monitoring daemon +After=local-fs.target network.target +Requires=local-fs.target network.target +ConditionPathExists=/etc/collectd.conf + +[Service] +Type=notify +NotifyAccess=main +EnvironmentFile=-/etc/default/collectd +ExecStartPre=/usr/sbin/collectd -t +ExecStart=/usr/sbin/collectd +Restart=always +RestartSec=10 + +[Install] +WantedBy=multi-user.target diff --git a/package/collectl/Config.in b/package/collectl/Config.in new file mode 100644 index 00000000..28379abe --- /dev/null +++ b/package/collectl/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_COLLECTL + bool "collectl" + depends on BR2_USE_MMU # perl + select BR2_PACKAGE_PERL # runtime + help + Collectl is a performance monitoring and benchmark tool that + tries to do it all. You can choose to monitor any of a broad + set of subsystems which currently include buddyinfo, cpu, + disk, inodes, infiniband, lustre, memory, network, nfs, + processes, quadrics, slabs, sockets and tcp. + + http://collectl.sourceforge.net/ diff --git a/package/collectl/collectl.hash b/package/collectl/collectl.hash new file mode 100644 index 00000000..d866e0be --- /dev/null +++ b/package/collectl/collectl.hash @@ -0,0 +1,5 @@ +# Locally calculated +sha256 2187264d974b36a653c8a4b028ac6eeab23e1885f8b2563a33f06358f39889f1 collectl-4.3.1.src.tar.gz +sha256 b92800d37afa2aa03c02817ff3b68efc7236436fe76af06ad9b1fc4682f59bcb ARTISTIC +sha256 264fe27852db5624e6a9a9845b4e14e91ee5007305b33e5556dfade394d578a8 COPYING +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 GPL diff --git a/package/collectl/collectl.mk b/package/collectl/collectl.mk new file mode 100644 index 00000000..c9fb5929 --- /dev/null +++ b/package/collectl/collectl.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# collectl +# +################################################################################ + +COLLECTL_VERSION = 4.3.1 +COLLECTL_SOURCE = collectl-$(COLLECTL_VERSION).src.tar.gz +COLLECTL_SITE = http://downloads.sourceforge.net/collectl/collectl +COLLECTL_LICENSE = Artistic or GPL-2.0 +COLLECTL_LICENSE_FILES = COPYING ARTISTIC GPL + +define COLLECTL_INSTALL_TARGET_CMDS + (cd $(@D); \ + DESTDIR=$(TARGET_DIR) ./INSTALL) +endef + +$(eval $(generic-package)) diff --git a/package/comix-cursors/Config.in b/package/comix-cursors/Config.in new file mode 100644 index 00000000..ac7a089c --- /dev/null +++ b/package/comix-cursors/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_COMIX_CURSORS + bool "comix-cursors" + help + X11 mouse theme with a comics feeling. + + http://kde-look.org/content/show.php/ComixCursors?content=32627 diff --git a/package/comix-cursors/comix-cursors.hash b/package/comix-cursors/comix-cursors.hash new file mode 100644 index 00000000..e03808c3 --- /dev/null +++ b/package/comix-cursors/comix-cursors.hash @@ -0,0 +1,2 @@ +# Locally calculated +sha256 9e68ea8ff230dcc793528aa5da9a38b9bf61c478cd6868b4e4f5da659746a019 ComixCursors-0.9.1.tar.bz2 diff --git a/package/comix-cursors/comix-cursors.mk b/package/comix-cursors/comix-cursors.mk new file mode 100644 index 00000000..7b034cce --- /dev/null +++ b/package/comix-cursors/comix-cursors.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# comix-cursors +# +################################################################################ + +COMIX_CURSORS_VERSION = 0.9.1 +COMIX_CURSORS_SITE = https://limitland.gitlab.io/comixcursors +COMIX_CURSORS_SOURCE = ComixCursors-$(COMIX_CURSORS_VERSION).tar.bz2 +COMIX_CURSORS_LICENSE = GPL-3.0 +COMIX_CURSORS_STRIP_COMPONENTS = 0 + +define COMIX_CURSORS_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/usr/share/cursors/xorg-x11 + cp -a $(@D)/* \ + $(TARGET_DIR)/usr/share/cursors/xorg-x11 +endef + +$(eval $(generic-package)) diff --git a/package/connman-gtk/Config.in b/package/connman-gtk/Config.in new file mode 100644 index 00000000..467bf7ec --- /dev/null +++ b/package/connman-gtk/Config.in @@ -0,0 +1,22 @@ +comment "connman-gtk needs libgtk3 and a glibc or uClibc toolchain w/ wchar, threads, resolver, dynamic library" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS || !BR2_PACKAGE_LIBGTK3 || \ + BR2_TOOLCHAIN_USES_MUSL + +config BR2_PACKAGE_CONNMAN_GTK + bool "connman-gtk" + depends on BR2_USE_WCHAR # libglib2, connman + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2, connman + depends on BR2_USE_MMU # libglib2 + depends on !BR2_STATIC_LIBS # connman + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # connman + depends on !BR2_TOOLCHAIN_USES_MUSL # connman + depends on BR2_PACKAGE_LIBGTK3 + select BR2_PACKAGE_CONNMAN + select BR2_PACKAGE_LIBGLIB2 + help + GTK GUI for ConnMan. + + https://github.com/jgke/connman-gtk diff --git a/package/connman-gtk/connman-gtk.hash b/package/connman-gtk/connman-gtk.hash new file mode 100644 index 00000000..fbc4acb1 --- /dev/null +++ b/package/connman-gtk/connman-gtk.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 49bdc4769a7c508b0130e4705eef21aec9df1ea4f5c29fee48a0cae8db828fca connman-gtk-1.1.1.tar.bz2 +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/connman-gtk/connman-gtk.mk b/package/connman-gtk/connman-gtk.mk new file mode 100644 index 00000000..0ea49198 --- /dev/null +++ b/package/connman-gtk/connman-gtk.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# connman-gtk +# +################################################################################ + +CONNMAN_GTK_VERSION = 1.1.1 +CONNMAN_GTK_SITE = https://github.com/jgke/connman-gtk/releases/download/v$(CONNMAN_GTK_VERSION) +CONNMAN_GTK_SOURCE = connman-gtk-$(CONNMAN_GTK_VERSION).tar.bz2 +CONNMAN_GTK_INSTALL_STAGING = YES +CONNMAN_GTK_DEPENDENCIES = host-intltool connman libglib2 libgtk3 \ + $(TARGET_NLS_DEPENDENCIES) +CONNMAN_GTK_LICENSE = GPL-2.0+ +CONNMAN_GTK_LICENSE_FILES = COPYING +CONNMAN_GTK_CONF_ENV = LIBS=$(TARGET_NLS_LIBS) + +$(eval $(autotools-package)) diff --git a/package/connman/Config.in b/package/connman/Config.in new file mode 100644 index 00000000..72b76bf1 --- /dev/null +++ b/package/connman/Config.in @@ -0,0 +1,107 @@ +config BR2_PACKAGE_CONNMAN + bool "connman" + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # dbus, libglib2 + depends on BR2_USE_MMU # dbus, libglib2 + depends on !BR2_STATIC_LIBS # needs dlopen() + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_TOOLCHAIN_USES_MUSL # missing res_ninit() + select BR2_PACKAGE_DBUS + select BR2_PACKAGE_LIBGLIB2 + help + The Connection Manager (ConnMan) project provides a daemon + for managing internet connections within embedded devices + running the Linux operating system. + + https://01.org/connman + +if BR2_PACKAGE_CONNMAN + +choice + prompt "Firewall type" + default BR2_PACKAGE_CONNMAN_IPTABLES + help + Select which firewall type is used. + +config BR2_PACKAGE_CONNMAN_IPTABLES + bool "iptables" + select BR2_PACKAGE_IPTABLES + help + Use iptables as firewall. + +config BR2_PACKAGE_CONNMAN_NFTABLES + bool "nftables" + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12 + select BR2_PACKAGE_LIBMNL + select BR2_PACKAGE_NFTABLES + help + Use nftables as firewall. +endchoice + +config BR2_PACKAGE_CONNMAN_ETHERNET + bool "enable Ethernet support" + default y + +config BR2_PACKAGE_CONNMAN_WIFI + bool "enable WiFi support" + select BR2_PACKAGE_WPA_SUPPLICANT # runtime + select BR2_PACKAGE_WPA_SUPPLICANT_DBUS # runtime + help + Enable WiFi support (scan and static/dhcp interface + setup). ConnMan detects the start of wpa_supplicant + automatically. + +config BR2_PACKAGE_CONNMAN_WIREGUARD + bool "enable wireguard support" + select BR2_PACKAGE_LIBMNL + +config BR2_PACKAGE_CONNMAN_WISPR + bool "enable WISPr support" + depends on !BR2_STATIC_LIBS # gnutls + select BR2_PACKAGE_GNUTLS + help + Enable support for Wireless Internet Service Provider + roaming (WISPr). A RADIUS server is used to authenticate the + subscriber's credentials. + +comment "connman WISPr needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +config BR2_PACKAGE_CONNMAN_BLUETOOTH + bool "enable Bluetooth support" + help + Enable Bluetooth support. The start of bluetoothd is + automatically detected and only a runtime dependency. + +config BR2_PACKAGE_CONNMAN_LOOPBACK + bool "enable loopback support" + +config BR2_PACKAGE_CONNMAN_NEARD + bool "enable neard support" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # neard + select BR2_PACKAGE_NEARD + +config BR2_PACKAGE_CONNMAN_OFONO + bool "enable ofono support" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # ofono + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12 # ofono + select BR2_PACKAGE_OFONO + +comment "ofono support needs a toolchain w/ headers >= 4.12" + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12 + +config BR2_PACKAGE_CONNMAN_DEBUG + bool "enable compiling with debugging information" + +config BR2_PACKAGE_CONNMAN_CLIENT + bool "enable command line client" + select BR2_PACKAGE_READLINE + +endif # BR2_PACKAGE_CONNMAN + +comment "connman needs a glibc or uClibc toolchain w/ wchar, threads, resolver, dynamic library" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS \ + || BR2_TOOLCHAIN_USES_MUSL diff --git a/package/connman/S45connman b/package/connman/S45connman new file mode 100644 index 00000000..c8e913d3 --- /dev/null +++ b/package/connman/S45connman @@ -0,0 +1,52 @@ +#!/bin/sh + +DAEMON="connmand" +PIDFILE="/var/run/$DAEMON.pid" + +CONNMAND_ARGS="-n" + +# shellcheck source=/dev/null +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON" + +start() { + printf 'Starting %s: ' "$DAEMON" + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon -S -q -m -b -p "$PIDFILE" -x "/usr/sbin/$DAEMON" \ + -- $CONNMAND_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +case "$1" in + start|stop|restart) + "$1";; + reload) + # Restart, since there is no true "reload" feature. + restart;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/connman/connman.hash b/package/connman/connman.hash new file mode 100644 index 00000000..79744833 --- /dev/null +++ b/package/connman/connman.hash @@ -0,0 +1,4 @@ +# From https://www.kernel.org/pub/linux/network/connman/sha256sums.asc +sha256 1a57ae7ce234aa3a1744aac3be5c2121d98dce999440ef8ab9cc4edfd5edcb12 connman-1.40.tar.xz +# Locally computed +sha256 b499eddebda05a8859e32b820a64577d91f1de2b52efa2a1575a2cb4000bc259 COPYING diff --git a/package/connman/connman.mk b/package/connman/connman.mk new file mode 100644 index 00000000..0355426e --- /dev/null +++ b/package/connman/connman.mk @@ -0,0 +1,106 @@ +################################################################################ +# +# connman +# +################################################################################ + +CONNMAN_VERSION = 1.40 +CONNMAN_SOURCE = connman-$(CONNMAN_VERSION).tar.xz +CONNMAN_SITE = $(BR2_KERNEL_MIRROR)/linux/network/connman +CONNMAN_DEPENDENCIES = libglib2 dbus iptables +CONNMAN_INSTALL_STAGING = YES +CONNMAN_LICENSE = GPL-2.0 +CONNMAN_LICENSE_FILES = COPYING +CONNMAN_CPE_ID_VENDOR = intel + +CONNMAN_CONF_OPTS = --with-dbusconfdir=/etc + +ifeq ($(BR2_INIT_SYSTEMD),y) +CONNMAN_CONF_OPTS += --with-systemdunitdir=/usr/lib/systemd/system +endif + +ifeq ($(BR2_PACKAGE_CONNMAN_BLUETOOTH),y) +CONNMAN_CONF_OPTS += --enable-bluetooth +else +CONNMAN_CONF_OPTS += --disable-bluetooth +endif + +ifeq ($(BR2_PACKAGE_CONNMAN_DEBUG),y) +CONNMAN_CONF_OPTS += --enable-debug +else +CONNMAN_CONF_OPTS += --disable-debug +endif + +ifeq ($(BR2_PACKAGE_CONNMAN_ETHERNET),y) +CONNMAN_CONF_OPTS += --enable-ethernet +else +CONNMAN_CONF_OPTS += --disable-ethernet +endif + +ifeq ($(BR2_PACKAGE_CONNMAN_IPTABLES),y) +CONNMAN_CONF_OPTS += --with-firewall=iptables +CONNMAN_DEPENDENCIES += iptables +else ifeq ($(BR2_PACKAGE_CONNMAN_NFTABLES),y) +CONNMAN_CONF_OPTS += --with-firewall=nftables +CONNMAN_DEPENDENCIES += libmnl nftables +endif + +ifeq ($(BR2_PACKAGE_CONNMAN_LOOPBACK),y) +CONNMAN_CONF_OPTS += --enable-loopback +else +CONNMAN_CONF_OPTS += --disable-loopback +endif + +ifeq ($(BR2_PACKAGE_CONNMAN_NEARD),y) +CONNMAN_CONF_OPTS += --enable-neard +CONNMAN_DEPENDENCIES += neard +else +CONNMAN_CONF_OPTS += --disable-neard +endif + +ifeq ($(BR2_PACKAGE_CONNMAN_OFONO),y) +CONNMAN_CONF_OPTS += --enable-ofono +CONNMAN_DEPENDENCIES += ofono +else +CONNMAN_CONF_OPTS += --disable-ofono +endif + +ifeq ($(BR2_PACKAGE_CONNMAN_WIFI),y) +CONNMAN_CONF_OPTS += --enable-wifi +else +CONNMAN_CONF_OPTS += --disable-wifi +endif + +ifeq ($(BR2_PACKAGE_CONNMAN_WIREGUARD),y) +CONNMAN_CONF_OPTS += --enable-wireguard +CONNMAN_DEPENDENCIES += libmnl +else +CONNMAN_CONF_OPTS += --disable-wireguard +endif + +ifeq ($(BR2_PACKAGE_CONNMAN_WISPR),y) +CONNMAN_CONF_OPTS += --enable-wispr +CONNMAN_DEPENDENCIES += gnutls +else +CONNMAN_CONF_OPTS += --disable-wispr +endif + +define CONNMAN_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/connman/S45connman $(TARGET_DIR)/etc/init.d/S45connman +endef + +ifeq ($(BR2_PACKAGE_CONNMAN_CLIENT),y) +CONNMAN_LICENSE += , GPL-2.0+ (client) +CONNMAN_CONF_OPTS += --enable-client +CONNMAN_DEPENDENCIES += readline + +define CONNMAN_INSTALL_CM + $(INSTALL) -m 0755 -D $(@D)/client/connmanctl $(TARGET_DIR)/usr/bin/connmanctl +endef + +CONNMAN_POST_INSTALL_TARGET_HOOKS += CONNMAN_INSTALL_CM +else +CONNMAN_CONF_OPTS += --disable-client +endif + +$(eval $(autotools-package)) diff --git a/package/conntrack-tools/Config.in b/package/conntrack-tools/Config.in new file mode 100644 index 00000000..87bf2d0c --- /dev/null +++ b/package/conntrack-tools/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_CONNTRACK_TOOLS + bool "conntrack-tools" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC || BR2_TOOLCHAIN_HAS_THREADS # libtirpc + depends on !BR2_STATIC_LIBS # dlopen() + select BR2_PACKAGE_LIBNETFILTER_CONNTRACK + select BR2_PACKAGE_LIBNETFILTER_CTHELPER + select BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT + select BR2_PACKAGE_LIBNETFILTER_QUEUE + select BR2_PACKAGE_LIBTIRPC if !BR2_TOOLCHAIN_HAS_NATIVE_RPC + help + The conntrack-tools are a set of tools targeted at + system administrators. + They are conntrack, the userspace command line interface, + and conntrackd, the userspace daemon. + + http://www.netfilter.org/projects/conntrack-tools/ + +comment "conntrack-tools needs a toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on !(BR2_TOOLCHAIN_HAS_THREADS || BR2_TOOLCHAIN_HAS_NATIVE_RPC) || \ + BR2_STATIC_LIBS diff --git a/package/conntrack-tools/conntrack-tools.hash b/package/conntrack-tools/conntrack-tools.hash new file mode 100644 index 00000000..ae9af25e --- /dev/null +++ b/package/conntrack-tools/conntrack-tools.hash @@ -0,0 +1,4 @@ +# From https://netfilter.org/projects/conntrack-tools/downloads.html +sha256 590859cc848245dbfd9c6487761dd303b3a1771e007f4f42213063ca56205d5f conntrack-tools-1.4.6.tar.bz2 +# Locally calculated +sha256 91df39d1816bfb17a4dda2d3d2c83b1f6f2d38d53e53e41e8f97ad5ac46a0cad COPYING diff --git a/package/conntrack-tools/conntrack-tools.mk b/package/conntrack-tools/conntrack-tools.mk new file mode 100644 index 00000000..55ea4079 --- /dev/null +++ b/package/conntrack-tools/conntrack-tools.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# conntrack-tools +# +################################################################################ + +CONNTRACK_TOOLS_VERSION = 1.4.6 +CONNTRACK_TOOLS_SOURCE = conntrack-tools-$(CONNTRACK_TOOLS_VERSION).tar.bz2 +CONNTRACK_TOOLS_SITE = http://www.netfilter.org/projects/conntrack-tools/files +CONNTRACK_TOOLS_DEPENDENCIES = host-pkgconf \ + libnetfilter_conntrack libnetfilter_cthelper libnetfilter_cttimeout \ + libnetfilter_queue host-bison host-flex +CONNTRACK_TOOLS_LICENSE = GPL-2.0+ +CONNTRACK_TOOLS_LICENSE_FILES = COPYING +CONNTRACK_TOOLS_CPE_ID_VENDOR = netfilter + +CONNTRACK_TOOLS_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_PACKAGE_LIBTIRPC),y) +CONNTRACK_TOOLS_CFLAGS += `$(PKG_CONFIG_HOST_BINARY) --cflags libtirpc` +CONNTRACK_TOOLS_DEPENDENCIES += libtirpc host-pkgconf +endif + +CONNTRACK_TOOLS_CONF_ENV = CFLAGS="$(CONNTRACK_TOOLS_CFLAGS)" + +$(eval $(autotools-package)) diff --git a/package/copas/0001-Do-not-load-coxpcall-for-LuaJIT.patch b/package/copas/0001-Do-not-load-coxpcall-for-LuaJIT.patch new file mode 100644 index 00000000..9a7f38c6 --- /dev/null +++ b/package/copas/0001-Do-not-load-coxpcall-for-LuaJIT.patch @@ -0,0 +1,49 @@ +From 8d1b5a9b973a9891d676dabf31807eb825d7f262 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fran=C3=A7ois=20Perrad?= +Date: Wed, 6 Sep 2017 00:00:56 +0200 +Subject: [PATCH] Do not load coxpcall for LuaJIT + +* coxpcall is only required with PUC Lua 5.1, but not with LuaJIT + +use the same logic as in copas.lua. +this fixes issue #63. + +Fetch from: https://github.com/keplerproject/copas/commit/8d1b5a9b973a9891d676dabf31807eb825d7f262 +Signed-off-by: Francois Perrad +--- + doc/us/index.html | 5 +++++ + src/copas/limit.lua | 2 +- + 2 files changed, 6 insertions(+), 1 deletion(-) + +diff --git a/copas-2_0_2/doc/us/index.html b/doc/us/index.html +index 1d008c2..c4d85ef 100644 +--- a/copas-2_0_2/doc/us/index.html ++++ b/copas-2_0_2/doc/us/index.html +@@ -114,6 +114,11 @@ LuaSocket, Coxpcall (only +

History

+ +
++
Copas [unreleased]
++
    ++
  • Fixed: coxpcall dependency in limit.lua #63 (Francois Perrad)
  • ++
++ +
Copas 2.0.2 [2017]
+
    +
  • Added: copas.running flag
  • +diff --git a/copas-2_0_2/src/copas/limit.lua b/src/copas/limit.lua +index ea178be..f0dfe17 100644 +--- a/copas-2_0_2/src/copas/limit.lua ++++ b/copas-2_0_2/src/copas/limit.lua +@@ -10,7 +10,7 @@ local pack = table.pack or function(...) return {n=select('#',...),...} end + local unpack = function(t) return (table.unpack or unpack)(t, 1, t.n or #t) end + + local pcall = pcall +-if _VERSION=="Lua 5.1" then -- obsolete: only for Lua 5.1 compatibility ++if _VERSION=="Lua 5.1" and not jit then -- obsolete: only for Lua 5.1 compatibility + pcall = require("coxpcall").pcall + end + +-- +2.17.1 + diff --git a/package/copas/Config.in b/package/copas/Config.in new file mode 100644 index 00000000..347d86dd --- /dev/null +++ b/package/copas/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_COPAS + bool "copas" + select BR2_PACKAGE_COXPCALL if BR2_PACKAGE_LUA_5_1 # runtime + select BR2_PACKAGE_LUASOCKET # runtime + help + Copas is a dispatcher based on coroutines that can be used + for asynchronous networking. For example TCP or UDP based + servers. But it also features timers and client support for + http(s), ftp and smtp requests. + + http://keplerproject.github.io/copas/ diff --git a/package/copas/copas.hash b/package/copas/copas.hash new file mode 100644 index 00000000..4e9e7878 --- /dev/null +++ b/package/copas/copas.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 efeded4f4633bc71551175b239199304640ef918ae8ea9dc9c5047359ae07107 copas-2.0.2-1.src.rock +sha256 3f59cccf38e9397f6fb34dcff983a24d336df982edb5b0cde549d0c32c28c9c0 copas-2_0_2/LICENSE diff --git a/package/copas/copas.mk b/package/copas/copas.mk new file mode 100644 index 00000000..5b7ba999 --- /dev/null +++ b/package/copas/copas.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# copas +# +################################################################################ + +COPAS_VERSION = 2.0.2-1 +COPAS_SUBDIR = copas-2_0_2 +COPAS_LICENSE = MIT +COPAS_LICENSE_FILES = $(COPAS_SUBDIR)/LICENSE + +$(eval $(luarocks-package)) diff --git a/package/coremark-pro/Config.in b/package/coremark-pro/Config.in new file mode 100644 index 00000000..dd682105 --- /dev/null +++ b/package/coremark-pro/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_COREMARK_PRO + bool "coremark-pro" + depends on BR2_USE_MMU # perl uses fork() + select BR2_PACKAGE_PERL + help + CoreMark-PRO is a comprehensive, advanced processor benchmark. + + https://www.eembc.org/coremark-pro/ diff --git a/package/coremark-pro/coremark-pro.hash b/package/coremark-pro/coremark-pro.hash new file mode 100644 index 00000000..c43fc555 --- /dev/null +++ b/package/coremark-pro/coremark-pro.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 440223554134832efec4ad220795611769ded3869fbc3ce3c59b05b7ddeb9f6d coremark-pro-1.1.2743.tar.gz +sha256 0d7775bd793ea71fef3594c18164a08ed2f5f66c898958d0644f7a236a536f2b LICENSE.md diff --git a/package/coremark-pro/coremark-pro.mk b/package/coremark-pro/coremark-pro.mk new file mode 100644 index 00000000..e797f668 --- /dev/null +++ b/package/coremark-pro/coremark-pro.mk @@ -0,0 +1,62 @@ +################################################################################ +# +# CoreMark-PRO +# +################################################################################ + +COREMARK_PRO_VERSION = 1.1.2743 +COREMARK_PRO_SITE = $(call github,eembc,coremark-pro,v$(COREMARK_PRO_VERSION)) +COREMARK_PRO_LICENSE = Apache-2.0 +COREMARK_PRO_LICENSE_FILES = LICENSE.md +COREMARK_PRO_DEPENDENCIES = perl + +COREMARK_PRO_LDFLAGS = $(TARGET_LDFLAGS) -lm + +ifeq ($(BR2_ENDIAN),"BIG") +COREMARK_PRO_DEFINES += \ + EE_BIG_ENDIAN=1 \ + EE_LITTLE_ENDIAN=0 +else +COREMARK_PRO_DEFINES += \ + EE_BIG_ENDIAN=0 \ + EE_LITTLE_ENDIAN=1 +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +COREMARK_PRO_DEFINES += \ + USE_NATIVE_PTHREAD=1 \ + USE_SINGLE_CONTEXT=0 +COREMARK_PRO_LDFLAGS += -lpthread +else +COREMARK_PRO_DEFINES += \ + USE_NATIVE_PTHREAD=0 \ + USE_SINGLE_CONTEXT=1 +endif + +COREMARK_PRO_MAKE_OPTS += \ + LINKER_LAST="$(COREMARK_PRO_LDFLAGS)" \ + PLATFORM_DEFINES="$(COREMARK_PRO_DEFINES)" \ + TARGET=linux$(if $(BR2_ARCH_IS_64),64) \ + EXE= + +define COREMARK_PRO_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) CC="$(TARGET_CC)" LD="$(TARGET_CC)" -C $(@D) \ + $(COREMARK_PRO_MAKE_OPTS) build +endef + +COREMARK_PRO_MARKS = cjpeg-rose7-preset core linear_alg-mid-100x100-sp loops-all-mid-10k-sp nnet_test parser-125k radix2-big-64k sha-test zip-test +COREMARK_PRO_SCRIPTS = results_parser.pl cert_median.pl cert_mark.pl headings.txt + +define COREMARK_PRO_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/usr/share/coremark-pro/logs + $(foreach m,$(COREMARK_PRO_MARKS),\ + $(INSTALL) -D $(@D)/builds/linux$(if $(BR2_ARCH_IS_64),64)/gcc$(if $(BR2_ARCH_IS_64),64)/bin/$(m) $(TARGET_DIR)/usr/bin/$(m)$(sep) \ + size $(TARGET_DIR)/usr/bin/$(m) > $(TARGET_DIR)/usr/share/coremark-pro/logs/$(m).size.log$(sep)) + $(INSTALL) -D $(@D)/builds/linux$(if $(BR2_ARCH_IS_64),64)/gcc$(if $(BR2_ARCH_IS_64),64)/data/libbmp/Rose256.bmp $(TARGET_DIR)/usr/share/coremark-pro/Rose256.bmp + $(foreach s,$(COREMARK_PRO_SCRIPTS),\ + $(INSTALL) -D $(@D)/util/perl/$(s) $(TARGET_DIR)/usr/share/coremark-pro/util/perl/$(s)$(sep)) + $(Q)sed "s/@COREMARK_PRO_MARKS@/$(COREMARK_PRO_MARKS)/" \ + package/coremark-pro/coremark-pro.sh.in >$(TARGET_DIR)/usr/bin/coremark-pro.sh +endef + +$(eval $(generic-package)) diff --git a/package/coremark-pro/coremark-pro.sh.in b/package/coremark-pro/coremark-pro.sh.in new file mode 100755 index 00000000..8b370b7c --- /dev/null +++ b/package/coremark-pro/coremark-pro.sh.in @@ -0,0 +1,35 @@ +#!/bin/sh +# SPDX-License-Identifier: Apache-2.0 + +workloads="@COREMARK_PRO_MARKS@" + +rm -rf /tmp/coremark-pro +mkdir -p /tmp/coremark-pro +cp /usr/share/coremark-pro/Rose256.bmp /tmp/coremark-pro +cp /usr/share/coremark-pro/logs/*.size.log /tmp/coremark-pro + +cd /tmp/coremark-pro + +for contype in single best; do + cat /usr/share/coremark-pro/util/perl/headings.txt >>result.log + for wld in $workloads; do + [ "$contype" = "single" ] && XCMD="-c1 -w1" + [ "$contype" = "best" ] && XCMD="-c$(nproc) -w$(nproc)" + echo "#Results for verification run started at $(date +%x:%X) XCMD=$XCMD" >$wld-$contype-result.log + echo "Verification run for $wld" + $wld $XCMD -v1 > $wld.run.log + LC_ALL=C perl /usr/share/coremark-pro/util/perl/results_parser.pl $wld-$contype-result.log $wld.run.log + echo "#Results for performance runs started at $(date +%x:%X) XCMD=$XCMD" >>$wld-$contype-result.log + echo "Performance run for $wld" + for i in 1 2 3; do + $wld $XCMD -v0 > $wld.run.log + LC_ALL=C perl /usr/share/coremark-pro/util/perl/results_parser.pl $wld-$contype-result.log $wld.run.log + done + echo "#Median for final result $wld" >>$wld-$contype-result.log + LC_ALL=C perl /usr/share/coremark-pro/util/perl/cert_median.pl $wld-$contype-result.log $contype >>$wld-$contype-result.log + cat $wld-$contype-result.log >>result.log + done +done +LC_ALL=C perl /usr/share/coremark-pro/util/perl/cert_mark.pl -i result.log -s coremarkpro > result.mark +cat result.mark +cd - >/dev/null diff --git a/package/coremark/Config.in b/package/coremark/Config.in new file mode 100644 index 00000000..f0e13eda --- /dev/null +++ b/package/coremark/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_COREMARK + bool "coremark" + help + CoreMark is a benchmark that measures the performance of + microcontrollers (MCUs) and central processing units (CPUs) + used in embedded systems + + https://www.eembc.org/coremark/ diff --git a/package/coremark/coremark.hash b/package/coremark/coremark.hash new file mode 100644 index 00000000..950e736b --- /dev/null +++ b/package/coremark/coremark.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 99c5a6d63af85a281b4e4d6ccb522c446653c435dfec9455ad73ef9e71f28bde coremark-1.01.tar.gz +sha256 d72094a3cb629dc7712ae09b7b777416903c6670930928b5530f2ddfb2296888 LICENSE.md diff --git a/package/coremark/coremark.mk b/package/coremark/coremark.mk new file mode 100644 index 00000000..418fd5c8 --- /dev/null +++ b/package/coremark/coremark.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# CoreMark +# +################################################################################ + +COREMARK_VERSION = 1.01 +COREMARK_SITE = $(call github,eembc,coremark,v$(COREMARK_VERSION)) +COREMARK_LICENSE = Apache-2.0 +COREMARK_LICENSE_FILES = LICENSE.md + +define COREMARK_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) CC="$(TARGET_CC)" -C $(@D) \ + PORT_DIR=linux$(if $(BR2_ARCH_IS_64),64) EXE= link +endef + +define COREMARK_INSTALL_TARGET_CMDS + $(INSTALL) -D $(@D)/coremark $(TARGET_DIR)/usr/bin/coremark +endef + +$(eval $(generic-package)) diff --git a/package/coreutils/0001-ls-restore-8.31-behavior-on-removed-directories.patch b/package/coreutils/0001-ls-restore-8.31-behavior-on-removed-directories.patch new file mode 100644 index 00000000..43a8161b --- /dev/null +++ b/package/coreutils/0001-ls-restore-8.31-behavior-on-removed-directories.patch @@ -0,0 +1,118 @@ +From 10fcb97bd728f09d4a027eddf8ad2900f0819b0a Mon Sep 17 00:00:00 2001 +From: Paul Eggert +Date: Thu, 5 Mar 2020 17:25:29 -0800 +Subject: [PATCH] ls: restore 8.31 behavior on removed directories + +* NEWS: Mention this. +* src/ls.c: Do not include +(print_dir): Don't worry about whether the directory is removed. +* tests/ls/removed-directory.sh: Adjust to match new (i.e., old) +behavior. +Signed-off-by: Joao Marcos Costa +--- + NEWS | 6 ++++++ + src/ls.c | 22 ---------------------- + tests/ls/removed-directory.sh | 10 ++-------- + 3 files changed, 8 insertions(+), 30 deletions(-) + +diff --git a/NEWS b/NEWS +index fdc8bf5db..653e7178b 100644 +--- a/NEWS ++++ b/NEWS +@@ -2,6 +2,12 @@ GNU coreutils NEWS -*- outline -*- + + * Noteworthy changes in release ?.? (????-??-??) [?] + ++** Changes in behavior ++ ++ On GNU/Linux systems, ls no longer issues an error message on ++ directory merely because it was removed. This reverts a change ++ that was made in release 8.32. ++ + + * Noteworthy changes in release 8.32 (2020-03-05) [stable] + +diff --git a/src/ls.c b/src/ls.c +index 24b983287..4acf5f44d 100644 +--- a/src/ls.c ++++ b/src/ls.c +@@ -49,10 +49,6 @@ + # include + #endif + +-#ifdef __linux__ +-# include +-#endif +- + #include + #include + #include +@@ -2896,7 +2892,6 @@ print_dir (char const *name, char const *realname, bool command_line_arg) + struct dirent *next; + uintmax_t total_blocks = 0; + static bool first = true; +- bool found_any_entries = false; + + errno = 0; + dirp = opendir (name); +@@ -2972,7 +2967,6 @@ print_dir (char const *name, char const *realname, bool command_line_arg) + next = readdir (dirp); + if (next) + { +- found_any_entries = true; + if (! file_ignored (next->d_name)) + { + enum filetype type = unknown; +@@ -3018,22 +3012,6 @@ print_dir (char const *name, char const *realname, bool command_line_arg) + if (errno != EOVERFLOW) + break; + } +-#ifdef __linux__ +- else if (! found_any_entries) +- { +- /* If readdir finds no directory entries at all, not even "." or +- "..", then double check that the directory exists. */ +- if (syscall (SYS_getdents, dirfd (dirp), NULL, 0) == -1 +- && errno != EINVAL) +- { +- /* We exclude EINVAL as that pertains to buffer handling, +- and we've passed NULL as the buffer for simplicity. +- ENOENT is returned if appropriate before buffer handling. */ +- file_failure (command_line_arg, _("reading directory %s"), name); +- } +- break; +- } +-#endif + else + break; + +diff --git a/tests/ls/removed-directory.sh b/tests/ls/removed-directory.sh +index e8c835dab..fe8f929a1 100755 +--- a/tests/ls/removed-directory.sh ++++ b/tests/ls/removed-directory.sh +@@ -26,20 +26,14 @@ case $host_triplet in + *) skip_ 'non linux kernel' ;; + esac + +-LS_FAILURE=2 +- +-cat <<\EOF >exp-err || framework_failure_ +-ls: reading directory '.': No such file or directory +-EOF +- + cwd=$(pwd) + mkdir d || framework_failure_ + cd d || framework_failure_ + rmdir ../d || framework_failure_ + +-returns_ $LS_FAILURE ls >../out 2>../err || fail=1 ++ls >../out 2>../err || fail=1 + cd "$cwd" || framework_failure_ + compare /dev/null out || fail=1 +-compare exp-err err || fail=1 ++compare /dev/null err || fail=1 + + Exit $fail +-- +2.17.1 + diff --git a/package/coreutils/0002-m4-pthread-cond.m4-fix-build-without-threads.patch b/package/coreutils/0002-m4-pthread-cond.m4-fix-build-without-threads.patch new file mode 100644 index 00000000..86e6f80d --- /dev/null +++ b/package/coreutils/0002-m4-pthread-cond.m4-fix-build-without-threads.patch @@ -0,0 +1,59 @@ +From 7622a0a4c6309f9cecaeef72569da687eb5b6b93 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 5 Apr 2021 01:13:29 +0200 +Subject: [PATCH] pthread-cond: Fix wrong configure results when is + absent. + +* m4/pthread-cond.m4 (gl_PTHREAD_COND): When does not exist, +set HAVE_PTHREAD_COND_* to 0, not to 1. + +Signed-off-by: Fabrice Fontaine +[yann.morin.1998@free.fr: + - backport from upstream gnulib + - drop upstream's Changelog hunk + - reisntate Fabrice's SoB +] +Signed-off-by: Yann E. MORIN + +--- + m4/pthread-cond.m4 | 18 +++++++++--------- + 2 files changed, 15 insertions(+), 9 deletions(-) + +diff --git a/m4/pthread-cond.m4 b/m4/pthread-cond.m4 +index 75e37c6138..8922a8a243 100644 +--- a/m4/pthread-cond.m4 ++++ b/m4/pthread-cond.m4 +@@ -1,5 +1,5 @@ +-# pthread-cond.m4 serial 1 +-dnl Copyright (C) 2019-2020 Free Software Foundation, Inc. ++# pthread-cond.m4 serial 2 ++dnl Copyright (C) 2019-2021 Free Software Foundation, Inc. + dnl This file is free software; the Free Software Foundation + dnl gives unlimited permission to copy and/or distribute it, + dnl with or without modifications, as long as this notice is preserved. +@@ -23,14 +23,14 @@ AC_DEFUN([gl_PTHREAD_COND], + REPLACE_PTHREAD_COND_DESTROY=1 + else + if test $HAVE_PTHREAD_H = 0; then +- HAVE_PTHREAD_COND_INIT=1 +- HAVE_PTHREAD_CONDATTR_INIT=1 +- HAVE_PTHREAD_CONDATTR_DESTROY=1 +- HAVE_PTHREAD_COND_WAIT=1 +- HAVE_PTHREAD_COND_TIMEDWAIT=1 +- HAVE_PTHREAD_COND_SIGNAL=1 +- HAVE_PTHREAD_COND_BROADCAST=1 +- HAVE_PTHREAD_COND_DESTROY=1 ++ HAVE_PTHREAD_COND_INIT=0 ++ HAVE_PTHREAD_CONDATTR_INIT=0 ++ HAVE_PTHREAD_CONDATTR_DESTROY=0 ++ HAVE_PTHREAD_COND_WAIT=0 ++ HAVE_PTHREAD_COND_TIMEDWAIT=0 ++ HAVE_PTHREAD_COND_SIGNAL=0 ++ HAVE_PTHREAD_COND_BROADCAST=0 ++ HAVE_PTHREAD_COND_DESTROY=0 + fi + fi + ]) +-- +2.30.2 + diff --git a/package/coreutils/0003-lib-pthread-cond.c-use-tv.nsec-instead-of-tv.usec.patch b/package/coreutils/0003-lib-pthread-cond.c-use-tv.nsec-instead-of-tv.usec.patch new file mode 100644 index 00000000..e1cdccf0 --- /dev/null +++ b/package/coreutils/0003-lib-pthread-cond.c-use-tv.nsec-instead-of-tv.usec.patch @@ -0,0 +1,35 @@ +From 67610020ce7c321678ef59af95fde0483e8e8149 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 4 Apr 2021 21:09:19 +0200 +Subject: [PATCH] lib/pthread-cond.c: use tv.nsec instead of tv.usec + +Use tv.nsec instead of tv.usec to avoid the following build failure: + +lib/pthread-cond.c: In function 'pthread_cond_wait': +lib/pthread-cond.c:121:16: error: 'struct timespec' has no member named 'tv_usec'; did you mean 'tv_sec'? + 121 | duration.tv_usec = 0; + | ^~~~~~~ + | tv_sec + +Signed-off-by: Fabrice Fontaine +[upstream status: https://lists.gnu.org/archive/html/bug-gnulib/2021-04/msg00044.html] +--- + lib/pthread-cond.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/pthread-cond.c b/lib/pthread-cond.c +index baa7c60bb..c2c00be03 100644 +--- a/lib/pthread-cond.c ++++ b/lib/pthread-cond.c +@@ -118,7 +118,7 @@ pthread_cond_wait (pthread_cond_t *cond _GL_UNUSED, + struct timespec duration; + + duration.tv_sec = 86400; +- duration.tv_usec = 0; ++ duration.tv_nsec = 0; + nanosleep (&duration, NULL); + } + } +-- +2.30.2 + diff --git a/package/coreutils/Config.in b/package/coreutils/Config.in new file mode 100644 index 00000000..705013ba --- /dev/null +++ b/package/coreutils/Config.in @@ -0,0 +1,39 @@ +config BR2_PACKAGE_COREUTILS + bool "coreutils" + depends on BR2_USE_WCHAR + depends on BR2_USE_MMU # fork() + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + All of the basic file/text/shell utilities. These are the + core utilities which are expected to exist on every system. + BusyBox implements many of the most common. + + Things like: + - chmod, cp, dd, dir, ls, etc... + - sort, tr, head, tail, wc, etc... + - whoami, who, etc... + + http://www.gnu.org/software/coreutils/ + +if BR2_PACKAGE_COREUTILS + +config BR2_PACKAGE_COREUTILS_INDIVIDUAL_BINARIES + bool "Individual binaries" + depends on !BR2_STATIC_LIBS + help + By default (i.e. with this option disabled), coreutils is + installed as a single binary (Busybox style) called + /usr/bin/coreutils, and all core utilities are symbolic + links to this binary. + + With this option enabled, each utility is a separate binary. + +comment "coreutils individual binaries need a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +endif + +comment "coreutils needs a toolchain w/ wchar" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS diff --git a/package/coreutils/coreutils.hash b/package/coreutils/coreutils.hash new file mode 100644 index 00000000..54cdf4c5 --- /dev/null +++ b/package/coreutils/coreutils.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 4458d8de7849df44ccab15e16b1548b285224dbba5f08fac070c1c0e0bcc4cfa coreutils-8.32.tar.xz +# Locally computed +sha256 3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986 COPYING diff --git a/package/coreutils/coreutils.mk b/package/coreutils/coreutils.mk new file mode 100644 index 00000000..65234a11 --- /dev/null +++ b/package/coreutils/coreutils.mk @@ -0,0 +1,168 @@ +################################################################################ +# +# coreutils +# +################################################################################ + +COREUTILS_VERSION = 8.32 +COREUTILS_SITE = $(BR2_GNU_MIRROR)/coreutils +COREUTILS_SOURCE = coreutils-$(COREUTILS_VERSION).tar.xz +COREUTILS_LICENSE = GPL-3.0+ +COREUTILS_LICENSE_FILES = COPYING +COREUTILS_CPE_ID_VENDOR = gnu +# Only when including SUSE coreutils-i18n.patch +COREUTILS_IGNORE_CVES = CVE-2013-0221 +COREUTILS_IGNORE_CVES += CVE-2013-0222 +COREUTILS_IGNORE_CVES += CVE-2013-0223 +# We're patching m4/pthread-cond.m4 +COREUTILS_AUTORECONF = YES + +COREUTILS_CONF_OPTS = --disable-rpath \ + $(if $(BR2_TOOLCHAIN_USES_MUSL),--with-included-regex) + +ifeq ($(BR2_PACKAGE_COREUTILS_INDIVIDUAL_BINARIES),y) +COREUTILS_CONF_OPTS += --disable-single-binary +else +COREUTILS_CONF_OPTS += --enable-single-binary=symlinks +endif + +COREUTILS_CONF_ENV = ac_cv_c_restrict=no \ + ac_cv_func_chown_works=yes \ + ac_cv_func_euidaccess=no \ + ac_cv_func_fstatat=yes \ + ac_cv_func_getdelim=yes \ + ac_cv_func_getgroups=yes \ + ac_cv_func_getgroups_works=yes \ + ac_cv_func_getloadavg=no \ + ac_cv_func_lstat_dereferences_slashed_symlink=yes \ + ac_cv_func_lstat_empty_string_bug=no \ + ac_cv_func_strerror_r_char_p=no \ + ac_cv_func_strnlen_working=yes \ + ac_cv_func_strtod=yes \ + ac_cv_func_working_mktime=yes \ + ac_cv_have_decl_strerror_r=yes \ + ac_cv_have_decl_strnlen=yes \ + ac_cv_lib_getloadavg_getloadavg=no \ + ac_cv_lib_util_getloadavg=no \ + ac_fsusage_space=yes \ + ac_use_included_regex=no \ + am_cv_func_working_getline=yes \ + fu_cv_sys_stat_statfs2_bsize=yes \ + gl_cv_func_getcwd_null=yes \ + gl_cv_func_getcwd_path_max=yes \ + gl_cv_func_gettimeofday_clobber=no \ + gl_cv_func_fstatat_zero_flag=no \ + gl_cv_func_link_follows_symlink=no \ + gl_cv_func_re_compile_pattern_working=yes \ + gl_cv_func_svid_putenv=yes \ + gl_cv_func_tzset_clobber=no \ + gl_cv_func_working_mkstemp=yes \ + gl_cv_func_working_utimes=yes \ + gl_getline_needs_run_time_check=no \ + gl_cv_have_proc_uptime=yes \ + utils_cv_localtime_cache=no \ + PERL=missing \ + MAKEINFO=true \ + INSTALL_PROGRAM=$(INSTALL) + +COREUTILS_BIN_PROGS = base64 cat chgrp chmod chown cp date dd df dir echo false \ + kill link ln ls mkdir mknod mktemp mv nice printenv pwd rm rmdir \ + vdir sleep stty sync touch true uname join + +ifeq ($(BR2_PACKAGE_ACL),y) +COREUTILS_DEPENDENCIES += acl +else +COREUTILS_CONF_OPTS += --disable-acl +endif + +ifeq ($(BR2_PACKAGE_ATTR),y) +COREUTILS_DEPENDENCIES += attr +else +COREUTILS_CONF_OPTS += --disable-xattr +endif + +COREUTILS_DEPENDENCIES += $(TARGET_NLS_DEPENDENCIES) + +# It otherwise fails to link properly, not mandatory though +ifeq ($(BR2_PACKAGE_GETTEXT_PROVIDES_LIBINTL),y) +COREUTILS_CONF_OPTS += --with-libintl-prefix=$(STAGING_DIR)/usr +endif + +ifeq ($(BR2_PACKAGE_GMP),y) +COREUTILS_DEPENDENCIES += gmp +else +COREUTILS_CONF_OPTS += --without-gmp +endif + +ifeq ($(BR2_PACKAGE_LIBCAP),y) +COREUTILS_DEPENDENCIES += libcap +else +COREUTILS_CONF_OPTS += --disable-libcap +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +COREUTILS_CONF_OPTS += --with-openssl=yes +COREUTILS_DEPENDENCIES += openssl +endif + +ifeq ($(BR2_ROOTFS_MERGED_USR),) +# We want to move a few binaries from /usr/bin to /bin. In the case of +# coreutils being built as multi-call binary, we do so by re-creating +# the corresponding symlinks. If coreutils is built with individual +# binaries, we actually move the binaries. +ifeq ($(BR2_PACKAGE_COREUTILS_INDIVIDUAL_BINARIES),y) +define COREUTILS_FIX_BIN_LOCATION + $(foreach f,$(COREUTILS_BIN_PROGS), \ + mv $(TARGET_DIR)/usr/bin/$(f) $(TARGET_DIR)/bin + ) +endef +else +define COREUTILS_FIX_BIN_LOCATION + # some things go in /bin rather than /usr/bin + $(foreach f,$(COREUTILS_BIN_PROGS), \ + rm -f $(TARGET_DIR)/usr/bin/$(f) && \ + ln -sf ../usr/bin/coreutils $(TARGET_DIR)/bin/$(f) + ) +endef +endif +COREUTILS_POST_INSTALL_TARGET_HOOKS += COREUTILS_FIX_BIN_LOCATION +endif + +ifeq ($(BR2_STATIC_LIBS),y) +COREUTILS_CONF_OPTS += --enable-no-install-program=stdbuf +endif + +# link for archaic shells +define COREUTILS_CREATE_TEST_SYMLINK + ln -fs test $(TARGET_DIR)/usr/bin/[ +endef +COREUTILS_POST_INSTALL_TARGET_HOOKS += COREUTILS_CREATE_TEST_SYMLINK + +# gnu thinks chroot is in bin, debian thinks it's in sbin +ifeq ($(BR2_PACKAGE_COREUTILS_INDIVIDUAL_BINARIES),y) +define COREUTILS_FIX_CHROOT_LOCATION + mv $(TARGET_DIR)/usr/bin/chroot $(TARGET_DIR)/usr/sbin +endef +else +define COREUTILS_FIX_CHROOT_LOCATION + rm -f $(TARGET_DIR)/usr/bin/chroot + ln -sf ../bin/coreutils $(TARGET_DIR)/usr/sbin/chroot +endef +endif +COREUTILS_POST_INSTALL_TARGET_HOOKS += COREUTILS_FIX_CHROOT_LOCATION + +# Explicitly install ln and realpath, which we *are* insterested in. +# A lot of other programs still get installed, however, but disabling +# them does not gain much at build time, and is a loooong list that is +# difficult to maintain... +HOST_COREUTILS_CONF_OPTS = \ + --disable-acl \ + --disable-libcap \ + --disable-rpath \ + --disable-single-binary \ + --disable-xattr \ + --without-gmp \ + --enable-install-program=ln,realpath + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/corkscrew/Config.in b/package/corkscrew/Config.in new file mode 100644 index 00000000..1266f86e --- /dev/null +++ b/package/corkscrew/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_CORKSCREW + bool "corkscrew" + help + Corkscrew is a tool for tunneling SSH through HTTP proxies, + but... you might find another use for it. + + https://github.com/bryanpkc/corkscrew diff --git a/package/corkscrew/corkscrew.hash b/package/corkscrew/corkscrew.hash new file mode 100644 index 00000000..4006c6ab --- /dev/null +++ b/package/corkscrew/corkscrew.hash @@ -0,0 +1,3 @@ +# sha256 locally computed +sha256 09d70daaa3145070a1e463dbab6ae1cbc62449b1e09c94e158f6017e7c79c9f6 corkscrew-2.0.tar.gz +sha256 204d8eff92f95aac4df6c8122bc1505f468f3a901e5a4cc08940e0ede1938994 COPYING diff --git a/package/corkscrew/corkscrew.mk b/package/corkscrew/corkscrew.mk new file mode 100644 index 00000000..de696bad --- /dev/null +++ b/package/corkscrew/corkscrew.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# corkscrew +# +################################################################################ + +CORKSCREW_VERSION = 2.0 +CORKSCREW_SITE = $(call github,bryanpkc,corkscrew,v$(CORKSCREW_VERSION)) +CORKSCREW_LICENSE = GPL-2.0 +CORKSCREW_LICENSE_FILES = COPYING +CORKSCREW_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/coxpcall/Config.in b/package/coxpcall/Config.in new file mode 100644 index 00000000..37350179 --- /dev/null +++ b/package/coxpcall/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_COXPCALL + bool "coxpcall" + help + Coxpcall encapsulates the protected calls with a coroutine + based loop, so errors can be handled without the usual + pcall/xpcall issues with coroutines for Lua 5.1. + + http://keplerproject.github.io/coxpcall/ diff --git a/package/coxpcall/coxpcall.hash b/package/coxpcall/coxpcall.hash new file mode 100644 index 00000000..953005e9 --- /dev/null +++ b/package/coxpcall/coxpcall.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 11feb07f08927c39b0b93e8c0bbaf15433f86155cba4820a31a09f4754ab3258 coxpcall-1.17.0-1.src.rock +sha256 11f0f03dda1a28eca658d5e3361c15fd4d048371364aacc5f6870d77a66866c8 coxpcall/doc/license.html diff --git a/package/coxpcall/coxpcall.mk b/package/coxpcall/coxpcall.mk new file mode 100644 index 00000000..6633b925 --- /dev/null +++ b/package/coxpcall/coxpcall.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# coxpcall +# +################################################################################ + +COXPCALL_VERSION = 1.17.0-1 +COXPCALL_SUBDIR = coxpcall +COXPCALL_LICENSE = MIT +COXPCALL_LICENSE_FILES = $(COXPCALL_SUBDIR)/doc/license.html + +$(eval $(luarocks-package)) diff --git a/package/cpio/0001-Minor-fix.patch b/package/cpio/0001-Minor-fix.patch new file mode 100644 index 00000000..429df7d5 --- /dev/null +++ b/package/cpio/0001-Minor-fix.patch @@ -0,0 +1,30 @@ +From 641d3f489cf6238bb916368d4ba0d9325a235afb Mon Sep 17 00:00:00 2001 +From: Sergey Poznyakoff +Date: Mon, 20 Jan 2020 07:45:39 +0200 +Subject: Minor fix * src/global.c: Remove superfluous declaration of + program_name + +[Retrieved from: +https://git.savannah.gnu.org/cgit/cpio.git/commit/?id=641d3f489cf6238bb916368d4ba0d9325a235afb] +Signed-off-by: Fabrice Fontaine +--- + src/global.c | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/src/global.c b/src/global.c +index fb3abe9..acf92bc 100644 +--- a/src/global.c ++++ b/src/global.c +@@ -184,9 +184,6 @@ unsigned int warn_option = 0; + /* Extract to standard output? */ + bool to_stdout_option = false; + +-/* The name this program was run with. */ +-char *program_name; +- + /* A pointer to either lstat or stat, depending on whether + dereferencing of symlinks is done for input files. */ + int (*xstat) (); +-- +cgit v1.2.1 + diff --git a/package/cpio/Config.in b/package/cpio/Config.in new file mode 100644 index 00000000..3ef0402c --- /dev/null +++ b/package/cpio/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_CPIO + bool "cpio" + depends on BR2_USE_WCHAR + # Need argp.h support + select BR2_PACKAGE_ARGP_STANDALONE if BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_MUSL + help + cpio archive utility for creation and extraction. + + https://www.gnu.org/software/cpio/ + +comment "cpio needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR diff --git a/package/cpio/cpio.hash b/package/cpio/cpio.hash new file mode 100644 index 00000000..a3a0d4b3 --- /dev/null +++ b/package/cpio/cpio.hash @@ -0,0 +1,7 @@ +# From https://lists.gnu.org/archive/html/info-gnu/2019-11/msg00002.html +md5 f3438e672e3fa273a7dc26339dd1eed6 cpio-2.13.tar.bz2 +sha1 4dcefc0e1bc36b11506a354768d82b15e3fe6bb8 cpio-2.13.tar.bz2 +# Locally calculated after checking pgp signature +sha256 eab5bdc5ae1df285c59f2a4f140a98fc33678a0bf61bdba67d9436ae26b46f6d cpio-2.13.tar.bz2 +# Locally calculated +sha256 fc82ca8b6fdb18d4e3e85cfd8ab58d1bcd3f1b29abe782895abd91d64763f8e7 COPYING diff --git a/package/cpio/cpio.mk b/package/cpio/cpio.mk new file mode 100644 index 00000000..9ce281dd --- /dev/null +++ b/package/cpio/cpio.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# cpio +# +################################################################################ + +CPIO_VERSION = 2.13 +CPIO_SOURCE = cpio-$(CPIO_VERSION).tar.bz2 +CPIO_SITE = $(BR2_GNU_MIRROR)/cpio +CPIO_CONF_OPTS = --bindir=/bin +CPIO_LICENSE = GPL-3.0+ +CPIO_LICENSE_FILES = COPYING +CPIO_CPE_ID_VENDOR = gnu + +# cpio uses argp.h which is not provided by uclibc or musl by default. +# Use the argp-standalone package to provide this. +ifeq ($(BR2_PACKAGE_ARGP_STANDALONE),y) +CPIO_DEPENDENCIES += argp-standalone +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/cppcms/Config.in b/package/cppcms/Config.in new file mode 100644 index 00000000..1d7635a8 --- /dev/null +++ b/package/cppcms/Config.in @@ -0,0 +1,46 @@ +config BR2_PACKAGE_CPPCMS + bool "cppcms" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgcrypt + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on !BR2_STATIC_LIBS # dlopen() + depends on BR2_USE_WCHAR + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_PCRE + select BR2_PACKAGE_LIBGCRYPT + help + CppCMS is a Free High Performance Web Development Framework + (not a CMS) aimed for Rapid Web Application Development. It + differs from most of other web development frameworks like: + Python Django or Java Servlets on the following aspects: + + - It is designed and tuned to handle extremely high loads. + - It uses modern C++ as primary development language in + order to achieve the above goal. + - It is aimed on development of both Web Sites and Web + Services. + + http://cppcms.com + +if BR2_PACKAGE_CPPCMS + +config BR2_PACKAGE_CPPCMS_ICU + bool "enable icu support" + depends on !BR2_BINFMT_FLAT # icu + depends on BR2_HOST_GCC_AT_LEAST_4_9 # icu + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # icu + select BR2_PACKAGE_ICU + help + Using ICU allows advanced localization features into CppCMS, + in another hand ICU is heavier than iconv. + +comment "icu support needs a toolchain w/ gcc >= 4.9, host gcc >= 4.9" + depends on !BR2_BINFMT_FLAT + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || \ + !BR2_HOST_GCC_AT_LEAST_4_9 + +endif + +comment "cppcms needs a toolchain w/ C++, NPTL, wchar, dynamic library" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS_NPTL || \ + !BR2_USE_WCHAR || BR2_STATIC_LIBS diff --git a/package/cppcms/cppcms.hash b/package/cppcms/cppcms.hash new file mode 100644 index 00000000..86f86d94 --- /dev/null +++ b/package/cppcms/cppcms.hash @@ -0,0 +1,8 @@ +# From http://sourceforge.net/projects/cppcms/files/cppcms/1.2.1/ +sha1 9cb25cc5d507d2f4235326ba3815eba252b4ac77 cppcms-1.2.1.tar.bz2 +md5 2bb259fefb86532e404207c71c094a0c cppcms-1.2.1.tar.bz2 +# Locally computed: +sha256 10fec7710409c949a229b9019ea065e25ff5687103037551b6f05716bf6cac52 cppcms-1.2.1.tar.bz2 +sha256 fb7c15ddf590037d4cd18ebd61148a2304b9243369d238a64f599182377e32db COPYING.TXT +sha256 3e4012cc5950e05bedfdd2f00ceffe1ef71c46ac8c79f07e237ecb23c773f65f MIT.TXT +sha256 d6ce062e5cf4f7e3c536d7d2fee84c882c45245f1848ed3162401f2b29fa2b4b THIRD_PARTY_SOFTWARE.TXT diff --git a/package/cppcms/cppcms.mk b/package/cppcms/cppcms.mk new file mode 100644 index 00000000..b289617b --- /dev/null +++ b/package/cppcms/cppcms.mk @@ -0,0 +1,44 @@ +################################################################################ +# +# cppcms +# +################################################################################ + +CPPCMS_VERSION = 1.2.1 +CPPCMS_SOURCE = cppcms-$(CPPCMS_VERSION).tar.bz2 +CPPCMS_LICENSE = MIT, BSL-1.0 (boost), Public Domain (json2.js), Zlib (md5) +CPPCMS_LICENSE_FILES = COPYING.TXT MIT.TXT THIRD_PARTY_SOFTWARE.TXT +CPPCMS_SITE = http://downloads.sourceforge.net/project/cppcms/cppcms/$(CPPCMS_VERSION) +CPPCMS_INSTALL_STAGING = YES +CPPCMS_CXXFLAGS = $(TARGET_CXXFLAGS) + +# disable rpath to avoid getting /usr/lib added to the link search +# path +CPPCMS_CONF_OPTS = \ + -DCMAKE_SKIP_RPATH=ON \ + -DCMAKE_CXX_FLAGS="$(CPPCMS_CXXFLAGS)" + +CPPCMS_DEPENDENCIES = zlib pcre libgcrypt + +ifeq ($(BR2_PACKAGE_CPPCMS_ICU),y) +CPPCMS_CONF_OPTS += -DDISABLE_ICU_LOCALE=OFF +CPPCMS_DEPENDENCIES += icu +CPPCMS_CXXFLAGS += "`$(STAGING_DIR)/usr/bin/icu-config --cxxflags`" +else +CPPCMS_CONF_OPTS += -DDISABLE_ICU_LOCALE=ON +endif + +ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y) +# posix backend needs monetary.h which isn't available on uClibc +CPPCMS_CONF_OPTS += -DDISABLE_POSIX_LOCALE=on +endif + +# We copy cppcms_tmpl_cc from staging to host because this file can be +# needed for compiling packages using cppcms. And it is not worth +# creating a host package just for a python script. +define CPPCMS_INSTALL_HOST_TOOLS + cp $(STAGING_DIR)/usr/bin/cppcms_tmpl_cc $(HOST_DIR)/bin/cppcms_tmpl_cc +endef +CPPCMS_POST_INSTALL_STAGING_HOOKS += CPPCMS_INSTALL_HOST_TOOLS + +$(eval $(cmake-package)) diff --git a/package/cppdb/0001-mysql-library-suffix.patch b/package/cppdb/0001-mysql-library-suffix.patch new file mode 100644 index 00000000..e65e3e26 --- /dev/null +++ b/package/cppdb/0001-mysql-library-suffix.patch @@ -0,0 +1,23 @@ +Add mysql/ to PATH_SUFFIXES for the library search for mysql. + +On common distros libmysqlclient* is installed and/or symlinked +into /usr/lib. +Since we install the libraries into /usr/lib/mysql alone cppdb +fails to properly link to it giving runtime errors. + +Status: https://sourceforge.net/p/cppcms/bugs/135/ + +Signed-off-by: Gustavo Zacarias + +diff -Nura cppdb-0.3.1.orig/CMakeLists.txt cppdb-0.3.1/CMakeLists.txt +--- cppdb-0.3.1.orig/CMakeLists.txt 2014-10-17 11:05:57.875429748 -0300 ++++ cppdb-0.3.1/CMakeLists.txt 2014-10-17 11:12:57.486775484 -0300 +@@ -196,7 +196,7 @@ + endif() + + if(NOT DISABLE_MYSQL) +- find_library(MYSQL_LIB mysqlclient) ++ find_library(MYSQL_LIB mysqlclient PATH_SUFFIXES mysql) + find_path(MYSQL_PATH mysql.h PATH_SUFFIXES mysql) + if(MYSQL_LIB AND MYSQL_PATH) + include_directories(${MYSQL_PATH}) diff --git a/package/cppdb/Config.in b/package/cppdb/Config.in new file mode 100644 index 00000000..ceff0ab7 --- /dev/null +++ b/package/cppdb/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_CPPDB + bool "cppdb" + # dlfcn.h + depends on !BR2_STATIC_LIBS + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + # Can be built without them but it's useless + depends on BR2_PACKAGE_MYSQL || BR2_PACKAGE_POSTGRESQL || BR2_PACKAGE_SQLITE + help + CppDB is an SQL connectivity library that is designed to + provide platform and Database independent connectivity API + similarly to what JDBC, ODBC and other connectivity libraries + do. + + http://cppcms.com/sql/cppdb/ + +comment "cppdb needs a toolchain w/ C++, threads, dynamic library" + depends on BR2_PACKAGE_MYSQL || BR2_PACKAGE_POSTGRESQL || BR2_PACKAGE_SQLITE + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS diff --git a/package/cppdb/cppdb.hash b/package/cppdb/cppdb.hash new file mode 100644 index 00000000..6423ef28 --- /dev/null +++ b/package/cppdb/cppdb.hash @@ -0,0 +1,6 @@ +# From http://sourceforge.net/projects/cppcms/files/cppdb/0.3.1/ +md5 129f1d75f46114b79160b93807d5223f cppdb-0.3.1.tar.bz2 +sha1 c0410dcc482d71696ac9206044b3a3ac03d31f96 cppdb-0.3.1.tar.bz2 +# locally computed +sha256 c9bff75738922193e67fa726fa225535870d2aa1059f91452c411736284ad566 LICENSE_1_0.txt +sha256 503ed52ef942d44bb26bd47dd5c6765927b198624e4f375e32cc660dfc2a0981 MIT.txt diff --git a/package/cppdb/cppdb.mk b/package/cppdb/cppdb.mk new file mode 100644 index 00000000..e73f04e1 --- /dev/null +++ b/package/cppdb/cppdb.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# cppdb +# +################################################################################ + +CPPDB_VERSION = 0.3.1 +CPPDB_SOURCE = cppdb-$(CPPDB_VERSION).tar.bz2 +CPPDB_SITE = http://downloads.sourceforge.net/project/cppcms/cppdb/$(CPPDB_VERSION) +CPPDB_INSTALL_STAGING = YES +CPPDB_DEPENDENCIES = $(if $(BR2_PACKAGE_SQLITE),sqlite) +CPPDB_LICENSE = BSL-1.0 or MIT +CPPDB_LICENSE_FILES = LICENSE_1_0.txt MIT.txt + +ifeq ($(BR2_PACKAGE_MYSQL),y) +CPPDB_DEPENDENCIES += mysql +else +CPPDB_CONF_OPTS += -DDISABLE_MYSQL=ON +endif + +ifeq ($(BR2_PACKAGE_POSTGRESQL),y) +CPPDB_DEPENDENCIES += postgresql +else +CPPDB_CONF_OPTS += -DDISABLE_PQ=ON +endif + +ifeq ($(BR2_PACKAGE_SQLITE),) +CPPDB_CONF_OPTS += -DDISABLE_SQLITE=ON +endif + +$(eval $(cmake-package)) diff --git a/package/cppunit/Config.in b/package/cppunit/Config.in new file mode 100644 index 00000000..efcdcf01 --- /dev/null +++ b/package/cppunit/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_CPPUNIT + bool "cppunit" + depends on BR2_INSTALL_LIBSTDCPP + # currently the static situation is not correctly detected. + depends on !BR2_STATIC_LIBS + help + CppUnit is the C++ port of the famous JUnit framework for + unit testing. Test output is in XML or text format for + automatic testing and GUI based for supervised tests. + + http://www.freedesktop.org/wiki/Software/cppunit/ + +comment "cppunit needs a toolchain w/ C++, dynamic library" + depends on !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS diff --git a/package/cppunit/cppunit.hash b/package/cppunit/cppunit.hash new file mode 100644 index 00000000..47577f2a --- /dev/null +++ b/package/cppunit/cppunit.hash @@ -0,0 +1,6 @@ +# hash from: http://www.freedesktop.org/wiki/Software/cppunit/: +md5 9dc669e6145cadd9674873e24943e6dd cppunit-1.15.1.tar.gz +sha256 89c5c6665337f56fd2db36bc3805a5619709d51fb136e51937072f63fcc717a7 cppunit-1.15.1.tar.gz + +# Locally calculated: +sha256 badf14d0aa3eaf1a7ae5f19a47a8ef2fc71a96802c4bc3d354535693c389f4e5 COPYING diff --git a/package/cppunit/cppunit.mk b/package/cppunit/cppunit.mk new file mode 100644 index 00000000..3fe12b33 --- /dev/null +++ b/package/cppunit/cppunit.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# cppunit +# +################################################################################ + +CPPUNIT_VERSION = 1.15.1 +CPPUNIT_SITE = http://dev-www.libreoffice.org/src +CPPUNIT_INSTALL_STAGING = YES +CPPUNIT_LICENSE = LGPL-2.1 +CPPUNIT_LICENSE_FILES = COPYING +CPPUNIT_CONF_OPTS = --disable-doxygen + +$(eval $(autotools-package)) diff --git a/package/cppzmq/Config.in b/package/cppzmq/Config.in new file mode 100644 index 00000000..c984c15c --- /dev/null +++ b/package/cppzmq/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_CPPZMQ + bool "cppzmq" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS # zeromq + select BR2_PACKAGE_ZEROMQ + help + C++ binding for zeromq (ZeroMQ, 0MQ, zmq). + + http://github.com/zeromq/cppzmq + +comment "cppzmq needs a toolchain w/ C++, threads" + depends on !(BR2_INSTALL_LIBSTDCPP && BR2_TOOLCHAIN_HAS_THREADS) diff --git a/package/cppzmq/cppzmq.hash b/package/cppzmq/cppzmq.hash new file mode 100644 index 00000000..7e40d4e3 --- /dev/null +++ b/package/cppzmq/cppzmq.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 ffbedc8ffb95caea0b82f9be208c8ac5d6040870b63f2a9c780ccff681d5464c cppzmq-4.7.0.tar.gz +sha256 7e6db90e2e805c72b3daa77849d1cb5f1f92da0e69750c8a4aa1d86d70704748 LICENSE diff --git a/package/cppzmq/cppzmq.mk b/package/cppzmq/cppzmq.mk new file mode 100644 index 00000000..0f0ace25 --- /dev/null +++ b/package/cppzmq/cppzmq.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# cppzmq +# +################################################################################ + +CPPZMQ_VERSION = 4.7.0 +CPPZMQ_SITE = $(call github,zeromq,cppzmq,v$(CPPZMQ_VERSION)) +CPPZMQ_INSTALL_STAGING = YES +CPPZMQ_DEPENDENCIES = host-pkgconf zeromq +CPPZMQ_LICENSE = MIT +CPPZMQ_LICENSE_FILES = LICENSE +CPPZMQ_CONF_OPTS = -DCPPZMQ_BUILD_TESTS=OFF + +$(eval $(cmake-package)) diff --git a/package/cpuburn-arm/Config.in b/package/cpuburn-arm/Config.in new file mode 100644 index 00000000..14190479 --- /dev/null +++ b/package/cpuburn-arm/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_CPUBURN_ARM_ARCH_SUPPORTS + bool + default y if BR2_cortex_a7 + default y if BR2_cortex_a8 + default y if BR2_cortex_a9 + default y if BR2_cortex_a53 + +config BR2_PACKAGE_CPUBURN_ARM + bool "cpuburn-arm" + depends on BR2_PACKAGE_CPUBURN_ARM_ARCH_SUPPORTS + help + Make ARM cores generate as much heat as possible. Supports + Cortex A7/A8/A9/A53. + + https://github.com/ssvb/cpuburn-arm diff --git a/package/cpuburn-arm/cpuburn-arm.hash b/package/cpuburn-arm/cpuburn-arm.hash new file mode 100644 index 00000000..55f34f87 --- /dev/null +++ b/package/cpuburn-arm/cpuburn-arm.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 354381ec8c352e6c84875ac034004df44b0ed0ac097c400b8d2e47652815c3a2 cpuburn-arm-ad7e646700d14b81413297bda02fb7fe96613c3f.tar.gz +sha256 47f10095a04d16c8d8d52598371fa01b6a6e87134083b9ec3c43d83ff8576f55 cpuburn-a7.S diff --git a/package/cpuburn-arm/cpuburn-arm.mk b/package/cpuburn-arm/cpuburn-arm.mk new file mode 100644 index 00000000..649ffd22 --- /dev/null +++ b/package/cpuburn-arm/cpuburn-arm.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# cpuburn-arm +# +################################################################################ + +CPUBURN_ARM_VERSION = ad7e646700d14b81413297bda02fb7fe96613c3f +CPUBURN_ARM_SITE = $(call github,ssvb,cpuburn-arm,$(CPUBURN_ARM_VERSION)) +CPUBURN_ARM_LICENSE = MIT +CPUBURN_ARM_LICENSE_FILES = cpuburn-a7.S + +ifeq ($(BR2_cortex_a7),y) +CPUBURN_ARM_SRC = cpuburn-a7.S +else ifeq ($(BR2_cortex_a8),y) +CPUBURN_ARM_SRC = cpuburn-a8.S +else ifeq ($(BR2_cortex_a9),y) +CPUBURN_ARM_SRC = cpuburn-a9.S +else ifeq ($(BR2_cortex_a53),y) +CPUBURN_ARM_SRC = cpuburn-a53.S +endif + +define CPUBURN_ARM_BUILD_CMDS + $(TARGET_CC) $(TARGET_CFLAGS) -o $(@D)/cpuburn \ + $(@D)/$(CPUBURN_ARM_SRC) +endef + +define CPUBURN_ARM_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 $(@D)/cpuburn $(TARGET_DIR)/usr/bin/cpuburn +endef + +$(eval $(generic-package)) diff --git a/package/cpuload/Config.in b/package/cpuload/Config.in new file mode 100644 index 00000000..9a7b4e9f --- /dev/null +++ b/package/cpuload/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_CPULOAD + bool "cpuload" + help + cpuload is a simple tool to obtain intuitive vision of CPU + load (including total, user, system, irq and softirq) within a + certain time, which is especially useful for embedded system + without GUI. + + https://github.com/kelvincheung/cpuload diff --git a/package/cpuload/cpuload.hash b/package/cpuload/cpuload.hash new file mode 100644 index 00000000..b80879ca --- /dev/null +++ b/package/cpuload/cpuload.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 1d61f4776dc3e2746343d68b2ea2faf138e54666b630a6060df4f3945badbcae cpuload-0.3.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/cpuload/cpuload.mk b/package/cpuload/cpuload.mk new file mode 100644 index 00000000..648b17e5 --- /dev/null +++ b/package/cpuload/cpuload.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# cpuload +# +################################################################################ + +CPULOAD_VERSION = 0.3 +CPULOAD_SITE = $(call github,kelvincheung,cpuload,v$(CPULOAD_VERSION)) +CPULOAD_LICENSE = GPL-2.0 +CPULOAD_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/cracklib/0001-Force-grep-to-treat-the-input-as-text-when-formattin.patch b/package/cracklib/0001-Force-grep-to-treat-the-input-as-text-when-formattin.patch new file mode 100644 index 00000000..b05a69ca --- /dev/null +++ b/package/cracklib/0001-Force-grep-to-treat-the-input-as-text-when-formattin.patch @@ -0,0 +1,30 @@ +From d27062fe7a520d5791f7a56d175a5cb6a39bae61 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Stefan=20S=C3=B8rensen?= +Date: Tue, 18 Apr 2017 12:00:39 +0200 +Subject: [PATCH] Force grep to treat the input as text when formatting word + files. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Stefan Sørensen +--- + util/cracklib-format | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/util/cracklib-format b/util/cracklib-format +index 1d7be5b..b1de8e8 100644 +--- a/util/cracklib-format ++++ b/util/cracklib-format +@@ -4,7 +4,7 @@ + # into cracklib-packer + # + gzip -cdf "$@" | +- grep -v '^\(#\|$\)' | ++ grep -a -v '^\(#\|$\)' | + tr '[A-Z]' '[a-z]' | + tr -cd '\012[a-z][0-9]' | + env LC_ALL=C sort -u +-- +2.9.3 + diff --git a/package/cracklib/Config.in b/package/cracklib/Config.in new file mode 100644 index 00000000..4a0f43f4 --- /dev/null +++ b/package/cracklib/Config.in @@ -0,0 +1,28 @@ +config BR2_PACKAGE_CRACKLIB + bool "cracklib" + help + CrackLib tests passwords to determine whether they match + certain security-oriented characteristics, with the purpose + of stopping users from choosing passwords that are easy to + guess. CrackLib performs several tests on passwords: it + tries to generate words from a username and gecos entry and + checks those words against the password; it checks for + simplistic patterns in passwords; and it checks for the + password in a dictionary. + + https://github.com/cracklib/cracklib + +if BR2_PACKAGE_CRACKLIB + +config BR2_PACKAGE_CRACKLIB_TOOLS + bool "install tools" + help + Install cracklib command line tools for creating dicts. + +config BR2_PACKAGE_CRACKLIB_FULL_DICT + bool "full dict" + help + Install the full cracklib dict (requires about 8Mb extra + target space). + +endif diff --git a/package/cracklib/cracklib.hash b/package/cracklib/cracklib.hash new file mode 100644 index 00000000..9bc8e3d2 --- /dev/null +++ b/package/cracklib/cracklib.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 8b6fd202f3f1d8fa395d3b7a5d821227cfd8bb4a9a584a7ae30cf62cea6287dd cracklib-2.9.7.tar.gz +sha256 7f0c45faf84a2494f15d1e2720394aca4a379163a70c4acad948186c0047d389 cracklib-words-2.9.7.gz +sha256 f18a0811fa0e220ccbc42f661545e77f0388631e209585ed582a1c693029c6aa COPYING.LIB diff --git a/package/cracklib/cracklib.mk b/package/cracklib/cracklib.mk new file mode 100644 index 00000000..8e6a844f --- /dev/null +++ b/package/cracklib/cracklib.mk @@ -0,0 +1,54 @@ +################################################################################ +# +# cracklib +# +################################################################################ + +CRACKLIB_VERSION = 2.9.7 +CRACKLIB_SITE = https://github.com/cracklib/cracklib/releases/download/v$(CRACKLIB_VERSION) +CRACKLIB_LICENSE = LGPL-2.1 +CRACKLIB_LICENSE_FILES = COPYING.LIB +CRACKLIB_CPE_ID_VENDOR = cracklib_project +CRACKLIB_INSTALL_STAGING = YES +CRACKLIB_DEPENDENCIES = host-cracklib $(TARGET_NLS_DEPENDENCIES) +CRACKLIB_CONF_ENV = LIBS=$(TARGET_NLS_LIBS) + +ifeq ($(BR2_PACKAGE_ZLIB),y) +CRACKLIB_CONF_OPTS += --with-zlib +CRACKLIB_DEPENDENCIES += zlib +else +CRACKLIB_CONF_OPTS += --without-zlib +endif + +ifeq ($(BR2_PACKAGE_PYTHON),y) +CRACKLIB_CONF_OPTS += --with-python +CRACKLIB_DEPENDENCIES += python +else +CRACKLIB_CONF_OPTS += --without-python +endif + +HOST_CRACKLIB_CONF_OPTS += --without-python --without-zlib + +ifeq ($(BR2_PACKAGE_CRACKLIB_FULL_DICT),y) +CRACKLIB_EXTRA_DOWNLOADS = cracklib-words-$(CRACKLIB_VERSION).gz +CRACKLIB_DICT_SOURCE = $(CRACKLIB_DL_DIR)/cracklib-words-$(CRACKLIB_VERSION).gz +else +CRACKLIB_DICT_SOURCE = $(@D)/dicts/cracklib-small +endif + +ifeq ($(BR2_PACKAGE_CRACKLIB_TOOLS),) +define CRACKLIB_REMOVE_TOOLS + rm -f $(TARGET_DIR)/usr/sbin/*cracklib* +endef +CRACKLIB_POST_INSTALL_TARGET_HOOKS += CRACKLIB_REMOVE_TOOLS +endif + +define CRACKLIB_BUILD_DICT + $(HOST_MAKE_ENV) cracklib-format $(CRACKLIB_DICT_SOURCE) | \ + $(HOST_MAKE_ENV) cracklib-packer $(TARGET_DIR)/usr/share/cracklib/pw_dict + rm $(TARGET_DIR)/usr/share/cracklib/cracklib-small +endef +CRACKLIB_POST_INSTALL_TARGET_HOOKS += CRACKLIB_BUILD_DICT + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/cramfs/Config.in b/package/cramfs/Config.in new file mode 100644 index 00000000..a177004c --- /dev/null +++ b/package/cramfs/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_CRAMFS + bool "cramfs" + select BR2_PACKAGE_ZLIB + help + cramfs is a compressed read-only filesystem. This package + contains the tools to generate and check a cramfs filesystem. + + https://github.com/npitre/cramfs-tools diff --git a/package/cramfs/Config.in.host b/package/cramfs/Config.in.host new file mode 100644 index 00000000..e594d5c8 --- /dev/null +++ b/package/cramfs/Config.in.host @@ -0,0 +1,7 @@ +config BR2_PACKAGE_HOST_CRAMFS + bool "host cramfs" + help + cramfs is a compressed read-only filesystem. This package + contains the tools to generate and check a cramfs filesystem. + + https://github.com/npitre/cramfs-tools diff --git a/package/cramfs/cramfs.hash b/package/cramfs/cramfs.hash new file mode 100644 index 00000000..672266b4 --- /dev/null +++ b/package/cramfs/cramfs.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 cdb7a4ecad034f063b6456b37cdf653ae31758a224c32161e54712a9d7f01cc3 cramfs-2.1.tar.gz +sha256 204d8eff92f95aac4df6c8122bc1505f468f3a901e5a4cc08940e0ede1938994 COPYING diff --git a/package/cramfs/cramfs.mk b/package/cramfs/cramfs.mk new file mode 100644 index 00000000..85706d1a --- /dev/null +++ b/package/cramfs/cramfs.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# cramfs +# +################################################################################ + +CRAMFS_VERSION = 2.1 +CRAMFS_SITE = $(call github,npitre,cramfs-tools,v$(CRAMFS_VERSION)) +CRAMFS_LICENSE = GPL-2.0+ +CRAMFS_LICENSE_FILES = COPYING + +CRAMFS_DEPENDENCIES = zlib +HOST_CRAMFS_DEPENDENCIES = host-zlib + +define CRAMFS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) CC="$(TARGET_CC)" CFLAGS="$(TARGET_CFLAGS)" LDFLAGS="$(TARGET_LDFLAGS)" -C $(@D) +endef + +define CRAMFS_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 755 $(@D)/mkcramfs $(TARGET_DIR)/usr/bin/mkcramfs + $(INSTALL) -D -m 755 $(@D)/cramfsck $(TARGET_DIR)/usr/bin/cramfsck +endef + +define HOST_CRAMFS_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) CFLAGS="$(HOST_CFLAGS) -Wall -O2 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64" LDFLAGS="$(HOST_LDFLAGS)" -C $(@D) +endef + +define HOST_CRAMFS_INSTALL_CMDS + $(INSTALL) -D -m 755 $(@D)/mkcramfs $(HOST_DIR)/bin/mkcramfs + $(INSTALL) -D -m 755 $(@D)/cramfsck $(HOST_DIR)/bin/cramfsck +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/crda/0001-crda-support-python-3-in-utils-key2pub.py.patch b/package/crda/0001-crda-support-python-3-in-utils-key2pub.py.patch new file mode 100644 index 00000000..f2b9cca2 --- /dev/null +++ b/package/crda/0001-crda-support-python-3-in-utils-key2pub.py.patch @@ -0,0 +1,283 @@ +From 8228c484a1533ff904b276c342adcb6310abe272 Mon Sep 17 00:00:00 2001 +From: Taahir Ahmed +Date: Wed, 30 Mar 2016 11:23:54 -0300 +Subject: [PATCH] crda: support python 3 in utils/key2pub.py + +utils/key2pub.py can now be run under either python 2.7 or python 3.x. +This required some minor syntactical changes as well as switching from +M2Crypto to pycryptodomex, since M2Crypto doesn't support python 3.x. + +In addition, some errors in the generated source file keys-ssl.h are +fixed: + + * The correct OpenSSL header for BN_ULONG is included. + + * The generated constants are given the 'ull' suffix to prevent + warnings about constants that are too large. + +[Gustavo: don't call /utils/key2pub.py since that doesn't compute] + +Use pycryptodomex insdead of pycrypto + +From [1]: +"PyCryptodome is a fork of PyCrypto, which is not maintained any more +(the last release dates back to 2013 [2]). It exposes almost the same +API, but there are a few incompatibilities [3]." + +[1] https://github.com/OP-TEE/optee_os/commit/90ad2450436fdd9fc0d28a3f92f3fbcfd89a38f0 +[2] https://pypi.org/project/pycrypto/#history +[3] https://pycryptodome.readthedocs.io/en/latest/src/vs_pycrypto.html + +Signed-off-by: Gustavo Zacarias +[Rebased against crda-4.14] +Signed-off-by: Peter Seiderer +[Romain: Use pycryptodomex] +Signed-off-by: Romain Naour +--- + Makefile | 2 +- + utils/key2pub.py | 146 ++++++++++++++++++++++++----------------------- + 2 files changed, 75 insertions(+), 73 deletions(-) + +diff --git a/Makefile b/Makefile +index a3ead30..8da38d0 100644 +--- a/Makefile ++++ b/Makefile +@@ -112,7 +112,7 @@ $(REG_BIN): + keys-%.c: utils/key2pub.py $(wildcard $(PUBKEY_DIR)/*.pem) + $(NQ) ' GEN ' $@ + $(NQ) ' Trusted pubkeys:' $(wildcard $(PUBKEY_DIR)/*.pem) +- $(Q)./utils/key2pub.py --$* $(wildcard $(PUBKEY_DIR)/*.pem) $@ ++ $(Q) python utils/key2pub.py --$* $(wildcard $(PUBKEY_DIR)/*.pem) $@ + + $(LIBREG): regdb.h reglib.h reglib.c + $(NQ) ' CC ' $@ +diff --git a/utils/key2pub.py b/utils/key2pub.py +index 9bb04cd..8a0ba2a 100755 +--- a/utils/key2pub.py ++++ b/utils/key2pub.py +@@ -1,126 +1,128 @@ + #!/usr/bin/env python + ++import io + import sys + try: +- from M2Crypto import RSA +-except ImportError, e: +- sys.stderr.write('ERROR: Failed to import the "M2Crypto" module: %s\n' % e.message) +- sys.stderr.write('Please install the "M2Crypto" Python module.\n') +- sys.stderr.write('On Debian GNU/Linux the package is called "python-m2crypto".\n') +- sys.exit(1) ++ from Cryptodome.PublicKey import RSA ++except ImportError as e: ++ sys.stderr.write('ERROR: Failed to import the "Cryptodome.PublicKey" module: %s\n' % e.message) ++ sys.stderr.write('Please install the "Cryptodome.PublicKey" Python module.\n') ++ sys.stderr.write('On Debian GNU/Linux the package is called "python-cryptodomex".\n') ++ sys.exit(1) ++ ++def bitwise_collect(value, radix_bits): ++ words = [] ++ radix_mask = (1 << radix_bits) - 1 ++ while value != 0: ++ words.append(value & radix_mask) ++ value >>= radix_bits ++ return words + + def print_ssl_64(output, name, val): +- while val[0] == '\0': +- val = val[1:] +- while len(val) % 8: +- val = '\0' + val +- vnew = [] +- while len(val): +- vnew.append((val[0], val[1], val[2], val[3], val[4], val[5], val[6], val[7])) +- val = val[8:] +- vnew.reverse() +- output.write('static BN_ULONG %s[%d] = {\n' % (name, len(vnew))) ++ # OpenSSL expects 64-bit words given least-significant-word first. ++ vwords = bitwise_collect(val, 64) ++ ++ output.write(u'static BN_ULONG {}[] = {{\n'.format(name)) + idx = 0 +- for v1, v2, v3, v4, v5, v6, v7, v8 in vnew: ++ for vword in vwords: + if not idx: +- output.write('\t') +- output.write('0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x, ' % (ord(v1), ord(v2), ord(v3), ord(v4), ord(v5), ord(v6), ord(v7), ord(v8))) ++ output.write(u'\t') ++ output.write(u'0x{:016x}ULL, '.format(vword)) + idx += 1 + if idx == 2: + idx = 0 +- output.write('\n') ++ output.write(u'\n') + if idx: +- output.write('\n') +- output.write('};\n\n') ++ output.write(u'\n') ++ output.write(u'};\n\n') + + def print_ssl_32(output, name, val): +- while val[0] == '\0': +- val = val[1:] +- while len(val) % 4: +- val = '\0' + val +- vnew = [] +- while len(val): +- vnew.append((val[0], val[1], val[2], val[3], )) +- val = val[4:] +- vnew.reverse() +- output.write('static BN_ULONG %s[%d] = {\n' % (name, len(vnew))) ++ # OpenSSL expects 32-bit words given least-significant-word first. ++ vwords = bitwise_collect(val, 32) ++ ++ output.write(u'static BN_ULONG {}[] = {{\n'.format(name)) + idx = 0 +- for v1, v2, v3, v4 in vnew: ++ for vword in vwords: + if not idx: +- output.write('\t') +- output.write('0x%.2x%.2x%.2x%.2x, ' % (ord(v1), ord(v2), ord(v3), ord(v4))) ++ output.write(u'\t') ++ output.write(u'0x{:08x}, '.format(vword)) + idx += 1 + if idx == 4: + idx = 0 +- output.write('\n') ++ output.write(u'\n') + if idx: +- output.write('\n') +- output.write('};\n\n') ++ output.write(u'\n') ++ output.write(u'};\n\n') + + def print_ssl(output, name, val): ++ ++ output.write(u'#include \n') ++ output.write(u'#include \n') ++ + import struct +- output.write('#include \n') + if len(struct.pack('@L', 0)) == 8: + return print_ssl_64(output, name, val) + else: + return print_ssl_32(output, name, val) + + def print_ssl_keys(output, n): +- output.write(r''' ++ output.write(u''' + struct pubkey { + struct bignum_st e, n; + }; + +-#define KEY(data) { \ +- .d = data, \ +- .top = sizeof(data)/sizeof(data[0]), \ ++#define KEY(data) { \\ ++ .d = data, \\ ++ .top = sizeof(data)/sizeof(data[0]), \\ + } + +-#define KEYS(e,n) { KEY(e), KEY(n), } ++#define KEYS(e,n) { KEY(e), KEY(n), } + + static struct pubkey keys[] = { + ''') + for n in xrange(n + 1): +- output.write(' KEYS(e_%d, n_%d),\n' % (n, n)) +- output.write('};\n') ++ output.write(u' KEYS(e_{0}, n_{0}),\n'.format(n)) ++ output.write(u'};\n') + pass + + def print_gcrypt(output, name, val): +- output.write('#include \n') +- while val[0] == '\0': +- val = val[1:] +- output.write('static const uint8_t %s[%d] = {\n' % (name, len(val))) ++ # gcrypt expects 8-bit words most-significant-word first ++ vwords = bitwise_collect(val, 8) ++ vwords.reverse() ++ ++ output.write(u'#include \n') ++ output.write(u'static const uint8_t %s[%d] = {\n' % (name, len(vwords))) + idx = 0 +- for v in val: ++ for vword in vwords: + if not idx: +- output.write('\t') +- output.write('0x%.2x, ' % ord(v)) ++ output.write(u'\t') ++ output.write(u'0x{:02x}, '.format(vword)) + idx += 1 + if idx == 8: + idx = 0 +- output.write('\n') ++ output.write(u'\n') + if idx: +- output.write('\n') +- output.write('};\n\n') ++ output.write(u'\n') ++ output.write(u'};\n\n') + + def print_gcrypt_keys(output, n): +- output.write(r''' ++ output.write(u''' + struct key_params { + const uint8_t *e, *n; + uint32_t len_e, len_n; + }; + +-#define KEYS(_e, _n) { \ +- .e = _e, .len_e = sizeof(_e), \ +- .n = _n, .len_n = sizeof(_n), \ ++#define KEYS(_e, _n) { \\ ++ .e = _e, .len_e = sizeof(_e), \\ ++ .n = _n, .len_n = sizeof(_n), \\ + } + + static const struct key_params __attribute__ ((unused)) keys[] = { + ''') +- for n in xrange(n + 1): +- output.write(' KEYS(e_%d, n_%d),\n' % (n, n)) +- output.write('};\n') +- ++ for n in range(n + 1): ++ output.write(u' KEYS(e_{0}, n_{0}),\n'.format(n)) ++ output.write(u'};\n') ++ + + modes = { + '--ssl': (print_ssl, print_ssl_keys), +@@ -135,21 +137,21 @@ except IndexError: + mode = None + + if not mode in modes: +- print 'Usage: %s [%s] input-file... output-file' % (sys.argv[0], '|'.join(modes.keys())) ++ print('Usage: {} [{}] input-file... output-file'.format(sys.argv[0], '|'.join(modes.keys()))) + sys.exit(2) + +-output = open(outfile, 'w') ++output = io.open(outfile, 'w') + + # load key + idx = 0 + for f in files: +- try: +- key = RSA.load_pub_key(f) +- except RSA.RSAError: +- key = RSA.load_key(f) + +- modes[mode][0](output, 'e_%d' % idx, key.e[4:]) +- modes[mode][0](output, 'n_%d' % idx, key.n[4:]) ++ key_contents = io.open(f, 'rb').read() ++ key = RSA.importKey(key_contents) ++ ++ modes[mode][0](output, 'e_{}'.format(idx), key.e) ++ modes[mode][0](output, 'n_{}'.format(idx), key.n) ++ + idx += 1 + + modes[mode][1](output, idx - 1) +-- +2.25.3 + diff --git a/package/crda/0002-drop-ldconfig-call.patch b/package/crda/0002-drop-ldconfig-call.patch new file mode 100644 index 00000000..f09e258a --- /dev/null +++ b/package/crda/0002-drop-ldconfig-call.patch @@ -0,0 +1,15 @@ +Drop ldconfig call, it's useless for cross-compiling. + +Signed-off-by: Gustavo Zacarias + +diff -Nura crda-3.18.orig/Makefile crda-3.18/Makefile +--- crda-3.18.orig/Makefile 2015-02-18 10:34:23.841259401 -0300 ++++ crda-3.18/Makefile 2015-02-18 10:35:10.524201452 -0300 +@@ -127,7 +127,6 @@ + $(NQ) ' INSTALL libreg' + $(Q)mkdir -p $(DESTDIR)/$(LIBDIR) + $(Q)cp $(LIBREG) $(DESTDIR)/$(LIBDIR)/ +- $(Q)ldconfig + + %.o: %.c regdb.h $(LIBREG) + $(NQ) ' CC ' $@ diff --git a/package/crda/0003-drop-werror.patch b/package/crda/0003-drop-werror.patch new file mode 100644 index 00000000..072e3fc4 --- /dev/null +++ b/package/crda/0003-drop-werror.patch @@ -0,0 +1,37 @@ +From f38253e066dee96b148be1b79a6b4a696ee0ae0b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=B6rg=20Krause?= +Date: Sun, 1 May 2016 10:05:48 +0200 +Subject: [PATCH] drop werror +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Building crda with GCC 6 fails because of all compiler warnings are treated as +errors. Disable the compiler option '-Werror': + +keys-gcrypt.c:94:32: error: ‘keys’ defined but not used [-Werror=unused-const-variable=] + static const struct key_params keys[] = { + ^~~~ +cc1: all warnings being treated as errors + +Signed-off-by: Jörg Krause +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index 74f1172..e9b417f 100644 +--- a/Makefile ++++ b/Makefile +@@ -26,7 +26,7 @@ PUBKEY_DIR?=pubkeys + RUNTIME_PUBKEY_DIR?=/etc/wireless-regdb/pubkeys + + CFLAGS += -O2 -fpic +-CFLAGS += -std=gnu99 -Wall -Werror -pedantic ++CFLAGS += -std=gnu99 -Wall -pedantic + CFLAGS += -Wall -g + LDLIBREG += -lreg + LDLIBS += $(LDLIBREG) +-- +2.8.2 + diff --git a/package/crda/Config.in b/package/crda/Config.in new file mode 100644 index 00000000..469fa77f --- /dev/null +++ b/package/crda/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_CRDA + bool "crda" + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgcrypt + depends on BR2_TOOLCHAIN_HAS_THREADS # libnl + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_LIBGCRYPT + select BR2_PACKAGE_LIBNL + # regdb is a runtime dependency + select BR2_PACKAGE_WIRELESS_REGDB + help + Central Regulatory Domain Agent. + + This package provides a Central Regulatory Domain Agent (CRDA) + to be used by the Linux kernel cf80211 wireless subsystem to + query and apply the regulatory domain settings wireless + devices may operate within for a given location. + + https://wireless.wiki.kernel.org/en/developers/regulatory/crda + +comment "crda needs a toolchain w/ threads, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/crda/crda.hash b/package/crda/crda.hash new file mode 100644 index 00000000..2a263d17 --- /dev/null +++ b/package/crda/crda.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 5a8f35bb8b27474f466b0e75d451ba917433d8aab1889678a64d9c4e72a8b8c2 crda-4.14.tar.gz +sha256 c16224b376128b589eea69a8fdd1f09818b8cb995e10d1e37f72dff22233d7b0 LICENSE diff --git a/package/crda/crda.mk b/package/crda/crda.mk new file mode 100644 index 00000000..31a64d00 --- /dev/null +++ b/package/crda/crda.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# crda +# +################################################################################ + +CRDA_VERSION = 4.14 +CRDA_SITE = https://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/crda.git/snapshot +CRDA_DEPENDENCIES = host-pkgconf host-python-pycryptodomex libnl libgcrypt +CRDA_LICENSE = ISC +CRDA_LICENSE_FILES = LICENSE +CRDA_CPE_ID_VENDOR = kernel + +define CRDA_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) \ + $(MAKE) all_noverify -C $(@D) +endef + +define CRDA_INSTALL_TARGET_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) install -C $(@D) DESTDIR=$(TARGET_DIR) +endef + +$(eval $(generic-package)) diff --git a/package/crudini/Config.in b/package/crudini/Config.in new file mode 100644 index 00000000..240848df --- /dev/null +++ b/package/crudini/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_CRUDINI + bool "crudini" + depends on BR2_PACKAGE_PYTHON || BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_INIPARSE # runtime + help + A utility for handling ini files from the command line and + shell scripts + + https://pypi.python.org/pypi/crudini diff --git a/package/crudini/crudini.hash b/package/crudini/crudini.hash new file mode 100644 index 00000000..6f2563df --- /dev/null +++ b/package/crudini/crudini.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 e1b8125ac4373ece3bb0bb047ba9336e5bd55ed5d56b9729968058c9385ab546 crudini-0.9.3.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/crudini/crudini.mk b/package/crudini/crudini.mk new file mode 100644 index 00000000..7141e2b2 --- /dev/null +++ b/package/crudini/crudini.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# crudini +# +################################################################################ + +CRUDINI_VERSION = 0.9.3 +CRUDINI_SITE = $(call github,pixelb,crudini,$(CRUDINI_VERSION)) +CRUDINI_SETUP_TYPE = setuptools +CRUDINI_LICENSE = GPL-2.0 +CRUDINI_LICENSE_FILES = COPYING + +$(eval $(python-package)) diff --git a/package/cryptodev-linux/cryptodev-linux.hash b/package/cryptodev-linux/cryptodev-linux.hash new file mode 100644 index 00000000..1cbc2e85 --- /dev/null +++ b/package/cryptodev-linux/cryptodev-linux.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 0e2d30cf440a55e1125c815f0df229350192cfddbb38e6571e97de19069c97c6 cryptodev-linux-fabe5989a3dc9fba0cd0a40b612247cdde351c01.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/cryptodev-linux/cryptodev-linux.mk b/package/cryptodev-linux/cryptodev-linux.mk new file mode 100644 index 00000000..2a65755a --- /dev/null +++ b/package/cryptodev-linux/cryptodev-linux.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# cryptodev-linux +# +################################################################################ + +CRYPTODEV_LINUX_VERSION = fabe5989a3dc9fba0cd0a40b612247cdde351c01 +CRYPTODEV_LINUX_SITE = $(call github,cryptodev-linux,cryptodev-linux,$(CRYPTODEV_LINUX_VERSION)) +CRYPTODEV_LINUX_INSTALL_STAGING = YES +CRYPTODEV_LINUX_LICENSE = GPL-2.0+ +CRYPTODEV_LINUX_LICENSE_FILES = COPYING +CRYPTODEV_LINUX_CPE_ID_VENDOR = cryptodev-linux + +CRYPTODEV_LINUX_PROVIDES = cryptodev + +define CRYPTODEV_LINUX_MODULE_GEN_VERSION_H + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) version.h +endef +CRYPTODEV_LINUX_PRE_BUILD_HOOKS += CRYPTODEV_LINUX_MODULE_GEN_VERSION_H + +define CRYPTODEV_LINUX_INSTALL_STAGING_CMDS + $(INSTALL) -D -m 644 $(@D)/crypto/cryptodev.h \ + $(STAGING_DIR)/usr/include/crypto/cryptodev.h +endef + +$(eval $(kernel-module)) +$(eval $(generic-package)) diff --git a/package/cryptodev/Config.in b/package/cryptodev/Config.in new file mode 100644 index 00000000..d1e64498 --- /dev/null +++ b/package/cryptodev/Config.in @@ -0,0 +1,50 @@ +comment "cryptodev needs a Linux kernel to be built" + depends on !BR2_LINUX_KERNEL + +config BR2_PACKAGE_CRYPTODEV + bool "cryptodev" + depends on BR2_LINUX_KERNEL + help + Select the desired cryptodev implementation. + +if BR2_PACKAGE_CRYPTODEV + +choice + prompt "cryptodev variant" + default BR2_PACKAGE_CRYPTODEV_LINUX if !BR2_microblaze + help + Select the cryptodev implementation. + +config BR2_PACKAGE_CRYPTODEV_LINUX + bool "cryptodev-linux" + depends on !BR2_microblaze + select BR2_PACKAGE_HAS_CRYPTODEV + help + Cryptodev-linux is a device that allows access to Linux kernel + cryptographic drivers; thus allowing userspace applications + to take advantage of hardware accelerators. + + http://cryptodev-linux.org/index.html + +config BR2_PACKAGE_OCF_LINUX + bool "ocf-linux" + select BR2_PACKAGE_HAS_CRYPTODEV + help + OCF-Linux is a Linux port of the OpenBSD/FreeBSD Cryptographic + Framework (OCF). This port aims to bring full asynchronous + HW/SW crypto acceleration to the Linux kernel and applications + running under Linux. + + http://ocf-linux.sourceforge.net/ + +endchoice + +config BR2_PACKAGE_HAS_CRYPTODEV + bool + +config BR2_PACKAGE_PROVIDES_CRYPTODEV + string + default "cryptodev-linux" if BR2_PACKAGE_CRYPTODEV_LINUX + default "ocf-linux" if BR2_PACKAGE_OCF_LINUX + +endif diff --git a/package/cryptodev/cryptodev.mk b/package/cryptodev/cryptodev.mk new file mode 100644 index 00000000..969d1bd1 --- /dev/null +++ b/package/cryptodev/cryptodev.mk @@ -0,0 +1,7 @@ +################################################################################ +# +# cryptodev +# +################################################################################ + +$(eval $(virtual-package)) diff --git a/package/cryptopp/cryptopp.hash b/package/cryptopp/cryptopp.hash new file mode 100644 index 00000000..2774dc70 --- /dev/null +++ b/package/cryptopp/cryptopp.hash @@ -0,0 +1,5 @@ +# Hash from: https://www.cryptopp.com/release830.html: +sha512 ad5219a66c5924d330d3646d0ff996dd235006f6812074bc4eb9e8c662a4f000ba20449d377f24b133d19ce682f7b2a3b2eb4c08857ce0f5bb39743d1d425147 cryptopp830.zip + +# Hash for license file: +sha256 e668af8c73a38a66a1e8951d14ec24e7582fee5254dd6c3dae488a416d105d5f License.txt diff --git a/package/cryptopp/cryptopp.mk b/package/cryptopp/cryptopp.mk new file mode 100644 index 00000000..17061084 --- /dev/null +++ b/package/cryptopp/cryptopp.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# cryptopp +# +################################################################################ + +CRYPTOPP_VERSION = 8.3.0 +CRYPTOPP_SOURCE = cryptopp$(subst .,,$(CRYPTOPP_VERSION)).zip +CRYPTOPP_SITE = https://cryptopp.com +CRYPTOPP_LICENSE = BSL-1.0, BSD-3-Clause (CRYPTOGAMS), Public domain (ChaCha SSE2 and AVX) +CRYPTOPP_LICENSE_FILES = License.txt +CRYPTOPP_CPE_ID_VENDOR = cryptopp +CRYPTOPP_CPE_ID_PRODUCT = crypto\+\+ +CRYPTOPP_INSTALL_STAGING = YES + +define HOST_CRYPTOPP_EXTRACT_CMDS + $(UNZIP) $(HOST_CRYPTOPP_DL_DIR)/$(CRYPTOPP_SOURCE) -d $(@D) +endef + +HOST_CRYPTOPP_CXXFLAGS = $(HOST_CFLAGS) -fPIC + +# _mm256_broadcastsi128_si256 has been added only in gcc 4.9 +ifneq ($(BR2_HOST_GCC_AT_LEAST_4_9),y) +HOST_CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_AVX2 +endif + +HOST_CRYPTOPP_MAKE_OPTS = \ + $(HOST_CONFIGURE_OPTS) \ + CXXFLAGS="$(HOST_CRYPTOPP_CXXFLAGS)" + +define HOST_CRYPTOPP_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) $(HOST_CRYPTOPP_MAKE_OPTS) shared +endef + +define HOST_CRYPTOPP_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) PREFIX=$(HOST_DIR) install-lib +endef + +$(eval $(host-generic-package)) diff --git a/package/cryptsetup/0001-Remove-json_object-typedef.patch b/package/cryptsetup/0001-Remove-json_object-typedef.patch new file mode 100644 index 00000000..bbfd1aa0 --- /dev/null +++ b/package/cryptsetup/0001-Remove-json_object-typedef.patch @@ -0,0 +1,48 @@ +From 567e7f8664c621f8aeaa95d9f4ab4b590574f572 Mon Sep 17 00:00:00 2001 +From: Baruch Siach +Date: Wed, 15 Aug 2018 14:13:46 +0300 +Subject: [PATCH] Remove json_object typedef + +The json-c header already defines the same typedef. While C11 allows +typedef redefinition to the same type, older versions of gcc disallow +that. + +In file included from lib/luks2/luks2_internal.h:32, + from lib/luks2/luks2_disk_metadata.c:24: +lib/luks2/luks2.h:86: error: redefinition of typedef 'json_object' + +Signed-off-by: Baruch Siach +[Upstream status: +https://gitlab.com/cryptsetup/cryptsetup/-/merge_requests/91] +--- + lib/luks2/luks2.h | 1 - + lib/setup.c | 1 + + 2 files changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/luks2/luks2.h b/lib/luks2/luks2.h +index ee57b41ba974..25e36190da45 100644 +--- a/lib/luks2/luks2.h ++++ b/lib/luks2/luks2.h +@@ -83,7 +83,6 @@ struct luks2_hdr_disk { + /* + * LUKS2 header in-memory. + */ +-typedef struct json_object json_object; + struct luks2_hdr { + size_t hdr_size; + uint64_t seqid; +diff --git a/lib/setup.c b/lib/setup.c +index fddbe7ef7897..856f6e80f465 100644 +--- a/lib/setup.c ++++ b/lib/setup.c +@@ -28,6 +28,7 @@ + #include + #include + #include ++#include + + #include "libcryptsetup.h" + #include "luks.h" +-- +2.18.0 + diff --git a/package/cryptsetup/Config.in b/package/cryptsetup/Config.in new file mode 100644 index 00000000..d9c9d4d4 --- /dev/null +++ b/package/cryptsetup/Config.in @@ -0,0 +1,24 @@ +config BR2_PACKAGE_CRYPTSETUP + bool "cryptsetup" + depends on BR2_TOOLCHAIN_HAS_THREADS # lvm2 + depends on BR2_USE_MMU # lvm2, libargon2 + depends on !BR2_STATIC_LIBS # lvm2, libargon2 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # json-c + select BR2_PACKAGE_POPT + select BR2_PACKAGE_LVM2 + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + select BR2_PACKAGE_UTIL_LINUX_LIBBLKID + select BR2_PACKAGE_JSON_C + select BR2_PACKAGE_LIBARGON2 + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + This tool helps manipulate dm-crypt and luks partitions for + on-disk encryption. + + https://gitlab.com/cryptsetup/cryptsetup + +comment "cryptsetup needs a toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/cryptsetup/Config.in.host b/package/cryptsetup/Config.in.host new file mode 100644 index 00000000..9e31df55 --- /dev/null +++ b/package/cryptsetup/Config.in.host @@ -0,0 +1,8 @@ +config BR2_PACKAGE_HOST_CRYPTSETUP + bool "host cryptsetup" + select BR2_PACKAGE_HOST_UTIL_LINUX + help + This tool helps manipulate dm-crypt and luks partitions for + on-disk encryption. + + https://gitlab.com/cryptsetup/cryptsetup diff --git a/package/cryptsetup/cryptsetup.hash b/package/cryptsetup/cryptsetup.hash new file mode 100644 index 00000000..3b583456 --- /dev/null +++ b/package/cryptsetup/cryptsetup.hash @@ -0,0 +1,4 @@ +# From https://www.kernel.org/pub/linux/utils/cryptsetup/v2.3/sha256sums.asc +sha256 9d16eebb96b53b514778e813019b8dd15fea9fec5aafde9fae5febf59df83773 cryptsetup-2.3.4.tar.xz +sha256 45670cce8b6a0ddd66c8016cd8ccef6cd71f35717cbacc7f1e895b3855207b33 COPYING +sha256 8c33cc37871654ec7ed87e6fbb896c8cf33ef5ef05b1611a5aed857596ffafa5 COPYING.LGPL diff --git a/package/cryptsetup/cryptsetup.mk b/package/cryptsetup/cryptsetup.mk new file mode 100644 index 00000000..b816dc2f --- /dev/null +++ b/package/cryptsetup/cryptsetup.mk @@ -0,0 +1,56 @@ +################################################################################ +# +# cryptsetup +# +################################################################################ + +CRYPTSETUP_VERSION_MAJOR = 2.3 +CRYPTSETUP_VERSION = $(CRYPTSETUP_VERSION_MAJOR).4 +CRYPTSETUP_SOURCE = cryptsetup-$(CRYPTSETUP_VERSION).tar.xz +CRYPTSETUP_SITE = $(BR2_KERNEL_MIRROR)/linux/utils/cryptsetup/v$(CRYPTSETUP_VERSION_MAJOR) +CRYPTSETUP_DEPENDENCIES = \ + lvm2 popt host-pkgconf json-c libargon2 \ + $(if $(BR2_PACKAGE_LIBICONV),libiconv) \ + $(if $(BR2_PACKAGE_UTIL_LINUX_LIBS),util-linux-libs,util-linux) \ + $(TARGET_NLS_DEPENDENCIES) +CRYPTSETUP_LICENSE = GPL-2.0+ (programs), LGPL-2.1+ (library) +CRYPTSETUP_LICENSE_FILES = COPYING COPYING.LGPL +CRYPTSETUP_CPE_ID_VENDOR = cryptsetup_project +CRYPTSETUP_INSTALL_STAGING = YES +CRYPTSETUP_CONF_ENV += LDFLAGS="$(TARGET_LDFLAGS) $(TARGET_NLS_LIBS)" +CRYPTSETUP_CONF_OPTS += --enable-blkid --enable-libargon2 + +# cryptsetup uses libgcrypt by default, but can be configured to use OpenSSL +# or kernel crypto modules instead +ifeq ($(BR2_PACKAGE_LIBGCRYPT),y) +CRYPTSETUP_DEPENDENCIES += libgcrypt +CRYPTSETUP_CONF_ENV += LIBGCRYPT_CONFIG=$(STAGING_DIR)/usr/bin/libgcrypt-config +CRYPTSETUP_CONF_OPTS += --with-crypto_backend=gcrypt +else ifeq ($(BR2_PACKAGE_OPENSSL),y) +CRYPTSETUP_DEPENDENCIES += openssl +CRYPTSETUP_CONF_OPTS += --with-crypto_backend=openssl +else +CRYPTSETUP_CONF_OPTS += --with-crypto_backend=kernel +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD_TMPFILES),y) +CRYPTSETUP_CONF_OPTS += --with-tmpfilesdir=/usr/lib/tmpfiles.d +else +CRYPTSETUP_CONF_OPTS += --without-tmpfilesdir +endif + +HOST_CRYPTSETUP_DEPENDENCIES = \ + host-pkgconf \ + host-lvm2 \ + host-popt \ + host-util-linux \ + host-json-c \ + host-openssl + +HOST_CRYPTSETUP_CONF_OPTS = --with-crypto_backend=openssl \ + --disable-kernel_crypto \ + --enable-blkid \ + --with-tmpfilesdir=no + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/ctorrent/0001-fix-musl-build.patch b/package/ctorrent/0001-fix-musl-build.patch new file mode 100644 index 00000000..3ba80be3 --- /dev/null +++ b/package/ctorrent/0001-fix-musl-build.patch @@ -0,0 +1,20 @@ +[PATCH] Fix compilation on musl + +Using the ssize_t typedef requires including . + +See : https://sourceforge.net/p/dtorrent/patches/3/ + +Signed-off-by: Brendan Heading +Upstream-status: submitted +--- +diff -Nur a/compat.c b/compat.c +--- a/compat.c 2015-07-29 18:22:24.658415171 +0100 ++++ b/compat.c 2015-07-29 18:36:21.752576311 +0100 +@@ -63,6 +63,7 @@ + + #ifndef HAVE_STRNSTR + #include ++#include + /* FUNCTION PROGRAMER: Siberiaic Sang */ + char *strnstr(const char *haystack, const char *needle, size_t haystacklen) + { diff --git a/package/ctorrent/Config.in b/package/ctorrent/Config.in new file mode 100644 index 00000000..97552e78 --- /dev/null +++ b/package/ctorrent/Config.in @@ -0,0 +1,13 @@ +comment "ctorrent needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + +config BR2_PACKAGE_CTORRENT + bool "ctorrent" + depends on BR2_INSTALL_LIBSTDCPP + help + CTorrent is a BitTorrent client implemented in C++ + to be lightweight and quick. + http://ctorrent.sourceforge.net/ + + This is the enhanced version from + http://www.rahul.net/dholmes/ctorrent/ diff --git a/package/ctorrent/ctorrent.hash b/package/ctorrent/ctorrent.hash new file mode 100644 index 00000000..3e829026 --- /dev/null +++ b/package/ctorrent/ctorrent.hash @@ -0,0 +1,5 @@ +# From http://sourceforge.net/projects/dtorrent/files/dtorrent/3.3.2/ +sha1 d4e221f0292268f80e2430ce9d451dd64cf1ffaa ctorrent-dnh3.3.2.tar.gz + +# locally calculated +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/ctorrent/ctorrent.mk b/package/ctorrent/ctorrent.mk new file mode 100644 index 00000000..959e543f --- /dev/null +++ b/package/ctorrent/ctorrent.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# ctorrent +# +################################################################################ + +CTORRENT_VERSION = dnh3.3.2 +CTORRENT_SITE = http://www.rahul.net/dholmes/ctorrent +CTORRENT_LICENSE = GPL-2.0 +CTORRENT_LICENSE_FILES = COPYING + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +CTORRENT_CONF_OPTS += --with-ssl=yes +CTORRENT_DEPENDENCIES += openssl +else +CTORRENT_CONF_OPTS += --with-ssl=no +endif + +$(eval $(autotools-package)) diff --git a/package/cukinia/Config.in b/package/cukinia/Config.in new file mode 100644 index 00000000..20d0820a --- /dev/null +++ b/package/cukinia/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_CUKINIA + bool "cukinia" + depends on BR2_PACKAGE_BUSYBOX || BR2_PACKAGE_GAWK + help + Cukinia is designed to help Linux-based embedded firmware + developers run system-level validation tests on their product. + It provides a simple POSIX shell overlay, and primitives to + make sure system integrations and features keep behaving the + way they should. + + By default, cukinia reports colorized test results on stdout, + but can also report them as CSV and JUnit-XML for easy + integration with CI systems such as Jenkins. + + https://github.com/savoirfairelinux/cukinia + +comment "cukinia needs busybox or gawk" + depends on !(BR2_PACKAGE_BUSYBOX || BR2_PACKAGE_GAWK) diff --git a/package/cukinia/cukinia.conf b/package/cukinia/cukinia.conf new file mode 100644 index 00000000..e5f304d3 --- /dev/null +++ b/package/cukinia/cukinia.conf @@ -0,0 +1,4 @@ +# Note: Cukinia will produce colorized output if the TERM environment +# variable matches vt220, xterm or linux. +cukinia_log $(_colorize blue "############# Cukinia tests ##############") +cukinia_user root diff --git a/package/cukinia/cukinia.hash b/package/cukinia/cukinia.hash new file mode 100644 index 00000000..e6ae6020 --- /dev/null +++ b/package/cukinia/cukinia.hash @@ -0,0 +1,4 @@ +# locally computed +sha256 b867ec63e448e7fa0a9276f6844a8b3a8f92d99e63e8518fe24e9debd32679b5 cukinia-0.5.1.tar.gz +sha256 b40930bbcf80744c86c46a12bc9da056641d722716c378f5659b9e555ef833e1 LICENSE +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPLv3 diff --git a/package/cukinia/cukinia.mk b/package/cukinia/cukinia.mk new file mode 100644 index 00000000..84d4e60e --- /dev/null +++ b/package/cukinia/cukinia.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# cukinia +# +################################################################################ + +CUKINIA_VERSION = 0.5.1 +CUKINIA_SITE = $(call github,savoirfairelinux,cukinia,v$(CUKINIA_VERSION)) +CUKINIA_LICENSE = Apache-2.0 or GPL-3.0 +CUKINIA_LICENSE_FILES = LICENSE LICENSE.GPLv3 + +define CUKINIA_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/cukinia $(TARGET_DIR)/usr/bin/cukinia + $(INSTALL) -D -m 0644 $(CUKINIA_PKGDIR)/cukinia.conf \ + $(TARGET_DIR)/etc/cukinia/cukinia.conf +endef + +$(eval $(generic-package)) diff --git a/package/cunit/Config.in b/package/cunit/Config.in new file mode 100644 index 00000000..8bcfa2a4 --- /dev/null +++ b/package/cunit/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_CUNIT + bool "cunit" + help + An automated testing framework in 'C'. + + http://cunit.sourceforge.net/ diff --git a/package/cunit/cunit.hash b/package/cunit/cunit.hash new file mode 100644 index 00000000..bbd43a78 --- /dev/null +++ b/package/cunit/cunit.hash @@ -0,0 +1,3 @@ +# Locally calculated: +sha256 f5b29137f845bb08b77ec60584fdb728b4e58f1023e6f249a464efa49a40f214 CUnit-2.1-3.tar.bz2 +sha256 5d9d73d41a57dd2f34487ef3978a2c13cdb97294baeeb81fcd274796399eb15f COPYING diff --git a/package/cunit/cunit.mk b/package/cunit/cunit.mk new file mode 100644 index 00000000..9fc3b961 --- /dev/null +++ b/package/cunit/cunit.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# cunit +# +################################################################################ + +CUNIT_VERSION = 2.1-3 +CUNIT_SITE = http://downloads.sourceforge.net/project/cunit/CUnit/$(CUNIT_VERSION) +CUNIT_SOURCE = CUnit-$(CUNIT_VERSION).tar.bz2 +CUNIT_INSTALL_STAGING = YES +CUNIT_LICENSE = LGPL-2.0+ +CUNIT_LICENSE_FILES = COPYING + +# The source archive does not have the autoconf/automake material generated. +CUNIT_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/cups-filters/Config.in b/package/cups-filters/Config.in new file mode 100644 index 00000000..9e4e37ca --- /dev/null +++ b/package/cups-filters/Config.in @@ -0,0 +1,38 @@ +config BR2_PACKAGE_CUPS_FILTERS + bool "cups-filters" + # needs fork() + depends on BR2_USE_MMU + depends on BR2_INSTALL_LIBSTDCPP # qpdf + depends on !BR2_STATIC_LIBS + depends on BR2_USE_WCHAR # libglib2, qpdf + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_PACKAGE_CUPS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11 + select BR2_PACKAGE_JPEG + select BR2_PACKAGE_FONTCONFIG + select BR2_PACKAGE_FREETYPE + select BR2_PACKAGE_LCMS2 + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_QPDF + help + This project provides backends, filters, and other software + that was once part of the core CUPS distribution but is no + longer maintained by Apple Inc. In addition it contains + additional filters and software developed independently of + Apple, especially filters for the PDF-centric printing + workflow introduced by OpenPrinting and a daemon to browse + Bonjour broadcasts of remote CUPS printers to make these + printers available locally and to provide backward + compatibility to the old CUPS broadcasting and browsing of + CUPS 1.5.x and older. From CUPS 1.6.0 on, this package is + required for using printer drivers with CUPS under Linux. + With CUPS 1.5.x and earlier this package can be used + optionally to switch over to PDF-based printing. + + http://www.linuxfoundation.org/collaborate/workgroups/openprinting/cups-filters + +comment "cups-filters needs a toolchain w/ wchar, C++, threads and dynamic library, gcc >= 4.8" + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_USE_WCHAR || BR2_STATIC_LIBS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 diff --git a/package/cups-filters/S82cups-browsed b/package/cups-filters/S82cups-browsed new file mode 100644 index 00000000..f17bbe74 --- /dev/null +++ b/package/cups-filters/S82cups-browsed @@ -0,0 +1,48 @@ +#!/bin/sh + +DAEMON="cups-browsed" +PIDFILE="/var/run/$DAEMON.pid" + +start() { + printf 'Starting %s: ' "$DAEMON" + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon -b -m -S -q -p "$PIDFILE" -x "/usr/sbin/$DAEMON" \ + -- -c /etc/cups/cups-browsed.conf + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + rm -f "$PIDFILE" + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +case "$1" in + start|stop|restart) + "$1";; + reload) + # Restart, since there is no true "reload" feature. + restart;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/cups-filters/cups-filters.hash b/package/cups-filters/cups-filters.hash new file mode 100644 index 00000000..8c2526ae --- /dev/null +++ b/package/cups-filters/cups-filters.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 cf90b96b5c7a906a05070e757ee5566d9680db98a279e60567ea5421c38f11de cups-filters-1.28.4.tar.gz +sha256 38192ffdaca98b718f78b2d4abc38bb087f0bbcc9a16d212c98b903b985f900f COPYING diff --git a/package/cups-filters/cups-filters.mk b/package/cups-filters/cups-filters.mk new file mode 100644 index 00000000..b6ab7f1c --- /dev/null +++ b/package/cups-filters/cups-filters.mk @@ -0,0 +1,87 @@ +################################################################################ +# +# cups-filters +# +################################################################################ + +CUPS_FILTERS_VERSION = 1.28.4 +CUPS_FILTERS_SITE = http://openprinting.org/download/cups-filters +CUPS_FILTERS_LICENSE = GPL-2.0, GPL-2.0+, GPL-3.0, GPL-3.0+, LGPL-2, LGPL-2.1+, MIT, BSD-4-Clause +CUPS_FILTERS_LICENSE_FILES = COPYING +CUPS_FILTERS_CPE_ID_VENDOR = linuxfoundation + +CUPS_FILTERS_DEPENDENCIES = cups libglib2 lcms2 qpdf fontconfig freetype jpeg + +CUPS_FILTERS_CONF_OPTS = \ + --disable-mutool \ + --disable-foomatic \ + --disable-braille \ + --enable-imagefilters \ + --with-cups-config=$(STAGING_DIR)/usr/bin/cups-config \ + --with-sysroot=$(STAGING_DIR) \ + --with-pdftops=pdftops \ + --with-jpeg \ + --with-test-font-path=/dev/null \ + --without-rcdir + +ifeq ($(BR2_PACKAGE_LIBPNG),y) +CUPS_FILTERS_CONF_OPTS += --with-png +CUPS_FILTERS_DEPENDENCIES += libpng +else +CUPS_FILTERS_CONF_OPTS += --without-png +endif + +ifeq ($(BR2_PACKAGE_TIFF),y) +CUPS_FILTERS_CONF_OPTS += --with-tiff +CUPS_FILTERS_DEPENDENCIES += tiff +else +CUPS_FILTERS_CONF_OPTS += --without-tiff +endif + +ifeq ($(BR2_PACKAGE_DBUS),y) +CUPS_FILTERS_CONF_OPTS += --enable-dbus +CUPS_FILTERS_DEPENDENCIES += dbus +else +CUPS_FILTERS_CONF_OPTS += --disable-dbus +endif + +# avahi support requires avahi-client, which needs avahi-daemon and dbus +ifeq ($(BR2_PACKAGE_AVAHI_DAEMON)$(BR2_PACKAGE_DBUS),yy) +CUPS_FILTERS_DEPENDENCIES += avahi +CUPS_FILTERS_CONF_OPTS += --enable-avahi +else +CUPS_FILTERS_CONF_OPTS += --disable-avahi +endif + +ifeq ($(BR2_PACKAGE_GHOSTSCRIPT),y) +CUPS_FILTERS_DEPENDENCIES += ghostscript +CUPS_FILTERS_CONF_OPTS += --enable-ghostscript +else +CUPS_FILTERS_CONF_OPTS += --disable-ghostscript +endif + +ifeq ($(BR2_PACKAGE_IJS),y) +CUPS_FILTERS_DEPENDENCIES += ijs +CUPS_FILTERS_CONF_OPTS += --enable-ijs +else +CUPS_FILTERS_CONF_OPTS += --disable-ijs +endif + +ifeq ($(BR2_PACKAGE_POPPLER),y) +CUPS_FILTERS_DEPENDENCIES += poppler +CUPS_FILTERS_CONF_OPTS += --enable-poppler +else +CUPS_FILTERS_CONF_OPTS += --disable-poppler +endif + +define CUPS_FILTERS_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/cups-filters/S82cups-browsed \ + $(TARGET_DIR)/etc/init.d/S82cups-browsed +endef + +define CUPS_FILTERS_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0755 $(@D)/utils/cups-browsed.service \ + $(TARGET_DIR)/usr/lib/systemd/system/cups-browsed.service +endef + +$(eval $(autotools-package)) diff --git a/package/cups/0001-Remove-man-from-BUILDDIRS-in-configure.patch b/package/cups/0001-Remove-man-from-BUILDDIRS-in-configure.patch new file mode 100644 index 00000000..7fcf7133 --- /dev/null +++ b/package/cups/0001-Remove-man-from-BUILDDIRS-in-configure.patch @@ -0,0 +1,30 @@ +From 6bc1d15250841cf17d307cfb4f35c960c23d8797 Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Sun, 29 May 2016 19:31:50 +0200 +Subject: [PATCH] Remove man from BUILDDIRS in configure + +Signed-off-by: Bernd Kuhls +[Fabrice: updated for 2.3.0] +Signed-off-by: Fabrice Fontaine +[Michael: updated for 2.3.3] +Signed-off-by: Michael Trimarchi +--- + config-scripts/cups-common.m4 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/config-scripts/cups-common.m4 b/config-scripts/cups-common.m4 +index a460a73..d427acb 100644 +--- a/config-scripts/cups-common.m4 ++++ b/config-scripts/cups-common.m4 +@@ -434,7 +434,7 @@ LIBHEADERSPRIV="\$(COREHEADERSPRIV) \$(DRIVERHEADERSPRIV)" + + case "$COMPONENTS" in + all) +- BUILDDIRS="tools filter backend berkeley cgi-bin monitor notifier ppdc scheduler systemv conf data desktop locale man doc examples templates" ++ BUILDDIRS="tools filter backend berkeley cgi-bin monitor notifier ppdc scheduler systemv conf data desktop locale doc examples templates" + ;; + + core) +-- +2.17.1 + diff --git a/package/cups/0002-Do-not-use-genstrings.patch b/package/cups/0002-Do-not-use-genstrings.patch new file mode 100644 index 00000000..c7d6735b --- /dev/null +++ b/package/cups/0002-Do-not-use-genstrings.patch @@ -0,0 +1,40 @@ +From 193c8d8c55a3478ca5c9e161ce581e5794098c6d Mon Sep 17 00:00:00 2001 +From: Olivier Schonken +Date: Thu, 21 Jan 2016 23:04:49 +0100 +Subject: [PATCH] Do not use genstrings + +Using cross compiled genstrings while cross-compiling will break +compilation. Genstrings is still compiled because some power users +might want to do ppd compilation on their target machine, and for that +they would need to use the native compiled genstrings binary, to +generate a sample.c file for their target + +Signed-off-by: Olivier Schonken +[Thomas: completely remove call to genstrings rather than commenting +it, remove useless and potentially confusing 'echo' before the +genstrings call.] +Signed-off-by: Thomas Petazzoni +[Fabrice: updated for 2.3.0] +Signed-off-by: Fabrice Fontaine +[Michael: updated for 2.3.3] +Signed-off-by: Michael Trimarchi +--- + ppdc/Makefile | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/ppdc/Makefile b/ppdc/Makefile +index 32e2e0b..7b18879 100644 +--- a/ppdc/Makefile ++++ b/ppdc/Makefile +@@ -186,8 +186,6 @@ genstrings: genstrings.o libcupsppdc.a ../cups/$(LIBCUPSSTATIC) \ + $(LD_CXX) $(ARCHFLAGS) $(ALL_LDFLAGS) -o genstrings genstrings.o \ + libcupsppdc.a $(LINKCUPSSTATIC) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ +- echo Generating localization strings... +- ./genstrings >sample.c + + + # +-- +2.17.1 + diff --git a/package/cups/0003-Sanitize-the-installation-process.patch b/package/cups/0003-Sanitize-the-installation-process.patch new file mode 100644 index 00000000..75a68487 --- /dev/null +++ b/package/cups/0003-Sanitize-the-installation-process.patch @@ -0,0 +1,131 @@ +From e35f809c435c224954a5c7bff3f5729c5b3bc0ba Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Thu, 21 Jan 2016 23:21:06 +0100 +Subject: [PATCH] Sanitize the installation process + +The installation process does two things that are not convenient when +cross-compiling: + + - It uses install's -s option to strip binaries, but this option uses + the host strip and not the cross strip, which fails at stripping + binaries. In addition, we do not necessarily want cups to strip its + binaries, we may want to keep the debugging symbols. + + - It enforces ownership (user, group) which isn't possible since + "make install" isn't executed as root when cross-compiling. + + - It installs many files and directories with permissions that + prevent overwriting those files/directories, which meant calling + "make install" twice was failing. + +[Olivier: tweak the patch for 2.2.4 release] + +Signed-off-by: Thomas Petazzoni +Signed-off-by: Olivier Schonken +--- + Makedefs.in | 12 ++++++------ + conf/Makefile | 6 +++--- + notifier/Makefile | 2 +- + scheduler/Makefile | 15 +++++++-------- + 4 files changed, 17 insertions(+), 18 deletions(-) + +diff --git a/Makedefs.in b/Makedefs.in +index 3afef0a..3e4f1bd 100644 +--- a/Makedefs.in ++++ b/Makedefs.in +@@ -40,14 +40,14 @@ SHELL = /bin/sh + # Installation programs... + # + +-INSTALL_BIN = @LIBTOOL_INSTALL@ $(INSTALL) -c -m @CUPS_EXE_FILE_PERM@ @INSTALL_STRIP@ +-INSTALL_COMPDATA = $(INSTALL) -c -m 444 @INSTALL_GZIP@ ++INSTALL_BIN = @LIBTOOL_INSTALL@ $(INSTALL) -c -m 755 ++INSTALL_COMPDATA = $(INSTALL) -c -m 644 @INSTALL_GZIP@ + INSTALL_CONFIG = $(INSTALL) -c -m @CUPS_CONFIG_FILE_PERM@ +-INSTALL_DATA = $(INSTALL) -c -m 444 ++INSTALL_DATA = $(INSTALL) -c -m 644 + INSTALL_DIR = $(INSTALL) -d +-INSTALL_LIB = @LIBTOOL_INSTALL@ $(INSTALL) -c -m @CUPS_EXE_FILE_PERM@ @INSTALL_STRIP@ +-INSTALL_MAN = $(INSTALL) -c -m 444 +-INSTALL_SCRIPT = $(INSTALL) -c -m @CUPS_EXE_FILE_PERM@ ++INSTALL_LIB = @LIBTOOL_INSTALL@ $(INSTALL) -c -m 755 ++INSTALL_MAN = $(INSTALL) -c -m 644 ++INSTALL_SCRIPT = $(INSTALL) -c -m 755 + + # + # Default user, group, and system groups for the scheduler... +diff --git a/conf/Makefile b/conf/Makefile +index 933d7d9..6ac5e19 100644 +--- a/conf/Makefile ++++ b/conf/Makefile +@@ -72,11 +72,11 @@ install: all install-data install-headers install-libs install-exec + install-data: + for file in $(KEEP); do \ + if test -r $(SERVERROOT)/$$file ; then \ +- $(INSTALL_CONFIG) -g $(CUPS_GROUP) $$file $(SERVERROOT)/$$file.N ; \ ++ $(INSTALL_CONFIG) $$file $(SERVERROOT)/$$file.N ; \ + else \ +- $(INSTALL_CONFIG) -g $(CUPS_GROUP) $$file $(SERVERROOT) ; \ ++ $(INSTALL_CONFIG) $$file $(SERVERROOT) ; \ + fi ; \ +- $(INSTALL_CONFIG) -g $(CUPS_GROUP) $$file $(SERVERROOT)/$$file.default; \ ++ $(INSTALL_CONFIG) $$file $(SERVERROOT)/$$file.default; \ + done + $(INSTALL_DIR) -m 755 $(DATADIR)/mime + for file in $(REPLACE); do \ +diff --git a/notifier/Makefile b/notifier/Makefile +index 3206dd0..c34a4d7 100644 +--- a/notifier/Makefile ++++ b/notifier/Makefile +@@ -62,7 +62,7 @@ install: all install-data install-headers install-libs install-exec + # + + install-data: +- $(INSTALL_DIR) -m 775 -g $(CUPS_GROUP) $(CACHEDIR)/rss ++ $(INSTALL_DIR) -m 775 $(CACHEDIR)/rss + + + # +diff --git a/scheduler/Makefile b/scheduler/Makefile +index 251f017..25f2f5f 100644 +--- a/scheduler/Makefile ++++ b/scheduler/Makefile +@@ -146,28 +146,27 @@ install-data: + echo Creating $(SERVERBIN)/driver... + $(INSTALL_DIR) -m 755 $(SERVERBIN)/driver + echo Creating $(SERVERROOT)... +- $(INSTALL_DIR) -m 755 -g $(CUPS_GROUP) $(SERVERROOT) ++ $(INSTALL_DIR) -m 755 $(SERVERROOT) + echo Creating $(SERVERROOT)/ppd... +- $(INSTALL_DIR) -m 755 -g $(CUPS_GROUP) $(SERVERROOT)/ppd ++ $(INSTALL_DIR) -m 755 $(SERVERROOT)/ppd + if test "x`uname`" != xDarwin; then \ + echo Creating $(SERVERROOT)/ssl...; \ +- $(INSTALL_DIR) -m 700 -g $(CUPS_GROUP) $(SERVERROOT)/ssl; \ ++ $(INSTALL_DIR) -m 700 $(SERVERROOT)/ssl; \ + fi + if test "$(STATEDIR)" != "$(SERVERROOT)"; then \ + echo Creating $(STATEDIR)...; \ + $(INSTALL_DIR) -m 755 $(STATEDIR); \ + fi + echo Creating $(STATEDIR)/certs... +- $(INSTALL_DIR) -m 511 -o $(CUPS_USER) -g $(CUPS_PRIMARY_SYSTEM_GROUP) \ +- $(STATEDIR)/certs ++ $(INSTALL_DIR) -m 711 $(STATEDIR)/certs + echo Creating $(LOGDIR)... + $(INSTALL_DIR) -m 755 $(LOGDIR) + echo Creating $(REQUESTS)... +- $(INSTALL_DIR) -m 710 -g $(CUPS_GROUP) $(REQUESTS) ++ $(INSTALL_DIR) -m 710 $(REQUESTS) + echo Creating $(REQUESTS)/tmp... +- $(INSTALL_DIR) -m 1770 -g $(CUPS_GROUP) $(REQUESTS)/tmp ++ $(INSTALL_DIR) -m 1770 $(REQUESTS)/tmp + echo Creating $(CACHEDIR)... +- $(INSTALL_DIR) -m 770 -g $(CUPS_GROUP) $(CACHEDIR) ++ $(INSTALL_DIR) -m 770 $(CACHEDIR) + if test "x$(INITDIR)" != x; then \ + echo Installing init scripts...; \ + $(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDIR)/init.d; \ +-- +2.6.4 + diff --git a/package/cups/0004-Remove-PIE-flags-from-the-build.patch b/package/cups/0004-Remove-PIE-flags-from-the-build.patch new file mode 100644 index 00000000..c2765dff --- /dev/null +++ b/package/cups/0004-Remove-PIE-flags-from-the-build.patch @@ -0,0 +1,37 @@ +From b341a1e1fce48012fc5bcf39337488fd33210616 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sun, 3 Jul 2016 12:20:21 +0200 +Subject: [PATCH] Remove PIE flags from the build + +Generating a statically linked binary built with PIE requires the +Scrt1.o file, which isn't part of Buildroot uClibc toolchains. To +solve this, we simply disable the PIE flags. + +[olivier tweak patch for 2.2.4] + +Signed-off-by: Thomas Petazzoni +Signed-off-by: Olivier Schonken +[Fabrice: updated for 2.3.0] +Signed-off-by: Fabrice Fontaine +[Michael: updated for 2.3.3] +Signed-off-by: Michael Trimarchi +--- + Makedefs.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makedefs.in b/Makedefs.in +index 5f1d32f..d669ea8 100644 +--- a/Makedefs.in ++++ b/Makedefs.in +@@ -155,7 +155,7 @@ ALL_CXXFLAGS = -I.. -D_CUPS_SOURCE $(CXXFLAGS) \ + $(ONDEMANDFLAGS) $(OPTIONS) + ALL_DSOFLAGS = -L../cups @ARCHFLAGS@ @RELROFLAGS@ $(DSOFLAGS) $(OPTIM) + ALL_LDFLAGS = -L../cups @LDARCHFLAGS@ @RELROFLAGS@ $(LDFLAGS) \ +- @PIEFLAGS@ $(OPTIM) ++ $(OPTIM) + ARCHFLAGS = @ARCHFLAGS@ + ARFLAGS = @ARFLAGS@ + BACKLIBS = @BACKLIBS@ +-- +2.17.1 + diff --git a/package/cups/70-usb-printers.rules b/package/cups/70-usb-printers.rules new file mode 100644 index 00000000..67e7f5e9 --- /dev/null +++ b/package/cups/70-usb-printers.rules @@ -0,0 +1,3 @@ +# Allow USB printers in the lp group +# Match rules converted from usblp.c driver's usblp_ids +ACTION=="add", SUBSYSTEM=="usb", ATTR{bInterfaceClass}=="07", ATTR{bInterfaceSubClass}=="01", GROUP="lp" diff --git a/package/cups/Config.in b/package/cups/Config.in new file mode 100644 index 00000000..e23f069a --- /dev/null +++ b/package/cups/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_CUPS + bool "cups" + # needs libstdcpp for ppdc + depends on BR2_INSTALL_LIBSTDCPP + # needs threads for ippserver + depends on BR2_TOOLCHAIN_HAS_THREADS + # needs fork() + depends on BR2_USE_MMU + help + The Common Unix Printing System + + http://www.cups.org + +comment "cups needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/cups/S81cupsd b/package/cups/S81cupsd new file mode 100644 index 00000000..45d0cbcc --- /dev/null +++ b/package/cups/S81cupsd @@ -0,0 +1,48 @@ +#!/bin/sh + +DAEMON="cupsd" +PIDFILE="/var/run/$DAEMON.pid" + +start() { + printf 'Starting %s: ' "$DAEMON" + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon -b -m -S -q -p "$PIDFILE" -x "/usr/sbin/$DAEMON" \ + -- -C /etc/cups/cupsd.conf -s /etc/cups/cups-files + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + rm -f "$PIDFILE" + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +case "$1" in + start|stop|restart) + "$1";; + reload) + # Restart, since there is no true "reload" feature. + restart;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/cups/cups.hash b/package/cups/cups.hash new file mode 100644 index 00000000..2eb289e2 --- /dev/null +++ b/package/cups/cups.hash @@ -0,0 +1,4 @@ +# Locally calculated: +sha256 261fd948bce8647b6d5cb2a1784f0c24cc52b5c4e827b71d726020bcc502f3ee cups-2.3.3-source.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE +sha256 a5d616e6322a9cb1a971e18765025edfca4f3cd9c0eafc32d6d2eb4b8c8787b5 NOTICE diff --git a/package/cups/cups.mk b/package/cups/cups.mk new file mode 100644 index 00000000..2fe9b03a --- /dev/null +++ b/package/cups/cups.mk @@ -0,0 +1,100 @@ +################################################################################ +# +# cups +# +################################################################################ + +CUPS_VERSION = 2.3.3 +CUPS_SOURCE = cups-$(CUPS_VERSION)-source.tar.gz +CUPS_SITE = https://github.com/apple/cups/releases/download/v$(CUPS_VERSION) +CUPS_LICENSE = Apache-2.0 with GPL-2.0/LGPL-2.0 exception +CUPS_LICENSE_FILES = LICENSE NOTICE +CUPS_CPE_ID_VENDOR = cups +CUPS_INSTALL_STAGING = YES + +# Using autoconf, not autoheader, so we cannot use AUTORECONF = YES. +define CUPS_RUN_AUTOCONF + cd $(@D); $(AUTOCONF) -f +endef +CUPS_PRE_CONFIGURE_HOOKS += CUPS_RUN_AUTOCONF + +CUPS_CONF_OPTS = \ + --with-docdir=/usr/share/cups/doc-root \ + --disable-gssapi \ + --disable-pam \ + --libdir=/usr/lib \ + --with-cups-user=lp \ + --with-cups-group=lp \ + --with-system-groups="lpadmin sys root" \ + --without-rcdir +CUPS_CONFIG_SCRIPTS = cups-config +CUPS_DEPENDENCIES = \ + host-autoconf \ + host-pkgconf \ + $(if $(BR2_PACKAGE_ZLIB),zlib) + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +CUPS_CONF_OPTS += --with-systemd=/usr/lib/systemd/system \ + --enable-systemd +CUPS_DEPENDENCIES += systemd +else +CUPS_CONF_OPTS += --disable-systemd +endif + +ifeq ($(BR2_PACKAGE_DBUS),y) +CUPS_CONF_OPTS += --enable-dbus +CUPS_DEPENDENCIES += dbus +else +CUPS_CONF_OPTS += --disable-dbus +endif + +ifeq ($(BR2_PACKAGE_GNUTLS),y) +CUPS_CONF_OPTS += --enable-gnutls +CUPS_DEPENDENCIES += gnutls +else +CUPS_CONF_OPTS += --disable-gnutls +endif + +ifeq ($(BR2_PACKAGE_LIBUSB),y) +CUPS_CONF_OPTS += --enable-libusb +CUPS_DEPENDENCIES += libusb +else +CUPS_CONF_OPTS += --disable-libusb +endif + +ifeq ($(BR2_PACKAGE_LIBPAPER),y) +CUPS_CONF_OPTS += --enable-libpaper +CUPS_DEPENDENCIES += libpaper +else +CUPS_CONF_OPTS += --disable-libpaper +endif + +ifeq ($(BR2_PACKAGE_AVAHI),y) +CUPS_DEPENDENCIES += avahi +CUPS_CONF_OPTS += --enable-avahi +else +CUPS_CONF_OPTS += --disable-avahi +endif + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +define CUPS_INSTALL_UDEV_RULES + $(INSTALL) -D -m 0644 package/cups/70-usb-printers.rules \ + $(TARGET_DIR)/lib/udev/rules.d/70-usb-printers.rules +endef + +CUPS_POST_INSTALL_TARGET_HOOKS += CUPS_INSTALL_UDEV_RULES +endif + +define CUPS_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/cups/S81cupsd \ + $(TARGET_DIR)/etc/init.d/S81cupsd +endef + +# lp user is needed to run cups spooler +# lpadmin group membership grants administrative privileges +define CUPS_USERS + lp -1 lp -1 * /var/spool/lpd /bin/false - lp + - - lpadmin -1 * - - - Printers admin group. +endef + +$(eval $(autotools-package)) diff --git a/package/curlftpfs/0001-fix-CURLOPT_INFILESIZE.patch b/package/curlftpfs/0001-fix-CURLOPT_INFILESIZE.patch new file mode 100644 index 00000000..dc83af01 --- /dev/null +++ b/package/curlftpfs/0001-fix-CURLOPT_INFILESIZE.patch @@ -0,0 +1,13 @@ +Borrowed from the curlftpfs_0.9.2-5 Debian package. + +CURLOPT_INFILESIZE does not support -1 arg. This fix bug #556012. +--- curlftpfs-0.9.2/ftpfs.c.old 2009-12-13 14:12:25.000000000 +0100 ++++ curlftpfs-0.9.2/ftpfs.c 2009-12-13 14:12:32.000000000 +0100 +@@ -503,7 +503,6 @@ + + curl_easy_setopt_or_die(fh->write_conn, CURLOPT_URL, fh->full_path); + curl_easy_setopt_or_die(fh->write_conn, CURLOPT_UPLOAD, 1); +- curl_easy_setopt_or_die(fh->write_conn, CURLOPT_INFILESIZE, -1); + curl_easy_setopt_or_die(fh->write_conn, CURLOPT_READFUNCTION, write_data_bg); + curl_easy_setopt_or_die(fh->write_conn, CURLOPT_READDATA, fh); + curl_easy_setopt_or_die(fh->write_conn, CURLOPT_LOW_SPEED_LIMIT, 1); diff --git a/package/curlftpfs/0002-free_ftpfs_file-memleak-fix.patch b/package/curlftpfs/0002-free_ftpfs_file-memleak-fix.patch new file mode 100644 index 00000000..4966c9dc --- /dev/null +++ b/package/curlftpfs/0002-free_ftpfs_file-memleak-fix.patch @@ -0,0 +1,14 @@ +Borrowed from the curlftpfs_0.9.2-5 Debian package. + +Fix a memory leak. See Bug #587250. +--- a/ftpfs.c 2008-04-30 01:05:47.000000000 +0200 ++++ a/ftpfs.c.slesimple 2010-01-01 22:12:10.000000000 +0100 +@@ -615,6 +615,8 @@ static void free_ftpfs_file(struct ftpfs + sem_destroy(&fh->data_need); + sem_destroy(&fh->data_written); + sem_destroy(&fh->ready); ++ if (fh->buf.size) { buf_free(&fh->buf); } ++ if (fh->stream_buf.size) { buf_free(&fh->stream_buf); } + free(fh); + } + diff --git a/package/curlftpfs/0003-nocache-memleak-fix.patch b/package/curlftpfs/0003-nocache-memleak-fix.patch new file mode 100644 index 00000000..00a4dd64 --- /dev/null +++ b/package/curlftpfs/0003-nocache-memleak-fix.patch @@ -0,0 +1,59 @@ +Borrowed from the curlftpfs_0.9.2-5 Debian package. + +Fix a memory leak when cache is disabled. Closes: #614347. +diff -ur curlftpfs-0.9.2/cache.c curlftpfs-0.9.2-olexat/cache.c +--- curlftpfs-0.9.2/cache.c 2008-04-30 01:03:09.000000000 +0200 ++++ curlftpfs-0.9.2-olexat/cache.c 2011-02-04 16:43:05.000000000 +0100 +@@ -25,7 +25,7 @@ + time_t last_cleaned; + }; + +-static struct cache cache; ++struct cache cache; + + struct node { + struct stat stat; +diff -ur curlftpfs-0.9.2/ftpfs-ls.c curlftpfs-0.9.2-olexat/ftpfs-ls.c +--- curlftpfs-0.9.2/ftpfs-ls.c 2008-04-23 12:55:41.000000000 +0200 ++++ curlftpfs-0.9.2-olexat/ftpfs-ls.c 2011-02-07 17:23:37.000000000 +0100 +@@ -25,6 +25,13 @@ + #include "charset_utils.h" + #include "ftpfs-ls.h" + ++struct cache { ++ int on; ++ char incomplete[]; ++}; ++ ++extern struct cache cache; ++ + static int parse_dir_unix(const char *line, + struct stat *sbuf, + char *file, +@@ -243,8 +256,10 @@ + reallink = g_strdup(link); + } + int linksize = strlen(reallink); +- cache_add_link(full_path, reallink, linksize+1); +- DEBUG(1, "cache_add_link: %s %s\n", full_path, reallink); ++ if (cache.on) { ++ cache_add_link(full_path, reallink, linksize+1); ++ DEBUG(1, "cache_add_link: %s %s\n", full_path, reallink); ++ } + if (linkbuf && linklen) { + if (linksize > linklen) linksize = linklen - 1; + strncpy(linkbuf, reallink, linksize); +@@ -257,8 +272,10 @@ + DEBUG(1, "filler: %s\n", file); + filler(h, file, &stat_buf); + } else { +- DEBUG(1, "cache_add_attr: %s\n", full_path); +- cache_add_attr(full_path, &stat_buf); ++ if (cache.on) { ++ DEBUG(1, "cache_add_attr: %s\n", full_path); ++ cache_add_attr(full_path, &stat_buf); ++ } + } + + DEBUG(2, "comparing %s %s\n", name, file); + diff --git a/package/curlftpfs/0004-fix-musl-build-off-t.patch b/package/curlftpfs/0004-fix-musl-build-off-t.patch new file mode 100644 index 00000000..93352305 --- /dev/null +++ b/package/curlftpfs/0004-fix-musl-build-off-t.patch @@ -0,0 +1,39 @@ +Use off_t instead of __off_t + +__off_t is an internal C library type, which shouldn't be used by +applications. It is not defined by the musl C library, so use the +public off_t type instead. + +Signed-off-by: Thomas Petazzoni + +Index: b/ftpfs.c +=================================================================== +--- a/ftpfs.c ++++ b/ftpfs.c +@@ -687,7 +687,7 @@ + return ftpfs_getattr(path, &sbuf); + } + +-static __off_t test_size(const char* path) ++static off_t test_size(const char* path) + { + struct stat sbuf; + int err = ftpfs_getattr(path, &sbuf); +@@ -950,7 +950,7 @@ + + /* fix openoffice problem, truncating exactly to file length */ + +- __off_t size = (long long int)test_size(path); ++ off_t size = (long long int)test_size(path); + DEBUG(1, "ftpfs_truncate: %s check filesize=%lld\n", path, (long long int)size); + + if (offset == size) +@@ -978,7 +978,7 @@ + } + /* fix openoffice problem, truncating exactly to file length */ + +- __off_t size = test_size(path); ++ off_t size = test_size(path); + DEBUG(1, "ftpfs_ftruncate: %s check filesize=%lld\n", path, (long long int)size); + + if (offset == size) diff --git a/package/curlftpfs/Config.in b/package/curlftpfs/Config.in new file mode 100644 index 00000000..c8c432f2 --- /dev/null +++ b/package/curlftpfs/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_CURLFTPFS + bool "curlftpfs (FUSE)" + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libfuse, glib2 + depends on BR2_USE_MMU # libfuse, glib2 + depends on !BR2_STATIC_LIBS # libfuse + select BR2_PACKAGE_LIBFUSE + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_LIBCURL + help + CurlFtpFS is a filesystem for accessing FTP hosts based on + FUSE and libcurl. + + http://curlftpfs.sourceforge.net/ + +comment "curlftpfs needs a toolchain w/ wchar, threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/curlftpfs/curlftpfs.hash b/package/curlftpfs/curlftpfs.hash new file mode 100644 index 00000000..8413c1e1 --- /dev/null +++ b/package/curlftpfs/curlftpfs.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 4eb44739c7078ba0edde177bdd266c4cfb7c621075f47f64c85a06b12b3c6958 curlftpfs-0.9.2.tar.gz +sha256 231f7edcc7352d7734a96eef0b8030f77982678c516876fcb81e25b32d68564c COPYING diff --git a/package/curlftpfs/curlftpfs.mk b/package/curlftpfs/curlftpfs.mk new file mode 100644 index 00000000..584d01a6 --- /dev/null +++ b/package/curlftpfs/curlftpfs.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# curlftpfs +# +################################################################################ + +CURLFTPFS_VERSION = 0.9.2 +CURLFTPFS_SITE = http://downloads.sourceforge.net/project/curlftpfs/curlftpfs/$(CURLFTPFS_VERSION) +CURLFTPFS_CONF_ENV = ac_cv_path__libcurl_config=$(STAGING_DIR)/usr/bin/curl-config +CURLFTPFS_LICENSE = GPL-2.0 +CURLFTPFS_LICENSE_FILES = COPYING +CURLFTPFS_DEPENDENCIES = \ + libglib2 libfuse openssl libcurl \ + $(TARGET_NLS_DEPENDENCIES) \ + $(if $(BR2_ENABLE_LOCALE),,libiconv) + +$(eval $(autotools-package)) diff --git a/package/curlpp/Config.in b/package/curlpp/Config.in new file mode 100644 index 00000000..a23e5d93 --- /dev/null +++ b/package/curlpp/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_CURLPP + bool "curlpp" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_LIBCURL + help + cURLpp is a C++ wrapper for libcURL. + + http://www.curlpp.org/ + +comment "curlpp needs a toolchain w/ C++, dynamic library" + depends on !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS diff --git a/package/curlpp/curlpp.hash b/package/curlpp/curlpp.hash new file mode 100644 index 00000000..2b14a235 --- /dev/null +++ b/package/curlpp/curlpp.hash @@ -0,0 +1,5 @@ +# Locally computed: +sha256 97e3819bdcffc3e4047b6ac57ca14e04af85380bd93afe314bee9dd5c7f46a0a v0.8.1.tar.gz + +# Hash for license files: +sha256 8b9e3afd4d06ad3c169e788e5187a3e9f4f35671e9a7322f7e74bea9643b5b5a doc/LICENSE diff --git a/package/curlpp/curlpp.mk b/package/curlpp/curlpp.mk new file mode 100644 index 00000000..7528855a --- /dev/null +++ b/package/curlpp/curlpp.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# curlpp +# +################################################################################ + +CURLPP_VERSION = 0.8.1 +CURLPP_SITE = https://github.com/jpbarrette/curlpp/archive +CURLPP_SOURCE = v$(CURLPP_VERSION).tar.gz +CURLPP_LICENSE = MIT +CURLPP_LICENSE_FILES = doc/LICENSE +CURLPP_INSTALL_STAGING = YES +CURLPP_DEPENDENCIES = libcurl + +$(eval $(cmake-package)) diff --git a/package/cutelyst/Config.in b/package/cutelyst/Config.in new file mode 100644 index 00000000..8eff938d --- /dev/null +++ b/package/cutelyst/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_CUTELYST + bool "cutelyst" + depends on BR2_PACKAGE_QT5 + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11 + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3 + select BR2_PACKAGE_QT5BASE_GUI + help + A C++ Web Framework built on top of Qt, using + the simple approach of Catalyst (Perl) framework. + + https://cutelyst.org + +comment "cutelyst needs a toolchain w/ C++, gcc >= 4.8, headers >= 3.3" + depends on BR2_PACKAGE_QT5 + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3 diff --git a/package/cutelyst/cutelyst.hash b/package/cutelyst/cutelyst.hash new file mode 100644 index 00000000..d35fdcc8 --- /dev/null +++ b/package/cutelyst/cutelyst.hash @@ -0,0 +1,3 @@ +# Locally calculated after checking pgp signature +sha256 b0e3d658a60d68906f7255b78bad64af1aa07cb3b785fbf61629b7355f089baa cutelyst-2.11.0.tar.gz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/cutelyst/cutelyst.mk b/package/cutelyst/cutelyst.mk new file mode 100644 index 00000000..5313b003 --- /dev/null +++ b/package/cutelyst/cutelyst.mk @@ -0,0 +1,38 @@ +################################################################################ +# +# cutelyst +# +################################################################################ + +CUTELYST_VERSION = 2.11.0 +CUTELYST_SITE = https://github.com/cutelyst/cutelyst/archive/v$(CUTELYST_VERSION) +CUTELYST_INSTALL_STAGING = YES +CUTELYST_SUPPORTS_IN_SOURCE_BUILD = NO +CUTELYST_LICENSE = LGPL-2.1+ +CUTELYST_LICENSE_FILES = COPYING +CUTELYST_DEPENDENCIES = qt5base + +CUTELYST_CONF_OPTS += \ + -DPLUGIN_CSRFPROTECTION=ON \ + -DPLUGIN_VIEW_GRANTLEE=OFF + +# Qt 5.8 needs atomics, which on various architectures are in -latomic +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +CUTELYST_CONF_OPTS += -DCMAKE_EXE_LINKER_FLAGS=-latomic +endif + +ifeq ($(BR2_PACKAGE_LIBPWQUALITY),y) +CUTELYST_CONF_OPTS += -DPLUGIN_VALIDATOR_PWQUALITY=ON +CUTELYST_DEPENDENCIES += libpwquality +else +CUTELYST_CONF_OPTS += -DPLUGIN_VALIDATOR_PWQUALITY=OFF +endif + +ifeq ($(BR2_PACKAGE_JEMALLOC),y) +CUTELYST_CONF_OPTS += -DUSE_JEMALLOC=ON +CUTELYST_DEPENDENCIES += jemalloc +else +CUTELYST_CONF_OPTS += -DUSE_JEMALLOC=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/cvs/Config.in b/package/cvs/Config.in new file mode 100644 index 00000000..e8f0606e --- /dev/null +++ b/package/cvs/Config.in @@ -0,0 +1,24 @@ +config BR2_PACKAGE_CVS + bool "cvs" + depends on BR2_USE_WCHAR + # needs fork() + depends on BR2_USE_MMU + select BR2_PACKAGE_NCURSES + help + Concurrent Versions System - source code revision control + tools. + + http://www.nongnu.org/cvs/ + +if BR2_PACKAGE_CVS + +config BR2_PACKAGE_CVS_SERVER + bool "server support" + help + Enable cvs server code + +endif + +comment "cvs needs a toolchain w/ wchar" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR diff --git a/package/cvs/cvs.hash b/package/cvs/cvs.hash new file mode 100644 index 00000000..7b03a552 --- /dev/null +++ b/package/cvs/cvs.hash @@ -0,0 +1,8 @@ +# From http://snapshot.debian.org/archive/debian/20141023T043132Z/pool/main/c/cvs/cvs_1.12.13-12%2Bsqueeze1.dsc +sha256 b5961c2476b996e5758fa5e22b60af085adca41164cac0d8f68a1d3b49d4e4f1 cvs_1.12.13.orig.tar.gz +sha256 d52a9232d9cf36302a150d782fc7e5b6f92f8115505ae8a7dc6acfc83e809d2f cvs_1.12.13-12+squeeze1.diff.gz + +# Hash for license files, locally computed +sha256 569c5b876327d899cf444b2277fe910128a38ca71d90755fe4125dd44f8ece02 COPYING +sha256 da0e282103fb508894e78db519aab255e36971ce0bc87de585e3b05014b83b1e COPYING.LIB +sha256 ee9a2fbdb626c0ac57fd8e569f357eb2e6d6c80cc6f41efa8bd126d5ea589d72 lib/glob-libc.h diff --git a/package/cvs/cvs.mk b/package/cvs/cvs.mk new file mode 100644 index 00000000..3d01f335 --- /dev/null +++ b/package/cvs/cvs.mk @@ -0,0 +1,57 @@ +################################################################################ +# +# cvs +# +################################################################################ + +CVS_VERSION = 1.12.13 +CVS_SOURCE = cvs_$(CVS_VERSION).orig.tar.gz +CVS_PATCH = cvs_$(CVS_VERSION)-12+squeeze1.diff.gz +CVS_SITE = http://snapshot.debian.org/archive/debian/20141023T043132Z/pool/main/c/cvs +CVS_LICENSE = GPL-1.0+, LGPL-2.0+, LGPL-2.1+ (glob) +CVS_LICENSE_FILES = COPYING COPYING.LIB lib/glob-libc.h +CVS_CPE_ID_VENDOR = gnu +CVS_DEPENDENCIES = ncurses + +CVS_CONF_ENV = \ + ac_cv_func_working_mktime=yes \ + cvs_cv_func_printf_ptr=yes + +CVS_CONFIGURE_ARGS = --disable-old-info-format-support +ifeq ($(BR2_PACKAGE_CVS_SERVER),y) +CVS_CONFIGURE_ARGS += --enable-server +else +CVS_CONFIGURE_ARGS += --disable-server +endif +ifeq ($(BR2_PACKAGE_ZLIB),y) +CVS_CONFIGURE_ARGS += --with-external-zlib +endif + +CVS_CONF_OPTS = $(CVS_CONFIGURE_ARGS) + +define CVS_BZIP_UNPACK + $(BZCAT) $(@D)/cvs-$(CVS_VERSION).tar.bz2 | tar -C $(BUILD_DIR) $(TAR_OPTIONS) - + rm -f $(@D)/cvs-$(CVS_VERSION).tar.bz2 +endef + +CVS_POST_PATCH_HOOKS += CVS_BZIP_UNPACK + +ifneq ($(CVS_PATCH),) +define CVS_DEBIAN_PATCHES + if [ -d $(@D)/debian/patches ]; then \ + (cd $(@D)/debian/patches && for i in *; \ + do $(SED) 's,^\+\+\+ .*cvs-$(CVS_VERSION)/,+++ cvs-$(CVS_VERSION)/,' $$i; \ + done; \ + ); \ + $(APPLY_PATCHES) $(@D) $(@D)/debian/patches \*; \ + fi +endef +endif + +CVS_POST_PATCH_HOOKS += CVS_DEBIAN_PATCHES + +define CVS_INSTALL_TARGET_CMDS + $(INSTALL) -D $(@D)/src/cvs $(TARGET_DIR)/usr/bin/cvs +endef + +$(eval $(autotools-package)) diff --git a/package/cwiid/0001-wmdemo-fix-linking-by-adding-the-missing-lbluetooth-.patch b/package/cwiid/0001-wmdemo-fix-linking-by-adding-the-missing-lbluetooth-.patch new file mode 100644 index 00000000..e1e4ec48 --- /dev/null +++ b/package/cwiid/0001-wmdemo-fix-linking-by-adding-the-missing-lbluetooth-.patch @@ -0,0 +1,27 @@ +From af6bffb5b8b71e99e0f9bbbd2cf1fbd695a643c2 Mon Sep 17 00:00:00 2001 +From: Samuel Martin +Date: Sat, 8 Dec 2012 13:32:40 +0100 +Subject: [PATCH 1/2] wmdemo: fix linking by adding the missing -lbluetooth to + LDLIBS + +Signed-off-by: Samuel Martin +--- + wmdemo/Makefile.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/wmdemo/Makefile.in b/wmdemo/Makefile.in +index 56aed58..1eccc02 100644 +--- a/wmdemo/Makefile.in ++++ b/wmdemo/Makefile.in +@@ -8,7 +8,7 @@ SOURCES = wmdemo.c + + CFLAGS += -I@top_builddir@/libcwiid + LDFLAGS += -L@top_builddir@/libcwiid +-LDLIBS += -lcwiid ++LDLIBS += -lcwiid -lbluetooth + INST_DIR = @bindir@ + + include $(COMMON)/include/app.mak +-- +1.8.5.2 + diff --git a/package/cwiid/0002-configure-make-wmgui-build-optional.patch b/package/cwiid/0002-configure-make-wmgui-build-optional.patch new file mode 100644 index 00000000..f5eff33a --- /dev/null +++ b/package/cwiid/0002-configure-make-wmgui-build-optional.patch @@ -0,0 +1,64 @@ +From dbb578450974db5decc24560da4aeaed838849a1 Mon Sep 17 00:00:00 2001 +From: Samuel Martin +Date: Thu, 2 Jan 2014 14:03:07 +0100 +Subject: [PATCH 2/2] configure: make wmgui build optional + +So, make gtk-2 and glib2 dependencies optional (only needed by wmgui) + +Signed-off-by: Samuel Martin +--- + Makefile.in | 2 +- + configure.ac | 17 +++++++++++++---- + 2 files changed, 14 insertions(+), 5 deletions(-) + +diff --git a/Makefile.in b/Makefile.in +index 6d3ac98..3d2fb45 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -3,7 +3,7 @@ + include @top_builddir@/defs.mak + + LIB_DIRS = libcwiid +-BIN_DIRS = wmgui wminput lswm ++BIN_DIRS = @WMGUI@ wminput lswm + DOC_DIRS = man doc + ifdef PYTHON + BIND_DIRS = python +diff --git a/configure.ac b/configure.ac +index 82ca3e1..d146cb6 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -15,6 +15,11 @@ if test "$YACC" != "bison -y"; then + AC_MSG_ERROR([bison not found]) + fi + ++AC_ARG_ENABLE( ++ [wmgui], ++ [AS_HELP_STRING([--disable-wmgui],[Do not build wmgui binary (also drop the gtk-2/glib2 dependency)])], ++ [ENABLE_WMGUI="$enableval"],[ENABLE_WMGUI=yes]) ++ + AC_ARG_WITH( + [python], + [AS_HELP_STRING([--without-python],[compile without python support])], +@@ -98,10 +103,14 @@ else + fi + AC_SUBST(LDCONFIG) + +-pkg_modules="gtk+-2.0 >= 2.0.0 gthread-2.0" +-PKG_CHECK_MODULES([GTK], [$pkg_modules]) +-AC_SUBST(GTK_CFLAGS) +-AC_SUBST(GTK_LIBS) ++AS_IF( ++ [test "x$ENABLE_WMGUI" = xyes], ++ [pkg_modules="gtk+-2.0 >= 2.0.0 gthread-2.0" ; ++ PKG_CHECK_MODULES([GTK], [$pkg_modules]) ++ AC_SUBST(GTK_CFLAGS) ++ AC_SUBST(GTK_LIBS) ++ AC_SUBST(WMGUI, wmgui)] ++) + + AC_OUTPUT( + [Makefile] +-- +1.8.5.2 + diff --git a/package/cwiid/Config.in b/package/cwiid/Config.in new file mode 100644 index 00000000..374a91ff --- /dev/null +++ b/package/cwiid/Config.in @@ -0,0 +1,35 @@ +config BR2_PACKAGE_CWIID + bool "cwiid" + depends on !BR2_STATIC_LIBS # bluez5_utils + depends on BR2_USE_WCHAR # bluez5_utils -> libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # bluez5_utils -> dbus, alsa-lib, libglib2 + depends on BR2_USE_MMU # bluez5_utils -> dbus, libglib2 + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4 # bluez5_utils + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # bluez5_utils + select BR2_PACKAGE_BLUEZ5_UTILS + help + A collection of Linux tools written in C for interfacing to + the Nintendo Wiimote. + + https://github.com/abstrakraft/cwiid + +if BR2_PACKAGE_CWIID +config BR2_PACKAGE_CWIID_WMGUI + bool "wmgui" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # libgtk2 -> pango -> harfbuzz + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # libgtk2 -> pango -> harfbuzz + depends on BR2_PACKAGE_XORG7 # libgtk2 + depends on BR2_USE_WCHAR # libgtk2 -> libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libgtk2 -> libglib2 + depends on BR2_USE_MMU # libgtk2 -> libglib2 + depends on BR2_INSTALL_LIBSTDCPP # libgtk2 -> pango + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBGTK2 +endif + +comment "cwiid needs a toolchain w/ dynamic lib, threads, wchar, headers >= 3.4" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_STATIC_LIBS || !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4 + depends on !BR2_USE_MMU diff --git a/package/cwiid/cwiid.hash b/package/cwiid/cwiid.hash new file mode 100644 index 00000000..6446b802 --- /dev/null +++ b/package/cwiid/cwiid.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 3adf3bf018721dee3c47e12ba4dd71810a239918dce925aa4079cb2a98bca5fe cwiid-fadf11e89b579bcc0336a0692ac15c93785f3f82.tar.gz +# License files, locally calculated +sha256 231f7edcc7352d7734a96eef0b8030f77982678c516876fcb81e25b32d68564c COPYING diff --git a/package/cwiid/cwiid.mk b/package/cwiid/cwiid.mk new file mode 100644 index 00000000..a11c56c0 --- /dev/null +++ b/package/cwiid/cwiid.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# cwiid +# +################################################################################ + +CWIID_VERSION = fadf11e89b579bcc0336a0692ac15c93785f3f82 +CWIID_SITE = $(call github,abstrakraft,cwiid,$(CWIID_VERSION)) +CWIID_LICENSE = GPL-2.0+ +CWIID_LICENSE_FILES = COPYING + +CWIID_AUTORECONF = YES +CWIID_INSTALL_STAGING = YES + +CWIID_DEPENDENCIES = host-pkgconf host-bison host-flex bluez5_utils + +# Disable python support. This disables the 2 following things: +# - wminput Python plugin support +# - cwiid Python module +CWIID_CONF_OPTS = --without-python --disable-ldconfig + +ifeq ($(BR2_PACKAGE_CWIID_WMGUI),y) +CWIID_DEPENDENCIES += libgtk2 libglib2 +CWIID_CONF_OPTS += --enable-wmgui +else +CWIID_CONF_OPTS += --disable-wmgui +endif + +$(eval $(autotools-package)) diff --git a/package/cxxtest/Config.in b/package/cxxtest/Config.in new file mode 100644 index 00000000..207adab1 --- /dev/null +++ b/package/cxxtest/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_CXXTEST + bool "cxxtest" + depends on BR2_INSTALL_LIBSTDCPP + help + CxxTest is a unit testing framework for C++ + + http://cxxtest.com/ + +comment "cxxtest needs a toolchain w/ C++ support" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/cxxtest/cxxtest.hash b/package/cxxtest/cxxtest.hash new file mode 100644 index 00000000..be2cbd32 --- /dev/null +++ b/package/cxxtest/cxxtest.hash @@ -0,0 +1,5 @@ +# Locally computed: +sha256 1c154fef91c65dbf1cd4519af7ade70a61d85a923b6e0c0b007dc7f4895cf7d8 cxxtest-4.4.tar.gz + +# Hash for license file: +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 COPYING diff --git a/package/cxxtest/cxxtest.mk b/package/cxxtest/cxxtest.mk new file mode 100644 index 00000000..7d494c8f --- /dev/null +++ b/package/cxxtest/cxxtest.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# cxxtest +# +################################################################################ + +CXXTEST_VERSION = 4.4 +CXXTEST_SITE = https://github.com/CxxTest/cxxtest/releases/download/$(CXXTEST_VERSION) +CXXTEST_LICENSE = LGPL-3.0 +CXXTEST_LICENSE_FILES = COPYING +CXXTEST_INSTALL_STAGING = YES +CXXTEST_INSTALL_TARGET = NO +CXXTEST_DEPENDENCIES = host-cxxtest +HOST_CXXTEST_SETUP_TYPE = setuptools +HOST_CXXTEST_SUBDIR = python + +# Copy CxxTest header files to staging directory +define CXXTEST_INSTALL_STAGING_CMDS + $(INSTALL) -m 755 -d $(STAGING_DIR)/usr/include/cxxtest + $(INSTALL) -m 644 -t $(STAGING_DIR)/usr/include/cxxtest $(@D)/cxxtest/* +endef + +# CxxTest uses python infrastructure as the build system. It consists of two parts: +# 1. cxxtestgen tool to process tests defined in header files to generate C++ source +# files. cxxtestgen is built as a host package, so that it can be used natively. +# 2. A set of header files which are installed in staging directory. This will be +# used in cross-compiling test harness to generate executable which will run on target. + +$(eval $(generic-package)) +$(eval $(host-python-package)) diff --git a/package/czmq/Config.in b/package/czmq/Config.in new file mode 100644 index 00000000..71389fce --- /dev/null +++ b/package/czmq/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_CZMQ + bool "czmq" + depends on BR2_USE_MMU # fork() + depends on BR2_INSTALL_LIBSTDCPP # zeromq + depends on BR2_TOOLCHAIN_HAS_THREADS # zeromq + select BR2_PACKAGE_ZEROMQ + help + High-level C Binding for 0MQ + + http://czmq.zeromq.org/ + +comment "czmq needs a toolchain w/ C++, threads" + depends on BR2_USE_MMU + depends on !(BR2_INSTALL_LIBSTDCPP && BR2_TOOLCHAIN_HAS_THREADS) diff --git a/package/czmq/czmq.hash b/package/czmq/czmq.hash new file mode 100644 index 00000000..19e2053a --- /dev/null +++ b/package/czmq/czmq.hash @@ -0,0 +1,6 @@ +# From https://github.com/zeromq/czmq/releases +md5 471e9ec120fc66a2fe2aae14359e3cfa czmq-4.2.1.tar.gz +sha1 75ced09c143f93fae65238375e3a799c40eaed4c czmq-4.2.1.tar.gz +# Locally calculated +sha256 5d720a204c2a58645d6f7643af15d563a712dad98c9d32c1ed913377daa6ac39 czmq-4.2.1.tar.gz +sha256 1f256ecad192880510e84ad60474eab7589218784b9a50bc7ceee34c2b91f1d5 LICENSE diff --git a/package/czmq/czmq.mk b/package/czmq/czmq.mk new file mode 100644 index 00000000..8ddd9e8f --- /dev/null +++ b/package/czmq/czmq.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# czmq +# +################################################################################ + +CZMQ_VERSION = 4.2.1 +CZMQ_SITE = https://github.com/zeromq/czmq/releases/download/v$(CZMQ_VERSION) + +CZMQ_INSTALL_STAGING = YES +CZMQ_DEPENDENCIES = zeromq host-pkgconf +CZMQ_LICENSE = MPL-2.0 +CZMQ_LICENSE_FILES = LICENSE + +CZMQ_CONF_OPTS = --disable-Werror --without-docs + +$(eval $(autotools-package)) diff --git a/package/dacapo/Config.in b/package/dacapo/Config.in new file mode 100644 index 00000000..02dcab9e --- /dev/null +++ b/package/dacapo/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_DACAPO + bool "dacapo" + depends on BR2_PACKAGE_OPENJDK + help + The DaCapo benchmark suite is intended as a tool for Java + benchmarking by the programming language, memory + management and computer architecture communities. + + http://dacapobench.org/ + +comment "dacapo needs OpenJDK" + depends on !BR2_PACKAGE_OPENJDK diff --git a/package/dacapo/dacapo.hash b/package/dacapo/dacapo.hash new file mode 100644 index 00000000..ca7ad463 --- /dev/null +++ b/package/dacapo/dacapo.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 be3db084adcb2867760e1197b3ccf541c3213d918daa19386d8e236648d24be8 dacapo-9.12-MR1-bach.jar +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE diff --git a/package/dacapo/dacapo.mk b/package/dacapo/dacapo.mk new file mode 100644 index 00000000..3c5df6d2 --- /dev/null +++ b/package/dacapo/dacapo.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# dacapo +# +################################################################################ + +DACAPO_VERSION = 9.12-MR1-bach +DACAPO_SOURCE = dacapo-$(DACAPO_VERSION).jar +DACAPO_SITE = http://sourceforge.net/projects/dacapobench/files/9.12-bach-MR1 +DACAPO_LICENSE = Apache-2.0 +DACAPO_LICENSE_FILES = LICENSE + +define DACAPO_EXTRACT_CMDS + unzip $(DACAPO_DL_DIR)/$(DACAPO_SOURCE) LICENSE -d $(@D) +endef + +define DACAPO_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 755 $(DACAPO_DL_DIR)/$(DACAPO_SOURCE) $(TARGET_DIR)/usr/bin/$(DACAPO_SOURCE) +endef + +$(eval $(generic-package)) diff --git a/package/dado/Config.in b/package/dado/Config.in new file mode 100644 index 00000000..fb469f40 --- /dev/null +++ b/package/dado/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_DADO + bool "dado" + help + Database Facilities for LuaSQL. + + http://www.ccpa.puc-rio.br/software/dado/ diff --git a/package/dado/dado.hash b/package/dado/dado.hash new file mode 100644 index 00000000..a57f52b8 --- /dev/null +++ b/package/dado/dado.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 5a10ed7ff7be34ac004d10d6ea62ee8efc2b594c50ffc93e840e7fb7a2e6b4d0 dado-1.8.3-1.src.rock +sha256 141953aa7714e3145a6adfd71d6acbbe377e07ab920bc8ec4039394774da8a6e dado-1.8.3/doc/license.html diff --git a/package/dado/dado.mk b/package/dado/dado.mk new file mode 100644 index 00000000..e4375a3a --- /dev/null +++ b/package/dado/dado.mk @@ -0,0 +1,11 @@ +################################################################################ +# +# dado +# +################################################################################ + +DADO_VERSION = 1.8.3-1 +DADO_LICENSE = MIT +DADO_LICENSE_FILES = $(DADO_SUBDIR)/doc/license.html + +$(eval $(luarocks-package)) diff --git a/package/daemon/0001-fix-musl.patch b/package/daemon/0001-fix-musl.patch new file mode 100644 index 00000000..5ebb6459 --- /dev/null +++ b/package/daemon/0001-fix-musl.patch @@ -0,0 +1,18 @@ +daemon: fix build with musl + +musl requires the ttydefaults.h to be included explicitly for CEOF. + +Signed-off-by: Baruch Siach +--- + +diff -Nuar daemon-0.6.4-orig/daemon.c daemon-0.6.4/daemon.c +--- daemon-0.6.4-orig/daemon.c 2010-06-12 16:37:00.000000000 +0300 ++++ daemon-0.6.4/daemon.c 2017-05-01 22:02:17.721413468 +0300 +@@ -864,6 +864,7 @@ + #ifdef _RESTORE_POSIX_SOURCE + #define _POSIX_SOURCE + #endif ++#include + #include + #include + #include diff --git a/package/daemon/Config.in b/package/daemon/Config.in new file mode 100644 index 00000000..b97f8cff --- /dev/null +++ b/package/daemon/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_DAEMON + bool "daemon" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Daemon turns other process into daemons. + + http://www.libslack.org/daemon/ + +comment "daemon needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/daemon/daemon.hash b/package/daemon/daemon.hash new file mode 100644 index 00000000..b1c1dcdc --- /dev/null +++ b/package/daemon/daemon.hash @@ -0,0 +1,3 @@ +# From http://www.libslack.org/daemon/ +sha256 f66af2ece784c16dcb5219de1f4fa3ae5787bb3374e44bd4b1d3e275e8ff272c daemon-0.7.tar.gz +sha256 204d8eff92f95aac4df6c8122bc1505f468f3a901e5a4cc08940e0ede1938994 LICENSE diff --git a/package/daemon/daemon.mk b/package/daemon/daemon.mk new file mode 100644 index 00000000..f3a1917f --- /dev/null +++ b/package/daemon/daemon.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# daemon +# +################################################################################ + +DAEMON_VERSION = 0.7 +DAEMON_SITE = http://libslack.org/daemon/download +DAEMON_LICENSE = GPL-2.0+ +DAEMON_LICENSE_FILES = LICENSE + +define DAEMON_CONFIGURE_CMDS + (cd $(@D); ./configure) +endef + +define DAEMON_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) +endef + +define DAEMON_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) DEB_BUILD_OPTIONS=nostrip \ + $(MAKE) PREFIX=$(TARGET_DIR)/usr -C $(@D) \ + install-daemon-bin +endef + +$(eval $(generic-package)) diff --git a/package/dahdi-linux/Config.in b/package/dahdi-linux/Config.in new file mode 100644 index 00000000..f2a37091 --- /dev/null +++ b/package/dahdi-linux/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_DAHDI_LINUX + bool "dhadi-linux" + depends on BR2_LINUX_KERNEL + help + DAHDI (Digium/Asterisk Hardware Device Interface) is the open + source device interface technology used to control Digium and + other legacy telephony interface cards. + + DAHDI Linux is the open source device driver framework used to + interface Asterisk with telephony hardware. + + http://www.asterisk.org/downloads/dahdi + + Note: DAHDI Linux drivers won't build on a kernel v4.0 or more + recent, because they use internals that have been removed in + v4.0. + +comment "dahdi-linux needs a Linux kernel to be built" + depends on !BR2_LINUX_KERNEL diff --git a/package/dahdi-linux/dahdi-linux.hash b/package/dahdi-linux/dahdi-linux.hash new file mode 100644 index 00000000..1847a4da --- /dev/null +++ b/package/dahdi-linux/dahdi-linux.hash @@ -0,0 +1,27 @@ +# sha1 from: http://downloads.asterisk.org/pub/telephony/dahdi-linux/releases +# sha256 locally computed +sha1 9827f0afc625e293021b81daf94ec054145c975b dahdi-linux-3.0.0.tar.gz +sha256 02a8a680d20a3e243f37259edc3554ab9a488595a28562c45c33da3792d12caa dahdi-linux-3.0.0.tar.gz + +# Firmware files have no upstream hash, so sha56 locally computed +sha256 3ff26cf80555fd7470b43a87c51d03c1db2a75abcd4561d79f69b6c48298e4a1 dahdi-fwload-vpmadt032-1.25.0.tar.gz +sha256 d5b6ab6851e431afcfec2ecc39d95fa88fe3939ffdb2e3d4f28a43cabf30e95b dahdi-fw-a4a-a0017.tar.gz +sha256 e039af8bec36407b74e1dd9ebdd49ba077469eda79d4e6093721ed2836d4536f dahdi-fw-a4b-d001e.tar.gz +sha256 5064f9877b8aec99b19fd57988216fe1a9c0b7c07853dd3b32b5a55ab7b418e6 dahdi-fw-a8a-1d0017.tar.gz +sha256 09a8992786309e025aa60b400a2c7d21226ac9bb6f1b66f562a5e7e9dc892b03 dahdi-fw-a8b-1f001e.tar.gz +sha256 449ab3fd03d55d808e999efb7677cd04de202b92c9fcb039539a7e48a39a80f5 dahdi-fw-hx8-2.06.tar.gz +sha256 7a006073202d67e45f1d5ff1e9c6e8663e6056cef9dc4c5abae86a1018db349c dahdi-fw-oct6114-032-1.05.01.tar.gz +sha256 56bac1f2024c76ecf9b6f40992eeea29a1fbee676bb2a37a058179bacfbb1c91 dahdi-fw-oct6114-064-1.05.01.tar.gz +sha256 e1146749d205c41603b9b76852c3f8104dac233d0025d700db24504d10c99775 dahdi-fw-oct6114-128-1.05.01.tar.gz +sha256 5fe5036a2766cf0e8a968b0c58b700507d86e1cde9296ca437170cc626a9c79c dahdi-fw-oct6114-256-1.05.01.tar.gz +sha256 11dd8d009809e41fc9a3a36766f59ff73d29075eede5b8724331d9a6e5259774 dahdi-fw-tc400m-MR6.12.tar.gz +sha256 511c1966295a20df673bb87af30245f0ad165efd6ccb92b4d8ed535ca7f5ac65 dahdi-fw-te133-7a001e.tar.gz +sha256 99f7c410bf47d2a5ae687d717e51448ce5b52aca902830bf39bffe683150fa2d dahdi-fw-te134-780017.tar.gz +sha256 c8f55d57cc0bf332e8d96cdf9ff6dd0e322f33581e1efc24c2b9a0e0c5eb7ee4 dahdi-fw-te435-13001e.tar.gz +sha256 0980f4a8d191c6872aa27d971758046f0e7827ac161549f2cc1b0eeab0ae9333 dahdi-fw-te436-10017.tar.gz +sha256 5b823e25828e2c1c6548886ad408b2e31dbc8cd17170c52592792d9c754a199c dahdi-fw-te820-1.76.tar.gz +sha256 6b199cf836f150f9cb35f763f0f502fb52cfa2724a449b500429c746973904ad dahdi-fw-vpmoct032-1.12.0.tar.gz + +# License files, locally computed +sha256 fa5fc1d1eec39532ea517518eeefd7b6e3c14341a55e5880a0e2a49eee47a5b7 LICENSE +sha256 ec60b993835e2c6b79e6d9226345f4e614e686eb57dc13b6420c15a33a8996e5 LICENSE.LGPL diff --git a/package/dahdi-linux/dahdi-linux.mk b/package/dahdi-linux/dahdi-linux.mk new file mode 100644 index 00000000..4d2c7e71 --- /dev/null +++ b/package/dahdi-linux/dahdi-linux.mk @@ -0,0 +1,88 @@ +################################################################################ +# +# dahdi-linux +# +################################################################################ + +DAHDI_LINUX_VERSION = 3.0.0 +DAHDI_LINUX_SITE = http://downloads.asterisk.org/pub/telephony/dahdi-linux/releases + +# We need to download all thoe firmware blobs ourselves, otherwise +# dahdi-linux will try to download them at install time. +DAHDI_LINUX_FW_SITE = http://downloads.digium.com/pub/telephony/firmware/releases +DAHDI_LINUX_FW_FILES = \ + dahdi-fwload-vpmadt032-1.25.0.tar.gz \ + dahdi-fw-oct6114-032-1.05.01.tar.gz \ + dahdi-fw-oct6114-064-1.05.01.tar.gz \ + dahdi-fw-oct6114-128-1.05.01.tar.gz \ + dahdi-fw-oct6114-256-1.05.01.tar.gz \ + dahdi-fw-tc400m-MR6.12.tar.gz \ + dahdi-fw-hx8-2.06.tar.gz \ + dahdi-fw-vpmoct032-1.12.0.tar.gz \ + dahdi-fw-te820-1.76.tar.gz \ + dahdi-fw-te133-7a001e.tar.gz \ + dahdi-fw-te134-780017.tar.gz \ + dahdi-fw-a8b-1f001e.tar.gz \ + dahdi-fw-a8a-1d0017.tar.gz \ + dahdi-fw-a4b-d001e.tar.gz \ + dahdi-fw-a4a-a0017.tar.gz \ + dahdi-fw-te435-13001e.tar.gz \ + dahdi-fw-te436-10017.tar.gz + +DAHDI_LINUX_EXTRA_DOWNLOADS = \ + $(patsubst %,$(DAHDI_LINUX_FW_SITE)/%,$(DAHDI_LINUX_FW_FILES)) + +# dahdi-linux claims to be GPLv2 with parts LGPLv2.1 (not 'or later'), +# but there are the so-called firmware files (downloaded above) for +# which the license is unclear: the header claims to be GPLv2, the +# 'loader-wrapper' claims to be GPLv2, but there are two so-called +# 'firmware' binary-only .o blobs for which the license is not +# explicited, which look like they end up as part of a kernel module, +# and for which the source is nowhere to be found on the upstream site +# (they are only for x86/x86_64, but we still list them unconditionally). +DAHDI_LINUX_LICENSE = GPL-2.0, LGPL-2.1, unknown (firmware files) +DAHDI_LINUX_LICENSE_FILES = LICENSE LICENSE.LGPL + +DAHDI_LINUX_INSTALL_STAGING = YES + +DAHDI_LINUX_MODULE_SUBDIRS = drivers/dahdi + +DAHDI_LINUX_MODULE_MAKE_OPTS = \ + KSRC=$(LINUX_DIR) \ + KVERS=$(LINUX_VERSION_PROBED) \ + DAHDI_BUILD_ALL=m \ + DAHDI_INCLUDE=$(@D)/include \ + INSTALL_MOD_DIR=dahdi + +define DAHDI_LINUX_EXTRACT_FW + $(foreach f,$(DAHDI_LINUX_FW_FILES),\ + cp $(DAHDI_LINUX_DL_DIR)/$(f) $(@D)/drivers/dahdi/firmware/$(f)$(sep)) +endef +DAHDI_LINUX_POST_EXTRACT_HOOKS += DAHDI_LINUX_EXTRACT_FW + +# Need to pass the same options as for building the modules, because +# it wants to scan Linux' .config file to check whether some options +# are set or not (like CONFIG_FW_LOADER). +define DAHDI_LINUX_CONFIGURE_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + $(DAHDI_LINUX_MODULE_MAKE_OPTS) \ + prereq +endef + +define DAHDI_LINUX_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + $(DAHDI_LINUX_MODULE_MAKE_OPTS) \ + DESTDIR=$(STAGING_DIR) \ + install-include +endef + +define DAHDI_LINUX_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + $(DAHDI_LINUX_MODULE_MAKE_OPTS) \ + DESTDIR=$(TARGET_DIR) \ + install-firmware \ + install-xpp-firm +endef + +$(eval $(kernel-module)) +$(eval $(generic-package)) diff --git a/package/dahdi-tools/0001-no-build-docs.patch b/package/dahdi-tools/0001-no-build-docs.patch new file mode 100644 index 00000000..311a129e --- /dev/null +++ b/package/dahdi-tools/0001-no-build-docs.patch @@ -0,0 +1,16 @@ +Do not build the documentation. + +Signed-off-by: "Yann E. MORIN" + +diff -durN dahdi-tools-2.11.0.orig/Makefile.am dahdi-tools-2.11.0/Makefile.am +--- dahdi-tools-2.11.0.orig/Makefile.am 2015-12-22 21:19:12.000000000 +0100 ++++ dahdi-tools-2.11.0/Makefile.am 2016-01-04 23:23:34.201304133 +0100 +@@ -17,7 +17,7 @@ + #-Wformat=2 + endif + +-SUBDIRS = xpp doc hotplug ++SUBDIRS = xpp hotplug + + if PPPD + SUBDIRS += ppp diff --git a/package/dahdi-tools/0002-no-perl-manpages.patch b/package/dahdi-tools/0002-no-perl-manpages.patch new file mode 100644 index 00000000..dae1b6c3 --- /dev/null +++ b/package/dahdi-tools/0002-no-perl-manpages.patch @@ -0,0 +1,37 @@ +xpp: do not try to install the manpages for the perl tools + +The man pages are generated neither at build time nor at install time, +so the install step fails. + +Just disable them. + +Signed-off-by: "Yann E. MORIN" + +diff -durN dahdi-tools-2.11.0.orig/xpp/Makefile.am dahdi-tools-2.11.0/xpp/Makefile.am +--- dahdi-tools-2.11.0.orig/xpp/Makefile.am 2015-12-22 21:19:12.000000000 +0100 ++++ dahdi-tools-2.11.0/xpp/Makefile.am 2016-01-04 23:56:31.851820973 +0100 +@@ -3,7 +3,6 @@ + + SUBDIRS = + +-man_MANS = + + + # FIXME: try to improve code, so we can use $(PEDANTIC) +@@ -59,7 +58,6 @@ + udevrules_DATA = xpp.rules + + dist_sbin_SCRIPTS = $(perl_scripts) +-man_MANS += $(perl_mans) + CLEANFILES = $(perl_checks) $(perl_mans) + + if PBX_USB +@@ -147,8 +145,6 @@ + astribank_allow.8 \ + astribank_is_starting.8 + +-man_MANS += $(man_pages) +- + endif + + EXTRA_DIST = \ diff --git a/package/dahdi-tools/Config.in b/package/dahdi-tools/Config.in new file mode 100644 index 00000000..a5f145df --- /dev/null +++ b/package/dahdi-tools/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_DAHDI_TOOLS + bool "dahdi-tools" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_LINUX_KERNEL # dahdi-linux + depends on BR2_USE_MMU # perl + select BR2_PACKAGE_DAHDI_LINUX + select BR2_PACKAGE_PERL + help + DAHDI (Digium/Asterisk Hardware Device Interface) is the open + source device interface technology used to control Digium and + other legacy telephony interface cards. + + DAHDI Tools is a package of utilities for managing and + monitoring DAHDI devices. + + http://www.asterisk.org/downloads/dahdi + +comment "dahdi-tools needs a toolchain w/ threads and a Linux kernel to be built" + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_LINUX_KERNEL diff --git a/package/dahdi-tools/dahdi-tools.hash b/package/dahdi-tools/dahdi-tools.hash new file mode 100644 index 00000000..5538ed6b --- /dev/null +++ b/package/dahdi-tools/dahdi-tools.hash @@ -0,0 +1,8 @@ +# sha1 from http://downloads.asterisk.org/pub/telephony/dahdi-tools/releases +# sha256 locally computed +sha1 3e988256aae4b6a6ed8efb3ecc07753779f54823 dahdi-tools-3.0.0.tar.gz +sha256 5bebb20d5ae13fa13f0e2075603013954b962be477db02271eef44b3e41557c5 dahdi-tools-3.0.0.tar.gz + +# License files, locally computed +sha256 fa5fc1d1eec39532ea517518eeefd7b6e3c14341a55e5880a0e2a49eee47a5b7 LICENSE +sha256 ec60b993835e2c6b79e6d9226345f4e614e686eb57dc13b6420c15a33a8996e5 LICENSE.LGPL diff --git a/package/dahdi-tools/dahdi-tools.mk b/package/dahdi-tools/dahdi-tools.mk new file mode 100644 index 00000000..392dc091 --- /dev/null +++ b/package/dahdi-tools/dahdi-tools.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# dahdi-tools +# +################################################################################ + +DAHDI_TOOLS_VERSION = 3.0.0 +DAHDI_TOOLS_SITE = http://downloads.asterisk.org/pub/telephony/dahdi-tools/releases + +DAHDI_TOOLS_LICENSE = GPLv2, LGPLv2.1 +DAHDI_TOOLS_LICENSE_FILES = LICENSE LICENSE.LGPL + +DAHDI_TOOLS_DEPENDENCIES = dahdi-linux perl + +DAHDI_TOOLS_INSTALL_STAGING = YES +DAHDI_TOOLS_AUTORECONF = YES + +# Buildroot globally exports PERL with the value it has on the host, so we need +# to override it with the location where it will be on the target. +DAHDI_TOOLS_CONF_ENV = PERL=/usr/bin/perl + +DAHDI_TOOLS_CONF_OPTS = \ + --without-newt \ + --without-usb \ + --without-pcap \ + --without-libusbx \ + --without-libusb \ + --without-selinux \ + --without-ppp \ + --with-perllib=/usr/lib/perl5/$(PERL_VERSION) + +$(eval $(autotools-package)) diff --git a/package/dante/0001-fix-sparc-compile.patch b/package/dante/0001-fix-sparc-compile.patch new file mode 100644 index 00000000..a23e2e22 --- /dev/null +++ b/package/dante/0001-fix-sparc-compile.patch @@ -0,0 +1,24 @@ +Signal handling for sparc is broken, fix it. + +Signed-off-by: Waldemar Brodkorb + +--- dante-1.4.1.orig/lib/tostring.c 2014-08-21 18:21:50.000000000 +0200 ++++ dante-1.4.1/lib/tostring.c 2016-07-10 10:08:39.785662622 +0200 +@@ -1526,7 +1526,7 @@ signal2string(sig) + return "SIGKILL"; + #endif /* SIGKILL */ + +-#if (defined SIGLOST) && (!defined SIGABRT || SIGLOST != SIGABRT) ++#if (defined SIGLOST) && (!defined SIGABRT || SIGLOST != SIGABRT || SIGLOST != SIGPWR) + case SIGLOST: + return "SIGLOST"; + #endif /* SIGLOST */ +@@ -1551,7 +1551,7 @@ signal2string(sig) + return "SIGPROF"; + #endif /* SIGPROF */ + +-#ifdef SIGPWR ++#if (defined SIGPWR) && SIGPWR != SIGLOST + case SIGPWR: + return "SIGPWR"; + #endif /* SIGPWR */ diff --git a/package/dante/0002-osdep-m4-Remove-getaddrinfo-too-low-checks.patch b/package/dante/0002-osdep-m4-Remove-getaddrinfo-too-low-checks.patch new file mode 100644 index 00000000..af23d46d --- /dev/null +++ b/package/dante/0002-osdep-m4-Remove-getaddrinfo-too-low-checks.patch @@ -0,0 +1,35 @@ +osdep.m4: Remove getaddrinfo() too low checks + +dante runs AC_PREPROC_IFELSE then it fills $ERRVALFILE by running the +following command: + +cat conftest.i | grep gaierrval: >>$2 + +As a result, $ERRVALFILE does not contain the expected values because +the expected value is not on the same line than gaierrval: + + gaierrval: + # 130 "conftest.c" 3 4 + -3 + +So drop these checks + +Signed-off-by: Fabrice Fontaine + +diff -Nuar dante-1.4.2-orig/osdep.m4 dante-1.4.2/osdep.m4 +--- dante-1.4.2-orig/osdep.m4 2019-12-09 21:28:38.936003218 +0100 ++++ dante-1.4.2/osdep.m4 2019-12-09 21:49:48.764019371 +0100 +@@ -956,13 +956,7 @@ + unset UNIQUEVALS UNIQUESYMBOLS + if test -s $ERRVALFILE; then + UNIQUEVALS=`sort $ERRVALFILE | uniq | wc -l | awk '{ print $1 }'` +- if test $UNIQUEVALS -le 1; then +- AC_MSG_FAILURE([error: getaddrinfo() error value count too low]) +- fi + UNIQUESYMBOLS=`cat $ERRVALFILE | wc -l | awk '{ print $1 }'` +- if test $UNIQUESYMBOLS -le 1; then +- AC_MSG_FAILURE([error: getaddrinfo() error symbol count too low]) +- fi + + if test $ERRNOCNT -ne $UNIQUESYMBOLS; then + AC_MSG_FAILURE([internal error: errno symbol count mismatch]) diff --git a/package/dante/Config.in b/package/dante/Config.in new file mode 100644 index 00000000..41a89990 --- /dev/null +++ b/package/dante/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_DANTE + bool "dante" + depends on BR2_USE_MMU # fork() + help + Dante is a product developed by Inferno Nettverk A/S. It + consists of a SOCKS server and a SOCKS client, implementing + RFC 1928 and related standards. It is a flexible product + that can be used to provide convenient and secure network + connectivity. + + http://www.inet.no/dante/ diff --git a/package/dante/S50dante b/package/dante/S50dante new file mode 100644 index 00000000..ed51a841 --- /dev/null +++ b/package/dante/S50dante @@ -0,0 +1,40 @@ +#!/bin/sh +# +# Starts dante +# + +# Allow a few customizations from a config file +test -r /etc/default/dante && . /etc/default/dante + +start() { + printf "Starting dante: " + start-stop-daemon -S -q -p /var/run/dante.pid \ + --exec /usr/sbin/sockd -- $DAEMON_ARGS + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +stop() { + printf "Stopping dante: " + start-stop-daemon -K -q -p /var/run/dante.pid + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/dante/dante.hash b/package/dante/dante.hash new file mode 100644 index 00000000..cb87cdc0 --- /dev/null +++ b/package/dante/dante.hash @@ -0,0 +1,5 @@ +# From https://www.inet.no/dante/download.html +sha256 4c97cff23e5c9b00ca1ec8a95ab22972813921d7fbf60fc453e3e06382fc38a7 dante-1.4.2.tar.gz + +# Hash for license file +sha256 954ab6dbcf994711e28e603d8657d6eceef333cd6f9ca6705f0e9d118ab7d69a LICENSE diff --git a/package/dante/dante.mk b/package/dante/dante.mk new file mode 100644 index 00000000..6e950b11 --- /dev/null +++ b/package/dante/dante.mk @@ -0,0 +1,48 @@ +################################################################################ +# +# dante +# +################################################################################ + +DANTE_VERSION = 1.4.2 +DANTE_SITE = http://www.inet.no/dante/files +DANTE_LICENSE = BSD-3-Clause +DANTE_LICENSE_FILES = LICENSE + +# Needed so that our libtool patch applies properly +DANTE_AUTORECONF = YES + +DANTE_CONF_OPTS += --disable-client --disable-preload + +ifeq ($(BR2_PACKAGE_LIBMINIUPNPC),y) +DANTE_DEPENDENCIES += libminiupnpc +DANTE_CONF_OPTS += --with-upnp +else +DANTE_CONF_OPTS += --without-upnp +endif + +ifeq ($(BR2_PACKAGE_LINUX_PAM),y) +DANTE_DEPENDENCIES += linux-pam +DANTE_CONF_OPTS += --with-pam +else +DANTE_CONF_OPTS += --without-pam +endif + +define DANTE_INSTALL_CONFIG_FILE + $(INSTALL) -D -m 644 $(@D)/example/sockd.conf \ + $(TARGET_DIR)/etc/sockd.conf +endef + +DANTE_POST_INSTALL_TARGET_HOOKS += DANTE_INSTALL_CONFIG_FILE + +define DANTE_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/dante/dante.service \ + $(TARGET_DIR)/usr/lib/systemd/system/dante.service +endef + +define DANTE_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 package/dante/S50dante \ + $(TARGET_DIR)/etc/init.d/S50dante +endef + +$(eval $(autotools-package)) diff --git a/package/dante/dante.service b/package/dante/dante.service new file mode 100644 index 00000000..b783cee3 --- /dev/null +++ b/package/dante/dante.service @@ -0,0 +1,15 @@ +[Unit] +Description=SOCKS v4 and v5 compatible proxy server and client +Requires=network.target +After=network.target + +[Service] +Type=forking +EnvironmentFile=-/etc/default/dante +PIDFile=/run/dante.pid +ExecStart=/usr/sbin/sockd -D -p /run/dante.pid $DAEMON_ARGS +ExecReload=/bin/kill -HUP $MAINPID +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/package/daq/0001-Fix-build-against-the-musl-C-library.patch b/package/daq/0001-Fix-build-against-the-musl-C-library.patch new file mode 100644 index 00000000..25f2f9c4 --- /dev/null +++ b/package/daq/0001-Fix-build-against-the-musl-C-library.patch @@ -0,0 +1,54 @@ +From 42efa6d76a3b52f35e576a6b941a9afb5b3879e9 Mon Sep 17 00:00:00 2001 +From: Sergio Prado +Date: Tue, 9 Jan 2018 21:39:27 -0200 +Subject: [PATCH] Fix build against the musl C library + +Signed-off-by: Sergio Prado +--- + os-daq-modules/daq_ipfw.c | 2 +- + os-daq-modules/daq_ipq.c | 2 +- + os-daq-modules/daq_nfq.c | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/os-daq-modules/daq_ipfw.c b/os-daq-modules/daq_ipfw.c +index 016beb06ad61..98f67717f646 100644 +--- a/os-daq-modules/daq_ipfw.c ++++ b/os-daq-modules/daq_ipfw.c +@@ -26,7 +26,7 @@ + + #include + #include +-#include ++#include + + #include + #include +diff --git a/os-daq-modules/daq_ipq.c b/os-daq-modules/daq_ipq.c +index 77ec6e9505e5..b15e5cf82af0 100644 +--- a/os-daq-modules/daq_ipq.c ++++ b/os-daq-modules/daq_ipq.c +@@ -27,7 +27,7 @@ + + #include + #include +-#include ++#include + + #include + +diff --git a/os-daq-modules/daq_nfq.c b/os-daq-modules/daq_nfq.c +index 33021c0ec991..0df1e61c74c4 100644 +--- a/os-daq-modules/daq_nfq.c ++++ b/os-daq-modules/daq_nfq.c +@@ -27,7 +27,7 @@ + + #include + #include +-#include ++#include + + #include + +-- +1.9.1 + diff --git a/package/daq/0002-parallel-grammar.patch b/package/daq/0002-parallel-grammar.patch new file mode 100644 index 00000000..ba0e256f --- /dev/null +++ b/package/daq/0002-parallel-grammar.patch @@ -0,0 +1,29 @@ +Fix parallel build + +https://bugs.gentoo.org/673390 + +Downloaded from +https://gitweb.gentoo.org/repo/gentoo.git/tree/net-libs/daq/files/daq-2.0.6-parallel-grammar.patch + +Patch was sent upstream: https://seclists.org/snort/2014/q3/1016 + +Signed-off-by: Bernd Kuhls + +--- a/sfbpf/Makefile.am ++++ b/sfbpf/Makefile.am +@@ -43,13 +43,14 @@ + libsfbpf_la_LDFLAGS = -version-info 0:1:0 @XCCFLAGS@ + + # use of $@ and $< here is a GNU idiom that borks BSD +-sf_scanner.c: $(srcdir)/scanner.l ++sf_scanner.c: $(srcdir)/scanner.l tokdefs.h + @rm -f $(srcdir)/sf_scanner.c + $(srcdir)/runlex.sh $(V_LEX) -osf_scanner.c $(srcdir)/scanner.l + + sf_scanner.o: sf_scanner.c tokdefs.h + + tokdefs.h: sf_grammar.c ++ + sf_grammar.c: $(srcdir)/grammar.y + @rm -f sf_grammar.c tokdefs.h + $(V_YACC) -d $(srcdir)/grammar.y diff --git a/package/daq/Config.in b/package/daq/Config.in new file mode 100644 index 00000000..ad294abd --- /dev/null +++ b/package/daq/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_DAQ + bool "daq" + depends on !BR2_STATIC_LIBS # dlfcn.h + help + DAQ is a Data Acquisition library for packet I/O from the + Snort project. + + https://www.snort.org + +comment "daq needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/daq/daq.hash b/package/daq/daq.hash new file mode 100644 index 00000000..0fa1edec --- /dev/null +++ b/package/daq/daq.hash @@ -0,0 +1,7 @@ +# From https://www.snort.org/downloads/snort/md5s +md5 ea796f001d1b00302e4e69e337ab2460 daq-2.0.7.tar.gz +# Locally computed: +sha256 bdc4e5a24d1ea492c39ee213a63c55466a2e8114b6a9abed609927ae13a7705e daq-2.0.7.tar.gz + +# Hash for license files: +sha256 07f28289c09fd9eb5a6ff7bc710ff40363601b1bbc6f3637d8ed412150e90819 COPYING diff --git a/package/daq/daq.mk b/package/daq/daq.mk new file mode 100644 index 00000000..8a5394a6 --- /dev/null +++ b/package/daq/daq.mk @@ -0,0 +1,46 @@ +################################################################################ +# +# daq +# +################################################################################ + +DAQ_VERSION = 2.0.7 +DAQ_SITE = https://www.snort.org/downloads/snort +DAQ_LICENSE = GPL-2.0 +DAQ_LICENSE_FILES = COPYING +DAQ_INSTALL_STAGING = YES +DAQ_DEPENDENCIES = host-bison host-flex +# 0002-parallel-grammar.patch +# 2.0.7 needs autoreconf due to configure being older than configure.ac +DAQ_AUTORECONF = YES + +# disable ipq module as libipq is deprecated +DAQ_CONF_OPTS += --disable-ipq-module + +# Set --with-dnet-{includes,libraries} even if ipq and nfq modules are disabled +# otherwise daq will call 'dnet-config --cflags' and 'dnet-config --libs' which +# will result in a build failure if libdnet is installed on host +DAQ_CONF_OPTS += \ + --with-dnet-includes=$(STAGING_DIR)/usr/include \ + --with-dnet-libraries=$(STAGING_DIR)/usr/lib + +ifeq ($(BR2_PACKAGE_LIBDNET)$(BR2_PACKAGE_LIBNETFILTER_QUEUE),yy) +DAQ_DEPENDENCIES += libdnet libnetfilter_queue +DAQ_CONF_OPTS += --enable-nfq-module +else +DAQ_CONF_OPTS += --disable-nfq-module +endif + +ifeq ($(BR2_PACKAGE_LIBPCAP),y) +DAQ_DEPENDENCIES += libpcap +# assume these flags are available to prevent configure from running +# test programs while cross compiling +DAQ_CONF_ENV += \ + ac_cv_lib_pcap_pcap_lib_version=yes \ + daq_cv_libpcap_version_1x=yes +DAQ_CONF_OPTS += --enable-pcap-module +else +DAQ_CONF_OPTS += --disable-pcap-module +endif + +$(eval $(autotools-package)) diff --git a/package/darkhttpd/Config.in b/package/darkhttpd/Config.in new file mode 100644 index 00000000..a5ab41ae --- /dev/null +++ b/package/darkhttpd/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_DARKHTTPD + bool "darkhttpd" + depends on BR2_USE_MMU # fork() + help + Darkhttpd is a simple, fast HTTP 1.1 web server which only + serves static content. It does not support PHP or CGI. + + The behavior of darkhttpd can be altered by setting some + variables in /etc/default/darkhttpd: + + - DARKHTTPD_ROOT: path to the server document root. + - DARKHTTPD_FLAGS: options to pass to darkhttpd. + + https://unix4lyfe.org/darkhttpd/ diff --git a/package/darkhttpd/S50darkhttpd b/package/darkhttpd/S50darkhttpd new file mode 100644 index 00000000..913439f5 --- /dev/null +++ b/package/darkhttpd/S50darkhttpd @@ -0,0 +1,45 @@ +#!/bin/sh +# +# Starts darkhttpd. +# + +# Allow a few customizations from a config file +test -r /etc/default/darkhttpd && . /etc/default/darkhttpd + +DARKHTTPD_PROG=/usr/sbin/darkhttpd +DARKHTTPD_PIDFILE=/var/run/darkhttpd.pid +DARKHTTPD_ARGS="${DARKHTTPD_ROOT:-/var/www} --log /var/log/darkhttpd.log $DARKHTTPD_FLAGS --chroot --uid nobody --gid www-data" + +start() { + printf "Starting darkhttpd: " + start-stop-daemon -S -q -b -p $DARKHTTPD_PIDFILE -m --exec $DARKHTTPD_PROG -- $DARKHTTPD_ARGS + [ $? = 0 ] && echo "OK" || echo "FAIL" +} + +stop() { + printf "Stopping darkhttpd: " + start-stop-daemon -K -q -p $DARKHTTPD_PIDFILE + [ $? = 0 ] && echo "OK" || echo "FAIL" +} + +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/darkhttpd/darkhttpd.hash b/package/darkhttpd/darkhttpd.hash new file mode 100644 index 00000000..b6618db8 --- /dev/null +++ b/package/darkhttpd/darkhttpd.hash @@ -0,0 +1,3 @@ +# Locally generated +sha256 a50417b622b32b5f421b3132cb94ebeff04f02c5fb87fba2e31147d23de50505 darkhttpd-1.12.tar.bz2 +sha256 6e1a2e45d8dd3c8835222e3c82e5cccde8e60f02d55555910e18715ec5dc6d04 darkhttpd.c diff --git a/package/darkhttpd/darkhttpd.mk b/package/darkhttpd/darkhttpd.mk new file mode 100644 index 00000000..4b65cffe --- /dev/null +++ b/package/darkhttpd/darkhttpd.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# darkhttpd +# +################################################################################ + +DARKHTTPD_VERSION = 1.12 +DARKHTTPD_SITE = https://unix4lyfe.org/darkhttpd +DARKHTTPD_SOURCE = darkhttpd-$(DARKHTTPD_VERSION).tar.bz2 +DARKHTTPD_LICENSE = MIT +DARKHTTPD_LICENSE_FILES = darkhttpd.c + +define DARKHTTPD_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) +endef + +define DARKHTTPD_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/darkhttpd \ + $(TARGET_DIR)/usr/sbin/darkhttpd +endef + +define DARKHTTPD_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0644 package/darkhttpd/darkhttpd.service \ + $(TARGET_DIR)/usr/lib/systemd/system/darkhttpd.service +endef + +define DARKHTTPD_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/darkhttpd/S50darkhttpd \ + $(TARGET_DIR)/etc/init.d/S50darkhttpd +endef + +$(eval $(generic-package)) diff --git a/package/darkhttpd/darkhttpd.service b/package/darkhttpd/darkhttpd.service new file mode 100644 index 00000000..17abd98c --- /dev/null +++ b/package/darkhttpd/darkhttpd.service @@ -0,0 +1,11 @@ +[Unit] +Description=Darkhttpd Web Server +After=syslog.target network.target auditd.service + +[Service] +Environment="DARKHTTPD_ROOT=/var/www" +EnvironmentFile=-/etc/default/darkhttpd +ExecStart=/usr/sbin/darkhttpd $DARKHTTPD_ROOT $DARKHTTPD_FLAGS --chroot --uid nobody --gid www-data + +[Install] +WantedBy=multi-user.target diff --git a/package/dash/Config.in b/package/dash/Config.in new file mode 100644 index 00000000..b816ac78 --- /dev/null +++ b/package/dash/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_DASH + bool "dash" + depends on BR2_USE_MMU # fork() + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + DASH is a POSIX-compliant implementation of /bin/sh that + aims to be as small as possible. It does this without + sacrificing speed where possible. In fact, it is + significantly faster than bash (the GNU Bourne-Again SHell) + for most tasks. + + http://gondor.apana.org.au/~herbert/dash diff --git a/package/dash/dash.hash b/package/dash/dash.hash new file mode 100644 index 00000000..24cc7318 --- /dev/null +++ b/package/dash/dash.hash @@ -0,0 +1,4 @@ +# From http://gondor.apana.org.au/~herbert/dash/files/dash-0.5.11.2.tar.gz.sha256sum +sha256 62b9f1676ba6a7e8eaec541a39ea037b325253240d1f378c72360baa1cbcbc2a dash-0.5.11.3.tar.gz +# Locally calculated +sha256 254a7894923ff62e69184a991dcbccae97edee58a1105e8efbe78caf10595d72 COPYING diff --git a/package/dash/dash.mk b/package/dash/dash.mk new file mode 100644 index 00000000..1712dcf5 --- /dev/null +++ b/package/dash/dash.mk @@ -0,0 +1,42 @@ +################################################################################ +# +# dash +# +################################################################################ + +DASH_VERSION = 0.5.11.3 +DASH_SITE = http://gondor.apana.org.au/~herbert/dash/files +DASH_LICENSE = BSD-3-Clause, GPL-2.0+ (mksignames.c) +DASH_LICENSE_FILES = COPYING + +# dash does not build in parallel +DASH_MAKE = $(MAKE1) + +ifeq ($(BR2_PACKAGE_LIBEDIT),y) +DASH_DEPENDENCIES += libedit host-pkgconf +DASH_CONF_OPTS += --with-libedit +DASH_CONF_ENV += LIBS=`pkg-config --libs libedit` + +# Enable line editing, Emacs style +define DASH_INSTALL_PROFILE + mkdir -p $(TARGET_DIR)/etc/profile.d + echo 'set -E' > $(TARGET_DIR)/etc/profile.d/dash.sh +endef +DASH_POST_INSTALL_TARGET_HOOKS += DASH_INSTALL_PROFILE +else +DASH_CONF_OPTS += --without-libedit +endif + +define DASH_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/src/dash $(TARGET_DIR)/bin/dash +endef + +# Add /bin/dash to /etc/shells otherwise some login tools like dropbear +# can reject the user connection. See man shells. +define DASH_ADD_DASH_TO_SHELLS + grep -qsE '^/bin/dash$$' $(TARGET_DIR)/etc/shells \ + || echo "/bin/dash" >> $(TARGET_DIR)/etc/shells +endef +DASH_TARGET_FINALIZE_HOOKS += DASH_ADD_DASH_TO_SHELLS + +$(eval $(autotools-package)) diff --git a/package/datatables-buttons/Config.in b/package/datatables-buttons/Config.in new file mode 100644 index 00000000..515038eb --- /dev/null +++ b/package/datatables-buttons/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_DATATABLES_BUTTONS + bool "datatables-buttons" + depends on BR2_PACKAGE_DATATABLES + select BR2_PACKAGE_JSZIP + help + The Buttons library for DataTables provides a framework with + common options and API that can be used with DataTables, but + is also very extensible, recognising that you will likely want + to use buttons which perform an action unique to your + applications. + + https://datatables.net/extensions/buttons diff --git a/package/datatables-buttons/datatables-buttons.hash b/package/datatables-buttons/datatables-buttons.hash new file mode 100644 index 00000000..eda8df34 --- /dev/null +++ b/package/datatables-buttons/datatables-buttons.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 427632c0245f488328edab83b53294545744c8de621a5eaa9dd3d257d7ed7775 Buttons-1.6.1.zip +sha256 21fa7cbc3c00bcad1e0f3417d465e702bd470d7dc446a6deff80c8fc5eda9148 License.txt diff --git a/package/datatables-buttons/datatables-buttons.mk b/package/datatables-buttons/datatables-buttons.mk new file mode 100644 index 00000000..a08be058 --- /dev/null +++ b/package/datatables-buttons/datatables-buttons.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# datatables-buttons +# +################################################################################ + +DATATABLES_BUTTONS_VERSION = 1.6.1 +DATATABLES_BUTTONS_SITE = https://datatables.net/releases +DATATABLES_BUTTONS_SOURCE = Buttons-$(DATATABLES_BUTTONS_VERSION).zip +DATATABLES_BUTTONS_LICENSE = MIT +DATATABLES_BUTTONS_LICENSE_FILES = License.txt + +define DATATABLES_BUTTONS_EXTRACT_CMDS + $(UNZIP) $(DATATABLES_BUTTONS_DL_DIR)/$(DATATABLES_BUTTONS_SOURCE) -d $(@D) + mv $(@D)/Buttons-$(DATATABLES_BUTTONS_VERSION)/* $(@D) + rmdir $(@D)/Buttons-$(DATATABLES_BUTTONS_VERSION) +endef + +define DATATABLES_BUTTONS_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -d $(TARGET_DIR)/var/www/datatables-buttons/css $(TARGET_DIR)/var/www/datatables-buttons/js + $(INSTALL) -m 0644 -t $(TARGET_DIR)/var/www/datatables-buttons/css $(@D)/css/*.min.css + $(INSTALL) -m 0644 -t $(TARGET_DIR)/var/www/datatables-buttons/js $(@D)/js/*.min.js +endef + +$(eval $(generic-package)) diff --git a/package/datatables-fixedcolumns/Config.in b/package/datatables-fixedcolumns/Config.in new file mode 100644 index 00000000..4d2e5ea0 --- /dev/null +++ b/package/datatables-fixedcolumns/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_DATATABLES_FIXEDCOLUMNS + bool "datatables-fixedcolumns" + depends on BR2_PACKAGE_DATATABLES + help + When making use of DataTables' x-axis scrolling feature + (scrollX), you may wish to fix the left or right most columns + in place. This extension for DataTables provides exactly this + option. + + https://datatables.net/extensions/fixedcolumns diff --git a/package/datatables-fixedcolumns/datatables-fixedcolumns.hash b/package/datatables-fixedcolumns/datatables-fixedcolumns.hash new file mode 100644 index 00000000..dc946202 --- /dev/null +++ b/package/datatables-fixedcolumns/datatables-fixedcolumns.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 53a7b20ea9dbb6498137cb7260bde8605989ec578e4b71787f5ebc4ef9910bd9 FixedColumns-3.3.0.zip +sha256 e8e92f97216f9ea00cb2735b933a91ec8e3869bed37b6d63a90f76f41508f2de License.txt diff --git a/package/datatables-fixedcolumns/datatables-fixedcolumns.mk b/package/datatables-fixedcolumns/datatables-fixedcolumns.mk new file mode 100644 index 00000000..3c744990 --- /dev/null +++ b/package/datatables-fixedcolumns/datatables-fixedcolumns.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# datatables-fixedcolumns +# +################################################################################ + +DATATABLES_FIXEDCOLUMNS_VERSION = 3.3.0 +DATATABLES_FIXEDCOLUMNS_SITE = https://datatables.net/releases +DATATABLES_FIXEDCOLUMNS_SOURCE = FixedColumns-$(DATATABLES_FIXEDCOLUMNS_VERSION).zip +DATATABLES_FIXEDCOLUMNS_LICENSE = MIT +DATATABLES_FIXEDCOLUMNS_LICENSE_FILES = License.txt + +define DATATABLES_FIXEDCOLUMNS_EXTRACT_CMDS + $(UNZIP) $(DATATABLES_FIXEDCOLUMNS_DL_DIR)/$(DATATABLES_FIXEDCOLUMNS_SOURCE) -d $(@D) + mv $(@D)/FixedColumns-$(DATATABLES_FIXEDCOLUMNS_VERSION)/* $(@D) + rmdir $(@D)/FixedColumns-$(DATATABLES_FIXEDCOLUMNS_VERSION) +endef + +define DATATABLES_FIXEDCOLUMNS_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -d $(TARGET_DIR)/var/www/datatables-fixedcolumns/css $(TARGET_DIR)/var/www/datatables-fixedcolumns/js + $(INSTALL) -m 0644 -t $(TARGET_DIR)/var/www/datatables-fixedcolumns/css $(@D)/css/*.min.css + $(INSTALL) -m 0644 -t $(TARGET_DIR)/var/www/datatables-fixedcolumns/js $(@D)/js/*.min.js +endef + +$(eval $(generic-package)) diff --git a/package/datatables-responsive/Config.in b/package/datatables-responsive/Config.in new file mode 100644 index 00000000..085824af --- /dev/null +++ b/package/datatables-responsive/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_DATATABLES_RESPONSIVE + bool "datatables-responsive" + depends on BR2_PACKAGE_DATATABLES + help + In the modern world of responsive web design tables can often + cause a particular problem for designers due to their row + based layout. Responsive is an extension for DataTables that + resolves that problem by optimising the table's layout for + different screen sizes through the dynamic insertion and + removal of columns from the table. + + https://datatables.net/extensions/responsive diff --git a/package/datatables-responsive/datatables-responsive.hash b/package/datatables-responsive/datatables-responsive.hash new file mode 100644 index 00000000..d10313f3 --- /dev/null +++ b/package/datatables-responsive/datatables-responsive.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 47caf3b753dd2c537b8834816eaf38c4df214cb4e6a97144e0de4cf82ad24d02 Responsive-2.2.3.zip +sha256 da4e1020ae97c095a14d7830c1a8a793e080c062e22d749ecd3fc3c075673dbf License.txt diff --git a/package/datatables-responsive/datatables-responsive.mk b/package/datatables-responsive/datatables-responsive.mk new file mode 100644 index 00000000..bc964470 --- /dev/null +++ b/package/datatables-responsive/datatables-responsive.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# datatables-responsive +# +################################################################################ + +DATATABLES_RESPONSIVE_VERSION = 2.2.3 +DATATABLES_RESPONSIVE_SITE = https://datatables.net/releases +DATATABLES_RESPONSIVE_SOURCE = Responsive-$(DATATABLES_RESPONSIVE_VERSION).zip +DATATABLES_RESPONSIVE_LICENSE = MIT +DATATABLES_RESPONSIVE_LICENSE_FILES = License.txt + +define DATATABLES_RESPONSIVE_EXTRACT_CMDS + $(UNZIP) $(DATATABLES_RESPONSIVE_DL_DIR)/$(DATATABLES_RESPONSIVE_SOURCE) -d $(@D) + mv $(@D)/Responsive-$(DATATABLES_RESPONSIVE_VERSION)/* $(@D) + rmdir $(@D)/Responsive-$(DATATABLES_RESPONSIVE_VERSION) +endef + +define DATATABLES_RESPONSIVE_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -d $(TARGET_DIR)/var/www/datatables-responsive/css $(TARGET_DIR)/var/www/datatables-responsive/js + $(INSTALL) -m 0644 -t $(TARGET_DIR)/var/www/datatables-responsive/css $(@D)/css/*.min.css + $(INSTALL) -m 0644 -t $(TARGET_DIR)/var/www/datatables-responsive/js $(@D)/js/*.min.js +endef + +$(eval $(generic-package)) diff --git a/package/datatables/Config.in b/package/datatables/Config.in new file mode 100644 index 00000000..89009712 --- /dev/null +++ b/package/datatables/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_DATATABLES + bool "datatables" + help + Javascript library providing advanced interaction controls + for your HTML tables. + + https://datatables.net diff --git a/package/datatables/datatables.hash b/package/datatables/datatables.hash new file mode 100644 index 00000000..d6eeadfb --- /dev/null +++ b/package/datatables/datatables.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 e2c79dd9d02caa04130ce888061bc922e18561e72e842ba0cb657d1812d9f1bf DataTables-1.10.20.zip +sha256 c6a873f21550ed804f76013c36e14225704c1aa551fdb870e0c626eb91c19247 license.txt diff --git a/package/datatables/datatables.mk b/package/datatables/datatables.mk new file mode 100644 index 00000000..7bd3d83a --- /dev/null +++ b/package/datatables/datatables.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# datatables +# +################################################################################ + +DATATABLES_VERSION = 1.10.20 +DATATABLES_SITE = https://datatables.net/releases +DATATABLES_SOURCE = DataTables-$(DATATABLES_VERSION).zip +DATATABLES_LICENSE = MIT +DATATABLES_LICENSE_FILES = license.txt + +define DATATABLES_EXTRACT_CMDS + $(UNZIP) $(DATATABLES_DL_DIR)/$(DATATABLES_SOURCE) -d $(@D) + mv $(@D)/DataTables-$(DATATABLES_VERSION)/* $(@D) + rmdir $(@D)/DataTables-$(DATATABLES_VERSION) +endef + +define DATATABLES_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -d $(TARGET_DIR)/var/www/datatables/css $(TARGET_DIR)/var/www/datatables/js + $(INSTALL) -m 0644 -t $(TARGET_DIR)/var/www/datatables/css $(@D)/media/css/*.min.css + $(INSTALL) -m 0644 -t $(TARGET_DIR)/var/www/datatables/js $(@D)/media/js/*.min.js +endef + +$(eval $(generic-package)) diff --git a/package/dav1d/Config.in b/package/dav1d/Config.in new file mode 100644 index 00000000..fb290255 --- /dev/null +++ b/package/dav1d/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_DAV1D + bool "dav1d" + depends on !BR2_STATIC_LIBS # dlfcn.h + depends on BR2_TOOLCHAIN_HAS_THREADS # pthread + help + dav1d is a new AV1 cross-platform decoder, open-source, and + focused on speed and correctness. + + https://code.videolan.org/videolan/dav1d + +comment "dav1d needs a toolchain w/ threads, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/dav1d/dav1d.hash b/package/dav1d/dav1d.hash new file mode 100644 index 00000000..45152f7a --- /dev/null +++ b/package/dav1d/dav1d.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 842da2945afcf54e651d17112bf2823a238e6c935a6c8dff3a8e96a2eb740269 dav1d-0.8.1.tar.bz2 +sha256 b327887de263238deaa80c34cdd2ff3e0ba1d35db585ce14a37ce3e74ee389e9 COPYING diff --git a/package/dav1d/dav1d.mk b/package/dav1d/dav1d.mk new file mode 100644 index 00000000..68f6fc88 --- /dev/null +++ b/package/dav1d/dav1d.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# dav1d +# +################################################################################ + +DAV1D_VERSION = 0.8.1 +DAV1D_SOURCE = dav1d-$(DAV1D_VERSION).tar.bz2 +DAV1D_SITE = https://code.videolan.org/videolan/dav1d/-/archive/$(DAV1D_VERSION) +DAV1D_LICENSE = BSD-2-Clause +DAV1D_LICENSE_FILES = COPYING +DAV1D_INSTALL_STAGING = YES +DAV1D_CONF_OPTS = \ + -Denable_tests=false \ + -Denable_tools=false + +ifeq ($(BR2_i386)$(BR2_x86_64),y) +DAV1D_DEPENDENCIES += host-nasm +endif + +# ARM assembly requires v6+ ISA +ifeq ($(BR2_ARM_CPU_ARMV4)$(BR2_ARM_CPU_ARMV5)$(BR2_ARM_CPU_ARMV7M),y) +DAV1D_CONF_OPTS += -Denable_asm=false +endif + +# Uses __atomic_fetch_add_4 +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +DAV1D_LDFLAGS += -latomic +endif + +$(eval $(meson-package)) diff --git a/package/davfs2/0001-src-Makefile.am-do-not-hardcode-fstack-protector-str.patch b/package/davfs2/0001-src-Makefile.am-do-not-hardcode-fstack-protector-str.patch new file mode 100644 index 00000000..54ae62fc --- /dev/null +++ b/package/davfs2/0001-src-Makefile.am-do-not-hardcode-fstack-protector-str.patch @@ -0,0 +1,45 @@ +From d209ef650cf2f760ef8217748ab10716bd22d60d Mon Sep 17 00:00:00 2001 +From: Peter Korsgaard +Date: Sun, 24 Jun 2018 10:35:37 +0200 +Subject: [PATCH] src/Makefile.am: do not hardcode -fstack-protector-strong + +davfs2 does not truly require -fstack-protector-strong, so do not hardcode +it. + +Signed-off-by: Peter Korsgaard +--- + src/Makefile.am | 3 +-- + src/Makefile.in | 3 +-- + 2 files changed, 2 insertions(+), 4 deletions(-) + +diff --git a/src/Makefile.am b/src/Makefile.am +index f083462..ed6b682 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -32,8 +32,7 @@ mount_davfs_SOURCES = cache.c dav_coda.c \ + kernel_interface.h mount_davfs.h webdav.h + umount_davfs_SOURCES = umount_davfs.c defaults.h + +-AM_CFLAGS = -Wall -Werror=format-security \ +- -fstack-protector-strong --param=ssp-buffer-size=4 ++AM_CFLAGS = -Wall -Werror=format-security + DEFS = -DPROGRAM_NAME=\"mount.davfs\" \ + -DDAV_SYS_CONF_DIR=\"$(pkgsysconfdir)\" \ + -DDAV_LOCALSTATE_DIR=\"$(dav_localstatedir)\" \ +diff --git a/src/Makefile.in b/src/Makefile.in +index 9fee542..e98758d 100644 +--- a/src/Makefile.in ++++ b/src/Makefile.in +@@ -315,8 +315,7 @@ mount_davfs_SOURCES = cache.c dav_coda.c \ + kernel_interface.h mount_davfs.h webdav.h + + umount_davfs_SOURCES = umount_davfs.c defaults.h +-AM_CFLAGS = -Wall -Werror=format-security \ +- -fstack-protector-strong --param=ssp-buffer-size=4 ++AM_CFLAGS = -Wall -Werror=format-security + + all: all-am + +-- +2.11.0 + diff --git a/package/davfs2/Config.in b/package/davfs2/Config.in new file mode 100644 index 00000000..162753be --- /dev/null +++ b/package/davfs2/Config.in @@ -0,0 +1,18 @@ +comment "davfs2 needs a glibc or uClibc toolchain" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_USES_MUSL + +config BR2_PACKAGE_DAVFS2 + bool "davfs2" + depends on !BR2_TOOLCHAIN_USES_MUSL # error.h + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_NEON + select BR2_PACKAGE_NEON_XML + help + davfs2 is a Linux file system driver that allows to + mount a WebDAV resource. WebDAV is an extension to HTTP/1.1 + that allows remote collaborative authoring of Web resources. + To use davfs2 via /etc/fstab, FEATURE_MOUNT_HELPERS + must be selected in busybox configuration. + + http://savannah.nongnu.org/projects/davfs2 diff --git a/package/davfs2/davfs2.hash b/package/davfs2/davfs2.hash new file mode 100644 index 00000000..88a314d1 --- /dev/null +++ b/package/davfs2/davfs2.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 2e6b675685bd917772be60f0999ae098c80f79ff20dc131e8fec4547cbb63b50 davfs2-1.6.0.tar.gz +# License file, locally calculated +sha256 0ae0485a5bd37a63e63603596417e4eb0e653334fa6c7f932ca3a0e85d4af227 COPYING diff --git a/package/davfs2/davfs2.mk b/package/davfs2/davfs2.mk new file mode 100644 index 00000000..9b96140f --- /dev/null +++ b/package/davfs2/davfs2.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# davfs2 +# +################################################################################ + +DAVFS2_VERSION = 1.6.0 +DAVFS2_SITE = http://download.savannah.nongnu.org/releases/davfs2 +DAVFS2_LICENSE = GPL-3.0+ +DAVFS2_LICENSE_FILES = COPYING +DAVFS2_CPE_ID_VENDOR = werner_baumann + +DAVFS2_DEPENDENCIES = \ + neon \ + $(if $(BR2_PACKAGE_LIBICONV),libiconv) \ + $(TARGET_NLS_DEPENDENCIES) + +DAVFS2_CONF_ENV += \ + ac_cv_path_NEON_CONFIG=$(STAGING_DIR)/usr/bin/neon-config \ + LIBS=$(TARGET_NLS_LIBS) + +define DAVFS2_USERS + davfs2 -1 davfs2 -1 * - - - davfs user +endef + +$(eval $(autotools-package)) diff --git a/package/davici/Config.in b/package/davici/Config.in new file mode 100644 index 00000000..9dfa0ec1 --- /dev/null +++ b/package/davici/Config.in @@ -0,0 +1,18 @@ +comment "davici needs a toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_ATOMIC + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS + +config BR2_PACKAGE_DAVICI + bool "davici" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_HAS_ATOMIC + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_STRONGSWAN + help + davici is an alternative implementation of the VICI + client protocol, targeting better integration in other + software stacks. + + https://github.com/strongswan/davici diff --git a/package/davici/davici.hash b/package/davici/davici.hash new file mode 100644 index 00000000..178d87f2 --- /dev/null +++ b/package/davici/davici.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 d3e5e806ecca841d7e133a3df768062df59f4b4c76bf98e0f90aa8064721b3bd davici-1.3.tar.gz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/davici/davici.mk b/package/davici/davici.mk new file mode 100644 index 00000000..6c8df48b --- /dev/null +++ b/package/davici/davici.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# davici +# +################################################################################ + +DAVICI_VERSION = 1.3 +DAVICI_SITE = $(call github,strongswan,davici,v$(DAVICI_VERSION)) +DAVICI_LICENSE = LGPL-2.1+ +DAVICI_LICENSE_FILES = COPYING +DAVICI_CPE_ID_VENDOR = strongswan +DAVICI_DEPENDENCIES = strongswan +DAVICI_INSTALL_STAGING = YES +DAVICI_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/dawgdic/Config.in b/package/dawgdic/Config.in new file mode 100644 index 00000000..b67342b1 --- /dev/null +++ b/package/dawgdic/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_DAWGDIC + bool "dawgdic" + depends on BR2_INSTALL_LIBSTDCPP + # needs std::strtoll + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_6 + help + dawgdic provides a library for building and accessing + dictionaries implemented with directed acyclic word graphs + (DAWG). A dawg is constructed by minimizing a trie as a + deterministic finite automaton (DFA), and thus the dawg has + an advantage in memory usage. In addition, dawgdic uses a + double-array as a base data structure, so its retrieval + speed is as fast as that of Darts, a library for building + and accessing double-array tries. + + https://github.com/stil/dawgdic + +comment "dawgdic needs a toolchain w/ C++, gcc >= 4.6" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_6 diff --git a/package/dawgdic/dawgdic.hash b/package/dawgdic/dawgdic.hash new file mode 100644 index 00000000..ecf3cf95 --- /dev/null +++ b/package/dawgdic/dawgdic.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 54622a3e79ff3ad2c01a830ec52b997b42ead468b18af5acebab3a4ff32a5ad6 dawgdic-16ac537ba9883ff01b63b6d1fdc3072150c68fee.tar.gz +sha256 3059f68686f1c5bc6ed0e9db415fc257c4e7618b6ac58ecce83986eb8a7cf501 COPYING diff --git a/package/dawgdic/dawgdic.mk b/package/dawgdic/dawgdic.mk new file mode 100644 index 00000000..443782c9 --- /dev/null +++ b/package/dawgdic/dawgdic.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# dawgdic +# +################################################################################ + +DAWGDIC_VERSION = 16ac537ba9883ff01b63b6d1fdc3072150c68fee +DAWGDIC_SITE = $(call github,stil,dawgdic,$(DAWGDIC_VERSION)) +DAWGDIC_LICENSE = BSD-3-Clause +DAWGDIC_LICENSE_FILES = COPYING +DAWGDIC_AUTORECONF = YES +DAWGDIC_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/dbus-cpp/0001-gcc4.7.patch b/package/dbus-cpp/0001-gcc4.7.patch new file mode 100644 index 00000000..ad3046c8 --- /dev/null +++ b/package/dbus-cpp/0001-gcc4.7.patch @@ -0,0 +1,17 @@ +Fix build failure with gcc 4.7+ +From bugtracker: http://sourceforge.net/p/dbus-cplusplus/patches/13/ + +Signed-off-by: Gustavo Zacarias + +diff --git a/include/dbus-c++/eventloop-integration.h b/include/dbus-c++/eventloop-integration.h +index 1b0302e..3e44304 100644 +--- a/include/dbus-c++/eventloop-integration.h ++++ b/include/dbus-c++/eventloop-integration.h +@@ -26,6 +26,7 @@ + #define __DBUSXX_EVENTLOOP_INTEGRATION_H + + #include ++#include + #include "api.h" + #include "dispatcher.h" + #include "util.h" diff --git a/package/dbus-cpp/0002-cross-compile-tools.patch b/package/dbus-cpp/0002-cross-compile-tools.patch new file mode 100644 index 00000000..39eff314 --- /dev/null +++ b/package/dbus-cpp/0002-cross-compile-tools.patch @@ -0,0 +1,34 @@ +tools: just do proper cross-compile + +Those tools are not used during the build; besides, they are installed. + +So they don't need to not be cross-compiled. + +Signed-off-by: "Yann E. MORIN" + +--- +Upstream status: not submitted, upstream is dead. + +diff -durN dbus-cpp-0.9.0.orig/tools/Makefile.am dbus-cpp-0.9.0/tools/Makefile.am +--- dbus-cpp-0.9.0.orig/tools/Makefile.am 2017-03-21 21:48:57.013409423 +0100 ++++ dbus-cpp-0.9.0/tools/Makefile.am 2017-03-21 21:49:35.329979798 +0100 +@@ -1,7 +1,3 @@ +-# hacky, but ... +- +-CXX = $(CXX_FOR_BUILD) +- + AM_CPPFLAGS = \ + $(dbus_CFLAGS) \ + $(xml_CFLAGS) \ +@@ -9,11 +3,7 @@ + -I$(top_builddir)/include \ + -Wall + +-if CROSS_COMPILING +-libdbus_cxx_la = $(BUILD_LIBDBUS_CXX_DIR)/src/libdbus-c++-1.la +-else + libdbus_cxx_la = $(top_builddir)/src/libdbus-c++-1.la +-endif + + bin_PROGRAMS = dbusxx-xml2cpp dbusxx-introspect + diff --git a/package/dbus-cpp/0003-src-pipe.c-fix-build-error-with-gcc-7.x.patch b/package/dbus-cpp/0003-src-pipe.c-fix-build-error-with-gcc-7.x.patch new file mode 100644 index 00000000..6f3e6242 --- /dev/null +++ b/package/dbus-cpp/0003-src-pipe.c-fix-build-error-with-gcc-7.x.patch @@ -0,0 +1,36 @@ +From 167042116f523f90911f3a28c4ec065918d56cc9 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 22 Aug 2017 00:02:52 +0200 +Subject: [PATCH] src/pipe.c: fix build error with gcc 7.x +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The write function takes a char* as argument, not a char. + +Fixes: + +pipe.cpp: In member function ‘void DBus::Pipe::signal()’: +pipe.cpp:86:29: error: invalid conversion from ‘char’ to ‘const void*’ [-fpermissive] + ::write(_fd_write, '\0', 1); + ^ + +Signed-off-by: Thomas Petazzoni +--- + src/pipe.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/pipe.cpp b/src/pipe.cpp +index 01211b3..d0572c7 100644 +--- a/src/pipe.cpp ++++ b/src/pipe.cpp +@@ -83,5 +83,5 @@ ssize_t Pipe::read(void *buffer, unsigned int &nbytes) + void Pipe::signal() + { + // TODO: ignoring return of read/write generates warning; maybe relevant for eventloop work... +- ::write(_fd_write, '\0', 1); ++ ::write(_fd_write, "\0", 1); + } +-- +2.9.4 + diff --git a/package/dbus-cpp/Config.in b/package/dbus-cpp/Config.in new file mode 100644 index 00000000..e90b2114 --- /dev/null +++ b/package/dbus-cpp/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_DBUS_CPP + bool "dbus-c++" + depends on BR2_PACKAGE_DBUS + depends on BR2_TOOLCHAIN_HAS_THREADS # dbus + depends on BR2_USE_MMU # dbus + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_TOOLCHAIN_USES_MUSL # no PTHREAD_RECURSIVE_MUTEX_* + select BR2_PACKAGE_EXPAT + help + dbus-c++ attempts to provide a C++ API for D-BUS. + The library has a glib/gtk and an Ecore mainloop integration. + It also offers an optional own main loop. + + http://sourceforge.net/projects/dbus-cplusplus/ + +comment "dbus-c++ needs a uClibc or glibc toolchain w/ C++, threads" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_DBUS + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS \ + || BR2_TOOLCHAIN_USES_MUSL diff --git a/package/dbus-cpp/dbus-cpp.hash b/package/dbus-cpp/dbus-cpp.hash new file mode 100644 index 00000000..957698b4 --- /dev/null +++ b/package/dbus-cpp/dbus-cpp.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 bc11ac297b3cb010be904c72789695543ee3fdf3d75cdc8225fd371385af4e61 libdbus-c++-0.9.0.tar.gz +sha256 5df07007198989c622f5d41de8d703e7bef3d0e79d62e24332ee739a452af62a COPYING diff --git a/package/dbus-cpp/dbus-cpp.mk b/package/dbus-cpp/dbus-cpp.mk new file mode 100644 index 00000000..d8468ab8 --- /dev/null +++ b/package/dbus-cpp/dbus-cpp.mk @@ -0,0 +1,44 @@ +################################################################################ +# +# dbus-cpp +# +################################################################################ + +DBUS_CPP_VERSION = 0.9.0 +DBUS_CPP_SITE = http://downloads.sourceforge.net/project/dbus-cplusplus/dbus-c++/$(DBUS_CPP_VERSION) +DBUS_CPP_SOURCE = libdbus-c++-$(DBUS_CPP_VERSION).tar.gz +DBUS_CPP_INSTALL_STAGING = YES +# expat is required for the tools irrespective of dbus xml backend +DBUS_CPP_DEPENDENCIES = host-dbus-cpp host-pkgconf dbus expat +HOST_DBUS_CPP_DEPENDENCIES = host-pkgconf host-dbus host-expat +DBUS_CPP_CONF_OPTS = \ + --disable-examples \ + --disable-tests \ + --disable-doxygen-docs \ + --with-build-libdbus-cxx=$(HOST_DBUS_CPP_BUILDDIR) +HOST_DBUS_CPP_CONF_OPTS = \ + --disable-examples \ + --disable-tests \ + --disable-doxygen-docs \ + --disable-ecore \ + --disable-glib +DBUS_CPP_AUTORECONF = YES +DBUS_CPP_LICENSE = LGPL-2.1+ +DBUS_CPP_LICENSE_FILES = COPYING + +ifeq ($(BR2_PACKAGE_EFL),y) +DBUS_CPP_CONF_OPTS += --enable-ecore +DBUS_CPP_DEPENDENCIES += efl +else +DBUS_CPP_CONF_OPTS += --disable-ecore +endif + +ifeq ($(BR2_PACKAGE_LIBGLIB2),y) +DBUS_CPP_CONF_OPTS += --enable-glib +DBUS_CPP_DEPENDENCIES += libglib2 +else +DBUS_CPP_CONF_OPTS += --disable-glib +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/dbus-glib/Config.in b/package/dbus-glib/Config.in new file mode 100644 index 00000000..7fe0ac66 --- /dev/null +++ b/package/dbus-glib/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_DBUS_GLIB + bool "dbus-glib" + depends on BR2_PACKAGE_DBUS + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + select BR2_PACKAGE_LIBGLIB2 + help + GLib bindings for D-Bus. + + http://www.freedesktop.org/software/dbus + +comment "dbus-glib needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_DBUS + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/dbus-glib/dbus-glib.hash b/package/dbus-glib/dbus-glib.hash new file mode 100644 index 00000000..09883243 --- /dev/null +++ b/package/dbus-glib/dbus-glib.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +sha256 7ce4760cf66c69148f6bd6c92feaabb8812dee30846b24cd0f7395c436d7e825 dbus-glib-0.110.tar.gz + +# Locally calculated +sha256 ef1634fc21d9112dca08f2557313584719d534d05213cf14f3c77938506266b4 COPYING diff --git a/package/dbus-glib/dbus-glib.mk b/package/dbus-glib/dbus-glib.mk new file mode 100644 index 00000000..5eb158d9 --- /dev/null +++ b/package/dbus-glib/dbus-glib.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# dbus-glib +# +################################################################################ + +DBUS_GLIB_VERSION = 0.110 +DBUS_GLIB_SITE = http://dbus.freedesktop.org/releases/dbus-glib +DBUS_GLIB_INSTALL_STAGING = YES +DBUS_GLIB_LICENSE = AFL-2.1 or GPL-2.0+ +DBUS_GLIB_LICENSE_FILES = COPYING +DBUS_GLIB_CPE_ID_VENDOR = freedesktop + +DBUS_GLIB_CONF_ENV = \ + ac_cv_have_abstract_sockets=yes \ + ac_cv_func_posix_getpwnam_r=yes \ + have_abstract_sockets=yes + +DBUS_GLIB_CONF_OPTS = \ + --disable-tests \ + --disable-xml-docs \ + --with-introspect-xml=$(DBUS_HOST_INTROSPECT) \ + --with-dbus-binding-tool=$(DBUS_GLIB_HOST_BINARY) \ + --disable-bash-completion \ + --disable-doxygen-docs \ + --enable-asserts=yes + +DBUS_GLIB_DEPENDENCIES = host-pkgconf dbus host-dbus host-dbus-glib libglib2 expat + +HOST_DBUS_GLIB_DEPENDENCIES = host-dbus host-expat host-libglib2 + +HOST_DBUS_GLIB_CONF_OPTS = \ + --disable-tests \ + --disable-xml-docs \ + --disable-bash-completion \ + --disable-doxygen-docs \ + --enable-asserts=yes + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) + +# dbus-glib for the host +DBUS_GLIB_HOST_BINARY = $(HOST_DIR)/bin/dbus-binding-tool diff --git a/package/dbus-python/Config.in b/package/dbus-python/Config.in new file mode 100644 index 00000000..4bfb59ed --- /dev/null +++ b/package/dbus-python/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_DBUS_PYTHON + bool "dbus-python" + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_PACKAGE_DBUS + depends on BR2_PACKAGE_PYTHON || BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_LIBGLIB2 + # pyexpat: runtime dependency only + select BR2_PACKAGE_PYTHON_PYEXPAT if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_PYEXPAT if BR2_PACKAGE_PYTHON3 + help + Python bindings for D-Bus + + http://dbus.freedesktop.org/doc/dbus-python/ + +comment "dbus-python needs a toolchain w/ wchar, threads" + depends on BR2_PACKAGE_DBUS && (BR2_PACKAGE_PYTHON || BR2_PACKAGE_PYTHON3) + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/dbus-python/Config.in.host b/package/dbus-python/Config.in.host new file mode 100644 index 00000000..1e30e0a7 --- /dev/null +++ b/package/dbus-python/Config.in.host @@ -0,0 +1,6 @@ +config BR2_PACKAGE_HOST_DBUS_PYTHON + bool "host dbus-python" + help + Python bindings for D-Bus + + http://dbus.freedesktop.org/doc/dbus-python/ diff --git a/package/dbus-python/dbus-python.hash b/package/dbus-python/dbus-python.hash new file mode 100644 index 00000000..e65695d6 --- /dev/null +++ b/package/dbus-python/dbus-python.hash @@ -0,0 +1,6 @@ +# Locally calculated after checking pgp signature +sha256 11238f1d86c995d8aed2e22f04a1e3779f0d70e587caffeab4857f3c662ed5a4 dbus-python-1.2.16.tar.gz + +# Locally calculated +sha256 1e4562245383fdb5203b1769789e5b28bba21af4923aea7e8b2614f7f93623c0 COPYING +sha256 064523e3ab64d6f03904132b2cc4a1bd8500586edb4cd050c2ff2b96aed4c33b dbus-gmain/COPYING diff --git a/package/dbus-python/dbus-python.mk b/package/dbus-python/dbus-python.mk new file mode 100644 index 00000000..f4b8996d --- /dev/null +++ b/package/dbus-python/dbus-python.mk @@ -0,0 +1,48 @@ +################################################################################ +# +# dbus-python +# +################################################################################ + +DBUS_PYTHON_VERSION = 1.2.16 +DBUS_PYTHON_SITE = http://dbus.freedesktop.org/releases/dbus-python +DBUS_PYTHON_INSTALL_STAGING = YES +DBUS_PYTHON_LICENSE = MIT (dbus-python), AFL-2.1 or GPL-2.0+ (dbus-gmain) +DBUS_PYTHON_LICENSE_FILES = COPYING dbus-gmain/COPYING +DBUS_PYTHON_DEPENDENCIES = dbus libglib2 +HOST_DBUS_PYTHON_DEPENDENCIES = host-dbus host-libglib2 + +ifeq ($(BR2_PACKAGE_PYTHON),y) +DBUS_PYTHON_DEPENDENCIES += python host-python + +DBUS_PYTHON_CONF_ENV += \ + PYTHON=$(HOST_DIR)/bin/python2 \ + PYTHON_INCLUDES="`$(STAGING_DIR)/usr/bin/python2-config --includes`" \ + PYTHON_LIBS="`$(STAGING_DIR)/usr/bin/python2-config --ldflags`" + +HOST_DBUS_PYTHON_DEPENDENCIES += host-python + +HOST_DBUS_PYTHON_CONF_ENV += \ + PYTHON=$(HOST_DIR)/bin/python2 \ + PYTHON_INCLUDES="`$(HOST_DIR)/usr/bin/python2-config --includes`" \ + PYTHON_LIBS="`$(HOST_DIR)/usr/bin/python2-config --ldflags`" +else +DBUS_PYTHON_DEPENDENCIES += python3 host-python3 + +DBUS_PYTHON_CONF_ENV += \ + PYTHON=$(HOST_DIR)/bin/python3 \ + PYTHON_INCLUDES="`$(STAGING_DIR)/usr/bin/python3-config --includes`" \ + PYTHON_LIBS="`$(STAGING_DIR)/usr/bin/python3-config --ldflags`" \ + PYTHON_EXTRA_LIBS="`$(STAGING_DIR)/usr/bin/python3-config --libs --embed`" + +HOST_DBUS_PYTHON_DEPENDENCIES += host-python3 + +HOST_DBUS_PYTHON_CONF_ENV += \ + PYTHON=$(HOST_DIR)/bin/python3 \ + PYTHON_INCLUDES="`$(HOST_DIR)/usr/bin/python3-config --includes`" \ + PYTHON_LIBS="`$(HOST_DIR)/usr/bin/python3-config --ldflags`" \ + PYTHON_EXTRA_LIBS="`$(HOST_DIR)/usr/bin/python3-config --libs --embed`" +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/dbus-triggerd/Config.in b/package/dbus-triggerd/Config.in new file mode 100644 index 00000000..331c4147 --- /dev/null +++ b/package/dbus-triggerd/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_DBUS_TRIGGERD + bool "dbus-triggerd" + depends on BR2_USE_MMU # fork(), dbus + depends on BR2_TOOLCHAIN_HAS_THREADS # dbus + depends on BR2_PACKAGE_DBUS + help + dbus-triggerd is a tool to trigger shell-commands upon + receiving a given dbus-signal. + + http://gareus.org/oss/dbustriggerd/start + +comment "dbus-triggerd needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_DBUS + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/dbus-triggerd/dbus-triggerd.hash b/package/dbus-triggerd/dbus-triggerd.hash new file mode 100644 index 00000000..956a577c --- /dev/null +++ b/package/dbus-triggerd/dbus-triggerd.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 930cccfe8bdff98cab0cff003d90f9421858850d2d00143108191b62b4ef5e5a dbus-triggerd-ba3dbec805cb707c94c54de21666bf18b79bcc09-br1.tar.gz +sha256 30d135650639af9019633690fc1aecbfc150aeeef9446347d4286a58338d10b0 dbus-triggerd.c diff --git a/package/dbus-triggerd/dbus-triggerd.mk b/package/dbus-triggerd/dbus-triggerd.mk new file mode 100644 index 00000000..7d73a6c9 --- /dev/null +++ b/package/dbus-triggerd/dbus-triggerd.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# dbus-triggerd +# +################################################################################ + +DBUS_TRIGGERD_VERSION = ba3dbec805cb707c94c54de21666bf18b79bcc09 +DBUS_TRIGGERD_SITE = git://rg42.org/dbustriggerd.git +DBUS_TRIGGERD_LICENSE = GPL-2.0+ +DBUS_TRIGGERD_LICENSE_FILES = dbus-triggerd.c +DBUS_TRIGGERD_DEPENDENCIES = host-pkgconf dbus + +define DBUS_TRIGGERD_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) all +endef + +define DBUS_TRIGGERD_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) DESTDIR="$(TARGET_DIR)" -C $(@D) install +endef + +$(eval $(generic-package)) diff --git a/package/dbus/Config.in b/package/dbus/Config.in new file mode 100644 index 00000000..5650b577 --- /dev/null +++ b/package/dbus/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_DBUS + bool "dbus" + depends on BR2_TOOLCHAIN_HAS_THREADS + # uses fork() + depends on BR2_USE_MMU + select BR2_PACKAGE_EXPAT + help + The D-Bus message bus system. + + https://www.freedesktop.org/wiki/Software/dbus + +comment "dbus needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/dbus/S30dbus b/package/dbus/S30dbus new file mode 100644 index 00000000..26772755 --- /dev/null +++ b/package/dbus/S30dbus @@ -0,0 +1,71 @@ +#!/bin/sh +# +# messagebus: The D-BUS systemwide message bus +# +# chkconfig: 345 97 03 +# description: This is a daemon which broadcasts notifications of system events \ +# and other messages. See http://www.freedesktop.org/software/dbus/ +# +# processname: dbus-daemon +# pidfile: /run/messagebus.pid +# + +# Create needed directories. +[ -d /run/dbus ] || mkdir -p /run/dbus +[ -d /var/lock/subsys ] || mkdir -p /var/lock/subsys +[ -d /tmp/dbus ] || mkdir -p /tmp/dbus + +RETVAL=0 + +start() { + printf "Starting system message bus: " + + dbus-uuidgen --ensure + dbus-daemon --system + RETVAL=$? + echo "done" + [ $RETVAL -eq 0 ] && touch /var/lock/subsys/dbus-daemon +} + +stop() { + printf "Stopping system message bus: " + + ## we don't want to kill all the per-user $processname, we want + ## to use the pid file *only*; because we use the fake nonexistent + ## program name "$servicename" that should be safe-ish + killall dbus-daemon + RETVAL=$? + echo "done" + if [ $RETVAL -eq 0 ]; then + rm -f /var/lock/subsys/dbus-daemon + rm -f /run/messagebus.pid + fi +} + +# See how we were called. +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + stop + start + ;; + condrestart) + if [ -f /var/lock/subsys/$servicename ]; then + stop + start + fi + ;; + reload) + echo "Message bus can't reload its configuration, you have to restart it" + RETVAL=$? + ;; + *) + echo "Usage: $0 {start|stop|restart|condrestart|reload}" + ;; +esac +exit $RETVAL diff --git a/package/dbus/dbus.hash b/package/dbus/dbus.hash new file mode 100644 index 00000000..06512e56 --- /dev/null +++ b/package/dbus/dbus.hash @@ -0,0 +1,7 @@ +# Locally calculated after checking pgp signature +# https://dbus.freedesktop.org/releases/dbus/dbus-1.12.20.tar.gz.asc +# using key 36EC5A6448A4F5EF79BEFE98E05AE1478F814C4F +sha256 f77620140ecb4cdc67f37fb444f8a6bea70b5b6461f12f1cbe2cec60fa7de5fe dbus-1.12.20.tar.gz + +# Locally calculated +sha256 0e46f54efb12d04ab5c33713bacd0e140c9a35b57ae29e03c853203266e8f3a1 COPYING diff --git a/package/dbus/dbus.mk b/package/dbus/dbus.mk new file mode 100644 index 00000000..d78e1024 --- /dev/null +++ b/package/dbus/dbus.mk @@ -0,0 +1,125 @@ +################################################################################ +# +# dbus +# +################################################################################ + +DBUS_VERSION = 1.12.20 +DBUS_SITE = https://dbus.freedesktop.org/releases/dbus +DBUS_LICENSE = AFL-2.1 or GPL-2.0+ (library, tools), GPL-2.0+ (tools) +DBUS_LICENSE_FILES = COPYING +DBUS_CPE_ID_VENDOR = d-bus_project +DBUS_CPE_ID_PRODUCT = d-bus +DBUS_INSTALL_STAGING = YES + +define DBUS_PERMISSIONS + /usr/libexec/dbus-daemon-launch-helper f 4750 0 dbus - - - - - +endef + +define DBUS_USERS + dbus -1 dbus -1 * /run/dbus - dbus DBus messagebus user +endef + +DBUS_DEPENDENCIES = host-pkgconf expat + +DBUS_SELINUX_MODULES = dbus + +DBUS_CONF_OPTS = \ + --with-dbus-user=dbus \ + --disable-tests \ + --disable-asserts \ + --disable-xml-docs \ + --disable-doxygen-docs \ + --with-system-socket=/run/dbus/system_bus_socket \ + --with-system-pid-file=/run/messagebus.pid + +ifeq ($(BR2_STATIC_LIBS),y) +DBUS_CONF_OPTS += LIBS='-pthread' +endif + +ifeq ($(BR2_microblaze),y) +# microblaze toolchain doesn't provide inotify_rm_* but does have sys/inotify.h +DBUS_CONF_OPTS += --disable-inotify +endif + +ifeq ($(BR2_PACKAGE_LIBSELINUX),y) +DBUS_CONF_OPTS += --enable-selinux +DBUS_DEPENDENCIES += libselinux +else +DBUS_CONF_OPTS += --disable-selinux +endif + +ifeq ($(BR2_PACKAGE_AUDIT)$(BR2_PACKAGE_LIBCAP_NG),yy) +DBUS_CONF_OPTS += --enable-libaudit +DBUS_DEPENDENCIES += audit libcap-ng +else +DBUS_CONF_OPTS += --disable-libaudit +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBX11),y) +DBUS_CONF_OPTS += --with-x +DBUS_DEPENDENCIES += xlib_libX11 +ifeq ($(BR2_PACKAGE_XLIB_LIBSM),y) +DBUS_DEPENDENCIES += xlib_libSM +endif +else +DBUS_CONF_OPTS += --without-x +endif + +ifeq ($(BR2_INIT_SYSTEMD),y) +DBUS_CONF_OPTS += \ + --enable-systemd \ + --with-systemdsystemunitdir=/usr/lib/systemd/system +DBUS_DEPENDENCIES += systemd +else +DBUS_CONF_OPTS += --disable-systemd +endif + +# fix rebuild (dbus makefile errors out if /var/lib/dbus is a symlink) +define DBUS_REMOVE_VAR_LIB_DBUS + rm -rf $(TARGET_DIR)/var/lib/dbus +endef + +DBUS_PRE_INSTALL_TARGET_HOOKS += DBUS_REMOVE_VAR_LIB_DBUS + +define DBUS_REMOVE_DEVFILES + rm -rf $(TARGET_DIR)/usr/lib/dbus-1.0 +endef + +DBUS_POST_INSTALL_TARGET_HOOKS += DBUS_REMOVE_DEVFILES + +define DBUS_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/dbus/S30dbus \ + $(TARGET_DIR)/etc/init.d/S30dbus + + mkdir -p $(TARGET_DIR)/var/lib + rm -rf $(TARGET_DIR)/var/lib/dbus + ln -sf /tmp/dbus $(TARGET_DIR)/var/lib/dbus +endef + +define DBUS_INSTALL_INIT_SYSTEMD + mkdir -p $(TARGET_DIR)/var/lib/dbus + ln -sf /etc/machine-id $(TARGET_DIR)/var/lib/dbus/machine-id +endef + +HOST_DBUS_DEPENDENCIES = host-pkgconf host-expat +HOST_DBUS_CONF_OPTS = \ + --with-dbus-user=dbus \ + --disable-tests \ + --disable-asserts \ + --disable-selinux \ + --disable-xml-docs \ + --disable-doxygen-docs \ + --disable-systemd \ + --without-x + +# dbus for the host +DBUS_HOST_INTROSPECT = $(HOST_DBUS_DIR)/introspect.xml + +HOST_DBUS_GEN_INTROSPECT = \ + $(HOST_DIR)/bin/dbus-daemon --introspect > $(DBUS_HOST_INTROSPECT) + +HOST_DBUS_POST_INSTALL_HOOKS += HOST_DBUS_GEN_INTROSPECT + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/dc3dd/0001-no_man.patch b/package/dc3dd/0001-no_man.patch new file mode 100644 index 00000000..9fefc8ca --- /dev/null +++ b/package/dc3dd/0001-no_man.patch @@ -0,0 +1,15 @@ +Remove the man directory to the subdirs to prevent building the man pages + +Signed-off-by: Benoît Allard + +--- a/Makefile.am 2017-03-27 09:53:19.988820588 +0200 ++++ b/Makefile.am 2017-03-27 09:54:14.325817466 +0200 +@@ -15,7 +15,7 @@ + # You should have received a copy of the GNU General Public License + # along with this program. If not, see . + +-SUBDIRS = lib src man po ++SUBDIRS = lib src po + EXTRA_DIST = cfg.mk maint.mk \ + .prev-version THANKS-to-translators THANKStt.in \ + .version \ diff --git a/package/dc3dd/0002-fix-autoreconf.patch b/package/dc3dd/0002-fix-autoreconf.patch new file mode 100644 index 00000000..85e0a365 --- /dev/null +++ b/package/dc3dd/0002-fix-autoreconf.patch @@ -0,0 +1,32 @@ +Remove use of AM_C_PROTOTYPES to fix autoreconf + +The AM_C_PROTOTYPES macro no longer exists since automake 1.12. It +existed to support de-ANSI-fication of code using ansi2knr. It was +simply removed from coreutils m4/jm-macros.m4 in commit +88873501cff9ed937edf969cedd693517ab0a293, but this change was not +propagated to dc3dd, causing an autoreconf failure: + +configure.ac:45: error: automatic de-ANSI-fication support has been removed +/home/peko/autobuild/instance-0/output/host/usr/share/aclocal-1.15/obsolete.m4:26: AM_C_PROTOTYPES is expanded from... +m4/jm-macros.m4:124: gl_CHECK_ALL_TYPES is expanded from... +m4/jm-macros.m4:22: coreutils_MACROS is expanded from... +configure.ac:45: the top level + +Signed-off-by: Thomas Petazzoni + +Index: b/m4/jm-macros.m4 +=================================================================== +--- a/m4/jm-macros.m4 ++++ b/m4/jm-macros.m4 +@@ -128,11 +128,6 @@ + dnl whether functions and headers are available, whether they work, etc. + AC_REQUIRE([AC_SYS_LARGEFILE]) + +- dnl This test must precede tests of compiler characteristics like +- dnl that for the inline keyword, since it may change the degree to +- dnl which the compiler supports such features. +- AC_REQUIRE([AM_C_PROTOTYPES]) +- + dnl Checks for typedefs, structures, and compiler characteristics. + AC_REQUIRE([AC_C_BIGENDIAN]) + AC_REQUIRE([AC_C_VOLATILE]) diff --git a/package/dc3dd/0003-fix-for-glibc-2.28.patch b/package/dc3dd/0003-fix-for-glibc-2.28.patch new file mode 100644 index 00000000..79e52b1e --- /dev/null +++ b/package/dc3dd/0003-fix-for-glibc-2.28.patch @@ -0,0 +1,87 @@ +Fix build with glibc 2.28 + +glibc 2.28 hides a number of internal macros that used to be visible. gnulib +relied on these macros. Add a patch based on upstream gnulib commit +4af4a4a71827c0 (fflush: adjust to glibc 2.28 libio.h removal) to fix the +build. + +Signed-off-by: Baruch Siach +--- +Upstream status: gnulib commit 4af4a4a7182 + +diff -Nuar dc3dd-7.2.641.orig/lib/freadahead.c dc3dd-7.2.641/lib/freadahead.c +--- dc3dd-7.2.641.orig/lib/freadahead.c 2012-11-06 23:42:58.000000000 +0200 ++++ dc3dd-7.2.641/lib/freadahead.c 2018-10-26 08:46:36.612492230 +0300 +@@ -24,7 +24,7 @@ + size_t + freadahead (FILE *fp) + { +-#if defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ ++#if defined _IO_EOF_SEEN || defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ + if (fp->_IO_write_ptr > fp->_IO_write_base) + return 0; + return (fp->_IO_read_end - fp->_IO_read_ptr) +diff -Nuar dc3dd-7.2.641.orig/lib/freadptr.c dc3dd-7.2.641/lib/freadptr.c +--- dc3dd-7.2.641.orig/lib/freadptr.c 2012-11-06 23:42:58.000000000 +0200 ++++ dc3dd-7.2.641/lib/freadptr.c 2018-10-26 08:36:53.965310494 +0300 +@@ -29,7 +29,7 @@ + size_t size; + + /* Keep this code in sync with freadahead! */ +-#if defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ ++#if defined _IO_EOF_SEEN || defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ + if (fp->_IO_write_ptr > fp->_IO_write_base) + return NULL; + size = fp->_IO_read_end - fp->_IO_read_ptr; +diff -Nuar dc3dd-7.2.641.orig/lib/freadseek.c dc3dd-7.2.641/lib/freadseek.c +--- dc3dd-7.2.641.orig/lib/freadseek.c 2012-11-06 23:42:58.000000000 +0200 ++++ dc3dd-7.2.641/lib/freadseek.c 2018-10-26 08:49:35.387912087 +0300 +@@ -34,7 +34,7 @@ + freadptrinc (FILE *fp, size_t increment) + { + /* Keep this code in sync with freadptr! */ +-#if defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ ++#if defined _IO_EOF_SEEN || defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ + fp->_IO_read_ptr += increment; + #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + fp_->_p += increment; +diff -Nuar dc3dd-7.2.641.orig/lib/fseeko.c dc3dd-7.2.641/lib/fseeko.c +--- dc3dd-7.2.641.orig/lib/fseeko.c 2012-11-06 23:42:58.000000000 +0200 ++++ dc3dd-7.2.641/lib/fseeko.c 2018-10-26 08:51:02.841583936 +0300 +@@ -44,7 +44,7 @@ + #endif + + /* These tests are based on fpurge.c. */ +-#if defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ ++#if defined _IO_EOF_SEEN || defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ + if (fp->_IO_read_end == fp->_IO_read_ptr + && fp->_IO_write_ptr == fp->_IO_write_base + && fp->_IO_save_base == NULL) +diff -Nuar dc3dd-7.2.641.orig/lib/fseterr.c dc3dd-7.2.641/lib/fseterr.c +--- dc3dd-7.2.641.orig/lib/fseterr.c 2012-11-06 23:42:58.000000000 +0200 ++++ dc3dd-7.2.641/lib/fseterr.c 2018-10-26 08:47:51.209919605 +0300 +@@ -29,7 +29,7 @@ + /* Most systems provide FILE as a struct and the necessary bitmask in + , because they need it for implementing getc() and putc() as + fast macros. */ +-#if defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ ++#if defined _IO_EOF_SEEN || defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ + fp->_flags |= _IO_ERR_SEEN; + #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + fp_->_flags |= __SERR; +diff -Nuar dc3dd-7.2.641.orig/lib/stdio-impl.h dc3dd-7.2.641/lib/stdio-impl.h +--- dc3dd-7.2.641.orig/lib/stdio-impl.h 2012-11-06 23:42:58.000000000 +0200 ++++ dc3dd-7.2.641/lib/stdio-impl.h 2018-10-26 08:46:26.136291709 +0300 +@@ -18,6 +18,12 @@ + the same implementation of stdio extension API, except that some fields + have different naming conventions, or their access requires some casts. */ + ++/* Glibc 2.28 made _IO_IN_BACKUP private. For now, work around this ++ problem by defining it ourselves. FIXME: Do not rely on glibc ++ internals. */ ++#if !defined _IO_IN_BACKUP && defined _IO_EOF_SEEN ++# define _IO_IN_BACKUP 0x100 ++#endif + + /* BSD stdio derived implementations. */ + diff --git a/package/dc3dd/Config.in b/package/dc3dd/Config.in new file mode 100644 index 00000000..715451be --- /dev/null +++ b/package/dc3dd/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_DC3DD + bool "dc3dd" + depends on !BR2_RISCV_32 + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_TOOLCHAIN_USES_MUSL + help + dc3dd is a patch to the GNU dd program, this version has + several features intended for forensic acquisition of data. + Highlights include hashing on-the-fly, split output files, + pattern writing, a progress meter, and file verification. + + https://sourceforge.net/projects/dc3dd/ + +comment "dc3dd needs a glibc or uClibc toolchain w/ threads" + depends on !BR2_RISCV_32 + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_TOOLCHAIN_USES_MUSL diff --git a/package/dc3dd/dc3dd.hash b/package/dc3dd/dc3dd.hash new file mode 100644 index 00000000..670bffa7 --- /dev/null +++ b/package/dc3dd/dc3dd.hash @@ -0,0 +1,5 @@ +# From https://sourceforge.net/projects/dc3dd/files/dc3dd/7.2/ +sha1 1bfe81a921a8473a6ecb46f328ecaab761afb55d dc3dd-7.2.641.tar.xz +# Locally computed +sha256 7f50aadc38649845ab11014d11013928411c9d2128c941e9630939d4c28cae6d dc3dd-7.2.641.tar.xz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/dc3dd/dc3dd.mk b/package/dc3dd/dc3dd.mk new file mode 100644 index 00000000..cc89bb63 --- /dev/null +++ b/package/dc3dd/dc3dd.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# dc3dd +# +################################################################################ + +DC3DD_VERSION_MAJOR = 7.2 +DC3DD_VERSION = $(DC3DD_VERSION_MAJOR).641 +DC3DD_SOURCE = dc3dd-$(DC3DD_VERSION).tar.xz +DC3DD_SITE = https://downloads.sourceforge.net/project/dc3dd/dc3dd/$(DC3DD_VERSION_MAJOR) +DC3DD_LICENSE = GPL-3.0+ +DC3DD_LICENSE_FILES = COPYING +# We are patching Makefile.am, so we need to autoreconf. We also need to +# enable gettextize as dc3dd comes with an old gettext infra. +DC3DD_AUTORECONF = YES +DC3DD_GETTEXTIZE = YES + +$(eval $(autotools-package)) diff --git a/package/dcron/0001-main.c-add-newline-to-logfile-openning-error-message.patch b/package/dcron/0001-main.c-add-newline-to-logfile-openning-error-message.patch new file mode 100644 index 00000000..6abc3105 --- /dev/null +++ b/package/dcron/0001-main.c-add-newline-to-logfile-openning-error-message.patch @@ -0,0 +1,27 @@ +From 2710bc67cd920323da9b23a3d60193577bd43d71 Mon Sep 17 00:00:00 2001 +From: Carlos Santos +Date: Sat, 20 Jul 2019 00:27:31 -0300 +Subject: [PATCH] main.c: add newline to logfile openning error message + +Signed-off-by: Carlos Santos +[Upstream status: https://github.com/dubiousjim/dcron/pull/22] +--- + main.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/main.c b/main.c +index 0eba280..2606db8 100644 +--- a/main.c ++++ b/main.c +@@ -261,7 +261,7 @@ main(int ac, char **av) + dup2(fd, 2); + } else { + int n = errno; +- fdprintf(2, "failed to open logfile '%s', reason: %s", LogFile, strerror(n)); ++ fdprintf(2, "failed to open logfile '%s', reason: %s\n", LogFile, strerror(n)); + exit(n); + } + } +-- +2.18.1 + diff --git a/package/dcron/Config.in b/package/dcron/Config.in new file mode 100644 index 00000000..d7f66bdb --- /dev/null +++ b/package/dcron/Config.in @@ -0,0 +1,23 @@ +config BR2_PACKAGE_DCRON + bool "dcron" + depends on BR2_USE_MMU # fork() + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + dcron is a time-based job scheduler with anacron-like + features. It works as a background daemon that parses + individual crontab files and executes commands on behalf of + the users in question. + + Upon installation, this package will enable a system level + cron daemon with hourly, daily, weekly and monthly crontabs. + + However, it doesn't allow non root users to create their own + crontab file. This is because /var/spool/cron/crontabs is + non user writable. + + Typically, a crontab group is created on the system and + users allowed to create crontab entries are added into this + group, while crontab executable is owned by root:crontab + with sgid bit enabled. + + http://www.jimpryor.net/linux/dcron.html diff --git a/package/dcron/S90dcron b/package/dcron/S90dcron new file mode 100644 index 00000000..de21d2ca --- /dev/null +++ b/package/dcron/S90dcron @@ -0,0 +1,22 @@ +#!/bin/sh + +case "$1" in + start) + printf "Starting cron ... " + start-stop-daemon -S -q -m -b -p /var/run/dcron.pid --exec /usr/sbin/crond -- -f + echo "done." + ;; + stop) + printf "Stopping cron ..." + start-stop-daemon -K -q -p /var/run/dcron.pid + echo "done." + ;; + restart) + $0 stop + sleep 1 + $0 start + ;; + *) + echo "usage: $0 {start|stop|restart}" + ;; +esac diff --git a/package/dcron/dcron.hash b/package/dcron/dcron.hash new file mode 100644 index 00000000..35b02eb7 --- /dev/null +++ b/package/dcron/dcron.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 5a53930ba27b57c06c3b03635788cf569990283bde8ea9c1ee820e13f988288d dcron-1ba33c3325df48de46263276a43ed76cf9d81518.tar.gz +sha256 640d90f6ee401241ff62834d0d1b33f83049e99b8bfdfa04ed1b0a1635dde3e7 COPYING diff --git a/package/dcron/dcron.mk b/package/dcron/dcron.mk new file mode 100644 index 00000000..f0c3efbf --- /dev/null +++ b/package/dcron/dcron.mk @@ -0,0 +1,36 @@ +################################################################################ +# +# dcron +# +################################################################################ + +DCRON_VERSION = 1ba33c3325df48de46263276a43ed76cf9d81518 +DCRON_SITE = $(call github,dubiousjim,dcron,$(DCRON_VERSION)) +DCRON_LICENSE = GPL-2.0+ +DCRON_LICENSE_FILES = COPYING + +define DCRON_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) +endef + +define DCRON_INSTALL_TARGET_CMDS + $(INSTALL) -D -m0700 $(@D)/crond $(TARGET_DIR)/usr/sbin/crond + $(INSTALL) -D -m4755 $(@D)/crontab $(TARGET_DIR)/usr/bin/crontab + $(INSTALL) -D -m0644 $(@D)/extra/root.crontab $(TARGET_DIR)/etc/cron.d/system + # Busybox provides run-parts, so there is no need to use nor install provided run-cron + $(SED) 's#/usr/sbin/run-cron#/bin/run-parts#g' $(TARGET_DIR)/etc/cron.d/system + $(INSTALL) -d -m0755 $(TARGET_DIR)/var/spool/cron/crontabs \ + $(TARGET_DIR)/etc/cron.daily $(TARGET_DIR)/etc/cron.hourly \ + $(TARGET_DIR)/etc/cron.monthly $(TARGET_DIR)/etc/cron.weekly +endef + +define DCRON_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/dcron/S90dcron $(TARGET_DIR)/etc/init.d/S90dcron +endef + +define DCRON_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/dcron/dcron.service \ + $(TARGET_DIR)/usr/lib/systemd/system/dcron.service +endef + +$(eval $(generic-package)) diff --git a/package/dcron/dcron.service b/package/dcron/dcron.service new file mode 100644 index 00000000..924ed722 --- /dev/null +++ b/package/dcron/dcron.service @@ -0,0 +1,10 @@ +[Unit] +Description=Task scheduler daemon +After=syslog.target + +[Service] +ExecStart=/usr/sbin/crond -S +Type=forking + +[Install] +WantedBy=multi-user.target diff --git a/package/ddrescue/Config.in b/package/ddrescue/Config.in new file mode 100644 index 00000000..a58561cb --- /dev/null +++ b/package/ddrescue/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_DDRESCUE + bool "ddrescue" + depends on BR2_INSTALL_LIBSTDCPP + help + GNU ddrescue is a data recovery tool. It copies data from one + file or block device (hard disc, cdrom, etc) to another, + trying to rescue the good parts first in case of read errors. + + http://www.gnu.org/software/ddrescue/ddrescue.html + +comment "ddrescue needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/ddrescue/ddrescue.hash b/package/ddrescue/ddrescue.hash new file mode 100644 index 00000000..6877b700 --- /dev/null +++ b/package/ddrescue/ddrescue.hash @@ -0,0 +1,4 @@ +# From https://lists.gnu.org/archive/html/info-gnu/2020-03/msg00002.html +sha256 ce538ebd26a09f45da67d3ad3f7431932428231ceec7a2d255f716fa231a1063 ddrescue-1.25.tar.lz +# Locally computed +sha256 3d77c1a58fbde5ddba612d1fe09965e20a3804953eca12e8c1892298bb8a5eef COPYING diff --git a/package/ddrescue/ddrescue.mk b/package/ddrescue/ddrescue.mk new file mode 100644 index 00000000..f113681f --- /dev/null +++ b/package/ddrescue/ddrescue.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# ddrescue +# +################################################################################ + +DDRESCUE_VERSION = 1.25 +DDRESCUE_SOURCE = ddrescue-$(DDRESCUE_VERSION).tar.lz +DDRESCUE_SITE = http://download.savannah.gnu.org/releases/ddrescue +DDRESCUE_LICENSE = GPL-2.0+ +DDRESCUE_LICENSE_FILES = COPYING + +define DDRESCUE_CONFIGURE_CMDS + (cd $(@D); \ + $(TARGET_MAKE_ENV) ./configure \ + --prefix=/usr \ + $(TARGET_CONFIGURE_OPTS) \ + ) +endef + +DDRESCUE_CXXFLAGS = $(TARGET_CXXFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y) +DDRESCUE_CXXFLAGS += -O0 +endif + +define DDRESCUE_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) CXXFLAGS="$(DDRESCUE_CXXFLAGS)" -C $(@D) +endef + +define DDRESCUE_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR="$(TARGET_DIR)" install +endef + +$(eval $(generic-package)) diff --git a/package/debianutils/Config.in b/package/debianutils/Config.in new file mode 100644 index 00000000..c43f3300 --- /dev/null +++ b/package/debianutils/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_DEBIANUTILS + bool "debianutils" + depends on BR2_USE_MMU # fork() + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + Miscellaneous utilities specific to Debian. + + The specific utilities included are: add-shell installkernel + ischroot remove-shell run-parts savelog tempfile which. + + https://tracker.debian.org/pkg/debianutils diff --git a/package/debianutils/debianutils.hash b/package/debianutils/debianutils.hash new file mode 100644 index 00000000..16a45d4e --- /dev/null +++ b/package/debianutils/debianutils.hash @@ -0,0 +1,4 @@ +# From http://snapshot.debian.org/archive/debian/20200525T145753Z/pool/main/d/debianutils/debianutils_4.11.dsc +sha256 bb5ce6290696b0d623377521ed217f484aa98f7346c5f7c48f9ae3e1acfb7151 debianutils_4.11.tar.xz +# Locally calculated +sha256 3c8b5112cb8f74ba959233291908d73f527afa6f1d96f93649aeb912b5884567 debian/copyright diff --git a/package/debianutils/debianutils.mk b/package/debianutils/debianutils.mk new file mode 100644 index 00000000..d2c41130 --- /dev/null +++ b/package/debianutils/debianutils.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# debianutils +# +################################################################################ + +DEBIANUTILS_VERSION = 4.11 +DEBIANUTILS_SOURCE = debianutils_$(DEBIANUTILS_VERSION).tar.xz +DEBIANUTILS_SITE = http://snapshot.debian.org/archive/debian/20200525T145753Z/pool/main/d/debianutils +DEBIANUTILS_CONF_OPTS = --exec-prefix=/ +DEBIANUTILS_LICENSE = GPL-2.0+, SMAIL (savelog) +DEBIANUTILS_LICENSE_FILES = debian/copyright + +$(eval $(autotools-package)) diff --git a/package/dehydrated/Config.in b/package/dehydrated/Config.in new file mode 100644 index 00000000..979938d7 --- /dev/null +++ b/package/dehydrated/Config.in @@ -0,0 +1,33 @@ +config BR2_PACKAGE_DEHYDRATED + bool "dehydrated" + depends on BR2_USE_MMU # bash + select BR2_PACKAGE_BASH + select BR2_PACKAGE_BUSYBOX_SHOW_OTHERS # bash + select BR2_PACKAGE_LIBCURL + select BR2_PACKAGE_LIBCURL_CURL + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_LIBOPENSSL_BIN if BR2_PACKAGE_LIBOPENSSL + select BR2_PACKAGE_LIBRESSL_BIN if BR2_PACKAGE_LIBRESSL + help + Dehydrated is a client for signing certificates with an + ACME-server (e.g. Let's Encrypt) implemented as a relatively + simple (zsh-compatible) bash-script. This client supports + both ACME v1 and the new ACME v2 including support for + wildcard certificates! + + To use this script in Buildroot: + - Create /etc/dehydrated/domains.txt + - Make sure that "dehydrated -c" is called regularly, e.g. + from cron. + - Make sure /etc/dehydrated is writable. + - Configure the webserver to export the WELLKNOWN directory + (/var/www/dehydrated) as /.well-known/acme-challenge + - Configure the webserver to use the certificates under + /etc/dehydrated/certs/ + - Register a HOOK to reload the webserver after the + certificates have been renewed. + + You probably need to install a custom /etc/dehydrated/config + with the rootfs overlay. + + https://github.com/lukas2511/dehydrated diff --git a/package/dehydrated/dehydrated.hash b/package/dehydrated/dehydrated.hash new file mode 100644 index 00000000..388dd247 --- /dev/null +++ b/package/dehydrated/dehydrated.hash @@ -0,0 +1,6 @@ +# Locally computed after verifying +# https://github.com/lukas2511/dehydrated/releases/download/v0.6.5/dehydrated-0.6.5.tar.gz.asc +# with key 3C2F2605E078A1E18F4793909C4DBE6CF438F333 from https://keybase.io/lukas2511 +sha256 10aabd0027450bc70a18e49acaca7a9697e0cfb92368d3e508b7a4d6d69bfa35 dehydrated-0.6.5.tar.gz +# License, locally computed +sha256 b4583b7dd07e3e2a08906de38e7e329d41f921ed9dcb6310b3886e013a6b8723 LICENSE diff --git a/package/dehydrated/dehydrated.mk b/package/dehydrated/dehydrated.mk new file mode 100644 index 00000000..17c67b84 --- /dev/null +++ b/package/dehydrated/dehydrated.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# dehydrated +# +################################################################################ + +DEHYDRATED_VERSION = 0.6.5 +DEHYDRATED_SITE = https://github.com/lukas2511/dehydrated/releases/download/v$(DEHYDRATED_VERSION) + +DEHYDRATED_LICENSE = MIT +DEHYDRATED_LICENSE_FILES = LICENSE + +define DEHYDRATED_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/dehydrated $(TARGET_DIR)/usr/bin/dehydrated + $(INSTALL) -D -m 0644 $(@D)/docs/examples/config $(TARGET_DIR)/etc/dehydrated/config +endef + +$(eval $(generic-package)) diff --git a/package/dejavu/Config.in b/package/dejavu/Config.in new file mode 100644 index 00000000..5d21e560 --- /dev/null +++ b/package/dejavu/Config.in @@ -0,0 +1,33 @@ +config BR2_PACKAGE_DEJAVU + bool "DejaVu fonts" + help + The DejaVu fonts are a font family based on the Vera Fonts. + Its purpose is to provide a wider range of characters while + maintaining the original look and feel through the process + of collaborative development, under a Free license. + + http://dejavu-fonts.org + +if BR2_PACKAGE_DEJAVU + +config BR2_PACKAGE_DEJAVU_MONO + bool "mono fonts" + default y + +config BR2_PACKAGE_DEJAVU_SANS + bool "sans fonts" + default y + +config BR2_PACKAGE_DEJAVU_SERIF + bool "serif fonts" + default y + +config BR2_PACKAGE_DEJAVU_SANS_CONDENSED + bool "sans condensed fonts" + default y + +config BR2_PACKAGE_DEJAVU_SERIF_CONDENSED + bool "serif condensed fonts" + default y + +endif diff --git a/package/dejavu/dejavu.hash b/package/dejavu/dejavu.hash new file mode 100644 index 00000000..def64cbe --- /dev/null +++ b/package/dejavu/dejavu.hash @@ -0,0 +1,5 @@ +# From https://dejavu-fonts.github.io/Download.html +sha256 fa9ca4d13871dd122f61258a80d01751d603b4d3ee14095d65453b4e846e17d7 dejavu-fonts-ttf-2.37.tar.bz2 + +# locally computed +sha256 7a083b136e64d064794c3419751e5c7dd10d2f64c108fe5ba161eae5e5958a93 LICENSE diff --git a/package/dejavu/dejavu.mk b/package/dejavu/dejavu.mk new file mode 100644 index 00000000..9b57f099 --- /dev/null +++ b/package/dejavu/dejavu.mk @@ -0,0 +1,62 @@ +################################################################################ +# +# dejavu +# +################################################################################ + +DEJAVU_VERSION = 2.37 +DEJAVU_SITE = https://sourceforge.net/projects/dejavu/files/dejavu/$(DEJAVU_VERSION) +DEJAVU_SOURCE = dejavu-fonts-ttf-$(DEJAVU_VERSION).tar.bz2 +DEJAVU_LICENSE_FILES = LICENSE + +DEJAVU_FONTS_INSTALL = +DEJAVU_FONTCONFIG_CONF_INSTALL = + +ifeq ($(BR2_PACKAGE_DEJAVU_MONO),y) +DEJAVU_FONTS_INSTALL += DejaVuSansMono*.ttf +DEJAVU_FONTCONFIG_CONF_INSTALL += \ + 20-unhint-small-dejavu-sans-mono.conf \ + 57-dejavu-sans-mono.conf +endif + +ifeq ($(BR2_PACKAGE_DEJAVU_SANS),y) +DEJAVU_FONTS_INSTALL += DejaVuSans.ttf DejaVuSans-*.ttf +DEJAVU_FONTCONFIG_CONF_INSTALL += \ + 20-unhint-small-dejavu-sans.conf \ + 57-dejavu-sans.conf +endif + +ifeq ($(BR2_PACKAGE_DEJAVU_SERIF),y) +DEJAVU_FONTS_INSTALL += DejaVuSerif.ttf DejaVuSerif-*.ttf +DEJAVU_FONTCONFIG_CONF_INSTALL += \ + 20-unhint-small-dejavu-serif.conf \ + 57-dejavu-serif.conf +endif + +ifeq ($(BR2_PACKAGE_DEJAVU_SANS_CONDENSED),y) +DEJAVU_FONTS_INSTALL += DejaVuSansCondensed*.ttf +endif + +ifeq ($(BR2_PACKAGE_DEJAVU_SERIF_CONDENSED),y) +DEJAVU_FONTS_INSTALL += DejaVuSerifCondensed*.ttf +endif + +ifeq ($(BR2_PACKAGE_FONTCONFIG),y) +define DEJAVU_FONTCONFIG_CONF_INSTALL_CMDS + for i in $(DEJAVU_FONTCONFIG_CONF_INSTALL) ; do \ + $(INSTALL) -D -m 0644 $(@D)/fontconfig/$$i \ + $(TARGET_DIR)/usr/share/fontconfig/conf.avail/$$i || exit 1 ; \ + done +endef +endif + +define DEJAVU_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/usr/share/fonts/dejavu/ + for i in $(DEJAVU_FONTS_INSTALL) ; do \ + $(INSTALL) -m 0644 $(@D)/ttf/$$i \ + $(TARGET_DIR)/usr/share/fonts/dejavu/ || exit 1 ; \ + done + $(DEJAVU_FONTCONFIG_CONF_INSTALL_CMDS) +endef + +$(eval $(generic-package)) diff --git a/package/delve/Config.in b/package/delve/Config.in new file mode 100644 index 00000000..9428e401 --- /dev/null +++ b/package/delve/Config.in @@ -0,0 +1,22 @@ +# Supported architectures are listed in +# pkg/proc/native/support_sentinel.go +config BR2_PACKAGE_DELVE_ARCH_SUPPORTS + bool + default y if BR2_aarch64 + default y if BR2_i386 + default y if BR2_x86_64 + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + +config BR2_PACKAGE_DELVE + bool "delve" + depends on BR2_PACKAGE_DELVE_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Delve is a debugger for the Go programming language. + + https://github.com/go-delve/delve + +comment "delve needs a toolchain w/ threads" + depends on BR2_PACKAGE_DELVE_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/delve/delve.hash b/package/delve/delve.hash new file mode 100644 index 00000000..e8bb9c37 --- /dev/null +++ b/package/delve/delve.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 f8bbaecdfc9d1ff6148900d3dea44b6dd06a7f0197be4e9a75c289b7f62682ab delve-1.5.0.tar.gz +sha256 778864b990007e8cef6633f8c372dd05bac1fada6cf67b008afb1483f83b38f5 LICENSE diff --git a/package/delve/delve.mk b/package/delve/delve.mk new file mode 100644 index 00000000..f574bc5c --- /dev/null +++ b/package/delve/delve.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# delve +# +################################################################################ + +DELVE_VERSION = 1.5.0 +DELVE_SITE = $(call github,go-delve,delve,v$(DELVE_VERSION)) +DELVE_LICENSE = MIT +DELVE_LICENSE_FILES = LICENSE +DELVE_DEPENDENCIES = host-pkgconf + +DELVE_TAGS = cgo +DELVE_BUILD_TARGETS = cmd/dlv +DELVE_INSTALL_BINS = $(notdir $(DELVE_BUILD_TARGETS)) + +$(eval $(golang-package)) diff --git a/package/dfu-util/Config.in b/package/dfu-util/Config.in new file mode 100644 index 00000000..71c1a168 --- /dev/null +++ b/package/dfu-util/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_DFU_UTIL + bool "dfu-util" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + help + Dfu-util is the host side implementation of the DFU 1.0 + specification of the USB forum. DFU is intended to download + and upload firmware to devices connected over USB. + + http://dfu-util.sourceforge.net/ + +comment "dfu-util needs a toolchain w/ threads, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/dfu-util/Config.in.host b/package/dfu-util/Config.in.host new file mode 100644 index 00000000..1bf9275f --- /dev/null +++ b/package/dfu-util/Config.in.host @@ -0,0 +1,12 @@ +config BR2_PACKAGE_HOST_DFU_UTIL + bool "host dfu-util" + depends on BR2_HOST_GCC_AT_LEAST_4_9 # host-libusb + help + Dfu-util is the host side implementation of the DFU 1.0 + specification of the USB forum. DFU is intended to download + and upload firmware to devices connected over USB. + + http://dfu-util.sourceforge.net/ + +comment "host dfu-util needs a toolchain w/ host gcc >= 4.9" + depends on !BR2_HOST_GCC_AT_LEAST_4_9 diff --git a/package/dfu-util/dfu-util.hash b/package/dfu-util/dfu-util.hash new file mode 100644 index 00000000..7c66a933 --- /dev/null +++ b/package/dfu-util/dfu-util.hash @@ -0,0 +1,6 @@ +# From http://dfu-util.sourceforge.net/releases/dfu-util-0.9.tar.gz.md5 +md5 233bb1e08ef4b405062445d84e28fde6 dfu-util-0.9.tar.gz + +# Locally computed +sha256 36428c6a6cb3088cad5a3592933385253da5f29f2effa61518ee5991ea38f833 dfu-util-0.9.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/dfu-util/dfu-util.mk b/package/dfu-util/dfu-util.mk new file mode 100644 index 00000000..5e8ba5a8 --- /dev/null +++ b/package/dfu-util/dfu-util.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# dfu-util +# +################################################################################ + +DFU_UTIL_VERSION = 0.9 +DFU_UTIL_SITE = http://dfu-util.sourceforge.net/releases +DFU_UTIL_LICENSE = GPL-2.0+ +DFU_UTIL_LICENSE_FILES = COPYING + +DFU_UTIL_DEPENDENCIES = libusb +HOST_DFU_UTIL_DEPENDENCIES = host-libusb + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/dhcp/0001-WIP-Resolve-ISC-DHCP-does-not-build-with-gcc10.patch b/package/dhcp/0001-WIP-Resolve-ISC-DHCP-does-not-build-with-gcc10.patch new file mode 100644 index 00000000..ad244267 --- /dev/null +++ b/package/dhcp/0001-WIP-Resolve-ISC-DHCP-does-not-build-with-gcc10.patch @@ -0,0 +1,121 @@ +From 129b7e402bd6e7278854e5a8935fce460552b5f4 Mon Sep 17 00:00:00 2001 +From: Thomas Markwalder +Date: Thu, 30 Jul 2020 10:01:36 -0400 +Subject: [PATCH] [#117] Fixed gcc 10 compilation issues + +client/dhclient.c +relay/dhcrelay.c + extern'ed local_port,remote_port + +common/discover.c + init local_port,remote_port to 0 + +server/mdb.c + extern'ed dhcp_type_host + +server/mdb6.c + create_prefix6() - eliminated memcpy string overflow error + +[Retrieved from: +https://gitlab.isc.org/isc-projects/dhcp/-/merge_requests/60/diffs?commit_id=129b7e402bd6e7278854e5a8935fce460552b5f4] +Signed-off-by: Fabrice Fontaine +--- + RELNOTES | 5 +++++ + client/dhclient.c | 5 +++-- + common/discover.c | 4 ++-- + relay/dhcrelay.c | 4 ++-- + server/mdb.c | 2 +- + server/mdb6.c | 2 +- + 6 files changed, 14 insertions(+), 8 deletions(-) + +diff --git a/RELNOTES b/RELNOTES +index 9d0a0414..6919dba7 100644 +--- a/RELNOTES ++++ b/RELNOTES +@@ -103,6 +103,11 @@ ISC DHCP is open source software maintained by Internet Systems + Consortium. This product includes cryptographic software written + by Eric Young (eay@cryptsoft.com). + ++ Changes since 4.4.2 (Bug Fixes) ++ ++- Minor corrections to allow compilation under gcc 10. ++ [Gitlab #117] ++ + Changes since 4.4.2b1 (Bug Fixes) + + - Added a clarification on DHCPINFORMs and server authority to +diff --git a/client/dhclient.c b/client/dhclient.c +index 189e5270..7a7837cb 100644 +--- a/client/dhclient.c ++++ b/client/dhclient.c +@@ -83,8 +83,9 @@ static const char message [] = "Internet Systems Consortium DHCP Client"; + static const char url [] = "For info, please visit https://www.isc.org/software/dhcp/"; + #endif /* UNIT_TEST */ + +-u_int16_t local_port = 0; +-u_int16_t remote_port = 0; ++extern u_int16_t local_port; ++extern u_int16_t remote_port; ++ + #if defined(DHCPv6) && defined(DHCP4o6) + int dhcp4o6_state = -1; /* -1 = stopped, 0 = polling, 1 = started */ + #endif +diff --git a/common/discover.c b/common/discover.c +index ca4f4d55..22f09767 100644 +--- a/common/discover.c ++++ b/common/discover.c +@@ -45,8 +45,8 @@ struct interface_info *fallback_interface = 0; + + int interfaces_invalidated; + int quiet_interface_discovery; +-u_int16_t local_port; +-u_int16_t remote_port; ++u_int16_t local_port = 0; ++u_int16_t remote_port = 0; + u_int16_t relay_port = 0; + int dhcpv4_over_dhcpv6 = 0; + int (*dhcp_interface_setup_hook) (struct interface_info *, struct iaddr *); +diff --git a/relay/dhcrelay.c b/relay/dhcrelay.c +index 883d5058..7211e3bb 100644 +--- a/relay/dhcrelay.c ++++ b/relay/dhcrelay.c +@@ -95,8 +95,8 @@ enum { forward_and_append, /* Forward and append our own relay option. */ + forward_untouched, /* Forward without changes. */ + discard } agent_relay_mode = forward_and_replace; + +-u_int16_t local_port; +-u_int16_t remote_port; ++extern u_int16_t local_port; ++extern u_int16_t remote_port; + + /* Relay agent server list. */ + struct server_list { +diff --git a/server/mdb.c b/server/mdb.c +index ff8a707f..8266d764 100644 +--- a/server/mdb.c ++++ b/server/mdb.c +@@ -67,7 +67,7 @@ static host_id_info_t *host_id_info = NULL; + + int numclasseswritten; + +-omapi_object_type_t *dhcp_type_host; ++extern omapi_object_type_t *dhcp_type_host; + + isc_result_t enter_class(cd, dynamicp, commit) + struct class *cd; +diff --git a/server/mdb6.c b/server/mdb6.c +index da7baf6e..ebe01e56 100644 +--- a/server/mdb6.c ++++ b/server/mdb6.c +@@ -1945,7 +1945,7 @@ create_prefix6(struct ipv6_pool *pool, struct iasubopt **pref, + } + new_ds.data = new_ds.buffer->data; + memcpy(new_ds.buffer->data, ds.data, ds.len); +- memcpy(new_ds.buffer->data + ds.len, &tmp, sizeof(tmp)); ++ memcpy(&new_ds.buffer->data[0] + ds.len, &tmp, sizeof(tmp)); + data_string_forget(&ds, MDL); + data_string_copy(&ds, &new_ds, MDL); + data_string_forget(&new_ds, MDL); +-- +GitLab + diff --git a/package/dhcp/Config.in b/package/dhcp/Config.in new file mode 100644 index 00000000..59db13f5 --- /dev/null +++ b/package/dhcp/Config.in @@ -0,0 +1,51 @@ +config BR2_PACKAGE_DHCP + bool "dhcp (ISC)" + # fork() + depends on BR2_USE_MMU + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + select BR2_PACKAGE_BIND + help + DHCP relay agent from the ISC DHCP distribution. + + https://www.isc.org/downloads/dhcp/ + +if BR2_PACKAGE_DHCP + +config BR2_PACKAGE_DHCP_SERVER + bool "dhcp server" + select BR2_PACKAGE_SYSTEMD_TMPFILES if BR2_PACKAGE_SYSTEMD + help + DHCP server from the ISC DHCP distribution. + + This also installs omshell, an interactive tool to connect to, + query, and possibly change, the server's state via the Object + Management API (OMAPI). + +config BR2_PACKAGE_DHCP_SERVER_DELAYED_ACK + bool "Enable delayed ACK feature" + depends on BR2_PACKAGE_DHCP_SERVER + help + Enable delayed ACK feature in the ISC DHCP server. + +config BR2_PACKAGE_DHCP_SERVER_SYSTEMD_ENABLE + bool "dhcp server enable in systemd" + depends on BR2_PACKAGE_DHCP_SERVER + depends on BR2_INIT_SYSTEMD + default n + help + dhcpd if enable in systemd just will start when boot + but if you not setup dhcpd that you will get multi dhcpd start error report + so should systemd dont enable dhcpd + and you should start dhcpd by your way + +config BR2_PACKAGE_DHCP_RELAY + bool "dhcp relay" + help + DHCP relay agent from the ISC DHCP distribution. + +config BR2_PACKAGE_DHCP_CLIENT + bool "dhcp client" + help + DHCP client from the ISC DHCP distribution. + +endif diff --git a/package/dhcp/S80dhcp-relay b/package/dhcp/S80dhcp-relay new file mode 100644 index 00000000..211431bf --- /dev/null +++ b/package/dhcp/S80dhcp-relay @@ -0,0 +1,53 @@ +#!/bin/sh +# +# $Id: dhcp3-relay,v 1.1 2004/04/16 15:41:08 ml Exp $ +# + +# What servers should the DHCP relay forward requests to? +# e.g: SERVERS="192.168.0.1" +SERVERS="" + +# On what interfaces should the DHCP relay (dhrelay) serve DHCP requests? +INTERFACES="" + +# Additional options that are passed to the DHCP relay daemon? +OPTIONS="" + +# Read configuration variable file if it is present +CFG_FILE="/etc/default/dhcrelay" +[ -r "${CFG_FILE}" ] && . "${CFG_FILE}" + +# Sanity checks +test -f /usr/sbin/dhcrelay || exit 0 +test -n "$INTERFACES" || exit 0 +test -n "$SERVERS" || exit 0 + +# Build command line for interfaces (will be passed to dhrelay below.) +IFCMD="" +for I in $INTERFACES; do + IFCMD=${IFCMD}"-i "${I}" " +done + +DHCRELAYPID=/var/run/dhcrelay.pid + +case "$1" in + start) + printf "Starting DHCP relay: " + start-stop-daemon -S -q -x /usr/sbin/dhcrelay -- -q $OPTIONS $IFCMD $SERVERS + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + stop) + printf "Stopping DHCP relay: " + start-stop-daemon -K -q -x /usr/sbin/dhcrelay + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + restart | force-reload) + $0 stop + $0 start + ;; + *) + echo "Usage: $0 {start|stop|restart|force-reload}" + exit 1 +esac + +exit 0 diff --git a/package/dhcp/S80dhcp-server b/package/dhcp/S80dhcp-server new file mode 100644 index 00000000..21092bab --- /dev/null +++ b/package/dhcp/S80dhcp-server @@ -0,0 +1,49 @@ +#!/bin/sh +# +# $Id: dhcp3-server.init.d,v 1.4 2003/07/13 19:12:41 mdz Exp $ +# + +# On what interfaces should the DHCP server (dhcpd) serve DHCP requests? +# Separate multiple interfaces with spaces, e.g. "eth0 eth1". +INTERFACES="" + +# Additional options that are passed to the DHCP server daemon? +OPTIONS="" + +NAME="dhcpd" +DAEMON="/usr/sbin/${NAME}" +CFG_FILE="/etc/default/${NAME}" + +# Read configuration variable file if it is present +[ -r "${CFG_FILE}" ] && . "${CFG_FILE}" + +# Sanity checks +test -f /usr/sbin/dhcpd || exit 0 +test -f /etc/dhcp/dhcpd.conf || exit 0 + +case "$1" in + start) + printf "Starting DHCP server: " + test -d /var/lib/dhcp/ || mkdir -p /var/lib/dhcp/ + test -f /var/lib/dhcp/dhcpd.leases || touch /var/lib/dhcp/dhcpd.leases + start-stop-daemon -S -q -x ${DAEMON} -- -q $OPTIONS $INTERFACES + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + stop) + printf "Stopping DHCP server: " + start-stop-daemon -K -q -x ${DAEMON} + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + restart | force-reload) + $0 stop + $0 start + if [ "$?" != "0" ]; then + exit 1 + fi + ;; + *) + echo "Usage: $0 {start|stop|restart|force-reload}" + exit 1 +esac + +exit 0 diff --git a/package/dhcp/dhclient-script b/package/dhcp/dhclient-script new file mode 100755 index 00000000..cb292b6f --- /dev/null +++ b/package/dhcp/dhclient-script @@ -0,0 +1,284 @@ +#!/bin/sh + +# dhclient-script from OpenWRT project +# http://git.openwrt.org/?p=packages.git;a=blob;f=net/isc-dhcp/files/dhclient-script;h=4afebc0ad20ebac51c5baae5ed01c6713e3a0fd0;hb=HEAD + +make_resolv_conf() { + if [ x"$new_domain_name_servers" != x ]; then + cat /dev/null > /etc/resolv.conf.dhclient + chmod 644 /etc/resolv.conf.dhclient + if [ x"$new_domain_search" != x ]; then + echo search $new_domain_search >> /etc/resolv.conf.dhclient + elif [ x"$new_domain_name" != x ]; then + # Note that the DHCP 'Domain Name Option' is really just a domain + # name, and that this practice of using the domain name option as + # a search path is both nonstandard and deprecated. + echo search $new_domain_name >> /etc/resolv.conf.dhclient + fi + for nameserver in $new_domain_name_servers; do + echo nameserver $nameserver >>/etc/resolv.conf.dhclient + done + + elif [ "x${new_dhcp6_name_servers}" != x ] ; then + cat /dev/null > /etc/resolv.conf.dhclient6 + chmod 644 /etc/resolv.conf.dhclient6 + + if [ "x${new_dhcp6_domain_search}" != x ] ; then + echo search ${new_dhcp6_domain_search} >> /etc/resolv.conf.dhclient6 + fi + for nameserver in ${new_dhcp6_name_servers} ; do + echo nameserver ${nameserver} >> /etc/resolv.conf.dhclient6 + done + fi + + # if both v4 and v6 clients are running, concatenate results + cat /etc/resolv.conf.* > /etc/resolv.conf +} + +# Must be used on exit. Invokes the local dhcp client exit hooks, if any. +exit_with_hooks() { + exit_status=$1 + if [ -f /etc/dhclient-exit-hooks ]; then + . /etc/dhclient-exit-hooks + fi +# probably should do something with exit status of the local script + exit $exit_status +} + +# Invoke the local dhcp client enter hooks, if they exist. +if [ -f /etc/dhclient-enter-hooks ]; then + exit_status=0 + . /etc/dhclient-enter-hooks + # allow the local script to abort processing of this state + # local script must set exit_status variable to nonzero. + if [ $exit_status -ne 0 ]; then + exit $exit_status + fi +fi + +### +### DHCPv4 Handlers +### + +if [ x$new_broadcast_address != x ]; then + new_broadcast_arg="broadcast $new_broadcast_address" +fi +if [ x$new_subnet_mask != x ]; then + new_subnet_arg="netmask $new_subnet_mask" +fi +if [ x$alias_subnet_mask != x ]; then + alias_subnet_arg="netmask $alias_subnet_mask" +fi + +if [ x$reason = xMEDIUM ]; then + # Linux doesn't do mediums (ok, ok, media). + exit_with_hooks 0 +fi + +if [ x$reason = xPREINIT ]; then + if [ x$alias_ip_address != x ]; then + # Bring down alias interface. Its routes will disappear too. + ifconfig $interface:0- 0.0.0.0 + fi + ifconfig $interface 0.0.0.0 up + + # We need to give the kernel some time to get the interface up. + sleep 1 + + exit_with_hooks 0 +fi + +if [ x$reason = xARPCHECK ] || [ x$reason = xARPSEND ]; then + exit_with_hooks 0 +fi + +if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || \ + [ x$reason = xREBIND ] || [ x$reason = xREBOOT ]; then + current_hostname=`hostname` + if [ x$current_hostname = x ] || \ + [ x$current_hostname = x$old_host_name ]; then + if [ x$current_hostname = x ] || \ + [ x$new_host_name != x$old_host_name ]; then + hostname $new_host_name + fi + fi + + if [ x$old_ip_address != x ] && [ x$alias_ip_address != x ] && \ + [ x$alias_ip_address != x$old_ip_address ]; then + # Possible new alias. Remove old alias. + ifconfig $interface:0- 0.0.0.0 + fi + if [ x$old_ip_address != x ] && [ x$old_ip_address != x$new_ip_address ]; then + # IP address changed. Bringing down the interface will delete all routes, + # and clear the ARP cache. + ifconfig $interface 0.0.0.0 down + + fi + if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \ + [ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then + + ifconfig $interface $new_ip_address $new_subnet_arg \ + $new_broadcast_arg + for router in $new_routers; do + if [ "x$new_subnet_mask" = "x255.255.255.255" ] ; then + route add -host $router dev $interface + fi + route add default gw $router + done + fi + if [ x$new_ip_address != x$alias_ip_address ] && [ x$alias_ip_address != x ]; + then + ifconfig $interface:0- 0.0.0.0 + ifconfig $interface:0 $alias_ip_address $alias_subnet_arg + route add -host $alias_ip_address $interface:0 + fi + make_resolv_conf + exit_with_hooks 0 +fi + +if [ x$reason = xEXPIRE ] || [ x$reason = xFAIL ] || [ x$reason = xRELEASE ] \ + || [ x$reason = xSTOP ]; then + if [ x$alias_ip_address != x ]; then + # Turn off alias interface. + ifconfig $interface:0- 0.0.0.0 + fi + if [ x$old_ip_address != x ]; then + # Shut down interface, which will delete routes and clear arp cache. + ifconfig $interface 0.0.0.0 down + fi + if [ x$alias_ip_address != x ]; then + ifconfig $interface:0 $alias_ip_address $alias_subnet_arg + route add -host $alias_ip_address $interface:0 + fi + + # remove v4 dns configuration for this interface + rm /etc/resolv.conf.dhclient + cat /etc/resolv.conf.* > /etc/resolv.conf + + exit_with_hooks 0 +fi + +if [ x$reason = xTIMEOUT ]; then + if [ x$alias_ip_address != x ]; then + ifconfig $interface:0- 0.0.0.0 + fi + ifconfig $interface $new_ip_address $new_subnet_arg \ + $new_broadcast_arg + set $new_routers + if ping -q -c 1 $1; then + if [ x$new_ip_address != x$alias_ip_address ] && \ + [ x$alias_ip_address != x ]; then + ifconfig $interface:0 $alias_ip_address $alias_subnet_arg + route add -host $alias_ip_address dev $interface:0 + fi + for router in $new_routers; do + if [ "x$new_subnet_mask" = "x255.255.255.255" ] ; then + route add -host $router dev $interface + fi + route add default gw $router + done + make_resolv_conf + exit_with_hooks 0 + fi + ifconfig $interface 0.0.0.0 down + exit_with_hooks 1 +fi + +### +### DHCPv6 Handlers +### + +if [ x$reason = xPREINIT6 ]; then + # Ensure interface is up. + ifconfig ${interface} up + + # Remove any stale addresses from aborted clients. + ip -f inet6 addr flush dev ${interface} scope global + + exit_with_hooks 0 +fi + +if [ x${old_ip6_prefix} != x ] || [ x${new_ip6_prefix} != x ] ; then + echo Prefix ${reason} old=${old_ip6_prefix} new=${new_ip6_prefix} + + exit_with_hooks 0 +fi + +if [ x$reason = xBOUND6 ]; then + if [ x${new_ip6_address} = x ] || [ x${new_ip6_prefixlen} = x ] ; then + exit_with_hooks 2; + fi + + ifconfig ${interface} add ${new_ip6_address}/${new_ip6_prefixlen} + + # Check for nameserver options. + make_resolv_conf + +### << + # Set up softwire tunnel + if [ x${new_dhcp6_softwire} != x ] ; then + /etc/init.d/dhclient stop + ifconfig ${interface} 0.0.0.0 + ip -6 tunnel add tun0 mode ipip6 \ + remote ${new_dhcp6_softwire} \ + local ${new_ip6_address} \ + dev ${interface} encaplimit none + ip link set tun0 up + ip route add default dev tun0 + fi +### >> + + exit_with_hooks 0 +fi + +if [ x$reason = xRENEW6 ] || [ x$reason = xREBIND6 ]; then + if [ x${new_ip6_address} = x ] || [ x${new_ip6_prefixlen} = x ] ; then + exit_with_hooks 2; + fi + + ifconfig ${interface} add ${new_ip6_address}/${new_ip6_prefixlen} + + # Make sure nothing has moved around on us. + + # Nameservers/domains/etc. + if [ "x${new_dhcp6_name_servers}" != "x${old_dhcp6_name_servers}" ] || + [ "x${new_dhcp6_domain_search}" != "x${old_dhcp6_domain_search}" ] ; then + make_resolv_conf + fi + + exit_with_hooks 0 +fi + +if [ x$reason = xDEPREF6 ]; then + if [ x${new_ip6_address} = x ] ; then + exit_with_hooks 2; + fi + + # Busybox ifconfig has no way to communicate this to the kernel, so ignore it + + exit_with_hooks 0 +fi + +if [ x$reason = xEXPIRE6 -o x$reason = xRELEASE6 -o x$reason = xSTOP6 ]; then + if [ x${old_ip6_address} = x ] || [ x${old_ip6_prefixlen} = x ] ; then + exit_with_hooks 2; + fi + + ifconfig ${interface} del ${old_ip6_address}/${old_ip6_prefixlen} + + # remove v6 dns configuration for this interface + rm /etc/resolv.conf.dhclient6 + cat /etc/resolv.conf.* > /etc/resolv.conf + +### << + # Tear down softwire tunnel + if [ x${old_dhcp6_softwire} != x ] ; then + ip link set tun0 down + ip tunnel del tun0 + fi +### >> + + exit_with_hooks 0 +fi + +exit_with_hooks 0 diff --git a/package/dhcp/dhclient.conf b/package/dhcp/dhclient.conf new file mode 100644 index 00000000..0e6dcf96 --- /dev/null +++ b/package/dhcp/dhclient.conf @@ -0,0 +1,50 @@ +# Configuration file for /sbin/dhclient, which is included in Debian's +# dhcp3-client package. +# +# This is a sample configuration file for dhclient. See dhclient.conf's +# man page for more information about the syntax of this file +# and a more comprehensive list of the parameters understood by +# dhclient. +# +# Normally, if the DHCP server provides reasonable information and does +# not leave anything out (like the domain name, for example), then +# few changes must be made to this file, if any. +# + +#send host-name "andare.fugue.com"; +#send dhcp-client-identifier 1:0:a0:24:ab:fb:9c; +#send dhcp-lease-time 3600; +#supersede domain-name "fugue.com home.vix.com"; +#prepend domain-name-servers 127.0.0.1; +request subnet-mask, broadcast-address, time-offset, routers, + domain-name, domain-name-servers, host-name, + netbios-name-servers, netbios-scope; +#require subnet-mask, domain-name-servers; +#timeout 60; +#retry 60; +#reboot 10; +#select-timeout 5; +#initial-interval 2; +#script "/etc/dhcp3/dhclient-script"; +#media "-link0 -link1 -link2", "link0 link1"; +#reject 192.33.137.209; + +#alias { +# interface "eth0"; +# fixed-address 192.5.5.213; +# option subnet-mask 255.255.255.255; +#} + +#lease { +# interface "eth0"; +# fixed-address 192.33.137.200; +# medium "link0 link1"; +# option host-name "andare.swiftmedia.com"; +# option subnet-mask 255.255.255.0; +# option broadcast-address 192.33.137.255; +# option routers 192.33.137.250; +# option domain-name-servers 127.0.0.1; +# renew 2 2000/1/12 00:00:01; +# rebind 2 2000/1/12 00:00:01; +# expire 2 2000/1/12 00:00:01; +#} diff --git a/package/dhcp/dhcp.hash b/package/dhcp/dhcp.hash new file mode 100644 index 00000000..ec7c4fe5 --- /dev/null +++ b/package/dhcp/dhcp.hash @@ -0,0 +1,4 @@ +# Verified from https://ftp.isc.org/isc/dhcp/4.4.2-P1/dhcp-4.4.2-P1.tar.gz.sha256.asc +sha256 b05e04337539545a8faa0d6ac518defc61a07e5aec66a857f455e7f218c85a1a dhcp-4.4.2-P1.tar.gz +# Locally calculated +sha256 9961fce0d83a6229b9084cdadedfa723a53274c63af610c9adb61b607e0f5a76 LICENSE diff --git a/package/dhcp/dhcp.mk b/package/dhcp/dhcp.mk new file mode 100644 index 00000000..b2f3552e --- /dev/null +++ b/package/dhcp/dhcp.mk @@ -0,0 +1,124 @@ +################################################################################ +# +# dhcp +# +################################################################################ + +DHCP_VERSION = 4.4.2-P1 +DHCP_SITE = http://ftp.isc.org/isc/dhcp/$(DHCP_VERSION) +DHCP_INSTALL_STAGING = YES +DHCP_LICENSE = MPL-2.0 +DHCP_LICENSE_FILES = LICENSE +DHCP_DEPENDENCIES = bind host-gawk +DHCP_CPE_ID_VENDOR = isc + +# use libtool-enabled configure.ac +define DHCP_LIBTOOL_AUTORECONF + cp $(@D)/configure.ac+lt $(@D)/configure.ac +endef + +DHCP_CONF_ENV = \ + CPPFLAGS='-D_PATH_DHCPD_CONF=\"/etc/dhcp/dhcpd.conf\" \ + -D_PATH_DHCLIENT_CONF=\"/etc/dhcp/dhclient.conf\"' \ + CFLAGS='$(TARGET_CFLAGS) -DISC_CHECK_NONE=1' + +DHCP_CONF_ENV += ac_cv_prog_AWK=$(HOST_DIR)/bin/gawk + +DHCP_CONF_OPTS = \ + --with-libbind=$(STAGING_DIR)/usr \ + --with-randomdev=/dev/random \ + --with-srv-lease-file=/var/lib/dhcp/dhcpd.leases \ + --with-srv6-lease-file=/var/lib/dhcp/dhcpd6.leases \ + --with-cli-lease-file=/var/lib/dhcp/dhclient.leases \ + --with-cli6-lease-file=/var/lib/dhcp/dhclient6.leases \ + --with-srv-pid-file=/var/run/dhcpd.pid \ + --with-srv6-pid-file=/var/run/dhcpd6.pid \ + --with-cli-pid-file=/var/run/dhclient.pid \ + --with-cli6-pid-file=/var/run/dhclient6.pid \ + --with-relay-pid-file=/var/run/dhcrelay.pid \ + --with-relay6-pid-file=/var/run/dhcrelay6.pid + +ifeq ($(BR2_STATIC_LIBS),y) +DHCP_CONF_ENV += LIBS="`$(STAGING_DIR)/usr/bin/bind9-config --libs bind9`" +DHCP_CONF_OPTS += --disable-libtool +else +DHCP_POST_EXTRACT_HOOKS += DHCP_LIBTOOL_AUTORECONF +DHCP_AUTORECONF = YES +DHCP_CONF_OPTS += --enable-libtool +endif + +ifeq ($(BR2_PACKAGE_DHCP_SERVER_DELAYED_ACK),y) +DHCP_CONF_OPTS += --enable-delayed-ack +endif + +define DHCP_INSTALL_LIBS + $(MAKE) -C $(@D)/common install-exec DESTDIR=$(TARGET_DIR) + $(MAKE) -C $(@D)/omapip install-exec DESTDIR=$(TARGET_DIR) +endef + +ifeq ($(BR2_PACKAGE_DHCP_SERVER),y) +define DHCP_INSTALL_CTL_LIBS + $(MAKE) -C $(@D)/dhcpctl install-exec DESTDIR=$(TARGET_DIR) +endef +define DHCP_INSTALL_SERVER + mkdir -p $(TARGET_DIR)/var/lib + (cd $(TARGET_DIR)/var/lib; ln -snf /tmp dhcp) + $(MAKE) -C $(@D)/server DESTDIR=$(TARGET_DIR) install-sbinPROGRAMS + $(INSTALL) -m 0644 -D package/dhcp/dhcpd.conf \ + $(TARGET_DIR)/etc/dhcp/dhcpd.conf +endef +endif + +ifeq ($(BR2_PACKAGE_DHCP_RELAY),y) +define DHCP_INSTALL_RELAY + mkdir -p $(TARGET_DIR)/var/lib + (cd $(TARGET_DIR)/var/lib; ln -snf /tmp dhcp) + $(MAKE) -C $(@D)/relay DESTDIR=$(TARGET_DIR) install-sbinPROGRAMS +endef +endif + +ifeq ($(BR2_PACKAGE_DHCP_CLIENT),y) +define DHCP_INSTALL_CLIENT + mkdir -p $(TARGET_DIR)/var/lib + (cd $(TARGET_DIR)/var/lib; ln -snf /tmp dhcp) + $(MAKE) -C $(@D)/client DESTDIR=$(TARGET_DIR) sbindir=/sbin \ + install-sbinPROGRAMS + $(INSTALL) -m 0644 -D package/dhcp/dhclient.conf \ + $(TARGET_DIR)/etc/dhcp/dhclient.conf + $(INSTALL) -m 0755 -D package/dhcp/dhclient-script \ + $(TARGET_DIR)/sbin/dhclient-script +endef +endif + +# Options don't matter, scripts won't start if binaries aren't there +define DHCP_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/dhcp/S80dhcp-server \ + $(TARGET_DIR)/etc/init.d/S80dhcp-server + $(INSTALL) -m 0755 -D package/dhcp/S80dhcp-relay \ + $(TARGET_DIR)/etc/init.d/S80dhcp-relay +endef + +ifeq ($(BR2_PACKAGE_DHCP_SERVER),y) +ifeq ($(BR2_PACKAGE_DHCP_SERVER_SYSTEMD_ENABLE), y) +define DHCP_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/dhcp/dhcpd.service \ + $(TARGET_DIR)/usr/lib/systemd/system/dhcpd.service + + mkdir -p $(TARGET_DIR)/usr/lib/tmpfiles.d + echo "d /var/lib/dhcp 0755 - - - -" > \ + $(TARGET_DIR)/usr/lib/tmpfiles.d/dhcpd.conf + echo "f /var/lib/dhcp/dhcpd.leases - - - - -" >> \ + $(TARGET_DIR)/usr/lib/tmpfiles.d/dhcpd.conf +endef +endif +endif + +define DHCP_INSTALL_TARGET_CMDS + $(DHCP_INSTALL_LIBS) + $(DHCP_INSTALL_CTL_LIBS) + $(DHCP_INSTALL_RELAY) + $(DHCP_INSTALL_SERVER) + $(DHCP_INSTALL_CLIENT) +endef + +$(eval $(autotools-package)) diff --git a/package/dhcp/dhcpd.conf b/package/dhcp/dhcpd.conf new file mode 100644 index 00000000..0001c0f0 --- /dev/null +++ b/package/dhcp/dhcpd.conf @@ -0,0 +1,108 @@ +# +# Sample configuration file for ISC dhcpd for Debian +# +# $Id: dhcpd.conf,v 1.1.1.1 2002/05/21 00:07:44 peloy Exp $ +# + +# The ddns-updates-style parameter controls whether or not the server will +# attempt to do a DNS update when a lease is confirmed. We default to the +# behavior of the version 2 packages ('none', since DHCP v2 didn't +# have support for DDNS.) +ddns-update-style none; + +# option definitions common to all supported networks... +option domain-name "example.org"; +option domain-name-servers ns1.example.org, ns2.example.org; + +default-lease-time 600; +max-lease-time 7200; + +# If this DHCP server is the official DHCP server for the local +# network, the authoritative directive should be uncommented. +#authoritative; + +# Use this to send dhcp log messages to a different log file (you also +# have to hack syslog.conf to complete the redirection). +log-facility local7; + +# No service will be given on this subnet, but declaring it helps the +# DHCP server to understand the network topology. + +#subnet 10.152.187.0 netmask 255.255.255.0 { +#} + +# This is a very basic subnet declaration. + +#subnet 10.254.239.0 netmask 255.255.255.224 { +# range 10.254.239.10 10.254.239.20; +# option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org; +#} + +# This declaration allows BOOTP clients to get dynamic addresses, +# which we don't really recommend. + +#subnet 10.254.239.32 netmask 255.255.255.224 { +# range dynamic-bootp 10.254.239.40 10.254.239.60; +# option broadcast-address 10.254.239.31; +# option routers rtr-239-32-1.example.org; +#} + +# A slightly different configuration for an internal subnet. +#subnet 10.5.5.0 netmask 255.255.255.224 { +# range 10.5.5.26 10.5.5.30; +# option domain-name-servers ns1.internal.example.org; +# option domain-name "internal.example.org"; +# option routers 10.5.5.1; +# option broadcast-address 10.5.5.31; +# default-lease-time 600; +# max-lease-time 7200; +#} + +# Hosts which require special configuration options can be listed in +# host statements. If no address is specified, the address will be +# allocated dynamically (if possible), but the host-specific information +# will still come from the host declaration. + +#host passacaglia { +# hardware ethernet 0:0:c0:5d:bd:95; +# filename "vmunix.passacaglia"; +# server-name "toccata.fugue.com"; +#} + +# Fixed IP addresses can also be specified for hosts. These addresses +# should not also be listed as being available for dynamic assignment. +# Hosts for which fixed IP addresses have been specified can boot using +# BOOTP or DHCP. Hosts for which no fixed address is specified can only +# be booted with DHCP, unless there is an address range on the subnet +# to which a BOOTP client is connected which has the dynamic-bootp flag +# set. +#host fantasia { +# hardware ethernet 08:00:07:26:c0:a5; +# fixed-address fantasia.fugue.com; +#} + +# You can declare a class of clients and then do address allocation +# based on that. The example below shows a case where all clients +# in a certain class get addresses on the 10.17.224/24 subnet, and all +# other clients get addresses on the 10.0.29/24 subnet. + +#class "foo" { +# match if substring (option vendor-class-identifier, 0, 4) = "SUNW"; +#} + +#shared-network 224-29 { +# subnet 10.17.224.0 netmask 255.255.255.0 { +# option routers rtr-224.example.org; +# } +# subnet 10.0.29.0 netmask 255.255.255.0 { +# option routers rtr-29.example.org; +# } +# pool { +# allow members of "foo"; +# range 10.17.224.10 10.17.224.250; +# } +# pool { +# deny members of "foo"; +# range 10.0.29.10 10.0.29.230; +# } +#} diff --git a/package/dhcp/dhcpd.service b/package/dhcp/dhcpd.service new file mode 100644 index 00000000..c3a3acaa --- /dev/null +++ b/package/dhcp/dhcpd.service @@ -0,0 +1,16 @@ +[Unit] +Description=DHCP server +After=network.target + +[Service] +Type=forking +StartLimitIntervalSec=0 +Restart=always +RestartSec=2 +PIDFile=/run/dhcpd.pid +ExecStart=/usr/sbin/dhcpd -q -pf /run/dhcpd.pid $OPTIONS $INTERFACES +KillSignal=SIGINT +EnvironmentFile=-/etc/default/dhcpd + +[Install] +WantedBy=multi-user.target diff --git a/package/dhcpcd/Config.in b/package/dhcpcd/Config.in new file mode 100644 index 00000000..8612d4ba --- /dev/null +++ b/package/dhcpcd/Config.in @@ -0,0 +1,28 @@ +comment "dhcpcd needs a toolchain w/ headers >= 3.1" + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1 + +config BR2_PACKAGE_DHCPCD + bool "dhcpcd" + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1 # sa_family_t in linux/socket.h + help + An RFC2131 compliant DHCP client + + http://roy.marples.name/projects/dhcpcd/ + +if BR2_PACKAGE_DHCPCD + +config BR2_PACKAGE_DHCPCD_ENABLE_PRIVSEP + bool + default y + depends on BR2_USE_MMU + # Audit headers were only added in recent kernels for some arches + depends on !(BR2_arceb || BR2_arcle) || \ + BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_2 + depends on !(BR2_microblazeel || BR2_microblazebe) || \ + BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18 + depends on !BR2_nios2 || BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_2 + depends on !BR2_or1k || BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7 + depends on !BR2_sh || BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7 + depends on !BR2_xtensa || BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_0 + +endif diff --git a/package/dhcpcd/S41dhcpcd b/package/dhcpcd/S41dhcpcd new file mode 100644 index 00000000..55794f40 --- /dev/null +++ b/package/dhcpcd/S41dhcpcd @@ -0,0 +1,33 @@ +#!/bin/sh +# +# Start/stop dhcpcd +# + +DAEMON=/sbin/dhcpcd +CONFIG=/etc/dhcpcd.conf +PIDFILE=/var/run/dhcpcd/pid + +[ -f $CONFIG ] || exit 0 + +case "$1" in + start) + echo "Starting dhcpcd..." + start-stop-daemon -S -x "$DAEMON" -p "$PIDFILE" -- -f "$CONFIG" + ;; + stop) + echo "Stopping dhcpcd..." + start-stop-daemon -K -x "$DAEMON" -p "$PIDFILE" -o + ;; + reload|force-reload) + echo "Reloading dhcpcd configuration..." + "$DAEMON" -s reload + ;; + restart) + "$0" stop + sleep 1 # Prevent race condition: ensure dhcpcd stops before start. + "$0" start + ;; + *) + echo "Usage: $0 {start|stop|restart|reload|force-reload}" + exit 1 +esac diff --git a/package/dhcpcd/dhcpcd.hash b/package/dhcpcd/dhcpcd.hash new file mode 100644 index 00000000..fb4f6064 --- /dev/null +++ b/package/dhcpcd/dhcpcd.hash @@ -0,0 +1,4 @@ +# sha256 from https://github.com/NetworkConfiguration/dhcpcd/releases/tag/v10.0.4 +sha256 eb1f3cfef3069781ff8c896d7cea922639964afe22db28c069dc3f37f57eb428 dhcpcd-10.0.5.tar.xz +# Locally calculated +sha256 a7d6da3a202cdd38eaab0bcea4d25f60d002980f3785b3e896d9bf387f093ac8 LICENSE diff --git a/package/dhcpcd/dhcpcd.mk b/package/dhcpcd/dhcpcd.mk new file mode 100644 index 00000000..991c5cca --- /dev/null +++ b/package/dhcpcd/dhcpcd.mk @@ -0,0 +1,78 @@ +################################################################################ +# +# dhcpcd +# +################################################################################ + +DHCPCD_VERSION = 10.0.5 +DHCPCD_SOURCE = dhcpcd-$(DHCPCD_VERSION).tar.xz +DHCPCD_SITE = https://github.com/NetworkConfiguration/dhcpcd/releases/download/v$(DHCPCD_VERSION) +DHCPCD_DEPENDENCIES = host-pkgconf +DHCPCD_LICENSE = BSD-2-Clause +DHCPCD_LICENSE_FILES = LICENSE +DHCPCD_CPE_ID_VALID = YES + +DHCPCD_CONFIG_OPTS = \ + --libexecdir=/lib/dhcpcd \ + --os=linux \ + --privsepuser=dhcpcd + +DHCPCD_MAKE_OPTS = \ + BINMODE=755 + +ifeq ($(BR2_PACKAGE_DHCPCD_ENABLE_PRIVSEP),y) +DHCPCD_CONFIG_OPTS += --enable-privsep +else +DHCPCD_CONFIG_OPTS += --disable-privsep +endif + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +DHCPCD_CONFIG_OPTS += --with-udev +DHCPCD_DEPENDENCIES += udev +else +DHCPCD_CONFIG_OPTS += --without-udev +endif + +ifeq ($(BR2_STATIC_LIBS),y) +DHCPCD_CONFIG_OPTS += --enable-static +endif + +ifeq ($(BR2_USE_MMU),) +DHCPCD_CONFIG_OPTS += --disable-fork +endif + +define DHCPCD_CONFIGURE_CMDS + (cd $(@D); $(TARGET_CONFIGURE_OPTS) ./configure $(DHCPCD_CONFIG_OPTS)) +endef + +define DHCPCD_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(DHCPCD_MAKE_OPTS) all +endef + +define DHCPCD_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(DHCPCD_MAKE_OPTS) install DESTDIR=$(TARGET_DIR) +endef + +# When network-manager is enabled together with dhcpcd, it will use +# dhcpcd as a DHCP client, and will be in charge of running, so we +# don't want the init script or service file to be installed. +ifeq ($(BR2_PACKAGE_NETWORK_MANAGER),) +define DHCPCD_INSTALL_INIT_SYSV + $(INSTALL) -m 755 -D package/dhcpcd/S41dhcpcd \ + $(TARGET_DIR)/etc/init.d/S41dhcpcd +endef + +define DHCPCD_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0644 package/dhcpcd/dhcpcd.service \ + $(TARGET_DIR)/usr/lib/systemd/system/dhcpcd.service +endef +endif + +define DHCPCD_USERS + dhcpcd -1 dhcpcd -1 * - - - dhcpcd user +endef + +# NOTE: Even though this package has a configure script, it is not generated +# using the autotools, so we have to use the generic package infrastructure. + +$(eval $(generic-package)) diff --git a/package/dhcpcd/dhcpcd.service b/package/dhcpcd/dhcpcd.service new file mode 100644 index 00000000..4da49818 --- /dev/null +++ b/package/dhcpcd/dhcpcd.service @@ -0,0 +1,13 @@ +[Unit] +Description=DHCP client +After=network.target + +[Service] +Type=forking +EnvironmentFile=-/etc/default/dhcpcd +PIDFile=/run/dhcpcd/pid +ExecStart=/sbin/dhcpcd $DAEMON_ARGS +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/package/dhcpcd5/Config.in b/package/dhcpcd5/Config.in new file mode 100644 index 00000000..ad1cc137 --- /dev/null +++ b/package/dhcpcd5/Config.in @@ -0,0 +1,9 @@ +comment "dhcpcd needs a toolchain w/ headers >= 3.1" + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1 + +config BR2_PACKAGE_DHCPCD5 + bool "dhcpcd5" + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1 # sa_family_t in linux/socket.h + help + DHCP5 client + diff --git a/package/dhcpcd5/S41dhcpcd5 b/package/dhcpcd5/S41dhcpcd5 new file mode 100644 index 00000000..52f360b3 --- /dev/null +++ b/package/dhcpcd5/S41dhcpcd5 @@ -0,0 +1,33 @@ +#!/bin/sh +# +# Start/stop dhcpcd +# + +DAEMON=/sbin/dhcpcd5 +CONFIG=/etc/dhcpcd5.conf +PIDFILE=/var/run/dhcpcd5.pid + +[ -f $CONFIG ] || exit 0 + +case "$1" in + start) + echo "Starting dhcpcd..." + start-stop-daemon -S -x "$DAEMON" -p "$PIDFILE" -- -f "$CONFIG" + ;; + stop) + echo "Stopping dhcpcd..." + start-stop-daemon -K -x "$DAEMON" -p "$PIDFILE" -o + ;; + reload|force-reload) + echo "Reloading dhcpcd configuration..." + "$DAEMON" -s reload + ;; + restart) + "$0" stop + sleep 1 # Prevent race condition: ensure dhcpcd stops before start. + "$0" start + ;; + *) + echo "Usage: $0 {start|stop|restart|reload|force-reload}" + exit 1 +esac diff --git a/package/dhcpcd5/dhcpcd5.hash b/package/dhcpcd5/dhcpcd5.hash new file mode 100644 index 00000000..89d2698b --- /dev/null +++ b/package/dhcpcd5/dhcpcd5.hash @@ -0,0 +1,4 @@ +# sha256 from ftp://roy.marples.name/pub/dhcpcd/dhcpcd-9.4.0.tar.xz.distinfo +sha256 c3dfa2646e327f51e4b7151c3d5ff09bf304d32cad3383b16d9fd997f52b2c95 dhcpcd5-7.1.0.tar.gz +# Locally calculated +sha256 213fc1a704cecdb322276fa7c95891fd1c23137d9ab572af1fc5e91b48762303 LICENSE diff --git a/package/dhcpcd5/dhcpcd5.mk b/package/dhcpcd5/dhcpcd5.mk new file mode 100644 index 00000000..d1ef351b --- /dev/null +++ b/package/dhcpcd5/dhcpcd5.mk @@ -0,0 +1,90 @@ +################################################################################ +# +# dhcpcd5 +# +################################################################################ + +DHCPCD5_VERSION = 7.1.0 +DHCPCD5_SOURCE = dhcpcd5-$(DHCPCD5_VERSION).tar.gz +DHCPCD5_SITE = https://roy.marples.name/projects/dhcpcd +DHCPCD5_DEPENDENCIES = host-pkgconf +DHCPCD5_LICENSE = BSD-2-Clause +DHCPCD5_LICENSE_FILES = LICENSE +DHCPCD5_CPE_ID_VENDOR = dhcpcd5_project + +DHCPCD5_CONFIG_OPTS = \ + --libexecdir=/lib/dhcpcd5 \ + --dbdir=/var/db/dhcpcd5 \ + --rundir=/var/run \ + --os=linux + +# AUDIT_ARCH_{OPENRISC,SH,SHEL,SH64,SHEL64} are only available with kernel >= 3.7 +ifeq ($(BR2_or1k)$(BR2_sh):$(BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7),y:) +DHCPCD5_CONFIG_OPTS += --disable-privsep +endif + +# AUDIT_ARCH_MICROBLAZE is only available with kernel >= 3.18 +ifeq ($(BR2_microblazeel)$(BR2_microblazebe):$(BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18),y:) +DHCPCD5_CONFIG_OPTS += --disable-privsep +endif + +# AUDIT_ARCH_XTENSA is only available with kernel >= 5.0 +ifeq ($(BR2_xtensa):$(BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_0),y:) +DHCPCD5_CONFIG_OPTS += --disable-privsep +endif + +# AUDIT_ARCH_{ARCOMPACT,ARCV2,NDS32,NIOS2} are only available with kernel >= 5.2 +ifeq ($(BR2_arceb)$(BR2_arcle)$(BR2_nds32)$(BR2_nios2):$(BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_2),y:) +DHCPCD5_CONFIG_OPTS += --disable-privsep +endif + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +DHCPCD5_CONFIG_OPTS += --with-udev +DHCPCD5_DEPENDENCIES += udev +else +DHCPCD5_CONFIG_OPTS += --without-udev +endif + +ifeq ($(BR2_STATIC_LIBS),y) +DHCPCD5_CONFIG_OPTS += --enable-static +endif + +ifeq ($(BR2_USE_MMU),) +DHCPCD5_CONFIG_OPTS += --disable-fork --disable-privsep +endif + +define DHCPCD5_CONFIGURE_CMDS + (cd $(@D); $(TARGET_CONFIGURE_OPTS) ./configure $(DHCPCD5_CONFIG_OPTS)) +endef + +define DHCPCD5_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) all +endef + +define DHCPCD5_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install DESTDIR=$(TARGET_DIR) +endef + +# When network-manager is enabled together with dhcpcd, it will use +# dhcpcd as a DHCP client, and will be in charge of running, so we +# don't want the init script or service file to be installed. +ifeq ($(BR2_PACKAGE_NETWORK_MANAGER),) +define DHCPCD5_INSTALL_INIT_SYSV + $(INSTALL) -m 755 -D package/dhcpcd5/S41dhcpcd5 \ + $(TARGET_DIR)/etc/init.d/S41dhcpcd5 +endef + +define DHCPCD5_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0644 package/dhcpcd5/dhcpcd5.service \ + $(TARGET_DIR)/usr/lib/systemd/system/dhcpcd5.service +endef +endif + +define DHCPCD5_USERS + dhcpcd5 -1 dhcpcd5 -1 * - - - dhcpcd5 user +endef + +# NOTE: Even though this package has a configure script, it is not generated +# using the autotools, so we have to use the generic package infrastructure. + +$(eval $(generic-package)) diff --git a/package/dhcpcd5/dhcpcd5.service b/package/dhcpcd5/dhcpcd5.service new file mode 100644 index 00000000..c0ac0bac --- /dev/null +++ b/package/dhcpcd5/dhcpcd5.service @@ -0,0 +1,13 @@ +[Unit] +Description=DHCP client +After=network.target + +[Service] +Type=forking +EnvironmentFile=-/etc/default/dhcpcd5 +PIDFile=/run/dhcpcd5.pid +ExecStart=/sbin/dhcpcd5 $DAEMON_ARGS +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/package/dhcpdump/0001-use-non-bsd-structures.patch b/package/dhcpdump/0001-use-non-bsd-structures.patch new file mode 100644 index 00000000..40115fb6 --- /dev/null +++ b/package/dhcpdump/0001-use-non-bsd-structures.patch @@ -0,0 +1,23 @@ +The udphdr structure has uh_* fields when _FAVOR_BSD is +defined. Otherwise, the fields are just named source, dest, len and +check. See . + +Signed-off-by: Thomas Petazzoni + +Index: dhcpdump-1.8/dhcpdump.c +=================================================================== +--- dhcpdump-1.8.orig/dhcpdump.c 2011-05-17 20:20:46.506980003 +0200 ++++ dhcpdump-1.8/dhcpdump.c 2011-05-17 20:20:59.338979999 +0200 +@@ -163,10 +163,10 @@ + strcpy(ip_origin, (u_char *)inet_ntoa(ip->ip_src)); + strcpy(ip_destination, (u_char *)inet_ntoa(ip->ip_dst)); + +- if (hmask && check_ch((u_char *)(sp + offset), ntohs(udp->uh_ulen))) ++ if (hmask && check_ch((u_char *)(sp + offset), ntohs(udp->len))) + return; + +- printdata((u_char *)(sp + offset), ntohs(udp->uh_ulen)); ++ printdata((u_char *)(sp + offset), ntohs(udp->len)); + } + + // check for matching CHADDR (Peter Apian-Bennewitz ) diff --git a/package/dhcpdump/Config.in b/package/dhcpdump/Config.in new file mode 100644 index 00000000..e0abe040 --- /dev/null +++ b/package/dhcpdump/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_DHCPDUMP + bool "dhcpdump" + select BR2_PACKAGE_LIBPCAP + help + A tool for monitoring dhcp requests using tcpdump. + + http://www.mavetju.org/unix/general.php diff --git a/package/dhcpdump/dhcpdump.hash b/package/dhcpdump/dhcpdump.hash new file mode 100644 index 00000000..358a6f01 --- /dev/null +++ b/package/dhcpdump/dhcpdump.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 6d5eb9418162fb738bc56e4c1682ce7f7392dd96e568cc996e44c28de7f77190 dhcpdump-1.8.tar.gz +sha256 bab6ca76b7e93885396513689b1248dfb0e8fd662695b8bd1b26784ef71a0192 LICENSE diff --git a/package/dhcpdump/dhcpdump.mk b/package/dhcpdump/dhcpdump.mk new file mode 100644 index 00000000..ec9571c0 --- /dev/null +++ b/package/dhcpdump/dhcpdump.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# dhcpdump +# +################################################################################ + +DHCPDUMP_VERSION = 1.8 +DHCPDUMP_SITE = http://www.mavetju.org/download +DHCPDUMP_DEPENDENCIES = libpcap +DHCPDUMP_LICENSE = BSD-2-Clause +DHCPDUMP_LICENSE_FILES = LICENSE + +DHCPDUMP_LIBS = -lpcap +ifeq ($(BR2_STATIC_LIBS),y) +DHCPDUMP_LIBS += `$(STAGING_DIR)/usr/bin/pcap-config --static --additional-libs` +endif + +# glibc, uclibc and musl have strsep() +DHCPDUMP_CFLAGS = $(TARGET_CFLAGS) -DHAVE_STRSEP + +define DHCPDUMP_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) CC="$(TARGET_CC) $(DHCPDUMP_CFLAGS) \ + -D_GNU_SOURCE" LIBS="$(DHCPDUMP_LIBS)" dhcpdump +endef + +define DHCPDUMP_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/dhcpdump $(TARGET_DIR)/usr/bin/dhcpdump +endef + +$(eval $(generic-package)) diff --git a/package/dhrystone/0001-cmdline-nruns.patch b/package/dhrystone/0001-cmdline-nruns.patch new file mode 100644 index 00000000..1164610c --- /dev/null +++ b/package/dhrystone/0001-cmdline-nruns.patch @@ -0,0 +1,53 @@ +let people specify the number of runs on the command line + +Patch by Vivi Li + +--- a/dhry_1.c ++++ b/dhry_1.c +@@ -66,7 +70,7 @@ + /* end of variables for time measurement */ + + +-main () ++main(int argc, char *argv[]) + /*****/ + + /* main program, corresponds to procedures */ +@@ -101,6 +105,13 @@ + /* Warning: With 16-Bit processors and Number_Of_Runs > 32000, */ + /* overflow may occur for this array element. */ + ++ Number_Of_Runs = 0; ++ if ( argc == 2 ) { ++ if (atoi(argv[1]) > 0) { ++ Number_Of_Runs = atoi(argv[1]); ++ } ++ } ++ + printf ("\n"); + printf ("Dhrystone Benchmark, Version 2.1 (Language: C)\n"); + printf ("\n"); +@@ -114,13 +125,17 @@ + printf ("Program compiled without 'register' attribute\n"); + printf ("\n"); + } +- printf ("Please give the number of runs through the benchmark: "); +- { +- int n; +- scanf ("%d", &n); +- Number_Of_Runs = n; ++ ++ if (!Number_Of_Runs) { ++ printf ("Please give the number of runs through the benchmark: "); ++ fflush (stdout); ++ { ++ int n; ++ scanf ("%d", &n); ++ Number_Of_Runs = n; ++ } ++ printf ("\n"); + } +- printf ("\n"); + + printf ("Execution starts, %d runs through Dhrystone\n", Number_Of_Runs); + diff --git a/package/dhrystone/0002-HZ.patch b/package/dhrystone/0002-HZ.patch new file mode 100644 index 00000000..e3b8a0e0 --- /dev/null +++ b/package/dhrystone/0002-HZ.patch @@ -0,0 +1,17 @@ +Get HZ value from system rather than requiring via CPPFLAGS + +Patch by Robin Getz + +--- a/dhry.h ++++ b/dhry.h +@@ -359,6 +359,10 @@ + /* for "times" */ + #endif + ++#ifndef HZ ++#include ++#endif ++ + #define Mic_secs_Per_Second 1000000.0 + /* Berkeley UNIX C returns process times in seconds/HZ */ + diff --git a/package/dhrystone/0003-exit.patch b/package/dhrystone/0003-exit.patch new file mode 100644 index 00000000..8d99f4e5 --- /dev/null +++ b/package/dhrystone/0003-exit.patch @@ -0,0 +1,14 @@ +trust the exit status of the program + +Patch by Robin Getz + +--- a/dhry_1.c ++++ b/dhry_1.c +@@ -274,6 +289,7 @@ + printf ("\n"); + } + ++ exit(0); + } + + diff --git a/package/dhrystone/0004-headers.patch b/package/dhrystone/0004-headers.patch new file mode 100644 index 00000000..82bb60d9 --- /dev/null +++ b/package/dhrystone/0004-headers.patch @@ -0,0 +1,15 @@ +get prototypes for malloc/exit/strcpy + +Patch by Mike Frysinger + +--- a/dhry.h ++++ b/dhry.h +@@ -388,6 +388,8 @@ + /* General definitions: */ + + #include ++#include ++#include + /* for strcpy, strcmp */ + + #define Null 0 diff --git a/package/dhrystone/0005-prototypes.patch b/package/dhrystone/0005-prototypes.patch new file mode 100644 index 00000000..7fdcf94e --- /dev/null +++ b/package/dhrystone/0005-prototypes.patch @@ -0,0 +1,35 @@ +Avoid collision with C library using NO_PROTOTYPES found in code already + +Patch by Robin Getz + +--- a/dhry_1.c ++++ b/dhry_1.c +@@ -28,7 +28,9 @@ + int Arr_1_Glob [50]; + int Arr_2_Glob [50] [50]; + ++#ifndef NO_PROTOTYPES + extern char *malloc (); ++#endif + Enumeration Func_1 (); + /* forward declaration necessary since Enumeration may not simply be int */ + +@@ -45,14 +45,18 @@ + + #ifdef TIMES + struct tms time_info; ++#ifndef NO_PROTOTYPES + extern int times (); + /* see library function "times" */ ++#endif + #define Too_Small_Time 120 + /* Measurements should last at least about 2 seconds */ + #endif + #ifdef TIME ++#ifndef NO_PROTOTYPES + extern long time(); + /* see library function "time" */ ++#endif + #define Too_Small_Time 2 + /* Measurements should last at least 2 seconds */ + #endif diff --git a/package/dhrystone/Config.in b/package/dhrystone/Config.in new file mode 100644 index 00000000..d6fb7a75 --- /dev/null +++ b/package/dhrystone/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_DHRYSTONE + bool "dhrystone" + help + easy-to-use integer benchmark + + http://www.netlib.org/benchmark/dhry-c diff --git a/package/dhrystone/Makefile b/package/dhrystone/Makefile new file mode 100644 index 00000000..f7a212b2 --- /dev/null +++ b/package/dhrystone/Makefile @@ -0,0 +1,12 @@ +CPPFLAGS += -DNO_PROTOTYPES=1 -DHZ=100 +LDLIBS += -lm + +all: dhrystone + +dhrystone: dhry_1.o dhry_2.o + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS) + +clean: + rm -f *.o dhrystone + +.PHONY: all clean diff --git a/package/dhrystone/dhrystone.hash b/package/dhrystone/dhrystone.hash new file mode 100644 index 00000000..9ea22a36 --- /dev/null +++ b/package/dhrystone/dhrystone.hash @@ -0,0 +1,2 @@ +# Locally calculated +sha256 038a7e9169787125c3451a6c941f3aca5db2d2f3863871afcdce154ef17f4e3e dhry-c diff --git a/package/dhrystone/dhrystone.mk b/package/dhrystone/dhrystone.mk new file mode 100644 index 00000000..d54c8d94 --- /dev/null +++ b/package/dhrystone/dhrystone.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# dhrystone +# +################################################################################ + +DHRYSTONE_VERSION = 2 +DHRYSTONE_SOURCE = dhry-c +DHRYSTONE_SITE = http://www.netlib.org/benchmark + +define DHRYSTONE_EXTRACT_CMDS + (cd $(@D) && $(SHELL) $(DHRYSTONE_DL_DIR)/$($(PKG)_SOURCE)) + $(Q)cp package/dhrystone/Makefile $(@D)/ +endef + +define DHRYSTONE_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) +endef + +define DHRYSTONE_INSTALL_TARGET_CMDS + $(INSTALL) -D $(@D)/dhrystone $(TARGET_DIR)/usr/bin/dhrystone +endef + +$(eval $(generic-package)) diff --git a/package/dialog/Config.in b/package/dialog/Config.in new file mode 100644 index 00000000..830427e5 --- /dev/null +++ b/package/dialog/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_DIALOG + bool "dialog" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + dialog - display dialog boxes from shell scripts + + This application provides a method of displaying several + different types of dialog boxes from shell scripts. This + allows a developer of a script to interact with the user in a + much friendlier manner. + + http://invisible-island.net/dialog/dialog.html diff --git a/package/dialog/dialog.hash b/package/dialog/dialog.hash new file mode 100644 index 00000000..2286590b --- /dev/null +++ b/package/dialog/dialog.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 466163e8b97c2b7709d00389199add3156bd813f60ccb0335d0a30f2d4a17f99 dialog-1.3-20200327.tgz +# Locally computed +sha256 6095e9ffa777dd22839f7801aa845b31c9ed07f3d6bf8a26dc5d2dec8ccc0ef3 COPYING diff --git a/package/dialog/dialog.mk b/package/dialog/dialog.mk new file mode 100644 index 00000000..1c98d354 --- /dev/null +++ b/package/dialog/dialog.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# dialog +# +################################################################################ + +DIALOG_VERSION = 1.3-20200327 +DIALOG_SOURCE = dialog-$(DIALOG_VERSION).tgz +DIALOG_SITE = https://invisible-mirror.net/archives/dialog +DIALOG_CONF_OPTS = --with-ncurses --with-curses-dir=$(STAGING_DIR)/usr \ + --disable-rpath-hack +DIALOG_DEPENDENCIES = host-pkgconf ncurses $(TARGET_NLS_DEPENDENCIES) +DIALOG_LICENSE = LGPL-2.1 +DIALOG_LICENSE_FILES = COPYING + +ifneq ($(BR2_ENABLE_LOCALE),y) +DIALOG_DEPENDENCIES += libiconv +endif + +DIALOG_CONF_OPTS += NCURSES_CONFIG=$(STAGING_DIR)/usr/bin/$(NCURSES_CONFIG_SCRIPTS) + +$(eval $(autotools-package)) diff --git a/package/dieharder/0001-Do-not-use-includedir-as-include-search-path-for-bui.patch b/package/dieharder/0001-Do-not-use-includedir-as-include-search-path-for-bui.patch new file mode 100644 index 00000000..b475e5c4 --- /dev/null +++ b/package/dieharder/0001-Do-not-use-includedir-as-include-search-path-for-bui.patch @@ -0,0 +1,62 @@ +From fbc9b7c3b83a99ac996c0a268487d1f800630328 Mon Sep 17 00:00:00 2001 +From: Julien Viard de Galbert +Date: Wed, 8 Feb 2017 21:26:58 +0100 +Subject: [PATCH] Do not use includedir as include search path for build + +--includedir is not used to specify where a program should +look for headers of libraries, but to tell where it should +install its own headers. + +Signed-off-by: Julien Viard de Galbert +--- + configure.ac | 6 +++--- + dieharder/Makefile.am | 2 +- + libdieharder/Makefile.am | 2 +- + 3 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/configure.ac b/configure.ac +index b336115..91f7c64 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -96,9 +96,9 @@ AC_TYPE_SIZE_T + AC_C_VOLATILE + AC_C_INLINE + +-DIEHARDER_CFLAGS="-I$includedir" +-dieharder_CFLAGS="-std=c99 -Wall -pedantic -I$includedir" +-libdieharder_lo_CFLAGS="-Wall -pedantic -I$includedir" ++DIEHARDER_CFLAGS="" ++dieharder_CFLAGS="-std=c99 -Wall -pedantic" ++libdieharder_lo_CFLAGS="-Wall -pedantic" + DIEHARDER_LIBS="-L$libdir -ldieharder" + ACLOCAL_AMFLAGS="-I m4" + +diff --git a/dieharder/Makefile.am b/dieharder/Makefile.am +index e6fbff2..7bdac5c 100644 +--- a/dieharder/Makefile.am ++++ b/dieharder/Makefile.am +@@ -64,7 +64,7 @@ DEFINES = -DVERSION=$(VERSION) + # CC = gcc + + # Compile flags (use fairly standard -O3 as default) +-AM_CPPFLAGS = -I ${top_srcdir}/include $(DEFINES) -I ${includedir} ++AM_CPPFLAGS = -I ${top_srcdir}/include $(DEFINES) + AM_CFLAGS = -O3 + + # Load flags (optional) +diff --git a/libdieharder/Makefile.am b/libdieharder/Makefile.am +index 5fd3396..0873f9c 100644 +--- a/libdieharder/Makefile.am ++++ b/libdieharder/Makefile.am +@@ -114,7 +114,7 @@ DEFINES = -DVERSION=$(VERSION) -DLITTLE_ENDIAN=$(LITTLE_ENDIAN) + # CC = gcc + + # Compile flags (use fairly standard -O3 as default) +-AM_CPPFLAGS = $(DEFINES) -I ${top_srcdir}/include -I ${includedir} ++AM_CPPFLAGS = $(DEFINES) -I ${top_srcdir}/include + AM_CFLAGS = -O3 -Wall -pedantic -Wno-unused-variable + + #======================================================================== +-- +2.1.4 + diff --git a/package/dieharder/0002-Fix-missing-type-intptr_t.patch b/package/dieharder/0002-Fix-missing-type-intptr_t.patch new file mode 100644 index 00000000..12ea5e7f --- /dev/null +++ b/package/dieharder/0002-Fix-missing-type-intptr_t.patch @@ -0,0 +1,27 @@ +From 6f550841943f19612af064b3d3a1db134078e03c Mon Sep 17 00:00:00 2001 +From: Julien Viard de Galbert +Date: Sat, 14 Jan 2017 14:18:10 +0100 +Subject: [PATCH] Fix missing type intptr_t + +With glibc-2.23 unistd.h need intptr_t when __USE_MISC is defined. + +Signed-off-by: Julien Viard de Galbert +--- + include/dieharder/libdieharder.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/include/dieharder/libdieharder.h b/include/dieharder/libdieharder.h +index 2138ebf..d98b758 100644 +--- a/include/dieharder/libdieharder.h ++++ b/include/dieharder/libdieharder.h +@@ -17,6 +17,7 @@ + + /* This turns on uint macro in c99 */ + #define __USE_MISC 1 ++#include + #include + #include + #include +-- +2.1.4 + diff --git a/package/dieharder/0003-Add-_GNU_SOURCE-for-uint-and-M_PI-with-musl-libc.patch b/package/dieharder/0003-Add-_GNU_SOURCE-for-uint-and-M_PI-with-musl-libc.patch new file mode 100644 index 00000000..d71cd574 --- /dev/null +++ b/package/dieharder/0003-Add-_GNU_SOURCE-for-uint-and-M_PI-with-musl-libc.patch @@ -0,0 +1,28 @@ +From 526510a27ef47a16699dd34a2373ad9b6bb5e8f3 Mon Sep 17 00:00:00 2001 +From: Julien Viard de Galbert +Date: Sat, 14 Jan 2017 14:19:47 +0100 +Subject: [PATCH] Add _GNU_SOURCE for uint and M_PI with musl libc + +When building with musl libc _GNU_SOURCE need to be defined +to provide uint type and M_PI macro + +Signed-off-by: Julien Viard de Galbert +--- + include/dieharder/libdieharder.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/include/dieharder/libdieharder.h b/include/dieharder/libdieharder.h +index d98b758..c1a5023 100644 +--- a/include/dieharder/libdieharder.h ++++ b/include/dieharder/libdieharder.h +@@ -17,6 +17,7 @@ + + /* This turns on uint macro in c99 */ + #define __USE_MISC 1 ++#define _GNU_SOURCE 1 + #include + #include + #include +-- +2.1.4 + diff --git a/package/dieharder/0004-Add-static-to-inline-functions.patch b/package/dieharder/0004-Add-static-to-inline-functions.patch new file mode 100644 index 00000000..64cde1d2 --- /dev/null +++ b/package/dieharder/0004-Add-static-to-inline-functions.patch @@ -0,0 +1,65 @@ +From 9c71a211dcf20f53f747326f5bc3fee9fabe3f52 Mon Sep 17 00:00:00 2001 +From: Julien Viard de Galbert +Date: Tue, 27 Jun 2017 00:16:11 +0200 +Subject: [PATCH] Add static to inline functions + +This is needed to avoid a link error where the inline functions appear +missing at link time. +From c99 standard inline function should either be declared static or +have an extern instance in a c file for linking. +This fix is necessary to build with gcc 7; for some reason it was not +trigerred before. + +Signed-off-by: Julien Viard de Galbert +--- + libdieharder/dab_filltree.c | 4 ++-- + libdieharder/dab_filltree2.c | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/libdieharder/dab_filltree.c b/libdieharder/dab_filltree.c +index 9cc5ce7..a377c3d 100644 +--- a/libdieharder/dab_filltree.c ++++ b/libdieharder/dab_filltree.c +@@ -34,7 +34,7 @@ static double targetData[] = { + 0.0, 0.0, 0.0, 0.0, 0.13333333, 0.20000000, 0.20634921, 0.17857143, 0.13007085, 0.08183633, 0.04338395, 0.01851828, 0.00617270, 0.00151193, 0.00023520, 0.00001680, 0.00000000, 0.00000000, 0.00000000, 0.00000000 + }; + +-inline int insert(double x, double *array, unsigned int startVal); ++static inline int insert(double x, double *array, unsigned int startVal); + + int dab_filltree(Test **test,int irun) { + int size = (ntuple == 0) ? 32 : ntuple; +@@ -105,7 +105,7 @@ int dab_filltree(Test **test,int irun) { + } + + +-inline int insert(double x, double *array, unsigned int startVal) { ++static inline int insert(double x, double *array, unsigned int startVal) { + uint d = (startVal + 1) / 2; + uint i = startVal; + while (d > 0) { +diff --git a/libdieharder/dab_filltree2.c b/libdieharder/dab_filltree2.c +index 1e33af2..59cbd52 100644 +--- a/libdieharder/dab_filltree2.c ++++ b/libdieharder/dab_filltree2.c +@@ -92,7 +92,7 @@ static double targetData[128] = { // size=128, generated from 6e9 samples + 0.00000000000e+00,0.00000000000e+00,0.00000000000e+00,0.00000000000e+00, + }; + +-inline int insertBit(uint x, uchar *array, uint *i, uint *d); ++static inline int insertBit(uint x, uchar *array, uint *i, uint *d); + + int dab_filltree2(Test **test, int irun) { + int size = (ntuple == 0) ? 128 : ntuple; +@@ -181,7 +181,7 @@ int dab_filltree2(Test **test, int irun) { + * The function returns >= 0 if the path went too deep; the + * returned value is the last position of the path. + */ +-inline int insertBit(uint x, uchar *array, uint *i, uint *d) { ++static inline int insertBit(uint x, uchar *array, uint *i, uint *d) { + if (x != 0) { + *i += *d; + } else { +-- +2.13.2 + diff --git a/package/dieharder/Config.in b/package/dieharder/Config.in new file mode 100644 index 00000000..e7a9f546 --- /dev/null +++ b/package/dieharder/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_DIEHARDER + bool "dieharder" + select BR2_PACKAGE_GSL + help + dieharder is a fairly involved random number/uniform deviate + generator tester. It is thus suitable for use in testing + both software RNG's and hardware RNG's. + + http://www.phy.duke.edu/~rgb/General/dieharder.php diff --git a/package/dieharder/dieharder.hash b/package/dieharder/dieharder.hash new file mode 100644 index 00000000..55932ce6 --- /dev/null +++ b/package/dieharder/dieharder.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 6cff0ff8394c553549ac7433359ccfc955fb26794260314620dfa5e4cd4b727f dieharder-3.31.1.tgz +sha256 c475bcd1afa6fc15a65174e31c599c0d23706a34e4b9f2fcb03a4dad5438d53f COPYING diff --git a/package/dieharder/dieharder.mk b/package/dieharder/dieharder.mk new file mode 100644 index 00000000..cbf28922 --- /dev/null +++ b/package/dieharder/dieharder.mk @@ -0,0 +1,44 @@ +################################################################################ +# +# dieharder +# +################################################################################ + +DIEHARDER_VERSION = 3.31.1 +DIEHARDER_SITE = http://www.phy.duke.edu/~rgb/General/dieharder +DIEHARDER_SOURCE = dieharder-$(DIEHARDER_VERSION).tgz +DIEHARDER_STRIP_COMPONENTS = 2 +DIEHARDER_LICENSE = GPL-2.0 with beverage clause +DIEHARDER_LICENSE_FILES = COPYING +DIEHARDER_DEPENDENCIES = gsl + +# The original configure does not use variables provided in the +# environment so _CONF_ENV does not work. (_CONF_OPTS does). +# +# Finally, we patch configure.ac and some Makefile.am so we need to +# autoreconf anyway +DIEHARDER_AUTORECONF = YES + +# The m4/*.m4 files are symlinks to /usr/share, which clearly doesn't +# work, and doing an autoreconf does not replace them. +define DIEHARDER_M4_CLEAN + rm -f $(@D)/m4/*.m4 +endef +DIEHARDER_POST_PATCH_HOOKS += DIEHARDER_M4_CLEAN + +# fix endianness detection +ifeq ($(BR2_ENDIAN),"BIG") +DIEHARDER_CONF_ENV = ac_cv_c_endian=big +else +DIEHARDER_CONF_ENV = ac_cv_c_endian=little +endif + +# parallel build fail, disable it +DIEHARDER_MAKE = $(MAKE1) + +# Too many fixes needed to build with -fno-common which is default since gcc 10 +ifeq ($(BR2_TOOLCHAIN_GCC_AT_LEAST_10),y) +DIEHARDER_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) -fcommon" +endif + +$(eval $(autotools-package)) diff --git a/package/diffutils/Config.in b/package/diffutils/Config.in new file mode 100644 index 00000000..3c38f25f --- /dev/null +++ b/package/diffutils/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_DIFFUTILS + bool "diffutils" + depends on BR2_USE_WCHAR + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + GNU diff. Compare files per line. + + http://www.gnu.org/software/diffutils/diffutils.html + +comment "diffutils needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS diff --git a/package/diffutils/diffutils.hash b/package/diffutils/diffutils.hash new file mode 100644 index 00000000..aa91fd43 --- /dev/null +++ b/package/diffutils/diffutils.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 b3a7a6221c3dc916085f0d205abf6b8e1ba443d4dd965118da364a1dc1cb3a26 diffutils-3.7.tar.xz +# Locally calculated +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/diffutils/diffutils.mk b/package/diffutils/diffutils.mk new file mode 100644 index 00000000..107de793 --- /dev/null +++ b/package/diffutils/diffutils.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# diffutils +# +################################################################################ + +DIFFUTILS_VERSION = 3.7 +DIFFUTILS_SOURCE = diffutils-$(DIFFUTILS_VERSION).tar.xz +DIFFUTILS_SITE = $(BR2_GNU_MIRROR)/diffutils +DIFFUTILS_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) +DIFFUTILS_LICENSE = GPL-3.0+ +DIFFUTILS_LICENSE_FILES = COPYING + +# Since glibc >= 2.26, don't try to use getopt_long replacement bundled +# with diffutils. It will conflict with the one from glibc. +ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),y) +DIFFUTILS_CONF_ENV += gl_cv_func_getopt_gnu=yes +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/dillo/0001-usr-local-include.patch b/package/dillo/0001-usr-local-include.patch new file mode 100644 index 00000000..0c3fed2b --- /dev/null +++ b/package/dillo/0001-usr-local-include.patch @@ -0,0 +1,27 @@ +Do not add (possibly poisoned) /usr/local/include and /usr/local/lib +to gcc and ld search paths in configure. + +With BR2_COMPILER_PARANOID_UNSAFE_PATH enabled, poisoned paths result +in hard errors, failing affected configure tests. + +Signed-off-by: Alex Suykov + +--- a/configure.ac ++++ b/configure.ac +@@ -57,16 +57,6 @@ + AC_TYPE_INT32_T + AC_TYPE_UINT32_T + +-dnl -------------------------------------- +-dnl Check whether to add /usr/local or not +-dnl (this is somewhat a religious problem) +-dnl -------------------------------------- +-dnl +-if test "`$CPP -v < /dev/null 2>&1 | grep '/usr/local/include' 2>&1`" = ""; then +- CPPFLAGS="$CPPFLAGS -I/usr/local/include" +- LDFLAGS="$LDFLAGS -L/usr/local/lib" +-fi +- + dnl ------------------------------------ + dnl Check for socket libs (AIX, Solaris) + dnl ------------------------------------ diff --git a/package/dillo/0002-Fix-openssl-detection.patch b/package/dillo/0002-Fix-openssl-detection.patch new file mode 100644 index 00000000..6e5f1d02 --- /dev/null +++ b/package/dillo/0002-Fix-openssl-detection.patch @@ -0,0 +1,29 @@ +From 96dde9dedf806256cdc6cbf5cacbd5c8d74e6288 Mon Sep 17 00:00:00 2001 +From: Jonathan Kimmitt +Date: Thu, 9 Jan 2020 22:01:42 +0100 +Subject: [PATCH] Fix openssl detection + +SSL_library_init is now a define, use OPENSSL_init_ssl instead. + +Signed-off-by: Jonathan Kimmitt +Signed-off-by: Peter Seiderer +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 66b5e9f..206fd53 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -276,7 +276,7 @@ if test "x$enable_ssl" = "xyes"; then + + if test "x$ssl_ok" = "xyes"; then + old_libs="$LIBS" +- AC_CHECK_LIB(ssl, SSL_library_init, ssl_ok=yes, ssl_ok=no, -lcrypto) ++ AC_CHECK_LIB(ssl, OPENSSL_init_ssl, ssl_ok=yes, ssl_ok=no, -lcrypto) + LIBS="$old_libs" + fi + +-- +2.24.1 + diff --git a/package/dillo/0003-Support-OpenSSL-1.1.0.patch b/package/dillo/0003-Support-OpenSSL-1.1.0.patch new file mode 100644 index 00000000..87b9d0dc --- /dev/null +++ b/package/dillo/0003-Support-OpenSSL-1.1.0.patch @@ -0,0 +1,33 @@ +From ff44d8b2d5211a502afdb3e612dae0e8133b5124 Mon Sep 17 00:00:00 2001 +From: Johannes Hofmann +Date: Thu, 9 Jan 2020 22:07:15 +0100 +Subject: [PATCH] Support OpenSSL 1.1.0 + +taken-from: pkgsrc (Ryo ONODERA) +submitted-by: Jun Ebihara + +Upstream: https://hg.dillo.org/dillo/rev/b171b8610400 +Signed-off-by: Peter Seiderer +--- + dpi/https.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/dpi/https.c b/dpi/https.c +index 766b3af..025cfc4 100644 +--- a/dpi/https.c ++++ b/dpi/https.c +@@ -476,7 +476,11 @@ static int handle_certificate_problem(SSL * ssl_connection) + case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: + /*Either self signed and untrusted*/ + /*Extract CN from certificate name information*/ ++#if OPENSSL_VERSION_NUMBER < 0x10100000L + if ((cn = strstr(remote_cert->name, "/CN=")) == NULL) { ++#else ++ if ((cn = strstr(X509_get_subject_name(remote_cert), "/CN=")) == NULL) { ++#endif + strcpy(buf, "(no CN given)"); + } else { + char *cn_end; +-- +2.24.1 + diff --git a/package/dillo/0004-fix-build-with-gcc-10.patch b/package/dillo/0004-fix-build-with-gcc-10.patch new file mode 100644 index 00000000..413bccb0 --- /dev/null +++ b/package/dillo/0004-fix-build-with-gcc-10.patch @@ -0,0 +1,124 @@ +fix build with gcc 10 + +gcc 10 is now defaulting to -fno-common resulting in the following build +failures: + +/nvme/rc-buildroot-test/scripts/instance-0/output-1/host/bin/arm-buildroot-linux-gnueabihf-gcc -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -g2 -D_FORTIFY_SOURCE=1 -DENABLE_IPV6 -DD_DNS_THREADED -D_REENTRANT -D_THREAD_SAFE -Wall -W -Wno-unused-parameter -Waggregate-return -o dpid dpi.o dpi_socket_dir.o dpid.o dpid_common.o main.o misc_new.o ../dpip/libDpip.a ../dlib/libDlib.a +/nvme/rc-buildroot-test/scripts/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: dpi_socket_dir.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid_common.h:44: multiple definition of `dpi_errno'; dpi.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid_common.h:44: first defined here +/nvme/rc-buildroot-test/scripts/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: dpid.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid_common.h:44: multiple definition of `dpi_errno'; dpi.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid_common.h:44: first defined here +/nvme/rc-buildroot-test/scripts/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: dpid_common.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid_common.h:44: multiple definition of `dpi_errno'; dpi.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid_common.h:44: first defined here +/nvme/rc-buildroot-test/scripts/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: main.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid.h:64: multiple definition of `sock_set'; dpid.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid.h:64: first defined here +/nvme/rc-buildroot-test/scripts/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: main.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid.h:61: multiple definition of `services_list'; dpid.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid.h:61: first defined here +/nvme/rc-buildroot-test/scripts/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: main.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid.h:58: multiple definition of `dpi_attr_list'; dpid.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid.h:58: first defined here +/nvme/rc-buildroot-test/scripts/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: main.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid.h:55: multiple definition of `numsocks'; dpid.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid.h:55: first defined here +/nvme/rc-buildroot-test/scripts/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: main.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid.h:52: multiple definition of `numdpis'; dpid.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid.h:52: first defined here +/nvme/rc-buildroot-test/scripts/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: main.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid.h:31: multiple definition of `srs_fd'; dpid.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid.h:31: first defined here +/nvme/rc-buildroot-test/scripts/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: main.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid.h:28: multiple definition of `srs_name'; dpid.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid.h:28: first defined here +/nvme/rc-buildroot-test/scripts/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: main.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid_common.h:44: multiple definition of `dpi_errno'; dpi.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid_common.h:44: first defined here +/nvme/rc-buildroot-test/scripts/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: misc_new.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid_common.h:44: multiple definition of `dpi_errno'; dpi.o:/nvme/rc-buildroot-test/scripts/instance-0/output-1/build/dillo-3.0.5/dpid/dpid_common.h:44: first defined here + +So add missing extern for srs_fd, numdpis, numsocks, dpi_attr_list, +services_list and sock_set + +Also remove srs_name which is never used and give a name to dpi_errno +enum + +Fixes: + - http://autobuild.buildroot.org/results/9c777af97fe50143c6a68f0170fc86c87d8ead3f + +Signed-off-by: Fabrice Fontaine +[Upstream status: sent to jcid@dillo.org] + +diff -r f60d55c02567 dpid/dpid.c +--- a/dpid/dpid.c Fri Oct 05 22:05:08 2018 +0200 ++++ b/dpid/dpid.c Thu Aug 27 18:16:50 2020 +0200 +@@ -38,6 +38,12 @@ + + #define QUEUE 5 + ++int srs_fd; ++int numdpis; ++int numsocks; ++struct dp *dpi_attr_list; ++Dlist *services_list; ++fd_set sock_set; + volatile sig_atomic_t caught_sigchld = 0; + char *SharedKey = NULL; + +diff -r f60d55c02567 dpid/dpid.h +--- a/dpid/dpid.h Fri Oct 05 22:05:08 2018 +0200 ++++ b/dpid/dpid.h Thu Aug 27 18:16:50 2020 +0200 +@@ -25,10 +25,9 @@ + + /*! \TODO: Should read this from dillorc */ + #define SRS_NAME "dpid.srs" +-char *srs_name; + + /*! dpid's service request socket file descriptor */ +-int srs_fd; ++extern int srs_fd; + + /*! plugin state information + */ +@@ -49,19 +48,19 @@ + }; + + /*! Number of available plugins */ +-int numdpis; ++extern int numdpis; + + /*! Number of sockets being watched */ +-int numsocks; ++extern int numsocks; + + /*! State information for each plugin. */ +-struct dp *dpi_attr_list; ++extern struct dp *dpi_attr_list; + + /*! service served for each plugin */ +-Dlist *services_list; ++extern Dlist *services_list; + + /*! Set of sockets watched for connections */ +-fd_set sock_set; ++extern fd_set sock_set; + + /*! Set to 1 by the SIGCHLD handler dpi_sigchld */ + extern volatile sig_atomic_t caught_sigchld; +diff -r f60d55c02567 dpid/dpid_common.h +--- a/dpid/dpid_common.h Fri Oct 05 22:05:08 2018 +0200 ++++ b/dpid/dpid_common.h Thu Aug 27 18:16:50 2020 +0200 +@@ -37,10 +37,10 @@ + + + /*! Error codes for dpid */ +-enum { ++enum dpi_errno { + no_errors, + dpid_srs_addrinuse /* dpid service request socket address already in use */ +-} dpi_errno; ++}; + + /*! Intended for identifying dillo plugins + * and related files +diff -r f60d55c02567 dpid/main.c +--- a/dpid/main.c Fri Oct 05 22:05:08 2018 +0200 ++++ b/dpid/main.c Thu Aug 27 18:16:50 2020 +0200 +@@ -231,7 +231,7 @@ + /* this sleep used to unmask a race condition */ + // sleep(2); + +- dpi_errno = no_errors; ++ enum dpi_errno error_code = no_errors; + + /* Get list of available dpis */ + numdpis = register_all(&dpi_attr_list); +@@ -254,7 +254,7 @@ + + /* Initialise sockets */ + if ((numsocks = init_ids_srs_socket()) == -1) { +- switch (dpi_errno) { ++ switch (error_code) { + case dpid_srs_addrinuse: + MSG_ERR("dpid refuses to start, possibly because:\n"); + MSG_ERR("\t1) An instance of dpid is already running.\n"); diff --git a/package/dillo/Config.in b/package/dillo/Config.in new file mode 100644 index 00000000..d06f2d1f --- /dev/null +++ b/package/dillo/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_DILLO + bool "dillo" + depends on BR2_PACKAGE_XORG7 + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_MMU # fltk fork() + select BR2_PACKAGE_FLTK + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + select BR2_PACKAGE_ZLIB + help + Dillo is a multi-platform graphical web browser known + for its speed and small footprint. + + Enable openssl package to gain https support. + + http://www.dillo.org + +comment "dillo needs a toolchain w/ C++" + depends on BR2_PACKAGE_XORG7 && BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/dillo/dillo.hash b/package/dillo/dillo.hash new file mode 100644 index 00000000..fa46702a --- /dev/null +++ b/package/dillo/dillo.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 db1be16c1c5842ebe07b419aa7c6ef11a45603a75df2877f99635f4f8345148b dillo-3.0.5.tar.bz2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/dillo/dillo.mk b/package/dillo/dillo.mk new file mode 100644 index 00000000..a6885f5c --- /dev/null +++ b/package/dillo/dillo.mk @@ -0,0 +1,46 @@ +################################################################################ +# +# dillo +# +################################################################################ + +DILLO_VERSION = 3.0.5 +DILLO_SOURCE = dillo-$(DILLO_VERSION).tar.bz2 +DILLO_SITE = http://www.dillo.org/download +DILLO_LICENSE = GPL-3.0+ +DILLO_LICENSE_FILES = COPYING +# configure.ac gets patched, so autoreconf is necessary +DILLO_AUTORECONF = YES +DILLO_DEPENDENCIES = fltk zlib \ + $(if $(BR2_PACKAGE_LIBICONV),libiconv) +DILLO_CONF_ENV = ac_cv_path_FLTK_CONFIG=$(STAGING_DIR)/usr/bin/fltk-config + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +DILLO_CONF_OPTS += --enable-ssl +DILLO_DEPENDENCIES += openssl +else +DILLO_CONF_OPTS += --disable-ssl +endif + +ifeq ($(BR2_PACKAGE_LIBPNG),y) +DILLO_CONF_OPTS += --enable-png +DILLO_DEPENDENCIES += libpng +DILLO_CONF_ENV += PNG_CONFIG=$(STAGING_DIR)/usr/bin/libpng-config +else +DILLO_CONF_OPTS += --disable-png +endif + +ifeq ($(BR2_PACKAGE_JPEG),y) +DILLO_CONF_OPTS += --enable-jpeg +DILLO_DEPENDENCIES += jpeg +else +DILLO_CONF_OPTS += --disable-jpeg +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +DILLO_CONF_OPTS += --enable-threaded-dns +else +DILLO_CONF_OPTS += --disable-threaded-dns +endif + +$(eval $(autotools-package)) diff --git a/package/ding-libs/Config.in b/package/ding-libs/Config.in new file mode 100644 index 00000000..152dca04 --- /dev/null +++ b/package/ding-libs/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_DING_LIBS + bool "ding-libs" + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + The ding-libs packages contain a set of libraries used by + the System Security Services Daemon (SSSD) and other + projects and provide functions to manipulate filesystem + pathnames (libpath_utils), a hash table to manage storage + and access time properties (libdhash), a data type to + collect data in a hierarchical structure (libcollection), a + dynamically growing, reference-counted array (libref_array), + and a library to process configuration files in + initialization format (INI) into a library collection data + structure (libini_config). + + https://pagure.io/SSSD/ding-libs diff --git a/package/ding-libs/ding-libs.hash b/package/ding-libs/ding-libs.hash new file mode 100644 index 00000000..2ac5bd8e --- /dev/null +++ b/package/ding-libs/ding-libs.hash @@ -0,0 +1,4 @@ +# Locally computed +sha256 ad3c573641701f67d4b6bd8a5a71f0b65d45fd39fe961495ef5f5d3c57fc0963 ding-libs-ding_libs-0_6_1.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING +sha256 6c57f43c939054fd4b831f271a14c97a488c38f98cdda5e887c5d396e3b3bc58 COPYING.LESSER diff --git a/package/ding-libs/ding-libs.mk b/package/ding-libs/ding-libs.mk new file mode 100644 index 00000000..1e8fa59d --- /dev/null +++ b/package/ding-libs/ding-libs.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# ding-libs +# +################################################################################ + +DING_LIBS_VERSION = 0.6.1 +DING_LIBS_SOURCE = ding-libs-ding_libs-$(subst .,_,$(DING_LIBS_VERSION)).tar.gz +DING_LIBS_SITE = \ + https://pagure.io/SSSD/ding-libs/archive/ding_libs-$(subst .,_,$(DING_LIBS_VERSION)) +DING_LIBS_DEPENDENCIES = host-pkgconf \ + $(TARGET_NLS_DEPENDENCIES) \ + $(if $(BR2_PACKAGE_LIBICONV),libiconv) +DING_LIBS_INSTALL_STAGING = YES +DING_LIBS_LICENSE = LGPL-3.0+ (library),GPL-3.0+ (test programs) +DING_LIBS_LICENSE_FILES = COPYING COPYING.LESSER + +# autoconf/automake generated files not present in tarball +DING_LIBS_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/directfb-examples/0001-remove-bzero.patch b/package/directfb-examples/0001-remove-bzero.patch new file mode 100644 index 00000000..41616b5c --- /dev/null +++ b/package/directfb-examples/0001-remove-bzero.patch @@ -0,0 +1,17 @@ +--- + src/df_knuckles/matrix.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: directfb-examples-1.2.0/src/df_knuckles/matrix.c +=================================================================== +--- directfb-examples-1.2.0.orig/src/df_knuckles/matrix.c ++++ directfb-examples-1.2.0/src/df_knuckles/matrix.c +@@ -19,7 +19,7 @@ + static float Cosine[3600]; + static float Sine[3600]; + +-#define M_CLEAR(m) bzero(m, MATRIX_SIZE) ++#define M_CLEAR(m) memset(m, 0, MATRIX_SIZE) + #define M_IDENTITY(m) memcpy(m, IdentityMatrix, MATRIX_SIZE) + + static void MultiplyMatrix(float *A, float *B) diff --git a/package/directfb-examples/Config.in b/package/directfb-examples/Config.in new file mode 100644 index 00000000..216e0365 --- /dev/null +++ b/package/directfb-examples/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_DIRECTFB_EXAMPLES + bool "directfb examples" + depends on BR2_PACKAGE_DIRECTFB + help + The DirectFB-examples package contains a set of simple + DirectFB applications that can be used to test and demonstrate + various DirectFB features. + + http://directfb.org/downloads/Extras/README.DirectFB-examples diff --git a/package/directfb-examples/directfb-examples.hash b/package/directfb-examples/directfb-examples.hash new file mode 100644 index 00000000..9c7f7c25 --- /dev/null +++ b/package/directfb-examples/directfb-examples.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 9a2104cc4da8123c8371813551b66b943198979f745cbebc034bb5e10844122a DirectFB-examples-1.7.0.tar.gz +sha256 f91483684678e8aa8ccc4ee0ede3140b0494f8305e162695c7e6e3f83e54f236 COPYING diff --git a/package/directfb-examples/directfb-examples.mk b/package/directfb-examples/directfb-examples.mk new file mode 100644 index 00000000..46263da7 --- /dev/null +++ b/package/directfb-examples/directfb-examples.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# directfb-examples +# +################################################################################ + +DIRECTFB_EXAMPLES_VERSION = 1.7.0 +DIRECTFB_EXAMPLES_SITE = http://www.directfb.org/downloads/Extras +DIRECTFB_EXAMPLES_SOURCE = DirectFB-examples-$(DIRECTFB_EXAMPLES_VERSION).tar.gz +DIRECTFB_EXAMPLES_LICENSE = MIT +DIRECTFB_EXAMPLES_LICENSE_FILES = COPYING +DIRECTFB_EXAMPLES_DEPENDENCIES = directfb + +ifeq ($(BR2_STATIC_LIBS),y) +DIRECTFB_EXAMPLES_CONF_OPTS += LIBS=-lstdc++ +endif + +$(eval $(autotools-package)) diff --git a/package/directfb/0001-fix-missing-davinci-voodoo-header.patch b/package/directfb/0001-fix-missing-davinci-voodoo-header.patch new file mode 100644 index 00000000..6ad4958f --- /dev/null +++ b/package/directfb/0001-fix-missing-davinci-voodoo-header.patch @@ -0,0 +1,1726 @@ +The archive of directfb-1.6.3 is still missing some header files against +the tagged git tree of directfb. The following files are missing. + +gfxdrivers/davinci/davinci_c64x.h +gfxdrivers/davinci/davincifb.h +gfxdrivers/davinci/davinci_gfxdriver.h +tests/voodoo/voodoo_test.h + +The headers of course are needed to be able to build every module of +directfb. The headers are taken from the git tree of directfb +http://git.directfb.org/?p=core/DirectFB.git;a=commit;h=38b784549bc59bb07c58bb29667cb658695d39a7, +tag DIRECTFB_1_6_3, SHA1ID 38b784549bc59bb07c58bb29667cb658695d39a7. + +Signed-off-by: Carsten Schoenert + +diff -puNr -Naur directfb-1.6.3-orig/gfxdrivers/davinci/davinci_c64x.h directfb-1.6.3/gfxdrivers/davinci/davinci_c64x.h +--- directfb-1.6.3-orig/gfxdrivers/davinci/davinci_c64x.h 1970-01-01 01:00:00.000000000 +0100 ++++ directfb-1.6.3/gfxdrivers/davinci/davinci_c64x.h 2013-04-07 21:33:25.928530187 +0200 +@@ -0,0 +1,935 @@ ++/* ++ TI Davinci driver - C64X+ DSP Library ++ ++ (c) Copyright 2008 directfb.org ++ (c) Copyright 2007 Telio AG ++ ++ Written by Denis Oliver Kropp and ++ Olaf Dreesen . ++ ++ All rights reserved. ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License ++ version 2 as published by the Free Software Foundation. ++ ++ This library 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 library; if not, write to the ++ Free Software Foundation, Inc., 59 Temple Place - Suite 330, ++ Boston, MA 02111-1307, USA. ++*/ ++ ++#ifndef __DAVINCI_C64X_H__ ++#define __DAVINCI_C64X_H__ ++ ++#include ++ ++#include ++ ++#include ++#include ++ ++#include ++ ++#define mb() __asm__ __volatile__ ("" : : : "memory") ++ ++/**********************************************************************************************************************/ ++ ++typedef struct { ++ int magic; ++ ++ int fd; ++ c64xTaskControl *ctl; ++ void *mem; ++ ++ c64xTask *QueueL; ++} DavinciC64x; ++ ++typedef struct { ++ int magic; ++ unsigned int max_tasks; ++ unsigned int num_tasks; ++ c64xTask *tasks; ++} DavinciC64xTasks; ++ ++typedef enum { ++ C64X_TEF_NONE = 0x0000, ++ C64X_TEF_RESET = 0x0001 ++} DavinciC64xEmitFlags; ++ ++/**********************************************************************************************************************/ ++ ++DFBResult davinci_c64x_open ( DavinciC64x *c64x ); ++ ++DFBResult davinci_c64x_close ( DavinciC64x *c64x ); ++ ++DFBResult davinci_c64x_wait_low( DavinciC64x *c64x ); ++ ++/**********************************************************************************************************************/ ++ ++DFBResult davinci_c64x_tasks_init ( DavinciC64xTasks *tasks, ++ unsigned int size ); ++ ++DFBResult davinci_c64x_tasks_destroy( DavinciC64xTasks *tasks ); ++ ++/**********************************************************************************************************************/ ++ ++DFBResult davinci_c64x_emit_tasks( DavinciC64x *c64x, ++ DavinciC64xTasks *tasks, ++ DavinciC64xEmitFlags flags ); ++ ++/**********************************************************************************************************************/ ++ ++static const char *state_names[] = { "DONE", "ERROR", "TODO", "RUNNING" }; ++ ++static inline c64xTask * ++c64x_get_task( DavinciC64x *c64x ) ++{ ++ c64xTaskControl *ctl = c64x->ctl; ++ uint32_t idx = ctl->QL_arm; ++ uint32_t next = (idx + 1) & C64X_QUEUE_MASK; ++ c64xTask *task = &c64x->QueueL[idx]; ++ int loops = 0; ++ uint32_t idle = 0; ++ ++ /* Wait for the entry (and next) to be processed by the DSP (rare case). */ ++ while (task->c64x_flags & C64X_FLAG_TODO || ctl->QL_dsp == next) { ++ if (loops > 666 || (idle && ctl->idlecounter - idle > 666)) { ++ c64xTask *dsp_task = &c64x->QueueL[ctl->QL_dsp]; ++ ++ D_PERROR( "Davinci/C64X+: Blocked! [DSP %d / %d (%s), ARM %d / %d (%s)]\n", ++ ctl->QL_dsp, ++ (dsp_task->c64x_function >> 2) & 0x3fff, ++ state_names[dsp_task->c64x_function & 3], ++ ctl->QL_arm, ++ (task->c64x_function >> 2) & 0x3fff, ++ state_names[task->c64x_function & 3] ); ++ ++ break; ++ } ++ ++ idle = ctl->idlecounter; ++ ++ /* Queue is full, waiting 10-20ms should not be too bad. */ ++ if (loops++ > 10) ++ usleep( 5000 ); ++ } ++ ++ return task; ++} ++ ++static inline void ++c64x_submit_task( DavinciC64x *c64x, c64xTask *task ) ++{ ++ c64xTaskControl *ctl = c64x->ctl; ++ uint32_t idx = ctl->QL_arm; ++ uint32_t next = (idx + 1) & C64X_QUEUE_MASK; ++ ++ mb(); ++ ++ ctl->QL_arm = next; ++ ++ mb(); ++} ++ ++/**********************************************************************************************************************/ ++ ++static inline void ++davinci_c64x_wb_inv_range( DavinciC64x *c64x, ++ unsigned long start, ++ u32 length, ++ u32 func ) ++{ ++ c64xTask *task = c64x_get_task( c64x ); ++ ++ task->c64x_arg[0] = start; ++ task->c64x_arg[1] = length; ++ task->c64x_arg[2] = func; ++ ++ task->c64x_function = C64X_WB_INV_RANGE | C64X_FLAG_TODO; ++ ++ c64x_submit_task( c64x, task ); ++} ++ ++static inline void ++davinci_c64x_write_back_all( DavinciC64x *c64x ) ++{ ++ c64xTask *task = c64x_get_task( c64x ); ++ ++ task->c64x_function = C64X_WRITE_BACK_ALL | C64X_FLAG_TODO; ++ ++ c64x_submit_task( c64x, task ); ++} ++ ++/**********************************************************************************************************************/ ++ ++static inline void ++davinci_c64x_load_block__L( DavinciC64xTasks *tasks, ++ unsigned long words, ++ u32 num, ++ u32 flags ) ++{ ++ c64xTask *task = &tasks->tasks[tasks->num_tasks]; ++ ++ D_ASSERT( tasks->num_tasks < tasks->max_tasks ); ++ ++ task->c64x_arg[0] = words; ++ task->c64x_arg[1] = num; ++ task->c64x_arg[2] = flags; ++ ++ task->c64x_function = C64X_LOAD_BLOCK | C64X_FLAG_TODO; ++ ++ tasks->num_tasks++; ++} ++ ++static inline void ++davinci_c64x_load_block( DavinciC64x *c64x, ++ unsigned long words, ++ u32 num, ++ u32 flags ) ++{ ++ c64xTask *task = c64x_get_task( c64x ); ++ ++ task->c64x_arg[0] = words; ++ task->c64x_arg[1] = num; ++ task->c64x_arg[2] = flags; ++ ++ task->c64x_function = C64X_LOAD_BLOCK | C64X_FLAG_TODO; ++ ++ c64x_submit_task( c64x, task ); ++} ++ ++static inline void ++davinci_c64x_fetch_uyvy( DavinciC64x *c64x, ++ unsigned long dest, ++ unsigned long source, ++ u32 pitch, ++ u32 height, ++ u32 flags ) ++{ ++ c64xTask *task = c64x_get_task( c64x ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = source; ++ task->c64x_arg[2] = pitch; ++ task->c64x_arg[3] = height; ++ task->c64x_arg[4] = flags; ++ ++ task->c64x_function = C64X_FETCH_UYVY | C64X_FLAG_TODO; ++ ++ c64x_submit_task( c64x, task ); ++} ++ ++static inline void ++davinci_c64x_mc( DavinciC64x *c64x, ++ unsigned long dest, ++ u32 dpitch, ++ unsigned long source0, ++ unsigned long source1, ++ u32 spitch, ++ u32 height, ++ int func ) ++{ ++ c64xTask *task = c64x_get_task( c64x ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = dpitch; ++ task->c64x_arg[2] = source0; ++ task->c64x_arg[3] = source1; ++ task->c64x_arg[4] = spitch; ++ task->c64x_arg[5] = height; ++ ++ task->c64x_function = func | C64X_FLAG_TODO; ++ ++ c64x_submit_task( c64x, task ); ++} ++ ++static inline void ++davinci_c64x_put_idct_uyvy_16x16__L( DavinciC64xTasks *tasks, ++ unsigned long dest, ++ u32 pitch, ++ u32 flags ) ++{ ++ c64xTask *task = &tasks->tasks[tasks->num_tasks]; ++ ++ D_ASSERT( tasks->num_tasks < tasks->max_tasks ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = pitch; ++ task->c64x_arg[2] = flags; ++ ++ task->c64x_function = C64X_PUT_IDCT_UYVY_16x16 | C64X_FLAG_TODO; ++ ++ tasks->num_tasks++; ++} ++ ++static inline void ++davinci_c64x_put_idct_uyvy_16x16( DavinciC64x *c64x, ++ unsigned long dest, ++ u32 pitch, ++ u32 flags ) ++{ ++ c64xTask *task = c64x_get_task( c64x ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = pitch; ++ task->c64x_arg[2] = flags; ++ ++ task->c64x_function = C64X_PUT_IDCT_UYVY_16x16 | C64X_FLAG_TODO; ++ ++ c64x_submit_task( c64x, task ); ++} ++ ++static inline void ++davinci_c64x_put_mc_uyvy_16x16__L( DavinciC64xTasks *tasks, ++ unsigned long dest, ++ u32 pitch, ++ u32 flags ) ++{ ++ c64xTask *task = &tasks->tasks[tasks->num_tasks]; ++ ++ D_ASSERT( tasks->num_tasks < tasks->max_tasks ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = pitch; ++ task->c64x_arg[2] = flags; ++ ++ task->c64x_function = C64X_PUT_MC_UYVY_16x16 | C64X_FLAG_TODO; ++ ++ tasks->num_tasks++; ++} ++ ++static inline void ++davinci_c64x_put_mc_uyvy_16x16( DavinciC64x *c64x, ++ unsigned long dest, ++ u32 pitch, ++ u32 flags ) ++{ ++ c64xTask *task = c64x_get_task( c64x ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = pitch; ++ task->c64x_arg[2] = flags; ++ ++ task->c64x_function = C64X_PUT_MC_UYVY_16x16 | C64X_FLAG_TODO; ++ ++ c64x_submit_task( c64x, task ); ++} ++ ++static inline void ++davinci_c64x_put_sum_uyvy_16x16__L( DavinciC64xTasks *tasks, ++ unsigned long dest, ++ u32 pitch, ++ u32 flags ) ++{ ++ c64xTask *task = &tasks->tasks[tasks->num_tasks]; ++ ++ D_ASSERT( tasks->num_tasks < tasks->max_tasks ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = pitch; ++ task->c64x_arg[2] = flags; ++ ++ task->c64x_function = C64X_PUT_SUM_UYVY_16x16 | C64X_FLAG_TODO; ++ ++ tasks->num_tasks++; ++} ++ ++static inline void ++davinci_c64x_put_sum_uyvy_16x16( DavinciC64x *c64x, ++ unsigned long dest, ++ u32 pitch, ++ u32 flags ) ++{ ++ c64xTask *task = c64x_get_task( c64x ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = pitch; ++ task->c64x_arg[2] = flags; ++ ++ task->c64x_function = C64X_PUT_SUM_UYVY_16x16 | C64X_FLAG_TODO; ++ ++ c64x_submit_task( c64x, task ); ++} ++ ++static inline void ++davinci_c64x_dva_begin_frame__L( DavinciC64xTasks *tasks, ++ u32 pitch, ++ unsigned long current, ++ unsigned long past, ++ unsigned long future, ++ u32 flags ) ++{ ++ c64xTask *task = &tasks->tasks[tasks->num_tasks]; ++ ++ D_ASSERT( tasks->num_tasks < tasks->max_tasks ); ++ ++ task->c64x_arg[0] = pitch; ++ task->c64x_arg[1] = current; ++ task->c64x_arg[2] = past; ++ task->c64x_arg[3] = future; ++ task->c64x_arg[4] = flags; ++ ++ task->c64x_function = C64X_DVA_BEGIN_FRAME | C64X_FLAG_TODO; ++ ++ tasks->num_tasks++; ++} ++ ++static inline void ++davinci_c64x_dva_begin_frame( DavinciC64x *c64x, ++ u32 pitch, ++ unsigned long current, ++ unsigned long past, ++ unsigned long future, ++ u32 flags ) ++{ ++ c64xTask *task = c64x_get_task( c64x ); ++ ++ task->c64x_arg[0] = pitch; ++ task->c64x_arg[1] = current; ++ task->c64x_arg[2] = past; ++ task->c64x_arg[3] = future; ++ task->c64x_arg[4] = flags; ++ ++ task->c64x_function = C64X_DVA_BEGIN_FRAME | C64X_FLAG_TODO; ++ ++ c64x_submit_task( c64x, task ); ++} ++ ++static inline void ++davinci_c64x_dva_motion_block__L( DavinciC64xTasks *tasks, ++ unsigned long macroblock ) ++{ ++ c64xTask *task = &tasks->tasks[tasks->num_tasks]; ++ ++ D_ASSERT( tasks->num_tasks < tasks->max_tasks ); ++ ++ task->c64x_arg[0] = macroblock; ++ ++ task->c64x_function = C64X_DVA_MOTION_BLOCK | C64X_FLAG_TODO; ++ ++ tasks->num_tasks++; ++} ++ ++static inline void ++davinci_c64x_dva_motion_block( DavinciC64x *c64x, ++ unsigned long macroblock ) ++{ ++ c64xTask *task = c64x_get_task( c64x ); ++ ++ task->c64x_arg[0] = macroblock; ++ ++ task->c64x_function = C64X_DVA_MOTION_BLOCK | C64X_FLAG_TODO; ++ ++ c64x_submit_task( c64x, task ); ++} ++ ++/**********************************************************************************************************************/ ++ ++static inline void ++davinci_c64x_dva_idct( DavinciC64x *c64x, ++ unsigned long dest, ++ u32 pitch, ++ unsigned long source ) ++{ ++ c64xTask *task = c64x_get_task( c64x ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = pitch; ++ task->c64x_arg[2] = source; ++ ++ task->c64x_function = C64X_DVA_IDCT | C64X_FLAG_TODO; ++ ++ c64x_submit_task( c64x, task ); ++} ++ ++/**********************************************************************************************************************/ ++ ++static inline void ++davinci_c64x_put_uyvy_16x16( DavinciC64x *c64x, ++ unsigned long dest, ++ u32 pitch, ++ unsigned long source, ++ u32 flags ) ++{ ++ c64xTask *task = c64x_get_task( c64x ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = pitch; ++ task->c64x_arg[2] = source; ++ task->c64x_arg[3] = flags; ++ ++ task->c64x_function = C64X_PUT_UYVY_16x16 | C64X_FLAG_TODO; ++ ++ c64x_submit_task( c64x, task ); ++} ++ ++static inline void ++davinci_c64x_dither_argb__L( DavinciC64xTasks *tasks, ++ unsigned long dst_rgb, ++ unsigned long dst_alpha, ++ u32 dst_pitch, ++ unsigned long source, ++ u32 src_pitch, ++ u32 width, ++ u32 height ) ++{ ++ c64xTask *task = &tasks->tasks[tasks->num_tasks]; ++ ++ D_ASSERT( tasks->num_tasks < tasks->max_tasks ); ++ ++ task->c64x_arg[0] = dst_rgb; ++ task->c64x_arg[1] = dst_alpha; ++ task->c64x_arg[2] = dst_pitch; ++ task->c64x_arg[3] = source; ++ task->c64x_arg[4] = src_pitch; ++ task->c64x_arg[5] = width; ++ task->c64x_arg[6] = height; ++ ++ task->c64x_function = C64X_DITHER_ARGB | C64X_FLAG_TODO; ++ ++ tasks->num_tasks++; ++} ++ ++static inline void ++davinci_c64x_dither_argb( DavinciC64x *c64x, ++ unsigned long dst_rgb, ++ unsigned long dst_alpha, ++ u32 dst_pitch, ++ unsigned long source, ++ u32 src_pitch, ++ u32 width, ++ u32 height ) ++{ ++ c64xTask *task = c64x_get_task( c64x ); ++ ++ task->c64x_arg[0] = dst_rgb; ++ task->c64x_arg[1] = dst_alpha; ++ task->c64x_arg[2] = dst_pitch; ++ task->c64x_arg[3] = source; ++ task->c64x_arg[4] = src_pitch; ++ task->c64x_arg[5] = width; ++ task->c64x_arg[6] = height; ++ ++ task->c64x_function = C64X_DITHER_ARGB | C64X_FLAG_TODO; ++ ++ c64x_submit_task( c64x, task ); ++} ++ ++static inline void ++davinci_c64x_fill_16__L( DavinciC64xTasks *tasks, ++ unsigned long dest, ++ u32 pitch, ++ u32 width, ++ u32 height, ++ u32 value ) ++{ ++ c64xTask *task = &tasks->tasks[tasks->num_tasks]; ++ ++ D_ASSERT( tasks->num_tasks < tasks->max_tasks ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = pitch; ++ task->c64x_arg[2] = width; ++ task->c64x_arg[3] = height; ++ task->c64x_arg[4] = value; ++ ++ task->c64x_function = C64X_FILL_16 | C64X_FLAG_TODO; ++ ++ tasks->num_tasks++; ++} ++ ++static inline void ++davinci_c64x_fill_16( DavinciC64x *c64x, ++ unsigned long dest, ++ u32 pitch, ++ u32 width, ++ u32 height, ++ u32 value ) ++{ ++ c64xTask *task = c64x_get_task( c64x ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = pitch; ++ task->c64x_arg[2] = width; ++ task->c64x_arg[3] = height; ++ task->c64x_arg[4] = value; ++ ++ task->c64x_function = C64X_FILL_16 | C64X_FLAG_TODO; ++ ++ c64x_submit_task( c64x, task ); ++} ++ ++static inline void ++davinci_c64x_fill_32__L( DavinciC64xTasks *tasks, ++ unsigned long dest, ++ u32 pitch, ++ u32 width, ++ u32 height, ++ u32 value ) ++{ ++ c64xTask *task = &tasks->tasks[tasks->num_tasks]; ++ ++ D_ASSERT( tasks->num_tasks < tasks->max_tasks ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = pitch; ++ task->c64x_arg[2] = width; ++ task->c64x_arg[3] = height; ++ task->c64x_arg[4] = value; ++ ++ task->c64x_function = C64X_FILL_32 | C64X_FLAG_TODO; ++ ++ tasks->num_tasks++; ++} ++ ++static inline void ++davinci_c64x_fill_32( DavinciC64x *c64x, ++ unsigned long dest, ++ u32 pitch, ++ u32 width, ++ u32 height, ++ u32 value ) ++{ ++ c64xTask *task = c64x_get_task( c64x ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = pitch; ++ task->c64x_arg[2] = width; ++ task->c64x_arg[3] = height; ++ task->c64x_arg[4] = value; ++ ++ task->c64x_function = C64X_FILL_32 | C64X_FLAG_TODO; ++ ++ c64x_submit_task( c64x, task ); ++} ++ ++static inline void ++davinci_c64x_blit_16__L( DavinciC64xTasks *tasks, ++ unsigned long dest, ++ u32 dpitch, ++ unsigned long src, ++ u32 spitch, ++ u32 width, ++ u32 height ) ++{ ++ c64xTask *task = &tasks->tasks[tasks->num_tasks]; ++ ++ D_ASSERT( tasks->num_tasks < tasks->max_tasks ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = dpitch; ++ task->c64x_arg[2] = src; ++ task->c64x_arg[3] = spitch; ++ task->c64x_arg[4] = width; ++ task->c64x_arg[5] = height; ++ ++ task->c64x_function = C64X_COPY_16 | C64X_FLAG_TODO; ++ ++ tasks->num_tasks++; ++} ++ ++static inline void ++davinci_c64x_blit_16( DavinciC64x *c64x, ++ unsigned long dest, ++ u32 dpitch, ++ unsigned long src, ++ u32 spitch, ++ u32 width, ++ u32 height ) ++{ ++ c64xTask *task = c64x_get_task( c64x ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = dpitch; ++ task->c64x_arg[2] = src; ++ task->c64x_arg[3] = spitch; ++ task->c64x_arg[4] = width; ++ task->c64x_arg[5] = height; ++ ++ task->c64x_function = C64X_COPY_16 | C64X_FLAG_TODO; ++ ++ c64x_submit_task( c64x, task ); ++} ++ ++static inline void ++davinci_c64x_blit_32__L( DavinciC64xTasks *tasks, ++ unsigned long dest, ++ u32 dpitch, ++ unsigned long src, ++ u32 spitch, ++ u32 width, ++ u32 height ) ++{ ++ c64xTask *task = &tasks->tasks[tasks->num_tasks]; ++ ++ D_ASSERT( tasks->num_tasks < tasks->max_tasks ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = dpitch; ++ task->c64x_arg[2] = src; ++ task->c64x_arg[3] = spitch; ++ task->c64x_arg[4] = width; ++ task->c64x_arg[5] = height; ++ ++ task->c64x_function = C64X_COPY_32 | C64X_FLAG_TODO; ++ ++ tasks->num_tasks++; ++} ++ ++static inline void ++davinci_c64x_blit_32( DavinciC64x *c64x, ++ unsigned long dest, ++ u32 dpitch, ++ unsigned long src, ++ u32 spitch, ++ u32 width, ++ u32 height ) ++{ ++ c64xTask *task = c64x_get_task( c64x ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = dpitch; ++ task->c64x_arg[2] = src; ++ task->c64x_arg[3] = spitch; ++ task->c64x_arg[4] = width; ++ task->c64x_arg[5] = height; ++ ++ task->c64x_function = C64X_COPY_32 | C64X_FLAG_TODO; ++ ++ c64x_submit_task( c64x, task ); ++} ++ ++static inline void ++davinci_c64x_stretch_32__L( DavinciC64xTasks *tasks, ++ unsigned long dest, ++ u32 dpitch, ++ unsigned long src, ++ u32 spitch, ++ u32 dw, ++ u32 dh, ++ u32 sw, ++ u32 sh, ++ const DFBRegion *clip ) ++{ ++ c64xTask *task = &tasks->tasks[tasks->num_tasks]; ++ ++ D_ASSERT( tasks->num_tasks < tasks->max_tasks ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = src; ++ task->c64x_arg[2] = dpitch | (spitch << 16); ++ task->c64x_arg[3] = dh | (dw << 16); ++ task->c64x_arg[4] = sh | (sw << 16); ++ task->c64x_arg[5] = clip->x2 | (clip->y2 << 16); ++ task->c64x_arg[6] = clip->x1 | (clip->y1 << 16); ++ ++ if (sw > dw && sh > dh) ++ task->c64x_function = C64X_STRETCH_32_down | C64X_FLAG_TODO; ++ else ++ task->c64x_function = C64X_STRETCH_32_up | C64X_FLAG_TODO; ++ ++ tasks->num_tasks++; ++} ++ ++static inline void ++davinci_c64x_stretch_32( DavinciC64x *c64x, ++ unsigned long dest, ++ u32 dpitch, ++ unsigned long src, ++ u32 spitch, ++ u32 dw, ++ u32 dh, ++ u32 sw, ++ u32 sh, ++ const DFBRegion *clip ) ++{ ++ c64xTask *task = c64x_get_task( c64x ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = src; ++ task->c64x_arg[2] = dpitch | (spitch << 16); ++ task->c64x_arg[3] = dh | (dw << 16); ++ task->c64x_arg[4] = sh | (sw << 16); ++ task->c64x_arg[5] = clip->x2 | (clip->y2 << 16); ++ task->c64x_arg[6] = clip->x1 | (clip->y1 << 16); ++ ++ if (sw > dw && sh > dh) ++ task->c64x_function = C64X_STRETCH_32_down | C64X_FLAG_TODO; ++ else ++ task->c64x_function = C64X_STRETCH_32_up | C64X_FLAG_TODO; ++ ++ c64x_submit_task( c64x, task ); ++} ++ ++static inline void ++davinci_c64x_blit_blend_32__L( DavinciC64xTasks *tasks, ++ u32 sub_func, ++ unsigned long dest, ++ u32 dpitch, ++ unsigned long src, ++ u32 spitch, ++ u32 width, ++ u32 height, ++ u32 argb, ++ u8 alpha ) ++{ ++ c64xTask *task = &tasks->tasks[tasks->num_tasks]; ++ ++ D_ASSERT( tasks->num_tasks < tasks->max_tasks ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = dpitch; ++ task->c64x_arg[2] = src; ++ task->c64x_arg[3] = spitch; ++ task->c64x_arg[4] = width | (height << 16); ++ task->c64x_arg[5] = argb; ++ task->c64x_arg[6] = alpha; ++ ++ task->c64x_function = (sub_func << 16) | C64X_BLEND_32 | C64X_FLAG_TODO; ++ ++ tasks->num_tasks++; ++} ++ ++static inline void ++davinci_c64x_blit_blend_32( DavinciC64x *c64x, ++ u32 sub_func, ++ unsigned long dest, ++ u32 dpitch, ++ unsigned long src, ++ u32 spitch, ++ u32 width, ++ u32 height, ++ u32 argb, ++ u8 alpha ) ++{ ++ c64xTask *task = c64x_get_task( c64x ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = dpitch; ++ task->c64x_arg[2] = src; ++ task->c64x_arg[3] = spitch; ++ task->c64x_arg[4] = width | (height << 16); ++ task->c64x_arg[5] = argb; ++ task->c64x_arg[6] = alpha; ++ ++ task->c64x_function = (sub_func << 16) | C64X_BLEND_32 | C64X_FLAG_TODO; ++ ++ c64x_submit_task( c64x, task ); ++} ++ ++static inline void ++davinci_c64x_blit_keyed_16__L( DavinciC64xTasks *tasks, ++ unsigned long dest, ++ u32 dpitch, ++ unsigned long src, ++ u32 spitch, ++ u32 width, ++ u32 height, ++ u32 key, ++ u32 mask ) ++{ ++ c64xTask *task = &tasks->tasks[tasks->num_tasks]; ++ ++ D_ASSERT( tasks->num_tasks < tasks->max_tasks ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = (dpitch << 16) | (spitch & 0xffff); ++ task->c64x_arg[2] = src; ++ task->c64x_arg[3] = width; ++ task->c64x_arg[4] = height; ++ task->c64x_arg[5] = key; ++ task->c64x_arg[6] = mask; ++ ++ task->c64x_function = C64X_COPY_KEYED_16 | C64X_FLAG_TODO; ++ ++ tasks->num_tasks++; ++} ++ ++static inline void ++davinci_c64x_blit_keyed_16( DavinciC64x *c64x, ++ unsigned long dest, ++ u32 dpitch, ++ unsigned long src, ++ u32 spitch, ++ u32 width, ++ u32 height, ++ u32 key, ++ u32 mask ) ++{ ++ c64xTask *task = c64x_get_task( c64x ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = (dpitch << 16) | (spitch & 0xffff); ++ task->c64x_arg[2] = src; ++ task->c64x_arg[3] = width; ++ task->c64x_arg[4] = height; ++ task->c64x_arg[5] = key; ++ task->c64x_arg[6] = mask; ++ ++ task->c64x_function = C64X_COPY_KEYED_16 | C64X_FLAG_TODO; ++ ++ c64x_submit_task( c64x, task ); ++} ++ ++static inline void ++davinci_c64x_blit_keyed_32__L( DavinciC64xTasks *tasks, ++ unsigned long dest, ++ u32 dpitch, ++ unsigned long src, ++ u32 spitch, ++ u32 width, ++ u32 height, ++ u32 key, ++ u32 mask ) ++{ ++ c64xTask *task = &tasks->tasks[tasks->num_tasks]; ++ ++ D_ASSERT( tasks->num_tasks < tasks->max_tasks ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = (dpitch << 16) | (spitch & 0xffff); ++ task->c64x_arg[2] = src; ++ task->c64x_arg[3] = width; ++ task->c64x_arg[4] = height; ++ task->c64x_arg[5] = key; ++ task->c64x_arg[6] = mask; ++ ++ task->c64x_function = C64X_COPY_KEYED_32 | C64X_FLAG_TODO; ++ ++ tasks->num_tasks++; ++} ++ ++static inline void ++davinci_c64x_blit_keyed_32( DavinciC64x *c64x, ++ unsigned long dest, ++ u32 dpitch, ++ unsigned long src, ++ u32 spitch, ++ u32 width, ++ u32 height, ++ u32 key, ++ u32 mask ) ++{ ++ c64xTask *task = c64x_get_task( c64x ); ++ ++ task->c64x_arg[0] = dest; ++ task->c64x_arg[1] = (dpitch << 16) | (spitch & 0xffff); ++ task->c64x_arg[2] = src; ++ task->c64x_arg[3] = width; ++ task->c64x_arg[4] = height; ++ task->c64x_arg[5] = key; ++ task->c64x_arg[6] = mask; ++ ++ task->c64x_function = C64X_COPY_KEYED_32 | C64X_FLAG_TODO; ++ ++ c64x_submit_task( c64x, task ); ++} ++ ++#endif ++ +diff -puNr -Naur directfb-1.6.3-orig/gfxdrivers/davinci/davincifb.h directfb-1.6.3/gfxdrivers/davinci/davincifb.h +--- directfb-1.6.3-orig/gfxdrivers/davinci/davincifb.h 1970-01-01 01:00:00.000000000 +0100 ++++ directfb-1.6.3/gfxdrivers/davinci/davincifb.h 2013-04-07 21:33:21.488622184 +0200 +@@ -0,0 +1,581 @@ ++/* ++ * Copyright (C) 2006 Texas Instruments Inc ++ * ++ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ * ++ * File: davincifb.h ++ */ ++ ++#ifndef DAVINVI_VPBE_H ++#define DAVINVI_VPBE_H ++ ++/* include Linux files */ ++#include ++ ++/* define the custom FBIO_WAITFORVSYNC ioctl */ ++#define FBIO_WAITFORVSYNC _IOW('F', 0x20, u_int32_t) ++#define FBIO_SETATTRIBUTE _IOW('F', 0x21, struct fb_fillrect) ++ ++/* Backported IOCTLS. */ ++#define FBIO_SETPOSX _IOW('F', 0x22, u_int32_t) ++#define FBIO_SETPOSY _IOW('F', 0x23, u_int32_t) ++#define FBIO_SETZOOM _IOW('F', 0x24, struct zoom_params) ++#define FBIO_GETSTD _IOR('F', 0x25, u_int32_t) ++#define FBIO_RESIZER _IOW('F', 0x26, struct vpfe_resizer_params) ++#define FBIO_SYNC _IOW('F', 0x27, u_int32_t) ++ ++typedef struct zoom_params { ++ u_int32_t window_id; ++ u_int32_t zoom_h; ++ u_int32_t zoom_v; ++} zoom_params_t; ++ ++typedef struct vpfe_resizer_params ++{ ++ u_int32_t rsz_cnt; //busy-lock ++ u_int32_t out_size; //busy-lock ++ u_int32_t in_start; //busy-lock ++ u_int32_t in_size; //busy-lock ++ u_int32_t sdr_inadd; //shadowed ++ u_int32_t sdr_inoff; //shadowed ++ u_int32_t sdr_outadd; //shadowed ++ u_int32_t sdr_outoff; //shadowed ++ u_int32_t hfilt[16]; //busy-lock ++ u_int32_t vfilt[16]; //busy-lock ++ u_int32_t yenh; //busy-lock ++} vpfe_resizer_params_t; ++ ++typedef struct fb_set_start { ++ int offset; /* offset from smem_start */ ++ unsigned long physical; /* absolute physical address when offset < 0 */ ++ ++ u_int64_t sync; /* input: target sync counter for change or 0 for no sync at all, ++ output: sync counter of actual change or 0 if still pending */ ++} fb_set_start_t; ++ ++ ++#ifdef _IOC_TYPECHECK ++#undef _IOC_TYPECHECK ++#define _IOC_TYPECHECK(x) (sizeof(x)) ++#endif ++ ++#define RAM_CLUT_SIZE 256*3 ++#define FBIO_ENABLE_DISABLE_WIN \ ++ _IOW('F', 0x30, unsigned char) ++#define FBIO_SET_BITMAP_BLEND_FACTOR \ ++ _IOW('F', 0x31, vpbe_bitmap_blend_params_t) ++#define FBIO_SET_BITMAP_WIN_RAM_CLUT \ ++ _IOW('F', 0x32, unsigned char)*RAM_CLUT_SIZE) ++#define FBIO_ENABLE_DISABLE_ATTRIBUTE_WIN \ ++ _IOW('F', 0x33, unsigned int) ++#define FBIO_GET_BLINK_INTERVAL \ ++ _IOR('F', 0x34, vpbe_blink_option_t) ++#define FBIO_SET_BLINK_INTERVAL \ ++ _IOW('F', 0x35, vpbe_blink_option_t) ++#define FBIO_GET_VIDEO_CONFIG_PARAMS \ ++ _IOR('F', 0x36, vpbe_video_config_params_t) ++#define FBIO_SET_VIDEO_CONFIG_PARAMS \ ++ _IOW('F', 0x37, vpbe_video_config_params_t) ++#define FBIO_GET_BITMAP_CONFIG_PARAMS \ ++ _IOR('F', 0x38, vpbe_bitmap_config_params_t) ++#define FBIO_SET_BITMAP_CONFIG_PARAMS \ ++ _IOW('F', 0x39, vpbe_bitmap_config_params_t) ++#define FBIO_SET_DCLK \ ++ _IOW('F', 0x40, vpbe_dclk_t) ++#define FBIO_SET_INTERFACE \ ++ _IOW('F', 0x41, unsigned char) ++#define FBIO_GET_INTERFACE \ ++ _IOR('F', 0x42, unsigned char) ++#define FBIO_QUERY_TIMING \ ++ _IOWR('F', 0x43, struct vpbe_mode_info) ++#define FBIO_SET_TIMING \ ++ _IOW('F', 0x44, struct vpbe_fb_videomode) ++#define FBIO_GET_TIMING \ ++ _IOR('F', 0x45, struct vpbe_fb_videomode) ++#define FBIO_SET_VENC_CLK_SOURCE \ ++ _IOW('F', 0x46, unsigned char) ++#define FBIO_SET_BACKG_COLOR \ ++ _IOW('F', 0x47, vpbe_backg_color_t) ++#define FBIO_ENABLE_DISPLAY \ ++ _IOW('F', 0x48, unsigned char) ++#define FBIO_SETPOS \ ++ _IOW('F', 0x49, u_int32_t) ++#define FBIO_SET_CURSOR \ ++ _IOW('F', 0x50, struct fb_cursor) ++#define FBIO_SET_START \ ++ _IOW('F', 0x66, struct fb_set_start) ++ ++/* ++ * Defines and Constants ++ */ ++#ifdef __KERNEL__ ++#define DAVINCIFB_DEVICE "davincifb" ++#define DAVINCIFB_DRIVER "davincifb" ++ ++#define MULTIPLE_BUFFERING 1 ++ ++#ifdef MULTIPLE_BUFFERING ++#define DOUBLE_BUF 2 ++#define TRIPLE_BUF 3 ++#else ++#define DOUBLE_BUF 1 ++#define TRIPLE_BUF 1 ++#endif ++ ++/* usage: if (is_win(info->fix.id, OSD0)) ... */ ++#define is_win(name, x) ((strcmp(name, x ## _FBNAME) == 0) ? 1 : 0) ++ ++/* ++ * display controller register I/O routines ++ */ ++u32 dispc_reg_in(u32 offset); ++u32 dispc_reg_out(u32 offset, u32 val); ++u32 dispc_reg_merge(u32 offset, u32 val, u32 mask); ++ ++#endif /*__KERNEL__*/ ++ ++/* Error return codes */ ++#define VPBE_INVALID_PARA_VALUE 700 ++#define VPBE_WRONG_WINDOW_ID 701 ++#define VPBE_CURRENTLY_IN_REQUIRED_MODE 702 ++#define VPBE_INSUFFICIENT_CLUT_VALUES 703 ++#define VPBE_CLUT_WRITE_TIMEOUT 704 ++#define VPBE_VID0_BUF_ADR_NULL 705 ++#define VPBE_WINDOW_NOT_DISABLED 706 ++#define VPBE_WINDOW_NOT_ENABLED 707 ++ ++#ifndef __KERNEL__ ++/* Window ID definations */ ++#define OSD0 0 ++#define VID0 1 ++#define OSD1 2 ++#define VID1 3 ++#endif ++ ++/* There are 4 framebuffers, each represented by an fb_info and ++ * a dm_win_info structure */ ++#define OSD0_FBNAME "dm_osd0_fb" ++#define OSD1_FBNAME "dm_osd1_fb" ++#define VID0_FBNAME "dm_vid0_fb" ++#define VID1_FBNAME "dm_vid1_fb" ++ ++/* FIXME: Digital LCD RGB matrix coefficients */ ++#define DLCD_DGY_VAL 0 ++#define DLCD_DRV_VAL 0 ++#define DLCD_DGU_VAL 0 ++#define DLCD_DBU_VAL 0 ++ ++/* Defines for bitmap format */ ++#define VPBE_BITMAP_BIT_1 1 ++#define VPBE_BITMAP_BIT_2 2 ++#define VPBE_BITMAP_BIT_4 4 ++#define VPBE_BITMAP_BIT_8 8 ++#define VPBE_BITMAP_RGB565 16 ++#define VPBE_VIDEO_YUV422 16 ++#define VPBE_VIDEO_RGB888 24 ++ ++/* Defines foe cursor parameter validation*/ ++#define MAX_CURSOR_WIDTH 0x3FF ++#define MAX_CURSOR_HEIGHT 0x1FF ++#define MAX_CURSOR_LINEWIDTH 7 ++ ++#define BASEX 0x80 ++#define BASEY 0x12 ++#define BASEX_DLCD 0x59 ++#define BASEY_DLCD 0x22 ++ ++/* ++ * Enumerations ++ */ ++/* Enum for blending factor */ ++typedef enum vpbe_blend_factor { ++ OSD_CONTRIBUTION_ZERO = 0, ++ OSD_CONTRIBUTION_1_BY_8 = 1, ++ OSD_CONTRIBUTION_2_BY_8 = 2, ++ OSD_CONTRIBUTION_3_BY_8 = 3, ++ OSD_CONTRIBUTION_4_BY_8 = 4, ++ OSD_CONTRIBUTION_5_BY_8 = 5, ++ OSD_CONTRIBUTION_6_BY_8 = 6, ++ OSD_CONTRIBUTION_ONE = 7 ++} vpbe_blend_factor_t; ++ ++/* Enum for Boolean variables */ ++typedef enum { ++ SET_0 = 0, ++ SET_1 = 1 ++} CB_CR_ORDER, ATTRIBUTE, ROM_RAM_CLUT; ++ ++/* Defines for Display Interface */ ++#define PRGB 0 ++#define COMPOSITE 1 ++#define SVIDEO 2 ++#define COMPONENT 3 ++#define RGB 4 ++#define YCC16 5 ++#define YCC8 6 ++#define SRGB 7 ++#define EPSON 8 ++#define CASIO1G 9 ++#define UDISP 10 ++#define STN 11 ++#define VPBE_MAX_INTERFACES 12 ++ ++/* Defines for Display Mode */ ++#define LCD 0 ++#define NTSC 1 ++#define PAL 2 ++#define P525 3 ++#define P625 4 ++ ++#define DEFAULT_MODE 0 ++#define P480 0 ++#define P400 1 ++#define P350 2 ++#define NON_EXISTING_MODE 255 ++/* Enable/Disable enum */ ++typedef enum { ++ VPBE_DISABLE = 0, ++ VPBE_ENABLE = 1 ++} ATTENUATION, TRANSPARENCY, EXPANSION, BLINKING; ++ ++typedef enum clk_source { ++ CLK_SOURCE_CLK27 = 0, ++ CLK_SOURCE_CLK54 = 1, ++ CLK_SOURCE_VPBECLK = 2 ++} CLK_SOURCE; ++ ++/* ++ * Structures and Union Definitions ++ */ ++ ++/* Structure for transparency and the blending factor for the bitmap window */ ++typedef struct vpbe_bitmap_blend_params { ++ unsigned int colorkey; /* color key to be blend */ ++ unsigned int enable_colorkeying; /* enable color keying */ ++ unsigned int bf; /* valid range from 0 to 7 only. */ ++} vpbe_bitmap_blend_params_t; ++ ++/* Structure for window expansion */ ++typedef struct vpbe_win_expansion { ++ EXPANSION horizontal; ++ EXPANSION vertical; /* 1: Enable 0:disable */ ++} vpbe_win_expansion_t; ++ ++/* Structure for OSD window blinking options */ ++typedef struct vpbe_blink_option { ++ BLINKING blinking; /* 1: Enable blinking 0: Disable */ ++ unsigned int interval; /* Valid only if blinking is 1 */ ++} vpbe_blink_option_t; ++ ++/* Structure for DCLK parameters */ ++typedef struct vpbe_dclk { ++ unsigned char dclk_pattern_width; ++ unsigned int dclk_pattern0; ++ unsigned int dclk_pattern1; ++ unsigned int dclk_pattern2; ++ unsigned int dclk_pattern3; ++} vpbe_dclk_t; ++ ++/* Structure for display format */ ++typedef struct vpbe_display_format { ++ unsigned char interface; /* Output interface type */ ++ unsigned char mode; /* output mode */ ++} vpbe_display_format_t; ++ ++/* Structure for background color */ ++typedef struct vpbe_backg_color { ++ unsigned char clut_select; /* 2: RAM CLUT 1:ROM1 CLUT 0:ROM0 CLUT */ ++ unsigned char color_offset; /* index of color */ ++} vpbe_backg_color_t; ++ ++/* Structure for Video window configurable parameters */ ++typedef struct vpbe_video_config_params { ++ CB_CR_ORDER cb_cr_order; /*Cb/Cr order in input data for a pixel. */ ++ /* 0: cb cr 1: cr cb */ ++ vpbe_win_expansion_t exp_info; /* HZ/VT Expansion enable disable */ ++} vpbe_video_config_params_t; ++ ++/*Union of structures giving the CLUT index for the 1, 2, 4 bit bitmap values.*/ ++typedef union vpbe_clut_idx { ++ struct _for_4bit_bimap { ++ unsigned char bitmap_val_0; ++ unsigned char bitmap_val_1; ++ unsigned char bitmap_val_2; ++ unsigned char bitmap_val_3; ++ unsigned char bitmap_val_4; ++ unsigned char bitmap_val_5; ++ unsigned char bitmap_val_6; ++ unsigned char bitmap_val_7; ++ unsigned char bitmap_val_8; ++ unsigned char bitmap_val_9; ++ unsigned char bitmap_val_10; ++ unsigned char bitmap_val_11; ++ unsigned char bitmap_val_12; ++ unsigned char bitmap_val_13; ++ unsigned char bitmap_val_14; ++ unsigned char bitmap_val_15; ++ } for_4bit_bimap; ++ struct _for_2bit_bimap { ++ unsigned char bitmap_val_0; ++ unsigned char dummy0[4]; ++ unsigned char bitmap_val_1; ++ unsigned char dummy1[4]; ++ unsigned char bitmap_val_2; ++ unsigned char dummy2[4]; ++ unsigned char bitmap_val_3; ++ } for_2bit_bimap; ++ struct _for_1bit_bimap { ++ unsigned char bitmap_val_0; ++ unsigned char dummy0[14]; ++ unsigned char bitmap_val_1; ++ } for_1bit_bimap; ++} vpbe_clut_idx_t; ++ ++/* Structure for bitmap window configurable parameters */ ++typedef struct vpbe_bitmap_config_params { ++ /* Only for bitmap width = 1,2,4 bits */ ++ vpbe_clut_idx_t clut_idx; ++ /* Attenuation value for YUV o/p for bitmap window */ ++ unsigned char attenuation_enable; ++ /* 0: ROM DM270, 1:ROM DM320, 2:RAM CLUT */ ++ unsigned char clut_select; ++} vpbe_bitmap_config_params_t; ++ ++/* Unioun for video/OSD configuration parameters */ ++typedef union vpbe_conf_params { ++ ++ struct vpbe_video_params { ++ CB_CR_ORDER cb_cr_order; ++ /* HZ/VT Expansion enable disable */ ++ vpbe_win_expansion_t exp_info; ++ } video_params; ++ ++ struct vpbe_bitmap_params { ++ /* Attenuation value for YUV o/p */ ++ ATTENUATION attenuation_enable; ++ /* 0: ROM DM270, 1: ROM DM320, 2:RAM CLUT */ ++ unsigned char clut_select; ++ /* Only for bitmap width = 1,2,4 bits */ ++ vpbe_clut_idx_t clut_idx; ++ /* 0: OSD window is bitmap window */ ++ /* 1: OSD window is attribute window */ ++ ATTRIBUTE enable_attribute; ++ /* To hold bps value. ++ Used to switch back from attribute to bitmap. */ ++ unsigned int stored_bits_per_pixel; ++ /* Blending information */ ++ vpbe_bitmap_blend_params_t blend_info; ++ /* OSD Blinking information */ ++ vpbe_blink_option_t blink_info; ++ } bitmap_params; ++ ++} vpbe_conf_params_t; ++ ++typedef struct vpbe_video_params vpbe_video_params_t; ++typedef struct vpbe_bitmap_params vpbe_bitmap_params_t; ++ ++/* Structure to hold window position */ ++typedef struct vpbe_window_position { ++ unsigned int xpos; /* X position of the window */ ++ unsigned int ypos; /* Y position of the window */ ++} vpbe_window_position_t; ++ ++#ifdef __KERNEL__ ++/* Structure for each window */ ++typedef struct vpbe_dm_win_info { ++ struct fb_info info; ++ vpbe_window_position_t win_pos; /* X,Y position of window */ ++ /* Size of window is already there in var_info structure. */ ++ ++ dma_addr_t fb_base_phys; /*framebuffer area */ ++ unsigned int fb_base; /*window memory pointer */ ++ unsigned int fb_size; /*memory size */ ++ unsigned int pseudo_palette[17]; ++ int alloc_fb_mem; ++ /*flag to identify if framebuffer area is fixed or not */ ++ unsigned long sdram_address; ++ struct vpbe_dm_info *dm; ++ unsigned char window_enable; /*Additions for all windows */ ++ zoom_params_t zoom; /*Zooming parameters */ ++ unsigned char field_frame_select; /*To select Field or frame */ ++ unsigned char numbufs; /*Number of buffers valid 2 or 3 */ ++ vpbe_conf_params_t conf_params; ++ /*window configuration parameter union pointer */ ++} vpbe_dm_win_info_t; ++#endif /*__KERNEL__*/ ++ ++/* ++ * Videmode structure for display interface and mode settings ++ */ ++typedef struct vpbe_fb_videomode { ++ unsigned char name[10]; /* Mode name ( NTSC , PAL) */ ++ unsigned int vmode; /* FB_MODE_INTERLACED or FB_MODE_NON_INTERLACED */ ++ unsigned int xres; /* X Resolution of the display */ ++ unsigned int yres; /* Y Resolution of the display */ ++ unsigned int fps; /* frames per second */ ++ /* Timing Parameters applicable for std = 0 only */ ++ unsigned int left_margin; ++ unsigned int right_margin; ++ unsigned int upper_margin; ++ unsigned int lower_margin; ++ unsigned int hsync_len; ++ unsigned int vsync_len; ++ unsigned int sync; /* 0: hsync -ve/vsync -ve */ ++ /*1: hsync -ve/vsync +ve */ ++ /*2: hsync +ve/vsync -ve */ ++ /*3: hsync +ve/vsync +ve */ ++ unsigned int basepx; /* Display x,y start position */ ++ unsigned int basepy; ++/* 1= Mode s available in modelist 0=Mode is not available in modelist */ ++ unsigned int std; ++} vpbe_fb_videomode_t; ++ ++/* Structure to interface videomode to application*/ ++typedef struct vpbe_mode_info { ++ vpbe_fb_videomode_t vid_mode; ++ unsigned char interface; ++ unsigned char mode_idx; ++} vpbe_mode_info_t; ++ ++#ifdef __KERNEL__ ++/* ++ * Structure for the driver holding information of windows, ++ * memory base addresses etc. ++ */ ++typedef struct vpbe_dm_info { ++ vpbe_dm_win_info_t *osd0; ++ vpbe_dm_win_info_t *osd1; ++ vpbe_dm_win_info_t *vid0; ++ vpbe_dm_win_info_t *vid1; ++ ++/* to map the registers */ ++ dma_addr_t mmio_base_phys; ++ unsigned int mmio_base; ++ unsigned int mmio_size; ++ ++ wait_queue_head_t vsync_wait; ++ unsigned int vsync_cnt; ++ int timeout; ++ ++ /* this is the function that configures the output device (NTSC/PAL/LCD) ++ * for the required output format (composite/s-video/component/rgb) ++ */ ++ void (*output_device_config) (void); ++ ++ struct device *dev; ++ ++ vpbe_backg_color_t backg; /* background color */ ++ vpbe_dclk_t dclk; /*DCLK parameters */ ++ vpbe_display_format_t display; /*Display interface and mode */ ++ vpbe_fb_videomode_t videomode; /*Cuurent videomode */ ++ char ram_clut[256][3]; /*RAM CLUT array */ ++ struct fb_cursor cursor; /* cursor config params from fb.h */ ++/*Flag that indicates whether any of the display is enabled or not*/ ++ int display_enable; ++} vpbe_dm_info_t; ++ ++/* ++ * Functions Definitions for 'davincifb' module ++ */ ++int vpbe_mem_alloc_window_buf(vpbe_dm_win_info_t *); ++int vpbe_mem_release_window_buf(vpbe_dm_win_info_t *); ++void init_display_function(vpbe_display_format_t *); ++int vpbe_mem_alloc_struct(vpbe_dm_win_info_t **); ++void set_vid0_default_conf(void); ++void set_vid1_default_conf(void); ++void set_osd0_default_conf(void); ++void set_osd1_default_conf(void); ++void set_cursor_default_conf(void); ++void set_dm_default_conf(void); ++void set_win_enable(char *, unsigned int); ++int within_vid0_limits(u32, u32, u32, u32); ++void vpbe_set_display_default(void); ++#ifdef __KERNEL__ ++void set_win_position(char *, u32, u32, u32, u32); ++void change_win_param(int); ++void set_interlaced(char *, unsigned int); ++#endif /* __KERNEL__ */ ++ ++/* ++ * Function definations for 'osd' module ++ */ ++ ++int vpbe_enable_window(vpbe_dm_win_info_t *); ++int vpbe_disable_window(vpbe_dm_win_info_t *); ++int vpbe_vid_osd_select_field_frame(u8 *, u8); ++int vpbe_bitmap_set_blend_factor(u8 *, vpbe_bitmap_blend_params_t *); ++int vpbe_bitmap_set_ram_clut(void); ++int vpbe_enable_disable_attribute_window(u32); ++int vpbe_get_blinking(u8 *, vpbe_blink_option_t *); ++int vpbe_set_blinking(u8 *, vpbe_blink_option_t *); ++int vpbe_set_vid_params(u8 *, vpbe_video_config_params_t *); ++int vpbe_get_vid_params(u8 *, vpbe_video_config_params_t *); ++int vpbe_bitmap_get_params(u8 *, vpbe_bitmap_config_params_t *); ++int vpbe_bitmap_set_params(u8 *, vpbe_bitmap_config_params_t *); ++int vpbe_set_cursor_params(struct fb_cursor *); ++int vpbe_set_vid_expansion(vpbe_win_expansion_t *); ++int vpbe_set_dclk(vpbe_dclk_t *); ++int vpbe_set_display_format(vpbe_display_format_t *); ++int vpbe_set_backg_color(vpbe_backg_color_t *); ++int vpbe_set_interface(u8); ++int vpbe_query_mode(vpbe_mode_info_t *); ++int vpbe_set_mode(struct vpbe_fb_videomode *); ++int vpbe_set_venc_clk_source(u8); ++void set_vid0_default_conf(void); ++void set_osd0_default_conf(void); ++void set_vid1_default_conf(void); ++void set_osd1_default_conf(void); ++void set_cursor_default_conf(void); ++void set_dm_default_conf(void); ++/* ++ * Function definations for 'venc' module ++ */ ++ ++void davincifb_ntsc_composite_config(void); ++void davincifb_ntsc_svideo_config(void); ++void davincifb_ntsc_component_config(void); ++void davincifb_pal_composite_config(void); ++void davincifb_pal_svideo_config(void); ++void davincifb_pal_component_config(void); ++ ++void vpbe_davincifb_ntsc_rgb_config(void); ++void vpbe_davincifb_pal_rgb_config(void); ++void vpbe_davincifb_525p_component_config(void); ++void vpbe_davincifb_625p_component_config(void); ++ ++void vpbe_enable_venc(int); ++void vpbe_enable_dacs(int); ++/* ++ * Function definations for 'dlcd' module ++ */ ++void vpbe_davincifb_480p_prgb_config(void); ++void vpbe_davincifb_400p_prgb_config(void); ++void vpbe_davincifb_350p_prgb_config(void); ++void vpbe_set_display_timing(struct vpbe_fb_videomode *); ++ ++void vpbe_enable_lcd(int); ++/* ++ * Following functions are not implemented ++ */ ++void vpbe_davincifb_default_ycc16_config(void); ++void vpbe_davincifb_default_ycc8_config(void); ++void vpbe_davincifb_default_srgb_config(void); ++void vpbe_davincifb_default_epson_config(void); ++void vpbe_davincifb_default_casio_config(void); ++void vpbe_davincifb_default_UDISP_config(void); ++void vpbe_davincifb_default_STN_config(void); ++#endif /*__KERNEL__*/ ++ ++#endif /* End of #ifndef DAVINCI_VPBE_H */ +diff -puNr -Naur directfb-1.6.3-orig/gfxdrivers/davinci/davinci_gfxdriver.h directfb-1.6.3/gfxdrivers/davinci/davinci_gfxdriver.h +--- directfb-1.6.3-orig/gfxdrivers/davinci/davinci_gfxdriver.h 1970-01-01 01:00:00.000000000 +0100 ++++ directfb-1.6.3/gfxdrivers/davinci/davinci_gfxdriver.h 2013-04-07 21:33:19.560662133 +0200 +@@ -0,0 +1,169 @@ ++/* ++ TI Davinci driver - Graphics Driver ++ ++ (c) Copyright 2007 Telio AG ++ ++ Written by Denis Oliver Kropp ++ ++ Code is derived from VMWare driver. ++ ++ (c) Copyright 2001-2009 The world wide DirectFB Open Source Community (directfb.org) ++ (c) Copyright 2000-2004 Convergence (integrated media) GmbH ++ ++ All rights reserved. ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2 of the License, or (at your option) any later version. ++ ++ This library 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 ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with this library; if not, write to the ++ Free Software Foundation, Inc., 59 Temple Place - Suite 330, ++ Boston, MA 02111-1307, USA. ++*/ ++ ++#ifndef __DAVINCI_GFXDRIVER_H__ ++#define __DAVINCI_GFXDRIVER_H__ ++ ++#include ++#include ++ ++#include ++ ++#include "davincifb.h" ++ ++#include "davinci_c64x.h" ++ ++ ++typedef struct { ++ /* validation flags */ ++ int v_flags; ++ ++ /* cached/computed values */ ++ void *dst_addr; ++ unsigned long dst_phys; ++ unsigned int dst_size; ++ unsigned long dst_pitch; ++ DFBSurfacePixelFormat dst_format; ++ unsigned long dst_bpp; ++ ++ void *src_addr; ++ unsigned long src_phys; ++ unsigned long src_pitch; ++ DFBSurfacePixelFormat src_format; ++ unsigned long src_bpp; ++ ++ unsigned long source_mult; ++ ++ unsigned long fillcolor; ++ ++ int blit_blend_sub_function; ++ int draw_blend_sub_function; ++ ++ DFBColor color; ++ unsigned long color_argb; ++ unsigned long colorkey; ++ ++ DFBSurfaceBlittingFlags blitting_flags; ++ ++ DFBRegion clip; ++ ++ /** Add shared data here... **/ ++ struct fb_fix_screeninfo fix[4]; ++ ++ CoreSurfacePool *osd_pool; ++ CoreSurfacePool *video_pool; ++ ++ bool synced; ++} DavinciDeviceData; ++ ++ ++typedef struct { ++ int num; ++ int fd; ++ void *mem; ++ int size; ++} DavinciFB; ++ ++typedef struct { ++ DavinciDeviceData *ddev; ++ ++ CoreDFB *core; ++ ++ CoreScreen *screen; ++ CoreLayer *osd; ++ CoreLayer *video; ++ ++ DavinciFB fb[4]; ++ ++ DavinciC64x c64x; ++ bool c64x_present; ++ ++ DavinciC64xTasks tasks; ++} DavinciDriverData; ++ ++ ++static inline DFBResult ++davincifb_pan_display( const DavinciFB *fb, ++ struct fb_var_screeninfo *var, ++ const CoreSurfaceBufferLock *lock, ++ DFBSurfaceFlipFlags flags, ++ int x, ++ int y ) ++{ ++ int ret; ++ ++ if (lock) { ++#ifdef FBIO_SET_START ++ CoreSurfaceBuffer *buffer = lock->buffer; ++ struct fb_set_start set_start; ++ ++ /* physical mode */ ++ set_start.offset = -1; ++ set_start.sync = (flags & DSFLIP_ONSYNC) ? 1 : 0; ++ ++ /* life's so easy */ ++ set_start.physical = lock->phys + DFB_BYTES_PER_LINE( buffer->format, x ) + y * lock->pitch; ++ ++ ret = ioctl( fb->fd, FBIO_SET_START, &set_start ); ++ if (ret < 0) ++ D_DEBUG( "FBIO_SET_START (0x%08lx, sync %llu) failed!\n", ++ set_start.physical, set_start.sync ); ++ ++ if (ret == 0) { ++ if (flags & DSFLIP_WAIT) ++ ioctl( fb->fd, FBIO_WAITFORVSYNC ); ++ ++ return DFB_OK; ++ } ++ ++ /* fallback */ ++#endif ++ var->xoffset = x; /* poor version */ ++ var->yoffset = y + lock->offset / lock->pitch; ++ } ++ else { ++ var->xoffset = x; ++ var->yoffset = y; ++ } ++ ++ var->activate = /*(flags & DSFLIP_ONSYNC) ? FB_ACTIVATE_VBL :*/ FB_ACTIVATE_NOW; ++ ++ ret = ioctl( fb->fd, FBIOPAN_DISPLAY, var ); ++ if (ret) ++ D_PERROR( "Davinci/FB: FBIOPAN_DISPLAY (fb%d - %d,%d) failed!\n", ++ fb->num, var->xoffset, var->yoffset ); ++ ++ if (flags & DSFLIP_WAIT) ++ ioctl( fb->fd, FBIO_WAITFORVSYNC ); ++ ++ return DFB_OK; ++} ++ ++#endif +diff -puNr -Naur directfb-1.6.3-orig/tests/voodoo/voodoo_test.h directfb-1.6.3/tests/voodoo/voodoo_test.h +--- directfb-1.6.3-orig/tests/voodoo/voodoo_test.h 1970-01-01 01:00:00.000000000 +0100 ++++ directfb-1.6.3/tests/voodoo/voodoo_test.h 2013-04-07 21:33:31.824408024 +0200 +@@ -0,0 +1,10 @@ ++#ifndef __VOODOO_TEST_H__ ++#define __VOODOO_TEST_H__ ++ ++typedef enum { ++ VOODOO_TEST_INCREASE, ++ VOODOO_TEST_QUERY ++} VoodooTestCall; ++ ++#endif ++ diff --git a/package/directfb/0002-imlib2-config.patch b/package/directfb/0002-imlib2-config.patch new file mode 100644 index 00000000..ea2bf820 --- /dev/null +++ b/package/directfb/0002-imlib2-config.patch @@ -0,0 +1,36 @@ +From 8352c434e515f19dd1ba36256bfcc3ec9480838d Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Thu, 5 Mar 2015 22:38:52 +0100 +Subject: [PATCH] imlib2 config + +Call the imlib2-conf variable that are set by ac_cv_path_IMLIB2_CONFIG +with the absolute path because the imlib2-config file is not covered +by the PATH variable. +This is important for cross compiler that need to get the staging settings +instead of the host settings. + +Signed-off-by: Carsten Schoenert +[ patch configure.in instead of configure to survive autoreconf ] +Signed-off-by: Peter Seiderer +--- + configure.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/configure.in b/configure.in +index 38d7e78..fa5e87f 100644 +--- a/configure.in ++++ b/configure.in +@@ -1094,8 +1094,8 @@ if test "x$enable_imlib2" = "xyes"; then + AC_MSG_WARN([*** Imlib2 library not found, building without Imlib2 support ***]) + imlib2="no" + else +- IMLIB2_CFLAGS=`imlib2-config --cflags` +- IMLIB2_LIBS=`imlib2-config --libs` ++ IMLIB2_CFLAGS=`$IMLIB2_CONFIG --cflags` ++ IMLIB2_LIBS=`$IMLIB2_CONFIG --libs` + imlib2="yes" + fi + fi +-- +2.1.4 + diff --git a/package/directfb/0003-setregion-lock.patch b/package/directfb/0003-setregion-lock.patch new file mode 100644 index 00000000..bec42346 --- /dev/null +++ b/package/directfb/0003-setregion-lock.patch @@ -0,0 +1,99 @@ +This patch fixes builderrors while using '--with-gfxdrivers' and +'--with-inputdrivers' with the current DirectFB version 1.6.3. + +Patch is taken from +http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/dev-libs/DirectFB/files/DirectFB-1.6.3-setregion.patch + +Signed-off-by: Carsten Schoenert + +Index: b/gfxdrivers/cyber5k/cyber5k.c +=================================================================== +--- a/gfxdrivers/cyber5k/cyber5k.c ++++ b/gfxdrivers/cyber5k/cyber5k.c +@@ -640,7 +640,8 @@ + CoreLayerRegionConfigFlags updated, + CoreSurface *surface, + CorePalette *palette, +- CoreSurfaceBufferLock *lock ) ++ CoreSurfaceBufferLock *left_lock, ++ CoreSurfaceBufferLock *right_lock ) + { + DFBResult ret; + +@@ -648,7 +649,7 @@ + ret = oldPrimaryFuncs.SetRegion( layer, oldPrimaryDriverData, + layer_data, region_data, + config, updated, surface, +- palette, lock ); ++ palette, left_lock, right_lock ); + if (ret) + return ret; + +Index: b/gfxdrivers/radeon/radeon_crtc1.c +=================================================================== +--- a/gfxdrivers/radeon/radeon_crtc1.c ++++ b/gfxdrivers/radeon/radeon_crtc1.c +@@ -147,14 +147,15 @@ + CoreLayerRegionConfigFlags updated, + CoreSurface *surface, + CorePalette *palette, +- CoreSurfaceBufferLock *lock ) ++ CoreSurfaceBufferLock *left_lock, ++ CoreSurfaceBufferLock *right_lock ) + { + + if (updated & ~CLRCF_OPTIONS) { + return OldPrimaryLayerFuncs.SetRegion( layer, + OldPrimaryLayerDriverData, + layer_data, region_data, +- config, updated, surface, palette, lock ); ++ config, updated, surface, palette, left_lock, right_lock ); + } + + return DFB_OK; +Index: b/gfxdrivers/cle266/uc_primary.c +=================================================================== +--- a/gfxdrivers/cle266/uc_primary.c ++++ b/gfxdrivers/cle266/uc_primary.c +@@ -142,7 +142,8 @@ + CoreLayerRegionConfigFlags updated, + CoreSurface *surface, + CorePalette *palette, +- CoreSurfaceBufferLock *lock ) ++ CoreSurfaceBufferLock *left_lock, ++ CoreSurfaceBufferLock *right_lock ) + { + DFBResult ret; + UcDriverData *ucdrv = (UcDriverData*) driver_data; +@@ -151,7 +152,7 @@ + ret = ucOldPrimaryFuncs.SetRegion( layer, ucOldPrimaryDriverData, + layer_data, region_data, + config, updated, surface, +- palette, lock ); ++ palette, left_lock, right_lock ); + if (ret) + return ret; + +Index: b/gfxdrivers/unichrome/uc_primary.c +=================================================================== +--- a/gfxdrivers/unichrome/uc_primary.c ++++ b/gfxdrivers/unichrome/uc_primary.c +@@ -139,7 +139,8 @@ + CoreLayerRegionConfigFlags updated, + CoreSurface *surface, + CorePalette *palette, +- CoreSurfaceBufferLock *lock ) ++ CoreSurfaceBufferLock *left_lock, ++ CoreSurfaceBufferLock *right_lock ) + { + DFBResult ret; + UcDriverData *ucdrv = (UcDriverData*) driver_data; +@@ -148,7 +149,7 @@ + ret = ucOldPrimaryFuncs.SetRegion( layer, ucOldPrimaryDriverData, + layer_data, region_data, + config, updated, surface, +- palette, lock ); ++ palette, left_lock, right_lock ); + if (ret) + return ret; + diff --git a/package/directfb/0004-use-gcc-link.patch b/package/directfb/0004-use-gcc-link.patch new file mode 100644 index 00000000..ec6c0ea5 --- /dev/null +++ b/package/directfb/0004-use-gcc-link.patch @@ -0,0 +1,35 @@ +Add patch to use 'gcc' instead of 'ld' for linking + +The patch has been sent upstream but it has not been merged yet + +Signed-off-by: Markos Chandras + +From 176ce06b40897a357fe76a558af517197325f188 Mon Sep 17 00:00:00 2001 +From: Markos Chandras +Date: Wed, 28 Aug 2013 10:56:32 +0100 +Subject: [PATCH] rules/libobject.make: Use gcc for linking + +Invoking 'ld' directly may miss some necessary linker flags which +are usually passed by gcc. Therefore, use gcc for linking. + +Signed-off-by: Markos Chandras +--- + rules/libobject.make | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/rules/libobject.make b/rules/libobject.make +index bc670da..2cba658 100644 +--- a/rules/libobject.make ++++ b/rules/libobject.make +@@ -3,7 +3,7 @@ + if test -d $<.tmp; then rmdir $<.tmp; fi + mkdir $<.tmp + (cd $<.tmp && $(AR) x ../../$<) +- $(LD) -o $@ -r $<.tmp/*.o ++ $(CC) -nostdlib -o $@ -r $<.tmp/*.o + rm -f $<.tmp/*.o && rmdir $<.tmp + + .PHONY: $(LTLIBRARIES:%.la=.libs/%.a) +-- +1.8.3.2 + diff --git a/package/directfb/0005-add-missing-idivine-header.patch b/package/directfb/0005-add-missing-idivine-header.patch new file mode 100644 index 00000000..7823eb76 --- /dev/null +++ b/package/directfb/0005-add-missing-idivine-header.patch @@ -0,0 +1,65 @@ +Add idivine.h, which is missing from DirectFB tarballs + +The idivine.h file was taken from the DirectFB Git repository. + +Signed-off-by: Thomas Petazzoni + +Index: b/lib/divine/idivine.h +=================================================================== +--- /dev/null ++++ b/lib/divine/idivine.h +@@ -0,0 +1,54 @@ ++/* ++ (c) Copyright 2012-2013 DirectFB integrated media GmbH ++ (c) Copyright 2001-2013 The world wide DirectFB Open Source Community (directfb.org) ++ (c) Copyright 2000-2004 Convergence (integrated media) GmbH ++ ++ All rights reserved. ++ ++ Written by Denis Oliver Kropp , ++ Andreas Shimokawa , ++ Marek Pikarski , ++ Sven Neumann , ++ Ville Syrjälä and ++ Claudio Ciccani . ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2 of the License, or (at your option) any later version. ++ ++ This library 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 ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with this library; if not, write to the ++ Free Software Foundation, Inc., 59 Temple Place - Suite 330, ++ Boston, MA 02111-1307, USA. ++*/ ++ ++ ++ ++#ifndef __IDIVINE_H__ ++#define __IDIVINE_H__ ++ ++#include ++ ++/* ++ * private data struct of IDiVine ++ */ ++typedef struct { ++ int ref; /* reference counter */ ++ ++ DiVine *divine; ++} IDiVine_data; ++ ++/* ++ * IDiVine constructor/destructor ++ */ ++DFBResult IDiVine_Construct( IDiVine *thiz ); ++ ++void IDiVine_Destruct ( IDiVine *thiz ); ++ ++#endif diff --git a/package/directfb/0006-fix-client-gfx_state-initialisation.patch b/package/directfb/0006-fix-client-gfx_state-initialisation.patch new file mode 100644 index 00000000..5b7a202c --- /dev/null +++ b/package/directfb/0006-fix-client-gfx_state-initialisation.patch @@ -0,0 +1,39 @@ +From 8e53c0b9cedb62b82e2b7680d793d433b647ae20 Mon Sep 17 00:00:00 2001 +From: Andre McCurdy +Date: Mon, 13 Jun 2016 13:32:44 -0700 +Subject: [PATCH] fix client->gfx_state initialisation + +Shortly before the DirectFB 1.7.7 release, an optimisation was added +to CoreGraphicsStateClient_Init() to avoid creating an extended +Graphics State object if it will not later be required: + + 4d422fb Client: Create extended Graphics State object when needed for later usage + +Unfortunately the client->gfx_state variable used to track the +extended Graphics State object is not initialised, which can lead to +crashes etc due to creation of the Graphics State object erroneously +being skipped. + +Upstream-Status: Pending + +Signed-off-by: Andre McCurdy +Signed-off-by: Philippe Reynes +--- + src/core/CoreGraphicsStateClient.cpp | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/core/CoreGraphicsStateClient.cpp b/src/core/CoreGraphicsStateClient.cpp +index 5d46f0e..5007755 100644 +--- a/src/core/CoreGraphicsStateClient.cpp ++++ b/src/core/CoreGraphicsStateClient.cpp +@@ -364,6 +364,7 @@ CoreGraphicsStateClient_Init( CoreGraphicsStateClient *client, + client->renderer = NULL; + client->requestor = NULL; + client->throttle = NULL; ++ client->gfx_state = NULL; + + if (dfb_config->task_manager) { + if (dfb_config->call_nodirect) { +-- +1.9.1 + diff --git a/package/directfb/Config.in b/package/directfb/Config.in new file mode 100644 index 00000000..f4d6b8cb --- /dev/null +++ b/package/directfb/Config.in @@ -0,0 +1,169 @@ +config BR2_PACKAGE_DIRECTFB + bool "directfb" + depends on !BR2_RISCV_32 + depends on !BR2_STATIC_LIBS # static link issues + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_5 + depends on !BR2_TOOLCHAIN_USES_MUSL # sigval_t issue + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + select BR2_PACKAGE_FREETYPE + select BR2_PACKAGE_ZLIB + help + DirectFB (Direct Frame Buffer) is a set of graphics APIs + implemented on top of the Linux Frame Buffer (fbdev) + abstraction layer. It is an alternative to X11 with a smaller + memory footprint that still has an integrated windowing + system. As of 4 October 2015, DirectFB's website + http://www.directfb.org/ is down. See alternative site listed + below. + + http://elinux.org/DirectFB + +if BR2_PACKAGE_DIRECTFB + +config BR2_PACKAGE_DIRECTFB_MULTI + bool "directfb multi application" + depends on BR2_USE_MMU # madvise() + depends on BR2_LINUX_KERNEL + select BR2_PACKAGE_LINUX_FUSION + help + Enable use of multiple concurrent DirectFB applications + +comment "directfb multi application needs a Linux kernel to be built" + depends on !BR2_LINUX_KERNEL + +config BR2_PACKAGE_DIRECTFB_DEBUG_SUPPORT + bool "directfb debugging support" + default y + help + Compile DirectFB with debugging support. It provides + functions to print debug information, for DirectFB as well as + external DirectFB drivers. + + When disabled, DirectFB does not print any debug information. + The drivers will be installed to and loaded from + /usr/lib/directfb--pure instead of + /usr/lib/directfb-. + +config BR2_PACKAGE_DIRECTFB_DEBUG + bool "directfb debugging" + depends on BR2_PACKAGE_DIRECTFB_DEBUG_SUPPORT + help + Compile DirectFB with lots of debug output + +config BR2_PACKAGE_DIRECTFB_TRACE + bool "directfb call trace support" + help + Enable call tracing for DirectFB applications + +config BR2_PACKAGE_DIRECTFB_DIVINE + bool "divine" + help + Enable the DiVine feature (virtual input) + +config BR2_PACKAGE_DIRECTFB_SAWMAN + bool "sawman" + help + Enable the SawMan feature (window manager) + +config BR2_PACKAGE_DIRECTFB_ATI128 + bool "compile ati128 graphics driver" + depends on BR2_i386 || BR2_x86_64 + +config BR2_PACKAGE_DIRECTFB_MATROX + bool "compile matrox graphics driver" + depends on BR2_i386 || BR2_x86_64 + +config BR2_PACKAGE_DIRECTFB_PXA3XX + bool "compile pxa3xx graphics driver" + depends on BR2_arm + help + The Marvell PXA3xx Processor Family is a system-on-chip based + on XScale® microarchitecture. This option enables the graphic + driver support for the PXA3xx processor family. + + http://www.marvell.com/application-processors/pxa-family/ + +config BR2_PACKAGE_DIRECTFB_EP9X + bool "compile ep9x graphics driver" + depends on BR2_arm + help + Enable the graphic driver support for the EP93xx ARMv9 based + processors from Cirrus Logic. + + http://cirrus.com/en/products/arm9.html + +config BR2_PACKAGE_DIRECTFB_I830 + bool "compile i830 graphics driver" + depends on BR2_i386 || BR2_x86_64 + +config BR2_PACKAGE_DIRECTFB_LINUXINPUT + bool "compile /dev/input/eventX input driver" + default y + +config BR2_PACKAGE_DIRECTFB_KEYBOARD + bool "compile keyboard input driver" + default y + +config BR2_PACKAGE_DIRECTFB_PS2MOUSE + bool "compile PS2 mouse input driver" + default y + +config BR2_PACKAGE_DIRECTFB_SERIALMOUSE + bool "compile serial mouse input driver" + default y + +config BR2_PACKAGE_DIRECTFB_TSLIB + bool "enable touchscreen support" + default y + select BR2_PACKAGE_TSLIB + +config BR2_PACKAGE_DIRECTFB_GIF + bool "enable GIF support" + default y + +config BR2_PACKAGE_DIRECTFB_TIFF + bool "enable TIFF support" + select BR2_PACKAGE_TIFF + +config BR2_PACKAGE_DIRECTFB_IMLIB2 + bool "enable IMLIB2 support" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_IMLIB2 + +comment "imlib2 support needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +config BR2_PACKAGE_DIRECTFB_JPEG + bool "enable JPEG support" + default y + select BR2_PACKAGE_JPEG + +config BR2_PACKAGE_DIRECTFB_PNG + bool "enable PNG support" + default y + select BR2_PACKAGE_LIBPNG + +config BR2_PACKAGE_DIRECTFB_SVG + bool "enable SVG support" + default y + select BR2_PACKAGE_LIBSVG_CAIRO + +config BR2_PACKAGE_DIRECTFB_DITHER_RGB16 + bool "enable advanced dithering of RGB16 surfaces" + help + Enable dithering when loading images to RGB16 surfaces. + This increases the data section by 64 KBytes. + +config BR2_PACKAGE_DIRECTFB_TESTS + bool "build directfb tests" + +endif # BR2_PACKAGE_DIRECTFB + +comment "directfb needs a glibc or uClibc toolchain w/ C++, NPTL, gcc >= 4.5, dynamic library" + depends on !BR2_RISCV_32 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL || !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_5 || BR2_TOOLCHAIN_USES_MUSL || \ + BR2_STATIC_LIBS diff --git a/package/directfb/directfb.hash b/package/directfb/directfb.hash new file mode 100644 index 00000000..f8c4a830 --- /dev/null +++ b/package/directfb/directfb.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 b785c638dc31b8fe3a7c81be1475c89b2255ab3d67b777c747d3fbc52f8027a3 DirectFB-1.7.7.tar.gz +sha256 512d2d21b6b3384ba64781abb0208a1b87740bc31e2df48e2b206ddb7e4d5779 COPYING diff --git a/package/directfb/directfb.mk b/package/directfb/directfb.mk new file mode 100644 index 00000000..0b32162d --- /dev/null +++ b/package/directfb/directfb.mk @@ -0,0 +1,173 @@ +################################################################################ +# +# directfb +# +################################################################################ + +DIRECTFB_VERSION_MAJOR = 1.7 +DIRECTFB_VERSION = $(DIRECTFB_VERSION_MAJOR).7 +DIRECTFB_SITE = http://www.directfb.org/downloads/Core/DirectFB-$(DIRECTFB_VERSION_MAJOR) +DIRECTFB_SOURCE = DirectFB-$(DIRECTFB_VERSION).tar.gz +DIRECTFB_LICENSE = LGPL-2.1+ +DIRECTFB_LICENSE_FILES = COPYING +DIRECTFB_INSTALL_STAGING = YES +DIRECTFB_AUTORECONF = YES + +DIRECTFB_CONF_OPTS = \ + --enable-zlib \ + --enable-freetype \ + --enable-fbdev \ + --disable-sdl \ + --disable-vnc \ + --disable-osx \ + --disable-video4linux \ + --disable-video4linux2 \ + --without-tools \ + --disable-x11 + +ifeq ($(BR2_STATIC_LIBS),y) +DIRECTFB_CONF_OPTS += --disable-dynload +endif + +DIRECTFB_CONFIG_SCRIPTS = directfb-config + +DIRECTFB_DEPENDENCIES = freetype zlib + +ifeq ($(BR2_PACKAGE_DIRECTFB_MULTI),y) +DIRECTFB_CONF_OPTS += --enable-multi --enable-multi-kernel +DIRECTFB_DEPENDENCIES += linux-fusion +else +DIRECTFB_CONF_OPTS += --disable-multi --disable-multi-kernel +endif + +ifeq ($(BR2_PACKAGE_DIRECTFB_DEBUG_SUPPORT),y) +DIRECTFB_CONF_OPTS += --enable-debug-support +ifeq ($(BR2_PACKAGE_DIRECTFB_DEBUG),y) +DIRECTFB_CONF_OPTS += --enable-debug +endif +else +DIRECTFB_CONF_OPTS += --disable-debug-support +endif + +ifeq ($(BR2_PACKAGE_DIRECTFB_TRACE),y) +DIRECTFB_CONF_OPTS += --enable-trace +endif + +ifeq ($(BR2_PACKAGE_DIRECTFB_DIVINE),y) +DIRECTFB_CONF_OPTS += --enable-divine +else +DIRECTFB_CONF_OPTS += --disable-divine +endif + +ifeq ($(BR2_PACKAGE_DIRECTFB_SAWMAN),y) +DIRECTFB_CONF_OPTS += --enable-sawman +else +DIRECTFB_CONF_OPTS += --disable-sawman +endif + +DIRECTFB_GFX = \ + $(if $(BR2_PACKAGE_DIRECTFB_ATI128),ati128) \ + $(if $(BR2_PACKAGE_DIRECTFB_CYBER5K),cyber5k) \ + $(if $(BR2_PACKAGE_DIRECTFB_MATROX),matrox) \ + $(if $(BR2_PACKAGE_DIRECTFB_PXA3XX),pxa3xx) \ + $(if $(BR2_PACKAGE_DIRECTFB_I830),i830) \ + $(if $(BR2_PACKAGE_DIRECTFB_EP9X),ep9x) + +ifeq ($(strip $(DIRECTFB_GFX)),) +DIRECTFB_CONF_OPTS += --with-gfxdrivers=none +else +DIRECTFB_CONF_OPTS += \ + --with-gfxdrivers=$(subst $(space),$(comma),$(strip $(DIRECTFB_GFX))) +endif + +DIRECTFB_INPUT = \ + $(if $(BR2_PACKAGE_DIRECTFB_LINUXINPUT),linuxinput) \ + $(if $(BR2_PACKAGE_DIRECTFB_KEYBOARD),keyboard) \ + $(if $(BR2_PACKAGE_DIRECTFB_PS2MOUSE),ps2mouse) \ + $(if $(BR2_PACKAGE_DIRECTFB_SERIALMOUSE),serialmouse) \ + $(if $(BR2_PACKAGE_DIRECTFB_TSLIB),tslib) + +ifeq ($(BR2_PACKAGE_DIRECTFB_TSLIB),y) +DIRECTFB_DEPENDENCIES += tslib +endif + +ifeq ($(strip $(DIRECTFB_INPUT)),) +DIRECTFB_CONF_OPTS += --with-inputdrivers=none +else +DIRECTFB_CONF_OPTS += \ + --with-inputdrivers=$(subst $(space),$(comma),$(strip $(DIRECTFB_INPUT))) +endif + +ifeq ($(BR2_PACKAGE_DIRECTFB_GIF),y) +DIRECTFB_CONF_OPTS += --enable-gif +else +DIRECTFB_CONF_OPTS += --disable-gif +endif + +ifeq ($(BR2_PACKAGE_DIRECTFB_TIFF),y) +DIRECTFB_CONF_OPTS += --enable-tiff +DIRECTFB_DEPENDENCIES += tiff +else +DIRECTFB_CONF_OPTS += --disable-tiff +endif + +ifeq ($(BR2_PACKAGE_DIRECTFB_PNG),y) +DIRECTFB_CONF_OPTS += --enable-png +DIRECTFB_DEPENDENCIES += libpng +DIRECTFB_CONF_ENV += ac_cv_path_LIBPNG_CONFIG=$(STAGING_DIR)/usr/bin/libpng-config +else +DIRECTFB_CONF_OPTS += --disable-png +endif + +ifeq ($(BR2_PACKAGE_DIRECTFB_JPEG),y) +DIRECTFB_CONF_OPTS += --enable-jpeg +DIRECTFB_DEPENDENCIES += jpeg +else +DIRECTFB_CONF_OPTS += --disable-jpeg +endif + +ifeq ($(BR2_PACKAGE_DIRECTFB_SVG),y) +DIRECTFB_CONF_OPTS += --enable-svg +# needs some help to find cairo includes +DIRECTFB_CONF_ENV += CPPFLAGS="$(TARGET_CPPFLAGS) -I$(STAGING_DIR)/usr/include/cairo" +DIRECTFB_DEPENDENCIES += libsvg-cairo +else +DIRECTFB_CONF_OPTS += --disable-svg +endif + +ifeq ($(BR2_PACKAGE_DIRECTFB_IMLIB2),y) +DIRECTFB_CONF_OPTS += --enable-imlib2 +DIRECTFB_DEPENDENCIES += imlib2 +DIRECTFB_CONF_ENV += ac_cv_path_IMLIB2_CONFIG=$(STAGING_DIR)/usr/bin/imlib2-config +else +DIRECTFB_CONF_OPTS += --disable-imlib2 +endif + +ifeq ($(BR2_PACKAGE_DIRECTFB_DITHER_RGB16),y) +DIRECTFB_CONF_OPTS += --with-dither-rgb16=advanced +else +DIRECTFB_CONF_OPTS += --with-dither-rgb16=none +endif + +ifeq ($(BR2_PACKAGE_DIRECTFB_TESTS),y) +DIRECTFB_CONF_OPTS += --with-tests +endif + +HOST_DIRECTFB_DEPENDENCIES = host-pkgconf host-libpng +HOST_DIRECTFB_CONF_OPTS = \ + --disable-multi \ + --enable-png \ + --with-gfxdrivers=none \ + --with-inputdrivers=none + +HOST_DIRECTFB_BUILD_CMDS = \ + $(HOST_MAKE_ENV) $(MAKE) -C $(@D)/tools directfb-csource + +HOST_DIRECTFB_INSTALL_CMDS = \ + $(INSTALL) -m 0755 $(@D)/tools/directfb-csource $(HOST_DIR)/bin + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) + +# directfb-csource for the host +DIRECTFB_HOST_BINARY = $(HOST_DIR)/bin/directfb-csource diff --git a/package/dmalloc/0001-mips.patch b/package/dmalloc/0001-mips.patch new file mode 100644 index 00000000..3e6b00e3 --- /dev/null +++ b/package/dmalloc/0001-mips.patch @@ -0,0 +1,43 @@ +--- a/configure ++++ b/configure +@@ -7107,7 +7107,7 @@ + echo $ECHO_N "checking return.h macros work... $ECHO_C" >&6 + if test "$cross_compiling" = yes; then + cat >>confdefs.h <<\_ACEOF +-#define RETURN_MACROS_WORK 0 ++#define RETURN_MACROS_WORK 1 + _ACEOF + echo "$as_me:$LINENO: result: no" >&5 + echo "${ECHO_T}no" >&6 +--- a/return.h ++++ b/return.h +@@ -106,26 +106,16 @@ + /*************************************/ + + /* +- * For DEC Mips machines running Ultrix ++ * For Mips machines running Linux + */ + #if __mips + + /* +- * I have no idea how to get inline assembly with the default cc. +- * Anyone know how? +- */ +- +-#if 0 +- +-/* + * NOTE: we assume here that file is global. + * +- * $31 is the frame pointer. $2 looks to be the return address but maybe +- * not consistently. ++ * $31 is the return address. + */ +-#define GET_RET_ADDR(file) asm("sw $2, file") +- +-#endif ++#define GET_RET_ADDR(file) asm("sw $31, %0" : "=m" (file)) + + #endif /* __mips */ + diff --git a/package/dmalloc/0002-fix-parallel-build.patch b/package/dmalloc/0002-fix-parallel-build.patch new file mode 100644 index 00000000..c521a114 --- /dev/null +++ b/package/dmalloc/0002-fix-parallel-build.patch @@ -0,0 +1,18 @@ +Fix parallel build issue + +Missing dmallocc.o <- dmalloc.h dependency may break parallel builds. +dmalloc.h is generated,and may not be around by the time gcc starts +parsing dmallocc.cc. + +Signed-off-by: Alex Suykov + +--- a/Makefile.in ++++ b/Makefile.in +@@ -401,6 +401,7 @@ + compat.o: compat.c conf.h settings.h dmalloc.h compat.h dmalloc_loc.h + dmalloc.o: dmalloc.c conf.h settings.h dmalloc_argv.h dmalloc.h compat.h \ + debug_tok.h dmalloc_loc.h env.h error_val.h version.h ++dmallocc.o: dmallocc.cc dmalloc.h return.h conf.h settings.h + dmalloc_argv.o: dmalloc_argv.c conf.h settings.h dmalloc_argv.h \ + dmalloc_argv_loc.h compat.h + dmalloc_fc_t.o: dmalloc_fc_t.c conf.h settings.h dmalloc.h dmalloc_argv.h \ diff --git a/package/dmalloc/0003-fix-shlibs.patch b/package/dmalloc/0003-fix-shlibs.patch new file mode 100644 index 00000000..a99d926d --- /dev/null +++ b/package/dmalloc/0003-fix-shlibs.patch @@ -0,0 +1,46 @@ +Fix shared library rules + +dmalloc uses ld -shared --whole-archive -o lib.so lib.a, +but for some reason lists regular objects in addition +to the archive, ending up with two copies of each symbol. + +Signed-off-by: Alex Suykov + +--- a/Makefile.in ++++ b/Makefile.in +@@ -257,7 +257,7 @@ shlib : $(BUILD_SL) + # via: http://256.com/gray/email.html + $(LIB_SL) : $(LIBRARY) + rm -f $@ $@.t +- @shlinkargs@ $(LIBRARY) $(OBJS) $(NORMAL_OBJS) ++ @shlinkargs@ $(LIBRARY) + mv $@.t $@ + + $(LIBRARY) : $(OBJS) $(NORMAL_OBJS) +@@ -270,7 +270,7 @@ $(LIB_TH) : $(OBJS) $(THREAD_OBJS) + + $(LIB_TH_SL) : $(LIB_TH) + rm -f $@ $@.t +- @shlinkargs@ $(LIB_TH) $(OBJS) $(THREAD_OBJS) ++ @shlinkargs@ $(LIB_TH) + mv $@.t $@ + + $(LIB_CXX) : $(OBJS) $(NORMAL_OBJS) $(CXX_OBJS) +@@ -279,7 +279,7 @@ $(LIB_CXX) : $(OBJS) $(NORMAL_OBJS) $(CXX_OBJS) + + $(LIB_CXX_SL) : $(LIB_CXX) + rm -f $@ $@.t +- @shlinkargs@ $(LIB_CXX) $(OBJS) $(NORMAL_OBJS) $(CXX_OBJS) ++ @shlinkargs@ $(LIB_CXX) + mv $@.t $@ + + $(LIB_TH_CXX) : $(OBJS) $(THREAD_OBJS) $(CXX_OBJS) +@@ -288,7 +288,7 @@ $(LIB_TH_CXX) : $(OBJS) $(THREAD_OBJS) $(CXX_OBJS) + + $(LIB_TH_CXX_SL) : $(LIB_TH_CXX) + rm -f $@ $@.t +- @shlinkargs@ $(LIB_TH_CXX) $(OBJS) $(THREAD_OBJS) $(CXX_OBJS) ++ @shlinkargs@ $(LIB_TH_CXX) + mv $@.t $@ + + threadssl : $(LIB_TH_SL) diff --git a/package/dmalloc/0004-fix-strdup.patch b/package/dmalloc/0004-fix-strdup.patch new file mode 100644 index 00000000..5884df6a --- /dev/null +++ b/package/dmalloc/0004-fix-strdup.patch @@ -0,0 +1,24 @@ +From 59d73a473f1c1a31bcba90d314f956d0bcc3de95 Mon Sep 17 00:00:00 2001 +From: Siana Gearz +Date: Sat, 8 Sep 2012 22:55:17 +0200 +Subject: [PATCH] Fix strdup + +[Retrieved from: +https://github.com/siana/dmalloc/commit/59d73a473f1c1a31bcba90d314f956d0bcc3de95] +Signed-off-by: Fabrice Fontaine +--- + dmalloc.h.3 | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/dmalloc.h.3 b/dmalloc.h.3 +index d3d1c13..3fc573a 100644 +--- a/dmalloc.h.3 ++++ b/dmalloc.h.3 +@@ -459,6 +459,7 @@ DMALLOC_PNT valloc(DMALLOC_SIZE size); + * + * string -> String we are duplicating. + */ ++#undef strdup + extern + char *strdup(const char *string); + #endif /* ifndef DMALLOC_STRDUP_MACRO */ diff --git a/package/dmalloc/0005-fix-strndup.patch b/package/dmalloc/0005-fix-strndup.patch new file mode 100644 index 00000000..a1865acb --- /dev/null +++ b/package/dmalloc/0005-fix-strndup.patch @@ -0,0 +1,24 @@ +From 005d92c2cebbde5c8623daa29725f7a62b18df7c Mon Sep 17 00:00:00 2001 +From: Siana Gearz +Date: Sat, 8 Sep 2012 22:44:35 +0200 +Subject: [PATCH] Fix strndup + +[Retrieved from: +https://github.com/siana/dmalloc/commit/005d92c2cebbde5c8623daa29725f7a62b18df7c] +Signed-off-by: Fabrice Fontaine +--- + dmalloc.h.3 | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/dmalloc.h.3 b/dmalloc.h.3 +index 8bda997..fb538a8 100644 +--- a/dmalloc.h.3 ++++ b/dmalloc.h.3 +@@ -429,6 +429,7 @@ char *strdup(const char *string); + * + * len -> Length of the string to duplicate. + */ ++#undef strndup + extern + char *strndup(const char *string, const DMALLOC_SIZE len); + diff --git a/package/dmalloc/Config.in b/package/dmalloc/Config.in new file mode 100644 index 00000000..0c01970b --- /dev/null +++ b/package/dmalloc/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_DMALLOC + bool "dmalloc" + help + A debug memory allocation library which is a drop in + replacement for the system's malloc, realloc, calloc, free and + other memory management routines while providing powerful + debugging facilities configurable at runtime. + + http://dmalloc.com/ diff --git a/package/dmalloc/dmalloc.hash b/package/dmalloc/dmalloc.hash new file mode 100644 index 00000000..11375165 --- /dev/null +++ b/package/dmalloc/dmalloc.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 d3be5c6eec24950cb3bd67dbfbcdf036f1278fae5fd78655ef8cdf9e911e428a dmalloc-5.5.2.tgz +sha256 8659d49ceeeb006288ad246164e504ccfe33f7a4c1680439fb6ff6a393b0722b dmalloc.h.1 diff --git a/package/dmalloc/dmalloc.mk b/package/dmalloc/dmalloc.mk new file mode 100644 index 00000000..749c3535 --- /dev/null +++ b/package/dmalloc/dmalloc.mk @@ -0,0 +1,80 @@ +################################################################################ +# +# dmalloc +# +################################################################################ + +DMALLOC_VERSION = 5.5.2 +DMALLOC_SOURCE = dmalloc-$(DMALLOC_VERSION).tgz +DMALLOC_SITE = http://dmalloc.com/releases + +DMALLOC_LICENSE = MIT-like +# license is in each file, dmalloc.h.1 is the smallest one +DMALLOC_LICENSE_FILES = dmalloc.h.1 + +DMALLOC_INSTALL_STAGING = YES +DMALLOC_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_STATIC_LIBS),y) +DMALLOC_CONF_OPTS += --disable-shlib +else +DMALLOC_CONF_OPTS += --enable-shlib +DMALLOC_CFLAGS += -fPIC +endif + +ifeq ($(BR2_INSTALL_LIBSTDCPP),y) +DMALLOC_CONF_OPTS += --enable-cxx +else +DMALLOC_CONF_OPTS += --disable-cxx +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +DMALLOC_CONF_OPTS += --enable-threads +else +DMALLOC_CONF_OPTS += --disable-threads +endif + +# dmalloc has some assembly function that are not present in thumb1 mode: +# Error: lo register required -- `str lr,[sp,#4]' +# so, we desactivate thumb mode +ifeq ($(BR2_ARM_INSTRUCTIONS_THUMB),y) +DMALLOC_CFLAGS += -marm +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_63261),y) +DMALLOC_CFLAGS += -O0 +endif + +DMALLOC_CONF_ENV = CFLAGS="$(DMALLOC_CFLAGS)" + +define DMALLOC_POST_PATCH + $(SED) 's/^ac_cv_page_size=0$$/ac_cv_page_size=12/' $(@D)/configure + $(SED) 's/(ld -/($${LD-ld} -/' $(@D)/configure + $(SED) 's/'\''ld -/"$${LD-ld}"'\'' -/' $(@D)/configure + $(SED) 's/ar cr/$$(AR) cr/' $(@D)/Makefile.in +endef + +DMALLOC_POST_PATCH_HOOKS += DMALLOC_POST_PATCH + +# both DESTDIR and PREFIX are ignored.. +define DMALLOC_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) includedir="$(STAGING_DIR)/usr/include" \ + bindir="$(STAGING_DIR)/usr/bin" \ + libdir="$(STAGING_DIR)/usr/lib" \ + shlibdir="$(STAGING_DIR)/usr/lib" \ + infodir="$(STAGING_DIR)/usr/share/info/" \ + -C $(@D) install +endef + +ifeq ($(BR2_STATIC_LIBS),) +define DMALLOC_INSTALL_SHARED_LIB + cp -dpf $(STAGING_DIR)/usr/lib/libdmalloc*.so $(TARGET_DIR)/usr/lib +endef +endif + +define DMALLOC_INSTALL_TARGET_CMDS + $(DMALLOC_INSTALL_SHARED_LIB) + cp -dpf $(STAGING_DIR)/usr/bin/dmalloc $(TARGET_DIR)/usr/bin/dmalloc +endef + +$(eval $(autotools-package)) diff --git a/package/dmidecode/Config.in b/package/dmidecode/Config.in new file mode 100644 index 00000000..58e7a785 --- /dev/null +++ b/package/dmidecode/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_DMIDECODE + bool "dmidecode" + depends on BR2_aarch64 || BR2_i386 || BR2_x86_64 + help + Dmidecode reports information about your system's hardware + as described in your system BIOS according to the SMBIOS/DMI + standard. + + http://www.nongnu.org/dmidecode/ diff --git a/package/dmidecode/dmidecode.hash b/package/dmidecode/dmidecode.hash new file mode 100644 index 00000000..ba72295c --- /dev/null +++ b/package/dmidecode/dmidecode.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 82c737a780614c38a783e8055340d295e332fb12c7f418b5d21a0797d3fb1455 dmidecode-3.3.tar.xz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE diff --git a/package/dmidecode/dmidecode.mk b/package/dmidecode/dmidecode.mk new file mode 100644 index 00000000..3f09cc95 --- /dev/null +++ b/package/dmidecode/dmidecode.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# dmidecode +# +################################################################################ + +DMIDECODE_VERSION = 3.3 +DMIDECODE_SOURCE = dmidecode-$(DMIDECODE_VERSION).tar.xz +DMIDECODE_SITE = http://download.savannah.gnu.org/releases/dmidecode +DMIDECODE_LICENSE = GPL-2.0+ +DMIDECODE_LICENSE_FILES = LICENSE +DMIDECODE_SELINUX_MODULES = dmidecode + +define DMIDECODE_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) +endef + +define DMIDECODE_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) prefix=/usr DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/dmraid/0001-fix-compilation-under-musl.patch b/package/dmraid/0001-fix-compilation-under-musl.patch new file mode 100644 index 00000000..7cf87928 --- /dev/null +++ b/package/dmraid/0001-fix-compilation-under-musl.patch @@ -0,0 +1,47 @@ +From 89c7fc15e064dd407e6d5ccefe78985b86b8a036 Mon Sep 17 00:00:00 2001 +From: Brendan Heading +Date: Tue, 1 Sep 2015 12:26:36 +0100 +Subject: [PATCH 1/1] fix compilation under musl + +Patch borrowed from Void Linux : + +https://github.com/voidlinux/void-packages/blob/master/srcpkgs/dmraid/patches/25_musl-libc.patch + +Upstream package appears dormant, no mailing list and no +maintainence releases since Nov 2010. + +Upstream-Status: dormant +Signed-off-by: Brendan Heading + +--- + 1.0.0.rc16-3/dmraid/include/dmraid/misc.h | 1 + + 1.0.0.rc16-3/dmraid/lib/device/scan.c | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/1.0.0.rc16-3/dmraid/include/dmraid/misc.h b/1.0.0.rc16-3/dmraid/include/dmraid/misc.h +index 247a68e..1b1dfdf 100644 +--- a/1.0.0.rc16-3/dmraid/include/dmraid/misc.h ++++ b/1.0.0.rc16-3/dmraid/include/dmraid/misc.h +@@ -10,6 +10,7 @@ + + #ifndef _MISC_H_ + #define _MISC_H_ ++#include + + #define DM_ASSERT(__cond) do { if (!(__cond)) { printf("ASSERT file:%s line:%d fuction:%s cond: %s\n", __FILE__, __LINE__, __FUNCTION__, #__cond); } } while(0); + +diff --git a/1.0.0.rc16-3/dmraid/lib/device/scan.c b/1.0.0.rc16-3/dmraid/lib/device/scan.c +index a040d53..6897146 100644 +--- a/1.0.0.rc16-3/dmraid/lib/device/scan.c ++++ b/1.0.0.rc16-3/dmraid/lib/device/scan.c +@@ -10,6 +10,7 @@ + # include + # include + #else ++# include + # include + # include + #endif +-- +2.4.3 + diff --git a/package/dmraid/Config.in b/package/dmraid/Config.in new file mode 100644 index 00000000..3c375f4c --- /dev/null +++ b/package/dmraid/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_DMRAID + bool "dmraid" + depends on BR2_TOOLCHAIN_HAS_THREADS # lvm2 + depends on BR2_USE_MMU # lvm2 + depends on !BR2_STATIC_LIBS # lvm2 + select BR2_PACKAGE_LVM2 + help + dmraid discovers, activates, deactivates and displays + properties of software RAID sets (eg, ATARAID) and contained + DOS partitions. + + dmraid uses the Linux device-mapper to create devices with + respective mappings for the ATARAID sets discovered. + + http://people.redhat.com/~heinzm/sw/dmraid/ + +comment "dmraid needs a toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/dmraid/S20dmraid b/package/dmraid/S20dmraid new file mode 100644 index 00000000..b3bfdcc8 --- /dev/null +++ b/package/dmraid/S20dmraid @@ -0,0 +1,29 @@ +#!/bin/sh + +set -e + +# try to load module in case that hasn't been done yet +modprobe dm-mod >/dev/null 2>&1 + +case "$1" in + start|"") + echo "Setting up DMRAID devices..." + /usr/sbin/dmraid --activate yes --ignorelocking --verbose + ;; + + stop) + echo "Shutting down DMRAID devices... " + /usr/sbin/dmraid --activate no --ignorelocking --verbose + ;; + + restart|force-reload) + $0 stop + sleep 1 + $0 start + ;; + + *) + echo "Usage: dmraid {start|stop|restart|force-reload}" + exit 1 + ;; +esac diff --git a/package/dmraid/dmraid.hash b/package/dmraid/dmraid.hash new file mode 100644 index 00000000..af84732f --- /dev/null +++ b/package/dmraid/dmraid.hash @@ -0,0 +1,5 @@ +# From http://people.redhat.com/~heinzm/sw/dmraid/src/dmraid-1.0.0.rc16-3.tar.bz2.md5.sum +md5 819338fcef98e8e25819f0516722beeb dmraid-1.0.0.rc16-3.tar.bz2 +# locally computed +sha256 204d8eff92f95aac4df6c8122bc1505f468f3a901e5a4cc08940e0ede1938994 1.0.0.rc16-3/dmraid/LICENSE_GPL +sha256 4bc391fcf852e03c3a7564cb146af6e47717562eed296b28bce123ee1b0396b8 1.0.0.rc16-3/dmraid/LICENSE diff --git a/package/dmraid/dmraid.mk b/package/dmraid/dmraid.mk new file mode 100644 index 00000000..0382cd4d --- /dev/null +++ b/package/dmraid/dmraid.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# dmraid +# +################################################################################ + +DMRAID_VERSION = 1.0.0.rc16-3 +DMRAID_SOURCE = dmraid-$(DMRAID_VERSION).tar.bz2 +DMRAID_SITE = http://people.redhat.com/~heinzm/sw/dmraid/src +DMRAID_SUBDIR = $(DMRAID_VERSION)/dmraid +# lib and tools race with parallel make +DMRAID_MAKE = $(MAKE1) +DMRAID_INSTALL_STAGING = YES +DMRAID_LICENSE = GPL-2.0 +DMRAID_LICENSE_FILES = $(DMRAID_SUBDIR)/LICENSE_GPL $(DMRAID_SUBDIR)/LICENSE + +DMRAID_DEPENDENCIES = lvm2 + +define DMRAID_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/dmraid/S20dmraid \ + $(TARGET_DIR)/etc/init.d/S20dmraid +endef + +$(eval $(autotools-package)) diff --git a/package/dnsmasq/Config.in b/package/dnsmasq/Config.in new file mode 100644 index 00000000..ef3a9b83 --- /dev/null +++ b/package/dnsmasq/Config.in @@ -0,0 +1,51 @@ +config BR2_PACKAGE_DNSMASQ + bool "dnsmasq" + depends on BR2_USE_MMU # fork() + help + A lightweight DNS and DHCP server. It is intended to provide + coupled DNS and DHCP service to a LAN. + + http://www.thekelleys.org.uk/dnsmasq/doc.html + +if BR2_PACKAGE_DNSMASQ + +config BR2_PACKAGE_DNSMASQ_TFTP + bool "tftp support" + default y + help + Enable TFTP support in dnsmasq. + +config BR2_PACKAGE_DNSMASQ_DHCP + bool "dhcp support" + default y + help + Enable DHCP server support in dnsmasq. + +config BR2_PACKAGE_DNSMASQ_DNSSEC + bool "DNSSEC support" + select BR2_PACKAGE_GMP + select BR2_PACKAGE_NETTLE + help + Enable DNSSEC validation and caching support. + +config BR2_PACKAGE_DNSMASQ_IDN + bool "IDN support" + select BR2_PACKAGE_LIBIDN2 if !BR2_PACKAGE_LIBIDN + help + Enable IDN support in dnsmasq. + This option is a big space taker since it pulls in many + libraries. + +config BR2_PACKAGE_DNSMASQ_LUA + bool "Lua scripting support" + depends on BR2_PACKAGE_LUA + help + Enable Lua scripting for dnsmasq + +config BR2_PACKAGE_DNSMASQ_CONNTRACK + bool "conntrack marking support" + select BR2_PACKAGE_LIBNETFILTER_CONNTRACK + help + Enable DNS query connection marking in netfilter. + +endif diff --git a/package/dnsmasq/S80dnsmasq b/package/dnsmasq/S80dnsmasq new file mode 100644 index 00000000..b052259e --- /dev/null +++ b/package/dnsmasq/S80dnsmasq @@ -0,0 +1,25 @@ +#!/bin/sh + +[ -f /etc/dnsmasq.conf ] || exit 0 + +case "$1" in + start) + printf "Starting dnsmasq: " + start-stop-daemon -S -x /usr/sbin/dnsmasq + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + stop) + printf "Stopping dnsmasq: " + start-stop-daemon -K -q -x /usr/sbin/dnsmasq + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + restart|reload) + $0 stop + $0 start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit 0 diff --git a/package/dnsmasq/dnsmasq.hash b/package/dnsmasq/dnsmasq.hash new file mode 100644 index 00000000..2a7cda4a --- /dev/null +++ b/package/dnsmasq/dnsmasq.hash @@ -0,0 +1,6 @@ +# Locally calculated after checking pgp signature +# https://www.thekelleys.org.uk/dnsmasq/dnsmasq-2.85.tar.xz.asc +sha256 ad98d3803df687e5b938080f3d25c628fe41c878752d03fbc6199787fee312fa dnsmasq-2.85.tar.xz +# Locally calculated +sha256 dcc100d4161cc0b7177545ab6e47216f84857cda3843847c792a25289852dcaa COPYING +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING-v3 diff --git a/package/dnsmasq/dnsmasq.mk b/package/dnsmasq/dnsmasq.mk new file mode 100644 index 00000000..972be109 --- /dev/null +++ b/package/dnsmasq/dnsmasq.mk @@ -0,0 +1,98 @@ +################################################################################ +# +# dnsmasq +# +################################################################################ + +DNSMASQ_VERSION = 2.85 +DNSMASQ_SOURCE = dnsmasq-$(DNSMASQ_VERSION).tar.xz +DNSMASQ_SITE = http://thekelleys.org.uk/dnsmasq +DNSMASQ_MAKE_ENV = $(TARGET_MAKE_ENV) CC="$(TARGET_CC)" +DNSMASQ_MAKE_OPTS = COPTS="$(DNSMASQ_COPTS)" PREFIX=/usr CFLAGS="$(TARGET_CFLAGS)" +DNSMASQ_MAKE_OPTS += DESTDIR=$(TARGET_DIR) LDFLAGS="$(TARGET_LDFLAGS)" \ + LIBS+=$(TARGET_NLS_LIBS) +DNSMASQ_DEPENDENCIES = host-pkgconf $(TARGET_NLS_DEPENDENCIES) +DNSMASQ_LICENSE = GPL-2.0 or GPL-3.0 +DNSMASQ_LICENSE_FILES = COPYING COPYING-v3 +DNSMASQ_CPE_ID_VENDOR = thekelleys +DNSMASQ_SELINUX_MODULES = dnsmasq + +DNSMASQ_I18N = $(if $(BR2_SYSTEM_ENABLE_NLS),-i18n) + +ifneq ($(BR2_PACKAGE_DNSMASQ_DHCP),y) +DNSMASQ_COPTS += -DNO_DHCP +endif + +ifeq ($(BR2_PACKAGE_DNSMASQ_DNSSEC),y) +DNSMASQ_DEPENDENCIES += gmp nettle +DNSMASQ_COPTS += -DHAVE_DNSSEC +ifeq ($(BR2_STATIC_LIBS),y) +DNSMASQ_COPTS += -DHAVE_DNSSEC_STATIC +endif +endif + +ifneq ($(BR2_PACKAGE_DNSMASQ_TFTP),y) +DNSMASQ_COPTS += -DNO_TFTP +endif + +ifeq ($(BR2_PACKAGE_DNSMASQ_IDN),y) +ifeq ($(BR2_PACKAGE_LIBIDN2),y) +DNSMASQ_DEPENDENCIES += libidn2 +DNSMASQ_COPTS += -DHAVE_LIBIDN2 +else +DNSMASQ_DEPENDENCIES += libidn +DNSMASQ_COPTS += -DHAVE_IDN +endif +endif + +ifeq ($(BR2_PACKAGE_DNSMASQ_CONNTRACK),y) +DNSMASQ_DEPENDENCIES += libnetfilter_conntrack +DNSMASQ_COPTS += -DHAVE_CONNTRACK +endif + +ifeq ($(BR2_PACKAGE_DNSMASQ_LUA),y) +DNSMASQ_DEPENDENCIES += lua +DNSMASQ_COPTS += -DHAVE_LUASCRIPT + +# liblua uses dlopen when dynamically linked +ifneq ($(BR2_STATIC_LIBS),y) +DNSMASQ_MAKE_OPTS += LIBS+="-ldl" +endif + +define DNSMASQ_TWEAK_LIBLUA + $(SED) 's/lua5.2/lua/g' $(DNSMASQ_DIR)/Makefile +endef +endif + +ifeq ($(BR2_PACKAGE_DBUS),y) +DNSMASQ_DEPENDENCIES += dbus +DNSMASQ_COPTS += -DHAVE_DBUS + +define DNSMASQ_INSTALL_DBUS + $(INSTALL) -m 0644 -D $(@D)/dbus/dnsmasq.conf \ + $(TARGET_DIR)/etc/dbus-1/system.d/dnsmasq.conf +endef +endif + +ifeq ($(BR2_PACKAGE_UBUS),y) +DNSMASQ_DEPENDENCIES += ubus +DNSMASQ_COPTS += -DHAVE_UBUS +endif + +define DNSMASQ_BUILD_CMDS + $(DNSMASQ_TWEAK_LIBLUA) + $(DNSMASQ_MAKE_ENV) $(MAKE) -C $(@D) $(DNSMASQ_MAKE_OPTS) all$(DNSMASQ_I18N) +endef + +define DNSMASQ_INSTALL_TARGET_CMDS + $(DNSMASQ_MAKE_ENV) $(MAKE) -C $(@D) $(DNSMASQ_MAKE_OPTS) install$(DNSMASQ_I18N) + mkdir -p $(TARGET_DIR)/var/lib/misc/ + $(DNSMASQ_INSTALL_DBUS) +endef + +define DNSMASQ_INSTALL_INIT_SYSV + $(INSTALL) -m 755 -D package/dnsmasq/S80dnsmasq \ + $(TARGET_DIR)/etc/init.d/S80dnsmasq +endef + +$(eval $(generic-package)) diff --git a/package/doc-asciidoc.mk b/package/doc-asciidoc.mk new file mode 100644 index 00000000..be92496c --- /dev/null +++ b/package/doc-asciidoc.mk @@ -0,0 +1,190 @@ +# we can't use suitable-host-package here because that's not available in +# the context of 'make release' +.PHONY: asciidoc-check-dependencies +asciidoc-check-dependencies: + $(Q)if [ -z "$(shell support/dependencies/check-host-asciidoc.sh)" ]; then \ + echo "You need a sufficiently recent asciidoc on your host" \ + "to generate documents"; \ + exit 1; \ + fi + $(Q)if [ -z "`which w3m 2>/dev/null`" ]; then \ + echo "You need w3m on your host to generate documents"; \ + exit 1; \ + fi + +asciidoc-check-dependencies-pdf: + $(Q)if [ -z "`which dblatex 2>/dev/null`" ]; then \ + echo "You need dblatex on your host to generate PDF documents"; \ + exit 1; \ + fi + +# PDF generation is broken because of a bug in xsltproc program provided +# by libxslt <=1.1.28, which does not honor an option we need to set. +# Fortunately, this bug is already fixed upstream: +# https://gitorious.org/libxslt/libxslt/commit/5af7ad745323004984287e48b42712e7305de35c +# +# So, bail out when trying to build a PDF using a buggy version of the +# xsltproc program. +# +# So, to overcome this issue and being able to build a PDF, you can +# build xsltproc from its source repository, then run: +# $ PATH=/path/to/custom-xsltproc/bin:${PATH} make manual +GENDOC_XSLTPROC_IS_BROKEN = \ + $(shell xsltproc --maxvars 0 >/dev/null 2>/dev/null || echo y) + +# Apply this configuration to all documents +BR_ASCIIDOC_CONF = docs/conf/asciidoc.conf + +################################################################################ +# ASCIIDOC_INNER -- generates the make targets needed to build a specific type of +# asciidoc documentation. +# +# argument 1 is the name of the document and the top-level asciidoc file must +# have the same name +# argument 2 is the uppercase name of the document +# argument 3 is the directory containing the document +# argument 4 is the type of document to generate (-f argument of a2x) +# argument 5 is the document type as used in the make target +# argument 6 is the output file extension for the document type +# argument 7 is the human text for the document type +# argument 8 (optional) are extra arguments for a2x +# +# The variable _SOURCES defines the dependencies. +# +# Since this function will be called from within an $(eval ...) +# all variable references except the arguments must be $$-quoted. +################################################################################ +define ASCIIDOC_INNER +$(1): $(1)-$(5) +.PHONY: $(1)-$(5) +$(1)-$(5): $$(O)/docs/$(1)/$(1).$(6) + +asciidoc-check-dependencies-$(5): +.PHONY: $(1)-check-dependencies-$(5) +# Single line, because splitting a foreach is not easy... +$(1)-check-dependencies-$(5): asciidoc-check-dependencies-$(5) + $$(Q)$$(foreach hook,$$($(2)_CHECK_DEPENDENCIES_$$(call UPPERCASE,$(5))_HOOKS),$$(call $$(hook))$$(sep)) + +# Include Buildroot's AsciiDoc configuration first: +# - generic configuration, +# - then output-specific configuration +ifneq ($$(wildcard $$(BR_ASCIIDOC_CONF)),) +$(2)_$(4)_ASCIIDOC_OPTS += -f $$(BR_ASCIIDOC_CONF) +endif +BR_$(4)_ASCIIDOC_CONF = docs/conf/asciidoc-$(4).conf +ifneq ($$(wildcard $$(BR_$(4)_ASCIIDOC_CONF)),) +$(2)_$(4)_ASCIIDOC_OPTS += -f $$(BR_$(4)_ASCIIDOC_CONF) +endif + +# Then include the document's AsciiDoc configuration: +# - generic configuration, +# - then output-specific configuration +ifneq ($$(wildcard $$($(2)_ASCIIDOC_CONF)),) +$(2)_$(4)_ASCIIDOC_OPTS += -f $$($(2)_ASCIIDOC_CONF) +endif +$(2)_$(4)_ASCIIDOC_CONF = $(3)/asciidoc-$(4).conf +ifneq ($$(wildcard $$($(2)_$(4)_ASCIIDOC_CONF)),) +$(2)_$(4)_ASCIIDOC_OPTS += -f $$($(2)_$(4)_ASCIIDOC_CONF) +endif + +# Handle a2x warning about --destination-dir option only applicable to HTML +# based outputs. So: +# - use the --destination-dir option if possible (html and split-html), +# - otherwise copy the generated document to the output directory +$(2)_$(4)_A2X_OPTS = +ifneq ($$(filter $(5),html split-html),) +$(2)_$(4)_A2X_OPTS += --destination-dir="$$(@D)" +else +define $(2)_$(4)_INSTALL_CMDS + $$(Q)cp -f $$(BUILD_DIR)/docs/$(1)/$(1).$(6) $$(@D) +endef +endif + +$$(O)/docs/$(1)/$(1).$(6): export TZ=UTC + +ifeq ($(6)-$$(GENDOC_XSLTPROC_IS_BROKEN),pdf-y) +$$(O)/docs/$(1)/$(1).$(6): + $$(warning PDF generation is disabled because of a bug in \ + xsltproc. To be able to generate a PDF, you should \ + build xsltproc from the libxslt sources >=1.1.29 and pass it \ + to make through the command line: \ + 'PATH=/path/to/custom-xsltproc/bin:$$$${PATH} make $(1)-pdf') +else +# -r $(@D) is there for documents that use external filters; those filters +# generate code at the same location it finds the document's source files. +$$(O)/docs/$(1)/$(1).$(6): $$($(2)_SOURCES) \ + $(1)-check-dependencies \ + $(1)-check-dependencies-$(5) \ + $(1)-prepare-sources + $$(Q)$$(call MESSAGE,"Generating $(7) $(1)...") + $$(Q)mkdir -p $$(@D) + $$(Q)a2x $(8) -f $(4) -d book -L \ + $$(foreach r,$$($(2)_RESOURCES) $$(@D), \ + --resource="$$(abspath $$(r))") \ + $$($(2)_$(4)_A2X_OPTS) \ + --asciidoc-opts="$$($(2)_$(4)_ASCIIDOC_OPTS)" \ + $$(BUILD_DIR)/docs/$(1)/$(1).txt +# install the generated document + $$($(2)_$(4)_INSTALL_CMDS) +endif +endef + +################################################################################ +# ASCIIDOC -- generates the make targets needed to build asciidoc documentation. +# +# argument 1 is the lowercase name of the document; the document's main file +# must have the same name, with the .txt extension +# argument 2 is the uppercase name of the document +# argument 3 is the directory containing the document's sources +# +# The variable _SOURCES defines the dependencies. +# The variable _RESOURCES defines where the document's +# resources, such as images, are located; must be an absolute path. +################################################################################ +define ASCIIDOC +# Single line, because splitting a foreach is not easy... +.PHONY: $(1)-check-dependencies +$(1)-check-dependencies: asciidoc-check-dependencies $$($(2)_DEPENDENCIES) + $$(Q)$$(foreach hook,$$($(2)_CHECK_DEPENDENCIES_HOOKS),$$(call $$(hook))$$(sep)) + +# Single line, because splitting a foreach is not easy... +# Do not touch the stamp file, so we get to rsync again every time we build +# the document. +$$(BUILD_DIR)/docs/$(1)/.stamp_doc_rsynced: + $$(Q)$$(call MESSAGE,"Preparing the $(1) sources...") + $$(Q)mkdir -p $$(@D) + $$(Q)rsync -a $(3) $$(@D) + $$(Q)$$(foreach hook,$$($(2)_POST_RSYNC_HOOKS),$$(call $$(hook))$$(sep)) + +.PHONY: $(1)-prepare-sources +$(1)-prepare-sources: $$(BUILD_DIR)/docs/$(1)/.stamp_doc_rsynced + +$(2)_ASCIIDOC_CONF = $(3)/asciidoc.conf + +$(call ASCIIDOC_INNER,$(1),$(2),$(3),xhtml,html,html,HTML,\ + --xsltproc-opts "--stringparam toc.section.depth 1") + +$(call ASCIIDOC_INNER,$(1),$(2),$(3),chunked,split-html,chunked,split HTML,\ + --xsltproc-opts "--stringparam toc.section.depth 1") + +# dblatex needs to pass the '--maxvars ...' option to xsltproc to prevent it +# from reaching the template recursion limit when processing the (long) target +# package table and bailing out. +$(call ASCIIDOC_INNER,$(1),$(2),$(3),pdf,pdf,pdf,PDF,\ + --dblatex-opts "-P latex.output.revhistory=0 -x '--maxvars 100000'") + +$(call ASCIIDOC_INNER,$(1),$(2),$(3),text,text,text,text) + +$(call ASCIIDOC_INNER,$(1),$(2),$(3),epub,epub,epub,ePUB) + +clean: $(1)-clean +$(1)-clean: + $$(Q)$$(RM) -rf $$(BUILD_DIR)/docs/$(1) +.PHONY: $(1) $(1)-clean +endef + +################################################################################ +# asciidoc-document -- the target generator macro for asciidoc documents +################################################################################ + +asciidoc-document = $(call ASCIIDOC,$(pkgname),$(call UPPERCASE,$(pkgname)),$(pkgdir)) diff --git a/package/docker-cli/Config.in b/package/docker-cli/Config.in new file mode 100644 index 00000000..6f187c9d --- /dev/null +++ b/package/docker-cli/Config.in @@ -0,0 +1,25 @@ +config BR2_PACKAGE_DOCKER_CLI + bool "docker-cli" + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Docker is a platform to build, ship, + and run applications as lightweight containers. + + https://github.com/docker/cli + +if BR2_PACKAGE_DOCKER_CLI + +config BR2_PACKAGE_DOCKER_CLI_STATIC + bool "build static client" + depends on !BR2_STATIC_LIBS + help + Build a static docker client. + +endif + +comment "docker-cli needs a toolchain w/ threads" + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/docker-cli/docker-cli.hash b/package/docker-cli/docker-cli.hash new file mode 100644 index 00000000..6d380c2f --- /dev/null +++ b/package/docker-cli/docker-cli.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 0a7848b1b5031483de075433506d0448ddf834368d9c73770e453e0b89b49747 docker-cli-20.10.7.tar.gz +sha256 2d81ea060825006fc8f3fe28aa5dc0ffeb80faf325b612c955229157b8c10dc0 LICENSE diff --git a/package/docker-cli/docker-cli.mk b/package/docker-cli/docker-cli.mk new file mode 100644 index 00000000..24fd26a8 --- /dev/null +++ b/package/docker-cli/docker-cli.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# docker-cli +# +################################################################################ + +DOCKER_CLI_VERSION = 20.10.7 +DOCKER_CLI_SITE = $(call github,docker,cli,v$(DOCKER_CLI_VERSION)) + +DOCKER_CLI_LICENSE = Apache-2.0 +DOCKER_CLI_LICENSE_FILES = LICENSE + +DOCKER_CLI_DEPENDENCIES = host-pkgconf + +DOCKER_CLI_CPE_ID_VENDOR = docker +DOCKER_CLI_CPE_ID_PRODUCT = docker + +DOCKER_CLI_TAGS = autogen +DOCKER_CLI_BUILD_TARGETS = cmd/docker +DOCKER_CLI_GOMOD = github.com/docker/cli + +DOCKER_CLI_LDFLAGS = \ + -X $(DOCKER_CLI_GOMOD)/cli/version.GitCommit=$(DOCKER_CLI_VERSION) \ + -X $(DOCKER_CLI_GOMOD)/cli/version.Version=$(DOCKER_CLI_VERSION) + +ifeq ($(BR2_PACKAGE_DOCKER_CLI_STATIC),y) +DOCKER_CLI_LDFLAGS += -extldflags '-static' +DOCKER_CLI_TAGS += osusergo netgo +DOCKER_CLI_GO_ENV = CGO_ENABLED=no +endif + +DOCKER_CLI_INSTALL_BINS = $(notdir $(DOCKER_CLI_BUILD_TARGETS)) + +$(eval $(golang-package)) diff --git a/package/docker-compose/0001-Strip-up-generic-versions-and-bump-requests.patch b/package/docker-compose/0001-Strip-up-generic-versions-and-bump-requests.patch new file mode 100644 index 00000000..536a9590 --- /dev/null +++ b/package/docker-compose/0001-Strip-up-generic-versions-and-bump-requests.patch @@ -0,0 +1,66 @@ +From 2bb1a267aba3ca5fe414d0f79192def668c18bab Mon Sep 17 00:00:00 2001 +From: Ulysses Souza +Date: Tue, 2 Jul 2019 15:49:07 +0200 +Subject: [PATCH] Strip up generic versions and bump requests + +Replaces generic limitations with a next major value +Bump the minimal `requests` to 2.20.0 + +Signed-off-by: Ulysses Souza +(cherry picked from commit ce5451c5b4a3b449ce703168d2a568b0a4d25ee6) +Signed-off-by: Peter Korsgaard +--- + setup.py | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +diff --git a/setup.py b/setup.py +index 8371cc75..61447801 100644 +--- a/setup.py ++++ b/setup.py +@@ -31,31 +31,31 @@ def find_version(*file_paths): + + install_requires = [ + 'cached-property >= 1.2.0, < 2', +- 'docopt >= 0.6.1, < 0.7', +- 'PyYAML >= 3.10, < 4.3', +- 'requests >= 2.6.1, != 2.11.0, != 2.12.2, != 2.18.0, < 2.21', +- 'texttable >= 0.9.0, < 0.10', +- 'websocket-client >= 0.32.0, < 1.0', +- 'docker[ssh] >= 3.7.0, < 4.0', +- 'dockerpty >= 0.4.1, < 0.5', ++ 'docopt >= 0.6.1, < 1', ++ 'PyYAML >= 3.10, < 5', ++ 'requests >= 2.20.0, < 3', ++ 'texttable >= 0.9.0, < 1', ++ 'websocket-client >= 0.32.0, < 1', ++ 'docker[ssh] >= 3.7.0, < 5', ++ 'dockerpty >= 0.4.1, < 1', + 'six >= 1.3.0, < 2', + 'jsonschema >= 2.5.1, < 3', + ] + + + tests_require = [ +- 'pytest', ++ 'pytest < 6', + ] + + + if sys.version_info[:2] < (3, 4): +- tests_require.append('mock >= 1.0.1') ++ tests_require.append('mock >= 1.0.1, < 2') + + extras_require = { + ':python_version < "3.4"': ['enum34 >= 1.0.4, < 2'], +- ':python_version < "3.5"': ['backports.ssl_match_hostname >= 3.5'], +- ':python_version < "3.3"': ['ipaddress >= 1.0.16'], +- ':sys_platform == "win32"': ['colorama >= 0.4, < 0.5'], ++ ':python_version < "3.5"': ['backports.ssl_match_hostname >= 3.5, < 4'], ++ ':python_version < "3.3"': ['ipaddress >= 1.0.16, < 2'], ++ ':sys_platform == "win32"': ['colorama >= 0.4, < 1'], + 'socks': ['PySocks >= 1.5.6, != 1.5.7, < 2'], + } + +-- +2.20.1 + diff --git a/package/docker-compose/0002-Bump-texttable-from-0.9.1-to-1.6.2.patch b/package/docker-compose/0002-Bump-texttable-from-0.9.1-to-1.6.2.patch new file mode 100644 index 00000000..92c2e1f1 --- /dev/null +++ b/package/docker-compose/0002-Bump-texttable-from-0.9.1-to-1.6.2.patch @@ -0,0 +1,41 @@ +From e55dd65ba42a17ba4b017b42f14f7ee647efe64f Mon Sep 17 00:00:00 2001 +From: Ulysses Souza +Date: Mon, 8 Jul 2019 14:52:30 +0200 +Subject: [PATCH] Bump texttable from 0.9.1 to 1.6.2 + +Signed-off-by: Ulysses Souza +(cherry picked from commit 0bfa1c34f054d86674434770d4d6340e02508e52) +Signed-off-by: Peter Korsgaard +--- + requirements.txt | 2 +- + setup.py | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/requirements.txt b/requirements.txt +index 6007ee3f..d868fdeb 100644 +--- a/requirements.txt ++++ b/requirements.txt +@@ -19,6 +19,6 @@ PySocks==1.6.7 + PyYAML==4.2b1 + requests==2.20.0 + six==1.10.0 +-texttable==0.9.1 ++texttable==1.6.2 + urllib3==1.21.1; python_version == '3.3' + websocket-client==0.56.0 +diff --git a/setup.py b/setup.py +index 61447801..c9e4729d 100644 +--- a/setup.py ++++ b/setup.py +@@ -34,7 +34,7 @@ install_requires = [ + 'docopt >= 0.6.1, < 1', + 'PyYAML >= 3.10, < 5', + 'requests >= 2.20.0, < 3', +- 'texttable >= 0.9.0, < 1', ++ 'texttable >= 0.9.0, < 2', + 'websocket-client >= 0.32.0, < 1', + 'docker[ssh] >= 3.7.0, < 5', + 'dockerpty >= 0.4.1, < 1', +-- +2.20.1 + diff --git a/package/docker-compose/0003-support-PyYAML-up-to-5.1-version.patch b/package/docker-compose/0003-support-PyYAML-up-to-5.1-version.patch new file mode 100644 index 00000000..ecbd197a --- /dev/null +++ b/package/docker-compose/0003-support-PyYAML-up-to-5.1-version.patch @@ -0,0 +1,44 @@ +From 3be619b814c16c02a02499e7a157dabd065926dd Mon Sep 17 00:00:00 2001 +From: Sergey Fursov +Date: Sun, 31 Mar 2019 12:45:50 +0700 +Subject: [PATCH] support PyYAML up to 5.1 version + +Signed-off-by: Sergey Fursov +[Upstream: https://github.com/docker/compose/pull/6623] +(cherry picked from commit d2ca096f46a56cd4db494c593ed84e5c255dc15d) +[Peter: allow all 5.x] +Signed-off-by: Peter Korsgaard +--- + requirements.txt | 2 +- + setup.py | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/requirements.txt b/requirements.txt +index d868fdeb..e3dbc807 100644 +--- a/requirements.txt ++++ b/requirements.txt +@@ -16,7 +16,7 @@ paramiko==2.4.2 + pypiwin32==219; sys_platform == 'win32' and python_version < '3.6' + pypiwin32==223; sys_platform == 'win32' and python_version >= '3.6' + PySocks==1.6.7 +-PyYAML==4.2b1 ++PyYAML==5.1 + requests==2.20.0 + six==1.10.0 + texttable==1.6.2 +diff --git a/setup.py b/setup.py +index c9e4729d..17ab678e 100644 +--- a/setup.py ++++ b/setup.py +@@ -32,7 +32,7 @@ def find_version(*file_paths): + install_requires = [ + 'cached-property >= 1.2.0, < 2', + 'docopt >= 0.6.1, < 1', +- 'PyYAML >= 3.10, < 5', ++ 'PyYAML >= 3.10, < 6', + 'requests >= 2.20.0, < 3', + 'texttable >= 0.9.0, < 2', + 'websocket-client >= 0.32.0, < 1', +-- +2.20.1 + diff --git a/package/docker-compose/Config.in b/package/docker-compose/Config.in new file mode 100644 index 00000000..74af8e03 --- /dev/null +++ b/package/docker-compose/Config.in @@ -0,0 +1,32 @@ +config BR2_PACKAGE_DOCKER_COMPOSE + bool "docker-compose" + depends on BR2_USE_MMU # python + depends on BR2_USE_WCHAR # python + depends on BR2_TOOLCHAIN_HAS_THREADS # python + depends on !BR2_STATIC_LIBS # python + depends on BR2_INSTALL_LIBSTDCPP # python-paramiko -> python-cryptography + select BR2_PACKAGE_PYTHON3 if !BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON_BACKPORTS_SSL_MATCH_HOSTNAME \ + if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON_ENUM34 if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON_IPADDRESS if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON_CACHED_PROPERTY # runtime + select BR2_PACKAGE_PYTHON_DOCOPT # runtime + select BR2_PACKAGE_PYTHON_PARAMIKO # runtime + select BR2_PACKAGE_PYTHON_PYYAML # runtime + select BR2_PACKAGE_PYTHON_REQUESTS # runtime + select BR2_PACKAGE_PYTHON_TEXTTABLE # runtime + select BR2_PACKAGE_PYTHON_WEBSOCKET_CLIENT # runtime + select BR2_PACKAGE_PYTHON_DOCKER # runtime + select BR2_PACKAGE_PYTHON_DOCKERPTY # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON_JSONSCHEMA # runtime + help + Multi-container orchestration for Docker. + + https://www.docker.com/ + +comment "docker-compose needs a toolchain w/ C++, wchar, threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS || !BR2_INSTALL_LIBSTDCPP diff --git a/package/docker-compose/docker-compose.hash b/package/docker-compose/docker-compose.hash new file mode 100644 index 00000000..aa29a6d6 --- /dev/null +++ b/package/docker-compose/docker-compose.hash @@ -0,0 +1,5 @@ +# from https://pypi.python.org/pypi/docker-compose/json +sha256 a5d58e974fd717e24b0dda6669a46bc03548d9023ef38d965acdc32d4d5fa753 docker-compose-1.24.1.tar.gz + +# locally computed +sha256 552a739c3b25792263f731542238b92f6f8d07e9a488eae27e6c4690038a8243 LICENSE diff --git a/package/docker-compose/docker-compose.mk b/package/docker-compose/docker-compose.mk new file mode 100644 index 00000000..ec24157c --- /dev/null +++ b/package/docker-compose/docker-compose.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# docker-compose +# +################################################################################ + +DOCKER_COMPOSE_VERSION = 1.24.1 +DOCKER_COMPOSE_SITE = https://files.pythonhosted.org/packages/b6/a4/59c39df6a23144a6252ad33170dfbf781af5953651e4587e8ea5f995f95e +DOCKER_COMPOSE_SETUP_TYPE = setuptools +DOCKER_COMPOSE_LICENSE = Apache-2.0 +DOCKER_COMPOSE_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/docker-containerd/0001-Add-loongarch64-support.patch b/package/docker-containerd/0001-Add-loongarch64-support.patch new file mode 100644 index 00000000..5ccbd460 --- /dev/null +++ b/package/docker-containerd/0001-Add-loongarch64-support.patch @@ -0,0 +1,25 @@ +From 144549037a2a91cc8d7c31f5a0861d9c0cda998b Mon Sep 17 00:00:00 2001 +From: loongson +Date: Wed, 9 Aug 2023 18:58:48 +0800 +Subject: [PATCH] Add loongarch64 support + +--- + Makefile.linux | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile.linux b/Makefile.linux +index c338531..1af9f2c 100644 +--- a/Makefile.linux ++++ b/Makefile.linux +@@ -20,7 +20,7 @@ COMMANDS += containerd-shim containerd-shim-runc-v1 containerd-shim-runc-v2 + + # check GOOS for cross compile builds + ifeq ($(GOOS),linux) +- ifneq ($(GOARCH),$(filter $(GOARCH),mips mipsle mips64 mips64le ppc64 riscv64)) ++ ifneq ($(GOARCH),$(filter $(GOARCH),mips mipsle mips64 mips64le ppc64 riscv64 loong64)) + GO_GCFLAGS += -buildmode=pie + endif + endif +-- +2.17.1 + diff --git a/package/docker-containerd/0002-sys-unix-port-to-loongarh64.patch b/package/docker-containerd/0002-sys-unix-port-to-loongarh64.patch new file mode 100644 index 00000000..f4500307 --- /dev/null +++ b/package/docker-containerd/0002-sys-unix-port-to-loongarh64.patch @@ -0,0 +1,19971 @@ +From 6a7b7c582f8bc9e5e1cb051cbcedb58c8861cc54 Mon Sep 17 00:00:00 2001 +From: loongson +Date: Wed, 9 Aug 2023 12:16:11 +0800 +Subject: [PATCH 2/2] sys/unix:port to loongarh64 + +--- + .../golang.org/x/sys/unix/asm_linux_loong64.s | 53 + + vendor/golang.org/x/sys/unix/creds_test.go | 134 + + vendor/golang.org/x/sys/unix/darwin_test.go | 209 ++ + .../golang.org/x/sys/unix/dev_linux_test.go | 56 + + vendor/golang.org/x/sys/unix/dirent_test.go | 150 ++ + vendor/golang.org/x/sys/unix/endian_little.go | 2 +- + .../x/sys/unix/example_exec_test.go | 19 + + .../x/sys/unix/example_flock_test.go | 25 + + vendor/golang.org/x/sys/unix/export_test.go | 9 + + vendor/golang.org/x/sys/unix/fdset_test.go | 63 + + .../x/sys/unix/getdirentries_test.go | 83 + + vendor/golang.org/x/sys/unix/linux/mkall.go | 846 ++++++ + .../golang.org/x/sys/unix/linux/mksysnum.go | 143 + + vendor/golang.org/x/sys/unix/linux/types.go | 2346 +++++++++++++++++ + vendor/golang.org/x/sys/unix/mkasm_darwin.go | 78 + + vendor/golang.org/x/sys/unix/mkmerge.go | 521 ++++ + vendor/golang.org/x/sys/unix/mkmerge_test.go | 505 ++++ + vendor/golang.org/x/sys/unix/mkpost.go | 127 + + vendor/golang.org/x/sys/unix/mksyscall.go | 402 +++ + .../x/sys/unix/mksyscall_aix_ppc.go | 415 +++ + .../x/sys/unix/mksyscall_aix_ppc64.go | 614 +++++ + .../x/sys/unix/mksyscall_solaris.go | 341 +++ + .../golang.org/x/sys/unix/mksysctl_openbsd.go | 355 +++ + vendor/golang.org/x/sys/unix/mksysnum.go | 190 ++ + .../golang.org/x/sys/unix/mmap_unix_test.go | 41 + + vendor/golang.org/x/sys/unix/openbsd_test.go | 113 + + vendor/golang.org/x/sys/unix/sendfile_test.go | 103 + + .../golang.org/x/sys/unix/syscall_aix_test.go | 107 + + .../golang.org/x/sys/unix/syscall_bsd_test.go | 75 + + .../golang.org/x/sys/unix/syscall_darwin.go | 1 - + .../x/sys/unix/syscall_darwin_386.go | 11 + + .../x/sys/unix/syscall_darwin_amd64.go | 11 + + .../x/sys/unix/syscall_darwin_arm.go | 11 + + .../x/sys/unix/syscall_darwin_arm64.go | 11 + + .../x/sys/unix/syscall_darwin_test.go | 19 + + .../x/sys/unix/syscall_freebsd_test.go | 312 +++ + .../x/sys/unix/syscall_internal_bsd_test.go | 175 ++ + .../x/sys/unix/syscall_internal_linux_test.go | 507 ++++ + vendor/golang.org/x/sys/unix/syscall_linux.go | 30 +- + .../x/sys/unix/syscall_linux.go-bak | 2228 ++++++++++++++++ + .../x/sys/unix/syscall_linux_loong64.go | 229 ++ + .../x/sys/unix/syscall_linux_test.go | 718 +++++ + .../x/sys/unix/syscall_netbsd_test.go | 75 + + .../x/sys/unix/syscall_openbsd_test.go | 50 + + .../x/sys/unix/syscall_solaris_test.go | 34 + + vendor/golang.org/x/sys/unix/syscall_test.go | 71 + + .../x/sys/unix/syscall_unix_test.go | 884 +++++++ + .../golang.org/x/sys/unix/timestruct_test.go | 54 + + vendor/golang.org/x/sys/unix/types_aix.go | 237 ++ + vendor/golang.org/x/sys/unix/types_darwin.go | 283 ++ + .../golang.org/x/sys/unix/types_dragonfly.go | 269 ++ + vendor/golang.org/x/sys/unix/types_freebsd.go | 406 +++ + vendor/golang.org/x/sys/unix/types_netbsd.go | 300 +++ + vendor/golang.org/x/sys/unix/types_openbsd.go | 283 ++ + vendor/golang.org/x/sys/unix/types_solaris.go | 269 ++ + vendor/golang.org/x/sys/unix/xattr_test.go | 207 ++ + vendor/golang.org/x/sys/unix/zerrors_linux.go | 66 +- + .../x/sys/unix/zerrors_linux_386.go | 1 - + .../x/sys/unix/zerrors_linux_amd64.go | 1 - + .../x/sys/unix/zerrors_linux_arm.go | 1 - + .../x/sys/unix/zerrors_linux_arm64.go | 1 - + .../x/sys/unix/zerrors_linux_loong64.go | 782 ++++++ + .../x/sys/unix/zerrors_linux_mips.go | 1 - + .../x/sys/unix/zerrors_linux_mips64.go | 1 - + .../x/sys/unix/zerrors_linux_mips64le.go | 1 - + .../x/sys/unix/zerrors_linux_mipsle.go | 1 - + .../x/sys/unix/zerrors_linux_ppc64.go | 1 - + .../x/sys/unix/zerrors_linux_ppc64le.go | 1 - + .../x/sys/unix/zerrors_linux_riscv64.go | 1 - + .../x/sys/unix/zerrors_linux_s390x.go | 1 - + .../x/sys/unix/zerrors_linux_sparc64.go | 1 - + .../x/sys/unix/zptrace_linux_loong64.go | 56 + + .../x/sys/unix/zsyscall_darwin_386.1_11.go | 22 +- + .../x/sys/unix/zsyscall_darwin_386.go | 32 +- + .../x/sys/unix/zsyscall_darwin_amd64.1_11.go | 22 +- + .../x/sys/unix/zsyscall_darwin_amd64.go | 32 +- + .../x/sys/unix/zsyscall_darwin_arm.1_11.go | 22 +- + .../x/sys/unix/zsyscall_darwin_arm.go | 32 +- + .../x/sys/unix/zsyscall_darwin_arm64.1_11.go | 22 +- + .../x/sys/unix/zsyscall_darwin_arm64.go | 32 +- + .../x/sys/unix/zsyscall_linux_loong64.go | 605 +++++ + .../x/sys/unix/zsysctl_openbsd_386.go | 3 +- + .../x/sys/unix/zsysctl_openbsd_amd64.go | 1 - + .../x/sys/unix/zsysctl_openbsd_arm.go | 1 - + .../x/sys/unix/zsysnum_linux_loong64.go | 305 +++ + .../x/sys/unix/ztypes_freebsd_arm.go | 12 +- + vendor/golang.org/x/sys/unix/ztypes_linux.go | 445 ++-- + .../x/sys/unix/ztypes_linux_loong64.go | 610 +++++ + 88 files changed, 18521 insertions(+), 404 deletions(-) + create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_loong64.s + create mode 100644 vendor/golang.org/x/sys/unix/creds_test.go + create mode 100644 vendor/golang.org/x/sys/unix/darwin_test.go + create mode 100644 vendor/golang.org/x/sys/unix/dev_linux_test.go + create mode 100644 vendor/golang.org/x/sys/unix/dirent_test.go + create mode 100644 vendor/golang.org/x/sys/unix/example_exec_test.go + create mode 100644 vendor/golang.org/x/sys/unix/example_flock_test.go + create mode 100644 vendor/golang.org/x/sys/unix/export_test.go + create mode 100644 vendor/golang.org/x/sys/unix/fdset_test.go + create mode 100644 vendor/golang.org/x/sys/unix/getdirentries_test.go + create mode 100644 vendor/golang.org/x/sys/unix/linux/mkall.go + create mode 100644 vendor/golang.org/x/sys/unix/linux/mksysnum.go + create mode 100644 vendor/golang.org/x/sys/unix/linux/types.go + create mode 100644 vendor/golang.org/x/sys/unix/mkasm_darwin.go + create mode 100644 vendor/golang.org/x/sys/unix/mkmerge.go + create mode 100644 vendor/golang.org/x/sys/unix/mkmerge_test.go + create mode 100644 vendor/golang.org/x/sys/unix/mkpost.go + create mode 100644 vendor/golang.org/x/sys/unix/mksyscall.go + create mode 100644 vendor/golang.org/x/sys/unix/mksyscall_aix_ppc.go + create mode 100644 vendor/golang.org/x/sys/unix/mksyscall_aix_ppc64.go + create mode 100644 vendor/golang.org/x/sys/unix/mksyscall_solaris.go + create mode 100644 vendor/golang.org/x/sys/unix/mksysctl_openbsd.go + create mode 100644 vendor/golang.org/x/sys/unix/mksysnum.go + create mode 100644 vendor/golang.org/x/sys/unix/mmap_unix_test.go + create mode 100644 vendor/golang.org/x/sys/unix/openbsd_test.go + create mode 100644 vendor/golang.org/x/sys/unix/sendfile_test.go + create mode 100644 vendor/golang.org/x/sys/unix/syscall_aix_test.go + create mode 100644 vendor/golang.org/x/sys/unix/syscall_bsd_test.go + create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_test.go + create mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_test.go + create mode 100644 vendor/golang.org/x/sys/unix/syscall_internal_bsd_test.go + create mode 100644 vendor/golang.org/x/sys/unix/syscall_internal_linux_test.go + create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux.go-bak + create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_loong64.go + create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_test.go + create mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_test.go + create mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_test.go + create mode 100644 vendor/golang.org/x/sys/unix/syscall_solaris_test.go + create mode 100644 vendor/golang.org/x/sys/unix/syscall_test.go + create mode 100644 vendor/golang.org/x/sys/unix/syscall_unix_test.go + create mode 100644 vendor/golang.org/x/sys/unix/timestruct_test.go + create mode 100644 vendor/golang.org/x/sys/unix/types_aix.go + create mode 100644 vendor/golang.org/x/sys/unix/types_darwin.go + create mode 100644 vendor/golang.org/x/sys/unix/types_dragonfly.go + create mode 100644 vendor/golang.org/x/sys/unix/types_freebsd.go + create mode 100644 vendor/golang.org/x/sys/unix/types_netbsd.go + create mode 100644 vendor/golang.org/x/sys/unix/types_openbsd.go + create mode 100644 vendor/golang.org/x/sys/unix/types_solaris.go + create mode 100644 vendor/golang.org/x/sys/unix/xattr_test.go + create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go + create mode 100644 vendor/golang.org/x/sys/unix/zptrace_linux_loong64.go + create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go + create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go + create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go + +diff --git a/vendor/golang.org/x/sys/unix/asm_linux_loong64.s b/vendor/golang.org/x/sys/unix/asm_linux_loong64.s +new file mode 100644 +index 0000000..ce2580b +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/asm_linux_loong64.s +@@ -0,0 +1,53 @@ ++// Copyright 2015 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build linux ++// +build loong64 ++// +build !gccgo ++ ++#include "textflag.h" ++ ++ ++// Just jump to package syscall's implementation for all these functions. ++// The runtime may know about them. ++ ++TEXT ·Syscall(SB),NOSPLIT,$0-56 ++ JMP syscall·Syscall(SB) ++ ++TEXT ·Syscall6(SB),NOSPLIT,$0-80 ++ JMP syscall·Syscall6(SB) ++ ++TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 ++ JAL runtime·entersyscall(SB) ++ MOVV a1+8(FP), R4 ++ MOVV a2+16(FP), R5 ++ MOVV a3+24(FP), R6 ++ MOVV R0, R7 ++ MOVV R0, R8 ++ MOVV R0, R9 ++ MOVV trap+0(FP), R11 // syscall entry ++ SYSCALL ++ MOVV R4, r1+32(FP) ++ MOVV R5, r2+40(FP) ++ JAL runtime·exitsyscall(SB) ++ RET ++ ++TEXT ·RawSyscall(SB),NOSPLIT,$0-56 ++ JMP syscall·RawSyscall(SB) ++ ++TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 ++ JMP syscall·RawSyscall6(SB) ++ ++TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 ++ MOVV a1+8(FP), R4 ++ MOVV a2+16(FP), R5 ++ MOVV a3+24(FP), R6 ++ MOVV R0, R7 ++ MOVV R0, R8 ++ MOVV R0, R9 ++ MOVV trap+0(FP), R11 // syscall entry ++ SYSCALL ++ MOVV R4, r1+32(FP) ++ MOVV R5, r2+40(FP) ++ RET +diff --git a/vendor/golang.org/x/sys/unix/creds_test.go b/vendor/golang.org/x/sys/unix/creds_test.go +new file mode 100644 +index 0000000..1b50831 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/creds_test.go +@@ -0,0 +1,134 @@ ++// Copyright 2012 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build linux ++ ++package unix_test ++ ++import ( ++ "bytes" ++ "go/build" ++ "net" ++ "os" ++ "testing" ++ ++ "golang.org/x/sys/unix" ++) ++ ++// TestSCMCredentials tests the sending and receiving of credentials ++// (PID, UID, GID) in an ancillary message between two UNIX ++// sockets. The SO_PASSCRED socket option is enabled on the sending ++// socket for this to work. ++func TestSCMCredentials(t *testing.T) { ++ socketTypeTests := []struct { ++ socketType int ++ dataLen int ++ }{ ++ { ++ unix.SOCK_STREAM, ++ 1, ++ }, { ++ unix.SOCK_DGRAM, ++ 0, ++ }, ++ } ++ ++ for _, tt := range socketTypeTests { ++ if tt.socketType == unix.SOCK_DGRAM && !atLeast1p10() { ++ t.Log("skipping DGRAM test on pre-1.10") ++ continue ++ } ++ ++ fds, err := unix.Socketpair(unix.AF_LOCAL, tt.socketType, 0) ++ if err != nil { ++ t.Fatalf("Socketpair: %v", err) ++ } ++ defer unix.Close(fds[0]) ++ defer unix.Close(fds[1]) ++ ++ err = unix.SetsockoptInt(fds[0], unix.SOL_SOCKET, unix.SO_PASSCRED, 1) ++ if err != nil { ++ t.Fatalf("SetsockoptInt: %v", err) ++ } ++ ++ srvFile := os.NewFile(uintptr(fds[0]), "server") ++ defer srvFile.Close() ++ srv, err := net.FileConn(srvFile) ++ if err != nil { ++ t.Errorf("FileConn: %v", err) ++ return ++ } ++ defer srv.Close() ++ ++ cliFile := os.NewFile(uintptr(fds[1]), "client") ++ defer cliFile.Close() ++ cli, err := net.FileConn(cliFile) ++ if err != nil { ++ t.Errorf("FileConn: %v", err) ++ return ++ } ++ defer cli.Close() ++ ++ var ucred unix.Ucred ++ ucred.Pid = int32(os.Getpid()) ++ ucred.Uid = uint32(os.Getuid()) ++ ucred.Gid = uint32(os.Getgid()) ++ oob := unix.UnixCredentials(&ucred) ++ ++ // On SOCK_STREAM, this is internally going to send a dummy byte ++ n, oobn, err := cli.(*net.UnixConn).WriteMsgUnix(nil, oob, nil) ++ if err != nil { ++ t.Fatalf("WriteMsgUnix: %v", err) ++ } ++ if n != 0 { ++ t.Fatalf("WriteMsgUnix n = %d, want 0", n) ++ } ++ if oobn != len(oob) { ++ t.Fatalf("WriteMsgUnix oobn = %d, want %d", oobn, len(oob)) ++ } ++ ++ oob2 := make([]byte, 10*len(oob)) ++ n, oobn2, flags, _, err := srv.(*net.UnixConn).ReadMsgUnix(nil, oob2) ++ if err != nil { ++ t.Fatalf("ReadMsgUnix: %v", err) ++ } ++ if flags != 0 { ++ t.Fatalf("ReadMsgUnix flags = 0x%x, want 0", flags) ++ } ++ if n != tt.dataLen { ++ t.Fatalf("ReadMsgUnix n = %d, want %d", n, tt.dataLen) ++ } ++ if oobn2 != oobn { ++ // without SO_PASSCRED set on the socket, ReadMsgUnix will ++ // return zero oob bytes ++ t.Fatalf("ReadMsgUnix oobn = %d, want %d", oobn2, oobn) ++ } ++ oob2 = oob2[:oobn2] ++ if !bytes.Equal(oob, oob2) { ++ t.Fatal("ReadMsgUnix oob bytes don't match") ++ } ++ ++ scm, err := unix.ParseSocketControlMessage(oob2) ++ if err != nil { ++ t.Fatalf("ParseSocketControlMessage: %v", err) ++ } ++ newUcred, err := unix.ParseUnixCredentials(&scm[0]) ++ if err != nil { ++ t.Fatalf("ParseUnixCredentials: %v", err) ++ } ++ if *newUcred != ucred { ++ t.Fatalf("ParseUnixCredentials = %+v, want %+v", newUcred, ucred) ++ } ++ } ++} ++ ++// atLeast1p10 reports whether we are running on Go 1.10 or later. ++func atLeast1p10() bool { ++ for _, ver := range build.Default.ReleaseTags { ++ if ver == "go1.10" { ++ return true ++ } ++ } ++ return false ++} +diff --git a/vendor/golang.org/x/sys/unix/darwin_test.go b/vendor/golang.org/x/sys/unix/darwin_test.go +new file mode 100644 +index 0000000..9d5caa7 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/darwin_test.go +@@ -0,0 +1,209 @@ ++// Copyright 2018 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build darwin,go1.12,amd64 darwin,go1.12,386 ++ ++package unix ++ ++import ( ++ "os" ++ "os/exec" ++ "strings" ++ "testing" ++) ++ ++type darwinTest struct { ++ name string ++ f func() ++} ++ ++// TODO(khr): decide whether to keep this test enabled permanently or ++// only temporarily. ++func TestDarwinLoader(t *testing.T) { ++ // Make sure the Darwin dynamic loader can actually resolve ++ // all the system calls into libSystem.dylib. Unfortunately ++ // there is no easy way to test this at compile time. So we ++ // implement a crazy hack here, calling into the syscall ++ // function with all its arguments set to junk, and see what ++ // error we get. We are happy with any error (or none) except ++ // an error from the dynamic loader. ++ // ++ // We have to run each test in a separate subprocess for fault isolation. ++ // ++ // Hopefully the junk args won't accidentally ask the system to do "rm -fr /". ++ // ++ // In an ideal world each syscall would have its own test, so this test ++ // would be unnecessary. Unfortunately, we do not live in that world. ++ for _, test := range darwinTests { ++ // Call the test binary recursively, giving it a magic argument ++ // (see init below) and the name of the test to run. ++ cmd := exec.Command(os.Args[0], "testDarwinLoader", test.name) ++ ++ // Run subprocess, collect results. Note that we expect the subprocess ++ // to fail somehow, so the error is irrelevant. ++ out, _ := cmd.CombinedOutput() ++ ++ if strings.Contains(string(out), "dyld: Symbol not found:") { ++ t.Errorf("can't resolve %s in libSystem.dylib", test.name) ++ } ++ if !strings.Contains(string(out), "success") { ++ // Not really an error. Might be a syscall that never returns, ++ // like exit, or one that segfaults, like gettimeofday. ++ t.Logf("test never finished: %s: %s", test.name, string(out)) ++ } ++ } ++} ++ ++func init() { ++ // The test binary execs itself with the "testDarwinLoader" argument. ++ // Run the test specified by os.Args[2], then panic. ++ if len(os.Args) >= 3 && os.Args[1] == "testDarwinLoader" { ++ for _, test := range darwinTests { ++ if test.name == os.Args[2] { ++ test.f() ++ } ++ } ++ // Panic with a "success" label, so the parent process can check it. ++ panic("success") ++ } ++} ++ ++// All the _trampoline functions in zsyscall_darwin_$ARCH.s ++var darwinTests = [...]darwinTest{ ++ {"getgroups", libc_getgroups_trampoline}, ++ {"setgroups", libc_setgroups_trampoline}, ++ {"wait4", libc_wait4_trampoline}, ++ {"accept", libc_accept_trampoline}, ++ {"bind", libc_bind_trampoline}, ++ {"connect", libc_connect_trampoline}, ++ {"socket", libc_socket_trampoline}, ++ {"getsockopt", libc_getsockopt_trampoline}, ++ {"setsockopt", libc_setsockopt_trampoline}, ++ {"getpeername", libc_getpeername_trampoline}, ++ {"getsockname", libc_getsockname_trampoline}, ++ {"shutdown", libc_shutdown_trampoline}, ++ {"socketpair", libc_socketpair_trampoline}, ++ {"recvfrom", libc_recvfrom_trampoline}, ++ {"sendto", libc_sendto_trampoline}, ++ {"recvmsg", libc_recvmsg_trampoline}, ++ {"sendmsg", libc_sendmsg_trampoline}, ++ {"kevent", libc_kevent_trampoline}, ++ {"sysctl", libc_sysctl_trampoline}, ++ {"utimes", libc_utimes_trampoline}, ++ {"futimes", libc_futimes_trampoline}, ++ {"fcntl", libc_fcntl_trampoline}, ++ {"poll", libc_poll_trampoline}, ++ {"madvise", libc_madvise_trampoline}, ++ {"mlock", libc_mlock_trampoline}, ++ {"mlockall", libc_mlockall_trampoline}, ++ {"mprotect", libc_mprotect_trampoline}, ++ {"msync", libc_msync_trampoline}, ++ {"munlock", libc_munlock_trampoline}, ++ {"munlockall", libc_munlockall_trampoline}, ++ {"ptrace", libc_ptrace_trampoline}, ++ {"pipe", libc_pipe_trampoline}, ++ {"getxattr", libc_getxattr_trampoline}, ++ {"fgetxattr", libc_fgetxattr_trampoline}, ++ {"setxattr", libc_setxattr_trampoline}, ++ {"fsetxattr", libc_fsetxattr_trampoline}, ++ {"removexattr", libc_removexattr_trampoline}, ++ {"fremovexattr", libc_fremovexattr_trampoline}, ++ {"listxattr", libc_listxattr_trampoline}, ++ {"flistxattr", libc_flistxattr_trampoline}, ++ {"kill", libc_kill_trampoline}, ++ {"ioctl", libc_ioctl_trampoline}, ++ {"access", libc_access_trampoline}, ++ {"adjtime", libc_adjtime_trampoline}, ++ {"chdir", libc_chdir_trampoline}, ++ {"chflags", libc_chflags_trampoline}, ++ {"chmod", libc_chmod_trampoline}, ++ {"chown", libc_chown_trampoline}, ++ {"chroot", libc_chroot_trampoline}, ++ {"close", libc_close_trampoline}, ++ {"dup", libc_dup_trampoline}, ++ {"dup2", libc_dup2_trampoline}, ++ {"exchangedata", libc_exchangedata_trampoline}, ++ {"exit", libc_exit_trampoline}, ++ {"faccessat", libc_faccessat_trampoline}, ++ {"fchdir", libc_fchdir_trampoline}, ++ {"fchflags", libc_fchflags_trampoline}, ++ {"fchmod", libc_fchmod_trampoline}, ++ {"fchmodat", libc_fchmodat_trampoline}, ++ {"fchown", libc_fchown_trampoline}, ++ {"fchownat", libc_fchownat_trampoline}, ++ {"flock", libc_flock_trampoline}, ++ {"fpathconf", libc_fpathconf_trampoline}, ++ {"fstat64", libc_fstat64_trampoline}, ++ {"fstatat64", libc_fstatat64_trampoline}, ++ {"fstatfs64", libc_fstatfs64_trampoline}, ++ {"fsync", libc_fsync_trampoline}, ++ {"ftruncate", libc_ftruncate_trampoline}, ++ {"getdtablesize", libc_getdtablesize_trampoline}, ++ {"getegid", libc_getegid_trampoline}, ++ {"geteuid", libc_geteuid_trampoline}, ++ {"getgid", libc_getgid_trampoline}, ++ {"getpgid", libc_getpgid_trampoline}, ++ {"getpgrp", libc_getpgrp_trampoline}, ++ {"getpid", libc_getpid_trampoline}, ++ {"getppid", libc_getppid_trampoline}, ++ {"getpriority", libc_getpriority_trampoline}, ++ {"getrlimit", libc_getrlimit_trampoline}, ++ {"getrusage", libc_getrusage_trampoline}, ++ {"getsid", libc_getsid_trampoline}, ++ {"getuid", libc_getuid_trampoline}, ++ {"issetugid", libc_issetugid_trampoline}, ++ {"kqueue", libc_kqueue_trampoline}, ++ {"lchown", libc_lchown_trampoline}, ++ {"link", libc_link_trampoline}, ++ {"linkat", libc_linkat_trampoline}, ++ {"listen", libc_listen_trampoline}, ++ {"lstat64", libc_lstat64_trampoline}, ++ {"mkdir", libc_mkdir_trampoline}, ++ {"mkdirat", libc_mkdirat_trampoline}, ++ {"mkfifo", libc_mkfifo_trampoline}, ++ {"mknod", libc_mknod_trampoline}, ++ {"open", libc_open_trampoline}, ++ {"openat", libc_openat_trampoline}, ++ {"pathconf", libc_pathconf_trampoline}, ++ {"pread", libc_pread_trampoline}, ++ {"pwrite", libc_pwrite_trampoline}, ++ {"read", libc_read_trampoline}, ++ {"readlink", libc_readlink_trampoline}, ++ {"readlinkat", libc_readlinkat_trampoline}, ++ {"rename", libc_rename_trampoline}, ++ {"renameat", libc_renameat_trampoline}, ++ {"revoke", libc_revoke_trampoline}, ++ {"rmdir", libc_rmdir_trampoline}, ++ {"lseek", libc_lseek_trampoline}, ++ {"select", libc_select_trampoline}, ++ {"setegid", libc_setegid_trampoline}, ++ {"seteuid", libc_seteuid_trampoline}, ++ {"setgid", libc_setgid_trampoline}, ++ {"setlogin", libc_setlogin_trampoline}, ++ {"setpgid", libc_setpgid_trampoline}, ++ {"setpriority", libc_setpriority_trampoline}, ++ {"setprivexec", libc_setprivexec_trampoline}, ++ {"setregid", libc_setregid_trampoline}, ++ {"setreuid", libc_setreuid_trampoline}, ++ {"setrlimit", libc_setrlimit_trampoline}, ++ {"setsid", libc_setsid_trampoline}, ++ {"settimeofday", libc_settimeofday_trampoline}, ++ {"setuid", libc_setuid_trampoline}, ++ {"stat64", libc_stat64_trampoline}, ++ {"statfs64", libc_statfs64_trampoline}, ++ {"symlink", libc_symlink_trampoline}, ++ {"symlinkat", libc_symlinkat_trampoline}, ++ {"sync", libc_sync_trampoline}, ++ {"truncate", libc_truncate_trampoline}, ++ {"umask", libc_umask_trampoline}, ++ {"undelete", libc_undelete_trampoline}, ++ {"unlink", libc_unlink_trampoline}, ++ {"unlinkat", libc_unlinkat_trampoline}, ++ {"unmount", libc_unmount_trampoline}, ++ {"write", libc_write_trampoline}, ++ {"mmap", libc_mmap_trampoline}, ++ {"munmap", libc_munmap_trampoline}, ++ {"gettimeofday", libc_gettimeofday_trampoline}, ++ {"getfsstat64", libc_getfsstat64_trampoline}, ++} +diff --git a/vendor/golang.org/x/sys/unix/dev_linux_test.go b/vendor/golang.org/x/sys/unix/dev_linux_test.go +new file mode 100644 +index 0000000..5164528 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/dev_linux_test.go +@@ -0,0 +1,56 @@ ++// Copyright 2017 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build go1.7 ++ ++package unix_test ++ ++import ( ++ "fmt" ++ "testing" ++ ++ "golang.org/x/sys/unix" ++) ++ ++func TestDevices(t *testing.T) { ++ testCases := []struct { ++ path string ++ major uint32 ++ minor uint32 ++ }{ ++ // well known major/minor numbers according to ++ // https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/admin-guide/devices.txt ++ {"/dev/null", 1, 3}, ++ {"/dev/zero", 1, 5}, ++ {"/dev/random", 1, 8}, ++ {"/dev/full", 1, 7}, ++ {"/dev/urandom", 1, 9}, ++ {"/dev/tty", 5, 0}, ++ } ++ for _, tc := range testCases { ++ t.Run(fmt.Sprintf("%s %v:%v", tc.path, tc.major, tc.minor), func(t *testing.T) { ++ var stat unix.Stat_t ++ err := unix.Stat(tc.path, &stat) ++ if err != nil { ++ if err == unix.EACCES { ++ t.Skip("no permission to stat device, skipping test") ++ } ++ t.Errorf("failed to stat device: %v", err) ++ return ++ } ++ ++ dev := uint64(stat.Rdev) ++ if unix.Major(dev) != tc.major { ++ t.Errorf("for %s Major(%#x) == %d, want %d", tc.path, dev, unix.Major(dev), tc.major) ++ } ++ if unix.Minor(dev) != tc.minor { ++ t.Errorf("for %s Minor(%#x) == %d, want %d", tc.path, dev, unix.Minor(dev), tc.minor) ++ } ++ if unix.Mkdev(tc.major, tc.minor) != dev { ++ t.Errorf("for %s Mkdev(%d, %d) == %#x, want %#x", tc.path, tc.major, tc.minor, unix.Mkdev(tc.major, tc.minor), dev) ++ } ++ }) ++ ++ } ++} +diff --git a/vendor/golang.org/x/sys/unix/dirent_test.go b/vendor/golang.org/x/sys/unix/dirent_test.go +new file mode 100644 +index 0000000..48eb257 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/dirent_test.go +@@ -0,0 +1,150 @@ ++// Copyright 2019 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris ++ ++package unix_test ++ ++import ( ++ "bytes" ++ "fmt" ++ "io/ioutil" ++ "os" ++ "path/filepath" ++ "runtime" ++ "sort" ++ "strconv" ++ "strings" ++ "testing" ++ "unsafe" ++ ++ "golang.org/x/sys/unix" ++) ++ ++func TestDirent(t *testing.T) { ++ const ( ++ direntBufSize = 2048 ++ filenameMinSize = 11 ++ ) ++ ++ d, err := ioutil.TempDir("", "dirent-test") ++ if err != nil { ++ t.Fatalf("tempdir: %v", err) ++ } ++ defer os.RemoveAll(d) ++ t.Logf("tmpdir: %s", d) ++ ++ for i, c := range []byte("0123456789") { ++ name := string(bytes.Repeat([]byte{c}, filenameMinSize+i)) ++ err = ioutil.WriteFile(filepath.Join(d, name), nil, 0644) ++ if err != nil { ++ t.Fatalf("writefile: %v", err) ++ } ++ } ++ ++ buf := bytes.Repeat([]byte("DEADBEAF"), direntBufSize/8) ++ fd, err := unix.Open(d, unix.O_RDONLY, 0) ++ if err != nil { ++ t.Fatalf("Open: %v", err) ++ } ++ defer unix.Close(fd) ++ n, err := unix.ReadDirent(fd, buf) ++ if err != nil { ++ t.Fatalf("ReadDirent: %v", err) ++ } ++ buf = buf[:n] ++ ++ names := make([]string, 0, 10) ++ for len(buf) > 0 { ++ var bc int ++ bc, _, names = unix.ParseDirent(buf, -1, names) ++ if bc == 0 && len(buf) > 0 { ++ t.Fatal("no progress") ++ } ++ buf = buf[bc:] ++ } ++ ++ sort.Strings(names) ++ t.Logf("names: %q", names) ++ ++ if len(names) != 10 { ++ t.Errorf("got %d names; expected 10", len(names)) ++ } ++ for i, name := range names { ++ ord, err := strconv.Atoi(name[:1]) ++ if err != nil { ++ t.Fatalf("names[%d] is non-integer %q: %v", i, names[i], err) ++ } ++ if expected := string(strings.Repeat(name[:1], filenameMinSize+ord)); name != expected { ++ t.Errorf("names[%d] is %q (len %d); expected %q (len %d)", i, name, len(name), expected, len(expected)) ++ } ++ } ++} ++ ++func TestDirentRepeat(t *testing.T) { ++ const N = 100 ++ // Note: the size of the buffer is small enough that the loop ++ // below will need to execute multiple times. See issue #31368. ++ size := N * unsafe.Offsetof(unix.Dirent{}.Name) / 4 ++ if runtime.GOOS == "freebsd" || runtime.GOOS == "netbsd" { ++ if size < 1024 { ++ size = 1024 // DIRBLKSIZ, see issue 31403. ++ } ++ if runtime.GOOS == "freebsd" { ++ t.Skip("need to fix issue 31416 first") ++ } ++ } ++ ++ // Make a directory containing N files ++ d, err := ioutil.TempDir("", "direntRepeat-test") ++ if err != nil { ++ t.Fatalf("tempdir: %v", err) ++ } ++ defer os.RemoveAll(d) ++ ++ var files []string ++ for i := 0; i < N; i++ { ++ files = append(files, fmt.Sprintf("file%d", i)) ++ } ++ for _, file := range files { ++ err = ioutil.WriteFile(filepath.Join(d, file), []byte("contents"), 0644) ++ if err != nil { ++ t.Fatalf("writefile: %v", err) ++ } ++ } ++ ++ // Read the directory entries using ReadDirent. ++ fd, err := unix.Open(d, unix.O_RDONLY, 0) ++ if err != nil { ++ t.Fatalf("Open: %v", err) ++ } ++ defer unix.Close(fd) ++ var files2 []string ++ for { ++ buf := make([]byte, size) ++ n, err := unix.ReadDirent(fd, buf) ++ if err != nil { ++ t.Fatalf("ReadDirent: %v", err) ++ } ++ if n == 0 { ++ break ++ } ++ buf = buf[:n] ++ for len(buf) > 0 { ++ var consumed int ++ consumed, _, files2 = unix.ParseDirent(buf, -1, files2) ++ if consumed == 0 && len(buf) > 0 { ++ t.Fatal("no progress") ++ } ++ buf = buf[consumed:] ++ } ++ } ++ ++ // Check results ++ sort.Strings(files) ++ sort.Strings(files2) ++ if strings.Join(files, "|") != strings.Join(files2, "|") { ++ t.Errorf("bad file list: want\n%q\ngot\n%q", files, files2) ++ } ++} +diff --git a/vendor/golang.org/x/sys/unix/endian_little.go b/vendor/golang.org/x/sys/unix/endian_little.go +index bcdb5d3..bb044b8 100644 +--- a/vendor/golang.org/x/sys/unix/endian_little.go ++++ b/vendor/golang.org/x/sys/unix/endian_little.go +@@ -2,7 +2,7 @@ + // Use of this source code is governed by a BSD-style + // license that can be found in the LICENSE file. + // +-// +build 386 amd64 amd64p32 arm arm64 ppc64le mipsle mips64le riscv64 ++// +build 386 amd64 amd64p32 arm arm64 ppc64le mipsle mips64le riscv64 loong64 + + package unix + +diff --git a/vendor/golang.org/x/sys/unix/example_exec_test.go b/vendor/golang.org/x/sys/unix/example_exec_test.go +new file mode 100644 +index 0000000..bb4d3bf +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/example_exec_test.go +@@ -0,0 +1,19 @@ ++// Copyright 2018 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris ++ ++package unix_test ++ ++import ( ++ "log" ++ "os" ++ ++ "golang.org/x/sys/unix" ++) ++ ++func ExampleExec() { ++ err := unix.Exec("/bin/ls", []string{"ls", "-al"}, os.Environ()) ++ log.Fatal(err) ++} +diff --git a/vendor/golang.org/x/sys/unix/example_flock_test.go b/vendor/golang.org/x/sys/unix/example_flock_test.go +new file mode 100644 +index 0000000..6c91748 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/example_flock_test.go +@@ -0,0 +1,25 @@ ++// Copyright 2018 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build darwin dragonfly freebsd linux netbsd openbsd solaris ++ ++package unix_test ++ ++import ( ++ "log" ++ "os" ++ ++ "golang.org/x/sys/unix" ++) ++ ++func ExampleFlock() { ++ f, _ := os.Create("example.lock") ++ if err := unix.Flock(int(f.Fd()), unix.LOCK_EX); err != nil { ++ log.Fatal(err) ++ } ++ // Do work here that requires the lock. When finished, release the lock: ++ if err := unix.Flock(int(f.Fd()), unix.LOCK_UN); err != nil { ++ log.Fatal(err) ++ } ++} +diff --git a/vendor/golang.org/x/sys/unix/export_test.go b/vendor/golang.org/x/sys/unix/export_test.go +new file mode 100644 +index 0000000..f8ae0e0 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/export_test.go +@@ -0,0 +1,9 @@ ++// Copyright 2015 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris ++ ++package unix ++ ++var Itoa = itoa +diff --git a/vendor/golang.org/x/sys/unix/fdset_test.go b/vendor/golang.org/x/sys/unix/fdset_test.go +new file mode 100644 +index 0000000..d0c2d8a +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/fdset_test.go +@@ -0,0 +1,63 @@ ++// Copyright 2019 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris ++ ++package unix_test ++ ++import ( ++ "testing" ++ ++ "golang.org/x/sys/unix" ++) ++ ++func TestFdSet(t *testing.T) { ++ var fdSet unix.FdSet ++ fdSet.Zero() ++ for fd := 0; fd < unix.FD_SETSIZE; fd++ { ++ if fdSet.IsSet(fd) { ++ t.Fatalf("Zero did not clear fd %d", fd) ++ } ++ fdSet.Set(fd) ++ } ++ ++ for fd := 0; fd < unix.FD_SETSIZE; fd++ { ++ if !fdSet.IsSet(fd) { ++ t.Fatalf("IsSet(%d): expected true, got false", fd) ++ } ++ } ++ ++ fdSet.Zero() ++ for fd := 0; fd < unix.FD_SETSIZE; fd++ { ++ if fdSet.IsSet(fd) { ++ t.Fatalf("Zero did not clear fd %d", fd) ++ } ++ } ++ ++ for fd := 1; fd < unix.FD_SETSIZE; fd += 2 { ++ fdSet.Set(fd) ++ } ++ ++ for fd := 0; fd < unix.FD_SETSIZE; fd++ { ++ if fd&0x1 == 0x1 { ++ if !fdSet.IsSet(fd) { ++ t.Fatalf("IsSet(%d): expected true, got false", fd) ++ } ++ } else { ++ if fdSet.IsSet(fd) { ++ t.Fatalf("IsSet(%d): expected false, got true", fd) ++ } ++ } ++ } ++ ++ for fd := 1; fd < unix.FD_SETSIZE; fd += 2 { ++ fdSet.Clear(fd) ++ } ++ ++ for fd := 0; fd < unix.FD_SETSIZE; fd++ { ++ if fdSet.IsSet(fd) { ++ t.Fatalf("Clear(%d) did not clear fd", fd) ++ } ++ } ++} +diff --git a/vendor/golang.org/x/sys/unix/getdirentries_test.go b/vendor/golang.org/x/sys/unix/getdirentries_test.go +new file mode 100644 +index 0000000..7e9600b +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/getdirentries_test.go +@@ -0,0 +1,83 @@ ++// Copyright 2019 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build darwin dragonfly freebsd openbsd netbsd ++ ++package unix_test ++ ++import ( ++ "fmt" ++ "io/ioutil" ++ "os" ++ "path/filepath" ++ "sort" ++ "strings" ++ "testing" ++ ++ "golang.org/x/sys/unix" ++) ++ ++func TestGetdirentries(t *testing.T) { ++ for _, count := range []int{10, 1000} { ++ t.Run(fmt.Sprintf("n=%d", count), func(t *testing.T) { ++ testGetdirentries(t, count) ++ }) ++ } ++} ++func testGetdirentries(t *testing.T, count int) { ++ if count > 100 && testing.Short() && os.Getenv("GO_BUILDER_NAME") == "" { ++ t.Skip("skipping in -short mode") ++ } ++ d, err := ioutil.TempDir("", "getdirentries-test") ++ if err != nil { ++ t.Fatalf("Tempdir: %v", err) ++ } ++ defer os.RemoveAll(d) ++ var names []string ++ for i := 0; i < count; i++ { ++ names = append(names, fmt.Sprintf("file%03d", i)) ++ } ++ ++ // Make files in the temp directory ++ for _, name := range names { ++ err := ioutil.WriteFile(filepath.Join(d, name), []byte("data"), 0) ++ if err != nil { ++ t.Fatalf("WriteFile: %v", err) ++ } ++ } ++ ++ // Read files using Getdirentries ++ fd, err := unix.Open(d, unix.O_RDONLY, 0) ++ if err != nil { ++ t.Fatalf("Open: %v", err) ++ } ++ defer unix.Close(fd) ++ var base uintptr ++ var buf [2048]byte ++ names2 := make([]string, 0, count) ++ for { ++ n, err := unix.Getdirentries(fd, buf[:], &base) ++ if err != nil { ++ t.Fatalf("Getdirentries: %v", err) ++ } ++ if n == 0 { ++ break ++ } ++ data := buf[:n] ++ for len(data) > 0 { ++ var bc int ++ bc, _, names2 = unix.ParseDirent(data, -1, names2) ++ if bc == 0 && len(data) > 0 { ++ t.Fatal("no progress") ++ } ++ data = data[bc:] ++ } ++ } ++ ++ sort.Strings(names) ++ sort.Strings(names2) ++ if strings.Join(names, ":") != strings.Join(names2, ":") { ++ t.Errorf("names don't match\n names: %q\nnames2: %q", names, names2) ++ } ++} +diff --git a/vendor/golang.org/x/sys/unix/linux/mkall.go b/vendor/golang.org/x/sys/unix/linux/mkall.go +new file mode 100644 +index 0000000..69825db +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/linux/mkall.go +@@ -0,0 +1,846 @@ ++// Copyright 2017 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// linux/mkall.go - Generates all Linux zsysnum, zsyscall, zerror, and ztype ++// files for all Linux architectures supported by the go compiler. See ++// README.md for more information about the build system. ++ ++// To run it you must have a git checkout of the Linux kernel and glibc. Once ++// the appropriate sources are ready, the program is run as: ++// go run linux/mkall.go ++ ++// +build ignore ++ ++package main ++ ++import ( ++ "bufio" ++ "bytes" ++ "debug/elf" ++ "encoding/binary" ++ "errors" ++ "fmt" ++ "io" ++ "io/ioutil" ++ "os" ++ "os/exec" ++ "path/filepath" ++ "runtime" ++ "strings" ++ "unicode" ++) ++ ++// These will be paths to the appropriate source directories. ++var LinuxDir string ++var GlibcDir string ++ ++const TempDir = "/tmp" ++const IncludeDir = TempDir + "/include" // To hold our C headers ++const BuildDir = TempDir + "/build" // To hold intermediate build files ++ ++const GOOS = "linux" // Only for Linux targets ++const BuildArch = "amd64" // Must be built on this architecture ++const MinKernel = "2.6.23" // https://golang.org/doc/install#requirements ++ ++type target struct { ++ GoArch string // Architecture name according to Go ++ LinuxArch string // Architecture name according to the Linux Kernel ++ GNUArch string // Architecture name according to GNU tools (https://wiki.debian.org/Multiarch/Tuples) ++ BigEndian bool // Default Little Endian ++ SignedChar bool // Is -fsigned-char needed (default no) ++ Bits int ++} ++ ++// List of all Linux targets supported by the go compiler. Currently, riscv64 ++// and sparc64 are not fully supported, but there is enough support already to ++// generate Go type and error definitions. ++var targets = []target{ ++ { ++ GoArch: "386", ++ LinuxArch: "x86", ++ GNUArch: "i686-linux-gnu", // Note "i686" not "i386" ++ Bits: 32, ++ }, ++ { ++ GoArch: "amd64", ++ LinuxArch: "x86", ++ GNUArch: "x86_64-linux-gnu", ++ Bits: 64, ++ }, ++ { ++ GoArch: "arm64", ++ LinuxArch: "arm64", ++ GNUArch: "aarch64-linux-gnu", ++ SignedChar: true, ++ Bits: 64, ++ }, ++ { ++ GoArch: "arm", ++ LinuxArch: "arm", ++ GNUArch: "arm-linux-gnueabi", ++ Bits: 32, ++ }, ++ { ++ GoArch: "mips", ++ LinuxArch: "mips", ++ GNUArch: "mips-linux-gnu", ++ BigEndian: true, ++ Bits: 32, ++ }, ++ { ++ GoArch: "mipsle", ++ LinuxArch: "mips", ++ GNUArch: "mipsel-linux-gnu", ++ Bits: 32, ++ }, ++ { ++ GoArch: "mips64", ++ LinuxArch: "mips", ++ GNUArch: "mips64-linux-gnuabi64", ++ BigEndian: true, ++ Bits: 64, ++ }, ++ { ++ GoArch: "mips64le", ++ LinuxArch: "mips", ++ GNUArch: "mips64el-linux-gnuabi64", ++ Bits: 64, ++ }, ++ { ++ GoArch: "ppc64", ++ LinuxArch: "powerpc", ++ GNUArch: "powerpc64-linux-gnu", ++ BigEndian: true, ++ Bits: 64, ++ }, ++ { ++ GoArch: "ppc64le", ++ LinuxArch: "powerpc", ++ GNUArch: "powerpc64le-linux-gnu", ++ Bits: 64, ++ }, ++ { ++ GoArch: "riscv64", ++ LinuxArch: "riscv", ++ GNUArch: "riscv64-linux-gnu", ++ Bits: 64, ++ }, ++ { ++ GoArch: "s390x", ++ LinuxArch: "s390", ++ GNUArch: "s390x-linux-gnu", ++ BigEndian: true, ++ SignedChar: true, ++ Bits: 64, ++ }, ++ { ++ GoArch: "sparc64", ++ LinuxArch: "sparc", ++ GNUArch: "sparc64-linux-gnu", ++ BigEndian: true, ++ Bits: 64, ++ }, ++} ++ ++// ptracePairs is a list of pairs of targets that can, in some cases, ++// run each other's binaries. 'archName' is the combined name of 'a1' ++// and 'a2', which is used in the file name. Generally we use an 'x' ++// suffix in the file name to indicate that the file works for both ++// big-endian and little-endian, here we use 'nn' to indicate that this ++// file is suitable for 32-bit and 64-bit. ++var ptracePairs = []struct{ a1, a2, archName string }{ ++ {"386", "amd64", "x86"}, ++ {"arm", "arm64", "armnn"}, ++ {"mips", "mips64", "mipsnn"}, ++ {"mipsle", "mips64le", "mipsnnle"}, ++} ++ ++func main() { ++ if runtime.GOOS != GOOS || runtime.GOARCH != BuildArch { ++ fmt.Printf("Build system has GOOS_GOARCH = %s_%s, need %s_%s\n", ++ runtime.GOOS, runtime.GOARCH, GOOS, BuildArch) ++ return ++ } ++ ++ // Check that we are using the new build system if we should ++ if os.Getenv("GOLANG_SYS_BUILD") != "docker" { ++ fmt.Println("In the new build system, mkall.go should not be called directly.") ++ fmt.Println("See README.md") ++ return ++ } ++ ++ // Parse the command line options ++ if len(os.Args) != 3 { ++ fmt.Println("USAGE: go run linux/mkall.go ") ++ return ++ } ++ LinuxDir = os.Args[1] ++ GlibcDir = os.Args[2] ++ ++ for _, t := range targets { ++ fmt.Printf("----- GENERATING: %s -----\n", t.GoArch) ++ if err := t.generateFiles(); err != nil { ++ fmt.Printf("%v\n***** FAILURE: %s *****\n\n", err, t.GoArch) ++ } else { ++ fmt.Printf("----- SUCCESS: %s -----\n\n", t.GoArch) ++ } ++ } ++ ++ fmt.Printf("----- GENERATING: merging generated files -----\n") ++ if err := mergeFiles(); err != nil { ++ fmt.Printf("%v\n***** FAILURE: merging generated files *****\n\n", err) ++ } else { ++ fmt.Printf("----- SUCCESS: merging generated files -----\n\n") ++ } ++ ++ fmt.Printf("----- GENERATING ptrace pairs -----\n") ++ ok := true ++ for _, p := range ptracePairs { ++ if err := generatePtracePair(p.a1, p.a2, p.archName); err != nil { ++ fmt.Printf("%v\n***** FAILURE: %s/%s *****\n\n", err, p.a1, p.a2) ++ ok = false ++ } ++ } ++ // generate functions PtraceGetRegSetArm64 and PtraceSetRegSetArm64. ++ if err := generatePtraceRegSet("arm64"); err != nil { ++ fmt.Printf("%v\n***** FAILURE: generatePtraceRegSet(%q) *****\n\n", err, "arm64") ++ ok = false ++ } ++ if ok { ++ fmt.Printf("----- SUCCESS ptrace pairs -----\n\n") ++ } ++} ++ ++// Makes an exec.Cmd with Stderr attached to os.Stderr ++func makeCommand(name string, args ...string) *exec.Cmd { ++ cmd := exec.Command(name, args...) ++ cmd.Stderr = os.Stderr ++ return cmd ++} ++ ++// Set GOARCH for target and build environments. ++func (t *target) setTargetBuildArch(cmd *exec.Cmd) { ++ // Set GOARCH_TARGET so command knows what GOARCH is.. ++ cmd.Env = append(os.Environ(), "GOARCH_TARGET="+t.GoArch) ++ // Set GOARCH to host arch for command, so it can run natively. ++ for i, s := range cmd.Env { ++ if strings.HasPrefix(s, "GOARCH=") { ++ cmd.Env[i] = "GOARCH=" + BuildArch ++ } ++ } ++} ++ ++// Runs the command, pipes output to a formatter, pipes that to an output file. ++func (t *target) commandFormatOutput(formatter string, outputFile string, ++ name string, args ...string) (err error) { ++ mainCmd := makeCommand(name, args...) ++ if name == "mksyscall" { ++ args = append([]string{"run", "mksyscall.go"}, args...) ++ mainCmd = makeCommand("go", args...) ++ t.setTargetBuildArch(mainCmd) ++ } else if name == "mksysnum" { ++ args = append([]string{"run", "linux/mksysnum.go"}, args...) ++ mainCmd = makeCommand("go", args...) ++ t.setTargetBuildArch(mainCmd) ++ } ++ ++ fmtCmd := makeCommand(formatter) ++ if formatter == "mkpost" { ++ fmtCmd = makeCommand("go", "run", "mkpost.go") ++ t.setTargetBuildArch(fmtCmd) ++ } ++ ++ // mainCmd | fmtCmd > outputFile ++ if fmtCmd.Stdin, err = mainCmd.StdoutPipe(); err != nil { ++ return ++ } ++ if fmtCmd.Stdout, err = os.Create(outputFile); err != nil { ++ return ++ } ++ ++ // Make sure the formatter eventually closes ++ if err = fmtCmd.Start(); err != nil { ++ return ++ } ++ defer func() { ++ fmtErr := fmtCmd.Wait() ++ if err == nil { ++ err = fmtErr ++ } ++ }() ++ ++ return mainCmd.Run() ++} ++ ++// Generates all the files for a Linux target ++func (t *target) generateFiles() error { ++ // Setup environment variables ++ os.Setenv("GOOS", GOOS) ++ os.Setenv("GOARCH", t.GoArch) ++ ++ // Get appropriate compiler and emulator (unless on x86) ++ if t.LinuxArch != "x86" { ++ // Check/Setup cross compiler ++ compiler := t.GNUArch + "-gcc" ++ if _, err := exec.LookPath(compiler); err != nil { ++ return err ++ } ++ os.Setenv("CC", compiler) ++ ++ // Check/Setup emulator (usually first component of GNUArch) ++ qemuArchName := t.GNUArch[:strings.Index(t.GNUArch, "-")] ++ if t.LinuxArch == "powerpc" { ++ qemuArchName = t.GoArch ++ } ++ // Fake uname for QEMU to allow running on Host kernel version < 4.15 ++ if t.LinuxArch == "riscv" { ++ os.Setenv("QEMU_UNAME", "4.15") ++ } ++ os.Setenv("GORUN", "qemu-"+qemuArchName) ++ } else { ++ os.Setenv("CC", "gcc") ++ } ++ ++ // Make the include directory and fill it with headers ++ if err := os.MkdirAll(IncludeDir, os.ModePerm); err != nil { ++ return err ++ } ++ defer os.RemoveAll(IncludeDir) ++ if err := t.makeHeaders(); err != nil { ++ return fmt.Errorf("could not make header files: %v", err) ++ } ++ fmt.Println("header files generated") ++ ++ // Make each of the four files ++ if err := t.makeZSysnumFile(); err != nil { ++ return fmt.Errorf("could not make zsysnum file: %v", err) ++ } ++ fmt.Println("zsysnum file generated") ++ ++ if err := t.makeZSyscallFile(); err != nil { ++ return fmt.Errorf("could not make zsyscall file: %v", err) ++ } ++ fmt.Println("zsyscall file generated") ++ ++ if err := t.makeZTypesFile(); err != nil { ++ return fmt.Errorf("could not make ztypes file: %v", err) ++ } ++ fmt.Println("ztypes file generated") ++ ++ if err := t.makeZErrorsFile(); err != nil { ++ return fmt.Errorf("could not make zerrors file: %v", err) ++ } ++ fmt.Println("zerrors file generated") ++ ++ return nil ++} ++ ++// Create the Linux, glibc and ABI (C compiler convention) headers in the include directory. ++func (t *target) makeHeaders() error { ++ // Make the Linux headers we need for this architecture ++ linuxMake := makeCommand("make", "headers_install", "ARCH="+t.LinuxArch, "INSTALL_HDR_PATH="+TempDir) ++ linuxMake.Dir = LinuxDir ++ if err := linuxMake.Run(); err != nil { ++ return err ++ } ++ ++ // A Temporary build directory for glibc ++ if err := os.MkdirAll(BuildDir, os.ModePerm); err != nil { ++ return err ++ } ++ defer os.RemoveAll(BuildDir) ++ ++ // Make the glibc headers we need for this architecture ++ confScript := filepath.Join(GlibcDir, "configure") ++ glibcConf := makeCommand(confScript, "--prefix="+TempDir, "--host="+t.GNUArch, "--enable-kernel="+MinKernel) ++ glibcConf.Dir = BuildDir ++ if err := glibcConf.Run(); err != nil { ++ return err ++ } ++ glibcMake := makeCommand("make", "install-headers") ++ glibcMake.Dir = BuildDir ++ if err := glibcMake.Run(); err != nil { ++ return err ++ } ++ // We only need an empty stubs file ++ stubsFile := filepath.Join(IncludeDir, "gnu/stubs.h") ++ if file, err := os.Create(stubsFile); err != nil { ++ return err ++ } else { ++ file.Close() ++ } ++ ++ // ABI headers will specify C compiler behavior for the target platform. ++ return t.makeABIHeaders() ++} ++ ++// makeABIHeaders generates C header files based on the platform's calling convention. ++// While many platforms have formal Application Binary Interfaces, in practice, whatever the ++// dominant C compilers generate is the de-facto calling convention. ++// ++// We generate C headers instead of a Go file, so as to enable references to the ABI from Cgo. ++func (t *target) makeABIHeaders() (err error) { ++ abiDir := filepath.Join(IncludeDir, "abi") ++ if err = os.Mkdir(abiDir, os.ModePerm); err != nil { ++ return err ++ } ++ ++ cc := os.Getenv("CC") ++ if cc == "" { ++ return errors.New("CC (compiler) env var not set") ++ } ++ ++ // Build a sacrificial ELF file, to mine for C compiler behavior. ++ binPath := filepath.Join(TempDir, "tmp_abi.o") ++ bin, err := t.buildELF(cc, cCode, binPath) ++ if err != nil { ++ return fmt.Errorf("cannot build ELF to analyze: %v", err) ++ } ++ defer bin.Close() ++ defer os.Remove(binPath) ++ ++ // Right now, we put everything in abi.h, but we may change this later. ++ abiFile, err := os.Create(filepath.Join(abiDir, "abi.h")) ++ if err != nil { ++ return err ++ } ++ defer func() { ++ if cerr := abiFile.Close(); cerr != nil && err == nil { ++ err = cerr ++ } ++ }() ++ ++ if err = t.writeBitFieldMasks(bin, abiFile); err != nil { ++ return fmt.Errorf("cannot write bitfield masks: %v", err) ++ } ++ ++ return nil ++} ++ ++func (t *target) buildELF(cc, src, path string) (*elf.File, error) { ++ // Compile the cCode source using the set compiler - we will need its .data section. ++ // Do not link the binary, so that we can find .data section offsets from the symbol values. ++ ccCmd := makeCommand(cc, "-o", path, "-gdwarf", "-x", "c", "-c", "-") ++ ccCmd.Stdin = strings.NewReader(src) ++ ccCmd.Stdout = os.Stdout ++ if err := ccCmd.Run(); err != nil { ++ return nil, fmt.Errorf("compiler error: %v", err) ++ } ++ ++ bin, err := elf.Open(path) ++ if err != nil { ++ return nil, fmt.Errorf("cannot read ELF file %s: %v", path, err) ++ } ++ ++ return bin, nil ++} ++ ++func (t *target) writeBitFieldMasks(bin *elf.File, out io.Writer) error { ++ symbols, err := bin.Symbols() ++ if err != nil { ++ return fmt.Errorf("getting ELF symbols: %v", err) ++ } ++ var masksSym *elf.Symbol ++ ++ for _, sym := range symbols { ++ if sym.Name == "masks" { ++ masksSym = &sym ++ } ++ } ++ ++ if masksSym == nil { ++ return errors.New("could not find the 'masks' symbol in ELF symtab") ++ } ++ ++ dataSection := bin.Section(".data") ++ if dataSection == nil { ++ return errors.New("ELF file has no .data section") ++ } ++ ++ data, err := dataSection.Data() ++ if err != nil { ++ return fmt.Errorf("could not read .data section: %v\n", err) ++ } ++ ++ var bo binary.ByteOrder ++ if t.BigEndian { ++ bo = binary.BigEndian ++ } else { ++ bo = binary.LittleEndian ++ } ++ ++ // 64 bit masks of type uint64 are stored in the data section starting at masks.Value. ++ // Here we are running on AMD64, but these values may be big endian or little endian, ++ // depending on target architecture. ++ for i := uint64(0); i < 64; i++ { ++ off := masksSym.Value + i*8 ++ // Define each mask in native by order, so as to match target endian. ++ fmt.Fprintf(out, "#define BITFIELD_MASK_%d %dULL\n", i, bo.Uint64(data[off:off+8])) ++ } ++ ++ return nil ++} ++ ++// makes the zsysnum_linux_$GOARCH.go file ++func (t *target) makeZSysnumFile() error { ++ zsysnumFile := fmt.Sprintf("zsysnum_linux_%s.go", t.GoArch) ++ unistdFile := filepath.Join(IncludeDir, "asm/unistd.h") ++ ++ args := append(t.cFlags(), unistdFile) ++ return t.commandFormatOutput("gofmt", zsysnumFile, "mksysnum", args...) ++} ++ ++// makes the zsyscall_linux_$GOARCH.go file ++func (t *target) makeZSyscallFile() error { ++ zsyscallFile := fmt.Sprintf("zsyscall_linux_%s.go", t.GoArch) ++ // Find the correct architecture syscall file (might end with x.go) ++ archSyscallFile := fmt.Sprintf("syscall_linux_%s.go", t.GoArch) ++ if _, err := os.Stat(archSyscallFile); os.IsNotExist(err) { ++ shortArch := strings.TrimSuffix(t.GoArch, "le") ++ archSyscallFile = fmt.Sprintf("syscall_linux_%sx.go", shortArch) ++ } ++ ++ args := append(t.mksyscallFlags(), "-tags", "linux,"+t.GoArch, ++ "syscall_linux.go", archSyscallFile) ++ return t.commandFormatOutput("gofmt", zsyscallFile, "mksyscall", args...) ++} ++ ++// makes the zerrors_linux_$GOARCH.go file ++func (t *target) makeZErrorsFile() error { ++ zerrorsFile := fmt.Sprintf("zerrors_linux_%s.go", t.GoArch) ++ ++ return t.commandFormatOutput("gofmt", zerrorsFile, "./mkerrors.sh", t.cFlags()...) ++} ++ ++// makes the ztypes_linux_$GOARCH.go file ++func (t *target) makeZTypesFile() error { ++ ztypesFile := fmt.Sprintf("ztypes_linux_%s.go", t.GoArch) ++ ++ args := []string{"tool", "cgo", "-godefs", "--"} ++ args = append(args, t.cFlags()...) ++ args = append(args, "linux/types.go") ++ return t.commandFormatOutput("mkpost", ztypesFile, "go", args...) ++} ++ ++// Flags that should be given to gcc and cgo for this target ++func (t *target) cFlags() []string { ++ // Compile statically to avoid cross-architecture dynamic linking. ++ flags := []string{"-Wall", "-Werror", "-static", "-I" + IncludeDir} ++ ++ // Architecture-specific flags ++ if t.SignedChar { ++ flags = append(flags, "-fsigned-char") ++ } ++ if t.LinuxArch == "x86" { ++ flags = append(flags, fmt.Sprintf("-m%d", t.Bits)) ++ } ++ ++ return flags ++} ++ ++// Flags that should be given to mksyscall for this target ++func (t *target) mksyscallFlags() (flags []string) { ++ if t.Bits == 32 { ++ if t.BigEndian { ++ flags = append(flags, "-b32") ++ } else { ++ flags = append(flags, "-l32") ++ } ++ } ++ ++ // This flag means a 64-bit value should use (even, odd)-pair. ++ if t.GoArch == "arm" || (t.LinuxArch == "mips" && t.Bits == 32) { ++ flags = append(flags, "-arm") ++ } ++ return ++} ++ ++// Merge all the generated files for Linux targets ++func mergeFiles() error { ++ // Setup environment variables ++ os.Setenv("GOOS", runtime.GOOS) ++ os.Setenv("GOARCH", runtime.GOARCH) ++ ++ // Merge each of the four type of files ++ for _, ztyp := range []string{"zerrors", "zsyscall", "zsysnum", "ztypes"} { ++ cmd := makeCommand("go", "run", "mkmerge.go", "-out", fmt.Sprintf("%s_%s.go", ztyp, GOOS), fmt.Sprintf("%s_%s_*.go", ztyp, GOOS)) ++ err := cmd.Run() ++ if err != nil { ++ return fmt.Errorf("could not merge %s files: %w", ztyp, err) ++ } ++ fmt.Printf("%s files merged\n", ztyp) ++ } ++ ++ return nil ++} ++ ++// generatePtracePair takes a pair of GOARCH values that can run each ++// other's binaries, such as 386 and amd64. It extracts the PtraceRegs ++// type for each one. It writes a new file defining the types ++// PtraceRegsArch1 and PtraceRegsArch2 and the corresponding functions ++// Ptrace{Get,Set}Regs{arch1,arch2}. This permits debugging the other ++// binary on a native system. 'archName' is the combined name of 'arch1' ++// and 'arch2', which is used in the file name. ++func generatePtracePair(arch1, arch2, archName string) error { ++ def1, err := ptraceDef(arch1) ++ if err != nil { ++ return err ++ } ++ def2, err := ptraceDef(arch2) ++ if err != nil { ++ return err ++ } ++ f, err := os.Create(fmt.Sprintf("zptrace_%s_linux.go", archName)) ++ if err != nil { ++ return err ++ } ++ buf := bufio.NewWriter(f) ++ fmt.Fprintf(buf, "// Code generated by linux/mkall.go generatePtracePair(%q, %q). DO NOT EDIT.\n", arch1, arch2) ++ fmt.Fprintf(buf, "\n") ++ fmt.Fprintf(buf, "// +build linux\n") ++ fmt.Fprintf(buf, "// +build %s %s\n", arch1, arch2) ++ fmt.Fprintf(buf, "\n") ++ fmt.Fprintf(buf, "package unix\n") ++ fmt.Fprintf(buf, "\n") ++ fmt.Fprintf(buf, "%s\n", `import "unsafe"`) ++ fmt.Fprintf(buf, "\n") ++ writeOnePtrace(buf, arch1, def1) ++ fmt.Fprintf(buf, "\n") ++ writeOnePtrace(buf, arch2, def2) ++ if err := buf.Flush(); err != nil { ++ return err ++ } ++ if err := f.Close(); err != nil { ++ return err ++ } ++ return nil ++} ++ ++// generatePtraceRegSet takes a GOARCH value to generate a file zptrace_linux_{arch}.go ++// containing functions PtraceGetRegSet{arch} and PtraceSetRegSet{arch}. ++func generatePtraceRegSet(arch string) error { ++ f, err := os.Create(fmt.Sprintf("zptrace_linux_%s.go", arch)) ++ if err != nil { ++ return err ++ } ++ buf := bufio.NewWriter(f) ++ fmt.Fprintf(buf, "// Code generated by linux/mkall.go generatePtraceRegSet(%q). DO NOT EDIT.\n", arch) ++ fmt.Fprintf(buf, "\n") ++ fmt.Fprintf(buf, "package unix\n") ++ fmt.Fprintf(buf, "\n") ++ fmt.Fprintf(buf, "%s\n", `import "unsafe"`) ++ fmt.Fprintf(buf, "\n") ++ uarch := string(unicode.ToUpper(rune(arch[0]))) + arch[1:] ++ fmt.Fprintf(buf, "// PtraceGetRegSet%s fetches the registers used by %s binaries.\n", uarch, arch) ++ fmt.Fprintf(buf, "func PtraceGetRegSet%s(pid, addr int, regsout *PtraceRegs%s) error {\n", uarch, uarch) ++ fmt.Fprintf(buf, "\tiovec := Iovec{(*byte)(unsafe.Pointer(regsout)), uint64(unsafe.Sizeof(*regsout))}\n") ++ fmt.Fprintf(buf, "\treturn ptrace(PTRACE_GETREGSET, pid, uintptr(addr), uintptr(unsafe.Pointer(&iovec)))\n") ++ fmt.Fprintf(buf, "}\n") ++ fmt.Fprintf(buf, "\n") ++ fmt.Fprintf(buf, "// PtraceSetRegSet%s sets the registers used by %s binaries.\n", uarch, arch) ++ fmt.Fprintf(buf, "func PtraceSetRegSet%s(pid, addr int, regs *PtraceRegs%s) error {\n", uarch, uarch) ++ fmt.Fprintf(buf, "\tiovec := Iovec{(*byte)(unsafe.Pointer(regs)), uint64(unsafe.Sizeof(*regs))}\n") ++ fmt.Fprintf(buf, "\treturn ptrace(PTRACE_SETREGSET, pid, uintptr(addr), uintptr(unsafe.Pointer(&iovec)))\n") ++ fmt.Fprintf(buf, "}\n") ++ if err := buf.Flush(); err != nil { ++ return err ++ } ++ if err := f.Close(); err != nil { ++ return err ++ } ++ return nil ++} ++ ++// ptraceDef returns the definition of PtraceRegs for arch. ++func ptraceDef(arch string) (string, error) { ++ filename := fmt.Sprintf("ztypes_linux_%s.go", arch) ++ data, err := ioutil.ReadFile(filename) ++ if err != nil { ++ return "", fmt.Errorf("reading %s: %v", filename, err) ++ } ++ start := bytes.Index(data, []byte("type PtraceRegs struct")) ++ if start < 0 { ++ return "", fmt.Errorf("%s: no definition of PtraceRegs", filename) ++ } ++ data = data[start:] ++ end := bytes.Index(data, []byte("\n}\n")) ++ if end < 0 { ++ return "", fmt.Errorf("%s: can't find end of PtraceRegs definition", filename) ++ } ++ return string(data[:end+2]), nil ++} ++ ++// writeOnePtrace writes out the ptrace definitions for arch. ++func writeOnePtrace(w io.Writer, arch, def string) { ++ uarch := string(unicode.ToUpper(rune(arch[0]))) + arch[1:] ++ fmt.Fprintf(w, "// PtraceRegs%s is the registers used by %s binaries.\n", uarch, arch) ++ fmt.Fprintf(w, "%s\n", strings.Replace(def, "PtraceRegs", "PtraceRegs"+uarch, 1)) ++ fmt.Fprintf(w, "\n") ++ fmt.Fprintf(w, "// PtraceGetRegs%s fetches the registers used by %s binaries.\n", uarch, arch) ++ fmt.Fprintf(w, "func PtraceGetRegs%s(pid int, regsout *PtraceRegs%s) error {\n", uarch, uarch) ++ fmt.Fprintf(w, "\treturn ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))\n") ++ fmt.Fprintf(w, "}\n") ++ fmt.Fprintf(w, "\n") ++ fmt.Fprintf(w, "// PtraceSetRegs%s sets the registers used by %s binaries.\n", uarch, arch) ++ fmt.Fprintf(w, "func PtraceSetRegs%s(pid int, regs *PtraceRegs%s) error {\n", uarch, uarch) ++ fmt.Fprintf(w, "\treturn ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs)))\n") ++ fmt.Fprintf(w, "}\n") ++} ++ ++// cCode is compiled for the target architecture, and the resulting data section is carved for ++// the statically initialized bit masks. ++const cCode = ` ++// Bit fields are used in some system calls and other ABIs, but their memory layout is ++// implementation-defined [1]. Even with formal ABIs, bit fields are a source of subtle bugs [2]. ++// Here we generate the offsets for all 64 bits in an uint64. ++// 1: http://en.cppreference.com/w/c/language/bit_field ++// 2: https://lwn.net/Articles/478657/ ++ ++#include ++ ++struct bitfield { ++ union { ++ uint64_t val; ++ struct { ++ uint64_t u64_bit_0 : 1; ++ uint64_t u64_bit_1 : 1; ++ uint64_t u64_bit_2 : 1; ++ uint64_t u64_bit_3 : 1; ++ uint64_t u64_bit_4 : 1; ++ uint64_t u64_bit_5 : 1; ++ uint64_t u64_bit_6 : 1; ++ uint64_t u64_bit_7 : 1; ++ uint64_t u64_bit_8 : 1; ++ uint64_t u64_bit_9 : 1; ++ uint64_t u64_bit_10 : 1; ++ uint64_t u64_bit_11 : 1; ++ uint64_t u64_bit_12 : 1; ++ uint64_t u64_bit_13 : 1; ++ uint64_t u64_bit_14 : 1; ++ uint64_t u64_bit_15 : 1; ++ uint64_t u64_bit_16 : 1; ++ uint64_t u64_bit_17 : 1; ++ uint64_t u64_bit_18 : 1; ++ uint64_t u64_bit_19 : 1; ++ uint64_t u64_bit_20 : 1; ++ uint64_t u64_bit_21 : 1; ++ uint64_t u64_bit_22 : 1; ++ uint64_t u64_bit_23 : 1; ++ uint64_t u64_bit_24 : 1; ++ uint64_t u64_bit_25 : 1; ++ uint64_t u64_bit_26 : 1; ++ uint64_t u64_bit_27 : 1; ++ uint64_t u64_bit_28 : 1; ++ uint64_t u64_bit_29 : 1; ++ uint64_t u64_bit_30 : 1; ++ uint64_t u64_bit_31 : 1; ++ uint64_t u64_bit_32 : 1; ++ uint64_t u64_bit_33 : 1; ++ uint64_t u64_bit_34 : 1; ++ uint64_t u64_bit_35 : 1; ++ uint64_t u64_bit_36 : 1; ++ uint64_t u64_bit_37 : 1; ++ uint64_t u64_bit_38 : 1; ++ uint64_t u64_bit_39 : 1; ++ uint64_t u64_bit_40 : 1; ++ uint64_t u64_bit_41 : 1; ++ uint64_t u64_bit_42 : 1; ++ uint64_t u64_bit_43 : 1; ++ uint64_t u64_bit_44 : 1; ++ uint64_t u64_bit_45 : 1; ++ uint64_t u64_bit_46 : 1; ++ uint64_t u64_bit_47 : 1; ++ uint64_t u64_bit_48 : 1; ++ uint64_t u64_bit_49 : 1; ++ uint64_t u64_bit_50 : 1; ++ uint64_t u64_bit_51 : 1; ++ uint64_t u64_bit_52 : 1; ++ uint64_t u64_bit_53 : 1; ++ uint64_t u64_bit_54 : 1; ++ uint64_t u64_bit_55 : 1; ++ uint64_t u64_bit_56 : 1; ++ uint64_t u64_bit_57 : 1; ++ uint64_t u64_bit_58 : 1; ++ uint64_t u64_bit_59 : 1; ++ uint64_t u64_bit_60 : 1; ++ uint64_t u64_bit_61 : 1; ++ uint64_t u64_bit_62 : 1; ++ uint64_t u64_bit_63 : 1; ++ }; ++ }; ++}; ++ ++struct bitfield masks[] = { ++ {.u64_bit_0 = 1}, ++ {.u64_bit_1 = 1}, ++ {.u64_bit_2 = 1}, ++ {.u64_bit_3 = 1}, ++ {.u64_bit_4 = 1}, ++ {.u64_bit_5 = 1}, ++ {.u64_bit_6 = 1}, ++ {.u64_bit_7 = 1}, ++ {.u64_bit_8 = 1}, ++ {.u64_bit_9 = 1}, ++ {.u64_bit_10 = 1}, ++ {.u64_bit_11 = 1}, ++ {.u64_bit_12 = 1}, ++ {.u64_bit_13 = 1}, ++ {.u64_bit_14 = 1}, ++ {.u64_bit_15 = 1}, ++ {.u64_bit_16 = 1}, ++ {.u64_bit_17 = 1}, ++ {.u64_bit_18 = 1}, ++ {.u64_bit_19 = 1}, ++ {.u64_bit_20 = 1}, ++ {.u64_bit_21 = 1}, ++ {.u64_bit_22 = 1}, ++ {.u64_bit_23 = 1}, ++ {.u64_bit_24 = 1}, ++ {.u64_bit_25 = 1}, ++ {.u64_bit_26 = 1}, ++ {.u64_bit_27 = 1}, ++ {.u64_bit_28 = 1}, ++ {.u64_bit_29 = 1}, ++ {.u64_bit_30 = 1}, ++ {.u64_bit_31 = 1}, ++ {.u64_bit_32 = 1}, ++ {.u64_bit_33 = 1}, ++ {.u64_bit_34 = 1}, ++ {.u64_bit_35 = 1}, ++ {.u64_bit_36 = 1}, ++ {.u64_bit_37 = 1}, ++ {.u64_bit_38 = 1}, ++ {.u64_bit_39 = 1}, ++ {.u64_bit_40 = 1}, ++ {.u64_bit_41 = 1}, ++ {.u64_bit_42 = 1}, ++ {.u64_bit_43 = 1}, ++ {.u64_bit_44 = 1}, ++ {.u64_bit_45 = 1}, ++ {.u64_bit_46 = 1}, ++ {.u64_bit_47 = 1}, ++ {.u64_bit_48 = 1}, ++ {.u64_bit_49 = 1}, ++ {.u64_bit_50 = 1}, ++ {.u64_bit_51 = 1}, ++ {.u64_bit_52 = 1}, ++ {.u64_bit_53 = 1}, ++ {.u64_bit_54 = 1}, ++ {.u64_bit_55 = 1}, ++ {.u64_bit_56 = 1}, ++ {.u64_bit_57 = 1}, ++ {.u64_bit_58 = 1}, ++ {.u64_bit_59 = 1}, ++ {.u64_bit_60 = 1}, ++ {.u64_bit_61 = 1}, ++ {.u64_bit_62 = 1}, ++ {.u64_bit_63 = 1} ++}; ++ ++int main(int argc, char **argv) { ++ struct bitfield *mask_ptr = &masks[0]; ++ return mask_ptr->val; ++} ++ ++` +diff --git a/vendor/golang.org/x/sys/unix/linux/mksysnum.go b/vendor/golang.org/x/sys/unix/linux/mksysnum.go +new file mode 100644 +index 0000000..e1ad597 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/linux/mksysnum.go +@@ -0,0 +1,143 @@ ++// Copyright 2018 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build ignore ++ ++package main ++ ++import ( ++ "bufio" ++ "fmt" ++ "os" ++ "os/exec" ++ "regexp" ++ "strconv" ++ "strings" ++) ++ ++var ( ++ goos, goarch string ++) ++ ++// cmdLine returns this programs's commandline arguments ++func cmdLine() string { ++ return "go run linux/mksysnum.go " + strings.Join(os.Args[1:], " ") ++} ++ ++// buildTags returns build tags ++func buildTags() string { ++ return fmt.Sprintf("%s,%s", goarch, goos) ++} ++ ++func format(name string, num int, offset int) string { ++ if num > 999 { ++ // ignore deprecated syscalls that are no longer implemented ++ // https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/asm-generic/unistd.h?id=refs/heads/master#n716 ++ return "" ++ } ++ name = strings.ToUpper(name) ++ num = num + offset ++ return fmt.Sprintf(" SYS_%s = %d;\n", name, num) ++} ++ ++func checkErr(err error) { ++ if err != nil { ++ fmt.Fprintf(os.Stderr, "%v\n", err) ++ os.Exit(1) ++ } ++} ++ ++// source string and substring slice for regexp ++type re struct { ++ str string // source string ++ sub []string // matched sub-string ++} ++ ++// Match performs regular expression match ++func (r *re) Match(exp string) bool { ++ r.sub = regexp.MustCompile(exp).FindStringSubmatch(r.str) ++ if r.sub != nil { ++ return true ++ } ++ return false ++} ++ ++func main() { ++ // Get the OS and architecture (using GOARCH_TARGET if it exists) ++ goos = os.Getenv("GOOS") ++ goarch = os.Getenv("GOARCH_TARGET") ++ if goarch == "" { ++ goarch = os.Getenv("GOARCH") ++ } ++ // Check if GOOS and GOARCH environment variables are defined ++ if goarch == "" || goos == "" { ++ fmt.Fprintf(os.Stderr, "GOARCH or GOOS not defined in environment\n") ++ os.Exit(1) ++ } ++ // Check that we are using the new build system if we should ++ if os.Getenv("GOLANG_SYS_BUILD") != "docker" { ++ fmt.Fprintf(os.Stderr, "In the new build system, mksysnum should not be called directly.\n") ++ fmt.Fprintf(os.Stderr, "See README.md\n") ++ os.Exit(1) ++ } ++ ++ cc := os.Getenv("CC") ++ if cc == "" { ++ fmt.Fprintf(os.Stderr, "CC is not defined in environment\n") ++ os.Exit(1) ++ } ++ args := os.Args[1:] ++ args = append([]string{"-E", "-dD"}, args...) ++ cmd, err := exec.Command(cc, args...).Output() // execute command and capture output ++ if err != nil { ++ fmt.Fprintf(os.Stderr, "can't run %s", cc) ++ os.Exit(1) ++ } ++ text := "" ++ s := bufio.NewScanner(strings.NewReader(string(cmd))) ++ var offset, prev int ++ for s.Scan() { ++ t := re{str: s.Text()} ++ if t.Match(`^#define __NR_Linux\s+([0-9]+)`) { ++ // mips/mips64: extract offset ++ offset, _ = strconv.Atoi(t.sub[1]) // Make offset=0 if empty or non-numeric ++ } else if t.Match(`^#define __NR(\w*)_SYSCALL_BASE\s+([0-9]+)`) { ++ // arm: extract offset ++ offset, _ = strconv.Atoi(t.sub[1]) // Make offset=0 if empty or non-numeric ++ } else if t.Match(`^#define __NR_syscalls\s+`) { ++ // ignore redefinitions of __NR_syscalls ++ } else if t.Match(`^#define __NR_(\w*)Linux_syscalls\s+`) { ++ // mips/mips64: ignore definitions about the number of syscalls ++ } else if t.Match(`^#define __NR_(\w+)\s+([0-9]+)`) { ++ prev, err = strconv.Atoi(t.sub[2]) ++ checkErr(err) ++ text += format(t.sub[1], prev, offset) ++ } else if t.Match(`^#define __NR3264_(\w+)\s+([0-9]+)`) { ++ prev, err = strconv.Atoi(t.sub[2]) ++ checkErr(err) ++ text += format(t.sub[1], prev, offset) ++ } else if t.Match(`^#define __NR_(\w+)\s+\(\w+\+\s*([0-9]+)\)`) { ++ r2, err := strconv.Atoi(t.sub[2]) ++ checkErr(err) ++ text += format(t.sub[1], prev+r2, offset) ++ } else if t.Match(`^#define __NR_(\w+)\s+\(__NR_(?:SYSCALL_BASE|Linux) \+ ([0-9]+)`) { ++ r2, err := strconv.Atoi(t.sub[2]) ++ checkErr(err) ++ text += format(t.sub[1], r2, offset) ++ } ++ } ++ err = s.Err() ++ checkErr(err) ++ fmt.Printf(template, cmdLine(), buildTags(), text) ++} ++ ++const template = `// %s ++// Code generated by the command above; see README.md. DO NOT EDIT. ++ ++// +build %s ++ ++package unix ++ ++const( ++%s)` +diff --git a/vendor/golang.org/x/sys/unix/linux/types.go b/vendor/golang.org/x/sys/unix/linux/types.go +new file mode 100644 +index 0000000..89b7b7f +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/linux/types.go +@@ -0,0 +1,2346 @@ ++// Copyright 2009 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build ignore ++ ++/* ++Input to cgo -godefs. See README.md ++*/ ++ ++// +godefs map struct_in_addr [4]byte /* in_addr */ ++// +godefs map struct_in6_addr [16]byte /* in6_addr */ ++ ++package unix ++ ++/* ++#define _LARGEFILE_SOURCE ++#define _LARGEFILE64_SOURCE ++#define _FILE_OFFSET_BITS 64 ++#define _GNU_SOURCE ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#if defined(__sparc__) ++// On sparc{,64}, the kernel defines struct termios2 itself which clashes with the ++// definition in glibc. Duplicate the kernel version here. ++#if defined(__arch64__) ++typedef unsigned int tcflag_t; ++#else ++typedef unsigned long tcflag_t; ++#endif ++ ++struct termios2 { ++ tcflag_t c_iflag; ++ tcflag_t c_oflag; ++ tcflag_t c_cflag; ++ tcflag_t c_lflag; ++ unsigned char c_line; ++ unsigned char c_cc[19]; ++ unsigned int c_ispeed; ++ unsigned int c_ospeed; ++}; ++#else ++#include ++#endif ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++// abi/abi.h generated by mkall.go. ++#include "abi/abi.h" ++ ++// On mips64, the glibc stat and kernel stat do not agree ++#if (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI64) ++ ++// Use the stat defined by the kernel with a few modifications. These are: ++// * The time fields (like st_atime and st_atimensec) use the timespec ++// struct (like st_atim) for consistency with the glibc fields. ++// * The padding fields get different names to not break compatibility. ++// * st_blocks is signed, again for compatibility. ++struct stat { ++ unsigned int st_dev; ++ unsigned int st_pad1[3]; // Reserved for st_dev expansion ++ ++ unsigned long st_ino; ++ ++ mode_t st_mode; ++ __u32 st_nlink; ++ ++ uid_t st_uid; ++ gid_t st_gid; ++ ++ unsigned int st_rdev; ++ unsigned int st_pad2[3]; // Reserved for st_rdev expansion ++ ++ off_t st_size; ++ ++ // These are declared as separate fields in the kernel. Here we use ++ // the timespec struct for consistency with the other stat structs. ++ struct timespec st_atim; ++ struct timespec st_mtim; ++ struct timespec st_ctim; ++ ++ unsigned int st_blksize; ++ unsigned int st_pad4; ++ ++ long st_blocks; ++}; ++ ++// These are needed because we do not include fcntl.h or sys/types.h ++#include ++#include ++ ++#else ++ ++// Use the stat defined by glibc ++#include ++#include ++ ++#endif ++ ++// These are defined in linux/fcntl.h, but including it globally causes ++// conflicts with fcntl.h ++#ifndef AT_STATX_SYNC_TYPE ++# define AT_STATX_SYNC_TYPE 0x6000 // Type of synchronisation required from statx() ++#endif ++#ifndef AT_STATX_SYNC_AS_STAT ++# define AT_STATX_SYNC_AS_STAT 0x0000 // - Do whatever stat() does ++#endif ++#ifndef AT_STATX_FORCE_SYNC ++# define AT_STATX_FORCE_SYNC 0x2000 // - Force the attributes to be sync'd with the server ++#endif ++#ifndef AT_STATX_DONT_SYNC ++# define AT_STATX_DONT_SYNC 0x4000 // - Don't sync attributes with the server ++#endif ++ ++#ifndef AT_EACCESS ++# define AT_EACCESS 0x200 // Test access permitted for effective IDs, not real IDs. ++#endif ++ ++#ifdef TCSETS2 ++// On systems that have "struct termios2" use this as type Termios. ++typedef struct termios2 termios_t; ++#else ++typedef struct termios termios_t; ++#endif ++ ++enum { ++ sizeofPtr = sizeof(void*), ++}; ++ ++union sockaddr_all { ++ struct sockaddr s1; // this one gets used for fields ++ struct sockaddr_in s2; // these pad it out ++ struct sockaddr_in6 s3; ++ struct sockaddr_un s4; ++ struct sockaddr_ll s5; ++ struct sockaddr_nl s6; ++ struct sockaddr_pppox s7; ++ struct sockaddr_l2tpip s8; ++ struct sockaddr_l2tpip6 s9; ++}; ++ ++struct sockaddr_any { ++ struct sockaddr addr; ++ char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; ++}; ++ ++// copied from /usr/include/bluetooth/hci.h ++struct sockaddr_hci { ++ sa_family_t hci_family; ++ unsigned short hci_dev; ++ unsigned short hci_channel; ++}; ++ ++// copied from /usr/include/bluetooth/bluetooth.h ++#define BDADDR_BREDR 0x00 ++#define BDADDR_LE_PUBLIC 0x01 ++#define BDADDR_LE_RANDOM 0x02 ++ ++// copied from /usr/include/bluetooth/l2cap.h ++struct sockaddr_l2 { ++ sa_family_t l2_family; ++ unsigned short l2_psm; ++ uint8_t l2_bdaddr[6]; ++ unsigned short l2_cid; ++ uint8_t l2_bdaddr_type; ++}; ++ ++// copied from /usr/include/net/bluetooth/rfcomm.h ++struct sockaddr_rc { ++ sa_family_t rc_family; ++ uint8_t rc_bdaddr[6]; ++ uint8_t rc_channel; ++}; ++ ++// copied from /usr/include/linux/un.h ++struct my_sockaddr_un { ++ sa_family_t sun_family; ++#if defined(__ARM_EABI__) || defined(__powerpc64__) || defined(__riscv) ++ // on some platforms char is unsigned by default ++ signed char sun_path[108]; ++#else ++ char sun_path[108]; ++#endif ++}; ++ ++#ifdef __ARM_EABI__ ++typedef struct user_regs PtraceRegs; ++#elif defined(__aarch64__) ++typedef struct user_pt_regs PtraceRegs; ++#elif defined(__mips__) || defined(__powerpc64__) ++typedef struct pt_regs PtraceRegs; ++#elif defined(__s390x__) ++typedef struct _user_regs_struct PtraceRegs; ++#elif defined(__sparc__) ++#include ++typedef struct pt_regs PtraceRegs; ++#else ++typedef struct user_regs_struct PtraceRegs; ++#endif ++ ++#if defined(__s390x__) ++typedef struct _user_psw_struct ptracePsw; ++typedef struct _user_fpregs_struct ptraceFpregs; ++typedef struct _user_per_struct ptracePer; ++#else ++typedef struct {} ptracePsw; ++typedef struct {} ptraceFpregs; ++typedef struct {} ptracePer; ++#endif ++ ++// The real epoll_event is a union, and godefs doesn't handle it well. ++struct my_epoll_event { ++ uint32_t events; ++#if defined(__ARM_EABI__) || defined(__aarch64__) || (defined(__mips__) && _MIPS_SIM == _ABIO32) ++ // padding is not specified in linux/eventpoll.h but added to conform to the ++ // alignment requirements of EABI ++ int32_t padFd; ++#elif defined(__powerpc64__) || defined(__s390x__) || defined(__sparc__) || defined(__riscv) \ ++ || (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI64) ++ int32_t _padFd; ++#endif ++ int32_t fd; ++ int32_t pad; ++}; ++ ++// Copied from with the following modifications: ++// 1) bit field after read_format redeclared as '__u64 bits' to make it ++// accessible from Go ++// 2) collapsed the unions, to avoid confusing godoc for the generated output ++// (e.g. having to use BpAddr as an extension of Config) ++struct perf_event_attr_go { ++ __u32 type; ++ ++ __u32 size; ++ __u64 config; ++ ++ // union { ++ // __u64 sample_period; ++ // __u64 sample_freq; ++ // }; ++ __u64 sample; ++ ++ __u64 sample_type; ++ __u64 read_format; ++ ++ // Replaces the bit field. Flags are defined as constants. ++ __u64 bits; ++ ++ // union { ++ // __u32 wakeup_events; ++ // __u32 wakeup_watermark; ++ // }; ++ __u32 wakeup; ++ ++ __u32 bp_type; ++ ++ // union { ++ // __u64 bp_addr; ++ // __u64 config1; ++ // }; ++ __u64 ext1; ++ ++ // union { ++ // __u64 bp_len; ++ // __u64 config2; ++ // }; ++ __u64 ext2; ++ ++ __u64 branch_sample_type; ++ ++ __u64 sample_regs_user; ++ ++ __u32 sample_stack_user; ++ ++ __s32 clockid; ++ __u64 sample_regs_intr; ++ __u32 aux_watermark; ++ __u16 sample_max_stack; ++ __u16 __reserved_2; ++}; ++ ++// ustat is deprecated and glibc 2.28 removed ustat.h. Provide the type here for ++// backwards compatibility. Copied from /usr/include/bits/ustat.h ++struct ustat { ++ __daddr_t f_tfree; ++ __ino_t f_tinode; ++ char f_fname[6]; ++ char f_fpack[6]; ++}; ++ ++// my_blkpg_partition is blkpg_partition with unsigned devname & volname. ++struct my_blkpg_partition { ++ long long start; ++ long long length; ++ int pno; ++ unsigned char devname[BLKPG_DEVNAMELTH]; ++ unsigned char volname[BLKPG_VOLNAMELTH]; ++}; ++ ++// tipc_service_name is a copied and slightly modified form of the "name" ++// variant in sockaddr_tipc's union in tipc.h, so it can be exported as part of ++// SockaddrTIPC's API. ++struct tipc_service_name { ++ // From tipc_service_addr. ++ __u32 type; ++ __u32 instance; ++ // From the union. ++ __u32 domain; ++}; ++*/ ++import "C" ++ ++// Machine characteristics ++ ++const ( ++ SizeofPtr = C.sizeofPtr ++ SizeofShort = C.sizeof_short ++ SizeofInt = C.sizeof_int ++ SizeofLong = C.sizeof_long ++ SizeofLongLong = C.sizeof_longlong ++ PathMax = C.PATH_MAX ++) ++ ++// Basic types ++ ++type ( ++ _C_short C.short ++ _C_int C.int ++ _C_long C.long ++ _C_long_long C.longlong ++) ++ ++// Time ++ ++type Timespec C.struct_timespec ++ ++type Timeval C.struct_timeval ++ ++type Timex C.struct_timex ++ ++type ItimerSpec C.struct_itimerspec ++ ++const ( ++ TIME_OK = C.TIME_OK ++ TIME_INS = C.TIME_INS ++ TIME_DEL = C.TIME_DEL ++ TIME_OOP = C.TIME_OOP ++ TIME_WAIT = C.TIME_WAIT ++ TIME_ERROR = C.TIME_ERROR ++ TIME_BAD = C.TIME_BAD ++) ++ ++type Time_t C.time_t ++ ++type Tms C.struct_tms ++ ++type Utimbuf C.struct_utimbuf ++ ++// Processes ++ ++type Rusage C.struct_rusage ++ ++type Rlimit C.struct_rlimit ++ ++type _Gid_t C.gid_t ++ ++// Files ++ ++type Stat_t C.struct_stat ++ ++type StatxTimestamp C.struct_statx_timestamp ++ ++type Statx_t C.struct_statx ++ ++type Dirent C.struct_dirent ++ ++type Fsid C.fsid_t ++ ++type Flock_t C.struct_flock ++ ++// Filesystem Encryption ++ ++type FscryptPolicy C.struct_fscrypt_policy ++ ++type FscryptKey C.struct_fscrypt_key ++ ++type FscryptPolicyV1 C.struct_fscrypt_policy_v1 ++ ++type FscryptPolicyV2 C.struct_fscrypt_policy_v2 ++ ++type FscryptGetPolicyExArg C.struct_fscrypt_get_policy_ex_arg ++ ++type FscryptKeySpecifier C.struct_fscrypt_key_specifier ++ ++type FscryptAddKeyArg C.struct_fscrypt_add_key_arg ++ ++type FscryptRemoveKeyArg C.struct_fscrypt_remove_key_arg ++ ++type FscryptGetKeyStatusArg C.struct_fscrypt_get_key_status_arg ++ ++// Structure for Keyctl ++ ++type KeyctlDHParams C.struct_keyctl_dh_params ++ ++// Advice to Fadvise ++ ++const ( ++ FADV_NORMAL = C.POSIX_FADV_NORMAL ++ FADV_RANDOM = C.POSIX_FADV_RANDOM ++ FADV_SEQUENTIAL = C.POSIX_FADV_SEQUENTIAL ++ FADV_WILLNEED = C.POSIX_FADV_WILLNEED ++ FADV_DONTNEED = C.POSIX_FADV_DONTNEED ++ FADV_NOREUSE = C.POSIX_FADV_NOREUSE ++) ++ ++// Sockets ++ ++type RawSockaddrInet4 C.struct_sockaddr_in ++ ++type RawSockaddrInet6 C.struct_sockaddr_in6 ++ ++type RawSockaddrUnix C.struct_my_sockaddr_un ++ ++type RawSockaddrLinklayer C.struct_sockaddr_ll ++ ++type RawSockaddrNetlink C.struct_sockaddr_nl ++ ++type RawSockaddrHCI C.struct_sockaddr_hci ++ ++type RawSockaddrL2 C.struct_sockaddr_l2 ++ ++type RawSockaddrRFCOMM C.struct_sockaddr_rc ++ ++type RawSockaddrCAN C.struct_sockaddr_can ++ ++type RawSockaddrALG C.struct_sockaddr_alg ++ ++type RawSockaddrVM C.struct_sockaddr_vm ++ ++type RawSockaddrXDP C.struct_sockaddr_xdp ++ ++type RawSockaddrPPPoX [C.sizeof_struct_sockaddr_pppox]byte ++ ++type RawSockaddrTIPC C.struct_sockaddr_tipc ++ ++type RawSockaddrL2TPIP C.struct_sockaddr_l2tpip ++ ++type RawSockaddrL2TPIP6 C.struct_sockaddr_l2tpip6 ++ ++type RawSockaddr C.struct_sockaddr ++ ++type RawSockaddrAny C.struct_sockaddr_any ++ ++type _Socklen C.socklen_t ++ ++type Linger C.struct_linger ++ ++type Iovec C.struct_iovec ++ ++type IPMreq C.struct_ip_mreq ++ ++type IPMreqn C.struct_ip_mreqn ++ ++type IPv6Mreq C.struct_ipv6_mreq ++ ++type PacketMreq C.struct_packet_mreq ++ ++type Msghdr C.struct_msghdr ++ ++type Cmsghdr C.struct_cmsghdr ++ ++type Inet4Pktinfo C.struct_in_pktinfo ++ ++type Inet6Pktinfo C.struct_in6_pktinfo ++ ++type IPv6MTUInfo C.struct_ip6_mtuinfo ++ ++type ICMPv6Filter C.struct_icmp6_filter ++ ++type Ucred C.struct_ucred ++ ++type TCPInfo C.struct_tcp_info ++ ++type CanFilter C.struct_can_filter ++ ++const ( ++ SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in ++ SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 ++ SizeofSockaddrAny = C.sizeof_struct_sockaddr_any ++ SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un ++ SizeofSockaddrLinklayer = C.sizeof_struct_sockaddr_ll ++ SizeofSockaddrNetlink = C.sizeof_struct_sockaddr_nl ++ SizeofSockaddrHCI = C.sizeof_struct_sockaddr_hci ++ SizeofSockaddrL2 = C.sizeof_struct_sockaddr_l2 ++ SizeofSockaddrRFCOMM = C.sizeof_struct_sockaddr_rc ++ SizeofSockaddrCAN = C.sizeof_struct_sockaddr_can ++ SizeofSockaddrALG = C.sizeof_struct_sockaddr_alg ++ SizeofSockaddrVM = C.sizeof_struct_sockaddr_vm ++ SizeofSockaddrXDP = C.sizeof_struct_sockaddr_xdp ++ SizeofSockaddrPPPoX = C.sizeof_struct_sockaddr_pppox ++ SizeofSockaddrTIPC = C.sizeof_struct_sockaddr_tipc ++ SizeofSockaddrL2TPIP = C.sizeof_struct_sockaddr_l2tpip ++ SizeofSockaddrL2TPIP6 = C.sizeof_struct_sockaddr_l2tpip6 ++ SizeofLinger = C.sizeof_struct_linger ++ SizeofIovec = C.sizeof_struct_iovec ++ SizeofIPMreq = C.sizeof_struct_ip_mreq ++ SizeofIPMreqn = C.sizeof_struct_ip_mreqn ++ SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq ++ SizeofPacketMreq = C.sizeof_struct_packet_mreq ++ SizeofMsghdr = C.sizeof_struct_msghdr ++ SizeofCmsghdr = C.sizeof_struct_cmsghdr ++ SizeofInet4Pktinfo = C.sizeof_struct_in_pktinfo ++ SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo ++ SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo ++ SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter ++ SizeofUcred = C.sizeof_struct_ucred ++ SizeofTCPInfo = C.sizeof_struct_tcp_info ++ SizeofCanFilter = C.sizeof_struct_can_filter ++) ++ ++// Netlink routing and interface messages ++ ++const ( ++ NDA_UNSPEC = C.NDA_UNSPEC ++ NDA_DST = C.NDA_DST ++ NDA_LLADDR = C.NDA_LLADDR ++ NDA_CACHEINFO = C.NDA_CACHEINFO ++ NDA_PROBES = C.NDA_PROBES ++ NDA_VLAN = C.NDA_VLAN ++ NDA_PORT = C.NDA_PORT ++ NDA_VNI = C.NDA_VNI ++ NDA_IFINDEX = C.NDA_IFINDEX ++ NDA_MASTER = C.NDA_MASTER ++ NDA_LINK_NETNSID = C.NDA_LINK_NETNSID ++ NDA_SRC_VNI = C.NDA_SRC_VNI ++ NTF_USE = C.NTF_USE ++ NTF_SELF = C.NTF_SELF ++ NTF_MASTER = C.NTF_MASTER ++ NTF_PROXY = C.NTF_PROXY ++ NTF_EXT_LEARNED = C.NTF_EXT_LEARNED ++ NTF_OFFLOADED = C.NTF_OFFLOADED ++ NTF_ROUTER = C.NTF_ROUTER ++ NUD_INCOMPLETE = C.NUD_INCOMPLETE ++ NUD_REACHABLE = C.NUD_REACHABLE ++ NUD_STALE = C.NUD_STALE ++ NUD_DELAY = C.NUD_DELAY ++ NUD_PROBE = C.NUD_PROBE ++ NUD_FAILED = C.NUD_FAILED ++ NUD_NOARP = C.NUD_NOARP ++ NUD_PERMANENT = C.NUD_PERMANENT ++ NUD_NONE = C.NUD_NONE ++ IFA_UNSPEC = C.IFA_UNSPEC ++ IFA_ADDRESS = C.IFA_ADDRESS ++ IFA_LOCAL = C.IFA_LOCAL ++ IFA_LABEL = C.IFA_LABEL ++ IFA_BROADCAST = C.IFA_BROADCAST ++ IFA_ANYCAST = C.IFA_ANYCAST ++ IFA_CACHEINFO = C.IFA_CACHEINFO ++ IFA_MULTICAST = C.IFA_MULTICAST ++ IFA_FLAGS = C.IFA_FLAGS ++ IFA_RT_PRIORITY = C.IFA_RT_PRIORITY ++ IFA_TARGET_NETNSID = C.IFA_TARGET_NETNSID ++ IFLA_UNSPEC = C.IFLA_UNSPEC ++ IFLA_ADDRESS = C.IFLA_ADDRESS ++ IFLA_BROADCAST = C.IFLA_BROADCAST ++ IFLA_IFNAME = C.IFLA_IFNAME ++ IFLA_MTU = C.IFLA_MTU ++ IFLA_LINK = C.IFLA_LINK ++ IFLA_QDISC = C.IFLA_QDISC ++ IFLA_STATS = C.IFLA_STATS ++ IFLA_COST = C.IFLA_COST ++ IFLA_PRIORITY = C.IFLA_PRIORITY ++ IFLA_MASTER = C.IFLA_MASTER ++ IFLA_WIRELESS = C.IFLA_WIRELESS ++ IFLA_PROTINFO = C.IFLA_PROTINFO ++ IFLA_TXQLEN = C.IFLA_TXQLEN ++ IFLA_MAP = C.IFLA_MAP ++ IFLA_WEIGHT = C.IFLA_WEIGHT ++ IFLA_OPERSTATE = C.IFLA_OPERSTATE ++ IFLA_LINKMODE = C.IFLA_LINKMODE ++ IFLA_LINKINFO = C.IFLA_LINKINFO ++ IFLA_NET_NS_PID = C.IFLA_NET_NS_PID ++ IFLA_IFALIAS = C.IFLA_IFALIAS ++ IFLA_NUM_VF = C.IFLA_NUM_VF ++ IFLA_VFINFO_LIST = C.IFLA_VFINFO_LIST ++ IFLA_STATS64 = C.IFLA_STATS64 ++ IFLA_VF_PORTS = C.IFLA_VF_PORTS ++ IFLA_PORT_SELF = C.IFLA_PORT_SELF ++ IFLA_AF_SPEC = C.IFLA_AF_SPEC ++ IFLA_GROUP = C.IFLA_GROUP ++ IFLA_NET_NS_FD = C.IFLA_NET_NS_FD ++ IFLA_EXT_MASK = C.IFLA_EXT_MASK ++ IFLA_PROMISCUITY = C.IFLA_PROMISCUITY ++ IFLA_NUM_TX_QUEUES = C.IFLA_NUM_TX_QUEUES ++ IFLA_NUM_RX_QUEUES = C.IFLA_NUM_RX_QUEUES ++ IFLA_CARRIER = C.IFLA_CARRIER ++ IFLA_PHYS_PORT_ID = C.IFLA_PHYS_PORT_ID ++ IFLA_CARRIER_CHANGES = C.IFLA_CARRIER_CHANGES ++ IFLA_PHYS_SWITCH_ID = C.IFLA_PHYS_SWITCH_ID ++ IFLA_LINK_NETNSID = C.IFLA_LINK_NETNSID ++ IFLA_PHYS_PORT_NAME = C.IFLA_PHYS_PORT_NAME ++ IFLA_PROTO_DOWN = C.IFLA_PROTO_DOWN ++ IFLA_GSO_MAX_SEGS = C.IFLA_GSO_MAX_SEGS ++ IFLA_GSO_MAX_SIZE = C.IFLA_GSO_MAX_SIZE ++ IFLA_PAD = C.IFLA_PAD ++ IFLA_XDP = C.IFLA_XDP ++ IFLA_XDP_UNSPEC = C.IFLA_XDP_UNSPEC ++ IFLA_XDP_FD = C.IFLA_XDP_FD ++ IFLA_XDP_ATTACHED = C.IFLA_XDP_ATTACHED ++ IFLA_XDP_FLAGS = C.IFLA_XDP_FLAGS ++ IFLA_XDP_PROG_ID = C.IFLA_XDP_PROG_ID ++ IFLA_XDP_DRV_PROG_ID = C.IFLA_XDP_DRV_PROG_ID ++ IFLA_XDP_SKB_PROG_ID = C.IFLA_XDP_SKB_PROG_ID ++ IFLA_XDP_HW_PROG_ID = C.IFLA_XDP_HW_PROG_ID ++ IFLA_XDP_EXPECTED_FD = C.IFLA_XDP_EXPECTED_FD ++ IFLA_EVENT = C.IFLA_EVENT ++ IFLA_NEW_NETNSID = C.IFLA_NEW_NETNSID ++ IFLA_IF_NETNSID = C.IFLA_IF_NETNSID ++ IFLA_TARGET_NETNSID = C.IFLA_TARGET_NETNSID ++ IFLA_CARRIER_UP_COUNT = C.IFLA_CARRIER_UP_COUNT ++ IFLA_CARRIER_DOWN_COUNT = C.IFLA_CARRIER_DOWN_COUNT ++ IFLA_NEW_IFINDEX = C.IFLA_NEW_IFINDEX ++ IFLA_MIN_MTU = C.IFLA_MIN_MTU ++ IFLA_MAX_MTU = C.IFLA_MAX_MTU ++ IFLA_MAX = C.IFLA_MAX ++ IFLA_INFO_KIND = C.IFLA_INFO_KIND ++ IFLA_INFO_DATA = C.IFLA_INFO_DATA ++ IFLA_INFO_XSTATS = C.IFLA_INFO_XSTATS ++ IFLA_INFO_SLAVE_KIND = C.IFLA_INFO_SLAVE_KIND ++ IFLA_INFO_SLAVE_DATA = C.IFLA_INFO_SLAVE_DATA ++ RT_SCOPE_UNIVERSE = C.RT_SCOPE_UNIVERSE ++ RT_SCOPE_SITE = C.RT_SCOPE_SITE ++ RT_SCOPE_LINK = C.RT_SCOPE_LINK ++ RT_SCOPE_HOST = C.RT_SCOPE_HOST ++ RT_SCOPE_NOWHERE = C.RT_SCOPE_NOWHERE ++ RT_TABLE_UNSPEC = C.RT_TABLE_UNSPEC ++ RT_TABLE_COMPAT = C.RT_TABLE_COMPAT ++ RT_TABLE_DEFAULT = C.RT_TABLE_DEFAULT ++ RT_TABLE_MAIN = C.RT_TABLE_MAIN ++ RT_TABLE_LOCAL = C.RT_TABLE_LOCAL ++ RT_TABLE_MAX = C.RT_TABLE_MAX ++ RTA_UNSPEC = C.RTA_UNSPEC ++ RTA_DST = C.RTA_DST ++ RTA_SRC = C.RTA_SRC ++ RTA_IIF = C.RTA_IIF ++ RTA_OIF = C.RTA_OIF ++ RTA_GATEWAY = C.RTA_GATEWAY ++ RTA_PRIORITY = C.RTA_PRIORITY ++ RTA_PREFSRC = C.RTA_PREFSRC ++ RTA_METRICS = C.RTA_METRICS ++ RTA_MULTIPATH = C.RTA_MULTIPATH ++ RTA_FLOW = C.RTA_FLOW ++ RTA_CACHEINFO = C.RTA_CACHEINFO ++ RTA_TABLE = C.RTA_TABLE ++ RTA_MARK = C.RTA_MARK ++ RTA_MFC_STATS = C.RTA_MFC_STATS ++ RTA_VIA = C.RTA_VIA ++ RTA_NEWDST = C.RTA_NEWDST ++ RTA_PREF = C.RTA_PREF ++ RTA_ENCAP_TYPE = C.RTA_ENCAP_TYPE ++ RTA_ENCAP = C.RTA_ENCAP ++ RTA_EXPIRES = C.RTA_EXPIRES ++ RTA_PAD = C.RTA_PAD ++ RTA_UID = C.RTA_UID ++ RTA_TTL_PROPAGATE = C.RTA_TTL_PROPAGATE ++ RTA_IP_PROTO = C.RTA_IP_PROTO ++ RTA_SPORT = C.RTA_SPORT ++ RTA_DPORT = C.RTA_DPORT ++ RTN_UNSPEC = C.RTN_UNSPEC ++ RTN_UNICAST = C.RTN_UNICAST ++ RTN_LOCAL = C.RTN_LOCAL ++ RTN_BROADCAST = C.RTN_BROADCAST ++ RTN_ANYCAST = C.RTN_ANYCAST ++ RTN_MULTICAST = C.RTN_MULTICAST ++ RTN_BLACKHOLE = C.RTN_BLACKHOLE ++ RTN_UNREACHABLE = C.RTN_UNREACHABLE ++ RTN_PROHIBIT = C.RTN_PROHIBIT ++ RTN_THROW = C.RTN_THROW ++ RTN_NAT = C.RTN_NAT ++ RTN_XRESOLVE = C.RTN_XRESOLVE ++ SizeofNlMsghdr = C.sizeof_struct_nlmsghdr ++ SizeofNlMsgerr = C.sizeof_struct_nlmsgerr ++ SizeofRtGenmsg = C.sizeof_struct_rtgenmsg ++ SizeofNlAttr = C.sizeof_struct_nlattr ++ SizeofRtAttr = C.sizeof_struct_rtattr ++ SizeofIfInfomsg = C.sizeof_struct_ifinfomsg ++ SizeofIfAddrmsg = C.sizeof_struct_ifaddrmsg ++ SizeofIfaCacheinfo = C.sizeof_struct_ifa_cacheinfo ++ SizeofRtMsg = C.sizeof_struct_rtmsg ++ SizeofRtNexthop = C.sizeof_struct_rtnexthop ++ SizeofNdUseroptmsg = C.sizeof_struct_nduseroptmsg ++ SizeofNdMsg = C.sizeof_struct_ndmsg ++) ++ ++type NlMsghdr C.struct_nlmsghdr ++ ++type NlMsgerr C.struct_nlmsgerr ++ ++type RtGenmsg C.struct_rtgenmsg ++ ++type NlAttr C.struct_nlattr ++ ++type RtAttr C.struct_rtattr ++ ++type IfInfomsg C.struct_ifinfomsg ++ ++type IfAddrmsg C.struct_ifaddrmsg ++ ++type IfaCacheinfo C.struct_ifa_cacheinfo ++ ++type RtMsg C.struct_rtmsg ++ ++type RtNexthop C.struct_rtnexthop ++ ++type NdUseroptmsg C.struct_nduseroptmsg ++ ++type NdMsg C.struct_ndmsg ++ ++// Linux socket filter ++ ++const ( ++ SizeofSockFilter = C.sizeof_struct_sock_filter ++ SizeofSockFprog = C.sizeof_struct_sock_fprog ++) ++ ++type SockFilter C.struct_sock_filter ++ ++type SockFprog C.struct_sock_fprog ++ ++// Inotify ++ ++type InotifyEvent C.struct_inotify_event ++ ++const SizeofInotifyEvent = C.sizeof_struct_inotify_event ++ ++// Ptrace ++ ++// Register structures ++type PtraceRegs C.PtraceRegs ++ ++// Structures contained in PtraceRegs on s390x (exported by mkpost.go) ++type PtracePsw C.ptracePsw ++ ++type PtraceFpregs C.ptraceFpregs ++ ++type PtracePer C.ptracePer ++ ++// Misc ++ ++type FdSet C.fd_set ++ ++type Sysinfo_t C.struct_sysinfo ++ ++type Utsname C.struct_utsname ++ ++type Ustat_t C.struct_ustat ++ ++type EpollEvent C.struct_my_epoll_event ++ ++const ( ++ AT_EMPTY_PATH = C.AT_EMPTY_PATH ++ AT_FDCWD = C.AT_FDCWD ++ AT_NO_AUTOMOUNT = C.AT_NO_AUTOMOUNT ++ AT_REMOVEDIR = C.AT_REMOVEDIR ++ ++ AT_STATX_SYNC_AS_STAT = C.AT_STATX_SYNC_AS_STAT ++ AT_STATX_FORCE_SYNC = C.AT_STATX_FORCE_SYNC ++ AT_STATX_DONT_SYNC = C.AT_STATX_DONT_SYNC ++ ++ AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW ++ AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW ++ ++ AT_EACCESS = C.AT_EACCESS ++) ++ ++type PollFd C.struct_pollfd ++ ++const ( ++ POLLIN = C.POLLIN ++ POLLPRI = C.POLLPRI ++ POLLOUT = C.POLLOUT ++ POLLRDHUP = C.POLLRDHUP ++ POLLERR = C.POLLERR ++ POLLHUP = C.POLLHUP ++ POLLNVAL = C.POLLNVAL ++) ++ ++type Sigset_t C.sigset_t ++ ++const _C__NSIG = C._NSIG ++ ++type SignalfdSiginfo C.struct_signalfd_siginfo ++ ++const PERF_IOC_FLAG_GROUP = C.PERF_IOC_FLAG_GROUP ++ ++// Terminal handling ++ ++type Termios C.termios_t ++ ++type Winsize C.struct_winsize ++ ++// Taskstats and cgroup stats. ++ ++type Taskstats C.struct_taskstats ++ ++const ( ++ TASKSTATS_CMD_UNSPEC = C.TASKSTATS_CMD_UNSPEC ++ TASKSTATS_CMD_GET = C.TASKSTATS_CMD_GET ++ TASKSTATS_CMD_NEW = C.TASKSTATS_CMD_NEW ++ TASKSTATS_TYPE_UNSPEC = C.TASKSTATS_TYPE_UNSPEC ++ TASKSTATS_TYPE_PID = C.TASKSTATS_TYPE_PID ++ TASKSTATS_TYPE_TGID = C.TASKSTATS_TYPE_TGID ++ TASKSTATS_TYPE_STATS = C.TASKSTATS_TYPE_STATS ++ TASKSTATS_TYPE_AGGR_PID = C.TASKSTATS_TYPE_AGGR_PID ++ TASKSTATS_TYPE_AGGR_TGID = C.TASKSTATS_TYPE_AGGR_TGID ++ TASKSTATS_TYPE_NULL = C.TASKSTATS_TYPE_NULL ++ TASKSTATS_CMD_ATTR_UNSPEC = C.TASKSTATS_CMD_ATTR_UNSPEC ++ TASKSTATS_CMD_ATTR_PID = C.TASKSTATS_CMD_ATTR_PID ++ TASKSTATS_CMD_ATTR_TGID = C.TASKSTATS_CMD_ATTR_TGID ++ TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = C.TASKSTATS_CMD_ATTR_REGISTER_CPUMASK ++ TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = C.TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK ++) ++ ++type CGroupStats C.struct_cgroupstats ++ ++const ( ++ CGROUPSTATS_CMD_UNSPEC = C.__TASKSTATS_CMD_MAX ++ CGROUPSTATS_CMD_GET = C.CGROUPSTATS_CMD_GET ++ CGROUPSTATS_CMD_NEW = C.CGROUPSTATS_CMD_NEW ++ CGROUPSTATS_TYPE_UNSPEC = C.CGROUPSTATS_TYPE_UNSPEC ++ CGROUPSTATS_TYPE_CGROUP_STATS = C.CGROUPSTATS_TYPE_CGROUP_STATS ++ CGROUPSTATS_CMD_ATTR_UNSPEC = C.CGROUPSTATS_CMD_ATTR_UNSPEC ++ CGROUPSTATS_CMD_ATTR_FD = C.CGROUPSTATS_CMD_ATTR_FD ++) ++ ++// Generic netlink ++ ++type Genlmsghdr C.struct_genlmsghdr ++ ++const ( ++ CTRL_CMD_UNSPEC = C.CTRL_CMD_UNSPEC ++ CTRL_CMD_NEWFAMILY = C.CTRL_CMD_NEWFAMILY ++ CTRL_CMD_DELFAMILY = C.CTRL_CMD_DELFAMILY ++ CTRL_CMD_GETFAMILY = C.CTRL_CMD_GETFAMILY ++ CTRL_CMD_NEWOPS = C.CTRL_CMD_NEWOPS ++ CTRL_CMD_DELOPS = C.CTRL_CMD_DELOPS ++ CTRL_CMD_GETOPS = C.CTRL_CMD_GETOPS ++ CTRL_CMD_NEWMCAST_GRP = C.CTRL_CMD_NEWMCAST_GRP ++ CTRL_CMD_DELMCAST_GRP = C.CTRL_CMD_DELMCAST_GRP ++ CTRL_CMD_GETMCAST_GRP = C.CTRL_CMD_GETMCAST_GRP ++ CTRL_ATTR_UNSPEC = C.CTRL_ATTR_UNSPEC ++ CTRL_ATTR_FAMILY_ID = C.CTRL_ATTR_FAMILY_ID ++ CTRL_ATTR_FAMILY_NAME = C.CTRL_ATTR_FAMILY_NAME ++ CTRL_ATTR_VERSION = C.CTRL_ATTR_VERSION ++ CTRL_ATTR_HDRSIZE = C.CTRL_ATTR_HDRSIZE ++ CTRL_ATTR_MAXATTR = C.CTRL_ATTR_MAXATTR ++ CTRL_ATTR_OPS = C.CTRL_ATTR_OPS ++ CTRL_ATTR_MCAST_GROUPS = C.CTRL_ATTR_MCAST_GROUPS ++ CTRL_ATTR_OP_UNSPEC = C.CTRL_ATTR_OP_UNSPEC ++ CTRL_ATTR_OP_ID = C.CTRL_ATTR_OP_ID ++ CTRL_ATTR_OP_FLAGS = C.CTRL_ATTR_OP_FLAGS ++ CTRL_ATTR_MCAST_GRP_UNSPEC = C.CTRL_ATTR_MCAST_GRP_UNSPEC ++ CTRL_ATTR_MCAST_GRP_NAME = C.CTRL_ATTR_MCAST_GRP_NAME ++ CTRL_ATTR_MCAST_GRP_ID = C.CTRL_ATTR_MCAST_GRP_ID ++) ++ ++// CPU affinity ++ ++type cpuMask C.__cpu_mask ++ ++const ( ++ _CPU_SETSIZE = C.__CPU_SETSIZE ++ _NCPUBITS = C.__NCPUBITS ++) ++ ++// Bluetooth ++ ++const ( ++ BDADDR_BREDR = C.BDADDR_BREDR ++ BDADDR_LE_PUBLIC = C.BDADDR_LE_PUBLIC ++ BDADDR_LE_RANDOM = C.BDADDR_LE_RANDOM ++) ++ ++// Perf subsystem ++ ++type PerfEventAttr C.struct_perf_event_attr_go ++ ++type PerfEventMmapPage C.struct_perf_event_mmap_page ++ ++// Bit field in struct perf_event_attr expanded as flags. ++// Set these on PerfEventAttr.Bits by ORing them together. ++const ( ++ PerfBitDisabled uint64 = CBitFieldMaskBit0 ++ PerfBitInherit = CBitFieldMaskBit1 ++ PerfBitPinned = CBitFieldMaskBit2 ++ PerfBitExclusive = CBitFieldMaskBit3 ++ PerfBitExcludeUser = CBitFieldMaskBit4 ++ PerfBitExcludeKernel = CBitFieldMaskBit5 ++ PerfBitExcludeHv = CBitFieldMaskBit6 ++ PerfBitExcludeIdle = CBitFieldMaskBit7 ++ PerfBitMmap = CBitFieldMaskBit8 ++ PerfBitComm = CBitFieldMaskBit9 ++ PerfBitFreq = CBitFieldMaskBit10 ++ PerfBitInheritStat = CBitFieldMaskBit11 ++ PerfBitEnableOnExec = CBitFieldMaskBit12 ++ PerfBitTask = CBitFieldMaskBit13 ++ PerfBitWatermark = CBitFieldMaskBit14 ++ PerfBitPreciseIPBit1 = CBitFieldMaskBit15 ++ PerfBitPreciseIPBit2 = CBitFieldMaskBit16 ++ PerfBitMmapData = CBitFieldMaskBit17 ++ PerfBitSampleIDAll = CBitFieldMaskBit18 ++ PerfBitExcludeHost = CBitFieldMaskBit19 ++ PerfBitExcludeGuest = CBitFieldMaskBit20 ++ PerfBitExcludeCallchainKernel = CBitFieldMaskBit21 ++ PerfBitExcludeCallchainUser = CBitFieldMaskBit22 ++ PerfBitMmap2 = CBitFieldMaskBit23 ++ PerfBitCommExec = CBitFieldMaskBit24 ++ PerfBitUseClockID = CBitFieldMaskBit25 ++ PerfBitContextSwitch = CBitFieldMaskBit26 ++) ++ ++const ( ++ PERF_TYPE_HARDWARE = C.PERF_TYPE_HARDWARE ++ PERF_TYPE_SOFTWARE = C.PERF_TYPE_SOFTWARE ++ PERF_TYPE_TRACEPOINT = C.PERF_TYPE_TRACEPOINT ++ PERF_TYPE_HW_CACHE = C.PERF_TYPE_HW_CACHE ++ PERF_TYPE_RAW = C.PERF_TYPE_RAW ++ PERF_TYPE_BREAKPOINT = C.PERF_TYPE_BREAKPOINT ++ ++ PERF_COUNT_HW_CPU_CYCLES = C.PERF_COUNT_HW_CPU_CYCLES ++ PERF_COUNT_HW_INSTRUCTIONS = C.PERF_COUNT_HW_INSTRUCTIONS ++ PERF_COUNT_HW_CACHE_REFERENCES = C.PERF_COUNT_HW_CACHE_REFERENCES ++ PERF_COUNT_HW_CACHE_MISSES = C.PERF_COUNT_HW_CACHE_MISSES ++ PERF_COUNT_HW_BRANCH_INSTRUCTIONS = C.PERF_COUNT_HW_BRANCH_INSTRUCTIONS ++ PERF_COUNT_HW_BRANCH_MISSES = C.PERF_COUNT_HW_BRANCH_MISSES ++ PERF_COUNT_HW_BUS_CYCLES = C.PERF_COUNT_HW_BUS_CYCLES ++ PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = C.PERF_COUNT_HW_STALLED_CYCLES_FRONTEND ++ PERF_COUNT_HW_STALLED_CYCLES_BACKEND = C.PERF_COUNT_HW_STALLED_CYCLES_BACKEND ++ PERF_COUNT_HW_REF_CPU_CYCLES = C.PERF_COUNT_HW_REF_CPU_CYCLES ++ ++ PERF_COUNT_HW_CACHE_L1D = C.PERF_COUNT_HW_CACHE_L1D ++ PERF_COUNT_HW_CACHE_L1I = C.PERF_COUNT_HW_CACHE_L1I ++ PERF_COUNT_HW_CACHE_LL = C.PERF_COUNT_HW_CACHE_LL ++ PERF_COUNT_HW_CACHE_DTLB = C.PERF_COUNT_HW_CACHE_DTLB ++ PERF_COUNT_HW_CACHE_ITLB = C.PERF_COUNT_HW_CACHE_ITLB ++ PERF_COUNT_HW_CACHE_BPU = C.PERF_COUNT_HW_CACHE_BPU ++ PERF_COUNT_HW_CACHE_NODE = C.PERF_COUNT_HW_CACHE_NODE ++ ++ PERF_COUNT_HW_CACHE_OP_READ = C.PERF_COUNT_HW_CACHE_OP_READ ++ PERF_COUNT_HW_CACHE_OP_WRITE = C.PERF_COUNT_HW_CACHE_OP_WRITE ++ PERF_COUNT_HW_CACHE_OP_PREFETCH = C.PERF_COUNT_HW_CACHE_OP_PREFETCH ++ ++ PERF_COUNT_HW_CACHE_RESULT_ACCESS = C.PERF_COUNT_HW_CACHE_RESULT_ACCESS ++ PERF_COUNT_HW_CACHE_RESULT_MISS = C.PERF_COUNT_HW_CACHE_RESULT_MISS ++ ++ PERF_COUNT_SW_CPU_CLOCK = C.PERF_COUNT_SW_CPU_CLOCK ++ PERF_COUNT_SW_TASK_CLOCK = C.PERF_COUNT_SW_TASK_CLOCK ++ PERF_COUNT_SW_PAGE_FAULTS = C.PERF_COUNT_SW_PAGE_FAULTS ++ PERF_COUNT_SW_CONTEXT_SWITCHES = C.PERF_COUNT_SW_CONTEXT_SWITCHES ++ PERF_COUNT_SW_CPU_MIGRATIONS = C.PERF_COUNT_SW_CPU_MIGRATIONS ++ PERF_COUNT_SW_PAGE_FAULTS_MIN = C.PERF_COUNT_SW_PAGE_FAULTS_MIN ++ PERF_COUNT_SW_PAGE_FAULTS_MAJ = C.PERF_COUNT_SW_PAGE_FAULTS_MAJ ++ PERF_COUNT_SW_ALIGNMENT_FAULTS = C.PERF_COUNT_SW_ALIGNMENT_FAULTS ++ PERF_COUNT_SW_EMULATION_FAULTS = C.PERF_COUNT_SW_EMULATION_FAULTS ++ PERF_COUNT_SW_DUMMY = C.PERF_COUNT_SW_DUMMY ++ PERF_COUNT_SW_BPF_OUTPUT = C.PERF_COUNT_SW_BPF_OUTPUT ++ ++ PERF_SAMPLE_IP = C.PERF_SAMPLE_IP ++ PERF_SAMPLE_TID = C.PERF_SAMPLE_TID ++ PERF_SAMPLE_TIME = C.PERF_SAMPLE_TIME ++ PERF_SAMPLE_ADDR = C.PERF_SAMPLE_ADDR ++ PERF_SAMPLE_READ = C.PERF_SAMPLE_READ ++ PERF_SAMPLE_CALLCHAIN = C.PERF_SAMPLE_CALLCHAIN ++ PERF_SAMPLE_ID = C.PERF_SAMPLE_ID ++ PERF_SAMPLE_CPU = C.PERF_SAMPLE_CPU ++ PERF_SAMPLE_PERIOD = C.PERF_SAMPLE_PERIOD ++ PERF_SAMPLE_STREAM_ID = C.PERF_SAMPLE_STREAM_ID ++ PERF_SAMPLE_RAW = C.PERF_SAMPLE_RAW ++ PERF_SAMPLE_BRANCH_STACK = C.PERF_SAMPLE_BRANCH_STACK ++ ++ PERF_SAMPLE_BRANCH_USER = C.PERF_SAMPLE_BRANCH_USER ++ PERF_SAMPLE_BRANCH_KERNEL = C.PERF_SAMPLE_BRANCH_KERNEL ++ PERF_SAMPLE_BRANCH_HV = C.PERF_SAMPLE_BRANCH_HV ++ PERF_SAMPLE_BRANCH_ANY = C.PERF_SAMPLE_BRANCH_ANY ++ PERF_SAMPLE_BRANCH_ANY_CALL = C.PERF_SAMPLE_BRANCH_ANY_CALL ++ PERF_SAMPLE_BRANCH_ANY_RETURN = C.PERF_SAMPLE_BRANCH_ANY_RETURN ++ PERF_SAMPLE_BRANCH_IND_CALL = C.PERF_SAMPLE_BRANCH_IND_CALL ++ PERF_SAMPLE_BRANCH_ABORT_TX = C.PERF_SAMPLE_BRANCH_ABORT_TX ++ PERF_SAMPLE_BRANCH_IN_TX = C.PERF_SAMPLE_BRANCH_IN_TX ++ PERF_SAMPLE_BRANCH_NO_TX = C.PERF_SAMPLE_BRANCH_NO_TX ++ PERF_SAMPLE_BRANCH_COND = C.PERF_SAMPLE_BRANCH_COND ++ PERF_SAMPLE_BRANCH_CALL_STACK = C.PERF_SAMPLE_BRANCH_CALL_STACK ++ PERF_SAMPLE_BRANCH_IND_JUMP = C.PERF_SAMPLE_BRANCH_IND_JUMP ++ PERF_SAMPLE_BRANCH_CALL = C.PERF_SAMPLE_BRANCH_CALL ++ PERF_SAMPLE_BRANCH_NO_FLAGS = C.PERF_SAMPLE_BRANCH_NO_FLAGS ++ PERF_SAMPLE_BRANCH_NO_CYCLES = C.PERF_SAMPLE_BRANCH_NO_CYCLES ++ PERF_SAMPLE_BRANCH_TYPE_SAVE = C.PERF_SAMPLE_BRANCH_TYPE_SAVE ++ ++ PERF_FORMAT_TOTAL_TIME_ENABLED = C.PERF_FORMAT_TOTAL_TIME_ENABLED ++ PERF_FORMAT_TOTAL_TIME_RUNNING = C.PERF_FORMAT_TOTAL_TIME_RUNNING ++ PERF_FORMAT_ID = C.PERF_FORMAT_ID ++ PERF_FORMAT_GROUP = C.PERF_FORMAT_GROUP ++ ++ PERF_RECORD_MMAP = C.PERF_RECORD_MMAP ++ PERF_RECORD_LOST = C.PERF_RECORD_LOST ++ PERF_RECORD_COMM = C.PERF_RECORD_COMM ++ PERF_RECORD_EXIT = C.PERF_RECORD_EXIT ++ PERF_RECORD_THROTTLE = C.PERF_RECORD_THROTTLE ++ PERF_RECORD_UNTHROTTLE = C.PERF_RECORD_UNTHROTTLE ++ PERF_RECORD_FORK = C.PERF_RECORD_FORK ++ PERF_RECORD_READ = C.PERF_RECORD_READ ++ PERF_RECORD_SAMPLE = C.PERF_RECORD_SAMPLE ++ PERF_RECORD_MMAP2 = C.PERF_RECORD_MMAP2 ++ PERF_RECORD_AUX = C.PERF_RECORD_AUX ++ PERF_RECORD_ITRACE_START = C.PERF_RECORD_ITRACE_START ++ PERF_RECORD_LOST_SAMPLES = C.PERF_RECORD_LOST_SAMPLES ++ PERF_RECORD_SWITCH = C.PERF_RECORD_SWITCH ++ PERF_RECORD_SWITCH_CPU_WIDE = C.PERF_RECORD_SWITCH_CPU_WIDE ++ PERF_RECORD_NAMESPACES = C.PERF_RECORD_NAMESPACES ++ ++ PERF_CONTEXT_HV = C.PERF_CONTEXT_HV ++ PERF_CONTEXT_KERNEL = C.PERF_CONTEXT_KERNEL ++ PERF_CONTEXT_USER = C.PERF_CONTEXT_USER ++ ++ PERF_CONTEXT_GUEST = C.PERF_CONTEXT_GUEST ++ PERF_CONTEXT_GUEST_KERNEL = C.PERF_CONTEXT_GUEST_KERNEL ++ PERF_CONTEXT_GUEST_USER = C.PERF_CONTEXT_GUEST_USER ++ ++ PERF_FLAG_FD_NO_GROUP = C.PERF_FLAG_FD_NO_GROUP ++ PERF_FLAG_FD_OUTPUT = C.PERF_FLAG_FD_OUTPUT ++ PERF_FLAG_PID_CGROUP = C.PERF_FLAG_PID_CGROUP ++ PERF_FLAG_FD_CLOEXEC = C.PERF_FLAG_FD_CLOEXEC ++) ++ ++// Platform ABI and calling convention ++ ++// Bit field masks for interoperability with C code that uses bit fields. ++// Each mask corresponds to a single bit set - bit field behavior can be replicated by combining ++// the masks with bitwise OR. ++const ( ++ CBitFieldMaskBit0 = C.BITFIELD_MASK_0 ++ CBitFieldMaskBit1 = C.BITFIELD_MASK_1 ++ CBitFieldMaskBit2 = C.BITFIELD_MASK_2 ++ CBitFieldMaskBit3 = C.BITFIELD_MASK_3 ++ CBitFieldMaskBit4 = C.BITFIELD_MASK_4 ++ CBitFieldMaskBit5 = C.BITFIELD_MASK_5 ++ CBitFieldMaskBit6 = C.BITFIELD_MASK_6 ++ CBitFieldMaskBit7 = C.BITFIELD_MASK_7 ++ CBitFieldMaskBit8 = C.BITFIELD_MASK_8 ++ CBitFieldMaskBit9 = C.BITFIELD_MASK_9 ++ CBitFieldMaskBit10 = C.BITFIELD_MASK_10 ++ CBitFieldMaskBit11 = C.BITFIELD_MASK_11 ++ CBitFieldMaskBit12 = C.BITFIELD_MASK_12 ++ CBitFieldMaskBit13 = C.BITFIELD_MASK_13 ++ CBitFieldMaskBit14 = C.BITFIELD_MASK_14 ++ CBitFieldMaskBit15 = C.BITFIELD_MASK_15 ++ CBitFieldMaskBit16 = C.BITFIELD_MASK_16 ++ CBitFieldMaskBit17 = C.BITFIELD_MASK_17 ++ CBitFieldMaskBit18 = C.BITFIELD_MASK_18 ++ CBitFieldMaskBit19 = C.BITFIELD_MASK_19 ++ CBitFieldMaskBit20 = C.BITFIELD_MASK_20 ++ CBitFieldMaskBit21 = C.BITFIELD_MASK_21 ++ CBitFieldMaskBit22 = C.BITFIELD_MASK_22 ++ CBitFieldMaskBit23 = C.BITFIELD_MASK_23 ++ CBitFieldMaskBit24 = C.BITFIELD_MASK_24 ++ CBitFieldMaskBit25 = C.BITFIELD_MASK_25 ++ CBitFieldMaskBit26 = C.BITFIELD_MASK_26 ++ CBitFieldMaskBit27 = C.BITFIELD_MASK_27 ++ CBitFieldMaskBit28 = C.BITFIELD_MASK_28 ++ CBitFieldMaskBit29 = C.BITFIELD_MASK_29 ++ CBitFieldMaskBit30 = C.BITFIELD_MASK_30 ++ CBitFieldMaskBit31 = C.BITFIELD_MASK_31 ++ CBitFieldMaskBit32 = C.BITFIELD_MASK_32 ++ CBitFieldMaskBit33 = C.BITFIELD_MASK_33 ++ CBitFieldMaskBit34 = C.BITFIELD_MASK_34 ++ CBitFieldMaskBit35 = C.BITFIELD_MASK_35 ++ CBitFieldMaskBit36 = C.BITFIELD_MASK_36 ++ CBitFieldMaskBit37 = C.BITFIELD_MASK_37 ++ CBitFieldMaskBit38 = C.BITFIELD_MASK_38 ++ CBitFieldMaskBit39 = C.BITFIELD_MASK_39 ++ CBitFieldMaskBit40 = C.BITFIELD_MASK_40 ++ CBitFieldMaskBit41 = C.BITFIELD_MASK_41 ++ CBitFieldMaskBit42 = C.BITFIELD_MASK_42 ++ CBitFieldMaskBit43 = C.BITFIELD_MASK_43 ++ CBitFieldMaskBit44 = C.BITFIELD_MASK_44 ++ CBitFieldMaskBit45 = C.BITFIELD_MASK_45 ++ CBitFieldMaskBit46 = C.BITFIELD_MASK_46 ++ CBitFieldMaskBit47 = C.BITFIELD_MASK_47 ++ CBitFieldMaskBit48 = C.BITFIELD_MASK_48 ++ CBitFieldMaskBit49 = C.BITFIELD_MASK_49 ++ CBitFieldMaskBit50 = C.BITFIELD_MASK_50 ++ CBitFieldMaskBit51 = C.BITFIELD_MASK_51 ++ CBitFieldMaskBit52 = C.BITFIELD_MASK_52 ++ CBitFieldMaskBit53 = C.BITFIELD_MASK_53 ++ CBitFieldMaskBit54 = C.BITFIELD_MASK_54 ++ CBitFieldMaskBit55 = C.BITFIELD_MASK_55 ++ CBitFieldMaskBit56 = C.BITFIELD_MASK_56 ++ CBitFieldMaskBit57 = C.BITFIELD_MASK_57 ++ CBitFieldMaskBit58 = C.BITFIELD_MASK_58 ++ CBitFieldMaskBit59 = C.BITFIELD_MASK_59 ++ CBitFieldMaskBit60 = C.BITFIELD_MASK_60 ++ CBitFieldMaskBit61 = C.BITFIELD_MASK_61 ++ CBitFieldMaskBit62 = C.BITFIELD_MASK_62 ++ CBitFieldMaskBit63 = C.BITFIELD_MASK_63 ++) ++ ++// TCP-MD5 signature. ++ ++type SockaddrStorage C.struct_sockaddr_storage ++ ++type TCPMD5Sig C.struct_tcp_md5sig ++ ++// Disk drive operations. ++ ++type HDDriveCmdHdr C.struct_hd_drive_cmd_hdr ++ ++type HDGeometry C.struct_hd_geometry ++ ++type HDDriveID C.struct_hd_driveid ++ ++// Statfs ++ ++type Statfs_t C.struct_statfs ++ ++const ( ++ ST_MANDLOCK = C.ST_MANDLOCK ++ ST_NOATIME = C.ST_NOATIME ++ ST_NODEV = C.ST_NODEV ++ ST_NODIRATIME = C.ST_NODIRATIME ++ ST_NOEXEC = C.ST_NOEXEC ++ ST_NOSUID = C.ST_NOSUID ++ ST_RDONLY = C.ST_RDONLY ++ ST_RELATIME = C.ST_RELATIME ++ ST_SYNCHRONOUS = C.ST_SYNCHRONOUS ++) ++ ++// TPacket ++ ++type TpacketHdr C.struct_tpacket_hdr ++ ++type Tpacket2Hdr C.struct_tpacket2_hdr ++ ++type Tpacket3Hdr C.struct_tpacket3_hdr ++ ++type TpacketHdrVariant1 C.struct_tpacket_hdr_variant1 ++ ++type TpacketBlockDesc C.struct_tpacket_block_desc ++ ++type TpacketBDTS C.struct_tpacket_bd_ts ++ ++type TpacketHdrV1 C.struct_tpacket_hdr_v1 ++ ++type TpacketReq C.struct_tpacket_req ++ ++type TpacketReq3 C.struct_tpacket_req3 ++ ++type TpacketStats C.struct_tpacket_stats ++ ++type TpacketStatsV3 C.struct_tpacket_stats_v3 ++ ++type TpacketAuxdata C.struct_tpacket_auxdata ++ ++const ( ++ TPACKET_V1 = C.TPACKET_V1 ++ TPACKET_V2 = C.TPACKET_V2 ++ TPACKET_V3 = C.TPACKET_V3 ++) ++ ++const ( ++ SizeofTpacketHdr = C.sizeof_struct_tpacket_hdr ++ SizeofTpacket2Hdr = C.sizeof_struct_tpacket2_hdr ++ SizeofTpacket3Hdr = C.sizeof_struct_tpacket3_hdr ++ ++ SizeofTpacketStats = C.sizeof_struct_tpacket_stats ++ SizeofTpacketStatsV3 = C.sizeof_struct_tpacket_stats_v3 ++) ++ ++// netfilter ++// generated using: ++// perl -nlE '/^\s*(NF\w+)/ && say "$1 = C.$1"' /usr/include/linux/netfilter.h ++const ( ++ NF_INET_PRE_ROUTING = C.NF_INET_PRE_ROUTING ++ NF_INET_LOCAL_IN = C.NF_INET_LOCAL_IN ++ NF_INET_FORWARD = C.NF_INET_FORWARD ++ NF_INET_LOCAL_OUT = C.NF_INET_LOCAL_OUT ++ NF_INET_POST_ROUTING = C.NF_INET_POST_ROUTING ++ NF_INET_NUMHOOKS = C.NF_INET_NUMHOOKS ++) ++ ++const ( ++ NF_NETDEV_INGRESS = C.NF_NETDEV_INGRESS ++ NF_NETDEV_NUMHOOKS = C.NF_NETDEV_NUMHOOKS ++) ++ ++const ( ++ NFPROTO_UNSPEC = C.NFPROTO_UNSPEC ++ NFPROTO_INET = C.NFPROTO_INET ++ NFPROTO_IPV4 = C.NFPROTO_IPV4 ++ NFPROTO_ARP = C.NFPROTO_ARP ++ NFPROTO_NETDEV = C.NFPROTO_NETDEV ++ NFPROTO_BRIDGE = C.NFPROTO_BRIDGE ++ NFPROTO_IPV6 = C.NFPROTO_IPV6 ++ NFPROTO_DECNET = C.NFPROTO_DECNET ++ NFPROTO_NUMPROTO = C.NFPROTO_NUMPROTO ++) ++ ++// netfilter nfnetlink ++type Nfgenmsg C.struct_nfgenmsg ++ ++const ( ++ NFNL_BATCH_UNSPEC = C.NFNL_BATCH_UNSPEC ++ NFNL_BATCH_GENID = C.NFNL_BATCH_GENID ++) ++ ++// netfilter nf_tables ++// generated using: ++// perl -nlE '/^\s*(NFT\w+)/ && say "$1 = C.$1"' /usr/include/linux/netfilter/nf_tables.h ++const ( ++ NFT_REG_VERDICT = C.NFT_REG_VERDICT ++ NFT_REG_1 = C.NFT_REG_1 ++ NFT_REG_2 = C.NFT_REG_2 ++ NFT_REG_3 = C.NFT_REG_3 ++ NFT_REG_4 = C.NFT_REG_4 ++ NFT_REG32_00 = C.NFT_REG32_00 ++ NFT_REG32_01 = C.NFT_REG32_01 ++ NFT_REG32_02 = C.NFT_REG32_02 ++ NFT_REG32_03 = C.NFT_REG32_03 ++ NFT_REG32_04 = C.NFT_REG32_04 ++ NFT_REG32_05 = C.NFT_REG32_05 ++ NFT_REG32_06 = C.NFT_REG32_06 ++ NFT_REG32_07 = C.NFT_REG32_07 ++ NFT_REG32_08 = C.NFT_REG32_08 ++ NFT_REG32_09 = C.NFT_REG32_09 ++ NFT_REG32_10 = C.NFT_REG32_10 ++ NFT_REG32_11 = C.NFT_REG32_11 ++ NFT_REG32_12 = C.NFT_REG32_12 ++ NFT_REG32_13 = C.NFT_REG32_13 ++ NFT_REG32_14 = C.NFT_REG32_14 ++ NFT_REG32_15 = C.NFT_REG32_15 ++ NFT_CONTINUE = C.NFT_CONTINUE ++ NFT_BREAK = C.NFT_BREAK ++ NFT_JUMP = C.NFT_JUMP ++ NFT_GOTO = C.NFT_GOTO ++ NFT_RETURN = C.NFT_RETURN ++ NFT_MSG_NEWTABLE = C.NFT_MSG_NEWTABLE ++ NFT_MSG_GETTABLE = C.NFT_MSG_GETTABLE ++ NFT_MSG_DELTABLE = C.NFT_MSG_DELTABLE ++ NFT_MSG_NEWCHAIN = C.NFT_MSG_NEWCHAIN ++ NFT_MSG_GETCHAIN = C.NFT_MSG_GETCHAIN ++ NFT_MSG_DELCHAIN = C.NFT_MSG_DELCHAIN ++ NFT_MSG_NEWRULE = C.NFT_MSG_NEWRULE ++ NFT_MSG_GETRULE = C.NFT_MSG_GETRULE ++ NFT_MSG_DELRULE = C.NFT_MSG_DELRULE ++ NFT_MSG_NEWSET = C.NFT_MSG_NEWSET ++ NFT_MSG_GETSET = C.NFT_MSG_GETSET ++ NFT_MSG_DELSET = C.NFT_MSG_DELSET ++ NFT_MSG_NEWSETELEM = C.NFT_MSG_NEWSETELEM ++ NFT_MSG_GETSETELEM = C.NFT_MSG_GETSETELEM ++ NFT_MSG_DELSETELEM = C.NFT_MSG_DELSETELEM ++ NFT_MSG_NEWGEN = C.NFT_MSG_NEWGEN ++ NFT_MSG_GETGEN = C.NFT_MSG_GETGEN ++ NFT_MSG_TRACE = C.NFT_MSG_TRACE ++ NFT_MSG_NEWOBJ = C.NFT_MSG_NEWOBJ ++ NFT_MSG_GETOBJ = C.NFT_MSG_GETOBJ ++ NFT_MSG_DELOBJ = C.NFT_MSG_DELOBJ ++ NFT_MSG_GETOBJ_RESET = C.NFT_MSG_GETOBJ_RESET ++ NFT_MSG_MAX = C.NFT_MSG_MAX ++ NFTA_LIST_UNPEC = C.NFTA_LIST_UNPEC ++ NFTA_LIST_ELEM = C.NFTA_LIST_ELEM ++ NFTA_HOOK_UNSPEC = C.NFTA_HOOK_UNSPEC ++ NFTA_HOOK_HOOKNUM = C.NFTA_HOOK_HOOKNUM ++ NFTA_HOOK_PRIORITY = C.NFTA_HOOK_PRIORITY ++ NFTA_HOOK_DEV = C.NFTA_HOOK_DEV ++ NFT_TABLE_F_DORMANT = C.NFT_TABLE_F_DORMANT ++ NFTA_TABLE_UNSPEC = C.NFTA_TABLE_UNSPEC ++ NFTA_TABLE_NAME = C.NFTA_TABLE_NAME ++ NFTA_TABLE_FLAGS = C.NFTA_TABLE_FLAGS ++ NFTA_TABLE_USE = C.NFTA_TABLE_USE ++ NFTA_CHAIN_UNSPEC = C.NFTA_CHAIN_UNSPEC ++ NFTA_CHAIN_TABLE = C.NFTA_CHAIN_TABLE ++ NFTA_CHAIN_HANDLE = C.NFTA_CHAIN_HANDLE ++ NFTA_CHAIN_NAME = C.NFTA_CHAIN_NAME ++ NFTA_CHAIN_HOOK = C.NFTA_CHAIN_HOOK ++ NFTA_CHAIN_POLICY = C.NFTA_CHAIN_POLICY ++ NFTA_CHAIN_USE = C.NFTA_CHAIN_USE ++ NFTA_CHAIN_TYPE = C.NFTA_CHAIN_TYPE ++ NFTA_CHAIN_COUNTERS = C.NFTA_CHAIN_COUNTERS ++ NFTA_CHAIN_PAD = C.NFTA_CHAIN_PAD ++ NFTA_RULE_UNSPEC = C.NFTA_RULE_UNSPEC ++ NFTA_RULE_TABLE = C.NFTA_RULE_TABLE ++ NFTA_RULE_CHAIN = C.NFTA_RULE_CHAIN ++ NFTA_RULE_HANDLE = C.NFTA_RULE_HANDLE ++ NFTA_RULE_EXPRESSIONS = C.NFTA_RULE_EXPRESSIONS ++ NFTA_RULE_COMPAT = C.NFTA_RULE_COMPAT ++ NFTA_RULE_POSITION = C.NFTA_RULE_POSITION ++ NFTA_RULE_USERDATA = C.NFTA_RULE_USERDATA ++ NFTA_RULE_PAD = C.NFTA_RULE_PAD ++ NFTA_RULE_ID = C.NFTA_RULE_ID ++ NFT_RULE_COMPAT_F_INV = C.NFT_RULE_COMPAT_F_INV ++ NFT_RULE_COMPAT_F_MASK = C.NFT_RULE_COMPAT_F_MASK ++ NFTA_RULE_COMPAT_UNSPEC = C.NFTA_RULE_COMPAT_UNSPEC ++ NFTA_RULE_COMPAT_PROTO = C.NFTA_RULE_COMPAT_PROTO ++ NFTA_RULE_COMPAT_FLAGS = C.NFTA_RULE_COMPAT_FLAGS ++ NFT_SET_ANONYMOUS = C.NFT_SET_ANONYMOUS ++ NFT_SET_CONSTANT = C.NFT_SET_CONSTANT ++ NFT_SET_INTERVAL = C.NFT_SET_INTERVAL ++ NFT_SET_MAP = C.NFT_SET_MAP ++ NFT_SET_TIMEOUT = C.NFT_SET_TIMEOUT ++ NFT_SET_EVAL = C.NFT_SET_EVAL ++ NFT_SET_OBJECT = C.NFT_SET_OBJECT ++ NFT_SET_POL_PERFORMANCE = C.NFT_SET_POL_PERFORMANCE ++ NFT_SET_POL_MEMORY = C.NFT_SET_POL_MEMORY ++ NFTA_SET_DESC_UNSPEC = C.NFTA_SET_DESC_UNSPEC ++ NFTA_SET_DESC_SIZE = C.NFTA_SET_DESC_SIZE ++ NFTA_SET_UNSPEC = C.NFTA_SET_UNSPEC ++ NFTA_SET_TABLE = C.NFTA_SET_TABLE ++ NFTA_SET_NAME = C.NFTA_SET_NAME ++ NFTA_SET_FLAGS = C.NFTA_SET_FLAGS ++ NFTA_SET_KEY_TYPE = C.NFTA_SET_KEY_TYPE ++ NFTA_SET_KEY_LEN = C.NFTA_SET_KEY_LEN ++ NFTA_SET_DATA_TYPE = C.NFTA_SET_DATA_TYPE ++ NFTA_SET_DATA_LEN = C.NFTA_SET_DATA_LEN ++ NFTA_SET_POLICY = C.NFTA_SET_POLICY ++ NFTA_SET_DESC = C.NFTA_SET_DESC ++ NFTA_SET_ID = C.NFTA_SET_ID ++ NFTA_SET_TIMEOUT = C.NFTA_SET_TIMEOUT ++ NFTA_SET_GC_INTERVAL = C.NFTA_SET_GC_INTERVAL ++ NFTA_SET_USERDATA = C.NFTA_SET_USERDATA ++ NFTA_SET_PAD = C.NFTA_SET_PAD ++ NFTA_SET_OBJ_TYPE = C.NFTA_SET_OBJ_TYPE ++ NFT_SET_ELEM_INTERVAL_END = C.NFT_SET_ELEM_INTERVAL_END ++ NFTA_SET_ELEM_UNSPEC = C.NFTA_SET_ELEM_UNSPEC ++ NFTA_SET_ELEM_KEY = C.NFTA_SET_ELEM_KEY ++ NFTA_SET_ELEM_DATA = C.NFTA_SET_ELEM_DATA ++ NFTA_SET_ELEM_FLAGS = C.NFTA_SET_ELEM_FLAGS ++ NFTA_SET_ELEM_TIMEOUT = C.NFTA_SET_ELEM_TIMEOUT ++ NFTA_SET_ELEM_EXPIRATION = C.NFTA_SET_ELEM_EXPIRATION ++ NFTA_SET_ELEM_USERDATA = C.NFTA_SET_ELEM_USERDATA ++ NFTA_SET_ELEM_EXPR = C.NFTA_SET_ELEM_EXPR ++ NFTA_SET_ELEM_PAD = C.NFTA_SET_ELEM_PAD ++ NFTA_SET_ELEM_OBJREF = C.NFTA_SET_ELEM_OBJREF ++ NFTA_SET_ELEM_LIST_UNSPEC = C.NFTA_SET_ELEM_LIST_UNSPEC ++ NFTA_SET_ELEM_LIST_TABLE = C.NFTA_SET_ELEM_LIST_TABLE ++ NFTA_SET_ELEM_LIST_SET = C.NFTA_SET_ELEM_LIST_SET ++ NFTA_SET_ELEM_LIST_ELEMENTS = C.NFTA_SET_ELEM_LIST_ELEMENTS ++ NFTA_SET_ELEM_LIST_SET_ID = C.NFTA_SET_ELEM_LIST_SET_ID ++ NFT_DATA_VALUE = C.NFT_DATA_VALUE ++ NFT_DATA_VERDICT = C.NFT_DATA_VERDICT ++ NFTA_DATA_UNSPEC = C.NFTA_DATA_UNSPEC ++ NFTA_DATA_VALUE = C.NFTA_DATA_VALUE ++ NFTA_DATA_VERDICT = C.NFTA_DATA_VERDICT ++ NFTA_VERDICT_UNSPEC = C.NFTA_VERDICT_UNSPEC ++ NFTA_VERDICT_CODE = C.NFTA_VERDICT_CODE ++ NFTA_VERDICT_CHAIN = C.NFTA_VERDICT_CHAIN ++ NFTA_EXPR_UNSPEC = C.NFTA_EXPR_UNSPEC ++ NFTA_EXPR_NAME = C.NFTA_EXPR_NAME ++ NFTA_EXPR_DATA = C.NFTA_EXPR_DATA ++ NFTA_IMMEDIATE_UNSPEC = C.NFTA_IMMEDIATE_UNSPEC ++ NFTA_IMMEDIATE_DREG = C.NFTA_IMMEDIATE_DREG ++ NFTA_IMMEDIATE_DATA = C.NFTA_IMMEDIATE_DATA ++ NFTA_BITWISE_UNSPEC = C.NFTA_BITWISE_UNSPEC ++ NFTA_BITWISE_SREG = C.NFTA_BITWISE_SREG ++ NFTA_BITWISE_DREG = C.NFTA_BITWISE_DREG ++ NFTA_BITWISE_LEN = C.NFTA_BITWISE_LEN ++ NFTA_BITWISE_MASK = C.NFTA_BITWISE_MASK ++ NFTA_BITWISE_XOR = C.NFTA_BITWISE_XOR ++ NFT_BYTEORDER_NTOH = C.NFT_BYTEORDER_NTOH ++ NFT_BYTEORDER_HTON = C.NFT_BYTEORDER_HTON ++ NFTA_BYTEORDER_UNSPEC = C.NFTA_BYTEORDER_UNSPEC ++ NFTA_BYTEORDER_SREG = C.NFTA_BYTEORDER_SREG ++ NFTA_BYTEORDER_DREG = C.NFTA_BYTEORDER_DREG ++ NFTA_BYTEORDER_OP = C.NFTA_BYTEORDER_OP ++ NFTA_BYTEORDER_LEN = C.NFTA_BYTEORDER_LEN ++ NFTA_BYTEORDER_SIZE = C.NFTA_BYTEORDER_SIZE ++ NFT_CMP_EQ = C.NFT_CMP_EQ ++ NFT_CMP_NEQ = C.NFT_CMP_NEQ ++ NFT_CMP_LT = C.NFT_CMP_LT ++ NFT_CMP_LTE = C.NFT_CMP_LTE ++ NFT_CMP_GT = C.NFT_CMP_GT ++ NFT_CMP_GTE = C.NFT_CMP_GTE ++ NFTA_CMP_UNSPEC = C.NFTA_CMP_UNSPEC ++ NFTA_CMP_SREG = C.NFTA_CMP_SREG ++ NFTA_CMP_OP = C.NFTA_CMP_OP ++ NFTA_CMP_DATA = C.NFTA_CMP_DATA ++ NFT_RANGE_EQ = C.NFT_RANGE_EQ ++ NFT_RANGE_NEQ = C.NFT_RANGE_NEQ ++ NFTA_RANGE_UNSPEC = C.NFTA_RANGE_UNSPEC ++ NFTA_RANGE_SREG = C.NFTA_RANGE_SREG ++ NFTA_RANGE_OP = C.NFTA_RANGE_OP ++ NFTA_RANGE_FROM_DATA = C.NFTA_RANGE_FROM_DATA ++ NFTA_RANGE_TO_DATA = C.NFTA_RANGE_TO_DATA ++ NFT_LOOKUP_F_INV = C.NFT_LOOKUP_F_INV ++ NFTA_LOOKUP_UNSPEC = C.NFTA_LOOKUP_UNSPEC ++ NFTA_LOOKUP_SET = C.NFTA_LOOKUP_SET ++ NFTA_LOOKUP_SREG = C.NFTA_LOOKUP_SREG ++ NFTA_LOOKUP_DREG = C.NFTA_LOOKUP_DREG ++ NFTA_LOOKUP_SET_ID = C.NFTA_LOOKUP_SET_ID ++ NFTA_LOOKUP_FLAGS = C.NFTA_LOOKUP_FLAGS ++ NFT_DYNSET_OP_ADD = C.NFT_DYNSET_OP_ADD ++ NFT_DYNSET_OP_UPDATE = C.NFT_DYNSET_OP_UPDATE ++ NFT_DYNSET_F_INV = C.NFT_DYNSET_F_INV ++ NFTA_DYNSET_UNSPEC = C.NFTA_DYNSET_UNSPEC ++ NFTA_DYNSET_SET_NAME = C.NFTA_DYNSET_SET_NAME ++ NFTA_DYNSET_SET_ID = C.NFTA_DYNSET_SET_ID ++ NFTA_DYNSET_OP = C.NFTA_DYNSET_OP ++ NFTA_DYNSET_SREG_KEY = C.NFTA_DYNSET_SREG_KEY ++ NFTA_DYNSET_SREG_DATA = C.NFTA_DYNSET_SREG_DATA ++ NFTA_DYNSET_TIMEOUT = C.NFTA_DYNSET_TIMEOUT ++ NFTA_DYNSET_EXPR = C.NFTA_DYNSET_EXPR ++ NFTA_DYNSET_PAD = C.NFTA_DYNSET_PAD ++ NFTA_DYNSET_FLAGS = C.NFTA_DYNSET_FLAGS ++ NFT_PAYLOAD_LL_HEADER = C.NFT_PAYLOAD_LL_HEADER ++ NFT_PAYLOAD_NETWORK_HEADER = C.NFT_PAYLOAD_NETWORK_HEADER ++ NFT_PAYLOAD_TRANSPORT_HEADER = C.NFT_PAYLOAD_TRANSPORT_HEADER ++ NFT_PAYLOAD_CSUM_NONE = C.NFT_PAYLOAD_CSUM_NONE ++ NFT_PAYLOAD_CSUM_INET = C.NFT_PAYLOAD_CSUM_INET ++ NFT_PAYLOAD_L4CSUM_PSEUDOHDR = C.NFT_PAYLOAD_L4CSUM_PSEUDOHDR ++ NFTA_PAYLOAD_UNSPEC = C.NFTA_PAYLOAD_UNSPEC ++ NFTA_PAYLOAD_DREG = C.NFTA_PAYLOAD_DREG ++ NFTA_PAYLOAD_BASE = C.NFTA_PAYLOAD_BASE ++ NFTA_PAYLOAD_OFFSET = C.NFTA_PAYLOAD_OFFSET ++ NFTA_PAYLOAD_LEN = C.NFTA_PAYLOAD_LEN ++ NFTA_PAYLOAD_SREG = C.NFTA_PAYLOAD_SREG ++ NFTA_PAYLOAD_CSUM_TYPE = C.NFTA_PAYLOAD_CSUM_TYPE ++ NFTA_PAYLOAD_CSUM_OFFSET = C.NFTA_PAYLOAD_CSUM_OFFSET ++ NFTA_PAYLOAD_CSUM_FLAGS = C.NFTA_PAYLOAD_CSUM_FLAGS ++ NFT_EXTHDR_F_PRESENT = C.NFT_EXTHDR_F_PRESENT ++ NFT_EXTHDR_OP_IPV6 = C.NFT_EXTHDR_OP_IPV6 ++ NFT_EXTHDR_OP_TCPOPT = C.NFT_EXTHDR_OP_TCPOPT ++ NFTA_EXTHDR_UNSPEC = C.NFTA_EXTHDR_UNSPEC ++ NFTA_EXTHDR_DREG = C.NFTA_EXTHDR_DREG ++ NFTA_EXTHDR_TYPE = C.NFTA_EXTHDR_TYPE ++ NFTA_EXTHDR_OFFSET = C.NFTA_EXTHDR_OFFSET ++ NFTA_EXTHDR_LEN = C.NFTA_EXTHDR_LEN ++ NFTA_EXTHDR_FLAGS = C.NFTA_EXTHDR_FLAGS ++ NFTA_EXTHDR_OP = C.NFTA_EXTHDR_OP ++ NFTA_EXTHDR_SREG = C.NFTA_EXTHDR_SREG ++ NFT_META_LEN = C.NFT_META_LEN ++ NFT_META_PROTOCOL = C.NFT_META_PROTOCOL ++ NFT_META_PRIORITY = C.NFT_META_PRIORITY ++ NFT_META_MARK = C.NFT_META_MARK ++ NFT_META_IIF = C.NFT_META_IIF ++ NFT_META_OIF = C.NFT_META_OIF ++ NFT_META_IIFNAME = C.NFT_META_IIFNAME ++ NFT_META_OIFNAME = C.NFT_META_OIFNAME ++ NFT_META_IIFTYPE = C.NFT_META_IIFTYPE ++ NFT_META_OIFTYPE = C.NFT_META_OIFTYPE ++ NFT_META_SKUID = C.NFT_META_SKUID ++ NFT_META_SKGID = C.NFT_META_SKGID ++ NFT_META_NFTRACE = C.NFT_META_NFTRACE ++ NFT_META_RTCLASSID = C.NFT_META_RTCLASSID ++ NFT_META_SECMARK = C.NFT_META_SECMARK ++ NFT_META_NFPROTO = C.NFT_META_NFPROTO ++ NFT_META_L4PROTO = C.NFT_META_L4PROTO ++ NFT_META_BRI_IIFNAME = C.NFT_META_BRI_IIFNAME ++ NFT_META_BRI_OIFNAME = C.NFT_META_BRI_OIFNAME ++ NFT_META_PKTTYPE = C.NFT_META_PKTTYPE ++ NFT_META_CPU = C.NFT_META_CPU ++ NFT_META_IIFGROUP = C.NFT_META_IIFGROUP ++ NFT_META_OIFGROUP = C.NFT_META_OIFGROUP ++ NFT_META_CGROUP = C.NFT_META_CGROUP ++ NFT_META_PRANDOM = C.NFT_META_PRANDOM ++ NFT_RT_CLASSID = C.NFT_RT_CLASSID ++ NFT_RT_NEXTHOP4 = C.NFT_RT_NEXTHOP4 ++ NFT_RT_NEXTHOP6 = C.NFT_RT_NEXTHOP6 ++ NFT_RT_TCPMSS = C.NFT_RT_TCPMSS ++ NFT_HASH_JENKINS = C.NFT_HASH_JENKINS ++ NFT_HASH_SYM = C.NFT_HASH_SYM ++ NFTA_HASH_UNSPEC = C.NFTA_HASH_UNSPEC ++ NFTA_HASH_SREG = C.NFTA_HASH_SREG ++ NFTA_HASH_DREG = C.NFTA_HASH_DREG ++ NFTA_HASH_LEN = C.NFTA_HASH_LEN ++ NFTA_HASH_MODULUS = C.NFTA_HASH_MODULUS ++ NFTA_HASH_SEED = C.NFTA_HASH_SEED ++ NFTA_HASH_OFFSET = C.NFTA_HASH_OFFSET ++ NFTA_HASH_TYPE = C.NFTA_HASH_TYPE ++ NFTA_META_UNSPEC = C.NFTA_META_UNSPEC ++ NFTA_META_DREG = C.NFTA_META_DREG ++ NFTA_META_KEY = C.NFTA_META_KEY ++ NFTA_META_SREG = C.NFTA_META_SREG ++ NFTA_RT_UNSPEC = C.NFTA_RT_UNSPEC ++ NFTA_RT_DREG = C.NFTA_RT_DREG ++ NFTA_RT_KEY = C.NFTA_RT_KEY ++ NFT_CT_STATE = C.NFT_CT_STATE ++ NFT_CT_DIRECTION = C.NFT_CT_DIRECTION ++ NFT_CT_STATUS = C.NFT_CT_STATUS ++ NFT_CT_MARK = C.NFT_CT_MARK ++ NFT_CT_SECMARK = C.NFT_CT_SECMARK ++ NFT_CT_EXPIRATION = C.NFT_CT_EXPIRATION ++ NFT_CT_HELPER = C.NFT_CT_HELPER ++ NFT_CT_L3PROTOCOL = C.NFT_CT_L3PROTOCOL ++ NFT_CT_SRC = C.NFT_CT_SRC ++ NFT_CT_DST = C.NFT_CT_DST ++ NFT_CT_PROTOCOL = C.NFT_CT_PROTOCOL ++ NFT_CT_PROTO_SRC = C.NFT_CT_PROTO_SRC ++ NFT_CT_PROTO_DST = C.NFT_CT_PROTO_DST ++ NFT_CT_LABELS = C.NFT_CT_LABELS ++ NFT_CT_PKTS = C.NFT_CT_PKTS ++ NFT_CT_BYTES = C.NFT_CT_BYTES ++ NFT_CT_AVGPKT = C.NFT_CT_AVGPKT ++ NFT_CT_ZONE = C.NFT_CT_ZONE ++ NFT_CT_EVENTMASK = C.NFT_CT_EVENTMASK ++ NFTA_CT_UNSPEC = C.NFTA_CT_UNSPEC ++ NFTA_CT_DREG = C.NFTA_CT_DREG ++ NFTA_CT_KEY = C.NFTA_CT_KEY ++ NFTA_CT_DIRECTION = C.NFTA_CT_DIRECTION ++ NFTA_CT_SREG = C.NFTA_CT_SREG ++ NFT_LIMIT_PKTS = C.NFT_LIMIT_PKTS ++ NFT_LIMIT_PKT_BYTES = C.NFT_LIMIT_PKT_BYTES ++ NFT_LIMIT_F_INV = C.NFT_LIMIT_F_INV ++ NFTA_LIMIT_UNSPEC = C.NFTA_LIMIT_UNSPEC ++ NFTA_LIMIT_RATE = C.NFTA_LIMIT_RATE ++ NFTA_LIMIT_UNIT = C.NFTA_LIMIT_UNIT ++ NFTA_LIMIT_BURST = C.NFTA_LIMIT_BURST ++ NFTA_LIMIT_TYPE = C.NFTA_LIMIT_TYPE ++ NFTA_LIMIT_FLAGS = C.NFTA_LIMIT_FLAGS ++ NFTA_LIMIT_PAD = C.NFTA_LIMIT_PAD ++ NFTA_COUNTER_UNSPEC = C.NFTA_COUNTER_UNSPEC ++ NFTA_COUNTER_BYTES = C.NFTA_COUNTER_BYTES ++ NFTA_COUNTER_PACKETS = C.NFTA_COUNTER_PACKETS ++ NFTA_COUNTER_PAD = C.NFTA_COUNTER_PAD ++ NFTA_LOG_UNSPEC = C.NFTA_LOG_UNSPEC ++ NFTA_LOG_GROUP = C.NFTA_LOG_GROUP ++ NFTA_LOG_PREFIX = C.NFTA_LOG_PREFIX ++ NFTA_LOG_SNAPLEN = C.NFTA_LOG_SNAPLEN ++ NFTA_LOG_QTHRESHOLD = C.NFTA_LOG_QTHRESHOLD ++ NFTA_LOG_LEVEL = C.NFTA_LOG_LEVEL ++ NFTA_LOG_FLAGS = C.NFTA_LOG_FLAGS ++ NFTA_QUEUE_UNSPEC = C.NFTA_QUEUE_UNSPEC ++ NFTA_QUEUE_NUM = C.NFTA_QUEUE_NUM ++ NFTA_QUEUE_TOTAL = C.NFTA_QUEUE_TOTAL ++ NFTA_QUEUE_FLAGS = C.NFTA_QUEUE_FLAGS ++ NFTA_QUEUE_SREG_QNUM = C.NFTA_QUEUE_SREG_QNUM ++ NFT_QUOTA_F_INV = C.NFT_QUOTA_F_INV ++ NFT_QUOTA_F_DEPLETED = C.NFT_QUOTA_F_DEPLETED ++ NFTA_QUOTA_UNSPEC = C.NFTA_QUOTA_UNSPEC ++ NFTA_QUOTA_BYTES = C.NFTA_QUOTA_BYTES ++ NFTA_QUOTA_FLAGS = C.NFTA_QUOTA_FLAGS ++ NFTA_QUOTA_PAD = C.NFTA_QUOTA_PAD ++ NFTA_QUOTA_CONSUMED = C.NFTA_QUOTA_CONSUMED ++ NFT_REJECT_ICMP_UNREACH = C.NFT_REJECT_ICMP_UNREACH ++ NFT_REJECT_TCP_RST = C.NFT_REJECT_TCP_RST ++ NFT_REJECT_ICMPX_UNREACH = C.NFT_REJECT_ICMPX_UNREACH ++ NFT_REJECT_ICMPX_NO_ROUTE = C.NFT_REJECT_ICMPX_NO_ROUTE ++ NFT_REJECT_ICMPX_PORT_UNREACH = C.NFT_REJECT_ICMPX_PORT_UNREACH ++ NFT_REJECT_ICMPX_HOST_UNREACH = C.NFT_REJECT_ICMPX_HOST_UNREACH ++ NFT_REJECT_ICMPX_ADMIN_PROHIBITED = C.NFT_REJECT_ICMPX_ADMIN_PROHIBITED ++ NFTA_REJECT_UNSPEC = C.NFTA_REJECT_UNSPEC ++ NFTA_REJECT_TYPE = C.NFTA_REJECT_TYPE ++ NFTA_REJECT_ICMP_CODE = C.NFTA_REJECT_ICMP_CODE ++ NFT_NAT_SNAT = C.NFT_NAT_SNAT ++ NFT_NAT_DNAT = C.NFT_NAT_DNAT ++ NFTA_NAT_UNSPEC = C.NFTA_NAT_UNSPEC ++ NFTA_NAT_TYPE = C.NFTA_NAT_TYPE ++ NFTA_NAT_FAMILY = C.NFTA_NAT_FAMILY ++ NFTA_NAT_REG_ADDR_MIN = C.NFTA_NAT_REG_ADDR_MIN ++ NFTA_NAT_REG_ADDR_MAX = C.NFTA_NAT_REG_ADDR_MAX ++ NFTA_NAT_REG_PROTO_MIN = C.NFTA_NAT_REG_PROTO_MIN ++ NFTA_NAT_REG_PROTO_MAX = C.NFTA_NAT_REG_PROTO_MAX ++ NFTA_NAT_FLAGS = C.NFTA_NAT_FLAGS ++ NFTA_MASQ_UNSPEC = C.NFTA_MASQ_UNSPEC ++ NFTA_MASQ_FLAGS = C.NFTA_MASQ_FLAGS ++ NFTA_MASQ_REG_PROTO_MIN = C.NFTA_MASQ_REG_PROTO_MIN ++ NFTA_MASQ_REG_PROTO_MAX = C.NFTA_MASQ_REG_PROTO_MAX ++ NFTA_REDIR_UNSPEC = C.NFTA_REDIR_UNSPEC ++ NFTA_REDIR_REG_PROTO_MIN = C.NFTA_REDIR_REG_PROTO_MIN ++ NFTA_REDIR_REG_PROTO_MAX = C.NFTA_REDIR_REG_PROTO_MAX ++ NFTA_REDIR_FLAGS = C.NFTA_REDIR_FLAGS ++ NFTA_DUP_UNSPEC = C.NFTA_DUP_UNSPEC ++ NFTA_DUP_SREG_ADDR = C.NFTA_DUP_SREG_ADDR ++ NFTA_DUP_SREG_DEV = C.NFTA_DUP_SREG_DEV ++ NFTA_FWD_UNSPEC = C.NFTA_FWD_UNSPEC ++ NFTA_FWD_SREG_DEV = C.NFTA_FWD_SREG_DEV ++ NFTA_OBJREF_UNSPEC = C.NFTA_OBJREF_UNSPEC ++ NFTA_OBJREF_IMM_TYPE = C.NFTA_OBJREF_IMM_TYPE ++ NFTA_OBJREF_IMM_NAME = C.NFTA_OBJREF_IMM_NAME ++ NFTA_OBJREF_SET_SREG = C.NFTA_OBJREF_SET_SREG ++ NFTA_OBJREF_SET_NAME = C.NFTA_OBJREF_SET_NAME ++ NFTA_OBJREF_SET_ID = C.NFTA_OBJREF_SET_ID ++ NFTA_GEN_UNSPEC = C.NFTA_GEN_UNSPEC ++ NFTA_GEN_ID = C.NFTA_GEN_ID ++ NFTA_GEN_PROC_PID = C.NFTA_GEN_PROC_PID ++ NFTA_GEN_PROC_NAME = C.NFTA_GEN_PROC_NAME ++ NFTA_FIB_UNSPEC = C.NFTA_FIB_UNSPEC ++ NFTA_FIB_DREG = C.NFTA_FIB_DREG ++ NFTA_FIB_RESULT = C.NFTA_FIB_RESULT ++ NFTA_FIB_FLAGS = C.NFTA_FIB_FLAGS ++ NFT_FIB_RESULT_UNSPEC = C.NFT_FIB_RESULT_UNSPEC ++ NFT_FIB_RESULT_OIF = C.NFT_FIB_RESULT_OIF ++ NFT_FIB_RESULT_OIFNAME = C.NFT_FIB_RESULT_OIFNAME ++ NFT_FIB_RESULT_ADDRTYPE = C.NFT_FIB_RESULT_ADDRTYPE ++ NFTA_FIB_F_SADDR = C.NFTA_FIB_F_SADDR ++ NFTA_FIB_F_DADDR = C.NFTA_FIB_F_DADDR ++ NFTA_FIB_F_MARK = C.NFTA_FIB_F_MARK ++ NFTA_FIB_F_IIF = C.NFTA_FIB_F_IIF ++ NFTA_FIB_F_OIF = C.NFTA_FIB_F_OIF ++ NFTA_FIB_F_PRESENT = C.NFTA_FIB_F_PRESENT ++ NFTA_CT_HELPER_UNSPEC = C.NFTA_CT_HELPER_UNSPEC ++ NFTA_CT_HELPER_NAME = C.NFTA_CT_HELPER_NAME ++ NFTA_CT_HELPER_L3PROTO = C.NFTA_CT_HELPER_L3PROTO ++ NFTA_CT_HELPER_L4PROTO = C.NFTA_CT_HELPER_L4PROTO ++ NFTA_OBJ_UNSPEC = C.NFTA_OBJ_UNSPEC ++ NFTA_OBJ_TABLE = C.NFTA_OBJ_TABLE ++ NFTA_OBJ_NAME = C.NFTA_OBJ_NAME ++ NFTA_OBJ_TYPE = C.NFTA_OBJ_TYPE ++ NFTA_OBJ_DATA = C.NFTA_OBJ_DATA ++ NFTA_OBJ_USE = C.NFTA_OBJ_USE ++ NFTA_TRACE_UNSPEC = C.NFTA_TRACE_UNSPEC ++ NFTA_TRACE_TABLE = C.NFTA_TRACE_TABLE ++ NFTA_TRACE_CHAIN = C.NFTA_TRACE_CHAIN ++ NFTA_TRACE_RULE_HANDLE = C.NFTA_TRACE_RULE_HANDLE ++ NFTA_TRACE_TYPE = C.NFTA_TRACE_TYPE ++ NFTA_TRACE_VERDICT = C.NFTA_TRACE_VERDICT ++ NFTA_TRACE_ID = C.NFTA_TRACE_ID ++ NFTA_TRACE_LL_HEADER = C.NFTA_TRACE_LL_HEADER ++ NFTA_TRACE_NETWORK_HEADER = C.NFTA_TRACE_NETWORK_HEADER ++ NFTA_TRACE_TRANSPORT_HEADER = C.NFTA_TRACE_TRANSPORT_HEADER ++ NFTA_TRACE_IIF = C.NFTA_TRACE_IIF ++ NFTA_TRACE_IIFTYPE = C.NFTA_TRACE_IIFTYPE ++ NFTA_TRACE_OIF = C.NFTA_TRACE_OIF ++ NFTA_TRACE_OIFTYPE = C.NFTA_TRACE_OIFTYPE ++ NFTA_TRACE_MARK = C.NFTA_TRACE_MARK ++ NFTA_TRACE_NFPROTO = C.NFTA_TRACE_NFPROTO ++ NFTA_TRACE_POLICY = C.NFTA_TRACE_POLICY ++ NFTA_TRACE_PAD = C.NFTA_TRACE_PAD ++ NFT_TRACETYPE_UNSPEC = C.NFT_TRACETYPE_UNSPEC ++ NFT_TRACETYPE_POLICY = C.NFT_TRACETYPE_POLICY ++ NFT_TRACETYPE_RETURN = C.NFT_TRACETYPE_RETURN ++ NFT_TRACETYPE_RULE = C.NFT_TRACETYPE_RULE ++ NFTA_NG_UNSPEC = C.NFTA_NG_UNSPEC ++ NFTA_NG_DREG = C.NFTA_NG_DREG ++ NFTA_NG_MODULUS = C.NFTA_NG_MODULUS ++ NFTA_NG_TYPE = C.NFTA_NG_TYPE ++ NFTA_NG_OFFSET = C.NFTA_NG_OFFSET ++ NFT_NG_INCREMENTAL = C.NFT_NG_INCREMENTAL ++ NFT_NG_RANDOM = C.NFT_NG_RANDOM ++) ++ ++type RTCTime C.struct_rtc_time ++ ++type RTCWkAlrm C.struct_rtc_wkalrm ++ ++type RTCPLLInfo C.struct_rtc_pll_info ++ ++// BLKPG ioctl: ++ ++type BlkpgIoctlArg C.struct_blkpg_ioctl_arg ++ ++type BlkpgPartition C.struct_my_blkpg_partition ++ ++const ( ++ BLKPG = C.BLKPG ++ BLKPG_ADD_PARTITION = C.BLKPG_ADD_PARTITION ++ BLKPG_DEL_PARTITION = C.BLKPG_DEL_PARTITION ++ BLKPG_RESIZE_PARTITION = C.BLKPG_RESIZE_PARTITION ++) ++ ++// netlink namespace ++// generated from ++// perl -nlE '/^\s*(NETNSA\w+)/ && say "$1 = C.$1"' /usr/include/linux/net_namespace.h ++const ( ++ NETNSA_NONE = C.NETNSA_NONE ++ NETNSA_NSID = C.NETNSA_NSID ++ NETNSA_PID = C.NETNSA_PID ++ NETNSA_FD = C.NETNSA_FD ++) ++ ++// AF_XDP: ++ ++type XDPRingOffset C.struct_xdp_ring_offset ++ ++type XDPMmapOffsets C.struct_xdp_mmap_offsets ++ ++type XDPUmemReg C.struct_xdp_umem_reg ++ ++type XDPStatistics C.struct_xdp_statistics ++ ++type XDPDesc C.struct_xdp_desc ++ ++// NCSI generic netlink: ++ ++const ( ++ NCSI_CMD_UNSPEC = C.NCSI_CMD_UNSPEC ++ NCSI_CMD_PKG_INFO = C.NCSI_CMD_PKG_INFO ++ NCSI_CMD_SET_INTERFACE = C.NCSI_CMD_SET_INTERFACE ++ NCSI_CMD_CLEAR_INTERFACE = C.NCSI_CMD_CLEAR_INTERFACE ++ NCSI_ATTR_UNSPEC = C.NCSI_ATTR_UNSPEC ++ NCSI_ATTR_IFINDEX = C.NCSI_ATTR_IFINDEX ++ NCSI_ATTR_PACKAGE_LIST = C.NCSI_ATTR_PACKAGE_LIST ++ NCSI_ATTR_PACKAGE_ID = C.NCSI_ATTR_PACKAGE_ID ++ NCSI_ATTR_CHANNEL_ID = C.NCSI_ATTR_CHANNEL_ID ++ NCSI_PKG_ATTR_UNSPEC = C.NCSI_PKG_ATTR_UNSPEC ++ NCSI_PKG_ATTR = C.NCSI_PKG_ATTR ++ NCSI_PKG_ATTR_ID = C.NCSI_PKG_ATTR_ID ++ NCSI_PKG_ATTR_FORCED = C.NCSI_PKG_ATTR_FORCED ++ NCSI_PKG_ATTR_CHANNEL_LIST = C.NCSI_PKG_ATTR_CHANNEL_LIST ++ NCSI_CHANNEL_ATTR_UNSPEC = C.NCSI_CHANNEL_ATTR_UNSPEC ++ NCSI_CHANNEL_ATTR = C.NCSI_CHANNEL_ATTR ++ NCSI_CHANNEL_ATTR_ID = C.NCSI_CHANNEL_ATTR_ID ++ NCSI_CHANNEL_ATTR_VERSION_MAJOR = C.NCSI_CHANNEL_ATTR_VERSION_MAJOR ++ NCSI_CHANNEL_ATTR_VERSION_MINOR = C.NCSI_CHANNEL_ATTR_VERSION_MINOR ++ NCSI_CHANNEL_ATTR_VERSION_STR = C.NCSI_CHANNEL_ATTR_VERSION_STR ++ NCSI_CHANNEL_ATTR_LINK_STATE = C.NCSI_CHANNEL_ATTR_LINK_STATE ++ NCSI_CHANNEL_ATTR_ACTIVE = C.NCSI_CHANNEL_ATTR_ACTIVE ++ NCSI_CHANNEL_ATTR_FORCED = C.NCSI_CHANNEL_ATTR_FORCED ++ NCSI_CHANNEL_ATTR_VLAN_LIST = C.NCSI_CHANNEL_ATTR_VLAN_LIST ++ NCSI_CHANNEL_ATTR_VLAN_ID = C.NCSI_CHANNEL_ATTR_VLAN_ID ++) ++ ++// Timestamping ++ ++type ScmTimestamping C.struct_scm_timestamping ++ ++const ( ++ SOF_TIMESTAMPING_TX_HARDWARE = C.SOF_TIMESTAMPING_TX_HARDWARE ++ SOF_TIMESTAMPING_TX_SOFTWARE = C.SOF_TIMESTAMPING_TX_SOFTWARE ++ SOF_TIMESTAMPING_RX_HARDWARE = C.SOF_TIMESTAMPING_RX_HARDWARE ++ SOF_TIMESTAMPING_RX_SOFTWARE = C.SOF_TIMESTAMPING_RX_SOFTWARE ++ SOF_TIMESTAMPING_SOFTWARE = C.SOF_TIMESTAMPING_SOFTWARE ++ SOF_TIMESTAMPING_SYS_HARDWARE = C.SOF_TIMESTAMPING_SYS_HARDWARE ++ SOF_TIMESTAMPING_RAW_HARDWARE = C.SOF_TIMESTAMPING_RAW_HARDWARE ++ SOF_TIMESTAMPING_OPT_ID = C.SOF_TIMESTAMPING_OPT_ID ++ SOF_TIMESTAMPING_TX_SCHED = C.SOF_TIMESTAMPING_TX_SCHED ++ SOF_TIMESTAMPING_TX_ACK = C.SOF_TIMESTAMPING_TX_ACK ++ SOF_TIMESTAMPING_OPT_CMSG = C.SOF_TIMESTAMPING_OPT_CMSG ++ SOF_TIMESTAMPING_OPT_TSONLY = C.SOF_TIMESTAMPING_OPT_TSONLY ++ SOF_TIMESTAMPING_OPT_STATS = C.SOF_TIMESTAMPING_OPT_STATS ++ SOF_TIMESTAMPING_OPT_PKTINFO = C.SOF_TIMESTAMPING_OPT_PKTINFO ++ SOF_TIMESTAMPING_OPT_TX_SWHW = C.SOF_TIMESTAMPING_OPT_TX_SWHW ++ ++ SOF_TIMESTAMPING_LAST = C.SOF_TIMESTAMPING_LAST ++ SOF_TIMESTAMPING_MASK = C.SOF_TIMESTAMPING_MASK ++ ++ SCM_TSTAMP_SND = C.SCM_TSTAMP_SND ++ SCM_TSTAMP_SCHED = C.SCM_TSTAMP_SCHED ++ SCM_TSTAMP_ACK = C.SCM_TSTAMP_ACK ++) ++ ++// Socket error queue ++ ++type SockExtendedErr C.struct_sock_extended_err ++ ++// Fanotify ++ ++type FanotifyEventMetadata C.struct_fanotify_event_metadata ++ ++type FanotifyResponse C.struct_fanotify_response ++ ++// Crypto user configuration API. ++ ++const ( ++ CRYPTO_MSG_BASE = C.CRYPTO_MSG_BASE ++ CRYPTO_MSG_NEWALG = C.CRYPTO_MSG_NEWALG ++ CRYPTO_MSG_DELALG = C.CRYPTO_MSG_DELALG ++ CRYPTO_MSG_UPDATEALG = C.CRYPTO_MSG_UPDATEALG ++ CRYPTO_MSG_GETALG = C.CRYPTO_MSG_GETALG ++ CRYPTO_MSG_DELRNG = C.CRYPTO_MSG_DELRNG ++ CRYPTO_MSG_GETSTAT = C.CRYPTO_MSG_GETSTAT ++) ++ ++const ( ++ CRYPTOCFGA_UNSPEC = C.CRYPTOCFGA_UNSPEC ++ CRYPTOCFGA_PRIORITY_VAL = C.CRYPTOCFGA_PRIORITY_VAL ++ CRYPTOCFGA_REPORT_LARVAL = C.CRYPTOCFGA_REPORT_LARVAL ++ CRYPTOCFGA_REPORT_HASH = C.CRYPTOCFGA_REPORT_HASH ++ CRYPTOCFGA_REPORT_BLKCIPHER = C.CRYPTOCFGA_REPORT_BLKCIPHER ++ CRYPTOCFGA_REPORT_AEAD = C.CRYPTOCFGA_REPORT_AEAD ++ CRYPTOCFGA_REPORT_COMPRESS = C.CRYPTOCFGA_REPORT_COMPRESS ++ CRYPTOCFGA_REPORT_RNG = C.CRYPTOCFGA_REPORT_RNG ++ CRYPTOCFGA_REPORT_CIPHER = C.CRYPTOCFGA_REPORT_CIPHER ++ CRYPTOCFGA_REPORT_AKCIPHER = C.CRYPTOCFGA_REPORT_AKCIPHER ++ CRYPTOCFGA_REPORT_KPP = C.CRYPTOCFGA_REPORT_KPP ++ CRYPTOCFGA_REPORT_ACOMP = C.CRYPTOCFGA_REPORT_ACOMP ++ CRYPTOCFGA_STAT_LARVAL = C.CRYPTOCFGA_STAT_LARVAL ++ CRYPTOCFGA_STAT_HASH = C.CRYPTOCFGA_STAT_HASH ++ CRYPTOCFGA_STAT_BLKCIPHER = C.CRYPTOCFGA_STAT_BLKCIPHER ++ CRYPTOCFGA_STAT_AEAD = C.CRYPTOCFGA_STAT_AEAD ++ CRYPTOCFGA_STAT_COMPRESS = C.CRYPTOCFGA_STAT_COMPRESS ++ CRYPTOCFGA_STAT_RNG = C.CRYPTOCFGA_STAT_RNG ++ CRYPTOCFGA_STAT_CIPHER = C.CRYPTOCFGA_STAT_CIPHER ++ CRYPTOCFGA_STAT_AKCIPHER = C.CRYPTOCFGA_STAT_AKCIPHER ++ CRYPTOCFGA_STAT_KPP = C.CRYPTOCFGA_STAT_KPP ++ CRYPTOCFGA_STAT_ACOMP = C.CRYPTOCFGA_STAT_ACOMP ++) ++ ++type CryptoUserAlg C.struct_crypto_user_alg ++ ++type CryptoStatAEAD C.struct_crypto_stat_aead ++ ++type CryptoStatAKCipher C.struct_crypto_stat_akcipher ++ ++type CryptoStatCipher C.struct_crypto_stat_cipher ++ ++type CryptoStatCompress C.struct_crypto_stat_compress ++ ++type CryptoStatHash C.struct_crypto_stat_hash ++ ++type CryptoStatKPP C.struct_crypto_stat_kpp ++ ++type CryptoStatRNG C.struct_crypto_stat_rng ++ ++type CryptoStatLarval C.struct_crypto_stat_larval ++ ++type CryptoReportLarval C.struct_crypto_report_larval ++ ++type CryptoReportHash C.struct_crypto_report_hash ++ ++type CryptoReportCipher C.struct_crypto_report_cipher ++ ++type CryptoReportBlkCipher C.struct_crypto_report_blkcipher ++ ++type CryptoReportAEAD C.struct_crypto_report_aead ++ ++type CryptoReportComp C.struct_crypto_report_comp ++ ++type CryptoReportRNG C.struct_crypto_report_rng ++ ++type CryptoReportAKCipher C.struct_crypto_report_akcipher ++ ++type CryptoReportKPP C.struct_crypto_report_kpp ++ ++type CryptoReportAcomp C.struct_crypto_report_acomp ++ ++// generated by: ++// perl -nlE '/^\s*(BPF_\w+)/ && say "$1 = C.$1"' include/uapi/linux/bpf.h ++const ( ++ BPF_REG_0 = C.BPF_REG_0 ++ BPF_REG_1 = C.BPF_REG_1 ++ BPF_REG_2 = C.BPF_REG_2 ++ BPF_REG_3 = C.BPF_REG_3 ++ BPF_REG_4 = C.BPF_REG_4 ++ BPF_REG_5 = C.BPF_REG_5 ++ BPF_REG_6 = C.BPF_REG_6 ++ BPF_REG_7 = C.BPF_REG_7 ++ BPF_REG_8 = C.BPF_REG_8 ++ BPF_REG_9 = C.BPF_REG_9 ++ BPF_REG_10 = C.BPF_REG_10 ++ BPF_MAP_CREATE = C.BPF_MAP_CREATE ++ BPF_MAP_LOOKUP_ELEM = C.BPF_MAP_LOOKUP_ELEM ++ BPF_MAP_UPDATE_ELEM = C.BPF_MAP_UPDATE_ELEM ++ BPF_MAP_DELETE_ELEM = C.BPF_MAP_DELETE_ELEM ++ BPF_MAP_GET_NEXT_KEY = C.BPF_MAP_GET_NEXT_KEY ++ BPF_PROG_LOAD = C.BPF_PROG_LOAD ++ BPF_OBJ_PIN = C.BPF_OBJ_PIN ++ BPF_OBJ_GET = C.BPF_OBJ_GET ++ BPF_PROG_ATTACH = C.BPF_PROG_ATTACH ++ BPF_PROG_DETACH = C.BPF_PROG_DETACH ++ BPF_PROG_TEST_RUN = C.BPF_PROG_TEST_RUN ++ BPF_PROG_GET_NEXT_ID = C.BPF_PROG_GET_NEXT_ID ++ BPF_MAP_GET_NEXT_ID = C.BPF_MAP_GET_NEXT_ID ++ BPF_PROG_GET_FD_BY_ID = C.BPF_PROG_GET_FD_BY_ID ++ BPF_MAP_GET_FD_BY_ID = C.BPF_MAP_GET_FD_BY_ID ++ BPF_OBJ_GET_INFO_BY_FD = C.BPF_OBJ_GET_INFO_BY_FD ++ BPF_PROG_QUERY = C.BPF_PROG_QUERY ++ BPF_RAW_TRACEPOINT_OPEN = C.BPF_RAW_TRACEPOINT_OPEN ++ BPF_BTF_LOAD = C.BPF_BTF_LOAD ++ BPF_BTF_GET_FD_BY_ID = C.BPF_BTF_GET_FD_BY_ID ++ BPF_TASK_FD_QUERY = C.BPF_TASK_FD_QUERY ++ BPF_MAP_LOOKUP_AND_DELETE_ELEM = C.BPF_MAP_LOOKUP_AND_DELETE_ELEM ++ BPF_MAP_FREEZE = C.BPF_MAP_FREEZE ++ BPF_BTF_GET_NEXT_ID = C.BPF_BTF_GET_NEXT_ID ++ BPF_MAP_TYPE_UNSPEC = C.BPF_MAP_TYPE_UNSPEC ++ BPF_MAP_TYPE_HASH = C.BPF_MAP_TYPE_HASH ++ BPF_MAP_TYPE_ARRAY = C.BPF_MAP_TYPE_ARRAY ++ BPF_MAP_TYPE_PROG_ARRAY = C.BPF_MAP_TYPE_PROG_ARRAY ++ BPF_MAP_TYPE_PERF_EVENT_ARRAY = C.BPF_MAP_TYPE_PERF_EVENT_ARRAY ++ BPF_MAP_TYPE_PERCPU_HASH = C.BPF_MAP_TYPE_PERCPU_HASH ++ BPF_MAP_TYPE_PERCPU_ARRAY = C.BPF_MAP_TYPE_PERCPU_ARRAY ++ BPF_MAP_TYPE_STACK_TRACE = C.BPF_MAP_TYPE_STACK_TRACE ++ BPF_MAP_TYPE_CGROUP_ARRAY = C.BPF_MAP_TYPE_CGROUP_ARRAY ++ BPF_MAP_TYPE_LRU_HASH = C.BPF_MAP_TYPE_LRU_HASH ++ BPF_MAP_TYPE_LRU_PERCPU_HASH = C.BPF_MAP_TYPE_LRU_PERCPU_HASH ++ BPF_MAP_TYPE_LPM_TRIE = C.BPF_MAP_TYPE_LPM_TRIE ++ BPF_MAP_TYPE_ARRAY_OF_MAPS = C.BPF_MAP_TYPE_ARRAY_OF_MAPS ++ BPF_MAP_TYPE_HASH_OF_MAPS = C.BPF_MAP_TYPE_HASH_OF_MAPS ++ BPF_MAP_TYPE_DEVMAP = C.BPF_MAP_TYPE_DEVMAP ++ BPF_MAP_TYPE_SOCKMAP = C.BPF_MAP_TYPE_SOCKMAP ++ BPF_MAP_TYPE_CPUMAP = C.BPF_MAP_TYPE_CPUMAP ++ BPF_MAP_TYPE_XSKMAP = C.BPF_MAP_TYPE_XSKMAP ++ BPF_MAP_TYPE_SOCKHASH = C.BPF_MAP_TYPE_SOCKHASH ++ BPF_MAP_TYPE_CGROUP_STORAGE = C.BPF_MAP_TYPE_CGROUP_STORAGE ++ BPF_MAP_TYPE_REUSEPORT_SOCKARRAY = C.BPF_MAP_TYPE_REUSEPORT_SOCKARRAY ++ BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = C.BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE ++ BPF_MAP_TYPE_QUEUE = C.BPF_MAP_TYPE_QUEUE ++ BPF_MAP_TYPE_STACK = C.BPF_MAP_TYPE_STACK ++ BPF_MAP_TYPE_SK_STORAGE = C.BPF_MAP_TYPE_SK_STORAGE ++ BPF_MAP_TYPE_DEVMAP_HASH = C.BPF_MAP_TYPE_DEVMAP_HASH ++ BPF_PROG_TYPE_UNSPEC = C.BPF_PROG_TYPE_UNSPEC ++ BPF_PROG_TYPE_SOCKET_FILTER = C.BPF_PROG_TYPE_SOCKET_FILTER ++ BPF_PROG_TYPE_KPROBE = C.BPF_PROG_TYPE_KPROBE ++ BPF_PROG_TYPE_SCHED_CLS = C.BPF_PROG_TYPE_SCHED_CLS ++ BPF_PROG_TYPE_SCHED_ACT = C.BPF_PROG_TYPE_SCHED_ACT ++ BPF_PROG_TYPE_TRACEPOINT = C.BPF_PROG_TYPE_TRACEPOINT ++ BPF_PROG_TYPE_XDP = C.BPF_PROG_TYPE_XDP ++ BPF_PROG_TYPE_PERF_EVENT = C.BPF_PROG_TYPE_PERF_EVENT ++ BPF_PROG_TYPE_CGROUP_SKB = C.BPF_PROG_TYPE_CGROUP_SKB ++ BPF_PROG_TYPE_CGROUP_SOCK = C.BPF_PROG_TYPE_CGROUP_SOCK ++ BPF_PROG_TYPE_LWT_IN = C.BPF_PROG_TYPE_LWT_IN ++ BPF_PROG_TYPE_LWT_OUT = C.BPF_PROG_TYPE_LWT_OUT ++ BPF_PROG_TYPE_LWT_XMIT = C.BPF_PROG_TYPE_LWT_XMIT ++ BPF_PROG_TYPE_SOCK_OPS = C.BPF_PROG_TYPE_SOCK_OPS ++ BPF_PROG_TYPE_SK_SKB = C.BPF_PROG_TYPE_SK_SKB ++ BPF_PROG_TYPE_CGROUP_DEVICE = C.BPF_PROG_TYPE_CGROUP_DEVICE ++ BPF_PROG_TYPE_SK_MSG = C.BPF_PROG_TYPE_SK_MSG ++ BPF_PROG_TYPE_RAW_TRACEPOINT = C.BPF_PROG_TYPE_RAW_TRACEPOINT ++ BPF_PROG_TYPE_CGROUP_SOCK_ADDR = C.BPF_PROG_TYPE_CGROUP_SOCK_ADDR ++ BPF_PROG_TYPE_LWT_SEG6LOCAL = C.BPF_PROG_TYPE_LWT_SEG6LOCAL ++ BPF_PROG_TYPE_LIRC_MODE2 = C.BPF_PROG_TYPE_LIRC_MODE2 ++ BPF_PROG_TYPE_SK_REUSEPORT = C.BPF_PROG_TYPE_SK_REUSEPORT ++ BPF_PROG_TYPE_FLOW_DISSECTOR = C.BPF_PROG_TYPE_FLOW_DISSECTOR ++ BPF_PROG_TYPE_CGROUP_SYSCTL = C.BPF_PROG_TYPE_CGROUP_SYSCTL ++ BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = C.BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE ++ BPF_PROG_TYPE_CGROUP_SOCKOPT = C.BPF_PROG_TYPE_CGROUP_SOCKOPT ++ BPF_PROG_TYPE_TRACING = C.BPF_PROG_TYPE_TRACING ++ BPF_CGROUP_INET_INGRESS = C.BPF_CGROUP_INET_INGRESS ++ BPF_CGROUP_INET_EGRESS = C.BPF_CGROUP_INET_EGRESS ++ BPF_CGROUP_INET_SOCK_CREATE = C.BPF_CGROUP_INET_SOCK_CREATE ++ BPF_CGROUP_SOCK_OPS = C.BPF_CGROUP_SOCK_OPS ++ BPF_SK_SKB_STREAM_PARSER = C.BPF_SK_SKB_STREAM_PARSER ++ BPF_SK_SKB_STREAM_VERDICT = C.BPF_SK_SKB_STREAM_VERDICT ++ BPF_CGROUP_DEVICE = C.BPF_CGROUP_DEVICE ++ BPF_SK_MSG_VERDICT = C.BPF_SK_MSG_VERDICT ++ BPF_CGROUP_INET4_BIND = C.BPF_CGROUP_INET4_BIND ++ BPF_CGROUP_INET6_BIND = C.BPF_CGROUP_INET6_BIND ++ BPF_CGROUP_INET4_CONNECT = C.BPF_CGROUP_INET4_CONNECT ++ BPF_CGROUP_INET6_CONNECT = C.BPF_CGROUP_INET6_CONNECT ++ BPF_CGROUP_INET4_POST_BIND = C.BPF_CGROUP_INET4_POST_BIND ++ BPF_CGROUP_INET6_POST_BIND = C.BPF_CGROUP_INET6_POST_BIND ++ BPF_CGROUP_UDP4_SENDMSG = C.BPF_CGROUP_UDP4_SENDMSG ++ BPF_CGROUP_UDP6_SENDMSG = C.BPF_CGROUP_UDP6_SENDMSG ++ BPF_LIRC_MODE2 = C.BPF_LIRC_MODE2 ++ BPF_FLOW_DISSECTOR = C.BPF_FLOW_DISSECTOR ++ BPF_CGROUP_SYSCTL = C.BPF_CGROUP_SYSCTL ++ BPF_CGROUP_UDP4_RECVMSG = C.BPF_CGROUP_UDP4_RECVMSG ++ BPF_CGROUP_UDP6_RECVMSG = C.BPF_CGROUP_UDP6_RECVMSG ++ BPF_CGROUP_GETSOCKOPT = C.BPF_CGROUP_GETSOCKOPT ++ BPF_CGROUP_SETSOCKOPT = C.BPF_CGROUP_SETSOCKOPT ++ BPF_TRACE_RAW_TP = C.BPF_TRACE_RAW_TP ++ BPF_TRACE_FENTRY = C.BPF_TRACE_FENTRY ++ BPF_TRACE_FEXIT = C.BPF_TRACE_FEXIT ++ BPF_STACK_BUILD_ID_EMPTY = C.BPF_STACK_BUILD_ID_EMPTY ++ BPF_STACK_BUILD_ID_VALID = C.BPF_STACK_BUILD_ID_VALID ++ BPF_STACK_BUILD_ID_IP = C.BPF_STACK_BUILD_ID_IP ++ BPF_ADJ_ROOM_NET = C.BPF_ADJ_ROOM_NET ++ BPF_ADJ_ROOM_MAC = C.BPF_ADJ_ROOM_MAC ++ BPF_HDR_START_MAC = C.BPF_HDR_START_MAC ++ BPF_HDR_START_NET = C.BPF_HDR_START_NET ++ BPF_LWT_ENCAP_SEG6 = C.BPF_LWT_ENCAP_SEG6 ++ BPF_LWT_ENCAP_SEG6_INLINE = C.BPF_LWT_ENCAP_SEG6_INLINE ++ BPF_LWT_ENCAP_IP = C.BPF_LWT_ENCAP_IP ++ BPF_OK = C.BPF_OK ++ BPF_DROP = C.BPF_DROP ++ BPF_REDIRECT = C.BPF_REDIRECT ++ BPF_LWT_REROUTE = C.BPF_LWT_REROUTE ++ BPF_SOCK_OPS_VOID = C.BPF_SOCK_OPS_VOID ++ BPF_SOCK_OPS_TIMEOUT_INIT = C.BPF_SOCK_OPS_TIMEOUT_INIT ++ BPF_SOCK_OPS_RWND_INIT = C.BPF_SOCK_OPS_RWND_INIT ++ BPF_SOCK_OPS_TCP_CONNECT_CB = C.BPF_SOCK_OPS_TCP_CONNECT_CB ++ BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB = C.BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB ++ BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = C.BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB ++ BPF_SOCK_OPS_NEEDS_ECN = C.BPF_SOCK_OPS_NEEDS_ECN ++ BPF_SOCK_OPS_BASE_RTT = C.BPF_SOCK_OPS_BASE_RTT ++ BPF_SOCK_OPS_RTO_CB = C.BPF_SOCK_OPS_RTO_CB ++ BPF_SOCK_OPS_RETRANS_CB = C.BPF_SOCK_OPS_RETRANS_CB ++ BPF_SOCK_OPS_STATE_CB = C.BPF_SOCK_OPS_STATE_CB ++ BPF_SOCK_OPS_TCP_LISTEN_CB = C.BPF_SOCK_OPS_TCP_LISTEN_CB ++ BPF_SOCK_OPS_RTT_CB = C.BPF_SOCK_OPS_RTT_CB ++ BPF_TCP_ESTABLISHED = C.BPF_TCP_ESTABLISHED ++ BPF_TCP_SYN_SENT = C.BPF_TCP_SYN_SENT ++ BPF_TCP_SYN_RECV = C.BPF_TCP_SYN_RECV ++ BPF_TCP_FIN_WAIT1 = C.BPF_TCP_FIN_WAIT1 ++ BPF_TCP_FIN_WAIT2 = C.BPF_TCP_FIN_WAIT2 ++ BPF_TCP_TIME_WAIT = C.BPF_TCP_TIME_WAIT ++ BPF_TCP_CLOSE = C.BPF_TCP_CLOSE ++ BPF_TCP_CLOSE_WAIT = C.BPF_TCP_CLOSE_WAIT ++ BPF_TCP_LAST_ACK = C.BPF_TCP_LAST_ACK ++ BPF_TCP_LISTEN = C.BPF_TCP_LISTEN ++ BPF_TCP_CLOSING = C.BPF_TCP_CLOSING ++ BPF_TCP_NEW_SYN_RECV = C.BPF_TCP_NEW_SYN_RECV ++ BPF_TCP_MAX_STATES = C.BPF_TCP_MAX_STATES ++ BPF_FIB_LKUP_RET_SUCCESS = C.BPF_FIB_LKUP_RET_SUCCESS ++ BPF_FIB_LKUP_RET_BLACKHOLE = C.BPF_FIB_LKUP_RET_BLACKHOLE ++ BPF_FIB_LKUP_RET_UNREACHABLE = C.BPF_FIB_LKUP_RET_UNREACHABLE ++ BPF_FIB_LKUP_RET_PROHIBIT = C.BPF_FIB_LKUP_RET_PROHIBIT ++ BPF_FIB_LKUP_RET_NOT_FWDED = C.BPF_FIB_LKUP_RET_NOT_FWDED ++ BPF_FIB_LKUP_RET_FWD_DISABLED = C.BPF_FIB_LKUP_RET_FWD_DISABLED ++ BPF_FIB_LKUP_RET_UNSUPP_LWT = C.BPF_FIB_LKUP_RET_UNSUPP_LWT ++ BPF_FIB_LKUP_RET_NO_NEIGH = C.BPF_FIB_LKUP_RET_NO_NEIGH ++ BPF_FIB_LKUP_RET_FRAG_NEEDED = C.BPF_FIB_LKUP_RET_FRAG_NEEDED ++ BPF_FD_TYPE_RAW_TRACEPOINT = C.BPF_FD_TYPE_RAW_TRACEPOINT ++ BPF_FD_TYPE_TRACEPOINT = C.BPF_FD_TYPE_TRACEPOINT ++ BPF_FD_TYPE_KPROBE = C.BPF_FD_TYPE_KPROBE ++ BPF_FD_TYPE_KRETPROBE = C.BPF_FD_TYPE_KRETPROBE ++ BPF_FD_TYPE_UPROBE = C.BPF_FD_TYPE_UPROBE ++ BPF_FD_TYPE_URETPROBE = C.BPF_FD_TYPE_URETPROBE ++) ++ ++// generated by: ++// perl -nlE '/^\s*(RTNLGRP_\w+)/ && say "$1 = C.$1"' include/uapi/linux/rtnetlink.h ++const ( ++ RTNLGRP_NONE = C.RTNLGRP_NONE ++ RTNLGRP_LINK = C.RTNLGRP_LINK ++ RTNLGRP_NOTIFY = C.RTNLGRP_NOTIFY ++ RTNLGRP_NEIGH = C.RTNLGRP_NEIGH ++ RTNLGRP_TC = C.RTNLGRP_TC ++ RTNLGRP_IPV4_IFADDR = C.RTNLGRP_IPV4_IFADDR ++ RTNLGRP_IPV4_MROUTE = C.RTNLGRP_IPV4_MROUTE ++ RTNLGRP_IPV4_ROUTE = C.RTNLGRP_IPV4_ROUTE ++ RTNLGRP_IPV4_RULE = C.RTNLGRP_IPV4_RULE ++ RTNLGRP_IPV6_IFADDR = C.RTNLGRP_IPV6_IFADDR ++ RTNLGRP_IPV6_MROUTE = C.RTNLGRP_IPV6_MROUTE ++ RTNLGRP_IPV6_ROUTE = C.RTNLGRP_IPV6_ROUTE ++ RTNLGRP_IPV6_IFINFO = C.RTNLGRP_IPV6_IFINFO ++ RTNLGRP_DECnet_IFADDR = C.RTNLGRP_DECnet_IFADDR ++ RTNLGRP_NOP2 = C.RTNLGRP_NOP2 ++ RTNLGRP_DECnet_ROUTE = C.RTNLGRP_DECnet_ROUTE ++ RTNLGRP_DECnet_RULE = C.RTNLGRP_DECnet_RULE ++ RTNLGRP_NOP4 = C.RTNLGRP_NOP4 ++ RTNLGRP_IPV6_PREFIX = C.RTNLGRP_IPV6_PREFIX ++ RTNLGRP_IPV6_RULE = C.RTNLGRP_IPV6_RULE ++ RTNLGRP_ND_USEROPT = C.RTNLGRP_ND_USEROPT ++ RTNLGRP_PHONET_IFADDR = C.RTNLGRP_PHONET_IFADDR ++ RTNLGRP_PHONET_ROUTE = C.RTNLGRP_PHONET_ROUTE ++ RTNLGRP_DCB = C.RTNLGRP_DCB ++ RTNLGRP_IPV4_NETCONF = C.RTNLGRP_IPV4_NETCONF ++ RTNLGRP_IPV6_NETCONF = C.RTNLGRP_IPV6_NETCONF ++ RTNLGRP_MDB = C.RTNLGRP_MDB ++ RTNLGRP_MPLS_ROUTE = C.RTNLGRP_MPLS_ROUTE ++ RTNLGRP_NSID = C.RTNLGRP_NSID ++ RTNLGRP_MPLS_NETCONF = C.RTNLGRP_MPLS_NETCONF ++ RTNLGRP_IPV4_MROUTE_R = C.RTNLGRP_IPV4_MROUTE_R ++ RTNLGRP_IPV6_MROUTE_R = C.RTNLGRP_IPV6_MROUTE_R ++ RTNLGRP_NEXTHOP = C.RTNLGRP_NEXTHOP ++) ++ ++// Capabilities ++ ++type CapUserHeader C.struct___user_cap_header_struct ++ ++type CapUserData C.struct___user_cap_data_struct ++ ++const ( ++ LINUX_CAPABILITY_VERSION_1 = C._LINUX_CAPABILITY_VERSION_1 ++ LINUX_CAPABILITY_VERSION_2 = C._LINUX_CAPABILITY_VERSION_2 ++ LINUX_CAPABILITY_VERSION_3 = C._LINUX_CAPABILITY_VERSION_3 ++) ++ ++// Loop devices ++ ++const ( ++ LO_FLAGS_READ_ONLY = C.LO_FLAGS_READ_ONLY ++ LO_FLAGS_AUTOCLEAR = C.LO_FLAGS_AUTOCLEAR ++ LO_FLAGS_PARTSCAN = C.LO_FLAGS_PARTSCAN ++ LO_FLAGS_DIRECT_IO = C.LO_FLAGS_DIRECT_IO ++) ++ ++type LoopInfo C.struct_loop_info ++type LoopInfo64 C.struct_loop_info64 ++ ++// AF_TIPC ++ ++type TIPCSocketAddr C.struct_tipc_socket_addr ++ ++type TIPCServiceRange C.struct_tipc_service_range ++ ++type TIPCServiceName C.struct_tipc_service_name ++ ++type TIPCSubscr C.struct_tipc_subscr ++ ++type TIPCEvent C.struct_tipc_event ++ ++type TIPCGroupReq C.struct_tipc_group_req ++ ++type TIPCSIOCLNReq C.struct_tipc_sioc_ln_req ++ ++type TIPCSIOCNodeIDReq C.struct_tipc_sioc_nodeid_req ++ ++const ( ++ TIPC_CLUSTER_SCOPE = C.TIPC_CLUSTER_SCOPE ++ TIPC_NODE_SCOPE = C.TIPC_NODE_SCOPE ++) ++ ++const ( ++ SYSLOG_ACTION_CLOSE = 0 ++ SYSLOG_ACTION_OPEN = 1 ++ SYSLOG_ACTION_READ = 2 ++ SYSLOG_ACTION_READ_ALL = 3 ++ SYSLOG_ACTION_READ_CLEAR = 4 ++ SYSLOG_ACTION_CLEAR = 5 ++ SYSLOG_ACTION_CONSOLE_OFF = 6 ++ SYSLOG_ACTION_CONSOLE_ON = 7 ++ SYSLOG_ACTION_CONSOLE_LEVEL = 8 ++ SYSLOG_ACTION_SIZE_UNREAD = 9 ++ SYSLOG_ACTION_SIZE_BUFFER = 10 ++) ++ ++// Devlink generic netlink API, generated using: ++// perl -nlE '/^\s*(DEVLINK_\w+)/ && say "$1 = C.$1"' devlink.h ++const ( ++ DEVLINK_CMD_UNSPEC = C.DEVLINK_CMD_UNSPEC ++ DEVLINK_CMD_GET = C.DEVLINK_CMD_GET ++ DEVLINK_CMD_SET = C.DEVLINK_CMD_SET ++ DEVLINK_CMD_NEW = C.DEVLINK_CMD_NEW ++ DEVLINK_CMD_DEL = C.DEVLINK_CMD_DEL ++ DEVLINK_CMD_PORT_GET = C.DEVLINK_CMD_PORT_GET ++ DEVLINK_CMD_PORT_SET = C.DEVLINK_CMD_PORT_SET ++ DEVLINK_CMD_PORT_NEW = C.DEVLINK_CMD_PORT_NEW ++ DEVLINK_CMD_PORT_DEL = C.DEVLINK_CMD_PORT_DEL ++ DEVLINK_CMD_PORT_SPLIT = C.DEVLINK_CMD_PORT_SPLIT ++ DEVLINK_CMD_PORT_UNSPLIT = C.DEVLINK_CMD_PORT_UNSPLIT ++ DEVLINK_CMD_SB_GET = C.DEVLINK_CMD_SB_GET ++ DEVLINK_CMD_SB_SET = C.DEVLINK_CMD_SB_SET ++ DEVLINK_CMD_SB_NEW = C.DEVLINK_CMD_SB_NEW ++ DEVLINK_CMD_SB_DEL = C.DEVLINK_CMD_SB_DEL ++ DEVLINK_CMD_SB_POOL_GET = C.DEVLINK_CMD_SB_POOL_GET ++ DEVLINK_CMD_SB_POOL_SET = C.DEVLINK_CMD_SB_POOL_SET ++ DEVLINK_CMD_SB_POOL_NEW = C.DEVLINK_CMD_SB_POOL_NEW ++ DEVLINK_CMD_SB_POOL_DEL = C.DEVLINK_CMD_SB_POOL_DEL ++ DEVLINK_CMD_SB_PORT_POOL_GET = C.DEVLINK_CMD_SB_PORT_POOL_GET ++ DEVLINK_CMD_SB_PORT_POOL_SET = C.DEVLINK_CMD_SB_PORT_POOL_SET ++ DEVLINK_CMD_SB_PORT_POOL_NEW = C.DEVLINK_CMD_SB_PORT_POOL_NEW ++ DEVLINK_CMD_SB_PORT_POOL_DEL = C.DEVLINK_CMD_SB_PORT_POOL_DEL ++ DEVLINK_CMD_SB_TC_POOL_BIND_GET = C.DEVLINK_CMD_SB_TC_POOL_BIND_GET ++ DEVLINK_CMD_SB_TC_POOL_BIND_SET = C.DEVLINK_CMD_SB_TC_POOL_BIND_SET ++ DEVLINK_CMD_SB_TC_POOL_BIND_NEW = C.DEVLINK_CMD_SB_TC_POOL_BIND_NEW ++ DEVLINK_CMD_SB_TC_POOL_BIND_DEL = C.DEVLINK_CMD_SB_TC_POOL_BIND_DEL ++ DEVLINK_CMD_SB_OCC_SNAPSHOT = C.DEVLINK_CMD_SB_OCC_SNAPSHOT ++ DEVLINK_CMD_SB_OCC_MAX_CLEAR = C.DEVLINK_CMD_SB_OCC_MAX_CLEAR ++ DEVLINK_CMD_ESWITCH_GET = C.DEVLINK_CMD_ESWITCH_GET ++ DEVLINK_CMD_ESWITCH_SET = C.DEVLINK_CMD_ESWITCH_SET ++ DEVLINK_CMD_DPIPE_TABLE_GET = C.DEVLINK_CMD_DPIPE_TABLE_GET ++ DEVLINK_CMD_DPIPE_ENTRIES_GET = C.DEVLINK_CMD_DPIPE_ENTRIES_GET ++ DEVLINK_CMD_DPIPE_HEADERS_GET = C.DEVLINK_CMD_DPIPE_HEADERS_GET ++ DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET = C.DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET ++ DEVLINK_CMD_MAX = C.DEVLINK_CMD_MAX ++ DEVLINK_PORT_TYPE_NOTSET = C.DEVLINK_PORT_TYPE_NOTSET ++ DEVLINK_PORT_TYPE_AUTO = C.DEVLINK_PORT_TYPE_AUTO ++ DEVLINK_PORT_TYPE_ETH = C.DEVLINK_PORT_TYPE_ETH ++ DEVLINK_PORT_TYPE_IB = C.DEVLINK_PORT_TYPE_IB ++ DEVLINK_SB_POOL_TYPE_INGRESS = C.DEVLINK_SB_POOL_TYPE_INGRESS ++ DEVLINK_SB_POOL_TYPE_EGRESS = C.DEVLINK_SB_POOL_TYPE_EGRESS ++ DEVLINK_SB_THRESHOLD_TYPE_STATIC = C.DEVLINK_SB_THRESHOLD_TYPE_STATIC ++ DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC = C.DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC ++ DEVLINK_ESWITCH_MODE_LEGACY = C.DEVLINK_ESWITCH_MODE_LEGACY ++ DEVLINK_ESWITCH_MODE_SWITCHDEV = C.DEVLINK_ESWITCH_MODE_SWITCHDEV ++ DEVLINK_ESWITCH_INLINE_MODE_NONE = C.DEVLINK_ESWITCH_INLINE_MODE_NONE ++ DEVLINK_ESWITCH_INLINE_MODE_LINK = C.DEVLINK_ESWITCH_INLINE_MODE_LINK ++ DEVLINK_ESWITCH_INLINE_MODE_NETWORK = C.DEVLINK_ESWITCH_INLINE_MODE_NETWORK ++ DEVLINK_ESWITCH_INLINE_MODE_TRANSPORT = C.DEVLINK_ESWITCH_INLINE_MODE_TRANSPORT ++ DEVLINK_ESWITCH_ENCAP_MODE_NONE = C.DEVLINK_ESWITCH_ENCAP_MODE_NONE ++ DEVLINK_ESWITCH_ENCAP_MODE_BASIC = C.DEVLINK_ESWITCH_ENCAP_MODE_BASIC ++ DEVLINK_ATTR_UNSPEC = C.DEVLINK_ATTR_UNSPEC ++ DEVLINK_ATTR_BUS_NAME = C.DEVLINK_ATTR_BUS_NAME ++ DEVLINK_ATTR_DEV_NAME = C.DEVLINK_ATTR_DEV_NAME ++ DEVLINK_ATTR_PORT_INDEX = C.DEVLINK_ATTR_PORT_INDEX ++ DEVLINK_ATTR_PORT_TYPE = C.DEVLINK_ATTR_PORT_TYPE ++ DEVLINK_ATTR_PORT_DESIRED_TYPE = C.DEVLINK_ATTR_PORT_DESIRED_TYPE ++ DEVLINK_ATTR_PORT_NETDEV_IFINDEX = C.DEVLINK_ATTR_PORT_NETDEV_IFINDEX ++ DEVLINK_ATTR_PORT_NETDEV_NAME = C.DEVLINK_ATTR_PORT_NETDEV_NAME ++ DEVLINK_ATTR_PORT_IBDEV_NAME = C.DEVLINK_ATTR_PORT_IBDEV_NAME ++ DEVLINK_ATTR_PORT_SPLIT_COUNT = C.DEVLINK_ATTR_PORT_SPLIT_COUNT ++ DEVLINK_ATTR_PORT_SPLIT_GROUP = C.DEVLINK_ATTR_PORT_SPLIT_GROUP ++ DEVLINK_ATTR_SB_INDEX = C.DEVLINK_ATTR_SB_INDEX ++ DEVLINK_ATTR_SB_SIZE = C.DEVLINK_ATTR_SB_SIZE ++ DEVLINK_ATTR_SB_INGRESS_POOL_COUNT = C.DEVLINK_ATTR_SB_INGRESS_POOL_COUNT ++ DEVLINK_ATTR_SB_EGRESS_POOL_COUNT = C.DEVLINK_ATTR_SB_EGRESS_POOL_COUNT ++ DEVLINK_ATTR_SB_INGRESS_TC_COUNT = C.DEVLINK_ATTR_SB_INGRESS_TC_COUNT ++ DEVLINK_ATTR_SB_EGRESS_TC_COUNT = C.DEVLINK_ATTR_SB_EGRESS_TC_COUNT ++ DEVLINK_ATTR_SB_POOL_INDEX = C.DEVLINK_ATTR_SB_POOL_INDEX ++ DEVLINK_ATTR_SB_POOL_TYPE = C.DEVLINK_ATTR_SB_POOL_TYPE ++ DEVLINK_ATTR_SB_POOL_SIZE = C.DEVLINK_ATTR_SB_POOL_SIZE ++ DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE = C.DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE ++ DEVLINK_ATTR_SB_THRESHOLD = C.DEVLINK_ATTR_SB_THRESHOLD ++ DEVLINK_ATTR_SB_TC_INDEX = C.DEVLINK_ATTR_SB_TC_INDEX ++ DEVLINK_ATTR_SB_OCC_CUR = C.DEVLINK_ATTR_SB_OCC_CUR ++ DEVLINK_ATTR_SB_OCC_MAX = C.DEVLINK_ATTR_SB_OCC_MAX ++ DEVLINK_ATTR_ESWITCH_MODE = C.DEVLINK_ATTR_ESWITCH_MODE ++ DEVLINK_ATTR_ESWITCH_INLINE_MODE = C.DEVLINK_ATTR_ESWITCH_INLINE_MODE ++ DEVLINK_ATTR_DPIPE_TABLES = C.DEVLINK_ATTR_DPIPE_TABLES ++ DEVLINK_ATTR_DPIPE_TABLE = C.DEVLINK_ATTR_DPIPE_TABLE ++ DEVLINK_ATTR_DPIPE_TABLE_NAME = C.DEVLINK_ATTR_DPIPE_TABLE_NAME ++ DEVLINK_ATTR_DPIPE_TABLE_SIZE = C.DEVLINK_ATTR_DPIPE_TABLE_SIZE ++ DEVLINK_ATTR_DPIPE_TABLE_MATCHES = C.DEVLINK_ATTR_DPIPE_TABLE_MATCHES ++ DEVLINK_ATTR_DPIPE_TABLE_ACTIONS = C.DEVLINK_ATTR_DPIPE_TABLE_ACTIONS ++ DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED = C.DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED ++ DEVLINK_ATTR_DPIPE_ENTRIES = C.DEVLINK_ATTR_DPIPE_ENTRIES ++ DEVLINK_ATTR_DPIPE_ENTRY = C.DEVLINK_ATTR_DPIPE_ENTRY ++ DEVLINK_ATTR_DPIPE_ENTRY_INDEX = C.DEVLINK_ATTR_DPIPE_ENTRY_INDEX ++ DEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES = C.DEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES ++ DEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES = C.DEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES ++ DEVLINK_ATTR_DPIPE_ENTRY_COUNTER = C.DEVLINK_ATTR_DPIPE_ENTRY_COUNTER ++ DEVLINK_ATTR_DPIPE_MATCH = C.DEVLINK_ATTR_DPIPE_MATCH ++ DEVLINK_ATTR_DPIPE_MATCH_VALUE = C.DEVLINK_ATTR_DPIPE_MATCH_VALUE ++ DEVLINK_ATTR_DPIPE_MATCH_TYPE = C.DEVLINK_ATTR_DPIPE_MATCH_TYPE ++ DEVLINK_ATTR_DPIPE_ACTION = C.DEVLINK_ATTR_DPIPE_ACTION ++ DEVLINK_ATTR_DPIPE_ACTION_VALUE = C.DEVLINK_ATTR_DPIPE_ACTION_VALUE ++ DEVLINK_ATTR_DPIPE_ACTION_TYPE = C.DEVLINK_ATTR_DPIPE_ACTION_TYPE ++ DEVLINK_ATTR_DPIPE_VALUE = C.DEVLINK_ATTR_DPIPE_VALUE ++ DEVLINK_ATTR_DPIPE_VALUE_MASK = C.DEVLINK_ATTR_DPIPE_VALUE_MASK ++ DEVLINK_ATTR_DPIPE_VALUE_MAPPING = C.DEVLINK_ATTR_DPIPE_VALUE_MAPPING ++ DEVLINK_ATTR_DPIPE_HEADERS = C.DEVLINK_ATTR_DPIPE_HEADERS ++ DEVLINK_ATTR_DPIPE_HEADER = C.DEVLINK_ATTR_DPIPE_HEADER ++ DEVLINK_ATTR_DPIPE_HEADER_NAME = C.DEVLINK_ATTR_DPIPE_HEADER_NAME ++ DEVLINK_ATTR_DPIPE_HEADER_ID = C.DEVLINK_ATTR_DPIPE_HEADER_ID ++ DEVLINK_ATTR_DPIPE_HEADER_FIELDS = C.DEVLINK_ATTR_DPIPE_HEADER_FIELDS ++ DEVLINK_ATTR_DPIPE_HEADER_GLOBAL = C.DEVLINK_ATTR_DPIPE_HEADER_GLOBAL ++ DEVLINK_ATTR_DPIPE_HEADER_INDEX = C.DEVLINK_ATTR_DPIPE_HEADER_INDEX ++ DEVLINK_ATTR_DPIPE_FIELD = C.DEVLINK_ATTR_DPIPE_FIELD ++ DEVLINK_ATTR_DPIPE_FIELD_NAME = C.DEVLINK_ATTR_DPIPE_FIELD_NAME ++ DEVLINK_ATTR_DPIPE_FIELD_ID = C.DEVLINK_ATTR_DPIPE_FIELD_ID ++ DEVLINK_ATTR_DPIPE_FIELD_BITWIDTH = C.DEVLINK_ATTR_DPIPE_FIELD_BITWIDTH ++ DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE = C.DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE ++ DEVLINK_ATTR_PAD = C.DEVLINK_ATTR_PAD ++ DEVLINK_ATTR_ESWITCH_ENCAP_MODE = C.DEVLINK_ATTR_ESWITCH_ENCAP_MODE ++ DEVLINK_ATTR_MAX = C.DEVLINK_ATTR_MAX ++ DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = C.DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE ++ DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = C.DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX ++ DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = C.DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT ++ DEVLINK_DPIPE_ACTION_TYPE_FIELD_MODIFY = C.DEVLINK_DPIPE_ACTION_TYPE_FIELD_MODIFY ++ DEVLINK_DPIPE_FIELD_ETHERNET_DST_MAC = C.DEVLINK_DPIPE_FIELD_ETHERNET_DST_MAC ++ DEVLINK_DPIPE_FIELD_IPV4_DST_IP = C.DEVLINK_DPIPE_FIELD_IPV4_DST_IP ++ DEVLINK_DPIPE_FIELD_IPV6_DST_IP = C.DEVLINK_DPIPE_FIELD_IPV6_DST_IP ++ DEVLINK_DPIPE_HEADER_ETHERNET = C.DEVLINK_DPIPE_HEADER_ETHERNET ++ DEVLINK_DPIPE_HEADER_IPV4 = C.DEVLINK_DPIPE_HEADER_IPV4 ++ DEVLINK_DPIPE_HEADER_IPV6 = C.DEVLINK_DPIPE_HEADER_IPV6 ++) ++ ++// fs-verity ++ ++type FsverityDigest C.struct_fsverity_digest ++ ++type FsverityEnableArg C.struct_fsverity_enable_arg ++ ++// nexthop ++ ++type Nhmsg C.struct_nhmsg ++ ++type NexthopGrp C.struct_nexthop_grp ++ ++const ( ++ NHA_UNSPEC = C.NHA_UNSPEC ++ NHA_ID = C.NHA_ID ++ NHA_GROUP = C.NHA_GROUP ++ NHA_GROUP_TYPE = C.NHA_GROUP_TYPE ++ NHA_BLACKHOLE = C.NHA_BLACKHOLE ++ NHA_OIF = C.NHA_OIF ++ NHA_GATEWAY = C.NHA_GATEWAY ++ NHA_ENCAP_TYPE = C.NHA_ENCAP_TYPE ++ NHA_ENCAP = C.NHA_ENCAP ++ NHA_GROUPS = C.NHA_GROUPS ++ NHA_MASTER = C.NHA_MASTER ++) ++ ++ ++// lwtunnel and related APIs ++ ++const ( ++ LWTUNNEL_ENCAP_NONE = C.LWTUNNEL_ENCAP_NONE ++ LWTUNNEL_ENCAP_MPLS = C.LWTUNNEL_ENCAP_MPLS ++ LWTUNNEL_ENCAP_IP = C.LWTUNNEL_ENCAP_IP ++ LWTUNNEL_ENCAP_ILA = C.LWTUNNEL_ENCAP_ILA ++ LWTUNNEL_ENCAP_IP6 = C.LWTUNNEL_ENCAP_IP6 ++ LWTUNNEL_ENCAP_SEG6 = C.LWTUNNEL_ENCAP_SEG6 ++ LWTUNNEL_ENCAP_BPF = C.LWTUNNEL_ENCAP_BPF ++ LWTUNNEL_ENCAP_SEG6_LOCAL = C.LWTUNNEL_ENCAP_SEG6_LOCAL ++ LWTUNNEL_ENCAP_RPL = C.LWTUNNEL_ENCAP_RPL ++ LWTUNNEL_ENCAP_MAX = C.LWTUNNEL_ENCAP_MAX ++ ++ MPLS_IPTUNNEL_UNSPEC = C.MPLS_IPTUNNEL_UNSPEC ++ MPLS_IPTUNNEL_DST = C.MPLS_IPTUNNEL_DST ++ MPLS_IPTUNNEL_TTL = C.MPLS_IPTUNNEL_TTL ++ MPLS_IPTUNNEL_MAX = C.MPLS_IPTUNNEL_MAX ++) +diff --git a/vendor/golang.org/x/sys/unix/mkasm_darwin.go b/vendor/golang.org/x/sys/unix/mkasm_darwin.go +new file mode 100644 +index 0000000..6f7bb6e +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/mkasm_darwin.go +@@ -0,0 +1,78 @@ ++// Copyright 2018 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build ignore ++ ++// mkasm_darwin.go generates assembly trampolines to call libSystem routines from Go. ++//This program must be run after mksyscall.go. ++package main ++ ++import ( ++ "bytes" ++ "fmt" ++ "io/ioutil" ++ "log" ++ "os" ++ "strings" ++) ++ ++func writeASMFile(in string, fileName string, buildTags string) { ++ trampolines := map[string]bool{} ++ ++ var out bytes.Buffer ++ ++ fmt.Fprintf(&out, "// go run mkasm_darwin.go %s\n", strings.Join(os.Args[1:], " ")) ++ fmt.Fprintf(&out, "// Code generated by the command above; DO NOT EDIT.\n") ++ fmt.Fprintf(&out, "\n") ++ fmt.Fprintf(&out, "// +build %s\n", buildTags) ++ fmt.Fprintf(&out, "\n") ++ fmt.Fprintf(&out, "#include \"textflag.h\"\n") ++ for _, line := range strings.Split(in, "\n") { ++ if !strings.HasPrefix(line, "func ") || !strings.HasSuffix(line, "_trampoline()") { ++ continue ++ } ++ fn := line[5 : len(line)-13] ++ if !trampolines[fn] { ++ trampolines[fn] = true ++ fmt.Fprintf(&out, "TEXT ·%s_trampoline(SB),NOSPLIT,$0-0\n", fn) ++ fmt.Fprintf(&out, "\tJMP\t%s(SB)\n", fn) ++ } ++ } ++ err := ioutil.WriteFile(fileName, out.Bytes(), 0644) ++ if err != nil { ++ log.Fatalf("can't write %s: %s", fileName, err) ++ } ++} ++ ++func main() { ++ in1, err := ioutil.ReadFile("syscall_darwin.go") ++ if err != nil { ++ log.Fatalf("can't open syscall_darwin.go: %s", err) ++ } ++ arch := os.Args[1] ++ in2, err := ioutil.ReadFile(fmt.Sprintf("syscall_darwin_%s.go", arch)) ++ if err != nil { ++ log.Fatalf("can't open syscall_darwin_%s.go: %s", arch, err) ++ } ++ in3, err := ioutil.ReadFile(fmt.Sprintf("zsyscall_darwin_%s.go", arch)) ++ if err != nil { ++ log.Fatalf("can't open zsyscall_darwin_%s.go: %s", arch, err) ++ } ++ in := string(in1) + string(in2) + string(in3) ++ ++ writeASMFile(in, fmt.Sprintf("zsyscall_darwin_%s.s", arch), "go1.12") ++ ++ in1, err = ioutil.ReadFile("syscall_darwin.1_13.go") ++ if err != nil { ++ log.Fatalf("can't open syscall_darwin.1_13.go: %s", err) ++ } ++ in2, err = ioutil.ReadFile(fmt.Sprintf("zsyscall_darwin_%s.1_13.go", arch)) ++ if err != nil { ++ log.Fatalf("can't open zsyscall_darwin_%s.1_13.go: %s", arch, err) ++ } ++ ++ in = string(in1) + string(in2) ++ ++ writeASMFile(in, fmt.Sprintf("zsyscall_darwin_%s.1_13.s", arch), "go1.13") ++} +diff --git a/vendor/golang.org/x/sys/unix/mkmerge.go b/vendor/golang.org/x/sys/unix/mkmerge.go +new file mode 100644 +index 0000000..8bde450 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/mkmerge.go +@@ -0,0 +1,521 @@ ++// Copyright 2020 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build ignore ++ ++// mkmerge.go parses generated source files and merges common ++// consts, funcs, and types into a common source file, per GOOS. ++// ++// Usage: ++// $ go run mkmerge.go -out MERGED FILE [FILE ...] ++// ++// Example: ++// # Remove all common consts, funcs, and types from zerrors_linux_*.go ++// # and write the common code into zerrors_linux.go ++// $ go run mkmerge.go -out zerrors_linux.go zerrors_linux_*.go ++// ++// mkmerge.go performs the merge in the following steps: ++// 1. Construct the set of common code that is idential in all ++// architecture-specific files. ++// 2. Write this common code to the merged file. ++// 3. Remove the common code from all architecture-specific files. ++package main ++ ++import ( ++ "bufio" ++ "bytes" ++ "flag" ++ "fmt" ++ "go/ast" ++ "go/format" ++ "go/parser" ++ "go/token" ++ "io" ++ "io/ioutil" ++ "log" ++ "os" ++ "path" ++ "path/filepath" ++ "regexp" ++ "strconv" ++ "strings" ++) ++ ++const validGOOS = "aix|darwin|dragonfly|freebsd|linux|netbsd|openbsd|solaris" ++ ++// getValidGOOS returns GOOS, true if filename ends with a valid "_GOOS.go" ++func getValidGOOS(filename string) (string, bool) { ++ matches := regexp.MustCompile(`_(` + validGOOS + `)\.go$`).FindStringSubmatch(filename) ++ if len(matches) != 2 { ++ return "", false ++ } ++ return matches[1], true ++} ++ ++// codeElem represents an ast.Decl in a comparable way. ++type codeElem struct { ++ tok token.Token // e.g. token.CONST, token.TYPE, or token.FUNC ++ src string // the declaration formatted as source code ++} ++ ++// newCodeElem returns a codeElem based on tok and node, or an error is returned. ++func newCodeElem(tok token.Token, node ast.Node) (codeElem, error) { ++ var b strings.Builder ++ err := format.Node(&b, token.NewFileSet(), node) ++ if err != nil { ++ return codeElem{}, err ++ } ++ return codeElem{tok, b.String()}, nil ++} ++ ++// codeSet is a set of codeElems ++type codeSet struct { ++ set map[codeElem]bool // true for all codeElems in the set ++} ++ ++// newCodeSet returns a new codeSet ++func newCodeSet() *codeSet { return &codeSet{make(map[codeElem]bool)} } ++ ++// add adds elem to c ++func (c *codeSet) add(elem codeElem) { c.set[elem] = true } ++ ++// has returns true if elem is in c ++func (c *codeSet) has(elem codeElem) bool { return c.set[elem] } ++ ++// isEmpty returns true if the set is empty ++func (c *codeSet) isEmpty() bool { return len(c.set) == 0 } ++ ++// intersection returns a new set which is the intersection of c and a ++func (c *codeSet) intersection(a *codeSet) *codeSet { ++ res := newCodeSet() ++ ++ for elem := range c.set { ++ if a.has(elem) { ++ res.add(elem) ++ } ++ } ++ return res ++} ++ ++// keepCommon is a filterFn for filtering the merged file with common declarations. ++func (c *codeSet) keepCommon(elem codeElem) bool { ++ switch elem.tok { ++ case token.VAR: ++ // Remove all vars from the merged file ++ return false ++ case token.CONST, token.TYPE, token.FUNC, token.COMMENT: ++ // Remove arch-specific consts, types, functions, and file-level comments from the merged file ++ return c.has(elem) ++ case token.IMPORT: ++ // Keep imports, they are handled by filterImports ++ return true ++ } ++ ++ log.Fatalf("keepCommon: invalid elem %v", elem) ++ return true ++} ++ ++// keepArchSpecific is a filterFn for filtering the GOARC-specific files. ++func (c *codeSet) keepArchSpecific(elem codeElem) bool { ++ switch elem.tok { ++ case token.CONST, token.TYPE, token.FUNC: ++ // Remove common consts, types, or functions from the arch-specific file ++ return !c.has(elem) ++ } ++ return true ++} ++ ++// srcFile represents a source file ++type srcFile struct { ++ name string ++ src []byte ++} ++ ++// filterFn is a helper for filter ++type filterFn func(codeElem) bool ++ ++// filter parses and filters Go source code from src, removing top ++// level declarations using keep as predicate. ++// For src parameter, please see docs for parser.ParseFile. ++func filter(src interface{}, keep filterFn) ([]byte, error) { ++ // Parse the src into an ast ++ fset := token.NewFileSet() ++ f, err := parser.ParseFile(fset, "", src, parser.ParseComments) ++ if err != nil { ++ return nil, err ++ } ++ cmap := ast.NewCommentMap(fset, f, f.Comments) ++ ++ // Group const/type specs on adjacent lines ++ var groups specGroups = make(map[string]int) ++ var groupID int ++ ++ decls := f.Decls ++ f.Decls = f.Decls[:0] ++ for _, decl := range decls { ++ switch decl := decl.(type) { ++ case *ast.GenDecl: ++ // Filter imports, consts, types, vars ++ specs := decl.Specs ++ decl.Specs = decl.Specs[:0] ++ for i, spec := range specs { ++ elem, err := newCodeElem(decl.Tok, spec) ++ if err != nil { ++ return nil, err ++ } ++ ++ // Create new group if there are empty lines between this and the previous spec ++ if i > 0 && fset.Position(specs[i-1].End()).Line < fset.Position(spec.Pos()).Line-1 { ++ groupID++ ++ } ++ ++ // Check if we should keep this spec ++ if keep(elem) { ++ decl.Specs = append(decl.Specs, spec) ++ groups.add(elem.src, groupID) ++ } ++ } ++ // Check if we should keep this decl ++ if len(decl.Specs) > 0 { ++ f.Decls = append(f.Decls, decl) ++ } ++ case *ast.FuncDecl: ++ // Filter funcs ++ elem, err := newCodeElem(token.FUNC, decl) ++ if err != nil { ++ return nil, err ++ } ++ if keep(elem) { ++ f.Decls = append(f.Decls, decl) ++ } ++ } ++ } ++ ++ // Filter file level comments ++ if cmap[f] != nil { ++ commentGroups := cmap[f] ++ cmap[f] = cmap[f][:0] ++ for _, cGrp := range commentGroups { ++ if keep(codeElem{token.COMMENT, cGrp.Text()}) { ++ cmap[f] = append(cmap[f], cGrp) ++ } ++ } ++ } ++ f.Comments = cmap.Filter(f).Comments() ++ ++ // Generate code for the filtered ast ++ var buf bytes.Buffer ++ if err = format.Node(&buf, fset, f); err != nil { ++ return nil, err ++ } ++ ++ groupedSrc, err := groups.filterEmptyLines(&buf) ++ if err != nil { ++ return nil, err ++ } ++ ++ return filterImports(groupedSrc) ++} ++ ++// getCommonSet returns the set of consts, types, and funcs that are present in every file. ++func getCommonSet(files []srcFile) (*codeSet, error) { ++ if len(files) == 0 { ++ return nil, fmt.Errorf("no files provided") ++ } ++ // Use the first architecture file as the baseline ++ baseSet, err := getCodeSet(files[0].src) ++ if err != nil { ++ return nil, err ++ } ++ ++ // Compare baseline set with other architecture files: discard any element, ++ // that doesn't exist in other architecture files. ++ for _, f := range files[1:] { ++ set, err := getCodeSet(f.src) ++ if err != nil { ++ return nil, err ++ } ++ ++ baseSet = baseSet.intersection(set) ++ } ++ return baseSet, nil ++} ++ ++// getCodeSet returns the set of all top-level consts, types, and funcs from src. ++// src must be string, []byte, or io.Reader (see go/parser.ParseFile docs) ++func getCodeSet(src interface{}) (*codeSet, error) { ++ set := newCodeSet() ++ ++ fset := token.NewFileSet() ++ f, err := parser.ParseFile(fset, "", src, parser.ParseComments) ++ if err != nil { ++ return nil, err ++ } ++ ++ for _, decl := range f.Decls { ++ switch decl := decl.(type) { ++ case *ast.GenDecl: ++ // Add const, and type declarations ++ if !(decl.Tok == token.CONST || decl.Tok == token.TYPE) { ++ break ++ } ++ ++ for _, spec := range decl.Specs { ++ elem, err := newCodeElem(decl.Tok, spec) ++ if err != nil { ++ return nil, err ++ } ++ ++ set.add(elem) ++ } ++ case *ast.FuncDecl: ++ // Add func declarations ++ elem, err := newCodeElem(token.FUNC, decl) ++ if err != nil { ++ return nil, err ++ } ++ ++ set.add(elem) ++ } ++ } ++ ++ // Add file level comments ++ cmap := ast.NewCommentMap(fset, f, f.Comments) ++ for _, cGrp := range cmap[f] { ++ set.add(codeElem{token.COMMENT, cGrp.Text()}) ++ } ++ ++ return set, nil ++} ++ ++// importName returns the identifier (PackageName) for an imported package ++func importName(iSpec *ast.ImportSpec) (string, error) { ++ if iSpec.Name == nil { ++ name, err := strconv.Unquote(iSpec.Path.Value) ++ if err != nil { ++ return "", err ++ } ++ return path.Base(name), nil ++ } ++ return iSpec.Name.Name, nil ++} ++ ++// specGroups tracks grouped const/type specs with a map of line: groupID pairs ++type specGroups map[string]int ++ ++// add spec source to group ++func (s specGroups) add(src string, groupID int) error { ++ srcBytes, err := format.Source(bytes.TrimSpace([]byte(src))) ++ if err != nil { ++ return err ++ } ++ s[string(srcBytes)] = groupID ++ return nil ++} ++ ++// filterEmptyLines removes empty lines within groups of const/type specs. ++// Returns the filtered source. ++func (s specGroups) filterEmptyLines(src io.Reader) ([]byte, error) { ++ scanner := bufio.NewScanner(src) ++ var out bytes.Buffer ++ ++ var emptyLines bytes.Buffer ++ prevGroupID := -1 // Initialize to invalid group ++ for scanner.Scan() { ++ line := bytes.TrimSpace(scanner.Bytes()) ++ ++ if len(line) == 0 { ++ fmt.Fprintf(&emptyLines, "%s\n", scanner.Bytes()) ++ continue ++ } ++ ++ // Discard emptyLines if previous non-empty line belonged to the same ++ // group as this line ++ if src, err := format.Source(line); err == nil { ++ groupID, ok := s[string(src)] ++ if ok && groupID == prevGroupID { ++ emptyLines.Reset() ++ } ++ prevGroupID = groupID ++ } ++ ++ emptyLines.WriteTo(&out) ++ fmt.Fprintf(&out, "%s\n", scanner.Bytes()) ++ } ++ if err := scanner.Err(); err != nil { ++ return nil, err ++ } ++ return out.Bytes(), nil ++} ++ ++// filterImports removes unused imports from fileSrc, and returns a formatted src. ++func filterImports(fileSrc []byte) ([]byte, error) { ++ fset := token.NewFileSet() ++ file, err := parser.ParseFile(fset, "", fileSrc, parser.ParseComments) ++ if err != nil { ++ return nil, err ++ } ++ cmap := ast.NewCommentMap(fset, file, file.Comments) ++ ++ // create set of references to imported identifiers ++ keepImport := make(map[string]bool) ++ for _, u := range file.Unresolved { ++ keepImport[u.Name] = true ++ } ++ ++ // filter import declarations ++ decls := file.Decls ++ file.Decls = file.Decls[:0] ++ for _, decl := range decls { ++ importDecl, ok := decl.(*ast.GenDecl) ++ ++ // Keep non-import declarations ++ if !ok || importDecl.Tok != token.IMPORT { ++ file.Decls = append(file.Decls, decl) ++ continue ++ } ++ ++ // Filter the import specs ++ specs := importDecl.Specs ++ importDecl.Specs = importDecl.Specs[:0] ++ for _, spec := range specs { ++ iSpec := spec.(*ast.ImportSpec) ++ name, err := importName(iSpec) ++ if err != nil { ++ return nil, err ++ } ++ ++ if keepImport[name] { ++ importDecl.Specs = append(importDecl.Specs, iSpec) ++ } ++ } ++ if len(importDecl.Specs) > 0 { ++ file.Decls = append(file.Decls, importDecl) ++ } ++ } ++ ++ // filter file.Imports ++ imports := file.Imports ++ file.Imports = file.Imports[:0] ++ for _, spec := range imports { ++ name, err := importName(spec) ++ if err != nil { ++ return nil, err ++ } ++ ++ if keepImport[name] { ++ file.Imports = append(file.Imports, spec) ++ } ++ } ++ file.Comments = cmap.Filter(file).Comments() ++ ++ var buf bytes.Buffer ++ err = format.Node(&buf, fset, file) ++ if err != nil { ++ return nil, err ++ } ++ ++ return buf.Bytes(), nil ++} ++ ++// merge extracts duplicate code from archFiles and merges it to mergeFile. ++// 1. Construct commonSet: the set of code that is idential in all archFiles. ++// 2. Write the code in commonSet to mergedFile. ++// 3. Remove the commonSet code from all archFiles. ++func merge(mergedFile string, archFiles ...string) error { ++ // extract and validate the GOOS part of the merged filename ++ goos, ok := getValidGOOS(mergedFile) ++ if !ok { ++ return fmt.Errorf("invalid GOOS in merged file name %s", mergedFile) ++ } ++ ++ // Read architecture files ++ var inSrc []srcFile ++ for _, file := range archFiles { ++ src, err := ioutil.ReadFile(file) ++ if err != nil { ++ return fmt.Errorf("cannot read archfile %s: %w", file, err) ++ } ++ ++ inSrc = append(inSrc, srcFile{file, src}) ++ } ++ ++ // 1. Construct the set of top-level declarations common for all files ++ commonSet, err := getCommonSet(inSrc) ++ if err != nil { ++ return err ++ } ++ if commonSet.isEmpty() { ++ // No common code => do not modify any files ++ return nil ++ } ++ ++ // 2. Write the merged file ++ mergedSrc, err := filter(inSrc[0].src, commonSet.keepCommon) ++ if err != nil { ++ return err ++ } ++ ++ f, err := os.Create(mergedFile) ++ if err != nil { ++ return err ++ } ++ ++ buf := bufio.NewWriter(f) ++ fmt.Fprintln(buf, "// Code generated by mkmerge.go; DO NOT EDIT.") ++ fmt.Fprintln(buf) ++ fmt.Fprintf(buf, "// +build %s\n", goos) ++ fmt.Fprintln(buf) ++ buf.Write(mergedSrc) ++ ++ err = buf.Flush() ++ if err != nil { ++ return err ++ } ++ err = f.Close() ++ if err != nil { ++ return err ++ } ++ ++ // 3. Remove duplicate declarations from the architecture files ++ for _, inFile := range inSrc { ++ src, err := filter(inFile.src, commonSet.keepArchSpecific) ++ if err != nil { ++ return err ++ } ++ err = ioutil.WriteFile(inFile.name, src, 0644) ++ if err != nil { ++ return err ++ } ++ } ++ return nil ++} ++ ++func main() { ++ var mergedFile string ++ flag.StringVar(&mergedFile, "out", "", "Write merged code to `FILE`") ++ flag.Parse() ++ ++ // Expand wildcards ++ var filenames []string ++ for _, arg := range flag.Args() { ++ matches, err := filepath.Glob(arg) ++ if err != nil { ++ fmt.Fprintf(os.Stderr, "Invalid command line argument %q: %v\n", arg, err) ++ os.Exit(1) ++ } ++ filenames = append(filenames, matches...) ++ } ++ ++ if len(filenames) < 2 { ++ // No need to merge ++ return ++ } ++ ++ err := merge(mergedFile, filenames...) ++ if err != nil { ++ fmt.Fprintf(os.Stderr, "Merge failed with error: %v\n", err) ++ os.Exit(1) ++ } ++} +diff --git a/vendor/golang.org/x/sys/unix/mkmerge_test.go b/vendor/golang.org/x/sys/unix/mkmerge_test.go +new file mode 100644 +index 0000000..e628625 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/mkmerge_test.go +@@ -0,0 +1,505 @@ ++// Copyright 2020 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build ignore ++ ++// Test cases for mkmerge.go. ++// Usage: ++// $ go test mkmerge.go mkmerge_test.go ++package main ++ ++import ( ++ "bytes" ++ "fmt" ++ "go/parser" ++ "go/token" ++ "html/template" ++ "strings" ++ "testing" ++) ++ ++func TestImports(t *testing.T) { ++ t.Run("importName", func(t *testing.T) { ++ cases := []struct { ++ src string ++ ident string ++ }{ ++ {`"syscall"`, "syscall"}, ++ {`. "foobar"`, "."}, ++ {`"go/ast"`, "ast"}, ++ {`moo "go/format"`, "moo"}, ++ {`. "go/token"`, "."}, ++ {`"golang.org/x/sys/unix"`, "unix"}, ++ {`nix "golang.org/x/sys/unix"`, "nix"}, ++ {`_ "golang.org/x/sys/unix"`, "_"}, ++ } ++ ++ for _, c := range cases { ++ pkgSrc := fmt.Sprintf("package main\nimport %s", c.src) ++ ++ f, err := parser.ParseFile(token.NewFileSet(), "", pkgSrc, parser.ImportsOnly) ++ if err != nil { ++ t.Error(err) ++ continue ++ } ++ if len(f.Imports) != 1 { ++ t.Errorf("Got %d imports, expected 1", len(f.Imports)) ++ continue ++ } ++ ++ got, err := importName(f.Imports[0]) ++ if err != nil { ++ t.Fatal(err) ++ } ++ if got != c.ident { ++ t.Errorf("Got %q, expected %q", got, c.ident) ++ } ++ } ++ }) ++ ++ t.Run("filterImports", func(t *testing.T) { ++ cases := []struct{ before, after string }{ ++ {`package test ++ ++ import ( ++ "foo" ++ "bar" ++ )`, ++ "package test\n"}, ++ {`package test ++ ++ import ( ++ "foo" ++ "bar" ++ ) ++ ++ func useFoo() { foo.Usage() }`, ++ `package test ++ ++import ( ++ "foo" ++) ++ ++func useFoo() { foo.Usage() } ++`}, ++ } ++ for _, c := range cases { ++ got, err := filterImports([]byte(c.before)) ++ if err != nil { ++ t.Error(err) ++ } ++ ++ if string(got) != c.after { ++ t.Errorf("Got:\n%s\nExpected:\n%s\n", got, c.after) ++ } ++ } ++ }) ++} ++ ++func TestMerge(t *testing.T) { ++ // Input architecture files ++ inTmpl := template.Must(template.New("input").Parse(` ++// Package comments ++ ++// build directives for arch{{.}} ++ ++// +build goos,arch{{.}} ++ ++package main ++ ++/* ++#include ++#include ++int utimes(uintptr_t, uintptr_t); ++int utimensat(int, uintptr_t, uintptr_t, int); ++*/ ++import "C" ++ ++// The imports ++import ( ++ "commonDep" ++ "uniqueDep{{.}}" ++) ++ ++// Vars ++var ( ++ commonVar = commonDep.Use("common") ++ ++ uniqueVar{{.}} = "unique{{.}}" ++) ++ ++// Common free standing comment ++ ++// Common comment ++const COMMON_INDEPENDENT = 1234 ++const UNIQUE_INDEPENDENT_{{.}} = "UNIQUE_INDEPENDENT_{{.}}" ++ ++// Group comment ++const ( ++ COMMON_GROUP = "COMMON_GROUP" ++ UNIQUE_GROUP_{{.}} = "UNIQUE_GROUP_{{.}}" ++) ++ ++// Group2 comment ++const ( ++ UNIQUE_GROUP21_{{.}} = "UNIQUE_GROUP21_{{.}}" ++ UNIQUE_GROUP22_{{.}} = "UNIQUE_GROUP22_{{.}}" ++) ++ ++// Group3 comment ++const ( ++ sub1Common1 = 11 ++ sub1Unique2{{.}} = 12 ++ sub1Common3_LONG = 13 ++ ++ sub2Unique1{{.}} = 21 ++ sub2Common2 = 22 ++ sub2Common3 = 23 ++ sub2Unique4{{.}} = 24 ++) ++ ++type commonInt int ++ ++type uniqueInt{{.}} int ++ ++func commonF() string { ++ return commonDep.Use("common") ++ } ++ ++func uniqueF() string { ++ C.utimes(0, 0) ++ return uniqueDep{{.}}.Use("{{.}}") ++ } ++ ++// Group4 comment ++const ( ++ sub3Common1 = 31 ++ sub3Unique2{{.}} = 32 ++ sub3Unique3{{.}} = 33 ++ sub3Common4 = 34 ++ ++ sub4Common1, sub4Unique2{{.}} = 41, 42 ++ sub4Unique3{{.}}, sub4Common4 = 43, 44 ++) ++`)) ++ ++ // Filtered architecture files ++ outTmpl := template.Must(template.New("output").Parse(`// Package comments ++ ++// build directives for arch{{.}} ++ ++// +build goos,arch{{.}} ++ ++package main ++ ++/* ++#include ++#include ++int utimes(uintptr_t, uintptr_t); ++int utimensat(int, uintptr_t, uintptr_t, int); ++*/ ++import "C" ++ ++// The imports ++import ( ++ "commonDep" ++ "uniqueDep{{.}}" ++) ++ ++// Vars ++var ( ++ commonVar = commonDep.Use("common") ++ ++ uniqueVar{{.}} = "unique{{.}}" ++) ++ ++const UNIQUE_INDEPENDENT_{{.}} = "UNIQUE_INDEPENDENT_{{.}}" ++ ++// Group comment ++const ( ++ UNIQUE_GROUP_{{.}} = "UNIQUE_GROUP_{{.}}" ++) ++ ++// Group2 comment ++const ( ++ UNIQUE_GROUP21_{{.}} = "UNIQUE_GROUP21_{{.}}" ++ UNIQUE_GROUP22_{{.}} = "UNIQUE_GROUP22_{{.}}" ++) ++ ++// Group3 comment ++const ( ++ sub1Unique2{{.}} = 12 ++ ++ sub2Unique1{{.}} = 21 ++ sub2Unique4{{.}} = 24 ++) ++ ++type uniqueInt{{.}} int ++ ++func uniqueF() string { ++ C.utimes(0, 0) ++ return uniqueDep{{.}}.Use("{{.}}") ++} ++ ++// Group4 comment ++const ( ++ sub3Unique2{{.}} = 32 ++ sub3Unique3{{.}} = 33 ++ ++ sub4Common1, sub4Unique2{{.}} = 41, 42 ++ sub4Unique3{{.}}, sub4Common4 = 43, 44 ++) ++`)) ++ ++ const mergedFile = `// Package comments ++ ++package main ++ ++// The imports ++import ( ++ "commonDep" ++) ++ ++// Common free standing comment ++ ++// Common comment ++const COMMON_INDEPENDENT = 1234 ++ ++// Group comment ++const ( ++ COMMON_GROUP = "COMMON_GROUP" ++) ++ ++// Group3 comment ++const ( ++ sub1Common1 = 11 ++ sub1Common3_LONG = 13 ++ ++ sub2Common2 = 22 ++ sub2Common3 = 23 ++) ++ ++type commonInt int ++ ++func commonF() string { ++ return commonDep.Use("common") ++} ++ ++// Group4 comment ++const ( ++ sub3Common1 = 31 ++ sub3Common4 = 34 ++) ++` ++ ++ // Generate source code for different "architectures" ++ var inFiles, outFiles []srcFile ++ for _, arch := range strings.Fields("A B C D") { ++ buf := new(bytes.Buffer) ++ err := inTmpl.Execute(buf, arch) ++ if err != nil { ++ t.Fatal(err) ++ } ++ inFiles = append(inFiles, srcFile{"file" + arch, buf.Bytes()}) ++ ++ buf = new(bytes.Buffer) ++ err = outTmpl.Execute(buf, arch) ++ if err != nil { ++ t.Fatal(err) ++ } ++ outFiles = append(outFiles, srcFile{"file" + arch, buf.Bytes()}) ++ } ++ ++ t.Run("getCodeSet", func(t *testing.T) { ++ got, err := getCodeSet(inFiles[0].src) ++ if err != nil { ++ t.Fatal(err) ++ } ++ ++ expectedElems := []codeElem{ ++ {token.COMMENT, "Package comments\n"}, ++ {token.COMMENT, "build directives for archA\n"}, ++ {token.COMMENT, "+build goos,archA\n"}, ++ {token.CONST, `COMMON_INDEPENDENT = 1234`}, ++ {token.CONST, `UNIQUE_INDEPENDENT_A = "UNIQUE_INDEPENDENT_A"`}, ++ {token.CONST, `COMMON_GROUP = "COMMON_GROUP"`}, ++ {token.CONST, `UNIQUE_GROUP_A = "UNIQUE_GROUP_A"`}, ++ {token.CONST, `UNIQUE_GROUP21_A = "UNIQUE_GROUP21_A"`}, ++ {token.CONST, `UNIQUE_GROUP22_A = "UNIQUE_GROUP22_A"`}, ++ {token.CONST, `sub1Common1 = 11`}, ++ {token.CONST, `sub1Unique2A = 12`}, ++ {token.CONST, `sub1Common3_LONG = 13`}, ++ {token.CONST, `sub2Unique1A = 21`}, ++ {token.CONST, `sub2Common2 = 22`}, ++ {token.CONST, `sub2Common3 = 23`}, ++ {token.CONST, `sub2Unique4A = 24`}, ++ {token.CONST, `sub3Common1 = 31`}, ++ {token.CONST, `sub3Unique2A = 32`}, ++ {token.CONST, `sub3Unique3A = 33`}, ++ {token.CONST, `sub3Common4 = 34`}, ++ {token.CONST, `sub4Common1, sub4Unique2A = 41, 42`}, ++ {token.CONST, `sub4Unique3A, sub4Common4 = 43, 44`}, ++ {token.TYPE, `commonInt int`}, ++ {token.TYPE, `uniqueIntA int`}, ++ {token.FUNC, `func commonF() string { ++ return commonDep.Use("common") ++}`}, ++ {token.FUNC, `func uniqueF() string { ++ C.utimes(0, 0) ++ return uniqueDepA.Use("A") ++}`}, ++ } ++ expected := newCodeSet() ++ for _, d := range expectedElems { ++ expected.add(d) ++ } ++ ++ if len(got.set) != len(expected.set) { ++ t.Errorf("Got %d codeElems, expected %d", len(got.set), len(expected.set)) ++ } ++ for expElem := range expected.set { ++ if !got.has(expElem) { ++ t.Errorf("Didn't get expected codeElem %#v", expElem) ++ } ++ } ++ for gotElem := range got.set { ++ if !expected.has(gotElem) { ++ t.Errorf("Got unexpected codeElem %#v", gotElem) ++ } ++ } ++ }) ++ ++ t.Run("getCommonSet", func(t *testing.T) { ++ got, err := getCommonSet(inFiles) ++ if err != nil { ++ t.Fatal(err) ++ } ++ ++ expected := newCodeSet() ++ expected.add(codeElem{token.COMMENT, "Package comments\n"}) ++ expected.add(codeElem{token.CONST, `COMMON_INDEPENDENT = 1234`}) ++ expected.add(codeElem{token.CONST, `COMMON_GROUP = "COMMON_GROUP"`}) ++ expected.add(codeElem{token.CONST, `sub1Common1 = 11`}) ++ expected.add(codeElem{token.CONST, `sub1Common3_LONG = 13`}) ++ expected.add(codeElem{token.CONST, `sub2Common2 = 22`}) ++ expected.add(codeElem{token.CONST, `sub2Common3 = 23`}) ++ expected.add(codeElem{token.CONST, `sub3Common1 = 31`}) ++ expected.add(codeElem{token.CONST, `sub3Common4 = 34`}) ++ expected.add(codeElem{token.TYPE, `commonInt int`}) ++ expected.add(codeElem{token.FUNC, `func commonF() string { ++ return commonDep.Use("common") ++}`}) ++ ++ if len(got.set) != len(expected.set) { ++ t.Errorf("Got %d codeElems, expected %d", len(got.set), len(expected.set)) ++ } ++ for expElem := range expected.set { ++ if !got.has(expElem) { ++ t.Errorf("Didn't get expected codeElem %#v", expElem) ++ } ++ } ++ for gotElem := range got.set { ++ if !expected.has(gotElem) { ++ t.Errorf("Got unexpected codeElem %#v", gotElem) ++ } ++ } ++ }) ++ ++ t.Run("filter(keepCommon)", func(t *testing.T) { ++ commonSet, err := getCommonSet(inFiles) ++ if err != nil { ++ t.Fatal(err) ++ } ++ ++ got, err := filter(inFiles[0].src, commonSet.keepCommon) ++ expected := []byte(mergedFile) ++ ++ if !bytes.Equal(got, expected) { ++ t.Errorf("Got:\n%s\nExpected:\n%s", addLineNr(got), addLineNr(expected)) ++ diffLines(t, got, expected) ++ } ++ }) ++ ++ t.Run("filter(keepArchSpecific)", func(t *testing.T) { ++ commonSet, err := getCommonSet(inFiles) ++ if err != nil { ++ t.Fatal(err) ++ } ++ ++ for i := range inFiles { ++ got, err := filter(inFiles[i].src, commonSet.keepArchSpecific) ++ if err != nil { ++ t.Fatal(err) ++ } ++ ++ expected := outFiles[i].src ++ ++ if !bytes.Equal(got, expected) { ++ t.Errorf("Got:\n%s\nExpected:\n%s", addLineNr(got), addLineNr(expected)) ++ diffLines(t, got, expected) ++ } ++ } ++ }) ++} ++ ++func TestMergedName(t *testing.T) { ++ t.Run("getValidGOOS", func(t *testing.T) { ++ testcases := []struct { ++ filename, goos string ++ ok bool ++ }{ ++ {"zerrors_aix.go", "aix", true}, ++ {"zerrors_darwin.go", "darwin", true}, ++ {"zerrors_dragonfly.go", "dragonfly", true}, ++ {"zerrors_freebsd.go", "freebsd", true}, ++ {"zerrors_linux.go", "linux", true}, ++ {"zerrors_netbsd.go", "netbsd", true}, ++ {"zerrors_openbsd.go", "openbsd", true}, ++ {"zerrors_solaris.go", "solaris", true}, ++ {"zerrors_multics.go", "", false}, ++ } ++ for _, tc := range testcases { ++ goos, ok := getValidGOOS(tc.filename) ++ if goos != tc.goos { ++ t.Errorf("got GOOS %q, expected %q", goos, tc.goos) ++ } ++ if ok != tc.ok { ++ t.Errorf("got ok %v, expected %v", ok, tc.ok) ++ } ++ } ++ }) ++} ++ ++// Helper functions to diff test sources ++ ++func diffLines(t *testing.T, got, expected []byte) { ++ t.Helper() ++ ++ gotLines := bytes.Split(got, []byte{'\n'}) ++ expLines := bytes.Split(expected, []byte{'\n'}) ++ ++ i := 0 ++ for i < len(gotLines) && i < len(expLines) { ++ if !bytes.Equal(gotLines[i], expLines[i]) { ++ t.Errorf("Line %d: Got:\n%q\nExpected:\n%q", i+1, gotLines[i], expLines[i]) ++ return ++ } ++ i++ ++ } ++ ++ if i < len(gotLines) && i >= len(expLines) { ++ t.Errorf("Line %d: got %q, expected EOF", i+1, gotLines[i]) ++ } ++ if i >= len(gotLines) && i < len(expLines) { ++ t.Errorf("Line %d: got EOF, expected %q", i+1, gotLines[i]) ++ } ++} ++ ++func addLineNr(src []byte) []byte { ++ lines := bytes.Split(src, []byte("\n")) ++ for i, line := range lines { ++ lines[i] = []byte(fmt.Sprintf("%d: %s", i+1, line)) ++ } ++ return bytes.Join(lines, []byte("\n")) ++} +diff --git a/vendor/golang.org/x/sys/unix/mkpost.go b/vendor/golang.org/x/sys/unix/mkpost.go +new file mode 100644 +index 0000000..5ee1a16 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/mkpost.go +@@ -0,0 +1,127 @@ ++// Copyright 2016 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build ignore ++ ++// mkpost processes the output of cgo -godefs to ++// modify the generated types. It is used to clean up ++// the sys API in an architecture specific manner. ++// ++// mkpost is run after cgo -godefs; see README.md. ++package main ++ ++import ( ++ "bytes" ++ "fmt" ++ "go/format" ++ "io/ioutil" ++ "log" ++ "os" ++ "regexp" ++) ++ ++func main() { ++ // Get the OS and architecture (using GOARCH_TARGET if it exists) ++ goos := os.Getenv("GOOS") ++ goarch := os.Getenv("GOARCH_TARGET") ++ if goarch == "" { ++ goarch = os.Getenv("GOARCH") ++ } ++ // Check that we are using the Docker-based build system if we should be. ++ if goos == "linux" { ++ if os.Getenv("GOLANG_SYS_BUILD") != "docker" { ++ os.Stderr.WriteString("In the Docker-based build system, mkpost should not be called directly.\n") ++ os.Stderr.WriteString("See README.md\n") ++ os.Exit(1) ++ } ++ } ++ ++ b, err := ioutil.ReadAll(os.Stdin) ++ if err != nil { ++ log.Fatal(err) ++ } ++ ++ if goos == "aix" { ++ // Replace type of Atim, Mtim and Ctim by Timespec in Stat_t ++ // to avoid having both StTimespec and Timespec. ++ sttimespec := regexp.MustCompile(`_Ctype_struct_st_timespec`) ++ b = sttimespec.ReplaceAll(b, []byte("Timespec")) ++ } ++ ++ // Intentionally export __val fields in Fsid and Sigset_t ++ valRegex := regexp.MustCompile(`type (Fsid|Sigset_t) struct {(\s+)X__(bits|val)(\s+\S+\s+)}`) ++ b = valRegex.ReplaceAll(b, []byte("type $1 struct {${2}Val$4}")) ++ ++ // Intentionally export __fds_bits field in FdSet ++ fdSetRegex := regexp.MustCompile(`type (FdSet) struct {(\s+)X__fds_bits(\s+\S+\s+)}`) ++ b = fdSetRegex.ReplaceAll(b, []byte("type $1 struct {${2}Bits$3}")) ++ ++ // If we have empty Ptrace structs, we should delete them. Only s390x emits ++ // nonempty Ptrace structs. ++ ptraceRexexp := regexp.MustCompile(`type Ptrace((Psw|Fpregs|Per) struct {\s*})`) ++ b = ptraceRexexp.ReplaceAll(b, nil) ++ ++ // Replace the control_regs union with a blank identifier for now. ++ controlRegsRegex := regexp.MustCompile(`(Control_regs)\s+\[0\]uint64`) ++ b = controlRegsRegex.ReplaceAll(b, []byte("_ [0]uint64")) ++ ++ // Remove fields that are added by glibc ++ // Note that this is unstable as the identifers are private. ++ removeFieldsRegex := regexp.MustCompile(`X__glibc\S*`) ++ b = removeFieldsRegex.ReplaceAll(b, []byte("_")) ++ ++ // Convert [65]int8 to [65]byte in Utsname members to simplify ++ // conversion to string; see golang.org/issue/20753 ++ convertUtsnameRegex := regexp.MustCompile(`((Sys|Node|Domain)name|Release|Version|Machine)(\s+)\[(\d+)\]u?int8`) ++ b = convertUtsnameRegex.ReplaceAll(b, []byte("$1$3[$4]byte")) ++ ++ // Convert [n]int8 to [n]byte in Statvfs_t members to simplify ++ // conversion to string. ++ convertStatvfsRegex := regexp.MustCompile(`((Fstype|Mnton|Mntfrom)name)(\s+)\[(\d+)\]int8`) ++ b = convertStatvfsRegex.ReplaceAll(b, []byte("$1$3[$4]byte")) ++ ++ // Convert [1024]int8 to [1024]byte in Ptmget members ++ convertPtmget := regexp.MustCompile(`([SC]n)(\s+)\[(\d+)\]u?int8`) ++ b = convertPtmget.ReplaceAll(b, []byte("$1[$3]byte")) ++ ++ // Remove spare fields (e.g. in Statx_t) ++ spareFieldsRegex := regexp.MustCompile(`X__spare\S*`) ++ b = spareFieldsRegex.ReplaceAll(b, []byte("_")) ++ ++ // Remove cgo padding fields ++ removePaddingFieldsRegex := regexp.MustCompile(`Pad_cgo_\d+`) ++ b = removePaddingFieldsRegex.ReplaceAll(b, []byte("_")) ++ ++ // Remove padding, hidden, or unused fields ++ removeFieldsRegex = regexp.MustCompile(`\b(X_\S+|Padding)`) ++ b = removeFieldsRegex.ReplaceAll(b, []byte("_")) ++ ++ // Remove the first line of warning from cgo ++ b = b[bytes.IndexByte(b, '\n')+1:] ++ // Modify the command in the header to include: ++ // mkpost, our own warning, and a build tag. ++ replacement := fmt.Sprintf(`$1 | go run mkpost.go ++// Code generated by the command above; see README.md. DO NOT EDIT. ++ ++// +build %s,%s`, goarch, goos) ++ cgoCommandRegex := regexp.MustCompile(`(cgo -godefs .*)`) ++ b = cgoCommandRegex.ReplaceAll(b, []byte(replacement)) ++ ++ // Rename Stat_t time fields ++ if goos == "freebsd" && goarch == "386" { ++ // Hide Stat_t.[AMCB]tim_ext fields ++ renameStatTimeExtFieldsRegex := regexp.MustCompile(`[AMCB]tim_ext`) ++ b = renameStatTimeExtFieldsRegex.ReplaceAll(b, []byte("_")) ++ } ++ renameStatTimeFieldsRegex := regexp.MustCompile(`([AMCB])(?:irth)?time?(?:spec)?\s+(Timespec|StTimespec)`) ++ b = renameStatTimeFieldsRegex.ReplaceAll(b, []byte("${1}tim ${2}")) ++ ++ // gofmt ++ b, err = format.Source(b) ++ if err != nil { ++ log.Fatal(err) ++ } ++ ++ os.Stdout.Write(b) ++} +diff --git a/vendor/golang.org/x/sys/unix/mksyscall.go b/vendor/golang.org/x/sys/unix/mksyscall.go +new file mode 100644 +index 0000000..9e540cc +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/mksyscall.go +@@ -0,0 +1,402 @@ ++// Copyright 2018 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build ignore ++ ++/* ++This program reads a file containing function prototypes ++(like syscall_darwin.go) and generates system call bodies. ++The prototypes are marked by lines beginning with "//sys" ++and read like func declarations if //sys is replaced by func, but: ++ * The parameter lists must give a name for each argument. ++ This includes return parameters. ++ * The parameter lists must give a type for each argument: ++ the (x, y, z int) shorthand is not allowed. ++ * If the return parameter is an error number, it must be named errno. ++ ++A line beginning with //sysnb is like //sys, except that the ++goroutine will not be suspended during the execution of the system ++call. This must only be used for system calls which can never ++block, as otherwise the system call could cause all goroutines to ++hang. ++*/ ++package main ++ ++import ( ++ "bufio" ++ "flag" ++ "fmt" ++ "os" ++ "regexp" ++ "strings" ++) ++ ++var ( ++ b32 = flag.Bool("b32", false, "32bit big-endian") ++ l32 = flag.Bool("l32", false, "32bit little-endian") ++ plan9 = flag.Bool("plan9", false, "plan9") ++ openbsd = flag.Bool("openbsd", false, "openbsd") ++ netbsd = flag.Bool("netbsd", false, "netbsd") ++ dragonfly = flag.Bool("dragonfly", false, "dragonfly") ++ arm = flag.Bool("arm", false, "arm") // 64-bit value should use (even, odd)-pair ++ tags = flag.String("tags", "", "build tags") ++ filename = flag.String("output", "", "output file name (standard output if omitted)") ++) ++ ++// cmdLine returns this programs's commandline arguments ++func cmdLine() string { ++ return "go run mksyscall.go " + strings.Join(os.Args[1:], " ") ++} ++ ++// buildTags returns build tags ++func buildTags() string { ++ return *tags ++} ++ ++// Param is function parameter ++type Param struct { ++ Name string ++ Type string ++} ++ ++// usage prints the program usage ++func usage() { ++ fmt.Fprintf(os.Stderr, "usage: go run mksyscall.go [-b32 | -l32] [-tags x,y] [file ...]\n") ++ os.Exit(1) ++} ++ ++// parseParamList parses parameter list and returns a slice of parameters ++func parseParamList(list string) []string { ++ list = strings.TrimSpace(list) ++ if list == "" { ++ return []string{} ++ } ++ return regexp.MustCompile(`\s*,\s*`).Split(list, -1) ++} ++ ++// parseParam splits a parameter into name and type ++func parseParam(p string) Param { ++ ps := regexp.MustCompile(`^(\S*) (\S*)$`).FindStringSubmatch(p) ++ if ps == nil { ++ fmt.Fprintf(os.Stderr, "malformed parameter: %s\n", p) ++ os.Exit(1) ++ } ++ return Param{ps[1], ps[2]} ++} ++ ++func main() { ++ // Get the OS and architecture (using GOARCH_TARGET if it exists) ++ goos := os.Getenv("GOOS") ++ if goos == "" { ++ fmt.Fprintln(os.Stderr, "GOOS not defined in environment") ++ os.Exit(1) ++ } ++ goarch := os.Getenv("GOARCH_TARGET") ++ if goarch == "" { ++ goarch = os.Getenv("GOARCH") ++ } ++ ++ // Check that we are using the Docker-based build system if we should ++ if goos == "linux" { ++ if os.Getenv("GOLANG_SYS_BUILD") != "docker" { ++ fmt.Fprintf(os.Stderr, "In the Docker-based build system, mksyscall should not be called directly.\n") ++ fmt.Fprintf(os.Stderr, "See README.md\n") ++ os.Exit(1) ++ } ++ } ++ ++ flag.Usage = usage ++ flag.Parse() ++ if len(flag.Args()) <= 0 { ++ fmt.Fprintf(os.Stderr, "no files to parse provided\n") ++ usage() ++ } ++ ++ endianness := "" ++ if *b32 { ++ endianness = "big-endian" ++ } else if *l32 { ++ endianness = "little-endian" ++ } ++ ++ libc := false ++ if goos == "darwin" && (strings.Contains(buildTags(), ",go1.12") || strings.Contains(buildTags(), ",go1.13")) { ++ libc = true ++ } ++ trampolines := map[string]bool{} ++ ++ text := "" ++ for _, path := range flag.Args() { ++ file, err := os.Open(path) ++ if err != nil { ++ fmt.Fprintf(os.Stderr, err.Error()) ++ os.Exit(1) ++ } ++ s := bufio.NewScanner(file) ++ for s.Scan() { ++ t := s.Text() ++ t = strings.TrimSpace(t) ++ t = regexp.MustCompile(`\s+`).ReplaceAllString(t, ` `) ++ nonblock := regexp.MustCompile(`^\/\/sysnb `).FindStringSubmatch(t) ++ if regexp.MustCompile(`^\/\/sys `).FindStringSubmatch(t) == nil && nonblock == nil { ++ continue ++ } ++ ++ // Line must be of the form ++ // func Open(path string, mode int, perm int) (fd int, errno error) ++ // Split into name, in params, out params. ++ f := regexp.MustCompile(`^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*((?i)SYS_[A-Z0-9_]+))?$`).FindStringSubmatch(t) ++ if f == nil { ++ fmt.Fprintf(os.Stderr, "%s:%s\nmalformed //sys declaration\n", path, t) ++ os.Exit(1) ++ } ++ funct, inps, outps, sysname := f[2], f[3], f[4], f[5] ++ ++ // ClockGettime doesn't have a syscall number on Darwin, only generate libc wrappers. ++ if goos == "darwin" && !libc && funct == "ClockGettime" { ++ continue ++ } ++ ++ // Split argument lists on comma. ++ in := parseParamList(inps) ++ out := parseParamList(outps) ++ ++ // Try in vain to keep people from editing this file. ++ // The theory is that they jump into the middle of the file ++ // without reading the header. ++ text += "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n" ++ ++ // Go function header. ++ outDecl := "" ++ if len(out) > 0 { ++ outDecl = fmt.Sprintf(" (%s)", strings.Join(out, ", ")) ++ } ++ text += fmt.Sprintf("func %s(%s)%s {\n", funct, strings.Join(in, ", "), outDecl) ++ ++ // Check if err return available ++ errvar := "" ++ for _, param := range out { ++ p := parseParam(param) ++ if p.Type == "error" { ++ errvar = p.Name ++ break ++ } ++ } ++ ++ // Prepare arguments to Syscall. ++ var args []string ++ n := 0 ++ for _, param := range in { ++ p := parseParam(param) ++ if regexp.MustCompile(`^\*`).FindStringSubmatch(p.Type) != nil { ++ args = append(args, "uintptr(unsafe.Pointer("+p.Name+"))") ++ } else if p.Type == "string" && errvar != "" { ++ text += fmt.Sprintf("\tvar _p%d *byte\n", n) ++ text += fmt.Sprintf("\t_p%d, %s = BytePtrFromString(%s)\n", n, errvar, p.Name) ++ text += fmt.Sprintf("\tif %s != nil {\n\t\treturn\n\t}\n", errvar) ++ args = append(args, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n)) ++ n++ ++ } else if p.Type == "string" { ++ fmt.Fprintf(os.Stderr, path+":"+funct+" uses string arguments, but has no error return\n") ++ text += fmt.Sprintf("\tvar _p%d *byte\n", n) ++ text += fmt.Sprintf("\t_p%d, _ = BytePtrFromString(%s)\n", n, p.Name) ++ args = append(args, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n)) ++ n++ ++ } else if regexp.MustCompile(`^\[\](.*)`).FindStringSubmatch(p.Type) != nil { ++ // Convert slice into pointer, length. ++ // Have to be careful not to take address of &a[0] if len == 0: ++ // pass dummy pointer in that case. ++ // Used to pass nil, but some OSes or simulators reject write(fd, nil, 0). ++ text += fmt.Sprintf("\tvar _p%d unsafe.Pointer\n", n) ++ text += fmt.Sprintf("\tif len(%s) > 0 {\n\t\t_p%d = unsafe.Pointer(&%s[0])\n\t}", p.Name, n, p.Name) ++ text += fmt.Sprintf(" else {\n\t\t_p%d = unsafe.Pointer(&_zero)\n\t}\n", n) ++ args = append(args, fmt.Sprintf("uintptr(_p%d)", n), fmt.Sprintf("uintptr(len(%s))", p.Name)) ++ n++ ++ } else if p.Type == "int64" && (*openbsd || *netbsd) { ++ args = append(args, "0") ++ if endianness == "big-endian" { ++ args = append(args, fmt.Sprintf("uintptr(%s>>32)", p.Name), fmt.Sprintf("uintptr(%s)", p.Name)) ++ } else if endianness == "little-endian" { ++ args = append(args, fmt.Sprintf("uintptr(%s)", p.Name), fmt.Sprintf("uintptr(%s>>32)", p.Name)) ++ } else { ++ args = append(args, fmt.Sprintf("uintptr(%s)", p.Name)) ++ } ++ } else if p.Type == "int64" && *dragonfly { ++ if regexp.MustCompile(`^(?i)extp(read|write)`).FindStringSubmatch(funct) == nil { ++ args = append(args, "0") ++ } ++ if endianness == "big-endian" { ++ args = append(args, fmt.Sprintf("uintptr(%s>>32)", p.Name), fmt.Sprintf("uintptr(%s)", p.Name)) ++ } else if endianness == "little-endian" { ++ args = append(args, fmt.Sprintf("uintptr(%s)", p.Name), fmt.Sprintf("uintptr(%s>>32)", p.Name)) ++ } else { ++ args = append(args, fmt.Sprintf("uintptr(%s)", p.Name)) ++ } ++ } else if (p.Type == "int64" || p.Type == "uint64") && endianness != "" { ++ if len(args)%2 == 1 && *arm { ++ // arm abi specifies 64-bit argument uses ++ // (even, odd) pair ++ args = append(args, "0") ++ } ++ if endianness == "big-endian" { ++ args = append(args, fmt.Sprintf("uintptr(%s>>32)", p.Name), fmt.Sprintf("uintptr(%s)", p.Name)) ++ } else { ++ args = append(args, fmt.Sprintf("uintptr(%s)", p.Name), fmt.Sprintf("uintptr(%s>>32)", p.Name)) ++ } ++ } else { ++ args = append(args, fmt.Sprintf("uintptr(%s)", p.Name)) ++ } ++ } ++ ++ // Determine which form to use; pad args with zeros. ++ asm := "Syscall" ++ if nonblock != nil { ++ if errvar == "" && goos == "linux" { ++ asm = "RawSyscallNoError" ++ } else { ++ asm = "RawSyscall" ++ } ++ } else { ++ if errvar == "" && goos == "linux" { ++ asm = "SyscallNoError" ++ } ++ } ++ if len(args) <= 3 { ++ for len(args) < 3 { ++ args = append(args, "0") ++ } ++ } else if len(args) <= 6 { ++ asm += "6" ++ for len(args) < 6 { ++ args = append(args, "0") ++ } ++ } else if len(args) <= 9 { ++ asm += "9" ++ for len(args) < 9 { ++ args = append(args, "0") ++ } ++ } else { ++ fmt.Fprintf(os.Stderr, "%s:%s too many arguments to system call\n", path, funct) ++ } ++ ++ // System call number. ++ if sysname == "" { ++ sysname = "SYS_" + funct ++ sysname = regexp.MustCompile(`([a-z])([A-Z])`).ReplaceAllString(sysname, `${1}_$2`) ++ sysname = strings.ToUpper(sysname) ++ } ++ ++ var libcFn string ++ if libc { ++ asm = "syscall_" + strings.ToLower(asm[:1]) + asm[1:] // internal syscall call ++ sysname = strings.TrimPrefix(sysname, "SYS_") // remove SYS_ ++ sysname = strings.ToLower(sysname) // lowercase ++ libcFn = sysname ++ sysname = "funcPC(libc_" + sysname + "_trampoline)" ++ } ++ ++ // Actual call. ++ arglist := strings.Join(args, ", ") ++ call := fmt.Sprintf("%s(%s, %s)", asm, sysname, arglist) ++ ++ // Assign return values. ++ body := "" ++ ret := []string{"_", "_", "_"} ++ doErrno := false ++ for i := 0; i < len(out); i++ { ++ p := parseParam(out[i]) ++ reg := "" ++ if p.Name == "err" && !*plan9 { ++ reg = "e1" ++ ret[2] = reg ++ doErrno = true ++ } else if p.Name == "err" && *plan9 { ++ ret[0] = "r0" ++ ret[2] = "e1" ++ break ++ } else { ++ reg = fmt.Sprintf("r%d", i) ++ ret[i] = reg ++ } ++ if p.Type == "bool" { ++ reg = fmt.Sprintf("%s != 0", reg) ++ } ++ if p.Type == "int64" && endianness != "" { ++ // 64-bit number in r1:r0 or r0:r1. ++ if i+2 > len(out) { ++ fmt.Fprintf(os.Stderr, "%s:%s not enough registers for int64 return\n", path, funct) ++ } ++ if endianness == "big-endian" { ++ reg = fmt.Sprintf("int64(r%d)<<32 | int64(r%d)", i, i+1) ++ } else { ++ reg = fmt.Sprintf("int64(r%d)<<32 | int64(r%d)", i+1, i) ++ } ++ ret[i] = fmt.Sprintf("r%d", i) ++ ret[i+1] = fmt.Sprintf("r%d", i+1) ++ } ++ if reg != "e1" || *plan9 { ++ body += fmt.Sprintf("\t%s = %s(%s)\n", p.Name, p.Type, reg) ++ } ++ } ++ if ret[0] == "_" && ret[1] == "_" && ret[2] == "_" { ++ text += fmt.Sprintf("\t%s\n", call) ++ } else { ++ if errvar == "" && goos == "linux" { ++ // raw syscall without error on Linux, see golang.org/issue/22924 ++ text += fmt.Sprintf("\t%s, %s := %s\n", ret[0], ret[1], call) ++ } else { ++ text += fmt.Sprintf("\t%s, %s, %s := %s\n", ret[0], ret[1], ret[2], call) ++ } ++ } ++ text += body ++ ++ if *plan9 && ret[2] == "e1" { ++ text += "\tif int32(r0) == -1 {\n" ++ text += "\t\terr = e1\n" ++ text += "\t}\n" ++ } else if doErrno { ++ text += "\tif e1 != 0 {\n" ++ text += "\t\terr = errnoErr(e1)\n" ++ text += "\t}\n" ++ } ++ text += "\treturn\n" ++ text += "}\n\n" ++ ++ if libc && !trampolines[libcFn] { ++ // some system calls share a trampoline, like read and readlen. ++ trampolines[libcFn] = true ++ // Declare assembly trampoline. ++ text += fmt.Sprintf("func libc_%s_trampoline()\n", libcFn) ++ // Assembly trampoline calls the libc_* function, which this magic ++ // redirects to use the function from libSystem. ++ text += fmt.Sprintf("//go:linkname libc_%s libc_%s\n", libcFn, libcFn) ++ text += fmt.Sprintf("//go:cgo_import_dynamic libc_%s %s \"/usr/lib/libSystem.B.dylib\"\n", libcFn, libcFn) ++ text += "\n" ++ } ++ } ++ if err := s.Err(); err != nil { ++ fmt.Fprintf(os.Stderr, err.Error()) ++ os.Exit(1) ++ } ++ file.Close() ++ } ++ fmt.Printf(srcTemplate, cmdLine(), buildTags(), text) ++} ++ ++const srcTemplate = `// %s ++// Code generated by the command above; see README.md. DO NOT EDIT. ++ ++// +build %s ++ ++package unix ++ ++import ( ++ "syscall" ++ "unsafe" ++) ++ ++var _ syscall.Errno ++ ++%s ++` +diff --git a/vendor/golang.org/x/sys/unix/mksyscall_aix_ppc.go b/vendor/golang.org/x/sys/unix/mksyscall_aix_ppc.go +new file mode 100644 +index 0000000..3be3cdf +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/mksyscall_aix_ppc.go +@@ -0,0 +1,415 @@ ++// Copyright 2019 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build ignore ++ ++/* ++This program reads a file containing function prototypes ++(like syscall_aix.go) and generates system call bodies. ++The prototypes are marked by lines beginning with "//sys" ++and read like func declarations if //sys is replaced by func, but: ++ * The parameter lists must give a name for each argument. ++ This includes return parameters. ++ * The parameter lists must give a type for each argument: ++ the (x, y, z int) shorthand is not allowed. ++ * If the return parameter is an error number, it must be named err. ++ * If go func name needs to be different than its libc name, ++ * or the function is not in libc, name could be specified ++ * at the end, after "=" sign, like ++ //sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (err error) = libsocket.getsockopt ++*/ ++package main ++ ++import ( ++ "bufio" ++ "flag" ++ "fmt" ++ "os" ++ "regexp" ++ "strings" ++) ++ ++var ( ++ b32 = flag.Bool("b32", false, "32bit big-endian") ++ l32 = flag.Bool("l32", false, "32bit little-endian") ++ aix = flag.Bool("aix", false, "aix") ++ tags = flag.String("tags", "", "build tags") ++) ++ ++// cmdLine returns this programs's commandline arguments ++func cmdLine() string { ++ return "go run mksyscall_aix_ppc.go " + strings.Join(os.Args[1:], " ") ++} ++ ++// buildTags returns build tags ++func buildTags() string { ++ return *tags ++} ++ ++// Param is function parameter ++type Param struct { ++ Name string ++ Type string ++} ++ ++// usage prints the program usage ++func usage() { ++ fmt.Fprintf(os.Stderr, "usage: go run mksyscall_aix_ppc.go [-b32 | -l32] [-tags x,y] [file ...]\n") ++ os.Exit(1) ++} ++ ++// parseParamList parses parameter list and returns a slice of parameters ++func parseParamList(list string) []string { ++ list = strings.TrimSpace(list) ++ if list == "" { ++ return []string{} ++ } ++ return regexp.MustCompile(`\s*,\s*`).Split(list, -1) ++} ++ ++// parseParam splits a parameter into name and type ++func parseParam(p string) Param { ++ ps := regexp.MustCompile(`^(\S*) (\S*)$`).FindStringSubmatch(p) ++ if ps == nil { ++ fmt.Fprintf(os.Stderr, "malformed parameter: %s\n", p) ++ os.Exit(1) ++ } ++ return Param{ps[1], ps[2]} ++} ++ ++func main() { ++ flag.Usage = usage ++ flag.Parse() ++ if len(flag.Args()) <= 0 { ++ fmt.Fprintf(os.Stderr, "no files to parse provided\n") ++ usage() ++ } ++ ++ endianness := "" ++ if *b32 { ++ endianness = "big-endian" ++ } else if *l32 { ++ endianness = "little-endian" ++ } ++ ++ pack := "" ++ text := "" ++ cExtern := "/*\n#include \n#include \n" ++ for _, path := range flag.Args() { ++ file, err := os.Open(path) ++ if err != nil { ++ fmt.Fprintf(os.Stderr, err.Error()) ++ os.Exit(1) ++ } ++ s := bufio.NewScanner(file) ++ for s.Scan() { ++ t := s.Text() ++ t = strings.TrimSpace(t) ++ t = regexp.MustCompile(`\s+`).ReplaceAllString(t, ` `) ++ if p := regexp.MustCompile(`^package (\S+)$`).FindStringSubmatch(t); p != nil && pack == "" { ++ pack = p[1] ++ } ++ nonblock := regexp.MustCompile(`^\/\/sysnb `).FindStringSubmatch(t) ++ if regexp.MustCompile(`^\/\/sys `).FindStringSubmatch(t) == nil && nonblock == nil { ++ continue ++ } ++ ++ // Line must be of the form ++ // func Open(path string, mode int, perm int) (fd int, err error) ++ // Split into name, in params, out params. ++ f := regexp.MustCompile(`^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*(?:(\w*)\.)?(\w*))?$`).FindStringSubmatch(t) ++ if f == nil { ++ fmt.Fprintf(os.Stderr, "%s:%s\nmalformed //sys declaration\n", path, t) ++ os.Exit(1) ++ } ++ funct, inps, outps, modname, sysname := f[2], f[3], f[4], f[5], f[6] ++ ++ // Split argument lists on comma. ++ in := parseParamList(inps) ++ out := parseParamList(outps) ++ ++ inps = strings.Join(in, ", ") ++ outps = strings.Join(out, ", ") ++ ++ // Try in vain to keep people from editing this file. ++ // The theory is that they jump into the middle of the file ++ // without reading the header. ++ text += "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n" ++ ++ // Check if value return, err return available ++ errvar := "" ++ retvar := "" ++ rettype := "" ++ for _, param := range out { ++ p := parseParam(param) ++ if p.Type == "error" { ++ errvar = p.Name ++ } else { ++ retvar = p.Name ++ rettype = p.Type ++ } ++ } ++ ++ // System call name. ++ if sysname == "" { ++ sysname = funct ++ } ++ sysname = regexp.MustCompile(`([a-z])([A-Z])`).ReplaceAllString(sysname, `${1}_$2`) ++ sysname = strings.ToLower(sysname) // All libc functions are lowercase. ++ ++ cRettype := "" ++ if rettype == "unsafe.Pointer" { ++ cRettype = "uintptr_t" ++ } else if rettype == "uintptr" { ++ cRettype = "uintptr_t" ++ } else if regexp.MustCompile(`^_`).FindStringSubmatch(rettype) != nil { ++ cRettype = "uintptr_t" ++ } else if rettype == "int" { ++ cRettype = "int" ++ } else if rettype == "int32" { ++ cRettype = "int" ++ } else if rettype == "int64" { ++ cRettype = "long long" ++ } else if rettype == "uint32" { ++ cRettype = "unsigned int" ++ } else if rettype == "uint64" { ++ cRettype = "unsigned long long" ++ } else { ++ cRettype = "int" ++ } ++ if sysname == "exit" { ++ cRettype = "void" ++ } ++ ++ // Change p.Types to c ++ var cIn []string ++ for _, param := range in { ++ p := parseParam(param) ++ if regexp.MustCompile(`^\*`).FindStringSubmatch(p.Type) != nil { ++ cIn = append(cIn, "uintptr_t") ++ } else if p.Type == "string" { ++ cIn = append(cIn, "uintptr_t") ++ } else if regexp.MustCompile(`^\[\](.*)`).FindStringSubmatch(p.Type) != nil { ++ cIn = append(cIn, "uintptr_t", "size_t") ++ } else if p.Type == "unsafe.Pointer" { ++ cIn = append(cIn, "uintptr_t") ++ } else if p.Type == "uintptr" { ++ cIn = append(cIn, "uintptr_t") ++ } else if regexp.MustCompile(`^_`).FindStringSubmatch(p.Type) != nil { ++ cIn = append(cIn, "uintptr_t") ++ } else if p.Type == "int" { ++ cIn = append(cIn, "int") ++ } else if p.Type == "int32" { ++ cIn = append(cIn, "int") ++ } else if p.Type == "int64" { ++ cIn = append(cIn, "long long") ++ } else if p.Type == "uint32" { ++ cIn = append(cIn, "unsigned int") ++ } else if p.Type == "uint64" { ++ cIn = append(cIn, "unsigned long long") ++ } else { ++ cIn = append(cIn, "int") ++ } ++ } ++ ++ if funct != "fcntl" && funct != "FcntlInt" && funct != "readlen" && funct != "writelen" { ++ if sysname == "select" { ++ // select is a keyword of Go. Its name is ++ // changed to c_select. ++ cExtern += "#define c_select select\n" ++ } ++ // Imports of system calls from libc ++ cExtern += fmt.Sprintf("%s %s", cRettype, sysname) ++ cIn := strings.Join(cIn, ", ") ++ cExtern += fmt.Sprintf("(%s);\n", cIn) ++ } ++ ++ // So file name. ++ if *aix { ++ if modname == "" { ++ modname = "libc.a/shr_64.o" ++ } else { ++ fmt.Fprintf(os.Stderr, "%s: only syscall using libc are available\n", funct) ++ os.Exit(1) ++ } ++ } ++ ++ strconvfunc := "C.CString" ++ ++ // Go function header. ++ if outps != "" { ++ outps = fmt.Sprintf(" (%s)", outps) ++ } ++ if text != "" { ++ text += "\n" ++ } ++ ++ text += fmt.Sprintf("func %s(%s)%s {\n", funct, strings.Join(in, ", "), outps) ++ ++ // Prepare arguments to Syscall. ++ var args []string ++ n := 0 ++ argN := 0 ++ for _, param := range in { ++ p := parseParam(param) ++ if regexp.MustCompile(`^\*`).FindStringSubmatch(p.Type) != nil { ++ args = append(args, "C.uintptr_t(uintptr(unsafe.Pointer("+p.Name+")))") ++ } else if p.Type == "string" && errvar != "" { ++ text += fmt.Sprintf("\t_p%d := uintptr(unsafe.Pointer(%s(%s)))\n", n, strconvfunc, p.Name) ++ args = append(args, fmt.Sprintf("C.uintptr_t(_p%d)", n)) ++ n++ ++ } else if p.Type == "string" { ++ fmt.Fprintf(os.Stderr, path+":"+funct+" uses string arguments, but has no error return\n") ++ text += fmt.Sprintf("\t_p%d := uintptr(unsafe.Pointer(%s(%s)))\n", n, strconvfunc, p.Name) ++ args = append(args, fmt.Sprintf("C.uintptr_t(_p%d)", n)) ++ n++ ++ } else if m := regexp.MustCompile(`^\[\](.*)`).FindStringSubmatch(p.Type); m != nil { ++ // Convert slice into pointer, length. ++ // Have to be careful not to take address of &a[0] if len == 0: ++ // pass nil in that case. ++ text += fmt.Sprintf("\tvar _p%d *%s\n", n, m[1]) ++ text += fmt.Sprintf("\tif len(%s) > 0 {\n\t\t_p%d = &%s[0]\n\t}\n", p.Name, n, p.Name) ++ args = append(args, fmt.Sprintf("C.uintptr_t(uintptr(unsafe.Pointer(_p%d)))", n)) ++ n++ ++ text += fmt.Sprintf("\tvar _p%d int\n", n) ++ text += fmt.Sprintf("\t_p%d = len(%s)\n", n, p.Name) ++ args = append(args, fmt.Sprintf("C.size_t(_p%d)", n)) ++ n++ ++ } else if p.Type == "int64" && endianness != "" { ++ if endianness == "big-endian" { ++ args = append(args, fmt.Sprintf("uintptr(%s>>32)", p.Name), fmt.Sprintf("uintptr(%s)", p.Name)) ++ } else { ++ args = append(args, fmt.Sprintf("uintptr(%s)", p.Name), fmt.Sprintf("uintptr(%s>>32)", p.Name)) ++ } ++ n++ ++ } else if p.Type == "bool" { ++ text += fmt.Sprintf("\tvar _p%d uint32\n", n) ++ text += fmt.Sprintf("\tif %s {\n\t\t_p%d = 1\n\t} else {\n\t\t_p%d = 0\n\t}\n", p.Name, n, n) ++ args = append(args, fmt.Sprintf("_p%d", n)) ++ } else if regexp.MustCompile(`^_`).FindStringSubmatch(p.Type) != nil { ++ args = append(args, fmt.Sprintf("C.uintptr_t(uintptr(%s))", p.Name)) ++ } else if p.Type == "unsafe.Pointer" { ++ args = append(args, fmt.Sprintf("C.uintptr_t(uintptr(%s))", p.Name)) ++ } else if p.Type == "int" { ++ if (argN == 2) && ((funct == "readlen") || (funct == "writelen")) { ++ args = append(args, fmt.Sprintf("C.size_t(%s)", p.Name)) ++ } else if argN == 0 && funct == "fcntl" { ++ args = append(args, fmt.Sprintf("C.uintptr_t(%s)", p.Name)) ++ } else if (argN == 2) && ((funct == "fcntl") || (funct == "FcntlInt")) { ++ args = append(args, fmt.Sprintf("C.uintptr_t(%s)", p.Name)) ++ } else { ++ args = append(args, fmt.Sprintf("C.int(%s)", p.Name)) ++ } ++ } else if p.Type == "int32" { ++ args = append(args, fmt.Sprintf("C.int(%s)", p.Name)) ++ } else if p.Type == "int64" { ++ args = append(args, fmt.Sprintf("C.longlong(%s)", p.Name)) ++ } else if p.Type == "uint32" { ++ args = append(args, fmt.Sprintf("C.uint(%s)", p.Name)) ++ } else if p.Type == "uint64" { ++ args = append(args, fmt.Sprintf("C.ulonglong(%s)", p.Name)) ++ } else if p.Type == "uintptr" { ++ args = append(args, fmt.Sprintf("C.uintptr_t(%s)", p.Name)) ++ } else { ++ args = append(args, fmt.Sprintf("C.int(%s)", p.Name)) ++ } ++ argN++ ++ } ++ ++ // Actual call. ++ arglist := strings.Join(args, ", ") ++ call := "" ++ if sysname == "exit" { ++ if errvar != "" { ++ call += "er :=" ++ } else { ++ call += "" ++ } ++ } else if errvar != "" { ++ call += "r0,er :=" ++ } else if retvar != "" { ++ call += "r0,_ :=" ++ } else { ++ call += "" ++ } ++ if sysname == "select" { ++ // select is a keyword of Go. Its name is ++ // changed to c_select. ++ call += fmt.Sprintf("C.c_%s(%s)", sysname, arglist) ++ } else { ++ call += fmt.Sprintf("C.%s(%s)", sysname, arglist) ++ } ++ ++ // Assign return values. ++ body := "" ++ for i := 0; i < len(out); i++ { ++ p := parseParam(out[i]) ++ reg := "" ++ if p.Name == "err" { ++ reg = "e1" ++ } else { ++ reg = "r0" ++ } ++ if reg != "e1" { ++ body += fmt.Sprintf("\t%s = %s(%s)\n", p.Name, p.Type, reg) ++ } ++ } ++ ++ // verify return ++ if sysname != "exit" && errvar != "" { ++ if regexp.MustCompile(`^uintptr`).FindStringSubmatch(cRettype) != nil { ++ body += "\tif (uintptr(r0) ==^uintptr(0) && er != nil) {\n" ++ body += fmt.Sprintf("\t\t%s = er\n", errvar) ++ body += "\t}\n" ++ } else { ++ body += "\tif (r0 ==-1 && er != nil) {\n" ++ body += fmt.Sprintf("\t\t%s = er\n", errvar) ++ body += "\t}\n" ++ } ++ } else if errvar != "" { ++ body += "\tif (er != nil) {\n" ++ body += fmt.Sprintf("\t\t%s = er\n", errvar) ++ body += "\t}\n" ++ } ++ ++ text += fmt.Sprintf("\t%s\n", call) ++ text += body ++ ++ text += "\treturn\n" ++ text += "}\n" ++ } ++ if err := s.Err(); err != nil { ++ fmt.Fprintf(os.Stderr, err.Error()) ++ os.Exit(1) ++ } ++ file.Close() ++ } ++ imp := "" ++ if pack != "unix" { ++ imp = "import \"golang.org/x/sys/unix\"\n" ++ ++ } ++ fmt.Printf(srcTemplate, cmdLine(), buildTags(), pack, cExtern, imp, text) ++} ++ ++const srcTemplate = `// %s ++// Code generated by the command above; see README.md. DO NOT EDIT. ++ ++// +build %s ++ ++package %s ++ ++ ++%s ++*/ ++import "C" ++import ( ++ "unsafe" ++) ++ ++ ++%s ++ ++%s ++` +diff --git a/vendor/golang.org/x/sys/unix/mksyscall_aix_ppc64.go b/vendor/golang.org/x/sys/unix/mksyscall_aix_ppc64.go +new file mode 100644 +index 0000000..c960099 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/mksyscall_aix_ppc64.go +@@ -0,0 +1,614 @@ ++// Copyright 2019 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build ignore ++ ++/* ++This program reads a file containing function prototypes ++(like syscall_aix.go) and generates system call bodies. ++The prototypes are marked by lines beginning with "//sys" ++and read like func declarations if //sys is replaced by func, but: ++ * The parameter lists must give a name for each argument. ++ This includes return parameters. ++ * The parameter lists must give a type for each argument: ++ the (x, y, z int) shorthand is not allowed. ++ * If the return parameter is an error number, it must be named err. ++ * If go func name needs to be different than its libc name, ++ * or the function is not in libc, name could be specified ++ * at the end, after "=" sign, like ++ //sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (err error) = libsocket.getsockopt ++ ++ ++This program will generate three files and handle both gc and gccgo implementation: ++ - zsyscall_aix_ppc64.go: the common part of each implementation (error handler, pointer creation) ++ - zsyscall_aix_ppc64_gc.go: gc part with //go_cgo_import_dynamic and a call to syscall6 ++ - zsyscall_aix_ppc64_gccgo.go: gccgo part with C function and conversion to C type. ++ ++ The generated code looks like this ++ ++zsyscall_aix_ppc64.go ++func asyscall(...) (n int, err error) { ++ // Pointer Creation ++ r1, e1 := callasyscall(...) ++ // Type Conversion ++ // Error Handler ++ return ++} ++ ++zsyscall_aix_ppc64_gc.go ++//go:cgo_import_dynamic libc_asyscall asyscall "libc.a/shr_64.o" ++//go:linkname libc_asyscall libc_asyscall ++var asyscall syscallFunc ++ ++func callasyscall(...) (r1 uintptr, e1 Errno) { ++ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_asyscall)), "nb_args", ... ) ++ return ++} ++ ++zsyscall_aix_ppc64_ggcgo.go ++ ++// int asyscall(...) ++ ++import "C" ++ ++func callasyscall(...) (r1 uintptr, e1 Errno) { ++ r1 = uintptr(C.asyscall(...)) ++ e1 = syscall.GetErrno() ++ return ++} ++*/ ++ ++package main ++ ++import ( ++ "bufio" ++ "flag" ++ "fmt" ++ "io/ioutil" ++ "os" ++ "regexp" ++ "strings" ++) ++ ++var ( ++ b32 = flag.Bool("b32", false, "32bit big-endian") ++ l32 = flag.Bool("l32", false, "32bit little-endian") ++ aix = flag.Bool("aix", false, "aix") ++ tags = flag.String("tags", "", "build tags") ++) ++ ++// cmdLine returns this programs's commandline arguments ++func cmdLine() string { ++ return "go run mksyscall_aix_ppc64.go " + strings.Join(os.Args[1:], " ") ++} ++ ++// buildTags returns build tags ++func buildTags() string { ++ return *tags ++} ++ ++// Param is function parameter ++type Param struct { ++ Name string ++ Type string ++} ++ ++// usage prints the program usage ++func usage() { ++ fmt.Fprintf(os.Stderr, "usage: go run mksyscall_aix_ppc64.go [-b32 | -l32] [-tags x,y] [file ...]\n") ++ os.Exit(1) ++} ++ ++// parseParamList parses parameter list and returns a slice of parameters ++func parseParamList(list string) []string { ++ list = strings.TrimSpace(list) ++ if list == "" { ++ return []string{} ++ } ++ return regexp.MustCompile(`\s*,\s*`).Split(list, -1) ++} ++ ++// parseParam splits a parameter into name and type ++func parseParam(p string) Param { ++ ps := regexp.MustCompile(`^(\S*) (\S*)$`).FindStringSubmatch(p) ++ if ps == nil { ++ fmt.Fprintf(os.Stderr, "malformed parameter: %s\n", p) ++ os.Exit(1) ++ } ++ return Param{ps[1], ps[2]} ++} ++ ++func main() { ++ flag.Usage = usage ++ flag.Parse() ++ if len(flag.Args()) <= 0 { ++ fmt.Fprintf(os.Stderr, "no files to parse provided\n") ++ usage() ++ } ++ ++ endianness := "" ++ if *b32 { ++ endianness = "big-endian" ++ } else if *l32 { ++ endianness = "little-endian" ++ } ++ ++ pack := "" ++ // GCCGO ++ textgccgo := "" ++ cExtern := "/*\n#include \n" ++ // GC ++ textgc := "" ++ dynimports := "" ++ linknames := "" ++ var vars []string ++ // COMMON ++ textcommon := "" ++ for _, path := range flag.Args() { ++ file, err := os.Open(path) ++ if err != nil { ++ fmt.Fprintf(os.Stderr, err.Error()) ++ os.Exit(1) ++ } ++ s := bufio.NewScanner(file) ++ for s.Scan() { ++ t := s.Text() ++ t = strings.TrimSpace(t) ++ t = regexp.MustCompile(`\s+`).ReplaceAllString(t, ` `) ++ if p := regexp.MustCompile(`^package (\S+)$`).FindStringSubmatch(t); p != nil && pack == "" { ++ pack = p[1] ++ } ++ nonblock := regexp.MustCompile(`^\/\/sysnb `).FindStringSubmatch(t) ++ if regexp.MustCompile(`^\/\/sys `).FindStringSubmatch(t) == nil && nonblock == nil { ++ continue ++ } ++ ++ // Line must be of the form ++ // func Open(path string, mode int, perm int) (fd int, err error) ++ // Split into name, in params, out params. ++ f := regexp.MustCompile(`^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*(?:(\w*)\.)?(\w*))?$`).FindStringSubmatch(t) ++ if f == nil { ++ fmt.Fprintf(os.Stderr, "%s:%s\nmalformed //sys declaration\n", path, t) ++ os.Exit(1) ++ } ++ funct, inps, outps, modname, sysname := f[2], f[3], f[4], f[5], f[6] ++ ++ // Split argument lists on comma. ++ in := parseParamList(inps) ++ out := parseParamList(outps) ++ ++ inps = strings.Join(in, ", ") ++ outps = strings.Join(out, ", ") ++ ++ if sysname == "" { ++ sysname = funct ++ } ++ ++ onlyCommon := false ++ if funct == "readlen" || funct == "writelen" || funct == "FcntlInt" || funct == "FcntlFlock" { ++ // This function call another syscall which is already implemented. ++ // Therefore, the gc and gccgo part must not be generated. ++ onlyCommon = true ++ } ++ ++ // Try in vain to keep people from editing this file. ++ // The theory is that they jump into the middle of the file ++ // without reading the header. ++ ++ textcommon += "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n" ++ if !onlyCommon { ++ textgccgo += "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n" ++ textgc += "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n" ++ } ++ ++ // Check if value return, err return available ++ errvar := "" ++ rettype := "" ++ for _, param := range out { ++ p := parseParam(param) ++ if p.Type == "error" { ++ errvar = p.Name ++ } else { ++ rettype = p.Type ++ } ++ } ++ ++ sysname = regexp.MustCompile(`([a-z])([A-Z])`).ReplaceAllString(sysname, `${1}_$2`) ++ sysname = strings.ToLower(sysname) // All libc functions are lowercase. ++ ++ // GCCGO Prototype return type ++ cRettype := "" ++ if rettype == "unsafe.Pointer" { ++ cRettype = "uintptr_t" ++ } else if rettype == "uintptr" { ++ cRettype = "uintptr_t" ++ } else if regexp.MustCompile(`^_`).FindStringSubmatch(rettype) != nil { ++ cRettype = "uintptr_t" ++ } else if rettype == "int" { ++ cRettype = "int" ++ } else if rettype == "int32" { ++ cRettype = "int" ++ } else if rettype == "int64" { ++ cRettype = "long long" ++ } else if rettype == "uint32" { ++ cRettype = "unsigned int" ++ } else if rettype == "uint64" { ++ cRettype = "unsigned long long" ++ } else { ++ cRettype = "int" ++ } ++ if sysname == "exit" { ++ cRettype = "void" ++ } ++ ++ // GCCGO Prototype arguments type ++ var cIn []string ++ for i, param := range in { ++ p := parseParam(param) ++ if regexp.MustCompile(`^\*`).FindStringSubmatch(p.Type) != nil { ++ cIn = append(cIn, "uintptr_t") ++ } else if p.Type == "string" { ++ cIn = append(cIn, "uintptr_t") ++ } else if regexp.MustCompile(`^\[\](.*)`).FindStringSubmatch(p.Type) != nil { ++ cIn = append(cIn, "uintptr_t", "size_t") ++ } else if p.Type == "unsafe.Pointer" { ++ cIn = append(cIn, "uintptr_t") ++ } else if p.Type == "uintptr" { ++ cIn = append(cIn, "uintptr_t") ++ } else if regexp.MustCompile(`^_`).FindStringSubmatch(p.Type) != nil { ++ cIn = append(cIn, "uintptr_t") ++ } else if p.Type == "int" { ++ if (i == 0 || i == 2) && funct == "fcntl" { ++ // These fcntl arguments needs to be uintptr to be able to call FcntlInt and FcntlFlock ++ cIn = append(cIn, "uintptr_t") ++ } else { ++ cIn = append(cIn, "int") ++ } ++ ++ } else if p.Type == "int32" { ++ cIn = append(cIn, "int") ++ } else if p.Type == "int64" { ++ cIn = append(cIn, "long long") ++ } else if p.Type == "uint32" { ++ cIn = append(cIn, "unsigned int") ++ } else if p.Type == "uint64" { ++ cIn = append(cIn, "unsigned long long") ++ } else { ++ cIn = append(cIn, "int") ++ } ++ } ++ ++ if !onlyCommon { ++ // GCCGO Prototype Generation ++ // Imports of system calls from libc ++ if sysname == "select" { ++ // select is a keyword of Go. Its name is ++ // changed to c_select. ++ cExtern += "#define c_select select\n" ++ } ++ cExtern += fmt.Sprintf("%s %s", cRettype, sysname) ++ cIn := strings.Join(cIn, ", ") ++ cExtern += fmt.Sprintf("(%s);\n", cIn) ++ } ++ // GC Library name ++ if modname == "" { ++ modname = "libc.a/shr_64.o" ++ } else { ++ fmt.Fprintf(os.Stderr, "%s: only syscall using libc are available\n", funct) ++ os.Exit(1) ++ } ++ sysvarname := fmt.Sprintf("libc_%s", sysname) ++ ++ if !onlyCommon { ++ // GC Runtime import of function to allow cross-platform builds. ++ dynimports += fmt.Sprintf("//go:cgo_import_dynamic %s %s \"%s\"\n", sysvarname, sysname, modname) ++ // GC Link symbol to proc address variable. ++ linknames += fmt.Sprintf("//go:linkname %s %s\n", sysvarname, sysvarname) ++ // GC Library proc address variable. ++ vars = append(vars, sysvarname) ++ } ++ ++ strconvfunc := "BytePtrFromString" ++ strconvtype := "*byte" ++ ++ // Go function header. ++ if outps != "" { ++ outps = fmt.Sprintf(" (%s)", outps) ++ } ++ if textcommon != "" { ++ textcommon += "\n" ++ } ++ ++ textcommon += fmt.Sprintf("func %s(%s)%s {\n", funct, strings.Join(in, ", "), outps) ++ ++ // Prepare arguments tocall. ++ var argscommon []string // Arguments in the common part ++ var argscall []string // Arguments for call prototype ++ var argsgc []string // Arguments for gc call (with syscall6) ++ var argsgccgo []string // Arguments for gccgo call (with C.name_of_syscall) ++ n := 0 ++ argN := 0 ++ for _, param := range in { ++ p := parseParam(param) ++ if regexp.MustCompile(`^\*`).FindStringSubmatch(p.Type) != nil { ++ argscommon = append(argscommon, fmt.Sprintf("uintptr(unsafe.Pointer(%s))", p.Name)) ++ argscall = append(argscall, fmt.Sprintf("%s uintptr", p.Name)) ++ argsgc = append(argsgc, p.Name) ++ argsgccgo = append(argsgccgo, fmt.Sprintf("C.uintptr_t(%s)", p.Name)) ++ } else if p.Type == "string" && errvar != "" { ++ textcommon += fmt.Sprintf("\tvar _p%d %s\n", n, strconvtype) ++ textcommon += fmt.Sprintf("\t_p%d, %s = %s(%s)\n", n, errvar, strconvfunc, p.Name) ++ textcommon += fmt.Sprintf("\tif %s != nil {\n\t\treturn\n\t}\n", errvar) ++ ++ argscommon = append(argscommon, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n)) ++ argscall = append(argscall, fmt.Sprintf("_p%d uintptr ", n)) ++ argsgc = append(argsgc, fmt.Sprintf("_p%d", n)) ++ argsgccgo = append(argsgccgo, fmt.Sprintf("C.uintptr_t(_p%d)", n)) ++ n++ ++ } else if p.Type == "string" { ++ fmt.Fprintf(os.Stderr, path+":"+funct+" uses string arguments, but has no error return\n") ++ textcommon += fmt.Sprintf("\tvar _p%d %s\n", n, strconvtype) ++ textcommon += fmt.Sprintf("\t_p%d, %s = %s(%s)\n", n, errvar, strconvfunc, p.Name) ++ textcommon += fmt.Sprintf("\tif %s != nil {\n\t\treturn\n\t}\n", errvar) ++ ++ argscommon = append(argscommon, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n)) ++ argscall = append(argscall, fmt.Sprintf("_p%d uintptr", n)) ++ argsgc = append(argsgc, fmt.Sprintf("_p%d", n)) ++ argsgccgo = append(argsgccgo, fmt.Sprintf("C.uintptr_t(_p%d)", n)) ++ n++ ++ } else if m := regexp.MustCompile(`^\[\](.*)`).FindStringSubmatch(p.Type); m != nil { ++ // Convert slice into pointer, length. ++ // Have to be careful not to take address of &a[0] if len == 0: ++ // pass nil in that case. ++ textcommon += fmt.Sprintf("\tvar _p%d *%s\n", n, m[1]) ++ textcommon += fmt.Sprintf("\tif len(%s) > 0 {\n\t\t_p%d = &%s[0]\n\t}\n", p.Name, n, p.Name) ++ argscommon = append(argscommon, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n), fmt.Sprintf("len(%s)", p.Name)) ++ argscall = append(argscall, fmt.Sprintf("_p%d uintptr", n), fmt.Sprintf("_lenp%d int", n)) ++ argsgc = append(argsgc, fmt.Sprintf("_p%d", n), fmt.Sprintf("uintptr(_lenp%d)", n)) ++ argsgccgo = append(argsgccgo, fmt.Sprintf("C.uintptr_t(_p%d)", n), fmt.Sprintf("C.size_t(_lenp%d)", n)) ++ n++ ++ } else if p.Type == "int64" && endianness != "" { ++ fmt.Fprintf(os.Stderr, path+":"+funct+" uses int64 with 32 bits mode. Case not yet implemented\n") ++ } else if p.Type == "bool" { ++ fmt.Fprintf(os.Stderr, path+":"+funct+" uses bool. Case not yet implemented\n") ++ } else if regexp.MustCompile(`^_`).FindStringSubmatch(p.Type) != nil || p.Type == "unsafe.Pointer" { ++ argscommon = append(argscommon, fmt.Sprintf("uintptr(%s)", p.Name)) ++ argscall = append(argscall, fmt.Sprintf("%s uintptr", p.Name)) ++ argsgc = append(argsgc, p.Name) ++ argsgccgo = append(argsgccgo, fmt.Sprintf("C.uintptr_t(%s)", p.Name)) ++ } else if p.Type == "int" { ++ if (argN == 0 || argN == 2) && ((funct == "fcntl") || (funct == "FcntlInt") || (funct == "FcntlFlock")) { ++ // These fcntl arguments need to be uintptr to be able to call FcntlInt and FcntlFlock ++ argscommon = append(argscommon, fmt.Sprintf("uintptr(%s)", p.Name)) ++ argscall = append(argscall, fmt.Sprintf("%s uintptr", p.Name)) ++ argsgc = append(argsgc, p.Name) ++ argsgccgo = append(argsgccgo, fmt.Sprintf("C.uintptr_t(%s)", p.Name)) ++ ++ } else { ++ argscommon = append(argscommon, p.Name) ++ argscall = append(argscall, fmt.Sprintf("%s int", p.Name)) ++ argsgc = append(argsgc, fmt.Sprintf("uintptr(%s)", p.Name)) ++ argsgccgo = append(argsgccgo, fmt.Sprintf("C.int(%s)", p.Name)) ++ } ++ } else if p.Type == "int32" { ++ argscommon = append(argscommon, p.Name) ++ argscall = append(argscall, fmt.Sprintf("%s int32", p.Name)) ++ argsgc = append(argsgc, fmt.Sprintf("uintptr(%s)", p.Name)) ++ argsgccgo = append(argsgccgo, fmt.Sprintf("C.int(%s)", p.Name)) ++ } else if p.Type == "int64" { ++ argscommon = append(argscommon, p.Name) ++ argscall = append(argscall, fmt.Sprintf("%s int64", p.Name)) ++ argsgc = append(argsgc, fmt.Sprintf("uintptr(%s)", p.Name)) ++ argsgccgo = append(argsgccgo, fmt.Sprintf("C.longlong(%s)", p.Name)) ++ } else if p.Type == "uint32" { ++ argscommon = append(argscommon, p.Name) ++ argscall = append(argscall, fmt.Sprintf("%s uint32", p.Name)) ++ argsgc = append(argsgc, fmt.Sprintf("uintptr(%s)", p.Name)) ++ argsgccgo = append(argsgccgo, fmt.Sprintf("C.uint(%s)", p.Name)) ++ } else if p.Type == "uint64" { ++ argscommon = append(argscommon, p.Name) ++ argscall = append(argscall, fmt.Sprintf("%s uint64", p.Name)) ++ argsgc = append(argsgc, fmt.Sprintf("uintptr(%s)", p.Name)) ++ argsgccgo = append(argsgccgo, fmt.Sprintf("C.ulonglong(%s)", p.Name)) ++ } else if p.Type == "uintptr" { ++ argscommon = append(argscommon, p.Name) ++ argscall = append(argscall, fmt.Sprintf("%s uintptr", p.Name)) ++ argsgc = append(argsgc, p.Name) ++ argsgccgo = append(argsgccgo, fmt.Sprintf("C.uintptr_t(%s)", p.Name)) ++ } else { ++ argscommon = append(argscommon, fmt.Sprintf("int(%s)", p.Name)) ++ argscall = append(argscall, fmt.Sprintf("%s int", p.Name)) ++ argsgc = append(argsgc, fmt.Sprintf("uintptr(%s)", p.Name)) ++ argsgccgo = append(argsgccgo, fmt.Sprintf("C.int(%s)", p.Name)) ++ } ++ argN++ ++ } ++ nargs := len(argsgc) ++ ++ // COMMON function generation ++ argscommonlist := strings.Join(argscommon, ", ") ++ callcommon := fmt.Sprintf("call%s(%s)", sysname, argscommonlist) ++ ret := []string{"_", "_"} ++ body := "" ++ doErrno := false ++ for i := 0; i < len(out); i++ { ++ p := parseParam(out[i]) ++ reg := "" ++ if p.Name == "err" { ++ reg = "e1" ++ ret[1] = reg ++ doErrno = true ++ } else { ++ reg = "r0" ++ ret[0] = reg ++ } ++ if p.Type == "bool" { ++ reg = fmt.Sprintf("%s != 0", reg) ++ } ++ if reg != "e1" { ++ body += fmt.Sprintf("\t%s = %s(%s)\n", p.Name, p.Type, reg) ++ } ++ } ++ if ret[0] == "_" && ret[1] == "_" { ++ textcommon += fmt.Sprintf("\t%s\n", callcommon) ++ } else { ++ textcommon += fmt.Sprintf("\t%s, %s := %s\n", ret[0], ret[1], callcommon) ++ } ++ textcommon += body ++ ++ if doErrno { ++ textcommon += "\tif e1 != 0 {\n" ++ textcommon += "\t\terr = errnoErr(e1)\n" ++ textcommon += "\t}\n" ++ } ++ textcommon += "\treturn\n" ++ textcommon += "}\n" ++ ++ if onlyCommon { ++ continue ++ } ++ ++ // CALL Prototype ++ callProto := fmt.Sprintf("func call%s(%s) (r1 uintptr, e1 Errno) {\n", sysname, strings.Join(argscall, ", ")) ++ ++ // GC function generation ++ asm := "syscall6" ++ if nonblock != nil { ++ asm = "rawSyscall6" ++ } ++ ++ if len(argsgc) <= 6 { ++ for len(argsgc) < 6 { ++ argsgc = append(argsgc, "0") ++ } ++ } else { ++ fmt.Fprintf(os.Stderr, "%s: too many arguments to system call", funct) ++ os.Exit(1) ++ } ++ argsgclist := strings.Join(argsgc, ", ") ++ callgc := fmt.Sprintf("%s(uintptr(unsafe.Pointer(&%s)), %d, %s)", asm, sysvarname, nargs, argsgclist) ++ ++ textgc += callProto ++ textgc += fmt.Sprintf("\tr1, _, e1 = %s\n", callgc) ++ textgc += "\treturn\n}\n" ++ ++ // GCCGO function generation ++ argsgccgolist := strings.Join(argsgccgo, ", ") ++ var callgccgo string ++ if sysname == "select" { ++ // select is a keyword of Go. Its name is ++ // changed to c_select. ++ callgccgo = fmt.Sprintf("C.c_%s(%s)", sysname, argsgccgolist) ++ } else { ++ callgccgo = fmt.Sprintf("C.%s(%s)", sysname, argsgccgolist) ++ } ++ textgccgo += callProto ++ textgccgo += fmt.Sprintf("\tr1 = uintptr(%s)\n", callgccgo) ++ textgccgo += "\te1 = syscall.GetErrno()\n" ++ textgccgo += "\treturn\n}\n" ++ } ++ if err := s.Err(); err != nil { ++ fmt.Fprintf(os.Stderr, err.Error()) ++ os.Exit(1) ++ } ++ file.Close() ++ } ++ imp := "" ++ if pack != "unix" { ++ imp = "import \"golang.org/x/sys/unix\"\n" ++ ++ } ++ ++ // Print zsyscall_aix_ppc64.go ++ err := ioutil.WriteFile("zsyscall_aix_ppc64.go", ++ []byte(fmt.Sprintf(srcTemplate1, cmdLine(), buildTags(), pack, imp, textcommon)), ++ 0644) ++ if err != nil { ++ fmt.Fprintf(os.Stderr, err.Error()) ++ os.Exit(1) ++ } ++ ++ // Print zsyscall_aix_ppc64_gc.go ++ vardecls := "\t" + strings.Join(vars, ",\n\t") ++ vardecls += " syscallFunc" ++ err = ioutil.WriteFile("zsyscall_aix_ppc64_gc.go", ++ []byte(fmt.Sprintf(srcTemplate2, cmdLine(), buildTags(), pack, imp, dynimports, linknames, vardecls, textgc)), ++ 0644) ++ if err != nil { ++ fmt.Fprintf(os.Stderr, err.Error()) ++ os.Exit(1) ++ } ++ ++ // Print zsyscall_aix_ppc64_gccgo.go ++ err = ioutil.WriteFile("zsyscall_aix_ppc64_gccgo.go", ++ []byte(fmt.Sprintf(srcTemplate3, cmdLine(), buildTags(), pack, cExtern, imp, textgccgo)), ++ 0644) ++ if err != nil { ++ fmt.Fprintf(os.Stderr, err.Error()) ++ os.Exit(1) ++ } ++} ++ ++const srcTemplate1 = `// %s ++// Code generated by the command above; see README.md. DO NOT EDIT. ++ ++// +build %s ++ ++package %s ++ ++import ( ++ "unsafe" ++) ++ ++ ++%s ++ ++%s ++` ++const srcTemplate2 = `// %s ++// Code generated by the command above; see README.md. DO NOT EDIT. ++ ++// +build %s ++// +build !gccgo ++ ++package %s ++ ++import ( ++ "unsafe" ++) ++%s ++%s ++%s ++type syscallFunc uintptr ++ ++var ( ++%s ++) ++ ++// Implemented in runtime/syscall_aix.go. ++func rawSyscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) ++func syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) ++ ++%s ++` ++const srcTemplate3 = `// %s ++// Code generated by the command above; see README.md. DO NOT EDIT. ++ ++// +build %s ++// +build gccgo ++ ++package %s ++ ++%s ++*/ ++import "C" ++import ( ++ "syscall" ++) ++ ++ ++%s ++ ++%s ++` +diff --git a/vendor/golang.org/x/sys/unix/mksyscall_solaris.go b/vendor/golang.org/x/sys/unix/mksyscall_solaris.go +new file mode 100644 +index 0000000..675597e +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/mksyscall_solaris.go +@@ -0,0 +1,341 @@ ++// Copyright 2019 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build ignore ++ ++/* ++ This program reads a file containing function prototypes ++ (like syscall_solaris.go) and generates system call bodies. ++ The prototypes are marked by lines beginning with "//sys" ++ and read like func declarations if //sys is replaced by func, but: ++ * The parameter lists must give a name for each argument. ++ This includes return parameters. ++ * The parameter lists must give a type for each argument: ++ the (x, y, z int) shorthand is not allowed. ++ * If the return parameter is an error number, it must be named err. ++ * If go func name needs to be different than its libc name, ++ * or the function is not in libc, name could be specified ++ * at the end, after "=" sign, like ++ //sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (err error) = libsocket.getsockopt ++*/ ++ ++package main ++ ++import ( ++ "bufio" ++ "flag" ++ "fmt" ++ "os" ++ "regexp" ++ "strings" ++) ++ ++var ( ++ b32 = flag.Bool("b32", false, "32bit big-endian") ++ l32 = flag.Bool("l32", false, "32bit little-endian") ++ tags = flag.String("tags", "", "build tags") ++ illumos = flag.Bool("illumos", false, "illumos specific code generation") ++) ++ ++// cmdLine returns this programs's commandline arguments ++func cmdLine() string { ++ return "go run mksyscall_solaris.go " + strings.Join(os.Args[1:], " ") ++} ++ ++// buildTags returns build tags ++func buildTags() string { ++ return *tags ++} ++ ++// Param is function parameter ++type Param struct { ++ Name string ++ Type string ++} ++ ++// usage prints the program usage ++func usage() { ++ fmt.Fprintf(os.Stderr, "usage: go run mksyscall_solaris.go [-b32 | -l32] [-tags x,y] [file ...]\n") ++ os.Exit(1) ++} ++ ++// parseParamList parses parameter list and returns a slice of parameters ++func parseParamList(list string) []string { ++ list = strings.TrimSpace(list) ++ if list == "" { ++ return []string{} ++ } ++ return regexp.MustCompile(`\s*,\s*`).Split(list, -1) ++} ++ ++// parseParam splits a parameter into name and type ++func parseParam(p string) Param { ++ ps := regexp.MustCompile(`^(\S*) (\S*)$`).FindStringSubmatch(p) ++ if ps == nil { ++ fmt.Fprintf(os.Stderr, "malformed parameter: %s\n", p) ++ os.Exit(1) ++ } ++ return Param{ps[1], ps[2]} ++} ++ ++func main() { ++ flag.Usage = usage ++ flag.Parse() ++ if len(flag.Args()) <= 0 { ++ fmt.Fprintf(os.Stderr, "no files to parse provided\n") ++ usage() ++ } ++ ++ endianness := "" ++ if *b32 { ++ endianness = "big-endian" ++ } else if *l32 { ++ endianness = "little-endian" ++ } ++ ++ pack := "" ++ text := "" ++ dynimports := "" ++ linknames := "" ++ var vars []string ++ for _, path := range flag.Args() { ++ file, err := os.Open(path) ++ if err != nil { ++ fmt.Fprintf(os.Stderr, err.Error()) ++ os.Exit(1) ++ } ++ s := bufio.NewScanner(file) ++ for s.Scan() { ++ t := s.Text() ++ t = strings.TrimSpace(t) ++ t = regexp.MustCompile(`\s+`).ReplaceAllString(t, ` `) ++ if p := regexp.MustCompile(`^package (\S+)$`).FindStringSubmatch(t); p != nil && pack == "" { ++ pack = p[1] ++ } ++ nonblock := regexp.MustCompile(`^\/\/sysnb `).FindStringSubmatch(t) ++ if regexp.MustCompile(`^\/\/sys `).FindStringSubmatch(t) == nil && nonblock == nil { ++ continue ++ } ++ ++ // Line must be of the form ++ // func Open(path string, mode int, perm int) (fd int, err error) ++ // Split into name, in params, out params. ++ f := regexp.MustCompile(`^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*(?:(\w*)\.)?(\w*))?$`).FindStringSubmatch(t) ++ if f == nil { ++ fmt.Fprintf(os.Stderr, "%s:%s\nmalformed //sys declaration\n", path, t) ++ os.Exit(1) ++ } ++ funct, inps, outps, modname, sysname := f[2], f[3], f[4], f[5], f[6] ++ ++ // Split argument lists on comma. ++ in := parseParamList(inps) ++ out := parseParamList(outps) ++ ++ inps = strings.Join(in, ", ") ++ outps = strings.Join(out, ", ") ++ ++ // Try in vain to keep people from editing this file. ++ // The theory is that they jump into the middle of the file ++ // without reading the header. ++ text += "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n" ++ ++ // So file name. ++ if modname == "" { ++ modname = "libc" ++ } ++ ++ // System call name. ++ if sysname == "" { ++ sysname = funct ++ } ++ ++ // System call pointer variable name. ++ sysvarname := fmt.Sprintf("proc%s", sysname) ++ ++ strconvfunc := "BytePtrFromString" ++ strconvtype := "*byte" ++ ++ sysname = strings.ToLower(sysname) // All libc functions are lowercase. ++ ++ // Runtime import of function to allow cross-platform builds. ++ dynimports += fmt.Sprintf("//go:cgo_import_dynamic libc_%s %s \"%s.so\"\n", sysname, sysname, modname) ++ // Link symbol to proc address variable. ++ linknames += fmt.Sprintf("//go:linkname %s libc_%s\n", sysvarname, sysname) ++ // Library proc address variable. ++ vars = append(vars, sysvarname) ++ ++ // Go function header. ++ outlist := strings.Join(out, ", ") ++ if outlist != "" { ++ outlist = fmt.Sprintf(" (%s)", outlist) ++ } ++ if text != "" { ++ text += "\n" ++ } ++ text += fmt.Sprintf("func %s(%s)%s {\n", funct, strings.Join(in, ", "), outlist) ++ ++ // Check if err return available ++ errvar := "" ++ for _, param := range out { ++ p := parseParam(param) ++ if p.Type == "error" { ++ errvar = p.Name ++ continue ++ } ++ } ++ ++ // Prepare arguments to Syscall. ++ var args []string ++ n := 0 ++ for _, param := range in { ++ p := parseParam(param) ++ if regexp.MustCompile(`^\*`).FindStringSubmatch(p.Type) != nil { ++ args = append(args, "uintptr(unsafe.Pointer("+p.Name+"))") ++ } else if p.Type == "string" && errvar != "" { ++ text += fmt.Sprintf("\tvar _p%d %s\n", n, strconvtype) ++ text += fmt.Sprintf("\t_p%d, %s = %s(%s)\n", n, errvar, strconvfunc, p.Name) ++ text += fmt.Sprintf("\tif %s != nil {\n\t\treturn\n\t}\n", errvar) ++ args = append(args, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n)) ++ n++ ++ } else if p.Type == "string" { ++ fmt.Fprintf(os.Stderr, path+":"+funct+" uses string arguments, but has no error return\n") ++ text += fmt.Sprintf("\tvar _p%d %s\n", n, strconvtype) ++ text += fmt.Sprintf("\t_p%d, _ = %s(%s)\n", n, strconvfunc, p.Name) ++ args = append(args, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n)) ++ n++ ++ } else if s := regexp.MustCompile(`^\[\](.*)`).FindStringSubmatch(p.Type); s != nil { ++ // Convert slice into pointer, length. ++ // Have to be careful not to take address of &a[0] if len == 0: ++ // pass nil in that case. ++ text += fmt.Sprintf("\tvar _p%d *%s\n", n, s[1]) ++ text += fmt.Sprintf("\tif len(%s) > 0 {\n\t\t_p%d = &%s[0]\n\t}\n", p.Name, n, p.Name) ++ args = append(args, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n), fmt.Sprintf("uintptr(len(%s))", p.Name)) ++ n++ ++ } else if p.Type == "int64" && endianness != "" { ++ if endianness == "big-endian" { ++ args = append(args, fmt.Sprintf("uintptr(%s>>32)", p.Name), fmt.Sprintf("uintptr(%s)", p.Name)) ++ } else { ++ args = append(args, fmt.Sprintf("uintptr(%s)", p.Name), fmt.Sprintf("uintptr(%s>>32)", p.Name)) ++ } ++ } else if p.Type == "bool" { ++ text += fmt.Sprintf("\tvar _p%d uint32\n", n) ++ text += fmt.Sprintf("\tif %s {\n\t\t_p%d = 1\n\t} else {\n\t\t_p%d = 0\n\t}\n", p.Name, n, n) ++ args = append(args, fmt.Sprintf("uintptr(_p%d)", n)) ++ n++ ++ } else { ++ args = append(args, fmt.Sprintf("uintptr(%s)", p.Name)) ++ } ++ } ++ nargs := len(args) ++ ++ // Determine which form to use; pad args with zeros. ++ asm := "sysvicall6" ++ if nonblock != nil { ++ asm = "rawSysvicall6" ++ } ++ if len(args) <= 6 { ++ for len(args) < 6 { ++ args = append(args, "0") ++ } ++ } else { ++ fmt.Fprintf(os.Stderr, "%s: too many arguments to system call\n", path) ++ os.Exit(1) ++ } ++ ++ // Actual call. ++ arglist := strings.Join(args, ", ") ++ call := fmt.Sprintf("%s(uintptr(unsafe.Pointer(&%s)), %d, %s)", asm, sysvarname, nargs, arglist) ++ ++ // Assign return values. ++ body := "" ++ ret := []string{"_", "_", "_"} ++ doErrno := false ++ for i := 0; i < len(out); i++ { ++ p := parseParam(out[i]) ++ reg := "" ++ if p.Name == "err" { ++ reg = "e1" ++ ret[2] = reg ++ doErrno = true ++ } else { ++ reg = fmt.Sprintf("r%d", i) ++ ret[i] = reg ++ } ++ if p.Type == "bool" { ++ reg = fmt.Sprintf("%d != 0", reg) ++ } ++ if p.Type == "int64" && endianness != "" { ++ // 64-bit number in r1:r0 or r0:r1. ++ if i+2 > len(out) { ++ fmt.Fprintf(os.Stderr, "%s: not enough registers for int64 return\n", path) ++ os.Exit(1) ++ } ++ if endianness == "big-endian" { ++ reg = fmt.Sprintf("int64(r%d)<<32 | int64(r%d)", i, i+1) ++ } else { ++ reg = fmt.Sprintf("int64(r%d)<<32 | int64(r%d)", i+1, i) ++ } ++ ret[i] = fmt.Sprintf("r%d", i) ++ ret[i+1] = fmt.Sprintf("r%d", i+1) ++ } ++ if reg != "e1" { ++ body += fmt.Sprintf("\t%s = %s(%s)\n", p.Name, p.Type, reg) ++ } ++ } ++ if ret[0] == "_" && ret[1] == "_" && ret[2] == "_" { ++ text += fmt.Sprintf("\t%s\n", call) ++ } else { ++ text += fmt.Sprintf("\t%s, %s, %s := %s\n", ret[0], ret[1], ret[2], call) ++ } ++ text += body ++ ++ if doErrno { ++ text += "\tif e1 != 0 {\n" ++ text += "\t\terr = e1\n" ++ text += "\t}\n" ++ } ++ text += "\treturn\n" ++ text += "}\n" ++ } ++ if err := s.Err(); err != nil { ++ fmt.Fprintf(os.Stderr, err.Error()) ++ os.Exit(1) ++ } ++ file.Close() ++ } ++ imp := "" ++ if pack != "unix" { ++ imp = "import \"golang.org/x/sys/unix\"\n" ++ } ++ ++ syscallimp := "" ++ if !*illumos { ++ syscallimp = "\"syscall\"" ++ } ++ ++ vardecls := "\t" + strings.Join(vars, ",\n\t") ++ vardecls += " syscallFunc" ++ fmt.Printf(srcTemplate, cmdLine(), buildTags(), pack, syscallimp, imp, dynimports, linknames, vardecls, text) ++} ++ ++const srcTemplate = `// %s ++// Code generated by the command above; see README.md. DO NOT EDIT. ++ ++// +build %s ++ ++package %s ++ ++import ( ++ "unsafe" ++ %s ++) ++%s ++%s ++%s ++var ( ++%s ++) ++ ++%s ++` +diff --git a/vendor/golang.org/x/sys/unix/mksysctl_openbsd.go b/vendor/golang.org/x/sys/unix/mksysctl_openbsd.go +new file mode 100644 +index 0000000..b6b4099 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/mksysctl_openbsd.go +@@ -0,0 +1,355 @@ ++// Copyright 2019 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build ignore ++ ++// Parse the header files for OpenBSD and generate a Go usable sysctl MIB. ++// ++// Build a MIB with each entry being an array containing the level, type and ++// a hash that will contain additional entries if the current entry is a node. ++// We then walk this MIB and create a flattened sysctl name to OID hash. ++ ++package main ++ ++import ( ++ "bufio" ++ "fmt" ++ "os" ++ "path/filepath" ++ "regexp" ++ "sort" ++ "strings" ++) ++ ++var ( ++ goos, goarch string ++) ++ ++// cmdLine returns this programs's commandline arguments. ++func cmdLine() string { ++ return "go run mksysctl_openbsd.go " + strings.Join(os.Args[1:], " ") ++} ++ ++// buildTags returns build tags. ++func buildTags() string { ++ return fmt.Sprintf("%s,%s", goarch, goos) ++} ++ ++// reMatch performs regular expression match and stores the substring slice to value pointed by m. ++func reMatch(re *regexp.Regexp, str string, m *[]string) bool { ++ *m = re.FindStringSubmatch(str) ++ if *m != nil { ++ return true ++ } ++ return false ++} ++ ++type nodeElement struct { ++ n int ++ t string ++ pE *map[string]nodeElement ++} ++ ++var ( ++ debugEnabled bool ++ mib map[string]nodeElement ++ node *map[string]nodeElement ++ nodeMap map[string]string ++ sysCtl []string ++) ++ ++var ( ++ ctlNames1RE = regexp.MustCompile(`^#define\s+(CTL_NAMES)\s+{`) ++ ctlNames2RE = regexp.MustCompile(`^#define\s+(CTL_(.*)_NAMES)\s+{`) ++ ctlNames3RE = regexp.MustCompile(`^#define\s+((.*)CTL_NAMES)\s+{`) ++ netInetRE = regexp.MustCompile(`^netinet/`) ++ netInet6RE = regexp.MustCompile(`^netinet6/`) ++ netRE = regexp.MustCompile(`^net/`) ++ bracesRE = regexp.MustCompile(`{.*}`) ++ ctlTypeRE = regexp.MustCompile(`{\s+"(\w+)",\s+(CTLTYPE_[A-Z]+)\s+}`) ++ fsNetKernRE = regexp.MustCompile(`^(fs|net|kern)_`) ++) ++ ++func debug(s string) { ++ if debugEnabled { ++ fmt.Fprintln(os.Stderr, s) ++ } ++} ++ ++// Walk the MIB and build a sysctl name to OID mapping. ++func buildSysctl(pNode *map[string]nodeElement, name string, oid []int) { ++ lNode := pNode // local copy of pointer to node ++ var keys []string ++ for k := range *lNode { ++ keys = append(keys, k) ++ } ++ sort.Strings(keys) ++ ++ for _, key := range keys { ++ nodename := name ++ if name != "" { ++ nodename += "." ++ } ++ nodename += key ++ ++ nodeoid := append(oid, (*pNode)[key].n) ++ ++ if (*pNode)[key].t == `CTLTYPE_NODE` { ++ if _, ok := nodeMap[nodename]; ok { ++ lNode = &mib ++ ctlName := nodeMap[nodename] ++ for _, part := range strings.Split(ctlName, ".") { ++ lNode = ((*lNode)[part]).pE ++ } ++ } else { ++ lNode = (*pNode)[key].pE ++ } ++ buildSysctl(lNode, nodename, nodeoid) ++ } else if (*pNode)[key].t != "" { ++ oidStr := []string{} ++ for j := range nodeoid { ++ oidStr = append(oidStr, fmt.Sprintf("%d", nodeoid[j])) ++ } ++ text := "\t{ \"" + nodename + "\", []_C_int{ " + strings.Join(oidStr, ", ") + " } }, \n" ++ sysCtl = append(sysCtl, text) ++ } ++ } ++} ++ ++func main() { ++ // Get the OS (using GOOS_TARGET if it exist) ++ goos = os.Getenv("GOOS_TARGET") ++ if goos == "" { ++ goos = os.Getenv("GOOS") ++ } ++ // Get the architecture (using GOARCH_TARGET if it exists) ++ goarch = os.Getenv("GOARCH_TARGET") ++ if goarch == "" { ++ goarch = os.Getenv("GOARCH") ++ } ++ // Check if GOOS and GOARCH environment variables are defined ++ if goarch == "" || goos == "" { ++ fmt.Fprintf(os.Stderr, "GOARCH or GOOS not defined in environment\n") ++ os.Exit(1) ++ } ++ ++ mib = make(map[string]nodeElement) ++ headers := [...]string{ ++ `sys/sysctl.h`, ++ `sys/socket.h`, ++ `sys/tty.h`, ++ `sys/malloc.h`, ++ `sys/mount.h`, ++ `sys/namei.h`, ++ `sys/sem.h`, ++ `sys/shm.h`, ++ `sys/vmmeter.h`, ++ `uvm/uvmexp.h`, ++ `uvm/uvm_param.h`, ++ `uvm/uvm_swap_encrypt.h`, ++ `ddb/db_var.h`, ++ `net/if.h`, ++ `net/if_pfsync.h`, ++ `net/pipex.h`, ++ `netinet/in.h`, ++ `netinet/icmp_var.h`, ++ `netinet/igmp_var.h`, ++ `netinet/ip_ah.h`, ++ `netinet/ip_carp.h`, ++ `netinet/ip_divert.h`, ++ `netinet/ip_esp.h`, ++ `netinet/ip_ether.h`, ++ `netinet/ip_gre.h`, ++ `netinet/ip_ipcomp.h`, ++ `netinet/ip_ipip.h`, ++ `netinet/pim_var.h`, ++ `netinet/tcp_var.h`, ++ `netinet/udp_var.h`, ++ `netinet6/in6.h`, ++ `netinet6/ip6_divert.h`, ++ `netinet6/pim6_var.h`, ++ `netinet/icmp6.h`, ++ `netmpls/mpls.h`, ++ } ++ ++ ctls := [...]string{ ++ `kern`, ++ `vm`, ++ `fs`, ++ `net`, ++ //debug /* Special handling required */ ++ `hw`, ++ //machdep /* Arch specific */ ++ `user`, ++ `ddb`, ++ //vfs /* Special handling required */ ++ `fs.posix`, ++ `kern.forkstat`, ++ `kern.intrcnt`, ++ `kern.malloc`, ++ `kern.nchstats`, ++ `kern.seminfo`, ++ `kern.shminfo`, ++ `kern.timecounter`, ++ `kern.tty`, ++ `kern.watchdog`, ++ `net.bpf`, ++ `net.ifq`, ++ `net.inet`, ++ `net.inet.ah`, ++ `net.inet.carp`, ++ `net.inet.divert`, ++ `net.inet.esp`, ++ `net.inet.etherip`, ++ `net.inet.gre`, ++ `net.inet.icmp`, ++ `net.inet.igmp`, ++ `net.inet.ip`, ++ `net.inet.ip.ifq`, ++ `net.inet.ipcomp`, ++ `net.inet.ipip`, ++ `net.inet.mobileip`, ++ `net.inet.pfsync`, ++ `net.inet.pim`, ++ `net.inet.tcp`, ++ `net.inet.udp`, ++ `net.inet6`, ++ `net.inet6.divert`, ++ `net.inet6.ip6`, ++ `net.inet6.icmp6`, ++ `net.inet6.pim6`, ++ `net.inet6.tcp6`, ++ `net.inet6.udp6`, ++ `net.mpls`, ++ `net.mpls.ifq`, ++ `net.key`, ++ `net.pflow`, ++ `net.pfsync`, ++ `net.pipex`, ++ `net.rt`, ++ `vm.swapencrypt`, ++ //vfsgenctl /* Special handling required */ ++ } ++ ++ // Node name "fixups" ++ ctlMap := map[string]string{ ++ "ipproto": "net.inet", ++ "net.inet.ipproto": "net.inet", ++ "net.inet6.ipv6proto": "net.inet6", ++ "net.inet6.ipv6": "net.inet6.ip6", ++ "net.inet.icmpv6": "net.inet6.icmp6", ++ "net.inet6.divert6": "net.inet6.divert", ++ "net.inet6.tcp6": "net.inet.tcp", ++ "net.inet6.udp6": "net.inet.udp", ++ "mpls": "net.mpls", ++ "swpenc": "vm.swapencrypt", ++ } ++ ++ // Node mappings ++ nodeMap = map[string]string{ ++ "net.inet.ip.ifq": "net.ifq", ++ "net.inet.pfsync": "net.pfsync", ++ "net.mpls.ifq": "net.ifq", ++ } ++ ++ mCtls := make(map[string]bool) ++ for _, ctl := range ctls { ++ mCtls[ctl] = true ++ } ++ ++ for _, header := range headers { ++ debug("Processing " + header) ++ file, err := os.Open(filepath.Join("/usr/include", header)) ++ if err != nil { ++ fmt.Fprintf(os.Stderr, "%v\n", err) ++ os.Exit(1) ++ } ++ s := bufio.NewScanner(file) ++ for s.Scan() { ++ var sub []string ++ if reMatch(ctlNames1RE, s.Text(), &sub) || ++ reMatch(ctlNames2RE, s.Text(), &sub) || ++ reMatch(ctlNames3RE, s.Text(), &sub) { ++ if sub[1] == `CTL_NAMES` { ++ // Top level. ++ node = &mib ++ } else { ++ // Node. ++ nodename := strings.ToLower(sub[2]) ++ ctlName := "" ++ if reMatch(netInetRE, header, &sub) { ++ ctlName = "net.inet." + nodename ++ } else if reMatch(netInet6RE, header, &sub) { ++ ctlName = "net.inet6." + nodename ++ } else if reMatch(netRE, header, &sub) { ++ ctlName = "net." + nodename ++ } else { ++ ctlName = nodename ++ ctlName = fsNetKernRE.ReplaceAllString(ctlName, `$1.`) ++ } ++ ++ if val, ok := ctlMap[ctlName]; ok { ++ ctlName = val ++ } ++ if _, ok := mCtls[ctlName]; !ok { ++ debug("Ignoring " + ctlName + "...") ++ continue ++ } ++ ++ // Walk down from the top of the MIB. ++ node = &mib ++ for _, part := range strings.Split(ctlName, ".") { ++ if _, ok := (*node)[part]; !ok { ++ debug("Missing node " + part) ++ (*node)[part] = nodeElement{n: 0, t: "", pE: &map[string]nodeElement{}} ++ } ++ node = (*node)[part].pE ++ } ++ } ++ ++ // Populate current node with entries. ++ i := -1 ++ for !strings.HasPrefix(s.Text(), "}") { ++ s.Scan() ++ if reMatch(bracesRE, s.Text(), &sub) { ++ i++ ++ } ++ if !reMatch(ctlTypeRE, s.Text(), &sub) { ++ continue ++ } ++ (*node)[sub[1]] = nodeElement{n: i, t: sub[2], pE: &map[string]nodeElement{}} ++ } ++ } ++ } ++ err = s.Err() ++ if err != nil { ++ fmt.Fprintf(os.Stderr, "%v\n", err) ++ os.Exit(1) ++ } ++ file.Close() ++ } ++ buildSysctl(&mib, "", []int{}) ++ ++ sort.Strings(sysCtl) ++ text := strings.Join(sysCtl, "") ++ ++ fmt.Printf(srcTemplate, cmdLine(), buildTags(), text) ++} ++ ++const srcTemplate = `// %s ++// Code generated by the command above; DO NOT EDIT. ++ ++// +build %s ++ ++package unix ++ ++type mibentry struct { ++ ctlname string ++ ctloid []_C_int ++} ++ ++var sysctlMib = []mibentry { ++%s ++} ++` +diff --git a/vendor/golang.org/x/sys/unix/mksysnum.go b/vendor/golang.org/x/sys/unix/mksysnum.go +new file mode 100644 +index 0000000..baa6ecd +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/mksysnum.go +@@ -0,0 +1,190 @@ ++// Copyright 2018 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build ignore ++ ++// Generate system call table for DragonFly, NetBSD, ++// FreeBSD, OpenBSD or Darwin from master list ++// (for example, /usr/src/sys/kern/syscalls.master or ++// sys/syscall.h). ++package main ++ ++import ( ++ "bufio" ++ "fmt" ++ "io" ++ "io/ioutil" ++ "net/http" ++ "os" ++ "regexp" ++ "strings" ++) ++ ++var ( ++ goos, goarch string ++) ++ ++// cmdLine returns this programs's commandline arguments ++func cmdLine() string { ++ return "go run mksysnum.go " + strings.Join(os.Args[1:], " ") ++} ++ ++// buildTags returns build tags ++func buildTags() string { ++ return fmt.Sprintf("%s,%s", goarch, goos) ++} ++ ++func checkErr(err error) { ++ if err != nil { ++ fmt.Fprintf(os.Stderr, "%v\n", err) ++ os.Exit(1) ++ } ++} ++ ++// source string and substring slice for regexp ++type re struct { ++ str string // source string ++ sub []string // matched sub-string ++} ++ ++// Match performs regular expression match ++func (r *re) Match(exp string) bool { ++ r.sub = regexp.MustCompile(exp).FindStringSubmatch(r.str) ++ if r.sub != nil { ++ return true ++ } ++ return false ++} ++ ++// fetchFile fetches a text file from URL ++func fetchFile(URL string) io.Reader { ++ resp, err := http.Get(URL) ++ checkErr(err) ++ defer resp.Body.Close() ++ body, err := ioutil.ReadAll(resp.Body) ++ checkErr(err) ++ return strings.NewReader(string(body)) ++} ++ ++// readFile reads a text file from path ++func readFile(path string) io.Reader { ++ file, err := os.Open(os.Args[1]) ++ checkErr(err) ++ return file ++} ++ ++func format(name, num, proto string) string { ++ name = strings.ToUpper(name) ++ // There are multiple entries for enosys and nosys, so comment them out. ++ nm := re{str: name} ++ if nm.Match(`^SYS_E?NOSYS$`) { ++ name = fmt.Sprintf("// %s", name) ++ } ++ if name == `SYS_SYS_EXIT` { ++ name = `SYS_EXIT` ++ } ++ return fmt.Sprintf(" %s = %s; // %s\n", name, num, proto) ++} ++ ++func main() { ++ // Get the OS (using GOOS_TARGET if it exist) ++ goos = os.Getenv("GOOS_TARGET") ++ if goos == "" { ++ goos = os.Getenv("GOOS") ++ } ++ // Get the architecture (using GOARCH_TARGET if it exists) ++ goarch = os.Getenv("GOARCH_TARGET") ++ if goarch == "" { ++ goarch = os.Getenv("GOARCH") ++ } ++ // Check if GOOS and GOARCH environment variables are defined ++ if goarch == "" || goos == "" { ++ fmt.Fprintf(os.Stderr, "GOARCH or GOOS not defined in environment\n") ++ os.Exit(1) ++ } ++ ++ file := strings.TrimSpace(os.Args[1]) ++ var syscalls io.Reader ++ if strings.HasPrefix(file, "https://") || strings.HasPrefix(file, "http://") { ++ // Download syscalls.master file ++ syscalls = fetchFile(file) ++ } else { ++ syscalls = readFile(file) ++ } ++ ++ var text, line string ++ s := bufio.NewScanner(syscalls) ++ for s.Scan() { ++ t := re{str: line} ++ if t.Match(`^(.*)\\$`) { ++ // Handle continuation ++ line = t.sub[1] ++ line += strings.TrimLeft(s.Text(), " \t") ++ } else { ++ // New line ++ line = s.Text() ++ } ++ t = re{str: line} ++ if t.Match(`\\$`) { ++ continue ++ } ++ t = re{str: line} ++ ++ switch goos { ++ case "dragonfly": ++ if t.Match(`^([0-9]+)\s+STD\s+({ \S+\s+(\w+).*)$`) { ++ num, proto := t.sub[1], t.sub[2] ++ name := fmt.Sprintf("SYS_%s", t.sub[3]) ++ text += format(name, num, proto) ++ } ++ case "freebsd": ++ if t.Match(`^([0-9]+)\s+\S+\s+(?:(?:NO)?STD|COMPAT10)\s+({ \S+\s+(\w+).*)$`) { ++ num, proto := t.sub[1], t.sub[2] ++ name := fmt.Sprintf("SYS_%s", t.sub[3]) ++ text += format(name, num, proto) ++ } ++ case "openbsd": ++ if t.Match(`^([0-9]+)\s+STD\s+(NOLOCK\s+)?({ \S+\s+\*?(\w+).*)$`) { ++ num, proto, name := t.sub[1], t.sub[3], t.sub[4] ++ text += format(name, num, proto) ++ } ++ case "netbsd": ++ if t.Match(`^([0-9]+)\s+((STD)|(NOERR))\s+(RUMP\s+)?({\s+\S+\s*\*?\s*\|(\S+)\|(\S*)\|(\w+).*\s+})(\s+(\S+))?$`) { ++ num, proto, compat := t.sub[1], t.sub[6], t.sub[8] ++ name := t.sub[7] + "_" + t.sub[9] ++ if t.sub[11] != "" { ++ name = t.sub[7] + "_" + t.sub[11] ++ } ++ name = strings.ToUpper(name) ++ if compat == "" || compat == "13" || compat == "30" || compat == "50" { ++ text += fmt.Sprintf(" %s = %s; // %s\n", name, num, proto) ++ } ++ } ++ case "darwin": ++ if t.Match(`^#define\s+SYS_(\w+)\s+([0-9]+)`) { ++ name, num := t.sub[1], t.sub[2] ++ name = strings.ToUpper(name) ++ text += fmt.Sprintf(" SYS_%s = %s;\n", name, num) ++ } ++ default: ++ fmt.Fprintf(os.Stderr, "unrecognized GOOS=%s\n", goos) ++ os.Exit(1) ++ ++ } ++ } ++ err := s.Err() ++ checkErr(err) ++ ++ fmt.Printf(template, cmdLine(), buildTags(), text) ++} ++ ++const template = `// %s ++// Code generated by the command above; see README.md. DO NOT EDIT. ++ ++// +build %s ++ ++package unix ++ ++const( ++%s)` +diff --git a/vendor/golang.org/x/sys/unix/mmap_unix_test.go b/vendor/golang.org/x/sys/unix/mmap_unix_test.go +new file mode 100644 +index 0000000..d4c4ef9 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/mmap_unix_test.go +@@ -0,0 +1,41 @@ ++// Copyright 2014 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris ++ ++package unix_test ++ ++import ( ++ "runtime" ++ "testing" ++ ++ "golang.org/x/sys/unix" ++) ++ ++func TestMmap(t *testing.T) { ++ b, err := unix.Mmap(-1, 0, unix.Getpagesize(), unix.PROT_NONE, unix.MAP_ANON|unix.MAP_PRIVATE) ++ if err != nil { ++ t.Fatalf("Mmap: %v", err) ++ } ++ if err := unix.Mprotect(b, unix.PROT_READ|unix.PROT_WRITE); err != nil { ++ t.Fatalf("Mprotect: %v", err) ++ } ++ ++ b[0] = 42 ++ ++ if runtime.GOOS == "aix" { ++ t.Skip("msync returns invalid argument for AIX, skipping msync test") ++ } else { ++ if err := unix.Msync(b, unix.MS_SYNC); err != nil { ++ t.Fatalf("Msync: %v", err) ++ } ++ } ++ ++ if err := unix.Madvise(b, unix.MADV_DONTNEED); err != nil { ++ t.Fatalf("Madvise: %v", err) ++ } ++ if err := unix.Munmap(b); err != nil { ++ t.Fatalf("Munmap: %v", err) ++ } ++} +diff --git a/vendor/golang.org/x/sys/unix/openbsd_test.go b/vendor/golang.org/x/sys/unix/openbsd_test.go +new file mode 100644 +index 0000000..3ded960 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/openbsd_test.go +@@ -0,0 +1,113 @@ ++// Copyright 2016 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build openbsd ++ ++// This, on the face of it, bizarre testing mechanism is necessary because ++// the only reliable way to gauge whether or not a pledge(2) call has succeeded ++// is that the program has been killed as a result of breaking its pledge. ++ ++package unix_test ++ ++import ( ++ "flag" ++ "fmt" ++ "io/ioutil" ++ "os" ++ "os/exec" ++ "path/filepath" ++ "testing" ++ ++ "golang.org/x/sys/unix" ++) ++ ++type testProc struct { ++ fn func() // should always exit instead of returning ++ cleanup func() error // for instance, delete coredumps from testing pledge ++ success bool // whether zero-exit means success or failure ++} ++ ++var ( ++ testProcs = map[string]testProc{} ++ procName = "" ++) ++ ++const ( ++ optName = "sys-unix-internal-procname" ++) ++ ++func init() { ++ flag.StringVar(&procName, optName, "", "internal use only") ++} ++ ++// testCmd generates a proper command that, when executed, runs the test ++// corresponding to the given key. ++func testCmd(procName string) (*exec.Cmd, error) { ++ exe, err := filepath.Abs(os.Args[0]) ++ if err != nil { ++ return nil, err ++ } ++ cmd := exec.Command(exe, "-"+optName+"="+procName) ++ cmd.Stdout, cmd.Stderr = os.Stdout, os.Stderr ++ return cmd, nil ++} ++ ++// ExitsCorrectly is a comprehensive, one-line-of-use wrapper for testing ++// a testProc with a key. ++func ExitsCorrectly(procName string, t *testing.T) { ++ s := testProcs[procName] ++ c, err := testCmd(procName) ++ defer func() { ++ if s.cleanup() != nil { ++ t.Fatalf("Failed to run cleanup for %s", procName) ++ } ++ }() ++ if err != nil { ++ t.Fatalf("Failed to construct command for %s", procName) ++ } ++ if (c.Run() == nil) != s.success { ++ result := "succeed" ++ if !s.success { ++ result = "fail" ++ } ++ t.Fatalf("Process did not %s when it was supposed to", result) ++ } ++} ++ ++func TestMain(m *testing.M) { ++ flag.Parse() ++ if procName != "" { ++ testProcs[procName].fn() ++ } ++ os.Exit(m.Run()) ++} ++ ++// For example, add a test for pledge. ++func init() { ++ testProcs["pledge"] = testProc{ ++ func() { ++ fmt.Println(unix.Pledge("", "")) ++ os.Exit(0) ++ }, ++ func() error { ++ files, err := ioutil.ReadDir(".") ++ if err != nil { ++ return err ++ } ++ for _, file := range files { ++ if filepath.Ext(file.Name()) == ".core" { ++ if err := os.Remove(file.Name()); err != nil { ++ return err ++ } ++ } ++ } ++ return nil ++ }, ++ false, ++ } ++} ++ ++func TestPledge(t *testing.T) { ++ ExitsCorrectly("pledge", t) ++} +diff --git a/vendor/golang.org/x/sys/unix/sendfile_test.go b/vendor/golang.org/x/sys/unix/sendfile_test.go +new file mode 100644 +index 0000000..814b4d9 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/sendfile_test.go +@@ -0,0 +1,103 @@ ++// Copyright 2018 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build darwin,amd64 darwin,386 dragonfly freebsd linux solaris ++ ++package unix_test ++ ++import ( ++ "io/ioutil" ++ "net" ++ "os" ++ "path/filepath" ++ "testing" ++ ++ "golang.org/x/sys/unix" ++) ++ ++func TestSendfile(t *testing.T) { ++ // Set up source data file. ++ tempDir, err := ioutil.TempDir("", "TestSendfile") ++ if err != nil { ++ t.Fatal(err) ++ } ++ defer os.RemoveAll(tempDir) ++ name := filepath.Join(tempDir, "source") ++ const contents = "contents" ++ err = ioutil.WriteFile(name, []byte(contents), 0666) ++ if err != nil { ++ t.Fatal(err) ++ } ++ ++ done := make(chan bool) ++ ++ // Start server listening on a socket. ++ ln, err := net.Listen("tcp", "127.0.0.1:0") ++ if err != nil { ++ t.Skipf("listen failed: %s\n", err) ++ } ++ defer ln.Close() ++ go func() { ++ conn, err := ln.Accept() ++ if err != nil { ++ t.Errorf("failed to accept: %v", err) ++ return ++ } ++ defer conn.Close() ++ b, err := ioutil.ReadAll(conn) ++ if err != nil { ++ t.Errorf("failed to read: %v", err) ++ return ++ } ++ if string(b) != contents { ++ t.Errorf("contents not transmitted: got %s (len=%d), want %s", string(b), len(b), contents) ++ } ++ done <- true ++ }() ++ ++ // Open source file. ++ src, err := os.Open(name) ++ if err != nil { ++ t.Fatal(err) ++ } ++ ++ // Send source file to server. ++ conn, err := net.Dial("tcp", ln.Addr().String()) ++ if err != nil { ++ t.Fatal(err) ++ } ++ file, err := conn.(*net.TCPConn).File() ++ if err != nil { ++ t.Fatal(err) ++ } ++ var off int64 ++ n, err := unix.Sendfile(int(file.Fd()), int(src.Fd()), &off, len(contents)) ++ if err != nil { ++ t.Errorf("Sendfile failed %s\n", err) ++ } ++ if n != len(contents) { ++ t.Errorf("written count wrong: want %d, got %d", len(contents), n) ++ } ++ // Note: off is updated on some systems and not others. Oh well. ++ // Linux: increments off by the amount sent. ++ // Darwin: leaves off unchanged. ++ // It would be nice to fix Darwin if we can. ++ if off != 0 && off != int64(len(contents)) { ++ t.Errorf("offset wrong: god %d, want %d or %d", off, 0, len(contents)) ++ } ++ // The cursor position should be unchanged. ++ pos, err := src.Seek(0, 1) ++ if err != nil { ++ t.Errorf("can't get cursor position %s\n", err) ++ } ++ if pos != 0 { ++ t.Errorf("cursor position wrong: got %d, want 0", pos) ++ } ++ ++ file.Close() // Note: required to have the close below really send EOF to the server. ++ conn.Close() ++ ++ // Wait for server to close. ++ <-done ++} +diff --git a/vendor/golang.org/x/sys/unix/syscall_aix_test.go b/vendor/golang.org/x/sys/unix/syscall_aix_test.go +new file mode 100644 +index 0000000..bfa2782 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/syscall_aix_test.go +@@ -0,0 +1,107 @@ ++// Copyright 2018 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build aix ++ ++package unix_test ++ ++import ( ++ "os" ++ "runtime" ++ "testing" ++ "time" ++ ++ "golang.org/x/sys/unix" ++) ++ ++func TestIoctlGetInt(t *testing.T) { ++ f, err := os.Open("/dev/random") ++ if err != nil { ++ t.Fatalf("failed to open device: %v", err) ++ } ++ defer f.Close() ++ ++ v, err := unix.IoctlGetInt(int(f.Fd()), unix.RNDGETENTCNT) ++ if err != nil { ++ t.Fatalf("failed to perform ioctl: %v", err) ++ } ++ ++ t.Logf("%d bits of entropy available", v) ++} ++ ++func TestTime(t *testing.T) { ++ var ut unix.Time_t ++ ut2, err := unix.Time(&ut) ++ if err != nil { ++ t.Fatalf("Time: %v", err) ++ } ++ if ut != ut2 { ++ t.Errorf("Time: return value %v should be equal to argument %v", ut2, ut) ++ } ++ ++ var now time.Time ++ ++ for i := 0; i < 10; i++ { ++ ut, err = unix.Time(nil) ++ if err != nil { ++ t.Fatalf("Time: %v", err) ++ } ++ ++ now = time.Now() ++ diff := int64(ut) - now.Unix() ++ if -1 <= diff && diff <= 1 { ++ return ++ } ++ } ++ ++ t.Errorf("Time: return value %v should be nearly equal to time.Now().Unix() %v±1", ut, now.Unix()) ++} ++ ++func TestUtime(t *testing.T) { ++ defer chtmpdir(t)() ++ ++ touch(t, "file1") ++ ++ buf := &unix.Utimbuf{ ++ Modtime: 12345, ++ } ++ ++ err := unix.Utime("file1", buf) ++ if err != nil { ++ t.Fatalf("Utime: %v", err) ++ } ++ ++ fi, err := os.Stat("file1") ++ if err != nil { ++ t.Fatal(err) ++ } ++ ++ if fi.ModTime().Unix() != 12345 { ++ t.Errorf("Utime: failed to change modtime: expected %v, got %v", 12345, fi.ModTime().Unix()) ++ } ++} ++ ++func TestPselect(t *testing.T) { ++ if runtime.GOARCH == "ppc64" { ++ t.Skip("pselect issue with structure timespec on AIX 7.2 tl0, skipping test") ++ } ++ ++ _, err := unix.Pselect(0, nil, nil, nil, &unix.Timespec{Sec: 0, Nsec: 0}, nil) ++ if err != nil { ++ t.Fatalf("Pselect: %v", err) ++ } ++ ++ dur := 2500 * time.Microsecond ++ ts := unix.NsecToTimespec(int64(dur)) ++ start := time.Now() ++ _, err = unix.Pselect(0, nil, nil, nil, &ts, nil) ++ took := time.Since(start) ++ if err != nil { ++ t.Fatalf("Pselect: %v", err) ++ } ++ ++ if took < dur { ++ t.Errorf("Pselect: timeout should have been at least %v, got %v", dur, took) ++ } ++} +diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd_test.go b/vendor/golang.org/x/sys/unix/syscall_bsd_test.go +new file mode 100644 +index 0000000..f8ec9d1 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/syscall_bsd_test.go +@@ -0,0 +1,75 @@ ++// Copyright 2014 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build darwin dragonfly freebsd openbsd ++ ++package unix_test ++ ++import ( ++ "os/exec" ++ "runtime" ++ "testing" ++ ++ "golang.org/x/sys/unix" ++) ++ ++func TestGetfsstat(t *testing.T) { ++ n, err := unix.Getfsstat(nil, unix.MNT_NOWAIT) ++ if err != nil { ++ t.Fatal(err) ++ } ++ ++ data := make([]unix.Statfs_t, n) ++ n2, err := unix.Getfsstat(data, unix.MNT_NOWAIT) ++ if err != nil { ++ t.Fatal(err) ++ } ++ if n != n2 { ++ t.Errorf("Getfsstat(nil) = %d, but subsequent Getfsstat(slice) = %d", n, n2) ++ } ++ for i, stat := range data { ++ if stat == (unix.Statfs_t{}) { ++ t.Errorf("index %v is an empty Statfs_t struct", i) ++ } ++ } ++ if t.Failed() { ++ for i, stat := range data[:n2] { ++ t.Logf("data[%v] = %+v", i, stat) ++ } ++ mount, err := exec.Command("mount").CombinedOutput() ++ if err != nil { ++ t.Logf("mount: %v\n%s", err, mount) ++ } else { ++ t.Logf("mount: %s", mount) ++ } ++ } ++} ++ ++func TestSysctlRaw(t *testing.T) { ++ if runtime.GOOS == "openbsd" { ++ t.Skip("kern.proc.pid does not exist on OpenBSD") ++ } ++ ++ _, err := unix.SysctlRaw("kern.proc.pid", unix.Getpid()) ++ if err != nil { ++ t.Fatal(err) ++ } ++} ++ ++func TestSysctlUint32(t *testing.T) { ++ maxproc, err := unix.SysctlUint32("kern.maxproc") ++ if err != nil { ++ t.Fatal(err) ++ } ++ t.Logf("kern.maxproc: %v", maxproc) ++} ++ ++func TestSysctlClockinfo(t *testing.T) { ++ ci, err := unix.SysctlClockinfo("kern.clockrate") ++ if err != nil { ++ t.Fatal(err) ++ } ++ t.Logf("tick = %v, hz = %v, profhz = %v, stathz = %v", ++ ci.Tick, ci.Hz, ci.Profhz, ci.Stathz) ++} +diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go +index 0cf31ac..9a5a6ee 100644 +--- a/vendor/golang.org/x/sys/unix/syscall_darwin.go ++++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go +@@ -423,7 +423,6 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e + //sysnb Getrlimit(which int, lim *Rlimit) (err error) + //sysnb Getrusage(who int, rusage *Rusage) (err error) + //sysnb Getsid(pid int) (sid int, err error) +-//sysnb Gettimeofday(tp *Timeval) (err error) + //sysnb Getuid() (uid int) + //sysnb Issetugid() (tainted bool) + //sys Kqueue() (fd int, err error) +diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_386.go b/vendor/golang.org/x/sys/unix/syscall_darwin_386.go +index 2724e3a..707ba4f 100644 +--- a/vendor/golang.org/x/sys/unix/syscall_darwin_386.go ++++ b/vendor/golang.org/x/sys/unix/syscall_darwin_386.go +@@ -20,6 +20,17 @@ func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} + } + ++//sysnb gettimeofday(tp *Timeval) (sec int32, usec int32, err error) ++func Gettimeofday(tv *Timeval) (err error) { ++ // The tv passed to gettimeofday must be non-nil ++ // but is otherwise unused. The answers come back ++ // in the two registers. ++ sec, usec, err := gettimeofday(tv) ++ tv.Sec = int32(sec) ++ tv.Usec = int32(usec) ++ return err ++} ++ + func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) +diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go +index ce2e0d2..fdbfb59 100644 +--- a/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go ++++ b/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go +@@ -20,6 +20,17 @@ func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} + } + ++//sysnb gettimeofday(tp *Timeval) (sec int64, usec int32, err error) ++func Gettimeofday(tv *Timeval) (err error) { ++ // The tv passed to gettimeofday must be non-nil ++ // but is otherwise unused. The answers come back ++ // in the two registers. ++ sec, usec, err := gettimeofday(tv) ++ tv.Sec = sec ++ tv.Usec = usec ++ return err ++} ++ + func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) +diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go b/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go +index fc17a3f..f8bc4cf 100644 +--- a/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go ++++ b/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go +@@ -20,6 +20,17 @@ func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} + } + ++//sysnb gettimeofday(tp *Timeval) (sec int32, usec int32, err error) ++func Gettimeofday(tv *Timeval) (err error) { ++ // The tv passed to gettimeofday must be non-nil ++ // but is otherwise unused. The answers come back ++ // in the two registers. ++ sec, usec, err := gettimeofday(tv) ++ tv.Sec = int32(sec) ++ tv.Usec = int32(usec) ++ return err ++} ++ + func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) +diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go +index 1e91ddf..5ede3ac 100644 +--- a/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go ++++ b/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go +@@ -22,6 +22,17 @@ func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} + } + ++//sysnb gettimeofday(tp *Timeval) (sec int64, usec int32, err error) ++func Gettimeofday(tv *Timeval) (err error) { ++ // The tv passed to gettimeofday must be non-nil ++ // but is otherwise unused. The answers come back ++ // in the two registers. ++ sec, usec, err := gettimeofday(tv) ++ tv.Sec = sec ++ tv.Usec = usec ++ return err ++} ++ + func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) +diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_test.go b/vendor/golang.org/x/sys/unix/syscall_darwin_test.go +new file mode 100644 +index 0000000..65691d5 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/syscall_darwin_test.go +@@ -0,0 +1,19 @@ ++// Copyright 2018 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++package unix_test ++ ++// stringsFromByteSlice converts a sequence of attributes to a []string. ++// On Darwin, each entry is a NULL-terminated string. ++func stringsFromByteSlice(buf []byte) []string { ++ var result []string ++ off := 0 ++ for i, b := range buf { ++ if b == 0 { ++ result = append(result, string(buf[off:i])) ++ off = i + 1 ++ } ++ } ++ return result ++} +diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_test.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_test.go +new file mode 100644 +index 0000000..0fec1a8 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_test.go +@@ -0,0 +1,312 @@ ++// Copyright 2014 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build freebsd ++ ++package unix_test ++ ++import ( ++ "flag" ++ "fmt" ++ "io/ioutil" ++ "os" ++ "os/exec" ++ "path" ++ "path/filepath" ++ "runtime" ++ "testing" ++ ++ "golang.org/x/sys/unix" ++) ++ ++func TestSysctlUint64(t *testing.T) { ++ _, err := unix.SysctlUint64("vm.swap_total") ++ if err != nil { ++ t.Fatal(err) ++ } ++} ++ ++// FIXME: Infrastructure for launching tests in subprocesses stolen from openbsd_test.go - refactor? ++// testCmd generates a proper command that, when executed, runs the test ++// corresponding to the given key. ++ ++type testProc struct { ++ fn func() // should always exit instead of returning ++ arg func(t *testing.T) string // generate argument for test ++ cleanup func(arg string) error // for instance, delete coredumps from testing pledge ++ success bool // whether zero-exit means success or failure ++} ++ ++var ( ++ testProcs = map[string]testProc{} ++ procName = "" ++ procArg = "" ++) ++ ++const ( ++ optName = "sys-unix-internal-procname" ++ optArg = "sys-unix-internal-arg" ++) ++ ++func init() { ++ flag.StringVar(&procName, optName, "", "internal use only") ++ flag.StringVar(&procArg, optArg, "", "internal use only") ++ ++} ++ ++func testCmd(procName string, procArg string) (*exec.Cmd, error) { ++ exe, err := filepath.Abs(os.Args[0]) ++ if err != nil { ++ return nil, err ++ } ++ cmd := exec.Command(exe, "-"+optName+"="+procName, "-"+optArg+"="+procArg) ++ cmd.Stdout, cmd.Stderr = os.Stdout, os.Stderr ++ return cmd, nil ++} ++ ++// ExitsCorrectly is a comprehensive, one-line-of-use wrapper for testing ++// a testProc with a key. ++func ExitsCorrectly(t *testing.T, procName string) { ++ s := testProcs[procName] ++ arg := "-" ++ if s.arg != nil { ++ arg = s.arg(t) ++ } ++ c, err := testCmd(procName, arg) ++ defer func(arg string) { ++ if err := s.cleanup(arg); err != nil { ++ t.Fatalf("Failed to run cleanup for %s %s %#v", procName, err, err) ++ } ++ }(arg) ++ if err != nil { ++ t.Fatalf("Failed to construct command for %s", procName) ++ } ++ if (c.Run() == nil) != s.success { ++ result := "succeed" ++ if !s.success { ++ result = "fail" ++ } ++ t.Fatalf("Process did not %s when it was supposed to", result) ++ } ++} ++ ++func TestMain(m *testing.M) { ++ flag.Parse() ++ if procName != "" { ++ t := testProcs[procName] ++ t.fn() ++ os.Stderr.WriteString("test function did not exit\n") ++ if t.success { ++ os.Exit(1) ++ } else { ++ os.Exit(0) ++ } ++ } ++ os.Exit(m.Run()) ++} ++ ++// end of infrastructure ++ ++const testfile = "gocapmodetest" ++const testfile2 = testfile + "2" ++ ++func CapEnterTest() { ++ _, err := os.OpenFile(path.Join(procArg, testfile), os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) ++ if err != nil { ++ panic(fmt.Sprintf("OpenFile: %s", err)) ++ } ++ ++ err = unix.CapEnter() ++ if err != nil { ++ panic(fmt.Sprintf("CapEnter: %s", err)) ++ } ++ ++ _, err = os.OpenFile(path.Join(procArg, testfile2), os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) ++ if err == nil { ++ panic("OpenFile works!") ++ } ++ if err.(*os.PathError).Err != unix.ECAPMODE { ++ panic(fmt.Sprintf("OpenFile failed wrong: %s %#v", err, err)) ++ } ++ os.Exit(0) ++} ++ ++func makeTempDir(t *testing.T) string { ++ d, err := ioutil.TempDir("", "go_openat_test") ++ if err != nil { ++ t.Fatalf("TempDir failed: %s", err) ++ } ++ return d ++} ++ ++func removeTempDir(arg string) error { ++ err := os.RemoveAll(arg) ++ if err != nil && err.(*os.PathError).Err == unix.ENOENT { ++ return nil ++ } ++ return err ++} ++ ++func init() { ++ testProcs["cap_enter"] = testProc{ ++ CapEnterTest, ++ makeTempDir, ++ removeTempDir, ++ true, ++ } ++} ++ ++func TestCapEnter(t *testing.T) { ++ if runtime.GOARCH != "amd64" { ++ t.Skipf("skipping test on %s", runtime.GOARCH) ++ } ++ ExitsCorrectly(t, "cap_enter") ++} ++ ++func OpenatTest() { ++ f, err := os.Open(procArg) ++ if err != nil { ++ panic(err) ++ } ++ ++ err = unix.CapEnter() ++ if err != nil { ++ panic(fmt.Sprintf("CapEnter: %s", err)) ++ } ++ ++ fxx, err := unix.Openat(int(f.Fd()), "xx", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) ++ if err != nil { ++ panic(err) ++ } ++ unix.Close(fxx) ++ ++ // The right to open BASE/xx is not ambient ++ _, err = os.OpenFile(procArg+"/xx", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) ++ if err == nil { ++ panic("OpenFile succeeded") ++ } ++ if err.(*os.PathError).Err != unix.ECAPMODE { ++ panic(fmt.Sprintf("OpenFile failed wrong: %s %#v", err, err)) ++ } ++ ++ // Can't make a new directory either ++ err = os.Mkdir(procArg+"2", 0777) ++ if err == nil { ++ panic("MKdir succeeded") ++ } ++ if err.(*os.PathError).Err != unix.ECAPMODE { ++ panic(fmt.Sprintf("Mkdir failed wrong: %s %#v", err, err)) ++ } ++ ++ // Remove all caps except read and lookup. ++ r, err := unix.CapRightsInit([]uint64{unix.CAP_READ, unix.CAP_LOOKUP}) ++ if err != nil { ++ panic(fmt.Sprintf("CapRightsInit failed: %s %#v", err, err)) ++ } ++ err = unix.CapRightsLimit(f.Fd(), r) ++ if err != nil { ++ panic(fmt.Sprintf("CapRightsLimit failed: %s %#v", err, err)) ++ } ++ ++ // Check we can get the rights back again ++ r, err = unix.CapRightsGet(f.Fd()) ++ if err != nil { ++ panic(fmt.Sprintf("CapRightsGet failed: %s %#v", err, err)) ++ } ++ b, err := unix.CapRightsIsSet(r, []uint64{unix.CAP_READ, unix.CAP_LOOKUP}) ++ if err != nil { ++ panic(fmt.Sprintf("CapRightsIsSet failed: %s %#v", err, err)) ++ } ++ if !b { ++ panic(fmt.Sprintf("Unexpected rights")) ++ } ++ b, err = unix.CapRightsIsSet(r, []uint64{unix.CAP_READ, unix.CAP_LOOKUP, unix.CAP_WRITE}) ++ if err != nil { ++ panic(fmt.Sprintf("CapRightsIsSet failed: %s %#v", err, err)) ++ } ++ if b { ++ panic(fmt.Sprintf("Unexpected rights (2)")) ++ } ++ ++ // Can no longer create a file ++ _, err = unix.Openat(int(f.Fd()), "xx2", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) ++ if err == nil { ++ panic("Openat succeeded") ++ } ++ if err != unix.ENOTCAPABLE { ++ panic(fmt.Sprintf("OpenFileAt failed wrong: %s %#v", err, err)) ++ } ++ ++ // But can read an existing one ++ _, err = unix.Openat(int(f.Fd()), "xx", os.O_RDONLY, 0666) ++ if err != nil { ++ panic(fmt.Sprintf("Openat failed: %s %#v", err, err)) ++ } ++ ++ os.Exit(0) ++} ++ ++func init() { ++ testProcs["openat"] = testProc{ ++ OpenatTest, ++ makeTempDir, ++ removeTempDir, ++ true, ++ } ++} ++ ++func TestOpenat(t *testing.T) { ++ if runtime.GOARCH != "amd64" { ++ t.Skipf("skipping test on %s", runtime.GOARCH) ++ } ++ ExitsCorrectly(t, "openat") ++} ++ ++func TestCapRightsSetAndClear(t *testing.T) { ++ r, err := unix.CapRightsInit([]uint64{unix.CAP_READ, unix.CAP_WRITE, unix.CAP_PDWAIT}) ++ if err != nil { ++ t.Fatalf("CapRightsInit failed: %s", err) ++ } ++ ++ err = unix.CapRightsSet(r, []uint64{unix.CAP_EVENT, unix.CAP_LISTEN}) ++ if err != nil { ++ t.Fatalf("CapRightsSet failed: %s", err) ++ } ++ ++ b, err := unix.CapRightsIsSet(r, []uint64{unix.CAP_READ, unix.CAP_WRITE, unix.CAP_PDWAIT, unix.CAP_EVENT, unix.CAP_LISTEN}) ++ if err != nil { ++ t.Fatalf("CapRightsIsSet failed: %s", err) ++ } ++ if !b { ++ t.Fatalf("Wrong rights set") ++ } ++ ++ err = unix.CapRightsClear(r, []uint64{unix.CAP_READ, unix.CAP_PDWAIT}) ++ if err != nil { ++ t.Fatalf("CapRightsClear failed: %s", err) ++ } ++ ++ b, err = unix.CapRightsIsSet(r, []uint64{unix.CAP_WRITE, unix.CAP_EVENT, unix.CAP_LISTEN}) ++ if err != nil { ++ t.Fatalf("CapRightsIsSet failed: %s", err) ++ } ++ if !b { ++ t.Fatalf("Wrong rights set") ++ } ++} ++ ++// stringsFromByteSlice converts a sequence of attributes to a []string. ++// On FreeBSD, each entry consists of a single byte containing the length ++// of the attribute name, followed by the attribute name. ++// The name is _not_ NULL-terminated. ++func stringsFromByteSlice(buf []byte) []string { ++ var result []string ++ i := 0 ++ for i < len(buf) { ++ next := i + 1 + int(buf[i]) ++ result = append(result, string(buf[i+1:next])) ++ i = next ++ } ++ return result ++} +diff --git a/vendor/golang.org/x/sys/unix/syscall_internal_bsd_test.go b/vendor/golang.org/x/sys/unix/syscall_internal_bsd_test.go +new file mode 100644 +index 0000000..5e3e052 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/syscall_internal_bsd_test.go +@@ -0,0 +1,175 @@ ++// Copyright 2020 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build darwin dragonfly freebsd netbsd openbsd ++ ++package unix ++ ++import ( ++ "reflect" ++ "strings" ++ "testing" ++ "unsafe" ++) ++ ++// as per socket(2) ++type SocketSpec struct { ++ domain int ++ typ int ++ protocol int ++} ++ ++func Test_anyToSockaddr(t *testing.T) { ++ tests := []struct { ++ name string ++ rsa *RawSockaddrAny ++ sa Sockaddr ++ err error ++ skt SocketSpec ++ }{ ++ { ++ name: "AF_UNIX zero length", ++ rsa: sockaddrUnixToAny(RawSockaddrUnix{ ++ Family: AF_UNIX, ++ }), ++ err: EINVAL, ++ }, ++ { ++ name: "AF_UNIX unnamed", ++ rsa: sockaddrUnixToAny(RawSockaddrUnix{ ++ Len: 2, // family (uint16) ++ Family: AF_UNIX, ++ }), ++ sa: &SockaddrUnix{}, ++ }, ++ { ++ name: "AF_UNIX named", ++ rsa: sockaddrUnixToAny(RawSockaddrUnix{ ++ Len: uint8(2 + len("gopher")), // family (uint16) + len(gopher) ++ Family: AF_UNIX, ++ Path: [104]int8{'g', 'o', 'p', 'h', 'e', 'r'}, ++ }), ++ sa: &SockaddrUnix{ ++ Name: "gopher", ++ }, ++ }, ++ { ++ name: "AF_UNIX named", ++ rsa: sockaddrUnixToAny(RawSockaddrUnix{ ++ Len: uint8(2 + len("go")), ++ Family: AF_UNIX, ++ Path: [104]int8{'g', 'o', 'p', 'h', 'e', 'r'}, ++ }), ++ sa: &SockaddrUnix{ ++ Name: "go", ++ }, ++ }, ++ { ++ name: "AF_MAX EAFNOSUPPORT", ++ rsa: &RawSockaddrAny{ ++ Addr: RawSockaddr{ ++ Family: AF_MAX, ++ }, ++ }, ++ err: EAFNOSUPPORT, ++ }, ++ // TODO: expand to support other families. ++ } ++ ++ for _, tt := range tests { ++ t.Run(tt.name, func(t *testing.T) { ++ fd := int(0) ++ var err error ++ if tt.skt.domain != 0 { ++ fd, err = Socket(tt.skt.domain, tt.skt.typ, tt.skt.protocol) ++ // Some sockaddr types need specific kernel modules running: if these ++ // are not present we'll get EPROTONOSUPPORT back when trying to create ++ // the socket. Skip the test in this situation. ++ if err == EPROTONOSUPPORT { ++ t.Skip("socket family/protocol not supported by kernel") ++ } else if err != nil { ++ t.Fatalf("socket(%v): %v", tt.skt, err) ++ } ++ defer Close(fd) ++ } ++ sa, err := anyToSockaddr(fd, tt.rsa) ++ if err != tt.err { ++ t.Fatalf("unexpected error: %v, want: %v", err, tt.err) ++ } ++ ++ if !reflect.DeepEqual(sa, tt.sa) { ++ t.Fatalf("unexpected Sockaddr:\n got: %#v\nwant: %#v", sa, tt.sa) ++ } ++ }) ++ } ++} ++ ++func TestSockaddrUnix_sockaddr(t *testing.T) { ++ tests := []struct { ++ name string ++ sa *SockaddrUnix ++ raw *RawSockaddrUnix ++ err error ++ }{ ++ { ++ name: "unnamed", ++ sa: &SockaddrUnix{}, ++ raw: &RawSockaddrUnix{ ++ Family: AF_UNIX, ++ }, ++ err: EINVAL, ++ }, ++ { ++ name: "named", ++ sa: &SockaddrUnix{ ++ Name: "gopher", ++ }, ++ raw: &RawSockaddrUnix{ ++ Len: uint8(2 + len("gopher") + 1), // family (uint16) + len(gopher) + '\0' ++ Family: AF_UNIX, ++ Path: [104]int8{'g', 'o', 'p', 'h', 'e', 'r'}, ++ }, ++ }, ++ { ++ name: "named too long", ++ sa: &SockaddrUnix{ ++ Name: strings.Repeat("A", 104), ++ }, ++ err: EINVAL, ++ }, ++ } ++ ++ for _, tt := range tests { ++ t.Run(tt.name, func(t *testing.T) { ++ out, _, err := tt.sa.sockaddr() ++ if err != tt.err { ++ t.Fatalf("unexpected error: %v, want: %v", err, tt.err) ++ } ++ ++ if out == nil { ++ // No pointer to cast, return early. ++ return ++ } ++ ++ raw := (*RawSockaddrUnix)(out) ++ if !reflect.DeepEqual(raw, tt.raw) { ++ t.Fatalf("unexpected RawSockaddrUnix:\n got: %#v\nwant: %#v", raw, tt.raw) ++ } ++ }) ++ } ++} ++ ++func sockaddrUnixToAny(in RawSockaddrUnix) *RawSockaddrAny { ++ var out RawSockaddrAny ++ ++ // Explicitly copy the contents of in into out to produce the correct ++ // sockaddr structure, without relying on unsafe casting to a type of a ++ // larger size. ++ copy( ++ (*(*[SizeofSockaddrAny]byte)(unsafe.Pointer(&out)))[:], ++ (*(*[SizeofSockaddrUnix]byte)(unsafe.Pointer(&in)))[:], ++ ) ++ ++ return &out ++} +diff --git a/vendor/golang.org/x/sys/unix/syscall_internal_linux_test.go b/vendor/golang.org/x/sys/unix/syscall_internal_linux_test.go +new file mode 100644 +index 0000000..af48c2a +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/syscall_internal_linux_test.go +@@ -0,0 +1,507 @@ ++// Copyright 2019 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build linux ++ ++package unix ++ ++import ( ++ "reflect" ++ "strings" ++ "testing" ++ "unsafe" ++) ++ ++// as per socket(2) ++type SocketSpec struct { ++ domain int ++ typ int ++ protocol int ++} ++ ++func Test_anyToSockaddr(t *testing.T) { ++ tests := []struct { ++ name string ++ rsa *RawSockaddrAny ++ sa Sockaddr ++ err error ++ skt SocketSpec ++ }{ ++ { ++ name: "AF_TIPC bad addrtype", ++ rsa: &RawSockaddrAny{ ++ Addr: RawSockaddr{ ++ Family: AF_TIPC, ++ }, ++ }, ++ err: EINVAL, ++ }, ++ { ++ name: "AF_TIPC NameSeq", ++ rsa: sockaddrTIPCToAny(RawSockaddrTIPC{ ++ Family: AF_TIPC, ++ Addrtype: TIPC_SERVICE_RANGE, ++ Scope: 1, ++ Addr: (&TIPCServiceRange{ ++ Type: 1, ++ Lower: 2, ++ Upper: 3, ++ }).tipcAddr(), ++ }), ++ sa: &SockaddrTIPC{ ++ Scope: 1, ++ Addr: &TIPCServiceRange{ ++ Type: 1, ++ Lower: 2, ++ Upper: 3, ++ }, ++ }, ++ }, ++ { ++ name: "AF_TIPC Name", ++ rsa: sockaddrTIPCToAny(RawSockaddrTIPC{ ++ Family: AF_TIPC, ++ Addrtype: TIPC_SERVICE_ADDR, ++ Scope: 2, ++ Addr: (&TIPCServiceName{ ++ Type: 1, ++ Instance: 2, ++ Domain: 3, ++ }).tipcAddr(), ++ }), ++ sa: &SockaddrTIPC{ ++ Scope: 2, ++ Addr: &TIPCServiceName{ ++ Type: 1, ++ Instance: 2, ++ Domain: 3, ++ }, ++ }, ++ }, ++ { ++ name: "AF_TIPC ID", ++ rsa: sockaddrTIPCToAny(RawSockaddrTIPC{ ++ Family: AF_TIPC, ++ Addrtype: TIPC_SOCKET_ADDR, ++ Scope: 3, ++ Addr: (&TIPCSocketAddr{ ++ Ref: 1, ++ Node: 2, ++ }).tipcAddr(), ++ }), ++ sa: &SockaddrTIPC{ ++ Scope: 3, ++ Addr: &TIPCSocketAddr{ ++ Ref: 1, ++ Node: 2, ++ }, ++ }, ++ }, ++ { ++ name: "AF_INET IPPROTO_L2TP", ++ rsa: sockaddrL2TPIPToAny(RawSockaddrL2TPIP{ ++ Family: AF_INET, ++ Addr: [4]byte{0xef, 0x10, 0x5b, 0xa2}, ++ Conn_id: 0x1234abcd, ++ }), ++ sa: &SockaddrL2TPIP{ ++ Addr: [4]byte{0xef, 0x10, 0x5b, 0xa2}, ++ ConnId: 0x1234abcd, ++ }, ++ skt: SocketSpec{domain: AF_INET, typ: SOCK_DGRAM, protocol: IPPROTO_L2TP}, ++ }, ++ { ++ name: "AF_INET6 IPPROTO_L2TP", ++ rsa: sockaddrL2TPIP6ToAny(RawSockaddrL2TPIP6{ ++ Family: AF_INET6, ++ Flowinfo: 42, ++ Addr: [16]byte{ ++ 0x20, 0x01, 0x0d, 0xb8, ++ 0x85, 0xa3, 0x00, 0x00, ++ 0x00, 0x00, 0x8a, 0x2e, ++ 0x03, 0x70, 0x73, 0x34, ++ }, ++ Scope_id: 90210, ++ Conn_id: 0x1234abcd, ++ }), ++ sa: &SockaddrL2TPIP6{ ++ Addr: [16]byte{ ++ 0x20, 0x01, 0x0d, 0xb8, ++ 0x85, 0xa3, 0x00, 0x00, ++ 0x00, 0x00, 0x8a, 0x2e, ++ 0x03, 0x70, 0x73, 0x34, ++ }, ++ ZoneId: 90210, ++ ConnId: 0x1234abcd, ++ }, ++ skt: SocketSpec{domain: AF_INET6, typ: SOCK_DGRAM, protocol: IPPROTO_L2TP}, ++ }, ++ { ++ name: "AF_UNIX unnamed/abstract", ++ rsa: sockaddrUnixToAny(RawSockaddrUnix{ ++ Family: AF_UNIX, ++ }), ++ sa: &SockaddrUnix{ ++ Name: "@", ++ }, ++ }, ++ { ++ name: "AF_UNIX named", ++ rsa: sockaddrUnixToAny(RawSockaddrUnix{ ++ Family: AF_UNIX, ++ Path: [108]int8{'g', 'o', 'p', 'h', 'e', 'r'}, ++ }), ++ sa: &SockaddrUnix{ ++ Name: "gopher", ++ }, ++ }, ++ { ++ name: "AF_MAX EAFNOSUPPORT", ++ rsa: &RawSockaddrAny{ ++ Addr: RawSockaddr{ ++ Family: AF_MAX, ++ }, ++ }, ++ err: EAFNOSUPPORT, ++ }, ++ // TODO: expand to support other families. ++ } ++ ++ for _, tt := range tests { ++ t.Run(tt.name, func(t *testing.T) { ++ fd := int(0) ++ var err error ++ if tt.skt.domain != 0 { ++ fd, err = Socket(tt.skt.domain, tt.skt.typ, tt.skt.protocol) ++ // Some sockaddr types need specific kernel modules running: if these ++ // are not present we'll get EPROTONOSUPPORT back when trying to create ++ // the socket. Skip the test in this situation. ++ if err == EPROTONOSUPPORT { ++ t.Skip("socket family/protocol not supported by kernel") ++ } else if err != nil { ++ t.Fatalf("socket(%v): %v", tt.skt, err) ++ } ++ defer Close(fd) ++ } ++ sa, err := anyToSockaddr(fd, tt.rsa) ++ if err != tt.err { ++ t.Fatalf("unexpected error: %v, want: %v", err, tt.err) ++ } ++ ++ if !reflect.DeepEqual(sa, tt.sa) { ++ t.Fatalf("unexpected Sockaddr:\n got: %#v\nwant: %#v", sa, tt.sa) ++ } ++ }) ++ } ++} ++ ++func TestSockaddrTIPC_sockaddr(t *testing.T) { ++ tests := []struct { ++ name string ++ sa *SockaddrTIPC ++ raw *RawSockaddrTIPC ++ err error ++ }{ ++ { ++ name: "no fields set", ++ sa: &SockaddrTIPC{}, ++ err: EINVAL, ++ }, ++ { ++ name: "ID", ++ sa: &SockaddrTIPC{ ++ Scope: 1, ++ Addr: &TIPCSocketAddr{ ++ Ref: 1, ++ Node: 2, ++ }, ++ }, ++ raw: &RawSockaddrTIPC{ ++ Family: AF_TIPC, ++ Addrtype: TIPC_SOCKET_ADDR, ++ Scope: 1, ++ Addr: (&TIPCSocketAddr{ ++ Ref: 1, ++ Node: 2, ++ }).tipcAddr(), ++ }, ++ }, ++ { ++ name: "NameSeq", ++ sa: &SockaddrTIPC{ ++ Scope: 2, ++ Addr: &TIPCServiceRange{ ++ Type: 1, ++ Lower: 2, ++ Upper: 3, ++ }, ++ }, ++ raw: &RawSockaddrTIPC{ ++ Family: AF_TIPC, ++ Addrtype: TIPC_SERVICE_RANGE, ++ Scope: 2, ++ Addr: (&TIPCServiceRange{ ++ Type: 1, ++ Lower: 2, ++ Upper: 3, ++ }).tipcAddr(), ++ }, ++ }, ++ { ++ name: "Name", ++ sa: &SockaddrTIPC{ ++ Scope: 3, ++ Addr: &TIPCServiceName{ ++ Type: 1, ++ Instance: 2, ++ Domain: 3, ++ }, ++ }, ++ raw: &RawSockaddrTIPC{ ++ Family: AF_TIPC, ++ Addrtype: TIPC_SERVICE_ADDR, ++ Scope: 3, ++ Addr: (&TIPCServiceName{ ++ Type: 1, ++ Instance: 2, ++ Domain: 3, ++ }).tipcAddr(), ++ }, ++ }, ++ } ++ ++ for _, tt := range tests { ++ t.Run(tt.name, func(t *testing.T) { ++ out, l, err := tt.sa.sockaddr() ++ if err != tt.err { ++ t.Fatalf("unexpected error: %v, want: %v", err, tt.err) ++ } ++ ++ // Must be 0 on error or a fixed size otherwise. ++ if (tt.err != nil && l != 0) || (tt.raw != nil && l != SizeofSockaddrTIPC) { ++ t.Fatalf("unexpected Socklen: %d", l) ++ } ++ if out == nil { ++ // No pointer to cast, return early. ++ return ++ } ++ ++ raw := (*RawSockaddrTIPC)(out) ++ if !reflect.DeepEqual(raw, tt.raw) { ++ t.Fatalf("unexpected RawSockaddrTIPC:\n got: %#v\nwant: %#v", raw, tt.raw) ++ } ++ }) ++ } ++} ++ ++func TestSockaddrL2TPIP_sockaddr(t *testing.T) { ++ tests := []struct { ++ name string ++ sa *SockaddrL2TPIP ++ raw *RawSockaddrL2TPIP ++ err error ++ }{ ++ { ++ name: "L2TPIP", ++ sa: &SockaddrL2TPIP{ ++ Addr: [4]byte{0xef, 0x10, 0x5b, 0xa2}, ++ ConnId: 0x1234abcd, ++ }, ++ raw: &RawSockaddrL2TPIP{ ++ Family: AF_INET, ++ Addr: [4]byte{0xef, 0x10, 0x5b, 0xa2}, ++ Conn_id: 0x1234abcd, ++ }, ++ }, ++ } ++ ++ for _, tt := range tests { ++ t.Run(tt.name, func(t *testing.T) { ++ out, l, err := tt.sa.sockaddr() ++ if err != tt.err { ++ t.Fatalf("unexpected error: %v, want: %v", err, tt.err) ++ } ++ ++ // Must be 0 on error or a fixed size otherwise. ++ if (tt.err != nil && l != 0) || (tt.raw != nil && l != SizeofSockaddrL2TPIP) { ++ t.Fatalf("unexpected Socklen: %d", l) ++ } ++ ++ if out != nil { ++ raw := (*RawSockaddrL2TPIP)(out) ++ if !reflect.DeepEqual(raw, tt.raw) { ++ t.Fatalf("unexpected RawSockaddrL2TPIP:\n got: %#v\nwant: %#v", raw, tt.raw) ++ } ++ } ++ }) ++ } ++} ++ ++func TestSockaddrL2TPIP6_sockaddr(t *testing.T) { ++ tests := []struct { ++ name string ++ sa *SockaddrL2TPIP6 ++ raw *RawSockaddrL2TPIP6 ++ err error ++ }{ ++ { ++ name: "L2TPIP6", ++ sa: &SockaddrL2TPIP6{ ++ Addr: [16]byte{ ++ 0x20, 0x01, 0x0d, 0xb8, ++ 0x85, 0xa3, 0x00, 0x00, ++ 0x00, 0x00, 0x8a, 0x2e, ++ 0x03, 0x70, 0x73, 0x34, ++ }, ++ ZoneId: 90210, ++ ConnId: 0x1234abcd, ++ }, ++ raw: &RawSockaddrL2TPIP6{ ++ Family: AF_INET6, ++ Addr: [16]byte{ ++ 0x20, 0x01, 0x0d, 0xb8, ++ 0x85, 0xa3, 0x00, 0x00, ++ 0x00, 0x00, 0x8a, 0x2e, ++ 0x03, 0x70, 0x73, 0x34, ++ }, ++ Scope_id: 90210, ++ Conn_id: 0x1234abcd, ++ }, ++ }, ++ } ++ ++ for _, tt := range tests { ++ t.Run(tt.name, func(t *testing.T) { ++ out, l, err := tt.sa.sockaddr() ++ if err != tt.err { ++ t.Fatalf("unexpected error: %v, want: %v", err, tt.err) ++ } ++ ++ // Must be 0 on error or a fixed size otherwise. ++ if (tt.err != nil && l != 0) || (tt.raw != nil && l != SizeofSockaddrL2TPIP6) { ++ t.Fatalf("unexpected Socklen: %d", l) ++ } ++ ++ if out != nil { ++ raw := (*RawSockaddrL2TPIP6)(out) ++ if !reflect.DeepEqual(raw, tt.raw) { ++ t.Fatalf("unexpected RawSockaddrL2TPIP6:\n got: %#v\nwant: %#v", raw, tt.raw) ++ } ++ } ++ }) ++ } ++} ++ ++func TestSockaddrUnix_sockaddr(t *testing.T) { ++ tests := []struct { ++ name string ++ sa *SockaddrUnix ++ raw *RawSockaddrUnix ++ slen _Socklen ++ err error ++ }{ ++ { ++ name: "unnamed", ++ sa: &SockaddrUnix{}, ++ raw: &RawSockaddrUnix{ ++ Family: AF_UNIX, ++ }, ++ slen: 2, // family (uint16) ++ }, ++ { ++ name: "abstract", ++ sa: &SockaddrUnix{ ++ Name: "@", ++ }, ++ raw: &RawSockaddrUnix{ ++ Family: AF_UNIX, ++ }, ++ slen: 3, // family (uint16) + NULL ++ }, ++ { ++ name: "named", ++ sa: &SockaddrUnix{ ++ Name: "gopher", ++ }, ++ raw: &RawSockaddrUnix{ ++ Family: AF_UNIX, ++ Path: [108]int8{'g', 'o', 'p', 'h', 'e', 'r'}, ++ }, ++ slen: _Socklen(3 + len("gopher")), // family (uint16) + len(gopher) ++ }, ++ { ++ name: "named too long", ++ sa: &SockaddrUnix{ ++ Name: strings.Repeat("A", 108), ++ }, ++ err: EINVAL, ++ }, ++ } ++ ++ for _, tt := range tests { ++ t.Run(tt.name, func(t *testing.T) { ++ out, l, err := tt.sa.sockaddr() ++ if err != tt.err { ++ t.Fatalf("unexpected error: %v, want: %v", err, tt.err) ++ } ++ ++ if l != tt.slen { ++ t.Fatalf("unexpected Socklen: %d, want %d", l, tt.slen) ++ } ++ if out == nil { ++ // No pointer to cast, return early. ++ return ++ } ++ ++ raw := (*RawSockaddrUnix)(out) ++ if !reflect.DeepEqual(raw, tt.raw) { ++ t.Fatalf("unexpected RawSockaddrUnix:\n got: %#v\nwant: %#v", raw, tt.raw) ++ } ++ }) ++ } ++} ++ ++// These helpers explicitly copy the contents of in into out to produce ++// the correct sockaddr structure, without relying on unsafe casting to ++// a type of a larger size. ++func sockaddrTIPCToAny(in RawSockaddrTIPC) *RawSockaddrAny { ++ var out RawSockaddrAny ++ copy( ++ (*(*[SizeofSockaddrAny]byte)(unsafe.Pointer(&out)))[:], ++ (*(*[SizeofSockaddrTIPC]byte)(unsafe.Pointer(&in)))[:], ++ ) ++ return &out ++} ++ ++func sockaddrL2TPIPToAny(in RawSockaddrL2TPIP) *RawSockaddrAny { ++ var out RawSockaddrAny ++ copy( ++ (*(*[SizeofSockaddrAny]byte)(unsafe.Pointer(&out)))[:], ++ (*(*[SizeofSockaddrL2TPIP]byte)(unsafe.Pointer(&in)))[:], ++ ) ++ return &out ++} ++ ++func sockaddrL2TPIP6ToAny(in RawSockaddrL2TPIP6) *RawSockaddrAny { ++ var out RawSockaddrAny ++ copy( ++ (*(*[SizeofSockaddrAny]byte)(unsafe.Pointer(&out)))[:], ++ (*(*[SizeofSockaddrL2TPIP6]byte)(unsafe.Pointer(&in)))[:], ++ ) ++ return &out ++} ++ ++func sockaddrUnixToAny(in RawSockaddrUnix) *RawSockaddrAny { ++ var out RawSockaddrAny ++ ++ // Explicitly copy the contents of in into out to produce the correct ++ // sockaddr structure, without relying on unsafe casting to a type of a ++ // larger size. ++ copy( ++ (*(*[SizeofSockaddrAny]byte)(unsafe.Pointer(&out)))[:], ++ (*(*[SizeofSockaddrUnix]byte)(unsafe.Pointer(&in)))[:], ++ ) ++ ++ return &out ++} +diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go +index e50e4cb..a511a8f 100644 +--- a/vendor/golang.org/x/sys/unix/syscall_linux.go ++++ b/vendor/golang.org/x/sys/unix/syscall_linux.go +@@ -97,12 +97,6 @@ func IoctlSetRTCTime(fd int, value *RTCTime) error { + return err + } + +-func IoctlSetRTCWkAlrm(fd int, value *RTCWkAlrm) error { +- err := ioctl(fd, RTC_WKALM_SET, uintptr(unsafe.Pointer(value))) +- runtime.KeepAlive(value) +- return err +-} +- + func IoctlGetUint32(fd int, req uint) (uint32, error) { + var value uint32 + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) +@@ -115,12 +109,6 @@ func IoctlGetRTCTime(fd int) (*RTCTime, error) { + return &value, err + } + +-func IoctlGetRTCWkAlrm(fd int) (*RTCWkAlrm, error) { +- var value RTCWkAlrm +- err := ioctl(fd, RTC_WKALM_RD, uintptr(unsafe.Pointer(&value))) +- return &value, err +-} +- + //sys Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) + + func Link(oldpath string, newpath string) (err error) { +@@ -1648,7 +1636,7 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e + + func Dup2(oldfd, newfd int) error { + // Android O and newer blocks dup2; riscv and arm64 don't implement dup2. +- if runtime.GOOS == "android" || runtime.GOARCH == "riscv64" || runtime.GOARCH == "arm64" { ++ if runtime.GOOS == "android" || runtime.GOARCH == "riscv64" || runtime.GOARCH == "arm64" || runtime.GOARCH == "loong64" { + return Dup3(oldfd, newfd, 0) + } + return dup2(oldfd, newfd) +@@ -1950,20 +1938,6 @@ func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) { + return int(n), nil + } + +-func isGroupMember(gid int) bool { +- groups, err := Getgroups() +- if err != nil { +- return false +- } +- +- for _, g := range groups { +- if g == gid { +- return true +- } +- } +- return false +-} +- + //sys faccessat(dirfd int, path string, mode uint32) (err error) + + func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { +@@ -2021,7 +1995,7 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + gid = Getgid() + } + +- if uint32(gid) == st.Gid || isGroupMember(gid) { ++ if uint32(gid) == st.Gid { + fmode = (st.Mode >> 3) & 7 + } else { + fmode = st.Mode & 7 +diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go-bak b/vendor/golang.org/x/sys/unix/syscall_linux.go-bak +new file mode 100644 +index 0000000..a8f11c5 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/syscall_linux.go-bak +@@ -0,0 +1,2228 @@ ++// Copyright 2009 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// Linux system calls. ++// This file is compiled as ordinary Go code, ++// but it is also input to mksyscall, ++// which parses the //sys lines and generates system call stubs. ++// Note that sometimes we use a lowercase //sys name and ++// wrap it in our own nicer implementation. ++ ++package unix ++ ++import ( ++ "encoding/binary" ++ "runtime" ++ "syscall" ++ "unsafe" ++) ++ ++/* ++ * Wrapped ++ */ ++ ++func Access(path string, mode uint32) (err error) { ++ return Faccessat(AT_FDCWD, path, mode, 0) ++} ++ ++func Chmod(path string, mode uint32) (err error) { ++ return Fchmodat(AT_FDCWD, path, mode, 0) ++} ++ ++func Chown(path string, uid int, gid int) (err error) { ++ return Fchownat(AT_FDCWD, path, uid, gid, 0) ++} ++ ++func Creat(path string, mode uint32) (fd int, err error) { ++ return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode) ++} ++ ++//sys FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) ++//sys fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) ++ ++func FanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname string) (err error) { ++ if pathname == "" { ++ return fanotifyMark(fd, flags, mask, dirFd, nil) ++ } ++ p, err := BytePtrFromString(pathname) ++ if err != nil { ++ return err ++ } ++ return fanotifyMark(fd, flags, mask, dirFd, p) ++} ++ ++//sys fchmodat(dirfd int, path string, mode uint32) (err error) ++ ++func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { ++ // Linux fchmodat doesn't support the flags parameter. Mimick glibc's behavior ++ // and check the flags. Otherwise the mode would be applied to the symlink ++ // destination which is not what the user expects. ++ if flags&^AT_SYMLINK_NOFOLLOW != 0 { ++ return EINVAL ++ } else if flags&AT_SYMLINK_NOFOLLOW != 0 { ++ return EOPNOTSUPP ++ } ++ return fchmodat(dirfd, path, mode) ++} ++ ++//sys ioctl(fd int, req uint, arg uintptr) (err error) ++ ++// ioctl itself should not be exposed directly, but additional get/set ++// functions for specific types are permissible. ++ ++// IoctlRetInt performs an ioctl operation specified by req on a device ++// associated with opened file descriptor fd, and returns a non-negative ++// integer that is returned by the ioctl syscall. ++func IoctlRetInt(fd int, req uint) (int, error) { ++ ret, _, err := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), 0) ++ if err != 0 { ++ return 0, err ++ } ++ return int(ret), nil ++} ++ ++// IoctlSetPointerInt performs an ioctl operation which sets an ++// integer value on fd, using the specified request number. The ioctl ++// argument is called with a pointer to the integer value, rather than ++// passing the integer value directly. ++func IoctlSetPointerInt(fd int, req uint, value int) error { ++ v := int32(value) ++ return ioctl(fd, req, uintptr(unsafe.Pointer(&v))) ++} ++ ++func IoctlSetRTCTime(fd int, value *RTCTime) error { ++ err := ioctl(fd, RTC_SET_TIME, uintptr(unsafe.Pointer(value))) ++ runtime.KeepAlive(value) ++ return err ++} ++ ++func IoctlSetRTCWkAlrm(fd int, value *RTCWkAlrm) error { ++ err := ioctl(fd, RTC_WKALM_SET, uintptr(unsafe.Pointer(value))) ++ runtime.KeepAlive(value) ++ return err ++} ++ ++func IoctlGetUint32(fd int, req uint) (uint32, error) { ++ var value uint32 ++ err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) ++ return value, err ++} ++ ++func IoctlGetRTCTime(fd int) (*RTCTime, error) { ++ var value RTCTime ++ err := ioctl(fd, RTC_RD_TIME, uintptr(unsafe.Pointer(&value))) ++ return &value, err ++} ++ ++func IoctlGetRTCWkAlrm(fd int) (*RTCWkAlrm, error) { ++ var value RTCWkAlrm ++ err := ioctl(fd, RTC_WKALM_RD, uintptr(unsafe.Pointer(&value))) ++ return &value, err ++} ++ ++//sys Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) ++ ++func Link(oldpath string, newpath string) (err error) { ++ return Linkat(AT_FDCWD, oldpath, AT_FDCWD, newpath, 0) ++} ++ ++func Mkdir(path string, mode uint32) (err error) { ++ return Mkdirat(AT_FDCWD, path, mode) ++} ++ ++func Mknod(path string, mode uint32, dev int) (err error) { ++ return Mknodat(AT_FDCWD, path, mode, dev) ++} ++ ++func Open(path string, mode int, perm uint32) (fd int, err error) { ++ return openat(AT_FDCWD, path, mode|O_LARGEFILE, perm) ++} ++ ++//sys openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) ++ ++func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { ++ return openat(dirfd, path, flags|O_LARGEFILE, mode) ++} ++ ++//sys ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) ++ ++func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { ++ if len(fds) == 0 { ++ return ppoll(nil, 0, timeout, sigmask) ++ } ++ return ppoll(&fds[0], len(fds), timeout, sigmask) ++} ++ ++//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) ++ ++func Readlink(path string, buf []byte) (n int, err error) { ++ return Readlinkat(AT_FDCWD, path, buf) ++} ++ ++func Rename(oldpath string, newpath string) (err error) { ++ return Renameat(AT_FDCWD, oldpath, AT_FDCWD, newpath) ++} ++ ++func Rmdir(path string) error { ++ return Unlinkat(AT_FDCWD, path, AT_REMOVEDIR) ++} ++ ++//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) ++ ++func Symlink(oldpath string, newpath string) (err error) { ++ return Symlinkat(oldpath, AT_FDCWD, newpath) ++} ++ ++func Unlink(path string) error { ++ return Unlinkat(AT_FDCWD, path, 0) ++} ++ ++//sys Unlinkat(dirfd int, path string, flags int) (err error) ++ ++func Utimes(path string, tv []Timeval) error { ++ if tv == nil { ++ err := utimensat(AT_FDCWD, path, nil, 0) ++ if err != ENOSYS { ++ return err ++ } ++ return utimes(path, nil) ++ } ++ if len(tv) != 2 { ++ return EINVAL ++ } ++ var ts [2]Timespec ++ ts[0] = NsecToTimespec(TimevalToNsec(tv[0])) ++ ts[1] = NsecToTimespec(TimevalToNsec(tv[1])) ++ err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) ++ if err != ENOSYS { ++ return err ++ } ++ return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) ++} ++ ++//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) ++ ++func UtimesNano(path string, ts []Timespec) error { ++ if ts == nil { ++ err := utimensat(AT_FDCWD, path, nil, 0) ++ if err != ENOSYS { ++ return err ++ } ++ return utimes(path, nil) ++ } ++ if len(ts) != 2 { ++ return EINVAL ++ } ++ err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) ++ if err != ENOSYS { ++ return err ++ } ++ // If the utimensat syscall isn't available (utimensat was added to Linux ++ // in 2.6.22, Released, 8 July 2007) then fall back to utimes ++ var tv [2]Timeval ++ for i := 0; i < 2; i++ { ++ tv[i] = NsecToTimeval(TimespecToNsec(ts[i])) ++ } ++ return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) ++} ++ ++func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { ++ if ts == nil { ++ return utimensat(dirfd, path, nil, flags) ++ } ++ if len(ts) != 2 { ++ return EINVAL ++ } ++ return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) ++} ++ ++func Futimesat(dirfd int, path string, tv []Timeval) error { ++ if tv == nil { ++ return futimesat(dirfd, path, nil) ++ } ++ if len(tv) != 2 { ++ return EINVAL ++ } ++ return futimesat(dirfd, path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) ++} ++ ++func Futimes(fd int, tv []Timeval) (err error) { ++ // Believe it or not, this is the best we can do on Linux ++ // (and is what glibc does). ++ return Utimes("/proc/self/fd/"+itoa(fd), tv) ++} ++ ++const ImplementsGetwd = true ++ ++//sys Getcwd(buf []byte) (n int, err error) ++ ++func Getwd() (wd string, err error) { ++ var buf [PathMax]byte ++ n, err := Getcwd(buf[0:]) ++ if err != nil { ++ return "", err ++ } ++ // Getcwd returns the number of bytes written to buf, including the NUL. ++ if n < 1 || n > len(buf) || buf[n-1] != 0 { ++ return "", EINVAL ++ } ++ return string(buf[0 : n-1]), nil ++} ++ ++func Getgroups() (gids []int, err error) { ++ n, err := getgroups(0, nil) ++ if err != nil { ++ return nil, err ++ } ++ if n == 0 { ++ return nil, nil ++ } ++ ++ // Sanity check group count. Max is 1<<16 on Linux. ++ if n < 0 || n > 1<<20 { ++ return nil, EINVAL ++ } ++ ++ a := make([]_Gid_t, n) ++ n, err = getgroups(n, &a[0]) ++ if err != nil { ++ return nil, err ++ } ++ gids = make([]int, n) ++ for i, v := range a[0:n] { ++ gids[i] = int(v) ++ } ++ return ++} ++ ++func Setgroups(gids []int) (err error) { ++ if len(gids) == 0 { ++ return setgroups(0, nil) ++ } ++ ++ a := make([]_Gid_t, len(gids)) ++ for i, v := range gids { ++ a[i] = _Gid_t(v) ++ } ++ return setgroups(len(a), &a[0]) ++} ++ ++type WaitStatus uint32 ++ ++// Wait status is 7 bits at bottom, either 0 (exited), ++// 0x7F (stopped), or a signal number that caused an exit. ++// The 0x80 bit is whether there was a core dump. ++// An extra number (exit code, signal causing a stop) ++// is in the high bits. At least that's the idea. ++// There are various irregularities. For example, the ++// "continued" status is 0xFFFF, distinguishing itself ++// from stopped via the core dump bit. ++ ++const ( ++ mask = 0x7F ++ core = 0x80 ++ exited = 0x00 ++ stopped = 0x7F ++ shift = 8 ++) ++ ++func (w WaitStatus) Exited() bool { return w&mask == exited } ++ ++func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != exited } ++ ++func (w WaitStatus) Stopped() bool { return w&0xFF == stopped } ++ ++func (w WaitStatus) Continued() bool { return w == 0xFFFF } ++ ++func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 } ++ ++func (w WaitStatus) ExitStatus() int { ++ if !w.Exited() { ++ return -1 ++ } ++ return int(w>>shift) & 0xFF ++} ++ ++func (w WaitStatus) Signal() syscall.Signal { ++ if !w.Signaled() { ++ return -1 ++ } ++ return syscall.Signal(w & mask) ++} ++ ++func (w WaitStatus) StopSignal() syscall.Signal { ++ if !w.Stopped() { ++ return -1 ++ } ++ return syscall.Signal(w>>shift) & 0xFF ++} ++ ++func (w WaitStatus) TrapCause() int { ++ if w.StopSignal() != SIGTRAP { ++ return -1 ++ } ++ return int(w>>shift) >> 8 ++} ++ ++//sys wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) ++ ++func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { ++ var status _C_int ++ wpid, err = wait4(pid, &status, options, rusage) ++ if wstatus != nil { ++ *wstatus = WaitStatus(status) ++ } ++ return ++} ++ ++func Mkfifo(path string, mode uint32) error { ++ return Mknod(path, mode|S_IFIFO, 0) ++} ++ ++func Mkfifoat(dirfd int, path string, mode uint32) error { ++ return Mknodat(dirfd, path, mode|S_IFIFO, 0) ++} ++ ++func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { ++ if sa.Port < 0 || sa.Port > 0xFFFF { ++ return nil, 0, EINVAL ++ } ++ sa.raw.Family = AF_INET ++ p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) ++ p[0] = byte(sa.Port >> 8) ++ p[1] = byte(sa.Port) ++ for i := 0; i < len(sa.Addr); i++ { ++ sa.raw.Addr[i] = sa.Addr[i] ++ } ++ return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil ++} ++ ++func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { ++ if sa.Port < 0 || sa.Port > 0xFFFF { ++ return nil, 0, EINVAL ++ } ++ sa.raw.Family = AF_INET6 ++ p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) ++ p[0] = byte(sa.Port >> 8) ++ p[1] = byte(sa.Port) ++ sa.raw.Scope_id = sa.ZoneId ++ for i := 0; i < len(sa.Addr); i++ { ++ sa.raw.Addr[i] = sa.Addr[i] ++ } ++ return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil ++} ++ ++func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { ++ name := sa.Name ++ n := len(name) ++ if n >= len(sa.raw.Path) { ++ return nil, 0, EINVAL ++ } ++ sa.raw.Family = AF_UNIX ++ for i := 0; i < n; i++ { ++ sa.raw.Path[i] = int8(name[i]) ++ } ++ // length is family (uint16), name, NUL. ++ sl := _Socklen(2) ++ if n > 0 { ++ sl += _Socklen(n) + 1 ++ } ++ if sa.raw.Path[0] == '@' { ++ sa.raw.Path[0] = 0 ++ // Don't count trailing NUL for abstract address. ++ sl-- ++ } ++ ++ return unsafe.Pointer(&sa.raw), sl, nil ++} ++ ++// SockaddrLinklayer implements the Sockaddr interface for AF_PACKET type sockets. ++type SockaddrLinklayer struct { ++ Protocol uint16 ++ Ifindex int ++ Hatype uint16 ++ Pkttype uint8 ++ Halen uint8 ++ Addr [8]byte ++ raw RawSockaddrLinklayer ++} ++ ++func (sa *SockaddrLinklayer) sockaddr() (unsafe.Pointer, _Socklen, error) { ++ if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff { ++ return nil, 0, EINVAL ++ } ++ sa.raw.Family = AF_PACKET ++ sa.raw.Protocol = sa.Protocol ++ sa.raw.Ifindex = int32(sa.Ifindex) ++ sa.raw.Hatype = sa.Hatype ++ sa.raw.Pkttype = sa.Pkttype ++ sa.raw.Halen = sa.Halen ++ for i := 0; i < len(sa.Addr); i++ { ++ sa.raw.Addr[i] = sa.Addr[i] ++ } ++ return unsafe.Pointer(&sa.raw), SizeofSockaddrLinklayer, nil ++} ++ ++// SockaddrNetlink implements the Sockaddr interface for AF_NETLINK type sockets. ++type SockaddrNetlink struct { ++ Family uint16 ++ Pad uint16 ++ Pid uint32 ++ Groups uint32 ++ raw RawSockaddrNetlink ++} ++ ++func (sa *SockaddrNetlink) sockaddr() (unsafe.Pointer, _Socklen, error) { ++ sa.raw.Family = AF_NETLINK ++ sa.raw.Pad = sa.Pad ++ sa.raw.Pid = sa.Pid ++ sa.raw.Groups = sa.Groups ++ return unsafe.Pointer(&sa.raw), SizeofSockaddrNetlink, nil ++} ++ ++// SockaddrHCI implements the Sockaddr interface for AF_BLUETOOTH type sockets ++// using the HCI protocol. ++type SockaddrHCI struct { ++ Dev uint16 ++ Channel uint16 ++ raw RawSockaddrHCI ++} ++ ++func (sa *SockaddrHCI) sockaddr() (unsafe.Pointer, _Socklen, error) { ++ sa.raw.Family = AF_BLUETOOTH ++ sa.raw.Dev = sa.Dev ++ sa.raw.Channel = sa.Channel ++ return unsafe.Pointer(&sa.raw), SizeofSockaddrHCI, nil ++} ++ ++// SockaddrL2 implements the Sockaddr interface for AF_BLUETOOTH type sockets ++// using the L2CAP protocol. ++type SockaddrL2 struct { ++ PSM uint16 ++ CID uint16 ++ Addr [6]uint8 ++ AddrType uint8 ++ raw RawSockaddrL2 ++} ++ ++func (sa *SockaddrL2) sockaddr() (unsafe.Pointer, _Socklen, error) { ++ sa.raw.Family = AF_BLUETOOTH ++ psm := (*[2]byte)(unsafe.Pointer(&sa.raw.Psm)) ++ psm[0] = byte(sa.PSM) ++ psm[1] = byte(sa.PSM >> 8) ++ for i := 0; i < len(sa.Addr); i++ { ++ sa.raw.Bdaddr[i] = sa.Addr[len(sa.Addr)-1-i] ++ } ++ cid := (*[2]byte)(unsafe.Pointer(&sa.raw.Cid)) ++ cid[0] = byte(sa.CID) ++ cid[1] = byte(sa.CID >> 8) ++ sa.raw.Bdaddr_type = sa.AddrType ++ return unsafe.Pointer(&sa.raw), SizeofSockaddrL2, nil ++} ++ ++// SockaddrRFCOMM implements the Sockaddr interface for AF_BLUETOOTH type sockets ++// using the RFCOMM protocol. ++// ++// Server example: ++// ++// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM) ++// _ = unix.Bind(fd, &unix.SockaddrRFCOMM{ ++// Channel: 1, ++// Addr: [6]uint8{0, 0, 0, 0, 0, 0}, // BDADDR_ANY or 00:00:00:00:00:00 ++// }) ++// _ = Listen(fd, 1) ++// nfd, sa, _ := Accept(fd) ++// fmt.Printf("conn addr=%v fd=%d", sa.(*unix.SockaddrRFCOMM).Addr, nfd) ++// Read(nfd, buf) ++// ++// Client example: ++// ++// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM) ++// _ = Connect(fd, &SockaddrRFCOMM{ ++// Channel: 1, ++// Addr: [6]byte{0x11, 0x22, 0x33, 0xaa, 0xbb, 0xcc}, // CC:BB:AA:33:22:11 ++// }) ++// Write(fd, []byte(`hello`)) ++type SockaddrRFCOMM struct { ++ // Addr represents a bluetooth address, byte ordering is little-endian. ++ Addr [6]uint8 ++ ++ // Channel is a designated bluetooth channel, only 1-30 are available for use. ++ // Since Linux 2.6.7 and further zero value is the first available channel. ++ Channel uint8 ++ ++ raw RawSockaddrRFCOMM ++} ++ ++func (sa *SockaddrRFCOMM) sockaddr() (unsafe.Pointer, _Socklen, error) { ++ sa.raw.Family = AF_BLUETOOTH ++ sa.raw.Channel = sa.Channel ++ sa.raw.Bdaddr = sa.Addr ++ return unsafe.Pointer(&sa.raw), SizeofSockaddrRFCOMM, nil ++} ++ ++// SockaddrCAN implements the Sockaddr interface for AF_CAN type sockets. ++// The RxID and TxID fields are used for transport protocol addressing in ++// (CAN_TP16, CAN_TP20, CAN_MCNET, and CAN_ISOTP), they can be left with ++// zero values for CAN_RAW and CAN_BCM sockets as they have no meaning. ++// ++// The SockaddrCAN struct must be bound to the socket file descriptor ++// using Bind before the CAN socket can be used. ++// ++// // Read one raw CAN frame ++// fd, _ := Socket(AF_CAN, SOCK_RAW, CAN_RAW) ++// addr := &SockaddrCAN{Ifindex: index} ++// Bind(fd, addr) ++// frame := make([]byte, 16) ++// Read(fd, frame) ++// ++// The full SocketCAN documentation can be found in the linux kernel ++// archives at: https://www.kernel.org/doc/Documentation/networking/can.txt ++type SockaddrCAN struct { ++ Ifindex int ++ RxID uint32 ++ TxID uint32 ++ raw RawSockaddrCAN ++} ++ ++func (sa *SockaddrCAN) sockaddr() (unsafe.Pointer, _Socklen, error) { ++ if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff { ++ return nil, 0, EINVAL ++ } ++ sa.raw.Family = AF_CAN ++ sa.raw.Ifindex = int32(sa.Ifindex) ++ rx := (*[4]byte)(unsafe.Pointer(&sa.RxID)) ++ for i := 0; i < 4; i++ { ++ sa.raw.Addr[i] = rx[i] ++ } ++ tx := (*[4]byte)(unsafe.Pointer(&sa.TxID)) ++ for i := 0; i < 4; i++ { ++ sa.raw.Addr[i+4] = tx[i] ++ } ++ return unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil ++} ++ ++// SockaddrALG implements the Sockaddr interface for AF_ALG type sockets. ++// SockaddrALG enables userspace access to the Linux kernel's cryptography ++// subsystem. The Type and Name fields specify which type of hash or cipher ++// should be used with a given socket. ++// ++// To create a file descriptor that provides access to a hash or cipher, both ++// Bind and Accept must be used. Once the setup process is complete, input ++// data can be written to the socket, processed by the kernel, and then read ++// back as hash output or ciphertext. ++// ++// Here is an example of using an AF_ALG socket with SHA1 hashing. ++// The initial socket setup process is as follows: ++// ++// // Open a socket to perform SHA1 hashing. ++// fd, _ := unix.Socket(unix.AF_ALG, unix.SOCK_SEQPACKET, 0) ++// addr := &unix.SockaddrALG{Type: "hash", Name: "sha1"} ++// unix.Bind(fd, addr) ++// // Note: unix.Accept does not work at this time; must invoke accept() ++// // manually using unix.Syscall. ++// hashfd, _, _ := unix.Syscall(unix.SYS_ACCEPT, uintptr(fd), 0, 0) ++// ++// Once a file descriptor has been returned from Accept, it may be used to ++// perform SHA1 hashing. The descriptor is not safe for concurrent use, but ++// may be re-used repeatedly with subsequent Write and Read operations. ++// ++// When hashing a small byte slice or string, a single Write and Read may ++// be used: ++// ++// // Assume hashfd is already configured using the setup process. ++// hash := os.NewFile(hashfd, "sha1") ++// // Hash an input string and read the results. Each Write discards ++// // previous hash state. Read always reads the current state. ++// b := make([]byte, 20) ++// for i := 0; i < 2; i++ { ++// io.WriteString(hash, "Hello, world.") ++// hash.Read(b) ++// fmt.Println(hex.EncodeToString(b)) ++// } ++// // Output: ++// // 2ae01472317d1935a84797ec1983ae243fc6aa28 ++// // 2ae01472317d1935a84797ec1983ae243fc6aa28 ++// ++// For hashing larger byte slices, or byte streams such as those read from ++// a file or socket, use Sendto with MSG_MORE to instruct the kernel to update ++// the hash digest instead of creating a new one for a given chunk and finalizing it. ++// ++// // Assume hashfd and addr are already configured using the setup process. ++// hash := os.NewFile(hashfd, "sha1") ++// // Hash the contents of a file. ++// f, _ := os.Open("/tmp/linux-4.10-rc7.tar.xz") ++// b := make([]byte, 4096) ++// for { ++// n, err := f.Read(b) ++// if err == io.EOF { ++// break ++// } ++// unix.Sendto(hashfd, b[:n], unix.MSG_MORE, addr) ++// } ++// hash.Read(b) ++// fmt.Println(hex.EncodeToString(b)) ++// // Output: 85cdcad0c06eef66f805ecce353bec9accbeecc5 ++// ++// For more information, see: http://www.chronox.de/crypto-API/crypto/userspace-if.html. ++type SockaddrALG struct { ++ Type string ++ Name string ++ Feature uint32 ++ Mask uint32 ++ raw RawSockaddrALG ++} ++ ++func (sa *SockaddrALG) sockaddr() (unsafe.Pointer, _Socklen, error) { ++ // Leave room for NUL byte terminator. ++ if len(sa.Type) > 13 { ++ return nil, 0, EINVAL ++ } ++ if len(sa.Name) > 63 { ++ return nil, 0, EINVAL ++ } ++ ++ sa.raw.Family = AF_ALG ++ sa.raw.Feat = sa.Feature ++ sa.raw.Mask = sa.Mask ++ ++ typ, err := ByteSliceFromString(sa.Type) ++ if err != nil { ++ return nil, 0, err ++ } ++ name, err := ByteSliceFromString(sa.Name) ++ if err != nil { ++ return nil, 0, err ++ } ++ ++ copy(sa.raw.Type[:], typ) ++ copy(sa.raw.Name[:], name) ++ ++ return unsafe.Pointer(&sa.raw), SizeofSockaddrALG, nil ++} ++ ++// SockaddrVM implements the Sockaddr interface for AF_VSOCK type sockets. ++// SockaddrVM provides access to Linux VM sockets: a mechanism that enables ++// bidirectional communication between a hypervisor and its guest virtual ++// machines. ++type SockaddrVM struct { ++ // CID and Port specify a context ID and port address for a VM socket. ++ // Guests have a unique CID, and hosts may have a well-known CID of: ++ // - VMADDR_CID_HYPERVISOR: refers to the hypervisor process. ++ // - VMADDR_CID_HOST: refers to other processes on the host. ++ CID uint32 ++ Port uint32 ++ raw RawSockaddrVM ++} ++ ++func (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) { ++ sa.raw.Family = AF_VSOCK ++ sa.raw.Port = sa.Port ++ sa.raw.Cid = sa.CID ++ ++ return unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil ++} ++ ++type SockaddrXDP struct { ++ Flags uint16 ++ Ifindex uint32 ++ QueueID uint32 ++ SharedUmemFD uint32 ++ raw RawSockaddrXDP ++} ++ ++func (sa *SockaddrXDP) sockaddr() (unsafe.Pointer, _Socklen, error) { ++ sa.raw.Family = AF_XDP ++ sa.raw.Flags = sa.Flags ++ sa.raw.Ifindex = sa.Ifindex ++ sa.raw.Queue_id = sa.QueueID ++ sa.raw.Shared_umem_fd = sa.SharedUmemFD ++ ++ return unsafe.Pointer(&sa.raw), SizeofSockaddrXDP, nil ++} ++ ++// This constant mirrors the #define of PX_PROTO_OE in ++// linux/if_pppox.h. We're defining this by hand here instead of ++// autogenerating through mkerrors.sh because including ++// linux/if_pppox.h causes some declaration conflicts with other ++// includes (linux/if_pppox.h includes linux/in.h, which conflicts ++// with netinet/in.h). Given that we only need a single zero constant ++// out of that file, it's cleaner to just define it by hand here. ++const px_proto_oe = 0 ++ ++type SockaddrPPPoE struct { ++ SID uint16 ++ Remote []byte ++ Dev string ++ raw RawSockaddrPPPoX ++} ++ ++func (sa *SockaddrPPPoE) sockaddr() (unsafe.Pointer, _Socklen, error) { ++ if len(sa.Remote) != 6 { ++ return nil, 0, EINVAL ++ } ++ if len(sa.Dev) > IFNAMSIZ-1 { ++ return nil, 0, EINVAL ++ } ++ ++ *(*uint16)(unsafe.Pointer(&sa.raw[0])) = AF_PPPOX ++ // This next field is in host-endian byte order. We can't use the ++ // same unsafe pointer cast as above, because this value is not ++ // 32-bit aligned and some architectures don't allow unaligned ++ // access. ++ // ++ // However, the value of px_proto_oe is 0, so we can use ++ // encoding/binary helpers to write the bytes without worrying ++ // about the ordering. ++ binary.BigEndian.PutUint32(sa.raw[2:6], px_proto_oe) ++ // This field is deliberately big-endian, unlike the previous ++ // one. The kernel expects SID to be in network byte order. ++ binary.BigEndian.PutUint16(sa.raw[6:8], sa.SID) ++ copy(sa.raw[8:14], sa.Remote) ++ for i := 14; i < 14+IFNAMSIZ; i++ { ++ sa.raw[i] = 0 ++ } ++ copy(sa.raw[14:], sa.Dev) ++ return unsafe.Pointer(&sa.raw), SizeofSockaddrPPPoX, nil ++} ++ ++// SockaddrTIPC implements the Sockaddr interface for AF_TIPC type sockets. ++// For more information on TIPC, see: http://tipc.sourceforge.net/. ++type SockaddrTIPC struct { ++ // Scope is the publication scopes when binding service/service range. ++ // Should be set to TIPC_CLUSTER_SCOPE or TIPC_NODE_SCOPE. ++ Scope int ++ ++ // Addr is the type of address used to manipulate a socket. Addr must be ++ // one of: ++ // - *TIPCSocketAddr: "id" variant in the C addr union ++ // - *TIPCServiceRange: "nameseq" variant in the C addr union ++ // - *TIPCServiceName: "name" variant in the C addr union ++ // ++ // If nil, EINVAL will be returned when the structure is used. ++ Addr TIPCAddr ++ ++ raw RawSockaddrTIPC ++} ++ ++// TIPCAddr is implemented by types that can be used as an address for ++// SockaddrTIPC. It is only implemented by *TIPCSocketAddr, *TIPCServiceRange, ++// and *TIPCServiceName. ++type TIPCAddr interface { ++ tipcAddrtype() uint8 ++ tipcAddr() [12]byte ++} ++ ++func (sa *TIPCSocketAddr) tipcAddr() [12]byte { ++ var out [12]byte ++ copy(out[:], (*(*[unsafe.Sizeof(TIPCSocketAddr{})]byte)(unsafe.Pointer(sa)))[:]) ++ return out ++} ++ ++func (sa *TIPCSocketAddr) tipcAddrtype() uint8 { return TIPC_SOCKET_ADDR } ++ ++func (sa *TIPCServiceRange) tipcAddr() [12]byte { ++ var out [12]byte ++ copy(out[:], (*(*[unsafe.Sizeof(TIPCServiceRange{})]byte)(unsafe.Pointer(sa)))[:]) ++ return out ++} ++ ++func (sa *TIPCServiceRange) tipcAddrtype() uint8 { return TIPC_SERVICE_RANGE } ++ ++func (sa *TIPCServiceName) tipcAddr() [12]byte { ++ var out [12]byte ++ copy(out[:], (*(*[unsafe.Sizeof(TIPCServiceName{})]byte)(unsafe.Pointer(sa)))[:]) ++ return out ++} ++ ++func (sa *TIPCServiceName) tipcAddrtype() uint8 { return TIPC_SERVICE_ADDR } ++ ++func (sa *SockaddrTIPC) sockaddr() (unsafe.Pointer, _Socklen, error) { ++ if sa.Addr == nil { ++ return nil, 0, EINVAL ++ } ++ ++ sa.raw.Family = AF_TIPC ++ sa.raw.Scope = int8(sa.Scope) ++ sa.raw.Addrtype = sa.Addr.tipcAddrtype() ++ sa.raw.Addr = sa.Addr.tipcAddr() ++ ++ return unsafe.Pointer(&sa.raw), SizeofSockaddrTIPC, nil ++} ++ ++// SockaddrL2TPIP implements the Sockaddr interface for IPPROTO_L2TP/AF_INET sockets. ++type SockaddrL2TPIP struct { ++ Addr [4]byte ++ ConnId uint32 ++ raw RawSockaddrL2TPIP ++} ++ ++func (sa *SockaddrL2TPIP) sockaddr() (unsafe.Pointer, _Socklen, error) { ++ sa.raw.Family = AF_INET ++ sa.raw.Conn_id = sa.ConnId ++ for i := 0; i < len(sa.Addr); i++ { ++ sa.raw.Addr[i] = sa.Addr[i] ++ } ++ return unsafe.Pointer(&sa.raw), SizeofSockaddrL2TPIP, nil ++} ++ ++// SockaddrL2TPIP6 implements the Sockaddr interface for IPPROTO_L2TP/AF_INET6 sockets. ++type SockaddrL2TPIP6 struct { ++ Addr [16]byte ++ ZoneId uint32 ++ ConnId uint32 ++ raw RawSockaddrL2TPIP6 ++} ++ ++func (sa *SockaddrL2TPIP6) sockaddr() (unsafe.Pointer, _Socklen, error) { ++ sa.raw.Family = AF_INET6 ++ sa.raw.Conn_id = sa.ConnId ++ sa.raw.Scope_id = sa.ZoneId ++ for i := 0; i < len(sa.Addr); i++ { ++ sa.raw.Addr[i] = sa.Addr[i] ++ } ++ return unsafe.Pointer(&sa.raw), SizeofSockaddrL2TPIP6, nil ++} ++ ++func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { ++ switch rsa.Addr.Family { ++ case AF_NETLINK: ++ pp := (*RawSockaddrNetlink)(unsafe.Pointer(rsa)) ++ sa := new(SockaddrNetlink) ++ sa.Family = pp.Family ++ sa.Pad = pp.Pad ++ sa.Pid = pp.Pid ++ sa.Groups = pp.Groups ++ return sa, nil ++ ++ case AF_PACKET: ++ pp := (*RawSockaddrLinklayer)(unsafe.Pointer(rsa)) ++ sa := new(SockaddrLinklayer) ++ sa.Protocol = pp.Protocol ++ sa.Ifindex = int(pp.Ifindex) ++ sa.Hatype = pp.Hatype ++ sa.Pkttype = pp.Pkttype ++ sa.Halen = pp.Halen ++ for i := 0; i < len(sa.Addr); i++ { ++ sa.Addr[i] = pp.Addr[i] ++ } ++ return sa, nil ++ ++ case AF_UNIX: ++ pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) ++ sa := new(SockaddrUnix) ++ if pp.Path[0] == 0 { ++ // "Abstract" Unix domain socket. ++ // Rewrite leading NUL as @ for textual display. ++ // (This is the standard convention.) ++ // Not friendly to overwrite in place, ++ // but the callers below don't care. ++ pp.Path[0] = '@' ++ } ++ ++ // Assume path ends at NUL. ++ // This is not technically the Linux semantics for ++ // abstract Unix domain sockets--they are supposed ++ // to be uninterpreted fixed-size binary blobs--but ++ // everyone uses this convention. ++ n := 0 ++ for n < len(pp.Path) && pp.Path[n] != 0 { ++ n++ ++ } ++ bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] ++ sa.Name = string(bytes) ++ return sa, nil ++ ++ case AF_INET: ++ proto, err := GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL) ++ if err != nil { ++ return nil, err ++ } ++ ++ switch proto { ++ case IPPROTO_L2TP: ++ pp := (*RawSockaddrL2TPIP)(unsafe.Pointer(rsa)) ++ sa := new(SockaddrL2TPIP) ++ sa.ConnId = pp.Conn_id ++ for i := 0; i < len(sa.Addr); i++ { ++ sa.Addr[i] = pp.Addr[i] ++ } ++ return sa, nil ++ default: ++ pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) ++ sa := new(SockaddrInet4) ++ p := (*[2]byte)(unsafe.Pointer(&pp.Port)) ++ sa.Port = int(p[0])<<8 + int(p[1]) ++ for i := 0; i < len(sa.Addr); i++ { ++ sa.Addr[i] = pp.Addr[i] ++ } ++ return sa, nil ++ } ++ ++ case AF_INET6: ++ proto, err := GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL) ++ if err != nil { ++ return nil, err ++ } ++ ++ switch proto { ++ case IPPROTO_L2TP: ++ pp := (*RawSockaddrL2TPIP6)(unsafe.Pointer(rsa)) ++ sa := new(SockaddrL2TPIP6) ++ sa.ConnId = pp.Conn_id ++ sa.ZoneId = pp.Scope_id ++ for i := 0; i < len(sa.Addr); i++ { ++ sa.Addr[i] = pp.Addr[i] ++ } ++ return sa, nil ++ default: ++ pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa)) ++ sa := new(SockaddrInet6) ++ p := (*[2]byte)(unsafe.Pointer(&pp.Port)) ++ sa.Port = int(p[0])<<8 + int(p[1]) ++ sa.ZoneId = pp.Scope_id ++ for i := 0; i < len(sa.Addr); i++ { ++ sa.Addr[i] = pp.Addr[i] ++ } ++ return sa, nil ++ } ++ ++ case AF_VSOCK: ++ pp := (*RawSockaddrVM)(unsafe.Pointer(rsa)) ++ sa := &SockaddrVM{ ++ CID: pp.Cid, ++ Port: pp.Port, ++ } ++ return sa, nil ++ case AF_BLUETOOTH: ++ proto, err := GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL) ++ if err != nil { ++ return nil, err ++ } ++ // only BTPROTO_L2CAP and BTPROTO_RFCOMM can accept connections ++ switch proto { ++ case BTPROTO_L2CAP: ++ pp := (*RawSockaddrL2)(unsafe.Pointer(rsa)) ++ sa := &SockaddrL2{ ++ PSM: pp.Psm, ++ CID: pp.Cid, ++ Addr: pp.Bdaddr, ++ AddrType: pp.Bdaddr_type, ++ } ++ return sa, nil ++ case BTPROTO_RFCOMM: ++ pp := (*RawSockaddrRFCOMM)(unsafe.Pointer(rsa)) ++ sa := &SockaddrRFCOMM{ ++ Channel: pp.Channel, ++ Addr: pp.Bdaddr, ++ } ++ return sa, nil ++ } ++ case AF_XDP: ++ pp := (*RawSockaddrXDP)(unsafe.Pointer(rsa)) ++ sa := &SockaddrXDP{ ++ Flags: pp.Flags, ++ Ifindex: pp.Ifindex, ++ QueueID: pp.Queue_id, ++ SharedUmemFD: pp.Shared_umem_fd, ++ } ++ return sa, nil ++ case AF_PPPOX: ++ pp := (*RawSockaddrPPPoX)(unsafe.Pointer(rsa)) ++ if binary.BigEndian.Uint32(pp[2:6]) != px_proto_oe { ++ return nil, EINVAL ++ } ++ sa := &SockaddrPPPoE{ ++ SID: binary.BigEndian.Uint16(pp[6:8]), ++ Remote: pp[8:14], ++ } ++ for i := 14; i < 14+IFNAMSIZ; i++ { ++ if pp[i] == 0 { ++ sa.Dev = string(pp[14:i]) ++ break ++ } ++ } ++ return sa, nil ++ case AF_TIPC: ++ pp := (*RawSockaddrTIPC)(unsafe.Pointer(rsa)) ++ ++ sa := &SockaddrTIPC{ ++ Scope: int(pp.Scope), ++ } ++ ++ // Determine which union variant is present in pp.Addr by checking ++ // pp.Addrtype. ++ switch pp.Addrtype { ++ case TIPC_SERVICE_RANGE: ++ sa.Addr = (*TIPCServiceRange)(unsafe.Pointer(&pp.Addr)) ++ case TIPC_SERVICE_ADDR: ++ sa.Addr = (*TIPCServiceName)(unsafe.Pointer(&pp.Addr)) ++ case TIPC_SOCKET_ADDR: ++ sa.Addr = (*TIPCSocketAddr)(unsafe.Pointer(&pp.Addr)) ++ default: ++ return nil, EINVAL ++ } ++ ++ return sa, nil ++ } ++ return nil, EAFNOSUPPORT ++} ++ ++func Accept(fd int) (nfd int, sa Sockaddr, err error) { ++ var rsa RawSockaddrAny ++ var len _Socklen = SizeofSockaddrAny ++ nfd, err = accept(fd, &rsa, &len) ++ if err != nil { ++ return ++ } ++ sa, err = anyToSockaddr(fd, &rsa) ++ if err != nil { ++ Close(nfd) ++ nfd = 0 ++ } ++ return ++} ++ ++func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) { ++ var rsa RawSockaddrAny ++ var len _Socklen = SizeofSockaddrAny ++ nfd, err = accept4(fd, &rsa, &len, flags) ++ if err != nil { ++ return ++ } ++ if len > SizeofSockaddrAny { ++ panic("RawSockaddrAny too small") ++ } ++ sa, err = anyToSockaddr(fd, &rsa) ++ if err != nil { ++ Close(nfd) ++ nfd = 0 ++ } ++ return ++} ++ ++func Getsockname(fd int) (sa Sockaddr, err error) { ++ var rsa RawSockaddrAny ++ var len _Socklen = SizeofSockaddrAny ++ if err = getsockname(fd, &rsa, &len); err != nil { ++ return ++ } ++ return anyToSockaddr(fd, &rsa) ++} ++ ++func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) { ++ var value IPMreqn ++ vallen := _Socklen(SizeofIPMreqn) ++ err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) ++ return &value, err ++} ++ ++func GetsockoptUcred(fd, level, opt int) (*Ucred, error) { ++ var value Ucred ++ vallen := _Socklen(SizeofUcred) ++ err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) ++ return &value, err ++} ++ ++func GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) { ++ var value TCPInfo ++ vallen := _Socklen(SizeofTCPInfo) ++ err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) ++ return &value, err ++} ++ ++// GetsockoptString returns the string value of the socket option opt for the ++// socket associated with fd at the given socket level. ++func GetsockoptString(fd, level, opt int) (string, error) { ++ buf := make([]byte, 256) ++ vallen := _Socklen(len(buf)) ++ err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen) ++ if err != nil { ++ if err == ERANGE { ++ buf = make([]byte, vallen) ++ err = getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen) ++ } ++ if err != nil { ++ return "", err ++ } ++ } ++ return string(buf[:vallen-1]), nil ++} ++ ++func GetsockoptTpacketStats(fd, level, opt int) (*TpacketStats, error) { ++ var value TpacketStats ++ vallen := _Socklen(SizeofTpacketStats) ++ err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) ++ return &value, err ++} ++ ++func GetsockoptTpacketStatsV3(fd, level, opt int) (*TpacketStatsV3, error) { ++ var value TpacketStatsV3 ++ vallen := _Socklen(SizeofTpacketStatsV3) ++ err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) ++ return &value, err ++} ++ ++func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) { ++ return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) ++} ++ ++func SetsockoptPacketMreq(fd, level, opt int, mreq *PacketMreq) error { ++ return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) ++} ++ ++// SetsockoptSockFprog attaches a classic BPF or an extended BPF program to a ++// socket to filter incoming packets. See 'man 7 socket' for usage information. ++func SetsockoptSockFprog(fd, level, opt int, fprog *SockFprog) error { ++ return setsockopt(fd, level, opt, unsafe.Pointer(fprog), unsafe.Sizeof(*fprog)) ++} ++ ++func SetsockoptCanRawFilter(fd, level, opt int, filter []CanFilter) error { ++ var p unsafe.Pointer ++ if len(filter) > 0 { ++ p = unsafe.Pointer(&filter[0]) ++ } ++ return setsockopt(fd, level, opt, p, uintptr(len(filter)*SizeofCanFilter)) ++} ++ ++func SetsockoptTpacketReq(fd, level, opt int, tp *TpacketReq) error { ++ return setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp)) ++} ++ ++func SetsockoptTpacketReq3(fd, level, opt int, tp *TpacketReq3) error { ++ return setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp)) ++} ++ ++// Keyctl Commands (http://man7.org/linux/man-pages/man2/keyctl.2.html) ++ ++// KeyctlInt calls keyctl commands in which each argument is an int. ++// These commands are KEYCTL_REVOKE, KEYCTL_CHOWN, KEYCTL_CLEAR, KEYCTL_LINK, ++// KEYCTL_UNLINK, KEYCTL_NEGATE, KEYCTL_SET_REQKEY_KEYRING, KEYCTL_SET_TIMEOUT, ++// KEYCTL_ASSUME_AUTHORITY, KEYCTL_SESSION_TO_PARENT, KEYCTL_REJECT, ++// KEYCTL_INVALIDATE, and KEYCTL_GET_PERSISTENT. ++//sys KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) = SYS_KEYCTL ++ ++// KeyctlBuffer calls keyctl commands in which the third and fourth ++// arguments are a buffer and its length, respectively. ++// These commands are KEYCTL_UPDATE, KEYCTL_READ, and KEYCTL_INSTANTIATE. ++//sys KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) = SYS_KEYCTL ++ ++// KeyctlString calls keyctl commands which return a string. ++// These commands are KEYCTL_DESCRIBE and KEYCTL_GET_SECURITY. ++func KeyctlString(cmd int, id int) (string, error) { ++ // We must loop as the string data may change in between the syscalls. ++ // We could allocate a large buffer here to reduce the chance that the ++ // syscall needs to be called twice; however, this is unnecessary as ++ // the performance loss is negligible. ++ var buffer []byte ++ for { ++ // Try to fill the buffer with data ++ length, err := KeyctlBuffer(cmd, id, buffer, 0) ++ if err != nil { ++ return "", err ++ } ++ ++ // Check if the data was written ++ if length <= len(buffer) { ++ // Exclude the null terminator ++ return string(buffer[:length-1]), nil ++ } ++ ++ // Make a bigger buffer if needed ++ buffer = make([]byte, length) ++ } ++} ++ ++// Keyctl commands with special signatures. ++ ++// KeyctlGetKeyringID implements the KEYCTL_GET_KEYRING_ID command. ++// See the full documentation at: ++// http://man7.org/linux/man-pages/man3/keyctl_get_keyring_ID.3.html ++func KeyctlGetKeyringID(id int, create bool) (ringid int, err error) { ++ createInt := 0 ++ if create { ++ createInt = 1 ++ } ++ return KeyctlInt(KEYCTL_GET_KEYRING_ID, id, createInt, 0, 0) ++} ++ ++// KeyctlSetperm implements the KEYCTL_SETPERM command. The perm value is the ++// key handle permission mask as described in the "keyctl setperm" section of ++// http://man7.org/linux/man-pages/man1/keyctl.1.html. ++// See the full documentation at: ++// http://man7.org/linux/man-pages/man3/keyctl_setperm.3.html ++func KeyctlSetperm(id int, perm uint32) error { ++ _, err := KeyctlInt(KEYCTL_SETPERM, id, int(perm), 0, 0) ++ return err ++} ++ ++//sys keyctlJoin(cmd int, arg2 string) (ret int, err error) = SYS_KEYCTL ++ ++// KeyctlJoinSessionKeyring implements the KEYCTL_JOIN_SESSION_KEYRING command. ++// See the full documentation at: ++// http://man7.org/linux/man-pages/man3/keyctl_join_session_keyring.3.html ++func KeyctlJoinSessionKeyring(name string) (ringid int, err error) { ++ return keyctlJoin(KEYCTL_JOIN_SESSION_KEYRING, name) ++} ++ ++//sys keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) = SYS_KEYCTL ++ ++// KeyctlSearch implements the KEYCTL_SEARCH command. ++// See the full documentation at: ++// http://man7.org/linux/man-pages/man3/keyctl_search.3.html ++func KeyctlSearch(ringid int, keyType, description string, destRingid int) (id int, err error) { ++ return keyctlSearch(KEYCTL_SEARCH, ringid, keyType, description, destRingid) ++} ++ ++//sys keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) = SYS_KEYCTL ++ ++// KeyctlInstantiateIOV implements the KEYCTL_INSTANTIATE_IOV command. This ++// command is similar to KEYCTL_INSTANTIATE, except that the payload is a slice ++// of Iovec (each of which represents a buffer) instead of a single buffer. ++// See the full documentation at: ++// http://man7.org/linux/man-pages/man3/keyctl_instantiate_iov.3.html ++func KeyctlInstantiateIOV(id int, payload []Iovec, ringid int) error { ++ return keyctlIOV(KEYCTL_INSTANTIATE_IOV, id, payload, ringid) ++} ++ ++//sys keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) = SYS_KEYCTL ++ ++// KeyctlDHCompute implements the KEYCTL_DH_COMPUTE command. This command ++// computes a Diffie-Hellman shared secret based on the provide params. The ++// secret is written to the provided buffer and the returned size is the number ++// of bytes written (returning an error if there is insufficient space in the ++// buffer). If a nil buffer is passed in, this function returns the minimum ++// buffer length needed to store the appropriate data. Note that this differs ++// from KEYCTL_READ's behavior which always returns the requested payload size. ++// See the full documentation at: ++// http://man7.org/linux/man-pages/man3/keyctl_dh_compute.3.html ++func KeyctlDHCompute(params *KeyctlDHParams, buffer []byte) (size int, err error) { ++ return keyctlDH(KEYCTL_DH_COMPUTE, params, buffer) ++} ++ ++// KeyctlRestrictKeyring implements the KEYCTL_RESTRICT_KEYRING command. This ++// command limits the set of keys that can be linked to the keyring, regardless ++// of keyring permissions. The command requires the "setattr" permission. ++// ++// When called with an empty keyType the command locks the keyring, preventing ++// any further keys from being linked to the keyring. ++// ++// The "asymmetric" keyType defines restrictions requiring key payloads to be ++// DER encoded X.509 certificates signed by keys in another keyring. Restrictions ++// for "asymmetric" include "builtin_trusted", "builtin_and_secondary_trusted", ++// "key_or_keyring:", and "key_or_keyring::chain". ++// ++// As of Linux 4.12, only the "asymmetric" keyType defines type-specific ++// restrictions. ++// ++// See the full documentation at: ++// http://man7.org/linux/man-pages/man3/keyctl_restrict_keyring.3.html ++// http://man7.org/linux/man-pages/man2/keyctl.2.html ++func KeyctlRestrictKeyring(ringid int, keyType string, restriction string) error { ++ if keyType == "" { ++ return keyctlRestrictKeyring(KEYCTL_RESTRICT_KEYRING, ringid) ++ } ++ return keyctlRestrictKeyringByType(KEYCTL_RESTRICT_KEYRING, ringid, keyType, restriction) ++} ++ ++//sys keyctlRestrictKeyringByType(cmd int, arg2 int, keyType string, restriction string) (err error) = SYS_KEYCTL ++//sys keyctlRestrictKeyring(cmd int, arg2 int) (err error) = SYS_KEYCTL ++ ++func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { ++ var msg Msghdr ++ var rsa RawSockaddrAny ++ msg.Name = (*byte)(unsafe.Pointer(&rsa)) ++ msg.Namelen = uint32(SizeofSockaddrAny) ++ var iov Iovec ++ if len(p) > 0 { ++ iov.Base = &p[0] ++ iov.SetLen(len(p)) ++ } ++ var dummy byte ++ if len(oob) > 0 { ++ if len(p) == 0 { ++ var sockType int ++ sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE) ++ if err != nil { ++ return ++ } ++ // receive at least one normal byte ++ if sockType != SOCK_DGRAM { ++ iov.Base = &dummy ++ iov.SetLen(1) ++ } ++ } ++ msg.Control = &oob[0] ++ msg.SetControllen(len(oob)) ++ } ++ msg.Iov = &iov ++ msg.Iovlen = 1 ++ if n, err = recvmsg(fd, &msg, flags); err != nil { ++ return ++ } ++ oobn = int(msg.Controllen) ++ recvflags = int(msg.Flags) ++ // source address is only specified if the socket is unconnected ++ if rsa.Addr.Family != AF_UNSPEC { ++ from, err = anyToSockaddr(fd, &rsa) ++ } ++ return ++} ++ ++func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { ++ _, err = SendmsgN(fd, p, oob, to, flags) ++ return ++} ++ ++func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { ++ var ptr unsafe.Pointer ++ var salen _Socklen ++ if to != nil { ++ var err error ++ ptr, salen, err = to.sockaddr() ++ if err != nil { ++ return 0, err ++ } ++ } ++ var msg Msghdr ++ msg.Name = (*byte)(ptr) ++ msg.Namelen = uint32(salen) ++ var iov Iovec ++ if len(p) > 0 { ++ iov.Base = &p[0] ++ iov.SetLen(len(p)) ++ } ++ var dummy byte ++ if len(oob) > 0 { ++ if len(p) == 0 { ++ var sockType int ++ sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE) ++ if err != nil { ++ return 0, err ++ } ++ // send at least one normal byte ++ if sockType != SOCK_DGRAM { ++ iov.Base = &dummy ++ iov.SetLen(1) ++ } ++ } ++ msg.Control = &oob[0] ++ msg.SetControllen(len(oob)) ++ } ++ msg.Iov = &iov ++ msg.Iovlen = 1 ++ if n, err = sendmsg(fd, &msg, flags); err != nil { ++ return 0, err ++ } ++ if len(oob) > 0 && len(p) == 0 { ++ n = 0 ++ } ++ return n, nil ++} ++ ++// BindToDevice binds the socket associated with fd to device. ++func BindToDevice(fd int, device string) (err error) { ++ return SetsockoptString(fd, SOL_SOCKET, SO_BINDTODEVICE, device) ++} ++ ++//sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error) ++ ++func ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err error) { ++ // The peek requests are machine-size oriented, so we wrap it ++ // to retrieve arbitrary-length data. ++ ++ // The ptrace syscall differs from glibc's ptrace. ++ // Peeks returns the word in *data, not as the return value. ++ ++ var buf [SizeofPtr]byte ++ ++ // Leading edge. PEEKTEXT/PEEKDATA don't require aligned ++ // access (PEEKUSER warns that it might), but if we don't ++ // align our reads, we might straddle an unmapped page ++ // boundary and not get the bytes leading up to the page ++ // boundary. ++ n := 0 ++ if addr%SizeofPtr != 0 { ++ err = ptrace(req, pid, addr-addr%SizeofPtr, uintptr(unsafe.Pointer(&buf[0]))) ++ if err != nil { ++ return 0, err ++ } ++ n += copy(out, buf[addr%SizeofPtr:]) ++ out = out[n:] ++ } ++ ++ // Remainder. ++ for len(out) > 0 { ++ // We use an internal buffer to guarantee alignment. ++ // It's not documented if this is necessary, but we're paranoid. ++ err = ptrace(req, pid, addr+uintptr(n), uintptr(unsafe.Pointer(&buf[0]))) ++ if err != nil { ++ return n, err ++ } ++ copied := copy(out, buf[0:]) ++ n += copied ++ out = out[copied:] ++ } ++ ++ return n, nil ++} ++ ++func PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) { ++ return ptracePeek(PTRACE_PEEKTEXT, pid, addr, out) ++} ++ ++func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) { ++ return ptracePeek(PTRACE_PEEKDATA, pid, addr, out) ++} ++ ++func PtracePeekUser(pid int, addr uintptr, out []byte) (count int, err error) { ++ return ptracePeek(PTRACE_PEEKUSR, pid, addr, out) ++} ++ ++func ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (count int, err error) { ++ // As for ptracePeek, we need to align our accesses to deal ++ // with the possibility of straddling an invalid page. ++ ++ // Leading edge. ++ n := 0 ++ if addr%SizeofPtr != 0 { ++ var buf [SizeofPtr]byte ++ err = ptrace(peekReq, pid, addr-addr%SizeofPtr, uintptr(unsafe.Pointer(&buf[0]))) ++ if err != nil { ++ return 0, err ++ } ++ n += copy(buf[addr%SizeofPtr:], data) ++ word := *((*uintptr)(unsafe.Pointer(&buf[0]))) ++ err = ptrace(pokeReq, pid, addr-addr%SizeofPtr, word) ++ if err != nil { ++ return 0, err ++ } ++ data = data[n:] ++ } ++ ++ // Interior. ++ for len(data) > SizeofPtr { ++ word := *((*uintptr)(unsafe.Pointer(&data[0]))) ++ err = ptrace(pokeReq, pid, addr+uintptr(n), word) ++ if err != nil { ++ return n, err ++ } ++ n += SizeofPtr ++ data = data[SizeofPtr:] ++ } ++ ++ // Trailing edge. ++ if len(data) > 0 { ++ var buf [SizeofPtr]byte ++ err = ptrace(peekReq, pid, addr+uintptr(n), uintptr(unsafe.Pointer(&buf[0]))) ++ if err != nil { ++ return n, err ++ } ++ copy(buf[0:], data) ++ word := *((*uintptr)(unsafe.Pointer(&buf[0]))) ++ err = ptrace(pokeReq, pid, addr+uintptr(n), word) ++ if err != nil { ++ return n, err ++ } ++ n += len(data) ++ } ++ ++ return n, nil ++} ++ ++func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) { ++ return ptracePoke(PTRACE_POKETEXT, PTRACE_PEEKTEXT, pid, addr, data) ++} ++ ++func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) { ++ return ptracePoke(PTRACE_POKEDATA, PTRACE_PEEKDATA, pid, addr, data) ++} ++ ++func PtracePokeUser(pid int, addr uintptr, data []byte) (count int, err error) { ++ return ptracePoke(PTRACE_POKEUSR, PTRACE_PEEKUSR, pid, addr, data) ++} ++ ++func PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) { ++ return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) ++} ++ ++func PtraceSetRegs(pid int, regs *PtraceRegs) (err error) { ++ return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) ++} ++ ++func PtraceSetOptions(pid int, options int) (err error) { ++ return ptrace(PTRACE_SETOPTIONS, pid, 0, uintptr(options)) ++} ++ ++func PtraceGetEventMsg(pid int) (msg uint, err error) { ++ var data _C_long ++ err = ptrace(PTRACE_GETEVENTMSG, pid, 0, uintptr(unsafe.Pointer(&data))) ++ msg = uint(data) ++ return ++} ++ ++func PtraceCont(pid int, signal int) (err error) { ++ return ptrace(PTRACE_CONT, pid, 0, uintptr(signal)) ++} ++ ++func PtraceSyscall(pid int, signal int) (err error) { ++ return ptrace(PTRACE_SYSCALL, pid, 0, uintptr(signal)) ++} ++ ++func PtraceSingleStep(pid int) (err error) { return ptrace(PTRACE_SINGLESTEP, pid, 0, 0) } ++ ++func PtraceInterrupt(pid int) (err error) { return ptrace(PTRACE_INTERRUPT, pid, 0, 0) } ++ ++func PtraceAttach(pid int) (err error) { return ptrace(PTRACE_ATTACH, pid, 0, 0) } ++ ++func PtraceSeize(pid int) (err error) { return ptrace(PTRACE_SEIZE, pid, 0, 0) } ++ ++func PtraceDetach(pid int) (err error) { return ptrace(PTRACE_DETACH, pid, 0, 0) } ++ ++//sys reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) ++ ++func Reboot(cmd int) (err error) { ++ return reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, "") ++} ++ ++func direntIno(buf []byte) (uint64, bool) { ++ return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) ++} ++ ++func direntReclen(buf []byte) (uint64, bool) { ++ return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) ++} ++ ++func direntNamlen(buf []byte) (uint64, bool) { ++ reclen, ok := direntReclen(buf) ++ if !ok { ++ return 0, false ++ } ++ return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true ++} ++ ++//sys mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) ++ ++func Mount(source string, target string, fstype string, flags uintptr, data string) (err error) { ++ // Certain file systems get rather angry and EINVAL if you give ++ // them an empty string of data, rather than NULL. ++ if data == "" { ++ return mount(source, target, fstype, flags, nil) ++ } ++ datap, err := BytePtrFromString(data) ++ if err != nil { ++ return err ++ } ++ return mount(source, target, fstype, flags, datap) ++} ++ ++func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { ++ if raceenabled { ++ raceReleaseMerge(unsafe.Pointer(&ioSync)) ++ } ++ return sendfile(outfd, infd, offset, count) ++} ++ ++// Sendto ++// Recvfrom ++// Socketpair ++ ++/* ++ * Direct access ++ */ ++//sys Acct(path string) (err error) ++//sys AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) ++//sys Adjtimex(buf *Timex) (state int, err error) ++//sysnb Capget(hdr *CapUserHeader, data *CapUserData) (err error) ++//sysnb Capset(hdr *CapUserHeader, data *CapUserData) (err error) ++//sys Chdir(path string) (err error) ++//sys Chroot(path string) (err error) ++//sys ClockGetres(clockid int32, res *Timespec) (err error) ++//sys ClockGettime(clockid int32, time *Timespec) (err error) ++//sys ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) ++//sys Close(fd int) (err error) ++//sys CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) ++//sys DeleteModule(name string, flags int) (err error) ++//sys Dup(oldfd int) (fd int, err error) ++ ++func Dup2(oldfd, newfd int) error { ++ // Android O and newer blocks dup2; riscv and arm64 don't implement dup2. ++ if runtime.GOOS == "android" || runtime.GOARCH == "riscv64" || runtime.GOARCH == "arm64" || runtime.GOARCH == "loong64" { ++ return Dup3(oldfd, newfd, 0) ++ } ++ return dup2(oldfd, newfd) ++} ++ ++//sys Dup3(oldfd int, newfd int, flags int) (err error) ++//sysnb EpollCreate1(flag int) (fd int, err error) ++//sysnb EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) ++//sys Eventfd(initval uint, flags int) (fd int, err error) = SYS_EVENTFD2 ++//sys Exit(code int) = SYS_EXIT_GROUP ++//sys Fallocate(fd int, mode uint32, off int64, len int64) (err error) ++//sys Fchdir(fd int) (err error) ++//sys Fchmod(fd int, mode uint32) (err error) ++//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) ++//sys Fdatasync(fd int) (err error) ++//sys Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) ++//sys FinitModule(fd int, params string, flags int) (err error) ++//sys Flistxattr(fd int, dest []byte) (sz int, err error) ++//sys Flock(fd int, how int) (err error) ++//sys Fremovexattr(fd int, attr string) (err error) ++//sys Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) ++//sys Fsync(fd int) (err error) ++//sys Getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64 ++//sysnb Getpgid(pid int) (pgid int, err error) ++ ++func Getpgrp() (pid int) { ++ pid, _ = Getpgid(0) ++ return ++} ++ ++//sysnb Getpid() (pid int) ++//sysnb Getppid() (ppid int) ++//sys Getpriority(which int, who int) (prio int, err error) ++//sys Getrandom(buf []byte, flags int) (n int, err error) ++//sysnb Getrusage(who int, rusage *Rusage) (err error) ++//sysnb Getsid(pid int) (sid int, err error) ++//sysnb Gettid() (tid int) ++//sys Getxattr(path string, attr string, dest []byte) (sz int, err error) ++//sys InitModule(moduleImage []byte, params string) (err error) ++//sys InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) ++//sysnb InotifyInit1(flags int) (fd int, err error) ++//sysnb InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) ++//sysnb Kill(pid int, sig syscall.Signal) (err error) ++//sys Klogctl(typ int, buf []byte) (n int, err error) = SYS_SYSLOG ++//sys Lgetxattr(path string, attr string, dest []byte) (sz int, err error) ++//sys Listxattr(path string, dest []byte) (sz int, err error) ++//sys Llistxattr(path string, dest []byte) (sz int, err error) ++//sys Lremovexattr(path string, attr string) (err error) ++//sys Lsetxattr(path string, attr string, data []byte, flags int) (err error) ++//sys MemfdCreate(name string, flags int) (fd int, err error) ++//sys Mkdirat(dirfd int, path string, mode uint32) (err error) ++//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) ++//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) ++//sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) ++//sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT ++//sysnb prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64 ++//sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) ++//sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) = SYS_PSELECT6 ++//sys read(fd int, p []byte) (n int, err error) ++//sys Removexattr(path string, attr string) (err error) ++//sys Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) ++//sys RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) ++//sys Setdomainname(p []byte) (err error) ++//sys Sethostname(p []byte) (err error) ++//sysnb Setpgid(pid int, pgid int) (err error) ++//sysnb Setsid() (pid int, err error) ++//sysnb Settimeofday(tv *Timeval) (err error) ++//sys Setns(fd int, nstype int) (err error) ++ ++// PrctlRetInt performs a prctl operation specified by option and further ++// optional arguments arg2 through arg5 depending on option. It returns a ++// non-negative integer that is returned by the prctl syscall. ++func PrctlRetInt(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (int, error) { ++ ret, _, err := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) ++ if err != 0 { ++ return 0, err ++ } ++ return int(ret), nil ++} ++ ++// issue 1435. ++// On linux Setuid and Setgid only affects the current thread, not the process. ++// This does not match what most callers expect so we must return an error ++// here rather than letting the caller think that the call succeeded. ++ ++func Setuid(uid int) (err error) { ++ return EOPNOTSUPP ++} ++ ++func Setgid(uid int) (err error) { ++ return EOPNOTSUPP ++} ++ ++// SetfsgidRetGid sets fsgid for current thread and returns previous fsgid set. ++// setfsgid(2) will return a non-nil error only if its caller lacks CAP_SETUID capability. ++// If the call fails due to other reasons, current fsgid will be returned. ++func SetfsgidRetGid(gid int) (int, error) { ++ return setfsgid(gid) ++} ++ ++// SetfsuidRetUid sets fsuid for current thread and returns previous fsuid set. ++// setfsgid(2) will return a non-nil error only if its caller lacks CAP_SETUID capability ++// If the call fails due to other reasons, current fsuid will be returned. ++func SetfsuidRetUid(uid int) (int, error) { ++ return setfsuid(uid) ++} ++ ++func Setfsgid(gid int) error { ++ _, err := setfsgid(gid) ++ return err ++} ++ ++func Setfsuid(uid int) error { ++ _, err := setfsuid(uid) ++ return err ++} ++ ++func Signalfd(fd int, sigmask *Sigset_t, flags int) (newfd int, err error) { ++ return signalfd(fd, sigmask, _C__NSIG/8, flags) ++} ++ ++//sys Setpriority(which int, who int, prio int) (err error) ++//sys Setxattr(path string, attr string, data []byte, flags int) (err error) ++//sys signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) = SYS_SIGNALFD4 ++//sys Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) ++//sys Sync() ++//sys Syncfs(fd int) (err error) ++//sysnb Sysinfo(info *Sysinfo_t) (err error) ++//sys Tee(rfd int, wfd int, len int, flags int) (n int64, err error) ++//sysnb TimerfdCreate(clockid int, flags int) (fd int, err error) ++//sysnb TimerfdGettime(fd int, currValue *ItimerSpec) (err error) ++//sysnb TimerfdSettime(fd int, flags int, newValue *ItimerSpec, oldValue *ItimerSpec) (err error) ++//sysnb Tgkill(tgid int, tid int, sig syscall.Signal) (err error) ++//sysnb Times(tms *Tms) (ticks uintptr, err error) ++//sysnb Umask(mask int) (oldmask int) ++//sysnb Uname(buf *Utsname) (err error) ++//sys Unmount(target string, flags int) (err error) = SYS_UMOUNT2 ++//sys Unshare(flags int) (err error) ++//sys write(fd int, p []byte) (n int, err error) ++//sys exitThread(code int) (err error) = SYS_EXIT ++//sys readlen(fd int, p *byte, np int) (n int, err error) = SYS_READ ++//sys writelen(fd int, p *byte, np int) (n int, err error) = SYS_WRITE ++//sys readv(fd int, iovs []Iovec) (n int, err error) = SYS_READV ++//sys writev(fd int, iovs []Iovec) (n int, err error) = SYS_WRITEV ++//sys preadv(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) = SYS_PREADV ++//sys pwritev(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) = SYS_PWRITEV ++//sys preadv2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PREADV2 ++//sys pwritev2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PWRITEV2 ++ ++func bytes2iovec(bs [][]byte) []Iovec { ++ iovecs := make([]Iovec, len(bs)) ++ for i, b := range bs { ++ iovecs[i].SetLen(len(b)) ++ if len(b) > 0 { ++ iovecs[i].Base = &b[0] ++ } else { ++ iovecs[i].Base = (*byte)(unsafe.Pointer(&_zero)) ++ } ++ } ++ return iovecs ++} ++ ++// offs2lohi splits offs into its lower and upper unsigned long. On 64-bit ++// systems, hi will always be 0. On 32-bit systems, offs will be split in half. ++// preadv/pwritev chose this calling convention so they don't need to add a ++// padding-register for alignment on ARM. ++func offs2lohi(offs int64) (lo, hi uintptr) { ++ return uintptr(offs), uintptr(uint64(offs) >> SizeofLong) ++} ++ ++func Readv(fd int, iovs [][]byte) (n int, err error) { ++ iovecs := bytes2iovec(iovs) ++ n, err = readv(fd, iovecs) ++ readvRacedetect(iovecs, n, err) ++ return n, err ++} ++ ++func Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) { ++ iovecs := bytes2iovec(iovs) ++ lo, hi := offs2lohi(offset) ++ n, err = preadv(fd, iovecs, lo, hi) ++ readvRacedetect(iovecs, n, err) ++ return n, err ++} ++ ++func Preadv2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) { ++ iovecs := bytes2iovec(iovs) ++ lo, hi := offs2lohi(offset) ++ n, err = preadv2(fd, iovecs, lo, hi, flags) ++ readvRacedetect(iovecs, n, err) ++ return n, err ++} ++ ++func readvRacedetect(iovecs []Iovec, n int, err error) { ++ if !raceenabled { ++ return ++ } ++ for i := 0; n > 0 && i < len(iovecs); i++ { ++ m := int(iovecs[i].Len) ++ if m > n { ++ m = n ++ } ++ n -= m ++ if m > 0 { ++ raceWriteRange(unsafe.Pointer(iovecs[i].Base), m) ++ } ++ } ++ if err == nil { ++ raceAcquire(unsafe.Pointer(&ioSync)) ++ } ++} ++ ++func Writev(fd int, iovs [][]byte) (n int, err error) { ++ iovecs := bytes2iovec(iovs) ++ if raceenabled { ++ raceReleaseMerge(unsafe.Pointer(&ioSync)) ++ } ++ n, err = writev(fd, iovecs) ++ writevRacedetect(iovecs, n) ++ return n, err ++} ++ ++func Pwritev(fd int, iovs [][]byte, offset int64) (n int, err error) { ++ iovecs := bytes2iovec(iovs) ++ if raceenabled { ++ raceReleaseMerge(unsafe.Pointer(&ioSync)) ++ } ++ lo, hi := offs2lohi(offset) ++ n, err = pwritev(fd, iovecs, lo, hi) ++ writevRacedetect(iovecs, n) ++ return n, err ++} ++ ++func Pwritev2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) { ++ iovecs := bytes2iovec(iovs) ++ if raceenabled { ++ raceReleaseMerge(unsafe.Pointer(&ioSync)) ++ } ++ lo, hi := offs2lohi(offset) ++ n, err = pwritev2(fd, iovecs, lo, hi, flags) ++ writevRacedetect(iovecs, n) ++ return n, err ++} ++ ++func writevRacedetect(iovecs []Iovec, n int) { ++ if !raceenabled { ++ return ++ } ++ for i := 0; n > 0 && i < len(iovecs); i++ { ++ m := int(iovecs[i].Len) ++ if m > n { ++ m = n ++ } ++ n -= m ++ if m > 0 { ++ raceReadRange(unsafe.Pointer(iovecs[i].Base), m) ++ } ++ } ++} ++ ++// mmap varies by architecture; see syscall_linux_*.go. ++//sys munmap(addr uintptr, length uintptr) (err error) ++ ++var mapper = &mmapper{ ++ active: make(map[*byte][]byte), ++ mmap: mmap, ++ munmap: munmap, ++} ++ ++func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { ++ return mapper.Mmap(fd, offset, length, prot, flags) ++} ++ ++func Munmap(b []byte) (err error) { ++ return mapper.Munmap(b) ++} ++ ++//sys Madvise(b []byte, advice int) (err error) ++//sys Mprotect(b []byte, prot int) (err error) ++//sys Mlock(b []byte) (err error) ++//sys Mlockall(flags int) (err error) ++//sys Msync(b []byte, flags int) (err error) ++//sys Munlock(b []byte) (err error) ++//sys Munlockall() (err error) ++ ++// Vmsplice splices user pages from a slice of Iovecs into a pipe specified by fd, ++// using the specified flags. ++func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) { ++ var p unsafe.Pointer ++ if len(iovs) > 0 { ++ p = unsafe.Pointer(&iovs[0]) ++ } ++ ++ n, _, errno := Syscall6(SYS_VMSPLICE, uintptr(fd), uintptr(p), uintptr(len(iovs)), uintptr(flags), 0, 0) ++ if errno != 0 { ++ return 0, syscall.Errno(errno) ++ } ++ ++ return int(n), nil ++} ++ ++func isGroupMember(gid int) bool { ++ groups, err := Getgroups() ++ if err != nil { ++ return false ++ } ++ ++ for _, g := range groups { ++ if g == gid { ++ return true ++ } ++ } ++ return false ++} ++ ++//sys faccessat(dirfd int, path string, mode uint32) (err error) ++ ++func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { ++ if flags & ^(AT_SYMLINK_NOFOLLOW|AT_EACCESS) != 0 { ++ return EINVAL ++ } ++ ++ // The Linux kernel faccessat system call does not take any flags. ++ // The glibc faccessat implements the flags itself; see ++ // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/faccessat.c;hb=HEAD ++ // Because people naturally expect syscall.Faccessat to act ++ // like C faccessat, we do the same. ++ ++ if flags == 0 { ++ return faccessat(dirfd, path, mode) ++ } ++ ++ var st Stat_t ++ if err := Fstatat(dirfd, path, &st, flags&AT_SYMLINK_NOFOLLOW); err != nil { ++ return err ++ } ++ ++ mode &= 7 ++ if mode == 0 { ++ return nil ++ } ++ ++ var uid int ++ if flags&AT_EACCESS != 0 { ++ uid = Geteuid() ++ } else { ++ uid = Getuid() ++ } ++ ++ if uid == 0 { ++ if mode&1 == 0 { ++ // Root can read and write any file. ++ return nil ++ } ++ if st.Mode&0111 != 0 { ++ // Root can execute any file that anybody can execute. ++ return nil ++ } ++ return EACCES ++ } ++ ++ var fmode uint32 ++ if uint32(uid) == st.Uid { ++ fmode = (st.Mode >> 6) & 7 ++ } else { ++ var gid int ++ if flags&AT_EACCESS != 0 { ++ gid = Getegid() ++ } else { ++ gid = Getgid() ++ } ++ ++ if uint32(gid) == st.Gid || isGroupMember(gid) { ++ fmode = (st.Mode >> 3) & 7 ++ } else { ++ fmode = st.Mode & 7 ++ } ++ } ++ ++ if fmode&mode == mode { ++ return nil ++ } ++ ++ return EACCES ++} ++ ++//sys nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) = SYS_NAME_TO_HANDLE_AT ++//sys openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) = SYS_OPEN_BY_HANDLE_AT ++ ++// fileHandle is the argument to nameToHandleAt and openByHandleAt. We ++// originally tried to generate it via unix/linux/types.go with "type ++// fileHandle C.struct_file_handle" but that generated empty structs ++// for mips64 and mips64le. Instead, hard code it for now (it's the ++// same everywhere else) until the mips64 generator issue is fixed. ++type fileHandle struct { ++ Bytes uint32 ++ Type int32 ++} ++ ++// FileHandle represents the C struct file_handle used by ++// name_to_handle_at (see NameToHandleAt) and open_by_handle_at (see ++// OpenByHandleAt). ++type FileHandle struct { ++ *fileHandle ++} ++ ++// NewFileHandle constructs a FileHandle. ++func NewFileHandle(handleType int32, handle []byte) FileHandle { ++ const hdrSize = unsafe.Sizeof(fileHandle{}) ++ buf := make([]byte, hdrSize+uintptr(len(handle))) ++ copy(buf[hdrSize:], handle) ++ fh := (*fileHandle)(unsafe.Pointer(&buf[0])) ++ fh.Type = handleType ++ fh.Bytes = uint32(len(handle)) ++ return FileHandle{fh} ++} ++ ++func (fh *FileHandle) Size() int { return int(fh.fileHandle.Bytes) } ++func (fh *FileHandle) Type() int32 { return fh.fileHandle.Type } ++func (fh *FileHandle) Bytes() []byte { ++ n := fh.Size() ++ if n == 0 { ++ return nil ++ } ++ return (*[1 << 30]byte)(unsafe.Pointer(uintptr(unsafe.Pointer(&fh.fileHandle.Type)) + 4))[:n:n] ++} ++ ++// NameToHandleAt wraps the name_to_handle_at system call; it obtains ++// a handle for a path name. ++func NameToHandleAt(dirfd int, path string, flags int) (handle FileHandle, mountID int, err error) { ++ var mid _C_int ++ // Try first with a small buffer, assuming the handle will ++ // only be 32 bytes. ++ size := uint32(32 + unsafe.Sizeof(fileHandle{})) ++ didResize := false ++ for { ++ buf := make([]byte, size) ++ fh := (*fileHandle)(unsafe.Pointer(&buf[0])) ++ fh.Bytes = size - uint32(unsafe.Sizeof(fileHandle{})) ++ err = nameToHandleAt(dirfd, path, fh, &mid, flags) ++ if err == EOVERFLOW { ++ if didResize { ++ // We shouldn't need to resize more than once ++ return ++ } ++ didResize = true ++ size = fh.Bytes + uint32(unsafe.Sizeof(fileHandle{})) ++ continue ++ } ++ if err != nil { ++ return ++ } ++ return FileHandle{fh}, int(mid), nil ++ } ++} ++ ++// OpenByHandleAt wraps the open_by_handle_at system call; it opens a ++// file via a handle as previously returned by NameToHandleAt. ++func OpenByHandleAt(mountFD int, handle FileHandle, flags int) (fd int, err error) { ++ return openByHandleAt(mountFD, handle.fileHandle, flags) ++} ++ ++// Klogset wraps the sys_syslog system call; it sets console_loglevel to ++// the value specified by arg and passes a dummy pointer to bufp. ++func Klogset(typ int, arg int) (err error) { ++ var p unsafe.Pointer ++ _, _, errno := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(p), uintptr(arg)) ++ if errno != 0 { ++ return errnoErr(errno) ++ } ++ return nil ++} ++ ++/* ++ * Unimplemented ++ */ ++// AfsSyscall ++// Alarm ++// ArchPrctl ++// Brk ++// ClockNanosleep ++// ClockSettime ++// Clone ++// EpollCtlOld ++// EpollPwait ++// EpollWaitOld ++// Execve ++// Fork ++// Futex ++// GetKernelSyms ++// GetMempolicy ++// GetRobustList ++// GetThreadArea ++// Getitimer ++// Getpmsg ++// IoCancel ++// IoDestroy ++// IoGetevents ++// IoSetup ++// IoSubmit ++// IoprioGet ++// IoprioSet ++// KexecLoad ++// LookupDcookie ++// Mbind ++// MigratePages ++// Mincore ++// ModifyLdt ++// Mount ++// MovePages ++// MqGetsetattr ++// MqNotify ++// MqOpen ++// MqTimedreceive ++// MqTimedsend ++// MqUnlink ++// Mremap ++// Msgctl ++// Msgget ++// Msgrcv ++// Msgsnd ++// Nfsservctl ++// Personality ++// Pselect6 ++// Ptrace ++// Putpmsg ++// Quotactl ++// Readahead ++// Readv ++// RemapFilePages ++// RestartSyscall ++// RtSigaction ++// RtSigpending ++// RtSigprocmask ++// RtSigqueueinfo ++// RtSigreturn ++// RtSigsuspend ++// RtSigtimedwait ++// SchedGetPriorityMax ++// SchedGetPriorityMin ++// SchedGetparam ++// SchedGetscheduler ++// SchedRrGetInterval ++// SchedSetparam ++// SchedYield ++// Security ++// Semctl ++// Semget ++// Semop ++// Semtimedop ++// SetMempolicy ++// SetRobustList ++// SetThreadArea ++// SetTidAddress ++// Shmat ++// Shmctl ++// Shmdt ++// Shmget ++// Sigaltstack ++// Swapoff ++// Swapon ++// Sysfs ++// TimerCreate ++// TimerDelete ++// TimerGetoverrun ++// TimerGettime ++// TimerSettime ++// Tkill (obsolete) ++// Tuxcall ++// Umount2 ++// Uselib ++// Utimensat ++// Vfork ++// Vhangup ++// Vserver ++// Waitid ++// _Sysctl +diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go +new file mode 100644 +index 0000000..f48f3e1 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go +@@ -0,0 +1,229 @@ ++// Copyright 2020 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build loong64,linux ++ ++// copied from arm64, and modified by hand ++ ++package unix ++ ++import "unsafe" ++ ++func EpollCreate(size int) (fd int, err error) { ++ if size <= 0 { ++ return -1, EINVAL ++ } ++ return EpollCreate1(0) ++} ++ ++//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT ++//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 ++//sys Fchown(fd int, uid int, gid int) (err error) ++//sys Fstat(fd int, stat *Stat_t) (err error) ++//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) ++//sys Fstatfs(fd int, buf *Statfs_t) (err error) ++//sys Ftruncate(fd int, length int64) (err error) ++//sysnb Getegid() (egid int) ++//sysnb Geteuid() (euid int) ++//sysnb Getgid() (gid int) ++//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) ++//sysnb Getuid() (uid int) ++//sys Listen(s int, n int) (err error) ++//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 ++//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 ++//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) = SYS_RENAMEAT2 ++//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK ++ ++func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { ++ var ts *Timespec ++ if timeout != nil { ++ ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} ++ } ++ return Pselect(nfd, r, w, e, ts, nil) ++} ++ ++//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) ++//sys setfsgid(gid int) (prev int, err error) ++//sys setfsuid(uid int) (prev int, err error) ++//sysnb Setregid(rgid int, egid int) (err error) ++//sysnb Setresgid(rgid int, egid int, sgid int) (err error) ++//sysnb Setresuid(ruid int, euid int, suid int) (err error) ++//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) ++//sysnb Setreuid(ruid int, euid int) (err error) ++//sys Shutdown(fd int, how int) (err error) ++//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) ++ ++func Stat(path string, stat *Stat_t) (err error) { ++ return Fstatat(AT_FDCWD, path, stat, 0) ++} ++ ++func Lchown(path string, uid int, gid int) (err error) { ++ return Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW) ++} ++ ++func Lstat(path string, stat *Stat_t) (err error) { ++ return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW) ++} ++ ++//sys Statfs(path string, buf *Statfs_t) (err error) ++//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) ++//sys Truncate(path string, length int64) (err error) ++ ++func Ustat(dev int, ubuf *Ustat_t) (err error) { ++ return ENOSYS ++} ++ ++//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) ++//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) ++//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) ++//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) ++//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) ++//sysnb setgroups(n int, list *_Gid_t) (err error) ++//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) ++//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) ++//sysnb socket(domain int, typ int, proto int) (fd int, err error) ++//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) ++//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) ++//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) ++//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) ++//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) ++//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) ++//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) ++//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) ++ ++//sysnb Gettimeofday(tv *Timeval) (err error) ++ ++func setTimespec(sec, nsec int64) Timespec { ++ return Timespec{Sec: sec, Nsec: nsec} ++} ++ ++func setTimeval(sec, usec int64) Timeval { ++ return Timeval{Sec: sec, Usec: usec} ++} ++ ++func futimesat(dirfd int, path string, tv *[2]Timeval) (err error) { ++ if tv == nil { ++ return utimensat(dirfd, path, nil, 0) ++ } ++ ++ ts := []Timespec{ ++ NsecToTimespec(TimevalToNsec(tv[0])), ++ NsecToTimespec(TimevalToNsec(tv[1])), ++ } ++ return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) ++} ++ ++func Time(t *Time_t) (Time_t, error) { ++ var tv Timeval ++ err := Gettimeofday(&tv) ++ if err != nil { ++ return 0, err ++ } ++ if t != nil { ++ *t = Time_t(tv.Sec) ++ } ++ return Time_t(tv.Sec), nil ++} ++ ++func Utime(path string, buf *Utimbuf) error { ++ tv := []Timeval{ ++ {Sec: buf.Actime}, ++ {Sec: buf.Modtime}, ++ } ++ return Utimes(path, tv) ++} ++ ++func utimes(path string, tv *[2]Timeval) (err error) { ++ if tv == nil { ++ return utimensat(AT_FDCWD, path, nil, 0) ++ } ++ ++ ts := []Timespec{ ++ NsecToTimespec(TimevalToNsec(tv[0])), ++ NsecToTimespec(TimevalToNsec(tv[1])), ++ } ++ return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) ++} ++ ++func Pipe(p []int) (err error) { ++ if len(p) != 2 { ++ return EINVAL ++ } ++ var pp [2]_C_int ++ err = pipe2(&pp, 0) ++ p[0] = int(pp[0]) ++ p[1] = int(pp[1]) ++ return ++} ++ ++//sysnb pipe2(p *[2]_C_int, flags int) (err error) ++ ++func Pipe2(p []int, flags int) (err error) { ++ if len(p) != 2 { ++ return EINVAL ++ } ++ var pp [2]_C_int ++ err = pipe2(&pp, flags) ++ p[0] = int(pp[0]) ++ p[1] = int(pp[1]) ++ return ++} ++ ++func (r *PtraceRegs) PC() uint64 { return r.Epc } ++ ++func (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc } ++ ++func (iov *Iovec) SetLen(length int) { ++ iov.Len = uint64(length) ++} ++ ++func (msghdr *Msghdr) SetControllen(length int) { ++ msghdr.Controllen = uint64(length) ++} ++ ++func (msghdr *Msghdr) SetIovlen(length int) { ++ msghdr.Iovlen = uint64(length) ++} ++ ++func (cmsg *Cmsghdr) SetLen(length int) { ++ cmsg.Len = uint64(length) ++} ++ ++func InotifyInit() (fd int, err error) { ++ return InotifyInit1(0) ++} ++ ++// dup2 exists because func Dup3 in syscall_linux.go references ++// it in an unreachable path. dup2 isn't available on loong64. ++func dup2(oldfd int, newfd int) error ++ ++func Pause() error { ++ _, err := ppoll(nil, 0, nil, nil) ++ return err ++} ++ ++func Poll(fds []PollFd, timeout int) (n int, err error) { ++ var ts *Timespec ++ if timeout >= 0 { ++ ts = new(Timespec) ++ *ts = NsecToTimespec(int64(timeout) * 1e6) ++ } ++ if len(fds) == 0 { ++ return ppoll(nil, 0, ts, nil) ++ } ++ return ppoll(&fds[0], len(fds), ts, nil) ++} ++ ++//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) ++ ++func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { ++ cmdlineLen := len(cmdline) ++ if cmdlineLen > 0 { ++ // Account for the additional NULL byte added by ++ // BytePtrFromString in kexecFileLoad. The kexec_file_load ++ // syscall expects a NULL-terminated string. ++ cmdlineLen++ ++ } ++ return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) ++} +diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_test.go b/vendor/golang.org/x/sys/unix/syscall_linux_test.go +new file mode 100644 +index 0000000..09e61ee +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/syscall_linux_test.go +@@ -0,0 +1,718 @@ ++// Copyright 2016 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build linux ++ ++package unix_test ++ ++import ( ++ "bufio" ++ "bytes" ++ "errors" ++ "fmt" ++ "io/ioutil" ++ "os" ++ "runtime" ++ "runtime/debug" ++ "strconv" ++ "strings" ++ "testing" ++ "time" ++ "unsafe" ++ ++ "golang.org/x/sys/unix" ++) ++ ++func TestIoctlGetInt(t *testing.T) { ++ f, err := os.Open("/dev/random") ++ if err != nil { ++ t.Fatalf("failed to open device: %v", err) ++ } ++ defer f.Close() ++ ++ v, err := unix.IoctlGetInt(int(f.Fd()), unix.RNDGETENTCNT) ++ if err != nil { ++ t.Fatalf("failed to perform ioctl: %v", err) ++ } ++ ++ t.Logf("%d bits of entropy available", v) ++} ++ ++func TestIoctlRetInt(t *testing.T) { ++ f, err := os.Open("/proc/self/ns/mnt") ++ if err != nil { ++ t.Skipf("skipping test, %v", err) ++ } ++ defer f.Close() ++ ++ v, err := unix.IoctlRetInt(int(f.Fd()), unix.NS_GET_NSTYPE) ++ if err != nil { ++ if err == unix.ENOTTY { ++ t.Skipf("old kernel? (need Linux >= 4.11)") ++ } ++ t.Fatalf("failed to perform ioctl: %v", err) ++ } ++ if v != unix.CLONE_NEWNS { ++ t.Fatalf("unexpected return from ioctl; expected %v, got %v", v, unix.CLONE_NEWNS) ++ } ++} ++ ++func TestIoctlGetRTCTime(t *testing.T) { ++ f, err := os.Open("/dev/rtc0") ++ if err != nil { ++ t.Skipf("skipping test, %v", err) ++ } ++ defer f.Close() ++ ++ v, err := unix.IoctlGetRTCTime(int(f.Fd())) ++ if err != nil { ++ t.Fatalf("failed to perform ioctl: %v", err) ++ } ++ ++ t.Logf("RTC time: %04d-%02d-%02d %02d:%02d:%02d", v.Year+1900, v.Mon+1, v.Mday, v.Hour, v.Min, v.Sec) ++} ++ ++func TestPpoll(t *testing.T) { ++ if runtime.GOOS == "android" { ++ t.Skip("mkfifo syscall is not available on android, skipping test") ++ } ++ ++ defer chtmpdir(t)() ++ f, cleanup := mktmpfifo(t) ++ defer cleanup() ++ ++ const timeout = 100 * time.Millisecond ++ ++ ok := make(chan bool, 1) ++ go func() { ++ select { ++ case <-time.After(10 * timeout): ++ t.Errorf("Ppoll: failed to timeout after %d", 10*timeout) ++ case <-ok: ++ } ++ }() ++ ++ fds := []unix.PollFd{{Fd: int32(f.Fd()), Events: unix.POLLIN}} ++ timeoutTs := unix.NsecToTimespec(int64(timeout)) ++ n, err := unix.Ppoll(fds, &timeoutTs, nil) ++ ok <- true ++ if err != nil { ++ t.Errorf("Ppoll: unexpected error: %v", err) ++ return ++ } ++ if n != 0 { ++ t.Errorf("Ppoll: wrong number of events: got %v, expected %v", n, 0) ++ return ++ } ++} ++ ++func TestTime(t *testing.T) { ++ var ut unix.Time_t ++ ut2, err := unix.Time(&ut) ++ if err != nil { ++ t.Fatalf("Time: %v", err) ++ } ++ if ut != ut2 { ++ t.Errorf("Time: return value %v should be equal to argument %v", ut2, ut) ++ } ++ ++ var now time.Time ++ ++ for i := 0; i < 10; i++ { ++ ut, err = unix.Time(nil) ++ if err != nil { ++ t.Fatalf("Time: %v", err) ++ } ++ ++ now = time.Now() ++ diff := int64(ut) - now.Unix() ++ if -1 <= diff && diff <= 1 { ++ return ++ } ++ } ++ ++ t.Errorf("Time: return value %v should be nearly equal to time.Now().Unix() %v±1", ut, now.Unix()) ++} ++ ++func TestUtime(t *testing.T) { ++ defer chtmpdir(t)() ++ ++ touch(t, "file1") ++ ++ buf := &unix.Utimbuf{ ++ Modtime: 12345, ++ } ++ ++ err := unix.Utime("file1", buf) ++ if err != nil { ++ t.Fatalf("Utime: %v", err) ++ } ++ ++ fi, err := os.Stat("file1") ++ if err != nil { ++ t.Fatal(err) ++ } ++ ++ if fi.ModTime().Unix() != 12345 { ++ t.Errorf("Utime: failed to change modtime: expected %v, got %v", 12345, fi.ModTime().Unix()) ++ } ++} ++ ++func TestRlimitAs(t *testing.T) { ++ // disable GC during to avoid flaky test ++ defer debug.SetGCPercent(debug.SetGCPercent(-1)) ++ ++ var rlim unix.Rlimit ++ err := unix.Getrlimit(unix.RLIMIT_AS, &rlim) ++ if err != nil { ++ t.Fatalf("Getrlimit: %v", err) ++ } ++ var zero unix.Rlimit ++ if zero == rlim { ++ t.Fatalf("Getrlimit: got zero value %#v", rlim) ++ } ++ set := rlim ++ set.Cur = uint64(unix.Getpagesize()) ++ err = unix.Setrlimit(unix.RLIMIT_AS, &set) ++ if err != nil { ++ t.Fatalf("Setrlimit: set failed: %#v %v", set, err) ++ } ++ ++ // RLIMIT_AS was set to the page size, so mmap()'ing twice the page size ++ // should fail. See 'man 2 getrlimit'. ++ _, err = unix.Mmap(-1, 0, 2*unix.Getpagesize(), unix.PROT_NONE, unix.MAP_ANON|unix.MAP_PRIVATE) ++ if err == nil { ++ t.Fatal("Mmap: unexpectedly succeeded after setting RLIMIT_AS") ++ } ++ ++ err = unix.Setrlimit(unix.RLIMIT_AS, &rlim) ++ if err != nil { ++ t.Fatalf("Setrlimit: restore failed: %#v %v", rlim, err) ++ } ++ ++ b, err := unix.Mmap(-1, 0, 2*unix.Getpagesize(), unix.PROT_NONE, unix.MAP_ANON|unix.MAP_PRIVATE) ++ if err != nil { ++ t.Fatalf("Mmap: %v", err) ++ } ++ err = unix.Munmap(b) ++ if err != nil { ++ t.Fatalf("Munmap: %v", err) ++ } ++} ++ ++func TestPselect(t *testing.T) { ++ for { ++ n, err := unix.Pselect(0, nil, nil, nil, &unix.Timespec{Sec: 0, Nsec: 0}, nil) ++ if err == unix.EINTR { ++ t.Logf("Pselect interrupted") ++ continue ++ } else if err != nil { ++ t.Fatalf("Pselect: %v", err) ++ } ++ if n != 0 { ++ t.Fatalf("Pselect: got %v ready file descriptors, expected 0", n) ++ } ++ break ++ } ++ ++ dur := 2500 * time.Microsecond ++ ts := unix.NsecToTimespec(int64(dur)) ++ var took time.Duration ++ for { ++ start := time.Now() ++ n, err := unix.Pselect(0, nil, nil, nil, &ts, nil) ++ took = time.Since(start) ++ if err == unix.EINTR { ++ t.Logf("Pselect interrupted after %v", took) ++ continue ++ } else if err != nil { ++ t.Fatalf("Pselect: %v", err) ++ } ++ if n != 0 { ++ t.Fatalf("Pselect: got %v ready file descriptors, expected 0", n) ++ } ++ break ++ } ++ ++ if took < dur { ++ t.Errorf("Pselect: timeout should have been at least %v, got %v", dur, took) ++ } ++} ++ ++func TestSchedSetaffinity(t *testing.T) { ++ var newMask unix.CPUSet ++ newMask.Zero() ++ if newMask.Count() != 0 { ++ t.Errorf("CpuZero: didn't zero CPU set: %v", newMask) ++ } ++ cpu := 1 ++ newMask.Set(cpu) ++ if newMask.Count() != 1 || !newMask.IsSet(cpu) { ++ t.Errorf("CpuSet: didn't set CPU %d in set: %v", cpu, newMask) ++ } ++ cpu = 5 ++ newMask.Set(cpu) ++ if newMask.Count() != 2 || !newMask.IsSet(cpu) { ++ t.Errorf("CpuSet: didn't set CPU %d in set: %v", cpu, newMask) ++ } ++ newMask.Clear(cpu) ++ if newMask.Count() != 1 || newMask.IsSet(cpu) { ++ t.Errorf("CpuClr: didn't clear CPU %d in set: %v", cpu, newMask) ++ } ++ ++ runtime.LockOSThread() ++ defer runtime.UnlockOSThread() ++ ++ var oldMask unix.CPUSet ++ err := unix.SchedGetaffinity(0, &oldMask) ++ if err != nil { ++ t.Fatalf("SchedGetaffinity: %v", err) ++ } ++ ++ if runtime.NumCPU() < 2 { ++ t.Skip("skipping setaffinity tests on single CPU system") ++ } ++ if runtime.GOOS == "android" { ++ t.Skip("skipping setaffinity tests on android") ++ } ++ ++ // On a system like ppc64x where some cores can be disabled using ppc64_cpu, ++ // setaffinity should only be called with enabled cores. The valid cores ++ // are found from the oldMask, but if none are found then the setaffinity ++ // tests are skipped. Issue #27875. ++ cpu = 1 ++ if !oldMask.IsSet(cpu) { ++ newMask.Zero() ++ for i := 0; i < len(oldMask); i++ { ++ if oldMask.IsSet(i) { ++ newMask.Set(i) ++ break ++ } ++ } ++ if newMask.Count() == 0 { ++ t.Skip("skipping setaffinity tests if CPU not available") ++ } ++ } ++ ++ err = unix.SchedSetaffinity(0, &newMask) ++ if err != nil { ++ t.Fatalf("SchedSetaffinity: %v", err) ++ } ++ ++ var gotMask unix.CPUSet ++ err = unix.SchedGetaffinity(0, &gotMask) ++ if err != nil { ++ t.Fatalf("SchedGetaffinity: %v", err) ++ } ++ ++ if gotMask != newMask { ++ t.Errorf("SchedSetaffinity: returned affinity mask does not match set affinity mask") ++ } ++ ++ // Restore old mask so it doesn't affect successive tests ++ err = unix.SchedSetaffinity(0, &oldMask) ++ if err != nil { ++ t.Fatalf("SchedSetaffinity: %v", err) ++ } ++} ++ ++func TestStatx(t *testing.T) { ++ var stx unix.Statx_t ++ err := unix.Statx(unix.AT_FDCWD, ".", 0, 0, &stx) ++ if err == unix.ENOSYS || err == unix.EPERM { ++ t.Skip("statx syscall is not available, skipping test") ++ } else if err != nil { ++ t.Fatalf("Statx: %v", err) ++ } ++ ++ defer chtmpdir(t)() ++ touch(t, "file1") ++ ++ var st unix.Stat_t ++ err = unix.Stat("file1", &st) ++ if err != nil { ++ t.Fatalf("Stat: %v", err) ++ } ++ ++ flags := unix.AT_STATX_SYNC_AS_STAT ++ err = unix.Statx(unix.AT_FDCWD, "file1", flags, unix.STATX_ALL, &stx) ++ if err != nil { ++ t.Fatalf("Statx: %v", err) ++ } ++ ++ if uint32(stx.Mode) != st.Mode { ++ t.Errorf("Statx: returned stat mode does not match Stat") ++ } ++ ++ ctime := unix.StatxTimestamp{Sec: int64(st.Ctim.Sec), Nsec: uint32(st.Ctim.Nsec)} ++ mtime := unix.StatxTimestamp{Sec: int64(st.Mtim.Sec), Nsec: uint32(st.Mtim.Nsec)} ++ ++ if stx.Ctime != ctime { ++ t.Errorf("Statx: returned stat ctime does not match Stat") ++ } ++ if stx.Mtime != mtime { ++ t.Errorf("Statx: returned stat mtime does not match Stat") ++ } ++ ++ err = os.Symlink("file1", "symlink1") ++ if err != nil { ++ t.Fatal(err) ++ } ++ ++ err = unix.Lstat("symlink1", &st) ++ if err != nil { ++ t.Fatalf("Lstat: %v", err) ++ } ++ ++ err = unix.Statx(unix.AT_FDCWD, "symlink1", flags, unix.STATX_BASIC_STATS, &stx) ++ if err != nil { ++ t.Fatalf("Statx: %v", err) ++ } ++ ++ // follow symlink, expect a regulat file ++ if stx.Mode&unix.S_IFREG == 0 { ++ t.Errorf("Statx: didn't follow symlink") ++ } ++ ++ err = unix.Statx(unix.AT_FDCWD, "symlink1", flags|unix.AT_SYMLINK_NOFOLLOW, unix.STATX_ALL, &stx) ++ if err != nil { ++ t.Fatalf("Statx: %v", err) ++ } ++ ++ // follow symlink, expect a symlink ++ if stx.Mode&unix.S_IFLNK == 0 { ++ t.Errorf("Statx: unexpectedly followed symlink") ++ } ++ if uint32(stx.Mode) != st.Mode { ++ t.Errorf("Statx: returned stat mode does not match Lstat") ++ } ++ ++ ctime = unix.StatxTimestamp{Sec: int64(st.Ctim.Sec), Nsec: uint32(st.Ctim.Nsec)} ++ mtime = unix.StatxTimestamp{Sec: int64(st.Mtim.Sec), Nsec: uint32(st.Mtim.Nsec)} ++ ++ if stx.Ctime != ctime { ++ t.Errorf("Statx: returned stat ctime does not match Lstat") ++ } ++ if stx.Mtime != mtime { ++ t.Errorf("Statx: returned stat mtime does not match Lstat") ++ } ++} ++ ++// stringsFromByteSlice converts a sequence of attributes to a []string. ++// On Linux, each entry is a NULL-terminated string. ++func stringsFromByteSlice(buf []byte) []string { ++ var result []string ++ off := 0 ++ for i, b := range buf { ++ if b == 0 { ++ result = append(result, string(buf[off:i])) ++ off = i + 1 ++ } ++ } ++ return result ++} ++ ++func TestFaccessat(t *testing.T) { ++ defer chtmpdir(t)() ++ touch(t, "file1") ++ ++ err := unix.Faccessat(unix.AT_FDCWD, "file1", unix.R_OK, 0) ++ if err != nil { ++ t.Errorf("Faccessat: unexpected error: %v", err) ++ } ++ ++ err = unix.Faccessat(unix.AT_FDCWD, "file1", unix.R_OK, 2) ++ if err != unix.EINVAL { ++ t.Errorf("Faccessat: unexpected error: %v, want EINVAL", err) ++ } ++ ++ err = unix.Faccessat(unix.AT_FDCWD, "file1", unix.R_OK, unix.AT_EACCESS) ++ if err != nil { ++ t.Errorf("Faccessat: unexpected error: %v", err) ++ } ++ ++ err = os.Symlink("file1", "symlink1") ++ if err != nil { ++ t.Fatal(err) ++ } ++ ++ err = unix.Faccessat(unix.AT_FDCWD, "symlink1", unix.R_OK, unix.AT_SYMLINK_NOFOLLOW) ++ if err != nil { ++ t.Errorf("Faccessat SYMLINK_NOFOLLOW: unexpected error %v", err) ++ } ++ ++ // We can't really test AT_SYMLINK_NOFOLLOW, because there ++ // doesn't seem to be any way to change the mode of a symlink. ++ // We don't test AT_EACCESS because such tests are only ++ // meaningful if run as root. ++ ++ err = unix.Fchmodat(unix.AT_FDCWD, "file1", 0, 0) ++ if err != nil { ++ t.Errorf("Fchmodat: unexpected error %v", err) ++ } ++ ++ err = unix.Faccessat(unix.AT_FDCWD, "file1", unix.F_OK, unix.AT_SYMLINK_NOFOLLOW) ++ if err != nil { ++ t.Errorf("Faccessat: unexpected error: %v", err) ++ } ++ ++ err = unix.Faccessat(unix.AT_FDCWD, "file1", unix.R_OK, unix.AT_SYMLINK_NOFOLLOW) ++ if err != unix.EACCES { ++ if unix.Getuid() != 0 { ++ t.Errorf("Faccessat: unexpected error: %v, want EACCES", err) ++ } ++ } ++} ++ ++func TestSyncFileRange(t *testing.T) { ++ file, err := ioutil.TempFile("", "TestSyncFileRange") ++ if err != nil { ++ t.Fatal(err) ++ } ++ defer os.Remove(file.Name()) ++ defer file.Close() ++ ++ err = unix.SyncFileRange(int(file.Fd()), 0, 0, 0) ++ if err == unix.ENOSYS || err == unix.EPERM { ++ t.Skip("sync_file_range syscall is not available, skipping test") ++ } else if err != nil { ++ t.Fatalf("SyncFileRange: %v", err) ++ } ++ ++ // invalid flags ++ flags := 0xf00 ++ err = unix.SyncFileRange(int(file.Fd()), 0, 0, flags) ++ if err != unix.EINVAL { ++ t.Fatalf("SyncFileRange: unexpected error: %v, want EINVAL", err) ++ } ++} ++ ++func TestClockNanosleep(t *testing.T) { ++ delay := 50 * time.Millisecond ++ ++ // Relative timespec. ++ start := time.Now() ++ rel := unix.NsecToTimespec(delay.Nanoseconds()) ++ remain := unix.Timespec{} ++ for { ++ err := unix.ClockNanosleep(unix.CLOCK_MONOTONIC, 0, &rel, &remain) ++ if err == unix.ENOSYS || err == unix.EPERM { ++ t.Skip("clock_nanosleep syscall is not available, skipping test") ++ } else if err == unix.EINTR { ++ t.Logf("ClockNanosleep interrupted after %v", time.Since(start)) ++ rel = remain ++ continue ++ } else if err != nil { ++ t.Errorf("ClockNanosleep(CLOCK_MONOTONIC, 0, %#v, nil) = %v", &rel, err) ++ } else if slept := time.Since(start); slept < delay { ++ t.Errorf("ClockNanosleep(CLOCK_MONOTONIC, 0, %#v, nil) slept only %v", &rel, slept) ++ } ++ break ++ } ++ ++ // Absolute timespec. ++ for { ++ start = time.Now() ++ until := start.Add(delay) ++ abs := unix.NsecToTimespec(until.UnixNano()) ++ err := unix.ClockNanosleep(unix.CLOCK_REALTIME, unix.TIMER_ABSTIME, &abs, nil) ++ if err == unix.EINTR { ++ t.Logf("ClockNanosleep interrupted after %v", time.Since(start)) ++ continue ++ } else if err != nil { ++ t.Errorf("ClockNanosleep(CLOCK_REALTIME, TIMER_ABSTIME, %#v (=%v), nil) = %v", &abs, until, err) ++ } else if slept := time.Since(start); slept < delay { ++ t.Errorf("ClockNanosleep(CLOCK_REALTIME, TIMER_ABSTIME, %#v (=%v), nil) slept only %v", &abs, until, slept) ++ } ++ break ++ } ++ ++ // Invalid clock. clock_nanosleep(2) says EINVAL, but it’s actually EOPNOTSUPP. ++ err := unix.ClockNanosleep(unix.CLOCK_THREAD_CPUTIME_ID, 0, &rel, nil) ++ if err != unix.EINVAL && err != unix.EOPNOTSUPP { ++ t.Errorf("ClockNanosleep(CLOCK_THREAD_CPUTIME_ID, 0, %#v, nil) = %v, want EINVAL or EOPNOTSUPP", &rel, err) ++ } ++} ++ ++func TestOpenByHandleAt(t *testing.T) { ++ // TODO: Remove this line after the kernel issue was fixed ++ t.Skip("skip TestOpenByHandleAt may be caused by kernel") ++ skipIfNotSupported := func(t *testing.T, name string, err error) { ++ if err == unix.EPERM { ++ t.Skipf("skipping %s test without CAP_DAC_READ_SEARCH", name) ++ } ++ if err == unix.ENOSYS { ++ t.Skipf("%s system call not available", name) ++ } ++ if err == unix.EOPNOTSUPP { ++ t.Skipf("%s not supported on this filesystem", name) ++ } ++ } ++ ++ h, mountID, err := unix.NameToHandleAt(unix.AT_FDCWD, "syscall_linux_test.go", 0) ++ if err != nil { ++ skipIfNotSupported(t, "name_to_handle_at", err) ++ t.Fatalf("NameToHandleAt: %v", err) ++ } ++ t.Logf("mountID: %v, handle: size=%d, type=%d, bytes=%q", mountID, ++ h.Size(), h.Type(), h.Bytes()) ++ mount, err := openMountByID(mountID) ++ if err != nil { ++ t.Fatalf("openMountByID: %v", err) ++ } ++ defer mount.Close() ++ ++ for _, clone := range []bool{false, true} { ++ t.Run("clone="+strconv.FormatBool(clone), func(t *testing.T) { ++ if clone { ++ h = unix.NewFileHandle(h.Type(), h.Bytes()) ++ } ++ fd, err := unix.OpenByHandleAt(int(mount.Fd()), h, unix.O_RDONLY) ++ skipIfNotSupported(t, "open_by_handle_at", err) ++ if err != nil { ++ t.Fatalf("OpenByHandleAt: %v", err) ++ } ++ defer unix.Close(fd) ++ ++ t.Logf("opened fd %v", fd) ++ f := os.NewFile(uintptr(fd), "") ++ slurp, err := ioutil.ReadAll(f) ++ if err != nil { ++ t.Fatal(err) ++ } ++ const substr = "Some substring for a test." ++ if !strings.Contains(string(slurp), substr) { ++ t.Errorf("didn't find substring %q in opened file; read %d bytes", substr, len(slurp)) ++ } ++ }) ++ } ++} ++ ++func openMountByID(mountID int) (f *os.File, err error) { ++ mi, err := os.Open("/proc/self/mountinfo") ++ if err != nil { ++ return nil, err ++ } ++ defer mi.Close() ++ bs := bufio.NewScanner(mi) ++ wantPrefix := []byte(fmt.Sprintf("%v ", mountID)) ++ for bs.Scan() { ++ if !bytes.HasPrefix(bs.Bytes(), wantPrefix) { ++ continue ++ } ++ fields := strings.Fields(bs.Text()) ++ dev := fields[4] ++ return os.Open(dev) ++ } ++ if err := bs.Err(); err != nil { ++ return nil, err ++ } ++ return nil, errors.New("mountID not found") ++} ++ ++func TestEpoll(t *testing.T) { ++ efd, err := unix.EpollCreate1(unix.EPOLL_CLOEXEC) ++ if err != nil { ++ t.Fatalf("EpollCreate1: %v", err) ++ } ++ defer unix.Close(efd) ++ ++ r, w, err := os.Pipe() ++ if err != nil { ++ t.Fatal(err) ++ } ++ defer r.Close() ++ defer w.Close() ++ ++ fd := int(r.Fd()) ++ ev := unix.EpollEvent{Events: unix.EPOLLIN, Fd: int32(fd)} ++ ++ err = unix.EpollCtl(efd, unix.EPOLL_CTL_ADD, fd, &ev) ++ if err != nil { ++ t.Fatalf("EpollCtl: %v", err) ++ } ++ ++ if _, err := w.Write([]byte("HELLO GOPHER")); err != nil { ++ t.Fatal(err) ++ } ++ ++ events := make([]unix.EpollEvent, 128) ++ n, err := unix.EpollWait(efd, events, 1) ++ if err != nil { ++ t.Fatalf("EpollWait: %v", err) ++ } ++ ++ if n != 1 { ++ t.Errorf("EpollWait: wrong number of events: got %v, expected 1", n) ++ } ++ ++ got := int(events[0].Fd) ++ if got != fd { ++ t.Errorf("EpollWait: wrong Fd in event: got %v, expected %v", got, fd) ++ } ++} ++ ++func TestPrctlRetInt(t *testing.T) { ++ err := unix.Prctl(unix.PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) ++ if err != nil { ++ t.Skipf("Prctl: %v, skipping test", err) ++ } ++ v, err := unix.PrctlRetInt(unix.PR_GET_NO_NEW_PRIVS, 0, 0, 0, 0) ++ if err != nil { ++ t.Fatalf("failed to perform prctl: %v", err) ++ } ++ if v != 1 { ++ t.Fatalf("unexpected return from prctl; got %v, expected %v", v, 1) ++ } ++} ++ ++func TestTimerfd(t *testing.T) { ++ var now unix.Timespec ++ if err := unix.ClockGettime(unix.CLOCK_REALTIME, &now); err != nil { ++ t.Fatalf("ClockGettime: %v", err) ++ } ++ ++ tfd, err := unix.TimerfdCreate(unix.CLOCK_REALTIME, 0) ++ if err == unix.ENOSYS { ++ t.Skip("timerfd_create system call not implemented") ++ } else if err != nil { ++ t.Fatalf("TimerfdCreate: %v", err) ++ } ++ defer unix.Close(tfd) ++ ++ var timeSpec unix.ItimerSpec ++ if err := unix.TimerfdGettime(tfd, &timeSpec); err != nil { ++ t.Fatalf("TimerfdGettime: %v", err) ++ } ++ ++ if timeSpec.Value.Nsec != 0 || timeSpec.Value.Sec != 0 { ++ t.Fatalf("TimerfdGettime: timer is already set, but shouldn't be") ++ } ++ ++ timeSpec = unix.ItimerSpec{ ++ Interval: unix.NsecToTimespec(int64(time.Millisecond)), ++ Value: now, ++ } ++ ++ if err := unix.TimerfdSettime(tfd, unix.TFD_TIMER_ABSTIME, &timeSpec, nil); err != nil { ++ t.Fatalf("TimerfdSettime: %v", err) ++ } ++ ++ const totalTicks = 10 ++ const bufferLength = 8 ++ ++ buffer := make([]byte, bufferLength) ++ ++ var count uint64 = 0 ++ for count < totalTicks { ++ n, err := unix.Read(tfd, buffer) ++ if err != nil { ++ t.Fatalf("Timerfd: %v", err) ++ } else if n != bufferLength { ++ t.Fatalf("Timerfd: got %d bytes from timerfd, expected %d bytes", n, bufferLength) ++ } ++ ++ count += *(*uint64)(unsafe.Pointer(&buffer)) ++ } ++} +diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_test.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_test.go +new file mode 100644 +index 0000000..2316d26 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/syscall_netbsd_test.go +@@ -0,0 +1,75 @@ ++// Copyright 2018 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++package unix_test ++ ++import ( ++ "bytes" ++ "os" ++ "testing" ++ ++ "golang.org/x/sys/unix" ++) ++ ++// stringsFromByteSlice converts a sequence of attributes to a []string. ++// On NetBSD, each entry consists of a single byte containing the length ++// of the attribute name, followed by the attribute name. ++// The name is _not_ NULL-terminated. ++func stringsFromByteSlice(buf []byte) []string { ++ var result []string ++ i := 0 ++ for i < len(buf) { ++ next := i + 1 + int(buf[i]) ++ result = append(result, string(buf[i+1:next])) ++ i = next ++ } ++ return result ++} ++ ++func TestIoctlPtmget(t *testing.T) { ++ fd, err := unix.Open("/dev/ptmx", unix.O_NOCTTY|unix.O_RDWR, 0666) ++ if err != nil { ++ t.Skip("failed to open /dev/ptmx, skipping test") ++ } ++ defer unix.Close(fd) ++ ++ ptm, err := unix.IoctlGetPtmget(fd, unix.TIOCPTSNAME) ++ if err != nil { ++ t.Fatalf("IoctlGetPtmget: %v\n", err) ++ } ++ ++ t.Logf("sfd = %v, ptsname = %v", ptm.Sfd, string(ptm.Sn[:bytes.IndexByte(ptm.Sn[:], 0)])) ++} ++ ++func TestStatvfs(t *testing.T) { ++ defer chtmpdir(t)() ++ touch(t, "file1") ++ ++ var statvfs1, statvfs2 unix.Statvfs_t ++ err := unix.Statvfs("file1", &statvfs1) ++ if err != nil { ++ t.Fatalf("Statvfs: %v", err) ++ } ++ ++ f, err := os.Open("file1") ++ if err != nil { ++ t.Fatal(err) ++ } ++ defer f.Close() ++ ++ err = unix.Fstatvfs(int(f.Fd()), &statvfs2) ++ if err != nil { ++ t.Fatalf("Fstatvfs: %v", err) ++ } ++ ++ if statvfs2.Fsid != statvfs1.Fsid { ++ t.Errorf("Fstatvfs: got fsid %v, expected %v", statvfs2.Fsid, statvfs1.Fsid) ++ } ++ if statvfs2.Owner != statvfs1.Owner { ++ t.Errorf("Fstatvfs: got owner %v, expected %v", statvfs2.Owner, statvfs1.Owner) ++ } ++ if statvfs2.Fstypename != statvfs1.Fstypename { ++ t.Errorf("Fstatvfs: got fstypename %s, expected %s", statvfs2.Fstypename, statvfs1.Fstypename) ++ } ++} +diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_test.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_test.go +new file mode 100644 +index 0000000..dabe4d5 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_test.go +@@ -0,0 +1,50 @@ ++// Copyright 2018 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++package unix_test ++ ++import ( ++ "testing" ++ "time" ++ ++ "golang.org/x/sys/unix" ++) ++ ++func TestPpoll(t *testing.T) { ++ defer chtmpdir(t)() ++ f, cleanup := mktmpfifo(t) ++ defer cleanup() ++ ++ const timeout = 100 * time.Millisecond ++ ++ ok := make(chan bool, 1) ++ go func() { ++ select { ++ case <-time.After(10 * timeout): ++ t.Errorf("Ppoll: failed to timeout after %d", 10*timeout) ++ case <-ok: ++ } ++ }() ++ ++ fds := []unix.PollFd{{Fd: int32(f.Fd()), Events: unix.POLLIN}} ++ timeoutTs := unix.NsecToTimespec(int64(timeout)) ++ n, err := unix.Ppoll(fds, &timeoutTs, nil) ++ ok <- true ++ if err != nil { ++ t.Errorf("Ppoll: unexpected error: %v", err) ++ return ++ } ++ if n != 0 { ++ t.Errorf("Ppoll: wrong number of events: got %v, expected %v", n, 0) ++ return ++ } ++} ++ ++func TestSysctlUvmexp(t *testing.T) { ++ uvm, err := unix.SysctlUvmexp("vm.uvmexp") ++ if err != nil { ++ t.Fatal(err) ++ } ++ t.Logf("free = %v", uvm.Free) ++} +diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris_test.go b/vendor/golang.org/x/sys/unix/syscall_solaris_test.go +new file mode 100644 +index 0000000..d3e7d2b +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/syscall_solaris_test.go +@@ -0,0 +1,34 @@ ++// Copyright 2017 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build solaris ++ ++package unix_test ++ ++import ( ++ "os/exec" ++ "testing" ++ ++ "golang.org/x/sys/unix" ++) ++ ++func TestStatvfs(t *testing.T) { ++ if err := unix.Statvfs("", nil); err == nil { ++ t.Fatal(`Statvfs("") expected failure`) ++ } ++ ++ statvfs := unix.Statvfs_t{} ++ if err := unix.Statvfs("/", &statvfs); err != nil { ++ t.Errorf(`Statvfs("/") failed: %v`, err) ++ } ++ ++ if t.Failed() { ++ mount, err := exec.Command("mount").CombinedOutput() ++ if err != nil { ++ t.Logf("mount: %v\n%s", err, mount) ++ } else { ++ t.Logf("mount: %s", mount) ++ } ++ } ++} +diff --git a/vendor/golang.org/x/sys/unix/syscall_test.go b/vendor/golang.org/x/sys/unix/syscall_test.go +new file mode 100644 +index 0000000..1538c72 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/syscall_test.go +@@ -0,0 +1,71 @@ ++// Copyright 2013 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris ++ ++package unix_test ++ ++import ( ++ "fmt" ++ "testing" ++ ++ "golang.org/x/sys/unix" ++) ++ ++func testSetGetenv(t *testing.T, key, value string) { ++ err := unix.Setenv(key, value) ++ if err != nil { ++ t.Fatalf("Setenv failed to set %q: %v", value, err) ++ } ++ newvalue, found := unix.Getenv(key) ++ if !found { ++ t.Fatalf("Getenv failed to find %v variable (want value %q)", key, value) ++ } ++ if newvalue != value { ++ t.Fatalf("Getenv(%v) = %q; want %q", key, newvalue, value) ++ } ++} ++ ++func TestEnv(t *testing.T) { ++ testSetGetenv(t, "TESTENV", "AVALUE") ++ // make sure TESTENV gets set to "", not deleted ++ testSetGetenv(t, "TESTENV", "") ++} ++ ++func TestItoa(t *testing.T) { ++ // Make most negative integer: 0x8000... ++ i := 1 ++ for i<<1 != 0 { ++ i <<= 1 ++ } ++ if i >= 0 { ++ t.Fatal("bad math") ++ } ++ s := unix.Itoa(i) ++ f := fmt.Sprint(i) ++ if s != f { ++ t.Fatalf("itoa(%d) = %s, want %s", i, s, f) ++ } ++} ++ ++func TestUname(t *testing.T) { ++ var utsname unix.Utsname ++ err := unix.Uname(&utsname) ++ if err != nil { ++ t.Fatalf("Uname: %v", err) ++ } ++ ++ t.Logf("OS: %s/%s %s", utsname.Sysname[:], utsname.Machine[:], utsname.Release[:]) ++} ++ ++// Test that this compiles. (Issue #31735) ++func TestStatFieldNames(t *testing.T) { ++ var st unix.Stat_t ++ var _ *unix.Timespec ++ _ = &st.Atim ++ _ = &st.Mtim ++ _ = &st.Ctim ++ _ = int64(st.Mtim.Sec) ++ _ = int64(st.Mtim.Nsec) ++} +diff --git a/vendor/golang.org/x/sys/unix/syscall_unix_test.go b/vendor/golang.org/x/sys/unix/syscall_unix_test.go +new file mode 100644 +index 0000000..0ecb519 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/syscall_unix_test.go +@@ -0,0 +1,884 @@ ++// Copyright 2013 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris ++ ++package unix_test ++ ++import ( ++ "flag" ++ "fmt" ++ "io/ioutil" ++ "net" ++ "os" ++ "os/exec" ++ "path/filepath" ++ "runtime" ++ "strconv" ++ "syscall" ++ "testing" ++ "time" ++ ++ "golang.org/x/sys/unix" ++) ++ ++// Tests that below functions, structures and constants are consistent ++// on all Unix-like systems. ++func _() { ++ // program scheduling priority functions and constants ++ var ( ++ _ func(int, int, int) error = unix.Setpriority ++ _ func(int, int) (int, error) = unix.Getpriority ++ ) ++ const ( ++ _ int = unix.PRIO_USER ++ _ int = unix.PRIO_PROCESS ++ _ int = unix.PRIO_PGRP ++ ) ++ ++ // termios constants ++ const ( ++ _ int = unix.TCIFLUSH ++ _ int = unix.TCIOFLUSH ++ _ int = unix.TCOFLUSH ++ ) ++ ++ // fcntl file locking structure and constants ++ var ( ++ _ = unix.Flock_t{ ++ Type: int16(0), ++ Whence: int16(0), ++ Start: int64(0), ++ Len: int64(0), ++ Pid: int32(0), ++ } ++ ) ++ const ( ++ _ = unix.F_GETLK ++ _ = unix.F_SETLK ++ _ = unix.F_SETLKW ++ ) ++} ++ ++func TestErrnoSignalName(t *testing.T) { ++ testErrors := []struct { ++ num syscall.Errno ++ name string ++ }{ ++ {syscall.EPERM, "EPERM"}, ++ {syscall.EINVAL, "EINVAL"}, ++ {syscall.ENOENT, "ENOENT"}, ++ } ++ ++ for _, te := range testErrors { ++ t.Run(fmt.Sprintf("%d/%s", te.num, te.name), func(t *testing.T) { ++ e := unix.ErrnoName(te.num) ++ if e != te.name { ++ t.Errorf("ErrnoName(%d) returned %s, want %s", te.num, e, te.name) ++ } ++ }) ++ } ++ ++ testSignals := []struct { ++ num syscall.Signal ++ name string ++ }{ ++ {syscall.SIGHUP, "SIGHUP"}, ++ {syscall.SIGPIPE, "SIGPIPE"}, ++ {syscall.SIGSEGV, "SIGSEGV"}, ++ } ++ ++ for _, ts := range testSignals { ++ t.Run(fmt.Sprintf("%d/%s", ts.num, ts.name), func(t *testing.T) { ++ s := unix.SignalName(ts.num) ++ if s != ts.name { ++ t.Errorf("SignalName(%d) returned %s, want %s", ts.num, s, ts.name) ++ } ++ }) ++ } ++} ++ ++func TestSignalNum(t *testing.T) { ++ testSignals := []struct { ++ name string ++ want syscall.Signal ++ }{ ++ {"SIGHUP", syscall.SIGHUP}, ++ {"SIGPIPE", syscall.SIGPIPE}, ++ {"SIGSEGV", syscall.SIGSEGV}, ++ {"NONEXISTS", 0}, ++ } ++ for _, ts := range testSignals { ++ t.Run(fmt.Sprintf("%s/%d", ts.name, ts.want), func(t *testing.T) { ++ got := unix.SignalNum(ts.name) ++ if got != ts.want { ++ t.Errorf("SignalNum(%s) returned %d, want %d", ts.name, got, ts.want) ++ } ++ }) ++ ++ } ++} ++ ++func TestFcntlInt(t *testing.T) { ++ t.Parallel() ++ file, err := ioutil.TempFile("", "TestFnctlInt") ++ if err != nil { ++ t.Fatal(err) ++ } ++ defer os.Remove(file.Name()) ++ defer file.Close() ++ f := file.Fd() ++ flags, err := unix.FcntlInt(f, unix.F_GETFD, 0) ++ if err != nil { ++ t.Fatal(err) ++ } ++ if flags&unix.FD_CLOEXEC == 0 { ++ t.Errorf("flags %#x do not include FD_CLOEXEC", flags) ++ } ++} ++ ++// TestFcntlFlock tests whether the file locking structure matches ++// the calling convention of each kernel. ++func TestFcntlFlock(t *testing.T) { ++ name := filepath.Join(os.TempDir(), "TestFcntlFlock") ++ fd, err := unix.Open(name, unix.O_CREAT|unix.O_RDWR|unix.O_CLOEXEC, 0) ++ if err != nil { ++ t.Fatalf("Open failed: %v", err) ++ } ++ defer unix.Unlink(name) ++ defer unix.Close(fd) ++ flock := unix.Flock_t{ ++ Type: unix.F_RDLCK, ++ Start: 0, Len: 0, Whence: 1, ++ } ++ if err := unix.FcntlFlock(uintptr(fd), unix.F_GETLK, &flock); err != nil { ++ t.Fatalf("FcntlFlock failed: %v", err) ++ } ++} ++ ++// TestPassFD tests passing a file descriptor over a Unix socket. ++// ++// This test involved both a parent and child process. The parent ++// process is invoked as a normal test, with "go test", which then ++// runs the child process by running the current test binary with args ++// "-test.run=^TestPassFD$" and an environment variable used to signal ++// that the test should become the child process instead. ++func TestPassFD(t *testing.T) { ++ if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") { ++ t.Skip("cannot exec subprocess on iOS, skipping test") ++ } ++ ++ if os.Getenv("GO_WANT_HELPER_PROCESS") == "1" { ++ passFDChild() ++ return ++ } ++ ++ if runtime.GOOS == "aix" { ++ // Unix network isn't properly working on AIX ++ // 7.2 with Technical Level < 2 ++ out, err := exec.Command("oslevel", "-s").Output() ++ if err != nil { ++ t.Skipf("skipping on AIX because oslevel -s failed: %v", err) ++ } ++ ++ if len(out) < len("7200-XX-ZZ-YYMM") { // AIX 7.2, Tech Level XX, Service Pack ZZ, date YYMM ++ t.Skip("skipping on AIX because oslevel -s hasn't the right length") ++ } ++ aixVer := string(out[:4]) ++ tl, err := strconv.Atoi(string(out[5:7])) ++ if err != nil { ++ t.Skipf("skipping on AIX because oslevel -s output cannot be parsed: %v", err) ++ } ++ if aixVer < "7200" || (aixVer == "7200" && tl < 2) { ++ t.Skip("skipped on AIX versions previous to 7.2 TL 2") ++ } ++ } ++ ++ tempDir, err := ioutil.TempDir("", "TestPassFD") ++ if err != nil { ++ t.Fatal(err) ++ } ++ defer os.RemoveAll(tempDir) ++ ++ fds, err := unix.Socketpair(unix.AF_LOCAL, unix.SOCK_STREAM, 0) ++ if err != nil { ++ t.Fatalf("Socketpair: %v", err) ++ } ++ defer unix.Close(fds[0]) ++ defer unix.Close(fds[1]) ++ writeFile := os.NewFile(uintptr(fds[0]), "child-writes") ++ readFile := os.NewFile(uintptr(fds[1]), "parent-reads") ++ defer writeFile.Close() ++ defer readFile.Close() ++ ++ cmd := exec.Command(os.Args[0], "-test.run=^TestPassFD$", "--", tempDir) ++ cmd.Env = []string{"GO_WANT_HELPER_PROCESS=1"} ++ if lp := os.Getenv("LD_LIBRARY_PATH"); lp != "" { ++ cmd.Env = append(cmd.Env, "LD_LIBRARY_PATH="+lp) ++ } ++ cmd.ExtraFiles = []*os.File{writeFile} ++ ++ out, err := cmd.CombinedOutput() ++ if len(out) > 0 || err != nil { ++ t.Fatalf("child process: %q, %v", out, err) ++ } ++ ++ c, err := net.FileConn(readFile) ++ if err != nil { ++ t.Fatalf("FileConn: %v", err) ++ } ++ defer c.Close() ++ ++ uc, ok := c.(*net.UnixConn) ++ if !ok { ++ t.Fatalf("unexpected FileConn type; expected UnixConn, got %T", c) ++ } ++ ++ buf := make([]byte, 32) // expect 1 byte ++ oob := make([]byte, 32) // expect 24 bytes ++ closeUnix := time.AfterFunc(5*time.Second, func() { ++ t.Logf("timeout reading from unix socket") ++ uc.Close() ++ }) ++ _, oobn, _, _, err := uc.ReadMsgUnix(buf, oob) ++ if err != nil { ++ t.Fatalf("ReadMsgUnix: %v", err) ++ } ++ closeUnix.Stop() ++ ++ scms, err := unix.ParseSocketControlMessage(oob[:oobn]) ++ if err != nil { ++ t.Fatalf("ParseSocketControlMessage: %v", err) ++ } ++ if len(scms) != 1 { ++ t.Fatalf("expected 1 SocketControlMessage; got scms = %#v", scms) ++ } ++ scm := scms[0] ++ gotFds, err := unix.ParseUnixRights(&scm) ++ if err != nil { ++ t.Fatalf("unix.ParseUnixRights: %v", err) ++ } ++ if len(gotFds) != 1 { ++ t.Fatalf("wanted 1 fd; got %#v", gotFds) ++ } ++ ++ f := os.NewFile(uintptr(gotFds[0]), "fd-from-child") ++ defer f.Close() ++ ++ got, err := ioutil.ReadAll(f) ++ want := "Hello from child process!\n" ++ if string(got) != want { ++ t.Errorf("child process ReadAll: %q, %v; want %q", got, err, want) ++ } ++} ++ ++// passFDChild is the child process used by TestPassFD. ++func passFDChild() { ++ defer os.Exit(0) ++ ++ // Look for our fd. It should be fd 3, but we work around an fd leak ++ // bug here (http://golang.org/issue/2603) to let it be elsewhere. ++ var uc *net.UnixConn ++ for fd := uintptr(3); fd <= 10; fd++ { ++ f := os.NewFile(fd, "unix-conn") ++ var ok bool ++ netc, _ := net.FileConn(f) ++ uc, ok = netc.(*net.UnixConn) ++ if ok { ++ break ++ } ++ } ++ if uc == nil { ++ fmt.Println("failed to find unix fd") ++ return ++ } ++ ++ // Make a file f to send to our parent process on uc. ++ // We make it in tempDir, which our parent will clean up. ++ flag.Parse() ++ tempDir := flag.Arg(0) ++ f, err := ioutil.TempFile(tempDir, "") ++ if err != nil { ++ fmt.Printf("TempFile: %v", err) ++ return ++ } ++ ++ f.Write([]byte("Hello from child process!\n")) ++ f.Seek(0, 0) ++ ++ rights := unix.UnixRights(int(f.Fd())) ++ dummyByte := []byte("x") ++ n, oobn, err := uc.WriteMsgUnix(dummyByte, rights, nil) ++ if err != nil { ++ fmt.Printf("WriteMsgUnix: %v", err) ++ return ++ } ++ if n != 1 || oobn != len(rights) { ++ fmt.Printf("WriteMsgUnix = %d, %d; want 1, %d", n, oobn, len(rights)) ++ return ++ } ++} ++ ++// TestUnixRightsRoundtrip tests that UnixRights, ParseSocketControlMessage, ++// and ParseUnixRights are able to successfully round-trip lists of file descriptors. ++func TestUnixRightsRoundtrip(t *testing.T) { ++ testCases := [...][][]int{ ++ {{42}}, ++ {{1, 2}}, ++ {{3, 4, 5}}, ++ {{}}, ++ {{1, 2}, {3, 4, 5}, {}, {7}}, ++ } ++ for _, testCase := range testCases { ++ b := []byte{} ++ var n int ++ for _, fds := range testCase { ++ // Last assignment to n wins ++ n = len(b) + unix.CmsgLen(4*len(fds)) ++ b = append(b, unix.UnixRights(fds...)...) ++ } ++ // Truncate b ++ b = b[:n] ++ ++ scms, err := unix.ParseSocketControlMessage(b) ++ if err != nil { ++ t.Fatalf("ParseSocketControlMessage: %v", err) ++ } ++ if len(scms) != len(testCase) { ++ t.Fatalf("expected %v SocketControlMessage; got scms = %#v", len(testCase), scms) ++ } ++ for i, scm := range scms { ++ gotFds, err := unix.ParseUnixRights(&scm) ++ if err != nil { ++ t.Fatalf("ParseUnixRights: %v", err) ++ } ++ wantFds := testCase[i] ++ if len(gotFds) != len(wantFds) { ++ t.Fatalf("expected %v fds, got %#v", len(wantFds), gotFds) ++ } ++ for j, fd := range gotFds { ++ if fd != wantFds[j] { ++ t.Fatalf("expected fd %v, got %v", wantFds[j], fd) ++ } ++ } ++ } ++ } ++} ++ ++func TestRlimit(t *testing.T) { ++ var rlimit, zero unix.Rlimit ++ err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlimit) ++ if err != nil { ++ t.Fatalf("Getrlimit: save failed: %v", err) ++ } ++ if zero == rlimit { ++ t.Fatalf("Getrlimit: save failed: got zero value %#v", rlimit) ++ } ++ set := rlimit ++ set.Cur = set.Max - 1 ++ if runtime.GOOS == "darwin" && set.Cur > 10240 { ++ // The max file limit is 10240, even though ++ // the max returned by Getrlimit is 1<<63-1. ++ // This is OPEN_MAX in sys/syslimits.h. ++ set.Cur = 10240 ++ } ++ err = unix.Setrlimit(unix.RLIMIT_NOFILE, &set) ++ if err != nil { ++ t.Fatalf("Setrlimit: set failed: %#v %v", set, err) ++ } ++ var get unix.Rlimit ++ err = unix.Getrlimit(unix.RLIMIT_NOFILE, &get) ++ if err != nil { ++ t.Fatalf("Getrlimit: get failed: %v", err) ++ } ++ set = rlimit ++ set.Cur = set.Max - 1 ++ if set != get { ++ // Seems like Darwin requires some privilege to ++ // increase the soft limit of rlimit sandbox, though ++ // Setrlimit never reports an error. ++ switch runtime.GOOS { ++ case "darwin": ++ default: ++ t.Fatalf("Rlimit: change failed: wanted %#v got %#v", set, get) ++ } ++ } ++ err = unix.Setrlimit(unix.RLIMIT_NOFILE, &rlimit) ++ if err != nil { ++ t.Fatalf("Setrlimit: restore failed: %#v %v", rlimit, err) ++ } ++} ++ ++func TestSeekFailure(t *testing.T) { ++ _, err := unix.Seek(-1, 0, 0) ++ if err == nil { ++ t.Fatalf("Seek(-1, 0, 0) did not fail") ++ } ++ str := err.Error() // used to crash on Linux ++ t.Logf("Seek: %v", str) ++ if str == "" { ++ t.Fatalf("Seek(-1, 0, 0) return error with empty message") ++ } ++} ++ ++func TestSetsockoptString(t *testing.T) { ++ // should not panic on empty string, see issue #31277 ++ err := unix.SetsockoptString(-1, 0, 0, "") ++ if err == nil { ++ t.Fatalf("SetsockoptString: did not fail") ++ } ++} ++ ++func TestDup(t *testing.T) { ++ file, err := ioutil.TempFile("", "TestDup") ++ if err != nil { ++ t.Fatalf("Tempfile failed: %v", err) ++ } ++ defer os.Remove(file.Name()) ++ defer file.Close() ++ f := int(file.Fd()) ++ ++ newFd, err := unix.Dup(f) ++ if err != nil { ++ t.Fatalf("Dup: %v", err) ++ } ++ ++ // Create and reserve a file descriptor. ++ // Dup2 automatically closes it before reusing it. ++ nullFile, err := os.Open("/dev/null") ++ if err != nil { ++ t.Fatal(err) ++ } ++ dupFd := int(file.Fd()) ++ err = unix.Dup2(newFd, dupFd) ++ if err != nil { ++ t.Fatalf("Dup2: %v", err) ++ } ++ // Keep the dummy file open long enough to not be closed in ++ // its finalizer. ++ runtime.KeepAlive(nullFile) ++ ++ b1 := []byte("Test123") ++ b2 := make([]byte, 7) ++ _, err = unix.Write(dupFd, b1) ++ if err != nil { ++ t.Fatalf("Write to dup2 fd failed: %v", err) ++ } ++ _, err = unix.Seek(f, 0, 0) ++ if err != nil { ++ t.Fatalf("Seek failed: %v", err) ++ } ++ _, err = unix.Read(f, b2) ++ if err != nil { ++ t.Fatalf("Read back failed: %v", err) ++ } ++ if string(b1) != string(b2) { ++ t.Errorf("Dup: stdout write not in file, expected %v, got %v", string(b1), string(b2)) ++ } ++} ++ ++func TestPoll(t *testing.T) { ++ if runtime.GOOS == "android" || ++ (runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64")) { ++ t.Skip("mkfifo syscall is not available on android and iOS, skipping test") ++ } ++ ++ defer chtmpdir(t)() ++ f, cleanup := mktmpfifo(t) ++ defer cleanup() ++ ++ const timeout = 100 ++ ++ ok := make(chan bool, 1) ++ go func() { ++ select { ++ case <-time.After(10 * timeout * time.Millisecond): ++ t.Errorf("Poll: failed to timeout after %d milliseconds", 10*timeout) ++ case <-ok: ++ } ++ }() ++ ++ fds := []unix.PollFd{{Fd: int32(f.Fd()), Events: unix.POLLIN}} ++ n, err := unix.Poll(fds, timeout) ++ ok <- true ++ if err != nil { ++ t.Errorf("Poll: unexpected error: %v", err) ++ return ++ } ++ if n != 0 { ++ t.Errorf("Poll: wrong number of events: got %v, expected %v", n, 0) ++ return ++ } ++} ++ ++func TestSelect(t *testing.T) { ++ for { ++ n, err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0}) ++ if err == unix.EINTR { ++ t.Logf("Select interrupted") ++ continue ++ } else if err != nil { ++ t.Fatalf("Select: %v", err) ++ } ++ if n != 0 { ++ t.Fatalf("Select: got %v ready file descriptors, expected 0", n) ++ } ++ break ++ } ++ ++ dur := 250 * time.Millisecond ++ tv := unix.NsecToTimeval(int64(dur)) ++ var took time.Duration ++ for { ++ start := time.Now() ++ n, err := unix.Select(0, nil, nil, nil, &tv) ++ took = time.Since(start) ++ if err == unix.EINTR { ++ t.Logf("Select interrupted after %v", took) ++ continue ++ } else if err != nil { ++ t.Fatalf("Select: %v", err) ++ } ++ if n != 0 { ++ t.Fatalf("Select: got %v ready file descriptors, expected 0", n) ++ } ++ break ++ } ++ ++ // On some BSDs the actual timeout might also be slightly less than the requested. ++ // Add an acceptable margin to avoid flaky tests. ++ if took < dur*2/3 { ++ t.Errorf("Select: got %v timeout, expected at least %v", took, dur) ++ } ++ ++ rr, ww, err := os.Pipe() ++ if err != nil { ++ t.Fatal(err) ++ } ++ defer rr.Close() ++ defer ww.Close() ++ ++ if _, err := ww.Write([]byte("HELLO GOPHER")); err != nil { ++ t.Fatal(err) ++ } ++ ++ rFdSet := &unix.FdSet{} ++ fd := int(rr.Fd()) ++ rFdSet.Set(fd) ++ ++ for { ++ n, err := unix.Select(fd+1, rFdSet, nil, nil, nil) ++ if err == unix.EINTR { ++ t.Log("Select interrupted") ++ continue ++ } else if err != nil { ++ t.Fatalf("Select: %v", err) ++ } ++ if n != 1 { ++ t.Fatalf("Select: got %v ready file descriptors, expected 1", n) ++ } ++ break ++ } ++} ++ ++func TestGetwd(t *testing.T) { ++ fd, err := os.Open(".") ++ if err != nil { ++ t.Fatalf("Open .: %s", err) ++ } ++ defer fd.Close() ++ // Directory list for test. Do not worry if any are symlinks or do not ++ // exist on some common unix desktop environments. That will be checked. ++ dirs := []string{"/", "/usr/bin", "/etc", "/var", "/opt"} ++ switch runtime.GOOS { ++ case "android": ++ dirs = []string{"/", "/system/bin"} ++ case "darwin": ++ switch runtime.GOARCH { ++ case "arm", "arm64": ++ d1, err := ioutil.TempDir("", "d1") ++ if err != nil { ++ t.Fatalf("TempDir: %v", err) ++ } ++ d2, err := ioutil.TempDir("", "d2") ++ if err != nil { ++ t.Fatalf("TempDir: %v", err) ++ } ++ dirs = []string{d1, d2} ++ } ++ } ++ oldwd := os.Getenv("PWD") ++ for _, d := range dirs { ++ // Check whether d exists, is a dir and that d's path does not contain a symlink ++ fi, err := os.Stat(d) ++ if err != nil || !fi.IsDir() { ++ t.Logf("Test dir %s stat error (%v) or not a directory, skipping", d, err) ++ continue ++ } ++ check, err := filepath.EvalSymlinks(d) ++ if err != nil || check != d { ++ t.Logf("Test dir %s (%s) is symlink or other error (%v), skipping", d, check, err) ++ continue ++ } ++ err = os.Chdir(d) ++ if err != nil { ++ t.Fatalf("Chdir: %v", err) ++ } ++ pwd, err := unix.Getwd() ++ if err != nil { ++ t.Fatalf("Getwd in %s: %s", d, err) ++ } ++ os.Setenv("PWD", oldwd) ++ err = fd.Chdir() ++ if err != nil { ++ // We changed the current directory and cannot go back. ++ // Don't let the tests continue; they'll scribble ++ // all over some other directory. ++ fmt.Fprintf(os.Stderr, "fchdir back to dot failed: %s\n", err) ++ os.Exit(1) ++ } ++ if pwd != d { ++ t.Fatalf("Getwd returned %q want %q", pwd, d) ++ } ++ } ++} ++ ++func TestFstatat(t *testing.T) { ++ defer chtmpdir(t)() ++ ++ touch(t, "file1") ++ ++ var st1 unix.Stat_t ++ err := unix.Stat("file1", &st1) ++ if err != nil { ++ t.Fatalf("Stat: %v", err) ++ } ++ ++ var st2 unix.Stat_t ++ err = unix.Fstatat(unix.AT_FDCWD, "file1", &st2, 0) ++ if err != nil { ++ t.Fatalf("Fstatat: %v", err) ++ } ++ ++ if st1 != st2 { ++ t.Errorf("Fstatat: returned stat does not match Stat") ++ } ++ ++ err = os.Symlink("file1", "symlink1") ++ if err != nil { ++ t.Fatal(err) ++ } ++ ++ err = unix.Lstat("symlink1", &st1) ++ if err != nil { ++ t.Fatalf("Lstat: %v", err) ++ } ++ ++ err = unix.Fstatat(unix.AT_FDCWD, "symlink1", &st2, unix.AT_SYMLINK_NOFOLLOW) ++ if err != nil { ++ t.Fatalf("Fstatat: %v", err) ++ } ++ ++ if st2.Dev != st1.Dev { ++ t.Errorf("Fstatat: got dev %v, expected %v", st2.Dev, st1.Dev) ++ } ++ if st2.Ino != st1.Ino { ++ t.Errorf("Fstatat: got ino %v, expected %v", st2.Ino, st1.Ino) ++ } ++ if st2.Mode != st1.Mode { ++ t.Errorf("Fstatat: got mode %v, expected %v", st2.Mode, st1.Mode) ++ } ++ if st2.Uid != st1.Uid { ++ t.Errorf("Fstatat: got uid %v, expected %v", st2.Uid, st1.Uid) ++ } ++ if st2.Gid != st1.Gid { ++ t.Errorf("Fstatat: got gid %v, expected %v", st2.Gid, st1.Gid) ++ } ++ if st2.Size != st1.Size { ++ t.Errorf("Fstatat: got size %v, expected %v", st2.Size, st1.Size) ++ } ++} ++ ++func TestFchmodat(t *testing.T) { ++ defer chtmpdir(t)() ++ ++ touch(t, "file1") ++ err := os.Symlink("file1", "symlink1") ++ if err != nil { ++ t.Fatal(err) ++ } ++ ++ mode := os.FileMode(0444) ++ err = unix.Fchmodat(unix.AT_FDCWD, "symlink1", uint32(mode), 0) ++ if err != nil { ++ t.Fatalf("Fchmodat: unexpected error: %v", err) ++ } ++ ++ fi, err := os.Stat("file1") ++ if err != nil { ++ t.Fatal(err) ++ } ++ ++ if fi.Mode() != mode { ++ t.Errorf("Fchmodat: failed to change file mode: expected %v, got %v", mode, fi.Mode()) ++ } ++ ++ mode = os.FileMode(0644) ++ didChmodSymlink := true ++ err = unix.Fchmodat(unix.AT_FDCWD, "symlink1", uint32(mode), unix.AT_SYMLINK_NOFOLLOW) ++ if err != nil { ++ if (runtime.GOOS == "android" || runtime.GOOS == "linux" || ++ runtime.GOOS == "solaris" || runtime.GOOS == "illumos") && err == unix.EOPNOTSUPP { ++ // Linux and Illumos don't support flags != 0 ++ didChmodSymlink = false ++ } else { ++ t.Fatalf("Fchmodat: unexpected error: %v", err) ++ } ++ } ++ ++ if !didChmodSymlink { ++ // Didn't change mode of the symlink. On Linux, the permissions ++ // of a symbolic link are always 0777 according to symlink(7) ++ mode = os.FileMode(0777) ++ } ++ ++ var st unix.Stat_t ++ err = unix.Lstat("symlink1", &st) ++ if err != nil { ++ t.Fatal(err) ++ } ++ ++ got := os.FileMode(st.Mode & 0777) ++ if got != mode { ++ t.Errorf("Fchmodat: failed to change symlink mode: expected %v, got %v", mode, got) ++ } ++} ++ ++func TestMkdev(t *testing.T) { ++ major := uint32(42) ++ minor := uint32(7) ++ dev := unix.Mkdev(major, minor) ++ ++ if unix.Major(dev) != major { ++ t.Errorf("Major(%#x) == %d, want %d", dev, unix.Major(dev), major) ++ } ++ if unix.Minor(dev) != minor { ++ t.Errorf("Minor(%#x) == %d, want %d", dev, unix.Minor(dev), minor) ++ } ++} ++ ++func TestRenameat(t *testing.T) { ++ defer chtmpdir(t)() ++ ++ from, to := "renamefrom", "renameto" ++ ++ touch(t, from) ++ ++ err := unix.Renameat(unix.AT_FDCWD, from, unix.AT_FDCWD, to) ++ if err != nil { ++ t.Fatalf("Renameat: unexpected error: %v", err) ++ } ++ ++ _, err = os.Stat(to) ++ if err != nil { ++ t.Error(err) ++ } ++ ++ _, err = os.Stat(from) ++ if err == nil { ++ t.Errorf("Renameat: stat of renamed file %q unexpectedly succeeded", from) ++ } ++} ++ ++func TestUtimesNanoAt(t *testing.T) { ++ defer chtmpdir(t)() ++ ++ symlink := "symlink1" ++ os.Remove(symlink) ++ err := os.Symlink("nonexisting", symlink) ++ if err != nil { ++ t.Fatal(err) ++ } ++ ++ // Some filesystems only support microsecond resolution. Account for ++ // that in Nsec. ++ ts := []unix.Timespec{ ++ {Sec: 1111, Nsec: 2000}, ++ {Sec: 3333, Nsec: 4000}, ++ } ++ err = unix.UtimesNanoAt(unix.AT_FDCWD, symlink, ts, unix.AT_SYMLINK_NOFOLLOW) ++ if err != nil { ++ t.Fatalf("UtimesNanoAt: %v", err) ++ } ++ ++ var st unix.Stat_t ++ err = unix.Lstat(symlink, &st) ++ if err != nil { ++ t.Fatalf("Lstat: %v", err) ++ } ++ ++ // Only check Mtim, Atim might not be supported by the underlying filesystem ++ expected := ts[1] ++ if st.Mtim.Nsec == 0 { ++ // Some filesystems only support 1-second time stamp resolution ++ // and will always set Nsec to 0. ++ expected.Nsec = 0 ++ } ++ if st.Mtim != expected { ++ t.Errorf("UtimesNanoAt: wrong mtime: got %v, expected %v", st.Mtim, expected) ++ } ++} ++ ++// mktmpfifo creates a temporary FIFO and provides a cleanup function. ++func mktmpfifo(t *testing.T) (*os.File, func()) { ++ err := unix.Mkfifo("fifo", 0666) ++ if err != nil { ++ t.Fatalf("mktmpfifo: failed to create FIFO: %v", err) ++ } ++ ++ f, err := os.OpenFile("fifo", os.O_RDWR, 0666) ++ if err != nil { ++ os.Remove("fifo") ++ t.Fatalf("mktmpfifo: failed to open FIFO: %v", err) ++ } ++ ++ return f, func() { ++ f.Close() ++ os.Remove("fifo") ++ } ++} ++ ++// utilities taken from os/os_test.go ++ ++func touch(t *testing.T, name string) { ++ f, err := os.Create(name) ++ if err != nil { ++ t.Fatal(err) ++ } ++ if err := f.Close(); err != nil { ++ t.Fatal(err) ++ } ++} ++ ++// chtmpdir changes the working directory to a new temporary directory and ++// provides a cleanup function. Used when PWD is read-only. ++func chtmpdir(t *testing.T) func() { ++ oldwd, err := os.Getwd() ++ if err != nil { ++ t.Fatalf("chtmpdir: %v", err) ++ } ++ d, err := ioutil.TempDir("", "test") ++ if err != nil { ++ t.Fatalf("chtmpdir: %v", err) ++ } ++ if err := os.Chdir(d); err != nil { ++ t.Fatalf("chtmpdir: %v", err) ++ } ++ return func() { ++ if err := os.Chdir(oldwd); err != nil { ++ t.Fatalf("chtmpdir: %v", err) ++ } ++ os.RemoveAll(d) ++ } ++} +diff --git a/vendor/golang.org/x/sys/unix/timestruct_test.go b/vendor/golang.org/x/sys/unix/timestruct_test.go +new file mode 100644 +index 0000000..1a72fdb +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/timestruct_test.go +@@ -0,0 +1,54 @@ ++// Copyright 2017 The Go Authors. All right reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris ++ ++package unix_test ++ ++import ( ++ "testing" ++ "time" ++ "unsafe" ++ ++ "golang.org/x/sys/unix" ++) ++ ++func TestTimeToTimespec(t *testing.T) { ++ timeTests := []struct { ++ time time.Time ++ valid bool ++ }{ ++ {time.Unix(0, 0), true}, ++ {time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC), true}, ++ {time.Date(2262, time.December, 31, 23, 0, 0, 0, time.UTC), false}, ++ {time.Unix(0x7FFFFFFF, 0), true}, ++ {time.Unix(0x80000000, 0), false}, ++ {time.Unix(0x7FFFFFFF, 1000000000), false}, ++ {time.Unix(0x7FFFFFFF, 999999999), true}, ++ {time.Unix(-0x80000000, 0), true}, ++ {time.Unix(-0x80000001, 0), false}, ++ {time.Date(2038, time.January, 19, 3, 14, 7, 0, time.UTC), true}, ++ {time.Date(2038, time.January, 19, 3, 14, 8, 0, time.UTC), false}, ++ {time.Date(1901, time.December, 13, 20, 45, 52, 0, time.UTC), true}, ++ {time.Date(1901, time.December, 13, 20, 45, 51, 0, time.UTC), false}, ++ } ++ ++ // Currently all targets have either int32 or int64 for Timespec.Sec. ++ // If there were a new target with unsigned or floating point type for ++ // it, this test must be adjusted. ++ have64BitTime := (unsafe.Sizeof(unix.Timespec{}.Sec) == 8) ++ for _, tt := range timeTests { ++ ts, err := unix.TimeToTimespec(tt.time) ++ tt.valid = tt.valid || have64BitTime ++ if tt.valid && err != nil { ++ t.Errorf("TimeToTimespec(%v): %v", tt.time, err) ++ } ++ if err == nil { ++ tstime := time.Unix(int64(ts.Sec), int64(ts.Nsec)) ++ if !tstime.Equal(tt.time) { ++ t.Errorf("TimeToTimespec(%v) is the time %v", tt.time, tstime) ++ } ++ } ++ } ++} +diff --git a/vendor/golang.org/x/sys/unix/types_aix.go b/vendor/golang.org/x/sys/unix/types_aix.go +new file mode 100644 +index 0000000..40d2bee +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/types_aix.go +@@ -0,0 +1,237 @@ ++// Copyright 2018 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build ignore ++// +build aix ++ ++/* ++Input to cgo -godefs. See also mkerrors.sh and mkall.sh ++*/ ++ ++// +godefs map struct_in_addr [4]byte /* in_addr */ ++// +godefs map struct_in6_addr [16]byte /* in6_addr */ ++ ++package unix ++ ++/* ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include ++#include ++#include ++#include ++ ++ ++#include ++#include ++ ++enum { ++ sizeofPtr = sizeof(void*), ++}; ++ ++union sockaddr_all { ++ struct sockaddr s1; // this one gets used for fields ++ struct sockaddr_in s2; // these pad it out ++ struct sockaddr_in6 s3; ++ struct sockaddr_un s4; ++ struct sockaddr_dl s5; ++}; ++ ++struct sockaddr_any { ++ struct sockaddr addr; ++ char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; ++}; ++ ++*/ ++import "C" ++ ++// Machine characteristics ++ ++const ( ++ SizeofPtr = C.sizeofPtr ++ SizeofShort = C.sizeof_short ++ SizeofInt = C.sizeof_int ++ SizeofLong = C.sizeof_long ++ SizeofLongLong = C.sizeof_longlong ++ PathMax = C.PATH_MAX ++) ++ ++// Basic types ++ ++type ( ++ _C_short C.short ++ _C_int C.int ++ _C_long C.long ++ _C_long_long C.longlong ++) ++ ++type off64 C.off64_t ++type off C.off_t ++type Mode_t C.mode_t ++ ++// Time ++ ++type Timespec C.struct_timespec ++ ++type Timeval C.struct_timeval ++ ++type Timeval32 C.struct_timeval32 ++ ++type Timex C.struct_timex ++ ++type Time_t C.time_t ++ ++type Tms C.struct_tms ++ ++type Utimbuf C.struct_utimbuf ++ ++type Timezone C.struct_timezone ++ ++// Processes ++ ++type Rusage C.struct_rusage ++ ++type Rlimit C.struct_rlimit64 ++ ++type Pid_t C.pid_t ++ ++type _Gid_t C.gid_t ++ ++type dev_t C.dev_t ++ ++// Files ++ ++type Stat_t C.struct_stat ++ ++type StatxTimestamp C.struct_statx_timestamp ++ ++type Statx_t C.struct_statx ++ ++type Dirent C.struct_dirent ++ ++// Sockets ++ ++type RawSockaddrInet4 C.struct_sockaddr_in ++ ++type RawSockaddrInet6 C.struct_sockaddr_in6 ++ ++type RawSockaddrUnix C.struct_sockaddr_un ++ ++type RawSockaddrDatalink C.struct_sockaddr_dl ++ ++type RawSockaddr C.struct_sockaddr ++ ++type RawSockaddrAny C.struct_sockaddr_any ++ ++type _Socklen C.socklen_t ++ ++type Cmsghdr C.struct_cmsghdr ++ ++type ICMPv6Filter C.struct_icmp6_filter ++ ++type Iovec C.struct_iovec ++ ++type IPMreq C.struct_ip_mreq ++ ++type IPv6Mreq C.struct_ipv6_mreq ++ ++type IPv6MTUInfo C.struct_ip6_mtuinfo ++ ++type Linger C.struct_linger ++ ++type Msghdr C.struct_msghdr ++ ++const ( ++ SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in ++ SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 ++ SizeofSockaddrAny = C.sizeof_struct_sockaddr_any ++ SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un ++ SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl ++ SizeofLinger = C.sizeof_struct_linger ++ SizeofIPMreq = C.sizeof_struct_ip_mreq ++ SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq ++ SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo ++ SizeofMsghdr = C.sizeof_struct_msghdr ++ SizeofCmsghdr = C.sizeof_struct_cmsghdr ++ SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter ++) ++ ++// Routing and interface messages ++ ++const ( ++ SizeofIfMsghdr = C.sizeof_struct_if_msghdr ++) ++ ++type IfMsgHdr C.struct_if_msghdr ++ ++// Misc ++ ++type FdSet C.fd_set ++ ++type Utsname C.struct_utsname ++ ++type Ustat_t C.struct_ustat ++ ++type Sigset_t C.sigset_t ++ ++const ( ++ AT_FDCWD = C.AT_FDCWD ++ AT_REMOVEDIR = C.AT_REMOVEDIR ++ AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW ++) ++ ++// Terminal handling ++ ++type Termios C.struct_termios ++ ++type Termio C.struct_termio ++ ++type Winsize C.struct_winsize ++ ++//poll ++ ++type PollFd struct { ++ Fd int32 ++ Events uint16 ++ Revents uint16 ++} ++ ++const ( ++ POLLERR = C.POLLERR ++ POLLHUP = C.POLLHUP ++ POLLIN = C.POLLIN ++ POLLNVAL = C.POLLNVAL ++ POLLOUT = C.POLLOUT ++ POLLPRI = C.POLLPRI ++ POLLRDBAND = C.POLLRDBAND ++ POLLRDNORM = C.POLLRDNORM ++ POLLWRBAND = C.POLLWRBAND ++ POLLWRNORM = C.POLLWRNORM ++) ++ ++//flock_t ++ ++type Flock_t C.struct_flock64 ++ ++// Statfs ++ ++type Fsid_t C.struct_fsid_t ++type Fsid64_t C.struct_fsid64_t ++ ++type Statfs_t C.struct_statfs ++ ++const RNDGETENTCNT = 0x80045200 +diff --git a/vendor/golang.org/x/sys/unix/types_darwin.go b/vendor/golang.org/x/sys/unix/types_darwin.go +new file mode 100644 +index 0000000..155c2e6 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/types_darwin.go +@@ -0,0 +1,283 @@ ++// Copyright 2009 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build ignore ++ ++/* ++Input to cgo -godefs. See README.md ++*/ ++ ++// +godefs map struct_in_addr [4]byte /* in_addr */ ++// +godefs map struct_in6_addr [16]byte /* in6_addr */ ++ ++package unix ++ ++/* ++#define __DARWIN_UNIX03 0 ++#define KERNEL ++#define _DARWIN_USE_64_BIT_INODE ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++enum { ++ sizeofPtr = sizeof(void*), ++}; ++ ++union sockaddr_all { ++ struct sockaddr s1; // this one gets used for fields ++ struct sockaddr_in s2; // these pad it out ++ struct sockaddr_in6 s3; ++ struct sockaddr_un s4; ++ struct sockaddr_dl s5; ++}; ++ ++struct sockaddr_any { ++ struct sockaddr addr; ++ char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; ++}; ++ ++*/ ++import "C" ++ ++// Machine characteristics ++ ++const ( ++ SizeofPtr = C.sizeofPtr ++ SizeofShort = C.sizeof_short ++ SizeofInt = C.sizeof_int ++ SizeofLong = C.sizeof_long ++ SizeofLongLong = C.sizeof_longlong ++) ++ ++// Basic types ++ ++type ( ++ _C_short C.short ++ _C_int C.int ++ _C_long C.long ++ _C_long_long C.longlong ++) ++ ++// Time ++ ++type Timespec C.struct_timespec ++ ++type Timeval C.struct_timeval ++ ++type Timeval32 C.struct_timeval32 ++ ++// Processes ++ ++type Rusage C.struct_rusage ++ ++type Rlimit C.struct_rlimit ++ ++type _Gid_t C.gid_t ++ ++// Files ++ ++type Stat_t C.struct_stat64 ++ ++type Statfs_t C.struct_statfs64 ++ ++type Flock_t C.struct_flock ++ ++type Fstore_t C.struct_fstore ++ ++type Radvisory_t C.struct_radvisory ++ ++type Fbootstraptransfer_t C.struct_fbootstraptransfer ++ ++type Log2phys_t C.struct_log2phys ++ ++type Fsid C.struct_fsid ++ ++type Dirent C.struct_dirent ++ ++// Sockets ++ ++type RawSockaddrInet4 C.struct_sockaddr_in ++ ++type RawSockaddrInet6 C.struct_sockaddr_in6 ++ ++type RawSockaddrUnix C.struct_sockaddr_un ++ ++type RawSockaddrDatalink C.struct_sockaddr_dl ++ ++type RawSockaddr C.struct_sockaddr ++ ++type RawSockaddrAny C.struct_sockaddr_any ++ ++type _Socklen C.socklen_t ++ ++type Linger C.struct_linger ++ ++type Iovec C.struct_iovec ++ ++type IPMreq C.struct_ip_mreq ++ ++type IPv6Mreq C.struct_ipv6_mreq ++ ++type Msghdr C.struct_msghdr ++ ++type Cmsghdr C.struct_cmsghdr ++ ++type Inet4Pktinfo C.struct_in_pktinfo ++ ++type Inet6Pktinfo C.struct_in6_pktinfo ++ ++type IPv6MTUInfo C.struct_ip6_mtuinfo ++ ++type ICMPv6Filter C.struct_icmp6_filter ++ ++const ( ++ SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in ++ SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 ++ SizeofSockaddrAny = C.sizeof_struct_sockaddr_any ++ SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un ++ SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl ++ SizeofLinger = C.sizeof_struct_linger ++ SizeofIPMreq = C.sizeof_struct_ip_mreq ++ SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq ++ SizeofMsghdr = C.sizeof_struct_msghdr ++ SizeofCmsghdr = C.sizeof_struct_cmsghdr ++ SizeofInet4Pktinfo = C.sizeof_struct_in_pktinfo ++ SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo ++ SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo ++ SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter ++) ++ ++// Ptrace requests ++ ++const ( ++ PTRACE_TRACEME = C.PT_TRACE_ME ++ PTRACE_CONT = C.PT_CONTINUE ++ PTRACE_KILL = C.PT_KILL ++) ++ ++// Events (kqueue, kevent) ++ ++type Kevent_t C.struct_kevent ++ ++// Select ++ ++type FdSet C.fd_set ++ ++// Routing and interface messages ++ ++const ( ++ SizeofIfMsghdr = C.sizeof_struct_if_msghdr ++ SizeofIfData = C.sizeof_struct_if_data ++ SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr ++ SizeofIfmaMsghdr = C.sizeof_struct_ifma_msghdr ++ SizeofIfmaMsghdr2 = C.sizeof_struct_ifma_msghdr2 ++ SizeofRtMsghdr = C.sizeof_struct_rt_msghdr ++ SizeofRtMetrics = C.sizeof_struct_rt_metrics ++) ++ ++type IfMsghdr C.struct_if_msghdr ++ ++type IfData C.struct_if_data ++ ++type IfaMsghdr C.struct_ifa_msghdr ++ ++type IfmaMsghdr C.struct_ifma_msghdr ++ ++type IfmaMsghdr2 C.struct_ifma_msghdr2 ++ ++type RtMsghdr C.struct_rt_msghdr ++ ++type RtMetrics C.struct_rt_metrics ++ ++// Berkeley packet filter ++ ++const ( ++ SizeofBpfVersion = C.sizeof_struct_bpf_version ++ SizeofBpfStat = C.sizeof_struct_bpf_stat ++ SizeofBpfProgram = C.sizeof_struct_bpf_program ++ SizeofBpfInsn = C.sizeof_struct_bpf_insn ++ SizeofBpfHdr = C.sizeof_struct_bpf_hdr ++) ++ ++type BpfVersion C.struct_bpf_version ++ ++type BpfStat C.struct_bpf_stat ++ ++type BpfProgram C.struct_bpf_program ++ ++type BpfInsn C.struct_bpf_insn ++ ++type BpfHdr C.struct_bpf_hdr ++ ++// Terminal handling ++ ++type Termios C.struct_termios ++ ++type Winsize C.struct_winsize ++ ++// fchmodat-like syscalls. ++ ++const ( ++ AT_FDCWD = C.AT_FDCWD ++ AT_REMOVEDIR = C.AT_REMOVEDIR ++ AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW ++ AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW ++) ++ ++// poll ++ ++type PollFd C.struct_pollfd ++ ++const ( ++ POLLERR = C.POLLERR ++ POLLHUP = C.POLLHUP ++ POLLIN = C.POLLIN ++ POLLNVAL = C.POLLNVAL ++ POLLOUT = C.POLLOUT ++ POLLPRI = C.POLLPRI ++ POLLRDBAND = C.POLLRDBAND ++ POLLRDNORM = C.POLLRDNORM ++ POLLWRBAND = C.POLLWRBAND ++ POLLWRNORM = C.POLLWRNORM ++) ++ ++// uname ++ ++type Utsname C.struct_utsname ++ ++// Clockinfo ++ ++const SizeofClockinfo = C.sizeof_struct_clockinfo ++ ++type Clockinfo C.struct_clockinfo +diff --git a/vendor/golang.org/x/sys/unix/types_dragonfly.go b/vendor/golang.org/x/sys/unix/types_dragonfly.go +new file mode 100644 +index 0000000..6574f6b +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/types_dragonfly.go +@@ -0,0 +1,269 @@ ++// Copyright 2009 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build ignore ++ ++/* ++Input to cgo -godefs. See README.md ++*/ ++ ++// +godefs map struct_in_addr [4]byte /* in_addr */ ++// +godefs map struct_in6_addr [16]byte /* in6_addr */ ++ ++package unix ++ ++/* ++#define KERNEL ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++enum { ++ sizeofPtr = sizeof(void*), ++}; ++ ++union sockaddr_all { ++ struct sockaddr s1; // this one gets used for fields ++ struct sockaddr_in s2; // these pad it out ++ struct sockaddr_in6 s3; ++ struct sockaddr_un s4; ++ struct sockaddr_dl s5; ++}; ++ ++struct sockaddr_any { ++ struct sockaddr addr; ++ char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; ++}; ++ ++*/ ++import "C" ++ ++// Machine characteristics ++ ++const ( ++ SizeofPtr = C.sizeofPtr ++ SizeofShort = C.sizeof_short ++ SizeofInt = C.sizeof_int ++ SizeofLong = C.sizeof_long ++ SizeofLongLong = C.sizeof_longlong ++) ++ ++// Basic types ++ ++type ( ++ _C_short C.short ++ _C_int C.int ++ _C_long C.long ++ _C_long_long C.longlong ++) ++ ++// Time ++ ++type Timespec C.struct_timespec ++ ++type Timeval C.struct_timeval ++ ++// Processes ++ ++type Rusage C.struct_rusage ++ ++type Rlimit C.struct_rlimit ++ ++type _Gid_t C.gid_t ++ ++// Files ++ ++type Stat_t C.struct_stat ++ ++type Statfs_t C.struct_statfs ++ ++type Flock_t C.struct_flock ++ ++type Dirent C.struct_dirent ++ ++type Fsid C.struct_fsid ++ ++// File system limits ++ ++const ( ++ PathMax = C.PATH_MAX ++) ++ ++// Sockets ++ ++type RawSockaddrInet4 C.struct_sockaddr_in ++ ++type RawSockaddrInet6 C.struct_sockaddr_in6 ++ ++type RawSockaddrUnix C.struct_sockaddr_un ++ ++type RawSockaddrDatalink C.struct_sockaddr_dl ++ ++type RawSockaddr C.struct_sockaddr ++ ++type RawSockaddrAny C.struct_sockaddr_any ++ ++type _Socklen C.socklen_t ++ ++type Linger C.struct_linger ++ ++type Iovec C.struct_iovec ++ ++type IPMreq C.struct_ip_mreq ++ ++type IPv6Mreq C.struct_ipv6_mreq ++ ++type Msghdr C.struct_msghdr ++ ++type Cmsghdr C.struct_cmsghdr ++ ++type Inet6Pktinfo C.struct_in6_pktinfo ++ ++type IPv6MTUInfo C.struct_ip6_mtuinfo ++ ++type ICMPv6Filter C.struct_icmp6_filter ++ ++const ( ++ SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in ++ SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 ++ SizeofSockaddrAny = C.sizeof_struct_sockaddr_any ++ SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un ++ SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl ++ SizeofLinger = C.sizeof_struct_linger ++ SizeofIPMreq = C.sizeof_struct_ip_mreq ++ SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq ++ SizeofMsghdr = C.sizeof_struct_msghdr ++ SizeofCmsghdr = C.sizeof_struct_cmsghdr ++ SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo ++ SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo ++ SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter ++) ++ ++// Ptrace requests ++ ++const ( ++ PTRACE_TRACEME = C.PT_TRACE_ME ++ PTRACE_CONT = C.PT_CONTINUE ++ PTRACE_KILL = C.PT_KILL ++) ++ ++// Events (kqueue, kevent) ++ ++type Kevent_t C.struct_kevent ++ ++// Select ++ ++type FdSet C.fd_set ++ ++// Routing and interface messages ++ ++const ( ++ SizeofIfMsghdr = C.sizeof_struct_if_msghdr ++ SizeofIfData = C.sizeof_struct_if_data ++ SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr ++ SizeofIfmaMsghdr = C.sizeof_struct_ifma_msghdr ++ SizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr ++ SizeofRtMsghdr = C.sizeof_struct_rt_msghdr ++ SizeofRtMetrics = C.sizeof_struct_rt_metrics ++) ++ ++type IfMsghdr C.struct_if_msghdr ++ ++type IfData C.struct_if_data ++ ++type IfaMsghdr C.struct_ifa_msghdr ++ ++type IfmaMsghdr C.struct_ifma_msghdr ++ ++type IfAnnounceMsghdr C.struct_if_announcemsghdr ++ ++type RtMsghdr C.struct_rt_msghdr ++ ++type RtMetrics C.struct_rt_metrics ++ ++// Berkeley packet filter ++ ++const ( ++ SizeofBpfVersion = C.sizeof_struct_bpf_version ++ SizeofBpfStat = C.sizeof_struct_bpf_stat ++ SizeofBpfProgram = C.sizeof_struct_bpf_program ++ SizeofBpfInsn = C.sizeof_struct_bpf_insn ++ SizeofBpfHdr = C.sizeof_struct_bpf_hdr ++) ++ ++type BpfVersion C.struct_bpf_version ++ ++type BpfStat C.struct_bpf_stat ++ ++type BpfProgram C.struct_bpf_program ++ ++type BpfInsn C.struct_bpf_insn ++ ++type BpfHdr C.struct_bpf_hdr ++ ++// Terminal handling ++ ++type Termios C.struct_termios ++ ++type Winsize C.struct_winsize ++ ++// fchmodat-like syscalls. ++ ++const ( ++ AT_FDCWD = C.AT_FDCWD ++ AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW ++) ++ ++// poll ++ ++type PollFd C.struct_pollfd ++ ++const ( ++ POLLERR = C.POLLERR ++ POLLHUP = C.POLLHUP ++ POLLIN = C.POLLIN ++ POLLNVAL = C.POLLNVAL ++ POLLOUT = C.POLLOUT ++ POLLPRI = C.POLLPRI ++ POLLRDBAND = C.POLLRDBAND ++ POLLRDNORM = C.POLLRDNORM ++ POLLWRBAND = C.POLLWRBAND ++ POLLWRNORM = C.POLLWRNORM ++) ++ ++// Uname ++ ++type Utsname C.struct_utsname ++ ++// Clockinfo ++ ++const SizeofClockinfo = C.sizeof_struct_clockinfo ++ ++type Clockinfo C.struct_clockinfo +diff --git a/vendor/golang.org/x/sys/unix/types_freebsd.go b/vendor/golang.org/x/sys/unix/types_freebsd.go +new file mode 100644 +index 0000000..c6fde42 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/types_freebsd.go +@@ -0,0 +1,406 @@ ++// Copyright 2009 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build ignore ++ ++/* ++Input to cgo -godefs. See README.md ++*/ ++ ++// +godefs map struct_in_addr [4]byte /* in_addr */ ++// +godefs map struct_in6_addr [16]byte /* in6_addr */ ++ ++package unix ++ ++/* ++#define _WANT_FREEBSD11_STAT 1 ++#define _WANT_FREEBSD11_STATFS 1 ++#define _WANT_FREEBSD11_DIRENT 1 ++#define _WANT_FREEBSD11_KEVENT 1 ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++enum { ++ sizeofPtr = sizeof(void*), ++}; ++ ++union sockaddr_all { ++ struct sockaddr s1; // this one gets used for fields ++ struct sockaddr_in s2; // these pad it out ++ struct sockaddr_in6 s3; ++ struct sockaddr_un s4; ++ struct sockaddr_dl s5; ++}; ++ ++struct sockaddr_any { ++ struct sockaddr addr; ++ char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; ++}; ++ ++// This structure is a duplicate of if_data on FreeBSD 8-STABLE. ++// See /usr/include/net/if.h. ++struct if_data8 { ++ u_char ifi_type; ++ u_char ifi_physical; ++ u_char ifi_addrlen; ++ u_char ifi_hdrlen; ++ u_char ifi_link_state; ++ u_char ifi_spare_char1; ++ u_char ifi_spare_char2; ++ u_char ifi_datalen; ++ u_long ifi_mtu; ++ u_long ifi_metric; ++ u_long ifi_baudrate; ++ u_long ifi_ipackets; ++ u_long ifi_ierrors; ++ u_long ifi_opackets; ++ u_long ifi_oerrors; ++ u_long ifi_collisions; ++ u_long ifi_ibytes; ++ u_long ifi_obytes; ++ u_long ifi_imcasts; ++ u_long ifi_omcasts; ++ u_long ifi_iqdrops; ++ u_long ifi_noproto; ++ u_long ifi_hwassist; ++// FIXME: these are now unions, so maybe need to change definitions? ++#undef ifi_epoch ++ time_t ifi_epoch; ++#undef ifi_lastchange ++ struct timeval ifi_lastchange; ++}; ++ ++// This structure is a duplicate of if_msghdr on FreeBSD 8-STABLE. ++// See /usr/include/net/if.h. ++struct if_msghdr8 { ++ u_short ifm_msglen; ++ u_char ifm_version; ++ u_char ifm_type; ++ int ifm_addrs; ++ int ifm_flags; ++ u_short ifm_index; ++ struct if_data8 ifm_data; ++}; ++*/ ++import "C" ++ ++// Machine characteristics ++ ++const ( ++ SizeofPtr = C.sizeofPtr ++ SizeofShort = C.sizeof_short ++ SizeofInt = C.sizeof_int ++ SizeofLong = C.sizeof_long ++ SizeofLongLong = C.sizeof_longlong ++) ++ ++// Basic types ++ ++type ( ++ _C_short C.short ++ _C_int C.int ++ _C_long C.long ++ _C_long_long C.longlong ++) ++ ++// Time ++ ++type Timespec C.struct_timespec ++ ++type Timeval C.struct_timeval ++ ++// Processes ++ ++type Rusage C.struct_rusage ++ ++type Rlimit C.struct_rlimit ++ ++type _Gid_t C.gid_t ++ ++// Files ++ ++const ( ++ _statfsVersion = C.STATFS_VERSION ++ _dirblksiz = C.DIRBLKSIZ ++) ++ ++type Stat_t C.struct_stat ++ ++type stat_freebsd11_t C.struct_freebsd11_stat ++ ++type Statfs_t C.struct_statfs ++ ++type statfs_freebsd11_t C.struct_freebsd11_statfs ++ ++type Flock_t C.struct_flock ++ ++type Dirent C.struct_dirent ++ ++type dirent_freebsd11 C.struct_freebsd11_dirent ++ ++type Fsid C.struct_fsid ++ ++// File system limits ++ ++const ( ++ PathMax = C.PATH_MAX ++) ++ ++// Advice to Fadvise ++ ++const ( ++ FADV_NORMAL = C.POSIX_FADV_NORMAL ++ FADV_RANDOM = C.POSIX_FADV_RANDOM ++ FADV_SEQUENTIAL = C.POSIX_FADV_SEQUENTIAL ++ FADV_WILLNEED = C.POSIX_FADV_WILLNEED ++ FADV_DONTNEED = C.POSIX_FADV_DONTNEED ++ FADV_NOREUSE = C.POSIX_FADV_NOREUSE ++) ++ ++// Sockets ++ ++type RawSockaddrInet4 C.struct_sockaddr_in ++ ++type RawSockaddrInet6 C.struct_sockaddr_in6 ++ ++type RawSockaddrUnix C.struct_sockaddr_un ++ ++type RawSockaddrDatalink C.struct_sockaddr_dl ++ ++type RawSockaddr C.struct_sockaddr ++ ++type RawSockaddrAny C.struct_sockaddr_any ++ ++type _Socklen C.socklen_t ++ ++type Linger C.struct_linger ++ ++type Iovec C.struct_iovec ++ ++type IPMreq C.struct_ip_mreq ++ ++type IPMreqn C.struct_ip_mreqn ++ ++type IPv6Mreq C.struct_ipv6_mreq ++ ++type Msghdr C.struct_msghdr ++ ++type Cmsghdr C.struct_cmsghdr ++ ++type Inet6Pktinfo C.struct_in6_pktinfo ++ ++type IPv6MTUInfo C.struct_ip6_mtuinfo ++ ++type ICMPv6Filter C.struct_icmp6_filter ++ ++const ( ++ SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in ++ SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 ++ SizeofSockaddrAny = C.sizeof_struct_sockaddr_any ++ SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un ++ SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl ++ SizeofLinger = C.sizeof_struct_linger ++ SizeofIPMreq = C.sizeof_struct_ip_mreq ++ SizeofIPMreqn = C.sizeof_struct_ip_mreqn ++ SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq ++ SizeofMsghdr = C.sizeof_struct_msghdr ++ SizeofCmsghdr = C.sizeof_struct_cmsghdr ++ SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo ++ SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo ++ SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter ++) ++ ++// Ptrace requests ++ ++const ( ++ PTRACE_ATTACH = C.PT_ATTACH ++ PTRACE_CONT = C.PT_CONTINUE ++ PTRACE_DETACH = C.PT_DETACH ++ PTRACE_GETFPREGS = C.PT_GETFPREGS ++ PTRACE_GETFSBASE = C.PT_GETFSBASE ++ PTRACE_GETLWPLIST = C.PT_GETLWPLIST ++ PTRACE_GETNUMLWPS = C.PT_GETNUMLWPS ++ PTRACE_GETREGS = C.PT_GETREGS ++ PTRACE_GETXSTATE = C.PT_GETXSTATE ++ PTRACE_IO = C.PT_IO ++ PTRACE_KILL = C.PT_KILL ++ PTRACE_LWPEVENTS = C.PT_LWP_EVENTS ++ PTRACE_LWPINFO = C.PT_LWPINFO ++ PTRACE_SETFPREGS = C.PT_SETFPREGS ++ PTRACE_SETREGS = C.PT_SETREGS ++ PTRACE_SINGLESTEP = C.PT_STEP ++ PTRACE_TRACEME = C.PT_TRACE_ME ++) ++ ++const ( ++ PIOD_READ_D = C.PIOD_READ_D ++ PIOD_WRITE_D = C.PIOD_WRITE_D ++ PIOD_READ_I = C.PIOD_READ_I ++ PIOD_WRITE_I = C.PIOD_WRITE_I ++) ++ ++const ( ++ PL_FLAG_BORN = C.PL_FLAG_BORN ++ PL_FLAG_EXITED = C.PL_FLAG_EXITED ++ PL_FLAG_SI = C.PL_FLAG_SI ++) ++ ++const ( ++ TRAP_BRKPT = C.TRAP_BRKPT ++ TRAP_TRACE = C.TRAP_TRACE ++) ++ ++type PtraceLwpInfoStruct C.struct_ptrace_lwpinfo ++ ++type __Siginfo C.struct___siginfo ++ ++type Sigset_t C.sigset_t ++ ++type Reg C.struct_reg ++ ++type FpReg C.struct_fpreg ++ ++type PtraceIoDesc C.struct_ptrace_io_desc ++ ++// Events (kqueue, kevent) ++ ++type Kevent_t C.struct_kevent_freebsd11 ++ ++// Select ++ ++type FdSet C.fd_set ++ ++// Routing and interface messages ++ ++const ( ++ sizeofIfMsghdr = C.sizeof_struct_if_msghdr ++ SizeofIfMsghdr = C.sizeof_struct_if_msghdr8 ++ sizeofIfData = C.sizeof_struct_if_data ++ SizeofIfData = C.sizeof_struct_if_data8 ++ SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr ++ SizeofIfmaMsghdr = C.sizeof_struct_ifma_msghdr ++ SizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr ++ SizeofRtMsghdr = C.sizeof_struct_rt_msghdr ++ SizeofRtMetrics = C.sizeof_struct_rt_metrics ++) ++ ++type ifMsghdr C.struct_if_msghdr ++ ++type IfMsghdr C.struct_if_msghdr8 ++ ++type ifData C.struct_if_data ++ ++type IfData C.struct_if_data8 ++ ++type IfaMsghdr C.struct_ifa_msghdr ++ ++type IfmaMsghdr C.struct_ifma_msghdr ++ ++type IfAnnounceMsghdr C.struct_if_announcemsghdr ++ ++type RtMsghdr C.struct_rt_msghdr ++ ++type RtMetrics C.struct_rt_metrics ++ ++// Berkeley packet filter ++ ++const ( ++ SizeofBpfVersion = C.sizeof_struct_bpf_version ++ SizeofBpfStat = C.sizeof_struct_bpf_stat ++ SizeofBpfZbuf = C.sizeof_struct_bpf_zbuf ++ SizeofBpfProgram = C.sizeof_struct_bpf_program ++ SizeofBpfInsn = C.sizeof_struct_bpf_insn ++ SizeofBpfHdr = C.sizeof_struct_bpf_hdr ++ SizeofBpfZbufHeader = C.sizeof_struct_bpf_zbuf_header ++) ++ ++type BpfVersion C.struct_bpf_version ++ ++type BpfStat C.struct_bpf_stat ++ ++type BpfZbuf C.struct_bpf_zbuf ++ ++type BpfProgram C.struct_bpf_program ++ ++type BpfInsn C.struct_bpf_insn ++ ++type BpfHdr C.struct_bpf_hdr ++ ++type BpfZbufHeader C.struct_bpf_zbuf_header ++ ++// Terminal handling ++ ++type Termios C.struct_termios ++ ++type Winsize C.struct_winsize ++ ++// fchmodat-like syscalls. ++ ++const ( ++ AT_FDCWD = C.AT_FDCWD ++ AT_REMOVEDIR = C.AT_REMOVEDIR ++ AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW ++ AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW ++) ++ ++// poll ++ ++type PollFd C.struct_pollfd ++ ++const ( ++ POLLERR = C.POLLERR ++ POLLHUP = C.POLLHUP ++ POLLIN = C.POLLIN ++ POLLINIGNEOF = C.POLLINIGNEOF ++ POLLNVAL = C.POLLNVAL ++ POLLOUT = C.POLLOUT ++ POLLPRI = C.POLLPRI ++ POLLRDBAND = C.POLLRDBAND ++ POLLRDNORM = C.POLLRDNORM ++ POLLWRBAND = C.POLLWRBAND ++ POLLWRNORM = C.POLLWRNORM ++) ++ ++// Capabilities ++ ++type CapRights C.struct_cap_rights ++ ++// Uname ++ ++type Utsname C.struct_utsname ++ ++// Clockinfo ++ ++const SizeofClockinfo = C.sizeof_struct_clockinfo ++ ++type Clockinfo C.struct_clockinfo +diff --git a/vendor/golang.org/x/sys/unix/types_netbsd.go b/vendor/golang.org/x/sys/unix/types_netbsd.go +new file mode 100644 +index 0000000..0a81aad +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/types_netbsd.go +@@ -0,0 +1,300 @@ ++// Copyright 2009 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build ignore ++ ++/* ++Input to cgo -godefs. See README.md ++*/ ++ ++// +godefs map struct_in_addr [4]byte /* in_addr */ ++// +godefs map struct_in6_addr [16]byte /* in6_addr */ ++ ++package unix ++ ++/* ++#define KERNEL ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++enum { ++ sizeofPtr = sizeof(void*), ++}; ++ ++union sockaddr_all { ++ struct sockaddr s1; // this one gets used for fields ++ struct sockaddr_in s2; // these pad it out ++ struct sockaddr_in6 s3; ++ struct sockaddr_un s4; ++ struct sockaddr_dl s5; ++}; ++ ++struct sockaddr_any { ++ struct sockaddr addr; ++ char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; ++}; ++ ++*/ ++import "C" ++ ++// Machine characteristics ++ ++const ( ++ SizeofPtr = C.sizeofPtr ++ SizeofShort = C.sizeof_short ++ SizeofInt = C.sizeof_int ++ SizeofLong = C.sizeof_long ++ SizeofLongLong = C.sizeof_longlong ++) ++ ++// Basic types ++ ++type ( ++ _C_short C.short ++ _C_int C.int ++ _C_long C.long ++ _C_long_long C.longlong ++) ++ ++// Time ++ ++type Timespec C.struct_timespec ++ ++type Timeval C.struct_timeval ++ ++// Processes ++ ++type Rusage C.struct_rusage ++ ++type Rlimit C.struct_rlimit ++ ++type _Gid_t C.gid_t ++ ++// Files ++ ++type Stat_t C.struct_stat ++ ++type Statfs_t C.struct_statfs ++ ++type Statvfs_t C.struct_statvfs ++ ++type Flock_t C.struct_flock ++ ++type Dirent C.struct_dirent ++ ++type Fsid C.fsid_t ++ ++// File system limits ++ ++const ( ++ PathMax = C.PATH_MAX ++) ++ ++// Fstatvfs/Statvfs flags ++ ++const ( ++ ST_WAIT = C.ST_WAIT ++ ST_NOWAIT = C.ST_NOWAIT ++) ++ ++// Advice to Fadvise ++ ++const ( ++ FADV_NORMAL = C.POSIX_FADV_NORMAL ++ FADV_RANDOM = C.POSIX_FADV_RANDOM ++ FADV_SEQUENTIAL = C.POSIX_FADV_SEQUENTIAL ++ FADV_WILLNEED = C.POSIX_FADV_WILLNEED ++ FADV_DONTNEED = C.POSIX_FADV_DONTNEED ++ FADV_NOREUSE = C.POSIX_FADV_NOREUSE ++) ++ ++// Sockets ++ ++type RawSockaddrInet4 C.struct_sockaddr_in ++ ++type RawSockaddrInet6 C.struct_sockaddr_in6 ++ ++type RawSockaddrUnix C.struct_sockaddr_un ++ ++type RawSockaddrDatalink C.struct_sockaddr_dl ++ ++type RawSockaddr C.struct_sockaddr ++ ++type RawSockaddrAny C.struct_sockaddr_any ++ ++type _Socklen C.socklen_t ++ ++type Linger C.struct_linger ++ ++type Iovec C.struct_iovec ++ ++type IPMreq C.struct_ip_mreq ++ ++type IPv6Mreq C.struct_ipv6_mreq ++ ++type Msghdr C.struct_msghdr ++ ++type Cmsghdr C.struct_cmsghdr ++ ++type Inet6Pktinfo C.struct_in6_pktinfo ++ ++type IPv6MTUInfo C.struct_ip6_mtuinfo ++ ++type ICMPv6Filter C.struct_icmp6_filter ++ ++const ( ++ SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in ++ SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 ++ SizeofSockaddrAny = C.sizeof_struct_sockaddr_any ++ SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un ++ SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl ++ SizeofLinger = C.sizeof_struct_linger ++ SizeofIPMreq = C.sizeof_struct_ip_mreq ++ SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq ++ SizeofMsghdr = C.sizeof_struct_msghdr ++ SizeofCmsghdr = C.sizeof_struct_cmsghdr ++ SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo ++ SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo ++ SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter ++) ++ ++// Ptrace requests ++ ++const ( ++ PTRACE_TRACEME = C.PT_TRACE_ME ++ PTRACE_CONT = C.PT_CONTINUE ++ PTRACE_KILL = C.PT_KILL ++) ++ ++// Events (kqueue, kevent) ++ ++type Kevent_t C.struct_kevent ++ ++// Select ++ ++type FdSet C.fd_set ++ ++// Routing and interface messages ++ ++const ( ++ SizeofIfMsghdr = C.sizeof_struct_if_msghdr ++ SizeofIfData = C.sizeof_struct_if_data ++ SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr ++ SizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr ++ SizeofRtMsghdr = C.sizeof_struct_rt_msghdr ++ SizeofRtMetrics = C.sizeof_struct_rt_metrics ++) ++ ++type IfMsghdr C.struct_if_msghdr ++ ++type IfData C.struct_if_data ++ ++type IfaMsghdr C.struct_ifa_msghdr ++ ++type IfAnnounceMsghdr C.struct_if_announcemsghdr ++ ++type RtMsghdr C.struct_rt_msghdr ++ ++type RtMetrics C.struct_rt_metrics ++ ++type Mclpool C.struct_mclpool ++ ++// Berkeley packet filter ++ ++const ( ++ SizeofBpfVersion = C.sizeof_struct_bpf_version ++ SizeofBpfStat = C.sizeof_struct_bpf_stat ++ SizeofBpfProgram = C.sizeof_struct_bpf_program ++ SizeofBpfInsn = C.sizeof_struct_bpf_insn ++ SizeofBpfHdr = C.sizeof_struct_bpf_hdr ++) ++ ++type BpfVersion C.struct_bpf_version ++ ++type BpfStat C.struct_bpf_stat ++ ++type BpfProgram C.struct_bpf_program ++ ++type BpfInsn C.struct_bpf_insn ++ ++type BpfHdr C.struct_bpf_hdr ++ ++type BpfTimeval C.struct_bpf_timeval ++ ++// Terminal handling ++ ++type Termios C.struct_termios ++ ++type Winsize C.struct_winsize ++ ++type Ptmget C.struct_ptmget ++ ++// fchmodat-like syscalls. ++ ++const ( ++ AT_FDCWD = C.AT_FDCWD ++ AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW ++ AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW ++) ++ ++// poll ++ ++type PollFd C.struct_pollfd ++ ++const ( ++ POLLERR = C.POLLERR ++ POLLHUP = C.POLLHUP ++ POLLIN = C.POLLIN ++ POLLNVAL = C.POLLNVAL ++ POLLOUT = C.POLLOUT ++ POLLPRI = C.POLLPRI ++ POLLRDBAND = C.POLLRDBAND ++ POLLRDNORM = C.POLLRDNORM ++ POLLWRBAND = C.POLLWRBAND ++ POLLWRNORM = C.POLLWRNORM ++) ++ ++// Sysctl ++ ++type Sysctlnode C.struct_sysctlnode ++ ++// Uname ++ ++type Utsname C.struct_utsname ++ ++// Clockinfo ++ ++const SizeofClockinfo = C.sizeof_struct_clockinfo ++ ++type Clockinfo C.struct_clockinfo +diff --git a/vendor/golang.org/x/sys/unix/types_openbsd.go b/vendor/golang.org/x/sys/unix/types_openbsd.go +new file mode 100644 +index 0000000..775cb57 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/types_openbsd.go +@@ -0,0 +1,283 @@ ++// Copyright 2009 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build ignore ++ ++/* ++Input to cgo -godefs. See README.md ++*/ ++ ++// +godefs map struct_in_addr [4]byte /* in_addr */ ++// +godefs map struct_in6_addr [16]byte /* in6_addr */ ++ ++package unix ++ ++/* ++#define KERNEL ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++enum { ++ sizeofPtr = sizeof(void*), ++}; ++ ++union sockaddr_all { ++ struct sockaddr s1; // this one gets used for fields ++ struct sockaddr_in s2; // these pad it out ++ struct sockaddr_in6 s3; ++ struct sockaddr_un s4; ++ struct sockaddr_dl s5; ++}; ++ ++struct sockaddr_any { ++ struct sockaddr addr; ++ char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; ++}; ++ ++*/ ++import "C" ++ ++// Machine characteristics ++ ++const ( ++ SizeofPtr = C.sizeofPtr ++ SizeofShort = C.sizeof_short ++ SizeofInt = C.sizeof_int ++ SizeofLong = C.sizeof_long ++ SizeofLongLong = C.sizeof_longlong ++) ++ ++// Basic types ++ ++type ( ++ _C_short C.short ++ _C_int C.int ++ _C_long C.long ++ _C_long_long C.longlong ++) ++ ++// Time ++ ++type Timespec C.struct_timespec ++ ++type Timeval C.struct_timeval ++ ++// Processes ++ ++type Rusage C.struct_rusage ++ ++type Rlimit C.struct_rlimit ++ ++type _Gid_t C.gid_t ++ ++// Files ++ ++type Stat_t C.struct_stat ++ ++type Statfs_t C.struct_statfs ++ ++type Flock_t C.struct_flock ++ ++type Dirent C.struct_dirent ++ ++type Fsid C.fsid_t ++ ++// File system limits ++ ++const ( ++ PathMax = C.PATH_MAX ++) ++ ++// Sockets ++ ++type RawSockaddrInet4 C.struct_sockaddr_in ++ ++type RawSockaddrInet6 C.struct_sockaddr_in6 ++ ++type RawSockaddrUnix C.struct_sockaddr_un ++ ++type RawSockaddrDatalink C.struct_sockaddr_dl ++ ++type RawSockaddr C.struct_sockaddr ++ ++type RawSockaddrAny C.struct_sockaddr_any ++ ++type _Socklen C.socklen_t ++ ++type Linger C.struct_linger ++ ++type Iovec C.struct_iovec ++ ++type IPMreq C.struct_ip_mreq ++ ++type IPv6Mreq C.struct_ipv6_mreq ++ ++type Msghdr C.struct_msghdr ++ ++type Cmsghdr C.struct_cmsghdr ++ ++type Inet6Pktinfo C.struct_in6_pktinfo ++ ++type IPv6MTUInfo C.struct_ip6_mtuinfo ++ ++type ICMPv6Filter C.struct_icmp6_filter ++ ++const ( ++ SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in ++ SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 ++ SizeofSockaddrAny = C.sizeof_struct_sockaddr_any ++ SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un ++ SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl ++ SizeofLinger = C.sizeof_struct_linger ++ SizeofIPMreq = C.sizeof_struct_ip_mreq ++ SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq ++ SizeofMsghdr = C.sizeof_struct_msghdr ++ SizeofCmsghdr = C.sizeof_struct_cmsghdr ++ SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo ++ SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo ++ SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter ++) ++ ++// Ptrace requests ++ ++const ( ++ PTRACE_TRACEME = C.PT_TRACE_ME ++ PTRACE_CONT = C.PT_CONTINUE ++ PTRACE_KILL = C.PT_KILL ++) ++ ++// Events (kqueue, kevent) ++ ++type Kevent_t C.struct_kevent ++ ++// Select ++ ++type FdSet C.fd_set ++ ++// Routing and interface messages ++ ++const ( ++ SizeofIfMsghdr = C.sizeof_struct_if_msghdr ++ SizeofIfData = C.sizeof_struct_if_data ++ SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr ++ SizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr ++ SizeofRtMsghdr = C.sizeof_struct_rt_msghdr ++ SizeofRtMetrics = C.sizeof_struct_rt_metrics ++) ++ ++type IfMsghdr C.struct_if_msghdr ++ ++type IfData C.struct_if_data ++ ++type IfaMsghdr C.struct_ifa_msghdr ++ ++type IfAnnounceMsghdr C.struct_if_announcemsghdr ++ ++type RtMsghdr C.struct_rt_msghdr ++ ++type RtMetrics C.struct_rt_metrics ++ ++type Mclpool C.struct_mclpool ++ ++// Berkeley packet filter ++ ++const ( ++ SizeofBpfVersion = C.sizeof_struct_bpf_version ++ SizeofBpfStat = C.sizeof_struct_bpf_stat ++ SizeofBpfProgram = C.sizeof_struct_bpf_program ++ SizeofBpfInsn = C.sizeof_struct_bpf_insn ++ SizeofBpfHdr = C.sizeof_struct_bpf_hdr ++) ++ ++type BpfVersion C.struct_bpf_version ++ ++type BpfStat C.struct_bpf_stat ++ ++type BpfProgram C.struct_bpf_program ++ ++type BpfInsn C.struct_bpf_insn ++ ++type BpfHdr C.struct_bpf_hdr ++ ++type BpfTimeval C.struct_bpf_timeval ++ ++// Terminal handling ++ ++type Termios C.struct_termios ++ ++type Winsize C.struct_winsize ++ ++// fchmodat-like syscalls. ++ ++const ( ++ AT_FDCWD = C.AT_FDCWD ++ AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW ++ AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW ++) ++ ++// poll ++ ++type PollFd C.struct_pollfd ++ ++const ( ++ POLLERR = C.POLLERR ++ POLLHUP = C.POLLHUP ++ POLLIN = C.POLLIN ++ POLLNVAL = C.POLLNVAL ++ POLLOUT = C.POLLOUT ++ POLLPRI = C.POLLPRI ++ POLLRDBAND = C.POLLRDBAND ++ POLLRDNORM = C.POLLRDNORM ++ POLLWRBAND = C.POLLWRBAND ++ POLLWRNORM = C.POLLWRNORM ++) ++ ++// Signal Sets ++ ++type Sigset_t C.sigset_t ++ ++// Uname ++ ++type Utsname C.struct_utsname ++ ++// Uvmexp ++ ++const SizeofUvmexp = C.sizeof_struct_uvmexp ++ ++type Uvmexp C.struct_uvmexp ++ ++// Clockinfo ++ ++const SizeofClockinfo = C.sizeof_struct_clockinfo ++ ++type Clockinfo C.struct_clockinfo +diff --git a/vendor/golang.org/x/sys/unix/types_solaris.go b/vendor/golang.org/x/sys/unix/types_solaris.go +new file mode 100644 +index 0000000..d713f09 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/types_solaris.go +@@ -0,0 +1,269 @@ ++// Copyright 2009 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build ignore ++ ++/* ++Input to cgo -godefs. See README.md ++*/ ++ ++// +godefs map struct_in_addr [4]byte /* in_addr */ ++// +godefs map struct_in6_addr [16]byte /* in6_addr */ ++ ++package unix ++ ++/* ++#define KERNEL ++// These defines ensure that builds done on newer versions of Solaris are ++// backwards-compatible with older versions of Solaris and ++// OpenSolaris-based derivatives. ++#define __USE_SUNOS_SOCKETS__ // msghdr ++#define __USE_LEGACY_PROTOTYPES__ // iovec ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++enum { ++ sizeofPtr = sizeof(void*), ++}; ++ ++union sockaddr_all { ++ struct sockaddr s1; // this one gets used for fields ++ struct sockaddr_in s2; // these pad it out ++ struct sockaddr_in6 s3; ++ struct sockaddr_un s4; ++ struct sockaddr_dl s5; ++}; ++ ++struct sockaddr_any { ++ struct sockaddr addr; ++ char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; ++}; ++ ++*/ ++import "C" ++ ++// Machine characteristics ++ ++const ( ++ SizeofPtr = C.sizeofPtr ++ SizeofShort = C.sizeof_short ++ SizeofInt = C.sizeof_int ++ SizeofLong = C.sizeof_long ++ SizeofLongLong = C.sizeof_longlong ++ PathMax = C.PATH_MAX ++ MaxHostNameLen = C.MAXHOSTNAMELEN ++) ++ ++// Basic types ++ ++type ( ++ _C_short C.short ++ _C_int C.int ++ _C_long C.long ++ _C_long_long C.longlong ++) ++ ++// Time ++ ++type Timespec C.struct_timespec ++ ++type Timeval C.struct_timeval ++ ++type Timeval32 C.struct_timeval32 ++ ++type Tms C.struct_tms ++ ++type Utimbuf C.struct_utimbuf ++ ++// Processes ++ ++type Rusage C.struct_rusage ++ ++type Rlimit C.struct_rlimit ++ ++type _Gid_t C.gid_t ++ ++// Files ++ ++type Stat_t C.struct_stat ++ ++type Flock_t C.struct_flock ++ ++type Dirent C.struct_dirent ++ ++// Filesystems ++ ++type _Fsblkcnt_t C.fsblkcnt_t ++ ++type Statvfs_t C.struct_statvfs ++ ++// Sockets ++ ++type RawSockaddrInet4 C.struct_sockaddr_in ++ ++type RawSockaddrInet6 C.struct_sockaddr_in6 ++ ++type RawSockaddrUnix C.struct_sockaddr_un ++ ++type RawSockaddrDatalink C.struct_sockaddr_dl ++ ++type RawSockaddr C.struct_sockaddr ++ ++type RawSockaddrAny C.struct_sockaddr_any ++ ++type _Socklen C.socklen_t ++ ++type Linger C.struct_linger ++ ++type Iovec C.struct_iovec ++ ++type IPMreq C.struct_ip_mreq ++ ++type IPv6Mreq C.struct_ipv6_mreq ++ ++type Msghdr C.struct_msghdr ++ ++type Cmsghdr C.struct_cmsghdr ++ ++type Inet4Pktinfo C.struct_in_pktinfo ++ ++type Inet6Pktinfo C.struct_in6_pktinfo ++ ++type IPv6MTUInfo C.struct_ip6_mtuinfo ++ ++type ICMPv6Filter C.struct_icmp6_filter ++ ++const ( ++ SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in ++ SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 ++ SizeofSockaddrAny = C.sizeof_struct_sockaddr_any ++ SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un ++ SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl ++ SizeofLinger = C.sizeof_struct_linger ++ SizeofIPMreq = C.sizeof_struct_ip_mreq ++ SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq ++ SizeofMsghdr = C.sizeof_struct_msghdr ++ SizeofCmsghdr = C.sizeof_struct_cmsghdr ++ SizeofInet4Pktinfo = C.sizeof_struct_in_pktinfo ++ SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo ++ SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo ++ SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter ++) ++ ++// Select ++ ++type FdSet C.fd_set ++ ++// Misc ++ ++type Utsname C.struct_utsname ++ ++type Ustat_t C.struct_ustat ++ ++const ( ++ AT_FDCWD = C.AT_FDCWD ++ AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW ++ AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW ++ AT_REMOVEDIR = C.AT_REMOVEDIR ++ AT_EACCESS = C.AT_EACCESS ++) ++ ++// Routing and interface messages ++ ++const ( ++ SizeofIfMsghdr = C.sizeof_struct_if_msghdr ++ SizeofIfData = C.sizeof_struct_if_data ++ SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr ++ SizeofRtMsghdr = C.sizeof_struct_rt_msghdr ++ SizeofRtMetrics = C.sizeof_struct_rt_metrics ++) ++ ++type IfMsghdr C.struct_if_msghdr ++ ++type IfData C.struct_if_data ++ ++type IfaMsghdr C.struct_ifa_msghdr ++ ++type RtMsghdr C.struct_rt_msghdr ++ ++type RtMetrics C.struct_rt_metrics ++ ++// Berkeley packet filter ++ ++const ( ++ SizeofBpfVersion = C.sizeof_struct_bpf_version ++ SizeofBpfStat = C.sizeof_struct_bpf_stat ++ SizeofBpfProgram = C.sizeof_struct_bpf_program ++ SizeofBpfInsn = C.sizeof_struct_bpf_insn ++ SizeofBpfHdr = C.sizeof_struct_bpf_hdr ++) ++ ++type BpfVersion C.struct_bpf_version ++ ++type BpfStat C.struct_bpf_stat ++ ++type BpfProgram C.struct_bpf_program ++ ++type BpfInsn C.struct_bpf_insn ++ ++type BpfTimeval C.struct_bpf_timeval ++ ++type BpfHdr C.struct_bpf_hdr ++ ++// Terminal handling ++ ++type Termios C.struct_termios ++ ++type Termio C.struct_termio ++ ++type Winsize C.struct_winsize ++ ++// poll ++ ++type PollFd C.struct_pollfd ++ ++const ( ++ POLLERR = C.POLLERR ++ POLLHUP = C.POLLHUP ++ POLLIN = C.POLLIN ++ POLLNVAL = C.POLLNVAL ++ POLLOUT = C.POLLOUT ++ POLLPRI = C.POLLPRI ++ POLLRDBAND = C.POLLRDBAND ++ POLLRDNORM = C.POLLRDNORM ++ POLLWRBAND = C.POLLWRBAND ++ POLLWRNORM = C.POLLWRNORM ++) +diff --git a/vendor/golang.org/x/sys/unix/xattr_test.go b/vendor/golang.org/x/sys/unix/xattr_test.go +new file mode 100644 +index 0000000..57fc84f +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/xattr_test.go +@@ -0,0 +1,207 @@ ++// Copyright 2018 The Go Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build darwin freebsd linux netbsd ++ ++package unix_test ++ ++import ( ++ "io/ioutil" ++ "os" ++ "runtime" ++ "strings" ++ "testing" ++ ++ "golang.org/x/sys/unix" ++) ++ ++func TestXattr(t *testing.T) { ++ defer chtmpdir(t)() ++ ++ f := "xattr1" ++ touch(t, f) ++ ++ xattrName := "user.test" ++ xattrDataSet := "gopher" ++ ++ err := unix.Setxattr(f, xattrName, []byte{}, 0) ++ if err == unix.ENOTSUP || err == unix.EOPNOTSUPP { ++ t.Skip("filesystem does not support extended attributes, skipping test") ++ } else if err != nil { ++ t.Fatalf("Setxattr: %v", err) ++ } ++ ++ err = unix.Setxattr(f, xattrName, []byte(xattrDataSet), 0) ++ if err != nil { ++ t.Fatalf("Setxattr: %v", err) ++ } ++ ++ // find size ++ size, err := unix.Listxattr(f, nil) ++ if err != nil { ++ t.Fatalf("Listxattr: %v", err) ++ } ++ ++ if size <= 0 { ++ t.Fatalf("Listxattr returned an empty list of attributes") ++ } ++ ++ buf := make([]byte, size) ++ read, err := unix.Listxattr(f, buf) ++ if err != nil { ++ t.Fatalf("Listxattr: %v", err) ++ } ++ ++ xattrs := stringsFromByteSlice(buf[:read]) ++ ++ xattrWant := xattrName ++ if runtime.GOOS == "freebsd" { ++ // On FreeBSD, the namespace is stored separately from the xattr ++ // name and Listxattr doesn't return the namespace prefix. ++ xattrWant = strings.TrimPrefix(xattrWant, "user.") ++ } ++ found := false ++ for _, name := range xattrs { ++ if name == xattrWant { ++ found = true ++ } ++ } ++ ++ if !found { ++ t.Errorf("Listxattr did not return previously set attribute '%s'", xattrName) ++ } ++ ++ // find size ++ size, err = unix.Getxattr(f, xattrName, nil) ++ if err != nil { ++ t.Fatalf("Getxattr: %v", err) ++ } ++ ++ if size <= 0 { ++ t.Fatalf("Getxattr returned an empty attribute") ++ } ++ ++ xattrDataGet := make([]byte, size) ++ _, err = unix.Getxattr(f, xattrName, xattrDataGet) ++ if err != nil { ++ t.Fatalf("Getxattr: %v", err) ++ } ++ ++ got := string(xattrDataGet) ++ if got != xattrDataSet { ++ t.Errorf("Getxattr: expected attribute value %s, got %s", xattrDataSet, got) ++ } ++ ++ err = unix.Removexattr(f, xattrName) ++ if err != nil { ++ t.Fatalf("Removexattr: %v", err) ++ } ++ ++ n := "nonexistent" ++ err = unix.Lsetxattr(n, xattrName, []byte(xattrDataSet), 0) ++ if err != unix.ENOENT { ++ t.Errorf("Lsetxattr: expected %v on non-existent file, got %v", unix.ENOENT, err) ++ } ++ ++ _, err = unix.Lgetxattr(n, xattrName, nil) ++ if err != unix.ENOENT { ++ t.Errorf("Lgetxattr: %v", err) ++ } ++ ++ s := "symlink1" ++ err = os.Symlink(n, s) ++ if err != nil { ++ t.Fatal(err) ++ } ++ ++ err = unix.Lsetxattr(s, xattrName, []byte(xattrDataSet), 0) ++ if err != nil { ++ // Linux and Android doen't support xattrs on symlinks according ++ // to xattr(7), so just test that we get the proper error. ++ if (runtime.GOOS != "linux" && runtime.GOOS != "android") || err != unix.EPERM { ++ t.Fatalf("Lsetxattr: %v", err) ++ } ++ } ++} ++ ++func TestFdXattr(t *testing.T) { ++ file, err := ioutil.TempFile("", "TestFdXattr") ++ if err != nil { ++ t.Fatal(err) ++ } ++ defer os.Remove(file.Name()) ++ defer file.Close() ++ ++ fd := int(file.Fd()) ++ xattrName := "user.test" ++ xattrDataSet := "gopher" ++ ++ err = unix.Fsetxattr(fd, xattrName, []byte(xattrDataSet), 0) ++ if err == unix.ENOTSUP || err == unix.EOPNOTSUPP { ++ t.Skip("filesystem does not support extended attributes, skipping test") ++ } else if err != nil { ++ t.Fatalf("Fsetxattr: %v", err) ++ } ++ ++ // find size ++ size, err := unix.Flistxattr(fd, nil) ++ if err != nil { ++ t.Fatalf("Flistxattr: %v", err) ++ } ++ ++ if size <= 0 { ++ t.Fatalf("Flistxattr returned an empty list of attributes") ++ } ++ ++ buf := make([]byte, size) ++ read, err := unix.Flistxattr(fd, buf) ++ if err != nil { ++ t.Fatalf("Flistxattr: %v", err) ++ } ++ ++ xattrs := stringsFromByteSlice(buf[:read]) ++ ++ xattrWant := xattrName ++ if runtime.GOOS == "freebsd" { ++ // On FreeBSD, the namespace is stored separately from the xattr ++ // name and Listxattr doesn't return the namespace prefix. ++ xattrWant = strings.TrimPrefix(xattrWant, "user.") ++ } ++ found := false ++ for _, name := range xattrs { ++ if name == xattrWant { ++ found = true ++ } ++ } ++ ++ if !found { ++ t.Errorf("Flistxattr did not return previously set attribute '%s'", xattrName) ++ } ++ ++ // find size ++ size, err = unix.Fgetxattr(fd, xattrName, nil) ++ if err != nil { ++ t.Fatalf("Fgetxattr: %v", err) ++ } ++ ++ if size <= 0 { ++ t.Fatalf("Fgetxattr returned an empty attribute") ++ } ++ ++ xattrDataGet := make([]byte, size) ++ _, err = unix.Fgetxattr(fd, xattrName, xattrDataGet) ++ if err != nil { ++ t.Fatalf("Fgetxattr: %v", err) ++ } ++ ++ got := string(xattrDataGet) ++ if got != xattrDataSet { ++ t.Errorf("Fgetxattr: expected attribute value %s, got %s", xattrDataSet, got) ++ } ++ ++ err = unix.Fremovexattr(fd, xattrName) ++ if err != nil { ++ t.Fatalf("Fremovexattr: %v", err) ++ } ++} +diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go +index f8bd50c..6e3cfec 100644 +--- a/vendor/golang.org/x/sys/unix/zerrors_linux.go ++++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go +@@ -160,28 +160,78 @@ const ( + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 ++ BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff ++ BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38 + BPF_ALU = 0x4 + BPF_ALU64 = 0x7 + BPF_AND = 0x50 ++ BPF_ANY = 0x0 + BPF_ARSH = 0xc0 + BPF_B = 0x10 + BPF_BUILD_ID_SIZE = 0x14 + BPF_CALL = 0x80 ++ BPF_DEVCG_ACC_MKNOD = 0x1 ++ BPF_DEVCG_ACC_READ = 0x2 ++ BPF_DEVCG_ACC_WRITE = 0x4 ++ BPF_DEVCG_DEV_BLOCK = 0x1 ++ BPF_DEVCG_DEV_CHAR = 0x2 + BPF_DIV = 0x30 + BPF_DW = 0x18 + BPF_END = 0xd0 ++ BPF_EXIST = 0x2 + BPF_EXIT = 0x90 ++ BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG = 0x1 ++ BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP = 0x4 ++ BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL = 0x2 + BPF_FROM_BE = 0x8 + BPF_FROM_LE = 0x0 + BPF_FS_MAGIC = 0xcafe4a11 ++ BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 0x2 ++ BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 0x4 ++ BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 0x8 ++ BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10 ++ BPF_F_ADJ_ROOM_FIXED_GSO = 0x1 + BPF_F_ALLOW_MULTI = 0x2 + BPF_F_ALLOW_OVERRIDE = 0x1 + BPF_F_ANY_ALIGNMENT = 0x2 ++ BPF_F_CLONE = 0x200 ++ BPF_F_CTXLEN_MASK = 0xfffff00000000 ++ BPF_F_CURRENT_CPU = 0xffffffff ++ BPF_F_CURRENT_NETNS = -0x1 ++ BPF_F_DONT_FRAGMENT = 0x4 ++ BPF_F_FAST_STACK_CMP = 0x200 ++ BPF_F_HDR_FIELD_MASK = 0xf ++ BPF_F_INDEX_MASK = 0xffffffff ++ BPF_F_INGRESS = 0x1 ++ BPF_F_INVALIDATE_HASH = 0x2 ++ BPF_F_LOCK = 0x4 ++ BPF_F_MARK_ENFORCE = 0x40 ++ BPF_F_MARK_MANGLED_0 = 0x20 ++ BPF_F_MMAPABLE = 0x400 ++ BPF_F_NO_COMMON_LRU = 0x2 ++ BPF_F_NO_PREALLOC = 0x1 ++ BPF_F_NUMA_NODE = 0x4 ++ BPF_F_PSEUDO_HDR = 0x10 + BPF_F_QUERY_EFFECTIVE = 0x1 ++ BPF_F_RDONLY = 0x8 ++ BPF_F_RDONLY_PROG = 0x80 ++ BPF_F_RECOMPUTE_CSUM = 0x1 + BPF_F_REPLACE = 0x4 ++ BPF_F_REUSE_STACKID = 0x400 ++ BPF_F_SEQ_NUMBER = 0x8 ++ BPF_F_SKIP_FIELD_MASK = 0xff ++ BPF_F_STACK_BUILD_ID = 0x20 + BPF_F_STRICT_ALIGNMENT = 0x1 ++ BPF_F_SYSCTL_BASE_NAME = 0x1 + BPF_F_TEST_RND_HI32 = 0x4 + BPF_F_TEST_STATE_FREQ = 0x8 ++ BPF_F_TUNINFO_IPV6 = 0x1 ++ BPF_F_USER_BUILD_ID = 0x800 ++ BPF_F_USER_STACK = 0x100 ++ BPF_F_WRONLY = 0x10 ++ BPF_F_WRONLY_PROG = 0x100 ++ BPF_F_ZERO_CSUM_TX = 0x2 ++ BPF_F_ZERO_SEED = 0x40 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 +@@ -217,6 +267,7 @@ const ( + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 ++ BPF_NOEXIST = 0x1 + BPF_OBJ_NAME_LEN = 0x10 + BPF_OR = 0x40 + BPF_PSEUDO_CALL = 0x1 +@@ -224,6 +275,12 @@ const ( + BPF_PSEUDO_MAP_VALUE = 0x2 + BPF_RET = 0x6 + BPF_RSH = 0x70 ++ BPF_SK_STORAGE_GET_F_CREATE = 0x1 ++ BPF_SOCK_OPS_ALL_CB_FLAGS = 0xf ++ BPF_SOCK_OPS_RETRANS_CB_FLAG = 0x2 ++ BPF_SOCK_OPS_RTO_CB_FLAG = 0x1 ++ BPF_SOCK_OPS_RTT_CB_FLAG = 0x8 ++ BPF_SOCK_OPS_STATE_CB_FLAG = 0x4 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 +@@ -321,14 +378,12 @@ const ( + CLOCK_TXINT = 0x3 + CLONE_ARGS_SIZE_VER0 = 0x40 + CLONE_ARGS_SIZE_VER1 = 0x50 +- CLONE_ARGS_SIZE_VER2 = 0x58 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_CLEAR_SIGHAND = 0x100000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 +- CLONE_INTO_CGROUP = 0x200000000 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 +@@ -543,9 +598,7 @@ const ( + FAN_DELETE = 0x200 + FAN_DELETE_SELF = 0x400 + FAN_DENY = 0x2 +- FAN_DIR_MODIFY = 0x80000 + FAN_ENABLE_AUDIT = 0x40 +- FAN_EVENT_INFO_TYPE_DFID_NAME = 0x2 + FAN_EVENT_INFO_TYPE_FID = 0x1 + FAN_EVENT_METADATA_LEN = 0x18 + FAN_EVENT_ON_CHILD = 0x8000000 +@@ -2055,6 +2108,8 @@ const ( + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 ++ TCP_BPF_IW = 0x3e9 ++ TCP_BPF_SNDCWND_CLAMP = 0x3ea + TCP_CC_INFO = 0x1a + TCP_CM_INQ = 0x24 + TCP_CONGESTION = 0xd +@@ -2329,9 +2384,8 @@ const ( + XDP_COPY = 0x2 + XDP_FLAGS_DRV_MODE = 0x4 + XDP_FLAGS_HW_MODE = 0x8 +- XDP_FLAGS_MASK = 0x1f ++ XDP_FLAGS_MASK = 0xf + XDP_FLAGS_MODES = 0xe +- XDP_FLAGS_REPLACE = 0x10 + XDP_FLAGS_SKB_MODE = 0x2 + XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1 + XDP_MMAP_OFFSETS = 0x1 +diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +index 8d207b0..5e97411 100644 +--- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go ++++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +@@ -75,7 +75,6 @@ const ( + FP_XSTATE_MAGIC2 = 0x46505845 + FS_IOC_ENABLE_VERITY = 0x40806685 + FS_IOC_GETFLAGS = 0x80046601 +- FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 +diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +index c4bf9cb..47a57fe 100644 +--- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go ++++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +@@ -75,7 +75,6 @@ const ( + FP_XSTATE_MAGIC2 = 0x46505845 + FS_IOC_ENABLE_VERITY = 0x40806685 + FS_IOC_GETFLAGS = 0x80086601 +- FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 +diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +index 0cab052..df2eea4 100644 +--- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go ++++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +@@ -74,7 +74,6 @@ const ( + FLUSHO = 0x1000 + FS_IOC_ENABLE_VERITY = 0x40806685 + FS_IOC_GETFLAGS = 0x80046601 +- FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 +diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +index 370d0a7..4e12142 100644 +--- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go ++++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +@@ -77,7 +77,6 @@ const ( + FPSIMD_MAGIC = 0x46508001 + FS_IOC_ENABLE_VERITY = 0x40806685 + FS_IOC_GETFLAGS = 0x80086601 +- FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 +diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +new file mode 100644 +index 0000000..8e17568 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +@@ -0,0 +1,782 @@ ++// mkerrors.sh -Wall -Werror -static -I/tmp/include -fsigned-char ++// Code generated by the command above; see README.md. DO NOT EDIT. ++ ++// copied from arm64 ++// TODO: auto-generate ++ ++// +build loong64,linux ++ ++// Code generated by cmd/cgo -godefs; DO NOT EDIT. ++// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _const.go ++ ++package unix ++ ++import "syscall" ++ ++const ( ++ B1000000 = 0x1008 ++ B115200 = 0x1002 ++ B1152000 = 0x1009 ++ B1500000 = 0x100a ++ B2000000 = 0x100b ++ B230400 = 0x1003 ++ B2500000 = 0x100c ++ B3000000 = 0x100d ++ B3500000 = 0x100e ++ B4000000 = 0x100f ++ B460800 = 0x1004 ++ B500000 = 0x1005 ++ B57600 = 0x1001 ++ B576000 = 0x1006 ++ B921600 = 0x1007 ++ BLKBSZGET = 0x80081270 ++ BLKBSZSET = 0x40081271 ++ BLKFLSBUF = 0x1261 ++ BLKFRAGET = 0x1265 ++ BLKFRASET = 0x1264 ++ BLKGETSIZE = 0x1260 ++ BLKGETSIZE64 = 0x80081272 ++ BLKPBSZGET = 0x127b ++ BLKRAGET = 0x1263 ++ BLKRASET = 0x1262 ++ BLKROGET = 0x125e ++ BLKROSET = 0x125d ++ BLKRRPART = 0x125f ++ BLKSECTGET = 0x1267 ++ BLKSECTSET = 0x1266 ++ BLKSSZGET = 0x1268 ++ BOTHER = 0x1000 ++ BS1 = 0x2000 ++ BSDLY = 0x2000 ++ CBAUD = 0x100f ++ CBAUDEX = 0x1000 ++ CIBAUD = 0x100f0000 ++ CLOCAL = 0x800 ++ CR1 = 0x200 ++ CR2 = 0x400 ++ CR3 = 0x600 ++ CRDLY = 0x600 ++ CREAD = 0x80 ++ CS6 = 0x10 ++ CS7 = 0x20 ++ CS8 = 0x30 ++ CSIZE = 0x30 ++ CSTOPB = 0x40 ++ ECHOCTL = 0x200 ++ ECHOE = 0x10 ++ ECHOK = 0x20 ++ ECHOKE = 0x800 ++ ECHONL = 0x40 ++ ECHOPRT = 0x400 ++ EFD_CLOEXEC = 0x80000 ++ EFD_NONBLOCK = 0x800 ++ EPOLL_CLOEXEC = 0x80000 ++ ESR_MAGIC = 0x45535201 ++ EXTPROC = 0x10000 ++ EXTRA_MAGIC = 0x45585401 ++ FF1 = 0x8000 ++ FFDLY = 0x8000 ++ FLUSHO = 0x1000 ++ FPSIMD_MAGIC = 0x46508001 ++ FS_IOC_ENABLE_VERITY = 0x40806685 ++ FS_IOC_GETFLAGS = 0x80086601 ++ FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 ++ FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 ++ FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 ++ F_GETLK = 0x5 ++ F_GETLK64 = 0x5 ++ F_GETOWN = 0x9 ++ F_RDLCK = 0x0 ++ F_SETLK = 0x6 ++ F_SETLK64 = 0x6 ++ F_SETLKW = 0x7 ++ F_SETLKW64 = 0x7 ++ F_SETOWN = 0x8 ++ F_UNLCK = 0x2 ++ F_WRLCK = 0x1 ++ HUPCL = 0x400 ++ ICANON = 0x2 ++ IEXTEN = 0x8000 ++ IN_CLOEXEC = 0x80000 ++ IN_NONBLOCK = 0x800 ++ IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 ++ ISIG = 0x1 ++ IUCLC = 0x200 ++ IXOFF = 0x1000 ++ IXON = 0x400 ++ MAP_ANON = 0x20 ++ MAP_ANONYMOUS = 0x20 ++ MAP_DENYWRITE = 0x800 ++ MAP_EXECUTABLE = 0x1000 ++ MAP_GROWSDOWN = 0x100 ++ MAP_HUGETLB = 0x40000 ++ MAP_LOCKED = 0x2000 ++ MAP_NONBLOCK = 0x10000 ++ MAP_NORESERVE = 0x4000 ++ MAP_POPULATE = 0x8000 ++ MAP_STACK = 0x20000 ++ MAP_SYNC = 0x80000 ++ MCL_CURRENT = 0x1 ++ MCL_FUTURE = 0x2 ++ MCL_ONFAULT = 0x4 ++ NFDBITS = 0x40 ++ NLDLY = 0x100 ++ NOFLSH = 0x80 ++ NS_GET_NSTYPE = 0xb703 ++ NS_GET_OWNER_UID = 0xb704 ++ NS_GET_PARENT = 0xb702 ++ NS_GET_USERNS = 0xb701 ++ OLCUC = 0x2 ++ ONLCR = 0x4 ++ O_APPEND = 0x400 ++ O_ASYNC = 0x2000 ++ O_CLOEXEC = 0x80000 ++ O_CREAT = 0x40 ++ O_DIRECT = 0x4000 ++ O_DIRECTORY = 0x10000 ++ O_DSYNC = 0x1000 ++ O_EXCL = 0x80 ++ O_FSYNC = 0x101000 ++ O_LARGEFILE = 0x0 ++ O_NDELAY = 0x800 ++ O_NOATIME = 0x40000 ++ O_NOCTTY = 0x100 ++ O_NOFOLLOW = 0x20000 ++ O_NONBLOCK = 0x800 ++ O_PATH = 0x200000 ++ O_RSYNC = 0x101000 ++ O_SYNC = 0x101000 ++ O_TMPFILE = 0x404000 ++ O_TRUNC = 0x200 ++ PARENB = 0x100 ++ PARODD = 0x200 ++ PENDIN = 0x4000 ++ PERF_EVENT_IOC_DISABLE = 0x2401 ++ PERF_EVENT_IOC_ENABLE = 0x2400 ++ PERF_EVENT_IOC_ID = 0x80082407 ++ PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b ++ PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 ++ PERF_EVENT_IOC_PERIOD = 0x40082404 ++ PERF_EVENT_IOC_QUERY_BPF = 0xc008240a ++ PERF_EVENT_IOC_REFRESH = 0x2402 ++ PERF_EVENT_IOC_RESET = 0x2403 ++ PERF_EVENT_IOC_SET_BPF = 0x40042408 ++ PERF_EVENT_IOC_SET_FILTER = 0x40082406 ++ PERF_EVENT_IOC_SET_OUTPUT = 0x2405 ++ PPPIOCATTACH = 0x4004743d ++ PPPIOCATTCHAN = 0x40047438 ++ PPPIOCCONNECT = 0x4004743a ++ PPPIOCDETACH = 0x4004743c ++ PPPIOCDISCONN = 0x7439 ++ PPPIOCGASYNCMAP = 0x80047458 ++ PPPIOCGCHAN = 0x80047437 ++ PPPIOCGDEBUG = 0x80047441 ++ PPPIOCGFLAGS = 0x8004745a ++ PPPIOCGIDLE = 0x8010743f ++ PPPIOCGIDLE32 = 0x8008743f ++ PPPIOCGIDLE64 = 0x8010743f ++ PPPIOCGL2TPSTATS = 0x80487436 ++ PPPIOCGMRU = 0x80047453 ++ PPPIOCGRASYNCMAP = 0x80047455 ++ PPPIOCGUNIT = 0x80047456 ++ PPPIOCGXASYNCMAP = 0x80207450 ++ PPPIOCSACTIVE = 0x40107446 ++ PPPIOCSASYNCMAP = 0x40047457 ++ PPPIOCSCOMPRESS = 0x4010744d ++ PPPIOCSDEBUG = 0x40047440 ++ PPPIOCSFLAGS = 0x40047459 ++ PPPIOCSMAXCID = 0x40047451 ++ PPPIOCSMRRU = 0x4004743b ++ PPPIOCSMRU = 0x40047452 ++ PPPIOCSNPMODE = 0x4008744b ++ PPPIOCSPASS = 0x40107447 ++ PPPIOCSRASYNCMAP = 0x40047454 ++ PPPIOCSXASYNCMAP = 0x4020744f ++ PPPIOCXFERUNIT = 0x744e ++ PR_SET_PTRACER_ANY = 0xffffffffffffffff ++ PTRACE_SYSEMU = 0x1f ++ PTRACE_SYSEMU_SINGLESTEP = 0x20 ++ RLIMIT_AS = 0x9 ++ RLIMIT_MEMLOCK = 0x8 ++ RLIMIT_NOFILE = 0x7 ++ RLIMIT_NPROC = 0x6 ++ RLIMIT_RSS = 0x5 ++ RNDADDENTROPY = 0x40085203 ++ RNDADDTOENTCNT = 0x40045201 ++ RNDCLEARPOOL = 0x5206 ++ RNDGETENTCNT = 0x80045200 ++ RNDGETPOOL = 0x80085202 ++ RNDRESEEDCRNG = 0x5207 ++ RNDZAPENTCNT = 0x5204 ++ RTC_AIE_OFF = 0x7002 ++ RTC_AIE_ON = 0x7001 ++ RTC_ALM_READ = 0x80247008 ++ RTC_ALM_SET = 0x40247007 ++ RTC_EPOCH_READ = 0x8008700d ++ RTC_EPOCH_SET = 0x4008700e ++ RTC_IRQP_READ = 0x8008700b ++ RTC_IRQP_SET = 0x4008700c ++ RTC_PIE_OFF = 0x7006 ++ RTC_PIE_ON = 0x7005 ++ RTC_PLL_GET = 0x80207011 ++ RTC_PLL_SET = 0x40207012 ++ RTC_RD_TIME = 0x80247009 ++ RTC_SET_TIME = 0x4024700a ++ RTC_UIE_OFF = 0x7004 ++ RTC_UIE_ON = 0x7003 ++ RTC_VL_CLR = 0x7014 ++ RTC_VL_READ = 0x80047013 ++ RTC_WIE_OFF = 0x7010 ++ RTC_WIE_ON = 0x700f ++ RTC_WKALM_RD = 0x80287010 ++ RTC_WKALM_SET = 0x4028700f ++ SCM_TIMESTAMPING = 0x25 ++ SCM_TIMESTAMPING_OPT_STATS = 0x36 ++ SCM_TIMESTAMPING_PKTINFO = 0x3a ++ SCM_TIMESTAMPNS = 0x23 ++ SCM_TXTIME = 0x3d ++ SCM_WIFI_STATUS = 0x29 ++ SFD_CLOEXEC = 0x80000 ++ SFD_NONBLOCK = 0x800 ++ SIOCATMARK = 0x8905 ++ SIOCGPGRP = 0x8904 ++ SIOCGSTAMPNS_NEW = 0x80108907 ++ SIOCGSTAMP_NEW = 0x80108906 ++ SIOCINQ = 0x541b ++ SIOCOUTQ = 0x5411 ++ SIOCSPGRP = 0x8902 ++ SOCK_CLOEXEC = 0x80000 ++ SOCK_DGRAM = 0x2 ++ SOCK_NONBLOCK = 0x800 ++ SOCK_STREAM = 0x1 ++ SOL_SOCKET = 0x1 ++ SO_ACCEPTCONN = 0x1e ++ SO_ATTACH_BPF = 0x32 ++ SO_ATTACH_REUSEPORT_CBPF = 0x33 ++ SO_ATTACH_REUSEPORT_EBPF = 0x34 ++ SO_BINDTODEVICE = 0x19 ++ SO_BINDTOIFINDEX = 0x3e ++ SO_BPF_EXTENSIONS = 0x30 ++ SO_BROADCAST = 0x6 ++ SO_BSDCOMPAT = 0xe ++ SO_BUSY_POLL = 0x2e ++ SO_CNX_ADVICE = 0x35 ++ SO_COOKIE = 0x39 ++ SO_DETACH_REUSEPORT_BPF = 0x44 ++ SO_DOMAIN = 0x27 ++ SO_DONTROUTE = 0x5 ++ SO_ERROR = 0x4 ++ SO_INCOMING_CPU = 0x31 ++ SO_INCOMING_NAPI_ID = 0x38 ++ SO_KEEPALIVE = 0x9 ++ SO_LINGER = 0xd ++ SO_LOCK_FILTER = 0x2c ++ SO_MARK = 0x24 ++ SO_MAX_PACING_RATE = 0x2f ++ SO_MEMINFO = 0x37 ++ SO_NOFCS = 0x2b ++ SO_OOBINLINE = 0xa ++ SO_PASSCRED = 0x10 ++ SO_PASSSEC = 0x22 ++ SO_PEEK_OFF = 0x2a ++ SO_PEERCRED = 0x11 ++ SO_PEERGROUPS = 0x3b ++ SO_PEERSEC = 0x1f ++ SO_PROTOCOL = 0x26 ++ SO_RCVBUF = 0x8 ++ SO_RCVBUFFORCE = 0x21 ++ SO_RCVLOWAT = 0x12 ++ SO_RCVTIMEO = 0x14 ++ SO_RCVTIMEO_NEW = 0x42 ++ SO_RCVTIMEO_OLD = 0x14 ++ SO_REUSEADDR = 0x2 ++ SO_REUSEPORT = 0xf ++ SO_RXQ_OVFL = 0x28 ++ SO_SECURITY_AUTHENTICATION = 0x16 ++ SO_SECURITY_ENCRYPTION_NETWORK = 0x18 ++ SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 ++ SO_SELECT_ERR_QUEUE = 0x2d ++ SO_SNDBUF = 0x7 ++ SO_SNDBUFFORCE = 0x20 ++ SO_SNDLOWAT = 0x13 ++ SO_SNDTIMEO = 0x15 ++ SO_SNDTIMEO_NEW = 0x43 ++ SO_SNDTIMEO_OLD = 0x15 ++ SO_TIMESTAMPING = 0x25 ++ SO_TIMESTAMPING_NEW = 0x41 ++ SO_TIMESTAMPING_OLD = 0x25 ++ SO_TIMESTAMPNS = 0x23 ++ SO_TIMESTAMPNS_NEW = 0x40 ++ SO_TIMESTAMPNS_OLD = 0x23 ++ SO_TIMESTAMP_NEW = 0x3f ++ SO_TXTIME = 0x3d ++ SO_TYPE = 0x3 ++ SO_WIFI_STATUS = 0x29 ++ SO_ZEROCOPY = 0x3c ++ SVE_MAGIC = 0x53564501 ++ TAB1 = 0x800 ++ TAB2 = 0x1000 ++ TAB3 = 0x1800 ++ TABDLY = 0x1800 ++ TCFLSH = 0x540b ++ TCGETA = 0x5405 ++ TCGETS = 0x5401 ++ TCGETS2 = 0x802c542a ++ TCGETX = 0x5432 ++ TCSAFLUSH = 0x2 ++ TCSBRK = 0x5409 ++ TCSBRKP = 0x5425 ++ TCSETA = 0x5406 ++ TCSETAF = 0x5408 ++ TCSETAW = 0x5407 ++ TCSETS = 0x5402 ++ TCSETS2 = 0x402c542b ++ TCSETSF = 0x5404 ++ TCSETSF2 = 0x402c542d ++ TCSETSW = 0x5403 ++ TCSETSW2 = 0x402c542c ++ TCSETX = 0x5433 ++ TCSETXF = 0x5434 ++ TCSETXW = 0x5435 ++ TCXONC = 0x540a ++ TFD_CLOEXEC = 0x80000 ++ TFD_NONBLOCK = 0x800 ++ TIOCCBRK = 0x5428 ++ TIOCCONS = 0x541d ++ TIOCEXCL = 0x540c ++ TIOCGDEV = 0x80045432 ++ TIOCGETD = 0x5424 ++ TIOCGEXCL = 0x80045440 ++ TIOCGICOUNT = 0x545d ++ TIOCGISO7816 = 0x80285442 ++ TIOCGLCKTRMIOS = 0x5456 ++ TIOCGPGRP = 0x540f ++ TIOCGPKT = 0x80045438 ++ TIOCGPTLCK = 0x80045439 ++ TIOCGPTN = 0x80045430 ++ TIOCGPTPEER = 0x5441 ++ TIOCGRS485 = 0x542e ++ TIOCGSERIAL = 0x541e ++ TIOCGSID = 0x5429 ++ TIOCGSOFTCAR = 0x5419 ++ TIOCGWINSZ = 0x5413 ++ TIOCINQ = 0x541b ++ TIOCLINUX = 0x541c ++ TIOCMBIC = 0x5417 ++ TIOCMBIS = 0x5416 ++ TIOCMGET = 0x5415 ++ TIOCMIWAIT = 0x545c ++ TIOCMSET = 0x5418 ++ TIOCM_CAR = 0x40 ++ TIOCM_CD = 0x40 ++ TIOCM_CTS = 0x20 ++ TIOCM_DSR = 0x100 ++ TIOCM_RI = 0x80 ++ TIOCM_RNG = 0x80 ++ TIOCM_SR = 0x10 ++ TIOCM_ST = 0x8 ++ TIOCNOTTY = 0x5422 ++ TIOCNXCL = 0x540d ++ TIOCOUTQ = 0x5411 ++ TIOCPKT = 0x5420 ++ TIOCSBRK = 0x5427 ++ TIOCSCTTY = 0x540e ++ TIOCSERCONFIG = 0x5453 ++ TIOCSERGETLSR = 0x5459 ++ TIOCSERGETMULTI = 0x545a ++ TIOCSERGSTRUCT = 0x5458 ++ TIOCSERGWILD = 0x5454 ++ TIOCSERSETMULTI = 0x545b ++ TIOCSERSWILD = 0x5455 ++ TIOCSER_TEMT = 0x1 ++ TIOCSETD = 0x5423 ++ TIOCSIG = 0x40045436 ++ TIOCSISO7816 = 0xc0285443 ++ TIOCSLCKTRMIOS = 0x5457 ++ TIOCSPGRP = 0x5410 ++ TIOCSPTLCK = 0x40045431 ++ TIOCSRS485 = 0x542f ++ TIOCSSERIAL = 0x541f ++ TIOCSSOFTCAR = 0x541a ++ TIOCSTI = 0x5412 ++ TIOCSWINSZ = 0x5414 ++ TIOCVHANGUP = 0x5437 ++ TOSTOP = 0x100 ++ TUNATTACHFILTER = 0x401054d5 ++ TUNDETACHFILTER = 0x401054d6 ++ TUNGETDEVNETNS = 0x54e3 ++ TUNGETFEATURES = 0x800454cf ++ TUNGETFILTER = 0x801054db ++ TUNGETIFF = 0x800454d2 ++ TUNGETSNDBUF = 0x800454d3 ++ TUNGETVNETBE = 0x800454df ++ TUNGETVNETHDRSZ = 0x800454d7 ++ TUNGETVNETLE = 0x800454dd ++ TUNSETCARRIER = 0x400454e2 ++ TUNSETDEBUG = 0x400454c9 ++ TUNSETFILTEREBPF = 0x800454e1 ++ TUNSETGROUP = 0x400454ce ++ TUNSETIFF = 0x400454ca ++ TUNSETIFINDEX = 0x400454da ++ TUNSETLINK = 0x400454cd ++ TUNSETNOCSUM = 0x400454c8 ++ TUNSETOFFLOAD = 0x400454d0 ++ TUNSETOWNER = 0x400454cc ++ TUNSETPERSIST = 0x400454cb ++ TUNSETQUEUE = 0x400454d9 ++ TUNSETSNDBUF = 0x400454d4 ++ TUNSETSTEERINGEBPF = 0x800454e0 ++ TUNSETTXFILTER = 0x400454d1 ++ TUNSETVNETBE = 0x400454de ++ TUNSETVNETHDRSZ = 0x400454d8 ++ TUNSETVNETLE = 0x400454dc ++ UBI_IOCATT = 0x40186f40 ++ UBI_IOCDET = 0x40046f41 ++ UBI_IOCEBCH = 0x40044f02 ++ UBI_IOCEBER = 0x40044f01 ++ UBI_IOCEBISMAP = 0x80044f05 ++ UBI_IOCEBMAP = 0x40084f03 ++ UBI_IOCEBUNMAP = 0x40044f04 ++ UBI_IOCMKVOL = 0x40986f00 ++ UBI_IOCRMVOL = 0x40046f01 ++ UBI_IOCRNVOL = 0x51106f03 ++ UBI_IOCRPEB = 0x40046f04 ++ UBI_IOCRSVOL = 0x400c6f02 ++ UBI_IOCSETVOLPROP = 0x40104f06 ++ UBI_IOCSPEB = 0x40046f05 ++ UBI_IOCVOLCRBLK = 0x40804f07 ++ UBI_IOCVOLRMBLK = 0x4f08 ++ UBI_IOCVOLUP = 0x40084f00 ++ VDISCARD = 0xd ++ VEOF = 0x4 ++ VEOL = 0xb ++ VEOL2 = 0x10 ++ VMIN = 0x6 ++ VREPRINT = 0xc ++ VSTART = 0x8 ++ VSTOP = 0x9 ++ VSUSP = 0xa ++ VSWTC = 0x7 ++ VT1 = 0x4000 ++ VTDLY = 0x4000 ++ VTIME = 0x5 ++ VWERASE = 0xe ++ WDIOC_GETBOOTSTATUS = 0x80045702 ++ WDIOC_GETPRETIMEOUT = 0x80045709 ++ WDIOC_GETSTATUS = 0x80045701 ++ WDIOC_GETSUPPORT = 0x80285700 ++ WDIOC_GETTEMP = 0x80045703 ++ WDIOC_GETTIMELEFT = 0x8004570a ++ WDIOC_GETTIMEOUT = 0x80045707 ++ WDIOC_KEEPALIVE = 0x80045705 ++ WDIOC_SETOPTIONS = 0x80045704 ++ WORDSIZE = 0x40 ++ XCASE = 0x4 ++ XTABS = 0x1800 ++) ++ ++// Errors ++const ( ++ EADDRINUSE = syscall.Errno(0x62) ++ EADDRNOTAVAIL = syscall.Errno(0x63) ++ EADV = syscall.Errno(0x44) ++ EAFNOSUPPORT = syscall.Errno(0x61) ++ EALREADY = syscall.Errno(0x72) ++ EBADE = syscall.Errno(0x34) ++ EBADFD = syscall.Errno(0x4d) ++ EBADMSG = syscall.Errno(0x4a) ++ EBADR = syscall.Errno(0x35) ++ EBADRQC = syscall.Errno(0x38) ++ EBADSLT = syscall.Errno(0x39) ++ EBFONT = syscall.Errno(0x3b) ++ ECANCELED = syscall.Errno(0x7d) ++ ECHRNG = syscall.Errno(0x2c) ++ ECOMM = syscall.Errno(0x46) ++ ECONNABORTED = syscall.Errno(0x67) ++ ECONNREFUSED = syscall.Errno(0x6f) ++ ECONNRESET = syscall.Errno(0x68) ++ EDEADLK = syscall.Errno(0x23) ++ EDEADLOCK = syscall.Errno(0x23) ++ EDESTADDRREQ = syscall.Errno(0x59) ++ EDOTDOT = syscall.Errno(0x49) ++ EDQUOT = syscall.Errno(0x7a) ++ EHOSTDOWN = syscall.Errno(0x70) ++ EHOSTUNREACH = syscall.Errno(0x71) ++ EHWPOISON = syscall.Errno(0x85) ++ EIDRM = syscall.Errno(0x2b) ++ EILSEQ = syscall.Errno(0x54) ++ EINPROGRESS = syscall.Errno(0x73) ++ EISCONN = syscall.Errno(0x6a) ++ EISNAM = syscall.Errno(0x78) ++ EKEYEXPIRED = syscall.Errno(0x7f) ++ EKEYREJECTED = syscall.Errno(0x81) ++ EKEYREVOKED = syscall.Errno(0x80) ++ EL2HLT = syscall.Errno(0x33) ++ EL2NSYNC = syscall.Errno(0x2d) ++ EL3HLT = syscall.Errno(0x2e) ++ EL3RST = syscall.Errno(0x2f) ++ ELIBACC = syscall.Errno(0x4f) ++ ELIBBAD = syscall.Errno(0x50) ++ ELIBEXEC = syscall.Errno(0x53) ++ ELIBMAX = syscall.Errno(0x52) ++ ELIBSCN = syscall.Errno(0x51) ++ ELNRNG = syscall.Errno(0x30) ++ ELOOP = syscall.Errno(0x28) ++ EMEDIUMTYPE = syscall.Errno(0x7c) ++ EMSGSIZE = syscall.Errno(0x5a) ++ EMULTIHOP = syscall.Errno(0x48) ++ ENAMETOOLONG = syscall.Errno(0x24) ++ ENAVAIL = syscall.Errno(0x77) ++ ENETDOWN = syscall.Errno(0x64) ++ ENETRESET = syscall.Errno(0x66) ++ ENETUNREACH = syscall.Errno(0x65) ++ ENOANO = syscall.Errno(0x37) ++ ENOBUFS = syscall.Errno(0x69) ++ ENOCSI = syscall.Errno(0x32) ++ ENODATA = syscall.Errno(0x3d) ++ ENOKEY = syscall.Errno(0x7e) ++ ENOLCK = syscall.Errno(0x25) ++ ENOLINK = syscall.Errno(0x43) ++ ENOMEDIUM = syscall.Errno(0x7b) ++ ENOMSG = syscall.Errno(0x2a) ++ ENONET = syscall.Errno(0x40) ++ ENOPKG = syscall.Errno(0x41) ++ ENOPROTOOPT = syscall.Errno(0x5c) ++ ENOSR = syscall.Errno(0x3f) ++ ENOSTR = syscall.Errno(0x3c) ++ ENOSYS = syscall.Errno(0x26) ++ ENOTCONN = syscall.Errno(0x6b) ++ ENOTEMPTY = syscall.Errno(0x27) ++ ENOTNAM = syscall.Errno(0x76) ++ ENOTRECOVERABLE = syscall.Errno(0x83) ++ ENOTSOCK = syscall.Errno(0x58) ++ ENOTSUP = syscall.Errno(0x5f) ++ ENOTUNIQ = syscall.Errno(0x4c) ++ EOPNOTSUPP = syscall.Errno(0x5f) ++ EOVERFLOW = syscall.Errno(0x4b) ++ EOWNERDEAD = syscall.Errno(0x82) ++ EPFNOSUPPORT = syscall.Errno(0x60) ++ EPROTO = syscall.Errno(0x47) ++ EPROTONOSUPPORT = syscall.Errno(0x5d) ++ EPROTOTYPE = syscall.Errno(0x5b) ++ EREMCHG = syscall.Errno(0x4e) ++ EREMOTE = syscall.Errno(0x42) ++ EREMOTEIO = syscall.Errno(0x79) ++ ERESTART = syscall.Errno(0x55) ++ ERFKILL = syscall.Errno(0x84) ++ ESHUTDOWN = syscall.Errno(0x6c) ++ ESOCKTNOSUPPORT = syscall.Errno(0x5e) ++ ESRMNT = syscall.Errno(0x45) ++ ESTALE = syscall.Errno(0x74) ++ ESTRPIPE = syscall.Errno(0x56) ++ ETIME = syscall.Errno(0x3e) ++ ETIMEDOUT = syscall.Errno(0x6e) ++ ETOOMANYREFS = syscall.Errno(0x6d) ++ EUCLEAN = syscall.Errno(0x75) ++ EUNATCH = syscall.Errno(0x31) ++ EUSERS = syscall.Errno(0x57) ++ EXFULL = syscall.Errno(0x36) ++) ++ ++// Signals ++const ( ++ SIGBUS = syscall.Signal(0x7) ++ SIGCHLD = syscall.Signal(0x11) ++ SIGCLD = syscall.Signal(0x11) ++ SIGCONT = syscall.Signal(0x12) ++ SIGIO = syscall.Signal(0x1d) ++ SIGPOLL = syscall.Signal(0x1d) ++ SIGPROF = syscall.Signal(0x1b) ++ SIGPWR = syscall.Signal(0x1e) ++ SIGSTKFLT = syscall.Signal(0x10) ++ SIGSTOP = syscall.Signal(0x13) ++ SIGSYS = syscall.Signal(0x1f) ++ SIGTSTP = syscall.Signal(0x14) ++ SIGTTIN = syscall.Signal(0x15) ++ SIGTTOU = syscall.Signal(0x16) ++ SIGURG = syscall.Signal(0x17) ++ SIGUSR1 = syscall.Signal(0xa) ++ SIGUSR2 = syscall.Signal(0xc) ++ SIGVTALRM = syscall.Signal(0x1a) ++ SIGWINCH = syscall.Signal(0x1c) ++ SIGXCPU = syscall.Signal(0x18) ++ SIGXFSZ = syscall.Signal(0x19) ++) ++ ++// Error table ++var errorList = [...]struct { ++ num syscall.Errno ++ name string ++ desc string ++}{ ++ {1, "EPERM", "operation not permitted"}, ++ {2, "ENOENT", "no such file or directory"}, ++ {3, "ESRCH", "no such process"}, ++ {4, "EINTR", "interrupted system call"}, ++ {5, "EIO", "input/output error"}, ++ {6, "ENXIO", "no such device or address"}, ++ {7, "E2BIG", "argument list too long"}, ++ {8, "ENOEXEC", "exec format error"}, ++ {9, "EBADF", "bad file descriptor"}, ++ {10, "ECHILD", "no child processes"}, ++ {11, "EAGAIN", "resource temporarily unavailable"}, ++ {12, "ENOMEM", "cannot allocate memory"}, ++ {13, "EACCES", "permission denied"}, ++ {14, "EFAULT", "bad address"}, ++ {15, "ENOTBLK", "block device required"}, ++ {16, "EBUSY", "device or resource busy"}, ++ {17, "EEXIST", "file exists"}, ++ {18, "EXDEV", "invalid cross-device link"}, ++ {19, "ENODEV", "no such device"}, ++ {20, "ENOTDIR", "not a directory"}, ++ {21, "EISDIR", "is a directory"}, ++ {22, "EINVAL", "invalid argument"}, ++ {23, "ENFILE", "too many open files in system"}, ++ {24, "EMFILE", "too many open files"}, ++ {25, "ENOTTY", "inappropriate ioctl for device"}, ++ {26, "ETXTBSY", "text file busy"}, ++ {27, "EFBIG", "file too large"}, ++ {28, "ENOSPC", "no space left on device"}, ++ {29, "ESPIPE", "illegal seek"}, ++ {30, "EROFS", "read-only file system"}, ++ {31, "EMLINK", "too many links"}, ++ {32, "EPIPE", "broken pipe"}, ++ {33, "EDOM", "numerical argument out of domain"}, ++ {34, "ERANGE", "numerical result out of range"}, ++ {35, "EDEADLK", "resource deadlock avoided"}, ++ {36, "ENAMETOOLONG", "file name too long"}, ++ {37, "ENOLCK", "no locks available"}, ++ {38, "ENOSYS", "function not implemented"}, ++ {39, "ENOTEMPTY", "directory not empty"}, ++ {40, "ELOOP", "too many levels of symbolic links"}, ++ {42, "ENOMSG", "no message of desired type"}, ++ {43, "EIDRM", "identifier removed"}, ++ {44, "ECHRNG", "channel number out of range"}, ++ {45, "EL2NSYNC", "level 2 not synchronized"}, ++ {46, "EL3HLT", "level 3 halted"}, ++ {47, "EL3RST", "level 3 reset"}, ++ {48, "ELNRNG", "link number out of range"}, ++ {49, "EUNATCH", "protocol driver not attached"}, ++ {50, "ENOCSI", "no CSI structure available"}, ++ {51, "EL2HLT", "level 2 halted"}, ++ {52, "EBADE", "invalid exchange"}, ++ {53, "EBADR", "invalid request descriptor"}, ++ {54, "EXFULL", "exchange full"}, ++ {55, "ENOANO", "no anode"}, ++ {56, "EBADRQC", "invalid request code"}, ++ {57, "EBADSLT", "invalid slot"}, ++ {59, "EBFONT", "bad font file format"}, ++ {60, "ENOSTR", "device not a stream"}, ++ {61, "ENODATA", "no data available"}, ++ {62, "ETIME", "timer expired"}, ++ {63, "ENOSR", "out of streams resources"}, ++ {64, "ENONET", "machine is not on the network"}, ++ {65, "ENOPKG", "package not installed"}, ++ {66, "EREMOTE", "object is remote"}, ++ {67, "ENOLINK", "link has been severed"}, ++ {68, "EADV", "advertise error"}, ++ {69, "ESRMNT", "srmount error"}, ++ {70, "ECOMM", "communication error on send"}, ++ {71, "EPROTO", "protocol error"}, ++ {72, "EMULTIHOP", "multihop attempted"}, ++ {73, "EDOTDOT", "RFS specific error"}, ++ {74, "EBADMSG", "bad message"}, ++ {75, "EOVERFLOW", "value too large for defined data type"}, ++ {76, "ENOTUNIQ", "name not unique on network"}, ++ {77, "EBADFD", "file descriptor in bad state"}, ++ {78, "EREMCHG", "remote address changed"}, ++ {79, "ELIBACC", "can not access a needed shared library"}, ++ {80, "ELIBBAD", "accessing a corrupted shared library"}, ++ {81, "ELIBSCN", ".lib section in a.out corrupted"}, ++ {82, "ELIBMAX", "attempting to link in too many shared libraries"}, ++ {83, "ELIBEXEC", "cannot exec a shared library directly"}, ++ {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, ++ {85, "ERESTART", "interrupted system call should be restarted"}, ++ {86, "ESTRPIPE", "streams pipe error"}, ++ {87, "EUSERS", "too many users"}, ++ {88, "ENOTSOCK", "socket operation on non-socket"}, ++ {89, "EDESTADDRREQ", "destination address required"}, ++ {90, "EMSGSIZE", "message too long"}, ++ {91, "EPROTOTYPE", "protocol wrong type for socket"}, ++ {92, "ENOPROTOOPT", "protocol not available"}, ++ {93, "EPROTONOSUPPORT", "protocol not supported"}, ++ {94, "ESOCKTNOSUPPORT", "socket type not supported"}, ++ {95, "ENOTSUP", "operation not supported"}, ++ {96, "EPFNOSUPPORT", "protocol family not supported"}, ++ {97, "EAFNOSUPPORT", "address family not supported by protocol"}, ++ {98, "EADDRINUSE", "address already in use"}, ++ {99, "EADDRNOTAVAIL", "cannot assign requested address"}, ++ {100, "ENETDOWN", "network is down"}, ++ {101, "ENETUNREACH", "network is unreachable"}, ++ {102, "ENETRESET", "network dropped connection on reset"}, ++ {103, "ECONNABORTED", "software caused connection abort"}, ++ {104, "ECONNRESET", "connection reset by peer"}, ++ {105, "ENOBUFS", "no buffer space available"}, ++ {106, "EISCONN", "transport endpoint is already connected"}, ++ {107, "ENOTCONN", "transport endpoint is not connected"}, ++ {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, ++ {109, "ETOOMANYREFS", "too many references: cannot splice"}, ++ {110, "ETIMEDOUT", "connection timed out"}, ++ {111, "ECONNREFUSED", "connection refused"}, ++ {112, "EHOSTDOWN", "host is down"}, ++ {113, "EHOSTUNREACH", "no route to host"}, ++ {114, "EALREADY", "operation already in progress"}, ++ {115, "EINPROGRESS", "operation now in progress"}, ++ {116, "ESTALE", "stale file handle"}, ++ {117, "EUCLEAN", "structure needs cleaning"}, ++ {118, "ENOTNAM", "not a XENIX named type file"}, ++ {119, "ENAVAIL", "no XENIX semaphores available"}, ++ {120, "EISNAM", "is a named type file"}, ++ {121, "EREMOTEIO", "remote I/O error"}, ++ {122, "EDQUOT", "disk quota exceeded"}, ++ {123, "ENOMEDIUM", "no medium found"}, ++ {124, "EMEDIUMTYPE", "wrong medium type"}, ++ {125, "ECANCELED", "operation canceled"}, ++ {126, "ENOKEY", "required key not available"}, ++ {127, "EKEYEXPIRED", "key has expired"}, ++ {128, "EKEYREVOKED", "key has been revoked"}, ++ {129, "EKEYREJECTED", "key was rejected by service"}, ++ {130, "EOWNERDEAD", "owner died"}, ++ {131, "ENOTRECOVERABLE", "state not recoverable"}, ++ {132, "ERFKILL", "operation not possible due to RF-kill"}, ++ {133, "EHWPOISON", "memory page has hardware error"}, ++} ++ ++// Signal table ++var signalList = [...]struct { ++ num syscall.Signal ++ name string ++ desc string ++}{ ++ {1, "SIGHUP", "hangup"}, ++ {2, "SIGINT", "interrupt"}, ++ {3, "SIGQUIT", "quit"}, ++ {4, "SIGILL", "illegal instruction"}, ++ {5, "SIGTRAP", "trace/breakpoint trap"}, ++ {6, "SIGABRT", "aborted"}, ++ {7, "SIGBUS", "bus error"}, ++ {8, "SIGFPE", "floating point exception"}, ++ {9, "SIGKILL", "killed"}, ++ {10, "SIGUSR1", "user defined signal 1"}, ++ {11, "SIGSEGV", "segmentation fault"}, ++ {12, "SIGUSR2", "user defined signal 2"}, ++ {13, "SIGPIPE", "broken pipe"}, ++ {14, "SIGALRM", "alarm clock"}, ++ {15, "SIGTERM", "terminated"}, ++ {16, "SIGSTKFLT", "stack fault"}, ++ {17, "SIGCHLD", "child exited"}, ++ {18, "SIGCONT", "continued"}, ++ {19, "SIGSTOP", "stopped (signal)"}, ++ {20, "SIGTSTP", "stopped"}, ++ {21, "SIGTTIN", "stopped (tty input)"}, ++ {22, "SIGTTOU", "stopped (tty output)"}, ++ {23, "SIGURG", "urgent I/O condition"}, ++ {24, "SIGXCPU", "CPU time limit exceeded"}, ++ {25, "SIGXFSZ", "file size limit exceeded"}, ++ {26, "SIGVTALRM", "virtual timer expired"}, ++ {27, "SIGPROF", "profiling timer expired"}, ++ {28, "SIGWINCH", "window changed"}, ++ {29, "SIGIO", "I/O possible"}, ++ {30, "SIGPWR", "power failure"}, ++ {31, "SIGSYS", "bad system call"}, ++} +diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +index fbf2f31..a23b080 100644 +--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go ++++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +@@ -74,7 +74,6 @@ const ( + FLUSHO = 0x2000 + FS_IOC_ENABLE_VERITY = 0x80806685 + FS_IOC_GETFLAGS = 0x40046601 +- FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 +diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +index 25e74b3..a5a921e 100644 +--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go ++++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +@@ -74,7 +74,6 @@ const ( + FLUSHO = 0x2000 + FS_IOC_ENABLE_VERITY = 0x80806685 + FS_IOC_GETFLAGS = 0x40086601 +- FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 +diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +index 4ecc0bc..d088e19 100644 +--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go ++++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +@@ -74,7 +74,6 @@ const ( + FLUSHO = 0x2000 + FS_IOC_ENABLE_VERITY = 0x80806685 + FS_IOC_GETFLAGS = 0x40086601 +- FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 +diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +index dfb8f88..0ddf9d5 100644 +--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go ++++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +@@ -74,7 +74,6 @@ const ( + FLUSHO = 0x2000 + FS_IOC_ENABLE_VERITY = 0x80806685 + FS_IOC_GETFLAGS = 0x40046601 +- FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 +diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +index 72d8dad..a93ffc1 100644 +--- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go ++++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +@@ -74,7 +74,6 @@ const ( + FLUSHO = 0x800000 + FS_IOC_ENABLE_VERITY = 0x80806685 + FS_IOC_GETFLAGS = 0x40086601 +- FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 +diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +index ca0e7b5..c1ea48b 100644 +--- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go ++++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +@@ -74,7 +74,6 @@ const ( + FLUSHO = 0x800000 + FS_IOC_ENABLE_VERITY = 0x80806685 + FS_IOC_GETFLAGS = 0x40086601 +- FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 +diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +index 147511a..7def950 100644 +--- a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go ++++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +@@ -74,7 +74,6 @@ const ( + FLUSHO = 0x1000 + FS_IOC_ENABLE_VERITY = 0x40806685 + FS_IOC_GETFLAGS = 0x80086601 +- FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 +diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +index 517349d..d39293c 100644 +--- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go ++++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +@@ -74,7 +74,6 @@ const ( + FLUSHO = 0x1000 + FS_IOC_ENABLE_VERITY = 0x40806685 + FS_IOC_GETFLAGS = 0x80086601 +- FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 +diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +index 0948224..3ff3ec6 100644 +--- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go ++++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +@@ -78,7 +78,6 @@ const ( + FLUSHO = 0x1000 + FS_IOC_ENABLE_VERITY = 0x80806685 + FS_IOC_GETFLAGS = 0x40086601 +- FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 +diff --git a/vendor/golang.org/x/sys/unix/zptrace_linux_loong64.go b/vendor/golang.org/x/sys/unix/zptrace_linux_loong64.go +new file mode 100644 +index 0000000..9882e06 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/zptrace_linux_loong64.go +@@ -0,0 +1,56 @@ ++// Code generated by linux/mkall.go generatePtraceRegSet("loong64"). DO NOT EDIT. ++// copied from arm, and modified by hand ++ ++package unix ++ ++import "unsafe" ++ ++// PtraceGetRegSetLoong64 fetches the registers used by loong64 binaries. ++func PtraceGetRegSetLoong64(pid, addr int, regsout *PtraceRegsLoong64) error { ++ iovec := Iovec{(*byte)(unsafe.Pointer(regsout)), uint64(unsafe.Sizeof(*regsout))} ++ return ptrace(PTRACE_GETREGSET, pid, uintptr(addr), uintptr(unsafe.Pointer(&iovec))) ++} ++ ++// PtraceSetRegSetLoong64 sets the registers used by loong64 binaries. ++func PtraceSetRegSetLoong64(pid, addr int, regs *PtraceRegsLoong64) error { ++ iovec := Iovec{(*byte)(unsafe.Pointer(regs)), uint64(unsafe.Sizeof(*regs))} ++ return ptrace(PTRACE_SETREGSET, pid, uintptr(addr), uintptr(unsafe.Pointer(&iovec))) ++} ++ ++// PtraceRegsLarch is the registers used by larch binaries. ++type PtraceRegsLarch struct { ++ Uregs [18]uint32 ++} ++ ++// PtraceGetRegsLarch fetches the registers used by larch binaries. ++func PtraceGetRegsLarch(pid int, regsout *PtraceRegsLarch) error { ++ return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) ++} ++ ++// PtraceSetRegsLarch sets the registers used by larch binaries. ++func PtraceSetRegsLarch(pid int, regs *PtraceRegsLarch) error { ++ return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) ++} ++ ++// PtraceRegsLoong64 is the registers used by loong64 binaries. ++type PtraceRegsLoong64 struct { ++ Regs [32]uint64 ++ Crmd uint64 ++ Prmd uint64 ++ Cu uint64 ++ Exconfig uint64 ++ Exst uint64 ++ Epc uint64 ++ Badvaddr uint64 ++ Orig_a0 uint64 ++} ++ ++// PtraceGetRegsLoong64 fetches the registers used by loong64 binaries. ++func PtraceGetRegsLoong64(pid int, regsout *PtraceRegsLoong64) error { ++ return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) ++} ++ ++// PtraceSetRegsLoong64 sets the registers used by loong64 binaries. ++func PtraceSetRegsLoong64(pid int, regs *PtraceRegsLoong64) error { ++ return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) ++} +diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_11.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_11.go +index 23e94d3..c1cc0a4 100644 +--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_11.go ++++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_11.go +@@ -966,16 +966,6 @@ func Getsid(pid int) (sid int, err error) { + + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +-func Gettimeofday(tp *Timeval) (err error) { +- _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) +- if e1 != 0 { +- err = errnoErr(e1) +- } +- return +-} +- +-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +- + func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) +@@ -1719,6 +1709,18 @@ func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + ++func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) { ++ r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) ++ sec = int32(r0) ++ usec = int32(r1) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ + func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { +diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go +index e2ffb3b..a3fc490 100644 +--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go ++++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go +@@ -1376,21 +1376,6 @@ func libc_getsid_trampoline() + + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +-func Gettimeofday(tp *Timeval) (err error) { +- _, _, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0) +- if e1 != 0 { +- err = errnoErr(e1) +- } +- return +-} +- +-func libc_gettimeofday_trampoline() +- +-//go:linkname libc_gettimeofday libc_gettimeofday +-//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib" +- +-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +- + func Getuid() (uid int) { + r0, _, _ := syscall_rawSyscall(funcPC(libc_getuid_trampoline), 0, 0, 0) + uid = int(r0) +@@ -2372,6 +2357,23 @@ func libc_ptrace_trampoline() + + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + ++func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) { ++ r0, r1, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0) ++ sec = int32(r0) ++ usec = int32(r1) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++func libc_gettimeofday_trampoline() ++ ++//go:linkname libc_gettimeofday libc_gettimeofday ++//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib" ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ + func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := syscall_syscall(funcPC(libc_fstat64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { +diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_11.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_11.go +index 1025617..f8e5c37 100644 +--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_11.go ++++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_11.go +@@ -966,16 +966,6 @@ func Getsid(pid int) (sid int, err error) { + + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +-func Gettimeofday(tp *Timeval) (err error) { +- _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) +- if e1 != 0 { +- err = errnoErr(e1) +- } +- return +-} +- +-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +- + func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) +@@ -1719,6 +1709,18 @@ func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + ++func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) { ++ r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) ++ sec = int64(r0) ++ usec = int32(r1) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ + func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { +diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +index c67e336..50d6437 100644 +--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go ++++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +@@ -1376,21 +1376,6 @@ func libc_getsid_trampoline() + + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +-func Gettimeofday(tp *Timeval) (err error) { +- _, _, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0) +- if e1 != 0 { +- err = errnoErr(e1) +- } +- return +-} +- +-func libc_gettimeofday_trampoline() +- +-//go:linkname libc_gettimeofday libc_gettimeofday +-//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib" +- +-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +- + func Getuid() (uid int) { + r0, _, _ := syscall_rawSyscall(funcPC(libc_getuid_trampoline), 0, 0, 0) + uid = int(r0) +@@ -2372,6 +2357,23 @@ func libc_ptrace_trampoline() + + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + ++func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) { ++ r0, r1, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0) ++ sec = int64(r0) ++ usec = int32(r1) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++func libc_gettimeofday_trampoline() ++ ++//go:linkname libc_gettimeofday libc_gettimeofday ++//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib" ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ + func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := syscall_syscall(funcPC(libc_fstat64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { +diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_11.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_11.go +index d34e6df..cea04e0 100644 +--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_11.go ++++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_11.go +@@ -966,16 +966,6 @@ func Getsid(pid int) (sid int, err error) { + + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +-func Gettimeofday(tp *Timeval) (err error) { +- _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) +- if e1 != 0 { +- err = errnoErr(e1) +- } +- return +-} +- +-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +- + func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) +@@ -1692,6 +1682,18 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + ++func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) { ++ r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) ++ sec = int32(r0) ++ usec = int32(r1) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ + func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { +diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go +index b759757..6310395 100644 +--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go ++++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go +@@ -1376,21 +1376,6 @@ func libc_getsid_trampoline() + + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +-func Gettimeofday(tp *Timeval) (err error) { +- _, _, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0) +- if e1 != 0 { +- err = errnoErr(e1) +- } +- return +-} +- +-func libc_gettimeofday_trampoline() +- +-//go:linkname libc_gettimeofday libc_gettimeofday +-//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib" +- +-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +- + func Getuid() (uid int) { + r0, _, _ := syscall_rawSyscall(funcPC(libc_getuid_trampoline), 0, 0, 0) + uid = int(r0) +@@ -2357,6 +2342,23 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + ++func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) { ++ r0, r1, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0) ++ sec = int32(r0) ++ usec = int32(r1) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++func libc_gettimeofday_trampoline() ++ ++//go:linkname libc_gettimeofday libc_gettimeofday ++//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib" ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ + func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := syscall_syscall(funcPC(libc_fstat_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { +diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_11.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_11.go +index 8d39a09..8c3bb3a 100644 +--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_11.go ++++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_11.go +@@ -966,16 +966,6 @@ func Getsid(pid int) (sid int, err error) { + + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +-func Gettimeofday(tp *Timeval) (err error) { +- _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) +- if e1 != 0 { +- err = errnoErr(e1) +- } +- return +-} +- +-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +- + func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) +@@ -1692,6 +1682,18 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + ++func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) { ++ r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) ++ sec = int64(r0) ++ usec = int32(r1) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ + func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { +diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +index b288612..a8709f7 100644 +--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go ++++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +@@ -1376,21 +1376,6 @@ func libc_getsid_trampoline() + + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +-func Gettimeofday(tp *Timeval) (err error) { +- _, _, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0) +- if e1 != 0 { +- err = errnoErr(e1) +- } +- return +-} +- +-func libc_gettimeofday_trampoline() +- +-//go:linkname libc_gettimeofday libc_gettimeofday +-//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib" +- +-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +- + func Getuid() (uid int) { + r0, _, _ := syscall_rawSyscall(funcPC(libc_getuid_trampoline), 0, 0, 0) + uid = int(r0) +@@ -2357,6 +2342,23 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + ++func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) { ++ r0, r1, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0) ++ sec = int64(r0) ++ usec = int32(r1) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++func libc_gettimeofday_trampoline() ++ ++//go:linkname libc_gettimeofday libc_gettimeofday ++//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib" ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ + func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := syscall_syscall(funcPC(libc_fstat_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { +diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go +new file mode 100644 +index 0000000..a9d51d7 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go +@@ -0,0 +1,605 @@ ++// go run mksyscall.go -tags linux,loong64 syscall_linux.go syscall_linux_loong64.go ++// Code generated by the command above; see README.md. DO NOT EDIT. ++ ++// copied from arm64 ++// TODO: auto-generate ++ ++// +build linux,loong64 ++ ++package unix ++ ++import ( ++ "syscall" ++ "unsafe" ++) ++ ++var _ syscall.Errno ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { ++ _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { ++ _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { ++ r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) ++ n = int64(r0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { ++ var _p0 unsafe.Pointer ++ if len(events) > 0 { ++ _p0 = unsafe.Pointer(&events[0]) ++ } else { ++ _p0 = unsafe.Pointer(&_zero) ++ } ++ r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) ++ n = int(r0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Fadvise(fd int, offset int64, length int64, advice int) (err error) { ++ _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Fchown(fd int, uid int, gid int) (err error) { ++ _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Fstat(fd int, stat *Stat_t) (err error) { ++ _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { ++ var _p0 *byte ++ _p0, err = BytePtrFromString(path) ++ if err != nil { ++ return ++ } ++ _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Fstatfs(fd int, buf *Statfs_t) (err error) { ++ _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Ftruncate(fd int, length int64) (err error) { ++ _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Getegid() (egid int) { ++ r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) ++ egid = int(r0) ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Geteuid() (euid int) { ++ r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) ++ euid = int(r0) ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Getgid() (gid int) { ++ r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) ++ gid = int(r0) ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Getrlimit(resource int, rlim *Rlimit) (err error) { ++ _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Getuid() (uid int) { ++ r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) ++ uid = int(r0) ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Listen(s int, n int) (err error) { ++ _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Pread(fd int, p []byte, offset int64) (n int, err error) { ++ var _p0 unsafe.Pointer ++ if len(p) > 0 { ++ _p0 = unsafe.Pointer(&p[0]) ++ } else { ++ _p0 = unsafe.Pointer(&_zero) ++ } ++ r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) ++ n = int(r0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Pwrite(fd int, p []byte, offset int64) (n int, err error) { ++ var _p0 unsafe.Pointer ++ if len(p) > 0 { ++ _p0 = unsafe.Pointer(&p[0]) ++ } else { ++ _p0 = unsafe.Pointer(&_zero) ++ } ++ r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) ++ n = int(r0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { ++ var _p0 *byte ++ _p0, err = BytePtrFromString(oldpath) ++ if err != nil { ++ return ++ } ++ var _p1 *byte ++ _p1, err = BytePtrFromString(newpath) ++ if err != nil { ++ return ++ } ++ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Seek(fd int, offset int64, whence int) (off int64, err error) { ++ r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) ++ off = int64(r0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { ++ r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) ++ written = int(r0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func setfsgid(gid int) (prev int, err error) { ++ r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) ++ prev = int(r0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func setfsuid(uid int) (prev int, err error) { ++ r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) ++ prev = int(r0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Setregid(rgid int, egid int) (err error) { ++ _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Setresgid(rgid int, egid int, sgid int) (err error) { ++ _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Setresuid(ruid int, euid int, suid int) (err error) { ++ _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Setrlimit(resource int, rlim *Rlimit) (err error) { ++ _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Setreuid(ruid int, euid int) (err error) { ++ _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Shutdown(fd int, how int) (err error) { ++ _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { ++ r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) ++ n = int64(r0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Statfs(path string, buf *Statfs_t) (err error) { ++ var _p0 *byte ++ _p0, err = BytePtrFromString(path) ++ if err != nil { ++ return ++ } ++ _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { ++ _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Truncate(path string, length int64) (err error) { ++ var _p0 *byte ++ _p0, err = BytePtrFromString(path) ++ if err != nil { ++ return ++ } ++ _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { ++ r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) ++ fd = int(r0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { ++ r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) ++ fd = int(r0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { ++ _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { ++ _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func getgroups(n int, list *_Gid_t) (nn int, err error) { ++ r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) ++ nn = int(r0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func setgroups(n int, list *_Gid_t) (err error) { ++ _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { ++ _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { ++ _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func socket(domain int, typ int, proto int) (fd int, err error) { ++ r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) ++ fd = int(r0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { ++ _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { ++ _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { ++ _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { ++ var _p0 unsafe.Pointer ++ if len(p) > 0 { ++ _p0 = unsafe.Pointer(&p[0]) ++ } else { ++ _p0 = unsafe.Pointer(&_zero) ++ } ++ r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) ++ n = int(r0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { ++ var _p0 unsafe.Pointer ++ if len(buf) > 0 { ++ _p0 = unsafe.Pointer(&buf[0]) ++ } else { ++ _p0 = unsafe.Pointer(&_zero) ++ } ++ _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { ++ r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) ++ n = int(r0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { ++ r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) ++ n = int(r0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { ++ r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) ++ xaddr = uintptr(r0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func Gettimeofday(tv *Timeval) (err error) { ++ _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} ++ ++// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT ++ ++func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { ++ var _p0 *byte ++ _p0, err = BytePtrFromString(cmdline) ++ if err != nil { ++ return ++ } ++ _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) ++ if e1 != 0 { ++ err = errnoErr(e1) ++ } ++ return ++} +diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go +index 102f1ab..37dcc74 100644 +--- a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go ++++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go +@@ -1,4 +1,4 @@ +-// go run mksysctl_openbsd.go ++// mksysctl_openbsd.pl + // Code generated by the command above; DO NOT EDIT. + + // +build 386,openbsd +@@ -30,7 +30,6 @@ var sysctlMib = []mibentry{ + {"hw.model", []_C_int{6, 2}}, + {"hw.ncpu", []_C_int{6, 3}}, + {"hw.ncpufound", []_C_int{6, 21}}, +- {"hw.ncpuonline", []_C_int{6, 25}}, + {"hw.pagesize", []_C_int{6, 7}}, + {"hw.physmem", []_C_int{6, 19}}, + {"hw.product", []_C_int{6, 15}}, +diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go +index 4866fce..fe6caa6 100644 +--- a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go ++++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go +@@ -31,7 +31,6 @@ var sysctlMib = []mibentry{ + {"hw.model", []_C_int{6, 2}}, + {"hw.ncpu", []_C_int{6, 3}}, + {"hw.ncpufound", []_C_int{6, 21}}, +- {"hw.ncpuonline", []_C_int{6, 25}}, + {"hw.pagesize", []_C_int{6, 7}}, + {"hw.perfpolicy", []_C_int{6, 23}}, + {"hw.physmem", []_C_int{6, 19}}, +diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go +index d3801eb..6eb8c0b 100644 +--- a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go ++++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go +@@ -30,7 +30,6 @@ var sysctlMib = []mibentry{ + {"hw.model", []_C_int{6, 2}}, + {"hw.ncpu", []_C_int{6, 3}}, + {"hw.ncpufound", []_C_int{6, 21}}, +- {"hw.ncpuonline", []_C_int{6, 25}}, + {"hw.pagesize", []_C_int{6, 7}}, + {"hw.physmem", []_C_int{6, 19}}, + {"hw.product", []_C_int{6, 15}}, +diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go +new file mode 100644 +index 0000000..92fd80c +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go +@@ -0,0 +1,305 @@ ++// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h ++// Code generated by the command above; see README.md. DO NOT EDIT. ++ ++// copied from arm64, and modified by hand ++// TODO: auto-generate ++ ++// +build loong64,linux ++ ++package unix ++ ++const ( ++ SYS_IO_SETUP = 0 ++ SYS_IO_DESTROY = 1 ++ SYS_IO_SUBMIT = 2 ++ SYS_IO_CANCEL = 3 ++ SYS_IO_GETEVENTS = 4 ++ SYS_SETXATTR = 5 ++ SYS_LSETXATTR = 6 ++ SYS_FSETXATTR = 7 ++ SYS_GETXATTR = 8 ++ SYS_LGETXATTR = 9 ++ SYS_FGETXATTR = 10 ++ SYS_LISTXATTR = 11 ++ SYS_LLISTXATTR = 12 ++ SYS_FLISTXATTR = 13 ++ SYS_REMOVEXATTR = 14 ++ SYS_LREMOVEXATTR = 15 ++ SYS_FREMOVEXATTR = 16 ++ SYS_GETCWD = 17 ++ SYS_LOOKUP_DCOOKIE = 18 ++ SYS_EVENTFD2 = 19 ++ SYS_EPOLL_CREATE1 = 20 ++ SYS_EPOLL_CTL = 21 ++ SYS_EPOLL_PWAIT = 22 ++ SYS_DUP = 23 ++ SYS_DUP3 = 24 ++ SYS_FCNTL = 25 ++ SYS_INOTIFY_INIT1 = 26 ++ SYS_INOTIFY_ADD_WATCH = 27 ++ SYS_INOTIFY_RM_WATCH = 28 ++ SYS_IOCTL = 29 ++ SYS_IOPRIO_SET = 30 ++ SYS_IOPRIO_GET = 31 ++ SYS_FLOCK = 32 ++ SYS_MKNODAT = 33 ++ SYS_MKDIRAT = 34 ++ SYS_UNLINKAT = 35 ++ SYS_SYMLINKAT = 36 ++ SYS_LINKAT = 37 ++ SYS_UMOUNT2 = 39 ++ SYS_MOUNT = 40 ++ SYS_PIVOT_ROOT = 41 ++ SYS_NFSSERVCTL = 42 ++ SYS_STATFS = 43 ++ SYS_FSTATFS = 44 ++ SYS_TRUNCATE = 45 ++ SYS_FTRUNCATE = 46 ++ SYS_FALLOCATE = 47 ++ SYS_FACCESSAT = 48 ++ SYS_CHDIR = 49 ++ SYS_FCHDIR = 50 ++ SYS_CHROOT = 51 ++ SYS_FCHMOD = 52 ++ SYS_FCHMODAT = 53 ++ SYS_FCHOWNAT = 54 ++ SYS_FCHOWN = 55 ++ SYS_OPENAT = 56 ++ SYS_CLOSE = 57 ++ SYS_VHANGUP = 58 ++ SYS_PIPE2 = 59 ++ SYS_QUOTACTL = 60 ++ SYS_GETDENTS64 = 61 ++ SYS_LSEEK = 62 ++ SYS_READ = 63 ++ SYS_WRITE = 64 ++ SYS_READV = 65 ++ SYS_WRITEV = 66 ++ SYS_PREAD64 = 67 ++ SYS_PWRITE64 = 68 ++ SYS_PREADV = 69 ++ SYS_PWRITEV = 70 ++ SYS_SENDFILE = 71 ++ SYS_PSELECT6 = 72 ++ SYS_PPOLL = 73 ++ SYS_SIGNALFD4 = 74 ++ SYS_VMSPLICE = 75 ++ SYS_SPLICE = 76 ++ SYS_TEE = 77 ++ SYS_READLINKAT = 78 ++ SYS_FSTATAT = 79 ++ SYS_FSTAT = 80 ++ SYS_SYNC = 81 ++ SYS_FSYNC = 82 ++ SYS_FDATASYNC = 83 ++ SYS_SYNC_FILE_RANGE = 84 ++ SYS_TIMERFD_CREATE = 85 ++ SYS_TIMERFD_SETTIME = 86 ++ SYS_TIMERFD_GETTIME = 87 ++ SYS_UTIMENSAT = 88 ++ SYS_ACCT = 89 ++ SYS_CAPGET = 90 ++ SYS_CAPSET = 91 ++ SYS_PERSONALITY = 92 ++ SYS_EXIT = 93 ++ SYS_EXIT_GROUP = 94 ++ SYS_WAITID = 95 ++ SYS_SET_TID_ADDRESS = 96 ++ SYS_UNSHARE = 97 ++ SYS_FUTEX = 98 ++ SYS_SET_ROBUST_LIST = 99 ++ SYS_GET_ROBUST_LIST = 100 ++ SYS_NANOSLEEP = 101 ++ SYS_GETITIMER = 102 ++ SYS_SETITIMER = 103 ++ SYS_KEXEC_LOAD = 104 ++ SYS_INIT_MODULE = 105 ++ SYS_DELETE_MODULE = 106 ++ SYS_TIMER_CREATE = 107 ++ SYS_TIMER_GETTIME = 108 ++ SYS_TIMER_GETOVERRUN = 109 ++ SYS_TIMER_SETTIME = 110 ++ SYS_TIMER_DELETE = 111 ++ SYS_CLOCK_SETTIME = 112 ++ SYS_CLOCK_GETTIME = 113 ++ SYS_CLOCK_GETRES = 114 ++ SYS_CLOCK_NANOSLEEP = 115 ++ SYS_SYSLOG = 116 ++ SYS_PTRACE = 117 ++ SYS_SCHED_SETPARAM = 118 ++ SYS_SCHED_SETSCHEDULER = 119 ++ SYS_SCHED_GETSCHEDULER = 120 ++ SYS_SCHED_GETPARAM = 121 ++ SYS_SCHED_SETAFFINITY = 122 ++ SYS_SCHED_GETAFFINITY = 123 ++ SYS_SCHED_YIELD = 124 ++ SYS_SCHED_GET_PRIORITY_MAX = 125 ++ SYS_SCHED_GET_PRIORITY_MIN = 126 ++ SYS_SCHED_RR_GET_INTERVAL = 127 ++ SYS_RESTART_SYSCALL = 128 ++ SYS_KILL = 129 ++ SYS_TKILL = 130 ++ SYS_TGKILL = 131 ++ SYS_SIGALTSTACK = 132 ++ SYS_RT_SIGSUSPEND = 133 ++ SYS_RT_SIGACTION = 134 ++ SYS_RT_SIGPROCMASK = 135 ++ SYS_RT_SIGPENDING = 136 ++ SYS_RT_SIGTIMEDWAIT = 137 ++ SYS_RT_SIGQUEUEINFO = 138 ++ SYS_RT_SIGRETURN = 139 ++ SYS_SETPRIORITY = 140 ++ SYS_GETPRIORITY = 141 ++ SYS_REBOOT = 142 ++ SYS_SETREGID = 143 ++ SYS_SETGID = 144 ++ SYS_SETREUID = 145 ++ SYS_SETUID = 146 ++ SYS_SETRESUID = 147 ++ SYS_GETRESUID = 148 ++ SYS_SETRESGID = 149 ++ SYS_GETRESGID = 150 ++ SYS_SETFSUID = 151 ++ SYS_SETFSGID = 152 ++ SYS_TIMES = 153 ++ SYS_SETPGID = 154 ++ SYS_GETPGID = 155 ++ SYS_GETSID = 156 ++ SYS_SETSID = 157 ++ SYS_GETGROUPS = 158 ++ SYS_SETGROUPS = 159 ++ SYS_UNAME = 160 ++ SYS_SETHOSTNAME = 161 ++ SYS_SETDOMAINNAME = 162 ++ SYS_GETRLIMIT = 163 ++ SYS_SETRLIMIT = 164 ++ SYS_GETRUSAGE = 165 ++ SYS_UMASK = 166 ++ SYS_PRCTL = 167 ++ SYS_GETCPU = 168 ++ SYS_GETTIMEOFDAY = 169 ++ SYS_SETTIMEOFDAY = 170 ++ SYS_ADJTIMEX = 171 ++ SYS_GETPID = 172 ++ SYS_GETPPID = 173 ++ SYS_GETUID = 174 ++ SYS_GETEUID = 175 ++ SYS_GETGID = 176 ++ SYS_GETEGID = 177 ++ SYS_GETTID = 178 ++ SYS_SYSINFO = 179 ++ SYS_MQ_OPEN = 180 ++ SYS_MQ_UNLINK = 181 ++ SYS_MQ_TIMEDSEND = 182 ++ SYS_MQ_TIMEDRECEIVE = 183 ++ SYS_MQ_NOTIFY = 184 ++ SYS_MQ_GETSETATTR = 185 ++ SYS_MSGGET = 186 ++ SYS_MSGCTL = 187 ++ SYS_MSGRCV = 188 ++ SYS_MSGSND = 189 ++ SYS_SEMGET = 190 ++ SYS_SEMCTL = 191 ++ SYS_SEMTIMEDOP = 192 ++ SYS_SEMOP = 193 ++ SYS_SHMGET = 194 ++ SYS_SHMCTL = 195 ++ SYS_SHMAT = 196 ++ SYS_SHMDT = 197 ++ SYS_SOCKET = 198 ++ SYS_SOCKETPAIR = 199 ++ SYS_BIND = 200 ++ SYS_LISTEN = 201 ++ SYS_ACCEPT = 202 ++ SYS_CONNECT = 203 ++ SYS_GETSOCKNAME = 204 ++ SYS_GETPEERNAME = 205 ++ SYS_SENDTO = 206 ++ SYS_RECVFROM = 207 ++ SYS_SETSOCKOPT = 208 ++ SYS_GETSOCKOPT = 209 ++ SYS_SHUTDOWN = 210 ++ SYS_SENDMSG = 211 ++ SYS_RECVMSG = 212 ++ SYS_READAHEAD = 213 ++ SYS_BRK = 214 ++ SYS_MUNMAP = 215 ++ SYS_MREMAP = 216 ++ SYS_ADD_KEY = 217 ++ SYS_REQUEST_KEY = 218 ++ SYS_KEYCTL = 219 ++ SYS_CLONE = 220 ++ SYS_EXECVE = 221 ++ SYS_MMAP = 222 ++ SYS_FADVISE64 = 223 ++ SYS_SWAPON = 224 ++ SYS_SWAPOFF = 225 ++ SYS_MPROTECT = 226 ++ SYS_MSYNC = 227 ++ SYS_MLOCK = 228 ++ SYS_MUNLOCK = 229 ++ SYS_MLOCKALL = 230 ++ SYS_MUNLOCKALL = 231 ++ SYS_MINCORE = 232 ++ SYS_MADVISE = 233 ++ SYS_REMAP_FILE_PAGES = 234 ++ SYS_MBIND = 235 ++ SYS_GET_MEMPOLICY = 236 ++ SYS_SET_MEMPOLICY = 237 ++ SYS_MIGRATE_PAGES = 238 ++ SYS_MOVE_PAGES = 239 ++ SYS_RT_TGSIGQUEUEINFO = 240 ++ SYS_PERF_EVENT_OPEN = 241 ++ SYS_ACCEPT4 = 242 ++ SYS_RECVMMSG = 243 ++ SYS_ARCH_SPECIFIC_SYSCALL = 244 ++ SYS_WAIT4 = 260 ++ SYS_PRLIMIT64 = 261 ++ SYS_FANOTIFY_INIT = 262 ++ SYS_FANOTIFY_MARK = 263 ++ SYS_NAME_TO_HANDLE_AT = 264 ++ SYS_OPEN_BY_HANDLE_AT = 265 ++ SYS_CLOCK_ADJTIME = 266 ++ SYS_SYNCFS = 267 ++ SYS_SETNS = 268 ++ SYS_SENDMMSG = 269 ++ SYS_PROCESS_VM_READV = 270 ++ SYS_PROCESS_VM_WRITEV = 271 ++ SYS_KCMP = 272 ++ SYS_FINIT_MODULE = 273 ++ SYS_SCHED_SETATTR = 274 ++ SYS_SCHED_GETATTR = 275 ++ SYS_RENAMEAT2 = 276 ++ SYS_SECCOMP = 277 ++ SYS_GETRANDOM = 278 ++ SYS_MEMFD_CREATE = 279 ++ SYS_BPF = 280 ++ SYS_EXECVEAT = 281 ++ SYS_USERFAULTFD = 282 ++ SYS_MEMBARRIER = 283 ++ SYS_MLOCK2 = 284 ++ SYS_COPY_FILE_RANGE = 285 ++ SYS_PREADV2 = 286 ++ SYS_PWRITEV2 = 287 ++ SYS_PKEY_MPROTECT = 288 ++ SYS_PKEY_ALLOC = 289 ++ SYS_PKEY_FREE = 290 ++ SYS_STATX = 291 ++ SYS_IO_PGETEVENTS = 292 ++ SYS_RSEQ = 293 ++ SYS_KEXEC_FILE_LOAD = 294 ++ SYS_PIDFD_SEND_SIGNAL = 424 ++ SYS_IO_URING_SETUP = 425 ++ SYS_IO_URING_ENTER = 426 ++ SYS_IO_URING_REGISTER = 427 ++ SYS_OPEN_TREE = 428 ++ SYS_MOVE_MOUNT = 429 ++ SYS_FSOPEN = 430 ++ SYS_FSCONFIG = 431 ++ SYS_FSMOUNT = 432 ++ SYS_FSPICK = 433 ++ SYS_PIDFD_OPEN = 434 ++ SYS_CLONE3 = 435 ++ SYS_OPENAT2 = 437 ++ SYS_PIDFD_GETFD = 438 ++) +diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go +index b91c2ae..6f79227 100644 +--- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go ++++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go +@@ -125,9 +125,9 @@ type Statfs_t struct { + Owner uint32 + Fsid Fsid + Charspare [80]int8 +- Fstypename [16]byte +- Mntfromname [1024]byte +- Mntonname [1024]byte ++ Fstypename [16]int8 ++ Mntfromname [1024]int8 ++ Mntonname [1024]int8 + } + + type statfs_freebsd11_t struct { +@@ -150,9 +150,9 @@ type statfs_freebsd11_t struct { + Owner uint32 + Fsid Fsid + Charspare [80]int8 +- Fstypename [16]byte +- Mntfromname [88]byte +- Mntonname [88]byte ++ Fstypename [16]int8 ++ Mntfromname [88]int8 ++ Mntonname [88]int8 + } + + type Flock_t struct { +diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go +index 27d67ac..015f24b 100644 +--- a/vendor/golang.org/x/sys/unix/ztypes_linux.go ++++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go +@@ -1231,6 +1231,17 @@ const ( + SizeofTpacketStatsV3 = 0xc + ) + ++const ( ++ IFLA_XDP_FD = 0x1 ++ IFLA_XDP_ATTACHED = 0x2 ++ IFLA_XDP_FLAGS = 0x3 ++ IFLA_XDP_PROG_ID = 0x4 ++ IFLA_XDP_DRV_PROG_ID = 0x5 ++ IFLA_XDP_SKB_PROG_ID = 0x6 ++ IFLA_XDP_HW_PROG_ID = 0x7 ++ IFLA_XDP_EXPECTED_FD = 0x8 ++) ++ + const ( + NF_INET_PRE_ROUTING = 0x0 + NF_INET_LOCAL_IN = 0x1 +@@ -1871,249 +1882,175 @@ const ( + ) + + const ( +- BPF_REG_0 = 0x0 +- BPF_REG_1 = 0x1 +- BPF_REG_2 = 0x2 +- BPF_REG_3 = 0x3 +- BPF_REG_4 = 0x4 +- BPF_REG_5 = 0x5 +- BPF_REG_6 = 0x6 +- BPF_REG_7 = 0x7 +- BPF_REG_8 = 0x8 +- BPF_REG_9 = 0x9 +- BPF_REG_10 = 0xa +- BPF_MAP_CREATE = 0x0 +- BPF_MAP_LOOKUP_ELEM = 0x1 +- BPF_MAP_UPDATE_ELEM = 0x2 +- BPF_MAP_DELETE_ELEM = 0x3 +- BPF_MAP_GET_NEXT_KEY = 0x4 +- BPF_PROG_LOAD = 0x5 +- BPF_OBJ_PIN = 0x6 +- BPF_OBJ_GET = 0x7 +- BPF_PROG_ATTACH = 0x8 +- BPF_PROG_DETACH = 0x9 +- BPF_PROG_TEST_RUN = 0xa +- BPF_PROG_GET_NEXT_ID = 0xb +- BPF_MAP_GET_NEXT_ID = 0xc +- BPF_PROG_GET_FD_BY_ID = 0xd +- BPF_MAP_GET_FD_BY_ID = 0xe +- BPF_OBJ_GET_INFO_BY_FD = 0xf +- BPF_PROG_QUERY = 0x10 +- BPF_RAW_TRACEPOINT_OPEN = 0x11 +- BPF_BTF_LOAD = 0x12 +- BPF_BTF_GET_FD_BY_ID = 0x13 +- BPF_TASK_FD_QUERY = 0x14 +- BPF_MAP_LOOKUP_AND_DELETE_ELEM = 0x15 +- BPF_MAP_FREEZE = 0x16 +- BPF_BTF_GET_NEXT_ID = 0x17 +- BPF_MAP_LOOKUP_BATCH = 0x18 +- BPF_MAP_LOOKUP_AND_DELETE_BATCH = 0x19 +- BPF_MAP_UPDATE_BATCH = 0x1a +- BPF_MAP_DELETE_BATCH = 0x1b +- BPF_LINK_CREATE = 0x1c +- BPF_LINK_UPDATE = 0x1d +- BPF_MAP_TYPE_UNSPEC = 0x0 +- BPF_MAP_TYPE_HASH = 0x1 +- BPF_MAP_TYPE_ARRAY = 0x2 +- BPF_MAP_TYPE_PROG_ARRAY = 0x3 +- BPF_MAP_TYPE_PERF_EVENT_ARRAY = 0x4 +- BPF_MAP_TYPE_PERCPU_HASH = 0x5 +- BPF_MAP_TYPE_PERCPU_ARRAY = 0x6 +- BPF_MAP_TYPE_STACK_TRACE = 0x7 +- BPF_MAP_TYPE_CGROUP_ARRAY = 0x8 +- BPF_MAP_TYPE_LRU_HASH = 0x9 +- BPF_MAP_TYPE_LRU_PERCPU_HASH = 0xa +- BPF_MAP_TYPE_LPM_TRIE = 0xb +- BPF_MAP_TYPE_ARRAY_OF_MAPS = 0xc +- BPF_MAP_TYPE_HASH_OF_MAPS = 0xd +- BPF_MAP_TYPE_DEVMAP = 0xe +- BPF_MAP_TYPE_SOCKMAP = 0xf +- BPF_MAP_TYPE_CPUMAP = 0x10 +- BPF_MAP_TYPE_XSKMAP = 0x11 +- BPF_MAP_TYPE_SOCKHASH = 0x12 +- BPF_MAP_TYPE_CGROUP_STORAGE = 0x13 +- BPF_MAP_TYPE_REUSEPORT_SOCKARRAY = 0x14 +- BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = 0x15 +- BPF_MAP_TYPE_QUEUE = 0x16 +- BPF_MAP_TYPE_STACK = 0x17 +- BPF_MAP_TYPE_SK_STORAGE = 0x18 +- BPF_MAP_TYPE_DEVMAP_HASH = 0x19 +- BPF_MAP_TYPE_STRUCT_OPS = 0x1a +- BPF_PROG_TYPE_UNSPEC = 0x0 +- BPF_PROG_TYPE_SOCKET_FILTER = 0x1 +- BPF_PROG_TYPE_KPROBE = 0x2 +- BPF_PROG_TYPE_SCHED_CLS = 0x3 +- BPF_PROG_TYPE_SCHED_ACT = 0x4 +- BPF_PROG_TYPE_TRACEPOINT = 0x5 +- BPF_PROG_TYPE_XDP = 0x6 +- BPF_PROG_TYPE_PERF_EVENT = 0x7 +- BPF_PROG_TYPE_CGROUP_SKB = 0x8 +- BPF_PROG_TYPE_CGROUP_SOCK = 0x9 +- BPF_PROG_TYPE_LWT_IN = 0xa +- BPF_PROG_TYPE_LWT_OUT = 0xb +- BPF_PROG_TYPE_LWT_XMIT = 0xc +- BPF_PROG_TYPE_SOCK_OPS = 0xd +- BPF_PROG_TYPE_SK_SKB = 0xe +- BPF_PROG_TYPE_CGROUP_DEVICE = 0xf +- BPF_PROG_TYPE_SK_MSG = 0x10 +- BPF_PROG_TYPE_RAW_TRACEPOINT = 0x11 +- BPF_PROG_TYPE_CGROUP_SOCK_ADDR = 0x12 +- BPF_PROG_TYPE_LWT_SEG6LOCAL = 0x13 +- BPF_PROG_TYPE_LIRC_MODE2 = 0x14 +- BPF_PROG_TYPE_SK_REUSEPORT = 0x15 +- BPF_PROG_TYPE_FLOW_DISSECTOR = 0x16 +- BPF_PROG_TYPE_CGROUP_SYSCTL = 0x17 +- BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 0x18 +- BPF_PROG_TYPE_CGROUP_SOCKOPT = 0x19 +- BPF_PROG_TYPE_TRACING = 0x1a +- BPF_PROG_TYPE_STRUCT_OPS = 0x1b +- BPF_PROG_TYPE_EXT = 0x1c +- BPF_PROG_TYPE_LSM = 0x1d +- BPF_CGROUP_INET_INGRESS = 0x0 +- BPF_CGROUP_INET_EGRESS = 0x1 +- BPF_CGROUP_INET_SOCK_CREATE = 0x2 +- BPF_CGROUP_SOCK_OPS = 0x3 +- BPF_SK_SKB_STREAM_PARSER = 0x4 +- BPF_SK_SKB_STREAM_VERDICT = 0x5 +- BPF_CGROUP_DEVICE = 0x6 +- BPF_SK_MSG_VERDICT = 0x7 +- BPF_CGROUP_INET4_BIND = 0x8 +- BPF_CGROUP_INET6_BIND = 0x9 +- BPF_CGROUP_INET4_CONNECT = 0xa +- BPF_CGROUP_INET6_CONNECT = 0xb +- BPF_CGROUP_INET4_POST_BIND = 0xc +- BPF_CGROUP_INET6_POST_BIND = 0xd +- BPF_CGROUP_UDP4_SENDMSG = 0xe +- BPF_CGROUP_UDP6_SENDMSG = 0xf +- BPF_LIRC_MODE2 = 0x10 +- BPF_FLOW_DISSECTOR = 0x11 +- BPF_CGROUP_SYSCTL = 0x12 +- BPF_CGROUP_UDP4_RECVMSG = 0x13 +- BPF_CGROUP_UDP6_RECVMSG = 0x14 +- BPF_CGROUP_GETSOCKOPT = 0x15 +- BPF_CGROUP_SETSOCKOPT = 0x16 +- BPF_TRACE_RAW_TP = 0x17 +- BPF_TRACE_FENTRY = 0x18 +- BPF_TRACE_FEXIT = 0x19 +- BPF_MODIFY_RETURN = 0x1a +- BPF_LSM_MAC = 0x1b +- BPF_ANY = 0x0 +- BPF_NOEXIST = 0x1 +- BPF_EXIST = 0x2 +- BPF_F_LOCK = 0x4 +- BPF_F_NO_PREALLOC = 0x1 +- BPF_F_NO_COMMON_LRU = 0x2 +- BPF_F_NUMA_NODE = 0x4 +- BPF_F_RDONLY = 0x8 +- BPF_F_WRONLY = 0x10 +- BPF_F_STACK_BUILD_ID = 0x20 +- BPF_F_ZERO_SEED = 0x40 +- BPF_F_RDONLY_PROG = 0x80 +- BPF_F_WRONLY_PROG = 0x100 +- BPF_F_CLONE = 0x200 +- BPF_F_MMAPABLE = 0x400 +- BPF_STACK_BUILD_ID_EMPTY = 0x0 +- BPF_STACK_BUILD_ID_VALID = 0x1 +- BPF_STACK_BUILD_ID_IP = 0x2 +- BPF_F_RECOMPUTE_CSUM = 0x1 +- BPF_F_INVALIDATE_HASH = 0x2 +- BPF_F_HDR_FIELD_MASK = 0xf +- BPF_F_PSEUDO_HDR = 0x10 +- BPF_F_MARK_MANGLED_0 = 0x20 +- BPF_F_MARK_ENFORCE = 0x40 +- BPF_F_INGRESS = 0x1 +- BPF_F_TUNINFO_IPV6 = 0x1 +- BPF_F_SKIP_FIELD_MASK = 0xff +- BPF_F_USER_STACK = 0x100 +- BPF_F_FAST_STACK_CMP = 0x200 +- BPF_F_REUSE_STACKID = 0x400 +- BPF_F_USER_BUILD_ID = 0x800 +- BPF_F_ZERO_CSUM_TX = 0x2 +- BPF_F_DONT_FRAGMENT = 0x4 +- BPF_F_SEQ_NUMBER = 0x8 +- BPF_F_INDEX_MASK = 0xffffffff +- BPF_F_CURRENT_CPU = 0xffffffff +- BPF_F_CTXLEN_MASK = 0xfffff00000000 +- BPF_F_CURRENT_NETNS = -0x1 +- BPF_F_ADJ_ROOM_FIXED_GSO = 0x1 +- BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 0x2 +- BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 0x4 +- BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 0x8 +- BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10 +- BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff +- BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38 +- BPF_F_SYSCTL_BASE_NAME = 0x1 +- BPF_SK_STORAGE_GET_F_CREATE = 0x1 +- BPF_F_GET_BRANCH_RECORDS_SIZE = 0x1 +- BPF_ADJ_ROOM_NET = 0x0 +- BPF_ADJ_ROOM_MAC = 0x1 +- BPF_HDR_START_MAC = 0x0 +- BPF_HDR_START_NET = 0x1 +- BPF_LWT_ENCAP_SEG6 = 0x0 +- BPF_LWT_ENCAP_SEG6_INLINE = 0x1 +- BPF_LWT_ENCAP_IP = 0x2 +- BPF_OK = 0x0 +- BPF_DROP = 0x2 +- BPF_REDIRECT = 0x7 +- BPF_LWT_REROUTE = 0x80 +- BPF_SOCK_OPS_RTO_CB_FLAG = 0x1 +- BPF_SOCK_OPS_RETRANS_CB_FLAG = 0x2 +- BPF_SOCK_OPS_STATE_CB_FLAG = 0x4 +- BPF_SOCK_OPS_RTT_CB_FLAG = 0x8 +- BPF_SOCK_OPS_ALL_CB_FLAGS = 0xf +- BPF_SOCK_OPS_VOID = 0x0 +- BPF_SOCK_OPS_TIMEOUT_INIT = 0x1 +- BPF_SOCK_OPS_RWND_INIT = 0x2 +- BPF_SOCK_OPS_TCP_CONNECT_CB = 0x3 +- BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB = 0x4 +- BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 0x5 +- BPF_SOCK_OPS_NEEDS_ECN = 0x6 +- BPF_SOCK_OPS_BASE_RTT = 0x7 +- BPF_SOCK_OPS_RTO_CB = 0x8 +- BPF_SOCK_OPS_RETRANS_CB = 0x9 +- BPF_SOCK_OPS_STATE_CB = 0xa +- BPF_SOCK_OPS_TCP_LISTEN_CB = 0xb +- BPF_SOCK_OPS_RTT_CB = 0xc +- BPF_TCP_ESTABLISHED = 0x1 +- BPF_TCP_SYN_SENT = 0x2 +- BPF_TCP_SYN_RECV = 0x3 +- BPF_TCP_FIN_WAIT1 = 0x4 +- BPF_TCP_FIN_WAIT2 = 0x5 +- BPF_TCP_TIME_WAIT = 0x6 +- BPF_TCP_CLOSE = 0x7 +- BPF_TCP_CLOSE_WAIT = 0x8 +- BPF_TCP_LAST_ACK = 0x9 +- BPF_TCP_LISTEN = 0xa +- BPF_TCP_CLOSING = 0xb +- BPF_TCP_NEW_SYN_RECV = 0xc +- BPF_TCP_MAX_STATES = 0xd +- TCP_BPF_IW = 0x3e9 +- TCP_BPF_SNDCWND_CLAMP = 0x3ea +- BPF_DEVCG_ACC_MKNOD = 0x1 +- BPF_DEVCG_ACC_READ = 0x2 +- BPF_DEVCG_ACC_WRITE = 0x4 +- BPF_DEVCG_DEV_BLOCK = 0x1 +- BPF_DEVCG_DEV_CHAR = 0x2 +- BPF_FIB_LOOKUP_DIRECT = 0x1 +- BPF_FIB_LOOKUP_OUTPUT = 0x2 +- BPF_FIB_LKUP_RET_SUCCESS = 0x0 +- BPF_FIB_LKUP_RET_BLACKHOLE = 0x1 +- BPF_FIB_LKUP_RET_UNREACHABLE = 0x2 +- BPF_FIB_LKUP_RET_PROHIBIT = 0x3 +- BPF_FIB_LKUP_RET_NOT_FWDED = 0x4 +- BPF_FIB_LKUP_RET_FWD_DISABLED = 0x5 +- BPF_FIB_LKUP_RET_UNSUPP_LWT = 0x6 +- BPF_FIB_LKUP_RET_NO_NEIGH = 0x7 +- BPF_FIB_LKUP_RET_FRAG_NEEDED = 0x8 +- BPF_FD_TYPE_RAW_TRACEPOINT = 0x0 +- BPF_FD_TYPE_TRACEPOINT = 0x1 +- BPF_FD_TYPE_KPROBE = 0x2 +- BPF_FD_TYPE_KRETPROBE = 0x3 +- BPF_FD_TYPE_UPROBE = 0x4 +- BPF_FD_TYPE_URETPROBE = 0x5 +- BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG = 0x1 +- BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL = 0x2 +- BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP = 0x4 ++ BPF_REG_0 = 0x0 ++ BPF_REG_1 = 0x1 ++ BPF_REG_2 = 0x2 ++ BPF_REG_3 = 0x3 ++ BPF_REG_4 = 0x4 ++ BPF_REG_5 = 0x5 ++ BPF_REG_6 = 0x6 ++ BPF_REG_7 = 0x7 ++ BPF_REG_8 = 0x8 ++ BPF_REG_9 = 0x9 ++ BPF_REG_10 = 0xa ++ BPF_MAP_CREATE = 0x0 ++ BPF_MAP_LOOKUP_ELEM = 0x1 ++ BPF_MAP_UPDATE_ELEM = 0x2 ++ BPF_MAP_DELETE_ELEM = 0x3 ++ BPF_MAP_GET_NEXT_KEY = 0x4 ++ BPF_PROG_LOAD = 0x5 ++ BPF_OBJ_PIN = 0x6 ++ BPF_OBJ_GET = 0x7 ++ BPF_PROG_ATTACH = 0x8 ++ BPF_PROG_DETACH = 0x9 ++ BPF_PROG_TEST_RUN = 0xa ++ BPF_PROG_GET_NEXT_ID = 0xb ++ BPF_MAP_GET_NEXT_ID = 0xc ++ BPF_PROG_GET_FD_BY_ID = 0xd ++ BPF_MAP_GET_FD_BY_ID = 0xe ++ BPF_OBJ_GET_INFO_BY_FD = 0xf ++ BPF_PROG_QUERY = 0x10 ++ BPF_RAW_TRACEPOINT_OPEN = 0x11 ++ BPF_BTF_LOAD = 0x12 ++ BPF_BTF_GET_FD_BY_ID = 0x13 ++ BPF_TASK_FD_QUERY = 0x14 ++ BPF_MAP_LOOKUP_AND_DELETE_ELEM = 0x15 ++ BPF_MAP_FREEZE = 0x16 ++ BPF_BTF_GET_NEXT_ID = 0x17 ++ BPF_MAP_TYPE_UNSPEC = 0x0 ++ BPF_MAP_TYPE_HASH = 0x1 ++ BPF_MAP_TYPE_ARRAY = 0x2 ++ BPF_MAP_TYPE_PROG_ARRAY = 0x3 ++ BPF_MAP_TYPE_PERF_EVENT_ARRAY = 0x4 ++ BPF_MAP_TYPE_PERCPU_HASH = 0x5 ++ BPF_MAP_TYPE_PERCPU_ARRAY = 0x6 ++ BPF_MAP_TYPE_STACK_TRACE = 0x7 ++ BPF_MAP_TYPE_CGROUP_ARRAY = 0x8 ++ BPF_MAP_TYPE_LRU_HASH = 0x9 ++ BPF_MAP_TYPE_LRU_PERCPU_HASH = 0xa ++ BPF_MAP_TYPE_LPM_TRIE = 0xb ++ BPF_MAP_TYPE_ARRAY_OF_MAPS = 0xc ++ BPF_MAP_TYPE_HASH_OF_MAPS = 0xd ++ BPF_MAP_TYPE_DEVMAP = 0xe ++ BPF_MAP_TYPE_SOCKMAP = 0xf ++ BPF_MAP_TYPE_CPUMAP = 0x10 ++ BPF_MAP_TYPE_XSKMAP = 0x11 ++ BPF_MAP_TYPE_SOCKHASH = 0x12 ++ BPF_MAP_TYPE_CGROUP_STORAGE = 0x13 ++ BPF_MAP_TYPE_REUSEPORT_SOCKARRAY = 0x14 ++ BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = 0x15 ++ BPF_MAP_TYPE_QUEUE = 0x16 ++ BPF_MAP_TYPE_STACK = 0x17 ++ BPF_MAP_TYPE_SK_STORAGE = 0x18 ++ BPF_MAP_TYPE_DEVMAP_HASH = 0x19 ++ BPF_PROG_TYPE_UNSPEC = 0x0 ++ BPF_PROG_TYPE_SOCKET_FILTER = 0x1 ++ BPF_PROG_TYPE_KPROBE = 0x2 ++ BPF_PROG_TYPE_SCHED_CLS = 0x3 ++ BPF_PROG_TYPE_SCHED_ACT = 0x4 ++ BPF_PROG_TYPE_TRACEPOINT = 0x5 ++ BPF_PROG_TYPE_XDP = 0x6 ++ BPF_PROG_TYPE_PERF_EVENT = 0x7 ++ BPF_PROG_TYPE_CGROUP_SKB = 0x8 ++ BPF_PROG_TYPE_CGROUP_SOCK = 0x9 ++ BPF_PROG_TYPE_LWT_IN = 0xa ++ BPF_PROG_TYPE_LWT_OUT = 0xb ++ BPF_PROG_TYPE_LWT_XMIT = 0xc ++ BPF_PROG_TYPE_SOCK_OPS = 0xd ++ BPF_PROG_TYPE_SK_SKB = 0xe ++ BPF_PROG_TYPE_CGROUP_DEVICE = 0xf ++ BPF_PROG_TYPE_SK_MSG = 0x10 ++ BPF_PROG_TYPE_RAW_TRACEPOINT = 0x11 ++ BPF_PROG_TYPE_CGROUP_SOCK_ADDR = 0x12 ++ BPF_PROG_TYPE_LWT_SEG6LOCAL = 0x13 ++ BPF_PROG_TYPE_LIRC_MODE2 = 0x14 ++ BPF_PROG_TYPE_SK_REUSEPORT = 0x15 ++ BPF_PROG_TYPE_FLOW_DISSECTOR = 0x16 ++ BPF_PROG_TYPE_CGROUP_SYSCTL = 0x17 ++ BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 0x18 ++ BPF_PROG_TYPE_CGROUP_SOCKOPT = 0x19 ++ BPF_PROG_TYPE_TRACING = 0x1a ++ BPF_CGROUP_INET_INGRESS = 0x0 ++ BPF_CGROUP_INET_EGRESS = 0x1 ++ BPF_CGROUP_INET_SOCK_CREATE = 0x2 ++ BPF_CGROUP_SOCK_OPS = 0x3 ++ BPF_SK_SKB_STREAM_PARSER = 0x4 ++ BPF_SK_SKB_STREAM_VERDICT = 0x5 ++ BPF_CGROUP_DEVICE = 0x6 ++ BPF_SK_MSG_VERDICT = 0x7 ++ BPF_CGROUP_INET4_BIND = 0x8 ++ BPF_CGROUP_INET6_BIND = 0x9 ++ BPF_CGROUP_INET4_CONNECT = 0xa ++ BPF_CGROUP_INET6_CONNECT = 0xb ++ BPF_CGROUP_INET4_POST_BIND = 0xc ++ BPF_CGROUP_INET6_POST_BIND = 0xd ++ BPF_CGROUP_UDP4_SENDMSG = 0xe ++ BPF_CGROUP_UDP6_SENDMSG = 0xf ++ BPF_LIRC_MODE2 = 0x10 ++ BPF_FLOW_DISSECTOR = 0x11 ++ BPF_CGROUP_SYSCTL = 0x12 ++ BPF_CGROUP_UDP4_RECVMSG = 0x13 ++ BPF_CGROUP_UDP6_RECVMSG = 0x14 ++ BPF_CGROUP_GETSOCKOPT = 0x15 ++ BPF_CGROUP_SETSOCKOPT = 0x16 ++ BPF_TRACE_RAW_TP = 0x17 ++ BPF_TRACE_FENTRY = 0x18 ++ BPF_TRACE_FEXIT = 0x19 ++ BPF_STACK_BUILD_ID_EMPTY = 0x0 ++ BPF_STACK_BUILD_ID_VALID = 0x1 ++ BPF_STACK_BUILD_ID_IP = 0x2 ++ BPF_ADJ_ROOM_NET = 0x0 ++ BPF_ADJ_ROOM_MAC = 0x1 ++ BPF_HDR_START_MAC = 0x0 ++ BPF_HDR_START_NET = 0x1 ++ BPF_LWT_ENCAP_SEG6 = 0x0 ++ BPF_LWT_ENCAP_SEG6_INLINE = 0x1 ++ BPF_LWT_ENCAP_IP = 0x2 ++ BPF_OK = 0x0 ++ BPF_DROP = 0x2 ++ BPF_REDIRECT = 0x7 ++ BPF_LWT_REROUTE = 0x80 ++ BPF_SOCK_OPS_VOID = 0x0 ++ BPF_SOCK_OPS_TIMEOUT_INIT = 0x1 ++ BPF_SOCK_OPS_RWND_INIT = 0x2 ++ BPF_SOCK_OPS_TCP_CONNECT_CB = 0x3 ++ BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB = 0x4 ++ BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 0x5 ++ BPF_SOCK_OPS_NEEDS_ECN = 0x6 ++ BPF_SOCK_OPS_BASE_RTT = 0x7 ++ BPF_SOCK_OPS_RTO_CB = 0x8 ++ BPF_SOCK_OPS_RETRANS_CB = 0x9 ++ BPF_SOCK_OPS_STATE_CB = 0xa ++ BPF_SOCK_OPS_TCP_LISTEN_CB = 0xb ++ BPF_SOCK_OPS_RTT_CB = 0xc ++ BPF_TCP_ESTABLISHED = 0x1 ++ BPF_TCP_SYN_SENT = 0x2 ++ BPF_TCP_SYN_RECV = 0x3 ++ BPF_TCP_FIN_WAIT1 = 0x4 ++ BPF_TCP_FIN_WAIT2 = 0x5 ++ BPF_TCP_TIME_WAIT = 0x6 ++ BPF_TCP_CLOSE = 0x7 ++ BPF_TCP_CLOSE_WAIT = 0x8 ++ BPF_TCP_LAST_ACK = 0x9 ++ BPF_TCP_LISTEN = 0xa ++ BPF_TCP_CLOSING = 0xb ++ BPF_TCP_NEW_SYN_RECV = 0xc ++ BPF_TCP_MAX_STATES = 0xd ++ BPF_FIB_LKUP_RET_SUCCESS = 0x0 ++ BPF_FIB_LKUP_RET_BLACKHOLE = 0x1 ++ BPF_FIB_LKUP_RET_UNREACHABLE = 0x2 ++ BPF_FIB_LKUP_RET_PROHIBIT = 0x3 ++ BPF_FIB_LKUP_RET_NOT_FWDED = 0x4 ++ BPF_FIB_LKUP_RET_FWD_DISABLED = 0x5 ++ BPF_FIB_LKUP_RET_UNSUPP_LWT = 0x6 ++ BPF_FIB_LKUP_RET_NO_NEIGH = 0x7 ++ BPF_FIB_LKUP_RET_FRAG_NEEDED = 0x8 ++ BPF_FD_TYPE_RAW_TRACEPOINT = 0x0 ++ BPF_FD_TYPE_TRACEPOINT = 0x1 ++ BPF_FD_TYPE_KPROBE = 0x2 ++ BPF_FD_TYPE_KRETPROBE = 0x3 ++ BPF_FD_TYPE_UPROBE = 0x4 ++ BPF_FD_TYPE_URETPROBE = 0x5 + ) + + const ( +@@ -2279,7 +2216,7 @@ const ( + DEVLINK_CMD_DPIPE_ENTRIES_GET = 0x20 + DEVLINK_CMD_DPIPE_HEADERS_GET = 0x21 + DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET = 0x22 +- DEVLINK_CMD_MAX = 0x48 ++ DEVLINK_CMD_MAX = 0x44 + DEVLINK_PORT_TYPE_NOTSET = 0x0 + DEVLINK_PORT_TYPE_AUTO = 0x1 + DEVLINK_PORT_TYPE_ETH = 0x2 +@@ -2359,7 +2296,7 @@ const ( + DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE = 0x3c + DEVLINK_ATTR_PAD = 0x3d + DEVLINK_ATTR_ESWITCH_ENCAP_MODE = 0x3e +- DEVLINK_ATTR_MAX = 0x90 ++ DEVLINK_ATTR_MAX = 0x8c + DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0x0 + DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 0x1 + DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0x0 +@@ -2404,6 +2341,24 @@ type NexthopGrp struct { + Resvd2 uint16 + } + ++const ( ++ LWTUNNEL_ENCAP_NONE = 0x0 ++ LWTUNNEL_ENCAP_MPLS = 0x1 ++ LWTUNNEL_ENCAP_IP = 0x2 ++ LWTUNNEL_ENCAP_ILA = 0x3 ++ LWTUNNEL_ENCAP_IP6 = 0x4 ++ LWTUNNEL_ENCAP_SEG6 = 0x5 ++ LWTUNNEL_ENCAP_BPF = 0x6 ++ LWTUNNEL_ENCAP_SEG6_LOCAL = 0x7 ++ LWTUNNEL_ENCAP_RPL = 0x8 ++ LWTUNNEL_ENCAP_MAX = 0x8 ++ ++ MPLS_IPTUNNEL_UNSPEC = 0x0 ++ MPLS_IPTUNNEL_DST = 0x1 ++ MPLS_IPTUNNEL_TTL = 0x2 ++ MPLS_IPTUNNEL_MAX = 0x2 ++) ++ + const ( + NHA_UNSPEC = 0x0 + NHA_ID = 0x1 +diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +new file mode 100644 +index 0000000..a63bde5 +--- /dev/null ++++ b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +@@ -0,0 +1,610 @@ ++// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char linux/types.go | go run mkpost.go ++// Code generated by the command above; see README.md. DO NOT EDIT. ++ ++// copied from arm64 ++// TODO: auto-generate ++ ++// +build loong64,linux ++ ++package unix ++ ++const ( ++ SizeofPtr = 0x8 ++ SizeofLong = 0x8 ++) ++ ++type ( ++ _C_long int64 ++) ++ ++type Timespec struct { ++ Sec int64 ++ Nsec int64 ++} ++ ++type Timeval struct { ++ Sec int64 ++ Usec int64 ++} ++ ++type Timex struct { ++ Modes uint32 ++ Offset int64 ++ Freq int64 ++ Maxerror int64 ++ Esterror int64 ++ Status int32 ++ Constant int64 ++ Precision int64 ++ Tolerance int64 ++ Time Timeval ++ Tick int64 ++ Ppsfreq int64 ++ Jitter int64 ++ Shift int32 ++ Stabil int64 ++ Jitcnt int64 ++ Calcnt int64 ++ Errcnt int64 ++ Stbcnt int64 ++ Tai int32 ++ _ [44]byte ++} ++ ++type Time_t int64 ++ ++type Tms struct { ++ Utime int64 ++ Stime int64 ++ Cutime int64 ++ Cstime int64 ++} ++ ++type Utimbuf struct { ++ Actime int64 ++ Modtime int64 ++} ++ ++type Rusage struct { ++ Utime Timeval ++ Stime Timeval ++ Maxrss int64 ++ Ixrss int64 ++ Idrss int64 ++ Isrss int64 ++ Minflt int64 ++ Majflt int64 ++ Nswap int64 ++ Inblock int64 ++ Oublock int64 ++ Msgsnd int64 ++ Msgrcv int64 ++ Nsignals int64 ++ Nvcsw int64 ++ Nivcsw int64 ++} ++ ++type Stat_t struct { ++ Dev uint64 ++ Ino uint64 ++ Mode uint32 ++ Nlink uint32 ++ Uid uint32 ++ Gid uint32 ++ Rdev uint64 ++ _ uint64 ++ Size int64 ++ Blksize int32 ++ _ int32 ++ Blocks int64 ++ Atim Timespec ++ Mtim Timespec ++ Ctim Timespec ++ _ [2]int32 ++} ++ ++type Dirent struct { ++ Ino uint64 ++ Off int64 ++ Reclen uint16 ++ Type uint8 ++ Name [256]int8 ++ _ [5]byte ++} ++ ++type Flock_t struct { ++ Type int16 ++ Whence int16 ++ Start int64 ++ Len int64 ++ Pid int32 ++ _ [4]byte ++} ++ ++const ( ++ FADV_DONTNEED = 0x4 ++ FADV_NOREUSE = 0x5 ++) ++ ++type RawSockaddr struct { ++ Family uint16 ++ Data [14]int8 ++} ++ ++type RawSockaddrAny struct { ++ Addr RawSockaddr ++ Pad [96]int8 ++} ++ ++type Iovec struct { ++ Base *byte ++ Len uint64 ++} ++ ++type Msghdr struct { ++ Name *byte ++ Namelen uint32 ++ Iov *Iovec ++ Iovlen uint64 ++ Control *byte ++ Controllen uint64 ++ Flags int32 ++ _ [4]byte ++} ++ ++type Cmsghdr struct { ++ Len uint64 ++ Level int32 ++ Type int32 ++} ++ ++const ( ++ SizeofIovec = 0x10 ++ SizeofMsghdr = 0x38 ++ SizeofCmsghdr = 0x10 ++) ++ ++const ( ++ SizeofSockFprog = 0x10 ++) ++ ++type PtraceRegs struct { ++ Regs [32]uint64 ++ Crmd uint64 ++ Prmd uint64 ++ Cu uint64 ++ Exconfig uint64 ++ Exst uint64 ++ Epc uint64 ++ Badvaddr uint64 ++ Orig_a0 uint64 ++} ++ ++type ptracePsw struct { ++} ++ ++type ptraceFpregs struct { ++} ++ ++type ptracePer struct { ++} ++ ++type FdSet struct { ++ Bits [16]int64 ++} ++ ++type Sysinfo_t struct { ++ Uptime int64 ++ Loads [3]uint64 ++ Totalram uint64 ++ Freeram uint64 ++ Sharedram uint64 ++ Bufferram uint64 ++ Totalswap uint64 ++ Freeswap uint64 ++ Procs uint16 ++ Pad uint16 ++ Totalhigh uint64 ++ Freehigh uint64 ++ Unit uint32 ++ _ [0]int8 ++ _ [4]byte ++} ++ ++type Ustat_t struct { ++ Tfree int32 ++ Tinode uint64 ++ Fname [6]int8 ++ Fpack [6]int8 ++ _ [4]byte ++} ++ ++type EpollEvent struct { ++ Events uint32 ++ PadFd int32 ++ Fd int32 ++ Pad int32 ++} ++ ++const ( ++ POLLRDHUP = 0x2000 ++) ++ ++type Sigset_t struct { ++ Val [16]uint64 ++} ++ ++const _C__NSIG = 0x41 ++ ++type Termios struct { ++ Iflag uint32 ++ Oflag uint32 ++ Cflag uint32 ++ Lflag uint32 ++ Line uint8 ++ Cc [32]uint8 ++ Ispeed uint32 ++ Ospeed uint32 ++} ++ ++type Taskstats struct { ++ Version uint16 ++ Ac_exitcode uint32 ++ Ac_flag uint8 ++ Ac_nice uint8 ++ Cpu_count uint64 ++ Cpu_delay_total uint64 ++ Blkio_count uint64 ++ Blkio_delay_total uint64 ++ Swapin_count uint64 ++ Swapin_delay_total uint64 ++ Cpu_run_real_total uint64 ++ Cpu_run_virtual_total uint64 ++ Ac_comm [32]int8 ++ Ac_sched uint8 ++ Ac_pad [3]uint8 ++ _ [4]byte ++ Ac_uid uint32 ++ Ac_gid uint32 ++ Ac_pid uint32 ++ Ac_ppid uint32 ++ Ac_btime uint32 ++ Ac_etime uint64 ++ Ac_utime uint64 ++ Ac_stime uint64 ++ Ac_minflt uint64 ++ Ac_majflt uint64 ++ Coremem uint64 ++ Virtmem uint64 ++ Hiwater_rss uint64 ++ Hiwater_vm uint64 ++ Read_char uint64 ++ Write_char uint64 ++ Read_syscalls uint64 ++ Write_syscalls uint64 ++ Read_bytes uint64 ++ Write_bytes uint64 ++ Cancelled_write_bytes uint64 ++ Nvcsw uint64 ++ Nivcsw uint64 ++ Ac_utimescaled uint64 ++ Ac_stimescaled uint64 ++ Cpu_scaled_run_real_total uint64 ++ Freepages_count uint64 ++ Freepages_delay_total uint64 ++ Thrashing_count uint64 ++ Thrashing_delay_total uint64 ++ Ac_btime64 uint64 ++} ++ ++type cpuMask uint64 ++ ++const ( ++ _NCPUBITS = 0x40 ++) ++ ++const ( ++ CBitFieldMaskBit0 = 0x1 ++ CBitFieldMaskBit1 = 0x2 ++ CBitFieldMaskBit2 = 0x4 ++ CBitFieldMaskBit3 = 0x8 ++ CBitFieldMaskBit4 = 0x10 ++ CBitFieldMaskBit5 = 0x20 ++ CBitFieldMaskBit6 = 0x40 ++ CBitFieldMaskBit7 = 0x80 ++ CBitFieldMaskBit8 = 0x100 ++ CBitFieldMaskBit9 = 0x200 ++ CBitFieldMaskBit10 = 0x400 ++ CBitFieldMaskBit11 = 0x800 ++ CBitFieldMaskBit12 = 0x1000 ++ CBitFieldMaskBit13 = 0x2000 ++ CBitFieldMaskBit14 = 0x4000 ++ CBitFieldMaskBit15 = 0x8000 ++ CBitFieldMaskBit16 = 0x10000 ++ CBitFieldMaskBit17 = 0x20000 ++ CBitFieldMaskBit18 = 0x40000 ++ CBitFieldMaskBit19 = 0x80000 ++ CBitFieldMaskBit20 = 0x100000 ++ CBitFieldMaskBit21 = 0x200000 ++ CBitFieldMaskBit22 = 0x400000 ++ CBitFieldMaskBit23 = 0x800000 ++ CBitFieldMaskBit24 = 0x1000000 ++ CBitFieldMaskBit25 = 0x2000000 ++ CBitFieldMaskBit26 = 0x4000000 ++ CBitFieldMaskBit27 = 0x8000000 ++ CBitFieldMaskBit28 = 0x10000000 ++ CBitFieldMaskBit29 = 0x20000000 ++ CBitFieldMaskBit30 = 0x40000000 ++ CBitFieldMaskBit31 = 0x80000000 ++ CBitFieldMaskBit32 = 0x100000000 ++ CBitFieldMaskBit33 = 0x200000000 ++ CBitFieldMaskBit34 = 0x400000000 ++ CBitFieldMaskBit35 = 0x800000000 ++ CBitFieldMaskBit36 = 0x1000000000 ++ CBitFieldMaskBit37 = 0x2000000000 ++ CBitFieldMaskBit38 = 0x4000000000 ++ CBitFieldMaskBit39 = 0x8000000000 ++ CBitFieldMaskBit40 = 0x10000000000 ++ CBitFieldMaskBit41 = 0x20000000000 ++ CBitFieldMaskBit42 = 0x40000000000 ++ CBitFieldMaskBit43 = 0x80000000000 ++ CBitFieldMaskBit44 = 0x100000000000 ++ CBitFieldMaskBit45 = 0x200000000000 ++ CBitFieldMaskBit46 = 0x400000000000 ++ CBitFieldMaskBit47 = 0x800000000000 ++ CBitFieldMaskBit48 = 0x1000000000000 ++ CBitFieldMaskBit49 = 0x2000000000000 ++ CBitFieldMaskBit50 = 0x4000000000000 ++ CBitFieldMaskBit51 = 0x8000000000000 ++ CBitFieldMaskBit52 = 0x10000000000000 ++ CBitFieldMaskBit53 = 0x20000000000000 ++ CBitFieldMaskBit54 = 0x40000000000000 ++ CBitFieldMaskBit55 = 0x80000000000000 ++ CBitFieldMaskBit56 = 0x100000000000000 ++ CBitFieldMaskBit57 = 0x200000000000000 ++ CBitFieldMaskBit58 = 0x400000000000000 ++ CBitFieldMaskBit59 = 0x800000000000000 ++ CBitFieldMaskBit60 = 0x1000000000000000 ++ CBitFieldMaskBit61 = 0x2000000000000000 ++ CBitFieldMaskBit62 = 0x4000000000000000 ++ CBitFieldMaskBit63 = 0x8000000000000000 ++) ++ ++type SockaddrStorage struct { ++ Family uint16 ++ _ [118]int8 ++ _ uint64 ++} ++ ++type HDGeometry struct { ++ Heads uint8 ++ Sectors uint8 ++ Cylinders uint16 ++ Start uint64 ++} ++ ++type Statfs_t struct { ++ Type int64 ++ Bsize int64 ++ Blocks uint64 ++ Bfree uint64 ++ Bavail uint64 ++ Files uint64 ++ Ffree uint64 ++ Fsid Fsid ++ Namelen int64 ++ Frsize int64 ++ Flags int64 ++ Spare [4]int64 ++} ++ ++type TpacketHdr struct { ++ Status uint64 ++ Len uint32 ++ Snaplen uint32 ++ Mac uint16 ++ Net uint16 ++ Sec uint32 ++ Usec uint32 ++ _ [4]byte ++} ++ ++const ( ++ SizeofTpacketHdr = 0x20 ++) ++ ++type RTCPLLInfo struct { ++ Ctrl int32 ++ Value int32 ++ Max int32 ++ Min int32 ++ Posmult int32 ++ Negmult int32 ++ Clock int64 ++} ++ ++type BlkpgPartition struct { ++ Start int64 ++ Length int64 ++ Pno int32 ++ Devname [64]uint8 ++ Volname [64]uint8 ++ _ [4]byte ++} ++ ++const ( ++ BLKPG = 0x1269 ++) ++ ++type XDPUmemReg struct { ++ Addr uint64 ++ Len uint64 ++ Size uint32 ++ Headroom uint32 ++ Flags uint32 ++ _ [4]byte ++} ++ ++type CryptoUserAlg struct { ++ Name [64]int8 ++ Driver_name [64]int8 ++ Module_name [64]int8 ++ Type uint32 ++ Mask uint32 ++ Refcnt uint32 ++ Flags uint32 ++} ++ ++type CryptoStatAEAD struct { ++ Type [64]int8 ++ Encrypt_cnt uint64 ++ Encrypt_tlen uint64 ++ Decrypt_cnt uint64 ++ Decrypt_tlen uint64 ++ Err_cnt uint64 ++} ++ ++type CryptoStatAKCipher struct { ++ Type [64]int8 ++ Encrypt_cnt uint64 ++ Encrypt_tlen uint64 ++ Decrypt_cnt uint64 ++ Decrypt_tlen uint64 ++ Verify_cnt uint64 ++ Sign_cnt uint64 ++ Err_cnt uint64 ++} ++ ++type CryptoStatCipher struct { ++ Type [64]int8 ++ Encrypt_cnt uint64 ++ Encrypt_tlen uint64 ++ Decrypt_cnt uint64 ++ Decrypt_tlen uint64 ++ Err_cnt uint64 ++} ++ ++type CryptoStatCompress struct { ++ Type [64]int8 ++ Compress_cnt uint64 ++ Compress_tlen uint64 ++ Decompress_cnt uint64 ++ Decompress_tlen uint64 ++ Err_cnt uint64 ++} ++ ++type CryptoStatHash struct { ++ Type [64]int8 ++ Hash_cnt uint64 ++ Hash_tlen uint64 ++ Err_cnt uint64 ++} ++ ++type CryptoStatKPP struct { ++ Type [64]int8 ++ Setsecret_cnt uint64 ++ Generate_public_key_cnt uint64 ++ Compute_shared_secret_cnt uint64 ++ Err_cnt uint64 ++} ++ ++type CryptoStatRNG struct { ++ Type [64]int8 ++ Generate_cnt uint64 ++ Generate_tlen uint64 ++ Seed_cnt uint64 ++ Err_cnt uint64 ++} ++ ++type CryptoStatLarval struct { ++ Type [64]int8 ++} ++ ++type CryptoReportLarval struct { ++ Type [64]int8 ++} ++ ++type CryptoReportHash struct { ++ Type [64]int8 ++ Blocksize uint32 ++ Digestsize uint32 ++} ++ ++type CryptoReportCipher struct { ++ Type [64]int8 ++ Blocksize uint32 ++ Min_keysize uint32 ++ Max_keysize uint32 ++} ++ ++type CryptoReportBlkCipher struct { ++ Type [64]int8 ++ Geniv [64]int8 ++ Blocksize uint32 ++ Min_keysize uint32 ++ Max_keysize uint32 ++ Ivsize uint32 ++} ++ ++type CryptoReportAEAD struct { ++ Type [64]int8 ++ Geniv [64]int8 ++ Blocksize uint32 ++ Maxauthsize uint32 ++ Ivsize uint32 ++} ++ ++type CryptoReportComp struct { ++ Type [64]int8 ++} ++ ++type CryptoReportRNG struct { ++ Type [64]int8 ++ Seedsize uint32 ++} ++ ++type CryptoReportAKCipher struct { ++ Type [64]int8 ++} ++ ++type CryptoReportKPP struct { ++ Type [64]int8 ++} ++ ++type CryptoReportAcomp struct { ++ Type [64]int8 ++} ++ ++type LoopInfo struct { ++ Number int32 ++ Device uint32 ++ Inode uint64 ++ Rdevice uint32 ++ Offset int32 ++ Encrypt_type int32 ++ Encrypt_key_size int32 ++ Flags int32 ++ Name [64]int8 ++ Encrypt_key [32]uint8 ++ Init [2]uint64 ++ Reserved [4]int8 ++ _ [4]byte ++} ++ ++type TIPCSubscr struct { ++ Seq TIPCServiceRange ++ Timeout uint32 ++ Filter uint32 ++ Handle [8]int8 ++} ++ ++type TIPCSIOCLNReq struct { ++ Peer uint32 ++ Id uint32 ++ Linkname [68]int8 ++} ++ ++type TIPCSIOCNodeIDReq struct { ++ Peer uint32 ++ Id [16]int8 ++} +-- +2.17.1 + diff --git a/package/docker-containerd/0003-bolt-port-to-loongarch64.patch b/package/docker-containerd/0003-bolt-port-to-loongarch64.patch new file mode 100644 index 00000000..b7d89f68 --- /dev/null +++ b/package/docker-containerd/0003-bolt-port-to-loongarch64.patch @@ -0,0 +1,28 @@ +From 6792e987d0d4a6442291a8b8f795b9abf58386f2 Mon Sep 17 00:00:00 2001 +From: loongson +Date: Wed, 9 Aug 2023 11:47:23 +0800 +Subject: [PATCH 1/2] bolt:port to loongarch64 + +--- + vendor/go.etcd.io/bbolt/bolt_loong64.go | 9 +++++++++ + 1 file changed, 9 insertions(+) + create mode 100644 vendor/go.etcd.io/bbolt/bolt_loong64.go + +diff --git a/vendor/go.etcd.io/bbolt/bolt_loong64.go b/vendor/go.etcd.io/bbolt/bolt_loong64.go +new file mode 100644 +index 0000000..d74c275 +--- /dev/null ++++ b/vendor/go.etcd.io/bbolt/bolt_loong64.go +@@ -0,0 +1,9 @@ ++// +build loong64 ++ ++package bbolt ++ ++// maxMapSize represents the largest mmap size supported by Bolt. ++const maxMapSize = 0x8000000000 // 512GB ++ ++// maxAllocSize is the size used when creating array pointers. ++const maxAllocSize = 0x7FFFFFFF +-- +2.17.1 + diff --git a/package/docker-containerd/Config.in b/package/docker-containerd/Config.in new file mode 100644 index 00000000..9568dd0a --- /dev/null +++ b/package/docker-containerd/Config.in @@ -0,0 +1,35 @@ +config BR2_PACKAGE_DOCKER_CONTAINERD + bool "docker-containerd" + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_TOOLCHAIN_USES_UCLIBC # runc + depends on BR2_USE_MMU # util-linux + select BR2_PACKAGE_RUNC # runtime dependency + select BR2_PACKAGE_UTIL_LINUX # runtime dependency + select BR2_PACKAGE_UTIL_LINUX_BINARIES + select BR2_PACKAGE_UTIL_LINUX_PIVOT_ROOT + select BR2_PACKAGE_UTIL_LINUX_MOUNTPOINT + select BR2_PACKAGE_UTIL_LINUX_MOUNT + help + containerd is a daemon to control runC. + + https://containerd.io/ + +if BR2_PACKAGE_DOCKER_CONTAINERD + +config BR2_PACKAGE_DOCKER_CONTAINERD_DRIVER_BTRFS + bool "btrfs snapshot driver" + depends on BR2_USE_MMU # btrfs-progs + depends on BR2_TOOLCHAIN_HAS_THREADS # btrfs-progs + select BR2_PACKAGE_BTRFS_PROGS + help + Build the btrfs snapshot driver for containerd. + +endif + +comment "docker-containerd needs a glibc or musl toolchain w/ threads" + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_TOOLCHAIN_USES_UCLIBC diff --git a/package/docker-containerd/docker-containerd.hash b/package/docker-containerd/docker-containerd.hash new file mode 100644 index 00000000..bb544e8d --- /dev/null +++ b/package/docker-containerd/docker-containerd.hash @@ -0,0 +1,3 @@ +# Computed locally +sha256 ac62c64664bf62fd44df0891c896eecdb6d93def3438271d7892dca75bc069d1 docker-containerd-1.4.4.tar.gz +sha256 4bbe3b885e8cd1907ab4cf9a41e862e74e24b5422297a4f2fe524e6a30ada2b4 LICENSE diff --git a/package/docker-containerd/docker-containerd.mk b/package/docker-containerd/docker-containerd.mk new file mode 100644 index 00000000..e229d9cb --- /dev/null +++ b/package/docker-containerd/docker-containerd.mk @@ -0,0 +1,44 @@ +################################################################################ +# +# docker-containerd +# +################################################################################ + +DOCKER_CONTAINERD_VERSION = 1.4.4 +DOCKER_CONTAINERD_SITE = $(call github,containerd,containerd,v$(DOCKER_CONTAINERD_VERSION)) +DOCKER_CONTAINERD_LICENSE = Apache-2.0 +DOCKER_CONTAINERD_LICENSE_FILES = LICENSE +DOCKER_CONTAINERD_CPE_ID_VENDOR = linuxfoundation +DOCKER_CONTAINERD_CPE_ID_PRODUCT = containerd + +DOCKER_CONTAINERD_GOMOD = github.com/containerd/containerd + +DOCKER_CONTAINERD_LDFLAGS = \ + -X $(DOCKER_CONTAINERD_GOMOD)/version.Version=$(DOCKER_CONTAINERD_VERSION) + +DOCKER_CONTAINERD_BUILD_TARGETS = \ + cmd/containerd \ + cmd/containerd-shim \ + cmd/containerd-shim-runc-v1 \ + cmd/containerd-shim-runc-v2 \ + cmd/ctr + +DOCKER_CONTAINERD_INSTALL_BINS = $(notdir $(DOCKER_CONTAINERD_BUILD_TARGETS)) + +ifeq ($(BR2_PACKAGE_LIBAPPARMOR),y) +DOCKER_CONTAINERD_DEPENDENCIES += libapparmor +DOCKER_CONTAINERD_TAGS += apparmor +endif + +ifeq ($(BR2_PACKAGE_LIBSECCOMP),y) +DOCKER_CONTAINERD_DEPENDENCIES += libseccomp host-pkgconf +DOCKER_CONTAINERD_TAGS += seccomp +endif + +ifeq ($(BR2_PACKAGE_DOCKER_CONTAINERD_DRIVER_BTRFS),y) +DOCKER_CONTAINERD_DEPENDENCIES += btrfs-progs +else +DOCKER_CONTAINERD_TAGS += no_btrfs +endif + +$(eval $(golang-package)) diff --git a/package/docker-engine/Config.in b/package/docker-engine/Config.in new file mode 100644 index 00000000..4fa3b5a8 --- /dev/null +++ b/package/docker-engine/Config.in @@ -0,0 +1,57 @@ +config BR2_PACKAGE_DOCKER_ENGINE + bool "docker-engine" + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_TOOLCHAIN_USES_UCLIBC # docker-containerd -> runc + depends on BR2_USE_MMU # docker-containerd + select BR2_PACKAGE_CGROUPFS_MOUNT if !BR2_PACKAGE_SYSTEMD # runtime dependency + select BR2_PACKAGE_DOCKER_CONTAINERD # runtime dependency + select BR2_PACKAGE_DOCKER_PROXY # runtime dependency + select BR2_PACKAGE_IPTABLES # runtime dependency + select BR2_PACKAGE_SQLITE # runtime dependency + help + Docker is a platform to build, ship, + and run applications as lightweight containers. + + https://github.com/docker/docker + +if BR2_PACKAGE_DOCKER_ENGINE + +config BR2_PACKAGE_DOCKER_ENGINE_EXPERIMENTAL + bool "build experimental features" + +config BR2_PACKAGE_DOCKER_ENGINE_DRIVER_BTRFS + bool "btrfs filesystem driver" + depends on BR2_USE_MMU # btrfs-progs + depends on BR2_TOOLCHAIN_HAS_THREADS # btrfs-progs + select BR2_PACKAGE_BTRFS_PROGS + help + Build the btrfs filesystem driver for Docker. + +config BR2_PACKAGE_DOCKER_ENGINE_DRIVER_DEVICEMAPPER + bool "devicemapper filesystem driver" + depends on BR2_TOOLCHAIN_HAS_THREADS # lvm2 + depends on BR2_USE_MMU # lvm2 + depends on !BR2_STATIC_LIBS # lvm2 + select BR2_PACKAGE_LVM2 + help + Build the devicemapper filesystem driver for Docker. + +config BR2_PACKAGE_DOCKER_ENGINE_DRIVER_VFS + bool "vfs filesystem driver" + depends on BR2_USE_WCHAR # gvfs + depends on BR2_USE_MMU # gvfs + depends on BR2_TOOLCHAIN_HAS_THREADS # gvfs + depends on !BR2_STATIC_LIBS # gvfs + select BR2_PACKAGE_GVFS + help + Build the vfs filesystem driver for Docker. + +endif + +comment "docker-engine needs a glibc or musl toolchain w/ threads" + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_TOOLCHAIN_USES_UCLIBC + depends on BR2_USE_MMU diff --git a/package/docker-engine/S60dockerd b/package/docker-engine/S60dockerd new file mode 100644 index 00000000..def8bea1 --- /dev/null +++ b/package/docker-engine/S60dockerd @@ -0,0 +1,38 @@ +#!/bin/sh + +NAME=dockerd +DAEMON=/usr/bin/$NAME +PIDFILE=/var/run/$NAME.pid +DAEMON_ARGS="" + +[ -r /etc/default/$NAME ] && . /etc/default/$NAME $1 + +do_start() { + echo -n "Starting $NAME: " + start-stop-daemon --start --quiet --background --make-pidfile \ + --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS \ + && echo "OK" || echo "FAIL" +} + +do_stop() { + echo -n "Stopping $NAME: " + start-stop-daemon --stop --quiet --pidfile $PIDFILE \ + && echo "OK" || echo "FAIL" +} + +case "$1" in + start) + do_start + ;; + stop) + do_stop + ;; + restart) + do_stop + sleep 1 + do_start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac diff --git a/package/docker-engine/docker-engine.hash b/package/docker-engine/docker-engine.hash new file mode 100644 index 00000000..d07ca333 --- /dev/null +++ b/package/docker-engine/docker-engine.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 b80142035de46904605fb7b8f18075cd94154f8c3d67ff346ea554d1e9d579b9 docker-engine-20.10.7.tar.gz +sha256 7c87873291f289713ac5df48b1f2010eb6963752bbd6b530416ab99fc37914a8 LICENSE diff --git a/package/docker-engine/docker-engine.mk b/package/docker-engine/docker-engine.mk new file mode 100644 index 00000000..37271777 --- /dev/null +++ b/package/docker-engine/docker-engine.mk @@ -0,0 +1,138 @@ +################################################################################ +# +# docker-engine +# +################################################################################ + +DOCKER_ENGINE_VERSION = 20.10.7 +DOCKER_ENGINE_SITE = $(call github,moby,moby,v$(DOCKER_ENGINE_VERSION)) + +DOCKER_ENGINE_LICENSE = Apache-2.0 +DOCKER_ENGINE_LICENSE_FILES = LICENSE + +DOCKER_ENGINE_DEPENDENCIES = host-pkgconf +DOCKER_ENGINE_GOMOD = github.com/docker/docker + +DOCKER_ENGINE_CPE_ID_VENDOR = docker +DOCKER_ENGINE_CPE_ID_PRODUCT = docker + +DOCKER_ENGINE_LDFLAGS = \ + -X $(DOCKER_ENGINE_GOMOD)/dockerversion.BuildTime="" \ + -X $(DOCKER_ENGINE_GOMOD)/dockerversion.GitCommit="buildroot" \ + -X $(DOCKER_ENGINE_GOMOD)/dockerversion.IAmStatic="false" \ + -X $(DOCKER_ENGINE_GOMOD)/dockerversion.InitCommitID="" \ + -X $(DOCKER_ENGINE_GOMOD)/dockerversion.Version="$(DOCKER_ENGINE_VERSION)" + +DOCKER_ENGINE_TAGS = cgo exclude_graphdriver_zfs +DOCKER_ENGINE_BUILD_TARGETS = cmd/dockerd + +ifeq ($(BR2_PACKAGE_LIBAPPARMOR),y) +DOCKER_ENGINE_DEPENDENCIES += libapparmor +DOCKER_ENGINE_TAGS += apparmor +endif + +ifeq ($(BR2_PACKAGE_LIBSECCOMP),y) +DOCKER_ENGINE_TAGS += seccomp +DOCKER_ENGINE_DEPENDENCIES += libseccomp +endif + +ifeq ($(BR2_INIT_SYSTEMD),y) +DOCKER_ENGINE_DEPENDENCIES += systemd +DOCKER_ENGINE_TAGS += systemd journald +endif +ifeq ($(BR2_PACKAGE_DOCKER_ENGINE_EXPERIMENTAL),y) +DOCKER_ENGINE_TAGS += experimental +endif + +ifeq ($(BR2_PACKAGE_DOCKER_ENGINE_DRIVER_BTRFS),y) +DOCKER_ENGINE_DEPENDENCIES += btrfs-progs +else +DOCKER_ENGINE_TAGS += exclude_graphdriver_btrfs +endif + +ifeq ($(BR2_PACKAGE_DOCKER_ENGINE_DRIVER_DEVICEMAPPER),y) +DOCKER_ENGINE_DEPENDENCIES += lvm2 +else +DOCKER_ENGINE_TAGS += exclude_graphdriver_devicemapper +endif + +ifeq ($(BR2_PACKAGE_DOCKER_ENGINE_DRIVER_VFS),y) +DOCKER_ENGINE_DEPENDENCIES += gvfs +else +DOCKER_ENGINE_TAGS += exclude_graphdriver_vfs +endif + +DOCKER_ENGINE_INSTALL_BINS = $(notdir $(DOCKER_ENGINE_BUILD_TARGETS)) + +define DOCKER_ENGINE_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0644 $(@D)/contrib/init/systemd/docker.service \ + $(TARGET_DIR)/usr/lib/systemd/system/docker.service + $(INSTALL) -D -m 0644 $(@D)/contrib/init/systemd/docker.socket \ + $(TARGET_DIR)/usr/lib/systemd/system/docker.socket +endef + +define DOCKER_ENGINE_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 package/docker-engine/S60dockerd \ + $(TARGET_DIR)/etc/init.d/S60dockerd +endef + +define DOCKER_ENGINE_USERS + - - docker -1 * - - - Docker Application Container Framework +endef + +ifeq ($(BR2_PACKAGE_DOCKER_ENGINE_DRIVER_BTRFS),y) +define DOCKER_ENGINE_DRIVER_BTRFS_LINUX_CONFIG_FIXUPS + $(call KCONFIG_ENABLE_OPT,CONFIG_BTRFS_FS) + $(call KCONFIG_ENABLE_OPT,CONFIG_BTRFS_FS_POSIX_ACL) +endef +endif + +ifeq ($(BR2_PACKAGE_DOCKER_ENGINE_DRIVER_DEVICEMAPPER),y) +define DOCKER_ENGINE_DRIVER_DM_LINUX_CONFIG_FIXUPS + $(call KCONFIG_ENABLE_OPT,CONFIG_MD) + $(call KCONFIG_ENABLE_OPT,CONFIG_BLK_DEV_DM) + $(call KCONFIG_ENABLE_OPT,CONFIG_MD_THIN_PROVISIONING) +endef +endif + +# based on contrib/check-config.sh +define DOCKER_ENGINE_LINUX_CONFIG_FIXUPS + $(call KCONFIG_ENABLE_OPT,CONFIG_POSIX_MQUEUE) + $(call KCONFIG_ENABLE_OPT,CONFIG_CGROUPS) + $(call KCONFIG_ENABLE_OPT,CONFIG_MEMCG) + $(call KCONFIG_ENABLE_OPT,CONFIG_CGROUP_SCHED) + $(call KCONFIG_ENABLE_OPT,CONFIG_CGROUP_FREEZER) + $(call KCONFIG_ENABLE_OPT,CONFIG_CPUSETS) + $(call KCONFIG_ENABLE_OPT,CONFIG_CGROUP_DEVICE) + $(call KCONFIG_ENABLE_OPT,CONFIG_CGROUP_CPUACCT) + $(call KCONFIG_ENABLE_OPT,CONFIG_NAMESPACES) + $(call KCONFIG_ENABLE_OPT,CONFIG_UTS_NS) + $(call KCONFIG_ENABLE_OPT,CONFIG_IPC_NS) + $(call KCONFIG_ENABLE_OPT,CONFIG_PID_NS) + $(call KCONFIG_ENABLE_OPT,CONFIG_NET_NS) + $(call KCONFIG_ENABLE_OPT,CONFIG_NETFILTER) + $(call KCONFIG_ENABLE_OPT,CONFIG_NETFILTER_ADVANCED) + $(call KCONFIG_ENABLE_OPT,CONFIG_BRIDGE_NETFILTER) + $(call KCONFIG_ENABLE_OPT,CONFIG_NF_CONNTRACK) + $(call KCONFIG_ENABLE_OPT,CONFIG_NETFILTER_XTABLES) + $(call KCONFIG_ENABLE_OPT,CONFIG_NETFILTER_XT_MATCH_ADDRTYPE) + $(call KCONFIG_ENABLE_OPT,CONFIG_NETFILTER_XT_MATCH_CONNTRACK) + $(call KCONFIG_ENABLE_OPT,CONFIG_NETFILTER_XT_MATCH_IPVS) + $(call KCONFIG_ENABLE_OPT,CONFIG_IP_NF_IPTABLES) + $(call KCONFIG_ENABLE_OPT,CONFIG_IP_NF_FILTER) + $(call KCONFIG_ENABLE_OPT,CONFIG_IP_NF_NAT) + $(call KCONFIG_ENABLE_OPT,CONFIG_IP_NF_TARGET_MASQUERADE) + $(call KCONFIG_ENABLE_OPT,CONFIG_BRIDGE) + $(call KCONFIG_ENABLE_OPT,CONFIG_NET_CORE) + $(call KCONFIG_ENABLE_OPT,CONFIG_DUMMY) + $(call KCONFIG_ENABLE_OPT,CONFIG_MACVLAN) + $(call KCONFIG_ENABLE_OPT,CONFIG_IPVLAN) + $(call KCONFIG_ENABLE_OPT,CONFIG_VXLAN) + $(call KCONFIG_ENABLE_OPT,CONFIG_VETH) + $(call KCONFIG_ENABLE_OPT,CONFIG_OVERLAY_FS) + $(call KCONFIG_ENABLE_OPT,CONFIG_KEYS) + $(DOCKER_ENGINE_DRIVER_BTRFS_LINUX_CONFIG_FIXUPS) + $(DOCKER_ENGINE_DRIVER_DM_LINUX_CONFIG_FIXUPS) +endef + +$(eval $(golang-package)) diff --git a/package/docker-proxy/Config.in b/package/docker-proxy/Config.in new file mode 100644 index 00000000..7e405365 --- /dev/null +++ b/package/docker-proxy/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_DOCKER_PROXY + bool "docker-proxy" + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Libnetwork is a Container Network Model that provides a + consistent programming interface and the required network + abstractions for applications. + + This package provides docker-proxy, a run-time dependency of + Docker. + + https://github.com/docker/libnetwork + +comment "docker-proxy needs a toolchain w/ threads" + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/docker-proxy/docker-proxy.hash b/package/docker-proxy/docker-proxy.hash new file mode 100644 index 00000000..58de6979 --- /dev/null +++ b/package/docker-proxy/docker-proxy.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 866c8d196b9396a383b437b0d775476459ed7c11f527c4f6bbf1fd08524b461d docker-proxy-55685ba49593e67f5e1c8180539379b16736c25e.tar.gz +sha256 cb5e8e7e5f4a3988e1063c142c60dc2df75605f4c46515e776e3aca6df976e14 LICENSE diff --git a/package/docker-proxy/docker-proxy.mk b/package/docker-proxy/docker-proxy.mk new file mode 100644 index 00000000..6600b24e --- /dev/null +++ b/package/docker-proxy/docker-proxy.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# docker-proxy +# +################################################################################ + +DOCKER_PROXY_VERSION = 55685ba49593e67f5e1c8180539379b16736c25e +DOCKER_PROXY_SITE = $(call github,docker,libnetwork,$(DOCKER_PROXY_VERSION)) + +DOCKER_PROXY_LICENSE = Apache-2.0 +DOCKER_PROXY_LICENSE_FILES = LICENSE + +DOCKER_PROXY_DEPENDENCIES = host-pkgconf + +DOCKER_PROXY_BUILD_TARGETS = cmd/proxy + +define DOCKER_PROXY_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/bin/proxy $(TARGET_DIR)/usr/bin/docker-proxy +endef + +$(eval $(golang-package)) diff --git a/package/docker/Config.in b/package/docker/Config.in new file mode 100644 index 00000000..12f8432b --- /dev/null +++ b/package/docker/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_DOCKER + bool "docker" + depends on BR2_PACKAGE_XORG7 + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_XLIB_LIBX11 + help + a system tray dock for X + + http://icculus.org/openbox/2/docker + +comment "docker needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_XORG7 + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/docker/docker.hash b/package/docker/docker.hash new file mode 100644 index 00000000..cf0f00e8 --- /dev/null +++ b/package/docker/docker.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 47629578e89d96d1541c91d040aec4316f03ad6d01dc3eecb8f82a33445c1e4e docker-1.5.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING +sha256 fd82a1ac93bfe0a5afcf28cfb5342dd02015555fc23529a87bd77a7b271d3262 README diff --git a/package/docker/docker.mk b/package/docker/docker.mk new file mode 100644 index 00000000..4a8c6fcd --- /dev/null +++ b/package/docker/docker.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# docker +# +################################################################################ + +DOCKER_VERSION = 1.5 +DOCKER_SITE = http://icculus.org/openbox/2/docker +DOCKER_DEPENDENCIES = host-pkgconf libglib2 xlib_libX11 + +DOCKER_LICENSE = GPL-2.0+ +# The 'or later' is specified at the end of the README, so include that one too. +DOCKER_LICENSE_FILES = COPYING README + +define DOCKER_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + XLIBPATH=$(STAGING_DIR)/usr/lib +endef + +define DOCKER_INSTALL_TARGET_CMDS + $(TARGET_CONFIGURE_OPTS) $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + XLIBPATH=$(STAGING_DIR)/usr/lib PREFIX=$(TARGET_DIR)/usr install +endef + +$(eval $(generic-package)) diff --git a/package/domoticz/0001-Avoid-deprecated-bind-placeholders-in-global-namespace.patch b/package/domoticz/0001-Avoid-deprecated-bind-placeholders-in-global-namespace.patch new file mode 100644 index 00000000..5cf53b39 --- /dev/null +++ b/package/domoticz/0001-Avoid-deprecated-bind-placeholders-in-global-namespace.patch @@ -0,0 +1,843 @@ +From bbcf7fd0646d74b7f169b3aa4231d9150028ed0d Mon Sep 17 00:00:00 2001 +From: Rob Peters +Date: Sun, 17 May 2020 11:46:37 +0200 +Subject: [PATCH] Avoid deprecated bind placeholders in global namespace + +[Retrieved (and slightly updated to backport it) from: +https://github.com/domoticz/domoticz/commit/bbcf7fd0646d74b7f169b3aa4231d9150028ed0d] +Signed-off-by: Fabrice Fontaine +--- + hardware/ASyncSerial.cpp | 2 +- + hardware/ASyncTCP.cpp | 4 +++- + hardware/Comm5Serial.cpp | 2 ++ + hardware/CurrentCostMeterSerial.cpp | 4 +++- + hardware/DavisLoggerSerial.cpp | 4 +++- + hardware/DenkoviUSBDevices.cpp | 2 ++ + hardware/EnOceanESP2.cpp | 4 +++- + hardware/EnOceanESP3.cpp | 4 +++- + hardware/EvohomeRadio.cpp | 3 +++ + hardware/EvohomeSerial.cpp | 2 ++ + hardware/KMTronic433.cpp | 4 +++- + hardware/KMTronicBase.cpp | 2 +- + hardware/KMTronicSerial.cpp | 4 +++- + hardware/MQTT.cpp | 2 ++ + hardware/Meteostick.cpp | 4 +++- + hardware/MySensorsBase.cpp | 2 +- + hardware/MySensorsSerial.cpp | 4 +++- + hardware/OTGWBase.cpp | 2 +- + hardware/OTGWSerial.cpp | 4 +++- + hardware/OpenWebNetUSB.cpp | 3 ++- + hardware/P1MeterSerial.cpp | 4 +++- + hardware/Pinger.cpp | 2 ++ + hardware/RAVEn.cpp | 2 ++ + hardware/RFLinkSerial.cpp | 2 ++ + hardware/RFXComSerial.cpp | 4 +++- + hardware/RFXComTCP.cpp | 2 -- + hardware/Rego6XXSerial.cpp | 4 +++- + hardware/S0MeterBase.cpp | 2 +- + hardware/S0MeterSerial.cpp | 4 +++- + hardware/TCPProxy/tcpproxy_server.cpp | 2 ++ + hardware/TeleinfoSerial.cpp | 4 +++- + hardware/USBtin.cpp | 4 +++- + hardware/XiaomiGateway.cpp | 2 +- + hardware/Yeelight.h | 1 - + hardware/ZiBlueSerial.cpp | 2 ++ + hardware/plugins/PluginTransports.cpp | 2 ++ + main/WebServer.cpp | 4 +++- + main/mainworker.cpp | 2 ++ + push/FibaroPush.cpp | 2 ++ + push/GooglePubSubPush.cpp | 2 ++ + push/HttpPush.cpp | 2 ++ + push/InfluxPush.cpp | 2 ++ + push/WebsocketPush.cpp | 2 ++ + tcpserver/TCPServer.cpp | 2 +- + webserver/cWebem.cpp | 2 +- + webserver/connection.cpp | 4 +++- + webserver/connection_manager.cpp | 4 +++- + webserver/proxyclient.cpp | 2 ++ + webserver/server.cpp | 4 +++- + 49 files changed, 107 insertions(+), 32 deletions(-) + +diff --git a/hardware/ASyncSerial.cpp b/hardware/ASyncSerial.cpp +index 2c9a5e27e9..36dd402fa7 100644 +--- a/hardware/ASyncSerial.cpp ++++ b/hardware/ASyncSerial.cpp +@@ -34,7 +34,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include // for shared_array +diff --git a/hardware/ASyncTCP.cpp b/hardware/ASyncTCP.cpp +index 8990c24300..7f7b1e0f24 100644 +--- a/hardware/ASyncTCP.cpp ++++ b/hardware/ASyncTCP.cpp +@@ -1,10 +1,12 @@ + #include "stdafx.h" + #include "ASyncTCP.h" + #include +-#include ++#include + #include // for error_code + #include "../main/Logger.h" + ++//using namespace boost::placeholders; ++ + struct hostent; + + #ifndef WIN32 +diff --git a/hardware/Comm5Serial.cpp b/hardware/Comm5Serial.cpp +index 9b44496fb5..f1c1f706d2 100644 +--- a/hardware/Comm5Serial.cpp ++++ b/hardware/Comm5Serial.cpp +@@ -5,6 +5,8 @@ + #include "../main/Logger.h" + #include "../main/RFXtrx.h" + ++using namespace boost::placeholders; ++ + /* + This driver allows Domoticz to control any I/O module from the MA-4xxx Family + +diff --git a/hardware/CurrentCostMeterSerial.cpp b/hardware/CurrentCostMeterSerial.cpp +index 05bac73d6a..bf9d35cab7 100644 +--- a/hardware/CurrentCostMeterSerial.cpp ++++ b/hardware/CurrentCostMeterSerial.cpp +@@ -10,10 +10,12 @@ + + #include + #include +-#include ++#include + + #include + ++using namespace boost::placeholders; ++ + // + //Class CurrentCostMeterSerial + // +diff --git a/hardware/DavisLoggerSerial.cpp b/hardware/DavisLoggerSerial.cpp +index 9c44539beb..44c9dbde5c 100644 +--- a/hardware/DavisLoggerSerial.cpp ++++ b/hardware/DavisLoggerSerial.cpp +@@ -8,13 +8,15 @@ + #include + #include + #include +-#include ++#include + + #include "../main/localtime_r.h" + #include "../main/mainworker.h" + + #include + ++using namespace boost::placeholders; ++ + #ifdef _DEBUG + //#define DEBUG_DAVIS + #endif +diff --git a/hardware/DenkoviUSBDevices.cpp b/hardware/DenkoviUSBDevices.cpp +index a7977d82c8..53a27e5583 100644 +--- a/hardware/DenkoviUSBDevices.cpp ++++ b/hardware/DenkoviUSBDevices.cpp +@@ -5,6 +5,8 @@ + #include "../main/localtime_r.h" + #include "../main/mainworker.h" + ++using namespace boost::placeholders; ++ + #define MAX_POLL_INTERVAL 3600*1000 + + #define DAE_IO_TYPE_RELAY 2 +diff --git a/hardware/EnOceanESP2.cpp b/hardware/EnOceanESP2.cpp +index f20ff9c0cb..fd08c55f63 100644 +--- a/hardware/EnOceanESP2.cpp ++++ b/hardware/EnOceanESP2.cpp +@@ -8,7 +8,7 @@ + #include + #include + #include +-#include ++#include + #include "hardwaretypes.h" + #include "../main/localtime_r.h" + +@@ -16,6 +16,8 @@ + #include + #include + ++using namespace boost::placeholders; ++ + #define ENOCEAN_RETRY_DELAY 30 + + #define round(a) ( int ) ( a + .5 ) +diff --git a/hardware/EnOceanESP3.cpp b/hardware/EnOceanESP3.cpp +index 6866eeb0d0..2afa0e1e36 100644 +--- a/hardware/EnOceanESP3.cpp ++++ b/hardware/EnOceanESP3.cpp +@@ -8,7 +8,7 @@ + #include + #include + #include +-#include ++#include + #include "hardwaretypes.h" + #include "../main/localtime_r.h" + +@@ -16,6 +16,8 @@ + #include + #include + ++using namespace boost::placeholders; ++ + #if _DEBUG + #define ENOCEAN_BUTTON_DEBUG + #endif +diff --git a/hardware/EvohomeRadio.cpp b/hardware/EvohomeRadio.cpp +index 4da983538b..6ba97158cd 100644 +--- a/hardware/EvohomeRadio.cpp ++++ b/hardware/EvohomeRadio.cpp +@@ -23,6 +23,9 @@ + #include "../main/WebServer.h" + #include "../webserver/cWebem.h" + #include "../json/json.h" ++#include ++ ++using namespace boost::placeholders; + + extern std::string szUserDataFolder; + +diff --git a/hardware/EvohomeSerial.cpp b/hardware/EvohomeSerial.cpp +index 4a54988291..c74cf576cc 100644 +--- a/hardware/EvohomeSerial.cpp ++++ b/hardware/EvohomeSerial.cpp +@@ -7,6 +7,8 @@ + #include "../main/localtime_r.h" + #include + ++using namespace boost::placeholders; ++ + CEvohomeSerial::CEvohomeSerial(const int ID, const std::string &szSerialPort, const int baudrate, const std::string &UserContID) : + CEvohomeRadio(ID, UserContID) + { +diff --git a/hardware/KMTronic433.cpp b/hardware/KMTronic433.cpp +index da81b20f9f..f9832a5a74 100644 +--- a/hardware/KMTronic433.cpp ++++ b/hardware/KMTronic433.cpp +@@ -9,11 +9,13 @@ + #include + #include + #include +-#include ++#include + #include + + #include + ++using namespace boost::placeholders; ++ + //#define DEBUG_KMTronic + + #define RETRY_DELAY 30 +diff --git a/hardware/KMTronicBase.cpp b/hardware/KMTronicBase.cpp +index b343108966..d9c45872b5 100644 +--- a/hardware/KMTronicBase.cpp ++++ b/hardware/KMTronicBase.cpp +@@ -10,7 +10,7 @@ + #include + #include + #include +-#include ++#include + + #include + +diff --git a/hardware/KMTronicSerial.cpp b/hardware/KMTronicSerial.cpp +index 4e07f2c37a..6240f941bd 100644 +--- a/hardware/KMTronicSerial.cpp ++++ b/hardware/KMTronicSerial.cpp +@@ -10,12 +10,14 @@ + #include + #include + #include +-#include ++#include + #include + #include + + //#define DEBUG_KMTronic + ++using namespace boost::placeholders; ++ + #define RETRY_DELAY 30 + + KMTronicSerial::KMTronicSerial(const int ID, const std::string& devname) +diff --git a/hardware/MQTT.cpp b/hardware/MQTT.cpp +index 8de3671853..19750bb75b 100644 +--- a/hardware/MQTT.cpp ++++ b/hardware/MQTT.cpp +@@ -11,6 +11,8 @@ + #define __STDC_FORMAT_MACROS + #include + ++using namespace boost::placeholders; ++ + #define RETRY_DELAY 30 + + #define CLIENTID "Domoticz" +diff --git a/hardware/Meteostick.cpp b/hardware/Meteostick.cpp +index 9793f4b57b..10da69d6e3 100644 +--- a/hardware/Meteostick.cpp ++++ b/hardware/Meteostick.cpp +@@ -9,12 +9,14 @@ + #include + #include + #include +-#include ++#include + #include "../main/localtime_r.h" + #include "../main/mainworker.h" + + #include + ++using namespace boost::placeholders; ++ + #define RETRY_DELAY 30 + + #define round(a) ( int ) ( a + .5 ) +diff --git a/hardware/MySensorsBase.cpp b/hardware/MySensorsBase.cpp +index af976fba95..42bf58fad5 100644 +--- a/hardware/MySensorsBase.cpp ++++ b/hardware/MySensorsBase.cpp +@@ -13,7 +13,7 @@ + #include + #include + #include +-#include ++#include + #include "../webserver/cWebem.h" + #include + +diff --git a/hardware/MySensorsSerial.cpp b/hardware/MySensorsSerial.cpp +index 44f8692d2b..42f3e05409 100644 +--- a/hardware/MySensorsSerial.cpp ++++ b/hardware/MySensorsSerial.cpp +@@ -8,12 +8,14 @@ + #include "hardwaretypes.h" + + #include +-#include ++#include + #include + #include + #include + #include + ++using namespace boost::placeholders; ++ + //#define DEBUG_MYSENSORS + + #define RETRY_DELAY 30 +diff --git a/hardware/OTGWBase.cpp b/hardware/OTGWBase.cpp +index 322574458b..ded3a31c2c 100644 +--- a/hardware/OTGWBase.cpp ++++ b/hardware/OTGWBase.cpp +@@ -12,7 +12,7 @@ + #include + #include + #include +-#include ++#include + #include "../json/json.h" + + #include +diff --git a/hardware/OTGWSerial.cpp b/hardware/OTGWSerial.cpp +index 4ade70e063..5a3416548f 100644 +--- a/hardware/OTGWSerial.cpp ++++ b/hardware/OTGWSerial.cpp +@@ -8,12 +8,14 @@ + #include "../main/localtime_r.h" + + #include +-#include ++#include + #include + #include + #include + #include + ++using namespace boost::placeholders; ++ + #define RETRY_DELAY 30 + #define OTGW_READ_INTERVAL 10 + +diff --git a/hardware/OpenWebNetUSB.cpp b/hardware/OpenWebNetUSB.cpp +index bf23049844..352a2220e9 100644 +--- a/hardware/OpenWebNetUSB.cpp ++++ b/hardware/OpenWebNetUSB.cpp +@@ -19,11 +19,12 @@ License: Public domain + + #include + #include +-#include ++#include + #include + #include + #include + ++using namespace boost::placeholders; + + COpenWebNetUSB::COpenWebNetUSB(const int ID, const std::string& devname, unsigned int baud_rate) + { +diff --git a/hardware/P1MeterSerial.cpp b/hardware/P1MeterSerial.cpp +index 566b451fa5..7dc3e0782e 100644 +--- a/hardware/P1MeterSerial.cpp ++++ b/hardware/P1MeterSerial.cpp +@@ -14,10 +14,12 @@ + #include + #include + #include +-#include ++#include + + #include + ++using namespace boost::placeholders; ++ + #ifdef _DEBUG + //#define DEBUG_P1_R + #endif +diff --git a/hardware/Pinger.cpp b/hardware/Pinger.cpp +index d3e2fda942..b6dc78a786 100644 +--- a/hardware/Pinger.cpp ++++ b/hardware/Pinger.cpp +@@ -19,6 +19,8 @@ + + #include + ++using namespace boost::placeholders; ++ + #if BOOST_VERSION >= 107000 + #define GET_IO_SERVICE(s) ((boost::asio::io_context&)(s).get_executor().context()) + #else +diff --git a/hardware/RAVEn.cpp b/hardware/RAVEn.cpp +index d9efc7480a..b6a4399d04 100644 +--- a/hardware/RAVEn.cpp ++++ b/hardware/RAVEn.cpp +@@ -8,6 +8,8 @@ + #include "../tinyxpath/tinyxml.h" + #include "hardwaretypes.h" + ++using namespace boost::placeholders; ++ + //Rainforest RAVEn USB ZigBee Smart Meter Adapter + //https://rainforestautomation.com/rfa-z106-raven/ + +diff --git a/hardware/RFLinkSerial.cpp b/hardware/RFLinkSerial.cpp +index c5cae0f739..4ab07ed88e 100644 +--- a/hardware/RFLinkSerial.cpp ++++ b/hardware/RFLinkSerial.cpp +@@ -5,6 +5,8 @@ + #include "../main/localtime_r.h" + #include + ++using namespace boost::placeholders; ++ + CRFLinkSerial::CRFLinkSerial(const int ID, const std::string& devname) : + m_szSerialPort(devname) + { +diff --git a/hardware/RFXComSerial.cpp b/hardware/RFXComSerial.cpp +index dc85f4832d..4c39520510 100644 +--- a/hardware/RFXComSerial.cpp ++++ b/hardware/RFXComSerial.cpp +@@ -12,7 +12,7 @@ + #include + #include + #include +-#include ++#include + + #include + +@@ -23,6 +23,8 @@ + #include + #endif + ++using namespace boost::placeholders; ++ + #define RETRY_DELAY 30 + + #define RFX_WRITE_DELAY 300 +diff --git a/hardware/RFXComTCP.cpp b/hardware/RFXComTCP.cpp +index 7c6b3954b8..0e4856fbfb 100644 +--- a/hardware/RFXComTCP.cpp ++++ b/hardware/RFXComTCP.cpp +@@ -1,8 +1,6 @@ + #include "stdafx.h" + #include "RFXComTCP.h" + #include "../main/Logger.h" +-//#include +-//#include + #include "../main/Helper.h" + #include "../main/localtime_r.h" + #include "../main/mainworker.h" +diff --git a/hardware/Rego6XXSerial.cpp b/hardware/Rego6XXSerial.cpp +index b94bd291bc..15d22f869a 100644 +--- a/hardware/Rego6XXSerial.cpp ++++ b/hardware/Rego6XXSerial.cpp +@@ -16,11 +16,13 @@ + #include + #include + #include +-#include ++#include + #include "hardwaretypes.h" + + #include + ++using namespace boost::placeholders; ++ + #define Rego6XX_RETRY_DELAY 30 + #define Rego6XX_COMMAND_DELAY 5 + #define Rego6XX_READ_BUFFER_MASK (Rego6XX_READ_BUFFER_SIZE - 1) +diff --git a/hardware/S0MeterBase.cpp b/hardware/S0MeterBase.cpp +index 9cffa67022..75a06e2cc1 100644 +--- a/hardware/S0MeterBase.cpp ++++ b/hardware/S0MeterBase.cpp +@@ -13,7 +13,7 @@ + #include + #include + #include +-#include ++#include + + #include + +diff --git a/hardware/S0MeterSerial.cpp b/hardware/S0MeterSerial.cpp +index 1dc16b2b3e..f474d1c766 100644 +--- a/hardware/S0MeterSerial.cpp ++++ b/hardware/S0MeterSerial.cpp +@@ -8,11 +8,13 @@ + + #include + #include +-#include ++#include + #include + #include + #include + ++using namespace boost::placeholders; ++ + #ifdef _DEBUG + //#define DEBUG_S0 + #define TOT_DEBUG_LINES 6 +diff --git a/hardware/TCPProxy/tcpproxy_server.cpp b/hardware/TCPProxy/tcpproxy_server.cpp +index 60445d9c28..82ba3559d9 100644 +--- a/hardware/TCPProxy/tcpproxy_server.cpp ++++ b/hardware/TCPProxy/tcpproxy_server.cpp +@@ -15,6 +15,8 @@ + #include "stdafx.h" + #include "tcpproxy_server.h" + ++using namespace boost::placeholders; ++ + #if BOOST_VERSION >= 107000 + #define GET_IO_SERVICE(s) ((boost::asio::io_context&)(s).get_executor().context()) + #else +diff --git a/hardware/TeleinfoSerial.cpp b/hardware/TeleinfoSerial.cpp +index 85f9a6240f..fa794802e9 100644 +--- a/hardware/TeleinfoSerial.cpp ++++ b/hardware/TeleinfoSerial.cpp +@@ -28,9 +28,11 @@ History : + #include "../main/localtime_r.h" + #include "../main/Logger.h" + +-#include ++#include + #include + ++using namespace boost::placeholders; ++ + CTeleinfoSerial::CTeleinfoSerial(const int ID, const std::string& devname, const int datatimeout, unsigned int baud_rate, const bool disable_crc, const int ratelimit) + { + m_HwdID = ID; +diff --git a/hardware/USBtin.cpp b/hardware/USBtin.cpp +index c3e3656319..ce6f542df3 100644 +--- a/hardware/USBtin.cpp ++++ b/hardware/USBtin.cpp +@@ -27,7 +27,7 @@ History : + #include "../main/SQLHelper.h" + + #include +-#include ++#include + #include + #include + #include +@@ -35,6 +35,8 @@ History : + #include + #include + ++using namespace boost::placeholders; ++ + #define USBTIN_BAUD_RATE 115200 + #define USBTIN_PARITY boost::asio::serial_port_base::parity::none + #define USBTIN_CARACTER_SIZE 8 +diff --git a/hardware/XiaomiGateway.cpp b/hardware/XiaomiGateway.cpp +index f4567ec62f..e4998faa6a 100644 +--- a/hardware/XiaomiGateway.cpp ++++ b/hardware/XiaomiGateway.cpp +@@ -12,7 +12,7 @@ + #include "XiaomiHardware.h" + #include + #include +-#include ++#include + + #ifndef WIN32 + #include +diff --git a/hardware/Yeelight.h b/hardware/Yeelight.h +index b063f79743..64fd6f5479 100644 +--- a/hardware/Yeelight.h ++++ b/hardware/Yeelight.h +@@ -2,7 +2,6 @@ + + #include "DomoticzHardware.h" + #include +-#include + + class Yeelight : public CDomoticzHardwareBase + { +diff --git a/hardware/ZiBlueSerial.cpp b/hardware/ZiBlueSerial.cpp +index 9e9db2aff1..8e896897fc 100644 +--- a/hardware/ZiBlueSerial.cpp ++++ b/hardware/ZiBlueSerial.cpp +@@ -6,6 +6,8 @@ + + #include + ++using namespace boost::placeholders; ++ + #define ZiBlue_RETRY_DELAY 30 + + CZiBlueSerial::CZiBlueSerial(const int ID, const std::string& devname) : +diff --git a/hardware/plugins/PluginTransports.cpp b/hardware/plugins/PluginTransports.cpp +index c7e065529f..7fc1cb953e 100644 +--- a/hardware/plugins/PluginTransports.cpp ++++ b/hardware/plugins/PluginTransports.cpp +@@ -13,6 +13,8 @@ + #include "icmp_header.hpp" + #include "ipv4_header.hpp" + ++using namespace boost::placeholders; ++ + namespace Plugins { + + void CPluginTransport::handleRead(const boost::system::error_code& e, std::size_t bytes_transferred) +diff --git a/main/WebServer.cpp b/main/WebServer.cpp +index 0a19319669..ed92f06e32 100644 +--- a/main/WebServer.cpp ++++ b/main/WebServer.cpp +@@ -1,7 +1,7 @@ + #include "stdafx.h" + #include "WebServer.h" + #include "WebServerHelper.h" +-#include ++#include + #include + #include + #include "mainworker.h" +@@ -65,6 +65,8 @@ + #define __STDC_FORMAT_MACROS + #include + ++using namespace boost::placeholders; ++ + #define round(a) ( int ) ( a + .5 ) + + extern std::string szStartupFolder; +diff --git a/main/mainworker.cpp b/main/mainworker.cpp +index 505f59f49d..5fb2ee9042 100644 +--- a/main/mainworker.cpp ++++ b/main/mainworker.cpp +@@ -174,6 +174,8 @@ + #include + #endif + ++using namespace boost::placeholders; ++ + #define round(a) ( int ) ( a + .5 ) + + extern std::string szStartupFolder; +diff --git a/push/FibaroPush.cpp b/push/FibaroPush.cpp +index 0bc54e6cfd..350a8fa893 100644 +--- a/push/FibaroPush.cpp ++++ b/push/FibaroPush.cpp +@@ -14,6 +14,8 @@ + #define __STDC_FORMAT_MACROS + #include + ++using namespace boost::placeholders; ++ + CFibaroPush::CFibaroPush() + { + m_PushType = PushType::PUSHTYPE_FIBARO; +diff --git a/push/GooglePubSubPush.cpp b/push/GooglePubSubPush.cpp +index 6d0fc82d40..a5b720f219 100644 +--- a/push/GooglePubSubPush.cpp ++++ b/push/GooglePubSubPush.cpp +@@ -21,6 +21,8 @@ extern "C" { + #include + #endif + ++using namespace boost::placeholders; ++ + extern std::string szUserDataFolder; + + // this should be filled in by the preprocessor +diff --git a/push/HttpPush.cpp b/push/HttpPush.cpp +index 8132ca2b43..3d1d51d52e 100644 +--- a/push/HttpPush.cpp ++++ b/push/HttpPush.cpp +@@ -15,6 +15,8 @@ + #define __STDC_FORMAT_MACROS + #include + ++using namespace boost::placeholders; ++ + CHttpPush::CHttpPush() + { + m_PushType = PushType::PUSHTYPE_HTTP; +diff --git a/push/InfluxPush.cpp b/push/InfluxPush.cpp +index 0a8e99414f..745fdf0496 100644 +--- a/push/InfluxPush.cpp ++++ b/push/InfluxPush.cpp +@@ -15,6 +15,8 @@ + #define __STDC_FORMAT_MACROS + #include + ++using namespace boost::placeholders; ++ + CInfluxPush::CInfluxPush() : + m_InfluxPort(8086), + m_bInfluxDebugActive(false) +diff --git a/push/WebsocketPush.cpp b/push/WebsocketPush.cpp +index 0fb71f96ec..3c2ce7ed54 100644 +--- a/push/WebsocketPush.cpp ++++ b/push/WebsocketPush.cpp +@@ -3,6 +3,8 @@ + #include "../webserver/WebsocketHandler.h" + #include "../main/mainworker.h" + ++using namespace boost::placeholders; ++ + extern boost::signals2::signal sOnNotificationReceived; + + +diff --git a/tcpserver/TCPServer.cpp b/tcpserver/TCPServer.cpp +index d3b0a94847..3b8d0b9b76 100644 +--- a/tcpserver/TCPServer.cpp ++++ b/tcpserver/TCPServer.cpp +@@ -11,7 +11,7 @@ + #include "../main/localtime_r.h" + #include + #include +-#include ++#include + + namespace tcp { + namespace server { +diff --git a/webserver/cWebem.cpp b/webserver/cWebem.cpp +index f015be097f..63c96f789f 100644 +--- a/webserver/cWebem.cpp ++++ b/webserver/cWebem.cpp +@@ -5,7 +5,7 @@ + //Modified, extended etc by Robbert E. Peters/RTSS B.V. + #include "stdafx.h" + #include "cWebem.h" +-#include ++#include + #include "reply.hpp" + #include "request.hpp" + #include "mime_types.hpp" +diff --git a/webserver/connection.cpp b/webserver/connection.cpp +index d3485fe923..afe700e5d7 100644 +--- a/webserver/connection.cpp ++++ b/webserver/connection.cpp +@@ -9,7 +9,7 @@ + // + #include "stdafx.h" + #include "connection.hpp" +-#include ++#include + #include + #include "connection_manager.hpp" + #include "request_handler.hpp" +@@ -17,6 +17,8 @@ + #include "../main/localtime_r.h" + #include "../main/Logger.h" + ++using namespace boost::placeholders; ++ + namespace http { + namespace server { + extern std::string convert_to_http_date(time_t time); +diff --git a/webserver/connection_manager.cpp b/webserver/connection_manager.cpp +index b6c20de53f..bf1d9882d0 100644 +--- a/webserver/connection_manager.cpp ++++ b/webserver/connection_manager.cpp +@@ -10,10 +10,12 @@ + #include "stdafx.h" + #include "connection_manager.hpp" + #include +-#include ++#include + #include + #include "../main/Logger.h" + ++using namespace boost::placeholders; ++ + namespace http { + namespace server { + +diff --git a/webserver/proxyclient.cpp b/webserver/proxyclient.cpp +index c2bcd3178f..423ee0fb4b 100644 +--- a/webserver/proxyclient.cpp ++++ b/webserver/proxyclient.cpp +@@ -8,6 +8,8 @@ + #include "../tcpserver/TCPServer.h" + #include "sha1.hpp" + ++using namespace boost::placeholders; ++ + // RK: some defines to make mydomoticz also work when openssl not compiled in + #ifdef WWW_ENABLE_SSL + #define PROXY_PORT 443 +diff --git a/webserver/server.cpp b/webserver/server.cpp +index 1eb2137ef2..6025b1cdb5 100644 +--- a/webserver/server.cpp ++++ b/webserver/server.cpp +@@ -3,7 +3,7 @@ + // ~~~~~~~~~~ + // + #include "stdafx.h" +-#include ++#include + #include "server.hpp" + #include + #include "../main/Logger.h" +@@ -11,6 +11,8 @@ + #include "../main/localtime_r.h" + #include "../main/mainworker.h" + ++using namespace boost::placeholders; ++ + extern bool g_bIsWSL; + + namespace http { diff --git a/package/domoticz/0002-Build-failure-with-python-3-9.patch b/package/domoticz/0002-Build-failure-with-python-3-9.patch new file mode 100644 index 00000000..3b07436e --- /dev/null +++ b/package/domoticz/0002-Build-failure-with-python-3-9.patch @@ -0,0 +1,36 @@ +From b3525e2a970ae3e783665040b1e0db5fc3391327 Mon Sep 17 00:00:00 2001 +From: Jose Zapater +Date: Mon, 2 Nov 2020 09:46:17 +0100 +Subject: [PATCH] Build failure with python 3.9 + +Signed-off-by: Jose Zapater + +[Retrieved from: +https://github.com/domoticz/domoticz/commit/b3525e2a970ae3e783665040b1e0db5fc3391327] +Signed-off-by: Fabrice Fontaine +--- + hardware/plugins/DelayedLink.h | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/hardware/plugins/DelayedLink.h b/hardware/plugins/DelayedLink.h +index c90a7d8e69..cb71478685 100644 +--- a/hardware/plugins/DelayedLink.h ++++ b/hardware/plugins/DelayedLink.h +@@ -14,6 +14,17 @@ + #include + #include "../../main/Helper.h" + ++#ifndef _Py_DEC_REFTOTAL ++ /* _Py_DEC_REFTOTAL macro has been removed from Python 3.9 by: ++ https://github.com/python/cpython/commit/49932fec62c616ec88da52642339d83ae719e924 */ ++# ifdef Py_REF_DEBUG ++# define _Py_DEC_REFTOTAL _Py_RefTotal-- ++# else ++# define _Py_DEC_REFTOTAL ++# define _Py_Dealloc ++# endif ++#endif ++ + #if PY_VERSION_HEX >= 0x030800f0 + static inline void + py3__Py_DECREF(const char *filename, int lineno, PyObject *op) diff --git a/package/domoticz/0003-Load-python-3-9-shared-libs.patch b/package/domoticz/0003-Load-python-3-9-shared-libs.patch new file mode 100644 index 00000000..c157fd35 --- /dev/null +++ b/package/domoticz/0003-Load-python-3-9-shared-libs.patch @@ -0,0 +1,41 @@ +From 4e1d21967d27d286cbc837b98a1a9f031f7dde58 Mon Sep 17 00:00:00 2001 +From: Jose Zapater +Date: Fri, 6 Nov 2020 07:40:37 +0100 +Subject: [PATCH] Load python 3.9 shared libs + +Signed-off-by: Jose Zapater + +[Retrieved from: +https://github.com/domoticz/domoticz/commit/4e1d21967d27d286cbc837b98a1a9f031f7dde58] +Signed-off-by: Fabrice Fontaine +--- + hardware/plugins/DelayedLink.h | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/hardware/plugins/DelayedLink.h b/hardware/plugins/DelayedLink.h +index cb71478685..409c9dce1b 100644 +--- a/hardware/plugins/DelayedLink.h ++++ b/hardware/plugins/DelayedLink.h +@@ -193,12 +193,14 @@ namespace Plugins { + if (!shared_lib_) { + #ifdef WIN32 + # ifdef _DEBUG ++ if (!shared_lib_) shared_lib_ = LoadLibrary("python39_d.dll"); + if (!shared_lib_) shared_lib_ = LoadLibrary("python38_d.dll"); + if (!shared_lib_) shared_lib_ = LoadLibrary("python37_d.dll"); + if (!shared_lib_) shared_lib_ = LoadLibrary("python36_d.dll"); + if (!shared_lib_) shared_lib_ = LoadLibrary("python35_d.dll"); + if (!shared_lib_) shared_lib_ = LoadLibrary("python34_d.dll"); + # else ++ if (!shared_lib_) shared_lib_ = LoadLibrary("python39.dll"); + if (!shared_lib_) shared_lib_ = LoadLibrary("python38.dll"); + if (!shared_lib_) shared_lib_ = LoadLibrary("python37.dll"); + if (!shared_lib_) shared_lib_ = LoadLibrary("python36.dll"); +@@ -206,6 +208,7 @@ namespace Plugins { + if (!shared_lib_) shared_lib_ = LoadLibrary("python34.dll"); + # endif + #else ++ if (!shared_lib_) FindLibrary("python3.9", true); + if (!shared_lib_) FindLibrary("python3.8", true); + if (!shared_lib_) FindLibrary("python3.7", true); + if (!shared_lib_) FindLibrary("python3.6", true); diff --git a/package/domoticz/Config.in b/package/domoticz/Config.in new file mode 100644 index 00000000..547ef9f0 --- /dev/null +++ b/package/domoticz/Config.in @@ -0,0 +1,43 @@ +config BR2_PACKAGE_DOMOTICZ + bool "domoticz" + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # sleep_for + # pthread_condattr_setclock + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # mosquitto + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + depends on BR2_PACKAGE_LUA_5_3 + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS # boost-thread + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # exception_ptr + select BR2_PACKAGE_BOOST + select BR2_PACKAGE_BOOST_ATOMIC + select BR2_PACKAGE_BOOST_DATE_TIME + select BR2_PACKAGE_BOOST_SYSTEM + select BR2_PACKAGE_BOOST_THREAD + select BR2_PACKAGE_JSONCPP + select BR2_PACKAGE_LIBCURL + select BR2_PACKAGE_MOSQUITTO + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_SQLITE + select BR2_PACKAGE_ZLIB + help + Domoticz is a Home Automation System that lets you monitor + and configure various devices like: Lights, Switches, + various sensors/meters like Temperature, Rain, Wind, UV, + Electra, Gas, Water and much more. Notifications/Alerts can + be sent to any mobile device. + + http://domoticz.com + +comment "domoticz needs lua 5.3 and a toolchain w/ C++, gcc >= 4.8, NPTL, wchar, dynamic library" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 || \ + !BR2_TOOLCHAIN_HAS_THREADS_NPTL || \ + !BR2_USE_WCHAR || BR2_STATIC_LIBS || \ + !BR2_PACKAGE_LUA_5_3 + +comment "domoticz needs exception_ptr" + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 diff --git a/package/domoticz/S99domoticz b/package/domoticz/S99domoticz new file mode 100644 index 00000000..e773acee --- /dev/null +++ b/package/domoticz/S99domoticz @@ -0,0 +1,51 @@ +#!/bin/sh + +DAEMON="domoticz" +PIDFILE="/var/run/$DAEMON.pid" + +DOMOTICZ_ARGS="-daemon -www 8080 -sslwww 443" + +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON" + +start() { + printf 'Starting %s: ' "$DAEMON" + start-stop-daemon -b -m -S -q -p "$PIDFILE" -x "/opt/domoticz/$DAEMON" \ + -- $DOMOTICZ_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + rm -f "$PIDFILE" + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +case "$1" in + start|stop|restart) + "$1";; + reload) + # Restart, since there is no true "reload" feature. + restart;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/domoticz/domoticz.hash b/package/domoticz/domoticz.hash new file mode 100644 index 00000000..4f095c33 --- /dev/null +++ b/package/domoticz/domoticz.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 d0c17b2082dad8a8caeed888b7d4c191975e74a2808b5d078305f5327b82442d domoticz-2020.1.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 License.txt diff --git a/package/domoticz/domoticz.mk b/package/domoticz/domoticz.mk new file mode 100644 index 00000000..0cd3520a --- /dev/null +++ b/package/domoticz/domoticz.mk @@ -0,0 +1,92 @@ +################################################################################ +# +# domoticz +# +################################################################################ + +DOMOTICZ_VERSION = 2020.1 +DOMOTICZ_SITE = $(call github,domoticz,domoticz,$(DOMOTICZ_VERSION)) +DOMOTICZ_LICENSE = GPL-3.0 +DOMOTICZ_LICENSE_FILES = License.txt +DOMOTICZ_CPE_ID_VENDOR = domoticz +DOMOTICZ_DEPENDENCIES = \ + boost \ + host-pkgconf \ + jsoncpp \ + libcurl \ + lua \ + mosquitto \ + openssl \ + sqlite \ + zlib + +# Disable precompiled header as it needs cmake >= 3.16 +DOMOTICZ_CONF_OPTS = -DUSE_PRECOMPILED_HEADER=OFF + +# Due to the dependency on mosquitto, domoticz depends on +# !BR2_STATIC_LIBS so set USE_STATIC_BOOST and USE_OPENSSL_STATIC to OFF +DOMOTICZ_CONF_OPTS += \ + -DUSE_STATIC_BOOST=OFF \ + -DUSE_OPENSSL_STATIC=OFF + +# Do not use any built-in libraries which are enabled by default for +# jsoncpp, lua, sqlite and mqtt +DOMOTICZ_CONF_OPTS += \ + -DUSE_BUILTIN_JSONCPP=OFF \ + -DUSE_BUILTIN_LUA=OFF \ + -DUSE_BUILTIN_SQLITE=OFF \ + -DUSE_BUILTIN_MQTT=OFF + +ifeq ($(BR2_PACKAGE_LIBUSB),y) +DOMOTICZ_DEPENDENCIES += libusb +DOMOTICZ_CONF_OPTS += -DWITH_LIBUSB=ON +else +DOMOTICZ_CONF_OPTS += -DWITH_LIBUSB=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENZWAVE),y) +DOMOTICZ_DEPENDENCIES += openzwave + +# Due to the dependency on mosquitto, domoticz depends on +# !BR2_STATIC_LIBS so set USE_STATIC_OPENZWAVE to OFF otherwise +# domoticz will not find the openzwave library as it searches by +# default a static library. +DOMOTICZ_CONF_OPTS += -DUSE_STATIC_OPENZWAVE=OFF +endif + +ifeq ($(BR2_PACKAGE_PYTHON3),y) +DOMOTICZ_DEPENDENCIES += python3 +DOMOTICZ_CONF_OPTS += -DUSE_PYTHON=ON +else +DOMOTICZ_CONF_OPTS += -DUSE_PYTHON=OFF +endif + +# Install domoticz in a dedicated directory (/opt/domoticz) as +# domoticz expects by default that all its subdirectories (www, +# Config, scripts, ...) are in the binary directory. +DOMOTICZ_TARGET_DIR = /opt/domoticz +DOMOTICZ_CONF_OPTS += -DCMAKE_INSTALL_PREFIX=$(DOMOTICZ_TARGET_DIR) + +# Delete License.txt and updatedomo files installed by domoticz in target +# directory +# Do not delete History.txt as it is used in source code +define DOMOTICZ_REMOVE_UNNEEDED_FILES + $(RM) $(TARGET_DIR)/$(DOMOTICZ_TARGET_DIR)/License.txt + $(RM) $(TARGET_DIR)/$(DOMOTICZ_TARGET_DIR)/updatedomo +endef + +DOMOTICZ_POST_INSTALL_TARGET_HOOKS += DOMOTICZ_REMOVE_UNNEEDED_FILES + +# Use dedicated init scripts for systemV and systemd instead of using +# domoticz.sh as it is not compatible with buildroot init system +define DOMOTICZ_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/domoticz/S99domoticz \ + $(TARGET_DIR)/etc/init.d/S99domoticz +endef + +define DOMOTICZ_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/domoticz/domoticz.service \ + $(TARGET_DIR)/usr/lib/systemd/system/domoticz.service +endef + +$(eval $(cmake-package)) diff --git a/package/domoticz/domoticz.service b/package/domoticz/domoticz.service new file mode 100644 index 00000000..446b41a5 --- /dev/null +++ b/package/domoticz/domoticz.service @@ -0,0 +1,10 @@ +[Unit] +Description=Domoticz Home Automation System +After=network.target + +[Service] +ExecStart=/opt/domoticz/domoticz -daemon -www 8080 -sslwww 443 +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/package/doom-wad/Config.in b/package/doom-wad/Config.in new file mode 100644 index 00000000..9ef4e3e5 --- /dev/null +++ b/package/doom-wad/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_DOOM_WAD + bool "shareware Doom WAD file" + depends on BR2_PACKAGE_CHOCOLATE_DOOM || BR2_PACKAGE_PRBOOM + help + This will install the shareware wad data file for the doom + game. + + The wad file will be placed in the /usr/share/games/doom + directory. + + https://doomwiki.org/wiki/DOOM1.WAD diff --git a/package/doom-wad/doom-wad.hash b/package/doom-wad/doom-wad.hash new file mode 100644 index 00000000..fa069c1b --- /dev/null +++ b/package/doom-wad/doom-wad.hash @@ -0,0 +1,2 @@ +# Locally computed +sha256 cacf0142b31ca1af00796b4a0339e07992ac5f21bc3f81e7532fe1b5e1b486e6 doom19s.zip diff --git a/package/doom-wad/doom-wad.mk b/package/doom-wad/doom-wad.mk new file mode 100644 index 00000000..f348fc22 --- /dev/null +++ b/package/doom-wad/doom-wad.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# doom-wad +# +################################################################################ + +DOOM_WAD_VERSION = 1.9 +DOOM_WAD_SOURCE = doom$(subst .,,$(DOOM_WAD_VERSION))s.zip +# Official server currently unavailable +# DOOM_WAD_SITE = ftp://ftp.idsoftware.com/idstuff/doom +DOOM_WAD_SITE = http://www.jbserver.com/downloads/games/doom/misc/shareware + +define DOOM_WAD_EXTRACT_CMDS + $(UNZIP) -p $(DOOM_WAD_DL_DIR)/$($(PKG)_SOURCE) 'DOOMS_19.[12]' > \ + $(@D)/doom-$(DOOM_WAD_VERSION).zip + $(UNZIP) -d $(@D) $(@D)/doom-$(DOOM_WAD_VERSION).zip DOOM1.WAD +endef + +define DOOM_WAD_INSTALL_TARGET_CMDS + $(INSTALL) -m 0644 -D $(@D)/DOOM1.WAD \ + $(TARGET_DIR)/usr/share/games/doom/doom1.wad +endef + +$(eval $(generic-package)) diff --git a/package/dos2unix/Config.in b/package/dos2unix/Config.in new file mode 100644 index 00000000..cfb5ba4b --- /dev/null +++ b/package/dos2unix/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_DOS2UNIX + bool "dos2unix" + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + dos2unix converts text file line endings between CRLF and LF + + http://waterlan.home.xs4all.nl/dos2unix.html diff --git a/package/dos2unix/Config.in.host b/package/dos2unix/Config.in.host new file mode 100644 index 00000000..5ec6033a --- /dev/null +++ b/package/dos2unix/Config.in.host @@ -0,0 +1,6 @@ +config BR2_PACKAGE_HOST_DOS2UNIX + bool "host dos2unix" + help + dos2unix converts text file line endings between CRLF and LF + + http://waterlan.home.xs4all.nl/dos2unix.html diff --git a/package/dos2unix/dos2unix.hash b/package/dos2unix/dos2unix.hash new file mode 100644 index 00000000..41fb2342 --- /dev/null +++ b/package/dos2unix/dos2unix.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +# https://waterlan.home.xs4all.nl/dos2unix/dos2unix-7.4.1.tar.gz.asc +sha256 1cd58a60b03ed28fa39046102a185c5e88c4f7665e1e0417c25de7f8b9f78623 dos2unix-7.4.1.tar.gz +sha256 af32dca9450e90b9a7a0f6408da1554466382cc81960108c59512f78a666a276 COPYING.txt diff --git a/package/dos2unix/dos2unix.mk b/package/dos2unix/dos2unix.mk new file mode 100644 index 00000000..5064b7e5 --- /dev/null +++ b/package/dos2unix/dos2unix.mk @@ -0,0 +1,48 @@ +################################################################################ +# +# dos2unix +# +################################################################################ + +DOS2UNIX_VERSION = 7.4.1 +DOS2UNIX_SITE = http://waterlan.home.xs4all.nl/dos2unix +DOS2UNIX_LICENSE = BSD-2-Clause +DOS2UNIX_LICENSE_FILES = COPYING.txt +DOS2UNIX_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) + +ifeq ($(BR2_SYSTEM_ENABLE_NLS),y) +DOS2UNIX_MAKE_OPTS += ENABLE_NLS=1 +DOS2UNIX_MAKE_OPTS += LIBS_EXTRA=$(TARGET_NLS_LIBS) +else +# Should be defined to empty to disable NLS support +DOS2UNIX_MAKE_OPTS += ENABLE_NLS= +endif + +ifeq ($(BR2_USE_WCHAR),) +DOS2UNIX_MAKE_OPTS += UCS= +endif + +ifeq ($(BR2_STATIC_LIBS),y) +DOS2UNIX_MAKE_OPTS += LDFLAGS_USER=-static +endif + +define DOS2UNIX_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) $(DOS2UNIX_MAKE_OPTS) +endef + +define DOS2UNIX_INSTALL_TARGET_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) \ + $(DOS2UNIX_MAKE_OPTS) install +endef + +define HOST_DOS2UNIX_BUILD_CMDS + $(HOST_CONFIGURE_OPTS) $(MAKE) -C $(@D) ENABLE_NLS= +endef + +define HOST_DOS2UNIX_INSTALL_CMDS + $(HOST_CONFIGURE_OPTS) $(MAKE) -C $(@D) prefix=$(HOST_DIR) ENABLE_NLS= \ + install +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/dosfstools/Config.in b/package/dosfstools/Config.in new file mode 100644 index 00000000..33c64b34 --- /dev/null +++ b/package/dosfstools/Config.in @@ -0,0 +1,30 @@ +config BR2_PACKAGE_DOSFSTOOLS + bool "dosfstools" + depends on BR2_USE_WCHAR + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + Tools for creating and checking DOS FAT filesystems. + + https://github.com/dosfstools/dosfstools + +if BR2_PACKAGE_DOSFSTOOLS + +config BR2_PACKAGE_DOSFSTOOLS_FATLABEL + bool "fatlabel" + help + Get or set the DOS FAT filesystem label. + +config BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT + bool "fsck.fat" + help + Check a DOS FAT filesystem. + +config BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT + bool "mkfs.fat" + help + Creates a DOS FAT filesystem on a device. + +endif + +comment "dosfstools needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR diff --git a/package/dosfstools/Config.in.host b/package/dosfstools/Config.in.host new file mode 100644 index 00000000..fc488c0c --- /dev/null +++ b/package/dosfstools/Config.in.host @@ -0,0 +1,6 @@ +config BR2_PACKAGE_HOST_DOSFSTOOLS + bool "host dosfstools" + help + Tools for creating and checking DOS FAT filesystems. + + https://github.com/dosfstools/dosfstools diff --git a/package/dosfstools/dosfstools.hash b/package/dosfstools/dosfstools.hash new file mode 100644 index 00000000..d5f396f6 --- /dev/null +++ b/package/dosfstools/dosfstools.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +sha256 e6b2aca70ccc3fe3687365009dd94a2e18e82b688ed4e260e04b7412471cc173 dosfstools-4.1.tar.xz + +# Locally calculated +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/dosfstools/dosfstools.mk b/package/dosfstools/dosfstools.mk new file mode 100644 index 00000000..b5da490d --- /dev/null +++ b/package/dosfstools/dosfstools.mk @@ -0,0 +1,60 @@ +################################################################################ +# +# dosfstools +# +################################################################################ + +DOSFSTOOLS_VERSION = 4.1 +DOSFSTOOLS_SOURCE = dosfstools-$(DOSFSTOOLS_VERSION).tar.xz +DOSFSTOOLS_SITE = https://github.com/dosfstools/dosfstools/releases/download/v$(DOSFSTOOLS_VERSION) +DOSFSTOOLS_LICENSE = GPL-3.0+ +DOSFSTOOLS_LICENSE_FILES = COPYING +DOSFSTOOLS_CPE_ID_VENDOR = dosfstools_project +DOSFSTOOLS_CONF_OPTS = --enable-compat-symlinks --exec-prefix=/ +HOST_DOSFSTOOLS_CONF_OPTS = --enable-compat-symlinks + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +DOSFSTOOLS_CONF_OPTS += --with-udev +DOSFSTOOLS_DEPENDENCIES += udev +else +DOSFSTOOLS_CONF_OPTS += --without-udev +endif + +ifneq ($(BR2_ENABLE_LOCALE),y) +DOSFSTOOLS_CONF_OPTS += LIBS="-liconv" +DOSFSTOOLS_DEPENDENCIES += libiconv +endif + +ifeq ($(BR2_PACKAGE_DOSFSTOOLS_FATLABEL),y) +define DOSFSTOOLS_INSTALL_FATLABEL + $(INSTALL) -D -m 0755 $(@D)/src/fatlabel $(TARGET_DIR)/sbin/fatlabel + ln -sf fatlabel $(TARGET_DIR)/sbin/dosfslabel +endef +endif + +ifeq ($(BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT),y) +define DOSFSTOOLS_INSTALL_FSCK_FAT + $(INSTALL) -D -m 0755 $(@D)/src/fsck.fat $(TARGET_DIR)/sbin/fsck.fat + ln -sf fsck.fat $(TARGET_DIR)/sbin/fsck.vfat + ln -sf fsck.fat $(TARGET_DIR)/sbin/fsck.msdos + ln -sf fsck.fat $(TARGET_DIR)/sbin/dosfsck +endef +endif + +ifeq ($(BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT),y) +define DOSFSTOOLS_INSTALL_MKFS_FAT + $(INSTALL) -D -m 0755 $(@D)/src/mkfs.fat $(TARGET_DIR)/sbin/mkfs.fat + ln -sf mkfs.fat $(TARGET_DIR)/sbin/mkdosfs + ln -sf mkfs.fat $(TARGET_DIR)/sbin/mkfs.msdos + ln -sf mkfs.fat $(TARGET_DIR)/sbin/mkfs.vfat +endef +endif + +define DOSFSTOOLS_INSTALL_TARGET_CMDS + $(call DOSFSTOOLS_INSTALL_FATLABEL) + $(call DOSFSTOOLS_INSTALL_FSCK_FAT) + $(call DOSFSTOOLS_INSTALL_MKFS_FAT) +endef + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/dovecot-pigeonhole/Config.in b/package/dovecot-pigeonhole/Config.in new file mode 100644 index 00000000..bd6826b4 --- /dev/null +++ b/package/dovecot-pigeonhole/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_DOVECOT_PIGEONHOLE + bool "dovecot-pigeonhole" + help + Pigeonhole is the name of the project that adds support for + the Sieve language (RFC 5228) and the ManageSieve protocol + (RFC 5804) to the Dovecot Secure IMAP Server. + + http://pigeonhole.dovecot.org diff --git a/package/dovecot-pigeonhole/dovecot-pigeonhole.hash b/package/dovecot-pigeonhole/dovecot-pigeonhole.hash new file mode 100644 index 00000000..58444ab7 --- /dev/null +++ b/package/dovecot-pigeonhole/dovecot-pigeonhole.hash @@ -0,0 +1,3 @@ +# Locally computed after checking signature +sha256 e1498f50cef74c351a57474cc423b008627ab1ab60724b859283ead6d00550d0 dovecot-2.3-pigeonhole-0.5.15.tar.gz +sha256 fc9e9522216f2a9a28b31300e3c73c1df56acc27dfae951bf516e7995366b51a COPYING diff --git a/package/dovecot-pigeonhole/dovecot-pigeonhole.mk b/package/dovecot-pigeonhole/dovecot-pigeonhole.mk new file mode 100644 index 00000000..c0bef6be --- /dev/null +++ b/package/dovecot-pigeonhole/dovecot-pigeonhole.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# dovecot-pigeonhole +# +################################################################################ + +DOVECOT_PIGEONHOLE_VERSION = 0.5.15 +DOVECOT_PIGEONHOLE_SOURCE = dovecot-2.3-pigeonhole-$(DOVECOT_PIGEONHOLE_VERSION).tar.gz +DOVECOT_PIGEONHOLE_SITE = https://pigeonhole.dovecot.org/releases/2.3 +DOVECOT_PIGEONHOLE_LICENSE = LGPL-2.1 +DOVECOT_PIGEONHOLE_LICENSE_FILES = COPYING +DOVECOT_PIGEONHOLE_CPE_ID_VENDOR = dovecot +DOVECOT_PIGEONHOLE_CPE_ID_PRODUCT = pigeonhole +DOVECOT_PIGEONHOLE_DEPENDENCIES = dovecot + +DOVECOT_PIGEONHOLE_CONF_OPTS = --with-dovecot=$(STAGING_DIR)/usr/lib + +ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y) +define DOVECOT_PIGEONHOLE_FIXUP_DOVECOT_CONFIG + $(SED) 's,$(PER_PACKAGE_DIR)/dovecot/,$(PER_PACKAGE_DIR)/dovecot-pigeonhole/,g' \ + $(STAGING_DIR)/usr/lib/dovecot-config +endef +DOVECOT_PIGEONHOLE_PRE_CONFIGURE_HOOKS = DOVECOT_PIGEONHOLE_FIXUP_DOVECOT_CONFIG +endif + +$(eval $(autotools-package)) diff --git a/package/dovecot/Config.in b/package/dovecot/Config.in new file mode 100644 index 00000000..377fd4db --- /dev/null +++ b/package/dovecot/Config.in @@ -0,0 +1,41 @@ +config BR2_PACKAGE_DOVECOT + bool "dovecot" + depends on !BR2_STATIC_LIBS + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_ZLIB + help + Dovecot is an open source IMAP and POP3 email server for + Linux/UNIX- like systems, written with security primarily in + mind. Dovecot is an excellent choice for both small and large + installations. It's fast, simple to set up, requires no + special administration and it uses very little memory. + + http://www.dovecot.org + +if BR2_PACKAGE_DOVECOT + +config BR2_PACKAGE_DOVECOT_MYSQL + bool "mysql support" + depends on BR2_INSTALL_LIBSTDCPP # mysql + depends on BR2_TOOLCHAIN_HAS_THREADS # mysql + select BR2_PACKAGE_MYSQL + help + Enable MySQL support. + +comment "mysql support needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_DOVECOT_SQLITE + bool "sqlite support" + select BR2_PACKAGE_SQLITE + help + Enable SQLite support. + +source package/dovecot-pigeonhole/Config.in + +endif # BR2_PACKAGE_DOVECOT + +comment "dovecot needs a toolchain w/ dynamic library" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS diff --git a/package/dovecot/dovecot.hash b/package/dovecot/dovecot.hash new file mode 100644 index 00000000..cd314cf0 --- /dev/null +++ b/package/dovecot/dovecot.hash @@ -0,0 +1,5 @@ +# Locally computed after checking signature +sha256 21bbdd5d45957a99133de8b7e71813ecb73d9476c89dfc63479e9102b3553590 dovecot-2.3.15.tar.gz +sha256 319a9830aab406109cd67cb45496587566a8123203d66d037b209ca3e13de02a COPYING +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LGPL +sha256 52b8c95fabb19575281874b661ef7968ea47e8f5d74ba0dd40ce512e52b3fc97 COPYING.MIT diff --git a/package/dovecot/dovecot.mk b/package/dovecot/dovecot.mk new file mode 100644 index 00000000..cb1cc990 --- /dev/null +++ b/package/dovecot/dovecot.mk @@ -0,0 +1,136 @@ +################################################################################ +# +# dovecot +# +################################################################################ + +DOVECOT_VERSION_MAJOR = 2.3 +DOVECOT_VERSION = $(DOVECOT_VERSION_MAJOR).15 +DOVECOT_SITE = https://dovecot.org/releases/$(DOVECOT_VERSION_MAJOR) +DOVECOT_INSTALL_STAGING = YES +DOVECOT_LICENSE = LGPL-2.1, MIT, Public Domain, BSD-3-Clause, Unicode-DFS-2015 +DOVECOT_LICENSE_FILES = COPYING COPYING.LGPL COPYING.MIT +DOVECOT_CPE_ID_VENDOR = dovecot +DOVECOT_DEPENDENCIES = \ + host-pkgconf \ + $(if $(BR2_PACKAGE_LIBICONV),libiconv) \ + openssl +# add host-gettext for AM_ICONV macro +DOVECOT_DEPENDENCIES += host-gettext + +# CVE-2016-4983 is an issue in a postinstall script in the dovecot rpm, which +# is part of the Red Hat packaging and not part of upstream dovecot +DOVECOT_IGNORE_CVES += CVE-2016-4983 + +DOVECOT_CONF_ENV = \ + RPCGEN=__disable_RPCGEN_rquota \ + i_cv_epoll_works=yes \ + i_cv_inotify_works=yes \ + i_cv_posix_fallocate_works=no \ + i_cv_signed_size_t=no \ + i_cv_gmtime_max_time_t=32 \ + i_cv_signed_time_t=yes \ + i_cv_mmap_plays_with_write=yes \ + i_cv_fd_passing=yes \ + i_cv_c99_vsnprintf=yes \ + lib_cv_va_copy=yes \ + lib_cv___va_copy=yes \ + lib_cv_va_val_copy=yes + +DOVECOT_CONF_OPTS = --without-docs --with-ssl=openssl + +ifeq ($(BR2_PACKAGE_DOVECOT_MYSQL)$(BR2_PACKAGE_DOVECOT_SQLITE),) +DOVECOT_CONF_OPTS += --without-sql +endif + +ifeq ($(BR2_PACKAGE_BZIP2),y) +DOVECOT_CONF_OPTS += --with-bzlib +DOVECOT_DEPENDENCIES += bzip2 +else +DOVECOT_CONF_OPTS += --without-bzlib +endif + +ifeq ($(BR2_PACKAGE_ICU),y) +DOVECOT_CONF_OPTS += --with-icu +DOVECOT_DEPENDENCIES += icu +else +DOVECOT_CONF_OPTS += --without-icu +endif + +ifeq ($(BR2_PACKAGE_LIBCAP),y) +DOVECOT_CONF_OPTS += --with-libcap +DOVECOT_DEPENDENCIES += libcap +else +DOVECOT_CONF_OPTS += --without-libcap +endif + +ifeq ($(BR2_PACKAGE_LIBSODIUM),y) +DOVECOT_CONF_OPTS += --with-sodium +DOVECOT_DEPENDENCIES += libsodium +else +DOVECOT_CONF_OPTS += --without-sodium +endif + +ifeq ($(BR2_PACKAGE_LINUX_PAM),y) +DOVECOT_CONF_OPTS += --with-pam +DOVECOT_DEPENDENCIES += linux-pam +else +DOVECOT_CONF_OPTS += --without-pam +endif + +ifeq ($(BR2_PACKAGE_DOVECOT_MYSQL),y) +DOVECOT_CONF_ENV += MYSQL_CONFIG="$(STAGING_DIR)/usr/bin/mysql_config" +DOVECOT_CONF_OPTS += --with-mysql +DOVECOT_DEPENDENCIES += mysql +else +DOVECOT_CONF_OPTS += --without-mysql +endif + +ifeq ($(BR2_PACKAGE_DOVECOT_SQLITE),y) +DOVECOT_CONF_OPTS += --with-sqlite +DOVECOT_DEPENDENCIES += sqlite +else +DOVECOT_CONF_OPTS += --without-sqlite +endif + +ifeq ($(BR2_PACKAGE_LZ4),y) +DOVECOT_CONF_OPTS += --with-lz4 +DOVECOT_DEPENDENCIES += lz4 +else +DOVECOT_CONF_OPTS += --without-lz4 +endif + +ifeq ($(BR2_PACKAGE_XZ),y) +DOVECOT_CONF_OPTS += --with-lzma +DOVECOT_DEPENDENCIES += xz +else +DOVECOT_CONF_OPTS += --without-lzma +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +DOVECOT_CONF_OPTS += --with-zlib +DOVECOT_DEPENDENCIES += zlib +else +DOVECOT_CONF_OPTS += --without-zlib +endif + +# fix paths to avoid using /usr/lib/dovecot +define DOVECOT_POST_CONFIGURE + for i in $$(find $(@D) -name "Makefile"); do \ + $(SED) 's%^pkglibdir =.*%pkglibdir = \$$(libdir)%' $$i; \ + $(SED) 's%^pkglibexecdir =.*%pkglibexecdir = \$$(libexecdir)%' $$i; \ + done +endef + +DOVECOT_POST_CONFIGURE_HOOKS += DOVECOT_POST_CONFIGURE + +# dovecot installs dovecot-config in usr/lib/, therefore +# DOVECOT_CONFIG_SCRIPTS can not be used to rewrite paths +define DOVECOT_FIX_STAGING_DOVECOT_CONFIG + $(SED) 's,^LIBDOVECOT_INCLUDE=.*$$,LIBDOVECOT_INCLUDE=\"-I$(STAGING_DIR)/usr/include/dovecot\",' $(STAGING_DIR)/usr/lib/dovecot-config + $(SED) 's,^LIBDOVECOT=.*$$,LIBDOVECOT=\"-L$(STAGING_DIR)/usr/lib -ldovecot\",' $(STAGING_DIR)/usr/lib/dovecot-config +endef + +DOVECOT_POST_INSTALL_STAGING_HOOKS += DOVECOT_FIX_STAGING_DOVECOT_CONFIG + +$(eval $(autotools-package)) diff --git a/package/doxygen/Config.in.host b/package/doxygen/Config.in.host new file mode 100644 index 00000000..3a06199c --- /dev/null +++ b/package/doxygen/Config.in.host @@ -0,0 +1,12 @@ +config BR2_PACKAGE_HOST_DOXYGEN + bool "host doxygen" + depends on BR2_HOST_GCC_AT_LEAST_4_9 # C++14 + help + Doxygen is the de facto standard tool for generating + documentation from annotated C++ sources, but it also + supports other popular programming languages such as C, + Objective-C, C#, PHP, Java, Python, IDL (Corba, Microsoft, + and UNO/OpenOffice flavors), Fortran, VHDL, Tcl, and to some + extent D. + + http://www.doxygen.nl/ diff --git a/package/doxygen/doxygen.hash b/package/doxygen/doxygen.hash new file mode 100644 index 00000000..ff2fac7b --- /dev/null +++ b/package/doxygen/doxygen.hash @@ -0,0 +1,3 @@ +# Computed locally +sha256 18173d9edc46d2d116c1f92a95d683ec76b6b4b45b817ac4f245bb1073d00656 doxygen-1.8.18.src.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE diff --git a/package/doxygen/doxygen.mk b/package/doxygen/doxygen.mk new file mode 100644 index 00000000..b24c527a --- /dev/null +++ b/package/doxygen/doxygen.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# doxygen +# +################################################################################ + +DOXYGEN_VERSION = 1.8.18 +DOXYGEN_SOURCE = doxygen-$(DOXYGEN_VERSION).src.tar.gz +DOXYGEN_SITE = http://doxygen.nl/files +DOXYGEN_LICENSE = GPL-2.0 +DOXYGEN_LICENSE_FILES = LICENSE +DOXYGEN_CPE_ID_VENDOR = doxygen +HOST_DOXYGEN_DEPENDENCIES = host-flex host-bison + +HOST_DOXYGEN_CONF_OPTS += -DBUILD_SHARED_LIBS=OFF + +$(eval $(host-cmake-package)) diff --git a/package/drbd-utils/Config.in b/package/drbd-utils/Config.in new file mode 100644 index 00000000..be686198 --- /dev/null +++ b/package/drbd-utils/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_DRBD_UTILS + bool "drbd-utils" + depends on BR2_USE_MMU # needs fork() + help + DRBD utilities to manage the DRBD kernel module. + + http://oss.linbit.com/drbd/ diff --git a/package/drbd-utils/drbd-utils.hash b/package/drbd-utils/drbd-utils.hash new file mode 100644 index 00000000..47f6f6ec --- /dev/null +++ b/package/drbd-utils/drbd-utils.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 e89be59e60fc33534481a5dcae90de242e35867512d85cef2878ca757bfb074a drbd-utils-9.15.0.tar.gz +sha256 1ca3e8f71b7de618968e7ea9fe47822d9e704dc476aef8544033abedec355225 COPYING diff --git a/package/drbd-utils/drbd-utils.mk b/package/drbd-utils/drbd-utils.mk new file mode 100644 index 00000000..8ea581eb --- /dev/null +++ b/package/drbd-utils/drbd-utils.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# drbd-utils +# +################################################################################ + +DRBD_UTILS_VERSION = 9.15.0 +DRBD_UTILS_SITE = http://www.linbit.com/downloads/drbd/utils +DRBD_UTILS_LICENSE = GPL-2.0+ +DRBD_UTILS_LICENSE_FILES = COPYING +DRBD_UTILS_DEPENDENCIES = host-flex + +DRBD_UTILS_CONF_OPTS = --with-distro=generic --without-manual + +ifeq ($(BR2_INIT_SYSTEMD),y) +DRBD_UTILS_CONF_OPTS += --with-initscripttype=systemd +DRBD_UTILS_DEPENDENCIES += systemd +else +DRBD_UTILS_CONF_OPTS += --with-initscripttype=sysv +endif + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +DRBD_UTILS_CONF_OPTS += --with-udev=yes +DRBD_UTILS_DEPENDENCIES += udev +else +DRBD_UTILS_CONF_OPTS += --with-udev=no +endif + +$(eval $(autotools-package)) diff --git a/package/driver_testcase/Config.in b/package/driver_testcase/Config.in new file mode 100644 index 00000000..95a63b38 --- /dev/null +++ b/package/driver_testcase/Config.in @@ -0,0 +1,27 @@ +config BR2_PACKAGE_DRIVER_TESTCASE + bool "driver testcase loongson" + help + this is a sofeware or sofeware set work loongson gd board + help user to test their's board + if you can't build it because you not build in loongson gd net + git source unsee in eth + you can contact oujintao@loongson.com for help + +config BR2_PACKAGE_DRIVER_TESTCASE_QT + bool "build Qt version" + depends on BR2_PACKAGE_DRIVER_TESTCASE + depends on BR2_PACKAGE_QT5 + depends on BR2_PACKAGE_QT5BASE + help + if your system contain Qt + it will build a Qt version test case for you + +config BR2_PACKAGE_DRIVER_TESTCASE_QT_AUTO_START + bool "Qt version auto run after boot" + depends on BR2_PACKAGE_DRIVER_TESTCASE_QT + depends on BR2_INIT_SYSTEMD || (BR2_INIT_BUSYBOX && BR2_PACKAGE_BOOT_RUN) + default y + help + if your system contain Qt and select build this software Qt version + it will set a service which run after boot system to let software exec + diff --git a/package/driver_testcase/driver_testcase.mk b/package/driver_testcase/driver_testcase.mk new file mode 100644 index 00000000..9b705272 --- /dev/null +++ b/package/driver_testcase/driver_testcase.mk @@ -0,0 +1,83 @@ +################################################################################ +# +# driver_testcase +# +################################################################################ + +DRIVER_TESTCASE_VERSION = origin/master +DRIVER_TESTCASE_SITE = http://10.120.1.5:3000/base/driver_testcase +DRIVER_TESTCASE_SITE_METHOD = git +DRIVER_TESTCASE_GIT_SUBMODULES = YES +DRIVER_TESTCASE_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_PACKAGE_DRIVER_TESTCASE_QT),y) +DRIVER_TESTCASE_DEPENDENCIES = qt5base +endif + +#define DRIVER_TESTCASE_EXTRACT_CMDS + +#endef + +#$(TARGET_MAKE_ENV) $(MAKE) CC=$(TARGET_CC) AR=$(TARGET_AR) -C $(@D) + +ifeq ($(BR2_PACKAGE_DRIVER_TESTCASE_QT),y) +define DRIVER_TESTCASE_BUILD_QT_VER_CMDS + cd $(@D)/Qtver/driver_testcase/ && $(HOST_DIR)/bin/qmake driver_testcase.pro && $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/Qtver/driver_testcase/ +endef +define DRIVER_TESTCASE_INSTALL_QT_VER_CMDS + echo "install Qt version sofeware" && cd $(@D)/Qtver/driver_testcase/ && cp driver_testcase $(TARGET_DIR)/root/loongson_test_case/ +endef +else +define DRIVER_TESTCASE_BUILD_QT_VER_CMDS + echo "not build Qt version" +endef +define DRIVER_TESTCASE_INSTALL_QT_VER_CMDS + echo "not install Qt version" +endef +endif + +ifeq ($(BR2_PACKAGE_DRIVER_TESTCASE_QT_AUTO_START),y) + +ifeq ($(BR2_PACKAGE_BOOT_RUN),y) +define DRIVER_TESTCASE_INSTALL_AUTO_EXEC_AFTER_BOOT_CMDS + echo "auto run in boot in /root/boot_run.sh" +endef +else +define DRIVER_TESTCASE_INSTALL_AUTO_EXEC_AFTER_BOOT_CMDS + echo "install auto boot Qt version sofeware service" && cd $(TOPDIR)/package/driver_testcase/ && cp driver_testcase.service $(TARGET_DIR)/usr/lib/systemd/system/ && cd $(TARGET_DIR)/usr/lib/systemd/system/ && mkdir -p multi-user.target.wants && cd $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants && ln -s -f ../driver_testcase.service driver_testcase.service +endef +endif + +else +define DRIVER_TESTCASE_INSTALL_AUTO_EXEC_AFTER_BOOT_CMDS + echo "nothing to do" +endef +endif + +define DRIVER_TESTCASE_BUILD_CMDS + echo "first cmake all single test case" + cd $(@D) && mkdir -p build && cd ./build && cmake -D CMAKE_C_COMPILER=$(TARGET_CC) ../ + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/build/ + cd $(@D) && export CC=$(TARGET_CC); export $(TARGET_MAKE_ENV); export ARCH=$(BR2_ARCH); export CROSS_COMPILE=$(BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX)-; ./compile_ob_cp.sh && ./install_single_test.sh + echo "second build cmd version sofeware" + cd $(@D)/test-server-project && export $(TARGET_MAKE_ENV); export CC=$(TARGET_CC); export ARCH=$(BR2_ARCH); export CROSS_COMPILE=$(BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX)-; ./build.sh rebuild + $(DRIVER_TESTCASE_BUILD_QT_VER_CMDS) +endef + +define DRIVER_TESTCASE_INSTALL_STAGING_CMDS + echo "nothing to do" +endef + +define DRIVER_TESTCASE_INSTALL_TARGET_CMDS + echo "install all single test case" + cd $(TARGET_DIR)/ && mkdir -p ./root/loongson_test_case + cd $(@D) && cd out/loongson_test_case/ && cp -r * $(TARGET_DIR)/root/loongson_test_case/ + echo "install test-server(all test case test tool)" + mkdir -p $(TARGET_DIR)/root/loongson-test-server + cd $(@D)/test-server-project && cp test-server $(TARGET_DIR)/root/loongson-test-server + #cd $(@D)/test-server-project && cp can_client $(TARGET_DIR)/root/loongson-test-server + $(DRIVER_TESTCASE_INSTALL_QT_VER_CMDS) + $(DRIVER_TESTCASE_INSTALL_AUTO_EXEC_AFTER_BOOT_CMDS) +endef + +$(eval $(generic-package)) diff --git a/package/driver_testcase/driver_testcase.service b/package/driver_testcase/driver_testcase.service new file mode 100644 index 00000000..a3fb1d86 --- /dev/null +++ b/package/driver_testcase/driver_testcase.service @@ -0,0 +1,13 @@ +[Unit] +Description=driver_testcase Qt version exec +After=getty@.service + +[Service] +Type=oneshot +ExecStart=sleep 5.5 +ExecStart=/root/loongson_test_case/driver_testcase -platform linuxfb +TimeoutSec=0 +RemainAfterExit=no + +[Install] +WantedBy=multi-user.target diff --git a/package/dropbear/Config.in b/package/dropbear/Config.in new file mode 100644 index 00000000..e14a670c --- /dev/null +++ b/package/dropbear/Config.in @@ -0,0 +1,76 @@ +config BR2_PACKAGE_DROPBEAR + bool "dropbear" + select BR2_PACKAGE_ZLIB if !BR2_PACKAGE_DROPBEAR_SMALL + select BR2_PACKAGE_LIBTOMCRYPT if !BR2_PACKAGE_DROPBEAR_SMALL + help + A small SSH 2 server designed for small memory environments. + + Note that dropbear requires a per-device unique host key. The + key will be generated when dropbear starts, but it is not + persistent over reboot (if you have a read-only rootfs) or + upgrade (if you have a read-write rootfs). To make the key + persistent, replace /etc/dropbear with a symlink to a + directory on a persistent, writeable filesystem. + Alternatively, mount a persistent unionfs over your root + filesystem. + + https://matt.ucc.asn.au/dropbear/dropbear.html + +if BR2_PACKAGE_DROPBEAR + +config BR2_PACKAGE_DROPBEAR_CLIENT + bool "client programs" + default y + help + Provides the programs: dbclient, ssh + + Note that the following programs are also used server-side + and are therefore always build regardless this setting: + dropbear, dropbearkey, dropbearconvert, scp + +config BR2_PACKAGE_DROPBEAR_DISABLE_REVERSEDNS + bool "disable reverse DNS lookups" + help + Disable reverse DNS lookups on connection. This can be handy + on systems without working DNS, as connections otherwise + stall until DNS times out. + +config BR2_PACKAGE_DROPBEAR_SMALL + bool "optimize for size" + default y + help + Compile dropbear for the smallest possible binary size. + + Tradeoffs are slower hashes and ciphers, and disabling of the + blowfish cipher and zlib. + +config BR2_PACKAGE_DROPBEAR_WTMP + bool "log dropbear access to wtmp" + help + Enable logging of dropbear access to wtmp. Notice that + Buildroot does not generate wtmp by default. + +config BR2_PACKAGE_DROPBEAR_LASTLOG + bool "log dropbear access to lastlog" + help + Enable logging of dropbear access to lastlog. Notice that + Buildroot does not generate lastlog by default. + +config BR2_PACKAGE_DROPBEAR_LEGACY_CRYPTO + bool "enable legacy crypto" + help + Enable legacy and possibly insecure algorithms: + 3DES encryption + SHA1-96 message integrity + CBC encryption mode + DSA public keys + Diffie-Hellman Group1 key exchange + +config BR2_PACKAGE_DROPBEAR_LOCALOPTIONS_FILE + string "path to custom localoptions.h definitions file" + help + Path to a file whose contents will be appended to Dropbear + localoptions.h. It can be used to tweak the Dropbear + configuration. + +endif diff --git a/package/dropbear/S50dropbear b/package/dropbear/S50dropbear new file mode 100644 index 00000000..9474eaaf --- /dev/null +++ b/package/dropbear/S50dropbear @@ -0,0 +1,61 @@ +#!/bin/sh +# +# Starts dropbear sshd. +# + +# Allow a few customizations from a config file +test -r /etc/default/dropbear && . /etc/default/dropbear + +start() { + DROPBEAR_ARGS="$DROPBEAR_ARGS -R" + + # If /etc/dropbear is a symlink to /var/run/dropbear, and + # - the filesystem is RO (i.e. we can not rm the symlink), + # create the directory pointed to by the symlink. + # - the filesystem is RW (i.e. we can rm the symlink), + # replace the symlink with an actual directory + if [ -L /etc/dropbear \ + -a "$(readlink /etc/dropbear)" = "/var/run/dropbear" ] + then + if rm -f /etc/dropbear >/dev/null 2>&1; then + mkdir -p /etc/dropbear + else + echo "No persistent location to store SSH host keys. New keys will be" + echo "generated at each boot. Are you sure this is what you want to do?" + mkdir -p "$(readlink /etc/dropbear)" + fi + fi + + printf "Starting dropbear sshd: " + umask 077 + + start-stop-daemon -S -q -p /var/run/dropbear.pid \ + --exec /usr/sbin/dropbear -- $DROPBEAR_ARGS + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +stop() { + printf "Stopping dropbear sshd: " + start-stop-daemon -K -q -p /var/run/dropbear.pid + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/dropbear/dropbear.hash b/package/dropbear/dropbear.hash new file mode 100644 index 00000000..82ff454f --- /dev/null +++ b/package/dropbear/dropbear.hash @@ -0,0 +1,7 @@ +# From https://matt.ucc.asn.au/dropbear/releases/SHA256SUM.asc +sha256 48235d10b37775dbda59341ac0c4b239b82ad6318c31568b985730c788aac53b dropbear-2020.81.tar.bz2 + +# License file, locally computed +sha256 a99ce657d790b761c132ee7e0de18edb437ae6361e536d991c6a12f36e770445 LICENSE +sha256 8f196cb13afd271f5e267fd29543fc454596382ad580e7592709492843996ac8 libtomcrypt/LICENSE +sha256 2fa64b163659f41965c9815882a8296d3d03ff546b76153e11445f9bdecf955a libtommath/LICENSE diff --git a/package/dropbear/dropbear.mk b/package/dropbear/dropbear.mk new file mode 100644 index 00000000..1cbe6368 --- /dev/null +++ b/package/dropbear/dropbear.mk @@ -0,0 +1,144 @@ +################################################################################ +# +# dropbear +# +################################################################################ + +DROPBEAR_VERSION = 2020.81 +DROPBEAR_SITE = https://matt.ucc.asn.au/dropbear/releases +DROPBEAR_SOURCE = dropbear-$(DROPBEAR_VERSION).tar.bz2 +DROPBEAR_LICENSE = MIT, BSD-2-Clause, Public domain +DROPBEAR_LICENSE_FILES = LICENSE +DROPBEAR_TARGET_BINS = dropbearkey dropbearconvert scp +DROPBEAR_PROGRAMS = dropbear $(DROPBEAR_TARGET_BINS) +DROPBEAR_CPE_ID_VENDOR = dropbear_ssh_project +DROPBEAR_CPE_ID_PRODUCT = dropbear_ssh + +# Disable hardening flags added by dropbear configure.ac, and let +# Buildroot add them when the relevant options are enabled. This +# prevents dropbear from using SSP support when not available. +DROPBEAR_CONF_OPTS = --disable-harden + +ifeq ($(BR2_PACKAGE_DROPBEAR_CLIENT),y) +# Build dbclient, and create a convenience symlink named ssh +DROPBEAR_PROGRAMS += dbclient +DROPBEAR_TARGET_BINS += dbclient ssh +endif + +DROPBEAR_MAKE = \ + $(MAKE) MULTI=1 SCPPROGRESS=1 \ + PROGRAMS="$(DROPBEAR_PROGRAMS)" + +# With BR2_SHARED_STATIC_LIBS=y the generic infrastructure adds a +# --enable-static flags causing dropbear to be built as a static +# binary. Adding a --disable-static reverts this +ifeq ($(BR2_SHARED_STATIC_LIBS),y) +DROPBEAR_CONF_OPTS += --disable-static +endif + +ifeq ($(BR2_PACKAGE_LINUX_PAM),y) +define DROPBEAR_SVR_PAM_AUTH + echo '#define DROPBEAR_SVR_PASSWORD_AUTH 0' >> $(@D)/localoptions.h + echo '#define DROPBEAR_SVR_PAM_AUTH 1' >> $(@D)/localoptions.h +endef +define DROPBEAR_INSTALL_PAM_CONF + $(INSTALL) -D -m 644 package/dropbear/etc-pam.d-sshd $(TARGET_DIR)/etc/pam.d/sshd +endef +DROPBEAR_DEPENDENCIES += linux-pam +DROPBEAR_CONF_OPTS += --enable-pam +DROPBEAR_POST_EXTRACT_HOOKS += DROPBEAR_SVR_PAM_AUTH +DROPBEAR_POST_INSTALL_TARGET_HOOKS += DROPBEAR_INSTALL_PAM_CONF +else +# Ensure that dropbear doesn't use crypt() when it's not available +define DROPBEAR_SVR_PASSWORD_AUTH + echo '#if !HAVE_CRYPT' >> $(@D)/localoptions.h + echo '#define DROPBEAR_SVR_PASSWORD_AUTH 0' >> $(@D)/localoptions.h + echo '#endif' >> $(@D)/localoptions.h +endef +DROPBEAR_POST_EXTRACT_HOOKS += DROPBEAR_SVR_PASSWORD_AUTH +endif + +ifeq ($(BR2_PACKAGE_DROPBEAR_LEGACY_CRYPTO),y) +define DROPBEAR_ENABLE_LEGACY_CRYPTO + echo '#define DROPBEAR_3DES 1' >> $(@D)/localoptions.h + echo '#define DROPBEAR_ENABLE_CBC_MODE 1' >> $(@D)/localoptions.h + echo '#define DROPBEAR_SHA1_96_HMAC 1' >> $(@D)/localoptions.h +endef +DROPBEAR_POST_EXTRACT_HOOKS += DROPBEAR_ENABLE_LEGACY_CRYPTO +else +define DROPBEAR_DISABLE_LEGACY_CRYPTO + echo '#define DROPBEAR_DSS 0' >> $(@D)/localoptions.h + echo '#define DROPBEAR_DH_GROUP1 0' >> $(@D)/localoptions.h +endef +DROPBEAR_POST_EXTRACT_HOOKS += DROPBEAR_DISABLE_LEGACY_CRYPTO +endif + +ifeq ($(BR2_PACKAGE_DROPBEAR_DISABLE_REVERSEDNS),) +define DROPBEAR_ENABLE_REVERSE_DNS + echo '#define DO_HOST_LOOKUP 1' >> $(@D)/localoptions.h +endef +DROPBEAR_POST_EXTRACT_HOOKS += DROPBEAR_ENABLE_REVERSE_DNS +endif + +ifeq ($(BR2_PACKAGE_DROPBEAR_SMALL),y) +DROPBEAR_LICENSE += , Unlicense, WTFPL +DROPBEAR_LICENSE_FILES += libtommath/LICENSE libtomcrypt/LICENSE +DROPBEAR_CONF_OPTS += --disable-zlib --enable-bundled-libtom +else +define DROPBEAR_BUILD_FEATURED + echo '#define DROPBEAR_SMALL_CODE 0' >> $(@D)/localoptions.h + echo '#define DROPBEAR_TWOFISH128 1' >> $(@D)/localoptions.h + echo '#define DROPBEAR_TWOFISH256 1' >> $(@D)/localoptions.h +endef +DROPBEAR_POST_EXTRACT_HOOKS += DROPBEAR_BUILD_FEATURED +DROPBEAR_DEPENDENCIES += zlib libtomcrypt +DROPBEAR_CONF_OPTS += --disable-bundled-libtom +endif + +define DROPBEAR_CUSTOM_PATH + echo '#define DEFAULT_PATH $(BR2_SYSTEM_DEFAULT_PATH)' >>$(@D)/localoptions.h +endef +DROPBEAR_POST_EXTRACT_HOOKS += DROPBEAR_CUSTOM_PATH + +define DROPBEAR_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/dropbear/dropbear.service \ + $(TARGET_DIR)/usr/lib/systemd/system/dropbear.service +endef + +ifeq ($(BR2_USE_MMU),y) +define DROPBEAR_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 package/dropbear/S50dropbear \ + $(TARGET_DIR)/etc/init.d/S50dropbear +endef +else +define DROPBEAR_DISABLE_STANDALONE + echo '#define NON_INETD_MODE 0' >> $(@D)/localoptions.h +endef +DROPBEAR_POST_EXTRACT_HOOKS += DROPBEAR_DISABLE_STANDALONE +endif + +ifneq ($(BR2_PACKAGE_DROPBEAR_WTMP),y) +DROPBEAR_CONF_OPTS += --disable-wtmp +endif + +ifneq ($(BR2_PACKAGE_DROPBEAR_LASTLOG),y) +DROPBEAR_CONF_OPTS += --disable-lastlog +endif + +DROPBEAR_LOCALOPTIONS_FILE = $(call qstrip,$(BR2_PACKAGE_DROPBEAR_LOCALOPTIONS_FILE)) +ifneq ($(DROPBEAR_LOCALOPTIONS_FILE),) +define DROPBEAR_APPEND_LOCALOPTIONS_FILE + cat $(DROPBEAR_LOCALOPTIONS_FILE) >> $(@D)/localoptions.h +endef +DROPBEAR_POST_EXTRACT_HOOKS += DROPBEAR_APPEND_LOCALOPTIONS_FILE +endif + +define DROPBEAR_INSTALL_TARGET_CMDS + $(INSTALL) -m 755 $(@D)/dropbearmulti $(TARGET_DIR)/usr/sbin/dropbear + for f in $(DROPBEAR_TARGET_BINS); do \ + ln -snf ../sbin/dropbear $(TARGET_DIR)/usr/bin/$$f ; \ + done + ln -snf /var/run/dropbear $(TARGET_DIR)/etc/dropbear +endef + +$(eval $(autotools-package)) diff --git a/package/dropbear/dropbear.service b/package/dropbear/dropbear.service new file mode 100644 index 00000000..620cdd7a --- /dev/null +++ b/package/dropbear/dropbear.service @@ -0,0 +1,27 @@ +[Unit] +Description=Dropbear SSH daemon +After=syslog.target network.target auditd.service + +[Service] +# If /etc/dropbear is a symlink to /var/run/dropbear, and +# - the filesystem is RO (i.e. we can not rm the symlink), +# create the directory pointed to by the symlink. +# - the filesystem is RW (i.e. we can rm the symlink), +# replace the symlink with an actual directory +ExecStartPre=/bin/sh -c '\ +if [ -L /etc/dropbear \ + -a "$(readlink /etc/dropbear)" = "/var/run/dropbear" ]; then \ + if rm -f /etc/dropbear >/dev/null 2>&1; then \ + mkdir -p /etc/dropbear; \ + else \ + echo "No persistent location to store SSH host keys. New keys will be"; \ + echo "generated at each boot. Are you sure this is what you want to do?"; \ + mkdir -p "$(readlink /etc/dropbear)"; \ + fi; \ +fi' +EnvironmentFile=-/etc/default/dropbear +ExecStart=/usr/sbin/dropbear -F -R $DROPBEAR_ARGS +ExecReload=/bin/kill -HUP $MAINPID + +[Install] +WantedBy=multi-user.target diff --git a/package/dropbear/etc-pam.d-sshd b/package/dropbear/etc-pam.d-sshd new file mode 100644 index 00000000..5e13fc0d --- /dev/null +++ b/package/dropbear/etc-pam.d-sshd @@ -0,0 +1,7 @@ +#%PAM-1.0 +auth required pam_unix.so shadow nodelay +account required pam_nologin.so +account required pam_unix.so +password required pam_unix.so shadow nullok use_authtok +session required pam_unix.so +session required pam_limits.so diff --git a/package/dropwatch/Config.in b/package/dropwatch/Config.in new file mode 100644 index 00000000..8dfb4ace --- /dev/null +++ b/package/dropwatch/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_DROPWATCH + bool "dropwatch" + depends on BR2_TOOLCHAIN_HAS_THREADS # libnl + select BR2_PACKAGE_READLINE + select BR2_PACKAGE_LIBNL + select BR2_PACKAGE_LIBPCAP + help + Dropwatch is an interactive utility for monitoring and + recording packets that are dropped by the kernel + + https://github.com/nhorman/dropwatch + +comment "dropwatch needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/dropwatch/dropwatch.hash b/package/dropwatch/dropwatch.hash new file mode 100644 index 00000000..867a7f12 --- /dev/null +++ b/package/dropwatch/dropwatch.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 b748b66a816c1f94531446c0451da5461a4a31b0949244bb867d741c6ac0148b dropwatch-1.5.3.tar.gz +sha256 e6d6a009505e345fe949e1310334fcb0747f28dae2856759de102ab66b722cb4 COPYING diff --git a/package/dropwatch/dropwatch.mk b/package/dropwatch/dropwatch.mk new file mode 100644 index 00000000..36608ad8 --- /dev/null +++ b/package/dropwatch/dropwatch.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# dropwatch +# +################################################################################ + +DROPWATCH_VERSION = 1.5.3 +DROPWATCH_SITE = $(call github,nhorman,dropwatch,v$(DROPWATCH_VERSION)) +DROPWATCH_DEPENDENCIES = libnl readline libpcap host-pkgconf $(TARGET_NLS_DEPENDENCIES) +DROPWATCH_LICENSE = GPL-2.0+ +DROPWATCH_LICENSE_FILES = COPYING +# From git +DROPWATCH_AUTORECONF = YES + +DROPWATCH_CONF_OPTS = --without-bfd +DROPWATCH_MAKE_OPTS = LIBS=$(TARGET_NLS_LIBS) + +$(eval $(autotools-package)) diff --git a/package/dstat/Config.in b/package/dstat/Config.in new file mode 100644 index 00000000..647a7033 --- /dev/null +++ b/package/dstat/Config.in @@ -0,0 +1,28 @@ +config BR2_PACKAGE_DSTAT + bool "dstat" + depends on BR2_USE_WCHAR # python + depends on BR2_USE_MMU # python + depends on BR2_TOOLCHAIN_HAS_THREADS # python + depends on !BR2_STATIC_LIBS # python + select BR2_PACKAGE_PYTHON3 if !BR2_PACKAGE_PYTHON + help + Dstat, written in Python, is a versatile replacement for + vmstat, iostat, netstat and ifstat. Dstat overcomes some of + their limitations and adds some extra features, more counters + and flexibility. Dstat is handy for monitoring systems during + performance tuning tests, benchmarks or troubleshooting. + Dstat allows you to view all of your system resources in + real-time, you can e.g. compare disk utilization in + combination with interrupts from your IDE controller, or + compare the network bandwidth numbers directly with the disk + throughput (in the same interval). + + Note that to get proper output, your terminal size should be + known by the termios subsystem. This can be done by running + the 'resize' utility of busybox. + + http://dag.wieers.com/home-made/dstat/ + +comment "dstat needs a toolchain w/ wchar, threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/dstat/dstat.hash b/package/dstat/dstat.hash new file mode 100644 index 00000000..603bd506 --- /dev/null +++ b/package/dstat/dstat.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 4fbd58f3461c86d09a3ab97472aa204de37aa33d31a0493a3e5ed86a2045abea dstat-0.7.4.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/dstat/dstat.mk b/package/dstat/dstat.mk new file mode 100644 index 00000000..6f01a371 --- /dev/null +++ b/package/dstat/dstat.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# dstat +# +################################################################################ + +DSTAT_VERSION = 0.7.4 +DSTAT_SITE = $(call github,dagwieers,dstat,v$(DSTAT_VERSION)) +DSTAT_LICENSE = GPL-2.0 +DSTAT_LICENSE_FILES = COPYING + +define DSTAT_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/dt-utils/Config.in b/package/dt-utils/Config.in new file mode 100644 index 00000000..7c9a1dee --- /dev/null +++ b/package/dt-utils/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_DT_UTILS + bool "dt-utils" + depends on BR2_PACKAGE_HAS_UDEV + help + Tools for flattened device-tree dumping and barebox state + manipulation. + + https://git.pengutronix.de/cgit/tools/dt-utils/ + +comment "dt-utils needs udev /dev management" + depends on !BR2_PACKAGE_HAS_UDEV diff --git a/package/dt-utils/dt-utils.hash b/package/dt-utils/dt-utils.hash new file mode 100644 index 00000000..e42e8257 --- /dev/null +++ b/package/dt-utils/dt-utils.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 737313719d7c04d7b9576fdc572d838c81ea22ea41a44c7646467018e67a0b97 dt-utils-v2019.01.0-br1.tar.gz +sha256 a45932c79317d15116eadbf1c9c6fc59117ec3c4621db3a876066defa723963b COPYING diff --git a/package/dt-utils/dt-utils.mk b/package/dt-utils/dt-utils.mk new file mode 100644 index 00000000..25c287d4 --- /dev/null +++ b/package/dt-utils/dt-utils.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# dt-utils +# +################################################################################ + +DT_UTILS_VERSION = v2019.01.0 +DT_UTILS_SITE = https://git.pengutronix.de/git/tools/dt-utils +DT_UTILS_SITE_METHOD = git +DT_UTILS_LICENSE = GPL-2.0 +DT_UTILS_LICENSE_FILES = COPYING +DT_UTILS_DEPENDENCIES = udev +DT_UTILS_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/dt/0001-adjust-os-symlink.patch b/package/dt/0001-adjust-os-symlink.patch new file mode 100644 index 00000000..1af9d64d --- /dev/null +++ b/package/dt/0001-adjust-os-symlink.patch @@ -0,0 +1,19 @@ +Don't force build-dir-in-build-dir logic, symlink the os-specific SCSI +support file in place. + +Status: not suitable for upstream. + +Signed-off-by: Gustavo Zacarias + +diff -Nura Makefile.linux Makefile.linux +--- a/Makefile.linux 2016-01-26 09:10:03.939963780 -0300 ++++ b/Makefile.linux 2016-01-26 09:10:27.140763863 -0300 +@@ -129,7 +129,7 @@ + echo "Please specify OS={aix,linux,hpux,solaris,windows}"; \ + exit 1; \ + fi; \ +- ln -sf ../scsilib-$(OS).c scsilib.c ++ ln -sf scsilib-$(OS).c scsilib.c + + print:; + @$(PRINTER) $(PRINTFLAGS) $(ALL_CFILES) diff --git a/package/dt/0002-dt-default-source-define.patch b/package/dt/0002-dt-default-source-define.patch new file mode 100644 index 00000000..8c9daaea --- /dev/null +++ b/package/dt/0002-dt-default-source-define.patch @@ -0,0 +1,20 @@ +Patch taken from Fedora: +http://pkgs.fedoraproject.org/cgit/rpms/dt.git/commit/dt-default-source-define.patch?id=a3107b34a3efc6af66a5f892514f233bb66eb6b5 + +_BSD_SOURCE was deprecated, hence switch to use _DEFAULT_SOURCE as well +to avoid the build from breaking on newer toolchains. + +Signed-off-by: Gustavo Zacarias + +diff -rupN dt.v18.32.old/common.h dt.v18.32/common.h +--- dt.v18.32.old/common.h 2013-03-01 23:52:30.000000000 +0100 ++++ dt.v18.32/common.h 2014-09-24 17:41:40.777604710 +0200 +@@ -127,7 +127,7 @@ typedef volatile slarge_t v_slarge; + + #endif /* defined(_WIN64) */ + +-#elif defined(__GNUC__) && defined(_BSD_SOURCE) || defined(SCO) || defined(__QNXNTO__) || defined(SOLARIS) || defined(HP_UX) || defined(AIX) || defined(_NT_SOURCE) ++#elif defined(__GNUC__) && defined(_BSD_SOURCE) || defined (_DEFAULT_SOURCE) || defined(SCO) || defined(__QNXNTO__) || defined(SOLARIS) || defined(HP_UX) || defined(AIX) || defined(_NT_SOURCE) + + #define QuadIsLongLong + typedef unsigned long long int large_t; diff --git a/package/dt/Config.in b/package/dt/Config.in new file mode 100644 index 00000000..826a66eb --- /dev/null +++ b/package/dt/Config.in @@ -0,0 +1,21 @@ +comment "dt needs a glibc or uClibc toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_TOOLCHAIN_USES_MUSL + +config BR2_PACKAGE_DT + bool "dt" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_THREADS + # Build fails because of several BSDisms + depends on !BR2_TOOLCHAIN_USES_MUSL + help + dt is a generic data test program used to verify proper + operation of peripherals, file systems, device drivers, + or any data stream supported by the operating system. + In its' simplest mode of operation, dt writes and then + verifys its' default data pattern, then displays + performance statisics and other test parameters + before exiting. Since verification of data is performed, + dt can be thought of as a generic diagnostic tool. + + http://www.scsifaq.org/RMiller_Tools/dt.html diff --git a/package/dt/dt.hash b/package/dt/dt.hash new file mode 100644 index 00000000..9c110257 --- /dev/null +++ b/package/dt/dt.hash @@ -0,0 +1,7 @@ +# From http://pkgs.fedoraproject.org/repo/pkgs/dt/dt-source-v18.32.tar.gz +# (directory name is md5 hash) +md5 3054aeaaba047a1dbe90c2132a382ee2 dt-source-v18.32.tar.gz + +# Locally calculated +sha256 10d164676e918a4d07f233bcd11e4cb6bfd1052c996182cd1827ccd0c063fcc6 dt-source-v18.32.tar.gz +sha256 49f47f20de4b44dc3505ed0cc55bfbfe0fc3e41956ab546f1eeedcf554def54c LICENSE diff --git a/package/dt/dt.mk b/package/dt/dt.mk new file mode 100644 index 00000000..1963a7ec --- /dev/null +++ b/package/dt/dt.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# dt +# +################################################################################ + +DT_VERSION = 18.32 +DT_SITE = http://pkgs.fedoraproject.org/repo/pkgs/dt/$(DT_SOURCE)/3054aeaaba047a1dbe90c2132a382ee2 +DT_SOURCE = dt-source-v$(DT_VERSION).tar.gz +DT_STRIP_COMPONENTS = 2 +DT_LICENSE = ISC-like +DT_LICENSE_FILES = LICENSE + +DT_CFLAGS = \ + -std=c99 \ + -DMMAP \ + -D__linux__ \ + -D_GNU_SOURCE \ + -D_FILE_OFFSET_BITS=64 \ + -DTHREADS \ + -DSCSI + +# uClibc doesn't provide POSIX AIO +ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),) +DT_CFLAGS += -DAIO +endif + +define DT_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) -f Makefile.linux \ + $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(TARGET_CFLAGS) $(DT_CFLAGS)" \ + OS=linux +endef + +define DT_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/dt $(TARGET_DIR)/usr/bin/dt +endef + +$(eval $(generic-package)) diff --git a/package/dtach/Config.in b/package/dtach/Config.in new file mode 100644 index 00000000..3e6e4934 --- /dev/null +++ b/package/dtach/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_DTACH + bool "dtach" + depends on BR2_USE_MMU # fork() + help + dtach is a tiny program that emulates the detach feature of + screen, allowing you to run a program in an environment that + is protected from the controlling terminal and attach to it + later. + + http://dtach.sourceforge.net/ diff --git a/package/dtach/dtach.hash b/package/dtach/dtach.hash new file mode 100644 index 00000000..1a97aa35 --- /dev/null +++ b/package/dtach/dtach.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 5f7e8c835ee49a9e6dcf89f4e8ccbe724b061c0fc8565b504dd8b3e67ab79f82 dtach-0.9.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/dtach/dtach.mk b/package/dtach/dtach.mk new file mode 100644 index 00000000..3cbf37e2 --- /dev/null +++ b/package/dtach/dtach.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# dtach +# +################################################################################ + +DTACH_VERSION = 0.9 +DTACH_SITE = $(call github,crigler,dtach,v$(DTACH_VERSION)) +DTACH_LICENSE = GPL-2.0+ +DTACH_LICENSE_FILES = COPYING + +# The Makefile does not have an install target. +define DTACH_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/dtach $(TARGET_DIR)/usr/bin/dtach +endef + +$(eval $(autotools-package)) diff --git a/package/dtc/0001-Fix-include-guards-for-older-kernel-u-boot-sources.patch b/package/dtc/0001-Fix-include-guards-for-older-kernel-u-boot-sources.patch new file mode 100644 index 00000000..127114e8 --- /dev/null +++ b/package/dtc/0001-Fix-include-guards-for-older-kernel-u-boot-sources.patch @@ -0,0 +1,67 @@ +From 086283ed7f1886de05407bc75dd4c070c78a6f50 Mon Sep 17 00:00:00 2001 +From: Lothar Felten +Date: Mon, 8 Oct 2018 13:29:44 +0200 +Subject: [PATCH] Fix include guards for older kernel/u-boot sources + +Linux kernels before 4.17 and U-Boot versions before 2018.07 use libfdt +include guards with leading underscores. + +Those have been removed in dtc-1.4.7. + +This patch handles both include guard types and allows the compilation +of older Linux kernel and u-boot sources. + +Signed-off-by: Lothar Felten +[ThomasDS: also update fdt.h which has the same issue, seen on U-Boot +2011.03] +Signed-off-by: Thomas De Schampheleire +[SB: Updated to match context change in v1.5.1] +Signed-off-by: Sam Bobroff +--- + libfdt/fdt.h | 4 ++++ + libfdt/libfdt.h | 4 ++++ + libfdt/libfdt_env.h | 4 ++++ + 3 files changed, 12 insertions(+) + +diff --git a/libfdt/fdt.h b/libfdt/fdt.h +index f2e6880..0f1dc4d 100644 +--- a/libfdt/fdt.h ++++ b/libfdt/fdt.h +@@ -1,4 +1,8 @@ + /* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */ ++#ifdef _FDT_H ++#warning "Please consider updating your kernel and/or u-boot version" ++#define FDT_H ++#endif + #ifndef FDT_H + #define FDT_H + /* +diff --git a/libfdt/libfdt.h b/libfdt/libfdt.h +index 8037f39..7668432 100644 +--- a/libfdt/libfdt.h ++++ b/libfdt/libfdt.h +@@ -1,4 +1,8 @@ + /* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */ ++#ifdef _LIBFDT_H ++#warning "Please consider updating your kernel and/or u-boot version" ++#define LIBFDT_H ++#endif + #ifndef LIBFDT_H + #define LIBFDT_H + /* +diff --git a/libfdt/libfdt_env.h b/libfdt/libfdt_env.h +index 73b6d40..b95a287 100644 +--- a/libfdt/libfdt_env.h ++++ b/libfdt/libfdt_env.h +@@ -1,4 +1,8 @@ + /* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */ ++#ifdef _LIBFDT_ENV_H ++#warning "Please consider updating your kernel and/or u-boot version" ++#define LIBFDT_ENV_H ++#endif + #ifndef LIBFDT_ENV_H + #define LIBFDT_ENV_H + /* +-- +2.22.0.216.g00a2a96fc9 + diff --git a/package/dtc/Config.in b/package/dtc/Config.in new file mode 100644 index 00000000..73bd3688 --- /dev/null +++ b/package/dtc/Config.in @@ -0,0 +1,39 @@ +config BR2_PACKAGE_DTC + bool "dtc (libfdt)" + depends on !BR2_STATIC_LIBS + help + The Device Tree Compiler, dtc, takes as input a device-tree in + a given format and outputs a device-tree in another format. + + Note that only the library is installed. + If you want the programs, say 'y' here, and to "dtc programs", + below. + + https://git.kernel.org/cgit/utils/dtc/dtc.git + +if BR2_PACKAGE_DTC + +config BR2_PACKAGE_DTC_PROGRAMS + bool "dtc programs" + help + Say 'y' here if you also want the programs on the target: + - convert-dtsv0 convert from version 0 to version 1 + - dtc the device tree compiler + - dtdiff compare two device trees (needs bash) + - fdtdump print a readable version of a + flat device tree + - fdtget read values from device tree + - fdtput write a property value to a device tree + + Note: dtdiff requires bash, so if bash is not selected, dtdiff + will be removed from the target file system. Enable bash if + you need dtdiff on the target. + +comment "dtdiff will not be installed: it requires bash" + depends on BR2_PACKAGE_DTC_PROGRAMS + depends on !BR2_PACKAGE_BASH + +endif + +comment "dtc needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/dtc/Config.in.host b/package/dtc/Config.in.host new file mode 100644 index 00000000..f80a49bb --- /dev/null +++ b/package/dtc/Config.in.host @@ -0,0 +1,10 @@ +config BR2_PACKAGE_HOST_DTC + bool "host dtc" + help + The Device Tree Compiler, dtc, takes as input a device-tree in + a given format and outputs a device-tree in another format. + + Install host tools: dtc, convert-dtsv0, fdtdump, fdtget and + fdtput. + + https://git.kernel.org/cgit/utils/dtc/dtc.git diff --git a/package/dtc/dtc.hash b/package/dtc/dtc.hash new file mode 100644 index 00000000..902ce1ba --- /dev/null +++ b/package/dtc/dtc.hash @@ -0,0 +1,7 @@ +# from https://www.kernel.org/pub/software/utils/dtc/sha256sums.asc +sha256 10503b0217e1b07933e29e8d347a00015b2431bea5f59afe0bed3af30340c82d dtc-1.6.0.tar.xz + +# Hash for license files +sha256 78e1e1ce5728a990d59c7de61d4741c49185d5129daf783b386380a214328d68 README.license +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 GPL +sha256 6313108c23efffa36948f8b2cff1560a5935373b527b0e1a837cc77e6ed1bacd BSD-2-Clause diff --git a/package/dtc/dtc.mk b/package/dtc/dtc.mk new file mode 100644 index 00000000..749abc6c --- /dev/null +++ b/package/dtc/dtc.mk @@ -0,0 +1,79 @@ +################################################################################ +# +# dtc +# +################################################################################ + +DTC_VERSION = 1.6.0 +DTC_SOURCE = dtc-$(DTC_VERSION).tar.xz +DTC_SITE = https://www.kernel.org/pub/software/utils/dtc +DTC_LICENSE = GPL-2.0+ or BSD-2-Clause (library) +DTC_LICENSE_FILES = README.license GPL BSD-2-Clause +DTC_CPE_ID_VENDOR = dtc_project +DTC_INSTALL_STAGING = YES +DTC_DEPENDENCIES = host-bison host-flex host-pkgconf +HOST_DTC_DEPENDENCIES = host-bison host-flex host-pkgconf + +DTC_MAKE_OPTS = \ + PREFIX=/usr \ + NO_PYTHON=1 \ + NO_VALGRIND=1 + +# For the host, we install headers in a special subdirectory to avoid +# conflicts with the in-kernel libfdt copy. +HOST_DTC_MAKE_OPTS = \ + PREFIX=$(HOST_DIR) \ + INCLUDEDIR=$(HOST_DIR)/include/libfdt \ + NO_PYTHON=1 \ + NO_VALGRIND=1 \ + NO_YAML=1 + +ifeq ($(BR2_PACKAGE_LIBYAML),y) +DTC_DEPENDENCIES += libyaml +else +DTC_MAKE_OPTS += NO_YAML=1 +endif + +define DTC_POST_INSTALL_TARGET_RM_DTDIFF + rm -f $(TARGET_DIR)/usr/bin/dtdiff +endef + +ifeq ($(BR2_PACKAGE_DTC_PROGRAMS),y) + +DTC_LICENSE += , GPL-2.0+ (programs) +DTC_INSTALL_GOAL = install +ifeq ($(BR2_PACKAGE_BASH),) +DTC_POST_INSTALL_TARGET_HOOKS += DTC_POST_INSTALL_TARGET_RM_DTDIFF +endif + +else # $(BR2_PACKAGE_DTC_PROGRAMS) != y + +DTC_INSTALL_GOAL = install-lib + +endif # $(BR2_PACKAGE_DTC_PROGRAMS) != y + +define DTC_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) EXTRA_CFLAGS="$(TARGET_CFLAGS) -fPIC" -C $(@D) $(DTC_MAKE_OPTS) +endef + +# For staging, only the library is needed +define DTC_INSTALL_STAGING_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) $(DTC_MAKE_OPTS) install-lib \ + install-includes +endef + +define DTC_INSTALL_TARGET_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) $(DTC_MAKE_OPTS) $(DTC_INSTALL_GOAL) +endef + +# host build +define HOST_DTC_BUILD_CMDS + $(HOST_CONFIGURE_OPTS) $(MAKE) EXTRA_CFLAGS="$(HOST_CFLAGS) -fPIC" -C $(@D) $(HOST_DTC_MAKE_OPTS) +endef + +define HOST_DTC_INSTALL_CMDS + $(HOST_CONFIGURE_OPTS) $(MAKE) -C $(@D) $(HOST_DTC_MAKE_OPTS) install +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/dtv-scan-tables/Config.in b/package/dtv-scan-tables/Config.in new file mode 100644 index 00000000..e102ca73 --- /dev/null +++ b/package/dtv-scan-tables/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_DTV_SCAN_TABLES + bool "dtv-scan-tables" + help + The Digital TV scan tables. + + http://git.linuxtv.org/dtv-scan-tables.git diff --git a/package/dtv-scan-tables/dtv-scan-tables.hash b/package/dtv-scan-tables/dtv-scan-tables.hash new file mode 100644 index 00000000..a5740997 --- /dev/null +++ b/package/dtv-scan-tables/dtv-scan-tables.hash @@ -0,0 +1,4 @@ +# Locally computed +sha256 fc65b1f85195ab3d877f7ce802dc62b8c70b3a1815fa6e6a69de19a9d354c19a dtv-scan-tables-6d019038cd04e837d9dd58701202c15924c1c654-br1.tar.gz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING +sha256 4fd46f32582c29007657e2daad8d0a6d954cf4e9d2e47bae8f8d8c32765fc987 COPYING.LGPL diff --git a/package/dtv-scan-tables/dtv-scan-tables.mk b/package/dtv-scan-tables/dtv-scan-tables.mk new file mode 100644 index 00000000..5fad615b --- /dev/null +++ b/package/dtv-scan-tables/dtv-scan-tables.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# dtv-scan-tables +# +################################################################################ + +DTV_SCAN_TABLES_VERSION = 6d019038cd04e837d9dd58701202c15924c1c654 +DTV_SCAN_TABLES_SITE = https://git.linuxtv.org/dtv-scan-tables.git +DTV_SCAN_TABLES_SITE_METHOD = git + +# This package only contains the transponders data. This is not a 'work' +# as per traditional copyright, but just a collection of 'facts', so there's +# probably no license to apply to these data files. +# However, the package prominently contains the COPYING and COPYING.LIB +# license files (respectively for the GPL-2.0 and the LGPL-2.1), so we use +# that as the licensing information. +DTV_SCAN_TABLES_LICENSE = GPL-2.0, LGPL-2.1 +DTV_SCAN_TABLES_LICENSE_FILES = COPYING COPYING.LGPL + +define DTV_SCAN_TABLES_INSTALL_TARGET_CMDS + for f in atsc dvb-c dvb-s dvb-t; do \ + $(INSTALL) -d -m 0755 $(TARGET_DIR)/usr/share/dvb/$$f; \ + $(INSTALL) $(@D)/$$f/* $(TARGET_DIR)/usr/share/dvb/$$f; \ + done +endef + +$(eval $(generic-package)) diff --git a/package/duktape/Config.in b/package/duktape/Config.in new file mode 100644 index 00000000..5dad5c3e --- /dev/null +++ b/package/duktape/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_DUKTAPE + bool "duktape" + depends on !BR2_STATIC_LIBS + help + Duktape is an embeddable Javascript engine, with a focus on + portability and compact footprint. + + Duktape is easy to integrate into a C/C++ project: add + duktape.c, duktape.h, and duk_config.h to your build, and use + the Duktape API to call Ecmascript functions from C code and + vice versa. + + http://www.duktape.org + +comment "duktape needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/duktape/duktape.hash b/package/duktape/duktape.hash new file mode 100644 index 00000000..4c55e398 --- /dev/null +++ b/package/duktape/duktape.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 96f4a05a6c84590e53b18c59bb776aaba80a205afbbd92b82be609ba7fe75fa7 duktape-2.6.0.tar.xz +sha256 5b42d02dbd084fd6d7e61d93f52e02b596f25400e54e0f86d5780045e5b754c8 LICENSE.txt diff --git a/package/duktape/duktape.mk b/package/duktape/duktape.mk new file mode 100644 index 00000000..aadd6092 --- /dev/null +++ b/package/duktape/duktape.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# duktape +# +################################################################################ + +DUKTAPE_VERSION = 2.6.0 +DUKTAPE_SOURCE = duktape-$(DUKTAPE_VERSION).tar.xz +DUKTAPE_SITE = \ + https://github.com/svaarala/duktape/releases/download/v$(DUKTAPE_VERSION) +DUKTAPE_LICENSE = MIT +DUKTAPE_LICENSE_FILES = LICENSE.txt +DUKTAPE_INSTALL_STAGING = YES + +define DUKTAPE_BUILD_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) -f Makefile.sharedlibrary +endef + +define DUKTAPE_INSTALL_STAGING_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) -f Makefile.sharedlibrary \ + INSTALL_PREFIX=$(STAGING_DIR)/usr install +endef + +define DUKTAPE_INSTALL_TARGET_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) -f Makefile.sharedlibrary \ + INSTALL_PREFIX=$(TARGET_DIR)/usr install +endef + +$(eval $(generic-package)) diff --git a/package/duma/0001-fix-cross-compilation.patch b/package/duma/0001-fix-cross-compilation.patch new file mode 100644 index 00000000..eceaf06b --- /dev/null +++ b/package/duma/0001-fix-cross-compilation.patch @@ -0,0 +1,37 @@ +Allow cross compilation. Adapted from crosstool-ng. + +Signed-off-by: Baruch Siach + +Index: b/GNUmakefile +=================================================================== +--- a/GNUmakefile ++++ b/GNUmakefile +@@ -93,10 +93,6 @@ + # also define 'WIN32' + + # some defaults: +-CC=gcc +-CXX=g++ +-AR=ar +-RANLIB=ranlib + INSTALL=install + RM=rm + RMFORCE=rm -f +@@ -471,7 +467,7 @@ + + createconf$(EXEPOSTFIX): createconf.o + - $(RMFORCE) createconf$(EXEPOSTFIX) +- $(CC) $(CFLAGS) $(DUMA_OPTIONS) createconf.o -o createconf$(EXEPOSTFIX) ++ $(CC_FOR_BUILD) $(HOST_CFLAGS) $(DUMA_OPTIONS) createconf.o -o createconf$(EXEPOSTFIX) + + tstheap$(EXEPOSTFIX): libduma.a tstheap.o + - $(RMFORCE) tstheap$(EXEPOSTFIX) +@@ -532,7 +528,7 @@ + # define rules how to build objects for createconf + # + createconf.o: +- $(CC) $(CFLAGS) $(DUMA_OPTIONS) -c createconf.c -o $@ ++ $(CC_FOR_BUILD) $(HOST_CFLAGS) $(DUMA_OPTIONS) -c createconf.c -o $@ + + + # diff --git a/package/duma/0002-no-tests.patch b/package/duma/0002-no-tests.patch new file mode 100644 index 00000000..6fe76f72 --- /dev/null +++ b/package/duma/0002-no-tests.patch @@ -0,0 +1,19 @@ +Do not build test programs + +Biulding test programs does not work when we want to do a static link, +because duma.a redefines memcpy and strcpy, so the link fails. + +Signed-off-by: "Yann E. MORIN" + +diff -durN duma-2.5.15.orig/GNUmakefile duma-2.5.15/GNUmakefile +--- duma-2.5.15.orig/GNUmakefile 2014-11-16 14:47:05.874448560 +0100 ++++ duma-2.5.15/GNUmakefile 2014-11-16 14:54:50.792048921 +0100 +@@ -294,7 +294,7 @@ + SO_OBJECTS=dumapp_so.o duma_so.o sem_inc_so.o print_so.o + + # Make all the top-level targets the makefile knows about. +-all: libduma.a tstheap$(EXEPOSTFIX) dumatest$(EXEPOSTFIX) thread-test$(EXEPOSTFIX) testmt$(EXEPOSTFIX) dumatestpp$(EXEPOSTFIX) testoperators$(EXEPOSTFIX) $(DUMA_DYN_DEPS) ++all: libduma.a $(DUMA_DYN_DEPS) + + # Perform self tests on the program this makefile builds. + check test: diff --git a/package/duma/0003-fix-C++14.patch b/package/duma/0003-fix-C++14.patch new file mode 100644 index 00000000..d19213ca --- /dev/null +++ b/package/duma/0003-fix-C++14.patch @@ -0,0 +1,65 @@ +dumapp: fix for C++14 + +With C++14, the way exceptions are specified has changed (somehow, don't +ask me), thus causing build failures: + + dumapp.cpp: In function ‘void* operator new(std::size_t)’: + dumapp.cpp:192:19: error: declaration of ‘void* operator new(std::size_t) throw (std::bad_alloc)’ has a different exception specifier + void * DUMA_CDECL operator new( DUMA_SIZE_T size ) + ^~~~~~~~ + In file included from dumapp.cpp:39:0: + dumapp.h:91:23: note: from previous declaration ‘void* operator new(std::size_t)’ + void * DUMA_CDECL operator new(DUMA_SIZE_T) throw(std::bad_alloc); + ^~~~~~~~ + +This is most evident with gcc-6.x, since the default C++ standard has +changed from C++11 to C++14, thus exposing these new failures. + +Fix that by guarding the exception handling, a bit like was done +with GRASS GIS (thanks DuckDuckGo): + + https://trac.osgeo.org/grass/changeset?old_path=%2F&old=68817&new_path=%2F&new=68818&sfp_email=&sfph_mail= + +Signed-off-by: "Yann E. MORIN" + +--- +Note: The last commit in DUMA's CVS repo was more than 7 years ago. +I doubt it is still active, so the patch was not sent upstream. :-/ + +diff -durN duma-2.5.15.orig/dumapp.cpp duma-2.5.15/dumapp.cpp +--- duma-2.5.15.orig/dumapp.cpp 2008-08-03 22:46:06.000000000 +0200 ++++ duma-2.5.15/dumapp.cpp 2016-07-10 21:55:22.670386099 +0200 +@@ -190,7 +190,9 @@ + * (11) = (a) ; ASW + */ + void * DUMA_CDECL operator new( DUMA_SIZE_T size ) ++#ifdef DUMA_EXCEPTION_SPECS + throw(std::bad_alloc) ++#endif + { + return duma_new_operator(size, EFA_NEW_ELEM, true DUMA_PARAMS_UK); + } +@@ -254,7 +256,9 @@ + * (21) = (a) ; AAW + */ + void * DUMA_CDECL operator new[]( DUMA_SIZE_T size ) ++#ifdef DUMA_EXCEPTION_SPECS + throw(std::bad_alloc) ++#endif + { + return duma_new_operator(size, EFA_NEW_ARRAY, true DUMA_PARAMS_UK); + } +diff -durN duma-2.5.15.orig/dumapp.h duma-2.5.15/dumapp.h +--- duma-2.5.15.orig/dumapp.h 2009-04-11 14:41:44.000000000 +0200 ++++ duma-2.5.15/dumapp.h 2016-07-10 21:55:22.670386099 +0200 +@@ -35,6 +35,10 @@ + + #include "duma.h" + ++#if __cplusplus < 201103L ++ #define DUMA_EXCEPTION_SPECS 1 ++#endif ++ + /* remove previous macro definitions */ + #include "noduma.h" + diff --git a/package/duma/0004-Fix-build-with-latest-glibc.patch b/package/duma/0004-Fix-build-with-latest-glibc.patch new file mode 100644 index 00000000..2d73d7ae --- /dev/null +++ b/package/duma/0004-Fix-build-with-latest-glibc.patch @@ -0,0 +1,22 @@ +Fix build with latest glibc + +Fixes: + - http://autobuild.buildroot.net/results/c7de1a1d01edced2098a804ad87dcb67b5dc6832 + +Signed-off-by: Fabrice Fontaine + +diff -durN duma_2_5_15.orig/print.c duma_2_5_15/print.c +--- duma_2_5_15.orig/print.c 2019-10-28 10:21:14.080149620 +0100 ++++ duma_2_5_15/print.c 2019-10-28 10:22:01.256151561 +0100 +@@ -326,9 +326,9 @@ + if(DUMA_OUTPUT_FILE != NULL) + { + #if defined(WIN32) && !defined(__CYGWIN__) +- fd = _open(DUMA_OUTPUT_FILE, _O_APPEND|_O_CREAT|_O_WRONLY); ++ fd = _open(DUMA_OUTPUT_FILE, _O_APPEND|_O_CREAT|_O_WRONLY, 0600); + #else +- fd = open(DUMA_OUTPUT_FILE, O_APPEND|O_CREAT|O_WRONLY); ++ fd = open(DUMA_OUTPUT_FILE, O_APPEND|O_CREAT|O_WRONLY, 0600); + #endif + if ( fd >= 0 ) + { diff --git a/package/duma/Config.in b/package/duma/Config.in new file mode 100644 index 00000000..b1f55faa --- /dev/null +++ b/package/duma/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_DUMA + bool "duma" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + # By design, duma uses page mapping to isolate + # allocations. Non-MMU platforms cannot perform such + # things. + depends on BR2_USE_MMU + # duma works using LD_PRELOAD, so it always needs to build a + # shared library + depends on !BR2_STATIC_LIBS + help + D.U.M.A. - Detect Unintended Memory Access. A fork of the + Electric Fence library. Detects buffer overflow and + underflow, and also memory leaks. + + http://duma.sourceforge.net + +if BR2_PACKAGE_DUMA + +config BR2_PACKAGE_DUMA_NO_LEAKDETECTION + bool "disable memory leak detection" + +endif # BR2_PACKAGE_DUMA + +comment "duma needs a toolchain w/ C++, threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS diff --git a/package/duma/duma.hash b/package/duma/duma.hash new file mode 100644 index 00000000..ccf171a9 --- /dev/null +++ b/package/duma/duma.hash @@ -0,0 +1,4 @@ +# Locally computed: +sha256 baaf794854e3093ad1bddadbfb8ad4b220a7117d70359ee216bd59e353734e17 duma_2_5_15.tar.gz +sha256 91df39d1816bfb17a4dda2d3d2c83b1f6f2d38d53e53e41e8f97ad5ac46a0cad COPYING-GPL +sha256 a190dc9c8043755d90f8b0a75fa66b9e42d4af4c980bf5ddc633f0124db3cee7 COPYING-LGPL diff --git a/package/duma/duma.mk b/package/duma/duma.mk new file mode 100644 index 00000000..0e8a623b --- /dev/null +++ b/package/duma/duma.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# duma +# +################################################################################ + +DUMA_VERSION = 2.5.15 +DUMA_SOURCE = duma_$(subst .,_,$(DUMA_VERSION)).tar.gz +DUMA_SITE = http://downloads.sourceforge.net/project/duma/duma/$(DUMA_VERSION) +DUMA_LICENSE = GPL-2.0+, LGPL-2.1+ +DUMA_LICENSE_FILES = COPYING-GPL COPYING-LGPL + +DUMA_INSTALL_STAGING = YES + +DUMA_OPTIONS = \ + $(if $(BR2_PACKAGE_DUMA_NO_LEAKDETECTION),-DDUMA_LIB_NO_LEAKDETECTION) + +# The dependency of some source files in duma_config.h, which is generated at +# build time, is not specified in the Makefile. Force non-parallel build. +define DUMA_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) $(TARGET_CONFIGURE_OPTS) \ + OS=linux \ + DUMA_OPTIONS="$(DUMA_OPTIONS)" \ + $(DUMA_CPP) -C $(@D) +endef + +define DUMA_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) OS=linux prefix=$(STAGING_DIR)/usr install -C $(@D) +endef + +define DUMA_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) OS=linux prefix=$(TARGET_DIR)/usr install -C $(@D) +endef + +$(eval $(generic-package)) diff --git a/package/dump1090/0001-dump1090.h-fix-build-with-gcc-10.patch b/package/dump1090/0001-dump1090.h-fix-build-with-gcc-10.patch new file mode 100644 index 00000000..eeda03bc --- /dev/null +++ b/package/dump1090/0001-dump1090.h-fix-build-with-gcc-10.patch @@ -0,0 +1,72 @@ +From 02153cb0b2d1083dcd587798d9ef7ce963739622 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Wed, 19 Aug 2020 18:46:17 +0200 +Subject: [PATCH] dump1090.h: fix build with gcc 10 + +Fix the following build failures on gcc 10 (where -fno-common is enabled +by default): + +/home/test/autobuild/run/instance-0/output-1/per-package/dump1090/host/bin/../lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: interactive.o:/home/test/autobuild/run/instance-0/output-1/build/dump1090-bff92c4ad772a0a8d433f788d39dae97e00e4dbe/dump1090.h:373: multiple definition of `Modes'; /home/test/autobuild/run/instance-0/output-1/per-package/dump1090/host/bin/../lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: interactive.o:/home/test/autobuild/run/instance-0/output-1/build/dump1090-bff92c4ad772a0a8d433f788d39dae97e00e4dbe/dump1090.h:373: multiple definition of `Modes'; dump1090.o:/home/test/autobuild/run/instance-0/output-1/build/dump1090-bff92c4ad772a0a8d433f788d39dae97e00e4dbe/dump1090.h:373: first defined here + +/home/test/autobuild/run/instance-0/output-1/per-package/dump1090/host/bin/../lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: interactive.o:/home/test/autobuild/run/instance-0/output-1/build/dump1090-bff92c4ad772a0a8d433f788d39dae97e00e4dbe/dump1090.h:238: multiple definition of `tDF'; dump1090.o:/home/test/autobuild/run/instance-0/output-1/build/dump1090-bff92c4ad772a0a8d433f788d39dae97e00e4dbe/dump1090.h:238: first defined here +/home/test/autobuild/run/instance-0/output-1/per-package/dump1090/host/bin/../lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: view1090.o:/home/test/autobuild/run/instance-0/output-1/build/dump1090-bff92c4ad772a0a8d433f788d39dae97e00e4dbe/dump1090.h:373: first defined here + +Fixes: + - http://autobuild.buildroot.org/results/88dc97fcaa649014edb3b54a5dd4bd8ec4715bbd + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/MalcolmRobb/dump1090/pull/96] +--- + dump1090.c | 3 +++ + dump1090.h | 4 ++-- + view1090.c | 3 +++ + 3 files changed, 8 insertions(+), 2 deletions(-) + +diff --git a/dump1090.c b/dump1090.c +index 60882fc..1482224 100644 +--- a/dump1090.c ++++ b/dump1090.c +@@ -29,6 +29,9 @@ + // + #include "coaa.h" + #include "dump1090.h" ++ ++struct modes Modes; ++ + // + // ============================= Utility functions ========================== + // +diff --git a/dump1090.h b/dump1090.h +index 9ad4de0..283e760 100644 +--- a/dump1090.h ++++ b/dump1090.h +@@ -235,10 +235,10 @@ struct stDF { + uint64_t llTimestamp; // Timestamp at which the this packet was received + uint32_t addr; // Timestamp at which the this packet was received + unsigned char msg[MODES_LONG_MSG_BYTES]; // the binary +-} tDF; ++}; + + // Program global state +-struct { // Internal state ++extern struct modes { // Internal state + pthread_t reader_thread; + + pthread_mutex_t data_mutex; // Mutex to synchronize buffer access +diff --git a/view1090.c b/view1090.c +index 0b9b8b9..cc072fc 100644 +--- a/view1090.c ++++ b/view1090.c +@@ -29,6 +29,9 @@ + // + #include "coaa.h" + #include "view1090.h" ++ ++struct modes Modes; ++ + // + // ============================= Utility functions ========================== + // +-- +2.27.0 + diff --git a/package/dump1090/Config.in b/package/dump1090/Config.in new file mode 100644 index 00000000..8f179292 --- /dev/null +++ b/package/dump1090/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_DUMP1090 + bool "dump1090" + depends on BR2_TOOLCHAIN_HAS_THREADS # librtlsdr + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # librtlsdr -> libusb + select BR2_PACKAGE_LIBRTLSDR + help + Dump1090 is a simple Mode S decoder for RTLSDR devices + + https://github.com/MalcolmRobb/dump1090 + +comment "dump1090 needs a toolchain w/ threads, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/dump1090/dump1090.hash b/package/dump1090/dump1090.hash new file mode 100644 index 00000000..fbbf21a0 --- /dev/null +++ b/package/dump1090/dump1090.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 72c1a94f3e6788af1e72b8cac13bb53e0989fe02cd13e191133f5519d2a2fefb dump1090-bff92c4ad772a0a8d433f788d39dae97e00e4dbe.tar.gz +sha256 29046ef7ee0b7b127bcc64faf135035820906dea2b379b2efcfc119131a39f7a anet.h diff --git a/package/dump1090/dump1090.mk b/package/dump1090/dump1090.mk new file mode 100644 index 00000000..69fd6794 --- /dev/null +++ b/package/dump1090/dump1090.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# dump1090 +# +################################################################################ + +DUMP1090_VERSION = bff92c4ad772a0a8d433f788d39dae97e00e4dbe +DUMP1090_SITE = $(call github,MalcolmRobb,dump1090,$(DUMP1090_VERSION)) +DUMP1090_LICENSE = BSD-3-Clause +# no real license file +DUMP1090_LICENSE_FILES = anet.h +DUMP1090_DEPENDENCIES = host-pkgconf librtlsdr + +define DUMP1090_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) PREFIX=/usr -C $(@D) +endef + +define DUMP1090_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/dump1090 $(TARGET_DIR)/usr/bin/dump1090 + $(INSTALL) -m 0755 -D $(@D)/view1090 $(TARGET_DIR)/usr/bin/view1090 + $(INSTALL) -d $(TARGET_DIR)/usr/share/dump1090 + cp -r $(@D)/public_html/* $(TARGET_DIR)/usr/share/dump1090 +endef + +$(eval $(generic-package)) diff --git a/package/dvb-apps/0001-Fix-generate-keynames.patch b/package/dvb-apps/0001-Fix-generate-keynames.patch new file mode 100644 index 00000000..498607d9 --- /dev/null +++ b/package/dvb-apps/0001-Fix-generate-keynames.patch @@ -0,0 +1,30 @@ +Fix generate-keynames.sh script for cross-compilation + +generate-keynames.sh reads /usr/include/linux to find the keyname +symbols. However, when cross-compiling, the include path points +somewhere else. Allow the user to pass CROSS_ROOT to point to the +root of the cross-compilation environment. + +Signed-off-by: Arnout Vandecappelle (Essensium/Mind) +--- +diff -rup dvb-apps-83c746462ccb.orig/util/av7110_loadkeys/generate-keynames.sh dvb-apps-83c746462ccb/util/av7110_loadkeys/generate-keynames.sh +--- dvb-apps-83c746462ccb.orig/util/av7110_loadkeys/generate-keynames.sh 2012-12-06 10:38:07.000000000 +0100 ++++ dvb-apps-83c746462ccb/util/av7110_loadkeys/generate-keynames.sh 2013-08-29 21:47:09.717991439 +0200 +@@ -18,7 +18,7 @@ echo "};" >> $1 + echo >> $1 + echo >> $1 + echo "static struct input_key_name key_name [] = {" >> $1 +-for x in $(cat /usr/include/linux/input.h input_fake.h | \ ++for x in $(cat ${CROSS_ROOT}/usr/include/linux/input.h input_fake.h | \ + egrep "#define[ \t]+KEY_" | grep -v KEY_MAX | \ + cut -f 1 | cut -f 2 -d " " | sort -u) ; do + echo " { \"$(echo $x | cut -b 5-)\", $x }," >> $1 +@@ -26,7 +26,7 @@ done + echo "};" >> $1 + echo >> $1 + echo "static struct input_key_name btn_name [] = {" >> $1 +-for x in $(cat /usr/include/linux/input.h input_fake.h | \ ++for x in $(cat ${CROSS_ROOT}/usr/include/linux/input.h input_fake.h | \ + egrep "#define[ \t]+BTN_" | \ + cut -f 1 | cut -f 2 -d " " | sort -u) ; do + echo " { \"$(echo $x | cut -b 5-)\", $x }," >> $1 diff --git a/package/dvb-apps/0002-Fix-compiler-warning-flags.patch b/package/dvb-apps/0002-Fix-compiler-warning-flags.patch new file mode 100644 index 00000000..9c6276be --- /dev/null +++ b/package/dvb-apps/0002-Fix-compiler-warning-flags.patch @@ -0,0 +1,44 @@ +From 9b8f1df41f7579da63c27763ff184d351e4c7fef Mon Sep 17 00:00:00 2001 +From: Simon Dawson +Date: Sun, 4 Jan 2015 12:06:18 +0100 +Subject: [PATCH] Fix compiler warning flags + + When building for bfin, the build fails as follows. + + cc1: error: unrecognized command line option "-Wno-packed-bitfield-compat" + +An example of an autobuild failure arising from this is the following. + + http://autobuild.buildroot.net/results/92e/92e472004812a3616f62d766a9ea07a997a66e89/ + http://autobuild.buildroot.net/results/6e7/6e7b48ad9768349d983985c3067c4267cde80541/ + +Clearly, not all toolchains provide a gcc that understands +the -Wno-packed-bitfield-compat flag; remove usage of this flag. + +Wno-packed-bitfield-compat option was added in gcc 4.4. + +[Romain: + - This patch is also needed for bfin toolchains which use gcc 4.3.5 + - Add a link to bfin build failure] +Signed-off-by: Simon Dawson +Signed-off-by: Romain Naour +--- + util/scan/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/util/scan/Makefile b/util/scan/Makefile +index d48c478..88667c5 100644 +--- a/util/scan/Makefile ++++ b/util/scan/Makefile +@@ -14,7 +14,7 @@ inst_bin = $(binaries) + + removing = atsc_psip_section.c atsc_psip_section.h + +-CPPFLAGS += -Wno-packed-bitfield-compat -D__KERNEL_STRICT_NAMES ++CPPFLAGS += -D__KERNEL_STRICT_NAMES + + .PHONY: all + +-- +1.9.3 + diff --git a/package/dvb-apps/0003-handle-static-shared-only-build.patch b/package/dvb-apps/0003-handle-static-shared-only-build.patch new file mode 100644 index 00000000..4dc7c68a --- /dev/null +++ b/package/dvb-apps/0003-handle-static-shared-only-build.patch @@ -0,0 +1,44 @@ +From a826c7c722db40bfedf00e51ce38411550ae8216 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Thu, 25 Dec 2014 19:22:16 +0100 +Subject: [PATCH] Make.rules: Handle static/shared only build + +Do not build .a library when enable_static is set to "no" +Do not build .so library when enable_shared is set to "no" + +Signed-off-by: Romain Naour +--- + Make.rules | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/Make.rules b/Make.rules +index 3410d7b..d274e16 100644 +--- a/Make.rules ++++ b/Make.rules +@@ -9,7 +9,13 @@ ifneq ($(lib_name),) + CFLAGS_LIB ?= -fPIC + CFLAGS += $(CFLAGS_LIB) + +-libraries = $(lib_name).so $(lib_name).a ++ifneq ($(enable_static),no) ++libraries += $(lib_name).a ++endif ++ ++ifneq ($(enable_shared),no) ++libraries += $(lib_name).so ++endif + + .PHONY: library + +@@ -23,7 +29,7 @@ prerequisites = $(subst .o,.d,$(objects)) $(addsuffix .d,$(binaries)) + + .PHONY: clean install + +-ifeq ($(static),1) ++ifneq ($(enable_static),no) + LDFLAGS += -static + endif + +-- +1.9.3 + diff --git a/package/dvb-apps/0004-Makefile-remove-test.patch b/package/dvb-apps/0004-Makefile-remove-test.patch new file mode 100644 index 00000000..45bfad91 --- /dev/null +++ b/package/dvb-apps/0004-Makefile-remove-test.patch @@ -0,0 +1,27 @@ +From c578772d6abc5fdf3ec83f632c371373e5baf9f1 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Fri, 26 Dec 2014 01:04:58 +0100 +Subject: [PATCH] Makefile: remove test + +Tests needs static libraries, remove them for shared only build. + +Signed-off-by: Romain Naour +--- + Makefile | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/Makefile b/Makefile +index 65a2273..105c460 100644 +--- a/Makefile ++++ b/Makefile +@@ -10,7 +10,6 @@ DVB_API_MINOR := $(word 3, $(shell grep -m1 "DVB_API_VERSION_MINOR" $(VERSION_FI + + all clean install: + $(MAKE) -C lib $@ +- $(MAKE) -C test $@ + $(MAKE) -C util $@ + + update: +-- +1.9.3 + diff --git a/package/dvb-apps/0005-utils-fix-build-with-kernel-headers-4.14.patch b/package/dvb-apps/0005-utils-fix-build-with-kernel-headers-4.14.patch new file mode 100644 index 00000000..279cdecb --- /dev/null +++ b/package/dvb-apps/0005-utils-fix-build-with-kernel-headers-4.14.patch @@ -0,0 +1,52 @@ +# HG changeset patch +# User "Yann E. MORIN" +# Date 1511772629 -3600 +# Mon Nov 27 09:50:29 2017 +0100 +# Branch yem/fixes +# Node ID 0848fa96c6eb13cf37249d317eff12cbd2f59ff7 +# Parent 3d43b280298c39a67d1d889e01e173f52c12da35 +utils: fix build with kernel headers >= 4.14 + +In kernel 4.14, CA_SET_PID was removed, in commit 833ff5e7feda (media: +ca.h: get rid of CA_SET_PID). + +Fix dst-util to not fail the build when this is missing. + +Fiuxes build failures such as: + http://autobuild.buildroot.org/results/708/708f11809b2cafc2a3375dc515803c87b376ed4d/build-end.log + http://autobuild.buildroot.org/results/e39/e3939d44376e92e8a35fb179d9890510334d8304/build-end.log + +Signed-off-by: "Yann E. MORIN" + +diff --git a/util/dst-utils/dst_test.c b/util/dst-utils/dst_test.c +--- a/util/dst-utils/dst_test.c ++++ b/util/dst-utils/dst_test.c +@@ -111,6 +111,7 @@ + return 0; + } + ++#if defined CA_SET_PID + static int dst_set_pid(int cafd) + { + if ((ioctl(cafd, CA_SET_PID)) < 0) { +@@ -120,6 +121,7 @@ + + return 0; + } ++#endif + + static int dst_get_descr(int cafd) + { +@@ -230,8 +232,12 @@ + dst_reset(cafd); + break; + case 'p': ++#if defined CA_SET_PID + printf("%s: PID\n", __FUNCTION__); + dst_set_pid(cafd); ++#else ++ printf("%s: PID not supported\n", __FUNCTION__); ++#endif + break; + case 'g': + printf("%s: Get Desc\n", __FUNCTION__); diff --git a/package/dvb-apps/0006-fix-glibc-2.31.patch b/package/dvb-apps/0006-fix-glibc-2.31.patch new file mode 100644 index 00000000..079a24f1 --- /dev/null +++ b/package/dvb-apps/0006-fix-glibc-2.31.patch @@ -0,0 +1,21 @@ +dvbdate: fix compilation error with glibc 2.31 + +as stime func doesn't exists anymore in newer versions of glibc >= 2.31 due +to obseletion, a replacment with clock_settime is inorder to fix the issue. + +Signed-off-by: Dagg Stompler + +--- a/util/dvbdate/dvbdate.c ++++ b/util/dvbdate/dvbdate.c +@@ -309,7 +309,10 @@ + */ + int set_time(time_t * new_time) + { +- if (stime(new_time)) { ++ struct timespec s = {0}; ++ s.tv_sec = new_time; ++ ++ if (clock_settime(CLOCK_REALTIME, &s)) { + perror("Unable to set time"); + return -1; + } diff --git a/package/dvb-apps/Config.in b/package/dvb-apps/Config.in new file mode 100644 index 00000000..75cc14eb --- /dev/null +++ b/package/dvb-apps/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_DVB_APPS + bool "dvb-apps" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3 + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + Install a small number of DVB test and utility programs, + including szap and dvbscan. + + http://linuxtv.org/projects.php + http://linuxtv.org/hg/dvb-apps + +comment "dvb-apps utils needs a toolchain w/ threads, headers >= 3.3" + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3 diff --git a/package/dvb-apps/dvb-apps.hash b/package/dvb-apps/dvb-apps.hash new file mode 100644 index 00000000..d394ced1 --- /dev/null +++ b/package/dvb-apps/dvb-apps.hash @@ -0,0 +1,6 @@ +# Locally computed: +sha256 926208b7e711b4bab1a909ff9bf4e6ae54acdd30a46f5d5bd700ecb088fe1f57 dvb-apps-3d43b280298c39a67d1d889e01e173f52c12da35.tar.gz + +# Hash for license files: +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING +sha256 4fd46f32582c29007657e2daad8d0a6d954cf4e9d2e47bae8f8d8c32765fc987 COPYING.LGPL diff --git a/package/dvb-apps/dvb-apps.mk b/package/dvb-apps/dvb-apps.mk new file mode 100644 index 00000000..ffab0db6 --- /dev/null +++ b/package/dvb-apps/dvb-apps.mk @@ -0,0 +1,44 @@ +################################################################################ +# +# dvb-apps +# +################################################################################ + +DVB_APPS_VERSION = 3d43b280298c39a67d1d889e01e173f52c12da35 +DVB_APPS_SITE = http://linuxtv.org/hg/dvb-apps +DVB_APPS_SITE_METHOD = hg +DVB_APPS_LICENSE = GPL-2.0, GPL-2.0+, LGPL-2.1+ +DVB_APPS_LICENSE_FILES = COPYING COPYING.LGPL + +ifeq ($(BR2_ENABLE_LOCALE),) +DVB_APPS_DEPENDENCIES = libiconv +DVB_APPS_LDLIBS += -liconv +endif + +DVB_APPS_MAKE_OPTS = PERL5LIB=$(@D)/util/scan + +ifeq ($(BR2_STATIC_LIBS),y) +DVB_APPS_MAKE_OPTS += enable_shared=no +else ifeq ($(BR2_SHARED_LIBS),y) +DVB_APPS_MAKE_OPTS += enable_static=no +endif + +DVB_APPS_INSTALL_STAGING = YES + +define DVB_APPS_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) LDLIBS="$(DVB_APPS_LDLIBS)" \ + $(MAKE1) -C $(@D) CROSS_ROOT=$(STAGING_DIR) \ + $(DVB_APPS_MAKE_OPTS) +endef + +define DVB_APPS_INSTALL_STAGING_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + $(DVB_APPS_MAKE_OPTS) DESTDIR=$(STAGING_DIR) install +endef + +define DVB_APPS_INSTALL_TARGET_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + $(DVB_APPS_MAKE_OPTS) DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/dvblast/0001-missing-lm.patch b/package/dvblast/0001-missing-lm.patch new file mode 100644 index 00000000..2efbec46 --- /dev/null +++ b/package/dvblast/0001-missing-lm.patch @@ -0,0 +1,29 @@ +dvblast: fix static linking + +dvblast links to -lev, wihch uses functions from the maths library, +like floor(). + +When linking to a shared libev.so, that dependency is automatically +pulled in because libev as a DT_NEEDED ELF tag on libm.so. + +But when lnking to the static libev.a, since there is no way to express +such dependencies in static libraries, libm is not pulled in, which +leads to build failures such as; + http://autobuild.buildroot.org/results/1f0/1f02f84fb926839a1adbe3af457bb909fdc44433/build-end.log + +Fix that by always linking to -lm (which must come *after* -lev). + +Signed-off-by: "Yann E. MORIN" + +diff -durN dvblast-3.0.orig/Makefile dvblast-3.0/Makefile +--- dvblast-3.0.orig/Makefile 2015-10-05 17:51:14.000000000 +0200 ++++ dvblast-3.0/Makefile 2015-10-30 15:57:19.547123894 +0100 +@@ -28,7 +28,7 @@ + LDLIBS += -lstreammaster + endif + +-LDLIBS_DVBLAST += -lpthread -lev ++LDLIBS_DVBLAST += -lpthread -lev -lm + + OBJ_DVBLAST = dvblast.o util.o dvb.o udp.o asi.o demux.o output.o en50221.o comm.o mrtg-cnt.o asi-deltacast.o + OBJ_DVBLASTCTL = util.o dvblastctl.o diff --git a/package/dvblast/0002-fix-int-types.patch b/package/dvblast/0002-fix-int-types.patch new file mode 100644 index 00000000..d741cc6c --- /dev/null +++ b/package/dvblast/0002-fix-int-types.patch @@ -0,0 +1,24 @@ +Standard integer types are uintXX_t not u_intXX_t + +This fixes the build with the musl C library. + +Signed-off-by: "Yann E. MORIN" + +diff -durN dvblast-3.0.orig/dvblast.h dvblast-3.0/dvblast.h +--- dvblast-3.0.orig/dvblast.h 2015-10-05 17:51:14.000000000 +0200 ++++ dvblast-3.0/dvblast.h 2015-10-30 16:29:25.586125193 +0100 +@@ -49,10 +49,10 @@ + * Raw udp packet structure with flexible-array payload + *****************************************************************************/ + struct udpheader { // FAVOR_BSD hell ... +- u_int16_t source; +- u_int16_t dest; +- u_int16_t len; +- u_int16_t check; ++ uint16_t source; ++ uint16_t dest; ++ uint16_t len; ++ uint16_t check; + }; + + #if defined(__FreeBSD__) || defined(__APPLE__) diff --git a/package/dvblast/Config.in b/package/dvblast/Config.in new file mode 100644 index 00000000..973eee88 --- /dev/null +++ b/package/dvblast/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_DVBLAST + bool "dvblast" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_BITSTREAM + select BR2_PACKAGE_LIBEV + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + DVBlast is a simple and powerful MPEG-2/TS demux and + streaming application. + + http://www.videolan.org/projects/dvblast.html + +comment "dvblast needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/dvblast/dvblast.hash b/package/dvblast/dvblast.hash new file mode 100644 index 00000000..b32668fa --- /dev/null +++ b/package/dvblast/dvblast.hash @@ -0,0 +1,7 @@ +# From https://get.videolan.org/dvblast/3.4/dvblast-3.4.tar.bz2.md5 +md5 148a26e1207e111f905461cfb1cd106a dvblast-3.4.tar.bz2 +# From https://get.videolan.org/dvblast/3.4/dvblast-3.4.tar.bz2.sha256 +sha256 7abd45aff738544017350af87ec7ebad00fcfb4e4effd04f35023d504d9b6f44 dvblast-3.4.tar.bz2 +# Locally computed +sha256 94f68aec169fb6c9937eade757251714d38a56812be5dbfc3973914a71ad8d2d COPYING +sha256 2c1bea2f338d46ee6f2712f2c2bf05b874327ca0bec5eb0b7b4fbe208a23677f COPYING.WTFPL diff --git a/package/dvblast/dvblast.mk b/package/dvblast/dvblast.mk new file mode 100644 index 00000000..3571ff3c --- /dev/null +++ b/package/dvblast/dvblast.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# dvblast +# +################################################################################ + +DVBLAST_VERSION = 3.4 +DVBLAST_SOURCE = dvblast-$(DVBLAST_VERSION).tar.bz2 +DVBLAST_SITE = https://get.videolan.org/dvblast/$(DVBLAST_VERSION) +DVBLAST_LICENSE = GPL-2.0+, WTFPL +DVBLAST_LICENSE_FILES = COPYING COPYING.WTFPL +DVBLAST_DEPENDENCIES = bitstream libev + +DVBLAST_MAKE_ENV = $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) + +ifeq ($(BR2_PACKAGE_LIBICONV),y) +DVBLAST_DEPENDENCIES += libiconv +DVBLAST_MAKE_ENV += LDLIBS=-liconv +endif + +define DVBLAST_BUILD_CMDS + $(DVBLAST_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define DVBLAST_INSTALL_TARGET_CMDS + $(DVBLAST_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) PREFIX=/usr install +endef + +$(eval $(generic-package)) diff --git a/package/dvbsnoop/0001-musl-types-h.patch b/package/dvbsnoop/0001-musl-types-h.patch new file mode 100644 index 00000000..1149df0d --- /dev/null +++ b/package/dvbsnoop/0001-musl-types-h.patch @@ -0,0 +1,15 @@ +Fix musl build + +Signed-off-by: Bernd Kuhls + +diff -uNr dvbsnoop-1.4.50.org/src/misc/helper.h dvbsnoop-1.4.50/src/misc/helper.h +--- dvbsnoop-1.4.50.org/src/misc/helper.h 2006-01-02 20:04:56.000000000 +0100 ++++ dvbsnoop-1.4.50/src/misc/helper.h 2016-01-24 14:35:02.000000000 +0100 +@@ -16,6 +16,7 @@ + #ifndef __HELPER_H + #define __HELPER_H + ++#include + + u_long outBit_Sx (int verbosity, const char *text, u_char *buf, int startbit, int bitlen); + u_long outBit_Sx_NL (int verbosity, const char *text, u_char *buf, int startbit, int bitlen); diff --git a/package/dvbsnoop/Config.in b/package/dvbsnoop/Config.in new file mode 100644 index 00000000..fb63fa4e --- /dev/null +++ b/package/dvbsnoop/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_DVBSNOOP + bool "dvbsnoop" + help + Dvbsnoop is just a simple tool to analyze, view or debug a + transport stream (TS), program elementary stream (PES) or even + a program stream (PS). Dvbsnoop is trying to get input mostly + direct from a frontend (satellite or cable tuner inside a + set-top box for example) via DVB APIv3 to view into a TS, or a + demux to view PES or PS (also mostly inside the set-top box or + even PCI Card or USB Plug) but also from a file (recorded TS). + Dvbsnoop is working well on SD transport streams but may have + some limited functionality on HD transport streams + (DVB-{C,S,T}2 because of missing knowledge how to handle it. + + Dvbsnoop itself doesn't do the tuning on the frontend, this + has to be done by external helpers or manually driver call. + The dvbsnoop tool was written while developing the software + Neutrino on the set-top box DBox2. + + http://dvbsnoop.sourceforge.net + http://en.wikipedia.org/wiki/DBox2 diff --git a/package/dvbsnoop/dvbsnoop.hash b/package/dvbsnoop/dvbsnoop.hash new file mode 100644 index 00000000..0d88afe1 --- /dev/null +++ b/package/dvbsnoop/dvbsnoop.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 7658498b26a5d2a0242e81f0cfafa0e43a2bec56f8674e7ac197dfc310866ec6 dvbsnoop-1.4.50.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/dvbsnoop/dvbsnoop.mk b/package/dvbsnoop/dvbsnoop.mk new file mode 100644 index 00000000..fdc483d2 --- /dev/null +++ b/package/dvbsnoop/dvbsnoop.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# dvbsnoop +# +################################################################################ + +DVBSNOOP_VERSION = 1.4.50 +DVBSNOOP_SITE = http://downloads.sourceforge.net/project/dvbsnoop/dvbsnoop/dvbsnoop-$(DVBSNOOP_VERSION) +DVBSNOOP_LICENSE = GPL-2.0 +DVBSNOOP_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/dvdauthor/Config.in b/package/dvdauthor/Config.in new file mode 100644 index 00000000..9ba5411d --- /dev/null +++ b/package/dvdauthor/Config.in @@ -0,0 +1,25 @@ +config BR2_PACKAGE_DVDAUTHOR + bool "dvdauthor" + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_FREETYPE + select BR2_PACKAGE_LIBPNG + help + DVDAuthor is a set of tools to help you author the file and + directory structure of a DVD-Video disc, including + programmatic commands for implementing interactive behaviour. + It is driven by command lines and XML control files, though + there are other programs that provide GUI-based front ends + if you prefer + + http://dvdauthor.sourceforge.net + +if BR2_PACKAGE_DVDAUTHOR + +config BR2_PACKAGE_DVDAUTHOR_DVDUNAUTHOR + bool "dvdunauthor" + select BR2_PACKAGE_LIBDVDREAD + help + This option enables the dvdunauthor program, which requires + libdvdread. + +endif diff --git a/package/dvdauthor/dvdauthor.hash b/package/dvdauthor/dvdauthor.hash new file mode 100644 index 00000000..833884aa --- /dev/null +++ b/package/dvdauthor/dvdauthor.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/dvdauthor/files +md5 1173dcb8d40e74fc90c0f3a25dbd642d dvdauthor-0.7.2.tar.gz +sha1 0e605642140576bfb3e963414d77630d1c073a51 dvdauthor-0.7.2.tar.gz +# Locally computed +sha256 3020a92de9f78eb36f48b6f22d5a001c47107826634a785a62dfcd080f612eb7 dvdauthor-0.7.2.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/dvdauthor/dvdauthor.mk b/package/dvdauthor/dvdauthor.mk new file mode 100644 index 00000000..3f9c2186 --- /dev/null +++ b/package/dvdauthor/dvdauthor.mk @@ -0,0 +1,47 @@ +################################################################################ +# +# dvdauthor +# +################################################################################ + +DVDAUTHOR_VERSION = 0.7.2 +DVDAUTHOR_SITE = https://sourceforge.net/projects/dvdauthor/files +DVDAUTHOR_DEPENDENCIES = host-pkgconf libxml2 freetype libpng +DVDAUTHOR_LICENSE = GPL-2.0+ +DVDAUTHOR_LICENSE_FILES = COPYING +DVDAUTHOR_CONF_ENV = \ + ac_cv_prog_FREETYPECONFIG=$(STAGING_DIR)/usr/bin/freetype-config \ + ac_cv_path_XML2_CONFIG=$(STAGING_DIR)/usr/bin/xml2-config \ + ac_cv_prog_GMAGICKCONFIG= + +ifeq ($(BR2_PACKAGE_IMAGEMAGICK),y) +DVDAUTHOR_DEPENDENCIES += imagemagick +DVDAUTHOR_CONF_ENV += \ + ac_cv_prog_MAGICKCONFIG=$(STAGING_DIR)/usr/bin/Magick-config +else +DVDAUTHOR_CONF_ENV += \ + ac_cv_prog_MAGICKCONFIG= +endif + +# Automatically detected by dvdauthor configure script, no way to +# disable. +ifeq ($(BR2_PACKAGE_FONTCONFIG),y) +DVDAUTHOR_DEPENDENCIES += fontconfig +endif + +ifeq ($(BR2_PACKAGE_LIBFRIBIDI),y) +DVDAUTHOR_DEPENDENCIES += libfribidi +endif + +ifeq ($(BR2_PACKAGE_DVDAUTHOR_DVDUNAUTHOR),y) +DVDAUTHOR_DEPENDENCIES += libdvdread +# dvdauthor configure does not use pkg-config to detect libdvdread +ifeq ($(BR2_PACKAGE_LIBDVDCSS)$(BR2_STATIC_LIBS),yy) +DVDAUTHOR_CONF_ENV += LIBS="-ldvdcss" +endif +DVDAUTHOR_CONF_OPTS += --enable-dvdunauthor +else +DVDAUTHOR_CONF_OPTS += --disable-dvdunauthor +endif + +$(eval $(autotools-package)) diff --git a/package/dvdrw-tools/0001-limits.h.patch b/package/dvdrw-tools/0001-limits.h.patch new file mode 100644 index 00000000..ccda8eeb --- /dev/null +++ b/package/dvdrw-tools/0001-limits.h.patch @@ -0,0 +1,23 @@ +transport.hxx: add limits.h include now needed because of kernel changes + +Signed-off-by: Steve Kenton + +diff -pruN dvd+rw-tools-7.1.ori/transport.hxx dvd+rw-tools-7.1/transport.hxx +--- dvd+rw-tools-7.1.ori/transport.hxx 2008-03-01 04:34:43.000000000 -0600 ++++ dvd+rw-tools-7.1/transport.hxx 2015-01-18 15:47:24.245863631 -0600 +@@ -9,6 +9,7 @@ + #if defined(__unix) || defined(__unix__) + #include + #include ++#include + #include + #include + #include +@@ -40,6 +41,7 @@ inline long getmsecs() + #include + #include + #include ++#include + #define ssize_t LONG_PTR + #define off64_t __int64 + diff --git a/package/dvdrw-tools/0002-Include-sysmacros.h-to-compile-with-newer-gcc.patch b/package/dvdrw-tools/0002-Include-sysmacros.h-to-compile-with-newer-gcc.patch new file mode 100644 index 00000000..29c3a73a --- /dev/null +++ b/package/dvdrw-tools/0002-Include-sysmacros.h-to-compile-with-newer-gcc.patch @@ -0,0 +1,14 @@ +growisofs.c: include sysmacros.h to compile with glibc-2.28 + +Signed-off-by: Giulio Benetti + +diff -urpN dvd+rw-tools-7.1.orig/growisofs.c dvd+rw-tools-7.1/growisofs.c +--- dvd+rw-tools-7.1.orig/growisofs.c 2018-09-08 01:56:11.686656819 +0200 ++++ dvd+rw-tools-7.1/growisofs.c 2018-09-08 02:11:45.868778471 +0200 +@@ -441,6 +441,7 @@ + #include + #include + #include ++#include + #include + #include "mp.h" diff --git a/package/dvdrw-tools/Config.in b/package/dvdrw-tools/Config.in new file mode 100644 index 00000000..d4d6bd2c --- /dev/null +++ b/package/dvdrw-tools/Config.in @@ -0,0 +1,53 @@ +comment "dvdrw-tools needs a toolchain w/ threads, C++, wchar" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP || \ + !BR2_USE_WCHAR + +config BR2_PACKAGE_DVDRW_TOOLS + bool "dvdrw-tools" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + help + The dvd+rw-tools are used to master Blu-ray Disc + and DVD Disc media, both +RW/+R and -RW/-R. Note: + The +RW in the name is a historical artifact. This + package contains the widely used growisofs program. + + Buildroot does not support packages with a '+' sign + in their name, which explains why it is named + dvdrw-tools and not dvd+rw-tools. + + Because dvd+rw-tools does not directly interact with + disc media it uses a separate media backend program. + The usual backend is mkisofs from the cdrtools package. + However, cdrtools is not currently part of buildroot. + + The Linux From Scratch project uses uses xorriso for the + media backend and Ubuntu uses cdrkit for the backend. + Choose the one which seems most appropriate for your use. + NOTE: xorriso does not currently support UDF. + + http://fy.chalmers.se/~appro/linux/DVD+RW/tools + +if BR2_PACKAGE_DVDRW_TOOLS +choice + prompt "Media Backend" + help + Choose which media backend program to use. + +config BR2_PACKAGE_DVDRW_TOOLS_CDRKIT_BACKEND + bool "cdrkit" + select BR2_PACKAGE_CDRKIT + help + Symlink mkisofs to genisoimage from the cdrkit package. + +config BR2_PACKAGE_DVDRW_TOOLS_XORRISO_BACKEND + bool "xorriso" + select BR2_PACKAGE_XORRISO + help + Symlink mkisofs to xorrisofs from the xorriso package. + +endchoice +endif diff --git a/package/dvdrw-tools/dvdrw-tools.hash b/package/dvdrw-tools/dvdrw-tools.hash new file mode 100644 index 00000000..a5ed6ad5 --- /dev/null +++ b/package/dvdrw-tools/dvdrw-tools.hash @@ -0,0 +1,3 @@ +# Locally computed using sha256sum +sha256 f8d60f822e914128bcbc5f64fbe3ed131cbff9045dca7e12c5b77b26edde72ca dvd+rw-tools-7.1.tar.gz +sha256 91df39d1816bfb17a4dda2d3d2c83b1f6f2d38d53e53e41e8f97ad5ac46a0cad LICENSE diff --git a/package/dvdrw-tools/dvdrw-tools.mk b/package/dvdrw-tools/dvdrw-tools.mk new file mode 100644 index 00000000..5dab5466 --- /dev/null +++ b/package/dvdrw-tools/dvdrw-tools.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# dvdrw-tools +# +################################################################################ + +DVDRW_TOOLS_VERSION = 7.1 +DVDRW_TOOLS_SOURCE = dvd+rw-tools-$(DVDRW_TOOLS_VERSION).tar.gz +DVDRW_TOOLS_SITE = http://fy.chalmers.se/~appro/linux/DVD+RW/tools +DVDRW_TOOLS_LICENSE = GPL-2.0 +DVDRW_TOOLS_LICENSE_FILES = LICENSE +DVDRW_TOOLS_DEPENDENCIES = host-m4 + +define DVDRW_TOOLS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) +endef + +ifeq ($(BR2_PACKAGE_DVDRW_TOOLS_CDRKIT_BACKEND),y) +DVDRW_TOOLS_BACKEND = genisoimage +DVDRW_TOOLS_DEPENDENCIES += cdrkit +else ifeq ($(BR2_PACKAGE_DVDRW_TOOLS_XORRISO_BACKEND),y) +DVDRW_TOOLS_BACKEND = xorrisofs +DVDRW_TOOLS_DEPENDENCIES += xorriso +endif + +define DVDRW_TOOLS_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/dvd-ram-control $(TARGET_DIR)/usr/bin/dvd-ram-control + $(INSTALL) -m 0755 -D $(@D)/dvd+rw-booktype $(TARGET_DIR)/usr/bin/dvd+rw-booktype + $(INSTALL) -m 0755 -D $(@D)/dvd+rw-format $(TARGET_DIR)/usr/bin/dvd+rw-format + $(INSTALL) -m 0755 -D $(@D)/dvd+rw-mediainfo $(TARGET_DIR)/usr/bin/dvd+rw-mediainfo + $(INSTALL) -m 0755 -D $(@D)/growisofs $(TARGET_DIR)/usr/bin/growisofs + ln -s -f $(DVDRW_TOOLS_BACKEND) $(TARGET_DIR)/usr/bin/mkisofs +endef + +$(eval $(generic-package)) diff --git a/package/e2fsprogs/0001-create_inode-set-xattrs-to-the-root-directory-as-wel.patch b/package/e2fsprogs/0001-create_inode-set-xattrs-to-the-root-directory-as-wel.patch new file mode 100644 index 00000000..2e9c3cce --- /dev/null +++ b/package/e2fsprogs/0001-create_inode-set-xattrs-to-the-root-directory-as-wel.patch @@ -0,0 +1,46 @@ +From 1826d8965057bd84517156a4b75c81bdfdae9ebc Mon Sep 17 00:00:00 2001 +From: Antoine Tenart +Date: Wed, 1 Jul 2020 10:06:03 +0200 +Subject: [PATCH] create_inode: set xattrs to the root directory as well + +populate_fs do copy the xattrs for all files and directories, but the +root directory is skipped and as a result its extended attributes aren't +set. This is an issue when using mkfs to build a full system image that +can be used with SElinux in enforcing mode without making any runtime +fix at first boot. + +This patch adds logic to set the root directory's extended attributes. + +[Uspstream status: sent to the mailing list and has a Reviewed-by tag, +https://lore.kernel.org/linux-ext4/20200717100846.497546-1-antoine.tenart@bootlin.com/] + +Signed-off-by: Antoine Tenart +--- + misc/create_inode.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/misc/create_inode.c b/misc/create_inode.c +index e8d1df6b55a5..fe66faf1b53d 100644 +--- a/misc/create_inode.c ++++ b/misc/create_inode.c +@@ -1050,9 +1050,17 @@ errcode_t populate_fs2(ext2_filsys fs, ext2_ino_t parent_ino, + file_info.path_max_len = 255; + file_info.path = calloc(file_info.path_max_len, 1); + ++ retval = set_inode_xattr(fs, root, source_dir); ++ if (retval) { ++ com_err(__func__, retval, ++ _("while copying xattrs on root directory")); ++ goto out; ++ } ++ + retval = __populate_fs(fs, parent_ino, source_dir, root, &hdlinks, + &file_info, fs_callbacks); + ++out: + free(file_info.path); + free(hdlinks.hdl); + return retval; +-- +2.26.2 + diff --git a/package/e2fsprogs/Config.in b/package/e2fsprogs/Config.in new file mode 100644 index 00000000..b3d12b4a --- /dev/null +++ b/package/e2fsprogs/Config.in @@ -0,0 +1,69 @@ +menuconfig BR2_PACKAGE_E2FSPROGS + bool "e2fsprogs" + depends on BR2_USE_MMU # util-linux/libblkid + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBBLKID + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + help + The EXT2 file system utilities. + + The following programs are always built and installed: + badblocks chattr debugfs dumpe2fs e2freefrag e2fsck e2image + e2undo e4crypt e4defrag filefrag fsck fuse2fs logsave lsattr + mke2fs mklost+found resize2fs tune2fs + + The uuid utilities (uuidd, uuidgen) are not built. Use the + ones from util-linux, instead. + + Other programs can be selected individually. + + http://e2fsprogs.sourceforge.net + +if BR2_PACKAGE_E2FSPROGS + +config BR2_PACKAGE_E2FSPROGS_DEBUGFS + bool "debugfs" + help + ext2/ext3/ext4 file system debugger + +config BR2_PACKAGE_E2FSPROGS_E2IMAGE + bool "e2image" + help + Save critical ext2/ext3/ext4 filesystem metadata to a file + +config BR2_PACKAGE_E2FSPROGS_E4DEFRAG + bool "e4defrag" + depends on !BR2_nios2 # fallocate not implemented + depends on !BR2_TOOLCHAIN_USES_UCLIBC # sync_file_range not impl + help + Online defragmenter for ext4 filesystem + +comment "e4defrag needs a glibc or musl toolchain" + depends on !BR2_nios2 + depends on BR2_TOOLCHAIN_USES_UCLIBC + +config BR2_PACKAGE_E2FSPROGS_FSCK + bool "fsck" + default y + depends on !BR2_PACKAGE_UTIL_LINUX_FSCK + help + Check and repair a Linux file system. This is a wrapper around + the filesystem-specific fsck tools. + +config BR2_PACKAGE_E2FSPROGS_FUSE2FS + bool "fuse2fs" + depends on !BR2_STATIC_LIBS # libfuse + depends on BR2_TOOLCHAIN_HAS_THREADS # libfuse + select BR2_PACKAGE_LIBFUSE + help + FUSE file system client for ext2/ext3/ext4 file systems + +comment "fuse2fs needs a toolchain w/ threads, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS + +config BR2_PACKAGE_E2FSPROGS_RESIZE2FS + bool "resize2fs" + help + ext2/ext3/ext4 file system resizer + +endif diff --git a/package/e2fsprogs/Config.in.host b/package/e2fsprogs/Config.in.host new file mode 100644 index 00000000..7591bbcb --- /dev/null +++ b/package/e2fsprogs/Config.in.host @@ -0,0 +1,7 @@ +config BR2_PACKAGE_HOST_E2FSPROGS + bool "host e2fsprogs" + select BR2_PACKAGE_HOST_UTIL_LINUX + help + The EXT2/3/4 file system utilities. + + http://e2fsprogs.sourceforge.net diff --git a/package/e2fsprogs/e2fsprogs.hash b/package/e2fsprogs/e2fsprogs.hash new file mode 100644 index 00000000..b563af27 --- /dev/null +++ b/package/e2fsprogs/e2fsprogs.hash @@ -0,0 +1,6 @@ +# https://mirrors.edge.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/v1.45.6/sha256sums.asc +sha256 ffa7ae6954395abdc50d0f8605d8be84736465afc53b8938ef473fcf7ff44256 e2fsprogs-1.45.6.tar.xz +# Locally calculated +sha256 5da5ef153e559c1d990d4c3eedbedd4442db892d37eae1f35fff069de8ec9020 NOTICE +sha256 032989b508f1a72ebee5b3417e55d06d473f9ee203e45ab11864a7e49cdec63d lib/ss/mit-sipb-copyright.h +sha256 47182fe6631a32f271a15bbe210751b3825b7199f588879aac7d4804fc8b4b8f lib/et/internal.h diff --git a/package/e2fsprogs/e2fsprogs.mk b/package/e2fsprogs/e2fsprogs.mk new file mode 100644 index 00000000..e40af73c --- /dev/null +++ b/package/e2fsprogs/e2fsprogs.mk @@ -0,0 +1,84 @@ +################################################################################ +# +# e2fsprogs +# +################################################################################ + +E2FSPROGS_VERSION = 1.45.6 +E2FSPROGS_SOURCE = e2fsprogs-$(E2FSPROGS_VERSION).tar.xz +E2FSPROGS_SITE = $(BR2_KERNEL_MIRROR)/linux/kernel/people/tytso/e2fsprogs/v$(E2FSPROGS_VERSION) +E2FSPROGS_LICENSE = GPL-2.0, MIT-like with advertising clause (libss and libet) +E2FSPROGS_LICENSE_FILES = NOTICE lib/ss/mit-sipb-copyright.h lib/et/internal.h +E2FSPROGS_CPE_ID_VENDOR = e2fsprogs_project +E2FSPROGS_INSTALL_STAGING = YES + +# Use libblkid and libuuid from util-linux for host and target packages. +# This prevents overriding them with e2fsprogs' ones, which may cause +# problems for other packages. +E2FSPROGS_DEPENDENCIES = host-pkgconf util-linux +HOST_E2FSPROGS_DEPENDENCIES = host-pkgconf host-util-linux + +E2FSPROGS_SELINUX_MODULES = fstools + +# e4defrag doesn't build on older systems like RHEL5.x, and we don't +# need it on the host anyway. +# Disable fuse2fs as well to avoid carrying over deps, and it's unused +HOST_E2FSPROGS_CONF_OPTS = \ + --disable-defrag \ + --disable-e2initrd-helper \ + --disable-fuse2fs \ + --disable-fsck \ + --disable-libblkid \ + --disable-libuuid \ + --disable-testio-debug \ + --enable-symlink-install \ + --enable-elf-shlibs \ + --with-crond-dir=no \ + --with-udev-rules-dir=no \ + --with-systemd-unit-dir=no + +# Set the binary directories to "/bin" and "/sbin", as busybox does, +# so that we do not end up with two versions of e2fs tools. +E2FSPROGS_CONF_OPTS = \ + --bindir=/bin \ + --sbindir=/sbin \ + $(if $(BR2_STATIC_LIBS),--disable-elf-shlibs,--enable-elf-shlibs) \ + $(if $(BR2_PACKAGE_E2FSPROGS_DEBUGFS),--enable-debugfs,--disable-debugfs) \ + $(if $(BR2_PACKAGE_E2FSPROGS_E2IMAGE),--enable-imager,--disable-imager) \ + $(if $(BR2_PACKAGE_E2FSPROGS_E4DEFRAG),--enable-defrag,--disable-defrag) \ + $(if $(BR2_PACKAGE_E2FSPROGS_FSCK),--enable-fsck,--disable-fsck) \ + $(if $(BR2_PACKAGE_E2FSPROGS_RESIZE2FS),--enable-resizer,--disable-resizer) \ + --disable-uuidd \ + --disable-libblkid \ + --disable-libuuid \ + --disable-e2initrd-helper \ + --disable-testio-debug \ + --disable-rpath \ + --enable-symlink-install + +ifeq ($(BR2_PACKAGE_E2FSPROGS_FUSE2FS),y) +E2FSPROGS_CONF_OPTS += --enable-fuse2fs +E2FSPROGS_DEPENDENCIES += libfuse +else +E2FSPROGS_CONF_OPTS += --disable-fuse2fs +endif + +ifeq ($(BR2_nios2),y) +E2FSPROGS_CONF_ENV += ac_cv_func_fallocate=no +endif + +E2FSPROGS_CONF_ENV += ac_cv_path_LDCONFIG=true + +HOST_E2FSPROGS_CONF_ENV += ac_cv_path_LDCONFIG=true + +E2FSPROGS_INSTALL_STAGING_OPTS = \ + DESTDIR=$(STAGING_DIR) \ + install-libs + +# Package does not build in parallel due to improper make rules +define HOST_E2FSPROGS_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE1) -C $(@D) install install-libs +endef + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/e2tools/Config.in b/package/e2tools/Config.in new file mode 100644 index 00000000..e4a35e27 --- /dev/null +++ b/package/e2tools/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_E2TOOLS + bool "e2tools" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_WCHAR # uses wchar_t + depends on BR2_USE_MMU # e2fsprogs + select BR2_PACKAGE_E2FSPROGS + help + E2tools is a simple set of GPL'ed utilities to read, write, + and manipulate files in an ext2/ext3 filesystem. These + utilities access a filesystem directly using the ext2fs + library. + + https://github.com/ndim/e2tools + +comment "e2tools needs a toolchain w/ threads, wchar" + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR + depends on BR2_USE_MMU diff --git a/package/e2tools/Config.in.host b/package/e2tools/Config.in.host new file mode 100644 index 00000000..859c47bd --- /dev/null +++ b/package/e2tools/Config.in.host @@ -0,0 +1,10 @@ +config BR2_PACKAGE_HOST_E2TOOLS + bool "host e2tools" + select BR2_PACKAGE_HOST_E2FSPROGS + help + E2tools is a simple set of GPL'ed utilities to read, write, + and manipulate files in an ext2/ext3 filesystem. These + utilities access a filesystem directly using the ext2fs + library. + + https://github.com/ndim/e2tools diff --git a/package/e2tools/e2tools.hash b/package/e2tools/e2tools.hash new file mode 100644 index 00000000..a109ff1b --- /dev/null +++ b/package/e2tools/e2tools.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 1d06ca71f01483ad6d9a514e31466e7d2357b3465de2813d667a8b2f9638544e e2tools-0.0.16.4.tar.gz +sha256 0e79fd282723e1eb3f7381d41233a83ed20cf3e8c83aa53e6847bf7ffe781583 COPYING diff --git a/package/e2tools/e2tools.mk b/package/e2tools/e2tools.mk new file mode 100644 index 00000000..7c9ef0ff --- /dev/null +++ b/package/e2tools/e2tools.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# e2tools +# +################################################################################ + +E2TOOLS_VERSION = 0.0.16.4 +E2TOOLS_SITE = $(call github,ndim,e2tools,v$(E2TOOLS_VERSION)) + +# Source coming from GitHub, no configure included. +E2TOOLS_AUTORECONF = YES +E2TOOLS_LICENSE = GPL-2.0 +E2TOOLS_LICENSE_FILES = COPYING +E2TOOLS_DEPENDENCIES = e2fsprogs +E2TOOLS_CONF_ENV = LIBS="-lpthread" +HOST_E2TOOLS_DEPENDENCIES = host-e2fsprogs +HOST_E2TOOLS_CONF_ENV = LIBS="-lpthread" + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/earlyoom/Config.in b/package/earlyoom/Config.in new file mode 100644 index 00000000..a3cac273 --- /dev/null +++ b/package/earlyoom/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_EARLYOOM + bool "earlyoom" + depends on BR2_USE_MMU + help + Early OOM daemon for Linux. + + User space daemon for triggering Linux OOM killer + before running out of memory, avoiding situations + where the machine becomes unresponsive from out of + control swapping. + + https://github.com/rfjakob/earlyoom diff --git a/package/earlyoom/S02earlyoom b/package/earlyoom/S02earlyoom new file mode 100644 index 00000000..c02495af --- /dev/null +++ b/package/earlyoom/S02earlyoom @@ -0,0 +1,49 @@ +#!/bin/sh + +DAEMON="earlyoom" +PIDFILE="/var/run/$DAEMON.pid" + +EARLYOOM_ARGS="" + +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON" + +start() { + printf() 'Starting %s: ' "$DAEMON" + start-stop-daemon -b -m -S -q -p "$PIDFILE" -x "/bin/$DAEMON" \ + -- $EARLYOOM_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + rm -f "$PIDFILE" + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + start +} + +case "$1" in + start|stop|restart) + "$1";; + reload) + restart;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/earlyoom/earlyoom.hash b/package/earlyoom/earlyoom.hash new file mode 100644 index 00000000..b0095cb8 --- /dev/null +++ b/package/earlyoom/earlyoom.hash @@ -0,0 +1,4 @@ +# locally calculated +sha256 b81804fc4470f996014d52252a87a1cf3b43d3d8754140035b10dcee349302b8 earlyoom-1.6.tar.gz +# License files, locally calculated +sha256 e730b3ec729de46d987ae73f30ed337e4cbe832f09205330acfa71848c6e0087 LICENSE diff --git a/package/earlyoom/earlyoom.mk b/package/earlyoom/earlyoom.mk new file mode 100644 index 00000000..066a479b --- /dev/null +++ b/package/earlyoom/earlyoom.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# earlyoom +# +################################################################################ + +EARLYOOM_VERSION = 1.6 +EARLYOOM_SITE = $(call github,rfjakob,earlyoom,v$(EARLYOOM_VERSION)) +EARLYOOM_LICENSE = MIT +EARLYOOM_LICENSE_FILES = LICENSE + +EARLYOOM_BUILD_TARGETS = earlyoom.service earlyoom +EARLYOOM_INSTALL_TARGETS = install-default install-bin +EARLYOOM_CFLAGS = '$(TARGET_CFLAGS) -std=gnu99 -DVERSION=\"1.6\"' + +EARLYOOM_MAKE_OPTS = \ + $(TARGET_CONFIGURE_OPTS) \ + PREFIX=/usr + +define EARLYOOM_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(EARLYOOM_MAKE_OPTS) -C $(@D) \ + $(EARLYOOM_BUILD_TARGETS) CFLAGS=$(EARLYOOM_CFLAGS) +endef + +define EARLYOOM_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(EARLYOOM_MAKE_OPTS) -C $(@D) \ + $(EARLYOOM_INSTALL_TARGETS) DESTDIR=$(TARGET_DIR) +endef + +define EARLYOOM_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 $(EARLYOOM_PKGDIR)/S02earlyoom \ + $(TARGET_DIR)/etc/init.d/S02earlyoom +endef + +define EARLYOOM_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 $(@D)/earlyoom.service \ + $(TARGET_DIR)/usr/lib/systemd/system/earlyoom.service +endef + +$(eval $(generic-package)) diff --git a/package/easy-rsa/Config.in b/package/easy-rsa/Config.in new file mode 100644 index 00000000..56db64a5 --- /dev/null +++ b/package/easy-rsa/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_EASY_RSA + bool "easy-rsa" + select BR2_PACKAGE_OPENSSL # runtime + select BR2_PACKAGE_LIBOPENSSL_BIN if BR2_PACKAGE_LIBOPENSSL + select BR2_PACKAGE_LIBRESSL_BIN if BR2_PACKAGE_LIBRESSL + help + Simple shell based CA utility + + This package eases the creation of certificates, for example + for openvpn clients. + + This was formerly part of the openvpn package. + + easy-rsa is a wrapper script around OpenSSL binaries. + + https://github.com/OpenVPN/easy-rsa diff --git a/package/easy-rsa/easy-rsa.hash b/package/easy-rsa/easy-rsa.hash new file mode 100644 index 00000000..e363e570 --- /dev/null +++ b/package/easy-rsa/easy-rsa.hash @@ -0,0 +1,6 @@ +# Locally computed: (after verifying gpg sig) +sha512 fd2cde4725cffd60c6af1b6aeaff0dbf15f31f0f322c9df75c22838e2297ba9dc3bba610d956464c8227bd74b3e63840e2a3da41fbc5ee1c79c1e7f5350adc94 EasyRSA-3.0.8.tgz + +# Hash for license files +sha256 7c4a4fc71745d93a87278801f1bca555562ca23f21e18293add64b9e6f6b7bf1 COPYING.md +sha256 640d90f6ee401241ff62834d0d1b33f83049e99b8bfdfa04ed1b0a1635dde3e7 gpl-2.0.txt diff --git a/package/easy-rsa/easy-rsa.mk b/package/easy-rsa/easy-rsa.mk new file mode 100644 index 00000000..4ec011e1 --- /dev/null +++ b/package/easy-rsa/easy-rsa.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# easy-rsa +# +################################################################################ + +EASY_RSA_VERSION = 3.0.8 +EASY_RSA_SOURCE = EasyRSA-$(EASY_RSA_VERSION).tgz +EASY_RSA_SITE = https://github.com/OpenVPN/easy-rsa/releases/download/v$(EASY_RSA_VERSION) +EASY_RSA_LICENSE = GPL-2.0 +EASY_RSA_LICENSE_FILES = COPYING.md gpl-2.0.txt + +# shell script, so no build step + +define EASY_RSA_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/easyrsa $(TARGET_DIR)/usr/bin/easyrsa + $(INSTALL) -d -m 0755 $(TARGET_DIR)/etc/easy-rsa/x509-types + $(INSTALL) -m 0644 -t $(TARGET_DIR)/etc/easy-rsa/x509-types $(@D)/x509-types/* + $(INSTALL) -D -m 0644 $(@D)/openssl-easyrsa.cnf $(TARGET_DIR)/etc/easy-rsa/openssl-easyrsa.cnf + $(INSTALL) -D -m 0644 $(@D)/vars.example $(TARGET_DIR)/etc/easy-rsa/vars +endef + +$(eval $(generic-package)) diff --git a/package/easydbus/Config.in b/package/easydbus/Config.in new file mode 100644 index 00000000..5f2f3a22 --- /dev/null +++ b/package/easydbus/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_EASYDBUS + bool "easydbus" + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + depends on !BR2_PACKAGE_LUA_5_4 + select BR2_PACKAGE_LIBGLIB2 + help + Easy to use DBus library for Lua. + + https://github.com/mniestroj/easydbus + +comment "easydbus needs a toolchain w/ wchar, threads, Lua <= 5.3" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || BR2_PACKAGE_LUA_5_4 diff --git a/package/easydbus/easydbus.hash b/package/easydbus/easydbus.hash new file mode 100644 index 00000000..08a4f038 --- /dev/null +++ b/package/easydbus/easydbus.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 8cec24bff40f056d4874ed9d6fb73c9f1efbc5eff14528e1b49f1a162b197f26 easydbus-0.1.0.tar.gz +sha256 dec3b3103cd6889045da86fc7da22bd25545966e5bd7c214791b922dec19588b LICENSE diff --git a/package/easydbus/easydbus.mk b/package/easydbus/easydbus.mk new file mode 100644 index 00000000..57d0c223 --- /dev/null +++ b/package/easydbus/easydbus.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# easydbus +# +################################################################################ + +EASYDBUS_VERSION = 0.1.0 +EASYDBUS_SITE = $(call github,mniestroj,easydbus,v$(EASYDBUS_VERSION)) +EASYDBUS_DEPENDENCIES = luainterpreter libglib2 +EASYDBUS_LICENSE = MIT +EASYDBUS_LICENSE_FILES = LICENSE + +$(eval $(cmake-package)) diff --git a/package/easyframes/0001-CMakesLists.txt-fix-static-build-with-pcap.patch b/package/easyframes/0001-CMakesLists.txt-fix-static-build-with-pcap.patch new file mode 100644 index 00000000..3f13613e --- /dev/null +++ b/package/easyframes/0001-CMakesLists.txt-fix-static-build-with-pcap.patch @@ -0,0 +1,57 @@ +From 89ad9c143825b13d028c2f1713d55e83135d5c0f Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 5 Sep 2020 15:38:33 +0200 +Subject: [PATCH] CMakesLists.txt: fix static build with pcap + +Use pkg-config to find the dependencies of pcap such as libnl otherwise +a static-only build will fail on: + +[100%] Linking C executable ef +/srv/storage/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-buildroot-linux-uclibcgnueabi/8.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: /srv/storage/autobuild/run/instance-0/output-1/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libpcap.a(pcap-linux.o): in function `nl80211_init': +pcap-linux.c:(.text+0x460): undefined reference to `nl_socket_alloc' +/srv/storage/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-buildroot-linux-uclibcgnueabi/8.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: pcap-linux.c:(.text+0x498): undefined reference to `genl_connect' + +Fixes: + - http://autobuild.buildroot.org/results/99062bfc8c21c32bc835acae675aede7c9cf0c90 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/microchip-ung/easyframes/pull/2] +--- + CMakeLists.txt | 20 ++++++++++++++------ + 1 file changed, 14 insertions(+), 6 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index a62a950..5be128c 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -7,13 +7,21 @@ include_directories(src) + + + set(_LIBPCAP "") +-FIND_PATH(PCAP_INCLUDE_DIR NAMES pcap/pcap.h) +-FIND_LIBRARY(PCAP_LIBRARY NAMES pcap) +- +-if (PCAP_LIBRARY) ++find_package(PkgConfig) ++pkg_check_modules(PCAP libpcap) ++if (PCAP_FOUND) + add_definitions(-DHAS_LIBPCAP) +- include_directories(${PCAP_INCLUDE_DIR}) +- set(_LIBPCAP ${PCAP_LIBRARY}) ++ include_directories(${PCAP_INCLUDE_DIRS}) ++ set(_LIBPCAP ${PCAP_LIBRARIES}) ++else() ++ FIND_PATH(PCAP_INCLUDE_DIR NAMES pcap/pcap.h) ++ FIND_LIBRARY(PCAP_LIBRARY NAMES pcap) ++ ++ if (PCAP_LIBRARY) ++ add_definitions(-DHAS_LIBPCAP) ++ include_directories(${PCAP_INCLUDE_DIR}) ++ set(_LIBPCAP ${PCAP_LIBRARY}) ++ endif() + endif() + + add_library(libef STATIC +-- +2.28.0 + diff --git a/package/easyframes/0002-Fix-different-compiling-issues.patch b/package/easyframes/0002-Fix-different-compiling-issues.patch new file mode 100644 index 00000000..e4d16a73 --- /dev/null +++ b/package/easyframes/0002-Fix-different-compiling-issues.patch @@ -0,0 +1,91 @@ +From d3d179c3c39ec10ec636b325325ad8e18ae9542f Mon Sep 17 00:00:00 2001 +From: Horatiu Vultur +Date: Tue, 1 Sep 2020 13:03:47 +0200 +Subject: [PATCH] Fix different compiling issues + +[Retrieved from: +https://github.com/microchip-ung/easyframes/commit/d3d179c3c39ec10ec636b325325ad8e18ae9542f] +Signed-off-by: Fabrice Fontaine +--- + src/ef-exec.c | 4 ++-- + src/ef-parse-bytes.c | 8 ++++++-- + src/ef.h | 4 ++-- + 3 files changed, 10 insertions(+), 6 deletions(-) + +diff --git a/src/ef-exec.c b/src/ef-exec.c +index 3d184a0..824164e 100644 +--- a/src/ef-exec.c ++++ b/src/ef-exec.c +@@ -108,7 +108,7 @@ int ring_wait_for_init(tpacket_ring *ring) { + + + int raw_socket(cmd_socket_t *cmd_socket) { +- int s, res, val, ifidx; ++ int s, res, val, ifidx, i; + struct sockaddr_ll sa = {}; + struct packet_mreq mr = {}; + +@@ -194,7 +194,7 @@ int raw_socket(cmd_socket_t *cmd_socket) { + // + // TODO: This does not seem to be needed, if we uses a RX ring buffer + // instead (atleast that seems to work for libpcap) +- for (int i = 0; i < 10000; ++i) { ++ for (i = 0; i < 10000; ++i) { + struct msghdr msg = { 0 }; + int res = recvmsg(s, &msg, MSG_DONTWAIT); + if (res < 0) +diff --git a/src/ef-parse-bytes.c b/src/ef-parse-bytes.c +index 1dd590f..1785f45 100644 +--- a/src/ef-parse-bytes.c ++++ b/src/ef-parse-bytes.c +@@ -2,6 +2,7 @@ + #include + #include + #include ++#include + #include + + struct start_with { +@@ -212,7 +213,9 @@ buf_t *parse_bytes(const char *s, int bytes) { + for (s = data_begin; *s; ++s) { + int match_found = 0; + for (i = 0; i < sizeof(has_chars)/sizeof(has_chars[0]); ++i) { +- for (const char *set_i = has_chars[i].char_set; *set_i; ++set_i) { ++ const char *set_i; ++ ++ for (set_i = has_chars[i].char_set; *set_i; ++set_i) { + if (*s == *set_i) { + has_mask |= has_chars[i].mask; + match_found = 1; +@@ -313,6 +316,7 @@ buf_t *parse_bytes(const char *s, int bytes) { + ((has_mask & ~(HAS_HEX_COL)) == 0) && (has_mask & HAS_COLON)) { + // This will be treated as a mac-address + uint8_t m[6] = {}; ++ const char *x; + + // We want to be able to write something like this (like we RFC2373 + // specifies for IPv6): +@@ -334,7 +338,7 @@ buf_t *parse_bytes(const char *s, int bytes) { + + //po("line: %d data_begin: %s\n", __LINE__, data_begin); + +- for (const char *x = data_begin; *x; ++x) { ++ for (x = data_begin; *x; ++x) { + int colon = 0; + int val = 0; + +diff --git a/src/ef.h b/src/ef.h +index 8926c25..f4c1629 100644 +--- a/src/ef.h ++++ b/src/ef.h +@@ -59,8 +59,8 @@ void bl_check(buf_list_t *b); + void bl_reset(buf_list_t *b); + void bset_value(buf_t *b, uint8_t v); + +-inline void bl_init(buf_list_t *b) { bl_reset(b); } +-inline void bl_destroy(buf_list_t *b) { bl_reset(b); } ++static inline void bl_init(buf_list_t *b) { bl_reset(b); } ++static inline void bl_destroy(buf_list_t *b) { bl_reset(b); } + + int bl_printf_append(buf_list_t *b, const char *format, ...) + __attribute__ ((format (printf, 2, 3))); diff --git a/package/easyframes/Config.in b/package/easyframes/Config.in new file mode 100644 index 00000000..b73afe05 --- /dev/null +++ b/package/easyframes/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_EASYFRAMES + bool "easyframes" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBPCAP + help + This is a small and simple command-line tool for network + testing. The tool makes it simple to compose a frame, + inject and express what and where frames are expected to be + received. + + https://github.com/microchip-ung/easyframes diff --git a/package/easyframes/easyframes.hash b/package/easyframes/easyframes.hash new file mode 100644 index 00000000..0f16e0ca --- /dev/null +++ b/package/easyframes/easyframes.hash @@ -0,0 +1,3 @@ +# locally calculated +sha256 3c0449b3129c29b5ecf67b689f1a75ffc65fde3c5f62811e2f0439ce4f4af392 easyframes-0.3.tar.gz +sha256 24f37598e822a1411fb7164ce7eb3ef120aea8279016399abc282c2381ce3f57 COPYING diff --git a/package/easyframes/easyframes.mk b/package/easyframes/easyframes.mk new file mode 100644 index 00000000..1821ce70 --- /dev/null +++ b/package/easyframes/easyframes.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# easyframes +# +################################################################################ + +EASYFRAMES_VERSION = 0.3 +EASYFRAMES_SITE = $(call github,microchip-ung,easyframes,v$(EASYFRAMES_VERSION)) +EASYFRAMES_DEPENDENCIES = host-pkgconf libpcap +EASYFRAMES_LICENSE = MIT +EASYFRAMES_LICENSE_FILES = COPYING + +$(eval $(cmake-package)) diff --git a/package/ebtables/0001-replace-ebtables-save-perl-script-with-bash.patch b/package/ebtables/0001-replace-ebtables-save-perl-script-with-bash.patch new file mode 100644 index 00000000..525e8a28 --- /dev/null +++ b/package/ebtables/0001-replace-ebtables-save-perl-script-with-bash.patch @@ -0,0 +1,79 @@ +From 73536d15c80be96049289d96fc32122467c56b1d Mon Sep 17 00:00:00 2001 +From: Matt Weber +Date: Mon, 16 Dec 2019 13:27:30 -0600 +Subject: [PATCH] ebtables: replace ebtables-save perl script with bash rewrite + +Fedora provides a bash replacement for the default ebtables-save perl +script. Using it allows the ebtables run-time dependency on perl to +be replaced with a runtime dependency on bash - which is lower +overhead and more likely to be present on typical embedded systems +already. + + https://bugzilla.redhat.com/show_bug.cgi?id=746040 + http://pkgs.fedoraproject.org/cgit/rpms/ebtables.git/tree/ebtables-save + +Upstream: +https://github.com/openembedded/meta-openembedded/commit/7f723007364ba79de05447671e83d4eefb3097dc + +Signed-off-by: Matthew Weber +[ryanbarnett3@gmail.com: + - changed EBTABLES executable to /usr/sbin/ebtables-legacy +] +Signed-off-by: Ryan Barnett +--- + ebtables-save.sh | 43 +++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 43 insertions(+) + create mode 100644 ebtables-save.sh + +diff --git a/ebtables-save.sh b/ebtables-save.sh +new file mode 100644 +index 0000000..2d7fc4e +--- /dev/null ++++ b/ebtables-save.sh +@@ -0,0 +1,43 @@ ++#!/bin/bash ++ ++EBTABLES="/usr/sbin/ebtables-legacy" ++ ++[ -x "$EBTABLES" ] || exit 1 ++ ++echo "# Generated by ebtables-save v1.0 on $(date)" ++ ++cnt="" ++[ "x$EBTABLES_SAVE_COUNTER" = "xyes" ] && cnt="--Lc" ++ ++for table_name in $(grep -E '^ebtable_' /proc/modules | cut -f1 -d' ' | sed s/ebtable_//); do ++ table=$($EBTABLES -t $table_name -L $cnt) ++ [ $? -eq 0 ] || { echo "$table"; exit -1; } ++ ++ chain="" ++ rules="" ++ while read line; do ++ [ -z "$line" ] && continue ++ ++ case "$line" in ++ Bridge\ table:\ *) ++ echo "*${line:14}" ++ ;; ++ Bridge\ chain:\ *) ++ chain="${line:14}" ++ chain="${chain%%,*}" ++ policy="${line##*policy: }" ++ echo ":$chain $policy" ++ ;; ++ *) ++ if [ "$cnt" = "--Lc" ]; then ++ line=${line/, pcnt \=/ -c} ++ line=${line/-- bcnt \=/} ++ fi ++ rules="$rules-A $chain $line\n" ++ ;; ++ esac ++ done < +Date: Wed, 24 Mar 2021 11:27:14 +0100 +Subject: [PATCH] ebtables.h: restore KERNEL_64_USERSPACE_32 checks + +Commit e6359eedfbf497e52d52451072aea4713ed80a88 replaced the file ebtables.h +but removed the usage of KERNEL_64_USERSPACE_32. This breaks boards where +such flag is relevant, with following messages: + +[ 6364.971346] kernel msg: ebtables bug: please report to author: Standard target size too big + +Unable to update the kernel. Two possible causes: +1. Multiple ebtables programs were executing simultaneously. The ebtables + userspace tool doesn't by default support multiple ebtables programs running + concurrently. The ebtables option --concurrent or a tool like flock can be + used to support concurrent scripts that update the ebtables kernel tables. +2. The kernel doesn't support a certain ebtables extension, consider + recompiling your kernel or insmod the extension. + +Analysis shows that the structure 'ebt_replace' passed from userspace +ebtables to the kernel, is too small, i.e 80 bytes instead of 120 in case of +64-bit kernel. + +Note that the ebtables build system seems to assume that 'sparc64' is the +only case where KERNEL_64_USERSPACE_32 is relevant, but this is not true. +This situation can happen on many architectures, especially in embedded +systems. For example, an Aarch64 processor with kernel in 64-bit but +userland build for 32-bit Arm. Or a 64-bit MIPS Octeon III processor, with +userland running in the 'n32' ABI. + +Signed-off-by: Thomas De Schampheleire +Upstream-Status: http://patchwork.ozlabs.org/project/netfilter-devel/patch/20210518181730.13436-1-patrickdepinguin@gmail.com/ +--- + include/linux/netfilter_bridge/ebtables.h | 21 +++++++++++++++++++++ + 1 file changed, 21 insertions(+) + +diff --git a/include/linux/netfilter_bridge/ebtables.h b/include/linux/netfilter_bridge/ebtables.h +index 5be75f2..3c2b61e 100644 +--- a/include/linux/netfilter_bridge/ebtables.h ++++ b/include/linux/netfilter_bridge/ebtables.h +@@ -49,12 +49,21 @@ struct ebt_replace { + /* total size of the entries */ + unsigned int entries_size; + /* start of the chains */ ++#ifdef KERNEL_64_USERSPACE_32 ++ uint64_t hook_entry[NF_BR_NUMHOOKS]; ++#else + struct ebt_entries *hook_entry[NF_BR_NUMHOOKS]; ++#endif + /* nr of counters userspace expects back */ + unsigned int num_counters; + /* where the kernel will put the old counters */ ++#ifdef KERNEL_64_USERSPACE_32 ++ uint64_t counters; ++ uint64_t entries; ++#else + struct ebt_counter *counters; + char *entries; ++#endif + }; + + struct ebt_replace_kernel { +@@ -129,6 +138,9 @@ struct ebt_entry_match { + } u; + /* size of data */ + unsigned int match_size; ++#ifdef KERNEL_64_USERSPACE_32 ++ unsigned int pad; ++#endif + unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace)))); + }; + +@@ -142,6 +154,9 @@ struct ebt_entry_watcher { + } u; + /* size of data */ + unsigned int watcher_size; ++#ifdef KERNEL_64_USERSPACE_32 ++ unsigned int pad; ++#endif + unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace)))); + }; + +@@ -155,6 +170,9 @@ struct ebt_entry_target { + } u; + /* size of data */ + unsigned int target_size; ++#ifdef KERNEL_64_USERSPACE_32 ++ unsigned int pad; ++#endif + unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace)))); + }; + +@@ -162,6 +180,9 @@ struct ebt_entry_target { + struct ebt_standard_target { + struct ebt_entry_target target; + int verdict; ++#ifdef KERNEL_64_USERSPACE_32 ++ unsigned int pad; ++#endif + }; + + /* one entry */ +-- +2.26.2 + diff --git a/package/ebtables/0003-configure.ac-add-option-enable-kernel-64-userland-32.patch b/package/ebtables/0003-configure.ac-add-option-enable-kernel-64-userland-32.patch new file mode 100644 index 00000000..cb57b395 --- /dev/null +++ b/package/ebtables/0003-configure.ac-add-option-enable-kernel-64-userland-32.patch @@ -0,0 +1,51 @@ +From ebf0236270b977a62c522bc32810bc9f8edc72d1 Mon Sep 17 00:00:00 2001 +From: Thomas De Schampheleire +Date: Wed, 24 Mar 2021 13:40:14 +0100 +Subject: [PATCH] configure.ac: add option --enable-kernel-64-userland-32 + +The ebtables build system seems to assume that 'sparc64' is the +only case where KERNEL_64_USERSPACE_32 is relevant, but this is not true. +This situation can happen on many architectures, especially in embedded +systems. For example, an Aarch64 processor with kernel in 64-bit but +userland build for 32-bit Arm. Or a 64-bit MIPS Octeon III processor, with +userland running in the 'n32' ABI. + +While it is possible to set CFLAGS in the environment when calling the +configure script, the caller would need to know to not only specify +KERNEL_64_USERSPACE_32 but also the EBT_MIN_ALIGN value. + +Instead, add a configure option. All internal details can then be handled by +the configure script. + +Signed-off-by: Thomas De Schampheleire +Upstream-Status: http://patchwork.ozlabs.org/project/netfilter-devel/patch/20210518181730.13436-2-patrickdepinguin@gmail.com/ +--- + configure.ac | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index c24ede3..3e89c0c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -15,10 +15,17 @@ AS_IF([test "x$LOCKFILE" = x], [LOCKFILE="/var/lib/ebtables/lock"]) + + regular_CFLAGS="-Wall -Wunused" + regular_CPPFLAGS="" ++ + case "$host" in + sparc64-*) +- regular_CPPFLAGS="$regular_CPPFLAGS -DEBT_MIN_ALIGN=8 -DKERNEL_64_USERSPACE_32";; ++ enable_kernel_64_userland_32=yes ;; + esac ++AC_ARG_ENABLE([kernel-64-userland-32], ++ AC_HELP_STRING([--enable-kernel-64-userland-32], [indicate that ebtables will be built as a 32-bit application but run under a 64-bit kernel]) ++) ++AS_IF([test "x$enable_kernel_64_userland_32" = xyes], ++ [regular_CPPFLAGS="$regular_CPPFLAGS -DEBT_MIN_ALIGN=8 -DKERNEL_64_USERSPACE_32"] ++) + + AC_SUBST([regular_CFLAGS]) + AC_SUBST([regular_CPPFLAGS]) +-- +2.26.2 + diff --git a/package/ebtables/Config.in b/package/ebtables/Config.in new file mode 100644 index 00000000..703e55a3 --- /dev/null +++ b/package/ebtables/Config.in @@ -0,0 +1,23 @@ +config BR2_PACKAGE_EBTABLES + bool "ebtables" + depends on BR2_USE_MMU # fork() + help + Ethernet bridge frame table administration + + http://ebtables.netfilter.org/ + +if BR2_PACKAGE_EBTABLES + +config BR2_PACKAGE_EBTABLES_UTILS_SAVE + bool "ebtables save" + select BR2_PACKAGE_BASH # runtime + select BR2_PACKAGE_BUSYBOX_SHOW_OTHERS # bash + help + Install the ebtables-legacy-save tool + +config BR2_PACKAGE_EBTABLES_UTILS_RESTORE + bool "ebtables restore" + help + Install the ebtables-legacy-restore tool + +endif diff --git a/package/ebtables/ebtables.hash b/package/ebtables/ebtables.hash new file mode 100644 index 00000000..98106b0d --- /dev/null +++ b/package/ebtables/ebtables.hash @@ -0,0 +1,4 @@ +# ftp://ftp.netfilter.org/pub/ebtables/ebtables-2.0.11.tar.gz.sha256sum +sha256 b71f654784a726329f88b412ef7b96b4e5d786ed2bd28193ed7b4c0d677dfd2a ebtables-2.0.11.tar.gz +# Locally computed +sha256 ebdb8ae564c952792017ec680e2edd30443642216eb9f8a3d8fa166c0cb628c1 COPYING diff --git a/package/ebtables/ebtables.mk b/package/ebtables/ebtables.mk new file mode 100644 index 00000000..2f9dd5ac --- /dev/null +++ b/package/ebtables/ebtables.mk @@ -0,0 +1,49 @@ +################################################################################ +# +# ebtables +# +################################################################################ + +EBTABLES_VERSION = 2.0.11 +EBTABLES_SITE = http://ftp.netfilter.org/pub/ebtables +EBTABLES_LICENSE = GPL-2.0+ +EBTABLES_LICENSE_FILES = COPYING +EBTABLES_CPE_ID_VENDOR = netfilter +EBTABLES_SELINUX_MODULES = iptables + +# for 0003-configure.ac-add-option-enable-kernel-64-userland-32.patch +EBTABLES_AUTORECONF = YES +ifeq ($(BR2_KERNEL_64_USERLAND_32),y) +EBTABLES_CONF_OPTS += --enable-kernel-64-userland-32 +endif + +ifeq ($(BR2_PACKAGE_EBTABLES_UTILS_SAVE),y) +define EBTABLES_INSTALL_TARGET_UTILS_SAVE + $(INSTALL) -m 0755 -D $(@D)/ebtables-save.sh $(TARGET_DIR)/usr/sbin/ebtables-legacy-save +endef +EBTABLES_POST_INSTALL_TARGET_HOOKS += EBTABLES_INSTALL_TARGET_UTILS_SAVE +else +# ebtables-legacy-save is installed by default, thus remove it from target +define EBTABLES_REMOVE_UTILS_SAVE + $(RM) -f $(TARGET_DIR)/usr/sbin/ebtables-legacy-save +endef +EBTABLES_POST_INSTALL_TARGET_HOOKS += EBTABLES_REMOVE_UTILS_SAVE +endif + +# ebtables-legacy-restore is installed by default, thus remove it if not +# selected +ifeq ($(BR2_PACKAGE_EBTABLES_UTILS_RESTORE),) +define EBTABLES_REMOVE_UTILS_RESTORE + $(RM) -f $(TARGET_DIR)/usr/sbin/ebtables-legacy-restore +endef +EBTABLES_POST_INSTALL_TARGET_HOOKS += EBTABLES_REMOVE_UTILS_RESTORE +endif + +ifeq ($(BR2_PACKAGE_IPTABLES_NFTABLES),) +define EBTABLES_INSTALL_LEGACY_SYMLINK + ln -sf /usr/sbin/ebtables-legacy $(TARGET_DIR)/sbin/ebtables +endef +EBTABLES_POST_INSTALL_TARGET_HOOKS += EBTABLES_INSTALL_LEGACY_SYMLINK +endif + +$(eval $(autotools-package)) diff --git a/package/ecryptfs-utils/0001-musl.patch b/package/ecryptfs-utils/0001-musl.patch new file mode 100644 index 00000000..4a3b8a70 --- /dev/null +++ b/package/ecryptfs-utils/0001-musl.patch @@ -0,0 +1,35 @@ +fix musl build + +Patch inspired by +https://github.com/kraj/meta-musl/blob/master/recipes-core/util-linux/util-linux-2.25/0001-switch_root-use-typeof-instead-of-__SWORD_TYPE-for-s.patch + +Signed-off-by: Bernd Kuhls + +diff -uNr ecryptfs-utils-109.org/src/utils/mount.ecryptfs_private.c ecryptfs-utils-109/src/utils/mount.ecryptfs_private.c +--- ecryptfs-utils-109.org/src/utils/mount.ecryptfs_private.c 2016-01-22 17:04:52.000000000 +0100 ++++ ecryptfs-utils-109/src/utils/mount.ecryptfs_private.c 2016-01-24 16:52:37.000000000 +0100 +@@ -224,6 +224,7 @@ + + static int check_cwd_f_type() + { ++ struct statfs buf; + /** + * This is *not* a list of compatible lower filesystems list for + * eCryptfs. This is a list of filesystems that we reasonably expect to +@@ -235,7 +236,7 @@ + * deceive other programs with a crafted /proc/self/*. See + * https://launchpad.net/bugs/1530566 for more details. + */ +- __SWORD_TYPE f_type_whitelist[] = { ++ typeof(buf.f_type) f_type_whitelist[] = { + 0x61756673 /* AUFS_SUPER_MAGIC */, + 0x9123683E /* BTRFS_SUPER_MAGIC */, + 0x00C36400 /* CEPH_SUPER_MAGIC */, +@@ -259,7 +260,6 @@ + 0x58465342 /* XFS_SB_MAGIC */, + 0x2FC12FC1 /* ZFS_SUPER_MAGIC */, + }; +- struct statfs buf; + size_t i, whitelist_len; + + if (statfs(".", &buf) != 0) { diff --git a/package/ecryptfs-utils/0002-openssl110.patch b/package/ecryptfs-utils/0002-openssl110.patch new file mode 100644 index 00000000..3ae29a60 --- /dev/null +++ b/package/ecryptfs-utils/0002-openssl110.patch @@ -0,0 +1,173 @@ +Fix build with OpenSSL 1.1.x + +Downloaded from upstream commit +https://code.launchpad.net/~jelle-vdwaa/ecryptfs/ecryptfs/+merge/319746 + +Signed-off-by: Bernd Kuhls + +=== modified file 'src/key_mod/ecryptfs_key_mod_openssl.c' +--- a/src/key_mod/ecryptfs_key_mod_openssl.c 2013-10-25 19:45:09 +0000 ++++ b/src/key_mod/ecryptfs_key_mod_openssl.c 2017-06-02 18:27:28 +0000 +@@ -41,6 +41,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -55,6 +56,19 @@ + char *passphrase; + }; + ++#if OPENSSL_VERSION_NUMBER < 0x10100000L ++static void RSA_get0_key(const RSA *r, ++ const BIGNUM **n, const BIGNUM **e, const BIGNUM **d) ++{ ++ if (n != NULL) ++ *n = r->n; ++ if (e != NULL) ++ *e = r->e; ++ if (d != NULL) ++ *d = r->d; ++} ++#endif ++ + static void + ecryptfs_openssl_destroy_openssl_data(struct openssl_data *openssl_data) + { +@@ -142,6 +156,7 @@ + { + int len, nbits, ebits, i; + int nbytes, ebytes; ++ const BIGNUM *key_n, *key_e; + unsigned char *hash; + unsigned char *data = NULL; + int rc = 0; +@@ -152,11 +167,13 @@ + rc = -ENOMEM; + goto out; + } +- nbits = BN_num_bits(key->n); ++ RSA_get0_key(key, &key_n, NULL, NULL); ++ nbits = BN_num_bits(key_n); + nbytes = nbits / 8; + if (nbits % 8) + nbytes++; +- ebits = BN_num_bits(key->e); ++ RSA_get0_key(key, NULL, &key_e, NULL); ++ ebits = BN_num_bits(key_e); + ebytes = ebits / 8; + if (ebits % 8) + ebytes++; +@@ -179,11 +196,13 @@ + data[i++] = '\02'; + data[i++] = (nbits >> 8); + data[i++] = nbits; +- BN_bn2bin(key->n, &(data[i])); ++ RSA_get0_key(key, &key_n, NULL, NULL); ++ BN_bn2bin(key_n, &(data[i])); + i += nbytes; + data[i++] = (ebits >> 8); + data[i++] = ebits; +- BN_bn2bin(key->e, &(data[i])); ++ RSA_get0_key(key, NULL, &key_e, NULL); ++ BN_bn2bin(key_e, &(data[i])); + i += ebytes; + SHA1(data, len + 3, hash); + to_hex(sig, (char *)hash, ECRYPTFS_SIG_SIZE); +@@ -278,7 +297,9 @@ + BIO *in = NULL; + int rc; + ++ #if OPENSSL_VERSION_NUMBER < 0x10100000L + CRYPTO_malloc_init(); ++ #endif + ERR_load_crypto_strings(); + OpenSSL_add_all_algorithms(); + ENGINE_load_builtin_engines(); + +=== modified file 'src/key_mod/ecryptfs_key_mod_pkcs11_helper.c' +--- a/src/key_mod/ecryptfs_key_mod_pkcs11_helper.c 2013-10-25 19:45:09 +0000 ++++ b/src/key_mod/ecryptfs_key_mod_pkcs11_helper.c 2017-06-02 18:27:28 +0000 +@@ -41,6 +41,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -77,6 +78,19 @@ + typedef const unsigned char *__pkcs11_openssl_d2i_t; + #endif + ++#if OPENSSL_VERSION_NUMBER < 0x10100000L ++static void RSA_get0_key(const RSA *r, ++ const BIGNUM **n, const BIGNUM **e, const BIGNUM **d) ++{ ++ if (n != NULL) ++ *n = r->n; ++ if (e != NULL) ++ *e = r->e; ++ if (d != NULL) ++ *d = r->d; ++} ++#endif ++ + /** + * ecryptfs_pkcs11h_deserialize + * @pkcs11h_data: The deserialized version of the key module data; +@@ -282,7 +296,11 @@ + goto out; + } + ++ #if OPENSSL_VERSION_NUMBER < 0x10100000L + if (pubkey->type != EVP_PKEY_RSA) { ++ #else ++ if (EVP_PKEY_base_id(pubkey) != EVP_PKEY_RSA) { ++ #endif + syslog(LOG_ERR, "PKCS#11: Invalid public key algorithm"); + rc = -EIO; + goto out; +@@ -318,6 +336,7 @@ + int nbytes, ebytes; + char *hash = NULL; + char *data = NULL; ++ const BIGNUM *rsa_n, *rsa_e; + int rc; + + if ((rc = ecryptfs_pkcs11h_get_public_key(&rsa, blob))) { +@@ -331,11 +350,13 @@ + rc = -ENOMEM; + goto out; + } +- nbits = BN_num_bits(rsa->n); ++ RSA_get0_key(rsa, &rsa_n, NULL, NULL); ++ nbits = BN_num_bits(rsa_n); + nbytes = nbits / 8; + if (nbits % 8) + nbytes++; +- ebits = BN_num_bits(rsa->e); ++ RSA_get0_key(rsa, NULL, &rsa_e, NULL); ++ ebits = BN_num_bits(rsa_e); + ebytes = ebits / 8; + if (ebits % 8) + ebytes++; +@@ -358,11 +379,13 @@ + data[i++] = '\02'; + data[i++] = (char)(nbits >> 8); + data[i++] = (char)nbits; +- BN_bn2bin(rsa->n, &(data[i])); ++ RSA_get0_key(rsa, &rsa_n, NULL, NULL); ++ BN_bn2bin(rsa_n, &(data[i])); + i += nbytes; + data[i++] = (char)(ebits >> 8); + data[i++] = (char)ebits; +- BN_bn2bin(rsa->e, &(data[i])); ++ RSA_get0_key(rsa, NULL, &rsa_e, NULL); ++ BN_bn2bin(rsa_e, &(data[i])); + i += ebytes; + SHA1(data, len + 3, hash); + to_hex(sig, hash, ECRYPTFS_SIG_SIZE); + diff --git a/package/ecryptfs-utils/0003-fix-parallel-build-issue.patch b/package/ecryptfs-utils/0003-fix-parallel-build-issue.patch new file mode 100644 index 00000000..e2aa740d --- /dev/null +++ b/package/ecryptfs-utils/0003-fix-parallel-build-issue.patch @@ -0,0 +1,61 @@ +fix parallel build issue + +Build randomly fails since December 2017 on buildroot +(http://autobuild.buildroot.org/?reason=ecryptfs-utils-111): + +make[5]: Entering directory '/home/buildroot/autobuild/instance-2/output-1/build/ecryptfs-utils-111/src/utils' + /bin/mkdir -p '/home/buildroot/autobuild/instance-2/output-1/target/sbin' + /bin/bash ../../libtool --mode=install /usr/bin/install -c mount.ecryptfs umount.ecryptfs mount.ecryptfs_private '/home/buildroot/autobuild/instance-2/output-1/target/sbin' +libtool: install: /usr/bin/install -c mount.ecryptfs /home/buildroot/autobuild/instance-2/output-1/target/sbin/mount.ecryptfs +/usr/bin/install: cannot create regular file '/home/buildroot/autobuild/instance-2/output-1/target/sbin/mount.ecryptfs': File exists +Makefile:832: recipe for target 'install-rootsbinPROGRAMS' failed +make[5]: *** [install-rootsbinPROGRAMS] Error 1 + +As spotted by Thomas Petazzoni, build failure happens because of the +following line in src/utils/Makefile.am: + +install-exec-hook: install-rootsbinPROGRAMS + -rm -f "$(DESTDIR)/$(rootsbindir)/umount.ecryptfs_private" + $(LN_S) "mount.ecryptfs_private" "$(DESTDIR)/$(rootsbindir)/umount.ecryptfs_private" + +The install-exec-hook target should not have a dependency on +install-rootsbinPROGRAMS. + +From https://www.gnu.org/software/automake/manual/html_node/Extending.html#Extending: + +""" +In contrast, some rules also have a way to run another rule, called a +hook; hooks are always executed after the main rule’s work is done. The +hook is named after the principal target, with ‘-hook’ appended. The +targets allowing hooks are install-data, install-exec, uninstall, dist, +and distcheck. + +For instance, here is how to create a hard link to an installed program: + +install-exec-hook: + ln $(DESTDIR)$(bindir)/program$(EXEEXT) \ + $(DESTDIR)$(bindir)/proglink$(EXEEXT) + +""" + +So, they explicitly say that these hooks are run after the main rule +work is done, which means the dependency on install-rootsbinPROGRAMS is +not needed. And the example they use to illustrate is *exactly* the +situation of ecryptfs-utils: creating a link to a program that was +installed. + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://bugs.launchpad.net/ecryptfs/+bug/1857622] + +diff -Nuar ecryptfs-utils-111-orig/src/utils/Makefile.in ecryptfs-utils-111/src/utils/Makefile.in +--- ecryptfs-utils-111-orig/src/utils/Makefile.in 2019-12-26 15:14:16.656146065 +0100 ++++ ecryptfs-utils-111/src/utils/Makefile.in 2019-12-26 17:36:07.108496164 +0100 +@@ -1522,7 +1522,7 @@ + .PRECIOUS: Makefile + + +-install-exec-hook: install-rootsbinPROGRAMS ++install-exec-hook: + -rm -f "$(DESTDIR)/$(rootsbindir)/umount.ecryptfs_private" + $(LN_S) "mount.ecryptfs_private" "$(DESTDIR)/$(rootsbindir)/umount.ecryptfs_private" + diff --git a/package/ecryptfs-utils/Config.in b/package/ecryptfs-utils/Config.in new file mode 100644 index 00000000..0c39f48d --- /dev/null +++ b/package/ecryptfs-utils/Config.in @@ -0,0 +1,35 @@ +config BR2_PACKAGE_ECRYPTFS_UTILS + bool "ecryptfs-utils" + depends on BR2_USE_WCHAR # gettext + depends on BR2_USE_MMU # keyutils + depends on BR2_TOOLCHAIN_HAS_THREADS # libnss -> libnspr + depends on BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT # libnss -> libnspr + depends on !BR2_MIPS_NABI32 # libnss + depends on !BR2_STATIC_LIBS # libnss, keyutils + select BR2_PACKAGE_KEYUTILS + select BR2_PACKAGE_LIBNSS + # runtime dependency only, some scripts are using the + # 'gettext' program to get translations + select BR2_PACKAGE_GETTEXT + # runtime dependency only + select BR2_PACKAGE_GETENT + help + eCryptfs is a POSIX-compliant enterprise cryptographic + filesystem for Linux. It is stacked on top of any other + Linux filesystem, it stores cryptographic metadata in the + header of each file written. + + The eCryptfs kernel module is available in all Linux kernels + since version 2.6.19. This package provides userspace + utilities needed to mount eCryptfs. + + Files are encrypted using a passphrase. Consider building + openssl for another method. + + http://ecryptfs.org + +comment "ecryptfs-utils needs a toolchain w/ threads, wchar, dynamic library" + depends on BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR || \ + BR2_STATIC_LIBS diff --git a/package/ecryptfs-utils/ecryptfs-utils.hash b/package/ecryptfs-utils/ecryptfs-utils.hash new file mode 100644 index 00000000..8a0b111e --- /dev/null +++ b/package/ecryptfs-utils/ecryptfs-utils.hash @@ -0,0 +1,5 @@ +# From https://launchpad.net/ecryptfs/trunk/111/+download/ecryptfs-utils_111.orig.tar.gz/+md5 +md5 83513228984f671930752c3518cac6fd ecryptfs-utils_111.orig.tar.gz +# Locally computed +sha256 112cb3e37e81a1ecd8e39516725dec0ce55c5f3df6284e0f4cc0f118750a987f ecryptfs-utils_111.orig.tar.gz +sha256 91df39d1816bfb17a4dda2d3d2c83b1f6f2d38d53e53e41e8f97ad5ac46a0cad COPYING diff --git a/package/ecryptfs-utils/ecryptfs-utils.mk b/package/ecryptfs-utils/ecryptfs-utils.mk new file mode 100644 index 00000000..f087e81a --- /dev/null +++ b/package/ecryptfs-utils/ecryptfs-utils.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# ecryptfs-utils +# +################################################################################ + +ECRYPTFS_UTILS_VERSION = 111 +ECRYPTFS_UTILS_SOURCE = ecryptfs-utils_$(ECRYPTFS_UTILS_VERSION).orig.tar.gz +ECRYPTFS_UTILS_SITE = https://launchpad.net/ecryptfs/trunk/$(ECRYPTFS_UTILS_VERSION)/+download +ECRYPTFS_UTILS_LICENSE = GPL-2.0+ +ECRYPTFS_UTILS_LICENSE_FILES = COPYING +ECRYPTFS_UTILS_CPE_ID_VENDOR = ecryptfs + +ECRYPTFS_UTILS_DEPENDENCIES = keyutils libnss host-intltool +ECRYPTFS_UTILS_CONF_OPTS = --disable-pywrap + +#Needed for build system to find pk11func.h and libnss3.so +ECRYPTFS_UTILS_CONF_ENV = \ + ac_cv_path_POD2MAN=true \ + NSS_CFLAGS="-I$(STAGING_DIR)/usr/include/nss -I$(STAGING_DIR)/usr/include/nspr" \ + NSS_LIBS="-lnss3" + +ifeq ($(BR2_PACKAGE_LINUX_PAM),y) +ECRYPTFS_UTILS_CONF_OPTS += --enable-pam +ECRYPTFS_UTILS_DEPENDENCIES += linux-pam +else +ECRYPTFS_UTILS_CONF_OPTS += --disable-pam +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +ECRYPTFS_UTILS_CONF_OPTS += --enable-openssl +ECRYPTFS_UTILS_DEPENDENCIES += openssl +else +ECRYPTFS_UTILS_CONF_OPTS += --disable-openssl +endif + +$(eval $(autotools-package)) diff --git a/package/ed/Config.in b/package/ed/Config.in new file mode 100644 index 00000000..21ba79e1 --- /dev/null +++ b/package/ed/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_ED + bool "ed" + help + A line-oriented text editor. Used to create, display, modify, + and otherwise manipulate text files. Often used in scripts + rather than invoked directly. + + http://www.gnu.org/software/ed/ diff --git a/package/ed/ed.hash b/package/ed/ed.hash new file mode 100644 index 00000000..3169923c --- /dev/null +++ b/package/ed/ed.hash @@ -0,0 +1,4 @@ +# From https://lists.gnu.org/archive/html/bug-ed/2020-02/msg00002.html +sha256 cfc07a14ab048a758473ce222e784fbf031485bcd54a76f74acfee1f390d8b2c ed-1.16.tar.lz +# Locally calculated +sha256 f03a12bef9dfb7281864a0dd965166d4f4ec7a66633df2bc72fa4363e57de02c COPYING diff --git a/package/ed/ed.mk b/package/ed/ed.mk new file mode 100644 index 00000000..1b299781 --- /dev/null +++ b/package/ed/ed.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# ed +# +################################################################################ + +ED_VERSION = 1.16 +ED_SITE = $(BR2_GNU_MIRROR)/ed +ED_SOURCE = ed-$(ED_VERSION).tar.lz +ED_LICENSE = GPL-3.0+ +ED_LICENSE_FILES = COPYING +ED_CPE_ID_VENDOR = gnu + +define ED_CONFIGURE_CMDS + (cd $(@D); \ + $(TARGET_MAKE_ENV) ./configure \ + --prefix=/usr \ + $(TARGET_CONFIGURE_OPTS) \ + ) +endef + +define ED_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define ED_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR="$(TARGET_DIR)" install +endef + +$(eval $(generic-package)) diff --git a/package/edid-decode/Config.in b/package/edid-decode/Config.in new file mode 100644 index 00000000..ddf1942c --- /dev/null +++ b/package/edid-decode/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_EDID_DECODE + bool "edid-decode" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 # C++11 + help + Decode EDID data in human-readable format. + + https://git.linuxtv.org/edid-decode.git/ + +comment "edid-decode needs a toolchain w/ C++, gcc >= 4.7" + depends on !!BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 diff --git a/package/edid-decode/edid-decode.hash b/package/edid-decode/edid-decode.hash new file mode 100644 index 00000000..65d6c710 --- /dev/null +++ b/package/edid-decode/edid-decode.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 c1a6222083c59f0499b3e43c159aee7e4c6c07d33b790d490a13fd62942fa9b5 edid-decode-188950472c19492547e298b27f9da0d72cf826df-br1.tar.gz +sha256 9bc7ab961e9a07dc84eaa0210af388def56d024357e79671fb89fe27d073eed7 LICENSE diff --git a/package/edid-decode/edid-decode.mk b/package/edid-decode/edid-decode.mk new file mode 100644 index 00000000..7e463c02 --- /dev/null +++ b/package/edid-decode/edid-decode.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# edid-decode +# +################################################################################ + +EDID_DECODE_VERSION = 188950472c19492547e298b27f9da0d72cf826df +EDID_DECODE_SITE = git://linuxtv.org/edid-decode.git +EDID_DECODE_LICENSE = MIT +EDID_DECODE_LICENSE_FILES = LICENSE + +define EDID_DECODE_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + CFLAGS="$(TARGET_CXXFLAGS) -std=c++11" +endef + +define EDID_DECODE_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + DESTDIR="$(TARGET_DIR)" install +endef + +$(eval $(generic-package)) diff --git a/package/efibootmgr/0001-Allow-build-with-uClibc.patch b/package/efibootmgr/0001-Allow-build-with-uClibc.patch new file mode 100644 index 00000000..fd29233d --- /dev/null +++ b/package/efibootmgr/0001-Allow-build-with-uClibc.patch @@ -0,0 +1,40 @@ +From bbfcc60497c326576bb23cb01d90115ef3cf6947 Mon Sep 17 00:00:00 2001 +From: Andy Shevchenko +Date: Fri, 25 Nov 2016 20:26:52 +0200 +Subject: [PATCH] Remove unneeded include + +This fixes the build with uClibc. + +Signed-off-by: Andy Shevchenko +--- + src/efibootdump.c | 1 - + src/eficonman.c | 1 - + 2 files changed, 2 deletions(-) + +diff --git a/src/efibootdump.c b/src/efibootdump.c +index 6ff8360..7c5a1c5 100644 +--- a/src/efibootdump.c ++++ b/src/efibootdump.c +@@ -19,7 +19,6 @@ + #include + #include + #include +-#include + #include + + #include "error.h" +diff --git a/src/eficonman.c b/src/eficonman.c +index 2c2be38..9bfae79 100644 +--- a/src/eficonman.c ++++ b/src/eficonman.c +@@ -17,7 +17,6 @@ + #include + #include + #include +-#include + #include + + #define _(String) gettext (String) +-- +2.10.2 + diff --git a/package/efibootmgr/Config.in b/package/efibootmgr/Config.in new file mode 100644 index 00000000..98ff71c9 --- /dev/null +++ b/package/efibootmgr/Config.in @@ -0,0 +1,23 @@ +config BR2_PACKAGE_EFIBOOTMGR + bool "efibootmgr" + depends on BR2_PACKAGE_EFIVAR_ARCH_SUPPORTS # efivar + depends on !BR2_STATIC_LIBS # efivar + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12 # efivar + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # efivar + depends on !BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS + select BR2_PACKAGE_EFIVAR + select BR2_PACKAGE_POPT + help + A Linux user-space application to modify the Intel Extensible + Firmware Interface (EFI) Boot Manager. This application can + create and destroy boot entries, change the boot order, change + the next running boot option, and more. + + https://github.com/rhboot/efibootmgr + +comment "efibootmgr needs a toolchain w/ dynamic library, headers >= 3.12, gcc >= 4.9" + depends on BR2_PACKAGE_EFIVAR_ARCH_SUPPORTS + depends on BR2_STATIC_LIBS || \ + !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12 || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + depends on !BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS diff --git a/package/efibootmgr/efibootmgr.hash b/package/efibootmgr/efibootmgr.hash new file mode 100644 index 00000000..b786a415 --- /dev/null +++ b/package/efibootmgr/efibootmgr.hash @@ -0,0 +1,3 @@ +# locally computed hash +sha256 5a708b9690cdc631fd75d8f598128d20cad007e711b975b0143f9517c2dd1bf4 efibootmgr-15.tar.gz +sha256 dcc100d4161cc0b7177545ab6e47216f84857cda3843847c792a25289852dcaa COPYING diff --git a/package/efibootmgr/efibootmgr.mk b/package/efibootmgr/efibootmgr.mk new file mode 100644 index 00000000..079a9b72 --- /dev/null +++ b/package/efibootmgr/efibootmgr.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# efibootmgr +# +################################################################################ + +EFIBOOTMGR_VERSION = 15 +EFIBOOTMGR_SITE = $(call github,rhboot,efibootmgr,$(EFIBOOTMGR_VERSION)) +EFIBOOTMGR_LICENSE = GPL-2.0+ +EFIBOOTMGR_LICENSE_FILES = COPYING +EFIBOOTMGR_DEPENDENCIES = host-pkgconf efivar popt $(TARGET_NLS_DEPENDENCIES) +EFIBOOTMGR_LDFLAGS = $(TARGET_LDFLAGS) $(TARGET_NLS_LIBS) +EFIBOOTMGR_MAKE_ARGS = EFIDIR=buildroot + +define EFIBOOTMGR_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) \ + LDFLAGS="$(EFIBOOTMGR_LDFLAGS)" $(MAKE1) -C $(@D) \ + $(EFIBOOTMGR_MAKE_ARGS) +endef + +define EFIBOOTMGR_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + $(EFIBOOTMGR_MAKE_ARGS) DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/efivar/0001-Allow-build-with-uClibc.patch b/package/efivar/0001-Allow-build-with-uClibc.patch new file mode 100644 index 00000000..0db99557 --- /dev/null +++ b/package/efivar/0001-Allow-build-with-uClibc.patch @@ -0,0 +1,37 @@ +From f1f24eb486c4376066884bae3c31f1c455a79836 Mon Sep 17 00:00:00 2001 +From: Andy Shevchenko +Date: Fri, 25 Nov 2016 19:42:27 +0200 +Subject: [PATCH] Allow build with uClibc + +Basically this replaces type definitions in . + +Signed-off-by: Andy Shevchenko +--- + src/export.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/src/export.c b/src/export.c +index 8321bd3..ef36add 100644 +--- a/src/export.c ++++ b/src/export.c +@@ -23,10 +23,16 @@ + #include + #include + #include +-#include + + #include "efivar.h" + ++#ifdef __UCLIBC__ ++typedef int_least16_t char16_t; ++typedef int_least32_t char32_t; ++#else ++#include ++#endif ++ + #define EFIVAR_MAGIC 0xf3df1597 + + #define ATTRS_UNSET 0xa5a5a5a5a5a5a5a5 +-- +2.20.1 + diff --git a/package/efivar/0002-dp.h-make-format_guid-handle-misaligned-guid-pointer.patch b/package/efivar/0002-dp.h-make-format_guid-handle-misaligned-guid-pointer.patch new file mode 100644 index 00000000..37fd39a1 --- /dev/null +++ b/package/efivar/0002-dp.h-make-format_guid-handle-misaligned-guid-pointer.patch @@ -0,0 +1,62 @@ +From b98ba8921010d03f46704a476c69861515deb1ca Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 7 Jan 2019 10:30:59 -0500 +Subject: [PATCH] dp.h: make format_guid() handle misaligned guid pointers + safely. + +GCC 9 adds -Werror=address-of-packed-member, which causes us to see the +build error reported at + https://bugzilla.opensuse.org/show_bug.cgi?id=1120862 . + +That bug report shows us the following: + +In file included from dp.c:26: +dp.h: In function 'format_vendor_helper': +dp.h:120:37: error: taking address of packed member of 'struct ' may result in an unaligned pointer value [-Werror=address-of-packed-member] + 120 | format_guid(buf, size, off, label, &dp->hw_vendor.vendor_guid); + | ^~~~~~~~~~~~~~~~~~~~~~~~~~ +dp.h:74:25: note: in definition of macro 'format_guid' + 74 | _rc = efi_guid_to_str(guid, &_guidstr); \ + | ^~~~ +cc1: all warnings being treated as errors + +This patch makes format_guid() use a local variable as a bounce buffer +in the case that the guid we're passed is aligned as chaotic neutral. + +Note that this only fixes this instance and there may be others that bz +didn't show because it exited too soon, and I don't have a gcc 9 build +in front of me right now. + +Signed-off-by: Peter Jones +[james.hilliard1@gmail.com: backport from upstream commit +b98ba8921010d03f46704a476c69861515deb1ca] +Signed-off-by: James Hilliard +--- + src/dp.h | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/src/dp.h b/src/dp.h +index aa4e390..20cb608 100644 +--- a/src/dp.h ++++ b/src/dp.h +@@ -70,8 +70,15 @@ + #define format_guid(buf, size, off, dp_type, guid) ({ \ + int _rc; \ + char *_guidstr = NULL; \ +- \ +- _rc = efi_guid_to_str(guid, &_guidstr); \ ++ efi_guid_t _guid; \ ++ const efi_guid_t * const _guid_p = \ ++ likely(__alignof__(guid) == sizeof(guid)) \ ++ ? guid \ ++ : &_guid; \ ++ \ ++ if (unlikely(__alignof__(guid) == sizeof(guid))) \ ++ memmove(&_guid, guid, sizeof(_guid)); \ ++ _rc = efi_guid_to_str(_guid_p, &_guidstr); \ + if (_rc < 0) { \ + efi_error("could not build %s GUID DP string", \ + dp_type); \ +-- +2.20.1 + diff --git a/package/efivar/0003-Fix-all-the-places-Werror-address-of-packed-member-c.patch b/package/efivar/0003-Fix-all-the-places-Werror-address-of-packed-member-c.patch new file mode 100644 index 00000000..52db443b --- /dev/null +++ b/package/efivar/0003-Fix-all-the-places-Werror-address-of-packed-member-c.patch @@ -0,0 +1,174 @@ +From c3c553db85ff10890209d0fe48fb4856ad68e4e0 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Thu, 21 Feb 2019 15:20:12 -0500 +Subject: [PATCH] Fix all the places -Werror=address-of-packed-member catches. + +This gets rid of all the places GCC 9's -Werror=address-of-packed-member +flags as problematic. + +Fixes github issue #123 + +Signed-off-by: Peter Jones +[james.hilliard1@gmail.com: backport from upstream commit +c3c553db85ff10890209d0fe48fb4856ad68e4e0] +Signed-off-by: James Hilliard +--- + src/dp-message.c | 6 ++++-- + src/dp.h | 12 ++++-------- + src/guid.c | 2 +- + src/include/efivar/efivar.h | 2 +- + src/ucs2.h | 27 +++++++++++++++++++-------- + 5 files changed, 29 insertions(+), 20 deletions(-) + +diff --git a/src/dp-message.c b/src/dp-message.c +index 3724e5f..9f96466 100644 +--- a/src/dp-message.c ++++ b/src/dp-message.c +@@ -620,11 +620,13 @@ _format_message_dn(char *buf, size_t size, const_efidp dp) + ) / sizeof(efi_ip_addr_t); + format(buf, size, off, "Dns", "Dns("); + for (int i=0; i < end; i++) { +- const efi_ip_addr_t *addr = &dp->dns.addrs[i]; ++ efi_ip_addr_t addr; ++ ++ memcpy(&addr, &dp->dns.addrs[i], sizeof(addr)); + if (i != 0) + format(buf, size, off, "Dns", ","); + format_ip_addr(buf, size, off, "Dns", +- dp->dns.is_ipv6, addr); ++ dp->dns.is_ipv6, &addr); + } + format(buf, size, off, "Dns", ")"); + break; +diff --git a/src/dp.h b/src/dp.h +index 20cb608..1f921d5 100644 +--- a/src/dp.h ++++ b/src/dp.h +@@ -71,13 +71,9 @@ + int _rc; \ + char *_guidstr = NULL; \ + efi_guid_t _guid; \ +- const efi_guid_t * const _guid_p = \ +- likely(__alignof__(guid) == sizeof(guid)) \ +- ? guid \ +- : &_guid; \ +- \ +- if (unlikely(__alignof__(guid) == sizeof(guid))) \ +- memmove(&_guid, guid, sizeof(_guid)); \ ++ const efi_guid_t * const _guid_p = &_guid; \ ++ \ ++ memmove(&_guid, guid, sizeof(_guid)); \ + _rc = efi_guid_to_str(_guid_p, &_guidstr); \ + if (_rc < 0) { \ + efi_error("could not build %s GUID DP string", \ +@@ -86,7 +82,7 @@ + _guidstr = onstack(_guidstr, \ + strlen(_guidstr)+1); \ + _rc = format(buf, size, off, dp_type, "%s", \ +- _guidstr); \ ++ _guidstr); \ + } \ + _rc; \ + }) +diff --git a/src/guid.c b/src/guid.c +index 306c9ff..3156b3b 100644 +--- a/src/guid.c ++++ b/src/guid.c +@@ -31,7 +31,7 @@ + extern const efi_guid_t efi_guid_zero; + + int NONNULL(1, 2) PUBLIC +-efi_guid_cmp(const efi_guid_t *a, const efi_guid_t *b) ++efi_guid_cmp(const void * const a, const void * const b) + { + return memcmp(a, b, sizeof (efi_guid_t)); + } +diff --git a/src/include/efivar/efivar.h b/src/include/efivar/efivar.h +index 316891c..ad6449d 100644 +--- a/src/include/efivar/efivar.h ++++ b/src/include/efivar/efivar.h +@@ -128,7 +128,7 @@ extern int efi_symbol_to_guid(const char *symbol, efi_guid_t *guid) + + extern int efi_guid_is_zero(const efi_guid_t *guid); + extern int efi_guid_is_empty(const efi_guid_t *guid); +-extern int efi_guid_cmp(const efi_guid_t *a, const efi_guid_t *b); ++extern int efi_guid_cmp(const void * const a, const void * const b); + + /* import / export functions */ + typedef struct efi_variable efi_variable_t; +diff --git a/src/ucs2.h b/src/ucs2.h +index dbb5900..edd8367 100644 +--- a/src/ucs2.h ++++ b/src/ucs2.h +@@ -23,16 +23,21 @@ + (((val) & ((mask) << (shift))) >> (shift)) + + static inline size_t UNUSED +-ucs2len(const uint16_t * const s, ssize_t limit) ++ucs2len(const void *vs, ssize_t limit) + { + ssize_t i; +- for (i = 0; i < (limit >= 0 ? limit : i+1) && s[i] != (uint16_t)0; i++) ++ const uint16_t *s = vs; ++ const uint8_t *s8 = vs; ++ ++ for (i = 0; ++ i < (limit >= 0 ? limit : i+1) && s8[0] != 0 && s8[1] != 0; ++ i++, s8 += 2, s++) + ; + return i; + } + + static inline size_t UNUSED +-ucs2size(const uint16_t * const s, ssize_t limit) ++ucs2size(const void *s, ssize_t limit) + { + size_t rc = ucs2len(s, limit); + rc *= sizeof (uint16_t); +@@ -69,10 +74,11 @@ utf8size(uint8_t *s, ssize_t limit) + } + + static inline unsigned char * UNUSED +-ucs2_to_utf8(const uint16_t * const chars, ssize_t limit) ++ucs2_to_utf8(const void * const voidchars, ssize_t limit) + { + ssize_t i, j; + unsigned char *ret; ++ const uint16_t * const chars = voidchars; + + if (limit < 0) + limit = ucs2len(chars, -1); +@@ -124,10 +130,12 @@ ucs2_to_utf8(const uint16_t * const chars, ssize_t limit) + } + + static inline ssize_t UNUSED NONNULL(4) +-utf8_to_ucs2(uint16_t *ucs2, ssize_t size, int terminate, uint8_t *utf8) ++utf8_to_ucs2(void *ucs2void, ssize_t size, int terminate, uint8_t *utf8) + { + ssize_t req; + ssize_t i, j; ++ uint16_t *ucs2 = ucs2void; ++ uint16_t val16; + + if (!ucs2 && size > 0) { + errno = EINVAL; +@@ -162,10 +170,13 @@ utf8_to_ucs2(uint16_t *ucs2, ssize_t size, int terminate, uint8_t *utf8) + val = utf8[i] & 0x7f; + i += 1; + } +- ucs2[j] = val; ++ val16 = val; ++ ucs2[j] = val16; ++ } ++ if (terminate) { ++ val16 = 0; ++ ucs2[j++] = val16; + } +- if (terminate) +- ucs2[j++] = (uint16_t)0; + return j; + }; + +-- +2.20.1 + diff --git a/package/efivar/0004-Fix-another-error-of-Werror-address-of-packed-member.patch b/package/efivar/0004-Fix-another-error-of-Werror-address-of-packed-member.patch new file mode 100644 index 00000000..b103e975 --- /dev/null +++ b/package/efivar/0004-Fix-another-error-of-Werror-address-of-packed-member.patch @@ -0,0 +1,57 @@ +From 0dad6d78a7fb5f6c5fb4a1d646040539db6cf865 Mon Sep 17 00:00:00 2001 +From: Chih-Wei Huang +Date: Tue, 26 Feb 2019 18:42:20 +0800 +Subject: [PATCH] Fix another error of -Werror=address-of-packed-member + +Android 9 clang complains: + +external/efivar/src/dp-message.c:367:24: error: taking address of packed member '' of class or structure 'efidp_infiniband' may result in an unaligned pointer value [-Werror,-Waddress-of-packed-member] + (efi_guid_t *)&dp->infiniband.ioc_guid); + ^~~~~~~~~~~~~~~~~~~~~~~ +external/efivar/src/dp.h:76:19: note: expanded from macro 'format_guid' + memmove(&_guid, guid, sizeof(_guid)); \ + ^~~~ +1 error generated. + +Since commit c3c553d the fifth parameter of format_guid() is treated as +a const void *. The casting is unnecessary. + +Signed-off-by: Chih-Wei Huang +[james.hilliard1@gmail.com: backport from upstream commit +0dad6d78a7fb5f6c5fb4a1d646040539db6cf865] +Signed-off-by: James Hilliard +--- + src/dp-media.c | 3 +-- + src/dp-message.c | 2 +- + 2 files changed, 2 insertions(+), 3 deletions(-) + +diff --git a/src/dp-media.c b/src/dp-media.c +index 96a576f..be691c4 100644 +--- a/src/dp-media.c ++++ b/src/dp-media.c +@@ -46,8 +46,7 @@ _format_media_dn(char *buf, size_t size, const_efidp dp) + break; + case EFIDP_HD_SIGNATURE_GUID: + format(buf, size, off, "HD", "GPT,"); +- format_guid(buf, size, off, "HD", +- (efi_guid_t *)dp->hd.signature); ++ format_guid(buf, size, off, "HD", dp->hd.signature); + format(buf, size, off, "HD", + ",0x%"PRIx64",0x%"PRIx64")", + dp->hd.start, dp->hd.size); +diff --git a/src/dp-message.c b/src/dp-message.c +index 9f96466..6b8e907 100644 +--- a/src/dp-message.c ++++ b/src/dp-message.c +@@ -364,7 +364,7 @@ _format_message_dn(char *buf, size_t size, const_efidp dp) + dp->infiniband.port_gid[1], + dp->infiniband.port_gid[0]); + format_guid(buf, size, off, "Infiniband", +- (efi_guid_t *)&dp->infiniband.ioc_guid); ++ &dp->infiniband.ioc_guid); + format(buf, size, off, "Infiniband", + ",%"PRIu64",%"PRIu64")", + dp->infiniband.target_port_id, +-- +2.20.1 + diff --git a/package/efivar/0005-ucs2.h-remove-unused-variable.patch b/package/efivar/0005-ucs2.h-remove-unused-variable.patch new file mode 100644 index 00000000..a814043c --- /dev/null +++ b/package/efivar/0005-ucs2.h-remove-unused-variable.patch @@ -0,0 +1,35 @@ +From fdb803402fb32fa6d020bac57a40c7efe4aabb7d Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Tue, 5 Mar 2019 17:23:24 +0100 +Subject: [PATCH] ucs2.h: remove unused variable + +The const uint16_t pointer is not used since now the two bytes of the +UCS-2 chars are checked to know if is the termination of the string. + +Signed-off-by: Javier Martinez Canillas +Signed-off-by: Peter Korsgaard +--- + src/ucs2.h | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/src/ucs2.h b/src/ucs2.h +index edd8367..e0390c3 100644 +--- a/src/ucs2.h ++++ b/src/ucs2.h +@@ -26,12 +26,11 @@ static inline size_t UNUSED + ucs2len(const void *vs, ssize_t limit) + { + ssize_t i; +- const uint16_t *s = vs; + const uint8_t *s8 = vs; + + for (i = 0; + i < (limit >= 0 ? limit : i+1) && s8[0] != 0 && s8[1] != 0; +- i++, s8 += 2, s++) ++ i++, s8 += 2) + ; + return i; + } +-- +2.20.1 + diff --git a/package/efivar/0006-ucs2.h-fix-logic-that-checks-for-UCS-2-string-termin.patch b/package/efivar/0006-ucs2.h-fix-logic-that-checks-for-UCS-2-string-termin.patch new file mode 100644 index 00000000..00b20332 --- /dev/null +++ b/package/efivar/0006-ucs2.h-fix-logic-that-checks-for-UCS-2-string-termin.patch @@ -0,0 +1,32 @@ +From 4e04afc2df9bbc26e5ab524b53a6f4f1e61d7c9e Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Tue, 5 Mar 2019 17:23:32 +0100 +Subject: [PATCH] ucs2.h: fix logic that checks for UCS-2 string termination + +Currently the loop to count the lenght of the UCS-2 string ends if either +of the two bytes are 0, but 0 is a valid value for UCS-2 character codes. + +So only break the loop when 0 is the value for both UCS-2 char bytes. + +Signed-off-by: Javier Martinez Canillas +Signed-off-by: Peter Korsgaard +--- + src/ucs2.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/ucs2.h b/src/ucs2.h +index e0390c3..fd8b056 100644 +--- a/src/ucs2.h ++++ b/src/ucs2.h +@@ -29,7 +29,7 @@ ucs2len(const void *vs, ssize_t limit) + const uint8_t *s8 = vs; + + for (i = 0; +- i < (limit >= 0 ? limit : i+1) && s8[0] != 0 && s8[1] != 0; ++ i < (limit >= 0 ? limit : i+1) && !(s8[0] == 0 && s8[1] == 0); + i++, s8 += 2) + ; + return i; +-- +2.20.1 + diff --git a/package/efivar/0007-gcc.specs-drop-Werror.patch b/package/efivar/0007-gcc.specs-drop-Werror.patch new file mode 100644 index 00000000..aa717fed --- /dev/null +++ b/package/efivar/0007-gcc.specs-drop-Werror.patch @@ -0,0 +1,44 @@ +From 8d5cf3347cce9d644f670ffd1d48e71d74635481 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 22 Mar 2021 07:52:34 +0100 +Subject: [PATCH] gcc.specs: drop -Werror + +Build with -Werror raises the following build failure with gcc 10: + +/home/buildroot/autobuild/run/instance-1/output-1/host/bin/aarch64-none-linux-gnu-gcc -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -I/home/buildroot/autobuild/run/instance-1/output-1/build/efivar-37/src/include/ -specs=/home/buildroot/autobuild/run/instance-1/output-1/build/efivar-37/gcc.specs -L. -fPIC -Wl,-z,muldefs -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -o efivar efivar.c -lefivar -ldl +In file included from efivar.h:28, + from efivar.c:40: +In function 'text_to_guid', + inlined from 'parse_name.constprop' at efivar.c:157:8: +guid.h:106:2: error: 'strncpy' output may be truncated copying 8 bytes from a string of length 38 [-Werror=stringop-truncation] + 106 | strncpy(eightbytes, text, 8); + | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ +cc1: all warnings being treated as errors + +Fixes: + - http://autobuild.buildroot.org/results/fcba72d359f4128515560e9105384cd4deff5043 + +Signed-off-by: Fabrice Fontaine +[Upstream status: not upstreamable as Makefiles were reworked and a new +ERRORS parameter was added: +https://github.com/rhboot/efivar/commit/998f617cec92d526e1fadb745673ceef63fa1483] +--- + gcc.specs | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/gcc.specs b/gcc.specs +index 45d43d1..1baf11a 100644 +--- a/gcc.specs ++++ b/gcc.specs +@@ -2,7 +2,7 @@ + + -D_GNU_SOURCE + + *efivar_cpp_options: +- -Werror -Wall -std=gnu11 -Wextra ++ -Wall -std=gnu11 -Wextra + + *cpp_options: + + %(efivar_cpp_options) +-- +2.30.1 + diff --git a/package/efivar/Config.in b/package/efivar/Config.in new file mode 100644 index 00000000..74f2bb5a --- /dev/null +++ b/package/efivar/Config.in @@ -0,0 +1,30 @@ +config BR2_PACKAGE_EFIVAR_ARCH_SUPPORTS + bool + default y + depends on BR2_arm || BR2_aarch64 || BR2_i386 || BR2_x86_64 \ + || BR2_powerpc64le || BR2_mipsel || BR2_mips64el + +config BR2_PACKAGE_EFIVAR + bool "efivar" + depends on BR2_PACKAGE_EFIVAR_ARCH_SUPPORTS + depends on !BR2_STATIC_LIBS # dlfcn.h + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12 # linux/nvme.h + # linux/nvme.h has been renamed to linux/nvme_ioctl.h since 4.4, + # and the efivar source handles that situation. However, some + # Sourcery CodeBench toolchains use 4.4 kernel headers but they + # don't have that header file renamed, and that is causing build + # failures. So, prevent this package to be built using those + # toolchains. + depends on !BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + help + Tools and libraries to manipulate EFI variables + + https://github.com/rhboot/efivar + +comment "efivar needs a toolchain w/ dynamic library, headers >= 3.12, gcc >= 4.9" + depends on BR2_PACKAGE_EFIVAR_ARCH_SUPPORTS + depends on BR2_STATIC_LIBS || \ + !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12 || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + depends on !BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS diff --git a/package/efivar/efivar.hash b/package/efivar/efivar.hash new file mode 100644 index 00000000..b521e08a --- /dev/null +++ b/package/efivar/efivar.hash @@ -0,0 +1,3 @@ +# locally computed hash +sha256 74c52b4f479120fb6639e753e71163ba3f557a7a67c0be225593f9f05b253f36 efivar-37.tar.gz +sha256 91df770634adc2755e78cae33a0d01e702ce2f69046408ae93d0d934ff29691b COPYING diff --git a/package/efivar/efivar.mk b/package/efivar/efivar.mk new file mode 100644 index 00000000..8708057b --- /dev/null +++ b/package/efivar/efivar.mk @@ -0,0 +1,46 @@ +################################################################################ +# +# efivar +# +################################################################################ + +EFIVAR_VERSION = 37 +EFIVAR_SITE = $(call github,rhboot,efivar,$(EFIVAR_VERSION)) +EFIVAR_LICENSE = LGPL-2.1 +EFIVAR_LICENSE_FILES = COPYING +EFIVAR_INSTALL_STAGING = YES + +# -fPIC is needed at least on MIPS, otherwise fails to build shared +# -library. +EFIVAR_MAKE_OPTS = \ + libdir=/usr/lib \ + LDFLAGS="$(TARGET_LDFLAGS) -fPIC" + +define EFIVAR_BUILD_CMDS + # makeguids is an internal host tool and must be built separately with + # $(HOST_CC), otherwise it gets cross-built. + $(HOST_MAKE_ENV) $(HOST_CONFIGURE_OPTS) \ + CFLAGS="$(HOST_CFLAGS) -std=gnu99" \ + $(MAKE) -C $(@D)/src gcc_cflags= makeguids + + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE1) -C $(@D) \ + AR=$(TARGET_AR) NM=$(TARGET_NM) RANLIB=$(TARGET_RANLIB) \ + $(EFIVAR_MAKE_OPTS) \ + all +endef + +define EFIVAR_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE1) -C $(@D) \ + $(EFIVAR_MAKE_OPTS) \ + DESTDIR="$(STAGING_DIR)" \ + install +endef + +define EFIVAR_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE1) -C $(@D) \ + $(EFIVAR_MAKE_OPTS) \ + DESTDIR="$(TARGET_DIR)" \ + install +endef + +$(eval $(generic-package)) diff --git a/package/efl/0001-ecore_evas-engines-drm-meson.build-use-gl_deps-as-en.patch b/package/efl/0001-ecore_evas-engines-drm-meson.build-use-gl_deps-as-en.patch new file mode 100644 index 00000000..185926ac --- /dev/null +++ b/package/efl/0001-ecore_evas-engines-drm-meson.build-use-gl_deps-as-en.patch @@ -0,0 +1,36 @@ +From 51dfe1863ddc8c5dd576405a9bbb8bca875c1142 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sat, 1 Aug 2020 02:25:47 +0200 +Subject: [PATCH] ecore_evas/engines/drm/meson.build: use "gl_deps" as engine + dependencies + +Meson trigger an error since "engine_gl_drm" variable doesn't exist. + +src/modules/ecore_evas/engines/drm/meson.build:10:2: ERROR: Unknown variable "engine_gl_drm". + +Instead use "gl_deps" as engine dependencies. + +Upstream status: +https://sourceforge.net/p/enlightenment/mailman/message/37075016/ + +Signed-off-by: Romain Naour +--- + src/modules/ecore_evas/engines/drm/meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/modules/ecore_evas/engines/drm/meson.build b/src/modules/ecore_evas/engines/drm/meson.build +index 58071010d0..0741d7fccd 100644 +--- a/src/modules/ecore_evas/engines/drm/meson.build ++++ b/src/modules/ecore_evas/engines/drm/meson.build +@@ -3,7 +3,7 @@ engine_deps = [ecore_drm2, ecore_input, eeze, elput, libdrm, engine_drm] + + if get_option('opengl') != 'none' + config_h.set('BUILD_ECORE_EVAS_GL_DRM', '1') +- engine_deps += [engine_gl_drm] ++ engine_deps += [gl_deps] + endif + + engine_include_dir += include_directories(join_paths('..', '..', '..', 'evas', 'engines', 'drm')) +-- +2.25.4 + diff --git a/package/efl/0002-ecore_evas-engines-drm-meson.build-fix-gl_drm-includ.patch b/package/efl/0002-ecore_evas-engines-drm-meson.build-fix-gl_drm-includ.patch new file mode 100644 index 00000000..89ec838a --- /dev/null +++ b/package/efl/0002-ecore_evas-engines-drm-meson.build-fix-gl_drm-includ.patch @@ -0,0 +1,37 @@ +From 8548b02c487ba7e9d78489c6db58812ee5cfb197 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sat, 1 Aug 2020 01:01:00 +0200 +Subject: [PATCH] ecore_evas/engines/drm/meson.build: fix "gl_drm" include + directory + +The Evas_Engine_GL_Drm.h file is in "gl_drm" directory, not "drm". + +../src/modules/ecore_evas/engines/drm/ecore_evas_drm.c:23:11: fatal error: Evas_Engine_GL_Drm.h: No such file or directory + 23 | # include + | ^~~~~~~~~~~~~~~~~~~~~~ +compilation terminated. + +Upstream status: +https://sourceforge.net/p/enlightenment/mailman/message/37075004/ + +Signed-off-by: Romain Naour +--- + src/modules/ecore_evas/engines/drm/meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/modules/ecore_evas/engines/drm/meson.build b/src/modules/ecore_evas/engines/drm/meson.build +index 0741d7fccd..edda1abd71 100644 +--- a/src/modules/ecore_evas/engines/drm/meson.build ++++ b/src/modules/ecore_evas/engines/drm/meson.build +@@ -6,7 +6,7 @@ if get_option('opengl') != 'none' + engine_deps += [gl_deps] + endif + +-engine_include_dir += include_directories(join_paths('..', '..', '..', 'evas', 'engines', 'drm')) ++engine_include_dir += include_directories(join_paths('..', '..', '..', 'evas', 'engines', 'gl_drm')) + + shared_module(mod_full_name, engine_src, + include_directories : config_dir + [engine_include_dir], +-- +2.25.4 + diff --git a/package/efl/Config.in b/package/efl/Config.in new file mode 100644 index 00000000..05ded72c --- /dev/null +++ b/package/efl/Config.in @@ -0,0 +1,282 @@ +config BR2_PACKAGE_EFL + bool "efl" + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C++11 + depends on BR2_HOST_GCC_AT_LEAST_4_9 # host-efl + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS # untested without threads + depends on BR2_USE_MMU + depends on BR2_USE_WCHAR # use wchar_t + depends on !BR2_STATIC_LIBS # dlfcn.h + # https://phab.enlightenment.org/T2728 + depends on BR2_PACKAGE_LUAJIT + select BR2_PACKAGE_DBUS + select BR2_PACKAGE_FREETYPE + select BR2_PACKAGE_GIFLIB + select BR2_PACKAGE_JPEG # Emile needs libjpeg + select BR2_PACKAGE_LIBCURL # Ecore_con_url, runtime dependency + select BR2_PACKAGE_LIBPNG + select BR2_PACKAGE_OPENSSL if !(BR2_PACKAGE_GNUTLS && BR2_PACKAGE_LIBGCRYPT) + select BR2_PACKAGE_LZ4 + select BR2_PACKAGE_ZLIB + help + Enlightenment Foundation Libraries + + https://enlightenment.org + +if BR2_PACKAGE_EFL + +config BR2_PACKAGE_EFL_BULLET + bool "Enable bullet support" + select BR2_PACKAGE_BULLET + help + If you have chosen to disable physics support, this disables + lots of core functionality and is effectively never + tested. You are going to find features that suddenly don't + work and as a result cause a series of breakages. This is + simply not tested so you are on your own in terms of + ensuring everything works if you do this. + +config BR2_PACKAGE_EFL_EEZE + bool "Enable eeze (udev) support (recommended)" + default y + depends on BR2_PACKAGE_HAS_UDEV # libudev + help + Eeze is EFL's hardware abstraction layer on top of udev. + Having it off will disable some hardware detection, such as + 'drm' graphics engine or 'elput', as well as mounting + removable media. + +comment "eeze needs udev /dev management" + depends on !BR2_PACKAGE_HAS_UDEV + +config BR2_PACKAGE_EFL_FONTCONFIG + bool "Enable fontconfig support (recommended)" + default y + select BR2_PACKAGE_FONTCONFIG + help + If fontconfig is disabled, this is going to make general + font searching not work, and only some very direct 'load + /path/file.ttf' will work alongside some old-school ttf file + path searching. This is very likely not what you want, so + highly reconsider turning fontconfig off. Having it off will + lead to visual problems like missing text in many UI areas + etc... + +config BR2_PACKAGE_EFL_GSTREAMER1 + bool "Enable gstreamer1 support (recommended)" + default y + select BR2_PACKAGE_GSTREAMER1 + select BR2_PACKAGE_GST1_PLUGINS_BASE + help + If Gstreamer 1.x support is disabled, it will heavily limit + your media support options and render some functionality as + useless, leading to visible application bugs. + +config BR2_PACKAGE_EFL_LIBFRIBIDI + bool "Enable libfribidi support (recommended)" + default y + select BR2_PACKAGE_LIBFRIBIDI + help + Fribidi is used for handling right-to-left text (like + Arabic, Hebrew, Farsi, Persian etc.) and is very likely not + a feature you want to disable unless you know for absolute + certain you will never encounter and have to display such + scripts. Also note that we don't test with fribidi disabled + so you may also trigger code paths with bugs that are never + normally used. + +config BR2_PACKAGE_EFL_LIBSNDFILE + bool "Enable libsndfile support (recommended)" + default y + select BR2_PACKAGE_LIBSNDFILE + help + If you disabled audio support in Ecore, this is not tested + and may create bugs for you due to it creating untested code + paths. Reconsider disabling audio. + +config BR2_PACKAGE_EFL_PULSEAUDIO + bool "Enable pulseaudio support (recommended)" + default y + depends on BR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + depends on BR2_USE_MMU + select BR2_PACKAGE_PULSEAUDIO + help + The only audio output method supported by Ecore right now is + via Pulseaudio. You have disabled that and likely have + broken a whole bunch of things in the process. Reconsider + your configure options. + + NOTE: multisense support is automatically enabled with + pulseaudio. + +config BR2_PACKAGE_EFL_UTIL_LINUX_LIBMOUNT + bool "Enable libmount support (recommended)" + default y + depends on BR2_PACKAGE_EFL_EEZE + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBMOUNT + # libblkid is part of required tools, see EFL's README. + select BR2_PACKAGE_UTIL_LINUX_LIBBLKID + help + Libmount is used heavily inside Eeze for support of removable + devices etc... and disabling this will hurt support for + Enlightenment and its filemanager. + +comment "efl's libmount support needs udev /dev management (eeze)" + depends on !BR2_PACKAGE_EFL_EEZE + +config BR2_PACKAGE_EFL_HAS_RECOMMENDED_CONFIG + bool + default y if BR2_PACKAGE_EFL_EEZE && \ + BR2_PACKAGE_EFL_FONTCONFIG && \ + BR2_PACKAGE_EFL_GSTREAMER1 && \ + BR2_PACKAGE_EFL_LIBFRIBIDI && \ + BR2_PACKAGE_EFL_LIBSNDFILE && \ + BR2_PACKAGE_EFL_PULSEAUDIO && \ + BR2_PACKAGE_EFL_UTIL_LINUX_LIBMOUNT + +comment "Warning: one of the recommended option for EFL is not enabled" + depends on !BR2_PACKAGE_EFL_HAS_RECOMMENDED_CONFIG + +config BR2_PACKAGE_EFL_EOLIAN_CPP + bool "Enable Eolian C++ bindings" + help + Eolian is an EO object parser and code generator. + With this option enabled Eolian will handle automatic + generation of EFL bindings for the C++11 language. + +comment "libecore video support" + +config BR2_PACKAGE_EFL_FB + bool "FB support" + +config BR2_PACKAGE_EFL_X_XLIB + bool "X11 support (xlib)" + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBX11 + select BR2_PACKAGE_XLIB_LIBXEXT + select BR2_PACKAGE_XLIB_LIBXCOMPOSITE + select BR2_PACKAGE_XLIB_LIBXCURSOR + select BR2_PACKAGE_XLIB_LIBXDAMAGE + select BR2_PACKAGE_XLIB_LIBXINERAMA + select BR2_PACKAGE_XLIB_LIBXRANDR + select BR2_PACKAGE_XLIB_LIBXRENDER + select BR2_PACKAGE_XLIB_LIBXSCRNSAVER + select BR2_PACKAGE_XLIB_LIBXTST + select BR2_PACKAGE_XORGPROTO + +config BR2_PACKAGE_EFL_WAYLAND + bool "Wayland support" + depends on BR2_PACKAGE_WAYLAND + depends on BR2_TOOLCHAIN_HAS_THREADS # Evas DRM Engine -> libdrm + depends on BR2_PACKAGE_MESA3D_OPENGL_EGL # Evas DRM Engine + depends on BR2_PACKAGE_EFL_EEZE # efl drm + depends on BR2_PACKAGE_EFL_OPENGLES # OpenGL ES with EGL support only + depends on BR2_ENABLE_LOCALE # efl-drm <- efl-elput <- linput + select BR2_PACKAGE_EFL_DRM + select BR2_PACKAGE_WAYLAND_PROTOCOLS + +comment "Wayland support needs udev /dev management (eeze), OpenGL ES w/ EGL, threads, locales" + depends on BR2_PACKAGE_WAYLAND + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_PACKAGE_MESA3D_OPENGL_EGL \ + || !BR2_PACKAGE_EFL_OPENGLES || !BR2_PACKAGE_EFL_EEZE \ + || !BR2_ENABLE_LOCALE + +choice + bool "OpenGL support" + help + libevas can be configured to use HW acceleration with OpenGL + or OpenGL ES. + +config BR2_PACKAGE_EFL_OPENGL + bool "OpenGL" + depends on BR2_PACKAGE_HAS_LIBGL + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_EFL_X_XLIB + +comment "OpenGL support needs X11 and an OpenGL provider" + depends on !BR2_PACKAGE_HAS_LIBGL || !BR2_PACKAGE_XORG7 + +config BR2_PACKAGE_EFL_OPENGLES + bool "OpenGL ES (w/ EGL)" + depends on BR2_PACKAGE_HAS_LIBEGL + depends on BR2_PACKAGE_HAS_LIBGLES + +comment "OpenGL ES support needs an OpenGL ES w/ EGL provider" + depends on !BR2_PACKAGE_HAS_LIBGLES || !BR2_PACKAGE_HAS_LIBEGL + +config BR2_PACKAGE_EFL_OPENGL_NONE + bool "none" + +endchoice # OpenGL support + +config BR2_PACKAGE_EFL_DRM + bool "Evas DRM Engine" + depends on BR2_PACKAGE_EFL_EEZE + depends on BR2_TOOLCHAIN_HAS_THREADS # libdrm + depends on BR2_PACKAGE_MESA3D_OPENGL_EGL # require libgbm from mesa3d + select BR2_PACKAGE_LIBDRM + select BR2_PACKAGE_LIBINPUT # For elput + select BR2_PACKAGE_LIBXKBCOMMON + help + This option enable building support for the Evas DRM Engine. + + Since efl 1.23.x, the drm option enable the elput library + which is an efl abstraction for the libinput library which + can be used by various other subsystems (ecore_fb, ecore_drm, + etc) to handle interfacing with libinput without having to + duplicate the code in each subsystem. + +comment "Evas DRM Engine needs udev /dev management (eeze), mesa3d w/ EGL support, threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_PACKAGE_MESA3D_OPENGL_EGL \ + || !BR2_PACKAGE_EFL_EEZE + +comment "libevas loaders" + +config BR2_PACKAGE_EFL_JPEG + bool "libevas jpeg loader" + select BR2_PACKAGE_OPENJPEG + help + This enables the loader code that loads jpeg files using + libjpeg. + +config BR2_PACKAGE_EFL_TIFF + bool "libevas tiff loader" + select BR2_PACKAGE_TIFF + help + This enables the loader code that loads tiff files. + +config BR2_PACKAGE_EFL_WEBP + bool "libevas webp image loader" + select BR2_PACKAGE_WEBP + select BR2_PACKAGE_WEBP_DEMUX + help + This enables the loader code that loads images using WebP. + +config BR2_PACKAGE_EFL_LIBRAW + bool "libraw loader" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # libraw + select BR2_PACKAGE_LIBRAW + help + This option enables the Evas generic Libraw loader + +config BR2_PACKAGE_EFL_SVG + bool "SVG loader" + depends on BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS # librsvg + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # librsvg -> pango -> harfbuzz + select BR2_PACKAGE_LIBRSVG + select BR2_PACKAGE_CAIRO + help + This option enables the Evas generic SVG loader + +endif # BR2_PACKAGE_EFL + +comment "efl needs a toolchain w/ C++, dynamic library, gcc >= 4.9, host gcc >= 4.9, threads, wchar" + depends on !BR2_INSTALL_LIBSTDCPP \ + || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 \ + || !BR2_HOST_GCC_AT_LEAST_4_9 || BR2_STATIC_LIBS \ + || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR + depends on BR2_USE_MMU diff --git a/package/efl/efl.hash b/package/efl/efl.hash new file mode 100644 index 00000000..69008cde --- /dev/null +++ b/package/efl/efl.hash @@ -0,0 +1,13 @@ +# From https://download.enlightenment.org/rel/libs/efl/efl-1.25.1.tar.xz.sha256sum +sha256 351ca0211ca000234527a503585f039f985607ec9439e34b49d8b8bbf35a7e6b efl-1.25.1.tar.xz + +sha256 d666b6b2df9f5b791f85c299c65516cb55528b02a807603de246f65f4918ae22 COMPLIANCE +sha256 5bceb52d65debe420bc520f2992807740dc928b7fdc3c2e9a74b5889177ddf4c COPYING +sha256 e5133b4034a4749a781e2220ffb230b60a282b88861f1124d69a58abd5143994 COPYING.images +sha256 c95bae1d1ce0235ecccd3560b772ec1efb97f348a79f0fbe0a634f0c2ccefe2c licenses/COPYING.ASL +sha256 af4ffe7ed1795a6e9cd3b3ce8747fdc45da449ff58cf35b8027c0699a66fd5cf licenses/COPYING.BSD +sha256 e60d07dfb2c5264f9f405fa52bf0d4f85429dd9ae1bc2ffcff8af1924ef720d1 licenses/COPYING.FTL +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 licenses/COPYING.GPL +sha256 ae2d99bf2a8e8310281bdbe5e8b78cbe5e89bfead8c01e67a8c68b530efcf25a licenses/COPYING.LGPL +sha256 2996a1c43ee757f9c997a829d82bdd584052323e73cf02ff8126c6fbd95c2d87 licenses/COPYING.NGINX-MIT +sha256 d847c749aa38b8d864665fc4e5c80e2f2a505e414fafe9712e85b5154e908218 licenses/COPYING.SMALL diff --git a/package/efl/efl.mk b/package/efl/efl.mk new file mode 100644 index 00000000..cdb05aa5 --- /dev/null +++ b/package/efl/efl.mk @@ -0,0 +1,367 @@ +################################################################################ +# +# efl +# +################################################################################ + +EFL_VERSION = 1.25.1 +EFL_SOURCE = efl-$(EFL_VERSION).tar.xz +EFL_SITE = http://download.enlightenment.org/rel/libs/efl +EFL_LICENSE = BSD-2-Clause, LGPL-2.1+, GPL-2.0+, FTL, MIT +EFL_LICENSE_FILES = \ + COMPLIANCE \ + COPYING \ + COPYING.images \ + licenses/COPYING.ASL \ + licenses/COPYING.BSD \ + licenses/COPYING.FTL \ + licenses/COPYING.GPL \ + licenses/COPYING.LGPL \ + licenses/COPYING.NGINX-MIT \ + licenses/COPYING.SMALL + +EFL_INSTALL_STAGING = YES + +EFL_DEPENDENCIES = host-pkgconf host-efl host-luajit dbus freetype \ + giflib jpeg libpng luajit lz4 zlib $(TARGET_NLS_DEPENDENCIES) + +# Configure options: +# elua=true: build elua for the target. +# sdl=false: disable sdl2 support. +# embedded-lz4=false: use liblz4 from lz4 package. +# native-arch-optimization=false: avoid optimization flags added by meson. +# network-backend=none: disable connman networkmanager. +EFL_CONF_OPTS = \ + -Davahi=false \ + -Dbuild-examples=false \ + -Dbuild-tests=false \ + -Ddotnet=false \ + -Decore-imf-loaders-disabler=ibus,scim,xim \ + -Delua=true \ + -Dembedded-lz4=false \ + -Dlua-interpreter=luajit \ + -Dnative-arch-optimization=false \ + -Dnetwork-backend=none \ + -Dpixman=false \ + -Dsdl=false \ + -Dvnc-server=false + +ifeq ($(BR2_SYSTEM_ENABLE_NLS),y) +EFL_CONF_OPTS += -Dnls=true +else +EFL_CONF_OPTS += -Dnls=false +endif + +EFL_BINDINGS = lua + +ifeq ($(BR2_PACKAGE_EFL_EOLIAN_CPP),y) +EFL_BINDINGS += cxx +endif + +EFL_CONF_OPTS += -Dbindings=$(subst $(space),$(comma),$(EFL_BINDINGS)) + +ifeq ($(BR2_PACKAGE_EFL_EEZE),y) +EFL_DEPENDENCIES += udev +EFL_CONF_OPTS += -Deeze=true +else +EFL_CONF_OPTS += -Deeze=false +endif + +ifeq ($(BR2_PACKAGE_EFL_UTIL_LINUX_LIBMOUNT),y) +EFL_DEPENDENCIES += util-linux +EFL_CONF_OPTS += -Dlibmount=true +else +EFL_CONF_OPTS += -Dlibmount=false +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +EFL_CONF_OPTS += -Dsystemd=true +EFL_DEPENDENCIES += systemd +else +EFL_CONF_OPTS += -Dsystemd=false +endif + +ifeq ($(BR2_PACKAGE_FONTCONFIG),y) +EFL_CONF_OPTS += -Dfontconfig=true +EFL_DEPENDENCIES += fontconfig +else +EFL_CONF_OPTS += -Dfontconfig=false +endif + +ifeq ($(BR2_PACKAGE_LIBFRIBIDI),y) +EFL_CONF_OPTS += -Dfribidi=true +EFL_DEPENDENCIES += libfribidi +else +EFL_CONF_OPTS += -Dfribidi=false +endif + +ifeq ($(BR2_PACKAGE_GSTREAMER1)$(BR2_PACKAGE_GST1_PLUGINS_BASE),yy) +EFL_CONF_OPTS += -Dgstreamer=true +EFL_DEPENDENCIES += gstreamer1 gst1-plugins-base +else +EFL_CONF_OPTS += -Dgstreamer=false +endif + +ifeq ($(BR2_PACKAGE_BULLET),y) +EFL_CONF_OPTS += -Dphysics=true +EFL_DEPENDENCIES += bullet +else +EFL_CONF_OPTS += -Dphysics=false +endif + +ifeq ($(BR2_PACKAGE_LIBSNDFILE),y) +EFL_CONF_OPTS += -Daudio=true +EFL_DEPENDENCIES += libsndfile +else +EFL_CONF_OPTS += -Daudio=false +endif + +ifeq ($(BR2_PACKAGE_PULSEAUDIO),y) +EFL_CONF_OPTS += -Dpulseaudio=true +EFL_DEPENDENCIES += pulseaudio +else +EFL_CONF_OPTS += -Dpulseaudio=false +endif + +ifeq ($(BR2_PACKAGE_HARFBUZZ),y) +EFL_DEPENDENCIES += harfbuzz +EFL_CONF_OPTS += -Dharfbuzz=true +else +EFL_CONF_OPTS += -Dharfbuzz=false +endif + +ifeq ($(BR2_PACKAGE_TSLIB),y) +EFL_DEPENDENCIES += tslib +EFL_CONF_OPTS += -Dtslib=true +else +EFL_CONF_OPTS += -Dtslib=false +endif + +ifeq ($(BR2_PACKAGE_LIBGLIB2),y) +EFL_DEPENDENCIES += libglib2 +EFL_CONF_OPTS += -Dglib=true +else +EFL_CONF_OPTS += -Dglib=false +endif + +# Prefer openssl (the default) over gnutls. +ifeq ($(BR2_PACKAGE_OPENSSL),y) +EFL_DEPENDENCIES += openssl +EFL_CONF_OPTS += -Dcrypto=openssl +else +EFL_DEPENDENCIES += gnutls libgcrypt +EFL_CONF_OPTS += -Dcrypto=gnutls +endif + +ifeq ($(BR2_PACKAGE_EFL_FB),y) +EFL_CONF_OPTS += -Dfb=true +else +EFL_CONF_OPTS += -Dfb=false +endif + +ifeq ($(BR2_PACKAGE_EFL_X_XLIB),y) +EFL_CONF_OPTS += -Dx11=true \ + -Dxinput2=true \ + -Dxinput22=true + +EFL_DEPENDENCIES += \ + xlib_libX11 \ + xlib_libXcomposite \ + xlib_libXcursor \ + xlib_libXdamage \ + xlib_libXext \ + xlib_libXinerama \ + xlib_libXrandr \ + xlib_libXrender \ + xlib_libXScrnSaver \ + xlib_libXtst +else +EFL_CONF_OPTS += -Dx11=false +endif + +ifeq ($(BR2_PACKAGE_EFL_OPENGL),y) +EFL_CONF_OPTS += -Dopengl=full +EFL_DEPENDENCIES += libgl +# OpenGL ES requires EGL +else ifeq ($(BR2_PACKAGE_EFL_OPENGLES),y) +EFL_CONF_OPTS += -Dopengl=es-egl +EFL_DEPENDENCIES += libegl libgles +else ifeq ($(BR2_PACKAGE_EFL_OPENGL_NONE),y) +EFL_CONF_OPTS += -Dopengl=none +endif + +ifeq ($(BR2_PACKAGE_EFL_DRM),y) +EFL_CONF_OPTS += -Ddrm=true +EFL_DEPENDENCIES += libdrm libegl libinput mesa3d +else +EFL_CONF_OPTS += -Ddrm=false +endif + +ifeq ($(BR2_PACKAGE_EFL_WAYLAND),y) +EFL_DEPENDENCIES += wayland wayland-protocols +EFL_CONF_OPTS += -Dwl=true +else +EFL_CONF_OPTS += -Dwl=false +endif + +EFL_DEPENDENCIES += $(if $(BR2_PACKAGE_LIBXKBCOMMON),libxkbcommon) + +# json evas loader is disabled by default by upstream. +# Disable libspectre (ps). +# Keep all other evas loader enabled or handled below. +EFL_EVAS_LOADERS_DISABLER = avif gst json ps + +# efl already depends on jpeg. +ifeq ($(BR2_PACKAGE_EFL_JPEG),y) +EFL_DEPENDENCIES += openjpeg +else +EFL_EVAS_LOADERS_DISABLER += jp2k +endif + +ifeq ($(BR2_PACKAGE_EFL_TIFF),y) +EFL_DEPENDENCIES += tiff +else +EFL_EVAS_LOADERS_DISABLER += tiff +endif + +ifeq ($(BR2_PACKAGE_EFL_WEBP),y) +EFL_DEPENDENCIES += webp +else +EFL_EVAS_LOADERS_DISABLER += webp +endif + +ifeq ($(BR2_PACKAGE_POPPLER),y) +# poppler needs c++11 +EFL_CONF_ENV += CXXFLAGS="$(TARGET_CXXFLAGS) -std=c++11" +EFL_DEPENDENCIES += poppler +else +EFL_EVAS_LOADERS_DISABLER += pdf +endif + +ifeq ($(BR2_PACKAGE_EFL_LIBRAW),y) +EFL_DEPENDENCIES += libraw +else +EFL_EVAS_LOADERS_DISABLER += raw +endif + +ifeq ($(BR2_PACKAGE_EFL_SVG),y) +EFL_DEPENDENCIES += librsvg cairo +else +EFL_EVAS_LOADERS_DISABLER += rsvg +endif + +EFL_CONF_OPTS += -Devas-loaders-disabler=$(subst $(space),$(comma),$(EFL_EVAS_LOADERS_DISABLER)) + +ifeq ($(BR2_PACKAGE_UPOWER),) +# upower ecore system module is only useful if upower +# dbus service is available. +# It's not essential, only used to notify applications +# of power state, such as low battery or AC power, so +# they can adapt their power consumption. +define EFL_HOOK_REMOVE_UPOWER + rm -fr $(TARGET_DIR)/usr/lib/ecore/system/upower +endef +EFL_POST_INSTALL_TARGET_HOOKS = EFL_HOOK_REMOVE_UPOWER +endif + +ifeq ($(BR2_PACKAGE_LIBUNWIND),y) +EFL_DEPENDENCIES += libunwind +endif + +$(eval $(meson-package)) + +################################################################################ +# +# host-efl +# +################################################################################ + +# We want to build only some host tools used later in the build. +# Actually we want: edje_cc, eet and embryo_cc. eolian_cxx is built only +# if selected for the target. + +# Host dependencies: +# * host-dbus: for Eldbus +# * host-freetype: for libevas +# * host-libglib2: for libecore +# * host-giflib, host-libjpeg, host-libpng: for libevas image loader +# * host-luajit for Elua tool for the host +# * host-openssl: cryptography backends. +HOST_EFL_DEPENDENCIES = \ + host-pkgconf \ + host-dbus \ + host-freetype \ + host-giflib \ + host-libglib2 \ + host-libjpeg \ + host-libpng \ + host-luajit \ + host-openssl \ + host-zlib + +# Configure options: +# audio=false: remove libsndfile dependency. +# eeze=false: remove libudev dependency. +# libmount=false: remove dependency on host-util-linux libmount. +# elua=true: build elua for the host. +# physics=false: remove Bullet dependency. +# network-backend=none: remove network-backend (connman). +# embedded-lz4=true: use lz4 bundled in efl. +HOST_EFL_CONF_OPTS += \ + -Daudio=false \ + -Davahi=false \ + -Dbuild-examples=false \ + -Dbuild-tests=false \ + -Dcrypto=openssl \ + -Ddotnet=false \ + -Decore-imf-loaders-disabler=ibus,scim,xim \ + -Dedje-sound-and-video=false \ + -Deeze=false \ + -Delua=true \ + -Dembedded-lz4=true \ + -Dfontconfig=false \ + -Dfribidi=false \ + -Dglib=true \ + -Dgstreamer=false \ + -Dharfbuzz=false \ + -Dlibmount=false \ + -Dlua-interpreter=luajit \ + -Dnetwork-backend=none \ + -Dnls=false \ + -Dopengl=none \ + -Dphysics=false \ + -Dpixman=false \ + -Dpulseaudio=false \ + -Dsdl=false \ + -Dsystemd=false \ + -Dv4l2=false \ + -Dvnc-server=false \ + -Dx11=false \ + -Dxinput22=false + +# List of modular image/vector loaders to disable in efl +HOST_EFL_EVAS_LOADERS_DISABLER = avif bmp dds eet generic gst ico json \ + jp2k pdf pmaps ps psd raw rsvg tga tgv tiff wbmp webp xcf xpm + +HOST_EFL_CONF_OPTS += -Devas-loaders-disabler=$(subst $(space),$(comma),$(HOST_EFL_EVAS_LOADERS_DISABLER)) + +HOST_EFL_BINDINGS = lua + +# Enable Eolian language bindings to provide eolian_cxx tool for the +# host which is required to build Eolian language bindings for the +# target. +ifeq ($(BR2_PACKAGE_EFL_EOLIAN_CPP),y) +HOST_EFL_BINDINGS += cxx +endif +HOST_EFL_CONF_OPTS += -Dbindings=$(subst $(space),$(comma),$(HOST_EFL_BINDINGS)) + +# Always disable upower system module from host as it's +# not useful and would try to use the output/host/var +# system bus which is non-existent and does not contain +# any upower service in it. +define HOST_EFL_HOOK_REMOVE_UPOWER + rm -fr $(HOST_DIR)/lib/ecore/system/upower +endef +HOST_EFL_POST_INSTALL_HOOKS = HOST_EFL_HOOK_REMOVE_UPOWER + +$(eval $(host-meson-package)) diff --git a/package/eigen/Config.in b/package/eigen/Config.in new file mode 100644 index 00000000..ef0a16f2 --- /dev/null +++ b/package/eigen/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_EIGEN + bool "eigen" + depends on BR2_INSTALL_LIBSTDCPP + help + Eigen is a C++ template library for linear algebra: vectors, + matrices, and related algorithms. It is versatile, fast, + elegant and works on many platforms (OS/Compilers). + + This package only installs header files to the include path. + If you just want to use Eigen, you can use the header files + right away. There is no binary to link to. Eigen is a pure + template library defined in the headers. + + http://eigen.tuxfamily.org/ + +comment "eigen needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/eigen/eigen.hash b/package/eigen/eigen.hash new file mode 100644 index 00000000..5ec561ad --- /dev/null +++ b/package/eigen/eigen.hash @@ -0,0 +1,8 @@ +# Locally computed +sha256 685adf14bd8e9c015b78097c1dc22f2f01343756f196acdc76a678e1ae352e11 eigen-3.3.7.tar.bz2 +sha256 4f877e5ae4672568ef82cfd0023e2cef4a7cf55d867ab249efc9569a7eb9e5b1 COPYING.BSD +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING.GPL +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LGPL +sha256 f5b330efdad110cdd84d585ec61220b0650461fa599e36b13e1726c9346dcfb9 COPYING.MINPACK +sha256 fab3dd6bdab226f1c08630b1dd917e11fcb4ec5e1e020e2c16f83a0a13863e85 COPYING.MPL2 +sha256 c83230b770f17ef1386ea1fd3681271dd98aa93646bdbfb5bff3a1b7050fff9d COPYING.README diff --git a/package/eigen/eigen.mk b/package/eigen/eigen.mk new file mode 100644 index 00000000..c9998da3 --- /dev/null +++ b/package/eigen/eigen.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# eigen +# +################################################################################ + +EIGEN_VERSION = 3.3.7 +EIGEN_SOURCE = eigen-$(EIGEN_VERSION).tar.bz2 +EIGEN_SITE = $(call gitlab,libeigen,eigen,$(EIGEN_VERSION)) +EIGEN_LICENSE = MPL2, BSD-3-Clause, LGPL-2.1 +EIGEN_LICENSE_FILES = COPYING.MPL2 COPYING.BSD COPYING.LGPL COPYING.README +EIGEN_INSTALL_STAGING = YES +EIGEN_INSTALL_TARGET = NO +EIGEN_SUPPORTS_IN_SOURCE_BUILD = NO + +# Default Eigen CMake installs .pc file in /usr/share/pkgconfig +# change it to /usr/lib/pkgconfig, to be consistent with other packages. +EIGEN_CONF_OPTS = -DPKGCONFIG_INSTALL_DIR=/usr/lib/pkgconfig + +$(eval $(cmake-package)) diff --git a/package/ejabberd/0001-Makefile.in-do-not-download-or-compile-dependencies.patch b/package/ejabberd/0001-Makefile.in-do-not-download-or-compile-dependencies.patch new file mode 100644 index 00000000..ffacb6da --- /dev/null +++ b/package/ejabberd/0001-Makefile.in-do-not-download-or-compile-dependencies.patch @@ -0,0 +1,35 @@ +From cb583beba1acba55112fbb4636c1c73d9ae691a0 Mon Sep 17 00:00:00 2001 +From: Johan Oudinet +Date: Fri, 20 Nov 2020 00:33:30 +0100 +Subject: [PATCH] Makefile.in: do not download or compile dependencies + +Signed-off-by: Johan Oudinet +--- + Makefile.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Makefile.in b/Makefile.in +index abd64835..06f876bb 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -97,7 +97,7 @@ ifneq ($(INSTALLGROUP),) + G_USER=-g $(INSTALLGROUP) + endif + +-all: deps src ++all: src + + deps: deps/.got + +@@ -111,7 +111,7 @@ deps/.built: deps/.got + $(REBAR) configure-deps + $(REBAR) compile && :> deps/.built + +-src: deps/.built ++src: + $(REBAR) skip_deps=true compile + + update: +-- +2.29.2 + diff --git a/package/ejabberd/0002-fix-ejabberdctl.patch b/package/ejabberd/0002-fix-ejabberdctl.patch new file mode 100644 index 00000000..e7fc9315 --- /dev/null +++ b/package/ejabberd/0002-fix-ejabberdctl.patch @@ -0,0 +1,28 @@ +From 4283f675f21d3923e200092cec6418014a03ad52 Mon Sep 17 00:00:00 2001 +From: Johan Oudinet +Date: Thu, 26 Dec 2019 17:06:34 +0100 +Subject: [PATCH] fix ejabberdctl + +Change default values so ejabberdctl run commands as ejabberd user. + +Signed-off-by: Johan Oudinet +--- + ejabberdctl.template | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ejabberdctl.template b/ejabberdctl.template +index a940c3df7..5166e5a27 100755 +--- a/ejabberdctl.template ++++ b/ejabberdctl.template +@@ -15,7 +15,7 @@ SCRIPT_DIR=$(cd "${0%/*}" && pwd) + ERL="{{erl}}" + IEX="{{bindir}}/iex" + EPMD="{{epmd}}" +-INSTALLUSER="{{installuser}}" ++INSTALLUSER=ejabberd + + # check the proper system user is used + case $(id -un) in +-- +2.20.1 + diff --git a/package/ejabberd/Config.in b/package/ejabberd/Config.in new file mode 100644 index 00000000..e24c7fee --- /dev/null +++ b/package/ejabberd/Config.in @@ -0,0 +1,35 @@ +config BR2_PACKAGE_EJABBERD + bool "ejabberd" + depends on BR2_PACKAGE_ERLANG + depends on BR2_INSTALL_LIBSTDCPP # jiffy, stringprep + select BR2_PACKAGE_ERLANG_EIMP + select BR2_PACKAGE_ERLANG_IDNA # runtime + select BR2_PACKAGE_ERLANG_JIFFY # runtime + select BR2_PACKAGE_ERLANG_JOSE # runtime + select BR2_PACKAGE_ERLANG_LAGER + select BR2_PACKAGE_ERLANG_P1_ACME # runtime + select BR2_PACKAGE_ERLANG_P1_CACHE_TAB + select BR2_PACKAGE_ERLANG_P1_MQTREE # runtime + select BR2_PACKAGE_ERLANG_P1_OAUTH2 # runtime + select BR2_PACKAGE_ERLANG_P1_PKIX # runtime + select BR2_PACKAGE_ERLANG_P1_SIP + select BR2_PACKAGE_ERLANG_P1_STRINGPREP + select BR2_PACKAGE_ERLANG_P1_STUN + select BR2_PACKAGE_ERLANG_P1_TLS + select BR2_PACKAGE_ERLANG_P1_UTILS + select BR2_PACKAGE_ERLANG_P1_XML + select BR2_PACKAGE_ERLANG_P1_XMPP + select BR2_PACKAGE_ERLANG_P1_YAML + select BR2_PACKAGE_ERLANG_P1_YCONF # runtime + select BR2_PACKAGE_ERLANG_P1_ZLIB + select BR2_PACKAGE_GETENT + select BR2_PACKAGE_OPENSSL + help + Ejabberd is a Jabber/XMPP instant messaging server, written + in Erlang/OTP. Among other features, ejabberd is + cross-platform, fault-tolerant, clusterable and modular. + + http://www.ejabberd.im + +comment "ejabberd needs erlang, toolchain w/ C++" + depends on !BR2_PACKAGE_ERLANG || !BR2_INSTALL_LIBSTDCPP diff --git a/package/ejabberd/S50ejabberd b/package/ejabberd/S50ejabberd new file mode 100644 index 00000000..83513bdc --- /dev/null +++ b/package/ejabberd/S50ejabberd @@ -0,0 +1,54 @@ +#!/bin/sh +# +# Start/stop ejabberd +# + +CTL=/usr/sbin/ejabberdctl +DEFAULT=/etc/ejabberd/ejabberdctl.cfg +INSTALLUSER=ejabberd +RUNDIR=/var/run/ejabberd + +# Read default configuration file if present. +[ -r "$DEFAULT" ] && . "$DEFAULT" + +# Create RUNDIR. +mkrundir() { + install -d -o "$INSTALLUSER" -g "$INSTALLUSER" "$RUNDIR" +} + +case "$1" in + start) + mkrundir || exit 1 + printf "Starting ejabberd... " + "$CTL" start + # Wait until ejabberd is up and running. + if "$CTL" started; then + echo "done" + else + echo "failed" + fi + ;; + stop) + printf "Stopping ejabberd... " + "$CTL" stop > /dev/null + if [ $? -eq 3 ] || "$CTL" stopped; then + echo "OK" + else + echo "failed" + fi + ;; + status) + "$CTL" status + ;; + restart|force-reload) + "$0" stop || true + "$0" start + ;; + live) + mkrundir || exit 1 + "$CTL" live + ;; + *) + echo "Usage: $0 {start|stop|status|restart|force-reload|live}" + exit 1 +esac diff --git a/package/ejabberd/check-erlang-lib b/package/ejabberd/check-erlang-lib new file mode 100755 index 00000000..63f8bf19 --- /dev/null +++ b/package/ejabberd/check-erlang-lib @@ -0,0 +1,55 @@ +#!/bin/sh -e +# Helper to bypass AC_ERLANG_CHECK_LIB +# +# Ejabberd releases do not download specific versions of its erlang +# dependencies. Instead, it clones the master branch of a git +# repository and asks erl to provide the library version. However, +# the target erl program cannot be called from the host. So, this +# script aims at finding the library version installed on the target, +# without calling erlang. + +usage() { + cat <&2 + exit 1 +} + +if [ $# -ne 1 ]; then + usage + exit 0 +else + library="$1" +fi + +target_dir="${TARGET_DIR:-output/target}" + +[ -d "$target_dir" ] || die "TARGET_DIR is not a directory. Please \ +specify the TARGET_DIR environment variable." + +case "$(ls -1d -- "$target_dir/usr/lib/erlang/lib/$library-"* | wc -l)" in + 0) + echo "not found" + ;; + 1) + echo "$target_dir/usr/lib/erlang/lib/$library-"* \ + | sed -e "s,^$target_dir,," + ;; + *) + die "Several versions of $library have been found. Please \ + remove the unused ones." + ;; +esac diff --git a/package/ejabberd/ejabberd.hash b/package/ejabberd/ejabberd.hash new file mode 100644 index 00000000..0d57ada5 --- /dev/null +++ b/package/ejabberd/ejabberd.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 9e922b938458ae9d72d4e5fdd2d08a1fbad651aae47c9a9d15b79d0bbd1e11f8 ejabberd-20.07.tgz +sha256 469bb8cfa3ef22c102875ff31932450c075e6908ff3f7d36893485c0c30898eb COPYING diff --git a/package/ejabberd/ejabberd.mk b/package/ejabberd/ejabberd.mk new file mode 100644 index 00000000..2b23701d --- /dev/null +++ b/package/ejabberd/ejabberd.mk @@ -0,0 +1,67 @@ +################################################################################ +# +# ejabberd +# +################################################################################ + +EJABBERD_VERSION = 20.07 +EJABBERD_SOURCE = ejabberd-$(EJABBERD_VERSION).tgz +EJABBERD_SITE = https://static.process-one.net/ejabberd/downloads/$(EJABBERD_VERSION) +EJABBERD_LICENSE = GPL-2.0+ with OpenSSL exception +EJABBERD_LICENSE_FILES = COPYING +EJABBERD_CPE_ID_VENDOR = process-one +EJABBERD_DEPENDENCIES = getent openssl erlang-eimp host-erlang-lager \ + erlang-lager erlang-p1-cache-tab erlang-p1-sip \ + erlang-p1-stringprep erlang-p1-stun erlang-p1-tls \ + erlang-p1-utils erlang-p1-xml erlang-p1-xmpp erlang-p1-yaml \ + erlang-p1-zlib host-erlang-p1-utils host-erlang-p1-xmpp + +# 0001-remove-make-targets-for-deps.patch updates Makefile.in +EJABBERD_USE_AUTOCONF = YES +EJABBERD_AUTORECONF = YES + +ifeq ($(BR2_PACKAGE_LINUX_PAM),y) +EJABBERD_DEPENDENCIES += linux-pam +endif + +EJABBERD_ERLANG_LIBS = sasl public_key mnesia inets compiler + +# Guess answers for these tests, configure will bail out otherwise +# saying error: cannot run test program while cross compiling. +EJABBERD_CHECK_LIB = $(TOPDIR)/$(EJABBERD_PKGDIR)/check-erlang-lib +EJABBERD_CONF_ENV = \ + ac_cv_erlang_root_dir="$(HOST_DIR)/lib/erlang" \ + $(foreach lib,$(EJABBERD_ERLANG_LIBS), \ + ac_cv_erlang_lib_dir_$(lib)="`$(EJABBERD_CHECK_LIB) $(lib)`") + +EJABBERD_CONF_OPTS = \ + --enable-system-deps \ + --disable-erlang-version-check + +define EJABBERD_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) DESTDIR=$(TARGET_DIR) install -C $(@D) +endef + +# Replace HOST_DIR prefix to /usr in environment variables of +# ejabberctl script. +define EJABBERD_FIX_EJABBERDCTL + $(SED) 's,="$(HOST_DIR),="/usr,' '$(TARGET_DIR)/usr/sbin/ejabberdctl' +endef + +EJABBERD_POST_INSTALL_TARGET_HOOKS += EJABBERD_FIX_EJABBERDCTL + +define EJABBERD_USERS + ejabberd -1 ejabberd -1 * /var/lib/ejabberd /bin/sh - ejabberd daemon +endef + +define EJABBERD_PERMISSIONS + /etc/ejabberd r 750 root ejabberd - - - - - + /usr/sbin/ejabberdctl f 750 root ejabberd - - - - - +endef + +define EJABBERD_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/ejabberd/S50ejabberd \ + $(TARGET_DIR)/etc/init.d/S50ejabberd +endef + +$(eval $(rebar-package)) diff --git a/package/elf2flt/0001-ld-elf2flt-behave-properly-when-called-with-a-name-d.patch b/package/elf2flt/0001-ld-elf2flt-behave-properly-when-called-with-a-name-d.patch new file mode 100644 index 00000000..a27c4913 --- /dev/null +++ b/package/elf2flt/0001-ld-elf2flt-behave-properly-when-called-with-a-name-d.patch @@ -0,0 +1,79 @@ +From b31e9b1bff6832063816b972395179859d1d4619 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sun, 13 Aug 2017 16:03:20 +0200 +Subject: [PATCH] ld-elf2flt: behave properly when called with a name different + from TARGET_ALIAS + +ld-elf2flt currently handles two cases: + + 1 It is called as the wrapper for -ld, generally + installed in the bin/ directory of a toolchain. + + 2 It is called as the wrapper for "ld", generally installed in the + TARGET_ALIAS/bin/ directory of a toolchain. + +Unfortunately, if for some reason it gets called using a FOOBAR-ld +name that is different from -ld, it assumes it is in +case (2), while it really is in case (1). Due to this, the path +mangling logic doesn't work, and it doesn't find ld.real. + +This happens for example when the binary program in bin/ is named +arm-buildroot-uclinux-uclibcgnueabi-ld, but also has a simpler symlink +named arm-linux-ld. In this case, +arm-buildroot-uclinux-uclibcgnueabi-ld is recognized by ld-elf2flt as +containing TARGET_ALIAS, and therefore the proper logic to find +ld.real is applied. However, when arm-linux-ld is used, ld-elf2flt +doesn't find TARGET_ALIAS, and therefore assumes we're being called as +TARGET_ALIAS/bin/ld.. and searches for a program called ld.real in +bin/, which doesn't exist. + +See: + +$ ./output/host/bin/arm-buildroot-uclinux-uclibcgnueabi-ld +/home/thomas/buildroot/buildroot/output/host/bin/../arm-buildroot-uclinux-uclibcgnueabi/bin/ld.real: no input files + +$ ./output/host/bin/arm-linux-ld +arm-linux-ld (ld-elf2flt): error trying to exec '/home/thomas/buildroot/buildroot/output/host/bin/ld.real': execvp: No such file or directory + +$ ./output/host/arm-buildroot-uclinux-uclibcgnueabi/bin/ld +/home/thomas/buildroot/buildroot/output/host/arm-buildroot-uclinux-uclibcgnueabi/bin/ld.real: no input files + +This commit fixes that by inverting the logic: if we're being called +as just "ld", then we assume it's the program in +TARGET_ALIAS/bin/. Otherwise, we're called through some variant of +TARGET-ld. + +Signed-off-by: Thomas Petazzoni +Submitted-upstream: https://github.com/uclinux-dev/elf2flt/pull/8 +--- + ld-elf2flt.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/ld-elf2flt.c b/ld-elf2flt.c +index de39fe0..c187c2e 100644 +--- a/ld-elf2flt.c ++++ b/ld-elf2flt.c +@@ -506,15 +506,15 @@ int main(int argc, char *argv[]) + the host while those in /lib are for the target. + Make bindir point to the bin dir for bin/-foo. + Make tooldir point to the bin dir for /bin/foo. */ +- if (streqn(elf2flt_progname, TARGET_ALIAS)) { +- tmp = concat(argv0_dir, "../" TARGET_ALIAS "/bin", NULL); ++ if (streqn(elf2flt_progname, "ld")) { ++ tmp = concat(argv0_dir, "../../bin", NULL); + if (stat(tmp, &buf) == 0 && S_ISDIR(buf.st_mode)) { +- tooldir = concat(tmp, "/", NULL); ++ bindir = concat(tmp, "/", NULL); + } + } else { +- tmp = concat(argv0_dir, "../../bin", NULL); ++ tmp = concat(argv0_dir, "../" TARGET_ALIAS "/bin", NULL); + if (stat(tmp, &buf) == 0 && S_ISDIR(buf.st_mode)) { +- bindir = concat(tmp, "/", NULL); ++ tooldir = concat(tmp, "/", NULL); + } + } + +-- +2.9.4 + diff --git a/package/elf2flt/0002-elf2flt.c-add-new-relocation-types-for-xtensa.patch b/package/elf2flt/0002-elf2flt.c-add-new-relocation-types-for-xtensa.patch new file mode 100644 index 00000000..953bd79c --- /dev/null +++ b/package/elf2flt/0002-elf2flt.c-add-new-relocation-types-for-xtensa.patch @@ -0,0 +1,188 @@ +From d7eb73163bcea31168c438fc132a0967ac172e3d Mon Sep 17 00:00:00 2001 +From: Max Filippov +Date: Thu, 7 May 2020 21:11:43 -0700 +Subject: [PATCH] elf2flt.c: add new relocation types for xtensa + +Xtensa have added new relocation types R_XTENSA_[NP]DIFF{8,16,32} with +the same properties as the existing types R_XTENSA_DIFF{8,16,32}. +Add them to the list of ignored relocation types. + +This fixes the following error when invoking elf2flt on xtensa binaries +built with the recent binutils: + + ERROR: reloc type R_XTENSA_PDIFF32 unsupported in this context + +Reported-by: Romain Naour +Signed-off-by: Max Filippov +Backported from: d7eb73163bcea31168c438fc132a0967ac172e3d +--- + Makefile.in | 3 ++- + configure | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + configure.ac | 14 ++++++++++++ + elf2flt.c | 8 +++++++ + 4 files changed, 88 insertions(+), 1 deletion(-) + +diff --git a/Makefile.in b/Makefile.in +index 52b3347d7f43..0529c7f0a25a 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -30,7 +30,8 @@ DEFS = @DEFS@ \ + -DNO_GOT_CHECK=@got_check@ \ + -DUSE_EMIT_RELOCS=@emit_relocs@ \ + -DEMIT_CTOR_DTOR=@emit_ctor_dtor@ \ +- -DALWAYS_RELOC_TEXT=@always_reloc_text@ ++ -DALWAYS_RELOC_TEXT=@always_reloc_text@ \ ++ -DHAVE_BFD_XTENSA_PDIFF_RELOCS=@HAVE_BFD_XTENSA_PDIFF_RELOCS@ + EXEEXT = @EXEEXT@ + OBJEXT = @OBJEXT@ + +diff --git a/configure b/configure +index bb8e33f9cb28..bca38c34247e 100755 +--- a/configure ++++ b/configure +@@ -621,6 +621,7 @@ ac_includes_default="\ + + ac_subst_vars='LTLIBOBJS + LIBOBJS ++HAVE_BFD_XTENSA_PDIFF_RELOCS + SYMBOL_PREFIX + always_reloc_text + emit_ctor_dtor +@@ -1729,6 +1730,52 @@ fi + + } # ac_fn_c_try_link + ++# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES ++# --------------------------------------------- ++# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR ++# accordingly. ++ac_fn_c_check_decl () ++{ ++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack ++ as_decl_name=`echo $2|sed 's/ *(.*//'` ++ as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 ++$as_echo_n "checking whether $as_decl_name is declared... " >&6; } ++if eval \${$3+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++$4 ++int ++main () ++{ ++#ifndef $as_decl_name ++#ifdef __cplusplus ++ (void) $as_decl_use; ++#else ++ (void) $as_decl_name; ++#endif ++#endif ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ eval "$3=yes" ++else ++ eval "$3=no" ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++eval ac_res=\$$3 ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 ++$as_echo "$ac_res" >&6; } ++ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno ++ ++} # ac_fn_c_check_decl ++ + # ac_fn_c_check_func LINENO FUNC VAR + # ---------------------------------- + # Tests whether FUNC exists, setting the cache variable VAR accordingly +@@ -4272,6 +4319,22 @@ $as_echo "#define const /**/" >>confdefs.h + fi + + ++HAVE_BFD_XTENSA_PDIFF_RELOCS=0 ++case $target in ++ xtensa*) ++ OLD_CPPFLAGS=$CPPFLAGS ++ CPPFLAGS="-I$bfd_include_dir -I$binutils_include_dir $CPPFLAGS" ++ ac_fn_c_check_decl "$LINENO" "R_XTENSA_PDIFF8" "ac_cv_have_decl_R_XTENSA_PDIFF8" "#include \"bfd.h\" ++ #include \"elf/xtensa.h\" ++" ++if test "x$ac_cv_have_decl_R_XTENSA_PDIFF8" = xyes; then : ++ HAVE_BFD_XTENSA_PDIFF_RELOCS=1 ++fi ++ ++ CPPFLAGS=$OLD_CPPFLAGS ++ ;; ++esac ++ + for ac_func in vprintf + do : + ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" +@@ -4333,6 +4396,7 @@ fi + + + ++ + ac_config_files="$ac_config_files ld-elf2flt.sh:ld-elf2flt.in Makefile elf2flt.ld" + + cat >confcache <<\_ACEOF +diff --git a/configure.ac b/configure.ac +index d6b4119eb18a..19969b1045f6 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -202,6 +202,19 @@ AC_CHECK_HEADERS(fcntl.h unistd.h bfd.h) + dnl Checks for typedefs, structures, and compiler characteristics. + AC_C_CONST + ++HAVE_BFD_XTENSA_PDIFF_RELOCS=0 ++case $target in ++ xtensa*) ++ AS_VAR_COPY([OLD_CPPFLAGS], [CPPFLAGS]) ++ AS_VAR_SET([CPPFLAGS], ["-I$bfd_include_dir -I$binutils_include_dir $CPPFLAGS"]) ++ AC_CHECK_DECL([R_XTENSA_PDIFF8], ++ [HAVE_BFD_XTENSA_PDIFF_RELOCS=1],, ++ [#include "bfd.h" ++ #include "elf/xtensa.h"]) ++ AS_VAR_COPY([CPPFLAGS], [OLD_CPPFLAGS]) ++ ;; ++esac ++ + dnl Checks for library functions. + AC_FUNC_VPRINTF + +@@ -235,6 +248,7 @@ AC_SUBST(emit_relocs) + AC_SUBST(emit_ctor_dtor) + AC_SUBST(always_reloc_text) + AC_SUBST(SYMBOL_PREFIX) ++AC_SUBST(HAVE_BFD_XTENSA_PDIFF_RELOCS) + + AC_OUTPUT(ld-elf2flt.sh:ld-elf2flt.in Makefile elf2flt.ld) + +diff --git a/elf2flt.c b/elf2flt.c +index b7c4a490df02..961534973f56 100644 +--- a/elf2flt.c ++++ b/elf2flt.c +@@ -776,6 +776,14 @@ output_relocs ( + case R_XTENSA_DIFF8: + case R_XTENSA_DIFF16: + case R_XTENSA_DIFF32: ++#if HAVE_BFD_XTENSA_PDIFF_RELOCS ++ case R_XTENSA_PDIFF8: ++ case R_XTENSA_PDIFF16: ++ case R_XTENSA_PDIFF32: ++ case R_XTENSA_NDIFF8: ++ case R_XTENSA_NDIFF16: ++ case R_XTENSA_NDIFF32: ++#endif + case R_XTENSA_32_PCREL: + continue; + case R_XTENSA_32: +-- +2.20.1 + diff --git a/package/elf2flt/0003-elf2flt-handle-binutils-2.34.patch b/package/elf2flt/0003-elf2flt-handle-binutils-2.34.patch new file mode 100644 index 00000000..16d56333 --- /dev/null +++ b/package/elf2flt/0003-elf2flt-handle-binutils-2.34.patch @@ -0,0 +1,377 @@ +From 26165906f85d82f0a4456f34b5c60fcaaef48535 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Wed, 5 Feb 2020 10:31:32 +0100 +Subject: [PATCH] elf2flt: handle binutils >= 2.34 + +The latest Binutils release (2.34) is not compatible with elf2flt due +to a change in bfd_section_* macros [1]. The issue has been reported +to the Binutils mailing list but Alan Modra recommend to bundle +libbfd library sources into each projects using it [2]. That's +because the API is not stable over the time without any backward +compatibility guaranties. + +On the other hand, the elf2flt tools needs to support modified +version of binutils for specific arch/target [3]. + +Add two tests in the configure script to detect this API change +in order to support binutils < 2.34 and binutils >= 2.34. + +Upstream status: [4] + +[1] https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=fd3619828e94a24a92cddec42cbc0ab33352eeb4 +[2] https://sourceware.org/ml/binutils/2020-02/msg00044.html +[3] https://github.com/uclinux-dev/elf2flt/issues/14 +[4] https://github.com/uclinux-dev/elf2flt/pull/15 + +Signed-off-by: Romain Naour +--- + configure.ac | 16 +++++++++++ + elf2flt.c | 81 +++++++++++++++++++++++++++++----------------------- + 2 files changed, 61 insertions(+), 36 deletions(-) + +diff --git a/configure.ac b/configure.ac +index e82eb1d..cf7dea8 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -229,6 +229,22 @@ AC_CHECK_FUNCS([ \ + strsignal \ + ]) + ++dnl Various bfd section macros and functions like bfd_section_size() have been ++dnl modified starting with binutils >= 2.34. ++dnl Check if the prototypes take a bfd argument. ++if test "$binutils_build_dir" != "NONE"; then ++ CFLAGS="-I$binutils_include_dir -I$bfd_include_dir $CFLAGS" ++fi ++ ++AC_TRY_COMPILE([#include ], ++ [const asection *sec; bfd_section_size(sec);], ++ bfd_section_api_takes_bfd=no, ++ bfd_section_api_takes_bfd=yes) ++if test "$bfd_section_api_takes_bfd" = "yes" ; then ++ AC_DEFINE(HAVE_BFD_SECTION_API_TAKES_BFD, 1, ++ [define to 1 for binutils < 2.34]) ++fi ++ + if test "$GCC" = yes ; then + CFLAGS="-Wall $CFLAGS" + if test "$werror" = 1 ; then +diff --git a/elf2flt.c b/elf2flt.c +index b93aecd..3bcf4fe 100644 +--- a/elf2flt.c ++++ b/elf2flt.c +@@ -149,6 +149,17 @@ const char *elf2flt_progname; + #define O_BINARY 0 + #endif + ++/* ++ * The bfd parameter isn't actually used by any of the bfd_section funcs and ++ * have been removed since binutils 2.34. ++ */ ++#ifdef HAVE_BFD_SECTION_API_TAKES_BFD ++#define elf2flt_bfd_section_size(s) bfd_section_size(NULL, s) ++#define elf2flt_bfd_section_vma(s) bfd_section_vma(NULL, s) ++#else ++#define elf2flt_bfd_section_size(s) bfd_section_size(s) ++#define elf2flt_bfd_section_vma(s) bfd_section_vma(s) ++#endif + + /* Extra output when running. */ + static int verbose = 0; +@@ -323,10 +334,8 @@ compare_relocs (const void *pa, const void *pb) + else if (!rb->sym_ptr_ptr || !*rb->sym_ptr_ptr) + return 1; + +- a_vma = bfd_section_vma(compare_relocs_bfd, +- (*(ra->sym_ptr_ptr))->section); +- b_vma = bfd_section_vma(compare_relocs_bfd, +- (*(rb->sym_ptr_ptr))->section); ++ a_vma = elf2flt_bfd_section_vma((*(ra->sym_ptr_ptr))->section); ++ b_vma = elf2flt_bfd_section_vma((*(rb->sym_ptr_ptr))->section); + va = (*(ra->sym_ptr_ptr))->value + a_vma + ra->addend; + vb = (*(rb->sym_ptr_ptr))->value + b_vma + rb->addend; + return va - vb; +@@ -403,7 +412,7 @@ output_relocs ( + } + + for (a = abs_bfd->sections; (a != (asection *) NULL); a = a->next) { +- section_vma = bfd_section_vma(abs_bfd, a); ++ section_vma = elf2flt_bfd_section_vma(a); + + if (verbose) + printf("SECTION: %s [%p]: flags=0x%x vma=0x%"PRIx32"\n", +@@ -442,7 +451,7 @@ output_relocs ( + continue; + if (verbose) + printf(" RELOCS: %s [%p]: flags=0x%x vma=0x%"BFD_VMA_FMT"x\n", +- r->name, r, r->flags, bfd_section_vma(abs_bfd, r)); ++ r->name, r, r->flags, elf2flt_bfd_section_vma(r)); + if ((r->flags & SEC_RELOC) == 0) + continue; + relsize = bfd_get_reloc_upper_bound(rel_bfd, r); +@@ -694,7 +703,7 @@ output_relocs ( + case R_BFIN_RIMM16: + case R_BFIN_LUIMM16: + case R_BFIN_HUIMM16: +- sym_vma = bfd_section_vma(abs_bfd, sym_section); ++ sym_vma = elf2flt_bfd_section_vma(sym_section); + sym_addr += sym_vma + q->addend; + + if (weak_und_symbol(sym_section->name, (*(q->sym_ptr_ptr)))) +@@ -727,7 +736,7 @@ output_relocs ( + break; + + case R_BFIN_BYTE4_DATA: +- sym_vma = bfd_section_vma(abs_bfd, sym_section); ++ sym_vma = elf2flt_bfd_section_vma(sym_section); + sym_addr += sym_vma + q->addend; + + if (weak_und_symbol (sym_section->name, (*(q->sym_ptr_ptr)))) +@@ -885,7 +894,7 @@ output_relocs ( + #if defined(TARGET_m68k) + case R_68K_32: + relocation_needed = 1; +- sym_vma = bfd_section_vma(abs_bfd, sym_section); ++ sym_vma = elf2flt_bfd_section_vma(sym_section); + sym_addr += sym_vma + q->addend; + break; + case R_68K_PC16: +@@ -910,7 +919,7 @@ output_relocs ( + q->address, sym_addr, + (*p)->howto->rightshift, + *(uint32_t *)r_mem); +- sym_vma = bfd_section_vma(abs_bfd, sym_section); ++ sym_vma = elf2flt_bfd_section_vma(sym_section); + sym_addr += sym_vma + q->addend; + break; + case R_ARM_GOT32: +@@ -938,7 +947,7 @@ output_relocs ( + #ifdef TARGET_v850 + case R_V850_ABS32: + relocation_needed = 1; +- sym_vma = bfd_section_vma(abs_bfd, sym_section); ++ sym_vma = elf2flt_bfd_section_vma(sym_section); + sym_addr += sym_vma + q->addend; + break; + case R_V850_ZDA_16_16_OFFSET: +@@ -960,7 +969,7 @@ output_relocs ( + sym_addr = (*(q->sym_ptr_ptr))->value; + q->address -= 1; + r_mem -= 1; /* tracks q->address */ +- sym_vma = bfd_section_vma(abs_bfd, sym_section); ++ sym_vma = elf2flt_bfd_section_vma(sym_section); + sym_addr += sym_vma + q->addend; + sym_addr |= (*(unsigned char *)r_mem<<24); + break; +@@ -973,7 +982,7 @@ output_relocs ( + /* Absolute symbol done not relocation */ + relocation_needed = !bfd_is_abs_section(sym_section); + sym_addr = (*(q->sym_ptr_ptr))->value; +- sym_vma = bfd_section_vma(abs_bfd, sym_section); ++ sym_vma = elf2flt_bfd_section_vma(sym_section); + sym_addr += sym_vma + q->addend; + break; + case R_H8_DIR32: +@@ -986,7 +995,7 @@ output_relocs ( + } + relocation_needed = 1; + sym_addr = (*(q->sym_ptr_ptr))->value; +- sym_vma = bfd_section_vma(abs_bfd, sym_section); ++ sym_vma = elf2flt_bfd_section_vma(sym_section); + sym_addr += sym_vma + q->addend; + break; + case R_H8_PCREL16: +@@ -1012,7 +1021,7 @@ output_relocs ( + #ifdef TARGET_microblaze + case R_MICROBLAZE_64: + /* work out the relocation */ +- sym_vma = bfd_section_vma(abs_bfd, sym_section); ++ sym_vma = elf2flt_bfd_section_vma(sym_section); + sym_addr += sym_vma + q->addend; + /* Write relocated pointer back */ + r_mem[2] = (sym_addr >> 24) & 0xff; +@@ -1026,7 +1035,7 @@ output_relocs ( + pflags = 0x80000000; + break; + case R_MICROBLAZE_32: +- sym_vma = bfd_section_vma(abs_bfd, sym_section); ++ sym_vma = elf2flt_bfd_section_vma(sym_section); + sym_addr += sym_vma + q->addend; + relocation_needed = 1; + break; +@@ -1058,7 +1067,7 @@ output_relocs ( + case R_NIOS2_BFD_RELOC_32: + relocation_needed = 1; + pflags = (FLAT_NIOS2_R_32 << 28); +- sym_vma = bfd_section_vma(abs_bfd, sym_section); ++ sym_vma = elf2flt_bfd_section_vma(sym_section); + sym_addr += sym_vma + q->addend; + /* modify target, in target order */ + *(unsigned long *)r_mem = htoniosl(sym_addr); +@@ -1068,7 +1077,7 @@ output_relocs ( + unsigned long exist_val; + relocation_needed = 1; + pflags = (FLAT_NIOS2_R_CALL26 << 28); +- sym_vma = bfd_section_vma(abs_bfd, sym_section); ++ sym_vma = elf2flt_bfd_section_vma(sym_section); + sym_addr += sym_vma + q->addend; + + /* modify target, in target order */ +@@ -1099,7 +1108,7 @@ output_relocs ( + ? FLAT_NIOS2_R_HIADJ_LO : FLAT_NIOS2_R_HI_LO; + pflags <<= 28; + +- sym_vma = bfd_section_vma(abs_bfd, sym_section); ++ sym_vma = elf2flt_bfd_section_vma(sym_section); + sym_addr += sym_vma + q->addend; + + /* modify high 16 bits, in target order */ +@@ -1132,7 +1141,7 @@ output_relocs ( + goto NIOS2_RELOC_ERR; + } + /* _gp holds a absolute value, otherwise the ld cannot generate correct code */ +- sym_vma = bfd_section_vma(abs_bfd, sym_section); ++ sym_vma = elf2flt_bfd_section_vma(sym_section); + //printf("sym=%x, %d, _gp=%x, %d\n", sym_addr+sym_vma, sym_addr+sym_vma, gp, gp); + sym_addr += sym_vma + q->addend; + sym_addr -= gp; +@@ -1213,7 +1222,7 @@ NIOS2_RELOC_ERR: + case R_SPARC_32: + case R_SPARC_UA32: + relocation_needed = 1; +- sym_vma = bfd_section_vma(abs_bfd, sym_section); ++ sym_vma = elf2flt_bfd_section_vma(sym_section); + sym_addr += sym_vma + q->addend; + break; + case R_SPARC_PC22: +@@ -1232,7 +1241,7 @@ NIOS2_RELOC_ERR: + case R_SPARC_HI22: + relocation_needed = 1; + pflags = 0x80000000; +- sym_vma = bfd_section_vma(abs_bfd, sym_section); ++ sym_vma = elf2flt_bfd_section_vma(sym_section); + sym_addr += sym_vma + q->addend; + sym_addr |= ( + htonl(*(uint32_t *)r_mem) +@@ -1242,7 +1251,7 @@ NIOS2_RELOC_ERR: + case R_SPARC_LO10: + relocation_needed = 1; + pflags = 0x40000000; +- sym_vma = bfd_section_vma(abs_bfd, sym_section); ++ sym_vma = elf2flt_bfd_section_vma(sym_section); + sym_addr += sym_vma + q->addend; + sym_addr &= 0x000003ff; + sym_addr |= ( +@@ -1256,7 +1265,7 @@ NIOS2_RELOC_ERR: + #ifdef TARGET_sh + case R_SH_DIR32: + relocation_needed = 1; +- sym_vma = bfd_section_vma(abs_bfd, sym_section); ++ sym_vma = elf2flt_bfd_section_vma(sym_section); + sym_addr += sym_vma + q->addend; + break; + case R_SH_REL32: +@@ -1288,7 +1297,7 @@ NIOS2_RELOC_ERR: + case R_E1_CONST31: + relocation_needed = 1; + DBG_E1("Handling Reloc \n"); +- sec_vma = bfd_section_vma(abs_bfd, sym_section); ++ sec_vma = elf2flt_bfd_section_vma(sym_section); + DBG_E1("sec_vma : [0x%x], sym_addr : [0x%x], q->address : [0x%x]\n", + sec_vma, sym_addr, q->address); + sym_addr = sec_vma + sym_addr; +@@ -1303,7 +1312,7 @@ NIOS2_RELOC_ERR: + relocation_needed = 0; + DBG_E1("Handling Reloc \n"); + DBG_E1("DONT RELOCATE AT LOADING\n"); +- sec_vma = bfd_section_vma(abs_bfd, sym_section); ++ sec_vma = elf2flt_bfd_section_vma(sym_section); + DBG_E1("sec_vma : [0x%x], sym_addr : [0x%x], q->address : [0x%x]\n", + sec_vma, sym_addr, q->address); + sym_addr = sec_vma + sym_addr; +@@ -1330,7 +1339,7 @@ NIOS2_RELOC_ERR: + relocation_needed = 0; + DBG_E1("Handling Reloc \n"); + DBG_E1("DONT RELOCATE AT LOADING\n"); +- sec_vma = bfd_section_vma(abs_bfd, sym_section); ++ sec_vma = elf2flt_bfd_section_vma(sym_section); + DBG_E1("sec_vma : [0x%x], sym_addr : [0x%x], q->address : [0x%x]\n", + sec_vma, sym_addr, q->address); + sym_addr = sec_vma + sym_addr; +@@ -1363,7 +1372,7 @@ NIOS2_RELOC_ERR: + DBG_E1("Handling Reloc \n"); + DIS29_RELOCATION: + relocation_needed = 1; +- sec_vma = bfd_section_vma(abs_bfd, sym_section); ++ sec_vma = elf2flt_bfd_section_vma(sym_section); + DBG_E1("sec_vma : [0x%x], sym_addr : [0x%08x]\n", + sec_vma, sym_addr); + sym_addr = sec_vma + sym_addr; +@@ -1380,7 +1389,7 @@ DIS29_RELOCATION: + relocation_needed = 0; + DBG_E1("Handling Reloc \n"); + DBG_E1("DONT RELOCATE AT LOADING\n"); +- sec_vma = bfd_section_vma(abs_bfd, sym_section); ++ sec_vma = elf2flt_bfd_section_vma(sym_section); + DBG_E1("sec_vma : [0x%x], sym_addr : [0x%x]\n", + sec_vma, sym_addr); + sym_addr = sec_vma + sym_addr; +@@ -1406,7 +1415,7 @@ DIS29_RELOCATION: + case R_E1_IMM32: + relocation_needed = 1; + DBG_E1("Handling Reloc \n"); +- sec_vma = bfd_section_vma(abs_bfd, sym_section); ++ sec_vma = elf2flt_bfd_section_vma(sym_section); + DBG_E1("sec_vma : [0x%x], sym_addr : [0x%x]\n", + sec_vma, sym_addr); + sym_addr = sec_vma + sym_addr; +@@ -1422,7 +1431,7 @@ DIS29_RELOCATION: + case R_E1_WORD: + relocation_needed = 1; + DBG_E1("Handling Reloc \n"); +- sec_vma = bfd_section_vma(abs_bfd, sym_section); ++ sec_vma = elf2flt_bfd_section_vma(sym_section); + DBG_E1("sec_vma : [0x%x], sym_addr : [0x%x]\n", + sec_vma, sym_addr); + sym_addr = sec_vma + sym_addr; +@@ -1449,7 +1458,7 @@ DIS29_RELOCATION: + } + + sprintf(&addstr[0], "+0x%lx", sym_addr - (*(q->sym_ptr_ptr))->value - +- bfd_section_vma(abs_bfd, sym_section)); ++ elf2flt_bfd_section_vma(sym_section)); + + + /* +@@ -1887,8 +1896,8 @@ int main(int argc, char *argv[]) + } else + continue; + +- sec_size = bfd_section_size(abs_bfd, s); +- sec_vma = bfd_section_vma(abs_bfd, s); ++ sec_size = elf2flt_bfd_section_size(s); ++ sec_vma = elf2flt_bfd_section_vma(s); + + if (sec_vma < *vma) { + if (*len > 0) +@@ -1913,7 +1922,7 @@ int main(int argc, char *argv[]) + if (s->flags & SEC_CODE) + if (!bfd_get_section_contents(abs_bfd, s, + text + (s->vma - text_vma), 0, +- bfd_section_size(abs_bfd, s))) ++ elf2flt_bfd_section_size(s))) + { + fatal("read error section %s", s->name); + } +@@ -1939,7 +1948,7 @@ int main(int argc, char *argv[]) + if (s->flags & SEC_DATA) + if (!bfd_get_section_contents(abs_bfd, s, + data + (s->vma - data_vma), 0, +- bfd_section_size(abs_bfd, s))) ++ elf2flt_bfd_section_size(s))) + { + fatal("read error section %s", s->name); + } +-- +2.25.4 + diff --git a/package/elf2flt/Config.in.host b/package/elf2flt/Config.in.host new file mode 100644 index 00000000..d6685a7f --- /dev/null +++ b/package/elf2flt/Config.in.host @@ -0,0 +1,13 @@ +config BR2_PACKAGE_HOST_ELF2FLT + bool "Enable elf2flt support?" + depends on BR2_arm || BR2_sh || BR2_sparc || BR2_xtensa + depends on !BR2_USE_MMU + help + uCLinux uses a Binary Flat format commonly known as BFLT. It + is a relatively simple and lightweight executable format + based on the original a.out format. + + This option compiles the required tools and makes the required + modifications on your toolchain (linker). + + https://github.com/uclinux-dev/elf2flt diff --git a/package/elf2flt/elf2flt.hash b/package/elf2flt/elf2flt.hash new file mode 100644 index 00000000..c4b0697f --- /dev/null +++ b/package/elf2flt/elf2flt.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 d63baae6fe0d7fcc50a635be151a6f9e1e83dba30568046a869a395c15bf6284 elf2flt-7e33f28df198c46764021ed14408bd262751e148.tar.gz +sha256 f20bc5007904094e3a4e9fbcc3526cdd40893f91d458c3139b308e5c4c0899c6 LICENSE.TXT diff --git a/package/elf2flt/elf2flt.mk b/package/elf2flt/elf2flt.mk new file mode 100644 index 00000000..3239af1b --- /dev/null +++ b/package/elf2flt/elf2flt.mk @@ -0,0 +1,51 @@ +################################################################################ +# +# elf2flt +# +################################################################################ + +ELF2FLT_VERSION = 7e33f28df198c46764021ed14408bd262751e148 +ELF2FLT_SITE = $(call github,uclinux-dev,elf2flt,$(ELF2FLT_VERSION)) +ELF2FLT_LICENSE = GPL-2.0+ +ELF2FLT_LICENSE_FILES = LICENSE.TXT + +HOST_ELF2FLT_DEPENDENCIES = host-binutils host-zlib + +# 0003-elf2flt-handle-binutils-2.34.patch +HOST_ELF2FLT_AUTORECONF = YES + +# It is not exactly a host variant, but more a cross variant, which is +# why we pass a special --target option. +HOST_ELF2FLT_CONF_OPTS = \ + --with-bfd-include-dir=$(HOST_BINUTILS_DIR)/bfd/ \ + --with-binutils-include-dir=$(HOST_BINUTILS_DIR)/include/ \ + --with-libbfd=$(HOST_BINUTILS_DIR)/bfd/libbfd.a \ + --with-libiberty=$(HOST_BINUTILS_DIR)/libiberty/libiberty.a \ + --target=$(GNU_TARGET_NAME) \ + --disable-werror + +HOST_ELF2FLT_LIBS = -lz + +ifeq ($(BR2_GCC_ENABLE_LTO),y) +HOST_ELF2FLT_LIBS += -ldl +endif + +HOST_ELF2FLT_CONF_ENV = LIBS="$(HOST_ELF2FLT_LIBS)" + +# Hardlinks between binaries in different directories cause a problem +# with rpath fixup, so we de-hardlink those binaries, and replace them +# with copies instead. Note that elf2flt will rename ld to ld.real +# before installing its own ld, but we already took care of the +# original ld from binutils so that it is already de-hardlinked. So +# ld is now the one from elf2flt, and we want to de-hardlinke it. +ELF2FLT_TOOLS = elf2flt flthdr ld +define HOST_ELF2FLT_FIXUP_HARDLINKS + $(foreach tool,$(ELF2FLT_TOOLS),\ + rm -f $(HOST_DIR)/$(GNU_TARGET_NAME)/bin/$(tool) && \ + cp -a $(HOST_DIR)/bin/$(GNU_TARGET_NAME)-$(tool) \ + $(HOST_DIR)/$(GNU_TARGET_NAME)/bin/$(tool) + ) +endef +HOST_ELF2FLT_POST_INSTALL_HOOKS += HOST_ELF2FLT_FIXUP_HARDLINKS + +$(eval $(host-autotools-package)) diff --git a/package/elftosb/0001-fixes-includes.patch b/package/elftosb/0001-fixes-includes.patch new file mode 100644 index 00000000..eaf8ebad --- /dev/null +++ b/package/elftosb/0001-fixes-includes.patch @@ -0,0 +1,19 @@ +This patch uses system include files instead of a hard coded system path to fixe +potential compilation failure on systems that do not populate system header +files in /usr/include/.. + +Signed-off-by: Eric Jarrige +--- +Index: host-elftosb-10.12.01/common/stdafx.h +=================================================================== +--- host-elftosb-10.12.01.orig/common/stdafx.h 2012-01-30 12:43:35.000000000 +0100 ++++ host-elftosb-10.12.01/common/stdafx.h 2012-01-30 12:43:54.000000000 +0100 +@@ -27,7 +27,7 @@ + // For Linux systems only, types.h only defines the signed + // integer types. This is not professional code. + // Update: They are defined in the header files in the more recent version of redhat enterprise gcc. +-#include "/usr/include/sys/types.h" ++#include + #include + //typedef unsigned long uint32_t; + //typedef unsigned short uint16_t; diff --git a/package/elftosb/0002-force-cxx-compiler.patch b/package/elftosb/0002-force-cxx-compiler.patch new file mode 100644 index 00000000..14df0dbe --- /dev/null +++ b/package/elftosb/0002-force-cxx-compiler.patch @@ -0,0 +1,98 @@ +Subject: [PATCH 1/1] elftosb: force host C++ compiler + +Because Freescale provides *.cpp sources and elftosb links again libstdc++, +force to use the host c++ compiler. + +This patch avoids the following error occurs: + +gcc AESKey.o Blob.o crc.o DataSource.o DataTarget.o ELFSourceFile.o EncoreBootImage.o EvalContext.o GHSSecInfo.o GlobMatcher.o HexValues.o Logging.o Operation.o OptionDictionary.o options.o OutputSection.o Random.o RijndaelCBCMAC.o rijndael.o SHA1.o SourceFile.o SRecordSourceFile.o stdafx.o StELFFile.o StExecutableImage.o StSRecordFile.o Value.o Version.o format_string.o ExcludesListMatcher.o SearchPath.o DataSourceImager.o IVTDataSource.o BootImageGenerator.o ConversionController.o ElftosbAST.o elftosb.o elftosb_lexer.o ElftosbLexer.o elftosb_parser.tab.o EncoreBootImageGenerator.o -lstdc++ -o elftosb +/usr/bin/ld: ElftosbAST.o: undefined reference to symbol 'powf@@GLIBC_2.2.5' +/usr/bin/ld: note: 'powf@@GLIBC_2.2.5' is defined in DSO /lib64/libm.so.6 so try adding it to the linker command line +/lib64/libm.so.6: could not read symbols: Invalid operation +collect2: error: ld returned 1 exit status + +When compiling with gcc and linking against libstdc++, ld uses libc instead of +libstdc++. +However, libc does not provide all functions libstdc++ does. +Indeed, maths functions are provided by libm, not libc. +Thus, elftosb should either: +- use gcc and link against libc and libm; +- or use g++ and link against libstdc++. + +Because elftosb is written in C++, this patch implement the sencond option, using +g++ and linking against libstdc++. + +Signed-off-by: Samuel Martin + +--- +Index: host-elftosb-10.12.01/makefile.rules +=================================================================== +--- host-elftosb-10.12.01.orig/makefile.rules 2012-06-09 21:12:23.557526100 +0200 ++++ host-elftosb-10.12.01/makefile.rules 2012-06-09 21:15:21.659894571 +0200 +@@ -15,6 +15,8 @@ + # UNAMES is going to be set to either "Linux" or "CYGWIN_NT-5.1" + UNAMES = $(shell uname -s) + ++CXX ?= g++ ++ + #******************************************************************************* + # Directories + +@@ -37,9 +39,9 @@ + #******************************************************************************* + # Build flags +-# gcc Compiler flags ++# Compiler flags + # -g : Produce debugging information. + +-CFLAGS = -g $(INC_PATH) -D${UNAMES} ++CXXFLAGS = -g $(INC_PATH) -D${UNAMES} + + #******************************************************************************* + # File lists +@@ -137,13 +139,13 @@ clean: + ${EXEC_FILE_ELFTOSB2} ${EXEC_FILE_SBTOOL} ${EXEC_FILE_KEYGEN} + + elftosb: ${OBJ_FILES_ELFTOSB2} +- gcc ${OBJ_FILES_ELFTOSB2} ${LIBS} -o ${EXEC_FILE_ELFTOSB2} ++ $(CXX) ${OBJ_FILES_ELFTOSB2} ${LIBS} -o ${EXEC_FILE_ELFTOSB2} + + sbtool: ${OBJ_FILES_SBTOOL} +- gcc ${OBJ_FILES_SBTOOL} ${LIBS} -o ${EXEC_FILE_SBTOOL} ++ $(CXX) ${OBJ_FILES_SBTOOL} ${LIBS} -o ${EXEC_FILE_SBTOOL} + + keygen: ${OBJ_FILES_KEYGEN} +- gcc ${OBJ_FILES_KEYGEN} ${LIBS} -o ${EXEC_FILE_KEYGEN} ++ $(CXX) ${OBJ_FILES_KEYGEN} ${LIBS} -o ${EXEC_FILE_KEYGEN} + + + #ifeq ("${UNAMES}", "Linux") +@@ -153,10 +155,10 @@ keygen: ${OBJ_FILES_KEYGEN} + .SUFFIXES : .c .cpp + + .c.o : +- gcc ${CFLAGS} -c $< ++ $(CC) ${CXXFLAGS} -c $< + + .cpp.o : +- gcc ${CFLAGS} -c $< ++ $(CXX) ${CXXFLAGS} -c $< + + #endif + +@@ -165,13 +167,13 @@ keygen: ${OBJ_FILES_KEYGEN} + + %.d: %.c + @set -e; \ +- $(CC) -MM $(CFLAGS) $< | \ ++ $(CC) -MM $(CXXFLAGS) $< | \ + sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@; \ + [ -s $@ ] || rm -f $@ + + %.d: %.cpp + @set -e; \ +- $(CC) -MM $(CFLAGS) $< | \ ++ $(CXX) -MM $(CXXFLAGS) $< | \ + sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@; \ + [ -s $@ ] || rm -f $@ + diff --git a/package/elftosb/elftosb.hash b/package/elftosb/elftosb.hash new file mode 100644 index 00000000..83f5ce66 --- /dev/null +++ b/package/elftosb/elftosb.hash @@ -0,0 +1,4 @@ +# From http://repository.timesys.com/buildsources/e/elftosb/elftosb-10.12.01/elftosb-10.12.01.tar.gz.md5sum +md5 e8005d606c1e0bb3507c82f6eceb3056 elftosb-10.12.01.tar.gz +# locally computed +sha256 c861c25936b7bc0cf180023d540f2b0d0f5892edd27fd00efef4b6234c1df27a COPYING diff --git a/package/elftosb/elftosb.mk b/package/elftosb/elftosb.mk new file mode 100644 index 00000000..44eb98c8 --- /dev/null +++ b/package/elftosb/elftosb.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# elftosb +# +################################################################################ + +ELFTOSB_VERSION = 10.12.01 +ELFTOSB_SITE = http://repository.timesys.com/buildsources/e/elftosb/elftosb-$(ELFTOSB_VERSION) +ELFTOSB_LICENSE = BSD-3-Clause +ELFTOSB_LICENSE_FILES = COPYING + +define HOST_ELFTOSB_BUILD_CMDS + $(HOST_CONFIGURE_OPTS) $(MAKE) -C $(@D) all +endef + +define HOST_ELFTOSB_INSTALL_CMDS + $(INSTALL) -D -m 0755 $(@D)/bld/linux/elftosb $(HOST_DIR)/bin/elftosb + $(INSTALL) -D -m 0755 $(@D)/bld/linux/keygen $(HOST_DIR)/bin/keygen + $(INSTALL) -D -m 0755 $(@D)/bld/linux/sbtool $(HOST_DIR)/bin/sbtool +endef + +$(eval $(host-generic-package)) diff --git a/package/elfutils/0001-Add-a-enable-disable-progs-configure-option.patch b/package/elfutils/0001-Add-a-enable-disable-progs-configure-option.patch new file mode 100644 index 00000000..7b3c4593 --- /dev/null +++ b/package/elfutils/0001-Add-a-enable-disable-progs-configure-option.patch @@ -0,0 +1,63 @@ +From dfea82b761b2ea4708fbf9370a5467ae4be525ca Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Mon, 29 May 2017 23:03:48 +0300 +Subject: [PATCH] Add a --{enable,disable}-progs configure option + +Add a --{enable,disable}-progs configuration option to elfutils. This +allows to selectively disable the compilation of the elfutils programs +(in which case only the libraries are built and installed). This is +useful because the programs are often not needed, and also because +building the programs against uClibc causes several issues (lack of +obstack_printf() in uClibc for example). + +Based on the former patch by Thomas Petazzoni. + +[Vincent: tweak patch for 0.166] +[Bernd: rebased patch for 0.177] + +Signed-off-by: Thomas Petazzoni +Signed-off-by: Vicente Olivert Riera +Signed-off-by: Bernd Kuhls +--- + Makefile.am | 6 +++++- + configure.ac | 6 ++++++ + 2 files changed, 11 insertions(+), 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index 2ff444e7bf1d..70443abb4fb6 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -26,8 +26,12 @@ AM_MAKEFLAGS = --no-print-directory + + pkginclude_HEADERS = version.h + ++if ENABLE_PROGS ++PROGS_SUBDIR = src ++endif ++ + SUBDIRS = config m4 lib libelf libcpu backends libebl libdwelf libdwfl libdw \ +- libasm debuginfod src po doc tests ++ libasm debuginfod $(PROGS_SUBDIR) po doc tests + + EXTRA_DIST = elfutils.spec GPG-KEY NOTES CONTRIBUTING \ + COPYING COPYING-GPLV2 COPYING-LGPLV3 +diff --git a/configure.ac b/configure.ac +index c2c1d90b2133..7b4c38381cca 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -390,6 +390,12 @@ + [tests_use_rpath=$enableval], [tests_use_rpath=no]) + AM_CONDITIONAL(TESTS_RPATH, test "$tests_use_rpath" = yes) + ++AC_ARG_ENABLE([progs], ++ AS_HELP_STRING([--enable-progs], [enable progs]), ++ enable_progs=$enableval, ++ enable_progs=yes) ++AM_CONDITIONAL(ENABLE_PROGS, test "$enable_progs" = yes) ++ + dnl zlib is mandatory. + save_LIBS="$LIBS" + LIBS= +-- +2.11.0 + diff --git a/package/elfutils/0002-Really-make-Werror-conditional-to-BUILD_WERROR.patch b/package/elfutils/0002-Really-make-Werror-conditional-to-BUILD_WERROR.patch new file mode 100644 index 00000000..85ac1e4b --- /dev/null +++ b/package/elfutils/0002-Really-make-Werror-conditional-to-BUILD_WERROR.patch @@ -0,0 +1,38 @@ +From 2688a0238eaf825d6659c16c012db0c16f07e197 Mon Sep 17 00:00:00 2001 +From: Vicente Olivert Riera +Date: Mon, 29 May 2017 23:24:42 +0300 +Subject: [PATCH] Really make -Werror conditional to BUILD_WERROR + +Otherwise it will fail with an error message like this one: + +elf_getarsym.c:290:9: error: 'n' may be used uninitialized in this +function [-Werror=maybe-uninitialized] + arsym[n].as_name = NULL; + ^ +cc1: all warnings being treated as errors + +[Vincent: tweak patch for 0.166] +[Bernd: rebased patch for 0.177] + +Signed-off-by: "Yann E. MORIN" +Signed-off-by: Vicente Olivert Riera +Signed-off-by: Bernd Kuhls +--- + config/eu.am | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/config/eu.am b/config/eu.am +index c2cc349ce876..99b368e09060 100644 +--- a/config/eu.am ++++ b/config/eu.am +@@ -73,7 +73,6 @@ AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ + -Wold-style-definition -Wstrict-prototypes -Wtrampolines \ + $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \ + $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \ +- $(if $($(*F)_no_Werror),,-Werror) \ + $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ + $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \ + $(if $($(*F)_no_Wpacked_not_aligned),-Wno-packed-not-aligned,) \ +-- +2.17.1 + diff --git a/package/elfutils/Config.in b/package/elfutils/Config.in new file mode 100644 index 00000000..5f45de14 --- /dev/null +++ b/package/elfutils/Config.in @@ -0,0 +1,34 @@ +comment "elfutils needs a uClibc or glibc toolchain w/ wchar, dynamic library, threads" + depends on !BR2_USE_WCHAR || BR2_STATIC_LIBS \ + || !BR2_TOOLCHAIN_HAS_THREADS \ + || !(BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC) + +config BR2_PACKAGE_ELFUTILS + bool "elfutils" + depends on BR2_USE_WCHAR + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS + # Only glibc and uClibc implement the myriad of required GNUisms + depends on BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_ARGP_STANDALONE if BR2_TOOLCHAIN_USES_UCLIBC + select BR2_PACKAGE_MUSL_FTS if !BR2_TOOLCHAIN_USES_GLIBC + help + Libraries/utilities to handle ELF objects (drop in + replacement for libelf). + + Note that this option only installs the libraries, and not + the programs. + + https://sourceware.org/elfutils/ + +if BR2_PACKAGE_ELFUTILS + +config BR2_PACKAGE_ELFUTILS_PROGS + bool "Install programs" + depends on BR2_TOOLCHAIN_USES_GLIBC + help + This option tells elfutils to not only install the libelf + libraries, but also the elfutils programs. + +endif diff --git a/package/elfutils/elfutils.hash b/package/elfutils/elfutils.hash new file mode 100644 index 00000000..65ee764b --- /dev/null +++ b/package/elfutils/elfutils.hash @@ -0,0 +1,6 @@ +# From https://sourceware.org/elfutils/ftp/0.181/sha512.sum +sha512 d565541d5817f409dc89ebb1ee593366f69c371a1531308eeb67ff934b14a0fab0c9009fd7c23240efbaa1b4e04edac5c425e47d80e3e66ba03dcaf000afea36 elfutils-0.181.tar.bz2 +# Locally calculated +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING-GPLV2 +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 COPYING-LGPLV3 diff --git a/package/elfutils/elfutils.mk b/package/elfutils/elfutils.mk new file mode 100644 index 00000000..b76b06bc --- /dev/null +++ b/package/elfutils/elfutils.mk @@ -0,0 +1,91 @@ +################################################################################ +# +# elfutils +# +################################################################################ + +ELFUTILS_VERSION = 0.181 +ELFUTILS_SOURCE = elfutils-$(ELFUTILS_VERSION).tar.bz2 +ELFUTILS_SITE = https://sourceware.org/elfutils/ftp/$(ELFUTILS_VERSION) +ELFUTILS_INSTALL_STAGING = YES +ELFUTILS_LICENSE = GPL-2.0+ or LGPL-3.0+ (library) +ELFUTILS_LICENSE_FILES = COPYING COPYING-GPLV2 COPYING-LGPLV3 +ELFUTILS_CPE_ID_VENDOR = elfutils_project +ELFUTILS_DEPENDENCIES = host-pkgconf zlib $(TARGET_NLS_DEPENDENCIES) +HOST_ELFUTILS_DEPENDENCIES = host-pkgconf host-zlib host-bzip2 host-xz + +# We patch configure.ac +ELFUTILS_AUTORECONF = YES +HOST_ELFUTILS_AUTORECONF = YES + +# Pass a custom program prefix to avoid a naming conflict between +# elfutils binaries and binutils binaries. +ELFUTILS_CONF_OPTS += \ + --program-prefix="eu-" + +HOST_ELFUTILS_CONF_OPTS = \ + --with-bzlib \ + --with-lzma \ + --disable-progs + +# elfutils gets confused when lfs mode is forced, so don't +ELFUTILS_CFLAGS = $(filter-out -D_FILE_OFFSET_BITS=64,$(TARGET_CFLAGS)) +ELFUTILS_CPPFLAGS = $(filter-out -D_FILE_OFFSET_BITS=64,$(TARGET_CPPFLAGS)) + +# sparc64 needs -fPIC instead of -fpic +ifeq ($(BR2_sparc64),y) +ELFUTILS_CFLAGS += -fPIC +endif + +ELFUTILS_CONF_ENV += \ + CFLAGS="$(ELFUTILS_CFLAGS)" \ + CPPFLAGS="$(ELFUTILS_CPPFLAGS)" + +ELFUTILS_LDFLAGS = $(TARGET_LDFLAGS) \ + $(TARGET_NLS_LIBS) + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +ELFUTILS_LDFLAGS += -latomic +endif + +ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),) +ELFUTILS_DEPENDENCIES += musl-fts +ELFUTILS_LDFLAGS += -lfts +endif + +# disable for now, needs "distro" support +ELFUTILS_CONF_OPTS += --disable-libdebuginfod --disable-debuginfod +HOST_ELFUTILS_CONF_OPTS += --disable-libdebuginfod --disable-debuginfod + +ELFUTILS_CONF_ENV += \ + LDFLAGS="$(ELFUTILS_LDFLAGS)" + +ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y) +ELFUTILS_DEPENDENCIES += argp-standalone +ELFUTILS_CONF_OPTS += --disable-symbol-versioning +endif + +ifeq ($(BR2_PACKAGE_BZIP2),y) +ELFUTILS_DEPENDENCIES += bzip2 +ELFUTILS_CONF_OPTS += --with-bzlib +else +ELFUTILS_CONF_OPTS += --without-bzlib +endif + +ifeq ($(BR2_PACKAGE_XZ),y) +ELFUTILS_DEPENDENCIES += xz +ELFUTILS_CONF_OPTS += --with-lzma +else +ELFUTILS_CONF_OPTS += --without-lzma +endif + +ifeq ($(BR2_PACKAGE_ELFUTILS_PROGS),y) +ELFUTILS_CONF_OPTS += --enable-progs +ELFUTILS_LICENSE += , GPL-3.0+ (programs) +ELFUTILS_LICENSE_FILES += COPYING +else +ELFUTILS_CONF_OPTS += --disable-progs +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/elixir/elixir.hash b/package/elixir/elixir.hash new file mode 100644 index 00000000..b4d2f8b6 --- /dev/null +++ b/package/elixir/elixir.hash @@ -0,0 +1,3 @@ +# Computed locally +sha256 f3465d8a8e386f3e74831bf9594ee39e6dfde6aa430fe9260844cfe46aa10139 elixir-1.9.4.tar.gz +sha256 a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9 LICENSE diff --git a/package/elixir/elixir.mk b/package/elixir/elixir.mk new file mode 100644 index 00000000..6d935516 --- /dev/null +++ b/package/elixir/elixir.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# elixir +# +################################################################################ + +ELIXIR_VERSION = 1.9.4 +ELIXIR_SITE = $(call github,elixir-lang,elixir,v$(ELIXIR_VERSION)) +ELIXIR_LICENSE = Apache-2.0 +ELIXIR_LICENSE_FILES = LICENSE +HOST_ELIXIR_DEPENDENCIES = host-erlang + +define HOST_ELIXIR_BUILD_CMDS + $(HOST_MAKE_ENV) $(HOST_CONFIGURE_OPTS) $(MAKE) -C $(@D) compile +endef + +define HOST_ELIXIR_INSTALL_CMDS + $(HOST_MAKE_ENV) $(HOST_CONFIGURE_OPTS) $(MAKE) PREFIX="$(HOST_DIR)" -C $(@D) install +endef + +$(eval $(host-generic-package)) diff --git a/package/ell/0001-build-Add-rawmemchr-to-missing.h.patch b/package/ell/0001-build-Add-rawmemchr-to-missing.h.patch new file mode 100644 index 00000000..3e000230 --- /dev/null +++ b/package/ell/0001-build-Add-rawmemchr-to-missing.h.patch @@ -0,0 +1,47 @@ +From 3916c1cc32be205e185a8a56de5cde1b9ec60e81 Mon Sep 17 00:00:00 2001 +From: Denis Kenzior +Date: Mon, 30 Nov 2020 13:00:11 -0600 +Subject: [PATCH] build: Add rawmemchr to missing.h + +For those systems (i.e. musl) that do not support this + +[Upstream: https://git.kernel.org/pub/scm/libs/ell/ell.git/patch/?id=3916c1cc32be205e185a8a56de5cde1b9ec60e81] +Signed-off-by: Peter Seiderer +--- + configure.ac | 1 + + ell/missing.h | 10 ++++++++++ + 2 files changed, 11 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 1e5ead9..f34add1 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -98,6 +98,7 @@ AC_ARG_ENABLE(ubsan, AC_HELP_STRING([--enable-ubsan], + ]) + + AC_CHECK_FUNCS(explicit_bzero) ++AC_CHECK_FUNCS(rawmemchr) + + AC_CHECK_FUNC(signalfd, dummy=yes, + AC_MSG_ERROR(signalfd support is required)) +diff --git a/ell/missing.h b/ell/missing.h +index 6b9b0fd..2a3e647 100644 +--- a/ell/missing.h ++++ b/ell/missing.h +@@ -67,3 +67,13 @@ static inline void explicit_bzero(void *s, size_t n) + #ifndef SO_BINDTOIFINDEX + #define SO_BINDTOIFINDEX 62 + #endif ++ ++#ifndef HAVE_RAWMEMCHR ++static inline void *rawmemchr(const void *s, int c) ++{ ++_Pragma("GCC diagnostic push") ++_Pragma("GCC diagnostic ignored \"-Wstringop-overflow=\"") ++ return memchr(s, c, (size_t) -1); ++_Pragma("GCC diagnostic pop") ++} ++#endif +-- +2.29.2 + diff --git a/package/ell/0002-ell-add-missing-include-in-dhcp-server.patch b/package/ell/0002-ell-add-missing-include-in-dhcp-server.patch new file mode 100644 index 00000000..a2ac7b09 --- /dev/null +++ b/package/ell/0002-ell-add-missing-include-in-dhcp-server.patch @@ -0,0 +1,26 @@ +From 6dfff19d4716ba216de1a3298ed0f667d7782810 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=C3=89rico=20Nogueira?= +Date: Mon, 30 Nov 2020 18:40:33 -0300 +Subject: [PATCH] ell: add missing include in dhcp-server. + +[Upstream: https://git.kernel.org/pub/scm/libs/ell/ell.git/patch/?id=6dfff19d4716ba216de1a3298ed0f667d7782810] +Signed-off-by: Peter Seiderer +--- + ell/dhcp-server.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/ell/dhcp-server.c b/ell/dhcp-server.c +index c983ed4..144e83e 100644 +--- a/ell/dhcp-server.c ++++ b/ell/dhcp-server.c +@@ -24,6 +24,7 @@ + #include + #endif + ++#include + #include + #include + #include +-- +2.29.2 + diff --git a/package/ell/Config.in b/package/ell/Config.in new file mode 100644 index 00000000..c7c91648 --- /dev/null +++ b/package/ell/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_ELL + bool "ell" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12 + depends on BR2_USE_WCHAR + help + Embedded Linux library (ell) + + https://01.org/ell + +comment "ell needs a toolchain w/ wchar, headers >= 4.12" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12 diff --git a/package/ell/ell.hash b/package/ell/ell.hash new file mode 100644 index 00000000..efd39b31 --- /dev/null +++ b/package/ell/ell.hash @@ -0,0 +1,5 @@ +# Locally computed +sha256 c2b3848568c75bcf5a0e7d1f2efce4fdb2733d28226ed21c6a6542f0be05d784 ell-0.35-br1.tar.gz + +# License files +sha256 ec60b993835e2c6b79e6d9226345f4e614e686eb57dc13b6420c15a33a8996e5 COPYING diff --git a/package/ell/ell.mk b/package/ell/ell.mk new file mode 100644 index 00000000..8aec067b --- /dev/null +++ b/package/ell/ell.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# ell +# +################################################################################ + +ELL_VERSION = 0.35 +ELL_SITE = https://git.kernel.org/pub/scm/libs/ell/ell.git +ELL_SITE_METHOD = git +ELL_LICENSE = LGPL-2.1+ +ELL_LICENSE_FILES = COPYING +ELL_INSTALL_STAGING = YES +# sources from git, no configure script provided +ELL_AUTORECONF = YES + +# autoreconf requires an existing build-aux directory +define ELL_MKDIR_BUILD_AUX + mkdir -p $(@D)/build-aux +endef +ELL_POST_PATCH_HOOKS += ELL_MKDIR_BUILD_AUX + +ELL_DEPENDENCIES = host-pkgconf + +# disable ell/glib main loop example +ELL_CONF_OPTS = --disable-glib + +$(eval $(autotools-package)) diff --git a/package/emlog/Config.in b/package/emlog/Config.in new file mode 100644 index 00000000..77d0ca35 --- /dev/null +++ b/package/emlog/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_EMLOG + bool "emlog" + depends on BR2_LINUX_KERNEL + help + emlog is a Linux kernel module that makes it easy to access + the most recent (and only the most recent) output from a + process. It works just like "tail -f" on a log file, except + that the storage required never grows. This can be useful in + embedded systems where there isn't enough memory or disk + space for keeping complete log files, but the most recent + debugging messages are sometimes needed (e.g., after an + error is observed). + + https://github.com/nicupavel/emlog + +comment "emlog needs a Linux kernel to be built" + depends on !BR2_LINUX_KERNEL diff --git a/package/emlog/emlog.hash b/package/emlog/emlog.hash new file mode 100644 index 00000000..ddc61a88 --- /dev/null +++ b/package/emlog/emlog.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 76082cf981b0865c8a1b300d4641c790a6556461901bbb63700df38300277271 emlog-0.70.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/emlog/emlog.mk b/package/emlog/emlog.mk new file mode 100644 index 00000000..7d63916a --- /dev/null +++ b/package/emlog/emlog.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# emlog +# +################################################################################ + +EMLOG_VERSION = 0.70 +EMLOG_SITE = $(call github,nicupavel,emlog,emlog-$(EMLOG_VERSION)) +EMLOG_LICENSE = GPL-2.0 +EMLOG_LICENSE_FILES = COPYING + +# CVE-2019-16868 and CVE-2019-17073 are misclassified (by our CVE tracker) as +# affecting emlog, while in fact it affects http://www.emlog.net. +EMLOG_IGNORE_CVES += CVE-2019-16868 CVE-2019-17073 + +define EMLOG_BUILD_CMDS + $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) nbcat +endef + +# make install tries to strip, so install manually. +define EMLOG_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/nbcat $(TARGET_DIR)/usr/bin/nbcat +endef + +$(eval $(kernel-module)) +$(eval $(generic-package)) diff --git a/package/empty/0001-respect-LDFLAGS.patch b/package/empty/0001-respect-LDFLAGS.patch new file mode 100644 index 00000000..b98af07e --- /dev/null +++ b/package/empty/0001-respect-LDFLAGS.patch @@ -0,0 +1,22 @@ +downloaded from +http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/app-misc/empty/files/empty-respect-LDFLAGS.patch?view=markup + +Reported on the Gentoo bug tracker +https://bugs.gentoo.org/show_bug.cgi?id=429664 + +and reported upstream +https://sourceforge.net/tracker/?func=detail&aid=3554236&group_id=136798&atid=736886 + +Signed-off-by: Bernd Kuhls + +--- empty-0.6.18b/Makefile ++++ empty-0.6.18b/Makefile +@@ -16,7 +16,7 @@ + PREFIX = /usr/local + + all: +- ${CC} ${CFLAGS} -Wall ${LIBS} -o empty empty.c ++ ${CC} ${CFLAGS} ${LDFLAGS} empty.c ${LIBS} -o empty + + FreeBSD: all + NetBSD: all diff --git a/package/empty/Config.in b/package/empty/Config.in new file mode 100644 index 00000000..f73bce89 --- /dev/null +++ b/package/empty/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_EMPTY + bool "empty" + depends on BR2_USE_MMU # uses fork() + help + Run processes and applications under pseudo-terminal (PTY) + sessions. + + http://empty.sourceforge.net/ diff --git a/package/empty/empty.hash b/package/empty/empty.hash new file mode 100644 index 00000000..c5fbc2b4 --- /dev/null +++ b/package/empty/empty.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 2fccd0faa1b3deaec1add679cbde3f34250e45872ad5df463badd4bb4edeb797 empty-0.6.21b.tgz +sha256 f01dbe3c624084900b9df1393d9062518b2bc0487acd6a3300ebd6e71352d112 COPYRIGHT diff --git a/package/empty/empty.mk b/package/empty/empty.mk new file mode 100644 index 00000000..a9b8080a --- /dev/null +++ b/package/empty/empty.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# empty +# +################################################################################ + +EMPTY_VERSION = 0.6.21b +EMPTY_SOURCE = empty-$(EMPTY_VERSION).tgz +EMPTY_SITE = http://downloads.sourceforge.net/project/empty/empty/empty-$(EMPTY_VERSION) +EMPTY_LICENSE = BSD-3-Clause +EMPTY_LICENSE_FILES = COPYRIGHT +EMPTY_STRIP_COMPONENTS = 0 + +define EMPTY_BUILD_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) all +endef + +define EMPTY_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/empty $(TARGET_DIR)/usr/bin/empty +endef + +$(eval $(generic-package)) diff --git a/package/enchant/Config.in b/package/enchant/Config.in new file mode 100644 index 00000000..4a39d03f --- /dev/null +++ b/package/enchant/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_ENCHANT + bool "enchant" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + select BR2_PACKAGE_LIBGLIB2 + help + Enchant is a spell-checking library that provides a consistent + API across a number of spell-checking system backends. + + https://abiword.github.io/enchant/ + +comment "enchant needs a toolchain w/ C++, threads, wchar" + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/enchant/enchant.hash b/package/enchant/enchant.hash new file mode 100644 index 00000000..84d738ff --- /dev/null +++ b/package/enchant/enchant.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 a29c5777c4e45fcac2595c15c49d6d2aa434fa5e7c993dff3f9f367b65fe472a enchant-2.2.11.tar.gz +sha256 32434afcc8666ba060e111d715bfdb6c2d5dd8a35fa4d3ab8ad67d8f850d2f2b COPYING.LIB diff --git a/package/enchant/enchant.mk b/package/enchant/enchant.mk new file mode 100644 index 00000000..c342600b --- /dev/null +++ b/package/enchant/enchant.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# enchant +# +################################################################################ + +ENCHANT_VERSION = 2.2.11 +ENCHANT_SITE = \ + https://github.com/AbiWord/enchant/releases/download/v$(ENCHANT_VERSION) +ENCHANT_INSTALL_STAGING = YES +ENCHANT_DEPENDENCIES = libglib2 host-pkgconf +ENCHANT_LICENSE = LGPL-2.1+ +ENCHANT_LICENSE_FILES = COPYING.LIB + +$(eval $(autotools-package)) diff --git a/package/enet/Config.in b/package/enet/Config.in new file mode 100644 index 00000000..ef3f1523 --- /dev/null +++ b/package/enet/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_ENET + bool "enet" + help + ENet's purpose is to provide a relatively thin, simple + and robust network communication layer on top of UDP + (User Datagram Protocol).The primary feature it + provides is optional reliable, in-order delivery of + packets. + + ENet omits certain higher level networking features + such as authentication, lobbying, server discovery, + encryption, or other similar tasks that are + particularly application specific so that the library + remains flexible, portable, and easily embeddable. + + http://enet.bespin.org diff --git a/package/enet/enet.hash b/package/enet/enet.hash new file mode 100644 index 00000000..ed5231c7 --- /dev/null +++ b/package/enet/enet.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 98f6f57aab0a424469619ed3047728f0d3901ce8f0dea919c11e7966d807e870 enet-1.3.14.tar.gz +sha256 eebe647a9ef7e596b0e8b9216c215f169d762af1a27904a87bc2e05b83735d35 LICENSE diff --git a/package/enet/enet.mk b/package/enet/enet.mk new file mode 100644 index 00000000..b12c1b60 --- /dev/null +++ b/package/enet/enet.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# enet +# +################################################################################ + +ENET_VERSION = 1.3.14 +ENET_SITE = http://enet.bespin.org/download +ENET_LICENSE = MIT +ENET_LICENSE_FILES = LICENSE + +ENET_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/enlightenment/Config.in b/package/enlightenment/Config.in new file mode 100644 index 00000000..91cdd896 --- /dev/null +++ b/package/enlightenment/Config.in @@ -0,0 +1,38 @@ +config BR2_PACKAGE_ENLIGHTENMENT + bool "enlightenment" + depends on BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS # efl svg -> librsvg + # libevas-generic-loaders-svg -> librsvg -> glib2 / pango + depends on BR2_USE_WCHAR + depends on BR2_INSTALL_LIBSTDCPP + # libedbus -> dbus + # libedbus -> glib2, libevas + depends on BR2_TOOLCHAIN_HAS_THREADS + # libedbus -> dbus, efl libraries + depends on BR2_USE_MMU + depends on BR2_PACKAGE_EFL + depends on BR2_PACKAGE_HAS_UDEV # efl (eeze) -> libudev + depends on BR2_PACKAGE_XORG7 + # libevas-generic-loaders-svg -> librsvg -> pango -> harfbuzz + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + select BR2_PACKAGE_EFL_X_XLIB + select BR2_PACKAGE_EFL_EEZE + select BR2_PACKAGE_EFL_JPEG # needed at runtime by enlightenment_start + select BR2_PACKAGE_EFL_SVG + select BR2_PACKAGE_XCB_UTIL_KEYSYMS + help + Enlightenment, also known simply as E, is a stacking window + manager for the X Window System which can be used alone or + in conjunction with a desktop environment such as GNOME or + KDE. Enlightenment can be used as a substitute for a full + desktop environment. + + http://www.enlightenment.org/ + +comment "enlightenment needs udev /dev management and a toolchain w/ wchar, C++, threads, gcc >= 4.8" + depends on BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS + depends on BR2_PACKAGE_EFL && BR2_PACKAGE_XORG7 && BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 || \ + !BR2_PACKAGE_HAS_UDEV + depends on BR2_TOOLCHAIN_HAS_SYNC_4 diff --git a/package/enlightenment/enlightenment.hash b/package/enlightenment/enlightenment.hash new file mode 100644 index 00000000..7f0f3f3e --- /dev/null +++ b/package/enlightenment/enlightenment.hash @@ -0,0 +1,4 @@ +# From https://www.enlightenment.org/news/e24.2 +sha256 be18e2f18d6c0b058f633e769863d3cbc4c07b629058ae670dec74cd7906dff1 enlightenment-0.24.2.tar.xz +sha256 17dda7902d3e1a743f91cf2545f474be93f612768a9e9022593d788ecc83935a COPYING +sha256 f4ba47ef8f4ff588202e721ab10f0208a3fa678147e7f928e6b2820f2e646e13 src/modules/wl_weekeyboard/themes/default/fonts/LICENSE.txt diff --git a/package/enlightenment/enlightenment.mk b/package/enlightenment/enlightenment.mk new file mode 100644 index 00000000..969b391c --- /dev/null +++ b/package/enlightenment/enlightenment.mk @@ -0,0 +1,57 @@ +################################################################################ +# +# enlightenment +# +################################################################################ + +ENLIGHTENMENT_VERSION = 0.24.2 +ENLIGHTENMENT_SOURCE = enlightenment-$(ENLIGHTENMENT_VERSION).tar.xz +ENLIGHTENMENT_SITE = http://download.enlightenment.org/rel/apps/enlightenment +ENLIGHTENMENT_LICENSE = BSD-2-Clause, OFL-1.1 (font) +ENLIGHTENMENT_LICENSE_FILES = COPYING \ + src/modules/wl_weekeyboard/themes/default/fonts/LICENSE.txt +ENLIGHTENMENT_CPE_ID_VENDOR = enlightenment + +ENLIGHTENMENT_DEPENDENCIES = \ + host-pkgconf \ + host-efl \ + efl \ + xcb-util-keysyms + +ENLIGHTENMENT_CONF_OPTS = \ + -Dedje-cc=$(HOST_DIR)/bin/edje_cc \ + -Deet=$(HOST_DIR)/bin/eet \ + -Deldbus-codegen=$(HOST_DIR)/bin/eldbus-codegen \ + -Dpam=false \ + -Dpolkit=false + +# enlightenment.pc and /usr/lib/enlightenment/modules/*.so +ENLIGHTENMENT_INSTALL_STAGING = YES + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +ENLIGHTENMENT_CONF_OPTS += -Dsystemd=true +ENLIGHTENMENT_DEPENDENCIES += systemd +else +ENLIGHTENMENT_CONF_OPTS += -Dsystemd=false +endif + +# alsa backend needs mixer support +ifeq ($(BR2_PACKAGE_ALSA_LIB)$(BR2_PACKAGE_ALSA_LIB_MIXER),yy) +ENLIGHTENMENT_CONF_OPTS += -Dmixer=true +ENLIGHTENMENT_DEPENDENCIES += alsa-lib +else +ENLIGHTENMENT_CONF_OPTS += -Dmixer=false +endif + +ifeq ($(BR2_PACKAGE_XKEYBOARD_CONFIG),y) +ENLIGHTENMENT_DEPENDENCIES += xkeyboard-config +endif + +define ENLIGHTENMENT_REMOVE_DOCUMENTATION + rm -rf $(TARGET_DIR)/usr/share/enlightenment/doc/ + rm -f $(TARGET_DIR)/usr/share/enlightenment/COPYING + rm -f $(TARGET_DIR)/usr/share/enlightenment/AUTHORS +endef +ENLIGHTENMENT_POST_INSTALL_TARGET_HOOKS += ENLIGHTENMENT_REMOVE_DOCUMENTATION + +$(eval $(meson-package)) diff --git a/package/enscript/Config.in b/package/enscript/Config.in new file mode 100644 index 00000000..b95bd92a --- /dev/null +++ b/package/enscript/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_ENSCRIPT + bool "enscript" + help + GNU Enscript is a free replacement for Adobe's enscript + program. + + GNU Enscript converts ASCII files to PostScript, HTML, or RTF + and stores generated output to a file or sends it directly to + the printer. It includes features for `pretty-printing' + (language-sensitive code highlighting) in several programming + languages. + + http://www.gnu.org/software/enscript diff --git a/package/enscript/enscript.hash b/package/enscript/enscript.hash new file mode 100644 index 00000000..4c50a165 --- /dev/null +++ b/package/enscript/enscript.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 6d56bada6934d055b34b6c90399aa85975e66457ac5bf513427ae7fc77f5c0bb enscript-1.6.6.tar.gz +# Locally computed +sha256 fc82ca8b6fdb18d4e3e85cfd8ab58d1bcd3f1b29abe782895abd91d64763f8e7 COPYING diff --git a/package/enscript/enscript.mk b/package/enscript/enscript.mk new file mode 100644 index 00000000..441ae3da --- /dev/null +++ b/package/enscript/enscript.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# enscript +# +################################################################################ + +ENSCRIPT_VERSION = 1.6.6 +ENSCRIPT_SITE = $(BR2_GNU_MIRROR)/enscript +ENSCRIPT_LICENSE = GPL-3.0+ +ENSCRIPT_LICENSE_FILES = COPYING +ENSCRIPT_CPE_ID_VENDOR = gnu + +# Enable pthread threads if toolchain supports threads +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +ENSCRIPT_CONF_OPTS += --enable-threads=pth +else +ENSCRIPT_CONF_OPTS += --disable-threads +endif + +$(eval $(autotools-package)) diff --git a/package/environment-setup/Config.in.host b/package/environment-setup/Config.in.host new file mode 100644 index 00000000..c67e3757 --- /dev/null +++ b/package/environment-setup/Config.in.host @@ -0,0 +1,6 @@ +config BR2_PACKAGE_HOST_ENVIRONMENT_SETUP + bool "host environment-setup" + help + Install an helper script to setup a build environment + based on Buildroot. It's useful when you export an sdk + and want to use Buildroot to build an external project. diff --git a/package/environment-setup/environment-setup b/package/environment-setup/environment-setup new file mode 100644 index 00000000..e9bc36fd --- /dev/null +++ b/package/environment-setup/environment-setup @@ -0,0 +1,19 @@ +cat <<'EOF' + _ _ _ _ _ +| |__ _ _(_) | __| |_ __ ___ ___ | |_ +| '_ \| | | | | |/ _` | '__/ _ \ / _ \| __| +| |_) | |_| | | | (_| | | | (_) | (_) | |_ +|_.__/ \__,_|_|_|\__,_|_| \___/ \___/ \__| + + Making embedded Linux easy! + +Some tips: +* PATH now contains the SDK utilities +* Standard autotools variables (CC, LD, CFLAGS) are exported +* Kernel compilation variables (ARCH, CROSS_COMPILE, KERNELDIR) are exported +* To configure do "./configure $CONFIGURE_FLAGS" or use + the "configure" alias +* To build CMake-based projects, use the "cmake" alias + +EOF +SDK_PATH=$(dirname $(realpath "${BASH_SOURCE[0]}")) diff --git a/package/environment-setup/environment-setup.mk b/package/environment-setup/environment-setup.mk new file mode 100644 index 00000000..f4c52921 --- /dev/null +++ b/package/environment-setup/environment-setup.mk @@ -0,0 +1,41 @@ +################################################################################ +# +# environment-setup +# +################################################################################ + +ENVIRONMENT_SETUP_FILE = $(HOST_DIR)/environment-setup + +define HOST_ENVIRONMENT_SETUP_INSTALL_CMDS + cp package/environment-setup/environment-setup $(ENVIRONMENT_SETUP_FILE) + for var in $(TARGET_CONFIGURE_OPTS); do \ + printf "export \"$$var\"\n" >> $(ENVIRONMENT_SETUP_FILE); \ + done + printf "export \"ARCH=$(KERNEL_ARCH)\"\n" >> $(ENVIRONMENT_SETUP_FILE) + printf "export \"CROSS_COMPILE=$(TARGET_CROSS)\"\n" >> $(ENVIRONMENT_SETUP_FILE) + printf "export \"CONFIGURE_FLAGS=--target=$(GNU_TARGET_NAME) \ + --host=$(GNU_TARGET_NAME) \ + --build=$(GNU_HOST_NAME) \ + --prefix=/usr \ + --exec-prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --program-prefix=\"\n" >> $(ENVIRONMENT_SETUP_FILE) + printf "alias configure=\"./configure \$${CONFIGURE_FLAGS}\"\n" \ + >> $(ENVIRONMENT_SETUP_FILE) + printf "alias cmake=\"cmake \ + -DCMAKE_TOOLCHAIN_FILE=$(HOST_DIR)/share/buildroot/toolchainfile.cmake \ + -DCMAKE_INSTALL_PREFIX=/usr\"\n" >> $(ENVIRONMENT_SETUP_FILE) + $(SED) 's%$(HOST_DIR)/bin/%%g' \ + -e 's%$(HOST_DIR)%\$$SDK_PATH%g' \ + -e '/^export "PATH=/c\' \ + $(ENVIRONMENT_SETUP_FILE) + printf "export \"PATH=\$$SDK_PATH/bin:\$$SDK_PATH/sbin:\$$PATH\"\n" \ + >> $(ENVIRONMENT_SETUP_FILE) + + $(if $(BR2_LINUX_KERNEL),\ + printf "export \"KERNELDIR=$(LINUX_BUILDDIR)\"\n" \ + >> $(ENVIRONMENT_SETUP_FILE),) +endef + +$(eval $(host-generic-package)) diff --git a/package/erlang-base64url/Config.in b/package/erlang-base64url/Config.in new file mode 100644 index 00000000..7883fa38 --- /dev/null +++ b/package/erlang-base64url/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_ERLANG_BASE64URL + bool "erlang-base64url" + help + URL safe base64-compatible codec. + + https://github.com/dvv/base64url diff --git a/package/erlang-base64url/erlang-base64url.hash b/package/erlang-base64url/erlang-base64url.hash new file mode 100644 index 00000000..becbe5db --- /dev/null +++ b/package/erlang-base64url/erlang-base64url.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 7ef7210effd25ac1f82f190fcfaef53e49d7bc40bb94112c4aa07266c32a851b erlang-base64url-1.0.1.tar.gz +sha256 d59dff2fa4c39f05188ee533fbf06479eef1b47f8cad6353f8ab3726cc6923bc LICENSE.txt diff --git a/package/erlang-base64url/erlang-base64url.mk b/package/erlang-base64url/erlang-base64url.mk new file mode 100644 index 00000000..2d496319 --- /dev/null +++ b/package/erlang-base64url/erlang-base64url.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# erlang-base64url +# +################################################################################ + +ERLANG_BASE64URL_VERSION = 1.0.1 +ERLANG_BASE64URL_SITE = $(call github,dvv,base64url,$(ERLANG_BASE64URL_VERSION)) +ERLANG_BASE64URL_LICENSE = MIT +ERLANG_BASE64URL_LICENSE_FILES = LICENSE.txt + +$(eval $(rebar-package)) diff --git a/package/erlang-eimp/Config.in b/package/erlang-eimp/Config.in new file mode 100644 index 00000000..5c207e9c --- /dev/null +++ b/package/erlang-eimp/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_ERLANG_EIMP + bool "erlang-eimp" + select BR2_PACKAGE_ERLANG_P1_UTILS + select BR2_PACKAGE_GD + select BR2_PACKAGE_GD_WEBPNG + select BR2_PACKAGE_JPEG + select BR2_PACKAGE_LIBPNG + select BR2_PACKAGE_WEBP + help + Erlang Image Manipulation Process + + https://github.com/processone/eimp diff --git a/package/erlang-eimp/erlang-eimp.hash b/package/erlang-eimp/erlang-eimp.hash new file mode 100644 index 00000000..28d22be1 --- /dev/null +++ b/package/erlang-eimp/erlang-eimp.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 1a529fa6e8264d3cad43861db417a1e841b28c0601aa847857fa0d6a81935922 erlang-eimp-1.0.17.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE.txt diff --git a/package/erlang-eimp/erlang-eimp.mk b/package/erlang-eimp/erlang-eimp.mk new file mode 100644 index 00000000..d066961c --- /dev/null +++ b/package/erlang-eimp/erlang-eimp.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# erlang-eimp +# +################################################################################ + +ERLANG_EIMP_VERSION = 1.0.17 +ERLANG_EIMP_SITE = $(call github,processone,eimp,$(ERLANG_EIMP_VERSION)) +ERLANG_EIMP_LICENSE = Apache-2.0 +ERLANG_EIMP_LICENSE_FILES = LICENSE.txt +ERLANG_EIMP_DEPENDENCIES = erlang-p1-utils gd jpeg libpng webp + +$(eval $(rebar-package)) diff --git a/package/erlang-goldrush/Config.in b/package/erlang-goldrush/Config.in new file mode 100644 index 00000000..2ee579a7 --- /dev/null +++ b/package/erlang-goldrush/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_ERLANG_GOLDRUSH + bool "erlang-goldrush" + help + Goldrush is a small Erlang app that provides fast event + stream processing. + + https://github.com/DeadZen/goldrush diff --git a/package/erlang-goldrush/erlang-goldrush.hash b/package/erlang-goldrush/erlang-goldrush.hash new file mode 100644 index 00000000..1e206073 --- /dev/null +++ b/package/erlang-goldrush/erlang-goldrush.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 6fb8ac6345d940396ecf89d4ce6b9b809039f336d85d7a54239e85106a807612 erlang-goldrush-0.1.9.tar.gz +sha256 335dd315c1bf12bd9bde777666c45e92652c9fe633101b12fc6f927b88433b6f LICENSE diff --git a/package/erlang-goldrush/erlang-goldrush.mk b/package/erlang-goldrush/erlang-goldrush.mk new file mode 100644 index 00000000..e95b09cd --- /dev/null +++ b/package/erlang-goldrush/erlang-goldrush.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# erlang-goldrush +# +################################################################################ + +ERLANG_GOLDRUSH_VERSION = 0.1.9 +ERLANG_GOLDRUSH_SITE = $(call github,DeadZen,goldrush,$(ERLANG_GOLDRUSH_VERSION)) +ERLANG_GOLDRUSH_LICENSE = ISC +ERLANG_GOLDRUSH_LICENSE_FILES = LICENSE +ERLANG_GOLDRUSH_INSTALL_STAGING = YES + +$(eval $(rebar-package)) +$(eval $(host-rebar-package)) diff --git a/package/erlang-idna/Config.in b/package/erlang-idna/Config.in new file mode 100644 index 00000000..de711668 --- /dev/null +++ b/package/erlang-idna/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_ERLANG_IDNA + bool "erlang-idna" + help + A pure Erlang IDNA implementation that follows RFC5891. + + https://github.com/benoitc/erlang-idna diff --git a/package/erlang-idna/erlang-idna.hash b/package/erlang-idna/erlang-idna.hash new file mode 100644 index 00000000..2200bbad --- /dev/null +++ b/package/erlang-idna/erlang-idna.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 d57e20ee88018ff0431e0275e91ada5915782870c9981fc798bcd05589031d6f erlang-idna-6.0.0.tar.gz +sha256 95f5c9410a95332b0833c4606028ee00008cd8c497336e230df3144d1a720bda LICENSE diff --git a/package/erlang-idna/erlang-idna.mk b/package/erlang-idna/erlang-idna.mk new file mode 100644 index 00000000..27a32fb0 --- /dev/null +++ b/package/erlang-idna/erlang-idna.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# erlang-idna +# +################################################################################ + +ERLANG_IDNA_VERSION = 6.0.0 +ERLANG_IDNA_SITE = $(call github,benoitc,erlang-idna,$(ERLANG_IDNA_VERSION)) +ERLANG_IDNA_LICENSE = MIT +ERLANG_IDNA_LICENSE_FILES = LICENSE + +$(eval $(rebar-package)) diff --git a/package/erlang-jiffy/Config.in b/package/erlang-jiffy/Config.in new file mode 100644 index 00000000..d65f42c9 --- /dev/null +++ b/package/erlang-jiffy/Config.in @@ -0,0 +1,10 @@ +comment "erlang-jiffy needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + +config BR2_PACKAGE_ERLANG_JIFFY + bool "erlang-jiffy" + depends on BR2_INSTALL_LIBSTDCPP + help + JSON NIFs for Erlang. + + https://github.com/davisp/jiffy diff --git a/package/erlang-jiffy/erlang-jiffy.hash b/package/erlang-jiffy/erlang-jiffy.hash new file mode 100644 index 00000000..19e4f960 --- /dev/null +++ b/package/erlang-jiffy/erlang-jiffy.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 7cf67840c58b8732e12c84c8a3b714774da2601ae5e6a57f286273e25b205516 erlang-jiffy-1.0.6.tar.gz +sha256 0fa8afad2f02c08850a16e36fe55376ee19732b3a116a0207f2a73c857777a49 LICENSE diff --git a/package/erlang-jiffy/erlang-jiffy.mk b/package/erlang-jiffy/erlang-jiffy.mk new file mode 100644 index 00000000..e50a5f59 --- /dev/null +++ b/package/erlang-jiffy/erlang-jiffy.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# erlang-jiffy +# +################################################################################ + +ERLANG_JIFFY_VERSION = 1.0.6 +ERLANG_JIFFY_SITE = $(call github,davisp,jiffy,$(ERLANG_JIFFY_VERSION)) +ERLANG_JIFFY_LICENSE = MIT (core), \ + BSD-3-Clause (Google double conversion library), \ + BSD-3-Clause (tests) +ERLANG_JIFFY_LICENSE_FILES = LICENSE + +$(eval $(rebar-package)) diff --git a/package/erlang-jose/Config.in b/package/erlang-jose/Config.in new file mode 100644 index 00000000..8101ff41 --- /dev/null +++ b/package/erlang-jose/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_ERLANG_JOSE + bool "erlang-jose" + select BR2_PACKAGE_ERLANG_BASE64URL + help + JSON Object Signing and Encryption (JOSE) for Erlang and + Elixir. + + https://github.com/potatosalad/erlang-jose diff --git a/package/erlang-jose/erlang-jose.hash b/package/erlang-jose/erlang-jose.hash new file mode 100644 index 00000000..71a1543d --- /dev/null +++ b/package/erlang-jose/erlang-jose.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 d55a9d3a1697833fed555a21f1aeb2727af88193995cb6ffa945d4b6749d0e8d erlang-jose-1.9.0.tar.gz +sha256 6397e2bd9a35a64c1bb798b937071fbe49d90667f717e65c74a0d0fe93d5c1be LICENSE.md diff --git a/package/erlang-jose/erlang-jose.mk b/package/erlang-jose/erlang-jose.mk new file mode 100644 index 00000000..43ed22a9 --- /dev/null +++ b/package/erlang-jose/erlang-jose.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# erlang-jose +# +################################################################################ + +ERLANG_JOSE_VERSION = 1.9.0 +ERLANG_JOSE_SITE = $(call github,potatosalad,erlang-jose,$(ERLANG_JOSE_VERSION)) +ERLANG_JOSE_LICENSE = MIT +ERLANG_JOSE_LICENSE_FILES = LICENSE.md +ERLANG_JOSE_DEPENDENCIES = erlang-base64url + +$(eval $(rebar-package)) diff --git a/package/erlang-lager/Config.in b/package/erlang-lager/Config.in new file mode 100644 index 00000000..d088821a --- /dev/null +++ b/package/erlang-lager/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_ERLANG_LAGER + bool "erlang-lager" + select BR2_PACKAGE_ERLANG_GOLDRUSH + help + Lager (as in the beer) is a logging framework for + Erlang. Its purpose is to provide a more traditional way to + perform logging in an erlang application that plays nicely + with traditional UNIX logging tools like logrotate and + syslog. + + https://github.com/basho/lager diff --git a/package/erlang-lager/erlang-lager.hash b/package/erlang-lager/erlang-lager.hash new file mode 100644 index 00000000..40291af3 --- /dev/null +++ b/package/erlang-lager/erlang-lager.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 c5bb4ba6f918e90d2e6671c3996d72c61f2a589b65c151b3df8011d046362981 erlang-lager-3.6.10.tar.gz +sha256 809fa1ed21450f59827d1e9aec720bbc4b687434fa22283c6cb5dd82a47ab9c0 LICENSE diff --git a/package/erlang-lager/erlang-lager.mk b/package/erlang-lager/erlang-lager.mk new file mode 100644 index 00000000..a698bce8 --- /dev/null +++ b/package/erlang-lager/erlang-lager.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# erlang-lager +# +################################################################################ + +ERLANG_LAGER_VERSION = 3.6.10 +ERLANG_LAGER_SITE = $(call github,erlang-lager,lager,$(ERLANG_LAGER_VERSION)) +ERLANG_LAGER_LICENSE = Apache-2.0 +ERLANG_LAGER_LICENSE_FILES = LICENSE +ERLANG_LAGER_DEPENDENCIES = erlang-goldrush +HOST_ERLANG_LAGER_DEPENDENCIES = host-erlang-goldrush + +$(eval $(rebar-package)) +$(eval $(host-rebar-package)) diff --git a/package/erlang-p1-acme/0001-rebar.config.script-remove-extra-dependency-to-base6.patch b/package/erlang-p1-acme/0001-rebar.config.script-remove-extra-dependency-to-base6.patch new file mode 100644 index 00000000..a27730e2 --- /dev/null +++ b/package/erlang-p1-acme/0001-rebar.config.script-remove-extra-dependency-to-base6.patch @@ -0,0 +1,26 @@ +From a2422fdf4097d1f5f8c8f88bbe08b9a0f3c35fe6 Mon Sep 17 00:00:00 2001 +From: Johan Oudinet +Date: Wed, 25 Nov 2020 22:38:22 +0100 +Subject: [PATCH] rebar.config.script: remove extra dependency to base64url + +Signed-off-by: Johan Oudinet +--- + rebar.config.script | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/rebar.config.script b/rebar.config.script +index a63895e..41b2970 100644 +--- a/rebar.config.script ++++ b/rebar.config.script +@@ -62,7 +62,7 @@ Cfg2 = case IsRebar3 of + [{plugin_dir, filename:join([filename:dirname(SCRIPT),"plugins"])}, + {plugins, [override_deps_versions]}] ++ + ModCfg(CONFIG, [deps], fun(V) -> +- V ++ [{base64url, ".*", {git, "git://github.com/dvv/base64url.git", {tag, "v1.0"}}}] ++ V + end, []) + end, + +-- +2.29.2 + diff --git a/package/erlang-p1-acme/Config.in b/package/erlang-p1-acme/Config.in new file mode 100644 index 00000000..2c0d1d03 --- /dev/null +++ b/package/erlang-p1-acme/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_ERLANG_P1_ACME + bool "erlang-p1-acme" + depends on BR2_INSTALL_LIBSTDCPP # erlang-jiffy + select BR2_PACKAGE_ERLANG_IDNA + select BR2_PACKAGE_ERLANG_JIFFY + select BR2_PACKAGE_ERLANG_JOSE + select BR2_PACKAGE_ERLANG_P1_YCONF + help + ACME client library for Erlang. + + https://github.com/processone/p1_acme + +comment "erlang-p1-acme needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/erlang-p1-acme/erlang-p1-acme.hash b/package/erlang-p1-acme/erlang-p1-acme.hash new file mode 100644 index 00000000..af13e88b --- /dev/null +++ b/package/erlang-p1-acme/erlang-p1-acme.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 e17ba49f45b72200470bc2f176b315bec1028d07a4817859052f98c0a7259632 erlang-p1-acme-1.0.9.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE.txt diff --git a/package/erlang-p1-acme/erlang-p1-acme.mk b/package/erlang-p1-acme/erlang-p1-acme.mk new file mode 100644 index 00000000..21c155e2 --- /dev/null +++ b/package/erlang-p1-acme/erlang-p1-acme.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# erlang-p1-acme +# +################################################################################ + +ERLANG_P1_ACME_VERSION = 1.0.9 +ERLANG_P1_ACME_SITE = $(call github,processone,p1_acme,$(ERLANG_P1_ACME_VERSION)) +ERLANG_P1_ACME_LICENSE = Apache-2.0 +ERLANG_P1_ACME_LICENSE_FILES = LICENSE.txt +ERLANG_P1_ACME_DEPENDENCIES = erlang-idna erlang-jiffy erlang-jose erlang-p1-yconf + +$(eval $(rebar-package)) diff --git a/package/erlang-p1-cache-tab/Config.in b/package/erlang-p1-cache-tab/Config.in new file mode 100644 index 00000000..eed26766 --- /dev/null +++ b/package/erlang-p1-cache-tab/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_ERLANG_P1_CACHE_TAB + bool "erlang-p1-cache-tab" + select BR2_PACKAGE_ERLANG_P1_UTILS + help + Erlang library implementing cache tables + + https://github.com/processone/cache_tab diff --git a/package/erlang-p1-cache-tab/erlang-p1-cache-tab.hash b/package/erlang-p1-cache-tab/erlang-p1-cache-tab.hash new file mode 100644 index 00000000..85a92cf0 --- /dev/null +++ b/package/erlang-p1-cache-tab/erlang-p1-cache-tab.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 32cb3a3017f53e66bd1c2b75f60a2c4a14f00f375582a3c511ea39266b2385b9 erlang-p1-cache-tab-1.0.25.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE.txt diff --git a/package/erlang-p1-cache-tab/erlang-p1-cache-tab.mk b/package/erlang-p1-cache-tab/erlang-p1-cache-tab.mk new file mode 100644 index 00000000..f3253d1c --- /dev/null +++ b/package/erlang-p1-cache-tab/erlang-p1-cache-tab.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# erlang-p1-cache-tab +# +################################################################################ + +ERLANG_P1_CACHE_TAB_VERSION = 1.0.25 +ERLANG_P1_CACHE_TAB_SITE = $(call github,processone,cache_tab,$(ERLANG_P1_CACHE_TAB_VERSION)) +ERLANG_P1_CACHE_TAB_LICENSE = Apache-2.0 +ERLANG_P1_CACHE_TAB_LICENSE_FILES = LICENSE.txt +ERLANG_P1_CACHE_TAB_DEPENDENCIES = erlang-p1-utils + +$(eval $(rebar-package)) diff --git a/package/erlang-p1-mqtree/Config.in b/package/erlang-p1-mqtree/Config.in new file mode 100644 index 00000000..4e2d58c2 --- /dev/null +++ b/package/erlang-p1-mqtree/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_ERLANG_P1_MQTREE + bool "erlang-p1-mqtree" + select BR2_PACKAGE_ERLANG_P1_UTILS + help + Index tree for MQTT topic filters. + + https://github.com/processone/mqtree diff --git a/package/erlang-p1-mqtree/erlang-p1-mqtree.hash b/package/erlang-p1-mqtree/erlang-p1-mqtree.hash new file mode 100644 index 00000000..cf1a880c --- /dev/null +++ b/package/erlang-p1-mqtree/erlang-p1-mqtree.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 4f86e272a97152d3f5166dad583dc1b5bda9582f6777f6294fb8328def8b2189 erlang-p1-mqtree-1.0.10.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE diff --git a/package/erlang-p1-mqtree/erlang-p1-mqtree.mk b/package/erlang-p1-mqtree/erlang-p1-mqtree.mk new file mode 100644 index 00000000..19e31ef1 --- /dev/null +++ b/package/erlang-p1-mqtree/erlang-p1-mqtree.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# erlang-p1-mqtree +# +################################################################################ + +ERLANG_P1_MQTREE_VERSION = 1.0.10 +ERLANG_P1_MQTREE_SITE = $(call github,processone,mqtree,$(ERLANG_P1_MQTREE_VERSION)) +ERLANG_P1_MQTREE_LICENSE = Apache-2.0 +ERLANG_P1_MQTREE_LICENSE_FILES = LICENSE +ERLANG_P1_MQTREE_DEPENDENCIES = erlang-p1-utils + +$(eval $(rebar-package)) diff --git a/package/erlang-p1-oauth2/Config.in b/package/erlang-p1-oauth2/Config.in new file mode 100644 index 00000000..32e79ec9 --- /dev/null +++ b/package/erlang-p1-oauth2/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_ERLANG_P1_OAUTH2 + bool "erlang-p1-oauth2" + help + OAuth2 library for Erlang + + https://github.com/processone/p1_oauth2 diff --git a/package/erlang-p1-oauth2/erlang-p1-oauth2.hash b/package/erlang-p1-oauth2/erlang-p1-oauth2.hash new file mode 100644 index 00000000..a6d00aa9 --- /dev/null +++ b/package/erlang-p1-oauth2/erlang-p1-oauth2.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 c5cf0d2a9f5874c289cc6044945f4771a79007bda812e5269dea3a4c92fc8811 erlang-p1-oauth2-0.6.7.tar.gz +sha256 0ecddd0a5e35b7fcdab451f54c5bb688fac8365cdf6b0da0ac64b7895a0770f3 LICENSE diff --git a/package/erlang-p1-oauth2/erlang-p1-oauth2.mk b/package/erlang-p1-oauth2/erlang-p1-oauth2.mk new file mode 100644 index 00000000..d7dd45b2 --- /dev/null +++ b/package/erlang-p1-oauth2/erlang-p1-oauth2.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# erlang-p1-oauth2 +# +################################################################################ + +ERLANG_P1_OAUTH2_VERSION = 0.6.7 +ERLANG_P1_OAUTH2_SITE = $(call github,processone,p1_oauth2,$(ERLANG_P1_OAUTH2_VERSION)) +ERLANG_P1_OAUTH2_LICENSE = MIT +ERLANG_P1_OAUTH2_LICENSE_FILES = LICENSE +ERLANG_P1_OAUTH2_INSTALL_STAGING = YES + +$(eval $(rebar-package)) diff --git a/package/erlang-p1-pkix/Config.in b/package/erlang-p1-pkix/Config.in new file mode 100644 index 00000000..dfd43f9d --- /dev/null +++ b/package/erlang-p1-pkix/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_ERLANG_P1_PKIX + bool "erlang-p1-pkix" + help + PKIX certificates management library for Erlang. + + https://github.com/processone/pkix diff --git a/package/erlang-p1-pkix/erlang-p1-pkix.hash b/package/erlang-p1-pkix/erlang-p1-pkix.hash new file mode 100644 index 00000000..b0ee7d58 --- /dev/null +++ b/package/erlang-p1-pkix/erlang-p1-pkix.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 3a39c4ca74f93efa0e4de4c37f9e4d073b1aeb142ad669f12588ad2b3c39724e erlang-p1-pkix-1.0.6.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE diff --git a/package/erlang-p1-pkix/erlang-p1-pkix.mk b/package/erlang-p1-pkix/erlang-p1-pkix.mk new file mode 100644 index 00000000..12ae0421 --- /dev/null +++ b/package/erlang-p1-pkix/erlang-p1-pkix.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# erlang-p1-pkix +# +################################################################################ + +ERLANG_P1_PKIX_VERSION = 1.0.6 +ERLANG_P1_PKIX_SITE = $(call github,processone,pkix,$(ERLANG_P1_PKIX_VERSION)) +ERLANG_P1_PKIX_LICENSE = Apache-2.0 +ERLANG_P1_PKIX_LICENSE_FILES = LICENSE + +$(eval $(rebar-package)) diff --git a/package/erlang-p1-sip/0001-correct-include.patch b/package/erlang-p1-sip/0001-correct-include.patch new file mode 100644 index 00000000..90d68b51 --- /dev/null +++ b/package/erlang-p1-sip/0001-correct-include.patch @@ -0,0 +1,31 @@ +From 5ad4f871df7cbbc973708cb7380c3410b20bde1c Mon Sep 17 00:00:00 2001 +From: Philipp Huebner +Date: Tue, 1 Dec 2020 23:07:51 +0100 +Subject: [PATCH] correct include + +This part of the code was moved into it's own project and was packaged +separately by me. To make the build process work, this small fix is +necessary. + +Author: Philipp Huebner +Signed-off-by: Johan Oudinet +--- + src/esip_socket.erl | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/esip_socket.erl b/src/esip_socket.erl +index 4154faa..db5fa92 100644 +--- a/src/esip_socket.erl ++++ b/src/esip_socket.erl +@@ -37,7 +37,7 @@ + + -include("esip.hrl"). + -include("esip_lib.hrl"). +--include_lib("stun/include/stun.hrl"). ++-include_lib("p1_stun/include/stun.hrl"). + + -define(TCP_SEND_TIMEOUT, 15000). + -define(CONNECT_TIMEOUT, 20000). +-- +2.28.0 + diff --git a/package/erlang-p1-sip/Config.in b/package/erlang-p1-sip/Config.in new file mode 100644 index 00000000..70cf819a --- /dev/null +++ b/package/erlang-p1-sip/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_ERLANG_P1_SIP + bool "erlang-p1-sip" + select BR2_PACKAGE_ERLANG_P1_STUN + select BR2_PACKAGE_ERLANG_P1_TLS + select BR2_PACKAGE_ERLANG_P1_UTILS + help + SIP library for Erlang + + https://github.com/processone/p1_sip diff --git a/package/erlang-p1-sip/erlang-p1-sip.hash b/package/erlang-p1-sip/erlang-p1-sip.hash new file mode 100644 index 00000000..e52371e4 --- /dev/null +++ b/package/erlang-p1-sip/erlang-p1-sip.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 b46349a7077d8e5f36a216ada4a5c0b51ef3d66005606beb0ea3962069f215a7 erlang-p1-sip-1.0.38.tar.gz +sha256 6cd4871db940d055cf272c12c10e0c08febdc94362e404390758fde34b4ce01a LICENSE.txt diff --git a/package/erlang-p1-sip/erlang-p1-sip.mk b/package/erlang-p1-sip/erlang-p1-sip.mk new file mode 100644 index 00000000..2d2f0110 --- /dev/null +++ b/package/erlang-p1-sip/erlang-p1-sip.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# erlang-p1-sip +# +################################################################################ + +ERLANG_P1_SIP_VERSION = 1.0.38 +ERLANG_P1_SIP_SITE = $(call github,processone,esip,$(ERLANG_P1_SIP_VERSION)) +ERLANG_P1_SIP_LICENSE = Apache-2.0 +ERLANG_P1_SIP_LICENSE_FILES = LICENSE.txt +ERLANG_P1_SIP_DEPENDENCIES = erlang-p1-stun erlang-p1-tls erlang-p1-utils +ERLANG_P1_SIP_INSTALL_STAGING = YES + +$(eval $(rebar-package)) diff --git a/package/erlang-p1-stringprep/Config.in b/package/erlang-p1-stringprep/Config.in new file mode 100644 index 00000000..4beac048 --- /dev/null +++ b/package/erlang-p1-stringprep/Config.in @@ -0,0 +1,11 @@ +comment "erlang-p1-stringprep needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + +config BR2_PACKAGE_ERLANG_P1_STRINGPREP + bool "erlang-p1-stringprep" + depends on BR2_INSTALL_LIBSTDCPP + select BR2_PACKAGE_ERLANG_P1_UTILS + help + Erlang interface to stringprep + + https://github.com/processone/stringprep diff --git a/package/erlang-p1-stringprep/erlang-p1-stringprep.hash b/package/erlang-p1-stringprep/erlang-p1-stringprep.hash new file mode 100644 index 00000000..e23cc4f3 --- /dev/null +++ b/package/erlang-p1-stringprep/erlang-p1-stringprep.hash @@ -0,0 +1,5 @@ +# Locally calculated +sha256 47f9f8ee901f47b7f62c5140ea09f113efe7fedd5e8ffb92d50f51c5e11fb67f erlang-p1-stringprep-1.0.23.tar.gz +sha256 f44415631770cb818de6d92f3961fdfe6e407a5154f84b87cc06ac27323e919c LICENSE.ALL +sha256 42aef2a1337ef1f45ae2832aa5aa268c79b2560fb1f3ebab519629372cb24ffe LICENSE.TCL +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE.txt diff --git a/package/erlang-p1-stringprep/erlang-p1-stringprep.mk b/package/erlang-p1-stringprep/erlang-p1-stringprep.mk new file mode 100644 index 00000000..580f4a9a --- /dev/null +++ b/package/erlang-p1-stringprep/erlang-p1-stringprep.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# erlang-p1-stringprep +# +################################################################################ + +ERLANG_P1_STRINGPREP_VERSION = 1.0.23 +ERLANG_P1_STRINGPREP_SITE = $(call github,processone,stringprep,$(ERLANG_P1_STRINGPREP_VERSION)) +ERLANG_P1_STRINGPREP_LICENSE = TCL (tools/*.tcl), Apache-2.0 (rest) +ERLANG_P1_STRINGPREP_LICENSE_FILES = LICENSE.ALL LICENSE.TCL LICENSE.txt +ERLANG_P1_STRINGPREP_DEPENDENCIES = erlang-p1-utils + +$(eval $(rebar-package)) diff --git a/package/erlang-p1-stun/Config.in b/package/erlang-p1-stun/Config.in new file mode 100644 index 00000000..70cdd915 --- /dev/null +++ b/package/erlang-p1-stun/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_ERLANG_P1_STUN + bool "erlang-p1-stun" + select BR2_PACKAGE_ERLANG_P1_TLS + select BR2_PACKAGE_ERLANG_P1_UTILS + help + STUN library for Erlang + + https://github.com/processone/stun diff --git a/package/erlang-p1-stun/erlang-p1-stun.hash b/package/erlang-p1-stun/erlang-p1-stun.hash new file mode 100644 index 00000000..fb56b8f4 --- /dev/null +++ b/package/erlang-p1-stun/erlang-p1-stun.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 05d2f31f172883d2301a93cd141e6b930dfdd01e10b6aacf806becc3674973d8 erlang-p1-stun-1.0.39.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE.txt diff --git a/package/erlang-p1-stun/erlang-p1-stun.mk b/package/erlang-p1-stun/erlang-p1-stun.mk new file mode 100644 index 00000000..f762e7f4 --- /dev/null +++ b/package/erlang-p1-stun/erlang-p1-stun.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# erlang-p1-stun +# +################################################################################ + +ERLANG_P1_STUN_VERSION = 1.0.39 +ERLANG_P1_STUN_SITE = $(call github,processone,stun,$(ERLANG_P1_STUN_VERSION)) +ERLANG_P1_STUN_LICENSE = Apache-2.0 +ERLANG_P1_STUN_LICENSE_FILES = LICENSE.txt +ERLANG_P1_STUN_DEPENDENCIES = erlang-p1-tls erlang-p1-utils +ERLANG_P1_STUN_INSTALL_STAGING = YES + +$(eval $(rebar-package)) diff --git a/package/erlang-p1-tls/Config.in b/package/erlang-p1-tls/Config.in new file mode 100644 index 00000000..a684fbb6 --- /dev/null +++ b/package/erlang-p1-tls/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_ERLANG_P1_TLS + bool "erlang-p1-tls" + select BR2_PACKAGE_ERLANG_P1_UTILS + select BR2_PACKAGE_OPENSSL + help + Erlang interface to OpenSSL + + https://github.com/processone/tls diff --git a/package/erlang-p1-tls/erlang-p1-tls.hash b/package/erlang-p1-tls/erlang-p1-tls.hash new file mode 100644 index 00000000..475223b9 --- /dev/null +++ b/package/erlang-p1-tls/erlang-p1-tls.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 97fd0a398751fc63b28df016e92a08ea98d083f7d5e3f32380a92de1ee86ca0e erlang-p1-tls-1.1.9.tar.gz +sha256 6cd4871db940d055cf272c12c10e0c08febdc94362e404390758fde34b4ce01a LICENSE.txt diff --git a/package/erlang-p1-tls/erlang-p1-tls.mk b/package/erlang-p1-tls/erlang-p1-tls.mk new file mode 100644 index 00000000..9e7d4c7c --- /dev/null +++ b/package/erlang-p1-tls/erlang-p1-tls.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# erlang-p1-tls +# +################################################################################ + +ERLANG_P1_TLS_VERSION = 1.1.9 +ERLANG_P1_TLS_SITE = $(call github,processone,fast_tls,$(ERLANG_P1_TLS_VERSION)) +ERLANG_P1_TLS_LICENSE = Apache-2.0 +ERLANG_P1_TLS_LICENSE_FILES = LICENSE.txt +ERLANG_P1_TLS_INSTALL_STAGING = YES +ERLANG_P1_TLS_DEPENDENCIES = openssl erlang-p1-utils + +$(eval $(rebar-package)) diff --git a/package/erlang-p1-utils/Config.in b/package/erlang-p1-utils/Config.in new file mode 100644 index 00000000..a82e5f71 --- /dev/null +++ b/package/erlang-p1-utils/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_ERLANG_P1_UTILS + bool "erlang-p1-utils" + help + Set of small Erlang libraries + + https://github.com/processone/p1_utils diff --git a/package/erlang-p1-utils/erlang-p1-utils.hash b/package/erlang-p1-utils/erlang-p1-utils.hash new file mode 100644 index 00000000..dec7c260 --- /dev/null +++ b/package/erlang-p1-utils/erlang-p1-utils.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 234b88227f61ef03a6177d97ed062c62a22760b6fd189a5a24d2fd1599d95ac9 erlang-p1-utils-1.0.20.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE.txt diff --git a/package/erlang-p1-utils/erlang-p1-utils.mk b/package/erlang-p1-utils/erlang-p1-utils.mk new file mode 100644 index 00000000..084382cd --- /dev/null +++ b/package/erlang-p1-utils/erlang-p1-utils.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# erlang-p1-utils +# +################################################################################ + +ERLANG_P1_UTILS_VERSION = 1.0.20 +ERLANG_P1_UTILS_SITE = $(call github,processone,p1_utils,$(ERLANG_P1_UTILS_VERSION)) +ERLANG_P1_UTILS_LICENSE = Apache-2.0 +ERLANG_P1_UTILS_LICENSE_FILES = LICENSE.txt +ERLANG_P1_UTILS_INSTALL_STAGING = YES + +$(eval $(rebar-package)) +$(eval $(host-rebar-package)) diff --git a/package/erlang-p1-xml/Config.in b/package/erlang-p1-xml/Config.in new file mode 100644 index 00000000..504501d9 --- /dev/null +++ b/package/erlang-p1-xml/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_ERLANG_P1_XML + bool "erlang-p1-xml" + select BR2_PACKAGE_ERLANG_P1_UTILS + select BR2_PACKAGE_EXPAT + help + XML utilities for Erlang + + https://github.com/processone/xml diff --git a/package/erlang-p1-xml/erlang-p1-xml.hash b/package/erlang-p1-xml/erlang-p1-xml.hash new file mode 100644 index 00000000..f2a4ab83 --- /dev/null +++ b/package/erlang-p1-xml/erlang-p1-xml.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 739f37a161a570071469ab1f3d8fc232f004ea616700fe7e46b6d8afa9d03a60 erlang-p1-xml-1.1.44.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE.txt diff --git a/package/erlang-p1-xml/erlang-p1-xml.mk b/package/erlang-p1-xml/erlang-p1-xml.mk new file mode 100644 index 00000000..5730181a --- /dev/null +++ b/package/erlang-p1-xml/erlang-p1-xml.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# erlang-p1-xml +# +################################################################################ + +ERLANG_P1_XML_VERSION = 1.1.44 +ERLANG_P1_XML_SITE = $(call github,processone,fast_xml,$(ERLANG_P1_XML_VERSION)) +ERLANG_P1_XML_LICENSE = Apache-2.0 +ERLANG_P1_XML_LICENSE_FILES = LICENSE.txt +ERLANG_P1_XML_DEPENDENCIES = expat erlang-p1-utils +HOST_ERLANG_P1_XML_DEPENDENCIES = host-expat host-erlang-p1-utils +ERLANG_P1_XML_INSTALL_STAGING = YES + +ERLANG_P1_XML_USE_AUTOCONF = YES + +$(eval $(rebar-package)) +$(eval $(host-rebar-package)) diff --git a/package/erlang-p1-xmpp/0001-fix-includes.patch b/package/erlang-p1-xmpp/0001-fix-includes.patch new file mode 100644 index 00000000..f02037fd --- /dev/null +++ b/package/erlang-p1-xmpp/0001-fix-includes.patch @@ -0,0 +1,16 @@ +Without this patch, rebar fails to find include file fxml.hrl. + +Signed-off-by: Christophe Romain + +diff --git a/include/xmpp.hrl b/include/xmpp.hrl +index afa5f61..678858e 100644 +--- a/include/xmpp.hrl ++++ b/include/xmpp.hrl +@@ -25,7 +25,7 @@ + -include("ns.hrl"). + -include("jid.hrl"). + -include("xmpp_codec.hrl"). +--include_lib("fast_xml/include/fxml.hrl"). ++-include_lib("p1_xml/include/fxml.hrl"). + + -type stanza() :: iq() | presence() | message(). diff --git a/package/erlang-p1-xmpp/Config.in b/package/erlang-p1-xmpp/Config.in new file mode 100644 index 00000000..6e40fed1 --- /dev/null +++ b/package/erlang-p1-xmpp/Config.in @@ -0,0 +1,15 @@ +comment "erlang-p1-xmpp needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + +config BR2_PACKAGE_ERLANG_P1_XMPP + bool "erlang-p1-xmpp" + depends on BR2_INSTALL_LIBSTDCPP # erlang-p1-stringprep + select BR2_PACKAGE_ERLANG_P1_XML + select BR2_PACKAGE_ERLANG_P1_STRINGPREP + select BR2_PACKAGE_ERLANG_P1_TLS + select BR2_PACKAGE_ERLANG_P1_UTILS + select BR2_PACKAGE_ERLANG_P1_ZLIB + help + XMPP library for Erlang. + + https://github.com/processone/xmpp diff --git a/package/erlang-p1-xmpp/erlang-p1-xmpp.hash b/package/erlang-p1-xmpp/erlang-p1-xmpp.hash new file mode 100644 index 00000000..d0a761fc --- /dev/null +++ b/package/erlang-p1-xmpp/erlang-p1-xmpp.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 65c73ffaf8faab5d6fc7d42ada0b5a380f20f3e46056ad98614d81922322d9a2 erlang-p1-xmpp-1.4.10.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE.txt diff --git a/package/erlang-p1-xmpp/erlang-p1-xmpp.mk b/package/erlang-p1-xmpp/erlang-p1-xmpp.mk new file mode 100644 index 00000000..f903cb94 --- /dev/null +++ b/package/erlang-p1-xmpp/erlang-p1-xmpp.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# erlang-p1-xmpp +# +################################################################################ + +ERLANG_P1_XMPP_VERSION = 1.4.10 +ERLANG_P1_XMPP_SITE = $(call github,processone,xmpp,$(ERLANG_P1_XMPP_VERSION)) +ERLANG_P1_XMPP_LICENSE = Apache-2.0 +ERLANG_P1_XMPP_LICENSE_FILES = LICENSE.txt +ERLANG_P1_XMPP_INSTALL_STAGING = YES +ERLANG_P1_XMPP_DEPENDENCIES = erlang-p1-xml erlang-p1-stringprep \ + erlang-p1-tls erlang-p1-utils erlang-p1-zlib host-erlang-p1-xml +HOST_ERLANG_P1_XMPP_DEPENDENCIES = host-erlang-p1-xml + +$(eval $(rebar-package)) +$(eval $(host-rebar-package)) diff --git a/package/erlang-p1-yaml/Config.in b/package/erlang-p1-yaml/Config.in new file mode 100644 index 00000000..2ab78d12 --- /dev/null +++ b/package/erlang-p1-yaml/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_ERLANG_P1_YAML + bool "erlang-p1-yaml" + select BR2_PACKAGE_ERLANG_P1_UTILS + select BR2_PACKAGE_LIBYAML + help + Erlang wrapper for libyaml C library + + https://github.com/processone/p1_yaml diff --git a/package/erlang-p1-yaml/erlang-p1-yaml.hash b/package/erlang-p1-yaml/erlang-p1-yaml.hash new file mode 100644 index 00000000..955a0009 --- /dev/null +++ b/package/erlang-p1-yaml/erlang-p1-yaml.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 8f53308438e4d1613562acb586b4c4540569d8305097508c40e6f261fe4216cd erlang-p1-yaml-1.0.28.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE.txt diff --git a/package/erlang-p1-yaml/erlang-p1-yaml.mk b/package/erlang-p1-yaml/erlang-p1-yaml.mk new file mode 100644 index 00000000..e42ff5fe --- /dev/null +++ b/package/erlang-p1-yaml/erlang-p1-yaml.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# erlang-p1-yaml +# +################################################################################ + +ERLANG_P1_YAML_VERSION = 1.0.28 +ERLANG_P1_YAML_SITE = $(call github,processone,fast_yaml,$(ERLANG_P1_YAML_VERSION)) +ERLANG_P1_YAML_LICENSE = Apache-2.0 +ERLANG_P1_YAML_LICENSE_FILES = LICENSE.txt +ERLANG_P1_YAML_DEPENDENCIES = libyaml erlang-p1-utils + +$(eval $(rebar-package)) diff --git a/package/erlang-p1-yconf/Config.in b/package/erlang-p1-yconf/Config.in new file mode 100644 index 00000000..3777ebbe --- /dev/null +++ b/package/erlang-p1-yconf/Config.in @@ -0,0 +1,5 @@ +config BR2_PACKAGE_ERLANG_P1_YCONF + bool "erlang-p1-yconf" + select BR2_PACKAGE_ERLANG_P1_YAML + help + YAML configuration processor. diff --git a/package/erlang-p1-yconf/erlang-p1-yconf.hash b/package/erlang-p1-yconf/erlang-p1-yconf.hash new file mode 100644 index 00000000..97e71f85 --- /dev/null +++ b/package/erlang-p1-yconf/erlang-p1-yconf.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 ab0f7462b8d03d18be1587fa9cfb227923055f765fca4459b4bb42ccef971329 erlang-p1-yconf-1.0.8.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE diff --git a/package/erlang-p1-yconf/erlang-p1-yconf.mk b/package/erlang-p1-yconf/erlang-p1-yconf.mk new file mode 100644 index 00000000..3e3a10ae --- /dev/null +++ b/package/erlang-p1-yconf/erlang-p1-yconf.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# erlang-p1-yconf +# +################################################################################ + +ERLANG_P1_YCONF_VERSION = 1.0.8 +ERLANG_P1_YCONF_SITE = $(call github,processone,yconf,$(ERLANG_P1_YCONF_VERSION)) +ERLANG_P1_YCONF_LICENSE = Apache-2.0 +ERLANG_P1_YCONF_LICENSE_FILES = LICENSE +ERLANG_P1_YCONF_DEPENDENCIES = erlang-p1-yaml + +$(eval $(rebar-package)) diff --git a/package/erlang-p1-zlib/Config.in b/package/erlang-p1-zlib/Config.in new file mode 100644 index 00000000..b7e48a14 --- /dev/null +++ b/package/erlang-p1-zlib/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_ERLANG_P1_ZLIB + bool "erlang-p1-zlib" + select BR2_PACKAGE_ZLIB + help + Erlang interface to zlib + + https://github.com/processone/zlib diff --git a/package/erlang-p1-zlib/erlang-p1-zlib.hash b/package/erlang-p1-zlib/erlang-p1-zlib.hash new file mode 100644 index 00000000..7ce58762 --- /dev/null +++ b/package/erlang-p1-zlib/erlang-p1-zlib.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 f0ac60336b2ddf55ac4f58934580cb8f02dba440d68feb607be312dd35d91269 erlang-p1-zlib-1.0.9.tar.gz +sha256 6cd4871db940d055cf272c12c10e0c08febdc94362e404390758fde34b4ce01a LICENSE.txt diff --git a/package/erlang-p1-zlib/erlang-p1-zlib.mk b/package/erlang-p1-zlib/erlang-p1-zlib.mk new file mode 100644 index 00000000..0e6ee298 --- /dev/null +++ b/package/erlang-p1-zlib/erlang-p1-zlib.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# erlang-p1-zlib +# +################################################################################ + +ERLANG_P1_ZLIB_VERSION = 1.0.9 +ERLANG_P1_ZLIB_SITE = $(call github,processone,ezlib,$(ERLANG_P1_ZLIB_VERSION)) +ERLANG_P1_ZLIB_LICENSE = Apache-2.0 +ERLANG_P1_ZLIB_LICENSE_FILES = LICENSE.txt +ERLANG_P1_ZLIB_DEPENDENCIES = zlib + +$(eval $(rebar-package)) diff --git a/package/erlang-rebar/erlang-rebar.hash b/package/erlang-rebar/erlang-rebar.hash new file mode 100644 index 00000000..b0529800 --- /dev/null +++ b/package/erlang-rebar/erlang-rebar.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 577246bafa2eb2b2c3f1d0c157408650446884555bf87901508ce71d5cc0bd07 erlang-rebar-2.6.4.tar.gz +sha256 809fa1ed21450f59827d1e9aec720bbc4b687434fa22283c6cb5dd82a47ab9c0 LICENSE diff --git a/package/erlang-rebar/erlang-rebar.mk b/package/erlang-rebar/erlang-rebar.mk new file mode 100644 index 00000000..ce082dc6 --- /dev/null +++ b/package/erlang-rebar/erlang-rebar.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# erlang-rebar +# +################################################################################ + +ERLANG_REBAR_VERSION = 2.6.4 + +# Upstream publishes a release, but we can not use it as it is a release of +# a generated rebar script, when we want the sources. So we have to use the +# gihub helper in this case. +ERLANG_REBAR_SITE = $(call github,rebar,rebar,$(ERLANG_REBAR_VERSION)) + +# Although the file LICENSE state Apache-2.0, a lot (if not all) the files +# in src/ bear the MIT licence. +ERLANG_REBAR_LICENSE = Apache-2.0, MIT +ERLANG_REBAR_LICENSE_FILES = LICENSE + +# We do not have a target variant, so just define the dependencies, +# configure and build commands for the host variant. +HOST_ERLANG_REBAR_DEPENDENCIES = host-erlang + +define HOST_ERLANG_REBAR_BUILD_CMDS + cd $(@D) && $(HOST_MAKE_ENV) $(MAKE) +endef + +define HOST_ERLANG_REBAR_INSTALL_CMDS + $(INSTALL) -m 0755 -D $(@D)/rebar $(HOST_DIR)/bin/rebar +endef + +$(eval $(host-generic-package)) diff --git a/package/erlang/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch b/package/erlang/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch new file mode 100644 index 00000000..8e401430 --- /dev/null +++ b/package/erlang/0001-erts-ethread-instruct-libatomic_ops-we-do-require-CA.patch @@ -0,0 +1,70 @@ +From 439fa2eae78a8900bda120072335be19d626498c Mon Sep 17 00:00:00 2001 +From: "Yann E. MORIN" +Date: Sun, 28 Dec 2014 23:39:40 +0100 +Subject: [PATCH] erts/ethread: instruct libatomic_ops we do require CAS + +We do require compare-and-swap (CAS), so we must instruct libatomic_ops +to provide it, even if the architecture does not have instructions for +it. + +For example, on ARM, LDREX is required for fast CAS. But LDREX is only +available on ARMv6, so by default libatomic_ops will not have CAS for +anything below, like ARMv5. But ARMv5 is always UP, so using an +emulated CAS (that is signal-asyn-safe) is still possible (albeit much +slower). + +Tell libatomic_ops to provide CAS, even if the hardware is not capable +of it, by using emulated CAS, as per libatomic_ops dosc: + https://github.com/ivmai/libatomic_ops/blob/master/doc/README.txt#L28 + + If this is included after defining AO_REQUIRE_CAS, then the package + will make an attempt to emulate compare-and-swap in a way that (at + least on Linux) should still be async-signal-safe. + +Thanks go to Thomas for all this insight! :-) +Thanks go to Frank for reporting the issue! :-) + +Signed-off-by: "Yann E. MORIN" +Cc: Thomas Petazzoni +Cc: Frank Hunleth +--- + erts/include/internal/libatomic_ops/ethread.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/erts/include/internal/libatomic_ops/ethread.h b/erts/include/internal/libatomic_ops/ethread.h +index d65ee19..71d3598 100644 +--- a/erts/include/internal/libatomic_ops/ethread.h ++++ b/erts/include/internal/libatomic_ops/ethread.h +@@ -35,6 +35,7 @@ + + #define ETHR_NATIVE_IMPL__ "libatomic_ops" + ++#define AO_REQUIRE_CAS + #include "atomic_ops.h" + #include "ethr_membar.h" + #include "ethr_atomic.h" +diff --git a/erts/aclocal.m4 b/erts/aclocal.m4 +index d65ee19..71d3598 100644 +--- a/erts/aclocal.m4 ++++ b/erts/aclocal.m4 +@@ -1414,7 +1414,8 @@ + fi;; + esac + ethr_have_libatomic_ops=no +- AC_TRY_LINK([#include "atomic_ops.h"], ++ AC_TRY_LINK([#define AO_REQUIRE_CAS ++ #include "atomic_ops.h"], + [ + volatile AO_t x; + AO_t y; +@@ -1455,6 +1455,7 @@ + AC_CHECK_SIZEOF(AO_t, , + [ + #include ++ #define AO_REQUIRE_CAS + #include "atomic_ops.h" + ]) + AC_DEFINE_UNQUOTED(ETHR_SIZEOF_AO_T, $ac_cv_sizeof_AO_t, [Define to the size of AO_t if libatomic_ops is used]) +-- +1.9.1 + diff --git a/package/erlang/0002-erts-emulator-reorder-inclued-headers-paths.patch b/package/erlang/0002-erts-emulator-reorder-inclued-headers-paths.patch new file mode 100644 index 00000000..7a6e469d --- /dev/null +++ b/package/erlang/0002-erts-emulator-reorder-inclued-headers-paths.patch @@ -0,0 +1,46 @@ +From 85a3e5b4f65e5284e59dcdd90e92ea7d50ef6907 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sun, 8 Feb 2015 17:23:13 +0100 +Subject: [PATCH] erts/emulator: reorder inclued headers paths + +If the Perl Compatible Regular Expressions is installed on the +host and the path to the headers is added to the CFLAGS, the +pcre.h from the host is used instead of the one provided by +erlang. + +Erlang use an old version of this file which is incompatible +with the upstream one. + +Move INCLUDES before CFLAGS to use pcre.h from erlang. + +http://autobuild.buildroot.net/results/cbd/cbd8b54eef535f19d7d400fd269af1b3571d6143/build-end.log + +Signed-off-by: Romain Naour +[Bernd: rebased for erlang-21.0] +Signed-off-by: Bernd Kuhls +--- + erts/emulator/Makefile.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/erts/emulator/Makefile.in b/erts/emulator/Makefile.in +index 7145824..d079487 100644 +--- a/erts/emulator/Makefile.in ++++ b/erts/emulator/Makefile.in +@@ -712,7 +712,7 @@ + # Usually the same as the default rule, but certain platforms (e.g. win32) mix + # different compilers + $(OBJDIR)/beam_emu.o: beam/beam_emu.c +- $(V_EMU_CC) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) $(INCLUDES) -c $< -o $@ ++ $(V_EMU_CC) $(INCLUDES) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) -c $< -o $@ + + $(OBJDIR)/beam_emu.S: beam/beam_emu.c + $(V_EMU_CC) -S -fverbose-asm $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) $(INCLUDES) -c $< -o $@ +@@ -765,7 +765,7 @@ + # General targets + # + $(OBJDIR)/%.o: beam/%.c +- $(V_CC) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) $(INCLUDES) -c $< -o $@ ++ $(V_CC) $(INCLUDES) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) -c $< -o $@ + + $(OBJDIR)/%.o: $(TARGET)/%.c + $(V_CC) $(CFLAGS) $(INCLUDES) -Idrivers/common -c $< -o $@ diff --git a/package/erlang/0003-ei_portio.h-avoid-ODR-violation-of-ei_default_socket.patch b/package/erlang/0003-ei_portio.h-avoid-ODR-violation-of-ei_default_socket.patch new file mode 100644 index 00000000..69b6fae8 --- /dev/null +++ b/package/erlang/0003-ei_portio.h-avoid-ODR-violation-of-ei_default_socket.patch @@ -0,0 +1,54 @@ +From de870d7f9f36b3e68f280057851a4585a67ab219 Mon Sep 17 00:00:00 2001 +From: Sergei Trofimovich +Date: Tue, 14 Jan 2020 23:15:01 +0000 +Subject: [PATCH] ei_portio.h: avoid ODR violation of + 'ei_default_socket_callbacks' + +Noticed as a build failure against fresh gcc-master: + +``` +LD otp/lib/erl_interface/bin/x86_64-unknown-linux-gnu/erl_call +ld: otp/lib/erl_interface/obj/x86_64-unknown-linux-gnu/libei.a(eirecv.o):otp/lib/erl_interface/src/misc/ei_portio.h:50: multiple definition of `ei_default_socket_callbacks'; otp/lib/erl_interface/obj/x86_64-unknown-linux-gnu/libei.a(ei_connect.o):otp/lib/erl_interface/src/misc/ei_portio.h:50: first defined here +ld: otp/lib/erl_interface/obj/x86_64-unknown-linux-gnu/libei.a(send.o):otp/lib/erl_interface/src/misc/ei_portio.h:50: multiple definition of `ei_default_socket_callbacks'; otp/lib/erl_interface/obj/x86_64-unknown-linux-gnu/libei.a(ei_connect.o):otp/lib/erl_interface/src/misc/ei_portio.h:50: first defined here +ld: otp/lib/erl_interface/obj/x86_64-unknown-linux-gnu/libei.a(send_reg.o):otp/lib/erl_interface/src/misc/ei_portio.h:50: multiple definition of `ei_default_socket_callbacks'; otp/lib/erl_interface/obj/x86_64-unknown-linux-gnu/libei.a(ei_connect.o):otp/lib/erl_interface/src/misc/ei_portio.h:50: first defined here +ld: otp/lib/erl_interface/obj/x86_64-unknown-linux-gnu/libei.a(epmd_port.o):otp/lib/erl_interface/src/misc/ei_portio.h:50: multiple definition of `ei_default_socket_callbacks'; otp/lib/erl_interface/obj/x86_64-unknown-linux-gnu/libei.a(ei_connect.o):otp/lib/erl_interface/src/misc/ei_portio.h:50: first defined here +ld: otp/lib/erl_interface/obj/x86_64-unknown-linux-gnu/libei.a(ei_portio.o):otp/lib/erl_interface/src/misc/ei_portio.h:50: multiple definition of `ei_default_socket_callbacks'; otp/lib/erl_interface/obj/x86_64-unknown-linux-gnu/libei.a(ei_connect.o):otp/lib/erl_interface/src/misc/ei_portio.h:50: first defined here +collect2: error: ld returned 1 exit status +make[3]: *** [x86_64-unknown-linux-gnu/Makefile:669: otp/lib/erl_interface/bin/x86_64-unknown-linux-gnu/erl_call] Error 1 +``` + +The failure looks legitimate: `ei_default_socket_callbacks` is a +struct defined in 'ei_portio.h' and in 'ei_portio.c'. + +The change flips 'ei_portio.h' definition to declaration. + +gcc-10 will change the default from -fcommon to fno-common: +https://gcc.gnu.org/PR85678. + +The error also happens if CFLAGS=-fno-common passed explicitly. + +Signed-off-by: Sergei Trofimovich + +Patch taken from upstream: https://github.com/erlang/otp/commit/de870d7f9f36b3e68f280057851a4585a67ab219 +Signed-off-by: Heiko Thiery +--- + lib/erl_interface/src/misc/ei_portio.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/erl_interface/src/misc/ei_portio.h b/lib/erl_interface/src/misc/ei_portio.h +index 84ebc5039a..5172d085b4 100644 + +--- a/lib/erl_interface/src/misc/ei_portio.h ++++ b/lib/erl_interface/src/misc/ei_portio.h +@@ -47,7 +47,7 @@ int ei_writev_fill_ctx_t__(ei_socket_callbacks *cbs, void *ctx, const struct iov + int ei_socket_callbacks_have_writev__(ei_socket_callbacks *cbs); + #endif + +-ei_socket_callbacks ei_default_socket_callbacks; ++extern ei_socket_callbacks ei_default_socket_callbacks; + + #define EI_FD_AS_CTX__(FD) \ + ((void *) (long) (FD)) +-- +2.20.1 + diff --git a/package/erlang/Config.in b/package/erlang/Config.in new file mode 100644 index 00000000..ab87eab6 --- /dev/null +++ b/package/erlang/Config.in @@ -0,0 +1,47 @@ +config BR2_PACKAGE_HOST_ERLANG_ARCH_SUPPORTS + bool + default y if BR2_HOSTARCH = "x86_64" + default y if BR2_HOSTARCH = "x86" + +config BR2_PACKAGE_ERLANG_ARCH_SUPPORTS + bool + # see HOWTO/INSTALL.md for Erlang's supported platforms + # when using its native atomic ops implementation + default y if BR2_i386 || BR2_x86_64 || BR2_powerpc || \ + BR2_sparc_v9 || BR2_arm || BR2_aarch64 || BR2_mipsel + # erlang needs host-erlang + depends on BR2_PACKAGE_HOST_ERLANG_ARCH_SUPPORTS + +comment "erlang needs a toolchain w/ dynamic library, threads" + depends on BR2_USE_MMU # fork() + depends on BR2_PACKAGE_ERLANG_ARCH_SUPPORTS + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_ERLANG + bool "erlang" + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_PACKAGE_ERLANG_ARCH_SUPPORTS + select BR2_PACKAGE_ZLIB + help + Erlang is a programming language used to build massively + scalable soft real-time systems with requirements on high + availability. Some of its uses are in telecoms, banking, + e-commerce, computer telephony and instant messaging. + Erlang's runtime system has built-in support for + concurrency, distribution and fault tolerance. + + http://www.erlang.org + +if BR2_PACKAGE_ERLANG + +config BR2_PACKAGE_ERLANG_MEGACO + bool "install megaco application" + help + The Megaco application is a framework for building + applications on top of the Megaco/H.248 protocol. It is + approximately 14MB in size so if you do not need it then + it is recommended not to enable it. + +endif # BR2_PACKAGE_ERLANG diff --git a/package/erlang/erlang.hash b/package/erlang/erlang.hash new file mode 100644 index 00000000..3c2f0394 --- /dev/null +++ b/package/erlang/erlang.hash @@ -0,0 +1,4 @@ +# md5 from http://www.erlang.org/download/MD5, sha256 locally computed +md5 b2b48dad6e69c1e882843edbf2abcfd3 otp_src_22.2.tar.gz +sha256 89c2480cdac566065577c82704a48e10f89cf2e6ca5ab99e1cf80027784c678f otp_src_22.2.tar.gz +sha256 809fa1ed21450f59827d1e9aec720bbc4b687434fa22283c6cb5dd82a47ab9c0 LICENSE.txt diff --git a/package/erlang/erlang.mk b/package/erlang/erlang.mk new file mode 100644 index 00000000..59fcdba9 --- /dev/null +++ b/package/erlang/erlang.mk @@ -0,0 +1,111 @@ +################################################################################ +# +# erlang +# +################################################################################ + +# See note below when updating Erlang +ERLANG_VERSION = 22.2 +ERLANG_SITE = http://www.erlang.org/download +ERLANG_SOURCE = otp_src_$(ERLANG_VERSION).tar.gz +ERLANG_DEPENDENCIES = host-erlang + +ERLANG_LICENSE = Apache-2.0 +ERLANG_LICENSE_FILES = LICENSE.txt +ERLANG_CPE_ID_VENDOR = erlang +ERLANG_CPE_ID_PRODUCT = erlang\/otp +ERLANG_INSTALL_STAGING = YES + +# Remove the leftover deps directory from the ssl app +# See https://bugs.erlang.org/browse/ERL-1168 +define ERLANG_REMOVE_SSL_DEPS + rm -rf $(@D)/lib/ssl/src/deps +endef +ERLANG_POST_PATCH_HOOKS += ERLANG_REMOVE_SSL_DEPS + +# Patched erts/aclocal.m4 +define ERLANG_RUN_AUTOCONF + cd $(@D) && PATH=$(BR_PATH) ./otp_build autoconf +endef +ERLANG_DEPENDENCIES += host-autoconf +ERLANG_PRE_CONFIGURE_HOOKS += ERLANG_RUN_AUTOCONF +HOST_ERLANG_DEPENDENCIES += host-autoconf +HOST_ERLANG_PRE_CONFIGURE_HOOKS += ERLANG_RUN_AUTOCONF + +# Whenever updating Erlang, this value should be updated as well, to the +# value of EI_VSN in the file lib/erl_interface/vsn.mk +ERLANG_EI_VSN = 3.13.1 + +# The configure checks for these functions fail incorrectly +ERLANG_CONF_ENV = ac_cv_func_isnan=yes ac_cv_func_isinf=yes + +# Set erl_xcomp variables. See xcomp/erl-xcomp.conf.template +# for documentation. +ERLANG_CONF_ENV += erl_xcomp_sysroot=$(STAGING_DIR) + +ERLANG_CONF_OPTS = --without-javac + +# Force ERL_TOP to the downloaded source directory. This prevents +# Erlang's configure script from inadvertantly using files from +# a version of Erlang installed on the host. +ERLANG_CONF_ENV += ERL_TOP=$(@D) +HOST_ERLANG_CONF_ENV += ERL_TOP=$(@D) + +# erlang uses openssl for all things crypto. Since the host tools (such as +# rebar) uses crypto, we need to build host-erlang with support for openssl. +HOST_ERLANG_DEPENDENCIES += host-openssl +HOST_ERLANG_CONF_OPTS = --without-javac --with-ssl=$(HOST_DIR) + +HOST_ERLANG_CONF_OPTS += --without-termcap + +ifeq ($(BR2_PACKAGE_NCURSES),y) +ERLANG_CONF_OPTS += --with-termcap +ERLANG_DEPENDENCIES += ncurses +else +ERLANG_CONF_OPTS += --without-termcap +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +ERLANG_CONF_OPTS += --with-ssl +ERLANG_DEPENDENCIES += openssl +else +ERLANG_CONF_OPTS += --without-ssl +endif + +ifeq ($(BR2_PACKAGE_UNIXODBC),y) +ERLANG_DEPENDENCIES += unixodbc +ERLANG_CONF_OPTS += --with-odbc +else +ERLANG_CONF_OPTS += --without-odbc +endif + +# Always use Buildroot's zlib +ERLANG_CONF_OPTS += --disable-builtin-zlib +ERLANG_DEPENDENCIES += zlib + +# Remove source, example, gs and wx files from staging and target. +ERLANG_REMOVE_PACKAGES = gs wx + +ifneq ($(BR2_PACKAGE_ERLANG_MEGACO),y) +ERLANG_REMOVE_PACKAGES += megaco +endif + +define ERLANG_REMOVE_STAGING_UNUSED + for package in $(ERLANG_REMOVE_PACKAGES); do \ + rm -rf $(STAGING_DIR)/usr/lib/erlang/lib/$${package}-*; \ + done +endef + +define ERLANG_REMOVE_TARGET_UNUSED + find $(TARGET_DIR)/usr/lib/erlang -type d -name src -prune -exec rm -rf {} \; + find $(TARGET_DIR)/usr/lib/erlang -type d -name examples -prune -exec rm -rf {} \; + for package in $(ERLANG_REMOVE_PACKAGES); do \ + rm -rf $(TARGET_DIR)/usr/lib/erlang/lib/$${package}-*; \ + done +endef + +ERLANG_POST_INSTALL_STAGING_HOOKS += ERLANG_REMOVE_STAGING_UNUSED +ERLANG_POST_INSTALL_TARGET_HOOKS += ERLANG_REMOVE_TARGET_UNUSED + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/erofs-utils/Config.in b/package/erofs-utils/Config.in new file mode 100644 index 00000000..9d9aa159 --- /dev/null +++ b/package/erofs-utils/Config.in @@ -0,0 +1,31 @@ +config BR2_PACKAGE_EROFS_UTILS + bool "erofs-utils" + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + help + Userspace utilities for EROFS filesystem + + https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git + +if BR2_PACKAGE_EROFS_UTILS + +config BR2_PACKAGE_EROFS_UTILS_LZ4 + bool "lz4 support" + select BR2_PACKAGE_LZ4 + help + Support LZ4 compression algorithm + +config BR2_PACKAGE_EROFS_UTILS_EROFSFUSE + bool "erofsfuse support" + depends on BR2_USE_MMU # libfuse + depends on !BR2_STATIC_LIBS # libfuse + depends on BR2_TOOLCHAIN_HAS_THREADS # libfuse + select BR2_PACKAGE_LIBFUSE + help + FUSE file system client for EROFS + +comment "erofsfuse needs a toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS + +endif diff --git a/package/erofs-utils/Config.in.host b/package/erofs-utils/Config.in.host new file mode 100644 index 00000000..c6fbc388 --- /dev/null +++ b/package/erofs-utils/Config.in.host @@ -0,0 +1,7 @@ +config BR2_PACKAGE_HOST_EROFS_UTILS + bool "host erofs-utils" + select BR2_PACKAGE_HOST_UTIL_LINUX + help + Userspace utilities for EROFS filesystem + + https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git diff --git a/package/erofs-utils/erofs-utils.hash b/package/erofs-utils/erofs-utils.hash new file mode 100644 index 00000000..0de52d28 --- /dev/null +++ b/package/erofs-utils/erofs-utils.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 6b2ea15c3b092bd9a3abd966f78bc01c6caacb94022643ff34cf69893ee04e84 erofs-utils-1.2.1.tar.gz +sha256 feee3b3157dcdf78d4f50edefbd5dd7adf8b6d52c11bfaaa746a85a373256713 COPYING diff --git a/package/erofs-utils/erofs-utils.mk b/package/erofs-utils/erofs-utils.mk new file mode 100644 index 00000000..5d547148 --- /dev/null +++ b/package/erofs-utils/erofs-utils.mk @@ -0,0 +1,42 @@ +################################################################################ +# +# erofs-utils +# +################################################################################ + +EROFS_UTILS_VERSION = 1.2.1 +EROFS_UTILS_SITE = https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git/snapshot +EROFS_UTILS_LICENSE = GPL-2.0+ +EROFS_UTILS_LICENSE_FILES = COPYING + +# From a git tree: no generated autotools files +EROFS_UTILS_AUTORECONF = YES + +EROFS_UTILS_DEPENDENCIES = host-pkgconf util-linux + +ifeq ($(BR2_PACKAGE_EROFS_UTILS_LZ4),y) +EROFS_UTILS_DEPENDENCIES += lz4 +EROFS_UTILS_CONF_OPTS += --enable-lz4 +else +EROFS_UTILS_CONF_OPTS += --disable-lz4 +endif + +ifeq ($(BR2_PACKAGE_LIBSELINUX),y) +EROFS_UTILS_CONF_OPTS += --with-selinux +EROFS_UTILS_DEPENDENCIES += libselinux +else +EROFS_UTILS_CONF_OPTS += --without-selinux +endif + +ifeq ($(BR2_PACKAGE_EROFS_UTILS_EROFSFUSE),y) +EROFS_UTILS_CONF_OPTS += --enable-fuse +EROFS_UTILS_DEPENDENCIES += libfuse +else +EROFS_UTILS_CONF_OPTS += --disable-fuse +endif + +HOST_EROFS_UTILS_DEPENDENCIES = host-pkgconf host-util-linux host-lz4 +HOST_EROFS_UTILS_CONF_OPTS += --enable-lz4 --disable-fuse --without-selinux + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/espeak/0001-Fix-build-of-shared-library-on-architectures-needing.patch b/package/espeak/0001-Fix-build-of-shared-library-on-architectures-needing.patch new file mode 100644 index 00000000..2590e158 --- /dev/null +++ b/package/espeak/0001-Fix-build-of-shared-library-on-architectures-needing.patch @@ -0,0 +1,31 @@ +From 08a464e2b6bd31bb2bf4e258ebfa9b9d65805abf Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Fri, 27 Nov 2015 15:17:02 +0100 +Subject: [PATCH] Fix build of shared library on architectures needing -fPIC + +Certain architectures, like Sparc and Sparc64 require objects to be +built with -fPIC (and not just -fpic) to be usable in shared +libraries. On other architectures, -fPIC is the same as -fpic so this +patch doesn't affect such architectures. + +Signed-off-by: Thomas Petazzoni +--- + src/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/Makefile b/src/Makefile +index 95fe549..c293611 100755 +--- a/src/Makefile ++++ b/src/Makefile +@@ -110,7 +110,7 @@ $(BIN2_NAME): $(OBJS3) $(LIB_NAME) + + + x_%.o: %.cpp +- $(CXX) $(CXXFLAGS) $(USE_AUDIO) -D PATH_ESPEAK_DATA=\"$(DATADIR)\" -Wall -fpic -fvisibility=hidden -pedantic \ ++ $(CXX) $(CXXFLAGS) $(USE_AUDIO) -D PATH_ESPEAK_DATA=\"$(DATADIR)\" -Wall -fPIC -fvisibility=hidden -pedantic \ + -I. -D LIBRARY -c -fno-exceptions $< -o x_$*.o + + $(LIB_NAME): $(OBJS2) +-- +2.6.3 + diff --git a/package/espeak/0002-tr_languages-cast-string_ordinal-init-values.patch b/package/espeak/0002-tr_languages-cast-string_ordinal-init-values.patch new file mode 100644 index 00000000..d37e64c6 --- /dev/null +++ b/package/espeak/0002-tr_languages-cast-string_ordinal-init-values.patch @@ -0,0 +1,33 @@ +From 451330d09a6a3500b40bc4f5896ba790ab46cd6c Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sun, 15 Jan 2017 19:37:31 +0100 +Subject: [PATCH 2/2] tr_languages: cast string_ordinal init values + +On some architecture, "char" is signed (x86_64, nios2...) so the +compiler try to convert int 0xc2 and 0xba to a signed char. +This is an error since gcc6 (Wnarrowing). + +Fixes: +http://autobuild.buildroot.net/results/bae/baef9888b1979d18171668a675985e3f3b45fda6 + +Signed-off-by: Romain Naour +--- + src/tr_languages.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp +index 5c80286..dbc6e36 100644 +--- a/src/tr_languages.cpp ++++ b/src/tr_languages.cpp +@@ -200,7 +200,7 @@ static const unsigned short chars_ignore_zwnj_hyphen[] = { + 0x200d, 1, // zero width joiner + 0, 0 }; + +-const char string_ordinal[] = {0xc2,0xba,0}; // masculine ordinal character, UTF-8 ++const char string_ordinal[] = {(char)0xc2,(char)0xba,0}; // masculine ordinal character, UTF-8 + + + static Translator* NewTranslator(void) +-- +2.9.3 + diff --git a/package/espeak/Config.in b/package/espeak/Config.in new file mode 100644 index 00000000..5f9007a1 --- /dev/null +++ b/package/espeak/Config.in @@ -0,0 +1,43 @@ +comment "espeak needs a toolchain w/ C++, wchar, threads, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || BR2_STATIC_LIBS + depends on BR2_USE_MMU + +config BR2_PACKAGE_ESPEAK + bool "espeak" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + # does not properly support building only a static version + depends on !BR2_STATIC_LIBS + help + espeak is a speech synthesizer software for English and + other languages. + + http://espeak.sourceforge.net/ + +if BR2_PACKAGE_ESPEAK + +choice + prompt "choose audio backend" + default BR2_PACKAGE_ESPEAK_AUDIO_BACKEND_NONE + +config BR2_PACKAGE_ESPEAK_AUDIO_BACKEND_NONE + bool "No sound backend, only produce wav files" + +config BR2_PACKAGE_ESPEAK_AUDIO_BACKEND_ALSA + bool "alsa via portaudio" + # Selecting portaudio generates spurious "unmet dependencies" + # warnings. Unless you are changing the dependencies of espeak + # or portaudio, just ignore those spurious warnings. + select BR2_PACKAGE_PORTAUDIO + select BR2_PACKAGE_PORTAUDIO_CXX + +config BR2_PACKAGE_ESPEAK_AUDIO_BACKEND_PULSEAUDIO + bool "pulseaudio" + depends on BR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC + select BR2_PACKAGE_PULSEAUDIO + +endchoice + +endif # BR2_PACKAGE_ESPEAK diff --git a/package/espeak/espeak.hash b/package/espeak/espeak.hash new file mode 100644 index 00000000..91feda3c --- /dev/null +++ b/package/espeak/espeak.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 bf9a17673adffcc28ff7ea18764f06136547e97bbd9edf2ec612f09b207f0659 espeak-1.48.04-source.zip +sha256 0bbca7a0ad5da4a6b0677f90d17817984edce7e42d300cae94ae93e4ccba9df7 License.txt diff --git a/package/espeak/espeak.mk b/package/espeak/espeak.mk new file mode 100644 index 00000000..aa0b5b07 --- /dev/null +++ b/package/espeak/espeak.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# espeak +# +################################################################################ + +ESPEAK_VERSION_MAJOR = 1.48 +ESPEAK_VERSION = $(ESPEAK_VERSION_MAJOR).04 +ESPEAK_SOURCE = espeak-$(ESPEAK_VERSION)-source.zip +ESPEAK_SITE = http://downloads.sourceforge.net/project/espeak/espeak/espeak-$(ESPEAK_VERSION_MAJOR) +ESPEAK_LICENSE = GPL-3.0+ +ESPEAK_LICENSE_FILES = License.txt + +ifeq ($(BR2_PACKAGE_ESPEAK_AUDIO_BACKEND_ALSA),y) +ESPEAK_AUDIO_BACKEND = portaudio +ESPEAK_DEPENDENCIES = portaudio +endif +ifeq ($(BR2_PACKAGE_ESPEAK_AUDIO_BACKEND_PULSEAUDIO),y) +ESPEAK_AUDIO_BACKEND = pulseaudio +ESPEAK_DEPENDENCIES = pulseaudio +endif + +define ESPEAK_EXTRACT_CMDS + $(UNZIP) -d $(@D) $(ESPEAK_DL_DIR)/$(ESPEAK_SOURCE) + mv $(@D)/espeak-$(ESPEAK_VERSION)-source/* $(@D) + $(RM) -r $(@D)/espeak-$(ESPEAK_VERSION)-source +endef + +define ESPEAK_CONFIGURE_CMDS + # Buildroot provides portaudio V19, see ReadMe file for more details. + cp $(@D)/src/portaudio19.h $(@D)/src/portaudio.h +endef + +define ESPEAK_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/src $(TARGET_CONFIGURE_OPTS) \ + AUDIO="$(ESPEAK_AUDIO_BACKEND)" all +endef + +define ESPEAK_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/src DESTDIR="$(TARGET_DIR)" install +endef + +$(eval $(generic-package)) diff --git a/package/ethtool/Config.in b/package/ethtool/Config.in new file mode 100644 index 00000000..48173bfe --- /dev/null +++ b/package/ethtool/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_ETHTOOL + bool "ethtool" + help + ethtool is a small utility for examining and tuning your + ethernet-based network interface. + + https://www.kernel.org/pub/software/network/ethtool/ + +config BR2_PACKAGE_ETHTOOL_PRETTY_PRINT + bool "enable pretty printing" + default y + depends on BR2_PACKAGE_ETHTOOL + help + Enables ethtool's pretty printing for drivers + and SFP modules. diff --git a/package/ethtool/ethtool.hash b/package/ethtool/ethtool.hash new file mode 100644 index 00000000..334ff8d5 --- /dev/null +++ b/package/ethtool/ethtool.hash @@ -0,0 +1,5 @@ +# From https://www.kernel.org/pub/software/network/ethtool/sha256sums.asc +sha256 817d5396a9307b4c637b435d4c558b8f5f964a1464a035ca3c0180f4cc93cfcf ethtool-5.10.tar.xz +# Locally calculated +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING +sha256 5d632934396f90c82dfebe3c9512648bbb6333b406113d0cd331b0e0aa2d34a1 LICENSE diff --git a/package/ethtool/ethtool.mk b/package/ethtool/ethtool.mk new file mode 100644 index 00000000..c9765ecc --- /dev/null +++ b/package/ethtool/ethtool.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# ethtool +# +################################################################################ + +ETHTOOL_VERSION = 5.10 +ETHTOOL_SOURCE = ethtool-$(ETHTOOL_VERSION).tar.xz +ETHTOOL_SITE = $(BR2_KERNEL_MIRROR)/software/network/ethtool +ETHTOOL_LICENSE = GPL-2.0 +ETHTOOL_LICENSE_FILES = LICENSE COPYING +ETHTOOL_CPE_ID_VENDOR = kernel +ETHTOOL_CONF_OPTS = \ + $(if $(BR2_PACKAGE_ETHTOOL_PRETTY_PRINT),--enable-pretty-dump,--disable-pretty-dump) + +ifeq ($(BR2_PACKAGE_LIBMNL),y) +ETHTOOL_DEPENDENCIES += host-pkgconf libmnl +ETHTOOL_CONF_OPTS += --enable-netlink +else +ETHTOOL_CONF_OPTS += --disable-netlink +endif + +$(eval $(autotools-package)) diff --git a/package/eudev/0001-Only-use-pragma-for-ignoring-diagnostics-if-.patch b/package/eudev/0001-Only-use-pragma-for-ignoring-diagnostics-if-.patch new file mode 100644 index 00000000..3046ba52 --- /dev/null +++ b/package/eudev/0001-Only-use-pragma-for-ignoring-diagnostics-if-.patch @@ -0,0 +1,39 @@ +From dc8aa43b7b6d0cead7d8a0c1a151d289a5233a10 Mon Sep 17 00:00:00 2001 +From: Eric Le Bihan +Date: Wed, 2 Apr 2014 12:36:52 +0200 +Subject: [PATCH] libudev: Only use #pragma for ignoring diagnostics if GCC + version supports it. + +[Peter: update for 2.1.1, fix shared_assert issue] +Signed-off-by: Eric Le Bihan +--- + src/shared/macro.h | 8 +++++ + 1 file changed, 8 insertions(+) + +diff --git a/src/shared/macro.h b/src/shared/macro.h +--- a/src/shared/macro.h ++++ b/src/shared/macro.h +@@ -38,6 +38,7 @@ + #define _cleanup_(x) __attribute__((cleanup(x))) + + /* Temporarily disable some warnings */ ++#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) + #define DISABLE_WARNING_DECLARATION_AFTER_STATEMENT \ + _Pragma("GCC diagnostic push"); \ + _Pragma("GCC diagnostic ignored \"-Wdeclaration-after-statement\"") +@@ -48,6 +49,13 @@ + + #define REENABLE_WARNING \ + _Pragma("GCC diagnostic pop") ++#else ++#define DISABLE_WARNING_DECLARATION_AFTER_STATEMENT ++#define DISABLE_WARNING_FORMAT_NONLITERAL ++#define REENABLE_WARNING ++/* glibc unconditionally defines this, but it needs GCC 4.6+ */ ++#undef static_assert ++#endif + + #define XCONCATENATE(x, y) x ## y + #define CONCATENATE(x, y) XCONCATENATE(x, y) +-- +1.7.9.5 diff --git a/package/eudev/0001-src-libudev-libudev-monitor.c-do-not-check-if-dev-is.patch b/package/eudev/0001-src-libudev-libudev-monitor.c-do-not-check-if-dev-is.patch new file mode 100644 index 00000000..3027ad7f --- /dev/null +++ b/package/eudev/0001-src-libudev-libudev-monitor.c-do-not-check-if-dev-is.patch @@ -0,0 +1,33 @@ +From 799591c57368bbe47667f5b696050247a766b117 Mon Sep 17 00:00:00 2001 +From: "Anthony G. Basile" +Date: Mon, 6 Jan 2020 11:14:47 -0500 +Subject: [PATCH] src/libudev/libudev-monitor.c: do not check if /dev is tmpfs + +This check fails for buildroot systems where /dev is not mounted +as a tmpfs filesystem. Dropping this check should be safe even +on regular systems. + +This solves issue #172. + +Signed-off-by: Anthony G. Basile +Signed-off-by: Joel Stanley +--- + src/libudev/libudev-monitor.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/libudev/libudev-monitor.c b/src/libudev/libudev-monitor.c +index 614149c6243c..060ba733f33b 100644 +--- a/src/libudev/libudev-monitor.c ++++ b/src/libudev/libudev-monitor.c +@@ -186,7 +186,7 @@ struct udev_monitor *udev_monitor_new_from_netlink_fd(struct udev *udev, const c + * We do not set a netlink multicast group here, so the socket + * will not receive any messages. + */ +- if (access(UDEV_ROOT_RUN "/udev/control", F_OK) < 0 || !udev_has_devtmpfs(udev)) { ++ if (access(UDEV_ROOT_RUN "/udev/control", F_OK) < 0) { + log_debug("the udev service seems not to be active, disable the monitor"); + group = UDEV_MONITOR_NONE; + } else +-- +2.25.0 + diff --git a/package/eudev/Config.in b/package/eudev/Config.in new file mode 100644 index 00000000..0e5bd0ce --- /dev/null +++ b/package/eudev/Config.in @@ -0,0 +1,46 @@ +config BR2_PACKAGE_EUDEV + bool "eudev" + depends on BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV + depends on BR2_USE_MMU # uses fork() + depends on BR2_USE_WCHAR # needs C99 compiler + depends on !BR2_STATIC_LIBS # kmod + select BR2_PACKAGE_HAS_UDEV + select BR2_PACKAGE_UDEV_GENTOO_SCRIPTS if BR2_INIT_OPENRC + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBS + select BR2_PACKAGE_UTIL_LINUX_LIBBLKID + select BR2_PACKAGE_KMOD + help + eudev is a fork of systemd-udev with the goal of obtaining + better compatibility with existing software such as OpenRC and + Upstart, older kernels, various toolchains and anything else + required by users and various distributions. + + https://wiki.gentoo.org/wiki/Project:Eudev + +if BR2_PACKAGE_EUDEV + +config BR2_PACKAGE_PROVIDES_UDEV + default "eudev" + +config BR2_PACKAGE_EUDEV_RULES_GEN + bool "enable rules generator" + help + Enable persistent rules generator + +config BR2_PACKAGE_EUDEV_ENABLE_HWDB + bool "enable hwdb installation" + default y + select BR2_PACKAGE_HOST_EUDEV # for udevadm, during target-finalize + help + Enables hardware database installation to /etc/udev/hwdb.bin + +endif + +comment "eudev needs eudev /dev management" + depends on BR2_USE_MMU + depends on !BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV + +comment "eudev needs a toolchain w/ wchar, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || BR2_STATIC_LIBS diff --git a/package/eudev/Config.in.host b/package/eudev/Config.in.host new file mode 100644 index 00000000..87dfc439 --- /dev/null +++ b/package/eudev/Config.in.host @@ -0,0 +1,3 @@ +# Select this if you need host eudev tools (e.g. udevadm) +config BR2_PACKAGE_HOST_EUDEV + bool diff --git a/package/eudev/S10udev b/package/eudev/S10udev new file mode 100644 index 00000000..4e799d65 --- /dev/null +++ b/package/eudev/S10udev @@ -0,0 +1,46 @@ +#!/bin/sh +# +# udev This is a minimal non-LSB version of a UDEV startup script. It +# was derived by stripping down the udev-058 LSB version for use +# with buildroot on embedded hardware using Linux 2.6.34+ kernels. +# +# You may need to customize this for your system's resource limits +# (including startup time!) and administration. For example, if +# your early userspace has a custom initramfs or initrd you might +# need /dev much earlier; or without hotpluggable busses (like USB, +# PCMCIA, MMC/SD, and so on) your /dev might be static after boot. +# +# This script assumes your system boots right into the eventual root +# filesystem, and that init runs this udev script before any programs +# needing more device nodes than the bare-bones set -- /dev/console, +# /dev/zero, /dev/null -- that's needed to boot and run this script. +# + +# Check for config file and read it +UDEV_CONFIG=/etc/udev/udev.conf +test -r $UDEV_CONFIG || exit 6 +. $UDEV_CONFIG + +case "$1" in + start) + printf "Populating %s using udev: " "${udev_root:-/dev}" + [ -e /proc/sys/kernel/hotplug ] && printf '\000\000\000\000' > /proc/sys/kernel/hotplug + /sbin/udevd -d || { echo "FAIL"; exit 1; } + udevadm trigger --type=subsystems --action=add + udevadm trigger --type=devices --action=add + udevadm settle --timeout=30 || echo "udevadm settle failed" + echo "done" + ;; + stop) + # Stop execution of events + udevadm control --stop-exec-queue + killall udevd + ;; + *) + echo "Usage: $0 {start|stop}" + exit 1 + ;; +esac + + +exit 0 diff --git a/package/eudev/eudev.hash b/package/eudev/eudev.hash new file mode 100644 index 00000000..e6a319ac --- /dev/null +++ b/package/eudev/eudev.hash @@ -0,0 +1,5 @@ +# From http://dev.gentoo.org/~blueness/eudev/ +md5 dedfb1964f6098fe9320de827957331f eudev-3.2.9.tar.gz +# Locally calculated +sha256 89618619084a19e1451d373c43f141b469c9fd09767973d73dd268b92074d4fc eudev-3.2.9.tar.gz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/eudev/eudev.mk b/package/eudev/eudev.mk new file mode 100644 index 00000000..d4133a5a --- /dev/null +++ b/package/eudev/eudev.mk @@ -0,0 +1,94 @@ +################################################################################ +# +# eudev +# +################################################################################ + +EUDEV_VERSION = 3.2.9 +EUDEV_SITE = http://dev.gentoo.org/~blueness/eudev +EUDEV_LICENSE = GPL-2.0+ (programs), LGPL-2.1+ (libraries) +EUDEV_LICENSE_FILES = COPYING +EUDEV_INSTALL_STAGING = YES + +EUDEV_CONF_OPTS = \ + --disable-manpages \ + --sbindir=/sbin \ + --libexecdir=/lib \ + --disable-introspection \ + --enable-kmod \ + --enable-blkid + +# eudev requires only the util-linux libraries at build time +EUDEV_DEPENDENCIES = host-gperf host-pkgconf util-linux-libs kmod +EUDEV_PROVIDES = udev + +ifeq ($(BR2_ROOTFS_MERGED_USR),) +EUDEV_CONF_OPTS += --with-rootlibdir=/lib --enable-split-usr +endif + +ifeq ($(BR2_PACKAGE_EUDEV_RULES_GEN),y) +EUDEV_CONF_OPTS += --enable-rule-generator +else +EUDEV_CONF_OPTS += --disable-rule-generator +endif + +ifeq ($(BR2_PACKAGE_EUDEV_ENABLE_HWDB),y) +EUDEV_CONF_OPTS += --enable-hwdb +else +EUDEV_CONF_OPTS += --disable-hwdb +endif + +ifeq ($(BR2_PACKAGE_LIBSELINUX),y) +EUDEV_CONF_OPTS += --enable-selinux +EUDEV_DEPENDENCIES += libselinux +else +EUDEV_CONF_OPTS += --disable-selinux +endif + +define EUDEV_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/eudev/S10udev $(TARGET_DIR)/etc/init.d/S10udev +endef + +# Avoid installing S10udev with openrc, as the service is started by a unit +# from the udev-gentoo-scripts package. +define EUDEV_INSTALL_INIT_OPENRC + @: +endef + +HOST_EUDEV_DEPENDENCIES = host-gperf host-pkgconf + +HOST_EUDEV_SYSCONFDIR = $(if $(BR2_PACKAGE_SYSTEMD),/usr/lib,/etc) +HOST_EUDEV_CONF_OPTS = \ + --prefix=/usr \ + --sbindir=/sbin \ + --libexecdir=/lib \ + --with-rootlibdir=/lib \ + --sysconfdir=$(HOST_EUDEV_SYSCONFDIR) \ + --disable-blkid \ + --disable-introspection \ + --disable-kmod \ + --disable-manpages \ + --disable-rule-generator \ + --disable-selinux \ + --enable-hwdb + +define HOST_EUDEV_INSTALL_CMDS + $(INSTALL) -D -m 0755 $(@D)/src/udev/udevadm \ + $(HOST_DIR)/bin/udevadm +endef + +define HOST_EUDEV_BUILD_HWDB + $(HOST_DIR)/bin/udevadm hwdb --update --root $(TARGET_DIR) +endef +HOST_EUDEV_TARGET_FINALIZE_HOOKS += HOST_EUDEV_BUILD_HWDB + +# Note: this will run in the filesystem context, so will use a copy +# of tharget/, not the real one, so the files are still available on +# re-builds (foo-rebuild, etc...) +define HOST_EUDEV_RM_HWDB_SRC + rm -rf $(TARGET_DIR)/$(HOST_EUDEV_SYSCONFDIR)/udev/hwdb.d/ +endef +HOST_EUDEV_ROOTFS_PRE_CMD_HOOKS += HOST_EUDEV_RM_HWDB_SRC + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/ev3dev-linux-drivers/Config.in b/package/ev3dev-linux-drivers/Config.in new file mode 100644 index 00000000..9be2f282 --- /dev/null +++ b/package/ev3dev-linux-drivers/Config.in @@ -0,0 +1,12 @@ +# Prompt-less option, because this package is not doing anything except +# downloading the ev3dev driver sources. The real work is done by a Linux +# extension. +config BR2_PACKAGE_EV3DEV_LINUX_DRIVERS + bool + depends on BR2_LINUX_KERNEL + help + Linux drivers for LEGO MINDSTORMS EV3 + + This is only the download helper for the kernel patch. + + https://github.com/ev3dev/lego-linux-drivers diff --git a/package/ev3dev-linux-drivers/ev3dev-linux-drivers.mk b/package/ev3dev-linux-drivers/ev3dev-linux-drivers.mk new file mode 100644 index 00000000..92e89278 --- /dev/null +++ b/package/ev3dev-linux-drivers/ev3dev-linux-drivers.mk @@ -0,0 +1,11 @@ +################################################################################ +# +# ev3dev Linux drivers +# +################################################################################ + +EV3DEV_LINUX_DRIVERS_VERSION = 0e551eb25ae8600c1f178814781bfb42dc835496 +EV3DEV_LINUX_DRIVERS_SITE = $(call github,ev3dev,lego-linux-drivers,$(EV3DEV_LINUX_DRIVERS_VERSION)) +EV3DEV_LINUX_DRIVERS_LICENSE = GPL-2.0 + +$(eval $(generic-package)) diff --git a/package/ev3dev-linux-drivers/lego-linux-drivers.hash b/package/ev3dev-linux-drivers/lego-linux-drivers.hash new file mode 100644 index 00000000..cc48f653 --- /dev/null +++ b/package/ev3dev-linux-drivers/lego-linux-drivers.hash @@ -0,0 +1,2 @@ +# locally computed +sha256 9d2740b348c8d43e7e15fedc4cec99bf351a3a2ba8691f2a07c439a9c034bc04 lego-linux-drivers-0e551eb25ae8600c1f178814781bfb42dc835496.tar.gz diff --git a/package/evemu/0001-Include-limits.h-for-PATH_MAX.patch b/package/evemu/0001-Include-limits.h-for-PATH_MAX.patch new file mode 100644 index 00000000..04a0cc6b --- /dev/null +++ b/package/evemu/0001-Include-limits.h-for-PATH_MAX.patch @@ -0,0 +1,35 @@ +From e80a13776e6d6df29fd704cd63e0744200c3df1b Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Sun, 1 Oct 2017 19:54:53 +0200 +Subject: [PATCH] Include limits.h for PATH_MAX. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Fixes the following compile failure when building with musl: + + find_event_devices.c: In function ‘find_event_devices’: + find_event_devices.c:60:14: error: ‘PATH_MAX’ undeclared (first use in this function) + char fname[PATH_MAX]; + ^~~~~~~~ + +Signed-off-by: Peter Seiderer +--- + tools/find_event_devices.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/tools/find_event_devices.c b/tools/find_event_devices.c +index 2a43d54..3a74096 100644 +--- a/tools/find_event_devices.c ++++ b/tools/find_event_devices.c +@@ -24,6 +24,7 @@ + + #define _GNU_SOURCE + #include ++#include + #include + #include + #include +-- +2.14.2 + diff --git a/package/evemu/0002-evemu-Update-struct-input_event.patch b/package/evemu/0002-evemu-Update-struct-input_event.patch new file mode 100644 index 00000000..50fabaf4 --- /dev/null +++ b/package/evemu/0002-evemu-Update-struct-input_event.patch @@ -0,0 +1,110 @@ +From 30973c0bc053b2198cafb1899a0843688d5bb541 Mon Sep 17 00:00:00 2001 +From: Deepa Dinamani +Date: Mon, 15 Jan 2018 17:18:49 -0800 +Subject: [PATCH] evemu: Update struct input_event + +The struct input_event is not y2038 safe. +Update the struct according to the kernel patch: +https://lkml.org/lkml/2018/1/6/324 + +Signed-off-by: Deepa Dinamani +Signed-off-by: Peter Hutterer +[Retrieved from: +https://gitlab.freedesktop.org/libevdev/evemu/-/commit/30973c0bc053b2198cafb1899a0843688d5bb541] +Signed-off-by: Fabrice Fontaine +--- + src/evemu.c | 35 +++++++++++++++++++++++------------ + 1 file changed, 23 insertions(+), 12 deletions(-) + +diff --git a/src/evemu.c b/src/evemu.c +index a8a949b..c7ff561 100644 +--- a/src/evemu.c ++++ b/src/evemu.c +@@ -771,7 +771,7 @@ int evemu_write_event(FILE *fp, const struct input_event *ev) + { + int rc; + rc = fprintf(fp, "E: %lu.%06u %04x %04x %04d ", +- ev->time.tv_sec, (unsigned)ev->time.tv_usec, ++ ev->input_event_sec, (unsigned)ev->input_event_usec, + ev->type, ev->code, ev->value); + rc += write_event_desc(fp, ev); + return rc; +@@ -800,13 +800,19 @@ int evemu_record(FILE *fp, int fd, int ms) + if (ret < 0) + return ret; + if (ret == sizeof(ev)) { ++ struct timeval tv; + long time; + ++ tv.tv_sec = ev.input_event_sec; ++ tv.tv_usec = ev.input_event_usec; ++ + if (offset == 0) +- offset = time_to_long(&ev.time) - 1; ++ offset = time_to_long(&tv) - 1; + +- time = time_to_long(&ev.time); +- ev.time = long_to_time(time - offset); ++ time = time_to_long(&tv); ++ tv = long_to_time(time - offset); ++ ev.input_event_sec = tv.tv_sec; ++ ev.input_event_usec = tv.tv_usec; + evemu_write_event(fp, &ev); + fflush(fp); + } +@@ -839,8 +845,8 @@ int evemu_read_event(FILE *fp, struct input_event *ev) + return -1; + } + +- ev->time.tv_sec = sec; +- ev->time.tv_usec = usec; ++ ev->input_event_sec = sec; ++ ev->input_event_usec = usec; + ev->type = type; + ev->code = code; + ev->value = value; +@@ -852,8 +858,8 @@ out: + + int evemu_create_event(struct input_event *ev, int type, int code, int value) + { +- ev->time.tv_sec = 0; +- ev->time.tv_usec = 0; ++ ev->input_event_sec = 0; ++ ev->input_event_usec = 0; + ev->type = type; + ev->code = code; + ev->value = value; +@@ -873,6 +879,7 @@ static inline unsigned long us2s(unsigned long us) + int evemu_read_event_realtime(FILE *fp, struct input_event *ev, + struct timeval *evtime) + { ++ struct timeval tv; + unsigned long usec; + const unsigned long ERROR_MARGIN = 150; /* µs */ + int ret; +@@ -882,14 +889,18 @@ int evemu_read_event_realtime(FILE *fp, struct input_event *ev, + return ret; + + if (evtime) { +- if (evtime->tv_sec == 0 && evtime->tv_usec == 0) +- *evtime = ev->time; +- usec = time_to_long(&ev->time) - time_to_long(evtime); ++ if (evtime->tv_sec == 0 && evtime->tv_usec == 0) { ++ evtime->tv_sec = ev->input_event_sec; ++ evtime->tv_usec = ev->input_event_usec; ++ } ++ tv.tv_sec = ev->input_event_sec; ++ tv.tv_usec = ev->input_event_usec; ++ usec = time_to_long(&tv) - time_to_long(evtime); + if (usec > ERROR_MARGIN * 2) { + if (usec > s2us(10)) + error(INFO, "Sleeping for %lds.\n", us2s(usec)); + usleep(usec - ERROR_MARGIN); +- *evtime = ev->time; ++ *evtime = tv; + } + } + +-- +2.24.1 + diff --git a/package/evemu/0003-src-evemu.c-fix-build-with-kernels-4.16.patch b/package/evemu/0003-src-evemu.c-fix-build-with-kernels-4.16.patch new file mode 100644 index 00000000..55221aca --- /dev/null +++ b/package/evemu/0003-src-evemu.c-fix-build-with-kernels-4.16.patch @@ -0,0 +1,52 @@ +From fd204f628021c9bb13870a8c983d9c63e1a53ebb Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 23 Mar 2020 11:04:11 +0100 +Subject: [PATCH] src/evemu.c: fix build with kernels >= 4.16 + +Commit 30973c0b forgot to update all occurences of input_event, this +will result in the following build failure with kernel >= 4.16: + +evemu.c: In function 'write_event_desc': +evemu.c:753:23: error: 'const struct input_event' has no member named 'time'; did you mean 'type'? + time = millis(&ev->time); + ^~~~ + type + +Fixes: + - http://autobuild.buildroot.org/results/487dd5056ec0a977d55b23417d5db2664dcc91fa + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://gitlab.freedesktop.org/libevdev/evemu/-/commit/fd204f628021c9bb13870a8c983d9c63e1a53ebb] +--- + src/evemu.c | 7 +------ + 1 file changed, 1 insertion(+), 6 deletions(-) + +diff --git a/src/evemu.c b/src/evemu.c +index c7ff561..42dbe1d 100644 +--- a/src/evemu.c ++++ b/src/evemu.c +@@ -733,11 +733,6 @@ out: + return rc; + } + +-static inline unsigned long millis(const struct timeval *tv) +-{ +- return tv->tv_sec * 1000 + tv->tv_usec/1000; +-} +- + static int write_event_desc(FILE *fp, const struct input_event *ev) + { + int rc; +@@ -750,7 +745,7 @@ static int write_event_desc(FILE *fp, const struct input_event *ev) + libevdev_event_code_get_name(ev->type, ev->code), + ev->value); + } else { +- time = millis(&ev->time); ++ time = ev->input_event_sec * 1000 + ev->input_event_usec/1000; + dt = time - last_ms; + last_ms = time; + rc = fprintf(fp, "# ------------ %s (%d) ---------- %+ldms\n", +-- +2.24.1 + diff --git a/package/evemu/0004-src-evemu.c-fix-build-with-kernels-4.16.patch b/package/evemu/0004-src-evemu.c-fix-build-with-kernels-4.16.patch new file mode 100644 index 00000000..0ff3ee85 --- /dev/null +++ b/package/evemu/0004-src-evemu.c-fix-build-with-kernels-4.16.patch @@ -0,0 +1,47 @@ +From 1babf63444b7b7f3c84e2561fbdecd5fd5a0e36f Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Tue, 24 Mar 2020 09:06:29 +0100 +Subject: [PATCH] src/evemu.c: fix build with kernels < 4.16 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Commit 30973c0b fixed the build with kernels >= 4.16 but as a side +effect, build with kernels < 4.16 is now failing on: + +evemu.c:892:18: error: ‘struct input_event’ has no member named ‘input_event_usec’ + tv.tv_usec = ev->input_event_usec; + ^~ + +Fix this error by defining input_event_sec and input_event_usec if +needed + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://gitlab.freedesktop.org/libevdev/evemu/-/commit/1babf63444b7b7f3c84e2561fbdecd5fd5a0e36f] +--- + src/evemu.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/src/evemu.c b/src/evemu.c +index 42dbe1d..2f457c1 100644 +--- a/src/evemu.c ++++ b/src/evemu.c +@@ -63,6 +63,14 @@ + + #define SYSCALL(call) while (((call) == -1) && (errno == EINTR)) + ++#ifndef input_event_sec ++#define input_event_sec time.tv_sec ++#endif ++ ++#ifndef input_event_usec ++#define input_event_usec time.tv_usec ++#endif ++ + enum error_level { + INFO, + WARNING, +-- +2.24.1 + diff --git a/package/evemu/Config.in b/package/evemu/Config.in new file mode 100644 index 00000000..07b7174e --- /dev/null +++ b/package/evemu/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_EVEMU + bool "evemu" + select BR2_PACKAGE_LIBEVDEV + help + evemu records and replays device descriptions and events + + http://www.freedesktop.org/wiki/Evemu/ diff --git a/package/evemu/evemu.hash b/package/evemu/evemu.hash new file mode 100644 index 00000000..13dd4029 --- /dev/null +++ b/package/evemu/evemu.hash @@ -0,0 +1,4 @@ +# From https://lists.freedesktop.org/archives/input-tools/2017-September/001416.html +sha256 78c9400d55eeeb5ab75161360543f9376438c4da4934cb34cdda5b46021ae379 evemu-2.7.0.tar.xz +# locally computed +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 COPYING diff --git a/package/evemu/evemu.mk b/package/evemu/evemu.mk new file mode 100644 index 00000000..02e5abdb --- /dev/null +++ b/package/evemu/evemu.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# evemu +# +################################################################################ + +EVEMU_VERSION = 2.7.0 +EVEMU_SITE = http://www.freedesktop.org/software/evemu +EVEMU_SOURCE = evemu-$(EVEMU_VERSION).tar.xz +EVEMU_LICENSE = LGPL-3.0 (library), GPL-3.0 (tools) +EVEMU_LICENSE_FILES = COPYING + +# asciidoc used to generate manpages, which we don't need, and if it's +# present on the build host, it ends getting called with our host-python +# which doesn't have all the needed modules enabled, breaking the build +EVEMU_CONF_ENV = ac_cv_path_ASCIIDOC="" + +# disable tests generation because of C++ dependency +EVEMU_CONF_OPTS += --disable-tests + +# Uses PKG_CHECK_MODULES() in configure.ac +EVEMU_DEPENDENCIES = host-pkgconf libevdev + +# Check for target python +ifeq ($(BR2_PACKAGE_PYTHON)$(BR2_PACKAGE_PYTHON3),y) +EVEMU_CONF_OPTS += --enable-python-bindings +EVEMU_DEPENDENCIES += $(if $(BR2_PACKAGE_PYTHON3),python3,python) +else +EVEMU_CONF_OPTS += --disable-python-bindings +endif + +$(eval $(autotools-package)) diff --git a/package/evtest/0001-Add-missing-limits.h-include.patch b/package/evtest/0001-Add-missing-limits.h-include.patch new file mode 100644 index 00000000..6c7fc904 --- /dev/null +++ b/package/evtest/0001-Add-missing-limits.h-include.patch @@ -0,0 +1,38 @@ +From 7d7c5a81b0e2f3321d269b7acc450d1eec7a910b Mon Sep 17 00:00:00 2001 +From: Baruch Siach +Date: Sun, 18 Aug 2019 09:57:23 +0300 +Subject: [PATCH] Add missing limits.h include +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Fixes build with musl libc that does not include limits.h indirectly via +other headers. + +evtest.c: In function ‘scan_devices’: +evtest.c:886:14: error: ‘PATH_MAX’ undeclared (first use in this function); did you mean INT8_MAX’? + char fname[PATH_MAX]; + ^~~~~~~~ + +Signed-off-by: Baruch Siach +--- +Upstream status: sent to input-tools@lists.freedesktop.org (moderated) + + evtest.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/evtest.c b/evtest.c +index 37d4f8540333..548c203564d3 100644 +--- a/evtest.c ++++ b/evtest.c +@@ -56,6 +56,7 @@ + #include + #include + #include ++#include + #include + #include + #include +-- +2.23.0.rc1 + diff --git a/package/evtest/0002-Fix-build-on-32bit-arches-with-64bit-time_t.patch b/package/evtest/0002-Fix-build-on-32bit-arches-with-64bit-time_t.patch new file mode 100644 index 00000000..e39ccb64 --- /dev/null +++ b/package/evtest/0002-Fix-build-on-32bit-arches-with-64bit-time_t.patch @@ -0,0 +1,46 @@ +From 70c5dd9e858ed577a4bbe7ec8920934c89df08fc Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sat, 30 Nov 2019 11:58:58 -0800 +Subject: [PATCH] Fix build on 32bit arches with 64bit time_t + +time element is deprecated on new input_event structure in kernel's +input.h [1] + +[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit?id=152194fe9c3f + +Signed-off-by: Khem Raj +Signed-off-by: Baruch Siach +--- +Upstream status: commit 648f5c1a9e0 + + evtest.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/evtest.c b/evtest.c +index 548c203564d3..8d592f42bdca 100644 +--- a/evtest.c ++++ b/evtest.c +@@ -61,6 +61,11 @@ + #include + #include + ++#ifndef input_event_sec ++#define input_event_sec time.tv_sec ++#define input_event_usec time.tv_usec ++#endif ++ + #define BITS_PER_LONG (sizeof(long) * 8) + #define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1) + #define OFF(x) ((x)%BITS_PER_LONG) +@@ -1140,7 +1145,7 @@ static int print_events(int fd) + type = ev[i].type; + code = ev[i].code; + +- printf("Event: time %ld.%06ld, ", ev[i].time.tv_sec, ev[i].time.tv_usec); ++ printf("Event: time %ld.%06ld, ", ev[i].input_event_sec, ev[i].input_event_usec); + + if (type == EV_SYN) { + if (code == SYN_MT_REPORT) +-- +2.25.1 + diff --git a/package/evtest/Config.in b/package/evtest/Config.in new file mode 100644 index 00000000..e74bac02 --- /dev/null +++ b/package/evtest/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_EVTEST + bool "evtest" + help + evtest displays information on the input device specified on + the command line, including all the events supported by the + device. It then monitors the device and displays all the + events layer events generated. + + https://gitlab.freedesktop.org/libevdev/evtest diff --git a/package/evtest/evtest.hash b/package/evtest/evtest.hash new file mode 100644 index 00000000..b1ee2437 --- /dev/null +++ b/package/evtest/evtest.hash @@ -0,0 +1,5 @@ +# locally computed +sha256 0e7a2eeff380af796e5e9b21b6f48fd706c58c931162c151c2c1074bdfeb85c6 evtest-evtest-1.34.tar.gz + +# License files +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/evtest/evtest.mk b/package/evtest/evtest.mk new file mode 100644 index 00000000..8b8667e0 --- /dev/null +++ b/package/evtest/evtest.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# evtest +# +################################################################################ + +EVTEST_VERSION = 1.34 +EVTEST_SOURCE = evtest-evtest-$(EVTEST_VERSION).tar.gz +EVTEST_SITE = https://gitlab.freedesktop.org/libevdev/evtest/-/archive/evtest-$(EVTEST_VERSION) +EVTEST_LICENSE = GPL-2.0+ +EVTEST_LICENSE_FILES = COPYING +EVTEST_DEPENDENCIES = host-pkgconf +# needed because source package contains no generated files +EVTEST_AUTORECONF = YES + +# asciidoc used to generate manpages, which we don't need, and if it's +# present on the build host, it ends getting called with our host-python +# which doesn't have all the needed modules enabled, breaking the build +EVTEST_CONF_ENV = ac_cv_path_ASCIIDOC="" + +$(eval $(autotools-package)) diff --git a/package/execline/Config.in b/package/execline/Config.in new file mode 100644 index 00000000..7a2278fa --- /dev/null +++ b/package/execline/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_EXECLINE + bool "execline" + depends on BR2_USE_MMU # skalibs + select BR2_PACKAGE_SKALIBS + help + execline is a (non-interactive) scripting language, like sh; + but its syntax is quite different from a traditional shell + syntax. The execlineb program is meant to be used as an + interpreter for a text file; the other commands are + essentially useful inside an execlineb script. + + http://skarnet.org/software/execline/ diff --git a/package/execline/execline.hash b/package/execline/execline.hash new file mode 100644 index 00000000..ac6239e8 --- /dev/null +++ b/package/execline/execline.hash @@ -0,0 +1,3 @@ +# Locally generated +sha256 a24c76f097ff44fe50b63b89bcde5d6ba9a481aecddbe88ee01b0e5a7b314556 execline-2.6.1.0.tar.gz +sha256 5443ac67e8d74ac614ced7bc64211ce90ccedb7778a68bfe9e68a8b234c9503e COPYING diff --git a/package/execline/execline.mk b/package/execline/execline.mk new file mode 100644 index 00000000..e2423e95 --- /dev/null +++ b/package/execline/execline.mk @@ -0,0 +1,72 @@ +################################################################################ +# +# execline +# +################################################################################ + +EXECLINE_VERSION = 2.6.1.0 +EXECLINE_SITE = http://skarnet.org/software/execline +EXECLINE_LICENSE = ISC +EXECLINE_LICENSE_FILES = COPYING +EXECLINE_INSTALL_STAGING = YES +EXECLINE_DEPENDENCIES = skalibs + +EXECLINE_CONF_OPTS = \ + --prefix=/usr \ + --with-sysdeps=$(STAGING_DIR)/usr/lib/skalibs/sysdeps \ + --with-include=$(STAGING_DIR)/usr/include \ + --with-dynlib=$(STAGING_DIR)/usr/lib \ + --with-lib=$(STAGING_DIR)/usr/lib/skalibs \ + $(if $(BR2_STATIC_LIBS),,--disable-allstatic) \ + $(SHARED_STATIC_LIBS_OPTS) + +define EXECLINE_CONFIGURE_CMDS + (cd $(@D); $(TARGET_CONFIGURE_OPTS) ./configure $(EXECLINE_CONF_OPTS)) +endef + +define EXECLINE_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define EXECLINE_REMOVE_STATIC_LIB_DIR + rm -rf $(TARGET_DIR)/usr/lib/execline +endef + +EXECLINE_POST_INSTALL_TARGET_HOOKS += EXECLINE_REMOVE_STATIC_LIB_DIR + +define EXECLINE_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +define EXECLINE_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install +endef + +HOST_EXECLINE_DEPENDENCIES = host-skalibs + +# Set --shebangdir to /usr/bin, as this value is used by the host variant of +# s6-rc when generating execline scripts for the target. +HOST_EXECLINE_CONF_OPTS = \ + --prefix=$(HOST_DIR) \ + --shebangdir=/usr/bin \ + --with-sysdeps=$(HOST_DIR)/lib/skalibs/sysdeps \ + --with-include=$(HOST_DIR)/include \ + --with-dynlib=$(HOST_DIR)/lib \ + --disable-static \ + --enable-shared \ + --disable-allstatic + +define HOST_EXECLINE_CONFIGURE_CMDS + (cd $(@D); $(HOST_CONFIGURE_OPTS) ./configure $(HOST_EXECLINE_CONF_OPTS)) +endef + +define HOST_EXECLINE_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define HOST_EXECLINE_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) install +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/exempi/Config.in b/package/exempi/Config.in new file mode 100644 index 00000000..eba12a2a --- /dev/null +++ b/package/exempi/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_EXEMPI + bool "exempi" + depends on !BR2_STATIC_LIBS # dlfcn.h + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_WCHAR + select BR2_PACKAGE_EXPAT + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + select BR2_PACKAGE_ZLIB + help + Exempi is an implementation of XMP (Extensible Metadata + Platform). Version 2.x is based on Adobe XMP SDK. + + http://libopenraw.freedesktop.org/wiki/Exempi + +comment "exempi needs a toolchain w/ C++, dynamic library, threads, wchar" + depends on BR2_STATIC_LIBS || !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR diff --git a/package/exempi/exempi.hash b/package/exempi/exempi.hash new file mode 100644 index 00000000..5ea96830 --- /dev/null +++ b/package/exempi/exempi.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 52f54314aefd45945d47a6ecf4bd21f362e6467fa5d0538b0d45a06bc6eaaed5 exempi-2.5.2.tar.bz2 +sha256 3d3c3593c15e0d35bdae0df7c642106250f6be3adc61477419413900f23ae607 COPYING diff --git a/package/exempi/exempi.mk b/package/exempi/exempi.mk new file mode 100644 index 00000000..f481469d --- /dev/null +++ b/package/exempi/exempi.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# exempi +# +################################################################################ + +EXEMPI_VERSION = 2.5.2 +EXEMPI_SOURCE = exempi-$(EXEMPI_VERSION).tar.bz2 +EXEMPI_SITE = https://libopenraw.freedesktop.org/download +EXEMPI_INSTALL_STAGING = YES +EXEMPI_CONF_OPTS = --disable-unittest +EXEMPI_DEPENDENCIES = host-pkgconf expat zlib \ + $(if $(BR2_PACKAGE_LIBICONV),libiconv) +EXEMPI_LICENSE = BSD-3-Clause +EXEMPI_LICENSE_FILES = COPYING +EXEMPI_CPE_ID_VENDOR = exempi_project + +$(eval $(autotools-package)) diff --git a/package/exfat-utils/Config.in b/package/exfat-utils/Config.in new file mode 100644 index 00000000..4e8f167d --- /dev/null +++ b/package/exfat-utils/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_EXFAT_UTILS + bool "exfat-utils" + depends on BR2_USE_WCHAR + help + exFAT filesystem utilities. + + This is the set of user-space utilities that go together + with the FUSE-based exfat driver from package/exfat. + + If you're using the exfat driver from the official Linux + kernel (merged as of Linux 5.7), you must use the user-space + utilities from package/exfatprogs. + + https://github.com/relan/exfat + +comment "exfat-utils needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR diff --git a/package/exfat-utils/exfat-utils.hash b/package/exfat-utils/exfat-utils.hash new file mode 100644 index 00000000..53155d41 --- /dev/null +++ b/package/exfat-utils/exfat-utils.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 dfebd07a7b907e2d603d3a9626e6440bd43ec6c4e8c07ccfc57ce9502b724835 exfat-utils-1.3.0.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/exfat-utils/exfat-utils.mk b/package/exfat-utils/exfat-utils.mk new file mode 100644 index 00000000..d13ec6ba --- /dev/null +++ b/package/exfat-utils/exfat-utils.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# exfat-utils +# +################################################################################ + +EXFAT_UTILS_VERSION = 1.3.0 +EXFAT_UTILS_SITE = https://github.com/relan/exfat/releases/download/v$(EXFAT_UTILS_VERSION) +EXFAT_UTILS_LICENSE = GPL-2.0+ +EXFAT_UTILS_LICENSE_FILES = COPYING + +EXFAT_UTILS_CONF_OPTS += --exec-prefix=/ + +$(eval $(autotools-package)) diff --git a/package/exfat/Config.in b/package/exfat/Config.in new file mode 100644 index 00000000..c0b4eabe --- /dev/null +++ b/package/exfat/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_EXFAT + bool "exFAT (FUSE)" + depends on BR2_TOOLCHAIN_HAS_THREADS # libfuse + depends on BR2_USE_MMU # libfuse + depends on BR2_USE_WCHAR + depends on !BR2_STATIC_LIBS # libfuse + select BR2_PACKAGE_LIBFUSE + help + A full-featured exFAT file system implementation for GNU/Linux + and other Unix-like systems as a FUSE module. + + https://github.com/relan/exfat + +comment "exfat needs a toolchain w/ wchar, threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR || BR2_STATIC_LIBS diff --git a/package/exfat/exfat.hash b/package/exfat/exfat.hash new file mode 100644 index 00000000..4b8ce901 --- /dev/null +++ b/package/exfat/exfat.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 07652136064da5e4d32df5555f88c138ffa4835a23b88a5bae2015f21006e0d3 fuse-exfat-1.3.0.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/exfat/exfat.mk b/package/exfat/exfat.mk new file mode 100644 index 00000000..e2349515 --- /dev/null +++ b/package/exfat/exfat.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# exfat +# +################################################################################ + +EXFAT_VERSION = 1.3.0 +EXFAT_SITE = https://github.com/relan/exfat/releases/download/v$(EXFAT_VERSION) +EXFAT_SOURCE = fuse-exfat-$(EXFAT_VERSION).tar.gz +EXFAT_DEPENDENCIES = libfuse host-pkgconf +EXFAT_LICENSE = GPL-2.0+ +EXFAT_LICENSE_FILES = COPYING +EXFAT_CFLAGS = $(TARGET_CFLAGS) -std=c99 + +EXFAT_CONF_OPTS += --exec-prefix=/ + +$(eval $(autotools-package)) diff --git a/package/exfatprogs/Config.in b/package/exfatprogs/Config.in new file mode 100644 index 00000000..4f50427a --- /dev/null +++ b/package/exfatprogs/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_EXFATPROGS + bool "exfatprogs" + depends on BR2_USE_WCHAR + help + exFAT filesystem userspace utilities. + + This is the set of tools that works together with the exfat + driver in the official Linux kernel (merged in Linux 5.7). + + If you're using the FUSE-based exfat support (from + package/exfat), you must use the corresponding user-space + programs in package/exfat-utils. + + https://github.com/exfatprogs/exfatprogs + +comment "exfatprogs needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR diff --git a/package/exfatprogs/Config.in.host b/package/exfatprogs/Config.in.host new file mode 100644 index 00000000..d4a0b0c2 --- /dev/null +++ b/package/exfatprogs/Config.in.host @@ -0,0 +1,13 @@ +config BR2_PACKAGE_HOST_EXFATPROGS + bool "host exfatprogs" + help + exFAT filesystem userspace utilities + + This is the set of tools that works together with the exfat + driver in the official Linux kernel (merged in Linux 5.7). + + If you're using the FUSE-based exfat support (from + package/exfat), you must use the corresponding user-space + programs in package/exfat-utils. + + https://github.com/exfatprogs/exfatprogs diff --git a/package/exfatprogs/exfatprogs.hash b/package/exfatprogs/exfatprogs.hash new file mode 100644 index 00000000..d251bce5 --- /dev/null +++ b/package/exfatprogs/exfatprogs.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 982883f208a694962dff0654f4421a1a726d7d71068a0c84b93a10688179a186 exfatprogs-1.0.4.tar.gz +sha256 576540abf5e95029ad4ad90e32071385a5e95b2c30708c706116f3eb87b9a3de COPYING diff --git a/package/exfatprogs/exfatprogs.mk b/package/exfatprogs/exfatprogs.mk new file mode 100644 index 00000000..56db82cd --- /dev/null +++ b/package/exfatprogs/exfatprogs.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# exfatprogs +# +################################################################################ + +EXFATPROGS_VERSION = 1.0.4 +EXFATPROGS_SITE = https://github.com/exfatprogs/exfatprogs/releases/download/$(EXFATPROGS_VERSION) +EXFATPROGS_LICENSE = GPL-2.0+ +EXFATPROGS_LICENSE_FILES = COPYING +EXFATPROGS_DEPENDENCIES = host-pkgconf +HOST_EXFATPROGS_DEPENDENCIES = host-pkgconf + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/exim/0001-Build-buildconfig-for-the-host.patch b/package/exim/0001-Build-buildconfig-for-the-host.patch new file mode 100644 index 00000000..87eb5279 --- /dev/null +++ b/package/exim/0001-Build-buildconfig-for-the-host.patch @@ -0,0 +1,23 @@ +buildconfig is meant to be executed on the host, so it has to be compiled +using $(HOSTCC), not $(CC). + +Signed-off-by: Luca Ceresoli +--- + OS/Makefile-Base | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/OS/Makefile-Base b/OS/Makefile-Base +index 29a6ad3..420ba60 100644 +--- a/OS/Makefile-Base ++++ b/OS/Makefile-Base +@@ -114,8 +114,8 @@ allexim: config.h $(EXIM_MONITOR) exicyclog exinext exiwhat \ + + # Targets for special-purpose configuration header builders + buildconfig: buildconfig.c +- @echo "$(CC) buildconfig.c" +- $(FE)$(CC) $(CFLAGS) $(INCLUDE) -o buildconfig buildconfig.c $(LIBS) ++ @echo "$(HOSTCC) buildconfig.c" ++ $(FE)$(HOSTCC) $(HOSTCFLAGS) $(INCLUDE) -o buildconfig buildconfig.c + + + # Target for the exicyclog utility script diff --git a/package/exim/0002-Don-t-make-backup-copies-of-installed-files.patch b/package/exim/0002-Don-t-make-backup-copies-of-installed-files.patch new file mode 100644 index 00000000..0cdaa744 --- /dev/null +++ b/package/exim/0002-Don-t-make-backup-copies-of-installed-files.patch @@ -0,0 +1,40 @@ +If exim had already been installed, the install script makes backup +copies of the pre-existing executables with a ".0" suffix. + +This leads to useless duplicated files on the target, so disable this +piece of code. + +Signed-off-by: Luca Ceresoli +--- + scripts/exim_install | 18 +++++++++--------- + 1 files changed, 9 insertions(+), 9 deletions(-) + +diff --git a/scripts/exim_install b/scripts/exim_install +index 616ab3c..e68e7d5 100755 +--- a/scripts/exim_install ++++ b/scripts/exim_install +@@ -344,15 +344,15 @@ while [ $# -gt 0 ]; do + + else + if ../scripts/newer ${name} ${BIN_DIRECTORY}/${name}; then +- if [ -f ${BIN_DIRECTORY}/${name} ]; then +- echo ${CP} ${BIN_DIRECTORY}/${name} ${BIN_DIRECTORY}/${name}.O +- ${real} ${CP} ${BIN_DIRECTORY}/${name} ${BIN_DIRECTORY}/${name}.O +- if [ $? -ne 0 ]; then +- echo $com "" +- echo $com "*** Exim installation ${ver}failed ***" +- exit 1 +- fi +- fi ++# if [ -f ${BIN_DIRECTORY}/${name} ]; then ++# echo ${CP} ${BIN_DIRECTORY}/${name} ${BIN_DIRECTORY}/${name}.O ++# ${real} ${CP} ${BIN_DIRECTORY}/${name} ${BIN_DIRECTORY}/${name}.O ++# if [ $? -ne 0 ]; then ++# echo $com "" ++# echo $com "*** Exim installation ${ver}failed ***" ++# exit 1 ++# fi ++# fi + echo ${CP} ${name} ${BIN_DIRECTORY} + ${real} ${CP} ${name} ${BIN_DIRECTORY} + if [ $? -ne 0 ]; then diff --git a/package/exim/0003-Skip-version-check-and-symlink-installation.patch b/package/exim/0003-Skip-version-check-and-symlink-installation.patch new file mode 100644 index 00000000..a342d6ed --- /dev/null +++ b/package/exim/0003-Skip-version-check-and-symlink-installation.patch @@ -0,0 +1,41 @@ +The exim install script installs a binary named exim-, plus a symlink +to it named exim. +In order to achieve this "feature" (of dubious usefulness) it runs the +executable (on the host) and then filters its output to grab the version number. +This clearly cannot work if the executable is cross-compiled, so get rid of all +of it and just install an executable file called exim. + +Inspired by: +http://patch-tracker.debian.org/patch/series/view/exim4/4.76-2/35_install.dpatch + +Signed-off-by: Luca Ceresoli +(rebased against exim 4.89) +Signed-off-by: Bernd Kuhls +--- + scripts/exim_install | 7 +++++-- + 1 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/scripts/exim_install b/scripts/exim_install +index e68e7d5..487a4e1 100755 +--- a/scripts/exim_install ++++ b/scripts/exim_install +@@ -58,6 +58,8 @@ + shift + done + ++do_symlink=no ++ + # Get the values of BIN_DIRECTORY, CONFIGURE_FILE, INFO_DIRECTORY, NO_SYMLINK, + # SYSTEM_ALIASES_FILE, and EXE from the global Makefile (in the build + # directory). EXE is empty except in the Cygwin environment. In each case, keep +@@ -217,9 +219,7 @@ + # The exim binary is handled specially + + if [ $name = exim${EXE} ]; then +- exim="./exim -bV -C /dev/null" +- version=exim-`$exim 2>/dev/null | \ +- awk '/Exim version/ { OFS=""; print $3,"-",substr($4,2,length($4)-1) }'`${EXE} ++ version=exim + + if [ "${version}" = "exim-${EXE}" ]; then + echo $com "" diff --git a/package/exim/0004-Fix-uClibc-build.patch b/package/exim/0004-Fix-uClibc-build.patch new file mode 100644 index 00000000..9d5452bb --- /dev/null +++ b/package/exim/0004-Fix-uClibc-build.patch @@ -0,0 +1,35 @@ +From 68ea4fc7ca53bf010e5ec738ad078452f0eaa639 Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Tue, 23 Jul 2019 18:48:06 +0200 +Subject: [PATCH] Fix uClibc build +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +structs.h:757:18: error: ‘NS_MAXMSG’ undeclared here (not in a function); did you mean ‘N_MASC’? + uschar answer[NS_MAXMSG]; /* the answer itself */ + +Patch sent upstream: https://github.com/Exim/exim/pull/70 + +Signed-off-by: Bernd Kuhls +--- + OS/os.h-Linux | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/OS/os.h-Linux b/OS/os.h-Linux +index 63cf9babd..1d82e9bad 100644 +--- a/OS/os.h-Linux ++++ b/OS/os.h-Linux +@@ -87,5 +87,9 @@ then change the 0 to 1 in the next block. */ + # define TCPI_OPT_SYN_DATA 32 + #endif + ++/* Needed for uClibc */ ++#ifndef NS_MAXMSG ++# define NS_MAXMSG 65535 ++#endif + + /* End */ +-- +2.20.1 + diff --git a/package/exim/0005-exim_lock-fix-lstat-related-build-errors.patch b/package/exim/0005-exim_lock-fix-lstat-related-build-errors.patch new file mode 100644 index 00000000..a0a279fc --- /dev/null +++ b/package/exim/0005-exim_lock-fix-lstat-related-build-errors.patch @@ -0,0 +1,51 @@ +From bbcf4320134efd8a01ce5a02bb9af62019ca05f6 Mon Sep 17 00:00:00 2001 +From: Luca Ceresoli +Date: Tue, 4 Feb 2020 15:57:48 +0100 +Subject: [PATCH] exim_lock: fix lstat-related build errors + +exim_lock fails to cross-compile with the Sourcery CodeBench ARM 2014.05 +toolchain due the a missing include of sys/types.h, needed for the +constants used by fstat() and lstat(). + +Discovered when cross-compiling with the Buildroot embedded Linux +buildsystem. + +Fixes: + + exim_lock.c:427:30: error: 'S_IFMT' undeclared (first use in this function) + if ((statbuf.st_mode & S_IFMT) == S_IFLNK) + ^ + exim_lock.c:427:30: note: each undeclared identifier is reported only once for each function it appears in + exim_lock.c:427:41: error: 'S_IFLNK' undeclared (first use in this function) + if ((statbuf.st_mode & S_IFMT) == S_IFLNK) + ^ + +Signed-off-by: Luca Ceresoli +Upstream-status: https://bugs.exim.org/show_bug.cgi?id=2523 +--- + src/exim_lock.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/exim_lock.c b/src/exim_lock.c +index 068216816054..cb140aff6436 100644 +--- a/src/exim_lock.c ++++ b/src/exim_lock.c +@@ -13,6 +13,8 @@ Argument: the name of the lock file + Copyright (c) The Exim Maintainers 2016 + */ + ++#define _XOPEN_SOURCE ++ + #include "os.h" + + #include +@@ -26,6 +28,7 @@ Copyright (c) The Exim Maintainers 2016 + #include + #include + #include ++#include + #include + #include + #include +-- +2.25.0 diff --git a/package/exim/0006-sieve-fix-build-errors.patch b/package/exim/0006-sieve-fix-build-errors.patch new file mode 100644 index 00000000..f4b95d50 --- /dev/null +++ b/package/exim/0006-sieve-fix-build-errors.patch @@ -0,0 +1,42 @@ +From e9d0b5b022df172d3615e9e2875506c74e6d7cd1 Mon Sep 17 00:00:00 2001 +From: Luca Ceresoli +Date: Wed, 5 Feb 2020 17:13:57 +0100 +Subject: [PATCH] sieve: fix build errors + +sieve fails to cross-compile with the Sourcery CodeBench ARM 2014.05 +toolchain with a huge number of errors, including: + + .../sysroot/usr/include/arpa/nameser.h:115:2: error: unknown type name 'u_char' + const u_char *_msg, *_eom; + ^ + .../sysroot/usr/include/arpa/nameser.h:474:1: error: unknown type name 'u_long' + u_long ns_get32 (const u_char *) __THROW; + ^ + .../sysroot/usr/include/arpa/nameser.h:475:31: error: expected ')' before '*' token + void ns_put16 (u_int, u_char *) __THROW; + ^ + +Discovered when cross-compiling with the Buildroot embedded Linux +buildsystem. + +Signed-off-by: Luca Ceresoli +Upstream-status: https://bugs.exim.org/show_bug.cgi?id=2523 +--- + src/sieve.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/sieve.c b/src/sieve.c +index 5e8d1e6f4776..9632f2d43810 100644 +--- a/src/sieve.c ++++ b/src/sieve.c +@@ -12,6 +12,8 @@ + + /* Sieve mail filter. */ + ++#define _BSD_SOURCE ++ + #include + #include + #include +-- +2.25.0 diff --git a/package/exim/Config.in b/package/exim/Config.in new file mode 100644 index 00000000..aa50a867 --- /dev/null +++ b/package/exim/Config.in @@ -0,0 +1,36 @@ +comment "exim needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_EXIM + bool "exim" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_PCRE + select BR2_PACKAGE_BERKELEYDB + help + Exim is a message transfer agent (MTA) developed at the + University of Cambridge for use on Unix systems connected to + the Internet. + + http://www.exim.org/ + +if BR2_PACKAGE_EXIM + +config BR2_PACKAGE_EXIM_CUSTOM_CONFIG_FILE + string "Custom configuration file" + help + By default, when this option is left empty, Buildroot + generates a configuration file for exim with reasonable + settings. + + If you want to override the configuration file generated by + Buildroot with a customized file, set here the path to your + configuration file with this option. + + This file shall comply with the syntax defined in the exim + documentation (http://www.exim.org/docs.html). + Buildroot will generate a configuration file composed of the + content of the file you provide plus the toolchain-related + settings needed for cross-compilation. + +endif diff --git a/package/exim/S86exim b/package/exim/S86exim new file mode 100644 index 00000000..0d09361f --- /dev/null +++ b/package/exim/S86exim @@ -0,0 +1,34 @@ +#!/bin/sh +# +# Start/stop exim +# + +PIDFILE=/var/run/exim/exim.pid + +case "$1" in + start) + echo "Starting exim..." + if [ ! -d /var/log/exim ]; then + mkdir -p /var/log/exim + chown exim:mail /var/log/exim + fi + if [ ! -d /var/run/exim ]; then + mkdir -p /var/run/exim + chown root:mail /var/run/exim + fi + start-stop-daemon -S -x exim -- -bd + ;; + stop) + printf "Stopping exim..." + start-stop-daemon -K -o -p $PIDFILE + ;; + restart|reload) + "$0" stop + "$0" start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/exim/exim.hash b/package/exim/exim.hash new file mode 100644 index 00000000..201f09eb --- /dev/null +++ b/package/exim/exim.hash @@ -0,0 +1,6 @@ +# From https://ftp.exim.org/pub/exim/exim4/00-sha256sums.txt +sha256 051861fc89f06205162f12129fb7ebfe473383bb6194bf8642952bfd50329274 exim-4.94.2.tar.xz +# From https://ftp.exim.org/pub/exim/exim4/00-sha512sums.txt +sha512 5334c236221ed4e03dbc33e6a79d939b06037fa2f4b71971607a360b67af5c85a89681ee13a5eeaf0184382c55a160cf2e89ed7afb2949f025a54f1e88f9e3fc exim-4.94.2.tar.xz +# Locally calculated +sha256 49240db527b7e55b312a46fc59794fde5dd006422e422257f4f057bfd27b3c8f LICENCE diff --git a/package/exim/exim.mk b/package/exim/exim.mk new file mode 100644 index 00000000..dd392084 --- /dev/null +++ b/package/exim/exim.mk @@ -0,0 +1,159 @@ +################################################################################ +# +# exim +# +################################################################################ + +EXIM_VERSION = 4.94.2 +EXIM_SOURCE = exim-$(EXIM_VERSION).tar.xz +EXIM_SITE = https://ftp.exim.org/pub/exim/exim4 +EXIM_LICENSE = GPL-2.0+ +EXIM_LICENSE_FILES = LICENCE +EXIM_CPE_ID_VENDOR = exim +EXIM_DEPENDENCIES = host-berkeleydb host-pcre pcre berkeleydb host-pkgconf + +# Modify a variable value. It must already exist in the file, either +# commented or not. +define exim-config-change # variable-name, variable-value + $(SED) 's,^[#[:space:]]*$1[[:space:]]*=.*$$,$1=$2,' \ + $(@D)/Local/Makefile +endef + +# Comment-out a variable. Has no effect if it does not exits. +define exim-config-unset # variable-name + $(SED) 's,^\([[:space:]]*$1[[:space:]]*=.*$$\),# \1,' \ + $(@D)/Local/Makefile +endef + +# Add a variable definition. It must not already exist in the file, +# otherwise it would be defined twice with potentially different values. +define exim-config-add # variable-name, variable-value + echo "$1=$2" >>$(@D)/Local/Makefile +endef + +define EXIM_USE_CUSTOM_CONFIG_FILE + $(INSTALL) -m 0644 $(BR2_PACKAGE_EXIM_CUSTOM_CONFIG_FILE) \ + $(@D)/Local/Makefile +endef + +define EXIM_USE_DEFAULT_CONFIG_FILE + $(INSTALL) -m 0644 $(@D)/src/EDITME $(@D)/Local/Makefile + $(call exim-config-change,BIN_DIRECTORY,/usr/sbin) + $(call exim-config-change,CONFIGURE_FILE,/etc/exim/configure) + $(call exim-config-change,LOG_FILE_PATH,/var/log/exim/exim_%slog) + $(call exim-config-change,PID_FILE_PATH,/var/run/exim/exim.pid) + $(call exim-config-change,EXIM_USER,ref:exim) + $(call exim-config-change,EXIM_GROUP,mail) + $(call exim-config-change,TRANSPORT_LMTP,yes) + $(call exim-config-change,PCRE_LIBS,-lpcre) + $(call exim-config-change,PCRE_CONFIG,no) + $(call exim-config-change,HAVE_ICONV,no) + $(call exim-config-unset,EXIM_MONITOR) + $(call exim-config-change,AUTH_PLAINTEXT,yes) + $(call exim-config-change,AUTH_CRAM_MD5,yes) + $(call exim-config-unset,SUPPORT_DANE) +endef + +ifeq ($(BR2_PACKAGE_DOVECOT),y) +EXIM_DEPENDENCIES += dovecot +define EXIM_USE_DEFAULT_CONFIG_FILE_DOVECOT + $(call exim-config-change,AUTH_DOVECOT,yes) +endef +endif + +ifeq ($(BR2_PACKAGE_CLAMAV),y) +EXIM_DEPENDENCIES += clamav +define EXIM_USE_DEFAULT_CONFIG_FILE_CLAMAV + $(call exim-config-change,WITH_CONTENT_SCAN,yes) +endef +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +EXIM_DEPENDENCIES += host-openssl openssl +define EXIM_USE_DEFAULT_CONFIG_FILE_OPENSSL + $(call exim-config-change,USE_OPENSSL,yes) + $(call exim-config-change,USE_OPENSSL_PC,openssl) +endef +else +define EXIM_USE_DEFAULT_CONFIG_FILE_OPENSSL + $(call exim-config-change,DISABLE_TLS,yes) +endef +endif + +# musl does not provide struct ip_options nor struct ip_opts (but it is +# available with both glibc and uClibc) +ifeq ($(BR2_TOOLCHAIN_USES_MUSL),y) +define EXIM_FIX_IP_OPTIONS_FOR_MUSL + $(SED) 's/#define GLIBC_IP_OPTIONS/#define DARWIN_IP_OPTIONS/' \ + $(@D)/OS/os.h-Linux +endef +endif + +define EXIM_CONFIGURE_TOOLCHAIN + $(call exim-config-add,CC,$(TARGET_CC)) + $(call exim-config-add,CFLAGS,$(TARGET_CFLAGS)) + $(call exim-config-add,AR,$(TARGET_AR) cq) + $(call exim-config-add,RANLIB,$(TARGET_RANLIB)) + $(call exim-config-add,HOSTCC,$(HOSTCC)) + $(call exim-config-add,HOSTCFLAGS,$(HOSTCFLAGS)) + $(EXIM_FIX_IP_OPTIONS_FOR_MUSL) +endef + +ifneq ($(call qstrip,$(BR2_PACKAGE_EXIM_CUSTOM_CONFIG_FILE)),) +define EXIM_CONFIGURE_CMDS + $(EXIM_USE_CUSTOM_CONFIG_FILE) + $(EXIM_CONFIGURE_TOOLCHAIN) +endef +else # CUSTOM_CONFIG +define EXIM_CONFIGURE_CMDS + $(EXIM_USE_DEFAULT_CONFIG_FILE) + $(EXIM_USE_DEFAULT_CONFIG_FILE_DOVECOT) + $(EXIM_USE_DEFAULT_CONFIG_FILE_CLAMAV) + $(EXIM_USE_DEFAULT_CONFIG_FILE_OPENSSL) + $(EXIM_CONFIGURE_TOOLCHAIN) +endef +endif # CUSTOM_CONFIG + +# exim needs a bit of love to build statically +ifeq ($(BR2_STATIC_LIBS),y) +EXIM_STATIC_FLAGS = LFLAGS="-pthread --static" +endif + +# We need the host version of macro_predef during the build, before +# building it we need to prepare the makefile. +define EXIM_BUILD_CMDS + $(TARGET_MAKE_ENV) build=br $(MAKE) -C $(@D) makefile + $(HOST_MAKE_ENV) $(MAKE) -C $(@D)/build-br macro_predef \ + CC="$(HOSTCC)" \ + LNCC="$(HOSTCC)" \ + CFLAGS="-std=c99 $(HOST_CFLAGS)" \ + LFLAGS="-fPIC $(HOST_LDFLAGS)" + $(TARGET_MAKE_ENV) build=br $(MAKE) -C $(@D) $(EXIM_STATIC_FLAGS) \ + CFLAGS="-std=c99 $(TARGET_CFLAGS)" +endef + +# Need to replicate the LFLAGS in install, as exim still wants to build +# something when installing... +define EXIM_INSTALL_TARGET_CMDS + DESTDIR=$(TARGET_DIR) INSTALL_ARG="-no_chown -no_symlink" build=br \ + $(MAKE) -C $(@D) $(EXIM_STATIC_FLAGS) \ + CFLAGS="-std=c99 $(TARGET_CFLAGS)" \ + install + chmod u+s $(TARGET_DIR)/usr/sbin/exim +endef + +define EXIM_USERS + exim 88 mail 8 * - - - exim +endef + +define EXIM_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 package/exim/S86exim \ + $(TARGET_DIR)/etc/init.d/S86exim +endef + +define EXIM_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/exim/exim.service \ + $(TARGET_DIR)/usr/lib/systemd/system/exim.service +endef + +$(eval $(generic-package)) diff --git a/package/exim/exim.service b/package/exim/exim.service new file mode 100644 index 00000000..ac3f067d --- /dev/null +++ b/package/exim/exim.service @@ -0,0 +1,14 @@ +[Unit] +Description=Exim MTA +After=syslog.target network.target + +[Service] +User=exim +Group=mail +LogsDirectory=exim +RuntimeDirectory=exim +ExecStart=/usr/sbin/exim -bdf +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/package/exiv2/0001-add-BUILD_WITH_STACK_PROTECTOR-option.patch b/package/exiv2/0001-add-BUILD_WITH_STACK_PROTECTOR-option.patch new file mode 100644 index 00000000..18684ebb --- /dev/null +++ b/package/exiv2/0001-add-BUILD_WITH_STACK_PROTECTOR-option.patch @@ -0,0 +1,54 @@ +From 4bb57da5fb0bb0d7e747b9e325e9ec0876ffc1f9 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 31 Jul 2021 16:36:50 +0200 +Subject: [PATCH] add BUILD_WITH_STACK_PROTECTOR option + +Add BUILD_WITH_STACK_PROTECTOR to avoid the following build failure with +toolchains that don't support stack-protector: + +/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/mipsel-buildroot-linux-uclibc/9.3.0/../../../../mipsel-buildroot-linux-uclibc/bin/ld: utils.cpp:(.text._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPcEEvT_S7_St20forward_iterator_tag[_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPcEEvT_S7_St20forward_iterator_tag]+0xd0): undefined reference to `__stack_chk_fail' + +Indeed, support for -fstack-protector-strong can't be detected through +check_cxx_compiler_flag as some toolchains need to link with -lssp to +enable SSP support + +Fixes: + - http://autobuild.buildroot.org/results/ae4635899124c602c70d2b342a76f95c34aa4a3d + +Upstream: https://github.com/Exiv2/exiv2/commit/f31c0eba098889899d29b7b0da830aee2b62a7b8 +Signed-off-by: Fabrice Fontaine +--- + CMakeLists.txt | 1 + + cmake/compilerFlags.cmake | 4 ++-- + 2 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 6f0da06a..0746ee14 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -47,6 +47,7 @@ mark_as_advanced( + EXIV2_TEAM_USE_SANITIZERS + ) + ++option( BUILD_WITH_STACK_PROTECTOR "Build with stack protector" ON ) + option( BUILD_WITH_CCACHE "Use ccache to speed up compilations" OFF ) + option( BUILD_WITH_COVERAGE "Add compiler flags to generate coverage stats" OFF ) + +diff --git a/cmake/compilerFlags.cmake b/cmake/compilerFlags.cmake +index 35faf501..0a646e50 100644 +--- a/cmake/compilerFlags.cmake ++++ b/cmake/compilerFlags.cmake +@@ -33,8 +33,8 @@ if ( MINGW OR UNIX OR MSYS ) # MINGW, Linux, APPLE, CYGWIN + endif() + if(HAS_FCF_PROTECTION) + add_compile_options(-fcf-protection) +- endif() +- if(HAS_FSTACK_PROTECTOR_STRONG) ++ endif() ++ if(BUILD_WITH_STACK_PROTECTOR AND HAS_FSTACK_PROTECTOR_STRONG) + add_compile_options(-fstack-protector-strong) + endif() + endif() +-- +2.31.1 + diff --git a/package/exiv2/Config.in b/package/exiv2/Config.in new file mode 100644 index 00000000..3e3e5027 --- /dev/null +++ b/package/exiv2/Config.in @@ -0,0 +1,44 @@ +comment "exiv2 needs a uClibc or glibc toolchain w/ C++, wchar, dynamic library, threads" + depends on BR2_STATIC_LIBS || !BR2_INSTALL_LIBSTDCPP \ + || !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS \ + || BR2_TOOLCHAIN_USES_MUSL + +config BR2_PACKAGE_EXIV2 + bool "exiv2" + depends on !BR2_STATIC_LIBS + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_TOOLCHAIN_USES_MUSL # PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP + depends on BR2_USE_WCHAR + help + Exiv2 is a C++ library and a command line utility to manage + image metadata. It provides fast and easy read and write + access to the Exif, IPTC and XMP metadata of images in + various formats. + + http://www.exiv2.org/ + +if BR2_PACKAGE_EXIV2 + +config BR2_PACKAGE_EXIV2_PNG + bool "PNG image support" + select BR2_PACKAGE_ZLIB + help + Build with PNG image support + +config BR2_PACKAGE_EXIV2_XMP + bool "XMP support" + select BR2_PACKAGE_EXPAT + help + Build with XMP support + +config BR2_PACKAGE_EXIV2_LENSDATA + bool "Nikon lens name database" + help + Integrate Nikon lens name database. + + This database comes from a thirdparty and is free to use in + non-commercial, GPL or open source software only. + For more informations src/nikonmn_int.cpp. + +endif diff --git a/package/exiv2/exiv2.hash b/package/exiv2/exiv2.hash new file mode 100644 index 00000000..c9af674a --- /dev/null +++ b/package/exiv2/exiv2.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 84366dba7c162af9a7603bcd6c16f40fe0e9af294ba2fd2f66ffffb9fbec904e exiv2-0.27.4-Source.tar.gz +sha256 a7ba75cb966aca374711e2af49e5f3aea6a4443a803440f5d93e73a5a1222f66 COPYING diff --git a/package/exiv2/exiv2.mk b/package/exiv2/exiv2.mk new file mode 100644 index 00000000..33222e63 --- /dev/null +++ b/package/exiv2/exiv2.mk @@ -0,0 +1,47 @@ +################################################################################ +# +# exiv2 +# +################################################################################ + +EXIV2_VERSION = 0.27.4 +EXIV2_SOURCE = exiv2-$(EXIV2_VERSION)-Source.tar.gz +EXIV2_SITE = https://exiv2.org/builds +EXIV2_INSTALL_STAGING = YES +EXIV2_LICENSE = GPL-2.0+ +EXIV2_LICENSE_FILES = COPYING +EXIV2_CPE_ID_VENDOR = exiv2 + +EXIV2_CONF_OPTS += \ + -DBUILD_WITH_STACK_PROTECTOR=OFF \ + -DEXIV2_BUILD_SAMPLES=OFF + +ifeq ($(BR2_PACKAGE_EXIV2_LENSDATA),y) +EXIV2_CONF_OPTS += -DEXIV2_ENABLE_LENSDATA=ON +else +EXIV2_CONF_OPTS += -DEXIV2_ENABLE_LENSDATA=OFF +endif + +ifeq ($(BR2_PACKAGE_EXIV2_PNG),y) +EXIV2_CONF_OPTS += -DEXIV2_ENABLE_PNG=ON +EXIV2_DEPENDENCIES += zlib +else +EXIV2_CONF_OPTS += -DEXIV2_ENABLE_PNG=OFF +endif + +ifeq ($(BR2_PACKAGE_EXIV2_XMP),y) +EXIV2_CONF_OPTS += -DEXIV2_ENABLE_XMP=ON +EXIV2_DEPENDENCIES += expat +else +EXIV2_CONF_OPTS += -DEXIV2_ENABLE_XMP=OFF +endif + +EXIV2_DEPENDENCIES += $(TARGET_NLS_DEPENDENCIES) + +ifeq ($(BR2_SYSTEM_ENABLE_NLS),y) +EXIV2_CONF_OPTS += -DEXIV2_ENABLE_NLS=ON +else +EXIV2_CONF_OPTS += -DEXIV2_ENABLE_NLS=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/expat/Config.in b/package/expat/Config.in new file mode 100644 index 00000000..758fb7d5 --- /dev/null +++ b/package/expat/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_EXPAT + bool "expat" + help + The Expat XML Parser. + + http://expat.sourceforge.net diff --git a/package/expat/expat.hash b/package/expat/expat.hash new file mode 100644 index 00000000..8cf563d8 --- /dev/null +++ b/package/expat/expat.hash @@ -0,0 +1,7 @@ +# From https://sourceforge.net/projects/expat/files/expat/2.4.1/ +md5 a4fb91a9441bcaec576d4c4a56fa3aa6 expat-2.4.1.tar.xz +sha1 7988e4df355162500f09837aa95cbb48e6754420 expat-2.4.1.tar.xz + +# Locally calculated +sha256 cf032d0dba9b928636548e32b327a2d66b1aab63c4f4a13dd132c2d1d2f2fb6a expat-2.4.1.tar.xz +sha256 8c6b5b6de8fae20b317f4992729abc0e520bfba4c7606cd1e9eeb87418eebdec COPYING diff --git a/package/expat/expat.mk b/package/expat/expat.mk new file mode 100644 index 00000000..bb1cfd8c --- /dev/null +++ b/package/expat/expat.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# expat +# +################################################################################ + +EXPAT_VERSION = 2.4.1 +EXPAT_SITE = http://downloads.sourceforge.net/project/expat/expat/$(EXPAT_VERSION) +EXPAT_SOURCE = expat-$(EXPAT_VERSION).tar.xz +EXPAT_INSTALL_STAGING = YES +EXPAT_DEPENDENCIES = host-pkgconf +HOST_EXPAT_DEPENDENCIES = host-pkgconf +EXPAT_LICENSE = MIT +EXPAT_LICENSE_FILES = COPYING +EXPAT_CPE_ID_VENDOR = libexpat_project +EXPAT_CPE_ID_PRODUCT = libexpat + +EXPAT_CONF_OPTS = --without-docbook +HOST_EXPAT_CONF_OPTS = --without-docbook + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/expect/0001-enable-cross-compilation.patch b/package/expect/0001-enable-cross-compilation.patch new file mode 100644 index 00000000..fd31a01f --- /dev/null +++ b/package/expect/0001-enable-cross-compilation.patch @@ -0,0 +1,120 @@ +From: Andrew Ruder +Subject: [PATCH] enable cross compilation for expect + +This patch was created by running ./configure on a modern Linux machine +and inserting the results into the cross compilation section of +each AC_MSG_CHECKING that bombed out with an error. + +Signed-off-by: Andrew Ruder +--- + +Index: expect-5.45/configure.in +=================================================================== +--- expect-5.45.orig/configure.in 2013-11-14 07:59:58.732100595 -0600 ++++ expect-5.45/configure.in 2013-11-14 07:59:58.732100595 -0600 +@@ -481,7 +481,7 @@ + , + AC_MSG_RESULT(no) + , +- AC_MSG_ERROR([Expect can't be cross compiled]) ++ AC_MSG_RESULT(no) + ) + + AC_MSG_CHECKING([if any value exists for WNOHANG]) +@@ -506,7 +506,8 @@ + AC_MSG_RESULT(no) + AC_DEFINE(WNOHANG_BACKUP_VALUE, 1) + , +- AC_MSG_ERROR([Expect can't be cross compiled]) ++ AC_MSG_RESULT(yes) ++ AC_DEFINE(WNOHANG_BACKUP_VALUE, 1) + ) + + # +@@ -574,7 +575,7 @@ + AC_DEFINE(REARM_SIG) + , + AC_MSG_RESULT(no) +-, AC_MSG_WARN([Expect can't be cross compiled]) ++, AC_MSG_RESULT(no) + ) + + # HPUX7 has trouble with the big cat so split it +@@ -725,7 +726,7 @@ + , + AC_MSG_RESULT(no) + , +- AC_MSG_ERROR([Expect can't be cross compiled]) ++ AC_MSG_RESULT(no) + ) + + # mach systems have include files for unimplemented features +@@ -749,7 +750,9 @@ + , + AC_MSG_RESULT(no) + , +- AC_MSG_ERROR([Expect can't be cross compiled]) ++ AC_DEFINE(HAVE_TERMIO) ++ PTY_TYPE=termios ++ AC_MSG_RESULT(yes) + ) + + # now check for the new style ttys (not yet posix) +@@ -771,7 +774,9 @@ + , + AC_MSG_RESULT(no) + , +- AC_MSG_ERROR([Expect can't be cross compiled]) ++ AC_DEFINE(HAVE_TERMIOS) ++ PTY_TYPE=termios ++ AC_MSG_RESULT(yes) + ) + fi + +@@ -794,7 +799,7 @@ + , + AC_MSG_RESULT(no) + , +- AC_MSG_ERROR([Expect can't be cross compiled]) ++ AC_MSG_RESULT(no) + ) + + AC_MSG_CHECKING([if TIOCGWINSZ in termios.h]) +@@ -816,7 +821,7 @@ + , + AC_MSG_RESULT(no) + , +- AC_MSG_ERROR([Expect can't be cross compiled]) ++ AC_MSG_RESULT(no) + ) + + # finally check for Cray style ttys +@@ -837,7 +842,7 @@ + , + AC_MSG_RESULT(no) + , +- AC_MSG_ERROR([Expect can't be cross compiled]) ++ AC_MSG_RESULT(no) + ) + + # +@@ -869,7 +874,9 @@ + AC_HAVE_FUNCS(getpty) + + # following test sets SETPGRP_VOID if setpgrp takes 0 args, else takes 2 +-AC_FUNC_SETPGRP ++cat >>expect_cf.h <<\_ACEOF ++#define SETPGRP_VOID 1 ++_ACEOF + + # + # check for timezones +@@ -889,7 +896,7 @@ + AC_MSG_RESULT(yes), + AC_MSG_RESULT(no) + , +- AC_MSG_ERROR([Expect can't be cross compiled]) ++ AC_MSG_RESULT(yes) + ) + + diff --git a/package/expect/0002-allow-tcl-build-directory.patch b/package/expect/0002-allow-tcl-build-directory.patch new file mode 100644 index 00000000..83ede7ac --- /dev/null +++ b/package/expect/0002-allow-tcl-build-directory.patch @@ -0,0 +1,34 @@ +From: Andrew Ruder +Subject: [PATCH] Allow tcl build directory for linking + +Some small changes to use TCL_BUILD_LIB_SPEC instead of TCL_LIB_SPEC for +linking against tcl directly out of its build directory. + +Signed-off-by: Andrew Ruder +--- + +Index: expect-5.45/Makefile.in +=================================================================== +--- expect-5.45.orig/Makefile.in 2013-11-14 07:59:58.732100595 -0600 ++++ expect-5.45/Makefile.in 2013-11-14 07:59:58.732100595 -0600 +@@ -393,7 +393,7 @@ + @LDFLAGS_DEFAULT@ \ + -o expect exp_main_exp.o \ + @EXP_BUILD_LIB_SPEC@ \ +- @TCL_LIB_SPEC@ \ ++ @TCL_BUILD_LIB_SPEC@ \ + @TCL_DL_LIBS@ @PKG_LIBS@ @MATH_LIBS@ \ + @TCL_CC_SEARCH_FLAGS@ \ + @EXP_CC_SEARCH_FLAGS@ +Index: expect-5.45/tclconfig/tcl.m4 +=================================================================== +--- expect-5.45.orig/tclconfig/tcl.m4 2010-11-09 13:42:10.000000000 -0600 ++++ expect-5.45/tclconfig/tcl.m4 2013-11-14 08:02:08.424100580 -0600 +@@ -412,6 +412,7 @@ + AC_SUBST(TCL_LIB_FILE) + AC_SUBST(TCL_LIB_FLAG) + AC_SUBST(TCL_LIB_SPEC) ++ AC_SUBST(TCL_BUILD_LIB_SPEC) + + AC_SUBST(TCL_STUB_LIB_FILE) + AC_SUBST(TCL_STUB_LIB_FLAG) diff --git a/package/expect/Config.in b/package/expect/Config.in new file mode 100644 index 00000000..5557f4ae --- /dev/null +++ b/package/expect/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_EXPECT + bool "expect" + help + Expect is a tool for automating interactive applications + such as telnet, ftp, passwd, fsck, rlogin, ssh, tip, etc. + + http://expect.sourceforge.net/ diff --git a/package/expect/expect.hash b/package/expect/expect.hash new file mode 100644 index 00000000..c4815abb --- /dev/null +++ b/package/expect/expect.hash @@ -0,0 +1,4 @@ +# From https://sourceforge.net/projects/expect/files/Expect/5.45.4/expect5.45.4.tar.gz.SHA256 +sha256 49a7da83b0bdd9f46d04a04deec19c7767bb9a323e40c4781f89caf760b92c34 expect5.45.4.tar.gz +# Locally calculated +sha256 b2415b17dc8d9a287f4509047ef5ac3436baef7ba7c50faef5222dcdf61a2bab README diff --git a/package/expect/expect.mk b/package/expect/expect.mk new file mode 100644 index 00000000..37b4ce70 --- /dev/null +++ b/package/expect/expect.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# expect +# +################################################################################ + +EXPECT_VERSION = 5.45.4 +EXPECT_SITE = https://sourceforge.net/projects/expect/files/Expect/$(EXPECT_VERSION) +EXPECT_SOURCE = expect$(EXPECT_VERSION).tar.gz +EXPECT_LICENSE = Public domain +EXPECT_LICENSE_FILES = README + +# 0001-enable-cross-compilation.patch +EXPECT_AUTORECONF = YES +EXPECT_DEPENDENCIES = tcl +EXPECT_CONF_OPTS = --with-tcl=$(BUILD_DIR)/tcl-$(TCL_VERSION)/unix + +# Since we don't want examples installed +EXPECT_INSTALL_TARGET_OPTS = DESTDIR=$(TARGET_DIR) install-binaries + +$(eval $(autotools-package)) diff --git a/package/explorercanvas/Config.in b/package/explorercanvas/Config.in new file mode 100644 index 00000000..9714a580 --- /dev/null +++ b/package/explorercanvas/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_EXPLORERCANVAS + bool "explorercanvas" + help + Modern browsers like Firefox, Safari, Chrome and Opera + support the HTML5 canvas tag to allow 2D command-based + drawing. ExplorerCanvas brings the same functionality to + Internet Explorer ( +Date: Mon, 14 Sep 2015 22:25:12 +0200 +Subject: [PATCH] sha2.c: explicitly include endian.h for BYTE_ORDER macro + +Fixes a build issue with the musl C library, which doesn't indirectly +include endian.h from any of the included system headers: + +http://autobuild.buildroot.net/results/17b/17bde543db253c008079b04c5e341f804160f59c/build-end.log + +Upstream-Status: submitted (https://github.com/ffainelli/faifa/pull/12) + +Signed-off-by: Peter Korsgaard +--- + sha2.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/sha2.c b/sha2.c +index f2f5132..4c8a72d 100644 +--- a/sha2.c ++++ b/sha2.c +@@ -40,6 +40,7 @@ + #include + #include + ++#include "endian.h" + #include "sha2.h" + + /* +-- +2.1.4 + diff --git a/package/faifa/0002-hpav_cfg.c-do-not-include-linux-if_ether.h-for-musl-.patch b/package/faifa/0002-hpav_cfg.c-do-not-include-linux-if_ether.h-for-musl-.patch new file mode 100644 index 00000000..6f340c35 --- /dev/null +++ b/package/faifa/0002-hpav_cfg.c-do-not-include-linux-if_ether.h-for-musl-.patch @@ -0,0 +1,32 @@ +From 36eed08a3783df6bb8d92d3c80cd47d0660eeb12 Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Sat, 30 Jan 2016 16:27:37 +0100 +Subject: [PATCH 1/1] hpav_cfg.c: do not include linux/if_ether.h for musl + compatibility + +Fixes a build issue with the musl C library +http://autobuild.buildroot.net/results/dc6/dc6e4d7327d2031ef921cccd814605dec73a0f9c/build-end.log + +Patch sent upstream: https://github.com/ffainelli/faifa/pull/13 + +Signed-off-by: Bernd Kuhls +--- + hpav_cfg.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/hpav_cfg.c b/hpav_cfg.c +index 7cc53af..45d3f0a 100644 +--- a/hpav_cfg.c ++++ b/hpav_cfg.c +@@ -53,8 +53,6 @@ + #include + #include + +-#include +- + #include "homeplug_av.h" + #include "crypto.h" + +-- +2.7.0.rc3 + diff --git a/package/faifa/0003-Makefile.in-fix-asbolute-symlink-of-libfaifa.so.patch b/package/faifa/0003-Makefile.in-fix-asbolute-symlink-of-libfaifa.so.patch new file mode 100644 index 00000000..876d2a60 --- /dev/null +++ b/package/faifa/0003-Makefile.in-fix-asbolute-symlink-of-libfaifa.so.patch @@ -0,0 +1,32 @@ +From d16abf61049947c451a6411a13fc15dda32feb47 Mon Sep 17 00:00:00 2001 +From: Florian Fainelli +Date: Sat, 6 Sep 2014 11:23:02 -0700 +Subject: [PATCH] Makefile.in: fix asbolute symlink of libfaifa.so + +Fixes #7 + +Signed-off-by: Florian Fainelli +[Upstream: da2e279fd736d05bcd0ee6e4609c44fece017ba8] +Signed-off-by: Thomas Petazzoni +--- + Makefile.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile.in b/Makefile.in +index ba65bee..9dec7ee 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -98,9 +98,9 @@ install: installman strip + $(INSTALL) -m0755 hpav_cfg $(DESTDIR)$(sbindir) + $(INSTALL) -d $(DESTDIR)$(libdir) + $(INSTALL) -m0644 $(LIB_SONAME) $(DESTDIR)$(libdir) +- ln -sf $(DESTDIR)$(libdir)/$(LIB_SONAME) $(DESTDIR)$(libdir)/$(LIB_SHARED_SO) + $(INSTALL) -d $(DESTDIR)$(includedir)/faifa + cp $(HEADERS) $(DESTDIR)$(includedir)/faifa ++ cd $(DESTDIR)$(libdir) && ln -sf $(LIB_SONAME) $(LIB_SHARED_SO) + + strip: + $(STRIP) $(APP) +-- +2.23.0 + diff --git a/package/faifa/Config.in b/package/faifa/Config.in new file mode 100644 index 00000000..486f35d5 --- /dev/null +++ b/package/faifa/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_FAIFA + bool "faifa" + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_LIBPCAP + help + Faifa can configure any Intellon-based Power Line + Communication device using Intellon INT5000 and INT6000 + series chips (6000 and 6300 chips). It supports all + Intellon-specific management and control frames as well as + standard management frames. + + https://github.com/ffainelli/faifa + +comment "faifa needs a toolchain w/ dynamic library, threads" + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/faifa/faifa.hash b/package/faifa/faifa.hash new file mode 100644 index 00000000..658dae4a --- /dev/null +++ b/package/faifa/faifa.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 6eada81f3d21f80b5848338b627784981064d728f8e377e5cf973d31640d4489 faifa-0.1.tar.gz +sha256 9b62e4601b2b9cd5719a393e88ed71a8304048862502db765ed9d6ff8cf38c5e COPYING diff --git a/package/faifa/faifa.mk b/package/faifa/faifa.mk new file mode 100644 index 00000000..e5dc1574 --- /dev/null +++ b/package/faifa/faifa.mk @@ -0,0 +1,41 @@ +################################################################################ +# +# faifa +# +################################################################################ + +FAIFA_VERSION = 0.1 +FAIFA_SITE = $(call github,ffainelli,faifa,v$(FAIFA_VERSION)) +FAIFA_INSTALL_STAGING = YES +FAIFA_DEPENDENCIES = libpcap host-autoconf +FAIFA_LICENSE = BSD-3-Clause +FAIFA_LICENSE_FILES = COPYING + +FAIFA_MAKE_OPTS += GIT_REV=$(FAIFA_VERSION) + +# This package uses autoconf, but not automake, so we need to call +# their special autogen.sh script, and have custom target and staging +# installation commands. + +define FAIFA_RUN_AUTOGEN + cd $(@D) && PATH=$(BR_PATH) ./autogen.sh +endef +FAIFA_PRE_CONFIGURE_HOOKS += FAIFA_RUN_AUTOGEN + +define FAIFA_INSTALL_TARGET_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + PREFIX=/usr \ + STRIP=/bin/true \ + DESTDIR=$(TARGET_DIR) \ + install +endef + +define FAIFA_INSTALL_STAGING_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + PREFIX=/usr \ + STRIP=/bin/true \ + DESTDIR=$(STAGING_DIR) \ + install +endef + +$(eval $(autotools-package)) diff --git a/package/fail2ban/0001-fixed-possible-RCE-vulnerability-unset-escape-variable.patch b/package/fail2ban/0001-fixed-possible-RCE-vulnerability-unset-escape-variable.patch new file mode 100644 index 00000000..6d44f41d --- /dev/null +++ b/package/fail2ban/0001-fixed-possible-RCE-vulnerability-unset-escape-variable.patch @@ -0,0 +1,158 @@ +From 410a6ce5c80dd981c22752da034f2529b5eee844 Mon Sep 17 00:00:00 2001 +From: sebres +Date: Mon, 21 Jun 2021 17:12:53 +0200 +Subject: [PATCH] fixed possible RCE vulnerability, unset escape variable + (default tilde) stops consider "~" char after new-line as composing escape + sequence + +[Retrieved from: +https://github.com/fail2ban/fail2ban/commit/410a6ce5c80dd981c22752da034f2529b5eee844] +Signed-off-by: Fabrice Fontaine +--- + config/action.d/complain.conf | 2 +- + config/action.d/dshield.conf | 2 +- + config/action.d/mail-buffered.conf | 8 ++++---- + config/action.d/mail-whois-lines.conf | 2 +- + config/action.d/mail-whois.conf | 6 +++--- + config/action.d/mail.conf | 6 +++--- + 6 files changed, 13 insertions(+), 13 deletions(-) + +diff --git a/config/action.d/complain.conf b/config/action.d/complain.conf +index 3a5f882c9f..4d73b05859 100644 +--- a/config/action.d/complain.conf ++++ b/config/action.d/complain.conf +@@ -102,7 +102,7 @@ logpath = /dev/null + # Notes.: Your system mail command. Is passed 2 args: subject and recipient + # Values: CMD + # +-mailcmd = mail -s ++mailcmd = mail -E 'set escape' -s + + # Option: mailargs + # Notes.: Additional arguments to mail command. e.g. for standard Unix mail: +diff --git a/config/action.d/dshield.conf b/config/action.d/dshield.conf +index c128bef348..3d5a7a53a9 100644 +--- a/config/action.d/dshield.conf ++++ b/config/action.d/dshield.conf +@@ -179,7 +179,7 @@ tcpflags = + # Notes.: Your system mail command. Is passed 2 args: subject and recipient + # Values: CMD + # +-mailcmd = mail -s ++mailcmd = mail -E 'set escape' -s + + # Option: mailargs + # Notes.: Additional arguments to mail command. e.g. for standard Unix mail: +diff --git a/config/action.d/mail-buffered.conf b/config/action.d/mail-buffered.conf +index 325f185b2f..79b841049c 100644 +--- a/config/action.d/mail-buffered.conf ++++ b/config/action.d/mail-buffered.conf +@@ -17,7 +17,7 @@ actionstart = printf %%b "Hi,\n + The jail has been started successfully.\n + Output will be buffered until lines are available.\n + Regards,\n +- Fail2Ban"|mail -s "[Fail2Ban] : started on " ++ Fail2Ban"|mail -E 'set escape' -s "[Fail2Ban] : started on " + + # Option: actionstop + # Notes.: command executed at the stop of jail (or at the end of Fail2Ban) +@@ -28,13 +28,13 @@ actionstop = if [ -f ]; then + These hosts have been banned by Fail2Ban.\n + `cat ` + Regards,\n +- Fail2Ban"|mail -s "[Fail2Ban] : Summary from " ++ Fail2Ban"|mail -E 'set escape' -s "[Fail2Ban] : Summary from " + rm + fi + printf %%b "Hi,\n + The jail has been stopped.\n + Regards,\n +- Fail2Ban"|mail -s "[Fail2Ban] : stopped on " ++ Fail2Ban"|mail -E 'set escape' -s "[Fail2Ban] : stopped on " + + # Option: actioncheck + # Notes.: command executed once before each actionban command +@@ -55,7 +55,7 @@ actionban = printf %%b "`date`: ( failures)\n" >> + These hosts have been banned by Fail2Ban.\n + `cat ` + \nRegards,\n +- Fail2Ban"|mail -s "[Fail2Ban] : Summary" ++ Fail2Ban"|mail -E 'set escape' -s "[Fail2Ban] : Summary" + rm + fi + +diff --git a/config/action.d/mail-whois-lines.conf b/config/action.d/mail-whois-lines.conf +index 3a3e56b2c7..d2818cb9b9 100644 +--- a/config/action.d/mail-whois-lines.conf ++++ b/config/action.d/mail-whois-lines.conf +@@ -72,7 +72,7 @@ actionunban = + # Notes.: Your system mail command. Is passed 2 args: subject and recipient + # Values: CMD + # +-mailcmd = mail -s ++mailcmd = mail -E 'set escape' -s + + # Default name of the chain + # +diff --git a/config/action.d/mail-whois.conf b/config/action.d/mail-whois.conf +index 7fea34c40d..ab33b616dc 100644 +--- a/config/action.d/mail-whois.conf ++++ b/config/action.d/mail-whois.conf +@@ -20,7 +20,7 @@ norestored = 1 + actionstart = printf %%b "Hi,\n + The jail has been started successfully.\n + Regards,\n +- Fail2Ban"|mail -s "[Fail2Ban] : started on " ++ Fail2Ban"|mail -E 'set escape' -s "[Fail2Ban] : started on " + + # Option: actionstop + # Notes.: command executed at the stop of jail (or at the end of Fail2Ban) +@@ -29,7 +29,7 @@ actionstart = printf %%b "Hi,\n + actionstop = printf %%b "Hi,\n + The jail has been stopped.\n + Regards,\n +- Fail2Ban"|mail -s "[Fail2Ban] : stopped on " ++ Fail2Ban"|mail -E 'set escape' -s "[Fail2Ban] : stopped on " + + # Option: actioncheck + # Notes.: command executed once before each actionban command +@@ -49,7 +49,7 @@ actionban = printf %%b "Hi,\n + Here is more information about :\n + `%(_whois_command)s`\n + Regards,\n +- Fail2Ban"|mail -s "[Fail2Ban] : banned from " ++ Fail2Ban"|mail -E 'set escape' -s "[Fail2Ban] : banned from " + + # Option: actionunban + # Notes.: command executed when unbanning an IP. Take care that the +diff --git a/config/action.d/mail.conf b/config/action.d/mail.conf +index 5d8c0e154c..f4838ddcb6 100644 +--- a/config/action.d/mail.conf ++++ b/config/action.d/mail.conf +@@ -16,7 +16,7 @@ norestored = 1 + actionstart = printf %%b "Hi,\n + The jail has been started successfully.\n + Regards,\n +- Fail2Ban"|mail -s "[Fail2Ban] : started on " ++ Fail2Ban"|mail -E 'set escape' -s "[Fail2Ban] : started on " + + # Option: actionstop + # Notes.: command executed at the stop of jail (or at the end of Fail2Ban) +@@ -25,7 +25,7 @@ actionstart = printf %%b "Hi,\n + actionstop = printf %%b "Hi,\n + The jail has been stopped.\n + Regards,\n +- Fail2Ban"|mail -s "[Fail2Ban] : stopped on " ++ Fail2Ban"|mail -E 'set escape' -s "[Fail2Ban] : stopped on " + + # Option: actioncheck + # Notes.: command executed once before each actionban command +@@ -43,7 +43,7 @@ actionban = printf %%b "Hi,\n + The IP has just been banned by Fail2Ban after + attempts against .\n + Regards,\n +- Fail2Ban"|mail -s "[Fail2Ban] : banned from " ++ Fail2Ban"|mail -E 'set escape' -s "[Fail2Ban] : banned from " + + # Option: actionunban + # Notes.: command executed when unbanning an IP. Take care that the diff --git a/package/fail2ban/Config.in b/package/fail2ban/Config.in new file mode 100644 index 00000000..86e62337 --- /dev/null +++ b/package/fail2ban/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_FAIL2BAN + bool "fail2ban" + depends on BR2_PACKAGE_PYTHON || BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_SYSTEMD if BR2_PACKAGE_SYSTEMD + help + Fail2ban scans log files (e.g. /var/log/apache/error_log) and + bans IPs that show the malicious signs -- too many password + failures, seeking for exploits, etc. Out of the box Fail2Ban + comes with filters for various services (apache, courier, + ssh, etc). + + Fail2Ban is able to reduce the rate of incorrect + authentications attempts however it cannot eliminate the risk + that weak authentication presents. + + https://www.fail2ban.org diff --git a/package/fail2ban/S60fail2ban b/package/fail2ban/S60fail2ban new file mode 100644 index 00000000..b181ecde --- /dev/null +++ b/package/fail2ban/S60fail2ban @@ -0,0 +1,23 @@ +#!/bin/sh + +case "$1" in + start) + printf "Starting fail2ban: " + start-stop-daemon -S -q -m -p /var/run/fail2ban.pid \ + -b -x fail2ban-server -- -xf start + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + stop) + printf "Stopping fail2ban: " + start-stop-daemon -K -q -p /var/run/fail2ban.pid + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + restart) + "$0" stop + sleep 1 + "$0" start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + ;; +esac diff --git a/package/fail2ban/fail2ban.hash b/package/fail2ban/fail2ban.hash new file mode 100644 index 00000000..072f0ef9 --- /dev/null +++ b/package/fail2ban/fail2ban.hash @@ -0,0 +1,3 @@ +# sha256 locally computed +sha256 383108e5f8644cefb288537950923b7520f642e7e114efb843f6e7ea9268b1e0 fail2ban-0.11.2.tar.gz +sha256 a75fec0260742fe6275d63ff6a5d97b924b28766558306b3fa4069763096929b COPYING diff --git a/package/fail2ban/fail2ban.mk b/package/fail2ban/fail2ban.mk new file mode 100644 index 00000000..a856d220 --- /dev/null +++ b/package/fail2ban/fail2ban.mk @@ -0,0 +1,53 @@ +################################################################################ +# +# fail2ban +# +################################################################################ + +FAIL2BAN_VERSION = 0.11.2 +FAIL2BAN_SITE = $(call github,fail2ban,fail2ban,$(FAIL2BAN_VERSION)) +FAIL2BAN_LICENSE = GPL-2.0+ +FAIL2BAN_LICENSE_FILES = COPYING +FAIL2BAN_CPE_ID_VENDOR = fail2ban +FAIL2BAN_SETUP_TYPE = distutils + +# 0001-fixed-possible-RCE-vulnerability-unset-escape-variable.patch +FAIL2BAN_IGNORE_CVES += CVE-2021-32749 + +ifeq ($(BR2_PACKAGE_PYTHON3),y) +define FAIL2BAN_PYTHON_2TO3 + $(HOST_DIR)/bin/2to3 --write --nobackups --no-diffs $(@D)/bin/* $(@D)/fail2ban +endef +FAIL2BAN_DEPENDENCIES += host-python3 +# We can't use _POST_PATCH_HOOKS because dependencies are not guaranteed +# to build and install before _POST_PATCH_HOOKS run. +FAIL2BAN_PRE_CONFIGURE_HOOKS += FAIL2BAN_PYTHON_2TO3 +endif + +define FAIL2BAN_FIX_DEFAULT_CONFIG + $(SED) '/^socket/c\socket = /run/fail2ban.sock' $(TARGET_DIR)/etc/fail2ban/fail2ban.conf + $(SED) '/^pidfile/c\pidfile = /run/fail2ban.pid' $(TARGET_DIR)/etc/fail2ban/fail2ban.conf + $(SED) '/^dbfile/c\dbfile = None' $(TARGET_DIR)/etc/fail2ban/fail2ban.conf +endef +FAIL2BAN_POST_INSTALL_TARGET_HOOKS += FAIL2BAN_FIX_DEFAULT_CONFIG + +# fail2ban-python points to host python +define FAIL2BAN_FIX_FAIL2BAN_PYTHON_SYMLINK + ln -snf $(if $(BR2_PACKAGE_PYTHON),python,python3) \ + $(TARGET_DIR)/usr/bin/fail2ban-python +endef +FAIL2BAN_POST_INSTALL_TARGET_HOOKS += FAIL2BAN_FIX_FAIL2BAN_PYTHON_SYMLINK + +define FAIL2BAN_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 package/fail2ban/S60fail2ban \ + $(TARGET_DIR)/etc/init.d/S60fail2ban +endef + +define FAIL2BAN_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0644 $(@D)/files/fail2ban.service.in \ + $(TARGET_DIR)/usr/lib/systemd/system/fail2ban.service + $(SED) 's,@BINDIR@,/usr/bin,g' $(TARGET_DIR)/usr/lib/systemd/system/fail2ban.service + $(SED) '/^PIDFile/c\PIDFile=/run/fail2ban.pid' $(TARGET_DIR)/usr/lib/systemd/system/fail2ban.service +endef + +$(eval $(python-package)) diff --git a/package/fakedate/fakedate b/package/fakedate/fakedate new file mode 100755 index 00000000..a64d9b9c --- /dev/null +++ b/package/fakedate/fakedate @@ -0,0 +1,51 @@ +#!/bin/bash +# vim: set sw=4 expandtab: +# +# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# Copyright (C) 2016 Jérôme Pouiller +# + +DATE_BIN=false +# Do not call `date' directly since it will produce an infinite recursion. +# Instead, find path of true `date' binary. +for P in `echo $PATH | tr ':' ' '`; do + if [ -x "$P/date" ]; then + if ! [ "$P/date" -ef "$0" ]; then + DATE_BIN="$P/date" + break; + fi + fi +done + +if [ -n "$SOURCE_DATE_EPOCH" ]; then + FORCE_EPOCH=1 + for i in "$@"; do + # Use of --date, --file and --reference (and their short option counter + # parts) is incompatible with SOURCE_DATE_EPOCH. + # -u and -R are the only short options without argument. So they could + # appear between '-' and option we want to match. + if echo "$i" | grep -qE '^-([uR]*d|-date|[uR]*f|-file|[uR]*r|--reference)'; then + FORCE_EPOCH=0 + break; + fi + done + if [ $FORCE_EPOCH -eq 1 ]; then + echo "date: Warning: using \$SOURCE_DATE_EPOCH instead of true time" >&2 + ARGS="-d @$SOURCE_DATE_EPOCH" + fi +fi + +exec $DATE_BIN $ARGS "$@" diff --git a/package/fakedate/fakedate.mk b/package/fakedate/fakedate.mk new file mode 100644 index 00000000..99ea748e --- /dev/null +++ b/package/fakedate/fakedate.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# fakedate +# +################################################################################ + +# source included in buildroot +HOST_FAKEDATE_LICENSE = GPL-2.0+ + +define HOST_FAKEDATE_INSTALL_CMDS + $(INSTALL) -D -m 755 package/fakedate/fakedate $(HOST_DIR)/bin/date +endef + +$(eval $(host-generic-package)) diff --git a/package/fakeroot/0001-skip-doc-subdirs.patch b/package/fakeroot/0001-skip-doc-subdirs.patch new file mode 100644 index 00000000..91663fb6 --- /dev/null +++ b/package/fakeroot/0001-skip-doc-subdirs.patch @@ -0,0 +1,14 @@ +For some reason, version 1.25 and up is missing all localized doc, +and thus fails on the install stage. + +Skip the directories. + +Signed-off-by: Norbert Lange +--- fakeroot-1.25.1.org/doc/Makefile.am 2020-09-22 23:52:20.000000000 +0200 ++++ fakeroot-1.25.1/doc/Makefile.am 2020-09-24 11:05:27.611298673 +0200 +@@ -1,5 +1,4 @@ + AUTOMAKE_OPTIONS=foreign +-SUBDIRS = de es fr nl pt sv + + man_MANS = faked.1 fakeroot.1 + diff --git a/package/fakeroot/0002-libfakeroot.c-define-_STAT_VER-if-not-already-define.patch b/package/fakeroot/0002-libfakeroot.c-define-_STAT_VER-if-not-already-define.patch new file mode 100644 index 00000000..574e55e3 --- /dev/null +++ b/package/fakeroot/0002-libfakeroot.c-define-_STAT_VER-if-not-already-define.patch @@ -0,0 +1,45 @@ +From 03bc0ee07fb6e293d081ffd8af1654788b434f6a Mon Sep 17 00:00:00 2001 +From: Ilya Lipnitskiy +Date: Thu, 11 Feb 2021 20:59:25 -0800 +Subject: [PATCH] libfakeroot.c: define _STAT_VER if not already defined +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +glibc 2.33 does does declare `_STAT_VER` anymore. + +Based on patch from Jan Pazdziora: +https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/SMQ3RYXEYTVZH6PLQMKNB3NM4XLPMNZO/ + +Backported from: feda578ca3608b7fc9a28a3a91293611c0ef47b7 + +Signed-off-by: Ilya Lipnitskiy +Signed-off-by: Jörg Krause +--- + libfakeroot.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/libfakeroot.c b/libfakeroot.c +index 3e80e38..14cdbc4 100644 +--- a/libfakeroot.c ++++ b/libfakeroot.c +@@ -90,6 +90,16 @@ + #define SEND_GET_XATTR64(a,b,c) send_get_xattr64(a,b) + #endif + ++#ifndef _STAT_VER ++ #if defined (__aarch64__) ++ #define _STAT_VER 0 ++ #elif defined (__x86_64__) ++ #define _STAT_VER 1 ++ #else ++ #define _STAT_VER 3 ++ #endif ++#endif ++ + /* + These INT_* (which stands for internal) macros should always be used when + the fakeroot library owns the storage of the stat variable. +-- +2.30.1 + diff --git a/package/fakeroot/0003-libfakeroot.c-add-wrappers-for-new-glibc-2.33-symbol.patch b/package/fakeroot/0003-libfakeroot.c-add-wrappers-for-new-glibc-2.33-symbol.patch new file mode 100644 index 00000000..8115598d --- /dev/null +++ b/package/fakeroot/0003-libfakeroot.c-add-wrappers-for-new-glibc-2.33-symbol.patch @@ -0,0 +1,80 @@ +From feda578ca3608b7fc9a28a3a91293611c0ef47b7 Mon Sep 17 00:00:00 2001 +From: Ilya Lipnitskiy +Date: Thu, 11 Feb 2021 21:00:04 -0800 +Subject: [PATCH] libfakeroot.c: add wrappers for new glibc 2.33+ symbols +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This patch add wrappers for newly exported symbols in glibc 2.33. + +Backported from: feda578ca3608b7fc9a28a3a91293611c0ef47b7 + +Signed-off-by: Ilya Lipnitskiy +Signed-off-by: Jörg Krause +--- + libfakeroot.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 48 insertions(+) + +diff --git a/libfakeroot.c b/libfakeroot.c +index 14cdbc4..d75c51f 100644 +--- a/libfakeroot.c ++++ b/libfakeroot.c +@@ -1352,6 +1352,54 @@ int renameat(int olddir_fd, const char *oldpath, + #endif /* HAVE_FSTATAT */ + + ++#if defined(__GLIBC__) && __GLIBC_PREREQ(2,33) ++/* Glibc 2.33 exports symbols for these functions in the shared lib */ ++ int lstat(const char *file_name, struct stat *statbuf) { ++ return WRAP_LSTAT LSTAT_ARG(_STAT_VER, file_name, statbuf); ++ } ++ int stat(const char *file_name, struct stat *st) { ++ return WRAP_STAT STAT_ARG(_STAT_VER, file_name, st); ++ } ++ int fstat(int fd, struct stat *st) { ++ return WRAP_FSTAT FSTAT_ARG(_STAT_VER, fd, st); ++ } ++ ++ #ifdef HAVE_FSTATAT ++ int fstatat(int dir_fd, const char *path, struct stat *st, int flags) { ++ return WRAP_FSTATAT FSTATAT_ARG(_STAT_VER, dir_fd, path, st, flags); ++ } ++ #endif ++ ++ #ifdef STAT64_SUPPORT ++ int lstat64(const char *file_name, struct stat64 *st) { ++ return WRAP_LSTAT64 LSTAT64_ARG(_STAT_VER, file_name, st); ++ } ++ int stat64(const char *file_name, struct stat64 *st) { ++ return WRAP_STAT64 STAT64_ARG(_STAT_VER, file_name, st); ++ } ++ int fstat64(int fd, struct stat64 *st) { ++ return WRAP_FSTAT64 FSTAT64_ARG(_STAT_VER, fd, st); ++ } ++ ++ #ifdef HAVE_FSTATAT ++ int fstatat64(int dir_fd, const char *path, struct stat64 *st, int flags) { ++ return WRAP_FSTATAT64 FSTATAT64_ARG(_STAT_VER, dir_fd, path, st, flags); ++ } ++ #endif ++ #endif ++ ++ int mknod(const char *pathname, mode_t mode, dev_t dev) { ++ return WRAP_MKNOD MKNOD_ARG(_STAT_VER, pathname, mode, &dev); ++ } ++ ++ #if defined(HAVE_FSTATAT) && defined(HAVE_MKNODAT) ++ int mknodat(int dir_fd, const char *pathname, mode_t mode, dev_t dev) { ++ return WRAP_MKNODAT MKNODAT_ARG(_STAT_VER, dir_fd, pathname, mode, &dev); ++ } ++ #endif ++#endif /* GLIBC_PREREQ */ ++ ++ + #ifdef FAKEROOT_FAKENET + pid_t fork(void) + { +-- +2.30.1 + diff --git a/package/fakeroot/0004-configure.ac-fix-__xmknod-at-pointer-argument.patch b/package/fakeroot/0004-configure.ac-fix-__xmknod-at-pointer-argument.patch new file mode 100644 index 00000000..38dfea86 --- /dev/null +++ b/package/fakeroot/0004-configure.ac-fix-__xmknod-at-pointer-argument.patch @@ -0,0 +1,66 @@ +From 432dd46e662772020306a2ce8b1be38321697e69 Mon Sep 17 00:00:00 2001 +From: Ilya Lipnitskiy +Date: Sat, 13 Feb 2021 19:32:08 -0800 +Subject: [PATCH] configure.ac: fix __xmknod{,at} pointer argument +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Switch default to assume * and not the absence of *. + +On glibc 2.33+, there is no definition for these functions in header +files, so the compile test doesn't work. But, we can default to using +the pointer (as is the case with newer glibc), and use the header file +on older platforms to fail the test and use no pointer. + +Backported from: c3eebec293e35b997bb46c22fb5a4e114afb5e7f + +Signed-off-by: Ilya Lipnitskiy +Signed-off-by: Jörg Krause +--- + configure.ac | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 73415d2..d85566f 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -183,13 +183,13 @@ AC_MSG_CHECKING([for type of arg of __xmknod]) + ]], [[ + int __xmknod ( int ver, + const char *pathname , +- mode_t mode , dev_t dev); ++ mode_t mode , dev_t *dev); + ]])],[ +- AC_DEFINE(XMKNOD_FRTH_ARG,) +- AC_MSG_RESULT([no extra *]) +- ],[ + AC_DEFINE(XMKNOD_FRTH_ARG,[*]) + AC_MSG_RESULT([needs *]) ++ ],[ ++ AC_DEFINE(XMKNOD_FRTH_ARG,) ++ AC_MSG_RESULT([no extra *]) + + ]) + +@@ -210,13 +210,13 @@ AC_MSG_CHECKING([for type of arg of __xmknodat]) + int __xmknodat ( int ver, + int dirfd, + const char *pathname , +- mode_t mode , dev_t dev); ++ mode_t mode , dev_t *dev); + ]])],[ +- AC_DEFINE(XMKNODAT_FIFTH_ARG,) +- AC_MSG_RESULT([no extra *]) +- ],[ + AC_DEFINE(XMKNODAT_FIFTH_ARG,[*]) + AC_MSG_RESULT([needs *]) ++ ],[ ++ AC_DEFINE(XMKNODAT_FIFTH_ARG,) ++ AC_MSG_RESULT([no extra *]) + + ]) + +-- +2.30.1 + diff --git a/package/fakeroot/0005-fix-build-regression-on-macOS.patch b/package/fakeroot/0005-fix-build-regression-on-macOS.patch new file mode 100644 index 00000000..d5589a79 --- /dev/null +++ b/package/fakeroot/0005-fix-build-regression-on-macOS.patch @@ -0,0 +1,63 @@ +From 3590b817df703a256f2c1de9a5f5469eaa1c86e9 Mon Sep 17 00:00:00 2001 +From: Ilya Lipnitskiy +Date: Mon, 15 Feb 2021 11:07:56 -0800 +Subject: [PATCH] fix build regression on macOS + +Signed-off-by: Felix Fietkau +Signed-off-by: Ilya Lipnitskiy +[Ryan: backported from 8090dffdad8fda86dccd47ce7a7db8840bdf7d7b] +Signed-off-by: Ryan Barnett +--- + configure.ac | 6 ++++++ + libfakeroot.c | 4 +++- + 2 files changed, 9 insertions(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index d85566f..d635df1 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -181,6 +181,9 @@ AC_MSG_CHECKING([for type of arg of __xmknod]) + #include + #include + ]], [[ ++#ifndef __GLIBC__ ++#error no extra * ++#endif + int __xmknod ( int ver, + const char *pathname , + mode_t mode , dev_t *dev); +@@ -207,6 +210,9 @@ AC_MSG_CHECKING([for type of arg of __xmknodat]) + #include + #include + ]], [[ ++#ifndef __GLIBC__ ++#error no extra * ++#endif + int __xmknodat ( int ver, + int dirfd, + const char *pathname , +diff --git a/libfakeroot.c b/libfakeroot.c +index d75c51f..ec4e577 100644 +--- a/libfakeroot.c ++++ b/libfakeroot.c +@@ -1352,7 +1352,8 @@ int renameat(int olddir_fd, const char *oldpath, + #endif /* HAVE_FSTATAT */ + + +-#if defined(__GLIBC__) && __GLIBC_PREREQ(2,33) ++#if defined(__GLIBC__) ++#if __GLIBC_PREREQ(2,33) + /* Glibc 2.33 exports symbols for these functions in the shared lib */ + int lstat(const char *file_name, struct stat *statbuf) { + return WRAP_LSTAT LSTAT_ARG(_STAT_VER, file_name, statbuf); +@@ -1397,6 +1398,7 @@ int renameat(int olddir_fd, const char *oldpath, + return WRAP_MKNODAT MKNODAT_ARG(_STAT_VER, dir_fd, pathname, mode, &dev); + } + #endif ++#endif /* __GLIBC__ */ + #endif /* GLIBC_PREREQ */ + + +-- +2.25.1 + diff --git a/package/fakeroot/fakeroot.hash b/package/fakeroot/fakeroot.hash new file mode 100644 index 00000000..1a23d9e8 --- /dev/null +++ b/package/fakeroot/fakeroot.hash @@ -0,0 +1,4 @@ +# From http://deb.debian.org/debian/pool/main/f/fakeroot/fakeroot_1.25.3-1.dsc +sha256 8e903683357f7f5bcc31b879fd743391ad47691d4be33d24a76be3b6c21e956c fakeroot_1.25.3.orig.tar.gz +# License files, locally calculated +sha256 fc82ca8b6fdb18d4e3e85cfd8ab58d1bcd3f1b29abe782895abd91d64763f8e7 COPYING diff --git a/package/fakeroot/fakeroot.mk b/package/fakeroot/fakeroot.mk new file mode 100644 index 00000000..c3312b77 --- /dev/null +++ b/package/fakeroot/fakeroot.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# fakeroot +# +################################################################################ + +FAKEROOT_VERSION = 1.25.3 +FAKEROOT_SOURCE = fakeroot_$(FAKEROOT_VERSION).orig.tar.gz +FAKEROOT_SITE = https://snapshot.debian.org/archive/debian/20201008T205817Z/pool/main/f/fakeroot + +HOST_FAKEROOT_DEPENDENCIES = host-acl +# Force capabilities detection off +# For now these are process capabilities (faked) rather than file +# so they're of no real use +HOST_FAKEROOT_CONF_ENV = \ + ac_cv_header_sys_capability_h=no \ + ac_cv_func_capset=no +# patching configure.ac in patch 0003 +HOST_FAKEROOT_AUTORECONF = YES +FAKEROOT_LICENSE = GPL-3.0+ +FAKEROOT_LICENSE_FILES = COPYING + +define HOST_FAKEROOT_BUILD_AUX + mkdir -p $(@D)/build-aux +endef +HOST_FAKEROOT_POST_PATCH_HOOKS += HOST_FAKEROOT_BUILD_AUX + +$(eval $(host-autotools-package)) diff --git a/package/faketime/Config.in.host b/package/faketime/Config.in.host new file mode 100644 index 00000000..0ebb9638 --- /dev/null +++ b/package/faketime/Config.in.host @@ -0,0 +1,7 @@ +config BR2_PACKAGE_HOST_FAKETIME + bool "host faketime" + help + Faketime reports faked system time to programs without + having to change the system-wide time. + + https://github.com/wolfcw/libfaketime diff --git a/package/faketime/faketime.hash b/package/faketime/faketime.hash new file mode 100644 index 00000000..bdb003aa --- /dev/null +++ b/package/faketime/faketime.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 06288237cd5890eca148489e5b904ed852ed0ffa8424bfb479342f4daa8442a3 faketime-0.9.8.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/faketime/faketime.mk b/package/faketime/faketime.mk new file mode 100644 index 00000000..85ce9a90 --- /dev/null +++ b/package/faketime/faketime.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# libfaketime +# +################################################################################ + +FAKETIME_VERSION = 0.9.8 +FAKETIME_SITE = $(call github,wolfcw,libfaketime,v$(FAKETIME_VERSION)) +FAKETIME_LICENSE = GPL-2.0 +FAKETIME_LICENSE_FILES = COPYING + +define HOST_FAKETIME_BUILD_CMDS + $(HOST_CONFIGURE_OPTS) $(MAKE) -C $(@D) PREFIX=$(HOST_DIR) +endef + +define HOST_FAKETIME_INSTALL_CMDS + $(HOST_CONFIGURE_OPTS) $(MAKE) -C $(@D) PREFIX=$(HOST_DIR) install +endef + +$(eval $(host-generic-package)) diff --git a/package/fan-ctrl/Config.in b/package/fan-ctrl/Config.in new file mode 100644 index 00000000..86963168 --- /dev/null +++ b/package/fan-ctrl/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_FAN_CTRL + bool "fan-ctrl" + depends on BR2_USE_MMU # fork() + help + Fan-ctrl is a little daemon that controls the speed of one + or more system or CPU fans. It does so by monitoring + temperature inputs and selecting a fan speed from an array + of available speeds based on a set of temperature + thresholds. + + http://fan-ctrl.sourceforge.net/ diff --git a/package/fan-ctrl/fan-ctrl.hash b/package/fan-ctrl/fan-ctrl.hash new file mode 100644 index 00000000..0bd5d609 --- /dev/null +++ b/package/fan-ctrl/fan-ctrl.hash @@ -0,0 +1,2 @@ +# Locally computed +sha1 d8ba5bac15e90c36a4e908ca1c98fac83bf702ea fan-ctrl.c?revision=1.3 diff --git a/package/fan-ctrl/fan-ctrl.mk b/package/fan-ctrl/fan-ctrl.mk new file mode 100644 index 00000000..81a52f1e --- /dev/null +++ b/package/fan-ctrl/fan-ctrl.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# fan-ctrl +# +################################################################################ + +# no release, so grab .c file directly from viewvc +FAN_CTRL_VERSION = 1.3 +FAN_CTRL_SOURCE = fan-ctrl.c?revision=$(FAN_CTRL_VERSION) +FAN_CTRL_SITE = http://fan-ctrl.cvs.sourceforge.net/viewvc/fan-ctrl/fan-ctrl +FAN_CTRL_LICENSE = GPL-2.0+ +FAN_CTRL_LICENSE_FILES = fan-ctrl.c + +define FAN_CTRL_EXTRACT_CMDS + cp $(FAN_CTRL_DL_DIR)/$(FAN_CTRL_SOURCE) $(@D)/fan-ctrl.c +endef + +define FAN_CTRL_BUILD_CMDS + $(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_LDFLAGS) \ + $(@D)/fan-ctrl.c -o $(@D)/fan-ctrl +endef + +define FAN_CTRL_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 755 $(@D)/fan-ctrl $(TARGET_DIR)/usr/sbin/fan-ctrl +endef + +$(eval $(generic-package)) diff --git a/package/fastboot_busybox/Config.in b/package/fastboot_busybox/Config.in new file mode 100644 index 00000000..a71b3abf --- /dev/null +++ b/package/fastboot_busybox/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_FASTBOOT_BUSYBOX + bool "loongson buildroot system fastboot setup about busybox init process" + depends on BR2_INIT_BUSYBOX + default n + help + systemd start need long time but busybox start be faster. + but some sofeware need start service which define in /etc/init.d/S* file + this service will need some time to boot. + so when this option selected,it will move /etc/init.d all S* file + to /root/init.d-bak so that delelte this service boot diff --git a/package/fastboot_busybox/fastboot_busybox.mk b/package/fastboot_busybox/fastboot_busybox.mk new file mode 100644 index 00000000..6d14e1be --- /dev/null +++ b/package/fastboot_busybox/fastboot_busybox.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# fastboot_busybox +# +################################################################################ + +FASTBOOT_BUSYBOX_SITE = $(TOPDIR)/package/fastboot_busybox/fastboot_busybox.tar.gz +FASTBOOT_BUSYBOX_SITE_METHOD = file + +FASTBOOT_BUSYBOX_DEPENDENCIES = git_info_lsgd busybox + +define FASTBOOT_BUSYBOX_EXTRACT_CMDS + echo "extract nothing" + echo $(FASTBOOT_BUSYBOX_SITE) + tar -zxf $(FASTBOOT_BUSYBOX_SITE) -C $(@D)/ +endef + +define FASTBOOT_BUSYBOX_BUILD_CMDS + echo "build nothing" +endef + +define FASTBOOT_BUSYBOX_INSTALL_TARGET_CMDS + echo "install S99fastboot_ls and new rcK to /etc/init.d"; + cd $(@D) && chmod a+x S99fastboot-ls && cp S99fastboot-ls $(TARGET_DIR)/etc/init.d + cd $(@D) && cp rcK $(TARGET_DIR)/etc/init.d +endef + +$(eval $(generic-package)) diff --git a/package/fastboot_busybox/fastboot_busybox.tar.gz b/package/fastboot_busybox/fastboot_busybox.tar.gz new file mode 100644 index 00000000..5e304cd0 Binary files /dev/null and b/package/fastboot_busybox/fastboot_busybox.tar.gz differ diff --git a/package/fastd/Config.in b/package/fastd/Config.in new file mode 100644 index 00000000..5319d685 --- /dev/null +++ b/package/fastd/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_FASTD + bool "fastd" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS # libuecc + select BR2_PACKAGE_LIBUECC + select BR2_PACKAGE_LIBSODIUM + select BR2_PACKAGE_LIBSODIUM_FULL + help + Fast and Secure Tunneling Daemon + + https://github.com/NeoRaider/fastd/wiki + +if BR2_PACKAGE_FASTD + +config BR2_PACKAGE_FASTD_STATUS_SOCKET + bool "status socket support" + default y + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # json-c + select BR2_PACKAGE_JSON_C + help + Enable support for a socket to get fastd's status. + +endif + +comment "fastd needs a toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS \ + || BR2_STATIC_LIBS diff --git a/package/fastd/fastd.hash b/package/fastd/fastd.hash new file mode 100644 index 00000000..b59085e0 --- /dev/null +++ b/package/fastd/fastd.hash @@ -0,0 +1,3 @@ +# computed locally +sha256 942f33bcd794bcb8e19da4c30c875bdfd4d0f1c24ec4dcdf51237791bbfb0d4c fastd-21.tar.xz +sha256 1f5acece57466eac89108f934a196be09b7676fa2d637e78d6657ee1a7d644ac COPYRIGHT diff --git a/package/fastd/fastd.mk b/package/fastd/fastd.mk new file mode 100644 index 00000000..c1db1cc4 --- /dev/null +++ b/package/fastd/fastd.mk @@ -0,0 +1,48 @@ +################################################################################ +# +# fastd +# +################################################################################ + +FASTD_VERSION = 21 +FASTD_SITE = https://github.com/NeoRaider/fastd/releases/download/v$(FASTD_VERSION) +FASTD_SOURCE = fastd-$(FASTD_VERSION).tar.xz +FASTD_LICENSE = BSD-2-Clause +FASTD_LICENSE_FILES = COPYRIGHT +FASTD_CPE_ID_VERSION = $(FASTD_VERSION).0 +FASTD_DEPENDENCIES = host-bison host-pkgconf libuecc libsodium + +ifeq ($(BR2_PACKAGE_LIBCAP),y) +FASTD_CONF_OPTS += -Dcapabilities=enabled +FASTD_DEPENDENCIES += libcap +else +FASTD_CONF_OPTS += -Dcapabilities=disabled +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +FASTD_CONF_OPTS += -Dcipher_aes128-ctr=enabled +FASTD_DEPENDENCIES += openssl +else +FASTD_CONF_OPTS += -Dcipher_aes128-ctr=disabled +endif + +ifeq ($(BR2_PACKAGE_FASTD_STATUS_SOCKET),y) +FASTD_CONF_OPTS += -Dstatus_socket=enabled +FASTD_DEPENDENCIES += json-c +else +FASTD_CONF_OPTS += -Dstatus_socket=disabled +endif + +ifeq ($(BR2_INIT_SYSTEMD),y) +FASTD_CONF_OPTS += -Dsystemd=enabled +else +FASTD_CONF_OPTS += -Dsystemd=disabled +endif + +ifeq ($(BR2_GCC_ENABLE_LTO),y) +FASTD_CONF_OPTS += -Db_lto=true +else +FASTD_CONF_OPTS += -Db_lto=false +endif + +$(eval $(meson-package)) diff --git a/package/fatcat/Config.in.host b/package/fatcat/Config.in.host new file mode 100644 index 00000000..2c5f6698 --- /dev/null +++ b/package/fatcat/Config.in.host @@ -0,0 +1,8 @@ +config BR2_PACKAGE_HOST_FATCAT + bool "host fatcat" + help + Fatcat is designed to manipulate FAT filesystems, in order + to explore, extract, repair, recover and forensic them. It + currently supports FAT12, FAT16 and FAT32. + + https://github.com/Gregwar/fatcat diff --git a/package/fatcat/fatcat.hash b/package/fatcat/fatcat.hash new file mode 100644 index 00000000..66823e2d --- /dev/null +++ b/package/fatcat/fatcat.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 303efe2aa73cbfe6fbc5d8af346d0f2c70b3f996fc891e8859213a58b95ad88c fatcat-1.1.0.tar.gz +sha256 3ea03755e32cf7f5b12981de92a0fdad396448195fe0024990c9cbc388e9866c LICENSE diff --git a/package/fatcat/fatcat.mk b/package/fatcat/fatcat.mk new file mode 100644 index 00000000..1a2e5aac --- /dev/null +++ b/package/fatcat/fatcat.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# fatcat +# +################################################################################ + +FATCAT_VERSION = 1.1.0 +FATCAT_SITE = $(call github,Gregwar,fatcat,v$(FATCAT_VERSION)) +FATCAT_LICENSE = MIT +FATCAT_LICENSE_FILES = LICENSE + +$(eval $(host-cmake-package)) diff --git a/package/fb-test-app/Config.in b/package/fb-test-app/Config.in new file mode 100644 index 00000000..23b5568d --- /dev/null +++ b/package/fb-test-app/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_FB_TEST_APP + bool "fb-test-app" + help + Test suite for Linux framebuffer. + + https://github.com/prpplague/fb-test-app diff --git a/package/fb-test-app/fb-test-app.hash b/package/fb-test-app/fb-test-app.hash new file mode 100644 index 00000000..06611db7 --- /dev/null +++ b/package/fb-test-app/fb-test-app.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 6baf6b45968d0bb9a5527c6c4bf18661e9f9eb9be973a6d1952c38168c90d58f fb-test-app-rosetta-1.1.0.tar.gz +sha256 e6d6a009505e345fe949e1310334fcb0747f28dae2856759de102ab66b722cb4 COPYING diff --git a/package/fb-test-app/fb-test-app.mk b/package/fb-test-app/fb-test-app.mk new file mode 100644 index 00000000..1ab7b2f2 --- /dev/null +++ b/package/fb-test-app/fb-test-app.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# fb-test-app +# +################################################################################ + +FB_TEST_APP_VERSION = rosetta-1.1.0 +FB_TEST_APP_SITE = $(call github,prpplague,fb-test-app,$(FB_TEST_APP_VERSION)) +FB_TEST_APP_LICENSE = GPL-2.0 +FB_TEST_APP_LICENSE_FILES = COPYING + +define FB_TEST_APP_BUILD_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) all +endef + +define FB_TEST_APP_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/perf $(TARGET_DIR)/usr/bin/fb-test-perf + $(INSTALL) -D -m 0755 $(@D)/rect $(TARGET_DIR)/usr/bin/fb-test-rect + $(INSTALL) -D -m 0755 $(@D)/fb-test $(TARGET_DIR)/usr/bin/fb-test + $(INSTALL) -D -m 0755 $(@D)/offset $(TARGET_DIR)/usr/bin/fb-test-offset +endef + +$(eval $(generic-package)) diff --git a/package/fbdump/Config.in b/package/fbdump/Config.in new file mode 100644 index 00000000..c102fe27 --- /dev/null +++ b/package/fbdump/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_FBDUMP + bool "fbdump (Framebuffer Capture Tool)" + help + fbdump is a simple tool to capture snapshots from the Linux + kernel framebuffer device and write them out as a PPM file. + Currently, most packed-pixel framebuffer formats and the vga16 + framebuffer are supported. + + http://www.rcdrummond.net/fbdump diff --git a/package/fbdump/fbdump.hash b/package/fbdump/fbdump.hash new file mode 100644 index 00000000..8bc8b7c5 --- /dev/null +++ b/package/fbdump/fbdump.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 c4d521a86229b3106cf69786008ad94f899da5288a19a067deae84951880722d fbdump-0.4.2.tar.gz +sha256 231f7edcc7352d7734a96eef0b8030f77982678c516876fcb81e25b32d68564c COPYING diff --git a/package/fbdump/fbdump.mk b/package/fbdump/fbdump.mk new file mode 100644 index 00000000..301dd4fa --- /dev/null +++ b/package/fbdump/fbdump.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# fbdump +# +################################################################################ + +FBDUMP_VERSION = 0.4.2 +FBDUMP_SITE = http://www.rcdrummond.net/fbdump +FBDUMP_LICENSE = GPL-2.0 +FBDUMP_LICENSE_FILES = COPYING + +# The VGA16 specific feature of fbdump doesn't make much sense outside +# of the x86/x86-64 architectures, and causes build problems on some +# architectures as outw() is not always available. +ifeq ($(BR2_i386)$(BR2_x86_64),y) +FBDUMP_CONF_OPTS += --enable-vga16fb +else +FBDUMP_CONF_OPTS += --disable-vga16fb +endif + +$(eval $(autotools-package)) diff --git a/package/fbgrab/0001-fix-static-build.patch b/package/fbgrab/0001-fix-static-build.patch new file mode 100644 index 00000000..fe5ae2ca --- /dev/null +++ b/package/fbgrab/0001-fix-static-build.patch @@ -0,0 +1,21 @@ +Fix static build + +fbgrab links against libpng, which depends on libm. For shared library +builds, there is nothing special to do about this, but for static +library builds, it is necessary to pass -lm when linking fbgrab. + +Signed-off-by: Thomas Petazzoni + +Index: b/Makefile +=================================================================== +--- a/Makefile ++++ b/Makefile +@@ -12,7 +12,7 @@ + all: fbgrab fbgrab.1.gz + + fbgrab: fbgrab.c +- $(CC) -g -Wall $(CFLAGS) $(LDFLAGS) $< -lpng -lz -o $@ ++ $(CC) -g -Wall $(CFLAGS) $(LDFLAGS) $< -lpng -lz -lm -o $@ + + fbgrab.1.gz: fbgrab.1.man + $(GZIP) $(GZIPFLAGS) $< > $@ diff --git a/package/fbgrab/Config.in b/package/fbgrab/Config.in new file mode 100644 index 00000000..b1d8755f --- /dev/null +++ b/package/fbgrab/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_FBGRAB + bool "fbgrab" + select BR2_PACKAGE_LIBPNG + help + FBGrab is a framebuffer screenshot program, capturing the + linux frambuffer and converting it to a png-picture. + + https://github.com/GunnarMonell/fbgrab diff --git a/package/fbgrab/fbgrab.hash b/package/fbgrab/fbgrab.hash new file mode 100644 index 00000000..4d9a6b97 --- /dev/null +++ b/package/fbgrab/fbgrab.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 62d7aa82138ac36db0921832f3b5267b4cffc0dc22c8701857ebcb997960a32e fbgrab-1.4.tar.gz +sha256 fa5fc1d1eec39532ea517518eeefd7b6e3c14341a55e5880a0e2a49eee47a5b7 COPYING diff --git a/package/fbgrab/fbgrab.mk b/package/fbgrab/fbgrab.mk new file mode 100644 index 00000000..1ae03ae4 --- /dev/null +++ b/package/fbgrab/fbgrab.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# fbgrab +# +################################################################################ + +FBGRAB_VERSION = 1.4 +FBGRAB_SITE = $(call github,GunnarMonell,fbgrab,$(FBGRAB_VERSION)) +FBGRAB_DEPENDENCIES = libpng +FBGRAB_LICENSE = GPL-2.0 +FBGRAB_LICENSE_FILES = COPYING + +define FBGRAB_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) fbgrab +endef + +define FBGRAB_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/fbgrab $(TARGET_DIR)/usr/bin/fbgrab +endef + +$(eval $(generic-package)) diff --git a/package/fbset/0001-Fix-musl-compile.patch b/package/fbset/0001-Fix-musl-compile.patch new file mode 100644 index 00000000..65d84c57 --- /dev/null +++ b/package/fbset/0001-Fix-musl-compile.patch @@ -0,0 +1,33 @@ +From 6d42be24b62b94df8e2f01956842b7ee4b640e97 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Mon, 11 Jul 2016 22:07:42 +0200 +Subject: [PATCH] Fix musl compile. + +Unconditional include for __u32 type. + +Fixes: + + error: unknown type name '__u32' + +Signed-off-by: Peter Seiderer +--- + fbset.h | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/fbset.h b/fbset.h +index 9b1d2ac..3c511e1 100644 +--- a/fbset.h ++++ b/fbset.h +@@ -15,9 +15,7 @@ + #include + #include + +-#ifdef __GLIBC__ + #include +-#endif + + #define VERSION "Linux Frame Buffer Device Configuration " \ + "Version 2.1 (23/06/1999)\n" \ +-- +2.8.1 + diff --git a/package/fbset/Config.in b/package/fbset/Config.in new file mode 100644 index 00000000..b4ef41f0 --- /dev/null +++ b/package/fbset/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_FBSET + bool "fbset" + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + Fbset is a system utility to show or change the settings of + the frame buffer device. The frame buffer device provides a + simple and unique interface to access different kinds of + graphic displays. + + http://users.telenet.be/geertu/Linux/fbdev/ diff --git a/package/fbset/fbset.hash b/package/fbset/fbset.hash new file mode 100644 index 00000000..5d9785d9 --- /dev/null +++ b/package/fbset/fbset.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 40ff4ab0247b75138a0887ed40f81c1a6184f340b77126c16d074b1075b41c20 fbset-2.1.tar.gz +sha256 c3285709a0840899a789faefae1704e87f96f757e905a38a1931a9d4fde95ddd fbset.c diff --git a/package/fbset/fbset.mk b/package/fbset/fbset.mk new file mode 100644 index 00000000..8d2a477f --- /dev/null +++ b/package/fbset/fbset.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# fbset +# +################################################################################ + +FBSET_VERSION = 2.1 +FBSET_SITE = http://users.telenet.be/geertu/Linux/fbdev +FBSET_DEPENDENCIES = host-bison host-flex +FBSET_LICENSE = GPL-2.0 +FBSET_LICENSE_FILES = fbset.c + +define FBSET_BUILD_CMDS + $(MAKE1) $(TARGET_CONFIGURE_OPTS) -C $(@D) +endef + +define FBSET_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 755 $(@D)/fbset $(TARGET_DIR)/usr/sbin/fbset +endef + +$(eval $(generic-package)) diff --git a/package/fbterm/0001-fbio.cpp-improxy.cpp-fbterm.cpp-fix-musl-compile.patch b/package/fbterm/0001-fbio.cpp-improxy.cpp-fbterm.cpp-fix-musl-compile.patch new file mode 100644 index 00000000..27e1e910 --- /dev/null +++ b/package/fbterm/0001-fbio.cpp-improxy.cpp-fbterm.cpp-fix-musl-compile.patch @@ -0,0 +1,70 @@ +From 1072d60c6c8f1f51feb740527a8a056bfead9318 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Thu, 8 Oct 2015 19:53:47 +0200 +Subject: [PATCH] fbio.cpp, improxy.cpp, fbterm.cpp: fix musl compile +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +- add missing include, fixes: + + fbio.cpp:33:8: error: ‘fd_set’ does not name a type + static fd_set fds; + + improxy.cpp:439:3: error: ‘fd_set’ was not declared in this scope + +- add missing WAIT_ANY define, fixes: + + fbterm.cpp: In member function ‘void FbTerm::processSignal(u32)’: + fbterm.cpp:212:22: error: ‘WAIT_ANY’ was not declared in this scope + s32 pid = waitpid(WAIT_ANY, 0, WNOHANG); + +Signed-off-by: Peter Seiderer +--- + src/fbio.cpp | 1 + + src/fbterm.cpp | 4 ++++ + src/improxy.cpp | 1 + + 3 files changed, 6 insertions(+) + +diff --git a/src/fbio.cpp b/src/fbio.cpp +index e5afc44..88c632c 100644 +--- a/src/fbio.cpp ++++ b/src/fbio.cpp +@@ -30,6 +30,7 @@ + #define NR_EPOLL_FDS 10 + s32 epollFd; + #else ++#include + static fd_set fds; + static u32 maxfd = 0; + #endif +diff --git a/src/fbterm.cpp b/src/fbterm.cpp +index 38d4014..60288e4 100644 +--- a/src/fbterm.cpp ++++ b/src/fbterm.cpp +@@ -37,6 +37,10 @@ + #include "input_key.h" + #include "mouse.h" + ++#ifndef WAIT_ANY ++#define WAIT_ANY (-1) ++#endif ++ + #ifdef HAVE_SIGNALFD + // offered by some systems has bug with g++ + #include "signalfd.h" +diff --git a/src/improxy.cpp b/src/improxy.cpp +index 3d03e66..4e046d2 100644 +--- a/src/improxy.cpp ++++ b/src/improxy.cpp +@@ -23,6 +23,7 @@ + #include + #include + #include ++#include + #include + #include "improxy.h" + #include "immessage.h" +-- +2.1.4 + diff --git a/package/fbterm/0002-mouse.cpp-fix-musl-compile.patch b/package/fbterm/0002-mouse.cpp-fix-musl-compile.patch new file mode 100644 index 00000000..5182d8ba --- /dev/null +++ b/package/fbterm/0002-mouse.cpp-fix-musl-compile.patch @@ -0,0 +1,30 @@ +From a34dba99aff2994269ee347da67feb7ede9b1a67 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Thu, 18 Feb 2016 22:32:38 +0100 +Subject: [PATCH] mouse.cpp: fix musl compile + +Add missing include, fixes: + + mouse.cpp:58:37: error: 'memset' was not declared in this scope + mouse.cpp:60:64: error: 'strncpy' was not declared in this scope + +Signed-off-by: Peter Seiderer +--- + src/mouse.cpp | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/mouse.cpp b/src/mouse.cpp +index 0435dd9..f173137 100644 +--- a/src/mouse.cpp ++++ b/src/mouse.cpp +@@ -27,6 +27,7 @@ DEFINE_INSTANCE(Mouse) + #include + #include + #include ++#include + #include + #include + #include +-- +2.1.4 + diff --git a/package/fbterm/0003-C++11-compliance.patch b/package/fbterm/0003-C++11-compliance.patch new file mode 100644 index 00000000..1a06da3d --- /dev/null +++ b/package/fbterm/0003-C++11-compliance.patch @@ -0,0 +1,93 @@ +lib/vterm_states: fix C++11 compliance + +In C++11, narrowing a type is no longer allowed in structure +initializers: + + struct foo { u16 u; }; + foo f[] = { {0}, {-1} }; + +results in the gcc-6 to whine out loudly, and fail: + + error: narrowing conversion of ‘-1’ from ‘int’ to ‘u16 {aka short unsigned int}’ inside { } [-Wnarrowing] + }; + ^ + +Signed-off-by: "Yann E. MORIN" + +diff -durN fbterm-1.7.0.orig/src/lib/vterm_states.cpp fbterm-1.7.0/src/lib/vterm_states.cpp +--- fbterm-1.7.0.orig/src/lib/vterm_states.cpp 2010-10-06 06:23:08.000000000 +0200 ++++ fbterm-1.7.0/src/lib/vterm_states.cpp 2016-08-13 16:54:29.495451127 +0200 +@@ -22,6 +22,7 @@ + #include "vterm.h" + + #define ADDSAME(len) ((len) << 8) ++#define ENDSEQ { ((u16)-1) } + + const VTerm::Sequence VTerm::control_sequences[] = { + { 0, 0, ESkeep }, +@@ -39,14 +40,14 @@ + { 0x1B, 0, ESesc }, + { 0x7F, 0, ESkeep }, + { 0x9B, 0, ESsquare }, +- { -1} ++ ENDSEQ + }; + + const VTerm::Sequence VTerm::escape_sequences[] = { + { 0, 0, ESnormal }, + + // ESnormal +- { -1 }, ++ ENDSEQ, + + // ESesc + { '[', &VTerm::clear_param, ESsquare }, +@@ -65,7 +66,7 @@ + { '8', &VTerm::restore_cursor, ESnormal }, + { '>', &VTerm::keypad_numeric, ESnormal }, + { '=', &VTerm::keypad_application, ESnormal }, +- { -1 }, ++ ENDSEQ, + + // ESsquare + { '[', 0, ESfunckey }, +@@ -104,7 +105,7 @@ + { '`', &VTerm::cursor_position_col, ESnormal }, + { ']', &VTerm::linux_specific, ESnormal }, + { '}', &VTerm::fbterm_specific, ESnormal }, +- { -1 }, ++ ENDSEQ, + + // ESnonstd + { '0' | ADDSAME(9), &VTerm::set_palette, ESkeep }, +@@ -112,25 +113,25 @@ + { 'a' | ADDSAME(5), &VTerm::set_palette, ESkeep }, + { 'P', &VTerm::begin_set_palette, ESkeep }, + { 'R', &VTerm::reset_palette, ESnormal }, +- { -1 }, ++ ENDSEQ, + + // ESpercent + { '@', &VTerm::clear_utf8, ESnormal }, + { 'G', &VTerm::set_utf8, ESnormal }, + { '8', &VTerm::set_utf8, ESnormal }, +- { -1 }, ++ ENDSEQ, + + // EScharset + { '0', &VTerm::set_charset, ESnormal }, + { 'B', &VTerm::set_charset, ESnormal }, + { 'U', &VTerm::set_charset, ESnormal }, + { 'K', &VTerm::set_charset, ESnormal }, +- { -1 }, ++ ENDSEQ, + + // EShash + { '8', &VTerm::screen_align, ESnormal }, +- { -1 }, ++ ENDSEQ, + + // ESfunckey +- { -1 }, ++ ENDSEQ, + }; diff --git a/package/fbterm/0004-iconv.patch b/package/fbterm/0004-iconv.patch new file mode 100644 index 00000000..39c9182e --- /dev/null +++ b/package/fbterm/0004-iconv.patch @@ -0,0 +1,41 @@ +Fix building against libiconv + +Downloaded from +https://github.com/kyak/openwrt-packages/blob/master/fbterm/patches/001-iconv.patch + +Signed-off-by: Bernd Kuhls + +--- a/src/lib/io.cpp ++++ b/src/lib/io.cpp +@@ -119,10 +119,10 @@ void IoPipe::setCodec(const s8 *up, cons + if (!strcasecmp(up, down)) return; + + mCodecRead = iconv_open(up, down); +- if (mCodecRead == (void*)-1) mCodecRead = 0; ++ if (mCodecRead == (iconv_t)(-1)) mCodecRead = 0; + + mCodecWrite = iconv_open(down, up); +- if (mCodecWrite == (void*)-1) mCodecWrite = 0; ++ if (mCodecWrite == (iconv_t)(-1)) mCodecWrite = 0; + } + + #define BUF_SIZE 10240 +--- a/src/lib/io.h ++++ b/src/lib/io.h +@@ -23,6 +23,7 @@ + + #include "type.h" + #include "instance.h" ++#include + + class IoPipe { + public: +@@ -47,7 +48,7 @@ private: + void writeIo(s8 *buf, u32 len); + + s32 mFd; +- void *mCodecRead, *mCodecWrite; ++ iconv_t mCodecRead, mCodecWrite; + s8 mBufRead[16], mBufWrite[16]; + u32 mBufLenRead, mBufLenWrite; + }; diff --git a/package/fbterm/Config.in b/package/fbterm/Config.in new file mode 100644 index 00000000..08316708 --- /dev/null +++ b/package/fbterm/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_FBTERM + bool "fbterm" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_ENABLE_LOCALE + depends on BR2_USE_WCHAR + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_FONTCONFIG + select BR2_PACKAGE_LIBERATION + help + fbterm is a fast terminal emulator for Linux with frame buffer + device or VESA video card. + + https://code.google.com/archive/p/fbterm/ + +comment "fbterm needs a toolchain w/ C++, wchar, locale" + depends on BR2_USE_MMU + depends on !(BR2_INSTALL_LIBSTDCPP && BR2_ENABLE_LOCALE && BR2_USE_WCHAR) diff --git a/package/fbterm/fbterm.hash b/package/fbterm/fbterm.hash new file mode 100644 index 00000000..37c32df7 --- /dev/null +++ b/package/fbterm/fbterm.hash @@ -0,0 +1,4 @@ +# From http://code.google.com/p/fbterm/downloads/detail?name=fbterm-1.7.0.tar.gz&can=2&q= +sha1 dc7b7ff29212c1551f35bf7a50967454d3b8c67c fbterm-1.7.0.tar.gz +# locally computed +sha256 b2b961f07e97c4fb78074276da304ea36b85dc299aae5efb79080cedaea3d5ac COPYING diff --git a/package/fbterm/fbterm.mk b/package/fbterm/fbterm.mk new file mode 100644 index 00000000..99648278 --- /dev/null +++ b/package/fbterm/fbterm.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# fbterm +# +################################################################################ + +FBTERM_VERSION = 1.7.0 +FBTERM_SITE = https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/fbterm +FBTERM_LICENSE = GPL-2.0+ +FBTERM_LICENSE_FILES = COPYING +FBTERM_DEPENDENCIES = fontconfig liberation + +ifeq ($(BR2_PACKAGE_GPM),y) +FBTERM_DEPENDENCIES += gpm +FBTERM_CONF_OPTS += --enable-gpm +else +FBTERM_CONF_OPTS += --disable-gpm +endif + +$(eval $(autotools-package)) diff --git a/package/fbtft/Config.in b/package/fbtft/Config.in new file mode 100644 index 00000000..0a4de190 --- /dev/null +++ b/package/fbtft/Config.in @@ -0,0 +1,13 @@ +# Prompt-less option, because this package is not doing anything +# except downloading the FB TFT sources. The real work is done by a +# Linux extension. +config BR2_PACKAGE_FBTFT + bool + depends on BR2_LINUX_KERNEL + help + Linux Framebuffer drivers for small TFT LCD display modules, + e.g. Adafruit PiTFT displays for Raspberry Pi. + + This is only the download helper for the kernel patch. + + https://github.com/notro/fbtft diff --git a/package/fbtft/fbtft.hash b/package/fbtft/fbtft.hash new file mode 100644 index 00000000..5d08d0ef --- /dev/null +++ b/package/fbtft/fbtft.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 0e81de89fdd7ab810716fc0549e767527f342e829309dee5c2cca1e9d1728770 fbtft-274035404701245e7491c0c6471c5b72ade4d491.tar.gz +sha256 a9ca80d65a5ef10fe614a6c1e8c8d4d3b96637e8855a96c7cf0fa438526097a7 fbtft-core.c diff --git a/package/fbtft/fbtft.mk b/package/fbtft/fbtft.mk new file mode 100644 index 00000000..cc11d867 --- /dev/null +++ b/package/fbtft/fbtft.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# fbtft +# +################################################################################ + +FBTFT_VERSION = 274035404701245e7491c0c6471c5b72ade4d491 +FBTFT_SITE = $(call github,notro,fbtft,$(FBTFT_VERSION)) +FBTFT_LICENSE = GPL-2.0 +FBTFT_LICENSE_FILES = fbtft-core.c + +$(eval $(generic-package)) diff --git a/package/fbv/0002-cross.patch b/package/fbv/0002-cross.patch new file mode 100644 index 00000000..ab5f0fb4 --- /dev/null +++ b/package/fbv/0002-cross.patch @@ -0,0 +1,44 @@ +diff -urpN fbv-1.0b.orig/configure fbv-1.0b/configure +--- fbv-1.0b.orig/configure 2004-09-07 13:29:27.000000000 +0200 ++++ fbv-1.0b/configure 2008-04-24 10:52:37.000000000 +0200 +@@ -80,6 +80,7 @@ while true ; do + esac + done + ++[ -z "$CC" ] && CC=cc + [ -z "$prefix" ] && prefix="/usr/local" + [ -z "$bindir" ] && bindir="${prefix}/bin" + [ -z "$mandir" ] && mandir="${prefix}/man" +@@ -106,12 +107,12 @@ xdir="/usr/X11R6" + ungif="no" + echo "libungif check" >>./config.log + echo " 1st:" >>./config.log +-cc 2>>./config.log >>./config.log -o \$\$~test \$\$~test.c -lungif $libs ++$CC 2>>./config.log >>./config.log -o \$\$~test \$\$~test.c -lungif $libs + if [ -e \$\$~test ]; then + libs="-lungif $libs" ; ungif="yes" + else + echo " 2nd: -lX11 -L$xdir/lib" >>./config.log +- cc 2>>./config.log >>./config.log -o \$\$~test \$\$~test.c -lungif -lX11 -L$xdir/lib $libs ++ $CC 2>>./config.log >>./config.log -o \$\$~test \$\$~test.c -lungif -lX11 -L$xdir/lib $libs + if [ -e \$\$~test ]; then + libs="-lungif -lX11 -L$xdir/lib $libs" ; ungif="yes" + fi +@@ -124,7 +125,7 @@ echo "libungif: $ungif" >> ./config.log + echo -n "checking for libjpeg presence... " + if [ "$jpeg" != "disabled" ]; then + jpeg="no" +-cc 2>>./config.log >>./config.log -o \$\$~test \$\$~test.c -ljpeg $libs ++$CC 2>>./config.log >>./config.log -o \$\$~test \$\$~test.c -ljpeg $libs + if [ -e \$\$~test ]; then + libs="-ljpeg $libs" ; jpeg="yes" + fi +@@ -135,7 +136,7 @@ echo "libjpeg: $jpeg" >> ./config.log + echo -n "checking for libpng presence... " + if [ "$png" != "disabled" ]; then + png="no" +-cc 2>>./config.log >>./config.log -o \$\$~test \$\$~test.c -lpng $libs ++$CC 2>>./config.log >>./config.log -o \$\$~test \$\$~test.c -lpng $libs + if [ -e \$\$~test ]; then + libs="-lpng $libs" ; png="yes" + fi diff --git a/package/fbv/0003-fix-24bpp-support-on-big-endian.patch b/package/fbv/0003-fix-24bpp-support-on-big-endian.patch new file mode 100644 index 00000000..23185ac4 --- /dev/null +++ b/package/fbv/0003-fix-24bpp-support-on-big-endian.patch @@ -0,0 +1,32 @@ +diff -upr a/fb_display.c b/fb_display.c +--- a/fb_display.c 2007-06-01 16:52:45.000000000 +0200 ++++ b/fb_display.c 2007-06-01 16:51:43.000000000 +0200 +@@ -307,7 +307,7 @@ void* convertRGB2FB(int fh, unsigned cha + { + unsigned long i; + void *fbbuff = NULL; +- u_int8_t *c_fbbuff; ++ u_int8_t *c_fbbuff; + u_int16_t *s_fbbuff; + u_int32_t *i_fbbuff; + +@@ -335,6 +335,16 @@ void* convertRGB2FB(int fh, unsigned cha + fbbuff = (void *) s_fbbuff; + break; + case 24: ++ *cpp = 3; ++ c_fbbuff = (unsigned char *) malloc(count * 3 * sizeof(unsigned char)); ++ for(i = 0; i < (3 * count); i += 3) { ++ /* Big endian framebuffer. */ ++ c_fbbuff[i] = rgbbuff[i+2]; ++ c_fbbuff[i+1] = rgbbuff[i+1]; ++ c_fbbuff[i+2] = rgbbuff[i]; ++ } ++ fbbuff = (void *) c_fbbuff; ++ break; + case 32: + *cpp = 4; + i_fbbuff = (unsigned int *) malloc(count * sizeof(unsigned int)); +Only in build_avr32/fbv-1.0b-modified: .fb_display.c.swp +Binary files build_avr32/fbv-1.0b/fb_display.o and build_avr32/fbv-1.0b-modified/fb_display.o differ +Binary files build_avr32/fbv-1.0b/fbv and build_avr32/fbv-1.0b-modified/fbv differ diff --git a/package/fbv/0004-fix-bgr555.patch b/package/fbv/0004-fix-bgr555.patch new file mode 100644 index 00000000..8f185f0a --- /dev/null +++ b/package/fbv/0004-fix-bgr555.patch @@ -0,0 +1,64 @@ +[PATCH] fbv: support bgr555 format + +Signed-off-by: Josh.Wu +diff -Naur fbv-1.0b-ori/fb_display.c fbv-1.0b/fb_display.c +--- fbv-1.0b-ori/fb_display.c 2010-04-02 09:38:15.000000000 +0800 ++++ fbv-1.0b/fb_display.c 2010-04-01 18:54:15.000000000 +0800 +@@ -297,6 +297,14 @@ + ((b >> 3) & 31) ); + } + ++inline static unsigned short make15color_bgr(unsigned char r, unsigned char g, unsigned char b) ++{ ++ return ( ++ (((b >> 3) & 31) << 10) | ++ (((g >> 3) & 31) << 5) | ++ ((r >> 3) & 31) ); ++} ++ + inline static unsigned short make16color(unsigned char r, unsigned char g, unsigned char b) + { + return ( +@@ -313,6 +321,14 @@ + u_int16_t *s_fbbuff; + u_int32_t *i_fbbuff; + ++ int is_bgr555 = 0; ++ struct fb_var_screeninfo var; ++ getVarScreenInfo(fh, &var); ++ if(var.red.offset == 0 && ++ var.green.offset == 5 && ++ var.blue.offset == 10) ++ is_bgr555 = 1; ++ + switch(bpp) + { + case 8: +@@ -325,15 +341,23 @@ + case 15: + *cpp = 2; + s_fbbuff = (unsigned short *) malloc(count * sizeof(unsigned short)); +- for(i = 0; i < count ; i++) +- s_fbbuff[i] = make15color(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]); ++ if(is_bgr555) ++ for(i = 0; i < count ; i++) ++ s_fbbuff[i] = make15color_bgr(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]); ++ else ++ for(i = 0; i < count ; i++) ++ s_fbbuff[i] = make15color(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]); + fbbuff = (void *) s_fbbuff; + break; + case 16: + *cpp = 2; + s_fbbuff = (unsigned short *) malloc(count * sizeof(unsigned short)); +- for(i = 0; i < count ; i++) +- s_fbbuff[i] = make16color(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]); ++ if(is_bgr555) ++ for(i = 0; i < count ; i++) ++ s_fbbuff[i] = make15color_bgr(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]); ++ else ++ for(i = 0; i < count ; i++) ++ s_fbbuff[i] = make16color(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]); + fbbuff = (void *) s_fbbuff; + break; + case 24: diff --git a/package/fbv/0005-giflib.patch b/package/fbv/0005-giflib.patch new file mode 100644 index 00000000..70433535 --- /dev/null +++ b/package/fbv/0005-giflib.patch @@ -0,0 +1,84 @@ +Adjust source code to work with giflib 5.1x + +Downloaded patch for gif.c from +https://projects.archlinux.org/svntogit/community.git/plain/trunk/giflib-5.1.patch?h=packages/fbv + +Signed-off-by: Bernd Kuhls + +diff -wbBur fbv-1.0b/gif.c fbv-1.0b.my/gif.c +--- fbv-1.0b/gif.c 2003-08-25 00:23:02.000000000 +0400 ++++ fbv-1.0b.my/gif.c 2014-05-29 18:39:41.337332872 +0400 +@@ -31,10 +31,10 @@ + #include + #define min(a,b) ((a) < (b) ? (a) : (b)) + #define gflush return(FH_ERROR_FILE); +-#define grflush { DGifCloseFile(gft); return(FH_ERROR_FORMAT); } +-#define mgrflush { free(lb); free(slb); DGifCloseFile(gft); return(FH_ERROR_FORMAT); } ++#define grflush { DGifCloseFile(gft, NULL); return(FH_ERROR_FORMAT); } ++#define mgrflush { free(lb); free(slb); DGifCloseFile(gft, NULL); return(FH_ERROR_FORMAT); } + #define agflush return(FH_ERROR_FORMAT); +-#define agrflush { DGifCloseFile(gft); return(FH_ERROR_FORMAT); } ++#define agrflush { DGifCloseFile(gft, NULL); return(FH_ERROR_FORMAT); } + + + int fh_gif_id(char *name) +@@ -81,7 +81,7 @@ + ColorMapObject *cmap; + int cmaps; + +- gft=DGifOpenFileName(name); ++ gft=DGifOpenFileName(name, NULL); + if(gft==NULL){printf("err5\n"); gflush;} ////////// + do + { +@@ -170,7 +170,7 @@ + } + } + while( rt!= TERMINATE_RECORD_TYPE ); +- DGifCloseFile(gft); ++ DGifCloseFile(gft, NULL); + return(FH_ERROR_OK); + } + +@@ -184,7 +184,7 @@ + int extcode; + GifRecordType rt; + +- gft=DGifOpenFileName(name); ++ gft=DGifOpenFileName(name, NULL); + if(gft==NULL) gflush; + do + { +@@ -197,7 +197,7 @@ + px=gft->Image.Width; + py=gft->Image.Height; + *x=px; *y=py; +- DGifCloseFile(gft); ++ DGifCloseFile(gft, NULL); + return(FH_ERROR_OK); + break; + case EXTENSION_RECORD_TYPE: +@@ -210,7 +210,7 @@ + } + } + while( rt!= TERMINATE_RECORD_TYPE ); +- DGifCloseFile(gft); ++ DGifCloseFile(gft, NULL); + return(FH_ERROR_FORMAT); + } + #endif +diff -uNr fbv-1.0b.org/configure fbv-1.0b/configure +--- fbv-1.0b.org/configure 2004-09-07 13:29:27.000000000 +0200 ++++ fbv-1.0b/configure 2015-01-29 19:58:30.374599874 +0100 +@@ -106,9 +106,9 @@ + ungif="no" + echo "libungif check" >>./config.log + echo " 1st:" >>./config.log +-$CC 2>>./config.log >>./config.log -o \$\$~test \$\$~test.c -lungif $libs ++$CC 2>>./config.log >>./config.log -o \$\$~test \$\$~test.c -lgif $libs + if [ -e \$\$~test ]; then +- libs="-lungif $libs" ; ungif="yes" ++ libs="-lgif $libs" ; ungif="yes" + else + echo " 2nd: -lX11 -L$xdir/lib" >>./config.log + $CC 2>>./config.log >>./config.log -o \$\$~test \$\$~test.c -lungif -lX11 -L$xdir/lib $libs diff --git a/package/fbv/0006-include.patch b/package/fbv/0006-include.patch new file mode 100644 index 00000000..3d1cc17f --- /dev/null +++ b/package/fbv/0006-include.patch @@ -0,0 +1,20 @@ +diff -urpN fbv-1.0b.orig/fb_display.c fbv-1.0b/fb_display.c +--- fbv-1.0b.orig/fb_display.c 2004-09-07 14:09:43.000000000 +0200 ++++ fbv-1.0b/fb_display.c 2008-04-24 10:48:29.000000000 +0200 +@@ -18,8 +18,6 @@ + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +-#include +- + #include + #include + #include +@@ -31,6 +29,7 @@ + #include + #include + #include ++#include + #include "config.h" + /* Public Use Functions: + * diff --git a/package/fbv/0007-libpng15.patch b/package/fbv/0007-libpng15.patch new file mode 100644 index 00000000..7872a73c --- /dev/null +++ b/package/fbv/0007-libpng15.patch @@ -0,0 +1,24 @@ +Support for libpng 1.5+ shamelessly taken from Gentoo. + +Signed-off-by: Gustavo Zacarias + +--- a/png.c ++++ b/png.c +@@ -69,7 +69,7 @@ + fclose(fh); return(FH_ERROR_FORMAT); + } + rp=0; +- if (setjmp(png_ptr->jmpbuf)) ++ if (setjmp(png_jmpbuf(png_ptr))) + { + png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); + if(rp) free(rp); +@@ -161,7 +161,7 @@ + fclose(fh); return(FH_ERROR_FORMAT); + } + rp=0; +- if (setjmp(png_ptr->jmpbuf)) ++ if (setjmp(png_jmpbuf(png_ptr))) + { + png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); + if(rp) free(rp); diff --git a/package/fbv/Config.in b/package/fbv/Config.in new file mode 100644 index 00000000..22062763 --- /dev/null +++ b/package/fbv/Config.in @@ -0,0 +1,33 @@ +config BR2_PACKAGE_FBV + bool "fbv" + help + fbv is a very simple graphic file viewer for the framebuffer + console, capable of displaying GIF, JPEG, PNG and BMP files + using libungif, libjpeg and libpng. + + http://freshmeat.net/projects/fbv/ + +if BR2_PACKAGE_FBV + +config BR2_PACKAGE_FBV_PNG + bool "PNG support" + default y + select BR2_PACKAGE_LIBPNG + help + Enable support for PNG using libpng. + +config BR2_PACKAGE_FBV_JPEG + bool "JPEG support" + default y + select BR2_PACKAGE_JPEG + help + Enable support for JPEG using IJG's libjpeg. + +config BR2_PACKAGE_FBV_GIF + bool "GIF support" + default y + select BR2_PACKAGE_GIFLIB + help + Enable support for GIF using giflib. + +endif # BR2_PACKAGE_FBV diff --git a/package/fbv/fbv.hash b/package/fbv/fbv.hash new file mode 100644 index 00000000..3f25465b --- /dev/null +++ b/package/fbv/fbv.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 9b55b9dafd5eb01562060d860e267e309a1876e8ba5ce4d3303484b94129ab3c fbv-1.0b.tar.gz +sha256 bf21d97bafcaacb5d6bc3d5502030c340f0e0593614078ab017af91e950083af COPYING diff --git a/package/fbv/fbv.mk b/package/fbv/fbv.mk new file mode 100644 index 00000000..a69e4ad5 --- /dev/null +++ b/package/fbv/fbv.mk @@ -0,0 +1,57 @@ +################################################################################ +# +# fbv +# +################################################################################ + +FBV_VERSION = 1.0b +FBV_SITE = http://s-tech.elsat.net.pl/fbv + +FBV_LICENSE = GPL-2.0 +FBV_LICENSE_FILES = COPYING + +### image format dependencies and configure options +FBV_DEPENDENCIES = # empty +FBV_CONFIGURE_OPTS = # empty +ifeq ($(BR2_PACKAGE_FBV_PNG),y) +FBV_DEPENDENCIES += libpng + +# libpng in turn depends on other libraries +ifeq ($(BR2_STATIC_LIBS),y) +FBV_CONFIGURE_OPTS += "--libs=`$(PKG_CONFIG_HOST_BINARY) --libs libpng`" +endif + +else +FBV_CONFIGURE_OPTS += --without-libpng +endif +ifeq ($(BR2_PACKAGE_FBV_JPEG),y) +FBV_DEPENDENCIES += jpeg +else +FBV_CONFIGURE_OPTS += --without-libjpeg +endif +ifeq ($(BR2_PACKAGE_FBV_GIF),y) +FBV_DEPENDENCIES += giflib +else +FBV_CONFIGURE_OPTS += --without-libungif +endif + +#fbv doesn't support cross-compilation +define FBV_CONFIGURE_CMDS + (cd $(FBV_DIR); rm -f config.cache; \ + $(TARGET_CONFIGURE_OPTS) \ + $(TARGET_CONFIGURE_ARGS) \ + ./configure \ + --prefix=/usr \ + $(FBV_CONFIGURE_OPTS) \ + ) +endef + +define FBV_BUILD_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) +endef + +define FBV_INSTALL_TARGET_CMDS + $(INSTALL) -D $(@D)/fbv $(TARGET_DIR)/usr/bin/fbv +endef + +$(eval $(autotools-package)) diff --git a/package/fcgiwrap/0001-use-LIBS-from-configure.patch b/package/fcgiwrap/0001-use-LIBS-from-configure.patch new file mode 100644 index 00000000..12563c42 --- /dev/null +++ b/package/fcgiwrap/0001-use-LIBS-from-configure.patch @@ -0,0 +1,22 @@ +Makefile.in: Use LIBS from configure rather than specifying -lfcgi manually. + +libfcgi needs libm and fcgiwrap does not use libtool or pkgconf to +detect libfcgi, so we need to add -lm explicitely when using static +libs. Buildroot does this by providing LIBS=-lm to configure when +needed. However fcgiwrap does not use Automake and its Makefile.in +ignores LIBS from configure. Fix it with this patch. + +Signed-off-by: Thomas Claveirole + +diff -ur a/Makefile.in b/Makefile.in +--- a/Makefile.in 2013-02-03 14:25:17.000000000 +0100 ++++ b/Makefile.in 2015-05-29 16:33:23.895280138 +0200 +@@ -16,7 +16,7 @@ + install -m 644 systemd/fcgiwrap.service $(DESTDIR)@systemdsystemunitdir@ + endif + +-LDLIBS = -lfcgi @systemd_LIBS@ ++LDLIBS = @LIBS@ @systemd_LIBS@ + CFLAGS = @AM_CFLAGS@ + + fcgiwrap: fcgiwrap.c diff --git a/package/fcgiwrap/0002-link-with-libsystemd-instead-of-libsystemd-daemon.patch b/package/fcgiwrap/0002-link-with-libsystemd-instead-of-libsystemd-daemon.patch new file mode 100644 index 00000000..e88706f8 --- /dev/null +++ b/package/fcgiwrap/0002-link-with-libsystemd-instead-of-libsystemd-daemon.patch @@ -0,0 +1,20 @@ +configure.ac: Check for libsystemd, not libsystemd-daemon. + +Newer versions of systemd do not provide libsystemd-daemon anymore. +Therefore, use libsystemd instead. + +Signed-off-by: Thomas Claveirole + +diff --git a/configure.ac b/configure.ac +index bb3674e..2b02ef4 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -28,7 +28,7 @@ AC_ARG_WITH([systemd], + [], [with_systemd=check]) + have_systemd=no + if test "x$with_systemd" != "xno"; then +- PKG_CHECK_MODULES(systemd, [libsystemd-daemon], ++ PKG_CHECK_MODULES(systemd, [libsystemd], + [AC_DEFINE(HAVE_SYSTEMD, 1, [Define if systemd is available]) + have_systemd=yes], + have_systemd=no) diff --git a/package/fcgiwrap/Config.in b/package/fcgiwrap/Config.in new file mode 100644 index 00000000..b1dbd72d --- /dev/null +++ b/package/fcgiwrap/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_FCGIWRAP + bool "fcgiwrap" + depends on BR2_USE_MMU # libfcgi + select BR2_PACKAGE_LIBFCGI + help + fcgiwrap is a simple server for running CGI applications + over FastCGI. It hopes to provide clean CGI support to Nginx + (and other web servers that may need it). + + https://github.com/gnosek/fcgiwrap diff --git a/package/fcgiwrap/fcgiwrap.hash b/package/fcgiwrap/fcgiwrap.hash new file mode 100644 index 00000000..cf2c785c --- /dev/null +++ b/package/fcgiwrap/fcgiwrap.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 c72f2933669ebd21605975c5a11f26b9739e32e4f9d324fb9e1a1925e9c2ae88 fcgiwrap-99c942c90063c73734e56bacaa65f947772d9186.tar.gz +sha256 1504c301f6d417f2626085337e5c3bb3dc0282265089396ab36bfe1942feef1c COPYING diff --git a/package/fcgiwrap/fcgiwrap.mk b/package/fcgiwrap/fcgiwrap.mk new file mode 100644 index 00000000..62c4c136 --- /dev/null +++ b/package/fcgiwrap/fcgiwrap.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# fcgiwrap +# +################################################################################ + +FCGIWRAP_VERSION = 99c942c90063c73734e56bacaa65f947772d9186 +FCGIWRAP_SITE = $(call github,gnosek,fcgiwrap,$(FCGIWRAP_VERSION)) +FCGIWRAP_DEPENDENCIES = host-pkgconf libfcgi +FCGIWRAP_LICENSE = MIT +FCGIWRAP_LICENSE_FILES = COPYING +FCGIWRAP_AUTORECONF = YES +FCGIWRAP_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -Wno-error" + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +FCGIWRAP_DEPENDENCIES += systemd +FCGIWRAP_CONF_OPTS += --with-systemd +else +FCGIWRAP_CONF_OPTS += --without-systemd +endif + +# libfcgi needs libm and fcgiwrap does not use libtool or pkgconf to +# detect libfcgi, so we need to add -lm explicitely when using static +# libs. +ifeq ($(BR2_STATIC_LIBS),y) +FCGIWRAP_CONF_OPTS += LIBS=-lm +endif + +# fcgiwrap uses Autoconf, but not Automake, so we need to provide +# these to make. +FCGIWRAP_MAKE_ENV = $(TARGET_CONFIGURE_OPTS) + +$(eval $(autotools-package)) diff --git a/package/fconfig/Config.in b/package/fconfig/Config.in new file mode 100644 index 00000000..e7dd58a8 --- /dev/null +++ b/package/fconfig/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_FCONFIG + bool "fconfig" + help + fconfig - get/set RedBoot configuration parameters from Linux. + + http://andrzejekiert.ovh.org/software.html.en diff --git a/package/fconfig/fconfig.hash b/package/fconfig/fconfig.hash new file mode 100644 index 00000000..98e7fbf1 --- /dev/null +++ b/package/fconfig/fconfig.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 4ff0e8f07e35e46b705c0dbe9d9544ede01ea092a69e3f7db03e55a3f2bb8eb7 fconfig-20080329.tar.gz +sha256 e698a9ea4d6dab0a15d3d6fd354b97b820629244f946529cc7f42b2b8e8f16d0 fconfig.c diff --git a/package/fconfig/fconfig.mk b/package/fconfig/fconfig.mk new file mode 100644 index 00000000..1e6fbb40 --- /dev/null +++ b/package/fconfig/fconfig.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# fconfig +# +################################################################################ + +FCONFIG_VERSION = 20080329 +# Real upstream location has been disabled +# FCONFIG_SITE = http://andrzejekiert.ovh.org/software/fconfig +FCONFIG_SITE = http://sources.buildroot.net +FCONFIG_LICENSE = GPL-2.0+ +FCONFIG_LICENSE_FILES = fconfig.c + +define FCONFIG_BUILD_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) +endef + +define FCONFIG_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/fconfig $(TARGET_DIR)/sbin/fconfig +endef + +$(eval $(generic-package)) diff --git a/package/fdk-aac/Config.in b/package/fdk-aac/Config.in new file mode 100644 index 00000000..26e060b9 --- /dev/null +++ b/package/fdk-aac/Config.in @@ -0,0 +1,24 @@ +# These are the architectures supported by FDK AAC +config BR2_PACKAGE_FDK_AAC_ARCH_SUPPORTS + bool + default y if BR2_aarch64 + default y if BR2_arm || BR2_armeb + default y if BR2_i386 || BR2_x86_64 + default y if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el + default y if BR2_powerpc + default y if BR2_sh + +config BR2_PACKAGE_FDK_AAC + bool "fdk-aac" + depends on BR2_PACKAGE_FDK_AAC_ARCH_SUPPORTS + depends on BR2_INSTALL_LIBSTDCPP + help + The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC + Codec") is software that implements the MPEG Advanced Audio + Coding ("AAC") encoding and decoding scheme for digital audio + + http://sourceforge.net/projects/opencore-amr/files/fdk-aac/ + +comment "fdk-aac needs a toolchain w/ C++" + depends on BR2_PACKAGE_FDK_AAC_ARCH_SUPPORTS + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/fdk-aac/fdk-aac.hash b/package/fdk-aac/fdk-aac.hash new file mode 100644 index 00000000..6b41e66a --- /dev/null +++ b/package/fdk-aac/fdk-aac.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/opencore-amr/files/fdk-aac/ +sha1 575e90e85321c5be44dcf743a40ea57ab0835928 fdk-aac-2.0.1.tar.gz +md5 e8b0b38e837df455b8a1ba75417ff0ad fdk-aac-2.0.1.tar.gz +# Locally computed: +sha256 840133aa9412153894af03b27b03dde1188772442c316a4ce2a24ed70093f271 fdk-aac-2.0.1.tar.gz +sha256 95ec80da40b4af12ad4c4f3158c9cfb80f2479f3246e4260cb600827cc8c7836 NOTICE diff --git a/package/fdk-aac/fdk-aac.mk b/package/fdk-aac/fdk-aac.mk new file mode 100644 index 00000000..92753b5e --- /dev/null +++ b/package/fdk-aac/fdk-aac.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# fdk-aac +# +################################################################################ + +FDK_AAC_VERSION = 2.0.1 +FDK_AAC_SITE = http://downloads.sourceforge.net/project/opencore-amr/fdk-aac +FDK_AAC_LICENSE = fdk-aac license +FDK_AAC_LICENSE_FILES = NOTICE + +FDK_AAC_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/feh/Config.in b/package/feh/Config.in new file mode 100644 index 00000000..7a348a15 --- /dev/null +++ b/package/feh/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_FEH + bool "feh" + depends on BR2_PACKAGE_XORG7 + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_XLIB_LIBXT + select BR2_PACKAGE_IMLIB2 + select BR2_PACKAGE_IMLIB2_PNG + select BR2_PACKAGE_IMLIB2_JPEG + select BR2_PACKAGE_IMLIB2_X + help + feh is an X11 image viewer aimed mostly at console users. + + http://feh.finalrewind.org/ diff --git a/package/feh/feh.hash b/package/feh/feh.hash new file mode 100644 index 00000000..806bca08 --- /dev/null +++ b/package/feh/feh.hash @@ -0,0 +1,3 @@ +# Locally calculated after checking pgp signature +sha256 388f9dcc8284031023364355e23a82c276e79ca614f2dcd64d2f927857a4531e feh-3.5.tar.bz2 +sha256 2c3a31327dc3cc3331aa6e759d378e4f66d0ece7174a0d5aa137f3cba4bf0509 COPYING diff --git a/package/feh/feh.mk b/package/feh/feh.mk new file mode 100644 index 00000000..09011cc1 --- /dev/null +++ b/package/feh/feh.mk @@ -0,0 +1,46 @@ +################################################################################ +# +# feh +# +################################################################################ + +FEH_VERSION = 3.5 +FEH_SOURCE = feh-$(FEH_VERSION).tar.bz2 +FEH_SITE = http://feh.finalrewind.org +FEH_DEPENDENCIES = imlib2 libpng xlib_libXt +FEH_LICENSE = MIT +FEH_LICENSE_FILES = COPYING +FEH_CPE_ID_VENDOR = feh_project + +ifeq ($(BR2_PACKAGE_LIBCURL),y) +FEH_DEPENDENCIES += libcurl +FEH_MAKE_OPTS += curl=1 +else +FEH_MAKE_OPTS += curl=0 +endif + +ifeq ($(BR2_PACKAGE_LIBEXIF),y) +FEH_DEPENDENCIES += libexif +FEH_MAKE_OPTS += exif=1 +else +FEH_MAKE_OPTS += exif=0 +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXINERAMA),y) +FEH_DEPENDENCIES += xlib_libXinerama +FEH_MAKE_OPTS += xinerama=1 +else +FEH_MAKE_OPTS += xinerama=0 +endif + +define FEH_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) CFLAGS="$(TARGET_CFLAGS) -std=gnu99" \ + $(MAKE) $(FEH_MAKE_OPTS) -C $(@D) all +endef + +define FEH_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(FEH_MAKE_OPTS) PREFIX=/usr \ + DESTDIR=$(TARGET_DIR) -C $(@D) install +endef + +$(eval $(generic-package)) diff --git a/package/fetchmail/Config.in b/package/fetchmail/Config.in new file mode 100644 index 00000000..a4bf5a7c --- /dev/null +++ b/package/fetchmail/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_FETCHMAIL + bool "fetchmail" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_CA_CERTIFICATES + select BR2_PACKAGE_OPENSSL + help + Fetchmail - the mail-retrieval daemon + Client daemon to move mail from POP and IMAP to your local + computer + + http://www.fetchmail.info/ diff --git a/package/fetchmail/fetchmail.hash b/package/fetchmail/fetchmail.hash new file mode 100644 index 00000000..41d71088 --- /dev/null +++ b/package/fetchmail/fetchmail.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/p/fetchmail/mailman/message/37327392/ +sha256 c82141ae2e8f0039ceb0c5c2eda43c5e93ad0bf7f9c6bb628092b3be74386176 fetchmail-6.4.20.tar.xz +# From https://sourceforge.net/projects/fetchmail/files/branch_6.4/ +sha1 ac6a6c4afa105e097d025340cf78b32e0c3b0c8e fetchmail-6.4.20.tar.xz +# Locally computed: +sha256 6346b5aa04e258fa4326272ea92372d796b4382aa963535ae98a3bb5f8cd5aeb COPYING diff --git a/package/fetchmail/fetchmail.mk b/package/fetchmail/fetchmail.mk new file mode 100644 index 00000000..d1c5fa37 --- /dev/null +++ b/package/fetchmail/fetchmail.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# fetchmail +# +################################################################################ + +FETCHMAIL_VERSION_MAJOR = 6.4 +FETCHMAIL_VERSION = $(FETCHMAIL_VERSION_MAJOR).20 +FETCHMAIL_SOURCE = fetchmail-$(FETCHMAIL_VERSION).tar.xz +FETCHMAIL_SITE = http://downloads.sourceforge.net/project/fetchmail/branch_$(FETCHMAIL_VERSION_MAJOR) +FETCHMAIL_LICENSE = GPL-2.0; some exceptions are mentioned in COPYING +FETCHMAIL_LICENSE_FILES = COPYING +FETCHMAIL_CPE_ID_VENDOR = fetchmail + +FETCHMAIL_CONF_OPTS = \ + --with-ssl=$(STAGING_DIR)/usr + +FETCHMAIL_DEPENDENCIES = \ + ca-certificates \ + host-pkgconf \ + openssl \ + $(TARGET_NLS_DEPENDENCIES) + +$(eval $(autotools-package)) diff --git a/package/ffmpeg/0001-Merge-loongson-patches-from-upstream-master.patch b/package/ffmpeg/0001-Merge-loongson-patches-from-upstream-master.patch new file mode 100644 index 00000000..de879173 --- /dev/null +++ b/package/ffmpeg/0001-Merge-loongson-patches-from-upstream-master.patch @@ -0,0 +1,20885 @@ +From 2ceab685d88663f1c3cba105fb744248e63d9f20 Mon Sep 17 00:00:00 2001 +From: Shiyou Yin +Date: Fri, 18 Sep 2020 15:46:43 +0800 +Subject: [PATCH 1/2] Merge loongson patches from upstream master. + +The latest patch: 5a844b638ac081e763709c38174596d3e02d6ece. +--- + configure | 167 +-- + ffbuild/common.mak | 10 +- + libavcodec/mips/Makefile | 7 + + libavcodec/mips/aacdec_mips.c | 8 +- + libavcodec/mips/aacpsdsp_mips.c | 13 +- + libavcodec/mips/aacpsy_mips.h | 14 +- + libavcodec/mips/aacsbr_mips.c | 2 +- + libavcodec/mips/blockdsp_init_mips.c | 40 +- + libavcodec/mips/cabac.h | 4 +- + libavcodec/mips/fft_mips.c | 12 +- + libavcodec/mips/h263dsp_init_mips.c | 18 +- + libavcodec/mips/h263dsp_msa.c | 5 +- + libavcodec/mips/h264chroma_init_mips.c | 55 +- + libavcodec/mips/h264chroma_mmi.c | 970 +++++++-------- + libavcodec/mips/h264chroma_msa.c | 87 +- + libavcodec/mips/h264dsp_init_mips.c | 225 ++-- + libavcodec/mips/h264dsp_mips.h | 42 +- + libavcodec/mips/h264dsp_mmi.c | 100 +- + libavcodec/mips/h264dsp_msa.c | 192 +-- + libavcodec/mips/h264idct_msa.c | 17 +- + libavcodec/mips/h264pred_init_mips.c | 210 ++-- + libavcodec/mips/h264pred_mmi.c | 8 +- + libavcodec/mips/h264qpel_init_mips.c | 412 ++++--- + libavcodec/mips/h264qpel_msa.c | 202 ++-- + libavcodec/mips/hevc_idct_msa.c | 28 +- + libavcodec/mips/hevc_lpf_sao_msa.c | 234 ++-- + libavcodec/mips/hevc_mc_bi_msa.c | 179 +-- + libavcodec/mips/hevc_mc_biw_msa.c | 184 +-- + libavcodec/mips/hevc_mc_uni_msa.c | 146 ++- + libavcodec/mips/hevc_mc_uniw_msa.c | 197 +-- + libavcodec/mips/hevcdsp_init_mips.c | 919 +++++++------- + libavcodec/mips/hevcdsp_mips.h | 91 ++ + libavcodec/mips/hevcdsp_mmi.c | 1183 +++++++++++++++++++ + libavcodec/mips/hevcdsp_msa.c | 63 +- + libavcodec/mips/hevcpred_init_mips.c | 40 +- + libavcodec/mips/hevcpred_msa.c | 83 +- + libavcodec/mips/hpeldsp_init_mips.c | 180 ++- + libavcodec/mips/hpeldsp_msa.c | 76 +- + libavcodec/mips/idctdsp_init_mips.c | 74 +- + libavcodec/mips/idctdsp_msa.c | 9 +- + libavcodec/mips/me_cmp_init_mips.c | 50 +- + libavcodec/mips/me_cmp_msa.c | 8 +- + libavcodec/mips/mpegaudiodsp_mips_float.c | 492 ++++---- + libavcodec/mips/mpegvideo_init_mips.c | 48 +- + libavcodec/mips/mpegvideo_mmi.c | 2 +- + libavcodec/mips/mpegvideoencdsp_init_mips.c | 21 +- + libavcodec/mips/pixblockdsp_init_mips.c | 63 +- + libavcodec/mips/qpeldsp_init_mips.c | 270 +++-- + libavcodec/mips/qpeldsp_msa.c | 380 +++--- + libavcodec/mips/sbrdsp_mips.c | 19 +- + libavcodec/mips/simple_idct_mmi.c | 2 +- + libavcodec/mips/simple_idct_msa.c | 98 +- + libavcodec/mips/vc1dsp_init_mips.c | 164 +-- + libavcodec/mips/vc1dsp_mips.h | 31 +- + libavcodec/mips/vc1dsp_mmi.c | 8 +- + libavcodec/mips/vc1dsp_msa.c | 461 ++++++++ + libavcodec/mips/videodsp_init.c | 10 +- + libavcodec/mips/vp3dsp_idct_mmi.c | 769 ++++++++++++ + libavcodec/mips/vp3dsp_idct_msa.c | 598 ++++++++++ + libavcodec/mips/vp3dsp_init_mips.c | 50 + + libavcodec/mips/vp3dsp_mips.h | 43 + + libavcodec/mips/vp8_idct_msa.c | 11 +- + libavcodec/mips/vp8_lpf_msa.c | 27 +- + libavcodec/mips/vp8_mc_msa.c | 113 +- + libavcodec/mips/vp8dsp_init_mips.c | 240 ++-- + libavcodec/mips/vp9_idct_msa.c | 83 +- + libavcodec/mips/vp9_intra_msa.c | 5 +- + libavcodec/mips/vp9_lpf_msa.c | 146 ++- + libavcodec/mips/vp9_mc_mmi.c | 628 ++++++++++ + libavcodec/mips/vp9_mc_msa.c | 121 +- + libavcodec/mips/vp9dsp_init_mips.c | 54 +- + libavcodec/mips/vp9dsp_mips.h | 50 + + libavcodec/mips/wmv2dsp_init_mips.c | 18 +- + libavcodec/mips/wmv2dsp_mips.h | 4 +- + libavcodec/mips/wmv2dsp_mmi.c | 4 +- + libavcodec/mips/xvid_idct_mmi.c | 4 +- + libavcodec/mips/xvididct_init_mips.c | 31 +- + libavcodec/mips/xvididct_mips.h | 4 +- + libavcodec/vp3dsp.c | 2 + + libavcodec/vp3dsp.h | 1 + + libavutil/cpu.c | 10 + + libavutil/cpu.h | 3 + + libavutil/cpu_internal.h | 2 + + libavutil/mips/Makefile | 2 +- + libavutil/mips/asmdefs.h | 42 + + libavutil/mips/cpu.c | 134 +++ + libavutil/mips/cpu.h | 28 + + libavutil/mips/generic_macros_msa.h | 572 ++++----- + libavutil/mips/mmiutils.h | 26 +- + libavutil/tests/cpu.c | 3 + + tests/checkasm/checkasm.c | 3 + + 91 files changed, 8175 insertions(+), 4289 deletions(-) + create mode 100644 libavcodec/mips/hevcdsp_mmi.c + create mode 100644 libavcodec/mips/vc1dsp_msa.c + create mode 100644 libavcodec/mips/vp3dsp_idct_mmi.c + create mode 100644 libavcodec/mips/vp3dsp_idct_msa.c + create mode 100644 libavcodec/mips/vp3dsp_init_mips.c + create mode 100644 libavcodec/mips/vp3dsp_mips.h + create mode 100644 libavcodec/mips/vp9_mc_mmi.c + create mode 100644 libavutil/mips/cpu.c + create mode 100644 libavutil/mips/cpu.h + +diff --git a/configure b/configure +index c966689..db57f4d 100755 +--- a/configure ++++ b/configure +@@ -439,6 +439,7 @@ Optimization options (experts only): + --disable-mipsdsp disable MIPS DSP ASE R1 optimizations + --disable-mipsdspr2 disable MIPS DSP ASE R2 optimizations + --disable-msa disable MSA optimizations ++ --disable-msa2 disable MSA2 optimizations + --disable-mipsfpu disable floating point MIPS optimizations + --disable-mmi disable Loongson SIMD optimizations + --disable-fast-unaligned consider unaligned accesses slow +@@ -1953,6 +1954,7 @@ ARCH_EXT_LIST_MIPS=" + mipsdsp + mipsdspr2 + msa ++ msa2 + " + + ARCH_EXT_LIST_LOONGSON=" +@@ -2476,8 +2478,9 @@ mips64r6_deps="mips" + mipsfpu_deps="mips" + mipsdsp_deps="mips" + mipsdspr2_deps="mips" +-mmi_deps="mips" ++mmi_deps_any="loongson2 loongson3" + msa_deps="mipsfpu" ++msa2_deps="msa" + + cpunop_deps="i686" + x86_64_select="i686" +@@ -4811,8 +4814,6 @@ elif enabled bfin; then + + elif enabled mips; then + +- cpuflags="-march=$cpu" +- + if [ "$cpu" != "generic" ]; then + disable mips32r2 + disable mips32r5 +@@ -4821,19 +4822,53 @@ elif enabled mips; then + disable mips64r6 + disable loongson2 + disable loongson3 ++ disable mipsdsp ++ disable mipsdspr2 ++ ++ cpuflags="-march=$cpu" + + case $cpu in +- 24kc|24kf*|24kec|34kc|1004kc|24kef*|34kf*|1004kf*|74kc|74kf) ++ # General ISA levels ++ mips1|mips3) ++ ;; ++ mips32r2) + enable mips32r2 +- disable msa + ;; +- p5600|i6400|p6600) +- disable mipsdsp +- disable mipsdspr2 ++ mips32r5) ++ enable mips32r2 ++ enable mips32r5 + ;; +- loongson*) +- enable loongson2 ++ mips64r2|mips64r5) ++ enable mips64r2 + enable loongson3 ++ ;; ++ # Cores from MIPS(MTI) ++ 24kc) ++ disable mipsfpu ++ enable mips32r2 ++ ;; ++ 24kf*|24kec|34kc|74Kc|1004kc) ++ enable mips32r2 ++ ;; ++ 24kef*|34kf*|1004kf*) ++ enable mipsdsp ++ enable mips32r2 ++ ;; ++ p5600) ++ enable mips32r2 ++ enable mips32r5 ++ check_cflags "-mtune=p5600" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" ++ ;; ++ i6400) ++ enable mips64r6 ++ check_cflags "-mtune=i6400 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64" ++ ;; ++ p6600) ++ enable mips64r6 ++ check_cflags "-mtune=p6600 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64" ++ ;; ++ # Cores from Loongson ++ loongson2e|loongson2f|loongson3*) + enable local_aligned + enable simd_align_16 + enable fast_64bit +@@ -4841,76 +4876,42 @@ elif enabled mips; then + enable fast_cmov + enable fast_unaligned + disable aligned_stack +- disable mipsfpu +- disable mipsdsp +- disable mipsdspr2 + # When gcc version less than 5.3.0, add -fno-expensive-optimizations flag. +- if [ $cc == gcc ]; then +- gcc_version=$(gcc -dumpversion) +- if [ "$(echo "$gcc_version 5.3.0" | tr " " "\n" | sort -rV | head -n 1)" == "$gcc_version" ]; then +- expensive_optimization_flag="" +- else ++ if test "$cc_type" = "gcc"; then ++ case $gcc_basever in ++ 2|2.*|3.*|4.*|5.0|5.1|5.2) + expensive_optimization_flag="-fno-expensive-optimizations" +- fi ++ ;; ++ *) ++ expensive_optimization_flag="" ++ ;; ++ esac + fi ++ + case $cpu in + loongson3*) ++ enable loongson3 + cpuflags="-march=loongson3a -mhard-float $expensive_optimization_flag" + ;; + loongson2e) ++ enable loongson2 + cpuflags="-march=loongson2e -mhard-float $expensive_optimization_flag" + ;; + loongson2f) ++ enable loongson2 + cpuflags="-march=loongson2f -mhard-float $expensive_optimization_flag" + ;; + esac + ;; + *) +- # Unknown CPU. Disable everything. +- warn "unknown CPU. Disabling all MIPS optimizations." +- disable mipsfpu +- disable mipsdsp +- disable mipsdspr2 +- disable msa +- disable mmi ++ warn "unknown MIPS CPU" + ;; + esac + +- case $cpu in +- 24kc) +- disable mipsfpu +- disable mipsdsp +- disable mipsdspr2 +- ;; +- 24kf*) +- disable mipsdsp +- disable mipsdspr2 +- ;; +- 24kec|34kc|1004kc) +- disable mipsfpu +- disable mipsdspr2 +- ;; +- 24kef*|34kf*|1004kf*) +- disable mipsdspr2 +- ;; +- 74kc) +- disable mipsfpu +- ;; +- p5600) +- enable mips32r5 +- check_cflags "-mtune=p5600" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" +- ;; +- i6400) +- enable mips64r6 +- check_cflags "-mtune=i6400 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64" +- ;; +- p6600) +- enable mips64r6 +- check_cflags "-mtune=p6600 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64" +- ;; +- esac + else +- # We do not disable anything. Is up to the user to disable the unwanted features. ++ disable mipsdsp ++ disable mipsdspr2 ++ # Disable DSP stuff for generic CPU, it can't be detected at runtime. + warn 'generic cpu selected' + fi + +@@ -5644,28 +5645,43 @@ EOF + + elif enabled mips; then + +- enabled loongson2 && check_inline_asm loongson2 '"dmult.g $8, $9, $10"' +- enabled loongson3 && check_inline_asm loongson3 '"gsldxc1 $f0, 0($2, $3)"' +- enabled mmi && check_inline_asm mmi '"punpcklhw $f0, $f0, $f0"' +- +- # Enable minimum ISA based on selected options ++ # Check toolchain ISA level + if enabled mips64; then +- enabled mips64r6 && check_inline_asm_flags mips64r6 '"dlsa $0, $0, $0, 1"' '-mips64r6' +- enabled mips64r2 && check_inline_asm_flags mips64r2 '"dext $0, $0, 0, 1"' '-mips64r2' +- disabled mips64r6 && disabled mips64r2 && check_inline_asm_flags mips64r1 '"daddi $0, $0, 0"' '-mips64' ++ enabled mips64r6 && check_inline_asm mips64r6 '"dlsa $0, $0, $0, 1"' && ++ disable mips64r2 ++ ++ enabled mips64r2 && check_inline_asm mips64r2 '"dext $0, $0, 0, 1"' ++ ++ disable mips32r6 && disable mips32r5 && disable mips32r2 + else +- enabled mips32r6 && check_inline_asm_flags mips32r6 '"aui $0, $0, 0"' '-mips32r6' +- enabled mips32r5 && check_inline_asm_flags mips32r5 '"eretnc"' '-mips32r5' +- enabled mips32r2 && check_inline_asm_flags mips32r2 '"ext $0, $0, 0, 1"' '-mips32r2' +- disabled mips32r6 && disabled mips32r5 && disabled mips32r2 && check_inline_asm_flags mips32r1 '"addi $0, $0, 0"' '-mips32' ++ enabled mips32r6 && check_inline_asm mips32r6 '"aui $0, $0, 0"' && ++ disable mips32r5 && disable mips32r2 ++ ++ enabled mips32r5 && check_inline_asm mips32r5 '"eretnc"' ++ enabled mips32r2 && check_inline_asm mips32r2 '"ext $0, $0, 0, 1"' ++ ++ disable mips64r6 && disable mips64r5 && disable mips64r2 + fi + +- enabled mipsfpu && check_inline_asm_flags mipsfpu '"cvt.d.l $f0, $f2"' '-mhard-float' ++ enabled mipsfpu && check_inline_asm mipsfpu '"cvt.d.l $f0, $f2"' + enabled mipsfpu && (enabled mips32r5 || enabled mips32r6 || enabled mips64r6) && check_inline_asm_flags mipsfpu '"cvt.d.l $f0, $f1"' '-mfp64' +- enabled mipsfpu && enabled msa && check_inline_asm_flags msa '"addvi.b $w0, $w1, 1"' '-mmsa' && check_headers msa.h || disable msa ++ + enabled mipsdsp && check_inline_asm_flags mipsdsp '"addu.qb $t0, $t1, $t2"' '-mdsp' + enabled mipsdspr2 && check_inline_asm_flags mipsdspr2 '"absq_s.qb $t0, $t1"' '-mdspr2' + ++ # MSA and MSA2 can be detected at runtime so we supply extra flags here ++ enabled mipsfpu && enabled msa && check_inline_asm msa '"addvi.b $w0, $w1, 1"' '-mmsa' && append MSAFLAGS '-mmsa' ++ enabled msa && enabled msa2 && check_inline_asm msa2 '"nxbits.any.b $w0, $w0"' '-mmsa2' && append MSAFLAGS '-mmsa2' ++ ++ # loongson2 have no switch cflag so we can only probe toolchain ability ++ enabled loongson2 && check_inline_asm loongson2 '"dmult.g $8, $9, $10"' && disable loongson3 ++ ++ # loongson3 is paired with MMI ++ enabled loongson3 && check_inline_asm loongson3 '"gsldxc1 $f0, 0($2, $3)"' '-mloongson-ext' && append MMIFLAGS '-mloongson-ext' ++ ++ # MMI can be detected at runtime too ++ enabled mmi && check_inline_asm mmi '"punpcklhw $f0, $f0, $f0"' '-mloongson-mmi' && append MMIFLAGS '-mloongson-mmi' ++ + if enabled bigendian && enabled msa; then + disable msa + fi +@@ -7011,6 +7027,7 @@ if enabled mips; then + echo "MIPS DSP R1 enabled ${mipsdsp-no}" + echo "MIPS DSP R2 enabled ${mipsdspr2-no}" + echo "MIPS MSA enabled ${msa-no}" ++ echo "MIPS MSA2 enabled ${msa2-no}" + echo "LOONGSON MMI enabled ${mmi-no}" + fi + if enabled ppc; then +@@ -7170,6 +7187,8 @@ LDSOFLAGS=$LDSOFLAGS + SHFLAGS=$(echo $($ldflags_filter $SHFLAGS)) + ASMSTRIPFLAGS=$ASMSTRIPFLAGS + X86ASMFLAGS=$X86ASMFLAGS ++MSAFLAGS=$MSAFLAGS ++MMIFLAGS=$MMIFLAGS + BUILDSUF=$build_suffix + PROGSSUF=$progs_suffix + FULLNAME=$FULLNAME +diff --git a/ffbuild/common.mak b/ffbuild/common.mak +index eb41b05..a00d40d 100644 +--- a/ffbuild/common.mak ++++ b/ffbuild/common.mak +@@ -45,7 +45,7 @@ LDFLAGS := $(ALLFFLIBS:%=$(LD_PATH)lib%) $(LDFLAGS) + + define COMPILE + $(call $(1)DEP,$(1)) +- $($(1)) $($(1)FLAGS) $($(1)_DEPFLAGS) $($(1)_C) $($(1)_O) $(patsubst $(SRC_PATH)/%,$(SRC_LINK)/%,$<) ++ $($(1)) $($(1)FLAGS) $($(2)) $($(1)_DEPFLAGS) $($(1)_C) $($(1)_O) $(patsubst $(SRC_PATH)/%,$(SRC_LINK)/%,$<) + endef + + COMPILE_C = $(call COMPILE,CC) +@@ -55,6 +55,14 @@ COMPILE_M = $(call COMPILE,OBJCC) + COMPILE_X86ASM = $(call COMPILE,X86ASM) + COMPILE_HOSTC = $(call COMPILE,HOSTCC) + COMPILE_NVCC = $(call COMPILE,NVCC) ++COMPILE_MMI = $(call COMPILE,CC,MMIFLAGS) ++COMPILE_MSA = $(call COMPILE,CC,MSAFLAGS) ++ ++%_mmi.o: %_mmi.c ++ $(COMPILE_MMI) ++ ++%_msa.o: %_msa.c ++ $(COMPILE_MSA) + + %.o: %.c + $(COMPILE_C) +diff --git a/libavcodec/mips/Makefile b/libavcodec/mips/Makefile +index 1f659a0..2be4d9b 100644 +--- a/libavcodec/mips/Makefile ++++ b/libavcodec/mips/Makefile +@@ -22,6 +22,7 @@ OBJS-$(CONFIG_HEVC_DECODER) += mips/hevcdsp_init_mips.o \ + mips/hevcpred_init_mips.o + OBJS-$(CONFIG_VP9_DECODER) += mips/vp9dsp_init_mips.o + OBJS-$(CONFIG_VP8_DECODER) += mips/vp8dsp_init_mips.o ++OBJS-$(CONFIG_VP3DSP) += mips/vp3dsp_init_mips.o + OBJS-$(CONFIG_H264DSP) += mips/h264dsp_init_mips.o + OBJS-$(CONFIG_H264QPEL) += mips/h264qpel_init_mips.o + OBJS-$(CONFIG_H264CHROMA) += mips/h264chroma_init_mips.o +@@ -54,6 +55,7 @@ MSA-OBJS-$(CONFIG_VP9_DECODER) += mips/vp9_mc_msa.o \ + MSA-OBJS-$(CONFIG_VP8_DECODER) += mips/vp8_mc_msa.o \ + mips/vp8_idct_msa.o \ + mips/vp8_lpf_msa.o ++MSA-OBJS-$(CONFIG_VP3DSP) += mips/vp3dsp_idct_msa.o + MSA-OBJS-$(CONFIG_H264DSP) += mips/h264dsp_msa.o \ + mips/h264idct_msa.o + MSA-OBJS-$(CONFIG_H264QPEL) += mips/h264qpel_msa.o +@@ -69,6 +71,8 @@ MSA-OBJS-$(CONFIG_IDCTDSP) += mips/idctdsp_msa.o \ + MSA-OBJS-$(CONFIG_MPEGVIDEO) += mips/mpegvideo_msa.o + MSA-OBJS-$(CONFIG_MPEGVIDEOENC) += mips/mpegvideoencdsp_msa.o + MSA-OBJS-$(CONFIG_ME_CMP) += mips/me_cmp_msa.o ++MSA-OBJS-$(CONFIG_VC1_DECODER) += mips/vc1dsp_msa.o ++ + MMI-OBJS += mips/constants.o + MMI-OBJS-$(CONFIG_H264DSP) += mips/h264dsp_mmi.o + MMI-OBJS-$(CONFIG_H264CHROMA) += mips/h264chroma_mmi.o +@@ -84,3 +88,6 @@ MMI-OBJS-$(CONFIG_VP8_DECODER) += mips/vp8dsp_mmi.o + MMI-OBJS-$(CONFIG_HPELDSP) += mips/hpeldsp_mmi.o + MMI-OBJS-$(CONFIG_VC1_DECODER) += mips/vc1dsp_mmi.o + MMI-OBJS-$(CONFIG_WMV2DSP) += mips/wmv2dsp_mmi.o ++MMI-OBJS-$(CONFIG_HEVC_DECODER) += mips/hevcdsp_mmi.o ++MMI-OBJS-$(CONFIG_VP3DSP) += mips/vp3dsp_idct_mmi.o ++MMI-OBJS-$(CONFIG_VP9_DECODER) += mips/vp9_mc_mmi.o +diff --git a/libavcodec/mips/aacdec_mips.c b/libavcodec/mips/aacdec_mips.c +index 253cdeb..d02245d 100644 +--- a/libavcodec/mips/aacdec_mips.c ++++ b/libavcodec/mips/aacdec_mips.c +@@ -237,9 +237,9 @@ static void apply_ltp_mips(AACContext *ac, SingleChannelElement *sce) + + if (ltp->lag < 1024) + num_samples = ltp->lag + 1024; +- j = (2048 - num_samples) >> 2; +- k = (2048 - num_samples) & 3; +- p_predTime = &predTime[num_samples]; ++ j = (2048 - num_samples) >> 2; ++ k = (2048 - num_samples) & 3; ++ p_predTime = &predTime[num_samples]; + + for (i = 0; i < num_samples; i++) + predTime[i] = sce->ltp_state[i + 2048 - ltp->lag] * ltp->coef; +@@ -340,7 +340,7 @@ static void update_ltp_mips(AACContext *ac, SingleChannelElement *sce) + float *saved_ltp = sce->coeffs; + const float *lwindow = ics->use_kb_window[0] ? ff_aac_kbd_long_1024 : ff_sine_1024; + const float *swindow = ics->use_kb_window[0] ? ff_aac_kbd_short_128 : ff_sine_128; +- float temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7; ++ uint32_t temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7; + + if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) { + float *p_saved_ltp = saved_ltp + 576; +diff --git a/libavcodec/mips/aacpsdsp_mips.c b/libavcodec/mips/aacpsdsp_mips.c +index 83fdc2f..ae628a9 100644 +--- a/libavcodec/mips/aacpsdsp_mips.c ++++ b/libavcodec/mips/aacpsdsp_mips.c +@@ -293,16 +293,17 @@ static void ps_decorrelate_mips(float (*out)[2], float (*delay)[2], + float phi_fract0 = phi_fract[0]; + float phi_fract1 = phi_fract[1]; + float temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, temp9; ++ float f1, f2, f3; + + float *p_delay_end = (p_delay + (len << 1)); + + /* merged 2 loops */ ++ f1 = 0.65143905753106; ++ f2 = 0.56471812200776; ++ f3 = 0.48954165955695; + __asm__ volatile( + ".set push \n\t" + ".set noreorder \n\t" +- "li.s %[ag0], 0.65143905753106 \n\t" +- "li.s %[ag1], 0.56471812200776 \n\t" +- "li.s %[ag2], 0.48954165955695 \n\t" + "mul.s %[ag0], %[ag0], %[g_decay_slope] \n\t" + "mul.s %[ag1], %[ag1], %[g_decay_slope] \n\t" + "mul.s %[ag2], %[ag2], %[g_decay_slope] \n\t" +@@ -378,10 +379,10 @@ static void ps_decorrelate_mips(float (*out)[2], float (*delay)[2], + [temp3]"=&f"(temp3), [temp4]"=&f"(temp4), [temp5]"=&f"(temp5), + [temp6]"=&f"(temp6), [temp7]"=&f"(temp7), [temp8]"=&f"(temp8), + [temp9]"=&f"(temp9), [p_delay]"+r"(p_delay), [p_ap_delay]"+r"(p_ap_delay), +- [p_Q_fract]"+r"(p_Q_fract), [p_t_gain]"+r"(p_t_gain), [p_out]"+r"(p_out), +- [ag0]"=&f"(ag0), [ag1]"=&f"(ag1), [ag2]"=&f"(ag2) ++ [p_Q_fract]"+r"(p_Q_fract), [p_t_gain]"+r"(p_t_gain), [p_out]"+r"(p_out) + : [phi_fract0]"f"(phi_fract0), [phi_fract1]"f"(phi_fract1), +- [p_delay_end]"r"(p_delay_end), [g_decay_slope]"f"(g_decay_slope) ++ [p_delay_end]"r"(p_delay_end), [g_decay_slope]"f"(g_decay_slope), ++ [ag0]"f"(f1), [ag1]"f"(f2), [ag2]"f"(f3) + : "memory" + ); + } +diff --git a/libavcodec/mips/aacpsy_mips.h b/libavcodec/mips/aacpsy_mips.h +index a1fe5cc..7d27d32 100644 +--- a/libavcodec/mips/aacpsy_mips.h ++++ b/libavcodec/mips/aacpsy_mips.h +@@ -135,11 +135,11 @@ static void psy_hp_filter_mips(const float *firbuf, float *hpfsmpl, const float + float coeff3 = psy_fir_coeffs[7]; + float coeff4 = psy_fir_coeffs[9]; + ++ float f1 = 32768.0; + __asm__ volatile ( + ".set push \n\t" + ".set noreorder \n\t" + +- "li.s $f12, 32768 \n\t" + "1: \n\t" + "lwc1 $f0, 40(%[fb]) \n\t" + "lwc1 $f1, 4(%[fb]) \n\t" +@@ -203,14 +203,14 @@ static void psy_hp_filter_mips(const float *firbuf, float *hpfsmpl, const float + "madd.s %[sum2], %[sum2], $f9, %[coeff4] \n\t" + "madd.s %[sum4], %[sum4], $f6, %[coeff4] \n\t" + "madd.s %[sum3], %[sum3], $f3, %[coeff4] \n\t" +- "mul.s %[sum1], %[sum1], $f12 \n\t" +- "mul.s %[sum2], %[sum2], $f12 \n\t" ++ "mul.s %[sum1], %[sum1], %[f1] \n\t" ++ "mul.s %[sum2], %[sum2], %[f1] \n\t" + "madd.s %[sum4], %[sum4], $f11, %[coeff4] \n\t" + "madd.s %[sum3], %[sum3], $f8, %[coeff4] \n\t" + "swc1 %[sum1], 0(%[hp]) \n\t" + "swc1 %[sum2], 4(%[hp]) \n\t" +- "mul.s %[sum4], %[sum4], $f12 \n\t" +- "mul.s %[sum3], %[sum3], $f12 \n\t" ++ "mul.s %[sum4], %[sum4], %[f1] \n\t" ++ "mul.s %[sum3], %[sum3], %[f1] \n\t" + "swc1 %[sum4], 12(%[hp]) \n\t" + "swc1 %[sum3], 8(%[hp]) \n\t" + "bne %[fb], %[fb_end], 1b \n\t" +@@ -223,9 +223,9 @@ static void psy_hp_filter_mips(const float *firbuf, float *hpfsmpl, const float + [fb]"+r"(fb), [hp]"+r"(hp) + : [coeff0]"f"(coeff0), [coeff1]"f"(coeff1), + [coeff2]"f"(coeff2), [coeff3]"f"(coeff3), +- [coeff4]"f"(coeff4), [fb_end]"r"(fb_end) ++ [coeff4]"f"(coeff4), [fb_end]"r"(fb_end), [f1]"f"(f1) + : "$f0", "$f1", "$f2", "$f3", "$f4", "$f5", "$f6", +- "$f7", "$f8", "$f9", "$f10", "$f11", "$f12", ++ "$f7", "$f8", "$f9", "$f10", "$f11", + "memory" + ); + } +diff --git a/libavcodec/mips/aacsbr_mips.c b/libavcodec/mips/aacsbr_mips.c +index 56aa4e8..fe9c08a 100644 +--- a/libavcodec/mips/aacsbr_mips.c ++++ b/libavcodec/mips/aacsbr_mips.c +@@ -333,7 +333,7 @@ static void sbr_hf_assemble_mips(float Y1[38][64][2], + int indexnoise = ch_data->f_indexnoise; + int indexsine = ch_data->f_indexsine; + float *g_temp1, *q_temp1, *pok, *pok1; +- float temp1, temp2, temp3, temp4; ++ uint32_t temp1, temp2, temp3, temp4; + int size = m_max; + + if (sbr->reset) { +diff --git a/libavcodec/mips/blockdsp_init_mips.c b/libavcodec/mips/blockdsp_init_mips.c +index 30ae95f..c6964fa 100644 +--- a/libavcodec/mips/blockdsp_init_mips.c ++++ b/libavcodec/mips/blockdsp_init_mips.c +@@ -19,36 +19,26 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/mips/cpu.h" + #include "blockdsp_mips.h" + +-#if HAVE_MSA +-static av_cold void blockdsp_init_msa(BlockDSPContext *c) ++void ff_blockdsp_init_mips(BlockDSPContext *c) + { +- c->clear_block = ff_clear_block_msa; +- c->clear_blocks = ff_clear_blocks_msa; ++ int cpu_flags = av_get_cpu_flags(); + +- c->fill_block_tab[0] = ff_fill_block16_msa; +- c->fill_block_tab[1] = ff_fill_block8_msa; +-} +-#endif // #if HAVE_MSA ++ if (have_mmi(cpu_flags)) { ++ c->clear_block = ff_clear_block_mmi; ++ c->clear_blocks = ff_clear_blocks_mmi; + +-#if HAVE_MMI +-static av_cold void blockdsp_init_mmi(BlockDSPContext *c) +-{ +- c->clear_block = ff_clear_block_mmi; +- c->clear_blocks = ff_clear_blocks_mmi; ++ c->fill_block_tab[0] = ff_fill_block16_mmi; ++ c->fill_block_tab[1] = ff_fill_block8_mmi; ++ } + +- c->fill_block_tab[0] = ff_fill_block16_mmi; +- c->fill_block_tab[1] = ff_fill_block8_mmi; +-} +-#endif /* HAVE_MMI */ ++ if (have_msa(cpu_flags)) { ++ c->clear_block = ff_clear_block_msa; ++ c->clear_blocks = ff_clear_blocks_msa; + +-void ff_blockdsp_init_mips(BlockDSPContext *c) +-{ +-#if HAVE_MSA +- blockdsp_init_msa(c); +-#endif // #if HAVE_MSA +-#if HAVE_MMI +- blockdsp_init_mmi(c); +-#endif /* HAVE_MMI */ ++ c->fill_block_tab[0] = ff_fill_block16_msa; ++ c->fill_block_tab[1] = ff_fill_block8_msa; ++ } + } +diff --git a/libavcodec/mips/cabac.h b/libavcodec/mips/cabac.h +index 82cee29..6a13b77 100644 +--- a/libavcodec/mips/cabac.h ++++ b/libavcodec/mips/cabac.h +@@ -25,7 +25,7 @@ + #define AVCODEC_MIPS_CABAC_H + + #include "libavcodec/cabac.h" +-#include "libavutil/mips/mmiutils.h" ++#include "libavutil/mips/asmdefs.h" + #include "config.h" + + #define get_cabac_inline get_cabac_inline_mips +@@ -109,7 +109,7 @@ static av_always_inline int get_cabac_inline(CABACContext *c, + [lps_off]"i"(H264_LPS_RANGE_OFFSET), + [mlps_off]"i"(H264_MLPS_STATE_OFFSET + 128), + [norm_off]"i"(H264_NORM_SHIFT_OFFSET), +- [cabac_mask]"i"(CABAC_MASK) ++ [cabac_mask]"r"(CABAC_MASK) + : "memory" + ); + +diff --git a/libavcodec/mips/fft_mips.c b/libavcodec/mips/fft_mips.c +index 03dcbad..69abdc8 100644 +--- a/libavcodec/mips/fft_mips.c ++++ b/libavcodec/mips/fft_mips.c +@@ -71,6 +71,7 @@ static void ff_fft_calc_mips(FFTContext *s, FFTComplex *z) + float temp, temp1, temp3, temp4; + FFTComplex * tmpz_n2, * tmpz_n34, * tmpz_n4; + FFTComplex * tmpz_n2_i, * tmpz_n34_i, * tmpz_n4_i, * tmpz_i; ++ float f1 = 0.7071067812; + + num_transforms = (21845 >> (17 - s->nbits)) | 1; + +@@ -148,7 +149,6 @@ static void ff_fft_calc_mips(FFTContext *s, FFTComplex *z) + "swc1 %[pom2], 4(%[tmpz]) \n\t" // tmpz[0].im = tmpz[0].im + tmp6; + "lwc1 %[pom1], 16(%[tmpz]) \n\t" + "lwc1 %[pom3], 20(%[tmpz]) \n\t" +- "li.s %[pom], 0.7071067812 \n\t" // float pom = 0.7071067812f; + "add.s %[temp1],%[tmp1], %[tmp2] \n\t" + "sub.s %[temp], %[pom1], %[tmp8] \n\t" + "add.s %[pom2], %[pom3], %[tmp7] \n\t" +@@ -159,10 +159,10 @@ static void ff_fft_calc_mips(FFTContext *s, FFTComplex *z) + "add.s %[pom1], %[pom1], %[tmp8] \n\t" + "sub.s %[pom3], %[pom3], %[tmp7] \n\t" + "add.s %[tmp3], %[tmp3], %[tmp4] \n\t" +- "mul.s %[tmp5], %[pom], %[temp1] \n\t" // tmp5 = pom * (tmp1 + tmp2); +- "mul.s %[tmp7], %[pom], %[temp3] \n\t" // tmp7 = pom * (tmp3 - tmp4); +- "mul.s %[tmp6], %[pom], %[temp4] \n\t" // tmp6 = pom * (tmp2 - tmp1); +- "mul.s %[tmp8], %[pom], %[tmp3] \n\t" // tmp8 = pom * (tmp3 + tmp4); ++ "mul.s %[tmp5], %[f1], %[temp1] \n\t" // tmp5 = pom * (tmp1 + tmp2); ++ "mul.s %[tmp7], %[f1], %[temp3] \n\t" // tmp7 = pom * (tmp3 - tmp4); ++ "mul.s %[tmp6], %[f1], %[temp4] \n\t" // tmp6 = pom * (tmp2 - tmp1); ++ "mul.s %[tmp8], %[f1], %[tmp3] \n\t" // tmp8 = pom * (tmp3 + tmp4); + "swc1 %[pom1], 16(%[tmpz]) \n\t" // tmpz[2].re = tmpz[2].re + tmp8; + "swc1 %[pom3], 20(%[tmpz]) \n\t" // tmpz[2].im = tmpz[2].im - tmp7; + "add.s %[tmp1], %[tmp5], %[tmp7] \n\t" // tmp1 = tmp5 + tmp7; +@@ -193,7 +193,7 @@ static void ff_fft_calc_mips(FFTContext *s, FFTComplex *z) + [tmp3]"=&f"(tmp3), [tmp2]"=&f"(tmp2), [tmp4]"=&f"(tmp4), [tmp5]"=&f"(tmp5), [tmp7]"=&f"(tmp7), + [tmp6]"=&f"(tmp6), [tmp8]"=&f"(tmp8), [pom3]"=&f"(pom3),[temp]"=&f"(temp), [temp1]"=&f"(temp1), + [temp3]"=&f"(temp3), [temp4]"=&f"(temp4) +- : [tmpz]"r"(tmpz) ++ : [tmpz]"r"(tmpz), [f1]"f"(f1) + : "memory" + ); + } +diff --git a/libavcodec/mips/h263dsp_init_mips.c b/libavcodec/mips/h263dsp_init_mips.c +index 09bd937..a73eb12 100644 +--- a/libavcodec/mips/h263dsp_init_mips.c ++++ b/libavcodec/mips/h263dsp_init_mips.c +@@ -18,19 +18,15 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/mips/cpu.h" + #include "h263dsp_mips.h" + +-#if HAVE_MSA +-static av_cold void h263dsp_init_msa(H263DSPContext *c) +-{ +- c->h263_h_loop_filter = ff_h263_h_loop_filter_msa; +- c->h263_v_loop_filter = ff_h263_v_loop_filter_msa; +-} +-#endif // #if HAVE_MSA +- + av_cold void ff_h263dsp_init_mips(H263DSPContext *c) + { +-#if HAVE_MSA +- h263dsp_init_msa(c); +-#endif // #if HAVE_MSA ++ int cpu_flags = av_get_cpu_flags(); ++ ++ if (have_msa(cpu_flags)){ ++ c->h263_h_loop_filter = ff_h263_h_loop_filter_msa; ++ c->h263_v_loop_filter = ff_h263_v_loop_filter_msa; ++ } + } +diff --git a/libavcodec/mips/h263dsp_msa.c b/libavcodec/mips/h263dsp_msa.c +index 472bcbd..2e1ca01 100644 +--- a/libavcodec/mips/h263dsp_msa.c ++++ b/libavcodec/mips/h263dsp_msa.c +@@ -86,10 +86,7 @@ static void h263_h_loop_filter_msa(uint8_t *src, int32_t stride, int32_t qscale) + ILVR_B2_SH(in3, in0, in1, in2, temp0, temp1); + in0 = (v16u8) __msa_ilvr_h(temp1, temp0); + in3 = (v16u8) __msa_ilvl_h(temp1, temp0); +- ST4x4_UB(in0, in0, 0, 1, 2, 3, src, stride); +- src += 4 * stride; +- ST4x4_UB(in3, in3, 0, 1, 2, 3, src, stride); +- src += 4 * stride; ++ ST_W8(in0, in3, 0, 1, 2, 3, 0, 1, 2, 3, src, stride); + } + + static void h263_v_loop_filter_msa(uint8_t *src, int32_t stride, int32_t qscale) +diff --git a/libavcodec/mips/h264chroma_init_mips.c b/libavcodec/mips/h264chroma_init_mips.c +index 122148d..6bb19d3 100644 +--- a/libavcodec/mips/h264chroma_init_mips.c ++++ b/libavcodec/mips/h264chroma_init_mips.c +@@ -19,45 +19,34 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/mips/cpu.h" + #include "h264chroma_mips.h" + +-#if HAVE_MSA +-static av_cold void h264chroma_init_msa(H264ChromaContext *c, int bit_depth) +-{ +- const int high_bit_depth = bit_depth > 8; +- +- if (!high_bit_depth) { +- c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_msa; +- c->put_h264_chroma_pixels_tab[1] = ff_put_h264_chroma_mc4_msa; +- c->put_h264_chroma_pixels_tab[2] = ff_put_h264_chroma_mc2_msa; +- +- c->avg_h264_chroma_pixels_tab[0] = ff_avg_h264_chroma_mc8_msa; +- c->avg_h264_chroma_pixels_tab[1] = ff_avg_h264_chroma_mc4_msa; +- c->avg_h264_chroma_pixels_tab[2] = ff_avg_h264_chroma_mc2_msa; +- } +-} +-#endif // #if HAVE_MSA + +-#if HAVE_MMI +-static av_cold void h264chroma_init_mmi(H264ChromaContext *c, int bit_depth) ++av_cold void ff_h264chroma_init_mips(H264ChromaContext *c, int bit_depth) + { ++ int cpu_flags = av_get_cpu_flags(); + int high_bit_depth = bit_depth > 8; + +- if (!high_bit_depth) { +- c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_mmi; +- c->avg_h264_chroma_pixels_tab[0] = ff_avg_h264_chroma_mc8_mmi; +- c->put_h264_chroma_pixels_tab[1] = ff_put_h264_chroma_mc4_mmi; +- c->avg_h264_chroma_pixels_tab[1] = ff_avg_h264_chroma_mc4_mmi; ++ /* MMI apears to be faster than MSA here */ ++ if (have_msa(cpu_flags)) { ++ if (!high_bit_depth) { ++ c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_msa; ++ c->put_h264_chroma_pixels_tab[1] = ff_put_h264_chroma_mc4_msa; ++ c->put_h264_chroma_pixels_tab[2] = ff_put_h264_chroma_mc2_msa; ++ ++ c->avg_h264_chroma_pixels_tab[0] = ff_avg_h264_chroma_mc8_msa; ++ c->avg_h264_chroma_pixels_tab[1] = ff_avg_h264_chroma_mc4_msa; ++ c->avg_h264_chroma_pixels_tab[2] = ff_avg_h264_chroma_mc2_msa; ++ } + } +-} +-#endif /* HAVE_MMI */ + +-av_cold void ff_h264chroma_init_mips(H264ChromaContext *c, int bit_depth) +-{ +-#if HAVE_MSA +- h264chroma_init_msa(c, bit_depth); +-#endif // #if HAVE_MSA +-#if HAVE_MMI +- h264chroma_init_mmi(c, bit_depth); +-#endif /* HAVE_MMI */ ++ if (have_mmi(cpu_flags)) { ++ if (!high_bit_depth) { ++ c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_mmi; ++ c->avg_h264_chroma_pixels_tab[0] = ff_avg_h264_chroma_mc8_mmi; ++ c->put_h264_chroma_pixels_tab[1] = ff_put_h264_chroma_mc4_mmi; ++ c->avg_h264_chroma_pixels_tab[1] = ff_avg_h264_chroma_mc4_mmi; ++ } ++ } + } +diff --git a/libavcodec/mips/h264chroma_mmi.c b/libavcodec/mips/h264chroma_mmi.c +index 91b2cc4..739dd7d 100644 +--- a/libavcodec/mips/h264chroma_mmi.c ++++ b/libavcodec/mips/h264chroma_mmi.c +@@ -30,74 +30,177 @@ void ff_put_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + int h, int x, int y) + { + int A = 64, B, C, D, E; +- double ftmp[10]; ++ double ftmp[12]; + uint64_t tmp[1]; + + if (!(x || y)) { + /* x=0, y=0, A=64 */ + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "dli %[tmp0], 0x06 \n\t" +- "mtc1 %[tmp0], %[ftmp4] \n\t" +- + "1: \n\t" ++ MMI_ULDC1(%[ftmp0], %[src], 0x00) ++ PTR_ADDU "%[src], %[src], %[stride] \n\t" + MMI_ULDC1(%[ftmp1], %[src], 0x00) +- "addi %[h], %[h], -0x04 \n\t" + PTR_ADDU "%[src], %[src], %[stride] \n\t" +- MMI_ULDC1(%[ftmp5], %[src], 0x00) ++ MMI_ULDC1(%[ftmp2], %[src], 0x00) + PTR_ADDU "%[src], %[src], %[stride] \n\t" +- MMI_ULDC1(%[ftmp6], %[src], 0x00) ++ MMI_ULDC1(%[ftmp3], %[src], 0x00) + PTR_ADDU "%[src], %[src], %[stride] \n\t" +- MMI_ULDC1(%[ftmp7], %[src], 0x00) + +- "punpcklbh %[ftmp2], %[ftmp1], %[ftmp0] \n\t" +- "punpckhbh %[ftmp3], %[ftmp1], %[ftmp0] \n\t" +- "psllh %[ftmp1], %[ftmp2], %[ftmp4] \n\t" +- "psllh %[ftmp2], %[ftmp3], %[ftmp4] \n\t" +- "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" +- "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t" +- "psrlh %[ftmp1], %[ftmp1], %[ftmp4] \n\t" +- "psrlh %[ftmp2], %[ftmp2], %[ftmp4] \n\t" +- "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" +- MMI_SDC1(%[ftmp1], %[dst], 0x00) ++ "addi %[h], %[h], -0x04 \n\t" + +- "punpcklbh %[ftmp2], %[ftmp5], %[ftmp0] \n\t" +- "punpckhbh %[ftmp3], %[ftmp5], %[ftmp0] \n\t" +- "psllh %[ftmp1], %[ftmp2], %[ftmp4] \n\t" +- "psllh %[ftmp2], %[ftmp3], %[ftmp4] \n\t" +- "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" +- "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t" +- "psrlh %[ftmp1], %[ftmp1], %[ftmp4] \n\t" +- "psrlh %[ftmp2], %[ftmp2], %[ftmp4] \n\t" +- "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" ++ MMI_SDC1(%[ftmp0], %[dst], 0x00) + PTR_ADDU "%[dst], %[dst], %[stride] \n\t" + MMI_SDC1(%[ftmp1], %[dst], 0x00) ++ PTR_ADDU "%[dst], %[dst], %[stride] \n\t" ++ MMI_SDC1(%[ftmp2], %[dst], 0x00) ++ PTR_ADDU "%[dst], %[dst], %[stride] \n\t" ++ MMI_SDC1(%[ftmp3], %[dst], 0x00) ++ PTR_ADDU "%[dst], %[dst], %[stride] \n\t" ++ "bnez %[h], 1b \n\t" ++ : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), ++ [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), ++ [dst]"+&r"(dst), [src]"+&r"(src), ++ [h]"+&r"(h) ++ : [stride]"r"((mips_reg)stride) ++ : "memory" ++ ); ++ } else if (x && y) { ++ /* x!=0, y!=0 */ ++ D = x * y; ++ B = (x << 3) - D; ++ C = (y << 3) - D; ++ A = 64 - D - B - C; + +- "punpcklbh %[ftmp2], %[ftmp6], %[ftmp0] \n\t" +- "punpckhbh %[ftmp3], %[ftmp6], %[ftmp0] \n\t" +- "psllh %[ftmp1], %[ftmp2], %[ftmp4] \n\t" +- "psllh %[ftmp2], %[ftmp3], %[ftmp4] \n\t" ++ __asm__ volatile ( ++ "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "dli %[tmp0], 0x06 \n\t" ++ "pshufh %[A], %[A], %[ftmp0] \n\t" ++ "pshufh %[B], %[B], %[ftmp0] \n\t" ++ "mtc1 %[tmp0], %[ftmp9] \n\t" ++ "pshufh %[C], %[C], %[ftmp0] \n\t" ++ "pshufh %[D], %[D], %[ftmp0] \n\t" ++ ++ "1: \n\t" ++ MMI_ULDC1(%[ftmp1], %[src], 0x00) ++ MMI_ULDC1(%[ftmp2], %[src], 0x01) ++ PTR_ADDU "%[src], %[src], %[stride] \n\t" ++ MMI_ULDC1(%[ftmp3], %[src], 0x00) ++ MMI_ULDC1(%[ftmp4], %[src], 0x01) ++ PTR_ADDU "%[src], %[src], %[stride] \n\t" ++ MMI_ULDC1(%[ftmp10], %[src], 0x00) ++ MMI_ULDC1(%[ftmp11], %[src], 0x01) ++ "addi %[h], %[h], -0x02 \n\t" ++ ++ "punpcklbh %[ftmp5], %[ftmp1], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp6], %[ftmp1], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp7], %[ftmp2], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp8], %[ftmp2], %[ftmp0] \n\t" ++ "pmullh %[ftmp5], %[ftmp5], %[A] \n\t" ++ "pmullh %[ftmp7], %[ftmp7], %[B] \n\t" ++ "paddh %[ftmp1], %[ftmp5], %[ftmp7] \n\t" ++ "pmullh %[ftmp6], %[ftmp6], %[A] \n\t" ++ "pmullh %[ftmp8], %[ftmp8], %[B] \n\t" ++ "paddh %[ftmp2], %[ftmp6], %[ftmp8] \n\t" ++ "punpcklbh %[ftmp5], %[ftmp3], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp6], %[ftmp3], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp7], %[ftmp4], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp8], %[ftmp4], %[ftmp0] \n\t" ++ "pmullh %[ftmp5], %[ftmp5], %[C] \n\t" ++ "pmullh %[ftmp7], %[ftmp7], %[D] \n\t" ++ "paddh %[ftmp5], %[ftmp5], %[ftmp7] \n\t" ++ "pmullh %[ftmp6], %[ftmp6], %[C] \n\t" ++ "pmullh %[ftmp8], %[ftmp8], %[D] \n\t" ++ "paddh %[ftmp6], %[ftmp6], %[ftmp8] \n\t" ++ "paddh %[ftmp1], %[ftmp1], %[ftmp5] \n\t" ++ "paddh %[ftmp2], %[ftmp2], %[ftmp6] \n\t" + "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" + "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t" +- "psrlh %[ftmp1], %[ftmp1], %[ftmp4] \n\t" +- "psrlh %[ftmp2], %[ftmp2], %[ftmp4] \n\t" ++ "psrlh %[ftmp1], %[ftmp1], %[ftmp9] \n\t" ++ "psrlh %[ftmp2], %[ftmp2], %[ftmp9] \n\t" + "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" +- PTR_ADDU "%[dst], %[dst], %[stride] \n\t" ++ ++ "punpcklbh %[ftmp5], %[ftmp3], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp6], %[ftmp3], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp7], %[ftmp4], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp8], %[ftmp4], %[ftmp0] \n\t" ++ "pmullh %[ftmp5], %[ftmp5], %[A] \n\t" ++ "pmullh %[ftmp7], %[ftmp7], %[B] \n\t" ++ "paddh %[ftmp3], %[ftmp5], %[ftmp7] \n\t" ++ "pmullh %[ftmp6], %[ftmp6], %[A] \n\t" ++ "pmullh %[ftmp8], %[ftmp8], %[B] \n\t" ++ "paddh %[ftmp4], %[ftmp6], %[ftmp8] \n\t" ++ "punpcklbh %[ftmp5], %[ftmp10], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp6], %[ftmp10], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp7], %[ftmp11], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp8], %[ftmp11], %[ftmp0] \n\t" ++ "pmullh %[ftmp5], %[ftmp5], %[C] \n\t" ++ "pmullh %[ftmp7], %[ftmp7], %[D] \n\t" ++ "paddh %[ftmp5], %[ftmp5], %[ftmp7] \n\t" ++ "pmullh %[ftmp6], %[ftmp6], %[C] \n\t" ++ "pmullh %[ftmp8], %[ftmp8], %[D] \n\t" ++ "paddh %[ftmp6], %[ftmp6], %[ftmp8] \n\t" ++ "paddh %[ftmp3], %[ftmp3], %[ftmp5] \n\t" ++ "paddh %[ftmp4], %[ftmp4], %[ftmp6] \n\t" ++ "paddh %[ftmp3], %[ftmp3], %[ff_pw_32] \n\t" ++ "paddh %[ftmp4], %[ftmp4], %[ff_pw_32] \n\t" ++ "psrlh %[ftmp3], %[ftmp3], %[ftmp9] \n\t" ++ "psrlh %[ftmp4], %[ftmp4], %[ftmp9] \n\t" ++ "packushb %[ftmp3], %[ftmp3], %[ftmp4] \n\t" ++ + MMI_SDC1(%[ftmp1], %[dst], 0x00) ++ PTR_ADDU "%[dst], %[dst], %[stride] \n\t" ++ MMI_SDC1(%[ftmp3], %[dst], 0x00) ++ PTR_ADDU "%[dst], %[dst], %[stride] \n\t" ++ "bnez %[h], 1b \n\t" ++ : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), ++ [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), ++ [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), ++ [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), ++ [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), ++ [ftmp10]"=&f"(ftmp[10]), [ftmp11]"=&f"(ftmp[11]), ++ [tmp0]"=&r"(tmp[0]), ++ [dst]"+&r"(dst), [src]"+&r"(src), ++ [h]"+&r"(h) ++ : [stride]"r"((mips_reg)stride),[ff_pw_32]"f"(ff_pw_32), ++ [A]"f"(A), [B]"f"(B), ++ [C]"f"(C), [D]"f"(D) ++ : "memory" ++ ); ++ } else if (x) { ++ /* x!=0, y==0 */ ++ E = x << 3; ++ A = 64 - E; ++ ++ __asm__ volatile ( ++ "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "dli %[tmp0], 0x06 \n\t" ++ "pshufh %[A], %[A], %[ftmp0] \n\t" ++ "pshufh %[E], %[E], %[ftmp0] \n\t" ++ "mtc1 %[tmp0], %[ftmp7] \n\t" ++ ++ "1: \n\t" ++ MMI_ULDC1(%[ftmp1], %[src], 0x00) ++ MMI_ULDC1(%[ftmp2], %[src], 0x01) ++ "addi %[h], %[h], -0x01 \n\t" ++ PTR_ADDU "%[src], %[src], %[stride] \n\t" ++ ++ "punpcklbh %[ftmp3], %[ftmp1], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp4], %[ftmp1], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp5], %[ftmp2], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp6], %[ftmp2], %[ftmp0] \n\t" ++ "pmullh %[ftmp3], %[ftmp3], %[A] \n\t" ++ "pmullh %[ftmp5], %[ftmp5], %[E] \n\t" ++ "paddh %[ftmp1], %[ftmp3], %[ftmp5] \n\t" ++ "pmullh %[ftmp4], %[ftmp4], %[A] \n\t" ++ "pmullh %[ftmp6], %[ftmp6], %[E] \n\t" ++ "paddh %[ftmp2], %[ftmp4], %[ftmp6] \n\t" + +- "punpcklbh %[ftmp2], %[ftmp7], %[ftmp0] \n\t" +- "punpckhbh %[ftmp3], %[ftmp7], %[ftmp0] \n\t" +- "psllh %[ftmp1], %[ftmp2], %[ftmp4] \n\t" +- "psllh %[ftmp2], %[ftmp3], %[ftmp4] \n\t" + "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" + "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t" +- "psrlh %[ftmp1], %[ftmp1], %[ftmp4] \n\t" +- "psrlh %[ftmp2], %[ftmp2], %[ftmp4] \n\t" ++ "psrlh %[ftmp1], %[ftmp1], %[ftmp7] \n\t" ++ "psrlh %[ftmp2], %[ftmp2], %[ftmp7] \n\t" + "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" +- PTR_ADDU "%[dst], %[dst], %[stride] \n\t" + MMI_SDC1(%[ftmp1], %[dst], 0x00) +- +- PTR_ADDU "%[src], %[src], %[stride] \n\t" + PTR_ADDU "%[dst], %[dst], %[stride] \n\t" + "bnez %[h], 1b \n\t" + : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), +@@ -107,220 +210,80 @@ void ff_put_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + [tmp0]"=&r"(tmp[0]), + [dst]"+&r"(dst), [src]"+&r"(src), + [h]"+&r"(h) +- : [stride]"r"((mips_reg)stride),[ff_pw_32]"f"(ff_pw_32) ++ : [stride]"r"((mips_reg)stride), ++ [ff_pw_32]"f"(ff_pw_32), ++ [A]"f"(A), [E]"f"(E) + : "memory" + ); + } else { +- if (x && y) { +- /* x!=0, y!=0 */ +- D = x * y; +- B = (x << 3) - D; +- C = (y << 3) - D; +- A = 64 - D - B - C; +- +- __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "dli %[tmp0], 0x06 \n\t" +- "pshufh %[A], %[A], %[ftmp0] \n\t" +- "pshufh %[B], %[B], %[ftmp0] \n\t" +- "mtc1 %[tmp0], %[ftmp9] \n\t" +- "pshufh %[C], %[C], %[ftmp0] \n\t" +- "pshufh %[D], %[D], %[ftmp0] \n\t" +- +- "1: \n\t" +- MMI_ULDC1(%[ftmp1], %[src], 0x00) +- MMI_ULDC1(%[ftmp2], %[src], 0x01) +- PTR_ADDU "%[src], %[src], %[stride] \n\t" +- MMI_ULDC1(%[ftmp3], %[src], 0x00) +- MMI_ULDC1(%[ftmp4], %[src], 0x01) +- "addi %[h], %[h], -0x02 \n\t" +- +- "punpcklbh %[ftmp5], %[ftmp1], %[ftmp0] \n\t" +- "punpckhbh %[ftmp6], %[ftmp1], %[ftmp0] \n\t" +- "punpcklbh %[ftmp7], %[ftmp2], %[ftmp0] \n\t" +- "punpckhbh %[ftmp8], %[ftmp2], %[ftmp0] \n\t" +- "pmullh %[ftmp5], %[ftmp5], %[A] \n\t" +- "pmullh %[ftmp7], %[ftmp7], %[B] \n\t" +- "paddh %[ftmp1], %[ftmp5], %[ftmp7] \n\t" +- "pmullh %[ftmp6], %[ftmp6], %[A] \n\t" +- "pmullh %[ftmp8], %[ftmp8], %[B] \n\t" +- "paddh %[ftmp2], %[ftmp6], %[ftmp8] \n\t" +- +- "punpcklbh %[ftmp5], %[ftmp3], %[ftmp0] \n\t" +- "punpckhbh %[ftmp6], %[ftmp3], %[ftmp0] \n\t" +- "punpcklbh %[ftmp7], %[ftmp4], %[ftmp0] \n\t" +- "punpckhbh %[ftmp8], %[ftmp4], %[ftmp0] \n\t" +- "pmullh %[ftmp5], %[ftmp5], %[C] \n\t" +- "pmullh %[ftmp7], %[ftmp7], %[D] \n\t" +- "paddh %[ftmp3], %[ftmp5], %[ftmp7] \n\t" +- "pmullh %[ftmp6], %[ftmp6], %[C] \n\t" +- "pmullh %[ftmp8], %[ftmp8], %[D] \n\t" +- "paddh %[ftmp4], %[ftmp6], %[ftmp8] \n\t" +- +- "paddh %[ftmp1], %[ftmp1], %[ftmp3] \n\t" +- "paddh %[ftmp2], %[ftmp2], %[ftmp4] \n\t" +- "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" +- "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t" +- "psrlh %[ftmp1], %[ftmp1], %[ftmp9] \n\t" +- "psrlh %[ftmp2], %[ftmp2], %[ftmp9] \n\t" +- "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" +- MMI_SDC1(%[ftmp1], %[dst], 0x00) +- PTR_ADDU "%[dst], %[dst], %[stride] \n\t" +- +- MMI_ULDC1(%[ftmp1], %[src], 0x00) +- MMI_ULDC1(%[ftmp2], %[src], 0x01) +- PTR_ADDU "%[src], %[src], %[stride] \n\t" +- MMI_ULDC1(%[ftmp3], %[src], 0x00) +- MMI_ULDC1(%[ftmp4], %[src], 0x01) +- +- "punpcklbh %[ftmp5], %[ftmp1], %[ftmp0] \n\t" +- "punpckhbh %[ftmp6], %[ftmp1], %[ftmp0] \n\t" +- "punpcklbh %[ftmp7], %[ftmp2], %[ftmp0] \n\t" +- "punpckhbh %[ftmp8], %[ftmp2], %[ftmp0] \n\t" +- "pmullh %[ftmp5], %[ftmp5], %[A] \n\t" +- "pmullh %[ftmp7], %[ftmp7], %[B] \n\t" +- "paddh %[ftmp1], %[ftmp5], %[ftmp7] \n\t" +- "pmullh %[ftmp6], %[ftmp6], %[A] \n\t" +- "pmullh %[ftmp8], %[ftmp8], %[B] \n\t" +- "paddh %[ftmp2], %[ftmp6], %[ftmp8] \n\t" +- +- "punpcklbh %[ftmp5], %[ftmp3], %[ftmp0] \n\t" +- "punpckhbh %[ftmp6], %[ftmp3], %[ftmp0] \n\t" +- "punpcklbh %[ftmp7], %[ftmp4], %[ftmp0] \n\t" +- "punpckhbh %[ftmp8], %[ftmp4], %[ftmp0] \n\t" +- "pmullh %[ftmp5], %[ftmp5], %[C] \n\t" +- "pmullh %[ftmp7], %[ftmp7], %[D] \n\t" +- "paddh %[ftmp3], %[ftmp5], %[ftmp7] \n\t" +- "pmullh %[ftmp6], %[ftmp6], %[C] \n\t" +- "pmullh %[ftmp8], %[ftmp8], %[D] \n\t" +- "paddh %[ftmp4], %[ftmp6], %[ftmp8] \n\t" +- +- "paddh %[ftmp1], %[ftmp1], %[ftmp3] \n\t" +- "paddh %[ftmp2], %[ftmp2], %[ftmp4] \n\t" +- "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" +- "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t" +- "psrlh %[ftmp1], %[ftmp1], %[ftmp9] \n\t" +- "psrlh %[ftmp2], %[ftmp2], %[ftmp9] \n\t" +- "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" +- MMI_SDC1(%[ftmp1], %[dst], 0x00) +- PTR_ADDU "%[dst], %[dst], %[stride] \n\t" +- +- "bnez %[h], 1b \n\t" +- : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), +- [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), +- [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), +- [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), +- [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), +- [tmp0]"=&r"(tmp[0]), +- [dst]"+&r"(dst), [src]"+&r"(src), +- [h]"+&r"(h) +- : [stride]"r"((mips_reg)stride),[ff_pw_32]"f"(ff_pw_32), +- [A]"f"(A), [B]"f"(B), +- [C]"f"(C), [D]"f"(D) +- : "memory" +- ); +- } else { +- if (x) { +- /* x!=0, y==0 */ +- E = x << 3; +- A = 64 - E; +- +- __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "dli %[tmp0], 0x06 \n\t" +- "pshufh %[A], %[A], %[ftmp0] \n\t" +- "pshufh %[E], %[E], %[ftmp0] \n\t" +- "mtc1 %[tmp0], %[ftmp7] \n\t" +- +- "1: \n\t" +- MMI_ULDC1(%[ftmp1], %[src], 0x00) +- MMI_ULDC1(%[ftmp2], %[src], 0x01) +- "addi %[h], %[h], -0x01 \n\t" +- PTR_ADDU "%[src], %[src], %[stride] \n\t" +- +- "punpcklbh %[ftmp3], %[ftmp1], %[ftmp0] \n\t" +- "punpckhbh %[ftmp4], %[ftmp1], %[ftmp0] \n\t" +- "punpcklbh %[ftmp5], %[ftmp2], %[ftmp0] \n\t" +- "punpckhbh %[ftmp6], %[ftmp2], %[ftmp0] \n\t" +- "pmullh %[ftmp3], %[ftmp3], %[A] \n\t" +- "pmullh %[ftmp5], %[ftmp5], %[E] \n\t" +- "paddh %[ftmp1], %[ftmp3], %[ftmp5] \n\t" +- "pmullh %[ftmp4], %[ftmp4], %[A] \n\t" +- "pmullh %[ftmp6], %[ftmp6], %[E] \n\t" +- "paddh %[ftmp2], %[ftmp4], %[ftmp6] \n\t" +- +- "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" +- "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t" +- "psrlh %[ftmp1], %[ftmp1], %[ftmp7] \n\t" +- "psrlh %[ftmp2], %[ftmp2], %[ftmp7] \n\t" +- "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" +- MMI_SDC1(%[ftmp1], %[dst], 0x00) +- PTR_ADDU "%[dst], %[dst], %[stride] \n\t" +- "bnez %[h], 1b \n\t" +- : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), +- [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), +- [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), +- [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), +- [tmp0]"=&r"(tmp[0]), +- [dst]"+&r"(dst), [src]"+&r"(src), +- [h]"+&r"(h) +- : [stride]"r"((mips_reg)stride), +- [ff_pw_32]"f"(ff_pw_32), +- [A]"f"(A), [E]"f"(E) +- : "memory" +- ); +- } else { +- /* x==0, y!=0 */ +- E = y << 3; +- A = 64 - E; +- +- __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "dli %[tmp0], 0x06 \n\t" +- "pshufh %[A], %[A], %[ftmp0] \n\t" +- "pshufh %[E], %[E], %[ftmp0] \n\t" +- "mtc1 %[tmp0], %[ftmp7] \n\t" +- +- "1: \n\t" +- MMI_ULDC1(%[ftmp1], %[src], 0x00) +- PTR_ADDU "%[src], %[src], %[stride] \n\t" +- MMI_ULDC1(%[ftmp2], %[src], 0x00) +- "addi %[h], %[h], -0x01 \n\t" +- +- "punpcklbh %[ftmp3], %[ftmp1], %[ftmp0] \n\t" +- "punpckhbh %[ftmp4], %[ftmp1], %[ftmp0] \n\t" +- "punpcklbh %[ftmp5], %[ftmp2], %[ftmp0] \n\t" +- "punpckhbh %[ftmp6], %[ftmp2], %[ftmp0] \n\t" +- "pmullh %[ftmp3], %[ftmp3], %[A] \n\t" +- "pmullh %[ftmp5], %[ftmp5], %[E] \n\t" +- "paddh %[ftmp1], %[ftmp3], %[ftmp5] \n\t" +- "pmullh %[ftmp4], %[ftmp4], %[A] \n\t" +- "pmullh %[ftmp6], %[ftmp6], %[E] \n\t" +- "paddh %[ftmp2], %[ftmp4], %[ftmp6] \n\t" +- +- "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" +- "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t" +- "psrlh %[ftmp1], %[ftmp1], %[ftmp7] \n\t" +- "psrlh %[ftmp2], %[ftmp2], %[ftmp7] \n\t" +- "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" +- MMI_SDC1(%[ftmp1], %[dst], 0x00) +- +- PTR_ADDU "%[dst], %[dst], %[stride] \n\t" +- "bnez %[h], 1b \n\t" +- : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), +- [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), +- [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), +- [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), +- [tmp0]"=&r"(tmp[0]), +- [dst]"+&r"(dst), [src]"+&r"(src), +- [h]"+&r"(h) +- : [stride]"r"((mips_reg)stride), +- [ff_pw_32]"f"(ff_pw_32), +- [A]"f"(A), [E]"f"(E) +- : "memory" +- ); +- } +- } ++ /* x==0, y!=0 */ ++ E = y << 3; ++ A = 64 - E; ++ ++ __asm__ volatile ( ++ "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "dli %[tmp0], 0x06 \n\t" ++ "pshufh %[A], %[A], %[ftmp0] \n\t" ++ "pshufh %[E], %[E], %[ftmp0] \n\t" ++ "mtc1 %[tmp0], %[ftmp7] \n\t" ++ ++ "1: \n\t" ++ MMI_ULDC1(%[ftmp1], %[src], 0x00) ++ PTR_ADDU "%[src], %[src], %[stride] \n\t" ++ MMI_ULDC1(%[ftmp2], %[src], 0x00) ++ PTR_ADDU "%[src], %[src], %[stride] \n\t" ++ MMI_ULDC1(%[ftmp8], %[src], 0x00) ++ "addi %[h], %[h], -0x02 \n\t" ++ ++ "punpcklbh %[ftmp3], %[ftmp1], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp4], %[ftmp1], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp5], %[ftmp2], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp6], %[ftmp2], %[ftmp0] \n\t" ++ "pmullh %[ftmp3], %[ftmp3], %[A] \n\t" ++ "pmullh %[ftmp5], %[ftmp5], %[E] \n\t" ++ "paddh %[ftmp3], %[ftmp3], %[ftmp5] \n\t" ++ "pmullh %[ftmp4], %[ftmp4], %[A] \n\t" ++ "pmullh %[ftmp6], %[ftmp6], %[E] \n\t" ++ "paddh %[ftmp4], %[ftmp4], %[ftmp6] \n\t" ++ "paddh %[ftmp3], %[ftmp3], %[ff_pw_32] \n\t" ++ "paddh %[ftmp4], %[ftmp4], %[ff_pw_32] \n\t" ++ "psrlh %[ftmp3], %[ftmp3], %[ftmp7] \n\t" ++ "psrlh %[ftmp4], %[ftmp4], %[ftmp7] \n\t" ++ "packushb %[ftmp1], %[ftmp3], %[ftmp4] \n\t" ++ ++ "punpcklbh %[ftmp3], %[ftmp2], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp4], %[ftmp2], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp5], %[ftmp8], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp6], %[ftmp8], %[ftmp0] \n\t" ++ "pmullh %[ftmp3], %[ftmp3], %[A] \n\t" ++ "pmullh %[ftmp5], %[ftmp5], %[E] \n\t" ++ "paddh %[ftmp3], %[ftmp3], %[ftmp5] \n\t" ++ "pmullh %[ftmp4], %[ftmp4], %[A] \n\t" ++ "pmullh %[ftmp6], %[ftmp6], %[E] \n\t" ++ "paddh %[ftmp4], %[ftmp4], %[ftmp6] \n\t" ++ "paddh %[ftmp3], %[ftmp3], %[ff_pw_32] \n\t" ++ "paddh %[ftmp4], %[ftmp4], %[ff_pw_32] \n\t" ++ "psrlh %[ftmp3], %[ftmp3], %[ftmp7] \n\t" ++ "psrlh %[ftmp4], %[ftmp4], %[ftmp7] \n\t" ++ "packushb %[ftmp2], %[ftmp3], %[ftmp4] \n\t" ++ ++ MMI_SDC1(%[ftmp1], %[dst], 0x00) ++ PTR_ADDU "%[dst], %[dst], %[stride] \n\t" ++ MMI_SDC1(%[ftmp2], %[dst], 0x00) ++ PTR_ADDU "%[dst], %[dst], %[stride] \n\t" ++ "bnez %[h], 1b \n\t" ++ : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), ++ [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), ++ [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), ++ [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), ++ [ftmp8]"=&f"(ftmp[8]), [tmp0]"=&r"(tmp[0]), ++ [dst]"+&r"(dst), [src]"+&r"(src), ++ [h]"+&r"(h) ++ : [stride]"r"((mips_reg)stride), ++ [ff_pw_32]"f"(ff_pw_32), ++ [A]"f"(A), [E]"f"(E) ++ : "memory" ++ ); + } + } + +@@ -334,231 +297,200 @@ void ff_avg_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + if(!(x || y)){ + /* x=0, y=0, A=64 */ + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "dli %[tmp0], 0x06 \n\t" +- "pshufh %[A], %[A], %[ftmp0] \n\t" +- "mtc1 %[tmp0], %[ftmp4] \n\t" +- + "1: \n\t" +- MMI_ULDC1(%[ftmp1], %[src], 0x00) ++ MMI_ULDC1(%[ftmp0], %[src], 0x00) + PTR_ADDU "%[src], %[src], %[stride] \n\t" +- MMI_ULDC1(%[ftmp5], %[src], 0x00) ++ MMI_ULDC1(%[ftmp1], %[src], 0x00) + PTR_ADDU "%[src], %[src], %[stride] \n\t" +- +- "punpcklbh %[ftmp2], %[ftmp1], %[ftmp0] \n\t" +- "punpckhbh %[ftmp3], %[ftmp1], %[ftmp0] \n\t" +- "pmullh %[ftmp1], %[ftmp2], %[A] \n\t" +- "pmullh %[ftmp2], %[ftmp3], %[A] \n\t" +- "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" +- "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t" +- "psrlh %[ftmp1], %[ftmp1], %[ftmp4] \n\t" +- "psrlh %[ftmp2], %[ftmp2], %[ftmp4] \n\t" +- "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" + MMI_LDC1(%[ftmp2], %[dst], 0x00) +- "pavgb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" +- MMI_SDC1(%[ftmp1], %[dst], 0x00) + PTR_ADDU "%[dst], %[dst], %[stride] \n\t" +- +- "punpcklbh %[ftmp2], %[ftmp5], %[ftmp0] \n\t" +- "punpckhbh %[ftmp3], %[ftmp5], %[ftmp0] \n\t" +- "pmullh %[ftmp1], %[ftmp2], %[A] \n\t" +- "pmullh %[ftmp2], %[ftmp3], %[A] \n\t" +- "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" +- "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t" +- "psrlh %[ftmp1], %[ftmp1], %[ftmp4] \n\t" +- "psrlh %[ftmp2], %[ftmp2], %[ftmp4] \n\t" +- "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" +- MMI_LDC1(%[ftmp2], %[dst], 0x00) +- "pavgb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" ++ MMI_LDC1(%[ftmp3], %[dst], 0x00) ++ PTR_SUBU "%[dst], %[dst], %[stride] \n\t" ++ "pavgb %[ftmp0], %[ftmp0], %[ftmp2] \n\t" ++ "pavgb %[ftmp1], %[ftmp1], %[ftmp3] \n\t" ++ MMI_SDC1(%[ftmp0], %[dst], 0x00) ++ PTR_ADDU "%[dst], %[dst], %[stride] \n\t" + MMI_SDC1(%[ftmp1], %[dst], 0x00) + PTR_ADDU "%[dst], %[dst], %[stride] \n\t" +- + "addi %[h], %[h], -0x02 \n\t" + "bnez %[h], 1b \n\t" ++ : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), ++ [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), ++ [dst]"+&r"(dst), [src]"+&r"(src), ++ [h]"+&r"(h) ++ : [stride]"r"((mips_reg)stride) ++ : "memory" ++ ); ++ } else if (x && y) { ++ /* x!=0, y!=0 */ ++ D = x * y; ++ B = (x << 3) - D; ++ C = (y << 3) - D; ++ A = 64 - D - B - C; ++ __asm__ volatile ( ++ "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "dli %[tmp0], 0x06 \n\t" ++ "pshufh %[A], %[A], %[ftmp0] \n\t" ++ "pshufh %[B], %[B], %[ftmp0] \n\t" ++ "mtc1 %[tmp0], %[ftmp9] \n\t" ++ "pshufh %[C], %[C], %[ftmp0] \n\t" ++ "pshufh %[D], %[D], %[ftmp0] \n\t" ++ ++ "1: \n\t" ++ MMI_ULDC1(%[ftmp1], %[src], 0x00) ++ MMI_ULDC1(%[ftmp2], %[src], 0x01) ++ PTR_ADDU "%[src], %[src], %[stride] \n\t" ++ MMI_ULDC1(%[ftmp3], %[src], 0x00) ++ MMI_ULDC1(%[ftmp4], %[src], 0x01) ++ "addi %[h], %[h], -0x01 \n\t" ++ ++ "punpcklbh %[ftmp5], %[ftmp1], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp6], %[ftmp1], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp7], %[ftmp2], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp8], %[ftmp2], %[ftmp0] \n\t" ++ "pmullh %[ftmp5], %[ftmp5], %[A] \n\t" ++ "pmullh %[ftmp7], %[ftmp7], %[B] \n\t" ++ "paddh %[ftmp1], %[ftmp5], %[ftmp7] \n\t" ++ "pmullh %[ftmp6], %[ftmp6], %[A] \n\t" ++ "pmullh %[ftmp8], %[ftmp8], %[B] \n\t" ++ "paddh %[ftmp2], %[ftmp6], %[ftmp8] \n\t" ++ ++ "punpcklbh %[ftmp5], %[ftmp3], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp6], %[ftmp3], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp7], %[ftmp4], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp8], %[ftmp4], %[ftmp0] \n\t" ++ "pmullh %[ftmp5], %[ftmp5], %[C] \n\t" ++ "pmullh %[ftmp7], %[ftmp7], %[D] \n\t" ++ "paddh %[ftmp3], %[ftmp5], %[ftmp7] \n\t" ++ "pmullh %[ftmp6], %[ftmp6], %[C] \n\t" ++ "pmullh %[ftmp8], %[ftmp8], %[D] \n\t" ++ "paddh %[ftmp4], %[ftmp6], %[ftmp8] \n\t" ++ ++ "paddh %[ftmp1], %[ftmp1], %[ftmp3] \n\t" ++ "paddh %[ftmp2], %[ftmp2], %[ftmp4] \n\t" ++ "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" ++ "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t" ++ "psrlh %[ftmp1], %[ftmp1], %[ftmp9] \n\t" ++ "psrlh %[ftmp2], %[ftmp2], %[ftmp9] \n\t" ++ "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" ++ MMI_LDC1(%[ftmp2], %[dst], 0x00) ++ "pavgb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" ++ MMI_SDC1(%[ftmp1], %[dst], 0x00) ++ PTR_ADDU "%[dst], %[dst], %[stride] \n\t" ++ "bnez %[h], 1b \n\t" + : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), + [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), + [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), ++ [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), ++ [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), + [tmp0]"=&r"(tmp[0]), + [dst]"+&r"(dst), [src]"+&r"(src), + [h]"+&r"(h) + : [stride]"r"((mips_reg)stride),[ff_pw_32]"f"(ff_pw_32), +- [A]"f"(A) ++ [A]"f"(A), [B]"f"(B), ++ [C]"f"(C), [D]"f"(D) ++ : "memory" ++ ); ++ } else if (x) { ++ /* x!=0, y==0 */ ++ E = x << 3; ++ A = 64 - E; ++ __asm__ volatile ( ++ "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "dli %[tmp0], 0x06 \n\t" ++ "pshufh %[A], %[A], %[ftmp0] \n\t" ++ "pshufh %[E], %[E], %[ftmp0] \n\t" ++ "mtc1 %[tmp0], %[ftmp7] \n\t" ++ ++ "1: \n\t" ++ MMI_ULDC1(%[ftmp1], %[src], 0x00) ++ MMI_ULDC1(%[ftmp2], %[src], 0x01) ++ PTR_ADDU "%[src], %[src], %[stride] \n\t" ++ "addi %[h], %[h], -0x01 \n\t" ++ ++ "punpcklbh %[ftmp3], %[ftmp1], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp4], %[ftmp1], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp5], %[ftmp2], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp6], %[ftmp2], %[ftmp0] \n\t" ++ "pmullh %[ftmp3], %[ftmp3], %[A] \n\t" ++ "pmullh %[ftmp5], %[ftmp5], %[E] \n\t" ++ "paddh %[ftmp1], %[ftmp3], %[ftmp5] \n\t" ++ "pmullh %[ftmp4], %[ftmp4], %[A] \n\t" ++ "pmullh %[ftmp6], %[ftmp6], %[E] \n\t" ++ "paddh %[ftmp2], %[ftmp4], %[ftmp6] \n\t" ++ ++ "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" ++ "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t" ++ "psrlh %[ftmp1], %[ftmp1], %[ftmp7] \n\t" ++ "psrlh %[ftmp2], %[ftmp2], %[ftmp7] \n\t" ++ "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" ++ MMI_LDC1(%[ftmp2], %[dst], 0x00) ++ "pavgb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" ++ MMI_SDC1(%[ftmp1], %[dst], 0x00) ++ PTR_ADDU "%[dst], %[dst], %[stride] \n\t" ++ "bnez %[h], 1b \n\t" ++ : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), ++ [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), ++ [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), ++ [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), ++ [tmp0]"=&r"(tmp[0]), ++ [dst]"+&r"(dst), [src]"+&r"(src), ++ [h]"+&r"(h) ++ : [stride]"r"((mips_reg)stride), ++ [ff_pw_32]"f"(ff_pw_32), ++ [A]"f"(A), [E]"f"(E) + : "memory" + ); + } else { +- if(x && y) { +- /* x!=0, y!=0 */ +- D = x * y; +- B = (x << 3) - D; +- C = (y << 3) - D; +- A = 64 - D - B - C; +- __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "dli %[tmp0], 0x06 \n\t" +- "pshufh %[A], %[A], %[ftmp0] \n\t" +- "pshufh %[B], %[B], %[ftmp0] \n\t" +- "mtc1 %[tmp0], %[ftmp9] \n\t" +- "pshufh %[C], %[C], %[ftmp0] \n\t" +- "pshufh %[D], %[D], %[ftmp0] \n\t" +- +- "1: \n\t" +- MMI_ULDC1(%[ftmp1], %[src], 0x00) +- MMI_ULDC1(%[ftmp2], %[src], 0x01) +- PTR_ADDU "%[src], %[src], %[stride] \n\t" +- MMI_ULDC1(%[ftmp3], %[src], 0x00) +- MMI_ULDC1(%[ftmp4], %[src], 0x01) +- "addi %[h], %[h], -0x01 \n\t" +- +- "punpcklbh %[ftmp5], %[ftmp1], %[ftmp0] \n\t" +- "punpckhbh %[ftmp6], %[ftmp1], %[ftmp0] \n\t" +- "punpcklbh %[ftmp7], %[ftmp2], %[ftmp0] \n\t" +- "punpckhbh %[ftmp8], %[ftmp2], %[ftmp0] \n\t" +- "pmullh %[ftmp5], %[ftmp5], %[A] \n\t" +- "pmullh %[ftmp7], %[ftmp7], %[B] \n\t" +- "paddh %[ftmp1], %[ftmp5], %[ftmp7] \n\t" +- "pmullh %[ftmp6], %[ftmp6], %[A] \n\t" +- "pmullh %[ftmp8], %[ftmp8], %[B] \n\t" +- "paddh %[ftmp2], %[ftmp6], %[ftmp8] \n\t" +- +- "punpcklbh %[ftmp5], %[ftmp3], %[ftmp0] \n\t" +- "punpckhbh %[ftmp6], %[ftmp3], %[ftmp0] \n\t" +- "punpcklbh %[ftmp7], %[ftmp4], %[ftmp0] \n\t" +- "punpckhbh %[ftmp8], %[ftmp4], %[ftmp0] \n\t" +- "pmullh %[ftmp5], %[ftmp5], %[C] \n\t" +- "pmullh %[ftmp7], %[ftmp7], %[D] \n\t" +- "paddh %[ftmp3], %[ftmp5], %[ftmp7] \n\t" +- "pmullh %[ftmp6], %[ftmp6], %[C] \n\t" +- "pmullh %[ftmp8], %[ftmp8], %[D] \n\t" +- "paddh %[ftmp4], %[ftmp6], %[ftmp8] \n\t" +- +- "paddh %[ftmp1], %[ftmp1], %[ftmp3] \n\t" +- "paddh %[ftmp2], %[ftmp2], %[ftmp4] \n\t" +- "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" +- "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t" +- "psrlh %[ftmp1], %[ftmp1], %[ftmp9] \n\t" +- "psrlh %[ftmp2], %[ftmp2], %[ftmp9] \n\t" +- "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" +- MMI_LDC1(%[ftmp2], %[dst], 0x00) +- "pavgb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" +- MMI_SDC1(%[ftmp1], %[dst], 0x00) +- PTR_ADDU "%[dst], %[dst], %[stride] \n\t" +- "bnez %[h], 1b \n\t" +- : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), +- [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), +- [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), +- [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), +- [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), +- [tmp0]"=&r"(tmp[0]), +- [dst]"+&r"(dst), [src]"+&r"(src), +- [h]"+&r"(h) +- : [stride]"r"((mips_reg)stride),[ff_pw_32]"f"(ff_pw_32), +- [A]"f"(A), [B]"f"(B), +- [C]"f"(C), [D]"f"(D) +- : "memory" +- ); +- } else { +- if(x) { +- /* x!=0, y==0 */ +- E = x << 3; +- A = 64 - E; +- __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "dli %[tmp0], 0x06 \n\t" +- "pshufh %[A], %[A], %[ftmp0] \n\t" +- "pshufh %[E], %[E], %[ftmp0] \n\t" +- "mtc1 %[tmp0], %[ftmp7] \n\t" +- +- "1: \n\t" +- MMI_ULDC1(%[ftmp1], %[src], 0x00) +- MMI_ULDC1(%[ftmp2], %[src], 0x01) +- PTR_ADDU "%[src], %[src], %[stride] \n\t" +- "addi %[h], %[h], -0x01 \n\t" +- +- "punpcklbh %[ftmp3], %[ftmp1], %[ftmp0] \n\t" +- "punpckhbh %[ftmp4], %[ftmp1], %[ftmp0] \n\t" +- "punpcklbh %[ftmp5], %[ftmp2], %[ftmp0] \n\t" +- "punpckhbh %[ftmp6], %[ftmp2], %[ftmp0] \n\t" +- "pmullh %[ftmp3], %[ftmp3], %[A] \n\t" +- "pmullh %[ftmp5], %[ftmp5], %[E] \n\t" +- "paddh %[ftmp1], %[ftmp3], %[ftmp5] \n\t" +- "pmullh %[ftmp4], %[ftmp4], %[A] \n\t" +- "pmullh %[ftmp6], %[ftmp6], %[E] \n\t" +- "paddh %[ftmp2], %[ftmp4], %[ftmp6] \n\t" +- +- "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" +- "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t" +- "psrlh %[ftmp1], %[ftmp1], %[ftmp7] \n\t" +- "psrlh %[ftmp2], %[ftmp2], %[ftmp7] \n\t" +- "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" +- MMI_LDC1(%[ftmp2], %[dst], 0x00) +- "pavgb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" +- MMI_SDC1(%[ftmp1], %[dst], 0x00) +- PTR_ADDU "%[dst], %[dst], %[stride] \n\t" +- "bnez %[h], 1b \n\t" +- : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), +- [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), +- [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), +- [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), +- [tmp0]"=&r"(tmp[0]), +- [dst]"+&r"(dst), [src]"+&r"(src), +- [h]"+&r"(h) +- : [stride]"r"((mips_reg)stride), +- [ff_pw_32]"f"(ff_pw_32), +- [A]"f"(A), [E]"f"(E) +- : "memory" +- ); +- } else { +- /* x==0, y!=0 */ +- E = y << 3; +- A = 64 - E; +- __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "dli %[tmp0], 0x06 \n\t" +- "pshufh %[A], %[A], %[ftmp0] \n\t" +- "pshufh %[E], %[E], %[ftmp0] \n\t" +- "mtc1 %[tmp0], %[ftmp7] \n\t" +- +- "1: \n\t" +- MMI_ULDC1(%[ftmp1], %[src], 0x00) +- PTR_ADDU "%[src], %[src], %[stride] \n\t" +- MMI_ULDC1(%[ftmp2], %[src], 0x00) +- "addi %[h], %[h], -0x01 \n\t" +- +- "punpcklbh %[ftmp3], %[ftmp1], %[ftmp0] \n\t" +- "punpckhbh %[ftmp4], %[ftmp1], %[ftmp0] \n\t" +- "punpcklbh %[ftmp5], %[ftmp2], %[ftmp0] \n\t" +- "punpckhbh %[ftmp6], %[ftmp2], %[ftmp0] \n\t" +- "pmullh %[ftmp3], %[ftmp3], %[A] \n\t" +- "pmullh %[ftmp5], %[ftmp5], %[E] \n\t" +- "paddh %[ftmp1], %[ftmp3], %[ftmp5] \n\t" +- "pmullh %[ftmp4], %[ftmp4], %[A] \n\t" +- "pmullh %[ftmp6], %[ftmp6], %[E] \n\t" +- "paddh %[ftmp2], %[ftmp4], %[ftmp6] \n\t" +- +- "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" +- "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t" +- "psrlh %[ftmp1], %[ftmp1], %[ftmp7] \n\t" +- "psrlh %[ftmp2], %[ftmp2], %[ftmp7] \n\t" +- "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" +- MMI_LDC1(%[ftmp2], %[dst], 0x00) +- "pavgb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" +- MMI_SDC1(%[ftmp1], %[dst], 0x00) +- PTR_ADDU "%[dst], %[dst], %[stride] \n\t" +- "bnez %[h], 1b \n\t" +- : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), +- [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), +- [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), +- [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), +- [tmp0]"=&r"(tmp[0]), +- [dst]"+&r"(dst), [src]"+&r"(src), +- [h]"+&r"(h) +- : [stride]"r"((mips_reg)stride), +- [ff_pw_32]"f"(ff_pw_32), +- [A]"f"(A), [E]"f"(E) +- : "memory" +- ); +- } +- } ++ /* x==0, y!=0 */ ++ E = y << 3; ++ A = 64 - E; ++ __asm__ volatile ( ++ "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "dli %[tmp0], 0x06 \n\t" ++ "pshufh %[A], %[A], %[ftmp0] \n\t" ++ "pshufh %[E], %[E], %[ftmp0] \n\t" ++ "mtc1 %[tmp0], %[ftmp7] \n\t" ++ ++ "1: \n\t" ++ MMI_ULDC1(%[ftmp1], %[src], 0x00) ++ PTR_ADDU "%[src], %[src], %[stride] \n\t" ++ MMI_ULDC1(%[ftmp2], %[src], 0x00) ++ "addi %[h], %[h], -0x01 \n\t" ++ ++ "punpcklbh %[ftmp3], %[ftmp1], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp4], %[ftmp1], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp5], %[ftmp2], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp6], %[ftmp2], %[ftmp0] \n\t" ++ "pmullh %[ftmp3], %[ftmp3], %[A] \n\t" ++ "pmullh %[ftmp5], %[ftmp5], %[E] \n\t" ++ "paddh %[ftmp1], %[ftmp3], %[ftmp5] \n\t" ++ "pmullh %[ftmp4], %[ftmp4], %[A] \n\t" ++ "pmullh %[ftmp6], %[ftmp6], %[E] \n\t" ++ "paddh %[ftmp2], %[ftmp4], %[ftmp6] \n\t" ++ ++ "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" ++ "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t" ++ "psrlh %[ftmp1], %[ftmp1], %[ftmp7] \n\t" ++ "psrlh %[ftmp2], %[ftmp2], %[ftmp7] \n\t" ++ "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" ++ MMI_LDC1(%[ftmp2], %[dst], 0x00) ++ "pavgb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" ++ MMI_SDC1(%[ftmp1], %[dst], 0x00) ++ PTR_ADDU "%[dst], %[dst], %[stride] \n\t" ++ "bnez %[h], 1b \n\t" ++ : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), ++ [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), ++ [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), ++ [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), ++ [tmp0]"=&r"(tmp[0]), ++ [dst]"+&r"(dst), [src]"+&r"(src), ++ [h]"+&r"(h) ++ : [stride]"r"((mips_reg)stride), ++ [ff_pw_32]"f"(ff_pw_32), ++ [A]"f"(A), [E]"f"(E) ++ : "memory" ++ ); + } + } + +@@ -567,8 +499,8 @@ void ff_put_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + { + const int A = (8 - x) * (8 - y); + const int B = x * (8 - y); +- const int C = (8 - x) * y; +- const int D = x * y; ++ const int C = (8 - x) * y; ++ const int D = x * y; + const int E = B + C; + double ftmp[8]; + uint64_t tmp[1]; +@@ -586,31 +518,29 @@ void ff_put_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + "pshufh %[D], %[D], %[ftmp0] \n\t" + + "1: \n\t" +- PTR_ADDU "%[addr0], %[src], %[stride] \n\t" + MMI_ULWC1(%[ftmp1], %[src], 0x00) + MMI_ULWC1(%[ftmp2], %[src], 0x01) +- MMI_ULWC1(%[ftmp3], %[addr0], 0x00) +- MMI_ULWC1(%[ftmp4], %[addr0], 0x01) ++ PTR_ADDU "%[src], %[src], %[stride] \n\t" ++ MMI_ULWC1(%[ftmp3], %[src], 0x00) ++ MMI_ULWC1(%[ftmp4], %[src], 0x01) + + "punpcklbh %[ftmp5], %[ftmp1], %[ftmp0] \n\t" + "punpcklbh %[ftmp6], %[ftmp2], %[ftmp0] \n\t" + "pmullh %[ftmp5], %[ftmp5], %[A] \n\t" + "pmullh %[ftmp6], %[ftmp6], %[B] \n\t" + "paddh %[ftmp1], %[ftmp5], %[ftmp6] \n\t" +- + "punpcklbh %[ftmp5], %[ftmp3], %[ftmp0] \n\t" + "punpcklbh %[ftmp6], %[ftmp4], %[ftmp0] \n\t" + "pmullh %[ftmp5], %[ftmp5], %[C] \n\t" + "pmullh %[ftmp6], %[ftmp6], %[D] \n\t" + "paddh %[ftmp2], %[ftmp5], %[ftmp6] \n\t" +- + "paddh %[ftmp1], %[ftmp1], %[ftmp2] \n\t" + "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" + "psrlh %[ftmp1], %[ftmp1], %[ftmp7] \n\t" + "packushb %[ftmp1], %[ftmp1], %[ftmp0] \n\t" ++ + "addi %[h], %[h], -0x01 \n\t" + MMI_SWC1(%[ftmp1], %[dst], 0x00) +- PTR_ADDU "%[src], %[src], %[stride] \n\t" + PTR_ADDU "%[dst], %[dst], %[stride] \n\t" + "bnez %[h], 1b \n\t" + : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), +@@ -619,7 +549,6 @@ void ff_put_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), + [tmp0]"=&r"(tmp[0]), + RESTRICT_ASM_LOW32 +- [addr0]"=&r"(addr[0]), + [dst]"+&r"(dst), [src]"+&r"(src), + [h]"+&r"(h) + : [stride]"r"((mips_reg)stride),[ff_pw_32]"f"(ff_pw_32), +@@ -629,7 +558,6 @@ void ff_put_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + ); + } else if (E) { + const int step = C ? stride : 1; +- + __asm__ volatile ( + "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "dli %[tmp0], 0x06 \n\t" +@@ -638,22 +566,20 @@ void ff_put_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + "mtc1 %[tmp0], %[ftmp5] \n\t" + + "1: \n\t" +- PTR_ADDU "%[addr0], %[src], %[step] \n\t" + MMI_ULWC1(%[ftmp1], %[src], 0x00) ++ PTR_ADDU "%[addr0], %[src], %[step] \n\t" + MMI_ULWC1(%[ftmp2], %[addr0], 0x00) +- ++ PTR_ADDU "%[src], %[src], %[stride] \n\t" ++ "addi %[h], %[h], -0x01 \n\t" + "punpcklbh %[ftmp3], %[ftmp1], %[ftmp0] \n\t" + "punpcklbh %[ftmp4], %[ftmp2], %[ftmp0] \n\t" + "pmullh %[ftmp3], %[ftmp3], %[A] \n\t" + "pmullh %[ftmp4], %[ftmp4], %[E] \n\t" + "paddh %[ftmp1], %[ftmp3], %[ftmp4] \n\t" +- + "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" + "psrlh %[ftmp1], %[ftmp1], %[ftmp5] \n\t" + "packushb %[ftmp1], %[ftmp1], %[ftmp0] \n\t" +- "addi %[h], %[h], -0x01 \n\t" + MMI_SWC1(%[ftmp1], %[dst], 0x00) +- PTR_ADDU "%[src], %[src], %[stride] \n\t" + PTR_ADDU "%[dst], %[dst], %[stride] \n\t" + "bnez %[h], 1b \n\t" + : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), +@@ -671,42 +597,22 @@ void ff_put_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + ); + } else { + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "dli %[tmp0], 0x06 \n\t" +- "pshufh %[A], %[A], %[ftmp0] \n\t" +- "mtc1 %[tmp0], %[ftmp3] \n\t" +- + "1: \n\t" +- MMI_ULWC1(%[ftmp1], %[src], 0x00) +- "punpcklbh %[ftmp2], %[ftmp1], %[ftmp0] \n\t" +- "pmullh %[ftmp1], %[ftmp2], %[A] \n\t" +- "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" +- "psrlh %[ftmp1], %[ftmp1], %[ftmp3] \n\t" +- "packushb %[ftmp1], %[ftmp1], %[ftmp0] \n\t" ++ MMI_ULWC1(%[ftmp0], %[src], 0x00) + PTR_ADDU "%[src], %[src], %[stride] \n\t" +- MMI_SWC1(%[ftmp1], %[dst], 0x00) +- PTR_ADDU "%[dst], %[dst], %[stride] \n\t" +- + MMI_ULWC1(%[ftmp1], %[src], 0x00) +- "punpcklbh %[ftmp2], %[ftmp1], %[ftmp0] \n\t" +- "pmullh %[ftmp1], %[ftmp2], %[A] \n\t" +- "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" +- "psrlh %[ftmp1], %[ftmp1], %[ftmp3] \n\t" +- "packushb %[ftmp1], %[ftmp1], %[ftmp0] \n\t" ++ PTR_ADDU "%[src], %[src], %[stride] \n\t" + "addi %[h], %[h], -0x02 \n\t" ++ MMI_SWC1(%[ftmp0], %[dst], 0x00) ++ PTR_ADDU "%[dst], %[dst], %[stride] \n\t" + MMI_SWC1(%[ftmp1], %[dst], 0x00) +- +- PTR_ADDU "%[src], %[src], %[stride] \n\t" + PTR_ADDU "%[dst], %[dst], %[stride] \n\t" + "bnez %[h], 1b \n\t" + : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), +- [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), +- [tmp0]"=&r"(tmp[0]), +- RESTRICT_ASM_LOW32 + [dst]"+&r"(dst), [src]"+&r"(src), ++ RESTRICT_ASM_LOW32 + [h]"+&r"(h) +- : [stride]"r"((mips_reg)stride),[ff_pw_32]"f"(ff_pw_32), +- [A]"f"(A) ++ : [stride]"r"((mips_reg)stride) + : "memory" + ); + } +@@ -736,33 +642,31 @@ void ff_avg_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + "pshufh %[D], %[D], %[ftmp0] \n\t" + + "1: \n\t" +- PTR_ADDU "%[addr0], %[src], %[stride] \n\t" + MMI_ULWC1(%[ftmp1], %[src], 0x00) + MMI_ULWC1(%[ftmp2], %[src], 0x01) +- MMI_ULWC1(%[ftmp3], %[addr0], 0x00) +- MMI_ULWC1(%[ftmp4], %[addr0], 0x01) ++ PTR_ADDU "%[src], %[src], %[stride] \n\t" ++ MMI_ULWC1(%[ftmp3], %[src], 0x00) ++ MMI_ULWC1(%[ftmp4], %[src], 0x01) + + "punpcklbh %[ftmp5], %[ftmp1], %[ftmp0] \n\t" + "punpcklbh %[ftmp6], %[ftmp2], %[ftmp0] \n\t" + "pmullh %[ftmp5], %[ftmp5], %[A] \n\t" + "pmullh %[ftmp6], %[ftmp6], %[B] \n\t" + "paddh %[ftmp1], %[ftmp5], %[ftmp6] \n\t" +- + "punpcklbh %[ftmp5], %[ftmp3], %[ftmp0] \n\t" + "punpcklbh %[ftmp6], %[ftmp4], %[ftmp0] \n\t" + "pmullh %[ftmp5], %[ftmp5], %[C] \n\t" + "pmullh %[ftmp6], %[ftmp6], %[D] \n\t" + "paddh %[ftmp2], %[ftmp5], %[ftmp6] \n\t" +- + "paddh %[ftmp1], %[ftmp1], %[ftmp2] \n\t" + "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" + "psrlh %[ftmp1], %[ftmp1], %[ftmp7] \n\t" + "packushb %[ftmp1], %[ftmp1], %[ftmp0] \n\t" + MMI_LWC1(%[ftmp2], %[dst], 0x00) + "pavgb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" ++ + "addi %[h], %[h], -0x01 \n\t" + MMI_SWC1(%[ftmp1], %[dst], 0x00) +- PTR_ADDU "%[src], %[src], %[stride] \n\t" + PTR_ADDU "%[dst], %[dst], %[stride] \n\t" + "bnez %[h], 1b \n\t" + : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), +@@ -771,7 +675,6 @@ void ff_avg_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), + [tmp0]"=&r"(tmp[0]), + RESTRICT_ASM_LOW32 +- [addr0]"=&r"(addr[0]), + [dst]"+&r"(dst), [src]"+&r"(src), + [h]"+&r"(h) + : [stride]"r"((mips_reg)stride),[ff_pw_32]"f"(ff_pw_32), +@@ -781,32 +684,30 @@ void ff_avg_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + ); + } else if (E) { + const int step = C ? stride : 1; +- + __asm__ volatile ( + "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "dli %[tmp0], 0x06 \n\t" + "pshufh %[A], %[A], %[ftmp0] \n\t" + "pshufh %[E], %[E], %[ftmp0] \n\t" + "mtc1 %[tmp0], %[ftmp5] \n\t" ++ + "1: \n\t" +- PTR_ADDU "%[addr0], %[src], %[step] \n\t" + MMI_ULWC1(%[ftmp1], %[src], 0x00) ++ PTR_ADDU "%[addr0], %[src], %[step] \n\t" + MMI_ULWC1(%[ftmp2], %[addr0], 0x00) +- ++ PTR_ADDU "%[src], %[src], %[stride] \n\t" ++ "addi %[h], %[h], -0x01 \n\t" + "punpcklbh %[ftmp3], %[ftmp1], %[ftmp0] \n\t" + "punpcklbh %[ftmp4], %[ftmp2], %[ftmp0] \n\t" + "pmullh %[ftmp3], %[ftmp3], %[A] \n\t" + "pmullh %[ftmp4], %[ftmp4], %[E] \n\t" + "paddh %[ftmp1], %[ftmp3], %[ftmp4] \n\t" +- + "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" + "psrlh %[ftmp1], %[ftmp1], %[ftmp5] \n\t" + "packushb %[ftmp1], %[ftmp1], %[ftmp0] \n\t" + MMI_LWC1(%[ftmp2], %[dst], 0x00) + "pavgb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" +- "addi %[h], %[h], -0x01 \n\t" + MMI_SWC1(%[ftmp1], %[dst], 0x00) +- PTR_ADDU "%[src], %[src], %[stride] \n\t" + PTR_ADDU "%[dst], %[dst], %[stride] \n\t" + "bnez %[h], 1b \n\t" + : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), +@@ -824,46 +725,27 @@ void ff_avg_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + ); + } else { + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "dli %[tmp0], 0x06 \n\t" +- "pshufh %[A], %[A], %[ftmp0] \n\t" +- "mtc1 %[tmp0], %[ftmp3] \n\t" +- + "1: \n\t" +- MMI_ULWC1(%[ftmp1], %[src], 0x00) +- "punpcklbh %[ftmp2], %[ftmp1], %[ftmp0] \n\t" +- "pmullh %[ftmp1], %[ftmp2], %[A] \n\t" +- "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" +- "psrlh %[ftmp1], %[ftmp1], %[ftmp3] \n\t" +- "packushb %[ftmp1], %[ftmp1], %[ftmp0] \n\t" +- MMI_LWC1(%[ftmp2], %[dst], 0x00) +- "pavgb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" ++ MMI_ULWC1(%[ftmp0], %[src], 0x00) + PTR_ADDU "%[src], %[src], %[stride] \n\t" +- MMI_SWC1(%[ftmp1], %[dst], 0x00) +- PTR_ADDU "%[dst], %[dst], %[stride] \n\t" +- + MMI_ULWC1(%[ftmp1], %[src], 0x00) +- "punpcklbh %[ftmp2], %[ftmp1], %[ftmp0] \n\t" +- "pmullh %[ftmp1], %[ftmp2], %[A] \n\t" +- "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" +- "psrlh %[ftmp1], %[ftmp1], %[ftmp3] \n\t" +- "packushb %[ftmp1], %[ftmp1], %[ftmp0] \n\t" +- MMI_LWC1(%[ftmp2], %[dst], 0x00) +- "pavgb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" ++ PTR_ADDU "%[src], %[src], %[stride] \n\t" + "addi %[h], %[h], -0x02 \n\t" ++ MMI_LWC1(%[ftmp2], %[dst], 0x00) ++ "pavgb %[ftmp0], %[ftmp0], %[ftmp2] \n\t" ++ MMI_SWC1(%[ftmp0], %[dst], 0x00) ++ PTR_ADDU "%[dst], %[dst], %[stride] \n\t" ++ MMI_LWC1(%[ftmp3], %[dst], 0x00) ++ "pavgb %[ftmp1], %[ftmp1], %[ftmp3] \n\t" + MMI_SWC1(%[ftmp1], %[dst], 0x00) +- +- PTR_ADDU "%[src], %[src], %[stride] \n\t" + PTR_ADDU "%[dst], %[dst], %[stride] \n\t" + "bnez %[h], 1b \n\t" + : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), + [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), +- [tmp0]"=&r"(tmp[0]), +- RESTRICT_ASM_LOW32 + [dst]"+&r"(dst), [src]"+&r"(src), ++ RESTRICT_ASM_LOW32 + [h]"+&r"(h) +- : [stride]"r"((mips_reg)stride),[ff_pw_32]"f"(ff_pw_32), +- [A]"f"(A) ++ : [stride]"r"((mips_reg)stride) + : "memory" + ); + } +diff --git a/libavcodec/mips/h264chroma_msa.c b/libavcodec/mips/h264chroma_msa.c +index 4c25761..4a68d9e 100644 +--- a/libavcodec/mips/h264chroma_msa.c ++++ b/libavcodec/mips/h264chroma_msa.c +@@ -85,7 +85,7 @@ static void avc_chroma_hz_2x4_msa(uint8_t *src, uint8_t *dst, int32_t stride, + res_r = __msa_sat_u_h(res_r, 7); + res = (v8i16) __msa_pckev_b((v16i8) res_r, (v16i8) res_r); + +- ST2x4_UB(res, 0, dst, stride); ++ ST_H4(res, 0, 1, 2, 3, dst, stride); + } + + static void avc_chroma_hz_2w_msa(uint8_t *src, uint8_t *dst, int32_t stride, +@@ -121,7 +121,7 @@ static void avc_chroma_hz_4x2_msa(uint8_t *src, uint8_t *dst, int32_t stride, + res_r = __msa_sat_u_h(res_r, 7); + res = (v4i32) __msa_pckev_b((v16i8) res_r, (v16i8) res_r); + +- ST4x2_UB(res, dst, stride); ++ ST_W2(res, 0, 1, dst, stride); + } + + static void avc_chroma_hz_4x4_msa(uint8_t *src, uint8_t *dst, int32_t stride, +@@ -144,7 +144,7 @@ static void avc_chroma_hz_4x4_msa(uint8_t *src, uint8_t *dst, int32_t stride, + SRARI_H2_UH(res0_r, res1_r, 6); + SAT_UH2_UH(res0_r, res1_r, 7); + out = (v16u8) __msa_pckev_b((v16i8) res1_r, (v16i8) res0_r); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, stride); ++ ST_W4(out, 0, 1, 2, 3, dst, stride); + } + + static void avc_chroma_hz_4x8_msa(uint8_t *src, uint8_t *dst, int32_t stride, +@@ -168,7 +168,7 @@ static void avc_chroma_hz_4x8_msa(uint8_t *src, uint8_t *dst, int32_t stride, + SRARI_H4_UH(res0, res1, res2, res3, 6); + SAT_UH4_UH(res0, res1, res2, res3, 7); + PCKEV_B2_UB(res1, res0, res3, res2, out0, out1); +- ST4x8_UB(out0, out1, dst, stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, stride); + } + + static void avc_chroma_hz_4w_msa(uint8_t *src, uint8_t *dst, int32_t stride, +@@ -204,7 +204,7 @@ static void avc_chroma_hz_8x4_msa(uint8_t *src, uint8_t *dst, int32_t stride, + SRARI_H4_UH(res0, res1, res2, res3, 6); + SAT_UH4_UH(res0, res1, res2, res3, 7); + PCKEV_B2_UB(res1, res0, res3, res2, out0, out1); +- ST8x4_UB(out0, out1, dst, stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, stride); + } + + static void avc_chroma_hz_8x8_msa(uint8_t *src, uint8_t *dst, int32_t stride, +@@ -237,7 +237,7 @@ static void avc_chroma_hz_8x8_msa(uint8_t *src, uint8_t *dst, int32_t stride, + SAT_UH4_UH(res4, res5, res6, res7, 7); + PCKEV_B2_UB(res1, res0, res3, res2, out0, out1); + PCKEV_B2_UB(res5, res4, res7, res6, out2, out3); +- ST8x8_UB(out0, out1, out2, out3, dst, stride); ++ ST_D8(out0, out1, out2, out3, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); + } + + static void avc_chroma_hz_nonmult_msa(uint8_t *src, uint8_t *dst, +@@ -266,7 +266,7 @@ static void avc_chroma_hz_nonmult_msa(uint8_t *src, uint8_t *dst, + SRARI_H4_UH(res0, res1, res2, res3, 6); + SAT_UH4_UH(res0, res1, res2, res3, 7); + PCKEV_B2_UB(res1, res0, res3, res2, out0, out1); +- ST8x4_UB(out0, out1, dst, stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, stride); + dst += (4 * stride); + } + +@@ -283,7 +283,7 @@ static void avc_chroma_hz_nonmult_msa(uint8_t *src, uint8_t *dst, + res0 = __msa_sat_u_h(res0, 7); + res0 = (v8u16) __msa_pckev_b((v16i8) res0, (v16i8) res0); + +- ST8x1_UB(res0, dst); ++ ST_D1(res0, 0, dst); + dst += stride; + } + } +@@ -359,7 +359,7 @@ static void avc_chroma_vt_2x4_msa(uint8_t *src, uint8_t *dst, int32_t stride, + + res = (v8i16) __msa_pckev_b((v16i8) res_r, (v16i8) res_r); + +- ST2x4_UB(res, 0, dst, stride); ++ ST_H4(res, 0, 1, 2, 3, dst, stride); + } + + static void avc_chroma_vt_2w_msa(uint8_t *src, uint8_t *dst, int32_t stride, +@@ -394,7 +394,7 @@ static void avc_chroma_vt_4x2_msa(uint8_t *src, uint8_t *dst, int32_t stride, + res_r = __msa_sat_u_h(res_r, 7); + res = (v4i32) __msa_pckev_b((v16i8) res_r, (v16i8) res_r); + +- ST4x2_UB(res, dst, stride); ++ ST_W2(res, 0, 1, dst, stride); + } + + static void avc_chroma_vt_4x4_msa(uint8_t *src, uint8_t *dst, int32_t stride, +@@ -418,7 +418,7 @@ static void avc_chroma_vt_4x4_msa(uint8_t *src, uint8_t *dst, int32_t stride, + SRARI_H2_UH(res0_r, res1_r, 6); + SAT_UH2_UH(res0_r, res1_r, 7); + out = (v16u8) __msa_pckev_b((v16i8) res1_r, (v16i8) res0_r); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, stride); ++ ST_W4(out, 0, 1, 2, 3, dst, stride); + } + + static void avc_chroma_vt_4x8_msa(uint8_t *src, uint8_t *dst, int32_t stride, +@@ -446,7 +446,7 @@ static void avc_chroma_vt_4x8_msa(uint8_t *src, uint8_t *dst, int32_t stride, + SRARI_H4_UH(res0, res1, res2, res3, 6); + SAT_UH4_UH(res0, res1, res2, res3, 7); + PCKEV_B2_UB(res1, res0, res3, res2, out0, out1); +- ST4x8_UB(out0, out1, dst, stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, stride); + } + + static void avc_chroma_vt_4w_msa(uint8_t *src, uint8_t *dst, int32_t stride, +@@ -480,7 +480,7 @@ static void avc_chroma_vt_8x4_msa(uint8_t *src, uint8_t *dst, int32_t stride, + SRARI_H4_UH(res0, res1, res2, res3, 6); + SAT_UH4_UH(res0, res1, res2, res3, 7); + PCKEV_B2_UB(res1, res0, res3, res2, out0, out1); +- ST8x4_UB(out0, out1, dst, stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, stride); + } + + static void avc_chroma_vt_8x8_msa(uint8_t *src, uint8_t *dst, int32_t stride, +@@ -512,7 +512,7 @@ static void avc_chroma_vt_8x8_msa(uint8_t *src, uint8_t *dst, int32_t stride, + SAT_UH4_UH(res0, res1, res2, res3, 7); + PCKEV_B2_UB(res1, res0, res3, res2, out0, out1); + PCKEV_B2_UB(res5, res4, res7, res6, out2, out3); +- ST8x8_UB(out0, out1, out2, out3, dst, stride); ++ ST_D8(out0, out1, out2, out3, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); + } + + static void avc_chroma_vt_8w_msa(uint8_t *src, uint8_t *dst, int32_t stride, +@@ -592,7 +592,7 @@ static void avc_chroma_hv_2x4_msa(uint8_t *src, uint8_t *dst, int32_t stride, + + res = (v8i16) __msa_pckev_b((v16i8) res_vt0, (v16i8) res_vt0); + +- ST2x4_UB(res, 0, dst, stride); ++ ST_H4(res, 0, 1, 2, 3, dst, stride); + } + + static void avc_chroma_hv_2w_msa(uint8_t *src, uint8_t *dst, int32_t stride, +@@ -634,7 +634,7 @@ static void avc_chroma_hv_4x2_msa(uint8_t *src, uint8_t *dst, int32_t stride, + res_vt0 = __msa_sat_u_h(res_vt0, 7); + res = (v4i32) __msa_pckev_b((v16i8) res_vt0, (v16i8) res_vt0); + +- ST4x2_UB(res, dst, stride); ++ ST_W2(res, 0, 1, dst, stride); + } + + static void avc_chroma_hv_4x4_msa(uint8_t *src, uint8_t *dst, int32_t stride, +@@ -666,7 +666,8 @@ static void avc_chroma_hv_4x4_msa(uint8_t *src, uint8_t *dst, int32_t stride, + SRARI_H2_UH(res_vt0, res_vt1, 6); + SAT_UH2_UH(res_vt0, res_vt1, 7); + PCKEV_B2_SW(res_vt0, res_vt0, res_vt1, res_vt1, res0, res1); +- ST4x4_UB(res0, res1, 0, 1, 0, 1, dst, stride); ++ ST_W2(res0, 0, 1, dst, stride); ++ ST_W2(res1, 0, 1, dst + 2 * stride, stride); + } + + static void avc_chroma_hv_4x8_msa(uint8_t *src, uint8_t *dst, int32_t stride, +@@ -706,7 +707,7 @@ static void avc_chroma_hv_4x8_msa(uint8_t *src, uint8_t *dst, int32_t stride, + SRARI_H4_UH(res_vt0, res_vt1, res_vt2, res_vt3, 6); + SAT_UH4_UH(res_vt0, res_vt1, res_vt2, res_vt3, 7); + PCKEV_B2_UB(res_vt1, res_vt0, res_vt3, res_vt2, res0, res1); +- ST4x8_UB(res0, res1, dst, stride); ++ ST_W8(res0, res1, 0, 1, 2, 3, 0, 1, 2, 3, dst, stride); + } + + static void avc_chroma_hv_4w_msa(uint8_t *src, uint8_t *dst, int32_t stride, +@@ -766,7 +767,7 @@ static void avc_chroma_hv_8x4_msa(uint8_t *src, uint8_t *dst, int32_t stride, + SRARI_H4_UH(res_vt0, res_vt1, res_vt2, res_vt3, 6); + SAT_UH4_UH(res_vt0, res_vt1, res_vt2, res_vt3, 7); + PCKEV_B2_UB(res_vt1, res_vt0, res_vt3, res_vt2, out0, out1); +- ST8x4_UB(out0, out1, dst, stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, stride); + } + + static void avc_chroma_hv_8x8_msa(uint8_t *src, uint8_t *dst, int32_t stride, +@@ -822,7 +823,7 @@ static void avc_chroma_hv_8x8_msa(uint8_t *src, uint8_t *dst, int32_t stride, + SAT_UH4_UH(res_vt4, res_vt5, res_vt6, res_vt7, 7); + PCKEV_B2_UB(res_vt1, res_vt0, res_vt3, res_vt2, out0, out1); + PCKEV_B2_UB(res_vt5, res_vt4, res_vt7, res_vt6, out2, out3); +- ST8x8_UB(out0, out1, out2, out3, dst, stride); ++ ST_D8(out0, out1, out2, out3, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); + } + + static void avc_chroma_hv_8w_msa(uint8_t *src, uint8_t *dst, int32_t stride, +@@ -918,7 +919,7 @@ static void avc_chroma_hz_and_aver_dst_2x4_msa(uint8_t *src, uint8_t *dst, + dst0 = (v16u8) __msa_pckev_b((v16i8) res_r, (v16i8) res_r); + dst0 = __msa_aver_u_b(dst0, dst_data); + +- ST2x4_UB(dst0, 0, dst, stride); ++ ST_H4(dst0, 0, 1, 2, 3, dst, stride); + } + + static void avc_chroma_hz_and_aver_dst_2w_msa(uint8_t *src, uint8_t *dst, +@@ -962,7 +963,7 @@ static void avc_chroma_hz_and_aver_dst_4x2_msa(uint8_t *src, uint8_t *dst, + res = __msa_pckev_b((v16i8) res_r, (v16i8) res_r); + dst_data = __msa_aver_u_b((v16u8) res, dst_data); + +- ST4x2_UB(dst_data, dst, stride); ++ ST_W2(dst_data, 0, 1, dst, stride); + } + + static void avc_chroma_hz_and_aver_dst_4x4_msa(uint8_t *src, uint8_t *dst, +@@ -991,7 +992,7 @@ static void avc_chroma_hz_and_aver_dst_4x4_msa(uint8_t *src, uint8_t *dst, + SAT_UH2_UH(res0_r, res1_r, 7); + out = (v16u8) __msa_pckev_b((v16i8) res1_r, (v16i8) res0_r); + out = __msa_aver_u_b(out, dst_data); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, stride); ++ ST_W4(out, 0, 1, 2, 3, dst, stride); + } + + static void avc_chroma_hz_and_aver_dst_4x8_msa(uint8_t *src, uint8_t *dst, +@@ -1023,7 +1024,7 @@ static void avc_chroma_hz_and_aver_dst_4x8_msa(uint8_t *src, uint8_t *dst, + SAT_UH4_UH(res0, res1, res2, res3, 7); + PCKEV_B2_UB(res1, res0, res3, res2, out0, out1); + AVER_UB2_UB(out0, dst0, out1, dst1, out0, out1); +- ST4x8_UB(out0, out1, dst, stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, stride); + } + + static void avc_chroma_hz_and_aver_dst_4w_msa(uint8_t *src, uint8_t *dst, +@@ -1066,7 +1067,7 @@ static void avc_chroma_hz_and_aver_dst_8x4_msa(uint8_t *src, uint8_t *dst, + SAT_UH4_UH(res0, res1, res2, res3, 7); + PCKEV_B2_UB(res1, res0, res3, res2, out0, out1); + AVER_UB2_UB(out0, dst0, out1, dst1, dst0, dst1); +- ST8x4_UB(dst0, dst1, dst, stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, stride); + } + + static void avc_chroma_hz_and_aver_dst_8x8_msa(uint8_t *src, uint8_t *dst, +@@ -1110,7 +1111,7 @@ static void avc_chroma_hz_and_aver_dst_8x8_msa(uint8_t *src, uint8_t *dst, + PCKEV_B2_UB(res5, res4, res7, res6, out2, out3); + AVER_UB2_UB(out0, dst0, out1, dst1, out0, out1); + AVER_UB2_UB(out2, dst2, out3, dst3, out2, out3); +- ST8x8_UB(out0, out1, out2, out3, dst, stride); ++ ST_D8(out0, out1, out2, out3, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); + } + + static void avc_chroma_hz_and_aver_dst_8w_msa(uint8_t *src, uint8_t *dst, +@@ -1200,7 +1201,7 @@ static void avc_chroma_vt_and_aver_dst_2x4_msa(uint8_t *src, uint8_t *dst, + res = (v8i16) __msa_pckev_b((v16i8) res_r, (v16i8) res_r); + res = (v8i16) __msa_aver_u_b((v16u8) res, dst_data); + +- ST2x4_UB(res, 0, dst, stride); ++ ST_H4(res, 0, 1, 2, 3, dst, stride); + } + + static void avc_chroma_vt_and_aver_dst_2w_msa(uint8_t *src, uint8_t *dst, +@@ -1243,7 +1244,7 @@ static void avc_chroma_vt_and_aver_dst_4x2_msa(uint8_t *src, uint8_t *dst, + res = (v16u8) __msa_pckev_b((v16i8) res_r, (v16i8) res_r); + res = __msa_aver_u_b(res, dst_data); + +- ST4x2_UB(res, dst, stride); ++ ST_W2(res, 0, 1, dst, stride); + } + + static void avc_chroma_vt_and_aver_dst_4x4_msa(uint8_t *src, uint8_t *dst, +@@ -1273,7 +1274,7 @@ static void avc_chroma_vt_and_aver_dst_4x4_msa(uint8_t *src, uint8_t *dst, + SAT_UH2_UH(res0_r, res1_r, 7); + out = (v16u8) __msa_pckev_b((v16i8) res1_r, (v16i8) res0_r); + out = __msa_aver_u_b(out, dst0); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, stride); ++ ST_W4(out, 0, 1, 2, 3, dst, stride); + } + + static void avc_chroma_vt_and_aver_dst_4x8_msa(uint8_t *src, uint8_t *dst, +@@ -1309,7 +1310,7 @@ static void avc_chroma_vt_and_aver_dst_4x8_msa(uint8_t *src, uint8_t *dst, + SAT_UH4_UH(res0, res1, res2, res3, 7); + PCKEV_B2_UB(res1, res0, res3, res2, out0, out1); + AVER_UB2_UB(out0, dst0, out1, dst1, out0, out1); +- ST4x8_UB(out0, out1, dst, stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, stride); + } + + static void avc_chroma_vt_and_aver_dst_4w_msa(uint8_t *src, uint8_t *dst, +@@ -1351,7 +1352,7 @@ static void avc_chroma_vt_and_aver_dst_8x4_msa(uint8_t *src, uint8_t *dst, + SAT_UH4_UH(res0, res1, res2, res3, 7); + PCKEV_B2_UB(res1, res0, res3, res2, out0, out1); + AVER_UB2_UB(out0, dst0, out1, dst1, out0, out1); +- ST8x4_UB(out0, out1, dst, stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, stride); + } + + static void avc_chroma_vt_and_aver_dst_8x8_msa(uint8_t *src, uint8_t *dst, +@@ -1394,7 +1395,7 @@ static void avc_chroma_vt_and_aver_dst_8x8_msa(uint8_t *src, uint8_t *dst, + PCKEV_B2_UB(res5, res4, res7, res6, out2, out3); + AVER_UB2_UB(out0, dst0, out1, dst1, out0, out1); + AVER_UB2_UB(out2, dst2, out3, dst3, out2, out3); +- ST8x8_UB(out0, out1, out2, out3, dst, stride); ++ ST_D8(out0, out1, out2, out3, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); + } + + static void avc_chroma_vt_and_aver_dst_8w_msa(uint8_t *src, uint8_t *dst, +@@ -1492,7 +1493,7 @@ static void avc_chroma_hv_and_aver_dst_2x4_msa(uint8_t *src, uint8_t *dst, + res = __msa_pckev_b((v16i8) res_vt0, (v16i8) res_vt0); + dst0 = __msa_aver_u_b((v16u8) res, dst0); + +- ST2x4_UB(dst0, 0, dst, stride); ++ ST_H4(dst0, 0, 1, 2, 3, dst, stride); + } + + static void avc_chroma_hv_and_aver_dst_2w_msa(uint8_t *src, uint8_t *dst, +@@ -1545,7 +1546,7 @@ static void avc_chroma_hv_and_aver_dst_4x2_msa(uint8_t *src, uint8_t *dst, + dst0 = (v16u8) __msa_pckev_b((v16i8) res_vt0, (v16i8) res_vt0); + dst0 = __msa_aver_u_b(dst0, dst_data); + +- ST4x2_UB(dst0, dst, stride); ++ ST_W2(dst0, 0, 1, dst, stride); + } + + static void avc_chroma_hv_and_aver_dst_4x4_msa(uint8_t *src, uint8_t *dst, +@@ -1584,7 +1585,7 @@ static void avc_chroma_hv_and_aver_dst_4x4_msa(uint8_t *src, uint8_t *dst, + SAT_UH2_UH(res_vt0, res_vt1, 7); + out = (v16u8) __msa_pckev_b((v16i8) res_vt1, (v16i8) res_vt0); + out = __msa_aver_u_b(out, dst_data); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, stride); ++ ST_W4(out, 0, 1, 2, 3, dst, stride); + } + + static void avc_chroma_hv_and_aver_dst_4x8_msa(uint8_t *src, uint8_t *dst, +@@ -1633,7 +1634,7 @@ static void avc_chroma_hv_and_aver_dst_4x8_msa(uint8_t *src, uint8_t *dst, + SAT_UH4_UH(res_vt0, res_vt1, res_vt2, res_vt3, 7); + PCKEV_B2_UB(res_vt1, res_vt0, res_vt3, res_vt2, res0, res1); + AVER_UB2_UB(res0, dst0, res1, dst1, res0, res1); +- ST4x8_UB(res0, res1, dst, stride); ++ ST_W8(res0, res1, 0, 1, 2, 3, 0, 1, 2, 3, dst, stride); + } + + static void avc_chroma_hv_and_aver_dst_4w_msa(uint8_t *src, uint8_t *dst, +@@ -1701,7 +1702,7 @@ static void avc_chroma_hv_and_aver_dst_8x4_msa(uint8_t *src, uint8_t *dst, + SAT_UH4_UH(res_vt0, res_vt1, res_vt2, res_vt3, 7); + PCKEV_B2_UB(res_vt1, res_vt0, res_vt3, res_vt2, out0, out1); + AVER_UB2_UB(out0, dst0, out1, dst1, out0, out1); +- ST8x4_UB(out0, out1, dst, stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, stride); + } + + static void avc_chroma_hv_and_aver_dst_8x8_msa(uint8_t *src, uint8_t *dst, +@@ -1770,7 +1771,7 @@ static void avc_chroma_hv_and_aver_dst_8x8_msa(uint8_t *src, uint8_t *dst, + PCKEV_B2_UB(res_vt5, res_vt4, res_vt7, res_vt6, out2, out3); + AVER_UB2_UB(out0, dst0, out1, dst1, out0, out1); + AVER_UB2_UB(out2, dst2, out3, dst3, out2, out3); +- ST8x8_UB(out0, out1, out2, out3, dst, stride); ++ ST_D8(out0, out1, out2, out3, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); + } + + static void avc_chroma_hv_and_aver_dst_8w_msa(uint8_t *src, uint8_t *dst, +@@ -1848,21 +1849,21 @@ static void avg_width4_msa(uint8_t *src, uint8_t *dst, int32_t stride, + LW4(dst + 4 * stride, stride, tp0, tp1, tp2, tp3); + INSERT_W4_UB(tp0, tp1, tp2, tp3, dst1); + AVER_UB2_UB(src0, dst0, src1, dst1, dst0, dst1); +- ST4x8_UB(dst0, dst1, dst, stride); ++ ST_W8(dst0, dst1, 0, 1, 2, 3, 0, 1, 2, 3, dst, stride); + } else if (4 == height) { + LW4(src, stride, tp0, tp1, tp2, tp3); + INSERT_W4_UB(tp0, tp1, tp2, tp3, src0); + LW4(dst, stride, tp0, tp1, tp2, tp3); + INSERT_W4_UB(tp0, tp1, tp2, tp3, dst0); + dst0 = __msa_aver_u_b(src0, dst0); +- ST4x4_UB(dst0, dst0, 0, 1, 2, 3, dst, stride); ++ ST_W4(dst0, 0, 1, 2, 3, dst, stride); + } else if (2 == height) { + LW2(src, stride, tp0, tp1); + INSERT_W2_UB(tp0, tp1, src0); + LW2(dst, stride, tp0, tp1); + INSERT_W2_UB(tp0, tp1, dst0); + dst0 = __msa_aver_u_b(src0, dst0); +- ST4x2_UB(dst0, dst, stride); ++ ST_W2(dst0, 0, 1, dst, stride); + } + } + +@@ -1889,7 +1890,7 @@ static void avg_width8_msa(uint8_t *src, uint8_t *dst, int32_t stride, + INSERT_D2_UB(tp6, tp7, dst3); + AVER_UB4_UB(src0, dst0, src1, dst1, src2, dst2, src3, dst3, dst0, dst1, + dst2, dst3); +- ST8x8_UB(dst0, dst1, dst2, dst3, dst, stride); ++ ST_D8(dst0, dst1, dst2, dst3, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); + } else if (4 == height) { + LD4(src, stride, tp0, tp1, tp2, tp3); + INSERT_D2_UB(tp0, tp1, src0); +@@ -1898,7 +1899,7 @@ static void avg_width8_msa(uint8_t *src, uint8_t *dst, int32_t stride, + INSERT_D2_UB(tp0, tp1, dst0); + INSERT_D2_UB(tp2, tp3, dst1); + AVER_UB2_UB(src0, dst0, src1, dst1, dst0, dst1); +- ST8x4_UB(dst0, dst1, dst, stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, stride); + } + } + +diff --git a/libavcodec/mips/h264dsp_init_mips.c b/libavcodec/mips/h264dsp_init_mips.c +index 1fe7f84..9cd05e0 100644 +--- a/libavcodec/mips/h264dsp_init_mips.c ++++ b/libavcodec/mips/h264dsp_init_mips.c +@@ -19,129 +19,116 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/mips/cpu.h" + #include "h264dsp_mips.h" + +-#if HAVE_MSA +-static av_cold void h264dsp_init_msa(H264DSPContext *c, +- const int bit_depth, +- const int chroma_format_idc) +-{ +- if (8 == bit_depth) { +- c->h264_v_loop_filter_luma = ff_h264_v_lpf_luma_inter_msa; +- c->h264_h_loop_filter_luma = ff_h264_h_lpf_luma_inter_msa; +- c->h264_h_loop_filter_luma_mbaff = +- ff_h264_h_loop_filter_luma_mbaff_msa; +- c->h264_v_loop_filter_luma_intra = ff_h264_v_lpf_luma_intra_msa; +- c->h264_h_loop_filter_luma_intra = ff_h264_h_lpf_luma_intra_msa; +- c->h264_h_loop_filter_luma_mbaff_intra = +- ff_h264_h_loop_filter_luma_mbaff_intra_msa; +- c->h264_v_loop_filter_chroma = ff_h264_v_lpf_chroma_inter_msa; +- +- if (chroma_format_idc <= 1) +- c->h264_h_loop_filter_chroma = ff_h264_h_lpf_chroma_inter_msa; +- else +- c->h264_h_loop_filter_chroma = +- ff_h264_h_loop_filter_chroma422_msa; +- +- if (chroma_format_idc > 1) +- c->h264_h_loop_filter_chroma_mbaff = +- ff_h264_h_loop_filter_chroma422_mbaff_msa; +- +- c->h264_v_loop_filter_chroma_intra = +- ff_h264_v_lpf_chroma_intra_msa; +- +- if (chroma_format_idc <= 1) +- c->h264_h_loop_filter_chroma_intra = +- ff_h264_h_lpf_chroma_intra_msa; +- +- /* Weighted MC */ +- c->weight_h264_pixels_tab[0] = ff_weight_h264_pixels16_8_msa; +- c->weight_h264_pixels_tab[1] = ff_weight_h264_pixels8_8_msa; +- c->weight_h264_pixels_tab[2] = ff_weight_h264_pixels4_8_msa; +- +- c->biweight_h264_pixels_tab[0] = ff_biweight_h264_pixels16_8_msa; +- c->biweight_h264_pixels_tab[1] = ff_biweight_h264_pixels8_8_msa; +- c->biweight_h264_pixels_tab[2] = ff_biweight_h264_pixels4_8_msa; +- +- c->h264_idct_add = ff_h264_idct_add_msa; +- c->h264_idct8_add = ff_h264_idct8_addblk_msa; +- c->h264_idct_dc_add = ff_h264_idct4x4_addblk_dc_msa; +- c->h264_idct8_dc_add = ff_h264_idct8_dc_addblk_msa; +- c->h264_idct_add16 = ff_h264_idct_add16_msa; +- c->h264_idct8_add4 = ff_h264_idct8_add4_msa; +- +- if (chroma_format_idc <= 1) +- c->h264_idct_add8 = ff_h264_idct_add8_msa; +- else +- c->h264_idct_add8 = ff_h264_idct_add8_422_msa; +- +- c->h264_idct_add16intra = ff_h264_idct_add16_intra_msa; +- c->h264_luma_dc_dequant_idct = ff_h264_deq_idct_luma_dc_msa; +- } // if (8 == bit_depth) +-} +-#endif // #if HAVE_MSA +- +-#if HAVE_MMI +-static av_cold void h264dsp_init_mmi(H264DSPContext * c, const int bit_depth, +- const int chroma_format_idc) ++av_cold void ff_h264dsp_init_mips(H264DSPContext *c, const int bit_depth, ++ const int chroma_format_idc) + { +- if (bit_depth == 8) { +- c->h264_add_pixels4_clear = ff_h264_add_pixels4_8_mmi; +- c->h264_idct_add = ff_h264_idct_add_8_mmi; +- c->h264_idct8_add = ff_h264_idct8_add_8_mmi; +- c->h264_idct_dc_add = ff_h264_idct_dc_add_8_mmi; +- c->h264_idct8_dc_add = ff_h264_idct8_dc_add_8_mmi; +- c->h264_idct_add16 = ff_h264_idct_add16_8_mmi; +- c->h264_idct_add16intra = ff_h264_idct_add16intra_8_mmi; +- c->h264_idct8_add4 = ff_h264_idct8_add4_8_mmi; +- +- if (chroma_format_idc <= 1) +- c->h264_idct_add8 = ff_h264_idct_add8_8_mmi; +- else +- c->h264_idct_add8 = ff_h264_idct_add8_422_8_mmi; +- +- c->h264_luma_dc_dequant_idct = ff_h264_luma_dc_dequant_idct_8_mmi; +- +- if (chroma_format_idc <= 1) +- c->h264_chroma_dc_dequant_idct = +- ff_h264_chroma_dc_dequant_idct_8_mmi; +- else +- c->h264_chroma_dc_dequant_idct = +- ff_h264_chroma422_dc_dequant_idct_8_mmi; +- +- c->weight_h264_pixels_tab[0] = ff_h264_weight_pixels16_8_mmi; +- c->weight_h264_pixels_tab[1] = ff_h264_weight_pixels8_8_mmi; +- c->weight_h264_pixels_tab[2] = ff_h264_weight_pixels4_8_mmi; +- +- c->biweight_h264_pixels_tab[0] = ff_h264_biweight_pixels16_8_mmi; +- c->biweight_h264_pixels_tab[1] = ff_h264_biweight_pixels8_8_mmi; +- c->biweight_h264_pixels_tab[2] = ff_h264_biweight_pixels4_8_mmi; +- +- c->h264_v_loop_filter_chroma = ff_deblock_v_chroma_8_mmi; +- c->h264_v_loop_filter_chroma_intra = ff_deblock_v_chroma_intra_8_mmi; +- +- if (chroma_format_idc <= 1) { +- c->h264_h_loop_filter_chroma = +- ff_deblock_h_chroma_8_mmi; +- c->h264_h_loop_filter_chroma_intra = +- ff_deblock_h_chroma_intra_8_mmi; ++ int cpu_flags = av_get_cpu_flags(); ++ ++ if (have_mmi(cpu_flags)) { ++ if (bit_depth == 8) { ++ c->h264_add_pixels4_clear = ff_h264_add_pixels4_8_mmi; ++ c->h264_idct_add = ff_h264_idct_add_8_mmi; ++ c->h264_idct8_add = ff_h264_idct8_add_8_mmi; ++ c->h264_idct_dc_add = ff_h264_idct_dc_add_8_mmi; ++ c->h264_idct8_dc_add = ff_h264_idct8_dc_add_8_mmi; ++ c->h264_idct_add16 = ff_h264_idct_add16_8_mmi; ++ c->h264_idct_add16intra = ff_h264_idct_add16intra_8_mmi; ++ c->h264_idct8_add4 = ff_h264_idct8_add4_8_mmi; ++ ++ if (chroma_format_idc <= 1) ++ c->h264_idct_add8 = ff_h264_idct_add8_8_mmi; ++ else ++ c->h264_idct_add8 = ff_h264_idct_add8_422_8_mmi; ++ ++ c->h264_luma_dc_dequant_idct = ff_h264_luma_dc_dequant_idct_8_mmi; ++ ++ if (chroma_format_idc <= 1) ++ c->h264_chroma_dc_dequant_idct = ++ ff_h264_chroma_dc_dequant_idct_8_mmi; ++ else ++ c->h264_chroma_dc_dequant_idct = ++ ff_h264_chroma422_dc_dequant_idct_8_mmi; ++ ++ c->weight_h264_pixels_tab[0] = ff_h264_weight_pixels16_8_mmi; ++ c->weight_h264_pixels_tab[1] = ff_h264_weight_pixels8_8_mmi; ++ c->weight_h264_pixels_tab[2] = ff_h264_weight_pixels4_8_mmi; ++ ++ c->biweight_h264_pixels_tab[0] = ff_h264_biweight_pixels16_8_mmi; ++ c->biweight_h264_pixels_tab[1] = ff_h264_biweight_pixels8_8_mmi; ++ c->biweight_h264_pixels_tab[2] = ff_h264_biweight_pixels4_8_mmi; ++ ++ c->h264_v_loop_filter_chroma = ff_deblock_v_chroma_8_mmi; ++ c->h264_v_loop_filter_chroma_intra = ff_deblock_v_chroma_intra_8_mmi; ++ ++ if (chroma_format_idc <= 1) { ++ c->h264_h_loop_filter_chroma = ++ ff_deblock_h_chroma_8_mmi; ++ c->h264_h_loop_filter_chroma_intra = ++ ff_deblock_h_chroma_intra_8_mmi; ++ } ++ ++ c->h264_v_loop_filter_luma = ff_deblock_v_luma_8_mmi; ++ c->h264_v_loop_filter_luma_intra = ff_deblock_v_luma_intra_8_mmi; ++ c->h264_h_loop_filter_luma = ff_deblock_h_luma_8_mmi; ++ c->h264_h_loop_filter_luma_intra = ff_deblock_h_luma_intra_8_mmi; + } +- +- c->h264_v_loop_filter_luma = ff_deblock_v_luma_8_mmi; +- c->h264_v_loop_filter_luma_intra = ff_deblock_v_luma_intra_8_mmi; +- c->h264_h_loop_filter_luma = ff_deblock_h_luma_8_mmi; +- c->h264_h_loop_filter_luma_intra = ff_deblock_h_luma_intra_8_mmi; + } +-} +-#endif /* HAVE_MMI */ + +-av_cold void ff_h264dsp_init_mips(H264DSPContext *c, const int bit_depth, +- const int chroma_format_idc) +-{ +-#if HAVE_MSA +- h264dsp_init_msa(c, bit_depth, chroma_format_idc); +-#endif // #if HAVE_MSA +-#if HAVE_MMI +- h264dsp_init_mmi(c, bit_depth, chroma_format_idc); +-#endif /* HAVE_MMI */ ++ if (have_msa(cpu_flags)) { ++ if (bit_depth == 8) { ++ c->h264_v_loop_filter_luma = ff_h264_v_lpf_luma_inter_msa; ++ c->h264_h_loop_filter_luma = ff_h264_h_lpf_luma_inter_msa; ++ c->h264_h_loop_filter_luma_mbaff = ++ ff_h264_h_loop_filter_luma_mbaff_msa; ++ c->h264_v_loop_filter_luma_intra = ff_h264_v_lpf_luma_intra_msa; ++ c->h264_h_loop_filter_luma_intra = ff_h264_h_lpf_luma_intra_msa; ++ c->h264_h_loop_filter_luma_mbaff_intra = ++ ff_h264_h_loop_filter_luma_mbaff_intra_msa; ++ c->h264_v_loop_filter_chroma = ff_h264_v_lpf_chroma_inter_msa; ++ ++ if (chroma_format_idc <= 1) ++ c->h264_h_loop_filter_chroma = ff_h264_h_lpf_chroma_inter_msa; ++ else ++ c->h264_h_loop_filter_chroma = ++ ff_h264_h_loop_filter_chroma422_msa; ++ ++ if (chroma_format_idc > 1) ++ c->h264_h_loop_filter_chroma_mbaff = ++ ff_h264_h_loop_filter_chroma422_mbaff_msa; ++ ++ c->h264_v_loop_filter_chroma_intra = ++ ff_h264_v_lpf_chroma_intra_msa; ++ ++ if (chroma_format_idc <= 1) ++ c->h264_h_loop_filter_chroma_intra = ++ ff_h264_h_lpf_chroma_intra_msa; ++ ++ /* Weighted MC */ ++ c->weight_h264_pixels_tab[0] = ff_weight_h264_pixels16_8_msa; ++ c->weight_h264_pixels_tab[1] = ff_weight_h264_pixels8_8_msa; ++ c->weight_h264_pixels_tab[2] = ff_weight_h264_pixels4_8_msa; ++ ++ c->biweight_h264_pixels_tab[0] = ff_biweight_h264_pixels16_8_msa; ++ c->biweight_h264_pixels_tab[1] = ff_biweight_h264_pixels8_8_msa; ++ c->biweight_h264_pixels_tab[2] = ff_biweight_h264_pixels4_8_msa; ++ ++ c->h264_idct_add = ff_h264_idct_add_msa; ++ c->h264_idct8_add = ff_h264_idct8_addblk_msa; ++ c->h264_idct_dc_add = ff_h264_idct4x4_addblk_dc_msa; ++ c->h264_idct8_dc_add = ff_h264_idct8_dc_addblk_msa; ++ c->h264_idct_add16 = ff_h264_idct_add16_msa; ++ c->h264_idct8_add4 = ff_h264_idct8_add4_msa; ++ ++ if (chroma_format_idc <= 1) ++ c->h264_idct_add8 = ff_h264_idct_add8_msa; ++ else ++ c->h264_idct_add8 = ff_h264_idct_add8_422_msa; ++ ++ c->h264_idct_add16intra = ff_h264_idct_add16_intra_msa; ++ c->h264_luma_dc_dequant_idct = ff_h264_deq_idct_luma_dc_msa; ++ } ++ } + } +diff --git a/libavcodec/mips/h264dsp_mips.h b/libavcodec/mips/h264dsp_mips.h +index 21b7de0..35e16c4 100644 +--- a/libavcodec/mips/h264dsp_mips.h ++++ b/libavcodec/mips/h264dsp_mips.h +@@ -25,21 +25,21 @@ + #include "libavcodec/h264dec.h" + #include "constants.h" + +-void ff_h264_h_lpf_luma_inter_msa(uint8_t *src, int stride, ++void ff_h264_h_lpf_luma_inter_msa(uint8_t *src, ptrdiff_t stride, + int alpha, int beta, int8_t *tc0); +-void ff_h264_v_lpf_luma_inter_msa(uint8_t *src, int stride, ++void ff_h264_v_lpf_luma_inter_msa(uint8_t *src, ptrdiff_t stride, + int alpha, int beta, int8_t *tc0); +-void ff_h264_h_lpf_chroma_inter_msa(uint8_t *src, int stride, ++void ff_h264_h_lpf_chroma_inter_msa(uint8_t *src, ptrdiff_t stride, + int alpha, int beta, int8_t *tc0); +-void ff_h264_v_lpf_chroma_inter_msa(uint8_t *src, int stride, ++void ff_h264_v_lpf_chroma_inter_msa(uint8_t *src, ptrdiff_t stride, + int alpha, int beta, int8_t *tc0); +-void ff_h264_h_loop_filter_chroma422_msa(uint8_t *src, int32_t stride, ++void ff_h264_h_loop_filter_chroma422_msa(uint8_t *src, ptrdiff_t stride, + int32_t alpha, int32_t beta, + int8_t *tc0); +-void ff_h264_h_loop_filter_chroma422_mbaff_msa(uint8_t *src, int32_t stride, ++void ff_h264_h_loop_filter_chroma422_mbaff_msa(uint8_t *src, ptrdiff_t stride, + int32_t alpha, int32_t beta, + int8_t *tc0); +-void ff_h264_h_loop_filter_luma_mbaff_msa(uint8_t *src, int32_t stride, ++void ff_h264_h_loop_filter_luma_mbaff_msa(uint8_t *src, ptrdiff_t stride, + int32_t alpha, int32_t beta, + int8_t *tc0); + +@@ -67,15 +67,15 @@ void ff_h264_idct8_add4_msa(uint8_t *dst, const int *blk_offset, + int16_t *blk, int dst_stride, + const uint8_t nnzc[15 * 8]); + +-void ff_h264_h_lpf_luma_intra_msa(uint8_t *src, int stride, ++void ff_h264_h_lpf_luma_intra_msa(uint8_t *src, ptrdiff_t stride, + int alpha, int beta); +-void ff_h264_v_lpf_luma_intra_msa(uint8_t *src, int stride, ++void ff_h264_v_lpf_luma_intra_msa(uint8_t *src, ptrdiff_t stride, + int alpha, int beta); +-void ff_h264_h_lpf_chroma_intra_msa(uint8_t *src, int stride, ++void ff_h264_h_lpf_chroma_intra_msa(uint8_t *src, ptrdiff_t stride, + int alpha, int beta); +-void ff_h264_v_lpf_chroma_intra_msa(uint8_t *src, int stride, ++void ff_h264_v_lpf_chroma_intra_msa(uint8_t *src, ptrdiff_t stride, + int alpha, int beta); +-void ff_h264_h_loop_filter_luma_mbaff_intra_msa(uint8_t *src, int stride, ++void ff_h264_h_loop_filter_luma_mbaff_intra_msa(uint8_t *src, ptrdiff_t stride, + int alpha, int beta); + + void ff_biweight_h264_pixels16_8_msa(uint8_t *dst, uint8_t *src, +@@ -357,23 +357,23 @@ void ff_h264_biweight_pixels4_8_mmi(uint8_t *dst, uint8_t *src, + + void ff_deblock_v_chroma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int beta, + int8_t *tc0); +-void ff_deblock_v_chroma_intra_8_mmi(uint8_t *pix, int stride, int alpha, ++void ff_deblock_v_chroma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, + int beta); +-void ff_deblock_h_chroma_8_mmi(uint8_t *pix, int stride, int alpha, int beta, ++void ff_deblock_h_chroma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int beta, + int8_t *tc0); +-void ff_deblock_h_chroma_intra_8_mmi(uint8_t *pix, int stride, int alpha, ++void ff_deblock_h_chroma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, + int beta); +-void ff_deblock_v_luma_8_mmi(uint8_t *pix, int stride, int alpha, int beta, ++void ff_deblock_v_luma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int beta, + int8_t *tc0); +-void ff_deblock_v_luma_intra_8_mmi(uint8_t *pix, int stride, int alpha, ++void ff_deblock_v_luma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, + int beta); +-void ff_deblock_h_luma_8_mmi(uint8_t *pix, int stride, int alpha, int beta, ++void ff_deblock_h_luma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int beta, + int8_t *tc0); +-void ff_deblock_h_luma_intra_8_mmi(uint8_t *pix, int stride, int alpha, ++void ff_deblock_h_luma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, + int beta); +-void ff_deblock_v8_luma_8_mmi(uint8_t *pix, int stride, int alpha, int beta, ++void ff_deblock_v8_luma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int beta, + int8_t *tc0); +-void ff_deblock_v8_luma_intra_8_mmi(uint8_t *pix, int stride, int alpha, ++void ff_deblock_v8_luma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, + int beta); + + void ff_put_h264_qpel16_mc00_mmi(uint8_t *dst, const uint8_t *src, +diff --git a/libavcodec/mips/h264dsp_mmi.c b/libavcodec/mips/h264dsp_mmi.c +index ac65a20..173e191 100644 +--- a/libavcodec/mips/h264dsp_mmi.c ++++ b/libavcodec/mips/h264dsp_mmi.c +@@ -38,6 +38,9 @@ void ff_h264_add_pixels4_8_mmi(uint8_t *dst, int16_t *src, int stride) + MMI_LDC1(%[ftmp2], %[src], 0x08) + MMI_LDC1(%[ftmp3], %[src], 0x10) + MMI_LDC1(%[ftmp4], %[src], 0x18) ++ /* memset(src, 0, 32); */ ++ "gssqc1 %[ftmp0], %[ftmp0], 0x00(%[src]) \n\t" ++ "gssqc1 %[ftmp0], %[ftmp0], 0x10(%[src]) \n\t" + MMI_ULWC1(%[ftmp5], %[dst0], 0x00) + MMI_ULWC1(%[ftmp6], %[dst1], 0x00) + MMI_ULWC1(%[ftmp7], %[dst2], 0x00) +@@ -58,11 +61,6 @@ void ff_h264_add_pixels4_8_mmi(uint8_t *dst, int16_t *src, int stride) + MMI_SWC1(%[ftmp2], %[dst1], 0x00) + MMI_SWC1(%[ftmp3], %[dst2], 0x00) + MMI_SWC1(%[ftmp4], %[dst3], 0x00) +- +- /* memset(src, 0, 32); */ +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "gssqc1 %[ftmp0], %[ftmp0], 0x00(%[src]) \n\t" +- "gssqc1 %[ftmp0], %[ftmp0], 0x10(%[src]) \n\t" + : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), + [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), + [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), +@@ -85,15 +83,19 @@ void ff_h264_idct_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + DECLARE_VAR_ADDRT; + + __asm__ volatile ( +- "dli %[tmp0], 0x01 \n\t" + MMI_LDC1(%[ftmp0], %[block], 0x00) +- "mtc1 %[tmp0], %[ftmp8] \n\t" + MMI_LDC1(%[ftmp1], %[block], 0x08) +- "dli %[tmp0], 0x06 \n\t" + MMI_LDC1(%[ftmp2], %[block], 0x10) ++ MMI_LDC1(%[ftmp3], %[block], 0x18) ++ /* memset(block, 0, 32) */ ++ "xor %[ftmp4], %[ftmp4], %[ftmp4] \n\t" ++ "gssqc1 %[ftmp4], %[ftmp4], 0x00(%[block]) \n\t" ++ "gssqc1 %[ftmp4], %[ftmp4], 0x10(%[block]) \n\t" ++ "dli %[tmp0], 0x01 \n\t" ++ "mtc1 %[tmp0], %[ftmp8] \n\t" ++ "dli %[tmp0], 0x06 \n\t" + "mtc1 %[tmp0], %[ftmp9] \n\t" + "psrah %[ftmp4], %[ftmp1], %[ftmp8] \n\t" +- MMI_LDC1(%[ftmp3], %[block], 0x18) + "psrah %[ftmp5], %[ftmp3], %[ftmp8] \n\t" + "psubh %[ftmp4], %[ftmp4], %[ftmp3] \n\t" + "paddh %[ftmp5], %[ftmp5], %[ftmp1] \n\t" +@@ -121,15 +123,11 @@ void ff_h264_idct_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + "paddh %[ftmp10], %[ftmp3], %[ftmp1] \n\t" + "psubh %[ftmp1], %[ftmp1], %[ftmp3] \n\t" + "paddh %[ftmp11], %[ftmp4], %[ftmp5] \n\t" +- "xor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" + "psubh %[ftmp5], %[ftmp5], %[ftmp4] \n\t" +- MMI_SDC1(%[ftmp7], %[block], 0x00) +- MMI_SDC1(%[ftmp7], %[block], 0x08) +- MMI_SDC1(%[ftmp7], %[block], 0x10) +- MMI_SDC1(%[ftmp7], %[block], 0x18) + MMI_ULWC1(%[ftmp2], %[dst], 0x00) +- "psrah %[ftmp3], %[ftmp10], %[ftmp9] \n\t" + MMI_LWXC1(%[ftmp0], %[dst], %[stride], 0x00) ++ "xor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" ++ "psrah %[ftmp3], %[ftmp10], %[ftmp9] \n\t" + "psrah %[ftmp4], %[ftmp11], %[ftmp9] \n\t" + "punpcklbh %[ftmp2], %[ftmp2], %[ftmp7] \n\t" + "punpcklbh %[ftmp0], %[ftmp0], %[ftmp7] \n\t" +@@ -153,11 +151,6 @@ void ff_h264_idct_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + MMI_SWC1(%[ftmp2], %[dst], 0x00) + "packushb %[ftmp0], %[ftmp0], %[ftmp7] \n\t" + MMI_SWXC1(%[ftmp0], %[dst], %[stride], 0x00) +- +- /* memset(block, 0, 32) */ +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "gssqc1 %[ftmp0], %[ftmp0], 0x00(%[block]) \n\t" +- "gssqc1 %[ftmp0], %[ftmp0], 0x10(%[block]) \n\t" + : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), + [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), + [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), +@@ -184,7 +177,7 @@ void ff_h264_idct8_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + + __asm__ volatile ( + "lhu %[tmp0], 0x00(%[block]) \n\t" +- PTR_ADDI "$29, $29, -0x20 \n\t" ++ PTR_ADDI "$sp, $sp, -0x20 \n\t" + PTR_ADDIU "%[tmp0], %[tmp0], 0x20 \n\t" + MMI_LDC1(%[ftmp1], %[block], 0x10) + "sh %[tmp0], 0x00(%[block]) \n\t" +@@ -261,8 +254,8 @@ void ff_h264_idct8_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + "punpckhwd %[ftmp3], %[ftmp6], %[ftmp0] \n\t" + "punpcklwd %[ftmp6], %[ftmp6], %[ftmp0] \n\t" + MMI_LDC1(%[ftmp0], %[block], 0x00) +- MMI_SDC1(%[ftmp7], $29, 0x00) +- MMI_SDC1(%[ftmp1], $29, 0x10) ++ MMI_SDC1(%[ftmp7], $sp, 0x00) ++ MMI_SDC1(%[ftmp1], $sp, 0x10) + "dmfc1 %[tmp1], %[ftmp6] \n\t" + "dmfc1 %[tmp3], %[ftmp3] \n\t" + "punpckhhw %[ftmp3], %[ftmp5], %[ftmp2] \n\t" +@@ -273,8 +266,8 @@ void ff_h264_idct8_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + "punpcklwd %[ftmp5], %[ftmp5], %[ftmp4] \n\t" + "punpckhwd %[ftmp4], %[ftmp3], %[ftmp2] \n\t" + "punpcklwd %[ftmp3], %[ftmp3], %[ftmp2] \n\t" +- MMI_SDC1(%[ftmp5], $29, 0x08) +- MMI_SDC1(%[ftmp0], $29, 0x18) ++ MMI_SDC1(%[ftmp5], $sp, 0x08) ++ MMI_SDC1(%[ftmp0], $sp, 0x18) + "dmfc1 %[tmp2], %[ftmp3] \n\t" + "dmfc1 %[tmp4], %[ftmp4] \n\t" + MMI_LDC1(%[ftmp1], %[block], 0x18) +@@ -366,7 +359,7 @@ void ff_h264_idct8_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + PTR_ADDIU "%[addr0], %[dst], 0x04 \n\t" + "mov.d %[ftmp7], %[ftmp10] \n\t" + "dmtc1 %[tmp3], %[ftmp6] \n\t" +- MMI_LDC1(%[ftmp1], $29, 0x10) ++ MMI_LDC1(%[ftmp1], $sp, 0x10) + "dmtc1 %[tmp1], %[ftmp3] \n\t" + "mov.d %[ftmp4], %[ftmp1] \n\t" + "psrah %[ftmp1], %[ftmp1], %[ftmp8] \n\t" +@@ -399,7 +392,7 @@ void ff_h264_idct8_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + "psrah %[ftmp0], %[ftmp3], %[ftmp8] \n\t" + "paddh %[ftmp2], %[ftmp2], %[ftmp3] \n\t" + "psubh %[ftmp0], %[ftmp0], %[ftmp7] \n\t" +- MMI_LDC1(%[ftmp3], $29, 0x00) ++ MMI_LDC1(%[ftmp3], $sp, 0x00) + "dmtc1 %[tmp5], %[ftmp7] \n\t" + "paddh %[ftmp7], %[ftmp7], %[ftmp3] \n\t" + "paddh %[ftmp3], %[ftmp3], %[ftmp3] \n\t" +@@ -421,9 +414,9 @@ void ff_h264_idct8_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + "paddh %[ftmp1], %[ftmp1], %[ftmp7] \n\t" + "psubh %[ftmp3], %[ftmp3], %[ftmp6] \n\t" + "paddh %[ftmp7], %[ftmp7], %[ftmp7] \n\t" +- MMI_SDC1(%[ftmp3], $29, 0x00) ++ MMI_SDC1(%[ftmp3], $sp, 0x00) + "psubh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" +- MMI_SDC1(%[ftmp0], $29, 0x10) ++ MMI_SDC1(%[ftmp0], $sp, 0x10) + "dmfc1 %[tmp1], %[ftmp2] \n\t" + "xor %[ftmp2], %[ftmp2], %[ftmp2] \n\t" + MMI_SDC1(%[ftmp2], %[block], 0x00) +@@ -470,8 +463,8 @@ void ff_h264_idct8_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + "packushb %[ftmp0], %[ftmp0], %[ftmp2] \n\t" + MMI_SWC1(%[ftmp3], %[dst], 0x00) + MMI_SWXC1(%[ftmp0], %[dst], %[stride], 0x00) +- MMI_LDC1(%[ftmp5], $29, 0x00) +- MMI_LDC1(%[ftmp4], $29, 0x10) ++ MMI_LDC1(%[ftmp5], $sp, 0x00) ++ MMI_LDC1(%[ftmp4], $sp, 0x10) + "dmtc1 %[tmp1], %[ftmp6] \n\t" + PTR_ADDU "%[dst], %[dst], %[stride] \n\t" + PTR_ADDU "%[dst], %[dst], %[stride] \n\t" +@@ -503,7 +496,7 @@ void ff_h264_idct8_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + MMI_SWXC1(%[ftmp0], %[dst], %[stride], 0x00) + "dmtc1 %[tmp4], %[ftmp1] \n\t" + "dmtc1 %[tmp2], %[ftmp6] \n\t" +- MMI_LDC1(%[ftmp4], $29, 0x18) ++ MMI_LDC1(%[ftmp4], $sp, 0x18) + "mov.d %[ftmp5], %[ftmp4] \n\t" + "psrah %[ftmp4], %[ftmp4], %[ftmp8] \n\t" + "psrah %[ftmp7], %[ftmp11], %[ftmp8] \n\t" +@@ -535,7 +528,7 @@ void ff_h264_idct8_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + "psrah %[ftmp7], %[ftmp6], %[ftmp8] \n\t" + "paddh %[ftmp0], %[ftmp0], %[ftmp6] \n\t" + "psubh %[ftmp7], %[ftmp7], %[ftmp3] \n\t" +- MMI_LDC1(%[ftmp6], $29, 0x08) ++ MMI_LDC1(%[ftmp6], $sp, 0x08) + "dmtc1 %[tmp6], %[ftmp3] \n\t" + "paddh %[ftmp3], %[ftmp3], %[ftmp6] \n\t" + "paddh %[ftmp6], %[ftmp6], %[ftmp6] \n\t" +@@ -557,9 +550,9 @@ void ff_h264_idct8_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + "paddh %[ftmp4], %[ftmp4], %[ftmp3] \n\t" + "psubh %[ftmp6], %[ftmp6], %[ftmp1] \n\t" + "paddh %[ftmp3], %[ftmp3], %[ftmp3] \n\t" +- MMI_SDC1(%[ftmp6], $29, 0x08) ++ MMI_SDC1(%[ftmp6], $sp, 0x08) + "psubh %[ftmp3], %[ftmp3], %[ftmp4] \n\t" +- MMI_SDC1(%[ftmp7], $29, 0x18) ++ MMI_SDC1(%[ftmp7], $sp, 0x18) + "dmfc1 %[tmp2], %[ftmp0] \n\t" + "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + MMI_ULWC1(%[ftmp6], %[addr0], 0x00) +@@ -588,8 +581,8 @@ void ff_h264_idct8_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + "packushb %[ftmp7], %[ftmp7], %[ftmp0] \n\t" + MMI_SWC1(%[ftmp6], %[addr0], 0x00) + MMI_SWXC1(%[ftmp7], %[addr0], %[stride], 0x00) +- MMI_LDC1(%[ftmp2], $29, 0x08) +- MMI_LDC1(%[ftmp5], $29, 0x18) ++ MMI_LDC1(%[ftmp2], $sp, 0x08) ++ MMI_LDC1(%[ftmp5], $sp, 0x18) + PTR_ADDU "%[addr0], %[addr0], %[stride] \n\t" + "dmtc1 %[tmp2], %[ftmp1] \n\t" + PTR_ADDU "%[addr0], %[addr0], %[stride] \n\t" +@@ -619,18 +612,7 @@ void ff_h264_idct8_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + "packushb %[ftmp7], %[ftmp7], %[ftmp0] \n\t" + MMI_SWC1(%[ftmp6], %[addr0], 0x00) + MMI_SWXC1(%[ftmp7], %[addr0], %[stride], 0x00) +- PTR_ADDIU "$29, $29, 0x20 \n\t" +- +- /* memset(block, 0, 128) */ +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "gssqc1 %[ftmp0], %[ftmp0], 0x00(%[block]) \n\t" +- "gssqc1 %[ftmp0], %[ftmp0], 0x10(%[block]) \n\t" +- "gssqc1 %[ftmp0], %[ftmp0], 0x20(%[block]) \n\t" +- "gssqc1 %[ftmp0], %[ftmp0], 0x30(%[block]) \n\t" +- "gssqc1 %[ftmp0], %[ftmp0], 0x40(%[block]) \n\t" +- "gssqc1 %[ftmp0], %[ftmp0], 0x50(%[block]) \n\t" +- "gssqc1 %[ftmp0], %[ftmp0], 0x60(%[block]) \n\t" +- "gssqc1 %[ftmp0], %[ftmp0], 0x70(%[block]) \n\t" ++ PTR_ADDIU "$sp, $sp, 0x20 \n\t" + : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), + [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), + [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), +@@ -648,7 +630,7 @@ void ff_h264_idct8_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + [addr0]"=&r"(addr[0]) + : [dst]"r"(dst), [block]"r"(block), + [stride]"r"((mips_reg)stride) +- : "$29","memory" ++ : "memory" + ); + + } +@@ -1451,7 +1433,7 @@ void ff_h264_biweight_pixels4_8_mmi(uint8_t *dst, uint8_t *src, + } + } + +-void ff_deblock_v8_luma_8_mmi(uint8_t *pix, int stride, int alpha, int beta, ++void ff_deblock_v8_luma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int beta, + int8_t *tc0) + { + double ftmp[12]; +@@ -1579,7 +1561,7 @@ void ff_deblock_v8_luma_8_mmi(uint8_t *pix, int stride, int alpha, int beta, + ); + } + +-static void deblock_v8_luma_intra_8_mmi(uint8_t *pix, int stride, int alpha, ++static void deblock_v8_luma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, + int beta) + { + DECLARE_ALIGNED(8, const uint64_t, stack[0x0a]); +@@ -1889,7 +1871,7 @@ void ff_deblock_v_chroma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, + ); + } + +-void ff_deblock_v_chroma_intra_8_mmi(uint8_t *pix, int stride, int alpha, ++void ff_deblock_v_chroma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, + int beta) + { + double ftmp[9]; +@@ -1967,7 +1949,7 @@ void ff_deblock_v_chroma_intra_8_mmi(uint8_t *pix, int stride, int alpha, + ); + } + +-void ff_deblock_h_chroma_8_mmi(uint8_t *pix, int stride, int alpha, int beta, ++void ff_deblock_h_chroma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int beta, + int8_t *tc0) + { + double ftmp[11]; +@@ -2107,7 +2089,7 @@ void ff_deblock_h_chroma_8_mmi(uint8_t *pix, int stride, int alpha, int beta, + ); + } + +-void ff_deblock_h_chroma_intra_8_mmi(uint8_t *pix, int stride, int alpha, ++void ff_deblock_h_chroma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, + int beta) + { + double ftmp[11]; +@@ -2240,7 +2222,7 @@ void ff_deblock_h_chroma_intra_8_mmi(uint8_t *pix, int stride, int alpha, + ); + } + +-void ff_deblock_v_luma_8_mmi(uint8_t *pix, int stride, int alpha, int beta, ++void ff_deblock_v_luma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int beta, + int8_t *tc0) + { + if ((tc0[0] & tc0[1]) >= 0) +@@ -2249,14 +2231,14 @@ void ff_deblock_v_luma_8_mmi(uint8_t *pix, int stride, int alpha, int beta, + ff_deblock_v8_luma_8_mmi(pix + 8, stride, alpha, beta, tc0 + 2); + } + +-void ff_deblock_v_luma_intra_8_mmi(uint8_t *pix, int stride, int alpha, ++void ff_deblock_v_luma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, + int beta) + { + deblock_v8_luma_intra_8_mmi(pix + 0, stride, alpha, beta); + deblock_v8_luma_intra_8_mmi(pix + 8, stride, alpha, beta); + } + +-void ff_deblock_h_luma_8_mmi(uint8_t *pix, int stride, int alpha, int beta, ++void ff_deblock_h_luma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int beta, + int8_t *tc0) + { + DECLARE_ALIGNED(8, const uint64_t, stack[0x0d]); +@@ -2475,7 +2457,7 @@ void ff_deblock_h_luma_8_mmi(uint8_t *pix, int stride, int alpha, int beta, + ); + } + +-void ff_deblock_h_luma_intra_8_mmi(uint8_t *pix, int stride, int alpha, ++void ff_deblock_h_luma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, + int beta) + { + DECLARE_ALIGNED(8, const uint64_t, ptmp[0x11]); +diff --git a/libavcodec/mips/h264dsp_msa.c b/libavcodec/mips/h264dsp_msa.c +index e50f5ca..a8c3f3c 100644 +--- a/libavcodec/mips/h264dsp_msa.c ++++ b/libavcodec/mips/h264dsp_msa.c +@@ -21,7 +21,7 @@ + #include "libavutil/mips/generic_macros_msa.h" + #include "h264dsp_mips.h" + +-static void avc_wgt_4x2_msa(uint8_t *data, int32_t stride, ++static void avc_wgt_4x2_msa(uint8_t *data, ptrdiff_t stride, + int32_t log2_denom, int32_t src_weight, + int32_t offset_in) + { +@@ -45,11 +45,12 @@ static void avc_wgt_4x2_msa(uint8_t *data, int32_t stride, + tmp0 = __msa_srlr_h(tmp0, denom); + tmp0 = (v8i16) __msa_sat_u_h((v8u16) tmp0, 7); + src0 = (v16u8) __msa_pckev_b((v16i8) tmp0, (v16i8) tmp0); +- ST4x2_UB(src0, data, stride); ++ ST_W2(src0, 0, 1, data, stride); + } + +-static void avc_wgt_4x4_msa(uint8_t *data, int32_t stride, int32_t log2_denom, +- int32_t src_weight, int32_t offset_in) ++static void avc_wgt_4x4_msa(uint8_t *data, ptrdiff_t stride, ++ int32_t log2_denom, int32_t src_weight, ++ int32_t offset_in) + { + uint32_t tp0, tp1, tp2, tp3, offset_val; + v16u8 src0 = { 0 }; +@@ -71,11 +72,12 @@ static void avc_wgt_4x4_msa(uint8_t *data, int32_t stride, int32_t log2_denom, + tmp1 = __msa_srlr_h(tmp1, denom); + SAT_UH2_SH(tmp0, tmp1, 7); + src0 = (v16u8) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0); +- ST4x4_UB(src0, src0, 0, 1, 2, 3, data, stride); ++ ST_W4(src0, 0, 1, 2, 3, data, stride); + } + +-static void avc_wgt_4x8_msa(uint8_t *data, int32_t stride, int32_t log2_denom, +- int32_t src_weight, int32_t offset_in) ++static void avc_wgt_4x8_msa(uint8_t *data, ptrdiff_t stride, ++ int32_t log2_denom, int32_t src_weight, ++ int32_t offset_in) + { + uint32_t tp0, tp1, tp2, tp3, offset_val; + v16u8 src0 = { 0 }, src1 = { 0 }; +@@ -102,11 +104,12 @@ static void avc_wgt_4x8_msa(uint8_t *data, int32_t stride, int32_t log2_denom, + SRLR_H4_SH(tmp0, tmp1, tmp2, tmp3, denom); + SAT_UH4_SH(tmp0, tmp1, tmp2, tmp3, 7); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, src0, src1); +- ST4x8_UB(src0, src1, data, stride); ++ ST_W8(src0, src1, 0, 1, 2, 3, 0, 1, 2, 3, data, stride); + } + +-static void avc_wgt_8x4_msa(uint8_t *data, int32_t stride, int32_t log2_denom, +- int32_t src_weight, int32_t offset_in) ++static void avc_wgt_8x4_msa(uint8_t *data, ptrdiff_t stride, ++ int32_t log2_denom, int32_t src_weight, ++ int32_t offset_in) + { + uint32_t offset_val; + uint64_t tp0, tp1, tp2, tp3; +@@ -133,10 +136,10 @@ static void avc_wgt_8x4_msa(uint8_t *data, int32_t stride, int32_t log2_denom, + SRLR_H4_SH(tmp0, tmp1, tmp2, tmp3, denom); + SAT_UH4_SH(tmp0, tmp1, tmp2, tmp3, 7); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, src0, src1); +- ST8x4_UB(src0, src1, data, stride); ++ ST_D4(src0, src1, 0, 1, 0, 1, data, stride); + } + +-static void avc_wgt_8x8_msa(uint8_t *data, int32_t stride, int32_t log2_denom, ++static void avc_wgt_8x8_msa(uint8_t *data, ptrdiff_t stride, int32_t log2_denom, + int32_t src_weight, int32_t offset_in) + { + uint32_t offset_val; +@@ -175,11 +178,12 @@ static void avc_wgt_8x8_msa(uint8_t *data, int32_t stride, int32_t log2_denom, + SAT_UH8_SH(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, 7); + PCKEV_B4_UB(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, src0, src1, + src2, src3); +- ST8x8_UB(src0, src1, src2, src3, data, stride); ++ ST_D8(src0, src1, src2, src3, 0, 1, 0, 1, 0, 1, 0, 1, data, stride); + } + +-static void avc_wgt_8x16_msa(uint8_t *data, int32_t stride, int32_t log2_denom, +- int32_t src_weight, int32_t offset_in) ++static void avc_wgt_8x16_msa(uint8_t *data, ptrdiff_t stride, ++ int32_t log2_denom, int32_t src_weight, ++ int32_t offset_in) + { + uint32_t offset_val, cnt; + uint64_t tp0, tp1, tp2, tp3; +@@ -218,12 +222,12 @@ static void avc_wgt_8x16_msa(uint8_t *data, int32_t stride, int32_t log2_denom, + SAT_UH8_SH(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, 7); + PCKEV_B4_UB(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, src0, src1, + src2, src3); +- ST8x8_UB(src0, src1, src2, src3, data, stride); ++ ST_D8(src0, src1, src2, src3, 0, 1, 0, 1, 0, 1, 0, 1, data, stride); + data += 8 * stride; + } + } + +-static void avc_biwgt_4x2_msa(uint8_t *src, uint8_t *dst, int32_t stride, ++static void avc_biwgt_4x2_msa(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + int32_t log2_denom, int32_t src_weight, + int32_t dst_weight, int32_t offset_in) + { +@@ -253,10 +257,10 @@ static void avc_biwgt_4x2_msa(uint8_t *src, uint8_t *dst, int32_t stride, + tmp0 = __msa_maxi_s_h(tmp0, 0); + tmp0 = __msa_min_s_h(max255, tmp0); + dst0 = (v16u8) __msa_pckev_b((v16i8) tmp0, (v16i8) tmp0); +- ST4x2_UB(dst0, dst, stride); ++ ST_W2(dst0, 0, 1, dst, stride); + } + +-static void avc_biwgt_4x4_msa(uint8_t *src, uint8_t *dst, int32_t stride, ++static void avc_biwgt_4x4_msa(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + int32_t log2_denom, int32_t src_weight, + int32_t dst_weight, int32_t offset_in) + { +@@ -287,10 +291,10 @@ static void avc_biwgt_4x4_msa(uint8_t *src, uint8_t *dst, int32_t stride, + tmp1 >>= denom; + CLIP_SH2_0_255(tmp0, tmp1); + dst0 = (v16u8) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0); +- ST4x4_UB(dst0, dst0, 0, 1, 2, 3, dst, stride); ++ ST_W4(dst0, 0, 1, 2, 3, dst, stride); + } + +-static void avc_biwgt_4x8_msa(uint8_t *src, uint8_t *dst, int32_t stride, ++static void avc_biwgt_4x8_msa(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + int32_t log2_denom, int32_t src_weight, + int32_t dst_weight, int32_t offset_in) + { +@@ -327,10 +331,10 @@ static void avc_biwgt_4x8_msa(uint8_t *src, uint8_t *dst, int32_t stride, + SRA_4V(tmp0, tmp1, tmp2, tmp3, denom); + CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, dst0, dst1); +- ST4x8_UB(dst0, dst1, dst, stride); ++ ST_W8(dst0, dst1, 0, 1, 2, 3, 0, 1, 2, 3, dst, stride); + } + +-static void avc_biwgt_8x4_msa(uint8_t *src, uint8_t *dst, int32_t stride, ++static void avc_biwgt_8x4_msa(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + int32_t log2_denom, int32_t src_weight, + int32_t dst_weight, int32_t offset_in) + { +@@ -365,10 +369,10 @@ static void avc_biwgt_8x4_msa(uint8_t *src, uint8_t *dst, int32_t stride, + SRA_4V(tmp0, tmp1, tmp2, tmp3, denom); + CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, dst0, dst1); +- ST8x4_UB(dst0, dst1, dst, stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, stride); + } + +-static void avc_biwgt_8x8_msa(uint8_t *src, uint8_t *dst, int32_t stride, ++static void avc_biwgt_8x8_msa(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + int32_t log2_denom, int32_t src_weight, + int32_t dst_weight, int32_t offset_in) + { +@@ -413,14 +417,13 @@ static void avc_biwgt_8x8_msa(uint8_t *src, uint8_t *dst, int32_t stride, + tmp7 = __msa_dpadd_s_h(offset, wgt, vec7); + SRA_4V(tmp0, tmp1, tmp2, tmp3, denom); + SRA_4V(tmp4, tmp5, tmp6, tmp7, denom); +- CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); +- CLIP_SH4_0_255(tmp4, tmp5, tmp6, tmp7); ++ CLIP_SH8_0_255(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, dst0, dst1); + PCKEV_B2_UB(tmp5, tmp4, tmp7, tmp6, dst2, dst3); +- ST8x8_UB(dst0, dst1, dst2, dst3, dst, stride); ++ ST_D8(dst0, dst1, dst2, dst3, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); + } + +-static void avc_biwgt_8x16_msa(uint8_t *src, uint8_t *dst, int32_t stride, ++static void avc_biwgt_8x16_msa(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + int32_t log2_denom, int32_t src_weight, + int32_t dst_weight, int32_t offset_in) + { +@@ -475,11 +478,10 @@ static void avc_biwgt_8x16_msa(uint8_t *src, uint8_t *dst, int32_t stride, + + SRA_4V(temp0, temp1, temp2, temp3, denom); + SRA_4V(temp4, temp5, temp6, temp7, denom); +- CLIP_SH4_0_255(temp0, temp1, temp2, temp3); +- CLIP_SH4_0_255(temp4, temp5, temp6, temp7); ++ CLIP_SH8_0_255(temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7); + PCKEV_B4_UB(temp1, temp0, temp3, temp2, temp5, temp4, temp7, temp6, + dst0, dst1, dst2, dst3); +- ST8x8_UB(dst0, dst1, dst2, dst3, dst, stride); ++ ST_D8(dst0, dst1, dst2, dst3, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); + dst += 8 * stride; + } + } +@@ -531,7 +533,7 @@ static void avc_biwgt_8x16_msa(uint8_t *src, uint8_t *dst, int32_t stride, + temp = p1_or_q1_org_in << 1; \ + clip3 = clip3 - temp; \ + clip3 = __msa_ave_s_h(p2_or_q2_org_in, clip3); \ +- clip3 = CLIP_SH(clip3, negate_tc_in, tc_in); \ ++ CLIP_SH(clip3, negate_tc_in, tc_in); \ + p1_or_q1_out = p1_or_q1_org_in + clip3; \ + } + +@@ -549,7 +551,7 @@ static void avc_biwgt_8x16_msa(uint8_t *src, uint8_t *dst, int32_t stride, + delta = q0_sub_p0 + p1_sub_q1; \ + delta >>= 3; \ + \ +- delta = CLIP_SH(delta, negate_threshold_in, threshold_in); \ ++ CLIP_SH(delta, negate_threshold_in, threshold_in); \ + \ + p0_or_q0_out = p0_or_q0_org_in + delta; \ + q0_or_p0_out = q0_or_p0_org_in - delta; \ +@@ -598,7 +600,7 @@ static void avc_biwgt_8x16_msa(uint8_t *src, uint8_t *dst, int32_t stride, + delta = q0_sub_p0 + p1_sub_q1; \ + delta = __msa_srari_h(delta, 3); \ + \ +- delta = CLIP_SH(delta, -tc, tc); \ ++ CLIP_SH(delta, -tc, tc); \ + \ + ILVR_B2_SH(zeros, src1, zeros, src2, res0_r, res1_r); \ + \ +@@ -620,7 +622,7 @@ static void avc_biwgt_8x16_msa(uint8_t *src, uint8_t *dst, int32_t stride, + \ + out0 = (v16u8) __msa_ilvr_b((v16i8) in1, (v16i8) in0); \ + out1 = (v16u8) __msa_sldi_b(zero_m, (v16i8) out0, 2); \ +- SLDI_B2_0_UB(out1, out2, out2, out3, 2); \ ++ SLDI_B2_UB(zero_m, out1, zero_m, out2, 2, out2, out3); \ + } + + #define AVC_LPF_H_2BYTE_CHROMA_422(src, stride, tc_val, alpha, beta, res) \ +@@ -662,7 +664,7 @@ static void avc_biwgt_8x16_msa(uint8_t *src, uint8_t *dst, int32_t stride, + q0_sub_p0 <<= 2; \ + delta = q0_sub_p0 + p1_sub_q1; \ + delta = __msa_srari_h(delta, 3); \ +- delta = CLIP_SH(delta, -tc, tc); \ ++ CLIP_SH(delta, -tc, tc); \ + \ + ILVR_B2_SH(zeros, src1, zeros, src2, res0_r, res1_r); \ + \ +@@ -681,7 +683,7 @@ static void avc_biwgt_8x16_msa(uint8_t *src, uint8_t *dst, int32_t stride, + static void avc_loopfilter_luma_intra_edge_hor_msa(uint8_t *data, + uint8_t alpha_in, + uint8_t beta_in, +- uint32_t img_width) ++ ptrdiff_t img_width) + { + v16u8 p0_asub_q0, p1_asub_p0, q1_asub_q0; + v16u8 is_less_than, is_less_than_beta, is_less_than_alpha; +@@ -814,7 +816,7 @@ static void avc_loopfilter_luma_intra_edge_hor_msa(uint8_t *data, + static void avc_loopfilter_luma_intra_edge_ver_msa(uint8_t *data, + uint8_t alpha_in, + uint8_t beta_in, +- uint32_t img_width) ++ ptrdiff_t img_width) + { + uint8_t *src = data - 4; + v16u8 alpha, beta, p0_asub_q0; +@@ -955,23 +957,24 @@ static void avc_loopfilter_luma_intra_edge_ver_msa(uint8_t *data, + ILVRL_H2_SH(tp3, tp2, tmp6, tmp7); + + src = data - 3; +- ST4x4_UB(tmp3, tmp3, 0, 1, 2, 3, src, img_width); +- ST2x4_UB(tmp2, 0, src + 4, img_width); ++ ST_W4(tmp3, 0, 1, 2, 3, src, img_width); ++ ST_H4(tmp2, 0, 1, 2, 3, src + 4, img_width); + src += 4 * img_width; +- ST4x4_UB(tmp4, tmp4, 0, 1, 2, 3, src, img_width); +- ST2x4_UB(tmp2, 4, src + 4, img_width); ++ ST_W4(tmp4, 0, 1, 2, 3, src, img_width); ++ ST_H4(tmp2, 4, 5, 6, 7, src + 4, img_width); + src += 4 * img_width; + +- ST4x4_UB(tmp6, tmp6, 0, 1, 2, 3, src, img_width); +- ST2x4_UB(tmp5, 0, src + 4, img_width); ++ ST_W4(tmp6, 0, 1, 2, 3, src, img_width); ++ ST_H4(tmp5, 0, 1, 2, 3, src + 4, img_width); + src += 4 * img_width; +- ST4x4_UB(tmp7, tmp7, 0, 1, 2, 3, src, img_width); +- ST2x4_UB(tmp5, 4, src + 4, img_width); ++ ST_W4(tmp7, 0, 1, 2, 3, src, img_width); ++ ST_H4(tmp5, 4, 5, 6, 7, src + 4, img_width); + } + } + } + +-static void avc_h_loop_filter_luma_mbaff_intra_msa(uint8_t *src, int32_t stride, ++static void avc_h_loop_filter_luma_mbaff_intra_msa(uint8_t *src, ++ ptrdiff_t stride, + int32_t alpha_in, + int32_t beta_in) + { +@@ -1025,7 +1028,8 @@ static void avc_h_loop_filter_luma_mbaff_intra_msa(uint8_t *src, int32_t stride, + + ILVR_W2_SB(tmp2, tmp0, tmp3, tmp1, src6, src3); + ILVL_W2_SB(tmp2, tmp0, tmp3, tmp1, src1, src5); +- SLDI_B4_0_SB(src6, src1, src3, src5, src0, src2, src4, src7, 8); ++ SLDI_B4_SB(zeros, src6, zeros, src1, zeros, src3, zeros, src5, ++ 8, src0, src2, src4, src7); + + p0_asub_q0 = __msa_asub_u_b((v16u8) src2, (v16u8) src3); + p1_asub_p0 = __msa_asub_u_b((v16u8) src1, (v16u8) src2); +@@ -1116,10 +1120,10 @@ static void avc_h_loop_filter_luma_mbaff_intra_msa(uint8_t *src, int32_t stride, + ILVRL_H2_SH(zeros, dst2_x, tmp2, tmp3); + + ILVR_W2_UB(tmp2, tmp0, tmp3, tmp1, dst0, dst4); +- SLDI_B2_0_UB(dst0, dst4, dst1, dst5, 8); ++ SLDI_B2_UB(zeros, dst0, zeros, dst4, 8, dst1, dst5); + dst2_x = (v16u8) __msa_ilvl_w((v4i32) tmp2, (v4i32) tmp0); + dst2_y = (v16u8) __msa_ilvl_w((v4i32) tmp3, (v4i32) tmp1); +- SLDI_B2_0_UB(dst2_x, dst2_y, dst3_x, dst3_y, 8); ++ SLDI_B2_UB(zeros, dst2_x, zeros, dst2_y, 8, dst3_x, dst3_y); + + out0 = __msa_copy_u_w((v4i32) dst0, 0); + out1 = __msa_copy_u_h((v8i16) dst0, 2); +@@ -1172,7 +1176,7 @@ static void avc_h_loop_filter_luma_mbaff_intra_msa(uint8_t *src, int32_t stride, + static void avc_loopfilter_cb_or_cr_intra_edge_hor_msa(uint8_t *data_cb_or_cr, + uint8_t alpha_in, + uint8_t beta_in, +- uint32_t img_width) ++ ptrdiff_t img_width) + { + v16u8 alpha, beta; + v16u8 is_less_than; +@@ -1221,7 +1225,7 @@ static void avc_loopfilter_cb_or_cr_intra_edge_hor_msa(uint8_t *data_cb_or_cr, + static void avc_loopfilter_cb_or_cr_intra_edge_ver_msa(uint8_t *data_cb_or_cr, + uint8_t alpha_in, + uint8_t beta_in, +- uint32_t img_width) ++ ptrdiff_t img_width) + { + v8i16 tmp1; + v16u8 alpha, beta, is_less_than; +@@ -1274,9 +1278,9 @@ static void avc_loopfilter_cb_or_cr_intra_edge_ver_msa(uint8_t *data_cb_or_cr, + tmp1 = (v8i16) __msa_ilvr_b((v16i8) q0_or_p0_org, (v16i8) p0_or_q0_org); + + data_cb_or_cr -= 1; +- ST2x4_UB(tmp1, 0, data_cb_or_cr, img_width); ++ ST_H4(tmp1, 0, 1, 2, 3, data_cb_or_cr, img_width); + data_cb_or_cr += 4 * img_width; +- ST2x4_UB(tmp1, 4, data_cb_or_cr, img_width); ++ ST_H4(tmp1, 4, 5, 6, 7, data_cb_or_cr, img_width); + } + } + +@@ -1287,7 +1291,7 @@ static void avc_loopfilter_luma_inter_edge_ver_msa(uint8_t *data, + uint8_t tc2, uint8_t tc3, + uint8_t alpha_in, + uint8_t beta_in, +- uint32_t img_width) ++ ptrdiff_t img_width) + { + v16u8 tmp_vec, bs = { 0 }; + +@@ -1567,7 +1571,7 @@ static void avc_loopfilter_luma_inter_edge_hor_msa(uint8_t *data, + uint8_t tc2, uint8_t tc3, + uint8_t alpha_in, + uint8_t beta_in, +- uint32_t image_width) ++ ptrdiff_t image_width) + { + v16u8 tmp_vec; + v16u8 bs = { 0 }; +@@ -1716,7 +1720,7 @@ static void avc_loopfilter_luma_inter_edge_hor_msa(uint8_t *data, + } + } + +-static void avc_h_loop_filter_luma_mbaff_msa(uint8_t *in, int32_t stride, ++static void avc_h_loop_filter_luma_mbaff_msa(uint8_t *in, ptrdiff_t stride, + int32_t alpha_in, int32_t beta_in, + int8_t *tc0) + { +@@ -1741,7 +1745,7 @@ static void avc_h_loop_filter_luma_mbaff_msa(uint8_t *in, int32_t stride, + v8i16 tc, tc_orig_r, tc_plus1; + v16u8 is_tc_orig1, is_tc_orig2, tc_orig = { 0 }; + v8i16 p0_ilvr_q0, p0_add_q0, q0_sub_p0, p1_sub_q1; +- v8u16 src2_r, src3_r; ++ v8i16 src2_r, src3_r; + v8i16 p2_r, p1_r, q2_r, q1_r; + v16u8 p2, q2, p0, q0; + v4i32 dst0, dst1; +@@ -1839,8 +1843,8 @@ static void avc_h_loop_filter_luma_mbaff_msa(uint8_t *in, int32_t stride, + tc_orig_r = (v8i16) __msa_ilvr_b(zeros, (v16i8) tc_orig); + tc = tc_orig_r; + +- p2_r = CLIP_SH(p2_r, -tc_orig_r, tc_orig_r); +- q2_r = CLIP_SH(q2_r, -tc_orig_r, tc_orig_r); ++ CLIP_SH(p2_r, -tc_orig_r, tc_orig_r); ++ CLIP_SH(q2_r, -tc_orig_r, tc_orig_r); + + p2_r += p1_r; + q2_r += q1_r; +@@ -1872,14 +1876,13 @@ static void avc_h_loop_filter_luma_mbaff_msa(uint8_t *in, int32_t stride, + (v16i8) is_less_than_beta2); + tc = (v8i16) __msa_bmnz_v((v16u8) tc, (v16u8) tc_plus1, is_less_than_beta2); + +- q0_sub_p0 = CLIP_SH(q0_sub_p0, -tc, tc); ++ CLIP_SH(q0_sub_p0, -tc, tc); + +- ILVR_B2_UH(zeros, src2, zeros, src3, src2_r, src3_r); ++ ILVR_B2_SH(zeros, src2, zeros, src3, src2_r, src3_r); + src2_r += q0_sub_p0; + src3_r -= q0_sub_p0; + +- src2_r = (v8u16) CLIP_SH_0_255(src2_r); +- src3_r = (v8u16) CLIP_SH_0_255(src3_r); ++ CLIP_SH2_0_255(src2_r, src3_r); + + PCKEV_B2_UB(src2_r, src2_r, src3_r, src3_r, p0, q0); + +@@ -1943,7 +1946,7 @@ static void avc_loopfilter_cb_or_cr_inter_edge_hor_msa(uint8_t *data, + uint8_t tc2, uint8_t tc3, + uint8_t alpha_in, + uint8_t beta_in, +- uint32_t img_width) ++ ptrdiff_t img_width) + { + v16u8 alpha, beta; + v8i16 tmp_vec; +@@ -2029,7 +2032,7 @@ static void avc_loopfilter_cb_or_cr_inter_edge_ver_msa(uint8_t *data, + uint8_t tc2, uint8_t tc3, + uint8_t alpha_in, + uint8_t beta_in, +- uint32_t img_width) ++ ptrdiff_t img_width) + { + uint8_t *src; + v16u8 alpha, beta; +@@ -2110,14 +2113,14 @@ static void avc_loopfilter_cb_or_cr_inter_edge_ver_msa(uint8_t *data, + q0_org = __msa_bmnz_v(q0_org, q0, is_less_than); + tmp1 = (v8i16) __msa_ilvr_b((v16i8) q0_org, (v16i8) p0_org); + src = data - 1; +- ST2x4_UB(tmp1, 0, src, img_width); ++ ST_H4(tmp1, 0, 1, 2, 3, src, img_width); + src += 4 * img_width; +- ST2x4_UB(tmp1, 4, src, img_width); ++ ST_H4(tmp1, 4, 5, 6, 7, src, img_width); + } + } + } + +-static void avc_h_loop_filter_chroma422_msa(uint8_t *src, int32_t stride, ++static void avc_h_loop_filter_chroma422_msa(uint8_t *src, ptrdiff_t stride, + int32_t alpha_in, int32_t beta_in, + int8_t *tc0) + { +@@ -2136,12 +2139,13 @@ static void avc_h_loop_filter_chroma422_msa(uint8_t *src, int32_t stride, + } + + AVC_LPF_H_CHROMA_422(src, stride, tc_val, alpha, beta, res); +- ST2x4_UB(res, 0, (src - 1), stride); ++ ST_H4(res, 0, 1, 2, 3, (src - 1), stride); + src += (4 * stride); + } + } + +-static void avc_h_loop_filter_chroma422_mbaff_msa(uint8_t *src, int32_t stride, ++static void avc_h_loop_filter_chroma422_mbaff_msa(uint8_t *src, ++ ptrdiff_t stride, + int32_t alpha_in, + int32_t beta_in, + int8_t *tc0) +@@ -2173,7 +2177,7 @@ static void avc_h_loop_filter_chroma422_mbaff_msa(uint8_t *src, int32_t stride, + } + } + +-void ff_h264_h_lpf_luma_inter_msa(uint8_t *data, int img_width, ++void ff_h264_h_lpf_luma_inter_msa(uint8_t *data, ptrdiff_t img_width, + int alpha, int beta, int8_t *tc) + { + uint8_t bs0 = 1; +@@ -2195,7 +2199,7 @@ void ff_h264_h_lpf_luma_inter_msa(uint8_t *data, int img_width, + alpha, beta, img_width); + } + +-void ff_h264_v_lpf_luma_inter_msa(uint8_t *data, int img_width, ++void ff_h264_v_lpf_luma_inter_msa(uint8_t *data, ptrdiff_t img_width, + int alpha, int beta, int8_t *tc) + { + +@@ -2218,7 +2222,7 @@ void ff_h264_v_lpf_luma_inter_msa(uint8_t *data, int img_width, + alpha, beta, img_width); + } + +-void ff_h264_h_lpf_chroma_inter_msa(uint8_t *data, int img_width, ++void ff_h264_h_lpf_chroma_inter_msa(uint8_t *data, ptrdiff_t img_width, + int alpha, int beta, int8_t *tc) + { + uint8_t bs0 = 1; +@@ -2240,7 +2244,7 @@ void ff_h264_h_lpf_chroma_inter_msa(uint8_t *data, int img_width, + alpha, beta, img_width); + } + +-void ff_h264_v_lpf_chroma_inter_msa(uint8_t *data, int img_width, ++void ff_h264_v_lpf_chroma_inter_msa(uint8_t *data, ptrdiff_t img_width, + int alpha, int beta, int8_t *tc) + { + uint8_t bs0 = 1; +@@ -2262,40 +2266,40 @@ void ff_h264_v_lpf_chroma_inter_msa(uint8_t *data, int img_width, + alpha, beta, img_width); + } + +-void ff_h264_h_lpf_luma_intra_msa(uint8_t *data, int img_width, ++void ff_h264_h_lpf_luma_intra_msa(uint8_t *data, ptrdiff_t img_width, + int alpha, int beta) + { + avc_loopfilter_luma_intra_edge_ver_msa(data, (uint8_t) alpha, + (uint8_t) beta, +- (unsigned int) img_width); ++ img_width); + } + +-void ff_h264_v_lpf_luma_intra_msa(uint8_t *data, int img_width, ++void ff_h264_v_lpf_luma_intra_msa(uint8_t *data, ptrdiff_t img_width, + int alpha, int beta) + { + avc_loopfilter_luma_intra_edge_hor_msa(data, (uint8_t) alpha, + (uint8_t) beta, +- (unsigned int) img_width); ++ img_width); + } + +-void ff_h264_h_lpf_chroma_intra_msa(uint8_t *data, int img_width, ++void ff_h264_h_lpf_chroma_intra_msa(uint8_t *data, ptrdiff_t img_width, + int alpha, int beta) + { + avc_loopfilter_cb_or_cr_intra_edge_ver_msa(data, (uint8_t) alpha, + (uint8_t) beta, +- (unsigned int) img_width); ++ img_width); + } + +-void ff_h264_v_lpf_chroma_intra_msa(uint8_t *data, int img_width, ++void ff_h264_v_lpf_chroma_intra_msa(uint8_t *data, ptrdiff_t img_width, + int alpha, int beta) + { + avc_loopfilter_cb_or_cr_intra_edge_hor_msa(data, (uint8_t) alpha, + (uint8_t) beta, +- (unsigned int) img_width); ++ img_width); + } + + void ff_h264_h_loop_filter_chroma422_msa(uint8_t *src, +- int32_t ystride, ++ ptrdiff_t ystride, + int32_t alpha, int32_t beta, + int8_t *tc0) + { +@@ -2303,7 +2307,7 @@ void ff_h264_h_loop_filter_chroma422_msa(uint8_t *src, + } + + void ff_h264_h_loop_filter_chroma422_mbaff_msa(uint8_t *src, +- int32_t ystride, ++ ptrdiff_t ystride, + int32_t alpha, + int32_t beta, + int8_t *tc0) +@@ -2312,7 +2316,7 @@ void ff_h264_h_loop_filter_chroma422_mbaff_msa(uint8_t *src, + } + + void ff_h264_h_loop_filter_luma_mbaff_msa(uint8_t *src, +- int32_t ystride, ++ ptrdiff_t ystride, + int32_t alpha, + int32_t beta, + int8_t *tc0) +@@ -2321,7 +2325,7 @@ void ff_h264_h_loop_filter_luma_mbaff_msa(uint8_t *src, + } + + void ff_h264_h_loop_filter_luma_mbaff_intra_msa(uint8_t *src, +- int32_t ystride, ++ ptrdiff_t ystride, + int32_t alpha, + int32_t beta) + { +@@ -2509,10 +2513,8 @@ void ff_biweight_h264_pixels16_8_msa(uint8_t *dst, uint8_t *src, + SRA_4V(tmp4, tmp5, tmp6, tmp7, denom); + SRA_4V(tmp8, tmp9, tmp10, tmp11, denom); + SRA_4V(tmp12, tmp13, tmp14, tmp15, denom); +- CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); +- CLIP_SH4_0_255(tmp4, tmp5, tmp6, tmp7); +- CLIP_SH4_0_255(tmp8, tmp9, tmp10, tmp11); +- CLIP_SH4_0_255(tmp12, tmp13, tmp14, tmp15); ++ CLIP_SH8_0_255(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); ++ CLIP_SH8_0_255(tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15); + PCKEV_B4_UB(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, dst0, dst1, + dst2, dst3); + PCKEV_B4_UB(tmp9, tmp8, tmp11, tmp10, tmp13, tmp12, tmp15, tmp14, dst4, +@@ -2553,10 +2555,8 @@ void ff_biweight_h264_pixels16_8_msa(uint8_t *dst, uint8_t *src, + SRA_4V(tmp4, tmp5, tmp6, tmp7, denom); + SRA_4V(tmp8, tmp9, tmp10, tmp11, denom); + SRA_4V(tmp12, tmp13, tmp14, tmp15, denom); +- CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); +- CLIP_SH4_0_255(tmp4, tmp5, tmp6, tmp7); +- CLIP_SH4_0_255(tmp8, tmp9, tmp10, tmp11); +- CLIP_SH4_0_255(tmp12, tmp13, tmp14, tmp15); ++ CLIP_SH8_0_255(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); ++ CLIP_SH8_0_255(tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15); + PCKEV_B4_UB(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, dst0, dst1, + dst2, dst3); + PCKEV_B4_UB(tmp9, tmp8, tmp11, tmp10, tmp13, tmp12, tmp15, tmp14, dst4, +diff --git a/libavcodec/mips/h264idct_msa.c b/libavcodec/mips/h264idct_msa.c +index 1e1a5c8..fbf7795 100644 +--- a/libavcodec/mips/h264idct_msa.c ++++ b/libavcodec/mips/h264idct_msa.c +@@ -233,13 +233,10 @@ static void avc_idct8_addblk_msa(uint8_t *dst, int16_t *src, int32_t dst_stride) + res0, res1, res2, res3); + ADD4(res4, tmp4, res5, tmp5, res6, tmp6, res7, tmp7, + res4, res5, res6, res7); +- CLIP_SH4_0_255(res0, res1, res2, res3); +- CLIP_SH4_0_255(res4, res5, res6, res7); ++ CLIP_SH8_0_255(res0, res1, res2, res3, res4, res5, res6, res7); + PCKEV_B4_SB(res1, res0, res3, res2, res5, res4, res7, res6, + dst0, dst1, dst2, dst3); +- ST8x4_UB(dst0, dst1, dst, dst_stride); +- dst += (4 * dst_stride); +- ST8x4_UB(dst2, dst3, dst, dst_stride); ++ ST_D8(dst0, dst1, dst2, dst3, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride) + } + + static void avc_idct8_dc_addblk_msa(uint8_t *dst, int16_t *src, +@@ -265,13 +262,11 @@ static void avc_idct8_dc_addblk_msa(uint8_t *dst, int16_t *src, + dst0_r, dst1_r, dst2_r, dst3_r); + ADD4(dst4_r, dc, dst5_r, dc, dst6_r, dc, dst7_r, dc, + dst4_r, dst5_r, dst6_r, dst7_r); +- CLIP_SH4_0_255(dst0_r, dst1_r, dst2_r, dst3_r); +- CLIP_SH4_0_255(dst4_r, dst5_r, dst6_r, dst7_r); ++ CLIP_SH8_0_255(dst0_r, dst1_r, dst2_r, dst3_r, ++ dst4_r, dst5_r, dst6_r, dst7_r); + PCKEV_B4_SB(dst1_r, dst0_r, dst3_r, dst2_r, dst5_r, dst4_r, dst7_r, dst6_r, + dst0, dst1, dst2, dst3); +- ST8x4_UB(dst0, dst1, dst, dst_stride); +- dst += (4 * dst_stride); +- ST8x4_UB(dst2, dst3, dst, dst_stride); ++ ST_D8(dst0, dst1, dst2, dst3, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride) + } + + void ff_h264_idct_add_msa(uint8_t *dst, int16_t *src, int32_t dst_stride) +@@ -340,7 +335,7 @@ void ff_h264_idct4x4_addblk_dc_msa(uint8_t *dst, int16_t *src, + ADD2(pred_r, input_dc, pred_l, input_dc, pred_r, pred_l); + CLIP_SH2_0_255(pred_r, pred_l); + out = __msa_pckev_b((v16i8) pred_l, (v16i8) pred_r); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + } + + void ff_h264_idct8_dc_addblk_msa(uint8_t *dst, int16_t *src, +diff --git a/libavcodec/mips/h264pred_init_mips.c b/libavcodec/mips/h264pred_init_mips.c +index c33d8f7..0fd9bb7 100644 +--- a/libavcodec/mips/h264pred_init_mips.c ++++ b/libavcodec/mips/h264pred_init_mips.c +@@ -19,137 +19,121 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/mips/cpu.h" + #include "config.h" + #include "h264dsp_mips.h" + #include "h264pred_mips.h" + +-#if HAVE_MSA +-static av_cold void h264_pred_init_msa(H264PredContext *h, int codec_id, +- const int bit_depth, +- const int chroma_format_idc) ++av_cold void ff_h264_pred_init_mips(H264PredContext *h, int codec_id, ++ int bit_depth, ++ const int chroma_format_idc) + { +- if (8 == bit_depth) { +- if (chroma_format_idc == 1) { +- h->pred8x8[VERT_PRED8x8] = ff_h264_intra_pred_vert_8x8_msa; +- h->pred8x8[HOR_PRED8x8] = ff_h264_intra_pred_horiz_8x8_msa; +- } ++ int cpu_flags = av_get_cpu_flags(); + +- if (codec_id != AV_CODEC_ID_VP7 && codec_id != AV_CODEC_ID_VP8) { ++ if (have_mmi(cpu_flags)) { ++ if (bit_depth == 8) { + if (chroma_format_idc == 1) { +- h->pred8x8[PLANE_PRED8x8] = ff_h264_intra_predict_plane_8x8_msa; +- } +- } +- if (codec_id != AV_CODEC_ID_RV40 && codec_id != AV_CODEC_ID_VP7 +- && codec_id != AV_CODEC_ID_VP8) { +- if (chroma_format_idc == 1) { +- h->pred8x8[DC_PRED8x8] = ff_h264_intra_predict_dc_4blk_8x8_msa; +- h->pred8x8[LEFT_DC_PRED8x8] = +- ff_h264_intra_predict_hor_dc_8x8_msa; +- h->pred8x8[TOP_DC_PRED8x8] = +- ff_h264_intra_predict_vert_dc_8x8_msa; +- h->pred8x8[ALZHEIMER_DC_L0T_PRED8x8] = +- ff_h264_intra_predict_mad_cow_dc_l0t_8x8_msa; +- h->pred8x8[ALZHEIMER_DC_0LT_PRED8x8] = +- ff_h264_intra_predict_mad_cow_dc_0lt_8x8_msa; +- h->pred8x8[ALZHEIMER_DC_L00_PRED8x8] = +- ff_h264_intra_predict_mad_cow_dc_l00_8x8_msa; +- h->pred8x8[ALZHEIMER_DC_0L0_PRED8x8] = +- ff_h264_intra_predict_mad_cow_dc_0l0_8x8_msa; +- } +- } else { +- if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8) { +- h->pred8x8[7] = ff_vp8_pred8x8_127_dc_8_msa; +- h->pred8x8[8] = ff_vp8_pred8x8_129_dc_8_msa; ++ h->pred8x8 [VERT_PRED8x8 ] = ff_pred8x8_vertical_8_mmi; ++ h->pred8x8 [HOR_PRED8x8 ] = ff_pred8x8_horizontal_8_mmi; ++ } else { ++ h->pred8x8 [VERT_PRED8x8 ] = ff_pred8x16_vertical_8_mmi; ++ h->pred8x8 [HOR_PRED8x8 ] = ff_pred8x16_horizontal_8_mmi; + } +- } + +- if (chroma_format_idc == 1) { +- h->pred8x8[DC_128_PRED8x8] = ff_h264_intra_pred_dc_128_8x8_msa; +- } ++ h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_8_mmi; ++ h->pred16x16[VERT_PRED8x8 ] = ff_pred16x16_vertical_8_mmi; ++ h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_8_mmi; ++ h->pred8x8l [TOP_DC_PRED ] = ff_pred8x8l_top_dc_8_mmi; ++ h->pred8x8l [DC_PRED ] = ff_pred8x8l_dc_8_mmi; + +- h->pred16x16[DC_PRED8x8] = ff_h264_intra_pred_dc_16x16_msa; +- h->pred16x16[VERT_PRED8x8] = ff_h264_intra_pred_vert_16x16_msa; +- h->pred16x16[HOR_PRED8x8] = ff_h264_intra_pred_horiz_16x16_msa; ++ #if ARCH_MIPS64 ++ switch (codec_id) { ++ case AV_CODEC_ID_SVQ3: ++ h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_svq3_8_mmi; ++ break; ++ case AV_CODEC_ID_RV40: ++ h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_rv40_8_mmi; ++ break; ++ case AV_CODEC_ID_VP7: ++ case AV_CODEC_ID_VP8: ++ break; ++ default: ++ h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_h264_8_mmi; ++ break; ++ } ++ #endif + +- switch (codec_id) { +- case AV_CODEC_ID_SVQ3: +- ; +- break; +- case AV_CODEC_ID_RV40: +- ; +- break; +- case AV_CODEC_ID_VP7: +- case AV_CODEC_ID_VP8: +- h->pred16x16[7] = ff_vp8_pred16x16_127_dc_8_msa; +- h->pred16x16[8] = ff_vp8_pred16x16_129_dc_8_msa; +- break; +- default: +- h->pred16x16[PLANE_PRED8x8] = +- ff_h264_intra_predict_plane_16x16_msa; +- break; ++ if (codec_id == AV_CODEC_ID_SVQ3 || codec_id == AV_CODEC_ID_H264) { ++ if (chroma_format_idc == 1) { ++ h->pred8x8[TOP_DC_PRED8x8 ] = ff_pred8x8_top_dc_8_mmi; ++ h->pred8x8[DC_PRED8x8 ] = ff_pred8x8_dc_8_mmi; ++ } ++ } + } +- +- h->pred16x16[LEFT_DC_PRED8x8] = ff_h264_intra_pred_dc_left_16x16_msa; +- h->pred16x16[TOP_DC_PRED8x8] = ff_h264_intra_pred_dc_top_16x16_msa; +- h->pred16x16[DC_128_PRED8x8] = ff_h264_intra_pred_dc_128_16x16_msa; + } +-} +-#endif // #if HAVE_MSA +- +-#if HAVE_MMI +-static av_cold void h264_pred_init_mmi(H264PredContext *h, int codec_id, +- const int bit_depth, const int chroma_format_idc) +-{ +- if (bit_depth == 8) { +- if (chroma_format_idc == 1) { +- h->pred8x8 [VERT_PRED8x8 ] = ff_pred8x8_vertical_8_mmi; +- h->pred8x8 [HOR_PRED8x8 ] = ff_pred8x8_horizontal_8_mmi; +- } else { +- h->pred8x8 [VERT_PRED8x8 ] = ff_pred8x16_vertical_8_mmi; +- h->pred8x8 [HOR_PRED8x8 ] = ff_pred8x16_horizontal_8_mmi; +- } + +- h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_8_mmi; +- h->pred16x16[VERT_PRED8x8 ] = ff_pred16x16_vertical_8_mmi; +- h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_8_mmi; +- h->pred8x8l [TOP_DC_PRED ] = ff_pred8x8l_top_dc_8_mmi; +- h->pred8x8l [DC_PRED ] = ff_pred8x8l_dc_8_mmi; ++ if (have_msa(cpu_flags)) { ++ if (8 == bit_depth) { ++ if (chroma_format_idc == 1) { ++ h->pred8x8[VERT_PRED8x8] = ff_h264_intra_pred_vert_8x8_msa; ++ h->pred8x8[HOR_PRED8x8] = ff_h264_intra_pred_horiz_8x8_msa; ++ } + +-#if ARCH_MIPS64 +- switch (codec_id) { +- case AV_CODEC_ID_SVQ3: +- h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_svq3_8_mmi; +- break; +- case AV_CODEC_ID_RV40: +- h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_rv40_8_mmi; +- break; +- case AV_CODEC_ID_VP7: +- case AV_CODEC_ID_VP8: +- break; +- default: +- h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_h264_8_mmi; +- break; +- } +-#endif ++ if (codec_id != AV_CODEC_ID_VP7 && codec_id != AV_CODEC_ID_VP8) { ++ if (chroma_format_idc == 1) { ++ h->pred8x8[PLANE_PRED8x8] = ff_h264_intra_predict_plane_8x8_msa; ++ } ++ } ++ if (codec_id != AV_CODEC_ID_RV40 && codec_id != AV_CODEC_ID_VP7 ++ && codec_id != AV_CODEC_ID_VP8) { ++ if (chroma_format_idc == 1) { ++ h->pred8x8[DC_PRED8x8] = ff_h264_intra_predict_dc_4blk_8x8_msa; ++ h->pred8x8[LEFT_DC_PRED8x8] = ++ ff_h264_intra_predict_hor_dc_8x8_msa; ++ h->pred8x8[TOP_DC_PRED8x8] = ++ ff_h264_intra_predict_vert_dc_8x8_msa; ++ h->pred8x8[ALZHEIMER_DC_L0T_PRED8x8] = ++ ff_h264_intra_predict_mad_cow_dc_l0t_8x8_msa; ++ h->pred8x8[ALZHEIMER_DC_0LT_PRED8x8] = ++ ff_h264_intra_predict_mad_cow_dc_0lt_8x8_msa; ++ h->pred8x8[ALZHEIMER_DC_L00_PRED8x8] = ++ ff_h264_intra_predict_mad_cow_dc_l00_8x8_msa; ++ h->pred8x8[ALZHEIMER_DC_0L0_PRED8x8] = ++ ff_h264_intra_predict_mad_cow_dc_0l0_8x8_msa; ++ } ++ } else { ++ if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8) { ++ h->pred8x8[7] = ff_vp8_pred8x8_127_dc_8_msa; ++ h->pred8x8[8] = ff_vp8_pred8x8_129_dc_8_msa; ++ } ++ } + +- if (codec_id == AV_CODEC_ID_SVQ3 || codec_id == AV_CODEC_ID_H264) { + if (chroma_format_idc == 1) { +- h->pred8x8[TOP_DC_PRED8x8 ] = ff_pred8x8_top_dc_8_mmi; +- h->pred8x8[DC_PRED8x8 ] = ff_pred8x8_dc_8_mmi; ++ h->pred8x8[DC_128_PRED8x8] = ff_h264_intra_pred_dc_128_8x8_msa; ++ } ++ ++ h->pred16x16[DC_PRED8x8] = ff_h264_intra_pred_dc_16x16_msa; ++ h->pred16x16[VERT_PRED8x8] = ff_h264_intra_pred_vert_16x16_msa; ++ h->pred16x16[HOR_PRED8x8] = ff_h264_intra_pred_horiz_16x16_msa; ++ ++ switch (codec_id) { ++ case AV_CODEC_ID_SVQ3: ++ case AV_CODEC_ID_RV40: ++ break; ++ case AV_CODEC_ID_VP7: ++ case AV_CODEC_ID_VP8: ++ h->pred16x16[7] = ff_vp8_pred16x16_127_dc_8_msa; ++ h->pred16x16[8] = ff_vp8_pred16x16_129_dc_8_msa; ++ break; ++ default: ++ h->pred16x16[PLANE_PRED8x8] = ++ ff_h264_intra_predict_plane_16x16_msa; ++ break; + } ++ ++ h->pred16x16[LEFT_DC_PRED8x8] = ff_h264_intra_pred_dc_left_16x16_msa; ++ h->pred16x16[TOP_DC_PRED8x8] = ff_h264_intra_pred_dc_top_16x16_msa; ++ h->pred16x16[DC_128_PRED8x8] = ff_h264_intra_pred_dc_128_16x16_msa; + } + } + } +-#endif /* HAVE_MMI */ +- +-av_cold void ff_h264_pred_init_mips(H264PredContext *h, int codec_id, +- int bit_depth, +- const int chroma_format_idc) +-{ +-#if HAVE_MSA +- h264_pred_init_msa(h, codec_id, bit_depth, chroma_format_idc); +-#endif // #if HAVE_MSA +-#if HAVE_MMI +- h264_pred_init_mmi(h, codec_id, bit_depth, chroma_format_idc); +-#endif /* HAVE_MMI */ +-} +diff --git a/libavcodec/mips/h264pred_mmi.c b/libavcodec/mips/h264pred_mmi.c +index f4fe091..0209c2e 100644 +--- a/libavcodec/mips/h264pred_mmi.c ++++ b/libavcodec/mips/h264pred_mmi.c +@@ -178,7 +178,9 @@ void ff_pred8x8l_top_dc_8_mmi(uint8_t *src, int has_topleft, + + "1: \n\t" + "bnez %[has_topright], 2f \n\t" +- "pinsrh_3 %[ftmp2], %[ftmp2], %[ftmp4] \n\t" ++ "dli %[tmp0], 0xa4 \n\t" ++ "mtc1 %[tmp0], %[ftmp1] \n\t" ++ "pshufh %[ftmp2], %[ftmp2], %[ftmp1] \n\t" + + "2: \n\t" + "dli %[tmp0], 0x02 \n\t" +@@ -370,7 +372,9 @@ void ff_pred8x8l_vertical_8_mmi(uint8_t *src, int has_topleft, + + "1: \n\t" + "bnez %[has_topright], 2f \n\t" +- "pinsrh_3 %[ftmp11], %[ftmp11], %[ftmp9] \n\t" ++ "dli %[tmp0], 0xa4 \n\t" ++ "mtc1 %[tmp0], %[ftmp1] \n\t" ++ "pshufh %[ftmp11], %[ftmp11], %[ftmp1] \n\t" + + "2: \n\t" + "dli %[tmp0], 0x02 \n\t" +diff --git a/libavcodec/mips/h264qpel_init_mips.c b/libavcodec/mips/h264qpel_init_mips.c +index 92219f8..ea839f0 100644 +--- a/libavcodec/mips/h264qpel_init_mips.c ++++ b/libavcodec/mips/h264qpel_init_mips.c +@@ -19,231 +19,221 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/mips/cpu.h" + #include "h264dsp_mips.h" + +-#if HAVE_MSA +-static av_cold void h264qpel_init_msa(H264QpelContext *c, int bit_depth) ++av_cold void ff_h264qpel_init_mips(H264QpelContext *c, int bit_depth) + { +- if (8 == bit_depth) { +- c->put_h264_qpel_pixels_tab[0][0] = ff_put_h264_qpel16_mc00_msa; +- c->put_h264_qpel_pixels_tab[0][1] = ff_put_h264_qpel16_mc10_msa; +- c->put_h264_qpel_pixels_tab[0][2] = ff_put_h264_qpel16_mc20_msa; +- c->put_h264_qpel_pixels_tab[0][3] = ff_put_h264_qpel16_mc30_msa; +- c->put_h264_qpel_pixels_tab[0][4] = ff_put_h264_qpel16_mc01_msa; +- c->put_h264_qpel_pixels_tab[0][5] = ff_put_h264_qpel16_mc11_msa; +- c->put_h264_qpel_pixels_tab[0][6] = ff_put_h264_qpel16_mc21_msa; +- c->put_h264_qpel_pixels_tab[0][7] = ff_put_h264_qpel16_mc31_msa; +- c->put_h264_qpel_pixels_tab[0][8] = ff_put_h264_qpel16_mc02_msa; +- c->put_h264_qpel_pixels_tab[0][9] = ff_put_h264_qpel16_mc12_msa; +- c->put_h264_qpel_pixels_tab[0][10] = ff_put_h264_qpel16_mc22_msa; +- c->put_h264_qpel_pixels_tab[0][11] = ff_put_h264_qpel16_mc32_msa; +- c->put_h264_qpel_pixels_tab[0][12] = ff_put_h264_qpel16_mc03_msa; +- c->put_h264_qpel_pixels_tab[0][13] = ff_put_h264_qpel16_mc13_msa; +- c->put_h264_qpel_pixels_tab[0][14] = ff_put_h264_qpel16_mc23_msa; +- c->put_h264_qpel_pixels_tab[0][15] = ff_put_h264_qpel16_mc33_msa; ++ int cpu_flags = av_get_cpu_flags(); ++ ++ if (have_mmi(cpu_flags)) { ++ if (bit_depth == 8) { ++ c->put_h264_qpel_pixels_tab[0][0] = ff_put_h264_qpel16_mc00_mmi; ++ c->put_h264_qpel_pixels_tab[0][1] = ff_put_h264_qpel16_mc10_mmi; ++ c->put_h264_qpel_pixels_tab[0][2] = ff_put_h264_qpel16_mc20_mmi; ++ c->put_h264_qpel_pixels_tab[0][3] = ff_put_h264_qpel16_mc30_mmi; ++ c->put_h264_qpel_pixels_tab[0][4] = ff_put_h264_qpel16_mc01_mmi; ++ c->put_h264_qpel_pixels_tab[0][5] = ff_put_h264_qpel16_mc11_mmi; ++ c->put_h264_qpel_pixels_tab[0][6] = ff_put_h264_qpel16_mc21_mmi; ++ c->put_h264_qpel_pixels_tab[0][7] = ff_put_h264_qpel16_mc31_mmi; ++ c->put_h264_qpel_pixels_tab[0][8] = ff_put_h264_qpel16_mc02_mmi; ++ c->put_h264_qpel_pixels_tab[0][9] = ff_put_h264_qpel16_mc12_mmi; ++ c->put_h264_qpel_pixels_tab[0][10] = ff_put_h264_qpel16_mc22_mmi; ++ c->put_h264_qpel_pixels_tab[0][11] = ff_put_h264_qpel16_mc32_mmi; ++ c->put_h264_qpel_pixels_tab[0][12] = ff_put_h264_qpel16_mc03_mmi; ++ c->put_h264_qpel_pixels_tab[0][13] = ff_put_h264_qpel16_mc13_mmi; ++ c->put_h264_qpel_pixels_tab[0][14] = ff_put_h264_qpel16_mc23_mmi; ++ c->put_h264_qpel_pixels_tab[0][15] = ff_put_h264_qpel16_mc33_mmi; + +- c->put_h264_qpel_pixels_tab[1][0] = ff_put_h264_qpel8_mc00_msa; +- c->put_h264_qpel_pixels_tab[1][1] = ff_put_h264_qpel8_mc10_msa; +- c->put_h264_qpel_pixels_tab[1][2] = ff_put_h264_qpel8_mc20_msa; +- c->put_h264_qpel_pixels_tab[1][3] = ff_put_h264_qpel8_mc30_msa; +- c->put_h264_qpel_pixels_tab[1][4] = ff_put_h264_qpel8_mc01_msa; +- c->put_h264_qpel_pixels_tab[1][5] = ff_put_h264_qpel8_mc11_msa; +- c->put_h264_qpel_pixels_tab[1][6] = ff_put_h264_qpel8_mc21_msa; +- c->put_h264_qpel_pixels_tab[1][7] = ff_put_h264_qpel8_mc31_msa; +- c->put_h264_qpel_pixels_tab[1][8] = ff_put_h264_qpel8_mc02_msa; +- c->put_h264_qpel_pixels_tab[1][9] = ff_put_h264_qpel8_mc12_msa; +- c->put_h264_qpel_pixels_tab[1][10] = ff_put_h264_qpel8_mc22_msa; +- c->put_h264_qpel_pixels_tab[1][11] = ff_put_h264_qpel8_mc32_msa; +- c->put_h264_qpel_pixels_tab[1][12] = ff_put_h264_qpel8_mc03_msa; +- c->put_h264_qpel_pixels_tab[1][13] = ff_put_h264_qpel8_mc13_msa; +- c->put_h264_qpel_pixels_tab[1][14] = ff_put_h264_qpel8_mc23_msa; +- c->put_h264_qpel_pixels_tab[1][15] = ff_put_h264_qpel8_mc33_msa; ++ c->put_h264_qpel_pixels_tab[1][0] = ff_put_h264_qpel8_mc00_mmi; ++ c->put_h264_qpel_pixels_tab[1][1] = ff_put_h264_qpel8_mc10_mmi; ++ c->put_h264_qpel_pixels_tab[1][2] = ff_put_h264_qpel8_mc20_mmi; ++ c->put_h264_qpel_pixels_tab[1][3] = ff_put_h264_qpel8_mc30_mmi; ++ c->put_h264_qpel_pixels_tab[1][4] = ff_put_h264_qpel8_mc01_mmi; ++ c->put_h264_qpel_pixels_tab[1][5] = ff_put_h264_qpel8_mc11_mmi; ++ c->put_h264_qpel_pixels_tab[1][6] = ff_put_h264_qpel8_mc21_mmi; ++ c->put_h264_qpel_pixels_tab[1][7] = ff_put_h264_qpel8_mc31_mmi; ++ c->put_h264_qpel_pixels_tab[1][8] = ff_put_h264_qpel8_mc02_mmi; ++ c->put_h264_qpel_pixels_tab[1][9] = ff_put_h264_qpel8_mc12_mmi; ++ c->put_h264_qpel_pixels_tab[1][10] = ff_put_h264_qpel8_mc22_mmi; ++ c->put_h264_qpel_pixels_tab[1][11] = ff_put_h264_qpel8_mc32_mmi; ++ c->put_h264_qpel_pixels_tab[1][12] = ff_put_h264_qpel8_mc03_mmi; ++ c->put_h264_qpel_pixels_tab[1][13] = ff_put_h264_qpel8_mc13_mmi; ++ c->put_h264_qpel_pixels_tab[1][14] = ff_put_h264_qpel8_mc23_mmi; ++ c->put_h264_qpel_pixels_tab[1][15] = ff_put_h264_qpel8_mc33_mmi; + +- c->put_h264_qpel_pixels_tab[2][1] = ff_put_h264_qpel4_mc10_msa; +- c->put_h264_qpel_pixels_tab[2][2] = ff_put_h264_qpel4_mc20_msa; +- c->put_h264_qpel_pixels_tab[2][3] = ff_put_h264_qpel4_mc30_msa; +- c->put_h264_qpel_pixels_tab[2][4] = ff_put_h264_qpel4_mc01_msa; +- c->put_h264_qpel_pixels_tab[2][5] = ff_put_h264_qpel4_mc11_msa; +- c->put_h264_qpel_pixels_tab[2][6] = ff_put_h264_qpel4_mc21_msa; +- c->put_h264_qpel_pixels_tab[2][7] = ff_put_h264_qpel4_mc31_msa; +- c->put_h264_qpel_pixels_tab[2][8] = ff_put_h264_qpel4_mc02_msa; +- c->put_h264_qpel_pixels_tab[2][9] = ff_put_h264_qpel4_mc12_msa; +- c->put_h264_qpel_pixels_tab[2][10] = ff_put_h264_qpel4_mc22_msa; +- c->put_h264_qpel_pixels_tab[2][11] = ff_put_h264_qpel4_mc32_msa; +- c->put_h264_qpel_pixels_tab[2][12] = ff_put_h264_qpel4_mc03_msa; +- c->put_h264_qpel_pixels_tab[2][13] = ff_put_h264_qpel4_mc13_msa; +- c->put_h264_qpel_pixels_tab[2][14] = ff_put_h264_qpel4_mc23_msa; +- c->put_h264_qpel_pixels_tab[2][15] = ff_put_h264_qpel4_mc33_msa; ++ c->put_h264_qpel_pixels_tab[2][0] = ff_put_h264_qpel4_mc00_mmi; ++ c->put_h264_qpel_pixels_tab[2][1] = ff_put_h264_qpel4_mc10_mmi; ++ c->put_h264_qpel_pixels_tab[2][2] = ff_put_h264_qpel4_mc20_mmi; ++ c->put_h264_qpel_pixels_tab[2][3] = ff_put_h264_qpel4_mc30_mmi; ++ c->put_h264_qpel_pixels_tab[2][4] = ff_put_h264_qpel4_mc01_mmi; ++ c->put_h264_qpel_pixels_tab[2][5] = ff_put_h264_qpel4_mc11_mmi; ++ c->put_h264_qpel_pixels_tab[2][6] = ff_put_h264_qpel4_mc21_mmi; ++ c->put_h264_qpel_pixels_tab[2][7] = ff_put_h264_qpel4_mc31_mmi; ++ c->put_h264_qpel_pixels_tab[2][8] = ff_put_h264_qpel4_mc02_mmi; ++ c->put_h264_qpel_pixels_tab[2][9] = ff_put_h264_qpel4_mc12_mmi; ++ c->put_h264_qpel_pixels_tab[2][10] = ff_put_h264_qpel4_mc22_mmi; ++ c->put_h264_qpel_pixels_tab[2][11] = ff_put_h264_qpel4_mc32_mmi; ++ c->put_h264_qpel_pixels_tab[2][12] = ff_put_h264_qpel4_mc03_mmi; ++ c->put_h264_qpel_pixels_tab[2][13] = ff_put_h264_qpel4_mc13_mmi; ++ c->put_h264_qpel_pixels_tab[2][14] = ff_put_h264_qpel4_mc23_mmi; ++ c->put_h264_qpel_pixels_tab[2][15] = ff_put_h264_qpel4_mc33_mmi; + +- c->avg_h264_qpel_pixels_tab[0][0] = ff_avg_h264_qpel16_mc00_msa; +- c->avg_h264_qpel_pixels_tab[0][1] = ff_avg_h264_qpel16_mc10_msa; +- c->avg_h264_qpel_pixels_tab[0][2] = ff_avg_h264_qpel16_mc20_msa; +- c->avg_h264_qpel_pixels_tab[0][3] = ff_avg_h264_qpel16_mc30_msa; +- c->avg_h264_qpel_pixels_tab[0][4] = ff_avg_h264_qpel16_mc01_msa; +- c->avg_h264_qpel_pixels_tab[0][5] = ff_avg_h264_qpel16_mc11_msa; +- c->avg_h264_qpel_pixels_tab[0][6] = ff_avg_h264_qpel16_mc21_msa; +- c->avg_h264_qpel_pixels_tab[0][7] = ff_avg_h264_qpel16_mc31_msa; +- c->avg_h264_qpel_pixels_tab[0][8] = ff_avg_h264_qpel16_mc02_msa; +- c->avg_h264_qpel_pixels_tab[0][9] = ff_avg_h264_qpel16_mc12_msa; +- c->avg_h264_qpel_pixels_tab[0][10] = ff_avg_h264_qpel16_mc22_msa; +- c->avg_h264_qpel_pixels_tab[0][11] = ff_avg_h264_qpel16_mc32_msa; +- c->avg_h264_qpel_pixels_tab[0][12] = ff_avg_h264_qpel16_mc03_msa; +- c->avg_h264_qpel_pixels_tab[0][13] = ff_avg_h264_qpel16_mc13_msa; +- c->avg_h264_qpel_pixels_tab[0][14] = ff_avg_h264_qpel16_mc23_msa; +- c->avg_h264_qpel_pixels_tab[0][15] = ff_avg_h264_qpel16_mc33_msa; ++ c->avg_h264_qpel_pixels_tab[0][0] = ff_avg_h264_qpel16_mc00_mmi; ++ c->avg_h264_qpel_pixels_tab[0][1] = ff_avg_h264_qpel16_mc10_mmi; ++ c->avg_h264_qpel_pixels_tab[0][2] = ff_avg_h264_qpel16_mc20_mmi; ++ c->avg_h264_qpel_pixels_tab[0][3] = ff_avg_h264_qpel16_mc30_mmi; ++ c->avg_h264_qpel_pixels_tab[0][4] = ff_avg_h264_qpel16_mc01_mmi; ++ c->avg_h264_qpel_pixels_tab[0][5] = ff_avg_h264_qpel16_mc11_mmi; ++ c->avg_h264_qpel_pixels_tab[0][6] = ff_avg_h264_qpel16_mc21_mmi; ++ c->avg_h264_qpel_pixels_tab[0][7] = ff_avg_h264_qpel16_mc31_mmi; ++ c->avg_h264_qpel_pixels_tab[0][8] = ff_avg_h264_qpel16_mc02_mmi; ++ c->avg_h264_qpel_pixels_tab[0][9] = ff_avg_h264_qpel16_mc12_mmi; ++ c->avg_h264_qpel_pixels_tab[0][10] = ff_avg_h264_qpel16_mc22_mmi; ++ c->avg_h264_qpel_pixels_tab[0][11] = ff_avg_h264_qpel16_mc32_mmi; ++ c->avg_h264_qpel_pixels_tab[0][12] = ff_avg_h264_qpel16_mc03_mmi; ++ c->avg_h264_qpel_pixels_tab[0][13] = ff_avg_h264_qpel16_mc13_mmi; ++ c->avg_h264_qpel_pixels_tab[0][14] = ff_avg_h264_qpel16_mc23_mmi; ++ c->avg_h264_qpel_pixels_tab[0][15] = ff_avg_h264_qpel16_mc33_mmi; + +- c->avg_h264_qpel_pixels_tab[1][0] = ff_avg_h264_qpel8_mc00_msa; +- c->avg_h264_qpel_pixels_tab[1][1] = ff_avg_h264_qpel8_mc10_msa; +- c->avg_h264_qpel_pixels_tab[1][2] = ff_avg_h264_qpel8_mc20_msa; +- c->avg_h264_qpel_pixels_tab[1][3] = ff_avg_h264_qpel8_mc30_msa; +- c->avg_h264_qpel_pixels_tab[1][4] = ff_avg_h264_qpel8_mc01_msa; +- c->avg_h264_qpel_pixels_tab[1][5] = ff_avg_h264_qpel8_mc11_msa; +- c->avg_h264_qpel_pixels_tab[1][6] = ff_avg_h264_qpel8_mc21_msa; +- c->avg_h264_qpel_pixels_tab[1][7] = ff_avg_h264_qpel8_mc31_msa; +- c->avg_h264_qpel_pixels_tab[1][8] = ff_avg_h264_qpel8_mc02_msa; +- c->avg_h264_qpel_pixels_tab[1][9] = ff_avg_h264_qpel8_mc12_msa; +- c->avg_h264_qpel_pixels_tab[1][10] = ff_avg_h264_qpel8_mc22_msa; +- c->avg_h264_qpel_pixels_tab[1][11] = ff_avg_h264_qpel8_mc32_msa; +- c->avg_h264_qpel_pixels_tab[1][12] = ff_avg_h264_qpel8_mc03_msa; +- c->avg_h264_qpel_pixels_tab[1][13] = ff_avg_h264_qpel8_mc13_msa; +- c->avg_h264_qpel_pixels_tab[1][14] = ff_avg_h264_qpel8_mc23_msa; +- c->avg_h264_qpel_pixels_tab[1][15] = ff_avg_h264_qpel8_mc33_msa; ++ c->avg_h264_qpel_pixels_tab[1][0] = ff_avg_h264_qpel8_mc00_mmi; ++ c->avg_h264_qpel_pixels_tab[1][1] = ff_avg_h264_qpel8_mc10_mmi; ++ c->avg_h264_qpel_pixels_tab[1][2] = ff_avg_h264_qpel8_mc20_mmi; ++ c->avg_h264_qpel_pixels_tab[1][3] = ff_avg_h264_qpel8_mc30_mmi; ++ c->avg_h264_qpel_pixels_tab[1][4] = ff_avg_h264_qpel8_mc01_mmi; ++ c->avg_h264_qpel_pixels_tab[1][5] = ff_avg_h264_qpel8_mc11_mmi; ++ c->avg_h264_qpel_pixels_tab[1][6] = ff_avg_h264_qpel8_mc21_mmi; ++ c->avg_h264_qpel_pixels_tab[1][7] = ff_avg_h264_qpel8_mc31_mmi; ++ c->avg_h264_qpel_pixels_tab[1][8] = ff_avg_h264_qpel8_mc02_mmi; ++ c->avg_h264_qpel_pixels_tab[1][9] = ff_avg_h264_qpel8_mc12_mmi; ++ c->avg_h264_qpel_pixels_tab[1][10] = ff_avg_h264_qpel8_mc22_mmi; ++ c->avg_h264_qpel_pixels_tab[1][11] = ff_avg_h264_qpel8_mc32_mmi; ++ c->avg_h264_qpel_pixels_tab[1][12] = ff_avg_h264_qpel8_mc03_mmi; ++ c->avg_h264_qpel_pixels_tab[1][13] = ff_avg_h264_qpel8_mc13_mmi; ++ c->avg_h264_qpel_pixels_tab[1][14] = ff_avg_h264_qpel8_mc23_mmi; ++ c->avg_h264_qpel_pixels_tab[1][15] = ff_avg_h264_qpel8_mc33_mmi; + +- c->avg_h264_qpel_pixels_tab[2][0] = ff_avg_h264_qpel4_mc00_msa; +- c->avg_h264_qpel_pixels_tab[2][1] = ff_avg_h264_qpel4_mc10_msa; +- c->avg_h264_qpel_pixels_tab[2][2] = ff_avg_h264_qpel4_mc20_msa; +- c->avg_h264_qpel_pixels_tab[2][3] = ff_avg_h264_qpel4_mc30_msa; +- c->avg_h264_qpel_pixels_tab[2][4] = ff_avg_h264_qpel4_mc01_msa; +- c->avg_h264_qpel_pixels_tab[2][5] = ff_avg_h264_qpel4_mc11_msa; +- c->avg_h264_qpel_pixels_tab[2][6] = ff_avg_h264_qpel4_mc21_msa; +- c->avg_h264_qpel_pixels_tab[2][7] = ff_avg_h264_qpel4_mc31_msa; +- c->avg_h264_qpel_pixels_tab[2][8] = ff_avg_h264_qpel4_mc02_msa; +- c->avg_h264_qpel_pixels_tab[2][9] = ff_avg_h264_qpel4_mc12_msa; +- c->avg_h264_qpel_pixels_tab[2][10] = ff_avg_h264_qpel4_mc22_msa; +- c->avg_h264_qpel_pixels_tab[2][11] = ff_avg_h264_qpel4_mc32_msa; +- c->avg_h264_qpel_pixels_tab[2][12] = ff_avg_h264_qpel4_mc03_msa; +- c->avg_h264_qpel_pixels_tab[2][13] = ff_avg_h264_qpel4_mc13_msa; +- c->avg_h264_qpel_pixels_tab[2][14] = ff_avg_h264_qpel4_mc23_msa; +- c->avg_h264_qpel_pixels_tab[2][15] = ff_avg_h264_qpel4_mc33_msa; ++ c->avg_h264_qpel_pixels_tab[2][0] = ff_avg_h264_qpel4_mc00_mmi; ++ c->avg_h264_qpel_pixels_tab[2][1] = ff_avg_h264_qpel4_mc10_mmi; ++ c->avg_h264_qpel_pixels_tab[2][2] = ff_avg_h264_qpel4_mc20_mmi; ++ c->avg_h264_qpel_pixels_tab[2][3] = ff_avg_h264_qpel4_mc30_mmi; ++ c->avg_h264_qpel_pixels_tab[2][4] = ff_avg_h264_qpel4_mc01_mmi; ++ c->avg_h264_qpel_pixels_tab[2][5] = ff_avg_h264_qpel4_mc11_mmi; ++ c->avg_h264_qpel_pixels_tab[2][6] = ff_avg_h264_qpel4_mc21_mmi; ++ c->avg_h264_qpel_pixels_tab[2][7] = ff_avg_h264_qpel4_mc31_mmi; ++ c->avg_h264_qpel_pixels_tab[2][8] = ff_avg_h264_qpel4_mc02_mmi; ++ c->avg_h264_qpel_pixels_tab[2][9] = ff_avg_h264_qpel4_mc12_mmi; ++ c->avg_h264_qpel_pixels_tab[2][10] = ff_avg_h264_qpel4_mc22_mmi; ++ c->avg_h264_qpel_pixels_tab[2][11] = ff_avg_h264_qpel4_mc32_mmi; ++ c->avg_h264_qpel_pixels_tab[2][12] = ff_avg_h264_qpel4_mc03_mmi; ++ c->avg_h264_qpel_pixels_tab[2][13] = ff_avg_h264_qpel4_mc13_mmi; ++ c->avg_h264_qpel_pixels_tab[2][14] = ff_avg_h264_qpel4_mc23_mmi; ++ c->avg_h264_qpel_pixels_tab[2][15] = ff_avg_h264_qpel4_mc33_mmi; ++ } + } +-} +-#endif // #if HAVE_MSA + +-#if HAVE_MMI +-static av_cold void h264qpel_init_mmi(H264QpelContext *c, int bit_depth) +-{ +- if (8 == bit_depth) { +- c->put_h264_qpel_pixels_tab[0][0] = ff_put_h264_qpel16_mc00_mmi; +- c->put_h264_qpel_pixels_tab[0][1] = ff_put_h264_qpel16_mc10_mmi; +- c->put_h264_qpel_pixels_tab[0][2] = ff_put_h264_qpel16_mc20_mmi; +- c->put_h264_qpel_pixels_tab[0][3] = ff_put_h264_qpel16_mc30_mmi; +- c->put_h264_qpel_pixels_tab[0][4] = ff_put_h264_qpel16_mc01_mmi; +- c->put_h264_qpel_pixels_tab[0][5] = ff_put_h264_qpel16_mc11_mmi; +- c->put_h264_qpel_pixels_tab[0][6] = ff_put_h264_qpel16_mc21_mmi; +- c->put_h264_qpel_pixels_tab[0][7] = ff_put_h264_qpel16_mc31_mmi; +- c->put_h264_qpel_pixels_tab[0][8] = ff_put_h264_qpel16_mc02_mmi; +- c->put_h264_qpel_pixels_tab[0][9] = ff_put_h264_qpel16_mc12_mmi; +- c->put_h264_qpel_pixels_tab[0][10] = ff_put_h264_qpel16_mc22_mmi; +- c->put_h264_qpel_pixels_tab[0][11] = ff_put_h264_qpel16_mc32_mmi; +- c->put_h264_qpel_pixels_tab[0][12] = ff_put_h264_qpel16_mc03_mmi; +- c->put_h264_qpel_pixels_tab[0][13] = ff_put_h264_qpel16_mc13_mmi; +- c->put_h264_qpel_pixels_tab[0][14] = ff_put_h264_qpel16_mc23_mmi; +- c->put_h264_qpel_pixels_tab[0][15] = ff_put_h264_qpel16_mc33_mmi; ++ if (have_msa(cpu_flags)) { ++ if (bit_depth == 8) { ++ c->put_h264_qpel_pixels_tab[0][0] = ff_put_h264_qpel16_mc00_msa; ++ c->put_h264_qpel_pixels_tab[0][1] = ff_put_h264_qpel16_mc10_msa; ++ c->put_h264_qpel_pixels_tab[0][2] = ff_put_h264_qpel16_mc20_msa; ++ c->put_h264_qpel_pixels_tab[0][3] = ff_put_h264_qpel16_mc30_msa; ++ c->put_h264_qpel_pixels_tab[0][4] = ff_put_h264_qpel16_mc01_msa; ++ c->put_h264_qpel_pixels_tab[0][5] = ff_put_h264_qpel16_mc11_msa; ++ c->put_h264_qpel_pixels_tab[0][6] = ff_put_h264_qpel16_mc21_msa; ++ c->put_h264_qpel_pixels_tab[0][7] = ff_put_h264_qpel16_mc31_msa; ++ c->put_h264_qpel_pixels_tab[0][8] = ff_put_h264_qpel16_mc02_msa; ++ c->put_h264_qpel_pixels_tab[0][9] = ff_put_h264_qpel16_mc12_msa; ++ c->put_h264_qpel_pixels_tab[0][10] = ff_put_h264_qpel16_mc22_msa; ++ c->put_h264_qpel_pixels_tab[0][11] = ff_put_h264_qpel16_mc32_msa; ++ c->put_h264_qpel_pixels_tab[0][12] = ff_put_h264_qpel16_mc03_msa; ++ c->put_h264_qpel_pixels_tab[0][13] = ff_put_h264_qpel16_mc13_msa; ++ c->put_h264_qpel_pixels_tab[0][14] = ff_put_h264_qpel16_mc23_msa; ++ c->put_h264_qpel_pixels_tab[0][15] = ff_put_h264_qpel16_mc33_msa; + +- c->put_h264_qpel_pixels_tab[1][0] = ff_put_h264_qpel8_mc00_mmi; +- c->put_h264_qpel_pixels_tab[1][1] = ff_put_h264_qpel8_mc10_mmi; +- c->put_h264_qpel_pixels_tab[1][2] = ff_put_h264_qpel8_mc20_mmi; +- c->put_h264_qpel_pixels_tab[1][3] = ff_put_h264_qpel8_mc30_mmi; +- c->put_h264_qpel_pixels_tab[1][4] = ff_put_h264_qpel8_mc01_mmi; +- c->put_h264_qpel_pixels_tab[1][5] = ff_put_h264_qpel8_mc11_mmi; +- c->put_h264_qpel_pixels_tab[1][6] = ff_put_h264_qpel8_mc21_mmi; +- c->put_h264_qpel_pixels_tab[1][7] = ff_put_h264_qpel8_mc31_mmi; +- c->put_h264_qpel_pixels_tab[1][8] = ff_put_h264_qpel8_mc02_mmi; +- c->put_h264_qpel_pixels_tab[1][9] = ff_put_h264_qpel8_mc12_mmi; +- c->put_h264_qpel_pixels_tab[1][10] = ff_put_h264_qpel8_mc22_mmi; +- c->put_h264_qpel_pixels_tab[1][11] = ff_put_h264_qpel8_mc32_mmi; +- c->put_h264_qpel_pixels_tab[1][12] = ff_put_h264_qpel8_mc03_mmi; +- c->put_h264_qpel_pixels_tab[1][13] = ff_put_h264_qpel8_mc13_mmi; +- c->put_h264_qpel_pixels_tab[1][14] = ff_put_h264_qpel8_mc23_mmi; +- c->put_h264_qpel_pixels_tab[1][15] = ff_put_h264_qpel8_mc33_mmi; ++ c->put_h264_qpel_pixels_tab[1][0] = ff_put_h264_qpel8_mc00_msa; ++ c->put_h264_qpel_pixels_tab[1][1] = ff_put_h264_qpel8_mc10_msa; ++ c->put_h264_qpel_pixels_tab[1][2] = ff_put_h264_qpel8_mc20_msa; ++ c->put_h264_qpel_pixels_tab[1][3] = ff_put_h264_qpel8_mc30_msa; ++ c->put_h264_qpel_pixels_tab[1][4] = ff_put_h264_qpel8_mc01_msa; ++ c->put_h264_qpel_pixels_tab[1][5] = ff_put_h264_qpel8_mc11_msa; ++ c->put_h264_qpel_pixels_tab[1][6] = ff_put_h264_qpel8_mc21_msa; ++ c->put_h264_qpel_pixels_tab[1][7] = ff_put_h264_qpel8_mc31_msa; ++ c->put_h264_qpel_pixels_tab[1][8] = ff_put_h264_qpel8_mc02_msa; ++ c->put_h264_qpel_pixels_tab[1][9] = ff_put_h264_qpel8_mc12_msa; ++ c->put_h264_qpel_pixels_tab[1][10] = ff_put_h264_qpel8_mc22_msa; ++ c->put_h264_qpel_pixels_tab[1][11] = ff_put_h264_qpel8_mc32_msa; ++ c->put_h264_qpel_pixels_tab[1][12] = ff_put_h264_qpel8_mc03_msa; ++ c->put_h264_qpel_pixels_tab[1][13] = ff_put_h264_qpel8_mc13_msa; ++ c->put_h264_qpel_pixels_tab[1][14] = ff_put_h264_qpel8_mc23_msa; ++ c->put_h264_qpel_pixels_tab[1][15] = ff_put_h264_qpel8_mc33_msa; + +- c->put_h264_qpel_pixels_tab[2][0] = ff_put_h264_qpel4_mc00_mmi; +- c->put_h264_qpel_pixels_tab[2][1] = ff_put_h264_qpel4_mc10_mmi; +- c->put_h264_qpel_pixels_tab[2][2] = ff_put_h264_qpel4_mc20_mmi; +- c->put_h264_qpel_pixels_tab[2][3] = ff_put_h264_qpel4_mc30_mmi; +- c->put_h264_qpel_pixels_tab[2][4] = ff_put_h264_qpel4_mc01_mmi; +- c->put_h264_qpel_pixels_tab[2][5] = ff_put_h264_qpel4_mc11_mmi; +- c->put_h264_qpel_pixels_tab[2][6] = ff_put_h264_qpel4_mc21_mmi; +- c->put_h264_qpel_pixels_tab[2][7] = ff_put_h264_qpel4_mc31_mmi; +- c->put_h264_qpel_pixels_tab[2][8] = ff_put_h264_qpel4_mc02_mmi; +- c->put_h264_qpel_pixels_tab[2][9] = ff_put_h264_qpel4_mc12_mmi; +- c->put_h264_qpel_pixels_tab[2][10] = ff_put_h264_qpel4_mc22_mmi; +- c->put_h264_qpel_pixels_tab[2][11] = ff_put_h264_qpel4_mc32_mmi; +- c->put_h264_qpel_pixels_tab[2][12] = ff_put_h264_qpel4_mc03_mmi; +- c->put_h264_qpel_pixels_tab[2][13] = ff_put_h264_qpel4_mc13_mmi; +- c->put_h264_qpel_pixels_tab[2][14] = ff_put_h264_qpel4_mc23_mmi; +- c->put_h264_qpel_pixels_tab[2][15] = ff_put_h264_qpel4_mc33_mmi; ++ c->put_h264_qpel_pixels_tab[2][1] = ff_put_h264_qpel4_mc10_msa; ++ c->put_h264_qpel_pixels_tab[2][2] = ff_put_h264_qpel4_mc20_msa; ++ c->put_h264_qpel_pixels_tab[2][3] = ff_put_h264_qpel4_mc30_msa; ++ c->put_h264_qpel_pixels_tab[2][4] = ff_put_h264_qpel4_mc01_msa; ++ c->put_h264_qpel_pixels_tab[2][5] = ff_put_h264_qpel4_mc11_msa; ++ c->put_h264_qpel_pixels_tab[2][6] = ff_put_h264_qpel4_mc21_msa; ++ c->put_h264_qpel_pixels_tab[2][7] = ff_put_h264_qpel4_mc31_msa; ++ c->put_h264_qpel_pixels_tab[2][8] = ff_put_h264_qpel4_mc02_msa; ++ c->put_h264_qpel_pixels_tab[2][9] = ff_put_h264_qpel4_mc12_msa; ++ c->put_h264_qpel_pixels_tab[2][10] = ff_put_h264_qpel4_mc22_msa; ++ c->put_h264_qpel_pixels_tab[2][11] = ff_put_h264_qpel4_mc32_msa; ++ c->put_h264_qpel_pixels_tab[2][12] = ff_put_h264_qpel4_mc03_msa; ++ c->put_h264_qpel_pixels_tab[2][13] = ff_put_h264_qpel4_mc13_msa; ++ c->put_h264_qpel_pixels_tab[2][14] = ff_put_h264_qpel4_mc23_msa; ++ c->put_h264_qpel_pixels_tab[2][15] = ff_put_h264_qpel4_mc33_msa; + +- c->avg_h264_qpel_pixels_tab[0][0] = ff_avg_h264_qpel16_mc00_mmi; +- c->avg_h264_qpel_pixels_tab[0][1] = ff_avg_h264_qpel16_mc10_mmi; +- c->avg_h264_qpel_pixels_tab[0][2] = ff_avg_h264_qpel16_mc20_mmi; +- c->avg_h264_qpel_pixels_tab[0][3] = ff_avg_h264_qpel16_mc30_mmi; +- c->avg_h264_qpel_pixels_tab[0][4] = ff_avg_h264_qpel16_mc01_mmi; +- c->avg_h264_qpel_pixels_tab[0][5] = ff_avg_h264_qpel16_mc11_mmi; +- c->avg_h264_qpel_pixels_tab[0][6] = ff_avg_h264_qpel16_mc21_mmi; +- c->avg_h264_qpel_pixels_tab[0][7] = ff_avg_h264_qpel16_mc31_mmi; +- c->avg_h264_qpel_pixels_tab[0][8] = ff_avg_h264_qpel16_mc02_mmi; +- c->avg_h264_qpel_pixels_tab[0][9] = ff_avg_h264_qpel16_mc12_mmi; +- c->avg_h264_qpel_pixels_tab[0][10] = ff_avg_h264_qpel16_mc22_mmi; +- c->avg_h264_qpel_pixels_tab[0][11] = ff_avg_h264_qpel16_mc32_mmi; +- c->avg_h264_qpel_pixels_tab[0][12] = ff_avg_h264_qpel16_mc03_mmi; +- c->avg_h264_qpel_pixels_tab[0][13] = ff_avg_h264_qpel16_mc13_mmi; +- c->avg_h264_qpel_pixels_tab[0][14] = ff_avg_h264_qpel16_mc23_mmi; +- c->avg_h264_qpel_pixels_tab[0][15] = ff_avg_h264_qpel16_mc33_mmi; ++ c->avg_h264_qpel_pixels_tab[0][0] = ff_avg_h264_qpel16_mc00_msa; ++ c->avg_h264_qpel_pixels_tab[0][1] = ff_avg_h264_qpel16_mc10_msa; ++ c->avg_h264_qpel_pixels_tab[0][2] = ff_avg_h264_qpel16_mc20_msa; ++ c->avg_h264_qpel_pixels_tab[0][3] = ff_avg_h264_qpel16_mc30_msa; ++ c->avg_h264_qpel_pixels_tab[0][4] = ff_avg_h264_qpel16_mc01_msa; ++ c->avg_h264_qpel_pixels_tab[0][5] = ff_avg_h264_qpel16_mc11_msa; ++ c->avg_h264_qpel_pixels_tab[0][6] = ff_avg_h264_qpel16_mc21_msa; ++ c->avg_h264_qpel_pixels_tab[0][7] = ff_avg_h264_qpel16_mc31_msa; ++ c->avg_h264_qpel_pixels_tab[0][8] = ff_avg_h264_qpel16_mc02_msa; ++ c->avg_h264_qpel_pixels_tab[0][9] = ff_avg_h264_qpel16_mc12_msa; ++ c->avg_h264_qpel_pixels_tab[0][10] = ff_avg_h264_qpel16_mc22_msa; ++ c->avg_h264_qpel_pixels_tab[0][11] = ff_avg_h264_qpel16_mc32_msa; ++ c->avg_h264_qpel_pixels_tab[0][12] = ff_avg_h264_qpel16_mc03_msa; ++ c->avg_h264_qpel_pixels_tab[0][13] = ff_avg_h264_qpel16_mc13_msa; ++ c->avg_h264_qpel_pixels_tab[0][14] = ff_avg_h264_qpel16_mc23_msa; ++ c->avg_h264_qpel_pixels_tab[0][15] = ff_avg_h264_qpel16_mc33_msa; + +- c->avg_h264_qpel_pixels_tab[1][0] = ff_avg_h264_qpel8_mc00_mmi; +- c->avg_h264_qpel_pixels_tab[1][1] = ff_avg_h264_qpel8_mc10_mmi; +- c->avg_h264_qpel_pixels_tab[1][2] = ff_avg_h264_qpel8_mc20_mmi; +- c->avg_h264_qpel_pixels_tab[1][3] = ff_avg_h264_qpel8_mc30_mmi; +- c->avg_h264_qpel_pixels_tab[1][4] = ff_avg_h264_qpel8_mc01_mmi; +- c->avg_h264_qpel_pixels_tab[1][5] = ff_avg_h264_qpel8_mc11_mmi; +- c->avg_h264_qpel_pixels_tab[1][6] = ff_avg_h264_qpel8_mc21_mmi; +- c->avg_h264_qpel_pixels_tab[1][7] = ff_avg_h264_qpel8_mc31_mmi; +- c->avg_h264_qpel_pixels_tab[1][8] = ff_avg_h264_qpel8_mc02_mmi; +- c->avg_h264_qpel_pixels_tab[1][9] = ff_avg_h264_qpel8_mc12_mmi; +- c->avg_h264_qpel_pixels_tab[1][10] = ff_avg_h264_qpel8_mc22_mmi; +- c->avg_h264_qpel_pixels_tab[1][11] = ff_avg_h264_qpel8_mc32_mmi; +- c->avg_h264_qpel_pixels_tab[1][12] = ff_avg_h264_qpel8_mc03_mmi; +- c->avg_h264_qpel_pixels_tab[1][13] = ff_avg_h264_qpel8_mc13_mmi; +- c->avg_h264_qpel_pixels_tab[1][14] = ff_avg_h264_qpel8_mc23_mmi; +- c->avg_h264_qpel_pixels_tab[1][15] = ff_avg_h264_qpel8_mc33_mmi; ++ c->avg_h264_qpel_pixels_tab[1][0] = ff_avg_h264_qpel8_mc00_msa; ++ c->avg_h264_qpel_pixels_tab[1][1] = ff_avg_h264_qpel8_mc10_msa; ++ c->avg_h264_qpel_pixels_tab[1][2] = ff_avg_h264_qpel8_mc20_msa; ++ c->avg_h264_qpel_pixels_tab[1][3] = ff_avg_h264_qpel8_mc30_msa; ++ c->avg_h264_qpel_pixels_tab[1][4] = ff_avg_h264_qpel8_mc01_msa; ++ c->avg_h264_qpel_pixels_tab[1][5] = ff_avg_h264_qpel8_mc11_msa; ++ c->avg_h264_qpel_pixels_tab[1][6] = ff_avg_h264_qpel8_mc21_msa; ++ c->avg_h264_qpel_pixels_tab[1][7] = ff_avg_h264_qpel8_mc31_msa; ++ c->avg_h264_qpel_pixels_tab[1][8] = ff_avg_h264_qpel8_mc02_msa; ++ c->avg_h264_qpel_pixels_tab[1][9] = ff_avg_h264_qpel8_mc12_msa; ++ c->avg_h264_qpel_pixels_tab[1][10] = ff_avg_h264_qpel8_mc22_msa; ++ c->avg_h264_qpel_pixels_tab[1][11] = ff_avg_h264_qpel8_mc32_msa; ++ c->avg_h264_qpel_pixels_tab[1][12] = ff_avg_h264_qpel8_mc03_msa; ++ c->avg_h264_qpel_pixels_tab[1][13] = ff_avg_h264_qpel8_mc13_msa; ++ c->avg_h264_qpel_pixels_tab[1][14] = ff_avg_h264_qpel8_mc23_msa; ++ c->avg_h264_qpel_pixels_tab[1][15] = ff_avg_h264_qpel8_mc33_msa; + +- c->avg_h264_qpel_pixels_tab[2][0] = ff_avg_h264_qpel4_mc00_mmi; +- c->avg_h264_qpel_pixels_tab[2][1] = ff_avg_h264_qpel4_mc10_mmi; +- c->avg_h264_qpel_pixels_tab[2][2] = ff_avg_h264_qpel4_mc20_mmi; +- c->avg_h264_qpel_pixels_tab[2][3] = ff_avg_h264_qpel4_mc30_mmi; +- c->avg_h264_qpel_pixels_tab[2][4] = ff_avg_h264_qpel4_mc01_mmi; +- c->avg_h264_qpel_pixels_tab[2][5] = ff_avg_h264_qpel4_mc11_mmi; +- c->avg_h264_qpel_pixels_tab[2][6] = ff_avg_h264_qpel4_mc21_mmi; +- c->avg_h264_qpel_pixels_tab[2][7] = ff_avg_h264_qpel4_mc31_mmi; +- c->avg_h264_qpel_pixels_tab[2][8] = ff_avg_h264_qpel4_mc02_mmi; +- c->avg_h264_qpel_pixels_tab[2][9] = ff_avg_h264_qpel4_mc12_mmi; +- c->avg_h264_qpel_pixels_tab[2][10] = ff_avg_h264_qpel4_mc22_mmi; +- c->avg_h264_qpel_pixels_tab[2][11] = ff_avg_h264_qpel4_mc32_mmi; +- c->avg_h264_qpel_pixels_tab[2][12] = ff_avg_h264_qpel4_mc03_mmi; +- c->avg_h264_qpel_pixels_tab[2][13] = ff_avg_h264_qpel4_mc13_mmi; +- c->avg_h264_qpel_pixels_tab[2][14] = ff_avg_h264_qpel4_mc23_mmi; +- c->avg_h264_qpel_pixels_tab[2][15] = ff_avg_h264_qpel4_mc33_mmi; ++ c->avg_h264_qpel_pixels_tab[2][0] = ff_avg_h264_qpel4_mc00_msa; ++ c->avg_h264_qpel_pixels_tab[2][1] = ff_avg_h264_qpel4_mc10_msa; ++ c->avg_h264_qpel_pixels_tab[2][2] = ff_avg_h264_qpel4_mc20_msa; ++ c->avg_h264_qpel_pixels_tab[2][3] = ff_avg_h264_qpel4_mc30_msa; ++ c->avg_h264_qpel_pixels_tab[2][4] = ff_avg_h264_qpel4_mc01_msa; ++ c->avg_h264_qpel_pixels_tab[2][5] = ff_avg_h264_qpel4_mc11_msa; ++ c->avg_h264_qpel_pixels_tab[2][6] = ff_avg_h264_qpel4_mc21_msa; ++ c->avg_h264_qpel_pixels_tab[2][7] = ff_avg_h264_qpel4_mc31_msa; ++ c->avg_h264_qpel_pixels_tab[2][8] = ff_avg_h264_qpel4_mc02_msa; ++ c->avg_h264_qpel_pixels_tab[2][9] = ff_avg_h264_qpel4_mc12_msa; ++ c->avg_h264_qpel_pixels_tab[2][10] = ff_avg_h264_qpel4_mc22_msa; ++ c->avg_h264_qpel_pixels_tab[2][11] = ff_avg_h264_qpel4_mc32_msa; ++ c->avg_h264_qpel_pixels_tab[2][12] = ff_avg_h264_qpel4_mc03_msa; ++ c->avg_h264_qpel_pixels_tab[2][13] = ff_avg_h264_qpel4_mc13_msa; ++ c->avg_h264_qpel_pixels_tab[2][14] = ff_avg_h264_qpel4_mc23_msa; ++ c->avg_h264_qpel_pixels_tab[2][15] = ff_avg_h264_qpel4_mc33_msa; ++ } + } + } +-#endif /* HAVE_MMI */ +- +-av_cold void ff_h264qpel_init_mips(H264QpelContext *c, int bit_depth) +-{ +-#if HAVE_MSA +- h264qpel_init_msa(c, bit_depth); +-#endif // #if HAVE_MSA +-#if HAVE_MMI +- h264qpel_init_mmi(c, bit_depth); +-#endif /* HAVE_MMI */ +-} +diff --git a/libavcodec/mips/h264qpel_msa.c b/libavcodec/mips/h264qpel_msa.c +index 9c779bd..e435c18 100644 +--- a/libavcodec/mips/h264qpel_msa.c ++++ b/libavcodec/mips/h264qpel_msa.c +@@ -149,7 +149,7 @@ static void avc_luma_hv_qrt_4x4_msa(const uint8_t *src_x, const uint8_t *src_y, + + SAT_SH2_SH(out0, out1, 7); + out = PCKEV_XORI128_UB(out0, out1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, stride); ++ ST_W4(out, 0, 1, 2, 3, dst, stride); + } + + static void avc_luma_hv_qrt_8x8_msa(const uint8_t *src_x, const uint8_t *src_y, +@@ -220,7 +220,7 @@ static void avc_luma_hv_qrt_8x8_msa(const uint8_t *src_x, const uint8_t *src_y, + SAT_SH4_SH(tmp0, tmp1, tmp2, tmp3, 7); + out0 = PCKEV_XORI128_UB(tmp0, tmp1); + out1 = PCKEV_XORI128_UB(tmp2, tmp3); +- ST8x4_UB(out0, out1, dst, stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, stride); + dst += (4 * stride); + + LD_SB4(src_y, stride, src_vt9, src_vt10, src_vt11, src_vt12); +@@ -256,8 +256,7 @@ static void avc_luma_hv_qrt_8x8_msa(const uint8_t *src_x, const uint8_t *src_y, + SAT_SH4_SH(tmp0, tmp1, tmp2, tmp3, 7); + out0 = PCKEV_XORI128_UB(tmp0, tmp1); + out1 = PCKEV_XORI128_UB(tmp2, tmp3); +- ST8x4_UB(out0, out1, dst, stride); +- dst += (4 * stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, stride); + } + + static void avc_luma_hv_qrt_16x16_msa(const uint8_t *src_x, +@@ -337,7 +336,7 @@ static void avc_luma_hv_qrt_16x16_msa(const uint8_t *src_x, + SAT_SH4_SH(out0, out1, out2, out3, 7); + tmp0 = PCKEV_XORI128_UB(out0, out1); + tmp1 = PCKEV_XORI128_UB(out2, out3); +- ST8x4_UB(tmp0, tmp1, dst, stride); ++ ST_D4(tmp0, tmp1, 0, 1, 0, 1, dst, stride); + dst += (4 * stride); + + src_vt0 = src_vt4; +@@ -419,7 +418,7 @@ static void avc_luma_hv_qrt_and_aver_dst_4x4_msa(const uint8_t *src_x, + res = PCKEV_XORI128_UB(res0, res1); + dst0 = __msa_aver_u_b(res, dst0); + +- ST4x4_UB(dst0, dst0, 0, 1, 2, 3, dst, stride); ++ ST_W4(dst0, 0, 1, 2, 3, dst, stride); + } + + static void avc_luma_hv_qrt_and_aver_dst_8x8_msa(const uint8_t *src_x, +@@ -498,7 +497,7 @@ static void avc_luma_hv_qrt_and_aver_dst_8x8_msa(const uint8_t *src_x, + out0 = PCKEV_XORI128_UB(tmp0, tmp1); + out1 = PCKEV_XORI128_UB(tmp2, tmp3); + AVER_UB2_UB(out0, dst0, out1, dst1, dst0, dst1); +- ST8x4_UB(dst0, dst1, dst, stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, stride); + dst += (4 * stride); + + LD_SB4(src_y, stride, src_vt9, src_vt10, src_vt11, src_vt12); +@@ -539,8 +538,7 @@ static void avc_luma_hv_qrt_and_aver_dst_8x8_msa(const uint8_t *src_x, + out0 = PCKEV_XORI128_UB(tmp0, tmp1); + out1 = PCKEV_XORI128_UB(tmp2, tmp3); + AVER_UB2_UB(out0, dst0, out1, dst1, dst0, dst1); +- ST8x4_UB(dst0, dst1, dst, stride); +- dst += (4 * stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, stride); + } + + static void avc_luma_hv_qrt_and_aver_dst_16x16_msa(const uint8_t *src_x, +@@ -627,7 +625,7 @@ static void avc_luma_hv_qrt_and_aver_dst_16x16_msa(const uint8_t *src_x, + tmp0 = PCKEV_XORI128_UB(out0, out1); + tmp1 = PCKEV_XORI128_UB(out2, out3); + AVER_UB2_UB(tmp0, dst0, tmp1, dst1, dst0, dst1); +- ST8x4_UB(dst0, dst1, dst, stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, stride); + dst += (4 * stride); + + src_vt0 = src_vt4; +@@ -723,7 +721,7 @@ void ff_avg_h264_qpel8_mc00_msa(uint8_t *dst, const uint8_t *src, + AVER_UB4_UB(src0, dst0, src1, dst1, src2, dst2, src3, dst3, dst0, dst1, + dst2, dst3); + +- ST8x8_UB(dst0, dst1, dst2, dst3, dst, stride); ++ ST_D8(dst0, dst1, dst2, dst3, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); + } + + void ff_avg_h264_qpel4_mc00_msa(uint8_t *dst, const uint8_t *src, +@@ -739,7 +737,7 @@ void ff_avg_h264_qpel4_mc00_msa(uint8_t *dst, const uint8_t *src, + + dst0 = __msa_aver_u_b(src0, dst0); + +- ST4x4_UB(dst0, dst0, 0, 1, 2, 3, dst, stride); ++ ST_W4(dst0, 0, 1, 2, 3, dst, stride); + } + + void ff_put_h264_qpel16_mc10_msa(uint8_t *dst, const uint8_t *src, +@@ -792,8 +790,8 @@ void ff_put_h264_qpel16_mc10_msa(uint8_t *dst, const uint8_t *src, + minus5b, res4, res5, res6, res7); + DPADD_SB4_SH(vec2, vec5, vec8, vec11, plus20b, plus20b, plus20b, + plus20b, res4, res5, res6, res7); +- SLDI_B2_SB(src1, src3, src0, src2, src0, src2, 2); +- SLDI_B2_SB(src5, src7, src4, src6, src4, src6, 2); ++ SLDI_B4_SB(src1, src0, src3, src2, src5, src4, src7, src6, 2, ++ src0, src2, src4, src6); + SRARI_H4_SH(res0, res1, res2, res3, 5); + SRARI_H4_SH(res4, res5, res6, res7, 5); + SAT_SH4_SH(res0, res1, res2, res3, 7); +@@ -860,8 +858,8 @@ void ff_put_h264_qpel16_mc30_msa(uint8_t *dst, const uint8_t *src, + minus5b, res4, res5, res6, res7); + DPADD_SB4_SH(vec2, vec5, vec8, vec11, plus20b, plus20b, plus20b, + plus20b, res4, res5, res6, res7); +- SLDI_B2_SB(src1, src3, src0, src2, src0, src2, 3); +- SLDI_B2_SB(src5, src7, src4, src6, src4, src6, 3); ++ SLDI_B4_SB(src1, src0, src3, src2, src5, src4, src7, src6, 3, ++ src0, src2, src4, src6); + SRARI_H4_SH(res0, res1, res2, res3, 5); + SRARI_H4_SH(res4, res5, res6, res7, 5); + SAT_SH4_SH(res0, res1, res2, res3, 7); +@@ -913,10 +911,10 @@ void ff_put_h264_qpel8_mc10_msa(uint8_t *dst, const uint8_t *src, + VSHF_B2_SB(src6, src6, src7, src7, mask2, mask2, vec10, vec11); + DPADD_SB4_SH(vec8, vec9, vec10, vec11, plus20b, plus20b, plus20b, plus20b, + res4, res5, res6, res7); +- SLDI_B2_SB(src0, src1, src0, src1, src0, src1, 2); +- SLDI_B2_SB(src2, src3, src2, src3, src2, src3, 2); +- SLDI_B2_SB(src4, src5, src4, src5, src4, src5, 2); +- SLDI_B2_SB(src6, src7, src6, src7, src6, src7, 2); ++ SLDI_B4_SB(src0, src0, src1, src1, src2, src2, src3, src3, 2, ++ src0, src1, src2, src3); ++ SLDI_B4_SB(src4, src4, src5, src5, src6, src6, src7, src7, 2, ++ src4, src5, src6, src7); + PCKEV_D2_SB(src1, src0, src3, src2, src0, src1); + PCKEV_D2_SB(src5, src4, src7, src6, src4, src5); + SRARI_H4_SH(res0, res1, res2, res3, 5); +@@ -930,7 +928,7 @@ void ff_put_h264_qpel8_mc10_msa(uint8_t *dst, const uint8_t *src, + tmp2 = __msa_aver_s_b(tmp2, src4); + tmp3 = __msa_aver_s_b(tmp3, src5); + XORI_B4_128_SB(tmp0, tmp1, tmp2, tmp3); +- ST8x8_UB(tmp0, tmp1, tmp2, tmp3, dst, stride); ++ ST_D8(tmp0, tmp1, tmp2, tmp3, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); + } + + void ff_put_h264_qpel8_mc30_msa(uint8_t *dst, const uint8_t *src, +@@ -968,10 +966,10 @@ void ff_put_h264_qpel8_mc30_msa(uint8_t *dst, const uint8_t *src, + VSHF_B2_SB(src6, src6, src7, src7, mask2, mask2, vec10, vec11); + DPADD_SB4_SH(vec8, vec9, vec10, vec11, plus20b, plus20b, plus20b, plus20b, + res4, res5, res6, res7); +- SLDI_B2_SB(src0, src1, src0, src1, src0, src1, 3); +- SLDI_B2_SB(src2, src3, src2, src3, src2, src3, 3); +- SLDI_B2_SB(src4, src5, src4, src5, src4, src5, 3); +- SLDI_B2_SB(src6, src7, src6, src7, src6, src7, 3); ++ SLDI_B4_SB(src0, src0, src1, src1, src2, src2, src3, src3, 3, ++ src0, src1, src2, src3); ++ SLDI_B4_SB(src4, src4, src5, src5, src6, src6, src7, src7, 3, ++ src4, src5, src6, src7); + PCKEV_D2_SB(src1, src0, src3, src2, src0, src1); + PCKEV_D2_SB(src5, src4, src7, src6, src4, src5); + SRARI_H4_SH(res0, res1, res2, res3, 5); +@@ -985,7 +983,7 @@ void ff_put_h264_qpel8_mc30_msa(uint8_t *dst, const uint8_t *src, + tmp2 = __msa_aver_s_b(tmp2, src4); + tmp3 = __msa_aver_s_b(tmp3, src5); + XORI_B4_128_SB(tmp0, tmp1, tmp2, tmp3); +- ST8x8_UB(tmp0, tmp1, tmp2, tmp3, dst, stride); ++ ST_D8(tmp0, tmp1, tmp2, tmp3, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); + } + + void ff_put_h264_qpel4_mc10_msa(uint8_t *dst, const uint8_t *src, +@@ -1009,14 +1007,14 @@ void ff_put_h264_qpel4_mc10_msa(uint8_t *dst, const uint8_t *src, + SRARI_H2_SH(res0, res1, 5); + SAT_SH2_SH(res0, res1, 7); + res = __msa_pckev_b((v16i8) res1, (v16i8) res0); +- SLDI_B2_SB(src0, src1, src0, src1, src0, src1, 2); +- SLDI_B2_SB(src2, src3, src2, src3, src2, src3, 2); ++ SLDI_B4_SB(src0, src0, src1, src1, src2, src2, src3, src3, 2, ++ src0, src1, src2, src3); + src0 = (v16i8) __msa_insve_w((v4i32) src0, 1, (v4i32) src1); + src1 = (v16i8) __msa_insve_w((v4i32) src2, 1, (v4i32) src3); + src0 = (v16i8) __msa_insve_d((v2i64) src0, 1, (v2i64) src1); + res = __msa_aver_s_b(res, src0); + res = (v16i8) __msa_xori_b((v16u8) res, 128); +- ST4x4_UB(res, res, 0, 1, 2, 3, dst, stride); ++ ST_W4(res, 0, 1, 2, 3, dst, stride); + } + + void ff_put_h264_qpel4_mc30_msa(uint8_t *dst, const uint8_t *src, +@@ -1040,14 +1038,14 @@ void ff_put_h264_qpel4_mc30_msa(uint8_t *dst, const uint8_t *src, + SRARI_H2_SH(res0, res1, 5); + SAT_SH2_SH(res0, res1, 7); + res = __msa_pckev_b((v16i8) res1, (v16i8) res0); +- SLDI_B2_SB(src0, src1, src0, src1, src0, src1, 3); +- SLDI_B2_SB(src2, src3, src2, src3, src2, src3, 3); ++ SLDI_B4_SB(src0, src0, src1, src1, src2, src2, src3, src3, 3, ++ src0, src1, src2, src3); + src0 = (v16i8) __msa_insve_w((v4i32) src0, 1, (v4i32) src1); + src1 = (v16i8) __msa_insve_w((v4i32) src2, 1, (v4i32) src3); + src0 = (v16i8) __msa_insve_d((v2i64) src0, 1, (v2i64) src1); + res = __msa_aver_s_b(res, src0); + res = (v16i8) __msa_xori_b((v16u8) res, 128); +- ST4x4_UB(res, res, 0, 1, 2, 3, dst, stride); ++ ST_W4(res, 0, 1, 2, 3, dst, stride); + } + + void ff_put_h264_qpel16_mc20_msa(uint8_t *dst, const uint8_t *src, +@@ -1153,7 +1151,7 @@ void ff_put_h264_qpel8_mc20_msa(uint8_t *dst, const uint8_t *src, + out1 = PCKEV_XORI128_UB(res2, res3); + out2 = PCKEV_XORI128_UB(res4, res5); + out3 = PCKEV_XORI128_UB(res6, res7); +- ST8x8_UB(out0, out1, out2, out3, dst, stride); ++ ST_D8(out0, out1, out2, out3, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); + } + + void ff_put_h264_qpel4_mc20_msa(uint8_t *dst, const uint8_t *src, +@@ -1178,7 +1176,7 @@ void ff_put_h264_qpel4_mc20_msa(uint8_t *dst, const uint8_t *src, + SRARI_H2_SH(res0, res1, 5); + SAT_SH2_SH(res0, res1, 7); + out = PCKEV_XORI128_UB(res0, res1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, stride); ++ ST_W4(out, 0, 1, 2, 3, dst, stride); + } + + void ff_put_h264_qpel16_mc01_msa(uint8_t *dst, const uint8_t *src, +@@ -1378,7 +1376,7 @@ void ff_put_h264_qpel8_mc01_msa(uint8_t *dst, const uint8_t *src, + out2 = __msa_aver_s_b(out2, tmp2); + out3 = __msa_aver_s_b(out3, tmp3); + XORI_B4_128_SB(out0, out1, out2, out3); +- ST8x8_UB(out0, out1, out2, out3, dst, stride); ++ ST_D8(out0, out1, out2, out3, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); + } + + void ff_put_h264_qpel8_mc03_msa(uint8_t *dst, const uint8_t *src, +@@ -1431,7 +1429,7 @@ void ff_put_h264_qpel8_mc03_msa(uint8_t *dst, const uint8_t *src, + out2 = __msa_aver_s_b(out2, tmp2); + out3 = __msa_aver_s_b(out3, tmp3); + XORI_B4_128_SB(out0, out1, out2, out3); +- ST8x8_UB(out0, out1, out2, out3, dst, stride); ++ ST_D8(out0, out1, out2, out3, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); + } + + void ff_put_h264_qpel4_mc01_msa(uint8_t *dst, const uint8_t *src, +@@ -1472,7 +1470,7 @@ void ff_put_h264_qpel4_mc01_msa(uint8_t *dst, const uint8_t *src, + src54_r = (v16i8) __msa_insve_w((v4i32) src4, 1, (v4i32) src5); + src32_r = (v16i8) __msa_insve_d((v2i64) src32_r, 1, (v2i64) src54_r); + out = __msa_aver_u_b(out, (v16u8) src32_r); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, stride); ++ ST_W4(out, 0, 1, 2, 3, dst, stride); + } + + void ff_put_h264_qpel4_mc03_msa(uint8_t *dst, const uint8_t *src, +@@ -1513,7 +1511,7 @@ void ff_put_h264_qpel4_mc03_msa(uint8_t *dst, const uint8_t *src, + src54_r = (v16i8) __msa_insve_w((v4i32) src5, 1, (v4i32) src6); + src32_r = (v16i8) __msa_insve_d((v2i64) src32_r, 1, (v2i64) src54_r); + out = __msa_aver_u_b(out, (v16u8) src32_r); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, stride); ++ ST_W4(out, 0, 1, 2, 3, dst, stride); + } + + void ff_put_h264_qpel16_mc11_msa(uint8_t *dst, const uint8_t *src, +@@ -1691,7 +1689,7 @@ void ff_put_h264_qpel16_mc21_msa(uint8_t *dst, const uint8_t *src, + + out0 = PCKEV_XORI128_UB(dst0, dst1); + out1 = PCKEV_XORI128_UB(dst2, dst3); +- ST8x4_UB(out0, out1, dst, stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, stride); + dst += (4 * stride); + + hz_out0 = hz_out4; +@@ -1804,7 +1802,7 @@ void ff_put_h264_qpel16_mc23_msa(uint8_t *dst, const uint8_t *src, + + out0 = PCKEV_XORI128_UB(dst0, dst1); + out1 = PCKEV_XORI128_UB(dst2, dst3); +- ST8x4_UB(out0, out1, dst, stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, stride); + dst += (4 * stride); + + hz_out0 = hz_out4; +@@ -1905,7 +1903,7 @@ void ff_put_h264_qpel8_mc21_msa(uint8_t *dst, const uint8_t *src, + + out0 = PCKEV_XORI128_UB(dst0, dst1); + out1 = PCKEV_XORI128_UB(dst2, dst3); +- ST8x4_UB(out0, out1, dst, stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, stride); + dst += (4 * stride); + + LD_SB4(src, stride, src9, src10, src11, src12); +@@ -1951,7 +1949,7 @@ void ff_put_h264_qpel8_mc21_msa(uint8_t *dst, const uint8_t *src, + + out0 = PCKEV_XORI128_UB(dst0, dst1); + out1 = PCKEV_XORI128_UB(dst2, dst3); +- ST8x4_UB(out0, out1, dst, stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, stride); + } + + void ff_put_h264_qpel8_mc23_msa(uint8_t *dst, const uint8_t *src, +@@ -2040,7 +2038,7 @@ void ff_put_h264_qpel8_mc23_msa(uint8_t *dst, const uint8_t *src, + + out0 = PCKEV_XORI128_UB(dst0, dst1); + out1 = PCKEV_XORI128_UB(dst2, dst3); +- ST8x4_UB(out0, out1, dst, stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, stride); + dst += (4 * stride); + + LD_SB4(src, stride, src9, src10, src11, src12); +@@ -2086,7 +2084,7 @@ void ff_put_h264_qpel8_mc23_msa(uint8_t *dst, const uint8_t *src, + + out0 = PCKEV_XORI128_UB(dst0, dst1); + out1 = PCKEV_XORI128_UB(dst2, dst3); +- ST8x4_UB(out0, out1, dst, stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, stride); + } + + void ff_put_h264_qpel4_mc21_msa(uint8_t *dst, const uint8_t *src, +@@ -2150,7 +2148,7 @@ void ff_put_h264_qpel4_mc21_msa(uint8_t *dst, const uint8_t *src, + dst1 = __msa_aver_s_h(dst1, hz_out4); + + res = PCKEV_XORI128_UB(dst0, dst1); +- ST4x4_UB(res, res, 0, 1, 2, 3, dst, stride); ++ ST_W4(res, 0, 1, 2, 3, dst, stride); + } + + void ff_put_h264_qpel4_mc23_msa(uint8_t *dst, const uint8_t *src, +@@ -2215,7 +2213,7 @@ void ff_put_h264_qpel4_mc23_msa(uint8_t *dst, const uint8_t *src, + dst1 = __msa_aver_s_h(dst1, hz_out1); + + res = PCKEV_XORI128_UB(dst0, dst1); +- ST4x4_UB(res, res, 0, 1, 2, 3, dst, stride); ++ ST_W4(res, 0, 1, 2, 3, dst, stride); + } + + void ff_put_h264_qpel16_mc02_msa(uint8_t *dst, const uint8_t *src, +@@ -2332,7 +2330,7 @@ void ff_put_h264_qpel8_mc02_msa(uint8_t *dst, const uint8_t *src, + out1 = PCKEV_XORI128_UB(out2_r, out3_r); + out2 = PCKEV_XORI128_UB(out4_r, out5_r); + out3 = PCKEV_XORI128_UB(out6_r, out7_r); +- ST8x8_UB(out0, out1, out2, out3, dst, stride); ++ ST_D8(out0, out1, out2, out3, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); + } + + void ff_put_h264_qpel4_mc02_msa(uint8_t *dst, const uint8_t *src, +@@ -2369,7 +2367,7 @@ void ff_put_h264_qpel4_mc02_msa(uint8_t *dst, const uint8_t *src, + SRARI_H2_SH(out10, out32, 5); + SAT_SH2_SH(out10, out32, 7); + out = PCKEV_XORI128_UB(out10, out32); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, stride); ++ ST_W4(out, 0, 1, 2, 3, dst, stride); + } + + void ff_put_h264_qpel16_mc12_msa(uint8_t *dst, const uint8_t *src, +@@ -2601,7 +2599,7 @@ void ff_put_h264_qpel8_mc12_msa(uint8_t *dst, const uint8_t *src, + dst0 = __msa_aver_s_h(dst2, dst0); + dst1 = __msa_aver_s_h(dst3, dst1); + out = PCKEV_XORI128_UB(dst0, dst1); +- ST8x2_UB(out, dst, stride); ++ ST_D2(out, 0, 1, dst, stride); + dst += (2 * stride); + + src0 = src2; +@@ -2677,7 +2675,7 @@ void ff_put_h264_qpel8_mc32_msa(uint8_t *dst, const uint8_t *src, + dst0 = __msa_aver_s_h(dst2, dst0); + dst1 = __msa_aver_s_h(dst3, dst1); + out = PCKEV_XORI128_UB(dst0, dst1); +- ST8x2_UB(out, dst, stride); ++ ST_D2(out, 0, 1, dst, stride); + dst += (2 * stride); + + src0 = src2; +@@ -2777,7 +2775,7 @@ void ff_put_h264_qpel4_mc12_msa(uint8_t *dst, const uint8_t *src, + + PCKEV_H2_SH(hz_res1, hz_res0, hz_res3, hz_res2, dst0, dst2); + out = PCKEV_XORI128_UB(dst0, dst2); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, stride); ++ ST_W4(out, 0, 1, 2, 3, dst, stride); + } + + void ff_put_h264_qpel4_mc32_msa(uint8_t *dst, const uint8_t *src, +@@ -2873,7 +2871,7 @@ void ff_put_h264_qpel4_mc32_msa(uint8_t *dst, const uint8_t *src, + + PCKEV_H2_SH(hz_res1, hz_res0, hz_res3, hz_res2, dst0, dst2); + out = PCKEV_XORI128_UB(dst0, dst2); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, stride); ++ ST_W4(out, 0, 1, 2, 3, dst, stride); + } + + void ff_put_h264_qpel16_mc22_msa(uint8_t *dst, const uint8_t *src, +@@ -2961,7 +2959,7 @@ void ff_put_h264_qpel16_mc22_msa(uint8_t *dst, const uint8_t *src, + + out0 = PCKEV_XORI128_UB(dst0, dst1); + out1 = PCKEV_XORI128_UB(dst2, dst3); +- ST8x4_UB(out0, out1, dst, stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, stride); + dst += (4 * stride); + + hz_out0 = hz_out4; +@@ -3049,7 +3047,7 @@ void ff_put_h264_qpel8_mc22_msa(uint8_t *dst, const uint8_t *src, + dst3 = __msa_pckev_h((v8i16) tmp1, (v8i16) tmp0); + out0 = PCKEV_XORI128_UB(dst0, dst1); + out1 = PCKEV_XORI128_UB(dst2, dst3); +- ST8x4_UB(out0, out1, dst, stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, stride); + dst += (4 * stride); + + LD_SB4(src, stride, src0, src1, src2, src3); +@@ -3086,7 +3084,7 @@ void ff_put_h264_qpel8_mc22_msa(uint8_t *dst, const uint8_t *src, + dst3 = __msa_pckev_h((v8i16) tmp1, (v8i16) tmp0); + out0 = PCKEV_XORI128_UB(dst0, dst1); + out1 = PCKEV_XORI128_UB(dst2, dst3); +- ST8x4_UB(out0, out1, dst, stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, stride); + } + + void ff_put_h264_qpel4_mc22_msa(uint8_t *dst, const uint8_t *src, +@@ -3141,7 +3139,7 @@ void ff_put_h264_qpel4_mc22_msa(uint8_t *dst, const uint8_t *src, + filt2); + dst1 = __msa_pckev_h((v8i16) tmp1, (v8i16) tmp0); + res = PCKEV_XORI128_UB(dst0, dst1); +- ST4x4_UB(res, res, 0, 1, 2, 3, dst, stride); ++ ST_W4(res, 0, 1, 2, 3, dst, stride); + } + + void ff_avg_h264_qpel16_mc10_msa(uint8_t *dst, const uint8_t *src, +@@ -3196,8 +3194,8 @@ void ff_avg_h264_qpel16_mc10_msa(uint8_t *dst, const uint8_t *src, + minus5b, res4, res5, res6, res7); + DPADD_SB4_SH(vec2, vec5, vec8, vec11, plus20b, plus20b, plus20b, + plus20b, res4, res5, res6, res7); +- SLDI_B2_SB(src1, src3, src0, src2, src0, src2, 2); +- SLDI_B2_SB(src5, src7, src4, src6, src4, src6, 2); ++ SLDI_B4_SB(src1, src0, src3, src2, src5, src4, src7, src6, 2, ++ src0, src2, src4, src6); + SRARI_H4_SH(res0, res1, res2, res3, 5); + SRARI_H4_SH(res4, res5, res6, res7, 5); + SAT_SH4_SH(res0, res1, res2, res3, 7); +@@ -3268,8 +3266,8 @@ void ff_avg_h264_qpel16_mc30_msa(uint8_t *dst, const uint8_t *src, + minus5b, res4, res5, res6, res7); + DPADD_SB4_SH(vec2, vec5, vec8, vec11, plus20b, plus20b, plus20b, + plus20b, res4, res5, res6, res7); +- SLDI_B2_SB(src1, src3, src0, src2, src0, src2, 3); +- SLDI_B2_SB(src5, src7, src4, src6, src4, src6, 3); ++ SLDI_B4_SB(src1, src0, src3, src2, src5, src4, src7, src6, 3, ++ src0, src2, src4, src6); + SRARI_H4_SH(res0, res1, res2, res3, 5); + SRARI_H4_SH(res4, res5, res6, res7, 5); + SAT_SH4_SH(res0, res1, res2, res3, 7); +@@ -3325,10 +3323,10 @@ void ff_avg_h264_qpel8_mc10_msa(uint8_t *dst, const uint8_t *src, + VSHF_B2_SB(src6, src6, src7, src7, mask2, mask2, vec10, vec11); + DPADD_SB4_SH(vec8, vec9, vec10, vec11, plus20b, plus20b, plus20b, plus20b, + res4, res5, res6, res7); +- SLDI_B2_SB(src0, src1, src0, src1, src0, src1, 2); +- SLDI_B2_SB(src2, src3, src2, src3, src2, src3, 2); +- SLDI_B2_SB(src4, src5, src4, src5, src4, src5, 2); +- SLDI_B2_SB(src6, src7, src6, src7, src6, src7, 2); ++ SLDI_B4_SB(src0, src0, src1, src1, src2, src2, src3, src3, 2, ++ src0, src1, src2, src3); ++ SLDI_B4_SB(src4, src4, src5, src5, src6, src6, src7, src7, 2, ++ src4, src5, src6, src7); + PCKEV_D2_SB(src1, src0, src3, src2, src0, src1); + PCKEV_D2_SB(src5, src4, src7, src6, src4, src5); + SRARI_H4_SH(res0, res1, res2, res3, 5); +@@ -3350,7 +3348,7 @@ void ff_avg_h264_qpel8_mc10_msa(uint8_t *dst, const uint8_t *src, + INSERT_D2_UB(tp2, tp3, dst3); + AVER_UB2_UB(tmp0, dst0, tmp1, dst1, dst0, dst1); + AVER_UB2_UB(tmp2, dst2, tmp3, dst3, dst2, dst3); +- ST8x8_UB(dst0, dst1, dst2, dst3, dst, stride); ++ ST_D8(dst0, dst1, dst2, dst3, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); + } + + void ff_avg_h264_qpel8_mc30_msa(uint8_t *dst, const uint8_t *src, +@@ -3390,10 +3388,10 @@ void ff_avg_h264_qpel8_mc30_msa(uint8_t *dst, const uint8_t *src, + VSHF_B2_SB(src6, src6, src7, src7, mask2, mask2, vec10, vec11); + DPADD_SB4_SH(vec8, vec9, vec10, vec11, plus20b, plus20b, plus20b, plus20b, + res4, res5, res6, res7); +- SLDI_B2_SB(src0, src1, src0, src1, src0, src1, 3); +- SLDI_B2_SB(src2, src3, src2, src3, src2, src3, 3); +- SLDI_B2_SB(src4, src5, src4, src5, src4, src5, 3); +- SLDI_B2_SB(src6, src7, src6, src7, src6, src7, 3); ++ SLDI_B4_SB(src0, src0, src1, src1, src2, src2, src3, src3, 3, ++ src0, src1, src2, src3); ++ SLDI_B4_SB(src4, src4, src5, src5, src6, src6, src7, src7, 3, ++ src4, src5, src6, src7); + PCKEV_D2_SB(src1, src0, src3, src2, src0, src1); + PCKEV_D2_SB(src5, src4, src7, src6, src4, src5); + SRARI_H4_SH(res0, res1, res2, res3, 5); +@@ -3415,7 +3413,7 @@ void ff_avg_h264_qpel8_mc30_msa(uint8_t *dst, const uint8_t *src, + INSERT_D2_UB(tp2, tp3, dst3); + AVER_UB2_UB(tmp0, dst0, tmp1, dst1, dst0, dst1); + AVER_UB2_UB(tmp2, dst2, tmp3, dst3, dst2, dst3); +- ST8x8_UB(dst0, dst1, dst2, dst3, dst, stride); ++ ST_D8(dst0, dst1, dst2, dst3, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); + } + + void ff_avg_h264_qpel4_mc10_msa(uint8_t *dst, const uint8_t *src, +@@ -3441,8 +3439,8 @@ void ff_avg_h264_qpel4_mc10_msa(uint8_t *dst, const uint8_t *src, + SRARI_H2_SH(out0, out1, 5); + SAT_SH2_SH(out0, out1, 7); + res = __msa_pckev_b((v16i8) out1, (v16i8) out0); +- SLDI_B2_SB(src0, src1, src0, src1, src0, src1, 2); +- SLDI_B2_SB(src2, src3, src2, src3, src2, src3, 2); ++ SLDI_B4_SB(src0, src0, src1, src1, src2, src2, src3, src3, 2, ++ src0, src1, src2, src3); + src0 = (v16i8) __msa_insve_w((v4i32) src0, 1, (v4i32) src1); + src1 = (v16i8) __msa_insve_w((v4i32) src2, 1, (v4i32) src3); + src0 = (v16i8) __msa_insve_d((v2i64) src0, 1, (v2i64) src1); +@@ -3451,7 +3449,7 @@ void ff_avg_h264_qpel4_mc10_msa(uint8_t *dst, const uint8_t *src, + LW4(dst, stride, tp0, tp1, tp2, tp3); + INSERT_W4_UB(tp0, tp1, tp2, tp3, dst0); + dst0 = __msa_aver_u_b((v16u8) res, dst0); +- ST4x4_UB(dst0, dst0, 0, 1, 2, 3, dst, stride); ++ ST_W4(dst0, 0, 1, 2, 3, dst, stride); + } + + void ff_avg_h264_qpel4_mc30_msa(uint8_t *dst, const uint8_t *src, +@@ -3477,8 +3475,8 @@ void ff_avg_h264_qpel4_mc30_msa(uint8_t *dst, const uint8_t *src, + SRARI_H2_SH(out0, out1, 5); + SAT_SH2_SH(out0, out1, 7); + res = __msa_pckev_b((v16i8) out1, (v16i8) out0); +- SLDI_B2_SB(src0, src1, src0, src1, src0, src1, 3); +- SLDI_B2_SB(src2, src3, src2, src3, src2, src3, 3); ++ SLDI_B4_SB(src0, src0, src1, src1, src2, src2, src3, src3, 3, ++ src0, src1, src2, src3); + src0 = (v16i8) __msa_insve_w((v4i32) src0, 1, (v4i32) src1); + src1 = (v16i8) __msa_insve_w((v4i32) src2, 1, (v4i32) src3); + src0 = (v16i8) __msa_insve_d((v2i64) src0, 1, (v2i64) src1); +@@ -3487,7 +3485,7 @@ void ff_avg_h264_qpel4_mc30_msa(uint8_t *dst, const uint8_t *src, + LW4(dst, stride, tp0, tp1, tp2, tp3); + INSERT_W4_UB(tp0, tp1, tp2, tp3, dst0); + dst0 = __msa_aver_u_b((v16u8) res, dst0); +- ST4x4_UB(dst0, dst0, 0, 1, 2, 3, dst, stride); ++ ST_W4(dst0, 0, 1, 2, 3, dst, stride); + } + + void ff_avg_h264_qpel16_mc20_msa(uint8_t *dst, const uint8_t *src, +@@ -3608,7 +3606,7 @@ void ff_avg_h264_qpel8_mc20_msa(uint8_t *dst, const uint8_t *src, + INSERT_D2_UB(tp2, tp3, out7); + AVER_UB2_UB(out0, out2, out1, out3, out0, out1); + AVER_UB2_UB(out4, out6, out5, out7, out4, out5); +- ST8x8_UB(out0, out1, out4, out5, dst, stride); ++ ST_D8(out0, out1, out4, out5, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); + } + + void ff_avg_h264_qpel4_mc20_msa(uint8_t *dst, const uint8_t *src, +@@ -3637,7 +3635,7 @@ void ff_avg_h264_qpel4_mc20_msa(uint8_t *dst, const uint8_t *src, + LW4(dst, stride, tp0, tp1, tp2, tp3); + INSERT_W4_UB(tp0, tp1, tp2, tp3, dst0); + res = __msa_aver_u_b(res, dst0); +- ST4x4_UB(res, res, 0, 1, 2, 3, dst, stride); ++ ST_W4(res, 0, 1, 2, 3, dst, stride); + } + + void ff_avg_h264_qpel16_mc01_msa(uint8_t *dst, const uint8_t *src, +@@ -3856,7 +3854,7 @@ void ff_avg_h264_qpel8_mc01_msa(uint8_t *dst, const uint8_t *src, + XORI_B4_128_SB(out0, out1, out2, out3); + AVER_UB4_UB(out0, dst0, out1, dst1, out2, dst2, out3, dst3, dst0, dst1, + dst2, dst3); +- ST8x8_UB(dst0, dst1, dst2, dst3, dst, stride); ++ ST_D8(dst0, dst1, dst2, dst3, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); + } + + void ff_avg_h264_qpel8_mc03_msa(uint8_t *dst, const uint8_t *src, +@@ -3922,7 +3920,7 @@ void ff_avg_h264_qpel8_mc03_msa(uint8_t *dst, const uint8_t *src, + XORI_B4_128_SB(out0, out1, out2, out3); + AVER_UB4_UB(out0, dst0, out1, dst1, out2, dst2, out3, dst3, dst0, dst1, + dst2, dst3); +- ST8x8_UB(dst0, dst1, dst2, dst3, dst, stride); ++ ST_D8(dst0, dst1, dst2, dst3, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); + } + + void ff_avg_h264_qpel4_mc01_msa(uint8_t *dst, const uint8_t *src, +@@ -3967,7 +3965,7 @@ void ff_avg_h264_qpel4_mc01_msa(uint8_t *dst, const uint8_t *src, + res = PCKEV_XORI128_UB(out10, out32); + res = __msa_aver_u_b(res, (v16u8) src32_r); + dst0 = __msa_aver_u_b(res, dst0); +- ST4x4_UB(dst0, dst0, 0, 1, 2, 3, dst, stride); ++ ST_W4(dst0, 0, 1, 2, 3, dst, stride); + } + + void ff_avg_h264_qpel4_mc03_msa(uint8_t *dst, const uint8_t *src, +@@ -4013,7 +4011,7 @@ void ff_avg_h264_qpel4_mc03_msa(uint8_t *dst, const uint8_t *src, + src32_r = (v16i8) __msa_insve_d((v2i64) src32_r, 1, (v2i64) src54_r); + res = __msa_aver_u_b(res, (v16u8) src32_r); + dst0 = __msa_aver_u_b(res, dst0); +- ST4x4_UB(dst0, dst0, 0, 1, 2, 3, dst, stride); ++ ST_W4(dst0, 0, 1, 2, 3, dst, stride); + } + + void ff_avg_h264_qpel16_mc11_msa(uint8_t *dst, const uint8_t *src, +@@ -4196,7 +4194,7 @@ void ff_avg_h264_qpel16_mc21_msa(uint8_t *dst, const uint8_t *src, + + out0 = PCKEV_XORI128_UB(tmp0, tmp1); + dst0 = __msa_aver_u_b(out0, dst0); +- ST8x2_UB(dst0, dst, stride); ++ ST_D2(dst0, 0, 1, dst, stride); + dst += (2 * stride); + + LD_SB2(src, stride, src7, src8); +@@ -4232,7 +4230,7 @@ void ff_avg_h264_qpel16_mc21_msa(uint8_t *dst, const uint8_t *src, + + out1 = PCKEV_XORI128_UB(tmp2, tmp3); + dst1 = __msa_aver_u_b(out1, dst1); +- ST8x2_UB(dst1, dst, stride); ++ ST_D2(dst1, 0, 1, dst, stride); + dst += (2 * stride); + + hz_out0 = hz_out4; +@@ -4326,7 +4324,7 @@ void ff_avg_h264_qpel16_mc23_msa(uint8_t *dst, const uint8_t *src, + INSERT_D2_UB(tp0, tp1, dst0); + out0 = PCKEV_XORI128_UB(tmp0, tmp1); + dst0 = __msa_aver_u_b(out0, dst0); +- ST8x2_UB(dst0, dst, stride); ++ ST_D2(dst0, 0, 1, dst, stride); + dst += (2 * stride); + + LD_SB2(src, stride, src7, src8); +@@ -4361,7 +4359,7 @@ void ff_avg_h264_qpel16_mc23_msa(uint8_t *dst, const uint8_t *src, + INSERT_D2_UB(tp2, tp3, dst1); + out1 = PCKEV_XORI128_UB(tmp2, tmp3); + dst1 = __msa_aver_u_b(out1, dst1); +- ST8x2_UB(dst1, dst, stride); ++ ST_D2(dst1, 0, 1, dst, stride); + dst += (2 * stride); + + hz_out0 = hz_out4; +@@ -4468,7 +4466,7 @@ void ff_avg_h264_qpel8_mc21_msa(uint8_t *dst, const uint8_t *src, + out0 = PCKEV_XORI128_UB(tmp0, tmp1); + out1 = PCKEV_XORI128_UB(tmp2, tmp3); + AVER_UB2_UB(out0, dst0, out1, dst1, dst0, dst1); +- ST8x4_UB(dst0, dst1, dst, stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, stride); + dst += (4 * stride); + + LD_SB4(src, stride, src9, src10, src11, src12); +@@ -4519,7 +4517,7 @@ void ff_avg_h264_qpel8_mc21_msa(uint8_t *dst, const uint8_t *src, + out0 = PCKEV_XORI128_UB(tmp0, tmp1); + out1 = PCKEV_XORI128_UB(tmp2, tmp3); + AVER_UB2_UB(out0, dst0, out1, dst1, dst0, dst1); +- ST8x4_UB(dst0, dst1, dst, stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, stride); + } + + void ff_avg_h264_qpel8_mc23_msa(uint8_t *dst, const uint8_t *src, +@@ -4614,7 +4612,7 @@ void ff_avg_h264_qpel8_mc23_msa(uint8_t *dst, const uint8_t *src, + out0 = PCKEV_XORI128_UB(tmp0, tmp1); + out1 = PCKEV_XORI128_UB(tmp2, tmp3); + AVER_UB2_UB(out0, dst0, out1, dst1, dst0, dst1); +- ST8x4_UB(dst0, dst1, dst, stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, stride); + dst += (4 * stride); + + LD_SB4(src, stride, src9, src10, src11, src12); +@@ -4665,7 +4663,7 @@ void ff_avg_h264_qpel8_mc23_msa(uint8_t *dst, const uint8_t *src, + out0 = PCKEV_XORI128_UB(tmp0, tmp1); + out1 = PCKEV_XORI128_UB(tmp2, tmp3); + AVER_UB2_UB(out0, dst0, out1, dst1, dst0, dst1); +- ST8x4_UB(dst0, dst1, dst, stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, stride); + } + + void ff_avg_h264_qpel4_mc21_msa(uint8_t *dst, const uint8_t *src, +@@ -4732,7 +4730,7 @@ void ff_avg_h264_qpel4_mc21_msa(uint8_t *dst, const uint8_t *src, + INSERT_W4_UB(tp0, tp1, tp2, tp3, out); + res = PCKEV_XORI128_UB(dst0, dst1); + res = __msa_aver_u_b(res, out); +- ST4x4_UB(res, res, 0, 1, 2, 3, dst, stride); ++ ST_W4(res, 0, 1, 2, 3, dst, stride); + } + + void ff_avg_h264_qpel4_mc23_msa(uint8_t *dst, const uint8_t *src, +@@ -4800,7 +4798,7 @@ void ff_avg_h264_qpel4_mc23_msa(uint8_t *dst, const uint8_t *src, + INSERT_W4_UB(tp0, tp1, tp2, tp3, out); + res = PCKEV_XORI128_UB(dst0, dst1); + res = __msa_aver_u_b(res, out); +- ST4x4_UB(res, res, 0, 1, 2, 3, dst, stride); ++ ST_W4(res, 0, 1, 2, 3, dst, stride); + } + + void ff_avg_h264_qpel16_mc02_msa(uint8_t *dst, const uint8_t *src, +@@ -4936,7 +4934,7 @@ void ff_avg_h264_qpel8_mc02_msa(uint8_t *dst, const uint8_t *src, + out3 = PCKEV_XORI128_UB(out6_r, out7_r); + AVER_UB4_UB(out0, dst0, out1, dst1, out2, dst2, out3, dst3, dst0, dst1, + dst2, dst3); +- ST8x8_UB(dst0, dst1, dst2, dst3, dst, stride); ++ ST_D8(dst0, dst1, dst2, dst3, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); + } + + void ff_avg_h264_qpel4_mc02_msa(uint8_t *dst, const uint8_t *src, +@@ -4977,7 +4975,7 @@ void ff_avg_h264_qpel4_mc02_msa(uint8_t *dst, const uint8_t *src, + INSERT_W4_UB(tp0, tp1, tp2, tp3, dst0); + res = PCKEV_XORI128_UB(out10, out32); + dst0 = __msa_aver_u_b(res, dst0); +- ST4x4_UB(dst0, dst0, 0, 1, 2, 3, dst, stride); ++ ST_W4(dst0, 0, 1, 2, 3, dst, stride); + } + + void ff_avg_h264_qpel16_mc12_msa(uint8_t *dst, const uint8_t *src, +@@ -5217,7 +5215,7 @@ void ff_avg_h264_qpel8_mc12_msa(uint8_t *dst, const uint8_t *src, + tmp1 = __msa_aver_s_h(tmp3, tmp1); + out = PCKEV_XORI128_UB(tmp0, tmp1); + out = __msa_aver_u_b(out, dst0); +- ST8x2_UB(out, dst, stride); ++ ST_D2(out, 0, 1, dst, stride); + dst += (2 * stride); + + src0 = src2; +@@ -5297,7 +5295,7 @@ void ff_avg_h264_qpel8_mc32_msa(uint8_t *dst, const uint8_t *src, + tmp1 = __msa_aver_s_h(tmp3, tmp1); + out = PCKEV_XORI128_UB(tmp0, tmp1); + out = __msa_aver_u_b(out, dst0); +- ST8x2_UB(out, dst, stride); ++ ST_D2(out, 0, 1, dst, stride); + dst += (2 * stride); + + src0 = src2; +@@ -5401,7 +5399,7 @@ void ff_avg_h264_qpel4_mc12_msa(uint8_t *dst, const uint8_t *src, + PCKEV_H2_SH(hz_res1, hz_res0, hz_res3, hz_res2, dst0, dst2); + out = PCKEV_XORI128_UB(dst0, dst2); + out = __msa_aver_u_b(out, dstv); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, stride); ++ ST_W4(out, 0, 1, 2, 3, dst, stride); + } + + void ff_avg_h264_qpel4_mc32_msa(uint8_t *dst, const uint8_t *src, +@@ -5500,7 +5498,7 @@ void ff_avg_h264_qpel4_mc32_msa(uint8_t *dst, const uint8_t *src, + PCKEV_H2_SH(hz_res1, hz_res0, hz_res3, hz_res2, dst0, dst2); + out = PCKEV_XORI128_UB(dst0, dst2); + out = __msa_aver_u_b(out, dstv); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, stride); ++ ST_W4(out, 0, 1, 2, 3, dst, stride); + } + + void ff_avg_h264_qpel16_mc22_msa(uint8_t *dst, const uint8_t *src, +@@ -5592,7 +5590,7 @@ void ff_avg_h264_qpel16_mc22_msa(uint8_t *dst, const uint8_t *src, + out0 = PCKEV_XORI128_UB(res0, res1); + out1 = PCKEV_XORI128_UB(res2, res3); + AVER_UB2_UB(out0, dst0, out1, dst1, out0, out1); +- ST8x4_UB(out0, out1, dst, stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, stride); + dst += (4 * stride); + + hz_out0 = hz_out4; +@@ -5685,7 +5683,7 @@ void ff_avg_h264_qpel8_mc22_msa(uint8_t *dst, const uint8_t *src, + out0 = PCKEV_XORI128_UB(res0, res1); + out1 = PCKEV_XORI128_UB(res2, res3); + AVER_UB2_UB(out0, dst0, out1, dst1, dst0, dst1); +- ST8x4_UB(dst0, dst1, dst, stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, stride); + dst += (4 * stride); + + LD_SB4(src, stride, src0, src1, src2, src3); +@@ -5726,7 +5724,7 @@ void ff_avg_h264_qpel8_mc22_msa(uint8_t *dst, const uint8_t *src, + out0 = PCKEV_XORI128_UB(res0, res1); + out1 = PCKEV_XORI128_UB(res2, res3); + AVER_UB2_UB(out0, dst0, out1, dst1, dst0, dst1); +- ST8x4_UB(dst0, dst1, dst, stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, stride); + } + + void ff_avg_h264_qpel4_mc22_msa(uint8_t *dst, const uint8_t *src, +@@ -5785,5 +5783,5 @@ void ff_avg_h264_qpel4_mc22_msa(uint8_t *dst, const uint8_t *src, + INSERT_W4_UB(tp0, tp1, tp2, tp3, dst0); + res = PCKEV_XORI128_UB(res0, res1); + res = __msa_aver_u_b(res, dst0); +- ST4x4_UB(res, res, 0, 1, 2, 3, dst, stride); ++ ST_W4(res, 0, 1, 2, 3, dst, stride); + } +diff --git a/libavcodec/mips/hevc_idct_msa.c b/libavcodec/mips/hevc_idct_msa.c +index 0943119..5ab6acd 100644 +--- a/libavcodec/mips/hevc_idct_msa.c ++++ b/libavcodec/mips/hevc_idct_msa.c +@@ -727,7 +727,7 @@ static void hevc_addblk_4x4_msa(int16_t *coeffs, uint8_t *dst, int32_t stride) + ADD2(dst_r0, in0, dst_l0, in1, dst_r0, dst_l0); + CLIP_SH2_0_255(dst_r0, dst_l0); + dst_vec = (v4i32) __msa_pckev_b((v16i8) dst_l0, (v16i8) dst_r0); +- ST4x4_UB(dst_vec, dst_vec, 0, 1, 2, 3, dst, stride); ++ ST_W4(dst_vec, 0, 1, 2, 3, dst, stride); + } + + static void hevc_addblk_8x8_msa(int16_t *coeffs, uint8_t *dst, int32_t stride) +@@ -752,8 +752,7 @@ static void hevc_addblk_8x8_msa(int16_t *coeffs, uint8_t *dst, int32_t stride) + dst_r0, dst_l0, dst_r1, dst_l1); + CLIP_SH4_0_255(dst_r0, dst_l0, dst_r1, dst_l1); + PCKEV_B2_SH(dst_l0, dst_r0, dst_l1, dst_r1, dst_r0, dst_r1); +- ST8x4_UB(dst_r0, dst_r1, dst, stride); +- dst += (4 * stride); ++ ST_D4(dst_r0, dst_r1, 0, 1, 0, 1, dst, stride); + + LD4(temp_dst, stride, dst0, dst1, dst2, dst3); + INSERT_D2_SD(dst0, dst1, dst_vec0); +@@ -764,7 +763,7 @@ static void hevc_addblk_8x8_msa(int16_t *coeffs, uint8_t *dst, int32_t stride) + dst_r0, dst_l0, dst_r1, dst_l1); + CLIP_SH4_0_255(dst_r0, dst_l0, dst_r1, dst_l1); + PCKEV_B2_SH(dst_l0, dst_r0, dst_l1, dst_r1, dst_r0, dst_r1); +- ST8x4_UB(dst_r0, dst_r1, dst, stride); ++ ST_D4(dst_r0, dst_r1, 0, 1, 0, 1, dst + 4 * stride, stride); + } + + static void hevc_addblk_16x16_msa(int16_t *coeffs, uint8_t *dst, int32_t stride) +@@ -804,8 +803,9 @@ static void hevc_addblk_16x16_msa(int16_t *coeffs, uint8_t *dst, int32_t stride) + LD_SH4((coeffs + 8), 16, in1, in3, in5, in7); + coeffs += 64; + +- CLIP_SH4_0_255(dst_r0, dst_l0, dst_r1, dst_l1); +- CLIP_SH4_0_255(dst_r2, dst_l2, dst_r3, dst_l3); ++ CLIP_SH8_0_255(dst_r0, dst_l0, dst_r1, dst_l1, ++ dst_r2, dst_l2, dst_r3, dst_l3); ++ + PCKEV_B4_UB(dst_l0, dst_r0, dst_l1, dst_r1, dst_l2, dst_r2, dst_l3, + dst_r3, dst0, dst1, dst2, dst3); + ST_UB4(dst0, dst1, dst2, dst3, dst, stride); +@@ -826,8 +826,8 @@ static void hevc_addblk_16x16_msa(int16_t *coeffs, uint8_t *dst, int32_t stride) + dst_r3 += in6; + dst_l3 += in7; + +- CLIP_SH4_0_255(dst_r0, dst_l0, dst_r1, dst_l1); +- CLIP_SH4_0_255(dst_r2, dst_l2, dst_r3, dst_l3); ++ CLIP_SH8_0_255(dst_r0, dst_l0, dst_r1, dst_l1, ++ dst_r2, dst_l2, dst_r3, dst_l3); + PCKEV_B4_UB(dst_l0, dst_r0, dst_l1, dst_r1, dst_l2, dst_r2, dst_l3, + dst_r3, dst0, dst1, dst2, dst3); + ST_UB4(dst0, dst1, dst2, dst3, dst, stride); +@@ -874,8 +874,8 @@ static void hevc_addblk_32x32_msa(int16_t *coeffs, uint8_t *dst, int32_t stride) + LD_SH4((coeffs + 8), 16, in1, in3, in5, in7); + coeffs += 64; + +- CLIP_SH4_0_255(dst_r0, dst_l0, dst_r1, dst_l1); +- CLIP_SH4_0_255(dst_r2, dst_l2, dst_r3, dst_l3); ++ CLIP_SH8_0_255(dst_r0, dst_l0, dst_r1, dst_l1, ++ dst_r2, dst_l2, dst_r3, dst_l3); + PCKEV_B4_UB(dst_l0, dst_r0, dst_l1, dst_r1, dst_l2, dst_r2, dst_l3, + dst_r3, dst0, dst1, dst2, dst3); + ST_UB2(dst0, dst1, dst, 16); +@@ -906,8 +906,8 @@ static void hevc_addblk_32x32_msa(int16_t *coeffs, uint8_t *dst, int32_t stride) + LD_SH4(coeffs, 16, in0, in2, in4, in6); + LD_SH4((coeffs + 8), 16, in1, in3, in5, in7); + +- CLIP_SH4_0_255(dst_r0, dst_l0, dst_r1, dst_l1); +- CLIP_SH4_0_255(dst_r2, dst_l2, dst_r3, dst_l3); ++ CLIP_SH8_0_255(dst_r0, dst_l0, dst_r1, dst_l1, ++ dst_r2, dst_l2, dst_r3, dst_l3); + PCKEV_B4_UB(dst_l0, dst_r0, dst_l1, dst_r1, dst_l2, dst_r2, dst_l3, + dst_r3, dst0, dst1, dst2, dst3); + ST_UB2(dst0, dst1, dst, 16); +@@ -929,8 +929,8 @@ static void hevc_addblk_32x32_msa(int16_t *coeffs, uint8_t *dst, int32_t stride) + dst_r3 += in6; + dst_l3 += in7; + +- CLIP_SH4_0_255(dst_r0, dst_l0, dst_r1, dst_l1); +- CLIP_SH4_0_255(dst_r2, dst_l2, dst_r3, dst_l3); ++ CLIP_SH8_0_255(dst_r0, dst_l0, dst_r1, dst_l1, ++ dst_r2, dst_l2, dst_r3, dst_l3); + PCKEV_B4_UB(dst_l0, dst_r0, dst_l1, dst_r1, dst_l2, dst_r2, dst_l3, + dst_r3, dst0, dst1, dst2, dst3); + ST_UB2(dst0, dst1, dst, 16); +diff --git a/libavcodec/mips/hevc_lpf_sao_msa.c b/libavcodec/mips/hevc_lpf_sao_msa.c +index adcafde..26663dd 100644 +--- a/libavcodec/mips/hevc_lpf_sao_msa.c ++++ b/libavcodec/mips/hevc_lpf_sao_msa.c +@@ -140,19 +140,19 @@ static void hevc_loopfilter_luma_hor_msa(uint8_t *src, int32_t stride, + temp1 = ((p3_src + p2_src) << 1) + p2_src + temp0; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 3); + temp2 = (v8i16) (temp1 - p2_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst0 = (v16u8) (temp2 + (v8i16) p2_src); + + temp1 = temp0 + p2_src; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 2); + temp2 = (v8i16) (temp1 - p1_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst1 = (v16u8) (temp2 + (v8i16) p1_src); + + temp1 = (temp0 << 1) + p2_src + q1_src; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 3); + temp2 = (v8i16) (temp1 - p0_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst2 = (v16u8) (temp2 + (v8i16) p0_src); + + dst0 = __msa_bmz_v(dst0, (v16u8) p2_src, (v16u8) p_is_pcm_vec); +@@ -165,19 +165,19 @@ static void hevc_loopfilter_luma_hor_msa(uint8_t *src, int32_t stride, + temp1 = ((q3_src + q2_src) << 1) + q2_src + temp0; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 3); + temp2 = (v8i16) (temp1 - q2_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst5 = (v16u8) (temp2 + (v8i16) q2_src); + + temp1 = temp0 + q2_src; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 2); + temp2 = (v8i16) (temp1 - q1_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst4 = (v16u8) (temp2 + (v8i16) q1_src); + + temp1 = (temp0 << 1) + p1_src + q2_src; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 3); + temp2 = (v8i16) (temp1 - q0_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst3 = (v16u8) (temp2 + (v8i16) q0_src); + + dst3 = __msa_bmz_v(dst3, (v16u8) q0_src, (v16u8) q_is_pcm_vec); +@@ -199,11 +199,9 @@ static void hevc_loopfilter_luma_hor_msa(uint8_t *src, int32_t stride, + dst_val0 = __msa_copy_u_d((v2i64) dst2, 0); + dst_val1 = __msa_copy_u_d((v2i64) dst2, 1); + +- ST8x4_UB(dst0, dst1, p2, stride); +- p2 += (4 * stride); +- SD(dst_val0, p2); +- p2 += stride; +- SD(dst_val1, p2); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, p2, stride); ++ SD(dst_val0, p2 + 4 * stride); ++ SD(dst_val1, p2 + 5 * stride); + /* strong filter ends */ + } else if (flag0 == flag1) { /* weak only */ + /* weak filter */ +@@ -220,15 +218,15 @@ static void hevc_loopfilter_luma_hor_msa(uint8_t *src, int32_t stride, + abs_delta0 = __msa_add_a_h(delta0, (v8i16) zero); + abs_delta0 = (v8u16) abs_delta0 < temp1; + +- delta0 = CLIP_SH(delta0, tc_neg, tc_pos); ++ CLIP_SH(delta0, tc_neg, tc_pos); + +- temp0 = (v8u16) (delta0 + p0_src); +- temp0 = (v8u16) CLIP_SH_0_255(temp0); +- temp0 = (v8u16) __msa_bmz_v((v16u8) temp0, (v16u8) p0_src, ++ temp2 = (v8i16) (delta0 + p0_src); ++ CLIP_SH_0_255(temp2); ++ temp0 = (v8u16) __msa_bmz_v((v16u8) temp2, (v16u8) p0_src, + (v16u8) p_is_pcm_vec); + + temp2 = (v8i16) (q0_src - delta0); +- temp2 = CLIP_SH_0_255(temp2); ++ CLIP_SH_0_255(temp2); + temp2 = (v8i16) __msa_bmz_v((v16u8) temp2, (v16u8) q0_src, + (v16u8) q_is_pcm_vec); + +@@ -254,9 +252,9 @@ static void hevc_loopfilter_luma_hor_msa(uint8_t *src, int32_t stride, + delta1 -= (v8i16) p1_src; + delta1 += delta0; + delta1 >>= 1; +- delta1 = CLIP_SH(delta1, tc_neg, tc_pos); ++ CLIP_SH(delta1, tc_neg, tc_pos); + delta1 = (v8i16) p1_src + (v8i16) delta1; +- delta1 = CLIP_SH_0_255(delta1); ++ CLIP_SH_0_255(delta1); + delta1 = (v8i16) __msa_bmnz_v((v16u8) delta1, (v16u8) p1_src, + (v16u8) p_is_pcm_vec); + +@@ -264,9 +262,9 @@ static void hevc_loopfilter_luma_hor_msa(uint8_t *src, int32_t stride, + delta2 = delta2 - (v8i16) q1_src; + delta2 = delta2 - delta0; + delta2 = delta2 >> 1; +- delta2 = CLIP_SH(delta2, tc_neg, tc_pos); ++ CLIP_SH(delta2, tc_neg, tc_pos); + delta2 = (v8i16) q1_src + (v8i16) delta2; +- delta2 = CLIP_SH_0_255(delta2); ++ CLIP_SH_0_255(delta2); + delta2 = (v8i16) __msa_bmnz_v((v16u8) delta2, (v16u8) q1_src, + (v16u8) q_is_pcm_vec); + +@@ -288,7 +286,7 @@ static void hevc_loopfilter_luma_hor_msa(uint8_t *src, int32_t stride, + dst1 = __msa_bmz_v(dst1, dst3, (v16u8) cmp3); + + p2 += stride; +- ST8x4_UB(dst0, dst1, p2, stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, p2, stride); + /* weak filter ends */ + } else { /* strong + weak */ + /* strong filter */ +@@ -300,19 +298,19 @@ static void hevc_loopfilter_luma_hor_msa(uint8_t *src, int32_t stride, + temp1 = ((p3_src + p2_src) << 1) + p2_src + temp0; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 3); + temp2 = (v8i16) (temp1 - p2_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst0 = (v16u8) (temp2 + (v8i16) p2_src); + + temp1 = temp0 + p2_src; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 2); + temp2 = (v8i16) (temp1 - p1_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst1 = (v16u8) (temp2 + (v8i16) p1_src); + + temp1 = (temp0 << 1) + p2_src + q1_src; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 3); + temp2 = (v8i16) (temp1 - p0_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst2 = (v16u8) (temp2 + (v8i16) p0_src); + + dst0 = __msa_bmz_v(dst0, (v16u8) p2_src, (v16u8) p_is_pcm_vec); +@@ -325,19 +323,19 @@ static void hevc_loopfilter_luma_hor_msa(uint8_t *src, int32_t stride, + temp1 = ((q3_src + q2_src) << 1) + q2_src + temp0; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 3); + temp2 = (v8i16) (temp1 - q2_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst5 = (v16u8) (temp2 + (v8i16) q2_src); + + temp1 = temp0 + q2_src; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 2); + temp2 = (v8i16) (temp1 - q1_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst4 = (v16u8) (temp2 + (v8i16) q1_src); + + temp1 = (temp0 << 1) + p1_src + q2_src; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 3); + temp2 = (v8i16) (temp1 - q0_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst3 = (v16u8) (temp2 + (v8i16) q0_src); + + dst3 = __msa_bmz_v(dst3, (v16u8) q0_src, (v16u8) q_is_pcm_vec); +@@ -364,15 +362,15 @@ static void hevc_loopfilter_luma_hor_msa(uint8_t *src, int32_t stride, + abs_delta0 = __msa_add_a_h(delta0, (v8i16) zero); + abs_delta0 = (v8u16) abs_delta0 < temp1; + +- delta0 = CLIP_SH(delta0, tc_neg, tc_pos); ++ CLIP_SH(delta0, tc_neg, tc_pos); + +- temp0 = (v8u16) (delta0 + p0_src); +- temp0 = (v8u16) CLIP_SH_0_255(temp0); +- temp0 = (v8u16) __msa_bmz_v((v16u8) temp0, (v16u8) p0_src, ++ temp2 = (v8i16) (delta0 + p0_src); ++ CLIP_SH_0_255(temp2); ++ temp0 = (v8u16) __msa_bmz_v((v16u8) temp2, (v16u8) p0_src, + (v16u8) p_is_pcm_vec); + + temp2 = (v8i16) (q0_src - delta0); +- temp2 = CLIP_SH_0_255(temp2); ++ CLIP_SH_0_255(temp2); + temp2 = (v8i16) __msa_bmz_v((v16u8) temp2, (v16u8) q0_src, + (v16u8) q_is_pcm_vec); + +@@ -396,9 +394,9 @@ static void hevc_loopfilter_luma_hor_msa(uint8_t *src, int32_t stride, + delta1 -= (v8i16) p1_src; + delta1 += delta0; + delta1 >>= 1; +- delta1 = CLIP_SH(delta1, tc_neg, tc_pos); ++ CLIP_SH(delta1, tc_neg, tc_pos); + delta1 = (v8i16) p1_src + (v8i16) delta1; +- delta1 = CLIP_SH_0_255(delta1); ++ CLIP_SH_0_255(delta1); + delta1 = (v8i16) __msa_bmnz_v((v16u8) delta1, (v16u8) p1_src, + (v16u8) p_is_pcm_vec); + +@@ -406,9 +404,9 @@ static void hevc_loopfilter_luma_hor_msa(uint8_t *src, int32_t stride, + delta2 = delta2 - (v8i16) q1_src; + delta2 = delta2 - delta0; + delta2 = delta2 >> 1; +- delta2 = CLIP_SH(delta2, tc_neg, tc_pos); ++ CLIP_SH(delta2, tc_neg, tc_pos); + delta2 = (v8i16) q1_src + (v8i16) delta2; +- delta2 = CLIP_SH_0_255(delta2); ++ CLIP_SH_0_255(delta2); + delta2 = (v8i16) __msa_bmnz_v((v16u8) delta2, (v16u8) q1_src, + (v16u8) q_is_pcm_vec); + +@@ -442,11 +440,9 @@ static void hevc_loopfilter_luma_hor_msa(uint8_t *src, int32_t stride, + dst_val0 = __msa_copy_u_d((v2i64) dst2, 0); + dst_val1 = __msa_copy_u_d((v2i64) dst2, 1); + +- ST8x4_UB(dst0, dst1, p2, stride); +- p2 += (4 * stride); +- SD(dst_val0, p2); +- p2 += stride; +- SD(dst_val1, p2); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, p2, stride); ++ SD(dst_val0, p2 + 4 * stride); ++ SD(dst_val1, p2 + 5 * stride); + } + } + } +@@ -565,19 +561,19 @@ static void hevc_loopfilter_luma_ver_msa(uint8_t *src, int32_t stride, + temp1 = ((p3_src + p2_src) << 1) + p2_src + temp0; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 3); + temp2 = (v8i16) (temp1 - p2_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst0 = (v16u8) (temp2 + (v8i16) p2_src); + + temp1 = temp0 + p2_src; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 2); + temp2 = (v8i16) (temp1 - p1_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst1 = (v16u8) (temp2 + (v8i16) p1_src); + + temp1 = (temp0 << 1) + p2_src + q1_src; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 3); + temp2 = (v8i16) (temp1 - p0_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst2 = (v16u8) (temp2 + (v8i16) p0_src); + + dst0 = __msa_bmz_v(dst0, (v16u8) p2_src, (v16u8) p_is_pcm_vec); +@@ -589,19 +585,19 @@ static void hevc_loopfilter_luma_ver_msa(uint8_t *src, int32_t stride, + temp1 = ((q3_src + q2_src) << 1) + q2_src + temp0; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 3); + temp2 = (v8i16) (temp1 - q2_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst5 = (v16u8) (temp2 + (v8i16) q2_src); + + temp1 = temp0 + q2_src; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 2); + temp2 = (v8i16) (temp1 - q1_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst4 = (v16u8) (temp2 + (v8i16) q1_src); + + temp1 = (temp0 << 1) + p1_src + q2_src; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 3); + temp2 = (v8i16) (temp1 - q0_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst3 = (v16u8) (temp2 + (v8i16) q0_src); + + dst3 = __msa_bmz_v(dst3, (v16u8) q0_src, (v16u8) q_is_pcm_vec); +@@ -624,14 +620,14 @@ static void hevc_loopfilter_luma_ver_msa(uint8_t *src, int32_t stride, + abs_delta0 = __msa_add_a_h(delta0, (v8i16) zero); + abs_delta0 = (v8u16) abs_delta0 < temp1; + +- delta0 = CLIP_SH(delta0, tc_neg, tc_pos); +- temp0 = (v8u16) (delta0 + p0_src); +- temp0 = (v8u16) CLIP_SH_0_255(temp0); +- temp0 = (v8u16) __msa_bmz_v((v16u8) temp0, (v16u8) p0_src, ++ CLIP_SH(delta0, tc_neg, tc_pos); ++ temp2 = (v8i16) (delta0 + p0_src); ++ CLIP_SH_0_255(temp2); ++ temp0 = (v8u16) __msa_bmz_v((v16u8) temp2, (v16u8) p0_src, + (v16u8) p_is_pcm_vec); + + temp2 = (v8i16) (q0_src - delta0); +- temp2 = CLIP_SH_0_255(temp2); ++ CLIP_SH_0_255(temp2); + temp2 = (v8i16) __msa_bmz_v((v16u8) temp2, (v16u8) q0_src, + (v16u8) q_is_pcm_vec); + +@@ -653,9 +649,9 @@ static void hevc_loopfilter_luma_ver_msa(uint8_t *src, int32_t stride, + delta1 -= (v8i16) p1_src; + delta1 += delta0; + delta1 >>= 1; +- delta1 = CLIP_SH(delta1, tc_neg, tc_pos); ++ CLIP_SH(delta1, tc_neg, tc_pos); + delta1 = (v8i16) p1_src + (v8i16) delta1; +- delta1 = CLIP_SH_0_255(delta1); ++ CLIP_SH_0_255(delta1); + delta1 = (v8i16) __msa_bmnz_v((v16u8) delta1, (v16u8) p1_src, + (v16u8) p_is_pcm_vec); + +@@ -663,9 +659,9 @@ static void hevc_loopfilter_luma_ver_msa(uint8_t *src, int32_t stride, + delta2 = delta2 - (v8i16) q1_src; + delta2 = delta2 - delta0; + delta2 = delta2 >> 1; +- delta2 = CLIP_SH(delta2, tc_neg, tc_pos); ++ CLIP_SH(delta2, tc_neg, tc_pos); + delta2 = (v8i16) q1_src + (v8i16) delta2; +- delta2 = CLIP_SH_0_255(delta2); ++ CLIP_SH_0_255(delta2); + delta2 = (v8i16) __msa_bmnz_v((v16u8) delta2, (v16u8) q1_src, + (v16u8) q_is_pcm_vec); + +@@ -730,19 +726,19 @@ static void hevc_loopfilter_luma_ver_msa(uint8_t *src, int32_t stride, + temp1 = ((p3_src + p2_src) << 1) + p2_src + temp0; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 3); + temp2 = (v8i16) (temp1 - p2_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst0 = (v16u8) (temp2 + (v8i16) p2_src); + + temp1 = temp0 + p2_src; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 2); + temp2 = (v8i16) (temp1 - p1_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst1 = (v16u8) (temp2 + (v8i16) p1_src); + + temp1 = (temp0 << 1) + p2_src + q1_src; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 3); + temp2 = (v8i16) (temp1 - p0_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst2 = (v16u8) (temp2 + (v8i16) p0_src); + + dst0 = __msa_bmz_v(dst0, (v16u8) p2_src, (v16u8) p_is_pcm_vec); +@@ -754,19 +750,19 @@ static void hevc_loopfilter_luma_ver_msa(uint8_t *src, int32_t stride, + temp1 = ((q3_src + q2_src) << 1) + q2_src + temp0; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 3); + temp2 = (v8i16) (temp1 - q2_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst5 = (v16u8) (temp2 + (v8i16) q2_src); + + temp1 = temp0 + q2_src; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 2); + temp2 = (v8i16) (temp1 - q1_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst4 = (v16u8) (temp2 + (v8i16) q1_src); + + temp1 = (temp0 << 1) + p1_src + q2_src; + temp1 = (v8u16) __msa_srari_h((v8i16) temp1, 3); + temp2 = (v8i16) (temp1 - q0_src); +- temp2 = CLIP_SH(temp2, tc_neg, tc_pos); ++ CLIP_SH(temp2, tc_neg, tc_pos); + dst3 = (v16u8) (temp2 + (v8i16) q0_src); + + dst3 = __msa_bmz_v(dst3, (v16u8) q0_src, (v16u8) q_is_pcm_vec); +@@ -789,15 +785,15 @@ static void hevc_loopfilter_luma_ver_msa(uint8_t *src, int32_t stride, + abs_delta0 = __msa_add_a_h(delta0, (v8i16) zero); + abs_delta0 = (v8u16) abs_delta0 < temp1; + +- delta0 = CLIP_SH(delta0, tc_neg, tc_pos); ++ CLIP_SH(delta0, tc_neg, tc_pos); + +- temp0 = (v8u16) (delta0 + p0_src); +- temp0 = (v8u16) CLIP_SH_0_255(temp0); +- temp0 = (v8u16) __msa_bmz_v((v16u8) temp0, (v16u8) p0_src, ++ temp2 = (v8i16) (delta0 + p0_src); ++ CLIP_SH_0_255(temp2); ++ temp0 = (v8u16) __msa_bmz_v((v16u8) temp2, (v16u8) p0_src, + (v16u8) p_is_pcm_vec); + + temp2 = (v8i16) (q0_src - delta0); +- temp2 = CLIP_SH_0_255(temp2); ++ CLIP_SH_0_255(temp2); + temp2 = (v8i16) __msa_bmz_v((v16u8) temp2, (v16u8) q0_src, + (v16u8) q_is_pcm_vec); + +@@ -819,9 +815,9 @@ static void hevc_loopfilter_luma_ver_msa(uint8_t *src, int32_t stride, + delta1 -= (v8i16) p1_src; + delta1 += delta0; + delta1 >>= 1; +- delta1 = CLIP_SH(delta1, tc_neg, tc_pos); ++ CLIP_SH(delta1, tc_neg, tc_pos); + delta1 = (v8i16) p1_src + (v8i16) delta1; +- delta1 = CLIP_SH_0_255(delta1); ++ CLIP_SH_0_255(delta1); + delta1 = (v8i16) __msa_bmnz_v((v16u8) delta1, (v16u8) p1_src, + (v16u8) p_is_pcm_vec); + +@@ -829,9 +825,9 @@ static void hevc_loopfilter_luma_ver_msa(uint8_t *src, int32_t stride, + delta2 = delta2 - (v8i16) q1_src; + delta2 = delta2 - delta0; + delta2 = delta2 >> 1; +- delta2 = CLIP_SH(delta2, tc_neg, tc_pos); ++ CLIP_SH(delta2, tc_neg, tc_pos); + delta2 = (v8i16) q1_src + (v8i16) delta2; +- delta2 = CLIP_SH_0_255(delta2); ++ CLIP_SH_0_255(delta2); + delta2 = (v8i16) __msa_bmnz_v((v16u8) delta2, (v16u8) q1_src, + (v16u8) q_is_pcm_vec); + delta1 = (v8i16) __msa_bmz_v((v16u8) delta1, (v16u8) p1_src, +@@ -959,15 +955,15 @@ static void hevc_loopfilter_chroma_hor_msa(uint8_t *src, int32_t stride, + temp0 <<= 2; + temp0 += temp1; + delta = __msa_srari_h((v8i16) temp0, 3); +- delta = CLIP_SH(delta, tc_neg, tc_pos); ++ CLIP_SH(delta, tc_neg, tc_pos); + + temp0 = (v8i16) ((v8i16) p0 + delta); +- temp0 = CLIP_SH_0_255(temp0); ++ CLIP_SH_0_255(temp0); + temp0 = (v8i16) __msa_bmz_v((v16u8) temp0, (v16u8) p0, + (v16u8) p_is_pcm_vec); + + temp1 = (v8i16) ((v8i16) q0 - delta); +- temp1 = CLIP_SH_0_255(temp1); ++ CLIP_SH_0_255(temp1); + temp1 = (v8i16) __msa_bmz_v((v16u8) temp1, (v16u8) q0, + (v16u8) q_is_pcm_vec); + +@@ -976,7 +972,7 @@ static void hevc_loopfilter_chroma_hor_msa(uint8_t *src, int32_t stride, + temp1 = (v8i16) __msa_bmnz_v((v16u8) temp1, (v16u8) q0, (v16u8) tc_pos); + + temp0 = (v8i16) __msa_pckev_b((v16i8) temp1, (v16i8) temp0); +- ST8x2_UB(temp0, p0_ptr, stride); ++ ST_D2(temp0, 0, 1, p0_ptr, stride); + } + } + +@@ -1018,15 +1014,15 @@ static void hevc_loopfilter_chroma_ver_msa(uint8_t *src, int32_t stride, + temp0 <<= 2; + temp0 += temp1; + delta = __msa_srari_h((v8i16) temp0, 3); +- delta = CLIP_SH(delta, tc_neg, tc_pos); ++ CLIP_SH(delta, tc_neg, tc_pos); + + temp0 = (v8i16) ((v8i16) p0 + delta); +- temp0 = CLIP_SH_0_255(temp0); ++ CLIP_SH_0_255(temp0); + temp0 = (v8i16) __msa_bmz_v((v16u8) temp0, (v16u8) p0, + (v16u8) p_is_pcm_vec); + + temp1 = (v8i16) ((v8i16) q0 - delta); +- temp1 = CLIP_SH_0_255(temp1); ++ CLIP_SH_0_255(temp1); + temp1 = (v8i16) __msa_bmz_v((v16u8) temp1, (v16u8) q0, + (v16u8) q_is_pcm_vec); + +@@ -1037,9 +1033,7 @@ static void hevc_loopfilter_chroma_ver_msa(uint8_t *src, int32_t stride, + temp0 = (v8i16) __msa_ilvev_b((v16i8) temp1, (v16i8) temp0); + + src += 1; +- ST2x4_UB(temp0, 0, src, stride); +- src += (4 * stride); +- ST2x4_UB(temp0, 4, src, stride); ++ ST_H8(temp0, 0, 1, 2, 3, 4, 5, 6, 7, src, stride); + } + } + +@@ -1087,7 +1081,7 @@ static void hevc_sao_band_filter_4width_msa(uint8_t *dst, int32_t dst_stride, + LD_UB4(src, src_stride, src0, src1, src2, src3); + + /* store results */ +- ST4x4_UB(dst0, dst0, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(dst0, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + } + +@@ -1102,7 +1096,7 @@ static void hevc_sao_band_filter_4width_msa(uint8_t *dst, int32_t dst_stride, + dst0 = (v16i8) __msa_xori_b((v16u8) dst0, 128); + + /* store results */ +- ST4x4_UB(dst0, dst0, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(dst0, 0, 1, 2, 3, dst, dst_stride); + } + + static void hevc_sao_band_filter_8width_msa(uint8_t *dst, int32_t dst_stride, +@@ -1153,7 +1147,7 @@ static void hevc_sao_band_filter_8width_msa(uint8_t *dst, int32_t dst_stride, + XORI_B2_128_SB(dst0, dst1); + + /* store results */ +- ST8x4_UB(dst0, dst1, dst, dst_stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, dst_stride); + dst += dst_stride << 2; + } + +@@ -1173,7 +1167,7 @@ static void hevc_sao_band_filter_8width_msa(uint8_t *dst, int32_t dst_stride, + XORI_B2_128_SB(dst0, dst1); + + /* store results */ +- ST8x4_UB(dst0, dst1, dst, dst_stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, dst_stride); + } + + static void hevc_sao_band_filter_16multiple_msa(uint8_t *dst, +@@ -1363,6 +1357,7 @@ static void hevc_sao_edge_filter_0degree_8width_msa(uint8_t *dst, + v16u8 cmp_minus10, diff_minus10, diff_minus11; + v16u8 src0, src1, dst0, src_minus10, src_minus11, src_plus10, src_plus11; + v16i8 offset, sao_offset = LD_SB(sao_offset_val); ++ v16i8 zeros = { 0 }; + + sao_offset = __msa_pckev_b(sao_offset, sao_offset); + src -= 1; +@@ -1373,8 +1368,8 @@ static void hevc_sao_edge_filter_0degree_8width_msa(uint8_t *dst, + for (height -= 2; height; height -= 2) { + src += (src_stride << 1); + +- SLDI_B2_0_UB(src_minus10, src_minus11, src0, src1, 1); +- SLDI_B2_0_UB(src_minus10, src_minus11, src_plus10, src_plus11, 2); ++ SLDI_B2_UB(zeros, src_minus10, zeros, src_minus11, 1, src0, src1); ++ SLDI_B2_UB(zeros, src_minus10, zeros, src_minus11, 2, src_plus10, src_plus11); + + PCKEV_D2_UB(src_minus11, src_minus10, src_plus11, src_plus10, + src_minus10, src_plus10); +@@ -1410,8 +1405,8 @@ static void hevc_sao_edge_filter_0degree_8width_msa(uint8_t *dst, + dst += dst_stride; + } + +- SLDI_B2_0_UB(src_minus10, src_minus11, src0, src1, 1); +- SLDI_B2_0_UB(src_minus10, src_minus11, src_plus10, src_plus11, 2); ++ SLDI_B2_UB(zeros, src_minus10, zeros, src_minus11, 1, src0, src1); ++ SLDI_B2_UB(zeros, src_minus10, zeros, src_minus11, 2, src_plus10, src_plus11); + + PCKEV_D2_UB(src_minus11, src_minus10, src_plus11, src_plus10, src_minus10, + src_plus10); +@@ -1479,14 +1474,12 @@ static void hevc_sao_edge_filter_0degree_16multiple_msa(uint8_t *dst, + dst_ptr = dst + v_cnt; + LD_UB4(src_minus1, src_stride, src10, src11, src12, src13); + +- SLDI_B2_SB(src10, src11, src_minus10, src_minus11, src_zero0, +- src_zero1, 1); +- SLDI_B2_SB(src12, src13, src_minus12, src_minus13, src_zero2, +- src_zero3, 1); +- SLDI_B2_SB(src10, src11, src_minus10, src_minus11, src_plus10, +- src_plus11, 2); +- SLDI_B2_SB(src12, src13, src_minus12, src_minus13, src_plus12, +- src_plus13, 2); ++ SLDI_B4_SB(src10, src_minus10, src11, src_minus11, ++ src12, src_minus12, src13, src_minus13, 1, ++ src_zero0, src_zero1, src_zero2, src_zero3); ++ SLDI_B4_SB(src10, src_minus10, src11, src_minus11, ++ src12, src_minus12, src13, src_minus13, 2, ++ src_plus10, src_plus11, src_plus12, src_plus13); + + cmp_minus10 = ((v16u8) src_zero0 == src_minus10); + cmp_plus10 = ((v16u8) src_zero0 == (v16u8) src_plus10); +@@ -1886,6 +1879,7 @@ static void hevc_sao_edge_filter_45degree_4width_msa(uint8_t *dst, + v16u8 src_minus11, src10, src11; + v16i8 src_plus0, src_zero0, src_plus1, src_zero1, dst0; + v8i16 offset_mask0, offset_mask1; ++ v16i8 zeros = { 0 }; + + sao_offset = __msa_pckev_b(sao_offset, sao_offset); + +@@ -1898,8 +1892,8 @@ static void hevc_sao_edge_filter_45degree_4width_msa(uint8_t *dst, + for (height -= 2; height; height -= 2) { + src_orig += (src_stride << 1); + +- SLDI_B2_0_SB(src_minus11, src10, src_zero0, src_zero1, 1); +- SLDI_B2_0_SB(src10, src11, src_plus0, src_plus1, 2); ++ SLDI_B2_SB(zeros, src_minus11, zeros, src10, 1, src_zero0, src_zero1); ++ SLDI_B2_SB(zeros, src10, zeros, src11, 2, src_plus0, src_plus1); + + ILVR_B2_UB(src_plus0, src_minus10, src_plus1, src_minus11, src_minus10, + src_minus11); +@@ -1944,8 +1938,8 @@ static void hevc_sao_edge_filter_45degree_4width_msa(uint8_t *dst, + dst += dst_stride; + } + +- SLDI_B2_0_SB(src_minus11, src10, src_zero0, src_zero1, 1); +- SLDI_B2_0_SB(src10, src11, src_plus0, src_plus1, 2); ++ SLDI_B2_SB(zeros, src_minus11, zeros, src10, 1, src_zero0, src_zero1); ++ SLDI_B2_SB(zeros, src10, zeros, src11, 2, src_plus0, src_plus1); + + ILVR_B2_UB(src_plus0, src_minus10, src_plus1, src_minus11, src_minus10, + src_minus11); +@@ -1998,6 +1992,7 @@ static void hevc_sao_edge_filter_45degree_8width_msa(uint8_t *dst, + v16u8 src_minus10, src10, src_minus11, src11; + v16i8 src_zero0, src_plus10, src_zero1, src_plus11, dst0; + v8i16 offset_mask0, offset_mask1; ++ v16i8 zeros = { 0 }; + + sao_offset = __msa_pckev_b(sao_offset, sao_offset); + src_orig = src - 1; +@@ -2009,8 +2004,8 @@ static void hevc_sao_edge_filter_45degree_8width_msa(uint8_t *dst, + for (height -= 2; height; height -= 2) { + src_orig += (src_stride << 1); + +- SLDI_B2_0_SB(src_minus11, src10, src_zero0, src_zero1, 1); +- SLDI_B2_0_SB(src10, src11, src_plus10, src_plus11, 2); ++ SLDI_B2_SB(zeros, src_minus11, zeros, src10, 1, src_zero0, src_zero1); ++ SLDI_B2_SB(zeros, src10, zeros, src11, 2, src_plus10, src_plus11); + + ILVR_B2_UB(src_plus10, src_minus10, src_plus11, src_minus11, + src_minus10, src_minus11); +@@ -2054,8 +2049,8 @@ static void hevc_sao_edge_filter_45degree_8width_msa(uint8_t *dst, + dst += dst_stride; + } + +- SLDI_B2_0_SB(src_minus11, src10, src_zero0, src_zero1, 1); +- SLDI_B2_0_SB(src10, src11, src_plus10, src_plus11, 2); ++ SLDI_B2_SB(zeros, src_minus11, zeros, src10, 1, src_zero0, src_zero1); ++ SLDI_B2_SB(zeros, src10, zeros, src11, 2, src_plus10, src_plus11); + ILVR_B2_UB(src_plus10, src_minus10, src_plus11, src_minus11, src_minus10, + src_minus11); + ILVR_B2_SB(src_zero0, src_zero0, src_zero1, src_zero1, src_zero0, +@@ -2136,12 +2131,11 @@ static void hevc_sao_edge_filter_45degree_16multiple_msa(uint8_t *dst, + src_plus13 = LD_UB(src + 1 + v_cnt + (src_stride << 2)); + src_orig += 16; + +- SLDI_B2_SB(src10, src11, src_minus11, src_minus12, src_zero0, +- src_zero1, 1); +- SLDI_B2_SB(src12, src13, src_minus13, src_minus14, src_zero2, +- src_zero3, 1); +- SLDI_B2_SB(src11, src12, src_minus12, src_minus13, src_plus10, +- src_plus11, 2); ++ SLDI_B4_SB(src10, src_minus11, src11, src_minus12, ++ src12, src_minus13, src13, src_minus14, 1, ++ src_zero0, src_zero1, src_zero2, src_zero3); ++ SLDI_B2_SB(src11, src_minus12, src12, src_minus13, 2, src_plus10, ++ src_plus11); + + src_plus12 = __msa_sldi_b((v16i8) src13, (v16i8) src_minus14, 2); + +@@ -2234,6 +2228,7 @@ static void hevc_sao_edge_filter_135degree_4width_msa(uint8_t *dst, + v16u8 cmp_minus10, diff_minus10, cmp_minus11, diff_minus11; + v16u8 src_minus10, src10, src_minus11, src11; + v8i16 offset_mask0, offset_mask1; ++ v16i8 zeros = { 0 }; + + sao_offset = __msa_pckev_b(sao_offset, sao_offset); + src_orig = src - 1; +@@ -2245,8 +2240,8 @@ static void hevc_sao_edge_filter_135degree_4width_msa(uint8_t *dst, + for (height -= 2; height; height -= 2) { + src_orig += (src_stride << 1); + +- SLDI_B2_0_SB(src_minus11, src10, src_zero0, src_zero1, 1); +- SLDI_B2_0_UB(src_minus10, src_minus11, src_minus10, src_minus11, 2); ++ SLDI_B2_SB(zeros, src_minus11, zeros, src10, 1, src_zero0, src_zero1); ++ SLDI_B2_UB(zeros, src_minus10, zeros, src_minus11, 2, src_minus10, src_minus11); + + ILVR_B2_UB(src10, src_minus10, src11, src_minus11, src_minus10, + src_minus11); +@@ -2292,8 +2287,8 @@ static void hevc_sao_edge_filter_135degree_4width_msa(uint8_t *dst, + dst += dst_stride; + } + +- SLDI_B2_0_SB(src_minus11, src10, src_zero0, src_zero1, 1); +- SLDI_B2_0_UB(src_minus10, src_minus11, src_minus10, src_minus11, 2); ++ SLDI_B2_SB(zeros, src_minus11, zeros, src10, 1, src_zero0, src_zero1); ++ SLDI_B2_UB(zeros, src_minus10, zeros, src_minus11, 2, src_minus10, src_minus11); + + ILVR_B2_UB(src10, src_minus10, src11, src_minus11, src_minus10, + src_minus11); +@@ -2348,6 +2343,7 @@ static void hevc_sao_edge_filter_135degree_8width_msa(uint8_t *dst, + v16u8 src_minus10, src10, src_minus11, src11; + v16i8 src_zero0, src_zero1, dst0; + v8i16 offset_mask0, offset_mask1; ++ v16i8 zeros = { 0 }; + + sao_offset = __msa_pckev_b(sao_offset, sao_offset); + src_orig = src - 1; +@@ -2359,8 +2355,8 @@ static void hevc_sao_edge_filter_135degree_8width_msa(uint8_t *dst, + for (height -= 2; height; height -= 2) { + src_orig += (src_stride << 1); + +- SLDI_B2_0_SB(src_minus11, src10, src_zero0, src_zero1, 1); +- SLDI_B2_0_UB(src_minus10, src_minus11, src_minus10, src_minus11, 2); ++ SLDI_B2_SB(zeros, src_minus11, zeros, src10, 1, src_zero0, src_zero1); ++ SLDI_B2_UB(zeros, src_minus10, zeros, src_minus11, 2, src_minus10, src_minus11); + ILVR_B2_UB(src10, src_minus10, src11, src_minus11, src_minus10, + src_minus11); + ILVR_B2_SB(src_zero0, src_zero0, src_zero1, src_zero1, src_zero0, +@@ -2404,8 +2400,8 @@ static void hevc_sao_edge_filter_135degree_8width_msa(uint8_t *dst, + dst += dst_stride; + } + +- SLDI_B2_0_SB(src_minus11, src10, src_zero0, src_zero1, 1); +- SLDI_B2_0_UB(src_minus10, src_minus11, src_minus10, src_minus11, 2); ++ SLDI_B2_SB(zeros, src_minus11, zeros, src10, 1, src_zero0, src_zero1); ++ SLDI_B2_UB(zeros, src_minus10, zeros, src_minus11, 2, src_minus10, src_minus11); + ILVR_B2_UB(src10, src_minus10, src11, src_minus11, src_minus10, + src_minus11); + ILVR_B2_SB(src_zero0, src_zero0, src_zero1, src_zero1, src_zero0, +diff --git a/libavcodec/mips/hevc_mc_bi_msa.c b/libavcodec/mips/hevc_mc_bi_msa.c +index b555517..c6c8d27 100644 +--- a/libavcodec/mips/hevc_mc_bi_msa.c ++++ b/libavcodec/mips/hevc_mc_bi_msa.c +@@ -48,7 +48,7 @@ static const uint8_t ff_hevc_mask_arr[16 * 2] __attribute__((aligned(0x40))) = { + { \ + ADDS_SH2_SH(vec0, in0, vec1, in1, out0, out1); \ + SRARI_H2_SH(out0, out1, rnd_val); \ +- CLIP_SH2_0_255_MAX_SATU(out0, out1); \ ++ CLIP_SH2_0_255(out0, out1); \ + } + + #define HEVC_BI_RND_CLIP4_MAX_SATU(in0, in1, in2, in3, vec0, vec1, vec2, \ +@@ -83,10 +83,10 @@ static void hevc_bi_copy_4w_msa(uint8_t *src0_ptr, + dst0 <<= 6; + dst0 += in0; + dst0 = __msa_srari_h(dst0, 7); +- dst0 = CLIP_SH_0_255_MAX_SATU(dst0); ++ CLIP_SH_0_255(dst0); + + dst0 = (v8i16) __msa_pckev_b((v16i8) dst0, (v16i8) dst0); +- ST4x2_UB(dst0, dst, dst_stride); ++ ST_W2(dst0, 0, 1, dst, dst_stride); + } else if (4 == height) { + LW4(src0_ptr, src_stride, tp0, tp1, tp2, tp3); + INSERT_W4_SB(tp0, tp1, tp2, tp3, src0); +@@ -97,7 +97,7 @@ static void hevc_bi_copy_4w_msa(uint8_t *src0_ptr, + SLLI_2V(dst0, dst1, 6); + HEVC_BI_RND_CLIP2_MAX_SATU(in0, in1, dst0, dst1, 7, dst0, dst1); + dst0 = (v8i16) __msa_pckev_b((v16i8) dst1, (v16i8) dst0); +- ST4x4_UB(dst0, dst0, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(dst0, 0, 1, 2, 3, dst, dst_stride); + } else if (0 == height % 8) { + for (loop_cnt = (height >> 3); loop_cnt--;) { + LW4(src0_ptr, src_stride, tp0, tp1, tp2, tp3); +@@ -120,7 +120,7 @@ static void hevc_bi_copy_4w_msa(uint8_t *src0_ptr, + HEVC_BI_RND_CLIP4_MAX_SATU(in0, in1, in2, in3, dst0, dst1, dst2, + dst3, 7, dst0, dst1, dst2, dst3); + PCKEV_B2_SH(dst1, dst0, dst3, dst2, dst0, dst1); +- ST4x8_UB(dst0, dst1, dst, dst_stride); ++ ST_W8(dst0, dst1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + dst += (8 * dst_stride); + } + } +@@ -165,9 +165,15 @@ static void hevc_bi_copy_6w_msa(uint8_t *src0_ptr, + 7, dst4, dst5, dst6, dst7); + PCKEV_B2_UB(dst1, dst0, dst3, dst2, out0, out1); + PCKEV_B2_UB(dst5, dst4, dst7, dst6, out2, out3); +- ST6x4_UB(out0, out1, dst, dst_stride); ++ ST_W2(out0, 0, 2, dst, dst_stride); ++ ST_H2(out0, 2, 6, dst + 4, dst_stride); ++ ST_W2(out1, 0, 2, dst + 2 * dst_stride, dst_stride); ++ ST_H2(out1, 2, 6, dst + 2 * dst_stride + 4, dst_stride); + dst += (4 * dst_stride); +- ST6x4_UB(out2, out3, dst, dst_stride); ++ ST_W2(out2, 0, 2, dst, dst_stride); ++ ST_H2(out2, 2, 6, dst + 4, dst_stride); ++ ST_W2(out3, 0, 2, dst + 2 * dst_stride, dst_stride); ++ ST_H2(out3, 2, 6, dst + 2 * dst_stride + 4, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -195,7 +201,7 @@ static void hevc_bi_copy_8w_msa(uint8_t *src0_ptr, + SLLI_2V(dst0, dst1, 6); + HEVC_BI_RND_CLIP2_MAX_SATU(in0, in1, dst0, dst1, 7, dst0, dst1); + out0 = (v16u8) __msa_pckev_b((v16i8) dst1, (v16i8) dst0); +- ST8x2_UB(out0, dst, dst_stride); ++ ST_D2(out0, 0, 1, dst, dst_stride); + } else if (4 == height) { + LD4(src0_ptr, src_stride, tp0, tp1, tp2, tp3); + INSERT_D2_SB(tp0, tp1, src0); +@@ -207,7 +213,7 @@ static void hevc_bi_copy_8w_msa(uint8_t *src0_ptr, + HEVC_BI_RND_CLIP4_MAX_SATU(in0, in1, in2, in3, dst0, dst1, dst2, dst3, + 7, dst0, dst1, dst2, dst3); + PCKEV_B2_UB(dst1, dst0, dst3, dst2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + } else if (6 == height) { + LD4(src0_ptr, src_stride, tp0, tp1, tp2, tp3); + src0_ptr += 4 * src_stride; +@@ -225,9 +231,8 @@ static void hevc_bi_copy_8w_msa(uint8_t *src0_ptr, + 7, dst0, dst1, dst2, dst3); + HEVC_BI_RND_CLIP2_MAX_SATU(in4, in5, dst4, dst5, 7, dst4, dst5); + PCKEV_B3_UB(dst1, dst0, dst3, dst2, dst5, dst4, out0, out1, out2); +- ST8x4_UB(out0, out1, dst, dst_stride); +- dst += (4 * dst_stride); +- ST8x2_UB(out2, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); ++ ST_D2(out2, 0, 1, dst + 4 * dst_stride, dst_stride); + } else if (0 == height % 8) { + uint32_t loop_cnt; + +@@ -255,7 +260,7 @@ static void hevc_bi_copy_8w_msa(uint8_t *src0_ptr, + dst7, 7, dst4, dst5, dst6, dst7); + PCKEV_B2_UB(dst1, dst0, dst3, dst2, out0, out1); + PCKEV_B2_UB(dst5, dst4, dst7, dst6, out2, out3); +- ST8x8_UB(out0, out1, out2, out3, dst, dst_stride); ++ ST_D8(out0, out1, out2, out3, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride); + dst += (8 * dst_stride); + } + } +@@ -294,7 +299,8 @@ static void hevc_bi_copy_12w_msa(uint8_t *src0_ptr, + 7, dst0, dst1, dst2, dst3); + HEVC_BI_RND_CLIP2_MAX_SATU(in4, in5, dst4, dst5, 7, dst4, dst5); + PCKEV_B3_UB(dst1, dst0, dst3, dst2, dst5, dst4, out0, out1, out2); +- ST12x4_UB(out0, out1, out2, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); ++ ST_W4(out2, 0, 1, 2, 3, dst + 8, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -378,7 +384,7 @@ static void hevc_bi_copy_24w_msa(uint8_t *src0_ptr, + PCKEV_B3_UB(dst1, dst0, dst3, dst2, dst5, dst4, out0, out1, out2); + PCKEV_B3_UB(dst7, dst6, dst9, dst8, dst11, dst10, out3, out4, out5); + ST_UB4(out0, out1, out3, out4, dst, dst_stride); +- ST8x4_UB(out2, out5, dst + 16, dst_stride); ++ ST_D4(out2, out5, 0, 1, 0, 1, dst + 16, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -588,7 +594,7 @@ static void hevc_hz_bi_8t_4w_msa(uint8_t *src0_ptr, + dst0, dst1, dst2, dst3, 7, dst0, dst1, dst2, dst3); + + PCKEV_B2_SH(dst1, dst0, dst3, dst2, dst0, dst1); +- ST4x8_UB(dst0, dst1, dst, dst_stride); ++ ST_W8(dst0, dst1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + dst += (8 * dst_stride); + } + } +@@ -656,7 +662,7 @@ static void hevc_hz_bi_8t_8w_msa(uint8_t *src0_ptr, + dst0, dst1, dst2, dst3, 7, dst0, dst1, dst2, dst3); + + PCKEV_B2_SH(dst1, dst0, dst3, dst2, dst0, dst1); +- ST8x4_UB(dst0, dst1, dst, dst_stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -733,7 +739,7 @@ static void hevc_hz_bi_8t_12w_msa(uint8_t *src0_ptr, + HEVC_BI_RND_CLIP2(in0, in1, dst0, dst1, 7, dst0, dst1); + dst2 = __msa_adds_s_h(in2, dst2); + dst2 = __msa_srari_h(dst2, 7); +- dst2 = CLIP_SH_0_255(dst2); ++ CLIP_SH_0_255(dst2); + PCKEV_B2_SH(dst1, dst0, dst2, dst2, dst0, dst1); + + tmp2 = __msa_copy_s_d((v2i64) dst0, 0); +@@ -882,7 +888,7 @@ static void hevc_hz_bi_8t_24w_msa(uint8_t *src0_ptr, + HEVC_BI_RND_CLIP2(in0, in1, dst0, dst1, 7, dst0, dst1); + dst2 = __msa_adds_s_h(dst2, in2); + dst2 = __msa_srari_h(dst2, 7); +- dst2 = CLIP_SH_0_255(dst2); ++ CLIP_SH_0_255(dst2); + + PCKEV_B2_SB(dst1, dst0, dst2, dst2, tmp0, tmp1); + dst_val0 = __msa_copy_u_d((v2i64) tmp1, 0); +@@ -1242,7 +1248,7 @@ static void hevc_vt_bi_8t_4w_msa(uint8_t *src0_ptr, + dst10, dst32, dst54, dst76); + + PCKEV_B2_SH(dst32, dst10, dst76, dst54, dst10, dst54); +- ST4x8_UB(dst10, dst54, dst, dst_stride); ++ ST_W8(dst10, dst54, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + dst += (8 * dst_stride); + + src2110 = src10998; +@@ -1316,7 +1322,7 @@ static void hevc_vt_bi_8t_8w_msa(uint8_t *src0_ptr, + dst0_r, dst1_r, dst2_r, dst3_r); + + PCKEV_B2_SH(dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst1_r); +- ST8x4_UB(dst0_r, dst1_r, dst, dst_stride); ++ ST_D4(dst0_r, dst1_r, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + + src10_r = src54_r; +@@ -1420,7 +1426,8 @@ static void hevc_vt_bi_8t_12w_msa(uint8_t *src0_ptr, + + PCKEV_B2_SH(dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst1_r); + dst0_l = (v8i16) __msa_pckev_b((v16i8) dst1_l, (v16i8) dst0_l); +- ST12x4_UB(dst0_r, dst1_r, dst0_l, dst, dst_stride); ++ ST_D4(dst0_r, dst1_r, 0, 1, 0, 1, dst, dst_stride); ++ ST_W4(dst0_l, 0, 1, 2, 3, dst + 8, dst_stride); + dst += (4 * dst_stride); + + src10_r = src54_r; +@@ -1719,9 +1726,9 @@ static void hevc_hv_bi_8t_4w_msa(uint8_t *src0_ptr, + ADDS_SH2_SH(out0, in0, out1, in1, out0, out1); + ADDS_SH2_SH(out0, const_vec, out1, const_vec, out0, out1); + SRARI_H2_SH(out0, out1, 7); +- CLIP_SH2_0_255_MAX_SATU(out0, out1); ++ CLIP_SH2_0_255(out0, out1); + out = (v16u8) __msa_pckev_b((v16i8) out1, (v16i8) out0); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + + dst10 = dst54; +@@ -1847,9 +1854,9 @@ static void hevc_hv_bi_8t_8multx1mult_msa(uint8_t *src0_ptr, + tmp = __msa_pckev_h((v8i16) dst0_l, (v8i16) dst0_r); + ADDS_SH2_SH(tmp, in0, tmp, const_vec, tmp, tmp); + tmp = __msa_srari_h(tmp, 7); +- tmp = CLIP_SH_0_255_MAX_SATU(tmp); ++ CLIP_SH_0_255(tmp); + out = (v16u8) __msa_pckev_b((v16i8) tmp, (v16i8) tmp); +- ST8x1_UB(out, dst_tmp); ++ ST_D1(out, 0, dst_tmp); + dst_tmp += dst_stride; + + dst0 = dst1; +@@ -1993,9 +2000,9 @@ static void hevc_hv_bi_8t_12w_msa(uint8_t *src0_ptr, + tmp = __msa_pckev_h((v8i16) dst0_l, (v8i16) dst0_r); + ADDS_SH2_SH(tmp, in0, tmp, const_vec, tmp, tmp); + tmp = __msa_srari_h(tmp, 7); +- tmp = CLIP_SH_0_255_MAX_SATU(tmp); ++ CLIP_SH_0_255(tmp); + out = (v16u8) __msa_pckev_b((v16i8) tmp, (v16i8) tmp); +- ST8x1_UB(out, dst_tmp); ++ ST_D1(out, 0, dst_tmp); + dst_tmp += dst_stride; + + dst0 = dst1; +@@ -2081,9 +2088,9 @@ static void hevc_hv_bi_8t_12w_msa(uint8_t *src0_ptr, + ADDS_SH2_SH(out0, in0, out1, in1, out0, out1); + ADDS_SH2_SH(out0, const_vec, out1, const_vec, out0, out1); + SRARI_H2_SH(out0, out1, 7); +- CLIP_SH2_0_255_MAX_SATU(out0, out1); ++ CLIP_SH2_0_255(out0, out1); + out = (v16u8) __msa_pckev_b((v16i8) out1, (v16i8) out0); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + + dst10 = dst54; +@@ -2208,10 +2215,10 @@ static void hevc_hz_bi_4t_4x2_msa(uint8_t *src0_ptr, + + tmp0 = __msa_adds_s_h(tmp0, in0); + tmp0 = __msa_srari_h(tmp0, 7); +- tmp0 = CLIP_SH_0_255(tmp0); ++ CLIP_SH_0_255(tmp0); + dst0 = __msa_pckev_b((v16i8) tmp0, (v16i8) tmp0); + +- ST4x2_UB(dst0, dst, dst_stride); ++ ST_W2(dst0, 0, 1, dst, dst_stride); + } + + static void hevc_hz_bi_4t_4x4_msa(uint8_t *src0_ptr, +@@ -2257,7 +2264,7 @@ static void hevc_hz_bi_4t_4x4_msa(uint8_t *src0_ptr, + HEVC_BI_RND_CLIP2(in0, in1, tmp0, tmp1, 7, tmp0, tmp1); + dst0 = __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0); + +- ST4x4_UB(dst0, dst0, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(dst0, 0, 1, 2, 3, dst, dst_stride); + } + + static void hevc_hz_bi_4t_4x8multiple_msa(uint8_t *src0_ptr, +@@ -2318,7 +2325,7 @@ static void hevc_hz_bi_4t_4x8multiple_msa(uint8_t *src0_ptr, + tmp0, tmp1, tmp2, tmp3, 7, tmp0, tmp1, tmp2, tmp3); + + PCKEV_B2_SB(tmp1, tmp0, tmp3, tmp2, dst0, dst1); +- ST4x8_UB(dst0, dst1, dst, dst_stride); ++ ST_W8(dst0, dst1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + dst += (8 * dst_stride); + } + } +@@ -2398,7 +2405,10 @@ static void hevc_hz_bi_4t_6w_msa(uint8_t *src0_ptr, + dst0, dst1, dst2, dst3, 7, dst0, dst1, dst2, dst3); + + PCKEV_B2_SH(dst1, dst0, dst3, dst2, dst0, dst1); +- ST6x4_UB(dst0, dst1, dst, dst_stride); ++ ST_W2(dst0, 0, 2, dst, dst_stride); ++ ST_H2(dst0, 2, 6, dst + 4, dst_stride); ++ ST_W2(dst1, 0, 2, dst + 2 * dst_stride, dst_stride); ++ ST_H2(dst1, 2, 6, dst + 2 * dst_stride + 4, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -2443,7 +2453,7 @@ static void hevc_hz_bi_4t_8x2_msa(uint8_t *src0_ptr, + HEVC_BI_RND_CLIP2(in0, in1, dst0, dst1, 7, dst0, dst1); + + dst0 = (v8i16) __msa_pckev_b((v16i8) dst1, (v16i8) dst0); +- ST8x2_UB(dst0, dst, dst_stride); ++ ST_D2(dst0, 0, 1, dst, dst_stride); + } + + static void hevc_hz_bi_4t_8x6_msa(uint8_t *src0_ptr, +@@ -2506,9 +2516,8 @@ static void hevc_hz_bi_4t_8x6_msa(uint8_t *src0_ptr, + + PCKEV_B2_SH(dst1, dst0, dst3, dst2, dst0, dst1); + dst2 = (v8i16) __msa_pckev_b((v16i8) dst5, (v16i8) dst4); +- ST8x4_UB(dst0, dst1, dst, dst_stride); +- dst += (4 * dst_stride); +- ST8x2_UB(dst2, dst, dst_stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, dst_stride); ++ ST_D2(dst2, 0, 1, dst + 4 * dst_stride, dst_stride); + } + + static void hevc_hz_bi_4t_8x4multiple_msa(uint8_t *src0_ptr, +@@ -2564,7 +2573,7 @@ static void hevc_hz_bi_4t_8x4multiple_msa(uint8_t *src0_ptr, + dst0, dst1, dst2, dst3, 7, dst0, dst1, dst2, dst3); + + PCKEV_B2_SH(dst1, dst0, dst3, dst2, dst0, dst1); +- ST8x4_UB(dst0, dst1, dst, dst_stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -2659,7 +2668,8 @@ static void hevc_hz_bi_4t_12w_msa(uint8_t *src0_ptr, + + PCKEV_B2_SH(dst1, dst0, dst3, dst2, dst0, dst1); + dst2 = (v8i16) __msa_pckev_b((v16i8) dst5, (v16i8) dst4); +- ST12x4_UB(dst0, dst1, dst2, dst, dst_stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, dst_stride); ++ ST_W4(dst2, 0, 1, 2, 3, dst + 8, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -2825,7 +2835,7 @@ static void hevc_hz_bi_4t_24w_msa(uint8_t *src0_ptr, + dst0, dst1, dst2, dst3, 7, dst0, dst1, dst2, dst3); + + PCKEV_B2_SH(dst1, dst0, dst3, dst2, dst0, dst1); +- ST8x4_UB(dst0, dst1, dst_tmp, dst_stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst_tmp, dst_stride); + dst_tmp += (4 * dst_stride); + } + } +@@ -2933,10 +2943,10 @@ static void hevc_vt_bi_4t_4x2_msa(uint8_t *src0_ptr, + DPADD_SB2_SH(src2110, src4332, filt0, filt1, dst10, dst10); + dst10 = __msa_adds_s_h(dst10, in0); + dst10 = __msa_srari_h(dst10, 7); +- dst10 = CLIP_SH_0_255(dst10); ++ CLIP_SH_0_255(dst10); + + dst10 = (v8i16) __msa_pckev_b((v16i8) dst10, (v16i8) dst10); +- ST4x2_UB(dst10, dst, dst_stride); ++ ST_W2(dst10, 0, 1, dst, dst_stride); + } + + static void hevc_vt_bi_4t_4x4_msa(uint8_t *src0_ptr, +@@ -2985,7 +2995,7 @@ static void hevc_vt_bi_4t_4x4_msa(uint8_t *src0_ptr, + HEVC_BI_RND_CLIP2(in0, in1, dst10, dst32, 7, dst10, dst32); + + dst10 = (v8i16) __msa_pckev_b((v16i8) dst32, (v16i8) dst10); +- ST4x4_UB(dst10, dst10, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(dst10, 0, 1, 2, 3, dst, dst_stride); + } + + static void hevc_vt_bi_4t_4x8multiple_msa(uint8_t *src0_ptr, +@@ -3056,7 +3066,7 @@ static void hevc_vt_bi_4t_4x8multiple_msa(uint8_t *src0_ptr, + dst10, dst32, dst54, dst76); + + PCKEV_B2_SH(dst32, dst10, dst76, dst54, dst10, dst54); +- ST4x8_UB(dst10, dst54, dst, dst_stride); ++ ST_W8(dst10, dst54, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + dst += (8 * dst_stride); + } + } +@@ -3147,7 +3157,10 @@ static void hevc_vt_bi_4t_6w_msa(uint8_t *src0_ptr, + dst0_r, dst1_r, dst2_r, dst3_r); + + PCKEV_B2_SH(dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst1_r); +- ST6x4_UB(dst0_r, dst1_r, dst, dst_stride); ++ ST_W2(dst0_r, 0, 2, dst, dst_stride); ++ ST_H2(dst0_r, 2, 6, dst + 4, dst_stride); ++ ST_W2(dst1_r, 0, 2, dst + 2 * dst_stride, dst_stride); ++ ST_H2(dst1_r, 2, 6, dst + 2 * dst_stride + 4, dst_stride); + dst += (4 * dst_stride); + + LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3); +@@ -3171,7 +3184,10 @@ static void hevc_vt_bi_4t_6w_msa(uint8_t *src0_ptr, + dst0_r, dst1_r, dst2_r, dst3_r); + + PCKEV_B2_SH(dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst1_r); +- ST6x4_UB(dst0_r, dst1_r, dst, dst_stride); ++ ST_W2(dst0_r, 0, 2, dst, dst_stride); ++ ST_H2(dst0_r, 2, 6, dst + 4, dst_stride); ++ ST_W2(dst1_r, 0, 2, dst + 2 * dst_stride, dst_stride); ++ ST_H2(dst1_r, 2, 6, dst + 2 * dst_stride + 4, dst_stride); + dst += (4 * dst_stride); + } + +@@ -3216,7 +3232,7 @@ static void hevc_vt_bi_4t_8x2_msa(uint8_t *src0_ptr, + HEVC_BI_RND_CLIP2(in0, in1, dst0_r, dst1_r, 7, dst0_r, dst1_r); + dst0_r = (v8i16) __msa_pckev_b((v16i8) dst1_r, (v16i8) dst0_r); + +- ST8x2_UB(dst0_r, dst, dst_stride); ++ ST_D2(dst0_r, 0, 1, dst, dst_stride); + } + + static void hevc_vt_bi_4t_8x6_msa(uint8_t *src0_ptr, +@@ -3275,9 +3291,8 @@ static void hevc_vt_bi_4t_8x6_msa(uint8_t *src0_ptr, + + PCKEV_B2_SH(dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst1_r); + dst2_r = (v8i16) __msa_pckev_b((v16i8) dst5_r, (v16i8) dst4_r); +- ST8x4_UB(dst0_r, dst1_r, dst, dst_stride); +- dst += (4 * dst_stride); +- ST8x2_UB(dst2_r, dst, dst_stride); ++ ST_D4(dst0_r, dst1_r, 0, 1, 0, 1, dst, dst_stride); ++ ST_D2(dst2_r, 0, 1, dst + 4 * dst_stride, dst_stride); + } + + static void hevc_vt_bi_4t_8x4multiple_msa(uint8_t *src0_ptr, +@@ -3337,7 +3352,7 @@ static void hevc_vt_bi_4t_8x4multiple_msa(uint8_t *src0_ptr, + dst0_r, dst1_r, dst2_r, dst3_r); + + PCKEV_B2_SH(dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst1_r); +- ST8x4_UB(dst0_r, dst1_r, dst, dst_stride); ++ ST_D4(dst0_r, dst1_r, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -3436,7 +3451,8 @@ static void hevc_vt_bi_4t_12w_msa(uint8_t *src0_ptr, + + PCKEV_B2_SH(dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst1_r); + dst0_l = (v8i16) __msa_pckev_b((v16i8) dst1_l, (v16i8) dst0_l); +- ST12x4_UB(dst0_r, dst1_r, dst0_l, dst, dst_stride); ++ ST_D4(dst0_r, dst1_r, 0, 1, 0, 1, dst, dst_stride); ++ ST_W4(dst0_l, 0, 1, 2, 3, dst + 8, dst_stride); + dst += (4 * dst_stride); + + src2 = src6; +@@ -3610,7 +3626,7 @@ static void hevc_vt_bi_4t_24w_msa(uint8_t *src0_ptr, + PCKEV_B2_SH(dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); + dst2_r = (v8i16) __msa_pckev_b((v16i8) dst3_r, (v16i8) dst2_r); + ST_SH2(dst0_r, dst1_r, dst, dst_stride); +- ST8x2_UB(dst2_r, dst + 16, dst_stride); ++ ST_D2(dst2_r, 0, 1, dst + 16, dst_stride); + dst += (2 * dst_stride); + + /* 16width */ +@@ -3650,7 +3666,7 @@ static void hevc_vt_bi_4t_24w_msa(uint8_t *src0_ptr, + PCKEV_B2_SH(dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); + dst2_r = (v8i16) __msa_pckev_b((v16i8) dst3_r, (v16i8) dst2_r); + ST_SH2(dst0_r, dst1_r, dst, dst_stride); +- ST8x2_UB(dst2_r, dst + 16, dst_stride); ++ ST_D2(dst2_r, 0, 1, dst + 16, dst_stride); + dst += (2 * dst_stride); + } + } +@@ -3827,9 +3843,9 @@ static void hevc_hv_bi_4t_4x2_msa(uint8_t *src0_ptr, + tmp = __msa_pckev_h((v8i16) dst1, (v8i16) dst0); + tmp = __msa_adds_s_h(tmp, in0); + tmp = __msa_srari_h(tmp, 7); +- tmp = CLIP_SH_0_255_MAX_SATU(tmp); ++ CLIP_SH_0_255(tmp); + out = (v16u8) __msa_pckev_b((v16i8) tmp, (v16i8) tmp); +- ST4x2_UB(out, dst, dst_stride); ++ ST_W2(out, 0, 1, dst, dst_stride); + } + + static void hevc_hv_bi_4t_4x4_msa(uint8_t *src0_ptr, +@@ -3903,9 +3919,9 @@ static void hevc_hv_bi_4t_4x4_msa(uint8_t *src0_ptr, + PCKEV_H2_SH(dst1, dst0, dst3, dst2, tmp0, tmp1); + ADDS_SH2_SH(tmp0, in0, tmp1, in1, tmp0, tmp1); + SRARI_H2_SH(tmp0, tmp1, 7); +- CLIP_SH2_0_255_MAX_SATU(tmp0, tmp1); ++ CLIP_SH2_0_255(tmp0, tmp1); + out = (v16u8) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + } + + static void hevc_hv_bi_4t_4multx8mult_msa(uint8_t *src0_ptr, +@@ -4016,9 +4032,9 @@ static void hevc_hv_bi_4t_4multx8mult_msa(uint8_t *src0_ptr, + ADDS_SH4_SH(in0, tmp0, in1, tmp1, in2, tmp2, in3, tmp3, tmp0, tmp1, + tmp2, tmp3); + SRARI_H4_SH(tmp0, tmp1, tmp2, tmp3, 7); +- CLIP_SH4_0_255_MAX_SATU(tmp0, tmp1, tmp2, tmp3); ++ CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST4x8_UB(out0, out1, dst, dst_stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + dst += (8 * dst_stride); + + dst10_r = dst98_r; +@@ -4184,9 +4200,9 @@ static void hevc_hv_bi_4t_6w_msa(uint8_t *src0_ptr, + ADDS_SH4_SH(in0, tmp0, in1, tmp1, in2, tmp2, in3, tmp3, tmp0, tmp1, tmp2, + tmp3); + SRARI_H4_SH(tmp0, tmp1, tmp2, tmp3, 7); +- CLIP_SH4_0_255_MAX_SATU(tmp0, tmp1, tmp2, tmp3); ++ CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST4x8_UB(out0, out1, dst, dst_stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + + LW4(src1_ptr + 4, src2_stride, tpw0, tpw1, tpw2, tpw3); + src1_ptr += (4 * src2_stride); +@@ -4196,11 +4212,9 @@ static void hevc_hv_bi_4t_6w_msa(uint8_t *src0_ptr, + ADDS_SH2_SH(in4, const_vec, in5, const_vec, in4, in5); + ADDS_SH2_SH(in4, tmp4, in5, tmp5, tmp4, tmp5); + SRARI_H2_SH(tmp4, tmp5, 7); +- CLIP_SH2_0_255_MAX_SATU(tmp4, tmp5); ++ CLIP_SH2_0_255(tmp4, tmp5); + out2 = (v16u8) __msa_pckev_b((v16i8) tmp5, (v16i8) tmp4); +- ST2x4_UB(out2, 0, dst + 4, dst_stride); +- dst += 4 * dst_stride; +- ST2x4_UB(out2, 4, dst + 4, dst_stride); ++ ST_H8(out2, 0, 1, 2, 3, 4, 5, 6, 7, dst + 4, dst_stride); + } + + static void hevc_hv_bi_4t_8x2_msa(uint8_t *src0_ptr, +@@ -4272,9 +4286,9 @@ static void hevc_hv_bi_4t_8x2_msa(uint8_t *src0_ptr, + PCKEV_H2_SH(dst0_l, dst0_r, dst1_l, dst1_r, tmp0, tmp1); + ADDS_SH2_SH(in0, tmp0, in1, tmp1, tmp0, tmp1); + SRARI_H2_SH(tmp0, tmp1, 7); +- CLIP_SH2_0_255_MAX_SATU(tmp0, tmp1); ++ CLIP_SH2_0_255(tmp0, tmp1); + out = (v16u8) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0); +- ST8x2_UB(out, dst, dst_stride); ++ ST_D2(out, 0, 1, dst, dst_stride); + } + + static void hevc_hv_bi_4t_8multx4_msa(uint8_t *src0_ptr, +@@ -4366,9 +4380,9 @@ static void hevc_hv_bi_4t_8multx4_msa(uint8_t *src0_ptr, + ADDS_SH4_SH(in0, tmp0, in1, tmp1, in2, tmp2, in3, tmp3, + tmp0, tmp1, tmp2, tmp3); + SRARI_H4_SH(tmp0, tmp1, tmp2, tmp3, 7); +- CLIP_SH4_0_255_MAX_SATU(tmp0, tmp1, tmp2, tmp3); ++ CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + dst += 8; + } + } +@@ -4481,13 +4495,12 @@ static void hevc_hv_bi_4t_8x6_msa(uint8_t *src0_ptr, + ADDS_SH2_SH(in4, tmp4, in5, tmp5, tmp4, tmp5); + SRARI_H4_SH(tmp0, tmp1, tmp2, tmp3, 7); + SRARI_H2_SH(tmp4, tmp5, 7); +- CLIP_SH4_0_255_MAX_SATU(tmp0, tmp1, tmp2, tmp3); +- CLIP_SH2_0_255_MAX_SATU(tmp4, tmp5); ++ CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); ++ CLIP_SH2_0_255(tmp4, tmp5); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, out0, out1); + out2 = (v16u8) __msa_pckev_b((v16i8) tmp5, (v16i8) tmp4); +- ST8x4_UB(out0, out1, dst, dst_stride); +- dst += (4 * dst_stride); +- ST8x2_UB(out2, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); ++ ST_D2(out2, 0, 1, dst + 4 * dst_stride, dst_stride); + } + + static void hevc_hv_bi_4t_8multx4mult_msa(uint8_t *src0_ptr, +@@ -4597,9 +4610,9 @@ static void hevc_hv_bi_4t_8multx4mult_msa(uint8_t *src0_ptr, + ADDS_SH4_SH(in0, tmp0, in1, tmp1, in2, tmp2, in3, tmp3, + tmp0, tmp1, tmp2, tmp3); + SRARI_H4_SH(tmp0, tmp1, tmp2, tmp3, 7); +- CLIP_SH4_0_255_MAX_SATU(tmp0, tmp1, tmp2, tmp3); ++ CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST8x4_UB(out0, out1, dst_tmp, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst_tmp, dst_stride); + dst_tmp += (4 * dst_stride); + + dst10_r = dst54_r; +@@ -4747,9 +4760,9 @@ static void hevc_hv_bi_4t_12w_msa(uint8_t *src0_ptr, + ADDS_SH4_SH(in0, tmp0, in1, tmp1, in2, tmp2, in3, tmp3, + tmp0, tmp1, tmp2, tmp3); + SRARI_H4_SH(tmp0, tmp1, tmp2, tmp3, 7); +- CLIP_SH4_0_255_MAX_SATU(tmp0, tmp1, tmp2, tmp3); ++ CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST8x4_UB(out0, out1, dst_tmp, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst_tmp, dst_stride); + dst_tmp += (4 * dst_stride); + + dst10_r = dst54_r; +@@ -4833,9 +4846,9 @@ static void hevc_hv_bi_4t_12w_msa(uint8_t *src0_ptr, + ADDS_SH4_SH(in0, tmp0, in1, tmp1, in2, tmp2, in3, tmp3, + tmp0, tmp1, tmp2, tmp3); + SRARI_H4_SH(tmp0, tmp1, tmp2, tmp3, 7); +- CLIP_SH4_0_255_MAX_SATU(tmp0, tmp1, tmp2, tmp3); ++ CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST4x8_UB(out0, out1, dst, dst_stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + dst += (8 * dst_stride); + + dst10_r = dst98_r; +diff --git a/libavcodec/mips/hevc_mc_biw_msa.c b/libavcodec/mips/hevc_mc_biw_msa.c +index ea65f00..f775ea8 100644 +--- a/libavcodec/mips/hevc_mc_biw_msa.c ++++ b/libavcodec/mips/hevc_mc_biw_msa.c +@@ -66,7 +66,7 @@ static const uint8_t ff_hevc_mask_arr[16 * 2] __attribute__((aligned(0x40))) = { + out1_l = __msa_dpadd_s_w(offset, (v8i16) out1_l, (v8i16) wgt); \ + SRAR_W4_SW(out0_r, out1_r, out0_l, out1_l, rnd); \ + PCKEV_H2_SH(out0_l, out0_r, out1_l, out1_r, out0, out1); \ +- CLIP_SH2_0_255_MAX_SATU(out0, out1); \ ++ CLIP_SH2_0_255(out0, out1); \ + } + + #define HEVC_BIW_RND_CLIP4_MAX_SATU(in0, in1, in2, in3, vec0, vec1, vec2, \ +@@ -124,9 +124,9 @@ static void hevc_biwgt_copy_4w_msa(uint8_t *src0_ptr, + dst0_l = __msa_dpadd_s_w(offset_vec, (v8i16) dst0_l, weight_vec); + SRAR_W2_SW(dst0_r, dst0_l, rnd_vec); + dst0 = (v8i16) __msa_pckev_h((v8i16) dst0_l, (v8i16) dst0_r); +- dst0 = CLIP_SH_0_255_MAX_SATU(dst0); ++ CLIP_SH_0_255(dst0); + out0 = (v16u8) __msa_pckev_b((v16i8) dst0, (v16i8) dst0); +- ST4x2_UB(out0, dst, dst_stride); ++ ST_W2(out0, 0, 1, dst, dst_stride); + } else if (4 == height) { + LW4(src0_ptr, src_stride, tp0, tp1, tp2, tp3); + INSERT_W4_SB(tp0, tp1, tp2, tp3, src0); +@@ -138,7 +138,7 @@ static void hevc_biwgt_copy_4w_msa(uint8_t *src0_ptr, + HEVC_BIW_RND_CLIP2_MAX_SATU(dst0, dst1, in0, in1, weight_vec, rnd_vec, + offset_vec, dst0, dst1); + out0 = (v16u8) __msa_pckev_b((v16i8) dst1, (v16i8) dst0); +- ST4x4_UB(out0, out0, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out0, 0, 1, 2, 3, dst, dst_stride); + } else if (0 == height % 8) { + for (loop_cnt = (height >> 3); loop_cnt--;) { + LW4(src0_ptr, src_stride, tp0, tp1, tp2, tp3); +@@ -162,7 +162,7 @@ static void hevc_biwgt_copy_4w_msa(uint8_t *src0_ptr, + in3, weight_vec, rnd_vec, offset_vec, + dst0, dst1, dst2, dst3); + PCKEV_B2_UB(dst1, dst0, dst3, dst2, out0, out1); +- ST4x8_UB(out0, out1, dst, dst_stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + dst += (8 * dst_stride); + } + } +@@ -214,7 +214,10 @@ static void hevc_biwgt_copy_6w_msa(uint8_t *src0_ptr, + weight_vec, rnd_vec, offset_vec, + dst0, dst1, dst2, dst3); + PCKEV_B2_UB(dst1, dst0, dst3, dst2, out0, out1); +- ST6x4_UB(out0, out1, dst, dst_stride); ++ ST_W2(out0, 0, 2, dst, dst_stride); ++ ST_H2(out0, 2, 6, dst + 4, dst_stride); ++ ST_W2(out1, 0, 2, dst + 2 * dst_stride, dst_stride); ++ ST_H2(out1, 2, 6, dst + 2 * dst_stride + 4, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -261,7 +264,7 @@ static void hevc_biwgt_copy_8w_msa(uint8_t *src0_ptr, + dst0, dst1); + + out0 = (v16u8) __msa_pckev_b((v16i8) dst1, (v16i8) dst0); +- ST8x2_UB(out0, dst, dst_stride); ++ ST_D2(out0, 0, 1, dst, dst_stride); + } else if (6 == height) { + LD4(src0_ptr, src_stride, tp0, tp1, tp2, tp3); + src0_ptr += 4 * src_stride; +@@ -281,9 +284,8 @@ static void hevc_biwgt_copy_8w_msa(uint8_t *src0_ptr, + HEVC_BIW_RND_CLIP2_MAX_SATU(dst4, dst5, in4, in5, weight_vec, rnd_vec, + offset_vec, dst4, dst5); + PCKEV_B3_UB(dst1, dst0, dst3, dst2, dst5, dst4, out0, out1, out2); +- ST8x4_UB(out0, out1, dst, dst_stride); +- dst += (4 * dst_stride); +- ST8x2_UB(out2, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); ++ ST_D2(out2, 0, 1, dst + 4 * dst_stride, dst_stride); + } else if (0 == height % 4) { + uint32_t loop_cnt; + +@@ -302,7 +304,7 @@ static void hevc_biwgt_copy_8w_msa(uint8_t *src0_ptr, + in3, weight_vec, rnd_vec, offset_vec, + dst0, dst1, dst2, dst3); + PCKEV_B2_UB(dst1, dst0, dst3, dst2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -361,7 +363,8 @@ static void hevc_biwgt_copy_12w_msa(uint8_t *src0_ptr, + HEVC_BIW_RND_CLIP2_MAX_SATU(dst4, dst5, in4, in5, weight_vec, rnd_vec, + offset_vec, dst4, dst5); + PCKEV_B3_UB(dst1, dst0, dst3, dst2, dst5, dst4, out0, out1, out2); +- ST12x4_UB(out0, out1, out2, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); ++ ST_W4(out2, 0, 1, 2, 3, dst + 8, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -480,7 +483,7 @@ static void hevc_biwgt_copy_24w_msa(uint8_t *src0_ptr, + PCKEV_B3_UB(dst1, dst0, dst3, dst2, dst5, dst4, out0, out1, out2); + PCKEV_B3_UB(dst7, dst6, dst9, dst8, dst11, dst10, out3, out4, out5); + ST_UB4(out0, out1, out3, out4, dst, dst_stride); +- ST8x4_UB(out2, out5, dst + 16, dst_stride); ++ ST_D4(out2, out5, 0, 1, 0, 1, dst + 16, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -720,7 +723,7 @@ static void hevc_hz_biwgt_8t_4w_msa(uint8_t *src0_ptr, + out0, out1); + + out0 = (v8i16) __msa_pckev_b((v16i8) out1, (v16i8) out0); +- ST4x4_UB(out0, out0, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out0, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -800,7 +803,7 @@ static void hevc_hz_biwgt_8t_8w_msa(uint8_t *src0_ptr, + out0, out1, out2, out3); + + PCKEV_B2_SH(out1, out0, out3, out2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -876,7 +879,7 @@ static void hevc_hz_biwgt_8t_12w_msa(uint8_t *src0_ptr, + weight_vec, rnd_vec, offset_vec, out0, out1, out2, + out3); + PCKEV_B2_SH(out1, out0, out3, out2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + + LD_SB4(src0_ptr + 8, src_stride, src0, src1, src2, src3); + src0_ptr += (4 * src_stride); +@@ -895,7 +898,7 @@ static void hevc_hz_biwgt_8t_12w_msa(uint8_t *src0_ptr, + HEVC_BIW_RND_CLIP2(dst0, dst1, in0, in1, weight_vec, rnd_vec, + offset_vec, out0, out1); + out0 = (v8i16) __msa_pckev_b((v16i8) out1, (v16i8) out0); +- ST4x4_UB(out0, out0, 0, 1, 2, 3, dst + 8, dst_stride); ++ ST_W4(out0, 0, 1, 2, 3, dst + 8, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -1066,8 +1069,8 @@ static void hevc_hz_biwgt_8t_24w_msa(uint8_t *src0_ptr, + dst2_l = __msa_dpadd_s_w(offset_vec, (v8i16) dst2_l, + (v8i16) weight_vec); + SRAR_W2_SW(dst2_r, dst2_l, rnd_vec); +- dst2_r = (v4i32) __msa_pckev_h((v8i16) dst2_l, (v8i16) dst2_r); +- out2 = CLIP_SH_0_255(dst2_r); ++ out2 = __msa_pckev_h((v8i16) dst2_l, (v8i16) dst2_r); ++ CLIP_SH_0_255(out2); + + LD_SB2(src0_ptr, 16, src0, src1); + src0_ptr += src_stride; +@@ -1097,8 +1100,8 @@ static void hevc_hz_biwgt_8t_24w_msa(uint8_t *src0_ptr, + dst2_r = __msa_dpadd_s_w(offset_vec, (v8i16) dst2_r, (v8i16) weight_vec); + dst2_l = __msa_dpadd_s_w(offset_vec, (v8i16) dst2_l, (v8i16) weight_vec); + SRAR_W2_SW(dst2_r, dst2_l, rnd_vec); +- dst2_r = (v4i32) __msa_pckev_h((v8i16) dst2_l, (v8i16) dst2_r); +- out2 = CLIP_SH_0_255(dst2_r); ++ out2 = __msa_pckev_h((v8i16) dst2_l, (v8i16) dst2_r); ++ CLIP_SH_0_255(out2); + PCKEV_B2_SH(out1, out0, out2, out2, out0, out2); + dst_val0 = __msa_copy_u_d((v2i64) out2, 0); + ST_SH(out0, dst); +@@ -1483,7 +1486,7 @@ static void hevc_vt_biwgt_8t_4w_msa(uint8_t *src0_ptr, + out0, out1, out2, out3); + + PCKEV_B2_SH(out1, out0, out3, out2, out0, out1); +- ST4x8_UB(out0, out1, dst, dst_stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + dst += (8 * dst_stride); + + src2110 = src10998; +@@ -1568,7 +1571,7 @@ static void hevc_vt_biwgt_8t_8w_msa(uint8_t *src0_ptr, + out0, out1, out2, out3); + + PCKEV_B2_SH(out1, out0, out3, out2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + + src10_r = src54_r; +@@ -1671,11 +1674,11 @@ static void hevc_vt_biwgt_8t_12w_msa(uint8_t *src0_ptr, + dst2_l = __msa_dpadd_s_w(offset_vec, (v8i16) dst2_l, + (v8i16) weight_vec); + SRAR_W2_SW(dst2_r, dst2_l, rnd_vec); +- dst2_r = (v4i32) __msa_pckev_h((v8i16) dst2_l, (v8i16) dst2_r); +- out2 = CLIP_SH_0_255(dst2_r); ++ out2 = __msa_pckev_h((v8i16) dst2_l, (v8i16) dst2_r); ++ CLIP_SH_0_255(out2); + PCKEV_B2_SH(out1, out0, out2, out2, out0, out2); +- ST8x2_UB(out0, dst, dst_stride); +- ST4x2_UB(out2, dst + 8, dst_stride); ++ ST_D2(out0, 0, 1, dst, dst_stride); ++ ST_W2(out2, 0, 1, dst + 8, dst_stride); + dst += (2 * dst_stride); + + src10_r = src32_r; +@@ -2045,10 +2048,10 @@ static void hevc_hv_biwgt_8t_4w_msa(uint8_t *src0_ptr, + dst2 = __msa_dpadd_s_w(offset_vec, tmp2, weight_vec); + dst3 = __msa_dpadd_s_w(offset_vec, tmp3, weight_vec); + SRAR_W4_SW(dst0, dst1, dst2, dst3, rnd_vec); +- CLIP_SW4_0_255_MAX_SATU(dst0, dst1, dst2, dst3); ++ CLIP_SW4_0_255(dst0, dst1, dst2, dst3); + PCKEV_H2_SH(dst1, dst0, dst3, dst2, tmp0, tmp1); + out = (v16u8) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + + dst10 = dst54; +@@ -2223,10 +2226,10 @@ static void hevc_hv_biwgt_8t_8multx2mult_msa(uint8_t *src0_ptr, + dst1_r = __msa_dpadd_s_w(offset_vec, tmp2, weight_vec); + dst1_l = __msa_dpadd_s_w(offset_vec, tmp3, weight_vec); + SRAR_W4_SW(dst0_l, dst0_r, dst1_l, dst1_r, rnd_vec); +- CLIP_SW4_0_255_MAX_SATU(dst0_l, dst0_r, dst1_l, dst1_r); ++ CLIP_SW4_0_255(dst0_l, dst0_r, dst1_l, dst1_r); + PCKEV_H2_SH(dst0_l, dst0_r, dst1_l, dst1_r, tmp0, tmp1); + out = (v16u8) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0); +- ST8x2_UB(out, dst_tmp, dst_stride); ++ ST_D2(out, 0, 1, dst_tmp, dst_stride); + dst_tmp += (2 * dst_stride); + + dst0 = dst2; +@@ -2409,10 +2412,10 @@ static void hevc_hv_biwgt_8t_12w_msa(uint8_t *src0_ptr, + dst2 = __msa_dpadd_s_w(offset_vec, tmp2, weight_vec); + dst3 = __msa_dpadd_s_w(offset_vec, tmp3, weight_vec); + SRAR_W4_SW(dst1, dst0, dst3, dst2, rnd_vec); +- CLIP_SW4_0_255_MAX_SATU(dst1, dst0, dst3, dst2); ++ CLIP_SW4_0_255(dst1, dst0, dst3, dst2); + PCKEV_H2_SH(dst1, dst0, dst3, dst2, tmp0, tmp1); + out = (v16u8) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0); +- ST8x2_UB(out, dst_tmp, dst_stride); ++ ST_D2(out, 0, 1, dst_tmp, dst_stride); + dst_tmp += (2 * dst_stride); + + dsth0 = dsth2; +@@ -2500,10 +2503,10 @@ static void hevc_hv_biwgt_8t_12w_msa(uint8_t *src0_ptr, + dst2 = __msa_dpadd_s_w(offset_vec, tmp2, weight_vec); + dst3 = __msa_dpadd_s_w(offset_vec, tmp3, weight_vec); + SRAR_W4_SW(dst0, dst1, dst2, dst3, rnd_vec); +- CLIP_SW4_0_255_MAX_SATU(dst0, dst1, dst2, dst3); ++ CLIP_SW4_0_255(dst0, dst1, dst2, dst3); + PCKEV_H2_SH(dst1, dst0, dst3, dst2, tmp0, tmp1); + out = (v16u8) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + + dst10 = dst54; +@@ -2680,10 +2683,10 @@ static void hevc_hz_biwgt_4t_4x2_msa(uint8_t *src0_ptr, + dst0_r = __msa_dpadd_s_w(offset_vec, (v8i16) dst0_r, (v8i16) weight_vec); + dst0_l = __msa_dpadd_s_w(offset_vec, (v8i16) dst0_l, (v8i16) weight_vec); + SRAR_W2_SW(dst0_r, dst0_l, rnd_vec); +- dst0_r = (v4i32) __msa_pckev_h((v8i16) dst0_l, (v8i16) dst0_r); +- out0 = CLIP_SH_0_255(dst0_r); ++ out0 = __msa_pckev_h((v8i16) dst0_l, (v8i16) dst0_r); ++ CLIP_SH_0_255(out0); + out0 = (v8i16) __msa_pckev_b((v16i8) out0, (v16i8) out0); +- ST4x2_UB(out0, dst, dst_stride); ++ ST_W2(out0, 0, 1, dst, dst_stride); + } + + static void hevc_hz_biwgt_4t_4x4_msa(uint8_t *src0_ptr, +@@ -2743,7 +2746,7 @@ static void hevc_hz_biwgt_4t_4x4_msa(uint8_t *src0_ptr, + dst0, dst1); + + dst0 = (v8i16) __msa_pckev_b((v16i8) dst1, (v16i8) dst0); +- ST4x4_UB(dst0, dst0, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(dst0, 0, 1, 2, 3, dst, dst_stride); + } + + static void hevc_hz_biwgt_4t_4x8multiple_msa(uint8_t *src0_ptr, +@@ -2816,7 +2819,7 @@ static void hevc_hz_biwgt_4t_4x8multiple_msa(uint8_t *src0_ptr, + dst0, dst1, dst2, dst3); + + PCKEV_B2_SH(dst1, dst0, dst3, dst2, dst0, dst1); +- ST4x8_UB(dst0, dst1, dst, dst_stride); ++ ST_W8(dst0, dst1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + dst += (8 * dst_stride); + } + } +@@ -2918,7 +2921,10 @@ static void hevc_hz_biwgt_4t_6w_msa(uint8_t *src0_ptr, + dst0, dst1, dst2, dst3); + + PCKEV_B2_SH(dst1, dst0, dst3, dst2, dst0, dst1); +- ST6x4_UB(dst0, dst1, dst, dst_stride); ++ ST_W2(dst0, 0, 2, dst, dst_stride); ++ ST_H2(dst0, 2, 6, dst + 4, dst_stride); ++ ST_W2(dst1, 0, 2, dst + 2 * dst_stride, dst_stride); ++ ST_H2(dst1, 2, 6, dst + 2 * dst_stride + 4, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -2976,7 +2982,7 @@ static void hevc_hz_biwgt_4t_8x2_msa(uint8_t *src0_ptr, + dst0, dst1); + + dst0 = (v8i16) __msa_pckev_b((v16i8) dst1, (v16i8) dst0); +- ST8x2_UB(dst0, dst, dst_stride); ++ ST_D2(dst0, 0, 1, dst, dst_stride); + } + + static void hevc_hz_biwgt_4t_8x6_msa(uint8_t *src0_ptr, +@@ -3049,9 +3055,8 @@ static void hevc_hz_biwgt_4t_8x6_msa(uint8_t *src0_ptr, + + PCKEV_B2_SH(dst1, dst0, dst3, dst2, dst0, dst1); + dst3 = (v8i16) __msa_pckev_b((v16i8) dst5, (v16i8) dst4); +- ST8x4_UB(dst0, dst1, dst, dst_stride); +- dst += (4 * dst_stride); +- ST8x2_UB(dst3, dst, dst_stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, dst_stride); ++ ST_D2(dst3, 0, 1, dst + 4 * dst_stride, dst_stride); + } + + static void hevc_hz_biwgt_4t_8x4multiple_msa(uint8_t *src0_ptr, +@@ -3119,7 +3124,7 @@ static void hevc_hz_biwgt_4t_8x4multiple_msa(uint8_t *src0_ptr, + dst0, dst1, dst2, dst3); + + PCKEV_B2_SH(dst1, dst0, dst3, dst2, dst0, dst1); +- ST8x4_UB(dst0, dst1, dst, dst_stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -3235,7 +3240,8 @@ static void hevc_hz_biwgt_4t_12w_msa(uint8_t *src0_ptr, + + PCKEV_B2_SH(dst1, dst0, dst3, dst2, dst0, dst1); + dst3 = (v8i16) __msa_pckev_b((v16i8) dst5, (v16i8) dst4); +- ST12x4_UB(dst0, dst1, dst3, dst, dst_stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, dst_stride); ++ ST_W4(dst3, 0, 1, 2, 3, dst + 8, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -3411,7 +3417,7 @@ static void hevc_hz_biwgt_4t_24w_msa(uint8_t *src0_ptr, + dst0, dst1); + + dst0 = (v8i16) __msa_pckev_b((v16i8) dst1, (v16i8) dst0); +- ST8x2_UB(dst0, (dst + 16), dst_stride); ++ ST_D2(dst0, 0, 1, (dst + 16), dst_stride); + dst += (2 * dst_stride); + } + } +@@ -3548,10 +3554,10 @@ static void hevc_vt_biwgt_4t_4x2_msa(uint8_t *src0_ptr, + dst10_r = __msa_dpadd_s_w(offset_vec, (v8i16) dst10_r, (v8i16) weight_vec); + dst10_l = __msa_dpadd_s_w(offset_vec, (v8i16) dst10_l, (v8i16) weight_vec); + SRAR_W2_SW(dst10_r, dst10_l, rnd_vec); +- dst10_r = (v4i32) __msa_pckev_h((v8i16) dst10_l, (v8i16) dst10_r); +- out = CLIP_SH_0_255(dst10_r); ++ out = __msa_pckev_h((v8i16) dst10_l, (v8i16) dst10_r); ++ CLIP_SH_0_255(out); + out = (v8i16) __msa_pckev_b((v16i8) out, (v16i8) out); +- ST4x2_UB(out, dst, dst_stride); ++ ST_W2(out, 0, 1, dst, dst_stride); + } + + static void hevc_vt_biwgt_4t_4x4_msa(uint8_t *src0_ptr, +@@ -3617,7 +3623,7 @@ static void hevc_vt_biwgt_4t_4x4_msa(uint8_t *src0_ptr, + dst10, dst32); + + dst10 = (v8i16) __msa_pckev_b((v16i8) dst32, (v16i8) dst10); +- ST4x4_UB(dst10, dst10, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(dst10, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + } + +@@ -3702,7 +3708,7 @@ static void hevc_vt_biwgt_4t_4x8multiple_msa(uint8_t *src0_ptr, + dst10, dst32, dst54, dst76); + + PCKEV_B2_SH(dst32, dst10, dst76, dst54, dst10, dst32); +- ST4x8_UB(dst10, dst32, dst, dst_stride); ++ ST_W8(dst10, dst32, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + dst += (8 * dst_stride); + } + } +@@ -3807,7 +3813,10 @@ static void hevc_vt_biwgt_4t_6w_msa(uint8_t *src0_ptr, + tmp0, tmp1, tmp2, tmp3); + + PCKEV_B2_SH(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- ST6x4_UB(tmp0, tmp1, dst, dst_stride); ++ ST_W2(tmp0, 0, 2, dst, dst_stride); ++ ST_H2(tmp0, 2, 6, dst + 4, dst_stride); ++ ST_W2(tmp1, 0, 2, dst + 2 * dst_stride, dst_stride); ++ ST_H2(tmp1, 2, 6, dst + 2 * dst_stride + 4, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -3866,7 +3875,7 @@ static void hevc_vt_biwgt_4t_8x2_msa(uint8_t *src0_ptr, + tmp0, tmp1); + + tmp0 = (v8i16) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0); +- ST8x2_UB(tmp0, dst, dst_stride); ++ ST_D2(tmp0, 0, 1, dst, dst_stride); + } + + static void hevc_vt_biwgt_4t_8x6_msa(uint8_t *src0_ptr, +@@ -3936,9 +3945,8 @@ static void hevc_vt_biwgt_4t_8x6_msa(uint8_t *src0_ptr, + + PCKEV_B2_SH(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); + tmp3 = (v8i16) __msa_pckev_b((v16i8) tmp5, (v16i8) tmp4); +- ST8x4_UB(tmp0, tmp1, dst, dst_stride); +- dst += (4 * dst_stride); +- ST8x2_UB(tmp3, dst, dst_stride); ++ ST_D4(tmp0, tmp1, 0, 1, 0, 1, dst, dst_stride); ++ ST_D2(tmp3, 0, 1, dst + 4 * dst_stride, dst_stride); + } + + static void hevc_vt_biwgt_4t_8x4multiple_msa(uint8_t *src0_ptr, +@@ -4010,7 +4018,7 @@ static void hevc_vt_biwgt_4t_8x4multiple_msa(uint8_t *src0_ptr, + tmp0, tmp1, tmp2, tmp3); + + PCKEV_B2_SH(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- ST8x4_UB(tmp0, tmp1, dst, dst_stride); ++ ST_D4(tmp0, tmp1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -4132,7 +4140,8 @@ static void hevc_vt_biwgt_4t_12w_msa(uint8_t *src0_ptr, + + PCKEV_B2_SH(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); + tmp2 = (v8i16) __msa_pckev_b((v16i8) tmp5, (v16i8) tmp4); +- ST12x4_UB(tmp0, tmp1, tmp2, dst, dst_stride); ++ ST_D4(tmp0, tmp1, 0, 1, 0, 1, dst, dst_stride); ++ ST_W4(tmp2, 0, 1, 2, 3, dst + 8, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -4323,7 +4332,7 @@ static void hevc_vt_biwgt_4t_24w_msa(uint8_t *src0_ptr, + /* 8width */ + tmp2 = (v8i16) __msa_pckev_b((v16i8) tmp3, (v16i8) tmp2); + ST_SH2(tmp0, tmp1, dst, dst_stride); +- ST8x2_UB(tmp2, dst + 16, dst_stride); ++ ST_D2(tmp2, 0, 1, dst + 16, dst_stride); + dst += (2 * dst_stride); + + /* 16width */ +@@ -4363,7 +4372,7 @@ static void hevc_vt_biwgt_4t_24w_msa(uint8_t *src0_ptr, + /* 8width */ + tmp2 = (v8i16) __msa_pckev_b((v16i8) tmp3, (v16i8) tmp2); + ST_SH2(tmp0, tmp1, dst, dst_stride); +- ST8x2_UB(tmp2, dst + 16, dst_stride); ++ ST_D2(tmp2, 0, 1, dst + 16, dst_stride); + dst += (2 * dst_stride); + } + } +@@ -4566,9 +4575,9 @@ static void hevc_hv_biwgt_4t_4x2_msa(uint8_t *src0_ptr, + dst1 = __msa_dpadd_s_w(offset_vec, tmp1, weight_vec); + SRAR_W2_SW(dst0, dst1, rnd_vec); + tmp = __msa_pckev_h((v8i16) dst1, (v8i16) dst0); +- tmp = CLIP_SH_0_255_MAX_SATU(tmp); ++ CLIP_SH_0_255(tmp); + out = (v16u8) __msa_pckev_b((v16i8) tmp, (v16i8) tmp); +- ST4x2_UB(out, dst, dst_stride); ++ ST_W2(out, 0, 1, dst, dst_stride); + } + + static void hevc_hv_biwgt_4t_4x4_msa(uint8_t *src0_ptr, +@@ -4663,9 +4672,9 @@ static void hevc_hv_biwgt_4t_4x4_msa(uint8_t *src0_ptr, + dst3 = __msa_dpadd_s_w(offset_vec, tmp3, weight_vec); + SRAR_W4_SW(dst0, dst1, dst2, dst3, rnd_vec); + PCKEV_H2_SH(dst1, dst0, dst3, dst2, tmp0, tmp1); +- CLIP_SH2_0_255_MAX_SATU(tmp0, tmp1); ++ CLIP_SH2_0_255(tmp0, tmp1); + out = (v16u8) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + } + + static void hevc_hv_biwgt_4t_4multx8mult_msa(uint8_t *src0_ptr, +@@ -4801,9 +4810,9 @@ static void hevc_hv_biwgt_4t_4multx8mult_msa(uint8_t *src0_ptr, + SRAR_W4_SW(dst4, dst5, dst6, dst7, rnd_vec); + PCKEV_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, tmp0, tmp1, + tmp2, tmp3); +- CLIP_SH4_0_255_MAX_SATU(tmp0, tmp1, tmp2, tmp3); ++ CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST4x8_UB(out0, out1, dst, dst_stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + dst += (8 * dst_stride); + + dst10_r = dst98_r; +@@ -4999,9 +5008,9 @@ static void hevc_hv_biwgt_4t_6w_msa(uint8_t *src0_ptr, + SRAR_W4_SW(dst4, dst5, dst6, dst7, rnd_vec); + PCKEV_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, tmp0, tmp1, + tmp2, tmp3); +- CLIP_SH4_0_255_MAX_SATU(tmp0, tmp1, tmp2, tmp3); ++ CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST4x8_UB(out0, out1, dst, dst_stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + + PCKEV_H2_SW(dst1_l, dst0_l, dst3_l, dst2_l, dst4, dst5); + +@@ -5021,11 +5030,9 @@ static void hevc_hv_biwgt_4t_6w_msa(uint8_t *src0_ptr, + SRAR_W4_SW(dst0, dst1, dst2, dst3, rnd_vec); + PCKEV_H2_SH(dst1, dst0, dst3, dst2, tmp4, tmp5); + +- CLIP_SH2_0_255_MAX_SATU(tmp4, tmp5); ++ CLIP_SH2_0_255(tmp4, tmp5); + out2 = (v16u8) __msa_pckev_b((v16i8) tmp5, (v16i8) tmp4); +- ST2x4_UB(out2, 0, dst + 4, dst_stride); +- dst += 4 * dst_stride; +- ST2x4_UB(out2, 4, dst + 4, dst_stride); ++ ST_H8(out2, 0, 1, 2, 3, 4, 5, 6, 7, dst + 4, dst_stride); + } + + static void hevc_hv_biwgt_4t_8x2_msa(uint8_t *src0_ptr, +@@ -5119,9 +5126,9 @@ static void hevc_hv_biwgt_4t_8x2_msa(uint8_t *src0_ptr, + dst1_l = __msa_dpadd_s_w(offset_vec, tmp3, weight_vec); + SRAR_W4_SW(dst0_r, dst0_l, dst1_r, dst1_l, rnd_vec); + PCKEV_H2_SH(dst0_l, dst0_r, dst1_l, dst1_r, tmp0, tmp1); +- CLIP_SH2_0_255_MAX_SATU(tmp0, tmp1); ++ CLIP_SH2_0_255(tmp0, tmp1); + out = (v16u8) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0); +- ST8x2_UB(out, dst, dst_stride); ++ ST_D2(out, 0, 1, dst, dst_stride); + } + + static void hevc_hv_biwgt_4t_8multx4_msa(uint8_t *src0_ptr, +@@ -5241,9 +5248,9 @@ static void hevc_hv_biwgt_4t_8multx4_msa(uint8_t *src0_ptr, + SRAR_W4_SW(dst4, dst5, dst6, dst7, rnd_vec); + PCKEV_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, + tmp0, tmp1, tmp2, tmp3); +- CLIP_SH4_0_255_MAX_SATU(tmp0, tmp1, tmp2, tmp3); ++ CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + dst += 8; + } + } +@@ -5380,7 +5387,7 @@ static void hevc_hv_biwgt_4t_8x6_msa(uint8_t *src0_ptr, + SRAR_W4_SW(dst4, dst5, dst6, dst7, rnd_vec); + PCKEV_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, + tmp0, tmp1, tmp2, tmp3); +- CLIP_SH4_0_255_MAX_SATU(tmp0, tmp1, tmp2, tmp3); ++ CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, out0, out1); + + PCKEV_H2_SW(dst4_l, dst4_r, dst5_l, dst5_r, dst0, dst1); +@@ -5392,11 +5399,10 @@ static void hevc_hv_biwgt_4t_8x6_msa(uint8_t *src0_ptr, + dst3 = __msa_dpadd_s_w(offset_vec, tmp3, weight_vec); + SRAR_W4_SW(dst0, dst1, dst2, dst3, rnd_vec); + PCKEV_H2_SH(dst1, dst0, dst3, dst2, tmp4, tmp5); +- CLIP_SH2_0_255_MAX_SATU(tmp4, tmp5); ++ CLIP_SH2_0_255(tmp4, tmp5); + out2 = (v16u8) __msa_pckev_b((v16i8) tmp5, (v16i8) tmp4); +- ST8x4_UB(out0, out1, dst, dst_stride); +- dst += (4 * dst_stride); +- ST8x2_UB(out2, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); ++ ST_D2(out2, 0, 1, dst + 4 * dst_stride, dst_stride); + } + + static void hevc_hv_biwgt_4t_8multx4mult_msa(uint8_t *src0_ptr, +@@ -5531,9 +5537,9 @@ static void hevc_hv_biwgt_4t_8multx4mult_msa(uint8_t *src0_ptr, + SRAR_W4_SW(dst4, dst5, dst6, dst7, rnd_vec); + PCKEV_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, + tmp0, tmp1, tmp2, tmp3); +- CLIP_SH4_0_255_MAX_SATU(tmp0, tmp1, tmp2, tmp3); ++ CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST8x4_UB(out0, out1, dst_tmp, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst_tmp, dst_stride); + dst_tmp += (4 * dst_stride); + + dst10_r = dst54_r; +@@ -5718,9 +5724,9 @@ static void hevc_hv_biwgt_4t_12w_msa(uint8_t *src0_ptr, + SRAR_W4_SW(dst4, dst5, dst6, dst7, rnd_vec); + PCKEV_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, + tmp0, tmp1, tmp2, tmp3); +- CLIP_SH4_0_255_MAX_SATU(tmp0, tmp1, tmp2, tmp3); ++ CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST8x4_UB(out0, out1, dst_tmp, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst_tmp, dst_stride); + dst_tmp += (4 * dst_stride); + + dst10_r = dst54_r; +@@ -5814,9 +5820,9 @@ static void hevc_hv_biwgt_4t_12w_msa(uint8_t *src0_ptr, + SRAR_W4_SW(dst4, dst5, dst6, dst7, rnd_vec); + PCKEV_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, + tmp0, tmp1, tmp2, tmp3); +- CLIP_SH4_0_255_MAX_SATU(tmp0, tmp1, tmp2, tmp3); ++ CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST4x8_UB(out0, out1, dst, dst_stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + dst += (8 * dst_stride); + + dst10_r = dst98_r; +diff --git a/libavcodec/mips/hevc_mc_uni_msa.c b/libavcodec/mips/hevc_mc_uni_msa.c +index 740c970..36e6552 100644 +--- a/libavcodec/mips/hevc_mc_uni_msa.c ++++ b/libavcodec/mips/hevc_mc_uni_msa.c +@@ -309,7 +309,7 @@ static void common_hz_8t_4x4_msa(uint8_t *src, int32_t src_stride, + SRARI_H2_SH(out0, out1, 6); + SAT_SH2_SH(out0, out1, 7); + out = PCKEV_XORI128_UB(out0, out1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + } + + static void common_hz_8t_4x8_msa(uint8_t *src, int32_t src_stride, +@@ -344,10 +344,9 @@ static void common_hz_8t_4x8_msa(uint8_t *src, int32_t src_stride, + SRARI_H4_SH(out0, out1, out2, out3, 6); + SAT_SH4_SH(out0, out1, out2, out3, 7); + out = PCKEV_XORI128_UB(out0, out1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + out = PCKEV_XORI128_UB(out2, out3); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst + 4 * dst_stride, dst_stride); + } + + static void common_hz_8t_4x16_msa(uint8_t *src, int32_t src_stride, +@@ -382,11 +381,10 @@ static void common_hz_8t_4x16_msa(uint8_t *src, int32_t src_stride, + SRARI_H4_SH(out0, out1, out2, out3, 6); + SAT_SH4_SH(out0, out1, out2, out3, 7); + out = PCKEV_XORI128_UB(out0, out1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + out = PCKEV_XORI128_UB(out2, out3); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst + 4 * dst_stride, dst_stride); ++ dst += (8 * dst_stride); + + LD_SB4(src, src_stride, src0, src1, src2, src3); + XORI_B4_128_SB(src0, src1, src2, src3); +@@ -402,10 +400,9 @@ static void common_hz_8t_4x16_msa(uint8_t *src, int32_t src_stride, + SRARI_H4_SH(out0, out1, out2, out3, 6); + SAT_SH4_SH(out0, out1, out2, out3, 7); + out = PCKEV_XORI128_UB(out0, out1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + out = PCKEV_XORI128_UB(out2, out3); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst + 4 * dst_stride, dst_stride); + } + + static void common_hz_8t_4w_msa(uint8_t *src, int32_t src_stride, +@@ -468,7 +465,7 @@ static void common_hz_8t_8w_msa(uint8_t *src, int32_t src_stride, + SAT_SH4_SH(out0, out1, out2, out3, 7); + tmp0 = PCKEV_XORI128_UB(out0, out1); + tmp1 = PCKEV_XORI128_UB(out2, out3); +- ST8x4_UB(tmp0, tmp1, dst, dst_stride); ++ ST_D4(tmp0, tmp1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -546,8 +543,8 @@ static void common_hz_8t_12w_msa(uint8_t *src, int32_t src_stride, + tmp1 = PCKEV_XORI128_UB(out2, out3); + tmp2 = PCKEV_XORI128_UB(out4, out5); + +- ST8x4_UB(tmp0, tmp1, dst, dst_stride); +- ST4x4_UB(tmp2, tmp2, 0, 1, 2, 3, dst + 8, dst_stride); ++ ST_D4(tmp0, tmp1, 0, 1, 0, 1, dst, dst_stride); ++ ST_W4(tmp2, 0, 1, 2, 3, dst + 8, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -670,7 +667,7 @@ static void common_hz_8t_24w_msa(uint8_t *src, int32_t src_stride, + SAT_SH4_SH(out0, out8, out2, out9, 7); + SAT_SH2_SH(out1, out3, 7); + out = PCKEV_XORI128_UB(out8, out9); +- ST8x2_UB(out, dst + 16, dst_stride); ++ ST_D2(out, 0, 1, dst + 16, dst_stride); + out = PCKEV_XORI128_UB(out0, out1); + ST_UB(out, dst); + dst += dst_stride; +@@ -965,10 +962,8 @@ static void common_vt_8t_4w_msa(uint8_t *src, int32_t src_stride, + SAT_SH2_SH(out54, out76, 7); + out0 = PCKEV_XORI128_UB(out10, out32); + out1 = PCKEV_XORI128_UB(out54, out76); +- ST4x4_UB(out0, out0, 0, 1, 2, 3, dst, dst_stride); +- dst += (4 * dst_stride); +- ST4x4_UB(out1, out1, 0, 1, 2, 3, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); ++ dst += (8 * dst_stride); + + src2110 = src10998; + src4332 = src12111110; +@@ -1019,7 +1014,7 @@ static void common_vt_8t_8w_msa(uint8_t *src, int32_t src_stride, + SAT_SH4_SH(out0_r, out1_r, out2_r, out3_r, 7); + tmp0 = PCKEV_XORI128_UB(out0_r, out1_r); + tmp1 = PCKEV_XORI128_UB(out2_r, out3_r); +- ST8x4_UB(tmp0, tmp1, dst, dst_stride); ++ ST_D4(tmp0, tmp1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + + src10_r = src54_r; +@@ -1458,10 +1453,8 @@ static void hevc_hv_uni_8t_4w_msa(uint8_t *src, + PCKEV_H2_SW(dst5_r, dst4_r, dst7_r, dst6_r, dst4_r, dst5_r); + out0 = PCKEV_XORI128_UB(dst0_r, dst1_r); + out1 = PCKEV_XORI128_UB(dst4_r, dst5_r); +- ST4x4_UB(out0, out0, 0, 1, 2, 3, dst, dst_stride); +- dst += (4 * dst_stride); +- ST4x4_UB(out1, out1, 0, 1, 2, 3, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); ++ dst += (8 * dst_stride); + + dst10_r = dst98_r; + dst32_r = dst1110_r; +@@ -1595,7 +1588,7 @@ static void hevc_hv_uni_8t_8multx2mult_msa(uint8_t *src, + + PCKEV_H2_SH(dst0_l, dst0_r, dst1_l, dst1_r, dst0, dst1); + out = PCKEV_XORI128_UB(dst0, dst1); +- ST8x2_UB(out, dst_tmp, dst_stride); ++ ST_D2(out, 0, 1, dst_tmp, dst_stride); + dst_tmp += (2 * dst_stride); + + dst0 = dst2; +@@ -1741,7 +1734,7 @@ static void hevc_hv_uni_8t_12w_msa(uint8_t *src, + + PCKEV_H2_SH(dst0_l, dst0_r, dst1_l, dst1_r, dst0, dst1); + out0 = PCKEV_XORI128_UB(dst0, dst1); +- ST8x2_UB(out0, dst_tmp, dst_stride); ++ ST_D2(out0, 0, 1, dst_tmp, dst_stride); + dst_tmp += (2 * dst_stride); + + dst0 = dst2; +@@ -1845,10 +1838,8 @@ static void hevc_hv_uni_8t_12w_msa(uint8_t *src, + PCKEV_H2_SW(dst5_r, dst4_r, dst7_r, dst6_r, dst4_r, dst5_r); + out0 = PCKEV_XORI128_UB(dst0_r, dst1_r); + out1 = PCKEV_XORI128_UB(dst4_r, dst5_r); +- ST4x4_UB(out0, out0, 0, 1, 2, 3, dst, dst_stride); +- dst += (4 * dst_stride); +- ST4x4_UB(out1, out1, 0, 1, 2, 3, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); ++ dst += (8 * dst_stride); + + dst10_r = dst98_r; + dst32_r = dst1110_r; +@@ -1944,7 +1935,7 @@ static void common_hz_4t_4x2_msa(uint8_t *src, int32_t src_stride, + res0 = __msa_srari_h(res0, 6); + res0 = __msa_sat_s_h(res0, 7); + out = PCKEV_XORI128_UB(res0, res0); +- ST4x2_UB(out, dst, dst_stride); ++ ST_W2(out, 0, 1, dst, dst_stride); + } + + static void common_hz_4t_4x4_msa(uint8_t *src, int32_t src_stride, +@@ -1971,7 +1962,7 @@ static void common_hz_4t_4x4_msa(uint8_t *src, int32_t src_stride, + SRARI_H2_SH(out0, out1, 6); + SAT_SH2_SH(out0, out1, 7); + out = PCKEV_XORI128_UB(out0, out1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + } + + static void common_hz_4t_4x8_msa(uint8_t *src, int32_t src_stride, +@@ -2004,10 +1995,9 @@ static void common_hz_4t_4x8_msa(uint8_t *src, int32_t src_stride, + SRARI_H4_SH(out0, out1, out2, out3, 6); + SAT_SH4_SH(out0, out1, out2, out3, 7); + out = PCKEV_XORI128_UB(out0, out1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + out = PCKEV_XORI128_UB(out2, out3); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst + 4 * dst_stride, dst_stride); + } + + static void common_hz_4t_4x16_msa(uint8_t *src, int32_t src_stride, +@@ -2038,11 +2028,10 @@ static void common_hz_4t_4x16_msa(uint8_t *src, int32_t src_stride, + SRARI_H4_SH(out0, out1, out2, out3, 6); + SAT_SH4_SH(out0, out1, out2, out3, 7); + out = PCKEV_XORI128_UB(out0, out1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + out = PCKEV_XORI128_UB(out2, out3); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst + 4 * dst_stride, dst_stride); ++ dst += (8 * dst_stride); + + LD_SB8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); + src += (8 * src_stride); +@@ -2054,10 +2043,9 @@ static void common_hz_4t_4x16_msa(uint8_t *src, int32_t src_stride, + SRARI_H4_SH(out0, out1, out2, out3, 6); + SAT_SH4_SH(out0, out1, out2, out3, 7); + out = PCKEV_XORI128_UB(out0, out1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + out = PCKEV_XORI128_UB(out2, out3); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst + 4 * dst_stride, dst_stride); + } + + static void common_hz_4t_4w_msa(uint8_t *src, int32_t src_stride, +@@ -2102,7 +2090,10 @@ static void common_hz_4t_6w_msa(uint8_t *src, int32_t src_stride, + SAT_SH4_SH(out0, out1, out2, out3, 7); + out4 = PCKEV_XORI128_UB(out0, out1); + out5 = PCKEV_XORI128_UB(out2, out3); +- ST6x4_UB(out4, out5, dst, dst_stride); ++ ST_W2(out4, 0, 2, dst, dst_stride); ++ ST_H2(out4, 2, 6, dst + 4, dst_stride); ++ ST_W2(out5, 0, 2, dst + 2 * dst_stride, dst_stride); ++ ST_H2(out5, 2, 6, dst + 2 * dst_stride + 4, dst_stride); + dst += (4 * dst_stride); + + LD_SB4(src, src_stride, src0, src1, src2, src3); +@@ -2115,8 +2106,10 @@ static void common_hz_4t_6w_msa(uint8_t *src, int32_t src_stride, + SAT_SH4_SH(out0, out1, out2, out3, 7); + out4 = PCKEV_XORI128_UB(out0, out1); + out5 = PCKEV_XORI128_UB(out2, out3); +- ST6x4_UB(out4, out5, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_W2(out4, 0, 2, dst, dst_stride); ++ ST_H2(out4, 2, 6, dst + 4, dst_stride); ++ ST_W2(out5, 0, 2, dst + 2 * dst_stride, dst_stride); ++ ST_H2(out5, 2, 6, dst + 2 * dst_stride + 4, dst_stride); + } + + static void common_hz_4t_8x2mult_msa(uint8_t *src, int32_t src_stride, +@@ -2148,7 +2141,7 @@ static void common_hz_4t_8x2mult_msa(uint8_t *src, int32_t src_stride, + SRARI_H2_SH(vec0, vec1, 6); + SAT_SH2_SH(vec0, vec1, 7); + out = PCKEV_XORI128_UB(vec0, vec1); +- ST8x2_UB(out, dst, dst_stride); ++ ST_D2(out, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + } + } +@@ -2182,7 +2175,7 @@ static void common_hz_4t_8x4mult_msa(uint8_t *src, int32_t src_stride, + SAT_SH4_SH(out0, out1, out2, out3, 7); + tmp0 = PCKEV_XORI128_UB(out0, out1); + tmp1 = PCKEV_XORI128_UB(out2, out3); +- ST8x4_UB(tmp0, tmp1, dst, dst_stride); ++ ST_D4(tmp0, tmp1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -2235,7 +2228,7 @@ static void common_hz_4t_12w_msa(uint8_t *src, int32_t src_stride, + SRARI_H2_SH(out0, out1, 6); + SAT_SH2_SH(out0, out1, 7); + tmp0 = PCKEV_XORI128_UB(out0, out1); +- ST4x4_UB(tmp0, tmp0, 0, 1, 2, 3, dst + 8, dst_stride); ++ ST_W4(tmp0, 0, 1, 2, 3, dst + 8, dst_stride); + + VSHF_B2_SB(src0, src0, src1, src1, mask0, mask0, vec4, vec5); + VSHF_B2_SB(src2, src2, src3, src3, mask0, mask0, vec6, vec7); +@@ -2249,7 +2242,7 @@ static void common_hz_4t_12w_msa(uint8_t *src, int32_t src_stride, + SAT_SH4_SH(out2, out3, out4, out5, 7); + tmp0 = PCKEV_XORI128_UB(out2, out3); + tmp1 = PCKEV_XORI128_UB(out4, out5); +- ST8x4_UB(tmp0, tmp1, dst, dst_stride); ++ ST_D4(tmp0, tmp1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -2395,7 +2388,7 @@ static void common_hz_4t_24w_msa(uint8_t *src, int32_t src_stride, + SAT_SH4_SH(out0, out1, out2, out3, 7); + tmp0 = PCKEV_XORI128_UB(out0, out1); + tmp1 = PCKEV_XORI128_UB(out2, out3); +- ST8x4_UB(tmp0, tmp1, dst1, dst_stride); ++ ST_D4(tmp0, tmp1, 0, 1, 0, 1, dst1, dst_stride); + dst1 += (4 * dst_stride); + } + } +@@ -2496,7 +2489,7 @@ static void common_vt_4t_4x2_msa(uint8_t *src, int32_t src_stride, + out10 = __msa_srari_h(out10, 6); + out10 = __msa_sat_s_h(out10, 7); + out = PCKEV_XORI128_UB(out10, out10); +- ST4x2_UB(out, dst, dst_stride); ++ ST_W2(out, 0, 1, dst, dst_stride); + } + + static void common_vt_4t_4x4multiple_msa(uint8_t *src, int32_t src_stride, +@@ -2540,7 +2533,7 @@ static void common_vt_4t_4x4multiple_msa(uint8_t *src, int32_t src_stride, + SRARI_H2_SH(out10, out32, 6); + SAT_SH2_SH(out10, out32, 7); + out = PCKEV_XORI128_UB(out10, out32); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -2596,7 +2589,10 @@ static void common_vt_4t_6w_msa(uint8_t *src, int32_t src_stride, + SAT_SH4_SH(dst0_r, dst1_r, dst2_r, dst3_r, 7); + out0 = PCKEV_XORI128_UB(dst0_r, dst1_r); + out1 = PCKEV_XORI128_UB(dst2_r, dst3_r); +- ST6x4_UB(out0, out1, dst, dst_stride); ++ ST_W2(out0, 0, 2, dst, dst_stride); ++ ST_H2(out0, 2, 6, dst + 4, dst_stride); ++ ST_W2(out1, 0, 2, dst + 2 * dst_stride, dst_stride); ++ ST_H2(out1, 2, 6, dst + 2 * dst_stride + 4, dst_stride); + dst += (4 * dst_stride); + + LD_SB2(src, src_stride, src3, src4); +@@ -2619,7 +2615,10 @@ static void common_vt_4t_6w_msa(uint8_t *src, int32_t src_stride, + SAT_SH4_SH(dst0_r, dst1_r, dst2_r, dst3_r, 7); + out0 = PCKEV_XORI128_UB(dst0_r, dst1_r); + out1 = PCKEV_XORI128_UB(dst2_r, dst3_r); +- ST6x4_UB(out0, out1, dst, dst_stride); ++ ST_W2(out0, 0, 2, dst, dst_stride); ++ ST_H2(out0, 2, 6, dst + 4, dst_stride); ++ ST_W2(out1, 0, 2, dst + 2 * dst_stride, dst_stride); ++ ST_H2(out1, 2, 6, dst + 2 * dst_stride + 4, dst_stride); + } + + static void common_vt_4t_8x2_msa(uint8_t *src, int32_t src_stride, +@@ -2645,7 +2644,7 @@ static void common_vt_4t_8x2_msa(uint8_t *src, int32_t src_stride, + SRARI_H2_SH(tmp0, tmp1, 6); + SAT_SH2_SH(tmp0, tmp1, 7); + out = PCKEV_XORI128_UB(tmp0, tmp1); +- ST8x2_UB(out, dst, dst_stride); ++ ST_D2(out, 0, 1, dst, dst_stride); + } + + static void common_vt_4t_8x6_msa(uint8_t *src, int32_t src_stride, +@@ -2737,7 +2736,7 @@ static void common_vt_4t_8x4mult_msa(uint8_t *src, int32_t src_stride, + SAT_SH4_SH(out0_r, out1_r, out2_r, out3_r, 7); + tmp0 = PCKEV_XORI128_UB(out0_r, out1_r); + tmp1 = PCKEV_XORI128_UB(out2_r, out3_r); +- ST8x4_UB(tmp0, tmp1, dst, dst_stride); ++ ST_D4(tmp0, tmp1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + + src10_r = src98_r; +@@ -2811,9 +2810,9 @@ static void common_vt_4t_12w_msa(uint8_t *src, int32_t src_stride, + SAT_SH2_SH(dst0_l, dst1_l, 7); + out0 = PCKEV_XORI128_UB(dst0_r, dst1_r); + out1 = PCKEV_XORI128_UB(dst2_r, dst3_r); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + out0 = PCKEV_XORI128_UB(dst0_l, dst1_l); +- ST4x4_UB(out0, out0, 0, 1, 2, 3, dst + 8, dst_stride); ++ ST_W4(out0, 0, 1, 2, 3, dst + 8, dst_stride); + dst += (4 * dst_stride); + + src2 = src6; +@@ -2982,12 +2981,12 @@ static void common_vt_4t_24w_msa(uint8_t *src, int32_t src_stride, + out = PCKEV_XORI128_UB(out0_r, out0_l); + ST_UB(out, dst); + out = PCKEV_XORI128_UB(out2_r, out2_r); +- ST8x1_UB(out, dst + 16); ++ ST_D1(out, 0, dst + 16); + dst += dst_stride; + out = PCKEV_XORI128_UB(out1_r, out1_l); + ST_UB(out, dst); + out = PCKEV_XORI128_UB(out3_r, out3_r); +- ST8x1_UB(out, dst + 16); ++ ST_D1(out, 0, dst + 16); + dst += dst_stride; + } + } +@@ -3137,7 +3136,7 @@ static void hevc_hv_uni_4t_4x2_msa(uint8_t *src, + tmp = __msa_srari_h(tmp, 6); + tmp = __msa_sat_s_h(tmp, 7); + out = PCKEV_XORI128_UB(tmp, tmp); +- ST4x2_UB(out, dst, dst_stride); ++ ST_W2(out, 0, 1, dst, dst_stride); + } + + static void hevc_hv_uni_4t_4x4_msa(uint8_t *src, +@@ -3196,7 +3195,7 @@ static void hevc_hv_uni_4t_4x4_msa(uint8_t *src, + SRARI_H2_SH(tmp0, tmp1, 6); + SAT_SH2_SH(tmp0, tmp1, 7); + out = PCKEV_XORI128_UB(tmp0, tmp1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + } + + static void hevc_hv_uni_4t_4multx8mult_msa(uint8_t *src, +@@ -3288,7 +3287,7 @@ static void hevc_hv_uni_4t_4multx8mult_msa(uint8_t *src, + SAT_SH4_SH(tmp0, tmp1, tmp2, tmp3, 7); + out0 = PCKEV_XORI128_UB(tmp0, tmp1); + out1 = PCKEV_XORI128_UB(tmp2, tmp3); +- ST4x8_UB(out0, out1, dst, dst_stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + dst += (8 * dst_stride); + + dst10_r = dst98_r; +@@ -3432,10 +3431,8 @@ static void hevc_hv_uni_4t_6w_msa(uint8_t *src, + out0 = PCKEV_XORI128_UB(tmp0, tmp1); + out1 = PCKEV_XORI128_UB(tmp2, tmp3); + out2 = PCKEV_XORI128_UB(tmp4, tmp5); +- ST4x8_UB(out0, out1, dst, dst_stride); +- ST2x4_UB(out2, 0, dst + 4, dst_stride); +- dst += 4 * dst_stride; +- ST2x4_UB(out2, 4, dst + 4, dst_stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); ++ ST_H8(out2, 0, 1, 2, 3, 4, 5, 6, 7, dst + 4, dst_stride); + } + + static void hevc_hv_uni_4t_8x2_msa(uint8_t *src, +@@ -3497,7 +3494,7 @@ static void hevc_hv_uni_4t_8x2_msa(uint8_t *src, + SRARI_H2_SH(out0_r, out1_r, 6); + SAT_SH2_SH(out0_r, out1_r, 7); + out = PCKEV_XORI128_UB(out0_r, out1_r); +- ST8x2_UB(out, dst, dst_stride); ++ ST_D2(out, 0, 1, dst, dst_stride); + } + + static void hevc_hv_uni_4t_8multx4_msa(uint8_t *src, +@@ -3580,7 +3577,7 @@ static void hevc_hv_uni_4t_8multx4_msa(uint8_t *src, + SAT_SH4_SH(tmp0, tmp1, tmp2, tmp3, 7); + out0 = PCKEV_XORI128_UB(tmp0, tmp1); + out1 = PCKEV_XORI128_UB(tmp2, tmp3); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + dst += 8; + } + } +@@ -3684,9 +3681,8 @@ static void hevc_hv_uni_4t_8x6_msa(uint8_t *src, + out1 = PCKEV_XORI128_UB(out2_r, out3_r); + out2 = PCKEV_XORI128_UB(out4_r, out5_r); + +- ST8x4_UB(out0, out1, dst, dst_stride); +- dst += (4 * dst_stride); +- ST8x2_UB(out2, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); ++ ST_D2(out2, 0, 1, dst + 4 * dst_stride, dst_stride); + } + + static void hevc_hv_uni_4t_8multx4mult_msa(uint8_t *src, +@@ -3788,7 +3784,7 @@ static void hevc_hv_uni_4t_8multx4mult_msa(uint8_t *src, + SAT_SH4_SH(out0_r, out1_r, out2_r, out3_r, 7); + out0 = PCKEV_XORI128_UB(out0_r, out1_r); + out1 = PCKEV_XORI128_UB(out2_r, out3_r); +- ST8x4_UB(out0, out1, dst_tmp, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst_tmp, dst_stride); + dst_tmp += (4 * dst_stride); + + dst10_r = dst54_r; +@@ -3919,7 +3915,7 @@ static void hevc_hv_uni_4t_12w_msa(uint8_t *src, + SAT_SH4_SH(tmp0, tmp1, tmp2, tmp3, 7); + out0 = PCKEV_XORI128_UB(tmp0, tmp1); + out1 = PCKEV_XORI128_UB(tmp2, tmp3); +- ST8x4_UB(out0, out1, dst_tmp, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst_tmp, dst_stride); + dst_tmp += (4 * dst_stride); + + dst10_r = dst54_r; +@@ -3985,7 +3981,7 @@ static void hevc_hv_uni_4t_12w_msa(uint8_t *src, + SAT_SH4_SH(tmp0, tmp1, tmp2, tmp3, 7); + out0 = PCKEV_XORI128_UB(tmp0, tmp1); + out1 = PCKEV_XORI128_UB(tmp2, tmp3); +- ST4x8_UB(out0, out1, dst, dst_stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + dst += (8 * dst_stride); + + dst10_r = dst98_r; +diff --git a/libavcodec/mips/hevc_mc_uniw_msa.c b/libavcodec/mips/hevc_mc_uniw_msa.c +index f9ecb41..1a8c251 100644 +--- a/libavcodec/mips/hevc_mc_uniw_msa.c ++++ b/libavcodec/mips/hevc_mc_uniw_msa.c +@@ -41,7 +41,7 @@ static const uint8_t ff_hevc_mask_arr[16 * 2] __attribute__((aligned(0x40))) = { + SRAR_W4_SW(in0_r_m, in1_r_m, in0_l_m, in1_l_m, rnd_w); \ + PCKEV_H2_SH(in0_l_m, in0_r_m, in1_l_m, in1_r_m, out0_h, out1_h); \ + ADDS_SH2_SH(out0_h, offset_h, out1_h, offset_h, out0_h, out1_h); \ +- CLIP_SH2_0_255_MAX_SATU(out0_h, out1_h); \ ++ CLIP_SH2_0_255(out0_h, out1_h); \ + } + + #define HEVC_UNIW_RND_CLIP4_MAX_SATU_H(in0_h, in1_h, in2_h, in3_h, wgt_w, \ +@@ -88,9 +88,9 @@ static void hevc_uniwgt_copy_4w_msa(uint8_t *src, + SRAR_W2_SW(dst0_r, dst0_l, rnd_vec); + dst0 = __msa_pckev_h((v8i16) dst0_l, (v8i16) dst0_r); + dst0 += offset_vec; +- dst0 = CLIP_SH_0_255_MAX_SATU(dst0); ++ CLIP_SH_0_255(dst0); + out0 = (v16u8) __msa_pckev_b((v16i8) dst0, (v16i8) dst0); +- ST4x2_UB(out0, dst, dst_stride); ++ ST_W2(out0, 0, 1, dst, dst_stride); + } else if (4 == height) { + LW4(src, src_stride, tp0, tp1, tp2, tp3); + INSERT_W4_SB(tp0, tp1, tp2, tp3, src0); +@@ -99,7 +99,7 @@ static void hevc_uniwgt_copy_4w_msa(uint8_t *src, + HEVC_UNIW_RND_CLIP2_MAX_SATU_H(dst0, dst1, weight_vec, offset_vec, + rnd_vec, dst0, dst1); + out0 = (v16u8) __msa_pckev_b((v16i8) dst1, (v16i8) dst0); +- ST4x4_UB(out0, out0, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out0, 0, 1, 2, 3, dst, dst_stride); + } else if (0 == (height % 8)) { + for (loop_cnt = (height >> 3); loop_cnt--;) { + LW4(src, src_stride, tp0, tp1, tp2, tp3); +@@ -115,7 +115,7 @@ static void hevc_uniwgt_copy_4w_msa(uint8_t *src, + offset_vec, rnd_vec, dst0, dst1, + dst2, dst3); + PCKEV_B2_UB(dst1, dst0, dst3, dst2, out0, out1); +- ST4x8_UB(out0, out1, dst, dst_stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + dst += 8 * dst_stride; + } + } +@@ -170,9 +170,15 @@ static void hevc_uniwgt_copy_6w_msa(uint8_t *src, + PCKEV_B2_UB(dst1, dst0, dst3, dst2, out0, out1); + PCKEV_B2_UB(dst5, dst4, dst7, dst6, out2, out3); + +- ST6x4_UB(out0, out1, dst, dst_stride); ++ ST_W2(out0, 0, 2, dst, dst_stride); ++ ST_H2(out0, 2, 6, dst + 4, dst_stride); ++ ST_W2(out1, 0, 2, dst + 2 * dst_stride, dst_stride); ++ ST_H2(out1, 2, 6, dst + 2 * dst_stride + 4, dst_stride); + dst += (4 * dst_stride); +- ST6x4_UB(out2, out3, dst, dst_stride); ++ ST_W2(out2, 0, 2, dst, dst_stride); ++ ST_H2(out2, 2, 6, dst + 4, dst_stride); ++ ST_W2(out3, 0, 2, dst + 2 * dst_stride, dst_stride); ++ ST_H2(out3, 2, 6, dst + 2 * dst_stride + 4, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -207,7 +213,7 @@ static void hevc_uniwgt_copy_8w_msa(uint8_t *src, + HEVC_UNIW_RND_CLIP2_MAX_SATU_H(dst0, dst1, weight_vec, offset_vec, + rnd_vec, dst0, dst1); + out0 = (v16u8) __msa_pckev_b((v16i8) dst1, (v16i8) dst0); +- ST8x2_UB(out0, dst, dst_stride); ++ ST_D2(out0, 0, 1, dst, dst_stride); + } else if (4 == height) { + LD4(src, src_stride, tp0, tp1, tp2, tp3); + INSERT_D2_SB(tp0, tp1, src0); +@@ -219,7 +225,7 @@ static void hevc_uniwgt_copy_8w_msa(uint8_t *src, + offset_vec, rnd_vec, dst0, dst1, dst2, + dst3); + PCKEV_B2_UB(dst1, dst0, dst3, dst2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + } else if (6 == height) { + LD4(src, src_stride, tp0, tp1, tp2, tp3); + src += 4 * src_stride; +@@ -238,9 +244,8 @@ static void hevc_uniwgt_copy_8w_msa(uint8_t *src, + HEVC_UNIW_RND_CLIP2_MAX_SATU_H(dst4, dst5, weight_vec, offset_vec, + rnd_vec, dst4, dst5); + PCKEV_B3_UB(dst1, dst0, dst3, dst2, dst5, dst4, out0, out1, out2); +- ST8x4_UB(out0, out1, dst, dst_stride); +- dst += (4 * dst_stride); +- ST8x2_UB(out2, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); ++ ST_D2(out2, 0, 1, dst + 4 * dst_stride, dst_stride); + } else if (0 == height % 8) { + for (loop_cnt = (height >> 3); loop_cnt--;) { + LD4(src, src_stride, tp0, tp1, tp2, tp3); +@@ -266,10 +271,9 @@ static void hevc_uniwgt_copy_8w_msa(uint8_t *src, + dst6, dst7); + PCKEV_B2_UB(dst1, dst0, dst3, dst2, out0, out1); + PCKEV_B2_UB(dst5, dst4, dst7, dst6, out2, out3); +- ST8x4_UB(out0, out1, dst, dst_stride); +- dst += (4 * dst_stride); +- ST8x4_UB(out2, out3, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D8(out0, out1, out2, out3, 0, 1, 0, 1, 0, 1, 0, 1, ++ dst, dst_stride); ++ dst += (8 * dst_stride); + } + } + } +@@ -313,7 +317,8 @@ static void hevc_uniwgt_copy_12w_msa(uint8_t *src, + rnd_vec, dst4, dst5); + + PCKEV_B3_UB(dst1, dst0, dst3, dst2, dst5, dst4, out0, out1, out2); +- ST12x4_UB(out0, out1, out2, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); ++ ST_W4(out2, 0, 1, 2, 3, dst + 8, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -409,7 +414,7 @@ static void hevc_uniwgt_copy_24w_msa(uint8_t *src, + PCKEV_B3_UB(dst1, dst0, dst3, dst2, dst5, dst4, out0, out1, out2); + PCKEV_B3_UB(dst7, dst6, dst9, dst8, dst11, dst10, out3, out4, out5); + ST_UB4(out0, out1, out3, out4, dst, dst_stride); +- ST8x4_UB(out2, out5, dst + 16, dst_stride); ++ ST_D4(out2, out5, 0, 1, 0, 1, dst + 16, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -651,7 +656,7 @@ static void hevc_hz_uniwgt_8t_4w_msa(uint8_t *src, + dst3); + + PCKEV_B2_UB(dst1, dst0, dst3, dst2, out0, out1); +- ST4x8_UB(out0, out1, dst, dst_stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + dst += (8 * dst_stride); + } + } +@@ -729,7 +734,7 @@ static void hevc_hz_uniwgt_8t_8w_msa(uint8_t *src, + dst3); + + PCKEV_B2_UB(dst1, dst0, dst3, dst2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -822,8 +827,8 @@ static void hevc_hz_uniwgt_8t_12w_msa(uint8_t *src, + rnd_vec, dst4, dst5); + + PCKEV_B3_UB(dst1, dst0, dst3, dst2, dst5, dst4, out0, out1, out2); +- ST8x4_UB(out0, out1, dst, dst_stride); +- ST4x4_UB(out2, out2, 0, 1, 2, 3, dst + 8, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); ++ ST_W4(out2, 0, 1, 2, 3, dst + 8, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -994,7 +999,7 @@ static void hevc_hz_uniwgt_8t_24w_msa(uint8_t *src, + + PCKEV_B3_UB(dst1, dst0, dst4, dst3, dst5, dst2, out0, out1, out2); + ST_UB2(out0, out1, dst, dst_stride); +- ST8x2_UB(out2, dst + 16, dst_stride); ++ ST_D2(out2, 0, 1, dst + 16, dst_stride); + dst += (2 * dst_stride); + } + } +@@ -1368,7 +1373,7 @@ static void hevc_vt_uniwgt_8t_4w_msa(uint8_t *src, + dst3); + + PCKEV_B2_UB(dst1, dst0, dst3, dst2, out0, out1); +- ST4x8_UB(out0, out1, dst, dst_stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + dst += (8 * dst_stride); + + src2110 = src10998; +@@ -1444,7 +1449,7 @@ static void hevc_vt_uniwgt_8t_8w_msa(uint8_t *src, + dst3); + + PCKEV_B2_UB(dst1, dst0, dst3, dst2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + + src10_r = src54_r; +@@ -1543,8 +1548,8 @@ static void hevc_vt_uniwgt_8t_12w_msa(uint8_t *src, + rnd_vec, dst4, dst5); + + PCKEV_B3_UB(dst1, dst0, dst3, dst2, dst5, dst4, out0, out1, out2); +- ST8x4_UB(out0, out1, dst, dst_stride); +- ST4x4_UB(out2, out2, 0, 1, 2, 3, dst + 8, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); ++ ST_W4(out2, 0, 1, 2, 3, dst + 8, dst_stride); + dst += (4 * dst_stride); + + src10_r = src54_r; +@@ -1858,10 +1863,10 @@ static void hevc_hv_uniwgt_8t_4w_msa(uint8_t *src, + SRAR_W4_SW(dst0_r, dst1_r, dst2_r, dst3_r, rnd_vec); + ADD2(dst0_r, offset_vec, dst1_r, offset_vec, dst0_r, dst1_r); + ADD2(dst2_r, offset_vec, dst3_r, offset_vec, dst2_r, dst3_r); +- CLIP_SW4_0_255_MAX_SATU(dst0_r, dst1_r, dst2_r, dst3_r); ++ CLIP_SW4_0_255(dst0_r, dst1_r, dst2_r, dst3_r); + PCKEV_H2_SW(dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst1_r); + out = (v16u8) __msa_pckev_b((v16i8) dst1_r, (v16i8) dst0_r); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + + dst10_r = dst54_r; +@@ -2009,11 +2014,11 @@ static void hevc_hv_uniwgt_8t_8multx2mult_msa(uint8_t *src, + SRAR_W4_SW(dst0_r, dst1_r, dst0_l, dst1_l, rnd_vec); + ADD2(dst0_r, offset_vec, dst0_l, offset_vec, dst0_r, dst0_l); + ADD2(dst1_r, offset_vec, dst1_l, offset_vec, dst1_r, dst1_l); +- CLIP_SW4_0_255_MAX_SATU(dst0_r, dst1_r, dst0_l, dst1_l); ++ CLIP_SW4_0_255(dst0_r, dst1_r, dst0_l, dst1_l); + + PCKEV_H2_SW(dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); + dst0_r = (v4i32) __msa_pckev_b((v16i8) dst1_r, (v16i8) dst0_r); +- ST8x2_UB(dst0_r, dst_tmp, dst_stride); ++ ST_D2(dst0_r, 0, 1, dst_tmp, dst_stride); + dst_tmp += (2 * dst_stride); + + dst10_r = dst32_r; +@@ -2160,10 +2165,10 @@ static void hevc_hv_uniwgt_8t_12w_msa(uint8_t *src, + MUL2(dst0_r, weight_vec, dst0_l, weight_vec, dst0_r, dst0_l); + SRAR_W2_SW(dst0_r, dst0_l, rnd_vec); + ADD2(dst0_r, offset_vec, dst0_l, offset_vec, dst0_r, dst0_l); +- CLIP_SW2_0_255_MAX_SATU(dst0_r, dst0_l); ++ CLIP_SW2_0_255(dst0_r, dst0_l); + dst0_r = (v4i32) __msa_pckev_h((v8i16) dst0_l, (v8i16) dst0_r); + out = (v16u8) __msa_pckev_b((v16i8) dst0_r, (v16i8) dst0_r); +- ST8x1_UB(out, dst_tmp); ++ ST_D1(out, 0, dst_tmp); + dst_tmp += dst_stride; + + dst0 = dst1; +@@ -2241,10 +2246,10 @@ static void hevc_hv_uniwgt_8t_12w_msa(uint8_t *src, + SRAR_W4_SW(dst0_r, dst1_r, dst2_r, dst3_r, rnd_vec); + ADD2(dst0_r, offset_vec, dst1_r, offset_vec, dst0_r, dst1_r); + ADD2(dst2_r, offset_vec, dst3_r, offset_vec, dst2_r, dst3_r); +- CLIP_SW4_0_255_MAX_SATU(dst0_r, dst1_r, dst2_r, dst3_r); ++ CLIP_SW4_0_255(dst0_r, dst1_r, dst2_r, dst3_r); + PCKEV_H2_SW(dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst1_r); + out = (v16u8) __msa_pckev_b((v16i8) dst1_r, (v16i8) dst0_r); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + + dst10_r = dst54_r; +@@ -2389,9 +2394,9 @@ static void hevc_hz_uniwgt_4t_4x2_msa(uint8_t *src, + SRAR_W2_SW(dst0_r, dst0_l, rnd_vec); + dst0 = __msa_pckev_h((v8i16) dst0_l, (v8i16) dst0_r); + dst0 = __msa_adds_s_h(dst0, offset_vec); +- dst0 = CLIP_SH_0_255_MAX_SATU(dst0); ++ CLIP_SH_0_255(dst0); + out = (v16u8) __msa_pckev_b((v16i8) dst0, (v16i8) dst0); +- ST4x2_UB(out, dst, dst_stride); ++ ST_W2(out, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + +@@ -2448,7 +2453,7 @@ static void hevc_hz_uniwgt_4t_4x4_msa(uint8_t *src, + dst0, dst1); + + out = (v16u8) __msa_pckev_b((v16i8) dst1, (v16i8) dst0); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + } + +@@ -2515,7 +2520,7 @@ static void hevc_hz_uniwgt_4t_4x8multiple_msa(uint8_t *src, + dst0, dst1, dst2, dst3); + + PCKEV_B2_UB(dst1, dst0, dst3, dst2, out0, out1); +- ST4x8_UB(out0, out1, dst, dst_stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + dst += (8 * dst_stride); + } + } +@@ -2613,9 +2618,15 @@ static void hevc_hz_uniwgt_4t_6w_msa(uint8_t *src, + + PCKEV_B2_UB(dst1, dst0, dst3, dst2, out0, out1); + PCKEV_B2_UB(dst5, dst4, dst7, dst6, out2, out3); +- ST6x4_UB(out0, out1, dst, dst_stride); ++ ST_W2(out0, 0, 2, dst, dst_stride); ++ ST_H2(out0, 2, 6, dst + 4, dst_stride); ++ ST_W2(out1, 0, 2, dst + 2 * dst_stride, dst_stride); ++ ST_H2(out1, 2, 6, dst + 2 * dst_stride + 4, dst_stride); + dst += (4 * dst_stride); +- ST6x4_UB(out2, out3, dst, dst_stride); ++ ST_W2(out2, 0, 2, dst, dst_stride); ++ ST_H2(out2, 2, 6, dst + 4, dst_stride); ++ ST_W2(out3, 0, 2, dst + 2 * dst_stride, dst_stride); ++ ST_H2(out3, 2, 6, dst + 2 * dst_stride + 4, dst_stride); + } + + static void hevc_hz_uniwgt_4t_8x2_msa(uint8_t *src, +@@ -2670,7 +2681,7 @@ static void hevc_hz_uniwgt_4t_8x2_msa(uint8_t *src, + dst0, dst1); + + out = (v16u8) __msa_pckev_b((v16i8) dst1, (v16i8) dst0); +- ST8x2_UB(out, dst, dst_stride); ++ ST_D2(out, 0, 1, dst, dst_stride); + } + + static void hevc_hz_uniwgt_4t_8x4_msa(uint8_t *src, +@@ -2727,7 +2738,7 @@ static void hevc_hz_uniwgt_4t_8x4_msa(uint8_t *src, + dst0, dst1, dst2, dst3); + + PCKEV_B2_UB(dst1, dst0, dst3, dst2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + } + + static void hevc_hz_uniwgt_4t_8x6_msa(uint8_t *src, +@@ -2796,9 +2807,8 @@ static void hevc_hz_uniwgt_4t_8x6_msa(uint8_t *src, + dst4, dst5); + + PCKEV_B3_UB(dst1, dst0, dst3, dst2, dst5, dst4, out0, out1, out2); +- ST8x4_UB(out0, out1, dst, dst_stride); +- dst += (4 * dst_stride); +- ST8x2_UB(out2, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); ++ ST_D2(out2, 0, 1, dst + 4 * dst_stride, dst_stride); + } + + static void hevc_hz_uniwgt_4t_8x8multiple_msa(uint8_t *src, +@@ -2876,7 +2886,7 @@ static void hevc_hz_uniwgt_4t_8x8multiple_msa(uint8_t *src, + + PCKEV_B2_UB(dst1, dst0, dst3, dst2, out0, out1); + PCKEV_B2_UB(dst5, dst4, dst7, dst6, out2, out3); +- ST8x8_UB(out0, out1, out2, out3, dst, dst_stride); ++ ST_D8(out0, out1, out2, out3, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride); + dst += (8 * dst_stride); + } + } +@@ -2981,7 +2991,8 @@ static void hevc_hz_uniwgt_4t_12w_msa(uint8_t *src, + rnd_vec, dst4, dst5); + + PCKEV_B3_UB(dst1, dst0, dst3, dst2, dst5, dst4, out0, out1, out2); +- ST12x4_UB(out0, out1, out2, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); ++ ST_W4(out2, 0, 1, 2, 3, dst + 8, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -3142,7 +3153,7 @@ static void hevc_hz_uniwgt_4t_24w_msa(uint8_t *src, + + PCKEV_B3_UB(dst1, dst0, dst3, dst2, dst5, dst4, out0, out1, out2); + ST_UB2(out0, out1, dst, dst_stride); +- ST8x2_UB(out2, dst + 16, dst_stride); ++ ST_D2(out2, 0, 1, dst + 16, dst_stride); + dst += (2 * dst_stride); + } + } +@@ -3284,9 +3295,9 @@ static void hevc_vt_uniwgt_4t_4x2_msa(uint8_t *src, + SRAR_W2_SW(dst0_r, dst0_l, rnd_vec); + dst0 = __msa_pckev_h((v8i16) dst0_l, (v8i16) dst0_r); + dst0 = __msa_adds_s_h(dst0, offset_vec); +- dst0 = CLIP_SH_0_255_MAX_SATU(dst0); ++ CLIP_SH_0_255(dst0); + out = (v16u8) __msa_pckev_b((v16i8) dst0, (v16i8) dst0); +- ST4x2_UB(out, dst, dst_stride); ++ ST_W2(out, 0, 1, dst, dst_stride); + } + + static void hevc_vt_uniwgt_4t_4x4_msa(uint8_t *src, +@@ -3340,7 +3351,7 @@ static void hevc_vt_uniwgt_4t_4x4_msa(uint8_t *src, + dst0, dst1); + + out = (v16u8) __msa_pckev_b((v16i8) dst1, (v16i8) dst0); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + } + + static void hevc_vt_uniwgt_4t_4x8multiple_msa(uint8_t *src, +@@ -3411,7 +3422,7 @@ static void hevc_vt_uniwgt_4t_4x8multiple_msa(uint8_t *src, + dst0, dst1, dst2, dst3); + + PCKEV_B2_UB(dst1, dst0, dst3, dst2, out0, out1); +- ST4x8_UB(out0, out1, dst, dst_stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + dst += (8 * dst_stride); + + src2 = src10; +@@ -3509,9 +3520,15 @@ static void hevc_vt_uniwgt_4t_6w_msa(uint8_t *src, + + PCKEV_B2_UB(dst1, dst0, dst3, dst2, out0, out1); + PCKEV_B2_UB(dst5, dst4, dst7, dst6, out2, out3); +- ST6x4_UB(out0, out1, dst, dst_stride); ++ ST_W2(out0, 0, 2, dst, dst_stride); ++ ST_H2(out0, 2, 6, dst + 4, dst_stride); ++ ST_W2(out1, 0, 2, dst + 2 * dst_stride, dst_stride); ++ ST_H2(out1, 2, 6, dst + 2 * dst_stride + 4, dst_stride); + dst += (4 * dst_stride); +- ST6x4_UB(out2, out3, dst, dst_stride); ++ ST_W2(out2, 0, 2, dst, dst_stride); ++ ST_H2(out2, 2, 6, dst + 4, dst_stride); ++ ST_W2(out3, 0, 2, dst + 2 * dst_stride, dst_stride); ++ ST_H2(out3, 2, 6, dst + 2 * dst_stride + 4, dst_stride); + } + + static void hevc_vt_uniwgt_4t_8x2_msa(uint8_t *src, +@@ -3562,7 +3579,7 @@ static void hevc_vt_uniwgt_4t_8x2_msa(uint8_t *src, + dst0, dst1); + + out = (v16u8) __msa_pckev_b((v16i8) dst1, (v16i8) dst0); +- ST8x2_UB(out, dst, dst_stride); ++ ST_D2(out, 0, 1, dst, dst_stride); + } + + static void hevc_vt_uniwgt_4t_8x4_msa(uint8_t *src, +@@ -3617,7 +3634,7 @@ static void hevc_vt_uniwgt_4t_8x4_msa(uint8_t *src, + offset_vec, rnd_vec, dst0, dst1, dst2, + dst3); + PCKEV_B2_UB(dst1, dst0, dst3, dst2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + } + + static void hevc_vt_uniwgt_4t_8x6_msa(uint8_t *src, +@@ -3679,9 +3696,8 @@ static void hevc_vt_uniwgt_4t_8x6_msa(uint8_t *src, + HEVC_UNIW_RND_CLIP2_MAX_SATU_H(dst4, dst5, weight_vec, offset_vec, rnd_vec, + dst4, dst5); + PCKEV_B3_UB(dst1, dst0, dst3, dst2, dst5, dst4, out0, out1, out2); +- ST8x4_UB(out0, out1, dst, dst_stride); +- dst += (4 * dst_stride); +- ST8x2_UB(out2, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); ++ ST_D2(out2, 0, 1, dst + 4 * dst_stride, dst_stride); + } + + static void hevc_vt_uniwgt_4t_8x8mult_msa(uint8_t *src, +@@ -3754,7 +3770,7 @@ static void hevc_vt_uniwgt_4t_8x8mult_msa(uint8_t *src, + dst7); + PCKEV_B2_UB(dst1, dst0, dst3, dst2, out0, out1); + PCKEV_B2_UB(dst5, dst4, dst7, dst6, out2, out3); +- ST8x8_UB(out0, out1, out2, out3, dst, dst_stride); ++ ST_D8(out0, out1, out2, out3, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride); + dst += (8 * dst_stride); + + src2 = src10; +@@ -3861,7 +3877,8 @@ static void hevc_vt_uniwgt_4t_12w_msa(uint8_t *src, + HEVC_UNIW_RND_CLIP2_MAX_SATU_H(dst4, dst5, weight_vec, offset_vec, + rnd_vec, dst4, dst5); + PCKEV_B3_UB(dst1, dst0, dst3, dst2, dst5, dst4, out0, out1, out2); +- ST12x4_UB(out0, out1, out2, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); ++ ST_W4(out2, 0, 1, 2, 3, dst + 8, dst_stride); + dst += (4 * dst_stride); + + ILVRL_B2_SB(src7, src6, src76_r, src76_l); +@@ -3882,7 +3899,8 @@ static void hevc_vt_uniwgt_4t_12w_msa(uint8_t *src, + HEVC_UNIW_RND_CLIP2_MAX_SATU_H(dst10, dst11, weight_vec, offset_vec, + rnd_vec, dst10, dst11); + PCKEV_B3_UB(dst7, dst6, dst9, dst8, dst11, dst10, out3, out4, out5); +- ST12x4_UB(out3, out4, out5, dst, dst_stride); ++ ST_D4(out3, out4, 0, 1, 0, 1, dst, dst_stride); ++ ST_W4(out5, 0, 1, 2, 3, dst + 8, dst_stride); + dst += (4 * dst_stride); + + src2 = src10; +@@ -4062,7 +4080,7 @@ static void hevc_vt_uniwgt_4t_24w_msa(uint8_t *src, + out2, out3); + PCKEV_B2_UB(dst9, dst8, dst11, dst10, out4, out5); + ST_UB4(out0, out1, out2, out3, dst, dst_stride); +- ST8x4_UB(out4, out5, dst + 16, dst_stride); ++ ST_D4(out4, out5, 0, 1, 0, 1, dst + 16, dst_stride); + dst += (4 * dst_stride); + + src2 = src6; +@@ -4229,9 +4247,9 @@ static void hevc_hv_uniwgt_4t_4x2_msa(uint8_t *src, + SRAR_W2_SW(dst0, dst1, rnd_vec); + tmp = __msa_pckev_h((v8i16) dst1, (v8i16) dst0); + tmp += offset_vec; +- tmp = CLIP_SH_0_255_MAX_SATU(tmp); ++ CLIP_SH_0_255(tmp); + out = (v16u8) __msa_pckev_b((v16i8) tmp, (v16i8) tmp); +- ST4x2_UB(out, dst, dst_stride); ++ ST_W2(out, 0, 1, dst, dst_stride); + } + + static void hevc_hv_uniwgt_4t_4x4_msa(uint8_t *src, +@@ -4298,9 +4316,9 @@ static void hevc_hv_uniwgt_4t_4x4_msa(uint8_t *src, + SRAR_W4_SW(dst0, dst1, dst2, dst3, rnd_vec); + PCKEV_H2_SH(dst1, dst0, dst3, dst2, tmp0, tmp1); + ADD2(tmp0, offset_vec, tmp1, offset_vec, tmp0, tmp1); +- CLIP_SH2_0_255_MAX_SATU(tmp0, tmp1); ++ CLIP_SH2_0_255(tmp0, tmp1); + out = (v16u8) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + } + + static void hevc_hv_uniwgt_4t_4multx8mult_msa(uint8_t *src, +@@ -4399,9 +4417,9 @@ static void hevc_hv_uniwgt_4t_4multx8mult_msa(uint8_t *src, + tmp2, tmp3); + ADD2(tmp0, offset_vec, tmp1, offset_vec, tmp0, tmp1); + ADD2(tmp2, offset_vec, tmp3, offset_vec, tmp2, tmp3); +- CLIP_SH4_0_255_MAX_SATU(tmp0, tmp1, tmp2, tmp3); ++ CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST4x8_UB(out0, out1, dst, dst_stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + dst += (8 * dst_stride); + + dst10_r = dst98_r; +@@ -4556,13 +4574,11 @@ static void hevc_hv_uniwgt_4t_6w_msa(uint8_t *src, + ADD2(tmp0, offset_vec, tmp1, offset_vec, tmp0, tmp1); + ADD2(tmp2, offset_vec, tmp3, offset_vec, tmp2, tmp3); + ADD2(tmp4, offset_vec, tmp5, offset_vec, tmp4, tmp5); +- CLIP_SH4_0_255_MAX_SATU(tmp0, tmp1, tmp2, tmp3); +- CLIP_SH2_0_255_MAX_SATU(tmp4, tmp5); ++ CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); ++ CLIP_SH2_0_255(tmp4, tmp5); + PCKEV_B3_UB(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, out0, out1, out2); +- ST4x8_UB(out0, out1, dst, dst_stride); +- ST2x4_UB(out2, 0, dst + 4, dst_stride); +- dst += 4 * dst_stride; +- ST2x4_UB(out2, 4, dst + 4, dst_stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); ++ ST_H8(out2, 0, 1, 2, 3, 4, 5, 6, 7, dst + 4, dst_stride); + } + + static void hevc_hv_uniwgt_4t_8x2_msa(uint8_t *src, +@@ -4636,9 +4652,9 @@ static void hevc_hv_uniwgt_4t_8x2_msa(uint8_t *src, + SRAR_W4_SW(dst0_r, dst0_l, dst1_r, dst1_l, rnd_vec); + PCKEV_H2_SH(dst0_l, dst0_r, dst1_l, dst1_r, tmp0, tmp1); + ADD2(tmp0, offset_vec, tmp1, offset_vec, tmp0, tmp1); +- CLIP_SH2_0_255_MAX_SATU(tmp0, tmp1); ++ CLIP_SH2_0_255(tmp0, tmp1); + out = (v16u8) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0); +- ST8x2_UB(out, dst, dst_stride); ++ ST_D2(out, 0, 1, dst, dst_stride); + } + + static void hevc_hv_uniwgt_4t_8multx4_msa(uint8_t *src, +@@ -4729,9 +4745,9 @@ static void hevc_hv_uniwgt_4t_8multx4_msa(uint8_t *src, + dst3_r, tmp0, tmp1, tmp2, tmp3); + ADD2(tmp0, offset_vec, tmp1, offset_vec, tmp0, tmp1); + ADD2(tmp2, offset_vec, tmp3, offset_vec, tmp2, tmp3); +- CLIP_SH4_0_255_MAX_SATU(tmp0, tmp1, tmp2, tmp3); ++ CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + dst += 8; + } + } +@@ -4845,12 +4861,11 @@ static void hevc_hv_uniwgt_4t_8x6_msa(uint8_t *src, + ADD2(tmp0, offset_vec, tmp1, offset_vec, tmp0, tmp1); + ADD2(tmp2, offset_vec, tmp3, offset_vec, tmp2, tmp3); + ADD2(tmp4, offset_vec, tmp5, offset_vec, tmp4, tmp5); +- CLIP_SH4_0_255_MAX_SATU(tmp0, tmp1, tmp2, tmp3); +- CLIP_SH2_0_255_MAX_SATU(tmp4, tmp5); ++ CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); ++ CLIP_SH2_0_255(tmp4, tmp5); + PCKEV_B3_UB(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, out0, out1, out2); +- ST8x4_UB(out0, out1, dst, dst_stride); +- dst += (4 * dst_stride); +- ST8x2_UB(out2, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); ++ ST_D2(out2, 0, 1, dst + 4 * dst_stride, dst_stride); + } + + static void hevc_hv_uniwgt_4t_8multx4mult_msa(uint8_t *src, +@@ -4958,9 +4973,9 @@ static void hevc_hv_uniwgt_4t_8multx4mult_msa(uint8_t *src, + dst3_r, tmp0, tmp1, tmp2, tmp3); + ADD2(tmp0, offset_vec, tmp1, offset_vec, tmp0, tmp1); + ADD2(tmp2, offset_vec, tmp3, offset_vec, tmp2, tmp3); +- CLIP_SH4_0_255_MAX_SATU(tmp0, tmp1, tmp2, tmp3); ++ CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST8x4_UB(out0, out1, dst_tmp, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst_tmp, dst_stride); + dst_tmp += (4 * dst_stride); + + dst10_r = dst54_r; +@@ -5105,9 +5120,9 @@ static void hevc_hv_uniwgt_4t_12w_msa(uint8_t *src, + dst3_r, tmp0, tmp1, tmp2, tmp3); + ADD2(tmp0, offset_vec, tmp1, offset_vec, tmp0, tmp1); + ADD2(tmp2, offset_vec, tmp3, offset_vec, tmp2, tmp3); +- CLIP_SH4_0_255_MAX_SATU(tmp0, tmp1, tmp2, tmp3); ++ CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST8x4_UB(out0, out1, dst_tmp, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst_tmp, dst_stride); + dst_tmp += (4 * dst_stride); + + dst10_r = dst54_r; +@@ -5172,9 +5187,9 @@ static void hevc_hv_uniwgt_4t_12w_msa(uint8_t *src, + tmp2, tmp3); + ADD2(tmp0, offset_vec, tmp1, offset_vec, tmp0, tmp1); + ADD2(tmp2, offset_vec, tmp3, offset_vec, tmp2, tmp3); +- CLIP_SH4_0_255_MAX_SATU(tmp0, tmp1, tmp2, tmp3); ++ CLIP_SH4_0_255(tmp0, tmp1, tmp2, tmp3); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST4x8_UB(out0, out1, dst, dst_stride); ++ ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + dst += (8 * dst_stride); + + dst10_r = dst98_r; +diff --git a/libavcodec/mips/hevcdsp_init_mips.c b/libavcodec/mips/hevcdsp_init_mips.c +index 776d13e..eb261e5 100644 +--- a/libavcodec/mips/hevcdsp_init_mips.c ++++ b/libavcodec/mips/hevcdsp_init_mips.c +@@ -18,437 +18,500 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/mips/cpu.h" + #include "libavcodec/mips/hevcdsp_mips.h" + +-#if HAVE_MSA +-static av_cold void hevc_dsp_init_msa(HEVCDSPContext *c, +- const int bit_depth) ++void ff_hevc_dsp_init_mips(HEVCDSPContext *c, const int bit_depth) + { +- if (8 == bit_depth) { +- c->put_hevc_qpel[1][0][0] = ff_hevc_put_hevc_pel_pixels4_8_msa; +- c->put_hevc_qpel[2][0][0] = ff_hevc_put_hevc_pel_pixels6_8_msa; +- c->put_hevc_qpel[3][0][0] = ff_hevc_put_hevc_pel_pixels8_8_msa; +- c->put_hevc_qpel[4][0][0] = ff_hevc_put_hevc_pel_pixels12_8_msa; +- c->put_hevc_qpel[5][0][0] = ff_hevc_put_hevc_pel_pixels16_8_msa; +- c->put_hevc_qpel[6][0][0] = ff_hevc_put_hevc_pel_pixels24_8_msa; +- c->put_hevc_qpel[7][0][0] = ff_hevc_put_hevc_pel_pixels32_8_msa; +- c->put_hevc_qpel[8][0][0] = ff_hevc_put_hevc_pel_pixels48_8_msa; +- c->put_hevc_qpel[9][0][0] = ff_hevc_put_hevc_pel_pixels64_8_msa; +- +- c->put_hevc_qpel[1][0][1] = ff_hevc_put_hevc_qpel_h4_8_msa; +- c->put_hevc_qpel[3][0][1] = ff_hevc_put_hevc_qpel_h8_8_msa; +- c->put_hevc_qpel[4][0][1] = ff_hevc_put_hevc_qpel_h12_8_msa; +- c->put_hevc_qpel[5][0][1] = ff_hevc_put_hevc_qpel_h16_8_msa; +- c->put_hevc_qpel[6][0][1] = ff_hevc_put_hevc_qpel_h24_8_msa; +- c->put_hevc_qpel[7][0][1] = ff_hevc_put_hevc_qpel_h32_8_msa; +- c->put_hevc_qpel[8][0][1] = ff_hevc_put_hevc_qpel_h48_8_msa; +- c->put_hevc_qpel[9][0][1] = ff_hevc_put_hevc_qpel_h64_8_msa; +- +- c->put_hevc_qpel[1][1][0] = ff_hevc_put_hevc_qpel_v4_8_msa; +- c->put_hevc_qpel[3][1][0] = ff_hevc_put_hevc_qpel_v8_8_msa; +- c->put_hevc_qpel[4][1][0] = ff_hevc_put_hevc_qpel_v12_8_msa; +- c->put_hevc_qpel[5][1][0] = ff_hevc_put_hevc_qpel_v16_8_msa; +- c->put_hevc_qpel[6][1][0] = ff_hevc_put_hevc_qpel_v24_8_msa; +- c->put_hevc_qpel[7][1][0] = ff_hevc_put_hevc_qpel_v32_8_msa; +- c->put_hevc_qpel[8][1][0] = ff_hevc_put_hevc_qpel_v48_8_msa; +- c->put_hevc_qpel[9][1][0] = ff_hevc_put_hevc_qpel_v64_8_msa; +- +- c->put_hevc_qpel[1][1][1] = ff_hevc_put_hevc_qpel_hv4_8_msa; +- c->put_hevc_qpel[3][1][1] = ff_hevc_put_hevc_qpel_hv8_8_msa; +- c->put_hevc_qpel[4][1][1] = ff_hevc_put_hevc_qpel_hv12_8_msa; +- c->put_hevc_qpel[5][1][1] = ff_hevc_put_hevc_qpel_hv16_8_msa; +- c->put_hevc_qpel[6][1][1] = ff_hevc_put_hevc_qpel_hv24_8_msa; +- c->put_hevc_qpel[7][1][1] = ff_hevc_put_hevc_qpel_hv32_8_msa; +- c->put_hevc_qpel[8][1][1] = ff_hevc_put_hevc_qpel_hv48_8_msa; +- c->put_hevc_qpel[9][1][1] = ff_hevc_put_hevc_qpel_hv64_8_msa; +- +- c->put_hevc_epel[1][0][0] = ff_hevc_put_hevc_pel_pixels4_8_msa; +- c->put_hevc_epel[2][0][0] = ff_hevc_put_hevc_pel_pixels6_8_msa; +- c->put_hevc_epel[3][0][0] = ff_hevc_put_hevc_pel_pixels8_8_msa; +- c->put_hevc_epel[4][0][0] = ff_hevc_put_hevc_pel_pixels12_8_msa; +- c->put_hevc_epel[5][0][0] = ff_hevc_put_hevc_pel_pixels16_8_msa; +- c->put_hevc_epel[6][0][0] = ff_hevc_put_hevc_pel_pixels24_8_msa; +- c->put_hevc_epel[7][0][0] = ff_hevc_put_hevc_pel_pixels32_8_msa; +- +- c->put_hevc_epel[1][0][1] = ff_hevc_put_hevc_epel_h4_8_msa; +- c->put_hevc_epel[2][0][1] = ff_hevc_put_hevc_epel_h6_8_msa; +- c->put_hevc_epel[3][0][1] = ff_hevc_put_hevc_epel_h8_8_msa; +- c->put_hevc_epel[4][0][1] = ff_hevc_put_hevc_epel_h12_8_msa; +- c->put_hevc_epel[5][0][1] = ff_hevc_put_hevc_epel_h16_8_msa; +- c->put_hevc_epel[6][0][1] = ff_hevc_put_hevc_epel_h24_8_msa; +- c->put_hevc_epel[7][0][1] = ff_hevc_put_hevc_epel_h32_8_msa; +- +- c->put_hevc_epel[1][1][0] = ff_hevc_put_hevc_epel_v4_8_msa; +- c->put_hevc_epel[2][1][0] = ff_hevc_put_hevc_epel_v6_8_msa; +- c->put_hevc_epel[3][1][0] = ff_hevc_put_hevc_epel_v8_8_msa; +- c->put_hevc_epel[4][1][0] = ff_hevc_put_hevc_epel_v12_8_msa; +- c->put_hevc_epel[5][1][0] = ff_hevc_put_hevc_epel_v16_8_msa; +- c->put_hevc_epel[6][1][0] = ff_hevc_put_hevc_epel_v24_8_msa; +- c->put_hevc_epel[7][1][0] = ff_hevc_put_hevc_epel_v32_8_msa; +- +- c->put_hevc_epel[1][1][1] = ff_hevc_put_hevc_epel_hv4_8_msa; +- c->put_hevc_epel[2][1][1] = ff_hevc_put_hevc_epel_hv6_8_msa; +- c->put_hevc_epel[3][1][1] = ff_hevc_put_hevc_epel_hv8_8_msa; +- c->put_hevc_epel[4][1][1] = ff_hevc_put_hevc_epel_hv12_8_msa; +- c->put_hevc_epel[5][1][1] = ff_hevc_put_hevc_epel_hv16_8_msa; +- c->put_hevc_epel[6][1][1] = ff_hevc_put_hevc_epel_hv24_8_msa; +- c->put_hevc_epel[7][1][1] = ff_hevc_put_hevc_epel_hv32_8_msa; +- +- c->put_hevc_qpel_uni[3][0][0] = ff_hevc_put_hevc_uni_pel_pixels8_8_msa; +- c->put_hevc_qpel_uni[4][0][0] = ff_hevc_put_hevc_uni_pel_pixels12_8_msa; +- c->put_hevc_qpel_uni[5][0][0] = ff_hevc_put_hevc_uni_pel_pixels16_8_msa; +- c->put_hevc_qpel_uni[6][0][0] = ff_hevc_put_hevc_uni_pel_pixels24_8_msa; +- c->put_hevc_qpel_uni[7][0][0] = ff_hevc_put_hevc_uni_pel_pixels32_8_msa; +- c->put_hevc_qpel_uni[8][0][0] = ff_hevc_put_hevc_uni_pel_pixels48_8_msa; +- c->put_hevc_qpel_uni[9][0][0] = ff_hevc_put_hevc_uni_pel_pixels64_8_msa; +- +- c->put_hevc_qpel_uni[1][0][1] = ff_hevc_put_hevc_uni_qpel_h4_8_msa; +- c->put_hevc_qpel_uni[3][0][1] = ff_hevc_put_hevc_uni_qpel_h8_8_msa; +- c->put_hevc_qpel_uni[4][0][1] = ff_hevc_put_hevc_uni_qpel_h12_8_msa; +- c->put_hevc_qpel_uni[5][0][1] = ff_hevc_put_hevc_uni_qpel_h16_8_msa; +- c->put_hevc_qpel_uni[6][0][1] = ff_hevc_put_hevc_uni_qpel_h24_8_msa; +- c->put_hevc_qpel_uni[7][0][1] = ff_hevc_put_hevc_uni_qpel_h32_8_msa; +- c->put_hevc_qpel_uni[8][0][1] = ff_hevc_put_hevc_uni_qpel_h48_8_msa; +- c->put_hevc_qpel_uni[9][0][1] = ff_hevc_put_hevc_uni_qpel_h64_8_msa; +- +- c->put_hevc_qpel_uni[1][1][0] = ff_hevc_put_hevc_uni_qpel_v4_8_msa; +- c->put_hevc_qpel_uni[3][1][0] = ff_hevc_put_hevc_uni_qpel_v8_8_msa; +- c->put_hevc_qpel_uni[4][1][0] = ff_hevc_put_hevc_uni_qpel_v12_8_msa; +- c->put_hevc_qpel_uni[5][1][0] = ff_hevc_put_hevc_uni_qpel_v16_8_msa; +- c->put_hevc_qpel_uni[6][1][0] = ff_hevc_put_hevc_uni_qpel_v24_8_msa; +- c->put_hevc_qpel_uni[7][1][0] = ff_hevc_put_hevc_uni_qpel_v32_8_msa; +- c->put_hevc_qpel_uni[8][1][0] = ff_hevc_put_hevc_uni_qpel_v48_8_msa; +- c->put_hevc_qpel_uni[9][1][0] = ff_hevc_put_hevc_uni_qpel_v64_8_msa; +- +- c->put_hevc_qpel_uni[1][1][1] = ff_hevc_put_hevc_uni_qpel_hv4_8_msa; +- c->put_hevc_qpel_uni[3][1][1] = ff_hevc_put_hevc_uni_qpel_hv8_8_msa; +- c->put_hevc_qpel_uni[4][1][1] = ff_hevc_put_hevc_uni_qpel_hv12_8_msa; +- c->put_hevc_qpel_uni[5][1][1] = ff_hevc_put_hevc_uni_qpel_hv16_8_msa; +- c->put_hevc_qpel_uni[6][1][1] = ff_hevc_put_hevc_uni_qpel_hv24_8_msa; +- c->put_hevc_qpel_uni[7][1][1] = ff_hevc_put_hevc_uni_qpel_hv32_8_msa; +- c->put_hevc_qpel_uni[8][1][1] = ff_hevc_put_hevc_uni_qpel_hv48_8_msa; +- c->put_hevc_qpel_uni[9][1][1] = ff_hevc_put_hevc_uni_qpel_hv64_8_msa; +- +- c->put_hevc_epel_uni[3][0][0] = ff_hevc_put_hevc_uni_pel_pixels8_8_msa; +- c->put_hevc_epel_uni[4][0][0] = ff_hevc_put_hevc_uni_pel_pixels12_8_msa; +- c->put_hevc_epel_uni[5][0][0] = ff_hevc_put_hevc_uni_pel_pixels16_8_msa; +- c->put_hevc_epel_uni[6][0][0] = ff_hevc_put_hevc_uni_pel_pixels24_8_msa; +- c->put_hevc_epel_uni[7][0][0] = ff_hevc_put_hevc_uni_pel_pixels32_8_msa; +- +- c->put_hevc_epel_uni[1][0][1] = ff_hevc_put_hevc_uni_epel_h4_8_msa; +- c->put_hevc_epel_uni[2][0][1] = ff_hevc_put_hevc_uni_epel_h6_8_msa; +- c->put_hevc_epel_uni[3][0][1] = ff_hevc_put_hevc_uni_epel_h8_8_msa; +- c->put_hevc_epel_uni[4][0][1] = ff_hevc_put_hevc_uni_epel_h12_8_msa; +- c->put_hevc_epel_uni[5][0][1] = ff_hevc_put_hevc_uni_epel_h16_8_msa; +- c->put_hevc_epel_uni[6][0][1] = ff_hevc_put_hevc_uni_epel_h24_8_msa; +- c->put_hevc_epel_uni[7][0][1] = ff_hevc_put_hevc_uni_epel_h32_8_msa; +- +- c->put_hevc_epel_uni[1][1][0] = ff_hevc_put_hevc_uni_epel_v4_8_msa; +- c->put_hevc_epel_uni[2][1][0] = ff_hevc_put_hevc_uni_epel_v6_8_msa; +- c->put_hevc_epel_uni[3][1][0] = ff_hevc_put_hevc_uni_epel_v8_8_msa; +- c->put_hevc_epel_uni[4][1][0] = ff_hevc_put_hevc_uni_epel_v12_8_msa; +- c->put_hevc_epel_uni[5][1][0] = ff_hevc_put_hevc_uni_epel_v16_8_msa; +- c->put_hevc_epel_uni[6][1][0] = ff_hevc_put_hevc_uni_epel_v24_8_msa; +- c->put_hevc_epel_uni[7][1][0] = ff_hevc_put_hevc_uni_epel_v32_8_msa; +- +- c->put_hevc_epel_uni[1][1][1] = ff_hevc_put_hevc_uni_epel_hv4_8_msa; +- c->put_hevc_epel_uni[2][1][1] = ff_hevc_put_hevc_uni_epel_hv6_8_msa; +- c->put_hevc_epel_uni[3][1][1] = ff_hevc_put_hevc_uni_epel_hv8_8_msa; +- c->put_hevc_epel_uni[4][1][1] = ff_hevc_put_hevc_uni_epel_hv12_8_msa; +- c->put_hevc_epel_uni[5][1][1] = ff_hevc_put_hevc_uni_epel_hv16_8_msa; +- c->put_hevc_epel_uni[6][1][1] = ff_hevc_put_hevc_uni_epel_hv24_8_msa; +- c->put_hevc_epel_uni[7][1][1] = ff_hevc_put_hevc_uni_epel_hv32_8_msa; +- +- c->put_hevc_qpel_uni_w[1][0][0] = +- ff_hevc_put_hevc_uni_w_pel_pixels4_8_msa; +- c->put_hevc_qpel_uni_w[3][0][0] = +- ff_hevc_put_hevc_uni_w_pel_pixels8_8_msa; +- c->put_hevc_qpel_uni_w[4][0][0] = +- ff_hevc_put_hevc_uni_w_pel_pixels12_8_msa; +- c->put_hevc_qpel_uni_w[5][0][0] = +- ff_hevc_put_hevc_uni_w_pel_pixels16_8_msa; +- c->put_hevc_qpel_uni_w[6][0][0] = +- ff_hevc_put_hevc_uni_w_pel_pixels24_8_msa; +- c->put_hevc_qpel_uni_w[7][0][0] = +- ff_hevc_put_hevc_uni_w_pel_pixels32_8_msa; +- c->put_hevc_qpel_uni_w[8][0][0] = +- ff_hevc_put_hevc_uni_w_pel_pixels48_8_msa; +- c->put_hevc_qpel_uni_w[9][0][0] = +- ff_hevc_put_hevc_uni_w_pel_pixels64_8_msa; +- +- c->put_hevc_qpel_uni_w[1][0][1] = ff_hevc_put_hevc_uni_w_qpel_h4_8_msa; +- c->put_hevc_qpel_uni_w[3][0][1] = ff_hevc_put_hevc_uni_w_qpel_h8_8_msa; +- c->put_hevc_qpel_uni_w[4][0][1] = ff_hevc_put_hevc_uni_w_qpel_h12_8_msa; +- c->put_hevc_qpel_uni_w[5][0][1] = ff_hevc_put_hevc_uni_w_qpel_h16_8_msa; +- c->put_hevc_qpel_uni_w[6][0][1] = ff_hevc_put_hevc_uni_w_qpel_h24_8_msa; +- c->put_hevc_qpel_uni_w[7][0][1] = ff_hevc_put_hevc_uni_w_qpel_h32_8_msa; +- c->put_hevc_qpel_uni_w[8][0][1] = ff_hevc_put_hevc_uni_w_qpel_h48_8_msa; +- c->put_hevc_qpel_uni_w[9][0][1] = ff_hevc_put_hevc_uni_w_qpel_h64_8_msa; +- +- c->put_hevc_qpel_uni_w[1][1][0] = ff_hevc_put_hevc_uni_w_qpel_v4_8_msa; +- c->put_hevc_qpel_uni_w[3][1][0] = ff_hevc_put_hevc_uni_w_qpel_v8_8_msa; +- c->put_hevc_qpel_uni_w[4][1][0] = ff_hevc_put_hevc_uni_w_qpel_v12_8_msa; +- c->put_hevc_qpel_uni_w[5][1][0] = ff_hevc_put_hevc_uni_w_qpel_v16_8_msa; +- c->put_hevc_qpel_uni_w[6][1][0] = ff_hevc_put_hevc_uni_w_qpel_v24_8_msa; +- c->put_hevc_qpel_uni_w[7][1][0] = ff_hevc_put_hevc_uni_w_qpel_v32_8_msa; +- c->put_hevc_qpel_uni_w[8][1][0] = ff_hevc_put_hevc_uni_w_qpel_v48_8_msa; +- c->put_hevc_qpel_uni_w[9][1][0] = ff_hevc_put_hevc_uni_w_qpel_v64_8_msa; +- +- c->put_hevc_qpel_uni_w[1][1][1] = ff_hevc_put_hevc_uni_w_qpel_hv4_8_msa; +- c->put_hevc_qpel_uni_w[3][1][1] = ff_hevc_put_hevc_uni_w_qpel_hv8_8_msa; +- c->put_hevc_qpel_uni_w[4][1][1] = +- ff_hevc_put_hevc_uni_w_qpel_hv12_8_msa; +- c->put_hevc_qpel_uni_w[5][1][1] = +- ff_hevc_put_hevc_uni_w_qpel_hv16_8_msa; +- c->put_hevc_qpel_uni_w[6][1][1] = +- ff_hevc_put_hevc_uni_w_qpel_hv24_8_msa; +- c->put_hevc_qpel_uni_w[7][1][1] = +- ff_hevc_put_hevc_uni_w_qpel_hv32_8_msa; +- c->put_hevc_qpel_uni_w[8][1][1] = +- ff_hevc_put_hevc_uni_w_qpel_hv48_8_msa; +- c->put_hevc_qpel_uni_w[9][1][1] = +- ff_hevc_put_hevc_uni_w_qpel_hv64_8_msa; +- +- c->put_hevc_epel_uni_w[1][0][0] = +- ff_hevc_put_hevc_uni_w_pel_pixels4_8_msa; +- c->put_hevc_epel_uni_w[2][0][0] = +- ff_hevc_put_hevc_uni_w_pel_pixels6_8_msa; +- c->put_hevc_epel_uni_w[3][0][0] = +- ff_hevc_put_hevc_uni_w_pel_pixels8_8_msa; +- c->put_hevc_epel_uni_w[4][0][0] = +- ff_hevc_put_hevc_uni_w_pel_pixels12_8_msa; +- c->put_hevc_epel_uni_w[5][0][0] = +- ff_hevc_put_hevc_uni_w_pel_pixels16_8_msa; +- c->put_hevc_epel_uni_w[6][0][0] = +- ff_hevc_put_hevc_uni_w_pel_pixels24_8_msa; +- c->put_hevc_epel_uni_w[7][0][0] = +- ff_hevc_put_hevc_uni_w_pel_pixels32_8_msa; +- +- c->put_hevc_epel_uni_w[1][0][1] = ff_hevc_put_hevc_uni_w_epel_h4_8_msa; +- c->put_hevc_epel_uni_w[2][0][1] = ff_hevc_put_hevc_uni_w_epel_h6_8_msa; +- c->put_hevc_epel_uni_w[3][0][1] = ff_hevc_put_hevc_uni_w_epel_h8_8_msa; +- c->put_hevc_epel_uni_w[4][0][1] = ff_hevc_put_hevc_uni_w_epel_h12_8_msa; +- c->put_hevc_epel_uni_w[5][0][1] = ff_hevc_put_hevc_uni_w_epel_h16_8_msa; +- c->put_hevc_epel_uni_w[6][0][1] = ff_hevc_put_hevc_uni_w_epel_h24_8_msa; +- c->put_hevc_epel_uni_w[7][0][1] = ff_hevc_put_hevc_uni_w_epel_h32_8_msa; +- +- c->put_hevc_epel_uni_w[1][1][0] = ff_hevc_put_hevc_uni_w_epel_v4_8_msa; +- c->put_hevc_epel_uni_w[2][1][0] = ff_hevc_put_hevc_uni_w_epel_v6_8_msa; +- c->put_hevc_epel_uni_w[3][1][0] = ff_hevc_put_hevc_uni_w_epel_v8_8_msa; +- c->put_hevc_epel_uni_w[4][1][0] = ff_hevc_put_hevc_uni_w_epel_v12_8_msa; +- c->put_hevc_epel_uni_w[5][1][0] = ff_hevc_put_hevc_uni_w_epel_v16_8_msa; +- c->put_hevc_epel_uni_w[6][1][0] = ff_hevc_put_hevc_uni_w_epel_v24_8_msa; +- c->put_hevc_epel_uni_w[7][1][0] = ff_hevc_put_hevc_uni_w_epel_v32_8_msa; +- +- c->put_hevc_epel_uni_w[1][1][1] = ff_hevc_put_hevc_uni_w_epel_hv4_8_msa; +- c->put_hevc_epel_uni_w[2][1][1] = ff_hevc_put_hevc_uni_w_epel_hv6_8_msa; +- c->put_hevc_epel_uni_w[3][1][1] = ff_hevc_put_hevc_uni_w_epel_hv8_8_msa; +- c->put_hevc_epel_uni_w[4][1][1] = +- ff_hevc_put_hevc_uni_w_epel_hv12_8_msa; +- c->put_hevc_epel_uni_w[5][1][1] = +- ff_hevc_put_hevc_uni_w_epel_hv16_8_msa; +- c->put_hevc_epel_uni_w[6][1][1] = +- ff_hevc_put_hevc_uni_w_epel_hv24_8_msa; +- c->put_hevc_epel_uni_w[7][1][1] = +- ff_hevc_put_hevc_uni_w_epel_hv32_8_msa; +- +- c->put_hevc_qpel_bi[1][0][0] = ff_hevc_put_hevc_bi_pel_pixels4_8_msa; +- c->put_hevc_qpel_bi[3][0][0] = ff_hevc_put_hevc_bi_pel_pixels8_8_msa; +- c->put_hevc_qpel_bi[4][0][0] = ff_hevc_put_hevc_bi_pel_pixels12_8_msa; +- c->put_hevc_qpel_bi[5][0][0] = ff_hevc_put_hevc_bi_pel_pixels16_8_msa; +- c->put_hevc_qpel_bi[6][0][0] = ff_hevc_put_hevc_bi_pel_pixels24_8_msa; +- c->put_hevc_qpel_bi[7][0][0] = ff_hevc_put_hevc_bi_pel_pixels32_8_msa; +- c->put_hevc_qpel_bi[8][0][0] = ff_hevc_put_hevc_bi_pel_pixels48_8_msa; +- c->put_hevc_qpel_bi[9][0][0] = ff_hevc_put_hevc_bi_pel_pixels64_8_msa; +- +- c->put_hevc_qpel_bi[1][0][1] = ff_hevc_put_hevc_bi_qpel_h4_8_msa; +- c->put_hevc_qpel_bi[3][0][1] = ff_hevc_put_hevc_bi_qpel_h8_8_msa; +- c->put_hevc_qpel_bi[4][0][1] = ff_hevc_put_hevc_bi_qpel_h12_8_msa; +- c->put_hevc_qpel_bi[5][0][1] = ff_hevc_put_hevc_bi_qpel_h16_8_msa; +- c->put_hevc_qpel_bi[6][0][1] = ff_hevc_put_hevc_bi_qpel_h24_8_msa; +- c->put_hevc_qpel_bi[7][0][1] = ff_hevc_put_hevc_bi_qpel_h32_8_msa; +- c->put_hevc_qpel_bi[8][0][1] = ff_hevc_put_hevc_bi_qpel_h48_8_msa; +- c->put_hevc_qpel_bi[9][0][1] = ff_hevc_put_hevc_bi_qpel_h64_8_msa; +- +- c->put_hevc_qpel_bi[1][1][0] = ff_hevc_put_hevc_bi_qpel_v4_8_msa; +- c->put_hevc_qpel_bi[3][1][0] = ff_hevc_put_hevc_bi_qpel_v8_8_msa; +- c->put_hevc_qpel_bi[4][1][0] = ff_hevc_put_hevc_bi_qpel_v12_8_msa; +- c->put_hevc_qpel_bi[5][1][0] = ff_hevc_put_hevc_bi_qpel_v16_8_msa; +- c->put_hevc_qpel_bi[6][1][0] = ff_hevc_put_hevc_bi_qpel_v24_8_msa; +- c->put_hevc_qpel_bi[7][1][0] = ff_hevc_put_hevc_bi_qpel_v32_8_msa; +- c->put_hevc_qpel_bi[8][1][0] = ff_hevc_put_hevc_bi_qpel_v48_8_msa; +- c->put_hevc_qpel_bi[9][1][0] = ff_hevc_put_hevc_bi_qpel_v64_8_msa; +- +- c->put_hevc_qpel_bi[1][1][1] = ff_hevc_put_hevc_bi_qpel_hv4_8_msa; +- c->put_hevc_qpel_bi[3][1][1] = ff_hevc_put_hevc_bi_qpel_hv8_8_msa; +- c->put_hevc_qpel_bi[4][1][1] = ff_hevc_put_hevc_bi_qpel_hv12_8_msa; +- c->put_hevc_qpel_bi[5][1][1] = ff_hevc_put_hevc_bi_qpel_hv16_8_msa; +- c->put_hevc_qpel_bi[6][1][1] = ff_hevc_put_hevc_bi_qpel_hv24_8_msa; +- c->put_hevc_qpel_bi[7][1][1] = ff_hevc_put_hevc_bi_qpel_hv32_8_msa; +- c->put_hevc_qpel_bi[8][1][1] = ff_hevc_put_hevc_bi_qpel_hv48_8_msa; +- c->put_hevc_qpel_bi[9][1][1] = ff_hevc_put_hevc_bi_qpel_hv64_8_msa; +- +- c->put_hevc_epel_bi[1][0][0] = ff_hevc_put_hevc_bi_pel_pixels4_8_msa; +- c->put_hevc_epel_bi[2][0][0] = ff_hevc_put_hevc_bi_pel_pixels6_8_msa; +- c->put_hevc_epel_bi[3][0][0] = ff_hevc_put_hevc_bi_pel_pixels8_8_msa; +- c->put_hevc_epel_bi[4][0][0] = ff_hevc_put_hevc_bi_pel_pixels12_8_msa; +- c->put_hevc_epel_bi[5][0][0] = ff_hevc_put_hevc_bi_pel_pixels16_8_msa; +- c->put_hevc_epel_bi[6][0][0] = ff_hevc_put_hevc_bi_pel_pixels24_8_msa; +- c->put_hevc_epel_bi[7][0][0] = ff_hevc_put_hevc_bi_pel_pixels32_8_msa; +- +- c->put_hevc_epel_bi[1][0][1] = ff_hevc_put_hevc_bi_epel_h4_8_msa; +- c->put_hevc_epel_bi[2][0][1] = ff_hevc_put_hevc_bi_epel_h6_8_msa; +- c->put_hevc_epel_bi[3][0][1] = ff_hevc_put_hevc_bi_epel_h8_8_msa; +- c->put_hevc_epel_bi[4][0][1] = ff_hevc_put_hevc_bi_epel_h12_8_msa; +- c->put_hevc_epel_bi[5][0][1] = ff_hevc_put_hevc_bi_epel_h16_8_msa; +- c->put_hevc_epel_bi[6][0][1] = ff_hevc_put_hevc_bi_epel_h24_8_msa; +- c->put_hevc_epel_bi[7][0][1] = ff_hevc_put_hevc_bi_epel_h32_8_msa; +- +- c->put_hevc_epel_bi[1][1][0] = ff_hevc_put_hevc_bi_epel_v4_8_msa; +- c->put_hevc_epel_bi[2][1][0] = ff_hevc_put_hevc_bi_epel_v6_8_msa; +- c->put_hevc_epel_bi[3][1][0] = ff_hevc_put_hevc_bi_epel_v8_8_msa; +- c->put_hevc_epel_bi[4][1][0] = ff_hevc_put_hevc_bi_epel_v12_8_msa; +- c->put_hevc_epel_bi[5][1][0] = ff_hevc_put_hevc_bi_epel_v16_8_msa; +- c->put_hevc_epel_bi[6][1][0] = ff_hevc_put_hevc_bi_epel_v24_8_msa; +- c->put_hevc_epel_bi[7][1][0] = ff_hevc_put_hevc_bi_epel_v32_8_msa; +- +- c->put_hevc_epel_bi[1][1][1] = ff_hevc_put_hevc_bi_epel_hv4_8_msa; +- c->put_hevc_epel_bi[2][1][1] = ff_hevc_put_hevc_bi_epel_hv6_8_msa; +- c->put_hevc_epel_bi[3][1][1] = ff_hevc_put_hevc_bi_epel_hv8_8_msa; +- c->put_hevc_epel_bi[4][1][1] = ff_hevc_put_hevc_bi_epel_hv12_8_msa; +- c->put_hevc_epel_bi[5][1][1] = ff_hevc_put_hevc_bi_epel_hv16_8_msa; +- c->put_hevc_epel_bi[6][1][1] = ff_hevc_put_hevc_bi_epel_hv24_8_msa; +- c->put_hevc_epel_bi[7][1][1] = ff_hevc_put_hevc_bi_epel_hv32_8_msa; +- +- c->put_hevc_qpel_bi_w[1][0][0] = +- ff_hevc_put_hevc_bi_w_pel_pixels4_8_msa; +- c->put_hevc_qpel_bi_w[3][0][0] = +- ff_hevc_put_hevc_bi_w_pel_pixels8_8_msa; +- c->put_hevc_qpel_bi_w[4][0][0] = +- ff_hevc_put_hevc_bi_w_pel_pixels12_8_msa; +- c->put_hevc_qpel_bi_w[5][0][0] = +- ff_hevc_put_hevc_bi_w_pel_pixels16_8_msa; +- c->put_hevc_qpel_bi_w[6][0][0] = +- ff_hevc_put_hevc_bi_w_pel_pixels24_8_msa; +- c->put_hevc_qpel_bi_w[7][0][0] = +- ff_hevc_put_hevc_bi_w_pel_pixels32_8_msa; +- c->put_hevc_qpel_bi_w[8][0][0] = +- ff_hevc_put_hevc_bi_w_pel_pixels48_8_msa; +- c->put_hevc_qpel_bi_w[9][0][0] = +- ff_hevc_put_hevc_bi_w_pel_pixels64_8_msa; +- +- c->put_hevc_qpel_bi_w[1][0][1] = ff_hevc_put_hevc_bi_w_qpel_h4_8_msa; +- c->put_hevc_qpel_bi_w[3][0][1] = ff_hevc_put_hevc_bi_w_qpel_h8_8_msa; +- c->put_hevc_qpel_bi_w[4][0][1] = ff_hevc_put_hevc_bi_w_qpel_h12_8_msa; +- c->put_hevc_qpel_bi_w[5][0][1] = ff_hevc_put_hevc_bi_w_qpel_h16_8_msa; +- c->put_hevc_qpel_bi_w[6][0][1] = ff_hevc_put_hevc_bi_w_qpel_h24_8_msa; +- c->put_hevc_qpel_bi_w[7][0][1] = ff_hevc_put_hevc_bi_w_qpel_h32_8_msa; +- c->put_hevc_qpel_bi_w[8][0][1] = ff_hevc_put_hevc_bi_w_qpel_h48_8_msa; +- c->put_hevc_qpel_bi_w[9][0][1] = ff_hevc_put_hevc_bi_w_qpel_h64_8_msa; +- +- c->put_hevc_qpel_bi_w[1][1][0] = ff_hevc_put_hevc_bi_w_qpel_v4_8_msa; +- c->put_hevc_qpel_bi_w[3][1][0] = ff_hevc_put_hevc_bi_w_qpel_v8_8_msa; +- c->put_hevc_qpel_bi_w[4][1][0] = ff_hevc_put_hevc_bi_w_qpel_v12_8_msa; +- c->put_hevc_qpel_bi_w[5][1][0] = ff_hevc_put_hevc_bi_w_qpel_v16_8_msa; +- c->put_hevc_qpel_bi_w[6][1][0] = ff_hevc_put_hevc_bi_w_qpel_v24_8_msa; +- c->put_hevc_qpel_bi_w[7][1][0] = ff_hevc_put_hevc_bi_w_qpel_v32_8_msa; +- c->put_hevc_qpel_bi_w[8][1][0] = ff_hevc_put_hevc_bi_w_qpel_v48_8_msa; +- c->put_hevc_qpel_bi_w[9][1][0] = ff_hevc_put_hevc_bi_w_qpel_v64_8_msa; +- +- c->put_hevc_qpel_bi_w[1][1][1] = ff_hevc_put_hevc_bi_w_qpel_hv4_8_msa; +- c->put_hevc_qpel_bi_w[3][1][1] = ff_hevc_put_hevc_bi_w_qpel_hv8_8_msa; +- c->put_hevc_qpel_bi_w[4][1][1] = ff_hevc_put_hevc_bi_w_qpel_hv12_8_msa; +- c->put_hevc_qpel_bi_w[5][1][1] = ff_hevc_put_hevc_bi_w_qpel_hv16_8_msa; +- c->put_hevc_qpel_bi_w[6][1][1] = ff_hevc_put_hevc_bi_w_qpel_hv24_8_msa; +- c->put_hevc_qpel_bi_w[7][1][1] = ff_hevc_put_hevc_bi_w_qpel_hv32_8_msa; +- c->put_hevc_qpel_bi_w[8][1][1] = ff_hevc_put_hevc_bi_w_qpel_hv48_8_msa; +- c->put_hevc_qpel_bi_w[9][1][1] = ff_hevc_put_hevc_bi_w_qpel_hv64_8_msa; +- +- c->put_hevc_epel_bi_w[1][0][0] = +- ff_hevc_put_hevc_bi_w_pel_pixels4_8_msa; +- c->put_hevc_epel_bi_w[2][0][0] = +- ff_hevc_put_hevc_bi_w_pel_pixels6_8_msa; +- c->put_hevc_epel_bi_w[3][0][0] = +- ff_hevc_put_hevc_bi_w_pel_pixels8_8_msa; +- c->put_hevc_epel_bi_w[4][0][0] = +- ff_hevc_put_hevc_bi_w_pel_pixels12_8_msa; +- c->put_hevc_epel_bi_w[5][0][0] = +- ff_hevc_put_hevc_bi_w_pel_pixels16_8_msa; +- c->put_hevc_epel_bi_w[6][0][0] = +- ff_hevc_put_hevc_bi_w_pel_pixels24_8_msa; +- c->put_hevc_epel_bi_w[7][0][0] = +- ff_hevc_put_hevc_bi_w_pel_pixels32_8_msa; +- +- c->put_hevc_epel_bi_w[1][0][1] = ff_hevc_put_hevc_bi_w_epel_h4_8_msa; +- c->put_hevc_epel_bi_w[2][0][1] = ff_hevc_put_hevc_bi_w_epel_h6_8_msa; +- c->put_hevc_epel_bi_w[3][0][1] = ff_hevc_put_hevc_bi_w_epel_h8_8_msa; +- c->put_hevc_epel_bi_w[4][0][1] = ff_hevc_put_hevc_bi_w_epel_h12_8_msa; +- c->put_hevc_epel_bi_w[5][0][1] = ff_hevc_put_hevc_bi_w_epel_h16_8_msa; +- c->put_hevc_epel_bi_w[6][0][1] = ff_hevc_put_hevc_bi_w_epel_h24_8_msa; +- c->put_hevc_epel_bi_w[7][0][1] = ff_hevc_put_hevc_bi_w_epel_h32_8_msa; +- +- c->put_hevc_epel_bi_w[1][1][0] = ff_hevc_put_hevc_bi_w_epel_v4_8_msa; +- c->put_hevc_epel_bi_w[2][1][0] = ff_hevc_put_hevc_bi_w_epel_v6_8_msa; +- c->put_hevc_epel_bi_w[3][1][0] = ff_hevc_put_hevc_bi_w_epel_v8_8_msa; +- c->put_hevc_epel_bi_w[4][1][0] = ff_hevc_put_hevc_bi_w_epel_v12_8_msa; +- c->put_hevc_epel_bi_w[5][1][0] = ff_hevc_put_hevc_bi_w_epel_v16_8_msa; +- c->put_hevc_epel_bi_w[6][1][0] = ff_hevc_put_hevc_bi_w_epel_v24_8_msa; +- c->put_hevc_epel_bi_w[7][1][0] = ff_hevc_put_hevc_bi_w_epel_v32_8_msa; +- +- c->put_hevc_epel_bi_w[1][1][1] = ff_hevc_put_hevc_bi_w_epel_hv4_8_msa; +- c->put_hevc_epel_bi_w[2][1][1] = ff_hevc_put_hevc_bi_w_epel_hv6_8_msa; +- c->put_hevc_epel_bi_w[3][1][1] = ff_hevc_put_hevc_bi_w_epel_hv8_8_msa; +- c->put_hevc_epel_bi_w[4][1][1] = ff_hevc_put_hevc_bi_w_epel_hv12_8_msa; +- c->put_hevc_epel_bi_w[5][1][1] = ff_hevc_put_hevc_bi_w_epel_hv16_8_msa; +- c->put_hevc_epel_bi_w[6][1][1] = ff_hevc_put_hevc_bi_w_epel_hv24_8_msa; +- c->put_hevc_epel_bi_w[7][1][1] = ff_hevc_put_hevc_bi_w_epel_hv32_8_msa; +- +- c->sao_band_filter[0] = +- c->sao_band_filter[1] = +- c->sao_band_filter[2] = +- c->sao_band_filter[3] = +- c->sao_band_filter[4] = ff_hevc_sao_band_filter_0_8_msa; +- +- c->sao_edge_filter[0] = +- c->sao_edge_filter[1] = +- c->sao_edge_filter[2] = +- c->sao_edge_filter[3] = +- c->sao_edge_filter[4] = ff_hevc_sao_edge_filter_8_msa; +- +- c->hevc_h_loop_filter_luma = ff_hevc_loop_filter_luma_h_8_msa; +- c->hevc_v_loop_filter_luma = ff_hevc_loop_filter_luma_v_8_msa; +- +- c->hevc_h_loop_filter_chroma = ff_hevc_loop_filter_chroma_h_8_msa; +- c->hevc_v_loop_filter_chroma = ff_hevc_loop_filter_chroma_v_8_msa; +- +- c->hevc_h_loop_filter_luma_c = ff_hevc_loop_filter_luma_h_8_msa; +- c->hevc_v_loop_filter_luma_c = ff_hevc_loop_filter_luma_v_8_msa; +- +- c->hevc_h_loop_filter_chroma_c = +- ff_hevc_loop_filter_chroma_h_8_msa; +- c->hevc_v_loop_filter_chroma_c = +- ff_hevc_loop_filter_chroma_v_8_msa; +- +- c->idct[0] = ff_hevc_idct_4x4_msa; +- c->idct[1] = ff_hevc_idct_8x8_msa; +- c->idct[2] = ff_hevc_idct_16x16_msa; +- c->idct[3] = ff_hevc_idct_32x32_msa; +- c->idct_dc[0] = ff_hevc_idct_dc_4x4_msa; +- c->idct_dc[1] = ff_hevc_idct_dc_8x8_msa; +- c->idct_dc[2] = ff_hevc_idct_dc_16x16_msa; +- c->idct_dc[3] = ff_hevc_idct_dc_32x32_msa; +- c->add_residual[0] = ff_hevc_addblk_4x4_msa; +- c->add_residual[1] = ff_hevc_addblk_8x8_msa; +- c->add_residual[2] = ff_hevc_addblk_16x16_msa; +- c->add_residual[3] = ff_hevc_addblk_32x32_msa; +- c->transform_4x4_luma = ff_hevc_idct_luma_4x4_msa; ++ int cpu_flags = av_get_cpu_flags(); ++ ++ if (have_mmi(cpu_flags)) { ++ if (bit_depth == 8) { ++ c->put_hevc_qpel[1][0][1] = ff_hevc_put_hevc_qpel_h4_8_mmi; ++ c->put_hevc_qpel[3][0][1] = ff_hevc_put_hevc_qpel_h8_8_mmi; ++ c->put_hevc_qpel[4][0][1] = ff_hevc_put_hevc_qpel_h12_8_mmi; ++ c->put_hevc_qpel[5][0][1] = ff_hevc_put_hevc_qpel_h16_8_mmi; ++ c->put_hevc_qpel[6][0][1] = ff_hevc_put_hevc_qpel_h24_8_mmi; ++ c->put_hevc_qpel[7][0][1] = ff_hevc_put_hevc_qpel_h32_8_mmi; ++ c->put_hevc_qpel[8][0][1] = ff_hevc_put_hevc_qpel_h48_8_mmi; ++ c->put_hevc_qpel[9][0][1] = ff_hevc_put_hevc_qpel_h64_8_mmi; ++ ++ c->put_hevc_qpel[1][1][1] = ff_hevc_put_hevc_qpel_hv4_8_mmi; ++ c->put_hevc_qpel[3][1][1] = ff_hevc_put_hevc_qpel_hv8_8_mmi; ++ c->put_hevc_qpel[4][1][1] = ff_hevc_put_hevc_qpel_hv12_8_mmi; ++ c->put_hevc_qpel[5][1][1] = ff_hevc_put_hevc_qpel_hv16_8_mmi; ++ c->put_hevc_qpel[6][1][1] = ff_hevc_put_hevc_qpel_hv24_8_mmi; ++ c->put_hevc_qpel[7][1][1] = ff_hevc_put_hevc_qpel_hv32_8_mmi; ++ c->put_hevc_qpel[8][1][1] = ff_hevc_put_hevc_qpel_hv48_8_mmi; ++ c->put_hevc_qpel[9][1][1] = ff_hevc_put_hevc_qpel_hv64_8_mmi; ++ ++ c->put_hevc_qpel_bi[1][0][1] = ff_hevc_put_hevc_qpel_bi_h4_8_mmi; ++ c->put_hevc_qpel_bi[3][0][1] = ff_hevc_put_hevc_qpel_bi_h8_8_mmi; ++ c->put_hevc_qpel_bi[4][0][1] = ff_hevc_put_hevc_qpel_bi_h12_8_mmi; ++ c->put_hevc_qpel_bi[5][0][1] = ff_hevc_put_hevc_qpel_bi_h16_8_mmi; ++ c->put_hevc_qpel_bi[6][0][1] = ff_hevc_put_hevc_qpel_bi_h24_8_mmi; ++ c->put_hevc_qpel_bi[7][0][1] = ff_hevc_put_hevc_qpel_bi_h32_8_mmi; ++ c->put_hevc_qpel_bi[8][0][1] = ff_hevc_put_hevc_qpel_bi_h48_8_mmi; ++ c->put_hevc_qpel_bi[9][0][1] = ff_hevc_put_hevc_qpel_bi_h64_8_mmi; ++ ++ c->put_hevc_qpel_bi[1][1][1] = ff_hevc_put_hevc_qpel_bi_hv4_8_mmi; ++ c->put_hevc_qpel_bi[3][1][1] = ff_hevc_put_hevc_qpel_bi_hv8_8_mmi; ++ c->put_hevc_qpel_bi[4][1][1] = ff_hevc_put_hevc_qpel_bi_hv12_8_mmi; ++ c->put_hevc_qpel_bi[5][1][1] = ff_hevc_put_hevc_qpel_bi_hv16_8_mmi; ++ c->put_hevc_qpel_bi[6][1][1] = ff_hevc_put_hevc_qpel_bi_hv24_8_mmi; ++ c->put_hevc_qpel_bi[7][1][1] = ff_hevc_put_hevc_qpel_bi_hv32_8_mmi; ++ c->put_hevc_qpel_bi[8][1][1] = ff_hevc_put_hevc_qpel_bi_hv48_8_mmi; ++ c->put_hevc_qpel_bi[9][1][1] = ff_hevc_put_hevc_qpel_bi_hv64_8_mmi; ++ ++ c->put_hevc_qpel_bi[3][0][0] = ff_hevc_put_hevc_pel_bi_pixels8_8_mmi; ++ c->put_hevc_qpel_bi[5][0][0] = ff_hevc_put_hevc_pel_bi_pixels16_8_mmi; ++ c->put_hevc_qpel_bi[6][0][0] = ff_hevc_put_hevc_pel_bi_pixels24_8_mmi; ++ c->put_hevc_qpel_bi[7][0][0] = ff_hevc_put_hevc_pel_bi_pixels32_8_mmi; ++ c->put_hevc_qpel_bi[8][0][0] = ff_hevc_put_hevc_pel_bi_pixels48_8_mmi; ++ c->put_hevc_qpel_bi[9][0][0] = ff_hevc_put_hevc_pel_bi_pixels64_8_mmi; ++ ++ c->put_hevc_epel_bi[3][0][0] = ff_hevc_put_hevc_pel_bi_pixels8_8_mmi; ++ c->put_hevc_epel_bi[5][0][0] = ff_hevc_put_hevc_pel_bi_pixels16_8_mmi; ++ c->put_hevc_epel_bi[6][0][0] = ff_hevc_put_hevc_pel_bi_pixels24_8_mmi; ++ c->put_hevc_epel_bi[7][0][0] = ff_hevc_put_hevc_pel_bi_pixels32_8_mmi; ++ ++ c->put_hevc_epel_bi[1][1][1] = ff_hevc_put_hevc_epel_bi_hv4_8_mmi; ++ c->put_hevc_epel_bi[3][1][1] = ff_hevc_put_hevc_epel_bi_hv8_8_mmi; ++ c->put_hevc_epel_bi[4][1][1] = ff_hevc_put_hevc_epel_bi_hv12_8_mmi; ++ c->put_hevc_epel_bi[5][1][1] = ff_hevc_put_hevc_epel_bi_hv16_8_mmi; ++ c->put_hevc_epel_bi[6][1][1] = ff_hevc_put_hevc_epel_bi_hv24_8_mmi; ++ c->put_hevc_epel_bi[7][1][1] = ff_hevc_put_hevc_epel_bi_hv32_8_mmi; ++ ++ c->put_hevc_qpel_uni[1][1][1] = ff_hevc_put_hevc_qpel_uni_hv4_8_mmi; ++ c->put_hevc_qpel_uni[3][1][1] = ff_hevc_put_hevc_qpel_uni_hv8_8_mmi; ++ c->put_hevc_qpel_uni[4][1][1] = ff_hevc_put_hevc_qpel_uni_hv12_8_mmi; ++ c->put_hevc_qpel_uni[5][1][1] = ff_hevc_put_hevc_qpel_uni_hv16_8_mmi; ++ c->put_hevc_qpel_uni[6][1][1] = ff_hevc_put_hevc_qpel_uni_hv24_8_mmi; ++ c->put_hevc_qpel_uni[7][1][1] = ff_hevc_put_hevc_qpel_uni_hv32_8_mmi; ++ c->put_hevc_qpel_uni[8][1][1] = ff_hevc_put_hevc_qpel_uni_hv48_8_mmi; ++ c->put_hevc_qpel_uni[9][1][1] = ff_hevc_put_hevc_qpel_uni_hv64_8_mmi; ++ } + } +-} +-#endif // #if HAVE_MSA + +-void ff_hevc_dsp_init_mips(HEVCDSPContext *c, const int bit_depth) +-{ +-#if HAVE_MSA +- hevc_dsp_init_msa(c, bit_depth); +-#endif // #if HAVE_MSA ++ if (have_msa(cpu_flags)) { ++ if (bit_depth == 8) { ++ c->put_hevc_qpel[1][0][0] = ff_hevc_put_hevc_pel_pixels4_8_msa; ++ c->put_hevc_qpel[2][0][0] = ff_hevc_put_hevc_pel_pixels6_8_msa; ++ c->put_hevc_qpel[3][0][0] = ff_hevc_put_hevc_pel_pixels8_8_msa; ++ c->put_hevc_qpel[4][0][0] = ff_hevc_put_hevc_pel_pixels12_8_msa; ++ c->put_hevc_qpel[5][0][0] = ff_hevc_put_hevc_pel_pixels16_8_msa; ++ c->put_hevc_qpel[6][0][0] = ff_hevc_put_hevc_pel_pixels24_8_msa; ++ c->put_hevc_qpel[7][0][0] = ff_hevc_put_hevc_pel_pixels32_8_msa; ++ c->put_hevc_qpel[8][0][0] = ff_hevc_put_hevc_pel_pixels48_8_msa; ++ c->put_hevc_qpel[9][0][0] = ff_hevc_put_hevc_pel_pixels64_8_msa; ++ ++ c->put_hevc_qpel[1][0][1] = ff_hevc_put_hevc_qpel_h4_8_msa; ++ c->put_hevc_qpel[3][0][1] = ff_hevc_put_hevc_qpel_h8_8_msa; ++ c->put_hevc_qpel[4][0][1] = ff_hevc_put_hevc_qpel_h12_8_msa; ++ c->put_hevc_qpel[5][0][1] = ff_hevc_put_hevc_qpel_h16_8_msa; ++ c->put_hevc_qpel[6][0][1] = ff_hevc_put_hevc_qpel_h24_8_msa; ++ c->put_hevc_qpel[7][0][1] = ff_hevc_put_hevc_qpel_h32_8_msa; ++ c->put_hevc_qpel[8][0][1] = ff_hevc_put_hevc_qpel_h48_8_msa; ++ c->put_hevc_qpel[9][0][1] = ff_hevc_put_hevc_qpel_h64_8_msa; ++ ++ c->put_hevc_qpel[1][1][0] = ff_hevc_put_hevc_qpel_v4_8_msa; ++ c->put_hevc_qpel[3][1][0] = ff_hevc_put_hevc_qpel_v8_8_msa; ++ c->put_hevc_qpel[4][1][0] = ff_hevc_put_hevc_qpel_v12_8_msa; ++ c->put_hevc_qpel[5][1][0] = ff_hevc_put_hevc_qpel_v16_8_msa; ++ c->put_hevc_qpel[6][1][0] = ff_hevc_put_hevc_qpel_v24_8_msa; ++ c->put_hevc_qpel[7][1][0] = ff_hevc_put_hevc_qpel_v32_8_msa; ++ c->put_hevc_qpel[8][1][0] = ff_hevc_put_hevc_qpel_v48_8_msa; ++ c->put_hevc_qpel[9][1][0] = ff_hevc_put_hevc_qpel_v64_8_msa; ++ ++ c->put_hevc_qpel[1][1][1] = ff_hevc_put_hevc_qpel_hv4_8_msa; ++ c->put_hevc_qpel[3][1][1] = ff_hevc_put_hevc_qpel_hv8_8_msa; ++ c->put_hevc_qpel[4][1][1] = ff_hevc_put_hevc_qpel_hv12_8_msa; ++ c->put_hevc_qpel[5][1][1] = ff_hevc_put_hevc_qpel_hv16_8_msa; ++ c->put_hevc_qpel[6][1][1] = ff_hevc_put_hevc_qpel_hv24_8_msa; ++ c->put_hevc_qpel[7][1][1] = ff_hevc_put_hevc_qpel_hv32_8_msa; ++ c->put_hevc_qpel[8][1][1] = ff_hevc_put_hevc_qpel_hv48_8_msa; ++ c->put_hevc_qpel[9][1][1] = ff_hevc_put_hevc_qpel_hv64_8_msa; ++ ++ c->put_hevc_epel[1][0][0] = ff_hevc_put_hevc_pel_pixels4_8_msa; ++ c->put_hevc_epel[2][0][0] = ff_hevc_put_hevc_pel_pixels6_8_msa; ++ c->put_hevc_epel[3][0][0] = ff_hevc_put_hevc_pel_pixels8_8_msa; ++ c->put_hevc_epel[4][0][0] = ff_hevc_put_hevc_pel_pixels12_8_msa; ++ c->put_hevc_epel[5][0][0] = ff_hevc_put_hevc_pel_pixels16_8_msa; ++ c->put_hevc_epel[6][0][0] = ff_hevc_put_hevc_pel_pixels24_8_msa; ++ c->put_hevc_epel[7][0][0] = ff_hevc_put_hevc_pel_pixels32_8_msa; ++ ++ c->put_hevc_epel[1][0][1] = ff_hevc_put_hevc_epel_h4_8_msa; ++ c->put_hevc_epel[2][0][1] = ff_hevc_put_hevc_epel_h6_8_msa; ++ c->put_hevc_epel[3][0][1] = ff_hevc_put_hevc_epel_h8_8_msa; ++ c->put_hevc_epel[4][0][1] = ff_hevc_put_hevc_epel_h12_8_msa; ++ c->put_hevc_epel[5][0][1] = ff_hevc_put_hevc_epel_h16_8_msa; ++ c->put_hevc_epel[6][0][1] = ff_hevc_put_hevc_epel_h24_8_msa; ++ c->put_hevc_epel[7][0][1] = ff_hevc_put_hevc_epel_h32_8_msa; ++ ++ c->put_hevc_epel[1][1][0] = ff_hevc_put_hevc_epel_v4_8_msa; ++ c->put_hevc_epel[2][1][0] = ff_hevc_put_hevc_epel_v6_8_msa; ++ c->put_hevc_epel[3][1][0] = ff_hevc_put_hevc_epel_v8_8_msa; ++ c->put_hevc_epel[4][1][0] = ff_hevc_put_hevc_epel_v12_8_msa; ++ c->put_hevc_epel[5][1][0] = ff_hevc_put_hevc_epel_v16_8_msa; ++ c->put_hevc_epel[6][1][0] = ff_hevc_put_hevc_epel_v24_8_msa; ++ c->put_hevc_epel[7][1][0] = ff_hevc_put_hevc_epel_v32_8_msa; ++ ++ c->put_hevc_epel[1][1][1] = ff_hevc_put_hevc_epel_hv4_8_msa; ++ c->put_hevc_epel[2][1][1] = ff_hevc_put_hevc_epel_hv6_8_msa; ++ c->put_hevc_epel[3][1][1] = ff_hevc_put_hevc_epel_hv8_8_msa; ++ c->put_hevc_epel[4][1][1] = ff_hevc_put_hevc_epel_hv12_8_msa; ++ c->put_hevc_epel[5][1][1] = ff_hevc_put_hevc_epel_hv16_8_msa; ++ c->put_hevc_epel[6][1][1] = ff_hevc_put_hevc_epel_hv24_8_msa; ++ c->put_hevc_epel[7][1][1] = ff_hevc_put_hevc_epel_hv32_8_msa; ++ ++ c->put_hevc_qpel_uni[3][0][0] = ff_hevc_put_hevc_uni_pel_pixels8_8_msa; ++ c->put_hevc_qpel_uni[4][0][0] = ff_hevc_put_hevc_uni_pel_pixels12_8_msa; ++ c->put_hevc_qpel_uni[5][0][0] = ff_hevc_put_hevc_uni_pel_pixels16_8_msa; ++ c->put_hevc_qpel_uni[6][0][0] = ff_hevc_put_hevc_uni_pel_pixels24_8_msa; ++ c->put_hevc_qpel_uni[7][0][0] = ff_hevc_put_hevc_uni_pel_pixels32_8_msa; ++ c->put_hevc_qpel_uni[8][0][0] = ff_hevc_put_hevc_uni_pel_pixels48_8_msa; ++ c->put_hevc_qpel_uni[9][0][0] = ff_hevc_put_hevc_uni_pel_pixels64_8_msa; ++ ++ c->put_hevc_qpel_uni[1][0][1] = ff_hevc_put_hevc_uni_qpel_h4_8_msa; ++ c->put_hevc_qpel_uni[3][0][1] = ff_hevc_put_hevc_uni_qpel_h8_8_msa; ++ c->put_hevc_qpel_uni[4][0][1] = ff_hevc_put_hevc_uni_qpel_h12_8_msa; ++ c->put_hevc_qpel_uni[5][0][1] = ff_hevc_put_hevc_uni_qpel_h16_8_msa; ++ c->put_hevc_qpel_uni[6][0][1] = ff_hevc_put_hevc_uni_qpel_h24_8_msa; ++ c->put_hevc_qpel_uni[7][0][1] = ff_hevc_put_hevc_uni_qpel_h32_8_msa; ++ c->put_hevc_qpel_uni[8][0][1] = ff_hevc_put_hevc_uni_qpel_h48_8_msa; ++ c->put_hevc_qpel_uni[9][0][1] = ff_hevc_put_hevc_uni_qpel_h64_8_msa; ++ ++ c->put_hevc_qpel_uni[1][1][0] = ff_hevc_put_hevc_uni_qpel_v4_8_msa; ++ c->put_hevc_qpel_uni[3][1][0] = ff_hevc_put_hevc_uni_qpel_v8_8_msa; ++ c->put_hevc_qpel_uni[4][1][0] = ff_hevc_put_hevc_uni_qpel_v12_8_msa; ++ c->put_hevc_qpel_uni[5][1][0] = ff_hevc_put_hevc_uni_qpel_v16_8_msa; ++ c->put_hevc_qpel_uni[6][1][0] = ff_hevc_put_hevc_uni_qpel_v24_8_msa; ++ c->put_hevc_qpel_uni[7][1][0] = ff_hevc_put_hevc_uni_qpel_v32_8_msa; ++ c->put_hevc_qpel_uni[8][1][0] = ff_hevc_put_hevc_uni_qpel_v48_8_msa; ++ c->put_hevc_qpel_uni[9][1][0] = ff_hevc_put_hevc_uni_qpel_v64_8_msa; ++ ++ c->put_hevc_qpel_uni[1][1][1] = ff_hevc_put_hevc_uni_qpel_hv4_8_msa; ++ c->put_hevc_qpel_uni[3][1][1] = ff_hevc_put_hevc_uni_qpel_hv8_8_msa; ++ c->put_hevc_qpel_uni[4][1][1] = ff_hevc_put_hevc_uni_qpel_hv12_8_msa; ++ c->put_hevc_qpel_uni[5][1][1] = ff_hevc_put_hevc_uni_qpel_hv16_8_msa; ++ c->put_hevc_qpel_uni[6][1][1] = ff_hevc_put_hevc_uni_qpel_hv24_8_msa; ++ c->put_hevc_qpel_uni[7][1][1] = ff_hevc_put_hevc_uni_qpel_hv32_8_msa; ++ c->put_hevc_qpel_uni[8][1][1] = ff_hevc_put_hevc_uni_qpel_hv48_8_msa; ++ c->put_hevc_qpel_uni[9][1][1] = ff_hevc_put_hevc_uni_qpel_hv64_8_msa; ++ ++ c->put_hevc_epel_uni[3][0][0] = ff_hevc_put_hevc_uni_pel_pixels8_8_msa; ++ c->put_hevc_epel_uni[4][0][0] = ff_hevc_put_hevc_uni_pel_pixels12_8_msa; ++ c->put_hevc_epel_uni[5][0][0] = ff_hevc_put_hevc_uni_pel_pixels16_8_msa; ++ c->put_hevc_epel_uni[6][0][0] = ff_hevc_put_hevc_uni_pel_pixels24_8_msa; ++ c->put_hevc_epel_uni[7][0][0] = ff_hevc_put_hevc_uni_pel_pixels32_8_msa; ++ ++ c->put_hevc_epel_uni[1][0][1] = ff_hevc_put_hevc_uni_epel_h4_8_msa; ++ c->put_hevc_epel_uni[2][0][1] = ff_hevc_put_hevc_uni_epel_h6_8_msa; ++ c->put_hevc_epel_uni[3][0][1] = ff_hevc_put_hevc_uni_epel_h8_8_msa; ++ c->put_hevc_epel_uni[4][0][1] = ff_hevc_put_hevc_uni_epel_h12_8_msa; ++ c->put_hevc_epel_uni[5][0][1] = ff_hevc_put_hevc_uni_epel_h16_8_msa; ++ c->put_hevc_epel_uni[6][0][1] = ff_hevc_put_hevc_uni_epel_h24_8_msa; ++ c->put_hevc_epel_uni[7][0][1] = ff_hevc_put_hevc_uni_epel_h32_8_msa; ++ ++ c->put_hevc_epel_uni[1][1][0] = ff_hevc_put_hevc_uni_epel_v4_8_msa; ++ c->put_hevc_epel_uni[2][1][0] = ff_hevc_put_hevc_uni_epel_v6_8_msa; ++ c->put_hevc_epel_uni[3][1][0] = ff_hevc_put_hevc_uni_epel_v8_8_msa; ++ c->put_hevc_epel_uni[4][1][0] = ff_hevc_put_hevc_uni_epel_v12_8_msa; ++ c->put_hevc_epel_uni[5][1][0] = ff_hevc_put_hevc_uni_epel_v16_8_msa; ++ c->put_hevc_epel_uni[6][1][0] = ff_hevc_put_hevc_uni_epel_v24_8_msa; ++ c->put_hevc_epel_uni[7][1][0] = ff_hevc_put_hevc_uni_epel_v32_8_msa; ++ ++ c->put_hevc_epel_uni[1][1][1] = ff_hevc_put_hevc_uni_epel_hv4_8_msa; ++ c->put_hevc_epel_uni[2][1][1] = ff_hevc_put_hevc_uni_epel_hv6_8_msa; ++ c->put_hevc_epel_uni[3][1][1] = ff_hevc_put_hevc_uni_epel_hv8_8_msa; ++ c->put_hevc_epel_uni[4][1][1] = ff_hevc_put_hevc_uni_epel_hv12_8_msa; ++ c->put_hevc_epel_uni[5][1][1] = ff_hevc_put_hevc_uni_epel_hv16_8_msa; ++ c->put_hevc_epel_uni[6][1][1] = ff_hevc_put_hevc_uni_epel_hv24_8_msa; ++ c->put_hevc_epel_uni[7][1][1] = ff_hevc_put_hevc_uni_epel_hv32_8_msa; ++ ++ c->put_hevc_qpel_uni_w[1][0][0] = ++ ff_hevc_put_hevc_uni_w_pel_pixels4_8_msa; ++ c->put_hevc_qpel_uni_w[3][0][0] = ++ ff_hevc_put_hevc_uni_w_pel_pixels8_8_msa; ++ c->put_hevc_qpel_uni_w[4][0][0] = ++ ff_hevc_put_hevc_uni_w_pel_pixels12_8_msa; ++ c->put_hevc_qpel_uni_w[5][0][0] = ++ ff_hevc_put_hevc_uni_w_pel_pixels16_8_msa; ++ c->put_hevc_qpel_uni_w[6][0][0] = ++ ff_hevc_put_hevc_uni_w_pel_pixels24_8_msa; ++ c->put_hevc_qpel_uni_w[7][0][0] = ++ ff_hevc_put_hevc_uni_w_pel_pixels32_8_msa; ++ c->put_hevc_qpel_uni_w[8][0][0] = ++ ff_hevc_put_hevc_uni_w_pel_pixels48_8_msa; ++ c->put_hevc_qpel_uni_w[9][0][0] = ++ ff_hevc_put_hevc_uni_w_pel_pixels64_8_msa; ++ ++ c->put_hevc_qpel_uni_w[1][0][1] = ff_hevc_put_hevc_uni_w_qpel_h4_8_msa; ++ c->put_hevc_qpel_uni_w[3][0][1] = ff_hevc_put_hevc_uni_w_qpel_h8_8_msa; ++ c->put_hevc_qpel_uni_w[4][0][1] = ff_hevc_put_hevc_uni_w_qpel_h12_8_msa; ++ c->put_hevc_qpel_uni_w[5][0][1] = ff_hevc_put_hevc_uni_w_qpel_h16_8_msa; ++ c->put_hevc_qpel_uni_w[6][0][1] = ff_hevc_put_hevc_uni_w_qpel_h24_8_msa; ++ c->put_hevc_qpel_uni_w[7][0][1] = ff_hevc_put_hevc_uni_w_qpel_h32_8_msa; ++ c->put_hevc_qpel_uni_w[8][0][1] = ff_hevc_put_hevc_uni_w_qpel_h48_8_msa; ++ c->put_hevc_qpel_uni_w[9][0][1] = ff_hevc_put_hevc_uni_w_qpel_h64_8_msa; ++ ++ c->put_hevc_qpel_uni_w[1][1][0] = ff_hevc_put_hevc_uni_w_qpel_v4_8_msa; ++ c->put_hevc_qpel_uni_w[3][1][0] = ff_hevc_put_hevc_uni_w_qpel_v8_8_msa; ++ c->put_hevc_qpel_uni_w[4][1][0] = ff_hevc_put_hevc_uni_w_qpel_v12_8_msa; ++ c->put_hevc_qpel_uni_w[5][1][0] = ff_hevc_put_hevc_uni_w_qpel_v16_8_msa; ++ c->put_hevc_qpel_uni_w[6][1][0] = ff_hevc_put_hevc_uni_w_qpel_v24_8_msa; ++ c->put_hevc_qpel_uni_w[7][1][0] = ff_hevc_put_hevc_uni_w_qpel_v32_8_msa; ++ c->put_hevc_qpel_uni_w[8][1][0] = ff_hevc_put_hevc_uni_w_qpel_v48_8_msa; ++ c->put_hevc_qpel_uni_w[9][1][0] = ff_hevc_put_hevc_uni_w_qpel_v64_8_msa; ++ ++ c->put_hevc_qpel_uni_w[1][1][1] = ff_hevc_put_hevc_uni_w_qpel_hv4_8_msa; ++ c->put_hevc_qpel_uni_w[3][1][1] = ff_hevc_put_hevc_uni_w_qpel_hv8_8_msa; ++ c->put_hevc_qpel_uni_w[4][1][1] = ++ ff_hevc_put_hevc_uni_w_qpel_hv12_8_msa; ++ c->put_hevc_qpel_uni_w[5][1][1] = ++ ff_hevc_put_hevc_uni_w_qpel_hv16_8_msa; ++ c->put_hevc_qpel_uni_w[6][1][1] = ++ ff_hevc_put_hevc_uni_w_qpel_hv24_8_msa; ++ c->put_hevc_qpel_uni_w[7][1][1] = ++ ff_hevc_put_hevc_uni_w_qpel_hv32_8_msa; ++ c->put_hevc_qpel_uni_w[8][1][1] = ++ ff_hevc_put_hevc_uni_w_qpel_hv48_8_msa; ++ c->put_hevc_qpel_uni_w[9][1][1] = ++ ff_hevc_put_hevc_uni_w_qpel_hv64_8_msa; ++ ++ c->put_hevc_epel_uni_w[1][0][0] = ++ ff_hevc_put_hevc_uni_w_pel_pixels4_8_msa; ++ c->put_hevc_epel_uni_w[2][0][0] = ++ ff_hevc_put_hevc_uni_w_pel_pixels6_8_msa; ++ c->put_hevc_epel_uni_w[3][0][0] = ++ ff_hevc_put_hevc_uni_w_pel_pixels8_8_msa; ++ c->put_hevc_epel_uni_w[4][0][0] = ++ ff_hevc_put_hevc_uni_w_pel_pixels12_8_msa; ++ c->put_hevc_epel_uni_w[5][0][0] = ++ ff_hevc_put_hevc_uni_w_pel_pixels16_8_msa; ++ c->put_hevc_epel_uni_w[6][0][0] = ++ ff_hevc_put_hevc_uni_w_pel_pixels24_8_msa; ++ c->put_hevc_epel_uni_w[7][0][0] = ++ ff_hevc_put_hevc_uni_w_pel_pixels32_8_msa; ++ ++ c->put_hevc_epel_uni_w[1][0][1] = ff_hevc_put_hevc_uni_w_epel_h4_8_msa; ++ c->put_hevc_epel_uni_w[2][0][1] = ff_hevc_put_hevc_uni_w_epel_h6_8_msa; ++ c->put_hevc_epel_uni_w[3][0][1] = ff_hevc_put_hevc_uni_w_epel_h8_8_msa; ++ c->put_hevc_epel_uni_w[4][0][1] = ff_hevc_put_hevc_uni_w_epel_h12_8_msa; ++ c->put_hevc_epel_uni_w[5][0][1] = ff_hevc_put_hevc_uni_w_epel_h16_8_msa; ++ c->put_hevc_epel_uni_w[6][0][1] = ff_hevc_put_hevc_uni_w_epel_h24_8_msa; ++ c->put_hevc_epel_uni_w[7][0][1] = ff_hevc_put_hevc_uni_w_epel_h32_8_msa; ++ ++ c->put_hevc_epel_uni_w[1][1][0] = ff_hevc_put_hevc_uni_w_epel_v4_8_msa; ++ c->put_hevc_epel_uni_w[2][1][0] = ff_hevc_put_hevc_uni_w_epel_v6_8_msa; ++ c->put_hevc_epel_uni_w[3][1][0] = ff_hevc_put_hevc_uni_w_epel_v8_8_msa; ++ c->put_hevc_epel_uni_w[4][1][0] = ff_hevc_put_hevc_uni_w_epel_v12_8_msa; ++ c->put_hevc_epel_uni_w[5][1][0] = ff_hevc_put_hevc_uni_w_epel_v16_8_msa; ++ c->put_hevc_epel_uni_w[6][1][0] = ff_hevc_put_hevc_uni_w_epel_v24_8_msa; ++ c->put_hevc_epel_uni_w[7][1][0] = ff_hevc_put_hevc_uni_w_epel_v32_8_msa; ++ ++ c->put_hevc_epel_uni_w[1][1][1] = ff_hevc_put_hevc_uni_w_epel_hv4_8_msa; ++ c->put_hevc_epel_uni_w[2][1][1] = ff_hevc_put_hevc_uni_w_epel_hv6_8_msa; ++ c->put_hevc_epel_uni_w[3][1][1] = ff_hevc_put_hevc_uni_w_epel_hv8_8_msa; ++ c->put_hevc_epel_uni_w[4][1][1] = ++ ff_hevc_put_hevc_uni_w_epel_hv12_8_msa; ++ c->put_hevc_epel_uni_w[5][1][1] = ++ ff_hevc_put_hevc_uni_w_epel_hv16_8_msa; ++ c->put_hevc_epel_uni_w[6][1][1] = ++ ff_hevc_put_hevc_uni_w_epel_hv24_8_msa; ++ c->put_hevc_epel_uni_w[7][1][1] = ++ ff_hevc_put_hevc_uni_w_epel_hv32_8_msa; ++ ++ c->put_hevc_qpel_bi[1][0][0] = ff_hevc_put_hevc_bi_pel_pixels4_8_msa; ++ c->put_hevc_qpel_bi[3][0][0] = ff_hevc_put_hevc_bi_pel_pixels8_8_msa; ++ c->put_hevc_qpel_bi[4][0][0] = ff_hevc_put_hevc_bi_pel_pixels12_8_msa; ++ c->put_hevc_qpel_bi[5][0][0] = ff_hevc_put_hevc_bi_pel_pixels16_8_msa; ++ c->put_hevc_qpel_bi[6][0][0] = ff_hevc_put_hevc_bi_pel_pixels24_8_msa; ++ c->put_hevc_qpel_bi[7][0][0] = ff_hevc_put_hevc_bi_pel_pixels32_8_msa; ++ c->put_hevc_qpel_bi[8][0][0] = ff_hevc_put_hevc_bi_pel_pixels48_8_msa; ++ c->put_hevc_qpel_bi[9][0][0] = ff_hevc_put_hevc_bi_pel_pixels64_8_msa; ++ ++ c->put_hevc_qpel_bi[1][0][1] = ff_hevc_put_hevc_bi_qpel_h4_8_msa; ++ c->put_hevc_qpel_bi[3][0][1] = ff_hevc_put_hevc_bi_qpel_h8_8_msa; ++ c->put_hevc_qpel_bi[4][0][1] = ff_hevc_put_hevc_bi_qpel_h12_8_msa; ++ c->put_hevc_qpel_bi[5][0][1] = ff_hevc_put_hevc_bi_qpel_h16_8_msa; ++ c->put_hevc_qpel_bi[6][0][1] = ff_hevc_put_hevc_bi_qpel_h24_8_msa; ++ c->put_hevc_qpel_bi[7][0][1] = ff_hevc_put_hevc_bi_qpel_h32_8_msa; ++ c->put_hevc_qpel_bi[8][0][1] = ff_hevc_put_hevc_bi_qpel_h48_8_msa; ++ c->put_hevc_qpel_bi[9][0][1] = ff_hevc_put_hevc_bi_qpel_h64_8_msa; ++ ++ c->put_hevc_qpel_bi[1][1][0] = ff_hevc_put_hevc_bi_qpel_v4_8_msa; ++ c->put_hevc_qpel_bi[3][1][0] = ff_hevc_put_hevc_bi_qpel_v8_8_msa; ++ c->put_hevc_qpel_bi[4][1][0] = ff_hevc_put_hevc_bi_qpel_v12_8_msa; ++ c->put_hevc_qpel_bi[5][1][0] = ff_hevc_put_hevc_bi_qpel_v16_8_msa; ++ c->put_hevc_qpel_bi[6][1][0] = ff_hevc_put_hevc_bi_qpel_v24_8_msa; ++ c->put_hevc_qpel_bi[7][1][0] = ff_hevc_put_hevc_bi_qpel_v32_8_msa; ++ c->put_hevc_qpel_bi[8][1][0] = ff_hevc_put_hevc_bi_qpel_v48_8_msa; ++ c->put_hevc_qpel_bi[9][1][0] = ff_hevc_put_hevc_bi_qpel_v64_8_msa; ++ ++ c->put_hevc_qpel_bi[1][1][1] = ff_hevc_put_hevc_bi_qpel_hv4_8_msa; ++ c->put_hevc_qpel_bi[3][1][1] = ff_hevc_put_hevc_bi_qpel_hv8_8_msa; ++ c->put_hevc_qpel_bi[4][1][1] = ff_hevc_put_hevc_bi_qpel_hv12_8_msa; ++ c->put_hevc_qpel_bi[5][1][1] = ff_hevc_put_hevc_bi_qpel_hv16_8_msa; ++ c->put_hevc_qpel_bi[6][1][1] = ff_hevc_put_hevc_bi_qpel_hv24_8_msa; ++ c->put_hevc_qpel_bi[7][1][1] = ff_hevc_put_hevc_bi_qpel_hv32_8_msa; ++ c->put_hevc_qpel_bi[8][1][1] = ff_hevc_put_hevc_bi_qpel_hv48_8_msa; ++ c->put_hevc_qpel_bi[9][1][1] = ff_hevc_put_hevc_bi_qpel_hv64_8_msa; ++ ++ c->put_hevc_epel_bi[1][0][0] = ff_hevc_put_hevc_bi_pel_pixels4_8_msa; ++ c->put_hevc_epel_bi[2][0][0] = ff_hevc_put_hevc_bi_pel_pixels6_8_msa; ++ c->put_hevc_epel_bi[3][0][0] = ff_hevc_put_hevc_bi_pel_pixels8_8_msa; ++ c->put_hevc_epel_bi[4][0][0] = ff_hevc_put_hevc_bi_pel_pixels12_8_msa; ++ c->put_hevc_epel_bi[5][0][0] = ff_hevc_put_hevc_bi_pel_pixels16_8_msa; ++ c->put_hevc_epel_bi[6][0][0] = ff_hevc_put_hevc_bi_pel_pixels24_8_msa; ++ c->put_hevc_epel_bi[7][0][0] = ff_hevc_put_hevc_bi_pel_pixels32_8_msa; ++ ++ c->put_hevc_epel_bi[1][0][1] = ff_hevc_put_hevc_bi_epel_h4_8_msa; ++ c->put_hevc_epel_bi[2][0][1] = ff_hevc_put_hevc_bi_epel_h6_8_msa; ++ c->put_hevc_epel_bi[3][0][1] = ff_hevc_put_hevc_bi_epel_h8_8_msa; ++ c->put_hevc_epel_bi[4][0][1] = ff_hevc_put_hevc_bi_epel_h12_8_msa; ++ c->put_hevc_epel_bi[5][0][1] = ff_hevc_put_hevc_bi_epel_h16_8_msa; ++ c->put_hevc_epel_bi[6][0][1] = ff_hevc_put_hevc_bi_epel_h24_8_msa; ++ c->put_hevc_epel_bi[7][0][1] = ff_hevc_put_hevc_bi_epel_h32_8_msa; ++ ++ c->put_hevc_epel_bi[1][1][0] = ff_hevc_put_hevc_bi_epel_v4_8_msa; ++ c->put_hevc_epel_bi[2][1][0] = ff_hevc_put_hevc_bi_epel_v6_8_msa; ++ c->put_hevc_epel_bi[3][1][0] = ff_hevc_put_hevc_bi_epel_v8_8_msa; ++ c->put_hevc_epel_bi[4][1][0] = ff_hevc_put_hevc_bi_epel_v12_8_msa; ++ c->put_hevc_epel_bi[5][1][0] = ff_hevc_put_hevc_bi_epel_v16_8_msa; ++ c->put_hevc_epel_bi[6][1][0] = ff_hevc_put_hevc_bi_epel_v24_8_msa; ++ c->put_hevc_epel_bi[7][1][0] = ff_hevc_put_hevc_bi_epel_v32_8_msa; ++ ++ c->put_hevc_epel_bi[1][1][1] = ff_hevc_put_hevc_bi_epel_hv4_8_msa; ++ c->put_hevc_epel_bi[2][1][1] = ff_hevc_put_hevc_bi_epel_hv6_8_msa; ++ c->put_hevc_epel_bi[3][1][1] = ff_hevc_put_hevc_bi_epel_hv8_8_msa; ++ c->put_hevc_epel_bi[4][1][1] = ff_hevc_put_hevc_bi_epel_hv12_8_msa; ++ c->put_hevc_epel_bi[5][1][1] = ff_hevc_put_hevc_bi_epel_hv16_8_msa; ++ c->put_hevc_epel_bi[6][1][1] = ff_hevc_put_hevc_bi_epel_hv24_8_msa; ++ c->put_hevc_epel_bi[7][1][1] = ff_hevc_put_hevc_bi_epel_hv32_8_msa; ++ ++ c->put_hevc_qpel_bi_w[1][0][0] = ++ ff_hevc_put_hevc_bi_w_pel_pixels4_8_msa; ++ c->put_hevc_qpel_bi_w[3][0][0] = ++ ff_hevc_put_hevc_bi_w_pel_pixels8_8_msa; ++ c->put_hevc_qpel_bi_w[4][0][0] = ++ ff_hevc_put_hevc_bi_w_pel_pixels12_8_msa; ++ c->put_hevc_qpel_bi_w[5][0][0] = ++ ff_hevc_put_hevc_bi_w_pel_pixels16_8_msa; ++ c->put_hevc_qpel_bi_w[6][0][0] = ++ ff_hevc_put_hevc_bi_w_pel_pixels24_8_msa; ++ c->put_hevc_qpel_bi_w[7][0][0] = ++ ff_hevc_put_hevc_bi_w_pel_pixels32_8_msa; ++ c->put_hevc_qpel_bi_w[8][0][0] = ++ ff_hevc_put_hevc_bi_w_pel_pixels48_8_msa; ++ c->put_hevc_qpel_bi_w[9][0][0] = ++ ff_hevc_put_hevc_bi_w_pel_pixels64_8_msa; ++ ++ c->put_hevc_qpel_bi_w[1][0][1] = ff_hevc_put_hevc_bi_w_qpel_h4_8_msa; ++ c->put_hevc_qpel_bi_w[3][0][1] = ff_hevc_put_hevc_bi_w_qpel_h8_8_msa; ++ c->put_hevc_qpel_bi_w[4][0][1] = ff_hevc_put_hevc_bi_w_qpel_h12_8_msa; ++ c->put_hevc_qpel_bi_w[5][0][1] = ff_hevc_put_hevc_bi_w_qpel_h16_8_msa; ++ c->put_hevc_qpel_bi_w[6][0][1] = ff_hevc_put_hevc_bi_w_qpel_h24_8_msa; ++ c->put_hevc_qpel_bi_w[7][0][1] = ff_hevc_put_hevc_bi_w_qpel_h32_8_msa; ++ c->put_hevc_qpel_bi_w[8][0][1] = ff_hevc_put_hevc_bi_w_qpel_h48_8_msa; ++ c->put_hevc_qpel_bi_w[9][0][1] = ff_hevc_put_hevc_bi_w_qpel_h64_8_msa; ++ ++ c->put_hevc_qpel_bi_w[1][1][0] = ff_hevc_put_hevc_bi_w_qpel_v4_8_msa; ++ c->put_hevc_qpel_bi_w[3][1][0] = ff_hevc_put_hevc_bi_w_qpel_v8_8_msa; ++ c->put_hevc_qpel_bi_w[4][1][0] = ff_hevc_put_hevc_bi_w_qpel_v12_8_msa; ++ c->put_hevc_qpel_bi_w[5][1][0] = ff_hevc_put_hevc_bi_w_qpel_v16_8_msa; ++ c->put_hevc_qpel_bi_w[6][1][0] = ff_hevc_put_hevc_bi_w_qpel_v24_8_msa; ++ c->put_hevc_qpel_bi_w[7][1][0] = ff_hevc_put_hevc_bi_w_qpel_v32_8_msa; ++ c->put_hevc_qpel_bi_w[8][1][0] = ff_hevc_put_hevc_bi_w_qpel_v48_8_msa; ++ c->put_hevc_qpel_bi_w[9][1][0] = ff_hevc_put_hevc_bi_w_qpel_v64_8_msa; ++ ++ c->put_hevc_qpel_bi_w[1][1][1] = ff_hevc_put_hevc_bi_w_qpel_hv4_8_msa; ++ c->put_hevc_qpel_bi_w[3][1][1] = ff_hevc_put_hevc_bi_w_qpel_hv8_8_msa; ++ c->put_hevc_qpel_bi_w[4][1][1] = ff_hevc_put_hevc_bi_w_qpel_hv12_8_msa; ++ c->put_hevc_qpel_bi_w[5][1][1] = ff_hevc_put_hevc_bi_w_qpel_hv16_8_msa; ++ c->put_hevc_qpel_bi_w[6][1][1] = ff_hevc_put_hevc_bi_w_qpel_hv24_8_msa; ++ c->put_hevc_qpel_bi_w[7][1][1] = ff_hevc_put_hevc_bi_w_qpel_hv32_8_msa; ++ c->put_hevc_qpel_bi_w[8][1][1] = ff_hevc_put_hevc_bi_w_qpel_hv48_8_msa; ++ c->put_hevc_qpel_bi_w[9][1][1] = ff_hevc_put_hevc_bi_w_qpel_hv64_8_msa; ++ ++ c->put_hevc_epel_bi_w[1][0][0] = ++ ff_hevc_put_hevc_bi_w_pel_pixels4_8_msa; ++ c->put_hevc_epel_bi_w[2][0][0] = ++ ff_hevc_put_hevc_bi_w_pel_pixels6_8_msa; ++ c->put_hevc_epel_bi_w[3][0][0] = ++ ff_hevc_put_hevc_bi_w_pel_pixels8_8_msa; ++ c->put_hevc_epel_bi_w[4][0][0] = ++ ff_hevc_put_hevc_bi_w_pel_pixels12_8_msa; ++ c->put_hevc_epel_bi_w[5][0][0] = ++ ff_hevc_put_hevc_bi_w_pel_pixels16_8_msa; ++ c->put_hevc_epel_bi_w[6][0][0] = ++ ff_hevc_put_hevc_bi_w_pel_pixels24_8_msa; ++ c->put_hevc_epel_bi_w[7][0][0] = ++ ff_hevc_put_hevc_bi_w_pel_pixels32_8_msa; ++ ++ c->put_hevc_epel_bi_w[1][0][1] = ff_hevc_put_hevc_bi_w_epel_h4_8_msa; ++ c->put_hevc_epel_bi_w[2][0][1] = ff_hevc_put_hevc_bi_w_epel_h6_8_msa; ++ c->put_hevc_epel_bi_w[3][0][1] = ff_hevc_put_hevc_bi_w_epel_h8_8_msa; ++ c->put_hevc_epel_bi_w[4][0][1] = ff_hevc_put_hevc_bi_w_epel_h12_8_msa; ++ c->put_hevc_epel_bi_w[5][0][1] = ff_hevc_put_hevc_bi_w_epel_h16_8_msa; ++ c->put_hevc_epel_bi_w[6][0][1] = ff_hevc_put_hevc_bi_w_epel_h24_8_msa; ++ c->put_hevc_epel_bi_w[7][0][1] = ff_hevc_put_hevc_bi_w_epel_h32_8_msa; ++ ++ c->put_hevc_epel_bi_w[1][1][0] = ff_hevc_put_hevc_bi_w_epel_v4_8_msa; ++ c->put_hevc_epel_bi_w[2][1][0] = ff_hevc_put_hevc_bi_w_epel_v6_8_msa; ++ c->put_hevc_epel_bi_w[3][1][0] = ff_hevc_put_hevc_bi_w_epel_v8_8_msa; ++ c->put_hevc_epel_bi_w[4][1][0] = ff_hevc_put_hevc_bi_w_epel_v12_8_msa; ++ c->put_hevc_epel_bi_w[5][1][0] = ff_hevc_put_hevc_bi_w_epel_v16_8_msa; ++ c->put_hevc_epel_bi_w[6][1][0] = ff_hevc_put_hevc_bi_w_epel_v24_8_msa; ++ c->put_hevc_epel_bi_w[7][1][0] = ff_hevc_put_hevc_bi_w_epel_v32_8_msa; ++ ++ c->put_hevc_epel_bi_w[1][1][1] = ff_hevc_put_hevc_bi_w_epel_hv4_8_msa; ++ c->put_hevc_epel_bi_w[2][1][1] = ff_hevc_put_hevc_bi_w_epel_hv6_8_msa; ++ c->put_hevc_epel_bi_w[3][1][1] = ff_hevc_put_hevc_bi_w_epel_hv8_8_msa; ++ c->put_hevc_epel_bi_w[4][1][1] = ff_hevc_put_hevc_bi_w_epel_hv12_8_msa; ++ c->put_hevc_epel_bi_w[5][1][1] = ff_hevc_put_hevc_bi_w_epel_hv16_8_msa; ++ c->put_hevc_epel_bi_w[6][1][1] = ff_hevc_put_hevc_bi_w_epel_hv24_8_msa; ++ c->put_hevc_epel_bi_w[7][1][1] = ff_hevc_put_hevc_bi_w_epel_hv32_8_msa; ++ ++ c->sao_band_filter[0] = ++ c->sao_band_filter[1] = ++ c->sao_band_filter[2] = ++ c->sao_band_filter[3] = ++ c->sao_band_filter[4] = ff_hevc_sao_band_filter_0_8_msa; ++ ++ c->sao_edge_filter[0] = ++ c->sao_edge_filter[1] = ++ c->sao_edge_filter[2] = ++ c->sao_edge_filter[3] = ++ c->sao_edge_filter[4] = ff_hevc_sao_edge_filter_8_msa; ++ ++ c->hevc_h_loop_filter_luma = ff_hevc_loop_filter_luma_h_8_msa; ++ c->hevc_v_loop_filter_luma = ff_hevc_loop_filter_luma_v_8_msa; ++ ++ c->hevc_h_loop_filter_chroma = ff_hevc_loop_filter_chroma_h_8_msa; ++ c->hevc_v_loop_filter_chroma = ff_hevc_loop_filter_chroma_v_8_msa; ++ ++ c->hevc_h_loop_filter_luma_c = ff_hevc_loop_filter_luma_h_8_msa; ++ c->hevc_v_loop_filter_luma_c = ff_hevc_loop_filter_luma_v_8_msa; ++ ++ c->hevc_h_loop_filter_chroma_c = ++ ff_hevc_loop_filter_chroma_h_8_msa; ++ c->hevc_v_loop_filter_chroma_c = ++ ff_hevc_loop_filter_chroma_v_8_msa; ++ ++ c->idct[0] = ff_hevc_idct_4x4_msa; ++ c->idct[1] = ff_hevc_idct_8x8_msa; ++ c->idct[2] = ff_hevc_idct_16x16_msa; ++ c->idct[3] = ff_hevc_idct_32x32_msa; ++ c->idct_dc[0] = ff_hevc_idct_dc_4x4_msa; ++ c->idct_dc[1] = ff_hevc_idct_dc_8x8_msa; ++ c->idct_dc[2] = ff_hevc_idct_dc_16x16_msa; ++ c->idct_dc[3] = ff_hevc_idct_dc_32x32_msa; ++ c->add_residual[0] = ff_hevc_addblk_4x4_msa; ++ c->add_residual[1] = ff_hevc_addblk_8x8_msa; ++ c->add_residual[2] = ff_hevc_addblk_16x16_msa; ++ c->add_residual[3] = ff_hevc_addblk_32x32_msa; ++ c->transform_4x4_luma = ff_hevc_idct_luma_4x4_msa; ++ } ++ } + } +diff --git a/libavcodec/mips/hevcdsp_mips.h b/libavcodec/mips/hevcdsp_mips.h +index 1573d1c..c84e08d 100644 +--- a/libavcodec/mips/hevcdsp_mips.h ++++ b/libavcodec/mips/hevcdsp_mips.h +@@ -479,4 +479,95 @@ void ff_hevc_addblk_32x32_msa(uint8_t *dst, int16_t *pi16Coeffs, + ptrdiff_t stride); + void ff_hevc_idct_luma_4x4_msa(int16_t *pi16Coeffs); + ++/* Loongson optimization */ ++#define L_MC(PEL, DIR, WIDTH, TYPE) \ ++void ff_hevc_put_hevc_##PEL##_##DIR##WIDTH##_8_##TYPE(int16_t *dst, \ ++ uint8_t *src, \ ++ ptrdiff_t src_stride, \ ++ int height, \ ++ intptr_t mx, \ ++ intptr_t my, \ ++ int width) ++L_MC(qpel, h, 4, mmi); ++L_MC(qpel, h, 8, mmi); ++L_MC(qpel, h, 12, mmi); ++L_MC(qpel, h, 16, mmi); ++L_MC(qpel, h, 24, mmi); ++L_MC(qpel, h, 32, mmi); ++L_MC(qpel, h, 48, mmi); ++L_MC(qpel, h, 64, mmi); ++ ++L_MC(qpel, hv, 4, mmi); ++L_MC(qpel, hv, 8, mmi); ++L_MC(qpel, hv, 12, mmi); ++L_MC(qpel, hv, 16, mmi); ++L_MC(qpel, hv, 24, mmi); ++L_MC(qpel, hv, 32, mmi); ++L_MC(qpel, hv, 48, mmi); ++L_MC(qpel, hv, 64, mmi); ++ ++#define L_BI_MC(PEL, DIR, WIDTH, TYPE) \ ++void ff_hevc_put_hevc_##PEL##_bi_##DIR##WIDTH##_8_##TYPE(uint8_t *dst, \ ++ ptrdiff_t dst_stride, \ ++ uint8_t *src, \ ++ ptrdiff_t src_stride, \ ++ int16_t *src2, \ ++ int height, \ ++ intptr_t mx, \ ++ intptr_t my, \ ++ int width) ++ ++L_BI_MC(pel, pixels, 8, mmi); ++L_BI_MC(pel, pixels, 16, mmi); ++L_BI_MC(pel, pixels, 24, mmi); ++L_BI_MC(pel, pixels, 32, mmi); ++L_BI_MC(pel, pixels, 48, mmi); ++L_BI_MC(pel, pixels, 64, mmi); ++ ++L_BI_MC(qpel, hv, 4, mmi); ++L_BI_MC(qpel, hv, 8, mmi); ++L_BI_MC(qpel, hv, 12, mmi); ++L_BI_MC(qpel, hv, 16, mmi); ++L_BI_MC(qpel, hv, 24, mmi); ++L_BI_MC(qpel, hv, 32, mmi); ++L_BI_MC(qpel, hv, 48, mmi); ++L_BI_MC(qpel, hv, 64, mmi); ++ ++L_BI_MC(qpel, h, 4, mmi); ++L_BI_MC(qpel, h, 8, mmi); ++L_BI_MC(qpel, h, 12, mmi); ++L_BI_MC(qpel, h, 16, mmi); ++L_BI_MC(qpel, h, 24, mmi); ++L_BI_MC(qpel, h, 32, mmi); ++L_BI_MC(qpel, h, 48, mmi); ++L_BI_MC(qpel, h, 64, mmi); ++ ++L_BI_MC(epel, hv, 4, mmi); ++L_BI_MC(epel, hv, 8, mmi); ++L_BI_MC(epel, hv, 12, mmi); ++L_BI_MC(epel, hv, 16, mmi); ++L_BI_MC(epel, hv, 24, mmi); ++L_BI_MC(epel, hv, 32, mmi); ++#undef L_BI_MC ++ ++#define L_UNI_MC(PEL, DIR, WIDTH, TYPE) \ ++void ff_hevc_put_hevc_##PEL##_uni_##DIR##WIDTH##_8_##TYPE(uint8_t *dst, \ ++ ptrdiff_t dst_stride, \ ++ uint8_t *src, \ ++ ptrdiff_t src_stride, \ ++ int height, \ ++ intptr_t mx, \ ++ intptr_t my, \ ++ int width) ++ ++L_UNI_MC(qpel, hv, 4, mmi); ++L_UNI_MC(qpel, hv, 8, mmi); ++L_UNI_MC(qpel, hv, 12, mmi); ++L_UNI_MC(qpel, hv, 16, mmi); ++L_UNI_MC(qpel, hv, 24, mmi); ++L_UNI_MC(qpel, hv, 32, mmi); ++L_UNI_MC(qpel, hv, 48, mmi); ++L_UNI_MC(qpel, hv, 64, mmi); ++#undef L_UNI_MC ++ + #endif // #ifndef AVCODEC_MIPS_HEVCDSP_MIPS_H +diff --git a/libavcodec/mips/hevcdsp_mmi.c b/libavcodec/mips/hevcdsp_mmi.c +new file mode 100644 +index 0000000..aa83e1f +--- /dev/null ++++ b/libavcodec/mips/hevcdsp_mmi.c +@@ -0,0 +1,1183 @@ ++/* ++ * Copyright (c) 2019 Shiyou Yin (yinshiyou-hf@loongson.cn) ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavcodec/hevcdec.h" ++#include "libavcodec/bit_depth_template.c" ++#include "libavcodec/mips/hevcdsp_mips.h" ++#include "libavutil/mips/mmiutils.h" ++ ++#define PUT_HEVC_QPEL_H(w, x_step, src_step, dst_step) \ ++void ff_hevc_put_hevc_qpel_h##w##_8_mmi(int16_t *dst, uint8_t *_src, \ ++ ptrdiff_t _srcstride, \ ++ int height, intptr_t mx, \ ++ intptr_t my, int width) \ ++{ \ ++ int x, y; \ ++ pixel *src = (pixel*)_src - 3; \ ++ ptrdiff_t srcstride = _srcstride / sizeof(pixel); \ ++ uint64_t ftmp[15]; \ ++ uint64_t rtmp[1]; \ ++ const int8_t *filter = ff_hevc_qpel_filters[mx - 1]; \ ++ \ ++ x = x_step; \ ++ y = height; \ ++ __asm__ volatile( \ ++ MMI_LDC1(%[ftmp1], %[filter], 0x00) \ ++ "li %[rtmp0], 0x08 \n\t" \ ++ "dmtc1 %[rtmp0], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp2], %[ftmp0], %[ftmp1] \n\t" \ ++ "punpcklbh %[ftmp1], %[ftmp0], %[ftmp1] \n\t" \ ++ "psrah %[ftmp1], %[ftmp1], %[ftmp0] \n\t" \ ++ "psrah %[ftmp2], %[ftmp2], %[ftmp0] \n\t" \ ++ "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ ++ \ ++ "1: \n\t" \ ++ "2: \n\t" \ ++ "gsldlc1 %[ftmp3], 0x07(%[src]) \n\t" \ ++ "gsldrc1 %[ftmp3], 0x00(%[src]) \n\t" \ ++ "gsldlc1 %[ftmp4], 0x08(%[src]) \n\t" \ ++ "gsldrc1 %[ftmp4], 0x01(%[src]) \n\t" \ ++ "gsldlc1 %[ftmp5], 0x09(%[src]) \n\t" \ ++ "gsldrc1 %[ftmp5], 0x02(%[src]) \n\t" \ ++ "gsldlc1 %[ftmp6], 0x0a(%[src]) \n\t" \ ++ "gsldrc1 %[ftmp6], 0x03(%[src]) \n\t" \ ++ "punpcklbh %[ftmp7], %[ftmp3], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp8], %[ftmp3], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" \ ++ "pmullh %[ftmp8], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddh %[ftmp3], %[ftmp7], %[ftmp8] \n\t" \ ++ "punpcklbh %[ftmp7], %[ftmp4], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp8], %[ftmp4], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" \ ++ "pmullh %[ftmp8], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddh %[ftmp4], %[ftmp7], %[ftmp8] \n\t" \ ++ "punpcklbh %[ftmp7], %[ftmp5], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp8], %[ftmp5], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" \ ++ "pmullh %[ftmp8], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddh %[ftmp5], %[ftmp7], %[ftmp8] \n\t" \ ++ "punpcklbh %[ftmp7], %[ftmp6], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp8], %[ftmp6], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" \ ++ "pmullh %[ftmp8], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddh %[ftmp6], %[ftmp7], %[ftmp8] \n\t" \ ++ TRANSPOSE_4H(%[ftmp3], %[ftmp4], %[ftmp5], %[ftmp6], \ ++ %[ftmp7], %[ftmp8], %[ftmp9], %[ftmp10]) \ ++ "paddh %[ftmp3], %[ftmp3], %[ftmp4] \n\t" \ ++ "paddh %[ftmp5], %[ftmp5], %[ftmp6] \n\t" \ ++ "paddh %[ftmp3], %[ftmp3], %[ftmp5] \n\t" \ ++ "gssdlc1 %[ftmp3], 0x07(%[dst]) \n\t" \ ++ "gssdrc1 %[ftmp3], 0x00(%[dst]) \n\t" \ ++ \ ++ "daddi %[x], %[x], -0x01 \n\t" \ ++ PTR_ADDIU "%[src], %[src], 0x04 \n\t" \ ++ PTR_ADDIU "%[dst], %[dst], 0x08 \n\t" \ ++ "bnez %[x], 2b \n\t" \ ++ \ ++ "daddi %[y], %[y], -0x01 \n\t" \ ++ "li %[x], " #x_step " \n\t" \ ++ PTR_ADDIU "%[src], %[src], " #src_step " \n\t" \ ++ PTR_ADDIU "%[dst], %[dst], " #dst_step " \n\t" \ ++ PTR_ADDU "%[src], %[src], %[stride] \n\t" \ ++ PTR_ADDIU "%[dst], %[dst], 0x80 \n\t" \ ++ "bnez %[y], 1b \n\t" \ ++ : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), \ ++ [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), \ ++ [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), \ ++ [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), \ ++ [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), \ ++ [ftmp10]"=&f"(ftmp[10]), [rtmp0]"=&r"(rtmp[0]), \ ++ [src]"+&r"(src), [dst]"+&r"(dst), [y]"+&r"(y), \ ++ [x]"+&r"(x) \ ++ : [filter]"r"(filter), [stride]"r"(srcstride) \ ++ : "memory" \ ++ ); \ ++} ++ ++PUT_HEVC_QPEL_H(4, 1, -4, -8); ++PUT_HEVC_QPEL_H(8, 2, -8, -16); ++PUT_HEVC_QPEL_H(12, 3, -12, -24); ++PUT_HEVC_QPEL_H(16, 4, -16, -32); ++PUT_HEVC_QPEL_H(24, 6, -24, -48); ++PUT_HEVC_QPEL_H(32, 8, -32, -64); ++PUT_HEVC_QPEL_H(48, 12, -48, -96); ++PUT_HEVC_QPEL_H(64, 16, -64, -128); ++ ++#define PUT_HEVC_QPEL_HV(w, x_step, src_step, dst_step) \ ++void ff_hevc_put_hevc_qpel_hv##w##_8_mmi(int16_t *dst, uint8_t *_src, \ ++ ptrdiff_t _srcstride, \ ++ int height, intptr_t mx, \ ++ intptr_t my, int width) \ ++{ \ ++ int x, y; \ ++ const int8_t *filter; \ ++ pixel *src = (pixel*)_src; \ ++ ptrdiff_t srcstride = _srcstride / sizeof(pixel); \ ++ int16_t tmp_array[(MAX_PB_SIZE + QPEL_EXTRA) * MAX_PB_SIZE]; \ ++ int16_t *tmp = tmp_array; \ ++ uint64_t ftmp[15]; \ ++ uint64_t rtmp[1]; \ ++ \ ++ src -= (QPEL_EXTRA_BEFORE * srcstride + 3); \ ++ filter = ff_hevc_qpel_filters[mx - 1]; \ ++ x = x_step; \ ++ y = height + QPEL_EXTRA; \ ++ __asm__ volatile( \ ++ MMI_LDC1(%[ftmp1], %[filter], 0x00) \ ++ "li %[rtmp0], 0x08 \n\t" \ ++ "dmtc1 %[rtmp0], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp2], %[ftmp0], %[ftmp1] \n\t" \ ++ "punpcklbh %[ftmp1], %[ftmp0], %[ftmp1] \n\t" \ ++ "psrah %[ftmp1], %[ftmp1], %[ftmp0] \n\t" \ ++ "psrah %[ftmp2], %[ftmp2], %[ftmp0] \n\t" \ ++ "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ ++ \ ++ "1: \n\t" \ ++ "2: \n\t" \ ++ "gsldlc1 %[ftmp3], 0x07(%[src]) \n\t" \ ++ "gsldrc1 %[ftmp3], 0x00(%[src]) \n\t" \ ++ "gsldlc1 %[ftmp4], 0x08(%[src]) \n\t" \ ++ "gsldrc1 %[ftmp4], 0x01(%[src]) \n\t" \ ++ "gsldlc1 %[ftmp5], 0x09(%[src]) \n\t" \ ++ "gsldrc1 %[ftmp5], 0x02(%[src]) \n\t" \ ++ "gsldlc1 %[ftmp6], 0x0a(%[src]) \n\t" \ ++ "gsldrc1 %[ftmp6], 0x03(%[src]) \n\t" \ ++ "punpcklbh %[ftmp7], %[ftmp3], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp8], %[ftmp3], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" \ ++ "pmullh %[ftmp8], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddh %[ftmp3], %[ftmp7], %[ftmp8] \n\t" \ ++ "punpcklbh %[ftmp7], %[ftmp4], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp8], %[ftmp4], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" \ ++ "pmullh %[ftmp8], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddh %[ftmp4], %[ftmp7], %[ftmp8] \n\t" \ ++ "punpcklbh %[ftmp7], %[ftmp5], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp8], %[ftmp5], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" \ ++ "pmullh %[ftmp8], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddh %[ftmp5], %[ftmp7], %[ftmp8] \n\t" \ ++ "punpcklbh %[ftmp7], %[ftmp6], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp8], %[ftmp6], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" \ ++ "pmullh %[ftmp8], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddh %[ftmp6], %[ftmp7], %[ftmp8] \n\t" \ ++ TRANSPOSE_4H(%[ftmp3], %[ftmp4], %[ftmp5], %[ftmp6], \ ++ %[ftmp7], %[ftmp8], %[ftmp9], %[ftmp10]) \ ++ "paddh %[ftmp3], %[ftmp3], %[ftmp4] \n\t" \ ++ "paddh %[ftmp5], %[ftmp5], %[ftmp6] \n\t" \ ++ "paddh %[ftmp3], %[ftmp3], %[ftmp5] \n\t" \ ++ "gssdlc1 %[ftmp3], 0x07(%[tmp]) \n\t" \ ++ "gssdrc1 %[ftmp3], 0x00(%[tmp]) \n\t" \ ++ \ ++ "daddi %[x], %[x], -0x01 \n\t" \ ++ PTR_ADDIU "%[src], %[src], 0x04 \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x08 \n\t" \ ++ "bnez %[x], 2b \n\t" \ ++ \ ++ "daddi %[y], %[y], -0x01 \n\t" \ ++ "li %[x], " #x_step " \n\t" \ ++ PTR_ADDIU "%[src], %[src], " #src_step " \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], " #dst_step " \n\t" \ ++ PTR_ADDU "%[src], %[src], %[stride] \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "bnez %[y], 1b \n\t" \ ++ : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), \ ++ [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), \ ++ [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), \ ++ [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), \ ++ [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), \ ++ [ftmp10]"=&f"(ftmp[10]), [rtmp0]"=&r"(rtmp[0]), \ ++ [src]"+&r"(src), [tmp]"+&r"(tmp), [y]"+&r"(y), \ ++ [x]"+&r"(x) \ ++ : [filter]"r"(filter), [stride]"r"(srcstride) \ ++ : "memory" \ ++ ); \ ++ \ ++ tmp = tmp_array + QPEL_EXTRA_BEFORE * 4 -12; \ ++ filter = ff_hevc_qpel_filters[my - 1]; \ ++ x = x_step; \ ++ y = height; \ ++ __asm__ volatile( \ ++ MMI_LDC1(%[ftmp1], %[filter], 0x00) \ ++ "li %[rtmp0], 0x08 \n\t" \ ++ "dmtc1 %[rtmp0], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp2], %[ftmp0], %[ftmp1] \n\t" \ ++ "punpcklbh %[ftmp1], %[ftmp0], %[ftmp1] \n\t" \ ++ "psrah %[ftmp1], %[ftmp1], %[ftmp0] \n\t" \ ++ "psrah %[ftmp2], %[ftmp2], %[ftmp0] \n\t" \ ++ "li %[rtmp0], 0x06 \n\t" \ ++ "dmtc1 %[rtmp0], %[ftmp0] \n\t" \ ++ \ ++ "1: \n\t" \ ++ "2: \n\t" \ ++ "gsldlc1 %[ftmp3], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp3], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp4], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp4], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp5], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp5], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp6], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp6], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp7], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp7], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp8], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp8], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp9], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp9], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp10], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp10], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], -0x380 \n\t" \ ++ TRANSPOSE_4H(%[ftmp3], %[ftmp4], %[ftmp5], %[ftmp6], \ ++ %[ftmp11], %[ftmp12], %[ftmp13], %[ftmp14]) \ ++ TRANSPOSE_4H(%[ftmp7], %[ftmp8], %[ftmp9], %[ftmp10], \ ++ %[ftmp11], %[ftmp12], %[ftmp13], %[ftmp14]) \ ++ "pmaddhw %[ftmp11], %[ftmp3], %[ftmp1] \n\t" \ ++ "pmaddhw %[ftmp12], %[ftmp7], %[ftmp2] \n\t" \ ++ "pmaddhw %[ftmp13], %[ftmp4], %[ftmp1] \n\t" \ ++ "pmaddhw %[ftmp14], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddw %[ftmp11], %[ftmp11], %[ftmp12] \n\t" \ ++ "paddw %[ftmp13], %[ftmp13], %[ftmp14] \n\t" \ ++ TRANSPOSE_2W(%[ftmp11], %[ftmp13], %[ftmp3], %[ftmp4]) \ ++ "paddw %[ftmp3], %[ftmp3], %[ftmp4] \n\t" \ ++ "psraw %[ftmp3], %[ftmp3], %[ftmp0] \n\t" \ ++ "pmaddhw %[ftmp11], %[ftmp5], %[ftmp1] \n\t" \ ++ "pmaddhw %[ftmp12], %[ftmp9], %[ftmp2] \n\t" \ ++ "pmaddhw %[ftmp13], %[ftmp6], %[ftmp1] \n\t" \ ++ "pmaddhw %[ftmp14], %[ftmp10], %[ftmp2] \n\t" \ ++ "paddw %[ftmp11], %[ftmp11], %[ftmp12] \n\t" \ ++ "paddw %[ftmp13], %[ftmp13], %[ftmp14] \n\t" \ ++ TRANSPOSE_2W(%[ftmp11], %[ftmp13], %[ftmp5], %[ftmp6]) \ ++ "paddw %[ftmp5], %[ftmp5], %[ftmp6] \n\t" \ ++ "psraw %[ftmp5], %[ftmp5], %[ftmp0] \n\t" \ ++ "packsswh %[ftmp3], %[ftmp3], %[ftmp5] \n\t" \ ++ "gssdlc1 %[ftmp3], 0x07(%[dst]) \n\t" \ ++ "gssdrc1 %[ftmp3], 0x00(%[dst]) \n\t" \ ++ \ ++ "daddi %[x], %[x], -0x01 \n\t" \ ++ PTR_ADDIU "%[dst], %[dst], 0x08 \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x08 \n\t" \ ++ "bnez %[x], 2b \n\t" \ ++ \ ++ "daddi %[y], %[y], -0x01 \n\t" \ ++ "li %[x], " #x_step " \n\t" \ ++ PTR_ADDIU "%[dst], %[dst], " #dst_step " \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], " #dst_step " \n\t" \ ++ PTR_ADDIU "%[dst], %[dst], 0x80 \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "bnez %[y], 1b \n\t" \ ++ : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), \ ++ [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), \ ++ [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), \ ++ [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), \ ++ [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), \ ++ [ftmp10]"=&f"(ftmp[10]), [ftmp11]"=&f"(ftmp[11]), \ ++ [ftmp12]"=&f"(ftmp[12]), [ftmp13]"=&f"(ftmp[13]), \ ++ [ftmp14]"=&f"(ftmp[14]), [rtmp0]"=&r"(rtmp[0]), \ ++ [dst]"+&r"(dst), [tmp]"+&r"(tmp), [y]"+&r"(y), \ ++ [x]"+&r"(x) \ ++ : [filter]"r"(filter), [stride]"r"(srcstride) \ ++ : "memory" \ ++ ); \ ++} ++ ++PUT_HEVC_QPEL_HV(4, 1, -4, -8); ++PUT_HEVC_QPEL_HV(8, 2, -8, -16); ++PUT_HEVC_QPEL_HV(12, 3, -12, -24); ++PUT_HEVC_QPEL_HV(16, 4, -16, -32); ++PUT_HEVC_QPEL_HV(24, 6, -24, -48); ++PUT_HEVC_QPEL_HV(32, 8, -32, -64); ++PUT_HEVC_QPEL_HV(48, 12, -48, -96); ++PUT_HEVC_QPEL_HV(64, 16, -64, -128); ++ ++#define PUT_HEVC_QPEL_BI_H(w, x_step, src_step, src2_step, dst_step) \ ++void ff_hevc_put_hevc_qpel_bi_h##w##_8_mmi(uint8_t *_dst, \ ++ ptrdiff_t _dststride, \ ++ uint8_t *_src, \ ++ ptrdiff_t _srcstride, \ ++ int16_t *src2, int height, \ ++ intptr_t mx, intptr_t my, \ ++ int width) \ ++{ \ ++ int x, y; \ ++ pixel *src = (pixel*)_src - 3; \ ++ ptrdiff_t srcstride = _srcstride / sizeof(pixel); \ ++ pixel *dst = (pixel *)_dst; \ ++ ptrdiff_t dststride = _dststride / sizeof(pixel); \ ++ const int8_t *filter = ff_hevc_qpel_filters[mx - 1]; \ ++ uint64_t ftmp[20]; \ ++ uint64_t rtmp[1]; \ ++ int shift = 7; \ ++ int offset = 64; \ ++ \ ++ x = width >> 2; \ ++ y = height; \ ++ __asm__ volatile( \ ++ MMI_LDC1(%[ftmp1], %[filter], 0x00) \ ++ "li %[rtmp0], 0x08 \n\t" \ ++ "dmtc1 %[rtmp0], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp2], %[ftmp0], %[ftmp1] \n\t" \ ++ "punpcklbh %[ftmp1], %[ftmp0], %[ftmp1] \n\t" \ ++ "psrah %[ftmp1], %[ftmp1], %[ftmp0] \n\t" \ ++ "psrah %[ftmp2], %[ftmp2], %[ftmp0] \n\t" \ ++ "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ ++ "punpcklhw %[offset], %[offset], %[offset] \n\t" \ ++ "punpcklwd %[offset], %[offset], %[offset] \n\t" \ ++ \ ++ "1: \n\t" \ ++ "li %[x], " #x_step " \n\t" \ ++ "2: \n\t" \ ++ "gsldlc1 %[ftmp3], 0x07(%[src]) \n\t" \ ++ "gsldrc1 %[ftmp3], 0x00(%[src]) \n\t" \ ++ "gsldlc1 %[ftmp4], 0x08(%[src]) \n\t" \ ++ "gsldrc1 %[ftmp4], 0x01(%[src]) \n\t" \ ++ "gsldlc1 %[ftmp5], 0x09(%[src]) \n\t" \ ++ "gsldrc1 %[ftmp5], 0x02(%[src]) \n\t" \ ++ "gsldlc1 %[ftmp6], 0x0a(%[src]) \n\t" \ ++ "gsldrc1 %[ftmp6], 0x03(%[src]) \n\t" \ ++ "punpcklbh %[ftmp7], %[ftmp3], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp8], %[ftmp3], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" \ ++ "pmullh %[ftmp8], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddh %[ftmp3], %[ftmp7], %[ftmp8] \n\t" \ ++ "punpcklbh %[ftmp7], %[ftmp4], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp8], %[ftmp4], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" \ ++ "pmullh %[ftmp8], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddh %[ftmp4], %[ftmp7], %[ftmp8] \n\t" \ ++ "punpcklbh %[ftmp7], %[ftmp5], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp8], %[ftmp5], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" \ ++ "pmullh %[ftmp8], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddh %[ftmp5], %[ftmp7], %[ftmp8] \n\t" \ ++ "punpcklbh %[ftmp7], %[ftmp6], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp8], %[ftmp6], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" \ ++ "pmullh %[ftmp8], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddh %[ftmp6], %[ftmp7], %[ftmp8] \n\t" \ ++ TRANSPOSE_4H(%[ftmp3], %[ftmp4], %[ftmp5], %[ftmp6], \ ++ %[ftmp7], %[ftmp8], %[ftmp9], %[ftmp10]) \ ++ "paddh %[ftmp3], %[ftmp3], %[ftmp4] \n\t" \ ++ "paddh %[ftmp5], %[ftmp5], %[ftmp6] \n\t" \ ++ "paddh %[ftmp3], %[ftmp3], %[ftmp5] \n\t" \ ++ "paddh %[ftmp3], %[ftmp3], %[offset] \n\t" \ ++ "gsldlc1 %[ftmp4], 0x07(%[src2]) \n\t" \ ++ "gsldrc1 %[ftmp4], 0x00(%[src2]) \n\t" \ ++ "li %[rtmp0], 0x10 \n\t" \ ++ "dmtc1 %[rtmp0], %[ftmp8] \n\t" \ ++ "punpcklhw %[ftmp5], %[ftmp0], %[ftmp3] \n\t" \ ++ "punpckhhw %[ftmp6], %[ftmp0], %[ftmp3] \n\t" \ ++ "punpckhhw %[ftmp3], %[ftmp0], %[ftmp4] \n\t" \ ++ "punpcklhw %[ftmp4], %[ftmp0], %[ftmp4] \n\t" \ ++ "psraw %[ftmp5], %[ftmp5], %[ftmp8] \n\t" \ ++ "psraw %[ftmp6], %[ftmp6], %[ftmp8] \n\t" \ ++ "psraw %[ftmp3], %[ftmp3], %[ftmp8] \n\t" \ ++ "psraw %[ftmp4], %[ftmp4], %[ftmp8] \n\t" \ ++ "paddw %[ftmp5], %[ftmp5], %[ftmp4] \n\t" \ ++ "paddw %[ftmp6], %[ftmp6], %[ftmp3] \n\t" \ ++ "psraw %[ftmp5], %[ftmp5], %[shift] \n\t" \ ++ "psraw %[ftmp6], %[ftmp6], %[shift] \n\t" \ ++ "packsswh %[ftmp5], %[ftmp5], %[ftmp6] \n\t" \ ++ "pcmpgth %[ftmp7], %[ftmp5], %[ftmp0] \n\t" \ ++ "and %[ftmp3], %[ftmp5], %[ftmp7] \n\t" \ ++ "packushb %[ftmp3], %[ftmp3], %[ftmp3] \n\t" \ ++ "gsswlc1 %[ftmp3], 0x03(%[dst]) \n\t" \ ++ "gsswrc1 %[ftmp3], 0x00(%[dst]) \n\t" \ ++ \ ++ "daddi %[x], %[x], -0x01 \n\t" \ ++ PTR_ADDIU "%[src], %[src], 0x04 \n\t" \ ++ PTR_ADDIU "%[dst], %[dst], 0x04 \n\t" \ ++ PTR_ADDIU "%[src2], %[src2], 0x08 \n\t" \ ++ "bnez %[x], 2b \n\t" \ ++ \ ++ "daddi %[y], %[y], -0x01 \n\t" \ ++ PTR_ADDIU "%[src], %[src], " #src_step " \n\t" \ ++ PTR_ADDIU "%[dst], %[dst], " #dst_step " \n\t" \ ++ PTR_ADDIU "%[src2], %[src2], " #src2_step " \n\t" \ ++ PTR_ADDU "%[src], %[src], %[src_stride] \n\t" \ ++ PTR_ADDU "%[dst], %[dst], %[dst_stride] \n\t" \ ++ PTR_ADDIU "%[src2], %[src2], 0x80 \n\t" \ ++ "bnez %[y], 1b \n\t" \ ++ : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), \ ++ [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), \ ++ [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), \ ++ [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), \ ++ [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), \ ++ [ftmp10]"=&f"(ftmp[10]), [ftmp11]"=&f"(ftmp[11]), \ ++ [ftmp12]"=&f"(ftmp[12]), [src2]"+&r"(src2), \ ++ [dst]"+&r"(dst), [src]"+&r"(src), [y]"+&r"(y), [x]"=&r"(x), \ ++ [offset]"+&f"(offset), [rtmp0]"=&r"(rtmp[0]) \ ++ : [src_stride]"r"(srcstride), [dst_stride]"r"(dststride), \ ++ [filter]"r"(filter), [shift]"f"(shift) \ ++ : "memory" \ ++ ); \ ++} ++ ++PUT_HEVC_QPEL_BI_H(4, 1, -4, -8, -4); ++PUT_HEVC_QPEL_BI_H(8, 2, -8, -16, -8); ++PUT_HEVC_QPEL_BI_H(12, 3, -12, -24, -12); ++PUT_HEVC_QPEL_BI_H(16, 4, -16, -32, -16); ++PUT_HEVC_QPEL_BI_H(24, 6, -24, -48, -24); ++PUT_HEVC_QPEL_BI_H(32, 8, -32, -64, -32); ++PUT_HEVC_QPEL_BI_H(48, 12, -48, -96, -48); ++PUT_HEVC_QPEL_BI_H(64, 16, -64, -128, -64); ++ ++#define PUT_HEVC_QPEL_BI_HV(w, x_step, src_step, src2_step, dst_step) \ ++void ff_hevc_put_hevc_qpel_bi_hv##w##_8_mmi(uint8_t *_dst, \ ++ ptrdiff_t _dststride, \ ++ uint8_t *_src, \ ++ ptrdiff_t _srcstride, \ ++ int16_t *src2, int height, \ ++ intptr_t mx, intptr_t my, \ ++ int width) \ ++{ \ ++ int x, y; \ ++ const int8_t *filter; \ ++ pixel *src = (pixel*)_src; \ ++ ptrdiff_t srcstride = _srcstride / sizeof(pixel); \ ++ pixel *dst = (pixel *)_dst; \ ++ ptrdiff_t dststride = _dststride / sizeof(pixel); \ ++ int16_t tmp_array[(MAX_PB_SIZE + QPEL_EXTRA) * MAX_PB_SIZE]; \ ++ int16_t *tmp = tmp_array; \ ++ uint64_t ftmp[20]; \ ++ uint64_t rtmp[1]; \ ++ int shift = 7; \ ++ int offset = 64; \ ++ \ ++ src -= (QPEL_EXTRA_BEFORE * srcstride + 3); \ ++ filter = ff_hevc_qpel_filters[mx - 1]; \ ++ x = width >> 2; \ ++ y = height + QPEL_EXTRA; \ ++ __asm__ volatile( \ ++ MMI_LDC1(%[ftmp1], %[filter], 0x00) \ ++ "li %[rtmp0], 0x08 \n\t" \ ++ "dmtc1 %[rtmp0], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp2], %[ftmp0], %[ftmp1] \n\t" \ ++ "punpcklbh %[ftmp1], %[ftmp0], %[ftmp1] \n\t" \ ++ "psrah %[ftmp1], %[ftmp1], %[ftmp0] \n\t" \ ++ "psrah %[ftmp2], %[ftmp2], %[ftmp0] \n\t" \ ++ "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ ++ \ ++ "1: \n\t" \ ++ "2: \n\t" \ ++ "gsldlc1 %[ftmp3], 0x07(%[src]) \n\t" \ ++ "gsldrc1 %[ftmp3], 0x00(%[src]) \n\t" \ ++ "gsldlc1 %[ftmp4], 0x08(%[src]) \n\t" \ ++ "gsldrc1 %[ftmp4], 0x01(%[src]) \n\t" \ ++ "gsldlc1 %[ftmp5], 0x09(%[src]) \n\t" \ ++ "gsldrc1 %[ftmp5], 0x02(%[src]) \n\t" \ ++ "gsldlc1 %[ftmp6], 0x0a(%[src]) \n\t" \ ++ "gsldrc1 %[ftmp6], 0x03(%[src]) \n\t" \ ++ "punpcklbh %[ftmp7], %[ftmp3], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp8], %[ftmp3], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" \ ++ "pmullh %[ftmp8], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddh %[ftmp3], %[ftmp7], %[ftmp8] \n\t" \ ++ "punpcklbh %[ftmp7], %[ftmp4], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp8], %[ftmp4], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" \ ++ "pmullh %[ftmp8], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddh %[ftmp4], %[ftmp7], %[ftmp8] \n\t" \ ++ "punpcklbh %[ftmp7], %[ftmp5], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp8], %[ftmp5], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" \ ++ "pmullh %[ftmp8], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddh %[ftmp5], %[ftmp7], %[ftmp8] \n\t" \ ++ "punpcklbh %[ftmp7], %[ftmp6], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp8], %[ftmp6], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" \ ++ "pmullh %[ftmp8], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddh %[ftmp6], %[ftmp7], %[ftmp8] \n\t" \ ++ TRANSPOSE_4H(%[ftmp3], %[ftmp4], %[ftmp5], %[ftmp6], \ ++ %[ftmp7], %[ftmp8], %[ftmp9], %[ftmp10]) \ ++ "paddh %[ftmp3], %[ftmp3], %[ftmp4] \n\t" \ ++ "paddh %[ftmp5], %[ftmp5], %[ftmp6] \n\t" \ ++ "paddh %[ftmp3], %[ftmp3], %[ftmp5] \n\t" \ ++ "gssdlc1 %[ftmp3], 0x07(%[tmp]) \n\t" \ ++ "gssdrc1 %[ftmp3], 0x00(%[tmp]) \n\t" \ ++ \ ++ "daddi %[x], %[x], -0x01 \n\t" \ ++ PTR_ADDIU "%[src], %[src], 0x04 \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x08 \n\t" \ ++ "bnez %[x], 2b \n\t" \ ++ \ ++ "daddi %[y], %[y], -0x01 \n\t" \ ++ "li %[x], " #x_step " \n\t" \ ++ PTR_ADDIU "%[src], %[src], " #src_step " \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], " #src2_step " \n\t" \ ++ PTR_ADDU "%[src], %[src], %[stride] \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "bnez %[y], 1b \n\t" \ ++ : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), \ ++ [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), \ ++ [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), \ ++ [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), \ ++ [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), \ ++ [ftmp10]"=&f"(ftmp[10]), [rtmp0]"=&r"(rtmp[0]), \ ++ [src]"+&r"(src), [tmp]"+&r"(tmp), [y]"+&r"(y), \ ++ [x]"+&r"(x) \ ++ : [filter]"r"(filter), [stride]"r"(srcstride) \ ++ : "memory" \ ++ ); \ ++ \ ++ tmp = tmp_array; \ ++ filter = ff_hevc_qpel_filters[my - 1]; \ ++ x = width >> 2; \ ++ y = height; \ ++ __asm__ volatile( \ ++ MMI_LDC1(%[ftmp1], %[filter], 0x00) \ ++ "li %[rtmp0], 0x08 \n\t" \ ++ "dmtc1 %[rtmp0], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp2], %[ftmp0], %[ftmp1] \n\t" \ ++ "punpcklbh %[ftmp1], %[ftmp0], %[ftmp1] \n\t" \ ++ "psrah %[ftmp1], %[ftmp1], %[ftmp0] \n\t" \ ++ "psrah %[ftmp2], %[ftmp2], %[ftmp0] \n\t" \ ++ "li %[rtmp0], 0x06 \n\t" \ ++ "dmtc1 %[rtmp0], %[ftmp0] \n\t" \ ++ "punpcklwd %[offset], %[offset], %[offset] \n\t" \ ++ \ ++ "1: \n\t" \ ++ "li %[x], " #x_step " \n\t" \ ++ "2: \n\t" \ ++ "gsldlc1 %[ftmp3], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp3], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp4], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp4], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp5], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp5], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp6], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp6], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp7], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp7], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp8], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp8], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp9], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp9], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp10], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp10], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], -0x380 \n\t" \ ++ TRANSPOSE_4H(%[ftmp3], %[ftmp4], %[ftmp5], %[ftmp6], \ ++ %[ftmp11], %[ftmp12], %[ftmp13], %[ftmp14]) \ ++ TRANSPOSE_4H(%[ftmp7], %[ftmp8], %[ftmp9], %[ftmp10], \ ++ %[ftmp11], %[ftmp12], %[ftmp13], %[ftmp14]) \ ++ "pmaddhw %[ftmp11], %[ftmp3], %[ftmp1] \n\t" \ ++ "pmaddhw %[ftmp12], %[ftmp7], %[ftmp2] \n\t" \ ++ "pmaddhw %[ftmp13], %[ftmp4], %[ftmp1] \n\t" \ ++ "pmaddhw %[ftmp14], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddw %[ftmp11], %[ftmp11], %[ftmp12] \n\t" \ ++ "paddw %[ftmp13], %[ftmp13], %[ftmp14] \n\t" \ ++ TRANSPOSE_2W(%[ftmp11], %[ftmp13], %[ftmp3], %[ftmp4]) \ ++ "paddw %[ftmp3], %[ftmp3], %[ftmp4] \n\t" \ ++ "psraw %[ftmp3], %[ftmp3], %[ftmp0] \n\t" \ ++ "pmaddhw %[ftmp11], %[ftmp5], %[ftmp1] \n\t" \ ++ "pmaddhw %[ftmp12], %[ftmp9], %[ftmp2] \n\t" \ ++ "pmaddhw %[ftmp13], %[ftmp6], %[ftmp1] \n\t" \ ++ "pmaddhw %[ftmp14], %[ftmp10], %[ftmp2] \n\t" \ ++ "paddw %[ftmp11], %[ftmp11], %[ftmp12] \n\t" \ ++ "paddw %[ftmp13], %[ftmp13], %[ftmp14] \n\t" \ ++ TRANSPOSE_2W(%[ftmp11], %[ftmp13], %[ftmp5], %[ftmp6]) \ ++ "paddw %[ftmp5], %[ftmp5], %[ftmp6] \n\t" \ ++ "psraw %[ftmp5], %[ftmp5], %[ftmp0] \n\t" \ ++ "packsswh %[ftmp3], %[ftmp3], %[ftmp5] \n\t" \ ++ "gsldlc1 %[ftmp4], 0x07(%[src2]) \n\t" \ ++ "gsldrc1 %[ftmp4], 0x00(%[src2]) \n\t" \ ++ "xor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" \ ++ "li %[rtmp0], 0x10 \n\t" \ ++ "dmtc1 %[rtmp0], %[ftmp8] \n\t" \ ++ "punpcklhw %[ftmp5], %[ftmp7], %[ftmp3] \n\t" \ ++ "punpckhhw %[ftmp6], %[ftmp7], %[ftmp3] \n\t" \ ++ "punpckhhw %[ftmp3], %[ftmp7], %[ftmp4] \n\t" \ ++ "punpcklhw %[ftmp4], %[ftmp7], %[ftmp4] \n\t" \ ++ "psraw %[ftmp5], %[ftmp5], %[ftmp8] \n\t" \ ++ "psraw %[ftmp6], %[ftmp6], %[ftmp8] \n\t" \ ++ "psraw %[ftmp3], %[ftmp3], %[ftmp8] \n\t" \ ++ "psraw %[ftmp4], %[ftmp4], %[ftmp8] \n\t" \ ++ "paddw %[ftmp5], %[ftmp5], %[ftmp4] \n\t" \ ++ "paddw %[ftmp6], %[ftmp6], %[ftmp3] \n\t" \ ++ "paddw %[ftmp5], %[ftmp5], %[offset] \n\t" \ ++ "paddw %[ftmp6], %[ftmp6], %[offset] \n\t" \ ++ "psraw %[ftmp5], %[ftmp5], %[shift] \n\t" \ ++ "psraw %[ftmp6], %[ftmp6], %[shift] \n\t" \ ++ "packsswh %[ftmp5], %[ftmp5], %[ftmp6] \n\t" \ ++ "pcmpgth %[ftmp7], %[ftmp5], %[ftmp7] \n\t" \ ++ "and %[ftmp3], %[ftmp5], %[ftmp7] \n\t" \ ++ "packushb %[ftmp3], %[ftmp3], %[ftmp3] \n\t" \ ++ "gsswlc1 %[ftmp3], 0x03(%[dst]) \n\t" \ ++ "gsswrc1 %[ftmp3], 0x00(%[dst]) \n\t" \ ++ \ ++ "daddi %[x], %[x], -0x01 \n\t" \ ++ PTR_ADDIU "%[src2], %[src2], 0x08 \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x08 \n\t" \ ++ PTR_ADDIU "%[dst], %[dst], 0x04 \n\t" \ ++ "bnez %[x], 2b \n\t" \ ++ \ ++ "daddi %[y], %[y], -0x01 \n\t" \ ++ PTR_ADDIU "%[src2], %[src2], " #src2_step " \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], " #src2_step " \n\t" \ ++ PTR_ADDIU "%[dst], %[dst], " #dst_step " \n\t" \ ++ PTR_ADDIU "%[src2], %[src2], 0x80 \n\t" \ ++ PTR_ADDU "%[dst], %[dst], %[stride] \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "bnez %[y], 1b \n\t" \ ++ : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), \ ++ [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), \ ++ [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), \ ++ [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), \ ++ [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), \ ++ [ftmp10]"=&f"(ftmp[10]), [ftmp11]"=&f"(ftmp[11]), \ ++ [ftmp12]"=&f"(ftmp[12]), [ftmp13]"=&f"(ftmp[13]), \ ++ [ftmp14]"=&f"(ftmp[14]), [src2]"+&r"(src2), \ ++ [dst]"+&r"(dst), [tmp]"+&r"(tmp), [y]"+&r"(y), [x]"=&r"(x), \ ++ [offset]"+&f"(offset), [rtmp0]"=&r"(rtmp[0]) \ ++ : [filter]"r"(filter), [stride]"r"(dststride), \ ++ [shift]"f"(shift) \ ++ : "memory" \ ++ ); \ ++} ++ ++PUT_HEVC_QPEL_BI_HV(4, 1, -4, -8, -4); ++PUT_HEVC_QPEL_BI_HV(8, 2, -8, -16, -8); ++PUT_HEVC_QPEL_BI_HV(12, 3, -12, -24, -12); ++PUT_HEVC_QPEL_BI_HV(16, 4, -16, -32, -16); ++PUT_HEVC_QPEL_BI_HV(24, 6, -24, -48, -24); ++PUT_HEVC_QPEL_BI_HV(32, 8, -32, -64, -32); ++PUT_HEVC_QPEL_BI_HV(48, 12, -48, -96, -48); ++PUT_HEVC_QPEL_BI_HV(64, 16, -64, -128, -64); ++ ++#define PUT_HEVC_EPEL_BI_HV(w, x_step, src_step, src2_step, dst_step) \ ++void ff_hevc_put_hevc_epel_bi_hv##w##_8_mmi(uint8_t *_dst, \ ++ ptrdiff_t _dststride, \ ++ uint8_t *_src, \ ++ ptrdiff_t _srcstride, \ ++ int16_t *src2, int height, \ ++ intptr_t mx, intptr_t my, \ ++ int width) \ ++{ \ ++ int x, y; \ ++ pixel *src = (pixel *)_src; \ ++ ptrdiff_t srcstride = _srcstride / sizeof(pixel); \ ++ pixel *dst = (pixel *)_dst; \ ++ ptrdiff_t dststride = _dststride / sizeof(pixel); \ ++ const int8_t *filter = ff_hevc_epel_filters[mx - 1]; \ ++ int16_t tmp_array[(MAX_PB_SIZE + EPEL_EXTRA) * MAX_PB_SIZE]; \ ++ int16_t *tmp = tmp_array; \ ++ uint64_t ftmp[12]; \ ++ uint64_t rtmp[1]; \ ++ int shift = 7; \ ++ int offset = 64; \ ++ \ ++ src -= (EPEL_EXTRA_BEFORE * srcstride + 1); \ ++ x = width >> 2; \ ++ y = height + EPEL_EXTRA; \ ++ __asm__ volatile( \ ++ MMI_LWC1(%[ftmp1], %[filter], 0x00) \ ++ "li %[rtmp0], 0x08 \n\t" \ ++ "dmtc1 %[rtmp0], %[ftmp0] \n\t" \ ++ "punpcklbh %[ftmp1], %[ftmp0], %[ftmp1] \n\t" \ ++ "psrah %[ftmp1], %[ftmp1], %[ftmp0] \n\t" \ ++ "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ ++ \ ++ "1: \n\t" \ ++ "2: \n\t" \ ++ "gslwlc1 %[ftmp2], 0x03(%[src]) \n\t" \ ++ "gslwrc1 %[ftmp2], 0x00(%[src]) \n\t" \ ++ "gslwlc1 %[ftmp3], 0x04(%[src]) \n\t" \ ++ "gslwrc1 %[ftmp3], 0x01(%[src]) \n\t" \ ++ "gslwlc1 %[ftmp4], 0x05(%[src]) \n\t" \ ++ "gslwrc1 %[ftmp4], 0x02(%[src]) \n\t" \ ++ "gslwlc1 %[ftmp5], 0x06(%[src]) \n\t" \ ++ "gslwrc1 %[ftmp5], 0x03(%[src]) \n\t" \ ++ "punpcklbh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp2], %[ftmp2], %[ftmp1] \n\t" \ ++ "punpcklbh %[ftmp3], %[ftmp3], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp3], %[ftmp3], %[ftmp1] \n\t" \ ++ "punpcklbh %[ftmp4], %[ftmp4], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp4], %[ftmp4], %[ftmp1] \n\t" \ ++ "punpcklbh %[ftmp5], %[ftmp5], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp5], %[ftmp5], %[ftmp1] \n\t" \ ++ TRANSPOSE_4H(%[ftmp2], %[ftmp3], %[ftmp4], %[ftmp5], \ ++ %[ftmp6], %[ftmp7], %[ftmp8], %[ftmp9]) \ ++ "paddh %[ftmp2], %[ftmp2], %[ftmp3] \n\t" \ ++ "paddh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" \ ++ "paddh %[ftmp2], %[ftmp2], %[ftmp4] \n\t" \ ++ "gssdlc1 %[ftmp2], 0x07(%[tmp]) \n\t" \ ++ "gssdrc1 %[ftmp2], 0x00(%[tmp]) \n\t" \ ++ \ ++ "daddi %[x], %[x], -0x01 \n\t" \ ++ PTR_ADDIU "%[src], %[src], 0x04 \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x08 \n\t" \ ++ "bnez %[x], 2b \n\t" \ ++ \ ++ "daddi %[y], %[y], -0x01 \n\t" \ ++ "li %[x], " #x_step " \n\t" \ ++ PTR_ADDIU "%[src], %[src], " #src_step " \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], " #src2_step " \n\t" \ ++ PTR_ADDU "%[src], %[src], %[stride] \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "bnez %[y], 1b \n\t" \ ++ : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), \ ++ [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), \ ++ [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), \ ++ [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), \ ++ [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), \ ++ [rtmp0]"=&r"(rtmp[0]), \ ++ [src]"+&r"(src), [tmp]"+&r"(tmp), [y]"+&r"(y), \ ++ [x]"+&r"(x) \ ++ : [filter]"r"(filter), [stride]"r"(srcstride) \ ++ : "memory" \ ++ ); \ ++ \ ++ tmp = tmp_array; \ ++ filter = ff_hevc_epel_filters[my - 1]; \ ++ x = width >> 2; \ ++ y = height; \ ++ __asm__ volatile( \ ++ MMI_LWC1(%[ftmp1], %[filter], 0x00) \ ++ "li %[rtmp0], 0x08 \n\t" \ ++ "dmtc1 %[rtmp0], %[ftmp0] \n\t" \ ++ "punpcklbh %[ftmp1], %[ftmp0], %[ftmp1] \n\t" \ ++ "psrah %[ftmp1], %[ftmp1], %[ftmp0] \n\t" \ ++ "li %[rtmp0], 0x06 \n\t" \ ++ "dmtc1 %[rtmp0], %[ftmp0] \n\t" \ ++ "punpcklwd %[offset], %[offset], %[offset] \n\t" \ ++ "xor %[ftmp2], %[ftmp2], %[ftmp2] \n\t" \ ++ \ ++ "1: \n\t" \ ++ "li %[x], " #x_step " \n\t" \ ++ "2: \n\t" \ ++ "gsldlc1 %[ftmp3], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp3], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp4], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp4], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp5], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp5], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp6], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp6], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], -0x180 \n\t" \ ++ TRANSPOSE_4H(%[ftmp3], %[ftmp4], %[ftmp5], %[ftmp6], \ ++ %[ftmp7], %[ftmp8], %[ftmp9], %[ftmp10]) \ ++ "pmaddhw %[ftmp7], %[ftmp3], %[ftmp1] \n\t" \ ++ "pmaddhw %[ftmp8], %[ftmp4], %[ftmp1] \n\t" \ ++ TRANSPOSE_2W(%[ftmp7], %[ftmp8], %[ftmp3], %[ftmp4]) \ ++ "paddw %[ftmp3], %[ftmp3], %[ftmp4] \n\t" \ ++ "psraw %[ftmp3], %[ftmp3], %[ftmp0] \n\t" \ ++ "pmaddhw %[ftmp7], %[ftmp5], %[ftmp1] \n\t" \ ++ "pmaddhw %[ftmp8], %[ftmp6], %[ftmp1] \n\t" \ ++ TRANSPOSE_2W(%[ftmp7], %[ftmp8], %[ftmp5], %[ftmp6]) \ ++ "paddw %[ftmp5], %[ftmp5], %[ftmp6] \n\t" \ ++ "psraw %[ftmp5], %[ftmp5], %[ftmp0] \n\t" \ ++ "packsswh %[ftmp3], %[ftmp3], %[ftmp5] \n\t" \ ++ "gsldlc1 %[ftmp4], 0x07(%[src2]) \n\t" \ ++ "gsldrc1 %[ftmp4], 0x00(%[src2]) \n\t" \ ++ "li %[rtmp0], 0x10 \n\t" \ ++ "dmtc1 %[rtmp0], %[ftmp8] \n\t" \ ++ "punpcklhw %[ftmp5], %[ftmp2], %[ftmp3] \n\t" \ ++ "punpckhhw %[ftmp6], %[ftmp2], %[ftmp3] \n\t" \ ++ "punpckhhw %[ftmp3], %[ftmp2], %[ftmp4] \n\t" \ ++ "punpcklhw %[ftmp4], %[ftmp2], %[ftmp4] \n\t" \ ++ "psraw %[ftmp5], %[ftmp5], %[ftmp8] \n\t" \ ++ "psraw %[ftmp6], %[ftmp6], %[ftmp8] \n\t" \ ++ "psraw %[ftmp3], %[ftmp3], %[ftmp8] \n\t" \ ++ "psraw %[ftmp4], %[ftmp4], %[ftmp8] \n\t" \ ++ "paddw %[ftmp5], %[ftmp5], %[ftmp4] \n\t" \ ++ "paddw %[ftmp6], %[ftmp6], %[ftmp3] \n\t" \ ++ "paddw %[ftmp5], %[ftmp5], %[offset] \n\t" \ ++ "paddw %[ftmp6], %[ftmp6], %[offset] \n\t" \ ++ "psraw %[ftmp5], %[ftmp5], %[shift] \n\t" \ ++ "psraw %[ftmp6], %[ftmp6], %[shift] \n\t" \ ++ "packsswh %[ftmp5], %[ftmp5], %[ftmp6] \n\t" \ ++ "pcmpgth %[ftmp7], %[ftmp5], %[ftmp2] \n\t" \ ++ "and %[ftmp3], %[ftmp5], %[ftmp7] \n\t" \ ++ "packushb %[ftmp3], %[ftmp3], %[ftmp3] \n\t" \ ++ "gsswlc1 %[ftmp3], 0x03(%[dst]) \n\t" \ ++ "gsswrc1 %[ftmp3], 0x00(%[dst]) \n\t" \ ++ \ ++ "daddi %[x], %[x], -0x01 \n\t" \ ++ PTR_ADDIU "%[src2], %[src2], 0x08 \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x08 \n\t" \ ++ PTR_ADDIU "%[dst], %[dst], 0x04 \n\t" \ ++ "bnez %[x], 2b \n\t" \ ++ \ ++ "daddi %[y], %[y], -0x01 \n\t" \ ++ PTR_ADDIU "%[src2], %[src2], " #src2_step " \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], " #src2_step " \n\t" \ ++ PTR_ADDIU "%[dst], %[dst], " #dst_step " \n\t" \ ++ PTR_ADDIU "%[src2], %[src2], 0x80 \n\t" \ ++ PTR_ADDU "%[dst], %[dst], %[stride] \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "bnez %[y], 1b \n\t" \ ++ : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), \ ++ [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), \ ++ [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), \ ++ [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), \ ++ [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), \ ++ [ftmp10]"=&f"(ftmp[10]), [src2]"+&r"(src2), \ ++ [dst]"+&r"(dst), [tmp]"+&r"(tmp), [y]"+&r"(y), [x]"=&r"(x), \ ++ [offset]"+&f"(offset), [rtmp0]"=&r"(rtmp[0]) \ ++ : [filter]"r"(filter), [stride]"r"(dststride), \ ++ [shift]"f"(shift) \ ++ : "memory" \ ++ ); \ ++} ++ ++PUT_HEVC_EPEL_BI_HV(4, 1, -4, -8, -4); ++PUT_HEVC_EPEL_BI_HV(8, 2, -8, -16, -8); ++PUT_HEVC_EPEL_BI_HV(12, 3, -12, -24, -12); ++PUT_HEVC_EPEL_BI_HV(16, 4, -16, -32, -16); ++PUT_HEVC_EPEL_BI_HV(24, 6, -24, -48, -24); ++PUT_HEVC_EPEL_BI_HV(32, 8, -32, -64, -32); ++ ++#define PUT_HEVC_PEL_BI_PIXELS(w, x_step, src_step, dst_step, src2_step) \ ++void ff_hevc_put_hevc_pel_bi_pixels##w##_8_mmi(uint8_t *_dst, \ ++ ptrdiff_t _dststride, \ ++ uint8_t *_src, \ ++ ptrdiff_t _srcstride, \ ++ int16_t *src2, int height, \ ++ intptr_t mx, intptr_t my, \ ++ int width) \ ++{ \ ++ int x, y; \ ++ pixel *src = (pixel *)_src; \ ++ ptrdiff_t srcstride = _srcstride / sizeof(pixel); \ ++ pixel *dst = (pixel *)_dst; \ ++ ptrdiff_t dststride = _dststride / sizeof(pixel); \ ++ uint64_t ftmp[12]; \ ++ uint64_t rtmp[1]; \ ++ int shift = 7; \ ++ \ ++ y = height; \ ++ x = width >> 3; \ ++ __asm__ volatile( \ ++ "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ ++ "li %[rtmp0], 0x06 \n\t" \ ++ "dmtc1 %[rtmp0], %[ftmp1] \n\t" \ ++ "li %[rtmp0], 0x10 \n\t" \ ++ "dmtc1 %[rtmp0], %[ftmp10] \n\t" \ ++ "li %[rtmp0], 0x40 \n\t" \ ++ "dmtc1 %[rtmp0], %[offset] \n\t" \ ++ "punpcklhw %[offset], %[offset], %[offset] \n\t" \ ++ "punpcklwd %[offset], %[offset], %[offset] \n\t" \ ++ \ ++ "1: \n\t" \ ++ "2: \n\t" \ ++ "gsldlc1 %[ftmp5], 0x07(%[src]) \n\t" \ ++ "gsldrc1 %[ftmp5], 0x00(%[src]) \n\t" \ ++ "gsldlc1 %[ftmp2], 0x07(%[src2]) \n\t" \ ++ "gsldrc1 %[ftmp2], 0x00(%[src2]) \n\t" \ ++ "gsldlc1 %[ftmp3], 0x0f(%[src2]) \n\t" \ ++ "gsldrc1 %[ftmp3], 0x08(%[src2]) \n\t" \ ++ "punpcklbh %[ftmp4], %[ftmp5], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp5], %[ftmp5], %[ftmp0] \n\t" \ ++ "psllh %[ftmp4], %[ftmp4], %[ftmp1] \n\t" \ ++ "psllh %[ftmp5], %[ftmp5], %[ftmp1] \n\t" \ ++ "paddh %[ftmp4], %[ftmp4], %[offset] \n\t" \ ++ "paddh %[ftmp5], %[ftmp5], %[offset] \n\t" \ ++ "punpcklhw %[ftmp6], %[ftmp4], %[ftmp0] \n\t" \ ++ "punpckhhw %[ftmp7], %[ftmp4], %[ftmp0] \n\t" \ ++ "punpcklhw %[ftmp8], %[ftmp5], %[ftmp0] \n\t" \ ++ "punpckhhw %[ftmp9], %[ftmp5], %[ftmp0] \n\t" \ ++ "punpcklhw %[ftmp4], %[ftmp0], %[ftmp3] \n\t" \ ++ "punpckhhw %[ftmp5], %[ftmp0], %[ftmp3] \n\t" \ ++ "punpckhhw %[ftmp3], %[ftmp0], %[ftmp2] \n\t" \ ++ "punpcklhw %[ftmp2], %[ftmp0], %[ftmp2] \n\t" \ ++ "psraw %[ftmp2], %[ftmp2], %[ftmp10] \n\t" \ ++ "psraw %[ftmp3], %[ftmp3], %[ftmp10] \n\t" \ ++ "psraw %[ftmp4], %[ftmp4], %[ftmp10] \n\t" \ ++ "psraw %[ftmp5], %[ftmp5], %[ftmp10] \n\t" \ ++ "paddw %[ftmp2], %[ftmp2], %[ftmp6] \n\t" \ ++ "paddw %[ftmp3], %[ftmp3], %[ftmp7] \n\t" \ ++ "paddw %[ftmp4], %[ftmp4], %[ftmp8] \n\t" \ ++ "paddw %[ftmp5], %[ftmp5], %[ftmp9] \n\t" \ ++ "psraw %[ftmp2], %[ftmp2], %[shift] \n\t" \ ++ "psraw %[ftmp3], %[ftmp3], %[shift] \n\t" \ ++ "psraw %[ftmp4], %[ftmp4], %[shift] \n\t" \ ++ "psraw %[ftmp5], %[ftmp5], %[shift] \n\t" \ ++ "packsswh %[ftmp2], %[ftmp2], %[ftmp3] \n\t" \ ++ "packsswh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" \ ++ "pcmpgth %[ftmp3], %[ftmp2], %[ftmp0] \n\t" \ ++ "pcmpgth %[ftmp5], %[ftmp4], %[ftmp0] \n\t" \ ++ "and %[ftmp2], %[ftmp2], %[ftmp3] \n\t" \ ++ "and %[ftmp4], %[ftmp4], %[ftmp5] \n\t" \ ++ "packushb %[ftmp2], %[ftmp2], %[ftmp4] \n\t" \ ++ "gssdlc1 %[ftmp2], 0x07(%[dst]) \n\t" \ ++ "gssdrc1 %[ftmp2], 0x00(%[dst]) \n\t" \ ++ \ ++ "daddi %[x], %[x], -0x01 \n\t" \ ++ PTR_ADDIU "%[src], %[src], 0x08 \n\t" \ ++ PTR_ADDIU "%[dst], %[dst], 0x08 \n\t" \ ++ PTR_ADDIU "%[src2], %[src2], 0x10 \n\t" \ ++ "bnez %[x], 2b \n\t" \ ++ \ ++ PTR_ADDIU "%[src], %[src], " #src_step " \n\t" \ ++ PTR_ADDIU "%[dst], %[dst], " #dst_step " \n\t" \ ++ PTR_ADDIU "%[src2], %[src2], " #src2_step " \n\t" \ ++ "li %[x], " #x_step " \n\t" \ ++ "daddi %[y], %[y], -0x01 \n\t" \ ++ PTR_ADDU "%[src], %[src], %[srcstride] \n\t" \ ++ PTR_ADDU "%[dst], %[dst], %[dststride] \n\t" \ ++ PTR_ADDIU "%[src2], %[src2], 0x80 \n\t" \ ++ "bnez %[y], 1b \n\t" \ ++ : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), \ ++ [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), \ ++ [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), \ ++ [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), \ ++ [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), \ ++ [ftmp10]"=&f"(ftmp[10]), [offset]"=&f"(ftmp[11]), \ ++ [src2]"+&r"(src2), [dst]"+&r"(dst), [src]"+&r"(src), \ ++ [x]"+&r"(x), [y]"+&r"(y), [rtmp0]"=&r"(rtmp[0]) \ ++ : [dststride]"r"(dststride), [shift]"f"(shift), \ ++ [srcstride]"r"(srcstride) \ ++ : "memory" \ ++ ); \ ++} \ ++ ++PUT_HEVC_PEL_BI_PIXELS(8, 1, -8, -8, -16); ++PUT_HEVC_PEL_BI_PIXELS(16, 2, -16, -16, -32); ++PUT_HEVC_PEL_BI_PIXELS(24, 3, -24, -24, -48); ++PUT_HEVC_PEL_BI_PIXELS(32, 4, -32, -32, -64); ++PUT_HEVC_PEL_BI_PIXELS(48, 6, -48, -48, -96); ++PUT_HEVC_PEL_BI_PIXELS(64, 8, -64, -64, -128); ++ ++#define PUT_HEVC_QPEL_UNI_HV(w, x_step, src_step, dst_step, tmp_step) \ ++void ff_hevc_put_hevc_qpel_uni_hv##w##_8_mmi(uint8_t *_dst, \ ++ ptrdiff_t _dststride, \ ++ uint8_t *_src, \ ++ ptrdiff_t _srcstride, \ ++ int height, \ ++ intptr_t mx, intptr_t my, \ ++ int width) \ ++{ \ ++ int x, y; \ ++ const int8_t *filter; \ ++ pixel *src = (pixel*)_src; \ ++ ptrdiff_t srcstride = _srcstride / sizeof(pixel); \ ++ pixel *dst = (pixel *)_dst; \ ++ ptrdiff_t dststride = _dststride / sizeof(pixel); \ ++ int16_t tmp_array[(MAX_PB_SIZE + QPEL_EXTRA) * MAX_PB_SIZE]; \ ++ int16_t *tmp = tmp_array; \ ++ uint64_t ftmp[20]; \ ++ uint64_t rtmp[1]; \ ++ int shift = 6; \ ++ int offset = 32; \ ++ \ ++ src -= (QPEL_EXTRA_BEFORE * srcstride + 3); \ ++ filter = ff_hevc_qpel_filters[mx - 1]; \ ++ x = width >> 2; \ ++ y = height + QPEL_EXTRA; \ ++ __asm__ volatile( \ ++ MMI_LDC1(%[ftmp1], %[filter], 0x00) \ ++ "li %[rtmp0], 0x08 \n\t" \ ++ "dmtc1 %[rtmp0], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp2], %[ftmp0], %[ftmp1] \n\t" \ ++ "punpcklbh %[ftmp1], %[ftmp0], %[ftmp1] \n\t" \ ++ "psrah %[ftmp1], %[ftmp1], %[ftmp0] \n\t" \ ++ "psrah %[ftmp2], %[ftmp2], %[ftmp0] \n\t" \ ++ "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ ++ \ ++ "1: \n\t" \ ++ "2: \n\t" \ ++ "gsldlc1 %[ftmp3], 0x07(%[src]) \n\t" \ ++ "gsldrc1 %[ftmp3], 0x00(%[src]) \n\t" \ ++ "gsldlc1 %[ftmp4], 0x08(%[src]) \n\t" \ ++ "gsldrc1 %[ftmp4], 0x01(%[src]) \n\t" \ ++ "gsldlc1 %[ftmp5], 0x09(%[src]) \n\t" \ ++ "gsldrc1 %[ftmp5], 0x02(%[src]) \n\t" \ ++ "gsldlc1 %[ftmp6], 0x0a(%[src]) \n\t" \ ++ "gsldrc1 %[ftmp6], 0x03(%[src]) \n\t" \ ++ "punpcklbh %[ftmp7], %[ftmp3], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp8], %[ftmp3], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" \ ++ "pmullh %[ftmp8], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddh %[ftmp3], %[ftmp7], %[ftmp8] \n\t" \ ++ "punpcklbh %[ftmp7], %[ftmp4], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp8], %[ftmp4], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" \ ++ "pmullh %[ftmp8], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddh %[ftmp4], %[ftmp7], %[ftmp8] \n\t" \ ++ "punpcklbh %[ftmp7], %[ftmp5], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp8], %[ftmp5], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" \ ++ "pmullh %[ftmp8], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddh %[ftmp5], %[ftmp7], %[ftmp8] \n\t" \ ++ "punpcklbh %[ftmp7], %[ftmp6], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp8], %[ftmp6], %[ftmp0] \n\t" \ ++ "pmullh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" \ ++ "pmullh %[ftmp8], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddh %[ftmp6], %[ftmp7], %[ftmp8] \n\t" \ ++ TRANSPOSE_4H(%[ftmp3], %[ftmp4], %[ftmp5], %[ftmp6], \ ++ %[ftmp7], %[ftmp8], %[ftmp9], %[ftmp10]) \ ++ "paddh %[ftmp3], %[ftmp3], %[ftmp4] \n\t" \ ++ "paddh %[ftmp5], %[ftmp5], %[ftmp6] \n\t" \ ++ "paddh %[ftmp3], %[ftmp3], %[ftmp5] \n\t" \ ++ "gssdlc1 %[ftmp3], 0x07(%[tmp]) \n\t" \ ++ "gssdrc1 %[ftmp3], 0x00(%[tmp]) \n\t" \ ++ \ ++ "daddi %[x], %[x], -0x01 \n\t" \ ++ PTR_ADDIU "%[src], %[src], 0x04 \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x08 \n\t" \ ++ "bnez %[x], 2b \n\t" \ ++ \ ++ "daddi %[y], %[y], -0x01 \n\t" \ ++ "li %[x], " #x_step " \n\t" \ ++ PTR_ADDIU "%[src], %[src], " #src_step " \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], " #tmp_step " \n\t" \ ++ PTR_ADDU "%[src], %[src], %[stride] \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "bnez %[y], 1b \n\t" \ ++ : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), \ ++ [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), \ ++ [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), \ ++ [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), \ ++ [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), \ ++ [ftmp10]"=&f"(ftmp[10]), [rtmp0]"=&r"(rtmp[0]), \ ++ [src]"+&r"(src), [tmp]"+&r"(tmp), [y]"+&r"(y), \ ++ [x]"+&r"(x) \ ++ : [filter]"r"(filter), [stride]"r"(srcstride) \ ++ : "memory" \ ++ ); \ ++ \ ++ tmp = tmp_array; \ ++ filter = ff_hevc_qpel_filters[my - 1]; \ ++ x = width >> 2; \ ++ y = height; \ ++ __asm__ volatile( \ ++ MMI_LDC1(%[ftmp1], %[filter], 0x00) \ ++ "li %[rtmp0], 0x08 \n\t" \ ++ "dmtc1 %[rtmp0], %[ftmp0] \n\t" \ ++ "punpckhbh %[ftmp2], %[ftmp0], %[ftmp1] \n\t" \ ++ "punpcklbh %[ftmp1], %[ftmp0], %[ftmp1] \n\t" \ ++ "psrah %[ftmp1], %[ftmp1], %[ftmp0] \n\t" \ ++ "psrah %[ftmp2], %[ftmp2], %[ftmp0] \n\t" \ ++ "li %[rtmp0], 0x06 \n\t" \ ++ "dmtc1 %[rtmp0], %[ftmp0] \n\t" \ ++ "punpcklhw %[offset], %[offset], %[offset] \n\t" \ ++ "punpcklwd %[offset], %[offset], %[offset] \n\t" \ ++ \ ++ "1: \n\t" \ ++ "li %[x], " #x_step " \n\t" \ ++ "2: \n\t" \ ++ "gsldlc1 %[ftmp3], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp3], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp4], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp4], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp5], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp5], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp6], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp6], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp7], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp7], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp8], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp8], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp9], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp9], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "gsldlc1 %[ftmp10], 0x07(%[tmp]) \n\t" \ ++ "gsldrc1 %[ftmp10], 0x00(%[tmp]) \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], -0x380 \n\t" \ ++ TRANSPOSE_4H(%[ftmp3], %[ftmp4], %[ftmp5], %[ftmp6], \ ++ %[ftmp11], %[ftmp12], %[ftmp13], %[ftmp14]) \ ++ TRANSPOSE_4H(%[ftmp7], %[ftmp8], %[ftmp9], %[ftmp10], \ ++ %[ftmp11], %[ftmp12], %[ftmp13], %[ftmp14]) \ ++ "pmaddhw %[ftmp11], %[ftmp3], %[ftmp1] \n\t" \ ++ "pmaddhw %[ftmp12], %[ftmp7], %[ftmp2] \n\t" \ ++ "pmaddhw %[ftmp13], %[ftmp4], %[ftmp1] \n\t" \ ++ "pmaddhw %[ftmp14], %[ftmp8], %[ftmp2] \n\t" \ ++ "paddw %[ftmp11], %[ftmp11], %[ftmp12] \n\t" \ ++ "paddw %[ftmp13], %[ftmp13], %[ftmp14] \n\t" \ ++ TRANSPOSE_2W(%[ftmp11], %[ftmp13], %[ftmp3], %[ftmp4]) \ ++ "paddw %[ftmp3], %[ftmp3], %[ftmp4] \n\t" \ ++ "psraw %[ftmp3], %[ftmp3], %[ftmp0] \n\t" \ ++ "pmaddhw %[ftmp11], %[ftmp5], %[ftmp1] \n\t" \ ++ "pmaddhw %[ftmp12], %[ftmp9], %[ftmp2] \n\t" \ ++ "pmaddhw %[ftmp13], %[ftmp6], %[ftmp1] \n\t" \ ++ "pmaddhw %[ftmp14], %[ftmp10], %[ftmp2] \n\t" \ ++ "paddw %[ftmp11], %[ftmp11], %[ftmp12] \n\t" \ ++ "paddw %[ftmp13], %[ftmp13], %[ftmp14] \n\t" \ ++ TRANSPOSE_2W(%[ftmp11], %[ftmp13], %[ftmp5], %[ftmp6]) \ ++ "paddw %[ftmp5], %[ftmp5], %[ftmp6] \n\t" \ ++ "psraw %[ftmp5], %[ftmp5], %[ftmp0] \n\t" \ ++ "packsswh %[ftmp3], %[ftmp3], %[ftmp5] \n\t" \ ++ "paddh %[ftmp3], %[ftmp3], %[offset] \n\t" \ ++ "psrah %[ftmp3], %[ftmp3], %[shift] \n\t" \ ++ "xor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" \ ++ "pcmpgth %[ftmp7], %[ftmp3], %[ftmp7] \n\t" \ ++ "and %[ftmp3], %[ftmp3], %[ftmp7] \n\t" \ ++ "packushb %[ftmp3], %[ftmp3], %[ftmp3] \n\t" \ ++ "gsswlc1 %[ftmp3], 0x03(%[dst]) \n\t" \ ++ "gsswrc1 %[ftmp3], 0x00(%[dst]) \n\t" \ ++ \ ++ "daddi %[x], %[x], -0x01 \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x08 \n\t" \ ++ PTR_ADDIU "%[dst], %[dst], 0x04 \n\t" \ ++ "bnez %[x], 2b \n\t" \ ++ \ ++ "daddi %[y], %[y], -0x01 \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], " #tmp_step " \n\t" \ ++ PTR_ADDIU "%[dst], %[dst], " #dst_step " \n\t" \ ++ PTR_ADDU "%[dst], %[dst], %[stride] \n\t" \ ++ PTR_ADDIU "%[tmp], %[tmp], 0x80 \n\t" \ ++ "bnez %[y], 1b \n\t" \ ++ : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), \ ++ [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), \ ++ [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), \ ++ [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), \ ++ [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), \ ++ [ftmp10]"=&f"(ftmp[10]), [ftmp11]"=&f"(ftmp[11]), \ ++ [ftmp12]"=&f"(ftmp[12]), [ftmp13]"=&f"(ftmp[13]), \ ++ [ftmp14]"=&f"(ftmp[14]), \ ++ [dst]"+&r"(dst), [tmp]"+&r"(tmp), [y]"+&r"(y), [x]"=&r"(x), \ ++ [offset]"+&f"(offset), [rtmp0]"=&r"(rtmp[0]) \ ++ : [filter]"r"(filter), [stride]"r"(dststride), \ ++ [shift]"f"(shift) \ ++ : "memory" \ ++ ); \ ++} ++ ++PUT_HEVC_QPEL_UNI_HV(4, 1, -4, -4, -8); ++PUT_HEVC_QPEL_UNI_HV(8, 2, -8, -8, -16); ++PUT_HEVC_QPEL_UNI_HV(12, 3, -12, -12, -24); ++PUT_HEVC_QPEL_UNI_HV(16, 4, -16, -16, -32); ++PUT_HEVC_QPEL_UNI_HV(24, 6, -24, -24, -48); ++PUT_HEVC_QPEL_UNI_HV(32, 8, -32, -32, -64); ++PUT_HEVC_QPEL_UNI_HV(48, 12, -48, -48, -96); ++PUT_HEVC_QPEL_UNI_HV(64, 16, -64, -64, -128); +diff --git a/libavcodec/mips/hevcdsp_msa.c b/libavcodec/mips/hevcdsp_msa.c +index 81db62b..2c57ec8 100644 +--- a/libavcodec/mips/hevcdsp_msa.c ++++ b/libavcodec/mips/hevcdsp_msa.c +@@ -44,7 +44,7 @@ static void hevc_copy_4w_msa(uint8_t *src, int32_t src_stride, + src0 = (v16i8) __msa_ilvr_w((v4i32) src1, (v4i32) src0); + in0 = (v8i16) __msa_ilvr_b(zero, src0); + in0 <<= 6; +- ST8x2_UB(in0, dst, 2 * dst_stride); ++ ST_D2(in0, 0, 1, dst, dst_stride); + } else if (4 == height) { + v16i8 src0, src1, src2, src3; + v8i16 in0, in1; +@@ -55,7 +55,7 @@ static void hevc_copy_4w_msa(uint8_t *src, int32_t src_stride, + ILVR_B2_SH(zero, src0, zero, src1, in0, in1); + in0 <<= 6; + in1 <<= 6; +- ST8x4_UB(in0, in1, dst, 2 * dst_stride); ++ ST_D4(in0, in1, 0, 1, 0, 1, dst, dst_stride); + } else if (0 == height % 8) { + v16i8 src0, src1, src2, src3, src4, src5, src6, src7; + v8i16 in0, in1, in2, in3; +@@ -71,7 +71,7 @@ static void hevc_copy_4w_msa(uint8_t *src, int32_t src_stride, + ILVR_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3, + in0, in1, in2, in3); + SLLI_4V(in0, in1, in2, in3, 6); +- ST8x8_UB(in0, in1, in2, in3, dst, 2 * dst_stride); ++ ST_D8(in0, in1, in2, in3, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride); + dst += (8 * dst_stride); + } + } +@@ -183,7 +183,7 @@ static void hevc_copy_12w_msa(uint8_t *src, int32_t src_stride, + in0 <<= 6; + in1 <<= 6; + ST_SH4(in0_r, in1_r, in2_r, in3_r, dst, dst_stride); +- ST8x4_UB(in0, in1, dst + 8, 2 * dst_stride); ++ ST_D4(in0, in1, 0, 1, 0, 1, dst + 8, dst_stride); + dst += (4 * dst_stride); + + ILVR_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7, +@@ -194,7 +194,7 @@ static void hevc_copy_12w_msa(uint8_t *src, int32_t src_stride, + in0 <<= 6; + in1 <<= 6; + ST_SH4(in0_r, in1_r, in2_r, in3_r, dst, dst_stride); +- ST8x4_UB(in0, in1, dst + 8, 2 * dst_stride); ++ ST_D4(in0, in1, 0, 1, 0, 1, dst + 8, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -495,7 +495,7 @@ static void hevc_hz_8t_4w_msa(uint8_t *src, int32_t src_stride, + DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3, + dst3, dst3, dst3, dst3); + +- ST8x8_UB(dst0, dst1, dst2, dst3, dst, 2 * dst_stride); ++ ST_D8(dst0, dst1, dst2, dst3, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride); + dst += (8 * dst_stride); + } + } +@@ -1047,7 +1047,7 @@ static void hevc_vt_8t_4w_msa(uint8_t *src, int32_t src_stride, + DPADD_SB4_SH(src8776, src10998, src12111110, src14131312, + filt0, filt1, filt2, filt3, dst76, dst76, dst76, dst76); + +- ST8x8_UB(dst10, dst32, dst54, dst76, dst, 2 * dst_stride); ++ ST_D8(dst10, dst32, dst54, dst76, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride); + dst += (8 * dst_stride); + + src2110 = src10998; +@@ -1191,7 +1191,7 @@ static void hevc_vt_8t_12w_msa(uint8_t *src, int32_t src_stride, + dst1_l, dst1_l, dst1_l, dst1_l); + + ST_SH4(dst0_r, dst1_r, dst2_r, dst3_r, dst, dst_stride); +- ST8x4_UB(dst0_l, dst1_l, dst + 8, 2 * dst_stride); ++ ST_D4(dst0_l, dst1_l, 0, 1, 0, 1, dst + 8, dst_stride); + dst += (4 * dst_stride); + + src10_r = src54_r; +@@ -1363,7 +1363,6 @@ static void hevc_hv_8t_4w_msa(uint8_t *src, int32_t src_stride, + int32_t height) + { + uint32_t loop_cnt; +- int32_t dst_stride_in_bytes = 2 * dst_stride; + v16i8 src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; + v8i16 filt0, filt1, filt2, filt3; + v8i16 filt_h0, filt_h1, filt_h2, filt_h3; +@@ -1452,7 +1451,7 @@ static void hevc_hv_8t_4w_msa(uint8_t *src, int32_t src_stride, + filt_h0, filt_h1, filt_h2, filt_h3); + SRA_4V(dst0_r, dst1_r, dst2_r, dst3_r, 6); + PCKEV_H2_SW(dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst2_r); +- ST8x4_UB(dst0_r, dst2_r, dst, dst_stride_in_bytes); ++ ST_D4(dst0_r, dst2_r, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + + dst10_r = dst54_r; +@@ -1607,7 +1606,6 @@ static void hevc_hv_8t_12w_msa(uint8_t *src, int32_t src_stride, + int32_t height) + { + uint32_t loop_cnt; +- int32_t dst_stride_in_bytes = 2 * dst_stride; + uint8_t *src_tmp; + int16_t *dst_tmp; + v16i8 src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; +@@ -1784,7 +1782,7 @@ static void hevc_hv_8t_12w_msa(uint8_t *src, int32_t src_stride, + filt_h1, filt_h2, filt_h3); + SRA_4V(dst0_r, dst1_r, dst2_r, dst3_r, 6); + PCKEV_H2_SW(dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst2_r); +- ST8x4_UB(dst0_r, dst2_r, dst, dst_stride_in_bytes); ++ ST_D4(dst0_r, dst2_r, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + + dst10_r = dst54_r; +@@ -1872,7 +1870,7 @@ static void hevc_hz_4t_4x2_msa(uint8_t *src, + dst0 = const_vec; + DPADD_SB2_SH(vec0, vec1, filt0, filt1, dst0, dst0); + +- ST8x2_UB(dst0, dst, 2 * dst_stride); ++ ST_D2(dst0, 0, 1, dst, dst_stride); + } + + static void hevc_hz_4t_4x4_msa(uint8_t *src, +@@ -1909,7 +1907,7 @@ static void hevc_hz_4t_4x4_msa(uint8_t *src, + dst1 = const_vec; + DPADD_SB2_SH(vec0, vec1, filt0, filt1, dst1, dst1); + +- ST8x4_UB(dst0, dst1, dst, 2 * dst_stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, dst_stride); + } + + static void hevc_hz_4t_4x8multiple_msa(uint8_t *src, +@@ -1956,7 +1954,7 @@ static void hevc_hz_4t_4x8multiple_msa(uint8_t *src, + dst3 = const_vec; + DPADD_SB2_SH(vec0, vec1, filt0, filt1, dst3, dst3); + +- ST8x8_UB(dst0, dst1, dst2, dst3, dst, 2 * dst_stride); ++ ST_D8(dst0, dst1, dst2, dst3, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride); + dst += (8 * dst_stride); + } + } +@@ -2218,7 +2216,7 @@ static void hevc_hz_4t_12w_msa(uint8_t *src, + DPADD_SB2_SH(vec0, vec1, filt0, filt1, dst5, dst5); + + ST_SH4(dst0, dst1, dst2, dst3, dst, dst_stride); +- ST8x4_UB(dst4, dst5, dst + 8, 2 * dst_stride); ++ ST_D4(dst4, dst5, 0, 1, 0, 1, dst + 8, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -2478,7 +2476,7 @@ static void hevc_vt_4t_4x2_msa(uint8_t *src, + dst10 = const_vec; + DPADD_SB2_SH(src2110, src4332, filt0, filt1, dst10, dst10); + +- ST8x2_UB(dst10, dst, 2 * dst_stride); ++ ST_D2(dst10, 0, 1, dst, dst_stride); + } + + static void hevc_vt_4t_4x4_msa(uint8_t *src, +@@ -2515,7 +2513,7 @@ static void hevc_vt_4t_4x4_msa(uint8_t *src, + dst32 = const_vec; + DPADD_SB2_SH(src4332, src6554, filt0, filt1, dst32, dst32); + +- ST8x4_UB(dst10, dst32, dst, 2 * dst_stride); ++ ST_D4(dst10, dst32, 0, 1, 0, 1, dst, dst_stride); + } + + static void hevc_vt_4t_4x8_msa(uint8_t *src, +@@ -2564,8 +2562,7 @@ static void hevc_vt_4t_4x8_msa(uint8_t *src, + DPADD_SB2_SH(src4332, src6554, filt0, filt1, dst32, dst32); + DPADD_SB2_SH(src6554, src8776, filt0, filt1, dst54, dst54); + DPADD_SB2_SH(src8776, src10998, filt0, filt1, dst76, dst76); +- ST8x8_UB(dst10, dst32, dst54, dst76, dst, 2 * dst_stride); +- dst += (8 * dst_stride); ++ ST_D8(dst10, dst32, dst54, dst76, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride); + } + + static void hevc_vt_4t_4x16_msa(uint8_t *src, int32_t src_stride, +@@ -2610,7 +2607,7 @@ static void hevc_vt_4t_4x16_msa(uint8_t *src, int32_t src_stride, + DPADD_SB2_SH(src4332, src6554, filt0, filt1, dst32, dst32); + DPADD_SB2_SH(src6554, src8776, filt0, filt1, dst54, dst54); + DPADD_SB2_SH(src8776, src10998, filt0, filt1, dst76, dst76); +- ST8x8_UB(dst10, dst32, dst54, dst76, dst, 2 * dst_stride); ++ ST_D8(dst10, dst32, dst54, dst76, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride); + dst += (8 * dst_stride); + + src2 = src10; +@@ -2635,8 +2632,7 @@ static void hevc_vt_4t_4x16_msa(uint8_t *src, int32_t src_stride, + DPADD_SB2_SH(src4332, src6554, filt0, filt1, dst32, dst32); + DPADD_SB2_SH(src6554, src8776, filt0, filt1, dst54, dst54); + DPADD_SB2_SH(src8776, src10998, filt0, filt1, dst76, dst76); +- ST8x8_UB(dst10, dst32, dst54, dst76, dst, 2 * dst_stride); +- dst += (8 * dst_stride); ++ ST_D8(dst10, dst32, dst54, dst76, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride); + } + + static void hevc_vt_4t_4w_msa(uint8_t *src, +@@ -2955,7 +2951,7 @@ static void hevc_vt_4t_12w_msa(uint8_t *src, + DPADD_SB2_SH(src4332, src6554, filt0, filt1, dst1_l, dst1_l); + + ST_SH4(dst0_r, dst1_r, dst2_r, dst3_r, dst, dst_stride); +- ST8x4_UB(dst0_l, dst1_l, dst + 8, (2 * dst_stride)); ++ ST_D4(dst0_l, dst1_l, 0, 1, 0, 1, dst + 8, dst_stride); + dst += (4 * dst_stride); + + src2 = src6; +@@ -3243,7 +3239,6 @@ static void hevc_hv_4t_4x2_msa(uint8_t *src, + const int8_t *filter_x, + const int8_t *filter_y) + { +- int32_t dst_stride_in_bytes = 2 * dst_stride; + v16i8 src0, src1, src2, src3, src4; + v8i16 filt0, filt1; + v8i16 filt_h0, filt_h1; +@@ -3288,7 +3283,7 @@ static void hevc_hv_4t_4x2_msa(uint8_t *src, + dst0 >>= 6; + dst1 >>= 6; + dst0 = (v4i32) __msa_pckev_h((v8i16) dst1, (v8i16) dst0); +- ST8x2_UB(dst0, dst, dst_stride_in_bytes); ++ ST_D2(dst0, 0, 1, dst, dst_stride); + } + + static void hevc_hv_4t_4x4_msa(uint8_t *src, +@@ -3298,7 +3293,6 @@ static void hevc_hv_4t_4x4_msa(uint8_t *src, + const int8_t *filter_x, + const int8_t *filter_y) + { +- int32_t dst_stride_in_bytes = 2 * dst_stride; + v16i8 src0, src1, src2, src3, src4, src5, src6; + v8i16 filt0, filt1; + v8i16 filt_h0, filt_h1; +@@ -3351,7 +3345,7 @@ static void hevc_hv_4t_4x4_msa(uint8_t *src, + dst3 = HEVC_FILT_4TAP(dst43, dst65, filt_h0, filt_h1); + SRA_4V(dst0, dst1, dst2, dst3, 6); + PCKEV_H2_SW(dst1, dst0, dst3, dst2, dst0, dst2); +- ST8x4_UB(dst0, dst2, dst, dst_stride_in_bytes); ++ ST_D4(dst0, dst2, 0, 1, 0, 1, dst, dst_stride); + } + + +@@ -3442,7 +3436,7 @@ static void hevc_hv_4t_4multx8mult_msa(uint8_t *src, + SRA_4V(dst4, dst5, dst6, dst7, 6); + PCKEV_H4_SW(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, + dst0, dst1, dst2, dst3); +- ST8x8_UB(dst0, dst1, dst2, dst3, dst, 2 * dst_stride); ++ ST_D8(dst0, dst1, dst2, dst3, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride); + dst += (8 * dst_stride); + + dst10_r = dst98_r; +@@ -3479,7 +3473,6 @@ static void hevc_hv_4t_6w_msa(uint8_t *src, + const int8_t *filter_y, + int32_t height) + { +- int32_t dst_stride_in_bytes = 2 * dst_stride; + v16i8 src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; + v8i16 filt0, filt1; + v8i16 filt_h0, filt_h1; +@@ -3590,11 +3583,11 @@ static void hevc_hv_4t_6w_msa(uint8_t *src, + PCKEV_H2_SH(dst1_r, dst0_r, dst3_r, dst2_r, tmp0, tmp1); + PCKEV_H2_SH(dst5_r, dst4_r, dst7_r, dst6_r, tmp2, tmp3); + PCKEV_H2_SH(dst1_l, dst0_l, dst3_l, dst2_l, tmp4, tmp5); +- ST8x4_UB(tmp0, tmp1, dst, dst_stride_in_bytes); +- ST4x4_UB(tmp4, tmp4, 0, 1, 2, 3, dst + 4, dst_stride_in_bytes); ++ ST_D4(tmp0, tmp1, 0, 1, 0, 1, dst, dst_stride); ++ ST_W4(tmp4, 0, 1, 2, 3, dst + 4, dst_stride); + dst += 4 * dst_stride; +- ST8x4_UB(tmp2, tmp3, dst, dst_stride_in_bytes); +- ST4x4_UB(tmp5, tmp5, 0, 1, 2, 3, dst + 4, dst_stride_in_bytes); ++ ST_D4(tmp2, tmp3, 0, 1, 0, 1, dst, dst_stride); ++ ST_W4(tmp5, 0, 1, 2, 3, dst + 4, dst_stride); + } + + static void hevc_hv_4t_8x2_msa(uint8_t *src, +@@ -4164,7 +4157,7 @@ static void hevc_hv_4t_12w_msa(uint8_t *src, + SRA_4V(tmp4, tmp5, tmp6, tmp7, 6); + PCKEV_H4_SW(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, tmp0, tmp1, + tmp2, tmp3); +- ST8x8_UB(tmp0, tmp1, tmp2, tmp3, dst, 2 * dst_stride); ++ ST_D8(tmp0, tmp1, tmp2, tmp3, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride); + dst += (8 * dst_stride); + + dst10_r = dst98_r; +diff --git a/libavcodec/mips/hevcpred_init_mips.c b/libavcodec/mips/hevcpred_init_mips.c +index e987698..f7ecb34 100644 +--- a/libavcodec/mips/hevcpred_init_mips.c ++++ b/libavcodec/mips/hevcpred_init_mips.c +@@ -18,32 +18,28 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/mips/cpu.h" + #include "config.h" + #include "libavutil/attributes.h" + #include "libavcodec/mips/hevcpred_mips.h" + +-#if HAVE_MSA +-static av_cold void hevc_pred_init_msa(HEVCPredContext *c, const int bit_depth) +-{ +- if (8 == bit_depth) { +- c->intra_pred[2] = ff_intra_pred_8_16x16_msa; +- c->intra_pred[3] = ff_intra_pred_8_32x32_msa; +- c->pred_planar[0] = ff_hevc_intra_pred_planar_0_msa; +- c->pred_planar[1] = ff_hevc_intra_pred_planar_1_msa; +- c->pred_planar[2] = ff_hevc_intra_pred_planar_2_msa; +- c->pred_planar[3] = ff_hevc_intra_pred_planar_3_msa; +- c->pred_dc = ff_hevc_intra_pred_dc_msa; +- c->pred_angular[0] = ff_pred_intra_pred_angular_0_msa; +- c->pred_angular[1] = ff_pred_intra_pred_angular_1_msa; +- c->pred_angular[2] = ff_pred_intra_pred_angular_2_msa; +- c->pred_angular[3] = ff_pred_intra_pred_angular_3_msa; +- } +-} +-#endif // #if HAVE_MSA +- + void ff_hevc_pred_init_mips(HEVCPredContext *c, const int bit_depth) + { +-#if HAVE_MSA +- hevc_pred_init_msa(c, bit_depth); +-#endif // #if HAVE_MSA ++ int cpu_flags = av_get_cpu_flags(); ++ ++ if (have_msa(cpu_flags)) { ++ if (bit_depth == 8) { ++ c->intra_pred[2] = ff_intra_pred_8_16x16_msa; ++ c->intra_pred[3] = ff_intra_pred_8_32x32_msa; ++ c->pred_planar[0] = ff_hevc_intra_pred_planar_0_msa; ++ c->pred_planar[1] = ff_hevc_intra_pred_planar_1_msa; ++ c->pred_planar[2] = ff_hevc_intra_pred_planar_2_msa; ++ c->pred_planar[3] = ff_hevc_intra_pred_planar_3_msa; ++ c->pred_dc = ff_hevc_intra_pred_dc_msa; ++ c->pred_angular[0] = ff_pred_intra_pred_angular_0_msa; ++ c->pred_angular[1] = ff_pred_intra_pred_angular_1_msa; ++ c->pred_angular[2] = ff_pred_intra_pred_angular_2_msa; ++ c->pred_angular[3] = ff_pred_intra_pred_angular_3_msa; ++ } ++ } + } +diff --git a/libavcodec/mips/hevcpred_msa.c b/libavcodec/mips/hevcpred_msa.c +index 963c64c..f53276d 100644 +--- a/libavcodec/mips/hevcpred_msa.c ++++ b/libavcodec/mips/hevcpred_msa.c +@@ -83,7 +83,7 @@ static void hevc_intra_pred_vert_4x4_msa(const uint8_t *src_top, + vec2 -= vec0; + vec2 >>= 1; + vec2 += vec1; +- vec2 = CLIP_SH_0_255(vec2); ++ CLIP_SH_0_255(vec2); + + for (col = 0; col < 4; col++) { + dst[stride * col] = (uint8_t) vec2[col]; +@@ -122,7 +122,7 @@ static void hevc_intra_pred_vert_8x8_msa(const uint8_t *src_top, + vec2 -= vec0; + vec2 >>= 1; + vec2 += vec1; +- vec2 = CLIP_SH_0_255(vec2); ++ CLIP_SH_0_255(vec2); + + val0 = vec2[0]; + val1 = vec2[1]; +@@ -214,7 +214,7 @@ static void hevc_intra_pred_horiz_4x4_msa(const uint8_t *src_top, + src0_r -= src_top_val; + src0_r >>= 1; + src0_r += src_left_val; +- src0_r = CLIP_SH_0_255(src0_r); ++ CLIP_SH_0_255(src0_r); + src0 = __msa_pckev_b((v16i8) src0_r, (v16i8) src0_r); + val0 = __msa_copy_s_w((v4i32) src0, 0); + SW(val0, dst); +@@ -254,7 +254,7 @@ static void hevc_intra_pred_horiz_8x8_msa(const uint8_t *src_top, + src0_r -= src_top_val; + src0_r >>= 1; + src0_r += src_left_val; +- src0_r = CLIP_SH_0_255(src0_r); ++ CLIP_SH_0_255(src0_r); + src0 = __msa_pckev_b((v16i8) src0_r, (v16i8) src0_r); + val0 = __msa_copy_s_d((v2i64) src0, 0); + SD(val0, dst); +@@ -589,7 +589,7 @@ static void hevc_intra_pred_plane_4x4_msa(const uint8_t *src_top, + PCKEV_D2_SH(res1, res0, res3, res2, res0, res1); + SRARI_H2_SH(res0, res1, 3); + src_vec0 = __msa_pckev_b((v16i8) res1, (v16i8) res0); +- ST4x4_UB(src_vec0, src_vec0, 0, 1, 2, 3, dst, stride); ++ ST_W4(src_vec0, 0, 1, 2, 3, dst, stride); + } + + static void hevc_intra_pred_plane_8x8_msa(const uint8_t *src_top, +@@ -656,7 +656,8 @@ static void hevc_intra_pred_plane_8x8_msa(const uint8_t *src_top, + PCKEV_B4_SB(res1, res0, res3, res2, res5, res4, res7, res6, + src_vec0, src_vec1, src_vec2, src_vec3); + +- ST8x8_UB(src_vec0, src_vec1, src_vec2, src_vec3, dst, stride); ++ ST_D8(src_vec0, src_vec1, src_vec2, src_vec3, 0, 1, 0, 1, ++ 0, 1, 0, 1, dst, stride); + } + + static void hevc_intra_pred_plane_16x16_msa(const uint8_t *src_top, +@@ -997,7 +998,8 @@ static void hevc_intra_pred_angular_upper_4width_msa(const uint8_t *src_top, + ILVR_D2_SH(fact3, fact1, fact7, fact5, fact1, fact3); + ILVR_B4_SH(zero, top0, zero, top1, zero, top2, zero, top3, + diff0, diff2, diff4, diff6); +- SLDI_B4_0_SH(diff0, diff2, diff4, diff6, diff1, diff3, diff5, diff7, 2); ++ SLDI_B4_SH(zero, diff0, zero, diff2, zero, diff4, zero, diff6, 2, ++ diff1, diff3, diff5, diff7); + ILVR_D2_SH(diff2, diff0, diff6, diff4, diff0, diff2); + ILVR_D2_SH(diff3, diff1, diff7, diff5, diff1, diff3); + MUL2(diff1, fact0, diff3, fact2, diff1, diff3); +@@ -1007,7 +1009,7 @@ static void hevc_intra_pred_angular_upper_4width_msa(const uint8_t *src_top, + + SRARI_H2_SH(diff1, diff3, 5); + dst_val0 = __msa_pckev_b((v16i8) diff3, (v16i8) diff1); +- ST4x4_UB(dst_val0, dst_val0, 0, 1, 2, 3, dst, stride); ++ ST_W4(dst_val0, 0, 1, 2, 3, dst, stride); + } + + static void hevc_intra_pred_angular_upper_8width_msa(const uint8_t *src_top, +@@ -1092,8 +1094,8 @@ static void hevc_intra_pred_angular_upper_8width_msa(const uint8_t *src_top, + UNPCK_UB_SH(top2, diff4, diff5); + UNPCK_UB_SH(top3, diff6, diff7); + +- SLDI_B2_SH(diff1, diff3, diff0, diff2, diff1, diff3, 2); +- SLDI_B2_SH(diff5, diff7, diff4, diff6, diff5, diff7, 2); ++ SLDI_B4_SH(diff1, diff0, diff3, diff2, diff5, diff4, diff7, diff6, 2, ++ diff1, diff3, diff5, diff7); + MUL4(diff1, fact0, diff3, fact2, diff5, fact4, diff7, fact6, + diff1, diff3, diff5, diff7); + +@@ -1104,7 +1106,7 @@ static void hevc_intra_pred_angular_upper_8width_msa(const uint8_t *src_top, + + SRARI_H4_SH(diff1, diff3, diff5, diff7, 5); + PCKEV_B2_UB(diff3, diff1, diff7, diff5, dst_val0, dst_val1); +- ST8x4_UB(dst_val0, dst_val1, dst, stride); ++ ST_D4(dst_val0, dst_val1, 0, 1, 0, 1, dst, stride); + dst += (4 * stride); + } + } +@@ -1185,8 +1187,8 @@ static void hevc_intra_pred_angular_upper_16width_msa(const uint8_t *src_top, + fact6 = __msa_fill_h(fact_val3); + fact7 = __msa_fill_h(32 - fact_val3); + +- SLDI_B2_UB(top1, top3, top0, top2, top1, top3, 1); +- SLDI_B2_UB(top5, top7, top4, top6, top5, top7, 1); ++ SLDI_B4_UB(top1, top0, top3, top2, top5, top4, top7, top6, 1, ++ top1, top3, top5, top7); + UNPCK_UB_SH(top0, diff0, diff1); + UNPCK_UB_SH(top1, diff2, diff3); + UNPCK_UB_SH(top2, diff4, diff5); +@@ -1296,8 +1298,8 @@ static void hevc_intra_pred_angular_upper_32width_msa(const uint8_t *src_top, + top2 = top1; + top6 = top5; + +- SLDI_B2_UB(top1, top3, top0, top2, top1, top3, 1); +- SLDI_B2_UB(top5, top7, top4, top6, top5, top7, 1); ++ SLDI_B4_UB(top1, top0, top3, top2, top5, top4, top7, top6, 1, ++ top1, top3, top5, top7); + UNPCK_UB_SH(top0, diff0, diff1); + UNPCK_UB_SH(top1, diff2, diff3); + UNPCK_UB_SH(top2, diff4, diff5); +@@ -1406,7 +1408,8 @@ static void hevc_intra_pred_angular_lower_4width_msa(const uint8_t *src_top, + ILVR_D2_SH(fact3, fact1, fact7, fact5, fact1, fact3); + ILVR_B4_SH(zero, top0, zero, top1, zero, top2, zero, top3, + diff0, diff2, diff4, diff6); +- SLDI_B4_0_SH(diff0, diff2, diff4, diff6, diff1, diff3, diff5, diff7, 2); ++ SLDI_B4_SH(zero, diff0, zero, diff2, zero, diff4, zero, diff6, 2, ++ diff1, diff3, diff5, diff7); + ILVR_D2_SH(diff2, diff0, diff6, diff4, diff0, diff2); + ILVR_D2_SH(diff3, diff1, diff7, diff5, diff1, diff3); + MUL2(diff1, fact0, diff3, fact2, diff1, diff3); +@@ -1425,9 +1428,8 @@ static void hevc_intra_pred_angular_lower_4width_msa(const uint8_t *src_top, + dst_val0 = __msa_pckev_b((v16i8) diff2, (v16i8) diff2); + dst_val1 = __msa_pckod_b((v16i8) diff2, (v16i8) diff2); + +- ST4x2_UB(dst_val0, dst, stride); +- dst += (2 * stride); +- ST4x2_UB(dst_val1, dst, stride); ++ ST_W2(dst_val0, 0, 1, dst, stride); ++ ST_W2(dst_val1, 0, 1, dst + 2 * stride, stride); + } + + static void hevc_intra_pred_angular_lower_8width_msa(const uint8_t *src_top, +@@ -1511,8 +1513,8 @@ static void hevc_intra_pred_angular_lower_8width_msa(const uint8_t *src_top, + UNPCK_UB_SH(top1, diff2, diff3); + UNPCK_UB_SH(top2, diff4, diff5); + UNPCK_UB_SH(top3, diff6, diff7); +- SLDI_B2_SH(diff1, diff3, diff0, diff2, diff1, diff3, 2); +- SLDI_B2_SH(diff5, diff7, diff4, diff6, diff5, diff7, 2); ++ SLDI_B4_SH(diff1, diff0, diff3, diff2, diff5, diff4, diff7, diff6, 2, ++ diff1, diff3, diff5, diff7); + MUL4(diff1, fact0, diff3, fact2, diff5, fact4, diff7, fact6, + diff1, diff3, diff5, diff7); + +@@ -1526,7 +1528,7 @@ static void hevc_intra_pred_angular_lower_8width_msa(const uint8_t *src_top, + dst_val0, dst_val1, dst_val2, dst_val3); + ILVR_B2_SH(dst_val1, dst_val0, dst_val3, dst_val2, diff0, diff1); + ILVRL_H2_SH(diff1, diff0, diff3, diff4); +- ST4x8_UB(diff3, diff4, dst_org, stride); ++ ST_W8(diff3, diff4, 0, 1, 2, 3, 0, 1, 2, 3, dst_org, stride); + dst += 4; + } + } +@@ -1606,8 +1608,8 @@ static void hevc_intra_pred_angular_lower_16width_msa(const uint8_t *src_top, + fact6 = __msa_fill_h(fact_val3); + fact7 = __msa_fill_h(32 - fact_val3); + +- SLDI_B2_SB(top1, top3, top0, top2, top1, top3, 1); +- SLDI_B2_SB(top5, top7, top4, top6, top5, top7, 1); ++ SLDI_B4_SB(top1, top0, top3, top2, top5, top4, top7, top6, 1, ++ top1, top3, top5, top7); + + UNPCK_UB_SH(top0, diff0, diff1); + UNPCK_UB_SH(top1, diff2, diff3); +@@ -1640,9 +1642,9 @@ static void hevc_intra_pred_angular_lower_16width_msa(const uint8_t *src_top, + ILVL_B2_SH(dst_val1, dst_val0, dst_val3, dst_val2, diff2, diff3); + ILVRL_H2_SH(diff1, diff0, diff4, diff5); + ILVRL_H2_SH(diff3, diff2, diff6, diff7); +- ST4x8_UB(diff4, diff5, dst_org, stride); ++ ST_W8(diff4, diff5, 0, 1, 2, 3, 0, 1, 2, 3, dst_org, stride); + dst_org += (8 * stride); +- ST4x8_UB(diff6, diff7, dst_org, stride); ++ ST_W8(diff6, diff7, 0, 1, 2, 3, 0, 1, 2, 3, dst_org, stride); + dst += 4; + } + } +@@ -1713,8 +1715,8 @@ static void hevc_intra_pred_angular_lower_32width_msa(const uint8_t *src_top, + top2 = top1; + top6 = top5; + +- SLDI_B2_SB(top1, top3, top0, top2, top1, top3, 1); +- SLDI_B2_SB(top5, top7, top4, top6, top5, top7, 1); ++ SLDI_B4_SB(top1, top0, top3, top2, top5, top4, top7, top6, 1, ++ top1, top3, top5, top7); + + UNPCK_UB_SH(top0, diff0, diff1); + UNPCK_UB_SH(top1, diff2, diff3); +@@ -1746,23 +1748,14 @@ static void hevc_intra_pred_angular_lower_32width_msa(const uint8_t *src_top, + ILVRL_B2_SH(dst_val2, dst_val0, diff0, diff1); + ILVRL_B2_SH(dst_val3, dst_val1, diff2, diff3); + +- ST2x4_UB(diff0, 0, dst_org, stride); +- dst_org += (4 * stride); +- ST2x4_UB(diff0, 4, dst_org, stride); +- dst_org += (4 * stride); +- ST2x4_UB(diff1, 0, dst_org, stride); +- dst_org += (4 * stride); +- ST2x4_UB(diff1, 4, dst_org, stride); +- dst_org += (4 * stride); +- +- ST2x4_UB(diff2, 0, dst_org, stride); +- dst_org += (4 * stride); +- ST2x4_UB(diff2, 4, dst_org, stride); +- dst_org += (4 * stride); +- ST2x4_UB(diff3, 0, dst_org, stride); +- dst_org += (4 * stride); +- ST2x4_UB(diff3, 4, dst_org, stride); +- dst_org += (4 * stride); ++ ST_H8(diff0, 0, 1, 2, 3, 4, 5, 6, 7, dst_org, stride) ++ dst_org += (8 * stride); ++ ST_H8(diff1, 0, 1, 2, 3, 4, 5, 6, 7, dst_org, stride) ++ dst_org += (8 * stride); ++ ST_H8(diff2, 0, 1, 2, 3, 4, 5, 6, 7, dst_org, stride) ++ dst_org += (8 * stride); ++ ST_H8(diff3, 0, 1, 2, 3, 4, 5, 6, 7, dst_org, stride) ++ dst_org += (8 * stride); + + dst += 2; + } +diff --git a/libavcodec/mips/hpeldsp_init_mips.c b/libavcodec/mips/hpeldsp_init_mips.c +index 363a045..77cbe99 100644 +--- a/libavcodec/mips/hpeldsp_init_mips.c ++++ b/libavcodec/mips/hpeldsp_init_mips.c +@@ -19,104 +19,94 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/mips/cpu.h" + #include "../hpeldsp.h" + #include "libavcodec/mips/hpeldsp_mips.h" + +-#if HAVE_MSA +-static void ff_hpeldsp_init_msa(HpelDSPContext *c, int flags) +-{ +- c->put_pixels_tab[0][0] = ff_put_pixels16_msa; +- c->put_pixels_tab[0][1] = ff_put_pixels16_x2_msa; +- c->put_pixels_tab[0][2] = ff_put_pixels16_y2_msa; +- c->put_pixels_tab[0][3] = ff_put_pixels16_xy2_msa; +- +- c->put_pixels_tab[1][0] = ff_put_pixels8_msa; +- c->put_pixels_tab[1][1] = ff_put_pixels8_x2_msa; +- c->put_pixels_tab[1][2] = ff_put_pixels8_y2_msa; +- c->put_pixels_tab[1][3] = ff_put_pixels8_xy2_msa; +- +- c->put_pixels_tab[2][1] = ff_put_pixels4_x2_msa; +- c->put_pixels_tab[2][2] = ff_put_pixels4_y2_msa; +- c->put_pixels_tab[2][3] = ff_put_pixels4_xy2_msa; +- +- c->put_no_rnd_pixels_tab[0][0] = ff_put_pixels16_msa; +- c->put_no_rnd_pixels_tab[0][1] = ff_put_no_rnd_pixels16_x2_msa; +- c->put_no_rnd_pixels_tab[0][2] = ff_put_no_rnd_pixels16_y2_msa; +- c->put_no_rnd_pixels_tab[0][3] = ff_put_no_rnd_pixels16_xy2_msa; +- +- c->put_no_rnd_pixels_tab[1][0] = ff_put_pixels8_msa; +- c->put_no_rnd_pixels_tab[1][1] = ff_put_no_rnd_pixels8_x2_msa; +- c->put_no_rnd_pixels_tab[1][2] = ff_put_no_rnd_pixels8_y2_msa; +- c->put_no_rnd_pixels_tab[1][3] = ff_put_no_rnd_pixels8_xy2_msa; +- +- c->avg_pixels_tab[0][0] = ff_avg_pixels16_msa; +- c->avg_pixels_tab[0][1] = ff_avg_pixels16_x2_msa; +- c->avg_pixels_tab[0][2] = ff_avg_pixels16_y2_msa; +- c->avg_pixels_tab[0][3] = ff_avg_pixels16_xy2_msa; +- +- c->avg_pixels_tab[1][0] = ff_avg_pixels8_msa; +- c->avg_pixels_tab[1][1] = ff_avg_pixels8_x2_msa; +- c->avg_pixels_tab[1][2] = ff_avg_pixels8_y2_msa; +- c->avg_pixels_tab[1][3] = ff_avg_pixels8_xy2_msa; +- +- c->avg_pixels_tab[2][0] = ff_avg_pixels4_msa; +- c->avg_pixels_tab[2][1] = ff_avg_pixels4_x2_msa; +- c->avg_pixels_tab[2][2] = ff_avg_pixels4_y2_msa; +- c->avg_pixels_tab[2][3] = ff_avg_pixels4_xy2_msa; +-} +-#endif // #if HAVE_MSA +- +-#if HAVE_MMI +-static void ff_hpeldsp_init_mmi(HpelDSPContext *c, int flags) +-{ +- c->put_pixels_tab[0][0] = ff_put_pixels16_8_mmi; +- c->put_pixels_tab[0][1] = ff_put_pixels16_x2_8_mmi; +- c->put_pixels_tab[0][2] = ff_put_pixels16_y2_8_mmi; +- c->put_pixels_tab[0][3] = ff_put_pixels16_xy2_8_mmi; +- +- c->put_pixels_tab[1][0] = ff_put_pixels8_8_mmi; +- c->put_pixels_tab[1][1] = ff_put_pixels8_x2_8_mmi; +- c->put_pixels_tab[1][2] = ff_put_pixels8_y2_8_mmi; +- c->put_pixels_tab[1][3] = ff_put_pixels8_xy2_8_mmi; +- +- c->put_pixels_tab[2][0] = ff_put_pixels4_8_mmi; +- c->put_pixels_tab[2][1] = ff_put_pixels4_x2_8_mmi; +- c->put_pixels_tab[2][2] = ff_put_pixels4_y2_8_mmi; +- c->put_pixels_tab[2][3] = ff_put_pixels4_xy2_8_mmi; +- +- c->put_no_rnd_pixels_tab[0][0] = ff_put_pixels16_8_mmi; +- c->put_no_rnd_pixels_tab[0][1] = ff_put_no_rnd_pixels16_x2_8_mmi; +- c->put_no_rnd_pixels_tab[0][2] = ff_put_no_rnd_pixels16_y2_8_mmi; +- c->put_no_rnd_pixels_tab[0][3] = ff_put_no_rnd_pixels16_xy2_8_mmi; +- +- c->put_no_rnd_pixels_tab[1][0] = ff_put_pixels8_8_mmi; +- c->put_no_rnd_pixels_tab[1][1] = ff_put_no_rnd_pixels8_x2_8_mmi; +- c->put_no_rnd_pixels_tab[1][2] = ff_put_no_rnd_pixels8_y2_8_mmi; +- c->put_no_rnd_pixels_tab[1][3] = ff_put_no_rnd_pixels8_xy2_8_mmi; +- +- c->avg_pixels_tab[0][0] = ff_avg_pixels16_8_mmi; +- c->avg_pixels_tab[0][1] = ff_avg_pixels16_x2_8_mmi; +- c->avg_pixels_tab[0][2] = ff_avg_pixels16_y2_8_mmi; +- c->avg_pixels_tab[0][3] = ff_avg_pixels16_xy2_8_mmi; +- +- c->avg_pixels_tab[1][0] = ff_avg_pixels8_8_mmi; +- c->avg_pixels_tab[1][1] = ff_avg_pixels8_x2_8_mmi; +- c->avg_pixels_tab[1][2] = ff_avg_pixels8_y2_8_mmi; +- c->avg_pixels_tab[1][3] = ff_avg_pixels8_xy2_8_mmi; +- +- c->avg_pixels_tab[2][0] = ff_avg_pixels4_8_mmi; +- c->avg_pixels_tab[2][1] = ff_avg_pixels4_x2_8_mmi; +- c->avg_pixels_tab[2][2] = ff_avg_pixels4_y2_8_mmi; +- c->avg_pixels_tab[2][3] = ff_avg_pixels4_xy2_8_mmi; +-} +-#endif // #if HAVE_MMI +- + void ff_hpeldsp_init_mips(HpelDSPContext *c, int flags) + { +-#if HAVE_MSA +- ff_hpeldsp_init_msa(c, flags); +-#endif // #if HAVE_MSA +-#if HAVE_MMI +- ff_hpeldsp_init_mmi(c, flags); +-#endif // #if HAVE_MMI ++ int cpu_flags = av_get_cpu_flags(); ++ ++ if (have_mmi(cpu_flags)) { ++ c->put_pixels_tab[0][0] = ff_put_pixels16_8_mmi; ++ c->put_pixels_tab[0][1] = ff_put_pixels16_x2_8_mmi; ++ c->put_pixels_tab[0][2] = ff_put_pixels16_y2_8_mmi; ++ c->put_pixels_tab[0][3] = ff_put_pixels16_xy2_8_mmi; ++ ++ c->put_pixels_tab[1][0] = ff_put_pixels8_8_mmi; ++ c->put_pixels_tab[1][1] = ff_put_pixels8_x2_8_mmi; ++ c->put_pixels_tab[1][2] = ff_put_pixels8_y2_8_mmi; ++ c->put_pixels_tab[1][3] = ff_put_pixels8_xy2_8_mmi; ++ ++ c->put_pixels_tab[2][0] = ff_put_pixels4_8_mmi; ++ c->put_pixels_tab[2][1] = ff_put_pixels4_x2_8_mmi; ++ c->put_pixels_tab[2][2] = ff_put_pixels4_y2_8_mmi; ++ c->put_pixels_tab[2][3] = ff_put_pixels4_xy2_8_mmi; ++ ++ c->put_no_rnd_pixels_tab[0][0] = ff_put_pixels16_8_mmi; ++ c->put_no_rnd_pixels_tab[0][1] = ff_put_no_rnd_pixels16_x2_8_mmi; ++ c->put_no_rnd_pixels_tab[0][2] = ff_put_no_rnd_pixels16_y2_8_mmi; ++ c->put_no_rnd_pixels_tab[0][3] = ff_put_no_rnd_pixels16_xy2_8_mmi; ++ ++ c->put_no_rnd_pixels_tab[1][0] = ff_put_pixels8_8_mmi; ++ c->put_no_rnd_pixels_tab[1][1] = ff_put_no_rnd_pixels8_x2_8_mmi; ++ c->put_no_rnd_pixels_tab[1][2] = ff_put_no_rnd_pixels8_y2_8_mmi; ++ c->put_no_rnd_pixels_tab[1][3] = ff_put_no_rnd_pixels8_xy2_8_mmi; ++ ++ c->avg_pixels_tab[0][0] = ff_avg_pixels16_8_mmi; ++ c->avg_pixels_tab[0][1] = ff_avg_pixels16_x2_8_mmi; ++ c->avg_pixels_tab[0][2] = ff_avg_pixels16_y2_8_mmi; ++ c->avg_pixels_tab[0][3] = ff_avg_pixels16_xy2_8_mmi; ++ ++ c->avg_pixels_tab[1][0] = ff_avg_pixels8_8_mmi; ++ c->avg_pixels_tab[1][1] = ff_avg_pixels8_x2_8_mmi; ++ c->avg_pixels_tab[1][2] = ff_avg_pixels8_y2_8_mmi; ++ c->avg_pixels_tab[1][3] = ff_avg_pixels8_xy2_8_mmi; ++ ++ c->avg_pixels_tab[2][0] = ff_avg_pixels4_8_mmi; ++ c->avg_pixels_tab[2][1] = ff_avg_pixels4_x2_8_mmi; ++ c->avg_pixels_tab[2][2] = ff_avg_pixels4_y2_8_mmi; ++ c->avg_pixels_tab[2][3] = ff_avg_pixels4_xy2_8_mmi; ++ } ++ ++ if (have_msa(cpu_flags)) { ++ c->put_pixels_tab[0][0] = ff_put_pixels16_msa; ++ c->put_pixels_tab[0][1] = ff_put_pixels16_x2_msa; ++ c->put_pixels_tab[0][2] = ff_put_pixels16_y2_msa; ++ c->put_pixels_tab[0][3] = ff_put_pixels16_xy2_msa; ++ ++ c->put_pixels_tab[1][0] = ff_put_pixels8_msa; ++ c->put_pixels_tab[1][1] = ff_put_pixels8_x2_msa; ++ c->put_pixels_tab[1][2] = ff_put_pixels8_y2_msa; ++ c->put_pixels_tab[1][3] = ff_put_pixels8_xy2_msa; ++ ++ c->put_pixels_tab[2][1] = ff_put_pixels4_x2_msa; ++ c->put_pixels_tab[2][2] = ff_put_pixels4_y2_msa; ++ c->put_pixels_tab[2][3] = ff_put_pixels4_xy2_msa; ++ ++ c->put_no_rnd_pixels_tab[0][0] = ff_put_pixels16_msa; ++ c->put_no_rnd_pixels_tab[0][1] = ff_put_no_rnd_pixels16_x2_msa; ++ c->put_no_rnd_pixels_tab[0][2] = ff_put_no_rnd_pixels16_y2_msa; ++ c->put_no_rnd_pixels_tab[0][3] = ff_put_no_rnd_pixels16_xy2_msa; ++ ++ c->put_no_rnd_pixels_tab[1][0] = ff_put_pixels8_msa; ++ c->put_no_rnd_pixels_tab[1][1] = ff_put_no_rnd_pixels8_x2_msa; ++ c->put_no_rnd_pixels_tab[1][2] = ff_put_no_rnd_pixels8_y2_msa; ++ c->put_no_rnd_pixels_tab[1][3] = ff_put_no_rnd_pixels8_xy2_msa; ++ ++ c->avg_pixels_tab[0][0] = ff_avg_pixels16_msa; ++ c->avg_pixels_tab[0][1] = ff_avg_pixels16_x2_msa; ++ c->avg_pixels_tab[0][2] = ff_avg_pixels16_y2_msa; ++ c->avg_pixels_tab[0][3] = ff_avg_pixels16_xy2_msa; ++ ++ c->avg_pixels_tab[1][0] = ff_avg_pixels8_msa; ++ c->avg_pixels_tab[1][1] = ff_avg_pixels8_x2_msa; ++ c->avg_pixels_tab[1][2] = ff_avg_pixels8_y2_msa; ++ c->avg_pixels_tab[1][3] = ff_avg_pixels8_xy2_msa; ++ ++ c->avg_pixels_tab[2][0] = ff_avg_pixels4_msa; ++ c->avg_pixels_tab[2][1] = ff_avg_pixels4_x2_msa; ++ c->avg_pixels_tab[2][2] = ff_avg_pixels4_y2_msa; ++ c->avg_pixels_tab[2][3] = ff_avg_pixels4_xy2_msa; ++ } + } +diff --git a/libavcodec/mips/hpeldsp_msa.c b/libavcodec/mips/hpeldsp_msa.c +index 40a0dca..2bbe477 100644 +--- a/libavcodec/mips/hpeldsp_msa.c ++++ b/libavcodec/mips/hpeldsp_msa.c +@@ -49,7 +49,7 @@ + PCKEV_B2_UB(in2, in1, in4, in3, tmp0_m, tmp1_m); \ + PCKEV_D2_UB(dst1, dst0, dst3, dst2, tmp2_m, tmp3_m); \ + AVER_UB2_UB(tmp0_m, tmp2_m, tmp1_m, tmp3_m, tmp0_m, tmp1_m); \ +- ST8x4_UB(tmp0_m, tmp1_m, pdst_m, stride); \ ++ ST_D4(tmp0_m, tmp1_m, 0, 1, 0, 1, pdst_m, stride); \ + } + + static void common_hz_bil_4w_msa(const uint8_t *src, int32_t src_stride, +@@ -59,12 +59,13 @@ static void common_hz_bil_4w_msa(const uint8_t *src, int32_t src_stride, + uint8_t loop_cnt; + uint32_t out0, out1; + v16u8 src0, src1, src0_sld1, src1_sld1, res0, res1; ++ v16i8 zeros = { 0 }; + + for (loop_cnt = (height >> 1); loop_cnt--;) { + LD_UB2(src, src_stride, src0, src1); + src += (2 * src_stride); + +- SLDI_B2_0_UB(src0, src1, src0_sld1, src1_sld1, 1); ++ SLDI_B2_UB(zeros, src0, zeros, src1, 1, src0_sld1, src1_sld1); + AVER_UB2_UB(src0_sld1, src0, src1_sld1, src1, res0, res1); + + out0 = __msa_copy_u_w((v4i32) res0, 0); +@@ -82,13 +83,14 @@ static void common_hz_bil_8w_msa(const uint8_t *src, int32_t src_stride, + { + uint8_t loop_cnt; + v16i8 src0, src1, src2, src3, src0_sld1, src1_sld1, src2_sld1, src3_sld1; ++ v16i8 zeros = { 0 }; + + for (loop_cnt = (height >> 2); loop_cnt--;) { + LD_SB4(src, src_stride, src0, src1, src2, src3); + src += (4 * src_stride); + +- SLDI_B4_0_SB(src0, src1, src2, src3, +- src0_sld1, src1_sld1, src2_sld1, src3_sld1, 1); ++ SLDI_B4_SB(zeros, src0, zeros, src1, zeros, src2, zeros, src3, 1, ++ src0_sld1, src1_sld1, src2_sld1, src3_sld1); + AVER_ST8x4_UB(src0, src0_sld1, src1, src1_sld1, + src2, src2_sld1, src3, src3_sld1, dst, dst_stride); + dst += (4 * dst_stride); +@@ -125,14 +127,15 @@ static void common_hz_bil_no_rnd_8x8_msa(const uint8_t *src, int32_t src_stride, + v16i8 src0, src1, src2, src3, src4, src5, src6, src7; + v16i8 src0_sld1, src1_sld1, src2_sld1, src3_sld1; + v16i8 src4_sld1, src5_sld1, src6_sld1, src7_sld1; ++ v16i8 zeros = { 0 }; + + LD_SB8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); + src += (8 * src_stride); + +- SLDI_B4_0_SB(src0, src1, src2, src3, +- src0_sld1, src1_sld1, src2_sld1, src3_sld1, 1); +- SLDI_B4_0_SB(src4, src5, src6, src7, +- src4_sld1, src5_sld1, src6_sld1, src7_sld1, 1); ++ SLDI_B4_SB(zeros, src0, zeros, src1, zeros, src2, zeros, src3, 1, ++ src0_sld1, src1_sld1, src2_sld1, src3_sld1); ++ SLDI_B4_SB(zeros, src4, zeros, src5, zeros, src6, zeros, src7, 1, ++ src4_sld1, src5_sld1, src6_sld1, src7_sld1); + + AVE_ST8x4_UB(src0, src0_sld1, src1, src1_sld1, + src2, src2_sld1, src3, src3_sld1, dst, dst_stride); +@@ -145,10 +148,11 @@ static void common_hz_bil_no_rnd_4x8_msa(const uint8_t *src, int32_t src_stride, + uint8_t *dst, int32_t dst_stride) + { + v16i8 src0, src1, src2, src3, src0_sld1, src1_sld1, src2_sld1, src3_sld1; ++ v16i8 zeros = { 0 }; + + LD_SB4(src, src_stride, src0, src1, src2, src3); +- SLDI_B4_0_SB(src0, src1, src2, src3, +- src0_sld1, src1_sld1, src2_sld1, src3_sld1, 1); ++ SLDI_B4_SB(zeros, src0, zeros, src1, zeros, src2, zeros, src3, 1, ++ src0_sld1, src1_sld1, src2_sld1, src3_sld1); + AVE_ST8x4_UB(src0, src0_sld1, src1, src1_sld1, + src2, src2_sld1, src3, src3_sld1, dst, dst_stride); + } +@@ -216,12 +220,13 @@ static void common_hz_bil_and_aver_dst_4w_msa(const uint8_t *src, + v16u8 src0, src1, src0_sld1, src1_sld1, res0, res1; + v16u8 tmp0 = { 0 }; + v16u8 tmp1 = { 0 }; ++ v16i8 zeros = { 0 }; + + for (loop_cnt = (height >> 1); loop_cnt--;) { + LD_UB2(src, src_stride, src0, src1); + src += (2 * src_stride); + +- SLDI_B2_0_UB(src0, src1, src0_sld1, src1_sld1, 1); ++ SLDI_B2_UB(zeros, src0, zeros, src1, 1, src0_sld1, src1_sld1); + + dst0 = LW(dst); + dst1 = LW(dst + dst_stride); +@@ -247,13 +252,14 @@ static void common_hz_bil_and_aver_dst_8w_msa(const uint8_t *src, + { + uint8_t loop_cnt; + v16i8 src0, src1, src2, src3, src0_sld1, src1_sld1, src2_sld1, src3_sld1; ++ v16i8 zeros = { 0 }; + + for (loop_cnt = (height >> 2); loop_cnt--;) { + LD_SB4(src, src_stride, src0, src1, src2, src3); + src += (4 * src_stride); + +- SLDI_B4_0_SB(src0, src1, src2, src3, +- src0_sld1, src1_sld1, src2_sld1, src3_sld1, 1); ++ SLDI_B4_SB(zeros, src0, zeros, src1, zeros, src2, zeros, src3, 1, ++ src0_sld1, src1_sld1, src2_sld1, src3_sld1); + + AVER_DST_ST8x4_UB(src0, src0_sld1, src1, src1_sld1, src2, src2_sld1, + src3, src3_sld1, dst, dst_stride); +@@ -529,6 +535,7 @@ static void common_hv_bil_4w_msa(const uint8_t *src, int32_t src_stride, + v16i8 src0, src1, src2, src0_sld1, src1_sld1, src2_sld1; + v16u8 src0_r, src1_r, src2_r, res; + v8u16 add0, add1, add2, sum0, sum1; ++ v16i8 zeros = { 0 }; + + src0 = LD_SB(src); + src += src_stride; +@@ -537,7 +544,8 @@ static void common_hv_bil_4w_msa(const uint8_t *src, int32_t src_stride, + LD_SB2(src, src_stride, src1, src2); + src += (2 * src_stride); + +- SLDI_B3_0_SB(src0, src1, src2, src0_sld1, src1_sld1, src2_sld1, 1); ++ SLDI_B3_SB(zeros, src0, zeros, src1, zeros, src2, 1, src0_sld1, ++ src1_sld1, src2_sld1); + ILVR_B3_UB(src0_sld1, src0, src1_sld1, src1, src2_sld1, src2, + src0_r, src1_r, src2_r); + HADD_UB3_UH(src0_r, src1_r, src2_r, add0, add1, add2); +@@ -565,6 +573,7 @@ static void common_hv_bil_8w_msa(const uint8_t *src, int32_t src_stride, + v16u8 src0_r, src1_r, src2_r, src3_r, src4_r; + v8u16 add0, add1, add2, add3, add4; + v8u16 sum0, sum1, sum2, sum3; ++ v16i8 zeros = { 0 }; + + src0 = LD_SB(src); + src += src_stride; +@@ -573,8 +582,9 @@ static void common_hv_bil_8w_msa(const uint8_t *src, int32_t src_stride, + LD_SB4(src, src_stride, src1, src2, src3, src4); + src += (4 * src_stride); + +- SLDI_B3_0_SB(src0, src1, src2, src0_sld1, src1_sld1, src2_sld1, 1); +- SLDI_B2_0_SB(src3, src4, src3_sld1, src4_sld1, 1); ++ SLDI_B3_SB(zeros, src0, zeros, src1, zeros, src2, 1, src0_sld1, ++ src1_sld1, src2_sld1); ++ SLDI_B2_SB(zeros, src3, zeros, src4, 1, src3_sld1, src4_sld1); + ILVR_B3_UB(src0_sld1, src0, src1_sld1, src1, src2_sld1, src2, src0_r, + src1_r, src2_r); + ILVR_B2_UB(src3_sld1, src3, src4_sld1, src4, src3_r, src4_r); +@@ -584,7 +594,7 @@ static void common_hv_bil_8w_msa(const uint8_t *src, int32_t src_stride, + sum0, sum1, sum2, sum3); + SRARI_H4_UH(sum0, sum1, sum2, sum3, 2); + PCKEV_B2_SB(sum1, sum0, sum3, sum2, src0, src1); +- ST8x4_UB(src0, src1, dst, dst_stride); ++ ST_D4(src0, src1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + src0 = src4; + } +@@ -659,15 +669,17 @@ static void common_hv_bil_no_rnd_8x8_msa(const uint8_t *src, int32_t src_stride, + v8u16 add0, add1, add2, add3, add4, add5, add6, add7, add8; + v8u16 sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7; + v16i8 out0, out1; ++ v16i8 zeros = { 0 }; + + LD_UB8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); + src += (8 * src_stride); + src8 = LD_UB(src); + +- SLDI_B4_0_UB(src0, src1, src2, src3, src0_sld1, src1_sld1, src2_sld1, +- src3_sld1, 1); +- SLDI_B3_0_UB(src4, src5, src6, src4_sld1, src5_sld1, src6_sld1, 1); +- SLDI_B2_0_UB(src7, src8, src7_sld1, src8_sld1, 1); ++ SLDI_B4_UB(zeros, src0, zeros, src1, zeros, src2, zeros, src3, 1, ++ src0_sld1, src1_sld1, src2_sld1, src3_sld1); ++ SLDI_B3_UB(zeros, src4, zeros, src5, zeros, src6, 1, src4_sld1, ++ src5_sld1, src6_sld1); ++ SLDI_B2_UB(zeros, src7, zeros, src8, 1, src7_sld1, src8_sld1); + ILVR_B4_UH(src0_sld1, src0, src1_sld1, src1, src2_sld1, src2, src3_sld1, + src3, src0_r, src1_r, src2_r, src3_r); + ILVR_B3_UH(src4_sld1, src4, src5_sld1, src5, src6_sld1, src6, src4_r, +@@ -689,9 +701,9 @@ static void common_hv_bil_no_rnd_8x8_msa(const uint8_t *src, int32_t src_stride, + SRA_4V(sum0, sum1, sum2, sum3, 2); + SRA_4V(sum4, sum5, sum6, sum7, 2); + PCKEV_B2_SB(sum1, sum0, sum3, sum2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + PCKEV_B2_SB(sum5, sum4, sum7, sum6, out0, out1); +- ST8x4_UB(out0, out1, dst + 4 * dst_stride, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst + 4 * dst_stride, dst_stride); + } + + static void common_hv_bil_no_rnd_4x8_msa(const uint8_t *src, int32_t src_stride, +@@ -703,13 +715,15 @@ static void common_hv_bil_no_rnd_4x8_msa(const uint8_t *src, int32_t src_stride, + v8u16 add0, add1, add2, add3, add4; + v8u16 sum0, sum1, sum2, sum3; + v16i8 out0, out1; ++ v16i8 zeros = { 0 }; + + LD_SB4(src, src_stride, src0, src1, src2, src3); + src += (4 * src_stride); + src4 = LD_SB(src); + +- SLDI_B3_0_SB(src0, src1, src2, src0_sld1, src1_sld1, src2_sld1, 1); +- SLDI_B2_0_SB(src3, src4, src3_sld1, src4_sld1, 1); ++ SLDI_B3_SB(zeros, src0, zeros, src1, zeros, src2, 1, src0_sld1, ++ src1_sld1, src2_sld1); ++ SLDI_B2_SB(zeros, src3, zeros, src4, 1, src3_sld1, src4_sld1); + ILVR_B3_UH(src0_sld1, src0, src1_sld1, src1, src2_sld1, src2, src0_r, + src1_r, src2_r); + ILVR_B2_UH(src3_sld1, src3, src4_sld1, src4, src3_r, src4_r); +@@ -723,7 +737,7 @@ static void common_hv_bil_no_rnd_4x8_msa(const uint8_t *src, int32_t src_stride, + + SRA_4V(sum0, sum1, sum2, sum3, 2); + PCKEV_B2_SB(sum1, sum0, sum3, sum2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + } + + static void common_hv_bil_no_rnd_16x16_msa(const uint8_t *src, +@@ -918,6 +932,7 @@ static void common_hv_bil_and_aver_dst_4w_msa(const uint8_t *src, + v16u8 src0_r, src1_r, src2_r; + v8u16 add0, add1, add2, sum0, sum1; + v16u8 dst0, dst1, res0, res1; ++ v16i8 zeros = { 0 }; + + src0 = LD_SB(src); + src += src_stride; +@@ -927,7 +942,8 @@ static void common_hv_bil_and_aver_dst_4w_msa(const uint8_t *src, + src += (2 * src_stride); + + LD_UB2(dst, dst_stride, dst0, dst1); +- SLDI_B3_0_SB(src0, src1, src2, src0_sld1, src1_sld1, src2_sld1, 1); ++ SLDI_B3_SB(zeros, src0, zeros, src1, zeros, src2, 1, src0_sld1, ++ src1_sld1, src2_sld1); + ILVR_B3_UB(src0_sld1, src0, src1_sld1, src1, src2_sld1, src2, src0_r, + src1_r, src2_r); + HADD_UB3_UH(src0_r, src1_r, src2_r, add0, add1, add2); +@@ -959,6 +975,7 @@ static void common_hv_bil_and_aver_dst_8w_msa(const uint8_t *src, + v16u8 src0_r, src1_r, src2_r, src3_r, src4_r; + v8u16 add0, add1, add2, add3, add4; + v8u16 sum0, sum1, sum2, sum3; ++ v16i8 zeros = { 0 }; + + src0 = LD_SB(src); + src += src_stride; +@@ -968,8 +985,9 @@ static void common_hv_bil_and_aver_dst_8w_msa(const uint8_t *src, + src += (4 * src_stride); + + LD_UB4(dst, dst_stride, dst0, dst1, dst2, dst3); +- SLDI_B3_0_SB(src0, src1, src2, src0_sld1, src1_sld1, src2_sld1, 1); +- SLDI_B2_0_SB(src3, src4, src3_sld1, src4_sld1, 1); ++ SLDI_B3_SB(zeros, src0, zeros, src1, zeros, src2, 1, src0_sld1, ++ src1_sld1, src2_sld1); ++ SLDI_B2_SB(zeros, src3, zeros, src4, 1, src3_sld1, src4_sld1); + ILVR_B3_UB(src0_sld1, src0, src1_sld1, src1, src2_sld1, src2, src0_r, + src1_r, src2_r); + ILVR_B2_UB(src3_sld1, src3, src4_sld1, src4, src3_r, src4_r); +diff --git a/libavcodec/mips/idctdsp_init_mips.c b/libavcodec/mips/idctdsp_init_mips.c +index bb33b55..23efd9e 100644 +--- a/libavcodec/mips/idctdsp_init_mips.c ++++ b/libavcodec/mips/idctdsp_init_mips.c +@@ -19,56 +19,44 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/mips/cpu.h" + #include "idctdsp_mips.h" + #include "xvididct_mips.h" + +-#if HAVE_MSA +-static av_cold void idctdsp_init_msa(IDCTDSPContext *c, AVCodecContext *avctx, +- unsigned high_bit_depth) ++av_cold void ff_idctdsp_init_mips(IDCTDSPContext *c, AVCodecContext *avctx, ++ unsigned high_bit_depth) + { +- if ((avctx->lowres != 1) && (avctx->lowres != 2) && (avctx->lowres != 3) && +- (avctx->bits_per_raw_sample != 10) && +- (avctx->bits_per_raw_sample != 12) && +- (avctx->idct_algo == FF_IDCT_AUTO)) { +- c->idct_put = ff_simple_idct_put_msa; +- c->idct_add = ff_simple_idct_add_msa; +- c->idct = ff_simple_idct_msa; +- c->perm_type = FF_IDCT_PERM_NONE; +- } ++ int cpu_flags = av_get_cpu_flags(); + +- c->put_pixels_clamped = ff_put_pixels_clamped_msa; +- c->put_signed_pixels_clamped = ff_put_signed_pixels_clamped_msa; +- c->add_pixels_clamped = ff_add_pixels_clamped_msa; +-} +-#endif // #if HAVE_MSA ++ if (have_mmi(cpu_flags)) { ++ if ((avctx->lowres != 1) && (avctx->lowres != 2) && (avctx->lowres != 3) && ++ (avctx->bits_per_raw_sample != 10) && ++ (avctx->bits_per_raw_sample != 12) && ++ ((avctx->idct_algo == FF_IDCT_AUTO) || (avctx->idct_algo == FF_IDCT_SIMPLE))) { ++ c->idct_put = ff_simple_idct_put_8_mmi; ++ c->idct_add = ff_simple_idct_add_8_mmi; ++ c->idct = ff_simple_idct_8_mmi; ++ c->perm_type = FF_IDCT_PERM_NONE; ++ } + +-#if HAVE_MMI +-static av_cold void idctdsp_init_mmi(IDCTDSPContext *c, AVCodecContext *avctx, +- unsigned high_bit_depth) +-{ +- if ((avctx->lowres != 1) && (avctx->lowres != 2) && (avctx->lowres != 3) && +- (avctx->bits_per_raw_sample != 10) && +- (avctx->bits_per_raw_sample != 12) && +- ((avctx->idct_algo == FF_IDCT_AUTO) || (avctx->idct_algo == FF_IDCT_SIMPLE))) { +- c->idct_put = ff_simple_idct_put_8_mmi; +- c->idct_add = ff_simple_idct_add_8_mmi; +- c->idct = ff_simple_idct_8_mmi; +- c->perm_type = FF_IDCT_PERM_NONE; ++ c->put_pixels_clamped = ff_put_pixels_clamped_mmi; ++ c->add_pixels_clamped = ff_add_pixels_clamped_mmi; ++ c->put_signed_pixels_clamped = ff_put_signed_pixels_clamped_mmi; + } + +- c->put_pixels_clamped = ff_put_pixels_clamped_mmi; +- c->add_pixels_clamped = ff_add_pixels_clamped_mmi; +- c->put_signed_pixels_clamped = ff_put_signed_pixels_clamped_mmi; +-} +-#endif /* HAVE_MMI */ ++ if (have_msa(cpu_flags)) { ++ if ((avctx->lowres != 1) && (avctx->lowres != 2) && (avctx->lowres != 3) && ++ (avctx->bits_per_raw_sample != 10) && ++ (avctx->bits_per_raw_sample != 12) && ++ (avctx->idct_algo == FF_IDCT_AUTO)) { ++ c->idct_put = ff_simple_idct_put_msa; ++ c->idct_add = ff_simple_idct_add_msa; ++ c->idct = ff_simple_idct_msa; ++ c->perm_type = FF_IDCT_PERM_NONE; ++ } + +-av_cold void ff_idctdsp_init_mips(IDCTDSPContext *c, AVCodecContext *avctx, +- unsigned high_bit_depth) +-{ +-#if HAVE_MSA +- idctdsp_init_msa(c, avctx, high_bit_depth); +-#endif // #if HAVE_MSA +-#if HAVE_MMI +- idctdsp_init_mmi(c, avctx, high_bit_depth); +-#endif /* HAVE_MMI */ ++ c->put_pixels_clamped = ff_put_pixels_clamped_msa; ++ c->put_signed_pixels_clamped = ff_put_signed_pixels_clamped_msa; ++ c->add_pixels_clamped = ff_add_pixels_clamped_msa; ++ } + } +diff --git a/libavcodec/mips/idctdsp_msa.c b/libavcodec/mips/idctdsp_msa.c +index b29e420..b6b98dc 100644 +--- a/libavcodec/mips/idctdsp_msa.c ++++ b/libavcodec/mips/idctdsp_msa.c +@@ -28,8 +28,7 @@ static void put_pixels_clamped_msa(const int16_t *block, uint8_t *pixels, + v8i16 in0, in1, in2, in3, in4, in5, in6, in7; + + LD_SH8(block, 8, in0, in1, in2, in3, in4, in5, in6, in7); +- CLIP_SH4_0_255(in0, in1, in2, in3); +- CLIP_SH4_0_255(in4, in5, in6, in7); ++ CLIP_SH8_0_255(in0, in1, in2, in3, in4, in5, in6, in7); + PCKEV_B4_SH(in0, in0, in1, in1, in2, in2, in3, in3, in0, in1, in2, in3); + PCKEV_B4_SH(in4, in4, in5, in5, in6, in6, in7, in7, in4, in5, in6, in7); + +@@ -63,8 +62,7 @@ static void put_signed_pixels_clamped_msa(const int16_t *block, uint8_t *pixels, + in6 += 128; + in7 += 128; + +- CLIP_SH4_0_255(in0, in1, in2, in3); +- CLIP_SH4_0_255(in4, in5, in6, in7); ++ CLIP_SH8_0_255(in0, in1, in2, in3, in4, in5, in6, in7); + PCKEV_B4_SH(in0, in0, in1, in1, in2, in2, in3, in3, in0, in1, in2, in3); + PCKEV_B4_SH(in4, in4, in5, in5, in6, in6, in7, in7, in4, in5, in6, in7); + +@@ -109,8 +107,7 @@ static void add_pixels_clamped_msa(const int16_t *block, uint8_t *pixels, + in6 += (v8i16) pix6; + in7 += (v8i16) pix7; + +- CLIP_SH4_0_255(in0, in1, in2, in3); +- CLIP_SH4_0_255(in4, in5, in6, in7); ++ CLIP_SH8_0_255(in0, in1, in2, in3, in4, in5, in6, in7); + PCKEV_B4_SH(in0, in0, in1, in1, in2, in2, in3, in3, in0, in1, in2, in3); + PCKEV_B4_SH(in4, in4, in5, in5, in6, in6, in7, in7, in4, in5, in6, in7); + +diff --git a/libavcodec/mips/me_cmp_init_mips.c b/libavcodec/mips/me_cmp_init_mips.c +index 219a0dc..e3e33b8 100644 +--- a/libavcodec/mips/me_cmp_init_mips.c ++++ b/libavcodec/mips/me_cmp_init_mips.c +@@ -18,39 +18,35 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/mips/cpu.h" + #include "me_cmp_mips.h" + +-#if HAVE_MSA +-static av_cold void me_cmp_msa(MECmpContext *c, AVCodecContext *avctx) ++av_cold void ff_me_cmp_init_mips(MECmpContext *c, AVCodecContext *avctx) + { ++ int cpu_flags = av_get_cpu_flags(); ++ ++ if (have_msa(cpu_flags)) { + #if BIT_DEPTH == 8 +- c->pix_abs[0][0] = ff_pix_abs16_msa; +- c->pix_abs[0][1] = ff_pix_abs16_x2_msa; +- c->pix_abs[0][2] = ff_pix_abs16_y2_msa; +- c->pix_abs[0][3] = ff_pix_abs16_xy2_msa; +- c->pix_abs[1][0] = ff_pix_abs8_msa; +- c->pix_abs[1][1] = ff_pix_abs8_x2_msa; +- c->pix_abs[1][2] = ff_pix_abs8_y2_msa; +- c->pix_abs[1][3] = ff_pix_abs8_xy2_msa; ++ c->pix_abs[0][0] = ff_pix_abs16_msa; ++ c->pix_abs[0][1] = ff_pix_abs16_x2_msa; ++ c->pix_abs[0][2] = ff_pix_abs16_y2_msa; ++ c->pix_abs[0][3] = ff_pix_abs16_xy2_msa; ++ c->pix_abs[1][0] = ff_pix_abs8_msa; ++ c->pix_abs[1][1] = ff_pix_abs8_x2_msa; ++ c->pix_abs[1][2] = ff_pix_abs8_y2_msa; ++ c->pix_abs[1][3] = ff_pix_abs8_xy2_msa; + +- c->hadamard8_diff[0] = ff_hadamard8_diff16_msa; +- c->hadamard8_diff[1] = ff_hadamard8_diff8x8_msa; ++ c->hadamard8_diff[0] = ff_hadamard8_diff16_msa; ++ c->hadamard8_diff[1] = ff_hadamard8_diff8x8_msa; + +- c->hadamard8_diff[4] = ff_hadamard8_intra16_msa; +- c->hadamard8_diff[5] = ff_hadamard8_intra8x8_msa; ++ c->hadamard8_diff[4] = ff_hadamard8_intra16_msa; ++ c->hadamard8_diff[5] = ff_hadamard8_intra8x8_msa; + +- c->sad[0] = ff_pix_abs16_msa; +- c->sad[1] = ff_pix_abs8_msa; +- c->sse[0] = ff_sse16_msa; +- c->sse[1] = ff_sse8_msa; +- c->sse[2] = ff_sse4_msa; ++ c->sad[0] = ff_pix_abs16_msa; ++ c->sad[1] = ff_pix_abs8_msa; ++ c->sse[0] = ff_sse16_msa; ++ c->sse[1] = ff_sse8_msa; ++ c->sse[2] = ff_sse4_msa; + #endif +-} +-#endif // #if HAVE_MSA +- +-av_cold void ff_me_cmp_init_mips(MECmpContext *c, AVCodecContext *avctx) +-{ +-#if HAVE_MSA +- me_cmp_msa(c, avctx); +-#endif // #if HAVE_MSA ++ } + } +diff --git a/libavcodec/mips/me_cmp_msa.c b/libavcodec/mips/me_cmp_msa.c +index 0e3165c..7cb7af0 100644 +--- a/libavcodec/mips/me_cmp_msa.c ++++ b/libavcodec/mips/me_cmp_msa.c +@@ -87,8 +87,8 @@ static uint32_t sad_horiz_bilinear_filter_8width_msa(uint8_t *src, + + PCKEV_D2_UB(src1, src0, src3, src2, src0, src1); + PCKEV_D2_UB(ref1, ref0, ref3, ref2, ref4, ref5); +- SLDI_B2_UB(ref0, ref1, ref0, ref1, ref0, ref1, 1); +- SLDI_B2_UB(ref2, ref3, ref2, ref3, ref2, ref3, 1); ++ SLDI_B4_UB(ref0, ref0, ref1, ref1, ref2, ref2, ref3, ref3, 1, ++ ref0, ref1, ref2, ref3); + PCKEV_D2_UB(ref1, ref0, ref3, ref2, ref0, ref1); + AVER_UB2_UB(ref4, ref0, ref5, ref1, comp0, comp1); + sad += SAD_UB2_UH(src0, src1, comp0, comp1); +@@ -100,8 +100,8 @@ static uint32_t sad_horiz_bilinear_filter_8width_msa(uint8_t *src, + + PCKEV_D2_UB(src1, src0, src3, src2, src0, src1); + PCKEV_D2_UB(ref1, ref0, ref3, ref2, ref4, ref5); +- SLDI_B2_UB(ref0, ref1, ref0, ref1, ref0, ref1, 1); +- SLDI_B2_UB(ref2, ref3, ref2, ref3, ref2, ref3, 1); ++ SLDI_B4_UB(ref0, ref0, ref1, ref1, ref2, ref2, ref3, ref3, 1, ++ ref0, ref1, ref2, ref3); + PCKEV_D2_UB(ref1, ref0, ref3, ref2, ref0, ref1); + AVER_UB2_UB(ref4, ref0, ref5, ref1, comp0, comp1); + sad += SAD_UB2_UH(src0, src1, comp0, comp1); +diff --git a/libavcodec/mips/mpegaudiodsp_mips_float.c b/libavcodec/mips/mpegaudiodsp_mips_float.c +index 481b69c..ae130c7 100644 +--- a/libavcodec/mips/mpegaudiodsp_mips_float.c ++++ b/libavcodec/mips/mpegaudiodsp_mips_float.c +@@ -287,9 +287,16 @@ static void ff_dct32_mips_float(float *out, const float *tab) + val8 , val9 , val10, val11, val12, val13, val14, val15, + val16, val17, val18, val19, val20, val21, val22, val23, + val24, val25, val26, val27, val28, val29, val30, val31; +- float fTmp1, fTmp2, fTmp3, fTmp4, fTmp5, fTmp6, fTmp7, fTmp8, +- fTmp9, fTmp10, fTmp11; ++ float fTmp1, fTmp2, fTmp3, fTmp4, fTmp5, fTmp6, fTmp8, fTmp9; ++ float f1, f2, f3, f4, f5, f6, f7; + ++ f1 = 0.50241928618815570551; ++ f2 = 0.50060299823519630134; ++ f3 = 10.19000812354805681150; ++ f4 = 5.10114861868916385802; ++ f5 = 0.67480834145500574602; ++ f6 = 0.74453627100229844977; ++ f7 = 0.50979557910415916894; + /** + * instructions are scheduled to minimize pipeline stall. + */ +@@ -298,149 +305,142 @@ static void ff_dct32_mips_float(float *out, const float *tab) + "lwc1 %[fTmp2], 31*4(%[tab]) \n\t" + "lwc1 %[fTmp3], 15*4(%[tab]) \n\t" + "lwc1 %[fTmp4], 16*4(%[tab]) \n\t" +- "li.s %[fTmp7], 0.50241928618815570551 \n\t" + "add.s %[fTmp5], %[fTmp1], %[fTmp2] \n\t" + "sub.s %[fTmp8], %[fTmp1], %[fTmp2] \n\t" + "add.s %[fTmp6], %[fTmp3], %[fTmp4] \n\t" + "sub.s %[fTmp9], %[fTmp3], %[fTmp4] \n\t" +- "li.s %[fTmp10], 0.50060299823519630134 \n\t" +- "li.s %[fTmp11], 10.19000812354805681150 \n\t" +- "mul.s %[fTmp8], %[fTmp8], %[fTmp10] \n\t" ++ "mul.s %[fTmp8], %[fTmp8], %[f2] \n\t" + "add.s %[val0], %[fTmp5], %[fTmp6] \n\t" + "sub.s %[val15], %[fTmp5], %[fTmp6] \n\t" + "lwc1 %[fTmp1], 7*4(%[tab]) \n\t" + "lwc1 %[fTmp2], 24*4(%[tab]) \n\t" +- "madd.s %[val16], %[fTmp8], %[fTmp9], %[fTmp11] \n\t" +- "nmsub.s %[val31], %[fTmp8], %[fTmp9], %[fTmp11] \n\t" +- "mul.s %[val15], %[val15], %[fTmp7] \n\t" ++ "madd.s %[val16], %[fTmp8], %[fTmp9], %[f3] \n\t" ++ "nmsub.s %[val31], %[fTmp8], %[fTmp9], %[f3] \n\t" ++ "mul.s %[val15], %[val15], %[f1] \n\t" + "lwc1 %[fTmp3], 8*4(%[tab]) \n\t" + "lwc1 %[fTmp4], 23*4(%[tab]) \n\t" + "add.s %[fTmp5], %[fTmp1], %[fTmp2] \n\t" +- "mul.s %[val31], %[val31], %[fTmp7] \n\t" ++ "mul.s %[val31], %[val31], %[f1] \n\t" + "sub.s %[fTmp8], %[fTmp1], %[fTmp2] \n\t" + "add.s %[fTmp6], %[fTmp3], %[fTmp4] \n\t" + "sub.s %[fTmp9], %[fTmp3], %[fTmp4] \n\t" +- "li.s %[fTmp7], 5.10114861868916385802 \n\t" +- "li.s %[fTmp10], 0.67480834145500574602 \n\t" +- "li.s %[fTmp11], 0.74453627100229844977 \n\t" + "add.s %[val7], %[fTmp5], %[fTmp6] \n\t" + "sub.s %[val8], %[fTmp5], %[fTmp6] \n\t" +- "mul.s %[fTmp8], %[fTmp8], %[fTmp10] \n\t" +- "li.s %[fTmp1], 0.50979557910415916894 \n\t" ++ "mul.s %[fTmp8], %[fTmp8], %[f5] \n\t" + "sub.s %[fTmp2], %[val0], %[val7] \n\t" +- "mul.s %[val8], %[val8], %[fTmp7] \n\t" +- "madd.s %[val23], %[fTmp8], %[fTmp9], %[fTmp11] \n\t" +- "nmsub.s %[val24], %[fTmp8], %[fTmp9], %[fTmp11] \n\t" ++ "mul.s %[val8], %[val8], %[f4] \n\t" ++ "madd.s %[val23], %[fTmp8], %[fTmp9], %[f6] \n\t" ++ "nmsub.s %[val24], %[fTmp8], %[fTmp9], %[f6] \n\t" + "add.s %[val0], %[val0], %[val7] \n\t" +- "mul.s %[val7], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val7], %[f7], %[fTmp2] \n\t" + "sub.s %[fTmp2], %[val15], %[val8] \n\t" + "add.s %[val8], %[val15], %[val8] \n\t" +- "mul.s %[val24], %[val24], %[fTmp7] \n\t" ++ "mul.s %[val24], %[val24], %[f4] \n\t" + "sub.s %[fTmp3], %[val16], %[val23] \n\t" + "add.s %[val16], %[val16], %[val23] \n\t" +- "mul.s %[val15], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val15], %[f7], %[fTmp2] \n\t" + "sub.s %[fTmp4], %[val31], %[val24] \n\t" +- "mul.s %[val23], %[fTmp1], %[fTmp3] \n\t" ++ "mul.s %[val23], %[f7], %[fTmp3] \n\t" + "add.s %[val24], %[val31], %[val24] \n\t" +- "mul.s %[val31], %[fTmp1], %[fTmp4] \n\t" ++ "mul.s %[val31], %[f7], %[fTmp4] \n\t" + + : [fTmp1] "=&f" (fTmp1), [fTmp2] "=&f" (fTmp2), [fTmp3] "=&f" (fTmp3), + [fTmp4] "=&f" (fTmp4), [fTmp5] "=&f" (fTmp5), [fTmp6] "=&f" (fTmp6), +- [fTmp7] "=&f" (fTmp7), [fTmp8] "=&f" (fTmp8), [fTmp9] "=&f" (fTmp9), +- [fTmp10] "=&f" (fTmp10), [fTmp11] "=&f" (fTmp11), +- [val0] "=f" (val0), [val7] "=f" (val7), +- [val8] "=f" (val8), [val15] "=f" (val15), +- [val16] "=f" (val16), [val23] "=f" (val23), +- [val24] "=f" (val24), [val31] "=f" (val31) +- : [tab] "r" (tab) ++ [fTmp8] "=&f" (fTmp8), [fTmp9] "=&f" (fTmp9), ++ [val0] "=&f" (val0), [val7] "=&f" (val7), ++ [val8] "=&f" (val8), [val15] "=&f" (val15), ++ [val16] "=&f" (val16), [val23] "=&f" (val23), ++ [val24] "=&f" (val24), [val31] "=&f" (val31) ++ : [tab] "r" (tab), [f1]"f"(f1), [f2]"f"(f2), [f3]"f"(f3), ++ [f4]"f"(f4), [f5]"f"(f5), [f6]"f"(f6), [f7]"f"(f7) + : "memory" + ); + ++ f1 = 0.64682178335999012954; ++ f2 = 0.53104259108978417447; ++ f3 = 1.48416461631416627724; ++ f4 = 0.78815462345125022473; ++ f5 = 0.55310389603444452782; ++ f6 = 1.16943993343288495515; ++ f7 = 2.56291544774150617881; + __asm__ volatile ( + "lwc1 %[fTmp1], 3*4(%[tab]) \n\t" + "lwc1 %[fTmp2], 28*4(%[tab]) \n\t" + "lwc1 %[fTmp3], 12*4(%[tab]) \n\t" + "lwc1 %[fTmp4], 19*4(%[tab]) \n\t" +- "li.s %[fTmp7], 0.64682178335999012954 \n\t" + "add.s %[fTmp5], %[fTmp1], %[fTmp2] \n\t" + "sub.s %[fTmp8], %[fTmp1], %[fTmp2] \n\t" + "add.s %[fTmp6], %[fTmp3], %[fTmp4] \n\t" + "sub.s %[fTmp9], %[fTmp3], %[fTmp4] \n\t" +- "li.s %[fTmp10], 0.53104259108978417447 \n\t" +- "li.s %[fTmp11], 1.48416461631416627724 \n\t" +- "mul.s %[fTmp8], %[fTmp8], %[fTmp10] \n\t" ++ "mul.s %[fTmp8], %[fTmp8], %[f2] \n\t" + "add.s %[val3], %[fTmp5], %[fTmp6] \n\t" + "sub.s %[val12], %[fTmp5], %[fTmp6] \n\t" + "lwc1 %[fTmp1], 4*4(%[tab]) \n\t" + "lwc1 %[fTmp2], 27*4(%[tab]) \n\t" +- "madd.s %[val19], %[fTmp8], %[fTmp9], %[fTmp11] \n\t" +- "nmsub.s %[val28], %[fTmp8], %[fTmp9], %[fTmp11] \n\t" +- "mul.s %[val12], %[val12], %[fTmp7] \n\t" ++ "madd.s %[val19], %[fTmp8], %[fTmp9], %[f3] \n\t" ++ "nmsub.s %[val28], %[fTmp8], %[fTmp9], %[f3] \n\t" ++ "mul.s %[val12], %[val12], %[f1] \n\t" + "lwc1 %[fTmp3], 11*4(%[tab]) \n\t" + "lwc1 %[fTmp4], 20*4(%[tab]) \n\t" + "add.s %[fTmp5], %[fTmp1], %[fTmp2] \n\t" +- "mul.s %[val28], %[val28], %[fTmp7] \n\t" ++ "mul.s %[val28], %[val28], %[f1] \n\t" + "sub.s %[fTmp8], %[fTmp1], %[fTmp2] \n\t" +- "li.s %[fTmp7], 0.78815462345125022473 \n\t" + "add.s %[fTmp6], %[fTmp3], %[fTmp4] \n\t" + "sub.s %[fTmp9], %[fTmp3], %[fTmp4] \n\t" +- "li.s %[fTmp10], 0.55310389603444452782 \n\t" +- "li.s %[fTmp11], 1.16943993343288495515 \n\t" +- "mul.s %[fTmp8], %[fTmp8], %[fTmp10] \n\t" ++ "mul.s %[fTmp8], %[fTmp8], %[f5] \n\t" + "add.s %[val4], %[fTmp5], %[fTmp6] \n\t" + "sub.s %[val11], %[fTmp5], %[fTmp6] \n\t" +- "li.s %[fTmp1], 2.56291544774150617881 \n\t" +- "madd.s %[val20], %[fTmp8], %[fTmp9], %[fTmp11] \n\t" +- "nmsub.s %[val27], %[fTmp8], %[fTmp9], %[fTmp11] \n\t" +- "mul.s %[val11], %[val11], %[fTmp7] \n\t" ++ "madd.s %[val20], %[fTmp8], %[fTmp9], %[f6] \n\t" ++ "nmsub.s %[val27], %[fTmp8], %[fTmp9], %[f6] \n\t" ++ "mul.s %[val11], %[val11], %[f4] \n\t" + "sub.s %[fTmp2], %[val3], %[val4] \n\t" + "add.s %[val3], %[val3], %[val4] \n\t" + "sub.s %[fTmp4], %[val19], %[val20] \n\t" +- "mul.s %[val27], %[val27], %[fTmp7] \n\t" ++ "mul.s %[val27], %[val27], %[f4] \n\t" + "sub.s %[fTmp3], %[val12], %[val11] \n\t" +- "mul.s %[val4], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val4], %[f7], %[fTmp2] \n\t" + "add.s %[val11], %[val12], %[val11] \n\t" + "add.s %[val19], %[val19], %[val20] \n\t" +- "mul.s %[val20], %[fTmp1], %[fTmp4] \n\t" +- "mul.s %[val12], %[fTmp1], %[fTmp3] \n\t" ++ "mul.s %[val20], %[f7], %[fTmp4] \n\t" ++ "mul.s %[val12], %[f7], %[fTmp3] \n\t" + "sub.s %[fTmp2], %[val28], %[val27] \n\t" + "add.s %[val27], %[val28], %[val27] \n\t" +- "mul.s %[val28], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val28], %[f7], %[fTmp2] \n\t" + + : [fTmp1] "=&f" (fTmp1), [fTmp2] "=&f" (fTmp2), [fTmp3] "=&f" (fTmp3), + [fTmp4] "=&f" (fTmp4), [fTmp5] "=&f" (fTmp5), [fTmp6] "=&f" (fTmp6), +- [fTmp7] "=&f" (fTmp7), [fTmp8] "=&f" (fTmp8), [fTmp9] "=&f" (fTmp9), +- [fTmp10] "=&f" (fTmp10), [fTmp11] "=&f" (fTmp11), +- [val3] "=f" (val3), [val4] "=f" (val4), +- [val11] "=f" (val11), [val12] "=f" (val12), +- [val19] "=f" (val19), [val20] "=f" (val20), +- [val27] "=f" (val27), [val28] "=f" (val28) +- : [tab] "r" (tab) ++ [fTmp8] "=&f" (fTmp8), [fTmp9] "=&f" (fTmp9), ++ [val3] "=&f" (val3), [val4] "=&f" (val4), ++ [val11] "=&f" (val11), [val12] "=&f" (val12), ++ [val19] "=&f" (val19), [val20] "=&f" (val20), ++ [val27] "=&f" (val27), [val28] "=&f" (val28) ++ : [tab] "r" (tab), [f1]"f"(f1), [f2]"f"(f2), [f3]"f"(f3), ++ [f4]"f"(f4), [f5]"f"(f5), [f6]"f"(f6), [f7]"f"(f7) + : "memory" + ); + ++ f1 = 0.54119610014619698439; + __asm__ volatile ( +- "li.s %[fTmp1], 0.54119610014619698439 \n\t" + "sub.s %[fTmp2], %[val0], %[val3] \n\t" + "add.s %[val0], %[val0], %[val3] \n\t" + "sub.s %[fTmp3], %[val7], %[val4] \n\t" + "add.s %[val4], %[val7], %[val4] \n\t" + "sub.s %[fTmp4], %[val8], %[val11] \n\t" +- "mul.s %[val3], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val3], %[f1], %[fTmp2] \n\t" + "add.s %[val8], %[val8], %[val11] \n\t" +- "mul.s %[val7], %[fTmp1], %[fTmp3] \n\t" ++ "mul.s %[val7], %[f1], %[fTmp3] \n\t" + "sub.s %[fTmp2], %[val15], %[val12] \n\t" +- "mul.s %[val11], %[fTmp1], %[fTmp4] \n\t" ++ "mul.s %[val11], %[f1], %[fTmp4] \n\t" + "add.s %[val12], %[val15], %[val12] \n\t" +- "mul.s %[val15], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val15], %[f1], %[fTmp2] \n\t" + +- : [val0] "+f" (val0), [val3] "+f" (val3), +- [val4] "+f" (val4), [val7] "+f" (val7), +- [val8] "+f" (val8), [val11] "+f" (val11), +- [val12] "+f" (val12), [val15] "+f" (val15), +- [fTmp1] "=f" (fTmp1), [fTmp2] "=&f" (fTmp2), ++ : [val0] "+&f" (val0), [val3] "+&f" (val3), ++ [val4] "+&f" (val4), [val7] "+&f" (val7), ++ [val8] "+&f" (val8), [val11] "+&f" (val11), ++ [val12] "+&f" (val12), [val15] "+&f" (val15), ++ [fTmp2] "=&f" (fTmp2), + [fTmp3] "=&f" (fTmp3), [fTmp4] "=&f" (fTmp4) +- : ++ : [f1] "f" (f1) + ); + + __asm__ volatile ( +@@ -449,169 +449,169 @@ static void ff_dct32_mips_float(float *out, const float *tab) + "sub.s %[fTmp3], %[val23], %[val20] \n\t" + "add.s %[val20], %[val23], %[val20] \n\t" + "sub.s %[fTmp4], %[val24], %[val27] \n\t" +- "mul.s %[val19], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val19], %[f1], %[fTmp2] \n\t" + "add.s %[val24], %[val24], %[val27] \n\t" +- "mul.s %[val23], %[fTmp1], %[fTmp3] \n\t" ++ "mul.s %[val23], %[f1], %[fTmp3] \n\t" + "sub.s %[fTmp2], %[val31], %[val28] \n\t" +- "mul.s %[val27], %[fTmp1], %[fTmp4] \n\t" ++ "mul.s %[val27], %[f1], %[fTmp4] \n\t" + "add.s %[val28], %[val31], %[val28] \n\t" +- "mul.s %[val31], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val31], %[f1], %[fTmp2] \n\t" + + : [fTmp2] "=&f" (fTmp2), [fTmp3] "=&f" (fTmp3), [fTmp4] "=&f" (fTmp4), +- [val16] "+f" (val16), [val19] "+f" (val19), [val20] "+f" (val20), +- [val23] "+f" (val23), [val24] "+f" (val24), [val27] "+f" (val27), +- [val28] "+f" (val28), [val31] "+f" (val31) +- : [fTmp1] "f" (fTmp1) ++ [val16] "+&f" (val16), [val19] "+&f" (val19), [val20] "+&f" (val20), ++ [val23] "+&f" (val23), [val24] "+&f" (val24), [val27] "+&f" (val27), ++ [val28] "+&f" (val28), [val31] "+&f" (val31) ++ : [f1] "f" (f1) + ); + ++ f1 = 0.52249861493968888062; ++ f2 = 0.50547095989754365998; ++ f3 = 3.40760841846871878570; ++ f4 = 1.72244709823833392782; ++ f5 = 0.62250412303566481615; ++ f6 = 0.83934964541552703873; ++ f7 = 0.60134488693504528054; + __asm__ volatile ( + "lwc1 %[fTmp1], 1*4(%[tab]) \n\t" + "lwc1 %[fTmp2], 30*4(%[tab]) \n\t" + "lwc1 %[fTmp3], 14*4(%[tab]) \n\t" + "lwc1 %[fTmp4], 17*4(%[tab]) \n\t" +- "li.s %[fTmp7], 0.52249861493968888062 \n\t" + "add.s %[fTmp5], %[fTmp1], %[fTmp2] \n\t" + "sub.s %[fTmp8], %[fTmp1], %[fTmp2] \n\t" + "add.s %[fTmp6], %[fTmp3], %[fTmp4] \n\t" + "sub.s %[fTmp9], %[fTmp3], %[fTmp4] \n\t" +- "li.s %[fTmp10], 0.50547095989754365998 \n\t" +- "li.s %[fTmp11], 3.40760841846871878570 \n\t" +- "mul.s %[fTmp8], %[fTmp8], %[fTmp10] \n\t" ++ "mul.s %[fTmp8], %[fTmp8], %[f2] \n\t" + "add.s %[val1], %[fTmp5], %[fTmp6] \n\t" + "sub.s %[val14], %[fTmp5], %[fTmp6] \n\t" + "lwc1 %[fTmp1], 6*4(%[tab]) \n\t" + "lwc1 %[fTmp2], 25*4(%[tab]) \n\t" +- "madd.s %[val17], %[fTmp8], %[fTmp9], %[fTmp11] \n\t" +- "nmsub.s %[val30], %[fTmp8], %[fTmp9], %[fTmp11] \n\t" +- "mul.s %[val14], %[val14], %[fTmp7] \n\t" ++ "madd.s %[val17], %[fTmp8], %[fTmp9], %[f3] \n\t" ++ "nmsub.s %[val30], %[fTmp8], %[fTmp9], %[f3] \n\t" ++ "mul.s %[val14], %[val14], %[f1] \n\t" + "lwc1 %[fTmp3], 9*4(%[tab]) \n\t" + "lwc1 %[fTmp4], 22*4(%[tab]) \n\t" + "add.s %[fTmp5], %[fTmp1], %[fTmp2] \n\t" +- "mul.s %[val30], %[val30], %[fTmp7] \n\t" ++ "mul.s %[val30], %[val30], %[f1] \n\t" + "sub.s %[fTmp8], %[fTmp1], %[fTmp2] \n\t" + "add.s %[fTmp6], %[fTmp3], %[fTmp4] \n\t" + "sub.s %[fTmp9], %[fTmp3], %[fTmp4] \n\t" +- "li.s %[fTmp7], 1.72244709823833392782 \n\t" +- "li.s %[fTmp10], 0.62250412303566481615 \n\t" +- "li.s %[fTmp11], 0.83934964541552703873 \n\t" + "add.s %[val6], %[fTmp5], %[fTmp6] \n\t" + "sub.s %[val9], %[fTmp5], %[fTmp6] \n\t" +- "mul.s %[fTmp8], %[fTmp8], %[fTmp10] \n\t" +- "li.s %[fTmp1], 0.60134488693504528054 \n\t" ++ "mul.s %[fTmp8], %[fTmp8], %[f5] \n\t" + "sub.s %[fTmp2], %[val1], %[val6] \n\t" + "add.s %[val1], %[val1], %[val6] \n\t" +- "mul.s %[val9], %[val9], %[fTmp7] \n\t" +- "madd.s %[val22], %[fTmp8], %[fTmp9], %[fTmp11] \n\t" +- "nmsub.s %[val25], %[fTmp8], %[fTmp9], %[fTmp11] \n\t" +- "mul.s %[val6], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val9], %[val9], %[f4] \n\t" ++ "madd.s %[val22], %[fTmp8], %[fTmp9], %[f6] \n\t" ++ "nmsub.s %[val25], %[fTmp8], %[fTmp9], %[f6] \n\t" ++ "mul.s %[val6], %[f7], %[fTmp2] \n\t" + "sub.s %[fTmp2], %[val14], %[val9] \n\t" + "add.s %[val9], %[val14], %[val9] \n\t" +- "mul.s %[val25], %[val25], %[fTmp7] \n\t" ++ "mul.s %[val25], %[val25], %[f4] \n\t" + "sub.s %[fTmp3], %[val17], %[val22] \n\t" + "add.s %[val17], %[val17], %[val22] \n\t" +- "mul.s %[val14], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val14], %[f7], %[fTmp2] \n\t" + "sub.s %[fTmp2], %[val30], %[val25] \n\t" +- "mul.s %[val22], %[fTmp1], %[fTmp3] \n\t" ++ "mul.s %[val22], %[f7], %[fTmp3] \n\t" + "add.s %[val25], %[val30], %[val25] \n\t" +- "mul.s %[val30], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val30], %[f7], %[fTmp2] \n\t" + + : [fTmp1] "=&f" (fTmp1), [fTmp2] "=&f" (fTmp2), [fTmp3] "=&f" (fTmp3), + [fTmp4] "=&f" (fTmp4), [fTmp5] "=&f" (fTmp5), [fTmp6] "=&f" (fTmp6), +- [fTmp7] "=&f" (fTmp7), [fTmp8] "=&f" (fTmp8), [fTmp9] "=&f" (fTmp9), +- [fTmp10] "=&f" (fTmp10), [fTmp11] "=&f" (fTmp11), +- [val1] "=f" (val1), [val6] "=f" (val6), +- [val9] "=f" (val9), [val14] "=f" (val14), +- [val17] "=f" (val17), [val22] "=f" (val22), +- [val25] "=f" (val25), [val30] "=f" (val30) +- : [tab] "r" (tab) ++ [fTmp8] "=&f" (fTmp8), [fTmp9] "=&f" (fTmp9), ++ [val1] "=&f" (val1), [val6] "=&f" (val6), ++ [val9] "=&f" (val9), [val14] "=&f" (val14), ++ [val17] "=&f" (val17), [val22] "=&f" (val22), ++ [val25] "=&f" (val25), [val30] "=&f" (val30) ++ : [tab] "r" (tab), [f1]"f"(f1), [f2]"f"(f2), [f3]"f"(f3), ++ [f4]"f"(f4), [f5]"f"(f5), [f6]"f"(f6), [f7]"f"(f7) + : "memory" + ); + ++ f1 = 0.56694403481635770368; ++ f2 = 0.51544730992262454697; ++ f3 = 2.05778100995341155085; ++ f4 = 1.06067768599034747134; ++ f5 = 0.58293496820613387367; ++ f6 = 0.97256823786196069369; ++ f7 = 0.89997622313641570463; + __asm__ volatile ( + "lwc1 %[fTmp1], 2*4(%[tab]) \n\t" + "lwc1 %[fTmp2], 29*4(%[tab]) \n\t" + "lwc1 %[fTmp3], 13*4(%[tab]) \n\t" + "lwc1 %[fTmp4], 18*4(%[tab]) \n\t" +- "li.s %[fTmp7], 0.56694403481635770368 \n\t" + "add.s %[fTmp5], %[fTmp1], %[fTmp2] \n\t" + "sub.s %[fTmp8], %[fTmp1], %[fTmp2] \n\t" + "add.s %[fTmp6], %[fTmp3], %[fTmp4] \n\t" + "sub.s %[fTmp9], %[fTmp3], %[fTmp4] \n\t" +- "li.s %[fTmp10], 0.51544730992262454697 \n\t" +- "li.s %[fTmp11], 2.05778100995341155085 \n\t" +- "mul.s %[fTmp8], %[fTmp8], %[fTmp10] \n\t" ++ "mul.s %[fTmp8], %[fTmp8], %[f2] \n\t" + "add.s %[val2], %[fTmp5], %[fTmp6] \n\t" + "sub.s %[val13], %[fTmp5], %[fTmp6] \n\t" + "lwc1 %[fTmp1], 5*4(%[tab]) \n\t" + "lwc1 %[fTmp2], 26*4(%[tab]) \n\t" +- "madd.s %[val18], %[fTmp8], %[fTmp9], %[fTmp11] \n\t" +- "nmsub.s %[val29], %[fTmp8], %[fTmp9], %[fTmp11] \n\t" +- "mul.s %[val13], %[val13], %[fTmp7] \n\t" ++ "madd.s %[val18], %[fTmp8], %[fTmp9], %[f3] \n\t" ++ "nmsub.s %[val29], %[fTmp8], %[fTmp9], %[f3] \n\t" ++ "mul.s %[val13], %[val13], %[f1] \n\t" + "lwc1 %[fTmp3], 10*4(%[tab]) \n\t" + "lwc1 %[fTmp4], 21*4(%[tab]) \n\t" +- "mul.s %[val29], %[val29], %[fTmp7] \n\t" ++ "mul.s %[val29], %[val29], %[f1] \n\t" + "add.s %[fTmp5], %[fTmp1], %[fTmp2] \n\t" + "sub.s %[fTmp8], %[fTmp1], %[fTmp2] \n\t" + "add.s %[fTmp6], %[fTmp3], %[fTmp4] \n\t" + "sub.s %[fTmp9], %[fTmp3], %[fTmp4] \n\t" +- "li.s %[fTmp7], 1.06067768599034747134 \n\t" +- "li.s %[fTmp10], 0.58293496820613387367 \n\t" +- "li.s %[fTmp11], 0.97256823786196069369 \n\t" + "add.s %[val5], %[fTmp5], %[fTmp6] \n\t" + "sub.s %[val10], %[fTmp5], %[fTmp6] \n\t" +- "mul.s %[fTmp8], %[fTmp8], %[fTmp10] \n\t" +- "li.s %[fTmp1], 0.89997622313641570463 \n\t" ++ "mul.s %[fTmp8], %[fTmp8], %[f5] \n\t" + "sub.s %[fTmp2], %[val2], %[val5] \n\t" +- "mul.s %[val10], %[val10], %[fTmp7] \n\t" +- "madd.s %[val21], %[fTmp8], %[fTmp9], %[fTmp11] \n\t" +- "nmsub.s %[val26], %[fTmp8], %[fTmp9], %[fTmp11] \n\t" ++ "mul.s %[val10], %[val10], %[f4] \n\t" ++ "madd.s %[val21], %[fTmp8], %[fTmp9], %[f6] \n\t" ++ "nmsub.s %[val26], %[fTmp8], %[fTmp9], %[f6] \n\t" + "add.s %[val2], %[val2], %[val5] \n\t" +- "mul.s %[val5], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val5], %[f7], %[fTmp2] \n\t" + "sub.s %[fTmp3], %[val13], %[val10] \n\t" + "add.s %[val10], %[val13], %[val10] \n\t" +- "mul.s %[val26], %[val26], %[fTmp7] \n\t" ++ "mul.s %[val26], %[val26], %[f4] \n\t" + "sub.s %[fTmp4], %[val18], %[val21] \n\t" + "add.s %[val18], %[val18], %[val21] \n\t" +- "mul.s %[val13], %[fTmp1], %[fTmp3] \n\t" ++ "mul.s %[val13], %[f7], %[fTmp3] \n\t" + "sub.s %[fTmp2], %[val29], %[val26] \n\t" + "add.s %[val26], %[val29], %[val26] \n\t" +- "mul.s %[val21], %[fTmp1], %[fTmp4] \n\t" +- "mul.s %[val29], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val21], %[f7], %[fTmp4] \n\t" ++ "mul.s %[val29], %[f7], %[fTmp2] \n\t" + + : [fTmp1] "=&f" (fTmp1), [fTmp2] "=&f" (fTmp2), [fTmp3] "=&f" (fTmp3), + [fTmp4] "=&f" (fTmp4), [fTmp5] "=&f" (fTmp5), [fTmp6] "=&f" (fTmp6), +- [fTmp7] "=&f" (fTmp7), [fTmp8] "=&f" (fTmp8), [fTmp9] "=&f" (fTmp9), +- [fTmp10] "=&f" (fTmp10), [fTmp11] "=&f" (fTmp11), +- [val2] "=f" (val2), [val5] "=f" (val5), +- [val10] "=f" (val10), [val13] "=f" (val13), +- [val18] "=f" (val18), [val21] "=f" (val21), +- [val26] "=f" (val26), [val29] "=f" (val29) +- : [tab] "r" (tab) ++ [fTmp8] "=&f" (fTmp8), [fTmp9] "=&f" (fTmp9), ++ [val2] "=&f" (val2), [val5] "=&f" (val5), ++ [val10] "=&f" (val10), [val13] "=&f" (val13), ++ [val18] "=&f" (val18), [val21] "=&f" (val21), ++ [val26] "=&f" (val26), [val29] "=&f" (val29) ++ : [tab] "r" (tab), [f1]"f"(f1), [f2]"f"(f2), [f3]"f"(f3), ++ [f4]"f"(f4), [f5]"f"(f5), [f6]"f"(f6), [f7]"f"(f7) + : "memory" + ); + ++ f1 = 1.30656296487637652785; + __asm__ volatile ( +- "li.s %[fTmp1], 1.30656296487637652785 \n\t" + "sub.s %[fTmp2], %[val1], %[val2] \n\t" + "add.s %[val1], %[val1], %[val2] \n\t" + "sub.s %[fTmp3], %[val6], %[val5] \n\t" + "add.s %[val5], %[val6], %[val5] \n\t" + "sub.s %[fTmp4], %[val9], %[val10] \n\t" +- "mul.s %[val2], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val2], %[f1], %[fTmp2] \n\t" + "add.s %[val9], %[val9], %[val10] \n\t" +- "mul.s %[val6], %[fTmp1], %[fTmp3] \n\t" ++ "mul.s %[val6], %[f1], %[fTmp3] \n\t" + "sub.s %[fTmp2], %[val14], %[val13] \n\t" +- "mul.s %[val10], %[fTmp1], %[fTmp4] \n\t" ++ "mul.s %[val10], %[f1], %[fTmp4] \n\t" + "add.s %[val13], %[val14], %[val13] \n\t" +- "mul.s %[val14], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val14], %[f1], %[fTmp2] \n\t" + +- : [fTmp1] "=f" (fTmp1), [fTmp2] "=&f" (fTmp2), ++ : [fTmp2] "=&f" (fTmp2), + [fTmp3] "=&f" (fTmp3), [fTmp4] "=&f" (fTmp4), +- [val1] "+f" (val1), [val2] "+f" (val2), +- [val5] "+f" (val5), [val6] "+f" (val6), +- [val9] "+f" (val9), [val10] "+f" (val10), +- [val13] "+f" (val13), [val14] "+f" (val14) +- : ++ [val1] "+&f" (val1), [val2] "+&f" (val2), ++ [val5] "+&f" (val5), [val6] "+&f" (val6), ++ [val9] "+&f" (val9), [val10] "+&f" (val10), ++ [val13] "+&f" (val13), [val14] "+&f" (val14) ++ : [f1]"f"(f1) + ); + + __asm__ volatile ( +@@ -620,39 +620,39 @@ static void ff_dct32_mips_float(float *out, const float *tab) + "sub.s %[fTmp3], %[val22], %[val21] \n\t" + "add.s %[val21], %[val22], %[val21] \n\t" + "sub.s %[fTmp4], %[val25], %[val26] \n\t" +- "mul.s %[val18], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val18], %[f1], %[fTmp2] \n\t" + "add.s %[val25], %[val25], %[val26] \n\t" +- "mul.s %[val22], %[fTmp1], %[fTmp3] \n\t" ++ "mul.s %[val22], %[f1], %[fTmp3] \n\t" + "sub.s %[fTmp2], %[val30], %[val29] \n\t" +- "mul.s %[val26], %[fTmp1], %[fTmp4] \n\t" ++ "mul.s %[val26], %[f1], %[fTmp4] \n\t" + "add.s %[val29], %[val30], %[val29] \n\t" +- "mul.s %[val30], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val30], %[f1], %[fTmp2] \n\t" + + : [fTmp2] "=&f" (fTmp2), [fTmp3] "=&f" (fTmp3), [fTmp4] "=&f" (fTmp4), +- [val17] "+f" (val17), [val18] "+f" (val18), [val21] "+f" (val21), +- [val22] "+f" (val22), [val25] "+f" (val25), [val26] "+f" (val26), +- [val29] "+f" (val29), [val30] "+f" (val30) +- : [fTmp1] "f" (fTmp1) ++ [val17] "+&f" (val17), [val18] "+&f" (val18), [val21] "+&f" (val21), ++ [val22] "+&f" (val22), [val25] "+&f" (val25), [val26] "+&f" (val26), ++ [val29] "+&f" (val29), [val30] "+&f" (val30) ++ : [f1] "f" (f1) + ); + ++ f1 = 0.70710678118654752439; + __asm__ volatile ( +- "li.s %[fTmp1], 0.70710678118654752439 \n\t" + "sub.s %[fTmp2], %[val0], %[val1] \n\t" + "add.s %[val0], %[val0], %[val1] \n\t" + "sub.s %[fTmp3], %[val3], %[val2] \n\t" + "add.s %[val2], %[val3], %[val2] \n\t" + "sub.s %[fTmp4], %[val4], %[val5] \n\t" +- "mul.s %[val1], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val1], %[f1], %[fTmp2] \n\t" + "swc1 %[val0], 0(%[out]) \n\t" +- "mul.s %[val3], %[fTmp3], %[fTmp1] \n\t" ++ "mul.s %[val3], %[fTmp3], %[f1] \n\t" + "add.s %[val4], %[val4], %[val5] \n\t" +- "mul.s %[val5], %[fTmp1], %[fTmp4] \n\t" ++ "mul.s %[val5], %[f1], %[fTmp4] \n\t" + "swc1 %[val1], 16*4(%[out]) \n\t" + "sub.s %[fTmp2], %[val7], %[val6] \n\t" + "add.s %[val2], %[val2], %[val3] \n\t" + "swc1 %[val3], 24*4(%[out]) \n\t" + "add.s %[val6], %[val7], %[val6] \n\t" +- "mul.s %[val7], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val7], %[f1], %[fTmp2] \n\t" + "swc1 %[val2], 8*4(%[out]) \n\t" + "add.s %[val6], %[val6], %[val7] \n\t" + "swc1 %[val7], 28*4(%[out]) \n\t" +@@ -663,13 +663,13 @@ static void ff_dct32_mips_float(float *out, const float *tab) + "swc1 %[val5], 20*4(%[out]) \n\t" + "swc1 %[val6], 12*4(%[out]) \n\t" + +- : [fTmp1] "=f" (fTmp1), [fTmp2] "=&f" (fTmp2), ++ : [fTmp2] "=&f" (fTmp2), + [fTmp3] "=&f" (fTmp3), [fTmp4] "=&f" (fTmp4), +- [val0] "+f" (val0), [val1] "+f" (val1), +- [val2] "+f" (val2), [val3] "+f" (val3), +- [val4] "+f" (val4), [val5] "+f" (val5), +- [val6] "+f" (val6), [val7] "+f" (val7) +- : [out] "r" (out) ++ [val0] "+&f" (val0), [val1] "+&f" (val1), ++ [val2] "+&f" (val2), [val3] "+&f" (val3), ++ [val4] "+&f" (val4), [val5] "+&f" (val5), ++ [val6] "+&f" (val6), [val7] "+&f" (val7) ++ : [out] "r" (out), [f1]"f"(f1) + ); + + __asm__ volatile ( +@@ -678,14 +678,14 @@ static void ff_dct32_mips_float(float *out, const float *tab) + "sub.s %[fTmp3], %[val11], %[val10] \n\t" + "add.s %[val10], %[val11], %[val10] \n\t" + "sub.s %[fTmp4], %[val12], %[val13] \n\t" +- "mul.s %[val9], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val9], %[f1], %[fTmp2] \n\t" + "add.s %[val12], %[val12], %[val13] \n\t" +- "mul.s %[val11], %[fTmp1], %[fTmp3] \n\t" ++ "mul.s %[val11], %[f1], %[fTmp3] \n\t" + "sub.s %[fTmp2], %[val15], %[val14] \n\t" +- "mul.s %[val13], %[fTmp1], %[fTmp4] \n\t" ++ "mul.s %[val13], %[f1], %[fTmp4] \n\t" + "add.s %[val14], %[val15], %[val14] \n\t" + "add.s %[val10], %[val10], %[val11] \n\t" +- "mul.s %[val15], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val15], %[f1], %[fTmp2] \n\t" + "add.s %[val14], %[val14], %[val15] \n\t" + "add.s %[val12], %[val12], %[val14] \n\t" + "add.s %[val14], %[val14], %[val13] \n\t" +@@ -707,10 +707,10 @@ static void ff_dct32_mips_float(float *out, const float *tab) + "swc1 %[val15], 30*4(%[out]) \n\t" + + : [fTmp2] "=&f" (fTmp2), [fTmp3] "=&f" (fTmp3), [fTmp4] "=&f" (fTmp4), +- [val8] "+f" (val8), [val9] "+f" (val9), [val10] "+f" (val10), +- [val11] "+f" (val11), [val12] "+f" (val12), [val13] "+f" (val13), +- [val14] "+f" (val14), [val15] "+f" (val15) +- : [fTmp1] "f" (fTmp1), [out] "r" (out) ++ [val8] "+&f" (val8), [val9] "+&f" (val9), [val10] "+&f" (val10), ++ [val11] "+&f" (val11), [val12] "+&f" (val12), [val13] "+&f" (val13), ++ [val14] "+&f" (val14), [val15] "+&f" (val15) ++ : [f1] "f" (f1), [out] "r" (out) + ); + + __asm__ volatile ( +@@ -719,24 +719,24 @@ static void ff_dct32_mips_float(float *out, const float *tab) + "sub.s %[fTmp3], %[val19], %[val18] \n\t" + "add.s %[val18], %[val19], %[val18] \n\t" + "sub.s %[fTmp4], %[val20], %[val21] \n\t" +- "mul.s %[val17], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val17], %[f1], %[fTmp2] \n\t" + "add.s %[val20], %[val20], %[val21] \n\t" +- "mul.s %[val19], %[fTmp1], %[fTmp3] \n\t" ++ "mul.s %[val19], %[f1], %[fTmp3] \n\t" + "sub.s %[fTmp2], %[val23], %[val22] \n\t" +- "mul.s %[val21], %[fTmp1], %[fTmp4] \n\t" ++ "mul.s %[val21], %[f1], %[fTmp4] \n\t" + "add.s %[val22], %[val23], %[val22] \n\t" + "add.s %[val18], %[val18], %[val19] \n\t" +- "mul.s %[val23], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val23], %[f1], %[fTmp2] \n\t" + "add.s %[val22], %[val22], %[val23] \n\t" + "add.s %[val20], %[val20], %[val22] \n\t" + "add.s %[val22], %[val22], %[val21] \n\t" + "add.s %[val21], %[val21], %[val23] \n\t" + + : [fTmp2] "=&f" (fTmp2), [fTmp3] "=&f" (fTmp3), [fTmp4] "=&f" (fTmp4), +- [val16] "+f" (val16), [val17] "+f" (val17), [val18] "+f" (val18), +- [val19] "+f" (val19), [val20] "+f" (val20), [val21] "+f" (val21), +- [val22] "+f" (val22), [val23] "+f" (val23) +- : [fTmp1] "f" (fTmp1) ++ [val16] "+&f" (val16), [val17] "+&f" (val17), [val18] "+&f" (val18), ++ [val19] "+&f" (val19), [val20] "+&f" (val20), [val21] "+&f" (val21), ++ [val22] "+&f" (val22), [val23] "+&f" (val23) ++ : [f1] "f" (f1) + ); + + __asm__ volatile ( +@@ -745,14 +745,14 @@ static void ff_dct32_mips_float(float *out, const float *tab) + "sub.s %[fTmp3], %[val27], %[val26] \n\t" + "add.s %[val26], %[val27], %[val26] \n\t" + "sub.s %[fTmp4], %[val28], %[val29] \n\t" +- "mul.s %[val25], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val25], %[f1], %[fTmp2] \n\t" + "add.s %[val28], %[val28], %[val29] \n\t" +- "mul.s %[val27], %[fTmp1], %[fTmp3] \n\t" ++ "mul.s %[val27], %[f1], %[fTmp3] \n\t" + "sub.s %[fTmp2], %[val31], %[val30] \n\t" +- "mul.s %[val29], %[fTmp1], %[fTmp4] \n\t" ++ "mul.s %[val29], %[f1], %[fTmp4] \n\t" + "add.s %[val30], %[val31], %[val30] \n\t" + "add.s %[val26], %[val26], %[val27] \n\t" +- "mul.s %[val31], %[fTmp1], %[fTmp2] \n\t" ++ "mul.s %[val31], %[f1], %[fTmp2] \n\t" + "add.s %[val30], %[val30], %[val31] \n\t" + "add.s %[val28], %[val28], %[val30] \n\t" + "add.s %[val30], %[val30], %[val29] \n\t" +@@ -766,10 +766,10 @@ static void ff_dct32_mips_float(float *out, const float *tab) + "add.s %[val27], %[val27], %[val31] \n\t" + + : [fTmp2] "=&f" (fTmp2), [fTmp3] "=&f" (fTmp3), [fTmp4] "=&f" (fTmp4), +- [val24] "+f" (val24), [val25] "+f" (val25), [val26] "+f" (val26), +- [val27] "+f" (val27), [val28] "+f" (val28), [val29] "+f" (val29), +- [val30] "+f" (val30), [val31] "+f" (val31) +- : [fTmp1] "f" (fTmp1) ++ [val24] "+&f" (val24), [val25] "+&f" (val25), [val26] "+&f" (val26), ++ [val27] "+&f" (val27), [val28] "+&f" (val28), [val29] "+&f" (val29), ++ [val30] "+&f" (val30), [val31] "+&f" (val31) ++ : [f1] "f" (f1) + ); + + out[ 1] = val16 + val24; +@@ -797,7 +797,7 @@ static void imdct36_mips_float(float *out, float *buf, float *in, float *win) + /* temporary variables */ + float in1, in2, in3, in4, in5, in6; + float out1, out2, out3, out4, out5; +- float c1, c2, c3, c4, c5, c6, c7, c8, c9; ++ float f1, f2, f3, f4, f5, f6, f7, f8, f9; + + /** + * all loops are unrolled totally, and instructions are scheduled to +@@ -881,33 +881,36 @@ static void imdct36_mips_float(float *out, float *buf, float *in, float *win) + ); + + /* loop 3 */ ++ f1 = 0.5; ++ f2 = 0.93969262078590838405; ++ f3 = -0.76604444311897803520; ++ f4 = -0.17364817766693034885; ++ f5 = -0.86602540378443864676; ++ f6 = 0.98480775301220805936; ++ f7 = -0.34202014332566873304; ++ f8 = 0.86602540378443864676; ++ f9 = -0.64278760968653932632; + __asm__ volatile ( +- "li.s %[c1], 0.5 \t\n" + "lwc1 %[in1], 8*4(%[in]) \t\n" + "lwc1 %[in2], 16*4(%[in]) \t\n" + "lwc1 %[in3], 4*4(%[in]) \t\n" + "lwc1 %[in4], 0(%[in]) \t\n" + "lwc1 %[in5], 12*4(%[in]) \t\n" +- "li.s %[c2], 0.93969262078590838405 \t\n" + "add.s %[t2], %[in1], %[in2] \t\n" + "add.s %[t0], %[in1], %[in3] \t\n" +- "li.s %[c3], -0.76604444311897803520 \t\n" +- "madd.s %[t3], %[in4], %[in5], %[c1] \t\n" ++ "madd.s %[t3], %[in4], %[in5], %[f1] \t\n" + "sub.s %[t1], %[in4], %[in5] \t\n" + "sub.s %[t2], %[t2], %[in3] \t\n" +- "mul.s %[t0], %[t0], %[c2] \t\n" +- "li.s %[c4], -0.17364817766693034885 \t\n" +- "li.s %[c5], -0.86602540378443864676 \t\n" +- "li.s %[c6], 0.98480775301220805936 \t\n" +- "nmsub.s %[out1], %[t1], %[t2], %[c1] \t\n" ++ "mul.s %[t0], %[t0], %[f2] \t\n" ++ "nmsub.s %[out1], %[t1], %[t2], %[f1] \t\n" + "add.s %[out2], %[t1], %[t2] \t\n" + "add.s %[t2], %[in2], %[in3] \t\n" + "sub.s %[t1], %[in1], %[in2] \t\n" + "sub.s %[out3], %[t3], %[t0] \t\n" + "swc1 %[out1], 6*4(%[tmp]) \t\n" + "swc1 %[out2], 16*4(%[tmp]) \t\n" +- "mul.s %[t2], %[t2], %[c3] \t\n" +- "mul.s %[t1], %[t1], %[c4] \t\n" ++ "mul.s %[t2], %[t2], %[f3] \t\n" ++ "mul.s %[t1], %[t1], %[f4] \t\n" + "add.s %[out1], %[t3], %[t0] \t\n" + "lwc1 %[in1], 10*4(%[in]) \t\n" + "lwc1 %[in2], 14*4(%[in]) \t\n" +@@ -923,19 +926,16 @@ static void imdct36_mips_float(float *out, float *buf, float *in, float *win) + "add.s %[t2], %[in1], %[in3] \t\n" + "sub.s %[t3], %[in1], %[in2] \t\n" + "swc1 %[out2], 14*4(%[tmp]) \t\n" +- "li.s %[c7], -0.34202014332566873304 \t\n" + "sub.s %[out1], %[out1], %[in3] \t\n" +- "mul.s %[t2], %[t2], %[c6] \t\n" +- "mul.s %[t3], %[t3], %[c7] \t\n" +- "li.s %[c8], 0.86602540378443864676 \t\n" +- "mul.s %[t0], %[in4], %[c8] \t\n" +- "mul.s %[out1], %[out1], %[c5] \t\n" ++ "mul.s %[t2], %[t2], %[f6] \t\n" ++ "mul.s %[t3], %[t3], %[f7] \t\n" ++ "mul.s %[t0], %[in4], %[f8] \t\n" ++ "mul.s %[out1], %[out1], %[f5] \t\n" + "add.s %[t1], %[in2], %[in3] \t\n" +- "li.s %[c9], -0.64278760968653932632 \t\n" + "add.s %[out2], %[t2], %[t3] \t\n" + "lwc1 %[in1], 9*4(%[in]) \t\n" + "swc1 %[out1], 4*4(%[tmp]) \t\n" +- "mul.s %[t1], %[t1], %[c9] \t\n" ++ "mul.s %[t1], %[t1], %[f9] \t\n" + "lwc1 %[in2], 17*4(%[in]) \t\n" + "add.s %[out2], %[out2], %[t0] \t\n" + "lwc1 %[in3], 5*4(%[in]) \t\n" +@@ -948,21 +948,21 @@ static void imdct36_mips_float(float *out, float *buf, float *in, float *win) + "sub.s %[out3], %[out3], %[t0] \t\n" + "sub.s %[out1], %[out1], %[t0] \t\n" + "add.s %[t0], %[in1], %[in3] \t\n" +- "madd.s %[t3], %[in4], %[in5], %[c1] \t\n" ++ "madd.s %[t3], %[in4], %[in5], %[f1] \t\n" + "sub.s %[t2], %[t2], %[in3] \t\n" + "swc1 %[out3], 12*4(%[tmp]) \t\n" + "swc1 %[out1], 8*4(%[tmp]) \t\n" + "sub.s %[t1], %[in4], %[in5] \t\n" +- "mul.s %[t0], %[t0], %[c2] \t\n" +- "nmsub.s %[out1], %[t1], %[t2], %[c1] \t\n" ++ "mul.s %[t0], %[t0], %[f2] \t\n" ++ "nmsub.s %[out1], %[t1], %[t2], %[f1] \t\n" + "add.s %[out2], %[t1], %[t2] \t\n" + "add.s %[t2], %[in2], %[in3] \t\n" + "sub.s %[t1], %[in1], %[in2] \t\n" + "sub.s %[out3], %[t3], %[t0] \t\n" + "swc1 %[out1], 7*4(%[tmp]) \t\n" + "swc1 %[out2], 17*4(%[tmp]) \t\n" +- "mul.s %[t2], %[t2], %[c3] \t\n" +- "mul.s %[t1], %[t1], %[c4] \t\n" ++ "mul.s %[t2], %[t2], %[f3] \t\n" ++ "mul.s %[t1], %[t1], %[f4] \t\n" + "add.s %[out1], %[t3], %[t0] \t\n" + "lwc1 %[in1], 11*4(%[in]) \t\n" + "lwc1 %[in2], 15*4(%[in]) \t\n" +@@ -978,14 +978,14 @@ static void imdct36_mips_float(float *out, float *buf, float *in, float *win) + "add.s %[t2], %[in1], %[in3] \t\n" + "sub.s %[t3], %[in1], %[in2] \t\n" + "swc1 %[out2], 15*4(%[tmp]) \t\n" +- "mul.s %[t0], %[in4], %[c8] \t\n" ++ "mul.s %[t0], %[in4], %[f8] \t\n" + "sub.s %[out3], %[out3], %[in3] \t\n" +- "mul.s %[t2], %[t2], %[c6] \t\n" +- "mul.s %[t3], %[t3], %[c7] \t\n" ++ "mul.s %[t2], %[t2], %[f6] \t\n" ++ "mul.s %[t3], %[t3], %[f7] \t\n" + "add.s %[t1], %[in2], %[in3] \t\n" +- "mul.s %[out3], %[out3], %[c5] \t\n" ++ "mul.s %[out3], %[out3], %[f5] \t\n" + "add.s %[out1], %[t2], %[t3] \t\n" +- "mul.s %[t1], %[t1], %[c9] \t\n" ++ "mul.s %[t1], %[t1], %[f9] \t\n" + "swc1 %[out3], 5*4(%[tmp]) \t\n" + "add.s %[out1], %[out1], %[t0] \t\n" + "add.s %[out2], %[t2], %[t1] \t\n" +@@ -1000,26 +1000,29 @@ static void imdct36_mips_float(float *out, float *buf, float *in, float *win) + [t2] "=&f" (t2), [t3] "=&f" (t3), + [in1] "=&f" (in1), [in2] "=&f" (in2), + [in3] "=&f" (in3), [in4] "=&f" (in4), +- [in5] "=&f" (in5), +- [out1] "=&f" (out1), [out2] "=&f" (out2), +- [out3] "=&f" (out3), +- [c1] "=&f" (c1), [c2] "=&f" (c2), +- [c3] "=&f" (c3), [c4] "=&f" (c4), +- [c5] "=&f" (c5), [c6] "=&f" (c6), +- [c7] "=&f" (c7), [c8] "=&f" (c8), +- [c9] "=&f" (c9) +- : [in] "r" (in), [tmp] "r" (tmp) ++ [in5] "=&f" (in5), [out1] "=&f" (out1), ++ [out2] "=&f" (out2), [out3] "=&f" (out3) ++ : [in] "r" (in), [tmp] "r" (tmp), [f1]"f"(f1), [f2]"f"(f2), ++ [f3]"f"(f3), [f4]"f"(f4), [f5]"f"(f5), [f6]"f"(f6), ++ [f7]"f"(f7), [f8]"f"(f8), [f9]"f"(f9) + : "memory" + ); + + /* loop 4 */ ++ f1 = 0.50190991877167369479; ++ f2 = 5.73685662283492756461; ++ f3 = 0.51763809020504152469; ++ f4 = 1.93185165257813657349; ++ f5 = 0.55168895948124587824; ++ f6 = 1.18310079157624925896; ++ f7 = 0.61038729438072803416; ++ f8 = 0.87172339781054900991; ++ f9 = 0.70710678118654752439; + __asm__ volatile ( + "lwc1 %[in1], 2*4(%[tmp]) \t\n" + "lwc1 %[in2], 0(%[tmp]) \t\n" + "lwc1 %[in3], 3*4(%[tmp]) \t\n" + "lwc1 %[in4], 1*4(%[tmp]) \t\n" +- "li.s %[c1], 0.50190991877167369479 \t\n" +- "li.s %[c2], 5.73685662283492756461 \t\n" + "add.s %[s0], %[in1], %[in2] \t\n" + "sub.s %[s2], %[in1], %[in2] \t\n" + "add.s %[s1], %[in3], %[in4] \t\n" +@@ -1027,15 +1030,13 @@ static void imdct36_mips_float(float *out, float *buf, float *in, float *win) + "lwc1 %[in1], 9*4(%[win]) \t\n" + "lwc1 %[in2], 4*9*4(%[buf]) \t\n" + "lwc1 %[in3], 8*4(%[win]) \t\n" +- "mul.s %[s1], %[s1], %[c1] \t\n" +- "mul.s %[s3], %[s3], %[c2] \t\n" ++ "mul.s %[s1], %[s1], %[f1] \t\n" ++ "mul.s %[s3], %[s3], %[f2] \t\n" + "lwc1 %[in4], 4*8*4(%[buf]) \t\n" + "lwc1 %[in5], 29*4(%[win]) \t\n" + "lwc1 %[in6], 28*4(%[win]) \t\n" + "add.s %[t0], %[s0], %[s1] \t\n" + "sub.s %[t1], %[s0], %[s1] \t\n" +- "li.s %[c1], 0.51763809020504152469 \t\n" +- "li.s %[c2], 1.93185165257813657349 \t\n" + "mul.s %[out3], %[in5], %[t0] \t\n" + "madd.s %[out1], %[in2], %[in1], %[t1] \t\n" + "madd.s %[out2], %[in4], %[in3], %[t1] \t\n" +@@ -1071,14 +1072,13 @@ static void imdct36_mips_float(float *out, float *buf, float *in, float *win) + "lwc1 %[in1], 10*4(%[win]) \t\n" + "lwc1 %[in2], 4*10*4(%[buf]) \t\n" + "lwc1 %[in3], 7*4(%[win]) \t\n" +- "mul.s %[s1], %[s1], %[c1] \t\n" +- "mul.s %[s3], %[s3], %[c2] \t\n" ++ "mul.s %[s1], %[s1], %[f3] \t\n" ++ "mul.s %[s3], %[s3], %[f4] \t\n" + "add.s %[t0], %[s0], %[s1] \t\n" + "sub.s %[t1], %[s0], %[s1] \t\n" + "lwc1 %[in4], 4*7*4(%[buf]) \t\n" + "lwc1 %[in5], 30*4(%[win]) \t\n" + "lwc1 %[in6], 27*4(%[win]) \t\n" +- "li.s %[c1], 0.55168895948124587824 \t\n" + "madd.s %[out1], %[in2], %[in1], %[t1] \t\n" + "madd.s %[out2], %[in4], %[in3], %[t1] \t\n" + "mul.s %[out3], %[t0], %[in5] \t\n" +@@ -1105,7 +1105,6 @@ static void imdct36_mips_float(float *out, float *buf, float *in, float *win) + "swc1 %[out2], 32*4(%[out]) \t\n" + "swc1 %[out3], 4*16*4(%[buf]) \t\n" + "swc1 %[out4], 4*1*4(%[buf]) \t\n" +- "li.s %[c2], 1.18310079157624925896 \t\n" + "add.s %[s0], %[in1], %[in2] \t\n" + "sub.s %[s2], %[in1], %[in2] \t\n" + "lwc1 %[in3], 11*4(%[tmp]) \t\n" +@@ -1115,8 +1114,8 @@ static void imdct36_mips_float(float *out, float *buf, float *in, float *win) + "lwc1 %[in1], 11*4(%[win]) \t\n" + "lwc1 %[in2], 4*11*4(%[buf]) \t\n" + "lwc1 %[in3], 6*4(%[win]) \t\n" +- "mul.s %[s1], %[s1], %[c1] \t\n" +- "mul.s %[s3], %[s3], %[c2] \t\n" ++ "mul.s %[s1], %[s1], %[f5] \t\n" ++ "mul.s %[s3], %[s3], %[f6] \t\n" + "lwc1 %[in4], 4*6*4(%[buf]) \t\n" + "lwc1 %[in5], 31*4(%[win]) \t\n" + "lwc1 %[in6], 26*4(%[win]) \t\n" +@@ -1152,15 +1151,13 @@ static void imdct36_mips_float(float *out, float *buf, float *in, float *win) + "add.s %[s0], %[in1], %[in2] \t\n" + "sub.s %[s2], %[in1], %[in2] \t\n" + "lwc1 %[in4], 13*4(%[tmp]) \t\n" +- "li.s %[c1], 0.61038729438072803416 \t\n" +- "li.s %[c2], 0.87172339781054900991 \t\n" + "add.s %[s1], %[in3], %[in4] \t\n" + "sub.s %[s3], %[in3], %[in4] \t\n" + "lwc1 %[in1], 12*4(%[win]) \t\n" + "lwc1 %[in2], 4*12*4(%[buf]) \t\n" + "lwc1 %[in3], 5*4(%[win]) \t\n" +- "mul.s %[s1], %[s1], %[c1] \t\n" +- "mul.s %[s3], %[s3], %[c2] \t\n" ++ "mul.s %[s1], %[s1], %[f7] \t\n" ++ "mul.s %[s3], %[s3], %[f8] \t\n" + "lwc1 %[in4], 4*5*4(%[buf]) \t\n" + "lwc1 %[in5], 32*4(%[win]) \t\n" + "lwc1 %[in6], 25*4(%[win]) \t\n" +@@ -1168,7 +1165,6 @@ static void imdct36_mips_float(float *out, float *buf, float *in, float *win) + "sub.s %[t1], %[s0], %[s1] \t\n" + "lwc1 %[s0], 16*4(%[tmp]) \t\n" + "lwc1 %[s1], 17*4(%[tmp]) \t\n" +- "li.s %[c1], 0.70710678118654752439 \t\n" + "mul.s %[out3], %[t0], %[in5] \t\n" + "madd.s %[out1], %[in2], %[in1], %[t1] \t\n" + "madd.s %[out2], %[in4], %[in3], %[t1] \t\n" +@@ -1186,7 +1182,7 @@ static void imdct36_mips_float(float *out, float *buf, float *in, float *win) + "lwc1 %[in5], 34*4(%[win]) \t\n" + "lwc1 %[in6], 23*4(%[win]) \t\n" + "madd.s %[out1], %[in2], %[in1], %[t1] \t\n" +- "mul.s %[s1], %[s1], %[c1] \t\n" ++ "mul.s %[s1], %[s1], %[f9] \t\n" + "madd.s %[out2], %[in4], %[in3], %[t1] \t\n" + "mul.s %[out3], %[in5], %[t0] \t\n" + "mul.s %[out4], %[in6], %[t0] \t\n" +@@ -1211,18 +1207,18 @@ static void imdct36_mips_float(float *out, float *buf, float *in, float *win) + "swc1 %[out3], 4*13*4(%[buf]) \t\n" + "swc1 %[out4], 4*4*4(%[buf]) \t\n" + +- : [c1] "=&f" (c1), [c2] "=&f" (c2), +- [in1] "=&f" (in1), [in2] "=&f" (in2), ++ : [in1] "=&f" (in1), [in2] "=&f" (in2), + [in3] "=&f" (in3), [in4] "=&f" (in4), + [in5] "=&f" (in5), [in6] "=&f" (in6), + [out1] "=&f" (out1), [out2] "=&f" (out2), + [out3] "=&f" (out3), [out4] "=&f" (out4), + [t0] "=&f" (t0), [t1] "=&f" (t1), +- [t2] "=&f" (t2), [t3] "=&f" (t3), + [s0] "=&f" (s0), [s1] "=&f" (s1), + [s2] "=&f" (s2), [s3] "=&f" (s3) + : [tmp] "r" (tmp), [win] "r" (win), +- [buf] "r" (buf), [out] "r" (out) ++ [buf] "r" (buf), [out] "r" (out), ++ [f1]"f"(f1), [f2]"f"(f2), [f3]"f"(f3), [f4]"f"(f4), ++ [f5]"f"(f5), [f6]"f"(f6), [f7]"f"(f7), [f8]"f"(f8), [f9]"f"(f9) + : "memory" + ); + } +diff --git a/libavcodec/mips/mpegvideo_init_mips.c b/libavcodec/mips/mpegvideo_init_mips.c +index 1918da5..bfda90b 100644 +--- a/libavcodec/mips/mpegvideo_init_mips.c ++++ b/libavcodec/mips/mpegvideo_init_mips.c +@@ -18,41 +18,31 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/mips/cpu.h" + #include "h263dsp_mips.h" + #include "mpegvideo_mips.h" + +-#if HAVE_MSA +-static av_cold void dct_unquantize_init_msa(MpegEncContext *s) ++av_cold void ff_mpv_common_init_mips(MpegEncContext *s) + { +- s->dct_unquantize_h263_intra = ff_dct_unquantize_h263_intra_msa; +- s->dct_unquantize_h263_inter = ff_dct_unquantize_h263_inter_msa; +- if (!s->q_scale_type) +- s->dct_unquantize_mpeg2_inter = ff_dct_unquantize_mpeg2_inter_msa; +-} +-#endif // #if HAVE_MSA ++ int cpu_flags = av_get_cpu_flags(); + +-#if HAVE_MMI +-static av_cold void dct_unquantize_init_mmi(MpegEncContext *s) +-{ +- s->dct_unquantize_h263_intra = ff_dct_unquantize_h263_intra_mmi; +- s->dct_unquantize_h263_inter = ff_dct_unquantize_h263_inter_mmi; +- s->dct_unquantize_mpeg1_intra = ff_dct_unquantize_mpeg1_intra_mmi; +- s->dct_unquantize_mpeg1_inter = ff_dct_unquantize_mpeg1_inter_mmi; ++ if (have_mmi(cpu_flags)) { ++ s->dct_unquantize_h263_intra = ff_dct_unquantize_h263_intra_mmi; ++ s->dct_unquantize_h263_inter = ff_dct_unquantize_h263_inter_mmi; ++ s->dct_unquantize_mpeg1_intra = ff_dct_unquantize_mpeg1_intra_mmi; ++ s->dct_unquantize_mpeg1_inter = ff_dct_unquantize_mpeg1_inter_mmi; + +- if (!(s->avctx->flags & AV_CODEC_FLAG_BITEXACT)) +- if (!s->q_scale_type) +- s->dct_unquantize_mpeg2_intra = ff_dct_unquantize_mpeg2_intra_mmi; ++ if (!(s->avctx->flags & AV_CODEC_FLAG_BITEXACT)) ++ if (!s->q_scale_type) ++ s->dct_unquantize_mpeg2_intra = ff_dct_unquantize_mpeg2_intra_mmi; + +- s->denoise_dct= ff_denoise_dct_mmi; +-} +-#endif /* HAVE_MMI */ ++ s->denoise_dct= ff_denoise_dct_mmi; ++ } + +-av_cold void ff_mpv_common_init_mips(MpegEncContext *s) +-{ +-#if HAVE_MSA +- dct_unquantize_init_msa(s); +-#endif // #if HAVE_MSA +-#if HAVE_MMI +- dct_unquantize_init_mmi(s); +-#endif /* HAVE_MMI */ ++ if (have_msa(cpu_flags)) { ++ s->dct_unquantize_h263_intra = ff_dct_unquantize_h263_intra_msa; ++ s->dct_unquantize_h263_inter = ff_dct_unquantize_h263_inter_msa; ++ if (!s->q_scale_type) ++ s->dct_unquantize_mpeg2_inter = ff_dct_unquantize_mpeg2_inter_msa; ++ } + } +diff --git a/libavcodec/mips/mpegvideo_mmi.c b/libavcodec/mips/mpegvideo_mmi.c +index 18058e4..e4aba08 100644 +--- a/libavcodec/mips/mpegvideo_mmi.c ++++ b/libavcodec/mips/mpegvideo_mmi.c +@@ -410,9 +410,9 @@ void ff_dct_unquantize_mpeg2_intra_mmi(MpegEncContext *s, int16_t *block, + "psubh %[ftmp2], %[ftmp2], %[ftmp8] \n\t" + "pandn %[ftmp5], %[ftmp5], %[ftmp1] \n\t" + "pandn %[ftmp6], %[ftmp6], %[ftmp2] \n\t" +- PTR_ADDIU "%[addr0], %[addr0], 0x10 \n\t" + MMI_SDXC1(%[ftmp5], %[addr0], %[block], 0x00) + MMI_SDXC1(%[ftmp6], %[addr0], %[block], 0x08) ++ PTR_ADDIU "%[addr0], %[addr0], 0x10 \n\t" + "blez %[addr0], 1b \n\t" + : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), + [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), +diff --git a/libavcodec/mips/mpegvideoencdsp_init_mips.c b/libavcodec/mips/mpegvideoencdsp_init_mips.c +index 9bfe94e..71831a6 100644 +--- a/libavcodec/mips/mpegvideoencdsp_init_mips.c ++++ b/libavcodec/mips/mpegvideoencdsp_init_mips.c +@@ -18,23 +18,18 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/mips/cpu.h" + #include "libavcodec/bit_depth_template.c" + #include "h263dsp_mips.h" + +-#if HAVE_MSA +-static av_cold void mpegvideoencdsp_init_msa(MpegvideoEncDSPContext *c, +- AVCodecContext *avctx) +-{ +-#if BIT_DEPTH == 8 +- c->pix_sum = ff_pix_sum_msa; +-#endif +-} +-#endif // #if HAVE_MSA +- + av_cold void ff_mpegvideoencdsp_init_mips(MpegvideoEncDSPContext *c, + AVCodecContext *avctx) + { +-#if HAVE_MSA +- mpegvideoencdsp_init_msa(c, avctx); +-#endif // #if HAVE_MSA ++ int cpu_flags = av_get_cpu_flags(); ++ ++ if (have_msa(cpu_flags)) { ++#if BIT_DEPTH == 8 ++ c->pix_sum = ff_pix_sum_msa; ++#endif ++ } + } +diff --git a/libavcodec/mips/pixblockdsp_init_mips.c b/libavcodec/mips/pixblockdsp_init_mips.c +index 1b3741e..2e2d709 100644 +--- a/libavcodec/mips/pixblockdsp_init_mips.c ++++ b/libavcodec/mips/pixblockdsp_init_mips.c +@@ -19,51 +19,38 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/mips/cpu.h" + #include "pixblockdsp_mips.h" + +-#if HAVE_MSA +-static av_cold void pixblockdsp_init_msa(PixblockDSPContext *c, +- AVCodecContext *avctx, +- unsigned high_bit_depth) ++void ff_pixblockdsp_init_mips(PixblockDSPContext *c, AVCodecContext *avctx, ++ unsigned high_bit_depth) + { +- c->diff_pixels = ff_diff_pixels_msa; ++ int cpu_flags = av_get_cpu_flags(); ++ ++ if (have_mmi(cpu_flags)) { ++ c->diff_pixels = ff_diff_pixels_mmi; + +- switch (avctx->bits_per_raw_sample) { +- case 9: +- case 10: +- case 12: +- case 14: +- c->get_pixels = ff_get_pixels_16_msa; +- break; +- default: +- if (avctx->bits_per_raw_sample <= 8 || avctx->codec_type != +- AVMEDIA_TYPE_VIDEO) { +- c->get_pixels = ff_get_pixels_8_msa; ++ if (!high_bit_depth || avctx->codec_type != AVMEDIA_TYPE_VIDEO) { ++ c->get_pixels = ff_get_pixels_8_mmi; + } +- break; + } +-} +-#endif // #if HAVE_MSA + +-#if HAVE_MMI +-static av_cold void pixblockdsp_init_mmi(PixblockDSPContext *c, +- AVCodecContext *avctx, unsigned high_bit_depth) +-{ +- c->diff_pixels = ff_diff_pixels_mmi; ++ if (have_msa(cpu_flags)) { ++ c->diff_pixels = ff_diff_pixels_msa; + +- if (!high_bit_depth || avctx->codec_type != AVMEDIA_TYPE_VIDEO) { +- c->get_pixels = ff_get_pixels_8_mmi; ++ switch (avctx->bits_per_raw_sample) { ++ case 9: ++ case 10: ++ case 12: ++ case 14: ++ c->get_pixels = ff_get_pixels_16_msa; ++ break; ++ default: ++ if (avctx->bits_per_raw_sample <= 8 || avctx->codec_type != ++ AVMEDIA_TYPE_VIDEO) { ++ c->get_pixels = ff_get_pixels_8_msa; ++ } ++ break; ++ } + } + } +-#endif /* HAVE_MMI */ +- +-void ff_pixblockdsp_init_mips(PixblockDSPContext *c, AVCodecContext *avctx, +- unsigned high_bit_depth) +-{ +-#if HAVE_MSA +- pixblockdsp_init_msa(c, avctx, high_bit_depth); +-#endif // #if HAVE_MSA +-#if HAVE_MMI +- pixblockdsp_init_mmi(c, avctx, high_bit_depth); +-#endif /* HAVE_MMI */ +-} +diff --git a/libavcodec/mips/qpeldsp_init_mips.c b/libavcodec/mips/qpeldsp_init_mips.c +index 140e8f8..cccf9d4 100644 +--- a/libavcodec/mips/qpeldsp_init_mips.c ++++ b/libavcodec/mips/qpeldsp_init_mips.c +@@ -18,150 +18,146 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/mips/cpu.h" + #include "qpeldsp_mips.h" + +-#if HAVE_MSA +-static av_cold void qpeldsp_init_msa(QpelDSPContext *c) ++void ff_qpeldsp_init_mips(QpelDSPContext *c) + { +- c->put_qpel_pixels_tab[0][0] = ff_copy_16x16_msa; +- c->put_qpel_pixels_tab[0][1] = ff_horiz_mc_qpel_aver_src0_16width_msa; +- c->put_qpel_pixels_tab[0][2] = ff_horiz_mc_qpel_16width_msa; +- c->put_qpel_pixels_tab[0][3] = ff_horiz_mc_qpel_aver_src1_16width_msa; +- c->put_qpel_pixels_tab[0][4] = ff_vert_mc_qpel_aver_src0_16x16_msa; +- c->put_qpel_pixels_tab[0][5] = ff_hv_mc_qpel_aver_hv_src00_16x16_msa; +- c->put_qpel_pixels_tab[0][6] = ff_hv_mc_qpel_aver_v_src0_16x16_msa; +- c->put_qpel_pixels_tab[0][7] = ff_hv_mc_qpel_aver_hv_src10_16x16_msa; +- c->put_qpel_pixels_tab[0][8] = ff_vert_mc_qpel_16x16_msa; +- c->put_qpel_pixels_tab[0][9] = ff_hv_mc_qpel_aver_h_src0_16x16_msa; +- c->put_qpel_pixels_tab[0][10] = ff_hv_mc_qpel_16x16_msa; +- c->put_qpel_pixels_tab[0][11] = ff_hv_mc_qpel_aver_h_src1_16x16_msa; +- c->put_qpel_pixels_tab[0][12] = ff_vert_mc_qpel_aver_src1_16x16_msa; +- c->put_qpel_pixels_tab[0][13] = ff_hv_mc_qpel_aver_hv_src01_16x16_msa; +- c->put_qpel_pixels_tab[0][14] = ff_hv_mc_qpel_aver_v_src1_16x16_msa; +- c->put_qpel_pixels_tab[0][15] = ff_hv_mc_qpel_aver_hv_src11_16x16_msa; ++ int cpu_flags = av_get_cpu_flags(); + +- c->put_qpel_pixels_tab[1][0] = ff_copy_8x8_msa; +- c->put_qpel_pixels_tab[1][1] = ff_horiz_mc_qpel_aver_src0_8width_msa; +- c->put_qpel_pixels_tab[1][2] = ff_horiz_mc_qpel_8width_msa; +- c->put_qpel_pixels_tab[1][3] = ff_horiz_mc_qpel_aver_src1_8width_msa; +- c->put_qpel_pixels_tab[1][4] = ff_vert_mc_qpel_aver_src0_8x8_msa; +- c->put_qpel_pixels_tab[1][5] = ff_hv_mc_qpel_aver_hv_src00_8x8_msa; +- c->put_qpel_pixels_tab[1][6] = ff_hv_mc_qpel_aver_v_src0_8x8_msa; +- c->put_qpel_pixels_tab[1][7] = ff_hv_mc_qpel_aver_hv_src10_8x8_msa; +- c->put_qpel_pixels_tab[1][8] = ff_vert_mc_qpel_8x8_msa; +- c->put_qpel_pixels_tab[1][9] = ff_hv_mc_qpel_aver_h_src0_8x8_msa; +- c->put_qpel_pixels_tab[1][10] = ff_hv_mc_qpel_8x8_msa; +- c->put_qpel_pixels_tab[1][11] = ff_hv_mc_qpel_aver_h_src1_8x8_msa; +- c->put_qpel_pixels_tab[1][12] = ff_vert_mc_qpel_aver_src1_8x8_msa; +- c->put_qpel_pixels_tab[1][13] = ff_hv_mc_qpel_aver_hv_src01_8x8_msa; +- c->put_qpel_pixels_tab[1][14] = ff_hv_mc_qpel_aver_v_src1_8x8_msa; +- c->put_qpel_pixels_tab[1][15] = ff_hv_mc_qpel_aver_hv_src11_8x8_msa; ++ if (have_msa(cpu_flags)) { ++ c->put_qpel_pixels_tab[0][0] = ff_copy_16x16_msa; ++ c->put_qpel_pixels_tab[0][1] = ff_horiz_mc_qpel_aver_src0_16width_msa; ++ c->put_qpel_pixels_tab[0][2] = ff_horiz_mc_qpel_16width_msa; ++ c->put_qpel_pixels_tab[0][3] = ff_horiz_mc_qpel_aver_src1_16width_msa; ++ c->put_qpel_pixels_tab[0][4] = ff_vert_mc_qpel_aver_src0_16x16_msa; ++ c->put_qpel_pixels_tab[0][5] = ff_hv_mc_qpel_aver_hv_src00_16x16_msa; ++ c->put_qpel_pixels_tab[0][6] = ff_hv_mc_qpel_aver_v_src0_16x16_msa; ++ c->put_qpel_pixels_tab[0][7] = ff_hv_mc_qpel_aver_hv_src10_16x16_msa; ++ c->put_qpel_pixels_tab[0][8] = ff_vert_mc_qpel_16x16_msa; ++ c->put_qpel_pixels_tab[0][9] = ff_hv_mc_qpel_aver_h_src0_16x16_msa; ++ c->put_qpel_pixels_tab[0][10] = ff_hv_mc_qpel_16x16_msa; ++ c->put_qpel_pixels_tab[0][11] = ff_hv_mc_qpel_aver_h_src1_16x16_msa; ++ c->put_qpel_pixels_tab[0][12] = ff_vert_mc_qpel_aver_src1_16x16_msa; ++ c->put_qpel_pixels_tab[0][13] = ff_hv_mc_qpel_aver_hv_src01_16x16_msa; ++ c->put_qpel_pixels_tab[0][14] = ff_hv_mc_qpel_aver_v_src1_16x16_msa; ++ c->put_qpel_pixels_tab[0][15] = ff_hv_mc_qpel_aver_hv_src11_16x16_msa; + +- c->put_no_rnd_qpel_pixels_tab[0][0] = ff_copy_16x16_msa; +- c->put_no_rnd_qpel_pixels_tab[0][1] = +- ff_horiz_mc_qpel_no_rnd_aver_src0_16width_msa; +- c->put_no_rnd_qpel_pixels_tab[0][2] = ff_horiz_mc_qpel_no_rnd_16width_msa; +- c->put_no_rnd_qpel_pixels_tab[0][3] = +- ff_horiz_mc_qpel_no_rnd_aver_src1_16width_msa; +- c->put_no_rnd_qpel_pixels_tab[0][4] = +- ff_vert_mc_qpel_no_rnd_aver_src0_16x16_msa; +- c->put_no_rnd_qpel_pixels_tab[0][5] = +- ff_hv_mc_qpel_no_rnd_aver_hv_src00_16x16_msa; +- c->put_no_rnd_qpel_pixels_tab[0][6] = +- ff_hv_mc_qpel_no_rnd_aver_v_src0_16x16_msa; +- c->put_no_rnd_qpel_pixels_tab[0][7] = +- ff_hv_mc_qpel_no_rnd_aver_hv_src10_16x16_msa; +- c->put_no_rnd_qpel_pixels_tab[0][8] = ff_vert_mc_qpel_no_rnd_16x16_msa; +- c->put_no_rnd_qpel_pixels_tab[0][9] = +- ff_hv_mc_qpel_no_rnd_aver_h_src0_16x16_msa; +- c->put_no_rnd_qpel_pixels_tab[0][10] = ff_hv_mc_qpel_no_rnd_16x16_msa; +- c->put_no_rnd_qpel_pixels_tab[0][11] = +- ff_hv_mc_qpel_no_rnd_aver_h_src1_16x16_msa; +- c->put_no_rnd_qpel_pixels_tab[0][12] = +- ff_vert_mc_qpel_no_rnd_aver_src1_16x16_msa; +- c->put_no_rnd_qpel_pixels_tab[0][13] = +- ff_hv_mc_qpel_no_rnd_aver_hv_src01_16x16_msa; +- c->put_no_rnd_qpel_pixels_tab[0][14] = +- ff_hv_mc_qpel_no_rnd_aver_v_src1_16x16_msa; +- c->put_no_rnd_qpel_pixels_tab[0][15] = +- ff_hv_mc_qpel_no_rnd_aver_hv_src11_16x16_msa; ++ c->put_qpel_pixels_tab[1][0] = ff_copy_8x8_msa; ++ c->put_qpel_pixels_tab[1][1] = ff_horiz_mc_qpel_aver_src0_8width_msa; ++ c->put_qpel_pixels_tab[1][2] = ff_horiz_mc_qpel_8width_msa; ++ c->put_qpel_pixels_tab[1][3] = ff_horiz_mc_qpel_aver_src1_8width_msa; ++ c->put_qpel_pixels_tab[1][4] = ff_vert_mc_qpel_aver_src0_8x8_msa; ++ c->put_qpel_pixels_tab[1][5] = ff_hv_mc_qpel_aver_hv_src00_8x8_msa; ++ c->put_qpel_pixels_tab[1][6] = ff_hv_mc_qpel_aver_v_src0_8x8_msa; ++ c->put_qpel_pixels_tab[1][7] = ff_hv_mc_qpel_aver_hv_src10_8x8_msa; ++ c->put_qpel_pixels_tab[1][8] = ff_vert_mc_qpel_8x8_msa; ++ c->put_qpel_pixels_tab[1][9] = ff_hv_mc_qpel_aver_h_src0_8x8_msa; ++ c->put_qpel_pixels_tab[1][10] = ff_hv_mc_qpel_8x8_msa; ++ c->put_qpel_pixels_tab[1][11] = ff_hv_mc_qpel_aver_h_src1_8x8_msa; ++ c->put_qpel_pixels_tab[1][12] = ff_vert_mc_qpel_aver_src1_8x8_msa; ++ c->put_qpel_pixels_tab[1][13] = ff_hv_mc_qpel_aver_hv_src01_8x8_msa; ++ c->put_qpel_pixels_tab[1][14] = ff_hv_mc_qpel_aver_v_src1_8x8_msa; ++ c->put_qpel_pixels_tab[1][15] = ff_hv_mc_qpel_aver_hv_src11_8x8_msa; + +- c->put_no_rnd_qpel_pixels_tab[1][0] = ff_copy_8x8_msa; +- c->put_no_rnd_qpel_pixels_tab[1][1] = +- ff_horiz_mc_qpel_no_rnd_aver_src0_8width_msa; +- c->put_no_rnd_qpel_pixels_tab[1][2] = ff_horiz_mc_qpel_no_rnd_8width_msa; +- c->put_no_rnd_qpel_pixels_tab[1][3] = +- ff_horiz_mc_qpel_no_rnd_aver_src1_8width_msa; +- c->put_no_rnd_qpel_pixels_tab[1][4] = +- ff_vert_mc_qpel_no_rnd_aver_src0_8x8_msa; +- c->put_no_rnd_qpel_pixels_tab[1][5] = +- ff_hv_mc_qpel_no_rnd_aver_hv_src00_8x8_msa; +- c->put_no_rnd_qpel_pixels_tab[1][6] = +- ff_hv_mc_qpel_no_rnd_aver_v_src0_8x8_msa; +- c->put_no_rnd_qpel_pixels_tab[1][7] = +- ff_hv_mc_qpel_no_rnd_aver_hv_src10_8x8_msa; +- c->put_no_rnd_qpel_pixels_tab[1][8] = ff_vert_mc_qpel_no_rnd_8x8_msa; +- c->put_no_rnd_qpel_pixels_tab[1][9] = +- ff_hv_mc_qpel_no_rnd_aver_h_src0_8x8_msa; +- c->put_no_rnd_qpel_pixels_tab[1][10] = ff_hv_mc_qpel_no_rnd_8x8_msa; +- c->put_no_rnd_qpel_pixels_tab[1][11] = +- ff_hv_mc_qpel_no_rnd_aver_h_src1_8x8_msa; +- c->put_no_rnd_qpel_pixels_tab[1][12] = +- ff_vert_mc_qpel_no_rnd_aver_src1_8x8_msa; +- c->put_no_rnd_qpel_pixels_tab[1][13] = +- ff_hv_mc_qpel_no_rnd_aver_hv_src01_8x8_msa; +- c->put_no_rnd_qpel_pixels_tab[1][14] = +- ff_hv_mc_qpel_no_rnd_aver_v_src1_8x8_msa; +- c->put_no_rnd_qpel_pixels_tab[1][15] = +- ff_hv_mc_qpel_no_rnd_aver_hv_src11_8x8_msa; ++ c->put_no_rnd_qpel_pixels_tab[0][0] = ff_copy_16x16_msa; ++ c->put_no_rnd_qpel_pixels_tab[0][1] = ++ ff_horiz_mc_qpel_no_rnd_aver_src0_16width_msa; ++ c->put_no_rnd_qpel_pixels_tab[0][2] = ff_horiz_mc_qpel_no_rnd_16width_msa; ++ c->put_no_rnd_qpel_pixels_tab[0][3] = ++ ff_horiz_mc_qpel_no_rnd_aver_src1_16width_msa; ++ c->put_no_rnd_qpel_pixels_tab[0][4] = ++ ff_vert_mc_qpel_no_rnd_aver_src0_16x16_msa; ++ c->put_no_rnd_qpel_pixels_tab[0][5] = ++ ff_hv_mc_qpel_no_rnd_aver_hv_src00_16x16_msa; ++ c->put_no_rnd_qpel_pixels_tab[0][6] = ++ ff_hv_mc_qpel_no_rnd_aver_v_src0_16x16_msa; ++ c->put_no_rnd_qpel_pixels_tab[0][7] = ++ ff_hv_mc_qpel_no_rnd_aver_hv_src10_16x16_msa; ++ c->put_no_rnd_qpel_pixels_tab[0][8] = ff_vert_mc_qpel_no_rnd_16x16_msa; ++ c->put_no_rnd_qpel_pixels_tab[0][9] = ++ ff_hv_mc_qpel_no_rnd_aver_h_src0_16x16_msa; ++ c->put_no_rnd_qpel_pixels_tab[0][10] = ff_hv_mc_qpel_no_rnd_16x16_msa; ++ c->put_no_rnd_qpel_pixels_tab[0][11] = ++ ff_hv_mc_qpel_no_rnd_aver_h_src1_16x16_msa; ++ c->put_no_rnd_qpel_pixels_tab[0][12] = ++ ff_vert_mc_qpel_no_rnd_aver_src1_16x16_msa; ++ c->put_no_rnd_qpel_pixels_tab[0][13] = ++ ff_hv_mc_qpel_no_rnd_aver_hv_src01_16x16_msa; ++ c->put_no_rnd_qpel_pixels_tab[0][14] = ++ ff_hv_mc_qpel_no_rnd_aver_v_src1_16x16_msa; ++ c->put_no_rnd_qpel_pixels_tab[0][15] = ++ ff_hv_mc_qpel_no_rnd_aver_hv_src11_16x16_msa; + +- c->avg_qpel_pixels_tab[0][0] = ff_avg_width16_msa; +- c->avg_qpel_pixels_tab[0][1] = +- ff_horiz_mc_qpel_avg_dst_aver_src0_16width_msa; +- c->avg_qpel_pixels_tab[0][2] = ff_horiz_mc_qpel_avg_dst_16width_msa; +- c->avg_qpel_pixels_tab[0][3] = +- ff_horiz_mc_qpel_avg_dst_aver_src1_16width_msa; +- c->avg_qpel_pixels_tab[0][4] = ff_vert_mc_qpel_avg_dst_aver_src0_16x16_msa; +- c->avg_qpel_pixels_tab[0][5] = +- ff_hv_mc_qpel_avg_dst_aver_hv_src00_16x16_msa; +- c->avg_qpel_pixels_tab[0][6] = ff_hv_mc_qpel_avg_dst_aver_v_src0_16x16_msa; +- c->avg_qpel_pixels_tab[0][7] = +- ff_hv_mc_qpel_avg_dst_aver_hv_src10_16x16_msa; +- c->avg_qpel_pixels_tab[0][8] = ff_vert_mc_qpel_avg_dst_16x16_msa; +- c->avg_qpel_pixels_tab[0][9] = ff_hv_mc_qpel_avg_dst_aver_h_src0_16x16_msa; +- c->avg_qpel_pixels_tab[0][10] = ff_hv_mc_qpel_avg_dst_16x16_msa; +- c->avg_qpel_pixels_tab[0][11] = ff_hv_mc_qpel_avg_dst_aver_h_src1_16x16_msa; +- c->avg_qpel_pixels_tab[0][12] = ff_vert_mc_qpel_avg_dst_aver_src1_16x16_msa; +- c->avg_qpel_pixels_tab[0][13] = +- ff_hv_mc_qpel_avg_dst_aver_hv_src01_16x16_msa; +- c->avg_qpel_pixels_tab[0][14] = ff_hv_mc_qpel_avg_dst_aver_v_src1_16x16_msa; +- c->avg_qpel_pixels_tab[0][15] = +- ff_hv_mc_qpel_avg_dst_aver_hv_src11_16x16_msa; ++ c->put_no_rnd_qpel_pixels_tab[1][0] = ff_copy_8x8_msa; ++ c->put_no_rnd_qpel_pixels_tab[1][1] = ++ ff_horiz_mc_qpel_no_rnd_aver_src0_8width_msa; ++ c->put_no_rnd_qpel_pixels_tab[1][2] = ff_horiz_mc_qpel_no_rnd_8width_msa; ++ c->put_no_rnd_qpel_pixels_tab[1][3] = ++ ff_horiz_mc_qpel_no_rnd_aver_src1_8width_msa; ++ c->put_no_rnd_qpel_pixels_tab[1][4] = ++ ff_vert_mc_qpel_no_rnd_aver_src0_8x8_msa; ++ c->put_no_rnd_qpel_pixels_tab[1][5] = ++ ff_hv_mc_qpel_no_rnd_aver_hv_src00_8x8_msa; ++ c->put_no_rnd_qpel_pixels_tab[1][6] = ++ ff_hv_mc_qpel_no_rnd_aver_v_src0_8x8_msa; ++ c->put_no_rnd_qpel_pixels_tab[1][7] = ++ ff_hv_mc_qpel_no_rnd_aver_hv_src10_8x8_msa; ++ c->put_no_rnd_qpel_pixels_tab[1][8] = ff_vert_mc_qpel_no_rnd_8x8_msa; ++ c->put_no_rnd_qpel_pixels_tab[1][9] = ++ ff_hv_mc_qpel_no_rnd_aver_h_src0_8x8_msa; ++ c->put_no_rnd_qpel_pixels_tab[1][10] = ff_hv_mc_qpel_no_rnd_8x8_msa; ++ c->put_no_rnd_qpel_pixels_tab[1][11] = ++ ff_hv_mc_qpel_no_rnd_aver_h_src1_8x8_msa; ++ c->put_no_rnd_qpel_pixels_tab[1][12] = ++ ff_vert_mc_qpel_no_rnd_aver_src1_8x8_msa; ++ c->put_no_rnd_qpel_pixels_tab[1][13] = ++ ff_hv_mc_qpel_no_rnd_aver_hv_src01_8x8_msa; ++ c->put_no_rnd_qpel_pixels_tab[1][14] = ++ ff_hv_mc_qpel_no_rnd_aver_v_src1_8x8_msa; ++ c->put_no_rnd_qpel_pixels_tab[1][15] = ++ ff_hv_mc_qpel_no_rnd_aver_hv_src11_8x8_msa; + +- c->avg_qpel_pixels_tab[1][0] = ff_avg_width8_msa; +- c->avg_qpel_pixels_tab[1][1] = +- ff_horiz_mc_qpel_avg_dst_aver_src0_8width_msa; +- c->avg_qpel_pixels_tab[1][2] = ff_horiz_mc_qpel_avg_dst_8width_msa; +- c->avg_qpel_pixels_tab[1][3] = +- ff_horiz_mc_qpel_avg_dst_aver_src1_8width_msa; +- c->avg_qpel_pixels_tab[1][4] = ff_vert_mc_qpel_avg_dst_aver_src0_8x8_msa; +- c->avg_qpel_pixels_tab[1][5] = ff_hv_mc_qpel_avg_dst_aver_hv_src00_8x8_msa; +- c->avg_qpel_pixels_tab[1][6] = ff_hv_mc_qpel_avg_dst_aver_v_src0_8x8_msa; +- c->avg_qpel_pixels_tab[1][7] = ff_hv_mc_qpel_avg_dst_aver_hv_src10_8x8_msa; +- c->avg_qpel_pixels_tab[1][8] = ff_vert_mc_qpel_avg_dst_8x8_msa; +- c->avg_qpel_pixels_tab[1][9] = ff_hv_mc_qpel_avg_dst_aver_h_src0_8x8_msa; +- c->avg_qpel_pixels_tab[1][10] = ff_hv_mc_qpel_avg_dst_8x8_msa; +- c->avg_qpel_pixels_tab[1][11] = ff_hv_mc_qpel_avg_dst_aver_h_src1_8x8_msa; +- c->avg_qpel_pixels_tab[1][12] = ff_vert_mc_qpel_avg_dst_aver_src1_8x8_msa; +- c->avg_qpel_pixels_tab[1][13] = ff_hv_mc_qpel_avg_dst_aver_hv_src01_8x8_msa; +- c->avg_qpel_pixels_tab[1][14] = ff_hv_mc_qpel_avg_dst_aver_v_src1_8x8_msa; +- c->avg_qpel_pixels_tab[1][15] = ff_hv_mc_qpel_avg_dst_aver_hv_src11_8x8_msa; +-} +-#endif // #if HAVE_MSA ++ c->avg_qpel_pixels_tab[0][0] = ff_avg_width16_msa; ++ c->avg_qpel_pixels_tab[0][1] = ++ ff_horiz_mc_qpel_avg_dst_aver_src0_16width_msa; ++ c->avg_qpel_pixels_tab[0][2] = ff_horiz_mc_qpel_avg_dst_16width_msa; ++ c->avg_qpel_pixels_tab[0][3] = ++ ff_horiz_mc_qpel_avg_dst_aver_src1_16width_msa; ++ c->avg_qpel_pixels_tab[0][4] = ff_vert_mc_qpel_avg_dst_aver_src0_16x16_msa; ++ c->avg_qpel_pixels_tab[0][5] = ++ ff_hv_mc_qpel_avg_dst_aver_hv_src00_16x16_msa; ++ c->avg_qpel_pixels_tab[0][6] = ff_hv_mc_qpel_avg_dst_aver_v_src0_16x16_msa; ++ c->avg_qpel_pixels_tab[0][7] = ++ ff_hv_mc_qpel_avg_dst_aver_hv_src10_16x16_msa; ++ c->avg_qpel_pixels_tab[0][8] = ff_vert_mc_qpel_avg_dst_16x16_msa; ++ c->avg_qpel_pixels_tab[0][9] = ff_hv_mc_qpel_avg_dst_aver_h_src0_16x16_msa; ++ c->avg_qpel_pixels_tab[0][10] = ff_hv_mc_qpel_avg_dst_16x16_msa; ++ c->avg_qpel_pixels_tab[0][11] = ff_hv_mc_qpel_avg_dst_aver_h_src1_16x16_msa; ++ c->avg_qpel_pixels_tab[0][12] = ff_vert_mc_qpel_avg_dst_aver_src1_16x16_msa; ++ c->avg_qpel_pixels_tab[0][13] = ++ ff_hv_mc_qpel_avg_dst_aver_hv_src01_16x16_msa; ++ c->avg_qpel_pixels_tab[0][14] = ff_hv_mc_qpel_avg_dst_aver_v_src1_16x16_msa; ++ c->avg_qpel_pixels_tab[0][15] = ++ ff_hv_mc_qpel_avg_dst_aver_hv_src11_16x16_msa; + +-void ff_qpeldsp_init_mips(QpelDSPContext *c) +-{ +-#if HAVE_MSA +- qpeldsp_init_msa(c); +-#endif // #if HAVE_MSA ++ c->avg_qpel_pixels_tab[1][0] = ff_avg_width8_msa; ++ c->avg_qpel_pixels_tab[1][1] = ++ ff_horiz_mc_qpel_avg_dst_aver_src0_8width_msa; ++ c->avg_qpel_pixels_tab[1][2] = ff_horiz_mc_qpel_avg_dst_8width_msa; ++ c->avg_qpel_pixels_tab[1][3] = ++ ff_horiz_mc_qpel_avg_dst_aver_src1_8width_msa; ++ c->avg_qpel_pixels_tab[1][4] = ff_vert_mc_qpel_avg_dst_aver_src0_8x8_msa; ++ c->avg_qpel_pixels_tab[1][5] = ff_hv_mc_qpel_avg_dst_aver_hv_src00_8x8_msa; ++ c->avg_qpel_pixels_tab[1][6] = ff_hv_mc_qpel_avg_dst_aver_v_src0_8x8_msa; ++ c->avg_qpel_pixels_tab[1][7] = ff_hv_mc_qpel_avg_dst_aver_hv_src10_8x8_msa; ++ c->avg_qpel_pixels_tab[1][8] = ff_vert_mc_qpel_avg_dst_8x8_msa; ++ c->avg_qpel_pixels_tab[1][9] = ff_hv_mc_qpel_avg_dst_aver_h_src0_8x8_msa; ++ c->avg_qpel_pixels_tab[1][10] = ff_hv_mc_qpel_avg_dst_8x8_msa; ++ c->avg_qpel_pixels_tab[1][11] = ff_hv_mc_qpel_avg_dst_aver_h_src1_8x8_msa; ++ c->avg_qpel_pixels_tab[1][12] = ff_vert_mc_qpel_avg_dst_aver_src1_8x8_msa; ++ c->avg_qpel_pixels_tab[1][13] = ff_hv_mc_qpel_avg_dst_aver_hv_src01_8x8_msa; ++ c->avg_qpel_pixels_tab[1][14] = ff_hv_mc_qpel_avg_dst_aver_v_src1_8x8_msa; ++ c->avg_qpel_pixels_tab[1][15] = ff_hv_mc_qpel_avg_dst_aver_hv_src11_8x8_msa; ++ } + } +diff --git a/libavcodec/mips/qpeldsp_msa.c b/libavcodec/mips/qpeldsp_msa.c +index 4710b3f..c7675f1 100644 +--- a/libavcodec/mips/qpeldsp_msa.c ++++ b/libavcodec/mips/qpeldsp_msa.c +@@ -96,7 +96,7 @@ + DPADD_UB2_UH(sum2_r, sum1_r, coef2, coef1, sum0_r, sum3_r); \ + res0_r = (v8i16) (sum0_r - sum3_r); \ + res0_r = __msa_srari_h(res0_r, 5); \ +- res0_r = CLIP_SH_0_255(res0_r); \ ++ CLIP_SH_0_255(res0_r); \ + out = (v16u8) __msa_pckev_b((v16i8) res0_r, (v16i8) res0_r); \ + \ + out; \ +@@ -118,7 +118,7 @@ + res0_r = (v8i16) (sum0_r - sum3_r); \ + res0_r += 15; \ + res0_r >>= 5; \ +- res0_r = CLIP_SH_0_255(res0_r); \ ++ CLIP_SH_0_255(res0_r); \ + out = (v16u8) __msa_pckev_b((v16i8) res0_r, (v16i8) res0_r); \ + \ + out; \ +@@ -334,7 +334,7 @@ static void horiz_mc_qpel_aver_src0_8width_msa(const uint8_t *src, + inp0 = (v16u8) __msa_insve_d((v2i64) inp0, 1, (v2i64) inp1); + inp2 = (v16u8) __msa_insve_d((v2i64) inp2, 1, (v2i64) inp3); + AVER_UB2_UB(inp0, res0, inp2, res1, res0, res1); +- ST8x4_UB(res0, res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -409,7 +409,7 @@ static void horiz_mc_qpel_8width_msa(const uint8_t *src, + res1 = APPLY_HORIZ_QPEL_FILTER_8BYTE(inp2, inp3, + mask0, mask1, mask2, mask3, + const20, const6, const3); +- ST8x4_UB(res0, res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -480,12 +480,12 @@ static void horiz_mc_qpel_aver_src1_8width_msa(const uint8_t *src, + res1 = APPLY_HORIZ_QPEL_FILTER_8BYTE(inp2, inp3, + mask0, mask1, mask2, mask3, + const20, const6, const3); +- SLDI_B2_UB(inp0, inp1, inp0, inp1, inp0, inp1, 1); +- SLDI_B2_UB(inp2, inp3, inp2, inp3, inp2, inp3, 1); ++ SLDI_B4_UB(inp0, inp0, inp1, inp1, inp2, inp2, inp3, inp3, 1, ++ inp0, inp1, inp2, inp3); + inp0 = (v16u8) __msa_insve_d((v2i64) inp0, 1, (v2i64) inp1); + inp2 = (v16u8) __msa_insve_d((v2i64) inp2, 1, (v2i64) inp3); + AVER_UB2_UB(inp0, res0, inp2, res1, res0, res1); +- ST8x4_UB(res0, res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -564,7 +564,7 @@ static void horiz_mc_qpel_no_rnd_aver_src0_8width_msa(const uint8_t *src, + inp2 = (v16u8) __msa_insve_d((v2i64) inp2, 1, (v2i64) inp3); + res0 = __msa_ave_u_b(inp0, res0); + res1 = __msa_ave_u_b(inp2, res1); +- ST8x4_UB(res0, res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -639,7 +639,7 @@ static void horiz_mc_qpel_no_rnd_8width_msa(const uint8_t *src, + res1 = APPLY_HORIZ_QPEL_NO_ROUND_FILTER_8BYTE(inp2, inp3, mask0, mask1, + mask2, mask3, const20, + const6, const3); +- ST8x4_UB(res0, res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -710,13 +710,13 @@ static void horiz_mc_qpel_no_rnd_aver_src1_8width_msa(const uint8_t *src, + res1 = APPLY_HORIZ_QPEL_NO_ROUND_FILTER_8BYTE(inp2, inp3, mask0, mask1, + mask2, mask3, const20, + const6, const3); +- SLDI_B2_UB(inp0, inp1, inp0, inp1, inp0, inp1, 1); +- SLDI_B2_UB(inp2, inp3, inp2, inp3, inp2, inp3, 1); ++ SLDI_B4_UB(inp0, inp0, inp1, inp1, inp2, inp2, inp3, inp3, 1, ++ inp0, inp1, inp2, inp3); + inp0 = (v16u8) __msa_insve_d((v2i64) inp0, 1, (v2i64) inp1); + inp2 = (v16u8) __msa_insve_d((v2i64) inp2, 1, (v2i64) inp3); + res0 = __msa_ave_u_b(inp0, res0); + res1 = __msa_ave_u_b(inp2, res1); +- ST8x4_UB(res0, res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -799,7 +799,7 @@ static void horiz_mc_qpel_avg_dst_aver_src0_8width_msa(const uint8_t *src, + dst2 = (v16u8) __msa_insve_d((v2i64) dst2, 1, (v2i64) dst3); + AVER_UB2_UB(inp0, res0, inp2, res1, res0, res1); + AVER_UB2_UB(dst0, res0, dst2, res1, res0, res1); +- ST8x4_UB(res0, res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -876,7 +876,7 @@ static void horiz_mc_qpel_avg_dst_8width_msa(const uint8_t *src, + dst0 = (v16u8) __msa_insve_d((v2i64) dst0, 1, (v2i64) dst1); + dst2 = (v16u8) __msa_insve_d((v2i64) dst2, 1, (v2i64) dst3); + AVER_UB2_UB(dst0, res0, dst2, res1, res0, res1); +- ST8x4_UB(res0, res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -948,15 +948,15 @@ static void horiz_mc_qpel_avg_dst_aver_src1_8width_msa(const uint8_t *src, + mask0, mask1, mask2, mask3, + const20, const6, const3); + LD_UB4(dst, dst_stride, dst0, dst1, dst2, dst3); +- SLDI_B2_UB(inp0, inp1, inp0, inp1, inp0, inp1, 1); +- SLDI_B2_UB(inp2, inp3, inp2, inp3, inp2, inp3, 1); ++ SLDI_B4_UB(inp0, inp0, inp1, inp1, inp2, inp2, inp3, inp3, 1, ++ inp0, inp1, inp2, inp3); + inp0 = (v16u8) __msa_insve_d((v2i64) inp0, 1, (v2i64) inp1); + inp2 = (v16u8) __msa_insve_d((v2i64) inp2, 1, (v2i64) inp3); + dst0 = (v16u8) __msa_insve_d((v2i64) dst0, 1, (v2i64) dst1); + dst2 = (v16u8) __msa_insve_d((v2i64) dst2, 1, (v2i64) dst3); + AVER_UB2_UB(inp0, res0, inp2, res1, res0, res1); + AVER_UB2_UB(dst0, res0, dst2, res1, res0, res1); +- ST8x4_UB(res0, res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -1031,8 +1031,7 @@ static void vert_mc_qpel_aver_src0_8x8_msa(const uint8_t *src, + tmp0 = (v16u8) __msa_insve_d((v2i64) inp0, 1, (v2i64) inp1); + tmp1 = (v16u8) __msa_insve_d((v2i64) inp2, 1, (v2i64) inp3); + AVER_UB2_UB(res0, tmp0, res1, tmp1, res0, res1); +- ST8x4_UB(res0, res1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + + inp8 = LD_UB(src); + res0 = APPLY_VERT_QPEL_FILTER_8BYTE(inp4, inp3, inp2, inp1, +@@ -1048,8 +1047,7 @@ static void vert_mc_qpel_aver_src0_8x8_msa(const uint8_t *src, + tmp0 = (v16u8) __msa_insve_d((v2i64) inp4, 1, (v2i64) inp5); + tmp1 = (v16u8) __msa_insve_d((v2i64) inp6, 1, (v2i64) inp7); + AVER_UB2_UB(res0, tmp0, res1, tmp1, res0, res1); +- ST8x4_UB(res0, res1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst + 4 * dst_stride, dst_stride); + } + + static void vert_mc_qpel_aver_src0_16x16_msa(const uint8_t *src, +@@ -1220,8 +1218,7 @@ static void vert_mc_qpel_8x8_msa(const uint8_t *src, + inp3, inp2, inp1, inp0, + inp4, inp5, inp6, inp7, + const20, const6, const3); +- ST8x4_UB(res0, res1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + + inp8 = LD_UB(src); + res0 = APPLY_VERT_QPEL_FILTER_8BYTE(inp4, inp3, inp2, inp1, +@@ -1234,8 +1231,7 @@ static void vert_mc_qpel_8x8_msa(const uint8_t *src, + inp7, inp6, inp5, inp4, + inp8, inp8, inp7, inp6, + const20, const6, const3); +- ST8x4_UB(res0, res1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst + 4 * dst_stride, dst_stride); + } + + static void vert_mc_qpel_16x16_msa(const uint8_t *src, +@@ -1405,8 +1401,7 @@ static void vert_mc_qpel_aver_src1_8x8_msa(const uint8_t *src, + tmp0 = (v16u8) __msa_insve_d((v2i64) inp1, 1, (v2i64) inp2); + tmp1 = (v16u8) __msa_insve_d((v2i64) inp3, 1, (v2i64) inp4); + AVER_UB2_UB(res0, tmp0, res1, tmp1, res0, res1); +- ST8x4_UB(res0, res1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + + inp8 = LD_UB(src); + res0 = APPLY_VERT_QPEL_FILTER_8BYTE(inp4, inp3, inp2, inp1, +@@ -1422,7 +1417,7 @@ static void vert_mc_qpel_aver_src1_8x8_msa(const uint8_t *src, + tmp0 = (v16u8) __msa_insve_d((v2i64) inp5, 1, (v2i64) inp6); + tmp1 = (v16u8) __msa_insve_d((v2i64) inp7, 1, (v2i64) inp8); + AVER_UB2_UB(res0, tmp0, res1, tmp1, res0, res1); +- ST8x4_UB(res0, res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst + 4 * dst_stride, dst_stride); + } + + static void vert_mc_qpel_aver_src1_16x16_msa(const uint8_t *src, +@@ -1607,8 +1602,7 @@ static void vert_mc_qpel_no_rnd_aver_src0_8x8_msa(const uint8_t *src, + tmp1 = (v16u8) __msa_insve_d((v2i64) inp2, 1, (v2i64) inp3); + res0 = __msa_ave_u_b(res0, tmp0); + res1 = __msa_ave_u_b(res1, tmp1); +- ST8x4_UB(res0, res1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + + inp8 = LD_UB(src); + res0 = APPLY_VERT_QPEL_NO_ROUND_FILTER_8BYTE(inp4, inp3, inp2, inp1, +@@ -1625,8 +1619,7 @@ static void vert_mc_qpel_no_rnd_aver_src0_8x8_msa(const uint8_t *src, + tmp1 = (v16u8) __msa_insve_d((v2i64) inp6, 1, (v2i64) inp7); + res0 = __msa_ave_u_b(res0, tmp0); + res1 = __msa_ave_u_b(res1, tmp1); +- ST8x4_UB(res0, res1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst + 4 * dst_stride, dst_stride); + } + + static void vert_mc_qpel_no_rnd_aver_src0_16x16_msa(const uint8_t *src, +@@ -1806,8 +1799,7 @@ static void vert_mc_qpel_no_rnd_8x8_msa(const uint8_t *src, + inp3, inp2, inp1, inp0, + inp4, inp5, inp6, inp7, + const20, const6, const3); +- ST8x4_UB(res0, res1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + + inp8 = LD_UB(src); + res0 = APPLY_VERT_QPEL_NO_ROUND_FILTER_8BYTE(inp4, inp3, inp2, inp1, +@@ -1820,8 +1812,7 @@ static void vert_mc_qpel_no_rnd_8x8_msa(const uint8_t *src, + inp7, inp6, inp5, inp4, + inp8, inp8, inp7, inp6, + const20, const6, const3); +- ST8x4_UB(res0, res1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst + 4 * dst_stride, dst_stride); + } + + static void vert_mc_qpel_no_rnd_16x16_msa(const uint8_t *src, +@@ -1988,8 +1979,7 @@ static void vert_mc_qpel_no_rnd_aver_src1_8x8_msa(const uint8_t *src, + tmp1 = (v16u8) __msa_insve_d((v2i64) inp3, 1, (v2i64) inp4); + res0 = __msa_ave_u_b(res0, tmp0); + res1 = __msa_ave_u_b(res1, tmp1); +- ST8x4_UB(res0, res1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + + inp8 = LD_UB(src); + res0 = APPLY_VERT_QPEL_NO_ROUND_FILTER_8BYTE(inp4, inp3, inp2, inp1, +@@ -2006,7 +1996,7 @@ static void vert_mc_qpel_no_rnd_aver_src1_8x8_msa(const uint8_t *src, + tmp1 = (v16u8) __msa_insve_d((v2i64) inp7, 1, (v2i64) inp8); + res0 = __msa_ave_u_b(res0, tmp0); + res1 = __msa_ave_u_b(res1, tmp1); +- ST8x4_UB(res0, res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst + 4 * dst_stride, dst_stride); + } + + static void vert_mc_qpel_no_rnd_aver_src1_16x16_msa(const uint8_t *src, +@@ -2195,7 +2185,7 @@ static void vert_mc_qpel_avg_dst_aver_src0_8x8_msa(const uint8_t *src, + dst2 = (v16u8) __msa_insve_d((v2i64) dst2, 1, (v2i64) dst3); + AVER_UB2_UB(res0, tmp0, res1, tmp1, res0, res1); + AVER_UB2_UB(dst0, res0, dst2, res1, res0, res1); +- ST8x4_UB(res0, res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + + inp8 = LD_UB(src); +@@ -2217,7 +2207,7 @@ static void vert_mc_qpel_avg_dst_aver_src0_8x8_msa(const uint8_t *src, + dst2 = (v16u8) __msa_insve_d((v2i64) dst2, 1, (v2i64) dst3); + AVER_UB2_UB(res0, tmp0, res1, tmp1, res0, res1); + AVER_UB2_UB(dst0, res0, dst2, res1, res0, res1); +- ST8x4_UB(res0, res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + } + + static void vert_mc_qpel_avg_dst_aver_src0_16x16_msa(const uint8_t *src, +@@ -2384,7 +2374,7 @@ static void vert_mc_qpel_avg_dst_8x8_msa(const uint8_t *src, + dst0 = (v16u8) __msa_insve_d((v2i64) dst0, 1, (v2i64) dst1); + dst2 = (v16u8) __msa_insve_d((v2i64) dst2, 1, (v2i64) dst3); + AVER_UB2_UB(dst0, res0, dst2, res1, res0, res1); +- ST8x4_UB(res0, res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + + inp8 = LD_UB(src); +@@ -2402,8 +2392,7 @@ static void vert_mc_qpel_avg_dst_8x8_msa(const uint8_t *src, + dst0 = (v16u8) __msa_insve_d((v2i64) dst0, 1, (v2i64) dst1); + dst2 = (v16u8) __msa_insve_d((v2i64) dst2, 1, (v2i64) dst3); + AVER_UB2_UB(dst0, res0, dst2, res1, res0, res1); +- ST8x4_UB(res0, res1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + } + + static void vert_mc_qpel_avg_dst_16x16_msa(const uint8_t *src, +@@ -2566,7 +2555,7 @@ static void vert_mc_qpel_avg_dst_aver_src1_8x8_msa(const uint8_t *src, + dst2 = (v16u8) __msa_insve_d((v2i64) dst2, 1, (v2i64) dst3); + AVER_UB2_UB(res0, tmp0, res1, tmp1, res0, res1); + AVER_UB2_UB(dst0, res0, dst2, res1, res0, res1); +- ST8x4_UB(res0, res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + + inp8 = LD_UB(src); +@@ -2587,7 +2576,7 @@ static void vert_mc_qpel_avg_dst_aver_src1_8x8_msa(const uint8_t *src, + dst2 = (v16u8) __msa_insve_d((v2i64) dst2, 1, (v2i64) dst3); + AVER_UB2_UB(res0, tmp0, res1, tmp1, res0, res1); + AVER_UB2_UB(dst0, res0, dst2, res1, res0, res1); +- ST8x4_UB(res0, res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + } + + static void vert_mc_qpel_avg_dst_aver_src1_16x16_msa(const uint8_t *src, +@@ -2832,7 +2821,7 @@ static void hv_mc_qpel_no_rnd_aver_hv_src00_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg0 = (v16u8) __msa_ilvr_d((v2i64) horiz1, (v2i64) horiz0); + res0 = __msa_ave_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(src, src_stride, inp2, inp3); +@@ -2860,7 +2849,7 @@ static void hv_mc_qpel_no_rnd_aver_hv_src00_8x8_msa(const uint8_t *src, + horiz5, horiz4, horiz3, horiz2, + horiz6, horiz7, horiz8, horiz8, + const20, const6, const3); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += 2 * dst_stride; + + avg0 = (v16u8) __msa_ilvr_d((v2i64) horiz5, (v2i64) horiz4); +@@ -2870,12 +2859,12 @@ static void hv_mc_qpel_no_rnd_aver_hv_src00_8x8_msa(const uint8_t *src, + horiz7, horiz6, horiz5, horiz4, + horiz8, horiz8, horiz7, horiz6, + const20, const6, const3); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += 2 * dst_stride; + + avg1 = (v16u8) __msa_ilvr_d((v2i64) horiz7, (v2i64) horiz6); + res1 = __msa_ave_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_no_rnd_horiz_16x16_msa(const uint8_t *src, +@@ -2977,7 +2966,7 @@ static void hv_mc_qpel_no_rnd_aver_v_src0_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg0 = (v16u8) __msa_ilvr_d((v2i64) horiz1, (v2i64) horiz0); + res0 = __msa_ave_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(src, src_stride, inp2, inp3); +@@ -2999,7 +2988,7 @@ static void hv_mc_qpel_no_rnd_aver_v_src0_8x8_msa(const uint8_t *src, + res1 = __msa_ave_u_b(avg1, res1); + avg0 = (v16u8) __msa_ilvr_d((v2i64) horiz1, (v2i64) horiz0); + res0 = __msa_ave_u_b(avg0, res0); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + res0 = APPLY_VERT_QPEL_NO_ROUND_FILTER_8BYTE(horiz4, horiz3, horiz2, horiz1, +@@ -3009,7 +2998,7 @@ static void hv_mc_qpel_no_rnd_aver_v_src0_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg0 = (v16u8) __msa_ilvr_d((v2i64) horiz5, (v2i64) horiz4); + res0 = __msa_ave_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + res1 = APPLY_VERT_QPEL_NO_ROUND_FILTER_8BYTE(horiz6, horiz5, horiz4, horiz3, +@@ -3019,7 +3008,7 @@ static void hv_mc_qpel_no_rnd_aver_v_src0_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg1 = (v16u8) __msa_ilvr_d((v2i64) horiz7, (v2i64) horiz6); + res1 = __msa_ave_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_no_rnd_horiz_src1_16x16_msa(const uint8_t *src, +@@ -3105,7 +3094,7 @@ static void hv_mc_qpel_no_rnd_aver_hv_src10_8x8_msa(const uint8_t *src, + res0 = APPLY_HORIZ_QPEL_NO_ROUND_FILTER_8BYTE(inp0, inp1, mask0, mask1, + mask2, mask3, const20, + const6, const3); +- SLDI_B2_UB(inp0, inp1, inp0, inp1, inp0, inp1, 1); ++ SLDI_B2_UB(inp0, inp0, inp1, inp1, 1, inp0, inp1); + + inp0 = (v16u8) __msa_insve_d((v2i64) inp0, 1, (v2i64) inp1); + horiz0 = __msa_ave_u_b(inp0, res0); +@@ -3115,7 +3104,7 @@ static void hv_mc_qpel_no_rnd_aver_hv_src10_8x8_msa(const uint8_t *src, + res1 = APPLY_HORIZ_QPEL_NO_ROUND_FILTER_8BYTE(inp2, inp3, mask0, mask1, + mask2, mask3, const20, + const6, const3); +- SLDI_B2_UB(inp2, inp3, inp2, inp3, inp2, inp3, 1); ++ SLDI_B2_UB(inp2, inp2, inp3, inp3, 1, inp2, inp3); + + inp2 = (v16u8) __msa_insve_d((v2i64) inp2, 1, (v2i64) inp3); + horiz2 = __msa_ave_u_b(inp2, res1); +@@ -3125,7 +3114,7 @@ static void hv_mc_qpel_no_rnd_aver_hv_src10_8x8_msa(const uint8_t *src, + res0 = APPLY_HORIZ_QPEL_NO_ROUND_FILTER_8BYTE(inp0, inp1, mask0, mask1, + mask2, mask3, const20, + const6, const3); +- SLDI_B2_UB(inp0, inp1, inp0, inp1, inp0, inp1, 1); ++ SLDI_B2_UB(inp0, inp0, inp1, inp1, 1, inp0, inp1); + + inp0 = (v16u8) __msa_insve_d((v2i64) inp0, 1, (v2i64) inp1); + horiz4 = __msa_ave_u_b(inp0, res0); +@@ -3137,7 +3126,7 @@ static void hv_mc_qpel_no_rnd_aver_hv_src10_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg0 = (v16u8) __msa_ilvr_d((v2i64) horiz1, (v2i64) horiz0); + res0 = __msa_ave_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(src, src_stride, inp2, inp3); +@@ -3145,7 +3134,7 @@ static void hv_mc_qpel_no_rnd_aver_hv_src10_8x8_msa(const uint8_t *src, + res1 = APPLY_HORIZ_QPEL_NO_ROUND_FILTER_8BYTE(inp2, inp3, mask0, mask1, + mask2, mask3, const20, + const6, const3); +- SLDI_B2_UB(inp2, inp3, inp2, inp3, inp2, inp3, 1); ++ SLDI_B2_UB(inp2, inp2, inp3, inp3, 1, inp2, inp3); + + inp2 = (v16u8) __msa_insve_d((v2i64) inp2, 1, (v2i64) inp3); + horiz6 = __msa_ave_u_b(inp2, res1); +@@ -3163,7 +3152,7 @@ static void hv_mc_qpel_no_rnd_aver_hv_src10_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg1 = (v16u8) __msa_ilvr_d((v2i64) horiz3, (v2i64) horiz2); + res1 = __msa_ave_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + res0 = APPLY_VERT_QPEL_NO_ROUND_FILTER_8BYTE(horiz4, horiz3, horiz2, horiz1, +@@ -3173,7 +3162,7 @@ static void hv_mc_qpel_no_rnd_aver_hv_src10_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg0 = (v16u8) __msa_ilvr_d((v2i64) horiz5, (v2i64) horiz4); + res0 = __msa_ave_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + res1 = APPLY_VERT_QPEL_NO_ROUND_FILTER_8BYTE(horiz6, horiz5, horiz4, horiz3, +@@ -3183,7 +3172,7 @@ static void hv_mc_qpel_no_rnd_aver_hv_src10_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg1 = (v16u8) __msa_ilvr_d((v2i64) horiz7, (v2i64) horiz6); + res1 = __msa_ave_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_no_rnd_aver_h_src0_16x16_msa(const uint8_t *src, +@@ -3246,7 +3235,7 @@ static void hv_mc_qpel_no_rnd_aver_h_src0_8x8_msa(const uint8_t *src, + + LD_UB2(src, src_stride, inp2, inp3); + src += (2 * src_stride); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += 2 * dst_stride; + + res1 = APPLY_HORIZ_QPEL_NO_ROUND_FILTER_8BYTE(inp2, inp3, mask0, mask1, +@@ -3270,18 +3259,15 @@ static void hv_mc_qpel_no_rnd_aver_h_src0_8x8_msa(const uint8_t *src, + horiz5, horiz4, horiz3, horiz2, + horiz6, horiz7, horiz8, horiz8, + const20, const6, const3); +- ST8x2_UB(res1, dst, dst_stride); +- dst += 2 * dst_stride; +- +- ST8x2_UB(res0, dst, dst_stride); +- dst += (2 * dst_stride); ++ ST_D4(res1, res0, 0, 1, 0, 1, dst, dst_stride); ++ dst += (4 * dst_stride); + + res1 = APPLY_VERT_QPEL_NO_ROUND_FILTER_8BYTE(horiz6, horiz5, horiz4, horiz3, + horiz7, horiz8, horiz8, horiz7, + horiz7, horiz6, horiz5, horiz4, + horiz8, horiz8, horiz7, horiz6, + const20, const6, const3); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_no_rnd_16x16_msa(const uint8_t *src, +@@ -3337,7 +3323,7 @@ static void hv_mc_qpel_no_rnd_8x8_msa(const uint8_t *src, + const20, const6, const3); + LD_UB2(src, src_stride, inp2, inp3); + src += (2 * src_stride); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += 2 * dst_stride; + + horiz6 = APPLY_HORIZ_QPEL_NO_ROUND_FILTER_8BYTE(inp2, inp3, mask0, mask1, +@@ -3358,7 +3344,7 @@ static void hv_mc_qpel_no_rnd_8x8_msa(const uint8_t *src, + horiz5, horiz4, horiz3, horiz2, + horiz6, horiz7, horiz8, horiz8, + const20, const6, const3); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += 2 * dst_stride; + + +@@ -3367,9 +3353,7 @@ static void hv_mc_qpel_no_rnd_8x8_msa(const uint8_t *src, + horiz7, horiz6, horiz5, horiz4, + horiz8, horiz8, horiz7, horiz6, + const20, const6, const3); +- ST8x2_UB(res0, dst, dst_stride); +- dst += 2 * dst_stride; +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_no_rnd_aver_h_src1_16x16_msa(const uint8_t *src, +@@ -3405,7 +3389,7 @@ static void hv_mc_qpel_no_rnd_aver_h_src1_8x8_msa(const uint8_t *src, + res0 = APPLY_HORIZ_QPEL_NO_ROUND_FILTER_8BYTE(inp0, inp1, mask0, mask1, + mask2, mask3, const20, + const6, const3); +- SLDI_B2_UB(inp0, inp1, inp0, inp1, inp0, inp1, 1); ++ SLDI_B2_UB(inp0, inp0, inp1, inp1, 1, inp0, inp1); + + inp0 = (v16u8) __msa_insve_d((v2i64) inp0, 1, (v2i64) inp1); + horiz0 = __msa_ave_u_b(inp0, res0); +@@ -3415,7 +3399,7 @@ static void hv_mc_qpel_no_rnd_aver_h_src1_8x8_msa(const uint8_t *src, + res1 = APPLY_HORIZ_QPEL_NO_ROUND_FILTER_8BYTE(inp2, inp3, mask0, mask1, + mask2, mask3, const20, + const6, const3); +- SLDI_B2_UB(inp2, inp3, inp2, inp3, inp2, inp3, 1); ++ SLDI_B2_UB(inp2, inp2, inp3, inp3, 1, inp2, inp3); + + inp2 = (v16u8) __msa_insve_d((v2i64) inp2, 1, (v2i64) inp3); + horiz2 = __msa_ave_u_b(inp2, res1); +@@ -3425,7 +3409,7 @@ static void hv_mc_qpel_no_rnd_aver_h_src1_8x8_msa(const uint8_t *src, + res0 = APPLY_HORIZ_QPEL_NO_ROUND_FILTER_8BYTE(inp0, inp1, mask0, mask1, + mask2, mask3, const20, + const6, const3); +- SLDI_B2_UB(inp0, inp1, inp0, inp1, inp0, inp1, 1); ++ SLDI_B2_UB(inp0, inp0, inp1, inp1, 1, inp0, inp1); + + inp0 = (v16u8) __msa_insve_d((v2i64) inp0, 1, (v2i64) inp1); + horiz4 = __msa_ave_u_b(inp0, res0); +@@ -3437,13 +3421,13 @@ static void hv_mc_qpel_no_rnd_aver_h_src1_8x8_msa(const uint8_t *src, + const20, const6, const3); + LD_UB2(src, src_stride, inp2, inp3); + src += (2 * src_stride); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += 2 * dst_stride; + + res1 = APPLY_HORIZ_QPEL_NO_ROUND_FILTER_8BYTE(inp2, inp3, mask0, mask1, + mask2, mask3, const20, + const6, const3); +- SLDI_B2_UB(inp2, inp3, inp2, inp3, inp2, inp3, 1); ++ SLDI_B2_UB(inp2, inp2, inp3, inp3, 1, inp2, inp3); + + inp2 = (v16u8) __msa_insve_d((v2i64) inp2, 1, (v2i64) inp3); + horiz6 = __msa_ave_u_b(inp2, res1); +@@ -3464,7 +3448,7 @@ static void hv_mc_qpel_no_rnd_aver_h_src1_8x8_msa(const uint8_t *src, + horiz5, horiz4, horiz3, horiz2, + horiz6, horiz7, horiz8, horiz8, + const20, const6, const3); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += 2 * dst_stride; + + res1 = APPLY_VERT_QPEL_NO_ROUND_FILTER_8BYTE(horiz6, horiz5, horiz4, horiz3, +@@ -3472,9 +3456,7 @@ static void hv_mc_qpel_no_rnd_aver_h_src1_8x8_msa(const uint8_t *src, + horiz7, horiz6, horiz5, horiz4, + horiz8, horiz8, horiz7, horiz6, + const20, const6, const3); +- ST8x2_UB(res0, dst, dst_stride); +- dst += 2 * dst_stride; +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_no_rnd_aver_hv_src01_16x16_msa(const uint8_t *src, +@@ -3536,7 +3518,7 @@ static void hv_mc_qpel_no_rnd_aver_hv_src01_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg0 = (v16u8) __msa_ilvr_d((v2i64) horiz2, (v2i64) horiz1); + res0 = __msa_ave_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(src, src_stride, inp2, inp3); +@@ -3564,7 +3546,7 @@ static void hv_mc_qpel_no_rnd_aver_hv_src01_8x8_msa(const uint8_t *src, + horiz5, horiz4, horiz3, horiz2, + horiz6, horiz7, horiz8, horiz8, + const20, const6, const3); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += 2 * dst_stride; + + avg0 = (v16u8) __msa_ilvr_d((v2i64) horiz6, (v2i64) horiz5); +@@ -3575,12 +3557,12 @@ static void hv_mc_qpel_no_rnd_aver_hv_src01_8x8_msa(const uint8_t *src, + horiz7, horiz6, horiz5, horiz4, + horiz8, horiz8, horiz7, horiz6, + const20, const6, const3); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += 2 * dst_stride; + + avg1 = (v16u8) __msa_ilvr_d((v2i64) horiz8, (v2i64) horiz7); + res1 = __msa_ave_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_no_rnd_aver_v_src1_16x16_msa(const uint8_t *src, +@@ -3638,7 +3620,7 @@ static void hv_mc_qpel_no_rnd_aver_v_src1_8x8_msa(const uint8_t *src, + res0 = __msa_ave_u_b(avg0, res0); + LD_UB2(src, src_stride, inp2, inp3); + src += (2 * src_stride); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += 2 * dst_stride; + + horiz6 = APPLY_HORIZ_QPEL_NO_ROUND_FILTER_8BYTE(inp2, inp3, mask0, mask1, +@@ -3656,7 +3638,7 @@ static void hv_mc_qpel_no_rnd_aver_v_src1_8x8_msa(const uint8_t *src, + horiz8 = APPLY_HORIZ_QPEL_NO_ROUND_FILTER_8BYTE_1ROW(inp0, mask0, mask1, + mask2, mask3, const20, + const6, const3); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += 2 * dst_stride; + + res0 = APPLY_VERT_QPEL_NO_ROUND_FILTER_8BYTE(horiz4, horiz3, horiz2, horiz1, +@@ -3671,12 +3653,9 @@ static void hv_mc_qpel_no_rnd_aver_v_src1_8x8_msa(const uint8_t *src, + horiz7, horiz6, horiz5, horiz4, + horiz8, horiz8, horiz7, horiz6, + const20, const6, const3); +- ST8x2_UB(res0, dst, dst_stride); +- dst += 2 * dst_stride; +- + avg1 = (v16u8) __msa_ilvr_d((v2i64) horiz8, (v2i64) horiz7); + res1 = __msa_ave_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_no_rnd_aver_hv_src11_16x16_msa(const uint8_t *src, +@@ -3712,7 +3691,7 @@ static void hv_mc_qpel_no_rnd_aver_hv_src11_8x8_msa(const uint8_t *src, + res0 = APPLY_HORIZ_QPEL_NO_ROUND_FILTER_8BYTE(inp0, inp1, mask0, mask1, + mask2, mask3, const20, + const6, const3); +- SLDI_B2_UB(inp0, inp1, inp0, inp1, inp0, inp1, 1); ++ SLDI_B2_UB(inp0, inp0, inp1, inp1, 1, inp0, inp1); + + inp0 = (v16u8) __msa_insve_d((v2i64) inp0, 1, (v2i64) inp1); + horiz0 = __msa_ave_u_b(inp0, res0); +@@ -3722,7 +3701,7 @@ static void hv_mc_qpel_no_rnd_aver_hv_src11_8x8_msa(const uint8_t *src, + res1 = APPLY_HORIZ_QPEL_NO_ROUND_FILTER_8BYTE(inp2, inp3, mask0, mask1, + mask2, mask3, const20, + const6, const3); +- SLDI_B2_UB(inp2, inp3, inp2, inp3, inp2, inp3, 1); ++ SLDI_B2_UB(inp2, inp2, inp3, inp3, 1, inp2, inp3); + + inp2 = (v16u8) __msa_insve_d((v2i64) inp2, 1, (v2i64) inp3); + horiz2 = __msa_ave_u_b(inp2, res1); +@@ -3733,7 +3712,7 @@ static void hv_mc_qpel_no_rnd_aver_hv_src11_8x8_msa(const uint8_t *src, + mask2, mask3, const20, + const6, const3); + +- SLDI_B2_UB(inp0, inp1, inp0, inp1, inp0, inp1, 1); ++ SLDI_B2_UB(inp0, inp0, inp1, inp1, 1, inp0, inp1); + inp0 = (v16u8) __msa_insve_d((v2i64) inp0, 1, (v2i64) inp1); + horiz4 = __msa_ave_u_b(inp0, res0); + horiz5 = (v16u8) __msa_splati_d((v2i64) horiz4, 1); +@@ -3744,7 +3723,7 @@ static void hv_mc_qpel_no_rnd_aver_hv_src11_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg0 = (v16u8) __msa_ilvr_d((v2i64) horiz2, (v2i64) horiz1); + res0 = __msa_ave_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(src, src_stride, inp2, inp3); +@@ -3752,7 +3731,7 @@ static void hv_mc_qpel_no_rnd_aver_hv_src11_8x8_msa(const uint8_t *src, + res1 = APPLY_HORIZ_QPEL_NO_ROUND_FILTER_8BYTE(inp2, inp3, mask0, mask1, + mask2, mask3, const20, + const6, const3); +- SLDI_B2_UB(inp2, inp3, inp2, inp3, inp2, inp3, 1); ++ SLDI_B2_UB(inp2, inp2, inp3, inp3, 1, inp2, inp3); + + inp2 = (v16u8) __msa_insve_d((v2i64) inp2, 1, (v2i64) inp3); + horiz6 = __msa_ave_u_b(inp2, res1); +@@ -3764,7 +3743,7 @@ static void hv_mc_qpel_no_rnd_aver_hv_src11_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg1 = (v16u8) __msa_ilvr_d((v2i64) horiz4, (v2i64) horiz3); + res1 = __msa_ave_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + inp0 = LD_UB(src); +@@ -3787,7 +3766,7 @@ static void hv_mc_qpel_no_rnd_aver_hv_src11_8x8_msa(const uint8_t *src, + res0 = __msa_ave_u_b(avg0, res0); + avg1 = (v16u8) __msa_ilvr_d((v2i64) horiz8, (v2i64) horiz7); + res1 = __msa_ave_u_b(avg1, res1); +- ST8x4_UB(res0, res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_aver_horiz_src0_16x16_msa(const uint8_t *src, +@@ -3893,7 +3872,7 @@ static void hv_mc_qpel_aver_hv_src00_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg0 = (v16u8) __msa_ilvr_d((v2i64) horiz1, (v2i64) horiz0); + res0 = __msa_aver_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(src, src_stride, inp2, inp3); +@@ -3915,7 +3894,7 @@ static void hv_mc_qpel_aver_hv_src00_8x8_msa(const uint8_t *src, + res0 = APPLY_HORIZ_QPEL_FILTER_8BYTE_1ROW(inp0, mask0, mask1, mask2, mask3, + const20, const6, const3); + horiz8 = __msa_aver_u_b(inp0, res0); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += 2 * dst_stride; + + res0 = APPLY_VERT_QPEL_FILTER_8BYTE(horiz4, horiz3, horiz2, horiz1, +@@ -3930,11 +3909,9 @@ static void hv_mc_qpel_aver_hv_src00_8x8_msa(const uint8_t *src, + horiz7, horiz6, horiz5, horiz4, + horiz8, horiz8, horiz7, horiz6, + const20, const6, const3); +- ST8x2_UB(res0, dst, dst_stride); +- dst += 2 * dst_stride; + avg1 = (v16u8) __msa_ilvr_d((v2i64) horiz7, (v2i64) horiz6); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_aver_horiz_16x16_msa(const uint8_t *src, +@@ -4034,7 +4011,7 @@ static void hv_mc_qpel_aver_v_src0_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg0 = (v16u8) __msa_ilvr_d((v2i64) horiz1, (v2i64) horiz0); + res0 = __msa_aver_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(src, src_stride, inp2, inp3); +@@ -4059,7 +4036,7 @@ static void hv_mc_qpel_aver_v_src0_8x8_msa(const uint8_t *src, + horiz5, horiz4, horiz3, horiz2, + horiz6, horiz7, horiz8, horiz8, + const20, const6, const3); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += 2 * dst_stride; + + avg0 = (v16u8) __msa_ilvr_d((v2i64) horiz5, (v2i64) horiz4); +@@ -4069,11 +4046,9 @@ static void hv_mc_qpel_aver_v_src0_8x8_msa(const uint8_t *src, + horiz7, horiz6, horiz5, horiz4, + horiz8, horiz8, horiz7, horiz6, + const20, const6, const3); +- ST8x2_UB(res0, dst, dst_stride); +- dst += 2 * dst_stride; + avg1 = (v16u8) __msa_ilvr_d((v2i64) horiz7, (v2i64) horiz6); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_aver_horiz_src1_16x16_msa(const uint8_t *src, +@@ -4159,12 +4134,12 @@ static void hv_mc_qpel_aver_hv_src10_8x8_msa(const uint8_t *src, + const20, const6, const3); + res1 = APPLY_HORIZ_QPEL_FILTER_8BYTE(inp2, inp3, mask0, mask1, mask2, mask3, + const20, const6, const3); +- SLDI_B2_UB(inp0, inp1, inp0, inp1, inp0, inp1, 1); ++ SLDI_B2_UB(inp0, inp0, inp1, inp1, 1, inp0, inp1); + + inp0 = (v16u8) __msa_insve_d((v2i64) inp0, 1, (v2i64) inp1); + horiz0 = __msa_aver_u_b(inp0, res0); + horiz1 = (v16u8) __msa_splati_d((v2i64) horiz0, 1); +- SLDI_B2_UB(inp2, inp3, inp2, inp3, inp2, inp3, 1); ++ SLDI_B2_UB(inp2, inp2, inp3, inp3, 1, inp2, inp3); + + inp2 = (v16u8) __msa_insve_d((v2i64) inp2, 1, (v2i64) inp3); + horiz2 = __msa_aver_u_b(inp2, res1); +@@ -4175,12 +4150,12 @@ static void hv_mc_qpel_aver_hv_src10_8x8_msa(const uint8_t *src, + const20, const6, const3); + res1 = APPLY_HORIZ_QPEL_FILTER_8BYTE(inp2, inp3, mask0, mask1, mask2, mask3, + const20, const6, const3); +- SLDI_B2_UB(inp0, inp1, inp0, inp1, inp0, inp1, 1); ++ SLDI_B2_UB(inp0, inp0, inp1, inp1, 1, inp0, inp1); + + inp0 = (v16u8) __msa_insve_d((v2i64) inp0, 1, (v2i64) inp1); + horiz4 = __msa_aver_u_b(inp0, res0); + horiz5 = (v16u8) __msa_splati_d((v2i64) horiz4, 1); +- SLDI_B2_UB(inp2, inp3, inp2, inp3, inp2, inp3, 1); ++ SLDI_B2_UB(inp2, inp2, inp3, inp3, 1, inp2, inp3); + + inp2 = (v16u8) __msa_insve_d((v2i64) inp2, 1, (v2i64) inp3); + horiz6 = __msa_aver_u_b(inp2, res1); +@@ -4197,7 +4172,7 @@ static void hv_mc_qpel_aver_hv_src10_8x8_msa(const uint8_t *src, + horiz3, horiz2, horiz1, horiz0, + horiz4, horiz5, horiz6, horiz7, + const20, const6, const3); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += 2 * dst_stride; + + inp0 = LD_UB(src); +@@ -4212,7 +4187,7 @@ static void hv_mc_qpel_aver_hv_src10_8x8_msa(const uint8_t *src, + horiz5, horiz4, horiz3, horiz2, + horiz6, horiz7, horiz8, horiz8, + const20, const6, const3); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += 2 * dst_stride; + + avg0 = (v16u8) __msa_ilvr_d((v2i64) horiz5, (v2i64) horiz4); +@@ -4222,12 +4197,9 @@ static void hv_mc_qpel_aver_hv_src10_8x8_msa(const uint8_t *src, + horiz7, horiz6, horiz5, horiz4, + horiz8, horiz8, horiz7, horiz6, + const20, const6, const3); +- ST8x2_UB(res0, dst, dst_stride); +- dst += 2 * dst_stride; +- + avg1 = (v16u8) __msa_ilvr_d((v2i64) horiz7, (v2i64) horiz6); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_aver_h_src0_16x16_msa(const uint8_t *src, +@@ -4285,7 +4257,7 @@ static void hv_mc_qpel_aver_h_src0_8x8_msa(const uint8_t *src, + horiz1, horiz0, horiz0, horiz1, + horiz2, horiz3, horiz4, horiz5, + const20, const6, const3); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(src, src_stride, inp2, inp3); +@@ -4309,7 +4281,7 @@ static void hv_mc_qpel_aver_h_src0_8x8_msa(const uint8_t *src, + horiz5, horiz4, horiz3, horiz2, + horiz6, horiz7, horiz8, horiz8, + const20, const6, const3); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += 2 * dst_stride; + + res1 = APPLY_VERT_QPEL_FILTER_8BYTE(horiz6, horiz5, horiz4, horiz3, +@@ -4317,9 +4289,7 @@ static void hv_mc_qpel_aver_h_src0_8x8_msa(const uint8_t *src, + horiz7, horiz6, horiz5, horiz4, + horiz8, horiz8, horiz7, horiz6, + const20, const6, const3); +- ST8x2_UB(res0, dst, dst_stride); +- dst += 2 * dst_stride; +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_16x16_msa(const uint8_t *src, +@@ -4371,7 +4341,7 @@ static void hv_mc_qpel_8x8_msa(const uint8_t *src, int32_t src_stride, + horiz1, horiz0, horiz0, horiz1, + horiz2, horiz3, horiz4, horiz5, + const20, const6, const3); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(src, src_stride, inp2, inp3); +@@ -4389,7 +4359,7 @@ static void hv_mc_qpel_8x8_msa(const uint8_t *src, int32_t src_stride, + horiz8 = APPLY_HORIZ_QPEL_FILTER_8BYTE_1ROW(inp0, + mask0, mask1, mask2, mask3, + const20, const6, const3); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += 2 * dst_stride; + + res0 = APPLY_VERT_QPEL_FILTER_8BYTE(horiz4, horiz3, horiz2, horiz1, +@@ -4402,9 +4372,7 @@ static void hv_mc_qpel_8x8_msa(const uint8_t *src, int32_t src_stride, + horiz7, horiz6, horiz5, horiz4, + horiz8, horiz8, horiz7, horiz6, + const20, const6, const3); +- ST8x2_UB(res0, dst, dst_stride); +- dst += 2 * dst_stride; +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_aver_h_src1_16x16_msa(const uint8_t *src, +@@ -4442,12 +4410,12 @@ static void hv_mc_qpel_aver_h_src1_8x8_msa(const uint8_t *src, + const20, const6, const3); + res1 = APPLY_HORIZ_QPEL_FILTER_8BYTE(inp2, inp3, mask0, mask1, mask2, mask3, + const20, const6, const3); +- SLDI_B2_UB(inp0, inp1, inp0, inp1, inp0, inp1, 1); ++ SLDI_B2_UB(inp0, inp0, inp1, inp1, 1, inp0, inp1); + + inp0 = (v16u8) __msa_insve_d((v2i64) inp0, 1, (v2i64) inp1); + horiz0 = __msa_aver_u_b(inp0, res0); + horiz1 = (v16u8) __msa_splati_d((v2i64) horiz0, 1); +- SLDI_B2_UB(inp2, inp3, inp2, inp3, inp2, inp3, 1); ++ SLDI_B2_UB(inp2, inp2, inp3, inp3, 1, inp2, inp3); + + inp2 = (v16u8) __msa_insve_d((v2i64) inp2, 1, (v2i64) inp3); + horiz2 = __msa_aver_u_b(inp2, res1); +@@ -4458,12 +4426,12 @@ static void hv_mc_qpel_aver_h_src1_8x8_msa(const uint8_t *src, + const20, const6, const3); + res1 = APPLY_HORIZ_QPEL_FILTER_8BYTE(inp2, inp3, mask0, mask1, mask2, mask3, + const20, const6, const3); +- SLDI_B2_UB(inp0, inp1, inp0, inp1, inp0, inp1, 1); ++ SLDI_B2_UB(inp0, inp0, inp1, inp1, 1, inp0, inp1); + + inp0 = (v16u8) __msa_insve_d((v2i64) inp0, 1, (v2i64) inp1); + horiz4 = __msa_aver_u_b(inp0, res0); + horiz5 = (v16u8) __msa_splati_d((v2i64) horiz4, 1); +- SLDI_B2_UB(inp2, inp3, inp2, inp3, inp2, inp3, 1); ++ SLDI_B2_UB(inp2, inp2, inp3, inp3, 1, inp2, inp3); + + inp2 = (v16u8) __msa_insve_d((v2i64) inp2, 1, (v2i64) inp3); + horiz6 = __msa_aver_u_b(inp2, res1); +@@ -4478,31 +4446,25 @@ static void hv_mc_qpel_aver_h_src1_8x8_msa(const uint8_t *src, + horiz1, horiz0, horiz0, horiz1, + horiz2, horiz3, horiz4, horiz5, + const20, const6, const3); +- ST8x2_UB(res0, dst, dst_stride); +- dst += (2 * dst_stride); +- + res1 = APPLY_VERT_QPEL_FILTER_8BYTE(horiz2, horiz1, horiz0, horiz0, + horiz3, horiz4, horiz5, horiz6, + horiz3, horiz2, horiz1, horiz0, + horiz4, horiz5, horiz6, horiz7, + const20, const6, const3); +- ST8x2_UB(res1, dst, dst_stride); +- dst += (2 * dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); ++ dst += (4 * dst_stride); + + res0 = APPLY_VERT_QPEL_FILTER_8BYTE(horiz4, horiz3, horiz2, horiz1, + horiz5, horiz6, horiz7, horiz8, + horiz5, horiz4, horiz3, horiz2, + horiz6, horiz7, horiz8, horiz8, + const20, const6, const3); +- ST8x2_UB(res0, dst, dst_stride); +- dst += (2 * dst_stride); +- + res1 = APPLY_VERT_QPEL_FILTER_8BYTE(horiz6, horiz5, horiz4, horiz3, + horiz7, horiz8, horiz8, horiz7, + horiz7, horiz6, horiz5, horiz4, + horiz8, horiz8, horiz7, horiz6, + const20, const6, const3); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_aver_hv_src01_16x16_msa(const uint8_t *src, +@@ -4561,7 +4523,7 @@ static void hv_mc_qpel_aver_hv_src01_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg0 = (v16u8) __msa_insve_d((v2i64) horiz1, 1, (v2i64) horiz2); + res0 = __msa_aver_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(src, src_stride, inp2, inp3); +@@ -4587,7 +4549,7 @@ static void hv_mc_qpel_aver_hv_src01_8x8_msa(const uint8_t *src, + horiz5, horiz4, horiz3, horiz2, + horiz6, horiz7, horiz8, horiz8, + const20, const6, const3); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += 2 * dst_stride; + + avg0 = (v16u8) __msa_insve_d((v2i64) horiz5, 1, (v2i64) horiz6); +@@ -4597,13 +4559,9 @@ static void hv_mc_qpel_aver_hv_src01_8x8_msa(const uint8_t *src, + horiz7, horiz6, horiz5, horiz4, + horiz8, horiz8, horiz7, horiz6, + const20, const6, const3); +- ST8x2_UB(res0, dst, dst_stride); +- dst += 2 * dst_stride; +- + avg1 = (v16u8) __msa_insve_d((v2i64) horiz7, 1, (v2i64) horiz8); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); +- dst += (2 * dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_aver_v_src1_16x16_msa(const uint8_t *src, +@@ -4660,7 +4618,7 @@ static void hv_mc_qpel_aver_v_src1_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg0 = (v16u8) __msa_insve_d((v2i64) horiz1, 1, (v2i64) horiz2); + res0 = __msa_aver_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(src, src_stride, inp2, inp3); +@@ -4685,7 +4643,7 @@ static void hv_mc_qpel_aver_v_src1_8x8_msa(const uint8_t *src, + horiz5, horiz4, horiz3, horiz2, + horiz6, horiz7, horiz8, horiz8, + const20, const6, const3); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += 2 * dst_stride; + avg0 = (v16u8) __msa_insve_d((v2i64) horiz5, 1, (v2i64) horiz6); + res0 = __msa_aver_u_b(avg0, res0); +@@ -4695,11 +4653,9 @@ static void hv_mc_qpel_aver_v_src1_8x8_msa(const uint8_t *src, + horiz7, horiz6, horiz5, horiz4, + horiz8, horiz8, horiz7, horiz6, + const20, const6, const3); +- ST8x2_UB(res0, dst, dst_stride); +- dst += 2 * dst_stride; + avg1 = (v16u8) __msa_insve_d((v2i64) horiz7, 1, (v2i64) horiz8); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_aver_hv_src11_16x16_msa(const uint8_t *src, +@@ -4734,14 +4690,14 @@ static void hv_mc_qpel_aver_hv_src11_8x8_msa(const uint8_t *src, + res0 = APPLY_HORIZ_QPEL_FILTER_8BYTE(inp0, inp1, + mask0, mask1, mask2, mask3, + const20, const6, const3); +- SLDI_B2_UB(inp0, inp1, inp0, inp1, inp0, inp1, 1); ++ SLDI_B2_UB(inp0, inp0, inp1, inp1, 1, inp0, inp1); + + inp0 = (v16u8) __msa_insve_d((v2i64) inp0, 1, (v2i64) inp1); + horiz0 = __msa_aver_u_b(inp0, res0); + horiz1 = (v16u8) __msa_splati_d((v2i64) horiz0, 1); + res1 = APPLY_HORIZ_QPEL_FILTER_8BYTE(inp2, inp3, mask0, mask1, mask2, mask3, + const20, const6, const3); +- SLDI_B2_UB(inp2, inp3, inp2, inp3, inp2, inp3, 1); ++ SLDI_B2_UB(inp2, inp2, inp3, inp3, 1, inp2, inp3); + + inp2 = (v16u8) __msa_insve_d((v2i64) inp2, 1, (v2i64) inp3); + horiz2 = __msa_aver_u_b(inp2, res1); +@@ -4750,7 +4706,7 @@ static void hv_mc_qpel_aver_hv_src11_8x8_msa(const uint8_t *src, + src += (2 * src_stride); + res0 = APPLY_HORIZ_QPEL_FILTER_8BYTE(inp0, inp1, mask0, mask1, mask2, mask3, + const20, const6, const3); +- SLDI_B2_UB(inp0, inp1, inp0, inp1, inp0, inp1, 1); ++ SLDI_B2_UB(inp0, inp0, inp1, inp1, 1, inp0, inp1); + + inp0 = (v16u8) __msa_insve_d((v2i64) inp0, 1, (v2i64) inp1); + horiz4 = __msa_aver_u_b(inp0, res0); +@@ -4764,12 +4720,12 @@ static void hv_mc_qpel_aver_hv_src11_8x8_msa(const uint8_t *src, + res0 = __msa_aver_u_b(avg0, res0); + LD_UB2(src, src_stride, inp2, inp3); + src += (2 * src_stride); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += 2 * dst_stride; + + res1 = APPLY_HORIZ_QPEL_FILTER_8BYTE(inp2, inp3, mask0, mask1, mask2, mask3, + const20, const6, const3); +- SLDI_B2_UB(inp2, inp3, inp2, inp3, inp2, inp3, 1); ++ SLDI_B2_UB(inp2, inp2, inp3, inp3, 1, inp2, inp3); + + inp2 = (v16u8) __msa_insve_d((v2i64) inp2, 1, (v2i64) inp3); + horiz6 = __msa_aver_u_b(inp2, res1); +@@ -4791,7 +4747,7 @@ static void hv_mc_qpel_aver_hv_src11_8x8_msa(const uint8_t *src, + horiz5, horiz4, horiz3, horiz2, + horiz6, horiz7, horiz8, horiz8, + const20, const6, const3); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += 2 * dst_stride; + + avg0 = (v16u8) __msa_ilvr_d((v2i64) horiz6, (v2i64) horiz5); +@@ -4801,12 +4757,9 @@ static void hv_mc_qpel_aver_hv_src11_8x8_msa(const uint8_t *src, + horiz7, horiz6, horiz5, horiz4, + horiz8, horiz8, horiz7, horiz6, + const20, const6, const3); +- ST8x2_UB(res0, dst, dst_stride); +- dst += 2 * dst_stride; +- + avg1 = (v16u8) __msa_ilvr_d((v2i64) horiz8, (v2i64) horiz7); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D4(res0, res1, 0, 1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_avg_dst_aver_hv_src00_16x16_msa(const uint8_t *src, +@@ -4869,7 +4822,7 @@ static void hv_mc_qpel_avg_dst_aver_hv_src00_8x8_msa(const uint8_t *src, + res0 = __msa_aver_u_b(avg0, res0); + avg0 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res0 = __msa_aver_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(src, src_stride, inp2, inp3); +@@ -4889,7 +4842,7 @@ static void hv_mc_qpel_avg_dst_aver_hv_src00_8x8_msa(const uint8_t *src, + res1 = __msa_aver_u_b(avg1, res1); + avg1 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + inp0 = LD_UB(src); +@@ -4906,7 +4859,7 @@ static void hv_mc_qpel_avg_dst_aver_hv_src00_8x8_msa(const uint8_t *src, + res0 = __msa_aver_u_b(avg0, res0); + avg0 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res0 = __msa_aver_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(dst, dst_stride, dst0, dst1); +@@ -4919,7 +4872,7 @@ static void hv_mc_qpel_avg_dst_aver_hv_src00_8x8_msa(const uint8_t *src, + res1 = __msa_aver_u_b(avg1, res1); + avg1 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_avg_dst_aver_v_src0_16x16_msa(const uint8_t *src, +@@ -4979,7 +4932,7 @@ static void hv_mc_qpel_avg_dst_aver_v_src0_8x8_msa(const uint8_t *src, + res0 = __msa_aver_u_b(avg0, res0); + avg0 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res0 = __msa_aver_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(src, src_stride, inp2, inp3); +@@ -4998,7 +4951,7 @@ static void hv_mc_qpel_avg_dst_aver_v_src0_8x8_msa(const uint8_t *src, + res1 = __msa_aver_u_b(avg1, res1); + avg1 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + inp0 = LD_UB(src); +@@ -5015,7 +4968,7 @@ static void hv_mc_qpel_avg_dst_aver_v_src0_8x8_msa(const uint8_t *src, + res0 = __msa_aver_u_b(avg0, res0); + avg0 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res0 = __msa_aver_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(dst, dst_stride, dst0, dst1); +@@ -5028,7 +4981,7 @@ static void hv_mc_qpel_avg_dst_aver_v_src0_8x8_msa(const uint8_t *src, + res1 = __msa_aver_u_b(avg1, res1); + avg1 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_avg_dst_aver_hv_src10_16x16_msa(const uint8_t *src, +@@ -5067,7 +5020,7 @@ static void hv_mc_qpel_avg_dst_aver_hv_src10_8x8_msa(const uint8_t *src, + + LD_UB2(src, src_stride, inp2, inp3); + src += (2 * src_stride); +- SLDI_B2_UB(inp0, inp1, inp0, inp1, inp0, inp1, 1); ++ SLDI_B2_UB(inp0, inp0, inp1, inp1, 1, inp0, inp1); + + inp0 = (v16u8) __msa_ilvr_d((v2i64) inp1, (v2i64) inp0); + horiz0 = __msa_aver_u_b(inp0, res0); +@@ -5076,7 +5029,7 @@ static void hv_mc_qpel_avg_dst_aver_hv_src10_8x8_msa(const uint8_t *src, + const20, const6, const3); + LD_UB2(src, src_stride, inp0, inp1); + src += (2 * src_stride); +- SLDI_B2_UB(inp2, inp3, inp2, inp3, inp2, inp3, 1); ++ SLDI_B2_UB(inp2, inp2, inp3, inp3, 1, inp2, inp3); + + inp2 = (v16u8) __msa_ilvr_d((v2i64) inp3, (v2i64) inp2); + horiz2 = __msa_aver_u_b(inp2, res1); +@@ -5084,7 +5037,7 @@ static void hv_mc_qpel_avg_dst_aver_hv_src10_8x8_msa(const uint8_t *src, + res0 = APPLY_HORIZ_QPEL_FILTER_8BYTE(inp0, inp1, mask0, mask1, mask2, mask3, + const20, const6, const3); + +- SLDI_B2_UB(inp0, inp1, inp0, inp1, inp0, inp1, 1); ++ SLDI_B2_UB(inp0, inp0, inp1, inp1, 1, inp0, inp1); + + inp0 = (v16u8) __msa_ilvr_d((v2i64) inp1, (v2i64) inp0); + horiz4 = __msa_aver_u_b(inp0, res0); +@@ -5099,7 +5052,7 @@ static void hv_mc_qpel_avg_dst_aver_hv_src10_8x8_msa(const uint8_t *src, + res0 = __msa_aver_u_b(avg0, res0); + avg0 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res0 = __msa_aver_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(src, src_stride, inp2, inp3); +@@ -5107,7 +5060,7 @@ static void hv_mc_qpel_avg_dst_aver_hv_src10_8x8_msa(const uint8_t *src, + res1 = APPLY_HORIZ_QPEL_FILTER_8BYTE(inp2, inp3, mask0, mask1, mask2, mask3, + const20, const6, const3); + +- SLDI_B2_UB(inp2, inp3, inp2, inp3, inp2, inp3, 1); ++ SLDI_B2_UB(inp2, inp2, inp3, inp3, 1, inp2, inp3); + + inp2 = (v16u8) __msa_ilvr_d((v2i64) inp3, (v2i64) inp2); + horiz6 = __msa_aver_u_b(inp2, res1); +@@ -5122,7 +5075,7 @@ static void hv_mc_qpel_avg_dst_aver_hv_src10_8x8_msa(const uint8_t *src, + res1 = __msa_aver_u_b(avg1, res1); + avg1 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + inp0 = LD_UB(src); +@@ -5140,7 +5093,7 @@ static void hv_mc_qpel_avg_dst_aver_hv_src10_8x8_msa(const uint8_t *src, + res0 = __msa_aver_u_b(avg0, res0); + avg0 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res0 = __msa_aver_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(dst, dst_stride, dst0, dst1); +@@ -5153,7 +5106,7 @@ static void hv_mc_qpel_avg_dst_aver_hv_src10_8x8_msa(const uint8_t *src, + res1 = __msa_aver_u_b(avg1, res1); + avg1 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_avg_dst_aver_h_src0_16x16_msa(const uint8_t *src, +@@ -5214,7 +5167,7 @@ static void hv_mc_qpel_avg_dst_aver_h_src0_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg0 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res0 = __msa_aver_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(src, src_stride, inp2, inp3); +@@ -5232,7 +5185,7 @@ static void hv_mc_qpel_avg_dst_aver_h_src0_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg1 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + inp0 = LD_UB(src); +@@ -5247,7 +5200,7 @@ static void hv_mc_qpel_avg_dst_aver_h_src0_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg0 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res0 = __msa_aver_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(dst, dst_stride, dst0, dst1); +@@ -5258,8 +5211,7 @@ static void hv_mc_qpel_avg_dst_aver_h_src0_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg1 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); +- dst += (2 * dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_avg_dst_16x16_msa(const uint8_t *src, int32_t src_stride, +@@ -5324,7 +5276,7 @@ static void hv_mc_qpel_avg_dst_8x8_msa(const uint8_t *src, int32_t src_stride, + const20, const6, const3); + avg0 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res0 = __msa_aver_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(dst, dst_stride, dst0, dst1); +@@ -5335,7 +5287,7 @@ static void hv_mc_qpel_avg_dst_8x8_msa(const uint8_t *src, int32_t src_stride, + const20, const6, const3); + avg1 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(dst, dst_stride, dst0, dst1); +@@ -5346,7 +5298,7 @@ static void hv_mc_qpel_avg_dst_8x8_msa(const uint8_t *src, int32_t src_stride, + const20, const6, const3); + avg0 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res0 = __msa_aver_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(dst, dst_stride, dst0, dst1); +@@ -5357,7 +5309,7 @@ static void hv_mc_qpel_avg_dst_8x8_msa(const uint8_t *src, int32_t src_stride, + const20, const6, const3); + avg1 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_avg_dst_aver_h_src1_16x16_msa(const uint8_t *src, +@@ -5395,7 +5347,7 @@ static void hv_mc_qpel_avg_dst_aver_h_src1_8x8_msa(const uint8_t *src, + const20, const6, const3); + LD_UB2(src, src_stride, inp2, inp3); + src += (2 * src_stride); +- SLDI_B2_UB(inp0, inp1, inp0, inp1, inp0, inp1, 1); ++ SLDI_B2_UB(inp0, inp0, inp1, inp1, 1, inp0, inp1); + + inp0 = (v16u8) __msa_ilvr_d((v2i64) inp1, (v2i64) inp0); + horiz0 = __msa_aver_u_b(inp0, res0); +@@ -5404,7 +5356,7 @@ static void hv_mc_qpel_avg_dst_aver_h_src1_8x8_msa(const uint8_t *src, + const20, const6, const3); + LD_UB2(src, src_stride, inp0, inp1); + src += (2 * src_stride); +- SLDI_B2_UB(inp2, inp3, inp2, inp3, inp2, inp3, 1); ++ SLDI_B2_UB(inp2, inp2, inp3, inp3, 1, inp2, inp3); + + inp2 = (v16u8) __msa_ilvr_d((v2i64) inp3, (v2i64) inp2); + horiz2 = __msa_aver_u_b(inp2, res1); +@@ -5412,7 +5364,7 @@ static void hv_mc_qpel_avg_dst_aver_h_src1_8x8_msa(const uint8_t *src, + res0 = APPLY_HORIZ_QPEL_FILTER_8BYTE(inp0, inp1, mask0, mask1, mask2, mask3, + const20, const6, const3); + +- SLDI_B2_UB(inp0, inp1, inp0, inp1, inp0, inp1, 1); ++ SLDI_B2_UB(inp0, inp0, inp1, inp1, 1, inp0, inp1); + + inp0 = (v16u8) __msa_ilvr_d((v2i64) inp1, (v2i64) inp0); + horiz4 = __msa_aver_u_b(inp0, res0); +@@ -5425,7 +5377,7 @@ static void hv_mc_qpel_avg_dst_aver_h_src1_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg0 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res0 = __msa_aver_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(src, src_stride, inp2, inp3); +@@ -5433,7 +5385,7 @@ static void hv_mc_qpel_avg_dst_aver_h_src1_8x8_msa(const uint8_t *src, + res1 = APPLY_HORIZ_QPEL_FILTER_8BYTE(inp2, inp3, mask0, mask1, mask2, mask3, + const20, const6, const3); + +- SLDI_B2_UB(inp2, inp3, inp2, inp3, inp2, inp3, 1); ++ SLDI_B2_UB(inp2, inp2, inp3, inp3, 1, inp2, inp3); + + inp2 = (v16u8) __msa_ilvr_d((v2i64) inp3, (v2i64) inp2); + horiz6 = __msa_aver_u_b(inp2, res1); +@@ -5446,7 +5398,7 @@ static void hv_mc_qpel_avg_dst_aver_h_src1_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg1 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + inp0 = LD_UB(src); +@@ -5462,7 +5414,7 @@ static void hv_mc_qpel_avg_dst_aver_h_src1_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg0 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res0 = __msa_aver_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(dst, dst_stride, dst0, dst1); +@@ -5473,7 +5425,7 @@ static void hv_mc_qpel_avg_dst_aver_h_src1_8x8_msa(const uint8_t *src, + const20, const6, const3); + avg1 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_avg_dst_aver_hv_src01_16x16_msa(const uint8_t *src, +@@ -5537,7 +5489,7 @@ static void hv_mc_qpel_avg_dst_aver_hv_src01_8x8_msa(const uint8_t *src, + res0 = __msa_aver_u_b(avg0, res0); + avg0 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res0 = __msa_aver_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(dst, dst_stride, dst0, dst1); +@@ -5557,7 +5509,7 @@ static void hv_mc_qpel_avg_dst_aver_hv_src01_8x8_msa(const uint8_t *src, + res1 = __msa_aver_u_b(avg1, res1); + avg1 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + inp0 = LD_UB(src); +@@ -5579,7 +5531,7 @@ static void hv_mc_qpel_avg_dst_aver_hv_src01_8x8_msa(const uint8_t *src, + LD_UB2(dst, dst_stride, dst0, dst1); + avg0 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res0 = __msa_aver_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + avg1 = (v16u8) __msa_ilvr_d((v2i64) horiz8, (v2i64) horiz7); +@@ -5587,7 +5539,7 @@ static void hv_mc_qpel_avg_dst_aver_hv_src01_8x8_msa(const uint8_t *src, + LD_UB2(dst, dst_stride, dst0, dst1); + avg1 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_avg_dst_aver_v_src1_16x16_msa(const uint8_t *src, +@@ -5647,7 +5599,7 @@ static void hv_mc_qpel_avg_dst_aver_v_src1_8x8_msa(const uint8_t *src, + res0 = __msa_aver_u_b(avg0, res0); + avg0 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res0 = __msa_aver_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(dst, dst_stride, dst0, dst1); +@@ -5666,7 +5618,7 @@ static void hv_mc_qpel_avg_dst_aver_v_src1_8x8_msa(const uint8_t *src, + res1 = __msa_aver_u_b(avg1, res1); + avg1 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + inp0 = LD_UB(src); +@@ -5686,7 +5638,7 @@ static void hv_mc_qpel_avg_dst_aver_v_src1_8x8_msa(const uint8_t *src, + LD_UB2(dst, dst_stride, dst0, dst1); + avg0 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res0 = __msa_aver_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + avg1 = (v16u8) __msa_ilvr_d((v2i64) horiz8, (v2i64) horiz7); +@@ -5694,7 +5646,7 @@ static void hv_mc_qpel_avg_dst_aver_v_src1_8x8_msa(const uint8_t *src, + LD_UB2(dst, dst_stride, dst0, dst1); + avg1 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + } + + static void hv_mc_qpel_avg_dst_aver_hv_src11_16x16_msa(const uint8_t *src, +@@ -5732,7 +5684,7 @@ static void hv_mc_qpel_avg_dst_aver_hv_src11_8x8_msa(const uint8_t *src, + const20, const6, const3); + LD_UB2(src, src_stride, inp2, inp3); + src += (2 * src_stride); +- SLDI_B2_UB(inp0, inp1, inp0, inp1, inp0, inp1, 1); ++ SLDI_B2_UB(inp0, inp0, inp1, inp1, 1, inp0, inp1); + + inp0 = (v16u8) __msa_ilvr_d((v2i64) inp1, (v2i64) inp0); + horiz0 = __msa_aver_u_b(inp0, res0); +@@ -5741,14 +5693,14 @@ static void hv_mc_qpel_avg_dst_aver_hv_src11_8x8_msa(const uint8_t *src, + const20, const6, const3); + LD_UB2(src, src_stride, inp0, inp1); + src += (2 * src_stride); +- SLDI_B2_UB(inp2, inp3, inp2, inp3, inp2, inp3, 1); ++ SLDI_B2_UB(inp2, inp2, inp3, inp3, 1, inp2, inp3); + + inp2 = (v16u8) __msa_ilvr_d((v2i64) inp3, (v2i64) inp2); + horiz2 = __msa_aver_u_b(inp2, res1); + horiz3 = (v16u8) __msa_splati_d((v2i64) horiz2, 1); + res0 = APPLY_HORIZ_QPEL_FILTER_8BYTE(inp0, inp1, mask0, mask1, mask2, mask3, + const20, const6, const3); +- SLDI_B2_UB(inp0, inp1, inp0, inp1, inp0, inp1, 1); ++ SLDI_B2_UB(inp0, inp0, inp1, inp1, 1, inp0, inp1); + + inp0 = (v16u8) __msa_ilvr_d((v2i64) inp1, (v2i64) inp0); + horiz4 = __msa_aver_u_b(inp0, res0); +@@ -5762,14 +5714,14 @@ static void hv_mc_qpel_avg_dst_aver_hv_src11_8x8_msa(const uint8_t *src, + res0 = __msa_aver_u_b(avg0, res0); + avg0 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res0 = __msa_aver_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(src, src_stride, inp2, inp3); + src += (2 * src_stride); + res1 = APPLY_HORIZ_QPEL_FILTER_8BYTE(inp2, inp3, mask0, mask1, mask2, mask3, + const20, const6, const3); +- SLDI_B2_UB(inp2, inp3, inp2, inp3, inp2, inp3, 1); ++ SLDI_B2_UB(inp2, inp2, inp3, inp3, 1, inp2, inp3); + + inp2 = (v16u8) __msa_ilvr_d((v2i64) inp3, (v2i64) inp2); + horiz6 = __msa_aver_u_b(inp2, res1); +@@ -5783,7 +5735,7 @@ static void hv_mc_qpel_avg_dst_aver_hv_src11_8x8_msa(const uint8_t *src, + res1 = __msa_aver_u_b(avg1, res1); + avg1 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + inp0 = LD_UB(src); +@@ -5800,7 +5752,7 @@ static void hv_mc_qpel_avg_dst_aver_hv_src11_8x8_msa(const uint8_t *src, + res0 = __msa_aver_u_b(avg0, res0); + avg0 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res0 = __msa_aver_u_b(avg0, res0); +- ST8x2_UB(res0, dst, dst_stride); ++ ST_D2(res0, 0, 1, dst, dst_stride); + dst += (2 * dst_stride); + + LD_UB2(dst, dst_stride, dst0, dst1); +@@ -5812,7 +5764,7 @@ static void hv_mc_qpel_avg_dst_aver_hv_src11_8x8_msa(const uint8_t *src, + res1 = __msa_aver_u_b(avg1, res1); + avg1 = (v16u8) __msa_ilvr_d((v2i64) dst1, (v2i64) dst0); + res1 = __msa_aver_u_b(avg1, res1); +- ST8x2_UB(res1, dst, dst_stride); ++ ST_D2(res1, 0, 1, dst, dst_stride); + } + + static void copy_8x8_msa(const uint8_t *src, int32_t src_stride, +diff --git a/libavcodec/mips/sbrdsp_mips.c b/libavcodec/mips/sbrdsp_mips.c +index 1b0a106..6c57f26 100644 +--- a/libavcodec/mips/sbrdsp_mips.c ++++ b/libavcodec/mips/sbrdsp_mips.c +@@ -796,9 +796,9 @@ static void sbr_hf_apply_noise_2_mips(float (*Y)[2], const float *s_m, + const float *q_filt, int noise, + int kx, int m_max) + { +- int m; ++ int m, temp0, temp1; + float *ff_table; +- float y0,y1, temp0, temp1, temp2, temp3, temp4, temp5; ++ float y0, y1, temp2, temp3, temp4, temp5; + + for (m = 0; m < m_max; m++) { + +@@ -808,14 +808,14 @@ static void sbr_hf_apply_noise_2_mips(float (*Y)[2], const float *s_m, + + __asm__ volatile( + "lwc1 %[y0], 0(%[Y1]) \n\t" +- "lwc1 %[temp1], 0(%[s_m1]) \n\t" ++ "lwc1 %[temp3], 0(%[s_m1]) \n\t" + "addiu %[noise], %[noise], 1 \n\t" + "andi %[noise], %[noise], 0x1ff \n\t" + "sll %[temp0], %[noise], 3 \n\t" + PTR_ADDU "%[ff_table],%[ff_sbr_noise_table],%[temp0] \n\t" +- "sub.s %[y0], %[y0], %[temp1] \n\t" +- "mfc1 %[temp3], %[temp1] \n\t" +- "bne %[temp3], $0, 1f \n\t" ++ "sub.s %[y0], %[y0], %[temp3] \n\t" ++ "mfc1 %[temp1], %[temp3] \n\t" ++ "bne %[temp1], $0, 1f \n\t" + "lwc1 %[y1], 4(%[Y1]) \n\t" + "lwc1 %[temp2], 0(%[q_filt1]) \n\t" + "lwc1 %[temp4], 0(%[ff_table]) \n\t" +@@ -826,9 +826,10 @@ static void sbr_hf_apply_noise_2_mips(float (*Y)[2], const float *s_m, + "1: \n\t" + "swc1 %[y0], 0(%[Y1]) \n\t" + +- : [temp0]"=&r"(temp0), [ff_table]"=&r"(ff_table), [y0]"=&f"(y0), +- [y1]"=&f"(y1), [temp1]"=&f"(temp1), [temp2]"=&f"(temp2), +- [temp3]"=&r"(temp3), [temp4]"=&f"(temp4), [temp5]"=&f"(temp5) ++ : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [y0]"=&f"(y0), ++ [y1]"=&f"(y1), [ff_table]"=&r"(ff_table), ++ [temp2]"=&f"(temp2), [temp3]"=&f"(temp3), ++ [temp4]"=&f"(temp4), [temp5]"=&f"(temp5) + : [ff_sbr_noise_table]"r"(ff_sbr_noise_table), [noise]"r"(noise), + [Y1]"r"(Y1), [s_m1]"r"(s_m1), [q_filt1]"r"(q_filt1) + : "memory" +diff --git a/libavcodec/mips/simple_idct_mmi.c b/libavcodec/mips/simple_idct_mmi.c +index 7f4bb74..73d797f 100644 +--- a/libavcodec/mips/simple_idct_mmi.c ++++ b/libavcodec/mips/simple_idct_mmi.c +@@ -39,7 +39,7 @@ + #define COL_SHIFT 20 + #define DC_SHIFT 3 + +-DECLARE_ALIGNED(8, const int16_t, W_arr)[46] = { ++DECLARE_ALIGNED(16, const int16_t, W_arr)[46] = { + W4, W2, W4, W6, + W1, W3, W5, W7, + W4, W6, -W4, -W2, +diff --git a/libavcodec/mips/simple_idct_msa.c b/libavcodec/mips/simple_idct_msa.c +index 8a72359..4bd3dd8 100644 +--- a/libavcodec/mips/simple_idct_msa.c ++++ b/libavcodec/mips/simple_idct_msa.c +@@ -336,35 +336,26 @@ static void simple_idct_put_msa(uint8_t *dst, int32_t dst_stride, + SRA_4V(temp2_r, temp2_l, temp3_r, temp3_l, 20); + SRA_4V(a3_r, a3_l, a2_r, a2_l, 20); + SRA_4V(a1_r, a1_l, a0_r, a0_l, 20); +- PCKEV_H4_SW(temp0_l, temp0_r, temp1_l, temp1_r, temp2_l, temp2_r, +- temp3_l, temp3_r, temp0_r, temp1_r, temp2_r, temp3_r); +- PCKEV_H4_SW(a0_l, a0_r, a1_l, a1_r, a2_l, a2_r, a3_l, a3_r, +- a0_r, a1_r, a2_r, a3_r); +- temp0_r = (v4i32) CLIP_SH_0_255(temp0_r); +- temp1_r = (v4i32) CLIP_SH_0_255(temp1_r); +- temp2_r = (v4i32) CLIP_SH_0_255(temp2_r); +- temp3_r = (v4i32) CLIP_SH_0_255(temp3_r); +- PCKEV_B4_SW(temp0_r, temp0_r, temp1_r, temp1_r, +- temp2_r, temp2_r, temp3_r, temp3_r, +- temp0_r, temp1_r, temp2_r, temp3_r); +- tmp0 = __msa_copy_u_d((v2i64) temp0_r, 1); +- tmp1 = __msa_copy_u_d((v2i64) temp1_r, 1); +- tmp2 = __msa_copy_u_d((v2i64) temp2_r, 1); +- tmp3 = __msa_copy_u_d((v2i64) temp3_r, 1); +- SD4(tmp0, tmp1, tmp2, tmp3, dst, dst_stride); +- dst += 4 * dst_stride; +- a0_r = (v4i32) CLIP_SH_0_255(a0_r); +- a1_r = (v4i32) CLIP_SH_0_255(a1_r); +- a2_r = (v4i32) CLIP_SH_0_255(a2_r); +- a3_r = (v4i32) CLIP_SH_0_255(a3_r); +- PCKEV_B4_SW(a0_r, a0_r, a1_r, a1_r, +- a2_r, a2_r, a3_r, a3_r, a0_r, a1_r, a2_r, a3_r); +- tmp3 = __msa_copy_u_d((v2i64) a0_r, 1); +- tmp2 = __msa_copy_u_d((v2i64) a1_r, 1); +- tmp1 = __msa_copy_u_d((v2i64) a2_r, 1); +- tmp0 = __msa_copy_u_d((v2i64) a3_r, 1); ++ PCKEV_H4_SH(temp0_l, temp0_r, temp1_l, temp1_r, temp2_l, temp2_r, ++ temp3_l, temp3_r, in0, in1, in2, in3); ++ PCKEV_H4_SH(a0_l, a0_r, a1_l, a1_r, a2_l, a2_r, a3_l, a3_r, ++ in4, in5, in6, in7); ++ CLIP_SH4_0_255(in0, in1, in2, in3); ++ PCKEV_B4_SH(in0, in0, in1, in1, in2, in2, in3, in3, ++ in0, in1, in2, in3); ++ tmp0 = __msa_copy_u_d((v2i64) in0, 1); ++ tmp1 = __msa_copy_u_d((v2i64) in1, 1); ++ tmp2 = __msa_copy_u_d((v2i64) in2, 1); ++ tmp3 = __msa_copy_u_d((v2i64) in3, 1); + SD4(tmp0, tmp1, tmp2, tmp3, dst, dst_stride); +- dst += 4 * dst_stride; ++ CLIP_SH4_0_255(in4, in5, in6, in7); ++ PCKEV_B4_SH(in4, in4, in5, in5, in6, in6, in7, in7, ++ in4, in5, in6, in7); ++ tmp3 = __msa_copy_u_d((v2i64) in4, 1); ++ tmp2 = __msa_copy_u_d((v2i64) in5, 1); ++ tmp1 = __msa_copy_u_d((v2i64) in6, 1); ++ tmp0 = __msa_copy_u_d((v2i64) in7, 1); ++ SD4(tmp0, tmp1, tmp2, tmp3, dst + 4 * dst_stride, dst_stride); + } + + static void simple_idct_add_msa(uint8_t *dst, int32_t dst_stride, +@@ -516,21 +507,17 @@ static void simple_idct_add_msa(uint8_t *dst, int32_t dst_stride, + temp3_l, temp3_r, temp0_r, temp1_r, temp2_r, temp3_r); + ILVR_B4_SW(zero, in0, zero, in1, zero, in2, zero, in3, + temp0_l, temp1_l, temp2_l, temp3_l); +- temp0_r = (v4i32) ((v8i16) (temp0_r) + (v8i16) (temp0_l)); +- temp1_r = (v4i32) ((v8i16) (temp1_r) + (v8i16) (temp1_l)); +- temp2_r = (v4i32) ((v8i16) (temp2_r) + (v8i16) (temp2_l)); +- temp3_r = (v4i32) ((v8i16) (temp3_r) + (v8i16) (temp3_l)); +- temp0_r = (v4i32) CLIP_SH_0_255(temp0_r); +- temp1_r = (v4i32) CLIP_SH_0_255(temp1_r); +- temp2_r = (v4i32) CLIP_SH_0_255(temp2_r); +- temp3_r = (v4i32) CLIP_SH_0_255(temp3_r); +- PCKEV_B4_SW(temp0_r, temp0_r, temp1_r, temp1_r, +- temp2_r, temp2_r, temp3_r, temp3_r, +- temp0_r, temp1_r, temp2_r, temp3_r); +- tmp0 = __msa_copy_u_d((v2i64) temp0_r, 1); +- tmp1 = __msa_copy_u_d((v2i64) temp1_r, 1); +- tmp2 = __msa_copy_u_d((v2i64) temp2_r, 1); +- tmp3 = __msa_copy_u_d((v2i64) temp3_r, 1); ++ in0 = (v8i16) (temp0_r) + (v8i16) (temp0_l); ++ in1 = (v8i16) (temp1_r) + (v8i16) (temp1_l); ++ in2 = (v8i16) (temp2_r) + (v8i16) (temp2_l); ++ in3 = (v8i16) (temp3_r) + (v8i16) (temp3_l); ++ CLIP_SH4_0_255(in0, in1, in2, in3); ++ PCKEV_B4_SH(in0, in0, in1, in1, in2, in2, in3, in3, ++ in0, in1, in2, in3); ++ tmp0 = __msa_copy_u_d((v2i64) in0, 1); ++ tmp1 = __msa_copy_u_d((v2i64) in1, 1); ++ tmp2 = __msa_copy_u_d((v2i64) in2, 1); ++ tmp3 = __msa_copy_u_d((v2i64) in3, 1); + SD4(tmp0, tmp1, tmp2, tmp3, dst, dst_stride); + + SRA_4V(a3_r, a3_l, a2_r, a2_l, 20); +@@ -540,20 +527,17 @@ static void simple_idct_add_msa(uint8_t *dst, int32_t dst_stride, + a0_r, a1_r, a2_r, a3_r); + ILVR_B4_SW(zero, in4, zero, in5, zero, in6, zero, in7, + a3_l, a2_l, a1_l, a0_l); +- a3_r = (v4i32) ((v8i16) (a3_r) + (v8i16) (a3_l)); +- a2_r = (v4i32) ((v8i16) (a2_r) + (v8i16) (a2_l)); +- a1_r = (v4i32) ((v8i16) (a1_r) + (v8i16) (a1_l)); +- a0_r = (v4i32) ((v8i16) (a0_r) + (v8i16) (a0_l)); +- a3_r = (v4i32) CLIP_SH_0_255(a3_r); +- a2_r = (v4i32) CLIP_SH_0_255(a2_r); +- a1_r = (v4i32) CLIP_SH_0_255(a1_r); +- a0_r = (v4i32) CLIP_SH_0_255(a0_r); +- PCKEV_B4_SW(a0_r, a0_r, a1_r, a1_r, +- a2_r, a2_r, a3_r, a3_r, a0_r, a1_r, a2_r, a3_r); +- tmp0 = __msa_copy_u_d((v2i64) a3_r, 1); +- tmp1 = __msa_copy_u_d((v2i64) a2_r, 1); +- tmp2 = __msa_copy_u_d((v2i64) a1_r, 1); +- tmp3 = __msa_copy_u_d((v2i64) a0_r, 1); ++ in4 = (v8i16) (a3_r) + (v8i16) (a3_l); ++ in5 = (v8i16) (a2_r) + (v8i16) (a2_l); ++ in6 = (v8i16) (a1_r) + (v8i16) (a1_l); ++ in7 = (v8i16) (a0_r) + (v8i16) (a0_l); ++ CLIP_SH4_0_255(in4, in5, in6, in7); ++ PCKEV_B4_SH(in4, in4, in5, in5, in6, in6, in7, in7, ++ in4, in5, in6, in7); ++ tmp0 = __msa_copy_u_d((v2i64) in4, 1); ++ tmp1 = __msa_copy_u_d((v2i64) in5, 1); ++ tmp2 = __msa_copy_u_d((v2i64) in6, 1); ++ tmp3 = __msa_copy_u_d((v2i64) in7, 1); + SD4(tmp0, tmp1, tmp2, tmp3, dst + 4 * dst_stride, dst_stride); + } + +diff --git a/libavcodec/mips/vc1dsp_init_mips.c b/libavcodec/mips/vc1dsp_init_mips.c +index 4adc9e1..94126f3 100644 +--- a/libavcodec/mips/vc1dsp_init_mips.c ++++ b/libavcodec/mips/vc1dsp_init_mips.c +@@ -18,91 +18,103 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/mips/cpu.h" + #include "libavutil/attributes.h" + #include "libavcodec/vc1dsp.h" + #include "vc1dsp_mips.h" + #include "config.h" + +-#if HAVE_MMI +-static av_cold void vc1dsp_init_mmi(VC1DSPContext *dsp) +-{ +-#if _MIPS_SIM != _ABIO32 +- dsp->vc1_inv_trans_8x8 = ff_vc1_inv_trans_8x8_mmi; +- dsp->vc1_inv_trans_4x8 = ff_vc1_inv_trans_4x8_mmi; +- dsp->vc1_inv_trans_8x4 = ff_vc1_inv_trans_8x4_mmi; +-#endif +- dsp->vc1_inv_trans_4x4 = ff_vc1_inv_trans_4x4_mmi; +- dsp->vc1_inv_trans_8x8_dc = ff_vc1_inv_trans_8x8_dc_mmi; +- dsp->vc1_inv_trans_4x8_dc = ff_vc1_inv_trans_4x8_dc_mmi; +- dsp->vc1_inv_trans_8x4_dc = ff_vc1_inv_trans_8x4_dc_mmi; +- dsp->vc1_inv_trans_4x4_dc = ff_vc1_inv_trans_4x4_dc_mmi; +- +- dsp->vc1_h_overlap = ff_vc1_h_overlap_mmi; +- dsp->vc1_v_overlap = ff_vc1_v_overlap_mmi; +- dsp->vc1_h_s_overlap = ff_vc1_h_s_overlap_mmi; +- dsp->vc1_v_s_overlap = ff_vc1_v_s_overlap_mmi; +- +- dsp->vc1_v_loop_filter4 = ff_vc1_v_loop_filter4_mmi; +- dsp->vc1_h_loop_filter4 = ff_vc1_h_loop_filter4_mmi; +- dsp->vc1_v_loop_filter8 = ff_vc1_v_loop_filter8_mmi; +- dsp->vc1_h_loop_filter8 = ff_vc1_h_loop_filter8_mmi; +- dsp->vc1_v_loop_filter16 = ff_vc1_v_loop_filter16_mmi; +- dsp->vc1_h_loop_filter16 = ff_vc1_h_loop_filter16_mmi; +- + #define FN_ASSIGN(OP, X, Y, INSN) \ + dsp->OP##vc1_mspel_pixels_tab[1][X+4*Y] = ff_##OP##vc1_mspel_mc##X##Y##INSN; \ + dsp->OP##vc1_mspel_pixels_tab[0][X+4*Y] = ff_##OP##vc1_mspel_mc##X##Y##_16##INSN + +- FN_ASSIGN(put_, 0, 0, _mmi); +- FN_ASSIGN(put_, 0, 1, _mmi); +- FN_ASSIGN(put_, 0, 2, _mmi); +- FN_ASSIGN(put_, 0, 3, _mmi); +- +- FN_ASSIGN(put_, 1, 0, _mmi); +- //FN_ASSIGN(put_, 1, 1, _mmi);//FIXME +- //FN_ASSIGN(put_, 1, 2, _mmi);//FIXME +- //FN_ASSIGN(put_, 1, 3, _mmi);//FIXME +- +- FN_ASSIGN(put_, 2, 0, _mmi); +- //FN_ASSIGN(put_, 2, 1, _mmi);//FIXME +- //FN_ASSIGN(put_, 2, 2, _mmi);//FIXME +- //FN_ASSIGN(put_, 2, 3, _mmi);//FIXME +- +- FN_ASSIGN(put_, 3, 0, _mmi); +- //FN_ASSIGN(put_, 3, 1, _mmi);//FIXME +- //FN_ASSIGN(put_, 3, 2, _mmi);//FIXME +- //FN_ASSIGN(put_, 3, 3, _mmi);//FIXME +- +- FN_ASSIGN(avg_, 0, 0, _mmi); +- FN_ASSIGN(avg_, 0, 1, _mmi); +- FN_ASSIGN(avg_, 0, 2, _mmi); +- FN_ASSIGN(avg_, 0, 3, _mmi); +- +- FN_ASSIGN(avg_, 1, 0, _mmi); +- //FN_ASSIGN(avg_, 1, 1, _mmi);//FIXME +- //FN_ASSIGN(avg_, 1, 2, _mmi);//FIXME +- //FN_ASSIGN(avg_, 1, 3, _mmi);//FIXME +- +- FN_ASSIGN(avg_, 2, 0, _mmi); +- //FN_ASSIGN(avg_, 2, 1, _mmi);//FIXME +- //FN_ASSIGN(avg_, 2, 2, _mmi);//FIXME +- //FN_ASSIGN(avg_, 2, 3, _mmi);//FIXME +- +- FN_ASSIGN(avg_, 3, 0, _mmi); +- //FN_ASSIGN(avg_, 3, 1, _mmi);//FIXME +- //FN_ASSIGN(avg_, 3, 2, _mmi);//FIXME +- //FN_ASSIGN(avg_, 3, 3, _mmi);//FIXME +- +- dsp->put_no_rnd_vc1_chroma_pixels_tab[0] = ff_put_no_rnd_vc1_chroma_mc8_mmi; +- dsp->avg_no_rnd_vc1_chroma_pixels_tab[0] = ff_avg_no_rnd_vc1_chroma_mc8_mmi; +- dsp->put_no_rnd_vc1_chroma_pixels_tab[1] = ff_put_no_rnd_vc1_chroma_mc4_mmi; +- dsp->avg_no_rnd_vc1_chroma_pixels_tab[1] = ff_avg_no_rnd_vc1_chroma_mc4_mmi; +-} +-#endif /* HAVE_MMI */ +- + av_cold void ff_vc1dsp_init_mips(VC1DSPContext *dsp) + { +-#if HAVE_MMI +- vc1dsp_init_mmi(dsp); +-#endif /* HAVE_MMI */ ++ int cpu_flags = av_get_cpu_flags(); ++ ++ if (have_mmi(cpu_flags)) { ++ #if _MIPS_SIM != _ABIO32 ++ dsp->vc1_inv_trans_8x8 = ff_vc1_inv_trans_8x8_mmi; ++ dsp->vc1_inv_trans_4x8 = ff_vc1_inv_trans_4x8_mmi; ++ dsp->vc1_inv_trans_8x4 = ff_vc1_inv_trans_8x4_mmi; ++#endif ++ dsp->vc1_inv_trans_4x4 = ff_vc1_inv_trans_4x4_mmi; ++ dsp->vc1_inv_trans_8x8_dc = ff_vc1_inv_trans_8x8_dc_mmi; ++ dsp->vc1_inv_trans_4x8_dc = ff_vc1_inv_trans_4x8_dc_mmi; ++ dsp->vc1_inv_trans_8x4_dc = ff_vc1_inv_trans_8x4_dc_mmi; ++ dsp->vc1_inv_trans_4x4_dc = ff_vc1_inv_trans_4x4_dc_mmi; ++ ++ dsp->vc1_h_overlap = ff_vc1_h_overlap_mmi; ++ dsp->vc1_v_overlap = ff_vc1_v_overlap_mmi; ++ dsp->vc1_h_s_overlap = ff_vc1_h_s_overlap_mmi; ++ dsp->vc1_v_s_overlap = ff_vc1_v_s_overlap_mmi; ++ ++ dsp->vc1_v_loop_filter4 = ff_vc1_v_loop_filter4_mmi; ++ dsp->vc1_h_loop_filter4 = ff_vc1_h_loop_filter4_mmi; ++ dsp->vc1_v_loop_filter8 = ff_vc1_v_loop_filter8_mmi; ++ dsp->vc1_h_loop_filter8 = ff_vc1_h_loop_filter8_mmi; ++ dsp->vc1_v_loop_filter16 = ff_vc1_v_loop_filter16_mmi; ++ dsp->vc1_h_loop_filter16 = ff_vc1_h_loop_filter16_mmi; ++ ++ FN_ASSIGN(put_, 0, 0, _mmi); ++ FN_ASSIGN(put_, 0, 1, _mmi); ++ FN_ASSIGN(put_, 0, 2, _mmi); ++ FN_ASSIGN(put_, 0, 3, _mmi); ++ ++ FN_ASSIGN(put_, 1, 0, _mmi); ++ //FN_ASSIGN(put_, 1, 1, _mmi);//FIXME ++ //FN_ASSIGN(put_, 1, 2, _mmi);//FIXME ++ //FN_ASSIGN(put_, 1, 3, _mmi);//FIXME ++ ++ FN_ASSIGN(put_, 2, 0, _mmi); ++ //FN_ASSIGN(put_, 2, 1, _mmi);//FIXME ++ //FN_ASSIGN(put_, 2, 2, _mmi);//FIXME ++ //FN_ASSIGN(put_, 2, 3, _mmi);//FIXME ++ ++ FN_ASSIGN(put_, 3, 0, _mmi); ++ //FN_ASSIGN(put_, 3, 1, _mmi);//FIXME ++ //FN_ASSIGN(put_, 3, 2, _mmi);//FIXME ++ //FN_ASSIGN(put_, 3, 3, _mmi);//FIXME ++ ++ FN_ASSIGN(avg_, 0, 0, _mmi); ++ FN_ASSIGN(avg_, 0, 1, _mmi); ++ FN_ASSIGN(avg_, 0, 2, _mmi); ++ FN_ASSIGN(avg_, 0, 3, _mmi); ++ ++ FN_ASSIGN(avg_, 1, 0, _mmi); ++ //FN_ASSIGN(avg_, 1, 1, _mmi);//FIXME ++ //FN_ASSIGN(avg_, 1, 2, _mmi);//FIXME ++ //FN_ASSIGN(avg_, 1, 3, _mmi);//FIXME ++ ++ FN_ASSIGN(avg_, 2, 0, _mmi); ++ //FN_ASSIGN(avg_, 2, 1, _mmi);//FIXME ++ //FN_ASSIGN(avg_, 2, 2, _mmi);//FIXME ++ //FN_ASSIGN(avg_, 2, 3, _mmi);//FIXME ++ ++ FN_ASSIGN(avg_, 3, 0, _mmi); ++ //FN_ASSIGN(avg_, 3, 1, _mmi);//FIXME ++ //FN_ASSIGN(avg_, 3, 2, _mmi);//FIXME ++ //FN_ASSIGN(avg_, 3, 3, _mmi);//FIXME ++ ++ dsp->put_no_rnd_vc1_chroma_pixels_tab[0] = ff_put_no_rnd_vc1_chroma_mc8_mmi; ++ dsp->avg_no_rnd_vc1_chroma_pixels_tab[0] = ff_avg_no_rnd_vc1_chroma_mc8_mmi; ++ dsp->put_no_rnd_vc1_chroma_pixels_tab[1] = ff_put_no_rnd_vc1_chroma_mc4_mmi; ++ dsp->avg_no_rnd_vc1_chroma_pixels_tab[1] = ff_avg_no_rnd_vc1_chroma_mc4_mmi; ++ } ++ ++ if (have_msa(cpu_flags)) { ++ dsp->vc1_inv_trans_8x8 = ff_vc1_inv_trans_8x8_msa; ++ dsp->vc1_inv_trans_4x8 = ff_vc1_inv_trans_4x8_msa; ++ dsp->vc1_inv_trans_8x4 = ff_vc1_inv_trans_8x4_msa; ++ ++ FN_ASSIGN(put_, 1, 1, _msa); ++ FN_ASSIGN(put_, 1, 2, _msa); ++ FN_ASSIGN(put_, 1, 3, _msa); ++ FN_ASSIGN(put_, 2, 1, _msa); ++ FN_ASSIGN(put_, 2, 2, _msa); ++ FN_ASSIGN(put_, 2, 3, _msa); ++ FN_ASSIGN(put_, 3, 1, _msa); ++ FN_ASSIGN(put_, 3, 2, _msa); ++ FN_ASSIGN(put_, 3, 3, _msa); ++ } + } +diff --git a/libavcodec/mips/vc1dsp_mips.h b/libavcodec/mips/vc1dsp_mips.h +index 0db85fa..5897dae 100644 +--- a/libavcodec/mips/vc1dsp_mips.h ++++ b/libavcodec/mips/vc1dsp_mips.h +@@ -180,15 +180,38 @@ void ff_vc1_h_loop_filter16_mmi(uint8_t *src, int stride, int pq); + + void ff_put_no_rnd_vc1_chroma_mc8_mmi(uint8_t *dst /* align 8 */, + uint8_t *src /* align 1 */, +- int stride, int h, int x, int y); ++ ptrdiff_t stride, int h, int x, int y); + void ff_put_no_rnd_vc1_chroma_mc4_mmi(uint8_t *dst /* align 8 */, + uint8_t *src /* align 1 */, +- int stride, int h, int x, int y); ++ ptrdiff_t stride, int h, int x, int y); + void ff_avg_no_rnd_vc1_chroma_mc8_mmi(uint8_t *dst /* align 8 */, + uint8_t *src /* align 1 */, +- int stride, int h, int x, int y); ++ ptrdiff_t stride, int h, int x, int y); + void ff_avg_no_rnd_vc1_chroma_mc4_mmi(uint8_t *dst /* align 8 */, + uint8_t *src /* align 1 */, +- int stride, int h, int x, int y); ++ ptrdiff_t stride, int h, int x, int y); + ++void ff_vc1_inv_trans_8x8_msa(int16_t block[64]); ++void ff_vc1_inv_trans_8x4_msa(uint8_t *dest, ptrdiff_t linesize, int16_t *block); ++void ff_vc1_inv_trans_4x8_msa(uint8_t *dest, ptrdiff_t linesize, int16_t *block); ++ ++#define FF_PUT_VC1_MSPEL_MC_MSA(hmode, vmode) \ ++void ff_put_vc1_mspel_mc ## hmode ## vmode ## _msa(uint8_t *dst, \ ++ const uint8_t *src, \ ++ ptrdiff_t stride, int rnd); \ ++void ff_put_vc1_mspel_mc ## hmode ## vmode ## _16_msa(uint8_t *dst, \ ++ const uint8_t *src, \ ++ ptrdiff_t stride, int rnd); ++ ++FF_PUT_VC1_MSPEL_MC_MSA(1, 1); ++FF_PUT_VC1_MSPEL_MC_MSA(1, 2); ++FF_PUT_VC1_MSPEL_MC_MSA(1, 3); ++ ++FF_PUT_VC1_MSPEL_MC_MSA(2, 1); ++FF_PUT_VC1_MSPEL_MC_MSA(2, 2); ++FF_PUT_VC1_MSPEL_MC_MSA(2, 3); ++ ++FF_PUT_VC1_MSPEL_MC_MSA(3, 1); ++FF_PUT_VC1_MSPEL_MC_MSA(3, 2); ++FF_PUT_VC1_MSPEL_MC_MSA(3, 3); + #endif /* AVCODEC_MIPS_VC1DSP_MIPS_H */ +diff --git a/libavcodec/mips/vc1dsp_mmi.c b/libavcodec/mips/vc1dsp_mmi.c +index db314de..9837868 100644 +--- a/libavcodec/mips/vc1dsp_mmi.c ++++ b/libavcodec/mips/vc1dsp_mmi.c +@@ -2241,7 +2241,7 @@ DECLARE_FUNCTION(3, 3) + + void ff_put_no_rnd_vc1_chroma_mc8_mmi(uint8_t *dst /* align 8 */, + uint8_t *src /* align 1 */, +- int stride, int h, int x, int y) ++ ptrdiff_t stride, int h, int x, int y) + { + const int A = (8 - x) * (8 - y); + const int B = (x) * (8 - y); +@@ -2296,7 +2296,7 @@ void ff_put_no_rnd_vc1_chroma_mc8_mmi(uint8_t *dst /* align 8 */, + + void ff_put_no_rnd_vc1_chroma_mc4_mmi(uint8_t *dst /* align 8 */, + uint8_t *src /* align 1 */, +- int stride, int h, int x, int y) ++ ptrdiff_t stride, int h, int x, int y) + { + const int A = (8 - x) * (8 - y); + const int B = (x) * (8 - y); +@@ -2349,7 +2349,7 @@ void ff_put_no_rnd_vc1_chroma_mc4_mmi(uint8_t *dst /* align 8 */, + + void ff_avg_no_rnd_vc1_chroma_mc8_mmi(uint8_t *dst /* align 8 */, + uint8_t *src /* align 1 */, +- int stride, int h, int x, int y) ++ ptrdiff_t stride, int h, int x, int y) + { + const int A = (8 - x) * (8 - y); + const int B = (x) * (8 - y); +@@ -2407,7 +2407,7 @@ void ff_avg_no_rnd_vc1_chroma_mc8_mmi(uint8_t *dst /* align 8 */, + + void ff_avg_no_rnd_vc1_chroma_mc4_mmi(uint8_t *dst /* align 8 */, + uint8_t *src /* align 1 */, +- int stride, int h, int x, int y) ++ ptrdiff_t stride, int h, int x, int y) + { + const int A = (8 - x) * (8 - y); + const int B = ( x) * (8 - y); +diff --git a/libavcodec/mips/vc1dsp_msa.c b/libavcodec/mips/vc1dsp_msa.c +new file mode 100644 +index 0000000..6e588e8 +--- /dev/null ++++ b/libavcodec/mips/vc1dsp_msa.c +@@ -0,0 +1,461 @@ ++/* ++ * Loongson SIMD optimized vc1dsp ++ * ++ * Copyright (c) 2019 Loongson Technology Corporation Limited ++ * gxw ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "vc1dsp_mips.h" ++#include "constants.h" ++#include "libavutil/mips/generic_macros_msa.h" ++ ++void ff_vc1_inv_trans_8x8_msa(int16_t block[64]) ++{ ++ v8i16 in0, in1, in2, in3, in4, in5, in6, in7; ++ v4i32 in_r0, in_r1, in_r2, in_r3, in_r4, in_r5, in_r6, in_r7; ++ v4i32 in_l0, in_l1, in_l2, in_l3, in_l4, in_l5, in_l6, in_l7; ++ v4i32 t_r1, t_r2, t_r3, t_r4, t_r5, t_r6, t_r7, t_r8; ++ v4i32 t_l1, t_l2, t_l3, t_l4, t_l5, t_l6, t_l7, t_l8; ++ v4i32 cnst_12 = {12, 12, 12, 12}; ++ v4i32 cnst_4 = {4, 4, 4, 4}; ++ v4i32 cnst_16 = {16, 16, 16, 16}; ++ v4i32 cnst_6 = {6, 6, 6, 6}; ++ v4i32 cnst_15 = {15, 15, 15, 15}; ++ v4i32 cnst_9 = {9, 9, 9, 9}; ++ v4i32 cnst_1 = {1, 1, 1, 1}; ++ v4i32 cnst_64 = {64, 64, 64, 64}; ++ ++ LD_SH8(block, 8, in0, in1, in2, in3, in4, in5, in6, in7); ++ UNPCK_SH_SW(in0, in_r0, in_l0); ++ UNPCK_SH_SW(in1, in_r1, in_l1); ++ UNPCK_SH_SW(in2, in_r2, in_l2); ++ UNPCK_SH_SW(in3, in_r3, in_l3); ++ UNPCK_SH_SW(in4, in_r4, in_l4); ++ UNPCK_SH_SW(in5, in_r5, in_l5); ++ UNPCK_SH_SW(in6, in_r6, in_l6); ++ UNPCK_SH_SW(in7, in_r7, in_l7); ++ // First loop ++ t_r1 = cnst_12 * (in_r0 + in_r4) + cnst_4; ++ t_l1 = cnst_12 * (in_l0 + in_l4) + cnst_4; ++ t_r2 = cnst_12 * (in_r0 - in_r4) + cnst_4; ++ t_l2 = cnst_12 * (in_l0 - in_l4) + cnst_4; ++ t_r3 = cnst_16 * in_r2 + cnst_6 * in_r6; ++ t_l3 = cnst_16 * in_l2 + cnst_6 * in_l6; ++ t_r4 = cnst_6 * in_r2 - cnst_16 * in_r6; ++ t_l4 = cnst_6 * in_l2 - cnst_16 * in_l6; ++ ++ ADD4(t_r1, t_r3, t_l1, t_l3, t_r2, t_r4, t_l2, t_l4, t_r5, t_l5, t_r6, t_l6); ++ SUB4(t_r2, t_r4, t_l2, t_l4, t_r1, t_r3, t_l1, t_l3, t_r7, t_l7, t_r8, t_l8); ++ t_r1 = cnst_16 * in_r1 + cnst_15 * in_r3 + cnst_9 * in_r5 + cnst_4 * in_r7; ++ t_l1 = cnst_16 * in_l1 + cnst_15 * in_l3 + cnst_9 * in_l5 + cnst_4 * in_l7; ++ t_r2 = cnst_15 * in_r1 - cnst_4 * in_r3 - cnst_16 * in_r5 - cnst_9 * in_r7; ++ t_l2 = cnst_15 * in_l1 - cnst_4 * in_l3 - cnst_16 * in_l5 - cnst_9 * in_l7; ++ t_r3 = cnst_9 * in_r1 - cnst_16 * in_r3 + cnst_4 * in_r5 + cnst_15 * in_r7; ++ t_l3 = cnst_9 * in_l1 - cnst_16 * in_l3 + cnst_4 * in_l5 + cnst_15 * in_l7; ++ t_r4 = cnst_4 * in_r1 - cnst_9 * in_r3 + cnst_15 * in_r5 - cnst_16 * in_r7; ++ t_l4 = cnst_4 * in_l1 - cnst_9 * in_l3 + cnst_15 * in_l5 - cnst_16 * in_l7; ++ ++ in_r0 = (t_r5 + t_r1) >> 3; ++ in_l0 = (t_l5 + t_l1) >> 3; ++ in_r1 = (t_r6 + t_r2) >> 3; ++ in_l1 = (t_l6 + t_l2) >> 3; ++ in_r2 = (t_r7 + t_r3) >> 3; ++ in_l2 = (t_l7 + t_l3) >> 3; ++ in_r3 = (t_r8 + t_r4) >> 3; ++ in_l3 = (t_l8 + t_l4) >> 3; ++ ++ in_r4 = (t_r8 - t_r4) >> 3; ++ in_l4 = (t_l8 - t_l4) >> 3; ++ in_r5 = (t_r7 - t_r3) >> 3; ++ in_l5 = (t_l7 - t_l3) >> 3; ++ in_r6 = (t_r6 - t_r2) >> 3; ++ in_l6 = (t_l6 - t_l2) >> 3; ++ in_r7 = (t_r5 - t_r1) >> 3; ++ in_l7 = (t_l5 - t_l1) >> 3; ++ TRANSPOSE4x4_SW_SW(in_r0, in_r1, in_r2, in_r3, in_r0, in_r1, in_r2, in_r3); ++ TRANSPOSE4x4_SW_SW(in_l0, in_l1, in_l2, in_l3, in_l0, in_l1, in_l2, in_l3); ++ TRANSPOSE4x4_SW_SW(in_r4, in_r5, in_r6, in_r7, in_r4, in_r5, in_r6, in_r7); ++ TRANSPOSE4x4_SW_SW(in_l4, in_l5, in_l6, in_l7, in_l4, in_l5, in_l6, in_l7); ++ // Second loop ++ t_r1 = cnst_12 * (in_r0 + in_l0) + cnst_64; ++ t_l1 = cnst_12 * (in_r4 + in_l4) + cnst_64; ++ t_r2 = cnst_12 * (in_r0 - in_l0) + cnst_64; ++ t_l2 = cnst_12 * (in_r4 - in_l4) + cnst_64; ++ t_r3 = cnst_16 * in_r2 + cnst_6 * in_l2; ++ t_l3 = cnst_16 * in_r6 + cnst_6 * in_l6; ++ t_r4 = cnst_6 * in_r2 - cnst_16 * in_l2; ++ t_l4 = cnst_6 * in_r6 - cnst_16 * in_l6; ++ ++ ADD4(t_r1, t_r3, t_l1, t_l3, t_r2, t_r4, t_l2, t_l4, t_r5, t_l5, t_r6, t_l6); ++ SUB4(t_r2, t_r4, t_l2, t_l4, t_r1, t_r3, t_l1, t_l3, t_r7, t_l7, t_r8, t_l8); ++ t_r1 = cnst_16 * in_r1 + cnst_15 * in_r3 + cnst_9 * in_l1 + cnst_4 * in_l3; ++ t_l1 = cnst_16 * in_r5 + cnst_15 * in_r7 + cnst_9 * in_l5 + cnst_4 * in_l7; ++ t_r2 = cnst_15 * in_r1 - cnst_4 * in_r3 - cnst_16 * in_l1 - cnst_9 * in_l3; ++ t_l2 = cnst_15 * in_r5 - cnst_4 * in_r7 - cnst_16 * in_l5 - cnst_9 * in_l7; ++ t_r3 = cnst_9 * in_r1 - cnst_16 * in_r3 + cnst_4 * in_l1 + cnst_15 * in_l3; ++ t_l3 = cnst_9 * in_r5 - cnst_16 * in_r7 + cnst_4 * in_l5 + cnst_15 * in_l7; ++ t_r4 = cnst_4 * in_r1 - cnst_9 * in_r3 + cnst_15 * in_l1 - cnst_16 * in_l3; ++ t_l4 = cnst_4 * in_r5 - cnst_9 * in_r7 + cnst_15 * in_l5 - cnst_16 * in_l7; ++ ++ in_r0 = (t_r5 + t_r1) >> 7; ++ in_l0 = (t_l5 + t_l1) >> 7; ++ in_r1 = (t_r6 + t_r2) >> 7; ++ in_l1 = (t_l6 + t_l2) >> 7; ++ in_r2 = (t_r7 + t_r3) >> 7; ++ in_l2 = (t_l7 + t_l3) >> 7; ++ in_r3 = (t_r8 + t_r4) >> 7; ++ in_l3 = (t_l8 + t_l4) >> 7; ++ ++ in_r4 = (t_r8 - t_r4 + cnst_1) >> 7; ++ in_l4 = (t_l8 - t_l4 + cnst_1) >> 7; ++ in_r5 = (t_r7 - t_r3 + cnst_1) >> 7; ++ in_l5 = (t_l7 - t_l3 + cnst_1) >> 7; ++ in_r6 = (t_r6 - t_r2 + cnst_1) >> 7; ++ in_l6 = (t_l6 - t_l2 + cnst_1) >> 7; ++ in_r7 = (t_r5 - t_r1 + cnst_1) >> 7; ++ in_l7 = (t_l5 - t_l1 + cnst_1) >> 7; ++ PCKEV_H4_SH(in_l0, in_r0, in_l1, in_r1, in_l2, in_r2, in_l3, in_r3, ++ in0, in1, in2, in3); ++ PCKEV_H4_SH(in_l4, in_r4, in_l5, in_r5, in_l6, in_r6, in_l7, in_r7, ++ in4, in5, in6, in7); ++ ST_SH8(in0, in1, in2, in3, in4, in5, in6, in7, block, 8); ++} ++ ++void ff_vc1_inv_trans_4x8_msa(uint8_t *dest, ptrdiff_t linesize, int16_t *block) ++{ ++ v8i16 in0, in1, in2, in3, in4, in5, in6, in7; ++ v4i32 in_r0, in_r1, in_r2, in_r3, in_r4, in_r5, in_r6, in_r7; ++ v4i32 t1, t2, t3, t4, t5, t6, t7, t8; ++ v4i32 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; ++ v16i8 zero_m = { 0 }; ++ v4i32 cnst_17 = {17, 17, 17, 17}; ++ v4i32 cnst_22 = {22, 22, 22, 22}; ++ v4i32 cnst_10 = {10, 10, 10, 10}; ++ v4i32 cnst_12 = {12, 12, 12, 12}; ++ v4i32 cnst_64 = {64, 64, 64, 64}; ++ v4i32 cnst_16 = {16, 16, 16, 16}; ++ v4i32 cnst_15 = {15, 15, 15, 15}; ++ v4i32 cnst_4 = {4, 4, 4, 4}; ++ v4i32 cnst_6 = {6, 6, 6, 6}; ++ v4i32 cnst_9 = {9, 9, 9, 9}; ++ v4i32 cnst_1 = {1, 1, 1, 1}; ++ ++ LD_SH8(block, 8, in0, in1, in2, in3, in4, in5, in6, in7); ++ UNPCK_R_SH_SW(in0, in_r0); ++ UNPCK_R_SH_SW(in1, in_r1); ++ UNPCK_R_SH_SW(in2, in_r2); ++ UNPCK_R_SH_SW(in3, in_r3); ++ UNPCK_R_SH_SW(in4, in_r4); ++ UNPCK_R_SH_SW(in5, in_r5); ++ UNPCK_R_SH_SW(in6, in_r6); ++ UNPCK_R_SH_SW(in7, in_r7); ++ // First loop ++ TRANSPOSE4x4_SW_SW(in_r0, in_r1, in_r2, in_r3, in_r0, in_r1, in_r2, in_r3); ++ TRANSPOSE4x4_SW_SW(in_r4, in_r5, in_r6, in_r7, in_r4, in_r5, in_r6, in_r7); ++ t1 = cnst_17 * (in_r0 + in_r2) + cnst_4; ++ t5 = cnst_17 * (in_r4 + in_r6) + cnst_4; ++ t2 = cnst_17 * (in_r0 - in_r2) + cnst_4; ++ t6 = cnst_17 * (in_r4 - in_r6) + cnst_4; ++ t3 = cnst_22 * in_r1 + cnst_10 * in_r3; ++ t7 = cnst_22 * in_r5 + cnst_10 * in_r7; ++ t4 = cnst_22 * in_r3 - cnst_10 * in_r1; ++ t8 = cnst_22 * in_r7 - cnst_10 * in_r5; ++ ++ in_r0 = (t1 + t3) >> 3; ++ in_r4 = (t5 + t7) >> 3; ++ in_r1 = (t2 - t4) >> 3; ++ in_r5 = (t6 - t8) >> 3; ++ in_r2 = (t2 + t4) >> 3; ++ in_r6 = (t6 + t8) >> 3; ++ in_r3 = (t1 - t3) >> 3; ++ in_r7 = (t5 - t7) >> 3; ++ TRANSPOSE4x4_SW_SW(in_r0, in_r1, in_r2, in_r3, in_r0, in_r1, in_r2, in_r3); ++ TRANSPOSE4x4_SW_SW(in_r4, in_r5, in_r6, in_r7, in_r4, in_r5, in_r6, in_r7); ++ PCKEV_H4_SH(in_r1, in_r0, in_r3, in_r2, in_r5, in_r4, in_r7, in_r6, ++ in0, in1, in2, in3); ++ ST_D8(in0, in1, in2, in3, 0, 1, 0, 1, 0, 1, 0, 1, block, 8); ++ // Second loop ++ t1 = cnst_12 * (in_r0 + in_r4) + cnst_64; ++ t2 = cnst_12 * (in_r0 - in_r4) + cnst_64; ++ t3 = cnst_16 * in_r2 + cnst_6 * in_r6; ++ t4 = cnst_6 * in_r2 - cnst_16 * in_r6; ++ t5 = t1 + t3, t6 = t2 + t4; ++ t7 = t2 - t4, t8 = t1 - t3; ++ t1 = cnst_16 * in_r1 + cnst_15 * in_r3 + cnst_9 * in_r5 + cnst_4 * in_r7; ++ t2 = cnst_15 * in_r1 - cnst_4 * in_r3 - cnst_16 * in_r5 - cnst_9 * in_r7; ++ t3 = cnst_9 * in_r1 - cnst_16 * in_r3 + cnst_4 * in_r5 + cnst_15 * in_r7; ++ t4 = cnst_4 * in_r1 - cnst_9 * in_r3 + cnst_15 * in_r5 - cnst_16 * in_r7; ++ LD_SW8(dest, linesize, dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7); ++ ILVR_B8_SW(zero_m, dst0, zero_m, dst1, zero_m, dst2, zero_m, dst3, ++ zero_m, dst4, zero_m, dst5, zero_m, dst6, zero_m, dst7, ++ dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7); ++ ILVR_H4_SW(zero_m, dst0, zero_m, dst1, zero_m, dst2, zero_m, dst3, ++ dst0, dst1, dst2, dst3); ++ ILVR_H4_SW(zero_m, dst4, zero_m, dst5, zero_m, dst6, zero_m, dst7, ++ dst4, dst5, dst6, dst7); ++ in_r0 = (t5 + t1) >> 7; ++ in_r1 = (t6 + t2) >> 7; ++ in_r2 = (t7 + t3) >> 7; ++ in_r3 = (t8 + t4) >> 7; ++ in_r4 = (t8 - t4 + cnst_1) >> 7; ++ in_r5 = (t7 - t3 + cnst_1) >> 7; ++ in_r6 = (t6 - t2 + cnst_1) >> 7; ++ in_r7 = (t5 - t1 + cnst_1) >> 7; ++ ADD4(in_r0, dst0, in_r1, dst1, in_r2, dst2, in_r3, dst3, ++ in_r0, in_r1, in_r2, in_r3); ++ ADD4(in_r4, dst4, in_r5, dst5, in_r6, dst6, in_r7, dst7, ++ in_r4, in_r5, in_r6, in_r7); ++ CLIP_SW8_0_255(in_r0, in_r1, in_r2, in_r3, in_r4, in_r5, in_r6, in_r7); ++ PCKEV_H4_SH(in_r1, in_r0, in_r3, in_r2, in_r5, in_r4, in_r7, in_r6, ++ in0, in1, in2, in3); ++ PCKEV_B2_SH(in1, in0, in3, in2, in0, in1); ++ ST_W8(in0, in1, 0, 1, 2, 3, 0, 1, 2, 3, dest, linesize); ++} ++ ++void ff_vc1_inv_trans_8x4_msa(uint8_t *dest, ptrdiff_t linesize, int16_t *block) ++{ ++ v4i32 in0, in1, in2, in3, in4, in5, in6, in7; ++ v4i32 t1, t2, t3, t4, t5, t6, t7, t8; ++ v4i32 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; ++ v16i8 zero_m = { 0 }; ++ v4i32 cnst_17 = {17, 17, 17, 17}; ++ v4i32 cnst_22 = {22, 22, 22, 22}; ++ v4i32 cnst_10 = {10, 10, 10, 10}; ++ v4i32 cnst_12 = {12, 12, 12, 12}; ++ v4i32 cnst_64 = {64, 64, 64, 64}; ++ v4i32 cnst_16 = {16, 16, 16, 16}; ++ v4i32 cnst_15 = {15, 15, 15, 15}; ++ v4i32 cnst_4 = {4, 4, 4, 4}; ++ v4i32 cnst_6 = {6, 6, 6, 6}; ++ v4i32 cnst_9 = {9, 9, 9, 9}; ++ ++ LD_SW4(block, 8, t1, t2, t3, t4); ++ UNPCK_SH_SW(t1, in0, in4); ++ UNPCK_SH_SW(t2, in1, in5); ++ UNPCK_SH_SW(t3, in2, in6); ++ UNPCK_SH_SW(t4, in3, in7); ++ TRANSPOSE4x4_SW_SW(in0, in1, in2, in3, in0, in1, in2, in3); ++ TRANSPOSE4x4_SW_SW(in4, in5, in6, in7, in4, in5, in6, in7); ++ // First loop ++ t1 = cnst_12 * (in0 + in4) + cnst_4; ++ t2 = cnst_12 * (in0 - in4) + cnst_4; ++ t3 = cnst_16 * in2 + cnst_6 * in6; ++ t4 = cnst_6 * in2 - cnst_16 * in6; ++ t5 = t1 + t3, t6 = t2 + t4; ++ t7 = t2 - t4, t8 = t1 - t3; ++ t1 = cnst_16 * in1 + cnst_15 * in3 + cnst_9 * in5 + cnst_4 * in7; ++ t2 = cnst_15 * in1 - cnst_4 * in3 - cnst_16 * in5 - cnst_9 * in7; ++ t3 = cnst_9 * in1 - cnst_16 * in3 + cnst_4 * in5 + cnst_15 * in7; ++ t4 = cnst_4 * in1 - cnst_9 * in3 + cnst_15 * in5 - cnst_16 * in7; ++ in0 = (t5 + t1) >> 3; ++ in1 = (t6 + t2) >> 3; ++ in2 = (t7 + t3) >> 3; ++ in3 = (t8 + t4) >> 3; ++ in4 = (t8 - t4) >> 3; ++ in5 = (t7 - t3) >> 3; ++ in6 = (t6 - t2) >> 3; ++ in7 = (t5 - t1) >> 3; ++ TRANSPOSE4x4_SW_SW(in0, in1, in2, in3, in0, in1, in2, in3); ++ TRANSPOSE4x4_SW_SW(in4, in5, in6, in7, in4, in5, in6, in7); ++ PCKEV_H4_SW(in4, in0, in5, in1, in6, in2, in7, in3, t1, t2, t3, t4); ++ ST_SW4(t1, t2, t3, t4, block, 8); ++ // Second loop ++ LD_SW4(dest, linesize, dst0, dst1, dst2, dst3); ++ ILVR_B4_SW(zero_m, dst0, zero_m, dst1, zero_m, dst2, zero_m, dst3, ++ dst0, dst1, dst2, dst3); ++ ILVL_H4_SW(zero_m, dst0, zero_m, dst1, zero_m, dst2, zero_m, dst3, ++ dst4, dst5, dst6, dst7); ++ ILVR_H4_SW(zero_m, dst0, zero_m, dst1, zero_m, dst2, zero_m, dst3, ++ dst0, dst1, dst2, dst3); ++ // Right part ++ t1 = cnst_17 * (in0 + in2) + cnst_64; ++ t2 = cnst_17 * (in0 - in2) + cnst_64; ++ t3 = cnst_22 * in1 + cnst_10 * in3; ++ t4 = cnst_22 * in3 - cnst_10 * in1; ++ in0 = (t1 + t3) >> 7; ++ in1 = (t2 - t4) >> 7; ++ in2 = (t2 + t4) >> 7; ++ in3 = (t1 - t3) >> 7; ++ ADD4(in0, dst0, in1, dst1, in2, dst2, in3, dst3, in0, in1, in2, in3); ++ CLIP_SW4_0_255(in0, in1, in2, in3); ++ // Left part ++ t5 = cnst_17 * (in4 + in6) + cnst_64; ++ t6 = cnst_17 * (in4 - in6) + cnst_64; ++ t7 = cnst_22 * in5 + cnst_10 * in7; ++ t8 = cnst_22 * in7 - cnst_10 * in5; ++ in4 = (t5 + t7) >> 7; ++ in5 = (t6 - t8) >> 7; ++ in6 = (t6 + t8) >> 7; ++ in7 = (t5 - t7) >> 7; ++ ADD4(in4, dst4, in5, dst5, in6, dst6, in7, dst7, in4, in5, in6, in7); ++ CLIP_SW4_0_255(in4, in5, in6, in7); ++ PCKEV_H4_SW(in4, in0, in5, in1, in6, in2, in7, in3, in0, in1, in2, in3); ++ PCKEV_B2_SW(in1, in0, in3, in2, in0, in1); ++ ST_D4(in0, in1, 0, 1, 0, 1, dest, linesize); ++} ++ ++static void put_vc1_mspel_mc_h_v_msa(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride, int hmode, int vmode, ++ int rnd) ++{ ++ v8i16 in_r0, in_r1, in_r2, in_r3, in_l0, in_l1, in_l2, in_l3; ++ v8i16 t0, t1, t2, t3, t4, t5, t6, t7; ++ v8i16 t8, t9, t10, t11, t12, t13, t14, t15; ++ v8i16 cnst_para0, cnst_para1, cnst_para2, cnst_para3, cnst_r; ++ static const int para_value[][4] = {{4, 53, 18, 3}, ++ {1, 9, 9, 1}, ++ {3, 18, 53, 4}}; ++ static const int shift_value[] = {0, 5, 1, 5}; ++ int shift = (shift_value[hmode] + shift_value[vmode]) >> 1; ++ int r = (1 << (shift - 1)) + rnd - 1; ++ cnst_r = __msa_fill_h(r); ++ src -= 1, src -= stride; ++ cnst_para0 = __msa_fill_h(para_value[vmode - 1][0]); ++ cnst_para1 = __msa_fill_h(para_value[vmode - 1][1]); ++ cnst_para2 = __msa_fill_h(para_value[vmode - 1][2]); ++ cnst_para3 = __msa_fill_h(para_value[vmode - 1][3]); ++ LD_SH4(src, stride, in_l0, in_l1, in_l2, in_l3); ++ UNPCK_UB_SH(in_l0, in_r0, in_l0); ++ UNPCK_UB_SH(in_l1, in_r1, in_l1); ++ UNPCK_UB_SH(in_l2, in_r2, in_l2); ++ UNPCK_UB_SH(in_l3, in_r3, in_l3); ++ // row 0 ++ t0 = cnst_para1 * in_r1 + cnst_para2 * in_r2 ++ - cnst_para0 * in_r0 - cnst_para3 * in_r3; ++ t8 = cnst_para1 * in_l1 + cnst_para2 * in_l2 ++ - cnst_para0 * in_l0 - cnst_para3 * in_l3; ++ in_l0 = LD_SH(src + 4 * stride); ++ UNPCK_UB_SH(in_l0, in_r0, in_l0); ++ // row 1 ++ t1 = cnst_para1 * in_r2 + cnst_para2 * in_r3 ++ - cnst_para0 * in_r1 - cnst_para3 * in_r0; ++ t9 = cnst_para1 * in_l2 + cnst_para2 * in_l3 ++ - cnst_para0 * in_l1 - cnst_para3 * in_l0; ++ in_l1 = LD_SH(src + 5 * stride); ++ UNPCK_UB_SH(in_l1, in_r1, in_l1); ++ // row 2 ++ t2 = cnst_para1 * in_r3 + cnst_para2 * in_r0 ++ - cnst_para0 * in_r2 - cnst_para3 * in_r1; ++ t10 = cnst_para1 * in_l3 + cnst_para2 * in_l0 ++ - cnst_para0 * in_l2 - cnst_para3 * in_l1; ++ in_l2 = LD_SH(src + 6 * stride); ++ UNPCK_UB_SH(in_l2, in_r2, in_l2); ++ // row 3 ++ t3 = cnst_para1 * in_r0 + cnst_para2 * in_r1 ++ - cnst_para0 * in_r3 - cnst_para3 * in_r2; ++ t11 = cnst_para1 * in_l0 + cnst_para2 * in_l1 ++ - cnst_para0 * in_l3 - cnst_para3 * in_l2; ++ in_l3 = LD_SH(src + 7 * stride); ++ UNPCK_UB_SH(in_l3, in_r3, in_l3); ++ // row 4 ++ t4 = cnst_para1 * in_r1 + cnst_para2 * in_r2 ++ - cnst_para0 * in_r0 - cnst_para3 * in_r3; ++ t12 = cnst_para1 * in_l1 + cnst_para2 * in_l2 ++ - cnst_para0 * in_l0 - cnst_para3 * in_l3; ++ in_l0 = LD_SH(src + 8 * stride); ++ UNPCK_UB_SH(in_l0, in_r0, in_l0); ++ // row 5 ++ t5 = cnst_para1 * in_r2 + cnst_para2 * in_r3 ++ - cnst_para0 * in_r1 - cnst_para3 * in_r0; ++ t13 = cnst_para1 * in_l2 + cnst_para2 * in_l3 ++ - cnst_para0 * in_l1 - cnst_para3 * in_l0; ++ in_l1 = LD_SH(src + 9 * stride); ++ UNPCK_UB_SH(in_l1, in_r1, in_l1); ++ // row 6 ++ t6 = cnst_para1 * in_r3 + cnst_para2 * in_r0 ++ - cnst_para0 * in_r2 - cnst_para3 * in_r1; ++ t14 = cnst_para1 * in_l3 + cnst_para2 * in_l0 ++ - cnst_para0 * in_l2 - cnst_para3 * in_l1; ++ in_l2 = LD_SH(src + 10 * stride); ++ UNPCK_UB_SH(in_l2, in_r2, in_l2); ++ // row 7 ++ t7 = cnst_para1 * in_r0 + cnst_para2 * in_r1 ++ - cnst_para0 * in_r3 - cnst_para3 * in_r2; ++ t15 = cnst_para1 * in_l0 + cnst_para2 * in_l1 ++ - cnst_para0 * in_l3 - cnst_para3 * in_l2; ++ ++ ADD4(t0, cnst_r, t1, cnst_r, t2, cnst_r, t3, cnst_r, t0, t1, t2, t3); ++ ADD4(t4, cnst_r, t5, cnst_r, t6, cnst_r, t7, cnst_r, t4, t5, t6, t7); ++ ADD4(t8, cnst_r, t9, cnst_r, t10, cnst_r, t11, cnst_r, ++ t8, t9, t10, t11); ++ ADD4(t12, cnst_r, t13, cnst_r, t14, cnst_r, t15, cnst_r, ++ t12, t13, t14, t15); ++ t0 >>= shift, t1 >>= shift, t2 >>= shift, t3 >>= shift; ++ t4 >>= shift, t5 >>= shift, t6 >>= shift, t7 >>= shift; ++ t8 >>= shift, t9 >>= shift, t10 >>= shift, t11 >>= shift; ++ t12 >>= shift, t13 >>= shift, t14 >>= shift, t15 >>= shift; ++ TRANSPOSE8x8_SH_SH(t0, t1, t2, t3, t4, t5, t6, t7, ++ t0, t1, t2, t3, t4, t5, t6, t7); ++ TRANSPOSE8x8_SH_SH(t8, t9, t10, t11, t12, t13, t14, t15, ++ t8, t9, t10, t11, t12, t13, t14, t15); ++ cnst_para0 = __msa_fill_h(para_value[hmode - 1][0]); ++ cnst_para1 = __msa_fill_h(para_value[hmode - 1][1]); ++ cnst_para2 = __msa_fill_h(para_value[hmode - 1][2]); ++ cnst_para3 = __msa_fill_h(para_value[hmode - 1][3]); ++ r = 64 - rnd; ++ cnst_r = __msa_fill_h(r); ++ // col 0 ~ 7 ++ t0 = cnst_para1 * t1 + cnst_para2 * t2 - cnst_para0 * t0 - cnst_para3 * t3; ++ t1 = cnst_para1 * t2 + cnst_para2 * t3 - cnst_para0 * t1 - cnst_para3 * t4; ++ t2 = cnst_para1 * t3 + cnst_para2 * t4 - cnst_para0 * t2 - cnst_para3 * t5; ++ t3 = cnst_para1 * t4 + cnst_para2 * t5 - cnst_para0 * t3 - cnst_para3 * t6; ++ t4 = cnst_para1 * t5 + cnst_para2 * t6 - cnst_para0 * t4 - cnst_para3 * t7; ++ t5 = cnst_para1 * t6 + cnst_para2 * t7 - cnst_para0 * t5 - cnst_para3 * t8; ++ t6 = cnst_para1 * t7 + cnst_para2 * t8 - cnst_para0 * t6 - cnst_para3 * t9; ++ t7 = cnst_para1 * t8 + cnst_para2 * t9 - cnst_para0 * t7 - cnst_para3 * t10; ++ ADD4(t0, cnst_r, t1, cnst_r, t2, cnst_r, t3, cnst_r, t0, t1, t2, t3); ++ ADD4(t4, cnst_r, t5, cnst_r, t6, cnst_r, t7, cnst_r, t4, t5, t6, t7); ++ t0 >>= 7, t1 >>= 7, t2 >>= 7, t3 >>= 7; ++ t4 >>= 7, t5 >>= 7, t6 >>= 7, t7 >>= 7; ++ TRANSPOSE8x8_SH_SH(t0, t1, t2, t3, t4, t5, t6, t7, ++ t0, t1, t2, t3, t4, t5, t6, t7); ++ CLIP_SH8_0_255(t0, t1, t2, t3, t4, t5, t6, t7); ++ PCKEV_B4_SH(t1, t0, t3, t2, t5, t4, t7, t6, t0, t1, t2, t3); ++ ST_D8(t0, t1, t2, t3, 0, 1, 0, 1, 0, 1, 0, 1, dst, stride); ++} ++ ++#define PUT_VC1_MSPEL_MC_MSA(hmode, vmode) \ ++void ff_put_vc1_mspel_mc ## hmode ## vmode ## _msa(uint8_t *dst, \ ++ const uint8_t *src, \ ++ ptrdiff_t stride, int rnd) \ ++{ \ ++ put_vc1_mspel_mc_h_v_msa(dst, src, stride, hmode, vmode, rnd); \ ++} \ ++void ff_put_vc1_mspel_mc ## hmode ## vmode ## _16_msa(uint8_t *dst, \ ++ const uint8_t *src, \ ++ ptrdiff_t stride, int rnd) \ ++{ \ ++ put_vc1_mspel_mc_h_v_msa(dst, src, stride, hmode, vmode, rnd); \ ++ put_vc1_mspel_mc_h_v_msa(dst + 8, src + 8, stride, hmode, vmode, rnd); \ ++ dst += 8 * stride, src += 8 * stride; \ ++ put_vc1_mspel_mc_h_v_msa(dst, src, stride, hmode, vmode, rnd); \ ++ put_vc1_mspel_mc_h_v_msa(dst + 8, src + 8, stride, hmode, vmode, rnd); \ ++} ++ ++PUT_VC1_MSPEL_MC_MSA(1, 1); ++PUT_VC1_MSPEL_MC_MSA(1, 2); ++PUT_VC1_MSPEL_MC_MSA(1, 3); ++ ++PUT_VC1_MSPEL_MC_MSA(2, 1); ++PUT_VC1_MSPEL_MC_MSA(2, 2); ++PUT_VC1_MSPEL_MC_MSA(2, 3); ++ ++PUT_VC1_MSPEL_MC_MSA(3, 1); ++PUT_VC1_MSPEL_MC_MSA(3, 2); ++PUT_VC1_MSPEL_MC_MSA(3, 3); +diff --git a/libavcodec/mips/videodsp_init.c b/libavcodec/mips/videodsp_init.c +index 8170404..07c23bc 100644 +--- a/libavcodec/mips/videodsp_init.c ++++ b/libavcodec/mips/videodsp_init.c +@@ -18,12 +18,12 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/mips/cpu.h" + #include "config.h" + #include "libavutil/attributes.h" + #include "libavutil/mips/asmdefs.h" + #include "libavcodec/videodsp.h" + +-#if HAVE_MSA + static void prefetch_mips(uint8_t *mem, ptrdiff_t stride, int h) + { + register const uint8_t *p = mem; +@@ -41,11 +41,11 @@ static void prefetch_mips(uint8_t *mem, ptrdiff_t stride, int h) + : [stride] "r" (stride) + ); + } +-#endif // #if HAVE_MSA + + av_cold void ff_videodsp_init_mips(VideoDSPContext *ctx, int bpc) + { +-#if HAVE_MSA +- ctx->prefetch = prefetch_mips; +-#endif // #if HAVE_MSA ++ int cpu_flags = av_get_cpu_flags(); ++ ++ if (have_msa(cpu_flags)) ++ ctx->prefetch = prefetch_mips; + } +diff --git a/libavcodec/mips/vp3dsp_idct_mmi.c b/libavcodec/mips/vp3dsp_idct_mmi.c +new file mode 100644 +index 0000000..c5c4cf3 +--- /dev/null ++++ b/libavcodec/mips/vp3dsp_idct_mmi.c +@@ -0,0 +1,769 @@ ++/* ++ * Copyright (c) 2018 gxw ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "vp3dsp_mips.h" ++#include "libavutil/intreadwrite.h" ++#include "libavutil/mips/mmiutils.h" ++#include "libavutil/common.h" ++#include "libavcodec/rnd_avg.h" ++ ++#define LOAD_CONST(dst, value) \ ++ "li %[tmp1], "#value" \n\t" \ ++ "dmtc1 %[tmp1], "#dst" \n\t" \ ++ "pshufh "#dst", "#dst", %[ftmp10] \n\t" ++ ++static void idct_row_mmi(int16_t *input) ++{ ++ double ftmp[23]; ++ uint64_t tmp[2]; ++ __asm__ volatile ( ++ "xor %[ftmp10], %[ftmp10], %[ftmp10] \n\t" ++ LOAD_CONST(%[csth_1], 1) ++ "li %[tmp0], 0x02 \n\t" ++ "1: \n\t" ++ /* Load input */ ++ "ldc1 %[ftmp0], 0x00(%[input]) \n\t" ++ "ldc1 %[ftmp1], 0x10(%[input]) \n\t" ++ "ldc1 %[ftmp2], 0x20(%[input]) \n\t" ++ "ldc1 %[ftmp3], 0x30(%[input]) \n\t" ++ "ldc1 %[ftmp4], 0x40(%[input]) \n\t" ++ "ldc1 %[ftmp5], 0x50(%[input]) \n\t" ++ "ldc1 %[ftmp6], 0x60(%[input]) \n\t" ++ "ldc1 %[ftmp7], 0x70(%[input]) \n\t" ++ LOAD_CONST(%[ftmp8], 64277) ++ LOAD_CONST(%[ftmp9], 12785) ++ "pmulhh %[A], %[ftmp9], %[ftmp7] \n\t" ++ "pcmpgth %[C], %[ftmp10], %[ftmp1] \n\t" ++ "or %[mask], %[C], %[csth_1] \n\t" ++ "pmullh %[B], %[ftmp1], %[mask] \n\t" ++ "pmulhuh %[B], %[ftmp8], %[B] \n\t" ++ "pmullh %[B], %[B], %[mask] \n\t" ++ "paddh %[A], %[A], %[B] \n\t" ++ "paddh %[A], %[A], %[C] \n\t" ++ "pcmpgth %[D], %[ftmp10], %[ftmp7] \n\t" ++ "or %[mask], %[D], %[csth_1] \n\t" ++ "pmullh %[ftmp7], %[ftmp7], %[mask] \n\t" ++ "pmulhuh %[B], %[ftmp8], %[ftmp7] \n\t" ++ "pmullh %[B], %[B], %[mask] \n\t" ++ "pmulhh %[C], %[ftmp9], %[ftmp1] \n\t" ++ "psubh %[B], %[C], %[B] \n\t" ++ "psubh %[B], %[B], %[D] \n\t" ++ ++ LOAD_CONST(%[ftmp8], 54491) ++ LOAD_CONST(%[ftmp9], 36410) ++ "pcmpgth %[Ad], %[ftmp10], %[ftmp5] \n\t" ++ "or %[mask], %[Ad], %[csth_1] \n\t" ++ "pmullh %[ftmp1], %[ftmp5], %[mask] \n\t" ++ "pmulhuh %[C], %[ftmp9], %[ftmp1] \n\t" ++ "pmullh %[C], %[C], %[mask] \n\t" ++ "pcmpgth %[Bd], %[ftmp10], %[ftmp3] \n\t" ++ "or %[mask], %[Bd], %[csth_1] \n\t" ++ "pmullh %[D], %[ftmp3], %[mask] \n\t" ++ "pmulhuh %[D], %[ftmp8], %[D] \n\t" ++ "pmullh %[D], %[D], %[mask] \n\t" ++ "paddh %[C], %[C], %[D] \n\t" ++ "paddh %[C], %[C], %[Ad] \n\t" ++ "paddh %[C], %[C], %[Bd] \n\t" ++ "pcmpgth %[Bd], %[ftmp10], %[ftmp3] \n\t" ++ "or %[mask], %[Bd], %[csth_1] \n\t" ++ "pmullh %[ftmp1], %[ftmp3], %[mask] \n\t" ++ "pmulhuh %[D], %[ftmp9], %[ftmp1] \n\t" ++ "pmullh %[D], %[D], %[mask] \n\t" ++ "pcmpgth %[Ed], %[ftmp10], %[ftmp5] \n\t" ++ "or %[mask], %[Ed], %[csth_1] \n\t" ++ "pmullh %[Ad], %[ftmp5], %[mask] \n\t" ++ "pmulhuh %[Ad], %[ftmp8], %[Ad] \n\t" ++ "pmullh %[Ad], %[Ad], %[mask] \n\t" ++ "psubh %[D], %[Ad], %[D] \n\t" ++ "paddh %[D], %[D], %[Ed] \n\t" ++ "psubh %[D], %[D], %[Bd] \n\t" ++ ++ LOAD_CONST(%[ftmp8], 46341) ++ "psubh %[Ad], %[A], %[C] \n\t" ++ "pcmpgth %[Bd], %[ftmp10], %[Ad] \n\t" ++ "or %[mask], %[Bd], %[csth_1] \n\t" ++ "pmullh %[Ad], %[Ad], %[mask] \n\t" ++ "pmulhuh %[Ad], %[ftmp8], %[Ad] \n\t" ++ "pmullh %[Ad], %[Ad], %[mask] \n\t" ++ "paddh %[Ad], %[Ad], %[Bd] \n\t" ++ "psubh %[Bd], %[B], %[D] \n\t" ++ "pcmpgth %[Cd], %[ftmp10], %[Bd] \n\t" ++ "or %[mask], %[Cd], %[csth_1] \n\t" ++ "pmullh %[Bd], %[Bd], %[mask] \n\t" ++ "pmulhuh %[Bd], %[ftmp8], %[Bd] \n\t" ++ "pmullh %[Bd], %[Bd], %[mask] \n\t" ++ "paddh %[Bd], %[Bd], %[Cd] \n\t" ++ "paddh %[Cd], %[A], %[C] \n\t" ++ "paddh %[Dd], %[B], %[D] \n\t" ++ "paddh %[A], %[ftmp0], %[ftmp4] \n\t" ++ "pcmpgth %[B], %[ftmp10], %[A] \n\t" ++ "or %[mask], %[B], %[csth_1] \n\t" ++ "pmullh %[A], %[A], %[mask] \n\t" ++ "pmulhuh %[A], %[ftmp8], %[A] \n\t" ++ "pmullh %[A], %[A], %[mask] \n\t" ++ "paddh %[A], %[A], %[B] \n\t" ++ "psubh %[B], %[ftmp0], %[ftmp4] \n\t" ++ "pcmpgth %[C], %[ftmp10], %[B] \n\t" ++ "or %[mask], %[C], %[csth_1] \n\t" ++ "pmullh %[B], %[B], %[mask] \n\t" ++ "pmulhuh %[B], %[ftmp8], %[B] \n\t" ++ "pmullh %[B], %[B], %[mask] \n\t" ++ "paddh %[B], %[B], %[C] \n\t" ++ ++ LOAD_CONST(%[ftmp8], 60547) ++ LOAD_CONST(%[ftmp9], 25080) ++ "pmulhh %[C], %[ftmp9], %[ftmp6] \n\t" ++ "pcmpgth %[D], %[ftmp10], %[ftmp2] \n\t" ++ "or %[mask], %[D], %[csth_1] \n\t" ++ "pmullh %[Ed], %[ftmp2], %[mask] \n\t" ++ "pmulhuh %[Ed], %[ftmp8], %[Ed] \n\t" ++ "pmullh %[Ed], %[Ed], %[mask] \n\t" ++ "paddh %[C], %[C], %[Ed] \n\t" ++ "paddh %[C], %[C], %[D] \n\t" ++ "pcmpgth %[Ed], %[ftmp10], %[ftmp6] \n\t" ++ "or %[mask], %[Ed], %[csth_1] \n\t" ++ "pmullh %[ftmp6], %[ftmp6], %[mask] \n\t" ++ "pmulhuh %[D], %[ftmp8], %[ftmp6] \n\t" ++ "pmullh %[D], %[D], %[mask] \n\t" ++ "pmulhh %[Gd], %[ftmp9], %[ftmp2] \n\t" ++ "psubh %[D], %[Gd], %[D] \n\t" ++ "psubh %[D], %[D], %[Ed] \n\t" ++ "psubh %[Ed], %[A], %[C] \n\t" ++ "paddh %[Gd], %[A], %[C] \n\t" ++ "paddh %[A], %[B], %[Ad] \n\t" ++ "psubh %[C], %[B], %[Ad] \n\t" ++ "psubh %[B], %[Bd], %[D] \n\t" ++ "paddh %[D], %[Bd], %[D] \n\t" ++ /* Final sequence of operations over-write original inputs */ ++ "paddh %[ftmp0], %[Gd], %[Cd] \n\t" ++ "paddh %[ftmp1], %[A], %[D] \n\t" ++ "psubh %[ftmp2], %[A], %[D] \n\t" ++ "paddh %[ftmp3], %[Ed], %[Dd] \n\t" ++ "psubh %[ftmp4], %[Ed], %[Dd] \n\t" ++ "paddh %[ftmp5], %[C], %[B] \n\t" ++ "psubh %[ftmp6], %[C], %[B] \n\t" ++ "psubh %[ftmp7], %[Gd], %[Cd] \n\t" ++ "sdc1 %[ftmp0], 0x00(%[input]) \n\t" ++ "sdc1 %[ftmp1], 0x10(%[input]) \n\t" ++ "sdc1 %[ftmp2], 0x20(%[input]) \n\t" ++ "sdc1 %[ftmp3], 0x30(%[input]) \n\t" ++ "sdc1 %[ftmp4], 0x40(%[input]) \n\t" ++ "sdc1 %[ftmp5], 0x50(%[input]) \n\t" ++ "sdc1 %[ftmp6], 0x60(%[input]) \n\t" ++ "sdc1 %[ftmp7], 0x70(%[input]) \n\t" ++ PTR_ADDU "%[tmp0], %[tmp0], -0x01 \n\t" ++ PTR_ADDIU "%[input], %[input], 0x08 \n\t" ++ "bnez %[tmp0], 1b \n\t" ++ : [input]"+&r"(input), [tmp0]"=&r"(tmp[0]), [tmp1]"=&r"(tmp[1]), ++ [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), [ftmp2]"=&f"(ftmp[2]), ++ [ftmp3]"=&f"(ftmp[3]), [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), ++ [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), [ftmp8]"=&f"(ftmp[8]), ++ [ftmp9]"=&f"(ftmp[9]), [ftmp10]"=&f"(ftmp[10]), [mask]"=&f"(ftmp[11]), ++ [A]"=&f"(ftmp[12]), [B]"=&f"(ftmp[13]), [C]"=&f"(ftmp[14]), ++ [D]"=&f"(ftmp[15]), [Ad]"=&f"(ftmp[16]), [Bd]"=&f"(ftmp[17]), ++ [Cd]"=&f"(ftmp[18]), [Dd]"=&f"(ftmp[19]), [Ed]"=&f"(ftmp[20]), ++ [Gd]"=&f"(ftmp[21]), [csth_1]"=&f"(ftmp[22]) ++ : ++ : "memory" ++ ); ++} ++ ++static void idct_column_true_mmi(uint8_t *dst, int stride, int16_t *input) ++{ ++ uint8_t temp_value[8]; ++ double ftmp[23]; ++ uint64_t tmp[2]; ++ for (int i = 0; i < 8; ++i) ++ temp_value[i] = av_clip_uint8(128 + ((46341 * input[i << 3] + (8 << 16)) >> 20)); ++ __asm__ volatile ( ++ "xor %[ftmp10], %[ftmp10], %[ftmp10] \n\t" ++ "li %[tmp0], 0x02 \n\t" ++ "1: \n\t" ++ "ldc1 %[ftmp0], 0x00(%[input]) \n\t" ++ "ldc1 %[ftmp4], 0x08(%[input]) \n\t" ++ "ldc1 %[ftmp1], 0x10(%[input]) \n\t" ++ "ldc1 %[ftmp5], 0x18(%[input]) \n\t" ++ "ldc1 %[ftmp2], 0x20(%[input]) \n\t" ++ "ldc1 %[ftmp6], 0x28(%[input]) \n\t" ++ "ldc1 %[ftmp3], 0x30(%[input]) \n\t" ++ "ldc1 %[ftmp7], 0x38(%[input]) \n\t" ++ TRANSPOSE_4H(%[ftmp0], %[ftmp1], %[ftmp2], %[ftmp3], ++ %[A], %[B], %[C], %[D]) ++ TRANSPOSE_4H(%[ftmp4], %[ftmp5], %[ftmp6], %[ftmp7], ++ %[A], %[B], %[C], %[D]) ++ LOAD_CONST(%[ftmp8], 64277) ++ LOAD_CONST(%[ftmp9], 12785) ++ LOAD_CONST(%[Gd], 1) ++ "pmulhh %[A], %[ftmp9], %[ftmp7] \n\t" ++ "pcmpgth %[C], %[ftmp10], %[ftmp1] \n\t" ++ "or %[mask], %[C], %[Gd] \n\t" ++ "pmullh %[B], %[ftmp1], %[mask] \n\t" ++ "pmulhuh %[B], %[ftmp8], %[B] \n\t" ++ "pmullh %[B], %[B], %[mask] \n\t" ++ "paddh %[A], %[A], %[B] \n\t" ++ "paddh %[A], %[A], %[C] \n\t" ++ "pcmpgth %[D], %[ftmp10], %[ftmp7] \n\t" ++ "or %[mask], %[D], %[Gd] \n\t" ++ "pmullh %[Ad], %[ftmp7], %[mask] \n\t" ++ "pmulhuh %[B], %[ftmp8], %[Ad] \n\t" ++ "pmullh %[B], %[B], %[mask] \n\t" ++ "pmulhh %[C], %[ftmp9], %[ftmp1] \n\t" ++ "psubh %[B], %[C], %[B] \n\t" ++ "psubh %[B], %[B], %[D] \n\t" ++ ++ LOAD_CONST(%[ftmp8], 54491) ++ LOAD_CONST(%[ftmp9], 36410) ++ "pcmpgth %[Ad], %[ftmp10], %[ftmp5] \n\t" ++ "or %[mask], %[Ad], %[Gd] \n\t" ++ "pmullh %[Cd], %[ftmp5], %[mask] \n\t" ++ "pmulhuh %[C], %[ftmp9], %[Cd] \n\t" ++ "pmullh %[C], %[C], %[mask] \n\t" ++ "pcmpgth %[Bd], %[ftmp10], %[ftmp3] \n\t" ++ "or %[mask], %[Bd], %[Gd] \n\t" ++ "pmullh %[D], %[ftmp3], %[mask] \n\t" ++ "pmulhuh %[D], %[ftmp8], %[D] \n\t" ++ "pmullh %[D], %[D], %[mask] \n\t" ++ "paddh %[C], %[C], %[D] \n\t" ++ "paddh %[C], %[C], %[Ad] \n\t" ++ "paddh %[C], %[C], %[Bd] \n\t" ++ "pcmpgth %[Bd], %[ftmp10], %[ftmp3] \n\t" ++ "or %[mask], %[Bd], %[Gd] \n\t" ++ "pmullh %[Cd], %[ftmp3], %[mask] \n\t" ++ "pmulhuh %[D], %[ftmp9], %[Cd] \n\t" ++ "pmullh %[D], %[D], %[mask] \n\t" ++ "pcmpgth %[Ed], %[ftmp10], %[ftmp5] \n\t" ++ "or %[mask], %[Ed], %[Gd] \n\t" ++ "pmullh %[Ad], %[ftmp5], %[mask] \n\t" ++ "pmulhuh %[Ad], %[ftmp8], %[Ad] \n\t" ++ "pmullh %[Ad], %[Ad], %[mask] \n\t" ++ "psubh %[D], %[Ad], %[D] \n\t" ++ "paddh %[D], %[D], %[Ed] \n\t" ++ "psubh %[D], %[D], %[Bd] \n\t" ++ ++ LOAD_CONST(%[ftmp8], 46341) ++ "psubh %[Ad], %[A], %[C] \n\t" ++ "pcmpgth %[Bd], %[ftmp10], %[Ad] \n\t" ++ "or %[mask], %[Bd], %[Gd] \n\t" ++ "pmullh %[Ad], %[Ad], %[mask] \n\t" ++ "pmulhuh %[Ad], %[ftmp8], %[Ad] \n\t" ++ "pmullh %[Ad], %[Ad], %[mask] \n\t" ++ "paddh %[Ad], %[Ad], %[Bd] \n\t" ++ "psubh %[Bd], %[B], %[D] \n\t" ++ "pcmpgth %[Cd], %[ftmp10], %[Bd] \n\t" ++ "or %[mask], %[Cd], %[Gd] \n\t" ++ "pmullh %[Bd], %[Bd], %[mask] \n\t" ++ "pmulhuh %[Bd], %[ftmp8], %[Bd] \n\t" ++ "pmullh %[Bd], %[Bd], %[mask] \n\t" ++ "paddh %[Bd], %[Bd], %[Cd] \n\t" ++ "paddh %[Cd], %[A], %[C] \n\t" ++ "paddh %[Dd], %[B], %[D] \n\t" ++ ++ LOAD_CONST(%[Ed], 2056) ++ "paddh %[A], %[ftmp0], %[ftmp4] \n\t" ++ "pcmpgth %[B], %[ftmp10], %[A] \n\t" ++ "or %[mask], %[B], %[Gd] \n\t" ++ "pmullh %[A], %[A], %[mask] \n\t" ++ "pmulhuh %[A], %[ftmp8], %[A] \n\t" ++ "pmullh %[A], %[A], %[mask] \n\t" ++ "paddh %[A], %[A], %[B] \n\t" ++ "paddh %[A], %[A], %[Ed] \n\t" ++ "psubh %[B], %[ftmp0], %[ftmp4] \n\t" ++ "pcmpgth %[C], %[ftmp10], %[B] \n\t" ++ "or %[mask], %[C], %[Gd] \n\t" ++ "pmullh %[B], %[B], %[mask] \n\t" ++ "pmulhuh %[B], %[ftmp8], %[B] \n\t" ++ "pmullh %[B], %[B], %[mask] \n\t" ++ "paddh %[B], %[B], %[C] \n\t" ++ "paddh %[B], %[B], %[Ed] \n\t" ++ ++ LOAD_CONST(%[ftmp8], 60547) ++ LOAD_CONST(%[ftmp9], 25080) ++ "pmulhh %[C], %[ftmp9], %[ftmp6] \n\t" ++ "pcmpgth %[D], %[ftmp10], %[ftmp2] \n\t" ++ "or %[mask], %[D], %[Gd] \n\t" ++ "pmullh %[Ed], %[ftmp2], %[mask] \n\t" ++ "pmulhuh %[Ed], %[ftmp8], %[Ed] \n\t" ++ "pmullh %[Ed], %[Ed], %[mask] \n\t" ++ "paddh %[C], %[C], %[Ed] \n\t" ++ "paddh %[C], %[C], %[D] \n\t" ++ "pcmpgth %[Ed], %[ftmp10], %[ftmp6] \n\t" ++ "or %[mask], %[Ed], %[Gd] \n\t" ++ "pmullh %[D], %[ftmp6], %[mask] \n\t" ++ "pmulhuh %[D], %[ftmp8], %[D] \n\t" ++ "pmullh %[D], %[D], %[mask] \n\t" ++ "pmulhh %[Gd], %[ftmp9], %[ftmp2] \n\t" ++ "psubh %[D], %[Gd], %[D] \n\t" ++ "psubh %[D], %[D], %[Ed] \n\t" ++ "psubh %[Ed], %[A], %[C] \n\t" ++ "paddh %[Gd], %[A], %[C] \n\t" ++ "paddh %[A], %[B], %[Ad] \n\t" ++ "psubh %[C], %[B], %[Ad] \n\t" ++ "psubh %[B], %[Bd], %[D] \n\t" ++ "paddh %[D], %[Bd], %[D] \n\t" ++ "or %[mask], %[ftmp1], %[ftmp2] \n\t" ++ "or %[mask], %[mask], %[ftmp3] \n\t" ++ "or %[mask], %[mask], %[ftmp4] \n\t" ++ "or %[mask], %[mask], %[ftmp5] \n\t" ++ "or %[mask], %[mask], %[ftmp6] \n\t" ++ "or %[mask], %[mask], %[ftmp7] \n\t" ++ "pcmpeqh %[mask], %[mask], %[ftmp10] \n\t" ++ "packushb %[mask], %[mask], %[ftmp10] \n\t" ++ "li %[tmp1], 0x04 \n\t" ++ "dmtc1 %[tmp1], %[ftmp8] \n\t" ++ "paddh %[ftmp0], %[Gd], %[Cd] \n\t" ++ "psrah %[ftmp0], %[ftmp0], %[ftmp8] \n\t" ++ "paddh %[ftmp1], %[A], %[D] \n\t" ++ "psrah %[ftmp1], %[ftmp1], %[ftmp8] \n\t" ++ "psubh %[ftmp2], %[A], %[D] \n\t" ++ "psrah %[ftmp2], %[ftmp2], %[ftmp8] \n\t" ++ "paddh %[ftmp3], %[Ed], %[Dd] \n\t" ++ "psrah %[ftmp3], %[ftmp3], %[ftmp8] \n\t" ++ "psubh %[ftmp4], %[Ed], %[Dd] \n\t" ++ "psrah %[ftmp4], %[ftmp4], %[ftmp8] \n\t" ++ "paddh %[ftmp5], %[C], %[B] \n\t" ++ "psrah %[ftmp5], %[ftmp5], %[ftmp8] \n\t" ++ "psubh %[ftmp6], %[C], %[B] \n\t" ++ "psrah %[ftmp6], %[ftmp6], %[ftmp8] \n\t" ++ "psubh %[ftmp7], %[Gd], %[Cd] \n\t" ++ "psrah %[ftmp7], %[ftmp7], %[ftmp8] \n\t" ++ "pmaxsh %[ftmp0], %[ftmp0], %[ftmp10] \n\t" ++ "packushb %[ftmp0], %[ftmp0], %[ftmp10] \n\t" ++ "pmaxsh %[ftmp1], %[ftmp1], %[ftmp10] \n\t" ++ "packushb %[ftmp1], %[ftmp1], %[ftmp10] \n\t" ++ "pmaxsh %[ftmp2], %[ftmp2], %[ftmp10] \n\t" ++ "packushb %[ftmp2], %[ftmp2], %[ftmp10] \n\t" ++ "pmaxsh %[ftmp3], %[ftmp3], %[ftmp10] \n\t" ++ "packushb %[ftmp3], %[ftmp3], %[ftmp10] \n\t" ++ "pmaxsh %[ftmp4], %[ftmp4], %[ftmp10] \n\t" ++ "packushb %[ftmp4], %[ftmp4], %[ftmp10] \n\t" ++ "pmaxsh %[ftmp5], %[ftmp5], %[ftmp10] \n\t" ++ "packushb %[ftmp5], %[ftmp5], %[ftmp10] \n\t" ++ "pmaxsh %[ftmp6], %[ftmp6], %[ftmp10] \n\t" ++ "packushb %[ftmp6], %[ftmp6], %[ftmp10] \n\t" ++ "pmaxsh %[ftmp7], %[ftmp7], %[ftmp10] \n\t" ++ "packushb %[ftmp7], %[ftmp7], %[ftmp10] \n\t" ++ ++ "lwc1 %[Ed], 0x00(%[temp_value]) \n\t" ++ "and %[Ed], %[Ed], %[mask] \n\t" ++ "paddb %[ftmp0], %[ftmp0], %[Ed] \n\t" ++ "paddb %[ftmp1], %[ftmp1], %[Ed] \n\t" ++ "paddb %[ftmp2], %[ftmp2], %[Ed] \n\t" ++ "paddb %[ftmp3], %[ftmp3], %[Ed] \n\t" ++ "paddb %[ftmp4], %[ftmp4], %[Ed] \n\t" ++ "paddb %[ftmp5], %[ftmp5], %[Ed] \n\t" ++ "paddb %[ftmp6], %[ftmp6], %[Ed] \n\t" ++ "paddb %[ftmp7], %[ftmp7], %[Ed] \n\t" ++ "swc1 %[ftmp0], 0x00(%[dst]) \n\t" ++ PTR_ADDU "%[tmp1], %[dst], %[stride] \n\t" ++ "swc1 %[ftmp1], 0x00(%[tmp1]) \n\t" ++ PTR_ADDU "%[tmp1], %[tmp1], %[stride] \n\t" ++ "swc1 %[ftmp2], 0x00(%[tmp1]) \n\t" ++ PTR_ADDU "%[tmp1], %[tmp1], %[stride] \n\t" ++ "swc1 %[ftmp3], 0x00(%[tmp1]) \n\t" ++ PTR_ADDU "%[tmp1], %[tmp1], %[stride] \n\t" ++ "swc1 %[ftmp4], 0x00(%[tmp1]) \n\t" ++ PTR_ADDU "%[tmp1], %[tmp1], %[stride] \n\t" ++ "swc1 %[ftmp5], 0x00(%[tmp1]) \n\t" ++ PTR_ADDU "%[tmp1], %[tmp1], %[stride] \n\t" ++ "swc1 %[ftmp6], 0x00(%[tmp1]) \n\t" ++ PTR_ADDU "%[tmp1], %[tmp1], %[stride] \n\t" ++ "swc1 %[ftmp7], 0x00(%[tmp1]) \n\t" ++ PTR_ADDIU "%[dst], %[dst], 0x04 \n\t" ++ PTR_ADDIU "%[input], %[input], 0x40 \n\t" ++ PTR_ADDIU "%[temp_value], %[temp_value], 0x04 \n\t" ++ PTR_ADDIU "%[tmp0], %[tmp0], -0x01 \n\t" ++ "bnez %[tmp0], 1b \n\t" ++ : [dst]"+&r"(dst), [tmp0]"=&r"(tmp[0]), [tmp1]"=&r"(tmp[1]), ++ [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), [ftmp2]"=&f"(ftmp[2]), ++ [ftmp3]"=&f"(ftmp[3]), [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), ++ [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), [ftmp8]"=&f"(ftmp[8]), ++ [ftmp9]"=&f"(ftmp[9]), [ftmp10]"=&f"(ftmp[10]), [mask]"=&f"(ftmp[11]), ++ [A]"=&f"(ftmp[12]), [B]"=&f"(ftmp[13]), [C]"=&f"(ftmp[14]), ++ [D]"=&f"(ftmp[15]), [Ad]"=&f"(ftmp[16]), [Bd]"=&f"(ftmp[17]), ++ [Cd]"=&f"(ftmp[18]), [Dd]"=&f"(ftmp[19]), [Ed]"=&f"(ftmp[20]), ++ [Gd]"=&f"(ftmp[21]), [input]"+&r"(input) ++ : [stride]"r"(stride), [temp_value]"r"(temp_value) ++ : "memory" ++ ); ++} ++ ++static void idct_column_false_mmi(uint8_t *dst, int stride, int16_t *input) ++{ ++ int16_t temp_value[8]; ++ double ftmp[23]; ++ uint64_t tmp[2]; ++ for (int i = 0; i < 8; ++i) ++ temp_value[i] = (46341 * input[i << 3] + (8 << 16)) >> 20; ++ __asm__ volatile ( ++ "xor %[ftmp10], %[ftmp10], %[ftmp10] \n\t" ++ "li %[tmp0], 0x02 \n\t" ++ "1: \n\t" ++ "ldc1 %[ftmp0], 0x00(%[input]) \n\t" ++ "ldc1 %[ftmp4], 0x08(%[input]) \n\t" ++ "ldc1 %[ftmp1], 0x10(%[input]) \n\t" ++ "ldc1 %[ftmp5], 0x18(%[input]) \n\t" ++ "ldc1 %[ftmp2], 0x20(%[input]) \n\t" ++ "ldc1 %[ftmp6], 0x28(%[input]) \n\t" ++ "ldc1 %[ftmp3], 0x30(%[input]) \n\t" ++ "ldc1 %[ftmp7], 0x38(%[input]) \n\t" ++ TRANSPOSE_4H(%[ftmp0], %[ftmp1], %[ftmp2], %[ftmp3], ++ %[A], %[B], %[C], %[D]) ++ TRANSPOSE_4H(%[ftmp4], %[ftmp5], %[ftmp6], %[ftmp7], ++ %[A], %[B], %[C], %[D]) ++ LOAD_CONST(%[ftmp8], 64277) ++ LOAD_CONST(%[ftmp9], 12785) ++ LOAD_CONST(%[Gd], 1) ++ "pmulhh %[A], %[ftmp9], %[ftmp7] \n\t" ++ "pcmpgth %[C], %[ftmp10], %[ftmp1] \n\t" ++ "or %[mask], %[C], %[Gd] \n\t" ++ "pmullh %[B], %[ftmp1], %[mask] \n\t" ++ "pmulhuh %[B], %[ftmp8], %[B] \n\t" ++ "pmullh %[B], %[B], %[mask] \n\t" ++ "paddh %[A], %[A], %[B] \n\t" ++ "paddh %[A], %[A], %[C] \n\t" ++ "pcmpgth %[D], %[ftmp10], %[ftmp7] \n\t" ++ "or %[mask], %[D], %[Gd] \n\t" ++ "pmullh %[Ad], %[ftmp7], %[mask] \n\t" ++ "pmulhuh %[B], %[ftmp8], %[Ad] \n\t" ++ "pmullh %[B], %[B], %[mask] \n\t" ++ "pmulhh %[C], %[ftmp9], %[ftmp1] \n\t" ++ "psubh %[B], %[C], %[B] \n\t" ++ "psubh %[B], %[B], %[D] \n\t" ++ ++ LOAD_CONST(%[ftmp8], 54491) ++ LOAD_CONST(%[ftmp9], 36410) ++ "pcmpgth %[Ad], %[ftmp10], %[ftmp5] \n\t" ++ "or %[mask], %[Ad], %[Gd] \n\t" ++ "pmullh %[Cd], %[ftmp5], %[mask] \n\t" ++ "pmulhuh %[C], %[ftmp9], %[Cd] \n\t" ++ "pmullh %[C], %[C], %[mask] \n\t" ++ "pcmpgth %[Bd], %[ftmp10], %[ftmp3] \n\t" ++ "or %[mask], %[Bd], %[Gd] \n\t" ++ "pmullh %[D], %[ftmp3], %[mask] \n\t" ++ "pmulhuh %[D], %[ftmp8], %[D] \n\t" ++ "pmullh %[D], %[D], %[mask] \n\t" ++ "paddh %[C], %[C], %[D] \n\t" ++ "paddh %[C], %[C], %[Ad] \n\t" ++ "paddh %[C], %[C], %[Bd] \n\t" ++ "pcmpgth %[Bd], %[ftmp10], %[ftmp3] \n\t" ++ "or %[mask], %[Bd], %[Gd] \n\t" ++ "pmullh %[Cd], %[ftmp3], %[mask] \n\t" ++ "pmulhuh %[D], %[ftmp9], %[Cd] \n\t" ++ "pmullh %[D], %[D], %[mask] \n\t" ++ "pcmpgth %[Ed], %[ftmp10], %[ftmp5] \n\t" ++ "or %[mask], %[Ed], %[Gd] \n\t" ++ "pmullh %[Ad], %[ftmp5], %[mask] \n\t" ++ "pmulhuh %[Ad], %[ftmp8], %[Ad] \n\t" ++ "pmullh %[Ad], %[Ad], %[mask] \n\t" ++ "psubh %[D], %[Ad], %[D] \n\t" ++ "paddh %[D], %[D], %[Ed] \n\t" ++ "psubh %[D], %[D], %[Bd] \n\t" ++ ++ LOAD_CONST(%[ftmp8], 46341) ++ "psubh %[Ad], %[A], %[C] \n\t" ++ "pcmpgth %[Bd], %[ftmp10], %[Ad] \n\t" ++ "or %[mask], %[Bd], %[Gd] \n\t" ++ "pmullh %[Ad], %[Ad], %[mask] \n\t" ++ "pmulhuh %[Ad], %[ftmp8], %[Ad] \n\t" ++ "pmullh %[Ad], %[Ad], %[mask] \n\t" ++ "paddh %[Ad], %[Ad], %[Bd] \n\t" ++ "psubh %[Bd], %[B], %[D] \n\t" ++ "pcmpgth %[Cd], %[ftmp10], %[Bd] \n\t" ++ "or %[mask], %[Cd], %[Gd] \n\t" ++ "pmullh %[Bd], %[Bd], %[mask] \n\t" ++ "pmulhuh %[Bd], %[ftmp8], %[Bd] \n\t" ++ "pmullh %[Bd], %[Bd], %[mask] \n\t" ++ "paddh %[Bd], %[Bd], %[Cd] \n\t" ++ "paddh %[Cd], %[A], %[C] \n\t" ++ "paddh %[Dd], %[B], %[D] \n\t" ++ ++ LOAD_CONST(%[Ed], 8) ++ "paddh %[A], %[ftmp0], %[ftmp4] \n\t" ++ "pcmpgth %[B], %[ftmp10], %[A] \n\t" ++ "or %[mask], %[B], %[Gd] \n\t" ++ "pmullh %[A], %[A], %[mask] \n\t" ++ "pmulhuh %[A], %[ftmp8], %[A] \n\t" ++ "pmullh %[A], %[A], %[mask] \n\t" ++ "paddh %[A], %[A], %[B] \n\t" ++ "paddh %[A], %[A], %[Ed] \n\t" ++ "psubh %[B], %[ftmp0], %[ftmp4] \n\t" ++ "pcmpgth %[C], %[ftmp10], %[B] \n\t" ++ "or %[mask], %[C], %[Gd] \n\t" ++ "pmullh %[B], %[B], %[mask] \n\t" ++ "pmulhuh %[B], %[ftmp8], %[B] \n\t" ++ "pmullh %[B], %[B], %[mask] \n\t" ++ "paddh %[B], %[B], %[C] \n\t" ++ "paddh %[B], %[B], %[Ed] \n\t" ++ ++ LOAD_CONST(%[ftmp8], 60547) ++ LOAD_CONST(%[ftmp9], 25080) ++ "pmulhh %[C], %[ftmp9], %[ftmp6] \n\t" ++ "pcmpgth %[D], %[ftmp10], %[ftmp2] \n\t" ++ "or %[mask], %[D], %[Gd] \n\t" ++ "pmullh %[Ed], %[ftmp2], %[mask] \n\t" ++ "pmulhuh %[Ed], %[ftmp8], %[Ed] \n\t" ++ "pmullh %[Ed], %[Ed], %[mask] \n\t" ++ "paddh %[C], %[C], %[Ed] \n\t" ++ "paddh %[C], %[C], %[D] \n\t" ++ "pcmpgth %[Ed], %[ftmp10], %[ftmp6] \n\t" ++ "or %[mask], %[Ed], %[Gd] \n\t" ++ "pmullh %[D], %[ftmp6], %[mask] \n\t" ++ "pmulhuh %[D], %[ftmp8], %[D] \n\t" ++ "pmullh %[D], %[D], %[mask] \n\t" ++ "pmulhh %[Gd], %[ftmp9], %[ftmp2] \n\t" ++ "psubh %[D], %[Gd], %[D] \n\t" ++ "psubh %[D], %[D], %[Ed] \n\t" ++ "psubh %[Ed], %[A], %[C] \n\t" ++ "paddh %[Gd], %[A], %[C] \n\t" ++ "paddh %[A], %[B], %[Ad] \n\t" ++ "psubh %[C], %[B], %[Ad] \n\t" ++ "psubh %[B], %[Bd], %[D] \n\t" ++ "paddh %[D], %[Bd], %[D] \n\t" ++ "or %[mask], %[ftmp1], %[ftmp2] \n\t" ++ "or %[mask], %[mask], %[ftmp3] \n\t" ++ "or %[mask], %[mask], %[ftmp4] \n\t" ++ "or %[mask], %[mask], %[ftmp5] \n\t" ++ "or %[mask], %[mask], %[ftmp6] \n\t" ++ "or %[mask], %[mask], %[ftmp7] \n\t" ++ "pcmpeqh %[mask], %[mask], %[ftmp10] \n\t" ++ "li %[tmp1], 0x04 \n\t" ++ "dmtc1 %[tmp1], %[ftmp8] \n\t" ++ "paddh %[ftmp0], %[Gd], %[Cd] \n\t" ++ "psrah %[ftmp0], %[ftmp0], %[ftmp8] \n\t" ++ "paddh %[ftmp1], %[A], %[D] \n\t" ++ "psrah %[ftmp1], %[ftmp1], %[ftmp8] \n\t" ++ "psubh %[ftmp2], %[A], %[D] \n\t" ++ "psrah %[ftmp2], %[ftmp2], %[ftmp8] \n\t" ++ "paddh %[ftmp3], %[Ed], %[Dd] \n\t" ++ "psrah %[ftmp3], %[ftmp3], %[ftmp8] \n\t" ++ "psubh %[ftmp4], %[Ed], %[Dd] \n\t" ++ "psrah %[ftmp4], %[ftmp4], %[ftmp8] \n\t" ++ "paddh %[ftmp5], %[C], %[B] \n\t" ++ "psrah %[ftmp5], %[ftmp5], %[ftmp8] \n\t" ++ "psubh %[ftmp6], %[C], %[B] \n\t" ++ "psrah %[ftmp6], %[ftmp6], %[ftmp8] \n\t" ++ "psubh %[ftmp7], %[Gd], %[Cd] \n\t" ++ "psrah %[ftmp7], %[ftmp7], %[ftmp8] \n\t" ++ ++ /* Load from dst */ ++ "lwc1 %[A], 0x00(%[dst]) \n\t" ++ PTR_ADDU "%[tmp1], %[dst], %[stride] \n\t" ++ "lwc1 %[B], 0x00(%[tmp1]) \n\t" ++ PTR_ADDU "%[tmp1], %[tmp1], %[stride] \n\t" ++ "lwc1 %[C], 0x00(%[tmp1]) \n\t" ++ PTR_ADDU "%[tmp1], %[tmp1], %[stride] \n\t" ++ "lwc1 %[D], 0x00(%[tmp1]) \n\t" ++ PTR_ADDU "%[tmp1], %[tmp1], %[stride] \n\t" ++ "lwc1 %[Ad], 0x00(%[tmp1]) \n\t" ++ PTR_ADDU "%[tmp1], %[tmp1], %[stride] \n\t" ++ "lwc1 %[Bd], 0x00(%[tmp1]) \n\t" ++ PTR_ADDU "%[tmp1], %[tmp1], %[stride] \n\t" ++ "lwc1 %[Cd], 0x00(%[tmp1]) \n\t" ++ PTR_ADDU "%[tmp1], %[tmp1], %[stride] \n\t" ++ "lwc1 %[Dd], 0x00(%[tmp1]) \n\t" ++ "punpcklbh %[A], %[A], %[ftmp10] \n\t" ++ "punpcklbh %[B], %[B], %[ftmp10] \n\t" ++ "punpcklbh %[C], %[C], %[ftmp10] \n\t" ++ "punpcklbh %[D], %[D], %[ftmp10] \n\t" ++ "punpcklbh %[Ad], %[Ad], %[ftmp10] \n\t" ++ "punpcklbh %[Bd], %[Bd], %[ftmp10] \n\t" ++ "punpcklbh %[Cd], %[Cd], %[ftmp10] \n\t" ++ "punpcklbh %[Dd], %[Dd], %[ftmp10] \n\t" ++ "ldc1 %[Ed], 0x00(%[temp_value]) \n\t" ++ "and %[Ed], %[Ed], %[mask] \n\t" ++ "nor %[mask], %[mask], %[mask] \n\t" ++ "and %[ftmp0], %[ftmp0], %[mask] \n\t" ++ "and %[ftmp1], %[ftmp1], %[mask] \n\t" ++ "and %[ftmp2], %[ftmp2], %[mask] \n\t" ++ "and %[ftmp3], %[ftmp3], %[mask] \n\t" ++ "and %[ftmp4], %[ftmp4], %[mask] \n\t" ++ "and %[ftmp5], %[ftmp5], %[mask] \n\t" ++ "and %[ftmp6], %[ftmp6], %[mask] \n\t" ++ "and %[ftmp7], %[ftmp7], %[mask] \n\t" ++ "paddh %[ftmp0], %[ftmp0], %[A] \n\t" ++ "paddh %[ftmp1], %[ftmp1], %[B] \n\t" ++ "paddh %[ftmp2], %[ftmp2], %[C] \n\t" ++ "paddh %[ftmp3], %[ftmp3], %[D] \n\t" ++ "paddh %[ftmp4], %[ftmp4], %[Ad] \n\t" ++ "paddh %[ftmp5], %[ftmp5], %[Bd] \n\t" ++ "paddh %[ftmp6], %[ftmp6], %[Cd] \n\t" ++ "paddh %[ftmp7], %[ftmp7], %[Dd] \n\t" ++ "paddh %[ftmp0], %[ftmp0], %[Ed] \n\t" ++ "paddh %[ftmp1], %[ftmp1], %[Ed] \n\t" ++ "paddh %[ftmp2], %[ftmp2], %[Ed] \n\t" ++ "paddh %[ftmp3], %[ftmp3], %[Ed] \n\t" ++ "paddh %[ftmp4], %[ftmp4], %[Ed] \n\t" ++ "paddh %[ftmp5], %[ftmp5], %[Ed] \n\t" ++ "paddh %[ftmp6], %[ftmp6], %[Ed] \n\t" ++ "paddh %[ftmp7], %[ftmp7], %[Ed] \n\t" ++ "pmaxsh %[ftmp0], %[ftmp0], %[ftmp10] \n\t" ++ "packushb %[ftmp0], %[ftmp0], %[ftmp10] \n\t" ++ "pmaxsh %[ftmp1], %[ftmp1], %[ftmp10] \n\t" ++ "packushb %[ftmp1], %[ftmp1], %[ftmp10] \n\t" ++ "pmaxsh %[ftmp2], %[ftmp2], %[ftmp10] \n\t" ++ "packushb %[ftmp2], %[ftmp2], %[ftmp10] \n\t" ++ "pmaxsh %[ftmp3], %[ftmp3], %[ftmp10] \n\t" ++ "packushb %[ftmp3], %[ftmp3], %[ftmp10] \n\t" ++ "pmaxsh %[ftmp4], %[ftmp4], %[ftmp10] \n\t" ++ "packushb %[ftmp4], %[ftmp4], %[ftmp10] \n\t" ++ "pmaxsh %[ftmp5], %[ftmp5], %[ftmp10] \n\t" ++ "packushb %[ftmp5], %[ftmp5], %[ftmp10] \n\t" ++ "pmaxsh %[ftmp6], %[ftmp6], %[ftmp10] \n\t" ++ "packushb %[ftmp6], %[ftmp6], %[ftmp10] \n\t" ++ "pmaxsh %[ftmp7], %[ftmp7], %[ftmp10] \n\t" ++ "packushb %[ftmp7], %[ftmp7], %[ftmp10] \n\t" ++ "swc1 %[ftmp0], 0x00(%[dst]) \n\t" ++ PTR_ADDU "%[tmp1], %[dst], %[stride] \n\t" ++ "swc1 %[ftmp1], 0x00(%[tmp1]) \n\t" ++ PTR_ADDU "%[tmp1], %[tmp1], %[stride] \n\t" ++ "swc1 %[ftmp2], 0x00(%[tmp1]) \n\t" ++ PTR_ADDU "%[tmp1], %[tmp1], %[stride] \n\t" ++ "swc1 %[ftmp3], 0x00(%[tmp1]) \n\t" ++ PTR_ADDU "%[tmp1], %[tmp1], %[stride] \n\t" ++ "swc1 %[ftmp4], 0x00(%[tmp1]) \n\t" ++ PTR_ADDU "%[tmp1], %[tmp1], %[stride] \n\t" ++ "swc1 %[ftmp5], 0x00(%[tmp1]) \n\t" ++ PTR_ADDU "%[tmp1], %[tmp1], %[stride] \n\t" ++ "swc1 %[ftmp6], 0x00(%[tmp1]) \n\t" ++ PTR_ADDU "%[tmp1], %[tmp1], %[stride] \n\t" ++ "swc1 %[ftmp7], 0x00(%[tmp1]) \n\t" ++ PTR_ADDIU "%[dst], %[dst], 0x04 \n\t" ++ PTR_ADDIU "%[input], %[input], 0x40 \n\t" ++ PTR_ADDIU "%[temp_value], %[temp_value], 0x08 \n\t" ++ PTR_ADDIU "%[tmp0], %[tmp0], -0x01 \n\t" ++ "bnez %[tmp0], 1b \n\t" ++ : [dst]"+&r"(dst), [tmp0]"=&r"(tmp[0]), [tmp1]"=&r"(tmp[1]), ++ [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), [ftmp2]"=&f"(ftmp[2]), ++ [ftmp3]"=&f"(ftmp[3]), [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), ++ [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), [ftmp8]"=&f"(ftmp[8]), ++ [ftmp9]"=&f"(ftmp[9]), [ftmp10]"=&f"(ftmp[10]), [mask]"=&f"(ftmp[11]), ++ [A]"=&f"(ftmp[12]), [B]"=&f"(ftmp[13]), [C]"=&f"(ftmp[14]), ++ [D]"=&f"(ftmp[15]), [Ad]"=&f"(ftmp[16]), [Bd]"=&f"(ftmp[17]), ++ [Cd]"=&f"(ftmp[18]), [Dd]"=&f"(ftmp[19]), [Ed]"=&f"(ftmp[20]), ++ [Gd]"=&f"(ftmp[21]), [input]"+&r"(input) ++ : [stride]"r"(stride), [temp_value]"r"(temp_value) ++ : "memory" ++ ); ++} ++static void idct_mmi(uint8_t *dst, int stride, int16_t *input, int type) ++{ ++ idct_row_mmi(input); ++ if (type == 1) ++ idct_column_true_mmi(dst, stride, input); ++ else ++ idct_column_false_mmi(dst, stride, input); ++} ++ ++void ff_vp3_idct_put_mmi(uint8_t *dest, ptrdiff_t line_size, int16_t *block) ++{ ++ idct_mmi(dest, line_size, block, 1); ++ memset(block, 0, sizeof(*block) << 6); ++} ++ ++void ff_vp3_idct_add_mmi(uint8_t *dest, ptrdiff_t line_size, int16_t *block) ++{ ++ idct_mmi(dest, line_size, block, 2); ++ memset(block, 0, sizeof(*block) << 6); ++} ++void ff_vp3_idct_dc_add_mmi(uint8_t *dest, ptrdiff_t line_size, int16_t *block) ++{ ++ int dc = (block[0] + 15) >> 5; ++ ++ double ftmp[7]; ++ uint64_t tmp; ++ __asm__ volatile ( ++ "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "mtc1 %[dc], %[ftmp5] \n\t" ++ "pshufh %[ftmp5], %[ftmp5], %[ftmp0] \n\t" ++ "li %[tmp0], 0x08 \n\t" ++ "1: \n\t" ++ "ldc1 %[ftmp1], 0x00(%[dest]) \n\t" ++ "punpcklbh %[ftmp2], %[ftmp1], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp3], %[ftmp1], %[ftmp0] \n\t" ++ "paddh %[ftmp4], %[ftmp2], %[ftmp5] \n\t" ++ "paddh %[ftmp6], %[ftmp3], %[ftmp5] \n\t" ++ "packushb %[ftmp4], %[ftmp4], %[ftmp0] \n\t" ++ "packushb %[ftmp6], %[ftmp6], %[ftmp0] \n\t" ++ "swc1 %[ftmp4], 0x00(%[dest]) \n\t" ++ "swc1 %[ftmp6], 0x04(%[dest]) \n\t" ++ PTR_ADDU "%[dest], %[dest], %[line_size] \n\t" ++ PTR_ADDIU "%[tmp0], %[tmp0], -0x01 \n\t" ++ "bnez %[tmp0], 1b \n\t" ++ : [dest]"+&r"(dest), [block]"+&r"(block), [tmp0]"=&r"(tmp), ++ [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), [ftmp2]"=&f"(ftmp[2]), ++ [ftmp3]"=&f"(ftmp[3]), [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), ++ [ftmp6]"=&f"(ftmp[6]) ++ : [line_size]"r"(line_size), [dc]"r"(dc) ++ : "memory" ++ ); ++ block[0] = 0; ++} ++ ++void ff_put_no_rnd_pixels_l2_mmi(uint8_t *dst, const uint8_t *src1, ++ const uint8_t *src2, ptrdiff_t stride, int h) ++{ ++ if (h == 8) { ++ double ftmp[6]; ++ uint64_t tmp[2]; ++ __asm__ volatile ( ++ "li %[tmp0], 0x08 \n\t" ++ "li %[tmp1], 0xfefefefe \n\t" ++ "dmtc1 %[tmp1], %[ftmp4] \n\t" ++ "punpcklwd %[ftmp4], %[ftmp4], %[ftmp4] \n\t" ++ "li %[tmp1], 0x01 \n\t" ++ "dmtc1 %[tmp1], %[ftmp5] \n\t" ++ "1: \n\t" ++ "gsldlc1 %[ftmp1], 0x07(%[src1]) \n\t" ++ "gsldrc1 %[ftmp1], 0x00(%[src1]) \n\t" ++ "gsldlc1 %[ftmp2], 0x07(%[src2]) \n\t" ++ "gsldrc1 %[ftmp2], 0x00(%[src2]) \n\t" ++ "xor %[ftmp3], %[ftmp1], %[ftmp2] \n\t" ++ "and %[ftmp3], %[ftmp3], %[ftmp4] \n\t" ++ "psrlw %[ftmp3], %[ftmp3], %[ftmp5] \n\t" ++ "and %[ftmp6], %[ftmp1], %[ftmp2] \n\t" ++ "paddw %[ftmp3], %[ftmp3], %[ftmp6] \n\t" ++ "sdc1 %[ftmp3], 0x00(%[dst]) \n\t" ++ PTR_ADDU "%[src1], %[src1], %[stride] \n\t" ++ PTR_ADDU "%[src2], %[src2], %[stride] \n\t" ++ PTR_ADDU "%[dst], %[dst], %[stride] \n\t" ++ PTR_ADDIU "%[tmp0], %[tmp0], -0x01 \n\t" ++ "bnez %[tmp0], 1b \n\t" ++ : [dst]"+&r"(dst), [src1]"+&r"(src1), [src2]"+&r"(src2), ++ [ftmp1]"=&f"(ftmp[0]), [ftmp2]"=&f"(ftmp[1]), [ftmp3]"=&f"(ftmp[2]), ++ [ftmp4]"=&f"(ftmp[3]), [ftmp5]"=&f"(ftmp[4]), [ftmp6]"=&f"(ftmp[5]), ++ [tmp0]"=&r"(tmp[0]), [tmp1]"=&r"(tmp[1]) ++ : [stride]"r"(stride) ++ : "memory" ++ ); ++ } else { ++ int i; ++ ++ for (i = 0; i < h; i++) { ++ uint32_t a, b; ++ ++ a = AV_RN32(&src1[i * stride]); ++ b = AV_RN32(&src2[i * stride]); ++ AV_WN32A(&dst[i * stride], no_rnd_avg32(a, b)); ++ a = AV_RN32(&src1[i * stride + 4]); ++ b = AV_RN32(&src2[i * stride + 4]); ++ AV_WN32A(&dst[i * stride + 4], no_rnd_avg32(a, b)); ++ } ++ } ++} +diff --git a/libavcodec/mips/vp3dsp_idct_msa.c b/libavcodec/mips/vp3dsp_idct_msa.c +new file mode 100644 +index 0000000..90c578f +--- /dev/null ++++ b/libavcodec/mips/vp3dsp_idct_msa.c +@@ -0,0 +1,598 @@ ++/* ++ * Copyright (c) 2018 gxw ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "vp3dsp_mips.h" ++#include "libavutil/mips/generic_macros_msa.h" ++#include "libavutil/intreadwrite.h" ++#include "libavcodec/rnd_avg.h" ++ ++static void idct_msa(uint8_t *dst, int stride, int16_t *input, int type) ++{ ++ v8i16 r0, r1, r2, r3, r4, r5, r6, r7, sign; ++ v4i32 r0_r, r0_l, r1_r, r1_l, r2_r, r2_l, r3_r, r3_l, ++ r4_r, r4_l, r5_r, r5_l, r6_r, r6_l, r7_r, r7_l; ++ v4i32 A, B, C, D, Ad, Bd, Cd, Dd, E, F, G, H; ++ v4i32 Ed, Gd, Add, Bdd, Fd, Hd; ++ v16u8 sign_l; ++ v16i8 d0, d1, d2, d3, d4, d5, d6, d7; ++ v4i32 c0, c1, c2, c3, c4, c5, c6, c7; ++ v4i32 f0, f1, f2, f3, f4, f5, f6, f7; ++ v4i32 sign_t; ++ v16i8 zero = {0}; ++ v16i8 mask = {0, 4, 8, 12, 16, 20, 24, 28, 0, 0, 0, 0, 0, 0, 0, 0}; ++ v4i32 cnst64277w = {64277, 64277, 64277, 64277}; ++ v4i32 cnst60547w = {60547, 60547, 60547, 60547}; ++ v4i32 cnst54491w = {54491, 54491, 54491, 54491}; ++ v4i32 cnst46341w = {46341, 46341, 46341, 46341}; ++ v4i32 cnst36410w = {36410, 36410, 36410, 36410}; ++ v4i32 cnst25080w = {25080, 25080, 25080, 25080}; ++ v4i32 cnst12785w = {12785, 12785, 12785, 12785}; ++ v4i32 cnst8w = {8, 8, 8, 8}; ++ v4i32 cnst2048w = {2048, 2048, 2048, 2048}; ++ v4i32 cnst128w = {128, 128, 128, 128}; ++ ++ /* Extended input data */ ++ LD_SH8(input, 8, r0, r1, r2, r3, r4, r5, r6, r7); ++ sign = __msa_clti_s_h(r0, 0); ++ r0_r = (v4i32) __msa_ilvr_h(sign, r0); ++ r0_l = (v4i32) __msa_ilvl_h(sign, r0); ++ sign = __msa_clti_s_h(r1, 0); ++ r1_r = (v4i32) __msa_ilvr_h(sign, r1); ++ r1_l = (v4i32) __msa_ilvl_h(sign, r1); ++ sign = __msa_clti_s_h(r2, 0); ++ r2_r = (v4i32) __msa_ilvr_h(sign, r2); ++ r2_l = (v4i32) __msa_ilvl_h(sign, r2); ++ sign = __msa_clti_s_h(r3, 0); ++ r3_r = (v4i32) __msa_ilvr_h(sign, r3); ++ r3_l = (v4i32) __msa_ilvl_h(sign, r3); ++ sign = __msa_clti_s_h(r4, 0); ++ r4_r = (v4i32) __msa_ilvr_h(sign, r4); ++ r4_l = (v4i32) __msa_ilvl_h(sign, r4); ++ sign = __msa_clti_s_h(r5, 0); ++ r5_r = (v4i32) __msa_ilvr_h(sign, r5); ++ r5_l = (v4i32) __msa_ilvl_h(sign, r5); ++ sign = __msa_clti_s_h(r6, 0); ++ r6_r = (v4i32) __msa_ilvr_h(sign, r6); ++ r6_l = (v4i32) __msa_ilvl_h(sign, r6); ++ sign = __msa_clti_s_h(r7, 0); ++ r7_r = (v4i32) __msa_ilvr_h(sign, r7); ++ r7_l = (v4i32) __msa_ilvl_h(sign, r7); ++ ++ /* Right part */ ++ A = ((r1_r * cnst64277w) >> 16) + ((r7_r * cnst12785w) >> 16); ++ B = ((r1_r * cnst12785w) >> 16) - ((r7_r * cnst64277w) >> 16); ++ C = ((r3_r * cnst54491w) >> 16) + ((r5_r * cnst36410w) >> 16); ++ D = ((r5_r * cnst54491w) >> 16) - ((r3_r * cnst36410w) >> 16); ++ Ad = ((A - C) * cnst46341w) >> 16; ++ Bd = ((B - D) * cnst46341w) >> 16; ++ Cd = A + C; ++ Dd = B + D; ++ E = ((r0_r + r4_r) * cnst46341w) >> 16; ++ F = ((r0_r - r4_r) * cnst46341w) >> 16; ++ G = ((r2_r * cnst60547w) >> 16) + ((r6_r * cnst25080w) >> 16); ++ H = ((r2_r * cnst25080w) >> 16) - ((r6_r * cnst60547w) >> 16); ++ Ed = E - G; ++ Gd = E + G; ++ Add = F + Ad; ++ Bdd = Bd - H; ++ Fd = F - Ad; ++ Hd = Bd + H; ++ r0_r = Gd + Cd; ++ r7_r = Gd - Cd; ++ r1_r = Add + Hd; ++ r2_r = Add - Hd; ++ r3_r = Ed + Dd; ++ r4_r = Ed - Dd; ++ r5_r = Fd + Bdd; ++ r6_r = Fd - Bdd; ++ ++ /* Left part */ ++ A = ((r1_l * cnst64277w) >> 16) + ((r7_l * cnst12785w) >> 16); ++ B = ((r1_l * cnst12785w) >> 16) - ((r7_l * cnst64277w) >> 16); ++ C = ((r3_l * cnst54491w) >> 16) + ((r5_l * cnst36410w) >> 16); ++ D = ((r5_l * cnst54491w) >> 16) - ((r3_l * cnst36410w) >> 16); ++ Ad = ((A - C) * cnst46341w) >> 16; ++ Bd = ((B - D) * cnst46341w) >> 16; ++ Cd = A + C; ++ Dd = B + D; ++ E = ((r0_l + r4_l) * cnst46341w) >> 16; ++ F = ((r0_l - r4_l) * cnst46341w) >> 16; ++ G = ((r2_l * cnst60547w) >> 16) + ((r6_l * cnst25080w) >> 16); ++ H = ((r2_l * cnst25080w) >> 16) - ((r6_l * cnst60547w) >> 16); ++ Ed = E - G; ++ Gd = E + G; ++ Add = F + Ad; ++ Bdd = Bd - H; ++ Fd = F - Ad; ++ Hd = Bd + H; ++ r0_l = Gd + Cd; ++ r7_l = Gd - Cd; ++ r1_l = Add + Hd; ++ r2_l = Add - Hd; ++ r3_l = Ed + Dd; ++ r4_l = Ed - Dd; ++ r5_l = Fd + Bdd; ++ r6_l = Fd - Bdd; ++ ++ /* Row 0 to 3 */ ++ TRANSPOSE4x4_SW_SW(r0_r, r1_r, r2_r, r3_r, ++ r0_r, r1_r, r2_r, r3_r); ++ TRANSPOSE4x4_SW_SW(r0_l, r1_l, r2_l, r3_l, ++ r0_l, r1_l, r2_l, r3_l); ++ A = ((r1_r * cnst64277w) >> 16) + ((r3_l * cnst12785w) >> 16); ++ B = ((r1_r * cnst12785w) >> 16) - ((r3_l * cnst64277w) >> 16); ++ C = ((r3_r * cnst54491w) >> 16) + ((r1_l * cnst36410w) >> 16); ++ D = ((r1_l * cnst54491w) >> 16) - ((r3_r * cnst36410w) >> 16); ++ Ad = ((A - C) * cnst46341w) >> 16; ++ Bd = ((B - D) * cnst46341w) >> 16; ++ Cd = A + C; ++ Dd = B + D; ++ E = ((r0_r + r0_l) * cnst46341w) >> 16; ++ E += cnst8w; ++ F = ((r0_r - r0_l) * cnst46341w) >> 16; ++ F += cnst8w; ++ if (type == 1) { // HACK ++ E += cnst2048w; ++ F += cnst2048w; ++ } ++ G = ((r2_r * cnst60547w) >> 16) + ((r2_l * cnst25080w) >> 16); ++ H = ((r2_r * cnst25080w) >> 16) - ((r2_l * cnst60547w) >> 16); ++ Ed = E - G; ++ Gd = E + G; ++ Add = F + Ad; ++ Bdd = Bd - H; ++ Fd = F - Ad; ++ Hd = Bd + H; ++ A = (Gd + Cd) >> 4; ++ B = (Gd - Cd) >> 4; ++ C = (Add + Hd) >> 4; ++ D = (Add - Hd) >> 4; ++ E = (Ed + Dd) >> 4; ++ F = (Ed - Dd) >> 4; ++ G = (Fd + Bdd) >> 4; ++ H = (Fd - Bdd) >> 4; ++ if (type != 1) { ++ LD_SB8(dst, stride, d0, d1, d2, d3, d4, d5, d6, d7); ++ ILVR_B4_SW(zero, d0, zero, d1, zero, d2, zero, d3, ++ f0, f1, f2, f3); ++ ILVR_B4_SW(zero, d4, zero, d5, zero, d6, zero, d7, ++ f4, f5, f6, f7); ++ ILVR_H4_SW(zero, f0, zero, f1, zero, f2, zero, f3, ++ c0, c1, c2, c3); ++ ILVR_H4_SW(zero, f4, zero, f5, zero, f6, zero, f7, ++ c4, c5, c6, c7); ++ A += c0; ++ B += c7; ++ C += c1; ++ D += c2; ++ E += c3; ++ F += c4; ++ G += c5; ++ H += c6; ++ } ++ CLIP_SW8_0_255(A, B, C, D, E, F, G, H); ++ sign_l = __msa_or_v((v16u8)r1_r, (v16u8)r2_r); ++ sign_l = __msa_or_v(sign_l, (v16u8)r3_r); ++ sign_l = __msa_or_v(sign_l, (v16u8)r0_l); ++ sign_l = __msa_or_v(sign_l, (v16u8)r1_l); ++ sign_l = __msa_or_v(sign_l, (v16u8)r2_l); ++ sign_l = __msa_or_v(sign_l, (v16u8)r3_l); ++ sign_t = __msa_ceqi_w((v4i32)sign_l, 0); ++ Add = ((r0_r * cnst46341w) + (8 << 16)) >> 20; ++ if (type == 1) { ++ Bdd = Add + cnst128w; ++ CLIP_SW_0_255(Bdd); ++ Ad = Bdd; ++ Bd = Bdd; ++ Cd = Bdd; ++ Dd = Bdd; ++ Ed = Bdd; ++ Fd = Bdd; ++ Gd = Bdd; ++ Hd = Bdd; ++ } else { ++ Ad = Add + c0; ++ Bd = Add + c1; ++ Cd = Add + c2; ++ Dd = Add + c3; ++ Ed = Add + c4; ++ Fd = Add + c5; ++ Gd = Add + c6; ++ Hd = Add + c7; ++ CLIP_SW8_0_255(Ad, Bd, Cd, Dd, Ed, Fd, Gd, Hd); ++ } ++ Ad = (v4i32)__msa_and_v((v16u8)Ad, (v16u8)sign_t); ++ Bd = (v4i32)__msa_and_v((v16u8)Bd, (v16u8)sign_t); ++ Cd = (v4i32)__msa_and_v((v16u8)Cd, (v16u8)sign_t); ++ Dd = (v4i32)__msa_and_v((v16u8)Dd, (v16u8)sign_t); ++ Ed = (v4i32)__msa_and_v((v16u8)Ed, (v16u8)sign_t); ++ Fd = (v4i32)__msa_and_v((v16u8)Fd, (v16u8)sign_t); ++ Gd = (v4i32)__msa_and_v((v16u8)Gd, (v16u8)sign_t); ++ Hd = (v4i32)__msa_and_v((v16u8)Hd, (v16u8)sign_t); ++ sign_t = __msa_ceqi_w(sign_t, 0); ++ A = (v4i32)__msa_and_v((v16u8)A, (v16u8)sign_t); ++ B = (v4i32)__msa_and_v((v16u8)B, (v16u8)sign_t); ++ C = (v4i32)__msa_and_v((v16u8)C, (v16u8)sign_t); ++ D = (v4i32)__msa_and_v((v16u8)D, (v16u8)sign_t); ++ E = (v4i32)__msa_and_v((v16u8)E, (v16u8)sign_t); ++ F = (v4i32)__msa_and_v((v16u8)F, (v16u8)sign_t); ++ G = (v4i32)__msa_and_v((v16u8)G, (v16u8)sign_t); ++ H = (v4i32)__msa_and_v((v16u8)H, (v16u8)sign_t); ++ r0_r = Ad + A; ++ r1_r = Bd + C; ++ r2_r = Cd + D; ++ r3_r = Dd + E; ++ r0_l = Ed + F; ++ r1_l = Fd + G; ++ r2_l = Gd + H; ++ r3_l = Hd + B; ++ ++ /* Row 4 to 7 */ ++ TRANSPOSE4x4_SW_SW(r4_r, r5_r, r6_r, r7_r, ++ r4_r, r5_r, r6_r, r7_r); ++ TRANSPOSE4x4_SW_SW(r4_l, r5_l, r6_l, r7_l, ++ r4_l, r5_l, r6_l, r7_l); ++ A = ((r5_r * cnst64277w) >> 16) + ((r7_l * cnst12785w) >> 16); ++ B = ((r5_r * cnst12785w) >> 16) - ((r7_l * cnst64277w) >> 16); ++ C = ((r7_r * cnst54491w) >> 16) + ((r5_l * cnst36410w) >> 16); ++ D = ((r5_l * cnst54491w) >> 16) - ((r7_r * cnst36410w) >> 16); ++ Ad = ((A - C) * cnst46341w) >> 16; ++ Bd = ((B - D) * cnst46341w) >> 16; ++ Cd = A + C; ++ Dd = B + D; ++ E = ((r4_r + r4_l) * cnst46341w) >> 16; ++ E += cnst8w; ++ F = ((r4_r - r4_l) * cnst46341w) >> 16; ++ F += cnst8w; ++ if (type == 1) { // HACK ++ E += cnst2048w; ++ F += cnst2048w; ++ } ++ G = ((r6_r * cnst60547w) >> 16) + ((r6_l * cnst25080w) >> 16); ++ H = ((r6_r * cnst25080w) >> 16) - ((r6_l * cnst60547w) >> 16); ++ Ed = E - G; ++ Gd = E + G; ++ Add = F + Ad; ++ Bdd = Bd - H; ++ Fd = F - Ad; ++ Hd = Bd + H; ++ A = (Gd + Cd) >> 4; ++ B = (Gd - Cd) >> 4; ++ C = (Add + Hd) >> 4; ++ D = (Add - Hd) >> 4; ++ E = (Ed + Dd) >> 4; ++ F = (Ed - Dd) >> 4; ++ G = (Fd + Bdd) >> 4; ++ H = (Fd - Bdd) >> 4; ++ if (type != 1) { ++ ILVL_H4_SW(zero, f0, zero, f1, zero, f2, zero, f3, ++ c0, c1, c2, c3); ++ ILVL_H4_SW(zero, f4, zero, f5, zero, f6, zero, f7, ++ c4, c5, c6, c7); ++ A += c0; ++ B += c7; ++ C += c1; ++ D += c2; ++ E += c3; ++ F += c4; ++ G += c5; ++ H += c6; ++ } ++ CLIP_SW8_0_255(A, B, C, D, E, F, G, H); ++ sign_l = __msa_or_v((v16u8)r5_r, (v16u8)r6_r); ++ sign_l = __msa_or_v(sign_l, (v16u8)r7_r); ++ sign_l = __msa_or_v(sign_l, (v16u8)r4_l); ++ sign_l = __msa_or_v(sign_l, (v16u8)r5_l); ++ sign_l = __msa_or_v(sign_l, (v16u8)r6_l); ++ sign_l = __msa_or_v(sign_l, (v16u8)r7_l); ++ sign_t = __msa_ceqi_w((v4i32)sign_l, 0); ++ Add = ((r4_r * cnst46341w) + (8 << 16)) >> 20; ++ if (type == 1) { ++ Bdd = Add + cnst128w; ++ CLIP_SW_0_255(Bdd); ++ Ad = Bdd; ++ Bd = Bdd; ++ Cd = Bdd; ++ Dd = Bdd; ++ Ed = Bdd; ++ Fd = Bdd; ++ Gd = Bdd; ++ Hd = Bdd; ++ } else { ++ Ad = Add + c0; ++ Bd = Add + c1; ++ Cd = Add + c2; ++ Dd = Add + c3; ++ Ed = Add + c4; ++ Fd = Add + c5; ++ Gd = Add + c6; ++ Hd = Add + c7; ++ CLIP_SW8_0_255(Ad, Bd, Cd, Dd, Ed, Fd, Gd, Hd); ++ } ++ Ad = (v4i32)__msa_and_v((v16u8)Ad, (v16u8)sign_t); ++ Bd = (v4i32)__msa_and_v((v16u8)Bd, (v16u8)sign_t); ++ Cd = (v4i32)__msa_and_v((v16u8)Cd, (v16u8)sign_t); ++ Dd = (v4i32)__msa_and_v((v16u8)Dd, (v16u8)sign_t); ++ Ed = (v4i32)__msa_and_v((v16u8)Ed, (v16u8)sign_t); ++ Fd = (v4i32)__msa_and_v((v16u8)Fd, (v16u8)sign_t); ++ Gd = (v4i32)__msa_and_v((v16u8)Gd, (v16u8)sign_t); ++ Hd = (v4i32)__msa_and_v((v16u8)Hd, (v16u8)sign_t); ++ sign_t = __msa_ceqi_w(sign_t, 0); ++ A = (v4i32)__msa_and_v((v16u8)A, (v16u8)sign_t); ++ B = (v4i32)__msa_and_v((v16u8)B, (v16u8)sign_t); ++ C = (v4i32)__msa_and_v((v16u8)C, (v16u8)sign_t); ++ D = (v4i32)__msa_and_v((v16u8)D, (v16u8)sign_t); ++ E = (v4i32)__msa_and_v((v16u8)E, (v16u8)sign_t); ++ F = (v4i32)__msa_and_v((v16u8)F, (v16u8)sign_t); ++ G = (v4i32)__msa_and_v((v16u8)G, (v16u8)sign_t); ++ H = (v4i32)__msa_and_v((v16u8)H, (v16u8)sign_t); ++ r4_r = Ad + A; ++ r5_r = Bd + C; ++ r6_r = Cd + D; ++ r7_r = Dd + E; ++ r4_l = Ed + F; ++ r5_l = Fd + G; ++ r6_l = Gd + H; ++ r7_l = Hd + B; ++ VSHF_B2_SB(r0_r, r4_r, r1_r, r5_r, mask, mask, d0, d1); ++ VSHF_B2_SB(r2_r, r6_r, r3_r, r7_r, mask, mask, d2, d3); ++ VSHF_B2_SB(r0_l, r4_l, r1_l, r5_l, mask, mask, d4, d5); ++ VSHF_B2_SB(r2_l, r6_l, r3_l, r7_l, mask, mask, d6, d7); ++ ++ /* Final sequence of operations over-write original dst */ ++ ST_D1(d0, 0, dst); ++ ST_D1(d1, 0, dst + stride); ++ ST_D1(d2, 0, dst + 2 * stride); ++ ST_D1(d3, 0, dst + 3 * stride); ++ ST_D1(d4, 0, dst + 4 * stride); ++ ST_D1(d5, 0, dst + 5 * stride); ++ ST_D1(d6, 0, dst + 6 * stride); ++ ST_D1(d7, 0, dst + 7 * stride); ++} ++ ++void ff_vp3_idct_put_msa(uint8_t *dest, ptrdiff_t line_size, int16_t *block) ++{ ++ idct_msa(dest, line_size, block, 1); ++ memset(block, 0, sizeof(*block) * 64); ++} ++ ++void ff_vp3_idct_add_msa(uint8_t *dest, ptrdiff_t line_size, int16_t *block) ++{ ++ idct_msa(dest, line_size, block, 2); ++ memset(block, 0, sizeof(*block) * 64); ++} ++ ++void ff_vp3_idct_dc_add_msa(uint8_t *dest, ptrdiff_t line_size, int16_t *block) ++{ ++ int i = (block[0] + 15) >> 5; ++ v4i32 dc = {i, i, i, i}; ++ v16i8 d0, d1, d2, d3, d4, d5, d6, d7; ++ v4i32 c0, c1, c2, c3, c4, c5, c6, c7; ++ v4i32 e0, e1, e2, e3, e4, e5, e6, e7; ++ v4i32 r0, r1, r2, r3, r4, r5, r6, r7; ++ v16i8 mask = {0, 4, 8, 12, 16, 20, 24, 28, 0, 0, 0, 0, 0, 0, 0, 0}; ++ v16i8 zero = {0}; ++ ++ LD_SB8(dest, line_size, d0, d1, d2, d3, d4, d5, d6, d7); ++ ILVR_B4_SW(zero, d0, zero, d1, zero, d2, zero, d3, ++ c0, c1, c2, c3); ++ ILVR_B4_SW(zero, d4, zero, d5, zero, d6, zero, d7, ++ c4, c5, c6, c7); ++ /* Right part */ ++ ILVR_H4_SW(zero, c0, zero, c1, zero, c2, zero, c3, ++ e0, e1, e2, e3); ++ ILVR_H4_SW(zero, c4, zero, c5, zero, c6, zero, c7, ++ e4, e5, e6, e7); ++ e0 += dc; ++ e1 += dc; ++ e2 += dc; ++ e3 += dc; ++ e4 += dc; ++ e5 += dc; ++ e6 += dc; ++ e7 += dc; ++ CLIP_SW8_0_255(e0, e1, e2, e3, e4, e5, e6, e7); ++ ++ /* Left part */ ++ ILVL_H4_SW(zero, c0, zero, c1, zero, c2, zero, c3, ++ r0, r1, r2, r3); ++ ILVL_H4_SW(zero, c4, zero, c5, zero, c6, zero, c7, ++ r4, r5, r6, r7); ++ r0 += dc; ++ r1 += dc; ++ r2 += dc; ++ r3 += dc; ++ r4 += dc; ++ r5 += dc; ++ r6 += dc; ++ r7 += dc; ++ CLIP_SW8_0_255(r0, r1, r2, r3, r4, r5, r6, r7); ++ VSHF_B2_SB(e0, r0, e1, r1, mask, mask, d0, d1); ++ VSHF_B2_SB(e2, r2, e3, r3, mask, mask, d2, d3); ++ VSHF_B2_SB(e4, r4, e5, r5, mask, mask, d4, d5); ++ VSHF_B2_SB(e6, r6, e7, r7, mask, mask, d6, d7); ++ ++ /* Final sequence of operations over-write original dst */ ++ ST_D1(d0, 0, dest); ++ ST_D1(d1, 0, dest + line_size); ++ ST_D1(d2, 0, dest + 2 * line_size); ++ ST_D1(d3, 0, dest + 3 * line_size); ++ ST_D1(d4, 0, dest + 4 * line_size); ++ ST_D1(d5, 0, dest + 5 * line_size); ++ ST_D1(d6, 0, dest + 6 * line_size); ++ ST_D1(d7, 0, dest + 7 * line_size); ++ ++ block[0] = 0; ++} ++ ++void ff_vp3_v_loop_filter_msa(uint8_t *first_pixel, ptrdiff_t stride, ++ int *bounding_values) ++{ ++ int nstride = -stride; ++ v4i32 e0, e1, f0, f1, g0, g1; ++ v16i8 zero = {0}; ++ v16i8 d0, d1, d2, d3; ++ v8i16 c0, c1, c2, c3; ++ v8i16 r0; ++ v8i16 cnst3h = {3, 3, 3, 3, 3, 3, 3, 3}, ++ cnst4h = {4, 4, 4, 4, 4, 4, 4, 4}; ++ v16i8 mask = {0, 4, 8, 12, 16, 20, 24, 28, 0, 0, 0, 0, 0, 0, 0, 0}; ++ int16_t temp_16[8]; ++ int temp_32[8]; ++ ++ LD_SB4(first_pixel + nstride * 2, stride, d0, d1, d2, d3); ++ ILVR_B4_SH(zero, d0, zero, d1, zero, d2, zero, d3, ++ c0, c1, c2, c3); ++ r0 = (c0 - c3) + (c2 - c1) * cnst3h; ++ r0 += cnst4h; ++ r0 = r0 >> 3; ++ /* Get filter_value from bounding_values one by one */ ++ ST_SH(r0, temp_16); ++ for (int i = 0; i < 8; i++) ++ temp_32[i] = bounding_values[temp_16[i]]; ++ LD_SW2(temp_32, 4, e0, e1); ++ ILVR_H2_SW(zero, c1, zero, c2, f0, g0); ++ ILVL_H2_SW(zero, c1, zero, c2, f1, g1); ++ f0 += e0; ++ f1 += e1; ++ g0 -= e0; ++ g1 -= e1; ++ CLIP_SW4_0_255(f0, f1, g0, g1); ++ VSHF_B2_SB(f0, f1, g0, g1, mask, mask, d1, d2); ++ ++ /* Final move to first_pixel */ ++ ST_D1(d1, 0, first_pixel + nstride); ++ ST_D1(d2, 0, first_pixel); ++} ++ ++void ff_vp3_h_loop_filter_msa(uint8_t *first_pixel, ptrdiff_t stride, ++ int *bounding_values) ++{ ++ v16i8 d0, d1, d2, d3, d4, d5, d6, d7; ++ v8i16 c0, c1, c2, c3, c4, c5, c6, c7; ++ v8i16 r0; ++ v4i32 e0, e1, f0, f1, g0, g1; ++ v16i8 zero = {0}; ++ v8i16 cnst3h = {3, 3, 3, 3, 3, 3, 3, 3}, ++ cnst4h = {4, 4, 4, 4, 4, 4, 4, 4}; ++ v16i8 mask = {0, 16, 4, 20, 8, 24, 12, 28, 0, 0, 0, 0, 0, 0, 0, 0}; ++ int16_t temp_16[8]; ++ int temp_32[8]; ++ ++ LD_SB8(first_pixel - 2, stride, d0, d1, d2, d3, d4, d5, d6, d7); ++ ILVR_B4_SH(zero, d0, zero, d1, zero, d2, zero, d3, ++ c0, c1, c2, c3); ++ ILVR_B4_SH(zero, d4, zero, d5, zero, d6, zero, d7, ++ c4, c5, c6, c7); ++ TRANSPOSE8x8_SH_SH(c0, c1, c2, c3, c4, c5, c6, c7, ++ c0, c1, c2, c3, c4, c5, c6, c7); ++ r0 = (c0 - c3) + (c2 - c1) * cnst3h; ++ r0 += cnst4h; ++ r0 = r0 >> 3; ++ ++ /* Get filter_value from bounding_values one by one */ ++ ST_SH(r0, temp_16); ++ for (int i = 0; i < 8; i++) ++ temp_32[i] = bounding_values[temp_16[i]]; ++ LD_SW2(temp_32, 4, e0, e1); ++ ILVR_H2_SW(zero, c1, zero, c2, f0, g0); ++ ILVL_H2_SW(zero, c1, zero, c2, f1, g1); ++ f0 += e0; ++ f1 += e1; ++ g0 -= e0; ++ g1 -= e1; ++ CLIP_SW4_0_255(f0, f1, g0, g1); ++ VSHF_B2_SB(f0, g0, f1, g1, mask, mask, d1, d2); ++ /* Final move to first_pixel */ ++ ST_H4(d1, 0, 1, 2, 3, first_pixel - 1, stride); ++ ST_H4(d2, 0, 1, 2, 3, first_pixel - 1 + 4 * stride, stride); ++} ++ ++void ff_put_no_rnd_pixels_l2_msa(uint8_t *dst, const uint8_t *src1, ++ const uint8_t *src2, ptrdiff_t stride, int h) ++{ ++ if (h == 8) { ++ v16i8 d0, d1, d2, d3, d4, d5, d6, d7; ++ v16i8 c0, c1, c2, c3; ++ v4i32 a0, a1, a2, a3, b0, b1, b2, b3; ++ v4i32 e0, e1, e2; ++ v4i32 f0, f1, f2; ++ v4u32 t0, t1, t2, t3; ++ v16i8 mask = {0, 1, 2, 3, 16, 17, 18, 19, 4, 5, 6, 7, 20, 21, 22, 23}; ++ int32_t value = 0xfefefefe; ++ v4i32 fmask = {value, value, value, value}; ++ ++ LD_SB8(src1, stride, d0, d1, d2, d3, d4, d5, d6, d7); ++ VSHF_B2_SB(d0, d1, d2, d3, mask, mask, c0, c1); ++ VSHF_B2_SB(d4, d5, d6, d7, mask, mask, c2, c3); ++ a0 = (v4i32) __msa_pckev_d((v2i64)c1, (v2i64)c0); ++ a2 = (v4i32) __msa_pckod_d((v2i64)c1, (v2i64)c0); ++ a1 = (v4i32) __msa_pckev_d((v2i64)c3, (v2i64)c2); ++ a3 = (v4i32) __msa_pckod_d((v2i64)c3, (v2i64)c2); ++ ++ LD_SB8(src2, stride, d0, d1, d2, d3, d4, d5, d6, d7); ++ VSHF_B2_SB(d0, d1, d2, d3, mask, mask, c0, c1); ++ VSHF_B2_SB(d4, d5, d6, d7, mask, mask, c2, c3); ++ b0 = (v4i32) __msa_pckev_d((v2i64)c1, (v2i64)c0); ++ b2 = (v4i32) __msa_pckod_d((v2i64)c1, (v2i64)c0); ++ b1 = (v4i32) __msa_pckev_d((v2i64)c3, (v2i64)c2); ++ b3 = (v4i32) __msa_pckod_d((v2i64)c3, (v2i64)c2); ++ ++ e0 = (v4i32) __msa_xor_v((v16u8)a0, (v16u8)b0); ++ e0 = (v4i32) __msa_and_v((v16u8)e0, (v16u8)fmask); ++ t0 = ((v4u32)e0) >> 1; ++ e2 = (v4i32) __msa_and_v((v16u8)a0, (v16u8)b0); ++ t0 = t0 + (v4u32)e2; ++ ++ e1 = (v4i32) __msa_xor_v((v16u8)a1, (v16u8)b1); ++ e1 = (v4i32) __msa_and_v((v16u8)e1, (v16u8)fmask); ++ t1 = ((v4u32)e1) >> 1; ++ e2 = (v4i32) __msa_and_v((v16u8)a1, (v16u8)b1); ++ t1 = t1 + (v4u32)e2; ++ ++ f0 = (v4i32) __msa_xor_v((v16u8)a2, (v16u8)b2); ++ f0 = (v4i32) __msa_and_v((v16u8)f0, (v16u8)fmask); ++ t2 = ((v4u32)f0) >> 1; ++ f2 = (v4i32) __msa_and_v((v16u8)a2, (v16u8)b2); ++ t2 = t2 + (v4u32)f2; ++ ++ f1 = (v4i32) __msa_xor_v((v16u8)a3, (v16u8)b3); ++ f1 = (v4i32) __msa_and_v((v16u8)f1, (v16u8)fmask); ++ t3 = ((v4u32)f1) >> 1; ++ f2 = (v4i32) __msa_and_v((v16u8)a3, (v16u8)b3); ++ t3 = t3 + (v4u32)f2; ++ ++ ST_W8(t0, t1, 0, 1, 2, 3, 0, 1, 2, 3, dst, stride); ++ ST_W8(t2, t3, 0, 1, 2, 3, 0, 1, 2, 3, dst + 4, stride); ++ } else { ++ int i; ++ ++ for (i = 0; i < h; i++) { ++ uint32_t a, b; ++ ++ a = AV_RN32(&src1[i * stride]); ++ b = AV_RN32(&src2[i * stride]); ++ AV_WN32A(&dst[i * stride], no_rnd_avg32(a, b)); ++ a = AV_RN32(&src1[i * stride + 4]); ++ b = AV_RN32(&src2[i * stride + 4]); ++ AV_WN32A(&dst[i * stride + 4], no_rnd_avg32(a, b)); ++ } ++ } ++} +diff --git a/libavcodec/mips/vp3dsp_init_mips.c b/libavcodec/mips/vp3dsp_init_mips.c +new file mode 100644 +index 0000000..4252ff7 +--- /dev/null ++++ b/libavcodec/mips/vp3dsp_init_mips.c +@@ -0,0 +1,50 @@ ++ ++/* ++ * Copyright (c) 2018 gxw ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/mips/cpu.h" ++#include "config.h" ++#include "libavutil/attributes.h" ++#include "libavcodec/avcodec.h" ++#include "libavcodec/vp3dsp.h" ++#include "vp3dsp_mips.h" ++ ++av_cold void ff_vp3dsp_init_mips(VP3DSPContext *c, int flags) ++{ ++ int cpu_flags = av_get_cpu_flags(); ++ ++ if (have_mmi(cpu_flags)) { ++ c->put_no_rnd_pixels_l2 = ff_put_no_rnd_pixels_l2_mmi; ++ ++ c->idct_add = ff_vp3_idct_add_mmi; ++ c->idct_put = ff_vp3_idct_put_mmi; ++ c->idct_dc_add = ff_vp3_idct_dc_add_mmi; ++ } ++ ++ if (have_msa(cpu_flags)) { ++ c->put_no_rnd_pixels_l2 = ff_put_no_rnd_pixels_l2_msa; ++ ++ c->idct_add = ff_vp3_idct_add_msa; ++ c->idct_put = ff_vp3_idct_put_msa; ++ c->idct_dc_add = ff_vp3_idct_dc_add_msa; ++ c->v_loop_filter = ff_vp3_v_loop_filter_msa; ++ c->h_loop_filter = ff_vp3_h_loop_filter_msa; ++ } ++} +diff --git a/libavcodec/mips/vp3dsp_mips.h b/libavcodec/mips/vp3dsp_mips.h +new file mode 100644 +index 0000000..4685a82 +--- /dev/null ++++ b/libavcodec/mips/vp3dsp_mips.h +@@ -0,0 +1,43 @@ ++/* ++ * Copyright (c) 2018 gxw ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef AVCODEC_MIPS_VP3DSP_MIPS_H ++#define AVCODEC_MIPS_VP3DSP_MIPS_H ++ ++#include "libavcodec/vp3dsp.h" ++#include ++ ++void ff_vp3_idct_add_msa(uint8_t *dest, ptrdiff_t line_size, int16_t *block); ++void ff_vp3_idct_put_msa(uint8_t *dest, ptrdiff_t line_size, int16_t *block); ++void ff_vp3_idct_dc_add_msa(uint8_t *dest, ptrdiff_t line_size, int16_t *block); ++void ff_vp3_v_loop_filter_msa(uint8_t *first_pixel, ptrdiff_t stride, ++ int *bounding_values); ++void ff_put_no_rnd_pixels_l2_msa(uint8_t *dst, const uint8_t *src1, ++ const uint8_t *src2, ptrdiff_t stride, int h); ++void ff_vp3_h_loop_filter_msa(uint8_t *first_pixel, ptrdiff_t stride, ++ int *bounding_values); ++ ++void ff_vp3_idct_add_mmi(uint8_t *dest, ptrdiff_t line_size, int16_t *block); ++void ff_vp3_idct_put_mmi(uint8_t *dest, ptrdiff_t line_size, int16_t *block); ++void ff_vp3_idct_dc_add_mmi(uint8_t *dest, ptrdiff_t line_size, int16_t *block); ++void ff_put_no_rnd_pixels_l2_mmi(uint8_t *dst, const uint8_t *src1, ++ const uint8_t *src2, ptrdiff_t stride, int h); ++ ++#endif /* #ifndef AVCODEC_MIPS_VP3DSP_MIPS_H */ +diff --git a/libavcodec/mips/vp8_idct_msa.c b/libavcodec/mips/vp8_idct_msa.c +index 11ac9ff..ce37ca1 100644 +--- a/libavcodec/mips/vp8_idct_msa.c ++++ b/libavcodec/mips/vp8_idct_msa.c +@@ -71,12 +71,10 @@ void ff_vp8_idct_add_msa(uint8_t *dst, int16_t input[16], ptrdiff_t stride) + ILVR_H4_SW(zero, res0, zero, res1, zero, res2, zero, res3, + res0, res1, res2, res3); + ADD4(res0, vt0, res1, vt1, res2, vt2, res3, vt3, res0, res1, res2, res3); +- res0 = CLIP_SW_0_255(res0); +- res1 = CLIP_SW_0_255(res1); +- res2 = CLIP_SW_0_255(res2); +- res3 = CLIP_SW_0_255(res3); ++ CLIP_SW4_0_255(res0, res1, res2, res3); + VSHF_B2_SB(res0, res1, res2, res3, mask, mask, dest0, dest1); +- ST4x4_UB(dest0, dest1, 0, 1, 0, 1, dst, stride); ++ ST_W2(dest0, 0, 1, dst, stride); ++ ST_W2(dest1, 0, 1, dst + 2 * stride, stride); + + memset(input, 0, 4 * 4 * sizeof(*input)); + } +@@ -97,7 +95,8 @@ void ff_vp8_idct_dc_add_msa(uint8_t *dst, int16_t in_dc[16], ptrdiff_t stride) + ADD4(res0, vec, res1, vec, res2, vec, res3, vec, res0, res1, res2, res3); + CLIP_SH4_0_255(res0, res1, res2, res3); + VSHF_B2_SB(res0, res1, res2, res3, mask, mask, dest0, dest1); +- ST4x4_UB(dest0, dest1, 0, 1, 0, 1, dst, stride); ++ ST_W2(dest0, 0, 1, dst, stride); ++ ST_W2(dest1, 0, 1, dst + 2 * stride, stride); + + in_dc[0] = 0; + } +diff --git a/libavcodec/mips/vp8_lpf_msa.c b/libavcodec/mips/vp8_lpf_msa.c +index 3590961..1b51334 100644 +--- a/libavcodec/mips/vp8_lpf_msa.c ++++ b/libavcodec/mips/vp8_lpf_msa.c +@@ -540,14 +540,8 @@ void ff_vp8_h_loop_filter_simple_msa(uint8_t *src, ptrdiff_t pitch, + ILVRL_B2_SH(q0, p0, tmp1, tmp0); + + src -= 1; +- ST2x4_UB(tmp1, 0, src, pitch); +- src += 4 * pitch; +- ST2x4_UB(tmp1, 4, src, pitch); +- src += 4 * pitch; +- ST2x4_UB(tmp0, 0, src, pitch); +- src += 4 * pitch; +- ST2x4_UB(tmp0, 4, src, pitch); +- src += 4 * pitch; ++ ST_H8(tmp1, 0, 1, 2, 3, 4, 5, 6, 7, src, pitch) ++ ST_H8(tmp0, 0, 1, 2, 3, 4, 5, 6, 7, src + 8 * pitch, pitch) + } + + void ff_vp8_v_loop_filter8uv_inner_msa(uint8_t *src_u, uint8_t *src_v, +@@ -596,7 +590,6 @@ void ff_vp8_h_loop_filter8uv_inner_msa(uint8_t *src_u, uint8_t *src_v, + ptrdiff_t pitch, int b_limit_in, + int limit_in, int thresh_in) + { +- uint8_t *temp_src_u, *temp_src_v; + v16u8 p3, p2, p1, p0, q3, q2, q1, q0; + v16u8 mask, hev, flat, thresh, limit, b_limit; + v16u8 row0, row1, row2, row3, row4, row5, row6, row7, row8; +@@ -623,15 +616,8 @@ void ff_vp8_h_loop_filter8uv_inner_msa(uint8_t *src_u, uint8_t *src_v, + tmp1 = (v4i32) __msa_ilvl_b((v16i8) q1, (v16i8) q0); + ILVRL_H2_SW(tmp1, tmp0, tmp4, tmp5); + +- temp_src_u = src_u - 2; +- ST4x4_UB(tmp2, tmp2, 0, 1, 2, 3, temp_src_u, pitch); +- temp_src_u += 4 * pitch; +- ST4x4_UB(tmp3, tmp3, 0, 1, 2, 3, temp_src_u, pitch); +- +- temp_src_v = src_v - 2; +- ST4x4_UB(tmp4, tmp4, 0, 1, 2, 3, temp_src_v, pitch); +- temp_src_v += 4 * pitch; +- ST4x4_UB(tmp5, tmp5, 0, 1, 2, 3, temp_src_v, pitch); ++ ST_W8(tmp2, tmp3, 0, 1, 2, 3, 0, 1, 2, 3, src_u - 2, pitch); ++ ST_W8(tmp4, tmp5, 0, 1, 2, 3, 0, 1, 2, 3, src_v - 2, pitch); + } + + void ff_vp8_v_loop_filter16_inner_msa(uint8_t *src, ptrdiff_t pitch, +@@ -684,7 +670,6 @@ void ff_vp8_h_loop_filter16_inner_msa(uint8_t *src, ptrdiff_t pitch, + ILVRL_H2_SH(tmp1, tmp0, tmp4, tmp5); + + src -= 2; +- ST4x8_UB(tmp2, tmp3, src, pitch); +- src += (8 * pitch); +- ST4x8_UB(tmp4, tmp5, src, pitch); ++ ST_W8(tmp2, tmp3, 0, 1, 2, 3, 0, 1, 2, 3, src, pitch) ++ ST_W8(tmp4, tmp5, 0, 1, 2, 3, 0, 1, 2, 3, src + 8 * pitch, pitch) + } +diff --git a/libavcodec/mips/vp8_mc_msa.c b/libavcodec/mips/vp8_mc_msa.c +index 2bf0abd..a613206 100644 +--- a/libavcodec/mips/vp8_mc_msa.c ++++ b/libavcodec/mips/vp8_mc_msa.c +@@ -181,7 +181,7 @@ static void common_hz_6t_4x4_msa(uint8_t *src, int32_t src_stride, + SRARI_H2_SH(out0, out1, 7); + SAT_SH2_SH(out0, out1, 7); + out = PCKEV_XORI128_UB(out0, out1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + } + + static void common_hz_6t_4x8_msa(uint8_t *src, int32_t src_stride, +@@ -214,10 +214,9 @@ static void common_hz_6t_4x8_msa(uint8_t *src, int32_t src_stride, + SRARI_H4_SH(out0, out1, out2, out3, 7); + SAT_SH4_SH(out0, out1, out2, out3, 7); + out = PCKEV_XORI128_UB(out0, out1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + out = PCKEV_XORI128_UB(out2, out3); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst + 4 * dst_stride, dst_stride); + } + + void ff_put_vp8_epel4_h6_msa(uint8_t *dst, ptrdiff_t dst_stride, +@@ -263,7 +262,7 @@ void ff_put_vp8_epel8_h6_msa(uint8_t *dst, ptrdiff_t dst_stride, + SAT_SH4_SH(out0, out1, out2, out3, 7); + tmp0 = PCKEV_XORI128_UB(out0, out1); + tmp1 = PCKEV_XORI128_UB(out2, out3); +- ST8x4_UB(tmp0, tmp1, dst, dst_stride); ++ ST_D4(tmp0, tmp1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + + for (loop_cnt = (height >> 2) - 1; loop_cnt--;) { +@@ -276,7 +275,7 @@ void ff_put_vp8_epel8_h6_msa(uint8_t *dst, ptrdiff_t dst_stride, + SAT_SH4_SH(out0, out1, out2, out3, 7); + tmp0 = PCKEV_XORI128_UB(out0, out1); + tmp1 = PCKEV_XORI128_UB(out2, out3); +- ST8x4_UB(tmp0, tmp1, dst, dst_stride); ++ ST_D4(tmp0, tmp1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -368,7 +367,7 @@ void ff_put_vp8_epel4_v6_msa(uint8_t *dst, ptrdiff_t dst_stride, + SRARI_H2_SH(out10, out32, 7); + SAT_SH2_SH(out10, out32, 7); + out = PCKEV_XORI128_UB(out10, out32); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + + src2110 = src6554; +@@ -416,7 +415,7 @@ void ff_put_vp8_epel8_v6_msa(uint8_t *dst, ptrdiff_t dst_stride, + SAT_SH4_SH(out0_r, out1_r, out2_r, out3_r, 7); + tmp0 = PCKEV_XORI128_UB(out0_r, out1_r); + tmp1 = PCKEV_XORI128_UB(out2_r, out3_r); +- ST8x4_UB(tmp0, tmp1, dst, dst_stride); ++ ST_D4(tmp0, tmp1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + + src10_r = src76_r; +@@ -567,7 +566,7 @@ void ff_put_vp8_epel4_h6v6_msa(uint8_t *dst, ptrdiff_t dst_stride, + SRARI_H2_SH(tmp0, tmp1, 7); + SAT_SH2_SH(tmp0, tmp1, 7); + out = PCKEV_XORI128_UB(tmp0, tmp1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + + hz_out3 = hz_out7; +@@ -651,7 +650,7 @@ void ff_put_vp8_epel8_h6v6_msa(uint8_t *dst, ptrdiff_t dst_stride, + SAT_SH4_SH(tmp0, tmp1, tmp2, tmp3, 7); + vec0 = PCKEV_XORI128_UB(tmp0, tmp1); + vec1 = PCKEV_XORI128_UB(tmp2, tmp3); +- ST8x4_UB(vec0, vec1, dst, dst_stride); ++ ST_D4(vec0, vec1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + + hz_out4 = hz_out8; +@@ -702,7 +701,7 @@ static void common_hz_4t_4x4_msa(uint8_t *src, int32_t src_stride, + SRARI_H2_SH(out0, out1, 7); + SAT_SH2_SH(out0, out1, 7); + out = PCKEV_XORI128_UB(out0, out1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + } + + static void common_hz_4t_4x8_msa(uint8_t *src, int32_t src_stride, +@@ -735,10 +734,9 @@ static void common_hz_4t_4x8_msa(uint8_t *src, int32_t src_stride, + SRARI_H4_SH(out0, out1, out2, out3, 7); + SAT_SH4_SH(out0, out1, out2, out3, 7); + out = PCKEV_XORI128_UB(out0, out1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + out = PCKEV_XORI128_UB(out2, out3); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst + 4 * dst_stride, dst_stride); + } + + static void common_hz_4t_4x16_msa(uint8_t *src, int32_t src_stride, +@@ -769,10 +767,10 @@ static void common_hz_4t_4x16_msa(uint8_t *src, int32_t src_stride, + SRARI_H4_SH(out0, out1, out2, out3, 7); + SAT_SH4_SH(out0, out1, out2, out3, 7); + out = PCKEV_XORI128_UB(out0, out1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + out = PCKEV_XORI128_UB(out2, out3); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + + LD_SB8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); +@@ -785,10 +783,10 @@ static void common_hz_4t_4x16_msa(uint8_t *src, int32_t src_stride, + SRARI_H4_SH(out0, out1, out2, out3, 7); + SAT_SH4_SH(out0, out1, out2, out3, 7); + out = PCKEV_XORI128_UB(out0, out1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + out = PCKEV_XORI128_UB(out2, out3); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + } + + void ff_put_vp8_epel4_h4_msa(uint8_t *dst, ptrdiff_t dst_stride, +@@ -836,7 +834,7 @@ void ff_put_vp8_epel8_h4_msa(uint8_t *dst, ptrdiff_t dst_stride, + SAT_SH4_SH(out0, out1, out2, out3, 7); + tmp0 = PCKEV_XORI128_UB(out0, out1); + tmp1 = PCKEV_XORI128_UB(out2, out3); +- ST8x4_UB(tmp0, tmp1, dst, dst_stride); ++ ST_D4(tmp0, tmp1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -932,7 +930,7 @@ void ff_put_vp8_epel4_v4_msa(uint8_t *dst, ptrdiff_t dst_stride, + SRARI_H2_SH(out10, out32, 7); + SAT_SH2_SH(out10, out32, 7); + out = PCKEV_XORI128_UB(out10, out32); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -974,7 +972,7 @@ void ff_put_vp8_epel8_v4_msa(uint8_t *dst, ptrdiff_t dst_stride, + SAT_SH4_SH(out0_r, out1_r, out2_r, out3_r, 7); + tmp0 = PCKEV_XORI128_UB(out0_r, out1_r); + tmp1 = PCKEV_XORI128_UB(out2_r, out3_r); +- ST8x4_UB(tmp0, tmp1, dst, dst_stride); ++ ST_D4(tmp0, tmp1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + + src10_r = src98_r; +@@ -1093,7 +1091,7 @@ void ff_put_vp8_epel4_h4v4_msa(uint8_t *dst, ptrdiff_t dst_stride, + SRARI_H2_SH(tmp0, tmp1, 7); + SAT_SH2_SH(tmp0, tmp1, 7); + out = PCKEV_XORI128_UB(tmp0, tmp1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + + hz_out1 = hz_out5; +@@ -1160,7 +1158,7 @@ void ff_put_vp8_epel8_h4v4_msa(uint8_t *dst, ptrdiff_t dst_stride, + SAT_SH4_SH(tmp0, tmp1, tmp2, tmp3, 7); + out0 = PCKEV_XORI128_UB(tmp0, tmp1); + out1 = PCKEV_XORI128_UB(tmp2, tmp3); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + + vec0 = vec4; +@@ -1240,7 +1238,8 @@ void ff_put_vp8_epel4_h6v4_msa(uint8_t *dst, ptrdiff_t dst_stride, + SAT_SH2_SH(tmp0, tmp1, 7); + PCKEV_B2_UB(tmp0, tmp0, tmp1, tmp1, res0, res1); + XORI_B2_128_UB(res0, res1); +- ST4x4_UB(res0, res1, 0, 1, 0, 1, dst, dst_stride); ++ ST_W2(res0, 0, 1, dst, dst_stride); ++ ST_W2(res1, 0, 1, dst + 2 * dst_stride, dst_stride); + dst += (4 * dst_stride); + + hz_out1 = hz_out5; +@@ -1316,7 +1315,7 @@ void ff_put_vp8_epel8_h6v4_msa(uint8_t *dst, ptrdiff_t dst_stride, + SAT_SH4_SH(tmp0, tmp1, tmp2, tmp3, 7); + out0 = PCKEV_XORI128_UB(tmp0, tmp1); + out1 = PCKEV_XORI128_UB(tmp2, tmp3); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -1391,7 +1390,7 @@ void ff_put_vp8_epel4_h4v6_msa(uint8_t *dst, ptrdiff_t dst_stride, + SRARI_H2_SH(tmp0, tmp1, 7); + SAT_SH2_SH(tmp0, tmp1, 7); + out = PCKEV_XORI128_UB(tmp0, tmp1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + + hz_out3 = hz_out7; +@@ -1464,7 +1463,7 @@ void ff_put_vp8_epel8_h4v6_msa(uint8_t *dst, ptrdiff_t dst_stride, + SAT_SH4_SH(tmp0, tmp1, tmp2, tmp3, 7); + vec0 = PCKEV_XORI128_UB(tmp0, tmp1); + vec1 = PCKEV_XORI128_UB(tmp2, tmp3); +- ST8x4_UB(vec0, vec1, dst, dst_stride); ++ ST_D4(vec0, vec1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + + hz_out4 = hz_out8; +@@ -1509,7 +1508,8 @@ static void common_hz_2t_4x4_msa(uint8_t *src, int32_t src_stride, + DOTP_UB2_UH(vec0, vec1, filt0, filt0, vec2, vec3); + SRARI_H2_UH(vec2, vec3, 7); + PCKEV_B2_UB(vec2, vec2, vec3, vec3, res0, res1); +- ST4x4_UB(res0, res1, 0, 1, 0, 1, dst, dst_stride); ++ ST_W2(res0, 0, 1, dst, dst_stride); ++ ST_W2(res1, 0, 1, dst + 2 * dst_stride, dst_stride); + } + + static void common_hz_2t_4x8_msa(uint8_t *src, int32_t src_stride, +@@ -1535,9 +1535,10 @@ static void common_hz_2t_4x8_msa(uint8_t *src, int32_t src_stride, + SRARI_H4_UH(vec4, vec5, vec6, vec7, 7); + PCKEV_B4_SB(vec4, vec4, vec5, vec5, vec6, vec6, vec7, vec7, + res0, res1, res2, res3); +- ST4x4_UB(res0, res1, 0, 1, 0, 1, dst, dst_stride); +- dst += (4 * dst_stride); +- ST4x4_UB(res2, res3, 0, 1, 0, 1, dst, dst_stride); ++ ST_W2(res0, 0, 1, dst, dst_stride); ++ ST_W2(res1, 0, 1, dst + 2 * dst_stride, dst_stride); ++ ST_W2(res2, 0, 1, dst + 4 * dst_stride, dst_stride); ++ ST_W2(res3, 0, 1, dst + 6 * dst_stride, dst_stride); + } + + void ff_put_vp8_bilinear4_h_msa(uint8_t *dst, ptrdiff_t dst_stride, +@@ -1574,7 +1575,7 @@ static void common_hz_2t_8x4_msa(uint8_t *src, int32_t src_stride, + vec0, vec1, vec2, vec3); + SRARI_H4_UH(vec0, vec1, vec2, vec3, 7); + PCKEV_B2_SB(vec1, vec0, vec3, vec2, src0, src1); +- ST8x4_UB(src0, src1, dst, dst_stride); ++ ST_D4(src0, src1, 0, 1, 0, 1, dst, dst_stride); + } + + static void common_hz_2t_8x8mult_msa(uint8_t *src, int32_t src_stride, +@@ -1604,8 +1605,7 @@ static void common_hz_2t_8x8mult_msa(uint8_t *src, int32_t src_stride, + src += (4 * src_stride); + + PCKEV_B2_SB(vec1, vec0, vec3, vec2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + + VSHF_B2_UH(src0, src0, src1, src1, mask, mask, vec0, vec1); + VSHF_B2_UH(src2, src2, src3, src3, mask, mask, vec2, vec3); +@@ -1613,8 +1613,8 @@ static void common_hz_2t_8x8mult_msa(uint8_t *src, int32_t src_stride, + vec0, vec1, vec2, vec3); + SRARI_H4_UH(vec0, vec1, vec2, vec3, 7); + PCKEV_B2_SB(vec1, vec0, vec3, vec2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst + 4 * dst_stride, dst_stride); ++ dst += (8 * dst_stride); + + if (16 == height) { + LD_SB4(src, src_stride, src0, src1, src2, src3); +@@ -1629,7 +1629,7 @@ static void common_hz_2t_8x8mult_msa(uint8_t *src, int32_t src_stride, + src += (4 * src_stride); + + PCKEV_B2_SB(vec1, vec0, vec3, vec2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + + VSHF_B2_UH(src0, src0, src1, src1, mask, mask, vec0, vec1); + VSHF_B2_UH(src2, src2, src3, src3, mask, mask, vec2, vec3); +@@ -1637,7 +1637,7 @@ static void common_hz_2t_8x8mult_msa(uint8_t *src, int32_t src_stride, + vec0, vec1, vec2, vec3); + SRARI_H4_UH(vec0, vec1, vec2, vec3, 7); + PCKEV_B2_SB(vec1, vec0, vec3, vec2, out0, out1); +- ST8x4_UB(out0, out1, dst + 4 * dst_stride, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst + 4 * dst_stride, dst_stride); + } + } + +@@ -1745,7 +1745,7 @@ static void common_vt_2t_4x4_msa(uint8_t *src, int32_t src_stride, + SRARI_H2_UH(tmp0, tmp1, 7); + SAT_UH2_UH(tmp0, tmp1, 7); + src2110 = __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0); +- ST4x4_UB(src2110, src2110, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(src2110, 0, 1, 2, 3, dst, dst_stride); + } + + static void common_vt_2t_4x8_msa(uint8_t *src, int32_t src_stride, +@@ -1779,8 +1779,7 @@ static void common_vt_2t_4x8_msa(uint8_t *src, int32_t src_stride, + SRARI_H4_UH(tmp0, tmp1, tmp2, tmp3, 7); + SAT_UH4_UH(tmp0, tmp1, tmp2, tmp3, 7); + PCKEV_B2_SB(tmp1, tmp0, tmp3, tmp2, src2110, src4332); +- ST4x4_UB(src2110, src2110, 0, 1, 2, 3, dst, dst_stride); +- ST4x4_UB(src4332, src4332, 0, 1, 2, 3, dst + 4 * dst_stride, dst_stride); ++ ST_W8(src2110, src4332, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + } + + void ff_put_vp8_bilinear4_v_msa(uint8_t *dst, ptrdiff_t dst_stride, +@@ -1817,7 +1816,7 @@ static void common_vt_2t_8x4_msa(uint8_t *src, int32_t src_stride, + SRARI_H4_UH(tmp0, tmp1, tmp2, tmp3, 7); + SAT_UH4_UH(tmp0, tmp1, tmp2, tmp3, 7); + PCKEV_B2_SB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + } + + static void common_vt_2t_8x8mult_msa(uint8_t *src, int32_t src_stride, +@@ -1851,16 +1850,15 @@ static void common_vt_2t_8x8mult_msa(uint8_t *src, int32_t src_stride, + SRARI_H4_UH(tmp0, tmp1, tmp2, tmp3, 7); + SAT_UH4_UH(tmp0, tmp1, tmp2, tmp3, 7); + PCKEV_B2_SB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + + DOTP_UB4_UH(vec4, vec5, vec6, vec7, filt0, filt0, filt0, filt0, + tmp0, tmp1, tmp2, tmp3); + SRARI_H4_UH(tmp0, tmp1, tmp2, tmp3, 7); + SAT_UH4_UH(tmp0, tmp1, tmp2, tmp3, 7); + PCKEV_B2_SB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst + 4 * dst_stride, dst_stride); ++ dst += (8 * dst_stride); + + src0 = src8; + } +@@ -1964,7 +1962,8 @@ static void common_hv_2ht_2vt_4x4_msa(uint8_t *src, int32_t src_stride, + SRARI_H2_UH(tmp0, tmp1, 7); + SAT_UH2_UH(tmp0, tmp1, 7); + PCKEV_B2_UB(tmp0, tmp0, tmp1, tmp1, res0, res1); +- ST4x4_UB(res0, res1, 0, 1, 0, 1, dst, dst_stride); ++ ST_W2(res0, 0, 1, dst, dst_stride); ++ ST_W2(res1, 0, 1, dst + 2 * dst_stride, dst_stride); + } + + static void common_hv_2ht_2vt_4x8_msa(uint8_t *src, int32_t src_stride, +@@ -1996,8 +1995,8 @@ static void common_hv_2ht_2vt_4x8_msa(uint8_t *src, int32_t src_stride, + hz_out4 = HORIZ_2TAP_FILT_UH(src4, src5, mask, filt_hz, 7); + hz_out6 = HORIZ_2TAP_FILT_UH(src6, src7, mask, filt_hz, 7); + hz_out8 = HORIZ_2TAP_FILT_UH(src8, src8, mask, filt_hz, 7); +- SLDI_B3_UH(hz_out2, hz_out4, hz_out6, hz_out0, hz_out2, hz_out4, hz_out1, +- hz_out3, hz_out5, 8); ++ SLDI_B3_UH(hz_out2, hz_out0, hz_out4, hz_out2, hz_out6, hz_out4, 8, hz_out1, ++ hz_out3, hz_out5); + hz_out7 = (v8u16) __msa_pckod_d((v2i64) hz_out8, (v2i64) hz_out6); + + ILVEV_B2_UB(hz_out0, hz_out1, hz_out2, hz_out3, vec0, vec1); +@@ -2008,9 +2007,10 @@ static void common_hv_2ht_2vt_4x8_msa(uint8_t *src, int32_t src_stride, + SAT_UH4_UH(vec4, vec5, vec6, vec7, 7); + PCKEV_B4_SB(vec4, vec4, vec5, vec5, vec6, vec6, vec7, vec7, + res0, res1, res2, res3); +- ST4x4_UB(res0, res1, 0, 1, 0, 1, dst, dst_stride); +- dst += (4 * dst_stride); +- ST4x4_UB(res2, res3, 0, 1, 0, 1, dst, dst_stride); ++ ST_W2(res0, 0, 1, dst, dst_stride); ++ ST_W2(res1, 0, 1, dst + 2 * dst_stride, dst_stride); ++ ST_W2(res2, 0, 1, dst + 4 * dst_stride, dst_stride); ++ ST_W2(res3, 0, 1, dst + 6 * dst_stride, dst_stride); + } + + void ff_put_vp8_bilinear4_hv_msa(uint8_t *dst, ptrdiff_t dst_stride, +@@ -2070,7 +2070,7 @@ static void common_hv_2ht_2vt_8x4_msa(uint8_t *src, int32_t src_stride, + SRARI_H4_UH(tmp0, tmp1, tmp2, tmp3, 7); + SAT_UH4_UH(tmp0, tmp1, tmp2, tmp3, 7); + PCKEV_B2_SB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + } + + static void common_hv_2ht_2vt_8x8mult_msa(uint8_t *src, int32_t src_stride, +@@ -2127,8 +2127,7 @@ static void common_hv_2ht_2vt_8x8mult_msa(uint8_t *src, int32_t src_stride, + SRARI_H2_UH(tmp3, tmp4, 7); + SAT_UH2_UH(tmp3, tmp4, 7); + PCKEV_B2_SB(tmp2, tmp1, tmp4, tmp3, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + + hz_out1 = HORIZ_2TAP_FILT_UH(src1, src1, mask, filt_hz, 7); + vec0 = (v16u8) __msa_ilvev_b((v16i8) hz_out1, (v16i8) hz_out0); +@@ -2149,8 +2148,8 @@ static void common_hv_2ht_2vt_8x8mult_msa(uint8_t *src, int32_t src_stride, + SRARI_H4_UH(tmp5, tmp6, tmp7, tmp8, 7); + SAT_UH4_UH(tmp5, tmp6, tmp7, tmp8, 7); + PCKEV_B2_SB(tmp6, tmp5, tmp8, tmp7, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst + 4 * dst_stride, dst_stride); ++ dst += (8 * dst_stride); + } + } + +diff --git a/libavcodec/mips/vp8dsp_init_mips.c b/libavcodec/mips/vp8dsp_init_mips.c +index 3fc5f8e..92d8c79 100644 +--- a/libavcodec/mips/vp8dsp_init_mips.c ++++ b/libavcodec/mips/vp8dsp_init_mips.c +@@ -24,6 +24,7 @@ + * VP8 compatible video decoder + */ + ++#include "libavutil/mips/cpu.h" + #include "config.h" + #include "libavutil/attributes.h" + #include "libavcodec/vp8dsp.h" +@@ -71,132 +72,123 @@ + dsp->put_vp8_bilinear_pixels_tab[IDX][0][0] = \ + ff_put_vp8_pixels##SIZE##_msa; + +-#if HAVE_MSA +-static av_cold void vp8dsp_init_msa(VP8DSPContext *dsp) +-{ +- dsp->vp8_luma_dc_wht = ff_vp8_luma_dc_wht_msa; +- dsp->vp8_idct_add = ff_vp8_idct_add_msa; +- dsp->vp8_idct_dc_add = ff_vp8_idct_dc_add_msa; +- dsp->vp8_idct_dc_add4y = ff_vp8_idct_dc_add4y_msa; +- dsp->vp8_idct_dc_add4uv = ff_vp8_idct_dc_add4uv_msa; +- +- VP8_MC_MIPS_FUNC(0, 16); +- VP8_MC_MIPS_FUNC(1, 8); +- VP8_MC_MIPS_FUNC(2, 4); +- +- VP8_BILINEAR_MC_MIPS_FUNC(0, 16); +- VP8_BILINEAR_MC_MIPS_FUNC(1, 8); +- VP8_BILINEAR_MC_MIPS_FUNC(2, 4); +- +- VP8_MC_MIPS_COPY(0, 16); +- VP8_MC_MIPS_COPY(1, 8); +- +- dsp->vp8_v_loop_filter16y = ff_vp8_v_loop_filter16_msa; +- dsp->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16_msa; +- dsp->vp8_v_loop_filter8uv = ff_vp8_v_loop_filter8uv_msa; +- dsp->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_msa; +- +- dsp->vp8_v_loop_filter16y_inner = ff_vp8_v_loop_filter16_inner_msa; +- dsp->vp8_h_loop_filter16y_inner = ff_vp8_h_loop_filter16_inner_msa; +- dsp->vp8_v_loop_filter8uv_inner = ff_vp8_v_loop_filter8uv_inner_msa; +- dsp->vp8_h_loop_filter8uv_inner = ff_vp8_h_loop_filter8uv_inner_msa; +- +- dsp->vp8_v_loop_filter_simple = ff_vp8_v_loop_filter_simple_msa; +- dsp->vp8_h_loop_filter_simple = ff_vp8_h_loop_filter_simple_msa; +-} +-#endif // #if HAVE_MSA + +-#if HAVE_MMI +-static av_cold void vp8dsp_init_mmi(VP8DSPContext *dsp) +-{ +- dsp->vp8_luma_dc_wht = ff_vp8_luma_dc_wht_mmi; +- dsp->vp8_luma_dc_wht_dc = ff_vp8_luma_dc_wht_dc_mmi; +- dsp->vp8_idct_add = ff_vp8_idct_add_mmi; +- dsp->vp8_idct_dc_add = ff_vp8_idct_dc_add_mmi; +- dsp->vp8_idct_dc_add4y = ff_vp8_idct_dc_add4y_mmi; +- dsp->vp8_idct_dc_add4uv = ff_vp8_idct_dc_add4uv_mmi; +- +- dsp->put_vp8_epel_pixels_tab[0][0][1] = ff_put_vp8_epel16_h4_mmi; +- dsp->put_vp8_epel_pixels_tab[0][0][2] = ff_put_vp8_epel16_h6_mmi; +- dsp->put_vp8_epel_pixels_tab[0][1][0] = ff_put_vp8_epel16_v4_mmi; +- dsp->put_vp8_epel_pixels_tab[0][1][1] = ff_put_vp8_epel16_h4v4_mmi; +- dsp->put_vp8_epel_pixels_tab[0][1][2] = ff_put_vp8_epel16_h6v4_mmi; +- dsp->put_vp8_epel_pixels_tab[0][2][0] = ff_put_vp8_epel16_v6_mmi; +- dsp->put_vp8_epel_pixels_tab[0][2][1] = ff_put_vp8_epel16_h4v6_mmi; +- dsp->put_vp8_epel_pixels_tab[0][2][2] = ff_put_vp8_epel16_h6v6_mmi; +- +- dsp->put_vp8_epel_pixels_tab[1][0][1] = ff_put_vp8_epel8_h4_mmi; +- dsp->put_vp8_epel_pixels_tab[1][0][2] = ff_put_vp8_epel8_h6_mmi; +- dsp->put_vp8_epel_pixels_tab[1][1][0] = ff_put_vp8_epel8_v4_mmi; +- dsp->put_vp8_epel_pixels_tab[1][1][1] = ff_put_vp8_epel8_h4v4_mmi; +- dsp->put_vp8_epel_pixels_tab[1][1][2] = ff_put_vp8_epel8_h6v4_mmi; +- dsp->put_vp8_epel_pixels_tab[1][2][0] = ff_put_vp8_epel8_v6_mmi; +- dsp->put_vp8_epel_pixels_tab[1][2][1] = ff_put_vp8_epel8_h4v6_mmi; +- dsp->put_vp8_epel_pixels_tab[1][2][2] = ff_put_vp8_epel8_h6v6_mmi; +- +- dsp->put_vp8_epel_pixels_tab[2][0][1] = ff_put_vp8_epel4_h4_mmi; +- dsp->put_vp8_epel_pixels_tab[2][0][2] = ff_put_vp8_epel4_h6_mmi; +- dsp->put_vp8_epel_pixels_tab[2][1][0] = ff_put_vp8_epel4_v4_mmi; +- dsp->put_vp8_epel_pixels_tab[2][1][1] = ff_put_vp8_epel4_h4v4_mmi; +- dsp->put_vp8_epel_pixels_tab[2][1][2] = ff_put_vp8_epel4_h6v4_mmi; +- dsp->put_vp8_epel_pixels_tab[2][2][0] = ff_put_vp8_epel4_v6_mmi; +- dsp->put_vp8_epel_pixels_tab[2][2][1] = ff_put_vp8_epel4_h4v6_mmi; +- dsp->put_vp8_epel_pixels_tab[2][2][2] = ff_put_vp8_epel4_h6v6_mmi; +- +- dsp->put_vp8_bilinear_pixels_tab[0][0][1] = ff_put_vp8_bilinear16_h_mmi; +- dsp->put_vp8_bilinear_pixels_tab[0][0][2] = ff_put_vp8_bilinear16_h_mmi; +- dsp->put_vp8_bilinear_pixels_tab[0][1][0] = ff_put_vp8_bilinear16_v_mmi; +- dsp->put_vp8_bilinear_pixels_tab[0][1][1] = ff_put_vp8_bilinear16_hv_mmi; +- dsp->put_vp8_bilinear_pixels_tab[0][1][2] = ff_put_vp8_bilinear16_hv_mmi; +- dsp->put_vp8_bilinear_pixels_tab[0][2][0] = ff_put_vp8_bilinear16_v_mmi; +- dsp->put_vp8_bilinear_pixels_tab[0][2][1] = ff_put_vp8_bilinear16_hv_mmi; +- dsp->put_vp8_bilinear_pixels_tab[0][2][2] = ff_put_vp8_bilinear16_hv_mmi; +- +- dsp->put_vp8_bilinear_pixels_tab[1][0][1] = ff_put_vp8_bilinear8_h_mmi; +- dsp->put_vp8_bilinear_pixels_tab[1][0][2] = ff_put_vp8_bilinear8_h_mmi; +- dsp->put_vp8_bilinear_pixels_tab[1][1][0] = ff_put_vp8_bilinear8_v_mmi; +- dsp->put_vp8_bilinear_pixels_tab[1][1][1] = ff_put_vp8_bilinear8_hv_mmi; +- dsp->put_vp8_bilinear_pixels_tab[1][1][2] = ff_put_vp8_bilinear8_hv_mmi; +- dsp->put_vp8_bilinear_pixels_tab[1][2][0] = ff_put_vp8_bilinear8_v_mmi; +- dsp->put_vp8_bilinear_pixels_tab[1][2][1] = ff_put_vp8_bilinear8_hv_mmi; +- dsp->put_vp8_bilinear_pixels_tab[1][2][2] = ff_put_vp8_bilinear8_hv_mmi; +- +- dsp->put_vp8_bilinear_pixels_tab[2][0][1] = ff_put_vp8_bilinear4_h_mmi; +- dsp->put_vp8_bilinear_pixels_tab[2][0][2] = ff_put_vp8_bilinear4_h_mmi; +- dsp->put_vp8_bilinear_pixels_tab[2][1][0] = ff_put_vp8_bilinear4_v_mmi; +- dsp->put_vp8_bilinear_pixels_tab[2][1][1] = ff_put_vp8_bilinear4_hv_mmi; +- dsp->put_vp8_bilinear_pixels_tab[2][1][2] = ff_put_vp8_bilinear4_hv_mmi; +- dsp->put_vp8_bilinear_pixels_tab[2][2][0] = ff_put_vp8_bilinear4_v_mmi; +- dsp->put_vp8_bilinear_pixels_tab[2][2][1] = ff_put_vp8_bilinear4_hv_mmi; +- dsp->put_vp8_bilinear_pixels_tab[2][2][2] = ff_put_vp8_bilinear4_hv_mmi; +- +- dsp->put_vp8_epel_pixels_tab[0][0][0] = ff_put_vp8_pixels16_mmi; +- dsp->put_vp8_bilinear_pixels_tab[0][0][0] = ff_put_vp8_pixels16_mmi; +- +- dsp->put_vp8_epel_pixels_tab[1][0][0] = ff_put_vp8_pixels8_mmi; +- dsp->put_vp8_bilinear_pixels_tab[1][0][0] = ff_put_vp8_pixels8_mmi; +- +- dsp->vp8_v_loop_filter16y = ff_vp8_v_loop_filter16_mmi; +- dsp->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16_mmi; +- dsp->vp8_v_loop_filter8uv = ff_vp8_v_loop_filter8uv_mmi; +- dsp->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_mmi; +- +- dsp->vp8_v_loop_filter16y_inner = ff_vp8_v_loop_filter16_inner_mmi; +- dsp->vp8_h_loop_filter16y_inner = ff_vp8_h_loop_filter16_inner_mmi; +- dsp->vp8_v_loop_filter8uv_inner = ff_vp8_v_loop_filter8uv_inner_mmi; +- dsp->vp8_h_loop_filter8uv_inner = ff_vp8_h_loop_filter8uv_inner_mmi; +- +- dsp->vp8_v_loop_filter_simple = ff_vp8_v_loop_filter_simple_mmi; +- dsp->vp8_h_loop_filter_simple = ff_vp8_h_loop_filter_simple_mmi; +-} +-#endif /* HAVE_MMI */ + + av_cold void ff_vp8dsp_init_mips(VP8DSPContext *dsp) + { +-#if HAVE_MSA +- vp8dsp_init_msa(dsp); +-#endif // #if HAVE_MSA +-#if HAVE_MMI +- vp8dsp_init_mmi(dsp); +-#endif /* HAVE_MMI */ ++ int cpu_flags = av_get_cpu_flags(); ++ ++ if (have_mmi(cpu_flags)) { ++ dsp->vp8_luma_dc_wht = ff_vp8_luma_dc_wht_mmi; ++ dsp->vp8_luma_dc_wht_dc = ff_vp8_luma_dc_wht_dc_mmi; ++ dsp->vp8_idct_add = ff_vp8_idct_add_mmi; ++ dsp->vp8_idct_dc_add = ff_vp8_idct_dc_add_mmi; ++ dsp->vp8_idct_dc_add4y = ff_vp8_idct_dc_add4y_mmi; ++ dsp->vp8_idct_dc_add4uv = ff_vp8_idct_dc_add4uv_mmi; ++ ++ dsp->put_vp8_epel_pixels_tab[0][0][1] = ff_put_vp8_epel16_h4_mmi; ++ dsp->put_vp8_epel_pixels_tab[0][0][2] = ff_put_vp8_epel16_h6_mmi; ++ dsp->put_vp8_epel_pixels_tab[0][1][0] = ff_put_vp8_epel16_v4_mmi; ++ dsp->put_vp8_epel_pixels_tab[0][1][1] = ff_put_vp8_epel16_h4v4_mmi; ++ dsp->put_vp8_epel_pixels_tab[0][1][2] = ff_put_vp8_epel16_h6v4_mmi; ++ dsp->put_vp8_epel_pixels_tab[0][2][0] = ff_put_vp8_epel16_v6_mmi; ++ dsp->put_vp8_epel_pixels_tab[0][2][1] = ff_put_vp8_epel16_h4v6_mmi; ++ dsp->put_vp8_epel_pixels_tab[0][2][2] = ff_put_vp8_epel16_h6v6_mmi; ++ ++ dsp->put_vp8_epel_pixels_tab[1][0][1] = ff_put_vp8_epel8_h4_mmi; ++ dsp->put_vp8_epel_pixels_tab[1][0][2] = ff_put_vp8_epel8_h6_mmi; ++ dsp->put_vp8_epel_pixels_tab[1][1][0] = ff_put_vp8_epel8_v4_mmi; ++ dsp->put_vp8_epel_pixels_tab[1][1][1] = ff_put_vp8_epel8_h4v4_mmi; ++ dsp->put_vp8_epel_pixels_tab[1][1][2] = ff_put_vp8_epel8_h6v4_mmi; ++ dsp->put_vp8_epel_pixels_tab[1][2][0] = ff_put_vp8_epel8_v6_mmi; ++ dsp->put_vp8_epel_pixels_tab[1][2][1] = ff_put_vp8_epel8_h4v6_mmi; ++ dsp->put_vp8_epel_pixels_tab[1][2][2] = ff_put_vp8_epel8_h6v6_mmi; ++ ++ dsp->put_vp8_epel_pixels_tab[2][0][1] = ff_put_vp8_epel4_h4_mmi; ++ dsp->put_vp8_epel_pixels_tab[2][0][2] = ff_put_vp8_epel4_h6_mmi; ++ dsp->put_vp8_epel_pixels_tab[2][1][0] = ff_put_vp8_epel4_v4_mmi; ++ dsp->put_vp8_epel_pixels_tab[2][1][1] = ff_put_vp8_epel4_h4v4_mmi; ++ dsp->put_vp8_epel_pixels_tab[2][1][2] = ff_put_vp8_epel4_h6v4_mmi; ++ dsp->put_vp8_epel_pixels_tab[2][2][0] = ff_put_vp8_epel4_v6_mmi; ++ dsp->put_vp8_epel_pixels_tab[2][2][1] = ff_put_vp8_epel4_h4v6_mmi; ++ dsp->put_vp8_epel_pixels_tab[2][2][2] = ff_put_vp8_epel4_h6v6_mmi; ++ ++ dsp->put_vp8_bilinear_pixels_tab[0][0][1] = ff_put_vp8_bilinear16_h_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[0][0][2] = ff_put_vp8_bilinear16_h_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[0][1][0] = ff_put_vp8_bilinear16_v_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[0][1][1] = ff_put_vp8_bilinear16_hv_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[0][1][2] = ff_put_vp8_bilinear16_hv_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[0][2][0] = ff_put_vp8_bilinear16_v_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[0][2][1] = ff_put_vp8_bilinear16_hv_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[0][2][2] = ff_put_vp8_bilinear16_hv_mmi; ++ ++ dsp->put_vp8_bilinear_pixels_tab[1][0][1] = ff_put_vp8_bilinear8_h_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[1][0][2] = ff_put_vp8_bilinear8_h_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[1][1][0] = ff_put_vp8_bilinear8_v_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[1][1][1] = ff_put_vp8_bilinear8_hv_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[1][1][2] = ff_put_vp8_bilinear8_hv_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[1][2][0] = ff_put_vp8_bilinear8_v_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[1][2][1] = ff_put_vp8_bilinear8_hv_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[1][2][2] = ff_put_vp8_bilinear8_hv_mmi; ++ ++ dsp->put_vp8_bilinear_pixels_tab[2][0][1] = ff_put_vp8_bilinear4_h_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[2][0][2] = ff_put_vp8_bilinear4_h_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[2][1][0] = ff_put_vp8_bilinear4_v_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[2][1][1] = ff_put_vp8_bilinear4_hv_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[2][1][2] = ff_put_vp8_bilinear4_hv_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[2][2][0] = ff_put_vp8_bilinear4_v_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[2][2][1] = ff_put_vp8_bilinear4_hv_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[2][2][2] = ff_put_vp8_bilinear4_hv_mmi; ++ ++ dsp->put_vp8_epel_pixels_tab[0][0][0] = ff_put_vp8_pixels16_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[0][0][0] = ff_put_vp8_pixels16_mmi; ++ ++ dsp->put_vp8_epel_pixels_tab[1][0][0] = ff_put_vp8_pixels8_mmi; ++ dsp->put_vp8_bilinear_pixels_tab[1][0][0] = ff_put_vp8_pixels8_mmi; ++ ++ dsp->vp8_v_loop_filter16y = ff_vp8_v_loop_filter16_mmi; ++ dsp->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16_mmi; ++ dsp->vp8_v_loop_filter8uv = ff_vp8_v_loop_filter8uv_mmi; ++ dsp->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_mmi; ++ ++ dsp->vp8_v_loop_filter16y_inner = ff_vp8_v_loop_filter16_inner_mmi; ++ dsp->vp8_h_loop_filter16y_inner = ff_vp8_h_loop_filter16_inner_mmi; ++ dsp->vp8_v_loop_filter8uv_inner = ff_vp8_v_loop_filter8uv_inner_mmi; ++ dsp->vp8_h_loop_filter8uv_inner = ff_vp8_h_loop_filter8uv_inner_mmi; ++ ++ dsp->vp8_v_loop_filter_simple = ff_vp8_v_loop_filter_simple_mmi; ++ dsp->vp8_h_loop_filter_simple = ff_vp8_h_loop_filter_simple_mmi; ++ } ++ ++ if (have_msa(cpu_flags)) { ++ dsp->vp8_luma_dc_wht = ff_vp8_luma_dc_wht_msa; ++ dsp->vp8_idct_add = ff_vp8_idct_add_msa; ++ dsp->vp8_idct_dc_add = ff_vp8_idct_dc_add_msa; ++ dsp->vp8_idct_dc_add4y = ff_vp8_idct_dc_add4y_msa; ++ dsp->vp8_idct_dc_add4uv = ff_vp8_idct_dc_add4uv_msa; ++ ++ VP8_MC_MIPS_FUNC(0, 16); ++ VP8_MC_MIPS_FUNC(1, 8); ++ VP8_MC_MIPS_FUNC(2, 4); ++ ++ VP8_BILINEAR_MC_MIPS_FUNC(0, 16); ++ VP8_BILINEAR_MC_MIPS_FUNC(1, 8); ++ VP8_BILINEAR_MC_MIPS_FUNC(2, 4); ++ ++ VP8_MC_MIPS_COPY(0, 16); ++ VP8_MC_MIPS_COPY(1, 8); ++ ++ dsp->vp8_v_loop_filter16y = ff_vp8_v_loop_filter16_msa; ++ dsp->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16_msa; ++ dsp->vp8_v_loop_filter8uv = ff_vp8_v_loop_filter8uv_msa; ++ dsp->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_msa; ++ ++ dsp->vp8_v_loop_filter16y_inner = ff_vp8_v_loop_filter16_inner_msa; ++ dsp->vp8_h_loop_filter16y_inner = ff_vp8_h_loop_filter16_inner_msa; ++ dsp->vp8_v_loop_filter8uv_inner = ff_vp8_v_loop_filter8uv_inner_msa; ++ dsp->vp8_h_loop_filter8uv_inner = ff_vp8_h_loop_filter8uv_inner_msa; ++ ++ dsp->vp8_v_loop_filter_simple = ff_vp8_v_loop_filter_simple_msa; ++ dsp->vp8_h_loop_filter_simple = ff_vp8_h_loop_filter_simple_msa; ++ } + } +diff --git a/libavcodec/mips/vp9_idct_msa.c b/libavcodec/mips/vp9_idct_msa.c +index bd762f2..53bfbb4 100644 +--- a/libavcodec/mips/vp9_idct_msa.c ++++ b/libavcodec/mips/vp9_idct_msa.c +@@ -241,7 +241,7 @@ static const int32_t sinpi_4_9 = 15212; + res0_m, res1_m, res2_m, res3_m); \ + CLIP_SH4_0_255(res0_m, res1_m, res2_m, res3_m); \ + PCKEV_B2_SB(res1_m, res0_m, res3_m, res2_m, tmp0_m, tmp1_m); \ +- ST8x4_UB(tmp0_m, tmp1_m, dst_m, dst_stride); \ ++ ST_D4(tmp0_m, tmp1_m, 0, 1, 0, 1, dst_m, dst_stride); \ + } + + #define VP9_IDCT4x4(in0, in1, in2, in3, out0, out1, out2, out3) \ +@@ -249,6 +249,7 @@ static const int32_t sinpi_4_9 = 15212; + v8i16 c0_m, c1_m, c2_m, c3_m; \ + v8i16 step0_m, step1_m; \ + v4i32 tmp0_m, tmp1_m, tmp2_m, tmp3_m; \ ++ v16i8 zeros = { 0 }; \ + \ + c0_m = VP9_SET_COSPI_PAIR(cospi_16_64, cospi_16_64); \ + c1_m = VP9_SET_COSPI_PAIR(cospi_16_64, -cospi_16_64); \ +@@ -262,7 +263,7 @@ static const int32_t sinpi_4_9 = 15212; + SRARI_W4_SW(tmp0_m, tmp1_m, tmp2_m, tmp3_m, VP9_DCT_CONST_BITS); \ + \ + PCKEV_H2_SW(tmp1_m, tmp0_m, tmp3_m, tmp2_m, tmp0_m, tmp2_m); \ +- SLDI_B2_0_SW(tmp0_m, tmp2_m, tmp1_m, tmp3_m, 8); \ ++ SLDI_B2_SW(zeros, tmp0_m, zeros, tmp2_m, 8, tmp1_m, tmp3_m); \ + BUTTERFLY_4((v8i16) tmp0_m, (v8i16) tmp1_m, \ + (v8i16) tmp2_m, (v8i16) tmp3_m, \ + out0, out1, out2, out3); \ +@@ -364,7 +365,10 @@ static void vp9_idct4x4_colcol_addblk_msa(int16_t *input, uint8_t *dst, + v8i16 zero = { 0 }; + + /* load vector elements of 4x4 block */ +- LD4x4_SH(input, in0, in1, in2, in3); ++ in0 = LD_SH(input); ++ in2 = LD_SH(input + 8); ++ in1 = (v8i16) __msa_ilvl_d((v2i64) in0, (v2i64) in0); ++ in3 = (v8i16) __msa_ilvl_d((v2i64) in2, (v2i64) in2); + ST_SH2(zero, zero, input, 8); + /* rows */ + VP9_IDCT4x4(in0, in1, in2, in3, in0, in1, in2, in3); +@@ -383,7 +387,10 @@ static void vp9_iadst4x4_colcol_addblk_msa(int16_t *input, uint8_t *dst, + v8i16 zero = { 0 }; + + /* load vector elements of 4x4 block */ +- LD4x4_SH(input, in0, in1, in2, in3); ++ in0 = LD_SH(input); ++ in2 = LD_SH(input + 8); ++ in1 = (v8i16) __msa_ilvl_d((v2i64) in0, (v2i64) in0); ++ in3 = (v8i16) __msa_ilvl_d((v2i64) in2, (v2i64) in2); + ST_SH2(zero, zero, input, 8); + /* rows */ + VP9_IADST4x4(in0, in1, in2, in3, in0, in1, in2, in3); +@@ -402,7 +409,10 @@ static void vp9_iadst_idct_4x4_add_msa(int16_t *input, uint8_t *dst, + v8i16 zero = { 0 }; + + /* load vector elements of 4x4 block */ +- LD4x4_SH(input, in0, in1, in2, in3); ++ in0 = LD_SH(input); ++ in2 = LD_SH(input + 8); ++ in1 = (v8i16) __msa_ilvl_d((v2i64) in0, (v2i64) in0); ++ in3 = (v8i16) __msa_ilvl_d((v2i64) in2, (v2i64) in2); + ST_SH2(zero, zero, input, 8); + /* cols */ + VP9_IADST4x4(in0, in1, in2, in3, in0, in1, in2, in3); +@@ -421,7 +431,10 @@ static void vp9_idct_iadst_4x4_add_msa(int16_t *input, uint8_t *dst, + v8i16 zero = { 0 }; + + /* load vector elements of 4x4 block */ +- LD4x4_SH(input, in0, in1, in2, in3); ++ in0 = LD_SH(input); ++ in2 = LD_SH(input + 8); ++ in1 = (v8i16) __msa_ilvl_d((v2i64) in0, (v2i64) in0); ++ in3 = (v8i16) __msa_ilvl_d((v2i64) in2, (v2i64) in2); + ST_SH2(zero, zero, input, 8); + /* cols */ + VP9_IDCT4x4(in0, in1, in2, in3, in0, in1, in2, in3); +@@ -751,15 +764,15 @@ static void vp9_iadst8x8_colcol_addblk_msa(int16_t *input, uint8_t *dst, + + res0 = (v8i16) __msa_ilvr_b((v16i8) zero, (v16i8) dst0); + res0 += out0; +- res0 = CLIP_SH_0_255(res0); ++ CLIP_SH_0_255(res0); + res0 = (v8i16) __msa_pckev_b((v16i8) res0, (v16i8) res0); +- ST8x1_UB(res0, dst); ++ ST_D1(res0, 0, dst); + + res7 = (v8i16) __msa_ilvr_b((v16i8) zero, (v16i8) dst7); + res7 += out7; +- res7 = CLIP_SH_0_255(res7); ++ CLIP_SH_0_255(res7); + res7 = (v8i16) __msa_pckev_b((v16i8) res7, (v16i8) res7); +- ST8x1_UB(res7, dst + 7 * dst_stride); ++ ST_D1(res7, 0, dst + 7 * dst_stride); + + cnst1 = __msa_fill_h(cospi_24_64); + cnst0 = __msa_fill_h(cospi_8_64); +@@ -782,8 +795,8 @@ static void vp9_iadst8x8_colcol_addblk_msa(int16_t *input, uint8_t *dst, + ADD2(res1, out1, res6, out6, res1, res6); + CLIP_SH2_0_255(res1, res6); + PCKEV_B2_SH(res1, res1, res6, res6, res1, res6); +- ST8x1_UB(res1, dst + dst_stride); +- ST8x1_UB(res6, dst + 6 * dst_stride); ++ ST_D1(res1, 0, dst + dst_stride); ++ ST_D1(res6, 0, dst + 6 * dst_stride); + + cnst0 = __msa_fill_h(cospi_16_64); + cnst1 = -cnst0; +@@ -801,8 +814,8 @@ static void vp9_iadst8x8_colcol_addblk_msa(int16_t *input, uint8_t *dst, + ADD2(res3, out3, res4, out4, res3, res4); + CLIP_SH2_0_255(res3, res4); + PCKEV_B2_SH(res3, res3, res4, res4, res3, res4); +- ST8x1_UB(res3, dst + 3 * dst_stride); +- ST8x1_UB(res4, dst + 4 * dst_stride); ++ ST_D1(res3, 0, dst + 3 * dst_stride); ++ ST_D1(res4, 0, dst + 4 * dst_stride); + + out2 = VP9_DOT_SHIFT_RIGHT_PCK_H(temp2, temp3, cnst0); + out5 = VP9_DOT_SHIFT_RIGHT_PCK_H(temp2, temp3, cnst1); +@@ -814,8 +827,8 @@ static void vp9_iadst8x8_colcol_addblk_msa(int16_t *input, uint8_t *dst, + ADD2(res2, out2, res5, out5, res2, res5); + CLIP_SH2_0_255(res2, res5); + PCKEV_B2_SH(res2, res2, res5, res5, res2, res5); +- ST8x1_UB(res2, dst + 2 * dst_stride); +- ST8x1_UB(res5, dst + 5 * dst_stride); ++ ST_D1(res2, 0, dst + 2 * dst_stride); ++ ST_D1(res5, 0, dst + 5 * dst_stride); + } + + static void vp9_iadst_idct_8x8_add_msa(int16_t *input, uint8_t *dst, +@@ -1180,8 +1193,7 @@ static void vp9_idct16x16_1_add_msa(int16_t *input, uint8_t *dst, + res3); + ADD4(res4, vec, res5, vec, res6, vec, res7, vec, res4, res5, res6, + res7); +- CLIP_SH4_0_255(res0, res1, res2, res3); +- CLIP_SH4_0_255(res4, res5, res6, res7); ++ CLIP_SH8_0_255(res0, res1, res2, res3, res4, res5, res6, res7); + PCKEV_B4_UB(res4, res0, res5, res1, res6, res2, res7, res3, + tmp0, tmp1, tmp2, tmp3); + ST_UB4(tmp0, tmp1, tmp2, tmp3, dst, dst_stride); +@@ -1354,8 +1366,8 @@ static void vp9_iadst16_1d_columns_addblk_msa(int16_t *input, uint8_t *dst, + ADD2(res0, out0, res1, out1, res0, res1); + CLIP_SH2_0_255(res0, res1); + PCKEV_B2_SH(res0, res0, res1, res1, res0, res1); +- ST8x1_UB(res0, dst); +- ST8x1_UB(res1, dst + 15 * dst_stride); ++ ST_D1(res0, 0, dst); ++ ST_D1(res1, 0, dst + 15 * dst_stride); + + k0 = VP9_SET_COSPI_PAIR(cospi_12_64, cospi_20_64); + k1 = VP9_SET_COSPI_PAIR(-cospi_20_64, cospi_12_64); +@@ -1371,8 +1383,8 @@ static void vp9_iadst16_1d_columns_addblk_msa(int16_t *input, uint8_t *dst, + ADD2(res8, out8, res9, out9, res8, res9); + CLIP_SH2_0_255(res8, res9); + PCKEV_B2_SH(res8, res8, res9, res9, res8, res9); +- ST8x1_UB(res8, dst + dst_stride); +- ST8x1_UB(res9, dst + 14 * dst_stride); ++ ST_D1(res8, 0, dst + dst_stride); ++ ST_D1(res9, 0, dst + 14 * dst_stride); + + k0 = VP9_SET_COSPI_PAIR(cospi_8_64, cospi_24_64); + k1 = VP9_SET_COSPI_PAIR(cospi_24_64, -cospi_8_64); +@@ -1386,8 +1398,8 @@ static void vp9_iadst16_1d_columns_addblk_msa(int16_t *input, uint8_t *dst, + ADD2(res4, out4, res5, out5, res4, res5); + CLIP_SH2_0_255(res4, res5); + PCKEV_B2_SH(res4, res4, res5, res5, res4, res5); +- ST8x1_UB(res4, dst + 3 * dst_stride); +- ST8x1_UB(res5, dst + 12 * dst_stride); ++ ST_D1(res4, 0, dst + 3 * dst_stride); ++ ST_D1(res5, 0, dst + 12 * dst_stride); + + VP9_MADD_BF(h1, h3, h5, h7, k0, k1, k2, k0, out12, out14, out13, out15); + out13 = -out13; +@@ -1398,8 +1410,8 @@ static void vp9_iadst16_1d_columns_addblk_msa(int16_t *input, uint8_t *dst, + ADD2(res12, out12, res13, out13, res12, res13); + CLIP_SH2_0_255(res12, res13); + PCKEV_B2_SH(res12, res12, res13, res13, res12, res13); +- ST8x1_UB(res12, dst + 2 * dst_stride); +- ST8x1_UB(res13, dst + 13 * dst_stride); ++ ST_D1(res12, 0, dst + 2 * dst_stride); ++ ST_D1(res13, 0, dst + 13 * dst_stride); + + k0 = VP9_SET_COSPI_PAIR(cospi_16_64, cospi_16_64); + k3 = VP9_SET_COSPI_PAIR(-cospi_16_64, cospi_16_64); +@@ -1411,8 +1423,8 @@ static void vp9_iadst16_1d_columns_addblk_msa(int16_t *input, uint8_t *dst, + ADD2(res6, out6, res7, out7, res6, res7); + CLIP_SH2_0_255(res6, res7); + PCKEV_B2_SH(res6, res6, res7, res7, res6, res7); +- ST8x1_UB(res6, dst + 4 * dst_stride); +- ST8x1_UB(res7, dst + 11 * dst_stride); ++ ST_D1(res6, 0, dst + 4 * dst_stride); ++ ST_D1(res7, 0, dst + 11 * dst_stride); + + VP9_MADD_SHORT(out10, out11, k0, k3, out10, out11); + SRARI_H2_SH(out10, out11, 6); +@@ -1422,8 +1434,8 @@ static void vp9_iadst16_1d_columns_addblk_msa(int16_t *input, uint8_t *dst, + ADD2(res10, out10, res11, out11, res10, res11); + CLIP_SH2_0_255(res10, res11); + PCKEV_B2_SH(res10, res10, res11, res11, res10, res11); +- ST8x1_UB(res10, dst + 6 * dst_stride); +- ST8x1_UB(res11, dst + 9 * dst_stride); ++ ST_D1(res10, 0, dst + 6 * dst_stride); ++ ST_D1(res11, 0, dst + 9 * dst_stride); + + k1 = VP9_SET_COSPI_PAIR(-cospi_16_64, -cospi_16_64); + k2 = VP9_SET_COSPI_PAIR(cospi_16_64, -cospi_16_64); +@@ -1435,8 +1447,8 @@ static void vp9_iadst16_1d_columns_addblk_msa(int16_t *input, uint8_t *dst, + ADD2(res2, out2, res3, out3, res2, res3); + CLIP_SH2_0_255(res2, res3); + PCKEV_B2_SH(res2, res2, res3, res3, res2, res3); +- ST8x1_UB(res2, dst + 7 * dst_stride); +- ST8x1_UB(res3, dst + 8 * dst_stride); ++ ST_D1(res2, 0, dst + 7 * dst_stride); ++ ST_D1(res3, 0, dst + 8 * dst_stride); + + VP9_MADD_SHORT(out14, out15, k1, k2, out14, out15); + SRARI_H2_SH(out14, out15, 6); +@@ -1446,8 +1458,8 @@ static void vp9_iadst16_1d_columns_addblk_msa(int16_t *input, uint8_t *dst, + ADD2(res14, out14, res15, out15, res14, res15); + CLIP_SH2_0_255(res14, res15); + PCKEV_B2_SH(res14, res14, res15, res15, res14, res15); +- ST8x1_UB(res14, dst + 5 * dst_stride); +- ST8x1_UB(res15, dst + 10 * dst_stride); ++ ST_D1(res14, 0, dst + 5 * dst_stride); ++ ST_D1(res15, 0, dst + 10 * dst_stride); + } + + static void vp9_iadst16x16_colcol_addblk_msa(int16_t *input, uint8_t *dst, +@@ -1969,8 +1981,7 @@ static void vp9_idct32x32_1_add_msa(int16_t *input, uint8_t *dst, + res3); + ADD4(res4, vec, res5, vec, res6, vec, res7, vec, res4, res5, res6, + res7); +- CLIP_SH4_0_255(res0, res1, res2, res3); +- CLIP_SH4_0_255(res4, res5, res6, res7); ++ CLIP_SH8_0_255(res0, res1, res2, res3, res4, res5, res6, res7); + PCKEV_B4_UB(res4, res0, res5, res1, res6, res2, res7, res3, + tmp0, tmp1, tmp2, tmp3); + +diff --git a/libavcodec/mips/vp9_intra_msa.c b/libavcodec/mips/vp9_intra_msa.c +index 54cf0ae..97cf212 100644 +--- a/libavcodec/mips/vp9_intra_msa.c ++++ b/libavcodec/mips/vp9_intra_msa.c +@@ -378,7 +378,8 @@ void ff_tm_4x4_msa(uint8_t *dst, ptrdiff_t dst_stride, + IPRED_SUBS_UH2_UH(src_top_left, src_top_left, vec2, vec3); + SAT_UH4_UH(vec0, vec1, vec2, vec3, 7); + PCKEV_B2_SB(vec1, vec0, vec3, vec2, tmp0, tmp1); +- ST4x4_UB(tmp0, tmp1, 0, 2, 0, 2, dst, dst_stride); ++ ST_W2(tmp0, 0, 2, dst, dst_stride); ++ ST_W2(tmp1, 0, 2, dst + 2 * dst_stride, dst_stride); + } + + void ff_tm_8x8_msa(uint8_t *dst, ptrdiff_t dst_stride, +@@ -409,7 +410,7 @@ void ff_tm_8x8_msa(uint8_t *dst, ptrdiff_t dst_stride, + IPRED_SUBS_UH2_UH(src_top_left, src_top_left, vec2, vec3); + SAT_UH4_UH(vec0, vec1, vec2, vec3, 7); + PCKEV_B2_SB(vec1, vec0, vec3, vec2, tmp0, tmp1); +- ST8x4_UB(tmp0, tmp1, dst, dst_stride); ++ ST_D4(tmp0, tmp1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +diff --git a/libavcodec/mips/vp9_lpf_msa.c b/libavcodec/mips/vp9_lpf_msa.c +index c82a9e9..cbb1409 100644 +--- a/libavcodec/mips/vp9_lpf_msa.c ++++ b/libavcodec/mips/vp9_lpf_msa.c +@@ -1219,9 +1219,7 @@ void ff_loop_filter_h_4_8_msa(uint8_t *src, ptrdiff_t pitch, + ILVRL_H2_SH(vec1, vec0, vec2, vec3); + + src -= 2; +- ST4x4_UB(vec2, vec2, 0, 1, 2, 3, src, pitch); +- src += 4 * pitch; +- ST4x4_UB(vec3, vec3, 0, 1, 2, 3, src, pitch); ++ ST_W8(vec2, vec3, 0, 1, 2, 3, 0, 1, 2, 3, src, pitch); + } + + void ff_loop_filter_h_44_16_msa(uint8_t *src, ptrdiff_t pitch, +@@ -1266,9 +1264,8 @@ void ff_loop_filter_h_44_16_msa(uint8_t *src, ptrdiff_t pitch, + + src -= 2; + +- ST4x8_UB(tmp2, tmp3, src, pitch); +- src += (8 * pitch); +- ST4x8_UB(tmp4, tmp5, src, pitch); ++ ST_W8(tmp2, tmp3, 0, 1, 2, 3, 0, 1, 2, 3, src, pitch); ++ ST_W8(tmp4, tmp5, 0, 1, 2, 3, 0, 1, 2, 3, src + 8 * pitch, pitch); + } + + void ff_loop_filter_h_8_8_msa(uint8_t *src, ptrdiff_t pitch, +@@ -1313,9 +1310,7 @@ void ff_loop_filter_h_8_8_msa(uint8_t *src, ptrdiff_t pitch, + ILVRL_H2_SH(vec1, vec0, vec2, vec3); + + src -= 2; +- ST4x4_UB(vec2, vec2, 0, 1, 2, 3, src, pitch); +- src += 4 * pitch; +- ST4x4_UB(vec3, vec3, 0, 1, 2, 3, src, pitch); ++ ST_W8(vec2, vec3, 0, 1, 2, 3, 0, 1, 2, 3, src, pitch); + } else { + ILVR_B8_UH(zero, p3, zero, p2, zero, p1, zero, p0, zero, q0, zero, q1, + zero, q2, zero, q3, p3_r, p2_r, p1_r, p0_r, q0_r, q1_r, q2_r, +@@ -1343,11 +1338,11 @@ void ff_loop_filter_h_8_8_msa(uint8_t *src, ptrdiff_t pitch, + vec4 = (v8i16) __msa_ilvr_b((v16i8) q2, (v16i8) q1); + + src -= 3; +- ST4x4_UB(vec2, vec2, 0, 1, 2, 3, src, pitch); +- ST2x4_UB(vec4, 0, src + 4, pitch); ++ ST_W4(vec2, 0, 1, 2, 3, src, pitch); ++ ST_H4(vec4, 0, 1, 2, 3, src + 4, pitch); + src += (4 * pitch); +- ST4x4_UB(vec3, vec3, 0, 1, 2, 3, src, pitch); +- ST2x4_UB(vec4, 4, src + 4, pitch); ++ ST_W4(vec3, 0, 1, 2, 3, src, pitch); ++ ST_H4(vec4, 4, 5, 6, 7, src + 4, pitch); + } + } + +@@ -1410,9 +1405,8 @@ void ff_loop_filter_h_88_16_msa(uint8_t *src, ptrdiff_t pitch, + ILVRL_H2_SH(vec1, vec0, vec4, vec5); + + src -= 2; +- ST4x8_UB(vec2, vec3, src, pitch); +- src += 8 * pitch; +- ST4x8_UB(vec4, vec5, src, pitch); ++ ST_W8(vec2, vec3, 0, 1, 2, 3, 0, 1, 2, 3, src, pitch); ++ ST_W8(vec4, vec5, 0, 1, 2, 3, 0, 1, 2, 3, src + 8 * pitch, pitch); + } else { + ILVR_B8_UH(zero, p3, zero, p2, zero, p1, zero, p0, zero, q0, zero, q1, + zero, q2, zero, q3, p3_r, p2_r, p1_r, p0_r, q0_r, q1_r, q2_r, +@@ -1451,17 +1445,17 @@ void ff_loop_filter_h_88_16_msa(uint8_t *src, ptrdiff_t pitch, + ILVRL_B2_SH(q2, q1, vec2, vec5); + + src -= 3; +- ST4x4_UB(vec3, vec3, 0, 1, 2, 3, src, pitch); +- ST2x4_UB(vec2, 0, src + 4, pitch); ++ ST_W4(vec3, 0, 1, 2, 3, src, pitch); ++ ST_H4(vec2, 0, 1, 2, 3, src + 4, pitch); + src += (4 * pitch); +- ST4x4_UB(vec4, vec4, 0, 1, 2, 3, src, pitch); +- ST2x4_UB(vec2, 4, src + 4, pitch); ++ ST_W4(vec4, 0, 1, 2, 3, src, pitch); ++ ST_H4(vec2, 4, 5, 6, 7, src + 4, pitch); + src += (4 * pitch); +- ST4x4_UB(vec6, vec6, 0, 1, 2, 3, src, pitch); +- ST2x4_UB(vec5, 0, src + 4, pitch); ++ ST_W4(vec6, 0, 1, 2, 3, src, pitch); ++ ST_H4(vec5, 0, 1, 2, 3, src + 4, pitch); + src += (4 * pitch); +- ST4x4_UB(vec7, vec7, 0, 1, 2, 3, src, pitch); +- ST2x4_UB(vec5, 4, src + 4, pitch); ++ ST_W4(vec7, 0, 1, 2, 3, src, pitch); ++ ST_H4(vec5, 4, 5, 6, 7, src + 4, pitch); + } + } + +@@ -1523,9 +1517,8 @@ void ff_loop_filter_h_84_16_msa(uint8_t *src, ptrdiff_t pitch, + ILVRL_H2_SH(vec1, vec0, vec4, vec5); + + src -= 2; +- ST4x8_UB(vec2, vec3, src, pitch); +- src += 8 * pitch; +- ST4x8_UB(vec4, vec5, src, pitch); ++ ST_W8(vec2, vec3, 0, 1, 2, 3, 0, 1, 2, 3, src, pitch); ++ ST_W8(vec4, vec5, 0, 1, 2, 3, 0, 1, 2, 3, src + 8 * pitch, pitch); + } else { + ILVR_B8_UH(zero, p3, zero, p2, zero, p1, zero, p0, zero, q0, zero, q1, + zero, q2, zero, q3, p3_r, p2_r, p1_r, p0_r, q0_r, q1_r, q2_r, +@@ -1555,17 +1548,17 @@ void ff_loop_filter_h_84_16_msa(uint8_t *src, ptrdiff_t pitch, + ILVRL_B2_SH(q2, q1, vec2, vec5); + + src -= 3; +- ST4x4_UB(vec3, vec3, 0, 1, 2, 3, src, pitch); +- ST2x4_UB(vec2, 0, src + 4, pitch); ++ ST_W4(vec3, 0, 1, 2, 3, src, pitch); ++ ST_H4(vec2, 0, 1, 2, 3, src + 4, pitch); + src += (4 * pitch); +- ST4x4_UB(vec4, vec4, 0, 1, 2, 3, src, pitch); +- ST2x4_UB(vec2, 4, src + 4, pitch); ++ ST_W4(vec4, 0, 1, 2, 3, src, pitch); ++ ST_H4(vec2, 4, 5, 6, 7, src + 4, pitch); + src += (4 * pitch); +- ST4x4_UB(vec6, vec6, 0, 1, 2, 3, src, pitch); +- ST2x4_UB(vec5, 0, src + 4, pitch); ++ ST_W4(vec6, 0, 1, 2, 3, src, pitch); ++ ST_H4(vec5, 0, 1, 2, 3, src + 4, pitch); + src += (4 * pitch); +- ST4x4_UB(vec7, vec7, 0, 1, 2, 3, src, pitch); +- ST2x4_UB(vec5, 4, src + 4, pitch); ++ ST_W4(vec7, 0, 1, 2, 3, src, pitch); ++ ST_H4(vec5, 4, 5, 6, 7, src + 4, pitch); + } + } + +@@ -1627,9 +1620,8 @@ void ff_loop_filter_h_48_16_msa(uint8_t *src, ptrdiff_t pitch, + ILVRL_H2_SH(vec1, vec0, vec4, vec5); + + src -= 2; +- ST4x8_UB(vec2, vec3, src, pitch); +- src += 8 * pitch; +- ST4x8_UB(vec4, vec5, src, pitch); ++ ST_W8(vec2, vec3, 0, 1, 2, 3, 0, 1, 2, 3, src, pitch); ++ ST_W8(vec4, vec5, 0, 1, 2, 3, 0, 1, 2, 3, src + 8 * pitch, pitch); + } else { + ILVL_B4_UH(zero, p3, zero, p2, zero, p1, zero, p0, p3_l, p2_l, p1_l, + p0_l); +@@ -1661,17 +1653,17 @@ void ff_loop_filter_h_48_16_msa(uint8_t *src, ptrdiff_t pitch, + ILVRL_B2_SH(q2, q1, vec2, vec5); + + src -= 3; +- ST4x4_UB(vec3, vec3, 0, 1, 2, 3, src, pitch); +- ST2x4_UB(vec2, 0, src + 4, pitch); ++ ST_W4(vec3, 0, 1, 2, 3, src, pitch); ++ ST_H4(vec2, 0, 1, 2, 3, src + 4, pitch); + src += (4 * pitch); +- ST4x4_UB(vec4, vec4, 0, 1, 2, 3, src, pitch); +- ST2x4_UB(vec2, 4, src + 4, pitch); ++ ST_W4(vec4, 0, 1, 2, 3, src, pitch); ++ ST_H4(vec2, 4, 5, 6, 7, src + 4, pitch); + src += (4 * pitch); +- ST4x4_UB(vec6, vec6, 0, 1, 2, 3, src, pitch); +- ST2x4_UB(vec5, 0, src + 4, pitch); ++ ST_W4(vec6, 0, 1, 2, 3, src, pitch); ++ ST_H4(vec5, 0, 1, 2, 3, src + 4, pitch); + src += (4 * pitch); +- ST4x4_UB(vec7, vec7, 0, 1, 2, 3, src, pitch); +- ST2x4_UB(vec5, 4, src + 4, pitch); ++ ST_W4(vec7, 0, 1, 2, 3, src, pitch); ++ ST_H4(vec5, 4, 5, 6, 7, src + 4, pitch); + } + } + +@@ -1681,6 +1673,7 @@ static void vp9_transpose_16x8_to_8x16(uint8_t *input, int32_t in_pitch, + v16u8 p7_org, p6_org, p5_org, p4_org, p3_org, p2_org, p1_org, p0_org; + v16i8 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; + v16u8 p7, p6, p5, p4, p3, p2, p1, p0, q0, q1, q2, q3, q4, q5, q6, q7; ++ v16i8 zeros = { 0 }; + + LD_UB8(input, in_pitch, + p7_org, p6_org, p5_org, p4_org, p3_org, p2_org, p1_org, p0_org); +@@ -1694,7 +1687,7 @@ static void vp9_transpose_16x8_to_8x16(uint8_t *input, int32_t in_pitch, + ILVL_B2_SB(tmp1, tmp0, tmp3, tmp2, tmp5, tmp7); + ILVR_W2_UB(tmp6, tmp4, tmp7, tmp5, q0, q4); + ILVL_W2_UB(tmp6, tmp4, tmp7, tmp5, q2, q6); +- SLDI_B4_0_UB(q0, q2, q4, q6, q1, q3, q5, q7, 8); ++ SLDI_B4_UB(zeros, q0, zeros, q2, zeros, q4, zeros, q6, 8, q1, q3, q5, q7); + + ST_UB8(p7, p6, p5, p4, p3, p2, p1, p0, output, out_pitch); + output += (8 * out_pitch); +@@ -1811,7 +1804,7 @@ static int32_t vp9_vt_lpf_t4_and_t8_8w(uint8_t *src, uint8_t *filter48, + if (__msa_test_bz_v(flat)) { + ILVR_B2_SH(p0_out, p1_out, q1_out, q0_out, vec0, vec1); + ILVRL_H2_SH(vec1, vec0, vec2, vec3); +- ST4x8_UB(vec2, vec3, (src_org - 2), pitch_org); ++ ST_W8(vec2, vec3, 0, 1, 2, 3, 0, 1, 2, 3, (src_org - 2), pitch_org); + return 1; + } else { + ILVR_B8_UH(zero, p3, zero, p2, zero, p1, zero, p0, zero, q0, zero, q1, +@@ -1878,11 +1871,11 @@ static int32_t vp9_vt_lpf_t16_8w(uint8_t *src, uint8_t *src_org, ptrdiff_t pitch + vec2 = (v8i16) __msa_ilvr_b((v16i8) q2, (v16i8) q1); + + src_org -= 3; +- ST4x4_UB(vec3, vec3, 0, 1, 2, 3, src_org, pitch); +- ST2x4_UB(vec2, 0, (src_org + 4), pitch); ++ ST_W4(vec3, 0, 1, 2, 3, src_org, pitch); ++ ST_H4(vec2, 0, 1, 2, 3, (src_org + 4), pitch); + src_org += (4 * pitch); +- ST4x4_UB(vec4, vec4, 0, 1, 2, 3, src_org, pitch); +- ST2x4_UB(vec2, 4, (src_org + 4), pitch); ++ ST_W4(vec4, 0, 1, 2, 3, src_org, pitch); ++ ST_H4(vec2, 4, 5, 6, 7, (src_org + 4), pitch); + + return 1; + } else { +@@ -1908,7 +1901,7 @@ static int32_t vp9_vt_lpf_t16_8w(uint8_t *src, uint8_t *src_org, ptrdiff_t pitch + r_out = __msa_srari_h((v8i16) tmp1_r, 4); + r_out = (v8i16) __msa_pckev_b((v16i8) r_out, (v16i8) r_out); + p6 = __msa_bmnz_v(p6, (v16u8) r_out, flat2); +- ST8x1_UB(p6, src); ++ ST_D1(p6, 0, src); + src += 16; + + /* p5 */ +@@ -1920,7 +1913,7 @@ static int32_t vp9_vt_lpf_t16_8w(uint8_t *src, uint8_t *src_org, ptrdiff_t pitch + r_out = __msa_srari_h((v8i16) tmp1_r, 4); + r_out = (v8i16) __msa_pckev_b((v16i8) r_out, (v16i8) r_out); + p5 = __msa_bmnz_v(p5, (v16u8) r_out, flat2); +- ST8x1_UB(p5, src); ++ ST_D1(p5, 0, src); + src += 16; + + /* p4 */ +@@ -1932,7 +1925,7 @@ static int32_t vp9_vt_lpf_t16_8w(uint8_t *src, uint8_t *src_org, ptrdiff_t pitch + r_out = __msa_srari_h((v8i16) tmp1_r, 4); + r_out = (v8i16) __msa_pckev_b((v16i8) r_out, (v16i8) r_out); + p4 = __msa_bmnz_v(p4, (v16u8) r_out, flat2); +- ST8x1_UB(p4, src); ++ ST_D1(p4, 0, src); + src += 16; + + /* p3 */ +@@ -1944,7 +1937,7 @@ static int32_t vp9_vt_lpf_t16_8w(uint8_t *src, uint8_t *src_org, ptrdiff_t pitch + r_out = __msa_srari_h((v8i16) tmp1_r, 4); + r_out = (v8i16) __msa_pckev_b((v16i8) r_out, (v16i8) r_out); + p3 = __msa_bmnz_v(p3, (v16u8) r_out, flat2); +- ST8x1_UB(p3, src); ++ ST_D1(p3, 0, src); + src += 16; + + /* p2 */ +@@ -1957,7 +1950,7 @@ static int32_t vp9_vt_lpf_t16_8w(uint8_t *src, uint8_t *src_org, ptrdiff_t pitch + r_out = __msa_srari_h((v8i16) tmp1_r, 4); + r_out = (v8i16) __msa_pckev_b((v16i8) r_out, (v16i8) r_out); + filter8 = __msa_bmnz_v(filter8, (v16u8) r_out, flat2); +- ST8x1_UB(filter8, src); ++ ST_D1(filter8, 0, src); + src += 16; + + /* p1 */ +@@ -1970,7 +1963,7 @@ static int32_t vp9_vt_lpf_t16_8w(uint8_t *src, uint8_t *src_org, ptrdiff_t pitch + r_out = __msa_srari_h((v8i16) tmp1_r, 4); + r_out = (v8i16) __msa_pckev_b((v16i8) r_out, (v16i8) r_out); + filter8 = __msa_bmnz_v(filter8, (v16u8) r_out, flat2); +- ST8x1_UB(filter8, src); ++ ST_D1(filter8, 0, src); + src += 16; + + /* p0 */ +@@ -1983,7 +1976,7 @@ static int32_t vp9_vt_lpf_t16_8w(uint8_t *src, uint8_t *src_org, ptrdiff_t pitch + r_out = __msa_srari_h((v8i16) tmp1_r, 4); + r_out = (v8i16) __msa_pckev_b((v16i8) r_out, (v16i8) r_out); + filter8 = __msa_bmnz_v(filter8, (v16u8) r_out, flat2); +- ST8x1_UB(filter8, src); ++ ST_D1(filter8, 0, src); + src += 16; + + /* q0 */ +@@ -1996,7 +1989,7 @@ static int32_t vp9_vt_lpf_t16_8w(uint8_t *src, uint8_t *src_org, ptrdiff_t pitch + r_out = __msa_srari_h((v8i16) tmp1_r, 4); + r_out = (v8i16) __msa_pckev_b((v16i8) r_out, (v16i8) r_out); + filter8 = __msa_bmnz_v(filter8, (v16u8) r_out, flat2); +- ST8x1_UB(filter8, src); ++ ST_D1(filter8, 0, src); + src += 16; + + /* q1 */ +@@ -2008,7 +2001,7 @@ static int32_t vp9_vt_lpf_t16_8w(uint8_t *src, uint8_t *src_org, ptrdiff_t pitch + r_out = __msa_srari_h((v8i16) tmp1_r, 4); + r_out = (v8i16) __msa_pckev_b((v16i8) r_out, (v16i8) r_out); + filter8 = __msa_bmnz_v(filter8, (v16u8) r_out, flat2); +- ST8x1_UB(filter8, src); ++ ST_D1(filter8, 0, src); + src += 16; + + /* q2 */ +@@ -2020,7 +2013,7 @@ static int32_t vp9_vt_lpf_t16_8w(uint8_t *src, uint8_t *src_org, ptrdiff_t pitch + r_out = __msa_srari_h((v8i16) tmp1_r, 4); + r_out = (v8i16) __msa_pckev_b((v16i8) r_out, (v16i8) r_out); + filter8 = __msa_bmnz_v(filter8, (v16u8) r_out, flat2); +- ST8x1_UB(filter8, src); ++ ST_D1(filter8, 0, src); + src += 16; + + /* q3 */ +@@ -2031,7 +2024,7 @@ static int32_t vp9_vt_lpf_t16_8w(uint8_t *src, uint8_t *src_org, ptrdiff_t pitch + r_out = __msa_srari_h((v8i16) tmp1_r, 4); + r_out = (v8i16) __msa_pckev_b((v16i8) r_out, (v16i8) r_out); + q3 = __msa_bmnz_v(q3, (v16u8) r_out, flat2); +- ST8x1_UB(q3, src); ++ ST_D1(q3, 0, src); + src += 16; + + /* q4 */ +@@ -2042,7 +2035,7 @@ static int32_t vp9_vt_lpf_t16_8w(uint8_t *src, uint8_t *src_org, ptrdiff_t pitch + r_out = __msa_srari_h((v8i16) tmp1_r, 4); + r_out = (v8i16) __msa_pckev_b((v16i8) r_out, (v16i8) r_out); + q4 = __msa_bmnz_v(q4, (v16u8) r_out, flat2); +- ST8x1_UB(q4, src); ++ ST_D1(q4, 0, src); + src += 16; + + /* q5 */ +@@ -2053,7 +2046,7 @@ static int32_t vp9_vt_lpf_t16_8w(uint8_t *src, uint8_t *src_org, ptrdiff_t pitch + r_out = __msa_srari_h((v8i16) tmp1_r, 4); + r_out = (v8i16) __msa_pckev_b((v16i8) r_out, (v16i8) r_out); + q5 = __msa_bmnz_v(q5, (v16u8) r_out, flat2); +- ST8x1_UB(q5, src); ++ ST_D1(q5, 0, src); + src += 16; + + /* q6 */ +@@ -2064,7 +2057,7 @@ static int32_t vp9_vt_lpf_t16_8w(uint8_t *src, uint8_t *src_org, ptrdiff_t pitch + r_out = __msa_srari_h((v8i16) tmp1_r, 4); + r_out = (v8i16) __msa_pckev_b((v16i8) r_out, (v16i8) r_out); + q6 = __msa_bmnz_v(q6, (v16u8) r_out, flat2); +- ST8x1_UB(q6, src); ++ ST_D1(q6, 0, src); + + return 0; + } +@@ -2137,9 +2130,8 @@ static int32_t vp9_vt_lpf_t4_and_t8_16w(uint8_t *src, uint8_t *filter48, + ILVRL_H2_SH(vec1, vec0, vec4, vec5); + + src_org -= 2; +- ST4x8_UB(vec2, vec3, src_org, pitch); +- src_org += 8 * pitch; +- ST4x8_UB(vec4, vec5, src_org, pitch); ++ ST_W8(vec2, vec3, 0, 1, 2, 3, 0, 1, 2, 3, src_org, pitch); ++ ST_W8(vec4, vec5, 0, 1, 2, 3, 0, 1, 2, 3, src_org + 8 * pitch, pitch); + + return 1; + } else { +@@ -2218,17 +2210,17 @@ static int32_t vp9_vt_lpf_t16_16w(uint8_t *src, uint8_t *src_org, ptrdiff_t pitc + ILVRL_B2_SH(q2, q1, vec2, vec5); + + src_org -= 3; +- ST4x4_UB(vec3, vec3, 0, 1, 2, 3, src_org, pitch); +- ST2x4_UB(vec2, 0, (src_org + 4), pitch); ++ ST_W4(vec3, 0, 1, 2, 3, src_org, pitch); ++ ST_H4(vec2, 0, 1, 2, 3, (src_org + 4), pitch); + src_org += (4 * pitch); +- ST4x4_UB(vec4, vec4, 0, 1, 2, 3, src_org, pitch); +- ST2x4_UB(vec2, 4, (src_org + 4), pitch); ++ ST_W4(vec4, 0, 1, 2, 3, src_org, pitch); ++ ST_H4(vec2, 4, 5, 6, 7, (src_org + 4), pitch); + src_org += (4 * pitch); +- ST4x4_UB(vec6, vec6, 0, 1, 2, 3, src_org, pitch); +- ST2x4_UB(vec5, 0, (src_org + 4), pitch); ++ ST_W4(vec6, 0, 1, 2, 3, src_org, pitch); ++ ST_H4(vec5, 0, 1, 2, 3, (src_org + 4), pitch); + src_org += (4 * pitch); +- ST4x4_UB(vec7, vec7, 0, 1, 2, 3, src_org, pitch); +- ST2x4_UB(vec5, 4, (src_org + 4), pitch); ++ ST_W4(vec7, 0, 1, 2, 3, src_org, pitch); ++ ST_H4(vec5, 4, 5, 6, 7, (src_org + 4), pitch); + + return 1; + } else { +diff --git a/libavcodec/mips/vp9_mc_mmi.c b/libavcodec/mips/vp9_mc_mmi.c +new file mode 100644 +index 0000000..e7a8387 +--- /dev/null ++++ b/libavcodec/mips/vp9_mc_mmi.c +@@ -0,0 +1,628 @@ ++/* ++ * Copyright (c) 2019 gxw ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavcodec/vp9dsp.h" ++#include "libavutil/mips/mmiutils.h" ++#include "vp9dsp_mips.h" ++ ++#define GET_DATA_H_MMI \ ++ "pmaddhw %[ftmp4], %[ftmp4], %[filter1] \n\t" \ ++ "pmaddhw %[ftmp5], %[ftmp5], %[filter2] \n\t" \ ++ "paddw %[ftmp4], %[ftmp4], %[ftmp5] \n\t" \ ++ "punpckhwd %[ftmp5], %[ftmp4], %[ftmp0] \n\t" \ ++ "paddw %[ftmp4], %[ftmp4], %[ftmp5] \n\t" \ ++ "pmaddhw %[ftmp6], %[ftmp6], %[filter1] \n\t" \ ++ "pmaddhw %[ftmp7], %[ftmp7], %[filter2] \n\t" \ ++ "paddw %[ftmp6], %[ftmp6], %[ftmp7] \n\t" \ ++ "punpckhwd %[ftmp7], %[ftmp6], %[ftmp0] \n\t" \ ++ "paddw %[ftmp6], %[ftmp6], %[ftmp7] \n\t" \ ++ "punpcklwd %[srcl], %[ftmp4], %[ftmp6] \n\t" \ ++ "pmaddhw %[ftmp8], %[ftmp8], %[filter1] \n\t" \ ++ "pmaddhw %[ftmp9], %[ftmp9], %[filter2] \n\t" \ ++ "paddw %[ftmp8], %[ftmp8], %[ftmp9] \n\t" \ ++ "punpckhwd %[ftmp9], %[ftmp8], %[ftmp0] \n\t" \ ++ "paddw %[ftmp8], %[ftmp8], %[ftmp9] \n\t" \ ++ "pmaddhw %[ftmp10], %[ftmp10], %[filter1] \n\t" \ ++ "pmaddhw %[ftmp11], %[ftmp11], %[filter2] \n\t" \ ++ "paddw %[ftmp10], %[ftmp10], %[ftmp11] \n\t" \ ++ "punpckhwd %[ftmp11], %[ftmp10], %[ftmp0] \n\t" \ ++ "paddw %[ftmp10], %[ftmp10], %[ftmp11] \n\t" \ ++ "punpcklwd %[srch], %[ftmp8], %[ftmp10] \n\t" ++ ++#define GET_DATA_V_MMI \ ++ "punpcklhw %[srcl], %[ftmp4], %[ftmp5] \n\t" \ ++ "pmaddhw %[srcl], %[srcl], %[filter10] \n\t" \ ++ "punpcklhw %[ftmp12], %[ftmp6], %[ftmp7] \n\t" \ ++ "pmaddhw %[ftmp12], %[ftmp12], %[filter32] \n\t" \ ++ "paddw %[srcl], %[srcl], %[ftmp12] \n\t" \ ++ "punpcklhw %[ftmp12], %[ftmp8], %[ftmp9] \n\t" \ ++ "pmaddhw %[ftmp12], %[ftmp12], %[filter54] \n\t" \ ++ "paddw %[srcl], %[srcl], %[ftmp12] \n\t" \ ++ "punpcklhw %[ftmp12], %[ftmp10], %[ftmp11] \n\t" \ ++ "pmaddhw %[ftmp12], %[ftmp12], %[filter76] \n\t" \ ++ "paddw %[srcl], %[srcl], %[ftmp12] \n\t" \ ++ "punpckhhw %[srch], %[ftmp4], %[ftmp5] \n\t" \ ++ "pmaddhw %[srch], %[srch], %[filter10] \n\t" \ ++ "punpckhhw %[ftmp12], %[ftmp6], %[ftmp7] \n\t" \ ++ "pmaddhw %[ftmp12], %[ftmp12], %[filter32] \n\t" \ ++ "paddw %[srch], %[srch], %[ftmp12] \n\t" \ ++ "punpckhhw %[ftmp12], %[ftmp8], %[ftmp9] \n\t" \ ++ "pmaddhw %[ftmp12], %[ftmp12], %[filter54] \n\t" \ ++ "paddw %[srch], %[srch], %[ftmp12] \n\t" \ ++ "punpckhhw %[ftmp12], %[ftmp10], %[ftmp11] \n\t" \ ++ "pmaddhw %[ftmp12], %[ftmp12], %[filter76] \n\t" \ ++ "paddw %[srch], %[srch], %[ftmp12] \n\t" ++ ++static void convolve_horiz_mmi(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const uint16_t *filter_x, int32_t w, ++ int32_t h) ++{ ++ double ftmp[15]; ++ uint32_t tmp[2]; ++ src -= 3; ++ src_stride -= w; ++ dst_stride -= w; ++ __asm__ volatile ( ++ "move %[tmp1], %[width] \n\t" ++ "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "gsldlc1 %[filter1], 0x03(%[filter]) \n\t" ++ "gsldrc1 %[filter1], 0x00(%[filter]) \n\t" ++ "gsldlc1 %[filter2], 0x0b(%[filter]) \n\t" ++ "gsldrc1 %[filter2], 0x08(%[filter]) \n\t" ++ "li %[tmp0], 0x07 \n\t" ++ "dmtc1 %[tmp0], %[ftmp13] \n\t" ++ "punpcklwd %[ftmp13], %[ftmp13], %[ftmp13] \n\t" ++ "1: \n\t" ++ /* Get 8 data per row */ ++ "gsldlc1 %[ftmp5], 0x07(%[src]) \n\t" ++ "gsldrc1 %[ftmp5], 0x00(%[src]) \n\t" ++ "gsldlc1 %[ftmp7], 0x08(%[src]) \n\t" ++ "gsldrc1 %[ftmp7], 0x01(%[src]) \n\t" ++ "gsldlc1 %[ftmp9], 0x09(%[src]) \n\t" ++ "gsldrc1 %[ftmp9], 0x02(%[src]) \n\t" ++ "gsldlc1 %[ftmp11], 0x0A(%[src]) \n\t" ++ "gsldrc1 %[ftmp11], 0x03(%[src]) \n\t" ++ "punpcklbh %[ftmp4], %[ftmp5], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp5], %[ftmp5], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp6], %[ftmp7], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp7], %[ftmp7], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp8], %[ftmp9], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp9], %[ftmp9], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp10], %[ftmp11], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp11], %[ftmp11], %[ftmp0] \n\t" ++ PTR_ADDIU "%[width], %[width], -0x04 \n\t" ++ /* Get raw data */ ++ GET_DATA_H_MMI ++ ROUND_POWER_OF_TWO_MMI(%[srcl], %[ftmp13], %[ftmp5], ++ %[ftmp6], %[tmp0]) ++ ROUND_POWER_OF_TWO_MMI(%[srch], %[ftmp13], %[ftmp5], ++ %[ftmp6], %[tmp0]) ++ "packsswh %[srcl], %[srcl], %[srch] \n\t" ++ "packushb %[ftmp12], %[srcl], %[ftmp0] \n\t" ++ "swc1 %[ftmp12], 0x00(%[dst]) \n\t" ++ PTR_ADDIU "%[dst], %[dst], 0x04 \n\t" ++ PTR_ADDIU "%[src], %[src], 0x04 \n\t" ++ /* Loop count */ ++ "bnez %[width], 1b \n\t" ++ "move %[width], %[tmp1] \n\t" ++ PTR_ADDU "%[src], %[src], %[src_stride] \n\t" ++ PTR_ADDU "%[dst], %[dst], %[dst_stride] \n\t" ++ PTR_ADDIU "%[height], %[height], -0x01 \n\t" ++ "bnez %[height], 1b \n\t" ++ : [srcl]"=&f"(ftmp[0]), [srch]"=&f"(ftmp[1]), ++ [filter1]"=&f"(ftmp[2]), [filter2]"=&f"(ftmp[3]), ++ [ftmp0]"=&f"(ftmp[4]), [ftmp4]"=&f"(ftmp[5]), ++ [ftmp5]"=&f"(ftmp[6]), [ftmp6]"=&f"(ftmp[7]), ++ [ftmp7]"=&f"(ftmp[8]), [ftmp8]"=&f"(ftmp[9]), ++ [ftmp9]"=&f"(ftmp[10]), [ftmp10]"=&f"(ftmp[11]), ++ [ftmp11]"=&f"(ftmp[12]), [ftmp12]"=&f"(ftmp[13]), ++ [tmp0]"=&r"(tmp[0]), [tmp1]"=&r"(tmp[1]), ++ [src]"+&r"(src), [width]"+&r"(w), ++ [dst]"+&r"(dst), [height]"+&r"(h), ++ [ftmp13]"=&f"(ftmp[14]) ++ : [filter]"r"(filter_x), ++ [src_stride]"r"((mips_reg)src_stride), ++ [dst_stride]"r"((mips_reg)dst_stride) ++ : "memory" ++ ); ++} ++ ++static void convolve_vert_mmi(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int16_t *filter_y, int32_t w, ++ int32_t h) ++{ ++ double ftmp[17]; ++ uint32_t tmp[1]; ++ ptrdiff_t addr = src_stride; ++ src_stride -= w; ++ dst_stride -= w; ++ ++ __asm__ volatile ( ++ "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "gsldlc1 %[ftmp4], 0x03(%[filter]) \n\t" ++ "gsldrc1 %[ftmp4], 0x00(%[filter]) \n\t" ++ "gsldlc1 %[ftmp5], 0x0b(%[filter]) \n\t" ++ "gsldrc1 %[ftmp5], 0x08(%[filter]) \n\t" ++ "punpcklwd %[filter10], %[ftmp4], %[ftmp4] \n\t" ++ "punpckhwd %[filter32], %[ftmp4], %[ftmp4] \n\t" ++ "punpcklwd %[filter54], %[ftmp5], %[ftmp5] \n\t" ++ "punpckhwd %[filter76], %[ftmp5], %[ftmp5] \n\t" ++ "li %[tmp0], 0x07 \n\t" ++ "dmtc1 %[tmp0], %[ftmp13] \n\t" ++ "punpcklwd %[ftmp13], %[ftmp13], %[ftmp13] \n\t" ++ "1: \n\t" ++ /* Get 8 data per column */ ++ "gsldlc1 %[ftmp4], 0x07(%[src]) \n\t" ++ "gsldrc1 %[ftmp4], 0x00(%[src]) \n\t" ++ PTR_ADDU "%[tmp0], %[src], %[addr] \n\t" ++ "gsldlc1 %[ftmp5], 0x07(%[tmp0]) \n\t" ++ "gsldrc1 %[ftmp5], 0x00(%[tmp0]) \n\t" ++ PTR_ADDU "%[tmp0], %[tmp0], %[addr] \n\t" ++ "gsldlc1 %[ftmp6], 0x07(%[tmp0]) \n\t" ++ "gsldrc1 %[ftmp6], 0x00(%[tmp0]) \n\t" ++ PTR_ADDU "%[tmp0], %[tmp0], %[addr] \n\t" ++ "gsldlc1 %[ftmp7], 0x07(%[tmp0]) \n\t" ++ "gsldrc1 %[ftmp7], 0x00(%[tmp0]) \n\t" ++ PTR_ADDU "%[tmp0], %[tmp0], %[addr] \n\t" ++ "gsldlc1 %[ftmp8], 0x07(%[tmp0]) \n\t" ++ "gsldrc1 %[ftmp8], 0x00(%[tmp0]) \n\t" ++ PTR_ADDU "%[tmp0], %[tmp0], %[addr] \n\t" ++ "gsldlc1 %[ftmp9], 0x07(%[tmp0]) \n\t" ++ "gsldrc1 %[ftmp9], 0x00(%[tmp0]) \n\t" ++ PTR_ADDU "%[tmp0], %[tmp0], %[addr] \n\t" ++ "gsldlc1 %[ftmp10], 0x07(%[tmp0]) \n\t" ++ "gsldrc1 %[ftmp10], 0x00(%[tmp0]) \n\t" ++ PTR_ADDU "%[tmp0], %[tmp0], %[addr] \n\t" ++ "gsldlc1 %[ftmp11], 0x07(%[tmp0]) \n\t" ++ "gsldrc1 %[ftmp11], 0x00(%[tmp0]) \n\t" ++ "punpcklbh %[ftmp4], %[ftmp4], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp5], %[ftmp5], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp6], %[ftmp6], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp7], %[ftmp7], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp8], %[ftmp8], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp9], %[ftmp9], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp10], %[ftmp10], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp11], %[ftmp11], %[ftmp0] \n\t" ++ PTR_ADDIU "%[width], %[width], -0x04 \n\t" ++ /* Get raw data */ ++ GET_DATA_V_MMI ++ ROUND_POWER_OF_TWO_MMI(%[srcl], %[ftmp13], %[ftmp5], ++ %[ftmp6], %[tmp0]) ++ ROUND_POWER_OF_TWO_MMI(%[srch], %[ftmp13], %[ftmp5], ++ %[ftmp6], %[tmp0]) ++ "packsswh %[srcl], %[srcl], %[srch] \n\t" ++ "packushb %[ftmp12], %[srcl], %[ftmp0] \n\t" ++ "swc1 %[ftmp12], 0x00(%[dst]) \n\t" ++ PTR_ADDIU "%[dst], %[dst], 0x04 \n\t" ++ PTR_ADDIU "%[src], %[src], 0x04 \n\t" ++ /* Loop count */ ++ "bnez %[width], 1b \n\t" ++ PTR_SUBU "%[width], %[addr], %[src_stride] \n\t" ++ PTR_ADDU "%[src], %[src], %[src_stride] \n\t" ++ PTR_ADDU "%[dst], %[dst], %[dst_stride] \n\t" ++ PTR_ADDIU "%[height], %[height], -0x01 \n\t" ++ "bnez %[height], 1b \n\t" ++ : [srcl]"=&f"(ftmp[0]), [srch]"=&f"(ftmp[1]), ++ [filter10]"=&f"(ftmp[2]), [filter32]"=&f"(ftmp[3]), ++ [filter54]"=&f"(ftmp[4]), [filter76]"=&f"(ftmp[5]), ++ [ftmp0]"=&f"(ftmp[6]), [ftmp4]"=&f"(ftmp[7]), ++ [ftmp5]"=&f"(ftmp[8]), [ftmp6]"=&f"(ftmp[9]), ++ [ftmp7]"=&f"(ftmp[10]), [ftmp8]"=&f"(ftmp[11]), ++ [ftmp9]"=&f"(ftmp[12]), [ftmp10]"=&f"(ftmp[13]), ++ [ftmp11]"=&f"(ftmp[14]), [ftmp12]"=&f"(ftmp[15]), ++ [src]"+&r"(src), [dst]"+&r"(dst), ++ [width]"+&r"(w), [height]"+&r"(h), ++ [tmp0]"=&r"(tmp[0]), [ftmp13]"=&f"(ftmp[16]) ++ : [filter]"r"(filter_y), ++ [src_stride]"r"((mips_reg)src_stride), ++ [dst_stride]"r"((mips_reg)dst_stride), ++ [addr]"r"((mips_reg)addr) ++ : "memory" ++ ); ++} ++ ++static void convolve_avg_horiz_mmi(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const uint16_t *filter_x, int32_t w, ++ int32_t h) ++{ ++ double ftmp[15]; ++ uint32_t tmp[2]; ++ src -= 3; ++ src_stride -= w; ++ dst_stride -= w; ++ ++ __asm__ volatile ( ++ "move %[tmp1], %[width] \n\t" ++ "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "gsldlc1 %[filter1], 0x03(%[filter]) \n\t" ++ "gsldrc1 %[filter1], 0x00(%[filter]) \n\t" ++ "gsldlc1 %[filter2], 0x0b(%[filter]) \n\t" ++ "gsldrc1 %[filter2], 0x08(%[filter]) \n\t" ++ "li %[tmp0], 0x07 \n\t" ++ "dmtc1 %[tmp0], %[ftmp13] \n\t" ++ "punpcklwd %[ftmp13], %[ftmp13], %[ftmp13] \n\t" ++ "1: \n\t" ++ /* Get 8 data per row */ ++ "gsldlc1 %[ftmp5], 0x07(%[src]) \n\t" ++ "gsldrc1 %[ftmp5], 0x00(%[src]) \n\t" ++ "gsldlc1 %[ftmp7], 0x08(%[src]) \n\t" ++ "gsldrc1 %[ftmp7], 0x01(%[src]) \n\t" ++ "gsldlc1 %[ftmp9], 0x09(%[src]) \n\t" ++ "gsldrc1 %[ftmp9], 0x02(%[src]) \n\t" ++ "gsldlc1 %[ftmp11], 0x0A(%[src]) \n\t" ++ "gsldrc1 %[ftmp11], 0x03(%[src]) \n\t" ++ "punpcklbh %[ftmp4], %[ftmp5], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp5], %[ftmp5], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp6], %[ftmp7], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp7], %[ftmp7], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp8], %[ftmp9], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp9], %[ftmp9], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp10], %[ftmp11], %[ftmp0] \n\t" ++ "punpckhbh %[ftmp11], %[ftmp11], %[ftmp0] \n\t" ++ PTR_ADDIU "%[width], %[width], -0x04 \n\t" ++ /* Get raw data */ ++ GET_DATA_H_MMI ++ ROUND_POWER_OF_TWO_MMI(%[srcl], %[ftmp13], %[ftmp5], ++ %[ftmp6], %[tmp0]) ++ ROUND_POWER_OF_TWO_MMI(%[srch], %[ftmp13], %[ftmp5], ++ %[ftmp6], %[tmp0]) ++ "packsswh %[srcl], %[srcl], %[srch] \n\t" ++ "packushb %[ftmp12], %[srcl], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp12], %[ftmp12], %[ftmp0] \n\t" ++ "gsldlc1 %[ftmp4], 0x07(%[dst]) \n\t" ++ "gsldrc1 %[ftmp4], 0x00(%[dst]) \n\t" ++ "punpcklbh %[ftmp4], %[ftmp4], %[ftmp0] \n\t" ++ "paddh %[ftmp12], %[ftmp12], %[ftmp4] \n\t" ++ "li %[tmp0], 0x10001 \n\t" ++ "dmtc1 %[tmp0], %[ftmp5] \n\t" ++ "punpcklhw %[ftmp5], %[ftmp5], %[ftmp5] \n\t" ++ "paddh %[ftmp12], %[ftmp12], %[ftmp5] \n\t" ++ "psrah %[ftmp12], %[ftmp12], %[ftmp5] \n\t" ++ "packushb %[ftmp12], %[ftmp12], %[ftmp0] \n\t" ++ "swc1 %[ftmp12], 0x00(%[dst]) \n\t" ++ PTR_ADDIU "%[dst], %[dst], 0x04 \n\t" ++ PTR_ADDIU "%[src], %[src], 0x04 \n\t" ++ /* Loop count */ ++ "bnez %[width], 1b \n\t" ++ "move %[width], %[tmp1] \n\t" ++ PTR_ADDU "%[src], %[src], %[src_stride] \n\t" ++ PTR_ADDU "%[dst], %[dst], %[dst_stride] \n\t" ++ PTR_ADDIU "%[height], %[height], -0x01 \n\t" ++ "bnez %[height], 1b \n\t" ++ : [srcl]"=&f"(ftmp[0]), [srch]"=&f"(ftmp[1]), ++ [filter1]"=&f"(ftmp[2]), [filter2]"=&f"(ftmp[3]), ++ [ftmp0]"=&f"(ftmp[4]), [ftmp4]"=&f"(ftmp[5]), ++ [ftmp5]"=&f"(ftmp[6]), [ftmp6]"=&f"(ftmp[7]), ++ [ftmp7]"=&f"(ftmp[8]), [ftmp8]"=&f"(ftmp[9]), ++ [ftmp9]"=&f"(ftmp[10]), [ftmp10]"=&f"(ftmp[11]), ++ [ftmp11]"=&f"(ftmp[12]), [ftmp12]"=&f"(ftmp[13]), ++ [tmp0]"=&r"(tmp[0]), [tmp1]"=&r"(tmp[1]), ++ [src]"+&r"(src), [width]"+&r"(w), ++ [dst]"+&r"(dst), [height]"+&r"(h), ++ [ftmp13]"=&f"(ftmp[14]) ++ : [filter]"r"(filter_x), ++ [src_stride]"r"((mips_reg)src_stride), ++ [dst_stride]"r"((mips_reg)dst_stride) ++ : "memory" ++ ); ++} ++ ++static void convolve_avg_vert_mmi(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int16_t *filter_y, int32_t w, ++ int32_t h) ++{ ++ double ftmp[17]; ++ uint32_t tmp[1]; ++ ptrdiff_t addr = src_stride; ++ src_stride -= w; ++ dst_stride -= w; ++ ++ __asm__ volatile ( ++ "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "gsldlc1 %[ftmp4], 0x03(%[filter]) \n\t" ++ "gsldrc1 %[ftmp4], 0x00(%[filter]) \n\t" ++ "gsldlc1 %[ftmp5], 0x0b(%[filter]) \n\t" ++ "gsldrc1 %[ftmp5], 0x08(%[filter]) \n\t" ++ "punpcklwd %[filter10], %[ftmp4], %[ftmp4] \n\t" ++ "punpckhwd %[filter32], %[ftmp4], %[ftmp4] \n\t" ++ "punpcklwd %[filter54], %[ftmp5], %[ftmp5] \n\t" ++ "punpckhwd %[filter76], %[ftmp5], %[ftmp5] \n\t" ++ "li %[tmp0], 0x07 \n\t" ++ "dmtc1 %[tmp0], %[ftmp13] \n\t" ++ "punpcklwd %[ftmp13], %[ftmp13], %[ftmp13] \n\t" ++ "1: \n\t" ++ /* Get 8 data per column */ ++ "gsldlc1 %[ftmp4], 0x07(%[src]) \n\t" ++ "gsldrc1 %[ftmp4], 0x00(%[src]) \n\t" ++ PTR_ADDU "%[tmp0], %[src], %[addr] \n\t" ++ "gsldlc1 %[ftmp5], 0x07(%[tmp0]) \n\t" ++ "gsldrc1 %[ftmp5], 0x00(%[tmp0]) \n\t" ++ PTR_ADDU "%[tmp0], %[tmp0], %[addr] \n\t" ++ "gsldlc1 %[ftmp6], 0x07(%[tmp0]) \n\t" ++ "gsldrc1 %[ftmp6], 0x00(%[tmp0]) \n\t" ++ PTR_ADDU "%[tmp0], %[tmp0], %[addr] \n\t" ++ "gsldlc1 %[ftmp7], 0x07(%[tmp0]) \n\t" ++ "gsldrc1 %[ftmp7], 0x00(%[tmp0]) \n\t" ++ PTR_ADDU "%[tmp0], %[tmp0], %[addr] \n\t" ++ "gsldlc1 %[ftmp8], 0x07(%[tmp0]) \n\t" ++ "gsldrc1 %[ftmp8], 0x00(%[tmp0]) \n\t" ++ PTR_ADDU "%[tmp0], %[tmp0], %[addr] \n\t" ++ "gsldlc1 %[ftmp9], 0x07(%[tmp0]) \n\t" ++ "gsldrc1 %[ftmp9], 0x00(%[tmp0]) \n\t" ++ PTR_ADDU "%[tmp0], %[tmp0], %[addr] \n\t" ++ "gsldlc1 %[ftmp10], 0x07(%[tmp0]) \n\t" ++ "gsldrc1 %[ftmp10], 0x00(%[tmp0]) \n\t" ++ PTR_ADDU "%[tmp0], %[tmp0], %[addr] \n\t" ++ "gsldlc1 %[ftmp11], 0x07(%[tmp0]) \n\t" ++ "gsldrc1 %[ftmp11], 0x00(%[tmp0]) \n\t" ++ "punpcklbh %[ftmp4], %[ftmp4], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp5], %[ftmp5], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp6], %[ftmp6], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp7], %[ftmp7], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp8], %[ftmp8], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp9], %[ftmp9], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp10], %[ftmp10], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp11], %[ftmp11], %[ftmp0] \n\t" ++ PTR_ADDIU "%[width], %[width], -0x04 \n\t" ++ /* Get raw data */ ++ GET_DATA_V_MMI ++ ROUND_POWER_OF_TWO_MMI(%[srcl], %[ftmp13], %[ftmp5], ++ %[ftmp6], %[tmp0]) ++ ROUND_POWER_OF_TWO_MMI(%[srch], %[ftmp13], %[ftmp5], ++ %[ftmp6], %[tmp0]) ++ "packsswh %[srcl], %[srcl], %[srch] \n\t" ++ "packushb %[ftmp12], %[srcl], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp12], %[ftmp12], %[ftmp0] \n\t" ++ "gsldlc1 %[ftmp4], 0x07(%[dst]) \n\t" ++ "gsldrc1 %[ftmp4], 0x00(%[dst]) \n\t" ++ "punpcklbh %[ftmp4], %[ftmp4], %[ftmp0] \n\t" ++ "paddh %[ftmp12], %[ftmp12], %[ftmp4] \n\t" ++ "li %[tmp0], 0x10001 \n\t" ++ "dmtc1 %[tmp0], %[ftmp5] \n\t" ++ "punpcklhw %[ftmp5], %[ftmp5], %[ftmp5] \n\t" ++ "paddh %[ftmp12], %[ftmp12], %[ftmp5] \n\t" ++ "psrah %[ftmp12], %[ftmp12], %[ftmp5] \n\t" ++ "packushb %[ftmp12], %[ftmp12], %[ftmp0] \n\t" ++ "swc1 %[ftmp12], 0x00(%[dst]) \n\t" ++ PTR_ADDIU "%[dst], %[dst], 0x04 \n\t" ++ PTR_ADDIU "%[src], %[src], 0x04 \n\t" ++ /* Loop count */ ++ "bnez %[width], 1b \n\t" ++ PTR_SUBU "%[width], %[addr], %[src_stride] \n\t" ++ PTR_ADDU "%[src], %[src], %[src_stride] \n\t" ++ PTR_ADDU "%[dst], %[dst], %[dst_stride] \n\t" ++ PTR_ADDIU "%[height], %[height], -0x01 \n\t" ++ "bnez %[height], 1b \n\t" ++ : [srcl]"=&f"(ftmp[0]), [srch]"=&f"(ftmp[1]), ++ [filter10]"=&f"(ftmp[2]), [filter32]"=&f"(ftmp[3]), ++ [filter54]"=&f"(ftmp[4]), [filter76]"=&f"(ftmp[5]), ++ [ftmp0]"=&f"(ftmp[6]), [ftmp4]"=&f"(ftmp[7]), ++ [ftmp5]"=&f"(ftmp[8]), [ftmp6]"=&f"(ftmp[9]), ++ [ftmp7]"=&f"(ftmp[10]), [ftmp8]"=&f"(ftmp[11]), ++ [ftmp9]"=&f"(ftmp[12]), [ftmp10]"=&f"(ftmp[13]), ++ [ftmp11]"=&f"(ftmp[14]), [ftmp12]"=&f"(ftmp[15]), ++ [src]"+&r"(src), [dst]"+&r"(dst), ++ [width]"+&r"(w), [height]"+&r"(h), ++ [tmp0]"=&r"(tmp[0]), [ftmp13]"=&f"(ftmp[16]) ++ : [filter]"r"(filter_y), ++ [src_stride]"r"((mips_reg)src_stride), ++ [dst_stride]"r"((mips_reg)dst_stride), ++ [addr]"r"((mips_reg)addr) ++ : "memory" ++ ); ++} ++ ++static void convolve_avg_mmi(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ int32_t w, int32_t h) ++{ ++ double ftmp[4]; ++ uint32_t tmp[2]; ++ src_stride -= w; ++ dst_stride -= w; ++ ++ __asm__ volatile ( ++ "move %[tmp1], %[width] \n\t" ++ "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "li %[tmp0], 0x10001 \n\t" ++ "dmtc1 %[tmp0], %[ftmp3] \n\t" ++ "punpcklhw %[ftmp3], %[ftmp3], %[ftmp3] \n\t" ++ "1: \n\t" ++ "gslwlc1 %[ftmp1], 0x07(%[src]) \n\t" ++ "gslwrc1 %[ftmp1], 0x00(%[src]) \n\t" ++ "gslwlc1 %[ftmp2], 0x07(%[dst]) \n\t" ++ "gslwrc1 %[ftmp2], 0x00(%[dst]) \n\t" ++ "punpcklbh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" ++ "punpcklbh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" ++ "paddh %[ftmp1], %[ftmp1], %[ftmp2] \n\t" ++ "paddh %[ftmp1], %[ftmp1], %[ftmp3] \n\t" ++ "psrah %[ftmp1], %[ftmp1], %[ftmp3] \n\t" ++ "packushb %[ftmp1], %[ftmp1], %[ftmp0] \n\t" ++ "swc1 %[ftmp1], 0x00(%[dst]) \n\t" ++ PTR_ADDIU "%[width], %[width], -0x04 \n\t" ++ PTR_ADDIU "%[dst], %[dst], 0x04 \n\t" ++ PTR_ADDIU "%[src], %[src], 0x04 \n\t" ++ "bnez %[width], 1b \n\t" ++ "move %[width], %[tmp1] \n\t" ++ PTR_ADDU "%[dst], %[dst], %[dst_stride] \n\t" ++ PTR_ADDU "%[src], %[src], %[src_stride] \n\t" ++ PTR_ADDIU "%[height], %[height], -0x01 \n\t" ++ "bnez %[height], 1b \n\t" ++ : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), ++ [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), ++ [tmp0]"=&r"(tmp[0]), [tmp1]"=&r"(tmp[1]), ++ [src]"+&r"(src), [dst]"+&r"(dst), ++ [width]"+&r"(w), [height]"+&r"(h) ++ : [src_stride]"r"((mips_reg)src_stride), ++ [dst_stride]"r"((mips_reg)dst_stride) ++ : "memory" ++ ); ++} ++ ++static const int16_t vp9_subpel_filters_mmi[3][15][8] = { ++ [FILTER_8TAP_REGULAR] = { ++ {0, 1, -5, 126, 8, -3, 1, 0}, ++ {-1, 3, -10, 122, 18, -6, 2, 0}, ++ {-1, 4, -13, 118, 27, -9, 3, -1}, ++ {-1, 4, -16, 112, 37, -11, 4, -1}, ++ {-1, 5, -18, 105, 48, -14, 4, -1}, ++ {-1, 5, -19, 97, 58, -16, 5, -1}, ++ {-1, 6, -19, 88, 68, -18, 5, -1}, ++ {-1, 6, -19, 78, 78, -19, 6, -1}, ++ {-1, 5, -18, 68, 88, -19, 6, -1}, ++ {-1, 5, -16, 58, 97, -19, 5, -1}, ++ {-1, 4, -14, 48, 105, -18, 5, -1}, ++ {-1, 4, -11, 37, 112, -16, 4, -1}, ++ {-1, 3, -9, 27, 118, -13, 4, -1}, ++ {0, 2, -6, 18, 122, -10, 3, -1}, ++ {0, 1, -3, 8, 126, -5, 1, 0}, ++ }, [FILTER_8TAP_SHARP] = { ++ {-1, 3, -7, 127, 8, -3, 1, 0}, ++ {-2, 5, -13, 125, 17, -6, 3, -1}, ++ {-3, 7, -17, 121, 27, -10, 5, -2}, ++ {-4, 9, -20, 115, 37, -13, 6, -2}, ++ {-4, 10, -23, 108, 48, -16, 8, -3}, ++ {-4, 10, -24, 100, 59, -19, 9, -3}, ++ {-4, 11, -24, 90, 70, -21, 10, -4}, ++ {-4, 11, -23, 80, 80, -23, 11, -4}, ++ {-4, 10, -21, 70, 90, -24, 11, -4}, ++ {-3, 9, -19, 59, 100, -24, 10, -4}, ++ {-3, 8, -16, 48, 108, -23, 10, -4}, ++ {-2, 6, -13, 37, 115, -20, 9, -4}, ++ {-2, 5, -10, 27, 121, -17, 7, -3}, ++ {-1, 3, -6, 17, 125, -13, 5, -2}, ++ {0, 1, -3, 8, 127, -7, 3, -1}, ++ }, [FILTER_8TAP_SMOOTH] = { ++ {-3, -1, 32, 64, 38, 1, -3, 0}, ++ {-2, -2, 29, 63, 41, 2, -3, 0}, ++ {-2, -2, 26, 63, 43, 4, -4, 0}, ++ {-2, -3, 24, 62, 46, 5, -4, 0}, ++ {-2, -3, 21, 60, 49, 7, -4, 0}, ++ {-1, -4, 18, 59, 51, 9, -4, 0}, ++ {-1, -4, 16, 57, 53, 12, -4, -1}, ++ {-1, -4, 14, 55, 55, 14, -4, -1}, ++ {-1, -4, 12, 53, 57, 16, -4, -1}, ++ {0, -4, 9, 51, 59, 18, -4, -1}, ++ {0, -4, 7, 49, 60, 21, -3, -2}, ++ {0, -4, 5, 46, 62, 24, -3, -2}, ++ {0, -4, 4, 43, 63, 26, -2, -2}, ++ {0, -3, 2, 41, 63, 29, -2, -2}, ++ {0, -3, 1, 38, 64, 32, -1, -3}, ++ } ++}; ++ ++#define VP9_8TAP_MIPS_MMI_FUNC(SIZE, TYPE, TYPE_IDX) \ ++void ff_put_8tap_##TYPE##_##SIZE##h_mmi(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my) \ ++{ \ ++ const int16_t *filter = vp9_subpel_filters_mmi[TYPE_IDX][mx-1]; \ ++ \ ++ convolve_horiz_mmi(src, srcstride, dst, dststride, filter, SIZE, h); \ ++} \ ++ \ ++void ff_put_8tap_##TYPE##_##SIZE##v_mmi(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my) \ ++{ \ ++ const int16_t *filter = vp9_subpel_filters_mmi[TYPE_IDX][my-1]; \ ++ \ ++ src -= (3 * srcstride); \ ++ convolve_vert_mmi(src, srcstride, dst, dststride, filter, SIZE, h); \ ++} \ ++ \ ++void ff_put_8tap_##TYPE##_##SIZE##hv_mmi(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my) \ ++{ \ ++ const uint16_t *hfilter = vp9_subpel_filters_mmi[TYPE_IDX][mx-1]; \ ++ const uint16_t *vfilter = vp9_subpel_filters_mmi[TYPE_IDX][my-1]; \ ++ \ ++ int tmp_h = h + 7; \ ++ uint8_t temp[64 * 71]; \ ++ src -= (3 * srcstride); \ ++ convolve_horiz_mmi(src, srcstride, temp, 64, hfilter, SIZE, tmp_h); \ ++ convolve_vert_mmi(temp, 64, dst, dststride, vfilter, SIZE, h); \ ++} \ ++ \ ++void ff_avg_8tap_##TYPE##_##SIZE##h_mmi(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my) \ ++{ \ ++ const int16_t *filter = vp9_subpel_filters_mmi[TYPE_IDX][mx-1]; \ ++ \ ++ convolve_avg_horiz_mmi(src, srcstride, dst, dststride, filter, SIZE, h); \ ++} \ ++ \ ++void ff_avg_8tap_##TYPE##_##SIZE##v_mmi(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my) \ ++{ \ ++ const int16_t *filter = vp9_subpel_filters_mmi[TYPE_IDX][my-1]; \ ++ \ ++ src -= (3 * srcstride); \ ++ convolve_avg_vert_mmi(src, srcstride, dst, dststride, filter, SIZE, h); \ ++} \ ++ \ ++void ff_avg_8tap_##TYPE##_##SIZE##hv_mmi(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my) \ ++{ \ ++ const uint16_t *hfilter = vp9_subpel_filters_mmi[TYPE_IDX][mx-1]; \ ++ const uint16_t *vfilter = vp9_subpel_filters_mmi[TYPE_IDX][my-1]; \ ++ \ ++ uint8_t temp1[64 * 64]; \ ++ uint8_t temp2[64 * 71]; \ ++ int tmp_h = h + 7; \ ++ src -= (3 * srcstride); \ ++ convolve_horiz_mmi(src, srcstride, temp2, 64, hfilter, SIZE, tmp_h); \ ++ convolve_vert_mmi(temp2, 64, temp1, 64, vfilter, SIZE, h); \ ++ convolve_avg_mmi(temp1, 64, dst, dststride, SIZE, h); \ ++} ++ ++VP9_8TAP_MIPS_MMI_FUNC(64, regular, FILTER_8TAP_REGULAR); ++VP9_8TAP_MIPS_MMI_FUNC(32, regular, FILTER_8TAP_REGULAR); ++VP9_8TAP_MIPS_MMI_FUNC(16, regular, FILTER_8TAP_REGULAR); ++VP9_8TAP_MIPS_MMI_FUNC(8, regular, FILTER_8TAP_REGULAR); ++VP9_8TAP_MIPS_MMI_FUNC(4, regular, FILTER_8TAP_REGULAR); ++ ++VP9_8TAP_MIPS_MMI_FUNC(64, sharp, FILTER_8TAP_SHARP); ++VP9_8TAP_MIPS_MMI_FUNC(32, sharp, FILTER_8TAP_SHARP); ++VP9_8TAP_MIPS_MMI_FUNC(16, sharp, FILTER_8TAP_SHARP); ++VP9_8TAP_MIPS_MMI_FUNC(8, sharp, FILTER_8TAP_SHARP); ++VP9_8TAP_MIPS_MMI_FUNC(4, sharp, FILTER_8TAP_SHARP); ++ ++VP9_8TAP_MIPS_MMI_FUNC(64, smooth, FILTER_8TAP_SMOOTH); ++VP9_8TAP_MIPS_MMI_FUNC(32, smooth, FILTER_8TAP_SMOOTH); ++VP9_8TAP_MIPS_MMI_FUNC(16, smooth, FILTER_8TAP_SMOOTH); ++VP9_8TAP_MIPS_MMI_FUNC(8, smooth, FILTER_8TAP_SMOOTH); ++VP9_8TAP_MIPS_MMI_FUNC(4, smooth, FILTER_8TAP_SMOOTH); ++ ++#undef VP9_8TAP_MIPS_MMI_FUNC +diff --git a/libavcodec/mips/vp9_mc_msa.c b/libavcodec/mips/vp9_mc_msa.c +index 749e8cb..57ea425 100644 +--- a/libavcodec/mips/vp9_mc_msa.c ++++ b/libavcodec/mips/vp9_mc_msa.c +@@ -153,7 +153,7 @@ static const int8_t vp9_bilinear_filters_msa[15][2] = { + \ + PCKEV_B2_UB(in1, in0, in3, in2, tmp0_m, tmp1_m); \ + AVER_UB2_UB(tmp0_m, dst0, tmp1_m, dst1, tmp0_m, tmp1_m); \ +- ST8x4_UB(tmp0_m, tmp1_m, pdst_m, stride); \ ++ ST_D4(tmp0_m, tmp1_m, 0, 1, 0, 1, pdst_m, stride); \ + } + + static void common_hz_8t_4x4_msa(const uint8_t *src, int32_t src_stride, +@@ -182,7 +182,7 @@ static void common_hz_8t_4x4_msa(const uint8_t *src, int32_t src_stride, + SRARI_H2_SH(out0, out1, 7); + SAT_SH2_SH(out0, out1, 7); + out = PCKEV_XORI128_UB(out0, out1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + } + + static void common_hz_8t_4x8_msa(const uint8_t *src, int32_t src_stride, +@@ -217,10 +217,9 @@ static void common_hz_8t_4x8_msa(const uint8_t *src, int32_t src_stride, + SRARI_H4_SH(out0, out1, out2, out3, 7); + SAT_SH4_SH(out0, out1, out2, out3, 7); + out = PCKEV_XORI128_UB(out0, out1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + out = PCKEV_XORI128_UB(out2, out3); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst + 4 * dst_stride, dst_stride); + } + + static void common_hz_8t_4w_msa(const uint8_t *src, int32_t src_stride, +@@ -262,7 +261,7 @@ static void common_hz_8t_8x4_msa(const uint8_t *src, int32_t src_stride, + SAT_SH4_SH(out0, out1, out2, out3, 7); + tmp0 = PCKEV_XORI128_UB(out0, out1); + tmp1 = PCKEV_XORI128_UB(out2, out3); +- ST8x4_UB(tmp0, tmp1, dst, dst_stride); ++ ST_D4(tmp0, tmp1, 0, 1, 0, 1, dst, dst_stride); + } + + static void common_hz_8t_8x8mult_msa(const uint8_t *src, int32_t src_stride, +@@ -296,7 +295,7 @@ static void common_hz_8t_8x8mult_msa(const uint8_t *src, int32_t src_stride, + SAT_SH4_SH(out0, out1, out2, out3, 7); + tmp0 = PCKEV_XORI128_UB(out0, out1); + tmp1 = PCKEV_XORI128_UB(out2, out3); +- ST8x4_UB(tmp0, tmp1, dst, dst_stride); ++ ST_D4(tmp0, tmp1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + } + } +@@ -510,7 +509,7 @@ static void common_vt_8t_4w_msa(const uint8_t *src, int32_t src_stride, + SRARI_H2_SH(out10, out32, 7); + SAT_SH2_SH(out10, out32, 7); + out = PCKEV_XORI128_UB(out10, out32); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + + src2110 = src6554; +@@ -562,7 +561,7 @@ static void common_vt_8t_8w_msa(const uint8_t *src, int32_t src_stride, + SAT_SH4_SH(out0_r, out1_r, out2_r, out3_r, 7); + tmp0 = PCKEV_XORI128_UB(out0_r, out1_r); + tmp1 = PCKEV_XORI128_UB(out2_r, out3_r); +- ST8x4_UB(tmp0, tmp1, dst, dst_stride); ++ ST_D4(tmp0, tmp1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + + src10_r = src54_r; +@@ -796,7 +795,7 @@ static void common_hv_8ht_8vt_4w_msa(const uint8_t *src, int32_t src_stride, + filt_hz1, filt_hz2, filt_hz3); + hz_out5 = HORIZ_8TAP_FILT(src5, src6, mask0, mask1, mask2, mask3, filt_hz0, + filt_hz1, filt_hz2, filt_hz3); +- SLDI_B2_SH(hz_out2, hz_out4, hz_out0, hz_out2, hz_out1, hz_out3, 8); ++ SLDI_B2_SH(hz_out2, hz_out0, hz_out4, hz_out2, 8, hz_out1, hz_out3); + + filt = LD_SH(filter_vert); + SPLATI_H4_SH(filt, 0, 1, 2, 3, filt_vt0, filt_vt1, filt_vt2, filt_vt3); +@@ -825,7 +824,7 @@ static void common_hv_8ht_8vt_4w_msa(const uint8_t *src, int32_t src_stride, + SRARI_H2_SH(tmp0, tmp1, 7); + SAT_SH2_SH(tmp0, tmp1, 7); + out = PCKEV_XORI128_UB(tmp0, tmp1); +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + + hz_out5 = hz_out9; +@@ -920,7 +919,7 @@ static void common_hv_8ht_8vt_8w_msa(const uint8_t *src, int32_t src_stride, + SAT_SH4_SH(tmp0, tmp1, tmp2, tmp3, 7); + vec0 = PCKEV_XORI128_UB(tmp0, tmp1); + vec1 = PCKEV_XORI128_UB(tmp2, tmp3); +- ST8x4_UB(vec0, vec1, dst, dst_stride); ++ ST_D4(vec0, vec1, 0, 1, 0, 1, dst, dst_stride); + dst += (4 * dst_stride); + + hz_out6 = hz_out10; +@@ -1016,7 +1015,7 @@ static void common_hz_8t_and_aver_dst_4x4_msa(const uint8_t *src, + SAT_SH2_SH(res0, res1, 7); + res = PCKEV_XORI128_UB(res0, res1); + res = (v16u8) __msa_aver_u_b(res, dst0); +- ST4x4_UB(res, res, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(res, 0, 1, 2, 3, dst, dst_stride); + } + + static void common_hz_8t_and_aver_dst_4x8_msa(const uint8_t *src, +@@ -1061,7 +1060,7 @@ static void common_hz_8t_and_aver_dst_4x8_msa(const uint8_t *src, + ILVR_D2_UB(res1, res0, res3, res2, res0, res2); + XORI_B2_128_UB(res0, res2); + AVER_UB2_UB(res0, dst0, res2, dst1, res0, res2); +- ST4x8_UB(res0, res2, dst, dst_stride); ++ ST_W8(res0, res2, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + } + + static void common_hz_8t_and_aver_dst_4w_msa(const uint8_t *src, +@@ -1348,7 +1347,7 @@ static void common_vt_8t_and_aver_dst_4w_msa(const uint8_t *src, + out = PCKEV_XORI128_UB(out10, out32); + out = __msa_aver_u_b(out, dst0); + +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + + src2110 = src6554; +@@ -1586,7 +1585,7 @@ static void common_hv_8ht_8vt_and_aver_dst_4w_msa(const uint8_t *src, + filt_hz1, filt_hz2, filt_hz3); + hz_out5 = HORIZ_8TAP_FILT(src5, src6, mask0, mask1, mask2, mask3, filt_hz0, + filt_hz1, filt_hz2, filt_hz3); +- SLDI_B2_SH(hz_out2, hz_out4, hz_out0, hz_out2, hz_out1, hz_out3, 8); ++ SLDI_B2_SH(hz_out2, hz_out0, hz_out4, hz_out2, 8, hz_out1, hz_out3); + + filt = LD_SH(filter_vert); + SPLATI_H4_SH(filt, 0, 1, 2, 3, filt_vt0, filt_vt1, filt_vt2, filt_vt3); +@@ -1619,7 +1618,7 @@ static void common_hv_8ht_8vt_and_aver_dst_4w_msa(const uint8_t *src, + SAT_SH2_SH(res0, res1, 7); + res = PCKEV_XORI128_UB(res0, res1); + res = (v16u8) __msa_aver_u_b(res, dst0); +- ST4x4_UB(res, res, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(res, 0, 1, 2, 3, dst, dst_stride); + dst += (4 * dst_stride); + + hz_out5 = hz_out9; +@@ -1812,7 +1811,8 @@ static void common_hz_2t_4x4_msa(const uint8_t *src, int32_t src_stride, + DOTP_UB2_UH(vec0, vec1, filt0, filt0, vec2, vec3); + SRARI_H2_UH(vec2, vec3, 7); + PCKEV_B2_UB(vec2, vec2, vec3, vec3, res0, res1); +- ST4x4_UB(res0, res1, 0, 1, 0, 1, dst, dst_stride); ++ ST_W2(res0, 0, 1, dst, dst_stride); ++ ST_W2(res1, 0, 1, dst + 2 * dst_stride, dst_stride); + } + + static void common_hz_2t_4x8_msa(const uint8_t *src, int32_t src_stride, +@@ -1838,9 +1838,10 @@ static void common_hz_2t_4x8_msa(const uint8_t *src, int32_t src_stride, + SRARI_H4_UH(vec4, vec5, vec6, vec7, 7); + PCKEV_B4_SB(vec4, vec4, vec5, vec5, vec6, vec6, vec7, vec7, + res0, res1, res2, res3); +- ST4x4_UB(res0, res1, 0, 1, 0, 1, dst, dst_stride); +- dst += (4 * dst_stride); +- ST4x4_UB(res2, res3, 0, 1, 0, 1, dst, dst_stride); ++ ST_W2(res0, 0, 1, dst, dst_stride); ++ ST_W2(res1, 0, 1, dst + 2 * dst_stride, dst_stride); ++ ST_W2(res2, 0, 1, dst + 4 * dst_stride, dst_stride); ++ ST_W2(res3, 0, 1, dst + 6 * dst_stride, dst_stride); + } + + void ff_put_bilin_4h_msa(uint8_t *dst, ptrdiff_t dst_stride, +@@ -1877,7 +1878,7 @@ static void common_hz_2t_8x4_msa(const uint8_t *src, int32_t src_stride, + vec0, vec1, vec2, vec3); + SRARI_H4_UH(vec0, vec1, vec2, vec3, 7); + PCKEV_B2_SB(vec1, vec0, vec3, vec2, src0, src1); +- ST8x4_UB(src0, src1, dst, dst_stride); ++ ST_D4(src0, src1, 0, 1, 0, 1, dst, dst_stride); + } + + static void common_hz_2t_8x8mult_msa(const uint8_t *src, int32_t src_stride, +@@ -1906,8 +1907,7 @@ static void common_hz_2t_8x8mult_msa(const uint8_t *src, int32_t src_stride, + src += (4 * src_stride); + + PCKEV_B2_SB(vec1, vec0, vec3, vec2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + + VSHF_B2_UH(src0, src0, src1, src1, mask, mask, vec0, vec1); + VSHF_B2_UH(src2, src2, src3, src3, mask, mask, vec2, vec3); +@@ -1915,8 +1915,8 @@ static void common_hz_2t_8x8mult_msa(const uint8_t *src, int32_t src_stride, + vec0, vec1, vec2, vec3); + SRARI_H4_UH(vec0, vec1, vec2, vec3, 7); + PCKEV_B2_SB(vec1, vec0, vec3, vec2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst + 4 * dst_stride, dst_stride); ++ dst += (8 * dst_stride); + + if (16 == height) { + LD_SB4(src, src_stride, src0, src1, src2, src3); +@@ -1931,7 +1931,7 @@ static void common_hz_2t_8x8mult_msa(const uint8_t *src, int32_t src_stride, + src += (4 * src_stride); + + PCKEV_B2_SB(vec1, vec0, vec3, vec2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + + VSHF_B2_UH(src0, src0, src1, src1, mask, mask, vec0, vec1); + VSHF_B2_UH(src2, src2, src3, src3, mask, mask, vec2, vec3); +@@ -1939,7 +1939,7 @@ static void common_hz_2t_8x8mult_msa(const uint8_t *src, int32_t src_stride, + vec0, vec1, vec2, vec3); + SRARI_H4_UH(vec0, vec1, vec2, vec3, 7); + PCKEV_B2_SB(vec1, vec0, vec3, vec2, out0, out1); +- ST8x4_UB(out0, out1, dst + 4 * dst_stride, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst + 4 * dst_stride, dst_stride); + } + } + +@@ -2093,7 +2093,7 @@ void ff_put_bilin_64h_msa(uint8_t *dst, ptrdiff_t dst_stride, + src4 = LD_SB(src + 32); + src6 = LD_SB(src + 48); + src7 = LD_SB(src + 56); +- SLDI_B3_SB(src2, src4, src6, src0, src2, src4, src1, src3, src5, 8); ++ SLDI_B3_SB(src2, src0, src4, src2, src6, src4, 8, src1, src3, src5); + src += src_stride; + + VSHF_B2_UB(src0, src0, src1, src1, mask, mask, vec0, vec1); +@@ -2137,7 +2137,7 @@ static void common_vt_2t_4x4_msa(const uint8_t *src, int32_t src_stride, + SRARI_H2_UH(tmp0, tmp1, 7); + SAT_UH2_UH(tmp0, tmp1, 7); + src2110 = __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0); +- ST4x4_UB(src2110, src2110, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(src2110, 0, 1, 2, 3, dst, dst_stride); + } + + static void common_vt_2t_4x8_msa(const uint8_t *src, int32_t src_stride, +@@ -2171,8 +2171,7 @@ static void common_vt_2t_4x8_msa(const uint8_t *src, int32_t src_stride, + SRARI_H4_UH(tmp0, tmp1, tmp2, tmp3, 7); + SAT_UH4_UH(tmp0, tmp1, tmp2, tmp3, 7); + PCKEV_B2_SB(tmp1, tmp0, tmp3, tmp2, src2110, src4332); +- ST4x4_UB(src2110, src2110, 0, 1, 2, 3, dst, dst_stride); +- ST4x4_UB(src4332, src4332, 0, 1, 2, 3, dst + 4 * dst_stride, dst_stride); ++ ST_W8(src2110, src4332, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + } + + void ff_put_bilin_4v_msa(uint8_t *dst, ptrdiff_t dst_stride, +@@ -2209,7 +2208,7 @@ static void common_vt_2t_8x4_msa(const uint8_t *src, int32_t src_stride, + SRARI_H4_UH(tmp0, tmp1, tmp2, tmp3, 7); + SAT_UH4_UH(tmp0, tmp1, tmp2, tmp3, 7); + PCKEV_B2_SB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + } + + static void common_vt_2t_8x8mult_msa(const uint8_t *src, int32_t src_stride, +@@ -2243,16 +2242,15 @@ static void common_vt_2t_8x8mult_msa(const uint8_t *src, int32_t src_stride, + SRARI_H4_UH(tmp0, tmp1, tmp2, tmp3, 7); + SAT_UH4_UH(tmp0, tmp1, tmp2, tmp3, 7); + PCKEV_B2_SB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + + DOTP_UB4_UH(vec4, vec5, vec6, vec7, filt0, filt0, filt0, filt0, + tmp0, tmp1, tmp2, tmp3); + SRARI_H4_UH(tmp0, tmp1, tmp2, tmp3, 7); + SAT_UH4_UH(tmp0, tmp1, tmp2, tmp3, 7); + PCKEV_B2_SB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst + 4 * dst_stride, dst_stride); ++ dst += (8 * dst_stride); + + src0 = src8; + } +@@ -2514,7 +2512,8 @@ static void common_hv_2ht_2vt_4x4_msa(const uint8_t *src, int32_t src_stride, + SRARI_H2_UH(tmp0, tmp1, 7); + SAT_UH2_UH(tmp0, tmp1, 7); + PCKEV_B2_UB(tmp0, tmp0, tmp1, tmp1, res0, res1); +- ST4x4_UB(res0, res1, 0, 1, 0, 1, dst, dst_stride); ++ ST_W2(res0, 0, 1, dst, dst_stride); ++ ST_W2(res1, 0, 1, dst + 2 * dst_stride, dst_stride); + } + + static void common_hv_2ht_2vt_4x8_msa(const uint8_t *src, int32_t src_stride, +@@ -2545,8 +2544,8 @@ static void common_hv_2ht_2vt_4x8_msa(const uint8_t *src, int32_t src_stride, + hz_out4 = HORIZ_2TAP_FILT_UH(src4, src5, mask, filt_hz, 7); + hz_out6 = HORIZ_2TAP_FILT_UH(src6, src7, mask, filt_hz, 7); + hz_out8 = HORIZ_2TAP_FILT_UH(src8, src8, mask, filt_hz, 7); +- SLDI_B3_UH(hz_out2, hz_out4, hz_out6, hz_out0, hz_out2, hz_out4, hz_out1, +- hz_out3, hz_out5, 8); ++ SLDI_B3_UH(hz_out2, hz_out0, hz_out4, hz_out2, hz_out6, hz_out4, 8, hz_out1, ++ hz_out3, hz_out5); + hz_out7 = (v8u16) __msa_pckod_d((v2i64) hz_out8, (v2i64) hz_out6); + + ILVEV_B2_UB(hz_out0, hz_out1, hz_out2, hz_out3, vec0, vec1); +@@ -2557,9 +2556,10 @@ static void common_hv_2ht_2vt_4x8_msa(const uint8_t *src, int32_t src_stride, + SAT_UH4_UH(vec4, vec5, vec6, vec7, 7); + PCKEV_B4_SB(vec4, vec4, vec5, vec5, vec6, vec6, vec7, vec7, + res0, res1, res2, res3); +- ST4x4_UB(res0, res1, 0, 1, 0, 1, dst, dst_stride); +- dst += (4 * dst_stride); +- ST4x4_UB(res2, res3, 0, 1, 0, 1, dst, dst_stride); ++ ST_W2(res0, 0, 1, dst, dst_stride); ++ ST_W2(res1, 0, 1, dst + 2 * dst_stride, dst_stride); ++ ST_W2(res2, 0, 1, dst + 4 * dst_stride, dst_stride); ++ ST_W2(res3, 0, 1, dst + 6 * dst_stride, dst_stride); + } + + void ff_put_bilin_4hv_msa(uint8_t *dst, ptrdiff_t dst_stride, +@@ -2618,7 +2618,7 @@ static void common_hv_2ht_2vt_8x4_msa(const uint8_t *src, int32_t src_stride, + SRARI_H4_UH(tmp0, tmp1, tmp2, tmp3, 7); + SAT_UH4_UH(tmp0, tmp1, tmp2, tmp3, 7); + PCKEV_B2_SB(tmp1, tmp0, tmp3, tmp2, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + } + + static void common_hv_2ht_2vt_8x8mult_msa(const uint8_t *src, int32_t src_stride, +@@ -2674,8 +2674,7 @@ static void common_hv_2ht_2vt_8x8mult_msa(const uint8_t *src, int32_t src_stride + SRARI_H2_UH(tmp3, tmp4, 7); + SAT_UH2_UH(tmp3, tmp4, 7); + PCKEV_B2_SB(tmp2, tmp1, tmp4, tmp3, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); + + hz_out1 = HORIZ_2TAP_FILT_UH(src1, src1, mask, filt_hz, 7); + vec0 = (v16u8) __msa_ilvev_b((v16i8) hz_out1, (v16i8) hz_out0); +@@ -2696,8 +2695,8 @@ static void common_hv_2ht_2vt_8x8mult_msa(const uint8_t *src, int32_t src_stride + SRARI_H4_UH(tmp5, tmp6, tmp7, tmp8, 7); + SAT_UH4_UH(tmp5, tmp6, tmp7, tmp8, 7); + PCKEV_B2_SB(tmp6, tmp5, tmp8, tmp7, out0, out1); +- ST8x4_UB(out0, out1, dst, dst_stride); +- dst += (4 * dst_stride); ++ ST_D4(out0, out1, 0, 1, 0, 1, dst + 4 * dst_stride, dst_stride); ++ dst += (8 * dst_stride); + } + } + +@@ -2842,7 +2841,7 @@ static void common_hz_2t_and_aver_dst_4x4_msa(const uint8_t *src, + res = (v16u8) __msa_pckev_b((v16i8) vec3, (v16i8) vec2); + res = (v16u8) __msa_aver_u_b(res, dst0); + +- ST4x4_UB(res, res, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(res, 0, 1, 2, 3, dst, dst_stride); + } + + static void common_hz_2t_and_aver_dst_4x8_msa(const uint8_t *src, +@@ -2876,7 +2875,7 @@ static void common_hz_2t_and_aver_dst_4x8_msa(const uint8_t *src, + res2, res3); + ILVR_D2_UB(res1, res0, res3, res2, res0, res2); + AVER_UB2_UB(res0, dst0, res2, dst1, res0, res2); +- ST4x8_UB(res0, res2, dst, dst_stride); ++ ST_W8(res0, res2, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + } + + void ff_avg_bilin_4h_msa(uint8_t *dst, ptrdiff_t dst_stride, +@@ -3147,7 +3146,7 @@ void ff_avg_bilin_64h_msa(uint8_t *dst, ptrdiff_t dst_stride, + for (loop_cnt = height; loop_cnt--;) { + LD_SB4(src, 16, src0, src2, src4, src6); + src7 = LD_SB(src + 56); +- SLDI_B3_SB(src2, src4, src6, src0, src2, src4, src1, src3, src5, 8); ++ SLDI_B3_SB(src2, src0, src4, src2, src6, src4, 8, src1, src3, src5); + src += src_stride; + + VSHF_B2_UB(src0, src0, src1, src1, mask, mask, vec0, vec1); +@@ -3202,7 +3201,7 @@ static void common_vt_2t_and_aver_dst_4x4_msa(const uint8_t *src, + out = (v16u8) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0); + out = __msa_aver_u_b(out, dst0); + +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + } + + static void common_vt_2t_and_aver_dst_4x8_msa(const uint8_t *src, +@@ -3241,7 +3240,7 @@ static void common_vt_2t_and_aver_dst_4x8_msa(const uint8_t *src, + SAT_UH4_UH(tmp0, tmp1, tmp2, tmp3, 7); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, src2110, src4332); + AVER_UB2_UB(src2110, dst0, src4332, dst1, src2110, src4332); +- ST4x8_UB(src2110, src4332, dst, dst_stride); ++ ST_W8(src2110, src4332, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + } + + void ff_avg_bilin_4v_msa(uint8_t *dst, ptrdiff_t dst_stride, +@@ -3620,7 +3619,7 @@ static void common_hv_2ht_2vt_and_aver_dst_4x4_msa(const uint8_t *src, + out = (v16u8) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0); + out = __msa_aver_u_b(out, dst0); + +- ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(out, 0, 1, 2, 3, dst, dst_stride); + } + + static void common_hv_2ht_2vt_and_aver_dst_4x8_msa(const uint8_t *src, +@@ -3656,8 +3655,8 @@ static void common_hv_2ht_2vt_and_aver_dst_4x8_msa(const uint8_t *src, + hz_out4 = HORIZ_2TAP_FILT_UH(src4, src5, mask, filt_hz, 7); + hz_out6 = HORIZ_2TAP_FILT_UH(src6, src7, mask, filt_hz, 7); + hz_out8 = HORIZ_2TAP_FILT_UH(src8, src8, mask, filt_hz, 7); +- SLDI_B3_UH(hz_out2, hz_out4, hz_out6, hz_out0, hz_out2, hz_out4, hz_out1, +- hz_out3, hz_out5, 8); ++ SLDI_B3_UH(hz_out2, hz_out0, hz_out4, hz_out2, hz_out6, hz_out4, 8, hz_out1, ++ hz_out3, hz_out5); + hz_out7 = (v8u16) __msa_pckod_d((v2i64) hz_out8, (v2i64) hz_out6); + + LW4(dst, dst_stride, tp0, tp1, tp2, tp3); +@@ -3672,7 +3671,7 @@ static void common_hv_2ht_2vt_and_aver_dst_4x8_msa(const uint8_t *src, + SAT_UH4_UH(tmp0, tmp1, tmp2, tmp3, 7); + PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, res0, res1); + AVER_UB2_UB(res0, dst0, res1, dst1, res0, res1); +- ST4x8_UB(res0, res1, dst, dst_stride); ++ ST_W8(res0, res1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + } + + void ff_avg_bilin_4hv_msa(uint8_t *dst, ptrdiff_t dst_stride, +@@ -4071,14 +4070,14 @@ static void avg_width4_msa(const uint8_t *src, int32_t src_stride, + LW4(dst + 4 * dst_stride, dst_stride, tp0, tp1, tp2, tp3); + INSERT_W4_UB(tp0, tp1, tp2, tp3, dst1); + AVER_UB2_UB(src0, dst0, src1, dst1, dst0, dst1); +- ST4x8_UB(dst0, dst1, dst, dst_stride); ++ ST_W8(dst0, dst1, 0, 1, 2, 3, 0, 1, 2, 3, dst, dst_stride); + } else if (4 == height) { + LW4(src, src_stride, tp0, tp1, tp2, tp3); + INSERT_W4_UB(tp0, tp1, tp2, tp3, src0); + LW4(dst, dst_stride, tp0, tp1, tp2, tp3); + INSERT_W4_UB(tp0, tp1, tp2, tp3, dst0); + dst0 = __msa_aver_u_b(src0, dst0); +- ST4x4_UB(dst0, dst0, 0, 1, 2, 3, dst, dst_stride); ++ ST_W4(dst0, 0, 1, 2, 3, dst, dst_stride); + } + } + +@@ -4109,7 +4108,7 @@ static void avg_width8_msa(const uint8_t *src, int32_t src_stride, + INSERT_D2_UB(tp6, tp7, dst3); + AVER_UB4_UB(src0, dst0, src1, dst1, src2, dst2, src3, dst3, dst0, + dst1, dst2, dst3); +- ST8x8_UB(dst0, dst1, dst2, dst3, dst, dst_stride); ++ ST_D8(dst0, dst1, dst2, dst3, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride); + dst += 8 * dst_stride; + } + } else if (4 == height) { +@@ -4120,7 +4119,7 @@ static void avg_width8_msa(const uint8_t *src, int32_t src_stride, + INSERT_D2_UB(tp0, tp1, dst0); + INSERT_D2_UB(tp2, tp3, dst1); + AVER_UB2_UB(src0, dst0, src1, dst1, dst0, dst1); +- ST8x4_UB(dst0, dst1, dst, dst_stride); ++ ST_D4(dst0, dst1, 0, 1, 0, 1, dst, dst_stride); + } + } + +diff --git a/libavcodec/mips/vp9dsp_init_mips.c b/libavcodec/mips/vp9dsp_init_mips.c +index c8a4890..5a8c599 100644 +--- a/libavcodec/mips/vp9dsp_init_mips.c ++++ b/libavcodec/mips/vp9dsp_init_mips.c +@@ -18,6 +18,7 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/mips/cpu.h" + #include "config.h" + #include "libavutil/common.h" + #include "libavcodec/vp9dsp.h" +@@ -168,9 +169,58 @@ static av_cold void vp9dsp_init_msa(VP9DSPContext *dsp, int bpp) + } + #endif // #if HAVE_MSA + ++#if HAVE_MMI ++static av_cold void vp9dsp_mc_init_mmi(VP9DSPContext *dsp) ++{ ++#define init_subpel1(idx1, idx2, idxh, idxv, sz, dir, type) \ ++ dsp->mc[idx1][FILTER_8TAP_SMOOTH ][idx2][idxh][idxv] = \ ++ ff_##type##_8tap_smooth_##sz##dir##_mmi; \ ++ dsp->mc[idx1][FILTER_8TAP_REGULAR][idx2][idxh][idxv] = \ ++ ff_##type##_8tap_regular_##sz##dir##_mmi; \ ++ dsp->mc[idx1][FILTER_8TAP_SHARP ][idx2][idxh][idxv] = \ ++ ff_##type##_8tap_sharp_##sz##dir##_mmi; ++ ++#define init_subpel2(idx, idxh, idxv, dir, type) \ ++ init_subpel1(0, idx, idxh, idxv, 64, dir, type); \ ++ init_subpel1(1, idx, idxh, idxv, 32, dir, type); \ ++ init_subpel1(2, idx, idxh, idxv, 16, dir, type); \ ++ init_subpel1(3, idx, idxh, idxv, 8, dir, type); \ ++ init_subpel1(4, idx, idxh, idxv, 4, dir, type) ++ ++#define init_subpel3(idx, type) \ ++ init_subpel2(idx, 1, 1, hv, type); \ ++ init_subpel2(idx, 0, 1, v, type); \ ++ init_subpel2(idx, 1, 0, h, type) ++ ++ init_subpel3(0, put); ++ init_subpel3(1, avg); ++ ++#undef init_subpel1 ++#undef init_subpel2 ++#undef init_subpel3 ++} ++ ++static av_cold void vp9dsp_init_mmi(VP9DSPContext *dsp, int bpp) ++{ ++ if (bpp == 8) { ++ vp9dsp_mc_init_mmi(dsp); ++ } ++} ++#endif // #if HAVE_MMI ++ + av_cold void ff_vp9dsp_init_mips(VP9DSPContext *dsp, int bpp) + { ++#if HAVE_MSA || HAVE_MMI ++ int cpu_flags = av_get_cpu_flags(); ++#endif ++ ++#if HAVE_MMI ++ if (have_mmi(cpu_flags)) ++ vp9dsp_init_mmi(dsp, bpp); ++#endif ++ + #if HAVE_MSA +- vp9dsp_init_msa(dsp, bpp); +-#endif // #if HAVE_MSA ++ if (have_msa(cpu_flags)) ++ vp9dsp_init_msa(dsp, bpp); ++#endif + } +diff --git a/libavcodec/mips/vp9dsp_mips.h b/libavcodec/mips/vp9dsp_mips.h +index 4d73038..0b6ce7c 100644 +--- a/libavcodec/mips/vp9dsp_mips.h ++++ b/libavcodec/mips/vp9dsp_mips.h +@@ -234,4 +234,54 @@ void ff_tm_16x16_msa(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, + void ff_tm_32x32_msa(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, + const uint8_t *top); + ++#define VP9_8TAP_MIPS_MMI_FUNC(SIZE, type, type_idx) \ ++void ff_put_8tap_##type##_##SIZE##h_mmi(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my); \ ++ \ ++void ff_put_8tap_##type##_##SIZE##v_mmi(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my); \ ++ \ ++void ff_put_8tap_##type##_##SIZE##hv_mmi(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my); \ ++ \ ++void ff_avg_8tap_##type##_##SIZE##h_mmi(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my); \ ++ \ ++void ff_avg_8tap_##type##_##SIZE##v_mmi(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my); \ ++ \ ++void ff_avg_8tap_##type##_##SIZE##hv_mmi(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my); ++ ++VP9_8TAP_MIPS_MMI_FUNC(64, regular, FILTER_8TAP_REGULAR); ++VP9_8TAP_MIPS_MMI_FUNC(32, regular, FILTER_8TAP_REGULAR); ++VP9_8TAP_MIPS_MMI_FUNC(16, regular, FILTER_8TAP_REGULAR); ++VP9_8TAP_MIPS_MMI_FUNC(8, regular, FILTER_8TAP_REGULAR); ++VP9_8TAP_MIPS_MMI_FUNC(4, regular, FILTER_8TAP_REGULAR); ++ ++VP9_8TAP_MIPS_MMI_FUNC(64, sharp, FILTER_8TAP_SHARP); ++VP9_8TAP_MIPS_MMI_FUNC(32, sharp, FILTER_8TAP_SHARP); ++VP9_8TAP_MIPS_MMI_FUNC(16, sharp, FILTER_8TAP_SHARP); ++VP9_8TAP_MIPS_MMI_FUNC(8, sharp, FILTER_8TAP_SHARP); ++VP9_8TAP_MIPS_MMI_FUNC(4, sharp, FILTER_8TAP_SHARP); ++ ++VP9_8TAP_MIPS_MMI_FUNC(64, smooth, FILTER_8TAP_SMOOTH); ++VP9_8TAP_MIPS_MMI_FUNC(32, smooth, FILTER_8TAP_SMOOTH); ++VP9_8TAP_MIPS_MMI_FUNC(16, smooth, FILTER_8TAP_SMOOTH); ++VP9_8TAP_MIPS_MMI_FUNC(8, smooth, FILTER_8TAP_SMOOTH); ++VP9_8TAP_MIPS_MMI_FUNC(4, smooth, FILTER_8TAP_SMOOTH); ++#undef VP9_8TAP_MIPS_MMI_FUNC ++ + #endif // #ifndef AVCODEC_MIPS_VP9DSP_MIPS_H +diff --git a/libavcodec/mips/wmv2dsp_init_mips.c b/libavcodec/mips/wmv2dsp_init_mips.c +index 51dd207..af14007 100644 +--- a/libavcodec/mips/wmv2dsp_init_mips.c ++++ b/libavcodec/mips/wmv2dsp_init_mips.c +@@ -18,21 +18,17 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/mips/cpu.h" + #include "config.h" + #include "libavutil/attributes.h" + #include "wmv2dsp_mips.h" + +-#if HAVE_MMI +-static av_cold void wmv2dsp_init_mmi(WMV2DSPContext *c) +-{ +- c->idct_add = ff_wmv2_idct_add_mmi; +- c->idct_put = ff_wmv2_idct_put_mmi; +-} +-#endif /* HAVE_MMI */ +- + av_cold void ff_wmv2dsp_init_mips(WMV2DSPContext *c) + { +-#if HAVE_MMI +- wmv2dsp_init_mmi(c); +-#endif /* HAVE_MMI */ ++ int cpu_flags = av_get_cpu_flags(); ++ ++ if (have_mmi(cpu_flags)) { ++ c->idct_add = ff_wmv2_idct_add_mmi; ++ c->idct_put = ff_wmv2_idct_put_mmi; ++ } + } +diff --git a/libavcodec/mips/wmv2dsp_mips.h b/libavcodec/mips/wmv2dsp_mips.h +index 22894c5..c96b3d9 100644 +--- a/libavcodec/mips/wmv2dsp_mips.h ++++ b/libavcodec/mips/wmv2dsp_mips.h +@@ -23,7 +23,7 @@ + + #include "libavcodec/wmv2dsp.h" + +-void ff_wmv2_idct_add_mmi(uint8_t *dest, int line_size, int16_t *block); +-void ff_wmv2_idct_put_mmi(uint8_t *dest, int line_size, int16_t *block); ++void ff_wmv2_idct_add_mmi(uint8_t *dest, ptrdiff_t line_size, int16_t *block); ++void ff_wmv2_idct_put_mmi(uint8_t *dest, ptrdiff_t line_size, int16_t *block); + + #endif /* AVCODEC_MIPS_WMV2DSP_MIPS_H */ +diff --git a/libavcodec/mips/wmv2dsp_mmi.c b/libavcodec/mips/wmv2dsp_mmi.c +index 1f6ccb2..82e16f9 100644 +--- a/libavcodec/mips/wmv2dsp_mmi.c ++++ b/libavcodec/mips/wmv2dsp_mmi.c +@@ -95,7 +95,7 @@ static void wmv2_idct_col_mmi(short * b) + b[56] = (a0 + a2 - a1 - a5 + 8192) >> 14; + } + +-void ff_wmv2_idct_add_mmi(uint8_t *dest, int line_size, int16_t *block) ++void ff_wmv2_idct_add_mmi(uint8_t *dest, ptrdiff_t line_size, int16_t *block) + { + int i; + double ftmp[11]; +@@ -212,7 +212,7 @@ void ff_wmv2_idct_add_mmi(uint8_t *dest, int line_size, int16_t *block) + ); + } + +-void ff_wmv2_idct_put_mmi(uint8_t *dest, int line_size, int16_t *block) ++void ff_wmv2_idct_put_mmi(uint8_t *dest, ptrdiff_t line_size, int16_t *block) + { + int i; + double ftmp[8]; +diff --git a/libavcodec/mips/xvid_idct_mmi.c b/libavcodec/mips/xvid_idct_mmi.c +index d3f9acb..b822b8a 100644 +--- a/libavcodec/mips/xvid_idct_mmi.c ++++ b/libavcodec/mips/xvid_idct_mmi.c +@@ -240,13 +240,13 @@ void ff_xvid_idct_mmi(int16_t *block) + ); + } + +-void ff_xvid_idct_put_mmi(uint8_t *dest, int32_t line_size, int16_t *block) ++void ff_xvid_idct_put_mmi(uint8_t *dest, ptrdiff_t line_size, int16_t *block) + { + ff_xvid_idct_mmi(block); + ff_put_pixels_clamped_mmi(block, dest, line_size); + } + +-void ff_xvid_idct_add_mmi(uint8_t *dest, int32_t line_size, int16_t *block) ++void ff_xvid_idct_add_mmi(uint8_t *dest, ptrdiff_t line_size, int16_t *block) + { + ff_xvid_idct_mmi(block); + ff_add_pixels_clamped_mmi(block, dest, line_size); +diff --git a/libavcodec/mips/xvididct_init_mips.c b/libavcodec/mips/xvididct_init_mips.c +index c1d82cc..ed545cf 100644 +--- a/libavcodec/mips/xvididct_init_mips.c ++++ b/libavcodec/mips/xvididct_init_mips.c +@@ -18,28 +18,23 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/mips/cpu.h" + #include "xvididct_mips.h" + +-#if HAVE_MMI +-static av_cold void xvid_idct_init_mmi(IDCTDSPContext *c, AVCodecContext *avctx, ++av_cold void ff_xvid_idct_init_mips(IDCTDSPContext *c, AVCodecContext *avctx, + unsigned high_bit_depth) + { +- if (!high_bit_depth) { +- if (avctx->idct_algo == FF_IDCT_AUTO || +- avctx->idct_algo == FF_IDCT_XVID) { +- c->idct_put = ff_xvid_idct_put_mmi; +- c->idct_add = ff_xvid_idct_add_mmi; +- c->idct = ff_xvid_idct_mmi; +- c->perm_type = FF_IDCT_PERM_NONE; ++ int cpu_flags = av_get_cpu_flags(); ++ ++ if (have_mmi(cpu_flags)) { ++ if (!high_bit_depth) { ++ if (avctx->idct_algo == FF_IDCT_AUTO || ++ avctx->idct_algo == FF_IDCT_XVID) { ++ c->idct_put = ff_xvid_idct_put_mmi; ++ c->idct_add = ff_xvid_idct_add_mmi; ++ c->idct = ff_xvid_idct_mmi; ++ c->perm_type = FF_IDCT_PERM_NONE; ++ } + } + } + } +-#endif /* HAVE_MMI */ +- +-av_cold void ff_xvid_idct_init_mips(IDCTDSPContext *c, AVCodecContext *avctx, +- unsigned high_bit_depth) +-{ +-#if HAVE_MMI +- xvid_idct_init_mmi(c, avctx, high_bit_depth); +-#endif /* HAVE_MMI */ +-} +diff --git a/libavcodec/mips/xvididct_mips.h b/libavcodec/mips/xvididct_mips.h +index 0768aaa..bee03c1 100644 +--- a/libavcodec/mips/xvididct_mips.h ++++ b/libavcodec/mips/xvididct_mips.h +@@ -24,7 +24,7 @@ + #include "libavcodec/xvididct.h" + + void ff_xvid_idct_mmi(int16_t *block); +-void ff_xvid_idct_put_mmi(uint8_t *dest, int32_t line_size, int16_t *block); +-void ff_xvid_idct_add_mmi(uint8_t *dest, int32_t line_size, int16_t *block); ++void ff_xvid_idct_put_mmi(uint8_t *dest, ptrdiff_t line_size, int16_t *block); ++void ff_xvid_idct_add_mmi(uint8_t *dest, ptrdiff_t line_size, int16_t *block); + + #endif /* AVCODEC_MIPS_XVIDIDCT_MIPS_H */ +diff --git a/libavcodec/vp3dsp.c b/libavcodec/vp3dsp.c +index fdaa292..cdf7d64 100644 +--- a/libavcodec/vp3dsp.c ++++ b/libavcodec/vp3dsp.c +@@ -293,4 +293,6 @@ av_cold void ff_vp3dsp_init(VP3DSPContext *c, int flags) + ff_vp3dsp_init_ppc(c, flags); + if (ARCH_X86) + ff_vp3dsp_init_x86(c, flags); ++ if (ARCH_MIPS) ++ ff_vp3dsp_init_mips(c, flags); + } +diff --git a/libavcodec/vp3dsp.h b/libavcodec/vp3dsp.h +index 2fdad16..f5f042d 100644 +--- a/libavcodec/vp3dsp.h ++++ b/libavcodec/vp3dsp.h +@@ -49,5 +49,6 @@ void ff_vp3dsp_init(VP3DSPContext *c, int flags); + void ff_vp3dsp_init_arm(VP3DSPContext *c, int flags); + void ff_vp3dsp_init_ppc(VP3DSPContext *c, int flags); + void ff_vp3dsp_init_x86(VP3DSPContext *c, int flags); ++void ff_vp3dsp_init_mips(VP3DSPContext *c, int flags); + + #endif /* AVCODEC_VP3DSP_H */ +diff --git a/libavutil/cpu.c b/libavutil/cpu.c +index 6548cc3..52f6b9a 100644 +--- a/libavutil/cpu.c ++++ b/libavutil/cpu.c +@@ -51,6 +51,8 @@ static atomic_int cpu_flags = ATOMIC_VAR_INIT(-1); + + static int get_cpu_flags(void) + { ++ if (ARCH_MIPS) ++ return ff_get_cpu_flags_mips(); + if (ARCH_AARCH64) + return ff_get_cpu_flags_aarch64(); + if (ARCH_ARM) +@@ -169,6 +171,9 @@ int av_parse_cpu_flags(const char *s) + { "armv8", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ARMV8 }, .unit = "flags" }, + { "neon", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_NEON }, .unit = "flags" }, + { "vfp", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_VFP }, .unit = "flags" }, ++#elif ARCH_MIPS ++ { "mmi", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_MMI }, .unit = "flags" }, ++ { "msa", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_MSA }, .unit = "flags" }, + #endif + { NULL }, + }; +@@ -250,6 +255,9 @@ int av_parse_cpu_caps(unsigned *flags, const char *s) + { "armv8", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ARMV8 }, .unit = "flags" }, + { "neon", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_NEON }, .unit = "flags" }, + { "vfp", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_VFP }, .unit = "flags" }, ++#elif ARCH_MIPS ++ { "mmi", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_MMI }, .unit = "flags" }, ++ { "msa", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_MSA }, .unit = "flags" }, + #endif + { NULL }, + }; +@@ -308,6 +316,8 @@ int av_cpu_count(void) + + size_t av_cpu_max_align(void) + { ++ if (ARCH_MIPS) ++ return ff_get_cpu_max_align_mips(); + if (ARCH_AARCH64) + return ff_get_cpu_max_align_aarch64(); + if (ARCH_ARM) +diff --git a/libavutil/cpu.h b/libavutil/cpu.h +index 8bb9eb6..83099dd 100644 +--- a/libavutil/cpu.h ++++ b/libavutil/cpu.h +@@ -71,6 +71,9 @@ + #define AV_CPU_FLAG_VFP_VM (1 << 7) ///< VFPv2 vector mode, deprecated in ARMv7-A and unavailable in various CPUs implementations + #define AV_CPU_FLAG_SETEND (1 <<16) + ++#define AV_CPU_FLAG_MMI (1 << 0) ++#define AV_CPU_FLAG_MSA (1 << 1) ++ + /** + * Return the flags which specify extensions supported by the CPU. + * The returned value is affected by av_force_cpu_flags() if that was used +diff --git a/libavutil/cpu_internal.h b/libavutil/cpu_internal.h +index 37122d1..8897643 100644 +--- a/libavutil/cpu_internal.h ++++ b/libavutil/cpu_internal.h +@@ -41,11 +41,13 @@ + #define CPUEXT_FAST(flags, cpuext) CPUEXT_SUFFIX_FAST(flags, , cpuext) + #define CPUEXT_SLOW(flags, cpuext) CPUEXT_SUFFIX_SLOW(flags, , cpuext) + ++int ff_get_cpu_flags_mips(void); + int ff_get_cpu_flags_aarch64(void); + int ff_get_cpu_flags_arm(void); + int ff_get_cpu_flags_ppc(void); + int ff_get_cpu_flags_x86(void); + ++size_t ff_get_cpu_max_align_mips(void); + size_t ff_get_cpu_max_align_aarch64(void); + size_t ff_get_cpu_max_align_arm(void); + size_t ff_get_cpu_max_align_ppc(void); +diff --git a/libavutil/mips/Makefile b/libavutil/mips/Makefile +index dbfa5aa..5f8c9b6 100644 +--- a/libavutil/mips/Makefile ++++ b/libavutil/mips/Makefile +@@ -1 +1 @@ +-OBJS += mips/float_dsp_mips.o ++OBJS += mips/float_dsp_mips.o mips/cpu.o +diff --git a/libavutil/mips/asmdefs.h b/libavutil/mips/asmdefs.h +index 7481199..76bb2b9 100644 +--- a/libavutil/mips/asmdefs.h ++++ b/libavutil/mips/asmdefs.h +@@ -55,4 +55,46 @@ + # define PTR_SLL "sll " + #endif + ++/* ++ * parse_r var, r - Helper assembler macro for parsing register names. ++ * ++ * This converts the register name in $n form provided in \r to the ++ * corresponding register number, which is assigned to the variable \var. It is ++ * needed to allow explicit encoding of instructions in inline assembly where ++ * registers are chosen by the compiler in $n form, allowing us to avoid using ++ * fixed register numbers. ++ * ++ * It also allows newer instructions (not implemented by the assembler) to be ++ * transparently implemented using assembler macros, instead of needing separate ++ * cases depending on toolchain support. ++ * ++ * Simple usage example: ++ * __asm__ __volatile__("parse_r __rt, %0\n\t" ++ * ".insn\n\t" ++ * "# di %0\n\t" ++ * ".word (0x41606000 | (__rt << 16))" ++ * : "=r" (status); ++ */ ++ ++/* Match an individual register number and assign to \var */ ++#define _IFC_REG(n) \ ++ ".ifc \\r, $" #n "\n\t" \ ++ "\\var = " #n "\n\t" \ ++ ".endif\n\t" ++ ++__asm__(".macro parse_r var r\n\t" ++ "\\var = -1\n\t" ++ _IFC_REG(0) _IFC_REG(1) _IFC_REG(2) _IFC_REG(3) ++ _IFC_REG(4) _IFC_REG(5) _IFC_REG(6) _IFC_REG(7) ++ _IFC_REG(8) _IFC_REG(9) _IFC_REG(10) _IFC_REG(11) ++ _IFC_REG(12) _IFC_REG(13) _IFC_REG(14) _IFC_REG(15) ++ _IFC_REG(16) _IFC_REG(17) _IFC_REG(18) _IFC_REG(19) ++ _IFC_REG(20) _IFC_REG(21) _IFC_REG(22) _IFC_REG(23) ++ _IFC_REG(24) _IFC_REG(25) _IFC_REG(26) _IFC_REG(27) ++ _IFC_REG(28) _IFC_REG(29) _IFC_REG(30) _IFC_REG(31) ++ ".iflt \\var\n\t" ++ ".error \"Unable to parse register name \\r\"\n\t" ++ ".endif\n\t" ++ ".endm"); ++ + #endif /* AVCODEC_MIPS_ASMDEFS_H */ +diff --git a/libavutil/mips/cpu.c b/libavutil/mips/cpu.c +new file mode 100644 +index 0000000..59619d5 +--- /dev/null ++++ b/libavutil/mips/cpu.c +@@ -0,0 +1,134 @@ ++/* ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/cpu.h" ++#include "libavutil/cpu_internal.h" ++#include "config.h" ++#if defined __linux__ || defined __ANDROID__ ++#include ++#include ++#include ++#include ++#include "asmdefs.h" ++#include "libavutil/avstring.h" ++#endif ++ ++#if defined __linux__ || defined __ANDROID__ ++ ++#define HWCAP_LOONGSON_CPUCFG (1 << 14) ++ ++static int cpucfg_available(void) ++{ ++ return getauxval(AT_HWCAP) & HWCAP_LOONGSON_CPUCFG; ++} ++ ++/* Most toolchains have no CPUCFG support yet */ ++static uint32_t read_cpucfg(uint32_t reg) ++{ ++ uint32_t __res; ++ ++ __asm__ __volatile__( ++ "parse_r __res,%0\n\t" ++ "parse_r reg,%1\n\t" ++ ".insn \n\t" ++ ".word (0xc8080118 | (reg << 21) | (__res << 11))\n\t" ++ :"=r"(__res) ++ :"r"(reg) ++ : ++ ); ++ return __res; ++} ++ ++#define LOONGSON_CFG1 0x1 ++ ++#define LOONGSON_CFG1_MMI (1 << 4) ++#define LOONGSON_CFG1_MSA1 (1 << 5) ++ ++static int cpu_flags_cpucfg(void) ++{ ++ int flags = 0; ++ uint32_t cfg1 = read_cpucfg(LOONGSON_CFG1); ++ ++ if (cfg1 & LOONGSON_CFG1_MMI) ++ flags |= AV_CPU_FLAG_MMI; ++ ++ if (cfg1 & LOONGSON_CFG1_MSA1) ++ flags |= AV_CPU_FLAG_MSA; ++ ++ return flags; ++} ++ ++static int cpu_flags_cpuinfo(void) ++{ ++ FILE *f = fopen("/proc/cpuinfo", "r"); ++ char buf[200]; ++ int flags = 0; ++ ++ if (!f) ++ return -1; ++ ++ while (fgets(buf, sizeof(buf), f)) { ++ /* Legacy kernel may not export MMI in ASEs implemented */ ++ if (av_strstart(buf, "cpu model", NULL)) { ++ if (strstr(buf, "Loongson-3 ")) ++ flags |= AV_CPU_FLAG_MMI; ++ } ++ ++ if (av_strstart(buf, "ASEs implemented", NULL)) { ++ if (strstr(buf, " loongson-mmi")) ++ flags |= AV_CPU_FLAG_MMI; ++ if (strstr(buf, " msa")) ++ flags |= AV_CPU_FLAG_MSA; ++ ++ break; ++ } ++ } ++ fclose(f); ++ return flags; ++} ++#endif ++ ++int ff_get_cpu_flags_mips(void) ++{ ++#if defined __linux__ || defined __ANDROID__ ++ if (cpucfg_available()) ++ return cpu_flags_cpucfg(); ++ else ++ return cpu_flags_cpuinfo(); ++#else ++ /* Assume no SIMD ASE supported */ ++ return 0; ++#endif ++} ++ ++size_t ff_get_cpu_max_align_mips(void) ++{ ++ int flags = av_get_cpu_flags(); ++ ++ if (flags & AV_CPU_FLAG_MSA) ++ return 16; ++ ++ /* ++ * MMI itself is 64-bit but quad word load & store ++ * needs 128-bit align. ++ */ ++ if (flags & AV_CPU_FLAG_MMI) ++ return 16; ++ ++ return 8; ++} +diff --git a/libavutil/mips/cpu.h b/libavutil/mips/cpu.h +new file mode 100644 +index 0000000..615dc49 +--- /dev/null ++++ b/libavutil/mips/cpu.h +@@ -0,0 +1,28 @@ ++/* ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef AVUTIL_MIPS_CPU_H ++#define AVUTIL_MIPS_CPU_H ++ ++#include "libavutil/cpu.h" ++#include "libavutil/cpu_internal.h" ++ ++#define have_mmi(flags) CPUEXT(flags, MMI) ++#define have_msa(flags) CPUEXT(flags, MSA) ++ ++#endif /* AVUTIL_MIPS_CPU_H */ +diff --git a/libavutil/mips/generic_macros_msa.h b/libavutil/mips/generic_macros_msa.h +index 6a46704..bb25e9f 100644 +--- a/libavutil/mips/generic_macros_msa.h ++++ b/libavutil/mips/generic_macros_msa.h +@@ -23,6 +23,11 @@ + + #include + #include ++#include ++ ++#if HAVE_MSA2 ++#include ++#endif + + #define ALIGNMENT 16 + #define ALLOC_ALIGNED(align) __attribute__ ((aligned((align) << 1))) +@@ -106,10 +111,11 @@ + uint32_t val_lw_m; \ + \ + __asm__ volatile ( \ +- "ulw %[val_lw_m], %[psrc_lw_m] \n\t" \ ++ "lwr %[val_lw_m], 0(%[psrc_lw_m]) \n\t" \ ++ "lwl %[val_lw_m], 3(%[psrc_lw_m]) \n\t" \ + \ +- : [val_lw_m] "=r" (val_lw_m) \ +- : [psrc_lw_m] "m" (*psrc_lw_m) \ ++ : [val_lw_m] "=&r"(val_lw_m) \ ++ : [psrc_lw_m] "r"(psrc_lw_m) \ + ); \ + \ + val_lw_m; \ +@@ -122,10 +128,11 @@ + uint64_t val_ld_m = 0; \ + \ + __asm__ volatile ( \ +- "uld %[val_ld_m], %[psrc_ld_m] \n\t" \ ++ "ldr %[val_ld_m], 0(%[psrc_ld_m]) \n\t" \ ++ "ldl %[val_ld_m], 7(%[psrc_ld_m]) \n\t" \ + \ +- : [val_ld_m] "=r" (val_ld_m) \ +- : [psrc_ld_m] "m" (*psrc_ld_m) \ ++ : [val_ld_m] "=&r" (val_ld_m) \ ++ : [psrc_ld_m] "r" (psrc_ld_m) \ + ); \ + \ + val_ld_m; \ +@@ -294,6 +301,7 @@ + #define LD_SB4(...) LD_V4(v16i8, __VA_ARGS__) + #define LD_UH4(...) LD_V4(v8u16, __VA_ARGS__) + #define LD_SH4(...) LD_V4(v8i16, __VA_ARGS__) ++#define LD_SW4(...) LD_V4(v4i32, __VA_ARGS__) + + #define LD_V5(RTYPE, psrc, stride, out0, out1, out2, out3, out4) \ + { \ +@@ -332,6 +340,7 @@ + #define LD_SB8(...) LD_V8(v16i8, __VA_ARGS__) + #define LD_UH8(...) LD_V8(v8u16, __VA_ARGS__) + #define LD_SH8(...) LD_V8(v8i16, __VA_ARGS__) ++#define LD_SW8(...) LD_V8(v4i32, __VA_ARGS__) + + #define LD_V16(RTYPE, psrc, stride, \ + out0, out1, out2, out3, out4, out5, out6, out7, \ +@@ -344,19 +353,6 @@ + } + #define LD_SH16(...) LD_V16(v8i16, __VA_ARGS__) + +-/* Description : Load as 4x4 block of signed halfword elements from 1D source +- data into 4 vectors (Each vector with 4 signed halfwords) +- Arguments : Inputs - psrc +- Outputs - out0, out1, out2, out3 +-*/ +-#define LD4x4_SH(psrc, out0, out1, out2, out3) \ +-{ \ +- out0 = LD_SH(psrc); \ +- out2 = LD_SH(psrc + 8); \ +- out1 = (v8i16) __msa_ilvl_d((v2i64) out0, (v2i64) out0); \ +- out3 = (v8i16) __msa_ilvl_d((v2i64) out2, (v2i64) out2); \ +-} +- + /* Description : Store vectors with stride + Arguments : Inputs - in0, in1, stride + Outputs - pdst (destination pointer to store to) +@@ -400,198 +396,127 @@ + #define ST_SH8(...) ST_V8(v8i16, __VA_ARGS__) + #define ST_SW8(...) ST_V8(v4i32, __VA_ARGS__) + +-/* Description : Store as 2x4 byte block to destination memory from input vector +- Arguments : Inputs - in, stidx, pdst, stride +- Return Type - unsigned byte +- Details : Index stidx halfword element from 'in' vector is copied and +- stored on first line +- Index stidx+1 halfword element from 'in' vector is copied and +- stored on second line +- Index stidx+2 halfword element from 'in' vector is copied and +- stored on third line +- Index stidx+3 halfword element from 'in' vector is copied and +- stored on fourth line +-*/ +-#define ST2x4_UB(in, stidx, pdst, stride) \ +-{ \ +- uint16_t out0_m, out1_m, out2_m, out3_m; \ +- uint8_t *pblk_2x4_m = (uint8_t *) (pdst); \ +- \ +- out0_m = __msa_copy_u_h((v8i16) in, (stidx)); \ +- out1_m = __msa_copy_u_h((v8i16) in, (stidx + 1)); \ +- out2_m = __msa_copy_u_h((v8i16) in, (stidx + 2)); \ +- out3_m = __msa_copy_u_h((v8i16) in, (stidx + 3)); \ +- \ +- SH(out0_m, pblk_2x4_m); \ +- SH(out1_m, pblk_2x4_m + stride); \ +- SH(out2_m, pblk_2x4_m + 2 * stride); \ +- SH(out3_m, pblk_2x4_m + 3 * stride); \ +-} +- +-/* Description : Store as 4x2 byte block to destination memory from input vector +- Arguments : Inputs - in, pdst, stride +- Return Type - unsigned byte +- Details : Index 0 word element from input vector is copied and stored +- on first line +- Index 1 word element from input vector is copied and stored +- on second line +-*/ +-#define ST4x2_UB(in, pdst, stride) \ +-{ \ +- uint32_t out0_m, out1_m; \ +- uint8_t *pblk_4x2_m = (uint8_t *) (pdst); \ +- \ +- out0_m = __msa_copy_u_w((v4i32) in, 0); \ +- out1_m = __msa_copy_u_w((v4i32) in, 1); \ +- \ +- SW(out0_m, pblk_4x2_m); \ +- SW(out1_m, pblk_4x2_m + stride); \ +-} +- +-/* Description : Store as 4x4 byte block to destination memory from input vector +- Arguments : Inputs - in0, in1, pdst, stride +- Return Type - unsigned byte +- Details : Idx0 word element from input vector 'in0' is copied and stored +- on first line +- Idx1 word element from input vector 'in0' is copied and stored +- on second line +- Idx2 word element from input vector 'in1' is copied and stored +- on third line +- Idx3 word element from input vector 'in1' is copied and stored +- on fourth line +-*/ +-#define ST4x4_UB(in0, in1, idx0, idx1, idx2, idx3, pdst, stride) \ +-{ \ +- uint32_t out0_m, out1_m, out2_m, out3_m; \ +- uint8_t *pblk_4x4_m = (uint8_t *) (pdst); \ +- \ +- out0_m = __msa_copy_u_w((v4i32) in0, idx0); \ +- out1_m = __msa_copy_u_w((v4i32) in0, idx1); \ +- out2_m = __msa_copy_u_w((v4i32) in1, idx2); \ +- out3_m = __msa_copy_u_w((v4i32) in1, idx3); \ +- \ +- SW4(out0_m, out1_m, out2_m, out3_m, pblk_4x4_m, stride); \ ++/* Description : Store half word elements of vector with stride ++ * Arguments : Inputs - in source vector ++ * - pdst (destination pointer to store to) ++ * - stride ++ * Details : Stores half word 'idx0' from 'in' to (pdst) ++ * Stores half word 'idx1' from 'in' to (pdst + stride) ++ * Similar for other elements ++ */ ++#define ST_H1(in, idx, pdst) \ ++{ \ ++ uint16_t out0_m; \ ++ out0_m = __msa_copy_u_h((v8i16) in, idx); \ ++ SH(out0_m, (pdst)); \ + } +-#define ST4x8_UB(in0, in1, pdst, stride) \ +-{ \ +- uint8_t *pblk_4x8 = (uint8_t *) (pdst); \ +- \ +- ST4x4_UB(in0, in0, 0, 1, 2, 3, pblk_4x8, stride); \ +- ST4x4_UB(in1, in1, 0, 1, 2, 3, pblk_4x8 + 4 * stride, stride); \ ++#define ST_H2(in, idx0, idx1, pdst, stride) \ ++{ \ ++ uint16_t out0_m, out1_m; \ ++ out0_m = __msa_copy_u_h((v8i16) in, idx0); \ ++ out1_m = __msa_copy_u_h((v8i16) in, idx1); \ ++ SH(out0_m, (pdst)); \ ++ SH(out1_m, (pdst) + stride); \ ++} ++#define ST_H4(in, idx0, idx1, idx2, idx3, pdst, stride) \ ++{ \ ++ uint16_t out0_m, out1_m, out2_m, out3_m; \ ++ out0_m = __msa_copy_u_h((v8i16) in, idx0); \ ++ out1_m = __msa_copy_u_h((v8i16) in, idx1); \ ++ out2_m = __msa_copy_u_h((v8i16) in, idx2); \ ++ out3_m = __msa_copy_u_h((v8i16) in, idx3); \ ++ SH(out0_m, (pdst)); \ ++ SH(out1_m, (pdst) + stride); \ ++ SH(out2_m, (pdst) + 2 * stride); \ ++ SH(out3_m, (pdst) + 3 * stride); \ ++} ++#define ST_H8(in, idx0, idx1, idx2, idx3, idx4, idx5, \ ++ idx6, idx7, pdst, stride) \ ++{ \ ++ ST_H4(in, idx0, idx1, idx2, idx3, pdst, stride) \ ++ ST_H4(in, idx4, idx5, idx6, idx7, (pdst) + 4*stride, stride) \ + } + +-/* Description : Store as 6x4 byte block to destination memory from input +- vectors +- Arguments : Inputs - in0, in1, pdst, stride +- Return Type - unsigned byte +- Details : Index 0 word element from input vector 'in0' is copied and +- stored on first line followed by index 2 halfword element +- Index 2 word element from input vector 'in0' is copied and +- stored on second line followed by index 2 halfword element +- Index 0 word element from input vector 'in1' is copied and +- stored on third line followed by index 2 halfword element +- Index 2 word element from input vector 'in1' is copied and +- stored on fourth line followed by index 2 halfword element +-*/ +-#define ST6x4_UB(in0, in1, pdst, stride) \ ++/* Description : Store word elements of vector with stride ++ * Arguments : Inputs - in source vector ++ * - pdst (destination pointer to store to) ++ * - stride ++ * Details : Stores word 'idx0' from 'in' to (pdst) ++ * Stores word 'idx1' from 'in' to (pdst + stride) ++ * Similar for other elements ++ */ ++#define ST_W1(in, idx, pdst) \ ++{ \ ++ uint32_t out0_m; \ ++ out0_m = __msa_copy_u_w((v4i32) in, idx); \ ++ SW(out0_m, (pdst)); \ ++} ++#define ST_W2(in, idx0, idx1, pdst, stride) \ ++{ \ ++ uint32_t out0_m, out1_m; \ ++ out0_m = __msa_copy_u_w((v4i32) in, idx0); \ ++ out1_m = __msa_copy_u_w((v4i32) in, idx1); \ ++ SW(out0_m, (pdst)); \ ++ SW(out1_m, (pdst) + stride); \ ++} ++#define ST_W4(in, idx0, idx1, idx2, idx3, pdst, stride) \ ++{ \ ++ uint32_t out0_m, out1_m, out2_m, out3_m; \ ++ out0_m = __msa_copy_u_w((v4i32) in, idx0); \ ++ out1_m = __msa_copy_u_w((v4i32) in, idx1); \ ++ out2_m = __msa_copy_u_w((v4i32) in, idx2); \ ++ out3_m = __msa_copy_u_w((v4i32) in, idx3); \ ++ SW(out0_m, (pdst)); \ ++ SW(out1_m, (pdst) + stride); \ ++ SW(out2_m, (pdst) + 2*stride); \ ++ SW(out3_m, (pdst) + 3*stride); \ ++} ++#define ST_W8(in0, in1, idx0, idx1, idx2, idx3, \ ++ idx4, idx5, idx6, idx7, pdst, stride) \ ++{ \ ++ ST_W4(in0, idx0, idx1, idx2, idx3, pdst, stride) \ ++ ST_W4(in1, idx4, idx5, idx6, idx7, pdst + 4*stride, stride) \ ++} ++ ++/* Description : Store double word elements of vector with stride ++ * Arguments : Inputs - in source vector ++ * - pdst (destination pointer to store to) ++ * - stride ++ * Details : Stores double word 'idx0' from 'in' to (pdst) ++ * Stores double word 'idx1' from 'in' to (pdst + stride) ++ * Similar for other elements ++ */ ++#define ST_D1(in, idx, pdst) \ + { \ +- uint32_t out0_m, out1_m, out2_m, out3_m; \ +- uint16_t out4_m, out5_m, out6_m, out7_m; \ +- uint8_t *pblk_6x4_m = (uint8_t *) (pdst); \ +- \ +- out0_m = __msa_copy_u_w((v4i32) in0, 0); \ +- out1_m = __msa_copy_u_w((v4i32) in0, 2); \ +- out2_m = __msa_copy_u_w((v4i32) in1, 0); \ +- out3_m = __msa_copy_u_w((v4i32) in1, 2); \ +- \ +- out4_m = __msa_copy_u_h((v8i16) in0, 2); \ +- out5_m = __msa_copy_u_h((v8i16) in0, 6); \ +- out6_m = __msa_copy_u_h((v8i16) in1, 2); \ +- out7_m = __msa_copy_u_h((v8i16) in1, 6); \ +- \ +- SW(out0_m, pblk_6x4_m); \ +- SH(out4_m, (pblk_6x4_m + 4)); \ +- pblk_6x4_m += stride; \ +- SW(out1_m, pblk_6x4_m); \ +- SH(out5_m, (pblk_6x4_m + 4)); \ +- pblk_6x4_m += stride; \ +- SW(out2_m, pblk_6x4_m); \ +- SH(out6_m, (pblk_6x4_m + 4)); \ +- pblk_6x4_m += stride; \ +- SW(out3_m, pblk_6x4_m); \ +- SH(out7_m, (pblk_6x4_m + 4)); \ +-} +- +-/* Description : Store as 8x1 byte block to destination memory from input vector +- Arguments : Inputs - in, pdst +- Details : Index 0 double word element from input vector 'in' is copied +- and stored to destination memory at (pdst) +-*/ +-#define ST8x1_UB(in, pdst) \ +-{ \ +- uint64_t out0_m; \ +- out0_m = __msa_copy_u_d((v2i64) in, 0); \ +- SD(out0_m, pdst); \ +-} +- +-/* Description : Store as 8x2 byte block to destination memory from input vector +- Arguments : Inputs - in, pdst, stride +- Details : Index 0 double word element from input vector 'in' is copied +- and stored to destination memory at (pdst) +- Index 1 double word element from input vector 'in' is copied +- and stored to destination memory at (pdst + stride) +-*/ +-#define ST8x2_UB(in, pdst, stride) \ ++ uint64_t out0_m; \ ++ out0_m = __msa_copy_u_d((v2i64) in, idx); \ ++ SD(out0_m, (pdst)); \ ++} ++#define ST_D2(in, idx0, idx1, pdst, stride) \ + { \ + uint64_t out0_m, out1_m; \ +- uint8_t *pblk_8x2_m = (uint8_t *) (pdst); \ +- \ +- out0_m = __msa_copy_u_d((v2i64) in, 0); \ +- out1_m = __msa_copy_u_d((v2i64) in, 1); \ +- \ +- SD(out0_m, pblk_8x2_m); \ +- SD(out1_m, pblk_8x2_m + stride); \ +-} +- +-/* Description : Store as 8x4 byte block to destination memory from input +- vectors +- Arguments : Inputs - in0, in1, pdst, stride +- Details : Index 0 double word element from input vector 'in0' is copied +- and stored to destination memory at (pblk_8x4_m) +- Index 1 double word element from input vector 'in0' is copied +- and stored to destination memory at (pblk_8x4_m + stride) +- Index 0 double word element from input vector 'in1' is copied +- and stored to destination memory at (pblk_8x4_m + 2 * stride) +- Index 1 double word element from input vector 'in1' is copied +- and stored to destination memory at (pblk_8x4_m + 3 * stride) +-*/ +-#define ST8x4_UB(in0, in1, pdst, stride) \ +-{ \ +- uint64_t out0_m, out1_m, out2_m, out3_m; \ +- uint8_t *pblk_8x4_m = (uint8_t *) (pdst); \ +- \ +- out0_m = __msa_copy_u_d((v2i64) in0, 0); \ +- out1_m = __msa_copy_u_d((v2i64) in0, 1); \ +- out2_m = __msa_copy_u_d((v2i64) in1, 0); \ +- out3_m = __msa_copy_u_d((v2i64) in1, 1); \ +- \ +- SD4(out0_m, out1_m, out2_m, out3_m, pblk_8x4_m, stride); \ ++ out0_m = __msa_copy_u_d((v2i64) in, idx0); \ ++ out1_m = __msa_copy_u_d((v2i64) in, idx1); \ ++ SD(out0_m, (pdst)); \ ++ SD(out1_m, (pdst) + stride); \ + } +-#define ST8x8_UB(in0, in1, in2, in3, pdst, stride) \ +-{ \ +- uint8_t *pblk_8x8_m = (uint8_t *) (pdst); \ +- \ +- ST8x4_UB(in0, in1, pblk_8x8_m, stride); \ +- ST8x4_UB(in2, in3, pblk_8x8_m + 4 * stride, stride); \ +-} +-#define ST12x4_UB(in0, in1, in2, pdst, stride) \ ++#define ST_D4(in0, in1, idx0, idx1, idx2, idx3, pdst, stride) \ + { \ +- uint8_t *pblk_12x4_m = (uint8_t *) (pdst); \ +- \ +- /* left 8x4 */ \ +- ST8x4_UB(in0, in1, pblk_12x4_m, stride); \ +- /* right 4x4 */ \ +- ST4x4_UB(in2, in2, 0, 1, 2, 3, pblk_12x4_m + 8, stride); \ ++ uint64_t out0_m, out1_m, out2_m, out3_m; \ ++ out0_m = __msa_copy_u_d((v2i64) in0, idx0); \ ++ out1_m = __msa_copy_u_d((v2i64) in0, idx1); \ ++ out2_m = __msa_copy_u_d((v2i64) in1, idx2); \ ++ out3_m = __msa_copy_u_d((v2i64) in1, idx3); \ ++ SD(out0_m, (pdst)); \ ++ SD(out1_m, (pdst) + stride); \ ++ SD(out2_m, (pdst) + 2 * stride); \ ++ SD(out3_m, (pdst) + 3 * stride); \ ++} ++#define ST_D8(in0, in1, in2, in3, idx0, idx1, idx2, idx3, \ ++ idx4, idx5, idx6, idx7, pdst, stride) \ ++{ \ ++ ST_D4(in0, in1, idx0, idx1, idx2, idx3, pdst, stride) \ ++ ST_D4(in2, in3, idx4, idx5, idx6, idx7, pdst + 4 * stride, stride) \ + } + + /* Description : Store as 12x8 byte block to destination memory from +@@ -681,67 +606,48 @@ + } + #define AVER_UB4_UB(...) AVER_UB4(v16u8, __VA_ARGS__) + +-/* Description : Immediate number of columns to slide with zero +- Arguments : Inputs - in0, in1, slide_val +- Outputs - out0, out1 ++/* Description : Immediate number of columns to slide ++ Arguments : Inputs - s, d, slide_val ++ Outputs - out + Return Type - as per RTYPE +- Details : Byte elements from 'zero_m' vector are slide into 'in0' by ++ Details : Byte elements from 'd' vector are slide into 's' by + number of elements specified by 'slide_val' + */ +-#define SLDI_B2_0(RTYPE, in0, in1, out0, out1, slide_val) \ +-{ \ +- v16i8 zero_m = { 0 }; \ +- out0 = (RTYPE) __msa_sldi_b((v16i8) zero_m, (v16i8) in0, slide_val); \ +- out1 = (RTYPE) __msa_sldi_b((v16i8) zero_m, (v16i8) in1, slide_val); \ +-} +-#define SLDI_B2_0_UB(...) SLDI_B2_0(v16u8, __VA_ARGS__) +-#define SLDI_B2_0_SB(...) SLDI_B2_0(v16i8, __VA_ARGS__) +-#define SLDI_B2_0_SW(...) SLDI_B2_0(v4i32, __VA_ARGS__) +- +-#define SLDI_B3_0(RTYPE, in0, in1, in2, out0, out1, out2, slide_val) \ +-{ \ +- v16i8 zero_m = { 0 }; \ +- SLDI_B2_0(RTYPE, in0, in1, out0, out1, slide_val); \ +- out2 = (RTYPE) __msa_sldi_b((v16i8) zero_m, (v16i8) in2, slide_val); \ +-} +-#define SLDI_B3_0_UB(...) SLDI_B3_0(v16u8, __VA_ARGS__) +-#define SLDI_B3_0_SB(...) SLDI_B3_0(v16i8, __VA_ARGS__) +- +-#define SLDI_B4_0(RTYPE, in0, in1, in2, in3, \ +- out0, out1, out2, out3, slide_val) \ +-{ \ +- SLDI_B2_0(RTYPE, in0, in1, out0, out1, slide_val); \ +- SLDI_B2_0(RTYPE, in2, in3, out2, out3, slide_val); \ ++#define SLDI_B(RTYPE, d, s, slide_val, out) \ ++{ \ ++ out = (RTYPE) __msa_sldi_b((v16i8) d, (v16i8) s, slide_val); \ + } +-#define SLDI_B4_0_UB(...) SLDI_B4_0(v16u8, __VA_ARGS__) +-#define SLDI_B4_0_SB(...) SLDI_B4_0(v16i8, __VA_ARGS__) +-#define SLDI_B4_0_SH(...) SLDI_B4_0(v8i16, __VA_ARGS__) + +-/* Description : Immediate number of columns to slide +- Arguments : Inputs - in0_0, in0_1, in1_0, in1_1, slide_val +- Outputs - out0, out1 +- Return Type - as per RTYPE +- Details : Byte elements from 'in0_0' vector are slide into 'in1_0' by +- number of elements specified by 'slide_val' +-*/ +-#define SLDI_B2(RTYPE, in0_0, in0_1, in1_0, in1_1, out0, out1, slide_val) \ +-{ \ +- out0 = (RTYPE) __msa_sldi_b((v16i8) in0_0, (v16i8) in1_0, slide_val); \ +- out1 = (RTYPE) __msa_sldi_b((v16i8) in0_1, (v16i8) in1_1, slide_val); \ ++#define SLDI_B2(RTYPE, d0, s0, d1, s1, slide_val, out0, out1) \ ++{ \ ++ SLDI_B(RTYPE, d0, s0, slide_val, out0) \ ++ SLDI_B(RTYPE, d1, s1, slide_val, out1) \ + } + #define SLDI_B2_UB(...) SLDI_B2(v16u8, __VA_ARGS__) + #define SLDI_B2_SB(...) SLDI_B2(v16i8, __VA_ARGS__) + #define SLDI_B2_SH(...) SLDI_B2(v8i16, __VA_ARGS__) ++#define SLDI_B2_SW(...) SLDI_B2(v4i32, __VA_ARGS__) + +-#define SLDI_B3(RTYPE, in0_0, in0_1, in0_2, in1_0, in1_1, in1_2, \ +- out0, out1, out2, slide_val) \ +-{ \ +- SLDI_B2(RTYPE, in0_0, in0_1, in1_0, in1_1, out0, out1, slide_val) \ +- out2 = (RTYPE) __msa_sldi_b((v16i8) in0_2, (v16i8) in1_2, slide_val); \ ++#define SLDI_B3(RTYPE, d0, s0, d1, s1, d2, s2, slide_val, \ ++ out0, out1, out2) \ ++{ \ ++ SLDI_B2(RTYPE, d0, s0, d1, s1, slide_val, out0, out1) \ ++ SLDI_B(RTYPE, d2, s2, slide_val, out2) \ + } ++#define SLDI_B3_UB(...) SLDI_B3(v16u8, __VA_ARGS__) + #define SLDI_B3_SB(...) SLDI_B3(v16i8, __VA_ARGS__) + #define SLDI_B3_UH(...) SLDI_B3(v8u16, __VA_ARGS__) + ++#define SLDI_B4(RTYPE, d0, s0, d1, s1, d2, s2, d3, s3, \ ++ slide_val, out0, out1, out2, out3) \ ++{ \ ++ SLDI_B2(RTYPE, d0, s0, d1, s1, slide_val, out0, out1) \ ++ SLDI_B2(RTYPE, d2, s2, d3, s3, slide_val, out2, out3) \ ++} ++#define SLDI_B4_UB(...) SLDI_B4(v16u8, __VA_ARGS__) ++#define SLDI_B4_SB(...) SLDI_B4(v16i8, __VA_ARGS__) ++#define SLDI_B4_SH(...) SLDI_B4(v8i16, __VA_ARGS__) ++ + /* Description : Shuffle byte vector elements as per mask vector + Arguments : Inputs - in0, in1, in2, in3, mask0, mask1 + Outputs - out0, out1 +@@ -1012,99 +918,78 @@ + + /* Description : Clips all halfword elements of input vector between min & max + out = ((in) < (min)) ? (min) : (((in) > (max)) ? (max) : (in)) +- Arguments : Inputs - in (input vector) +- - min (min threshold) +- - max (max threshold) +- Outputs - out_m (output vector with clipped elements) ++ Arguments : Inputs - in (input vector) ++ - min (min threshold) ++ - max (max threshold) ++ Outputs - in (output vector with clipped elements) + Return Type - signed halfword + */ +-#define CLIP_SH(in, min, max) \ +-( { \ +- v8i16 out_m; \ +- \ +- out_m = __msa_max_s_h((v8i16) min, (v8i16) in); \ +- out_m = __msa_min_s_h((v8i16) max, (v8i16) out_m); \ +- out_m; \ +-} ) ++#define CLIP_SH(in, min, max) \ ++{ \ ++ in = __msa_max_s_h((v8i16) min, (v8i16) in); \ ++ in = __msa_min_s_h((v8i16) max, (v8i16) in); \ ++} + + /* Description : Clips all signed halfword elements of input vector + between 0 & 255 +- Arguments : Inputs - in (input vector) +- Outputs - out_m (output vector with clipped elements) +- Return Type - signed halfword ++ Arguments : Inputs - in (input vector) ++ Outputs - in (output vector with clipped elements) ++ Return Type - signed halfwords + */ +-#define CLIP_SH_0_255(in) \ +-( { \ +- v8i16 max_m = __msa_ldi_h(255); \ +- v8i16 out_m; \ +- \ +- out_m = __msa_maxi_s_h((v8i16) in, 0); \ +- out_m = __msa_min_s_h((v8i16) max_m, (v8i16) out_m); \ +- out_m; \ +-} ) ++#define CLIP_SH_0_255(in) \ ++{ \ ++ in = __msa_maxi_s_h((v8i16) in, 0); \ ++ in = (v8i16) __msa_sat_u_h((v8u16) in, 7); \ ++} ++ + #define CLIP_SH2_0_255(in0, in1) \ + { \ +- in0 = CLIP_SH_0_255(in0); \ +- in1 = CLIP_SH_0_255(in1); \ ++ CLIP_SH_0_255(in0); \ ++ CLIP_SH_0_255(in1); \ + } ++ + #define CLIP_SH4_0_255(in0, in1, in2, in3) \ + { \ + CLIP_SH2_0_255(in0, in1); \ + CLIP_SH2_0_255(in2, in3); \ + } + +-#define CLIP_SH_0_255_MAX_SATU(in) \ +-( { \ +- v8i16 out_m; \ +- \ +- out_m = __msa_maxi_s_h((v8i16) in, 0); \ +- out_m = (v8i16) __msa_sat_u_h((v8u16) out_m, 7); \ +- out_m; \ +-} ) +-#define CLIP_SH2_0_255_MAX_SATU(in0, in1) \ +-{ \ +- in0 = CLIP_SH_0_255_MAX_SATU(in0); \ +- in1 = CLIP_SH_0_255_MAX_SATU(in1); \ +-} +-#define CLIP_SH4_0_255_MAX_SATU(in0, in1, in2, in3) \ +-{ \ +- CLIP_SH2_0_255_MAX_SATU(in0, in1); \ +- CLIP_SH2_0_255_MAX_SATU(in2, in3); \ ++#define CLIP_SH8_0_255(in0, in1, in2, in3, \ ++ in4, in5, in6, in7) \ ++{ \ ++ CLIP_SH4_0_255(in0, in1, in2, in3); \ ++ CLIP_SH4_0_255(in4, in5, in6, in7); \ + } + + /* Description : Clips all signed word elements of input vector + between 0 & 255 +- Arguments : Inputs - in (input vector) +- Outputs - out_m (output vector with clipped elements) ++ Arguments : Inputs - in (input vector) ++ Outputs - in (output vector with clipped elements) + Return Type - signed word + */ +-#define CLIP_SW_0_255(in) \ +-( { \ +- v4i32 max_m = __msa_ldi_w(255); \ +- v4i32 out_m; \ +- \ +- out_m = __msa_maxi_s_w((v4i32) in, 0); \ +- out_m = __msa_min_s_w((v4i32) max_m, (v4i32) out_m); \ +- out_m; \ +-} ) ++#define CLIP_SW_0_255(in) \ ++{ \ ++ in = __msa_maxi_s_w((v4i32) in, 0); \ ++ in = (v4i32) __msa_sat_u_w((v4u32) in, 7); \ ++} + +-#define CLIP_SW_0_255_MAX_SATU(in) \ +-( { \ +- v4i32 out_m; \ +- \ +- out_m = __msa_maxi_s_w((v4i32) in, 0); \ +- out_m = (v4i32) __msa_sat_u_w((v4u32) out_m, 7); \ +- out_m; \ +-} ) +-#define CLIP_SW2_0_255_MAX_SATU(in0, in1) \ +-{ \ +- in0 = CLIP_SW_0_255_MAX_SATU(in0); \ +- in1 = CLIP_SW_0_255_MAX_SATU(in1); \ ++#define CLIP_SW2_0_255(in0, in1) \ ++{ \ ++ CLIP_SW_0_255(in0); \ ++ CLIP_SW_0_255(in1); \ + } +-#define CLIP_SW4_0_255_MAX_SATU(in0, in1, in2, in3) \ +-{ \ +- CLIP_SW2_0_255_MAX_SATU(in0, in1); \ +- CLIP_SW2_0_255_MAX_SATU(in2, in3); \ ++ ++#define CLIP_SW4_0_255(in0, in1, in2, in3) \ ++{ \ ++ CLIP_SW2_0_255(in0, in1); \ ++ CLIP_SW2_0_255(in2, in3); \ ++} ++ ++#define CLIP_SW8_0_255(in0, in1, in2, in3, \ ++ in4, in5, in6, in7) \ ++{ \ ++ CLIP_SW4_0_255(in0, in1, in2, in3); \ ++ CLIP_SW4_0_255(in4, in5, in6, in7); \ + } + + /* Description : Addition of 4 signed word elements +@@ -1234,6 +1119,15 @@ + unsigned absolute diff values, even-odd pairs are added + together to generate 8 halfword results. + */ ++#if HAVE_MSA2 ++#define SAD_UB2_UH(in0, in1, ref0, ref1) \ ++( { \ ++ v8u16 sad_m = { 0 }; \ ++ sad_m += __builtin_msa2_sad_adj2_u_w2x_b((v16u8) in0, (v16u8) ref0); \ ++ sad_m += __builtin_msa2_sad_adj2_u_w2x_b((v16u8) in1, (v16u8) ref1); \ ++ sad_m; \ ++} ) ++#else + #define SAD_UB2_UH(in0, in1, ref0, ref1) \ + ( { \ + v16u8 diff0_m, diff1_m; \ +@@ -1247,6 +1141,7 @@ + \ + sad_m; \ + } ) ++#endif // #if HAVE_MSA2 + + /* Description : Insert specified word elements from input vectors to 1 + destination vector +@@ -1491,6 +1386,7 @@ + out4, out5, out6, out7); \ + } + #define ILVR_B8_UH(...) ILVR_B8(v8u16, __VA_ARGS__) ++#define ILVR_B8_SW(...) ILVR_B8(v4i32, __VA_ARGS__) + + /* Description : Interleave right half of halfword elements from vectors + Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7 +@@ -2287,6 +2183,12 @@ + extracted and interleaved with same vector 'in0' to generate + 4 word elements keeping sign intact + */ ++#if HAVE_MSA2 ++#define UNPCK_R_SH_SW(in, out) \ ++{ \ ++ out = (v4i32) __builtin_msa2_w2x_lo_s_h((v8i16) in); \ ++} ++#else + #define UNPCK_R_SH_SW(in, out) \ + { \ + v8i16 sign_m; \ +@@ -2294,6 +2196,7 @@ + sign_m = __msa_clti_s_h((v8i16) in, 0); \ + out = (v4i32) __msa_ilvr_h(sign_m, (v8i16) in); \ + } ++#endif // #if HAVE_MSA2 + + /* Description : Sign extend byte elements from input vector and return + halfword results in pair of vectors +@@ -2306,6 +2209,13 @@ + Then interleaved left with same vector 'in0' to + generate 8 signed halfword elements in 'out1' + */ ++#if HAVE_MSA2 ++#define UNPCK_SB_SH(in, out0, out1) \ ++{ \ ++ out0 = (v4i32) __builtin_msa2_w2x_lo_s_b((v16i8) in); \ ++ out1 = (v4i32) __builtin_msa2_w2x_hi_s_b((v16i8) in); \ ++} ++#else + #define UNPCK_SB_SH(in, out0, out1) \ + { \ + v16i8 tmp_m; \ +@@ -2313,6 +2223,7 @@ + tmp_m = __msa_clti_s_b((v16i8) in, 0); \ + ILVRL_B2_SH(tmp_m, in, out0, out1); \ + } ++#endif // #if HAVE_MSA2 + + /* Description : Zero extend unsigned byte elements to halfword elements + Arguments : Inputs - in (1 input unsigned byte vector) +@@ -2339,6 +2250,13 @@ + Then interleaved left with same vector 'in0' to + generate 4 signed word elements in 'out1' + */ ++#if HAVE_MSA2 ++#define UNPCK_SH_SW(in, out0, out1) \ ++{ \ ++ out0 = (v4i32) __builtin_msa2_w2x_lo_s_h((v8i16) in); \ ++ out1 = (v4i32) __builtin_msa2_w2x_hi_s_h((v8i16) in); \ ++} ++#else + #define UNPCK_SH_SW(in, out0, out1) \ + { \ + v8i16 tmp_m; \ +@@ -2346,6 +2264,7 @@ + tmp_m = __msa_clti_s_h((v8i16) in, 0); \ + ILVRL_H2_SW(tmp_m, in, out0, out1); \ + } ++#endif // #if HAVE_MSA2 + + /* Description : Swap two variables + Arguments : Inputs - in0, in1 +@@ -2479,6 +2398,7 @@ + { \ + v16i8 tmp0_m, tmp1_m, tmp2_m, tmp3_m; \ + v16i8 tmp4_m, tmp5_m, tmp6_m, tmp7_m; \ ++ v16i8 zeros = { 0 }; \ + \ + ILVR_B4_SB(in2, in0, in3, in1, in6, in4, in7, in5, \ + tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ +@@ -2486,8 +2406,8 @@ + ILVRL_B2_SB(tmp3_m, tmp2_m, tmp6_m, tmp7_m); \ + ILVRL_W2(RTYPE, tmp6_m, tmp4_m, out0, out2); \ + ILVRL_W2(RTYPE, tmp7_m, tmp5_m, out4, out6); \ +- SLDI_B2_0(RTYPE, out0, out2, out1, out3, 8); \ +- SLDI_B2_0(RTYPE, out4, out6, out5, out7, 8); \ ++ SLDI_B4(RTYPE, zeros, out0, zeros, out2, zeros, out4, zeros, out6, \ ++ 8, out1, out3, out5, out7); \ + } + #define TRANSPOSE8x8_UB_UB(...) TRANSPOSE8x8_UB(v16u8, __VA_ARGS__) + #define TRANSPOSE8x8_UB_UH(...) TRANSPOSE8x8_UB(v8u16, __VA_ARGS__) +@@ -2569,8 +2489,6 @@ + out5 = (v16u8) __msa_ilvod_w((v4i32) tmp3_m, (v4i32) tmp2_m); \ + \ + tmp2_m = (v16u8) __msa_ilvod_h((v8i16) tmp5_m, (v8i16) tmp4_m); \ +- tmp2_m = (v16u8) __msa_ilvod_h((v8i16) tmp5_m, (v8i16) tmp4_m); \ +- tmp3_m = (v16u8) __msa_ilvod_h((v8i16) tmp7_m, (v8i16) tmp6_m); \ + tmp3_m = (v16u8) __msa_ilvod_h((v8i16) tmp7_m, (v8i16) tmp6_m); \ + out3 = (v16u8) __msa_ilvev_w((v4i32) tmp3_m, (v4i32) tmp2_m); \ + out7 = (v16u8) __msa_ilvod_w((v4i32) tmp3_m, (v4i32) tmp2_m); \ +@@ -2850,13 +2768,11 @@ + */ + #define DPADD_SH3_SH(in0, in1, in2, coeff0, coeff1, coeff2) \ + ( { \ +- v8i16 tmp1_m; \ + v8i16 out0_m; \ + \ + out0_m = __msa_dotp_s_h((v16i8) in0, (v16i8) coeff0); \ + out0_m = __msa_dpadd_s_h(out0_m, (v16i8) in1, (v16i8) coeff1); \ +- tmp1_m = __msa_dotp_s_h((v16i8) in2, (v16i8) coeff2); \ +- out0_m = __msa_adds_s_h(out0_m, tmp1_m); \ ++ out0_m = __msa_dpadd_s_h(out0_m, (v16i8) in2, (v16i8) coeff2); \ + \ + out0_m; \ + } ) +@@ -2890,7 +2806,7 @@ + tmp0_m = PCKEV_XORI128_UB(in0, in1); \ + tmp1_m = PCKEV_XORI128_UB(in2, in3); \ + AVER_UB2_UB(tmp0_m, dst0, tmp1_m, dst1, tmp0_m, tmp1_m); \ +- ST8x4_UB(tmp0_m, tmp1_m, pdst_m, stride); \ ++ ST_D4(tmp0_m, tmp1_m, 0, 1, 0, 1, pdst_m, stride); \ + } + + /* Description : Pack even byte elements, extract 0 & 2 index words from pair +diff --git a/libavutil/mips/mmiutils.h b/libavutil/mips/mmiutils.h +index 76b1199..8f692e8 100644 +--- a/libavutil/mips/mmiutils.h ++++ b/libavutil/mips/mmiutils.h +@@ -205,7 +205,7 @@ + * backup register + */ + #define BACKUP_REG \ +- double temp_backup_reg[8]; \ ++ LOCAL_ALIGNED_16(double, temp_backup_reg, [8]); \ + if (_MIPS_SIM == _ABI64) \ + __asm__ volatile ( \ + "gssqc1 $f25, $f24, 0x00(%[temp]) \n\t" \ +@@ -250,6 +250,15 @@ + : "memory" \ + ); + ++/** ++ * brief: Transpose 2X2 word packaged data. ++ * fr_i0, fr_i1: src ++ * fr_o0, fr_o1: dst ++ */ ++#define TRANSPOSE_2W(fr_i0, fr_i1, fr_o0, fr_o1) \ ++ "punpcklwd "#fr_o0", "#fr_i0", "#fr_i1" \n\t" \ ++ "punpckhwd "#fr_o1", "#fr_i0", "#fr_i1" \n\t" ++ + /** + * brief: Transpose 4X4 half word packaged data. + * fr_i0, fr_i1, fr_i2, fr_i3: src & dst +@@ -336,5 +345,20 @@ + PSRAH_4_MMI(fp1, fp2, fp3, fp4, shift) \ + PSRAH_4_MMI(fp5, fp6, fp7, fp8, shift) + ++/** ++ * brief: (((value) + (1 << ((n) - 1))) >> (n)) ++ * fr_i0: src & dst ++ * fr_i1: Operand number ++ * fr_t0, fr_t1: temporary FPR ++ * gr_t0: temporary GPR ++ */ ++#define ROUND_POWER_OF_TWO_MMI(fr_i0, fr_i1, fr_t0, fr_t1, gr_t0) \ ++ "li "#gr_t0", 0x01 \n\t" \ ++ "dmtc1 "#gr_t0", "#fr_t0" \n\t" \ ++ "punpcklwd "#fr_t0", "#fr_t0", "#fr_t0" \n\t" \ ++ "psubw "#fr_t1", "#fr_i1", "#fr_t0" \n\t" \ ++ "psllw "#fr_t1", "#fr_t0", "#fr_t1" \n\t" \ ++ "paddw "#fr_i0", "#fr_i0", "#fr_t1" \n\t" \ ++ "psraw "#fr_i0", "#fr_i0", "#fr_i1" \n\t" + + #endif /* AVUTILS_MIPS_MMIUTILS_H */ +diff --git a/libavutil/tests/cpu.c b/libavutil/tests/cpu.c +index ce45b71..c853371 100644 +--- a/libavutil/tests/cpu.c ++++ b/libavutil/tests/cpu.c +@@ -49,6 +49,9 @@ static const struct { + { AV_CPU_FLAG_SETEND, "setend" }, + #elif ARCH_PPC + { AV_CPU_FLAG_ALTIVEC, "altivec" }, ++#elif ARCH_MIPS ++ { AV_CPU_FLAG_MMI, "mmi" }, ++ { AV_CPU_FLAG_MSA, "msa" }, + #elif ARCH_X86 + { AV_CPU_FLAG_MMX, "mmx" }, + { AV_CPU_FLAG_MMXEXT, "mmxext" }, +diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c +index 721a091..ec00723 100644 +--- a/tests/checkasm/checkasm.c ++++ b/tests/checkasm/checkasm.c +@@ -197,6 +197,9 @@ static const struct { + { "ALTIVEC", "altivec", AV_CPU_FLAG_ALTIVEC }, + { "VSX", "vsx", AV_CPU_FLAG_VSX }, + { "POWER8", "power8", AV_CPU_FLAG_POWER8 }, ++#elif ARCH_MIPS ++ { "MMI", "mmi", AV_CPU_FLAG_MMI }, ++ { "MSA", "msa", AV_CPU_FLAG_MSA }, + #elif ARCH_X86 + { "MMX", "mmx", AV_CPU_FLAG_MMX|AV_CPU_FLAG_CMOV }, + { "MMXEXT", "mmxext", AV_CPU_FLAG_MMXEXT }, +-- +2.20.1 + diff --git a/package/ffmpeg/0002-Add-optimizations-for-loongarch.patch b/package/ffmpeg/0002-Add-optimizations-for-loongarch.patch new file mode 100644 index 00000000..86e9b2d8 --- /dev/null +++ b/package/ffmpeg/0002-Add-optimizations-for-loongarch.patch @@ -0,0 +1,47523 @@ +From f5b470781ae6b69e672baf1fbe022c5017db681b Mon Sep 17 00:00:00 2001 +From: Shiyou Yin +Date: Thu, 3 Sep 2020 14:51:18 +0800 +Subject: [PATCH] Add optimizations for loongarch + +Change-Id: I005f2d8c0f874f2732628de6daea33ee4441fda8 +Signed-off-by: Shiyou Yin +--- + Makefile | 2 +- + configure | 58 +- + ffbuild/arch.mak | 4 +- + ffbuild/common.mak | 8 + + fftools/ffmpeg.c | 2 +- + libavcodec/cabac_functions.h | 3 + + libavcodec/h264chroma.c | 2 + + libavcodec/h264chroma.h | 1 + + libavcodec/h264dsp.c | 1 + + libavcodec/h264dsp.h | 2 + + libavcodec/h264qpel.c | 2 + + libavcodec/h264qpel.h | 1 + + libavcodec/hevcdsp.c | 2 + + libavcodec/hevcdsp.h | 1 + + libavcodec/hpeldsp.c | 2 + + libavcodec/hpeldsp.h | 1 + + libavcodec/idctdsp.c | 2 + + libavcodec/idctdsp.h | 2 + + libavcodec/loongarch/Makefile | 30 + + libavcodec/loongarch/cabac.h | 198 + + libavcodec/loongarch/h264_deblock_lasx.c | 144 + + .../loongarch/h264chroma_init_loongarch.c | 35 + + libavcodec/loongarch/h264chroma_lasx.c | 837 ++++ + libavcodec/loongarch/h264chroma_lasx.h | 34 + + libavcodec/loongarch/h264dsp_init_loongarch.c | 81 + + libavcodec/loongarch/h264dsp_lasx.c | 1753 ++++++++ + libavcodec/loongarch/h264dsp_lasx.h | 99 + + libavcodec/loongarch/h264idct_lasx.c | 461 +++ + .../loongarch/h264qpel_init_loongarch.c | 96 + + libavcodec/loongarch/h264qpel_lasx.c | 2053 ++++++++++ + libavcodec/loongarch/h264qpel_lasx.h | 158 + + libavcodec/loongarch/hevc_idct_lsx.c | 874 ++++ + libavcodec/loongarch/hevc_lpf_sao_lsx.c | 2422 +++++++++++ + libavcodec/loongarch/hevc_macros_lsx.h | 71 + + libavcodec/loongarch/hevc_mc_bi_lsx.c | 3075 ++++++++++++++ + libavcodec/loongarch/hevc_mc_uni_lsx.c | 1476 +++++++ + libavcodec/loongarch/hevc_mc_uniw_lsx.c | 338 ++ + libavcodec/loongarch/hevcdsp_init_loongarch.c | 189 + + libavcodec/loongarch/hevcdsp_lsx.c | 3338 +++++++++++++++ + libavcodec/loongarch/hevcdsp_lsx.h | 233 ++ + libavcodec/loongarch/hpeldsp_init_loongarch.c | 71 + + libavcodec/loongarch/hpeldsp_lasx.c | 1041 +++++ + libavcodec/loongarch/hpeldsp_lasx.h | 57 + + libavcodec/loongarch/idctdsp_init_loongarch.c | 45 + + libavcodec/loongarch/idctdsp_lasx.c | 116 + + libavcodec/loongarch/idctdsp_loongarch.h | 42 + + libavcodec/loongarch/simple_idct_lasx.c | 320 ++ + libavcodec/loongarch/vc1dsp_init_loongarch.c | 67 + + libavcodec/loongarch/vc1dsp_lasx.c | 997 +++++ + libavcodec/loongarch/vc1dsp_loongarch.h | 79 + + libavcodec/loongarch/videodsp_init.c | 46 + + libavcodec/loongarch/vp8_lpf_lsx.c | 437 ++ + libavcodec/loongarch/vp8dsp_init_loongarch.c | 41 + + libavcodec/loongarch/vp8dsp_loongarch.h | 39 + + libavcodec/loongarch/vp9_idct_lsx.c | 1513 +++++++ + libavcodec/loongarch/vp9_intra_lsx.c | 612 +++ + libavcodec/loongarch/vp9_lpf_lsx.c | 3140 +++++++++++++++ + libavcodec/loongarch/vp9_mc_lsx.c | 2318 +++++++++++ + libavcodec/loongarch/vp9dsp_init_loongarch.c | 178 + + libavcodec/loongarch/vp9dsp_loongarch.h | 182 + + libavcodec/mips/Makefile | 3 +- + libavcodec/mips/blockdsp_mmi.c | 8 +- + libavcodec/mips/cabac.h | 129 +- + libavcodec/mips/constants.c | 89 +- + libavcodec/mips/constants.h | 88 +- + libavcodec/mips/h264_deblock_msa.c | 153 + + libavcodec/mips/h264chroma_init_mips.c | 19 +- + libavcodec/mips/h264chroma_mmi.c | 177 +- + libavcodec/mips/h264dsp_init_mips.c | 6 +- + libavcodec/mips/h264dsp_mips.h | 4 + + libavcodec/mips/h264dsp_mmi.c | 308 +- + libavcodec/mips/h264dsp_msa.c | 465 +-- + libavcodec/mips/h264pred_mmi.c | 41 +- + libavcodec/mips/h264qpel_mmi.c | 60 +- + libavcodec/mips/hevcdsp_mmi.c | 91 +- + libavcodec/mips/hpeldsp_mmi.c | 26 +- + libavcodec/mips/idctdsp_mmi.c | 4 +- + libavcodec/mips/mpegvideo_mmi.c | 114 +- + libavcodec/mips/pixblockdsp_mmi.c | 8 +- + libavcodec/mips/simple_idct_mmi.c | 14 +- + libavcodec/mips/vc1dsp_mmi.c | 210 +- + libavcodec/mips/vp3dsp_idct_mmi.c | 132 +- + libavcodec/mips/vp8dsp_mmi.c | 343 +- + libavcodec/mips/vp9_mc_mmi.c | 26 +- + libavcodec/mips/wmv2dsp_mmi.c | 2 +- + libavcodec/vc1dsp.c | 3 +- + libavcodec/vc1dsp.h | 1 + + libavcodec/videodsp.c | 2 + + libavcodec/videodsp.h | 1 + + libavcodec/vp8dsp.c | 2 + + libavcodec/vp8dsp.h | 1 + + libavcodec/vp9dsp.c | 1 + + libavcodec/vp9dsp.h | 1 + + libavutil/cpu.c | 10 + + libavutil/cpu.h | 4 + + libavutil/cpu_internal.h | 2 + + libavutil/loongarch/Makefile | 1 + + libavutil/loongarch/cpu.c | 69 + + libavutil/loongarch/cpu.h | 31 + + libavutil/loongarch/generic_macros_lasx.h | 3561 +++++++++++++++++ + libavutil/loongarch/generic_macros_lsx.h | 670 ++++ + libavutil/loongarch/generic_macros_lsx.h.bak | 425 ++ + libavutil/mips/asmdefs.h | 8 + + libavutil/mips/generic_macros_msa.h | 37 - + libavutil/tests/cpu.c | 3 + + libswscale/loongarch/Makefile | 6 + + libswscale/loongarch/input_lasx.c | 191 + + libswscale/loongarch/output_lasx.c | 2436 +++++++++++ + libswscale/loongarch/rgb2rgb_lasx.c | 54 + + libswscale/loongarch/swscale_init_loongarch.c | 95 + + libswscale/loongarch/swscale_lasx.c | 944 +++++ + libswscale/loongarch/swscale_loongarch.h | 78 + + libswscale/loongarch/yuv2rgb_lasx.c | 209 + + libswscale/mips/Makefile | 4 + + libswscale/mips/rgb2rgb_init_mips.c | 33 + + libswscale/mips/rgb2rgb_mips.h | 32 + + libswscale/mips/rgb2rgb_msa.c | 51 + + libswscale/mips/swscale_init_mips.c | 211 + + libswscale/mips/swscale_mips.h | 404 ++ + libswscale/mips/swscale_msa.c | 1805 +++++++++ + libswscale/rgb2rgb.c | 4 + + libswscale/rgb2rgb.h | 2 + + libswscale/swscale.c | 4 + + libswscale/swscale_internal.h | 3 + + libswscale/utils.c | 24 +- + libswscale/yuv2rgb.c | 2 + + tests/checkasm/checkasm.c | 3 + + 127 files changed, 42187 insertions(+), 1193 deletions(-) + create mode 100644 libavcodec/loongarch/Makefile + create mode 100644 libavcodec/loongarch/cabac.h + create mode 100644 libavcodec/loongarch/h264_deblock_lasx.c + create mode 100644 libavcodec/loongarch/h264chroma_init_loongarch.c + create mode 100644 libavcodec/loongarch/h264chroma_lasx.c + create mode 100644 libavcodec/loongarch/h264chroma_lasx.h + create mode 100644 libavcodec/loongarch/h264dsp_init_loongarch.c + create mode 100644 libavcodec/loongarch/h264dsp_lasx.c + create mode 100644 libavcodec/loongarch/h264dsp_lasx.h + create mode 100644 libavcodec/loongarch/h264idct_lasx.c + create mode 100644 libavcodec/loongarch/h264qpel_init_loongarch.c + create mode 100644 libavcodec/loongarch/h264qpel_lasx.c + create mode 100644 libavcodec/loongarch/h264qpel_lasx.h + create mode 100644 libavcodec/loongarch/hevc_idct_lsx.c + create mode 100644 libavcodec/loongarch/hevc_lpf_sao_lsx.c + create mode 100644 libavcodec/loongarch/hevc_macros_lsx.h + create mode 100644 libavcodec/loongarch/hevc_mc_bi_lsx.c + create mode 100644 libavcodec/loongarch/hevc_mc_uni_lsx.c + create mode 100644 libavcodec/loongarch/hevc_mc_uniw_lsx.c + create mode 100644 libavcodec/loongarch/hevcdsp_init_loongarch.c + create mode 100644 libavcodec/loongarch/hevcdsp_lsx.c + create mode 100644 libavcodec/loongarch/hevcdsp_lsx.h + create mode 100644 libavcodec/loongarch/hpeldsp_init_loongarch.c + create mode 100644 libavcodec/loongarch/hpeldsp_lasx.c + create mode 100644 libavcodec/loongarch/hpeldsp_lasx.h + create mode 100644 libavcodec/loongarch/idctdsp_init_loongarch.c + create mode 100644 libavcodec/loongarch/idctdsp_lasx.c + create mode 100644 libavcodec/loongarch/idctdsp_loongarch.h + create mode 100644 libavcodec/loongarch/simple_idct_lasx.c + create mode 100644 libavcodec/loongarch/vc1dsp_init_loongarch.c + create mode 100644 libavcodec/loongarch/vc1dsp_lasx.c + create mode 100644 libavcodec/loongarch/vc1dsp_loongarch.h + create mode 100644 libavcodec/loongarch/videodsp_init.c + create mode 100644 libavcodec/loongarch/vp8_lpf_lsx.c + create mode 100644 libavcodec/loongarch/vp8dsp_init_loongarch.c + create mode 100644 libavcodec/loongarch/vp8dsp_loongarch.h + create mode 100644 libavcodec/loongarch/vp9_idct_lsx.c + create mode 100644 libavcodec/loongarch/vp9_intra_lsx.c + create mode 100644 libavcodec/loongarch/vp9_lpf_lsx.c + create mode 100644 libavcodec/loongarch/vp9_mc_lsx.c + create mode 100644 libavcodec/loongarch/vp9dsp_init_loongarch.c + create mode 100644 libavcodec/loongarch/vp9dsp_loongarch.h + create mode 100644 libavcodec/mips/h264_deblock_msa.c + create mode 100644 libavutil/loongarch/Makefile + create mode 100644 libavutil/loongarch/cpu.c + create mode 100644 libavutil/loongarch/cpu.h + create mode 100644 libavutil/loongarch/generic_macros_lasx.h + create mode 100644 libavutil/loongarch/generic_macros_lsx.h + create mode 100644 libavutil/loongarch/generic_macros_lsx.h.bak + create mode 100644 libswscale/loongarch/Makefile + create mode 100644 libswscale/loongarch/input_lasx.c + create mode 100644 libswscale/loongarch/output_lasx.c + create mode 100644 libswscale/loongarch/rgb2rgb_lasx.c + create mode 100644 libswscale/loongarch/swscale_init_loongarch.c + create mode 100644 libswscale/loongarch/swscale_lasx.c + create mode 100644 libswscale/loongarch/swscale_loongarch.h + create mode 100644 libswscale/loongarch/yuv2rgb_lasx.c + create mode 100644 libswscale/mips/Makefile + create mode 100644 libswscale/mips/rgb2rgb_init_mips.c + create mode 100644 libswscale/mips/rgb2rgb_mips.h + create mode 100644 libswscale/mips/rgb2rgb_msa.c + create mode 100644 libswscale/mips/swscale_init_mips.c + create mode 100644 libswscale/mips/swscale_mips.h + create mode 100644 libswscale/mips/swscale_msa.c + +diff --git a/Makefile b/Makefile +index 4bf1dfedcf..ec260157f9 100644 +--- a/Makefile ++++ b/Makefile +@@ -72,7 +72,7 @@ SUBDIR_VARS := CLEANFILES FFLIBS HOSTPROGS TESTPROGS TOOLS \ + ARMV5TE-OBJS ARMV6-OBJS ARMV8-OBJS VFP-OBJS NEON-OBJS \ + ALTIVEC-OBJS VSX-OBJS MMX-OBJS X86ASM-OBJS \ + MIPSFPU-OBJS MIPSDSPR2-OBJS MIPSDSP-OBJS MSA-OBJS \ +- MMI-OBJS OBJS SLIBOBJS HOSTOBJS TESTOBJS ++ MMI-OBJS LSX-OBJS LASX-OBJS OBJS SLIBOBJS HOSTOBJS TESTOBJS + + define RESET + $(1) := +diff --git a/configure b/configure +index db57f4d544..1ac28abde9 100755 +--- a/configure ++++ b/configure +@@ -439,10 +439,11 @@ Optimization options (experts only): + --disable-mipsdsp disable MIPS DSP ASE R1 optimizations + --disable-mipsdspr2 disable MIPS DSP ASE R2 optimizations + --disable-msa disable MSA optimizations +- --disable-msa2 disable MSA2 optimizations + --disable-mipsfpu disable floating point MIPS optimizations + --disable-mmi disable Loongson SIMD optimizations + --disable-fast-unaligned consider unaligned accesses slow ++ --disable-lsx disable LSX optimizations ++ --disable-lasx disable LASX optimizations + + Developer options (useful when working on FFmpeg itself): + --disable-debug disable debugging symbols +@@ -1931,6 +1932,9 @@ ARCH_LIST=" + x86 + x86_32 + x86_64 ++ loongarch ++ loongarch32 ++ loongarch64 + " + + ARCH_EXT_LIST_ARM=" +@@ -1954,13 +1958,14 @@ ARCH_EXT_LIST_MIPS=" + mipsdsp + mipsdspr2 + msa +- msa2 + " + + ARCH_EXT_LIST_LOONGSON=" + loongson2 + loongson3 + mmi ++ lsx ++ lasx + " + + ARCH_EXT_LIST_X86_SIMD=" +@@ -2470,6 +2475,10 @@ power8_deps="vsx" + + loongson2_deps="mips" + loongson3_deps="mips" ++mmi_deps_any="loongson2 loongson3" ++lsx_deps="loongarch" ++lasx_deps="lsx" ++ + mips32r2_deps="mips" + mips32r5_deps="mips" + mips32r6_deps="mips" +@@ -2478,9 +2487,7 @@ mips64r6_deps="mips" + mipsfpu_deps="mips" + mipsdsp_deps="mips" + mipsdspr2_deps="mips" +-mmi_deps_any="loongson2 loongson3" + msa_deps="mipsfpu" +-msa2_deps="msa" + + cpunop_deps="i686" + x86_64_select="i686" +@@ -2517,8 +2524,8 @@ for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do + done + + aligned_stack_if_any="aarch64 ppc x86" +-fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64" +-fast_clz_if_any="aarch64 alpha avr32 mips ppc x86" ++fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64 loongarch64" ++fast_clz_if_any="aarch64 alpha avr32 mips ppc x86 loongarch" + fast_unaligned_if_any="aarch64 ppc x86" + simd_align_16_if_any="altivec neon sse" + simd_align_32_if_any="avx" +@@ -4670,6 +4677,9 @@ case "$arch" in + arm*|iPad*|iPhone*) + arch="arm" + ;; ++ loongarch*) ++ arch="loongarch" ++ ;; + mips*|IP*) + case "$arch" in + *el) +@@ -5016,6 +5026,20 @@ elif enabled x86; then + ;; + esac + ++elif enabled loongarch; then ++ # TODO: pending to test. ++ enable local_aligned ++ enable simd_align_16 ++ enable fast_64bit ++ enable fast_clz ++ enable fast_cmov ++ enable fast_unaligned ++ disable aligned_stack ++ case $cpu in ++ gs464v) ++ cpuflags="-march=$cpu" ++ ;; ++ esac + fi + + if [ "$cpu" != generic ]; then +@@ -5098,6 +5122,11 @@ case "$arch" in + objformat=elf64 + fi + ;; ++ loongarch) ++ check_64bit loongarch32 loongarch64 ++ enabled loongarch64 && disable loongarch32 ++ enabled shared && enable_weak pic ++ ;; + esac + + # OS specific +@@ -5669,9 +5698,8 @@ elif enabled mips; then + enabled mipsdsp && check_inline_asm_flags mipsdsp '"addu.qb $t0, $t1, $t2"' '-mdsp' + enabled mipsdspr2 && check_inline_asm_flags mipsdspr2 '"absq_s.qb $t0, $t1"' '-mdspr2' + +- # MSA and MSA2 can be detected at runtime so we supply extra flags here ++ # MSA can be detected at runtime so we supply extra flags here + enabled mipsfpu && enabled msa && check_inline_asm msa '"addvi.b $w0, $w1, 1"' '-mmsa' && append MSAFLAGS '-mmsa' +- enabled msa && enabled msa2 && check_inline_asm msa2 '"nxbits.any.b $w0, $w0"' '-mmsa2' && append MSAFLAGS '-mmsa2' + + # loongson2 have no switch cflag so we can only probe toolchain ability + enabled loongson2 && check_inline_asm loongson2 '"dmult.g $8, $9, $10"' && disable loongson3 +@@ -5682,6 +5710,10 @@ elif enabled mips; then + # MMI can be detected at runtime too + enabled mmi && check_inline_asm mmi '"punpcklhw $f0, $f0, $f0"' '-mloongson-mmi' && append MMIFLAGS '-mloongson-mmi' + ++ # TODO: The following code is intended to fix h264 decoding module compilation error, ++ # but it is not resonable. Maybe we should fix it in the feature. ++ enabled mmi && h264_decoder_select="$h264_decoder_select hpeldsp" ++ + if enabled bigendian && enabled msa; then + disable msa + fi +@@ -5799,6 +5831,9 @@ EOF + ;; + esac + ++elif enabled loongarch; then ++ enabled lsx && check_inline_asm lsx '"vadd.b $vr0, $vr1, $vr2"' '-mlsx' && append LSXFLAGS '-mlsx' ++ enabled lasx && check_inline_asm lasx '"xvadd.b $xr0, $xr1, $xr2"' '-mlasx' && append LASXFLAGS '-mlasx' + fi + + check_cc intrinsics_neon arm_neon.h "int16x8_t test = vdupq_n_s16(0)" +@@ -7027,7 +7062,6 @@ if enabled mips; then + echo "MIPS DSP R1 enabled ${mipsdsp-no}" + echo "MIPS DSP R2 enabled ${mipsdspr2-no}" + echo "MIPS MSA enabled ${msa-no}" +- echo "MIPS MSA2 enabled ${msa2-no}" + echo "LOONGSON MMI enabled ${mmi-no}" + fi + if enabled ppc; then +@@ -7037,6 +7071,10 @@ if enabled ppc; then + echo "PPC 4xx optimizations ${ppc4xx-no}" + echo "dcbzl available ${dcbzl-no}" + fi ++if enabled loongarch; then ++ echo "LSX enabled ${lsx-no}" ++ echo "LASX enabled ${lasx-no}" ++fi + echo "debug symbols ${debug-no}" + echo "strip symbols ${stripping-no}" + echo "optimize for size ${small-no}" +@@ -7189,6 +7227,8 @@ ASMSTRIPFLAGS=$ASMSTRIPFLAGS + X86ASMFLAGS=$X86ASMFLAGS + MSAFLAGS=$MSAFLAGS + MMIFLAGS=$MMIFLAGS ++LSXFLAGS=$LSXFLAGS ++LASXFLAGS=$LASXFLAGS + BUILDSUF=$build_suffix + PROGSSUF=$progs_suffix + FULLNAME=$FULLNAME +diff --git a/ffbuild/arch.mak b/ffbuild/arch.mak +index e09006efca..997e31e85e 100644 +--- a/ffbuild/arch.mak ++++ b/ffbuild/arch.mak +@@ -8,7 +8,9 @@ OBJS-$(HAVE_MIPSFPU) += $(MIPSFPU-OBJS) $(MIPSFPU-OBJS-yes) + OBJS-$(HAVE_MIPSDSP) += $(MIPSDSP-OBJS) $(MIPSDSP-OBJS-yes) + OBJS-$(HAVE_MIPSDSPR2) += $(MIPSDSPR2-OBJS) $(MIPSDSPR2-OBJS-yes) + OBJS-$(HAVE_MSA) += $(MSA-OBJS) $(MSA-OBJS-yes) +-OBJS-$(HAVE_MMI) += $(MMI-OBJS) $(MMI-OBJS-yes) ++OBJS-$(HAVE_MMI) += $(MMI-OBJS) $(MMI-OBJS-yes) ++OBJS-$(HAVE_LSX) += $(LSX-OBJS) $(LSX-OBJS-yes) ++OBJS-$(HAVE_LASX) += $(LASX-OBJS) $(LASX-OBJS-yes) + + OBJS-$(HAVE_ALTIVEC) += $(ALTIVEC-OBJS) $(ALTIVEC-OBJS-yes) + OBJS-$(HAVE_VSX) += $(VSX-OBJS) $(VSX-OBJS-yes) +diff --git a/ffbuild/common.mak b/ffbuild/common.mak +index a00d40d735..d321506f96 100644 +--- a/ffbuild/common.mak ++++ b/ffbuild/common.mak +@@ -57,6 +57,8 @@ COMPILE_HOSTC = $(call COMPILE,HOSTCC) + COMPILE_NVCC = $(call COMPILE,NVCC) + COMPILE_MMI = $(call COMPILE,CC,MMIFLAGS) + COMPILE_MSA = $(call COMPILE,CC,MSAFLAGS) ++COMPILE_LSX = $(call COMPILE,CC,LSXFLAGS) ++COMPILE_LASX = $(call COMPILE,CC,LASXFLAGS) + + %_mmi.o: %_mmi.c + $(COMPILE_MMI) +@@ -64,6 +66,12 @@ COMPILE_MSA = $(call COMPILE,CC,MSAFLAGS) + %_msa.o: %_msa.c + $(COMPILE_MSA) + ++%_lsx.o: %_lsx.c ++ $(COMPILE_LSX) ++ ++%_lasx.o: %_lasx.c ++ $(COMPILE_LASX) ++ + %.o: %.c + $(COMPILE_C) + +diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c +index 24307c3cae..9c20351ff8 100644 +--- a/fftools/ffmpeg.c ++++ b/fftools/ffmpeg.c +@@ -1709,7 +1709,7 @@ static void print_report(int is_last_report, int64_t timer_start, int64_t cur_ti + frame_number = ost->frame_number; + fps = t > 1 ? frame_number / t : 0; + av_bprintf(&buf, "frame=%5d fps=%3.*f q=%3.1f ", +- frame_number, fps < 9.95, fps, q); ++ frame_number, fps < 100, fps, q); + av_bprintf(&buf_script, "frame=%d\n", frame_number); + av_bprintf(&buf_script, "fps=%.2f\n", fps); + av_bprintf(&buf_script, "stream_%d_%d_q=%.1f\n", +diff --git a/libavcodec/cabac_functions.h b/libavcodec/cabac_functions.h +index bb2b4210b7..fad9d7c10f 100644 +--- a/libavcodec/cabac_functions.h ++++ b/libavcodec/cabac_functions.h +@@ -48,6 +48,9 @@ + #if ARCH_MIPS + # include "mips/cabac.h" + #endif ++#if ARCH_LOONGARCH64 ++# include "loongarch/cabac.h" ++#endif + + static const uint8_t * const ff_h264_norm_shift = ff_h264_cabac_tables + H264_NORM_SHIFT_OFFSET; + static const uint8_t * const ff_h264_lps_range = ff_h264_cabac_tables + H264_LPS_RANGE_OFFSET; +diff --git a/libavcodec/h264chroma.c b/libavcodec/h264chroma.c +index c2f1f30f5a..279a6ada7f 100644 +--- a/libavcodec/h264chroma.c ++++ b/libavcodec/h264chroma.c +@@ -56,4 +56,6 @@ av_cold void ff_h264chroma_init(H264ChromaContext *c, int bit_depth) + ff_h264chroma_init_x86(c, bit_depth); + if (ARCH_MIPS) + ff_h264chroma_init_mips(c, bit_depth); ++ if (ARCH_LOONGARCH) ++ ff_h264chroma_init_loongarch(c, bit_depth); + } +diff --git a/libavcodec/h264chroma.h b/libavcodec/h264chroma.h +index 5c89fd12df..3259b4935f 100644 +--- a/libavcodec/h264chroma.h ++++ b/libavcodec/h264chroma.h +@@ -36,5 +36,6 @@ void ff_h264chroma_init_arm(H264ChromaContext *c, int bit_depth); + void ff_h264chroma_init_ppc(H264ChromaContext *c, int bit_depth); + void ff_h264chroma_init_x86(H264ChromaContext *c, int bit_depth); + void ff_h264chroma_init_mips(H264ChromaContext *c, int bit_depth); ++void ff_h264chroma_init_loongarch(H264ChromaContext *c, int bit_depth); + + #endif /* AVCODEC_H264CHROMA_H */ +diff --git a/libavcodec/h264dsp.c b/libavcodec/h264dsp.c +index d26f552369..436ce68f0b 100644 +--- a/libavcodec/h264dsp.c ++++ b/libavcodec/h264dsp.c +@@ -158,4 +158,5 @@ av_cold void ff_h264dsp_init(H264DSPContext *c, const int bit_depth, + if (ARCH_PPC) ff_h264dsp_init_ppc(c, bit_depth, chroma_format_idc); + if (ARCH_X86) ff_h264dsp_init_x86(c, bit_depth, chroma_format_idc); + if (ARCH_MIPS) ff_h264dsp_init_mips(c, bit_depth, chroma_format_idc); ++ if (ARCH_LOONGARCH) ff_h264dsp_init_loongarch(c, bit_depth, chroma_format_idc); + } +diff --git a/libavcodec/h264dsp.h b/libavcodec/h264dsp.h +index bcd76abcc1..4a394299d8 100644 +--- a/libavcodec/h264dsp.h ++++ b/libavcodec/h264dsp.h +@@ -129,5 +129,7 @@ void ff_h264dsp_init_x86(H264DSPContext *c, const int bit_depth, + const int chroma_format_idc); + void ff_h264dsp_init_mips(H264DSPContext *c, const int bit_depth, + const int chroma_format_idc); ++void ff_h264dsp_init_loongarch(H264DSPContext *c, const int bit_depth, ++ const int chroma_format_idc); + + #endif /* AVCODEC_H264DSP_H */ +diff --git a/libavcodec/h264qpel.c b/libavcodec/h264qpel.c +index 50e82e23b0..9f8cfbb474 100644 +--- a/libavcodec/h264qpel.c ++++ b/libavcodec/h264qpel.c +@@ -106,4 +106,6 @@ av_cold void ff_h264qpel_init(H264QpelContext *c, int bit_depth) + ff_h264qpel_init_x86(c, bit_depth); + if (ARCH_MIPS) + ff_h264qpel_init_mips(c, bit_depth); ++ if (ARCH_LOONGARCH) ++ ff_h264qpel_init_loongarch(c, bit_depth); + } +diff --git a/libavcodec/h264qpel.h b/libavcodec/h264qpel.h +index 7c57ad001c..0259e8de23 100644 +--- a/libavcodec/h264qpel.h ++++ b/libavcodec/h264qpel.h +@@ -36,5 +36,6 @@ void ff_h264qpel_init_arm(H264QpelContext *c, int bit_depth); + void ff_h264qpel_init_ppc(H264QpelContext *c, int bit_depth); + void ff_h264qpel_init_x86(H264QpelContext *c, int bit_depth); + void ff_h264qpel_init_mips(H264QpelContext *c, int bit_depth); ++void ff_h264qpel_init_loongarch(H264QpelContext *c, int bit_depth); + + #endif /* AVCODEC_H264QPEL_H */ +diff --git a/libavcodec/hevcdsp.c b/libavcodec/hevcdsp.c +index 957e40d5ff..b26f7f5f38 100644 +--- a/libavcodec/hevcdsp.c ++++ b/libavcodec/hevcdsp.c +@@ -265,4 +265,6 @@ int i = 0; + ff_hevc_dsp_init_x86(hevcdsp, bit_depth); + if (ARCH_MIPS) + ff_hevc_dsp_init_mips(hevcdsp, bit_depth); ++ if (ARCH_LOONGARCH) ++ ff_hevc_dsp_init_loongarch(hevcdsp, bit_depth); + } +diff --git a/libavcodec/hevcdsp.h b/libavcodec/hevcdsp.h +index 0ae67cba85..27432ebc8c 100644 +--- a/libavcodec/hevcdsp.h ++++ b/libavcodec/hevcdsp.h +@@ -131,5 +131,6 @@ void ff_hevc_dsp_init_arm(HEVCDSPContext *c, const int bit_depth); + void ff_hevc_dsp_init_ppc(HEVCDSPContext *c, const int bit_depth); + void ff_hevc_dsp_init_x86(HEVCDSPContext *c, const int bit_depth); + void ff_hevc_dsp_init_mips(HEVCDSPContext *c, const int bit_depth); ++void ff_hevc_dsp_init_loongarch(HEVCDSPContext *c, const int bit_depth); + + #endif /* AVCODEC_HEVCDSP_H */ +diff --git a/libavcodec/hpeldsp.c b/libavcodec/hpeldsp.c +index 8e2fd8fcf5..681f839ff8 100644 +--- a/libavcodec/hpeldsp.c ++++ b/libavcodec/hpeldsp.c +@@ -367,4 +367,6 @@ av_cold void ff_hpeldsp_init(HpelDSPContext *c, int flags) + ff_hpeldsp_init_x86(c, flags); + if (ARCH_MIPS) + ff_hpeldsp_init_mips(c, flags); ++ if (ARCH_LOONGARCH) ++ ff_hpeldsp_init_loongarch(c, flags); + } +diff --git a/libavcodec/hpeldsp.h b/libavcodec/hpeldsp.h +index 768139bfc9..45e81b10a5 100644 +--- a/libavcodec/hpeldsp.h ++++ b/libavcodec/hpeldsp.h +@@ -102,5 +102,6 @@ void ff_hpeldsp_init_arm(HpelDSPContext *c, int flags); + void ff_hpeldsp_init_ppc(HpelDSPContext *c, int flags); + void ff_hpeldsp_init_x86(HpelDSPContext *c, int flags); + void ff_hpeldsp_init_mips(HpelDSPContext *c, int flags); ++void ff_hpeldsp_init_loongarch(HpelDSPContext *c, int flags); + + #endif /* AVCODEC_HPELDSP_H */ +diff --git a/libavcodec/idctdsp.c b/libavcodec/idctdsp.c +index 846ed0b0f8..71bd03c606 100644 +--- a/libavcodec/idctdsp.c ++++ b/libavcodec/idctdsp.c +@@ -315,6 +315,8 @@ av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx) + ff_idctdsp_init_x86(c, avctx, high_bit_depth); + if (ARCH_MIPS) + ff_idctdsp_init_mips(c, avctx, high_bit_depth); ++ if (ARCH_LOONGARCH) ++ ff_idctdsp_init_loongarch(c, avctx, high_bit_depth); + + ff_init_scantable_permutation(c->idct_permutation, + c->perm_type); +diff --git a/libavcodec/idctdsp.h b/libavcodec/idctdsp.h +index ca21a31a02..014488aec3 100644 +--- a/libavcodec/idctdsp.h ++++ b/libavcodec/idctdsp.h +@@ -118,5 +118,7 @@ void ff_idctdsp_init_x86(IDCTDSPContext *c, AVCodecContext *avctx, + unsigned high_bit_depth); + void ff_idctdsp_init_mips(IDCTDSPContext *c, AVCodecContext *avctx, + unsigned high_bit_depth); ++void ff_idctdsp_init_loongarch(IDCTDSPContext *c, AVCodecContext *avctx, ++ unsigned high_bit_depth); + + #endif /* AVCODEC_IDCTDSP_H */ +diff --git a/libavcodec/loongarch/Makefile b/libavcodec/loongarch/Makefile +new file mode 100644 +index 0000000000..2a8d7e430f +--- /dev/null ++++ b/libavcodec/loongarch/Makefile +@@ -0,0 +1,30 @@ ++OBJS-$(CONFIG_H264QPEL) += loongarch/h264qpel_init_loongarch.o ++OBJS-$(CONFIG_H264CHROMA) += loongarch/h264chroma_init_loongarch.o ++OBJS-$(CONFIG_H264DSP) += loongarch/h264dsp_init_loongarch.o ++OBJS-$(CONFIG_IDCTDSP) += loongarch/idctdsp_init_loongarch.o ++OBJS-$(CONFIG_VC1DSP) += loongarch/vc1dsp_init_loongarch.o ++OBJS-$(CONFIG_HPELDSP) += loongarch/hpeldsp_init_loongarch.o ++OBJS-$(CONFIG_HEVC_DECODER) += loongarch/hevcdsp_init_loongarch.o ++OBJS-$(CONFIG_VP8_DECODER) += loongarch/vp8dsp_init_loongarch.o ++OBJS-$(CONFIG_VP9_DECODER) += loongarch/vp9dsp_init_loongarch.o ++OBJS-$(CONFIG_VIDEODSP) += loongarch/videodsp_init.o ++LASX-OBJS-$(CONFIG_H264DSP) += loongarch/h264dsp_lasx.o \ ++ loongarch/h264idct_lasx.o \ ++ loongarch/h264_deblock_lasx.o ++LASX-OBJS-$(CONFIG_H264CHROMA) += loongarch/h264chroma_lasx.o ++LASX-OBJS-$(CONFIG_H264CHROMA) += loongarch/h264qpel_lasx.o ++LASX-OBJS-$(CONFIG_IDCTDSP) += loongarch/simple_idct_lasx.o \ ++ loongarch/idctdsp_lasx.o ++LASX-OBJS-$(CONFIG_VC1_DECODER) += loongarch/vc1dsp_lasx.o ++LASX-OBJS-$(CONFIG_HPELDSP) += loongarch/hpeldsp_lasx.o ++LSX-OBJS-$(CONFIG_HEVC_DECODER) += loongarch/hevcdsp_lsx.o ++LSX-OBJS-$(CONFIG_HEVC_DECODER) += loongarch/hevc_idct_lsx.o ++LSX-OBJS-$(CONFIG_HEVC_DECODER) += loongarch/hevc_mc_bi_lsx.o ++LSX-OBJS-$(CONFIG_HEVC_DECODER) += loongarch/hevc_lpf_sao_lsx.o ++LSX-OBJS-$(CONFIG_HEVC_DECODER) += loongarch/hevc_mc_uni_lsx.o ++LSX-OBJS-$(CONFIG_HEVC_DECODER) += loongarch/hevc_mc_uniw_lsx.o ++LSX-OBJS-$(CONFIG_VP9_DECODER) += loongarch/vp9_mc_lsx.o \ ++ loongarch/vp9_intra_lsx.o \ ++ loongarch/vp9_lpf_lsx.o \ ++ loongarch/vp9_idct_lsx.o ++LSX-OBJS-$(CONFIG_VP8_DECODER) += loongarch/vp8_lpf_lsx.o +diff --git a/libavcodec/loongarch/cabac.h b/libavcodec/loongarch/cabac.h +new file mode 100644 +index 0000000000..c0e17e3462 +--- /dev/null ++++ b/libavcodec/loongarch/cabac.h +@@ -0,0 +1,198 @@ ++/* ++ * Loongson optimized cabac ++ * ++ * Copyright (c) 2020 Loongson Technology Corporation Limited ++ * Contributed by Shiyou Yin ++ * Gu Xiwei(guxiwei-hf@loongson.cn) ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef AVCODEC_LOONGARCH_CABAC_H ++#define AVCODEC_LOONGARCH_CABAC_H ++ ++#include "libavcodec/cabac.h" ++#include "config.h" ++ ++#define get_cabac_inline get_cabac_inline_loongarch ++static av_always_inline int get_cabac_inline_loongarch(CABACContext *c, ++ uint8_t * const state){ ++ int64_t tmp0, tmp1, tmp2, bit; ++ ++ __asm__ volatile ( ++ "ld.bu %[bit], %[state], 0x0 \n\t" ++ "andi %[tmp0], %[c_range], 0xC0 \n\t" ++ "slli.d %[tmp0], %[tmp0], 0x01 \n\t" ++ "add.d %[tmp0], %[tmp0], %[tables] \n\t" ++ "add.d %[tmp0], %[tmp0], %[bit] \n\t" ++ /* tmp1: RangeLPS */ ++ "ld.bu %[tmp1], %[tmp0], %[lps_off] \n\t" ++ ++ "sub.d %[c_range], %[c_range], %[tmp1] \n\t" ++ "slli.d %[tmp0], %[c_range], 0x11 \n\t" ++ "bge %[tmp0], %[c_low], 1f \n\t" ++ "move %[c_range], %[tmp1] \n\t" ++ "nor %[bit], %[bit], %[bit] \n\t" ++ "sub.d %[c_low], %[c_low], %[tmp0] \n\t" ++ ++ "1: \n\t" ++ /* tmp1: *state */ ++ "add.d %[tmp0], %[tables], %[bit] \n\t" ++ "ld.bu %[tmp1], %[tmp0], %[mlps_off] \n\t" ++ /* tmp2: lps_mask */ ++ "add.d %[tmp0], %[tables], %[c_range] \n\t" ++ "ld.bu %[tmp2], %[tmp0], %[norm_off] \n\t" ++ ++ "andi %[bit], %[bit], 0x01 \n\t" ++ "st.b %[tmp1], %[state], 0x0 \n\t" ++ "sll.d %[c_range], %[c_range], %[tmp2] \n\t" ++ "sll.d %[c_low], %[c_low], %[tmp2] \n\t" ++ ++ "and %[tmp1], %[c_low], %[cabac_mask] \n\t" ++ "bnez %[tmp1], 1f \n\t" ++ "ld.hu %[tmp1], %[c_bytestream], 0x0 \n\t" ++ "addi.d %[tmp0], %[c_low], -0X01 \n\t" ++ "xor %[tmp0], %[c_low], %[tmp0] \n\t" ++ "srai.d %[tmp0], %[tmp0], 0x0f \n\t" ++ "add.d %[tmp0], %[tmp0], %[tables] \n\t" ++ /* tmp2: ff_h264_norm_shift[x >> (CABAC_BITS - 1)] */ ++ "ld.bu %[tmp2], %[tmp0], %[norm_off] \n\t" ++ ++ "revb.2h %[tmp0], %[tmp1] \n\t" ++ "slli.d %[tmp0], %[tmp0], 0x01 \n\t" ++ "sub.d %[tmp0], %[tmp0], %[cabac_mask] \n\t" ++ ++ "li.d %[tmp1], 0x07 \n\t" ++ "sub.d %[tmp1], %[tmp1], %[tmp2] \n\t" ++ "sll.d %[tmp0], %[tmp0], %[tmp1] \n\t" ++ "add.d %[c_low], %[c_low], %[tmp0] \n\t" ++ ++#if UNCHECKED_BITSTREAM_READER ++ "addi.d %[c_bytestream], %[c_bytestream], 0x02 \n\t" ++#else ++ "slt %[tmp0], %[c_bytestream], %[c_bytestream_end] \n\t" ++ "add.d %[c_bytestream], %[c_bytestream], %[tmp0] \n\t" ++ "add.d %[c_bytestream], %[c_bytestream], %[tmp0] \n\t" ++#endif ++ "1: \n\t" ++ : [bit]"=&r"(bit), [tmp0]"=&r"(tmp0), [tmp1]"=&r"(tmp1), [tmp2]"=&r"(tmp2), ++ [c_range]"+&r"(c->range), [c_low]"+&r"(c->low), ++ [c_bytestream]"+&r"(c->bytestream) ++ : [state]"r"(state), [tables]"r"(ff_h264_cabac_tables), ++#if !UNCHECKED_BITSTREAM_READER ++ [c_bytestream_end]"r"(c->bytestream_end), ++#endif ++ [lps_off]"i"(H264_LPS_RANGE_OFFSET), ++ [mlps_off]"i"(H264_MLPS_STATE_OFFSET + 128), ++ [norm_off]"i"(H264_NORM_SHIFT_OFFSET), ++ [cabac_mask]"r"(CABAC_MASK) ++ : "memory" ++ ); ++ ++ return bit; ++} ++ ++#define get_cabac_bypass get_cabac_bypass_loongarch ++static av_always_inline int get_cabac_bypass_loongarch(CABACContext *c) ++{ ++ int64_t tmp0, tmp1, tmp2; ++ int res = 0; ++ __asm__ volatile( ++ "slli.d %[c_low], %[c_low], 0x01 \n\t" ++ "and %[tmp0], %[c_low], %[cabac_mask] \n\t" ++ "bnez %[tmp0], 1f \n\t" ++ "ld.hu %[tmp1], %[c_bytestream], 0x0 \n\t" ++#if UNCHECKED_BITSTREAM_READER ++ "addi.d %[c_bytestream], %[c_bytestream], 0x02 \n\t" ++#else ++ "slt %[tmp0], %[c_bytestream], %[c_bytestream_end] \n\t" ++ "add.d %[c_bytestream], %[c_bytestream], %[tmp0] \n\t" ++ "add.d %[c_bytestream], %[c_bytestream], %[tmp0] \n\t" ++#endif ++ "revb.2h %[tmp1], %[tmp1] \n\t" ++ "slli.d %[tmp1], %[tmp1], 0x01 \n\t" ++ "sub.d %[tmp1], %[tmp1], %[cabac_mask] \n\t" ++ "add.d %[c_low], %[c_low], %[tmp1] \n\t" ++ "1: \n\t" ++ "slli.d %[tmp1], %[c_range], 0x11 \n\t" ++ "slt %[tmp0], %[c_low], %[tmp1] \n\t" ++ "sub.d %[tmp1], %[c_low], %[tmp1] \n\t" ++ "masknez %[tmp2], %[one], %[tmp0] \n\t" ++ "maskeqz %[res], %[res], %[tmp0] \n\t" ++ "or %[res], %[res], %[tmp2] \n\t" ++ "masknez %[tmp2], %[tmp1], %[tmp0] \n\t" ++ "maskeqz %[c_low], %[c_low], %[tmp0] \n\t" ++ "or %[c_low], %[c_low], %[tmp2] \n\t" ++ : [tmp0]"=&r"(tmp0), [tmp1]"=&r"(tmp1), [tmp2]"=&r"(tmp2), ++ [c_range]"+&r"(c->range), [c_low]"+&r"(c->low), ++ [c_bytestream]"+&r"(c->bytestream), [res]"+&r"(res) ++ : [cabac_mask]"r"(CABAC_MASK), ++#if !UNCHECKED_BITSTREAM_READER ++ [c_bytestream_end]"r"(c->bytestream_end), ++#endif ++ [one]"r"(0x01) ++ : "memory" ++ ); ++ return res; ++} ++ ++#define get_cabac_bypass_sign get_cabac_bypass_sign_loongarch ++static av_always_inline int get_cabac_bypass_sign_loongarch(CABACContext *c, int val) ++{ ++ int64_t tmp0, tmp1; ++ int res = val; ++ __asm__ volatile( ++ "slli.d %[c_low], %[c_low], 0x01 \n\t" ++ "and %[tmp0], %[c_low], %[cabac_mask] \n\t" ++ "bnez %[tmp0], 1f \n\t" ++ "ld.hu %[tmp1], %[c_bytestream], 0x0 \n\t" ++#if UNCHECKED_BITSTREAM_READER ++ "addi.d %[c_bytestream], %[c_bytestream], 0x02 \n\t" ++#else ++ "slt %[tmp0], %[c_bytestream], %[c_bytestream_end] \n\t" ++ "add.d %[c_bytestream], %[c_bytestream], %[tmp0] \n\t" ++ "add.d %[c_bytestream], %[c_bytestream], %[tmp0] \n\t" ++#endif ++ "revb.2h %[tmp1], %[tmp1] \n\t" ++ "slli.d %[tmp1], %[tmp1], 0x01 \n\t" ++ "sub.d %[tmp1], %[tmp1], %[cabac_mask] \n\t" ++ "add.d %[c_low], %[c_low], %[tmp1] \n\t" ++ "1: \n\t" ++ "slli.d %[tmp1], %[c_range], 0x11 \n\t" ++ "slt %[tmp0], %[c_low], %[tmp1] \n\t" ++ "sub.d %[tmp1], %[c_low], %[tmp1] \n\t" ++ "masknez %[tmp1], %[tmp1], %[tmp0] \n\t" ++ "maskeqz %[c_low], %[c_low], %[tmp0] \n\t" ++ "or %[c_low], %[c_low], %[tmp1] \n\t" ++ "sub.d %[tmp1], %[zero], %[res] \n\t" ++ "maskeqz %[tmp1], %[tmp1], %[tmp0] \n\t" ++ "masknez %[res], %[res], %[tmp0] \n\t" ++ "or %[res], %[res], %[tmp1] \n\t" ++ : [tmp0]"=&r"(tmp0), [tmp1]"=&r"(tmp1), [res]"+&r"(res), ++ [c_range]"+&r"(c->range), [c_low]"+&r"(c->low), ++ [c_bytestream]"+&r"(c->bytestream) ++ : [cabac_mask]"r"(CABAC_MASK), ++#if !UNCHECKED_BITSTREAM_READER ++ [c_bytestream_end]"r"(c->bytestream_end), ++#endif ++ [zero]"r"(0x0) ++ : "memory" ++ ); ++ ++ return res; ++} ++#endif /* AVCODEC_LOONGARCH_CABAC_H */ +diff --git a/libavcodec/loongarch/h264_deblock_lasx.c b/libavcodec/loongarch/h264_deblock_lasx.c +new file mode 100644 +index 0000000000..73706739a0 +--- /dev/null ++++ b/libavcodec/loongarch/h264_deblock_lasx.c +@@ -0,0 +1,144 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Xiwei Gu ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavcodec/bit_depth_template.c" ++#include "h264dsp_lasx.h" ++#include "libavutil/loongarch/generic_macros_lasx.h" ++ ++#define H264_LOOP_FILTER_STRENGTH_ITERATION_LASX(edges, step, mask_mv, dir, \ ++ d_idx, mask_dir) \ ++do { \ ++ int b_idx = 0; \ ++ int step_x4 = step << 2; \ ++ int d_idx_12 = d_idx + 12; \ ++ int d_idx_52 = d_idx + 52; \ ++ int d_idx_x4 = d_idx << 2; \ ++ int d_idx_x4_48 = d_idx_x4 + 48; \ ++ int dir_x32 = dir * 32; \ ++ uint8_t *ref_t = (uint8_t*)ref; \ ++ uint8_t *mv_t = (uint8_t*)mv; \ ++ uint8_t *nnz_t = (uint8_t*)nnz; \ ++ uint8_t *bS_t = (uint8_t*)bS; \ ++ mask_mv <<= 3; \ ++ for (; b_idx < edges; b_idx += step) { \ ++ out &= mask_dir; \ ++ if (!(mask_mv & b_idx)) { \ ++ if (bidir) { \ ++ ref2 = LASX_LD(ref_t + d_idx_12); \ ++ ref3 = LASX_LD(ref_t + d_idx_52); \ ++ ref0 = LASX_LD(ref_t + 12); \ ++ ref1 = LASX_LD(ref_t + 52); \ ++ ref2 = __lasx_xvilvl_w(ref3, ref2); \ ++ ref0 = __lasx_xvilvl_w(ref0, ref0); \ ++ ref1 = __lasx_xvilvl_w(ref1, ref1); \ ++ ref3 = __lasx_xvshuf4i_w(ref2, 0xB1); \ ++ ref0 = __lasx_xvsub_b(ref0, ref2); \ ++ ref1 = __lasx_xvsub_b(ref1, ref3); \ ++ ref0 = __lasx_xvor_v(ref0, ref1); \ ++\ ++ tmp2 = LASX_LD(mv_t + d_idx_x4_48); \ ++ tmp3 = LASX_LD(mv_t + 48); \ ++ tmp4 = LASX_LD(mv_t + 208); \ ++ tmp5 = LASX_LD(mv_t + 208 + d_idx_x4); \ ++ LASX_PCKEV_Q_2(tmp2, tmp2, tmp5, tmp5, tmp2, tmp5); \ ++ LASX_PCKEV_Q(tmp4, tmp3, tmp3); \ ++ tmp2 = __lasx_xvsub_h(tmp2, tmp3); \ ++ tmp5 = __lasx_xvsub_h(tmp5, tmp3); \ ++ LASX_SAT_H_2(tmp2, tmp5, tmp2, tmp5, 7); \ ++ LASX_PCKEV_B(tmp5, tmp2, tmp0); \ ++ tmp0 = __lasx_xvadd_b(tmp0, cnst_1); \ ++ tmp0 = __lasx_xvssub_bu(tmp0, cnst_0); \ ++ LASX_SAT_H(tmp0, tmp0, 7); \ ++ LASX_PCKEV_B(tmp0, tmp0, tmp0); \ ++ LASX_PCKOD_D_128SV(tmp0, tmp0, tmp1); \ ++ out = __lasx_xvor_v(ref0, tmp0); \ ++ tmp1 = __lasx_xvshuf4i_w(tmp1, 0xB1); \ ++ out = __lasx_xvor_v(out, tmp1); \ ++ tmp0 = __lasx_xvshuf4i_w(out, 0xB1); \ ++ out = __lasx_xvmin_bu(out, tmp0); \ ++ } else { \ ++ ref0 = LASX_LD(ref_t + d_idx_12); \ ++ ref3 = LASX_LD(ref_t + 12); \ ++ tmp2 = LASX_LD(mv_t + d_idx_x4_48); \ ++ tmp3 = LASX_LD(mv_t + 48); \ ++ tmp4 = __lasx_xvsub_h(tmp3, tmp2); \ ++ LASX_SAT_H(tmp4, tmp1, 7); \ ++ tmp1 = __lasx_xvpickev_b(tmp1, tmp1); \ ++ tmp1 = __lasx_xvadd_b(tmp1, cnst_1); \ ++ out = __lasx_xvssub_bu(tmp1, cnst_0); \ ++ LASX_SAT_H(out, out, 7); \ ++ out = __lasx_xvpickev_b(out, out); \ ++ ref0 = __lasx_xvsub_b(ref3, ref0); \ ++ out = __lasx_xvor_v(out, ref0); \ ++ } \ ++ } \ ++ tmp0 = LASX_LD(nnz_t + 12); \ ++ tmp1 = LASX_LD(nnz_t + d_idx_12); \ ++ tmp0 = __lasx_xvor_v(tmp0, tmp1); \ ++ tmp0 = __lasx_xvmin_bu(tmp0, cnst_2); \ ++ out = __lasx_xvmin_bu(out, cnst_2); \ ++ tmp0 = __lasx_xvslli_h(tmp0, 1); \ ++ tmp0 = __lasx_xvmax_bu(out, tmp0); \ ++ LASX_UNPCK_L_HU_BU(tmp0, tmp0); \ ++ LASX_ST_D(tmp0, 0, bS_t + dir_x32); \ ++ ref_t += step; \ ++ mv_t += step_x4; \ ++ nnz_t += step; \ ++ bS_t += step; \ ++ } \ ++} while(0) ++ ++void ff_h264_loop_filter_strength_lasx(int16_t bS[2][4][4], uint8_t nnz[40], ++ int8_t ref[2][40], int16_t mv[2][40][2], ++ int bidir, int edges, int step, ++ int mask_mv0, int mask_mv1, int field) ++{ ++ __m256i out; ++ __m256i ref0, ref1, ref2, ref3; ++ __m256i tmp0, tmp1; ++ __m256i tmp2, tmp3, tmp4, tmp5; ++ __m256i cnst_0, cnst_1, cnst_2; ++ __m256i zero = __lasx_xvldi(0); ++ __m256i one = __lasx_xvnor_v(zero, zero); ++ int64_t cnst3 = 0x0206020602060206, cnst4 = 0x0103010301030103; ++ if (field) { ++ cnst_0 = __lasx_xvreplgr2vr_d(cnst3); ++ cnst_1 = __lasx_xvreplgr2vr_d(cnst4); ++ cnst_2 = __lasx_xvldi(0x01); ++ } else { ++ cnst_0 = __lasx_xvldi(0x06); ++ cnst_1 = __lasx_xvldi(0x03); ++ cnst_2 = __lasx_xvldi(0x01); ++ } ++ step <<= 3; ++ edges <<= 3; ++ ++ H264_LOOP_FILTER_STRENGTH_ITERATION_LASX(edges, step, mask_mv1, 1, -8, zero); ++ H264_LOOP_FILTER_STRENGTH_ITERATION_LASX(32, 8, mask_mv0, 0, -1, one); ++ ++ LASX_LD_2((int8_t*)bS, 16, tmp0, tmp1); ++ LASX_ILVH_D_2_128SV(tmp0, tmp0, tmp1, tmp1, tmp2, tmp3); ++ LASX_TRANSPOSE4x4_H_128SV(tmp0, tmp2, tmp1, tmp3, tmp2, tmp3, tmp4, tmp5); ++ __lasx_xvstelm_d(tmp2, (int8_t*)bS, 0, 0); ++ __lasx_xvstelm_d(tmp3, (int8_t*)bS + 8, 0, 0); ++ __lasx_xvstelm_d(tmp4, (int8_t*)bS + 16, 0, 0); ++ __lasx_xvstelm_d(tmp5, (int8_t*)bS + 24, 0, 0); ++} +diff --git a/libavcodec/loongarch/h264chroma_init_loongarch.c b/libavcodec/loongarch/h264chroma_init_loongarch.c +new file mode 100644 +index 0000000000..5789b5f573 +--- /dev/null ++++ b/libavcodec/loongarch/h264chroma_init_loongarch.c +@@ -0,0 +1,35 @@ ++/* ++ * Copyright (c) 2020 Loongson Technology Corporation Limited ++ * Contributed by Shiyou Yin ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "h264chroma_lasx.h" ++#include "libavutil/loongarch/cpu.h" ++#include "libavcodec/h264chroma.h" ++ ++av_cold void ff_h264chroma_init_loongarch(H264ChromaContext *c, int bit_depth) ++{ ++ int cpu_flags = av_get_cpu_flags(); ++ if (have_lasx(cpu_flags)) { ++ if (bit_depth <= 8) { ++ c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_lasx; ++ c->avg_h264_chroma_pixels_tab[0] = ff_avg_h264_chroma_mc8_lasx; ++ } ++ } ++} +diff --git a/libavcodec/loongarch/h264chroma_lasx.c b/libavcodec/loongarch/h264chroma_lasx.c +new file mode 100644 +index 0000000000..4fbe99ba73 +--- /dev/null ++++ b/libavcodec/loongarch/h264chroma_lasx.c +@@ -0,0 +1,837 @@ ++/* ++ * Loongson LASX optimized h264chroma ++ * ++ * Copyright (c) 2020 Loongson Technology Corporation Limited ++ * Contributed by Shiyou Yin ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "h264chroma_lasx.h" ++#include "libavutil/attributes.h" ++#include "libavutil/avassert.h" ++#include "libavutil/loongarch/generic_macros_lasx.h" ++ ++static const uint8_t chroma_mask_arr[32] = { ++ 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, ++ 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, ++}; ++ ++static av_always_inline void avc_chroma_hv_8x4_lasx(uint8_t *src, uint8_t *dst, ++ ptrdiff_t stride, uint32_t coef_hor0, ++ uint32_t coef_hor1, uint32_t coef_ver0, ++ uint32_t coef_ver1) ++{ ++ __m256i src0, src1, src2, src3, src4, out; ++ __m256i res_hz0, res_hz1, res_hz2, res_vt0, res_vt1; ++ __m256i mask; ++ __m256i coeff_hz_vec0 = __lasx_xvreplgr2vr_b(coef_hor0); ++ __m256i coeff_hz_vec1 = __lasx_xvreplgr2vr_b(coef_hor1); ++ __m256i coeff_hz_vec = __lasx_xvilvl_b(coeff_hz_vec0, coeff_hz_vec1); ++ __m256i coeff_vt_vec0 = __lasx_xvreplgr2vr_h(coef_ver0); ++ __m256i coeff_vt_vec1 = __lasx_xvreplgr2vr_h(coef_ver1); ++ ++ mask = LASX_LD(chroma_mask_arr); ++ src0 = LASX_LD(src); ++ LASX_LD_4(src + stride, stride, src1, src2, src3, src4); ++ LASX_PCKEV_Q_2(src2, src1, src4, src3, src1, src3); ++ LASX_SHUF_B_128SV(src0, src0, mask, src0); ++ LASX_SHUF_B_2_128SV(src1, src1, src3, src3, mask, mask, src1, src3); ++ LASX_DP2_H_BU(src0, coeff_hz_vec, res_hz0); ++ LASX_DP2_H_BU(src1, coeff_hz_vec, res_hz1); ++ LASX_DP2_H_BU(src3, coeff_hz_vec, res_hz2); ++ res_vt0 = __lasx_xvmul_h(res_hz1, coeff_vt_vec0); ++ res_vt1 = __lasx_xvmul_h(res_hz2, coeff_vt_vec0); ++ LASX_PCKEV_Q(res_hz1, res_hz0, res_hz0); ++ res_hz1 = __lasx_xvpermi_q(res_hz1, res_hz2, 0x3); ++ res_hz0 = __lasx_xvmul_h(res_hz0, coeff_vt_vec1); ++ res_hz1 = __lasx_xvmul_h(res_hz1, coeff_vt_vec1); ++ res_vt0 = __lasx_xvadd_h(res_vt0, res_hz0); ++ res_vt1 = __lasx_xvadd_h(res_vt1, res_hz1); ++ LASX_SRARI_H_2(res_vt0, res_vt1, res_vt0, res_vt1, 6); ++ res_vt0 = __lasx_xvsat_hu(res_vt0, 7); ++ res_vt1 = __lasx_xvsat_hu(res_vt1, 7); ++ LASX_PCKEV_B_128SV(res_vt1, res_vt0, out); ++ LASX_ST_D_4(out, 0, 2, 1, 3, dst, stride); ++} ++ ++static av_always_inline void avc_chroma_hv_8x8_lasx(uint8_t *src, uint8_t *dst, ++ ptrdiff_t stride, uint32_t coef_hor0, ++ uint32_t coef_hor1, uint32_t coef_ver0, ++ uint32_t coef_ver1) ++{ ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8; ++ __m256i out0, out1; ++ __m256i res_hz0, res_hz1, res_hz2, res_hz3, res_hz4; ++ __m256i res_vt0, res_vt1, res_vt2, res_vt3; ++ __m256i mask; ++ __m256i coeff_hz_vec0 = __lasx_xvreplgr2vr_b(coef_hor0); ++ __m256i coeff_hz_vec1 = __lasx_xvreplgr2vr_b(coef_hor1); ++ __m256i coeff_hz_vec = __lasx_xvilvl_b(coeff_hz_vec0, coeff_hz_vec1); ++ __m256i coeff_vt_vec0 = __lasx_xvreplgr2vr_h(coef_ver0); ++ __m256i coeff_vt_vec1 = __lasx_xvreplgr2vr_h(coef_ver1); ++ ++ mask = LASX_LD(chroma_mask_arr); ++ src0 = LASX_LD(src); ++ LASX_LD_8(src + stride, stride, src1, src2, src3, src4, ++ src5, src6, src7, src8); ++ LASX_PCKEV_Q_4(src2, src1, src4, src3, src6, src5, src8, src7, ++ src1, src3, src5, src7); ++ LASX_SHUF_B_128SV(src0, src0, mask, src0); ++ LASX_SHUF_B_4_128SV(src1, src1, src3, src3, src5, src5, src7, src7, ++ mask, mask, mask, mask, src1, src3, src5, src7); ++ LASX_DP2_H_BU(src0, coeff_hz_vec, res_hz0); ++ LASX_DP2_H_BU(src1, coeff_hz_vec, res_hz1); ++ LASX_DP2_H_BU(src3, coeff_hz_vec, res_hz2); ++ LASX_DP2_H_BU(src5, coeff_hz_vec, res_hz3); ++ LASX_DP2_H_BU(src7, coeff_hz_vec, res_hz4); ++ res_vt0 = __lasx_xvmul_h(res_hz1, coeff_vt_vec0); ++ res_vt1 = __lasx_xvmul_h(res_hz2, coeff_vt_vec0); ++ res_vt2 = __lasx_xvmul_h(res_hz3, coeff_vt_vec0); ++ res_vt3 = __lasx_xvmul_h(res_hz4, coeff_vt_vec0); ++ LASX_PCKEV_Q(res_hz1, res_hz0, res_hz0); ++ res_hz1 = __lasx_xvpermi_q(res_hz1, res_hz2, 0x3); ++ res_hz2 = __lasx_xvpermi_q(res_hz2, res_hz3, 0x3); ++ res_hz3 = __lasx_xvpermi_q(res_hz3, res_hz4, 0x3); ++ res_hz0 = __lasx_xvmul_h(res_hz0, coeff_vt_vec1); ++ res_hz1 = __lasx_xvmul_h(res_hz1, coeff_vt_vec1); ++ res_hz2 = __lasx_xvmul_h(res_hz2, coeff_vt_vec1); ++ res_hz3 = __lasx_xvmul_h(res_hz3, coeff_vt_vec1); ++ res_vt0 = __lasx_xvadd_h(res_vt0, res_hz0); ++ res_vt1 = __lasx_xvadd_h(res_vt1, res_hz1); ++ res_vt2 = __lasx_xvadd_h(res_vt2, res_hz2); ++ res_vt3 = __lasx_xvadd_h(res_vt3, res_hz3); ++ LASX_SRARI_H_4(res_vt0, res_vt1, res_vt2, res_vt3, ++ res_vt0, res_vt1, res_vt2, res_vt3, 6); ++ res_vt0 = __lasx_xvsat_hu(res_vt0, 7); ++ res_vt1 = __lasx_xvsat_hu(res_vt1, 7); ++ res_vt2 = __lasx_xvsat_hu(res_vt2, 7); ++ res_vt3 = __lasx_xvsat_hu(res_vt3, 7); ++ LASX_PCKEV_B_2_128SV(res_vt1, res_vt0, res_vt3, res_vt2, out0, out1); ++ LASX_ST_D_4(out0, 0, 2, 1, 3, dst, stride); ++ LASX_ST_D_4(out1, 0, 2, 1, 3, dst + stride * 4, stride); ++} ++ ++static av_always_inline void avc_chroma_hz_8x4_lasx(uint8_t *src, uint8_t *dst, ++ ptrdiff_t stride, uint32_t coeff0, uint32_t coeff1) ++{ ++ __m256i src0, src1, src2, src3, out; ++ __m256i res0, res1; ++ __m256i mask; ++ __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); ++ __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); ++ __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); ++ ++ mask = LASX_LD(chroma_mask_arr); ++ LASX_LD_4(src, stride, src0, src1, src2, src3); ++ LASX_PCKEV_Q_2(src1, src0, src3, src2, src0, src2); ++ LASX_SHUF_B_2_128SV(src0, src0, src2, src2, mask, mask, src0, src2); ++ LASX_DP2_H_BU(src0, coeff_vec, res0); ++ LASX_DP2_H_BU(src2, coeff_vec, res1); ++ res0 = __lasx_xvslli_h(res0, 3); ++ res1 = __lasx_xvslli_h(res1, 3); ++ LASX_SRARI_H_2(res0, res1, res0, res1, 6); ++ res0 = __lasx_xvsat_hu(res0, 7); ++ res1 = __lasx_xvsat_hu(res1, 7); ++ LASX_PCKEV_B_128SV(res1, res0, out); ++ LASX_ST_D_4(out, 0, 2, 1, 3, dst, stride); ++} ++ ++static av_always_inline void avc_chroma_hz_8x8_lasx(uint8_t *src, uint8_t *dst, ++ ptrdiff_t stride, uint32_t coeff0, uint32_t coeff1) ++{ ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m256i out0, out1; ++ __m256i res0, res1, res2, res3; ++ __m256i mask; ++ __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); ++ __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); ++ __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); ++ ++ mask = LASX_LD(chroma_mask_arr); ++ LASX_LD_8(src, stride, src0, src1, src2, src3, src4, src5, src6, src7); ++ LASX_PCKEV_Q_4(src1, src0, src3, src2, src5, src4, src7, src6, ++ src0, src2, src4, src6); ++ LASX_SHUF_B_4_128SV(src0, src0, src2, src2, src4, src4, src6, src6, ++ mask, mask, mask, mask, src0, src2, src4, src6); ++ LASX_DP2_H_BU(src0, coeff_vec, res0); ++ LASX_DP2_H_BU(src2, coeff_vec, res1); ++ LASX_DP2_H_BU(src4, coeff_vec, res2); ++ LASX_DP2_H_BU(src6, coeff_vec, res3); ++ res0 = __lasx_xvslli_h(res0, 3); ++ res1 = __lasx_xvslli_h(res1, 3); ++ res2 = __lasx_xvslli_h(res2, 3); ++ res3 = __lasx_xvslli_h(res3, 3); ++ LASX_SRARI_H_4(res0, res1, res2, res3, ++ res0, res1, res2, res3, 6); ++ res0 = __lasx_xvsat_hu(res0, 7); ++ res1 = __lasx_xvsat_hu(res1, 7); ++ res2 = __lasx_xvsat_hu(res2, 7); ++ res3 = __lasx_xvsat_hu(res3, 7); ++ LASX_PCKEV_B_2_128SV(res1, res0, res3, res2, out0, out1); ++ LASX_ST_D_4(out0, 0, 2, 1, 3, dst, stride); ++ LASX_ST_D_4(out1, 0, 2, 1, 3, dst + stride * 4, stride) ++} ++ ++static av_always_inline void avc_chroma_hz_nonmult_lasx(uint8_t *src, ++ uint8_t *dst, ptrdiff_t stride, uint32_t coeff0, ++ uint32_t coeff1, int32_t height) ++{ ++ uint32_t row; ++ __m256i src0, src1, src2, src3, out; ++ __m256i res0, res1; ++ __m256i mask; ++ __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); ++ __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); ++ __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); ++ ++ mask = LASX_LD(chroma_mask_arr); ++ ++ for (row = height >> 2; row--;) { ++ LASX_LD_4(src, stride, src0, src1, src2, src3); ++ src += (stride * 4); ++ LASX_PCKEV_Q_2(src1, src0, src3, src2, src0, src2); ++ LASX_SHUF_B_2_128SV(src0, src0, src2, src2, mask, mask, src0, src2); ++ LASX_DP2_H_BU(src0, coeff_vec, res0); ++ LASX_DP2_H_BU(src2, coeff_vec, res1); ++ res0 = __lasx_xvslli_h(res0, 3); ++ res1 = __lasx_xvslli_h(res1, 3); ++ LASX_SRARI_H_2(res0, res1, res0, res1, 6); ++ res0 = __lasx_xvsat_hu(res0, 7); ++ res1 = __lasx_xvsat_hu(res1, 7); ++ LASX_PCKEV_B_128SV(res1, res0, out); ++ LASX_ST_D_4(out, 0, 2, 1, 3, dst, stride); ++ dst += (stride * 4); ++ } ++ ++ if ((height & 3)) { ++ for (row = (height & 3); row--;) { ++ src0 = LASX_LD(src); ++ src += stride; ++ LASX_SHUF_B_128SV(src0, src0, mask, src0); ++ LASX_DP2_H_BU(src0, coeff_vec, res0); ++ res0 = __lasx_xvslli_h(res0, 3); ++ LASX_SRARI_H(res0, res0, 6); ++ res0 = __lasx_xvsat_hu(res0, 7); ++ LASX_PCKEV_B_128SV(res0, res0, out); ++ LASX_ST_D(out, 0, dst); ++ dst += stride; ++ } ++ } ++} ++ ++static av_always_inline void avc_chroma_vt_8x4_lasx(uint8_t *src, uint8_t *dst, ++ ptrdiff_t stride, uint32_t coeff0, uint32_t coeff1) ++{ ++ __m256i src0, src1, src2, src3, src4, out; ++ __m256i res0, res1; ++ __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); ++ __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); ++ __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); ++ ++ src0 = LASX_LD(src); ++ LASX_LD_4(src + stride, stride, src1, src2, src3, src4); ++ LASX_PCKEV_Q_4(src1, src0, src2, src1, src3, src2, src4, src3, ++ src0, src1, src2, src3); ++ LASX_ILVL_B_2_128SV(src1, src0, src3, src2, src0, src2); ++ LASX_DP2_H_BU(src0, coeff_vec, res0); ++ LASX_DP2_H_BU(src2, coeff_vec, res1); ++ res0 = __lasx_xvslli_h(res0, 3); ++ res1 = __lasx_xvslli_h(res1, 3); ++ LASX_SRARI_H_2(res0, res1, res0, res1, 6); ++ res0 = __lasx_xvsat_hu(res0, 7); ++ res1 = __lasx_xvsat_hu(res1, 7); ++ LASX_PCKEV_B_128SV(res1, res0, out); ++ LASX_ST_D_4(out, 0, 2, 1, 3, dst, stride); ++} ++ ++static av_always_inline void avc_chroma_vt_8x8_lasx(uint8_t *src, uint8_t *dst, ++ ptrdiff_t stride, uint32_t coeff0, uint32_t coeff1) ++{ ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8; ++ __m256i out0, out1; ++ __m256i res0, res1, res2, res3; ++ __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); ++ __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); ++ __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); ++ ++ src0 = LASX_LD(src); ++ LASX_LD_8(src+stride, stride, src1, src2, src3, src4, ++ src5, src6, src7, src8); ++ LASX_PCKEV_Q_4(src1, src0, src2, src1, src3, src2, src4, src3, ++ src0, src1, src2, src3); ++ LASX_PCKEV_Q_4(src5, src4, src6, src5, src7, src6, src8, src7, ++ src4, src5, src6, src7); ++ LASX_ILVL_B_4_128SV(src1, src0, src3, src2, src5, src4, src7, src6, ++ src0, src2, src4, src6); ++ LASX_DP2_H_BU(src0, coeff_vec, res0); ++ LASX_DP2_H_BU(src2, coeff_vec, res1); ++ LASX_DP2_H_BU(src4, coeff_vec, res2); ++ LASX_DP2_H_BU(src6, coeff_vec, res3); ++ res0 = __lasx_xvslli_h(res0, 3); ++ res1 = __lasx_xvslli_h(res1, 3); ++ res2 = __lasx_xvslli_h(res2, 3); ++ res3 = __lasx_xvslli_h(res3, 3); ++ LASX_SRARI_H_4(res0, res1, res2, res3, res0, res1, res2, res3, 6); ++ res0 = __lasx_xvsat_hu(res0, 7); ++ res1 = __lasx_xvsat_hu(res1, 7); ++ res2 = __lasx_xvsat_hu(res2, 7); ++ res3 = __lasx_xvsat_hu(res3, 7); ++ LASX_PCKEV_B_2_128SV(res1, res0, res3, res2, out0, out1); ++ LASX_ST_D_4(out0, 0, 2, 1, 3, dst, stride); ++ LASX_ST_D_4(out1, 0, 2, 1, 3, dst + stride * 4, stride); ++} ++ ++static av_always_inline void copy_width8x8_lasx(uint8_t *src, uint8_t *dst, ++ ptrdiff_t stride) ++{ ++ uint64_t tmp[8]; ++ __asm__ volatile ( ++ "ld.d %[tmp0], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp1], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp2], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp3], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp4], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp5], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp6], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp7], %[src], 0x0 \n\t" ++ ++ "st.d %[tmp0], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp1], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp2], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp3], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp4], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp5], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp6], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp7], %[dst], 0x0 \n\t" ++ : [tmp0]"=&r"(tmp[0]), [tmp1]"=&r"(tmp[1]), ++ [tmp2]"=&r"(tmp[2]), [tmp3]"=&r"(tmp[3]), ++ [tmp4]"=&r"(tmp[4]), [tmp5]"=&r"(tmp[5]), ++ [tmp6]"=&r"(tmp[6]), [tmp7]"=&r"(tmp[7]), ++ [dst]"+&r"(dst), [src]"+&r"(src) ++ : [stride]"r"(stride) ++ : "memory" ++ ); ++} ++ ++static av_always_inline void copy_width8x4_lasx(uint8_t *src, uint8_t *dst, ++ ptrdiff_t stride) ++{ ++ uint64_t tmp[4]; ++ __asm__ volatile ( ++ "ld.d %[tmp0], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp1], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp2], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp3], %[src], 0x0 \n\t" ++ ++ "st.d %[tmp0], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp1], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp2], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp3], %[dst], 0x0 \n\t" ++ : [tmp0]"=&r"(tmp[0]), [tmp1]"=&r"(tmp[1]), ++ [tmp2]"=&r"(tmp[2]), [tmp3]"=&r"(tmp[3]), ++ [dst]"+&r"(dst), [src]"+&r"(src) ++ : [stride]"r"(stride) ++ : "memory" ++ ); ++} ++ ++static void avc_chroma_hv_8w_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ uint32_t coef_hor0, uint32_t coef_hor1, ++ uint32_t coef_ver0, uint32_t coef_ver1, ++ int32_t height) ++{ ++ if (4 == height) { ++ avc_chroma_hv_8x4_lasx(src, dst, stride, coef_hor0, coef_hor1, coef_ver0, ++ coef_ver1); ++ } else if (8 == height) { ++ avc_chroma_hv_8x8_lasx(src, dst, stride, coef_hor0, coef_hor1, coef_ver0, ++ coef_ver1); ++ } ++} ++ ++static void avc_chroma_hz_8w_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ uint32_t coeff0, uint32_t coeff1, ++ int32_t height) ++{ ++ if (4 == height) { ++ avc_chroma_hz_8x4_lasx(src, dst, stride, coeff0, coeff1); ++ } else if (8 == height) { ++ avc_chroma_hz_8x8_lasx(src, dst, stride, coeff0, coeff1); ++ } else { ++ avc_chroma_hz_nonmult_lasx(src, dst, stride, coeff0, coeff1, height); ++ } ++} ++ ++static void avc_chroma_vt_8w_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ uint32_t coeff0, uint32_t coeff1, ++ int32_t height) ++{ ++ if (4 == height) { ++ avc_chroma_vt_8x4_lasx(src, dst, stride, coeff0, coeff1); ++ } else if (8 == height) { ++ avc_chroma_vt_8x8_lasx(src, dst, stride, coeff0, coeff1); ++ } ++} ++ ++static void copy_width8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ int32_t height) ++{ ++ if (8 == height) { ++ copy_width8x8_lasx(src, dst, stride); ++ } else if (4 == height) { ++ copy_width8x4_lasx(src, dst, stride); ++ } ++} ++ ++void ff_put_h264_chroma_mc8_lasx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++ int height, int x, int y) ++{ ++ av_assert2(x < 8 && y < 8 && x >= 0 && y >= 0); ++ ++ if (!(x || y)) { ++ copy_width8_lasx(src, dst, stride, height); ++ } else if (x && y) { ++ avc_chroma_hv_8w_lasx(src, dst, stride, x, (8 - x), y, (8 - y), height); ++ } else if (x) { ++ avc_chroma_hz_8w_lasx(src, dst, stride, x, (8 - x), height); ++ } else { ++ avc_chroma_vt_8w_lasx(src, dst, stride, y, (8 - y), height); ++ } ++} ++ ++static av_always_inline void avc_chroma_hv_and_aver_dst_8x4_lasx(uint8_t *src, ++ uint8_t *dst, ptrdiff_t stride, uint32_t coef_hor0, ++ uint32_t coef_hor1, uint32_t coef_ver0, ++ uint32_t coef_ver1) ++{ ++ __m256i tp0, tp1, tp2, tp3; ++ __m256i src0, src1, src2, src3, src4, out; ++ __m256i res_hz0, res_hz1, res_hz2, res_vt0, res_vt1; ++ __m256i mask; ++ __m256i coeff_hz_vec0 = __lasx_xvreplgr2vr_b(coef_hor0); ++ __m256i coeff_hz_vec1 = __lasx_xvreplgr2vr_b(coef_hor1); ++ __m256i coeff_hz_vec = __lasx_xvilvl_b(coeff_hz_vec0, coeff_hz_vec1); ++ __m256i coeff_vt_vec0 = __lasx_xvreplgr2vr_h(coef_ver0); ++ __m256i coeff_vt_vec1 = __lasx_xvreplgr2vr_h(coef_ver1); ++ ++ mask = LASX_LD(chroma_mask_arr); ++ src0 = LASX_LD(src); ++ LASX_LD_4(src + stride, stride, src1, src2, src3, src4); ++ LASX_PCKEV_Q_2(src2, src1, src4, src3, src1, src3); ++ LASX_SHUF_B_128SV(src0, src0, mask, src0); ++ LASX_SHUF_B_2_128SV(src1, src1, src3, src3, mask, mask, src1, src3); ++ LASX_DP2_H_BU(src0, coeff_hz_vec, res_hz0); ++ LASX_DP2_H_BU(src1, coeff_hz_vec, res_hz1); ++ LASX_DP2_H_BU(src3, coeff_hz_vec, res_hz2); ++ res_vt0 = __lasx_xvmul_h(res_hz1, coeff_vt_vec0); ++ res_vt1 = __lasx_xvmul_h(res_hz2, coeff_vt_vec0); ++ LASX_PCKEV_Q(res_hz1, res_hz0, res_hz0); ++ res_hz1 = __lasx_xvpermi_q(res_hz1, res_hz2, 0x3); ++ res_hz0 = __lasx_xvmul_h(res_hz0, coeff_vt_vec1); ++ res_hz1 = __lasx_xvmul_h(res_hz1, coeff_vt_vec1); ++ res_vt0 = __lasx_xvadd_h(res_vt0, res_hz0); ++ res_vt1 = __lasx_xvadd_h(res_vt1, res_hz1); ++ LASX_SRARI_H_2(res_vt0, res_vt1, res_vt0, res_vt1, 6); ++ res_vt0 = __lasx_xvsat_hu(res_vt0, 7); ++ res_vt1 = __lasx_xvsat_hu(res_vt1, 7); ++ LASX_PCKEV_B_128SV(res_vt1, res_vt0, out); ++ LASX_LD_4(dst, stride, tp0, tp1, tp2, tp3); ++ LASX_ILVL_D_2_128SV(tp2, tp0, tp3, tp1, tp0, tp2); ++ LASX_PCKEV_Q(tp2, tp0, tp0); ++ out = __lasx_xvavgr_bu(out, tp0); ++ LASX_ST_D_4(out, 0, 2, 1, 3, dst, stride); ++} ++ ++static av_always_inline void avc_chroma_hv_and_aver_dst_8x8_lasx(uint8_t *src, ++ uint8_t *dst, ptrdiff_t stride, uint32_t coef_hor0, ++ uint32_t coef_hor1, uint32_t coef_ver0, ++ uint32_t coef_ver1) ++{ ++ __m256i tp0, tp1, tp2, tp3, dst0, dst1; ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8; ++ __m256i out0, out1; ++ __m256i res_hz0, res_hz1, res_hz2, res_hz3, res_hz4; ++ __m256i res_vt0, res_vt1, res_vt2, res_vt3; ++ __m256i mask; ++ __m256i coeff_hz_vec0 = __lasx_xvreplgr2vr_b(coef_hor0); ++ __m256i coeff_hz_vec1 = __lasx_xvreplgr2vr_b(coef_hor1); ++ __m256i coeff_vt_vec0 = __lasx_xvreplgr2vr_h(coef_ver0); ++ __m256i coeff_vt_vec1 = __lasx_xvreplgr2vr_h(coef_ver1); ++ __m256i coeff_hz_vec = __lasx_xvilvl_b(coeff_hz_vec0, coeff_hz_vec1); ++ ++ mask = LASX_LD(chroma_mask_arr); ++ src0 = LASX_LD(src); ++ LASX_LD_8(src + stride, stride, src1, src2, src3, src4, ++ src5, src6, src7, src8); ++ LASX_PCKEV_Q_4(src2, src1, src4, src3, src6, src5, src8, src7, ++ src1, src3, src5, src7); ++ LASX_SHUF_B_128SV(src0, src0, mask, src0); ++ LASX_SHUF_B_4_128SV(src1, src1, src3, src3, src5, src5, src7, src7, ++ mask, mask, mask, mask, src1, src3, src5, src7); ++ LASX_DP2_H_BU(src0, coeff_hz_vec, res_hz0); ++ LASX_DP2_H_BU(src1, coeff_hz_vec, res_hz1); ++ LASX_DP2_H_BU(src3, coeff_hz_vec, res_hz2); ++ LASX_DP2_H_BU(src5, coeff_hz_vec, res_hz3); ++ LASX_DP2_H_BU(src7, coeff_hz_vec, res_hz4); ++ res_vt0 = __lasx_xvmul_h(res_hz1, coeff_vt_vec0); ++ res_vt1 = __lasx_xvmul_h(res_hz2, coeff_vt_vec0); ++ res_vt2 = __lasx_xvmul_h(res_hz3, coeff_vt_vec0); ++ res_vt3 = __lasx_xvmul_h(res_hz4, coeff_vt_vec0); ++ LASX_PCKEV_Q(res_hz1, res_hz0, res_hz0); ++ res_hz1 = __lasx_xvpermi_q(res_hz1, res_hz2, 0x3); ++ res_hz2 = __lasx_xvpermi_q(res_hz2, res_hz3, 0x3); ++ res_hz3 = __lasx_xvpermi_q(res_hz3, res_hz4, 0x3); ++ res_hz0 = __lasx_xvmul_h(res_hz0, coeff_vt_vec1); ++ res_hz1 = __lasx_xvmul_h(res_hz1, coeff_vt_vec1); ++ res_hz2 = __lasx_xvmul_h(res_hz2, coeff_vt_vec1); ++ res_hz3 = __lasx_xvmul_h(res_hz3, coeff_vt_vec1); ++ res_vt0 = __lasx_xvadd_h(res_vt0, res_hz0); ++ res_vt1 = __lasx_xvadd_h(res_vt1, res_hz1); ++ res_vt2 = __lasx_xvadd_h(res_vt2, res_hz2); ++ res_vt3 = __lasx_xvadd_h(res_vt3, res_hz3); ++ LASX_SRARI_H_4(res_vt0, res_vt1, res_vt2, res_vt3, ++ res_vt0, res_vt1, res_vt2, res_vt3, 6); ++ res_vt0 = __lasx_xvsat_hu(res_vt0, 7); ++ res_vt1 = __lasx_xvsat_hu(res_vt1, 7); ++ res_vt2 = __lasx_xvsat_hu(res_vt2, 7); ++ res_vt3 = __lasx_xvsat_hu(res_vt3, 7); ++ LASX_PCKEV_B_2_128SV(res_vt1, res_vt0, res_vt3, res_vt2, out0, out1); ++ LASX_LD_4(dst, stride, tp0, tp1, tp2, tp3); ++ LASX_ILVL_D_2_128SV(tp2, tp0, tp3, tp1, tp0, tp2); ++ LASX_PCKEV_Q(tp2, tp0, dst0); ++ LASX_LD_4(dst + 4 * stride, stride, tp0, tp1, tp2, tp3); ++ LASX_ILVL_D_2_128SV(tp2, tp0, tp3, tp1, tp0, tp2); ++ LASX_PCKEV_Q(tp2, tp0, dst1); ++ out0 = __lasx_xvavgr_bu(out0, dst0); ++ out1 = __lasx_xvavgr_bu(out1, dst1); ++ LASX_ST_D_4(out0, 0, 2, 1, 3, dst, stride); ++ LASX_ST_D_4(out1, 0, 2, 1, 3, dst + stride * 4, stride); ++} ++ ++static av_always_inline void avc_chroma_hz_and_aver_dst_8x4_lasx(uint8_t *src, ++ uint8_t *dst, ptrdiff_t stride, uint32_t coeff0, ++ uint32_t coeff1) ++{ ++ __m256i tp0, tp1, tp2, tp3; ++ __m256i src0, src1, src2, src3, out; ++ __m256i res0, res1; ++ __m256i mask; ++ __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); ++ __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); ++ __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); ++ ++ mask = LASX_LD(chroma_mask_arr); ++ LASX_LD_4(src, stride, src0, src1, src2, src3); ++ LASX_PCKEV_Q_2(src1, src0, src3, src2, src0, src2); ++ LASX_SHUF_B_2_128SV(src0, src0, src2, src2, mask, mask, src0, src2); ++ LASX_DP2_H_BU(src0, coeff_vec, res0); ++ LASX_DP2_H_BU(src2, coeff_vec, res1); ++ res0 = __lasx_xvslli_h(res0, 3); ++ res1 = __lasx_xvslli_h(res1, 3); ++ LASX_SRARI_H_2(res0, res1, res0, res1, 6); ++ res0 = __lasx_xvsat_hu(res0, 7); ++ res1 = __lasx_xvsat_hu(res1, 7); ++ LASX_PCKEV_B_128SV(res1, res0, out); ++ LASX_LD_4(dst, stride, tp0, tp1, tp2, tp3); ++ LASX_ILVL_D_2_128SV(tp2, tp0, tp3, tp1, tp0, tp2); ++ LASX_PCKEV_Q(tp2, tp0, tp0); ++ out = __lasx_xvavgr_bu(out, tp0); ++ LASX_ST_D_4(out, 0, 2, 1, 3, dst, stride); ++} ++ ++static av_always_inline void avc_chroma_hz_and_aver_dst_8x8_lasx(uint8_t *src, ++ uint8_t *dst, ptrdiff_t stride, uint32_t coeff0, ++ uint32_t coeff1) ++{ ++ __m256i tp0, tp1, tp2, tp3, dst0, dst1; ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m256i out0, out1; ++ __m256i res0, res1, res2, res3; ++ __m256i mask; ++ __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); ++ __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); ++ __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); ++ ++ mask = LASX_LD(chroma_mask_arr); ++ LASX_LD_8(src, stride, src0, src1, src2, src3, src4, src5, src6, src7); ++ LASX_PCKEV_Q_4(src1, src0, src3, src2, src5, src4, src7, src6, ++ src0, src2, src4, src6); ++ LASX_SHUF_B_4_128SV(src0, src0, src2, src2, src4, src4, src6, src6, ++ mask, mask, mask, mask, src0, src2, src4, src6); ++ LASX_DP2_H_BU(src0, coeff_vec, res0); ++ LASX_DP2_H_BU(src2, coeff_vec, res1); ++ LASX_DP2_H_BU(src4, coeff_vec, res2); ++ LASX_DP2_H_BU(src6, coeff_vec, res3); ++ res0 = __lasx_xvslli_h(res0, 3); ++ res1 = __lasx_xvslli_h(res1, 3); ++ res2 = __lasx_xvslli_h(res2, 3); ++ res3 = __lasx_xvslli_h(res3, 3); ++ LASX_SRARI_H_4(res0, res1, res2, res3, ++ res0, res1, res2, res3, 6); ++ res0 = __lasx_xvsat_hu(res0, 7); ++ res1 = __lasx_xvsat_hu(res1, 7); ++ res2 = __lasx_xvsat_hu(res2, 7); ++ res3 = __lasx_xvsat_hu(res3, 7); ++ LASX_PCKEV_B_2_128SV(res1, res0, res3, res2, out0, out1); ++ LASX_LD_4(dst, stride, tp0, tp1, tp2, tp3); ++ LASX_ILVL_D_2_128SV(tp2, tp0, tp3, tp1, tp0, tp2); ++ LASX_PCKEV_Q(tp2, tp0, dst0); ++ LASX_LD_4(dst + 4 * stride, stride, tp0, tp1, tp2, tp3); ++ LASX_ILVL_D_2_128SV(tp2, tp0, tp3, tp1, tp0, tp2); ++ LASX_PCKEV_Q(tp2, tp0, dst1); ++ out0 = __lasx_xvavgr_bu(out0, dst0); ++ out1 = __lasx_xvavgr_bu(out1, dst1); ++ LASX_ST_D_4(out0, 0, 2, 1, 3, dst, stride); ++ LASX_ST_D_4(out1, 0, 2, 1, 3, dst + stride * 4, stride) ++} ++ ++static av_always_inline void avc_chroma_vt_and_aver_dst_8x4_lasx(uint8_t *src, ++ uint8_t *dst, ptrdiff_t stride, uint32_t coeff0, ++ uint32_t coeff1) ++{ ++ __m256i tp0, tp1, tp2, tp3; ++ __m256i src0, src1, src2, src3, src4, out; ++ __m256i res0, res1; ++ __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); ++ __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); ++ __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); ++ ++ src0 = LASX_LD(src); ++ LASX_LD_4(src + stride, stride, src1, src2, src3, src4); ++ LASX_PCKEV_Q_4(src1, src0, src2, src1, src3, src2, src4, src3, ++ src0, src1, src2, src3); ++ LASX_ILVL_B_2_128SV(src1, src0, src3, src2, src0, src2); ++ LASX_DP2_H_BU(src0, coeff_vec, res0); ++ LASX_DP2_H_BU(src2, coeff_vec, res1); ++ res0 = __lasx_xvslli_h(res0, 3); ++ res1 = __lasx_xvslli_h(res1, 3); ++ LASX_SRARI_H_2(res0, res1, res0, res1, 6); ++ res0 = __lasx_xvsat_hu(res0, 7); ++ res1 = __lasx_xvsat_hu(res1, 7); ++ LASX_PCKEV_B_128SV(res1, res0, out); ++ LASX_LD_4(dst, stride, tp0, tp1, tp2, tp3); ++ LASX_ILVL_D_2_128SV(tp2, tp0, tp3, tp1, tp0, tp2); ++ LASX_PCKEV_Q(tp2, tp0, tp0); ++ out = __lasx_xvavgr_bu(out, tp0); ++ LASX_ST_D_4(out, 0, 2, 1, 3, dst, stride); ++} ++ ++static av_always_inline void avc_chroma_vt_and_aver_dst_8x8_lasx(uint8_t *src, ++ uint8_t *dst, ptrdiff_t stride, uint32_t coeff0, ++ uint32_t coeff1) ++{ ++ __m256i tp0, tp1, tp2, tp3, dst0, dst1; ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8; ++ __m256i out0, out1; ++ __m256i res0, res1, res2, res3; ++ __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); ++ __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); ++ __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); ++ ++ src0 = LASX_LD(src); ++ LASX_LD_8(src + stride, stride, src1, src2, src3, src4, ++ src5, src6, src7, src8); ++ LASX_PCKEV_Q_4(src1, src0, src2, src1, src3, src2, src4, src3, ++ src0, src1, src2, src3); ++ LASX_PCKEV_Q_4(src5, src4, src6, src5, src7, src6, src8, src7, ++ src4, src5, src6, src7); ++ LASX_ILVL_B_4_128SV(src1, src0, src3, src2, src5, src4, src7, src6, ++ src0, src2, src4, src6); ++ LASX_DP2_H_BU(src0, coeff_vec, res0); ++ LASX_DP2_H_BU(src2, coeff_vec, res1); ++ LASX_DP2_H_BU(src4, coeff_vec, res2); ++ LASX_DP2_H_BU(src6, coeff_vec, res3); ++ res0 = __lasx_xvslli_h(res0, 3); ++ res1 = __lasx_xvslli_h(res1, 3); ++ res2 = __lasx_xvslli_h(res2, 3); ++ res3 = __lasx_xvslli_h(res3, 3); ++ LASX_SRARI_H_4(res0, res1, res2, res3, res0, res1, res2, res3, 6); ++ res0 = __lasx_xvsat_hu(res0, 7); ++ res1 = __lasx_xvsat_hu(res1, 7); ++ res2 = __lasx_xvsat_hu(res2, 7); ++ res3 = __lasx_xvsat_hu(res3, 7); ++ LASX_PCKEV_B_2_128SV(res1, res0, res3, res2, out0, out1); ++ LASX_LD_4(dst, stride, tp0, tp1, tp2, tp3); ++ LASX_ILVL_D_2_128SV(tp2, tp0, tp3, tp1, tp0, tp2); ++ LASX_PCKEV_Q(tp2, tp0, dst0); ++ LASX_LD_4(dst + 4 * stride, stride, tp0, tp1, tp2, tp3); ++ LASX_ILVL_D_2_128SV(tp2, tp0, tp3, tp1, tp0, tp2); ++ LASX_PCKEV_Q(tp2, tp0, dst1); ++ out0 = __lasx_xvavgr_bu(out0, dst0); ++ out1 = __lasx_xvavgr_bu(out1, dst1); ++ LASX_ST_D_4(out0, 0, 2, 1, 3, dst, stride); ++ LASX_ST_D_4(out1, 0, 2, 1, 3, dst + stride * 4, stride); ++} ++ ++static av_always_inline void avg_width8x8_lasx(uint8_t *src, uint8_t *dst, ++ ptrdiff_t stride) ++{ ++ __m256i src0, src1, src2, src3; ++ __m256i dst0, dst1, dst2, dst3; ++ ptrdiff_t stride_x2 = stride << 1; ++ ptrdiff_t stride_x3 = stride_x2 + stride; ++ ptrdiff_t stride_x4 = stride << 2; ++ ++ src0 = __lasx_xvldrepl_d(src, 0); ++ src1 = __lasx_xvldrepl_d(src + stride, 0); ++ src2 = __lasx_xvldrepl_d(src + stride_x2, 0); ++ src3 = __lasx_xvldrepl_d(src + stride_x3, 0); ++ dst0 = __lasx_xvldrepl_d(dst, 0); ++ dst1 = __lasx_xvldrepl_d(dst + stride, 0); ++ dst2 = __lasx_xvldrepl_d(dst + stride_x2, 0); ++ dst3 = __lasx_xvldrepl_d(dst + stride_x3, 0); ++ src0 = __lasx_xvpackev_d(src1,src0); ++ src2 = __lasx_xvpackev_d(src3,src2); ++ src0 = __lasx_xvpermi_q(src0, src2, 0x02); ++ dst0 = __lasx_xvpackev_d(dst1,dst0); ++ dst2 = __lasx_xvpackev_d(dst3,dst2); ++ dst0 = __lasx_xvpermi_q(dst0, dst2, 0x02); ++ dst0 = __lasx_xvavgr_bu(src0, dst0); ++ LASX_ST_D_4(dst0, 0, 1, 2, 3, dst, stride); ++ ++ src += stride_x4; ++ dst += stride_x4; ++ src0 = __lasx_xvldrepl_d(src, 0); ++ src1 = __lasx_xvldrepl_d(src + stride, 0); ++ src2 = __lasx_xvldrepl_d(src + stride_x2, 0); ++ src3 = __lasx_xvldrepl_d(src + stride_x3, 0); ++ dst0 = __lasx_xvldrepl_d(dst, 0); ++ dst1 = __lasx_xvldrepl_d(dst + stride, 0); ++ dst2 = __lasx_xvldrepl_d(dst + stride_x2, 0); ++ dst3 = __lasx_xvldrepl_d(dst + stride_x3, 0); ++ src0 = __lasx_xvpackev_d(src1,src0); ++ src2 = __lasx_xvpackev_d(src3,src2); ++ src0 = __lasx_xvpermi_q(src0, src2, 0x02); ++ dst0 = __lasx_xvpackev_d(dst1,dst0); ++ dst2 = __lasx_xvpackev_d(dst3,dst2); ++ dst0 = __lasx_xvpermi_q(dst0, dst2, 0x02); ++ dst0 = __lasx_xvavgr_bu(src0, dst0); ++ LASX_ST_D_4(dst0, 0, 1, 2, 3, dst, stride); ++} ++ ++static av_always_inline void avg_width8x4_lasx(uint8_t *src, uint8_t *dst, ++ ptrdiff_t stride) ++{ ++ __m256i src0, src1, src2, src3; ++ __m256i dst0, dst1, dst2, dst3; ++ ptrdiff_t stride_x2 = stride << 1; ++ ptrdiff_t stride_x3 = stride_x2 + stride; ++ ++ src0 = __lasx_xvldrepl_d(src, 0); ++ src1 = __lasx_xvldrepl_d(src + stride, 0); ++ src2 = __lasx_xvldrepl_d(src + stride_x2, 0); ++ src3 = __lasx_xvldrepl_d(src + stride_x3, 0); ++ dst0 = __lasx_xvldrepl_d(dst, 0); ++ dst1 = __lasx_xvldrepl_d(dst + stride, 0); ++ dst2 = __lasx_xvldrepl_d(dst + stride_x2, 0); ++ dst3 = __lasx_xvldrepl_d(dst + stride_x3, 0); ++ src0 = __lasx_xvpackev_d(src1,src0); ++ src2 = __lasx_xvpackev_d(src3,src2); ++ src0 = __lasx_xvpermi_q(src0, src2, 0x02); ++ dst0 = __lasx_xvpackev_d(dst1,dst0); ++ dst2 = __lasx_xvpackev_d(dst3,dst2); ++ dst0 = __lasx_xvpermi_q(dst0, dst2, 0x02); ++ dst0 = __lasx_xvavgr_bu(src0, dst0); ++ LASX_ST_D_4(dst0, 0, 1, 2, 3, dst, stride); ++} ++ ++static void avc_chroma_hv_and_aver_dst_8w_lasx(uint8_t *src, uint8_t *dst, ++ ptrdiff_t stride, ++ uint32_t coef_hor0, ++ uint32_t coef_hor1, ++ uint32_t coef_ver0, ++ uint32_t coef_ver1, ++ int32_t height) ++{ ++ if (4 == height) { ++ avc_chroma_hv_and_aver_dst_8x4_lasx(src, dst, stride, coef_hor0, ++ coef_hor1, coef_ver0, coef_ver1); ++ } else if (8 == height) { ++ avc_chroma_hv_and_aver_dst_8x8_lasx(src, dst, stride, coef_hor0, ++ coef_hor1, coef_ver0, coef_ver1); ++ } ++} ++ ++static void avc_chroma_hz_and_aver_dst_8w_lasx(uint8_t *src, uint8_t *dst, ++ ptrdiff_t stride, uint32_t coeff0, ++ uint32_t coeff1, int32_t height) ++{ ++ if (4 == height) { ++ avc_chroma_hz_and_aver_dst_8x4_lasx(src, dst, stride, coeff0, coeff1); ++ } else if (8 == height) { ++ avc_chroma_hz_and_aver_dst_8x8_lasx(src, dst, stride, coeff0, coeff1); ++ } ++} ++ ++static void avc_chroma_vt_and_aver_dst_8w_lasx(uint8_t *src, uint8_t *dst, ++ ptrdiff_t stride, uint32_t coeff0, ++ uint32_t coeff1, int32_t height) ++{ ++ if (4 == height) { ++ avc_chroma_vt_and_aver_dst_8x4_lasx(src, dst, stride, coeff0, coeff1); ++ } else if (8 == height) { ++ avc_chroma_vt_and_aver_dst_8x8_lasx(src, dst, stride, coeff0, coeff1); ++ } ++} ++ ++static void avg_width8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ int32_t height) ++{ ++ if (8 == height) { ++ avg_width8x8_lasx(src, dst, stride); ++ } else if (4 == height) { ++ avg_width8x4_lasx(src, dst, stride); ++ } ++} ++ ++void ff_avg_h264_chroma_mc8_lasx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++ int height, int x, int y) ++{ ++ av_assert2(x < 8 && y < 8 && x >= 0 && y >= 0); ++ ++ if (!(x || y)) { ++ avg_width8_lasx(src, dst, stride, height); ++ } else if (x && y) { ++ avc_chroma_hv_and_aver_dst_8w_lasx(src, dst, stride, x, (8 - x), y, ++ (8 - y), height); ++ } else if (x) { ++ avc_chroma_hz_and_aver_dst_8w_lasx(src, dst, stride, x, (8 - x), height); ++ } else { ++ avc_chroma_vt_and_aver_dst_8w_lasx(src, dst, stride, y, (8 - y), height); ++ } ++} +diff --git a/libavcodec/loongarch/h264chroma_lasx.h b/libavcodec/loongarch/h264chroma_lasx.h +new file mode 100644 +index 0000000000..3b70e1dccb +--- /dev/null ++++ b/libavcodec/loongarch/h264chroma_lasx.h +@@ -0,0 +1,34 @@ ++/* ++ * Copyright (c) 2020 Loongson Technology Corporation Limited ++ * Contributed by Shiyou Yin ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef AVCODEC_LOONGARCH_H264CHROMA_LASX_H ++#define AVCODEC_LOONGARCH_H264CHROMA_LASX_H ++ ++#include ++#include ++#include "libavcodec/h264.h" ++ ++void ff_put_h264_chroma_mc8_lasx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++ int h, int x, int y); ++void ff_avg_h264_chroma_mc8_lasx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++ int h, int x, int y); ++ ++#endif /* AVCODEC_LOONGARCH_H264CHROMA_LASX_H */ +diff --git a/libavcodec/loongarch/h264dsp_init_loongarch.c b/libavcodec/loongarch/h264dsp_init_loongarch.c +new file mode 100644 +index 0000000000..f1b927c72e +--- /dev/null ++++ b/libavcodec/loongarch/h264dsp_init_loongarch.c +@@ -0,0 +1,81 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Shiyou Yin ++ * Xiwei Gu ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/loongarch/cpu.h" ++#include "h264dsp_lasx.h" ++ ++av_cold void ff_h264dsp_init_loongarch(H264DSPContext *c, const int bit_depth, ++ const int chroma_format_idc) ++{ ++ int cpu_flags = av_get_cpu_flags(); ++ ++ if (have_lasx(cpu_flags)) { ++ if (chroma_format_idc <= 1) ++ c->h264_loop_filter_strength = ff_h264_loop_filter_strength_lasx; ++ if (bit_depth == 8) { ++ c->h264_v_loop_filter_luma = ff_h264_v_lpf_luma_8_lasx; ++ c->h264_h_loop_filter_luma = ff_h264_h_lpf_luma_8_lasx; ++ c->h264_v_loop_filter_luma_intra = ff_h264_v_lpf_luma_intra_8_lasx; ++ c->h264_h_loop_filter_luma_intra = ff_h264_h_lpf_luma_intra_8_lasx; ++// c->h264_h_loop_filter_luma_mbaff = ff_h264_h_loop_filter_luma_mbaff_lasx; ++// c->h264_h_loop_filter_luma_mbaff_intra = ff_h264_h_loop_filter_luma_mbaff_intra_lasx; ++ c->h264_v_loop_filter_chroma = ff_h264_v_lpf_chroma_8_lasx; ++ ++ if (chroma_format_idc <= 1) ++ c->h264_h_loop_filter_chroma = ff_h264_h_lpf_chroma_8_lasx; ++// else ++// c->h264_h_loop_filter_chroma = ff_h264_h_loop_filter_chroma422_lasx; ++// ++// if (chroma_format_idc > 1) ++// c->h264_h_loop_filter_chroma_mbaff = ff_h264_h_loop_filter_chroma422_mbaff_lasx; ++// ++ c->h264_v_loop_filter_chroma_intra = ff_h264_v_lpf_chroma_intra_8_lasx; ++ ++ if (chroma_format_idc <= 1) ++ c->h264_h_loop_filter_chroma_intra = ff_h264_h_lpf_chroma_intra_8_lasx; ++ ++ /* Weighted MC */ ++ c->weight_h264_pixels_tab[0] = ff_weight_h264_pixels16_8_lasx; ++ c->weight_h264_pixels_tab[1] = ff_weight_h264_pixels8_8_lasx; ++ c->weight_h264_pixels_tab[2] = ff_weight_h264_pixels4_8_lasx; ++ ++ c->biweight_h264_pixels_tab[0] = ff_biweight_h264_pixels16_8_lasx; ++ c->biweight_h264_pixels_tab[1] = ff_biweight_h264_pixels8_8_lasx; ++ c->biweight_h264_pixels_tab[2] = ff_biweight_h264_pixels4_8_lasx; ++ ++ c->h264_idct_add = ff_h264_idct_add_lasx; ++ c->h264_idct8_add = ff_h264_idct8_addblk_lasx; ++ c->h264_idct_dc_add = ff_h264_idct4x4_addblk_dc_lasx; ++ c->h264_idct8_dc_add = ff_h264_idct8_dc_addblk_lasx; ++ c->h264_idct_add16 = ff_h264_idct_add16_lasx; ++ c->h264_idct8_add4 = ff_h264_idct8_add4_lasx; ++ ++ if (chroma_format_idc <= 1) ++ c->h264_idct_add8 = ff_h264_idct_add8_lasx; ++ else ++ c->h264_idct_add8 = ff_h264_idct_add8_422_lasx; ++ ++ c->h264_idct_add16intra = ff_h264_idct_add16_intra_lasx; ++ c->h264_luma_dc_dequant_idct = ff_h264_deq_idct_luma_dc_lasx; ++ } ++ } ++} +diff --git a/libavcodec/loongarch/h264dsp_lasx.c b/libavcodec/loongarch/h264dsp_lasx.c +new file mode 100644 +index 0000000000..21efa69672 +--- /dev/null ++++ b/libavcodec/loongarch/h264dsp_lasx.c +@@ -0,0 +1,1753 @@ ++/* ++ * Loongson LASX optimized h264dsp ++ * ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Shiyou Yin ++ * Xiwei Gu ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/loongarch/generic_macros_lasx.h" ++#include "h264dsp_lasx.h" ++ ++#define AVC_LPF_P1_OR_Q1(p0_or_q0_org_in, q0_or_p0_org_in, \ ++ p1_or_q1_org_in, p2_or_q2_org_in, \ ++ neg_tc_in, tc_in, p1_or_q1_out) \ ++{ \ ++ __m256i clip3, temp; \ ++ \ ++ clip3 = __lasx_xvavgr_hu(p0_or_q0_org_in, \ ++ q0_or_p0_org_in); \ ++ temp = __lasx_xvslli_h(p1_or_q1_org_in, 1); \ ++ clip3 = __lasx_xvsub_h(clip3, temp); \ ++ clip3 = __lasx_xvavg_h(p2_or_q2_org_in, clip3); \ ++ LASX_CLIP_H(clip3, neg_tc_in, tc_in); \ ++ p1_or_q1_out = __lasx_xvadd_h(p1_or_q1_org_in, clip3); \ ++} ++ ++#define AVC_LPF_P0Q0(q0_or_p0_org_in, p0_or_q0_org_in, \ ++ p1_or_q1_org_in, q1_or_p1_org_in, \ ++ neg_threshold_in, threshold_in, \ ++ p0_or_q0_out, q0_or_p0_out) \ ++{ \ ++ __m256i q0_sub_p0, p1_sub_q1, delta; \ ++ \ ++ q0_sub_p0 = __lasx_xvsub_h(q0_or_p0_org_in, \ ++ p0_or_q0_org_in); \ ++ p1_sub_q1 = __lasx_xvsub_h(p1_or_q1_org_in, \ ++ q1_or_p1_org_in); \ ++ q0_sub_p0 = __lasx_xvslli_h(q0_sub_p0, 2); \ ++ p1_sub_q1 = __lasx_xvaddi_hu(p1_sub_q1, 4); \ ++ delta = __lasx_xvadd_h(q0_sub_p0, p1_sub_q1); \ ++ delta = __lasx_xvsrai_h(delta, 3); \ ++ \ ++ LASX_CLIP_H(delta, neg_threshold_in, threshold_in); \ ++ \ ++ p0_or_q0_out = __lasx_xvadd_h(p0_or_q0_org_in, delta); \ ++ q0_or_p0_out = __lasx_xvsub_h(q0_or_p0_org_in, delta); \ ++ \ ++ LASX_CLIP_H_0_255(p0_or_q0_out, p0_or_q0_out); \ ++ LASX_CLIP_H_0_255(q0_or_p0_out, q0_or_p0_out); \ ++} ++ ++void ff_h264_h_lpf_luma_8_lasx(uint8_t *data, int img_width, ++ int alpha_in, int beta_in, int8_t *tc) ++{ ++ int img_width_2x = img_width << 1; ++ int img_width_8x = img_width << 3; ++ __m256i tmp_vec0, bs_vec; ++ __m256i tc_vec = {0x0101010100000000, 0x0303030302020202, 0x0101010100000000, 0x0303030302020202}; ++ ++ tmp_vec0 = __lasx_xvldrepl_w((uint32_t*)tc, 0); ++ tc_vec = __lasx_xvshuf_b(tmp_vec0, tmp_vec0, tc_vec); ++ bs_vec = __lasx_xvslti_b(tc_vec, 0); ++ bs_vec = __lasx_xvxori_b(bs_vec, 255); ++ bs_vec = __lasx_xvandi_b(bs_vec, 1); ++ ++ if (__lasx_xbnz_v(bs_vec)) { ++ uint8_t *src = data - 4; ++ __m256i p3_org, p2_org, p1_org, p0_org, q0_org, q1_org, q2_org, q3_org; ++ __m256i p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha, beta; ++ __m256i is_less_than, is_less_than_beta, is_less_than_alpha; ++ __m256i is_bs_greater_than0; ++ __m256i zero = __lasx_xvldi(0); ++ ++ is_bs_greater_than0 = __lasx_xvslt_bu(zero, bs_vec); ++ ++ { ++ uint8_t *src_tmp = src + img_width_8x; ++ __m256i row0, row1, row2, row3, row4, row5, row6, row7; ++ __m256i row8, row9, row10, row11, row12, row13, row14, row15; ++ ++ LASX_LD_8(src, img_width, row0, row1, row2, row3, ++ row4, row5, row6, row7); ++ LASX_LD_8(src_tmp, img_width, row8, row9, row10, row11, ++ row12, row13, row14, row15); ++ ++ LASX_TRANSPOSE16x8_B(row0, row1, row2, row3, row4, row5, row6, row7, ++ row8, row9, row10, row11, ++ row12, row13, row14, row15, ++ p3_org, p2_org, p1_org, p0_org, ++ q0_org, q1_org, q2_org, q3_org); ++ } ++ ++ p0_asub_q0 = __lasx_xvabsd_bu(p0_org, q0_org); ++ p1_asub_p0 = __lasx_xvabsd_bu(p1_org, p0_org); ++ q1_asub_q0 = __lasx_xvabsd_bu(q1_org, q0_org); ++ ++ alpha = __lasx_xvreplgr2vr_b(alpha_in); ++ beta = __lasx_xvreplgr2vr_b(beta_in); ++ ++ is_less_than_alpha = __lasx_xvslt_bu(p0_asub_q0, alpha); ++ is_less_than_beta = __lasx_xvslt_bu(p1_asub_p0, beta); ++ is_less_than = is_less_than_alpha & is_less_than_beta; ++ is_less_than_beta = __lasx_xvslt_bu(q1_asub_q0, beta); ++ is_less_than = is_less_than_beta & is_less_than; ++ is_less_than = is_less_than & is_bs_greater_than0; ++ ++ if (__lasx_xbnz_v(is_less_than)) { ++ __m256i neg_tc_h, tc_h, p1_org_h, p0_org_h, q0_org_h, q1_org_h; ++ __m256i p2_asub_p0, q2_asub_q0; ++ ++ neg_tc_h = __lasx_xvneg_b(tc_vec); ++ neg_tc_h = __lasx_vext2xv_h_b(neg_tc_h); ++ tc_h = __lasx_vext2xv_hu_bu(tc_vec); ++ p1_org_h = __lasx_vext2xv_hu_bu(p1_org); ++ p0_org_h = __lasx_vext2xv_hu_bu(p0_org); ++ q0_org_h = __lasx_vext2xv_hu_bu(q0_org); ++ ++ p2_asub_p0 = __lasx_xvabsd_bu(p2_org, p0_org); ++ is_less_than_beta = __lasx_xvslt_bu(p2_asub_p0, beta); ++ is_less_than_beta = is_less_than_beta & is_less_than; ++ ++ if (__lasx_xbnz_v(is_less_than_beta)) { ++ __m256i p2_org_h, p1_h; ++ ++ p2_org_h = __lasx_vext2xv_hu_bu(p2_org); ++ AVC_LPF_P1_OR_Q1(p0_org_h, q0_org_h, p1_org_h, p2_org_h, ++ neg_tc_h, tc_h, p1_h); ++ LASX_PCKEV_B(p1_h, p1_h, p1_h); ++ ++ p1_org = __lasx_xvbitsel_v(p1_org, p1_h, is_less_than_beta); ++ is_less_than_beta = __lasx_xvandi_b(is_less_than_beta, 1); ++ tc_vec = __lasx_xvadd_b(tc_vec, is_less_than_beta); ++ } ++ ++ q2_asub_q0 = __lasx_xvabsd_bu(q2_org, q0_org); ++ is_less_than_beta = __lasx_xvslt_bu(q2_asub_q0, beta); ++ is_less_than_beta = is_less_than_beta & is_less_than; ++ ++ q1_org_h = __lasx_vext2xv_hu_bu(q1_org); ++ ++ if (__lasx_xbnz_v(is_less_than_beta)) { ++ __m256i q2_org_h, q1_h; ++ ++ q2_org_h = __lasx_vext2xv_hu_bu(q2_org); ++ AVC_LPF_P1_OR_Q1(p0_org_h, q0_org_h, q1_org_h, q2_org_h, ++ neg_tc_h, tc_h, q1_h); ++ LASX_PCKEV_B(q1_h, q1_h, q1_h); ++ q1_org = __lasx_xvbitsel_v(q1_org, q1_h, is_less_than_beta); ++ ++ is_less_than_beta = __lasx_xvandi_b(is_less_than_beta, 1); ++ tc_vec = __lasx_xvadd_b(tc_vec, is_less_than_beta); ++ } ++ ++ { ++ __m256i neg_thresh_h, p0_h, q0_h; ++ ++ neg_thresh_h = __lasx_xvneg_b(tc_vec); ++ neg_thresh_h = __lasx_vext2xv_h_b(neg_thresh_h); ++ tc_h = __lasx_vext2xv_hu_bu(tc_vec); ++ ++ AVC_LPF_P0Q0(q0_org_h, p0_org_h, p1_org_h, q1_org_h, ++ neg_thresh_h, tc_h, p0_h, q0_h); ++ LASX_PCKEV_B_2(p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); ++ p0_org = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than); ++ q0_org = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than); ++ } ++ ++ { ++ __m256i row0, row1, row2, row3, row4, row5, row6, row7; ++ ++ LASX_ILVL_B_4(p1_org, p3_org, p0_org, p2_org, q2_org, q0_org, q3_org, ++ q1_org, row0, row1, row2, row3); ++ LASX_ILVLH_B_2(row1, row0, row3, row2, row5, row4, row7, row6); ++ LASX_ILVLH_W_2(row6, row4, row7, row5, row1, row0, row3, row2); ++ LASX_PCKEV_Q_4(row0, row0, row1, row1, row2, row2, row3, row3, ++ row4, row5, row6, row7); ++ LASX_ST_D_2(row4, 2, 3, src, img_width); ++ src += img_width_2x; ++ LASX_ST_D_2(row0, 2, 3, src, img_width); ++ src += img_width_2x; ++ LASX_ST_D_2(row5, 2, 3, src, img_width); ++ src += img_width_2x; ++ LASX_ST_D_2(row1, 2, 3, src, img_width); ++ src += img_width_2x; ++ LASX_ST_D_2(row6, 2, 3, src, img_width); ++ src += img_width_2x; ++ LASX_ST_D_2(row2, 2, 3, src, img_width); ++ src += img_width_2x; ++ LASX_ST_D_2(row7, 2, 3, src, img_width); ++ src += img_width_2x; ++ LASX_ST_D_2(row3, 2, 3, src, img_width); ++ } ++ } ++ } ++} ++ ++void ff_h264_v_lpf_luma_8_lasx(uint8_t *data, int img_width, ++ int alpha_in, int beta_in, int8_t *tc) ++{ ++ int img_width_2x = img_width << 1; ++ int img_width_3x = img_width + img_width_2x; ++ __m256i tmp_vec0, bs_vec; ++ __m256i tc_vec = {0x0101010100000000, 0x0303030302020202, 0x0101010100000000, 0x0303030302020202}; ++ ++ tmp_vec0 = __lasx_xvldrepl_w((uint32_t*)tc, 0); ++ tc_vec = __lasx_xvshuf_b(tmp_vec0, tmp_vec0, tc_vec); ++ bs_vec = __lasx_xvslti_b(tc_vec, 0); ++ bs_vec = __lasx_xvxori_b(bs_vec, 255); ++ bs_vec = __lasx_xvandi_b(bs_vec, 1); ++ ++ if (__lasx_xbnz_v(bs_vec)) { ++ __m256i p2_org, p1_org, p0_org, q0_org, q1_org, q2_org; ++ __m256i p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha, beta; ++ __m256i is_less_than, is_less_than_beta, is_less_than_alpha; ++ __m256i p1_org_h, p0_org_h, q0_org_h, q1_org_h; ++ __m256i is_bs_greater_than0; ++ __m256i zero = __lasx_xvldi(0); ++ ++ alpha = __lasx_xvreplgr2vr_b(alpha_in); ++ beta = __lasx_xvreplgr2vr_b(beta_in); ++ ++ p2_org = LASX_LD(data - img_width_3x); ++ p1_org = LASX_LD(data - img_width_2x); ++ p0_org = LASX_LD(data - img_width); ++ LASX_LD_2(data, img_width, q0_org, q1_org); ++ ++ is_bs_greater_than0 = __lasx_xvslt_bu(zero, bs_vec); ++ p0_asub_q0 = __lasx_xvabsd_bu(p0_org, q0_org); ++ p1_asub_p0 = __lasx_xvabsd_bu(p1_org, p0_org); ++ q1_asub_q0 = __lasx_xvabsd_bu(q1_org, q0_org); ++ ++ is_less_than_alpha = __lasx_xvslt_bu(p0_asub_q0, alpha); ++ is_less_than_beta = __lasx_xvslt_bu(p1_asub_p0, beta); ++ is_less_than = is_less_than_alpha & is_less_than_beta; ++ is_less_than_beta = __lasx_xvslt_bu(q1_asub_q0, beta); ++ is_less_than = is_less_than_beta & is_less_than; ++ is_less_than = is_less_than & is_bs_greater_than0; ++ ++ if (__lasx_xbnz_v(is_less_than)) { ++ __m256i neg_tc_h, tc_h, p2_asub_p0, q2_asub_q0; ++ ++ q2_org = LASX_LD(data + img_width_2x); ++ ++ neg_tc_h = __lasx_xvneg_b(tc_vec); ++ neg_tc_h = __lasx_vext2xv_h_b(neg_tc_h); ++ tc_h = __lasx_vext2xv_hu_bu(tc_vec); ++ p1_org_h = __lasx_vext2xv_hu_bu(p1_org); ++ p0_org_h = __lasx_vext2xv_hu_bu(p0_org); ++ q0_org_h = __lasx_vext2xv_hu_bu(q0_org); ++ ++ p2_asub_p0 = __lasx_xvabsd_bu(p2_org, p0_org); ++ is_less_than_beta = __lasx_xvslt_bu(p2_asub_p0, beta); ++ is_less_than_beta = is_less_than_beta & is_less_than; ++ ++ if (__lasx_xbnz_v(is_less_than_beta)) { ++ __m256i p1_h, p2_org_h; ++ ++ p2_org_h = __lasx_vext2xv_hu_bu(p2_org); ++ AVC_LPF_P1_OR_Q1(p0_org_h, q0_org_h, p1_org_h, p2_org_h, ++ neg_tc_h, tc_h, p1_h); ++ LASX_PCKEV_B(p1_h, p1_h, p1_h); ++ p1_h = __lasx_xvbitsel_v(p1_org, p1_h, is_less_than_beta); ++ p1_org = __lasx_xvpermi_q(p1_org, p1_h, 0x30); ++ LASX_ST(p1_org, data - img_width_2x); ++ ++ is_less_than_beta = __lasx_xvandi_b(is_less_than_beta, 1); ++ tc_vec = __lasx_xvadd_b(tc_vec, is_less_than_beta); ++ } ++ ++ q2_asub_q0 = __lasx_xvabsd_bu(q2_org, q0_org); ++ is_less_than_beta = __lasx_xvslt_bu(q2_asub_q0, beta); ++ is_less_than_beta = is_less_than_beta & is_less_than; ++ ++ q1_org_h = __lasx_vext2xv_hu_bu(q1_org); ++ ++ if (__lasx_xbnz_v(is_less_than_beta)) { ++ __m256i q1_h, q2_org_h; ++ ++ q2_org_h = __lasx_vext2xv_hu_bu(q2_org); ++ AVC_LPF_P1_OR_Q1(p0_org_h, q0_org_h, q1_org_h, q2_org_h, ++ neg_tc_h, tc_h, q1_h); ++ LASX_PCKEV_B(q1_h, q1_h, q1_h); ++ q1_h = __lasx_xvbitsel_v(q1_org, q1_h, is_less_than_beta); ++ q1_org = __lasx_xvpermi_q(q1_org, q1_h, 0x30); ++ LASX_ST(q1_org, data + img_width); ++ ++ is_less_than_beta = __lasx_xvandi_b(is_less_than_beta, 1); ++ tc_vec = __lasx_xvadd_b(tc_vec, is_less_than_beta); ++ ++ } ++ ++ { ++ __m256i neg_thresh_h, p0_h, q0_h; ++ ++ neg_thresh_h = __lasx_xvneg_b(tc_vec); ++ neg_thresh_h = __lasx_vext2xv_h_b(neg_thresh_h); ++ tc_h = __lasx_vext2xv_hu_bu(tc_vec); ++ ++ AVC_LPF_P0Q0(q0_org_h, p0_org_h, p1_org_h, q1_org_h, ++ neg_thresh_h, tc_h, p0_h, q0_h); ++ LASX_PCKEV_B_2(p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); ++ p0_h = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than); ++ q0_h = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than); ++ p0_org = __lasx_xvpermi_q(p0_org, p0_h, 0x30); ++ q0_org = __lasx_xvpermi_q(q0_org, q0_h, 0x30); ++ LASX_ST(p0_org, data - img_width); ++ LASX_ST(q0_org, data); ++ } ++ } ++ } ++} ++ ++void ff_h264_h_lpf_chroma_8_lasx(uint8_t *data, int img_width, ++ int alpha_in, int beta_in, int8_t *tc) ++{ ++ __m256i tmp_vec0, bs_vec; ++ __m256i tc_vec = {0x0303020201010000, 0x0303020201010000, 0x0, 0x0}; ++ __m256i zero = __lasx_xvldi(0); ++ ++ tmp_vec0 = __lasx_xvldrepl_w((uint32_t*)tc, 0); ++ tc_vec = __lasx_xvshuf_b(tmp_vec0, tmp_vec0, tc_vec); ++ bs_vec = __lasx_xvslti_b(tc_vec, 0); ++ bs_vec = __lasx_xvxori_b(bs_vec, 255); ++ bs_vec = __lasx_xvandi_b(bs_vec, 1); ++ bs_vec = __lasx_xvpermi_q(zero, bs_vec, 0x30); ++ ++ if (__lasx_xbnz_v(bs_vec)) { ++ uint8_t *src = data - 2; ++ __m256i p1_org, p0_org, q0_org, q1_org; ++ __m256i p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha, beta; ++ __m256i is_less_than, is_less_than_beta, is_less_than_alpha; ++ __m256i is_bs_greater_than0; ++ ++ is_bs_greater_than0 = __lasx_xvslt_bu(zero, bs_vec); ++ ++ { ++ __m256i row0, row1, row2, row3, row4, row5, row6, row7; ++ ++ LASX_LD_8(src, img_width, row0, row1, row2, row3, ++ row4, row5, row6, row7); ++ /* LASX_TRANSPOSE8x4_B */ ++ LASX_ILVL_B_4(row2, row0, row3, row1, row6, row4, row7, row5, ++ p1_org, p0_org, q0_org, q1_org); ++ LASX_ILVL_B_2(p0_org, p1_org, q1_org, q0_org, row0, row1); ++ LASX_ILVLH_W_128SV(row1, row0, row3, row2); ++ p1_org = __lasx_xvpermi_d(row2, 0x00); ++ p0_org = __lasx_xvpermi_d(row2, 0x55); ++ q0_org = __lasx_xvpermi_d(row3, 0x00); ++ q1_org = __lasx_xvpermi_d(row3, 0x55); ++ } ++ ++ p0_asub_q0 = __lasx_xvabsd_bu(p0_org, q0_org); ++ p1_asub_p0 = __lasx_xvabsd_bu(p1_org, p0_org); ++ q1_asub_q0 = __lasx_xvabsd_bu(q1_org, q0_org); ++ ++ alpha = __lasx_xvreplgr2vr_b(alpha_in); ++ beta = __lasx_xvreplgr2vr_b(beta_in); ++ ++ is_less_than_alpha = __lasx_xvslt_bu(p0_asub_q0, alpha); ++ is_less_than_beta = __lasx_xvslt_bu(p1_asub_p0, beta); ++ is_less_than = is_less_than_alpha & is_less_than_beta; ++ is_less_than_beta = __lasx_xvslt_bu(q1_asub_q0, beta); ++ is_less_than = is_less_than_beta & is_less_than; ++ is_less_than = is_less_than & is_bs_greater_than0; ++ ++ if (__lasx_xbnz_v(is_less_than)) { ++ __m256i p1_org_h, p0_org_h, q0_org_h, q1_org_h; ++ ++ p1_org_h = __lasx_vext2xv_hu_bu(p1_org); ++ p0_org_h = __lasx_vext2xv_hu_bu(p0_org); ++ q0_org_h = __lasx_vext2xv_hu_bu(q0_org); ++ q1_org_h = __lasx_vext2xv_hu_bu(q1_org); ++ ++ { ++ __m256i tc_h, neg_thresh_h, p0_h, q0_h; ++ ++ neg_thresh_h = __lasx_xvneg_b(tc_vec); ++ neg_thresh_h = __lasx_vext2xv_h_b(neg_thresh_h); ++ tc_h = __lasx_vext2xv_hu_bu(tc_vec); ++ ++ AVC_LPF_P0Q0(q0_org_h, p0_org_h, p1_org_h, q1_org_h, ++ neg_thresh_h, tc_h, p0_h, q0_h); ++ LASX_PCKEV_B_2(p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); ++ p0_org = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than); ++ q0_org = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than); ++ } ++ ++ p0_org = __lasx_xvilvl_b(q0_org, p0_org); ++ src = data - 1; ++ __lasx_xvstelm_h(p0_org, src, 0, 0); ++ src += img_width; ++ __lasx_xvstelm_h(p0_org, src, 0, 1); ++ src += img_width; ++ __lasx_xvstelm_h(p0_org, src, 0, 2); ++ src += img_width; ++ __lasx_xvstelm_h(p0_org, src, 0, 3); ++ src += img_width; ++ __lasx_xvstelm_h(p0_org, src, 0, 4); ++ src += img_width; ++ __lasx_xvstelm_h(p0_org, src, 0, 5); ++ src += img_width; ++ __lasx_xvstelm_h(p0_org, src, 0, 6); ++ src += img_width; ++ __lasx_xvstelm_h(p0_org, src, 0, 7); ++ } ++ } ++} ++ ++void ff_h264_v_lpf_chroma_8_lasx(uint8_t *data, int img_width, ++ int alpha_in, int beta_in, int8_t *tc) ++{ ++ int img_width_2x = img_width << 1; ++ __m256i tmp_vec0, bs_vec; ++ __m256i tc_vec = {0x0303020201010000, 0x0303020201010000, 0x0, 0x0}; ++ __m256i zero = __lasx_xvldi(0); ++ ++ tmp_vec0 = __lasx_xvldrepl_w((uint32_t*)tc, 0); ++ tc_vec = __lasx_xvshuf_b(tmp_vec0, tmp_vec0, tc_vec); ++ bs_vec = __lasx_xvslti_b(tc_vec, 0); ++ bs_vec = __lasx_xvxori_b(bs_vec, 255); ++ bs_vec = __lasx_xvandi_b(bs_vec, 1); ++ bs_vec = __lasx_xvpermi_q(zero, bs_vec, 0x30); ++ ++ if (__lasx_xbnz_v(bs_vec)) { ++ __m256i p1_org, p0_org, q0_org, q1_org; ++ __m256i p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha, beta; ++ __m256i is_less_than, is_less_than_beta, is_less_than_alpha; ++ __m256i is_bs_greater_than0; ++ ++ alpha = __lasx_xvreplgr2vr_b(alpha_in); ++ beta = __lasx_xvreplgr2vr_b(beta_in); ++ ++ p1_org = LASX_LD(data - img_width_2x); ++ p0_org = LASX_LD(data - img_width); ++ LASX_LD_2(data, img_width, q0_org, q1_org); ++ ++ is_bs_greater_than0 = __lasx_xvslt_bu(zero, bs_vec); ++ p0_asub_q0 = __lasx_xvabsd_bu(p0_org, q0_org); ++ p1_asub_p0 = __lasx_xvabsd_bu(p1_org, p0_org); ++ q1_asub_q0 = __lasx_xvabsd_bu(q1_org, q0_org); ++ ++ is_less_than_alpha = __lasx_xvslt_bu(p0_asub_q0, alpha); ++ is_less_than_beta = __lasx_xvslt_bu(p1_asub_p0, beta); ++ is_less_than = is_less_than_alpha & is_less_than_beta; ++ is_less_than_beta = __lasx_xvslt_bu(q1_asub_q0, beta); ++ is_less_than = is_less_than_beta & is_less_than; ++ is_less_than = is_less_than & is_bs_greater_than0; ++ ++ if (__lasx_xbnz_v(is_less_than)) { ++ __m256i p1_org_h, p0_org_h, q0_org_h, q1_org_h; ++ ++ p1_org_h = __lasx_vext2xv_hu_bu(p1_org); ++ p0_org_h = __lasx_vext2xv_hu_bu(p0_org); ++ q0_org_h = __lasx_vext2xv_hu_bu(q0_org); ++ q1_org_h = __lasx_vext2xv_hu_bu(q1_org); ++ ++ { ++ __m256i neg_thresh_h, tc_h, p0_h, q0_h; ++ ++ neg_thresh_h = __lasx_xvneg_b(tc_vec); ++ neg_thresh_h = __lasx_vext2xv_h_b(neg_thresh_h); ++ tc_h = __lasx_vext2xv_hu_bu(tc_vec); ++ ++ AVC_LPF_P0Q0(q0_org_h, p0_org_h, p1_org_h, q1_org_h, ++ neg_thresh_h, tc_h, p0_h, q0_h); ++ LASX_PCKEV_B_2(p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); ++ p0_h = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than); ++ q0_h = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than); ++ LASX_ST_D(p0_h, 0, data - img_width); ++ LASX_ST_D(q0_h, 0, data); ++ } ++ } ++ } ++} ++ ++#define AVC_LPF_P0P1P2_OR_Q0Q1Q2(p3_or_q3_org_in, p0_or_q0_org_in, \ ++ q3_or_p3_org_in, p1_or_q1_org_in, \ ++ p2_or_q2_org_in, q1_or_p1_org_in, \ ++ p0_or_q0_out, p1_or_q1_out, p2_or_q2_out) \ ++{ \ ++ __m256i threshold; \ ++ __m256i const2, const3 = __lasx_xvldi(0); \ ++ \ ++ const2 = __lasx_xvaddi_hu(const3, 2); \ ++ const3 = __lasx_xvaddi_hu(const3, 3); \ ++ threshold = __lasx_xvadd_h(p0_or_q0_org_in, q3_or_p3_org_in); \ ++ threshold = __lasx_xvadd_h(p1_or_q1_org_in, threshold); \ ++ \ ++ p0_or_q0_out = __lasx_xvslli_h(threshold, 1); \ ++ p0_or_q0_out = __lasx_xvadd_h(p0_or_q0_out, p2_or_q2_org_in); \ ++ p0_or_q0_out = __lasx_xvadd_h(p0_or_q0_out, q1_or_p1_org_in); \ ++ p0_or_q0_out = __lasx_xvsrar_h(p0_or_q0_out, const3); \ ++ \ ++ p1_or_q1_out = __lasx_xvadd_h(p2_or_q2_org_in, threshold); \ ++ p1_or_q1_out = __lasx_xvsrar_h(p1_or_q1_out, const2); \ ++ \ ++ p2_or_q2_out = __lasx_xvmul_h(p2_or_q2_org_in, const3); \ ++ p2_or_q2_out = __lasx_xvadd_h(p2_or_q2_out, p3_or_q3_org_in); \ ++ p2_or_q2_out = __lasx_xvadd_h(p2_or_q2_out, p3_or_q3_org_in); \ ++ p2_or_q2_out = __lasx_xvadd_h(p2_or_q2_out, threshold); \ ++ p2_or_q2_out = __lasx_xvsrar_h(p2_or_q2_out, const3); \ ++} ++ ++/* data[-u32_img_width] = (uint8_t)((2 * p1 + p0 + q1 + 2) >> 2); */ ++#define AVC_LPF_P0_OR_Q0(p0_or_q0_org_in, q1_or_p1_org_in, \ ++ p1_or_q1_org_in, p0_or_q0_out) \ ++{ \ ++ __m256i const2 = __lasx_xvldi(0); \ ++ const2 = __lasx_xvaddi_hu(const2, 2); \ ++ p0_or_q0_out = __lasx_xvadd_h(p0_or_q0_org_in, q1_or_p1_org_in); \ ++ p0_or_q0_out = __lasx_xvadd_h(p0_or_q0_out, p1_or_q1_org_in); \ ++ p0_or_q0_out = __lasx_xvadd_h(p0_or_q0_out, p1_or_q1_org_in); \ ++ p0_or_q0_out = __lasx_xvsrar_h(p0_or_q0_out, const2); \ ++} ++ ++void ff_h264_h_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, ++ int alpha_in, int beta_in) ++{ ++ int img_width_2x = img_width << 1; ++ uint8_t *src = data - 4; ++ __m256i p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha, beta; ++ __m256i is_less_than, is_less_than_beta, is_less_than_alpha; ++ __m256i p3_org, p2_org, p1_org, p0_org, q0_org, q1_org, q2_org, q3_org; ++ __m256i zero = __lasx_xvldi(0); ++ ++ { ++ __m256i row0, row1, row2, row3, row4, row5, row6, row7; ++ __m256i row8, row9, row10, row11, row12, row13, row14, row15; ++ ++ LASX_LD_8(src, img_width, row0, row1, row2, row3, ++ row4, row5, row6, row7); ++ src += img_width << 3; ++ LASX_LD_8(src, img_width, row8, row9, row10, row11, ++ row12, row13, row14, row15); ++ ++ LASX_TRANSPOSE16x8_B(row0, row1, row2, row3, ++ row4, row5, row6, row7, ++ row8, row9, row10, row11, ++ row12, row13, row14, row15, ++ p3_org, p2_org, p1_org, p0_org, ++ q0_org, q1_org, q2_org, q3_org); ++ } ++ ++ alpha = __lasx_xvreplgr2vr_b(alpha_in); ++ beta = __lasx_xvreplgr2vr_b(beta_in); ++ p0_asub_q0 = __lasx_xvabsd_bu(p0_org, q0_org); ++ p1_asub_p0 = __lasx_xvabsd_bu(p1_org, p0_org); ++ q1_asub_q0 = __lasx_xvabsd_bu(q1_org, q0_org); ++ ++ is_less_than_alpha = __lasx_xvslt_bu(p0_asub_q0, alpha); ++ is_less_than_beta = __lasx_xvslt_bu(p1_asub_p0, beta); ++ is_less_than = is_less_than_beta & is_less_than_alpha; ++ is_less_than_beta = __lasx_xvslt_bu(q1_asub_q0, beta); ++ is_less_than = is_less_than_beta & is_less_than; ++ is_less_than = __lasx_xvpermi_q(zero, is_less_than, 0x30); ++ ++ if (__lasx_xbnz_v(is_less_than)) { ++ __m256i p2_asub_p0, q2_asub_q0, p0_h, q0_h, negate_is_less_than_beta; ++ __m256i p1_org_h, p0_org_h, q0_org_h, q1_org_h; ++ __m256i less_alpha_shift2_add2 = __lasx_xvsrli_b(alpha, 2); ++ ++ less_alpha_shift2_add2 = __lasx_xvaddi_bu(less_alpha_shift2_add2, 2); ++ less_alpha_shift2_add2 = __lasx_xvslt_bu(p0_asub_q0, less_alpha_shift2_add2); ++ ++ p1_org_h = __lasx_vext2xv_hu_bu(p1_org); ++ p0_org_h = __lasx_vext2xv_hu_bu(p0_org); ++ q0_org_h = __lasx_vext2xv_hu_bu(q0_org); ++ q1_org_h = __lasx_vext2xv_hu_bu(q1_org); ++ ++ p2_asub_p0 = __lasx_xvabsd_bu(p2_org, p0_org); ++ is_less_than_beta = __lasx_xvslt_bu(p2_asub_p0, beta); ++ is_less_than_beta = is_less_than_beta & less_alpha_shift2_add2; ++ negate_is_less_than_beta = __lasx_xvxori_b(is_less_than_beta, 0xff); ++ is_less_than_beta = is_less_than_beta & is_less_than; ++ negate_is_less_than_beta = negate_is_less_than_beta & is_less_than; ++ ++ /* combine and store */ ++ if (__lasx_xbnz_v(is_less_than_beta)) { ++ __m256i p2_org_h, p3_org_h, p1_h, p2_h; ++ ++ p2_org_h = __lasx_vext2xv_hu_bu(p2_org); ++ p3_org_h = __lasx_vext2xv_hu_bu(p3_org); ++ ++ AVC_LPF_P0P1P2_OR_Q0Q1Q2(p3_org_h, p0_org_h, q0_org_h, p1_org_h, ++ p2_org_h, q1_org_h, p0_h, p1_h, p2_h); ++ ++ LASX_PCKEV_B(p0_h, p0_h, p0_h); ++ LASX_PCKEV_B_2(p1_h, p1_h, p2_h, p2_h, p1_h, p2_h); ++ p0_org = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than_beta); ++ p1_org = __lasx_xvbitsel_v(p1_org, p1_h, is_less_than_beta); ++ p2_org = __lasx_xvbitsel_v(p2_org, p2_h, is_less_than_beta); ++ } ++ ++ AVC_LPF_P0_OR_Q0(p0_org_h, q1_org_h, p1_org_h, p0_h); ++ /* combine */ ++ LASX_PCKEV_B(p0_h, p0_h, p0_h); ++ p0_org = __lasx_xvbitsel_v(p0_org, p0_h, negate_is_less_than_beta); ++ ++ /* if (tmpFlag && (unsigned)ABS(q2-q0) < thresholds->beta_in) */ ++ q2_asub_q0 = __lasx_xvabsd_bu(q2_org, q0_org); ++ is_less_than_beta = __lasx_xvslt_bu(q2_asub_q0, beta); ++ is_less_than_beta = is_less_than_beta & less_alpha_shift2_add2; ++ negate_is_less_than_beta = __lasx_xvxori_b(is_less_than_beta, 0xff); ++ is_less_than_beta = is_less_than_beta & is_less_than; ++ negate_is_less_than_beta = negate_is_less_than_beta & is_less_than; ++ ++ /* combine and store */ ++ if (__lasx_xbnz_v(is_less_than_beta)) { ++ __m256i q2_org_h, q3_org_h, q1_h, q2_h; ++ ++ q2_org_h = __lasx_vext2xv_hu_bu(q2_org); ++ q3_org_h = __lasx_vext2xv_hu_bu(q3_org); ++ ++ AVC_LPF_P0P1P2_OR_Q0Q1Q2(q3_org_h, q0_org_h, p0_org_h, q1_org_h, ++ q2_org_h, p1_org_h, q0_h, q1_h, q2_h); ++ ++ LASX_PCKEV_B(q0_h, q0_h, q0_h); ++ LASX_PCKEV_B_2(q1_h, q1_h, q2_h, q2_h, q1_h, q2_h); ++ q0_org = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than_beta); ++ q1_org = __lasx_xvbitsel_v(q1_org, q1_h, is_less_than_beta); ++ q2_org = __lasx_xvbitsel_v(q2_org, q2_h, is_less_than_beta); ++ ++ } ++ ++ AVC_LPF_P0_OR_Q0(q0_org_h, p1_org_h, q1_org_h, q0_h); ++ ++ /* combine */ ++ LASX_PCKEV_B(q0_h, q0_h, q0_h); ++ q0_org = __lasx_xvbitsel_v(q0_org, q0_h, negate_is_less_than_beta); ++ ++ /* transpose and store */ ++ { ++ __m256i row0, row1, row2, row3, row4, row5, row6, row7; ++ ++ LASX_ILVL_B_4(p1_org, p3_org, p0_org, p2_org, q2_org, q0_org, q3_org, ++ q1_org, row0, row1, row2, row3); ++ LASX_ILVLH_B_2(row1, row0, row3, row2, row5, row4, row7, row6); ++ LASX_ILVLH_W_2(row6, row4, row7, row5, row1, row0, row3, row2); ++ LASX_PCKEV_Q_4(row0, row0, row1, row1, row2, row2, row3, row3, ++ row4, row5, row6, row7); ++ src = data - 4; ++ LASX_ST_D_2(row4, 2, 3, src, img_width); ++ src += img_width_2x; ++ LASX_ST_D_2(row0, 2, 3, src, img_width); ++ src += img_width_2x; ++ LASX_ST_D_2(row5, 2, 3, src, img_width); ++ src += img_width_2x; ++ LASX_ST_D_2(row1, 2, 3, src, img_width); ++ src += img_width_2x; ++ LASX_ST_D_2(row6, 2, 3, src, img_width); ++ src += img_width_2x; ++ LASX_ST_D_2(row2, 2, 3, src, img_width); ++ src += img_width_2x; ++ LASX_ST_D_2(row7, 2, 3, src, img_width); ++ src += img_width_2x; ++ LASX_ST_D_2(row3, 2, 3, src, img_width); ++ } ++ } ++} ++ ++void ff_h264_v_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, ++ int alpha_in, int beta_in) ++{ ++ int img_width_2x = img_width << 1; ++ uint8_t *src = data - img_width_2x; ++ __m256i p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha, beta; ++ __m256i is_less_than, is_less_than_beta, is_less_than_alpha; ++ __m256i p1_org, p0_org, q0_org, q1_org; ++ __m256i zero = __lasx_xvldi(0); ++ ++ LASX_LD_4(src, img_width, p1_org, p0_org, q0_org, q1_org) ++ alpha = __lasx_xvreplgr2vr_b(alpha_in); ++ beta = __lasx_xvreplgr2vr_b(beta_in); ++ p0_asub_q0 = __lasx_xvabsd_bu(p0_org, q0_org); ++ p1_asub_p0 = __lasx_xvabsd_bu(p1_org, p0_org); ++ q1_asub_q0 = __lasx_xvabsd_bu(q1_org, q0_org); ++ ++ is_less_than_alpha = __lasx_xvslt_bu(p0_asub_q0, alpha); ++ is_less_than_beta = __lasx_xvslt_bu(p1_asub_p0, beta); ++ is_less_than = is_less_than_beta & is_less_than_alpha; ++ is_less_than_beta = __lasx_xvslt_bu(q1_asub_q0, beta); ++ is_less_than = is_less_than_beta & is_less_than; ++ is_less_than = __lasx_xvpermi_q(zero, is_less_than, 0x30); ++ ++ if (__lasx_xbnz_v(is_less_than)) { ++ __m256i p2_asub_p0, q2_asub_q0, p0_h, q0_h, negate_is_less_than_beta; ++ __m256i p1_org_h, p0_org_h, q0_org_h, q1_org_h; ++ __m256i p2_org = LASX_LD(src - img_width); ++ __m256i q2_org = LASX_LD(data + img_width_2x); ++ __m256i less_alpha_shift2_add2 = __lasx_xvsrli_b(alpha, 2); ++ less_alpha_shift2_add2 = __lasx_xvaddi_bu(less_alpha_shift2_add2, 2); ++ less_alpha_shift2_add2 = __lasx_xvslt_bu(p0_asub_q0, less_alpha_shift2_add2); ++ ++ p1_org_h = __lasx_vext2xv_hu_bu(p1_org); ++ p0_org_h = __lasx_vext2xv_hu_bu(p0_org); ++ q0_org_h = __lasx_vext2xv_hu_bu(q0_org); ++ q1_org_h = __lasx_vext2xv_hu_bu(q1_org); ++ ++ p2_asub_p0 = __lasx_xvabsd_bu(p2_org, p0_org); ++ is_less_than_beta = __lasx_xvslt_bu(p2_asub_p0, beta); ++ is_less_than_beta = is_less_than_beta & less_alpha_shift2_add2; ++ negate_is_less_than_beta = __lasx_xvxori_b(is_less_than_beta, 0xff); ++ is_less_than_beta = is_less_than_beta & is_less_than; ++ negate_is_less_than_beta = negate_is_less_than_beta & is_less_than; ++ ++ /* combine and store */ ++ if (__lasx_xbnz_v(is_less_than_beta)) { ++ __m256i p2_org_h, p3_org_h, p1_h, p2_h; ++ __m256i p3_org = LASX_LD(src - img_width_2x); ++ ++ p2_org_h = __lasx_vext2xv_hu_bu(p2_org); ++ p3_org_h = __lasx_vext2xv_hu_bu(p3_org); ++ ++ AVC_LPF_P0P1P2_OR_Q0Q1Q2(p3_org_h, p0_org_h, q0_org_h, p1_org_h, ++ p2_org_h, q1_org_h, p0_h, p1_h, p2_h); ++ ++ LASX_PCKEV_B(p0_h, p0_h, p0_h); ++ LASX_PCKEV_B_2(p1_h, p1_h, p2_h, p2_h, p1_h, p2_h); ++ p0_org = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than_beta); ++ p1_org = __lasx_xvbitsel_v(p1_org, p1_h, is_less_than_beta); ++ p2_org = __lasx_xvbitsel_v(p2_org, p2_h, is_less_than_beta); ++ ++ LASX_ST(p1_org, src); ++ LASX_ST(p2_org, src - img_width); ++ } ++ ++ AVC_LPF_P0_OR_Q0(p0_org_h, q1_org_h, p1_org_h, p0_h); ++ /* combine */ ++ LASX_PCKEV_B(p0_h, p0_h, p0_h); ++ p0_org = __lasx_xvbitsel_v(p0_org, p0_h, negate_is_less_than_beta); ++ LASX_ST(p0_org, data - img_width); ++ ++ /* if (tmpFlag && (unsigned)ABS(q2-q0) < thresholds->beta_in) */ ++ q2_asub_q0 = __lasx_xvabsd_bu(q2_org, q0_org); ++ is_less_than_beta = __lasx_xvslt_bu(q2_asub_q0, beta); ++ is_less_than_beta = is_less_than_beta & less_alpha_shift2_add2; ++ negate_is_less_than_beta = __lasx_xvxori_b(is_less_than_beta, 0xff); ++ is_less_than_beta = is_less_than_beta & is_less_than; ++ negate_is_less_than_beta = negate_is_less_than_beta & is_less_than; ++ ++ /* combine and store */ ++ if (__lasx_xbnz_v(is_less_than_beta)) { ++ __m256i q2_org_h, q3_org_h, q1_h, q2_h; ++ __m256i q3_org = LASX_LD(data + img_width_2x + img_width); ++ ++ q2_org_h = __lasx_vext2xv_hu_bu(q2_org); ++ q3_org_h = __lasx_vext2xv_hu_bu(q3_org); ++ ++ AVC_LPF_P0P1P2_OR_Q0Q1Q2(q3_org_h, q0_org_h, p0_org_h, q1_org_h, ++ q2_org_h, p1_org_h, q0_h, q1_h, q2_h); ++ ++ LASX_PCKEV_B(q0_h, q0_h, q0_h); ++ LASX_PCKEV_B_2(q1_h, q1_h, q2_h, q2_h, q1_h, q2_h); ++ q0_org = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than_beta); ++ q1_org = __lasx_xvbitsel_v(q1_org, q1_h, is_less_than_beta); ++ q2_org = __lasx_xvbitsel_v(q2_org, q2_h, is_less_than_beta); ++ ++ LASX_ST(q1_org, data + img_width); ++ LASX_ST(q2_org, data + img_width_2x); ++ } ++ ++ AVC_LPF_P0_OR_Q0(q0_org_h, p1_org_h, q1_org_h, q0_h); ++ ++ /* combine */ ++ LASX_PCKEV_B(q0_h, q0_h, q0_h); ++ q0_org = __lasx_xvbitsel_v(q0_org, q0_h, negate_is_less_than_beta); ++ ++ LASX_ST(q0_org, data); ++ } ++} ++ ++void ff_h264_h_lpf_chroma_intra_8_lasx(uint8_t *data, int img_width, ++ int alpha_in, int beta_in) ++{ ++ uint8_t *src = data - 2; ++ __m256i p1_org, p0_org, q0_org, q1_org; ++ __m256i p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha, beta; ++ __m256i is_less_than, is_less_than_beta, is_less_than_alpha; ++ ++ { ++ __m256i row0, row1, row2, row3, row4, row5, row6, row7; ++ ++ LASX_LD_8(src, img_width, row0, row1, row2, row3, ++ row4, row5, row6, row7); ++ ++ /* LASX_TRANSPOSE8x4_B */ ++ LASX_ILVL_B_4(row2, row0, row3, row1, row6, row4, row7, row5, ++ p1_org, p0_org, q0_org, q1_org); ++ LASX_ILVL_B_2(p0_org, p1_org, q1_org, q0_org, row0, row1); ++ LASX_ILVLH_W_128SV(row1, row0, row3, row2); ++ p1_org = __lasx_xvpermi_d(row2, 0x00); ++ p0_org = __lasx_xvpermi_d(row2, 0x55); ++ q0_org = __lasx_xvpermi_d(row3, 0x00); ++ q1_org = __lasx_xvpermi_d(row3, 0x55); ++ } ++ ++ alpha = __lasx_xvreplgr2vr_b(alpha_in); ++ beta = __lasx_xvreplgr2vr_b(beta_in); ++ ++ p0_asub_q0 = __lasx_xvabsd_bu(p0_org, q0_org); ++ p1_asub_p0 = __lasx_xvabsd_bu(p1_org, p0_org); ++ q1_asub_q0 = __lasx_xvabsd_bu(q1_org, q0_org); ++ ++ is_less_than_alpha = __lasx_xvslt_bu(p0_asub_q0, alpha); ++ is_less_than_beta = __lasx_xvslt_bu(p1_asub_p0, beta); ++ is_less_than = is_less_than_alpha & is_less_than_beta; ++ is_less_than_beta = __lasx_xvslt_bu(q1_asub_q0, beta); ++ is_less_than = is_less_than_beta & is_less_than; ++ ++ if (__lasx_xbnz_v(is_less_than)) { ++ __m256i p0_h, q0_h, p1_org_h, p0_org_h, q0_org_h, q1_org_h; ++ ++ p1_org_h = __lasx_vext2xv_hu_bu(p1_org); ++ p0_org_h = __lasx_vext2xv_hu_bu(p0_org); ++ q0_org_h = __lasx_vext2xv_hu_bu(q0_org); ++ q1_org_h = __lasx_vext2xv_hu_bu(q1_org); ++ ++ AVC_LPF_P0_OR_Q0(p0_org_h, q1_org_h, p1_org_h, p0_h); ++ AVC_LPF_P0_OR_Q0(q0_org_h, p1_org_h, q1_org_h, q0_h); ++ LASX_PCKEV_B_2(p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); ++ p0_org = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than); ++ q0_org = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than); ++ } ++ p0_org = __lasx_xvilvl_b(q0_org, p0_org); ++ src = data - 1; ++ __lasx_xvstelm_h(p0_org, src, 0, 0); ++ src += img_width; ++ __lasx_xvstelm_h(p0_org, src, 0, 1); ++ src += img_width; ++ __lasx_xvstelm_h(p0_org, src, 0, 2); ++ src += img_width; ++ __lasx_xvstelm_h(p0_org, src, 0, 3); ++ src += img_width; ++ __lasx_xvstelm_h(p0_org, src, 0, 4); ++ src += img_width; ++ __lasx_xvstelm_h(p0_org, src, 0, 5); ++ src += img_width; ++ __lasx_xvstelm_h(p0_org, src, 0, 6); ++ src += img_width; ++ __lasx_xvstelm_h(p0_org, src, 0, 7); ++} ++ ++void ff_h264_v_lpf_chroma_intra_8_lasx(uint8_t *data, int img_width, ++ int alpha_in, int beta_in) ++{ ++ int img_width_2x = img_width << 1; ++ __m256i p1_org, p0_org, q0_org, q1_org; ++ __m256i p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha, beta; ++ __m256i is_less_than, is_less_than_beta, is_less_than_alpha; ++ ++ alpha = __lasx_xvreplgr2vr_b(alpha_in); ++ beta = __lasx_xvreplgr2vr_b(beta_in); ++ ++ p1_org = LASX_LD(data - img_width_2x); ++ p0_org = LASX_LD(data - img_width); ++ LASX_LD_2(data, img_width, q0_org, q1_org); ++ ++ p0_asub_q0 = __lasx_xvabsd_bu(p0_org, q0_org); ++ p1_asub_p0 = __lasx_xvabsd_bu(p1_org, p0_org); ++ q1_asub_q0 = __lasx_xvabsd_bu(q1_org, q0_org); ++ ++ is_less_than_alpha = __lasx_xvslt_bu(p0_asub_q0, alpha); ++ is_less_than_beta = __lasx_xvslt_bu(p1_asub_p0, beta); ++ is_less_than = is_less_than_alpha & is_less_than_beta; ++ is_less_than_beta = __lasx_xvslt_bu(q1_asub_q0, beta); ++ is_less_than = is_less_than_beta & is_less_than; ++ ++ if (__lasx_xbnz_v(is_less_than)) { ++ __m256i p0_h, q0_h, p1_org_h, p0_org_h, q0_org_h, q1_org_h; ++ ++ p1_org_h = __lasx_vext2xv_hu_bu(p1_org); ++ p0_org_h = __lasx_vext2xv_hu_bu(p0_org); ++ q0_org_h = __lasx_vext2xv_hu_bu(q0_org); ++ q1_org_h = __lasx_vext2xv_hu_bu(q1_org); ++ ++ AVC_LPF_P0_OR_Q0(p0_org_h, q1_org_h, p1_org_h, p0_h); ++ AVC_LPF_P0_OR_Q0(q0_org_h, p1_org_h, q1_org_h, q0_h); ++ LASX_PCKEV_B_2(p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); ++ p0_h = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than); ++ q0_h = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than); ++ LASX_ST_D(p0_h, 0, data - img_width); ++ LASX_ST_D(q0_h, 0, data); ++ } ++} ++ ++void ff_biweight_h264_pixels16_8_lasx(uint8_t *dst, uint8_t *src, ++ ptrdiff_t stride, int height, ++ int log2_denom, int weight_dst, ++ int weight_src, int offset_in) ++{ ++ __m256i wgt; ++ __m256i src0, src1, src2, src3; ++ __m256i dst0, dst1, dst2, dst3; ++ __m256i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; ++ __m256i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; ++ __m256i denom, offset; ++ ++ offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom; ++ offset_in += ((weight_src + weight_dst) << 7); ++ log2_denom += 1; ++ ++ tmp0 = __lasx_xvreplgr2vr_b(weight_src); ++ tmp1 = __lasx_xvreplgr2vr_b(weight_dst); ++ wgt = __lasx_xvilvh_b(tmp1, tmp0); ++ offset = __lasx_xvreplgr2vr_h(offset_in); ++ denom = __lasx_xvreplgr2vr_h(log2_denom); ++ ++ LASX_LD_8(src, stride, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); ++ src += 8 * stride; ++ LASX_PCKEV_Q_4(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, ++ src0, src1, src2, src3); ++ LASX_LD_8(dst, stride, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); ++ LASX_PCKEV_Q_4(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, ++ dst0, dst1, dst2, dst3); ++ ++ LASX_XORI_B_8_128(src0, src1, src2, src3, dst0, dst1, dst2, dst3); ++ LASX_ILVLH_B_4(dst0, src0, dst1, src1, dst2, src2, dst3, src3, ++ vec1, vec0, vec3, vec2, vec5, vec4, vec7, vec6); ++ ++ LASX_DP2ADD_H_B(offset, wgt, vec0, tmp0); ++ LASX_DP2ADD_H_B(offset, wgt, vec1, tmp1); ++ LASX_DP2ADD_H_B(offset, wgt, vec2, tmp2); ++ LASX_DP2ADD_H_B(offset, wgt, vec3, tmp3); ++ LASX_DP2ADD_H_B(offset, wgt, vec4, tmp4); ++ LASX_DP2ADD_H_B(offset, wgt, vec5, tmp5); ++ LASX_DP2ADD_H_B(offset, wgt, vec6, tmp6); ++ LASX_DP2ADD_H_B(offset, wgt, vec7, tmp7); ++ ++ tmp0 = __lasx_xvsra_h(tmp0, denom); ++ tmp1 = __lasx_xvsra_h(tmp1, denom); ++ tmp2 = __lasx_xvsra_h(tmp2, denom); ++ tmp3 = __lasx_xvsra_h(tmp3, denom); ++ tmp4 = __lasx_xvsra_h(tmp4, denom); ++ tmp5 = __lasx_xvsra_h(tmp5, denom); ++ tmp6 = __lasx_xvsra_h(tmp6, denom); ++ tmp7 = __lasx_xvsra_h(tmp7, denom); ++ ++ LASX_CLIP_H_0_255_4(tmp0, tmp1, tmp2, tmp3, ++ tmp0, tmp1, tmp2, tmp3); ++ LASX_CLIP_H_0_255_4(tmp4, tmp5, tmp6, tmp7, ++ tmp4, tmp5, tmp6, tmp7); ++ LASX_PCKEV_B_4_128SV(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, ++ dst0, dst1, dst2, dst3); ++ __lasx_xvstelm_d(dst0, dst, 0, 0); ++ __lasx_xvstelm_d(dst0, dst, 8, 2); ++ dst += stride; ++ __lasx_xvstelm_d(dst0, dst, 0, 1); ++ __lasx_xvstelm_d(dst0, dst, 8, 3); ++ dst += stride; ++ __lasx_xvstelm_d(dst1, dst, 0, 0); ++ __lasx_xvstelm_d(dst1, dst, 8, 2); ++ dst += stride; ++ __lasx_xvstelm_d(dst1, dst, 0, 1); ++ __lasx_xvstelm_d(dst1, dst, 8, 3); ++ dst += stride; ++ __lasx_xvstelm_d(dst2, dst, 0, 0); ++ __lasx_xvstelm_d(dst2, dst, 8, 2); ++ dst += stride; ++ __lasx_xvstelm_d(dst2, dst, 0, 1); ++ __lasx_xvstelm_d(dst2, dst, 8, 3); ++ dst += stride; ++ __lasx_xvstelm_d(dst3, dst, 0, 0); ++ __lasx_xvstelm_d(dst3, dst, 8, 2); ++ dst += stride; ++ __lasx_xvstelm_d(dst3, dst, 0, 1); ++ __lasx_xvstelm_d(dst3, dst, 8, 3); ++ dst += stride; ++ ++ if (16 == height) { ++ LASX_LD_8(src, stride, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); ++ LASX_PCKEV_Q_4(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, ++ src0, src1, src2, src3); ++ LASX_LD_8(dst, stride, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); ++ LASX_PCKEV_Q_4(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, ++ dst0, dst1, dst2, dst3); ++ ++ LASX_XORI_B_8_128(src0, src1, src2, src3, dst0, dst1, dst2, dst3); ++ LASX_ILVLH_B_4(dst0, src0, dst1, src1, dst2, src2, dst3, src3, ++ vec1, vec0, vec3, vec2, vec5, vec4, vec7, vec6); ++ ++ LASX_DP2ADD_H_B(offset, wgt, vec0, tmp0); ++ LASX_DP2ADD_H_B(offset, wgt, vec1, tmp1); ++ LASX_DP2ADD_H_B(offset, wgt, vec2, tmp2); ++ LASX_DP2ADD_H_B(offset, wgt, vec3, tmp3); ++ LASX_DP2ADD_H_B(offset, wgt, vec4, tmp4); ++ LASX_DP2ADD_H_B(offset, wgt, vec5, tmp5); ++ LASX_DP2ADD_H_B(offset, wgt, vec6, tmp6); ++ LASX_DP2ADD_H_B(offset, wgt, vec7, tmp7); ++ ++ tmp0 = __lasx_xvsra_h(tmp0, denom); ++ tmp1 = __lasx_xvsra_h(tmp1, denom); ++ tmp2 = __lasx_xvsra_h(tmp2, denom); ++ tmp3 = __lasx_xvsra_h(tmp3, denom); ++ tmp4 = __lasx_xvsra_h(tmp4, denom); ++ tmp5 = __lasx_xvsra_h(tmp5, denom); ++ tmp6 = __lasx_xvsra_h(tmp6, denom); ++ tmp7 = __lasx_xvsra_h(tmp7, denom); ++ ++ LASX_CLIP_H_0_255_4(tmp0, tmp1, tmp2, tmp3, ++ tmp0, tmp1, tmp2, tmp3); ++ LASX_CLIP_H_0_255_4(tmp4, tmp5, tmp6, tmp7, ++ tmp4, tmp5, tmp6, tmp7); ++ LASX_PCKEV_B_4_128SV(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, ++ dst0, dst1, dst2, dst3); ++ __lasx_xvstelm_d(dst0, dst, 0, 0); ++ __lasx_xvstelm_d(dst0, dst, 8, 2); ++ dst += stride; ++ __lasx_xvstelm_d(dst0, dst, 0, 1); ++ __lasx_xvstelm_d(dst0, dst, 8, 3); ++ dst += stride; ++ __lasx_xvstelm_d(dst1, dst, 0, 0); ++ __lasx_xvstelm_d(dst1, dst, 8, 2); ++ dst += stride; ++ __lasx_xvstelm_d(dst1, dst, 0, 1); ++ __lasx_xvstelm_d(dst1, dst, 8, 3); ++ dst += stride; ++ __lasx_xvstelm_d(dst2, dst, 0, 0); ++ __lasx_xvstelm_d(dst2, dst, 8, 2); ++ dst += stride; ++ __lasx_xvstelm_d(dst2, dst, 0, 1); ++ __lasx_xvstelm_d(dst2, dst, 8, 3); ++ dst += stride; ++ __lasx_xvstelm_d(dst3, dst, 0, 0); ++ __lasx_xvstelm_d(dst3, dst, 8, 2); ++ dst += stride; ++ __lasx_xvstelm_d(dst3, dst, 0, 1); ++ __lasx_xvstelm_d(dst3, dst, 8, 3); ++ } ++} ++ ++static void avc_biwgt_8x4_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ int32_t log2_denom, int32_t weight_src, ++ int32_t weight_dst, int32_t offset_in) ++{ ++ __m256i wgt, vec0, vec1; ++ __m256i src0, dst0; ++ __m256i tmp0, tmp1, tmp2, tmp3, denom, offset; ++ ++ offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom; ++ offset_in += ((weight_src + weight_dst) << 7); ++ log2_denom += 1; ++ ++ tmp0 = __lasx_xvreplgr2vr_b(weight_src); ++ tmp1 = __lasx_xvreplgr2vr_b(weight_dst); ++ wgt = __lasx_xvilvh_b(tmp1, tmp0); ++ offset = __lasx_xvreplgr2vr_h(offset_in); ++ denom = __lasx_xvreplgr2vr_h(log2_denom); ++ ++ LASX_LD_4(src, stride, tmp0, tmp1, tmp2, tmp3); ++ LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, src0); ++ LASX_LD_4(dst, stride, tmp0, tmp1, tmp2, tmp3); ++ LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, dst0); ++ LASX_XORI_B_2_128(src0, dst0); ++ LASX_ILVLH_B(dst0, src0, vec1, vec0); ++ LASX_DP2ADD_H_B(offset, wgt, vec0, tmp0); ++ LASX_DP2ADD_H_B(offset, wgt, vec1, tmp1); ++ tmp0 = __lasx_xvsra_h(tmp0, denom); ++ tmp1 = __lasx_xvsra_h(tmp1, denom); ++ LASX_CLIP_H_0_255_2(tmp0, tmp1, tmp0, tmp1); ++ LASX_PCKEV_B_128SV(tmp1, tmp0, dst0) ++ LASX_ST_D_4(dst0, 0, 2, 1, 3, dst, stride); ++} ++ ++static void avc_biwgt_8x8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ int32_t log2_denom, int32_t weight_src, ++ int32_t weight_dst, int32_t offset_in) ++{ ++ __m256i wgt, vec0, vec1, vec2, vec3; ++ __m256i src0, src1, dst0, dst1; ++ __m256i tmp0, tmp1, tmp2, tmp3, denom, offset; ++ ptrdiff_t stride_4x = stride << 2; ++ uint8_t* dst_tmp = dst; ++ ++ offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom; ++ offset_in += ((weight_src + weight_dst) << 7); ++ log2_denom += 1; ++ ++ tmp0 = __lasx_xvreplgr2vr_b(weight_src); ++ tmp1 = __lasx_xvreplgr2vr_b(weight_dst); ++ wgt = __lasx_xvilvh_b(tmp1, tmp0); ++ offset = __lasx_xvreplgr2vr_h(offset_in); ++ denom = __lasx_xvreplgr2vr_h(log2_denom); ++ ++ LASX_LD_4(src, stride, tmp0, tmp1, tmp2, tmp3); ++ src += stride_4x; ++ LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, src0); ++ LASX_LD_4(src, stride, tmp0, tmp1, tmp2, tmp3); ++ LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, src1); ++ ++ LASX_LD_4(dst_tmp, stride, tmp0, tmp1, tmp2, tmp3); ++ dst_tmp += stride_4x; ++ LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, dst0); ++ LASX_LD_4(dst_tmp, stride, tmp0, tmp1, tmp2, tmp3); ++ LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, dst1); ++ ++ LASX_XORI_B_4_128(src0, src1, dst0, dst1); ++ LASX_ILVLH_B_2(dst0, src0, dst1, src1, vec1, vec0, vec3, vec2); ++ LASX_DP2ADD_H_B(offset, wgt, vec0, tmp0); ++ LASX_DP2ADD_H_B(offset, wgt, vec1, tmp1); ++ LASX_DP2ADD_H_B(offset, wgt, vec2, tmp2); ++ LASX_DP2ADD_H_B(offset, wgt, vec3, tmp3); ++ tmp0 = __lasx_xvsra_h(tmp0, denom); ++ tmp1 = __lasx_xvsra_h(tmp1, denom); ++ tmp2 = __lasx_xvsra_h(tmp2, denom); ++ tmp3 = __lasx_xvsra_h(tmp3, denom); ++ LASX_CLIP_H_0_255_4(tmp0, tmp1, tmp2, tmp3, tmp0, tmp1, tmp2, tmp3); ++ LASX_PCKEV_B_2_128SV(tmp1, tmp0, tmp3, tmp2, dst0, dst1) ++ LASX_ST_D_4(dst0, 0, 2, 1, 3, dst, stride); ++ dst += stride_4x; ++ LASX_ST_D_4(dst1, 0, 2, 1, 3, dst, stride); ++} ++ ++static void avc_biwgt_8x16_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ int32_t log2_denom, int32_t weight_src, ++ int32_t weight_dst, int32_t offset_in) ++{ ++ __m256i wgt, vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; ++ __m256i src0, src1, src2, src3, dst0, dst1, dst2, dst3; ++ __m256i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, denom, offset; ++ ptrdiff_t stride_4x = stride << 2; ++ uint8_t* dst_tmp = dst; ++ ++ offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom; ++ offset_in += ((weight_src + weight_dst) << 7); ++ log2_denom += 1; ++ ++ tmp0 = __lasx_xvreplgr2vr_b(weight_src); ++ tmp1 = __lasx_xvreplgr2vr_b(weight_dst); ++ wgt = __lasx_xvilvh_b(tmp1, tmp0); ++ offset = __lasx_xvreplgr2vr_h(offset_in); ++ denom = __lasx_xvreplgr2vr_h(log2_denom); ++ ++ LASX_LD_4(src, stride, tmp0, tmp1, tmp2, tmp3); ++ src += stride_4x; ++ LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, src0); ++ LASX_LD_4(src, stride, tmp0, tmp1, tmp2, tmp3); ++ src += stride_4x; ++ LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, src1); ++ LASX_LD_4(src, stride, tmp0, tmp1, tmp2, tmp3); ++ src += stride_4x; ++ LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, src2); ++ LASX_LD_4(src, stride, tmp0, tmp1, tmp2, tmp3); ++ LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, src3); ++ ++ LASX_LD_4(dst_tmp, stride, tmp0, tmp1, tmp2, tmp3); ++ dst_tmp += stride_4x; ++ LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, dst0); ++ LASX_LD_4(dst_tmp, stride, tmp0, tmp1, tmp2, tmp3); ++ dst_tmp += stride_4x; ++ LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, dst1); ++ LASX_LD_4(dst_tmp, stride, tmp0, tmp1, tmp2, tmp3); ++ dst_tmp += stride_4x; ++ LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, dst2); ++ LASX_LD_4(dst_tmp, stride, tmp0, tmp1, tmp2, tmp3); ++ LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, dst3); ++ ++ LASX_XORI_B_8_128(src0, src1, src2, src3, dst0, dst1, dst2, dst3); ++ LASX_ILVLH_B_4(dst0, src0, dst1, src1, dst2, src2, dst3, src3, ++ vec1, vec0, vec3, vec2, vec5, vec4, vec7, vec6); ++ LASX_DP2ADD_H_B(offset, wgt, vec0, tmp0); ++ LASX_DP2ADD_H_B(offset, wgt, vec1, tmp1); ++ LASX_DP2ADD_H_B(offset, wgt, vec2, tmp2); ++ LASX_DP2ADD_H_B(offset, wgt, vec3, tmp3); ++ LASX_DP2ADD_H_B(offset, wgt, vec4, tmp4); ++ LASX_DP2ADD_H_B(offset, wgt, vec5, tmp5); ++ LASX_DP2ADD_H_B(offset, wgt, vec6, tmp6); ++ LASX_DP2ADD_H_B(offset, wgt, vec7, tmp7); ++ tmp0 = __lasx_xvsra_h(tmp0, denom); ++ tmp1 = __lasx_xvsra_h(tmp1, denom); ++ tmp2 = __lasx_xvsra_h(tmp2, denom); ++ tmp3 = __lasx_xvsra_h(tmp3, denom); ++ tmp4 = __lasx_xvsra_h(tmp4, denom); ++ tmp5 = __lasx_xvsra_h(tmp5, denom); ++ tmp6 = __lasx_xvsra_h(tmp6, denom); ++ tmp7 = __lasx_xvsra_h(tmp7, denom); ++ LASX_CLIP_H_0_255_4(tmp0, tmp1, tmp2, tmp3, tmp0, tmp1, tmp2, tmp3); ++ LASX_CLIP_H_0_255_4(tmp4, tmp5, tmp6, tmp7, tmp4, tmp5, tmp6, tmp7); ++ LASX_PCKEV_B_4_128SV(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, ++ dst0, dst1, dst2, dst3) ++ LASX_ST_D_4(dst0, 0, 2, 1, 3, dst, stride); ++ dst += stride_4x; ++ LASX_ST_D_4(dst1, 0, 2, 1, 3, dst, stride); ++ dst += stride_4x; ++ LASX_ST_D_4(dst2, 0, 2, 1, 3, dst, stride); ++ dst += stride_4x; ++ LASX_ST_D_4(dst3, 0, 2, 1, 3, dst, stride); ++} ++ ++void ff_biweight_h264_pixels8_8_lasx(uint8_t *dst, uint8_t *src, ++ ptrdiff_t stride, int height, ++ int log2_denom, int weight_dst, ++ int weight_src, int offset) ++{ ++ if (4 == height) { ++ avc_biwgt_8x4_lasx(src, dst, stride, log2_denom, weight_src, weight_dst, ++ offset); ++ } else if (8 == height) { ++ avc_biwgt_8x8_lasx(src, dst, stride, log2_denom, weight_src, weight_dst, ++ offset); ++ } else { ++ avc_biwgt_8x16_lasx(src, dst, stride, log2_denom, weight_src, weight_dst, ++ offset); ++ } ++} ++ ++static void avc_biwgt_4x2_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ int32_t log2_denom, int32_t weight_src, ++ int32_t weight_dst, int32_t offset_in) ++{ ++ __m256i wgt, vec0; ++ __m256i src0, dst0; ++ __m256i tmp0, tmp1, denom, offset; ++ ++ offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom; ++ offset_in += ((weight_src + weight_dst) << 7); ++ log2_denom += 1; ++ ++ tmp0 = __lasx_xvreplgr2vr_b(weight_src); ++ tmp1 = __lasx_xvreplgr2vr_b(weight_dst); ++ wgt = __lasx_xvilvh_b(tmp1, tmp0); ++ offset = __lasx_xvreplgr2vr_h(offset_in); ++ denom = __lasx_xvreplgr2vr_h(log2_denom); ++ ++ LASX_LD_2(src, stride, tmp0, tmp1); ++ LASX_ILVL_W_128SV(tmp1, tmp0, src0); ++ LASX_LD_2(dst, stride, tmp0, tmp1); ++ LASX_ILVL_W_128SV(tmp1, tmp0, dst0); ++ LASX_XORI_B_2_128(src0, dst0); ++ LASX_ILVL_B_128SV(dst0, src0, vec0); ++ LASX_DP2ADD_H_B(offset, wgt, vec0, tmp0); ++ tmp0 = __lasx_xvsra_h(tmp0, denom); ++ LASX_CLIP_H_0_255(tmp0, tmp0); ++ LASX_PCKEV_B_128SV(tmp0, tmp0, tmp0); ++ LASX_ST_W_2(tmp0, 0, 1, dst, stride); ++} ++ ++static void avc_biwgt_4x4_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ int32_t log2_denom, int32_t weight_src, ++ int32_t weight_dst, int32_t offset_in) ++{ ++ __m256i wgt, vec0; ++ __m256i src0, dst0; ++ __m256i tmp0, tmp1, tmp2, tmp3, denom, offset; ++ ++ offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom; ++ offset_in += ((weight_src + weight_dst) << 7); ++ log2_denom += 1; ++ ++ tmp0 = __lasx_xvreplgr2vr_b(weight_src); ++ tmp1 = __lasx_xvreplgr2vr_b(weight_dst); ++ wgt = __lasx_xvilvh_b(tmp1, tmp0); ++ offset = __lasx_xvreplgr2vr_h(offset_in); ++ denom = __lasx_xvreplgr2vr_h(log2_denom); ++ ++ LASX_LD_4(src, stride, tmp0, tmp1, tmp2, tmp3); ++ LASX_ILVL_W_2_128SV(tmp2, tmp0, tmp3, tmp1, tmp0, tmp1); ++ LASX_ILVL_W_128SV(tmp1, tmp0, src0); ++ LASX_LD_4(dst, stride, tmp0, tmp1, tmp2, tmp3); ++ LASX_ILVL_W_2_128SV(tmp2, tmp0, tmp3, tmp1, tmp0, tmp1); ++ LASX_ILVL_W_128SV(tmp1, tmp0, dst0); ++ LASX_XORI_B_2_128(src0, dst0); ++ LASX_ILVL_B(dst0, src0, vec0); ++ LASX_DP2ADD_H_B(offset, wgt, vec0, tmp0); ++ tmp0 = __lasx_xvsra_h(tmp0, denom); ++ LASX_CLIP_H_0_255(tmp0, tmp0); ++ LASX_PCKEV_B_128SV(tmp0, tmp0, tmp0); ++ LASX_ST_W_4(tmp0, 0, 1, 4, 5, dst, stride); ++} ++ ++static void avc_biwgt_4x8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ int32_t log2_denom, int32_t weight_src, ++ int32_t weight_dst, int32_t offset_in) ++{ ++ __m256i wgt, vec0, vec1; ++ __m256i src0, dst0; ++ __m256i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, denom, offset; ++ ++ offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom; ++ offset_in += ((weight_src + weight_dst) << 7); ++ log2_denom += 1; ++ ++ tmp0 = __lasx_xvreplgr2vr_b(weight_src); ++ tmp1 = __lasx_xvreplgr2vr_b(weight_dst); ++ wgt = __lasx_xvilvh_b(tmp1, tmp0); ++ offset = __lasx_xvreplgr2vr_h(offset_in); ++ denom = __lasx_xvreplgr2vr_h(log2_denom); ++ ++ LASX_LD_8(src, stride, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); ++ LASX_ILVL_W_4_128SV(tmp2, tmp0, tmp3, tmp1, tmp6, tmp4, tmp7, tmp5, ++ tmp0, tmp1, tmp2, tmp3); ++ LASX_ILVL_W_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, src0); ++ LASX_LD_8(dst, stride, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); ++ LASX_ILVL_W_4_128SV(tmp2, tmp0, tmp3, tmp1, tmp6, tmp4, tmp7, tmp5, ++ tmp0, tmp1, tmp2, tmp3); ++ LASX_ILVL_W_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, dst0); ++ LASX_XORI_B_2_128(src0, dst0); ++ LASX_ILVLH_B(dst0, src0, vec1, vec0); ++ LASX_DP2ADD_H_B(offset, wgt, vec0, tmp0); ++ LASX_DP2ADD_H_B(offset, wgt, vec1, tmp1); ++ tmp0 = __lasx_xvsra_h(tmp0, denom); ++ tmp1 = __lasx_xvsra_h(tmp1, denom); ++ LASX_CLIP_H_0_255_2(tmp0, tmp1, tmp0, tmp1); ++ LASX_PCKEV_B_128SV(tmp1, tmp0, tmp0); ++ LASX_ST_W_8(tmp0, 0, 1, 4, 5, 2, 3, 6, 7, dst, stride); ++} ++ ++void ff_biweight_h264_pixels4_8_lasx(uint8_t *dst, uint8_t *src, ++ ptrdiff_t stride, int height, ++ int log2_denom, int weight_dst, ++ int weight_src, int offset) ++{ ++ if (2 == height) { ++ avc_biwgt_4x2_lasx(src, dst, stride, log2_denom, weight_src, weight_dst, ++ offset); ++ } else if (4 == height) { ++ avc_biwgt_4x4_lasx(src, dst, stride, log2_denom, weight_src, weight_dst, ++ offset); ++ } else { ++ avc_biwgt_4x8_lasx(src, dst, stride, log2_denom, weight_src, weight_dst, ++ offset); ++ } ++} ++ ++void ff_weight_h264_pixels16_8_lasx(uint8_t *src, ptrdiff_t stride, ++ int height, int log2_denom, ++ int weight_src, int offset_in) ++{ ++ uint32_t offset_val; ++ __m256i zero = __lasx_xvldi(0); ++ __m256i src0, src1, src2, src3; ++ __m256i src0_l, src1_l, src2_l, src3_l, src0_h, src1_h, src2_h, src3_h; ++ __m256i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; ++ __m256i wgt, denom, offset; ++ ++ offset_val = (unsigned) offset_in << log2_denom; ++ ++ wgt = __lasx_xvreplgr2vr_h(weight_src); ++ offset = __lasx_xvreplgr2vr_h(offset_val); ++ denom = __lasx_xvreplgr2vr_h(log2_denom); ++ ++ LASX_LD_8(src, stride, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); ++ LASX_PCKEV_Q_4(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, ++ src0, src1, src2, src3); ++ LASX_ILVLH_B_4(zero, src0, zero, src1, zero, src2, zero, src3, ++ src0_h, src0_l, src1_h, src1_l, src2_h, src2_l, src3_h, src3_l); ++ src0_l = __lasx_xvmul_h(wgt, src0_l); ++ src0_h = __lasx_xvmul_h(wgt, src0_h); ++ src1_l = __lasx_xvmul_h(wgt, src1_l); ++ src1_h = __lasx_xvmul_h(wgt, src1_h); ++ src2_l = __lasx_xvmul_h(wgt, src2_l); ++ src2_h = __lasx_xvmul_h(wgt, src2_h); ++ src3_l = __lasx_xvmul_h(wgt, src3_l); ++ src3_h = __lasx_xvmul_h(wgt, src3_h); ++ LASX_SADD_H_4(src0_l, offset, src0_h, offset, src1_l, offset, ++ src1_h, offset, src0_l, src0_h, src1_l, src1_h); ++ LASX_SADD_H_4(src2_l, offset, src2_h, offset, src3_l, offset, ++ src3_h, offset, src2_l, src2_h, src3_l, src3_h); ++ src0_l = __lasx_xvmaxi_h(src0_l, 0); ++ src0_h = __lasx_xvmaxi_h(src0_h, 0); ++ src1_l = __lasx_xvmaxi_h(src1_l, 0); ++ src1_h = __lasx_xvmaxi_h(src1_h, 0); ++ src2_l = __lasx_xvmaxi_h(src2_l, 0); ++ src2_h = __lasx_xvmaxi_h(src2_h, 0); ++ src3_l = __lasx_xvmaxi_h(src3_l, 0); ++ src3_h = __lasx_xvmaxi_h(src3_h, 0); ++ src0_l = __lasx_xvssrlrn_bu_h(src0_l, denom); ++ src0_h = __lasx_xvssrlrn_bu_h(src0_h, denom); ++ src1_l = __lasx_xvssrlrn_bu_h(src1_l, denom); ++ src1_h = __lasx_xvssrlrn_bu_h(src1_h, denom); ++ src2_l = __lasx_xvssrlrn_bu_h(src2_l, denom); ++ src2_h = __lasx_xvssrlrn_bu_h(src2_h, denom); ++ src3_l = __lasx_xvssrlrn_bu_h(src3_l, denom); ++ src3_h = __lasx_xvssrlrn_bu_h(src3_h, denom); ++ __lasx_xvstelm_d(src0_l, src, 0, 0); ++ __lasx_xvstelm_d(src0_l, src, 8, 2); ++ src += stride; ++ __lasx_xvstelm_d(src0_h, src, 0, 0); ++ __lasx_xvstelm_d(src0_h, src, 8, 2); ++ src += stride; ++ __lasx_xvstelm_d(src1_l, src, 0, 0); ++ __lasx_xvstelm_d(src1_l, src, 8, 2); ++ src += stride; ++ __lasx_xvstelm_d(src1_h, src, 0, 0); ++ __lasx_xvstelm_d(src1_h, src, 8, 2); ++ src += stride; ++ __lasx_xvstelm_d(src2_l, src, 0, 0); ++ __lasx_xvstelm_d(src2_l, src, 8, 2); ++ src += stride; ++ __lasx_xvstelm_d(src2_h, src, 0, 0); ++ __lasx_xvstelm_d(src2_h, src, 8, 2); ++ src += stride; ++ __lasx_xvstelm_d(src3_l, src, 0, 0); ++ __lasx_xvstelm_d(src3_l, src, 8, 2); ++ src += stride; ++ __lasx_xvstelm_d(src3_h, src, 0, 0); ++ __lasx_xvstelm_d(src3_h, src, 8, 2); ++ src += stride; ++ ++ if (16 == height) { ++ LASX_LD_8(src, stride, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); ++ LASX_PCKEV_Q_4(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, ++ src0, src1, src2, src3); ++ LASX_ILVLH_B_4(zero, src0, zero, src1, zero, src2, zero, src3, ++ src0_h, src0_l, src1_h, src1_l, src2_h, src2_l, ++ src3_h, src3_l); ++ src0_l = __lasx_xvmul_h(wgt, src0_l); ++ src0_h = __lasx_xvmul_h(wgt, src0_h); ++ src1_l = __lasx_xvmul_h(wgt, src1_l); ++ src1_h = __lasx_xvmul_h(wgt, src1_h); ++ src2_l = __lasx_xvmul_h(wgt, src2_l); ++ src2_h = __lasx_xvmul_h(wgt, src2_h); ++ src3_l = __lasx_xvmul_h(wgt, src3_l); ++ src3_h = __lasx_xvmul_h(wgt, src3_h); ++ LASX_SADD_H_4(src0_l, offset, src0_h, offset, src1_l, offset, ++ src1_h, offset, src0_l, src0_h, src1_l, src1_h); ++ LASX_SADD_H_4(src2_l, offset, src2_h, offset, src3_l, offset, ++ src3_h, offset, src2_l, src2_h, src3_l, src3_h); ++ src0_l = __lasx_xvmaxi_h(src0_l, 0); ++ src0_h = __lasx_xvmaxi_h(src0_h, 0); ++ src1_l = __lasx_xvmaxi_h(src1_l, 0); ++ src1_h = __lasx_xvmaxi_h(src1_h, 0); ++ src2_l = __lasx_xvmaxi_h(src2_l, 0); ++ src2_h = __lasx_xvmaxi_h(src2_h, 0); ++ src3_l = __lasx_xvmaxi_h(src3_l, 0); ++ src3_h = __lasx_xvmaxi_h(src3_h, 0); ++ src0_l = __lasx_xvssrlrn_bu_h(src0_l, denom); ++ src0_h = __lasx_xvssrlrn_bu_h(src0_h, denom); ++ src1_l = __lasx_xvssrlrn_bu_h(src1_l, denom); ++ src1_h = __lasx_xvssrlrn_bu_h(src1_h, denom); ++ src2_l = __lasx_xvssrlrn_bu_h(src2_l, denom); ++ src2_h = __lasx_xvssrlrn_bu_h(src2_h, denom); ++ src3_l = __lasx_xvssrlrn_bu_h(src3_l, denom); ++ src3_h = __lasx_xvssrlrn_bu_h(src3_h, denom); ++ __lasx_xvstelm_d(src0_l, src, 0, 0); ++ __lasx_xvstelm_d(src0_l, src, 8, 2); ++ src += stride; ++ __lasx_xvstelm_d(src0_h, src, 0, 0); ++ __lasx_xvstelm_d(src0_h, src, 8, 2); ++ src += stride; ++ __lasx_xvstelm_d(src1_l, src, 0, 0); ++ __lasx_xvstelm_d(src1_l, src, 8, 2); ++ src += stride; ++ __lasx_xvstelm_d(src1_h, src, 0, 0); ++ __lasx_xvstelm_d(src1_h, src, 8, 2); ++ src += stride; ++ __lasx_xvstelm_d(src2_l, src, 0, 0); ++ __lasx_xvstelm_d(src2_l, src, 8, 2); ++ src += stride; ++ __lasx_xvstelm_d(src2_h, src, 0, 0); ++ __lasx_xvstelm_d(src2_h, src, 8, 2); ++ src += stride; ++ __lasx_xvstelm_d(src3_l, src, 0, 0); ++ __lasx_xvstelm_d(src3_l, src, 8, 2); ++ src += stride; ++ __lasx_xvstelm_d(src3_h, src, 0, 0); ++ __lasx_xvstelm_d(src3_h, src, 8, 2); ++ } ++} ++ ++static void avc_wgt_8x4_lasx(uint8_t *src, ptrdiff_t stride, ++ int32_t log2_denom, int32_t weight_src, ++ int32_t offset_in) ++{ ++ uint32_t offset_val; ++ __m256i wgt, zero = __lasx_xvldi(0); ++ __m256i src0, src0_h, src0_l; ++ __m256i tmp0, tmp1, tmp2, tmp3, denom, offset; ++ ++ offset_val = (unsigned) offset_in << log2_denom; ++ ++ wgt = __lasx_xvreplgr2vr_h(weight_src); ++ offset = __lasx_xvreplgr2vr_h(offset_val); ++ denom = __lasx_xvreplgr2vr_h(log2_denom); ++ ++ LASX_LD_4(src, stride, tmp0, tmp1, tmp2, tmp3); ++ LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, src0); ++ LASX_ILVLH_B(zero, src0, src0_h, src0_l); ++ src0_l = __lasx_xvmul_h(wgt, src0_l); ++ src0_h = __lasx_xvmul_h(wgt, src0_h); ++ src0_l = __lasx_xvsadd_h(src0_l, offset); ++ src0_h = __lasx_xvsadd_h(src0_h, offset); ++ src0_l = __lasx_xvmaxi_h(src0_l, 0); ++ src0_h = __lasx_xvmaxi_h(src0_h, 0); ++ src0_l = __lasx_xvssrlrn_bu_h(src0_l, denom); ++ src0_h = __lasx_xvssrlrn_bu_h(src0_h, denom); ++ ++ LASX_PCKEV_D(src0_h, src0_l, src0); ++ LASX_ST_D_4(src0, 0, 1, 2, 3, src, stride); ++} ++ ++static void avc_wgt_8x8_lasx(uint8_t *src, ptrdiff_t stride, int32_t log2_denom, ++ int32_t src_weight, int32_t offset_in) ++{ ++ uint32_t offset_val; ++ __m256i src0, src1, src0_h, src0_l, src1_h, src1_l, zero = __lasx_xvldi(0); ++ __m256i tmp0, tmp1, tmp2, tmp3, denom, offset, wgt; ++ ptrdiff_t stride_4x = stride << 2; ++ uint8_t* src_tmp = src; ++ ++ offset_val = (unsigned) offset_in << log2_denom; ++ ++ wgt = __lasx_xvreplgr2vr_h(src_weight); ++ offset = __lasx_xvreplgr2vr_h(offset_val); ++ denom = __lasx_xvreplgr2vr_h(log2_denom); ++ ++ LASX_LD_4(src_tmp, stride, tmp0, tmp1, tmp2, tmp3); ++ src_tmp += stride_4x; ++ LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, src0); ++ LASX_LD_4(src_tmp, stride, tmp0, tmp1, tmp2, tmp3); ++ LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, src1); ++ LASX_ILVLH_B_2(zero, src0, zero, src1, src0_h, src0_l, src1_h, src1_l); ++ src0_l = __lasx_xvmul_h(wgt, src0_l); ++ src0_h = __lasx_xvmul_h(wgt, src0_h); ++ src1_l = __lasx_xvmul_h(wgt, src1_l); ++ src1_h = __lasx_xvmul_h(wgt, src1_h); ++ LASX_SADD_H_4(src0_l, offset, src0_h, offset, src1_l, offset, ++ src1_h, offset, src0_l, src0_h, src1_l, src1_h); ++ src0_l = __lasx_xvmaxi_h(src0_l, 0); ++ src0_h = __lasx_xvmaxi_h(src0_h, 0); ++ src1_l = __lasx_xvmaxi_h(src1_l, 0); ++ src1_h = __lasx_xvmaxi_h(src1_h, 0); ++ src0_l = __lasx_xvssrlrn_bu_h(src0_l, denom); ++ src0_h = __lasx_xvssrlrn_bu_h(src0_h, denom); ++ src1_l = __lasx_xvssrlrn_bu_h(src1_l, denom); ++ src1_h = __lasx_xvssrlrn_bu_h(src1_h, denom); ++ ++ LASX_PCKEV_D_2(src0_h, src0_l, src1_h, src1_l, src0, src1); ++ LASX_ST_D_4(src0, 0, 1, 2, 3, src, stride); ++ src += stride_4x; ++ LASX_ST_D_4(src1, 0, 1, 2, 3, src, stride); ++} ++ ++static void avc_wgt_8x16_lasx(uint8_t *src, ptrdiff_t stride, ++ int32_t log2_denom, int32_t src_weight, ++ int32_t offset_in) ++{ ++ uint32_t offset_val; ++ __m256i src0, src1, src2, src3; ++ __m256i src0_h, src0_l, src1_h, src1_l, src2_h, src2_l, src3_h, src3_l; ++ __m256i tmp0, tmp1, tmp2, tmp3, denom, offset, wgt; ++ __m256i zero = __lasx_xvldi(0); ++ ptrdiff_t stride_4x = stride << 2; ++ uint8_t* src_tmp = src; ++ ++ offset_val = (unsigned) offset_in << log2_denom; ++ ++ wgt = __lasx_xvreplgr2vr_h(src_weight); ++ offset = __lasx_xvreplgr2vr_h(offset_val); ++ denom = __lasx_xvreplgr2vr_h(log2_denom); ++ ++ LASX_LD_4(src_tmp, stride, tmp0, tmp1, tmp2, tmp3); ++ src_tmp += stride_4x; ++ LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, src0); ++ LASX_LD_4(src_tmp, stride, tmp0, tmp1, tmp2, tmp3); ++ src_tmp += stride_4x; ++ LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, src1); ++ LASX_LD_4(src_tmp, stride, tmp0, tmp1, tmp2, tmp3); ++ src_tmp += stride_4x; ++ LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, src2); ++ LASX_LD_4(src_tmp, stride, tmp0, tmp1, tmp2, tmp3); ++ LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, src3); ++ ++ LASX_ILVLH_B_4(zero, src0, zero, src1, zero, src2, zero, src3, ++ src0_h, src0_l, src1_h, src1_l, src2_h, src2_l, src3_h, src3_l); ++ src0_l = __lasx_xvmul_h(wgt, src0_l); ++ src0_h = __lasx_xvmul_h(wgt, src0_h); ++ src1_l = __lasx_xvmul_h(wgt, src1_l); ++ src1_h = __lasx_xvmul_h(wgt, src1_h); ++ src2_l = __lasx_xvmul_h(wgt, src2_l); ++ src2_h = __lasx_xvmul_h(wgt, src2_h); ++ src3_l = __lasx_xvmul_h(wgt, src3_l); ++ src3_h = __lasx_xvmul_h(wgt, src3_h); ++ ++ LASX_SADD_H_4(src0_l, offset, src0_h, offset, src1_l, offset, ++ src1_h, offset, src0_l, src0_h, src1_l, src1_h); ++ LASX_SADD_H_4(src2_l, offset, src2_h, offset, src3_l, offset, ++ src3_h, offset, src2_l, src2_h, src3_l, src3_h); ++ ++ src0_l = __lasx_xvmaxi_h(src0_l, 0); ++ src0_h = __lasx_xvmaxi_h(src0_h, 0); ++ src1_l = __lasx_xvmaxi_h(src1_l, 0); ++ src1_h = __lasx_xvmaxi_h(src1_h, 0); ++ src2_l = __lasx_xvmaxi_h(src2_l, 0); ++ src2_h = __lasx_xvmaxi_h(src2_h, 0); ++ src3_l = __lasx_xvmaxi_h(src3_l, 0); ++ src3_h = __lasx_xvmaxi_h(src3_h, 0); ++ src0_l = __lasx_xvssrlrn_bu_h(src0_l, denom); ++ src0_h = __lasx_xvssrlrn_bu_h(src0_h, denom); ++ src1_l = __lasx_xvssrlrn_bu_h(src1_l, denom); ++ src1_h = __lasx_xvssrlrn_bu_h(src1_h, denom); ++ src2_l = __lasx_xvssrlrn_bu_h(src2_l, denom); ++ src2_h = __lasx_xvssrlrn_bu_h(src2_h, denom); ++ src3_l = __lasx_xvssrlrn_bu_h(src3_l, denom); ++ src3_h = __lasx_xvssrlrn_bu_h(src3_h, denom); ++ LASX_PCKEV_D_4(src0_h, src0_l, src1_h, src1_l, src2_h, src2_l, src3_h, src3_l, ++ src0, src1, src2, src3); ++ ++ LASX_ST_D_4(src0, 0, 1, 2, 3, src, stride); ++ src += stride_4x; ++ LASX_ST_D_4(src1, 0, 1, 2, 3, src, stride); ++ src += stride_4x; ++ LASX_ST_D_4(src2, 0, 1, 2, 3, src, stride); ++ src += stride_4x; ++ LASX_ST_D_4(src3, 0, 1, 2, 3, src, stride); ++} ++ ++void ff_weight_h264_pixels8_8_lasx(uint8_t *src, ptrdiff_t stride, ++ int height, int log2_denom, ++ int weight_src, int offset) ++{ ++ if (4 == height) { ++ avc_wgt_8x4_lasx(src, stride, log2_denom, weight_src, offset); ++ } else if (8 == height) { ++ avc_wgt_8x8_lasx(src, stride, log2_denom, weight_src, offset); ++ } else { ++ avc_wgt_8x16_lasx(src, stride, log2_denom, weight_src, offset); ++ } ++} ++ ++static void avc_wgt_4x2_lasx(uint8_t *src, ptrdiff_t stride, ++ int32_t log2_denom, int32_t weight_src, ++ int32_t offset_in) ++{ ++ uint32_t offset_val; ++ __m256i wgt, zero = __lasx_xvldi(0); ++ __m256i src0, tmp0, tmp1, denom, offset; ++ ++ offset_val = (unsigned) offset_in << log2_denom; ++ ++ wgt = __lasx_xvreplgr2vr_h(weight_src); ++ offset = __lasx_xvreplgr2vr_h(offset_val); ++ denom = __lasx_xvreplgr2vr_h(log2_denom); ++ ++ LASX_LD_2(src, stride, tmp0, tmp1); ++ LASX_ILVL_W_128SV(tmp1, tmp0, src0); ++ LASX_ILVL_B_128SV(zero, src0, src0); ++ src0 = __lasx_xvmul_h(wgt, src0); ++ src0 = __lasx_xvsadd_h(src0, offset); ++ src0 = __lasx_xvmaxi_h(src0, 0); ++ src0 = __lasx_xvssrlrn_bu_h(src0, denom); ++ LASX_ST_W_2(src0, 0, 1, src, stride); ++} ++ ++static void avc_wgt_4x4_lasx(uint8_t *src, ptrdiff_t stride, ++ int32_t log2_denom, int32_t weight_src, ++ int32_t offset_in) ++{ ++ uint32_t offset_val; ++ __m256i wgt; ++ __m256i src0, tmp0, tmp1, tmp2, tmp3, denom, offset; ++ ++ offset_val = (unsigned) offset_in << log2_denom; ++ ++ wgt = __lasx_xvreplgr2vr_h(weight_src); ++ offset = __lasx_xvreplgr2vr_h(offset_val); ++ denom = __lasx_xvreplgr2vr_h(log2_denom); ++ ++ LASX_LD_4(src, stride, tmp0, tmp1, tmp2, tmp3); ++ LASX_ILVL_W_2_128SV(tmp2, tmp0, tmp3, tmp1, tmp0, tmp1); ++ LASX_ILVL_W_128SV(tmp1, tmp0, src0); ++ LASX_UNPCK_L_HU_BU(src0, src0); ++ src0 = __lasx_xvmul_h(wgt, src0); ++ src0 = __lasx_xvsadd_h(src0, offset); ++ src0 = __lasx_xvmaxi_h(src0, 0); ++ src0 = __lasx_xvssrlrn_bu_h(src0, denom); ++ LASX_ST_W_4(src0, 0, 1, 4, 5, src, stride); ++} ++ ++static void avc_wgt_4x8_lasx(uint8_t *src, ptrdiff_t stride, ++ int32_t log2_denom, int32_t weight_src, ++ int32_t offset_in) ++{ ++ uint32_t offset_val; ++ __m256i src0, src0_h, src0_l; ++ __m256i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, denom, offset; ++ __m256i wgt, zero = __lasx_xvldi(0); ++ ++ offset_val = (unsigned) offset_in << log2_denom; ++ ++ wgt = __lasx_xvreplgr2vr_h(weight_src); ++ offset = __lasx_xvreplgr2vr_h(offset_val); ++ denom = __lasx_xvreplgr2vr_h(log2_denom); ++ ++ LASX_LD_8(src, stride, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); ++ LASX_ILVL_W_4_128SV(tmp2, tmp0, tmp3, tmp1, tmp6, tmp4, tmp7, tmp5, ++ tmp0, tmp1, tmp2, tmp3); ++ LASX_ILVL_W_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LASX_PCKEV_Q(tmp1, tmp0, src0); ++ LASX_ILVLH_B(zero, src0, src0_h, src0_l); ++ src0_l = __lasx_xvmul_h(wgt, src0_l); ++ src0_h = __lasx_xvmul_h(wgt, src0_h); ++ src0_l = __lasx_xvsadd_h(src0_l, offset); ++ src0_h = __lasx_xvsadd_h(src0_h, offset); ++ src0_l = __lasx_xvmaxi_h(src0_l, 0); ++ src0_h = __lasx_xvmaxi_h(src0_h, 0); ++ src0_l = __lasx_xvssrlrn_bu_h(src0_l, denom); ++ src0_h = __lasx_xvssrlrn_bu_h(src0_h, denom); ++ LASX_ST_W_4(src0_l, 0, 1, 4, 5, src, stride); ++ src += (stride << 2); ++ LASX_ST_W_4(src0_h, 0, 1, 4, 5, src, stride); ++} ++ ++void ff_weight_h264_pixels4_8_lasx(uint8_t *src, ptrdiff_t stride, ++ int height, int log2_denom, ++ int weight_src, int offset) ++{ ++ if (2 == height) { ++ avc_wgt_4x2_lasx(src, stride, log2_denom, weight_src, offset); ++ } else if (4 == height) { ++ avc_wgt_4x4_lasx(src, stride, log2_denom, weight_src, offset); ++ } else { ++ avc_wgt_4x8_lasx(src, stride, log2_denom, weight_src, offset); ++ } ++} +diff --git a/libavcodec/loongarch/h264dsp_lasx.h b/libavcodec/loongarch/h264dsp_lasx.h +new file mode 100644 +index 0000000000..54c57853a2 +--- /dev/null ++++ b/libavcodec/loongarch/h264dsp_lasx.h +@@ -0,0 +1,99 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Shiyou Yin ++ * Xiwei Gu ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef AVCODEC_LOONGARCH_H264DSP_LASX_H ++#define AVCODEC_LOONGARCH_H264DSP_LASX_H ++ ++#include "libavcodec/h264dec.h" ++ ++void ff_h264_h_lpf_luma_8_lasx(uint8_t *src, int stride, ++ int alpha, int beta, int8_t *tc0); ++void ff_h264_v_lpf_luma_8_lasx(uint8_t *src, int stride, ++ int alpha, int beta, int8_t *tc0); ++void ff_h264_h_lpf_luma_intra_8_lasx(uint8_t *src, int stride, ++ int alpha, int beta); ++void ff_h264_v_lpf_luma_intra_8_lasx(uint8_t *src, int stride, ++ int alpha, int beta); ++void ff_h264_h_lpf_chroma_8_lasx(uint8_t *src, int stride, ++ int alpha, int beta, int8_t *tc0); ++void ff_h264_v_lpf_chroma_8_lasx(uint8_t *src, int stride, ++ int alpha, int beta, int8_t *tc0); ++void ff_h264_h_lpf_chroma_intra_8_lasx(uint8_t *src, int stride, ++ int alpha, int beta); ++void ff_h264_v_lpf_chroma_intra_8_lasx(uint8_t *src, int stride, ++ int alpha, int beta); ++void ff_biweight_h264_pixels16_8_lasx(uint8_t *dst, uint8_t *src, ++ ptrdiff_t stride, int height, ++ int log2_denom, int weight_dst, ++ int weight_src, int offset_in); ++void ff_biweight_h264_pixels8_8_lasx(uint8_t *dst, uint8_t *src, ++ ptrdiff_t stride, int height, ++ int log2_denom, int weight_dst, ++ int weight_src, int offset); ++void ff_biweight_h264_pixels4_8_lasx(uint8_t *dst, uint8_t *src, ++ ptrdiff_t stride, int height, ++ int log2_denom, int weight_dst, ++ int weight_src, int offset); ++void ff_weight_h264_pixels16_8_lasx(uint8_t *src, ptrdiff_t stride, ++ int height, int log2_denom, ++ int weight_src, int offset_in); ++void ff_weight_h264_pixels8_8_lasx(uint8_t *src, ptrdiff_t stride, ++ int height, int log2_denom, ++ int weight_src, int offset); ++void ff_weight_h264_pixels4_8_lasx(uint8_t *src, ptrdiff_t stride, ++ int height, int log2_denom, ++ int weight_src, int offset); ++void ff_h264_idct_add_lasx(uint8_t *dst, int16_t *src, int32_t dst_stride); ++void ff_h264_idct8_addblk_lasx(uint8_t *dst, int16_t *src, ++ int32_t dst_stride); ++void ff_h264_idct4x4_addblk_dc_lasx(uint8_t *dst, int16_t *src, ++ int32_t dst_stride); ++void ff_h264_idct8_dc_addblk_lasx(uint8_t *dst, int16_t *src, ++ int32_t dst_stride); ++void ff_h264_idct_add16_lasx(uint8_t *dst, ++ const int32_t *blk_offset, ++ int16_t *block, int32_t dst_stride, ++ const uint8_t nzc[15 * 8]); ++void ff_h264_idct8_add4_lasx(uint8_t *dst, const int32_t *blk_offset, ++ int16_t *block, int32_t dst_stride, ++ const uint8_t nzc[15 * 8]); ++void ff_h264_idct_add8_lasx(uint8_t **dst, ++ const int32_t *blk_offset, ++ int16_t *block, int32_t dst_stride, ++ const uint8_t nzc[15 * 8]); ++void ff_h264_idct_add8_422_lasx(uint8_t **dst, ++ const int32_t *blk_offset, ++ int16_t *block, int32_t dst_stride, ++ const uint8_t nzc[15 * 8]); ++void ff_h264_idct_add16_intra_lasx(uint8_t *dst, ++ const int32_t *blk_offset, ++ int16_t *block, ++ int32_t dst_stride, ++ const uint8_t nzc[15 * 8]); ++void ff_h264_deq_idct_luma_dc_lasx(int16_t *dst, int16_t *src, ++ int32_t de_qval); ++ ++void ff_h264_loop_filter_strength_lasx(int16_t bS[2][4][4], uint8_t nnz[40], ++ int8_t ref[2][40], int16_t mv[2][40][2], ++ int bidir, int edges, int step, ++ int mask_mv0, int mask_mv1, int field); ++#endif // #ifndef AVCODEC_LOONGARCH_H264DSP_LASX_H +diff --git a/libavcodec/loongarch/h264idct_lasx.c b/libavcodec/loongarch/h264idct_lasx.c +new file mode 100644 +index 0000000000..a4acb2d404 +--- /dev/null ++++ b/libavcodec/loongarch/h264idct_lasx.c +@@ -0,0 +1,461 @@ ++/* ++ * Loongson LASX optimized h264dsp ++ * ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Shiyou Yin ++ * Xiwei Gu ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/loongarch/generic_macros_lasx.h" ++#include "h264dsp_lasx.h" ++#include "libavcodec/bit_depth_template.c" ++ ++#define BUTTERFLY_4_H(tmp0_m, tmp1_m, tmp2_m, tmp3_m, out0, out1, out2, out3) \ ++{ \ ++ out0 = __lasx_xvadd_h(tmp0_m, tmp3_m); \ ++ out1 = __lasx_xvadd_h(tmp1_m, tmp2_m); \ ++ out2 = __lasx_xvsub_h(tmp1_m, tmp2_m); \ ++ out3 = __lasx_xvsub_h(tmp0_m, tmp3_m); \ ++ } ++ ++#define BUTTERFLY_4_W(tmp0_m, tmp1_m, tmp2_m, tmp3_m, out0, out1, out2, out3) \ ++{ \ ++ out0 = __lasx_xvadd_w(tmp0_m, tmp3_m); \ ++ out1 = __lasx_xvadd_w(tmp1_m, tmp2_m); \ ++ out2 = __lasx_xvsub_w(tmp1_m, tmp2_m); \ ++ out3 = __lasx_xvsub_w(tmp0_m, tmp3_m); \ ++ } ++ ++#define BUTTERFLY_8_H(in0, in1, in2, in3, in4, in5, in6, in7, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ out0 = __lasx_xvadd_h(in0, in7); \ ++ out1 = __lasx_xvadd_h(in1, in6); \ ++ out2 = __lasx_xvadd_h(in2, in5); \ ++ out3 = __lasx_xvadd_h(in3, in4); \ ++ out4 = __lasx_xvsub_h(in3, in4); \ ++ out5 = __lasx_xvsub_h(in2, in5); \ ++ out6 = __lasx_xvsub_h(in1, in6); \ ++ out7 = __lasx_xvsub_h(in0, in7); \ ++} ++ ++#define AVC_ITRANS_H(in0, in1, in2, in3, out0, out1, out2, out3) \ ++{ \ ++ __m256i tmp0_m, tmp1_m, tmp2_m, tmp3_m; \ ++ \ ++ tmp0_m = __lasx_xvadd_h(in0, in2); \ ++ tmp1_m = __lasx_xvsub_h(in0, in2); \ ++ tmp2_m = __lasx_xvsrai_h(in1, 1); \ ++ tmp2_m = __lasx_xvsub_h(tmp2_m, in3); \ ++ tmp3_m = __lasx_xvsrai_h(in3, 1); \ ++ tmp3_m = __lasx_xvadd_h(in1, tmp3_m); \ ++ \ ++ BUTTERFLY_4_H(tmp0_m, tmp1_m, tmp2_m, tmp3_m, \ ++ out0, out1, out2, out3); \ ++} ++ ++void ff_h264_idct_add_lasx(uint8_t *dst, int16_t *src, int32_t dst_stride) ++{ ++ __m256i src0_m, src1_m, src2_m, src3_m; ++ __m256i dst0_m, dst1_m; ++ __m256i hres0, hres1, hres2, hres3, vres0, vres1, vres2, vres3; ++ __m256i inp0_m, inp1_m, res0_m, src1, src3; ++ __m256i src0 = LASX_LD(src); ++ __m256i src2 = LASX_LD(src + 8); ++ __m256i zero = __lasx_xvldi(0); ++ ++ LASX_ST(zero, src); ++ LASX_ILVH_D_2_128SV(src0, src0, src2, src2, src1, src3); ++ AVC_ITRANS_H(src0, src1, src2, src3, hres0, hres1, hres2, hres3); ++ LASX_TRANSPOSE4x4_H_128SV(hres0, hres1, hres2, hres3, ++ hres0, hres1, hres2, hres3); ++ AVC_ITRANS_H(hres0, hres1, hres2, hres3, vres0, vres1, vres2, vres3); ++ LASX_LD_4(dst, dst_stride, src0_m, src1_m, src2_m, src3_m); ++ LASX_ILVL_D_2_128SV(vres1, vres0, vres3, vres2, inp0_m, inp1_m); ++ LASX_PCKEV_Q(inp1_m, inp0_m, inp0_m); ++ LASX_SRARI_H(inp0_m, inp0_m, 6); ++ LASX_ILVL_W_2_128SV(src1_m, src0_m, src3_m, src2_m, dst0_m, dst1_m); ++ LASX_ILVL_D_128SV(dst1_m, dst0_m, dst0_m); ++ LASX_UNPCK_L_HU_BU(dst0_m, res0_m); ++ res0_m = __lasx_xvadd_h(res0_m, inp0_m); ++ LASX_CLIP_H_0_255(res0_m, res0_m); ++ dst0_m = __lasx_xvpickev_b(res0_m, res0_m); ++ LASX_ST_W_4(dst0_m, 0, 1, 4, 5, dst, dst_stride); ++} ++ ++void ff_h264_idct8_addblk_lasx(uint8_t *dst, int16_t *src, ++ int32_t dst_stride) ++{ ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m256i vec0, vec1, vec2, vec3; ++ __m256i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; ++ __m256i res0, res1, res2, res3, res4, res5, res6, res7; ++ __m256i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; ++ __m256i zero = __lasx_xvldi(0); ++ ++ src[0] += 32; ++ LASX_LD_8(src, 8, src0, src1, src2, src3, src4, src5, src6, src7); ++ LASX_ST_4(zero, zero, zero, zero, src, 16); ++ ++ vec0 = __lasx_xvadd_h(src0, src4); ++ vec1 = __lasx_xvsub_h(src0, src4); ++ vec2 = __lasx_xvsrai_h(src2, 1); ++ vec2 = __lasx_xvsub_h(vec2, src6); ++ vec3 = __lasx_xvsrai_h(src6, 1); ++ vec3 = __lasx_xvadd_h(src2, vec3); ++ ++ BUTTERFLY_4_H(vec0, vec1, vec2, vec3, tmp0, tmp1, tmp2, tmp3); ++ ++ vec0 = __lasx_xvsrai_h(src7, 1); ++ vec0 = __lasx_xvsub_h(src5, vec0); ++ vec0 = __lasx_xvsub_h(vec0, src3); ++ vec0 = __lasx_xvsub_h(vec0, src7); ++ ++ vec1 = __lasx_xvsrai_h(src3, 1); ++ vec1 = __lasx_xvsub_h(src1, vec1); ++ vec1 = __lasx_xvadd_h(vec1, src7); ++ vec1 = __lasx_xvsub_h(vec1, src3); ++ ++ vec2 = __lasx_xvsrai_h(src5, 1); ++ vec2 = __lasx_xvsub_h(vec2, src1); ++ vec2 = __lasx_xvadd_h(vec2, src7); ++ vec2 = __lasx_xvadd_h(vec2, src5); ++ ++ vec3 = __lasx_xvsrai_h(src1, 1); ++ vec3 = __lasx_xvadd_h(src3, vec3); ++ vec3 = __lasx_xvadd_h(vec3, src5); ++ vec3 = __lasx_xvadd_h(vec3, src1); ++ ++ tmp4 = __lasx_xvsrai_h(vec3, 2); ++ tmp4 = __lasx_xvadd_h(tmp4, vec0); ++ tmp5 = __lasx_xvsrai_h(vec2, 2); ++ tmp5 = __lasx_xvadd_h(tmp5, vec1); ++ tmp6 = __lasx_xvsrai_h(vec1, 2); ++ tmp6 = __lasx_xvsub_h(tmp6, vec2); ++ tmp7 = __lasx_xvsrai_h(vec0, 2); ++ tmp7 = __lasx_xvsub_h(vec3, tmp7); ++ ++ BUTTERFLY_8_H(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, ++ res0, res1, res2, res3, res4, res5, res6, res7); ++ LASX_TRANSPOSE8x8_H_128SV(res0, res1, res2, res3, res4, res5, res6, res7, ++ res0, res1, res2, res3, res4, res5, res6, res7); ++ ++ LASX_UNPCK_L_W_H_8(res0, res1, res2, res3, res4, res5, res6, res7, ++ tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); ++ vec0 = __lasx_xvadd_w(tmp0, tmp4); ++ vec1 = __lasx_xvsub_w(tmp0, tmp4); ++ ++ vec2 = __lasx_xvsrai_w(tmp2, 1); ++ vec2 = __lasx_xvsub_w(vec2, tmp6); ++ vec3 = __lasx_xvsrai_w(tmp6, 1); ++ vec3 = __lasx_xvadd_w(vec3, tmp2); ++ ++ tmp0 = __lasx_xvadd_w(vec0, vec3); ++ tmp2 = __lasx_xvadd_w(vec1, vec2); ++ tmp4 = __lasx_xvsub_w(vec1, vec2); ++ tmp6 = __lasx_xvsub_w(vec0, vec3); ++ ++ vec0 = __lasx_xvsrai_w(tmp7, 1); ++ vec0 = __lasx_xvsub_w(tmp5, vec0); ++ vec0 = __lasx_xvsub_w(vec0, tmp3); ++ vec0 = __lasx_xvsub_w(vec0, tmp7); ++ ++ vec1 = __lasx_xvsrai_w(tmp3, 1); ++ vec1 = __lasx_xvsub_w(tmp1, vec1); ++ vec1 = __lasx_xvadd_w(vec1, tmp7); ++ vec1 = __lasx_xvsub_w(vec1, tmp3); ++ ++ vec2 = __lasx_xvsrai_w(tmp5, 1); ++ vec2 = __lasx_xvsub_w(vec2, tmp1); ++ vec2 = __lasx_xvadd_w(vec2, tmp7); ++ vec2 = __lasx_xvadd_w(vec2, tmp5); ++ ++ vec3 = __lasx_xvsrai_w(tmp1, 1); ++ vec3 = __lasx_xvadd_w(tmp3, vec3); ++ vec3 = __lasx_xvadd_w(vec3, tmp5); ++ vec3 = __lasx_xvadd_w(vec3, tmp1); ++ ++ tmp1 = __lasx_xvsrai_w(vec3, 2); ++ tmp1 = __lasx_xvadd_w(tmp1, vec0); ++ tmp3 = __lasx_xvsrai_w(vec2, 2); ++ tmp3 = __lasx_xvadd_w(tmp3, vec1); ++ tmp5 = __lasx_xvsrai_w(vec1, 2); ++ tmp5 = __lasx_xvsub_w(tmp5, vec2); ++ tmp7 = __lasx_xvsrai_w(vec0, 2); ++ tmp7 = __lasx_xvsub_w(vec3, tmp7); ++ ++ BUTTERFLY_4_W(tmp0, tmp2, tmp5, tmp7, res0, res1, res6, res7); ++ BUTTERFLY_4_W(tmp4, tmp6, tmp1, tmp3, res2, res3, res4, res5); ++ ++ LASX_SRAI_W_8(res0, res1, res2, res3, res4, res5, res6, res7, ++ res0, res1, res2, res3, res4, res5, res6, res7, 6); ++ LASX_PCKEV_H_4(res1, res0, res3, res2, res5, res4, res7, res6, ++ res0, res1, res2, res3); ++ ++ LASX_LD_8(dst, dst_stride, dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7); ++ LASX_ILVL_B_8_128SV(zero, dst0, zero, dst1, zero, dst2, zero, dst3, ++ zero, dst4, zero, dst5, zero, dst6, zero, dst7, ++ dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7); ++ LASX_PCKEV_Q_4(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, ++ dst0, dst1, dst2, dst3); ++ res0 = __lasx_xvadd_h(res0, dst0); ++ res1 = __lasx_xvadd_h(res1, dst1); ++ res2 = __lasx_xvadd_h(res2, dst2); ++ res3 = __lasx_xvadd_h(res3, dst3); ++ LASX_CLIP_H_0_255_4(res0, res1, res2, res3, res0, res1, res2, res3); ++ LASX_PCKEV_B_2_128SV(res1, res0, res3, res2, res0, res1); ++ LASX_ST_D_4(res0, 0, 2, 1, 3, dst, dst_stride); ++ LASX_ST_D_4(res1, 0, 2, 1, 3, dst + 4 * dst_stride, dst_stride); ++} ++ ++void ff_h264_idct4x4_addblk_dc_lasx(uint8_t *dst, int16_t *src, ++ int32_t dst_stride) ++{ ++ const int16_t dc = (src[0] + 32) >> 6; ++ __m256i pred, out; ++ __m256i src0, src1, src2, src3; ++ __m256i input_dc = __lasx_xvreplgr2vr_h(dc); ++ ++ src[0] = 0; ++ LASX_LD_4(dst, dst_stride, src0, src1, src2, src3); ++ LASX_ILVL_W_2_128SV(src1, src0, src3, src2, src0, src1); ++ pred = __lasx_xvpermi_q(src0, src1, 0x02); ++ LASX_ADDW_H_H_BU_128SV(input_dc, pred, pred); ++ LASX_CLIP_H_0_255(pred, pred); ++ out = __lasx_xvpickev_b(pred, pred); ++ LASX_ST_W_4(out, 0, 1, 4, 5, dst, dst_stride); ++} ++ ++void ff_h264_idct8_dc_addblk_lasx(uint8_t *dst, int16_t *src, ++ int32_t dst_stride) ++{ ++ int32_t dc_val; ++ __m256i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; ++ __m256i dc; ++ ++ dc_val = (src[0] + 32) >> 6; ++ dc = __lasx_xvreplgr2vr_h(dc_val); ++ ++ src[0] = 0; ++ ++ LASX_LD_8(dst, dst_stride, dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7); ++ LASX_UNPCK_L_HU_BU_8(dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, ++ dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7); ++ LASX_PCKEV_Q_4(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, ++ dst0, dst1, dst2, dst3); ++ dst0 = __lasx_xvadd_h(dst0, dc); ++ dst1 = __lasx_xvadd_h(dst1, dc); ++ dst2 = __lasx_xvadd_h(dst2, dc); ++ dst3 = __lasx_xvadd_h(dst3, dc); ++ LASX_CLIP_H_0_255_4(dst0, dst1, dst2, dst3, dst0, dst1, dst2, dst3); ++ LASX_PCKEV_B_2_128SV(dst1, dst0, dst3, dst2, dst0, dst1); ++ LASX_ST_D_4(dst0, 0, 2, 1, 3, dst, dst_stride); ++ LASX_ST_D_4(dst1, 0, 2, 1, 3, dst + 4 * dst_stride, dst_stride); ++} ++ ++void ff_h264_idct_add16_lasx(uint8_t *dst, ++ const int32_t *blk_offset, ++ int16_t *block, int32_t dst_stride, ++ const uint8_t nzc[15 * 8]) ++{ ++ int32_t i; ++ ++ for (i = 0; i < 16; i++) { ++ int32_t nnz = nzc[scan8[i]]; ++ ++ if (nnz) { ++ if (nnz == 1 && ((dctcoef *) block)[i * 16]) ++ ff_h264_idct4x4_addblk_dc_lasx(dst + blk_offset[i], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ else ++ ff_h264_idct_add_lasx(dst + blk_offset[i], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ } ++ } ++} ++ ++void ff_h264_idct8_add4_lasx(uint8_t *dst, const int32_t *blk_offset, ++ int16_t *block, int32_t dst_stride, ++ const uint8_t nzc[15 * 8]) ++{ ++ int32_t cnt; ++ ++ for (cnt = 0; cnt < 16; cnt += 4) { ++ int32_t nnz = nzc[scan8[cnt]]; ++ ++ if (nnz) { ++ if (nnz == 1 && ((dctcoef *) block)[cnt * 16]) ++ ff_h264_idct8_dc_addblk_lasx(dst + blk_offset[cnt], ++ block + cnt * 16 * sizeof(pixel), ++ dst_stride); ++ else ++ ff_h264_idct8_addblk_lasx(dst + blk_offset[cnt], ++ block + cnt * 16 * sizeof(pixel), ++ dst_stride); ++ } ++ } ++} ++ ++ ++void ff_h264_idct_add8_lasx(uint8_t **dst, ++ const int32_t *blk_offset, ++ int16_t *block, int32_t dst_stride, ++ const uint8_t nzc[15 * 8]) ++{ ++ int32_t i; ++ ++ for (i = 16; i < 20; i++) { ++ if (nzc[scan8[i]]) ++ ff_h264_idct_add_lasx(dst[0] + blk_offset[i], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ else if (((dctcoef *) block)[i * 16]) ++ ff_h264_idct4x4_addblk_dc_lasx(dst[0] + blk_offset[i], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ } ++ for (i = 32; i < 36; i++) { ++ if (nzc[scan8[i]]) ++ ff_h264_idct_add_lasx(dst[1] + blk_offset[i], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ else if (((dctcoef *) block)[i * 16]) ++ ff_h264_idct4x4_addblk_dc_lasx(dst[1] + blk_offset[i], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ } ++} ++ ++void ff_h264_idct_add8_422_lasx(uint8_t **dst, ++ const int32_t *blk_offset, ++ int16_t *block, int32_t dst_stride, ++ const uint8_t nzc[15 * 8]) ++{ ++ int32_t i; ++ ++ for (i = 16; i < 20; i++) { ++ if (nzc[scan8[i]]) ++ ff_h264_idct_add_lasx(dst[0] + blk_offset[i], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ else if (((dctcoef *) block)[i * 16]) ++ ff_h264_idct4x4_addblk_dc_lasx(dst[0] + blk_offset[i], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ } ++ for (i = 32; i < 36; i++) { ++ if (nzc[scan8[i]]) ++ ff_h264_idct_add_lasx(dst[1] + blk_offset[i], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ else if (((dctcoef *) block)[i * 16]) ++ ff_h264_idct4x4_addblk_dc_lasx(dst[1] + blk_offset[i], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ } ++ for (i = 20; i < 24; i++) { ++ if (nzc[scan8[i + 4]]) ++ ff_h264_idct_add_lasx(dst[0] + blk_offset[i + 4], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ else if (((dctcoef *) block)[i * 16]) ++ ff_h264_idct4x4_addblk_dc_lasx(dst[0] + blk_offset[i + 4], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ } ++ for (i = 36; i < 40; i++) { ++ if (nzc[scan8[i + 4]]) ++ ff_h264_idct_add_lasx(dst[1] + blk_offset[i + 4], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ else if (((dctcoef *) block)[i * 16]) ++ ff_h264_idct4x4_addblk_dc_lasx(dst[1] + blk_offset[i + 4], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ } ++} ++ ++void ff_h264_idct_add16_intra_lasx(uint8_t *dst, ++ const int32_t *blk_offset, ++ int16_t *block, ++ int32_t dst_stride, ++ const uint8_t nzc[15 * 8]) ++{ ++ int32_t i; ++ ++ for (i = 0; i < 16; i++) { ++ if (nzc[scan8[i]]) ++ ff_h264_idct_add_lasx(dst + blk_offset[i], ++ block + i * 16 * sizeof(pixel), dst_stride); ++ else if (((dctcoef *) block)[i * 16]) ++ ff_h264_idct4x4_addblk_dc_lasx(dst + blk_offset[i], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ } ++} ++ ++void ff_h264_deq_idct_luma_dc_lasx(int16_t *dst, int16_t *src, ++ int32_t de_qval) ++{ ++#define DC_DEST_STRIDE 16 ++ ++ __m256i src0, src1, src2, src3; ++ __m256i vec0, vec1, vec2, vec3; ++ __m256i tmp0, tmp1, tmp2, tmp3; ++ __m256i hres0, hres1, hres2, hres3; ++ __m256i vres0, vres1, vres2, vres3; ++ __m256i de_q_vec = __lasx_xvreplgr2vr_w(de_qval); ++ ++ LASX_LD_4(src, 4, src0, src1, src2, src3); ++ LASX_TRANSPOSE4x4_H_128SV(src0, src1, src2, src3, tmp0, tmp1, tmp2, tmp3); ++ BUTTERFLY_4_H(tmp0, tmp2, tmp3, tmp1, vec0, vec3, vec2, vec1); ++ BUTTERFLY_4_H(vec0, vec1, vec2, vec3, hres0, hres3, hres2, hres1); ++ LASX_TRANSPOSE4x4_H_128SV(hres0, hres1, hres2, hres3, hres0, hres1, hres2, hres3); ++ BUTTERFLY_4_H(hres0, hres1, hres3, hres2, vec0, vec3, vec2, vec1); ++ BUTTERFLY_4_H(vec0, vec1, vec2, vec3, vres0, vres1, vres2, vres3); ++ LASX_UNPCK_L_W_H_4(vres0, vres1, vres2, vres3, vres0, vres1, vres2, vres3); ++ LASX_PCKEV_Q_2(vres1, vres0, vres3, vres2, vres0, vres1); ++ ++ vres0 = __lasx_xvmul_w(vres0, de_q_vec); ++ vres1 = __lasx_xvmul_w(vres1, de_q_vec); ++ ++ vres0 = __lasx_xvsrari_w(vres0, 8); ++ vres1 = __lasx_xvsrari_w(vres1, 8); ++ LASX_PCKEV_H(vres1, vres0, vec0); ++ __lasx_xvstelm_h(vec0, dst + 0 * DC_DEST_STRIDE, 0, 0); ++ __lasx_xvstelm_h(vec0, dst + 2 * DC_DEST_STRIDE, 0, 1); ++ __lasx_xvstelm_h(vec0, dst + 8 * DC_DEST_STRIDE, 0, 2); ++ __lasx_xvstelm_h(vec0, dst + 10 * DC_DEST_STRIDE, 0, 3); ++ __lasx_xvstelm_h(vec0, dst + 1 * DC_DEST_STRIDE, 0, 4); ++ __lasx_xvstelm_h(vec0, dst + 3 * DC_DEST_STRIDE, 0, 5); ++ __lasx_xvstelm_h(vec0, dst + 9 * DC_DEST_STRIDE, 0, 6); ++ __lasx_xvstelm_h(vec0, dst + 11 * DC_DEST_STRIDE, 0, 7); ++ __lasx_xvstelm_h(vec0, dst + 4 * DC_DEST_STRIDE, 0, 8); ++ __lasx_xvstelm_h(vec0, dst + 6 * DC_DEST_STRIDE, 0, 9); ++ __lasx_xvstelm_h(vec0, dst + 12 * DC_DEST_STRIDE, 0, 10); ++ __lasx_xvstelm_h(vec0, dst + 14 * DC_DEST_STRIDE, 0, 11); ++ __lasx_xvstelm_h(vec0, dst + 5 * DC_DEST_STRIDE, 0, 12); ++ __lasx_xvstelm_h(vec0, dst + 7 * DC_DEST_STRIDE, 0, 13); ++ __lasx_xvstelm_h(vec0, dst + 13 * DC_DEST_STRIDE, 0, 14); ++ __lasx_xvstelm_h(vec0, dst + 15 * DC_DEST_STRIDE, 0, 15); ++ ++#undef DC_DEST_STRIDE ++} +diff --git a/libavcodec/loongarch/h264qpel_init_loongarch.c b/libavcodec/loongarch/h264qpel_init_loongarch.c +new file mode 100644 +index 0000000000..b98b2dd793 +--- /dev/null ++++ b/libavcodec/loongarch/h264qpel_init_loongarch.c +@@ -0,0 +1,96 @@ ++/* ++ * Copyright (c) 2020 Loongson Technology Corporation Limited ++ * Contributed by Shiyou Yin ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "h264qpel_lasx.h" ++#include "libavutil/loongarch/cpu.h" ++#include "libavcodec/h264qpel.h" ++ ++av_cold void ff_h264qpel_init_loongarch(H264QpelContext *c, int bit_depth) ++{ ++ int cpu_flags = av_get_cpu_flags(); ++ if (have_lasx(cpu_flags)) { ++ if (8 == bit_depth) { ++ c->put_h264_qpel_pixels_tab[0][0] = ff_put_h264_qpel16_mc00_lasx; ++ c->put_h264_qpel_pixels_tab[0][1] = ff_put_h264_qpel16_mc10_lasx; ++ c->put_h264_qpel_pixels_tab[0][2] = ff_put_h264_qpel16_mc20_lasx; ++ c->put_h264_qpel_pixels_tab[0][3] = ff_put_h264_qpel16_mc30_lasx; ++ c->put_h264_qpel_pixels_tab[0][4] = ff_put_h264_qpel16_mc01_lasx; ++ c->put_h264_qpel_pixels_tab[0][5] = ff_put_h264_qpel16_mc11_lasx; ++ c->put_h264_qpel_pixels_tab[0][6] = ff_put_h264_qpel16_mc21_lasx; ++ c->put_h264_qpel_pixels_tab[0][7] = ff_put_h264_qpel16_mc31_lasx; ++ c->put_h264_qpel_pixels_tab[0][8] = ff_put_h264_qpel16_mc02_lasx; ++ c->put_h264_qpel_pixels_tab[0][9] = ff_put_h264_qpel16_mc12_lasx; ++ c->put_h264_qpel_pixels_tab[0][10] = ff_put_h264_qpel16_mc22_lasx; ++ c->put_h264_qpel_pixels_tab[0][11] = ff_put_h264_qpel16_mc32_lasx; ++ c->put_h264_qpel_pixels_tab[0][12] = ff_put_h264_qpel16_mc03_lasx; ++ c->put_h264_qpel_pixels_tab[0][13] = ff_put_h264_qpel16_mc13_lasx; ++ c->put_h264_qpel_pixels_tab[0][14] = ff_put_h264_qpel16_mc23_lasx; ++ c->put_h264_qpel_pixels_tab[0][15] = ff_put_h264_qpel16_mc33_lasx; ++ c->avg_h264_qpel_pixels_tab[0][0] = ff_avg_h264_qpel16_mc00_lasx; ++ c->avg_h264_qpel_pixels_tab[0][1] = ff_avg_h264_qpel16_mc10_lasx; ++ c->avg_h264_qpel_pixels_tab[0][2] = ff_avg_h264_qpel16_mc20_lasx; ++ c->avg_h264_qpel_pixels_tab[0][3] = ff_avg_h264_qpel16_mc30_lasx; ++ c->avg_h264_qpel_pixels_tab[0][4] = ff_avg_h264_qpel16_mc01_lasx; ++ c->avg_h264_qpel_pixels_tab[0][5] = ff_avg_h264_qpel16_mc11_lasx; ++ c->avg_h264_qpel_pixels_tab[0][6] = ff_avg_h264_qpel16_mc21_lasx; ++ c->avg_h264_qpel_pixels_tab[0][7] = ff_avg_h264_qpel16_mc31_lasx; ++ c->avg_h264_qpel_pixels_tab[0][8] = ff_avg_h264_qpel16_mc02_lasx; ++ c->avg_h264_qpel_pixels_tab[0][9] = ff_avg_h264_qpel16_mc12_lasx; ++ c->avg_h264_qpel_pixels_tab[0][10] = ff_avg_h264_qpel16_mc22_lasx; ++ c->avg_h264_qpel_pixels_tab[0][11] = ff_avg_h264_qpel16_mc32_lasx; ++ c->avg_h264_qpel_pixels_tab[0][12] = ff_avg_h264_qpel16_mc03_lasx; ++ c->avg_h264_qpel_pixels_tab[0][13] = ff_avg_h264_qpel16_mc13_lasx; ++ c->avg_h264_qpel_pixels_tab[0][14] = ff_avg_h264_qpel16_mc23_lasx; ++ c->avg_h264_qpel_pixels_tab[0][15] = ff_avg_h264_qpel16_mc33_lasx; ++ ++ c->put_h264_qpel_pixels_tab[1][0] = ff_put_h264_qpel8_mc00_lasx; ++ c->put_h264_qpel_pixels_tab[1][1] = ff_put_h264_qpel8_mc10_lasx; ++ c->put_h264_qpel_pixels_tab[1][2] = ff_put_h264_qpel8_mc20_lasx; ++ c->put_h264_qpel_pixels_tab[1][3] = ff_put_h264_qpel8_mc30_lasx; ++ c->put_h264_qpel_pixels_tab[1][4] = ff_put_h264_qpel8_mc01_lasx; ++ c->put_h264_qpel_pixels_tab[1][5] = ff_put_h264_qpel8_mc11_lasx; ++ c->put_h264_qpel_pixels_tab[1][6] = ff_put_h264_qpel8_mc21_lasx; ++ c->put_h264_qpel_pixels_tab[1][7] = ff_put_h264_qpel8_mc31_lasx; ++ c->put_h264_qpel_pixels_tab[1][8] = ff_put_h264_qpel8_mc02_lasx; ++ c->put_h264_qpel_pixels_tab[1][9] = ff_put_h264_qpel8_mc12_lasx; ++ c->put_h264_qpel_pixels_tab[1][10] = ff_put_h264_qpel8_mc22_lasx; ++ c->put_h264_qpel_pixels_tab[1][11] = ff_put_h264_qpel8_mc32_lasx; ++ c->put_h264_qpel_pixels_tab[1][12] = ff_put_h264_qpel8_mc03_lasx; ++ c->put_h264_qpel_pixels_tab[1][13] = ff_put_h264_qpel8_mc13_lasx; ++ c->put_h264_qpel_pixels_tab[1][14] = ff_put_h264_qpel8_mc23_lasx; ++ c->put_h264_qpel_pixels_tab[1][15] = ff_put_h264_qpel8_mc33_lasx; ++ c->avg_h264_qpel_pixels_tab[1][0] = ff_avg_h264_qpel8_mc00_lasx; ++ c->avg_h264_qpel_pixels_tab[1][1] = ff_avg_h264_qpel8_mc10_lasx; ++ c->avg_h264_qpel_pixels_tab[1][2] = ff_avg_h264_qpel8_mc20_lasx; ++ c->avg_h264_qpel_pixels_tab[1][3] = ff_avg_h264_qpel8_mc30_lasx; ++ c->avg_h264_qpel_pixels_tab[1][5] = ff_avg_h264_qpel8_mc11_lasx; ++ c->avg_h264_qpel_pixels_tab[1][6] = ff_avg_h264_qpel8_mc21_lasx; ++ c->avg_h264_qpel_pixels_tab[1][7] = ff_avg_h264_qpel8_mc31_lasx; ++ c->avg_h264_qpel_pixels_tab[1][8] = ff_avg_h264_qpel8_mc02_lasx; ++ c->avg_h264_qpel_pixels_tab[1][9] = ff_avg_h264_qpel8_mc12_lasx; ++ c->avg_h264_qpel_pixels_tab[1][10] = ff_avg_h264_qpel8_mc22_lasx; ++ c->avg_h264_qpel_pixels_tab[1][11] = ff_avg_h264_qpel8_mc32_lasx; ++ c->avg_h264_qpel_pixels_tab[1][13] = ff_avg_h264_qpel8_mc13_lasx; ++ c->avg_h264_qpel_pixels_tab[1][14] = ff_avg_h264_qpel8_mc23_lasx; ++ c->avg_h264_qpel_pixels_tab[1][15] = ff_avg_h264_qpel8_mc33_lasx; ++ } ++ } ++} +diff --git a/libavcodec/loongarch/h264qpel_lasx.c b/libavcodec/loongarch/h264qpel_lasx.c +new file mode 100644 +index 0000000000..9bf1f60a4f +--- /dev/null ++++ b/libavcodec/loongarch/h264qpel_lasx.c +@@ -0,0 +1,2053 @@ ++/* ++ * Loongson LASX optimized h264qpel ++ * ++ * Copyright (c) 2020 Loongson Technology Corporation Limited ++ * Contributed by Shiyou Yin ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "h264qpel_lasx.h" ++#include "libavutil/loongarch/generic_macros_lasx.h" ++#include "libavutil/attributes.h" ++ ++static const uint8_t luma_mask_arr[16 * 6] __attribute__((aligned(0x40))) = { ++ /* 8 width cases */ ++ 0, 5, 1, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, ++ 0, 5, 1, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, ++ 1, 4, 2, 5, 3, 6, 4, 7, 5, 8, 6, 9, 7, 10, 8, 11, ++ 1, 4, 2, 5, 3, 6, 4, 7, 5, 8, 6, 9, 7, 10, 8, 11, ++ 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, ++ 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10 ++}; ++ ++#define AVC_HORZ_FILTER_SH(in0, in1, mask0, mask1, mask2) \ ++( { \ ++ __m256i out0_m; \ ++ __m256i tmp0_m; \ ++ \ ++ tmp0_m = __lasx_xvshuf_b(in1, in0, mask0); \ ++ out0_m = __lasx_xvhaddw_h_b(tmp0_m, tmp0_m); \ ++ tmp0_m = __lasx_xvshuf_b(in1, in0, mask1); \ ++ LASX_DP2ADD_H_B(out0_m, minus5b, tmp0_m, out0_m); \ ++ tmp0_m = __lasx_xvshuf_b(in1, in0, mask2); \ ++ LASX_DP2ADD_H_B(out0_m, plus20b, tmp0_m, out0_m); \ ++ \ ++ out0_m; \ ++} ) ++ ++#define AVC_DOT_SH3_SH(in0, in1, in2, coeff0, coeff1, coeff2) \ ++( { \ ++ __m256i out0_m; \ ++ \ ++ LASX_DP2_H_B(in0, coeff0, out0_m); \ ++ LASX_DP2ADD_H_B(out0_m, in1, coeff1, out0_m); \ ++ LASX_DP2ADD_H_B(out0_m, in2, coeff2, out0_m); \ ++ \ ++ out0_m; \ ++} ) ++ ++static av_always_inline ++void avc_luma_hv_qrt_and_aver_dst_16x16_lasx(const uint8_t *src_x, ++ const uint8_t *src_y, ++ uint8_t *dst, int32_t stride) ++{ ++ const int16_t filt_const0 = 0xfb01; ++ const int16_t filt_const1 = 0x1414; ++ const int16_t filt_const2 = 0x1fb; ++ uint32_t loop_cnt; ++ int32_t stride_x2 = stride << 1; ++ int32_t stride_x3 = stride_x2 + stride; ++ int32_t stride_x4 = stride << 2; ++ __m256i tmp0, tmp1; ++ __m256i src_hz0, src_hz1, src_hz2, src_hz3, mask0, mask1, mask2; ++ __m256i src_vt0, src_vt1, src_vt2, src_vt3, src_vt4, src_vt5, src_vt6; ++ __m256i src_vt7, src_vt8; ++ __m256i src_vt10_h, src_vt21_h, src_vt32_h, src_vt43_h, src_vt54_h; ++ __m256i src_vt65_h, src_vt76_h, src_vt87_h, filt0, filt1, filt2; ++ __m256i hz_out0, hz_out1, hz_out2, hz_out3, vt_out0, vt_out1, vt_out2; ++ __m256i vt_out3, out0, out1, out2, out3; ++ __m256i minus5b = __lasx_xvldi(0xFB); ++ __m256i plus20b = __lasx_xvldi(20); ++ ++ filt0 = __lasx_xvreplgr2vr_h(filt_const0); ++ filt1 = __lasx_xvreplgr2vr_h(filt_const1); ++ filt2 = __lasx_xvreplgr2vr_h(filt_const2); ++ ++ mask0 = LASX_LD(luma_mask_arr); ++ LASX_LD_2(luma_mask_arr + 32, 32, mask1, mask2); ++ src_vt0 = LASX_LD(src_y); ++ LASX_LD_4(src_y + stride, stride, src_vt1, src_vt2, src_vt3, src_vt4); ++ src_y += stride_x4 + stride; ++ ++ LASX_XORI_B_128(src_vt0); ++ LASX_XORI_B_4_128(src_vt1, src_vt2, src_vt3, src_vt4); ++ ++ for (loop_cnt = 4; loop_cnt--;) { ++ LASX_LD_4(src_x, stride, src_hz0, src_hz1, src_hz2, src_hz3); ++ src_x += stride_x4; ++ src_hz0 = __lasx_xvpermi_d(src_hz0, 0x94); ++ src_hz1 = __lasx_xvpermi_d(src_hz1, 0x94); ++ src_hz2 = __lasx_xvpermi_d(src_hz2, 0x94); ++ src_hz3 = __lasx_xvpermi_d(src_hz3, 0x94); ++ LASX_XORI_B_4_128(src_hz0, src_hz1, src_hz2, src_hz3); ++ ++ hz_out0 = AVC_HORZ_FILTER_SH(src_hz0, src_hz0, mask0, mask1, mask2); ++ hz_out1 = AVC_HORZ_FILTER_SH(src_hz1, src_hz1, mask0, mask1, mask2); ++ hz_out2 = AVC_HORZ_FILTER_SH(src_hz2, src_hz2, mask0, mask1, mask2); ++ hz_out3 = AVC_HORZ_FILTER_SH(src_hz3, src_hz3, mask0, mask1, mask2); ++ hz_out0 = __lasx_xvssrarni_b_h(hz_out1, hz_out0, 5); ++ hz_out2 = __lasx_xvssrarni_b_h(hz_out3, hz_out2, 5); ++ ++ LASX_LD_4(src_y, stride, src_vt5, src_vt6, src_vt7, src_vt8); ++ src_y += stride_x4; ++ ++ LASX_XORI_B_4_128(src_vt5, src_vt6, src_vt7, src_vt8); ++ LASX_ILVL_B_4(src_vt1, src_vt0, src_vt2, src_vt1, src_vt3, src_vt2, ++ src_vt4, src_vt3, src_vt10_h, src_vt21_h, src_vt32_h, ++ src_vt43_h); ++ LASX_ILVL_B_4(src_vt5, src_vt4, src_vt6, src_vt5, src_vt7, src_vt6, ++ src_vt8, src_vt7, src_vt54_h, src_vt65_h, src_vt76_h, ++ src_vt87_h); ++ vt_out0 = AVC_DOT_SH3_SH(src_vt10_h, src_vt32_h, src_vt54_h, filt0, ++ filt1, filt2); ++ vt_out1 = AVC_DOT_SH3_SH(src_vt21_h, src_vt43_h, src_vt65_h, filt0, ++ filt1, filt2); ++ vt_out2 = AVC_DOT_SH3_SH(src_vt32_h, src_vt54_h, src_vt76_h, filt0, ++ filt1, filt2); ++ vt_out3 = AVC_DOT_SH3_SH(src_vt43_h, src_vt65_h, src_vt87_h, filt0, ++ filt1, filt2); ++ vt_out0 = __lasx_xvssrarni_b_h(vt_out1, vt_out0, 5); ++ vt_out2 = __lasx_xvssrarni_b_h(vt_out3, vt_out2, 5); ++ ++ LASX_ADDWL_H_B_2_128SV(hz_out0, vt_out0, hz_out2, vt_out2, out0, out2); ++ LASX_ADDWH_H_B_2_128SV(hz_out0, vt_out0, hz_out2, vt_out2, out1, out3); ++ tmp0 = __lasx_xvssrarni_b_h(out1, out0, 1); ++ tmp1 = __lasx_xvssrarni_b_h(out3, out2, 1); ++ ++ LASX_XORI_B_2_128(tmp0, tmp1); ++ ++ LASX_LD_4(dst, stride, out0, out1, out2, out3); ++ LASX_ILVL_D_2(out1, out0, out3, out2, out0, out1); ++ tmp0 = __lasx_xvavgr_bu(out0, tmp0); ++ tmp1 = __lasx_xvavgr_bu(out1, tmp1); ++ ++ *(int64_t*)dst = __lasx_xvpickve2gr_d(tmp0, 0); ++ *(int64_t*)(dst + stride) = __lasx_xvpickve2gr_d(tmp0, 1); ++ *(int64_t*)(dst + stride_x2) = __lasx_xvpickve2gr_d(tmp1, 0); ++ *(int64_t*)(dst + stride_x3) = __lasx_xvpickve2gr_d(tmp1, 1); ++ ++ *(int64_t*)(dst + 8) = __lasx_xvpickve2gr_d(tmp0, 2); ++ *(int64_t*)(dst + 8 + stride) = __lasx_xvpickve2gr_d(tmp0, 3); ++ *(int64_t*)(dst + 8 + stride_x2) = __lasx_xvpickve2gr_d(tmp1, 2); ++ *(int64_t*)(dst + 8 + stride_x3) = __lasx_xvpickve2gr_d(tmp1, 3); ++ ++ dst += stride_x4; ++ src_vt0 = src_vt4; ++ src_vt1 = src_vt5; ++ src_vt2 = src_vt6; ++ src_vt3 = src_vt7; ++ src_vt4 = src_vt8; ++ } ++} ++ ++static av_always_inline void ++avc_luma_hv_qrt_16x16_lasx(const uint8_t *src_x, const uint8_t *src_y, uint8_t *dst, ++ int32_t stride) ++{ ++ const int16_t filt_const0 = 0xfb01; ++ const int16_t filt_const1 = 0x1414; ++ const int16_t filt_const2 = 0x1fb; ++ uint32_t loop_cnt; ++ int32_t stride_x2 = stride << 1; ++ int32_t stride_x3 = stride_x2 + stride; ++ int32_t stride_x4 = stride << 2; ++ __m256i tmp0, tmp1; ++ __m256i src_hz0, src_hz1, src_hz2, src_hz3, mask0, mask1, mask2; ++ __m256i src_vt0, src_vt1, src_vt2, src_vt3, src_vt4, src_vt5, src_vt6; ++ __m256i src_vt7, src_vt8; ++ __m256i src_vt10_h, src_vt21_h, src_vt32_h, src_vt43_h, src_vt54_h; ++ __m256i src_vt65_h, src_vt76_h, src_vt87_h, filt0, filt1, filt2; ++ __m256i hz_out0, hz_out1, hz_out2, hz_out3, vt_out0, vt_out1, vt_out2; ++ __m256i vt_out3, out0, out1, out2, out3; ++ __m256i minus5b = __lasx_xvldi(0xFB); ++ __m256i plus20b = __lasx_xvldi(20); ++ ++ filt0 = __lasx_xvreplgr2vr_h(filt_const0); ++ filt1 = __lasx_xvreplgr2vr_h(filt_const1); ++ filt2 = __lasx_xvreplgr2vr_h(filt_const2); ++ ++ mask0 = LASX_LD(luma_mask_arr); ++ LASX_LD_2(luma_mask_arr + 32, 32, mask1, mask2); ++ src_vt0 = LASX_LD(src_y); ++ LASX_LD_4(src_y + stride, stride, src_vt1, src_vt2, src_vt3, src_vt4); ++ src_y += stride_x4 + stride; ++ ++ LASX_XORI_B_128(src_vt0); ++ LASX_XORI_B_4_128(src_vt1, src_vt2, src_vt3, src_vt4); ++ ++ for (loop_cnt = 4; loop_cnt--;) { ++ LASX_LD_4(src_x, stride, src_hz0, src_hz1, src_hz2, src_hz3); ++ src_x += stride_x4; ++ src_hz0 = __lasx_xvpermi_d(src_hz0, 0x94); ++ src_hz1 = __lasx_xvpermi_d(src_hz1, 0x94); ++ src_hz2 = __lasx_xvpermi_d(src_hz2, 0x94); ++ src_hz3 = __lasx_xvpermi_d(src_hz3, 0x94); ++ LASX_XORI_B_4_128(src_hz0, src_hz1, src_hz2, src_hz3); ++ ++ hz_out0 = AVC_HORZ_FILTER_SH(src_hz0, src_hz0, mask0, mask1, mask2); ++ hz_out1 = AVC_HORZ_FILTER_SH(src_hz1, src_hz1, mask0, mask1, mask2); ++ hz_out2 = AVC_HORZ_FILTER_SH(src_hz2, src_hz2, mask0, mask1, mask2); ++ hz_out3 = AVC_HORZ_FILTER_SH(src_hz3, src_hz3, mask0, mask1, mask2); ++ hz_out0 = __lasx_xvssrarni_b_h(hz_out1, hz_out0, 5); ++ hz_out2 = __lasx_xvssrarni_b_h(hz_out3, hz_out2, 5); ++ ++ LASX_LD_4(src_y, stride, src_vt5, src_vt6, src_vt7, src_vt8); ++ src_y += stride_x4; ++ ++ LASX_XORI_B_4_128(src_vt5, src_vt6, src_vt7, src_vt8); ++ LASX_ILVL_B_4(src_vt1, src_vt0, src_vt2, src_vt1, src_vt3, src_vt2, ++ src_vt4, src_vt3, src_vt10_h, src_vt21_h, src_vt32_h, ++ src_vt43_h); ++ LASX_ILVL_B_4(src_vt5, src_vt4, src_vt6, src_vt5, src_vt7, src_vt6, ++ src_vt8, src_vt7, src_vt54_h, src_vt65_h, src_vt76_h, ++ src_vt87_h); ++ vt_out0 = AVC_DOT_SH3_SH(src_vt10_h, src_vt32_h, src_vt54_h, filt0, ++ filt1, filt2); ++ vt_out1 = AVC_DOT_SH3_SH(src_vt21_h, src_vt43_h, src_vt65_h, filt0, ++ filt1, filt2); ++ vt_out2 = AVC_DOT_SH3_SH(src_vt32_h, src_vt54_h, src_vt76_h, filt0, ++ filt1, filt2); ++ vt_out3 = AVC_DOT_SH3_SH(src_vt43_h, src_vt65_h, src_vt87_h, filt0, ++ filt1, filt2); ++ vt_out0 = __lasx_xvssrarni_b_h(vt_out1, vt_out0, 5); ++ vt_out2 = __lasx_xvssrarni_b_h(vt_out3, vt_out2, 5); ++ ++ LASX_ADDWL_H_B_2_128SV(hz_out0, vt_out0, hz_out2, vt_out2, out0, out2); ++ LASX_ADDWH_H_B_2_128SV(hz_out0, vt_out0, hz_out2, vt_out2, out1, out3); ++ tmp0 = __lasx_xvssrarni_b_h(out1, out0, 1); ++ tmp1 = __lasx_xvssrarni_b_h(out3, out2, 1); ++ ++ LASX_XORI_B_2_128(tmp0, tmp1); ++ *(int64_t*)dst = __lasx_xvpickve2gr_d(tmp0, 0); ++ *(int64_t*)(dst + stride) = __lasx_xvpickve2gr_d(tmp0, 1); ++ *(int64_t*)(dst + stride_x2) = __lasx_xvpickve2gr_d(tmp1, 0); ++ *(int64_t*)(dst + stride_x3) = __lasx_xvpickve2gr_d(tmp1, 1); ++ ++ *(int64_t*)(dst + 8) = __lasx_xvpickve2gr_d(tmp0, 2); ++ *(int64_t*)(dst + 8 + stride) = __lasx_xvpickve2gr_d(tmp0, 3); ++ *(int64_t*)(dst + 8 + stride_x2) = __lasx_xvpickve2gr_d(tmp1, 2); ++ *(int64_t*)(dst + 8 + stride_x3) = __lasx_xvpickve2gr_d(tmp1, 3); ++ ++ dst += stride_x4; ++ src_vt0 = src_vt4; ++ src_vt1 = src_vt5; ++ src_vt2 = src_vt6; ++ src_vt3 = src_vt7; ++ src_vt4 = src_vt8; ++ } ++} ++ ++/* put_pixels8_8_inline_asm: dst = src */ ++static av_always_inline void ++put_pixels8_8_inline_asm(uint8_t *dst, const uint8_t *src, ptrdiff_t stride) ++{ ++ uint64_t tmp[8]; ++ __asm__ volatile ( ++ "ld.d %[tmp0], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp1], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp2], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp3], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp4], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp5], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp6], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp7], %[src], 0x0 \n\t" ++ ++ "st.d %[tmp0], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp1], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp2], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp3], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp4], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp5], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp6], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp7], %[dst], 0x0 \n\t" ++ : [tmp0]"=&r"(tmp[0]), [tmp1]"=&r"(tmp[1]), ++ [tmp2]"=&r"(tmp[2]), [tmp3]"=&r"(tmp[3]), ++ [tmp4]"=&r"(tmp[4]), [tmp5]"=&r"(tmp[5]), ++ [tmp6]"=&r"(tmp[6]), [tmp7]"=&r"(tmp[7]), ++ [dst]"+&r"(dst), [src]"+&r"(src) ++ : [stride]"r"(stride) ++ : "memory" ++ ); ++} ++ ++/* avg_pixels8_8_lsx : dst = avg(src, dst) ++ * put_pixels8_l2_8_lsx: dst = avg(src, half) , half stride is 8. ++ * avg_pixels8_l2_8_lsx: dst = avg(avg(src, half), dst) , half stride is 8.*/ ++static av_always_inline void ++avg_pixels8_8_lsx(uint8_t *dst, const uint8_t *src, ptrdiff_t stride) ++{ ++ uint8_t *tmp = dst; ++ __asm__ volatile ( ++ /* h0~h7 */ ++ "vld $vr0, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr1, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr2, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr3, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr4, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr5, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr6, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr7, %[src], 0 \n\t" ++ ++ "vld $vr8, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[stride] \n\t" ++ "vld $vr9, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[stride] \n\t" ++ "vld $vr10, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[stride] \n\t" ++ "vld $vr11, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[stride] \n\t" ++ "vld $vr12, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[stride] \n\t" ++ "vld $vr13, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[stride] \n\t" ++ "vld $vr14, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[stride] \n\t" ++ "vld $vr15, %[tmp], 0 \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vstelm.d $vr0, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vstelm.d $vr1, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vstelm.d $vr2, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vstelm.d $vr3, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vstelm.d $vr4, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vstelm.d $vr5, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vstelm.d $vr6, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vstelm.d $vr7, %[dst], 0, 0 \n\t" ++ : [dst]"+&r"(dst), [tmp]"+&r"(tmp), [src]"+&r"(src) ++ : [stride]"r"(stride) ++ : "memory" ++ ); ++} ++ ++/* avg_pixels8_8_lsx : dst = avg(src, dst) ++ * put_pixels8_l2_8_lsx: dst = avg(src, half) , half stride is 8. ++ * avg_pixels8_l2_8_lsx: dst = avg(avg(src, half), dst) , half stride is 8.*/ ++static av_always_inline void ++put_pixels8_l2_8_lsx(uint8_t *dst, const uint8_t *src, const uint8_t *half, ++ ptrdiff_t dstStride, ptrdiff_t srcStride) ++{ ++ __asm__ volatile ( ++ /* h0~h7 */ ++ "vld $vr0, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr1, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr2, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr3, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr4, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr5, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr6, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr7, %[src], 0 \n\t" ++ ++ "vld $vr8, %[half], 0x00 \n\t" ++ "vld $vr9, %[half], 0x08 \n\t" ++ "vld $vr10, %[half], 0x10 \n\t" ++ "vld $vr11, %[half], 0x18 \n\t" ++ "vld $vr12, %[half], 0x20 \n\t" ++ "vld $vr13, %[half], 0x28 \n\t" ++ "vld $vr14, %[half], 0x30 \n\t" ++ "vld $vr15, %[half], 0x38 \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vstelm.d $vr0, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr1, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr2, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr3, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr4, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr5, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr6, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr7, %[dst], 0, 0 \n\t" ++ : [dst]"+&r"(dst), [half]"+&r"(half), [src]"+&r"(src) ++ : [srcStride]"r"(srcStride), [dstStride]"r"(dstStride) ++ : "memory" ++ ); ++} ++ ++/* avg_pixels8_8_lsx : dst = avg(src, dst) ++ * put_pixels8_l2_8_lsx: dst = avg(src, half) , half stride is 8. ++ * avg_pixels8_l2_8_lsx: dst = avg(avg(src, half), dst) , half stride is 8.*/ ++static av_always_inline void ++avg_pixels8_l2_8_lsx(uint8_t *dst, const uint8_t *src, const uint8_t *half, ++ ptrdiff_t dstStride, ptrdiff_t srcStride) ++{ ++ uint8_t *tmp = dst; ++ __asm__ volatile ( ++ /* h0~h7 */ ++ "vld $vr0, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr1, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr2, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr3, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr4, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr5, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr6, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr7, %[src], 0 \n\t" ++ ++ "vld $vr8, %[half], 0x00 \n\t" ++ "vld $vr9, %[half], 0x08 \n\t" ++ "vld $vr10, %[half], 0x10 \n\t" ++ "vld $vr11, %[half], 0x18 \n\t" ++ "vld $vr12, %[half], 0x20 \n\t" ++ "vld $vr13, %[half], 0x28 \n\t" ++ "vld $vr14, %[half], 0x30 \n\t" ++ "vld $vr15, %[half], 0x38 \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vld $vr8, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[dstStride] \n\t" ++ "vld $vr9, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[dstStride] \n\t" ++ "vld $vr10, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[dstStride] \n\t" ++ "vld $vr11, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[dstStride] \n\t" ++ "vld $vr12, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[dstStride] \n\t" ++ "vld $vr13, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[dstStride] \n\t" ++ "vld $vr14, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[dstStride] \n\t" ++ "vld $vr15, %[tmp], 0 \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vstelm.d $vr0, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr1, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr2, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr3, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr4, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr5, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr6, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr7, %[dst], 0, 0 \n\t" ++ : [dst]"+&r"(dst), [tmp]"+&r"(tmp), [half]"+&r"(half), [src]"+&r"(src) ++ : [dstStride]"r"(dstStride), [srcStride]"r"(srcStride) ++ : "memory" ++ ); ++} ++ ++/* put_pixels16_8_lsx: dst = src */ ++static av_always_inline void ++put_pixels16_8_lsx(uint8_t *dst, const uint8_t *src, ptrdiff_t stride) ++{ ++ __asm__ volatile ( ++ "vld $vr0, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr1, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr2, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr3, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr4, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr5, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr6, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr7, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ ++ "vst $vr0, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr1, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr2, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr3, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr4, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr5, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr6, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr7, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ ++ "vld $vr0, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr1, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr2, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr3, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr4, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr5, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr6, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr7, %[src], 0 \n\t" ++ ++ "vst $vr0, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr1, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr2, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr3, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr4, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr5, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr6, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr7, %[dst], 0 \n\t" ++ : [dst]"+&r"(dst), [src]"+&r"(src) ++ : [stride]"r"(stride) ++ : "memory" ++ ); ++} ++ ++/* avg_pixels16_8_lsx : dst = avg(src, dst) ++ * put_pixels16_l2_8_lsx: dst = avg(src, half) , half stride is 8. ++ * avg_pixels16_l2_8_lsx: dst = avg(avg(src, half), dst) , half stride is 8.*/ ++static av_always_inline void ++avg_pixels16_8_lsx(uint8_t *dst, const uint8_t *src, ptrdiff_t stride) ++{ ++ uint8_t *tmp = dst; ++ __asm__ volatile ( ++ /* h0~h7 */ ++ "vld $vr0, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr1, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr2, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr3, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr4, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr5, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr6, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr7, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ ++ "vld $vr8, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[stride] \n\t" ++ "vld $vr9, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[stride] \n\t" ++ "vld $vr10, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[stride] \n\t" ++ "vld $vr11, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[stride] \n\t" ++ "vld $vr12, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[stride] \n\t" ++ "vld $vr13, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[stride] \n\t" ++ "vld $vr14, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[stride] \n\t" ++ "vld $vr15, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[stride] \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vst $vr0, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr1, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr2, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr3, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr4, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr5, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr6, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr7, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ ++ /* h8~h15 */ ++ "vld $vr0, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr1, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr2, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr3, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr4, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr5, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr6, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr7, %[src], 0 \n\t" ++ ++ "vld $vr8, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[stride] \n\t" ++ "vld $vr9, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[stride] \n\t" ++ "vld $vr10, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[stride] \n\t" ++ "vld $vr11, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[stride] \n\t" ++ "vld $vr12, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[stride] \n\t" ++ "vld $vr13, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[stride] \n\t" ++ "vld $vr14, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[stride] \n\t" ++ "vld $vr15, %[tmp], 0 \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vst $vr0, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr1, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr2, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr3, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr4, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr5, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr6, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr7, %[dst], 0 \n\t" ++ : [dst]"+&r"(dst), [tmp]"+&r"(tmp), [src]"+&r"(src) ++ : [stride]"r"(stride) ++ : "memory" ++ ); ++} ++ ++/* avg_pixels16_8_lsx : dst = avg(src, dst) ++ * put_pixels16_l2_8_lsx: dst = avg(src, half) , half stride is 8. ++ * avg_pixels16_l2_8_lsx: dst = avg(avg(src, half), dst) , half stride is 8.*/ ++static av_always_inline void ++put_pixels16_l2_8_lsx(uint8_t *dst, const uint8_t *src, uint8_t *half, ++ ptrdiff_t dstStride, ptrdiff_t srcStride) ++{ ++ __asm__ volatile ( ++ /* h0~h7 */ ++ "vld $vr0, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr1, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr2, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr3, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr4, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr5, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr6, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr7, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ ++ "vld $vr8, %[half], 0x00 \n\t" ++ "vld $vr9, %[half], 0x10 \n\t" ++ "vld $vr10, %[half], 0x20 \n\t" ++ "vld $vr11, %[half], 0x30 \n\t" ++ "vld $vr12, %[half], 0x40 \n\t" ++ "vld $vr13, %[half], 0x50 \n\t" ++ "vld $vr14, %[half], 0x60 \n\t" ++ "vld $vr15, %[half], 0x70 \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vst $vr0, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr1, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr2, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr3, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr4, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr5, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr6, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr7, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ ++ /* h8~h15 */ ++ "vld $vr0, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr1, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr2, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr3, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr4, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr5, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr6, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr7, %[src], 0 \n\t" ++ ++ "vld $vr8, %[half], 0x80 \n\t" ++ "vld $vr9, %[half], 0x90 \n\t" ++ "vld $vr10, %[half], 0xa0 \n\t" ++ "vld $vr11, %[half], 0xb0 \n\t" ++ "vld $vr12, %[half], 0xc0 \n\t" ++ "vld $vr13, %[half], 0xd0 \n\t" ++ "vld $vr14, %[half], 0xe0 \n\t" ++ "vld $vr15, %[half], 0xf0 \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vst $vr0, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr1, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr2, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr3, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr4, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr5, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr6, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr7, %[dst], 0 \n\t" ++ : [dst]"+&r"(dst), [half]"+&r"(half), [src]"+&r"(src) ++ : [dstStride]"r"(dstStride), [srcStride]"r"(srcStride) ++ : "memory" ++ ); ++} ++ ++/* avg_pixels16_8_lsx : dst = avg(src, dst) ++ * put_pixels16_l2_8_lsx: dst = avg(src, half) , half stride is 8. ++ * avg_pixels16_l2_8_lsx: dst = avg(avg(src, half), dst) , half stride is 8.*/ ++static av_always_inline void ++avg_pixels16_l2_8_lsx(uint8_t *dst, const uint8_t *src, uint8_t *half, ++ ptrdiff_t dstStride, ptrdiff_t srcStride) ++{ ++ uint8_t *tmp = dst; ++ __asm__ volatile ( ++ /* h0~h7 */ ++ "vld $vr0, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr1, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr2, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr3, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr4, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr5, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr6, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr7, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ ++ "vld $vr8, %[half], 0x00 \n\t" ++ "vld $vr9, %[half], 0x10 \n\t" ++ "vld $vr10, %[half], 0x20 \n\t" ++ "vld $vr11, %[half], 0x30 \n\t" ++ "vld $vr12, %[half], 0x40 \n\t" ++ "vld $vr13, %[half], 0x50 \n\t" ++ "vld $vr14, %[half], 0x60 \n\t" ++ "vld $vr15, %[half], 0x70 \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vld $vr8, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[dstStride] \n\t" ++ "vld $vr9, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[dstStride] \n\t" ++ "vld $vr10, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[dstStride] \n\t" ++ "vld $vr11, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[dstStride] \n\t" ++ "vld $vr12, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[dstStride] \n\t" ++ "vld $vr13, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[dstStride] \n\t" ++ "vld $vr14, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[dstStride] \n\t" ++ "vld $vr15, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[dstStride] \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vst $vr0, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr1, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr2, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr3, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr4, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr5, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr6, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr7, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ ++ /* h8~h15 */ ++ "vld $vr0, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr1, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr2, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr3, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr4, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr5, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr6, %[src], 0 \n\t" ++ "add.d %[src], %[src], %[srcStride] \n\t" ++ "vld $vr7, %[src], 0 \n\t" ++ ++ "vld $vr8, %[half], 0x80 \n\t" ++ "vld $vr9, %[half], 0x90 \n\t" ++ "vld $vr10, %[half], 0xa0 \n\t" ++ "vld $vr11, %[half], 0xb0 \n\t" ++ "vld $vr12, %[half], 0xc0 \n\t" ++ "vld $vr13, %[half], 0xd0 \n\t" ++ "vld $vr14, %[half], 0xe0 \n\t" ++ "vld $vr15, %[half], 0xf0 \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vld $vr8, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[dstStride] \n\t" ++ "vld $vr9, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[dstStride] \n\t" ++ "vld $vr10, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[dstStride] \n\t" ++ "vld $vr11, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[dstStride] \n\t" ++ "vld $vr12, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[dstStride] \n\t" ++ "vld $vr13, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[dstStride] \n\t" ++ "vld $vr14, %[tmp], 0 \n\t" ++ "add.d %[tmp], %[tmp], %[dstStride] \n\t" ++ "vld $vr15, %[tmp], 0 \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vst $vr0, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr1, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr2, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr3, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr4, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr5, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr6, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr7, %[dst], 0 \n\t" ++ : [dst]"+&r"(dst), [tmp]"+&r"(tmp), [half]"+&r"(half), [src]"+&r"(src) ++ : [dstStride]"r"(dstStride), [srcStride]"r"(srcStride) ++ : "memory" ++ ); ++} ++ ++#define QPEL8_H_LOWPASS(out_v) \ ++ src00 = LASX_LD(src - 2); \ ++ src += srcStride; \ ++ src10 = LASX_LD(src - 2); \ ++ src += srcStride; \ ++ src00 = __lasx_xvpermi_q(src00, src10, 0x02); \ ++ src01 = __lasx_xvshuf_b(src00, src00, (__m256i)mask1); \ ++ src02 = __lasx_xvshuf_b(src00, src00, (__m256i)mask2); \ ++ src03 = __lasx_xvshuf_b(src00, src00, (__m256i)mask3); \ ++ src04 = __lasx_xvshuf_b(src00, src00, (__m256i)mask4); \ ++ src05 = __lasx_xvshuf_b(src00, src00, (__m256i)mask5); \ ++ LASX_ADDWL_H_BU_2_128SV(src02, src03, src01, src04, src02, src01); \ ++ LASX_ADDWL_H_BU_128SV(src00, src05, src00); \ ++ src02 = __lasx_xvmul_h(src02, h_20); \ ++ src01 = __lasx_xvmul_h(src01, h_5); \ ++ src02 = __lasx_xvssub_h(src02, src01); \ ++ src02 = __lasx_xvsadd_h(src02, src00); \ ++ src02 = __lasx_xvsadd_h(src02, h_16); \ ++ out_v = __lasx_xvssrani_bu_h(src02, src02, 5); \ ++ ++static av_always_inline void ++put_h264_qpel8_h_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, ++ int srcStride) ++{ ++ int dstStride_2x = dstStride << 1; ++ __m256i src00, src01, src02, src03, src04, src05, src10; ++ __m256i out0, out1, out2, out3; ++ __m256i zero = {0}; ++ __m256i h_20 = {20}; ++ __m256i h_5 = {5}; ++ __m256i h_16 = {16}; ++ __m256i mask1 = {0x0807060504030201, 0x0, 0x0807060504030201, 0x0}; ++ __m256i mask2 = {0x0908070605040302, 0x0, 0x0908070605040302, 0x0}; ++ __m256i mask3 = {0x0a09080706050403, 0x0, 0x0a09080706050403, 0x0}; ++ __m256i mask4 = {0x0b0a090807060504, 0x0, 0x0b0a090807060504, 0x0}; ++ __m256i mask5 = {0x0c0b0a0908070605, 0x0, 0x0c0b0a0908070605, 0x0}; ++ ++ zero = __lasx_xvreplve0_h(zero); ++ h_20 = __lasx_xvreplve0_h(h_20); ++ h_5 = __lasx_xvreplve0_h(h_5); ++ h_16 = __lasx_xvreplve0_h(h_16); ++ ++ QPEL8_H_LOWPASS(out0) ++ QPEL8_H_LOWPASS(out1) ++ QPEL8_H_LOWPASS(out2) ++ QPEL8_H_LOWPASS(out3) ++ LASX_ST_D_2(out0, 0, 2, dst, dstStride); ++ dst += dstStride_2x; ++ LASX_ST_D_2(out1, 0, 2, dst, dstStride); ++ dst += dstStride_2x; ++ LASX_ST_D_2(out2, 0, 2, dst, dstStride); ++ dst += dstStride_2x; ++ LASX_ST_D_2(out3, 0, 2, dst, dstStride); ++} ++ ++#define QPEL8_V_LOWPASS(src0, src1, src2, src3, src4, src5, src6, \ ++ tmp0, tmp1, tmp2, tmp3, tmp4, tmp5) \ ++{ \ ++ tmp0 = __lasx_xvpermi_q(src0, src1, 0x02); \ ++ tmp1 = __lasx_xvpermi_q(src1, src2, 0x02); \ ++ tmp2 = __lasx_xvpermi_q(src2, src3, 0x02); \ ++ tmp3 = __lasx_xvpermi_q(src3, src4, 0x02); \ ++ tmp4 = __lasx_xvpermi_q(src4, src5, 0x02); \ ++ tmp5 = __lasx_xvpermi_q(src5, src6, 0x02); \ ++ LASX_ADDWL_H_BU_2_128SV(tmp2, tmp3, tmp1, tmp4, tmp2, tmp1); \ ++ LASX_ADDWL_H_BU_128SV(tmp0, tmp5, tmp0); \ ++ tmp2 = __lasx_xvmul_h(tmp2, h_20); \ ++ tmp1 = __lasx_xvmul_h(tmp1, h_5); \ ++ tmp2 = __lasx_xvssub_h(tmp2, tmp1); \ ++ tmp2 = __lasx_xvsadd_h(tmp2, tmp0); \ ++ tmp2 = __lasx_xvsadd_h(tmp2, h_16); \ ++ tmp2 = __lasx_xvssrani_bu_h(tmp2, tmp2, 5); \ ++} ++ ++static av_always_inline void ++put_h264_qpel8_v_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, ++ int srcStride) ++{ ++ int srcStride_2x = srcStride << 1; ++ __m256i src00, src01, src02, src03, src04, src05, src06; ++ __m256i src07, src08, src09, src10, src11, src12; ++ __m256i tmp00, tmp01, tmp02, tmp03, tmp04, tmp05; ++ __m256i zero = {0}; ++ __m256i h_20 = {20}; ++ __m256i h_5 = {5}; ++ __m256i h_16 = {16}; ++ ++ zero = __lasx_xvreplve0_h(zero); ++ h_20 = __lasx_xvreplve0_h(h_20); ++ h_5 = __lasx_xvreplve0_h(h_5); ++ h_16 = __lasx_xvreplve0_h(h_16); ++ ++ LASX_LD_2(src - srcStride_2x, srcStride, src00, src01); ++ LASX_LD_8(src, srcStride, src02, src03, src04, src05, ++ src06, src07, src08, src09); ++ src += srcStride << 3; ++ LASX_LD_2(src, srcStride, src10, src11); ++ src += srcStride_2x; ++ src12 = LASX_LD(src); ++ ++ QPEL8_V_LOWPASS(src00, src01, src02, src03, src04, src05, src06, ++ tmp00, tmp01, tmp02, tmp03, tmp04, tmp05); ++ LASX_ST_D_2(tmp02, 0, 2, dst, dstStride); ++ dst += dstStride << 1; ++ QPEL8_V_LOWPASS(src02, src03, src04, src05, src06, src07, src08, ++ tmp00, tmp01, tmp02, tmp03, tmp04, tmp05); ++ LASX_ST_D_2(tmp02, 0, 2, dst, dstStride); ++ dst += dstStride << 1; ++ QPEL8_V_LOWPASS(src04, src05, src06, src07, src08, src09, src10, ++ tmp00, tmp01, tmp02, tmp03, tmp04, tmp05); ++ LASX_ST_D_2(tmp02, 0, 2, dst, dstStride); ++ dst += dstStride << 1; ++ QPEL8_V_LOWPASS(src06, src07, src08, src09, src10, src11, src12, ++ tmp00, tmp01, tmp02, tmp03, tmp04, tmp05); ++ LASX_ST_D_2(tmp02, 0, 2, dst, dstStride); ++} ++ ++static av_always_inline void ++avg_h264_qpel8_v_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, ++ int srcStride) ++{ ++ int srcStride_2x = srcStride << 1; ++ __m256i src00, src01, src02, src03, src04, src05, src06; ++ __m256i src07, src08, src09, src10, src11, src12; ++ __m256i tmp00, tmp01, tmp02, tmp03, tmp04, tmp05, tmp06, tmp07, tmp08, tmp09; ++ __m256i zero = {0}; ++ __m256i h_20 = {20}; ++ __m256i h_5 = {5}; ++ __m256i h_16 = {16}; ++ ++ zero = __lasx_xvreplve0_h(zero); ++ h_20 = __lasx_xvreplve0_h(h_20); ++ h_5 = __lasx_xvreplve0_h(h_5); ++ h_16 = __lasx_xvreplve0_h(h_16); ++ ++ LASX_LD_2(src - srcStride_2x, srcStride, src00, src01); ++ LASX_LD_8(src, srcStride, src02, src03, src04, src05, ++ src06, src07, src08, src09); ++ src += srcStride << 3; ++ LASX_LD_2(src, srcStride, src10, src11); ++ src += srcStride_2x; ++ src12 = LASX_LD(src); ++ ++ LASX_LD_8(dst, dstStride, tmp06, tmp07, tmp02, tmp03, ++ tmp04, tmp05, tmp00, tmp01); ++ tmp06 = __lasx_xvpermi_q(tmp06, tmp07, 0x02); ++ tmp07 = __lasx_xvpermi_q(tmp02, tmp03, 0x02); ++ tmp08 = __lasx_xvpermi_q(tmp04, tmp05, 0x02); ++ tmp09 = __lasx_xvpermi_q(tmp00, tmp01, 0x02); ++ ++ QPEL8_V_LOWPASS(src00, src01, src02, src03, src04, src05, src06, ++ tmp00, tmp01, tmp02, tmp03, tmp04, tmp05); ++ tmp06 = __lasx_xvavgr_bu(tmp06, tmp02); ++ LASX_ST_D_2(tmp06, 0, 2, dst, dstStride); ++ dst += dstStride << 1; ++ QPEL8_V_LOWPASS(src02, src03, src04, src05, src06, src07, src08, ++ tmp00, tmp01, tmp02, tmp03, tmp04, tmp05); ++ tmp07 = __lasx_xvavgr_bu(tmp07, tmp02); ++ LASX_ST_D_2(tmp07, 0, 2, dst, dstStride); ++ dst += dstStride << 1; ++ QPEL8_V_LOWPASS(src04, src05, src06, src07, src08, src09, src10, ++ tmp00, tmp01, tmp02, tmp03, tmp04, tmp05); ++ tmp08 = __lasx_xvavgr_bu(tmp08, tmp02); ++ LASX_ST_D_2(tmp08, 0, 2, dst, dstStride); ++ dst += dstStride << 1; ++ QPEL8_V_LOWPASS(src06, src07, src08, src09, src10, src11, src12, ++ tmp00, tmp01, tmp02, tmp03, tmp04, tmp05); ++ tmp09 = __lasx_xvavgr_bu(tmp09, tmp02); ++ LASX_ST_D_2(tmp09, 0, 2, dst, dstStride); ++} ++ ++#define QPEL8_HV_LOWPASS_H(tmp) \ ++{ \ ++ src00 = LASX_LD(src - 2); \ ++ src += srcStride; \ ++ src10 = LASX_LD(src - 2); \ ++ src += srcStride; \ ++ src00 = __lasx_xvpermi_q(src00, src10, 0x02); \ ++ src01 = __lasx_xvshuf_b(src00, src00, (__m256i)mask1); \ ++ src02 = __lasx_xvshuf_b(src00, src00, (__m256i)mask2); \ ++ src03 = __lasx_xvshuf_b(src00, src00, (__m256i)mask3); \ ++ src04 = __lasx_xvshuf_b(src00, src00, (__m256i)mask4); \ ++ src05 = __lasx_xvshuf_b(src00, src00, (__m256i)mask5); \ ++ LASX_ADDWL_H_BU_2_128SV(src02, src03, src01, src04, src02, src01); \ ++ LASX_ADDWL_H_BU_128SV(src00, src05, src00); \ ++ src02 = __lasx_xvmul_h(src02, h_20); \ ++ src01 = __lasx_xvmul_h(src01, h_5); \ ++ src02 = __lasx_xvssub_h(src02, src01); \ ++ tmp = __lasx_xvsadd_h(src02, src00); \ ++} ++ ++#define QPEL8_HV_LOWPASS_V(src0, src1, src2, src3, \ ++ src4, src5, temp0, temp1, \ ++ temp2, temp3, temp4, temp5, \ ++ out) \ ++{ \ ++ LASX_ADDWL_W_H_2_128SV(src2, src3, src1, src4, temp0, temp2); \ ++ LASX_ADDWH_W_H_2_128SV(src2, src3, src1, src4, temp1, temp3); \ ++ LASX_ADDWL_W_H_128SV(src0, src5, temp4); \ ++ LASX_ADDWH_W_H_128SV(src0, src5, temp5); \ ++ temp0 = __lasx_xvmul_w(temp0, w_20); \ ++ temp1 = __lasx_xvmul_w(temp1, w_20); \ ++ temp2 = __lasx_xvmul_w(temp2, w_5); \ ++ temp3 = __lasx_xvmul_w(temp3, w_5); \ ++ temp0 = __lasx_xvssub_w(temp0, temp2); \ ++ temp1 = __lasx_xvssub_w(temp1, temp3); \ ++ temp0 = __lasx_xvsadd_w(temp0, temp4); \ ++ temp1 = __lasx_xvsadd_w(temp1, temp5); \ ++ temp0 = __lasx_xvsadd_w(temp0, w_512); \ ++ temp1 = __lasx_xvsadd_w(temp1, w_512); \ ++ temp0 = __lasx_xvssrani_hu_w(temp0, temp0, 10); \ ++ temp1 = __lasx_xvssrani_hu_w(temp1, temp1, 10); \ ++ temp0 = __lasx_xvpackev_d(temp1, temp0); \ ++ out = __lasx_xvssrani_bu_h(temp0, temp0, 0); \ ++} ++ ++static av_always_inline void ++put_h264_qpel8_hv_lowpass_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dstStride, ptrdiff_t srcStride) ++{ ++ __m256i src00, src01, src02, src03, src04, src05, src10; ++ __m256i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6; ++ __m256i tmp7, tmp8, tmp9, tmp10, tmp11, tmp12; ++ __m256i h_20 = {20}; ++ __m256i h_5 = {5}; ++ __m256i w_20 = {20}; ++ __m256i w_5 = {5}; ++ __m256i w_512 = {512}; ++ __m256i mask1 = {0x0807060504030201, 0x0, 0x0807060504030201, 0x0}; ++ __m256i mask2 = {0x0908070605040302, 0x0, 0x0908070605040302, 0x0}; ++ __m256i mask3 = {0x0a09080706050403, 0x0, 0x0a09080706050403, 0x0}; ++ __m256i mask4 = {0x0b0a090807060504, 0x0, 0x0b0a090807060504, 0x0}; ++ __m256i mask5 = {0x0c0b0a0908070605, 0x0, 0x0c0b0a0908070605, 0x0}; ++ ++ h_20 = __lasx_xvreplve0_h(w_20); ++ h_5 = __lasx_xvreplve0_h(w_5); ++ w_20 = __lasx_xvreplve0_w(w_20); ++ w_5 = __lasx_xvreplve0_w(w_5); ++ w_512 = __lasx_xvreplve0_w(w_512); ++ ++ src -= srcStride << 1; ++ QPEL8_HV_LOWPASS_H(tmp0) ++ QPEL8_HV_LOWPASS_H(tmp2) ++ QPEL8_HV_LOWPASS_H(tmp4) ++ QPEL8_HV_LOWPASS_H(tmp6) ++ QPEL8_HV_LOWPASS_H(tmp8) ++ QPEL8_HV_LOWPASS_H(tmp10) ++ QPEL8_HV_LOWPASS_H(tmp12) ++ tmp11 = __lasx_xvpermi_q(tmp12, tmp10, 0x21); ++ tmp9 = __lasx_xvpermi_q(tmp10, tmp8, 0x21); ++ tmp7 = __lasx_xvpermi_q(tmp8, tmp6, 0x21); ++ tmp5 = __lasx_xvpermi_q(tmp6, tmp4, 0x21); ++ tmp3 = __lasx_xvpermi_q(tmp4, tmp2, 0x21); ++ tmp1 = __lasx_xvpermi_q(tmp2, tmp0, 0x21); ++ ++ QPEL8_HV_LOWPASS_V(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, src00, src01, ++ src02, src03, src04, src05, tmp0) ++ QPEL8_HV_LOWPASS_V(tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, src00, src01, ++ src02, src03, src04, src05, tmp2) ++ QPEL8_HV_LOWPASS_V(tmp4, tmp5, tmp6, tmp7, tmp8, tmp9, src00, src01, ++ src02, src03, src04, src05, tmp4) ++ QPEL8_HV_LOWPASS_V(tmp6, tmp7, tmp8, tmp9, tmp10, tmp11, src00, src01, ++ src02, src03, src04, src05, tmp6) ++ LASX_ST_D_2(tmp0, 0, 2, dst, dstStride); ++ dst += dstStride << 1; ++ LASX_ST_D_2(tmp2, 0, 2, dst, dstStride); ++ dst += dstStride << 1; ++ LASX_ST_D_2(tmp4, 0, 2, dst, dstStride); ++ dst += dstStride << 1; ++ LASX_ST_D_2(tmp6, 0, 2, dst, dstStride); ++} ++ ++static av_always_inline void ++avg_h264_qpel8_h_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, ++ int srcStride) ++{ ++ int dstStride_2x = dstStride << 1; ++ int dstStride_4x = dstStride << 2; ++ int dstStride_6x = dstStride_2x + dstStride_4x; ++ __m256i src00, src01, src02, src03, src04, src05, src10; ++ __m256i dst00, dst01, dst0, dst1, dst2, dst3; ++ __m256i out0, out1, out2, out3; ++ __m256i zero = {0}; ++ __m256i h_20 = {20}; ++ __m256i h_5 = {5}; ++ __m256i h_16 = {16}; ++ __m256i mask1 = {0x0807060504030201, 0x0, 0x0807060504030201, 0x0}; ++ __m256i mask2 = {0x0908070605040302, 0x0, 0x0908070605040302, 0x0}; ++ __m256i mask3 = {0x0a09080706050403, 0x0, 0x0a09080706050403, 0x0}; ++ __m256i mask4 = {0x0b0a090807060504, 0x0, 0x0b0a090807060504, 0x0}; ++ __m256i mask5 = {0x0c0b0a0908070605, 0x0, 0x0c0b0a0908070605, 0x0}; ++ ++ zero = __lasx_xvreplve0_h(zero); ++ h_20 = __lasx_xvreplve0_h(h_20); ++ h_5 = __lasx_xvreplve0_h(h_5); ++ h_16 = __lasx_xvreplve0_h(h_16); ++ ++ QPEL8_H_LOWPASS(out0) ++ QPEL8_H_LOWPASS(out1) ++ QPEL8_H_LOWPASS(out2) ++ QPEL8_H_LOWPASS(out3) ++ LASX_LD_2(dst, dstStride, src00, src01); ++ LASX_LD_2(dst + dstStride_2x, dstStride, src02, src03); ++ LASX_LD_2(dst + dstStride_4x, dstStride, src04, src05); ++ LASX_LD_2(dst + dstStride_6x, dstStride, dst00, dst01); ++ dst0 = __lasx_xvpermi_q(src00, src01, 0x02); ++ dst1 = __lasx_xvpermi_q(src02, src03, 0x02); ++ dst2 = __lasx_xvpermi_q(src04, src05, 0x02); ++ dst3 = __lasx_xvpermi_q(dst00, dst01, 0x02); ++ dst0 = __lasx_xvavgr_bu(dst0, out0); ++ dst1 = __lasx_xvavgr_bu(dst1, out1); ++ dst2 = __lasx_xvavgr_bu(dst2, out2); ++ dst3 = __lasx_xvavgr_bu(dst3, out3); ++ LASX_ST_D_2(dst0, 0, 2, dst, dstStride); ++ LASX_ST_D_2(dst1, 0, 2, dst + dstStride_2x, dstStride); ++ LASX_ST_D_2(dst2, 0, 2, dst + dstStride_4x, dstStride); ++ LASX_ST_D_2(dst3, 0, 2, dst + dstStride_6x, dstStride); ++} ++ ++static av_always_inline void ++avg_h264_qpel8_hv_lowpass_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dstStride, ptrdiff_t srcStride) ++{ ++ __m256i src00, src01, src02, src03, src04, src05, src10; ++ __m256i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6; ++ __m256i tmp7, tmp8, tmp9, tmp10, tmp11, tmp12; ++ __m256i h_20 = {20}; ++ __m256i h_5 = {5}; ++ __m256i w_20 = {20}; ++ __m256i w_5 = {5}; ++ __m256i w_512 = {512}; ++ __m256i mask1 = {0x0807060504030201, 0x0, 0x0807060504030201, 0x0}; ++ __m256i mask2 = {0x0908070605040302, 0x0, 0x0908070605040302, 0x0}; ++ __m256i mask3 = {0x0a09080706050403, 0x0, 0x0a09080706050403, 0x0}; ++ __m256i mask4 = {0x0b0a090807060504, 0x0, 0x0b0a090807060504, 0x0}; ++ __m256i mask5 = {0x0c0b0a0908070605, 0x0, 0x0c0b0a0908070605, 0x0}; ++ ++ h_20 = __lasx_xvreplve0_h(w_20); ++ h_5 = __lasx_xvreplve0_h(w_5); ++ w_20 = __lasx_xvreplve0_w(w_20); ++ w_5 = __lasx_xvreplve0_w(w_5); ++ w_512 = __lasx_xvreplve0_w(w_512); ++ ++ src -= srcStride << 1; ++ QPEL8_HV_LOWPASS_H(tmp0) ++ QPEL8_HV_LOWPASS_H(tmp2) ++ QPEL8_HV_LOWPASS_H(tmp4) ++ QPEL8_HV_LOWPASS_H(tmp6) ++ QPEL8_HV_LOWPASS_H(tmp8) ++ QPEL8_HV_LOWPASS_H(tmp10) ++ QPEL8_HV_LOWPASS_H(tmp12) ++ tmp11 = __lasx_xvpermi_q(tmp12, tmp10, 0x21); ++ tmp9 = __lasx_xvpermi_q(tmp10, tmp8, 0x21); ++ tmp7 = __lasx_xvpermi_q(tmp8, tmp6, 0x21); ++ tmp5 = __lasx_xvpermi_q(tmp6, tmp4, 0x21); ++ tmp3 = __lasx_xvpermi_q(tmp4, tmp2, 0x21); ++ tmp1 = __lasx_xvpermi_q(tmp2, tmp0, 0x21); ++ ++ QPEL8_HV_LOWPASS_V(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, src00, src01, ++ src02, src03, src04, src05, tmp0) ++ QPEL8_HV_LOWPASS_V(tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, src00, src01, ++ src02, src03, src04, src05, tmp2) ++ QPEL8_HV_LOWPASS_V(tmp4, tmp5, tmp6, tmp7, tmp8, tmp9, src00, src01, ++ src02, src03, src04, src05, tmp4) ++ QPEL8_HV_LOWPASS_V(tmp6, tmp7, tmp8, tmp9, tmp10, tmp11, src00, src01, ++ src02, src03, src04, src05, tmp6) ++ ++ LASX_LD_8(dst, dstStride, src00, src01, src02, src03, src04, src05, tmp8, tmp9); ++ tmp1 = __lasx_xvpermi_q(src00, src01, 0x02); ++ tmp3 = __lasx_xvpermi_q(src02, src03, 0x02); ++ tmp5 = __lasx_xvpermi_q(src04, src05, 0x02); ++ tmp7 = __lasx_xvpermi_q(tmp8, tmp9, 0x02); ++ tmp0 = __lasx_xvavgr_bu(tmp0, tmp1); ++ tmp2 = __lasx_xvavgr_bu(tmp2, tmp3); ++ tmp4 = __lasx_xvavgr_bu(tmp4, tmp5); ++ tmp6 = __lasx_xvavgr_bu(tmp6, tmp7); ++ LASX_ST_D_2(tmp0, 0, 2, dst, dstStride); ++ dst += dstStride << 1; ++ LASX_ST_D_2(tmp2, 0, 2, dst, dstStride); ++ dst += dstStride << 1; ++ LASX_ST_D_2(tmp4, 0, 2, dst, dstStride); ++ dst += dstStride << 1; ++ LASX_ST_D_2(tmp6, 0, 2, dst, dstStride); ++} ++ ++static av_always_inline void ++put_h264_qpel16_h_lowpass_lasx(uint8_t *dst, const uint8_t *src, ++ int dstStride, int srcStride) ++{ ++ put_h264_qpel8_h_lowpass_lasx(dst, src, dstStride, srcStride); ++ put_h264_qpel8_h_lowpass_lasx(dst+8, src+8, dstStride, srcStride); ++ src += srcStride << 3; ++ dst += dstStride << 3; ++ put_h264_qpel8_h_lowpass_lasx(dst, src, dstStride, srcStride); ++ put_h264_qpel8_h_lowpass_lasx(dst+8, src+8, dstStride, srcStride); ++} ++ ++static av_always_inline void ++avg_h264_qpel16_h_lowpass_lasx(uint8_t *dst, const uint8_t *src, ++ int dstStride, int srcStride) ++{ ++ avg_h264_qpel8_h_lowpass_lasx(dst, src, dstStride, srcStride); ++ avg_h264_qpel8_h_lowpass_lasx(dst+8, src+8, dstStride, srcStride); ++ src += srcStride << 3; ++ dst += dstStride << 3; ++ avg_h264_qpel8_h_lowpass_lasx(dst, src, dstStride, srcStride); ++ avg_h264_qpel8_h_lowpass_lasx(dst+8, src+8, dstStride, srcStride); ++} ++ ++static void put_h264_qpel16_v_lowpass_lasx(uint8_t *dst, const uint8_t *src, ++ int dstStride, int srcStride) ++{ ++ put_h264_qpel8_v_lowpass_lasx(dst, src, dstStride, srcStride); ++ put_h264_qpel8_v_lowpass_lasx(dst+8, src+8, dstStride, srcStride); ++ src += 8*srcStride; ++ dst += 8*dstStride; ++ put_h264_qpel8_v_lowpass_lasx(dst, src, dstStride, srcStride); ++ put_h264_qpel8_v_lowpass_lasx(dst+8, src+8, dstStride, srcStride); ++} ++ ++static void avg_h264_qpel16_v_lowpass_lasx(uint8_t *dst, const uint8_t *src, ++ int dstStride, int srcStride) ++{ ++ avg_h264_qpel8_v_lowpass_lasx(dst, src, dstStride, srcStride); ++ avg_h264_qpel8_v_lowpass_lasx(dst+8, src+8, dstStride, srcStride); ++ src += 8*srcStride; ++ dst += 8*dstStride; ++ avg_h264_qpel8_v_lowpass_lasx(dst, src, dstStride, srcStride); ++ avg_h264_qpel8_v_lowpass_lasx(dst+8, src+8, dstStride, srcStride); ++} ++ ++static void put_h264_qpel16_hv_lowpass_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dstStride, ptrdiff_t srcStride) ++{ ++ put_h264_qpel8_hv_lowpass_lasx(dst, src, dstStride, srcStride); ++ put_h264_qpel8_hv_lowpass_lasx(dst + 8, src + 8, dstStride, srcStride); ++ src += srcStride << 3; ++ dst += dstStride << 3; ++ put_h264_qpel8_hv_lowpass_lasx(dst, src, dstStride, srcStride); ++ put_h264_qpel8_hv_lowpass_lasx(dst + 8, src + 8, dstStride, srcStride); ++} ++ ++static void avg_h264_qpel16_hv_lowpass_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dstStride, ptrdiff_t srcStride) ++{ ++ avg_h264_qpel8_hv_lowpass_lasx(dst, src, dstStride, srcStride); ++ avg_h264_qpel8_hv_lowpass_lasx(dst + 8, src + 8, dstStride, srcStride); ++ src += srcStride << 3; ++ dst += dstStride << 3; ++ avg_h264_qpel8_hv_lowpass_lasx(dst, src, dstStride, srcStride); ++ avg_h264_qpel8_hv_lowpass_lasx(dst + 8, src + 8, dstStride, srcStride); ++} ++ ++void ff_put_h264_qpel8_mc00_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ /* In mmi optimization, it used function ff_put_pixels8_8_mmi ++ * which implemented in hpeldsp_mmi.c */ ++ put_pixels8_8_inline_asm(dst, src, stride); ++} ++ ++void ff_put_h264_qpel8_mc10_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t half[64]; ++ ++ put_h264_qpel8_h_lowpass_lasx(half, src, 8, stride); ++ /* in qpel8, the stride of half and height of block is 8 */ ++ put_pixels8_l2_8_lsx(dst, src, half, stride, stride); ++} ++ ++void ff_put_h264_qpel8_mc20_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ put_h264_qpel8_h_lowpass_lasx(dst, src, stride, stride); ++} ++ ++void ff_put_h264_qpel8_mc30_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t half[64]; ++ ++ put_h264_qpel8_h_lowpass_lasx(half, src, 8, stride); ++ put_pixels8_l2_8_lsx(dst, src+1, half, stride, stride); ++} ++ ++void ff_put_h264_qpel8_mc01_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t half[64]; ++ ++ put_h264_qpel8_v_lowpass_lasx(half, src, 8, stride); ++ put_pixels8_l2_8_lsx(dst, src, half, stride, stride); ++} ++ ++void ff_put_h264_qpel8_mc11_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t halfH[64]; ++ uint8_t halfV[64]; ++ ++ put_h264_qpel8_h_lowpass_lasx(halfH, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfV, src, 8, stride); ++ put_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); ++} ++ ++void ff_put_h264_qpel8_mc21_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[128]; ++ uint8_t *const halfH = temp; ++ uint8_t *const halfHV = temp + 64; ++ ++ put_h264_qpel8_h_lowpass_lasx(halfH, src, 8, stride); ++ put_h264_qpel8_hv_lowpass_lasx(halfHV, src, 8, stride); ++ put_pixels8_l2_8_lsx(dst, halfH, halfHV, stride, 8); ++} ++ ++void ff_put_h264_qpel8_mc31_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t halfH[64]; ++ uint8_t halfV[64]; ++ ++ put_h264_qpel8_h_lowpass_lasx(halfH, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfV, src + 1, 8, stride); ++ put_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); ++} ++ ++void ff_put_h264_qpel8_mc02_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ put_h264_qpel8_v_lowpass_lasx(dst, src, stride, stride); ++} ++ ++void ff_put_h264_qpel8_mc12_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[128]; ++ uint8_t *const halfHV = temp; ++ uint8_t *const halfH = temp + 64; ++ ++ put_h264_qpel8_hv_lowpass_lasx(halfHV, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfH, src, 8, stride); ++ put_pixels8_l2_8_lsx(dst, halfH, halfHV, stride, 8); ++} ++ ++void ff_put_h264_qpel8_mc22_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ put_h264_qpel8_hv_lowpass_lasx(dst, src, stride, stride); ++} ++ ++void ff_put_h264_qpel8_mc32_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[128]; ++ uint8_t *const halfHV = temp; ++ uint8_t *const halfH = temp + 64; ++ ++ put_h264_qpel8_hv_lowpass_lasx(halfHV, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfH, src + 1, 8, stride); ++ put_pixels8_l2_8_lsx(dst, halfH, halfHV, stride, 8); ++} ++ ++void ff_put_h264_qpel8_mc03_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t half[64]; ++ ++ put_h264_qpel8_v_lowpass_lasx(half, src, 8, stride); ++ put_pixels8_l2_8_lsx(dst, src + stride, half, stride, stride); ++} ++ ++void ff_put_h264_qpel8_mc13_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t halfH[64]; ++ uint8_t halfV[64]; ++ ++ put_h264_qpel8_h_lowpass_lasx(halfH, src + stride, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfV, src, 8, stride); ++ put_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); ++} ++ ++void ff_put_h264_qpel8_mc23_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[128]; ++ uint8_t *const halfH = temp; ++ uint8_t *const halfHV = temp + 64; ++ ++ put_h264_qpel8_h_lowpass_lasx(halfH, src + stride, 8, stride); ++ put_h264_qpel8_hv_lowpass_lasx(halfHV, src, 8, stride); ++ put_pixels8_l2_8_lsx(dst, halfH, halfHV, stride, 8); ++} ++ ++void ff_put_h264_qpel8_mc33_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t halfH[64]; ++ uint8_t halfV[64]; ++ ++ put_h264_qpel8_h_lowpass_lasx(halfH, src + stride, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfV, src + 1, 8, stride); ++ put_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); ++} ++ ++void ff_avg_h264_qpel8_mc00_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ /* In mmi optimization, it used function ff_avg_pixels8_8_mmi ++ * which implemented in hpeldsp_mmi.c */ ++ avg_pixels8_8_lsx(dst, src, stride); ++} ++ ++void ff_avg_h264_qpel8_mc10_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t half[64]; ++ ++ put_h264_qpel8_h_lowpass_lasx(half, src, 8, stride); ++ avg_pixels8_l2_8_lsx(dst, src, half, stride, stride); ++} ++ ++void ff_avg_h264_qpel8_mc20_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ avg_h264_qpel8_h_lowpass_lasx(dst, src, stride, stride); ++} ++ ++void ff_avg_h264_qpel8_mc30_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t half[64]; ++ ++ put_h264_qpel8_h_lowpass_lasx(half, src, 8, stride); ++ avg_pixels8_l2_8_lsx(dst, src+1, half, stride, stride); ++} ++ ++void ff_avg_h264_qpel8_mc11_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t halfH[64]; ++ uint8_t halfV[64]; ++ ++ put_h264_qpel8_h_lowpass_lasx(halfH, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfV, src, 8, stride); ++ avg_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); ++} ++ ++void ff_avg_h264_qpel8_mc21_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[128]; ++ uint8_t *const halfH = temp; ++ uint8_t *const halfHV = temp + 64; ++ ++ put_h264_qpel8_h_lowpass_lasx(halfH, src, 8, stride); ++ put_h264_qpel8_hv_lowpass_lasx(halfHV, src, 8, stride); ++ avg_pixels8_l2_8_lsx(dst, halfH, halfHV, stride, 8); ++} ++ ++void ff_avg_h264_qpel8_mc31_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t halfH[64]; ++ uint8_t halfV[64]; ++ ++ put_h264_qpel8_h_lowpass_lasx(halfH, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfV, src + 1, 8, stride); ++ avg_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); ++} ++ ++void ff_avg_h264_qpel8_mc02_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ avg_h264_qpel8_v_lowpass_lasx(dst, src, stride, stride); ++} ++ ++void ff_avg_h264_qpel8_mc12_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[128]; ++ uint8_t *const halfHV = temp; ++ uint8_t *const halfH = temp + 64; ++ ++ put_h264_qpel8_hv_lowpass_lasx(halfHV, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfH, src, 8, stride); ++ avg_pixels8_l2_8_lsx(dst, halfH, halfHV, stride, 8); ++} ++ ++void ff_avg_h264_qpel8_mc22_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ avg_h264_qpel8_hv_lowpass_lasx(dst, src, stride, stride); ++} ++ ++void ff_avg_h264_qpel8_mc32_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[128]; ++ uint8_t *const halfHV = temp; ++ uint8_t *const halfH = temp + 64; ++ ++ put_h264_qpel8_hv_lowpass_lasx(halfHV, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfH, src + 1, 8, stride); ++ avg_pixels8_l2_8_lsx(dst, halfH, halfHV, stride, 8); ++} ++ ++void ff_avg_h264_qpel8_mc13_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t halfH[64]; ++ uint8_t halfV[64]; ++ ++ put_h264_qpel8_h_lowpass_lasx(halfH, src + stride, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfV, src, 8, stride); ++ avg_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); ++} ++ ++void ff_avg_h264_qpel8_mc23_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[128]; ++ uint8_t *const halfH = temp; ++ uint8_t *const halfHV = temp + 64; ++ ++ put_h264_qpel8_h_lowpass_lasx(halfH, src + stride, 8, stride); ++ put_h264_qpel8_hv_lowpass_lasx(halfHV, src, 8, stride); ++ avg_pixels8_l2_8_lsx(dst, halfH, halfHV, stride, 8); ++} ++ ++void ff_avg_h264_qpel8_mc33_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t halfH[64]; ++ uint8_t halfV[64]; ++ ++ put_h264_qpel8_h_lowpass_lasx(halfH, src + stride, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfV, src + 1, 8, stride); ++ avg_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); ++} ++ ++void ff_put_h264_qpel16_mc00_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ /* In mmi optimization, it used function ff_put_pixels16_8_mmi ++ * which implemented in hpeldsp_mmi.c */ ++ put_pixels16_8_lsx(dst, src, stride); ++} ++ ++void ff_put_h264_qpel16_mc10_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t half[256]; ++ ++ put_h264_qpel16_h_lowpass_lasx(half, src, 16, stride); ++ put_pixels16_l2_8_lsx(dst, src, half, stride, stride); ++} ++ ++void ff_put_h264_qpel16_mc20_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ put_h264_qpel16_h_lowpass_lasx(dst, src, stride, stride); ++} ++ ++void ff_put_h264_qpel16_mc30_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t half[256]; ++ ++ put_h264_qpel16_h_lowpass_lasx(half, src, 16, stride); ++ put_pixels16_l2_8_lsx(dst, src+1, half, stride, stride); ++} ++ ++void ff_put_h264_qpel16_mc01_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t half[256]; ++ ++ put_h264_qpel16_v_lowpass_lasx(half, src, 16, stride); ++ put_pixels16_l2_8_lsx(dst, src, half, stride, stride); ++} ++ ++void ff_put_h264_qpel16_mc11_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ avc_luma_hv_qrt_16x16_lasx(src - 2, src - (stride * 2), dst, stride); ++} ++ ++void ff_put_h264_qpel16_mc21_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[512]; ++ uint8_t *const halfH = temp; ++ uint8_t *const halfHV = temp + 256; ++ ++ put_h264_qpel16_h_lowpass_lasx(halfH, src, 16, stride); ++ put_h264_qpel16_hv_lowpass_lasx(halfHV, src, 16, stride); ++ put_pixels16_l2_8_lsx(dst, halfH, halfHV, stride, 16); ++} ++ ++void ff_put_h264_qpel16_mc31_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ avc_luma_hv_qrt_16x16_lasx(src - 2, src - (stride * 2) + 1, dst, stride); ++} ++ ++void ff_put_h264_qpel16_mc02_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ put_h264_qpel16_v_lowpass_lasx(dst, src, stride, stride); ++} ++ ++void ff_put_h264_qpel16_mc12_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[512]; ++ uint8_t *const halfHV = temp; ++ uint8_t *const halfH = temp + 256; ++ ++ put_h264_qpel16_hv_lowpass_lasx(halfHV, src, 16, stride); ++ put_h264_qpel16_v_lowpass_lasx(halfH, src, 16, stride); ++ put_pixels16_l2_8_lsx(dst, halfH, halfHV, stride, 16); ++} ++ ++void ff_put_h264_qpel16_mc22_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ put_h264_qpel16_hv_lowpass_lasx(dst, src, stride, stride); ++} ++ ++void ff_put_h264_qpel16_mc32_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[512]; ++ uint8_t *const halfHV = temp; ++ uint8_t *const halfH = temp + 256; ++ ++ put_h264_qpel16_hv_lowpass_lasx(halfHV, src, 16, stride); ++ put_h264_qpel16_v_lowpass_lasx(halfH, src + 1, 16, stride); ++ put_pixels16_l2_8_lsx(dst, halfH, halfHV, stride, 16); ++} ++ ++void ff_put_h264_qpel16_mc03_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t half[256]; ++ ++ put_h264_qpel16_v_lowpass_lasx(half, src, 16, stride); ++ put_pixels16_l2_8_lsx(dst, src+stride, half, stride, stride); ++} ++ ++void ff_put_h264_qpel16_mc13_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ avc_luma_hv_qrt_16x16_lasx(src + stride - 2, src - (stride * 2), dst, ++ stride); ++} ++ ++void ff_put_h264_qpel16_mc23_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[512]; ++ uint8_t *const halfH = temp; ++ uint8_t *const halfHV = temp + 256; ++ ++ put_h264_qpel16_h_lowpass_lasx(halfH, src + stride, 16, stride); ++ put_h264_qpel16_hv_lowpass_lasx(halfHV, src, 16, stride); ++ put_pixels16_l2_8_lsx(dst, halfH, halfHV, stride, 16); ++} ++ ++void ff_put_h264_qpel16_mc33_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ avc_luma_hv_qrt_16x16_lasx(src + stride - 2, src - (stride * 2) + 1, dst, ++ stride); ++} ++ ++void ff_avg_h264_qpel16_mc00_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ /* In mmi optimization, it used function ff_avg_pixels16_8_mmi ++ * which implemented in hpeldsp_mmi.c */ ++ avg_pixels16_8_lsx(dst, src, stride); ++} ++ ++void ff_avg_h264_qpel16_mc10_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t half[256]; ++ ++ put_h264_qpel16_h_lowpass_lasx(half, src, 16, stride); ++ avg_pixels16_l2_8_lsx(dst, src, half, stride, stride); ++} ++ ++void ff_avg_h264_qpel16_mc20_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ avg_h264_qpel16_h_lowpass_lasx(dst, src, stride, stride); ++} ++ ++void ff_avg_h264_qpel16_mc30_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t half[256]; ++ ++ put_h264_qpel16_h_lowpass_lasx(half, src, 16, stride); ++ avg_pixels16_l2_8_lsx(dst, src+1, half, stride, stride); ++} ++ ++void ff_avg_h264_qpel16_mc01_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t half[256]; ++ ++ put_h264_qpel16_v_lowpass_lasx(half, src, 16, stride); ++ avg_pixels16_l2_8_lsx(dst, src, half, stride, stride); ++} ++ ++void ff_avg_h264_qpel16_mc11_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ avc_luma_hv_qrt_and_aver_dst_16x16_lasx(src - 2, ++ src - (stride * 2), ++ dst, stride); ++} ++ ++void ff_avg_h264_qpel16_mc21_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[512]; ++ uint8_t *const halfH = temp; ++ uint8_t *const halfHV = temp + 256; ++ ++ put_h264_qpel16_h_lowpass_lasx(halfH, src, 16, stride); ++ put_h264_qpel16_hv_lowpass_lasx(halfHV, src, 16, stride); ++ avg_pixels16_l2_8_lsx(dst, halfH, halfHV, stride, 16); ++} ++ ++void ff_avg_h264_qpel16_mc31_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ avc_luma_hv_qrt_and_aver_dst_16x16_lasx(src - 2, ++ src - (stride * 2) + ++ sizeof(uint8_t), ++ dst, stride); ++} ++ ++void ff_avg_h264_qpel16_mc02_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ avg_h264_qpel16_v_lowpass_lasx(dst, src, stride, stride); ++} ++ ++void ff_avg_h264_qpel16_mc12_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[512]; ++ uint8_t *const halfHV = temp; ++ uint8_t *const halfH = temp + 256; ++ ++ put_h264_qpel16_hv_lowpass_lasx(halfHV, src, 16, stride); ++ put_h264_qpel16_v_lowpass_lasx(halfH, src, 16, stride); ++ avg_pixels16_l2_8_lsx(dst, halfH, halfHV, stride, 16); ++} ++ ++void ff_avg_h264_qpel16_mc22_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ avg_h264_qpel16_hv_lowpass_lasx(dst, src, stride, stride); ++} ++ ++void ff_avg_h264_qpel16_mc32_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[512]; ++ uint8_t *const halfHV = temp; ++ uint8_t *const halfH = temp + 256; ++ ++ put_h264_qpel16_hv_lowpass_lasx(halfHV, src, 16, stride); ++ put_h264_qpel16_v_lowpass_lasx(halfH, src + 1, 16, stride); ++ avg_pixels16_l2_8_lsx(dst, halfH, halfHV, stride, 16); ++} ++ ++void ff_avg_h264_qpel16_mc03_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t half[256]; ++ ++ put_h264_qpel16_v_lowpass_lasx(half, src, 16, stride); ++ avg_pixels16_l2_8_lsx(dst, src + stride, half, stride, stride); ++} ++ ++void ff_avg_h264_qpel16_mc13_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ avc_luma_hv_qrt_and_aver_dst_16x16_lasx(src + stride - 2, ++ src - (stride * 2), ++ dst, stride); ++} ++ ++void ff_avg_h264_qpel16_mc23_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[512]; ++ uint8_t *const halfH = temp; ++ uint8_t *const halfHV = temp + 256; ++ ++ put_h264_qpel16_h_lowpass_lasx(halfH, src + stride, 16, stride); ++ put_h264_qpel16_hv_lowpass_lasx(halfHV, src, 16, stride); ++ avg_pixels16_l2_8_lsx(dst, halfH, halfHV, stride, 16); ++} ++ ++void ff_avg_h264_qpel16_mc33_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ avc_luma_hv_qrt_and_aver_dst_16x16_lasx(src + stride - 2, ++ src - (stride * 2) + ++ sizeof(uint8_t), ++ dst, stride); ++} +diff --git a/libavcodec/loongarch/h264qpel_lasx.h b/libavcodec/loongarch/h264qpel_lasx.h +new file mode 100644 +index 0000000000..32b6b50917 +--- /dev/null ++++ b/libavcodec/loongarch/h264qpel_lasx.h +@@ -0,0 +1,158 @@ ++/* ++ * Copyright (c) 2020 Loongson Technology Corporation Limited ++ * Contributed by Shiyou Yin ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef AVCODEC_LOONGARCH_H264QPEL_LASX_H ++#define AVCODEC_LOONGARCH_H264QPEL_LASX_H ++ ++#include ++#include ++#include "libavcodec/h264.h" ++ ++void ff_h264_h_lpf_luma_inter_lasx(uint8_t *src, int stride, ++ int alpha, int beta, int8_t *tc0); ++void ff_h264_v_lpf_luma_inter_lasx(uint8_t *src, int stride, ++ int alpha, int beta, int8_t *tc0); ++void ff_put_h264_qpel16_mc00_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc10_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc20_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc30_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc01_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc11_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc21_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc31_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc02_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc12_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc32_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc22_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc03_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc13_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc23_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc33_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc00_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc10_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc20_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc30_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc01_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc11_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc21_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc31_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc02_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc12_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc22_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc32_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc03_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc13_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc23_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc33_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++ ++void ff_put_h264_qpel8_mc00_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc10_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc20_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc30_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc01_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc11_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc21_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc31_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc02_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc12_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc22_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc32_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc03_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc13_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc23_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc33_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_avg_h264_qpel8_mc00_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel8_mc10_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel8_mc20_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel8_mc30_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel8_mc11_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel8_mc21_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel8_mc31_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel8_mc02_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel8_mc12_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel8_mc22_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel8_mc32_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel8_mc13_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel8_mc23_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel8_mc33_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++#endif // #ifndef AVCODEC_LOONGARCH_H264QPEL_LASX_H +diff --git a/libavcodec/loongarch/hevc_idct_lsx.c b/libavcodec/loongarch/hevc_idct_lsx.c +new file mode 100644 +index 0000000000..2d166e5790 +--- /dev/null ++++ b/libavcodec/loongarch/hevc_idct_lsx.c +@@ -0,0 +1,874 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Shiyou Yin ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/loongarch/generic_macros_lsx.h" ++#include "hevcdsp_lsx.h" ++ ++static const int16_t gt8x8_cnst[16] __attribute__ ((aligned (64))) = { ++ 64, 64, 83, 36, 89, 50, 18, 75, 64, -64, 36, -83, 75, -89, -50, -18 ++}; ++ ++static const int16_t gt16x16_cnst[64] __attribute__ ((aligned (64))) = { ++ 64, 83, 64, 36, 89, 75, 50, 18, 90, 80, 57, 25, 70, 87, 9, 43, ++ 64, 36, -64, -83, 75, -18, -89, -50, 87, 9, -80, -70, -43, 57, -25, -90, ++ 64, -36, -64, 83, 50, -89, 18, 75, 80, -70, -25, 90, -87, 9, 43, 57, ++ 64, -83, 64, -36, 18, -50, 75, -89, 70, -87, 90, -80, 9, -43, -57, 25 ++}; ++ ++static const int16_t gt32x32_cnst0[256] __attribute__ ((aligned (64))) = { ++ 90, 90, 88, 85, 82, 78, 73, 67, 61, 54, 46, 38, 31, 22, 13, 4, ++ 90, 82, 67, 46, 22, -4, -31, -54, -73, -85, -90, -88, -78, -61, -38, -13, ++ 88, 67, 31, -13, -54, -82, -90, -78, -46, -4, 38, 73, 90, 85, 61, 22, ++ 85, 46, -13, -67, -90, -73, -22, 38, 82, 88, 54, -4, -61, -90, -78, -31, ++ 82, 22, -54, -90, -61, 13, 78, 85, 31, -46, -90, -67, 4, 73, 88, 38, ++ 78, -4, -82, -73, 13, 85, 67, -22, -88, -61, 31, 90, 54, -38, -90, -46, ++ 73, -31, -90, -22, 78, 67, -38, -90, -13, 82, 61, -46, -88, -4, 85, 54, ++ 67, -54, -78, 38, 85, -22, -90, 4, 90, 13, -88, -31, 82, 46, -73, -61, ++ 61, -73, -46, 82, 31, -88, -13, 90, -4, -90, 22, 85, -38, -78, 54, 67, ++ 54, -85, -4, 88, -46, -61, 82, 13, -90, 38, 67, -78, -22, 90, -31, -73, ++ 46, -90, 38, 54, -90, 31, 61, -88, 22, 67, -85, 13, 73, -82, 4, 78, ++ 38, -88, 73, -4, -67, 90, -46, -31, 85, -78, 13, 61, -90, 54, 22, -82, ++ 31, -78, 90, -61, 4, 54, -88, 82, -38, -22, 73, -90, 67, -13, -46, 85, ++ 22, -61, 85, -90, 73, -38, -4, 46, -78, 90, -82, 54, -13, -31, 67, -88, ++ 13, -38, 61, -78, 88, -90, 85, -73, 54, -31, 4, 22, -46, 67, -82, 90, ++ 4, -13, 22, -31, 38, -46, 54, -61, 67, -73, 78, -82, 85, -88, 90, -90 ++}; ++ ++static const int16_t gt32x32_cnst1[64] __attribute__ ((aligned (64))) = { ++ 90, 87, 80, 70, 57, 43, 25, 9, 87, 57, 9, -43, -80, -90, -70, -25, ++ 80, 9, -70, -87, -25, 57, 90, 43, 70, -43, -87, 9, 90, 25, -80, -57, ++ 57, -80, -25, 90, -9, -87, 43, 70, 43, -90, 57, 25, -87, 70, 9, -80, ++ 25, -70, 90, -80, 43, 9, -57, 87, 9, -25, 43, -57, 70, -80, 87, -90 ++}; ++ ++static const int16_t gt32x32_cnst2[16] __attribute__ ((aligned (64))) = { ++ 89, 75, 50, 18, 75, -18, -89, -50, 50, -89, 18, 75, 18, -50, 75, -89 ++}; ++ ++#define HEVC_IDCT4x4_COL(in_r0, in_l0, in_r1, in_l1, \ ++ sum0, sum1, sum2, sum3, shift) \ ++{ \ ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5; \ ++ __m128i cnst64 = __lsx_vldi(0x0840); \ ++ __m128i cnst83 = __lsx_vldi(0x0853); \ ++ __m128i cnst36 = __lsx_vldi(0x0824); \ ++ \ ++ vec0 = __lsx_dp2_w_h(in_r0, cnst64); \ ++ vec1 = __lsx_dp2_w_h(in_l0, cnst83); \ ++ vec2 = __lsx_dp2_w_h(in_r1, cnst64); \ ++ vec3 = __lsx_dp2_w_h(in_l1, cnst36); \ ++ vec4 = __lsx_dp2_w_h(in_l0, cnst36); \ ++ vec5 = __lsx_dp2_w_h(in_l1, cnst83); \ ++ \ ++ sum0 = __lsx_vadd_w(vec0, vec2); \ ++ sum1 = __lsx_vsub_w(vec0, vec2); \ ++ vec1 = __lsx_vadd_w(vec1, vec3); \ ++ vec4 = __lsx_vsub_w(vec4, vec5); \ ++ sum2 = __lsx_vsub_w(sum1, vec4); \ ++ sum3 = __lsx_vsub_w(sum0, vec1); \ ++ sum0 = __lsx_vadd_w(sum0, vec1); \ ++ sum1 = __lsx_vadd_w(sum1, vec4); \ ++ \ ++ sum0 = __lsx_vsrari_w(sum0, shift); \ ++ sum1 = __lsx_vsrari_w(sum1, shift); \ ++ sum2 = __lsx_vsrari_w(sum2, shift); \ ++ sum3 = __lsx_vsrari_w(sum3, shift); \ ++ sum0 = __lsx_vsat_w(sum0, 15); \ ++ sum1 = __lsx_vsat_w(sum1, 15); \ ++ sum2 = __lsx_vsat_w(sum2, 15); \ ++ sum3 = __lsx_vsat_w(sum3, 15); \ ++} ++ ++#define HEVC_IDCT8x8_COL(in0, in1, in2, in3, in4, in5, in6, in7, shift) \ ++{ \ ++ __m128i src0_r, src1_r, src2_r, src3_r; \ ++ __m128i src0_l, src1_l, src2_l, src3_l; \ ++ __m128i filter0, filter1, filter2, filter3; \ ++ __m128i temp0_r, temp1_r, temp2_r, temp3_r, temp4_r, temp5_r; \ ++ __m128i temp0_l, temp1_l, temp2_l, temp3_l, temp4_l, temp5_l; \ ++ __m128i sum0_r, sum1_r, sum2_r, sum3_r; \ ++ __m128i sum0_l, sum1_l, sum2_l, sum3_l; \ ++ \ ++ LSX_DUP4_ARG2(__lsx_vilvl_h, in4, in0, in6, in2, in5, in1, in3, in7, \ ++ src0_r, src1_r, src2_r, src3_r); \ ++ LSX_DUP4_ARG2(__lsx_vilvh_h, in4, in0, in6, in2, in5, in1, in3, in7, \ ++ src0_l, src1_l, src2_l, src3_l); \ ++ \ ++ LSX_DUP4_ARG2(__lsx_vldrepl_w, filter, 0, filter, 4, filter, 8, \ ++ filter, 12, filter0, filter1, filter2, filter3); \ ++ LSX_DUP4_ARG2(__lsx_dp2_w_h, src0_r, filter0, src0_l, filter0, \ ++ src1_r, filter1, src1_l, filter1, temp0_r, temp0_l, \ ++ temp1_r, temp1_l); \ ++ \ ++ BUTTERFLY_4_W(temp0_r, temp0_l, temp1_l, temp1_r, sum0_r, sum0_l, \ ++ sum1_l, sum1_r); \ ++ sum2_r = sum1_r; \ ++ sum2_l = sum1_l; \ ++ sum3_r = sum0_r; \ ++ sum3_l = sum0_l; \ ++ \ ++ LSX_DUP4_ARG2(__lsx_dp2_w_h, src2_r, filter2, src2_l, filter2, \ ++ src3_r, filter3, src3_l, filter3, temp2_r, temp2_l, \ ++ temp3_r, temp3_l); \ ++ temp2_r = __lsx_vadd_w(temp2_r, temp3_r); \ ++ temp2_l = __lsx_vadd_w(temp2_l, temp3_l); \ ++ sum0_r = __lsx_vadd_w(sum0_r, temp2_r); \ ++ sum0_l = __lsx_vadd_w(sum0_l, temp2_l); \ ++ sum3_r = __lsx_vsub_w(sum3_r, temp2_r); \ ++ sum3_l = __lsx_vsub_w(sum3_l, temp2_l); \ ++ \ ++ in0 = __lsx_vssrarni_h_w(sum0_l, sum0_r, shift); \ ++ in7 = __lsx_vssrarni_h_w(sum3_l, sum3_r, shift); \ ++ \ ++ LSX_DUP4_ARG2(__lsx_dp2_w_h, src2_r, filter3, src2_l, filter3, \ ++ src3_r, filter2, src3_l, filter2, temp4_r, temp4_l, \ ++ temp5_r, temp5_l); \ ++ temp4_r = __lsx_vsub_w(temp4_r, temp5_r); \ ++ temp4_l = __lsx_vsub_w(temp4_l, temp5_l); \ ++ sum1_r = __lsx_vadd_w(sum1_r, temp4_r); \ ++ sum1_l = __lsx_vadd_w(sum1_l, temp4_l); \ ++ sum2_r = __lsx_vsub_w(sum2_r, temp4_r); \ ++ sum2_l = __lsx_vsub_w(sum2_l, temp4_l); \ ++ \ ++ in3 = __lsx_vssrarni_h_w(sum1_l, sum1_r, shift); \ ++ in4 = __lsx_vssrarni_h_w(sum2_l, sum2_r, shift); \ ++ \ ++ LSX_DUP4_ARG2(__lsx_vldrepl_w, filter, 16, filter, 20, filter, 24, \ ++ filter, 28, filter0, filter1, filter2, filter3); \ ++ LSX_DUP4_ARG2(__lsx_dp2_w_h, src0_r, filter0, src0_l, filter0, \ ++ src1_r, filter1, src1_l, filter1, temp0_r, temp0_l, \ ++ temp1_r, temp1_l); \ ++ \ ++ BUTTERFLY_4_W(temp0_r, temp0_l, temp1_l, temp1_r, sum0_r, sum0_l, \ ++ sum1_l, sum1_r); \ ++ sum2_r = sum1_r; \ ++ sum2_l = sum1_l; \ ++ sum3_r = sum0_r; \ ++ sum3_l = sum0_l; \ ++ \ ++ LSX_DUP4_ARG2(__lsx_dp2_w_h, src2_r, filter2, src2_l, filter2, \ ++ src3_r, filter3, src3_l, filter3, temp2_r, temp2_l, \ ++ temp3_r, temp3_l); \ ++ temp2_r = __lsx_vadd_w(temp2_r, temp3_r); \ ++ temp2_l = __lsx_vadd_w(temp2_l, temp3_l); \ ++ sum0_r = __lsx_vadd_w(sum0_r, temp2_r); \ ++ sum0_l = __lsx_vadd_w(sum0_l, temp2_l); \ ++ sum3_r = __lsx_vsub_w(sum3_r, temp2_r); \ ++ sum3_l = __lsx_vsub_w(sum3_l, temp2_l); \ ++ \ ++ in1 = __lsx_vssrarni_h_w(sum0_l, sum0_r, shift); \ ++ in6 = __lsx_vssrarni_h_w(sum3_l, sum3_r, shift); \ ++ \ ++ LSX_DUP4_ARG2(__lsx_dp2_w_h, src2_r, filter3, src2_l, filter3, \ ++ src3_r, filter2, src3_l, filter2, temp4_r, temp4_l, \ ++ temp5_r, temp5_l); \ ++ temp4_r = __lsx_vsub_w(temp4_r, temp5_r); \ ++ temp4_l = __lsx_vsub_w(temp4_l, temp5_l); \ ++ sum1_r = __lsx_vsub_w(sum1_r, temp4_r); \ ++ sum1_l = __lsx_vsub_w(sum1_l, temp4_l); \ ++ sum2_r = __lsx_vadd_w(sum2_r, temp4_r); \ ++ sum2_l = __lsx_vadd_w(sum2_l, temp4_l); \ ++ \ ++ in2 = __lsx_vssrarni_h_w(sum1_l, sum1_r, shift); \ ++ in5 = __lsx_vssrarni_h_w(sum2_l, sum2_r, shift); \ ++} ++ ++#define HEVC_IDCT16x16_COL(src0_r, src1_r, src2_r, src3_r, \ ++ src4_r, src5_r, src6_r, src7_r, \ ++ src0_l, src1_l, src2_l, src3_l, \ ++ src4_l, src5_l, src6_l, src7_l, shift) \ ++{ \ ++ int16_t *ptr0, *ptr1; \ ++ __m128i dst0, dst1; \ ++ __m128i filter0, filter1, filter2, filter3; \ ++ __m128i temp0_r, temp1_r, temp0_l, temp1_l; \ ++ __m128i sum0_r, sum1_r, sum2_r, sum3_r, sum0_l, sum1_l, sum2_l; \ ++ __m128i sum3_l, res0_r, res1_r, res0_l, res1_l; \ ++ \ ++ ptr0 = (buf_ptr + 112); \ ++ ptr1 = (buf_ptr + 128); \ ++ k = -1; \ ++ \ ++ for (j = 0; j < 4; j++) \ ++ { \ ++ LSX_DUP4_ARG2(__lsx_vldrepl_w, filter, 0, filter, 4, filter, 16, \ ++ filter, 20, filter0, filter1, filter2, filter3); \ ++ LSX_DUP4_ARG2(__lsx_dp2_w_h, src0_r, filter0, src0_l, filter0, \ ++ src4_r, filter2, src4_l, filter2, sum0_r, sum0_l, \ ++ sum2_r, sum2_l); \ ++ LSX_DUP2_ARG2(__lsx_dp2_w_h, src7_r, filter2, src7_l, filter2, \ ++ sum3_r, sum3_l); \ ++ LSX_DUP4_ARG3(__lsx_dp2add_w_h, sum0_r, src1_r, filter1, sum0_l, \ ++ src1_l, filter1, sum2_r, src5_r, filter3, sum2_l, \ ++ src5_l, filter3, sum0_r, sum0_l, sum2_r, sum2_l); \ ++ LSX_DUP2_ARG3(__lsx_dp2add_w_h, sum3_r, src6_r, filter3, sum3_l, \ ++ src6_l, filter3, sum3_r, sum3_l); \ ++ \ ++ sum1_r = sum0_r; \ ++ sum1_l = sum0_l; \ ++ \ ++ LSX_DUP4_ARG2(__lsx_vldrepl_w, filter, 8, filter, 12, filter, 24, \ ++ filter, 28, filter0, filter1, filter2, filter3); \ ++ filter += 16; \ ++ LSX_DUP2_ARG2(__lsx_dp2_w_h, src2_r, filter0, src2_l, filter0, \ ++ temp0_r, temp0_l); \ ++ LSX_DUP2_ARG3(__lsx_dp2add_w_h, sum2_r, src6_r, filter2, sum2_l, \ ++ src6_l, filter2, sum2_r, sum2_l); \ ++ LSX_DUP2_ARG2(__lsx_dp2_w_h, src5_r, filter2, src5_l, filter2, \ ++ temp1_r, temp1_l); \ ++ \ ++ sum0_r = __lsx_vadd_w(sum0_r, temp0_r); \ ++ sum0_l = __lsx_vadd_w(sum0_l, temp0_l); \ ++ sum1_r = __lsx_vsub_w(sum1_r, temp0_r); \ ++ sum1_l = __lsx_vsub_w(sum1_l, temp0_l); \ ++ sum3_r = __lsx_vsub_w(temp1_r, sum3_r); \ ++ sum3_l = __lsx_vsub_w(temp1_l, sum3_l); \ ++ \ ++ LSX_DUP2_ARG2(__lsx_dp2_w_h, src3_r, filter1, src3_l, filter1, \ ++ temp0_r, temp0_l); \ ++ LSX_DUP4_ARG3(__lsx_dp2add_w_h, sum2_r, src7_r, filter3, sum2_l, \ ++ src7_l, filter3, sum3_r, src4_r, filter3, sum3_l, \ ++ src4_l, filter3, sum2_r, sum2_l, sum3_r, sum3_l); \ ++ \ ++ sum0_r = __lsx_vadd_w(sum0_r, temp0_r); \ ++ sum0_l = __lsx_vadd_w(sum0_l, temp0_l); \ ++ sum1_r = __lsx_vsub_w(sum1_r, temp0_r); \ ++ sum1_l = __lsx_vsub_w(sum1_l, temp0_l); \ ++ \ ++ BUTTERFLY_4_W(sum0_r, sum0_l, sum2_l, sum2_r, res0_r, res0_l, \ ++ res1_l, res1_r); \ ++ dst0 = __lsx_vssrarni_h_w(res0_l, res0_r, shift); \ ++ dst1 = __lsx_vssrarni_h_w(res1_l, res1_r, shift); \ ++ __lsx_vst(dst0, buf_ptr, 0); \ ++ __lsx_vst(dst1, (buf_ptr + ((15 - (j * 2)) << 4)), 0); \ ++ \ ++ BUTTERFLY_4_W(sum1_r, sum1_l, sum3_l, sum3_r, res0_r, res0_l, \ ++ res1_l, res1_r); \ ++ \ ++ dst0 = __lsx_vssrarni_h_w(res0_l, res0_r, shift); \ ++ dst1 = __lsx_vssrarni_h_w(res1_l, res1_r, shift); \ ++ __lsx_vst(dst0, (ptr0 + ((((j + 1) >> 1) * 2 * k) << 4)), 0); \ ++ __lsx_vst(dst1, (ptr1 - ((((j + 1) >> 1) * 2 * k) << 4)), 0); \ ++ \ ++ k *= -1; \ ++ buf_ptr += 16; \ ++ } \ ++} ++ ++#define HEVC_EVEN16_CALC(input, sum0_r, sum0_l, load_idx, store_idx) \ ++{ \ ++ tmp0_r = __lsx_vld(input + load_idx * 8, 0); \ ++ tmp0_l = __lsx_vld(input + load_idx * 8, 16); \ ++ tmp1_r = sum0_r; \ ++ tmp1_l = sum0_l; \ ++ sum0_r = __lsx_vadd_w(sum0_r, tmp0_r); \ ++ sum0_l = __lsx_vadd_w(sum0_l, tmp0_l); \ ++ __lsx_vst(sum0_r, (input + load_idx * 8), 0); \ ++ __lsx_vst(sum0_l, (input + load_idx * 8), 16); \ ++ tmp1_r = __lsx_vsub_w(tmp1_r, tmp0_r); \ ++ tmp1_l = __lsx_vsub_w(tmp1_l, tmp0_l); \ ++ __lsx_vst(tmp1_r, (input + store_idx * 8), 0); \ ++ __lsx_vst(tmp1_l, (input + store_idx * 8), 16); \ ++} ++ ++#define HEVC_IDCT_LUMA4x4_COL(in_r0, in_l0, in_r1, in_l1, \ ++ res0, res1, res2, res3, shift) \ ++{ \ ++ __m128i vec0, vec1, vec2, vec3; \ ++ __m128i cnst74 = __lsx_vldi(0x84a); \ ++ __m128i cnst55 = __lsx_vldi(0x837); \ ++ __m128i cnst29 = __lsx_vldi(0x81d); \ ++ \ ++ vec0 = __lsx_vadd_w(in_r0, in_r1); \ ++ vec2 = __lsx_vsub_w(in_r0, in_l1); \ ++ res0 = __lsx_vmul_w(vec0, cnst29); \ ++ res1 = __lsx_vmul_w(vec2, cnst55); \ ++ res2 = __lsx_vsub_w(in_r0, in_r1); \ ++ vec1 = __lsx_vadd_w(in_r1, in_l1); \ ++ res2 = __lsx_vadd_w(res2, in_l1); \ ++ vec3 = __lsx_vmul_w(in_l0, cnst74); \ ++ res3 = __lsx_vmul_w(vec0, cnst55); \ ++ \ ++ res0 = __lsx_vadd_w(res0, __lsx_vmul_w(vec1, cnst55)); \ ++ res1 = __lsx_vsub_w(res1, __lsx_vmul_w(vec1, cnst29)); \ ++ res2 = __lsx_vmul_w(res2, cnst74); \ ++ res3 = __lsx_vadd_w(res3, __lsx_vmul_w(vec2, cnst29)); \ ++ \ ++ res0 = __lsx_vadd_w(res0, vec3); \ ++ res1 = __lsx_vadd_w(res1, vec3); \ ++ res3 = __lsx_vsub_w(res3, vec3); \ ++ \ ++ res0 = __lsx_vsrari_w(res0, shift); \ ++ res1 = __lsx_vsrari_w(res1, shift); \ ++ res2 = __lsx_vsrari_w(res2, shift); \ ++ res3 = __lsx_vsrari_w(res3, shift); \ ++ res0 = __lsx_vsat_w(res0, 15); \ ++ res1 = __lsx_vsat_w(res1, 15); \ ++ res2 = __lsx_vsat_w(res2, 15); \ ++ res3 = __lsx_vsat_w(res3, 15); \ ++} ++ ++static void hevc_idct_4x4_lsx(int16_t *coeffs) ++{ ++ __m128i in0, in1; ++ __m128i in_r0, in_l0, in_r1, in_l1; ++ __m128i sum0, sum1, sum2, sum3; ++ __m128i zero = __lsx_vldi(0x00); ++ ++ in0 = __lsx_vld(coeffs, 0); ++ in1 = __lsx_vld(coeffs, 16); ++ in_r0 = __lsx_vilvl_h(zero, in0); ++ in_l0 = __lsx_vilvh_h(zero, in0); ++ in_r1 = __lsx_vilvl_h(zero, in1); ++ in_l1 = __lsx_vilvh_h(zero, in1); ++ ++ HEVC_IDCT4x4_COL(in_r0, in_l0, in_r1, in_l1, sum0, sum1, sum2, sum3, 7); ++ TRANSPOSE4x4_W(sum0, sum1, sum2, sum3, in_r0, in_l0, in_r1, in_l1); ++ HEVC_IDCT4x4_COL(in_r0, in_l0, in_r1, in_l1, sum0, sum1, sum2, sum3, 12); ++ ++ /* Pack and transpose */ ++ in0 = __lsx_vpickev_h(sum2, sum0); ++ in1 = __lsx_vpickev_h(sum3, sum1); ++ sum0 = __lsx_vilvl_h(in1, in0); ++ sum1 = __lsx_vilvh_h(in1, in0); ++ in0 = __lsx_vilvl_w(sum1, sum0); ++ in1 = __lsx_vilvh_w(sum1, sum0); ++ ++ __lsx_vst(in0, coeffs, 0); ++ __lsx_vst(in1, coeffs, 16); ++} ++ ++static void hevc_idct_8x8_lsx(int16_t *coeffs) ++{ ++ const int16_t *filter = >8x8_cnst[0]; ++ __m128i in0, in1, in2, in3, in4, in5, in6, in7; ++ ++ LSX_DUP4_ARG2(__lsx_vld, coeffs, 0, coeffs, 16, coeffs, 32, ++ coeffs, 48, in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vld, coeffs, 64, coeffs, 80, coeffs, 96, ++ coeffs, 112, in4, in5, in6, in7); ++ HEVC_IDCT8x8_COL(in0, in1, in2, in3, in4, in5, in6, in7, 7); ++ TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, ++ in0, in1, in2, in3, in4, in5, in6, in7); ++ HEVC_IDCT8x8_COL(in0, in1, in2, in3, in4, in5, in6, in7, 12); ++ TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, ++ in0, in1, in2, in3, in4, in5, in6, in7); ++ ++ __lsx_vst(in0, coeffs,0); ++ __lsx_vst(in1, coeffs,16); ++ __lsx_vst(in2, coeffs,32); ++ __lsx_vst(in3, coeffs,48); ++ __lsx_vst(in4, coeffs,64); ++ __lsx_vst(in5, coeffs,80); ++ __lsx_vst(in6, coeffs,96); ++ __lsx_vst(in7, coeffs,112); ++} ++ ++static void hevc_idct_16x16_lsx(int16_t *coeffs) ++{ ++ int16_t i, j, k; ++ int16_t buf[256]; ++ int16_t *buf_ptr = &buf[0]; ++ int16_t *src = coeffs; ++ const int16_t *filter = >16x16_cnst[0]; ++ __m128i in0, in1, in2, in3, in4, in5, in6, in7; ++ __m128i in8, in9, in10, in11, in12, in13, in14, in15; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; ++ __m128i src0_r, src1_r, src2_r, src3_r, src4_r, src5_r, src6_r, src7_r; ++ __m128i src0_l, src1_l, src2_l, src3_l, src4_l, src5_l, src6_l, src7_l; ++ ++ for (i = 2; i--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 32, src, 64, src, 96, ++ in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vld, src, 128, src, 160, src, 192, src, 224, ++ in4, in5, in6, in7); ++ LSX_DUP4_ARG2(__lsx_vld, src, 256, src, 288, src, 320, src, 352, ++ in8, in9, in10, in11); ++ LSX_DUP4_ARG2(__lsx_vld, src, 384, src, 416, src, 448, src, 480, ++ in12, in13, in14, in15); ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_h, in4, in0, in12, in8, in6, in2, in14, in10, ++ src0_r, src1_r, src2_r, src3_r); ++ LSX_DUP4_ARG2(__lsx_vilvl_h, in5, in1, in13, in9, in3, in7, in11, in15, ++ src4_r, src5_r, src6_r, src7_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, in4, in0, in12, in8, in6, in2, in14, in10, ++ src0_l, src1_l, src2_l, src3_l); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, in5, in1, in13, in9, in3, in7, in11, in15, ++ src4_l, src5_l, src6_l, src7_l); ++ ++ HEVC_IDCT16x16_COL(src0_r, src1_r, src2_r, src3_r, src4_r, src5_r, ++ src6_r, src7_r, src0_l, src1_l, src2_l, src3_l, ++ src4_l, src5_l, src6_l, src7_l, 7); ++ ++ src += 8; ++ buf_ptr = (&buf[0] + 8); ++ filter = >16x16_cnst[0]; ++ } ++ ++ src = &buf[0]; ++ buf_ptr = coeffs; ++ filter = >16x16_cnst[0]; ++ ++ for (i = 2; i--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, ++ in0, in8, in1, in9); ++ LSX_DUP4_ARG2(__lsx_vld, src, 64, src, 80, src, 96, src, 112, ++ in2, in10, in3, in11); ++ LSX_DUP4_ARG2(__lsx_vld, src, 128, src, 144, src, 160, src, 176, ++ in4, in12, in5, in13); ++ LSX_DUP4_ARG2(__lsx_vld, src, 192, src, 208, src, 224, src, 240, ++ in6, in14, in7, in15); ++ TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, ++ in0, in1, in2, in3, in4, in5, in6, in7); ++ TRANSPOSE8x8_H(in8, in9, in10, in11, in12, in13, in14, in15, ++ in8, in9, in10, in11, in12, in13, in14, in15); ++ LSX_DUP4_ARG2(__lsx_vilvl_h, in4, in0, in12, in8, in6, in2, in14, in10, ++ src0_r, src1_r, src2_r, src3_r); ++ LSX_DUP4_ARG2(__lsx_vilvl_h, in5, in1, in13, in9, in3, in7, in11, in15, ++ src4_r, src5_r, src6_r, src7_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, in4, in0, in12, in8, in6, in2, in14, in10, ++ src0_l, src1_l, src2_l, src3_l); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, in5, in1, in13, in9, in3, in7, in11, in15, ++ src4_l, src5_l, src6_l, src7_l); ++ HEVC_IDCT16x16_COL(src0_r, src1_r, src2_r, src3_r, src4_r, src5_r, ++ src6_r, src7_r, src0_l, src1_l, src2_l, src3_l, ++ src4_l, src5_l, src6_l, src7_l, 12); ++ ++ src += 128; ++ buf_ptr = coeffs + 8; ++ filter = >16x16_cnst[0]; ++ } ++ ++ LSX_DUP4_ARG2(__lsx_vld, coeffs, 0, coeffs, 32, coeffs, 64, coeffs, 96, ++ in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vld, coeffs, 128, coeffs, 160, coeffs, 192, coeffs, 224, ++ in4, in5, in6, in7); ++ TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, ++ vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7); ++ __lsx_vst(vec0, coeffs, 0); ++ __lsx_vst(vec1, coeffs, 32); ++ __lsx_vst(vec2, coeffs, 64); ++ __lsx_vst(vec3, coeffs, 96); ++ __lsx_vst(vec4, coeffs, 128); ++ __lsx_vst(vec5, coeffs, 160); ++ __lsx_vst(vec6, coeffs, 192); ++ __lsx_vst(vec7, coeffs, 224); ++ ++ src = coeffs + 8; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 32, src, 64, src, 96, ++ in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vld, src, 128, src, 160, src, 192, src, 224, ++ in4, in5, in6, in7); ++ TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, ++ vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7); ++ src = coeffs + 128; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 32, src, 64, src, 96, ++ in8, in9, in10, in11); ++ LSX_DUP4_ARG2(__lsx_vld, src, 128, src, 160, src, 192, src, 224, ++ in12, in13, in14, in15); ++ ++ __lsx_vst(vec0, src, 0); ++ __lsx_vst(vec1, src, 32); ++ __lsx_vst(vec2, src, 64); ++ __lsx_vst(vec3, src, 96); ++ __lsx_vst(vec4, src, 128); ++ __lsx_vst(vec5, src, 160); ++ __lsx_vst(vec6, src, 192); ++ __lsx_vst(vec7, src, 224); ++ TRANSPOSE8x8_H(in8, in9, in10, in11, in12, in13, in14, in15, ++ vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7); ++ src = coeffs + 8; ++ __lsx_vst(vec0, src, 0); ++ __lsx_vst(vec1, src, 32); ++ __lsx_vst(vec2, src, 64); ++ __lsx_vst(vec3, src, 96); ++ __lsx_vst(vec4, src, 128); ++ __lsx_vst(vec5, src, 160); ++ __lsx_vst(vec6, src, 192); ++ __lsx_vst(vec7, src, 224); ++ ++ src = coeffs + 136; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 32, src, 64, src, 96, ++ in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vld, src, 128, src, 160, src, 192, src, 224, ++ in4, in5, in6, in7); ++ TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, ++ vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7); ++ __lsx_vst(vec0, src, 0); ++ __lsx_vst(vec1, src, 32); ++ __lsx_vst(vec2, src, 64); ++ __lsx_vst(vec3, src, 96); ++ __lsx_vst(vec4, src, 128); ++ __lsx_vst(vec5, src, 160); ++ __lsx_vst(vec6, src, 192); ++ __lsx_vst(vec7, src, 224); ++} ++ ++static void hevc_idct_8x32_column_lsx(int16_t *coeffs, uint8_t buf_pitch, ++ uint8_t round) ++{ ++ uint8_t i; ++ uint16_t buf_pitch_2x = (uint16_t)buf_pitch << 1; ++ uint16_t buf_pitch_4x = (uint16_t)buf_pitch << 2; ++ uint16_t buf_pitch_8x = (uint16_t)buf_pitch << 3; ++ uint16_t buf_pitch_16x = (uint16_t)buf_pitch << 4; ++ uint16_t buf_pitch_32x = (uint16_t)buf_pitch << 5; ++ const int16_t *filter_ptr0 = >32x32_cnst0[0]; ++ const int16_t *filter_ptr1 = >32x32_cnst1[0]; ++ const int16_t *filter_ptr2 = >32x32_cnst2[0]; ++ const int16_t *filter_ptr3 = >8x8_cnst[0]; ++ int16_t *src0 = (coeffs + buf_pitch); ++ int16_t *src1 = (coeffs + 2 * buf_pitch); ++ int16_t *src2 = (coeffs + 4 * buf_pitch); ++ int16_t *src3 = (coeffs); ++ int32_t tmp_buf[8 * 32 + 15]; ++ int32_t *tmp_buf_ptr = tmp_buf + 15; ++ __m128i in0, in1, in2, in3, in4, in5, in6, in7; ++ __m128i src0_r, src1_r, src2_r, src3_r, src4_r, src5_r, src6_r, src7_r; ++ __m128i src0_l, src1_l, src2_l, src3_l, src4_l, src5_l, src6_l, src7_l; ++ __m128i filter0, filter1, filter2, filter3; ++ __m128i sum0_r, sum0_l, sum1_r, sum1_l, tmp0_r, tmp0_l, tmp1_r, tmp1_l; ++ ++ /* Align pointer to 64 byte boundary */ ++ tmp_buf_ptr = (int32_t *)(((uintptr_t) tmp_buf_ptr) & ~(uintptr_t) 63); ++ ++ /* process coeff 4, 12, 20, 28 */ ++ in0 = __lsx_vld(src2, 0); ++ // TODO: Use vldx once gcc fixed. ++ //in1 = __lsx_vldx(src2, buf_pitch_16x); ++ //in2 = __lsx_vldx(src2, buf_pitch_32x); ++ //in3 = __lsx_vldx(src2, buf_pitch_32x + buf_pitch_16x); ++ in1 = __lsx_vld(src2 + buf_pitch_8x, 0); ++ in2 = __lsx_vld(src2 + buf_pitch_16x, 0); ++ in3 = __lsx_vld(src2 + buf_pitch_16x + buf_pitch_8x, 0); ++ in4 = __lsx_vld(src3, 0); ++ // TODO: Use vldx once gcc fixed. ++ //in5 = __lsx_vldx(src3, buf_pitch_16x); ++ //in6 = __lsx_vldx(src3, buf_pitch_32x); ++ //in7 = __lsx_vldx(src3, buf_pitch_32x + buf_pitch_16x); ++ in5 = __lsx_vld(src3 + buf_pitch_8x, 0); ++ in6 = __lsx_vld(src3 + buf_pitch_16x, 0); ++ in7 = __lsx_vld(src3 + buf_pitch_16x + buf_pitch_8x, 0); ++ LSX_DUP4_ARG2(__lsx_vilvl_h, in1, in0, in3, in2, in6, in4, in7, in5, ++ src0_r, src1_r, src2_r, src3_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, in1, in0, in3, in2, in6, in4, in7, in5, ++ src0_l, src1_l, src2_l, src3_l); ++ ++ /* loop for all columns of constants */ ++ for (i = 0; i < 2; i++) { ++ /* processing single column of constants */ ++ filter0 = __lsx_vldrepl_w(filter_ptr2, 0); ++ filter1 = __lsx_vldrepl_w(filter_ptr2, 4); ++ sum0_r = __lsx_dp2_w_h(src0_r, filter0); ++ sum0_l = __lsx_dp2_w_h(src0_l, filter0); ++ sum0_r = __lsx_dp2add_w_h(sum0_r, src1_r, filter1); ++ sum0_l = __lsx_dp2add_w_h(sum0_l, src1_l, filter1); ++ __lsx_vst(sum0_r, (tmp_buf_ptr + 2 * i * 8), 0); ++ __lsx_vst(sum0_l, (tmp_buf_ptr + 2 * i * 8), 16); ++ ++ /* processing single column of constants */ ++ filter0 = __lsx_vldrepl_w(filter_ptr2, 8); ++ filter1 = __lsx_vldrepl_w(filter_ptr2, 12); ++ sum0_r = __lsx_dp2_w_h(src0_r, filter0); ++ sum0_l = __lsx_dp2_w_h(src0_l, filter0); ++ sum0_r = __lsx_dp2add_w_h(sum0_r, src1_r, filter1); ++ sum0_l = __lsx_dp2add_w_h(sum0_l, src1_l, filter1); ++ __lsx_vst(sum0_r, (tmp_buf_ptr + (2 * i + 1) * 8), 0); ++ __lsx_vst(sum0_l, (tmp_buf_ptr + (2 * i + 1) * 8), 16); ++ ++ filter_ptr2 += 8; ++ } ++ ++ /* process coeff 0, 8, 16, 24 */ ++ /* loop for all columns of constants */ ++ for (i = 0; i < 2; i++) { ++ /* processing first column of filter constants */ ++ filter0 = __lsx_vldrepl_w(filter_ptr3, 0); ++ filter1 = __lsx_vldrepl_w(filter_ptr3, 4); ++ ++ LSX_DUP4_ARG2(__lsx_dp2_w_h, src2_r, filter0, src2_l, filter0, ++ src3_r, filter1, src3_l, filter1, sum0_r, sum0_l, ++ tmp1_r, tmp1_l); ++ sum1_r = __lsx_vsub_w(sum0_r, tmp1_r); ++ sum1_l = __lsx_vsub_w(sum0_l, tmp1_l); ++ sum0_r = __lsx_vadd_w(sum0_r, tmp1_r); ++ sum0_l = __lsx_vadd_w(sum0_l, tmp1_l); ++ ++ HEVC_EVEN16_CALC(tmp_buf_ptr, sum0_r, sum0_l, i, (7 - i)); ++ HEVC_EVEN16_CALC(tmp_buf_ptr, sum1_r, sum1_l, (3 - i), (4 + i)); ++ ++ filter_ptr3 += 8; ++ } ++ ++ /* process coeff 2 6 10 14 18 22 26 30 */ ++ in0 = __lsx_vld(src1, 0); ++ // TODO: Use vldx once gcc fixed. ++ //in1 = __lsx_vldx(src1, buf_pitch_8x); ++ //in2 = __lsx_vldx(src1, buf_pitch_16x); ++ //in3 = __lsx_vldx(src1, buf_pitch_16x + buf_pitch_8x); ++ //in4 = __lsx_vldx(src1, buf_pitch_32x); ++ //in5 = __lsx_vldx(src1, buf_pitch_32x + buf_pitch_8x); ++ //in6 = __lsx_vldx(src1, buf_pitch_32x + buf_pitch_16x); ++ //in7 = __lsx_vldx(src1, buf_pitch_32x + buf_pitch_16x + buf_pitch_8x); ++ in1 = __lsx_vld(src1 + buf_pitch_4x, 0); ++ in2 = __lsx_vld(src1 + buf_pitch_8x, 0); ++ in3 = __lsx_vld(src1 + buf_pitch_8x + buf_pitch_4x, 0); ++ in4 = __lsx_vld(src1 + buf_pitch_16x, 0); ++ in5 = __lsx_vld(src1 + buf_pitch_16x + buf_pitch_4x, 0); ++ in6 = __lsx_vld(src1 + buf_pitch_16x + buf_pitch_8x, 0); ++ in7 = __lsx_vld(src1 + buf_pitch_16x + buf_pitch_8x + buf_pitch_4x, 0); ++ LSX_DUP4_ARG2(__lsx_vilvl_h, in1, in0, in3, in2, in5, in4, in7, in6, ++ src0_r, src1_r, src2_r, src3_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, in1, in0, in3, in2, in5, in4, in7, in6, ++ src0_l, src1_l, src2_l, src3_l); ++ ++ /* loop for all columns of constants */ ++ for (i = 0; i < 8; i++) { ++ /* processing single column of constants */ ++ filter0 = __lsx_vldrepl_w(filter_ptr1, 0); ++ filter1 = __lsx_vldrepl_w(filter_ptr1, 4); ++ filter2 = __lsx_vldrepl_w(filter_ptr1, 8); ++ filter3 = __lsx_vldrepl_w(filter_ptr1, 12); ++ sum0_r = __lsx_dp2_w_h(src0_r, filter0); ++ sum0_l = __lsx_dp2_w_h(src0_l, filter0); ++ sum0_r = __lsx_dp2add_w_h(sum0_r, src1_r, filter1); ++ sum0_l = __lsx_dp2add_w_h(sum0_l, src1_l, filter1); ++ sum0_r = __lsx_dp2add_w_h(sum0_r, src2_r, filter2); ++ sum0_l = __lsx_dp2add_w_h(sum0_l, src2_l, filter2); ++ sum0_r = __lsx_dp2add_w_h(sum0_r, src3_r, filter3); ++ sum0_l = __lsx_dp2add_w_h(sum0_l, src3_l, filter3); ++ ++ tmp0_r = __lsx_vld(tmp_buf_ptr + (i << 3), 0); ++ tmp0_l = __lsx_vld(tmp_buf_ptr + (i << 3), 16); ++ tmp1_r = tmp0_r; ++ tmp1_l = tmp0_l; ++ tmp0_r = __lsx_vadd_w(tmp0_r, sum0_r); ++ tmp0_l = __lsx_vadd_w(tmp0_l, sum0_l); ++ tmp1_r = __lsx_vsub_w(tmp1_r, sum0_r); ++ tmp1_l = __lsx_vsub_w(tmp1_l, sum0_l); ++ __lsx_vst(tmp0_r, tmp_buf_ptr + (i << 3), 0); ++ __lsx_vst(tmp0_l, tmp_buf_ptr + (i << 3), 16); ++ __lsx_vst(tmp1_r, tmp_buf_ptr + ((15 - i) * 8), 0); ++ __lsx_vst(tmp1_l, tmp_buf_ptr + ((15 - i) * 8), 16); ++ ++ filter_ptr1 += 8; ++ } ++ ++ /* process coeff 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 */ ++ in0 = __lsx_vld(src0, 0); ++ // TODO: Use vldx once gcc fixed. ++ //in1 = __lsx_vldx(src0, buf_pitch_4x); ++ //in2 = __lsx_vldx(src0, buf_pitch_8x); ++ //in3 = __lsx_vldx(src0, buf_pitch_8x + buf_pitch_4x); ++ //in4 = __lsx_vldx(src0, buf_pitch_16x); ++ //in5 = __lsx_vldx(src0, buf_pitch_16x + buf_pitch_4x); ++ //in6 = __lsx_vldx(src0, buf_pitch_16x + buf_pitch_8x); ++ //in7 = __lsx_vldx(src0, buf_pitch_16x + buf_pitch_8x + buf_pitch_4x); ++ in1 = __lsx_vld(src0 + buf_pitch_2x, 0); ++ in2 = __lsx_vld(src0 + buf_pitch_4x, 0); ++ in3 = __lsx_vld(src0 + buf_pitch_4x + buf_pitch_2x, 0); ++ in4 = __lsx_vld(src0 + buf_pitch_8x, 0); ++ in5 = __lsx_vld(src0 + buf_pitch_8x + buf_pitch_2x, 0); ++ in6 = __lsx_vld(src0 + buf_pitch_8x + buf_pitch_4x, 0); ++ in7 = __lsx_vld(src0 + buf_pitch_8x + buf_pitch_4x + buf_pitch_2x, 0); ++ src0 += 16 * buf_pitch; ++ LSX_DUP4_ARG2(__lsx_vilvl_h, in1, in0, in3, in2, in5, in4, in7, in6, ++ src0_r, src1_r, src2_r, src3_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, in1, in0, in3, in2, in5, in4, in7, in6, ++ src0_l, src1_l, src2_l, src3_l); ++ in0 = __lsx_vld(src0, 0); ++ // TODO: Use vldx once gcc fixed. ++ //in1 = __lsx_vldx(src0, buf_pitch_4x); ++ //in2 = __lsx_vldx(src0, buf_pitch_8x); ++ //in3 = __lsx_vldx(src0, buf_pitch_8x + buf_pitch_4x); ++ //in4 = __lsx_vldx(src0, buf_pitch_16x); ++ //in5 = __lsx_vldx(src0, buf_pitch_16x + buf_pitch_4x); ++ //in6 = __lsx_vldx(src0, buf_pitch_16x + buf_pitch_8x); ++ //in7 = __lsx_vldx(src0, buf_pitch_16x + buf_pitch_8x + buf_pitch_4x); ++ in1 = __lsx_vld(src0 + buf_pitch_2x, 0); ++ in2 = __lsx_vld(src0 + buf_pitch_4x, 0); ++ in3 = __lsx_vld(src0 + buf_pitch_4x + buf_pitch_2x, 0); ++ in4 = __lsx_vld(src0 + buf_pitch_8x, 0); ++ in5 = __lsx_vld(src0 + buf_pitch_8x + buf_pitch_2x, 0); ++ in6 = __lsx_vld(src0 + buf_pitch_8x + buf_pitch_4x, 0); ++ in7 = __lsx_vld(src0 + buf_pitch_8x + buf_pitch_4x + buf_pitch_2x, 0); ++ LSX_DUP4_ARG2(__lsx_vilvl_h, in1, in0, in3, in2, in5, in4, in7, in6, ++ src4_r, src5_r, src6_r, src7_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, in1, in0, in3, in2, in5, in4, in7, in6, ++ src4_l, src5_l, src6_l, src7_l); ++ ++ /* loop for all columns of filter constants */ ++ for (i = 0; i < 16; i++) { ++ /* processing single column of constants */ ++ filter0 = __lsx_vldrepl_w(filter_ptr0, 0); ++ filter1 = __lsx_vldrepl_w(filter_ptr0, 4); ++ filter2 = __lsx_vldrepl_w(filter_ptr0, 8); ++ filter3 = __lsx_vldrepl_w(filter_ptr0, 12); ++ sum0_r = __lsx_dp2_w_h(src0_r, filter0); ++ sum0_l = __lsx_dp2_w_h(src0_l, filter0); ++ sum0_r = __lsx_dp2add_w_h(sum0_r, src1_r, filter1); ++ sum0_l = __lsx_dp2add_w_h(sum0_l, src1_l, filter1); ++ sum0_r = __lsx_dp2add_w_h(sum0_r, src2_r, filter2); ++ sum0_l = __lsx_dp2add_w_h(sum0_l, src2_l, filter2); ++ sum0_r = __lsx_dp2add_w_h(sum0_r, src3_r, filter3); ++ sum0_l = __lsx_dp2add_w_h(sum0_l, src3_l, filter3); ++ tmp1_r = sum0_r; ++ tmp1_l = sum0_l; ++ ++ filter0 = __lsx_vldrepl_w(filter_ptr0, 16); ++ filter1 = __lsx_vldrepl_w(filter_ptr0, 20); ++ filter2 = __lsx_vldrepl_w(filter_ptr0, 24); ++ filter3 = __lsx_vldrepl_w(filter_ptr0, 28); ++ sum0_r = __lsx_dp2_w_h(src4_r, filter0); ++ sum0_l = __lsx_dp2_w_h(src4_l, filter0); ++ sum0_r = __lsx_dp2add_w_h(sum0_r, src5_r, filter1); ++ sum0_l = __lsx_dp2add_w_h(sum0_l, src5_l, filter1); ++ sum0_r = __lsx_dp2add_w_h(sum0_r, src6_r, filter2); ++ sum0_l = __lsx_dp2add_w_h(sum0_l, src6_l, filter2); ++ sum0_r = __lsx_dp2add_w_h(sum0_r, src7_r, filter3); ++ sum0_l = __lsx_dp2add_w_h(sum0_l, src7_l, filter3); ++ sum0_r = __lsx_vadd_w(sum0_r, tmp1_r); ++ sum0_l = __lsx_vadd_w(sum0_l, tmp1_l); ++ ++ tmp0_r = __lsx_vld(tmp_buf_ptr + i * 8, 0); ++ tmp0_l = __lsx_vld(tmp_buf_ptr + i * 8, 16); ++ tmp1_r = tmp0_r; ++ tmp1_l = tmp0_l; ++ tmp0_r = __lsx_vadd_w(tmp0_r, sum0_r); ++ tmp0_l = __lsx_vadd_w(tmp0_l, sum0_l); ++ sum1_r = __lsx_vreplgr2vr_w(round); ++ tmp0_r = __lsx_vssrarn_h_w(tmp0_r, sum1_r); ++ tmp0_l = __lsx_vssrarn_h_w(tmp0_l, sum1_r); ++ in0 = __lsx_vpackev_d(tmp0_l, tmp0_r); ++ __lsx_vst(in0, (coeffs + i * buf_pitch), 0); ++ tmp1_r = __lsx_vsub_w(tmp1_r, sum0_r); ++ tmp1_l = __lsx_vsub_w(tmp1_l, sum0_l); ++ tmp1_r = __lsx_vssrarn_h_w(tmp1_r, sum1_r); ++ tmp1_l = __lsx_vssrarn_h_w(tmp1_l, sum1_r); ++ in0 = __lsx_vpackev_d(tmp1_l, tmp1_r); ++ __lsx_vst(in0, (coeffs + (31 - i) * buf_pitch), 0); ++ ++ filter_ptr0 += 16; ++ } ++} ++ ++static void hevc_idct_transpose_32x8_to_8x32(int16_t *coeffs, int16_t *tmp_buf) ++{ ++ uint8_t i; ++ __m128i in0, in1, in2, in3, in4, in5, in6, in7; ++ ++ for (i = 0; i < 4; i++) { ++ LSX_DUP4_ARG2(__lsx_vld, coeffs, 0, coeffs, 64, coeffs, 128, ++ coeffs, 192, in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vld, coeffs, 256, coeffs, 320, coeffs, 384, ++ coeffs, 448, in4, in5, in6, in7); ++ coeffs += 8; ++ TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, ++ in0, in1, in2, in3, in4, in5, in6, in7); ++ __lsx_vst(in0, tmp_buf, 0); ++ __lsx_vst(in1, tmp_buf, 16); ++ __lsx_vst(in2, tmp_buf, 32); ++ __lsx_vst(in3, tmp_buf, 48); ++ __lsx_vst(in4, tmp_buf, 64); ++ __lsx_vst(in5, tmp_buf, 80); ++ __lsx_vst(in6, tmp_buf, 96); ++ __lsx_vst(in7, tmp_buf, 112); ++ tmp_buf += 64; ++ } ++} ++ ++static void hevc_idct_transpose_8x32_to_32x8(int16_t *tmp_buf, int16_t *coeffs) ++{ ++ uint8_t i; ++ __m128i in0, in1, in2, in3, in4, in5, in6, in7; ++ ++ for (i = 0; i < 4; i++) { ++ LSX_DUP4_ARG2(__lsx_vld, tmp_buf, 0, tmp_buf, 16, tmp_buf, 32, ++ tmp_buf, 48, in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vld, tmp_buf, 64, tmp_buf, 80, tmp_buf, 96, ++ tmp_buf, 112, in4, in5, in6, in7); ++ tmp_buf += 64; ++ TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, ++ in0, in1, in2, in3, in4, in5, in6, in7); ++ __lsx_vst(in0, coeffs, 0); ++ __lsx_vst(in1, coeffs, 64); ++ __lsx_vst(in2, coeffs, 128); ++ __lsx_vst(in3, coeffs, 192); ++ __lsx_vst(in4, coeffs, 256); ++ __lsx_vst(in5, coeffs, 320); ++ __lsx_vst(in6, coeffs, 384); ++ __lsx_vst(in7, coeffs, 448); ++ coeffs += 8; ++ } ++} ++ ++static void hevc_idct_32x32_lsx(int16_t *coeffs) ++{ ++ uint8_t row_cnt, col_cnt; ++ int16_t *src = coeffs; ++ int16_t tmp_buf[8 * 32 + 31]; ++ int16_t *tmp_buf_ptr = tmp_buf + 31; ++ uint8_t round; ++ uint8_t buf_pitch; ++ ++ /* Align pointer to 64 byte boundary */ ++ tmp_buf_ptr = (int16_t *)(((uintptr_t) tmp_buf_ptr) & ~(uintptr_t) 63); ++ ++ /* column transform */ ++ round = 7; ++ buf_pitch = 32; ++ for (col_cnt = 0; col_cnt < 4; col_cnt++) { ++ /* process 8x32 blocks */ ++ hevc_idct_8x32_column_lsx((coeffs + col_cnt * 8), buf_pitch, round); ++ } ++ ++ /* row transform */ ++ round = 12; ++ buf_pitch = 8; ++ for (row_cnt = 0; row_cnt < 4; row_cnt++) { ++ /* process 32x8 blocks */ ++ src = (coeffs + 32 * 8 * row_cnt); ++ ++ hevc_idct_transpose_32x8_to_8x32(src, tmp_buf_ptr); ++ hevc_idct_8x32_column_lsx(tmp_buf_ptr, buf_pitch, round); ++ hevc_idct_transpose_8x32_to_32x8(tmp_buf_ptr, src); ++ } ++} ++ ++void ff_hevc_idct_4x4_lsx(int16_t *coeffs, int col_limit) ++{ ++ hevc_idct_4x4_lsx(coeffs); ++} ++ ++void ff_hevc_idct_8x8_lsx(int16_t *coeffs, int col_limit) ++{ ++ hevc_idct_8x8_lsx(coeffs); ++} ++ ++void ff_hevc_idct_16x16_lsx(int16_t *coeffs, int col_limit) ++{ ++ hevc_idct_16x16_lsx(coeffs); ++} ++ ++void ff_hevc_idct_32x32_lsx(int16_t *coeffs, int col_limit) ++{ ++ hevc_idct_32x32_lsx(coeffs); ++} +diff --git a/libavcodec/loongarch/hevc_lpf_sao_lsx.c b/libavcodec/loongarch/hevc_lpf_sao_lsx.c +new file mode 100644 +index 0000000000..01b22085ed +--- /dev/null ++++ b/libavcodec/loongarch/hevc_lpf_sao_lsx.c +@@ -0,0 +1,2422 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Lu Wang ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/loongarch/generic_macros_lsx.h" ++#include "hevcdsp_lsx.h" ++ ++static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, ++ int32_t beta, int32_t *tc, ++ uint8_t *p_is_pcm, uint8_t *q_is_pcm) ++{ ++ uint8_t *p3 = src - (stride << 2); ++ uint8_t *p2 = src - ((stride << 1) + stride); ++ uint8_t *p1 = src - (stride << 1); ++ uint8_t *p0 = src - stride; ++ uint8_t *q0 = src; ++ uint8_t *q1 = src + stride; ++ uint8_t *q2 = src + (stride << 1); ++ uint8_t *q3 = src + (stride << 1) + stride; ++ uint8_t flag0, flag1; ++ int32_t dp00, dq00, dp30, dq30, d00, d30, d0030, d0434; ++ int32_t dp04, dq04, dp34, dq34, d04, d34; ++ int32_t tc0, p_is_pcm0, q_is_pcm0, beta30, beta20, tc250; ++ int32_t tc4, p_is_pcm4, q_is_pcm4, tc254, tmp; ++ const int32_t stride_2x = (stride << 1); ++ const int32_t stride_4x = (stride << 2); ++ const int32_t stride_3x = stride_2x + stride; ++ ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5; ++ __m128i cmp0, cmp1, cmp2, cmp3, p_is_pcm_vec, q_is_pcm_vec; ++ __m128i temp0, temp1; ++ __m128i temp2, tc_pos, tc_neg; ++ __m128i diff0, diff1, delta0, delta1, delta2, abs_delta0; ++ __m128i zero = {0}; ++ __m128i p3_src, p2_src, p1_src, p0_src, q0_src, q1_src, q2_src, q3_src; ++ ++ dp00 = abs(p2[0] - (p1[0] << 1) + p0[0]); ++ dq00 = abs(q2[0] - (q1[0] << 1) + q0[0]); ++ dp30 = abs(p2[3] - (p1[3] << 1) + p0[3]); ++ dq30 = abs(q2[3] - (q1[3] << 1) + q0[3]); ++ d00 = dp00 + dq00; ++ d30 = dp30 + dq30; ++ dp04 = abs(p2[4] - (p1[4] << 1) + p0[4]); ++ dq04 = abs(q2[4] - (q1[4] << 1) + q0[4]); ++ dp34 = abs(p2[7] - (p1[7] << 1) + p0[7]); ++ dq34 = abs(q2[7] - (q1[7] << 1) + q0[7]); ++ d04 = dp04 + dq04; ++ d34 = dp34 + dq34; ++ ++ p_is_pcm0 = p_is_pcm[0]; ++ p_is_pcm4 = p_is_pcm[1]; ++ q_is_pcm0 = q_is_pcm[0]; ++ q_is_pcm4 = q_is_pcm[1]; ++ ++ LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, p_is_pcm0, p_is_pcm4, cmp0, cmp1); ++ p_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); ++ p_is_pcm_vec = __lsx_vseqi_d(p_is_pcm_vec, 0); ++ d0030 = (d00 + d30) >= beta; ++ d0434 = (d04 + d34) >= beta; ++ LSX_DUP2_ARG1(__lsx_vreplgr2vr_w, d0030, d0434, cmp0, cmp1); ++ cmp3 = __lsx_vpackev_w(cmp1, cmp0); ++ cmp3 = __lsx_vseqi_w(cmp3, 0); ++ ++ if ((!p_is_pcm0 || !p_is_pcm4 || !q_is_pcm0 || !q_is_pcm4) && ++ (!d0030 || !d0434)) { ++ LSX_DUP4_ARG2(__lsx_vld, p3, 0, p2, 0, p1, 0, p0, 0, p3_src, p2_src, p1_src, ++ p0_src); ++ LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, q_is_pcm0, q_is_pcm4, cmp0, cmp1); ++ q_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); ++ q_is_pcm_vec = __lsx_vseqi_d(q_is_pcm_vec, 0); ++ ++ tc0 = tc[0]; ++ beta30 = beta >> 3; ++ beta20 = beta >> 2; ++ tc250 = (((tc0 << 2) + tc0 + 1) >> 1); ++ tc4 = tc[1]; ++ tc254 = (((tc4 << 2) + tc4 + 1) >> 1); ++ ++ LSX_DUP2_ARG1(__lsx_vreplgr2vr_h, tc0, tc4, cmp0, cmp1); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3_src, zero, p2_src, zero, p1_src, zero, ++ p0_src, p3_src, p2_src, p1_src, p0_src); ++ LSX_DUP4_ARG2(__lsx_vld, q0, 0, q1, 0, q2, 0, q3, 0, q0_src, q1_src, q2_src, ++ q3_src); ++ flag0 = abs(p3[0] - p0[0]) + abs(q3[0] - q0[0]) < beta30 && abs(p0[0] - q0[0]) ++ < tc250; ++ flag0 = flag0 && (abs(p3[3] - p0[3]) + abs(q3[3] - q0[3]) < beta30 && ++ abs(p0[3] - q0[3]) < tc250 && (d00 << 1) < beta20 && (d30 << 1) < beta20); ++ tc_pos = __lsx_vpackev_d(cmp1, cmp0); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0_src, zero, q1_src, zero, q2_src, zero, ++ q3_src, q0_src, q1_src, q2_src, q3_src); ++ ++ flag1 = abs(p3[4] - p0[4]) + abs(q3[4] - q0[4]) < beta30 && abs(p0[4] - q0[4]) ++ < tc254; ++ flag1 = flag1 && (abs(p3[7] - p0[7]) + abs(q3[7] - q0[7]) < beta30 && ++ abs(p0[7] - q0[7]) < tc254 && (d04 << 1) < beta20 && (d34 << 1) < beta20); ++ LSX_DUP2_ARG1(__lsx_vreplgr2vr_w, flag0, flag1, cmp0, cmp1); ++ cmp2 = __lsx_vpackev_w(cmp1, cmp0); ++ cmp2 = __lsx_vseqi_w(cmp2, 0); ++ ++ if (flag0 && flag1) { /* strong only */ ++ /* strong filter */ ++ tc_pos = __lsx_vslli_h(tc_pos, 1); ++ tc_neg = __lsx_vneg_h(tc_pos); ++ ++ /* p part */ ++ LSX_DUP2_ARG2(__lsx_vadd_h, p1_src, p0_src, temp0, q0_src, temp0, temp0); ++ temp1 = __lsx_vadd_h(p3_src, p2_src); ++ temp1 = __lsx_vslli_h(temp1, 1); ++ LSX_DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, temp0, temp1, temp1); ++ temp1 = __lsx_vsrari_h(temp1, 3); ++ temp2 = __lsx_vsub_h(temp1, p2_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst0 = __lsx_vadd_h(temp2, p2_src); ++ ++ temp1 = __lsx_vadd_h(temp0, p2_src); ++ temp1 = __lsx_vsrari_h(temp1, 2); ++ temp2 = __lsx_vsub_h(temp1, p1_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst1 = __lsx_vadd_h(temp2, p1_src); ++ ++ temp1 = __lsx_vslli_h(temp0, 1); ++ LSX_DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, q1_src, temp1, temp1); ++ temp1 = __lsx_vsrari_h(temp1, 3); ++ temp2 = __lsx_vsub_h(temp1, p0_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst2 = __lsx_vadd_h(temp2, p0_src); ++ ++ p_is_pcm_vec = __lsx_vnor_v(p_is_pcm_vec, p_is_pcm_vec); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, dst0, p2_src, p_is_pcm_vec, dst1, p1_src, ++ p_is_pcm_vec, dst0, dst1); ++ dst2 = __lsx_vbitsel_v(dst2, p0_src, p_is_pcm_vec); ++ ++ /* q part */ ++ LSX_DUP2_ARG2(__lsx_vadd_h, q1_src, p0_src, temp0, q0_src, temp0, temp0); ++ temp1 = __lsx_vadd_h(q3_src, q2_src); ++ temp1 = __lsx_vslli_h(temp1, 1); ++ LSX_DUP2_ARG2(__lsx_vadd_h, temp1, q2_src, temp1, temp0, temp1, temp1); ++ temp1 = __lsx_vsrari_h(temp1, 3); ++ temp2 = __lsx_vsub_h(temp1, q2_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst5 = __lsx_vadd_h(temp2, q2_src); ++ ++ temp1 = __lsx_vadd_h(temp0, q2_src); ++ temp1 = __lsx_vsrari_h(temp1, 2); ++ temp2 = __lsx_vsub_h(temp1, q1_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst4 = __lsx_vadd_h(temp2, q1_src); ++ ++ temp0 = __lsx_vslli_h(temp0, 1); ++ LSX_DUP2_ARG2(__lsx_vadd_h, temp0, p1_src, temp1, q2_src, temp1, temp1); ++ temp1 = __lsx_vsrari_h(temp1, 3); ++ temp2 = __lsx_vsub_h(temp1, q0_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst3 = __lsx_vadd_h(temp2, q0_src); ++ ++ q_is_pcm_vec = __lsx_vnor_v(q_is_pcm_vec, q_is_pcm_vec); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, dst3, q0_src, q_is_pcm_vec, dst4, q1_src, ++ q_is_pcm_vec, dst3, dst4); ++ dst5 = __lsx_vbitsel_v(dst5, q2_src, q_is_pcm_vec); ++ ++ /* pack results to 8 bit */ ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); ++ dst2 = __lsx_vpickev_b(dst5, dst4); ++ ++ /* pack src to 8 bit */ ++ LSX_DUP2_ARG2(__lsx_vpickev_b, p1_src, p2_src, q0_src, p0_src, dst3, dst4); ++ dst5 = __lsx_vpickev_b(q2_src, q1_src); ++ ++ cmp3 = __lsx_vnor_v(cmp3, cmp3); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, dst0, dst3, cmp3, dst1, dst4, cmp3, dst0, dst1); ++ dst2 = __lsx_vbitsel_v(dst2, dst5, cmp3); ++ ++ __lsx_vstelm_d(dst0, p2, 0, 0); ++ __lsx_vstelm_d(dst0, p2 + stride, 0, 1); ++ __lsx_vstelm_d(dst1, p2 + stride_2x, 0, 0); ++ __lsx_vstelm_d(dst1, p2 + stride_3x, 0, 1); ++ __lsx_vstelm_d(dst2, p2 + stride_4x, 0, 0); ++ __lsx_vstelm_d(dst2, p2 + stride_4x + stride, 0, 1); ++ /* strong filter ends */ ++ } else if (flag0 == flag1) { /* weak only */ ++ /* weak filter */ ++ tc_neg = __lsx_vneg_h(tc_pos); ++ LSX_DUP2_ARG2(__lsx_vsub_h, q0_src, p0_src, q1_src, p1_src, diff0, diff1); ++ LSX_DUP2_ARG2(__lsx_vadd_h, __lsx_vslli_h(diff0, 3), diff0, __lsx_vslli_h( ++ diff1, 1), diff1, diff0, diff1); ++ delta0 = __lsx_vsub_h(diff0, diff1); ++ delta0 = __lsx_vsrari_h(delta0, 4); ++ temp1 = __lsx_vadd_h(__lsx_vslli_h(tc_pos, 3), __lsx_vslli_h(tc_pos, 1)); ++ abs_delta0 = __lsx_vadda_h(delta0, zero); ++ abs_delta0 = __lsx_vsle_hu(temp1, abs_delta0); ++ abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); ++ ++ delta0 = __lsx_clip_h(delta0, tc_neg, tc_pos); ++ temp2 = __lsx_vadd_h(delta0, p0_src); ++ temp2 = __lsx_clamp255_h(temp2); ++ temp0 = __lsx_vbitsel_v(temp2, p0_src, __lsx_vnor_v(p_is_pcm_vec, ++ p_is_pcm_vec)); ++ temp2 = __lsx_vsub_h(q0_src, delta0); ++ temp2 = __lsx_clamp255_h(temp2); ++ temp2 = __lsx_vbitsel_v(temp2, q0_src, __lsx_vnor_v(q_is_pcm_vec, ++ q_is_pcm_vec)); ++ LSX_DUP2_ARG2(__lsx_vnor_v, p_is_pcm_vec, p_is_pcm_vec, q_is_pcm_vec, ++ q_is_pcm_vec, p_is_pcm_vec, q_is_pcm_vec); ++ ++ tmp = (beta + (beta >> 1)) >> 3; ++ LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, dp00 + dp30 < tmp, dp04 + dp34 < tmp, ++ cmp0, cmp1); ++ cmp0 = __lsx_vpackev_d(cmp1, cmp0); ++ cmp0 = __lsx_vseqi_d(cmp0, 0); ++ p_is_pcm_vec = __lsx_vor_v(p_is_pcm_vec, cmp0); ++ ++ LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, dq00 + dq30 < tmp, dq04 + dq34 < tmp, ++ cmp0, cmp1); ++ cmp0 = __lsx_vpackev_d(cmp1, cmp0); ++ cmp0 = __lsx_vseqi_d(cmp0, 0); ++ q_is_pcm_vec = __lsx_vor_v(q_is_pcm_vec, cmp0); ++ tc_pos = __lsx_vsrai_h(tc_pos, 1); ++ tc_neg = __lsx_vneg_h(tc_pos); ++ ++ LSX_DUP2_ARG2(__lsx_vavgr_hu, p2_src, p0_src, q0_src, q2_src, delta1, delta2); ++ LSX_DUP2_ARG2(__lsx_vsub_h, delta1, p1_src, delta2, q1_src, delta1, delta2); ++ delta1 = __lsx_vadd_h(delta1, delta0); ++ delta2 = __lsx_vsub_h(delta2, delta0); ++ LSX_DUP2_ARG2(__lsx_vsrai_h, delta1, 1, delta2, 1, delta1, delta2); ++ LSX_DUP2_ARG3(__lsx_clip_h, delta1, tc_neg, tc_pos, delta2, tc_neg, tc_pos, ++ delta1, delta2); ++ LSX_DUP2_ARG2(__lsx_vadd_h, p1_src, delta1, q1_src, delta2, delta1, delta2); ++ LSX_DUP2_ARG1(__lsx_clamp255_h, delta1, delta2, delta1, delta2); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, delta1, p1_src, p_is_pcm_vec, delta2, q1_src, ++ q_is_pcm_vec, delta1, delta2); ++ ++ abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); ++ LSX_DUP4_ARG3(__lsx_vbitsel_v, delta1, p1_src, abs_delta0, temp0, p0_src, ++ abs_delta0, temp2, q0_src, abs_delta0, delta2, q1_src, ++ abs_delta0, dst1, dst2, dst3, dst4); ++ /* pack results to 8 bit */ ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst2, dst1, dst4, dst3, dst0, dst1); ++ /* pack src to 8 bit */ ++ LSX_DUP2_ARG2(__lsx_vpickev_b, p0_src, p1_src, q1_src, q0_src, dst2, dst3); ++ cmp3 = __lsx_vnor_v(cmp3, cmp3); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, dst0, dst2, cmp3, dst1, dst3, cmp3, dst0, ++ dst1); ++ ++ p2 += stride; ++ __lsx_vstelm_d(dst0, p2, 0, 0); ++ __lsx_vstelm_d(dst0, p2 + stride, 0, 1); ++ __lsx_vstelm_d(dst1, p2 + stride_2x, 0, 0); ++ __lsx_vstelm_d(dst1, p2 + stride_3x, 0, 1); ++ /* weak filter ends */ ++ } else { /* strong + weak */ ++ /* strong filter */ ++ tc_pos = __lsx_vslli_h(tc_pos, 1); ++ tc_neg = __lsx_vneg_h(tc_pos); ++ ++ /* p part */ ++ LSX_DUP2_ARG2(__lsx_vadd_h, p1_src, p0_src, temp0, q0_src, temp0, temp0); ++ temp1 = __lsx_vadd_h(p3_src, p2_src); ++ temp1 = __lsx_vslli_h(temp1, 1); ++ LSX_DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, temp0, temp1, temp1); ++ temp1 = __lsx_vsrari_h(temp1, 3); ++ temp2 = __lsx_vsub_h(temp1, p2_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst0 = __lsx_vadd_h(temp2, p2_src); ++ ++ temp1 = __lsx_vadd_h(temp0, p2_src); ++ temp1 = __lsx_vsrari_h(temp1, 2); ++ temp2 = __lsx_vsub_h(temp1, p1_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst1 = __lsx_vadd_h(temp2, p1_src); ++ ++ temp1 = __lsx_vslli_h(temp0, 1); ++ LSX_DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, q1_src, temp1, temp1); ++ temp1 = __lsx_vsrari_h(temp1, 3); ++ temp2 = __lsx_vsub_h(temp1, p0_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst2 = __lsx_vadd_h(temp2, p0_src); ++ ++ p_is_pcm_vec = __lsx_vnor_v(p_is_pcm_vec, p_is_pcm_vec); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, dst0, p2_src, p_is_pcm_vec, dst1, p1_src, ++ p_is_pcm_vec, dst0, dst1); ++ dst2 = __lsx_vbitsel_v(dst2, p0_src, p_is_pcm_vec); ++ ++ /* q part */ ++ LSX_DUP2_ARG2(__lsx_vadd_h, q1_src, p0_src, temp0, q0_src, temp0, temp0); ++ temp1 = __lsx_vadd_h(q3_src, q2_src); ++ temp1 = __lsx_vslli_h(temp1, 1); ++ LSX_DUP2_ARG2(__lsx_vadd_h, temp1, q2_src, temp1, temp0, temp1, temp1); ++ temp1 = __lsx_vsrari_h(temp1, 3); ++ temp2 = __lsx_vsub_h(temp1, q2_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst5 = __lsx_vadd_h(temp2, q2_src); ++ ++ temp1 = __lsx_vadd_h(temp0, q2_src); ++ temp1 = __lsx_vsrari_h(temp1, 2); ++ temp2 = __lsx_vsub_h(temp1, q1_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst4 = __lsx_vadd_h(temp2, q1_src); ++ ++ temp1 = __lsx_vslli_h(temp0, 1); ++ LSX_DUP2_ARG2(__lsx_vadd_h, temp1, p1_src, temp1, q2_src, temp1, temp1); ++ temp1 = __lsx_vsrari_h(temp1, 3); ++ temp2 = __lsx_vsub_h(temp1, q0_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst3 = __lsx_vadd_h(temp2, q0_src); ++ ++ q_is_pcm_vec = __lsx_vnor_v(q_is_pcm_vec, q_is_pcm_vec); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, dst3, q0_src, q_is_pcm_vec, dst4, q1_src, ++ q_is_pcm_vec, dst3, dst4); ++ dst5 = __lsx_vbitsel_v(dst5, q2_src, q_is_pcm_vec); ++ ++ /* pack strong results to 8 bit */ ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); ++ dst2 = __lsx_vpickev_b(dst5, dst4); ++ /* strong filter ends */ ++ ++ /* weak filter */ ++ tc_pos = __lsx_vsrai_h(tc_pos, 1); ++ tc_neg = __lsx_vneg_h(tc_pos); ++ ++ LSX_DUP2_ARG2(__lsx_vsub_h, q0_src, p0_src, q1_src, p1_src, diff0, diff1); ++ LSX_DUP2_ARG2(__lsx_vadd_h, __lsx_vslli_h(diff0, 3), diff0, __lsx_vslli_h( ++ diff1, 1), diff1, diff0, diff1); ++ delta0 = __lsx_vsub_h(diff0, diff1); ++ delta0 = __lsx_vsrari_h(delta0, 4); ++ temp1 = __lsx_vadd_h(__lsx_vslli_h(tc_pos, 3), __lsx_vslli_h(tc_pos, 1)); ++ abs_delta0 = __lsx_vadda_h(delta0, zero); ++ abs_delta0 = __lsx_vsle_hu(temp1, abs_delta0); ++ abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); ++ ++ delta0 = __lsx_clip_h(delta0, tc_neg, tc_pos); ++ temp2 = __lsx_vadd_h(delta0, p0_src); ++ temp2 = __lsx_clamp255_h(temp2); ++ temp0 = __lsx_vbitsel_v(temp2, p0_src, p_is_pcm_vec); ++ ++ temp2 = __lsx_vsub_h(q0_src, delta0); ++ temp2 = __lsx_clamp255_h(temp2); ++ temp2 = __lsx_vbitsel_v(temp2, q0_src, q_is_pcm_vec); ++ ++ tmp = (beta + (beta >> 1)) >> 3; ++ LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, dp00 + dp30 < tmp, dp04 + dp34 < tmp, ++ cmp0, cmp1); ++ cmp0 = __lsx_vpackev_d(cmp1, cmp0); ++ p_is_pcm_vec = __lsx_vor_v(p_is_pcm_vec, __lsx_vseqi_d(cmp0, 0)); ++ LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, dq00 + dq30 < tmp, dq04 + dq34 < tmp, ++ cmp0, cmp1); ++ cmp0 = __lsx_vpackev_d(cmp1, cmp0); ++ q_is_pcm_vec = __lsx_vor_v(q_is_pcm_vec, __lsx_vseqi_d(cmp0, 0)); ++ ++ tc_pos = __lsx_vsrai_h(tc_pos, 1); ++ tc_neg = __lsx_vneg_h(tc_pos); ++ ++ LSX_DUP2_ARG2(__lsx_vavgr_hu, p2_src, p0_src, q0_src, q2_src, delta1, delta2); ++ LSX_DUP2_ARG2(__lsx_vsub_h, delta1, p1_src, delta2, q1_src, delta1, delta2); ++ delta1 = __lsx_vadd_h(delta1, delta0); ++ delta2 = __lsx_vsub_h(delta2, delta0); ++ LSX_DUP2_ARG2(__lsx_vsrai_h, delta1, 1, delta2, 1, delta1, delta2); ++ LSX_DUP2_ARG3(__lsx_clip_h, delta1, tc_neg, tc_pos, delta2, tc_neg, tc_pos, ++ delta1, delta2); ++ LSX_DUP2_ARG2(__lsx_vadd_h, p1_src, delta1, q1_src, delta2, delta1, delta2); ++ LSX_DUP2_ARG1(__lsx_clamp255_h, delta1, delta2, delta1, delta2); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, delta1, p1_src, p_is_pcm_vec, delta2, q1_src, ++ q_is_pcm_vec, delta1, delta2); ++ abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); ++ LSX_DUP4_ARG3(__lsx_vbitsel_v, delta1, p1_src, abs_delta0, delta2, q1_src, ++ abs_delta0, temp0, p0_src, abs_delta0, temp2, q0_src, ++ abs_delta0, delta1, delta2, temp0, temp2); ++ /* weak filter ends */ ++ ++ /* pack weak results to 8 bit */ ++ LSX_DUP2_ARG2(__lsx_vpickev_b, delta1, p2_src, temp2, temp0, dst3, dst4); ++ dst5 = __lsx_vpickev_b(q2_src, delta2); ++ ++ /* select between weak or strong */ ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, dst0, dst3, cmp2, dst1, dst4, cmp2, dst0, dst1); ++ dst2 = __lsx_vbitsel_v(dst2, dst5, cmp2); ++ ++ /* pack src to 8 bit */ ++ LSX_DUP2_ARG2(__lsx_vpickev_b, p1_src, p2_src, q0_src, p0_src, dst3, dst4); ++ dst5 = __lsx_vpickev_b(q2_src, q1_src); ++ ++ cmp3 = __lsx_vnor_v(cmp3, cmp3); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, dst0, dst3, cmp3, dst1, dst4, cmp3, dst0, dst1); ++ dst2 = __lsx_vbitsel_v(dst2, dst5, cmp3); ++ ++ __lsx_vstelm_d(dst0, p2, 0, 0); ++ __lsx_vstelm_d(dst0, p2 + stride, 0, 1); ++ __lsx_vstelm_d(dst1, p2 + stride_2x, 0, 0); ++ __lsx_vstelm_d(dst1, p2 + stride_3x, 0, 1); ++ __lsx_vstelm_d(dst2, p2 + stride_4x, 0, 0); ++ __lsx_vstelm_d(dst2, p2 + stride_4x + stride, 0, 1); ++ } ++ } ++} ++ ++static void hevc_loopfilter_luma_ver_lsx(uint8_t *src, int32_t stride, ++ int32_t beta, int32_t *tc, ++ uint8_t *p_is_pcm, uint8_t *q_is_pcm) ++{ ++ const int32_t stride_2x = (stride << 1); ++ const int32_t stride_4x = (stride << 2); ++ const int32_t stride_3x = stride_2x + stride; ++ uint8_t *p3 = src; ++ uint8_t *p2 = src + stride_3x; ++ uint8_t *p1 = src + stride_4x; ++ uint8_t *p0 = src + stride_4x + stride_3x; ++ uint8_t flag0, flag1; ++ int32_t dp00, dq00, dp30, dq30, d00, d30; ++ int32_t d0030, d0434; ++ int32_t dp04, dq04, dp34, dq34, d04, d34; ++ int32_t tc0, p_is_pcm0, q_is_pcm0, beta30, beta20, tc250; ++ int32_t tc4, p_is_pcm4, q_is_pcm4, tc254, tmp; ++ ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; ++ __m128i cmp0, cmp1, cmp2, p_is_pcm_vec, q_is_pcm_vec; ++ __m128i cmp3; ++ __m128i temp0, temp1; ++ __m128i temp2; ++ __m128i tc_pos, tc_neg; ++ __m128i diff0, diff1, delta0, delta1, delta2, abs_delta0; ++ __m128i zero = {0}; ++ __m128i p3_src, p2_src, p1_src, p0_src, q0_src, q1_src, q2_src, q3_src; ++ ++ dp00 = abs(p3[-3] - (p3[-2] << 1) + p3[-1]); ++ dq00 = abs(p3[2] - (p3[1] << 1) + p3[0]); ++ dp30 = abs(p2[-3] - (p2[-2] << 1) + p2[-1]); ++ dq30 = abs(p2[2] - (p2[1] << 1) + p2[0]); ++ d00 = dp00 + dq00; ++ d30 = dp30 + dq30; ++ p_is_pcm0 = p_is_pcm[0]; ++ q_is_pcm0 = q_is_pcm[0]; ++ ++ dp04 = abs(p1[-3] - (p1[-2] << 1) + p1[-1]); ++ dq04 = abs(p1[2] - (p1[1] << 1) + p1[0]); ++ dp34 = abs(p0[-3] - (p0[-2] << 1) + p0[-1]); ++ dq34 = abs(p0[2] - (p0[1] << 1) + p0[0]); ++ d04 = dp04 + dq04; ++ d34 = dp34 + dq34; ++ p_is_pcm4 = p_is_pcm[1]; ++ q_is_pcm4 = q_is_pcm[1]; ++ ++ LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, p_is_pcm0, p_is_pcm4, cmp0, cmp1); ++ p_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); ++ p_is_pcm_vec = __lsx_vseqi_d(p_is_pcm_vec, 0); ++ ++ d0030 = (d00 + d30) >= beta; ++ d0434 = (d04 + d34) >= beta; ++ ++ LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, d0030, d0434, cmp0, cmp1); ++ cmp3 = __lsx_vpackev_d(cmp1, cmp0); ++ cmp3 = __lsx_vseqi_d(cmp3, 0); ++ ++ if ((!p_is_pcm0 || !p_is_pcm4 || !q_is_pcm0 || !q_is_pcm4) && ++ (!d0030 || !d0434)) { ++ src -= 4; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + stride, 0, src + stride_2x, 0, ++ src + stride_3x, 0, p3_src, p2_src, p1_src, p0_src); ++ src += stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + stride, 0, src + stride_2x, 0, ++ src + stride_3x, 0, q0_src, q1_src, q2_src, q3_src); ++ src -= stride_4x; ++ ++ LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, q_is_pcm0, q_is_pcm4, cmp0, cmp1); ++ q_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); ++ q_is_pcm_vec = __lsx_vseqi_d(q_is_pcm_vec, 0); ++ ++ tc0 = tc[0]; ++ beta30 = beta >> 3; ++ beta20 = beta >> 2; ++ tc250 = (((tc0 << 2) + tc0 + 1) >> 1); ++ tc4 = tc[1]; ++ tc254 = (((tc4 << 2) + tc4 + 1) >> 1); ++ LSX_DUP2_ARG1( __lsx_vreplgr2vr_h, tc0 << 1, tc4 << 1, cmp0, cmp1); ++ tc_pos = __lsx_vpackev_d(cmp1, cmp0); ++ TRANSPOSE8x8_B(p3_src, p2_src, p1_src, p0_src, q0_src, q1_src, ++ q2_src, q3_src, p3_src, p2_src, p1_src, p0_src, ++ q0_src, q1_src, q2_src, q3_src); ++ ++ flag0 = abs(p3[-4] - p3[-1]) + abs(p3[3] - p3[0]) < beta30 && ++ abs(p3[-1] - p3[0]) < tc250; ++ flag0 = flag0 && (abs(p2[-4] - p2[-1]) + abs(p2[3] - p2[0]) < beta30 && ++ abs(p2[-1] - p2[0]) < tc250 && (d00 << 1) < beta20 && ++ (d30 << 1) < beta20); ++ cmp0 = __lsx_vreplgr2vr_d(flag0); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3_src, zero, p2_src, zero, p1_src, zero, ++ p0_src, p3_src, p2_src, p1_src, p0_src); ++ ++ flag1 = abs(p1[-4] - p1[-1]) + abs(p1[3] - p1[0]) < beta30 && ++ abs(p1[-1] - p1[0]) < tc254; ++ flag1 = flag1 && (abs(p0[-4] - p0[-1]) + abs(p0[3] - p0[0]) < beta30 && ++ abs(p0[-1] - p0[0]) < tc254 && (d04 << 1) < beta20 && ++ (d34 << 1) < beta20); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0_src, zero, q1_src, zero, q2_src, zero, ++ q3_src, q0_src, q1_src, q2_src, q3_src); ++ ++ cmp1 = __lsx_vreplgr2vr_d(flag1); ++ cmp2 = __lsx_vpackev_d(cmp1, cmp0); ++ cmp2 = __lsx_vseqi_d(cmp2, 0); ++ ++ if (flag0 && flag1) { /* strong only */ ++ /* strong filter */ ++ tc_neg = __lsx_vneg_h(tc_pos); ++ /* p part */ ++ LSX_DUP2_ARG2(__lsx_vadd_h, p1_src, p0_src, temp0, q0_src, temp0, temp0); ++ ++ temp1 = __lsx_vadd_h(p3_src, p2_src); ++ temp1 = __lsx_vslli_h(temp1, 1); ++ LSX_DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, temp0, temp1, temp1); ++ temp1 = __lsx_vsrari_h(temp1, 3); ++ temp2 = __lsx_vsub_h(temp1, p2_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst0 = __lsx_vadd_h(temp2, p2_src); ++ ++ temp1 = __lsx_vadd_h(temp0, p2_src); ++ temp1 = __lsx_vsrari_h(temp1, 2); ++ temp2 = __lsx_vsub_h(temp1, p1_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst1 = __lsx_vadd_h(temp2, p1_src); ++ ++ temp1 = __lsx_vslli_h(temp0, 1); ++ LSX_DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, q1_src, temp1, temp1); ++ temp1 = __lsx_vsrari_h(temp1, 3); ++ temp2 = __lsx_vsub_h(temp1, p0_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst2 = __lsx_vadd_h(temp2, p0_src); ++ ++ p_is_pcm_vec = __lsx_vnor_v(p_is_pcm_vec, p_is_pcm_vec); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, dst0, p2_src, p_is_pcm_vec, dst1, p1_src, ++ p_is_pcm_vec, dst0, dst1); ++ dst2 = __lsx_vbitsel_v(dst2, p0_src, p_is_pcm_vec); ++ ++ /* q part */ ++ LSX_DUP2_ARG2(__lsx_vadd_h, q1_src, p0_src, temp0, q0_src, temp0, temp0); ++ temp1 = __lsx_vadd_h(q3_src, q2_src); ++ temp1 = __lsx_vslli_h(temp1, 1); ++ LSX_DUP2_ARG2(__lsx_vadd_h, temp1, q2_src, temp1, temp0, temp1, temp1); ++ temp1 = __lsx_vsrari_h(temp1, 3); ++ temp2 = __lsx_vsub_h(temp1, q2_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst5 = __lsx_vadd_h(temp2, q2_src); ++ ++ temp1 = __lsx_vadd_h(temp0, q2_src); ++ temp1 = __lsx_vsrari_h(temp1, 2); ++ temp2 = __lsx_vsub_h(temp1, q1_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst4 = __lsx_vadd_h(temp2, q1_src); ++ ++ temp1 = __lsx_vslli_h(temp0, 1); ++ LSX_DUP2_ARG2(__lsx_vadd_h, temp1, p1_src, temp1, q2_src, temp1, temp1); ++ temp1 = __lsx_vsrari_h(temp1, 3); ++ temp2 = __lsx_vsub_h(temp1, q0_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst3 = __lsx_vadd_h(temp2, q0_src); ++ ++ q_is_pcm_vec = __lsx_vnor_v(q_is_pcm_vec, q_is_pcm_vec); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, dst3, q0_src, q_is_pcm_vec, dst4, q1_src, ++ q_is_pcm_vec, dst3, dst4); ++ dst5 = __lsx_vbitsel_v(dst5, q2_src, q_is_pcm_vec); ++ /* strong filter ends */ ++ } else if (flag0 == flag1) { /* weak only */ ++ /* weak filter */ ++ tc_pos = __lsx_vsrai_h(tc_pos, 1); ++ tc_neg = __lsx_vneg_h(tc_pos); ++ ++ LSX_DUP2_ARG2(__lsx_vsub_h, q0_src, p0_src, q1_src, p1_src, diff0, diff1); ++ LSX_DUP2_ARG2(__lsx_vadd_h, __lsx_vslli_h(diff0, 3), diff0, __lsx_vslli_h( ++ diff1, 1), diff1, diff0, diff1); ++ delta0 = __lsx_vsub_h(diff0, diff1); ++ delta0 = __lsx_vsrari_h(delta0, 4); ++ temp1 = __lsx_vadd_h(__lsx_vslli_h(tc_pos, 3), __lsx_vslli_h(tc_pos, 1)); ++ abs_delta0 = __lsx_vadda_h(delta0, zero); ++ abs_delta0 = __lsx_vsle_hu(temp1, abs_delta0); ++ abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); ++ ++ delta0 = __lsx_clip_h(delta0, tc_neg, tc_pos); ++ temp2 = __lsx_vadd_h(delta0, p0_src); ++ temp2 = __lsx_clamp255_h(temp2); ++ p_is_pcm_vec = __lsx_vnor_v(p_is_pcm_vec, p_is_pcm_vec); ++ temp0 = __lsx_vbitsel_v(temp2, p0_src, p_is_pcm_vec); ++ ++ temp2 = __lsx_vsub_h(q0_src, delta0); ++ temp2 = __lsx_clamp255_h(temp2); ++ q_is_pcm_vec = __lsx_vnor_v(q_is_pcm_vec, q_is_pcm_vec); ++ temp2 = __lsx_vbitsel_v(temp2, q0_src, q_is_pcm_vec); ++ ++ tmp = ((beta + (beta >> 1)) >> 3); ++ LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, !p_is_pcm0 && ((dp00 + dp30) < tmp), ++ !p_is_pcm4 && ((dp04 + dp34) < tmp), cmp0, cmp1); ++ p_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); ++ p_is_pcm_vec = __lsx_vseqi_d(p_is_pcm_vec, 0); ++ ++ LSX_DUP2_ARG1(__lsx_vreplgr2vr_h, (!q_is_pcm0) && (dq00 + dq30 < tmp), ++ (!q_is_pcm4) && (dq04 + dq34 < tmp), cmp0, cmp1); ++ q_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); ++ q_is_pcm_vec = __lsx_vseqi_d(q_is_pcm_vec, 0); ++ tc_pos = __lsx_vsrai_h(tc_pos, 1); ++ tc_neg = __lsx_vneg_h(tc_pos); ++ ++ LSX_DUP2_ARG2(__lsx_vavgr_hu, p2_src, p0_src, q0_src, q2_src, delta1, delta2); ++ LSX_DUP2_ARG2(__lsx_vsub_h, delta1, p1_src, delta2, q1_src, delta1, delta2); ++ delta1 = __lsx_vadd_h(delta1, delta0); ++ delta2 = __lsx_vsub_h(delta2, delta0); ++ LSX_DUP2_ARG2(__lsx_vsrai_h, delta1, 1, delta2, 1, delta1, delta2); ++ LSX_DUP2_ARG3(__lsx_clip_h, delta1, tc_neg, tc_pos, delta2, tc_neg, tc_pos, ++ delta1, delta2); ++ LSX_DUP2_ARG2(__lsx_vadd_h, p1_src, delta1, q1_src, delta2, delta1, delta2); ++ LSX_DUP2_ARG1(__lsx_clamp255_h, delta1, delta2, delta1, delta2); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, delta1, p1_src, p_is_pcm_vec, delta2, q1_src, ++ q_is_pcm_vec, delta1, delta2); ++ ++ abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); ++ LSX_DUP4_ARG3(__lsx_vbitsel_v, delta1, p1_src, abs_delta0, temp0, p0_src, ++ abs_delta0, temp2, q0_src, abs_delta0, delta2, q1_src, ++ abs_delta0, dst0, dst1, dst2, dst3); ++ /* weak filter ends */ ++ ++ cmp3 = __lsx_vnor_v(cmp3, cmp3); ++ LSX_DUP4_ARG3(__lsx_vbitsel_v, dst0, p1_src, cmp3, dst1, p0_src, cmp3, dst2, ++ q0_src, cmp3, dst3, q1_src, cmp3, dst0, dst1, dst2, dst3); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst2, dst0, dst3, dst1, dst0, dst1); ++ ++ /* transpose */ ++ dst4 = __lsx_vilvl_b(dst1, dst0); ++ dst5 = __lsx_vilvh_b(dst1, dst0); ++ dst0 = __lsx_vilvl_h(dst5, dst4); ++ dst1 = __lsx_vilvh_h(dst5, dst4); ++ ++ src += 2; ++ __lsx_vstelm_w(dst0, src, 0, 0); ++ __lsx_vstelm_w(dst0, src + stride, 0, 1); ++ __lsx_vstelm_w(dst0, src + stride_2x, 0, 2); ++ __lsx_vstelm_w(dst0, src + stride_3x, 0, 3); ++ src += stride_4x; ++ __lsx_vstelm_w(dst1, src, 0, 0); ++ __lsx_vstelm_w(dst1, src + stride, 0, 1); ++ __lsx_vstelm_w(dst1, src + stride_2x, 0, 2); ++ __lsx_vstelm_w(dst1, src + stride_3x, 0, 3); ++ return; ++ } else { /* strong + weak */ ++ /* strong filter */ ++ tc_neg = __lsx_vneg_h(tc_pos); ++ ++ /* p part */ ++ LSX_DUP2_ARG2(__lsx_vadd_h, p1_src, p0_src, temp0, q0_src, temp0, temp0); ++ ++ temp1 = __lsx_vadd_h(p3_src, p2_src); ++ temp1 = __lsx_vslli_h(temp1, 1); ++ LSX_DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, temp0, temp1, temp1); ++ temp1 = __lsx_vsrari_h(temp1, 3); ++ temp2 = __lsx_vsub_h(temp1, p2_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst0 = __lsx_vadd_h(temp2, p2_src); ++ ++ temp1 = __lsx_vadd_h(temp0, p2_src); ++ temp1 = __lsx_vsrari_h(temp1, 2); ++ temp2 = __lsx_vsub_h(temp1, p1_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst1 = __lsx_vadd_h(temp2, p1_src); ++ ++ temp1 = __lsx_vslli_h(temp0, 1); ++ LSX_DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, q1_src, temp1, temp1); ++ temp1 = __lsx_vsrari_h(temp1, 3); ++ temp2 = __lsx_vsub_h(temp1, p0_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst2 = __lsx_vadd_h(temp2, p0_src); ++ ++ p_is_pcm_vec = __lsx_vnor_v(p_is_pcm_vec, p_is_pcm_vec); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, dst0, p2_src, p_is_pcm_vec, dst1, p1_src, ++ p_is_pcm_vec, dst0, dst1); ++ dst2 = __lsx_vbitsel_v(dst2, p0_src, p_is_pcm_vec); ++ ++ /* q part */ ++ LSX_DUP2_ARG2(__lsx_vadd_h, q1_src, p0_src, temp0, q0_src, temp0, temp0); ++ temp1 = __lsx_vadd_h(q3_src, q2_src); ++ temp1 = __lsx_vslli_h(temp1, 1); ++ LSX_DUP2_ARG2(__lsx_vadd_h, temp1, q2_src, temp1, temp0, temp1, temp1); ++ temp1 = __lsx_vsrari_h(temp1, 3); ++ temp2 = __lsx_vsub_h(temp1, q2_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst5 = __lsx_vadd_h(temp2, q2_src); ++ ++ temp1 = __lsx_vadd_h(temp0, q2_src); ++ temp1 = __lsx_vsrari_h(temp1, 2); ++ temp2 = __lsx_vsub_h(temp1, q1_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst4 = __lsx_vadd_h(temp2, q1_src); ++ ++ temp1 = __lsx_vslli_h(temp0, 1); ++ LSX_DUP2_ARG2(__lsx_vadd_h, temp1, p1_src, temp1, q2_src, temp1, temp1); ++ temp1 = __lsx_vsrari_h(temp1, 3); ++ temp2 = __lsx_vsub_h(temp1, q0_src); ++ temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ dst3 = __lsx_vadd_h(temp2, q0_src); ++ ++ q_is_pcm_vec = __lsx_vnor_v(q_is_pcm_vec, q_is_pcm_vec); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, dst3, q0_src, q_is_pcm_vec, dst4, q1_src, ++ q_is_pcm_vec, dst3, dst4); ++ dst5 = __lsx_vbitsel_v(dst5, q2_src, q_is_pcm_vec); ++ /* strong filter ends */ ++ ++ /* weak filter */ ++ tc_pos = __lsx_vsrai_h(tc_pos, 1); ++ tc_neg = __lsx_vneg_h(tc_pos); ++ ++ LSX_DUP2_ARG2(__lsx_vsub_h, q0_src, p0_src, q1_src, p1_src, diff0, diff1); ++ LSX_DUP2_ARG2(__lsx_vadd_h, __lsx_vslli_h(diff0, 3), diff0, __lsx_vslli_h( ++ diff1, 1), diff1, diff0, diff1); ++ delta0 = __lsx_vsub_h(diff0, diff1); ++ delta0 = __lsx_vsrari_h(delta0, 4); ++ ++ temp1 = __lsx_vadd_h(__lsx_vslli_h(tc_pos, 3), __lsx_vslli_h(tc_pos, 1)); ++ abs_delta0 = __lsx_vadda_h(delta0, zero); ++ abs_delta0 = __lsx_vsle_hu(temp1, abs_delta0); ++ abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); ++ delta0 = __lsx_clip_h(delta0, tc_neg, tc_pos); ++ temp2 = __lsx_vadd_h(delta0, p0_src); ++ temp2 = __lsx_clamp255_h(temp2); ++ temp0 = __lsx_vbitsel_v(temp2, p0_src, p_is_pcm_vec); ++ temp2 = __lsx_vsub_h(q0_src, delta0); ++ temp2 = __lsx_clamp255_h(temp2); ++ temp2 = __lsx_vbitsel_v(temp2, q0_src, q_is_pcm_vec); ++ ++ tmp = (beta + (beta >> 1)) >> 3; ++ LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, !p_is_pcm0 && ((dp00 + dp30) < tmp), ++ !p_is_pcm4 && ((dp04 + dp34) < tmp), cmp0, cmp1); ++ p_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); ++ p_is_pcm_vec = __lsx_vseqi_d(p_is_pcm_vec, 0); ++ ++ LSX_DUP2_ARG1(__lsx_vreplgr2vr_h, (!q_is_pcm0) && (dq00 + dq30 < tmp), ++ (!q_is_pcm4) && (dq04 + dq34 < tmp), cmp0, cmp1); ++ q_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); ++ q_is_pcm_vec = __lsx_vseqi_d(q_is_pcm_vec, 0); ++ tc_pos = __lsx_vsrai_h(tc_pos, 1); ++ tc_neg = __lsx_vneg_h(tc_pos); ++ ++ LSX_DUP2_ARG2(__lsx_vavgr_hu, p2_src, p0_src, q0_src, q2_src, delta1, delta2); ++ LSX_DUP2_ARG2(__lsx_vsub_h, delta1, p1_src, delta2, q1_src, delta1, delta2); ++ delta1 = __lsx_vadd_h(delta1, delta0); ++ delta2 = __lsx_vsub_h(delta2, delta0); ++ LSX_DUP2_ARG2(__lsx_vsrai_h, delta1, 1, delta2, 1, delta1, delta2); ++ LSX_DUP2_ARG3(__lsx_clip_h, delta1, tc_neg, tc_pos, delta2, tc_neg, tc_pos, ++ delta1, delta2); ++ LSX_DUP2_ARG2(__lsx_vadd_h, p1_src, delta1, q1_src, delta2, delta1, delta2); ++ LSX_DUP2_ARG1(__lsx_clamp255_h, delta1, delta2, delta1, delta2); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, delta1, p1_src, p_is_pcm_vec, delta2, q1_src, ++ q_is_pcm_vec, delta1, delta2); ++ ++ abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); ++ LSX_DUP4_ARG3(__lsx_vbitsel_v, delta1, p1_src, abs_delta0, delta2, q1_src, ++ abs_delta0, temp0, p0_src, abs_delta0, temp2, q0_src, ++ abs_delta0, delta1, delta2, temp0, temp2); ++ /* weak filter ends*/ ++ ++ /* select between weak or strong */ ++ LSX_DUP4_ARG3(__lsx_vbitsel_v, dst0, p2_src, cmp2, dst1, delta1, cmp2, dst2, ++ temp0, cmp2, dst3, temp2, cmp2, dst0, dst1, dst2, dst3); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, dst4, delta2, cmp2, dst5, q2_src, cmp2, dst4, ++ dst5); ++ } ++ ++ cmp3 = __lsx_vnor_v(cmp3, cmp3); ++ LSX_DUP4_ARG3(__lsx_vbitsel_v, dst0, p2_src, cmp3, dst1, p1_src, cmp3, dst2, ++ p0_src, cmp3, dst3, q0_src, cmp3, dst0, dst1, dst2, dst3); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, dst4, q1_src, cmp3, dst5, q2_src, cmp3, dst4, dst5); ++ ++ /* pack results to 8 bit */ ++ LSX_DUP4_ARG2(__lsx_vpickev_b, dst2, dst0, dst3, dst1, dst4, dst4, dst5, dst5, ++ dst0, dst1, dst2, dst3); ++ ++ /* transpose */ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, dst1, dst0, dst3, dst2, dst4, dst6); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, dst1, dst0, dst3, dst2, dst5, dst7); ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst7, dst6, dst0, dst2); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst7, dst6, dst1, dst3); ++ ++ src += 1; ++ __lsx_vstelm_w(dst0, src, 0, 0); ++ __lsx_vstelm_h(dst2, src, 4, 0); ++ src += stride; ++ __lsx_vstelm_w(dst0, src, 0, 1); ++ __lsx_vstelm_h(dst2, src, 4, 2); ++ src += stride; ++ ++ __lsx_vstelm_w(dst0, src, 0, 2); ++ __lsx_vstelm_h(dst2, src, 4, 4); ++ src += stride; ++ __lsx_vstelm_w(dst0, src, 0, 3); ++ __lsx_vstelm_h(dst2, src, 4, 6); ++ src += stride; ++ ++ __lsx_vstelm_w(dst1, src, 0, 0); ++ __lsx_vstelm_h(dst3, src, 4, 0); ++ src += stride; ++ __lsx_vstelm_w(dst1, src, 0, 1); ++ __lsx_vstelm_h(dst3, src, 4, 2); ++ src += stride; ++ ++ __lsx_vstelm_w(dst1, src, 0, 2); ++ __lsx_vstelm_h(dst3, src, 4, 4); ++ src += stride; ++ __lsx_vstelm_w(dst1, src, 0, 3); ++ __lsx_vstelm_h(dst3, src, 4, 6); ++ } ++} ++ ++static void hevc_loopfilter_chroma_hor_lsx(uint8_t *src, int32_t stride, ++ int32_t *tc, uint8_t *p_is_pcm, ++ uint8_t *q_is_pcm) ++{ ++ uint8_t *p1_ptr = src - (stride << 1); ++ uint8_t *p0_ptr = src - stride; ++ uint8_t *q0_ptr = src; ++ uint8_t *q1_ptr = src + stride; ++ __m128i cmp0, cmp1, p_is_pcm_vec, q_is_pcm_vec; ++ __m128i p1, p0, q0, q1; ++ __m128i tc_pos, tc_neg; ++ __m128i zero = {0}; ++ __m128i temp0, temp1, delta; ++ ++ if (!(tc[0] <= 0) || !(tc[1] <= 0)) { ++ LSX_DUP2_ARG1(__lsx_vreplgr2vr_h, tc[0], tc[1], cmp0, cmp1); ++ tc_pos = __lsx_vpackev_d(cmp1, cmp0); ++ tc_neg = __lsx_vneg_h(tc_pos); ++ LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, p_is_pcm[0], p_is_pcm[1], cmp0, cmp1); ++ p_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); ++ p_is_pcm_vec = __lsx_vseqi_d(p_is_pcm_vec, 0); ++ ++ LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, q_is_pcm[0], q_is_pcm[1], cmp0, cmp1); ++ q_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); ++ q_is_pcm_vec = __lsx_vseqi_d(q_is_pcm_vec, 0); ++ ++ LSX_DUP4_ARG2(__lsx_vld, p1_ptr, 0, p0_ptr, 0, q0_ptr, 0, q1_ptr, 0, p1, ++ p0, q0, q1); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p1, zero, p0, zero, q0, zero, q1, p1, ++ p0, q0, q1); ++ LSX_DUP2_ARG2(__lsx_vsub_h, q0, p0, p1, q1, temp0, temp1); ++ temp0 = __lsx_vslli_h(temp0, 2); ++ temp0 = __lsx_vadd_h(temp0, temp1); ++ delta = __lsx_vsrari_h(temp0, 3); ++ delta = __lsx_clip_h(delta, tc_neg, tc_pos); ++ temp0 = __lsx_vadd_h(p0, delta); ++ temp0 = __lsx_clamp255_h(temp0); ++ p_is_pcm_vec = __lsx_vnor_v(p_is_pcm_vec, p_is_pcm_vec); ++ temp0 = __lsx_vbitsel_v(temp0, p0, p_is_pcm_vec); ++ ++ temp1 = __lsx_vsub_h(q0, delta); ++ temp1 = __lsx_clamp255_h(temp1); ++ q_is_pcm_vec = __lsx_vnor_v(q_is_pcm_vec, q_is_pcm_vec); ++ temp1 = __lsx_vbitsel_v(temp1, q0, q_is_pcm_vec); ++ ++ tc_pos = __lsx_vslei_d(tc_pos, 0); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, temp0, p0, tc_pos, temp1, q0, tc_pos, ++ temp0, temp1); ++ temp0 = __lsx_vpickev_b(temp1, temp0); ++ __lsx_vstelm_d(temp0, p0_ptr, 0, 0); ++ __lsx_vstelm_d(temp0, p0_ptr + stride, 0, 1); ++ } ++} ++ ++static void hevc_loopfilter_chroma_ver_lsx(uint8_t *src, int32_t stride, ++ int32_t *tc, uint8_t *p_is_pcm, ++ uint8_t *q_is_pcm) ++{ ++ const int32_t stride_2x = (stride << 1); ++ const int32_t stride_4x = (stride << 2); ++ const int32_t stride_3x = stride_2x + stride; ++ __m128i cmp0, cmp1, p_is_pcm_vec, q_is_pcm_vec; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i p1, p0, q0, q1; ++ __m128i tc_pos, tc_neg; ++ __m128i zero = {0}; ++ __m128i temp0, temp1, delta; ++ ++ if (!(tc[0] <= 0) || !(tc[1] <= 0)) { ++ LSX_DUP2_ARG1(__lsx_vreplgr2vr_h, tc[0], tc[1], cmp0, cmp1); ++ tc_pos = __lsx_vpackev_d(cmp1, cmp0); ++ tc_neg = __lsx_vneg_h(tc_pos); ++ ++ LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, p_is_pcm[0], p_is_pcm[1], cmp0, cmp1); ++ p_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); ++ p_is_pcm_vec = __lsx_vseqi_d(p_is_pcm_vec, 0); ++ LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, q_is_pcm[0], q_is_pcm[1], cmp0, cmp1); ++ q_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); ++ q_is_pcm_vec = __lsx_vseqi_d(q_is_pcm_vec, 0); ++ ++ src -= 2; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + stride, 0, src + stride_2x, 0, ++ src + stride_3x, 0, src0, src1, src2, src3); ++ src += stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + stride, 0, src + stride_2x, 0, ++ src + stride_3x, 0, src4, src5, src6, src7); ++ src -= stride_4x; ++ TRANSPOSE8x4_B(src0, src1, src2, src3, src4, src5, src6, src7, ++ p1, p0, q0, q1); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p1, zero, p0, zero, q0, zero, q1, p1, p0, ++ q0, q1); ++ ++ LSX_DUP2_ARG2(__lsx_vsub_h, q0, p0, p1, q1, temp0, temp1); ++ temp0 = __lsx_vslli_h(temp0, 2); ++ temp0 = __lsx_vadd_h(temp0, temp1); ++ delta = __lsx_vsrari_h(temp0, 3); ++ delta = __lsx_clip_h(delta, tc_neg, tc_pos); ++ ++ temp0 = __lsx_vadd_h(p0, delta); ++ temp1 = __lsx_vsub_h(q0, delta); ++ LSX_DUP2_ARG1(__lsx_clamp255_h, temp0, temp1, temp0, temp1); ++ LSX_DUP2_ARG2(__lsx_vnor_v, p_is_pcm_vec, p_is_pcm_vec, q_is_pcm_vec, ++ q_is_pcm_vec, p_is_pcm_vec, q_is_pcm_vec); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, temp0, p0, p_is_pcm_vec, temp1, q0, ++ q_is_pcm_vec, temp0, temp1); ++ ++ tc_pos = __lsx_vslei_d(tc_pos, 0); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, temp0, p0, tc_pos, temp1, q0, tc_pos, ++ temp0, temp1); ++ temp0 = __lsx_vpackev_b(temp1, temp0); ++ ++ src += 1; ++ __lsx_vstelm_h(temp0, src, 0, 0); ++ __lsx_vstelm_h(temp0, src + stride, 0, 1); ++ __lsx_vstelm_h(temp0, src + stride_2x, 0, 2); ++ __lsx_vstelm_h(temp0, src + stride_3x, 0, 3); ++ src += stride_4x; ++ __lsx_vstelm_h(temp0, src, 0, 4); ++ __lsx_vstelm_h(temp0, src + stride, 0, 5); ++ __lsx_vstelm_h(temp0, src + stride_2x, 0, 6); ++ __lsx_vstelm_h(temp0, src + stride_3x, 0, 7); ++ src -= stride_4x; ++ } ++} ++ ++static void hevc_sao_edge_filter_0degree_4width_lsx(uint8_t *dst, ++ int32_t dst_stride, ++ uint8_t *src, ++ int32_t src_stride, ++ int16_t *sao_offset_val, ++ int32_t height) ++{ ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ __m128i shuf1 = {0x807060504030201, 0x100F0E0D0C0B0A09}; ++ __m128i shuf2 = {0x908070605040302, 0x11100F0E0D0C0B0A}; ++ __m128i edge_idx = {0x403000201, 0x0}; ++ __m128i cmp_minus10, cmp_minus11, diff_minus10, diff_minus11; ++ __m128i sao_offset = __lsx_vld(sao_offset_val, 0); ++ __m128i src_minus10, src_minus11, src_plus10, offset, src0, dst0; ++ __m128i const1 = __lsx_vldi(1); ++ __m128i zero = {0}; ++ ++ sao_offset = __lsx_vpickev_b(sao_offset, sao_offset); ++ src -= 1; ++ ++ /* load in advance */ ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src_minus10, src_minus11); ++ ++ for (height -= 2; height; height -= 2) { ++ src += src_stride_2x; ++ src_minus10 = __lsx_vpickev_d(src_minus11, src_minus10); ++ src0 = __lsx_vshuf_b(zero, src_minus10, shuf1); ++ src_plus10 = __lsx_vshuf_b(zero, src_minus10, shuf2); ++ ++ LSX_DUP2_ARG2(__lsx_vseq_b, src0, src_minus10, src0, src_plus10, cmp_minus10, ++ cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ LSX_DUP2_ARG2(__lsx_vsle_bu, src0, src_minus10, src0, src_plus10, cmp_minus10, ++ cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ offset = __lsx_vadd_b(diff_minus10, diff_minus11); ++ offset = __lsx_vaddi_bu(offset, 2); ++ ++ /* load in advance */ ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src_minus10, src_minus11); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); ++ src0 = __lsx_vxori_b(src0, 128); ++ dst0 = __lsx_vsadd_b(src0, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ ++ __lsx_vstelm_w(dst0, dst, 0, 0); ++ __lsx_vstelm_w(dst0, dst + dst_stride, 0, 2); ++ dst += dst_stride_2x; ++ } ++ ++ src_minus10 = __lsx_vpickev_d(src_minus11, src_minus10); ++ src0 = __lsx_vshuf_b(zero, src_minus10, shuf1); ++ src_plus10 = __lsx_vshuf_b(zero, src_minus10, shuf2); ++ ++ LSX_DUP2_ARG2(__lsx_vseq_b, src0, src_minus10, src0, src_plus10, cmp_minus10, ++ cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ LSX_DUP2_ARG2(__lsx_vsle_bu, src0, src_minus10, src0, src_plus10, cmp_minus10, ++ cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ offset = __lsx_vadd_b(diff_minus10, diff_minus11); ++ offset = __lsx_vaddi_bu(offset, 2); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); ++ src0 = __lsx_vxori_b(src0, 128); ++ dst0 = __lsx_vsadd_b(src0, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ ++ __lsx_vstelm_w(dst0, dst, 0, 0); ++ __lsx_vstelm_w(dst0, dst + dst_stride, 0, 2); ++} ++ ++static void hevc_sao_edge_filter_0degree_8width_lsx(uint8_t *dst, ++ int32_t dst_stride, ++ uint8_t *src, ++ int32_t src_stride, ++ int16_t *sao_offset_val, ++ int32_t height) ++{ ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ __m128i shuf1 = {0x807060504030201, 0x100F0E0D0C0B0A09}; ++ __m128i shuf2 = {0x908070605040302, 0x11100F0E0D0C0B0A}; ++ __m128i edge_idx = {0x403000201, 0x0}; ++ __m128i const1 = __lsx_vldi(1); ++ __m128i cmp_minus10, cmp_minus11, diff_minus10, diff_minus11; ++ __m128i src0, src1, dst0, src_minus10, src_minus11, src_plus10, src_plus11; ++ __m128i offset, sao_offset = __lsx_vld(sao_offset_val, 0); ++ __m128i zeros = {0}; ++ ++ sao_offset = __lsx_vpickev_b(sao_offset, sao_offset); ++ src -= 1; ++ ++ /* load in advance */ ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src_minus10, src_minus11); ++ ++ for (height -= 2; height; height -= 2) { ++ src += src_stride_2x; ++ LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf1, zeros, src_minus11, ++ shuf1, src0, src1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, ++ shuf2, src_plus10, src_plus11); ++ LSX_DUP2_ARG2(__lsx_vpickev_d, src_minus11, src_minus10, src_plus11, src_plus10, ++ src_minus10, src_plus10); ++ src0 = __lsx_vpickev_d(src1, src0); ++ ++ LSX_DUP2_ARG2(__lsx_vseq_b, src0, src_minus10, src0, src_plus10, cmp_minus10, ++ cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ LSX_DUP2_ARG2(__lsx_vsle_bu, src0, src_minus10, src0, src_plus10, cmp_minus10, ++ cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ offset = __lsx_vadd_b(diff_minus10, diff_minus11); ++ offset = __lsx_vaddi_bu(offset, 2); ++ ++ /* load in advance */ ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src_minus10, src_minus11); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); ++ src0 = __lsx_vxori_b(src0, 128); ++ dst0 = __lsx_vsadd_b(src0, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ ++ __lsx_vstelm_d(dst0, dst, 0, 0); ++ __lsx_vstelm_d(dst0, dst + dst_stride, 0, 1); ++ dst += dst_stride_2x; ++ } ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf1, zeros, src_minus11, shuf1, ++ src0, src1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, shuf2, ++ src_plus10, src_plus11); ++ LSX_DUP2_ARG2(__lsx_vpickev_d, src_minus11, src_minus10, src_plus11, src_plus10, ++ src_minus10, src_plus10); ++ src0 = __lsx_vpickev_d(src1, src0); ++ ++ LSX_DUP2_ARG2(__lsx_vseq_b, src0, src_minus10, src0, src_plus10, cmp_minus10, ++ cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ LSX_DUP2_ARG2(__lsx_vsle_bu, src0, src_minus10, src0, src_plus10, cmp_minus10, ++ cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ offset = __lsx_vadd_b(diff_minus10, diff_minus11); ++ offset = __lsx_vaddi_bu(offset, 2); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); ++ src0 = __lsx_vxori_b(src0, 128); ++ dst0 = __lsx_vsadd_b(src0, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ ++ __lsx_vstelm_d(dst0, dst, 0, 0); ++ __lsx_vstelm_d(dst0, dst + dst_stride, 0, 1); ++} ++ ++static void hevc_sao_edge_filter_0degree_16multiple_lsx(uint8_t *dst, ++ int32_t dst_stride, ++ uint8_t *src, ++ int32_t src_stride, ++ int16_t *sao_offset_val, ++ int32_t width, ++ int32_t height) ++{ ++ uint8_t *dst_ptr, *src_minus1; ++ int32_t v_cnt; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t dst_stride_4x = (dst_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ ++ __m128i shuf1 = {0x807060504030201, 0x100F0E0D0C0B0A09}; ++ __m128i shuf2 = {0x908070605040302, 0x11100F0E0D0C0B0A}; ++ __m128i edge_idx = {0x403000201, 0x0}; ++ __m128i const1 = __lsx_vldi(1); ++ __m128i sao_offset; ++ __m128i cmp_minus10, cmp_plus10, diff_minus10, diff_plus10, cmp_minus11; ++ __m128i cmp_plus11, diff_minus11, diff_plus11, cmp_minus12, cmp_plus12; ++ __m128i diff_minus12, diff_plus12, cmp_minus13, cmp_plus13, diff_minus13; ++ __m128i diff_plus13; ++ __m128i src10, src11, src12, src13, dst0, dst1, dst2, dst3; ++ __m128i src_minus10, src_minus11, src_minus12, src_minus13; ++ __m128i offset_mask0, offset_mask1, offset_mask2, offset_mask3; ++ __m128i src_zero0, src_zero1, src_zero2, src_zero3; ++ __m128i src_plus10, src_plus11, src_plus12, src_plus13; ++ ++ sao_offset = __lsx_vld(sao_offset_val, 0); ++ sao_offset = __lsx_vpickev_b(sao_offset, sao_offset); ++ ++ for (; height; height -= 4) { ++ src_minus1 = src - 1; ++ LSX_DUP4_ARG2(__lsx_vld, src_minus1, 0, src_minus1 + src_stride, 0, ++ src_minus1 + src_stride_2x, 0, src_minus1 + src_stride_3x, 0, ++ src_minus10, src_minus11, src_minus12, src_minus13); ++ ++ for (v_cnt = 0; v_cnt < width; v_cnt += 16) { ++ src_minus1 += 16; ++ dst_ptr = dst + v_cnt; ++ LSX_DUP4_ARG2(__lsx_vld, src_minus1, 0, src_minus1 + src_stride, 0, ++ src_minus1 + src_stride_2x, 0, src_minus1 + src_stride_3x, 0, ++ src10, src11, src12, src13); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src10, src_minus10, shuf1, src11, src_minus11, ++ shuf1, src12, src_minus12, shuf1, src13, src_minus13, shuf1, ++ src_zero0, src_zero1, src_zero2, src_zero3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src10, src_minus10, shuf2, src11, src_minus11, ++ shuf2, src12, src_minus12, shuf2, src13, src_minus13, shuf2, ++ src_plus10, src_plus11, src_plus12, src_plus13); ++ ++ LSX_DUP4_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero0, src_plus10, ++ src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, ++ cmp_plus10, cmp_minus11, cmp_plus11); ++ LSX_DUP4_ARG2(__lsx_vseq_b, src_zero2, src_minus12, src_zero2, src_plus12, ++ src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, ++ cmp_plus12, cmp_minus13, cmp_plus13); ++ LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, ++ cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, diff_minus10, ++ diff_plus10, diff_minus11, diff_plus11); ++ LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, ++ cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, diff_minus12, ++ diff_plus12, diff_minus13, diff_plus13); ++ LSX_DUP4_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero0, src_plus10, ++ src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, ++ cmp_plus10, cmp_minus11, cmp_plus11); ++ LSX_DUP4_ARG2(__lsx_vsle_bu, src_zero2, src_minus12, src_zero2, src_plus12, ++ src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, ++ cmp_plus12, cmp_minus13, cmp_plus13); ++ LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, ++ cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, cmp_minus10, ++ cmp_plus10, cmp_minus11, cmp_plus11); ++ LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, ++ cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, cmp_minus12, ++ cmp_plus12, cmp_minus13, cmp_plus13); ++ LSX_DUP4_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, ++ diff_plus10, const1, cmp_plus10, diff_minus11, const1, ++ cmp_minus11, diff_plus11, const1, cmp_plus11, diff_minus10, ++ diff_plus10, diff_minus11, diff_plus11); ++ LSX_DUP4_ARG3(__lsx_vbitsel_v, diff_minus12, const1, cmp_minus12, ++ diff_plus12, const1, cmp_plus12, diff_minus13, const1, ++ cmp_minus13, diff_plus13, const1, cmp_plus13, diff_minus12, ++ diff_plus12, diff_minus13, diff_plus13); ++ ++ LSX_DUP4_ARG2(__lsx_vadd_b, diff_minus10, diff_plus10, diff_minus11, ++ diff_plus11, diff_minus12, diff_plus12, diff_minus13, ++ diff_plus13, offset_mask0, offset_mask1, offset_mask2, ++ offset_mask3); ++ LSX_DUP4_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, offset_mask2, ++ 2, offset_mask3, 2, offset_mask0, offset_mask1, offset_mask2, ++ offset_mask3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask0, sao_offset, ++ sao_offset, offset_mask0, offset_mask0, offset_mask0); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask1, sao_offset, ++ sao_offset, offset_mask1, offset_mask1, offset_mask1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask2, sao_offset, ++ sao_offset, offset_mask2, offset_mask2, offset_mask2); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask3, sao_offset, ++ sao_offset, offset_mask3, offset_mask3, offset_mask3); ++ ++ LSX_DUP4_ARG2(__lsx_vxori_b, src_zero0, 128, src_zero1, 128, src_zero2, 128, ++ src_zero3, 128, src_zero0, src_zero1, src_zero2, src_zero3); ++ LSX_DUP4_ARG2(__lsx_vsadd_b, src_zero0, offset_mask0, src_zero1, ++ offset_mask1, src_zero2, offset_mask2, src_zero3, offset_mask3, ++ dst0, dst1, dst2, dst3); ++ LSX_DUP4_ARG2(__lsx_vxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, 128, ++ dst0, dst1, dst2, dst3); ++ ++ src_minus10 = src10; ++ src_minus11 = src11; ++ src_minus12 = src12; ++ src_minus13 = src13; ++ ++ __lsx_vst(dst0, dst_ptr, 0); ++ __lsx_vst(dst1, dst_ptr + dst_stride, 0); ++ __lsx_vst(dst2, dst_ptr + dst_stride_2x, 0); ++ __lsx_vst(dst3, dst_ptr + dst_stride_3x, 0); ++ } ++ src += src_stride_4x; ++ dst += dst_stride_4x; ++ } ++} ++ ++static void hevc_sao_edge_filter_90degree_4width_lsx(uint8_t *dst, ++ int32_t dst_stride, ++ uint8_t *src, ++ int32_t src_stride, ++ int16_t *sao_offset_val, ++ int32_t height) ++{ ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ __m128i edge_idx = {0x403000201, 0x0}; ++ __m128i const1 = __lsx_vldi(1); ++ __m128i dst0; ++ __m128i sao_offset = __lsx_vld(sao_offset_val, 0); ++ __m128i cmp_minus10, diff_minus10, cmp_minus11, diff_minus11; ++ __m128i src_minus10, src_minus11, src10, src11; ++ __m128i src_zero0, src_zero1; ++ __m128i offset; ++ __m128i offset_mask0, offset_mask1; ++ ++ sao_offset = __lsx_vpickev_b(sao_offset, sao_offset); ++ ++ /* load in advance */ ++ LSX_DUP4_ARG2(__lsx_vld, src - src_stride, 0, src, 0, src + src_stride, 0, ++ src + src_stride_2x, 0, src_minus10, src_minus11, src10, src11); ++ ++ for (height -= 2; height; height -= 2) { ++ src += src_stride_2x; ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src10, src_minus10, src_minus11, src_minus11, ++ src11, src_minus11, src10, src10, src_minus10, src_zero0, ++ src_minus11, src_zero1); ++ LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, ++ offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); ++ ++ dst0 = __lsx_vxori_b(dst0, 128); ++ dst0 = __lsx_vsadd_b(dst0, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ src_minus10 = src10; ++ src_minus11 = src11; ++ ++ /* load in advance */ ++ LSX_DUP2_ARG2(__lsx_vld, src + src_stride, 0, src + src_stride_2x, 0, ++ src10, src11); ++ ++ __lsx_vstelm_w(dst0, dst, 0, 0); ++ __lsx_vstelm_w(dst0, dst + dst_stride, 0, 2); ++ dst += dst_stride_2x; ++ } ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src10, src_minus10, src_minus11, src_minus11, src11, ++ src_minus11, src10, src10, src_minus10, src_zero0, src_minus11, ++ src_zero1); ++ LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, offset_mask0, ++ offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ dst0 = __lsx_vsadd_b(dst0, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ ++ __lsx_vstelm_w(dst0, dst, 0, 0); ++ __lsx_vstelm_w(dst0, dst + dst_stride, 0, 2); ++} ++ ++static void hevc_sao_edge_filter_90degree_8width_lsx(uint8_t *dst, ++ int32_t dst_stride, ++ uint8_t *src, ++ int32_t src_stride, ++ int16_t *sao_offset_val, ++ int32_t height) ++{ ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ __m128i edge_idx = {0x403000201, 0x0}; ++ __m128i const1 = __lsx_vldi(1); ++ __m128i offset, sao_offset = __lsx_vld(sao_offset_val, 0); ++ __m128i src_zero0, src_zero1, dst0; ++ __m128i cmp_minus10, diff_minus10, cmp_minus11, diff_minus11; ++ __m128i src_minus10, src_minus11, src10, src11; ++ __m128i offset_mask0, offset_mask1; ++ ++ sao_offset = __lsx_vpickev_b(sao_offset, sao_offset); ++ ++ /* load in advance */ ++ LSX_DUP2_ARG2(__lsx_vld, src - src_stride, 0, src, 0, src_minus10, src_minus11); ++ LSX_DUP2_ARG2(__lsx_vld, src + src_stride, 0, src + src_stride_2x, 0, src10, src11); ++ ++ for (height -= 2; height; height -= 2) { ++ src += src_stride_2x; ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src10, src_minus10, src_minus11, src_minus11, src11, ++ src_minus11, src10, src10, src_minus10, src_zero0, src_minus11, ++ src_zero1); ++ LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, ++ offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); ++ ++ dst0 = __lsx_vxori_b(dst0, 128); ++ dst0 = __lsx_vsadd_b(dst0, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ src_minus10 = src10; ++ src_minus11 = src11; ++ ++ /* load in advance */ ++ LSX_DUP2_ARG2(__lsx_vld, src + src_stride, 0, src + src_stride_2x, 0, ++ src10, src11); ++ ++ __lsx_vstelm_d(dst0, dst, 0, 0); ++ __lsx_vstelm_d(dst0, dst + dst_stride, 0, 1); ++ dst += dst_stride_2x; ++ } ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src10, src_minus10, src_minus11, src_minus11, src11, ++ src_minus11, src10, src10, src_minus10, src_zero0, src_minus11, ++ src_zero1); ++ LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, ++ offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ dst0 = __lsx_vsadd_b(dst0, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ ++ __lsx_vstelm_d(dst0, dst, 0, 0); ++ __lsx_vstelm_d(dst0, dst + dst_stride, 0, 1); ++} ++ ++static void hevc_sao_edge_filter_90degree_16multiple_lsx(uint8_t *dst, ++ int32_t dst_stride, ++ uint8_t *src, ++ int32_t src_stride, ++ int16_t * ++ sao_offset_val, ++ int32_t width, ++ int32_t height) ++{ ++ uint8_t *src_orig = src; ++ uint8_t *dst_orig = dst; ++ int32_t h_cnt, v_cnt; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t dst_stride_4x = (dst_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ __m128i edge_idx = {0x403000201, 0x0}; ++ __m128i const1 = __lsx_vldi(1); ++ __m128i cmp_minus10, cmp_plus10, diff_minus10, diff_plus10, cmp_minus11; ++ __m128i cmp_plus11, diff_minus11, diff_plus11, cmp_minus12, cmp_plus12; ++ __m128i diff_minus12, diff_plus12, cmp_minus13, cmp_plus13, diff_minus13; ++ __m128i diff_plus13; ++ __m128i src10, src_minus10, dst0, src11, src_minus11, dst1; ++ __m128i src12, dst2, src13, dst3; ++ __m128i offset_mask0, offset_mask1, offset_mask2, offset_mask3, sao_offset; ++ ++ sao_offset = __lsx_vld(sao_offset_val, 0); ++ sao_offset = __lsx_vpickev_b(sao_offset, sao_offset); ++ ++ for (v_cnt = 0; v_cnt < width; v_cnt += 16) { ++ src = src_orig + v_cnt; ++ dst = dst_orig + v_cnt; ++ ++ LSX_DUP2_ARG2(__lsx_vld, src - src_stride, 0, src, 0, src_minus10, src_minus11); ++ ++ for (h_cnt = (height >> 2); h_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src + src_stride_4x, 0, ++ src10, src11, src12, src13); ++ ++ LSX_DUP4_ARG2(__lsx_vseq_b, src_minus11, src_minus10, src_minus11, src10, ++ src10, src_minus11, src10, src11, cmp_minus10, cmp_plus10, ++ cmp_minus11, cmp_plus11); ++ LSX_DUP4_ARG2(__lsx_vseq_b, src11, src10, src11, src12, src12, src11, src12, ++ src13, cmp_minus12, cmp_plus12, cmp_minus13, cmp_plus13); ++ LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, ++ cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, diff_minus10, ++ diff_plus10, diff_minus11, diff_plus11); ++ LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, ++ cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, diff_minus12, ++ diff_plus12, diff_minus13, diff_plus13); ++ LSX_DUP4_ARG2(__lsx_vsle_bu, src_minus11, src_minus10, src_minus11, src10, ++ src10, src_minus11, src10, src11, cmp_minus10, cmp_plus10, ++ cmp_minus11, cmp_plus11); ++ LSX_DUP4_ARG2(__lsx_vsle_bu, src11, src10, src11, src12, src12, src11, src12, ++ src13, cmp_minus12, cmp_plus12, cmp_minus13, cmp_plus13); ++ LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, ++ cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, cmp_minus10, ++ cmp_plus10, cmp_minus11, cmp_plus11); ++ LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, ++ cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, cmp_minus12, ++ cmp_plus12, cmp_minus13, cmp_plus13); ++ LSX_DUP4_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, ++ diff_plus10, const1, cmp_plus10, diff_minus11, const1, ++ cmp_minus11, diff_plus11, const1, cmp_plus11, diff_minus10, ++ diff_plus10, diff_minus11, diff_plus11); ++ LSX_DUP4_ARG3(__lsx_vbitsel_v, diff_minus12, const1, cmp_minus12, ++ diff_plus12, const1, cmp_plus12, diff_minus13, const1, ++ cmp_minus13, diff_plus13, const1, cmp_plus13, diff_minus12, ++ diff_plus12, diff_minus13, diff_plus13); ++ ++ LSX_DUP4_ARG2(__lsx_vadd_b, diff_minus10, diff_plus10, diff_minus11, ++ diff_plus11, diff_minus12, diff_plus12, diff_minus13, ++ diff_plus13, offset_mask0, offset_mask1, offset_mask2, ++ offset_mask3); ++ LSX_DUP4_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, offset_mask2, ++ 2, offset_mask3, 2, offset_mask0, offset_mask1, offset_mask2, ++ offset_mask3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask0, sao_offset, ++ sao_offset, offset_mask0, offset_mask0, offset_mask0); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask1, sao_offset, ++ sao_offset, offset_mask1, offset_mask1, offset_mask1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask2, sao_offset, ++ sao_offset, offset_mask2, offset_mask2, offset_mask2); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask3, sao_offset, ++ sao_offset, offset_mask3, offset_mask3, offset_mask3); ++ ++ src_minus10 = src12; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src_minus11, 128, src10, 128, src11, 128, ++ src12, 128, src_minus11, src10, src11, src12); ++ LSX_DUP4_ARG2(__lsx_vsadd_b, src_minus11, offset_mask0, src10, offset_mask1, ++ src11, offset_mask2, src12, offset_mask3, dst0, dst1, dst2, ++ dst3); ++ LSX_DUP4_ARG2(__lsx_vxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, 128, ++ dst0, dst1, dst2, dst3); ++ src_minus11 = src13; ++ ++ __lsx_vst(dst0, dst, 0); ++ __lsx_vst(dst1, dst + dst_stride, 0); ++ __lsx_vst(dst2, dst + dst_stride_2x, 0); ++ __lsx_vst(dst3, dst + dst_stride_3x, 0); ++ src += src_stride_4x; ++ dst += dst_stride_4x; ++ } ++ } ++} ++ ++static void hevc_sao_edge_filter_45degree_4width_lsx(uint8_t *dst, ++ int32_t dst_stride, ++ uint8_t *src, ++ int32_t src_stride, ++ int16_t *sao_offset_val, ++ int32_t height) ++{ ++ uint8_t *src_orig; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ __m128i shuf1 = {0x807060504030201, 0x100F0E0D0C0B0A09}; ++ __m128i shuf2 = {0x908070605040302, 0x11100F0E0D0C0B0A}; ++ __m128i edge_idx = {0x403000201, 0x0}; ++ __m128i const1 = __lsx_vldi(1); ++ __m128i offset, sao_offset = __lsx_vld(sao_offset_val, 0); ++ __m128i cmp_minus10, diff_minus10, src_minus10, cmp_minus11, diff_minus11; ++ __m128i src_minus11, src10, src11; ++ __m128i src_plus0, src_zero0, src_plus1, src_zero1, dst0; ++ __m128i offset_mask0, offset_mask1; ++ __m128i zeros = {0}; ++ ++ sao_offset = __lsx_vpickev_b(sao_offset, sao_offset); ++ src_orig = src - 1; ++ ++ /* load in advance */ ++ LSX_DUP2_ARG2(__lsx_vld, src_orig - src_stride, 0, src_orig, 0, src_minus10, ++ src_minus11); ++ LSX_DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ src10, src11); ++ ++ for (height -= 2; height; height -= 2) { ++ src_orig += src_stride_2x; ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, ++ src_zero0, src_zero1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src10, shuf2, zeros, src11, shuf2, ++ src_plus0, src_plus1); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src_plus0, src_minus10, src_plus1, src_minus11, ++ src_minus10, src_minus11); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, ++ src_zero0, src_zero1); ++ LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, ++ offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ dst0 = __lsx_vsadd_b(dst0, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ ++ src_minus10 = src10; ++ src_minus11 = src11; ++ ++ /* load in advance */ ++ LSX_DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, ++ 0, src10, src11); ++ ++ __lsx_vstelm_w(dst0, dst, 0, 0); ++ __lsx_vstelm_w(dst0, dst + dst_stride, 0, 2); ++ dst += dst_stride_2x; ++ } ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, ++ src_zero0, src_zero1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src10, shuf2, zeros, src11, shuf2, src_plus0, ++ src_plus1); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src_plus0, src_minus10, src_plus1, src_minus11, ++ src_minus10, src_minus11); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, src_zero0, ++ src_zero1); ++ LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, ++ offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ dst0 = __lsx_vsadd_b(dst0, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ ++ __lsx_vstelm_w(dst0, dst, 0, 0); ++ __lsx_vstelm_w(dst0, dst + dst_stride, 0, 2); ++} ++ ++static void hevc_sao_edge_filter_45degree_8width_lsx(uint8_t *dst, ++ int32_t dst_stride, ++ uint8_t *src, ++ int32_t src_stride, ++ int16_t *sao_offset_val, ++ int32_t height) ++{ ++ uint8_t *src_orig; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ __m128i shuf1 = {0x807060504030201, 0x100F0E0D0C0B0A09}; ++ __m128i shuf2 = {0x908070605040302, 0x11100F0E0D0C0B0A}; ++ __m128i edge_idx = {0x403000201, 0x0}; ++ __m128i const1 = __lsx_vldi(1); ++ __m128i offset, sao_offset = __lsx_vld(sao_offset_val, 0); ++ __m128i cmp_minus10, diff_minus10, cmp_minus11, diff_minus11; ++ __m128i src_minus10, src10, src_minus11, src11; ++ __m128i src_zero0, src_plus10, src_zero1, src_plus11, dst0; ++ __m128i offset_mask0, offset_mask1; ++ __m128i zeros = {0}; ++ ++ sao_offset = __lsx_vpickev_b(sao_offset, sao_offset); ++ src_orig = src - 1; ++ ++ /* load in advance */ ++ LSX_DUP2_ARG2(__lsx_vld, src_orig - src_stride, 0, src_orig, 0, src_minus10, ++ src_minus11); ++ LSX_DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ src10, src11); ++ ++ for (height -= 2; height; height -= 2) { ++ src_orig += src_stride_2x; ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, ++ src_zero0, src_zero1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src10, shuf2, zeros, src11, shuf2, ++ src_plus10, src_plus11); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src_plus10, src_minus10, src_plus11, src_minus11, ++ src_minus10, src_minus11); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, ++ src_zero0, src_zero1); ++ LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, ++ offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ dst0 = __lsx_vsadd_b(dst0, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ ++ src_minus10 = src10; ++ src_minus11 = src11; ++ ++ /* load in advance */ ++ LSX_DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ src10, src11) ++ __lsx_vstelm_d(dst0, dst, 0, 0); ++ __lsx_vstelm_d(dst0, dst + dst_stride, 0, 1); ++ dst += dst_stride_2x; ++ } ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, ++ src_zero0, src_zero1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src10, shuf2, zeros, src11, shuf2, src_plus10, ++ src_plus11); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src_plus10, src_minus10, src_plus11, src_minus11, ++ src_minus10, src_minus11); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, src_zero0, ++ src_zero1); ++ ++ LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, ++ offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ dst0 = __lsx_vsadd_b(dst0, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ ++ src_minus10 = src10; ++ src_minus11 = src11; ++ ++ /* load in advance */ ++ LSX_DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ src10, src11); ++ ++ __lsx_vstelm_d(dst0, dst, 0, 0); ++ __lsx_vstelm_d(dst0, dst + dst_stride, 0, 1); ++} ++ ++static void hevc_sao_edge_filter_45degree_16multiple_lsx(uint8_t *dst, ++ int32_t dst_stride, ++ uint8_t *src, ++ int32_t src_stride, ++ int16_t * ++ sao_offset_val, ++ int32_t width, ++ int32_t height) ++{ ++ uint8_t *src_orig = src; ++ uint8_t *dst_orig = dst; ++ int32_t v_cnt; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t dst_stride_4x = (dst_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ ++ __m128i shuf1 = {0x807060504030201, 0x100F0E0D0C0B0A09}; ++ __m128i shuf2 = {0x908070605040302, 0x11100F0E0D0C0B0A}; ++ __m128i edge_idx = {0x403000201, 0x0}; ++ __m128i const1 = __lsx_vldi(1); ++ __m128i cmp_minus10, cmp_plus10, diff_minus10, diff_plus10, cmp_minus11; ++ __m128i cmp_plus11, diff_minus11, diff_plus11, cmp_minus12, cmp_plus12; ++ __m128i diff_minus12, diff_plus12, cmp_minus13, cmp_plus13, diff_minus13; ++ __m128i diff_plus13, src_minus14, src_plus13; ++ __m128i offset_mask0, offset_mask1, offset_mask2, offset_mask3; ++ __m128i src10, src_minus10, dst0, src11, src_minus11, dst1; ++ __m128i src12, src_minus12, dst2, src13, src_minus13, dst3; ++ __m128i src_zero0, src_plus10, src_zero1, src_plus11, src_zero2, src_plus12; ++ __m128i src_zero3, sao_offset; ++ ++ sao_offset = __lsx_vld(sao_offset_val, 0); ++ sao_offset = __lsx_vpickev_b(sao_offset, sao_offset); ++ ++ for (; height; height -= 4) { ++ src_orig = src - 1; ++ dst_orig = dst; ++ LSX_DUP4_ARG2(__lsx_vld, src_orig, 0, src_orig + src_stride, 0, ++ src_orig + src_stride_2x, 0, src_orig + src_stride_3x, 0, ++ src_minus11, src_minus12, src_minus13, src_minus14); ++ ++ for (v_cnt = 0; v_cnt < width; v_cnt += 16) { ++ src_minus10 = __lsx_vld(src_orig - src_stride, 0); ++ LSX_DUP4_ARG2(__lsx_vld, src_orig, 16, src_orig + src_stride, 16, ++ src_orig + src_stride_2x, 16, src_orig + src_stride_3x, 16, ++ src10, src11, src12, src13); ++ src_plus13 = __lsx_vld(src + v_cnt + src_stride_4x, 1); ++ src_orig += 16; ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src10, src_minus11, shuf1, src11, src_minus12, ++ shuf1, src12, src_minus13, shuf1, src13, src_minus14, shuf1, ++ src_zero0, src_zero1, src_zero2, src_zero3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src11, src_minus12, shuf2, src12, src_minus13, ++ shuf2, src_plus10, src_plus11); ++ src_plus12 = __lsx_vshuf_b(src13, src_minus14, shuf2); ++ ++ LSX_DUP4_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero0, src_plus10, ++ src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, ++ cmp_plus10, cmp_minus11, cmp_plus11); ++ LSX_DUP4_ARG2(__lsx_vseq_b, src_zero2, src_minus12, src_zero2, src_plus12, ++ src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, ++ cmp_plus12, cmp_minus13, cmp_plus13); ++ LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, ++ cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, diff_minus10, ++ diff_plus10, diff_minus11, diff_plus11); ++ LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, ++ cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, diff_minus12, ++ diff_plus12, diff_minus13, diff_plus13); ++ LSX_DUP4_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero0, src_plus10, ++ src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, ++ cmp_plus10, cmp_minus11, cmp_plus11); ++ LSX_DUP4_ARG2(__lsx_vsle_bu, src_zero2, src_minus12, src_zero2, src_plus12, ++ src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, ++ cmp_plus12, cmp_minus13, cmp_plus13); ++ LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, ++ cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, cmp_minus10, ++ cmp_plus10, cmp_minus11, cmp_plus11); ++ LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, ++ cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, cmp_minus12, ++ cmp_plus12, cmp_minus13, cmp_plus13); ++ LSX_DUP4_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, ++ diff_plus10, const1, cmp_plus10, diff_minus11, const1, ++ cmp_minus11, diff_plus11, const1, cmp_plus11, diff_minus10, ++ diff_plus10, diff_minus11, diff_plus11); ++ LSX_DUP4_ARG3(__lsx_vbitsel_v, diff_minus12, const1, cmp_minus12, ++ diff_plus12, const1, cmp_plus12, diff_minus13, const1, ++ cmp_minus13, diff_plus13, const1, cmp_plus13, diff_minus12, ++ diff_plus12, diff_minus13, diff_plus13); ++ ++ LSX_DUP4_ARG2(__lsx_vadd_b, diff_minus10, diff_plus10, diff_minus11, ++ diff_plus11, diff_minus12, diff_plus12, diff_minus13, ++ diff_plus13, offset_mask0, offset_mask1, offset_mask2, ++ offset_mask3); ++ LSX_DUP4_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, offset_mask2, ++ 2, offset_mask3, 2, offset_mask0, offset_mask1, offset_mask2, ++ offset_mask3); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask0, sao_offset, ++ sao_offset, offset_mask0, offset_mask0, offset_mask0); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask1, sao_offset, ++ sao_offset, offset_mask1, offset_mask1, offset_mask1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask2, sao_offset, ++ sao_offset, offset_mask2, offset_mask2, offset_mask2); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask3, sao_offset, ++ sao_offset, offset_mask3, offset_mask3, offset_mask3); ++ ++ LSX_DUP4_ARG2(__lsx_vxori_b, src_zero0, 128, src_zero1, 128, src_zero2, 128, ++ src_zero3, 128, src_zero0, src_zero1, src_zero2, src_zero3); ++ LSX_DUP4_ARG2(__lsx_vsadd_b, src_zero0, offset_mask0, src_zero1, ++ offset_mask1, src_zero2, offset_mask2, src_zero3, offset_mask3, ++ dst0, dst1, dst2, dst3); ++ LSX_DUP4_ARG2(__lsx_vxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, 128, ++ dst0, dst1, dst2, dst3); ++ ++ src_minus11 = src10; ++ src_minus12 = src11; ++ src_minus13 = src12; ++ src_minus14 = src13; ++ ++ __lsx_vst(dst0, dst_orig, 0); ++ __lsx_vst(dst1, dst_orig + dst_stride, 0); ++ __lsx_vst(dst2, dst_orig + dst_stride_2x, 0); ++ __lsx_vst(dst3, dst_orig + dst_stride_3x, 0); ++ dst_orig += 16; ++ } ++ src += src_stride_4x; ++ dst += dst_stride_4x; ++ } ++} ++ ++static void hevc_sao_edge_filter_135degree_4width_lsx(uint8_t *dst, ++ int32_t dst_stride, ++ uint8_t *src, ++ int32_t src_stride, ++ int16_t *sao_offset_val, ++ int32_t height) ++{ ++ uint8_t *src_orig; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ ++ __m128i shuf1 = {0x807060504030201, 0x100F0E0D0C0B0A09}; ++ __m128i shuf2 = {0x908070605040302, 0x11100F0E0D0C0B0A}; ++ __m128i edge_idx = {0x403000201, 0x0}; ++ __m128i const1 = __lsx_vldi(1); ++ __m128i offset, sao_offset = __lsx_vld(sao_offset_val, 0); ++ __m128i src_zero0, src_zero1, dst0; ++ __m128i cmp_minus10, diff_minus10, cmp_minus11, diff_minus11; ++ __m128i src_minus10, src10, src_minus11, src11; ++ __m128i offset_mask0, offset_mask1; ++ __m128i zeros = {0}; ++ ++ sao_offset = __lsx_vpickev_b(sao_offset, sao_offset); ++ src_orig = src - 1; ++ ++ /* load in advance */ ++ LSX_DUP2_ARG2(__lsx_vld, src_orig - src_stride, 0, src_orig, 0, src_minus10, ++ src_minus11); ++ LSX_DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ src10, src11); ++ ++ for (height -= 2; height; height -= 2) { ++ src_orig += src_stride_2x; ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, ++ src_zero0, src_zero1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, ++ shuf2, src_minus10, src_minus11); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src10, src_minus10, src11, src_minus11, src_minus10, ++ src_minus11); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, ++ src_zero0, src_zero1); ++ LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, ++ offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ dst0 = __lsx_vsadd_b(dst0, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ ++ src_minus10 = src10; ++ src_minus11 = src11; ++ ++ /* load in advance */ ++ LSX_DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ src10, src11); ++ ++ __lsx_vstelm_w(dst0, dst, 0, 0); ++ __lsx_vstelm_w(dst0, dst + dst_stride, 0, 2); ++ dst += dst_stride_2x; ++ } ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, ++ src_zero0, src_zero1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, shuf2, ++ src_minus10, src_minus11); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src10, src_minus10, src11, src_minus11, src_minus10, ++ src_minus11); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, src_zero0, ++ src_zero1); ++ LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, ++ offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ dst0 = __lsx_vsadd_b(dst0, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ ++ __lsx_vstelm_w(dst0, dst, 0, 0); ++ __lsx_vstelm_w(dst0, dst + dst_stride, 0, 2); ++ dst += dst_stride_2x; ++} ++ ++static void hevc_sao_edge_filter_135degree_8width_lsx(uint8_t *dst, ++ int32_t dst_stride, ++ uint8_t *src, ++ int32_t src_stride, ++ int16_t *sao_offset_val, ++ int32_t height) ++{ ++ uint8_t *src_orig; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ ++ __m128i shuf1 = {0x807060504030201, 0x100F0E0D0C0B0A09}; ++ __m128i shuf2 = {0x908070605040302, 0x11100F0E0D0C0B0A}; ++ __m128i edge_idx = {0x403000201, 0x0}; ++ __m128i const1 = __lsx_vldi(1); ++ __m128i offset, sao_offset = __lsx_vld(sao_offset_val, 0); ++ __m128i cmp_minus10, diff_minus10, cmp_minus11, diff_minus11; ++ __m128i src_minus10, src10, src_minus11, src11; ++ __m128i src_zero0, src_zero1, dst0; ++ __m128i offset_mask0, offset_mask1; ++ __m128i zeros = {0}; ++ ++ sao_offset = __lsx_vpickev_b(sao_offset, sao_offset); ++ src_orig = src - 1; ++ ++ /* load in advance */ ++ LSX_DUP2_ARG2(__lsx_vld, src_orig - src_stride, 0, src_orig, 0, src_minus10, ++ src_minus11); ++ LSX_DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ src10, src11); ++ ++ for (height -= 2; height; height -= 2) { ++ src_orig += src_stride_2x; ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, ++ src_zero0, src_zero1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, ++ shuf2, src_minus10, src_minus11); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src10, src_minus10, src11, src_minus11, src_minus10, ++ src_minus11); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, ++ src_zero0, src_zero1); ++ LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, ++ offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ dst0 = __lsx_vsadd_b(dst0, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ ++ src_minus10 = src10; ++ src_minus11 = src11; ++ ++ /* load in advance */ ++ LSX_DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ src10, src11); ++ ++ __lsx_vstelm_d(dst0, dst, 0, 0); ++ __lsx_vstelm_d(dst0, dst + dst_stride, 0, 1); ++ dst += dst_stride_2x; ++ } ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, ++ src_zero0, src_zero1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, shuf2, ++ src_minus10, src_minus11); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src10, src_minus10, src11, src_minus11, src_minus10, ++ src_minus11); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, src_zero0, ++ src_zero1); ++ LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, ++ offset_mask1); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ dst0 = __lsx_vsadd_b(dst0, offset); ++ dst0 = __lsx_vxori_b(dst0, 128); ++ ++ __lsx_vstelm_d(dst0, dst, 0, 0); ++ __lsx_vstelm_d(dst0, dst + dst_stride, 0, 1); ++} ++ ++static void hevc_sao_edge_filter_135degree_16multiple_lsx(uint8_t *dst, ++ int32_t dst_stride, ++ uint8_t *src, ++ int32_t src_stride, ++ int16_t *sao_offset_val, ++ int32_t width, ++ int32_t height) ++{ ++ uint8_t *src_orig, *dst_orig; ++ int32_t v_cnt; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t dst_stride_4x = (dst_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ ++ __m128i shuf1 = {0x807060504030201, 0x100F0E0D0C0B0A09}; ++ __m128i shuf2 = {0x908070605040302, 0x11100F0E0D0C0B0A}; ++ __m128i edge_idx = {0x403000201, 0x0}; ++ __m128i const1 = __lsx_vldi(1); ++ __m128i dst0, dst1, dst2, dst3; ++ __m128i cmp_minus10, cmp_minus11, cmp_minus12, cmp_minus13, cmp_plus10; ++ __m128i cmp_plus11, cmp_plus12, cmp_plus13, diff_minus10, diff_minus11; ++ __m128i diff_minus12, diff_minus13, diff_plus10, diff_plus11, diff_plus12; ++ __m128i diff_plus13, src10, src11, src12, src13, src_minus10, src_minus11; ++ __m128i src_plus10, src_plus11, src_plus12, src_plus13; ++ __m128i src_minus12, src_minus13, src_zero0, src_zero1, src_zero2, src_zero3; ++ __m128i offset_mask0, offset_mask1, offset_mask2, offset_mask3, sao_offset; ++ ++ sao_offset = __lsx_vld(sao_offset_val, 0); ++ sao_offset = __lsx_vpickev_b(sao_offset, sao_offset); ++ ++ for (; height; height -= 4) { ++ src_orig = src - 1; ++ dst_orig = dst; ++ ++ LSX_DUP4_ARG2(__lsx_vld, src_orig, 0, src_orig + src_stride, 0, ++ src_orig + src_stride_2x, 0, src_orig + src_stride_3x, 0, ++ src_minus11, src_plus10, src_plus11, src_plus12); ++ ++ for (v_cnt = 0; v_cnt < width; v_cnt += 16) { ++ src_minus10 = __lsx_vld(src_orig - src_stride, 2); ++ LSX_DUP4_ARG2(__lsx_vld, src_orig, 16, src_orig + src_stride, 16, ++ src_orig + src_stride_2x, 16, src_orig + src_stride_3x, 16, ++ src10, src11, src12, src13); ++ src_plus13 = __lsx_vld(src_orig + src_stride_4x, 0); ++ src_orig += 16; ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src10, src_minus11, shuf1, src11, src_plus10, ++ shuf1, src12, src_plus11, shuf1, src13, src_plus12, shuf1, ++ src_zero0, src_zero1, src_zero2, src_zero3); ++ src_minus11 = __lsx_vshuf_b(src10, src_minus11, shuf2); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src11, src_plus10, shuf2, src12, src_plus11, ++ shuf2, src_minus12, src_minus13); ++ ++ LSX_DUP4_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero0, src_plus10, ++ src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, ++ cmp_plus10, cmp_minus11, cmp_plus11); ++ LSX_DUP4_ARG2(__lsx_vseq_b, src_zero2, src_minus12, src_zero2, src_plus12, ++ src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, ++ cmp_plus12, cmp_minus13, cmp_plus13); ++ LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, ++ cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, diff_minus10, ++ diff_plus10, diff_minus11, diff_plus11); ++ LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, ++ cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, diff_minus12, ++ diff_plus12, diff_minus13, diff_plus13); ++ LSX_DUP4_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero0, src_plus10, ++ src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, ++ cmp_plus10, cmp_minus11, cmp_plus11); ++ LSX_DUP4_ARG2(__lsx_vsle_bu, src_zero2, src_minus12, src_zero2, src_plus12, ++ src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, ++ cmp_plus12, cmp_minus13, cmp_plus13); ++ LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, ++ cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, cmp_minus10, ++ cmp_plus10, cmp_minus11, cmp_plus11); ++ LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, ++ cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, cmp_minus12, ++ cmp_plus12, cmp_minus13, cmp_plus13); ++ LSX_DUP4_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, ++ diff_plus10, const1, cmp_plus10, diff_minus11, const1, ++ cmp_minus11, diff_plus11, const1, cmp_plus11, diff_minus10, ++ diff_plus10, diff_minus11, diff_plus11); ++ LSX_DUP4_ARG3(__lsx_vbitsel_v, diff_minus12, const1, cmp_minus12, ++ diff_plus12, const1, cmp_plus12, diff_minus13, const1, ++ cmp_minus13, diff_plus13, const1, cmp_plus13, diff_minus12, ++ diff_plus12, diff_minus13, diff_plus13); ++ ++ LSX_DUP4_ARG2(__lsx_vadd_b, diff_minus10, diff_plus10, diff_minus11, ++ diff_plus11, diff_minus12, diff_plus12, diff_minus13, ++ diff_plus13, offset_mask0, offset_mask1, offset_mask2, ++ offset_mask3); ++ LSX_DUP4_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, offset_mask2, ++ 2, offset_mask3, 2, offset_mask0, offset_mask1, offset_mask2, ++ offset_mask3); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask0, sao_offset, ++ sao_offset, offset_mask0, offset_mask0, offset_mask0); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask1, sao_offset, ++ sao_offset, offset_mask1, offset_mask1, offset_mask1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask2, sao_offset, ++ sao_offset, offset_mask2, offset_mask2, offset_mask2); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask3, sao_offset, ++ sao_offset, offset_mask3, offset_mask3, offset_mask3); ++ ++ LSX_DUP4_ARG2(__lsx_vxori_b, src_zero0, 128, src_zero1, 128, src_zero2, 128, ++ src_zero3, 128, src_zero0, src_zero1, src_zero2, src_zero3); ++ LSX_DUP4_ARG2(__lsx_vsadd_b, src_zero0, offset_mask0, src_zero1, ++ offset_mask1, src_zero2, offset_mask2, src_zero3, offset_mask3, ++ dst0, dst1, dst2, dst3); ++ LSX_DUP4_ARG2(__lsx_vxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, 128, ++ dst0, dst1, dst2, dst3); ++ ++ src_minus11 = src10; ++ src_plus10 = src11; ++ src_plus11 = src12; ++ src_plus12 = src13; ++ ++ __lsx_vst(dst0, dst_orig, 0); ++ __lsx_vst(dst1, dst_orig + dst_stride, 0); ++ __lsx_vst(dst2, dst_orig + dst_stride_2x, 0); ++ __lsx_vst(dst3, dst_orig + dst_stride_3x, 0); ++ dst_orig += 16; ++ } ++ ++ src += src_stride_4x; ++ dst += dst_stride_4x; ++ } ++} ++ ++void ff_hevc_loop_filter_luma_h_8_lsx(uint8_t *src, ++ ptrdiff_t src_stride, ++ int32_t beta, int32_t *tc, ++ uint8_t *no_p, uint8_t *no_q) ++{ ++ hevc_loopfilter_luma_hor_lsx(src, src_stride, beta, tc, no_p, no_q); ++} ++ ++void ff_hevc_loop_filter_luma_v_8_lsx(uint8_t *src, ++ ptrdiff_t src_stride, ++ int32_t beta, int32_t *tc, ++ uint8_t *no_p, uint8_t *no_q) ++{ ++ hevc_loopfilter_luma_ver_lsx(src, src_stride, beta, tc, no_p, no_q); ++} ++ ++void ff_hevc_loop_filter_chroma_h_8_lsx(uint8_t *src, ++ ptrdiff_t src_stride, ++ int32_t *tc, uint8_t *no_p, ++ uint8_t *no_q) ++{ ++ hevc_loopfilter_chroma_hor_lsx(src, src_stride, tc, no_p, no_q); ++} ++ ++void ff_hevc_loop_filter_chroma_v_8_lsx(uint8_t *src, ++ ptrdiff_t src_stride, ++ int32_t *tc, uint8_t *no_p, ++ uint8_t *no_q) ++{ ++ hevc_loopfilter_chroma_ver_lsx(src, src_stride, tc, no_p, no_q); ++} ++ ++void ff_hevc_sao_edge_filter_8_lsx(uint8_t *dst, uint8_t *src, ++ ptrdiff_t stride_dst, ++ int16_t *sao_offset_val, ++ int eo, int width, int height) ++{ ++ ptrdiff_t stride_src = (2 * MAX_PB_SIZE + AV_INPUT_BUFFER_PADDING_SIZE) / sizeof(uint8_t); ++ ++ switch (eo) { ++ case 0: ++ if (width >> 4) { ++ hevc_sao_edge_filter_0degree_16multiple_lsx(dst, stride_dst, ++ src, stride_src, ++ sao_offset_val, ++ width - (width & 0x0F), ++ height); ++ dst += width - (width & 0x0F); ++ src += width - (width & 0x0F); ++ width &= 0x0F; ++ } ++ ++ if (width >> 3) { ++ hevc_sao_edge_filter_0degree_8width_lsx(dst, stride_dst, ++ src, stride_src, ++ sao_offset_val, height); ++ dst += 8; ++ src += 8; ++ width &= 0x07; ++ } ++ ++ if (width) { ++ hevc_sao_edge_filter_0degree_4width_lsx(dst, stride_dst, ++ src, stride_src, ++ sao_offset_val, height); ++ } ++ break; ++ ++ case 1: ++ if (width >> 4) { ++ hevc_sao_edge_filter_90degree_16multiple_lsx(dst, stride_dst, ++ src, stride_src, ++ sao_offset_val, ++ width - (width & 0x0F), ++ height); ++ dst += width - (width & 0x0F); ++ src += width - (width & 0x0F); ++ width &= 0x0F; ++ } ++ ++ if (width >> 3) { ++ hevc_sao_edge_filter_90degree_8width_lsx(dst, stride_dst, ++ src, stride_src, ++ sao_offset_val, height); ++ dst += 8; ++ src += 8; ++ width &= 0x07; ++ } ++ ++ if (width) { ++ hevc_sao_edge_filter_90degree_4width_lsx(dst, stride_dst, ++ src, stride_src, ++ sao_offset_val, height); ++ } ++ break; ++ ++ case 2: ++ if (width >> 4) { ++ hevc_sao_edge_filter_45degree_16multiple_lsx(dst, stride_dst, ++ src, stride_src, ++ sao_offset_val, ++ width - (width & 0x0F), ++ height); ++ dst += width - (width & 0x0F); ++ src += width - (width & 0x0F); ++ width &= 0x0F; ++ } ++ ++ if (width >> 3) { ++ hevc_sao_edge_filter_45degree_8width_lsx(dst, stride_dst, ++ src, stride_src, ++ sao_offset_val, height); ++ dst += 8; ++ src += 8; ++ width &= 0x07; ++ } ++ ++ if (width) { ++ hevc_sao_edge_filter_45degree_4width_lsx(dst, stride_dst, ++ src, stride_src, ++ sao_offset_val, height); ++ } ++ break; ++ ++ case 3: ++ if (width >> 4) { ++ hevc_sao_edge_filter_135degree_16multiple_lsx(dst, stride_dst, ++ src, stride_src, ++ sao_offset_val, ++ width - (width & 0x0F), ++ height); ++ dst += width - (width & 0x0F); ++ src += width - (width & 0x0F); ++ width &= 0x0F; ++ } ++ ++ if (width >> 3) { ++ hevc_sao_edge_filter_135degree_8width_lsx(dst, stride_dst, ++ src, stride_src, ++ sao_offset_val, height); ++ dst += 8; ++ src += 8; ++ width &= 0x07; ++ } ++ ++ if (width) { ++ hevc_sao_edge_filter_135degree_4width_lsx(dst, stride_dst, ++ src, stride_src, ++ sao_offset_val, height); ++ } ++ break; ++ } ++} +diff --git a/libavcodec/loongarch/hevc_macros_lsx.h b/libavcodec/loongarch/hevc_macros_lsx.h +new file mode 100644 +index 0000000000..580157a8cf +--- /dev/null ++++ b/libavcodec/loongarch/hevc_macros_lsx.h +@@ -0,0 +1,71 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Lu Wang ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef AVCODEC_LOONGARCH_HEVC_MACROS_LSX_H ++#define AVCODEC_LOONGARCH_HEVC_MACROS_LSX_H ++ ++static inline __m128i __lsx_hevc_filt_8tap_h(__m128i in0, __m128i in1, __m128i in2, ++ __m128i in3, __m128i filt0, __m128i filt1, ++ __m128i filt2, __m128i filt3) ++{ ++ __m128i out_m; ++ ++ out_m = __lsx_dp2_h_b(in0, filt0); ++ out_m = __lsx_dp2add_h_b(out_m, in1, filt1); ++ out_m = __lsx_dp2add_h_b(out_m, in2, filt2); ++ out_m = __lsx_dp2add_h_b(out_m, in3, filt3); ++ return out_m; ++} ++ ++static inline __m128i __lsx_hevc_filt_8tap_w(__m128i in0, __m128i in1, __m128i in2, ++ __m128i in3, __m128i filt0, __m128i filt1, ++ __m128i filt2, __m128i filt3) ++{ ++ __m128i out_m; ++ ++ out_m = __lsx_dp2_w_h(in0, filt0); ++ out_m = __lsx_dp2add_w_h(out_m, in1, filt1); ++ out_m = __lsx_dp2add_w_h(out_m, in2, filt2); ++ out_m = __lsx_dp2add_w_h(out_m, in3, filt3); ++ return out_m; ++} ++ ++static inline __m128i __lsx_hevc_filt_4tap_h(__m128i in0, __m128i in1, __m128i filt0, ++ __m128i filt1) ++{ ++ __m128i out_m; ++ ++ out_m = __lsx_dp2_h_b(in0, filt0); ++ out_m = __lsx_dp2add_h_b(out_m, in1, filt1); ++ return out_m; ++} ++ ++static inline __m128i __lsx_hevc_filt_4tap_w(__m128i in0, __m128i in1, __m128i filt0, ++ __m128i filt1) ++{ ++ __m128i out_m; ++ ++ out_m = __lsx_dp2_w_h(in0, filt0); ++ out_m = __lsx_dp2add_w_h(out_m, in1, filt1); ++ return out_m; ++} ++ ++#endif /* AVCODEC_LOONGARCH_HEVC_MACROS_LSX_H */ +diff --git a/libavcodec/loongarch/hevc_mc_bi_lsx.c b/libavcodec/loongarch/hevc_mc_bi_lsx.c +new file mode 100644 +index 0000000000..22dfad90c1 +--- /dev/null ++++ b/libavcodec/loongarch/hevc_mc_bi_lsx.c +@@ -0,0 +1,3075 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Lu Wang ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/loongarch/generic_macros_lsx.h" ++#include "hevcdsp_lsx.h" ++#include "hevc_macros_lsx.h" ++ ++static const uint8_t ff_hevc_mask_arr[16 * 2] __attribute__((aligned(0x40))) = { ++ /* 8 width cases */ ++ 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, ++ 0, 1, 1, 2, 2, 3, 3, 4, 16, 17, 17, 18, 18, 19, 19, 20 ++}; ++ ++static av_always_inline ++void __lsx_hevc_bi_rnd_clip2(__m128i in0, __m128i in1, __m128i vec0, __m128i vec1, ++ __m128i *out0, __m128i *out1) ++{ ++ *out0 = __lsx_vsadd_h(vec0, in0); ++ *out1 = __lsx_vsadd_h(vec1, in1); ++ *out0 = __lsx_vsrari_h(*out0, 7); ++ *out1 = __lsx_vsrari_h(*out1, 7); ++ *out0 = __lsx_clamp255_h(*out0); ++ *out1 = __lsx_clamp255_h(*out1); ++} ++ ++static av_always_inline ++void __lsx_hevc_bi_rnd_clip4(__m128i in0, __m128i in1, __m128i in2, __m128i in3, ++ __m128i vec0, __m128i vec1, __m128i vec2, ++ __m128i vec3, __m128i *out0, __m128i *out1, ++ __m128i *out2, __m128i *out3) ++{ ++ __lsx_hevc_bi_rnd_clip2(in0, in1, vec0, vec1, out0, out1); ++ __lsx_hevc_bi_rnd_clip2(in2, in3, vec2, vec3, out2, out3); ++} ++ ++static void hevc_bi_copy_4w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ int32_t height) ++{ ++ uint32_t loop_cnt, tp0, tp1, tp2, tp3; ++ uint64_t tpd0, tpd1, tpd2, tpd3; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t dst_stride_4x = (dst_stride << 2); ++ const int32_t src2_stride_2x = (src2_stride << 1); ++ const int32_t src2_stride_4x = (src2_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ __m128i src0, src1; ++ __m128i zero = {0}; ++ __m128i in0, in1, in2, in3; ++ __m128i dst0, dst1, dst2, dst3; ++ ++ if (2 == height) { ++ tp0 = *(uint32_t *)src0_ptr; ++ tp1 = *(uint32_t *)(src0_ptr + src_stride); ++ LSX_DUP2_ARG3(__lsx_vinsgr2vr_w, src0, tp0, 0, src0, tp1, 1, src0, src0); ++ tpd0 = *(uint64_t *)src1_ptr; ++ tpd1 = *(uint64_t *)(src1_ptr + src2_stride); ++ LSX_DUP2_ARG3(__lsx_vinsgr2vr_d, in0, tpd0, 0, in0, tpd1, 1, in0, in0); ++ ++ dst0 = __lsx_vilvl_b(zero, src0); ++ dst0 = __lsx_vslli_h(dst0, 6); ++ dst0 = __lsx_vadd_h(dst0, in0); ++ dst0 = __lsx_vmaxi_h(dst0, 0); ++ dst0 = __lsx_vssrlrni_bu_h(dst0, dst0, 7); ++ __lsx_vstelm_w(dst0, dst, 0, 0); ++ __lsx_vstelm_w(dst0, dst + dst_stride, 0, 1); ++ } else if (4 == height) { ++ tp0 = *(uint32_t *)src0_ptr; ++ tp1 = *(uint32_t *)(src0_ptr + src_stride); ++ tp2 = *(uint32_t *)(src0_ptr + src_stride_2x); ++ tp3 = *(uint32_t *)(src0_ptr + src_stride_3x); ++ LSX_DUP4_ARG3(__lsx_vinsgr2vr_w, src0, tp0, 0, src0, tp1, 1, src0, tp2, 2, src0, ++ tp3, 3, src0, src0, src0, src0); ++ tpd0 = *(uint64_t *)src1_ptr; ++ tpd1 = *(uint64_t *)(src1_ptr + src2_stride); ++ tpd2 = *(uint64_t *)(src1_ptr + src2_stride_2x); ++ tpd3 = *(uint64_t *)(src1_ptr + src2_stride_3x); ++ LSX_DUP4_ARG3(__lsx_vinsgr2vr_d, in0, tpd0, 0, in0, tpd1, 1, in1, tpd2, 0, in1, ++ tpd3, 1, in0, in0, in1, in1); ++ dst0 = __lsx_vilvl_b(zero, src0); ++ dst1 = __lsx_vilvh_b(zero, src0); ++ LSX_DUP2_ARG2(__lsx_vslli_h, dst0, 6, dst1, 6, dst0, dst1); ++ __lsx_hevc_bi_rnd_clip2(in0, in1, dst0, dst1, &dst0, &dst1); ++ dst0 = __lsx_vpickev_b(dst1, dst0); ++ __lsx_vstelm_w(dst0, dst, 0, 0); ++ __lsx_vstelm_w(dst0, dst + dst_stride, 0, 1); ++ __lsx_vstelm_w(dst0, dst + dst_stride_2x, 0, 2); ++ __lsx_vstelm_w(dst0, dst + dst_stride_3x, 0, 3); ++ } else if (0 == (height & 0x07)) { ++ for (loop_cnt = (height >> 3); loop_cnt--;) { ++ tp0 = *(uint32_t *)src0_ptr; ++ tp1 = *(uint32_t *)(src0_ptr + src_stride); ++ tp2 = *(uint32_t *)(src0_ptr + src_stride_2x); ++ tp3 = *(uint32_t *)(src0_ptr + src_stride_3x); ++ LSX_DUP4_ARG3(__lsx_vinsgr2vr_w, src0, tp0, 0, src0, tp1, 1, src0, tp2, 2, ++ src0, tp3, 3, src0, src0, src0, src0); ++ src0_ptr += src_stride_4x; ++ tp0 = *(uint32_t *)src0_ptr; ++ tp1 = *(uint32_t *)(src0_ptr + src_stride); ++ tp2 = *(uint32_t *)(src0_ptr + src_stride_2x); ++ tp3 = *(uint32_t *)(src0_ptr + src_stride_3x); ++ LSX_DUP4_ARG3(__lsx_vinsgr2vr_w, src1, tp0, 0, src1, tp1, 1, src1, tp2, 2, ++ src1, tp3, 3, src1, src1, src1, src1); ++ src0_ptr += src_stride_4x; ++ tpd0 = *(uint64_t *)src1_ptr; ++ tpd1 = *(uint64_t *)(src1_ptr + src2_stride); ++ tpd2 = *(uint64_t *)(src1_ptr + src2_stride_2x); ++ tpd3 = *(uint64_t *)(src1_ptr + src2_stride_3x); ++ LSX_DUP4_ARG3(__lsx_vinsgr2vr_d, in0, tpd0, 0, in0, tpd1, 1, in1, tpd2, 0, ++ in1, tpd3, 1, in0, in0, in1, in1); ++ src1_ptr += src2_stride_4x; ++ tpd0 = *(uint64_t *)src1_ptr; ++ tpd1 = *(uint64_t *)(src1_ptr + src2_stride); ++ tpd2 = *(uint64_t *)(src1_ptr + src2_stride_2x); ++ tpd3 = *(uint64_t *)(src1_ptr + src2_stride_3x); ++ LSX_DUP4_ARG3(__lsx_vinsgr2vr_d, in2, tpd0, 0, in2, tpd1, 1, in3, tpd2, 0, ++ in3, tpd3, 1, in2, in2, in3, in3); ++ src1_ptr += src2_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, dst0, dst2); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, dst1, dst3); ++ LSX_DUP2_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst1, dst3); ++ ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, ++ &dst0, &dst1, &dst2, &dst3); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); ++ __lsx_vstelm_w(dst0, dst, 0, 0); ++ __lsx_vstelm_w(dst0, dst + dst_stride, 0, 1); ++ __lsx_vstelm_w(dst0, dst + dst_stride_2x, 0, 2); ++ __lsx_vstelm_w(dst0, dst + dst_stride_3x, 0, 3); ++ dst += dst_stride_4x; ++ __lsx_vstelm_w(dst1, dst, 0, 0); ++ __lsx_vstelm_w(dst1, dst + dst_stride, 0, 1); ++ __lsx_vstelm_w(dst1, dst + dst_stride_2x, 0, 2); ++ __lsx_vstelm_w(dst1, dst + dst_stride_3x, 0, 3); ++ dst += dst_stride_4x; ++ } ++ } ++} ++ ++static void hevc_bi_copy_6w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ uint64_t tp0, tp1, tp2, tp3; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t dst_stride_4x = (dst_stride << 2); ++ const int32_t src2_stride_2x = (src2_stride << 1); ++ const int32_t src2_stride_4x = (src2_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ __m128i out0, out1, out2, out3; ++ __m128i zero = {0}; ++ __m128i src0, src1, src2, src3; ++ __m128i in0, in1, in2, in3, in4, in5, in6, in7; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; ++ ++ for (loop_cnt = (height >> 3); loop_cnt--;) { ++ tp0 = *(uint64_t *)src0_ptr; ++ tp1 = *(uint64_t *)(src0_ptr + src_stride); ++ tp2 = *(uint64_t *)(src0_ptr + src_stride_2x); ++ tp3 = *(uint64_t *)(src0_ptr + src_stride_3x); ++ LSX_DUP4_ARG3(__lsx_vinsgr2vr_d, src0, tp0, 0, src0, tp1, 1, src1, tp2, 0, src1, ++ tp3, 1, src0, src0, src1, src1); ++ src0_ptr += src_stride_4x; ++ tp0 = *(uint64_t *)src0_ptr; ++ tp1 = *(uint64_t *)(src0_ptr + src_stride); ++ tp2 = *(uint64_t *)(src0_ptr + src_stride_2x); ++ tp3 = *(uint64_t *)(src0_ptr + src_stride_3x); ++ LSX_DUP4_ARG3(__lsx_vinsgr2vr_d, src2, tp0, 0, src2, tp1, 1, src3, tp2, 0, src3, ++ tp3, 1, src2, src2, src3, src3); ++ src0_ptr += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in0, in1, in2, in3); ++ src1_ptr += src2_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in4, in5, in6, in7); ++ src1_ptr += src2_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, ++ dst0, dst2, dst4, dst6); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ dst1, dst3, dst5, dst7); ++ LSX_DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst5, 6, dst7, 6, dst1, dst3, ++ dst5, dst7); ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, ++ &dst0, &dst1, &dst2, &dst3); ++ __lsx_hevc_bi_rnd_clip4(in4, in5, in6, in7, dst4, dst5, dst6, dst7, ++ &dst4, &dst5, &dst6, &dst7); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst5, dst4, dst7, dst6, out2, out3); ++ __lsx_vstelm_w(out0, dst, 0, 0); ++ __lsx_vstelm_w(out0, dst + dst_stride, 0, 2); ++ __lsx_vstelm_h(out0, dst, 4, 2); ++ __lsx_vstelm_h(out0, dst + dst_stride, 4, 6); ++ __lsx_vstelm_w(out1, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_w(out1, dst + dst_stride_3x, 0, 2); ++ __lsx_vstelm_h(out1, dst + dst_stride_2x, 4, 2); ++ __lsx_vstelm_h(out1, dst + dst_stride_3x, 4, 6); ++ dst += dst_stride_4x; ++ __lsx_vstelm_w(out2, dst, 0, 0); ++ __lsx_vstelm_w(out2, dst + dst_stride, 0, 2); ++ __lsx_vstelm_h(out2, dst, 4, 2); ++ __lsx_vstelm_h(out2, dst + dst_stride, 4, 6); ++ __lsx_vstelm_w(out3, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_w(out3, dst + dst_stride_3x, 0, 2); ++ __lsx_vstelm_h(out3, dst + dst_stride_2x, 4, 2); ++ __lsx_vstelm_h(out3, dst + dst_stride_3x, 4, 6); ++ dst += dst_stride_4x; ++ } ++} ++ ++static void hevc_bi_copy_8w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ int32_t height) ++{ ++ uint64_t tp0, tp1, tp2, tp3; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t dst_stride_4x = (dst_stride << 2); ++ const int32_t src2_stride_2x = (src2_stride << 1); ++ const int32_t src2_stride_4x = (src2_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ __m128i out0, out1, out2, out3; ++ __m128i src0, src1, src2, src3; ++ __m128i zero = {0}; ++ __m128i in0, in1, in2, in3, in4, in5, in6, in7; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; ++ ++ if (2 == height) { ++ tp0 = *(uint64_t *)src0_ptr; ++ tp1 = *(uint64_t *)(src0_ptr + src_stride); ++ LSX_DUP2_ARG3(__lsx_vinsgr2vr_d, src0, tp0, 0, src0, tp1, 1, src0, src0); ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); ++ dst0 = __lsx_vsllwil_hu_bu(src0, 6); ++ dst1 = __lsx_vilvh_b(zero, src0); ++ dst1 = __lsx_vslli_h(dst1, 6); ++ __lsx_hevc_bi_rnd_clip2(in0, in1, dst0, dst1, &dst0, &dst1); ++ out0 = __lsx_vpickev_b(dst1, dst0); ++ __lsx_vstelm_d(out0, dst, 0, 0); ++ __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); ++ } else if (4 == height) { ++ tp0 = *(uint64_t *)src0_ptr; ++ tp1 = *(uint64_t *)(src0_ptr + src_stride); ++ tp2 = *(uint64_t *)(src0_ptr + src_stride_2x); ++ tp3 = *(uint64_t *)(src0_ptr + src_stride_3x); ++ LSX_DUP4_ARG3(__lsx_vinsgr2vr_d, src0, tp0, 0, src0, tp1, 1, src1, tp2, 0, src1, ++ tp3, 1, src0, src0, src1, src1); ++ LSX_DUP2_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, dst0, dst2); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, dst1, dst3); ++ LSX_DUP2_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst1, dst3); ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, in0, ++ in1, in2, in3); ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, ++ &dst0, &dst1, &dst2, &dst3); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); ++ __lsx_vstelm_d(out0, dst, 0, 0); ++ __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(out1, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(out1, dst + dst_stride_3x, 0, 1); ++ } else if (6 == height) { ++ tp0 = *(uint64_t *)src0_ptr; ++ tp1 = *(uint64_t *)(src0_ptr + src_stride); ++ tp2 = *(uint64_t *)(src0_ptr + src_stride_2x); ++ tp3 = *(uint64_t *)(src0_ptr + src_stride_3x); ++ LSX_DUP4_ARG3(__lsx_vinsgr2vr_d, src0, tp0, 0, src0, tp1, 1, src1, tp2, 0, src1, ++ tp3, 1, src0, src0, src1, src1); ++ src0_ptr += src_stride_4x; ++ tp0 = *(uint64_t *)src0_ptr; ++ tp1 = *(uint64_t *)(src0_ptr + src_stride); ++ LSX_DUP2_ARG3(__lsx_vinsgr2vr_d, src2, tp0, 0, src2, tp1, 1, src2, src2); ++ ++ LSX_DUP2_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, dst0, dst2); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, dst1, dst3); ++ LSX_DUP2_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst1, dst3); ++ dst4 = __lsx_vsllwil_hu_bu(src2, 6); ++ dst5 = __lsx_vilvh_b(zero, src2); ++ dst5 = __lsx_vslli_h(dst5, 6); ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in0, in1, in2, in3); ++ src1_ptr += src2_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in4, in5); ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, ++ &dst0, &dst1, &dst2, &dst3); ++ __lsx_hevc_bi_rnd_clip2(in4, in5, dst4, dst5, &dst4, &dst5); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); ++ out2 = __lsx_vpickev_b(dst5, dst4); ++ __lsx_vstelm_d(out0, dst, 0, 0); ++ __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(out1, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(out1, dst + dst_stride_3x, 0, 1); ++ __lsx_vstelm_d(out2, dst + dst_stride_4x, 0, 0); ++ __lsx_vstelm_d(out2, dst + dst_stride_4x + dst_stride, 0, 1); ++ } else if (0 == (height & 0x07)) { ++ uint32_t loop_cnt; ++ ++ for (loop_cnt = (height >> 3); loop_cnt--;) { ++ tp0 = *(uint64_t *)src0_ptr; ++ tp1 = *(uint64_t *)(src0_ptr + src_stride); ++ tp2 = *(uint64_t *)(src0_ptr + src_stride_2x); ++ tp3 = *(uint64_t *)(src0_ptr + src_stride_3x); ++ LSX_DUP4_ARG3(__lsx_vinsgr2vr_d, src0, tp0, 0, src0, tp1, 1, src1, tp2, 0, ++ src1, tp3, 1, src0, src0, src1, src1); ++ src0_ptr += src_stride_4x; ++ tp0 = *(uint64_t *)src0_ptr; ++ tp1 = *(uint64_t *)(src0_ptr + src_stride); ++ tp2 = *(uint64_t *)(src0_ptr + src_stride_2x); ++ tp3 = *(uint64_t *)(src0_ptr + src_stride_3x); ++ LSX_DUP4_ARG3(__lsx_vinsgr2vr_d, src2, tp0, 0, src2, tp1, 1, src3, tp2, 0, ++ src3, tp3, 1, src2, src2, src3, src3); ++ src0_ptr += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, dst0, ++ dst2, dst4, dst6); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ dst1, dst3, dst5, dst7); ++ LSX_DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst5, 6, dst7, 6, dst1, ++ dst3, dst5, dst7); ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in0, in1, in2, in3); ++ src1_ptr += src2_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in4, in5, in6, in7); ++ src1_ptr += src2_stride_4x; ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, ++ dst3, &dst0, &dst1, &dst2, &dst3); ++ __lsx_hevc_bi_rnd_clip4(in4, in5, in6, in7, dst4, dst5, dst6, ++ dst7, &dst4, &dst5, &dst6, &dst7); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst5, dst4, dst7, dst6, out2, out3); ++ __lsx_vstelm_d(out0, dst, 0, 0); ++ __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(out1, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(out1, dst + dst_stride_3x, 0, 1); ++ dst += dst_stride_4x; ++ __lsx_vstelm_d(out2, dst, 0, 0); ++ __lsx_vstelm_d(out2, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(out3, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(out3, dst + dst_stride_3x, 0, 1); ++ dst += dst_stride_4x; ++ } ++ } ++} ++ ++static void hevc_bi_copy_12w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t dst_stride_4x = (dst_stride << 2); ++ const int32_t src2_stride_2x = (src2_stride << 1); ++ const int32_t src2_stride_4x = (src2_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ __m128i out0, out1, out2; ++ __m128i src0, src1, src2, src3; ++ __m128i in0, in1, in2, in3, in4, in5, in6, in7; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5; ++ ++ for (loop_cnt = 4; loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, ++ src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, ++ src0, src1, src2, src3); ++ src0_ptr += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, ++ src1_ptr + src2_stride_2x, 16, src1_ptr + src2_stride_3x, 16, ++ in4, in5, in6, in7); ++ ++ src1_ptr += src2_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vilvl_d, in5, in4, in7, in6, in4, in5); ++ LSX_DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, ++ dst0, dst1, dst2, dst3) ++ LSX_DUP2_ARG2(__lsx_vilvh_w, src1, src0, src3, src2, src0, src1); ++ LSX_DUP2_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, dst4, dst5) ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, ++ &dst0, &dst1, &dst2, &dst3); ++ __lsx_hevc_bi_rnd_clip2(in4, in5, dst4, dst5, &dst4, &dst5); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); ++ out2 = __lsx_vpickev_b(dst5, dst4); ++ __lsx_vstelm_d(out0, dst, 0, 0); ++ __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(out1, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(out1, dst + dst_stride_3x, 0, 1); ++ __lsx_vstelm_w(out2, dst, 8, 0); ++ __lsx_vstelm_w(out2, dst + dst_stride, 8, 1); ++ __lsx_vstelm_w(out2, dst + dst_stride_2x, 8, 2); ++ __lsx_vstelm_w(out2, dst + dst_stride_3x, 8, 3); ++ dst += dst_stride_4x; ++ } ++} ++ ++static void hevc_bi_copy_16w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t dst_stride_4x = (dst_stride << 2); ++ const int32_t src2_stride_2x = (src2_stride << 1); ++ const int32_t src2_stride_4x = (src2_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ __m128i out0, out1, out2, out3; ++ __m128i src0, src1, src2, src3; ++ __m128i in0, in1, in2, in3, in4, in5, in6, in7; ++ __m128i dst0_r, dst1_r, dst2_r, dst3_r, dst0_l, dst1_l, dst2_l, dst3_l; ++ __m128i zero = {0}; ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, ++ src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, ++ src0, src1, src2, src3); ++ src0_ptr += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, ++ src1_ptr + src2_stride_2x, 16, src1_ptr + src2_stride_3x, 16, ++ in4, in5, in6, in7); ++ src1_ptr += src2_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, ++ dst0_r, dst1_r, dst2_r, dst3_r) ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ dst0_l, dst1_l, dst2_l, dst3_l); ++ LSX_DUP4_ARG2(__lsx_vslli_h, dst0_l, 6, dst1_l, 6, dst2_l, 6, dst3_l, 6, dst0_l, ++ dst1_l, dst2_l, dst3_l); ++ ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in4, in5, dst0_r, dst1_r, dst0_l, ++ dst1_l, &dst0_r, &dst1_r, &dst0_l, &dst1_l); ++ __lsx_hevc_bi_rnd_clip4(in2, in3, in6, in7, dst2_r, dst3_r, dst2_l, ++ dst3_l, &dst2_r, &dst3_r, &dst2_l, &dst3_l); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst2_l, dst2_r, dst3_l, dst3_r, out2, out3); ++ __lsx_vst(out0, dst, 0); ++ __lsx_vstx(out1, dst, dst_stride); ++ __lsx_vstx(out2, dst, dst_stride_2x); ++ __lsx_vstx(out3, dst, dst_stride_3x); ++ dst += dst_stride_4x; ++ } ++} ++ ++static void hevc_bi_copy_24w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t dst_stride_4x = (dst_stride << 2); ++ const int32_t src2_stride_2x = (src2_stride << 1); ++ const int32_t src2_stride_4x = (src2_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ __m128i out0, out1, out2, out3, out4, out5; ++ __m128i zero = {0}; ++ __m128i in0, in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, dst8, dst9, dst10, dst11; ++ ++ for (loop_cnt = 8; loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, ++ src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, ++ in0, in1, in4, in5); ++ LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, ++ src0_ptr + src_stride_2x, 16, src0_ptr + src_stride_3x, 16, ++ in2, in3, in6, in7); ++ LSX_DUP4_ARG2(__lsx_vsllwil_hu_bu, in0, 6, in1, 6, in2, 6, in3, 6, ++ dst0, dst2, dst4, dst5) ++ ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, in0, zero, in1, zero, in4, zero, in5, ++ dst1, dst3, dst7, dst9); ++ LSX_DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst7, 6, dst9, 6, ++ dst1, dst3, dst7, dst9); ++ LSX_DUP4_ARG2(__lsx_vsllwil_hu_bu, in4, 6, in5, 6, in6, 6, in7, 6, ++ dst6, dst8, dst10, dst11) ++ ++ src0_ptr += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, ++ src1_ptr + src2_stride_2x, 16, src1_ptr + src2_stride_3x, 16, ++ in4, in5, in6, in7); ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 32, src1_ptr + src2_stride, 32, ++ src1_ptr + src2_stride_2x, 32, src1_ptr + src2_stride_3x, 32, ++ in8, in9, in10, in11); ++ src1_ptr += src2_stride_4x; ++ ++ __lsx_hevc_bi_rnd_clip4(in0, in4, in1, in5, dst0, dst1, dst2, dst3, ++ &dst0, &dst1, &dst2, &dst3); ++ __lsx_hevc_bi_rnd_clip4(in8, in9, in2, in6, dst4, dst5, dst6, dst7, ++ &dst4, &dst5, &dst6, &dst7); ++ __lsx_hevc_bi_rnd_clip4(in3, in7, in10, in11, dst8, dst9, dst10, dst11, ++ &dst8, &dst9, &dst10, &dst11); ++ LSX_DUP4_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, ++ out0, out1, out2, out3); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst9, dst8, dst11, dst10, out4, out5); ++ __lsx_vst(out0, dst, 0); ++ __lsx_vstelm_d(out2, dst, 16, 0); ++ __lsx_vstx(out1, dst, dst_stride); ++ __lsx_vstelm_d(out2, dst + dst_stride, 16, 1); ++ __lsx_vstx(out3, dst, dst_stride_2x); ++ __lsx_vstelm_d(out5, dst + dst_stride_2x, 16, 0); ++ __lsx_vstx(out4, dst, dst_stride_3x); ++ __lsx_vstelm_d(out5, dst + dst_stride_3x, 16, 1); ++ dst += dst_stride_4x; ++ } ++} ++ ++static void hevc_bi_copy_32w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ __m128i out0, out1, out2, out3; ++ __m128i src0, src1, src2, src3; ++ __m128i zero = {0}; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; ++ __m128i in0, in1, in2, in3, in4, in5, in6, in7; ++ ++ for (loop_cnt = (height >> 1); loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); ++ src0_ptr += src_stride; ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src2, src3); ++ src0_ptr += src_stride; ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, 48, ++ in0, in1, in2, in3); ++ src1_ptr += src2_stride; ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, 48, ++ in4, in5, in6, in7); ++ src1_ptr += src2_stride; ++ ++ LSX_DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, ++ dst0, dst2, dst4, dst6) ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ dst1, dst3, dst5, dst7); ++ LSX_DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst5, 6, dst7, 6, dst1, dst3, ++ dst5, dst7); ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, ++ &dst0, &dst1, &dst2, &dst3); ++ __lsx_hevc_bi_rnd_clip4(in4, in5, in6, in7, dst4, dst5, dst6, dst7, ++ &dst4, &dst5, &dst6, &dst7); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst5, dst4, dst7, dst6, out2, out3); ++ __lsx_vst(out0, dst, 0); ++ __lsx_vst(out1, dst, 16); ++ dst += dst_stride; ++ __lsx_vst(out2, dst, 0); ++ __lsx_vst(out3, dst, 16); ++ dst += dst_stride; ++ } ++} ++ ++static void hevc_bi_copy_48w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ __m128i out0, out1, out2, out3, out4, out5; ++ __m128i src0, src1, src2, src3, src4, src5; ++ __m128i zero = {0}; ++ __m128i in0, in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, dst8, dst9, dst10, dst11; ++ ++ for (loop_cnt = (height >> 1); loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); ++ src2 = __lsx_vld(src0_ptr, 32); ++ src0_ptr += src_stride; ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src3, src4); ++ src5 = __lsx_vld(src0_ptr, 32); ++ src0_ptr += src_stride; ++ ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, 48, ++ in0, in1, in2, in3); ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 64, src1_ptr, 80, in4, in5); ++ src1_ptr += src2_stride; ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, 48, ++ in6, in7, in8, in9); ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 64, src1_ptr, 80, in10, in11); ++ src1_ptr += src2_stride; ++ ++ LSX_DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, ++ dst0, dst2, dst4, dst6); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ dst1, dst3, dst5, dst7); ++ LSX_DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst5, 6, dst7, 6, dst1, dst3, ++ dst5, dst7); ++ LSX_DUP2_ARG2(__lsx_vsllwil_hu_bu, src4, 6, src5, 6, dst8, dst10); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, dst9, dst11); ++ LSX_DUP2_ARG2(__lsx_vslli_h, dst9, 6, dst11, 6, dst9, dst11); ++ ++ ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, ++ &dst0, &dst1, &dst2, &dst3); ++ __lsx_hevc_bi_rnd_clip4(in4, in5, in6, in7, dst4, dst5, dst6, dst7, ++ &dst4, &dst5, &dst6, &dst7); ++ __lsx_hevc_bi_rnd_clip4(in8, in9, in10, in11, dst8, dst9, dst10, dst11, ++ &dst8, &dst9, &dst10, &dst11); ++ LSX_DUP4_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, ++ out0, out1, out2, out3); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst9, dst8, dst11, dst10, out4, out5); ++ __lsx_vst(out0, dst, 0); ++ __lsx_vst(out1, dst, 16); ++ __lsx_vst(out2, dst, 32); ++ dst += dst_stride; ++ __lsx_vst(out3, dst, 0); ++ __lsx_vst(out4, dst, 16); ++ __lsx_vst(out5, dst, 32); ++ dst += dst_stride; ++ } ++} ++ ++static void hevc_bi_copy_64w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ __m128i out0, out1, out2, out3; ++ __m128i src0, src1, src2, src3; ++ __m128i zero = {0}; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; ++ __m128i in0, in1, in2, in3, in4, in5, in6, in7; ++ ++ for (loop_cnt = height; loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0_ptr, 32, src0_ptr, 48, ++ src0, src1, src2, src3); ++ src0_ptr += src_stride; ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, 48, ++ in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 64, src1_ptr, 80, src1_ptr, 96, src1_ptr, 112, ++ in4, in5, in6, in7); ++ src1_ptr += src2_stride; ++ ++ LSX_DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, ++ dst0, dst2, dst4, dst6); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ dst1, dst3, dst5, dst7); ++ LSX_DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst5, 6, dst7, 6, dst1, dst3, ++ dst5, dst7); ++ ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, ++ &dst0, &dst1, &dst2, &dst3); ++ __lsx_hevc_bi_rnd_clip4(in4, in5, in6, in7, dst4, dst5, dst6, dst7, ++ &dst4, &dst5, &dst6, &dst7); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst5, dst4, dst7, dst6, out2, out3); ++ ++ __lsx_vst(out0, dst, 0); ++ __lsx_vst(out1, dst, 16); ++ __lsx_vst(out2, dst, 32); ++ __lsx_vst(out3, dst, 48); ++ dst += dst_stride; ++ } ++} ++ ++static void hevc_hz_bi_8t_16w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ __m128i src0, src1, src2, src3; ++ __m128i filt0, filt1, filt2, filt3; ++ __m128i mask1, mask2, mask3; ++ __m128i vec0, vec1, vec2, vec3; ++ __m128i dst0, dst1, dst2, dst3; ++ __m128i in0, in1, in2, in3; ++ __m128i const_vec; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ ++ src0_ptr -= 3; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); ++ ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ ++ for (loop_cnt = (height >> 1); loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 8, src0, src1); ++ src0_ptr += src_stride; ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 8, src2, src3); ++ src0_ptr += src_stride; ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, in0, in1); ++ src1_ptr += src2_stride; ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, in2, in3); ++ src1_ptr += src2_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, ++ dst3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, ++ vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, ++ vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, &dst0, &dst1, ++ &dst2, &dst3); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); ++ __lsx_vst(dst0, dst, 0); ++ __lsx_vstx(dst1, dst, dst_stride); ++ dst += dst_stride_2x; ++ } ++} ++ ++static void hevc_hz_bi_8t_24w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ __m128i src0, src1, tmp0, tmp1; ++ __m128i filt0, filt1, filt2, filt3; ++ __m128i mask1, mask2, mask3, mask4, mask5, mask6, mask7; ++ __m128i vec0, vec1, vec2, vec3; ++ __m128i dst0, dst1, dst2; ++ __m128i in0, in1, in2; ++ __m128i const_vec; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ ++ src0_ptr -= 3; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); ++ ++ LSX_DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, ++ mask3, mask4); ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); ++ mask7 = __lsx_vaddi_bu(mask0, 14); ++ ++ for (loop_cnt = height; loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); ++ src0_ptr += src_stride; ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, in0, in1); ++ in2 = __lsx_vld(src1_ptr, 32); ++ src1_ptr += src2_stride; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, src1, src1, ++ mask0, src0, src0, mask1, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, dst0, vec3, filt1, dst0, dst1, dst2, dst0); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src0, mask5, src1, src1, mask1, src0, src0, ++ mask2, src1, src0, mask6, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst1, vec0, filt1, dst2, vec1, filt1, dst0, vec2, ++ filt2, dst1, vec3, filt2, dst1, dst2, dst0, dst1); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask2, src0, src0, mask3, src1, src0, ++ mask7, src1, src1, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst2, vec0, filt2, dst0, vec1, filt3, dst1, ++ vec2, filt3, dst2, vec3, filt3, dst2, dst0, dst1, dst2); ++ ++ __lsx_hevc_bi_rnd_clip2(in0, in1, dst0, dst1, &dst0, &dst1); ++ tmp0 = __lsx_vpickev_b(dst1, dst0); ++ dst2 = __lsx_vsadd_h(dst2, in2); ++ dst2 = __lsx_vmaxi_h(dst2, 0); ++ tmp1 = __lsx_vssrlrni_bu_h(dst2, dst2, 7); ++ ++ __lsx_vst(tmp0, dst, 0); ++ __lsx_vstelm_d(tmp1, dst, 16, 0); ++ dst += dst_stride; ++ } ++} ++ ++static void hevc_hz_bi_8t_32w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ __m128i src0, src1, src2, tmp0, tmp1; ++ __m128i filt0, filt1, filt2, filt3; ++ __m128i mask1, mask2, mask3, mask4, mask5, mask6, mask7; ++ __m128i vec0, vec1, vec2, vec3; ++ __m128i dst0, dst1, dst2, dst3; ++ __m128i in0, in1, in2, in3; ++ __m128i const_vec; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ ++ src0_ptr -= 3; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); ++ ++ LSX_DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, ++ mask3, mask4); ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); ++ mask7 = __lsx_vaddi_bu(mask0, 14); ++ ++ for (loop_cnt = height; loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); ++ src2 = __lsx_vld(src0_ptr, 24); ++ src0_ptr += src_stride; ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, ++ 48, in0, in1, in2, in3); ++ src1_ptr += src2_stride; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src2, src2, mask0, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, ++ dst3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask1, src2, src2, mask1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask2, src2, src2, mask2, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, vec2, ++ filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask3, src2, src2, mask3, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, vec2, ++ filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, ++ &dst0, &dst1, &dst2, &dst3); ++ ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, tmp0, tmp1); ++ __lsx_vst(tmp0, dst, 0); ++ __lsx_vst(tmp1, dst, 16); ++ dst += dst_stride; ++ } ++} ++ ++static void hevc_hz_bi_8t_48w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ __m128i src0, src1, src2, src3; ++ __m128i tmp0, tmp1, tmp2; ++ __m128i filt0, filt1, filt2, filt3; ++ __m128i mask1, mask2, mask3, mask4, mask5, mask6, mask7; ++ __m128i vec0, vec1, vec2, vec3; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5; ++ __m128i in0, in1, in2, in3, in4, in5; ++ __m128i const_vec; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ ++ src0_ptr -= 3; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); ++ ++ LSX_DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, ++ mask3, mask4); ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); ++ mask7 = __lsx_vaddi_bu(mask0, 14); ++ ++ for (loop_cnt = 64; loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 32, src0_ptr, 40, src2, src3); ++ src0_ptr += src_stride; ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, ++ 48, in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, src1, src1, ++ mask0, src2, src1, mask4, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, ++ dst3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, src1, src1, ++ mask1, src2, src1, mask5, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, src1, src1, ++ mask2, src2, src1, mask6, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, ++ vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, src1, src1, ++ mask3, src2, src1, mask7, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, ++ vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ __lsx_hevc_bi_rnd_clip2(in0, in1, dst0, dst1, &dst0, &dst1); ++ __lsx_hevc_bi_rnd_clip2(in2, in3, dst2, dst3, &dst2, &dst3); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, tmp0, tmp1); ++ __lsx_vst(tmp0, dst, 0); ++ __lsx_vst(tmp1, dst, 16); ++ ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 64, src1_ptr, 80, in4, in5); ++ src1_ptr += src2_stride; ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, src2, src2, ++ mask1, src3, src3, mask1, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ dst4, vec2, filt1, dst5, vec3, filt1, dst4, dst5, dst4, dst5); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, src2, src2, ++ mask3, src3, src3, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst4, vec0, filt2, dst5, vec1, filt2, dst4, ++ vec2, filt3, dst5, vec3, filt3, dst4, dst5, dst4, dst5); ++ ++ __lsx_hevc_bi_rnd_clip2(in4, in5, dst4, dst5, &dst4, &dst5); ++ tmp2 = __lsx_vpickev_b(dst5, dst4); ++ __lsx_vst(tmp2, dst, 32); ++ dst += dst_stride; ++ } ++} ++ ++static void hevc_hz_bi_8t_64w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ __m128i src0, src1, src2, src3, src4, src5, tmp0, tmp1; ++ __m128i filt0, filt1, filt2, filt3; ++ __m128i mask1, mask2, mask3, mask4, mask5, mask6, mask7; ++ __m128i vec0, vec1, vec2, vec3; ++ __m128i dst0, dst1, dst2, dst3; ++ __m128i in0, in1, in2, in3; ++ __m128i const_vec; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ ++ src0_ptr -= 3; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); ++ ++ LSX_DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, ++ mask3, mask4); ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); ++ mask7 = __lsx_vaddi_bu(mask0, 14); ++ ++ for (loop_cnt = height; loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); ++ src2 = __lsx_vld(src0_ptr, 24); ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 32, src0_ptr, 48, src3, src4); ++ src5 = __lsx_vld(src0_ptr, 56); ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, ++ 48, in0, in1, in2, in3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src2, src2, mask0, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, ++ dst3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask1, src2, src2, mask1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask2, src2, src2, mask2, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, ++ vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask3, src2, src2, mask3, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, ++ vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, ++ &dst0, &dst1, &dst2, &dst3); ++ ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, tmp0, tmp1); ++ __lsx_vst(tmp0, dst, 0); ++ __lsx_vst(tmp1, dst, 16); ++ ++ src0 = src3; ++ src1 = src4; ++ src2 = src5; ++ ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 64, src1_ptr, 80, src1_ptr, 96, src1_ptr, ++ 112, in0, in1, in2, in3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src2, src2, mask0, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, ++ dst3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask1, src2, src2, mask1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask2, src2, src2, mask2, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, ++ vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask3, src2, src2, mask3, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, ++ vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, ++ &dst0, &dst1, &dst2, &dst3); ++ ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, tmp0, tmp1); ++ __lsx_vst(tmp0, dst, 32); ++ __lsx_vst(tmp1, dst, 48); ++ src1_ptr += src2_stride; ++ src0_ptr += src_stride; ++ dst += dst_stride; ++ } ++} ++ ++static av_always_inline ++void hevc_vt_bi_8t_8w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ int32_t loop_cnt; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t dst_stride_4x = (dst_stride << 2); ++ const int32_t src2_stride_2x = (src2_stride << 1); ++ const int32_t src2_stride_4x = (src2_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ __m128i src0, src1, src2, src3, src4, src5; ++ __m128i src6, src7, src8, src9, src10; ++ __m128i in0, in1, in2, in3; ++ __m128i src10_r, src32_r, src54_r, src76_r, src98_r; ++ __m128i src21_r, src43_r, src65_r, src87_r, src109_r; ++ __m128i dst0_r, dst1_r, dst2_r, dst3_r; ++ __m128i filt0, filt1, filt2, filt3; ++ __m128i const_vec; ++ ++ src0_ptr -= src_stride_3x; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filt0, filt1, filt2, filt3); ++ ++ LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, ++ src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, src0, src1, ++ src2, src3); ++ src0_ptr += src_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src4, src5); ++ src6 = __lsx_vld(src0_ptr + src_stride_2x, 0); ++ src0_ptr += src_stride_3x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, ++ src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_r, src32_r, src54_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, ++ src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, ++ src7, src8, src9, src10); ++ src0_ptr += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in0, in1, in2, in3); ++ src1_ptr += src2_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, ++ src8, src9, src10); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src76_r, src87_r, src98_r, src109_r); ++ ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, dst0_r, src54_r, filt2, dst0_r, src76_r, filt3, dst0_r, ++ dst0_r, dst0_r, dst0_r); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, ++ filt1, dst1_r, src65_r, filt2, dst1_r, src87_r, filt3, dst1_r, ++ dst1_r, dst1_r, dst1_r); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src32_r, filt0, dst2_r, src54_r, ++ filt1, dst2_r, src76_r, filt2, dst2_r, src98_r, filt3, dst2_r, ++ dst2_r, dst2_r, dst2_r); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src43_r, filt0, dst3_r, src65_r, ++ filt1, dst3_r, src87_r, filt2, dst3_r, src109_r, filt3, dst3_r, ++ dst3_r, dst3_r, dst3_r); ++ ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst2_r, dst3_r, ++ &dst0_r, &dst1_r, &dst2_r, &dst3_r); ++ ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst1_r); ++ __lsx_vstelm_d(dst0_r, dst, 0, 0); ++ __lsx_vstelm_d(dst0_r, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(dst1_r, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(dst1_r, dst + dst_stride_3x, 0, 1); ++ dst += dst_stride_4x; ++ ++ src10_r = src54_r; ++ src32_r = src76_r; ++ src54_r = src98_r; ++ src21_r = src65_r; ++ src43_r = src87_r; ++ src65_r = src109_r; ++ ++ src6 = src10; ++ } ++} ++ ++static av_always_inline ++void hevc_vt_bi_8t_16multx2mult_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height, ++ int32_t width) ++{ ++ uint8_t *src0_ptr_tmp; ++ int16_t *src1_ptr_tmp; ++ uint8_t *dst_tmp; ++ uint32_t loop_cnt; ++ uint32_t cnt; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t src2_stride_2x = (src2_stride << 1); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8; ++ __m128i in0, in1, in2, in3; ++ __m128i src10_r, src32_r, src54_r, src76_r; ++ __m128i src21_r, src43_r, src65_r, src87_r; ++ __m128i dst0_r, dst1_r; ++ __m128i src10_l, src32_l, src54_l, src76_l; ++ __m128i src21_l, src43_l, src65_l, src87_l; ++ __m128i dst0_l, dst1_l; ++ __m128i filt0, filt1, filt2, filt3; ++ __m128i const_vec; ++ ++ src0_ptr -= src_stride_3x; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filt0, filt1, filt2, filt3); ++ ++ for (cnt = (width >> 4); cnt--;) { ++ src0_ptr_tmp = src0_ptr; ++ src1_ptr_tmp = src1_ptr; ++ dst_tmp = dst; ++ ++ LSX_DUP4_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, ++ src0_ptr_tmp + src_stride_2x, 0, src0_ptr_tmp + src_stride_3x, ++ 0, src0, src1, src2, src3); ++ src0_ptr_tmp += src_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, src4, src5); ++ src6 = __lsx_vld(src0_ptr_tmp + src_stride_2x, 0); ++ src0_ptr_tmp += src_stride_3x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_r, src32_r, src54_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_l, src32_l, src54_l, src21_l); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, src43_l, src65_l); ++ ++ for (loop_cnt = (height >> 1); loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, ++ src7, src8); ++ src0_ptr_tmp += src_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr_tmp, 0, src1_ptr_tmp + src2_stride, 0, ++ in0, in1); ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr_tmp, 16, src1_ptr_tmp + src2_stride, ++ 16, in2, in3); ++ src1_ptr_tmp += src2_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src7, src8); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src76_l, src87_l); ++ ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, dst0_r, src54_r, filt2, dst0_r, src76_r, filt3, dst0_r, ++ dst0_r, dst0_r, dst0_r); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, ++ filt1, dst1_r, src65_r, filt2, dst1_r, src87_r, filt3, dst1_r, ++ dst1_r, dst1_r, dst1_r); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, ++ filt1, dst0_l, src54_l, filt2, dst0_l, src76_l, filt3, dst0_l, ++ dst0_l, dst0_l, dst0_l); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, ++ filt1, dst1_l, src65_l, filt2, dst1_l, src87_l, filt3, dst1_l, ++ dst1_l, dst1_l, dst1_l); ++ ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst0_l, dst1_l, ++ &dst0_r, &dst1_r, &dst0_l, &dst1_l); ++ ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); ++ ++ __lsx_vst(dst0_r, dst_tmp, 0); ++ __lsx_vst(dst1_r, dst_tmp + dst_stride, 0); ++ dst_tmp += dst_stride_2x; ++ ++ src10_r = src32_r; ++ src32_r = src54_r; ++ src54_r = src76_r; ++ src21_r = src43_r; ++ src43_r = src65_r; ++ src65_r = src87_r; ++ src10_l = src32_l; ++ src32_l = src54_l; ++ src54_l = src76_l; ++ src21_l = src43_l; ++ src43_l = src65_l; ++ src65_l = src87_l; ++ src6 = src8; ++ } ++ ++ src0_ptr += 16; ++ src1_ptr += 16; ++ dst += 16; ++ } ++} ++ ++static void hevc_vt_bi_8t_16w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ hevc_vt_bi_8t_16multx2mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter, height, 16); ++} ++ ++static void hevc_vt_bi_8t_24w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ hevc_vt_bi_8t_16multx2mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter, height, 16); ++ hevc_vt_bi_8t_8w_lsx(src0_ptr + 16, src_stride, src1_ptr + 16, src2_stride, ++ dst + 16, dst_stride, filter, height); ++} ++ ++static void hevc_vt_bi_8t_32w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ hevc_vt_bi_8t_16multx2mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter, height, 32); ++} ++ ++static void hevc_vt_bi_8t_48w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ hevc_vt_bi_8t_16multx2mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter, height, 48); ++} ++ ++static void hevc_vt_bi_8t_64w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ hevc_vt_bi_8t_16multx2mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter, height, 64); ++} ++ ++static av_always_inline ++void hevc_hv_bi_8t_8multx1mult_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height, ++ int32_t width) ++{ ++ uint32_t loop_cnt; ++ uint32_t cnt; ++ uint8_t *src0_ptr_tmp; ++ int16_t *src1_ptr_tmp; ++ uint8_t *dst_tmp; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ __m128i out; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i in0, tmp; ++ __m128i filt0, filt1, filt2, filt3; ++ __m128i filt_h0, filt_h1, filt_h2, filt_h3; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ __m128i mask1, mask2, mask3; ++ __m128i const_vec; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; ++ __m128i vec8, vec9, vec10, vec11, vec12, vec13, vec14, vec15; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; ++ __m128i dst0_r, dst0_l; ++ __m128i dst10_r, dst32_r, dst54_r, dst76_r; ++ __m128i dst10_l, dst32_l, dst54_l, dst76_l; ++ ++ src0_ptr -= src_stride_3x + 3; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, filter_x, 6, ++ filt0, filt1, filt2, filt3); ++ filt_h3 = __lsx_vld(filter_y, 0); ++ filt_h3 = __lsx_vsllwil_h_b(filt_h3, 0); ++ ++ LSX_DUP4_ARG2(__lsx_vreplvei_w, filt_h3, 0, filt_h3, 1, filt_h3, 2, filt_h3, 3, ++ filt_h0, filt_h1, filt_h2, filt_h3); ++ ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ ++ for (cnt = width >> 3; cnt--;) { ++ src0_ptr_tmp = src0_ptr; ++ dst_tmp = dst; ++ src1_ptr_tmp = src1_ptr; ++ ++ LSX_DUP4_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, ++ src0_ptr_tmp + src_stride_2x, 0, src0_ptr_tmp + src_stride_3x, 0, ++ src0, src1, src2, src3); ++ src0_ptr_tmp += src_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, src4, src5); ++ src6 = __lsx_vld(src0_ptr_tmp + src_stride_2x, 0); ++ src0_ptr_tmp += src_stride_3x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ ++ /* row 0 row 1 row 2 row 3 */ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, ++ mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, ++ mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, ++ mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, ++ mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); ++ dst0 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, filt2, ++ filt3); ++ dst1 = __lsx_hevc_filt_8tap_h(vec4, vec5, vec6, vec7, filt0, filt1, filt2, ++ filt3); ++ dst2 = __lsx_hevc_filt_8tap_h(vec8, vec9, vec10, vec11, filt0, filt1, filt2, ++ filt3); ++ dst3 = __lsx_hevc_filt_8tap_h(vec12, vec13, vec14, vec15, filt0, filt1, ++ filt2, filt3); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, ++ mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, src5, ++ mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, src6, ++ mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); ++ dst4 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, filt2, ++ filt3); ++ dst5 = __lsx_hevc_filt_8tap_h(vec4, vec5, vec6, vec7, filt0, filt1, filt2, ++ filt3); ++ dst6 = __lsx_hevc_filt_8tap_h(vec8, vec9, vec10, vec11, filt0, filt1, filt2, ++ filt3); ++ ++ for (loop_cnt = height; loop_cnt--;) { ++ src7 = __lsx_vld(src0_ptr_tmp, 0); ++ src7 = __lsx_vxori_b(src7, 128); ++ src0_ptr_tmp += src_stride; ++ ++ in0 = __lsx_vld(src1_ptr_tmp, 0); ++ src1_ptr_tmp += src2_stride; ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, src7, ++ src7, mask2, src7, src7, mask3, vec0, vec1, vec2, vec3); ++ dst7 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, ++ filt2, filt3); ++ LSX_DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, ++ dst10_r, dst32_r, dst54_r, dst76_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, ++ dst10_l, dst32_l, dst54_l, dst76_l); ++ ++ dst0_r = __lsx_hevc_filt_8tap_w(dst10_r, dst32_r, dst54_r, dst76_r, ++ filt_h0, filt_h1, filt_h2, filt_h3); ++ dst0_l = __lsx_hevc_filt_8tap_w(dst10_l, dst32_l, dst54_l, dst76_l, ++ filt_h0, filt_h1, filt_h2, filt_h3); ++ dst0_r = __lsx_vsrli_w(dst0_r, 6); ++ dst0_l = __lsx_vsrli_w(dst0_l, 6); ++ ++ tmp = __lsx_vpickev_h(dst0_l, dst0_r); ++ LSX_DUP2_ARG2(__lsx_vsadd_h, tmp, in0, tmp, const_vec, tmp, tmp); ++ tmp = __lsx_vmaxi_h(tmp, 0); ++ out = __lsx_vssrlrni_bu_h(tmp, tmp, 7); ++ __lsx_vstelm_d(out, dst_tmp, 0, 0); ++ dst_tmp += dst_stride; ++ ++ dst0 = dst1; ++ dst1 = dst2; ++ dst2 = dst3; ++ dst3 = dst4; ++ dst4 = dst5; ++ dst5 = dst6; ++ dst6 = dst7; ++ } ++ ++ src0_ptr += 8; ++ dst += 8; ++ src1_ptr += 8; ++ } ++} ++ ++static void hevc_hv_bi_8t_8w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_bi_8t_8multx1mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y, ++ height, 8); ++} ++ ++static void hevc_hv_bi_8t_16w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_bi_8t_8multx1mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y, ++ height, 16); ++} ++ ++static void hevc_hv_bi_8t_24w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_bi_8t_8multx1mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y, ++ height, 24); ++} ++ ++static void hevc_hv_bi_8t_32w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_bi_8t_8multx1mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y, ++ height, 32); ++} ++ ++static void hevc_hv_bi_8t_48w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_bi_8t_8multx1mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y, ++ height, 48); ++} ++ ++static void hevc_hv_bi_8t_64w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_bi_8t_8multx1mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y, ++ height, 64); ++} ++ ++static void hevc_hz_bi_4t_24w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ int16_t *src1_ptr_tmp; ++ uint8_t *dst_tmp; ++ uint32_t loop_cnt; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t dst_stride_4x = (dst_stride << 2); ++ const int32_t src2_stride_2x = (src2_stride << 1); ++ const int32_t src2_stride_4x = (src2_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i in0, in1, in2, in3, in4, in5, in6, in7; ++ __m128i filt0, filt1; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ __m128i mask1, mask2, mask3; ++ __m128i vec0, vec1, vec2, vec3; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; ++ __m128i const_vec; ++ ++ src0_ptr -= 1; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 8, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 10); ++ ++ dst_tmp = dst + 16; ++ src1_ptr_tmp = src1_ptr + 16; ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, ++ src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, ++ src0, src2, src4, src6); ++ LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, ++ src0_ptr + src_stride_2x, 16, src0_ptr + src_stride_3x, 16, ++ src1, src3, src5, src7); ++ src0_ptr += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in0, in2, in4, in6); ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, ++ src1_ptr + src2_stride_2x, 16, src1_ptr + src2_stride_3x, 16, ++ in1, in3, in5, in7); ++ src1_ptr += src2_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src6, 128, src7, 128, src4, ++ src5, src6, src7); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask2, src2, src2, ++ mask0, src3, src2, mask2, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, ++ dst3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask3, src2, src2, ++ mask1, src3, src2, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src5, src4, mask2, src6, src6, ++ mask0, src7, src6, mask2, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst4, dst5, dst6, ++ dst7); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask1, src5, src4, mask3, src6, src6, ++ mask1, src7, src6, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst4, vec0, filt1, dst5, vec1, filt1, dst6, ++ vec2, filt1, dst7, vec3, filt1, dst4, dst5, dst6, dst7); ++ ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, ++ &dst0, &dst1, &dst2, &dst3); ++ __lsx_hevc_bi_rnd_clip4(in4, in5, in6, in7, dst4, dst5, dst6, dst7, ++ &dst4, &dst5, &dst6, &dst7); ++ ++ LSX_DUP4_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, ++ dst0, dst1, dst2, dst3); ++ __lsx_vst(dst0, dst, 0); ++ __lsx_vstx(dst1, dst, dst_stride); ++ __lsx_vstx(dst2, dst, dst_stride_2x); ++ __lsx_vstx(dst3, dst, dst_stride_3x); ++ dst += dst_stride_4x; ++ ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr_tmp, 0, src1_ptr_tmp + src2_stride, 0, ++ src1_ptr_tmp + src2_stride_2x, 0, src1_ptr_tmp + src2_stride_3x, 0, ++ in0, in1, in2, in3); ++ src1_ptr_tmp += src2_stride_4x; ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src3, src3, mask0, src5, src5, ++ mask0, src7, src7, mask0, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, ++ dst3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask1, src3, src3, mask1, src5, src5, ++ mask1, src7, src7, mask1, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, ++ &dst0, &dst1, &dst2, &dst3); ++ ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); ++ __lsx_vstelm_d(dst0, dst_tmp, 0, 0); ++ __lsx_vstelm_d(dst0, dst_tmp + dst_stride, 0, 1); ++ __lsx_vstelm_d(dst1, dst_tmp + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(dst1, dst_tmp + dst_stride_3x, 0, 1); ++ dst_tmp += dst_stride_4x; ++ } ++} ++ ++static void hevc_hz_bi_4t_32w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ __m128i src0, src1, src2; ++ __m128i in0, in1, in2, in3; ++ __m128i filt0, filt1; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ __m128i mask1, mask2, mask3; ++ __m128i dst0, dst1, dst2, dst3; ++ __m128i vec0, vec1, vec2, vec3; ++ __m128i const_vec; ++ ++ src0_ptr -= 1; ++ ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 8, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 10); ++ ++ for (loop_cnt = height; loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); ++ src2 = __lsx_vld(src0_ptr, 24); ++ src0_ptr += src_stride; ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, ++ 48, in0, in1, in2, in3); ++ src1_ptr += src2_stride; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask2, src1, src1, ++ mask0, src2, src2, mask0, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, ++ dst3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask3, src1, src1, ++ mask1, src2, src2, mask1, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, vec2, ++ filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, ++ &dst0, &dst1, &dst2, &dst3); ++ ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); ++ __lsx_vst(dst0, dst, 0); ++ __lsx_vst(dst1, dst, 16); ++ dst += dst_stride; ++ } ++} ++ ++static void hevc_vt_bi_4t_12w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ int32_t loop_cnt; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t dst_stride_4x = (dst_stride << 2); ++ const int32_t src2_stride_2x = (src2_stride << 1); ++ const int32_t src2_stride_4x = (src2_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ __m128i src0, src1, src2, src3, src4, src5, src6; ++ __m128i in0, in1, in2, in3, in4, in5, in6, in7; ++ __m128i src10_r, src32_r, src21_r, src43_r, src54_r, src65_r; ++ __m128i dst0_r, dst1_r, dst2_r, dst3_r; ++ __m128i src10_l, src32_l, src54_l, src21_l, src43_l, src65_l; ++ __m128i src2110, src4332, src6554; ++ __m128i dst0_l, dst1_l, filt0, filt1; ++ __m128i const_vec; ++ ++ src0_ptr -= src_stride; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0, src1); ++ src2 = __lsx_vld(src0_ptr + src_stride_2x, 0); ++ src0_ptr += src_stride_3x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); ++ src2110 = __lsx_vilvl_d(src21_l, src10_l); ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src3, src4); ++ src0_ptr += src_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src5, src6); ++ src0_ptr += src_stride_2x; ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, ++ src1_ptr + src2_stride_2x, 16, src1_ptr + src2_stride_3x, 16, ++ in4, in5, in6, in7); ++ src1_ptr += src2_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vilvl_d, in5, in4, in7, in6, in4, in5); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, ++ src4, src5, src6); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); ++ src4332 = __lsx_vilvl_d(src43_l, src32_l); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src5, src4, src6, src5, src54_r, src65_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src5, src4, src6, src5, src54_l, src65_l); ++ src6554 = __lsx_vilvl_d(src65_l, src54_l); ++ ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, const_vec, src21_r, filt0, dst1_r, src43_r, filt1, dst0_r, ++ dst0_r, dst1_r, dst1_r ); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src2110, filt0, dst0_l, src4332, ++ filt1, const_vec, src32_r, filt0, dst2_r, src54_r, filt1, dst0_l, ++ dst0_l, dst2_r, dst2_r); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src43_r, filt0, dst3_r, src65_r, ++ filt1, const_vec, src4332, filt0, dst1_l, src6554, filt1, dst3_r, ++ dst3_r, dst1_l, dst1_l); ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst2_r, dst3_r, ++ &dst0_r, &dst1_r, &dst2_r, &dst3_r); ++ __lsx_hevc_bi_rnd_clip2(in4, in5, dst0_l, dst1_l, &dst0_l, &dst1_l); ++ ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst1_r); ++ dst0_l = __lsx_vpickev_b(dst1_l, dst0_l); ++ __lsx_vstelm_d(dst0_r, dst, 0, 0); ++ __lsx_vstelm_d(dst0_r, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(dst1_r, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(dst1_r, dst + dst_stride_3x, 0, 1); ++ __lsx_vstelm_w(dst0_l, dst, 8, 0); ++ __lsx_vstelm_w(dst0_l, dst + dst_stride, 8, 1); ++ __lsx_vstelm_w(dst0_l, dst + dst_stride_2x, 8, 2); ++ __lsx_vstelm_w(dst0_l, dst + dst_stride_3x, 8, 3); ++ dst += dst_stride_4x; ++ ++ src2 = src6; ++ src10_r = src54_r; ++ src21_r = src65_r; ++ src2110 = src6554; ++ } ++} ++ ++static void hevc_vt_bi_4t_16w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ int32_t loop_cnt; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src2_stride_2x = (src2_stride << 1); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ __m128i src0, src1, src2, src3, src4, src5; ++ __m128i in0, in1, in2, in3; ++ __m128i src10_r, src32_r, src21_r, src43_r; ++ __m128i src10_l, src32_l, src21_l, src43_l; ++ __m128i dst0_r, dst1_r, dst0_l, dst1_l; ++ __m128i filt0, filt1; ++ __m128i const_vec; ++ ++ src0_ptr -= src_stride; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0, src1); ++ src2 = __lsx_vld(src0_ptr + src_stride_2x, 0); ++ src0_ptr += src_stride_3x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src3, src4); ++ src0_ptr += src_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, in2, in3); ++ src1_ptr += src2_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); ++ ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, dst0_r, dst0_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, ++ filt1, dst1_r, dst1_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, ++ filt1, dst0_l, dst0_l); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, ++ filt1, dst1_l, dst1_l); ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst0_l, dst1_l, ++ &dst0_r, &dst1_r, &dst0_l, &dst1_l); ++ ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); ++ __lsx_vst(dst0_r, dst, 0); ++ __lsx_vst(dst1_r, dst + dst_stride, 0); ++ dst += dst_stride_2x; ++ ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src5, src2); ++ src0_ptr += src_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, in2, in3); ++ src1_ptr += src2_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); ++ ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src32_r, filt0, dst0_r, src10_r, ++ filt1, dst0_r, dst0_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src32_l, filt0, dst0_l, src10_l, ++ filt1, dst0_l, dst0_l); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src43_r, filt0, dst1_r, src21_r, ++ filt1, dst1_r, dst1_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src43_l, filt0, dst1_l, src21_l, ++ filt1, dst1_l, dst1_l); ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst0_l, dst1_l, ++ &dst0_r, &dst1_r, &dst0_l, &dst1_l); ++ ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); ++ __lsx_vst(dst0_r, dst, 0); ++ __lsx_vstx(dst1_r, dst, dst_stride); ++ dst += dst_stride_2x; ++ } ++} ++ ++static void hevc_vt_bi_4t_24w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src2_stride_2x = (src2_stride << 1); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ __m128i src0, src1, src2, src3, src4, src5; ++ __m128i src6, src7, src8, src9, src10, src11; ++ __m128i in0, in1, in2, in3, in4, in5; ++ __m128i src10_r, src32_r, src76_r, src98_r; ++ __m128i src21_r, src43_r, src87_r, src109_r; ++ __m128i src10_l, src32_l, src21_l, src43_l; ++ __m128i dst0_r, dst1_r, dst2_r, dst3_r; ++ __m128i dst0_l, dst1_l; ++ __m128i filt0, filt1; ++ __m128i const_vec; ++ ++ src0_ptr -= src_stride; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ ++ /* 16width */ ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0, src1); ++ src2 = __lsx_vld(src0_ptr + src_stride_2x, 0); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); ++ /* 8width */ ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, src6, src7); ++ src8 = __lsx_vld(src0_ptr + src_stride_2x, 16); ++ src0_ptr += src_stride_3x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); ++ src8 = __lsx_vxori_b(src8, 128); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ /* 16width */ ++ LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src1_ptr, 0, ++ src1_ptr + src2_stride, 0, src3, src4, in0, in1); ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, src1_ptr, ++ 32, src1_ptr + src2_stride, 32, in2, in3, in4, in5); ++ src1_ptr += src2_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); ++ /* 8width */ ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, src9, src10); ++ src0_ptr += src_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); ++ /* 16width */ ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, const_vec, src10_l, filt0, dst0_l, src32_l, filt1, dst0_r, ++ dst0_r, dst0_l, dst0_l); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, ++ filt1, const_vec, src21_l, filt0, dst1_l, src43_l, filt1, dst1_r, ++ dst1_r, dst1_l, dst1_l); ++ /* 8width */ ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src76_r, filt0, dst2_r, src98_r, ++ filt1, const_vec, src87_r, filt0, dst3_r, src109_r, filt1, dst2_r, ++ dst2_r, dst3_r, dst3_r); ++ /* 16width */ ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst0_l, dst1_l, ++ &dst0_r, &dst1_r, &dst0_l, &dst1_l); ++ __lsx_hevc_bi_rnd_clip2(in4, in5, dst2_r, dst3_r, &dst2_r, &dst3_r); ++ ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); ++ dst2_r = __lsx_vpickev_b(dst3_r, dst2_r); ++ __lsx_vst(dst0_r, dst, 0); ++ __lsx_vstx(dst1_r, dst, dst_stride); ++ __lsx_vstelm_d(dst2_r, dst, 16, 0); ++ __lsx_vstelm_d(dst2_r, dst + dst_stride, 16, 1); ++ dst += dst_stride_2x; ++ ++ /* 16width */ ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src5, src2); ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, in2, in3); ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 32, src1_ptr + src2_stride, 32, in4, in5); ++ src1_ptr += src2_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); ++ /* 8width */ ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, src11, src8); ++ src0_ptr += src_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src11, 128, src8, 128, src11, src8); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src11, src10, src8, src11, src76_r, src87_r); ++ /* 16width */ ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src32_r, filt0, dst0_r, src10_r, ++ filt1, const_vec, src32_l, filt0, dst0_l, src10_l, filt1, dst0_r, ++ dst0_r, dst0_l, dst0_l); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src43_r, filt0, dst1_r, src21_r, ++ filt1, const_vec, src43_l, filt0, dst1_l, src21_l, filt1, dst1_r, ++ dst1_r, dst1_l, dst1_l); ++ /* 8width */ ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src98_r, filt0, dst2_r, src76_r, ++ filt1, const_vec, src109_r, filt0, dst3_r, src87_r, filt1, dst2_r, ++ dst2_r, dst3_r, dst3_r); ++ ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst0_l, dst1_l, ++ &dst0_r, &dst1_r, &dst0_l, &dst1_l); ++ __lsx_hevc_bi_rnd_clip2(in4, in5, dst2_r, dst3_r, &dst2_r, &dst3_r); ++ ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); ++ dst2_r = __lsx_vpickev_b(dst3_r, dst2_r); ++ __lsx_vst(dst0_r, dst, 0); ++ __lsx_vstx(dst1_r, dst, dst_stride); ++ __lsx_vstelm_d(dst2_r, dst, 16, 0); ++ __lsx_vstelm_d(dst2_r, dst + dst_stride, 16, 1); ++ dst += dst_stride_2x; ++ } ++} ++ ++static void hevc_vt_bi_4t_32w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ uint8_t *dst_tmp = dst + 16; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src2_stride_2x = (src2_stride << 1); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ __m128i src0, src1, src2, src3, src4, src6, src7, src8, src9, src10; ++ __m128i in0, in1, in2, in3, in4, in5, in6, in7; ++ __m128i src10_r, src32_r, src76_r, src98_r; ++ __m128i src21_r, src43_r, src87_r, src109_r; ++ __m128i dst0_r, dst1_r, dst2_r, dst3_r; ++ __m128i src10_l, src32_l, src76_l, src98_l; ++ __m128i src21_l, src43_l, src87_l, src109_l; ++ __m128i dst0_l, dst1_l, dst2_l, dst3_l; ++ __m128i filt0, filt1; ++ __m128i const_vec; ++ ++ src0_ptr -= src_stride; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ ++ /* 16width */ ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0, src1); ++ src2 = __lsx_vld(src0_ptr + src_stride_2x, 0); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); ++ ++ /* next 16width */ ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, src6, src7); ++ src8 = __lsx_vld(src0_ptr + src_stride_2x, 16); ++ src0_ptr += src_stride_3x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); ++ src8 = __lsx_vxori_b(src8, 128); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src76_l, src87_l); ++ ++ for (loop_cnt = (height >> 1); loop_cnt--;) { ++ /* 16width */ ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src3, src4); ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, in2, in3); ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 32, src1_ptr + src2_stride, 32, in4, in5); ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 48, src1_ptr + src2_stride, 48, in6, in7); ++ src1_ptr += src2_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); ++ /* 16width */ ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, dst0_r, dst0_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, ++ filt1, dst0_l, dst0_l); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, ++ filt1, dst1_r, dst1_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, ++ filt1, dst1_l, dst1_l); ++ /* 16width */ ++ __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst0_l, dst1_l, ++ &dst0_r, &dst1_r, &dst0_l, &dst1_l); ++ ++ src10_r = src32_r; ++ src21_r = src43_r; ++ src10_l = src32_l; ++ src21_l = src43_l; ++ src2 = src4; ++ ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); ++ __lsx_vst(dst0_r, dst, 0); ++ __lsx_vst(dst1_r, dst + dst_stride, 0); ++ dst += dst_stride_2x; ++ ++ /* next 16width */ ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, src9, src10); ++ src0_ptr += src_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src9, src8, src10, src9, src98_l, src109_l); ++ /* next 16width */ ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src76_r, filt0, dst2_r, src98_r, ++ filt1, dst2_r, dst2_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src76_l, filt0, dst2_l, src98_l, ++ filt1, dst2_l, dst2_l); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src87_r, filt0, dst3_r, src109_r, ++ filt1, dst3_r, dst3_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src87_l, filt0, dst3_l, src109_l, ++ filt1, dst3_l, dst3_l); ++ /* next 16width */ ++ __lsx_hevc_bi_rnd_clip4(in4, in5, in6, in7, dst2_r, dst3_r, dst2_l, dst3_l, ++ &dst2_r, &dst3_r, &dst2_l, &dst3_l); ++ ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst2_l, dst2_r, dst3_l, dst3_r, dst2_r, dst3_r); ++ __lsx_vst(dst2_r, dst_tmp, 0); ++ __lsx_vstx(dst3_r, dst_tmp, dst_stride); ++ dst_tmp += dst_stride_2x; ++ ++ src76_r = src98_r; ++ src87_r = src109_r; ++ src76_l = src98_l; ++ src87_l = src109_l; ++ src8 = src10; ++ } ++} ++ ++static void hevc_hv_bi_4t_6w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ uint32_t tpw0, tpw1, tpw2, tpw3; ++ uint64_t tp0, tp1; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t dst_stride_4x = (dst_stride << 2); ++ const int32_t src2_stride_2x = (src2_stride << 1); ++ const int32_t src2_stride_4x = (src2_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ __m128i out0, out1; ++ __m128i src0, src1, src2, src3, src4, src5, src6; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7, mask1; ++ __m128i filt0, filt1, filt_h0, filt_h1, const_vec; ++ __m128i dsth0, dsth1, dsth2, dsth3, dsth4, dsth5; ++ __m128i dsth6, dsth7, dsth8, dsth9, dsth10; ++ __m128i dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l; ++ __m128i dst4_r, dst5_r, dst6_r, dst7_r; ++ __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8; ++ __m128i zero ={0}; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ ++ src0_ptr -= (src_stride + 1); ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ ++ filt_h1 = __lsx_vld(filter_y, 0); ++ filt_h1 = __lsx_vsllwil_h_b(filt_h1, 0); ++ LSX_DUP2_ARG2(__lsx_vreplvei_w, filt_h1, 0, filt_h1, 1, filt_h0, filt_h1); ++ ++ mask1 = __lsx_vaddi_bu(mask0, 2); ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0, src1); ++ src2 = __lsx_vld(src0_ptr + src_stride_2x, 0); ++ src0_ptr += src_stride_3x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ ++ dsth0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); ++ dsth1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); ++ dsth2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dsth1, dsth0, dsth2, dsth1, tmp0, tmp2); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dsth1, dsth0, dsth2, dsth1, tmp1, tmp3); ++ ++ LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, ++ src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, src3, src4, ++ src5, src6); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, src4, ++ src5, src6); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); ++ ++ dsth3 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); ++ dsth4 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); ++ dsth5 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ dsth6 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); ++ ++ src0_ptr += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, ++ src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, src3, src4, ++ src5, src6); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, src4, ++ src5, src6); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); ++ ++ dsth7 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); ++ dsth8 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); ++ dsth9 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ dsth10 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dsth3, dsth2, dsth4, dsth3, tmp4, tmp6); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dsth3, dsth2, dsth4, dsth3, tmp5, tmp7); ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dsth5, dsth4, dsth6, dsth5, dsth0, dsth2); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dsth5, dsth4, dsth6, dsth5, dsth1, dsth3); ++ dst0_r = __lsx_hevc_filt_4tap_w(tmp0, tmp4, filt_h0, filt_h1); ++ dst1_r = __lsx_hevc_filt_4tap_w(tmp2, tmp6, filt_h0, filt_h1); ++ dst2_r = __lsx_hevc_filt_4tap_w(tmp4, dsth0, filt_h0, filt_h1); ++ dst3_r = __lsx_hevc_filt_4tap_w(tmp6, dsth2, filt_h0, filt_h1); ++ LSX_DUP2_ARG2(__lsx_vpickev_d, tmp3, tmp1, tmp7, tmp5, tmp0, tmp8); ++ dst0_l = __lsx_hevc_filt_4tap_w(tmp0, tmp8, filt_h0, filt_h1); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dsth7, dsth6, dsth8, dsth7, tmp0, tmp2); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dsth7, dsth6, dsth8, dsth7, tmp1, tmp3); ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dsth9, dsth8, dsth10, dsth9, tmp4, tmp6); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dsth9, dsth8, dsth10, dsth9, tmp5, tmp7); ++ dst4_r = __lsx_hevc_filt_4tap_w(dsth0, tmp0, filt_h0, filt_h1); ++ dst5_r = __lsx_hevc_filt_4tap_w(dsth2, tmp2, filt_h0, filt_h1); ++ dst6_r = __lsx_hevc_filt_4tap_w(tmp0, tmp4, filt_h0, filt_h1); ++ dst7_r = __lsx_hevc_filt_4tap_w(tmp2, tmp6, filt_h0, filt_h1); ++ LSX_DUP2_ARG2(__lsx_vpickev_d, dsth3, dsth1, tmp3, tmp1, tmp0, tmp1); ++ tmp2 = __lsx_vpickev_d(tmp7, tmp5); ++ ++ dst1_l = __lsx_hevc_filt_4tap_w(tmp8, tmp0, filt_h0, filt_h1); ++ dst2_l = __lsx_hevc_filt_4tap_w(tmp0, tmp1, filt_h0, filt_h1); ++ dst3_l = __lsx_hevc_filt_4tap_w(tmp1, tmp2, filt_h0, filt_h1); ++ ++ LSX_DUP4_ARG2(__lsx_vsrai_d, dst0_r, 6, dst1_r, 6, dst2_r, 6, dst3_r, 6, dst0_r, ++ dst1_r, dst2_r, dst3_r); ++ LSX_DUP4_ARG2(__lsx_vsrai_d, dst4_r, 6, dst5_r, 6, dst6_r, 6, dst7_r, 6, dst4_r, ++ dst5_r, dst6_r, dst7_r); ++ LSX_DUP4_ARG2(__lsx_vsrai_d, dst0_l, 6, dst1_l, 6, dst2_l, 6, dst3_l, 6, dst0_l, ++ dst1_l, dst2_l, dst3_l); ++ LSX_DUP2_ARG2(__lsx_vpickev_h, dst1_r, dst0_r, dst3_r, dst2_r, tmp0, tmp1); ++ LSX_DUP2_ARG2(__lsx_vpickev_h, dst5_r, dst4_r, dst7_r, dst6_r, tmp2, tmp3); ++ LSX_DUP2_ARG2(__lsx_vpickev_h, dst1_l, dst0_l, dst3_l, dst2_l, tmp4, tmp5); ++ ++ tp0 = *(uint64_t *)src1_ptr; ++ tp1 = *(uint64_t *)(src1_ptr + src2_stride); ++ LSX_DUP2_ARG3(__lsx_vinsgr2vr_d, zero, tp0, 0, dsth0, tp1, 1, dsth0, dsth0); ++ tp0 = *(uint64_t *)(src1_ptr + src2_stride_2x); ++ tp1 = *(uint64_t *)(src1_ptr + src2_stride_3x); ++ LSX_DUP2_ARG3(__lsx_vinsgr2vr_d, zero, tp0, 0, dsth1, tp1, 1, dsth1, dsth1); ++ src1_ptr += src2_stride_4x; ++ tp0 = *(uint64_t *)src1_ptr; ++ tp1 = *(uint64_t *)(src1_ptr + src2_stride); ++ LSX_DUP2_ARG3(__lsx_vinsgr2vr_d, zero, tp0, 0, dsth2, tp1, 1, dsth2, dsth2); ++ tp0 = *(uint64_t *)(src1_ptr + src2_stride_2x); ++ tp1 = *(uint64_t *)(src1_ptr + src2_stride_3x); ++ LSX_DUP2_ARG3(__lsx_vinsgr2vr_d, zero, tp0, 0, dsth3, tp1, 1, dsth3, dsth3); ++ ++ LSX_DUP4_ARG2(__lsx_vsadd_h, dsth0, const_vec, dsth1, const_vec, dsth2, const_vec, ++ dsth3, const_vec, dsth0, dsth1, dsth2, dsth3); ++ LSX_DUP4_ARG2(__lsx_vsadd_h, dsth0, tmp0, dsth1, tmp1, dsth2, tmp2, dsth3, tmp3, ++ tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP4_ARG2(__lsx_vmaxi_h, tmp0, 0, tmp1, 0, tmp2, 0, tmp3, 0, tmp0, tmp1, tmp2, ++ tmp3); ++ LSX_DUP2_ARG3(__lsx_vssrlrni_bu_h, tmp1, tmp0, 7, tmp3, tmp2, 7, out0, out1); ++ ++ __lsx_vstelm_w(out0, dst, 0, 0); ++ __lsx_vstelm_w(out0, dst + dst_stride, 0, 1); ++ __lsx_vstelm_w(out0, dst + dst_stride_2x, 0, 2); ++ __lsx_vstelm_w(out0, dst + dst_stride_3x, 0, 3); ++ dst += dst_stride_4x; ++ __lsx_vstelm_w(out1, dst, 0, 0); ++ __lsx_vstelm_w(out1, dst + dst_stride, 0, 1); ++ __lsx_vstelm_w(out1, dst + dst_stride_2x, 0, 2); ++ __lsx_vstelm_w(out1, dst + dst_stride_3x, 0, 3); ++ dst -= dst_stride_4x; ++ ++ src1_ptr -= src2_stride_4x; ++ tpw0 = *(uint32_t *)(src1_ptr + 4); ++ tpw1 = *(uint32_t *)(src1_ptr + 4 + src2_stride); ++ tpw2 = *(uint32_t *)(src1_ptr + 4 + src2_stride_2x); ++ tpw3 = *(uint32_t *)(src1_ptr + 4 + src2_stride_3x); ++ LSX_DUP4_ARG3(__lsx_vinsgr2vr_w, zero, tpw0, 0, dsth4, tpw1, 1, dsth4, tpw2, 2, ++ dsth4, tpw3, 3, dsth4, dsth4, dsth4, dsth4); ++ src1_ptr += src2_stride_4x; ++ tpw0 = *(uint32_t *)(src1_ptr + 4); ++ tpw1 = *(uint32_t *)(src1_ptr + 4 + src2_stride); ++ tpw2 = *(uint32_t *)(src1_ptr + 4 + src2_stride_2x); ++ tpw3 = *(uint32_t *)(src1_ptr + 4 + src2_stride_3x); ++ LSX_DUP4_ARG3(__lsx_vinsgr2vr_w, zero, tpw0, 0, dsth5, tpw1, 1, dsth5, tpw2, 2, ++ dsth5, tpw3, 3, dsth5, dsth5, dsth5, dsth5); ++ LSX_DUP2_ARG2(__lsx_vsadd_h, dsth4, const_vec, dsth5, const_vec, dsth4, dsth5); ++ LSX_DUP2_ARG2(__lsx_vsadd_h, dsth4, tmp4, dsth5, tmp5, tmp4, tmp5); ++ LSX_DUP2_ARG2(__lsx_vmaxi_h, tmp4, 0, tmp5, 7, tmp4, tmp5); ++ out0 = __lsx_vssrlrni_bu_h(tmp5, tmp4, 7); ++ ++ __lsx_vstelm_h(out0, dst, 4, 0); ++ __lsx_vstelm_h(out0, dst + dst_stride, 4, 1); ++ __lsx_vstelm_h(out0, dst + dst_stride_2x, 4, 2); ++ __lsx_vstelm_h(out0, dst + dst_stride_3x, 4, 3); ++ dst += dst_stride_4x; ++ __lsx_vstelm_h(out0, dst, 4, 4); ++ __lsx_vstelm_h(out0, dst + dst_stride, 4, 5); ++ __lsx_vstelm_h(out0, dst + dst_stride_2x, 4, 6); ++ __lsx_vstelm_h(out0, dst + dst_stride_3x, 4, 7); ++} ++ ++static av_always_inline ++void hevc_hv_bi_4t_8x2_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y) ++{ ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ ++ __m128i out; ++ __m128i src0, src1, src2, src3, src4; ++ __m128i filt0, filt1; ++ __m128i filt_h0, filt_h1; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ __m128i mask1; ++ __m128i filter_vec, const_vec; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7, vec8, vec9; ++ __m128i dst0, dst1, dst2, dst3, dst4; ++ __m128i dst0_r, dst0_l, dst1_r, dst1_l; ++ __m128i dst10_r, dst32_r, dst21_r, dst43_r; ++ __m128i dst10_l, dst32_l, dst21_l, dst43_l; ++ __m128i tmp0, tmp1; ++ __m128i in0, in1; ++ ++ src0_ptr -= (src_stride + 1); ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ ++ filter_vec = __lsx_vld(filter_y, 0); ++ filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); ++ LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ ++ mask1 = __lsx_vaddi_bu(mask0, 2); ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, ++ src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, src0, src1, ++ src2, src3); ++ src4 = __lsx_vld(src0_ptr + src_stride_4x, 0); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, ++ src2, src3); ++ src4 = __lsx_vxori_b(src4, 128); ++ ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); ++ LSX_DUP2_ARG2(__lsx_vsadd_h, in0, const_vec, in1, const_vec, in0, in1); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec6, vec7); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec8, vec9); ++ ++ dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); ++ dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); ++ dst2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ dst3 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); ++ dst4 = __lsx_hevc_filt_4tap_h(vec8, vec9, filt0, filt1); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); ++ dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); ++ dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); ++ dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); ++ dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); ++ LSX_DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, dst0_r, ++ dst0_l, dst1_r, dst1_l); ++ LSX_DUP2_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, tmp0, tmp1); ++ LSX_DUP2_ARG2(__lsx_vsadd_h, in0, tmp0, in1, tmp1, tmp0, tmp1); ++ LSX_DUP2_ARG2(__lsx_vmaxi_h, tmp0, 0, tmp1, 0, tmp0, tmp1); ++ out = __lsx_vssrlrni_bu_h(tmp1, tmp0, 7); ++ __lsx_vstelm_d(out, dst, 0, 0); ++ __lsx_vstelm_d(out, dst + dst_stride, 0, 1); ++} ++ ++static av_always_inline ++void hevc_hv_bi_4t_8multx4_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t width8mult) ++{ ++ uint32_t cnt; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t src2_stride_2x = (src2_stride << 1); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ ++ __m128i out0, out1; ++ __m128i src0, src1, src2, src3, src4, src5, src6, mask0, mask1; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; ++ __m128i filt0, filt1, filt_h0, filt_h1, filter_vec, const_vec; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, tmp0, tmp1, tmp2, tmp3; ++ __m128i in0, in1, in2, in3; ++ __m128i dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l; ++ __m128i dst10_r, dst32_r, dst54_r, dst21_r, dst43_r, dst65_r; ++ __m128i dst10_l, dst32_l, dst54_l, dst21_l, dst43_l, dst65_l; ++ ++ src0_ptr -= (src_stride + 1); ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ ++ filter_vec = __lsx_vld(filter_y, 0); ++ filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); ++ LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ ++ mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ mask1 = __lsx_vaddi_bu(mask0, 2); ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ for (cnt = width8mult; cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, ++ src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, src0, ++ src1, src2, src3); ++ src0_ptr += src_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src4, src5); ++ src6 = __lsx_vld(src0_ptr + src_stride_2x, 0); ++ src0_ptr += (8 - src_stride_4x); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in0, in1, in2, in3); ++ src1_ptr += 8; ++ LSX_DUP4_ARG2(__lsx_vsadd_h, in0, const_vec, in1, const_vec, in2, const_vec, ++ in3, const_vec, in0, in1, in2, in3); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ ++ dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); ++ dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); ++ dst2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); ++ ++ dst3 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); ++ dst4 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); ++ dst5 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ dst6 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst54_r, dst65_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst54_l, dst65_l); ++ ++ dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); ++ dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); ++ dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); ++ dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); ++ dst2_r = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); ++ dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); ++ dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); ++ dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); ++ ++ LSX_DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, ++ dst0_r, dst0_l, dst1_r, dst1_l); ++ LSX_DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, ++ dst2_r, dst2_l, dst3_r, dst3_l); ++ LSX_DUP4_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, dst2_r, ++ dst3_l, dst3_r, tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP4_ARG2(__lsx_vsadd_h, in0, tmp0, in1, tmp1, in2, tmp2, in3, tmp3, ++ tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP4_ARG2(__lsx_vmaxi_h, tmp0, 0, tmp1, 0, tmp2, 0, tmp3, 0, tmp0, tmp1, ++ tmp2, tmp3); ++ LSX_DUP2_ARG3(__lsx_vssrlrni_bu_h, tmp1, tmp0, 7, tmp3, tmp2, 7, out0, out1); ++ __lsx_vstelm_d(out0, dst, 0, 0); ++ __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(out1, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(out1, dst + dst_stride_3x, 0, 1); ++ dst += 8; ++ } ++} ++ ++static av_always_inline ++void hevc_hv_bi_4t_8x6_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y) ++{ ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t dst_stride_4x = (dst_stride << 2); ++ const int32_t src2_stride_2x = (src2_stride << 1); ++ const int32_t src2_stride_4x = (src2_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ ++ __m128i out0, out1, out2; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8; ++ __m128i in0, in1, in2, in3, in4, in5; ++ __m128i filt0, filt1; ++ __m128i filt_h0, filt_h1; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ __m128i mask1; ++ __m128i filter_vec, const_vec; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7, vec8, vec9; ++ __m128i vec10, vec11, vec12, vec13, vec14, vec15, vec16, vec17; ++ __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, dst8; ++ __m128i dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l; ++ __m128i dst4_r, dst4_l, dst5_r, dst5_l; ++ __m128i dst10_r, dst32_r, dst10_l, dst32_l; ++ __m128i dst21_r, dst43_r, dst21_l, dst43_l; ++ __m128i dst54_r, dst54_l, dst65_r, dst65_l; ++ __m128i dst76_r, dst76_l, dst87_r, dst87_l; ++ ++ src0_ptr -= (src_stride + 1); ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ ++ filter_vec = __lsx_vld(filter_y, 0); ++ filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); ++ LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ ++ mask1 = __lsx_vaddi_bu(mask0, 2); ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, ++ src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, src0, src1, ++ src2, src3); ++ src0_ptr += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, ++ src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, src4, src5, ++ src6, src7); ++ src8 = __lsx_vld(src0_ptr + src_stride_4x, 0); ++ ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, ++ src2, src3); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src6, 128, src7, 128, src4, src5, ++ src6, src7) ++ src8 = __lsx_vxori_b(src8, 128); ++ ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, in0, in1, ++ in2, in3); ++ src1_ptr += src2_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in4, in5); ++ LSX_DUP4_ARG2(__lsx_vsadd_h, in0, const_vec, in1, const_vec, in2, const_vec, in3, ++ const_vec, in0, in1, in2, in3); ++ LSX_DUP2_ARG2(__lsx_vsadd_h, in4, const_vec, in5, const_vec, in4, in5); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec6, vec7); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec8, vec9); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec10, vec11); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec12, vec13); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, vec14, vec15); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src8, src8, mask0, src8, src8, mask1, vec16, vec17); ++ ++ dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); ++ dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); ++ dst2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ dst3 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); ++ dst4 = __lsx_hevc_filt_4tap_h(vec8, vec9, filt0, filt1); ++ dst5 = __lsx_hevc_filt_4tap_h(vec10, vec11, filt0, filt1); ++ dst6 = __lsx_hevc_filt_4tap_h(vec12, vec13, filt0, filt1); ++ dst7 = __lsx_hevc_filt_4tap_h(vec14, vec15, filt0, filt1); ++ dst8 = __lsx_hevc_filt_4tap_h(vec16, vec17, filt0, filt1); ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, ++ dst10_r, dst21_r, dst32_r, dst43_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, ++ dst10_l, dst21_l, dst32_l, dst43_l); ++ LSX_DUP4_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst7, dst6, dst8, dst7, ++ dst54_r, dst65_r, dst76_r, dst87_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst7, dst6, dst8, dst7, ++ dst54_l, dst65_l, dst76_l, dst87_l); ++ ++ dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); ++ dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); ++ dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); ++ dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); ++ dst2_r = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); ++ dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); ++ dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); ++ dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); ++ dst4_r = __lsx_hevc_filt_4tap_w(dst54_r, dst76_r, filt_h0, filt_h1); ++ dst4_l = __lsx_hevc_filt_4tap_w(dst54_l, dst76_l, filt_h0, filt_h1); ++ dst5_r = __lsx_hevc_filt_4tap_w(dst65_r, dst87_r, filt_h0, filt_h1); ++ dst5_l = __lsx_hevc_filt_4tap_w(dst65_l, dst87_l, filt_h0, filt_h1); ++ ++ LSX_DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, dst0_r, ++ dst0_l, dst1_r, dst1_l); ++ LSX_DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, dst2_r, ++ dst2_l, dst3_r, dst3_l); ++ LSX_DUP4_ARG2(__lsx_vsrai_w, dst4_r, 6, dst4_l, 6, dst5_r, 6, dst5_l, 6, dst4_r, ++ dst4_l, dst5_r, dst5_l); ++ LSX_DUP4_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, dst2_r, ++ dst3_l, dst3_r, tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP2_ARG2(__lsx_vpickev_h, dst4_l, dst4_r, dst5_l, dst5_r, tmp4, tmp5); ++ LSX_DUP4_ARG2(__lsx_vsadd_h, in0, tmp0, in1, tmp1, in2, tmp2, in3, tmp3, tmp0, tmp1, ++ tmp2, tmp3); ++ LSX_DUP2_ARG2(__lsx_vsadd_h, in4, tmp4, in5, tmp5, tmp4, tmp5); ++ LSX_DUP4_ARG2(__lsx_vmaxi_h, tmp0, 0, tmp1, 0, tmp2, 0, tmp3, 0, tmp0, tmp1, tmp2, ++ tmp3); ++ LSX_DUP2_ARG2(__lsx_vmaxi_h, tmp4, 0, tmp5, 0, tmp4, tmp5); ++ LSX_DUP2_ARG3(__lsx_vssrlrni_bu_h, tmp1, tmp0, 7, tmp3, tmp2, 7, out0, out1); ++ out2 = __lsx_vssrlrni_bu_h(tmp5, tmp4, 7); ++ __lsx_vstelm_d(out0, dst, 0, 0); ++ __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(out1, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(out1, dst + dst_stride_3x, 0, 1); ++ dst += dst_stride_4x; ++ __lsx_vstelm_d(out2, dst, 0, 0); ++ __lsx_vstelm_d(out2, dst + dst_stride, 0, 1); ++} ++ ++static av_always_inline ++void hevc_hv_bi_4t_8multx4mult_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height, ++ int32_t width) ++{ ++ uint32_t loop_cnt, cnt; ++ uint8_t *src0_ptr_tmp; ++ int16_t *src1_ptr_tmp; ++ uint8_t *dst_tmp; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t dst_stride_4x = (dst_stride << 2); ++ const int32_t src2_stride_2x = (src2_stride << 1); ++ const int32_t src2_stride_4x = (src2_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ __m128i out0, out1; ++ __m128i src0, src1, src2, src3, src4, src5, src6; ++ __m128i in0, in1, in2, in3; ++ __m128i filt0, filt1; ++ __m128i filt_h0, filt_h1; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ __m128i mask1; ++ __m128i filter_vec, const_vec; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5; ++ __m128i dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l; ++ __m128i tmp0, tmp1, tmp2, tmp3; ++ __m128i dst10_r, dst32_r, dst21_r, dst43_r; ++ __m128i dst10_l, dst32_l, dst21_l, dst43_l; ++ __m128i dst54_r, dst54_l, dst65_r, dst65_l, dst6; ++ ++ src0_ptr -= (src_stride + 1); ++ ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ ++ filter_vec = __lsx_vld(filter_y, 0); ++ filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); ++ ++ LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ ++ mask1 = __lsx_vaddi_bu(mask0, 2); ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ for (cnt = width >> 3; cnt--;) { ++ src0_ptr_tmp = src0_ptr; ++ dst_tmp = dst; ++ src1_ptr_tmp = src1_ptr; ++ ++ LSX_DUP2_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, src0, src1); ++ src2 = __lsx_vld(src0_ptr_tmp + src_stride_2x, 0); ++ src0_ptr_tmp += src_stride_3x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ ++ dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); ++ dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); ++ dst2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); ++ ++ for (loop_cnt = height >> 2; loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, ++ src0_ptr_tmp + src_stride_2x, 0, src0_ptr_tmp + src_stride_3x, ++ 0, src3, src4, src5, src6); ++ src0_ptr_tmp += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src1_ptr_tmp, 0, src1_ptr_tmp + src2_stride, 0, ++ src1_ptr_tmp + src2_stride_2x, 0, src1_ptr_tmp + src2_stride_3x, ++ 0, in0, in1, in2, in3); ++ src1_ptr_tmp += src2_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, ++ src3, src4, src5, src6); ++ ++ LSX_DUP4_ARG2(__lsx_vsadd_h, in0, const_vec, in1, const_vec, in2, ++ const_vec, in3, const_vec, in0, in1, in2, in3); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src4, ++ src4, mask0, src4, src4, mask1, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src6, ++ src6, mask0, src6, src6, mask1, vec4, vec5, vec6, vec7); ++ ++ dst3 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); ++ dst4 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); ++ dst5 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ dst6 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst54_r, dst65_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst54_l, dst65_l); ++ ++ dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); ++ dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); ++ dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); ++ dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); ++ dst2_r = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); ++ dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); ++ dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); ++ dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); ++ ++ LSX_DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, ++ dst0_r, dst0_l, dst1_r, dst1_l); ++ LSX_DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, ++ dst2_r, dst2_l, dst3_r, dst3_l); ++ LSX_DUP4_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, ++ dst2_r, dst3_l, dst3_r, tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP4_ARG2(__lsx_vsadd_h, in0, tmp0, in1, tmp1, in2, tmp2, in3, tmp3, ++ tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP4_ARG2(__lsx_vmaxi_h, tmp0, 0, tmp1, 0, tmp2, 0, tmp3, 0, tmp0, ++ tmp1, tmp2, tmp3); ++ LSX_DUP2_ARG3(__lsx_vssrlrni_bu_h, tmp1, tmp0, 7, tmp3, tmp2, 7, out0, out1); ++ __lsx_vstelm_d(out0, dst_tmp, 0, 0); ++ __lsx_vstelm_d(out0, dst_tmp + dst_stride, 0, 1); ++ __lsx_vstelm_d(out1, dst_tmp + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(out1, dst_tmp + dst_stride_3x, 0, 1); ++ dst_tmp += dst_stride_4x; ++ ++ dst10_r = dst54_r; ++ dst10_l = dst54_l; ++ dst21_r = dst65_r; ++ dst21_l = dst65_l; ++ dst2 = dst6; ++ } ++ ++ src0_ptr += 8; ++ dst += 8; ++ src1_ptr += 8; ++ } ++} ++ ++static void hevc_hv_bi_4t_8w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ if (2 == height) { ++ hevc_hv_bi_4t_8x2_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y); ++ } else if (4 == height) { ++ hevc_hv_bi_4t_8multx4_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y, 1); ++ } else if (6 == height) { ++ hevc_hv_bi_4t_8x6_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y); ++ } else { ++ hevc_hv_bi_4t_8multx4mult_lsx(src0_ptr, src_stride, ++ src1_ptr, src2_stride, ++ dst, dst_stride, ++ filter_x, filter_y, height, 8); ++ } ++} ++ ++static void hevc_hv_bi_4t_16w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ if (4 == height) { ++ hevc_hv_bi_4t_8multx4_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y, 2); ++ } else { ++ hevc_hv_bi_4t_8multx4mult_lsx(src0_ptr, src_stride, src1_ptr, ++ src2_stride, dst, dst_stride, filter_x, ++ filter_y, height, 16); ++ } ++} ++ ++static void hevc_hv_bi_4t_24w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_bi_4t_8multx4mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y, ++ height, 24); ++} ++ ++static void hevc_hv_bi_4t_32w_lsx(uint8_t *src0_ptr, ++ int32_t src_stride, ++ int16_t *src1_ptr, ++ int32_t src2_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_bi_4t_8multx4mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y, ++ height, 32); ++} ++ ++#define BI_MC_COPY(WIDTH) \ ++void ff_hevc_put_hevc_bi_pel_pixels##WIDTH##_8_lsx(uint8_t *dst, \ ++ ptrdiff_t dst_stride, \ ++ uint8_t *src, \ ++ ptrdiff_t src_stride, \ ++ int16_t *src_16bit, \ ++ int height, \ ++ intptr_t mx, \ ++ intptr_t my, \ ++ int width) \ ++{ \ ++ hevc_bi_copy_##WIDTH##w_lsx(src, src_stride, src_16bit, MAX_PB_SIZE, \ ++ dst, dst_stride, height); \ ++} ++ ++BI_MC_COPY(4); ++BI_MC_COPY(6); ++BI_MC_COPY(8); ++BI_MC_COPY(12); ++BI_MC_COPY(16); ++BI_MC_COPY(24); ++BI_MC_COPY(32); ++BI_MC_COPY(48); ++BI_MC_COPY(64); ++ ++#undef BI_MC_COPY ++ ++#define BI_MC(PEL, DIR, WIDTH, TAP, DIR1, FILT_DIR) \ ++void ff_hevc_put_hevc_bi_##PEL##_##DIR##WIDTH##_8_lsx(uint8_t *dst, \ ++ ptrdiff_t dst_stride, \ ++ uint8_t *src, \ ++ ptrdiff_t src_stride, \ ++ int16_t *src_16bit, \ ++ int height, \ ++ intptr_t mx, \ ++ intptr_t my, \ ++ int width) \ ++{ \ ++ const int8_t *filter = ff_hevc_##PEL##_filters[FILT_DIR - 1]; \ ++ \ ++ hevc_##DIR1##_bi_##TAP##t_##WIDTH##w_lsx(src, src_stride, src_16bit, \ ++ MAX_PB_SIZE, dst, dst_stride, \ ++ filter, height); \ ++} ++ ++BI_MC(qpel, h, 16, 8, hz, mx); ++BI_MC(qpel, h, 24, 8, hz, mx); ++BI_MC(qpel, h, 32, 8, hz, mx); ++BI_MC(qpel, h, 48, 8, hz, mx); ++BI_MC(qpel, h, 64, 8, hz, mx); ++ ++BI_MC(qpel, v, 8, 8, vt, my); ++BI_MC(qpel, v, 16, 8, vt, my); ++BI_MC(qpel, v, 24, 8, vt, my); ++BI_MC(qpel, v, 32, 8, vt, my); ++BI_MC(qpel, v, 48, 8, vt, my); ++BI_MC(qpel, v, 64, 8, vt, my); ++ ++BI_MC(epel, h, 24, 4, hz, mx); ++BI_MC(epel, h, 32, 4, hz, mx); ++ ++BI_MC(epel, v, 12, 4, vt, my); ++BI_MC(epel, v, 16, 4, vt, my); ++BI_MC(epel, v, 24, 4, vt, my); ++BI_MC(epel, v, 32, 4, vt, my); ++ ++#undef BI_MC ++ ++#define BI_MC_HV(PEL, WIDTH, TAP) \ ++void ff_hevc_put_hevc_bi_##PEL##_hv##WIDTH##_8_lsx(uint8_t *dst, \ ++ ptrdiff_t dst_stride, \ ++ uint8_t *src, \ ++ ptrdiff_t src_stride, \ ++ int16_t *src_16bit, \ ++ int height, \ ++ intptr_t mx, \ ++ intptr_t my, \ ++ int width) \ ++{ \ ++ const int8_t *filter_x = ff_hevc_##PEL##_filters[mx - 1]; \ ++ const int8_t *filter_y = ff_hevc_##PEL##_filters[my - 1]; \ ++ \ ++ hevc_hv_bi_##TAP##t_##WIDTH##w_lsx(src, src_stride, src_16bit, \ ++ MAX_PB_SIZE, dst, dst_stride, \ ++ filter_x, filter_y, height); \ ++} ++ ++BI_MC_HV(qpel, 8, 8); ++BI_MC_HV(qpel, 16, 8); ++BI_MC_HV(qpel, 24, 8); ++BI_MC_HV(qpel, 32, 8); ++BI_MC_HV(qpel, 48, 8); ++BI_MC_HV(qpel, 64, 8); ++ ++BI_MC_HV(epel, 8, 4); ++BI_MC_HV(epel, 6, 4); ++BI_MC_HV(epel, 16, 4); ++BI_MC_HV(epel, 24, 4); ++BI_MC_HV(epel, 32, 4); ++ ++#undef BI_MC_HV +diff --git a/libavcodec/loongarch/hevc_mc_uni_lsx.c b/libavcodec/loongarch/hevc_mc_uni_lsx.c +new file mode 100644 +index 0000000000..bd481c7ff1 +--- /dev/null ++++ b/libavcodec/loongarch/hevc_mc_uni_lsx.c +@@ -0,0 +1,1476 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Lu Wang ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/loongarch/generic_macros_lsx.h" ++#include "hevcdsp_lsx.h" ++#include "hevc_macros_lsx.h" ++ ++static const uint8_t ff_hevc_mask_arr[16 * 3] __attribute__((aligned(0x40))) = { ++ /* 8 width cases */ ++ 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, ++ /* 4 width cases */ ++ 0, 1, 1, 2, 2, 3, 3, 4, 16, 17, 17, 18, 18, 19, 19, 20, ++ /* 4 width cases */ ++ 8, 9, 9, 10, 10, 11, 11, 12, 24, 25, 25, 26, 26, 27, 27, 28 ++}; ++ ++static av_always_inline ++void common_hz_8t_64w_lsx(uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ int32_t loop_cnt; ++ __m128i mask0, mask1, mask2, mask3, out; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; ++ __m128i filt0, filt1, filt2, filt3; ++ __m128i res0, res1, res2, res3; ++ ++ mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ src -= 3; ++ ++ /* rearranging filter */ ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); ++ ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ ++ for (loop_cnt = height; loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 8, src, 16, src, 24, src0, src1, src2, ++ src3); ++ LSX_DUP4_ARG2(__lsx_vld, src, 32, src, 40, src, 48, src, 56, src4, src5, src6, ++ src7); ++ src += src_stride; ++ ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src6, 128, src7, 128, src4, ++ src5, src6, src7); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, vec2, vec3); ++ LSX_DUP4_ARG2(__lsx_dp2_h_b, vec0, filt0, vec1, filt0, vec2, filt0, vec3, filt0, ++ res0, res1, res2, res3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, res0, vec0, filt2, res1, vec1, filt2, res2, ++ vec2, filt2, res3, vec3, filt2, res0, res1, res2, res3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, vec4, vec5); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, vec6, vec7); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, res0, vec4, filt1, res1, vec5, filt1, res2, ++ vec6, filt1, res3, vec7, filt1, res0, res1, res2, res3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, vec4, vec5); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, vec6, vec7); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, res0, vec4, filt3, res1, vec5, filt3, res2, ++ vec6, filt3, res3, vec7, filt3, res0, res1, res2, res3); ++ ++ out = __lsx_vssrarni_b_h(res1, res0, 6); ++ out = __lsx_vxori_b(out, 128); ++ __lsx_vst(out, dst, 0); ++ out = __lsx_vssrarni_b_h(res3, res2, 6); ++ out = __lsx_vxori_b(out, 128); ++ __lsx_vst(out, dst, 16); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src5, src5, mask0, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src7, src7, mask0, vec2, vec3); ++ LSX_DUP4_ARG2(__lsx_dp2_h_b, vec0, filt0, vec1, filt0, vec2, filt0, vec3, ++ filt0, res0, res1, res2, res3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask2, src5, src5, mask2, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask2, src7, src7, mask2, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, res0, vec0, filt2, res1, vec1, filt2, res2, ++ vec2, filt2, res3, vec3, filt2, res0, res1, res2, res3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask1, src5, src5, mask1, vec4, vec5); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask1, src7, src7, mask1, vec6, vec7); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, res0, vec4, filt1, res1, vec5, filt1, res2, ++ vec6, filt1, res3, vec7, filt1, res0, res1, res2, res3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask3, src5, src5, mask3, vec4, vec5); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask3, src7, src7, mask3, vec6, vec7); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, res0, vec4, filt3, res1, vec5, filt3, res2, ++ vec6, filt3, res3, vec7, filt3, res0, res1, res2, res3); ++ ++ LSX_DUP4_ARG2(__lsx_vsrari_h, res0, 6, res1, 6, res2, 6, res3, 6, res0, res1, ++ res2, res3); ++ LSX_DUP4_ARG2(__lsx_vsat_h, res0, 7, res1, 7, res2, 7, res3, 7, res0, res1, ++ res2, res3); ++ out = __lsx_vpickev_b(res1, res0); ++ out = __lsx_vxori_b(out, 128); ++ __lsx_vst(out, dst, 32); ++ out = __lsx_vpickev_b(res3, res2); ++ out = __lsx_vxori_b(out, 128); ++ __lsx_vst(out, dst, 48); ++ dst += dst_stride; ++ } ++} ++ ++static av_always_inline ++void common_vt_8t_8w_lsx(uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ uint32_t loop_cnt; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t dst_stride_4x = (dst_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; ++ __m128i src10_r, src32_r, src54_r, src76_r, src98_r, src21_r, src43_r; ++ __m128i src65_r, src87_r, src109_r, filt0, filt1, filt2, filt3; ++ __m128i tmp0, tmp1; ++ __m128i out0_r, out1_r, out2_r, out3_r; ++ ++ src -= src_stride_3x; ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); ++ ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); ++ src6 = __lsx_vld(src + src_stride_2x, 0); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, ++ src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ src += src_stride_3x; ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, src10_r, ++ src32_r, src54_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src7, src8, src9, src10); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, ++ src8, src9, src10); ++ src += src_stride_4x; ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src76_r, src87_r, src98_r, src109_r); ++ LSX_DUP4_ARG2(__lsx_dp2_h_b, src10_r, filt0, src21_r, filt0, src32_r, filt0, ++ src43_r, filt0, out0_r, out1_r, out2_r, out3_r); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, out0_r, src32_r, filt1, out1_r, src43_r, filt1, ++ out2_r, src54_r, filt1, out3_r, src65_r, filt1, out0_r, out1_r, ++ out2_r, out3_r); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, out0_r, src54_r, filt2, out1_r, src65_r, filt2, ++ out2_r, src76_r, filt2, out3_r, src87_r, filt2, out0_r, out1_r, ++ out2_r, out3_r); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, out0_r, src76_r, filt3, out1_r, src87_r, filt3, ++ out2_r, src98_r, filt3, out3_r, src109_r, filt3, out0_r, out1_r, ++ out2_r, out3_r); ++ ++ tmp0 = __lsx_vssrarni_b_h(out1_r, out0_r, 6); ++ tmp0 = __lsx_vxori_b(tmp0, 128); ++ tmp1 = __lsx_vssrarni_b_h(out3_r, out2_r, 6); ++ tmp1 = __lsx_vxori_b(tmp1, 128); ++ __lsx_vstelm_d(tmp0, dst, 0, 0); ++ __lsx_vstelm_d(tmp0, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(tmp1, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(tmp1, dst + dst_stride_3x, 0, 1); ++ dst += dst_stride_4x; ++ ++ src10_r = src54_r; ++ src32_r = src76_r; ++ src54_r = src98_r; ++ src21_r = src65_r; ++ src43_r = src87_r; ++ src65_r = src109_r; ++ src6 = src10; ++ } ++} ++ ++static av_always_inline ++void common_vt_8t_16w_mult_lsx(uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height, ++ int32_t width) ++{ ++ uint8_t *src_tmp; ++ uint8_t *dst_tmp; ++ uint32_t loop_cnt, cnt; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t dst_stride_4x = (dst_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; ++ __m128i filt0, filt1, filt2, filt3; ++ __m128i src10_r, src32_r, src54_r, src76_r, src98_r, src21_r, src43_r; ++ __m128i src65_r, src87_r, src109_r, src10_l, src32_l, src54_l, src76_l; ++ __m128i src98_l, src21_l, src43_l, src65_l, src87_l, src109_l; ++ __m128i tmp0, tmp1, tmp2, tmp3; ++ __m128i out0_r, out1_r, out2_r, out3_r, out0_l, out1_l, out2_l, out3_l; ++ ++ src -= src_stride_3x; ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); ++ ++ for (cnt = (width >> 4); cnt--;) { ++ src_tmp = src; ++ dst_tmp = dst; ++ ++ LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, src0, ++ src1, src2, src3); ++ src_tmp += src_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); ++ src6 = __lsx_vld(src_tmp + src_stride_2x, 0); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ src_tmp += src_stride_3x; ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_r, src32_r, src54_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_l, src32_l, src54_l, src21_l); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, src43_l, src65_l); ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, src7, ++ src8, src9, src10); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); ++ src_tmp += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, ++ src9, src76_r, src87_r, src98_r, src109_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, ++ src9, src76_l, src87_l, src98_l, src109_l); ++ out0_r = __lsx_hevc_filt_8tap_h(src10_r, src32_r, src54_r, src76_r, ++ filt0, filt1, filt2, filt3); ++ out1_r = __lsx_hevc_filt_8tap_h(src21_r, src43_r, src65_r, src87_r, ++ filt0, filt1, filt2, filt3); ++ out2_r = __lsx_hevc_filt_8tap_h(src32_r, src54_r, src76_r, src98_r, ++ filt0, filt1, filt2, filt3); ++ out3_r = __lsx_hevc_filt_8tap_h(src43_r, src65_r, src87_r, src109_r, ++ filt0, filt1, filt2, filt3); ++ out0_l = __lsx_hevc_filt_8tap_h(src10_l, src32_l, src54_l, src76_l, ++ filt0, filt1, filt2, filt3); ++ out1_l = __lsx_hevc_filt_8tap_h(src21_l, src43_l, src65_l, src87_l, ++ filt0, filt1, filt2, filt3); ++ out2_l = __lsx_hevc_filt_8tap_h(src32_l, src54_l, src76_l, src98_l, ++ filt0, filt1, filt2, filt3); ++ out3_l = __lsx_hevc_filt_8tap_h(src43_l, src65_l, src87_l, src109_l, ++ filt0, filt1, filt2, filt3); ++ LSX_DUP4_ARG3(__lsx_vssrarni_b_h, out0_l, out0_r, 6, out1_l, out1_r, 6, ++ out2_l, out2_r, 6, out3_l, out3_r, 6, tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP4_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp2, 128, tmp3, 128, ++ tmp0, tmp1, tmp2, tmp3); ++ __lsx_vst(tmp0, dst_tmp, 0); ++ __lsx_vstx(tmp1, dst_tmp, dst_stride); ++ __lsx_vstx(tmp2, dst_tmp, dst_stride_2x); ++ __lsx_vstx(tmp3, dst_tmp, dst_stride_3x); ++ dst_tmp += dst_stride_4x; ++ ++ src10_r = src54_r; ++ src32_r = src76_r; ++ src54_r = src98_r; ++ src21_r = src65_r; ++ src43_r = src87_r; ++ src65_r = src109_r; ++ src10_l = src54_l; ++ src32_l = src76_l; ++ src54_l = src98_l; ++ src21_l = src65_l; ++ src43_l = src87_l; ++ src65_l = src109_l; ++ src6 = src10; ++ } ++ ++ src += 16; ++ dst += 16; ++ } ++} ++ ++static void common_vt_8t_24w_lsx(uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ common_vt_8t_16w_mult_lsx(src, src_stride, dst, dst_stride, filter, height, ++ 16); ++ common_vt_8t_8w_lsx(src + 16, src_stride, dst + 16, dst_stride, filter, ++ height); ++} ++ ++static void common_vt_8t_32w_lsx(uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ common_vt_8t_16w_mult_lsx(src, src_stride, dst, dst_stride, filter, height, ++ 32); ++} ++ ++static void common_vt_8t_48w_lsx(uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ common_vt_8t_16w_mult_lsx(src, src_stride, dst, dst_stride, filter, height, ++ 48); ++} ++ ++static void common_vt_8t_64w_lsx(uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ common_vt_8t_16w_mult_lsx(src, src_stride, dst, dst_stride, filter, height, ++ 64); ++} ++ ++static av_always_inline ++void hevc_hv_uni_8t_8multx2mult_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height, int32_t width) ++{ ++ uint32_t loop_cnt, cnt; ++ uint8_t *src_tmp; ++ uint8_t *dst_tmp; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ ++ __m128i out; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8; ++ __m128i filt0, filt1, filt2, filt3; ++ __m128i filt_h0, filt_h1, filt_h2, filt_h3; ++ __m128i mask1, mask2, mask3; ++ __m128i filter_vec; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; ++ __m128i vec8, vec9, vec10, vec11, vec12, vec13, vec14, vec15; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, dst8; ++ __m128i dst0_r, dst0_l, dst1_r, dst1_l; ++ __m128i dst10_r, dst32_r, dst54_r, dst76_r; ++ __m128i dst10_l, dst32_l, dst54_l, dst76_l; ++ __m128i dst21_r, dst43_r, dst65_r, dst87_r; ++ __m128i dst21_l, dst43_l, dst65_l, dst87_l; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ ++ src -= (src_stride_3x + 3); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, filter_x, 6, ++ filt0, filt1, filt2, filt3); ++ ++ filter_vec = __lsx_vld(filter_y, 0); ++ filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); ++ LSX_DUP4_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filter_vec, 2, ++ filter_vec, 3, filt_h0, filt_h1, filt_h2, filt_h3); ++ ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ ++ for (cnt = width >> 3; cnt--;) { ++ src_tmp = src; ++ dst_tmp = dst; ++ ++ LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, src0, ++ src1, src2, src3); ++ src_tmp += src_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); ++ src6 = __lsx_vld(src_tmp + src_stride_2x, 0); ++ src_tmp += src_stride_3x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ ++ /* row 0 row 1 row 2 row 3 */ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, ++ mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, ++ mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, ++ mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, ++ mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); ++ dst0 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3); ++ dst1 = __lsx_hevc_filt_8tap_h(vec4, vec5, vec6, vec7, filt0, filt1, filt2, filt3); ++ dst2 = __lsx_hevc_filt_8tap_h(vec8, vec9, vec10, vec11, filt0, filt1, filt2, filt3); ++ dst3 = __lsx_hevc_filt_8tap_h(vec12, vec13, vec14, vec15, filt0, filt1, filt2, filt3); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, ++ mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, src5, ++ mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, src6, ++ mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); ++ dst4 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3); ++ dst5 = __lsx_hevc_filt_8tap_h(vec4, vec5, vec6, vec7, filt0, filt1, filt2, filt3); ++ dst6 = __lsx_hevc_filt_8tap_h(vec8, vec9, vec10, vec11, filt0, filt1, filt2, filt3); ++ ++ for (loop_cnt = height >> 1; loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src7, src8); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src7, src8); ++ src_tmp += src_stride_2x; ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst2, dst1, ++ dst10_r, dst32_r, dst54_r, dst21_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst2, dst1, ++ dst10_l, dst32_l, dst54_l, dst21_l); ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst4, dst3, dst6, dst5, dst43_r, dst65_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst4, dst3, dst6, dst5, dst43_l, dst65_l); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, src7, ++ src7, mask2, src7, src7, mask3, vec0, vec1, vec2, vec3); ++ dst7 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3); ++ ++ dst76_r = __lsx_vilvl_h(dst7, dst6); ++ dst76_l = __lsx_vilvh_h(dst7, dst6); ++ dst0_r = __lsx_hevc_filt_8tap_w(dst10_r, dst32_r, dst54_r, dst76_r, filt_h0, ++ filt_h1, filt_h2, filt_h3); ++ dst0_l = __lsx_hevc_filt_8tap_w(dst10_l, dst32_l, dst54_l, dst76_l, filt_h0, ++ filt_h1, filt_h2, filt_h3); ++ LSX_DUP2_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst0_r, dst0_l); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src8, src8, mask0, src8, src8, mask1, src8, ++ src8, mask2, src8, src8, mask3, vec0, vec1, vec2, vec3); ++ dst8 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, ++ filt2, filt3); ++ ++ dst87_r = __lsx_vilvl_h(dst8, dst7); ++ dst87_l = __lsx_vilvh_h(dst8, dst7); ++ dst1_r = __lsx_hevc_filt_8tap_w(dst21_r, dst43_r, dst65_r, dst87_r, ++ filt_h0, filt_h1, filt_h2, filt_h3); ++ dst1_l = __lsx_hevc_filt_8tap_w(dst21_l, dst43_l, dst65_l, dst87_l, ++ filt_h0, filt_h1, filt_h2, filt_h3); ++ LSX_DUP2_ARG2(__lsx_vsrai_w, dst1_r, 6, dst1_l, 6, dst1_r, dst1_l); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, ++ dst0, dst1); ++ out = __lsx_vpickev_b(dst1, dst0); ++ out = __lsx_vxori_b(out, 128); ++ __lsx_vstelm_d(out, dst_tmp, 0, 0); ++ __lsx_vstelm_d(out, dst_tmp + dst_stride, 0, 1); ++ dst_tmp += dst_stride_2x; ++ ++ dst0 = dst2; ++ dst1 = dst3; ++ dst2 = dst4; ++ dst3 = dst5; ++ dst4 = dst6; ++ dst5 = dst7; ++ dst6 = dst8; ++ } ++ ++ src += 8; ++ dst += 8; ++ } ++} ++ ++static void hevc_hv_uni_8t_8w_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_uni_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 8); ++} ++ ++static void hevc_hv_uni_8t_16w_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_uni_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 16); ++} ++ ++static void hevc_hv_uni_8t_24w_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_uni_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 24); ++} ++ ++static void hevc_hv_uni_8t_32w_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_uni_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 32); ++} ++ ++static void hevc_hv_uni_8t_48w_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_uni_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 48); ++} ++ ++static void hevc_hv_uni_8t_64w_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_uni_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 64); ++} ++ ++static av_always_inline ++void common_vt_4t_24w_lsx(uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ uint32_t loop_cnt; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; ++ __m128i src11, filt0, filt1; ++ __m128i src10_r, src32_r, src76_r, src98_r, src21_r, src43_r, src87_r; ++ __m128i src109_r, src10_l, src32_l, src21_l, src43_l; ++ __m128i out, out0_r, out1_r, out2_r, out3_r, out0_l, out1_l; ++ ++ src -= src_stride; ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ ++ /* 16 width */ ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ src2 = __lsx_vld(src + src_stride_2x, 0); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); ++ ++ /* 8 width */ ++ LSX_DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src6, src7); ++ src8 = __lsx_vld(src + src_stride_2x, 16); ++ src += src_stride_3x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); ++ src8 = __lsx_vxori_b(src8, 128); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); ++ ++ for (loop_cnt = 8; loop_cnt--;) { ++ /* 16 width */ ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src3, src4); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); ++ ++ /* 8 width */ ++ LSX_DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src9, src10); ++ src += src_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); ++ ++ /* 16 width */ ++ out0_r = __lsx_hevc_filt_4tap_h(src10_r, src32_r, filt0, filt1); ++ out0_l = __lsx_hevc_filt_4tap_h(src10_l, src32_l, filt0, filt1); ++ out1_r = __lsx_hevc_filt_4tap_h(src21_r, src43_r, filt0, filt1); ++ out1_l = __lsx_hevc_filt_4tap_h(src21_l, src43_l, filt0, filt1); ++ ++ /* 8 width */ ++ out2_r = __lsx_hevc_filt_4tap_h(src76_r, src98_r, filt0, filt1); ++ out3_r = __lsx_hevc_filt_4tap_h(src87_r, src109_r, filt0, filt1); ++ ++ /* 16 + 8 width */ ++ out = __lsx_vssrarni_b_h(out0_l, out0_r, 6); ++ out = __lsx_vxori_b(out, 128); ++ __lsx_vst(out, dst, 0); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out2_r, out2_r, 6, out3_r, out3_r, 6, ++ out2_r, out3_r); ++ LSX_DUP2_ARG2(__lsx_vxori_b, out2_r, 128, out3_r, 128, out2_r, out3_r); ++ __lsx_vstelm_d(out2_r, dst, 16, 0); ++ dst += dst_stride; ++ out = __lsx_vssrarni_b_h(out1_l, out1_r, 6); ++ out = __lsx_vxori_b(out, 128); ++ __lsx_vst(out, dst, 0); ++ __lsx_vstelm_d(out3_r, dst, 16, 0); ++ dst += dst_stride; ++ ++ /* 16 width */ ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src5, src2); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); ++ ++ /* 8 width */ ++ LSX_DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src11, src8); ++ src += src_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src11, 128, src8, 128, src11, src8); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src11, src10, src8, src11, src76_r, src87_r); ++ ++ /* 16 width */ ++ out0_r = __lsx_hevc_filt_4tap_h(src32_r, src10_r, filt0, filt1); ++ out0_l = __lsx_hevc_filt_4tap_h(src32_l, src10_l, filt0, filt1); ++ out1_r = __lsx_hevc_filt_4tap_h(src43_r, src21_r, filt0, filt1); ++ out1_l = __lsx_hevc_filt_4tap_h(src43_l, src21_l, filt0, filt1); ++ ++ /* 8 width */ ++ out2_r = __lsx_hevc_filt_4tap_h(src98_r, src76_r, filt0, filt1); ++ out3_r = __lsx_hevc_filt_4tap_h(src109_r, src87_r, filt0, filt1); ++ ++ /* 16 + 8 width */ ++ out = __lsx_vssrarni_b_h(out0_l, out0_r, 6); ++ out = __lsx_vxori_b(out, 128); ++ __lsx_vst(out, dst, 0); ++ out = __lsx_vssrarni_b_h(out2_r, out2_r, 6); ++ out = __lsx_vxori_b(out, 128); ++ __lsx_vstelm_d(out, dst, 16, 0); ++ dst += dst_stride; ++ ++ out = __lsx_vssrarni_b_h(out1_l, out1_r, 6); ++ out = __lsx_vxori_b(out, 128); ++ __lsx_vst(out, dst, 0); ++ out = __lsx_vssrarni_b_h(out3_r, out3_r, 6); ++ out = __lsx_vxori_b(out, 128); ++ __lsx_vstelm_d(out, dst, 16, 0); ++ dst += dst_stride; ++ } ++} ++ ++static av_always_inline ++void common_vt_4t_32w_lsx(uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ uint32_t loop_cnt; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ ++ __m128i src0, src1, src2, src3, src4, src6, src7, src8, src9, src10; ++ __m128i src10_r, src32_r, src76_r, src98_r; ++ __m128i src21_r, src43_r, src87_r, src109_r; ++ __m128i out0_r, out1_r, out2_r, out3_r, out0_l, out1_l, out2_l, out3_l; ++ __m128i src10_l, src32_l, src76_l, src98_l; ++ __m128i src21_l, src43_l, src87_l, src109_l; ++ __m128i filt0, filt1; ++ __m128i out; ++ ++ src -= src_stride; ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ ++ /* 16 width */ ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ src2 = __lsx_vld(src + src_stride_2x, 0); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); ++ ++ /* next 16 width */ ++ LSX_DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src6, src7); ++ src8 = __lsx_vld(src + src_stride_2x, 16); ++ src += src_stride_3x; ++ ++ LSX_DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); ++ src8 = __lsx_vxori_b(src8, 128); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src76_l, src87_l); ++ ++ for (loop_cnt = (height >> 1); loop_cnt--;) { ++ /* 16 width */ ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src3, src4); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); ++ ++ /* 16 width */ ++ out0_r = __lsx_hevc_filt_4tap_h(src10_r, src32_r, filt0, filt1); ++ out0_l = __lsx_hevc_filt_4tap_h(src10_l, src32_l, filt0, filt1); ++ out1_r = __lsx_hevc_filt_4tap_h(src21_r, src43_r, filt0, filt1); ++ out1_l = __lsx_hevc_filt_4tap_h(src21_l, src43_l, filt0, filt1); ++ ++ /* 16 width */ ++ out = __lsx_vssrarni_b_h(out0_l, out0_r, 6); ++ out = __lsx_vxori_b(out, 128); ++ __lsx_vst(out, dst, 0); ++ out = __lsx_vssrarni_b_h(out1_l, out1_r, 6); ++ out = __lsx_vxori_b(out, 128); ++ __lsx_vstx(out, dst, dst_stride); ++ ++ src10_r = src32_r; ++ src21_r = src43_r; ++ src10_l = src32_l; ++ src21_l = src43_l; ++ src2 = src4; ++ ++ /* next 16 width */ ++ LSX_DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src9, src10); ++ src += src_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src9, src8, src10, src9, src98_l, src109_l); ++ ++ /* next 16 width */ ++ out2_r = __lsx_hevc_filt_4tap_h(src76_r, src98_r, filt0, filt1); ++ out2_l = __lsx_hevc_filt_4tap_h(src76_l, src98_l, filt0, filt1); ++ out3_r = __lsx_hevc_filt_4tap_h(src87_r, src109_r, filt0, filt1); ++ out3_l = __lsx_hevc_filt_4tap_h(src87_l, src109_l, filt0, filt1); ++ ++ /* next 16 width */ ++ out = __lsx_vssrarni_b_h(out2_l, out2_r, 6); ++ out = __lsx_vxori_b(out, 128); ++ __lsx_vst(out, dst, 16); ++ out = __lsx_vssrarni_b_h(out3_l, out3_r, 6); ++ out = __lsx_vxori_b(out, 128); ++ __lsx_vst(out, dst + dst_stride, 16); ++ ++ dst += dst_stride_2x; ++ ++ src76_r = src98_r; ++ src87_r = src109_r; ++ src76_l = src98_l; ++ src87_l = src109_l; ++ src8 = src10; ++ } ++} ++ ++static av_always_inline ++void hevc_hv_uni_4t_8x2_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y) ++{ ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ __m128i out; ++ __m128i src0, src1, src2, src3, src4; ++ __m128i filt0, filt1; ++ __m128i filt_h0, filt_h1, filter_vec; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ __m128i mask1; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7, vec8, vec9; ++ __m128i dst0, dst1, dst2, dst3, dst4; ++ __m128i dst0_r, dst0_l, dst1_r, dst1_l; ++ __m128i dst10_r, dst32_r, dst21_r, dst43_r; ++ __m128i dst10_l, dst32_l, dst21_l, dst43_l; ++ __m128i out0_r, out1_r; ++ ++ src -= (src_stride + 1); ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ ++ filter_vec = __lsx_vld(filter_y, 0); ++ filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); ++ LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ ++ mask1 = __lsx_vaddi_bu(mask0, 2); ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); ++ src4 = __lsx_vld(src + src_stride_4x, 0); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ src4 = __lsx_vxori_b(src4, 128); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src1, src1, ++ mask0, src1, src1, mask1, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src3, src3, ++ mask0, src3, src3, mask1, vec4, vec5, vec6, vec7); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec8, vec9); ++ ++ dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); ++ dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); ++ dst2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ dst3 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); ++ dst4 = __lsx_hevc_filt_4tap_h(vec8, vec9, filt0, filt1); ++ LSX_DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, ++ dst10_r, dst21_r, dst32_r, dst43_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, ++ dst10_l, dst21_l, dst32_l, dst43_l); ++ dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); ++ dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); ++ dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); ++ dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); ++ LSX_DUP2_ARG3(__lsx_vsrani_h_w, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, ++ out0_r, out1_r); ++ out = __lsx_vssrarni_b_h(out1_r, out0_r, 6); ++ out = __lsx_vxori_b(out, 128); ++ __lsx_vstelm_d(out, dst, 0, 0); ++ __lsx_vstelm_d(out, dst + dst_stride, 0, 1); ++} ++ ++static av_always_inline ++void hevc_hv_uni_4t_8multx4_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t width8mult) ++{ ++ uint32_t cnt; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ ++ __m128i out0, out1; ++ __m128i src0, src1, src2, src3, src4, src5, src6, mask0, mask1; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; ++ __m128i filt0, filt1, filt_h0, filt_h1, filter_vec; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, tmp0, tmp1, tmp2, tmp3; ++ __m128i dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l; ++ __m128i dst10_r, dst32_r, dst54_r, dst21_r, dst43_r, dst65_r; ++ __m128i dst10_l, dst32_l, dst54_l, dst21_l, dst43_l, dst65_l; ++ ++ src -= (src_stride + 1); ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ ++ filter_vec = __lsx_vld(filter_y, 0); ++ filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); ++ LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ ++ mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ mask1 = __lsx_vaddi_bu(mask0, 2); ++ ++ for (cnt = width8mult; cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); ++ src6 = __lsx_vld(src + src_stride_2x, 0); ++ src += (8 - src_stride_4x); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ ++ dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); ++ dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); ++ dst2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); ++ ++ dst3 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); ++ dst4 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); ++ dst5 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ dst6 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst5, dst4, dst6, dst5, ++ dst32_r, dst43_r, dst54_r, dst65_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst5, dst4, dst6, dst5, ++ dst32_l, dst43_l, dst54_l, dst65_l); ++ ++ dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); ++ dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); ++ dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); ++ dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); ++ dst2_r = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); ++ dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); ++ dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); ++ dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); ++ ++ LSX_DUP4_ARG3(__lsx_vsrani_h_w, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, dst2_l, ++ dst2_r, 6, dst3_l, dst3_r, 6, tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 6, tmp3, tmp2, 6, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ __lsx_vstelm_d(out0, dst, 0, 0); ++ __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(out1, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(out1, dst + dst_stride_3x, 0, 1); ++ dst += 8; ++ } ++} ++ ++static av_always_inline ++void hevc_hv_uni_4t_8x6_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y) ++{ ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t dst_stride_4x = (dst_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ __m128i out0, out1, out2; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8; ++ __m128i filt0, filt1; ++ __m128i filt_h0, filt_h1, filter_vec; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ __m128i mask1; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7, vec8, vec9; ++ __m128i vec10, vec11, vec12, vec13, vec14, vec15, vec16, vec17; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, dst8; ++ __m128i dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l; ++ __m128i dst4_r, dst4_l, dst5_r, dst5_l; ++ __m128i dst10_r, dst32_r, dst10_l, dst32_l; ++ __m128i dst21_r, dst43_r, dst21_l, dst43_l; ++ __m128i dst54_r, dst54_l, dst65_r, dst65_l; ++ __m128i dst76_r, dst76_l, dst87_r, dst87_l; ++ __m128i out0_r, out1_r, out2_r, out3_r, out4_r, out5_r; ++ ++ src -= (src_stride + 1); ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ ++ filter_vec = __lsx_vld(filter_y, 0); ++ filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); ++ LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ ++ mask1 = __lsx_vaddi_bu(mask0, 2); ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); ++ src4 = __lsx_vld(src + src_stride_4x, 0); ++ src += (src_stride_4x + src_stride); ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src5, src6, src7, src8); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, ++ src2, src3) ++ src4 = __lsx_vxori_b(src4, 128); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src5, 128, src6, 128, src7, 128, src8, 128, src5, src6, ++ src7, src8); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src1, src1, ++ mask0, src1, src1, mask1, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src3, src3, ++ mask0, src3, src3, mask1, vec4, vec5, vec6, vec7); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src5, src5, ++ mask0, src5, src5, mask1, vec8, vec9, vec10, vec11); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src7, src7, ++ mask0, src7, src7, mask1, vec12, vec13, vec14, vec15); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src8, src8, mask0, src8, src8, mask1, vec16, vec17); ++ ++ dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); ++ dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); ++ dst2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ dst3 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); ++ dst4 = __lsx_hevc_filt_4tap_h(vec8, vec9, filt0, filt1); ++ dst5 = __lsx_hevc_filt_4tap_h(vec10, vec11, filt0, filt1); ++ dst6 = __lsx_hevc_filt_4tap_h(vec12, vec13, filt0, filt1); ++ dst7 = __lsx_hevc_filt_4tap_h(vec14, vec15, filt0, filt1); ++ dst8 = __lsx_hevc_filt_4tap_h(vec16, vec17, filt0, filt1); ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, ++ dst10_r, dst21_r, dst32_r, dst43_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, ++ dst10_l, dst21_l, dst32_l, dst43_l); ++ LSX_DUP4_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst7, dst6, dst8, dst7, ++ dst54_r, dst65_r, dst76_r, dst87_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst7, dst6, dst8, dst7, ++ dst54_l, dst65_l, dst76_l, dst87_l); ++ ++ dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); ++ dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); ++ dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); ++ dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); ++ dst2_r = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); ++ dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); ++ dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); ++ dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); ++ dst4_r = __lsx_hevc_filt_4tap_w(dst54_r, dst76_r, filt_h0, filt_h1); ++ dst4_l = __lsx_hevc_filt_4tap_w(dst54_l, dst76_l, filt_h0, filt_h1); ++ dst5_r = __lsx_hevc_filt_4tap_w(dst65_r, dst87_r, filt_h0, filt_h1); ++ dst5_l = __lsx_hevc_filt_4tap_w(dst65_l, dst87_l, filt_h0, filt_h1); ++ ++ LSX_DUP4_ARG3(__lsx_vsrani_h_w, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, dst2_l, ++ dst2_r, 6, dst3_l, dst3_r, 6, out0_r, out1_r, out2_r, out3_r); ++ LSX_DUP2_ARG3(__lsx_vsrani_h_w, dst4_l, dst4_r, 6, dst5_l, dst5_r, 6, ++ out4_r, out5_r); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1_r, out0_r, 6, out3_r, out2_r, 6, ++ out0, out1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1) ++ out2 = __lsx_vssrarni_b_h(out5_r, out4_r, 6); ++ out2 = __lsx_vxori_b(out2, 128); ++ ++ __lsx_vstelm_d(out0, dst, 0, 0); ++ __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(out1, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(out1, dst + dst_stride_3x, 0, 1); ++ dst += dst_stride_4x; ++ __lsx_vstelm_d(out2, dst, 0, 0); ++ __lsx_vstelm_d(out2, dst + dst_stride, 0, 1); ++} ++ ++static av_always_inline ++void hevc_hv_uni_4t_8multx4mult_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height, ++ int32_t width8mult) ++{ ++ uint32_t loop_cnt, cnt; ++ uint8_t *src_tmp; ++ uint8_t *dst_tmp; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t dst_stride_4x = (dst_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ ++ __m128i out0, out1; ++ __m128i src0, src1, src2, src3, src4, src5, src6; ++ __m128i filt0, filt1; ++ __m128i filt_h0, filt_h1, filter_vec; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ __m128i mask1; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5; ++ __m128i dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l; ++ __m128i dst10_r, dst32_r, dst21_r, dst43_r; ++ __m128i dst10_l, dst32_l, dst21_l, dst43_l; ++ __m128i dst54_r, dst54_l, dst65_r, dst65_l, dst6; ++ __m128i out0_r, out1_r, out2_r, out3_r; ++ ++ src -= (src_stride + 1); ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ ++ filter_vec = __lsx_vld(filter_y, 0); ++ filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); ++ LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ mask1 = __lsx_vaddi_bu(mask0, 2); ++ ++ for (cnt = width8mult; cnt--;) { ++ src_tmp = src; ++ dst_tmp = dst; ++ ++ LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src0, src1); ++ src2 = __lsx_vld(src_tmp + src_stride_2x, 0); ++ src_tmp += src_stride_3x; ++ ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ ++ dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); ++ dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); ++ dst2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, src3, ++ src4, src5, src6); ++ src_tmp += src_stride_4x; ++ ++ LSX_DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, ++ src3, src4, src5, src6); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src4, ++ src4, mask0, src4, src4, mask1, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src6, ++ src6, mask0, src6, src6, mask1, vec4, vec5, vec6, vec7); ++ ++ dst3 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); ++ dst4 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); ++ dst5 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ dst6 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst5, dst4, dst6, dst5, ++ dst32_r, dst43_r, dst54_r, dst65_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst5, dst4, dst6, dst5, ++ dst32_l, dst43_l, dst54_l, dst65_l); ++ ++ dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); ++ dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); ++ dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); ++ dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); ++ dst2_r = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); ++ dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); ++ dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); ++ dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); ++ ++ LSX_DUP4_ARG3(__lsx_vsrani_h_w, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, ++ dst2_l, dst2_r, 6, dst3_l, dst3_r, 6, out0_r, out1_r, ++ out2_r, out3_r); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1_r, out0_r, 6, out3_r, out2_r, 6, ++ out0, out1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ __lsx_vstelm_d(out0, dst_tmp, 0, 0); ++ __lsx_vstelm_d(out0, dst_tmp + dst_stride, 0, 1); ++ __lsx_vstelm_d(out1, dst_tmp + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(out1, dst_tmp + dst_stride_3x, 0, 1); ++ dst_tmp += dst_stride_4x; ++ ++ dst10_r = dst54_r; ++ dst10_l = dst54_l; ++ dst21_r = dst65_r; ++ dst21_l = dst65_l; ++ dst2 = dst6; ++ } ++ ++ src += 8; ++ dst += 8; ++ } ++} ++ ++static void hevc_hv_uni_4t_8w_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ if (2 == height) { ++ hevc_hv_uni_4t_8x2_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y); ++ } else if (4 == height) { ++ hevc_hv_uni_4t_8multx4_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, 1); ++ } else if (6 == height) { ++ hevc_hv_uni_4t_8x6_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y); ++ } else if (0 == (height & 0x03)) { ++ hevc_hv_uni_4t_8multx4mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 1); ++ } ++} ++ ++static av_always_inline ++void hevc_hv_uni_4t_12w_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ uint8_t *src_tmp, *dst_tmp; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t dst_stride_4x = (dst_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ __m128i out0, out1; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; ++ __m128i mask0, mask1, mask2, mask3; ++ __m128i filt0, filt1, filt_h0, filt_h1, filter_vec, tmp0, tmp1, tmp2, tmp3; ++ __m128i dsth0, dsth1, dsth2, dsth3, dsth4, dsth5, dsth6; ++ __m128i dst10, dst21, dst22, dst73, dst84, dst95, dst106; ++ __m128i dst76_r, dst98_r, dst87_r, dst109_r; ++ __m128i dst10_r, dst32_r, dst54_r, dst21_r, dst43_r, dst65_r; ++ __m128i dst10_l, dst32_l, dst54_l, dst21_l, dst43_l, dst65_l; ++ __m128i dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; ++ ++ src -= (src_stride + 1); ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ ++ filter_vec = __lsx_vld(filter_y, 0); ++ filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); ++ LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ ++ mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ mask1 = __lsx_vaddi_bu(mask0, 2); ++ ++ src_tmp = src; ++ dst_tmp = dst; ++ ++ LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src0, src1); ++ src2 = __lsx_vld(src_tmp + src_stride_2x, 0); ++ src_tmp += src_stride_3x; ++ ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ ++ dsth0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); ++ dsth1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); ++ dsth2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dsth1, dsth0, dsth2, dsth1, dst10_r, dst21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dsth1, dsth0, dsth2, dsth1, dst10_l, dst21_l); ++ ++ for (loop_cnt = 4; loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, ++ src3, src4, src5, src6); ++ src_tmp += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, ++ src3, src4, src5, src6); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src4, src4, ++ mask0, src4, src4, mask1, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src6, src6, ++ mask0, src6, src6, mask1, vec4, vec5, vec6, vec7); ++ ++ dsth3 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); ++ dsth4 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); ++ dsth5 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ dsth6 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_h, dsth3, dsth2, dsth4, dsth3, dsth5, dsth4, dsth6, ++ dsth5, dst32_r, dst43_r, dst54_r, dst65_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, dsth3, dsth2, dsth4, dsth3, dsth5, dsth4, dsth6, ++ dsth5, dst32_l, dst43_l, dst54_l, dst65_l); ++ ++ dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); ++ dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); ++ dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); ++ dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); ++ dst2_r = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); ++ dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); ++ dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); ++ dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); ++ ++ LSX_DUP4_ARG3(__lsx_vsrani_h_w, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, dst2_l, ++ dst2_r, 6, dst3_l, dst3_r, 6, tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 6, tmp3, tmp2, 6, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ ++ __lsx_vstelm_d(out0, dst_tmp, 0, 0); ++ __lsx_vstelm_d(out0, dst_tmp + dst_stride, 0, 1); ++ __lsx_vstelm_d(out1, dst_tmp + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(out1, dst_tmp + dst_stride_3x, 0, 1); ++ dst_tmp += dst_stride_4x; ++ ++ dst10_r = dst54_r; ++ dst10_l = dst54_l; ++ dst21_r = dst65_r; ++ dst21_l = dst65_l; ++ dsth2 = dsth6; ++ } ++ ++ src += 8; ++ dst += 8; ++ ++ mask2 = __lsx_vld(ff_hevc_mask_arr, 16); ++ mask3 = __lsx_vaddi_bu(mask2, 2); ++ ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ src2 = __lsx_vld(src + src_stride_2x, 0); ++ src += src_stride_3x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src0, mask2, src1, src0, mask3, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src1, mask2, src2, src1, mask3, vec2, vec3); ++ ++ dst10 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); ++ dst21 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); ++ ++ dst10_r = __lsx_vilvl_h(dst21, dst10); ++ dst21_r = __lsx_vilvh_h(dst21, dst10); ++ dst22 = __lsx_vreplvei_d(dst21, 1); ++ ++ for (loop_cnt = 2; loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src3, src4, src5, src6); ++ src += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src7, src8, src9, src10); ++ src += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, ++ src4, src5, src6) ++ LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, ++ src8, src9, src10) ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src7, src3, mask2, src7, src3, mask3, src8, src4, ++ mask2, src8, src4, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src9, src5, mask2, src9, src5, mask3, src10, src6, ++ mask2, src10, src6, mask3, vec4, vec5, vec6, vec7); ++ ++ dst73 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); ++ dst84 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); ++ dst95 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ dst106 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); ++ ++ dst32_r = __lsx_vilvl_h(dst73, dst22); ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst84, dst73, dst95, dst84, dst43_r, dst54_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst84, dst73, dst95, dst84, dst87_r, dst98_r); ++ dst65_r = __lsx_vilvl_h(dst106, dst95); ++ dst109_r = __lsx_vilvh_h(dst106, dst95); ++ dst22 = __lsx_vreplvei_d(dst73, 1); ++ dst76_r = __lsx_vilvl_h(dst22, dst106); ++ ++ dst0 = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); ++ dst1 = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); ++ dst2 = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); ++ dst3 = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); ++ dst4 = __lsx_hevc_filt_4tap_w(dst54_r, dst76_r, filt_h0, filt_h1); ++ dst5 = __lsx_hevc_filt_4tap_w(dst65_r, dst87_r, filt_h0, filt_h1); ++ dst6 = __lsx_hevc_filt_4tap_w(dst76_r, dst98_r, filt_h0, filt_h1); ++ dst7 = __lsx_hevc_filt_4tap_w(dst87_r, dst109_r, filt_h0, filt_h1); ++ ++ LSX_DUP4_ARG3(__lsx_vsrani_h_w, dst1, dst0, 6, dst3, dst2, 6, dst5, dst4, 6, ++ dst7, dst6, 6, tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 6, tmp3, tmp2, 6, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ ++ __lsx_vstelm_w(out0, dst, 0, 0); ++ __lsx_vstelm_w(out0, dst + dst_stride, 0, 1); ++ __lsx_vstelm_w(out0, dst + dst_stride_2x, 0, 2); ++ __lsx_vstelm_w(out0, dst + dst_stride_3x, 0, 3); ++ dst += dst_stride_4x; ++ __lsx_vstelm_w(out1, dst, 0, 0); ++ __lsx_vstelm_w(out1, dst + dst_stride, 0, 1); ++ __lsx_vstelm_w(out1, dst + dst_stride_2x, 0, 2); ++ __lsx_vstelm_w(out1, dst + dst_stride_3x, 0, 3); ++ dst += dst_stride_4x; ++ ++ dst10_r = dst98_r; ++ dst21_r = dst109_r; ++ dst22 = __lsx_vreplvei_d(dst106, 1); ++ } ++} ++ ++static void hevc_hv_uni_4t_16w_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ if (4 == height) { ++ hevc_hv_uni_4t_8multx4_lsx(src, src_stride, dst, dst_stride, filter_x, ++ filter_y, 2); ++ } else { ++ hevc_hv_uni_4t_8multx4mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 2); ++ } ++} ++ ++static void hevc_hv_uni_4t_24w_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_uni_4t_8multx4mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 3); ++} ++ ++static void hevc_hv_uni_4t_32w_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_uni_4t_8multx4mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 4); ++} ++ ++#define UNI_MC(PEL, DIR, WIDTH, TAP, DIR1, FILT_DIR) \ ++void ff_hevc_put_hevc_uni_##PEL##_##DIR##WIDTH##_8_lsx(uint8_t *dst, \ ++ ptrdiff_t dst_stride, \ ++ uint8_t *src, \ ++ ptrdiff_t src_stride, \ ++ int height, \ ++ intptr_t mx, \ ++ intptr_t my, \ ++ int width) \ ++{ \ ++ const int8_t *filter = ff_hevc_##PEL##_filters[FILT_DIR - 1]; \ ++ \ ++ common_##DIR1##_##TAP##t_##WIDTH##w_lsx(src, src_stride, dst, dst_stride, \ ++ filter, height); \ ++} ++ ++UNI_MC(qpel, h, 64, 8, hz, mx); ++ ++UNI_MC(qpel, v, 24, 8, vt, my); ++UNI_MC(qpel, v, 32, 8, vt, my); ++UNI_MC(qpel, v, 48, 8, vt, my); ++UNI_MC(qpel, v, 64, 8, vt, my); ++ ++UNI_MC(epel, v, 24, 4, vt, my); ++UNI_MC(epel, v, 32, 4, vt, my); ++ ++#undef UNI_MC ++ ++#define UNI_MC_HV(PEL, WIDTH, TAP) \ ++void ff_hevc_put_hevc_uni_##PEL##_hv##WIDTH##_8_lsx(uint8_t *dst, \ ++ ptrdiff_t dst_stride, \ ++ uint8_t *src, \ ++ ptrdiff_t src_stride, \ ++ int height, \ ++ intptr_t mx, \ ++ intptr_t my, \ ++ int width) \ ++{ \ ++ const int8_t *filter_x = ff_hevc_##PEL##_filters[mx - 1]; \ ++ const int8_t *filter_y = ff_hevc_##PEL##_filters[my - 1]; \ ++ \ ++ hevc_hv_uni_##TAP##t_##WIDTH##w_lsx(src, src_stride, dst, dst_stride, \ ++ filter_x, filter_y, height); \ ++} ++ ++UNI_MC_HV(qpel, 8, 8); ++UNI_MC_HV(qpel, 16, 8); ++UNI_MC_HV(qpel, 24, 8); ++UNI_MC_HV(qpel, 32, 8); ++UNI_MC_HV(qpel, 48, 8); ++UNI_MC_HV(qpel, 64, 8); ++ ++UNI_MC_HV(epel, 8, 4); ++UNI_MC_HV(epel, 12, 4); ++UNI_MC_HV(epel, 16, 4); ++UNI_MC_HV(epel, 24, 4); ++UNI_MC_HV(epel, 32, 4); ++ ++#undef UNI_MC_HV +diff --git a/libavcodec/loongarch/hevc_mc_uniw_lsx.c b/libavcodec/loongarch/hevc_mc_uniw_lsx.c +new file mode 100644 +index 0000000000..619ef95960 +--- /dev/null ++++ b/libavcodec/loongarch/hevc_mc_uniw_lsx.c +@@ -0,0 +1,338 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Lu Wang ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/loongarch/generic_macros_lsx.h" ++#include "hevcdsp_lsx.h" ++#include "hevc_macros_lsx.h" ++ ++static const uint8_t ff_hevc_mask_arr[16 * 2] __attribute__((aligned(0x40))) = { ++ /* 8 width cases */ ++ 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, ++ /* 4 width cases */ ++ 0, 1, 1, 2, 2, 3, 3, 4, 16, 17, 17, 18, 18, 19, 19, 20 ++}; ++ ++static av_always_inline ++void hevc_hv_uniwgt_8t_8multx2mult_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height, ++ int32_t weight, ++ int32_t offset, ++ int32_t rnd_val, ++ int32_t width) ++{ ++ uint32_t loop_cnt, cnt; ++ uint8_t *src_tmp; ++ uint8_t *dst_tmp; ++ const int32_t src_stride_2x = (src_stride << 1); ++ const int32_t dst_stride_2x = (dst_stride << 1); ++ const int32_t src_stride_4x = (src_stride << 2); ++ const int32_t src_stride_3x = src_stride_2x + src_stride; ++ ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8; ++ __m128i filt0, filt1, filt2, filt3; ++ __m128i filt_h0, filt_h1, filt_h2, filt_h3; ++ __m128i mask1, mask2, mask3; ++ __m128i filter_vec; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; ++ __m128i vec8, vec9, vec10, vec11, vec12, vec13, vec14, vec15; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, dst8; ++ __m128i dst0_r, dst0_l, dst1_r, dst1_l; ++ __m128i dst10_r, dst32_r, dst54_r, dst76_r; ++ __m128i dst10_l, dst32_l, dst54_l, dst76_l; ++ __m128i dst21_r, dst43_r, dst65_r, dst87_r; ++ __m128i dst21_l, dst43_l, dst65_l, dst87_l; ++ __m128i weight_vec, offset_vec, rnd_vec, const_128, denom_vec; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ ++ src -= (src_stride_3x + 3); ++ weight_vec = __lsx_vreplgr2vr_w(weight); ++ offset_vec = __lsx_vreplgr2vr_w(offset); ++ rnd_vec = __lsx_vreplgr2vr_w(rnd_val); ++ denom_vec = __lsx_vsubi_wu(rnd_vec, 6); ++ ++ const_128 = __lsx_vldi(0x880); ++ const_128 = __lsx_vmul_w(weight_vec, const_128); ++ denom_vec = __lsx_vsrar_w(const_128, denom_vec); ++ offset_vec = __lsx_vadd_w(denom_vec, offset_vec); ++ ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, filter_x, 6, ++ filt0, filt1, filt2, filt3); ++ filter_vec = __lsx_vld(filter_y, 0); ++ filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); ++ LSX_DUP4_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filter_vec, 2, ++ filter_vec, 3, filt_h0, filt_h1, filt_h2, filt_h3); ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ ++ for (cnt = width >> 3; cnt--;) { ++ src_tmp = src; ++ dst_tmp = dst; ++ ++ LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, src0, ++ src1, src2, src3); ++ src_tmp += src_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); ++ src6 = __lsx_vld(src_tmp + src_stride_2x, 0); ++ src_tmp += src_stride_3x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, ++ mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, ++ mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, ++ mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, ++ mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); ++ dst0 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, filt2, ++ filt3); ++ dst1 = __lsx_hevc_filt_8tap_h(vec4, vec5, vec6, vec7, filt0, filt1, filt2, ++ filt3); ++ dst2 = __lsx_hevc_filt_8tap_h(vec8, vec9, vec10, vec11, filt0, filt1, filt2, ++ filt3); ++ dst3 = __lsx_hevc_filt_8tap_h(vec12, vec13, vec14, vec15, filt0, filt1, ++ filt2, filt3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, ++ mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, src5, ++ mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, src6, ++ mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); ++ dst4 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, filt2, ++ filt3); ++ dst5 = __lsx_hevc_filt_8tap_h(vec4, vec5, vec6, vec7, filt0, filt1, filt2, ++ filt3); ++ dst6 = __lsx_hevc_filt_8tap_h(vec8, vec9, vec10, vec11, filt0, filt1, filt2, ++ filt3); ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst2, dst1, ++ dst10_r, dst32_r, dst54_r, dst21_r); ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst4, dst3, dst6, dst5, dst43_r, dst65_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst2, dst1, ++ dst10_l, dst32_l, dst54_l, dst21_l); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst4, dst3, dst6, dst5, dst43_l, dst65_l); ++ ++ for (loop_cnt = height >> 1; loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src7, src8); ++ src_tmp += src_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src7, src8); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, src7, ++ src7, mask2, src7, src7, mask3, vec0, vec1, vec2, vec3); ++ dst7 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, ++ filt2, filt3); ++ dst76_r = __lsx_vilvl_h(dst7, dst6); ++ dst76_l = __lsx_vilvh_h(dst7, dst6); ++ dst0_r = __lsx_hevc_filt_8tap_w(dst10_r, dst32_r, dst54_r, dst76_r, ++ filt_h0, filt_h1, filt_h2, filt_h3); ++ dst0_l = __lsx_hevc_filt_8tap_w(dst10_l, dst32_l, dst54_l, dst76_l, ++ filt_h0, filt_h1, filt_h2, filt_h3); ++ LSX_DUP2_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst0_r, dst0_l); ++ ++ /* row 8 */ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src8, src8, mask0, src8, src8, mask1, src8, ++ src8, mask2, src8, src8, mask3, vec0, vec1, vec2, vec3); ++ dst8 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, ++ filt2, filt3); ++ ++ dst87_r = __lsx_vilvl_h(dst8, dst7); ++ dst87_l = __lsx_vilvh_h(dst8, dst7); ++ dst1_r = __lsx_hevc_filt_8tap_w(dst21_r, dst43_r, dst65_r, dst87_r, ++ filt_h0, filt_h1, filt_h2, filt_h3); ++ dst1_l = __lsx_hevc_filt_8tap_w(dst21_l, dst43_l, dst65_l, dst87_l, ++ filt_h0, filt_h1, filt_h2, filt_h3); ++ LSX_DUP2_ARG2(__lsx_vsrai_w, dst1_r, 6, dst1_l, 6, dst1_r, dst1_l); ++ ++ LSX_DUP2_ARG2(__lsx_vmul_w, dst0_r, weight_vec, dst0_l, weight_vec, dst0_r, ++ dst0_l); ++ LSX_DUP2_ARG2(__lsx_vmul_w, dst1_r, weight_vec, dst1_l, weight_vec, dst1_r, ++ dst1_l); ++ LSX_DUP4_ARG2(__lsx_vsrar_w, dst0_r, rnd_vec, dst1_r, rnd_vec, dst0_l, ++ rnd_vec, dst1_l, rnd_vec, dst0_r, dst1_r, dst0_l, dst1_l); ++ ++ LSX_DUP2_ARG2(__lsx_vadd_w, dst0_r, offset_vec, dst0_l, offset_vec, dst0_r, ++ dst0_l); ++ LSX_DUP2_ARG2(__lsx_vadd_w, dst1_r, offset_vec, dst1_l, offset_vec, dst1_r, ++ dst1_l); ++ LSX_DUP4_ARG1(__lsx_clamp255_w, dst0_r, dst1_r, dst0_l, dst1_l, dst0_r, ++ dst1_r, dst0_l, dst1_l); ++ LSX_DUP2_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); ++ dst0_r = __lsx_vpickev_b(dst1_r, dst0_r); ++ ++ __lsx_vstelm_d(dst0_r, dst_tmp, 0, 0); ++ __lsx_vstelm_d(dst0_r, dst_tmp + dst_stride, 0, 1); ++ dst_tmp += dst_stride_2x; ++ ++ dst10_r = dst32_r; ++ dst32_r = dst54_r; ++ dst54_r = dst76_r; ++ dst10_l = dst32_l; ++ dst32_l = dst54_l; ++ dst54_l = dst76_l; ++ dst21_r = dst43_r; ++ dst43_r = dst65_r; ++ dst65_r = dst87_r; ++ dst21_l = dst43_l; ++ dst43_l = dst65_l; ++ dst65_l = dst87_l; ++ dst6 = dst8; ++ } ++ ++ src += 8; ++ dst += 8; ++ } ++} ++ ++static void hevc_hv_uniwgt_8t_8w_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height, ++ int32_t weight, ++ int32_t offset, ++ int32_t rnd_val) ++{ ++ hevc_hv_uniwgt_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, weight, ++ offset, rnd_val, 8); ++} ++ ++static void hevc_hv_uniwgt_8t_16w_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height, ++ int32_t weight, ++ int32_t offset, ++ int32_t rnd_val) ++{ ++ hevc_hv_uniwgt_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, weight, ++ offset, rnd_val, 16); ++} ++ ++static void hevc_hv_uniwgt_8t_24w_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height, ++ int32_t weight, ++ int32_t offset, ++ int32_t rnd_val) ++{ ++ hevc_hv_uniwgt_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, weight, ++ offset, rnd_val, 24); ++} ++ ++static void hevc_hv_uniwgt_8t_32w_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height, ++ int32_t weight, ++ int32_t offset, ++ int32_t rnd_val) ++{ ++ hevc_hv_uniwgt_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, weight, ++ offset, rnd_val, 32); ++} ++ ++static void hevc_hv_uniwgt_8t_48w_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height, ++ int32_t weight, ++ int32_t offset, ++ int32_t rnd_val) ++{ ++ hevc_hv_uniwgt_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, weight, ++ offset, rnd_val, 48); ++} ++ ++static void hevc_hv_uniwgt_8t_64w_lsx(uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height, ++ int32_t weight, ++ int32_t offset, ++ int32_t rnd_val) ++{ ++ hevc_hv_uniwgt_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, weight, ++ offset, rnd_val, 64); ++} ++ ++ ++#define UNI_W_MC_HV(PEL, WIDTH, TAP) \ ++void ff_hevc_put_hevc_uni_w_##PEL##_hv##WIDTH##_8_lsx(uint8_t *dst, \ ++ ptrdiff_t dst_stride, \ ++ uint8_t *src, \ ++ ptrdiff_t src_stride, \ ++ int height, \ ++ int denom, \ ++ int weight, \ ++ int offset, \ ++ intptr_t mx, \ ++ intptr_t my, \ ++ int width) \ ++{ \ ++ const int8_t *filter_x = ff_hevc_##PEL##_filters[mx - 1]; \ ++ const int8_t *filter_y = ff_hevc_##PEL##_filters[my - 1]; \ ++ int shift = denom + 14 - 8; \ ++ \ ++ hevc_hv_uniwgt_##TAP##t_##WIDTH##w_lsx(src, src_stride, dst, dst_stride, \ ++ filter_x, filter_y, height, \ ++ weight, offset, shift); \ ++} ++ ++UNI_W_MC_HV(qpel, 8, 8); ++UNI_W_MC_HV(qpel, 16, 8); ++UNI_W_MC_HV(qpel, 24, 8); ++UNI_W_MC_HV(qpel, 32, 8); ++UNI_W_MC_HV(qpel, 48, 8); ++UNI_W_MC_HV(qpel, 64, 8); ++ ++#undef UNI_W_MC_HV +diff --git a/libavcodec/loongarch/hevcdsp_init_loongarch.c b/libavcodec/loongarch/hevcdsp_init_loongarch.c +new file mode 100644 +index 0000000000..94e650d997 +--- /dev/null ++++ b/libavcodec/loongarch/hevcdsp_init_loongarch.c +@@ -0,0 +1,189 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Lu Wang ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/loongarch/cpu.h" ++#include "libavcodec/loongarch/hevcdsp_lsx.h" ++ ++void ff_hevc_dsp_init_loongarch(HEVCDSPContext *c, const int bit_depth) ++{ ++ int cpu_flags = av_get_cpu_flags(); ++ ++ if (have_lsx(cpu_flags)) { ++ if (bit_depth == 8) { ++ c->put_hevc_qpel[1][0][0] = ff_hevc_put_hevc_pel_pixels4_8_lsx; ++ c->put_hevc_qpel[2][0][0] = ff_hevc_put_hevc_pel_pixels6_8_lsx; ++ c->put_hevc_qpel[3][0][0] = ff_hevc_put_hevc_pel_pixels8_8_lsx; ++ c->put_hevc_qpel[4][0][0] = ff_hevc_put_hevc_pel_pixels12_8_lsx; ++ c->put_hevc_qpel[5][0][0] = ff_hevc_put_hevc_pel_pixels16_8_lsx; ++ c->put_hevc_qpel[6][0][0] = ff_hevc_put_hevc_pel_pixels24_8_lsx; ++ c->put_hevc_qpel[7][0][0] = ff_hevc_put_hevc_pel_pixels32_8_lsx; ++ c->put_hevc_qpel[8][0][0] = ff_hevc_put_hevc_pel_pixels48_8_lsx; ++ c->put_hevc_qpel[9][0][0] = ff_hevc_put_hevc_pel_pixels64_8_lsx; ++ ++ c->put_hevc_epel[1][0][0] = ff_hevc_put_hevc_pel_pixels4_8_lsx; ++ c->put_hevc_epel[2][0][0] = ff_hevc_put_hevc_pel_pixels6_8_lsx; ++ c->put_hevc_epel[3][0][0] = ff_hevc_put_hevc_pel_pixels8_8_lsx; ++ c->put_hevc_epel[4][0][0] = ff_hevc_put_hevc_pel_pixels12_8_lsx; ++ c->put_hevc_epel[5][0][0] = ff_hevc_put_hevc_pel_pixels16_8_lsx; ++ c->put_hevc_epel[6][0][0] = ff_hevc_put_hevc_pel_pixels24_8_lsx; ++ c->put_hevc_epel[7][0][0] = ff_hevc_put_hevc_pel_pixels32_8_lsx; ++ ++ c->put_hevc_qpel[1][0][1] = ff_hevc_put_hevc_qpel_h4_8_lsx; ++ c->put_hevc_qpel[3][0][1] = ff_hevc_put_hevc_qpel_h8_8_lsx; ++ c->put_hevc_qpel[4][0][1] = ff_hevc_put_hevc_qpel_h12_8_lsx; ++ c->put_hevc_qpel[5][0][1] = ff_hevc_put_hevc_qpel_h16_8_lsx; ++ c->put_hevc_qpel[6][0][1] = ff_hevc_put_hevc_qpel_h24_8_lsx; ++ c->put_hevc_qpel[7][0][1] = ff_hevc_put_hevc_qpel_h32_8_lsx; ++ c->put_hevc_qpel[8][0][1] = ff_hevc_put_hevc_qpel_h48_8_lsx; ++ c->put_hevc_qpel[9][0][1] = ff_hevc_put_hevc_qpel_h64_8_lsx; ++ ++ c->put_hevc_qpel[1][1][0] = ff_hevc_put_hevc_qpel_v4_8_lsx; ++ c->put_hevc_qpel[3][1][0] = ff_hevc_put_hevc_qpel_v8_8_lsx; ++ c->put_hevc_qpel[4][1][0] = ff_hevc_put_hevc_qpel_v12_8_lsx; ++ c->put_hevc_qpel[5][1][0] = ff_hevc_put_hevc_qpel_v16_8_lsx; ++ c->put_hevc_qpel[6][1][0] = ff_hevc_put_hevc_qpel_v24_8_lsx; ++ c->put_hevc_qpel[7][1][0] = ff_hevc_put_hevc_qpel_v32_8_lsx; ++ c->put_hevc_qpel[8][1][0] = ff_hevc_put_hevc_qpel_v48_8_lsx; ++ c->put_hevc_qpel[9][1][0] = ff_hevc_put_hevc_qpel_v64_8_lsx; ++ ++ c->put_hevc_qpel[1][1][1] = ff_hevc_put_hevc_qpel_hv4_8_lsx; ++ c->put_hevc_qpel[3][1][1] = ff_hevc_put_hevc_qpel_hv8_8_lsx; ++ c->put_hevc_qpel[4][1][1] = ff_hevc_put_hevc_qpel_hv12_8_lsx; ++ c->put_hevc_qpel[5][1][1] = ff_hevc_put_hevc_qpel_hv16_8_lsx; ++ c->put_hevc_qpel[6][1][1] = ff_hevc_put_hevc_qpel_hv24_8_lsx; ++ c->put_hevc_qpel[7][1][1] = ff_hevc_put_hevc_qpel_hv32_8_lsx; ++ c->put_hevc_qpel[8][1][1] = ff_hevc_put_hevc_qpel_hv48_8_lsx; ++ c->put_hevc_qpel[9][1][1] = ff_hevc_put_hevc_qpel_hv64_8_lsx; ++ ++ c->put_hevc_epel[7][0][1] = ff_hevc_put_hevc_epel_h32_8_lsx; ++ ++ c->put_hevc_epel[5][1][0] = ff_hevc_put_hevc_epel_v16_8_lsx; ++ c->put_hevc_epel[6][1][0] = ff_hevc_put_hevc_epel_v24_8_lsx; ++ c->put_hevc_epel[7][1][0] = ff_hevc_put_hevc_epel_v32_8_lsx; ++ ++ c->put_hevc_epel[3][1][1] = ff_hevc_put_hevc_epel_hv8_8_lsx; ++ c->put_hevc_epel[4][1][1] = ff_hevc_put_hevc_epel_hv12_8_lsx; ++ c->put_hevc_epel[5][1][1] = ff_hevc_put_hevc_epel_hv16_8_lsx; ++ c->put_hevc_epel[6][1][1] = ff_hevc_put_hevc_epel_hv24_8_lsx; ++ c->put_hevc_epel[7][1][1] = ff_hevc_put_hevc_epel_hv32_8_lsx; ++ ++ c->put_hevc_qpel_uni[9][0][1] = ff_hevc_put_hevc_uni_qpel_h64_8_lsx; ++ ++ c->put_hevc_qpel_uni[6][1][0] = ff_hevc_put_hevc_uni_qpel_v24_8_lsx; ++ c->put_hevc_qpel_uni[7][1][0] = ff_hevc_put_hevc_uni_qpel_v32_8_lsx; ++ c->put_hevc_qpel_uni[8][1][0] = ff_hevc_put_hevc_uni_qpel_v48_8_lsx; ++ c->put_hevc_qpel_uni[9][1][0] = ff_hevc_put_hevc_uni_qpel_v64_8_lsx; ++ ++ c->put_hevc_qpel_uni[3][1][1] = ff_hevc_put_hevc_uni_qpel_hv8_8_lsx; ++ c->put_hevc_qpel_uni[5][1][1] = ff_hevc_put_hevc_uni_qpel_hv16_8_lsx; ++ c->put_hevc_qpel_uni[6][1][1] = ff_hevc_put_hevc_uni_qpel_hv24_8_lsx; ++ c->put_hevc_qpel_uni[7][1][1] = ff_hevc_put_hevc_uni_qpel_hv32_8_lsx; ++ c->put_hevc_qpel_uni[8][1][1] = ff_hevc_put_hevc_uni_qpel_hv48_8_lsx; ++ c->put_hevc_qpel_uni[9][1][1] = ff_hevc_put_hevc_uni_qpel_hv64_8_lsx; ++ ++ c->put_hevc_epel_uni[6][1][0] = ff_hevc_put_hevc_uni_epel_v24_8_lsx; ++ c->put_hevc_epel_uni[7][1][0] = ff_hevc_put_hevc_uni_epel_v32_8_lsx; ++ ++ c->put_hevc_epel_uni[3][1][1] = ff_hevc_put_hevc_uni_epel_hv8_8_lsx; ++ c->put_hevc_epel_uni[4][1][1] = ff_hevc_put_hevc_uni_epel_hv12_8_lsx; ++ c->put_hevc_epel_uni[5][1][1] = ff_hevc_put_hevc_uni_epel_hv16_8_lsx; ++ c->put_hevc_epel_uni[6][1][1] = ff_hevc_put_hevc_uni_epel_hv24_8_lsx; ++ c->put_hevc_epel_uni[7][1][1] = ff_hevc_put_hevc_uni_epel_hv32_8_lsx; ++ ++ c->put_hevc_qpel_uni_w[3][1][1] = ff_hevc_put_hevc_uni_w_qpel_hv8_8_lsx; ++ c->put_hevc_qpel_uni_w[5][1][1] = ff_hevc_put_hevc_uni_w_qpel_hv16_8_lsx; ++ c->put_hevc_qpel_uni_w[6][1][1] = ff_hevc_put_hevc_uni_w_qpel_hv24_8_lsx; ++ c->put_hevc_qpel_uni_w[7][1][1] = ff_hevc_put_hevc_uni_w_qpel_hv32_8_lsx; ++ c->put_hevc_qpel_uni_w[8][1][1] = ff_hevc_put_hevc_uni_w_qpel_hv48_8_lsx; ++ c->put_hevc_qpel_uni_w[9][1][1] = ff_hevc_put_hevc_uni_w_qpel_hv64_8_lsx; ++ ++ c->put_hevc_qpel_bi[1][0][0] = ff_hevc_put_hevc_bi_pel_pixels4_8_lsx; ++ c->put_hevc_qpel_bi[3][0][0] = ff_hevc_put_hevc_bi_pel_pixels8_8_lsx; ++ c->put_hevc_qpel_bi[4][0][0] = ff_hevc_put_hevc_bi_pel_pixels12_8_lsx; ++ c->put_hevc_qpel_bi[5][0][0] = ff_hevc_put_hevc_bi_pel_pixels16_8_lsx; ++ c->put_hevc_qpel_bi[6][0][0] = ff_hevc_put_hevc_bi_pel_pixels24_8_lsx; ++ c->put_hevc_qpel_bi[7][0][0] = ff_hevc_put_hevc_bi_pel_pixels32_8_lsx; ++ c->put_hevc_qpel_bi[8][0][0] = ff_hevc_put_hevc_bi_pel_pixels48_8_lsx; ++ c->put_hevc_qpel_bi[9][0][0] = ff_hevc_put_hevc_bi_pel_pixels64_8_lsx; ++ ++ c->put_hevc_epel_bi[1][0][0] = ff_hevc_put_hevc_bi_pel_pixels4_8_lsx; ++ c->put_hevc_epel_bi[2][0][0] = ff_hevc_put_hevc_bi_pel_pixels6_8_lsx; ++ c->put_hevc_epel_bi[3][0][0] = ff_hevc_put_hevc_bi_pel_pixels8_8_lsx; ++ c->put_hevc_epel_bi[4][0][0] = ff_hevc_put_hevc_bi_pel_pixels12_8_lsx; ++ c->put_hevc_epel_bi[5][0][0] = ff_hevc_put_hevc_bi_pel_pixels16_8_lsx; ++ c->put_hevc_epel_bi[6][0][0] = ff_hevc_put_hevc_bi_pel_pixels24_8_lsx; ++ c->put_hevc_epel_bi[7][0][0] = ff_hevc_put_hevc_bi_pel_pixels32_8_lsx; ++ ++ c->put_hevc_qpel_bi[3][1][0] = ff_hevc_put_hevc_bi_qpel_v8_8_lsx; ++ c->put_hevc_qpel_bi[5][1][0] = ff_hevc_put_hevc_bi_qpel_v16_8_lsx; ++ c->put_hevc_qpel_bi[6][1][0] = ff_hevc_put_hevc_bi_qpel_v24_8_lsx; ++ c->put_hevc_qpel_bi[7][1][0] = ff_hevc_put_hevc_bi_qpel_v32_8_lsx; ++ c->put_hevc_qpel_bi[8][1][0] = ff_hevc_put_hevc_bi_qpel_v48_8_lsx; ++ c->put_hevc_qpel_bi[9][1][0] = ff_hevc_put_hevc_bi_qpel_v64_8_lsx; ++ ++ c->put_hevc_qpel_bi[3][1][1] = ff_hevc_put_hevc_bi_qpel_hv8_8_lsx; ++ c->put_hevc_qpel_bi[5][1][1] = ff_hevc_put_hevc_bi_qpel_hv16_8_lsx; ++ c->put_hevc_qpel_bi[6][1][1] = ff_hevc_put_hevc_bi_qpel_hv24_8_lsx; ++ c->put_hevc_qpel_bi[7][1][1] = ff_hevc_put_hevc_bi_qpel_hv32_8_lsx; ++ c->put_hevc_qpel_bi[8][1][1] = ff_hevc_put_hevc_bi_qpel_hv48_8_lsx; ++ c->put_hevc_qpel_bi[9][1][1] = ff_hevc_put_hevc_bi_qpel_hv64_8_lsx; ++ ++ c->put_hevc_qpel_bi[5][0][1] = ff_hevc_put_hevc_bi_qpel_h16_8_lsx; ++ c->put_hevc_qpel_bi[6][0][1] = ff_hevc_put_hevc_bi_qpel_h24_8_lsx; ++ c->put_hevc_qpel_bi[7][0][1] = ff_hevc_put_hevc_bi_qpel_h32_8_lsx; ++ c->put_hevc_qpel_bi[8][0][1] = ff_hevc_put_hevc_bi_qpel_h48_8_lsx; ++ c->put_hevc_qpel_bi[9][0][1] = ff_hevc_put_hevc_bi_qpel_h64_8_lsx; ++ ++ c->put_hevc_epel_bi[6][0][1] = ff_hevc_put_hevc_bi_epel_h24_8_lsx; ++ c->put_hevc_epel_bi[7][0][1] = ff_hevc_put_hevc_bi_epel_h32_8_lsx; ++ ++ c->put_hevc_epel_bi[4][1][0] = ff_hevc_put_hevc_bi_epel_v12_8_lsx; ++ c->put_hevc_epel_bi[5][1][0] = ff_hevc_put_hevc_bi_epel_v16_8_lsx; ++ c->put_hevc_epel_bi[6][1][0] = ff_hevc_put_hevc_bi_epel_v24_8_lsx; ++ c->put_hevc_epel_bi[7][1][0] = ff_hevc_put_hevc_bi_epel_v32_8_lsx; ++ ++ c->put_hevc_epel_bi[2][1][1] = ff_hevc_put_hevc_bi_epel_hv6_8_lsx; ++ c->put_hevc_epel_bi[3][1][1] = ff_hevc_put_hevc_bi_epel_hv8_8_lsx; ++ c->put_hevc_epel_bi[5][1][1] = ff_hevc_put_hevc_bi_epel_hv16_8_lsx; ++ c->put_hevc_epel_bi[6][1][1] = ff_hevc_put_hevc_bi_epel_hv24_8_lsx; ++ c->put_hevc_epel_bi[7][1][1] = ff_hevc_put_hevc_bi_epel_hv32_8_lsx; ++ ++ c->sao_edge_filter[4] = ff_hevc_sao_edge_filter_8_lsx; ++ ++ c->hevc_h_loop_filter_luma = ff_hevc_loop_filter_luma_h_8_lsx; ++ c->hevc_v_loop_filter_luma = ff_hevc_loop_filter_luma_v_8_lsx; ++ ++ c->hevc_h_loop_filter_luma_c = ff_hevc_loop_filter_luma_h_8_lsx; ++ c->hevc_v_loop_filter_luma_c = ff_hevc_loop_filter_luma_v_8_lsx; ++ ++ c->hevc_h_loop_filter_chroma = ff_hevc_loop_filter_chroma_h_8_lsx; ++ c->hevc_v_loop_filter_chroma = ff_hevc_loop_filter_chroma_v_8_lsx; ++ ++ c->hevc_h_loop_filter_chroma_c = ff_hevc_loop_filter_chroma_h_8_lsx; ++ c->hevc_v_loop_filter_chroma_c = ff_hevc_loop_filter_chroma_v_8_lsx; ++ ++ c->idct[0] = ff_hevc_idct_4x4_lsx; ++ c->idct[1] = ff_hevc_idct_8x8_lsx; ++ c->idct[2] = ff_hevc_idct_16x16_lsx; ++ c->idct[3] = ff_hevc_idct_32x32_lsx; ++ } ++ } ++} +diff --git a/libavcodec/loongarch/hevcdsp_lsx.c b/libavcodec/loongarch/hevcdsp_lsx.c +new file mode 100644 +index 0000000000..9e2d9e29b4 +--- /dev/null ++++ b/libavcodec/loongarch/hevcdsp_lsx.c +@@ -0,0 +1,3338 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Lu Wang ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/loongarch/generic_macros_lsx.h" ++#include "hevcdsp_lsx.h" ++#include "hevc_macros_lsx.h" ++ ++static const uint8_t ff_hevc_mask_arr[16 * 2] __attribute__((aligned(0x40))) = { ++ /* 8 width cases */ ++ 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, ++ /* 4 width cases */ ++ 0, 1, 1, 2, 2, 3, 3, 4, 16, 17, 17, 18, 18, 19, 19, 20 ++}; ++ ++static void hevc_copy_4w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ int32_t height) ++{ ++ __m128i zero = {0}; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ ++ if (2 == height) { ++ __m128i src0, src1; ++ __m128i in0; ++ ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ src0 = __lsx_vilvl_w(src1, src0); ++ in0 = __lsx_vilvl_b(zero, src0); ++ in0 = __lsx_vslli_h(in0, 6); ++ __lsx_vstelm_d(in0, dst, 0, 0); ++ __lsx_vstelm_d(in0, dst + dst_stride, 0, 1); ++ } else if (4 == height) { ++ __m128i src0, src1, src2, src3; ++ __m128i in0, in1; ++ ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ LSX_DUP2_ARG2(__lsx_vilvl_w, src1, src0, src3, src2, src0, src1); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, in0, in1); ++ LSX_DUP2_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in0, in1); ++ __lsx_vstelm_d(in0, dst, 0, 0); ++ __lsx_vstelm_d(in0, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(in1, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(in1, dst + dst_stride_3x, 0, 1); ++ } else if (0 == (height & 0x07)) { ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i in0, in1, in2, in3; ++ uint32_t loop_cnt; ++ for (loop_cnt = (height >> 3); loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, ++ src + src_stride_2x, 0, src + src_stride_3x, 0, ++ src0, src1, src2, src3); ++ src += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0,src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src += src_stride_4x; ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_w, src1, src0, src3, src2, src5, src4, src7, src6, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in2, 6, in3, 6, in0, in1, ++ in2, in3); ++ ++ __lsx_vstelm_d(in0, dst, 0, 0); ++ __lsx_vstelm_d(in0, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(in1, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(in1, dst + dst_stride_3x, 0, 1); ++ dst += dst_stride_4x; ++ __lsx_vstelm_d(in2, dst, 0, 0); ++ __lsx_vstelm_d(in2, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(in3, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(in3, dst + dst_stride_3x, 0, 1); ++ dst += dst_stride_4x; ++ } ++ } ++} ++ ++static void hevc_copy_6w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ uint64_t out0_m, out1_m, out2_m, out3_m; ++ uint64_t out4_m, out5_m, out6_m, out7_m; ++ uint32_t out8_m, out9_m, out10_m, out11_m; ++ uint32_t out12_m, out13_m, out14_m, out15_m; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ ++ __m128i zero = {0}; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i in0, in1, in2, in3, in4, in5, in6, in7; ++ ++ for (loop_cnt = (height >> 3); loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src += src_stride_4x; ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in4, in5, in6, in7); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in2, 6, in3, 6, in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in4, 6, in5, 6, in6, 6, in7, 6, in4, in5, in6, in7); ++ ++ LSX_DUP4_ARG2(__lsx_vpickve2gr_du, in0, 0, in1, 0, in2, 0, in3, 0, out0_m, ++ out1_m, out2_m, out3_m); ++ LSX_DUP4_ARG2(__lsx_vpickve2gr_du, in4, 0, in5, 0, in6, 0, in7, 0, out4_m, ++ out5_m, out6_m, out7_m); ++ ++ LSX_DUP4_ARG2(__lsx_vpickve2gr_wu, in0, 2, in1, 2, in2, 2, in3, 2, out8_m, ++ out9_m, out10_m, out11_m); ++ LSX_DUP4_ARG2(__lsx_vpickve2gr_wu, in4, 2, in5, 2, in6, 2, in7, 2, out12_m, ++ out13_m, out14_m, out15_m); ++ ++ *(uint64_t *)dst = out0_m; ++ *(uint32_t *)(dst + 4) = out8_m; ++ dst += dst_stride; ++ *(uint64_t *)dst = out1_m; ++ *(uint32_t *)(dst + 4) = out9_m; ++ dst += dst_stride; ++ *(uint64_t *)dst = out2_m; ++ *(uint32_t *)(dst + 4) = out10_m; ++ dst += dst_stride; ++ *(uint64_t *)dst = out3_m; ++ *(uint32_t *)(dst + 4) = out11_m; ++ dst += dst_stride; ++ *(uint64_t *)dst = out4_m; ++ *(uint32_t *)(dst + 4) = out12_m; ++ dst += dst_stride; ++ *(uint64_t *)dst = out5_m; ++ *(uint32_t *)(dst + 4) = out13_m; ++ dst += dst_stride; ++ *(uint64_t *)dst = out6_m; ++ *(uint32_t *)(dst + 4) = out14_m; ++ dst += dst_stride; ++ *(uint64_t *)dst = out7_m; ++ *(uint32_t *)(dst + 4) = out15_m; ++ dst += dst_stride; ++ } ++} ++ ++static void hevc_copy_8w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ int32_t height) ++{ ++ __m128i zero = {0}; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ ++ if (2 == height) { ++ __m128i src0, src1; ++ __m128i in0, in1; ++ ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, in0, in1); ++ LSX_DUP2_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in0, in1); ++ __lsx_vst(in0, dst, 0); ++ __lsx_vst(in1, dst + dst_stride, 0); ++ } else if (4 == height) { ++ __m128i src0, src1, src2, src3; ++ __m128i in0, in1, in2, in3; ++ ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in2, 6, in3, 6, in0, in1, in2, in3); ++ __lsx_vst(in0, dst, 0); ++ __lsx_vst(in1, dst + dst_stride, 0); ++ __lsx_vst(in2, dst + dst_stride_2x, 0); ++ __lsx_vst(in3, dst + dst_stride_3x, 0); ++ } else if (6 == height) { ++ __m128i src0, src1, src2, src3, src4, src5; ++ __m128i in0, in1, in2, in3, in4, in5; ++ ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, in0, ++ in1, in2, in3); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, in4, in5); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in2, 6, in3, 6, in0, in1, in2, in3); ++ LSX_DUP2_ARG2(__lsx_vslli_h, in4, 6, in5, 6, in4, in5); ++ __lsx_vst(in0, dst, 0); ++ __lsx_vst(in1, dst + dst_stride, 0); ++ __lsx_vst(in2, dst + dst_stride_2x, 0); ++ __lsx_vst(in3, dst + dst_stride_3x, 0); ++ __lsx_vst(in4, dst + dst_stride_4x, 0); ++ __lsx_vst(in5, dst + dst_stride_4x + dst_stride, 0); ++ } else if (0 == (height & 0x07)) { ++ uint32_t loop_cnt; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i in0, in1, in2, in3, in4, in5, in6, in7; ++ ++ for (loop_cnt = (height >> 3); loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, ++ src + src_stride_2x, 0, src + src_stride_3x, 0, src0, ++ src1, src2, src3); ++ src += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, ++ src + src_stride_2x, 0, src + src_stride_3x, 0, src4, ++ src5, src6, src7); ++ src += src_stride_4x; ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in4, in5, in6, in7); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in2, 6, in3, 6, in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in4, 6, in5, 6, in6, 6, in7, 6, in4, in5, in6, in7); ++ __lsx_vst(in0, dst, 0); ++ __lsx_vst(in1, dst + dst_stride, 0); ++ __lsx_vst(in2, dst + dst_stride_2x, 0); ++ __lsx_vst(in3, dst + dst_stride_3x, 0); ++ dst += dst_stride_4x; ++ __lsx_vst(in4, dst, 0); ++ __lsx_vst(in5, dst + dst_stride, 0); ++ __lsx_vst(in6, dst + dst_stride_2x, 0); ++ __lsx_vst(in7, dst + dst_stride_3x, 0); ++ dst += dst_stride_4x; ++ } ++ } ++} ++ ++static void hevc_copy_12w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ __m128i zero = {0}; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i in0, in1, in0_r, in1_r, in2_r, in3_r; ++ ++ for (loop_cnt = (height >> 3); loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src += src_stride_4x; ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_r, in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_w, src1, src0, src3, src2, src0, src1); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, in0, in1); ++ LSX_DUP2_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in0, in1); ++ __lsx_vst(in0_r, dst, 0); ++ __lsx_vst(in1_r, dst + dst_stride, 0); ++ __lsx_vst(in2_r, dst + dst_stride_2x, 0); ++ __lsx_vst(in3_r, dst + dst_stride_3x, 0); ++ __lsx_vstelm_d(in0, dst, 16, 0); ++ __lsx_vstelm_d(in0, dst + dst_stride, 16, 1); ++ __lsx_vstelm_d(in1, dst + dst_stride_2x, 16, 0); ++ __lsx_vstelm_d(in1, dst + dst_stride_3x, 16, 1); ++ dst += dst_stride_4x; ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in0_r, in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_w, src5, src4, src7, src6, src0, src1); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, in0, in1); ++ LSX_DUP2_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in0, in1); ++ __lsx_vst(in0_r, dst, 0); ++ __lsx_vst(in1_r, dst + dst_stride, 0); ++ __lsx_vst(in2_r, dst + dst_stride_2x, 0); ++ __lsx_vst(in3_r, dst + dst_stride_3x, 0); ++ __lsx_vstelm_d(in0, dst, 16, 0); ++ __lsx_vstelm_d(in0, dst + dst_stride, 16, 1); ++ __lsx_vstelm_d(in1, dst + dst_stride_2x, 16, 0); ++ __lsx_vstelm_d(in1, dst + dst_stride_3x, 16, 1); ++ dst += dst_stride_4x; ++ } ++} ++ ++static void hevc_copy_16w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ int32_t height) ++{ ++ __m128i zero = {0}; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ ++ if (4 == height) { ++ __m128i src0, src1, src2, src3; ++ __m128i in0_r, in1_r, in2_r, in3_r; ++ __m128i in0_l, in1_l, in2_l, in3_l; ++ ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_r, in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_l, in1_l, in2_l, in3_l); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); ++ __lsx_vst(in0_r, dst, 0); ++ __lsx_vst(in1_r, dst + dst_stride, 0); ++ __lsx_vst(in2_r, dst + dst_stride_2x, 0); ++ __lsx_vst(in3_r, dst + dst_stride_3x, 0); ++ __lsx_vst(in0_l, dst, 16); ++ __lsx_vst(in1_l, dst + dst_stride, 16); ++ __lsx_vst(in2_l, dst + dst_stride_2x, 16); ++ __lsx_vst(in3_l, dst + dst_stride_3x, 16); ++ } else if (12 == height) { ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i src8, src9, src10, src11; ++ __m128i in0_r, in1_r, in2_r, in3_r; ++ __m128i in0_l, in1_l, in2_l, in3_l; ++ ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src8, src9, src10, src11); ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_r, in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_l, in1_l, in2_l, in3_l); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); ++ __lsx_vst(in0_r, dst, 0); ++ __lsx_vst(in1_r, dst + dst_stride, 0); ++ __lsx_vst(in2_r, dst + dst_stride_2x, 0); ++ __lsx_vst(in3_r, dst + dst_stride_3x, 0); ++ __lsx_vst(in0_l, dst, 16); ++ __lsx_vst(in1_l, dst + dst_stride, 16); ++ __lsx_vst(in2_l, dst + dst_stride_2x, 16); ++ __lsx_vst(in3_l, dst + dst_stride_3x, 16); ++ dst += dst_stride_4x; ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in0_r, in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in0_l, in1_l, in2_l, in3_l); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); ++ __lsx_vst(in0_r, dst, 0); ++ __lsx_vst(in1_r, dst + dst_stride, 0); ++ __lsx_vst(in2_r, dst + dst_stride_2x, 0); ++ __lsx_vst(in3_r, dst + dst_stride_3x, 0); ++ __lsx_vst(in0_l, dst, 16); ++ __lsx_vst(in1_l, dst + dst_stride, 16); ++ __lsx_vst(in2_l, dst + dst_stride_2x, 16); ++ __lsx_vst(in3_l, dst + dst_stride_3x, 16); ++ dst += dst_stride_4x; ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src8, zero, src9, zero, src10, zero, src11, ++ in0_r, in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src8, zero, src9, zero, src10, zero, src11, ++ in0_l, in1_l, in2_l, in3_l); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); ++ __lsx_vst(in0_r, dst, 0); ++ __lsx_vst(in1_r, dst + dst_stride, 0); ++ __lsx_vst(in2_r, dst + dst_stride_2x, 0); ++ __lsx_vst(in3_r, dst + dst_stride_3x, 0); ++ __lsx_vst(in0_l, dst, 16); ++ __lsx_vst(in1_l, dst + dst_stride, 16); ++ __lsx_vst(in2_l, dst + dst_stride_2x, 16); ++ __lsx_vst(in3_l, dst + dst_stride_3x, 16); ++ } else if (0 == (height & 0x07)) { ++ uint32_t loop_cnt; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i in0_r, in1_r, in2_r, in3_r, in0_l, in1_l, in2_l, in3_l; ++ ++ for (loop_cnt = (height >> 3); loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, ++ src + src_stride_2x, 0, src + src_stride_3x, 0, src0, ++ src1, src2, src3); ++ src += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, ++ src + src_stride_2x, 0, src + src_stride_3x, 0, src4, ++ src5, src6, src7); ++ src += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_r, in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_l, in1_l, in2_l, in3_l); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); ++ __lsx_vst(in0_r, dst, 0); ++ __lsx_vst(in1_r, dst + dst_stride, 0); ++ __lsx_vst(in2_r, dst + dst_stride_2x, 0); ++ __lsx_vst(in3_r, dst + dst_stride_3x, 0); ++ __lsx_vst(in0_l, dst, 16); ++ __lsx_vst(in1_l, dst + dst_stride, 16); ++ __lsx_vst(in2_l, dst + dst_stride_2x, 16); ++ __lsx_vst(in3_l, dst + dst_stride_3x, 16); ++ dst += dst_stride_4x; ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in0_r, in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in0_l, in1_l, in2_l, in3_l); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); ++ __lsx_vst(in0_r, dst, 0); ++ __lsx_vst(in1_r, dst + dst_stride, 0); ++ __lsx_vst(in2_r, dst + dst_stride_2x, 0); ++ __lsx_vst(in3_r, dst + dst_stride_3x, 0); ++ __lsx_vst(in0_l, dst, 16); ++ __lsx_vst(in1_l, dst + dst_stride, 16); ++ __lsx_vst(in2_l, dst + dst_stride_2x, 16); ++ __lsx_vst(in3_l, dst + dst_stride_3x, 16); ++ dst += dst_stride_4x; ++ } ++ } ++} ++ ++static void hevc_copy_24w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ __m128i zero = {0}; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i in0_r, in1_r, in2_r, in3_r, in0_l, in1_l, in2_l, in3_l; ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src + src_stride_2x, ++ 16, src + src_stride_3x, 16, src4, src5, src6, src7); ++ src += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_r, in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_l, in1_l, in2_l, in3_l); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); ++ __lsx_vst(in0_r, dst, 0); ++ __lsx_vst(in1_r, dst + dst_stride, 0); ++ __lsx_vst(in2_r, dst + dst_stride_2x, 0); ++ __lsx_vst(in3_r, dst + dst_stride_3x, 0); ++ __lsx_vst(in0_l, dst, 16); ++ __lsx_vst(in1_l, dst + dst_stride, 16); ++ __lsx_vst(in2_l, dst + dst_stride_2x, 16); ++ __lsx_vst(in3_l, dst + dst_stride_3x, 16); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in0_r, in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ __lsx_vst(in0_r, dst, 32); ++ __lsx_vst(in1_r, dst + dst_stride, 32); ++ __lsx_vst(in2_r, dst + dst_stride_2x, 32); ++ __lsx_vst(in3_r, dst + dst_stride_3x, 32); ++ dst += dst_stride_4x; ++ } ++} ++ ++static void hevc_copy_32w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ __m128i zero = {0}; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i in0_r, in1_r, in2_r, in3_r, in0_l, in1_l, in2_l, in3_l; ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src2, src4, src6); ++ LSX_DUP4_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src + src_stride_2x, ++ 16, src + src_stride_3x, 16, src1, src3, src5, src7); ++ src += src_stride_4x; ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_r, in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_l, in1_l, in2_l, in3_l); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); ++ __lsx_vst(in0_r, dst, 0); ++ __lsx_vst(in0_l, dst, 16); ++ __lsx_vst(in1_r, dst, 32); ++ __lsx_vst(in1_l, dst, 48); ++ dst += dst_stride; ++ __lsx_vst(in2_r, dst, 0); ++ __lsx_vst(in2_l, dst, 16); ++ __lsx_vst(in3_r, dst, 32); ++ __lsx_vst(in3_l, dst, 48); ++ dst += dst_stride; ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in0_r, in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in0_l, in1_l, in2_l, in3_l); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); ++ __lsx_vst(in0_r, dst, 0); ++ __lsx_vst(in0_l, dst, 16); ++ __lsx_vst(in1_r, dst, 32); ++ __lsx_vst(in1_l, dst, 48); ++ dst += dst_stride; ++ __lsx_vst(in2_r, dst, 0); ++ __lsx_vst(in2_l, dst, 16); ++ __lsx_vst(in3_r, dst, 32); ++ __lsx_vst(in3_l, dst, 48); ++ dst += dst_stride; ++ } ++} ++ ++static void hevc_copy_48w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ __m128i zero = {0}; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i src8, src9, src10, src11; ++ __m128i in0_r, in1_r, in2_r, in3_r, in4_r, in5_r; ++ __m128i in0_l, in1_l, in2_l, in3_l, in4_l, in5_l; ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src1); ++ src2 = __lsx_vld(src, 32); ++ src += src_stride; ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src3, src4); ++ src5 = __lsx_vld(src, 32); ++ src += src_stride; ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src6, src7); ++ src8 = __lsx_vld(src, 32); ++ src += src_stride; ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src9, src10); ++ src11 = __lsx_vld(src, 32); ++ src += src_stride; ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_r, in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_l, in1_l, in2_l, in3_l); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, in4_r, in5_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, in4_l, in5_l); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in4_r, 6, in5_r, 6, in4_l, 6, in5_l, 6, in4_r, ++ in5_r, in4_l, in5_l); ++ __lsx_vst(in0_r, dst, 0); ++ __lsx_vst(in0_l, dst, 16); ++ __lsx_vst(in1_r, dst, 32); ++ __lsx_vst(in1_l, dst, 48); ++ __lsx_vst(in2_r, dst, 64); ++ __lsx_vst(in2_l, dst, 80); ++ dst += dst_stride; ++ __lsx_vst(in3_r, dst, 0); ++ __lsx_vst(in3_l, dst, 16); ++ __lsx_vst(in4_r, dst, 32); ++ __lsx_vst(in4_l, dst, 48); ++ __lsx_vst(in5_r, dst, 64); ++ __lsx_vst(in5_l, dst, 80); ++ dst += dst_stride; ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src6, zero, src7, zero, src8, zero, src9, ++ in0_r, in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src6, zero, src7, zero, src8, zero, src9, ++ in0_l, in1_l, in2_l, in3_l); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, zero, src10, zero, src11, in4_r, in5_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, zero, src10, zero, src11, in4_l, in5_l); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in4_r, 6, in5_r, 6, in4_l, 6, in5_l, 6, in4_r, ++ in5_r, in4_l, in5_l); ++ __lsx_vst(in0_r, dst, 0); ++ __lsx_vst(in0_l, dst, 16); ++ __lsx_vst(in1_r, dst, 32); ++ __lsx_vst(in1_l, dst, 48); ++ __lsx_vst(in2_r, dst, 64); ++ __lsx_vst(in2_l, dst, 80); ++ dst += dst_stride; ++ __lsx_vst(in3_r, dst, 0); ++ __lsx_vst(in3_l, dst, 16); ++ __lsx_vst(in4_r, dst, 32); ++ __lsx_vst(in4_l, dst, 48); ++ __lsx_vst(in5_r, dst, 64); ++ __lsx_vst(in5_l, dst, 80); ++ dst += dst_stride; ++ } ++} ++ ++static void hevc_copy_64w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ __m128i zero = {0}; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i in0_r, in1_r, in2_r, in3_r, in0_l, in1_l, in2_l, in3_l; ++ ++ ++ for (loop_cnt = (height >> 1); loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src0, src1, src2, ++ src3); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src4, src5, src6, ++ src7); ++ src += src_stride; ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_r, in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_l, in1_l, in2_l, in3_l); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); ++ __lsx_vst(in0_r, dst, 0); ++ __lsx_vst(in0_l, dst, 16); ++ __lsx_vst(in1_r, dst, 32); ++ __lsx_vst(in1_l, dst, 48); ++ __lsx_vst(in2_r, dst, 64); ++ __lsx_vst(in2_l, dst, 80); ++ __lsx_vst(in3_r, dst, 96); ++ __lsx_vst(in3_l, dst, 112); ++ dst += dst_stride; ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in0_r, in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in0_l, in1_l, in2_l, in3_l); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); ++ __lsx_vst(in0_r, dst, 0); ++ __lsx_vst(in0_l, dst, 16); ++ __lsx_vst(in1_r, dst, 32); ++ __lsx_vst(in1_l, dst, 48); ++ __lsx_vst(in2_r, dst, 64); ++ __lsx_vst(in2_l, dst, 80); ++ __lsx_vst(in3_r, dst, 96); ++ __lsx_vst(in3_l, dst, 112); ++ dst += dst_stride; ++ } ++} ++ ++static void hevc_hz_8t_4w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ uint32_t loop_cnt; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i filt0, filt1, filt2, filt3; ++ __m128i mask1, mask2, mask3; ++ __m128i vec0, vec1, vec2, vec3; ++ __m128i dst0, dst1, dst2, dst3; ++ __m128i const_vec; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 16); ++ ++ src -= 3; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); ++ ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ ++ for (loop_cnt = (height >> 3); loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src6, 128, src7, 128, ++ src4, src5, src6, src7); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src0, mask0, src1, src0, mask1, src1, src0, ++ mask2, src1, src0, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, ++ vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src2, mask0, src3, src2, mask1, src3, src2, ++ mask2, src3, src2, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst1, vec1, filt1, dst1, ++ vec2, filt2, dst1, vec3, filt3, dst1, dst1, dst1, dst1); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src5, src4, mask0, src5, src4, mask1, src5, src4, ++ mask2, src5, src4, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst2, vec1, filt1, dst2, ++ vec2, filt2, dst2, vec3, filt3, dst2, dst2, dst2, dst2); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src7, src6, mask0, src7, src6, mask1, src7, src6, ++ mask2, src7, src6, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, dst3, ++ vec2, filt2, dst3, vec3, filt3, dst3, dst3, dst3, dst3); ++ ++ __lsx_vstelm_d(dst0, dst, 0, 0); ++ __lsx_vstelm_d(dst0, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(dst1, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(dst1, dst + dst_stride_3x, 0, 1); ++ dst += dst_stride_4x; ++ __lsx_vstelm_d(dst2, dst, 0, 0); ++ __lsx_vstelm_d(dst2, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(dst3, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(dst3, dst + dst_stride_3x, 0, 1); ++ dst += dst_stride_4x; ++ } ++} ++ ++static void hevc_hz_8t_8w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ uint32_t loop_cnt; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ __m128i src0, src1, src2, src3; ++ __m128i filt0, filt1, filt2, filt3; ++ __m128i mask1, mask2, mask3; ++ __m128i vec0, vec1, vec2, vec3; ++ __m128i dst0, dst1, dst2, dst3; ++ __m128i const_vec; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ ++ src -= 3; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); ++ ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, ++ mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, ++ vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, ++ mask2, src1, src1, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst1, vec1, filt1, dst1, ++ vec2, filt2, dst1, vec3, filt3, dst1, dst1, dst1, dst1); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, ++ mask2, src2, src2, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst2, vec1, filt1, dst2, ++ vec2, filt2, dst2, vec3, filt3, dst2, dst2, dst2, dst2); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, ++ mask2, src3, src3, mask3, vec0, vec1, vec2, vec3); ++ dst3 = const_vec; ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst3, vec0, filt0, dst3, vec1, filt1, dst3, ++ vec2, filt2, dst3, vec3, filt3, dst3, dst3, dst3, dst3); ++ ++ __lsx_vst(dst0, dst, 0); ++ __lsx_vst(dst1, dst + dst_stride, 0); ++ __lsx_vst(dst2, dst + dst_stride_2x, 0); ++ __lsx_vst(dst3, dst + dst_stride_3x, 0); ++ dst += dst_stride_4x; ++ } ++} ++ ++static void hevc_hz_8t_12w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ uint32_t loop_cnt; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i mask0, mask1, mask2, mask3, mask4, mask5, mask6, mask7; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5; ++ __m128i filt0, filt1, filt2, filt3, dst0, dst1, dst2, dst3, dst4, dst5; ++ __m128i const_vec; ++ ++ src -= 3; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); ++ ++ mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ mask4 = __lsx_vld(ff_hevc_mask_arr, 16); ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask4, 2, mask4, 4, mask5, mask6); ++ mask7 = __lsx_vaddi_bu(mask4, 6); ++ ++ for (loop_cnt = 4; loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vld, src, 8, src + src_stride, 8, src + src_stride_2x, 8, ++ src + src_stride_3x, 8, src4, src5, src6, src7); ++ src += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src6, 128, src7, 128, src4, ++ src5, src6, src7); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src4, mask4, src7, src6, mask4, vec4, vec5); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, ++ dst3); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, const_vec, vec5, filt0, ++ dst4, dst5); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src4, mask5, src7, src6, mask5, vec4, vec5); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, dst4, vec4, filt1, dst5, vec5, filt1, dst4, dst5); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src4, mask6, src7, src6, mask6, vec4, vec5); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, ++ vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, dst4, vec4, filt2, dst5, vec5, filt2, dst4, dst5); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src4, mask7, src7, src6, mask7, vec4, vec5); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, ++ vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, dst4, vec4, filt3, dst5, vec5, filt3, dst4, dst5); ++ ++ __lsx_vst(dst0, dst, 0); ++ __lsx_vst(dst1, dst + dst_stride, 0); ++ __lsx_vst(dst2, dst + dst_stride_2x, 0); ++ __lsx_vst(dst3, dst + dst_stride_3x, 0); ++ ++ __lsx_vstelm_d(dst4, dst, 16, 0); ++ __lsx_vstelm_d(dst4, dst + dst_stride, 16, 1); ++ __lsx_vstelm_d(dst5, dst + dst_stride_2x, 16, 0); ++ __lsx_vstelm_d(dst5, dst + dst_stride_3x, 16, 1); ++ dst += dst_stride_4x; ++ } ++ ++} ++ ++static void hevc_hz_8t_16w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ uint32_t loop_cnt; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ __m128i src0, src1, src2, src3; ++ __m128i filt0, filt1, filt2, filt3; ++ __m128i mask1, mask2, mask3; ++ __m128i vec0, vec1, vec2, vec3; ++ __m128i dst0, dst1, dst2, dst3; ++ __m128i const_vec; ++ __m128i mask0; ++ ++ src -= 3; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, ++ filter, 6, filt0, filt1, filt2, filt3); ++ ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ ++ for (loop_cnt = (height >> 1); loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src2); ++ LSX_DUP2_ARG2(__lsx_vld, src, 8, src + src_stride, 8, src1, src3); ++ src += src_stride_2x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, ++ dst3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, ++ vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, ++ vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ ++ __lsx_vst(dst0, dst, 0); ++ __lsx_vst(dst2, dst + dst_stride, 0); ++ __lsx_vst(dst1, dst, 16); ++ __lsx_vst(dst3, dst + dst_stride, 16); ++ dst += dst_stride_2x; ++ } ++} ++ ++static void hevc_hz_8t_24w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ uint32_t loop_cnt; ++ __m128i src0, src1, src2, src3; ++ __m128i filt0, filt1, filt2, filt3; ++ __m128i mask1, mask2, mask3, mask4, mask5, mask6, mask7; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5; ++ __m128i const_vec; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ ++ src -= 3; ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); ++ ++ LSX_DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, ++ mask3, mask4); ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); ++ mask7 = __lsx_vaddi_bu(mask0, 14); ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ for (loop_cnt = (height >> 1); loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src1); ++ src += src_stride; ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src2, src3); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, src1, src1, ++ mask0, src2, src2, mask0, vec0, vec1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src2, mask4, src3, src3, mask0, vec4, vec5); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, ++ dst3); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, const_vec, vec5, filt0, ++ dst4, dst5); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, src1, src1, ++ mask1, src2, src2, mask1, vec0, vec1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src2, mask5, src3, src3, mask1, vec4, vec5); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, dst4, vec4, filt1, dst5, vec5, filt1, dst4, dst5); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, src1, src1, ++ mask2, src2, src2, mask2, vec0, vec1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src2, mask6, src3, src3, mask2, vec4, vec5); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, ++ vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, dst4, vec4, filt2, dst5, vec5, filt2, dst4, dst5); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, src1, src1, ++ mask3, src2, src2, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src2, mask7, src3, src3, mask3, vec4, vec5); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, ++ vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, dst4, vec4, filt3, dst5, vec5, filt3, dst4, dst5); ++ ++ __lsx_vst(dst0, dst, 0); ++ __lsx_vst(dst1, dst, 16); ++ __lsx_vst(dst2, dst, 32); ++ dst += dst_stride; ++ __lsx_vst(dst3, dst, 0); ++ __lsx_vst(dst4, dst, 16); ++ __lsx_vst(dst5, dst, 32); ++ dst += dst_stride; ++ } ++} ++ ++static void hevc_hz_8t_32w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ uint32_t loop_cnt; ++ __m128i src0, src1, src2; ++ __m128i filt0, filt1, filt2, filt3; ++ __m128i mask1, mask2, mask3, mask4, mask5, mask6, mask7; ++ __m128i vec0, vec1, vec2, vec3; ++ __m128i dst0, dst1, dst2, dst3; ++ __m128i const_vec; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ ++ src -= 3; ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); ++ ++ LSX_DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, ++ mask3, mask4); ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); ++ mask7 = __lsx_vaddi_bu(mask0, 14); ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ for (loop_cnt = height; loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src1); ++ src2 = __lsx_vld(src, 24); ++ src += src_stride; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, ++ mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, ++ vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src0, mask4, src1, src0, mask5, src1, src0, ++ mask6, src1, src0, mask7, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst1, vec1, filt1, dst1, ++ vec2, filt2, dst1, vec3, filt3, dst1, dst1, dst1, dst1); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, ++ mask2, src1, src1, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst2, vec1, filt1, dst2, ++ vec2, filt2, dst2, vec3, filt3, dst2, dst2, dst2, dst2); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, ++ mask2, src2, src2, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, dst3, ++ vec2, filt2, dst3, vec3, filt3, dst3, dst3, dst3, dst3); ++ ++ __lsx_vst(dst0, dst, 0); ++ __lsx_vst(dst1, dst, 16); ++ __lsx_vst(dst2, dst, 32); ++ __lsx_vst(dst3, dst, 48); ++ dst += dst_stride; ++ } ++} ++ ++static void hevc_hz_8t_48w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ uint32_t loop_cnt; ++ __m128i src0, src1, src2, src3; ++ __m128i filt0, filt1, filt2, filt3; ++ __m128i mask1, mask2, mask3, mask4, mask5, mask6, mask7; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5; ++ __m128i const_vec; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ ++ src -= 3; ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); ++ ++ LSX_DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, ++ mask3, mask4); ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); ++ mask7 = __lsx_vaddi_bu(mask0, 14); ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ for (loop_cnt = height; loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src1); ++ src2 = __lsx_vld(src, 32); ++ src3 = __lsx_vld(src, 40); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, src1, src1, ++ mask0, src2, src1, mask4, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, ++ dst3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, src1, src1, ++ mask1, src2, src1, mask5, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, src1, src1, ++ mask2, src2, src1, mask6, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, ++ vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, src1, src1, ++ mask3, src2, src1, mask7, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, ++ vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ __lsx_vst(dst0, dst, 0); ++ __lsx_vst(dst1, dst, 16); ++ __lsx_vst(dst2, dst, 32); ++ __lsx_vst(dst3, dst, 48); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, vec4, vec5); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, const_vec, vec5, filt0, ++ dst4, dst5); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, vec4, vec5); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, dst4, vec4, filt1, dst5, vec5, filt1, dst4, dst5); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, vec4, vec5); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, dst4, vec4, filt2, dst5, vec5, filt2, dst4, dst5); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, vec4, vec5); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, dst4, vec4, filt3, dst5, vec5, filt3, dst4, dst5); ++ __lsx_vst(dst4, dst, 64); ++ __lsx_vst(dst5, dst, 80); ++ dst += dst_stride; ++ } ++} ++ ++static void hevc_hz_8t_64w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ uint32_t loop_cnt; ++ __m128i src0, src1, src2, src3, src4; ++ __m128i filt0, filt1, filt2, filt3; ++ __m128i mask1, mask2, mask3, mask4, mask5, mask6, mask7; ++ __m128i vec0, vec1, vec2, vec3; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; ++ __m128i const_vec; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ ++ src -= 3; ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); ++ ++ LSX_DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, ++ mask3, mask4); ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6) ++ mask7 = __lsx_vaddi_bu(mask0, 14); ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ for (loop_cnt = height; loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src0, src1, src2, ++ src3); ++ src4 = __lsx_vld(src, 56); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ src4 = __lsx_vxori_b(src4, 128); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, ++ mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, ++ vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); ++ __lsx_vst(dst0, dst, 0); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src0, mask4, src1, src0, mask5, src1, src0, ++ mask6, src1, src0, mask7, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst1, vec1, filt1, dst1, ++ vec2, filt2, dst1, vec3, filt3, dst1, dst1, dst1, dst1); ++ __lsx_vst(dst1, dst, 16); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, ++ mask2, src1, src1, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst2, vec1, filt1, dst2, ++ vec2, filt2, dst2, vec3, filt3, dst2, dst2, dst2, dst2); ++ __lsx_vst(dst2, dst, 32); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src1, mask4, src2, src1, mask5, src2, src1, ++ mask6, src2, src1, mask7, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, dst3, ++ vec2, filt2, dst3, vec3, filt3, dst3, dst3, dst3, dst3); ++ __lsx_vst(dst3, dst, 48); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, ++ mask2, src2, src2, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst4, vec1, filt1, dst4, ++ vec2, filt2, dst4, vec3, filt3, dst4, dst4, dst4, dst4); ++ __lsx_vst(dst4, dst, 64); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src2, mask4, src3, src2, mask5, src3, src2, ++ mask6, src3, src2, mask7, vec0, vec1, vec2, vec3); ++ dst5 = const_vec; ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst5, vec0, filt0, dst5, vec1, filt1, dst5, ++ vec2, filt2, dst5, vec3, filt3, dst5, dst5, dst5, dst5); ++ __lsx_vst(dst5, dst, 80); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, ++ mask2, src3, src3, mask3, vec0, vec1, vec2, vec3); ++ dst6 = const_vec; ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst6, vec0, filt0, dst6, vec1, filt1, dst6, ++ vec2, filt2, dst6, vec3, filt3, dst6, dst6, dst6, dst6); ++ __lsx_vst(dst6, dst, 96); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, ++ mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); ++ dst7 = const_vec; ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst7, vec0, filt0, dst7, vec1, filt1, dst7, ++ vec2, filt2, dst7, vec3, filt3, dst7, dst7, dst7, dst7); ++ __lsx_vst(dst7, dst, 112); ++ dst += dst_stride; ++ } ++} ++ ++static void hevc_vt_8t_4w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ int32_t loop_cnt; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src_stride_3x = (src_stride << 1) + src_stride; ++ int32_t dst_stride_3x = (dst_stride << 1) + dst_stride; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8; ++ __m128i src9, src10, src11, src12, src13, src14; ++ __m128i src10_r, src32_r, src54_r, src76_r, src98_r; ++ __m128i src21_r, src43_r, src65_r, src87_r, src109_r; ++ __m128i src1110_r, src1211_r, src1312_r, src1413_r; ++ __m128i src2110, src4332, src6554, src8776, src10998; ++ __m128i src12111110, src14131312; ++ __m128i dst10, dst32, dst54, dst76; ++ __m128i filt0, filt1, filt2, filt3; ++ __m128i const_vec; ++ ++ src -= src_stride_3x; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); ++ ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); ++ src6 = __lsx_vld(src + src_stride_2x, 0); ++ src += src_stride_3x; ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_r, src32_r, src54_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); ++ LSX_DUP2_ARG2(__lsx_vilvl_d, src21_r, src10_r, src43_r, src32_r, src2110, src4332); ++ src6554 = __lsx_vilvl_d(src65_r, src54_r); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src2110, 128, src4332, 128, src2110, src4332); ++ src6554 = __lsx_vxori_b(src6554, 128); ++ ++ for (loop_cnt = (height >> 3); loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src7, src8, src9, src10); ++ src += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src11, src12, src13, src14); ++ src += src_stride_4x; ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src76_r, src87_r, src98_r, src109_r); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src11, src10, src12, src11, src13, src12, src14, ++ src13, src1110_r, src1211_r, src1312_r, src1413_r); ++ LSX_DUP4_ARG2(__lsx_vilvl_d, src87_r, src76_r, src109_r, src98_r, src1211_r, ++ src1110_r, src1413_r, src1312_r, src8776, src10998, src12111110, ++ src14131312); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src8776, 128, src10998, 128, src12111110, 128, ++ src14131312, 128, src8776, src10998, src12111110, src14131312); ++ ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src2110, filt0, dst10, src4332, filt1, ++ dst10, src6554, filt2, dst10, src8776, filt3, dst10, dst10, dst10, ++ dst10); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src4332, filt0, dst32, src6554, filt1, ++ dst32, src8776, filt2, dst32, src10998, filt3, dst32, dst32, ++ dst32, dst32); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src6554, filt0, dst54, src8776, filt1, ++ dst54, src10998, filt2, dst54, src12111110, filt3, dst54, dst54, ++ dst54, dst54); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src8776, filt0, dst76, src10998, ++ filt1, dst76, src12111110, filt2, dst76, src14131312, filt3, dst76, ++ dst76, dst76, dst76); ++ ++ __lsx_vstelm_d(dst10, dst, 0, 0); ++ __lsx_vstelm_d(dst10, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(dst32, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(dst32, dst + dst_stride_3x, 0, 1); ++ dst += dst_stride_4x; ++ __lsx_vstelm_d(dst54, dst, 0, 0); ++ __lsx_vstelm_d(dst54, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(dst76, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(dst76, dst + dst_stride_3x, 0, 1); ++ dst += dst_stride_4x; ++ ++ src2110 = src10998; ++ src4332 = src12111110; ++ src6554 = src14131312; ++ src6 = src14; ++ } ++} ++ ++static void hevc_vt_8t_8w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ int32_t loop_cnt; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src_stride_3x = (src_stride << 1) + src_stride; ++ int32_t dst_stride_3x = (dst_stride << 1) + dst_stride; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; ++ __m128i src10_r, src32_r, src54_r, src76_r, src98_r; ++ __m128i src21_r, src43_r, src65_r, src87_r, src109_r; ++ __m128i dst0_r, dst1_r, dst2_r, dst3_r; ++ __m128i const_vec; ++ __m128i filt0, filt1, filt2, filt3; ++ ++ src -= src_stride_3x; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, ++ filter, 6, filt0, filt1, filt2, filt3); ++ ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); ++ src6 = __lsx_vld(src + src_stride_2x, 0); ++ src += src_stride_3x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_r, src32_r, src54_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src7, src8, src9, src10); ++ src += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src76_r, src87_r, src98_r, src109_r); ++ ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, dst0_r, src54_r, filt2, dst0_r, src76_r, filt3, dst0_r, ++ dst0_r, dst0_r, dst0_r); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, ++ filt1, dst1_r, src65_r, filt2, dst1_r, src87_r, filt3, dst1_r, ++ dst1_r, dst1_r, dst1_r); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src32_r, filt0, dst2_r, src54_r, ++ filt1, dst2_r, src76_r, filt2, dst2_r, src98_r, filt3, dst2_r, ++ dst2_r, dst2_r, dst2_r); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src43_r, filt0, dst3_r, src65_r, ++ filt1, dst3_r, src87_r, filt2, dst3_r, src109_r, filt3, dst3_r, ++ dst3_r, dst3_r, dst3_r); ++ ++ __lsx_vst(dst0_r, dst, 0); ++ __lsx_vst(dst1_r, dst + dst_stride, 0); ++ __lsx_vst(dst2_r, dst + dst_stride_2x, 0); ++ __lsx_vst(dst3_r, dst + dst_stride_3x, 0); ++ dst += dst_stride_4x; ++ ++ src10_r = src54_r; ++ src32_r = src76_r; ++ src54_r = src98_r; ++ src21_r = src65_r; ++ src43_r = src87_r; ++ src65_r = src109_r; ++ src6 = src10; ++ } ++} ++ ++static void hevc_vt_8t_12w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ int32_t loop_cnt; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src_stride_3x = (src_stride << 1) + src_stride; ++ int32_t dst_stride_3x = (dst_stride << 1) + dst_stride; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; ++ __m128i src10_r, src32_r, src54_r, src76_r, src98_r; ++ __m128i src21_r, src43_r, src65_r, src87_r, src109_r; ++ __m128i dst0_r, dst1_r, dst2_r, dst3_r; ++ __m128i src10_l, src32_l, src54_l, src76_l, src98_l; ++ __m128i src21_l, src43_l, src65_l, src87_l, src109_l; ++ __m128i src2110, src4332, src6554, src8776, src10998; ++ __m128i dst0_l, dst1_l; ++ __m128i const_vec; ++ __m128i filt0, filt1, filt2, filt3; ++ ++ src -= src_stride_3x; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); ++ src6 = __lsx_vld(src + src_stride_2x, 0); ++ src += src_stride_3x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_r, src32_r, src54_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_l, src32_l, src54_l, src21_l); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, src43_l, src65_l); ++ LSX_DUP2_ARG2(__lsx_vilvl_d, src21_l, src10_l, src43_l, src32_l, src2110, src4332); ++ src6554 = __lsx_vilvl_d(src65_l, src54_l); ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src+ src_stride_2x, 0, ++ src + src_stride_3x, 0, src7, src8, src9, src10); ++ src += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, ++ src8, src9, src10); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src76_r, src87_r, src98_r, src109_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src76_l, src87_l, src98_l, src109_l); ++ LSX_DUP2_ARG2(__lsx_vilvl_d, src87_l, src76_l, src109_l, src98_l, src8776, src10998); ++ ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, dst0_r, src54_r, filt2, dst0_r, src76_r, filt3, dst0_r, ++ dst0_r, dst0_r, dst0_r); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, ++ filt1, dst1_r, src65_r, filt2, dst1_r, src87_r, filt3, dst1_r, ++ dst1_r, dst1_r, dst1_r); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src32_r, filt0, dst2_r, src54_r, ++ filt1, dst2_r, src76_r, filt2, dst2_r, src98_r, filt3, dst2_r, ++ dst2_r, dst2_r, dst2_r); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src43_r, filt0, dst3_r, src65_r, ++ filt1, dst3_r, src87_r, filt2, dst3_r, src109_r, filt3, dst3_r, ++ dst3_r, dst3_r, dst3_r); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src2110, filt0, dst0_l, src4332, ++ filt1, dst0_l, src6554, filt2, dst0_l, src8776, filt3, dst0_l, ++ dst0_l, dst0_l, dst0_l); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src4332, filt0, dst1_l, src6554, ++ filt1, dst1_l, src8776, filt2, dst1_l, src10998, filt3, dst1_l, ++ dst1_l, dst1_l, dst1_l); ++ ++ __lsx_vst(dst0_r, dst, 0); ++ __lsx_vst(dst1_r, dst + dst_stride, 0); ++ __lsx_vst(dst2_r, dst + dst_stride_2x, 0); ++ __lsx_vst(dst3_r, dst + dst_stride_3x, 0); ++ __lsx_vstelm_d(dst0_l, dst, 16, 0); ++ __lsx_vstelm_d(dst0_l, dst + dst_stride, 16, 1); ++ __lsx_vstelm_d(dst1_l, dst + dst_stride_2x, 16, 0); ++ __lsx_vstelm_d(dst1_l, dst + dst_stride_3x, 16, 1); ++ dst += dst_stride_4x; ++ ++ src10_r = src54_r; ++ src32_r = src76_r; ++ src54_r = src98_r; ++ src21_r = src65_r; ++ src43_r = src87_r; ++ src65_r = src109_r; ++ src2110 = src6554; ++ src4332 = src8776; ++ src6554 = src10998; ++ src6 = src10; ++ } ++} ++ ++static void hevc_vt_8t_16multx4mult_lsx(uint8_t *src, ++ int32_t src_stride, ++ int16_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height, ++ int32_t width) ++{ ++ uint8_t *src_tmp; ++ int16_t *dst_tmp; ++ int32_t loop_cnt, cnt; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src_stride_3x = (src_stride << 1) + src_stride; ++ int32_t dst_stride_3x = (dst_stride << 1) + dst_stride; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; ++ __m128i src10_r, src32_r, src54_r, src76_r, src98_r; ++ __m128i src21_r, src43_r, src65_r, src87_r, src109_r; ++ __m128i dst0_r, dst1_r, dst2_r, dst3_r; ++ __m128i src10_l, src32_l, src54_l, src76_l, src98_l; ++ __m128i src21_l, src43_l, src65_l, src87_l, src109_l; ++ __m128i dst0_l, dst1_l, dst2_l, dst3_l; ++ __m128i const_vec; ++ __m128i filt0, filt1, filt2, filt3; ++ ++ src -= src_stride_3x; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); ++ ++ for (cnt = width >> 4; cnt--;) { ++ src_tmp = src; ++ dst_tmp = dst; ++ ++ LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, ++ src0, src1, src2, src3); ++ src_tmp += src_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); ++ src6 = __lsx_vld(src_tmp + src_stride_2x, 0); ++ src_tmp += src_stride_3x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_r, src32_r, src54_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_l, src32_l, src54_l, src21_l); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, src43_l, src65_l); ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, ++ src7, src8, src9, src10); ++ src_tmp += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src76_r, src87_r, src98_r, src109_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src76_l, src87_l, src98_l, src109_l); ++ ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, dst0_r, src54_r, filt2, dst0_r, src76_r, filt3, ++ dst0_r, dst0_r, dst0_r, dst0_r); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, ++ filt1, dst1_r, src65_r, filt2, dst1_r, src87_r, filt3, ++ dst1_r, dst1_r, dst1_r, dst1_r); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src32_r, filt0, dst2_r, src54_r, ++ filt1, dst2_r, src76_r, filt2, dst2_r, src98_r, filt3, ++ dst2_r, dst2_r, dst2_r, dst2_r); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src43_r, filt0, dst3_r, src65_r, ++ filt1, dst3_r, src87_r, filt2, dst3_r, src109_r, filt3, ++ dst3_r, dst3_r, dst3_r, dst3_r); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, ++ filt1, dst0_l, src54_l, filt2, dst0_l, src76_l, filt3, ++ dst0_l, dst0_l, dst0_l, dst0_l); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, ++ filt1, dst1_l, src65_l, filt2, dst1_l, src87_l, filt3, ++ dst1_l, dst1_l, dst1_l, dst1_l); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src32_l, filt0, dst2_l, src54_l, ++ filt1, dst2_l, src76_l, filt2, dst2_l, src98_l, filt3, ++ dst2_l, dst2_l, dst2_l, dst2_l); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src43_l, filt0, dst3_l, src65_l, ++ filt1, dst3_l, src87_l, filt2, dst3_l, src109_l, filt3, ++ dst3_l, dst3_l, dst3_l, dst3_l); ++ ++ __lsx_vst(dst0_r, dst_tmp, 0); ++ __lsx_vst(dst1_r, dst_tmp + dst_stride, 0); ++ __lsx_vst(dst2_r, dst_tmp + dst_stride_2x, 0); ++ __lsx_vst(dst3_r, dst_tmp + dst_stride_3x, 0); ++ __lsx_vst(dst0_l, dst_tmp, 16); ++ __lsx_vst(dst1_l, dst_tmp + dst_stride, 16); ++ __lsx_vst(dst2_l, dst_tmp + dst_stride_2x, 16); ++ __lsx_vst(dst3_l, dst_tmp + dst_stride_3x, 16); ++ dst_tmp += dst_stride_4x; ++ ++ src10_r = src54_r; ++ src32_r = src76_r; ++ src54_r = src98_r; ++ src21_r = src65_r; ++ src43_r = src87_r; ++ src65_r = src109_r; ++ src10_l = src54_l; ++ src32_l = src76_l; ++ src54_l = src98_l; ++ src21_l = src65_l; ++ src43_l = src87_l; ++ src65_l = src109_l; ++ src6 = src10; ++ } ++ src += 16; ++ dst += 16; ++ } ++} ++ ++static void hevc_vt_8t_16w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ hevc_vt_8t_16multx4mult_lsx(src, src_stride, dst, dst_stride, ++ filter, height, 16); ++} ++ ++static void hevc_vt_8t_24w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ hevc_vt_8t_16multx4mult_lsx(src, src_stride, dst, dst_stride, ++ filter, height, 16); ++ hevc_vt_8t_8w_lsx(src + 16, src_stride, dst + 16, dst_stride, ++ filter, height); ++} ++ ++static void hevc_vt_8t_32w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ hevc_vt_8t_16multx4mult_lsx(src, src_stride, dst, dst_stride, ++ filter, height, 32); ++} ++ ++static void hevc_vt_8t_48w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ hevc_vt_8t_16multx4mult_lsx(src, src_stride, dst, dst_stride, ++ filter, height, 48); ++} ++ ++static void hevc_vt_8t_64w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ hevc_vt_8t_16multx4mult_lsx(src, src_stride, dst, dst_stride, ++ filter, height, 64); ++} ++ ++static void hevc_hv_8t_4w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; ++ __m128i filt0, filt1, filt2, filt3; ++ __m128i filt_h0, filt_h1, filt_h2, filt_h3; ++ __m128i mask1, mask2, mask3; ++ __m128i filter_vec, const_vec; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; ++ __m128i vec8, vec9, vec10, vec11, vec12, vec13, vec14, vec15; ++ __m128i dst30, dst41, dst52, dst63, dst66, dst97, dst108; ++ __m128i dst0_r, dst1_r, dst2_r, dst3_r; ++ __m128i dst10_r, dst32_r, dst54_r, dst76_r, dst98_r; ++ __m128i dst21_r, dst43_r, dst65_r, dst87_r, dst109_r; ++ __m128i mask0; ++ ++ mask0 = __lsx_vld(ff_hevc_mask_arr, 16); ++ ++ src -= src_stride_3x + 3; ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, ++ filter_x, 6, filt0, filt1, filt2, filt3); ++ filter_vec = __lsx_vld(filter_y, 0); ++ filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); ++ ++ LSX_DUP4_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filter_vec, 2, ++ filter_vec, 3, filt_h0, filt_h1, filt_h2, filt_h3); ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); ++ src6 = __lsx_vld(src + src_stride_2x, 0); ++ src += src_stride_3x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, ++ src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src0, mask0, src3, src0, mask1, src3, src0, ++ mask2, src3, src0, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src1, mask0, src4, src1, mask1, src4, src1, ++ mask2, src4, src1, mask3, vec4, vec5, vec6, vec7); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src5, src2, mask0, src5, src2, mask1, src5, src2, ++ mask2, src5, src2, mask3, vec8, vec9, vec10, vec11); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src6, src3, mask0, src6, src3, mask1, src6, src3, ++ mask2, src6, src3, mask3, vec12, vec13, vec14, vec15); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst30, vec1, filt1, dst30, ++ vec2, filt2, dst30, vec3, filt3, dst30, dst30, dst30, dst30); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst41, vec5, filt1, dst41, ++ vec6, filt2, dst41, vec7, filt3, dst41, dst41, dst41, dst41); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec8, filt0, dst52, vec9, filt1, dst52, ++ vec10, filt2, dst52, vec11, filt3, dst52, dst52, dst52, dst52); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec12, filt0, dst63, vec13, filt1, dst63, ++ vec14, filt2, dst63, vec15, filt3, dst63, dst63, dst63, dst63); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst41, dst30, dst52, dst41, dst10_r, dst21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst41, dst30, dst52, dst41, dst43_r, dst54_r); ++ dst32_r = __lsx_vilvl_h(dst63, dst52); ++ dst65_r = __lsx_vilvh_h(dst63, dst52); ++ dst66 = __lsx_vreplvei_d(dst63, 1); ++ ++ for (loop_cnt = height >> 2; loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src7, src8, src9, src10); ++ src += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src9, src7, mask0, src9, src7, mask1, src9, src7, ++ mask2, src9, src7, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src10, src8, mask0, src10, src8, mask1, src10, src8, ++ mask2, src10, src8, mask3, vec4, vec5, vec6, vec7); ++ ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst97, vec1, filt1, ++ dst97, vec2, filt2, dst97, vec3, filt3, dst97, dst97, dst97, dst97); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst108, vec5, filt1, ++ dst108, vec6, filt2, dst108, vec7, filt3, dst108, dst108, dst108, dst108); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst97, dst66, dst108, dst97, dst76_r, dst87_r); ++ dst109_r = __lsx_vilvh_h(dst108, dst97); ++ dst66 = __lsx_vreplvei_d(dst97, 1); ++ dst98_r = __lsx_vilvl_h(dst66, dst108); ++ ++ dst0_r = __lsx_hevc_filt_8tap_w(dst10_r, dst32_r, dst54_r, dst76_r, ++ filt_h0, filt_h1, filt_h2, filt_h3); ++ dst1_r = __lsx_hevc_filt_8tap_w(dst21_r, dst43_r, dst65_r, dst87_r, ++ filt_h0, filt_h1, filt_h2, filt_h3); ++ dst2_r = __lsx_hevc_filt_8tap_w(dst32_r, dst54_r, dst76_r, dst98_r, ++ filt_h0, filt_h1, filt_h2, filt_h3); ++ dst3_r = __lsx_hevc_filt_8tap_w(dst43_r, dst65_r, dst87_r, dst109_r, ++ filt_h0, filt_h1, filt_h2, filt_h3); ++ LSX_DUP4_ARG2(__lsx_vsrli_w, dst0_r, 6, dst1_r, 6, dst2_r, 6, dst3_r, 6, ++ dst0_r, dst1_r, dst2_r, dst3_r); ++ LSX_DUP2_ARG2(__lsx_vpickev_h, dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst2_r); ++ __lsx_vstelm_d(dst0_r, dst, 0, 0); ++ __lsx_vstelm_d(dst0_r, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(dst2_r, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(dst2_r, dst + dst_stride_3x, 0, 1); ++ dst += dst_stride_4x; ++ ++ dst10_r = dst54_r; ++ dst32_r = dst76_r; ++ dst54_r = dst98_r; ++ dst21_r = dst65_r; ++ dst43_r = dst87_r; ++ dst65_r = dst109_r; ++ dst66 = __lsx_vreplvei_d(dst108, 1); ++ } ++} ++ ++static void hevc_hv_8t_8multx1mult_lsx(uint8_t *src, ++ int32_t src_stride, ++ int16_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height, ++ int32_t width) ++{ ++ uint32_t loop_cnt, cnt; ++ uint8_t *src_tmp; ++ int16_t *dst_tmp; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i filt0, filt1, filt2, filt3; ++ __m128i filt_h0, filt_h1, filt_h2, filt_h3; ++ __m128i mask1, mask2, mask3; ++ __m128i filter_vec, const_vec; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; ++ __m128i vec8, vec9, vec10, vec11, vec12, vec13, vec14, vec15; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; ++ __m128i dst0_r, dst0_l; ++ __m128i dst10_r, dst32_r, dst54_r, dst76_r; ++ __m128i dst10_l, dst32_l, dst54_l, dst76_l; ++ __m128i mask0 = {0x403030202010100, 0x807070606050504}; ++ ++ src -= src_stride_3x + 3; ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, ++ filter_x, 6, filt0, filt1, filt2, filt3); ++ ++ filter_vec = __lsx_vld(filter_y, 0); ++ filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); ++ ++ LSX_DUP4_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filter_vec, 2, ++ filter_vec, 3, filt_h0, filt_h1, filt_h2, filt_h3); ++ ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ for (cnt = width >> 3; cnt--;) { ++ src_tmp = src; ++ dst_tmp = dst; ++ LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, ++ src0, src1, src2, src3); ++ src_tmp += src_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); ++ src6 = __lsx_vld(src_tmp + src_stride_2x, 0); ++ src_tmp += src_stride_3x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ ++ /* row 0 row 1 row 2 row 3 */ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, ++ mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, ++ mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, ++ mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, ++ mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, ++ vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst1, vec5, filt1, dst1, ++ vec6, filt2, dst1, vec7, filt3, dst1, dst1, dst1, dst1); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec8, filt0, dst2, vec9, filt1, dst2, ++ vec10, filt2, dst2, vec11, filt3, dst2, dst2, dst2, dst2); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec12, filt0, dst3, vec13, filt1, ++ dst3, vec14, filt2, dst3, vec15, filt3, dst3, dst3, dst3, dst3); ++ ++ /* row 4 row 5 row 6 */ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, ++ mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, src5, ++ mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, src6, ++ mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst4, filt1, vec1, dst4, ++ vec2, filt2, dst4, vec3, filt3, dst4, dst4, dst4, dst4); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst5, vec5, filt1, dst5, ++ vec6, filt2, dst5, vec7, filt3, dst5, dst5, dst5, dst5); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec8, filt0, dst6, vec9, filt1, dst6, ++ vec10, filt2, dst6, vec11, filt3, dst6, dst6, dst6, dst6); ++ ++ for (loop_cnt = height; loop_cnt--;) { ++ src7 = __lsx_vld(src_tmp, 0); ++ src7 = __lsx_vxori_b(src7, 128); ++ src_tmp += src_stride; ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, src7, ++ src7, mask2, src7, src7, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst7, vec1, filt1, ++ dst7, vec2, filt2, dst7, vec3, filt3, dst7, dst7, dst7, dst7); ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, ++ dst10_r, dst32_r, dst54_r, dst76_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, ++ dst10_l, dst32_l, dst54_l, dst76_l); ++ ++ dst0_r = __lsx_hevc_filt_8tap_w(dst10_r, dst32_r, dst54_r, dst76_r, ++ filt_h0, filt_h1, filt_h2, filt_h3); ++ dst0_l = __lsx_hevc_filt_8tap_w(dst10_l, dst32_l, dst54_l, dst76_l, ++ filt_h0, filt_h1, filt_h2, filt_h3); ++ dst0_r = __lsx_vsrli_w(dst0_r, 6); ++ dst0_l = __lsx_vsrli_w(dst0_l, 6); ++ ++ dst0_r = __lsx_vpickev_h(dst0_l, dst0_r); ++ __lsx_vst(dst0_r, dst_tmp, 0); ++ dst_tmp += dst_stride; ++ ++ dst0 = dst1; ++ dst1 = dst2; ++ dst2 = dst3; ++ dst3 = dst4; ++ dst4 = dst5; ++ dst5 = dst6; ++ dst6 = dst7; ++ } ++ src += 8; ++ dst += 8; ++ } ++} ++ ++static void hevc_hv_8t_8w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_8t_8multx1mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 8); ++} ++ ++static void hevc_hv_8t_12w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ uint8_t *src_tmp; ++ int16_t *dst_tmp; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; ++ __m128i mask0, mask1, mask2, mask3, mask4, mask5, mask6, mask7; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; ++ __m128i vec8, vec9, vec10, vec11, vec12, vec13, vec14, vec15; ++ __m128i filt0, filt1, filt2, filt3, filt_h0, filt_h1, filt_h2, filt_h3; ++ __m128i filter_vec, const_vec; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; ++ __m128i dst30, dst41, dst52, dst63, dst66, dst97, dst108; ++ __m128i dst10_r, dst32_r, dst54_r, dst76_r, dst98_r, dst21_r, dst43_r; ++ __m128i dst65_r, dst87_r, dst109_r, dst10_l, dst32_l, dst54_l, dst76_l; ++ __m128i dst0_r, dst0_l, dst1_r, dst2_r, dst3_r; ++ ++ src -= src_stride_3x + 3; ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, ++ filter_x, 6, filt0, filt1, filt2, filt3); ++ ++ filter_vec = __lsx_vld(filter_y, 0); ++ filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); ++ ++ LSX_DUP4_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filter_vec, 2, ++ filter_vec, 3, filt_h0, filt_h1, filt_h2, filt_h3); ++ ++ mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ src_tmp = src; ++ dst_tmp = dst; ++ ++ LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, ++ src0, src1, src2, src3); ++ src_tmp += src_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); ++ src6 = __lsx_vld(src_tmp + src_stride_2x, 0); ++ src_tmp += src_stride_3x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, ++ src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ ++ /* row 0 row 1 row 2 row 3 */ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, ++ mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, ++ mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, ++ mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, ++ mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, ++ vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst1, vec5, filt1, dst1, ++ vec6, filt2, dst1, vec7, filt3, dst1, dst1, dst1, dst1); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec8, filt0, dst2, vec9, filt1, dst2, ++ vec10, filt2, dst2, vec11, filt3, dst2, dst2, dst2, dst2); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec12, filt0, dst3, vec13, filt1, dst3, ++ vec14, filt2, dst3, vec15, filt3, dst3, dst3, dst3, dst3); ++ ++ /* row 4 row 5 row 6 */ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, ++ mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, src5, ++ mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, src6, ++ mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst4, vec1, filt1, dst4, ++ vec2, filt2, dst4, vec3, filt3, dst4, dst4, dst4, dst4); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst5, vec5, filt1, dst5, ++ vec6, filt2, dst5, vec7, filt3, dst5, dst5, dst5, dst5); ++ dst6 = const_vec; ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec8, filt0, dst6, vec9, filt1, dst6, ++ vec10, filt2, dst6, vec11, filt3, dst6, dst6, dst6, dst6); ++ ++ for (loop_cnt = height; loop_cnt--;) { ++ src7 = __lsx_vld(src_tmp, 0); ++ src7 = __lsx_vxori_b(src7, 128); ++ src_tmp += src_stride; ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, src7, src7, ++ mask2, src7, src7, mask3, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst7, vec1, filt1, dst7, ++ vec2, filt2, dst7, vec3, filt3, dst7, dst7, dst7, dst7); ++ LSX_DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, ++ dst10_r, dst32_r, dst54_r, dst76_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, ++ dst10_l, dst32_l, dst54_l, dst76_l); ++ dst0_r = __lsx_hevc_filt_8tap_w(dst10_r, dst32_r, dst54_r, dst76_r, filt_h0, ++ filt_h1, filt_h2, filt_h3); ++ dst0_l = __lsx_hevc_filt_8tap_w(dst10_l, dst32_l, dst54_l, dst76_l, filt_h0, ++ filt_h1, filt_h2, filt_h3); ++ dst0_r = __lsx_vsrli_w(dst0_r, 6); ++ dst0_l = __lsx_vsrli_w(dst0_l, 6); ++ ++ dst0_r = __lsx_vpickev_h(dst0_l, dst0_r); ++ __lsx_vst(dst0_r, dst_tmp, 0); ++ dst_tmp += dst_stride; ++ ++ dst0 = dst1; ++ dst1 = dst2; ++ dst2 = dst3; ++ dst3 = dst4; ++ dst4 = dst5; ++ dst5 = dst6; ++ dst6 = dst7; ++ } ++ src += 8; ++ dst += 8; ++ ++ mask4 = __lsx_vld(ff_hevc_mask_arr, 16); ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask4, 2, mask4, 4, mask5, mask6); ++ mask7 = __lsx_vaddi_bu(mask4, 6); ++ ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); ++ src6 = __lsx_vld(src + src_stride_2x, 0); ++ src += src_stride_3x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3) ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src0, mask4, src3, src0, mask5, src3, src0, ++ mask6, src3, src0, mask7, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src1, mask4, src4, src1, mask5, src4, src1, ++ mask6, src4, src1, mask7, vec4, vec5, vec6, vec7); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src5, src2, mask4, src5, src2, mask5, src5, src2, ++ mask6, src5, src2, mask7, vec8, vec9, vec10, vec11); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src6, src3, mask4, src6, src3, mask5, src6, src3, ++ mask6, src6, src3, mask7, vec12, vec13, vec14, vec15); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst30, vec1, filt1, dst30, ++ vec2, filt2, dst30, vec3, filt3, dst30, dst30, dst30, dst30); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst41, vec5, filt1, dst41, ++ vec6, filt2, dst41, vec7, filt3, dst41, dst41, dst41, dst41); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec8, filt0, dst52, vec9, filt1, dst52, ++ vec10, filt2, dst52, vec11, filt3, dst52, dst52, dst52, dst52); ++ dst63 = const_vec; ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec12, filt0, dst63, vec13, filt1, dst63, ++ vec14, filt2, dst63, vec15, filt3, dst63, dst63, dst63, dst63); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst41, dst30, dst52, dst41, dst10_r, dst21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst41, dst30, dst52, dst41, dst43_r, dst54_r); ++ dst32_r = __lsx_vilvl_h(dst63, dst52); ++ dst65_r = __lsx_vilvh_h(dst63, dst52); ++ ++ dst66 = __lsx_vreplvei_d(dst63, 1); ++ ++ for (loop_cnt = height >> 2; loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src7, src8, src9, src10); ++ src += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, ++ src8, src9, src10); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src9, src7, mask4, src9, src7, mask5, src9, src7, ++ mask6, src9, src7, mask7, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src10, src8, mask4, src10, src8, mask5, src10, ++ src8, mask6, src10, src8, mask7, vec4, vec5, vec6, vec7); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst97, vec1, filt1, ++ dst97, vec2, filt2, dst97, vec3, filt3, dst97, dst97, dst97, ++ dst97); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst108, vec5, filt1, ++ dst108, vec6, filt2, dst108, vec7, filt3, dst108, dst108, dst108, ++ dst108); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst97, dst66, dst108, dst97, dst76_r, dst87_r); ++ dst109_r = __lsx_vilvh_h(dst108, dst97); ++ dst66 = __lsx_vreplvei_d(dst97, 1); ++ dst98_r = __lsx_vilvl_h(dst66, dst108); ++ ++ dst0_r = __lsx_hevc_filt_8tap_w(dst10_r, dst32_r, dst54_r, dst76_r, filt_h0, ++ filt_h1, filt_h2, filt_h3); ++ dst1_r = __lsx_hevc_filt_8tap_w(dst21_r, dst43_r, dst65_r, dst87_r, filt_h0, ++ filt_h1, filt_h2, filt_h3); ++ dst2_r = __lsx_hevc_filt_8tap_w(dst32_r, dst54_r, dst76_r, dst98_r, filt_h0, ++ filt_h1, filt_h2, filt_h3); ++ dst3_r = __lsx_hevc_filt_8tap_w(dst43_r, dst65_r, dst87_r, dst109_r, filt_h0, ++ filt_h1, filt_h2, filt_h3); ++ LSX_DUP4_ARG2(__lsx_vsrli_w, dst0_r, 6, dst1_r, 6, dst2_r, 6, dst3_r, 6, ++ dst0_r, dst1_r, dst2_r, dst3_r); ++ LSX_DUP2_ARG2(__lsx_vpickev_h, dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst2_r); ++ __lsx_vstelm_d(dst0_r, dst, 0, 0); ++ __lsx_vstelm_d(dst0_r, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(dst2_r, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(dst2_r, dst + dst_stride_3x, 0, 1); ++ dst += dst_stride_4x; ++ ++ dst10_r = dst54_r; ++ dst32_r = dst76_r; ++ dst54_r = dst98_r; ++ dst21_r = dst65_r; ++ dst43_r = dst87_r; ++ dst65_r = dst109_r; ++ dst66 = __lsx_vreplvei_d(dst108, 1); ++ } ++} ++ ++static void hevc_hv_8t_16w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_8t_8multx1mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 16); ++} ++ ++static void hevc_hv_8t_24w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_8t_8multx1mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 24); ++} ++ ++static void hevc_hv_8t_32w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_8t_8multx1mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 32); ++} ++ ++static void hevc_hv_8t_48w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_8t_8multx1mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 48); ++} ++ ++static void hevc_hv_8t_64w_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_8t_8multx1mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 64); ++} ++ ++static void hevc_hz_4t_32w_lsx(uint8_t *src, ++ int32_t src_stride, ++ int16_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ __m128i src0, src1, src2; ++ __m128i filt0, filt1; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ __m128i mask1, mask2, mask3; ++ __m128i dst0, dst1, dst2, dst3; ++ __m128i vec0, vec1, vec2, vec3; ++ __m128i const_vec; ++ ++ src -= 1; ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 8, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 10); ++ ++ for (loop_cnt = height; loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src1); ++ src2 = __lsx_vld(src, 24); ++ src += src_stride; ++ ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask2, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src2, src2, mask0, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, ++ dst3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask3, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask1, src2, src2, mask1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ __lsx_vst(dst0, dst, 0); ++ __lsx_vst(dst1, dst, 16); ++ __lsx_vst(dst2, dst, 32); ++ __lsx_vst(dst3, dst, 48); ++ dst += dst_stride; ++ } ++} ++ ++static void hevc_vt_4t_16w_lsx(uint8_t *src, ++ int32_t src_stride, ++ int16_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ int32_t loop_cnt; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ __m128i src0, src1, src2, src3, src4, src5; ++ __m128i src10_r, src32_r, src21_r, src43_r; ++ __m128i src10_l, src32_l, src21_l, src43_l; ++ __m128i dst0_r, dst1_r, dst0_l, dst1_l; ++ __m128i filt0, filt1; ++ __m128i const_vec; ++ ++ src -= src_stride; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ src2 = __lsx_vld(src + src_stride_2x, 0); ++ src += src_stride_3x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src3, src4); ++ src += src_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, dst0_r, dst0_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, ++ filt1, dst0_l, dst0_l); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, ++ filt1, dst1_r, dst1_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, ++ filt1, dst1_l, dst1_l); ++ __lsx_vst(dst0_r, dst, 0); ++ __lsx_vst(dst0_l, dst, 16); ++ dst += dst_stride; ++ __lsx_vst(dst1_r, dst, 0); ++ __lsx_vst(dst1_l, dst, 16); ++ dst += dst_stride; ++ ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src5, src2); ++ src += src_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src32_r, filt0, dst0_r, src10_r, ++ filt1, dst0_r, dst0_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src32_l, filt0, dst0_l, src10_l, ++ filt1, dst0_l, dst0_l); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src43_r, filt0, dst1_r, src21_r, ++ filt1, dst1_r, dst1_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src43_l, filt0, dst1_l, src21_l, ++ filt1, dst1_l, dst1_l); ++ __lsx_vst(dst0_r, dst, 0); ++ __lsx_vst(dst0_l, dst, 16); ++ dst += dst_stride; ++ __lsx_vst(dst1_r, dst, 0); ++ __lsx_vst(dst1_l, dst, 16); ++ dst += dst_stride; ++ } ++} ++ ++static void hevc_vt_4t_24w_lsx(uint8_t *src, ++ int32_t src_stride, ++ int16_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ int32_t loop_cnt; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ ++ __m128i src0, src1, src2, src3, src4, src5; ++ __m128i src6, src7, src8, src9, src10, src11; ++ __m128i src10_r, src32_r, src76_r, src98_r; ++ __m128i src21_r, src43_r, src87_r, src109_r; ++ __m128i dst0_r, dst1_r, dst2_r, dst3_r; ++ __m128i src10_l, src32_l, src21_l, src43_l; ++ __m128i dst0_l, dst1_l; ++ __m128i filt0, filt1; ++ __m128i const_vec; ++ ++ src -= src_stride; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ src2 = __lsx_vld(src + src_stride_2x, 0); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); ++ ++ LSX_DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src6, src7); ++ src8 = __lsx_vld(src + src_stride_2x, 16); ++ src += src_stride_3x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); ++ src8 = __lsx_vxori_b(src8, 128); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src3, src4); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); ++ ++ LSX_DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src9, src10); ++ src += src_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); ++ ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, dst0_r, dst0_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, ++ filt1, dst0_l, dst0_l); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, ++ filt1, dst1_r, dst1_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, ++ filt1, dst1_l, dst1_l); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src76_r, filt0, dst2_r, src98_r, ++ filt1, dst2_r, dst2_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src87_r, filt0, dst3_r, src109_r, ++ filt1, dst3_r, dst3_r); ++ ++ __lsx_vst(dst0_r, dst, 0); ++ __lsx_vst(dst0_l, dst, 16); ++ __lsx_vst(dst2_r, dst, 32); ++ dst += dst_stride; ++ __lsx_vst(dst1_r, dst, 0); ++ __lsx_vst(dst1_l, dst, 16); ++ __lsx_vst(dst3_r, dst, 32); ++ dst += dst_stride; ++ ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src5, src2); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); ++ ++ LSX_DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src11, src8); ++ src += src_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src11, 128, src8, 128, src11, src8); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src11, src10, src8, src11, src76_r, src87_r); ++ ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src32_r, filt0, dst0_r, src10_r, ++ filt1, dst0_r, dst0_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src32_l, filt0, dst0_l, src10_l, ++ filt1, dst0_l, dst0_l); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src43_r, filt0, dst1_r, src21_r, ++ filt1, dst1_r, dst1_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src43_l, filt0, dst1_l, src21_l, ++ filt1, dst1_l, dst1_l); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src98_r, filt0, dst2_r, src76_r, ++ filt1, dst2_r, dst2_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src109_r, filt0, dst3_r, src87_r, ++ filt1, dst3_r, dst3_r); ++ ++ __lsx_vst(dst0_r, dst, 0); ++ __lsx_vst(dst0_l, dst, 16); ++ __lsx_vst(dst2_r, dst, 32); ++ dst += dst_stride; ++ __lsx_vst(dst1_r, dst, 0); ++ __lsx_vst(dst1_l, dst, 16); ++ __lsx_vst(dst3_r, dst, 32); ++ dst += dst_stride; ++ } ++} ++ ++static void hevc_vt_4t_32w_lsx(uint8_t *src, ++ int32_t src_stride, ++ int16_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ int32_t loop_cnt; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ ++ __m128i src0, src1, src2, src3, src4, src5; ++ __m128i src6, src7, src8, src9, src10, src11; ++ __m128i src10_r, src32_r, src76_r, src98_r; ++ __m128i src21_r, src43_r, src87_r, src109_r; ++ __m128i dst0_r, dst1_r, dst2_r, dst3_r; ++ __m128i src10_l, src32_l, src76_l, src98_l; ++ __m128i src21_l, src43_l, src87_l, src109_l; ++ __m128i dst0_l, dst1_l, dst2_l, dst3_l; ++ __m128i filt0, filt1; ++ __m128i const_vec; ++ ++ src -= src_stride; ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ src2 = __lsx_vld(src + src_stride_2x, 0); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1) ++ src2 = __lsx_vxori_b(src2, 128); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); ++ ++ LSX_DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src6, src7); ++ src8 = __lsx_vld(src + src_stride_2x, 16); ++ src += src_stride_3x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); ++ src8 = __lsx_vxori_b(src8, 128); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src76_l, src87_l); ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src3, src4); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); ++ ++ LSX_DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src9, src10); ++ src += src_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src9, src8, src10, src9, src98_l, src109_l); ++ ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, dst0_r, dst0_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, ++ filt1, dst0_l, dst0_l); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, ++ filt1, dst1_r, dst1_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src21_l, filt0, dst1_l,src43_l, ++ filt1, dst1_l, dst1_l); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src76_r, filt0, dst2_r, src98_r, ++ filt1, dst2_r, dst2_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src76_l, filt0, dst2_l, src98_l, ++ filt1, dst2_l, dst2_l); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src87_r, filt0, dst3_r, src109_r, ++ filt1, dst3_r, dst3_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src87_l, filt0, dst3_l, src109_l, ++ filt1, dst3_l, dst3_l); ++ ++ __lsx_vst(dst0_r, dst, 0); ++ __lsx_vst(dst0_l, dst, 16); ++ __lsx_vst(dst2_r, dst, 32); ++ __lsx_vst(dst2_l, dst, 48); ++ dst += dst_stride; ++ __lsx_vst(dst1_r, dst, 0); ++ __lsx_vst(dst1_l, dst, 16); ++ __lsx_vst(dst3_r, dst, 32); ++ __lsx_vst(dst3_l, dst, 48); ++ dst += dst_stride; ++ ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src5, src2); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); ++ ++ LSX_DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src11, src8); ++ src += src_stride_2x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src11, 128, src8, 128, src11, src8); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src11, src10, src8, src11, src76_r, src87_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src11, src10, src8, src11, src76_l, src87_l); ++ ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src32_r, filt0, dst0_r, src10_r, ++ filt1, dst0_r, dst0_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src32_l, filt0, dst0_l, src10_l, ++ filt1, dst0_l, dst0_l); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src43_r, filt0, dst1_r, src21_r, ++ filt1, dst1_r, dst1_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src43_l, filt0, dst1_l, src21_l, ++ filt1, dst1_l, dst1_l); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src98_r, filt0, dst2_r, src76_r, ++ filt1, dst2_r, dst2_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src98_l, filt0, dst2_l, src76_l, ++ filt1, dst2_l, dst2_l); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src109_r, filt0, dst3_r, src87_r, ++ filt1, dst3_r, dst3_r); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src109_l, filt0, dst3_l, src87_l, ++ filt1, dst3_l, dst3_l); ++ ++ __lsx_vst(dst0_r, dst, 0); ++ __lsx_vst(dst0_l, dst, 16); ++ __lsx_vst(dst2_r, dst, 32); ++ __lsx_vst(dst2_l, dst, 48); ++ dst += dst_stride; ++ __lsx_vst(dst1_r, dst, 0); ++ __lsx_vst(dst1_l, dst, 16); ++ __lsx_vst(dst3_r, dst, 32); ++ __lsx_vst(dst3_l, dst, 48); ++ dst += dst_stride; ++ } ++} ++ ++static void hevc_hv_4t_8x2_lsx(uint8_t *src, ++ int32_t src_stride, ++ int16_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y) ++{ ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ ++ __m128i src0, src1, src2, src3, src4; ++ __m128i filt0, filt1; ++ __m128i filt_h0, filt_h1; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ __m128i mask1; ++ __m128i filter_vec, const_vec; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7, vec8, vec9; ++ __m128i dst0, dst1, dst2, dst3, dst4; ++ __m128i dst0_r, dst0_l, dst1_r, dst1_l; ++ __m128i dst10_r, dst32_r, dst21_r, dst43_r; ++ __m128i dst10_l, dst32_l, dst21_l, dst43_l; ++ ++ src -= (src_stride + 1); ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ ++ filter_vec = __lsx_vld(filter_y, 0); ++ filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); ++ LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ ++ mask1 = __lsx_vaddi_bu(mask0, 2); ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); ++ src4 = __lsx_vld(src + src_stride_4x, 0); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ src4 = __lsx_vxori_b(src4, 128); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec6, vec7); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec8, vec9); ++ ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, ++ dst0, dst0); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec2, filt0, dst1, vec3, filt1, ++ dst1, dst1); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst2, vec5, filt1, ++ dst2, dst2); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec6, filt0, dst3, vec7, filt1, ++ dst3, dst3); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec8, filt0, dst4, vec9, filt1, ++ dst4, dst4); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); ++ ++ dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); ++ dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); ++ dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); ++ dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); ++ LSX_DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, dst0_r, ++ dst0_l, dst1_r, dst1_l); ++ LSX_DUP2_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); ++ __lsx_vst(dst0_r, dst, 0); ++ __lsx_vst(dst1_r, dst + dst_stride, 0); ++} ++ ++static void hevc_hv_4t_8multx4_lsx(uint8_t *src, int32_t src_stride, ++ int16_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, int32_t width8mult) ++{ ++ int32_t cnt; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ ++ __m128i src0, src1, src2, src3, src4, src5, src6, mask0, mask1; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; ++ __m128i filt0, filt1, filt_h0, filt_h1, filter_vec, const_vec; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6; ++ __m128i dst10_r, dst32_r, dst54_r, dst21_r, dst43_r, dst65_r; ++ __m128i dst10_l, dst32_l, dst54_l, dst21_l, dst43_l, dst65_l; ++ __m128i dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l; ++ ++ src -= (src_stride + 1); ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ ++ filter_vec = __lsx_vld(filter_y, 0); ++ filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); ++ LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ ++ mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ mask1 = __lsx_vaddi_bu(mask0, 2); ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ for (cnt = width8mult; cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); ++ src6 = __lsx_vld(src + src_stride_2x, 0); ++ src += (8 - src_stride_4x); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3) ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, ++ dst0, dst0); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec2, filt0, dst1, vec3, filt1, ++ dst1, dst1); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst2, vec5, filt1, ++ dst2, dst2); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, ++ dst3, dst3); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec2, filt0, dst4, vec3, filt1, ++ dst4, dst4); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst5, vec5, filt1, ++ dst5, dst5); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec6, filt0, dst6, vec7, filt1, ++ dst6, dst6); ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst54_r, dst65_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst54_l, dst65_l); ++ ++ dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); ++ dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); ++ dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); ++ dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); ++ ++ dst2_r = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); ++ dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); ++ dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); ++ dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); ++ LSX_DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, ++ dst0_r, dst0_l, dst1_r, dst1_l); ++ LSX_DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, ++ dst2_r, dst2_l, dst3_r, dst3_l); ++ LSX_DUP2_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); ++ LSX_DUP2_ARG2(__lsx_vpickev_h, dst2_l, dst2_r, dst3_l, dst3_r, dst2_r, dst3_r); ++ ++ __lsx_vst(dst0_r, dst, 0); ++ __lsx_vst(dst1_r, dst + dst_stride, 0); ++ __lsx_vst(dst2_r, dst + dst_stride_2x, 0); ++ __lsx_vst(dst3_r, dst + dst_stride_3x, 0); ++ dst += 8; ++ } ++} ++ ++static void hevc_hv_4t_8x6_lsx(uint8_t *src, ++ int32_t src_stride, ++ int16_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y) ++{ ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8; ++ __m128i filt0, filt1; ++ __m128i filt_h0, filt_h1; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ __m128i mask1; ++ __m128i filter_vec, const_vec; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7, vec8, vec9; ++ __m128i vec10, vec11, vec12, vec13, vec14, vec15, vec16, vec17; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, dst8; ++ __m128i dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l; ++ __m128i dst4_r, dst4_l, dst5_r, dst5_l; ++ __m128i dst10_r, dst32_r, dst10_l, dst32_l; ++ __m128i dst21_r, dst43_r, dst21_l, dst43_l; ++ __m128i dst54_r, dst54_l, dst65_r, dst65_l; ++ __m128i dst76_r, dst76_l, dst87_r, dst87_l; ++ ++ src -= (src_stride + 1); ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ ++ filter_vec = __lsx_vld(filter_y, 0); ++ filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); ++ LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ ++ mask1 = __lsx_vaddi_bu(mask0, 2); ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); ++ src4 = __lsx_vld(src + src_stride_4x, 0); ++ src += (src_stride_4x + src_stride); ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src5, src6, src7, src8); ++ ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ src4 = __lsx_vxori_b(src4, 128); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src5, 128, src6, 128, src7, 128, src8, 128, src5, ++ src6, src7, src8); ++ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src1, src1, ++ mask0, src1, src1, mask1, vec0, vec1, vec2, vec3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1,src3, src3, ++ mask0, src3, src3, mask1, vec4, vec5, vec6, vec7); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src5, src5, ++ mask0, src5, src5, mask1, vec8, vec9, vec10, vec11); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src7, src7, ++ mask0, src7, src7, mask1, vec12, vec13, vec14, vec15); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src8, src8, mask0, src8, src8, mask1, vec16, vec17); ++ ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, ++ const_vec, vec2, filt0, dst1, vec3, filt1, dst0, dst0, dst1, dst1); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst2, vec5, filt1, ++ const_vec, vec6, filt0, dst3, vec7, filt1, dst2, dst2, dst3, dst3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec8, filt0, dst4, vec9, filt1, ++ const_vec, vec10, filt0, dst5, vec11, filt1, dst4, dst4, dst5, dst5); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec12, filt0, dst6, vec13, filt1, ++ const_vec, vec14, filt0, dst7, vec15, filt1, dst6, dst6, dst7, dst7); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec16, filt0, dst8, vec17, filt1, dst8, ++ dst8); ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, ++ dst10_r, dst21_r, dst32_r, dst43_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, ++ dst10_l, dst21_l, dst32_l, dst43_l); ++ LSX_DUP4_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst7, dst6, dst8, dst7, ++ dst54_r, dst65_r, dst76_r, dst87_r); ++ LSX_DUP4_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst7, dst6, dst8, dst7, ++ dst54_l, dst65_l, dst76_l, dst87_l); ++ ++ dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); ++ dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); ++ dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); ++ dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); ++ dst2_r = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); ++ dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); ++ dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); ++ dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); ++ dst4_r = __lsx_hevc_filt_4tap_w(dst54_r, dst76_r, filt_h0, filt_h1); ++ dst4_l = __lsx_hevc_filt_4tap_w(dst54_l, dst76_l, filt_h0, filt_h1); ++ dst5_r = __lsx_hevc_filt_4tap_w(dst65_r, dst87_r, filt_h0, filt_h1); ++ dst5_l = __lsx_hevc_filt_4tap_w(dst65_l, dst87_l, filt_h0, filt_h1); ++ ++ LSX_DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, dst0_r, ++ dst0_l, dst1_r, dst1_l); ++ LSX_DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, dst2_r, ++ dst2_l, dst3_r, dst3_l); ++ LSX_DUP4_ARG2(__lsx_vsrai_w, dst4_r, 6, dst4_l, 6, dst5_r, 6, dst5_l, 6, dst4_r, ++ dst4_l, dst5_r, dst5_l); ++ ++ LSX_DUP4_ARG2(__lsx_vpickev_h,dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, dst2_r, ++ dst3_l, dst3_r, dst0_r, dst1_r, dst2_r, dst3_r); ++ LSX_DUP2_ARG2(__lsx_vpickev_h, dst4_l, dst4_r, dst5_l, dst5_r, dst4_r, dst5_r); ++ ++ __lsx_vst(dst0_r, dst, 0); ++ __lsx_vst(dst1_r, dst + dst_stride, 0); ++ dst += dst_stride_2x; ++ __lsx_vst(dst2_r, dst, 0); ++ __lsx_vst(dst3_r, dst + dst_stride, 0); ++ dst += dst_stride_2x; ++ __lsx_vst(dst4_r, dst, 0); ++ __lsx_vst(dst5_r, dst + dst_stride, 0); ++} ++ ++static void hevc_hv_4t_8multx4mult_lsx(uint8_t *src, ++ int32_t src_stride, ++ int16_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height, ++ int32_t width8mult) ++{ ++ uint32_t loop_cnt, cnt; ++ uint8_t *src_tmp; ++ int16_t *dst_tmp; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ ++ __m128i src0, src1, src2, src3, src4, src5, src6; ++ __m128i filt0, filt1; ++ __m128i filt_h0, filt_h1; ++ __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ __m128i mask1; ++ __m128i filter_vec, const_vec; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6; ++ __m128i dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l; ++ __m128i dst10_r, dst32_r, dst54_r, dst21_r, dst43_r, dst65_r; ++ __m128i dst10_l, dst32_l, dst54_l, dst21_l, dst43_l, dst65_l; ++ ++ src -= (src_stride + 1); ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ ++ filter_vec = __lsx_vld(filter_y, 0); ++ filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); ++ LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ ++ mask1 = __lsx_vaddi_bu(mask0, 2); ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ for (cnt = width8mult; cnt--;) { ++ src_tmp = src; ++ dst_tmp = dst; ++ ++ LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src0, src1); ++ src2 = __lsx_vld(src_tmp + src_stride_2x, 0); ++ src_tmp += src_stride_3x; ++ ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, ++ dst0, dst0); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec2, filt0, dst1, vec3, filt1, ++ dst1, dst1); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst2, vec5, filt1, ++ dst2, dst2); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); ++ ++ for (loop_cnt = height >> 2; loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, ++ src3, src4, src5, src6); ++ src_tmp += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, ++ src3, src4, src5, src6); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); ++ ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, ++ dst3, dst3); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec2, filt0, dst4, vec3, filt1, ++ dst4, dst4); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst5, vec5, filt1, ++ dst5, dst5); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec6, filt0, dst6, vec7, filt1, ++ dst6, dst6); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst54_r, dst65_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst54_l, dst65_l); ++ ++ dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); ++ dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); ++ dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); ++ dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); ++ dst2_r = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); ++ dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); ++ dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); ++ dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); ++ ++ LSX_DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, ++ dst0_r, dst0_l, dst1_r, dst1_l); ++ LSX_DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, ++ dst2_r, dst2_l, dst3_r, dst3_l); ++ ++ LSX_DUP4_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, ++ dst2_r, dst3_l, dst3_r, dst0_r, dst1_r, dst2_r, dst3_r); ++ ++ __lsx_vst(dst0_r, dst_tmp, 0); ++ __lsx_vst(dst1_r, dst_tmp + dst_stride, 0); ++ __lsx_vst(dst2_r, dst_tmp + dst_stride_2x, 0); ++ __lsx_vst(dst3_r, dst_tmp + dst_stride_3x, 0); ++ dst_tmp += dst_stride_4x; ++ ++ dst10_r = dst54_r; ++ dst10_l = dst54_l; ++ dst21_r = dst65_r; ++ dst21_l = dst65_l; ++ dst2 = dst6; ++ } ++ src += 8; ++ dst += 8; ++ } ++} ++ ++static void hevc_hv_4t_8w_lsx(uint8_t *src, ++ int32_t src_stride, ++ int16_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ ++ if (2 == height) { ++ hevc_hv_4t_8x2_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y); ++ } else if (4 == height) { ++ hevc_hv_4t_8multx4_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, 1); ++ } else if (6 == height) { ++ hevc_hv_4t_8x6_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y); ++ } else if (0 == (height & 0x03)) { ++ hevc_hv_4t_8multx4mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 1); ++ } ++} ++ ++static void hevc_hv_4t_12w_lsx(uint8_t *src, ++ int32_t src_stride, ++ int16_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ uint32_t loop_cnt; ++ uint8_t *src_tmp; ++ int16_t *dst_tmp; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; ++ __m128i mask0, mask1, mask2, mask3; ++ __m128i filt0, filt1, filt_h0, filt_h1, filter_vec, const_vec; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst10, dst21, dst22, dst73; ++ __m128i dst84, dst95, dst106, dst76_r, dst98_r, dst87_r, dst109_r; ++ __m128i dst10_r, dst32_r, dst54_r, dst21_r, dst43_r, dst65_r; ++ __m128i dst10_l, dst32_l, dst54_l, dst21_l, dst43_l, dst65_l; ++ __m128i dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l; ++ __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; ++ ++ src -= (src_stride + 1); ++ LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ ++ filter_vec = __lsx_vld(filter_y, 0); ++ filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); ++ LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ ++ mask0 = __lsx_vld(ff_hevc_mask_arr, 0); ++ mask1 = __lsx_vaddi_bu(mask0, 2); ++ const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ ++ src_tmp = src; ++ dst_tmp = dst; ++ ++ LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src0, src1); ++ src2 = __lsx_vld(src_tmp + src_stride_2x, 0); ++ src_tmp += src_stride_3x; ++ ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, ++ dst0, dst0); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec2, filt0, dst1, vec3, filt1, ++ dst1, dst1); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst2, vec5, filt1, ++ dst2, dst2); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); ++ ++ for (loop_cnt = 4; loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, src3, ++ src4, src5, src6); ++ src_tmp += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, ++ src4, src5, src6); ++ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); ++ ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, ++ dst3, dst3); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec2, filt0, dst4, vec3, filt1, ++ dst4, dst4); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst5, vec5, filt1, ++ dst5, dst5); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec6, filt0, dst6, vec7, filt1, ++ dst6, dst6); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst54_r, dst65_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst54_l, dst65_l); ++ ++ dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); ++ dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); ++ dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); ++ dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); ++ dst2_r = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); ++ dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); ++ dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); ++ dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); ++ ++ LSX_DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, ++ dst0_r, dst0_l, dst1_r, dst1_l); ++ LSX_DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, ++ dst2_r, dst2_l, dst3_r, dst3_l); ++ LSX_DUP4_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, dst2_r, ++ dst3_l, dst3_r, dst0_r, dst1_r, dst2_r, dst3_r); ++ __lsx_vst(dst0_r, dst_tmp, 0); ++ __lsx_vst(dst1_r, dst_tmp + dst_stride, 0); ++ __lsx_vst(dst2_r, dst_tmp + dst_stride_2x, 0); ++ __lsx_vst(dst3_r, dst_tmp + dst_stride_3x, 0); ++ dst_tmp += dst_stride_4x; ++ ++ dst10_r = dst54_r; ++ dst10_l = dst54_l; ++ dst21_r = dst65_r; ++ dst21_l = dst65_l; ++ dst2 = dst6; ++ } ++ ++ src += 8; ++ dst += 8; ++ ++ mask2 = __lsx_vld(ff_hevc_mask_arr, 16); ++ mask3 = __lsx_vaddi_bu(mask2, 2); ++ ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ src2 = __lsx_vld(src + src_stride_2x, 0); ++ src += src_stride_3x; ++ LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src0, mask2, src1, src0, mask3, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src1, mask2, src2, src1, mask3, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst10, vec1, filt1, ++ dst10, dst10); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec2, filt0, dst21, vec3, filt1, ++ dst21, dst21); ++ dst10_r = __lsx_vilvl_h(dst21, dst10); ++ dst21_r = __lsx_vilvh_h(dst21, dst10); ++ dst22 = __lsx_vreplvei_d(dst21, 1); ++ ++ for (loop_cnt = 2; loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src3, src4, src5, src6); ++ src += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src7, src8, src9, src10); ++ src += src_stride_4x; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, ++ src4, src5, src6); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, ++ src8, src9, src10); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src7, src3, mask2, src7, src3, mask3, vec0, vec1); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src8, src4, mask2, src8, src4, mask3, vec2, vec3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src9, src5, mask2, src9, src5, mask3, vec4, vec5); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, src10, src6, mask2, src10, src6, mask3, vec6, vec7); ++ ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst73, vec1, filt1, ++ dst73, dst73); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec2, filt0, dst84, vec3, filt1, ++ dst84, dst84); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst95, vec5, filt1, ++ dst95, dst95); ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec6, filt0, dst106, vec7, filt1, ++ dst106, dst106); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst73, dst22, dst84, dst73, dst32_r, dst43_r); ++ LSX_DUP2_ARG2(__lsx_vilvh_h, dst84, dst73, dst95, dst84, dst87_r, dst98_r); ++ LSX_DUP2_ARG2(__lsx_vilvl_h, dst95, dst84, dst106, dst95, dst54_r, dst65_r); ++ dst109_r = __lsx_vilvh_h(dst106, dst95); ++ dst22 = __lsx_vreplvei_d(dst73, 1); ++ dst76_r = __lsx_vilvl_h(dst22, dst106); ++ ++ tmp0 = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); ++ tmp1 = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); ++ tmp2 = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); ++ tmp3 = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); ++ tmp4 = __lsx_hevc_filt_4tap_w(dst54_r, dst76_r, filt_h0, filt_h1); ++ tmp5 = __lsx_hevc_filt_4tap_w(dst65_r, dst87_r, filt_h0, filt_h1); ++ tmp6 = __lsx_hevc_filt_4tap_w(dst76_r, dst98_r, filt_h0, filt_h1); ++ tmp7 = __lsx_hevc_filt_4tap_w(dst87_r, dst109_r, filt_h0, filt_h1); ++ ++ LSX_DUP4_ARG2(__lsx_vsrai_w, tmp0, 6, tmp1, 6, tmp2, 6, tmp3, 6, tmp0, tmp1, ++ tmp2, tmp3); ++ LSX_DUP4_ARG2(__lsx_vsrai_w, tmp4, 6, tmp5, 6, tmp6, 6, tmp7, 6, tmp4, tmp5, ++ tmp6, tmp7); ++ LSX_DUP4_ARG2(__lsx_vpickev_h, tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, ++ tmp0, tmp1, tmp2, tmp3); ++ ++ __lsx_vstelm_d(tmp0, dst, 0, 0); ++ __lsx_vstelm_d(tmp0, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(tmp1, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(tmp1, dst + dst_stride_3x, 0, 1); ++ dst += dst_stride_4x; ++ __lsx_vstelm_d(tmp2, dst, 0, 0); ++ __lsx_vstelm_d(tmp2, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(tmp3, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(tmp3, dst + dst_stride_3x, 0, 1); ++ dst += dst_stride_4x; ++ ++ dst10_r = dst98_r; ++ dst21_r = dst109_r; ++ dst22 = __lsx_vreplvei_d(dst106, 1); ++ } ++} ++ ++static void hevc_hv_4t_16w_lsx(uint8_t *src, ++ int32_t src_stride, ++ int16_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ if (4 == height) { ++ hevc_hv_4t_8multx4_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, 2); ++ } else { ++ hevc_hv_4t_8multx4mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 2); ++ } ++} ++ ++static void hevc_hv_4t_24w_lsx(uint8_t *src, ++ int32_t src_stride, ++ int16_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_4t_8multx4mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 3); ++} ++ ++static void hevc_hv_4t_32w_lsx(uint8_t *src, ++ int32_t src_stride, ++ int16_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_x, ++ const int8_t *filter_y, ++ int32_t height) ++{ ++ hevc_hv_4t_8multx4mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 4); ++} ++ ++#define MC_COPY(WIDTH) \ ++void ff_hevc_put_hevc_pel_pixels##WIDTH##_8_lsx(int16_t *dst, \ ++ uint8_t *src, \ ++ ptrdiff_t src_stride, \ ++ int height, \ ++ intptr_t mx, \ ++ intptr_t my, \ ++ int width) \ ++{ \ ++ hevc_copy_##WIDTH##w_lsx(src, src_stride, dst, MAX_PB_SIZE, height); \ ++} ++ ++MC_COPY(4); ++MC_COPY(6); ++MC_COPY(8); ++MC_COPY(12); ++MC_COPY(16); ++MC_COPY(24); ++MC_COPY(32); ++MC_COPY(48); ++MC_COPY(64); ++ ++#undef MC_COPY ++ ++#define MC(PEL, DIR, WIDTH, TAP, DIR1, FILT_DIR) \ ++void ff_hevc_put_hevc_##PEL##_##DIR##WIDTH##_8_lsx(int16_t *dst, \ ++ uint8_t *src, \ ++ ptrdiff_t src_stride, \ ++ int height, \ ++ intptr_t mx, \ ++ intptr_t my, \ ++ int width) \ ++{ \ ++ const int8_t *filter = ff_hevc_##PEL##_filters[FILT_DIR - 1]; \ ++ \ ++ hevc_##DIR1##_##TAP##t_##WIDTH##w_lsx(src, src_stride, dst, \ ++ MAX_PB_SIZE, filter, height); \ ++} ++ ++MC(qpel, h, 4, 8, hz, mx); ++MC(qpel, h, 8, 8, hz, mx); ++MC(qpel, h, 12, 8, hz, mx); ++MC(qpel, h, 16, 8, hz, mx); ++MC(qpel, h, 24, 8, hz, mx); ++MC(qpel, h, 32, 8, hz, mx); ++MC(qpel, h, 48, 8, hz, mx); ++MC(qpel, h, 64, 8, hz, mx); ++ ++MC(qpel, v, 4, 8, vt, my); ++MC(qpel, v, 8, 8, vt, my); ++MC(qpel, v, 12, 8, vt, my); ++MC(qpel, v, 16, 8, vt, my); ++MC(qpel, v, 24, 8, vt, my); ++MC(qpel, v, 32, 8, vt, my); ++MC(qpel, v, 48, 8, vt, my); ++MC(qpel, v, 64, 8, vt, my); ++ ++MC(epel, h, 32, 4, hz, mx); ++ ++MC(epel, v, 16, 4, vt, my); ++MC(epel, v, 24, 4, vt, my); ++MC(epel, v, 32, 4, vt, my); ++ ++#undef MC ++ ++#define MC_HV(PEL, WIDTH, TAP) \ ++void ff_hevc_put_hevc_##PEL##_hv##WIDTH##_8_lsx(int16_t *dst, \ ++ uint8_t *src, \ ++ ptrdiff_t src_stride, \ ++ int height, \ ++ intptr_t mx, \ ++ intptr_t my, \ ++ int width) \ ++{ \ ++ const int8_t *filter_x = ff_hevc_##PEL##_filters[mx - 1]; \ ++ const int8_t *filter_y = ff_hevc_##PEL##_filters[my - 1]; \ ++ \ ++ hevc_hv_##TAP##t_##WIDTH##w_lsx(src, src_stride, dst, MAX_PB_SIZE, \ ++ filter_x, filter_y, height); \ ++} ++ ++MC_HV(qpel, 4, 8); ++MC_HV(qpel, 8, 8); ++MC_HV(qpel, 12, 8); ++MC_HV(qpel, 16, 8); ++MC_HV(qpel, 24, 8); ++MC_HV(qpel, 32, 8); ++MC_HV(qpel, 48, 8); ++MC_HV(qpel, 64, 8); ++ ++MC_HV(epel, 8, 4); ++MC_HV(epel, 12, 4); ++MC_HV(epel, 16, 4); ++MC_HV(epel, 24, 4); ++MC_HV(epel, 32, 4); ++ ++#undef MC_HV +diff --git a/libavcodec/loongarch/hevcdsp_lsx.h b/libavcodec/loongarch/hevcdsp_lsx.h +new file mode 100644 +index 0000000000..609cfa081b +--- /dev/null ++++ b/libavcodec/loongarch/hevcdsp_lsx.h +@@ -0,0 +1,233 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Lu Wang ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef AVCODEC_LOONGARCH_HEVCDSP_LSX_H ++#define AVCODEC_LOONGARCH_HEVCDSP_LSX_H ++ ++#include "libavcodec/hevcdsp.h" ++ ++#define MC(PEL, DIR, WIDTH) \ ++void ff_hevc_put_hevc_##PEL##_##DIR##WIDTH##_8_lsx(int16_t *dst, \ ++ uint8_t *src, \ ++ ptrdiff_t src_stride, \ ++ int height, \ ++ intptr_t mx, \ ++ intptr_t my, \ ++ int width) ++ ++MC(pel, pixels, 4); ++MC(pel, pixels, 6); ++MC(pel, pixels, 8); ++MC(pel, pixels, 12); ++MC(pel, pixels, 16); ++MC(pel, pixels, 24); ++MC(pel, pixels, 32); ++MC(pel, pixels, 48); ++MC(pel, pixels, 64); ++ ++MC(qpel, h, 4); ++MC(qpel, h, 8); ++MC(qpel, h, 12); ++MC(qpel, h, 16); ++MC(qpel, h, 24); ++MC(qpel, h, 32); ++MC(qpel, h, 48); ++MC(qpel, h, 64); ++ ++MC(qpel, v, 4); ++MC(qpel, v, 8); ++MC(qpel, v, 12); ++MC(qpel, v, 16); ++MC(qpel, v, 24); ++MC(qpel, v, 32); ++MC(qpel, v, 48); ++MC(qpel, v, 64); ++ ++MC(qpel, hv, 4); ++MC(qpel, hv, 8); ++MC(qpel, hv, 12); ++MC(qpel, hv, 16); ++MC(qpel, hv, 24); ++MC(qpel, hv, 32); ++MC(qpel, hv, 48); ++MC(qpel, hv, 64); ++ ++MC(epel, h, 32); ++ ++MC(epel, v, 16); ++MC(epel, v, 24); ++MC(epel, v, 32); ++ ++MC(epel, hv, 8); ++MC(epel, hv, 12); ++MC(epel, hv, 16); ++MC(epel, hv, 24); ++MC(epel, hv, 32); ++ ++#undef MC ++ ++#define UNI_MC(PEL, DIR, WIDTH) \ ++void ff_hevc_put_hevc_uni_##PEL##_##DIR##WIDTH##_8_lsx(uint8_t *dst, \ ++ ptrdiff_t dst_stride, \ ++ uint8_t *src, \ ++ ptrdiff_t src_stride, \ ++ int height, \ ++ intptr_t mx, \ ++ intptr_t my, \ ++ int width) ++ ++UNI_MC(qpel, h, 64); ++ ++UNI_MC(qpel, v, 24); ++UNI_MC(qpel, v, 32); ++UNI_MC(qpel, v, 48); ++UNI_MC(qpel, v, 64); ++ ++UNI_MC(qpel, hv, 8); ++UNI_MC(qpel, hv, 16); ++UNI_MC(qpel, hv, 24); ++UNI_MC(qpel, hv, 32); ++UNI_MC(qpel, hv, 48); ++UNI_MC(qpel, hv, 64); ++ ++UNI_MC(epel, v, 24); ++UNI_MC(epel, v, 32); ++ ++UNI_MC(epel, hv, 8); ++UNI_MC(epel, hv, 12); ++UNI_MC(epel, hv, 16); ++UNI_MC(epel, hv, 24); ++UNI_MC(epel, hv, 32); ++ ++#undef UNI_MC ++ ++#define UNI_W_MC(PEL, DIR, WIDTH) \ ++void ff_hevc_put_hevc_uni_w_##PEL##_##DIR##WIDTH##_8_lsx(uint8_t *dst, \ ++ ptrdiff_t \ ++ dst_stride, \ ++ uint8_t *src, \ ++ ptrdiff_t \ ++ src_stride, \ ++ int height, \ ++ int denom, \ ++ int weight, \ ++ int offset, \ ++ intptr_t mx, \ ++ intptr_t my, \ ++ int width) ++ ++UNI_W_MC(qpel, hv, 8); ++UNI_W_MC(qpel, hv, 16); ++UNI_W_MC(qpel, hv, 24); ++UNI_W_MC(qpel, hv, 32); ++UNI_W_MC(qpel, hv, 48); ++UNI_W_MC(qpel, hv, 64); ++ ++#undef UNI_W_MC ++ ++#define BI_MC(PEL, DIR, WIDTH) \ ++void ff_hevc_put_hevc_bi_##PEL##_##DIR##WIDTH##_8_lsx(uint8_t *dst, \ ++ ptrdiff_t dst_stride, \ ++ uint8_t *src, \ ++ ptrdiff_t src_stride, \ ++ int16_t *src_16bit, \ ++ int height, \ ++ intptr_t mx, \ ++ intptr_t my, \ ++ int width) ++ ++BI_MC(pel, pixels, 4); ++BI_MC(pel, pixels, 6); ++BI_MC(pel, pixels, 8); ++BI_MC(pel, pixels, 12); ++BI_MC(pel, pixels, 16); ++BI_MC(pel, pixels, 24); ++BI_MC(pel, pixels, 32); ++BI_MC(pel, pixels, 48); ++BI_MC(pel, pixels, 64); ++ ++BI_MC(qpel, h, 16); ++BI_MC(qpel, h, 24); ++BI_MC(qpel, h, 32); ++BI_MC(qpel, h, 48); ++BI_MC(qpel, h, 64); ++ ++BI_MC(qpel, v, 8); ++BI_MC(qpel, v, 16); ++BI_MC(qpel, v, 24); ++BI_MC(qpel, v, 32); ++BI_MC(qpel, v, 48); ++BI_MC(qpel, v, 64); ++ ++BI_MC(qpel, hv, 8); ++BI_MC(qpel, hv, 16); ++BI_MC(qpel, hv, 24); ++BI_MC(qpel, hv, 32); ++BI_MC(qpel, hv, 48); ++BI_MC(qpel, hv, 64); ++ ++BI_MC(epel, h, 24); ++BI_MC(epel, h, 32); ++ ++BI_MC(epel, v, 12); ++BI_MC(epel, v, 16); ++BI_MC(epel, v, 24); ++BI_MC(epel, v, 32); ++ ++BI_MC(epel, hv, 6); ++BI_MC(epel, hv, 8); ++BI_MC(epel, hv, 16); ++BI_MC(epel, hv, 24); ++BI_MC(epel, hv, 32); ++ ++#undef BI_MC ++ ++void ff_hevc_loop_filter_luma_h_8_lsx(uint8_t *src, ++ ptrdiff_t src_stride, ++ int32_t beta, int32_t *tc, ++ uint8_t *no_p, uint8_t *no_q); ++ ++void ff_hevc_loop_filter_luma_v_8_lsx(uint8_t *src, ++ ptrdiff_t src_stride, ++ int32_t beta, int32_t *tc, ++ uint8_t *no_p, uint8_t *no_q); ++ ++void ff_hevc_loop_filter_chroma_h_8_lsx(uint8_t *src, ++ ptrdiff_t src_stride, ++ int32_t *tc, uint8_t *no_p, ++ uint8_t *no_q); ++ ++void ff_hevc_loop_filter_chroma_v_8_lsx(uint8_t *src, ++ ptrdiff_t src_stride, ++ int32_t *tc, uint8_t *no_p, ++ uint8_t *no_q); ++ ++void ff_hevc_sao_edge_filter_8_lsx(uint8_t *dst, uint8_t *src, ++ ptrdiff_t stride_dst, ++ int16_t *sao_offset_val, ++ int eo, int width, int height); ++ ++void ff_hevc_idct_4x4_lsx(int16_t *coeffs, int col_limit); ++void ff_hevc_idct_8x8_lsx(int16_t *coeffs, int col_limit); ++void ff_hevc_idct_16x16_lsx(int16_t *coeffs, int col_limit); ++void ff_hevc_idct_32x32_lsx(int16_t *coeffs, int col_limit); ++ ++#endif // #ifndef AVCODEC_LOONGARCH_HEVCDSP_LSX_H +diff --git a/libavcodec/loongarch/hpeldsp_init_loongarch.c b/libavcodec/loongarch/hpeldsp_init_loongarch.c +new file mode 100644 +index 0000000000..924ccd0f40 +--- /dev/null ++++ b/libavcodec/loongarch/hpeldsp_init_loongarch.c +@@ -0,0 +1,71 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Shiyou Yin ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/loongarch/cpu.h" ++#include "../hpeldsp.h" ++#include "libavcodec/loongarch/hpeldsp_lasx.h" ++ ++void ff_hpeldsp_init_loongarch(HpelDSPContext *c, int flags) ++{ ++ int cpu_flags = av_get_cpu_flags(); ++ ++ if (have_lasx(cpu_flags)) { ++ c->put_pixels_tab[0][0] = ff_put_pixels16_8_lsx; ++ c->put_pixels_tab[0][1] = ff_put_pixels16_x2_8_lasx; ++ c->put_pixels_tab[0][2] = ff_put_pixels16_y2_8_lasx; ++ c->put_pixels_tab[0][3] = ff_put_pixels16_xy2_8_lasx; ++ ++ c->put_pixels_tab[1][0] = ff_put_pixels8_8_lasx; ++ c->put_pixels_tab[1][1] = ff_put_pixels8_x2_8_lasx; ++ c->put_pixels_tab[1][2] = ff_put_pixels8_y2_8_lasx; ++ c->put_pixels_tab[1][3] = ff_put_pixels8_xy2_8_lasx; ++// ++// c->put_pixels_tab[2][0] = ff_put_pixels4_8_lasx; ++// c->put_pixels_tab[2][1] = ff_put_pixels4_x2_8_lasx; ++// c->put_pixels_tab[2][2] = ff_put_pixels4_y2_8_lasx; ++// c->put_pixels_tab[2][3] = ff_put_pixels4_xy2_8_lasx; ++// ++ c->put_no_rnd_pixels_tab[0][0] = ff_put_pixels16_8_lsx; ++ c->put_no_rnd_pixels_tab[0][1] = ff_put_no_rnd_pixels16_x2_8_lasx; ++ c->put_no_rnd_pixels_tab[0][2] = ff_put_no_rnd_pixels16_y2_8_lasx; ++ c->put_no_rnd_pixels_tab[0][3] = ff_put_no_rnd_pixels16_xy2_8_lasx; ++ ++ c->put_no_rnd_pixels_tab[1][0] = ff_put_pixels8_8_lasx; ++ c->put_no_rnd_pixels_tab[1][1] = ff_put_no_rnd_pixels8_x2_8_lasx; ++ c->put_no_rnd_pixels_tab[1][2] = ff_put_no_rnd_pixels8_y2_8_lasx; ++ c->put_no_rnd_pixels_tab[1][3] = ff_put_no_rnd_pixels8_xy2_8_lasx; ++ ++// c->avg_pixels_tab[0][0] = ff_avg_pixels16_8_lasx; ++// c->avg_pixels_tab[0][1] = ff_avg_pixels16_x2_8_lasx; ++// c->avg_pixels_tab[0][2] = ff_avg_pixels16_y2_8_lasx; ++// c->avg_pixels_tab[0][3] = ff_avg_pixels16_xy2_8_lasx; ++// ++// c->avg_pixels_tab[1][0] = ff_avg_pixels8_8_lasx; ++// c->avg_pixels_tab[1][1] = ff_avg_pixels8_x2_8_lasx; ++// c->avg_pixels_tab[1][2] = ff_avg_pixels8_y2_8_lasx; ++// c->avg_pixels_tab[1][3] = ff_avg_pixels8_xy2_8_lasx; ++// ++// c->avg_pixels_tab[2][0] = ff_avg_pixels4_8_lasx; ++// c->avg_pixels_tab[2][1] = ff_avg_pixels4_x2_8_lasx; ++// c->avg_pixels_tab[2][2] = ff_avg_pixels4_y2_8_lasx; ++// c->avg_pixels_tab[2][3] = ff_avg_pixels4_xy2_8_lasx; ++ } ++} +diff --git a/libavcodec/loongarch/hpeldsp_lasx.c b/libavcodec/loongarch/hpeldsp_lasx.c +new file mode 100644 +index 0000000000..f88e1244a8 +--- /dev/null ++++ b/libavcodec/loongarch/hpeldsp_lasx.c +@@ -0,0 +1,1041 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Shiyou Yin ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/loongarch/generic_macros_lasx.h" ++#include "libavcodec/loongarch/hpeldsp_lasx.h" ++ ++static inline void ++put_pixels8_l2_8_lsx(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, ++ int dst_stride, int src_stride1, int src_stride2, int h) ++{ ++ __asm__ volatile ( ++ "1: \n\t" ++ "vld $vr0, %[src1], 0 \n\t" ++ "add.d %[src1], %[src1], %[srcStride1] \n\t" ++ "vld $vr1, %[src1], 0 \n\t" ++ "add.d %[src1], %[src1], %[srcStride1] \n\t" ++ "vld $vr2, %[src1], 0 \n\t" ++ "add.d %[src1], %[src1], %[srcStride1] \n\t" ++ "vld $vr3, %[src1], 0 \n\t" ++ "add.d %[src1], %[src1], %[srcStride1] \n\t" ++ ++ "vld $vr4, %[src2], 0 \n\t" ++ "add.d %[src2], %[src2], %[srcStride2] \n\t" ++ "vld $vr5, %[src2], 0 \n\t" ++ "add.d %[src2], %[src2], %[srcStride2] \n\t" ++ "vld $vr6, %[src2], 0 \n\t" ++ "add.d %[src2], %[src2], %[srcStride2] \n\t" ++ "vld $vr7, %[src2], 0 \n\t" ++ "add.d %[src2], %[src2], %[srcStride2] \n\t" ++ ++ "addi.d %[h], %[h], -4 \n\t" ++ ++ "vavgr.bu $vr0, $vr4, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr5, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr6, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr7, $vr3 \n\t" ++ "vstelm.d $vr0, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr1, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr2, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr3, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "bnez %[h], 1b \n\t" ++ ++ : [dst]"+&r"(dst), [src2]"+&r"(src2), [src1]"+&r"(src1), ++ [h]"+&r"(h) ++ : [dstStride]"r"(dst_stride), [srcStride1]"r"(src_stride1), ++ [srcStride2]"r"(src_stride2) ++ : "memory" ++ ); ++} ++ ++static inline void ++put_pixels16_l2_8_lsx(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, ++ int dst_stride, int src_stride1, int src_stride2, int h) ++{ ++ __asm__ volatile ( ++ "1: \n\t" ++ "vld $vr0, %[src1], 0 \n\t" ++ "add.d %[src1], %[src1], %[srcStride1] \n\t" ++ "vld $vr1, %[src1], 0 \n\t" ++ "add.d %[src1], %[src1], %[srcStride1] \n\t" ++ "vld $vr2, %[src1], 0 \n\t" ++ "add.d %[src1], %[src1], %[srcStride1] \n\t" ++ "vld $vr3, %[src1], 0 \n\t" ++ "add.d %[src1], %[src1], %[srcStride1] \n\t" ++ ++ "vld $vr4, %[src2], 0 \n\t" ++ "add.d %[src2], %[src2], %[srcStride2] \n\t" ++ "vld $vr5, %[src2], 0 \n\t" ++ "add.d %[src2], %[src2], %[srcStride2] \n\t" ++ "vld $vr6, %[src2], 0 \n\t" ++ "add.d %[src2], %[src2], %[srcStride2] \n\t" ++ "vld $vr7, %[src2], 0 \n\t" ++ "add.d %[src2], %[src2], %[srcStride2] \n\t" ++ ++ "addi.d %[h], %[h], -4 \n\t" ++ ++ "vavgr.bu $vr0, $vr4, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr5, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr6, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr7, $vr3 \n\t" ++ "vst $vr0, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr1, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr2, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vst $vr3, %[dst], 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "bnez %[h], 1b \n\t" ++ ++ : [dst]"+&r"(dst), [src2]"+&r"(src2), [src1]"+&r"(src1), ++ [h]"+&r"(h) ++ : [dstStride]"r"(dst_stride), [srcStride1]"r"(src_stride1), ++ [srcStride2]"r"(src_stride2) ++ : "memory" ++ ); ++} ++ ++void ff_put_pixels8_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int h) ++{ ++ uint64_t tmp[8]; ++ int h_8 = h >> 3; ++ int res = h & 7; ++ ++ __asm__ volatile ( ++ "beqz %[h_8], 2f \n\t" ++ "1: \n\t" ++ "ld.d %[tmp0], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp1], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp2], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp3], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp4], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp5], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp6], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "ld.d %[tmp7], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ ++ "addi.d %[h_8], %[h_8], -1 \n\t" ++ ++ "st.d %[tmp0], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp1], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp2], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp3], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp4], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp5], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp6], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "st.d %[tmp7], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "bnez %[h_8], 1b \n\t" ++ ++ "2: \n\t" ++ "beqz %[res], 4f \n\t" ++ "3: \n\t" ++ "ld.d %[tmp0], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "addi.d %[res], %[res], -1 \n\t" ++ "st.d %[tmp0], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "bnez %[res], 3b \n\t" ++ "4: \n\t" ++ : [tmp0]"=&r"(tmp[0]), [tmp1]"=&r"(tmp[1]), ++ [tmp2]"=&r"(tmp[2]), [tmp3]"=&r"(tmp[3]), ++ [tmp4]"=&r"(tmp[4]), [tmp5]"=&r"(tmp[5]), ++ [tmp6]"=&r"(tmp[6]), [tmp7]"=&r"(tmp[7]), ++ [dst]"+&r"(block), [src]"+&r"(pixels), ++ [h_8]"+&r"(h_8), [res]"+&r"(res) ++ : [stride]"r"(line_size) ++ : "memory" ++ ); ++} ++ ++void ff_put_pixels16_8_lsx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int h) ++{ ++ int h_8 = h >> 3; ++ int res = h & 7; ++ ++ __asm__ volatile ( ++ "beqz %[h_8], 2f \n\t" ++ "1: \n\t" ++ "vld $vr0, %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr1, %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr2, %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr3, %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr4, %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr5, %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr6, %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "vld $vr7, %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ ++ "addi.d %[h_8], %[h_8], -1 \n\t" ++ ++ "vst $vr0, %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr1, %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr2, %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr3, %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr4, %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr5, %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr6, %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vst $vr7, %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "bnez %[h_8], 1b \n\t" ++ ++ "2: \n\t" ++ "beqz %[res], 4f \n\t" ++ "3: \n\t" ++ "vld $vr0, %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "addi.d %[res], %[res], -1 \n\t" ++ "vst $vr0, %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "bnez %[res], 3b \n\t" ++ "4: \n\t" ++ : [dst]"+&r"(block), [src]"+&r"(pixels), ++ [h_8]"+&r"(h_8), [res]"+&r"(res) ++ : [stride]"r"(line_size) ++ : "memory" ++ ); ++} ++ ++void ff_put_pixels8_x2_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int h) ++{ ++ put_pixels8_l2_8_lsx(block, pixels, pixels + 1, line_size, line_size, ++ line_size, h); ++} ++ ++void ff_put_pixels8_y2_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int h) ++{ ++ put_pixels8_l2_8_lsx(block, pixels, pixels + line_size, line_size, ++ line_size, line_size, h); ++} ++ ++void ff_put_pixels16_x2_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int h) ++{ ++ put_pixels16_l2_8_lsx(block, pixels, pixels + 1, line_size, line_size, ++ line_size, h); ++} ++ ++void ff_put_pixels16_y2_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int h) ++{ ++ put_pixels16_l2_8_lsx(block, pixels, pixels + line_size, line_size, ++ line_size, line_size, h); ++} ++ ++static void common_hz_bil_no_rnd_16x16_lasx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride) ++{ ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7; ++ int32_t src_stride_4x = src_stride << 2; ++ ++ LASX_LD_4(src, src_stride, src0, src1, src2, src3); ++ LASX_LD_4((src + 1), src_stride, src4, src5, src6, src7); ++ src += src_stride_4x; ++ LASX_PCKEV_Q_4(src1, src0, src3, src2, src5, src4, src7, src6, ++ src0, src1, src2, src3); ++ src0 = __lasx_xvavg_bu(src0, src2); ++ src1 = __lasx_xvavg_bu(src1, src3); ++ __lasx_xvstelm_d(src0, dst, 0, 0); ++ __lasx_xvstelm_d(src0, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src0, dst, 0, 2); ++ __lasx_xvstelm_d(src0, dst + 8, 0, 3); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src1, dst, 0, 0); ++ __lasx_xvstelm_d(src1, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src1, dst, 0, 2); ++ __lasx_xvstelm_d(src1, dst + 8, 0, 3); ++ dst += dst_stride; ++ ++ LASX_LD_4(src, src_stride, src0, src1, src2, src3); ++ LASX_LD_4((src + 1), src_stride, src4, src5, src6, src7); ++ src += src_stride_4x; ++ LASX_PCKEV_Q_4(src1, src0, src3, src2, src5, src4, src7, src6, ++ src0, src1, src2, src3); ++ src0 = __lasx_xvavg_bu(src0, src2); ++ src1 = __lasx_xvavg_bu(src1, src3); ++ __lasx_xvstelm_d(src0, dst, 0, 0); ++ __lasx_xvstelm_d(src0, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src0, dst, 0, 2); ++ __lasx_xvstelm_d(src0, dst + 8, 0, 3); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src1, dst, 0, 0); ++ __lasx_xvstelm_d(src1, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src1, dst, 0, 2); ++ __lasx_xvstelm_d(src1, dst + 8, 0, 3); ++ dst += dst_stride; ++ ++ LASX_LD_4(src, src_stride, src0, src1, src2, src3); ++ LASX_LD_4((src + 1), src_stride, src4, src5, src6, src7); ++ src += src_stride_4x; ++ LASX_PCKEV_Q_4(src1, src0, src3, src2, src5, src4, src7, src6, ++ src0, src1, src2, src3); ++ src0 = __lasx_xvavg_bu(src0, src2); ++ src1 = __lasx_xvavg_bu(src1, src3); ++ __lasx_xvstelm_d(src0, dst, 0, 0); ++ __lasx_xvstelm_d(src0, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src0, dst, 0, 2); ++ __lasx_xvstelm_d(src0, dst + 8, 0, 3); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src1, dst, 0, 0); ++ __lasx_xvstelm_d(src1, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src1, dst, 0, 2); ++ __lasx_xvstelm_d(src1, dst + 8, 0, 3); ++ dst += dst_stride; ++ ++ LASX_LD_4(src, src_stride, src0, src1, src2, src3); ++ LASX_LD_4((src + 1), src_stride, src4, src5, src6, src7); ++ src += src_stride_4x; ++ LASX_PCKEV_Q_4(src1, src0, src3, src2, src5, src4, src7, src6, ++ src0, src1, src2, src3); ++ src0 = __lasx_xvavg_bu(src0, src2); ++ src1 = __lasx_xvavg_bu(src1, src3); ++ __lasx_xvstelm_d(src0, dst, 0, 0); ++ __lasx_xvstelm_d(src0, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src0, dst, 0, 2); ++ __lasx_xvstelm_d(src0, dst + 8, 0, 3); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src1, dst, 0, 0); ++ __lasx_xvstelm_d(src1, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src1, dst, 0, 2); ++ __lasx_xvstelm_d(src1, dst + 8, 0, 3); ++} ++ ++static void common_hz_bil_no_rnd_8x16_lasx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride) ++{ ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7; ++ int32_t src_stride_4x = src_stride << 2; ++ ++ LASX_LD_4(src, src_stride, src0, src1, src2, src3); ++ LASX_LD_4((src + 1), src_stride, src4, src5, src6, src7); ++ src += src_stride_4x; ++ LASX_PCKEV_Q_4(src1, src0, src3, src2, src5, src4, src7, src6, ++ src0, src1, src2, src3); ++ src0 = __lasx_xvavg_bu(src0, src2); ++ src1 = __lasx_xvavg_bu(src1, src3); ++ __lasx_xvstelm_d(src0, dst, 0, 0); ++ __lasx_xvstelm_d(src0, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src0, dst, 0, 2); ++ __lasx_xvstelm_d(src0, dst + 8, 0, 3); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src1, dst, 0, 0); ++ __lasx_xvstelm_d(src1, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src1, dst, 0, 2); ++ __lasx_xvstelm_d(src1, dst + 8, 0, 3); ++ dst += dst_stride; ++ ++ LASX_LD_4(src, src_stride, src0, src1, src2, src3); ++ LASX_LD_4((src + 1), src_stride, src4, src5, src6, src7); ++ src += src_stride_4x; ++ LASX_PCKEV_Q_4(src1, src0, src3, src2, src5, src4, src7, src6, ++ src0, src1, src2, src3); ++ src0 = __lasx_xvavg_bu(src0, src2); ++ src1 = __lasx_xvavg_bu(src1, src3); ++ __lasx_xvstelm_d(src0, dst, 0, 0); ++ __lasx_xvstelm_d(src0, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src0, dst, 0, 2); ++ __lasx_xvstelm_d(src0, dst + 8, 0, 3); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src1, dst, 0, 0); ++ __lasx_xvstelm_d(src1, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src1, dst, 0, 2); ++ __lasx_xvstelm_d(src1, dst + 8, 0, 3); ++} ++ ++void ff_put_no_rnd_pixels16_x2_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int h) ++{ ++ if (h == 16) { ++ common_hz_bil_no_rnd_16x16_lasx(pixels, line_size, block, line_size); ++ } else if (h == 8) { ++ common_hz_bil_no_rnd_8x16_lasx(pixels, line_size, block, line_size); ++ } ++} ++ ++static void common_vt_bil_no_rnd_16x16_lasx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride) ++{ ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8; ++ __m256i src9, src10, src11, src12, src13, src14, src15, src16; ++ int32_t src_stride_8x = src_stride << 3; ++ ++ LASX_LD_8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); ++ src += src_stride_8x; ++ LASX_LD_8(src, src_stride, src8, src9, src10, src11, src12, src13, src14, src15); ++ src += src_stride_8x; ++ src16 = LASX_LD(src); ++ ++ LASX_PCKEV_Q_8(src1, src0, src2, src1, src3, src2, src4, src3, ++ src5, src4, src6, src5, src7, src6, src8, src7, ++ src0, src1, src2, src3, src4, src5, src6, src7); ++ LASX_PCKEV_Q_8(src9, src8, src10, src9, src11, src10, src12, src11, ++ src13, src12, src14, src13, src15, src14, src16, src15, ++ src8, src9, src10, src11, src12, src13, src14, src15); ++ src0 = __lasx_xvavg_bu(src0, src1); ++ src2 = __lasx_xvavg_bu(src2, src3); ++ src4 = __lasx_xvavg_bu(src4, src5); ++ src6 = __lasx_xvavg_bu(src6, src7); ++ src8 = __lasx_xvavg_bu(src8, src9); ++ src10 = __lasx_xvavg_bu(src10, src11); ++ src12 = __lasx_xvavg_bu(src12, src13); ++ src14 = __lasx_xvavg_bu(src14, src15); ++ ++ __lasx_xvstelm_d(src0, dst, 0, 0); ++ __lasx_xvstelm_d(src0, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src0, dst, 0, 2); ++ __lasx_xvstelm_d(src0, dst + 8, 0, 3); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src2, dst, 0, 0); ++ __lasx_xvstelm_d(src2, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src2, dst, 0, 2); ++ __lasx_xvstelm_d(src2, dst + 8, 0, 3); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src4, dst, 0, 0); ++ __lasx_xvstelm_d(src4, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src4, dst, 0, 2); ++ __lasx_xvstelm_d(src4, dst + 8, 0, 3); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src6, dst, 0, 0); ++ __lasx_xvstelm_d(src6, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src6, dst, 0, 2); ++ __lasx_xvstelm_d(src6, dst + 8, 0, 3); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src8, dst, 0, 0); ++ __lasx_xvstelm_d(src8, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src8, dst, 0, 2); ++ __lasx_xvstelm_d(src8, dst + 8, 0, 3); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src10, dst, 0, 0); ++ __lasx_xvstelm_d(src10, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src10, dst, 0, 2); ++ __lasx_xvstelm_d(src10, dst + 8, 0, 3); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src12, dst, 0, 0); ++ __lasx_xvstelm_d(src12, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src12, dst, 0, 2); ++ __lasx_xvstelm_d(src12, dst + 8, 0, 3); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src14, dst, 0, 0); ++ __lasx_xvstelm_d(src14, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src14, dst, 0, 2); ++ __lasx_xvstelm_d(src14, dst + 8, 0, 3); ++} ++ ++static void common_vt_bil_no_rnd_8x16_lasx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride) ++{ ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8; ++ int32_t src_stride_8x = src_stride << 3; ++ ++ LASX_LD_8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); ++ src += src_stride_8x; ++ src8 = LASX_LD(src); ++ ++ LASX_PCKEV_Q_8(src1, src0, src2, src1, src3, src2, src4, src3, ++ src5, src4, src6, src5, src7, src6, src8, src7, ++ src0, src1, src2, src3, src4, src5, src6, src7); ++ src0 = __lasx_xvavg_bu(src0, src1); ++ src2 = __lasx_xvavg_bu(src2, src3); ++ src4 = __lasx_xvavg_bu(src4, src5); ++ src6 = __lasx_xvavg_bu(src6, src7); ++ ++ __lasx_xvstelm_d(src0, dst, 0, 0); ++ __lasx_xvstelm_d(src0, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src0, dst, 0, 2); ++ __lasx_xvstelm_d(src0, dst + 8, 0, 3); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src2, dst, 0, 0); ++ __lasx_xvstelm_d(src2, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src2, dst, 0, 2); ++ __lasx_xvstelm_d(src2, dst + 8, 0, 3); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src4, dst, 0, 0); ++ __lasx_xvstelm_d(src4, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src4, dst, 0, 2); ++ __lasx_xvstelm_d(src4, dst + 8, 0, 3); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src6, dst, 0, 0); ++ __lasx_xvstelm_d(src6, dst + 8, 0, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(src6, dst, 0, 2); ++ __lasx_xvstelm_d(src6, dst + 8, 0, 3); ++} ++ ++void ff_put_no_rnd_pixels16_y2_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int h) ++{ ++ if (h == 16) { ++ common_vt_bil_no_rnd_16x16_lasx(pixels, line_size, block, line_size); ++ } else if (h == 8) { ++ common_vt_bil_no_rnd_8x16_lasx(pixels, line_size, block, line_size); ++ } ++} ++ ++static void common_hv_bil_no_rnd_16x16_lasx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride) ++{ ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9; ++ __m256i src10, src11, src12, src13, src14, src15, src16, src17; ++ __m256i sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7; ++ int32_t src_stride_8x = src_stride << 3; ++ ++ LASX_LD_8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); ++ LASX_LD_8((src + 1), src_stride, ++ src9, src10, src11, src12, src13, src14, src15, src16); ++ src += src_stride_8x; ++ src8 = LASX_LD(src); ++ src17 = LASX_LD(src + 1); ++ ++ LASX_ILVL_H_8(src9, src0, src10, src1, src11, src2, src12, src3, ++ src13, src4, src14, src5, src15, src6, src16, src7, ++ src0, src1, src2, src3, src4, src5, src6, src7); ++ LASX_ILVL_H(src17, src8, src8); ++ src0 = __lasx_xvhaddw_hu_bu(src0, src0); ++ src1 = __lasx_xvhaddw_hu_bu(src1, src1); ++ src2 = __lasx_xvhaddw_hu_bu(src2, src2); ++ src3 = __lasx_xvhaddw_hu_bu(src3, src3); ++ src4 = __lasx_xvhaddw_hu_bu(src4, src4); ++ src5 = __lasx_xvhaddw_hu_bu(src5, src5); ++ src6 = __lasx_xvhaddw_hu_bu(src6, src6); ++ src7 = __lasx_xvhaddw_hu_bu(src7, src7); ++ src8 = __lasx_xvhaddw_hu_bu(src8, src8); ++ LASX_ADD_H_8(src0, src1, src1, src2, src2, src3, src3, src4, ++ src4, src5, src5, src6, src6, src7, src7, src8, ++ sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7); ++ sum0 = __lasx_xvaddi_hu(sum0, 1); ++ sum1 = __lasx_xvaddi_hu(sum1, 1); ++ sum2 = __lasx_xvaddi_hu(sum2, 1); ++ sum3 = __lasx_xvaddi_hu(sum3, 1); ++ sum4 = __lasx_xvaddi_hu(sum4, 1); ++ sum5 = __lasx_xvaddi_hu(sum5, 1); ++ sum6 = __lasx_xvaddi_hu(sum6, 1); ++ sum7 = __lasx_xvaddi_hu(sum7, 1); ++ sum0 = __lasx_xvsrai_h(sum0, 2); ++ sum1 = __lasx_xvsrai_h(sum1, 2); ++ sum2 = __lasx_xvsrai_h(sum2, 2); ++ sum3 = __lasx_xvsrai_h(sum3, 2); ++ sum4 = __lasx_xvsrai_h(sum4, 2); ++ sum5 = __lasx_xvsrai_h(sum5, 2); ++ sum6 = __lasx_xvsrai_h(sum6, 2); ++ sum7 = __lasx_xvsrai_h(sum7, 2); ++ LASX_PCKEV_B_4_128SV(sum1, sum0, sum3, sum2, sum5, sum4, sum7, sum6, ++ sum0, sum1, sum2, sum3); ++ LASX_ST_D_2(sum0, 0, 2, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum0, 1, 3, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum1, 0, 2, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum1, 1, 3, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum2, 0, 2, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum2, 1, 3, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum3, 0, 2, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum3, 1, 3, dst, 8); ++ dst += dst_stride; ++ ++ LASX_LD_8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); ++ LASX_LD_8((src + 1), src_stride, ++ src9, src10, src11, src12, src13, src14, src15, src16); ++ src += src_stride_8x; ++ src8 = LASX_LD(src); ++ src17 = LASX_LD(src + 1); ++ ++ LASX_ILVL_H_8(src9, src0, src10, src1, src11, src2, src12, src3, ++ src13, src4, src14, src5, src15, src6, src16, src7, ++ src0, src1, src2, src3, src4, src5, src6, src7); ++ LASX_ILVL_H(src17, src8, src8); ++ src0 = __lasx_xvhaddw_hu_bu(src0, src0); ++ src1 = __lasx_xvhaddw_hu_bu(src1, src1); ++ src2 = __lasx_xvhaddw_hu_bu(src2, src2); ++ src3 = __lasx_xvhaddw_hu_bu(src3, src3); ++ src4 = __lasx_xvhaddw_hu_bu(src4, src4); ++ src5 = __lasx_xvhaddw_hu_bu(src5, src5); ++ src6 = __lasx_xvhaddw_hu_bu(src6, src6); ++ src7 = __lasx_xvhaddw_hu_bu(src7, src7); ++ src8 = __lasx_xvhaddw_hu_bu(src8, src8); ++ LASX_ADD_H_8(src0, src1, src1, src2, src2, src3, src3, src4, ++ src4, src5, src5, src6, src6, src7, src7, src8, ++ sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7); ++ sum0 = __lasx_xvaddi_hu(sum0, 1); ++ sum1 = __lasx_xvaddi_hu(sum1, 1); ++ sum2 = __lasx_xvaddi_hu(sum2, 1); ++ sum3 = __lasx_xvaddi_hu(sum3, 1); ++ sum4 = __lasx_xvaddi_hu(sum4, 1); ++ sum5 = __lasx_xvaddi_hu(sum5, 1); ++ sum6 = __lasx_xvaddi_hu(sum6, 1); ++ sum7 = __lasx_xvaddi_hu(sum7, 1); ++ sum0 = __lasx_xvsrai_h(sum0, 2); ++ sum1 = __lasx_xvsrai_h(sum1, 2); ++ sum2 = __lasx_xvsrai_h(sum2, 2); ++ sum3 = __lasx_xvsrai_h(sum3, 2); ++ sum4 = __lasx_xvsrai_h(sum4, 2); ++ sum5 = __lasx_xvsrai_h(sum5, 2); ++ sum6 = __lasx_xvsrai_h(sum6, 2); ++ sum7 = __lasx_xvsrai_h(sum7, 2); ++ LASX_PCKEV_B_4_128SV(sum1, sum0, sum3, sum2, sum5, sum4, sum7, sum6, ++ sum0, sum1, sum2, sum3); ++ LASX_ST_D_2(sum0, 0, 2, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum0, 1, 3, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum1, 0, 2, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum1, 1, 3, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum2, 0, 2, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum2, 1, 3, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum3, 0, 2, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum3, 1, 3, dst, 8); ++} ++ ++static void common_hv_bil_no_rnd_8x16_lasx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride) ++{ ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9; ++ __m256i src10, src11, src12, src13, src14, src15, src16, src17; ++ __m256i sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7; ++ int32_t src_stride_8x = src_stride << 3; ++ ++ LASX_LD_8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); ++ LASX_LD_8((src + 1), src_stride, ++ src9, src10, src11, src12, src13, src14, src15, src16); ++ src += src_stride_8x; ++ src8 = LASX_LD(src); ++ src17 = LASX_LD(src + 1); ++ ++ LASX_ILVL_H_8(src9, src0, src10, src1, src11, src2, src12, src3, ++ src13, src4, src14, src5, src15, src6, src16, src7, ++ src0, src1, src2, src3, src4, src5, src6, src7); ++ LASX_ILVL_H(src17, src8, src8); ++ src0 = __lasx_xvhaddw_hu_bu(src0, src0); ++ src1 = __lasx_xvhaddw_hu_bu(src1, src1); ++ src2 = __lasx_xvhaddw_hu_bu(src2, src2); ++ src3 = __lasx_xvhaddw_hu_bu(src3, src3); ++ src4 = __lasx_xvhaddw_hu_bu(src4, src4); ++ src5 = __lasx_xvhaddw_hu_bu(src5, src5); ++ src6 = __lasx_xvhaddw_hu_bu(src6, src6); ++ src7 = __lasx_xvhaddw_hu_bu(src7, src7); ++ src8 = __lasx_xvhaddw_hu_bu(src8, src8); ++ LASX_ADD_H_8(src0, src1, src1, src2, src2, src3, src3, src4, ++ src4, src5, src5, src6, src6, src7, src7, src8, ++ sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7); ++ sum0 = __lasx_xvaddi_hu(sum0, 1); ++ sum1 = __lasx_xvaddi_hu(sum1, 1); ++ sum2 = __lasx_xvaddi_hu(sum2, 1); ++ sum3 = __lasx_xvaddi_hu(sum3, 1); ++ sum4 = __lasx_xvaddi_hu(sum4, 1); ++ sum5 = __lasx_xvaddi_hu(sum5, 1); ++ sum6 = __lasx_xvaddi_hu(sum6, 1); ++ sum7 = __lasx_xvaddi_hu(sum7, 1); ++ sum0 = __lasx_xvsrai_h(sum0, 2); ++ sum1 = __lasx_xvsrai_h(sum1, 2); ++ sum2 = __lasx_xvsrai_h(sum2, 2); ++ sum3 = __lasx_xvsrai_h(sum3, 2); ++ sum4 = __lasx_xvsrai_h(sum4, 2); ++ sum5 = __lasx_xvsrai_h(sum5, 2); ++ sum6 = __lasx_xvsrai_h(sum6, 2); ++ sum7 = __lasx_xvsrai_h(sum7, 2); ++ LASX_PCKEV_B_4_128SV(sum1, sum0, sum3, sum2, sum5, sum4, sum7, sum6, ++ sum0, sum1, sum2, sum3); ++ LASX_ST_D_2(sum0, 0, 2, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum0, 1, 3, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum1, 0, 2, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum1, 1, 3, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum2, 0, 2, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum2, 1, 3, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum3, 0, 2, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum3, 1, 3, dst, 8); ++} ++ ++void ff_put_no_rnd_pixels16_xy2_8_lasx(uint8_t *block, ++ const uint8_t *pixels, ++ ptrdiff_t line_size, int h) ++{ ++ if (h == 16) { ++ common_hv_bil_no_rnd_16x16_lasx(pixels, line_size, block, line_size); ++ } else if (h == 8) { ++ common_hv_bil_no_rnd_8x16_lasx(pixels, line_size, block, line_size); ++ } ++} ++ ++static void common_hz_bil_no_rnd_8x8_lasx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride) ++{ ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m256i src8, src9, src10, src11, src12, src13, src14, src15; ++ ++ LASX_LD_8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); ++ LASX_LD_8((src + 1), src_stride, ++ src8, src9, src10, src11, src12, src13, src14, src15); ++ LASX_PCKEV_D_4_128SV(src1, src0, src3, src2, src5, src4, src7, src6, ++ src0, src1, src2, src3); ++ LASX_PCKEV_D_4_128SV(src9, src8, src11, src10, src13, src12, src15, src14, ++ src4, src5, src6, src7); ++ LASX_PCKEV_Q_4(src1, src0, src3, src2, src5, src4, src7, src6, ++ src0, src1, src2, src3); ++ src0 = __lasx_xvavg_bu(src0, src2); ++ src1 = __lasx_xvavg_bu(src1, src3); ++ LASX_ST_D_4(src0, 0, 1, 2, 3, dst, dst_stride); ++ dst += (dst_stride << 2); ++ LASX_ST_D_4(src1, 0, 1, 2, 3, dst, dst_stride); ++} ++ ++static void common_hz_bil_no_rnd_4x8_lasx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride) ++{ ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7; ++ LASX_LD_4(src, src_stride, src0, src1, src2, src3); ++ LASX_LD_4((src + 1), src_stride, src4, src5, src6, src7); ++ LASX_PCKEV_D_4_128SV(src1, src0, src3, src2, src5, src4, src7, src6, ++ src0, src1, src2, src3); ++ LASX_PCKEV_Q_2(src1, src0, src3, src2, src0, src1); ++ src0 = __lasx_xvavg_bu(src0, src1); ++ LASX_ST_D_4(src0, 0, 1, 2, 3, dst, dst_stride); ++} ++ ++void ff_put_no_rnd_pixels8_x2_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int h) ++{ ++ if (h == 8) { ++ common_hz_bil_no_rnd_8x8_lasx(pixels, line_size, block, line_size); ++ } else if (h == 4) { ++ common_hz_bil_no_rnd_4x8_lasx(pixels, line_size, block, line_size); ++ } ++} ++ ++static void common_vt_bil_no_rnd_8x8_lasx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride) ++{ ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8; ++ ++ LASX_LD_8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); ++ src += (src_stride << 3); ++ src8 = LASX_LD(src); ++ ++ LASX_PCKEV_D_4_128SV(src1, src0, src2, src1, src3, src2, src4, src3, ++ src0, src1, src2, src3); ++ LASX_PCKEV_D_4_128SV(src5, src4, src6, src5, src7, src6, src8, src7, ++ src4, src5, src6, src7); ++ LASX_PCKEV_Q_4(src2, src0, src3, src1, src6, src4, src7, src5, ++ src0, src1, src2, src3); ++ src0 = __lasx_xvavg_bu(src0, src1); ++ src1 = __lasx_xvavg_bu(src2, src3); ++ LASX_ST_D_4(src0, 0, 1, 2, 3, dst, dst_stride); ++ dst += (dst_stride << 2); ++ LASX_ST_D_4(src1, 0, 1, 2, 3, dst, dst_stride); ++} ++ ++static void common_vt_bil_no_rnd_4x8_lasx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride) ++{ ++ __m256i src0, src1, src2, src3, src4; ++ ++ LASX_LD_4(src, src_stride, src0, src1, src2, src3); ++ src += (src_stride << 2); ++ src4 = LASX_LD(src); ++ LASX_PCKEV_D_4_128SV(src1, src0, src2, src1, src3, src2, src4, src3, ++ src0, src1, src2, src3); ++ LASX_PCKEV_Q_2(src2, src0, src3, src1, src0, src1); ++ src0 = __lasx_xvavg_bu(src0, src1); ++ LASX_ST_D_4(src0, 0, 1, 2, 3, dst, dst_stride); ++} ++ ++void ff_put_no_rnd_pixels8_y2_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int h) ++{ ++ if (h == 8) { ++ common_vt_bil_no_rnd_8x8_lasx(pixels, line_size, block, line_size); ++ } else if (h == 4) { ++ common_vt_bil_no_rnd_4x8_lasx(pixels, line_size, block, line_size); ++ } ++} ++ ++static void common_hv_bil_no_rnd_8x8_lasx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride) ++{ ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m256i src8, src9, src10, src11, src12, src13, src14, src15, src16, src17; ++ __m256i sum0, sum1, sum2, sum3; ++ ++ LASX_LD_8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); ++ LASX_LD_8((src + 1), src_stride, ++ src9, src10, src11, src12, src13, src14, src15, src16); ++ src += (src_stride << 3); ++ src8 = LASX_LD(src); ++ src17 = LASX_LD(src + 1); ++ ++ LASX_ILVL_B_8_128SV(src9, src0, src10, src1, src11, src2, src12, src3, ++ src13, src4, src14, src5, src15, src6, src16, src7, ++ src0, src1, src2, src3, src4, src5, src6, src7); ++ LASX_ILVL_B_128SV(src17, src8, src8); ++ LASX_PCKEV_Q_8(src1, src0, src2, src1, src3, src2, src4, src3, ++ src5, src4, src6, src5, src7, src6, src8, src7, ++ src0, src1, src2, src3, src4, src5, src6, src7); ++ src0 = __lasx_xvhaddw_hu_bu(src0, src0); ++ src1 = __lasx_xvhaddw_hu_bu(src1, src1); ++ src2 = __lasx_xvhaddw_hu_bu(src2, src2); ++ src3 = __lasx_xvhaddw_hu_bu(src3, src3); ++ src4 = __lasx_xvhaddw_hu_bu(src4, src4); ++ src5 = __lasx_xvhaddw_hu_bu(src5, src5); ++ src6 = __lasx_xvhaddw_hu_bu(src6, src6); ++ src7 = __lasx_xvhaddw_hu_bu(src7, src7); ++ LASX_ADD_H_4(src0, src1, src2, src3, src4, src5, src6, src7, ++ sum0, sum1, sum2, sum3); ++ sum0 = __lasx_xvaddi_hu(sum0, 1); ++ sum1 = __lasx_xvaddi_hu(sum1, 1); ++ sum2 = __lasx_xvaddi_hu(sum2, 1); ++ sum3 = __lasx_xvaddi_hu(sum3, 1); ++ sum0 = __lasx_xvsrai_h(sum0, 2); ++ sum1 = __lasx_xvsrai_h(sum1, 2); ++ sum2 = __lasx_xvsrai_h(sum2, 2); ++ sum3 = __lasx_xvsrai_h(sum3, 2); ++ LASX_PCKEV_B_2_128SV(sum1, sum0, sum3, sum2, sum0, sum1); ++ LASX_ST_D_4(sum0, 0, 2, 1, 3, dst, dst_stride); ++ dst += (dst_stride << 2); ++ LASX_ST_D_4(sum1, 0, 2, 1, 3, dst, dst_stride); ++} ++ ++static void common_hv_bil_no_rnd_4x8_lasx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride) ++{ ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m256i src8, src9, sum0, sum1; ++ ++ LASX_LD_4(src, src_stride, src0, src1, src2, src3); ++ LASX_LD_4((src + 1), src_stride, src5, src6, src7, src8); ++ src += (src_stride << 2); ++ src4 = LASX_LD(src); ++ src9 = LASX_LD(src + 1); ++ ++ LASX_ILVL_B_4_128SV(src5, src0, src6, src1, src7, src2, src8, src3, ++ src0, src1, src2, src3); ++ LASX_ILVL_B_128SV(src9, src4, src4); ++ LASX_PCKEV_Q_4(src1, src0, src2, src1, src3, src2, src4, src3, ++ src0, src1, src2, src3); ++ src0 = __lasx_xvhaddw_hu_bu(src0, src0); ++ src1 = __lasx_xvhaddw_hu_bu(src1, src1); ++ src2 = __lasx_xvhaddw_hu_bu(src2, src2); ++ src3 = __lasx_xvhaddw_hu_bu(src3, src3); ++ LASX_ADD_H_2(src0, src1, src2, src3, sum0, sum1); ++ sum0 = __lasx_xvaddi_hu(sum0, 1); ++ sum1 = __lasx_xvaddi_hu(sum1, 1); ++ sum0 = __lasx_xvsrai_h(sum0, 2); ++ sum1 = __lasx_xvsrai_h(sum1, 2); ++ LASX_PCKEV_B_128SV(sum1, sum0, sum0); ++ LASX_ST_D_4(sum0, 0, 2, 1, 3, dst, dst_stride); ++} ++ ++void ff_put_no_rnd_pixels8_xy2_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int h) ++{ ++ if (h == 8) { ++ common_hv_bil_no_rnd_8x8_lasx(pixels, line_size, block, line_size); ++ } else if (h == 4) { ++ common_hv_bil_no_rnd_4x8_lasx(pixels, line_size, block, line_size); ++ } ++} ++ ++static void common_hv_bil_16w_lasx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ uint8_t height) ++{ ++ uint8_t loop_cnt; ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9; ++ __m256i src10, src11, src12, src13, src14, src15, src16, src17; ++ __m256i sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7; ++ int32_t src_stride_8x = (src_stride << 3); ++ ++ for (loop_cnt = (height >> 3); loop_cnt--;) { ++ LASX_LD_8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); ++ LASX_LD_8((src + 1), src_stride, ++ src9, src10, src11, src12, src13, src14, src15, src16); ++ src += src_stride_8x; ++ ++ src8 = LASX_LD(src); ++ src17 = LASX_LD(src + 1); ++ ++ LASX_ILVL_H_8(src9, src0, src10, src1, src11, src2, src12, src3, ++ src13, src4, src14, src5, src15, src6, src16, src7, ++ src0, src1, src2, src3, src4, src5, src6, src7); ++ LASX_ILVL_H(src17, src8, src8); ++ src0 = __lasx_xvhaddw_hu_bu(src0, src0); ++ src1 = __lasx_xvhaddw_hu_bu(src1, src1); ++ src2 = __lasx_xvhaddw_hu_bu(src2, src2); ++ src3 = __lasx_xvhaddw_hu_bu(src3, src3); ++ src4 = __lasx_xvhaddw_hu_bu(src4, src4); ++ src5 = __lasx_xvhaddw_hu_bu(src5, src5); ++ src6 = __lasx_xvhaddw_hu_bu(src6, src6); ++ src7 = __lasx_xvhaddw_hu_bu(src7, src7); ++ src8 = __lasx_xvhaddw_hu_bu(src8, src8); ++ LASX_ADD_H_8(src0, src1, src1, src2, src2, src3, src3, src4, ++ src4, src5, src5, src6, src6, src7, src7, src8, ++ sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7); ++ LASX_SRARI_H_4(sum0, sum1, sum2, sum3, sum0, sum1, sum2, sum3, 2); ++ LASX_SRARI_H_4(sum4, sum5, sum6, sum7, sum4, sum5, sum6, sum7, 2); ++ LASX_PCKEV_B_4_128SV(sum1, sum0, sum3, sum2, sum5, sum4, sum7, sum6, ++ sum0, sum1, sum2, sum3); ++ LASX_ST_D_2(sum0, 0, 2, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum0, 1, 3, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum1, 0, 2, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum1, 1, 3, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum2, 0, 2, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum2, 1, 3, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum3, 0, 2, dst, 8); ++ dst += dst_stride; ++ LASX_ST_D_2(sum3, 1, 3, dst, 8); ++ dst += dst_stride; ++ } ++} ++ ++void ff_put_pixels16_xy2_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int h) ++{ ++ common_hv_bil_16w_lasx(pixels, line_size, block, line_size, h); ++} ++ ++static void common_hv_bil_8w_lasx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ uint8_t height) ++{ ++ uint8_t loop_cnt; ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m256i src8, src9, sum0, sum1; ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ ++ src0 = LASX_LD(src); ++ src5 = LASX_LD(src + 1); ++ src += src_stride; ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ LASX_LD_4(src, src_stride, src1, src2, src3, src4); ++ LASX_LD_4((src + 1), src_stride, src6, src7, src8, src9); ++ src += src_stride_4x; ++ LASX_ILVL_B_4_128SV(src5, src0, src6, src1, src7, src2, src8, src3, ++ src0, src1, src2, src3); ++ LASX_ILVL_B_128SV(src9, src4, src5); ++ LASX_PCKEV_Q_4(src1, src0, src2, src1, src3, src2, src5, src3, ++ src0, src1, src2, src3); ++ src0 = __lasx_xvhaddw_hu_bu(src0, src0); ++ src1 = __lasx_xvhaddw_hu_bu(src1, src1); ++ src2 = __lasx_xvhaddw_hu_bu(src2, src2); ++ src3 = __lasx_xvhaddw_hu_bu(src3, src3); ++ LASX_ADD_H_2(src0, src1, src2, src3, sum0, sum1); ++ LASX_SRARI_H_2(sum0, sum1, sum0, sum1, 2); ++ LASX_PCKEV_B_128SV(sum1, sum0, sum0); ++ LASX_ST_D_4(sum0, 0, 2, 1, 3, dst, dst_stride); ++ dst += dst_stride_4x; ++ src0 = src4; ++ src5 = src9; ++ } ++} ++ ++void ff_put_pixels8_xy2_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int h) ++{ ++ common_hv_bil_8w_lasx(pixels, line_size, block, line_size, h); ++} +diff --git a/libavcodec/loongarch/hpeldsp_lasx.h b/libavcodec/loongarch/hpeldsp_lasx.h +new file mode 100644 +index 0000000000..0477cb54ea +--- /dev/null ++++ b/libavcodec/loongarch/hpeldsp_lasx.h +@@ -0,0 +1,57 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Shiyou Yin ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef AVCODEC_LOONGARCH_HPELDSP_LASX_H ++#define AVCODEC_LOONGARCH_HPELDSP_LASX_H ++ ++#include ++#include "libavutil/attributes.h" ++ ++void ff_put_pixels8_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int h); ++void ff_put_pixels8_x2_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int32_t h); ++void ff_put_pixels8_y2_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int32_t h); ++void ff_put_pixels16_8_lsx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int h); ++void ff_put_pixels16_x2_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int32_t h); ++void ff_put_pixels16_y2_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int32_t h); ++void ff_put_no_rnd_pixels16_x2_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int h); ++void ff_put_no_rnd_pixels16_y2_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int h); ++void ff_put_no_rnd_pixels16_xy2_8_lasx(uint8_t *block, ++ const uint8_t *pixels, ++ ptrdiff_t line_size, int h); ++void ff_put_no_rnd_pixels8_x2_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int h); ++void ff_put_no_rnd_pixels8_y2_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int h); ++void ff_put_no_rnd_pixels8_xy2_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int h); ++void ff_put_pixels8_xy2_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int h); ++void ff_put_pixels16_xy2_8_lasx(uint8_t *block, const uint8_t *pixels, ++ ptrdiff_t line_size, int h); ++#endif +diff --git a/libavcodec/loongarch/idctdsp_init_loongarch.c b/libavcodec/loongarch/idctdsp_init_loongarch.c +new file mode 100644 +index 0000000000..9d1d21cc18 +--- /dev/null ++++ b/libavcodec/loongarch/idctdsp_init_loongarch.c +@@ -0,0 +1,45 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hao Chen ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/loongarch/cpu.h" ++#include "idctdsp_loongarch.h" ++#include "libavcodec/xvididct.h" ++ ++av_cold void ff_idctdsp_init_loongarch(IDCTDSPContext *c, AVCodecContext *avctx, ++ unsigned high_bit_depth) ++{ ++ int cpu_flags = av_get_cpu_flags(); ++ ++ if (have_lasx(cpu_flags)) { ++ if ((avctx->lowres != 1) && (avctx->lowres != 2) && (avctx->lowres != 3) && ++ (avctx->bits_per_raw_sample != 10) && ++ (avctx->bits_per_raw_sample != 12) && ++ (avctx->idct_algo == FF_IDCT_AUTO)) { ++ c->idct_put = ff_simple_idct_put_lasx; ++ c->idct_add = ff_simple_idct_add_lasx; ++ c->idct = ff_simple_idct_lasx; ++ c->perm_type = FF_IDCT_PERM_NONE; ++ } ++ c->put_pixels_clamped = ff_put_pixels_clamped_lasx; ++ c->put_signed_pixels_clamped = ff_put_signed_pixels_clamped_lasx; ++ c->add_pixels_clamped = ff_add_pixels_clamped_lasx; ++ } ++} +diff --git a/libavcodec/loongarch/idctdsp_lasx.c b/libavcodec/loongarch/idctdsp_lasx.c +new file mode 100644 +index 0000000000..78f15f17ee +--- /dev/null ++++ b/libavcodec/loongarch/idctdsp_lasx.c +@@ -0,0 +1,116 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hao Chen ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "idctdsp_loongarch.h" ++#include "libavutil/loongarch/generic_macros_lasx.h" ++ ++static void put_pixels_clamped_lasx(const int16_t *block, uint8_t *pixels, ++ int32_t stride) ++{ ++ __m256i b0, b1, b2, b3; ++ __m256i temp0, temp1; ++ ++ LASX_LD_4(block, 16, b0, b1, b2, b3); ++ LASX_CLIP_H_0_255_4(b0, b1, b2, b3, b0, b1, b2, b3); ++ LASX_PCKEV_B_2_128SV(b1, b0, b3, b2, temp0, temp1); ++ LASX_ST_D_4(temp0, 0, 2, 1, 3, pixels, stride); ++ pixels += (stride << 2); ++ LASX_ST_D_4(temp1, 0, 2, 1, 3, pixels, stride); ++} ++ ++static void put_signed_pixels_clamped_lasx(const int16_t *block, uint8_t *pixels, ++ int32_t stride) ++{ ++ __m256i b0, b1, b2, b3; ++ __m256i temp0, temp1; ++ __m256i const_128 = {0x0080008000800080, 0x0080008000800080, 0x0080008000800080, 0x0080008000800080}; ++ ++ LASX_LD_4(block, 16, b0, b1, b2, b3); ++ b0 = __lasx_xvadd_h(b0, const_128); ++ b1 = __lasx_xvadd_h(b1, const_128); ++ b2 = __lasx_xvadd_h(b2, const_128); ++ b3 = __lasx_xvadd_h(b3, const_128); ++ LASX_CLIP_H_0_255_4(b0, b1, b2, b3, b0, b1, b2, b3); ++ LASX_PCKEV_B_2_128SV(b1, b0, b3, b2, temp0, temp1); ++ LASX_ST_D_4(temp0, 0, 2, 1, 3, pixels, stride); ++ pixels += (stride << 2); ++ LASX_ST_D_4(temp1, 0, 2, 1, 3, pixels, stride); ++} ++ ++static void add_pixels_clamped_lasx(const int16_t *block, uint8_t *pixels, ++ int32_t stride) ++{ ++ __m256i b0, b1, b2, b3; ++ __m256i p0, p1, p2, p3, p4, p5, p6, p7; ++ __m256i temp0, temp1, temp2, temp3; ++ uint8_t *pix = pixels; ++ ++ LASX_LD_4(block, 16, b0, b1, b2, b3); ++ p0 = __lasx_xvldrepl_d(pix, 0); ++ pix += stride; ++ p1 = __lasx_xvldrepl_d(pix, 0); ++ pix += stride; ++ p2 = __lasx_xvldrepl_d(pix, 0); ++ pix += stride; ++ p3 = __lasx_xvldrepl_d(pix, 0); ++ pix += stride; ++ p4 = __lasx_xvldrepl_d(pix, 0); ++ pix += stride; ++ p5 = __lasx_xvldrepl_d(pix, 0); ++ pix += stride; ++ p6 = __lasx_xvldrepl_d(pix, 0); ++ pix += stride; ++ p7 = __lasx_xvldrepl_d(pix, 0); ++ temp0 = __lasx_xvpermi_q(p1, p0, 0x20); ++ temp1 = __lasx_xvpermi_q(p3, p2, 0x20); ++ temp2 = __lasx_xvpermi_q(p5, p4, 0x20); ++ temp3 = __lasx_xvpermi_q(p7, p6, 0x20); ++ LASX_ADDW_H_H_BU_128SV(b0, temp0, temp0); ++ LASX_ADDW_H_H_BU_128SV(b1, temp1, temp1); ++ LASX_ADDW_H_H_BU_128SV(b2, temp2, temp2); ++ LASX_ADDW_H_H_BU_128SV(b3, temp3, temp3); ++ LASX_CLIP_H_0_255_4(temp0, temp1, temp2, temp3, temp0, temp1, temp2, temp3); ++ LASX_PCKEV_B_2_128SV(temp1, temp0, temp3, temp2, temp0, temp1); ++ LASX_ST_D_4(temp0, 0, 2, 1, 3, pixels, stride); ++ pixels += (stride << 2); ++ LASX_ST_D_4(temp1, 0, 2, 1, 3, pixels, stride); ++} ++ ++void ff_put_pixels_clamped_lasx(const int16_t *block, ++ uint8_t *av_restrict pixels, ++ ptrdiff_t line_size) ++{ ++ put_pixels_clamped_lasx(block, pixels, line_size); ++} ++ ++void ff_put_signed_pixels_clamped_lasx(const int16_t *block, ++ uint8_t *av_restrict pixels, ++ ptrdiff_t line_size) ++{ ++ put_signed_pixels_clamped_lasx(block, pixels, line_size); ++} ++ ++void ff_add_pixels_clamped_lasx(const int16_t *block, ++ uint8_t *av_restrict pixels, ++ ptrdiff_t line_size) ++{ ++ add_pixels_clamped_lasx(block, pixels, line_size); ++} +diff --git a/libavcodec/loongarch/idctdsp_loongarch.h b/libavcodec/loongarch/idctdsp_loongarch.h +new file mode 100644 +index 0000000000..f36e0f334a +--- /dev/null ++++ b/libavcodec/loongarch/idctdsp_loongarch.h +@@ -0,0 +1,42 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hao Chen ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef AVCODEC_LOONGARCH_IDCTDSP_LOONGARCH_H ++#define AVCODEC_LOONGARCH_IDCTDSP_LOONGARCH_H ++ ++#include ++#include ++#include "../mpegvideo.h" ++ ++void ff_simple_idct_lasx(int16_t *block); ++void ff_simple_idct_put_lasx(uint8_t *dest, ptrdiff_t stride_dst, int16_t *block); ++void ff_simple_idct_add_lasx(uint8_t *dest, ptrdiff_t stride_dst, int16_t *block); ++void ff_put_pixels_clamped_lasx(const int16_t *block, ++ uint8_t *av_restrict pixels, ++ ptrdiff_t line_size); ++void ff_put_signed_pixels_clamped_lasx(const int16_t *block, ++ uint8_t *av_restrict pixels, ++ ptrdiff_t line_size); ++void ff_add_pixels_clamped_lasx(const int16_t *block, ++ uint8_t *av_restrict pixels, ++ ptrdiff_t line_size); ++ ++#endif /* AVCODEC_LOONGARCH_IDCTDSP_LOONGARCH_H */ +diff --git a/libavcodec/loongarch/simple_idct_lasx.c b/libavcodec/loongarch/simple_idct_lasx.c +new file mode 100644 +index 0000000000..38e879cfa8 +--- /dev/null ++++ b/libavcodec/loongarch/simple_idct_lasx.c +@@ -0,0 +1,320 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hao Chen ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/loongarch/generic_macros_lasx.h" ++#include "idctdsp_loongarch.h" ++ ++#define LASX_TRANSPOSE4x16(in_0, in_1, in_2, in_3, out_0, out_1, out_2, out_3) \ ++{ \ ++ __m256i temp_0, temp_1, temp_2, temp_3; \ ++ __m256i temp_4, temp_5, temp_6, temp_7; \ ++ temp_0 = __lasx_xvpermi_q(in_2, in_0, 0x20); \ ++ temp_1 = __lasx_xvpermi_q(in_2, in_0, 0x31); \ ++ temp_2 = __lasx_xvpermi_q(in_3, in_1, 0x20); \ ++ temp_3 = __lasx_xvpermi_q(in_3, in_1, 0x31); \ ++ LASX_ILVLH_H_128SV(temp_1, temp_0, temp_5, temp_4); \ ++ LASX_ILVLH_H_128SV(temp_3, temp_2, temp_7, temp_6); \ ++ LASX_ILVLH_W_128SV(temp_6, temp_4, out_1, out_0); \ ++ LASX_ILVLH_W_128SV(temp_7, temp_5, out_3, out_2); \ ++} ++ ++#define LASX_IDCTROWCONDDC \ ++ const_val = 16383 * ((1 << 19) / 16383); \ ++ const_val1 = __lasx_xvinsgr2vr_w(const_val0, const_val, 0); \ ++ const_val1 = __lasx_xvreplve0_w(const_val1); \ ++ LASX_LD_4(block, 16, in0, in1, in2, in3); \ ++ LASX_TRANSPOSE4x16(in0, in1, in2, in3, in0, in1, in2, in3); \ ++ a0 = __lasx_xvpermi_d(in0, 0xD8); \ ++ a0 = __lasx_vext2xv_w_h(a0); \ ++ temp = __lasx_xvslli_w(a0, 3); \ ++ a1 = __lasx_xvpermi_d(in0, 0x8D); \ ++ a1 = __lasx_vext2xv_w_h(a1); \ ++ a2 = __lasx_xvpermi_d(in1, 0xD8); \ ++ a2 = __lasx_vext2xv_w_h(a2); \ ++ a3 = __lasx_xvpermi_d(in1, 0x8D); \ ++ a3 = __lasx_vext2xv_w_h(a3); \ ++ b0 = __lasx_xvpermi_d(in2, 0xD8); \ ++ b0 = __lasx_vext2xv_w_h(b0); \ ++ b1 = __lasx_xvpermi_d(in2, 0x8D); \ ++ b1 = __lasx_vext2xv_w_h(b1); \ ++ b2 = __lasx_xvpermi_d(in3, 0xD8); \ ++ b2 = __lasx_vext2xv_w_h(b2); \ ++ b3 = __lasx_xvpermi_d(in3, 0x8D); \ ++ b3 = __lasx_vext2xv_w_h(b3); \ ++ select_vec = a0 | a1 | a2 | a3 | b0 | b1 | b2 | b3; \ ++ select_vec = __lasx_xvslti_wu(select_vec, 1); \ ++ \ ++ w2 = __lasx_xvrepl128vei_h(w1, 2); \ ++ w3 = __lasx_xvrepl128vei_h(w1, 3); \ ++ w4 = __lasx_xvrepl128vei_h(w1, 4); \ ++ w5 = __lasx_xvrepl128vei_h(w1, 5); \ ++ w6 = __lasx_xvrepl128vei_h(w1, 6); \ ++ w7 = __lasx_xvrepl128vei_h(w1, 7); \ ++ w1 = __lasx_xvrepl128vei_h(w1, 1); \ ++ \ ++ /* part of FUNC6(idctRowCondDC) */ \ ++ LASX_MADDWL_W_H_128SV(const_val0, in0, w4, temp0); \ ++ LASX_MULWL_W_H_2_128SV(in1, w2, in1, w6, temp1, temp2); \ ++ a0 = __lasx_xvadd_w(temp0, temp1); \ ++ a1 = __lasx_xvadd_w(temp0, temp2); \ ++ a2 = __lasx_xvsub_w(temp0, temp2); \ ++ a3 = __lasx_xvsub_w(temp0, temp1); \ ++ \ ++ LASX_ILVH_H_2_128SV(in1, in0, w3, w1, temp0, temp1); \ ++ LASX_DP2_W_H(temp0, temp1, b0); \ ++ temp1 = __lasx_xvneg_h(w7); \ ++ LASX_ILVL_H_128SV(temp1, w3, temp2); \ ++ LASX_DP2_W_H(temp0, temp2, b1); \ ++ temp1 = __lasx_xvneg_h(w1); \ ++ LASX_ILVL_H_128SV(temp1, w5, temp2); \ ++ LASX_DP2_W_H(temp0, temp2, b2); \ ++ temp1 = __lasx_xvneg_h(w5); \ ++ LASX_ILVL_H_128SV(temp1, w7, temp2); \ ++ LASX_DP2_W_H(temp0, temp2, b3); \ ++ \ ++ /* if (AV_RAN64A(row + 4)) */ \ ++ LASX_ILVL_H_2_128SV(in3, in2, w6, w4, temp0, temp1); \ ++ LASX_DP2ADD_W_H(a0, temp0, temp1, a0); \ ++ LASX_ILVL_H_128SV(w2, w4, temp1); \ ++ LASX_DP2SUB_W_H(a1, temp0, temp1, a1); \ ++ temp1 = __lasx_xvneg_h(w4); \ ++ LASX_ILVL_H_128SV(w2, temp1, temp2); \ ++ LASX_DP2ADD_W_H(a2, temp0, temp2, a2); \ ++ temp1 = __lasx_xvneg_h(w6); \ ++ LASX_ILVL_H_128SV(temp1, w4, temp2); \ ++ LASX_DP2ADD_W_H(a3, temp0, temp2, a3); \ ++ \ ++ LASX_ILVH_H_2_128SV(in3, in2, w7, w5, temp0, temp1); \ ++ LASX_DP2ADD_W_H(b0, temp0, temp1, b0); \ ++ LASX_ILVL_H_2_128SV(w5, w1, w3, w7, temp1, temp2); \ ++ LASX_DP2SUB_W_H(b1, temp0, temp1, b1); \ ++ LASX_DP2ADD_W_H(b2, temp0, temp2, b2); \ ++ temp1 = __lasx_xvneg_h(w1); \ ++ LASX_ILVL_H_128SV(temp1, w3, temp2); \ ++ LASX_DP2ADD_W_H(b3, temp0, temp2, b3); \ ++ \ ++ temp0 = __lasx_xvadd_w(a0, b0); \ ++ temp1 = __lasx_xvadd_w(a1, b1); \ ++ temp2 = __lasx_xvadd_w(a2, b2); \ ++ temp3 = __lasx_xvadd_w(a3, b3); \ ++ a0 = __lasx_xvsub_w(a0, b0); \ ++ a1 = __lasx_xvsub_w(a1, b1); \ ++ a2 = __lasx_xvsub_w(a2, b2); \ ++ a3 = __lasx_xvsub_w(a3, b3); \ ++ LASX_SRAI_W_8(temp0, temp1, temp2, temp3, a0, a1, a2, a3, \ ++ temp0, temp1, temp2, temp3, a0, a1, a2, a3, 11); \ ++ in0 = __lasx_xvbitsel_v(temp0, temp, select_vec); \ ++ in1 = __lasx_xvbitsel_v(temp1, temp, select_vec); \ ++ in2 = __lasx_xvbitsel_v(temp2, temp, select_vec); \ ++ in3 = __lasx_xvbitsel_v(temp3, temp, select_vec); \ ++ a0 = __lasx_xvbitsel_v(a0, temp, select_vec); \ ++ a1 = __lasx_xvbitsel_v(a1, temp, select_vec); \ ++ a2 = __lasx_xvbitsel_v(a2, temp, select_vec); \ ++ a3 = __lasx_xvbitsel_v(a3, temp, select_vec); \ ++ in0 = __lasx_xvpickev_h(in1, in0); \ ++ in1 = __lasx_xvpickev_h(in3, in2); \ ++ in2 = __lasx_xvpickev_h(a2, a3); \ ++ in3 = __lasx_xvpickev_h(a0, a1); \ ++ in0 = __lasx_xvpermi_d(in0, 0xD8); \ ++ in1 = __lasx_xvpermi_d(in1, 0xD8); \ ++ in2 = __lasx_xvpermi_d(in2, 0xD8); \ ++ in3 = __lasx_xvpermi_d(in3, 0xD8); \ ++ ++ ++#define LASX_IDCTCOLS \ ++ /* part of FUNC6(idctSparaseCol) */ \ ++ LASX_TRANSPOSE4x16(in0, in1, in2, in3, in0, in1, in2, in3); \ ++ LASX_MADDWL_W_H_128SV(const_val1, in0, w4, temp0); \ ++ LASX_MULWL_W_H_2_128SV(in1, w2, in1, w6, temp1, temp2); \ ++ a0 = __lasx_xvadd_w(temp0, temp1); \ ++ a1 = __lasx_xvadd_w(temp0, temp2); \ ++ a2 = __lasx_xvsub_w(temp0, temp2); \ ++ a3 = __lasx_xvsub_w(temp0, temp1); \ ++ \ ++ LASX_ILVH_H_2_128SV(in1, in0, w3, w1, temp0, temp1); \ ++ LASX_DP2_W_H(temp0, temp1, b0); \ ++ temp1 = __lasx_xvneg_h(w7); \ ++ LASX_ILVL_H_128SV(temp1, w3, temp2); \ ++ LASX_DP2_W_H(temp0, temp2, b1); \ ++ temp1 = __lasx_xvneg_h(w1); \ ++ LASX_ILVL_H_128SV(temp1, w5, temp2); \ ++ LASX_DP2_W_H(temp0, temp2, b2); \ ++ temp1 = __lasx_xvneg_h(w5); \ ++ LASX_ILVL_H_128SV(temp1, w7, temp2); \ ++ LASX_DP2_W_H(temp0, temp2, b3); \ ++ \ ++ /* if (AV_RAN64A(row + 4)) */ \ ++ LASX_ILVL_H_2_128SV(in3, in2, w6, w4, temp0, temp1); \ ++ LASX_DP2ADD_W_H(a0, temp0, temp1, a0); \ ++ LASX_ILVL_H_128SV(w2, w4, temp1); \ ++ LASX_DP2SUB_W_H(a1, temp0, temp1, a1); \ ++ temp1 = __lasx_xvneg_h(w4); \ ++ LASX_ILVL_H_128SV(w2, temp1, temp2); \ ++ LASX_DP2ADD_W_H(a2, temp0, temp2, a2); \ ++ temp1 = __lasx_xvneg_h(w6); \ ++ LASX_ILVL_H_128SV(temp1, w4, temp2); \ ++ LASX_DP2ADD_W_H(a3, temp0, temp2, a3); \ ++ \ ++ LASX_ILVH_H_2_128SV(in3, in2, w7, w5, temp0, temp1); \ ++ LASX_DP2ADD_W_H(b0, temp0, temp1, b0); \ ++ LASX_ILVL_H_2_128SV(w5, w1, w3, w7, temp1, temp2); \ ++ LASX_DP2SUB_W_H(b1, temp0, temp1, b1); \ ++ LASX_DP2ADD_W_H(b2, temp0, temp2, b2); \ ++ temp1 = __lasx_xvneg_h(w1); \ ++ LASX_ILVL_H_128SV(temp1, w3, temp2); \ ++ LASX_DP2ADD_W_H(b3, temp0, temp2, b3); \ ++ \ ++ temp0 = __lasx_xvadd_w(a0, b0); \ ++ temp1 = __lasx_xvadd_w(a1, b1); \ ++ temp2 = __lasx_xvadd_w(a2, b2); \ ++ temp3 = __lasx_xvadd_w(a3, b3); \ ++ a3 = __lasx_xvsub_w(a3, b3); \ ++ a2 = __lasx_xvsub_w(a2, b2); \ ++ a1 = __lasx_xvsub_w(a1, b1); \ ++ a0 = __lasx_xvsub_w(a0, b0); \ ++ LASX_SRAI_W_8(temp0, temp1, temp2, temp3, a0, a1, a2, a3, \ ++ temp0, temp1, temp2, temp3, a0, a1, a2, a3, 20); \ ++ in0 = __lasx_xvpickev_h(temp1, temp0); \ ++ in1 = __lasx_xvpickev_h(temp3, temp2); \ ++ in2 = __lasx_xvpickev_h(a2, a3); \ ++ in3 = __lasx_xvpickev_h(a0, a1); \ ++ ++ ++static void simple_idct_lasx(int16_t *block) ++{ ++ int32_t const_val = 1 << 10; ++ __m256i w1 = {0x4B42539F58C50000, 0x11A822A332493FFF, 0x4B42539F58C50000, 0x11A822A332493FFF}; ++ __m256i in0, in1, in2, in3; ++ __m256i w2, w3, w4, w5, w6, w7; ++ __m256i a0, a1, a2, a3; ++ __m256i b0, b1, b2, b3; ++ __m256i temp0, temp1, temp2, temp3; ++ __m256i const_val0 = __lasx_xvreplgr2vr_w(const_val); ++ __m256i const_val1, select_vec, temp; ++ ++ LASX_IDCTROWCONDDC ++ LASX_IDCTCOLS ++ in0 = __lasx_xvpermi_d(in0, 0xD8); ++ in1 = __lasx_xvpermi_d(in1, 0xD8); ++ in2 = __lasx_xvpermi_d(in2, 0xD8); ++ in3 = __lasx_xvpermi_d(in3, 0xD8); ++ LASX_ST_4(in0, in1, in2, in3, block, 16); ++} ++ ++static void simple_idct_put_lasx(uint8_t *dst, int32_t dst_stride, ++ int16_t *block) ++{ ++ int32_t const_val = 1 << 10; ++ __m256i w1 = {0x4B42539F58C50000, 0x11A822A332493FFF, 0x4B42539F58C50000, 0x11A822A332493FFF}; ++ __m256i in0, in1, in2, in3; ++ __m256i w2, w3, w4, w5, w6, w7; ++ __m256i a0, a1, a2, a3; ++ __m256i b0, b1, b2, b3; ++ __m256i temp0, temp1, temp2, temp3; ++ __m256i const_val0 = __lasx_xvreplgr2vr_w(const_val); ++ __m256i const_val1, select_vec, temp; ++ ++ LASX_IDCTROWCONDDC ++ LASX_IDCTCOLS ++ in0 = __lasx_xvpermi_d(in0, 0xD8); ++ in1 = __lasx_xvpermi_d(in1, 0xD8); ++ in2 = __lasx_xvpermi_d(in2, 0xD8); ++ in3 = __lasx_xvpermi_d(in3, 0xD8); ++ LASX_CLIP_H_0_255_4(in0, in1, in2, in3, in0, in1, in2, in3); ++ LASX_PCKEV_B_2_128SV(in1, in0, in3, in2, in0, in1); ++ LASX_ST_D_4(in0, 0, 2, 1, 3, dst, dst_stride); ++ dst += (dst_stride << 2); ++ LASX_ST_D_4(in1, 0, 2, 1, 3, dst, dst_stride); ++} ++ ++static void simple_idct_add_lasx(uint8_t *dst, int32_t dst_stride, ++ int16_t *block) ++{ ++ int32_t const_val = 1 << 10; ++ uint8_t *dst1 = dst; ++ __m256i w1 = {0x4B42539F58C50000, 0x11A822A332493FFF, 0x4B42539F58C50000, 0x11A822A332493FFF}; ++ __m256i sh = {0x0003000200010000, 0x000B000A00090008, 0x0007000600050004, 0x000F000E000D000B}; ++ __m256i in0, in1, in2, in3; ++ __m256i w2, w3, w4, w5, w6, w7; ++ __m256i a0, a1, a2, a3; ++ __m256i b0, b1, b2, b3; ++ __m256i temp0, temp1, temp2, temp3; ++ __m256i const_val0 = __lasx_xvreplgr2vr_w(const_val); ++ __m256i const_val1, select_vec, temp; ++ ++ LASX_IDCTROWCONDDC ++ LASX_IDCTCOLS ++ a0 = __lasx_xvldrepl_d(dst1, 0); ++ a0 = __lasx_vext2xv_hu_bu(a0); ++ dst1 += dst_stride; ++ a1 = __lasx_xvldrepl_d(dst1, 0); ++ a1 = __lasx_vext2xv_hu_bu(a1); ++ dst1 += dst_stride; ++ a2 = __lasx_xvldrepl_d(dst1, 0); ++ a2 = __lasx_vext2xv_hu_bu(a2); ++ dst1 += dst_stride; ++ a3 = __lasx_xvldrepl_d(dst1, 0); ++ a3 = __lasx_vext2xv_hu_bu(a3); ++ dst1 += dst_stride; ++ b0 = __lasx_xvldrepl_d(dst1, 0); ++ b0 = __lasx_vext2xv_hu_bu(b0); ++ dst1 += dst_stride; ++ b1 = __lasx_xvldrepl_d(dst1, 0); ++ b1 = __lasx_vext2xv_hu_bu(b1); ++ dst1 += dst_stride; ++ b2 = __lasx_xvldrepl_d(dst1, 0); ++ b2 = __lasx_vext2xv_hu_bu(b2); ++ dst1 += dst_stride; ++ b3 = __lasx_xvldrepl_d(dst1, 0); ++ b3 = __lasx_vext2xv_hu_bu(b3); ++ temp0 = __lasx_xvshuf_h(sh, a1, a0); ++ temp1 = __lasx_xvshuf_h(sh, a3, a2); ++ temp2 = __lasx_xvshuf_h(sh, b1, b0); ++ temp3 = __lasx_xvshuf_h(sh, b3, b2); ++ in0 = __lasx_xvadd_h(temp0, in0); ++ in1 = __lasx_xvadd_h(temp1, in1); ++ in2 = __lasx_xvadd_h(temp2, in2); ++ in3 = __lasx_xvadd_h(temp3, in3); ++ in0 = __lasx_xvpermi_d(in0, 0xD8); ++ in1 = __lasx_xvpermi_d(in1, 0xD8); ++ in2 = __lasx_xvpermi_d(in2, 0xD8); ++ in3 = __lasx_xvpermi_d(in3, 0xD8); ++ LASX_CLIP_H_0_255_4(in0, in1, in2, in3, in0, in1, in2, in3); ++ LASX_PCKEV_B_2_128SV(in1, in0, in3, in2, in0, in1); ++ LASX_ST_D_4(in0, 0, 2, 1, 3, dst, dst_stride); ++ dst += (dst_stride << 2); ++ LASX_ST_D_4(in1, 0, 2, 1, 3, dst, dst_stride); ++} ++ ++void ff_simple_idct_lasx(int16_t *block) ++{ ++ simple_idct_lasx(block); ++} ++ ++void ff_simple_idct_put_lasx(uint8_t *dst, ptrdiff_t dst_stride, int16_t *block) ++{ ++ simple_idct_put_lasx(dst, dst_stride, block); ++} ++ ++void ff_simple_idct_add_lasx(uint8_t *dst, ptrdiff_t dst_stride, int16_t *block) ++{ ++ simple_idct_add_lasx(dst, dst_stride, block); ++} +diff --git a/libavcodec/loongarch/vc1dsp_init_loongarch.c b/libavcodec/loongarch/vc1dsp_init_loongarch.c +new file mode 100644 +index 0000000000..e72a4a3203 +--- /dev/null ++++ b/libavcodec/loongarch/vc1dsp_init_loongarch.c +@@ -0,0 +1,67 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hao Chen ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/loongarch/cpu.h" ++#include "libavutil/attributes.h" ++#include "libavcodec/vc1dsp.h" ++#include "vc1dsp_loongarch.h" ++ ++#define FN_ASSIGN(OP, X, Y, INSN) \ ++ dsp->OP##vc1_mspel_pixels_tab[1][X+4*Y] = ff_##OP##vc1_mspel_mc##X##Y##INSN; \ ++ dsp->OP##vc1_mspel_pixels_tab[0][X+4*Y] = ff_##OP##vc1_mspel_mc##X##Y##_16##INSN ++ ++#define FN_ASSIGN_V(OP, Y, INSN) \ ++ dsp->OP##vc1_mspel_pixels_tab[0][4*Y] = ff_##OP##vc1_mspel_mc0##Y##_16##INSN ++ ++#define FN_ASSIGN_H(OP, X, INSN) \ ++ dsp->OP##vc1_mspel_pixels_tab[0][X] = ff_##OP##vc1_mspel_mc##X##0_16##INSN ++ ++av_cold void ff_vc1dsp_init_loongarch(VC1DSPContext *dsp) ++{ ++ int cpu_flags = av_get_cpu_flags(); ++ ++ if (have_lasx(cpu_flags)) { ++ dsp->vc1_inv_trans_8x8 = ff_vc1_inv_trans_8x8_lasx; ++ dsp->vc1_inv_trans_4x8 = ff_vc1_inv_trans_4x8_lasx; ++ dsp->vc1_inv_trans_8x4 = ff_vc1_inv_trans_8x4_lasx; ++ dsp->vc1_inv_trans_4x4 = ff_vc1_inv_trans_4x4_lasx; ++ dsp->vc1_inv_trans_8x8_dc = ff_vc1_inv_trans_8x8_dc_lasx; ++ dsp->vc1_inv_trans_4x8_dc = ff_vc1_inv_trans_4x8_dc_lasx; ++ dsp->vc1_inv_trans_8x4_dc = ff_vc1_inv_trans_8x4_dc_lasx; ++ dsp->vc1_inv_trans_4x4_dc = ff_vc1_inv_trans_4x4_dc_lasx; ++ FN_ASSIGN(put_, 1, 1, _lasx); ++ FN_ASSIGN(put_, 1, 2, _lasx); ++ FN_ASSIGN(put_, 1, 3, _lasx); ++ FN_ASSIGN(put_, 2, 1, _lasx); ++ FN_ASSIGN(put_, 2, 2, _lasx); ++ FN_ASSIGN(put_, 2, 3, _lasx); ++ FN_ASSIGN(put_, 3, 1, _lasx); ++ FN_ASSIGN(put_, 3, 2, _lasx); ++ FN_ASSIGN(put_, 3, 3, _lasx); ++ FN_ASSIGN_V(put_, 1, _lasx); ++ FN_ASSIGN_V(put_, 2, _lasx); ++ FN_ASSIGN_V(put_, 3, _lasx); ++ FN_ASSIGN_H(put_, 1, _lasx); ++ FN_ASSIGN_H(put_, 2, _lasx); ++ FN_ASSIGN_H(put_, 3, _lasx); ++ dsp->put_no_rnd_vc1_chroma_pixels_tab[0] = ff_put_no_rnd_vc1_chroma_mc8_lasx; ++ } ++} +diff --git a/libavcodec/loongarch/vc1dsp_lasx.c b/libavcodec/loongarch/vc1dsp_lasx.c +new file mode 100644 +index 0000000000..216fcd23fa +--- /dev/null ++++ b/libavcodec/loongarch/vc1dsp_lasx.c +@@ -0,0 +1,997 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hao Chen ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "vc1dsp_loongarch.h" ++#include "libavutil/loongarch/generic_macros_lasx.h" ++ ++void ff_vc1_inv_trans_8x8_lasx(int16_t block[64]) ++{ ++ int32_t con_4 = 4; ++ int32_t con_64 = 64; ++ __m256i in0, in1, in2, in3; ++ __m256i temp0, temp1, temp2, temp3, t1, t2, t3, t4, t5, t6, t7, t8; ++ __m256i const_1 = {0x000c000c000c000c, 0x000c000c000c000c, 0x000c000c000c000c, 0x000c000c000c000c}; ++ __m256i const_2 = {0xfff4000cfff4000c, 0xfff4000cfff4000c, 0xfff4000cfff4000c, 0xfff4000cfff4000c}; ++ __m256i const_3 = {0x0006001000060010, 0x0006001000060010, 0x0006001000060010, 0x0006001000060010}; ++ __m256i const_4 = {0xfff00006fff00006, 0xfff00006fff00006, 0xfff00006fff00006, 0xfff00006fff00006}; ++ __m256i const_5 = {0x000f0010000f0010, 0x000f0010000f0010, 0x000f0010000f0010, 0x000f0010000f0010}; ++ __m256i const_6 = {0x0004000900040009, 0x0004000900040009, 0x0004000900040009, 0x0004000900040009}; ++ __m256i const_7 = {0xfffc000ffffc000f, 0xfffc000ffffc000f, 0xfffc000ffffc000f, 0xfffc000ffffc000f}; ++ __m256i const_8 = {0xfff7fff0fff7fff0, 0xfff7fff0fff7fff0, 0xfff7fff0fff7fff0, 0xfff7fff0fff7fff0}; ++ __m256i const_9 = {0xfff00009fff00009, 0xfff00009fff00009, 0xfff00009fff00009, 0xfff00009fff00009}; ++ __m256i const_10 = {0x000f0004000f0004, 0x000f0004000f0004, 0x000f0004000f0004, 0x000f0004000f0004}; ++ __m256i const_11 = {0xfff70004fff70004, 0xfff70004fff70004, 0xfff70004fff70004, 0xfff70004fff70004}; ++ __m256i const_12 = {0xfff0000ffff0000f, 0xfff0000ffff0000f, 0xfff0000ffff0000f, 0xfff0000ffff0000f}; ++ ++ LASX_LD_4(block, 16, in0, in1, in2, in3); ++ in0 = __lasx_xvpermi_d(in0, 0xD8); ++ in1 = __lasx_xvpermi_d(in1, 0xD8); ++ in2 = __lasx_xvpermi_d(in2, 0xD8); ++ in3 = __lasx_xvpermi_d(in3, 0xD8); ++ /* first loops */ ++ LASX_ILVL_H_2_128SV(in2, in0, in3, in1, temp0, temp1); ++ t2 = __lasx_xvreplgr2vr_w(con_4); ++ LASX_DP2ADD_W_H(t2, temp0, const_1, t1); ++ LASX_DP2ADD_W_H(t2, temp0, const_2, t2); ++ LASX_DP2_W_H(temp1, const_3, t3); ++ LASX_DP2_W_H(temp1, const_4, t4); ++ ++ t5 = __lasx_xvadd_w(t1, t3); ++ t6 = __lasx_xvadd_w(t2, t4); ++ t7 = __lasx_xvsub_w(t2, t4); ++ t8 = __lasx_xvsub_w(t1, t3); ++ ++ LASX_ILVH_H_2_128SV(in1, in0, in3, in2, temp0, temp1); ++ LASX_DP2_W_H(const_5, temp0, temp2); ++ LASX_DP2ADD_W_H(temp2, temp1, const_6, t1); ++ LASX_DP2_W_H(const_7, temp0, temp2); ++ LASX_DP2ADD_W_H(temp2, temp1, const_8, t2); ++ LASX_DP2_W_H(const_9, temp0, temp2); ++ LASX_DP2ADD_W_H(temp2, temp1, const_10, t3); ++ LASX_DP2_W_H(const_11, temp0, temp2); ++ LASX_DP2ADD_W_H(temp2, temp1, const_12, t4); ++ ++ temp0 = __lasx_xvadd_w(t1, t5); ++ temp1 = __lasx_xvadd_w(t6, t2); ++ temp2 = __lasx_xvadd_w(t7, t3); ++ temp3 = __lasx_xvadd_w(t8, t4); ++ in0 = __lasx_xvsub_w(t8, t4); ++ in1 = __lasx_xvsub_w(t7, t3); ++ in2 = __lasx_xvsub_w(t6, t2); ++ in3 = __lasx_xvsub_w(t5, t1); ++ LASX_SRAI_W_8(temp0, temp1, temp2, temp3, in0, in1, in2, in3, ++ temp0, temp1, temp2, temp3, in0, in1, in2, in3, 3); ++ ++ /* second loops */ ++ temp0 = __lasx_xvpackev_h(temp1, temp0); ++ temp1 = __lasx_xvpackev_h(temp3, temp2); ++ temp2 = __lasx_xvpackev_h(in1, in0); ++ temp3 = __lasx_xvpackev_h(in3, in2); ++ LASX_ILVL_W_2_128SV(temp1, temp0, temp3, temp2, t1, t3); ++ LASX_ILVH_W_2_128SV(temp1, temp0, temp3, temp2, t2, t4); ++ in0 = __lasx_xvpermi_q(t3, t1, 0x20); ++ in1 = __lasx_xvpermi_q(t3, t1, 0x31); ++ in2 = __lasx_xvpermi_q(t4, t2, 0x20); ++ in3 = __lasx_xvpermi_q(t4, t2, 0x31); ++ LASX_ILVL_H_2_128SV(in1, in0, in3, in2, temp0, temp1); ++ t3 = __lasx_xvreplgr2vr_w(con_64); ++ LASX_DP2ADD_W_H(t3, temp0, const_1, t1); ++ LASX_DP2ADD_W_H(t3, temp0, const_2, t2); ++ LASX_DP2_W_H(temp1, const_3, t3); ++ LASX_DP2_W_H(temp1, const_4, t4); ++ ++ t5 = __lasx_xvadd_w(t1, t3); ++ t6 = __lasx_xvadd_w(t2, t4); ++ t7 = __lasx_xvsub_w(t2, t4); ++ t8 = __lasx_xvsub_w(t1, t3); ++ ++ LASX_ILVH_H_2_128SV(in2, in0, in3, in1, temp0, temp1); ++ LASX_DP2_W_H(const_5, temp0, temp2); ++ LASX_DP2ADD_W_H(temp2, temp1, const_6, t1); ++ LASX_DP2_W_H(const_7, temp0, temp2); ++ LASX_DP2ADD_W_H(temp2, temp1, const_8, t2); ++ LASX_DP2_W_H(const_9, temp0, temp2); ++ LASX_DP2ADD_W_H(temp2, temp1, const_10, t3); ++ LASX_DP2_W_H(const_11, temp0, temp2); ++ LASX_DP2ADD_W_H(temp2, temp1, const_12, t4); ++ ++ temp0 = __lasx_xvadd_w(t5, t1); ++ temp1 = __lasx_xvadd_w(t6, t2); ++ temp2 = __lasx_xvadd_w(t7, t3); ++ temp3 = __lasx_xvadd_w(t8, t4); ++ in0 = __lasx_xvsub_w(t8, t4); ++ in1 = __lasx_xvsub_w(t7, t3); ++ in2 = __lasx_xvsub_w(t6, t2); ++ in3 = __lasx_xvsub_w(t5, t1); ++ in0 = __lasx_xvaddi_wu(in0, 1); ++ in1 = __lasx_xvaddi_wu(in1, 1); ++ in2 = __lasx_xvaddi_wu(in2, 1); ++ in3 = __lasx_xvaddi_wu(in3, 1); ++ LASX_SRAI_W_8(temp0, temp1, temp2, temp3, in0, in1, in2, in3, ++ temp0, temp1, temp2, temp3, in0, in1, in2, in3, 7); ++ t1 = __lasx_xvpickev_h(temp1, temp0); ++ t2 = __lasx_xvpickev_h(temp3, temp2); ++ t3 = __lasx_xvpickev_h(in1, in0); ++ t4 = __lasx_xvpickev_h(in3, in2); ++ in0 = __lasx_xvpermi_d(t1, 0xD8); ++ in1 = __lasx_xvpermi_d(t2, 0xD8); ++ in2 = __lasx_xvpermi_d(t3, 0xD8); ++ in3 = __lasx_xvpermi_d(t4, 0xD8); ++ LASX_ST_4(in0, in1, in2, in3, block, 16); ++} ++ ++void ff_vc1_inv_trans_8x8_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) ++{ ++ int dc = block[0]; ++ uint8_t *dst = dest + stride; ++ __m256i in0, in1, const_dc, temp0; ++ __m256i zero = {0}; ++ ++ dc = (3 * dc + 1) >> 1; ++ dc = (3 * dc + 16) >> 5; ++ ++ const_dc = __lasx_xvreplgr2vr_h(dc); ++ in0 = __lasx_xvldrepl_d(dest, 0); ++ in1 = __lasx_xvldrepl_d(dst, 0); ++ in0 = __lasx_xvpermi_q(in1, in0, 0x20); ++ LASX_ILVL_B_128SV(zero, in0, temp0); ++ temp0 = __lasx_xvadd_h(temp0, const_dc); ++ LASX_CLIP_H_0_255(temp0, in0); ++ temp0 = __lasx_xvpickev_b(in0, in0); ++ __lasx_xvstelm_d(temp0, dest, 0, 0); ++ __lasx_xvstelm_d(temp0, dst, 0, 2); ++ dest = dst + stride; ++ dst = dest + stride; ++ in0 = __lasx_xvldrepl_d(dest, 0); ++ in1 = __lasx_xvldrepl_d(dst, 0); ++ in0 = __lasx_xvpermi_q(in1, in0, 0x20); ++ LASX_ILVL_B_128SV(zero, in0, temp0); ++ temp0 = __lasx_xvadd_h(temp0, const_dc); ++ LASX_CLIP_H_0_255(temp0, in0); ++ temp0 = __lasx_xvpickev_b(in0, in0); ++ __lasx_xvstelm_d(temp0, dest, 0, 0); ++ __lasx_xvstelm_d(temp0, dst, 0, 2); ++ dest = dst + stride; ++ dst = dest + stride; ++ in0 = __lasx_xvldrepl_d(dest, 0); ++ in1 = __lasx_xvldrepl_d(dst, 0); ++ in0 = __lasx_xvpermi_q(in1, in0, 0x20); ++ LASX_ILVL_B_128SV(zero, in0, temp0); ++ temp0 = __lasx_xvadd_h(temp0, const_dc); ++ LASX_CLIP_H_0_255(temp0, in0); ++ temp0 = __lasx_xvpickev_b(in0, in0); ++ __lasx_xvstelm_d(temp0, dest, 0, 0); ++ __lasx_xvstelm_d(temp0, dst, 0, 2); ++ dest = dst + stride; ++ dst = dest + stride; ++ in0 = __lasx_xvldrepl_d(dest, 0); ++ in1 = __lasx_xvldrepl_d(dst, 0); ++ in0 = __lasx_xvpermi_q(in1, in0, 0x20); ++ LASX_ILVL_B_128SV(zero, in0, temp0); ++ temp0 = __lasx_xvadd_h(temp0, const_dc); ++ LASX_CLIP_H_0_255(temp0, in0); ++ temp0 = __lasx_xvpickev_b(in0, in0); ++ __lasx_xvstelm_d(temp0, dest, 0, 0); ++ __lasx_xvstelm_d(temp0, dst, 0, 2); ++} ++ ++void ff_vc1_inv_trans_8x4_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) ++{ ++ uint8_t *dst = dest; ++ __m256i shift = {0x0000000400000000, 0x0000000500000001, 0x0000000600000002, 0x0000000700000003}; ++ __m256i const_64 = {0x0000004000000040, 0x0000004000000040, 0x0000004000000040, 0x0000004000000040}; ++ __m256i const_1 = {0x00060010000C000C, 0x00060010000C000C, 0x00060010000C000C, 0x00060010000C000C}; ++ __m256i const_2 = {0xFFF00006FFF4000C, 0xFFF00006FFF4000C, 0xFFF00006FFF4000C, 0xFFF00006FFF4000C}; ++ __m256i const_3 = {0x0004000F00090010, 0x0004000F00090010, 0x0004000F00090010, 0x0004000F00090010}; ++ __m256i const_4 = {0xFFF7FFFCFFF0000F, 0xFFF7FFFCFFF0000F, 0xFFF7FFFCFFF0000F, 0xFFF7FFFCFFF0000F}; ++ __m256i const_5 = {0x000FFFF000040009, 0x000FFFF000040009, 0x000FFFF000040009, 0x000FFFF000040009}; ++ __m256i const_6 = {0xFFF0FFF7000F0004, 0xFFF0FFF7000F0004, 0xFFF0FFF7000F0004, 0xFFF0FFF7000F0004}; ++ __m256i const_7 = {0x0000000000000004, 0x0000000000000004, 0x0000000000000004, 0x0000000000000004}; ++ __m256i const_8 = {0x0011001100110011, 0x0011001100110011, 0x0011001100110011, 0x0011001100110011}; ++ __m256i const_9 = {0xFFEF0011FFEF0011, 0xFFEF0011FFEF0011, 0xFFEF0011FFEF0011, 0xFFEF0011FFEF0011}; ++ __m256i const_10 = {0x000A0016000A0016, 0x000A0016000A0016, 0x000A0016000A0016, 0x000A0016000A0016}; ++ __m256i const_11 = {0x0016FFF60016FFF6, 0x0016FFF60016FFF6, 0x0016FFF60016FFF6, 0x0016FFF60016FFF6}; ++ __m256i in0, in1; ++ __m256i temp0, temp1, temp2, temp3, t1, t2, t3, t4; ++ ++ LASX_LD_2(block, 16, in0, in1); ++ /* first loops */ ++ temp0 = __lasx_xvpermi_d(in0, 0xB1); ++ temp1 = __lasx_xvpermi_d(in1, 0xB1); ++ LASX_ILVL_H_2_128SV(temp0, in0, temp1, in1, temp0, temp1); ++ temp2 = __lasx_xvpickev_w(temp1, temp0); ++ temp3 = __lasx_xvpickod_w(temp1, temp0); ++ ++ LASX_DP2_W_H(temp2, const_1, temp0); ++ LASX_DP2_W_H(temp2, const_2, temp1); ++ t1 = __lasx_xvadd_w(temp0, const_7); ++ t2 = __lasx_xvadd_w(temp1, const_7); ++ temp0 = __lasx_xvpickev_w(t2, t1); ++ temp1 = __lasx_xvpickod_w(t2, t1); ++ t3 = __lasx_xvadd_w(temp0, temp1); ++ t4 = __lasx_xvsub_w(temp0, temp1); ++ t4 = __lasx_xvpermi_d(t4, 0xB1); ++ ++ LASX_DP4_D_H(temp3, const_3, t1); ++ LASX_DP4_D_H(temp3, const_4, t2); ++ LASX_DP4_D_H(temp3, const_5, temp0); ++ LASX_DP4_D_H(temp3, const_6, temp1); ++ ++ temp2 = __lasx_xvpickev_w(t2, t1); ++ temp3 = __lasx_xvpickev_w(temp1, temp0); ++ ++ t1 = __lasx_xvadd_w(temp2, t3); ++ t2 = __lasx_xvadd_w(temp3, t4); ++ temp0 = __lasx_xvsub_w(t4, temp3); ++ temp1 = __lasx_xvsub_w(t3, temp2); ++ LASX_SRAI_W_4(t1, t2, temp0, temp1, t1, t2, t3, t4, 3); ++ /* second loops */ ++ temp2 = __lasx_xvpickev_h(t2, t1); ++ temp3 = __lasx_xvpickev_h(t4, t3); ++ temp3 = __lasx_xvshuf4i_h(temp3, 0x4E); ++ temp0 = __lasx_xvpermi_q(temp3, temp2, 0x20); ++ temp1 = __lasx_xvpermi_q(temp3, temp2, 0x31); ++ LASX_DP2ADD_W_H(const_64, temp0, const_8, t1); ++ LASX_DP2ADD_W_H(const_64, temp0, const_9, t2); ++ LASX_DP2_W_H(temp1, const_10, t3); ++ LASX_DP2_W_H(temp1, const_11, t4); ++ temp0 = __lasx_xvadd_w(t1, t3); ++ temp1 = __lasx_xvsub_w(t2, t4); ++ temp2 = __lasx_xvadd_w(t2, t4); ++ temp3 = __lasx_xvsub_w(t1, t3); ++ LASX_SRAI_W_4(temp0, temp1, temp2, temp3, t1, t2, t3, t4, 7); ++ ++ temp0 = __lasx_xvldrepl_d(dst, 0); ++ temp0 = __lasx_vext2xv_wu_bu(temp0); ++ dst += stride; ++ temp1 = __lasx_xvldrepl_d(dst, 0); ++ temp1 = __lasx_vext2xv_wu_bu(temp1); ++ dst += stride; ++ temp2 = __lasx_xvldrepl_d(dst, 0); ++ temp2 = __lasx_vext2xv_wu_bu(temp2); ++ dst += stride; ++ temp3 = __lasx_xvldrepl_d(dst, 0); ++ temp3 = __lasx_vext2xv_wu_bu(temp3); ++ t1 = __lasx_xvadd_w(temp0, t1); ++ t2 = __lasx_xvadd_w(temp1, t2); ++ t3 = __lasx_xvadd_w(temp2, t3); ++ t4 = __lasx_xvadd_w(temp3, t4); ++ LASX_CLIP_W_0_255_4(t1, t2, t3, t4, t1, t2, t3, t4); ++ LASX_PCKEV_H_2_128SV(t2, t1, t4, t3, temp0, temp1); ++ temp2 = __lasx_xvpickev_b(temp1, temp0); ++ temp0 = __lasx_xvperm_w(temp2, shift); ++ LASX_ST_D_4(temp0, 0, 1, 2, 3, dest, stride); ++} ++ ++void ff_vc1_inv_trans_8x4_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) ++{ ++ int dc = block[0]; ++ uint8_t *dst = dest + stride; ++ __m256i in0, in1, const_dc, temp0; ++ __m256i zero = {0}; ++ ++ dc = (3 * dc + 1) >> 1; ++ dc = (17 * dc + 64) >> 7; ++ const_dc = __lasx_xvreplgr2vr_h(dc); ++ ++ in0 = __lasx_xvldrepl_d(dest, 0); ++ in1 = __lasx_xvldrepl_d(dst, 0); ++ in0 = __lasx_xvpermi_q(in1, in0, 0x20); ++ LASX_ILVL_B_128SV(zero, in0, temp0); ++ temp0 = __lasx_xvadd_h(temp0, const_dc); ++ LASX_CLIP_H_0_255(temp0, in0); ++ temp0 = __lasx_xvpickev_b(in0, in0); ++ __lasx_xvstelm_d(temp0, dest, 0, 0); ++ __lasx_xvstelm_d(temp0, dst, 0, 2); ++ dest = dst + stride; ++ dst = dest + stride; ++ in0 = __lasx_xvldrepl_d(dest, 0); ++ in1 = __lasx_xvldrepl_d(dst, 0); ++ in0 = __lasx_xvpermi_q(in1, in0, 0x20); ++ LASX_ILVL_B_128SV(zero, in0, temp0); ++ temp0 = __lasx_xvadd_h(temp0, const_dc); ++ LASX_CLIP_H_0_255(temp0, in0); ++ temp0 = __lasx_xvpickev_b(in0, in0); ++ __lasx_xvstelm_d(temp0, dest, 0, 0); ++ __lasx_xvstelm_d(temp0, dst, 0, 2); ++} ++ ++void ff_vc1_inv_trans_4x8_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) ++{ ++ int dc = block[0]; ++ uint8_t *dst1 = dest + stride; ++ uint8_t *dst2 = dst1 + stride; ++ uint8_t *dst3 = dst2 + stride; ++ __m256i in0, in1, in2, in3, const_dc, temp0, temp1; ++ __m256i zero = {0}; ++ ++ dc = (17 * dc + 4) >> 3; ++ dc = (12 * dc + 64) >> 7; ++ const_dc = __lasx_xvreplgr2vr_h(dc); ++ ++ in0 = __lasx_xvldrepl_w(dest, 0); ++ in1 = __lasx_xvldrepl_w(dst1, 0); ++ in2 = __lasx_xvldrepl_w(dst2, 0); ++ in3 = __lasx_xvldrepl_w(dst3, 0); ++ LASX_ILVL_W_2_128SV(in1, in0, in3, in2, temp0, temp1); ++ in0 = __lasx_xvpermi_q(temp1, temp0, 0x20); ++ LASX_ILVL_B_128SV(zero, in0, temp0); ++ temp0 = __lasx_xvadd_h(temp0, const_dc); ++ LASX_CLIP_H_0_255(temp0, in0); ++ temp0 = __lasx_xvpickev_b(in0, in0); ++ __lasx_xvstelm_w(temp0, dest, 0, 0); ++ __lasx_xvstelm_w(temp0, dst1, 0, 1); ++ __lasx_xvstelm_w(temp0, dst2, 0, 4); ++ __lasx_xvstelm_w(temp0, dst3, 0, 5); ++ ++ dest = dst3 + stride; ++ dst1 = dest + stride; ++ dst2 = dst1 + stride; ++ dst3 = dst2 + stride; ++ ++ in0 = __lasx_xvldrepl_w(dest, 0); ++ in1 = __lasx_xvldrepl_w(dst1, 0); ++ in2 = __lasx_xvldrepl_w(dst2, 0); ++ in3 = __lasx_xvldrepl_w(dst3, 0); ++ LASX_ILVL_W_2_128SV(in1, in0, in3, in2, temp0, temp1); ++ in0 = __lasx_xvpermi_q(temp1, temp0, 0x20); ++ LASX_ILVL_B_128SV(zero, in0, temp0); ++ temp0 = __lasx_xvadd_h(temp0, const_dc); ++ LASX_CLIP_H_0_255(temp0, in0); ++ temp0 = __lasx_xvpickev_b(in0, in0); ++ __lasx_xvstelm_w(temp0, dest, 0, 0); ++ __lasx_xvstelm_w(temp0, dst1, 0, 1); ++ __lasx_xvstelm_w(temp0, dst2, 0, 4); ++ __lasx_xvstelm_w(temp0, dst3, 0, 5); ++ ++} ++ ++void ff_vc1_inv_trans_4x8_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) ++{ ++ uint8_t *dst = dest; ++ __m256i in0, in1, in2, in3; ++ __m256i temp0, temp1, temp2, temp3, t1, t2, t3, t4; ++ ++ __m256i const_1 = {0x0011001100110011, 0x0011001100110011, 0x0011001100110011, 0x0011001100110011}; ++ __m256i const_2 = {0xFFEF0011FFEF0011, 0xFFEF0011FFEF0011, 0xFFEF0011FFEF0011, 0xFFEF0011FFEF0011}; ++ __m256i const_3 = {0x000A0016000A0016, 0x000A0016000A0016, 0x000A0016000A0016, 0x000A0016000A0016}; ++ __m256i const_4 = {0x0016FFF60016FFF6, 0x0016FFF60016FFF6, 0x0016FFF60016FFF6, 0x0016FFF60016FFF6}; ++ __m256i const_5 = {0x0000000400000004, 0x0000000400000004, 0x0000000400000004, 0x0000000400000004}; ++ __m256i const_6 = {0x0000004000000040, 0x0000004000000040, 0x0000004000000040, 0x0000004000000040}; ++ __m256i const_7 = {0x000C000C000C000C, 0X000C000C000C000C, 0xFFF4000CFFF4000C, 0xFFF4000CFFF4000C}; ++ __m256i const_8 = {0x0006001000060010, 0x0006001000060010, 0xFFF00006FFF00006, 0xFFF00006FFF00006}; ++ __m256i const_9 = {0x0009001000090010, 0x0009001000090010, 0x0004000F0004000F, 0x0004000F0004000F}; ++ __m256i const_10 = {0xFFF0000FFFF0000F, 0xFFF0000FFFF0000F, 0xFFF7FFFCFFF7FFFC, 0xFFF7FFFCFFF7FFFC}; ++ __m256i const_11 = {0x0004000900040009, 0x0004000900040009, 0x000FFFF0000FFFF0, 0x000FFFF0000FFFF0}; ++ __m256i const_12 = {0x000F0004000F0004, 0x000F0004000F0004, 0xFFF0FFF7FFF0FFF7, 0xFFF0FFF7FFF0FFF7}; ++ __m256i shift = {0x0000000400000000, 0x0000000600000002, 0x0000000500000001, 0x0000000700000003}; ++ ++ /* first loops */ ++ LASX_LD_4(block, 16, in0, in1, in2, in3); ++ in0 = __lasx_xvilvl_d(in1, in0); ++ in1 = __lasx_xvilvl_d(in3, in2); ++ temp0 = __lasx_xvpickev_h(in1, in0); ++ temp1 = __lasx_xvpickod_h(in1, in0); ++ temp0 = __lasx_xvperm_w(temp0, shift); ++ temp1 = __lasx_xvperm_w(temp1, shift); ++ ++ LASX_DP2ADD_W_H(const_5, temp0, const_1, t1); ++ LASX_DP2ADD_W_H(const_5, temp0, const_2, t2); ++ LASX_DP2_W_H(temp1, const_3, t3); ++ LASX_DP2_W_H(temp1, const_4, t4); ++ ++ temp0 = __lasx_xvadd_w(t1, t3); ++ temp1 = __lasx_xvsub_w(t2, t4); ++ temp2 = __lasx_xvadd_w(t2, t4); ++ temp3 = __lasx_xvsub_w(t1, t3); ++ LASX_SRAI_W_4(temp0, temp1, temp2, temp3, temp0, temp1, temp2, temp3, 3); ++ ++ /* second loops */ ++ t1 = __lasx_xvpickev_w(temp1, temp0); ++ t2 = __lasx_xvpickev_w(temp3, temp2); ++ t1 = __lasx_xvpickev_h(t2, t1); ++ t3 = __lasx_xvpickod_w(temp1, temp0); ++ t4 = __lasx_xvpickod_w(temp3, temp2); ++ temp1 = __lasx_xvpickev_h(t4, t3); ++ temp2 = __lasx_xvpermi_q(t1, t1, 0x00); ++ temp3 = __lasx_xvpermi_q(t1, t1, 0x11); ++ LASX_DP2ADD_W_H(const_6, temp2, const_7, t1); ++ LASX_DP2_W_H(temp3, const_8, t2); ++ t3 = __lasx_xvadd_w(t1, t2); ++ t4 = __lasx_xvsub_w(t1, t2); ++ t4 = __lasx_xvpermi_d(t4, 0x4E); ++ ++ LASX_DP2_W_H(temp1, const_9, t1); ++ LASX_DP2_W_H(temp1, const_10, t2); ++ LASX_DP2_W_H(temp1, const_11, temp2); ++ LASX_DP2_W_H(temp1, const_12, temp3); ++ ++ temp0 = __lasx_xvpermi_q(t2, t1, 0x20); ++ temp1 = __lasx_xvpermi_q(t2, t1, 0x31); ++ t1 = __lasx_xvadd_w(temp0, temp1); ++ temp0 = __lasx_xvpermi_q(temp3, temp2, 0x20); ++ temp1 = __lasx_xvpermi_q(temp3, temp2, 0x31); ++ t2 = __lasx_xvadd_w(temp1, temp0); ++ temp0 = __lasx_xvadd_w(t1, t3); ++ temp1 = __lasx_xvadd_w(t2, t4); ++ temp2 = __lasx_xvsub_w(t4, t2); ++ temp3 = __lasx_xvsub_w(t3, t1); ++ temp2 = __lasx_xvaddi_wu(temp2, 1); ++ temp3 = __lasx_xvaddi_wu(temp3, 1); ++ LASX_SRAI_W_4(temp0, temp1, temp2, temp3, temp0, temp1, temp2, temp3, 7); ++ ++ const_1 = __lasx_xvldrepl_w(dst, 0); ++ dst += stride; ++ const_2 = __lasx_xvldrepl_w(dst, 0); ++ dst += stride; ++ const_3 = __lasx_xvldrepl_w(dst, 0); ++ dst += stride; ++ const_4 = __lasx_xvldrepl_w(dst, 0); ++ dst += stride; ++ const_5 = __lasx_xvldrepl_w(dst, 0); ++ dst += stride; ++ const_6 = __lasx_xvldrepl_w(dst, 0); ++ dst += stride; ++ const_7 = __lasx_xvldrepl_w(dst, 0); ++ dst += stride; ++ const_8 = __lasx_xvldrepl_w(dst, 0); ++ ++ LASX_ILVL_W_4_128SV(const_2, const_1, const_4, const_3, const_5, const_6, ++ const_7, const_8, const_1, const_2, const_3, const_4); ++ const_1 = __lasx_vext2xv_wu_bu(const_1); ++ const_2 = __lasx_vext2xv_wu_bu(const_2); ++ const_3 = __lasx_vext2xv_wu_bu(const_3); ++ const_4 = __lasx_vext2xv_wu_bu(const_4); ++ ++ temp0 = __lasx_xvadd_w(temp0, const_1); ++ temp1 = __lasx_xvadd_w(temp1, const_2); ++ temp2 = __lasx_xvadd_w(temp2, const_3); ++ temp3 = __lasx_xvadd_w(temp3, const_4); ++ LASX_CLIP_W_0_255_4(temp0, temp1, temp2, temp3, temp0, temp1, temp2, temp3); ++ LASX_PCKEV_H_2_128SV(temp1, temp0, temp3, temp2, temp0, temp1); ++ temp0 = __lasx_xvpickev_b(temp1, temp0); ++ LASX_ST_W_8(temp0, 0, 4, 1, 5, 6, 2, 7, 3, dest, stride); ++} ++ ++void ff_vc1_inv_trans_4x4_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) ++{ ++ int dc = block[0]; ++ uint8_t *dst1 = dest + stride; ++ uint8_t *dst2 = dst1 + stride; ++ uint8_t *dst3 = dst2 + stride; ++ __m256i in0, in1, in2, in3, temp0, temp1, const_dc; ++ __m256i zero = {0}; ++ ++ dc = (17 * dc + 4) >> 3; ++ dc = (17 * dc + 64) >> 7; ++ const_dc = __lasx_xvreplgr2vr_h(dc); ++ ++ in0 = __lasx_xvldrepl_w(dest, 0); ++ in1 = __lasx_xvldrepl_w(dst1, 0); ++ in2 = __lasx_xvldrepl_w(dst2, 0); ++ in3 = __lasx_xvldrepl_w(dst3, 0); ++ LASX_ILVL_W_2_128SV(in1, in0, in3, in2, temp0, temp1); ++ in0 = __lasx_xvpermi_q(temp1, temp0, 0x20); ++ LASX_ILVL_B_128SV(zero, in0, temp0); ++ temp0 = __lasx_xvadd_h(temp0, const_dc); ++ LASX_CLIP_H_0_255(temp0, in0); ++ temp0 = __lasx_xvpickev_b(in0, in0); ++ __lasx_xvstelm_w(temp0, dest, 0, 0); ++ __lasx_xvstelm_w(temp0, dst1, 0, 1); ++ __lasx_xvstelm_w(temp0, dst2, 0, 4); ++ __lasx_xvstelm_w(temp0, dst3, 0, 5); ++} ++ ++void ff_vc1_inv_trans_4x4_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) ++{ ++ uint8_t *dst = dest + stride; ++ __m256i in0, in1, in2, in3; ++ __m256i temp0, temp1, temp2, temp3, t1, t2; ++ ++ __m256i const_1 = {0x0011001100110011, 0xFFEF0011FFEF0011, 0x0011001100110011, 0xFFEF0011FFEF0011}; ++ __m256i const_2 = {0x000A0016000A0016, 0x0016FFF60016FFF6, 0x000A0016000A0016, 0x0016FFF60016FFF6}; ++ __m256i const_64 = {0x0000004000000040, 0x0000004000000040, 0x0000004000000040, 0x0000004000000040}; ++ ++ LASX_LD_2(block, 16, in0, in1); ++ /* first loops */ ++ temp0 = __lasx_xvilvl_d(in1, in0); ++ temp1 = __lasx_xvpickev_h(temp0, temp0); ++ temp2 = __lasx_xvpickod_h(temp0, temp0); ++ LASX_DP2_W_H(temp1, const_1, t1); ++ LASX_DP2_W_H(temp2, const_2, t2); ++ t1 = __lasx_xvaddi_wu(t1, 4); ++ in0 = __lasx_xvadd_w(t1, t2); ++ in1 = __lasx_xvsub_w(t1, t2); ++ LASX_SRAI_W_2(in0, in1, in0, in1, 3); ++ /* second loops */ ++ temp0 = __lasx_xvpickev_h(in1, in0); ++ temp1 = __lasx_xvpermi_q(temp0, temp0, 0x00); ++ temp2 = __lasx_xvpermi_q(temp0, temp0, 0x11); ++ const_1 = __lasx_xvpermi_d(const_1, 0xD8); ++ const_2 = __lasx_xvpermi_d(const_2, 0xD8); ++ LASX_DP2ADD_W_H(const_64, temp1, const_1, t1); ++ LASX_DP2_W_H(temp2, const_2, t2); ++ in0 = __lasx_xvadd_w(t1, t2); ++ in1 = __lasx_xvsub_w(t1, t2); ++ LASX_SRAI_W_2(in0, in1, in0, in1, 7); ++ temp0 = __lasx_xvshuf4i_w(in0, 0x9C); ++ temp1 = __lasx_xvshuf4i_w(in1, 0x9C); ++ ++ in0 = __lasx_xvldrepl_w(dest, 0); ++ in1 = __lasx_xvldrepl_w(dst, 0); ++ dst += stride; ++ in2 = __lasx_xvldrepl_w(dst, 0); ++ dst += stride; ++ in3 = __lasx_xvldrepl_w(dst, 0); ++ temp2 = __lasx_xvilvl_w(in2, in0); ++ temp2 = __lasx_vext2xv_wu_bu(temp2); ++ temp3 = __lasx_xvilvl_w(in1, in3); ++ temp3 = __lasx_vext2xv_wu_bu(temp3); ++ temp0 = __lasx_xvadd_w(temp0, temp2); ++ temp1 = __lasx_xvadd_w(temp1, temp3); ++ LASX_CLIP_W_0_255_2(temp0, temp1, temp0, temp1); ++ temp1 = __lasx_xvpickev_h(temp1, temp0); ++ temp0 = __lasx_xvpickev_b(temp1, temp1); ++ LASX_ST_W_4(temp0, 0, 5, 4, 1, dest, stride); ++} ++ ++static void put_vc1_mspel_mc_h_v_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride, int hmode, int vmode, ++ int rnd) ++{ ++ __m256i in0, in1, in2, in3; ++ __m256i t0, t1, t2, t3, t4, t5, t6, t7; ++ __m256i temp0, temp1, const_para1_2, const_para0_3; ++ __m256i const_r, const_sh; ++ __m256i sh = {0x0000000400000000, 0x0000000500000001, 0x0000000600000002, 0x0000000700000003}; ++ static const uint8_t para_value[][4] = {{4, 3, 53, 18}, ++ {1, 1, 9, 9}, ++ {3, 4, 18, 53}}; ++ static const int shift_value[] = {0, 5, 1, 5}; ++ int shift = (shift_value[hmode] + shift_value[vmode]) >> 1; ++ int r = (1 << (shift - 1)) + rnd - 1; ++ const uint8_t *para_v = para_value[vmode - 1]; ++ ++ const_r = __lasx_xvreplgr2vr_h(r); ++ const_sh = __lasx_xvreplgr2vr_h(shift); ++ src -= 1, src -= stride; ++ const_para0_3 = __lasx_xvldrepl_h(para_v, 0); ++ const_para1_2 = __lasx_xvldrepl_h(para_v, 2); ++ LASX_LD_4(src, stride, in0, in1, in2, in3); ++ in0 = __lasx_xvpermi_d(in0, 0xD8); ++ in1 = __lasx_xvpermi_d(in1, 0xD8); ++ in2 = __lasx_xvpermi_d(in2, 0xD8); ++ in3 = __lasx_xvpermi_d(in3, 0xD8); ++ LASX_ILVL_B_2_128SV(in2, in1, in3, in0, temp0, temp1); ++ LASX_DP2_H_BU(temp0, const_para1_2, t0); ++ LASX_DP2SUB_H_BU(t0, temp1, const_para0_3, t0); ++ src += (stride << 2); ++ in0 = LASX_LD(src); ++ in0 = __lasx_xvpermi_d(in0, 0xD8); ++ LASX_ILVL_B_2_128SV(in3, in2, in0, in1, temp0, temp1); ++ LASX_DP2_H_BU(temp0, const_para1_2, t1); ++ LASX_DP2SUB_H_BU(t1, temp1, const_para0_3, t1); ++ src += stride; ++ in1 = LASX_LD(src); ++ in1 = __lasx_xvpermi_d(in1, 0xD8); ++ LASX_ILVL_B_2_128SV(in0, in3, in1, in2, temp0, temp1); ++ LASX_DP2_H_BU(temp0, const_para1_2, t2); ++ LASX_DP2SUB_H_BU(t2, temp1, const_para0_3, t2); ++ src += stride; ++ in2 = LASX_LD(src); ++ in2 = __lasx_xvpermi_d(in2, 0xD8); ++ LASX_ILVL_B_2_128SV(in1, in0, in2, in3, temp0, temp1); ++ LASX_DP2_H_BU(temp0, const_para1_2, t3); ++ LASX_DP2SUB_H_BU(t3, temp1, const_para0_3, t3); ++ src += stride; ++ in3 = LASX_LD(src); ++ in3 = __lasx_xvpermi_d(in3, 0xD8); ++ LASX_ILVL_B_2_128SV(in2, in1, in3, in0, temp0, temp1); ++ LASX_DP2_H_BU(temp0, const_para1_2, t4); ++ LASX_DP2SUB_H_BU(t4, temp1, const_para0_3, t4); ++ src += stride; ++ in0 = LASX_LD(src); ++ in0 = __lasx_xvpermi_d(in0, 0xD8); ++ LASX_ILVL_B_2_128SV(in3, in2, in0, in1, temp0, temp1); ++ LASX_DP2_H_BU(temp0, const_para1_2, t5); ++ LASX_DP2SUB_H_BU(t5, temp1, const_para0_3, t5); ++ src += stride; ++ in1 = LASX_LD(src); ++ in1 = __lasx_xvpermi_d(in1, 0xD8); ++ LASX_ILVL_B_2_128SV(in0, in3, in1, in2, temp0, temp1); ++ LASX_DP2_H_BU(temp0, const_para1_2, t6); ++ LASX_DP2SUB_H_BU(t6, temp1, const_para0_3, t6); ++ src += stride; ++ in2 = LASX_LD(src); ++ in2 = __lasx_xvpermi_d(in2, 0xD8); ++ LASX_ILVL_B_2_128SV(in1, in0, in2, in3, temp0, temp1); ++ LASX_DP2_H_BU(temp0, const_para1_2, t7); ++ LASX_DP2SUB_H_BU(t7, temp1, const_para0_3, t7); ++ LASX_ADD_H_8(t0, const_r, t1, const_r, t2, const_r, t3, const_r, ++ t4, const_r, t5, const_r, t6, const_r, t7, const_r, ++ t0, t1, t2, t3, t4, t5, t6, t7); ++ t0 = __lasx_xvsra_h(t0, const_sh); ++ t1 = __lasx_xvsra_h(t1, const_sh); ++ t2 = __lasx_xvsra_h(t2, const_sh); ++ t3 = __lasx_xvsra_h(t3, const_sh); ++ t4 = __lasx_xvsra_h(t4, const_sh); ++ t5 = __lasx_xvsra_h(t5, const_sh); ++ t6 = __lasx_xvsra_h(t6, const_sh); ++ t7 = __lasx_xvsra_h(t7, const_sh); ++ LASX_TRANSPOSE8x8_H_128SV(t0, t1, t2, t3, t4, t5, t6, t7, ++ t0, t1, t2, t3, t4, t5, t6, t7); ++ para_v = para_value[hmode - 1]; ++ const_para0_3 = __lasx_xvldrepl_h(para_v, 0); ++ const_para1_2 = __lasx_xvldrepl_h(para_v, 2); ++ const_para0_3 = __lasx_vext2xv_h_b(const_para0_3); ++ const_para1_2 = __lasx_vext2xv_h_b(const_para1_2); ++ r = 64 - rnd; ++ const_r = __lasx_xvreplgr2vr_w(r); ++ in0 = __lasx_xvpermi_d(t0, 0x72); ++ in1 = __lasx_xvpermi_d(t1, 0x72); ++ in2 = __lasx_xvpermi_d(t2, 0x72); ++ t0 = __lasx_xvpermi_d(t0, 0xD8); ++ t1 = __lasx_xvpermi_d(t1, 0xD8); ++ t2 = __lasx_xvpermi_d(t2, 0xD8); ++ t3 = __lasx_xvpermi_d(t3, 0xD8); ++ t4 = __lasx_xvpermi_d(t4, 0xD8); ++ t5 = __lasx_xvpermi_d(t5, 0xD8); ++ t6 = __lasx_xvpermi_d(t6, 0xD8); ++ t7 = __lasx_xvpermi_d(t7, 0xD8); ++ LASX_ILVL_H_2_128SV(t2, t1, t3, t0, temp0, temp1); ++ LASX_DP2_W_H(temp0, const_para1_2, t0); ++ LASX_DP2SUB_W_H(t0, temp1, const_para0_3, t0); ++ LASX_ILVL_H_2_128SV(t3, t2, t4, t1, temp0, temp1); ++ LASX_DP2_W_H(temp0, const_para1_2, t1); ++ LASX_DP2SUB_W_H(t1, temp1, const_para0_3, t1); ++ LASX_ILVL_H_2_128SV(t4, t3, t5, t2, temp0, temp1); ++ LASX_DP2_W_H(temp0, const_para1_2, t2); ++ LASX_DP2SUB_W_H(t2, temp1, const_para0_3, t2); ++ LASX_ILVL_H_2_128SV(t5, t4, t6, t3, temp0, temp1); ++ LASX_DP2_W_H(temp0, const_para1_2, t3); ++ LASX_DP2SUB_W_H(t3, temp1, const_para0_3, t3); ++ LASX_ILVL_H_2_128SV(t6, t5, t7, t4, temp0, temp1); ++ LASX_DP2_W_H(temp0, const_para1_2, t4); ++ LASX_DP2SUB_W_H(t4, temp1, const_para0_3, t4); ++ LASX_ILVL_H_2_128SV(t7, t6, in0, t5, temp0, temp1); ++ LASX_DP2_W_H(temp0, const_para1_2, t5); ++ LASX_DP2SUB_W_H(t5, temp1, const_para0_3, t5); ++ LASX_ILVL_H_2_128SV(in0, t7, in1, t6, temp0, temp1); ++ LASX_DP2_W_H(temp0, const_para1_2, t6); ++ LASX_DP2SUB_W_H(t6, temp1, const_para0_3, t6); ++ LASX_ILVL_H_2_128SV(in1, in0, in2, t7, temp0, temp1); ++ LASX_DP2_W_H(temp0, const_para1_2, t7); ++ LASX_DP2SUB_W_H(t7, temp1, const_para0_3, t7); ++ t0 = __lasx_xvadd_w(t0, const_r); ++ t1 = __lasx_xvadd_w(t1, const_r); ++ t2 = __lasx_xvadd_w(t2, const_r); ++ t3 = __lasx_xvadd_w(t3, const_r); ++ t4 = __lasx_xvadd_w(t4, const_r); ++ t5 = __lasx_xvadd_w(t5, const_r); ++ t6 = __lasx_xvadd_w(t6, const_r); ++ t7 = __lasx_xvadd_w(t7, const_r); ++ LASX_SRAI_W_8(t0, t1, t2, t3, t4, t5, t6, t7, ++ t0, t1, t2, t3, t4, t5, t6, t7, 7); ++ LASX_TRANSPOSE8x8_W(t0, t1, t2, t3, t4, t5, t6, t7, ++ t0, t1, t2, t3, t4, t5, t6, t7); ++ LASX_CLIP_W_0_255_4(t0, t1, t2, t3, t0, t1, t2, t3); ++ LASX_CLIP_W_0_255_4(t4, t5, t6, t7, t4, t5, t6, t7); ++ LASX_PCKEV_H_4_128SV(t1, t0, t3, t2, t5, t4, t7, t6, ++ t0, t1, t2, t3); ++ LASX_PCKEV_B_2_128SV(t1, t0, t3, t2, t0, t1); ++ t0 = __lasx_xvperm_w(t0, sh); ++ t1 = __lasx_xvperm_w(t1, sh); ++ LASX_ST_D_4(t0, 0, 1, 2, 3, dst, stride); ++ dst += (stride << 2); ++ LASX_ST_D_4(t1, 0, 1, 2, 3, dst, stride); ++} ++ ++#define PUT_VC1_MSPEL_MC_LASX(hmode, vmode) \ ++void ff_put_vc1_mspel_mc ## hmode ## vmode ## _lasx(uint8_t *dst, \ ++ const uint8_t *src, \ ++ ptrdiff_t stride, int rnd) \ ++{ \ ++ put_vc1_mspel_mc_h_v_lasx(dst, src, stride, hmode, vmode, rnd); \ ++} \ ++void ff_put_vc1_mspel_mc ## hmode ## vmode ## _16_lasx(uint8_t *dst, \ ++ const uint8_t *src, \ ++ ptrdiff_t stride, int rnd) \ ++{ \ ++ put_vc1_mspel_mc_h_v_lasx(dst, src, stride, hmode, vmode, rnd); \ ++ put_vc1_mspel_mc_h_v_lasx(dst + 8, src + 8, stride, hmode, vmode, rnd); \ ++ dst += 8 * stride, src += 8 * stride; \ ++ put_vc1_mspel_mc_h_v_lasx(dst, src, stride, hmode, vmode, rnd); \ ++ put_vc1_mspel_mc_h_v_lasx(dst + 8, src + 8, stride, hmode, vmode, rnd); \ ++} ++ ++PUT_VC1_MSPEL_MC_LASX(1, 1); ++PUT_VC1_MSPEL_MC_LASX(1, 2); ++PUT_VC1_MSPEL_MC_LASX(1, 3); ++ ++PUT_VC1_MSPEL_MC_LASX(2, 1); ++PUT_VC1_MSPEL_MC_LASX(2, 2); ++PUT_VC1_MSPEL_MC_LASX(2, 3); ++ ++PUT_VC1_MSPEL_MC_LASX(3, 1); ++PUT_VC1_MSPEL_MC_LASX(3, 2); ++PUT_VC1_MSPEL_MC_LASX(3, 3); ++ ++void ff_put_no_rnd_vc1_chroma_mc8_lasx(uint8_t *dst /* align 8 */, ++ uint8_t *src /* align 1 */, ++ ptrdiff_t stride, int h, int x, int y) ++{ ++ const int intA = (8 - x) * (8 - y); ++ const int intB = (x) * (8 - y); ++ const int intC = (8 - x) * (y); ++ const int intD = (x) * (y); ++ __m256i src00, src01, src10, src11; ++ __m256i A, B, C, D; ++ int i; ++ ++ av_assert2(x < 8 && y < 8 && x >= 0 && y >= 0); ++ ++ A = __lasx_xvreplgr2vr_h(intA); ++ B = __lasx_xvreplgr2vr_h(intB); ++ C = __lasx_xvreplgr2vr_h(intC); ++ D = __lasx_xvreplgr2vr_h(intD); ++ for(i = 0; i < h; i++){ ++ LASX_LD_2(src, 1, src00, src01); ++ src += stride; ++ LASX_LD_2(src, 1, src10, src11); ++ ++ LASX_UNPCK_L_HU_BU_4(src00, src01, src10, src11, ++ src00, src01, src10, src11); ++ src00 = __lasx_xvmul_h(src00, A); ++ src01 = __lasx_xvmul_h(src01, B); ++ src10 = __lasx_xvmul_h(src10, C); ++ src11 = __lasx_xvmul_h(src11, D); ++ src00 = __lasx_xvadd_h(src00, src01); ++ src10 = __lasx_xvadd_h(src10, src11); ++ src00 = __lasx_xvadd_h(src00, src10); ++ src00 = __lasx_xvaddi_hu(src00, 28); ++ src00 = __lasx_xvsrli_h(src00, 6); ++ LASX_PCKEV_B_128SV(src00, src00, src00); ++ LASX_ST_D(src00, 0, dst); ++ dst += stride; ++ } ++} ++ ++static void put_vc1_mspel_mc_v_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride, int vmode, int rnd) ++{ ++ __m256i in0, in1, in2, in3, temp0, temp1, t0; ++ __m256i const_para0_3, const_para1_2, const_r, const_sh; ++ static const uint16_t para_value[][2] = {{0x0304, 0x1235}, ++ {0x0101, 0x0909}, ++ {0x0403, 0x3512}}; ++ const uint16_t *para_v = para_value[vmode - 1]; ++ static const int shift_value[] = {0, 6, 4, 6}; ++ static int add_value[3]; ++ ptrdiff_t stride_2x = stride << 1; ++ int i = 0; ++ add_value[2] = add_value[0] = 31 + rnd, add_value[1] = 7 + rnd; ++ ++ const_r = __lasx_xvreplgr2vr_h(add_value[vmode - 1]); ++ const_sh = __lasx_xvreplgr2vr_h(shift_value[vmode]); ++ const_para0_3 = __lasx_xvreplgr2vr_h(*para_v); ++ const_para1_2 = __lasx_xvreplgr2vr_h(*(para_v + 1)); ++ ++ LASX_LD_2((src - stride), stride, in0, in1); ++ in2 = LASX_LD(src + stride); ++ in0 = __lasx_xvpermi_d(in0, 0xD8); ++ in1 = __lasx_xvpermi_d(in1, 0xD8); ++ in2 = __lasx_xvpermi_d(in2, 0xD8); ++ for (; i < 16; i++) { ++ in3 = LASX_LD(src + stride_2x); ++ in3 = __lasx_xvpermi_d(in3, 0xD8); ++ LASX_ILVL_B_2_128SV(in2, in1, in3, in0, temp0, temp1); ++ LASX_DP2_H_BU(temp0, const_para1_2, t0); ++ LASX_DP2SUB_H_BU(t0, temp1, const_para0_3, t0); ++ LASX_ADD_H(t0, const_r, t0); ++ t0 = __lasx_xvsra_h(t0, const_sh); ++ LASX_CLIP_H_0_255(t0, t0); ++ LASX_PCKEV_B_128SV(t0, t0, t0); ++ LASX_ST_D_2(t0, 0, 2, dst, 8); ++ dst += stride; ++ src += stride; ++ in0 = in1; ++ in1 = in2; ++ in2 = in3; ++ } ++} ++ ++#define PUT_VC1_MSPEL_MC_V_LASX(vmode) \ ++void ff_put_vc1_mspel_mc0 ## vmode ## _16_lasx(uint8_t *dst, \ ++ const uint8_t *src, \ ++ ptrdiff_t stride, int rnd) \ ++{ \ ++ put_vc1_mspel_mc_v_lasx(dst, src, stride, vmode, rnd); \ ++} ++ ++PUT_VC1_MSPEL_MC_V_LASX(1); ++PUT_VC1_MSPEL_MC_V_LASX(2); ++PUT_VC1_MSPEL_MC_V_LASX(3); ++ ++#define ROW_LASX(in0, in1, in2, in3, out0) \ ++ LASX_ILVL_B_2_128SV(in2, in1, in3, in0, tmp0_m, tmp1_m); \ ++ LASX_DP2_H_BU(tmp0_m, const_para1_2, out0); \ ++ LASX_DP2SUB_H_BU(out0, tmp1_m, const_para0_3, out0); \ ++ LASX_ADD_H(out0, const_r, out0); \ ++ out0 = __lasx_xvsra_h(out0, const_sh); \ ++ LASX_CLIP_H_0_255(out0, out0); \ ++ LASX_PCKEV_B(out0, out0, out0); ++ ++static void put_vc1_mspel_mc_h_lasx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride, int hmode, int rnd) ++{ ++ __m256i in0, in1, in2, in3, in4, in5, in6, in7, ++ in8, in9, in10, in11, in12, in13, in14, in15; ++ __m256i out0, out1, out2, out3, out4, out5, out6, out7, out8, out9, ++ out10, out11, out12, out13, out14, out15, out16, out17, out18; ++ __m256i const_para0_3, const_para1_2, const_r, const_sh; ++ __m256i tmp0_m, tmp1_m, tmp2_m, tmp3_m; ++ __m256i tmp4_m, tmp5_m, tmp6_m, tmp7_m; ++ __m256i t0, t1, t2, t3, t4, t5, t6, t7; ++ static const uint16_t para_value[][2] = {{0x0304, 0x1235}, ++ {0x0101, 0x0909}, ++ {0x0403, 0x3512}}; ++ const uint16_t *para_v = para_value[hmode - 1]; ++ static const int shift_value[] = {0, 6, 4, 6}; ++ static int add_value[3]; ++ add_value[2] = add_value[0] = 32 - rnd, add_value[1] = 8 - rnd; ++ ++ const_r = __lasx_xvreplgr2vr_h(add_value[hmode - 1]); ++ const_sh = __lasx_xvreplgr2vr_h(shift_value[hmode]); ++ const_para0_3 = __lasx_xvreplgr2vr_h(*para_v); ++ const_para1_2 = __lasx_xvreplgr2vr_h(*(para_v + 1)); ++ src -= 1; ++ ++ LASX_LD_8(src, stride, in0, in1, in2, in3, in4, in5, in6, in7); ++ src += stride << 3; ++ LASX_LD_8(src, stride, in8, in9, in10, in11, in12, in13, in14, in15); ++ LASX_ILVL_B_8_128SV(in2, in0, in3, in1, in6, in4, in7, in5, ++ in10, in8, in11, in9, in14, in12, in15, in13, ++ tmp0_m, tmp1_m, tmp2_m, tmp3_m, ++ tmp4_m, tmp5_m, tmp6_m, tmp7_m); ++ LASX_ILVLH_B_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, t1, t0, t3, t2); ++ LASX_ILVLH_B_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, t5, t4, t7, t6); ++ LASX_ILVLH_W_2_128SV(t2, t0, t3, t1, tmp2_m, tmp0_m, tmp6_m, tmp4_m); ++ LASX_ILVLH_W_2_128SV(t6, t4, t7, t5, tmp3_m, tmp1_m, tmp7_m, tmp5_m); ++ LASX_ILVLH_D_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, out1, out0, out3, out2); ++ LASX_ILVLH_D_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, out5, out4, out7, out6); ++ ++ LASX_ILVH_B_8_128SV(in2, in0, in3, in1, in6, in4, in7, in5, ++ in10, in8, in11, in9, in14, in12, in15, in13, ++ tmp0_m, tmp1_m, tmp2_m, tmp3_m, ++ tmp4_m, tmp5_m, tmp6_m, tmp7_m); ++ LASX_ILVLH_B_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, t1, t0, t3, t2); ++ LASX_ILVLH_B_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, t5, t4, t7, t6); ++ LASX_ILVLH_W_2_128SV(t2, t0, t3, t1, tmp2_m, tmp0_m, tmp6_m, tmp4_m); ++ LASX_ILVLH_W_2_128SV(t6, t4, t7, t5, tmp3_m, tmp1_m, tmp7_m, tmp5_m); ++ LASX_ILVLH_D_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, out9, out8, out11, out10); ++ LASX_ILVLH_D_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, ++ out13, out12, out15, out14); ++ LASX_PCKOD_Q_2(out0, out0, out1, out1, out16, out17); ++ LASX_PCKOD_Q(out2, out2, out18); ++ ++ out0 = __lasx_xvpermi_d(out0, 0xD8); ++ out1 = __lasx_xvpermi_d(out1, 0xD8); ++ out2 = __lasx_xvpermi_d(out2, 0xD8); ++ out3 = __lasx_xvpermi_d(out3, 0xD8); ++ out4 = __lasx_xvpermi_d(out4, 0xD8); ++ out5 = __lasx_xvpermi_d(out5, 0xD8); ++ out6 = __lasx_xvpermi_d(out6, 0xD8); ++ out7 = __lasx_xvpermi_d(out7, 0xD8); ++ out8 = __lasx_xvpermi_d(out8, 0xD8); ++ out9 = __lasx_xvpermi_d(out9, 0xD8); ++ out10 = __lasx_xvpermi_d(out10, 0xD8); ++ out11 = __lasx_xvpermi_d(out11, 0xD8); ++ out12 = __lasx_xvpermi_d(out12, 0xD8); ++ out13 = __lasx_xvpermi_d(out13, 0xD8); ++ out14 = __lasx_xvpermi_d(out14, 0xD8); ++ out15 = __lasx_xvpermi_d(out15, 0xD8); ++ out16 = __lasx_xvpermi_d(out16, 0xD8); ++ out17 = __lasx_xvpermi_d(out17, 0xD8); ++ out18 = __lasx_xvpermi_d(out18, 0xD8); ++ ++ ROW_LASX(out0, out1, out2, out3, in0); ++ ROW_LASX(out1, out2, out3, out4, in1); ++ ROW_LASX(out2, out3, out4, out5, in2); ++ ROW_LASX(out3, out4, out5, out6, in3); ++ ROW_LASX(out4, out5, out6, out7, in4); ++ ROW_LASX(out5, out6, out7, out8, in5); ++ ROW_LASX(out6, out7, out8, out9, in6); ++ ROW_LASX(out7, out8, out9, out10, in7); ++ ROW_LASX(out8, out9, out10, out11, in8); ++ ROW_LASX(out9, out10, out11, out12, in9); ++ ROW_LASX(out10, out11, out12, out13, in10); ++ ROW_LASX(out11, out12, out13, out14, in11); ++ ROW_LASX(out12, out13, out14, out15, in12); ++ ROW_LASX(out13, out14, out15, out16, in13); ++ ROW_LASX(out14, out15, out16, out17, in14); ++ ROW_LASX(out15, out16, out17, out18, in15); ++ ++ LASX_ILVL_B_8_128SV(in2, in0, in3, in1, in6, in4, in7, in5, ++ in10, in8, in11, in9, in14, in12, in15, in13, ++ tmp0_m, tmp1_m, tmp2_m, tmp3_m, ++ tmp4_m, tmp5_m, tmp6_m, tmp7_m); ++ LASX_ILVLH_B_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, t1, t0, t3, t2); ++ LASX_ILVLH_B_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, t5, t4, t7, t6); ++ LASX_ILVLH_W_2_128SV(t2, t0, t3, t1, tmp2_m, tmp0_m, tmp6_m, tmp4_m); ++ LASX_ILVLH_W_2_128SV(t6, t4, t7, t5, tmp3_m, tmp1_m, tmp7_m, tmp5_m); ++ LASX_ILVLH_D_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, out1, out0, out3, out2); ++ LASX_ILVLH_D_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, out5, out4, out7, out6); ++ ++ LASX_ILVH_B_8_128SV(in2, in0, in3, in1, in6, in4, in7, in5, ++ in10, in8, in11, in9, in14, in12, in15, in13, ++ tmp0_m, tmp1_m, tmp2_m, tmp3_m, ++ tmp4_m, tmp5_m, tmp6_m, tmp7_m); ++ LASX_ILVLH_B_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, t1, t0, t3, t2); ++ LASX_ILVLH_B_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, t5, t4, t7, t6); ++ LASX_ILVLH_W_2_128SV(t2, t0, t3, t1, tmp2_m, tmp0_m, tmp6_m, tmp4_m); ++ LASX_ILVLH_W_2_128SV(t6, t4, t7, t5, tmp3_m, tmp1_m, tmp7_m, tmp5_m); ++ LASX_ILVLH_D_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, out9, out8, out11, out10); ++ LASX_ILVLH_D_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, ++ out13, out12, out15, out14); ++ LASX_ST_D_2(out0, 0, 1, dst, 8); ++ dst += stride; ++ LASX_ST_D_2(out1, 0, 1, dst, 8); ++ dst += stride; ++ LASX_ST_D_2(out2, 0, 1, dst, 8); ++ dst += stride; ++ LASX_ST_D_2(out3, 0, 1, dst, 8); ++ dst += stride; ++ LASX_ST_D_2(out4, 0, 1, dst, 8); ++ dst += stride; ++ LASX_ST_D_2(out5, 0, 1, dst, 8); ++ dst += stride; ++ LASX_ST_D_2(out6, 0, 1, dst, 8); ++ dst += stride; ++ LASX_ST_D_2(out7, 0, 1, dst, 8); ++ dst += stride; ++ LASX_ST_D_2(out8, 0, 1, dst, 8); ++ dst += stride; ++ LASX_ST_D_2(out9, 0, 1, dst, 8); ++ dst += stride; ++ LASX_ST_D_2(out10, 0, 1, dst, 8); ++ dst += stride; ++ LASX_ST_D_2(out11, 0, 1, dst, 8); ++ dst += stride; ++ LASX_ST_D_2(out12, 0, 1, dst, 8); ++ dst += stride; ++ LASX_ST_D_2(out13, 0, 1, dst, 8); ++ dst += stride; ++ LASX_ST_D_2(out14, 0, 1, dst, 8); ++ dst += stride; ++ LASX_ST_D_2(out15, 0, 1, dst, 8); ++} ++ ++#define PUT_VC1_MSPEL_MC_H_LASX(hmode) \ ++void ff_put_vc1_mspel_mc ## hmode ## 0_16_lasx(uint8_t *dst, \ ++ const uint8_t *src, \ ++ ptrdiff_t stride, int rnd) \ ++{ \ ++ put_vc1_mspel_mc_h_lasx(dst, src, stride, hmode, rnd); \ ++} ++ ++PUT_VC1_MSPEL_MC_H_LASX(1); ++PUT_VC1_MSPEL_MC_H_LASX(2); ++PUT_VC1_MSPEL_MC_H_LASX(3); +diff --git a/libavcodec/loongarch/vc1dsp_loongarch.h b/libavcodec/loongarch/vc1dsp_loongarch.h +new file mode 100644 +index 0000000000..398631aecc +--- /dev/null ++++ b/libavcodec/loongarch/vc1dsp_loongarch.h +@@ -0,0 +1,79 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hao Chen ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef AVCODEC_LOONGARCH_VC1DSP_LOONGARCH_H ++#define AVCODEC_LOONGARCH_VC1DSP_LOONGARCH_H ++ ++#include "libavcodec/vc1dsp.h" ++#include "libavutil/avassert.h" ++ ++void ff_vc1_inv_trans_8x8_lasx(int16_t block[64]); ++void ff_vc1_inv_trans_8x8_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block); ++void ff_vc1_inv_trans_8x4_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block); ++void ff_vc1_inv_trans_8x4_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block); ++void ff_vc1_inv_trans_4x8_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block); ++void ff_vc1_inv_trans_4x8_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *blokc); ++void ff_vc1_inv_trans_4x4_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block); ++void ff_vc1_inv_trans_4x4_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block); ++ ++#define FF_PUT_VC1_MSPEL_MC_LASX(hmode, vmode) \ ++void ff_put_vc1_mspel_mc ## hmode ## vmode ## _lasx(uint8_t *dst, \ ++ const uint8_t *src, \ ++ ptrdiff_t stride, int rnd); \ ++void ff_put_vc1_mspel_mc ## hmode ## vmode ## _16_lasx(uint8_t *dst, \ ++ const uint8_t *src, \ ++ ptrdiff_t stride, int rnd); ++ ++FF_PUT_VC1_MSPEL_MC_LASX(1, 1); ++FF_PUT_VC1_MSPEL_MC_LASX(1, 2); ++FF_PUT_VC1_MSPEL_MC_LASX(1, 3); ++ ++FF_PUT_VC1_MSPEL_MC_LASX(2, 1); ++FF_PUT_VC1_MSPEL_MC_LASX(2, 2); ++FF_PUT_VC1_MSPEL_MC_LASX(2, 3); ++ ++FF_PUT_VC1_MSPEL_MC_LASX(3, 1); ++FF_PUT_VC1_MSPEL_MC_LASX(3, 2); ++FF_PUT_VC1_MSPEL_MC_LASX(3, 3); ++ ++#define FF_PUT_VC1_MSPEL_MC_V_LASX(vmode) \ ++void ff_put_vc1_mspel_mc0 ## vmode ## _16_lasx(uint8_t *dst, \ ++ const uint8_t *src, \ ++ ptrdiff_t stride, int rnd); ++ ++FF_PUT_VC1_MSPEL_MC_V_LASX(1); ++FF_PUT_VC1_MSPEL_MC_V_LASX(2); ++FF_PUT_VC1_MSPEL_MC_V_LASX(3); ++ ++#define FF_PUT_VC1_MSPEL_MC_H_LASX(hmode) \ ++void ff_put_vc1_mspel_mc ## hmode ## 0_16_lasx(uint8_t *dst, \ ++ const uint8_t *src, \ ++ ptrdiff_t stride, int rnd); ++ ++FF_PUT_VC1_MSPEL_MC_H_LASX(1); ++FF_PUT_VC1_MSPEL_MC_H_LASX(2); ++FF_PUT_VC1_MSPEL_MC_H_LASX(3); ++ ++void ff_put_no_rnd_vc1_chroma_mc8_lasx(uint8_t *dst /* align 8 */, ++ uint8_t *src /* align 1 */, ++ ptrdiff_t stride, int h, int x, int y); ++ ++#endif /* AVCODEC_LOONGARCH_VC1DSP_LOONGARCH_H */ +diff --git a/libavcodec/loongarch/videodsp_init.c b/libavcodec/loongarch/videodsp_init.c +new file mode 100644 +index 0000000000..bfe35ad90f +--- /dev/null ++++ b/libavcodec/loongarch/videodsp_init.c +@@ -0,0 +1,46 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Xiwei Gu ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "config.h" ++#include "libavutil/attributes.h" ++#include "libavcodec/videodsp.h" ++ ++static void prefetch_loongarch(uint8_t *mem, ptrdiff_t stride, int h) ++{ ++ register const uint8_t *p = mem; ++ ++ __asm__ volatile ( ++ "1: \n\t" ++ "preld 0, %[p], 0 \n\t" ++ "preld 0, %[p], 32 \n\t" ++ "addi.d %[h], %[h], -1 \n\t" ++ "add.d %[p], %[p], %[stride] \n\t" ++ ++ "blt $r0, %[h], 1b \n\t" ++ : [p] "+r" (p), [h] "+r" (h) ++ : [stride] "r" (stride) ++ ); ++} ++ ++av_cold void ff_videodsp_init_loongarch(VideoDSPContext *ctx, int bpc) ++{ ++ ctx->prefetch = prefetch_loongarch; ++} +diff --git a/libavcodec/loongarch/vp8_lpf_lsx.c b/libavcodec/loongarch/vp8_lpf_lsx.c +new file mode 100644 +index 0000000000..d16d5dca4f +--- /dev/null ++++ b/libavcodec/loongarch/vp8_lpf_lsx.c +@@ -0,0 +1,437 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hecai Yuan ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavcodec/vp8dsp.h" ++#include "vp8dsp_loongarch.h" ++#include "libavutil/loongarch/generic_macros_lsx.h" ++ ++#define VP8_MBFILTER(p2, p1, p0, q0, q1, q2, mask, hev) \ ++{ \ ++ __m128i p2_m, p1_m, p0_m, q2_m, q1_m, q0_m; \ ++ __m128i filt, q0_sub_p0, cnst4b, cnst3b; \ ++ __m128i u, filt1, filt2, filt_sign, q0_sub_p0_sign; \ ++ __m128i q0_sub_p0_l, q0_sub_p0_h, filt_l, u_l, u_h, filt_h; \ ++ __m128i cnst3h, cnst27h, cnst18h, cnst63h; \ ++ \ ++ cnst3h = __lsx_vreplgr2vr_h(3); \ ++ \ ++ p2_m = __lsx_vxori_b(p2, 0x80); \ ++ p1_m = __lsx_vxori_b(p1, 0x80); \ ++ p0_m = __lsx_vxori_b(p0, 0x80); \ ++ q0_m = __lsx_vxori_b(q0, 0x80); \ ++ q1_m = __lsx_vxori_b(q1, 0x80); \ ++ q2_m = __lsx_vxori_b(q2, 0x80); \ ++ \ ++ filt = __lsx_vssub_b(p1_m, q1_m); \ ++ q0_sub_p0 = __lsx_vsub_b(q0_m, p0_m); \ ++ q0_sub_p0_sign = __lsx_vslti_b(q0_sub_p0, 0); \ ++ filt_sign = __lsx_vslti_b(filt, 0); \ ++ \ ++ /* right part */ \ ++ q0_sub_p0_l = __lsx_vilvl_b(q0_sub_p0_sign, q0_sub_p0); \ ++ q0_sub_p0_l = __lsx_vmul_h(q0_sub_p0_l, cnst3h); \ ++ filt_l = __lsx_vilvl_b(filt_sign, filt); \ ++ filt_l = __lsx_vadd_h(filt_l, q0_sub_p0_l); \ ++ filt_l = __lsx_vsat_h(filt_l, 7); \ ++ \ ++ /* left part */ \ ++ q0_sub_p0_h = __lsx_vilvh_b(q0_sub_p0_sign, q0_sub_p0); \ ++ q0_sub_p0_h = __lsx_vmul_h(q0_sub_p0_h, cnst3h); \ ++ filt_h = __lsx_vilvh_b(filt_sign, filt); \ ++ filt_h = __lsx_vadd_h(filt_h, q0_sub_p0_h); \ ++ filt_h = __lsx_vsat_h(filt_h, 7); \ ++ \ ++ /* combine left and right part */ \ ++ filt = __lsx_vpickev_b(filt_h, filt_l); \ ++ filt = filt & mask; \ ++ filt2 = filt & hev; \ ++ /* filt_val &= ~hev */ \ ++ hev = __lsx_vxori_b(hev, 0xff); \ ++ filt = filt & hev; \ ++ cnst4b = __lsx_vreplgr2vr_b(4); \ ++ filt1 = __lsx_vsadd_b(filt2, cnst4b); \ ++ filt1 = __lsx_vsrai_b(filt1, 3); \ ++ cnst3b = __lsx_vreplgr2vr_b(3); \ ++ filt2 = __lsx_vsadd_b(filt2, cnst3b); \ ++ filt2 = __lsx_vsrai_b(filt2, 3); \ ++ q0_m = __lsx_vssub_b(q0_m, filt1); \ ++ p0_m = __lsx_vsadd_b(p0_m, filt2); \ ++ \ ++ filt_sign = __lsx_vslti_b(filt, 0); \ ++ filt_l = __lsx_vilvl_b(filt_sign, filt); \ ++ filt_h = __lsx_vilvh_b(filt_sign, filt); \ ++ \ ++ cnst27h = __lsx_vreplgr2vr_h(27); \ ++ cnst63h = __lsx_vreplgr2vr_h(63); \ ++ \ ++ /* right part */ \ ++ u_l = __lsx_vmul_h(filt_l, cnst27h); \ ++ u_l = __lsx_vadd_h(u_l, cnst63h); \ ++ u_l = __lsx_vsrai_h(u_l, 7); \ ++ u_l = __lsx_vsat_h(u_l, 7); \ ++ /* left part */ \ ++ u_h = __lsx_vmul_h(filt_h, cnst27h); \ ++ u_h = __lsx_vadd_h(u_h, cnst63h); \ ++ u_h = __lsx_vsrai_h(u_h, 7); \ ++ u_h = __lsx_vsat_h(u_h, 7); \ ++ /* combine left and right part */ \ ++ u = __lsx_vpickev_b(u_h, u_l); \ ++ q0_m = __lsx_vssub_b(q0_m, u); \ ++ q0 = __lsx_vxori_b(q0_m, 0x80); \ ++ p0_m = __lsx_vsadd_b(p0_m, u); \ ++ p0 = __lsx_vxori_b(p0_m, 0x80); \ ++ cnst18h = __lsx_vreplgr2vr_h(18); \ ++ u_l = __lsx_vmul_h(filt_l, cnst18h); \ ++ u_l = __lsx_vadd_h(u_l, cnst63h); \ ++ u_l = __lsx_vsrai_h(u_l, 7); \ ++ u_l = __lsx_vsat_h(u_l, 7); \ ++ \ ++ /* left part */ \ ++ u_h = __lsx_vmul_h(filt_h, cnst18h); \ ++ u_h = __lsx_vadd_h(u_h, cnst63h); \ ++ u_h = __lsx_vsrai_h(u_h, 7); \ ++ u_h = __lsx_vsat_h(u_h, 7); \ ++ /* combine left and right part */ \ ++ u = __lsx_vpickev_b(u_h, u_l); \ ++ q1_m = __lsx_vssub_b(q1_m, u); \ ++ q1 = __lsx_vxori_b(q1_m, 0x80); \ ++ p1_m = __lsx_vsadd_b(p1_m, u); \ ++ p1 = __lsx_vxori_b(p1_m, 0x80); \ ++ u_l = __lsx_vslli_h(filt_l, 3); \ ++ u_l = __lsx_vadd_h(u_l, filt_l); \ ++ u_l = __lsx_vadd_h(u_l, cnst63h); \ ++ u_l = __lsx_vsrai_h(u_l, 7); \ ++ u_l = __lsx_vsat_h(u_l, 7); \ ++ \ ++ /* left part */ \ ++ u_h = __lsx_vslli_h(filt_h, 3); \ ++ u_h = __lsx_vadd_h(u_h, filt_h); \ ++ u_h = __lsx_vadd_h(u_h, cnst63h); \ ++ u_h = __lsx_vsrai_h(u_h, 7); \ ++ u_h = __lsx_vsat_h(u_h, 7); \ ++ /* combine left and right part */ \ ++ u = __lsx_vpickev_b(u_h, u_l); \ ++ q2_m = __lsx_vssub_b(q2_m, u); \ ++ q2 = __lsx_vxori_b(q2_m, 0x80); \ ++ p2_m = __lsx_vsadd_b(p2_m, u); \ ++ p2 = __lsx_vxori_b(p2_m, 0x80); \ ++} ++ ++#define LPF_MASK_HEV(p3_src, p2_src, p1_src, p0_src, \ ++ q0_src, q1_src, q2_src, q3_src, \ ++ limit_src, b_limit_src, thresh_src, \ ++ hev_dst, mask_dst, flat_dst) \ ++{ \ ++ __m128i p3_asub_p2_m, p2_asub_p1_m, p1_asub_p0_m, q1_asub_q0_m; \ ++ __m128i p1_asub_q1_m, p0_asub_q0_m, q3_asub_q2_m, q2_asub_q1_m; \ ++ \ ++ /* absolute subtraction of pixel values */ \ ++ p3_asub_p2_m = __lsx_vabsd_bu(p3_src, p2_src); \ ++ p2_asub_p1_m = __lsx_vabsd_bu(p2_src, p1_src); \ ++ p1_asub_p0_m = __lsx_vabsd_bu(p1_src, p0_src); \ ++ q1_asub_q0_m = __lsx_vabsd_bu(q1_src, q0_src); \ ++ q2_asub_q1_m = __lsx_vabsd_bu(q2_src, q1_src); \ ++ q3_asub_q2_m = __lsx_vabsd_bu(q3_src, q2_src); \ ++ p0_asub_q0_m = __lsx_vabsd_bu(p0_src, q0_src); \ ++ p1_asub_q1_m = __lsx_vabsd_bu(p1_src, q1_src); \ ++ \ ++ /* calculation of hev */ \ ++ flat_dst = __lsx_vmax_bu(p1_asub_p0_m, q1_asub_q0_m); \ ++ hev_dst = __lsx_vslt_bu(thresh_src, flat_dst); \ ++ /* calculation of mask */ \ ++ p0_asub_q0_m = __lsx_vsadd_bu(p0_asub_q0_m, p0_asub_q0_m); \ ++ p1_asub_q1_m = __lsx_vsrli_b(p1_asub_q1_m, 1); \ ++ p0_asub_q0_m = __lsx_vsadd_bu(p0_asub_q0_m, p1_asub_q1_m); \ ++ mask_dst = __lsx_vslt_bu(b_limit_src, p0_asub_q0_m); \ ++ mask_dst = __lsx_vmax_bu(flat_dst, mask_dst); \ ++ p3_asub_p2_m = __lsx_vmax_bu(p3_asub_p2_m, p2_asub_p1_m); \ ++ mask_dst = __lsx_vmax_bu(p3_asub_p2_m, mask_dst); \ ++ q2_asub_q1_m = __lsx_vmax_bu(q2_asub_q1_m, q3_asub_q2_m); \ ++ mask_dst = __lsx_vmax_bu(q2_asub_q1_m, mask_dst); \ ++ mask_dst = __lsx_vslt_bu(limit_src, mask_dst); \ ++ mask_dst = __lsx_vxori_b(mask_dst, 0xff); \ ++} ++ ++#define VP8_ST6x1_UB(in0, in0_idx, in1, in1_idx, pdst, stride) \ ++{ \ ++ \ ++ __lsx_vstelm_w(in0, pdst, 0, in0_idx); \ ++ __lsx_vstelm_h(in1, pdst + stride, 0, in1_idx); \ ++} ++ ++void ff_vp8_v_loop_filter16_lsx(uint8_t *dst, ptrdiff_t stride, int b_limit_in, ++ int limit_in, int thresh_in) ++{ ++ __m128i p3, p2, p1, p0, q3, q2, q1, q0; ++ __m128i mask, hev, flat, thresh, limit, b_limit; ++ ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ ptrdiff_t stride4 = stride2 << 1; ++ ++ b_limit = __lsx_vreplgr2vr_b(b_limit_in); ++ limit = __lsx_vreplgr2vr_b(limit_in); ++ thresh = __lsx_vreplgr2vr_b(thresh_in); ++ ++ /*load vector elements*/ ++ LSX_DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, ++ dst - stride, 0, p3, p2, p1, p0); ++ LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, dst + stride3, 0, ++ q0, q1, q2, q3); ++ LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, hev, mask, flat); ++ VP8_MBFILTER(p2, p1, p0, q0, q1, q2, mask, hev); ++ ++ /*store vector elements*/ ++ __lsx_vst(p2, dst - stride3, 0); ++ __lsx_vst(p1, dst - stride2, 0); ++ __lsx_vst(p0, dst - stride, 0); ++ __lsx_vst(q0, dst, 0); ++ ++ __lsx_vst(q1, dst + stride, 0); ++ __lsx_vst(q2, dst + stride2, 0); ++} ++ ++void ff_vp8_v_loop_filter8uv_lsx(uint8_t *dst_u, uint8_t *dst_v, ++ ptrdiff_t stride, int b_limit_in, ++ int limit_in, int thresh_in) ++{ ++ __m128i p3, p2, p1, p0, q3, q2, q1, q0; ++ __m128i mask, hev, flat, thresh, limit, b_limit; ++ __m128i p3_u, p2_u, p1_u, p0_u, q3_u, q2_u, q1_u, q0_u; ++ __m128i p3_v, p2_v, p1_v, p0_v, q3_v, q2_v, q1_v, q0_v; ++ ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ ptrdiff_t stride4 = stride2 << 1; ++ ++ b_limit = __lsx_vreplgr2vr_b(b_limit_in); ++ limit = __lsx_vreplgr2vr_b(limit_in); ++ thresh = __lsx_vreplgr2vr_b(thresh_in); ++ ++ LSX_DUP4_ARG2(__lsx_vld, dst_u - stride4, 0, dst_u - stride3, 0, dst_u - stride2, 0, ++ dst_u - stride, 0, p3_u, p2_u, p1_u, p0_u); ++ LSX_DUP4_ARG2(__lsx_vld, dst_u, 0, dst_u + stride, 0, dst_u + stride2, 0, ++ dst_u + stride3, 0, q0_u, q1_u, q2_u, q3_u); ++ ++ LSX_DUP4_ARG2(__lsx_vld, dst_v - stride4, 0, dst_v - stride3, 0, dst_v - stride2, 0, ++ dst_v - stride, 0, p3_v, p2_v, p1_v, p0_v); ++ LSX_DUP4_ARG2(__lsx_vld, dst_v, 0, dst_v + stride, 0, dst_v + stride2, 0, ++ dst_v + stride3, 0, q0_v, q1_v, q2_v, q3_v); ++ ++ /* rht 8 element of p3 are u pixel and left 8 element of p3 are v pixei */ ++ LSX_DUP4_ARG2(__lsx_vilvl_d, p3_v, p3_u, p2_v, p2_u, p1_v, p1_u, p0_v, p0_u, p3, p2, p1, p0); ++ LSX_DUP4_ARG2(__lsx_vilvl_d, q0_v, q0_u, q1_v, q1_u, q2_v, q2_u, q3_v, q3_u, q0, q1, q2, q3); ++ LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, ++ hev, mask, flat); ++ VP8_MBFILTER(p2, p1, p0, q0, q1, q2, mask, hev); ++ ++ __lsx_vstelm_d(p2, dst_u - stride3, 0, 0); ++ __lsx_vstelm_d(p1, dst_u - stride2, 0, 0); ++ __lsx_vstelm_d(p0, dst_u - stride , 0, 0); ++ __lsx_vstelm_d(q0, dst_u, 0, 0); ++ ++ __lsx_vstelm_d(q1, dst_u + stride, 0, 0); ++ __lsx_vstelm_d(q2, dst_u + stride2, 0, 0); ++ ++ __lsx_vstelm_d(p2, dst_v - stride3, 0, 1); ++ __lsx_vstelm_d(p1, dst_v - stride2, 0, 1); ++ __lsx_vstelm_d(p0, dst_v - stride , 0, 1); ++ __lsx_vstelm_d(q0, dst_v, 0, 1); ++ ++ __lsx_vstelm_d(q1, dst_v + stride, 0, 1); ++ __lsx_vstelm_d(q2, dst_v + stride2, 0, 1); ++} ++ ++void ff_vp8_h_loop_filter16_lsx(uint8_t *dst, ptrdiff_t stride, int b_limit_in, ++ int limit_in, int thresh_in) ++{ ++ uint8_t *temp_src; ++ __m128i p3, p2, p1, p0, q3, q2, q1, q0; ++ __m128i mask, hev, flat, thresh, limit, b_limit; ++ __m128i row0, row1, row2, row3, row4, row5, row6, row7, row8; ++ __m128i row9, row10, row11, row12, row13, row14, row15; ++ __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; ++ ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ ptrdiff_t stride4 = stride2 << 1; ++ ++ b_limit = __lsx_vreplgr2vr_b(b_limit_in); ++ limit = __lsx_vreplgr2vr_b(limit_in); ++ thresh = __lsx_vreplgr2vr_b(thresh_in); ++ ++ temp_src = dst - 4; ++ LSX_DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, temp_src + stride2, 0, ++ temp_src + stride3, 0, row0, row1, row2, row3); ++ temp_src += stride4; ++ LSX_DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, ++ temp_src + stride2, 0, temp_src + stride3, 0, row4, row5, row6, row7); ++ ++ temp_src += stride4; ++ LSX_DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, temp_src + stride2, 0, ++ temp_src + stride3, 0, row8, row9, row10, row11); ++ temp_src += stride4; ++ LSX_DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, ++ temp_src + stride2, 0, temp_src + stride3, 0, row12, row13, row14, row15); ++ TRANSPOSE16x8_B(row0, row1, row2, row3, row4, row5, row6, row7, row8, row9, row10, row11, ++ row12, row13, row14, row15, p3, p2, p1, p0, q0, q1, q2, q3); ++ ++ LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, hev, mask, flat); ++ VP8_MBFILTER(p2, p1, p0, q0, q1, q2, mask, hev); ++ ++ tmp0 = __lsx_vilvl_b(p1, p2); ++ tmp1 = __lsx_vilvl_b(q0, p0); ++ ++ tmp3 = __lsx_vilvl_h(tmp1, tmp0); ++ tmp4 = __lsx_vilvh_h(tmp1, tmp0); ++ ++ tmp0 = __lsx_vilvh_b(p1, p2); ++ tmp1 = __lsx_vilvh_b(q0, p0); ++ ++ tmp6 = __lsx_vilvl_h(tmp1, tmp0); ++ tmp7 = __lsx_vilvh_h(tmp1, tmp0); ++ ++ tmp2 = __lsx_vilvl_b(q2, q1); ++ tmp5 = __lsx_vilvh_b(q2, q1); ++ ++ temp_src = dst - 3; ++ VP8_ST6x1_UB(tmp3, 0, tmp2, 0, temp_src, 4); ++ temp_src += stride; ++ VP8_ST6x1_UB(tmp3, 1, tmp2, 1, temp_src, 4); ++ temp_src += stride; ++ VP8_ST6x1_UB(tmp3, 2, tmp2, 2, temp_src, 4); ++ temp_src += stride; ++ VP8_ST6x1_UB(tmp3, 3, tmp2, 3, temp_src, 4); ++ temp_src += stride; ++ VP8_ST6x1_UB(tmp4, 0, tmp2, 4, temp_src, 4); ++ temp_src += stride; ++ VP8_ST6x1_UB(tmp4, 1, tmp2, 5, temp_src, 4); ++ temp_src += stride; ++ VP8_ST6x1_UB(tmp4, 2, tmp2, 6, temp_src, 4); ++ temp_src += stride; ++ VP8_ST6x1_UB(tmp4, 3, tmp2, 7, temp_src, 4); ++ temp_src += stride; ++ VP8_ST6x1_UB(tmp6, 0, tmp5, 0, temp_src, 4); ++ temp_src += stride; ++ VP8_ST6x1_UB(tmp6, 1, tmp5, 1, temp_src, 4); ++ temp_src += stride; ++ VP8_ST6x1_UB(tmp6, 2, tmp5, 2, temp_src, 4); ++ temp_src += stride; ++ VP8_ST6x1_UB(tmp6, 3, tmp5, 3, temp_src, 4); ++ temp_src += stride; ++ VP8_ST6x1_UB(tmp7, 0, tmp5, 4, temp_src, 4); ++ temp_src += stride; ++ VP8_ST6x1_UB(tmp7, 1, tmp5, 5, temp_src, 4); ++ temp_src += stride; ++ VP8_ST6x1_UB(tmp7, 2, tmp5, 6, temp_src, 4); ++ temp_src += stride; ++ VP8_ST6x1_UB(tmp7, 3, tmp5, 7, temp_src, 4); ++} ++ ++void ff_vp8_h_loop_filter8uv_lsx(uint8_t *dst_u, uint8_t *dst_v, ++ ptrdiff_t stride, int b_limit_in, ++ int limit_in, int thresh_in) ++{ ++ uint8_t *temp_src; ++ __m128i p3, p2, p1, p0, q3, q2, q1, q0; ++ __m128i mask, hev, flat, thresh, limit, b_limit; ++ __m128i row0, row1, row2, row3, row4, row5, row6, row7, row8; ++ __m128i row9, row10, row11, row12, row13, row14, row15; ++ __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; ++ ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ ptrdiff_t stride4 = stride2 << 1; ++ ++ b_limit = __lsx_vreplgr2vr_b(b_limit_in); ++ limit = __lsx_vreplgr2vr_b(limit_in); ++ thresh = __lsx_vreplgr2vr_b(thresh_in); ++ ++ temp_src = dst_u - 4; ++ LSX_DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, temp_src + stride2, 0, ++ temp_src + stride3, 0, row0, row1, row2, row3); ++ temp_src += stride4; ++ LSX_DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, ++ temp_src + stride2, 0, temp_src + stride3, 0, row4, row5, row6, row7); ++ ++ temp_src = dst_v - 4; ++ LSX_DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, temp_src + stride2, 0, ++ temp_src + stride3, 0, row8, row9, row10, row11); ++ temp_src += stride4; ++ LSX_DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, ++ temp_src + stride2, 0, temp_src + stride3, 0, row12, row13, row14, row15); ++ ++ TRANSPOSE16x8_B(row0, row1, row2, row3, row4, row5, row6, row7, ++ row8, row9, row10, row11, row12, row13, row14, row15, ++ p3, p2, p1, p0, q0, q1, q2, q3); ++ ++ LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, hev, mask, flat); ++ VP8_MBFILTER(p2, p1, p0, q0, q1, q2, mask, hev); ++ ++ tmp0 = __lsx_vilvl_b(p1, p2); ++ tmp1 = __lsx_vilvl_b(q0, p0); ++ ++ tmp3 = __lsx_vilvl_h(tmp1, tmp0); ++ tmp4 = __lsx_vilvh_h(tmp1, tmp0); ++ ++ tmp0 = __lsx_vilvh_b(p1, p2); ++ tmp1 = __lsx_vilvh_b(q0, p0); ++ ++ tmp6 = __lsx_vilvl_h(tmp1, tmp0); ++ tmp7 = __lsx_vilvh_h(tmp1, tmp0); ++ ++ tmp2 = __lsx_vilvl_b(q2, q1); ++ tmp5 = __lsx_vilvh_b(q2, q1); ++ ++ dst_u -= 3; ++ VP8_ST6x1_UB(tmp3, 0, tmp2, 0, dst_u, 4); ++ dst_u += stride; ++ VP8_ST6x1_UB(tmp3, 1, tmp2, 1, dst_u, 4); ++ dst_u += stride; ++ VP8_ST6x1_UB(tmp3, 2, tmp2, 2, dst_u, 4); ++ dst_u += stride; ++ VP8_ST6x1_UB(tmp3, 3, tmp2, 3, dst_u, 4); ++ dst_u += stride; ++ VP8_ST6x1_UB(tmp4, 0, tmp2, 4, dst_u, 4); ++ dst_u += stride; ++ VP8_ST6x1_UB(tmp4, 1, tmp2, 5, dst_u, 4); ++ dst_u += stride; ++ VP8_ST6x1_UB(tmp4, 2, tmp2, 6, dst_u, 4); ++ dst_u += stride; ++ VP8_ST6x1_UB(tmp4, 3, tmp2, 7, dst_u, 4); ++ ++ dst_v -= 3; ++ VP8_ST6x1_UB(tmp6, 0, tmp5, 0, dst_v, 4); ++ dst_v += stride; ++ VP8_ST6x1_UB(tmp6, 1, tmp5, 1, dst_v, 4); ++ dst_v += stride; ++ VP8_ST6x1_UB(tmp6, 2, tmp5, 2, dst_v, 4); ++ dst_v += stride; ++ VP8_ST6x1_UB(tmp6, 3, tmp5, 3, dst_v, 4); ++ dst_v += stride; ++ VP8_ST6x1_UB(tmp7, 0, tmp5, 4, dst_v, 4); ++ dst_v += stride; ++ VP8_ST6x1_UB(tmp7, 1, tmp5, 5, dst_v, 4); ++ dst_v += stride; ++ VP8_ST6x1_UB(tmp7, 2, tmp5, 6, dst_v, 4); ++ dst_v += stride; ++ VP8_ST6x1_UB(tmp7, 3, tmp5, 7, dst_v, 4); ++} +diff --git a/libavcodec/loongarch/vp8dsp_init_loongarch.c b/libavcodec/loongarch/vp8dsp_init_loongarch.c +new file mode 100644 +index 0000000000..17a7c4065c +--- /dev/null ++++ b/libavcodec/loongarch/vp8dsp_init_loongarch.c +@@ -0,0 +1,41 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hecai Yuan ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/** ++ * @file ++ * VP8 compatible video decoder ++ */ ++ ++#include "libavutil/loongarch/cpu.h" ++#include "libavcodec/vp8dsp.h" ++#include "vp8dsp_loongarch.h" ++ ++av_cold void ff_vp8dsp_init_loongarch(VP8DSPContext *dsp) ++{ ++ int cpu_flags = av_get_cpu_flags(); ++ ++ if (have_lsx(cpu_flags)) { ++ dsp->vp8_v_loop_filter16y = ff_vp8_v_loop_filter16_lsx; ++ dsp->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16_lsx; ++ dsp->vp8_v_loop_filter8uv = ff_vp8_v_loop_filter8uv_lsx; ++ dsp->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_lsx; ++ } ++} +diff --git a/libavcodec/loongarch/vp8dsp_loongarch.h b/libavcodec/loongarch/vp8dsp_loongarch.h +new file mode 100644 +index 0000000000..f73ab784cc +--- /dev/null ++++ b/libavcodec/loongarch/vp8dsp_loongarch.h +@@ -0,0 +1,39 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hecai Yuan ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef AVCODEC_LOONGARCH_VP8DSP_LOONGARCH_H ++#define AVCODEC_LOONGARCH_VP8DSP_LOONGARCH_H ++ ++#include "libavcodec/vp8dsp.h" ++ ++/* loop filter */ ++void ff_vp8_v_loop_filter16_lsx(uint8_t *dst, ptrdiff_t stride, ++ int flim_e, int flim_i, int hev_thresh); ++void ff_vp8_h_loop_filter16_lsx(uint8_t *dst, ptrdiff_t stride, ++ int flim_e, int flim_i, int hev_thresh); ++void ff_vp8_h_loop_filter8uv_lsx(uint8_t *dst_u, uint8_t *dst_v, ++ ptrdiff_t stride, ++ int flim_e, int flim_i, int hev_thresh); ++void ff_vp8_v_loop_filter8uv_lsx(uint8_t *dst_u, uint8_t *dst_v, ++ ptrdiff_t stride, ++ int flim_e, int flim_i, int hev_thresh); ++ ++#endif // #ifndef AVCODEC_LOONGARCH_VP8DSP_LOONGARCH_H +diff --git a/libavcodec/loongarch/vp9_idct_lsx.c b/libavcodec/loongarch/vp9_idct_lsx.c +new file mode 100644 +index 0000000000..b9412c0b5d +--- /dev/null ++++ b/libavcodec/loongarch/vp9_idct_lsx.c +@@ -0,0 +1,1513 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Jin Bo ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavcodec/vp9dsp.h" ++#include "libavutil/loongarch/generic_macros_lsx.h" ++#include "vp9dsp_loongarch.h" ++#include "libavutil/attributes.h" ++ ++#define VP9_DCT_CONST_BITS 14 ++#define ALLOC_ALIGNED(align) __attribute__ ((aligned(align))) ++#define ROUND_POWER_OF_TWO(value, n) (((value) + (1 << ((n) - 1))) >> (n)) ++ ++static const int32_t cospi_1_64 = 16364; ++static const int32_t cospi_2_64 = 16305; ++static const int32_t cospi_3_64 = 16207; ++static const int32_t cospi_4_64 = 16069; ++static const int32_t cospi_5_64 = 15893; ++static const int32_t cospi_6_64 = 15679; ++static const int32_t cospi_7_64 = 15426; ++static const int32_t cospi_8_64 = 15137; ++static const int32_t cospi_9_64 = 14811; ++static const int32_t cospi_10_64 = 14449; ++static const int32_t cospi_11_64 = 14053; ++static const int32_t cospi_12_64 = 13623; ++static const int32_t cospi_13_64 = 13160; ++static const int32_t cospi_14_64 = 12665; ++static const int32_t cospi_15_64 = 12140; ++static const int32_t cospi_16_64 = 11585; ++static const int32_t cospi_17_64 = 11003; ++static const int32_t cospi_18_64 = 10394; ++static const int32_t cospi_19_64 = 9760; ++static const int32_t cospi_20_64 = 9102; ++static const int32_t cospi_21_64 = 8423; ++static const int32_t cospi_22_64 = 7723; ++static const int32_t cospi_23_64 = 7005; ++static const int32_t cospi_24_64 = 6270; ++static const int32_t cospi_25_64 = 5520; ++static const int32_t cospi_26_64 = 4756; ++static const int32_t cospi_27_64 = 3981; ++static const int32_t cospi_28_64 = 3196; ++static const int32_t cospi_29_64 = 2404; ++static const int32_t cospi_30_64 = 1606; ++static const int32_t cospi_31_64 = 804; ++ ++static const int32_t sinpi_1_9 = 5283; ++static const int32_t sinpi_2_9 = 9929; ++static const int32_t sinpi_3_9 = 13377; ++static const int32_t sinpi_4_9 = 15212; ++ ++#define VP9_DOTP_CONST_PAIR(reg0, reg1, cnst0, cnst1, out0, out1) \ ++{ \ ++ __m128i k0_m = __lsx_vreplgr2vr_h(cnst0); \ ++ __m128i s0_m, s1_m, s2_m, s3_m; \ ++ \ ++ s0_m = __lsx_vreplgr2vr_h(cnst1); \ ++ k0_m = __lsx_vpackev_h(s0_m, k0_m); \ ++ \ ++ s1_m = __lsx_vilvl_h(__lsx_vneg_h(reg1), reg0); \ ++ s0_m = __lsx_vilvh_h(__lsx_vneg_h(reg1), reg0); \ ++ s3_m = __lsx_vilvl_h(reg0, reg1); \ ++ s2_m = __lsx_vilvh_h(reg0, reg1); \ ++ LSX_DUP2_ARG2(__lsx_dp2_w_h, s1_m, k0_m, s0_m, k0_m, s1_m, \ ++ s0_m); \ ++ LSX_DUP2_ARG2(__lsx_vsrari_w, s1_m, VP9_DCT_CONST_BITS, \ ++ s0_m, VP9_DCT_CONST_BITS, s1_m, s0_m); \ ++ out0 = __lsx_vpickev_h(s0_m, s1_m); \ ++ LSX_DUP2_ARG2(__lsx_dp2_w_h, s3_m, k0_m, s2_m, k0_m, s1_m, \ ++ s0_m); \ ++ LSX_DUP2_ARG2(__lsx_vsrari_w, s1_m, VP9_DCT_CONST_BITS, \ ++ s0_m, VP9_DCT_CONST_BITS, s1_m, s0_m); \ ++ out1 = __lsx_vpickev_h(s0_m, s1_m); \ ++} ++ ++#define VP9_SET_COSPI_PAIR(c0_h, c1_h) \ ++( { \ ++ __m128i out0_m, r0_m, r1_m; \ ++ \ ++ r0_m = __lsx_vreplgr2vr_h(c0_h); \ ++ r1_m = __lsx_vreplgr2vr_h(c1_h); \ ++ out0_m = __lsx_vpackev_h(r1_m, r0_m); \ ++ \ ++ out0_m; \ ++} ) ++ ++#define VP9_ADDBLK_ST8x4_UB(dst, dst_stride, in0, in1, in2, in3) \ ++{ \ ++ uint8_t *dst_m = (uint8_t *) (dst); \ ++ __m128i dst0_m, dst1_m, dst2_m, dst3_m; \ ++ __m128i tmp0_m, tmp1_m; \ ++ __m128i res0_m, res1_m, res2_m, res3_m; \ ++ __m128i zero_m = __lsx_vldi(0); \ ++ LSX_DUP4_ARG2(__lsx_vld, \ ++ dst_m, 0, \ ++ dst_m + dst_stride, 0, \ ++ dst_m + 2 * dst_stride, 0, \ ++ dst_m + 3 * dst_stride, 0, \ ++ dst0_m, dst1_m, dst2_m, dst3_m); \ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, \ ++ zero_m, dst0_m, zero_m, dst1_m, zero_m, dst2_m, \ ++ zero_m, dst3_m, res0_m, res1_m, res2_m, res3_m); \ ++ LSX_DUP4_ARG2(__lsx_vadd_h, \ ++ res0_m, in0, res1_m, in1, res2_m, in2, res3_m, \ ++ in3, res0_m, res1_m, res2_m, res3_m); \ ++ LSX_DUP4_ARG1(__lsx_clamp255_h, \ ++ res0_m, res1_m, res2_m, res3_m, \ ++ res0_m, res1_m, res2_m, res3_m); \ ++ LSX_DUP2_ARG2(__lsx_vpickev_b, \ ++ res1_m, res0_m, res3_m, res2_m, tmp0_m, tmp1_m); \ ++ __lsx_vstelm_d(tmp0_m, dst_m, 0, 0); \ ++ __lsx_vstelm_d(tmp0_m, dst_m + dst_stride, 0, 1); \ ++ __lsx_vstelm_d(tmp1_m, dst_m + 2 * dst_stride, 0, 0); \ ++ __lsx_vstelm_d(tmp1_m, dst_m + 3 * dst_stride, 0, 1); \ ++} ++ ++#define VP9_UNPCK_UB_SH(in, out_h, out_l) \ ++{ \ ++ __m128i zero = __lsx_vldi(0); \ ++ out_l = __lsx_vilvl_b(zero, in); \ ++ out_h = __lsx_vilvh_b(zero, in); \ ++} ++ ++#define VP9_ILVLTRANS4x8_H(in0, in1, in2, in3, in4, in5, in6, in7, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ __m128i tmp0_m, tmp1_m, tmp2_m, tmp3_m; \ ++ __m128i tmp0_n, tmp1_n, tmp2_n, tmp3_n; \ ++ __m128i zero_m = __lsx_vldi(0); \ ++ \ ++ LSX_DUP4_ARG2(__lsx_vilvl_h, in1, in0, in3, in2, in5, in4, in7, in6, \ ++ tmp0_n, tmp1_n, tmp2_n, tmp3_n); \ ++ tmp0_m = __lsx_vilvl_w(tmp1_n, tmp0_n); \ ++ tmp2_m = __lsx_vilvh_w(tmp1_n, tmp0_n); \ ++ tmp1_m = __lsx_vilvl_w(tmp3_n, tmp2_n); \ ++ tmp3_m = __lsx_vilvh_w(tmp3_n, tmp2_n); \ ++ \ ++ out0 = __lsx_vilvl_d(tmp1_m, tmp0_m); \ ++ out1 = __lsx_vilvh_d(tmp1_m, tmp0_m); \ ++ out2 = __lsx_vilvl_d(tmp3_m, tmp2_m); \ ++ out3 = __lsx_vilvh_d(tmp3_m, tmp2_m); \ ++ \ ++ out4 = zero_m; \ ++ out5 = zero_m; \ ++ out6 = zero_m; \ ++ out7 = zero_m; \ ++} ++ ++/* multiply and add macro */ ++#define VP9_MADD(inp0, inp1, inp2, inp3, cst0, cst1, cst2, cst3, \ ++ out0, out1, out2, out3) \ ++{ \ ++ __m128i madd_s0_m, madd_s1_m, madd_s2_m, madd_s3_m; \ ++ __m128i tmp0_m, tmp1_m, tmp2_m, tmp3_m; \ ++ \ ++ madd_s1_m = __lsx_vilvl_h(inp1, inp0); \ ++ madd_s0_m = __lsx_vilvh_h(inp1, inp0); \ ++ madd_s3_m = __lsx_vilvl_h(inp3, inp2); \ ++ madd_s2_m = __lsx_vilvh_h(inp3, inp2); \ ++ LSX_DUP4_ARG2(__lsx_dp2_w_h, \ ++ madd_s1_m, cst0, madd_s0_m, cst0, \ ++ madd_s1_m, cst1, madd_s0_m, cst1, \ ++ tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ ++ LSX_DUP4_ARG2(__lsx_vsrari_w, \ ++ tmp0_m, VP9_DCT_CONST_BITS, \ ++ tmp1_m, VP9_DCT_CONST_BITS, \ ++ tmp2_m, VP9_DCT_CONST_BITS, \ ++ tmp3_m, VP9_DCT_CONST_BITS, \ ++ tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ ++ LSX_DUP2_ARG2(__lsx_vpickev_h, tmp1_m, tmp0_m, tmp3_m, tmp2_m, \ ++ out0, out1); \ ++ LSX_DUP4_ARG2(__lsx_dp2_w_h, \ ++ madd_s3_m, cst2, madd_s2_m, cst2, \ ++ madd_s3_m, cst3, madd_s2_m, cst3, \ ++ tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ ++ LSX_DUP4_ARG2(__lsx_vsrari_w, \ ++ tmp0_m, VP9_DCT_CONST_BITS, \ ++ tmp1_m, VP9_DCT_CONST_BITS, \ ++ tmp2_m, VP9_DCT_CONST_BITS, \ ++ tmp3_m, VP9_DCT_CONST_BITS, \ ++ tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ ++ LSX_DUP2_ARG2(__lsx_vpickev_h, tmp1_m, tmp0_m, tmp3_m, tmp2_m, \ ++ out2, out3); \ ++} ++ ++#define VP9_SET_CONST_PAIR(mask_h, idx1_h, idx2_h) \ ++( { \ ++ __m128i c0_m, c1_m; \ ++ \ ++ LSX_DUP2_ARG2(__lsx_vreplvei_h, \ ++ mask_h, idx1_h, mask_h, idx2_h, \ ++ c0_m, c1_m); \ ++ c0_m = __lsx_vpackev_h(c1_m, c0_m); \ ++ \ ++ c0_m; \ ++} ) ++ ++/* idct 8x8 macro */ ++#define VP9_IDCT8x8_1D(in0, in1, in2, in3, in4, in5, in6, in7, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ __m128i tp0_m, tp1_m, tp2_m, tp3_m, tp4_m, tp5_m, tp6_m, tp7_m; \ ++ __m128i k0_m, k1_m, k2_m, k3_m, res0_m, res1_m, res2_m, res3_m; \ ++ __m128i tmp0_m, tmp1_m, tmp2_m, tmp3_m; \ ++ v8i16 mask_m = { cospi_28_64, cospi_4_64, cospi_20_64, cospi_12_64, \ ++ cospi_16_64, -cospi_4_64, -cospi_20_64, -cospi_16_64 }; \ ++ \ ++ k0_m = VP9_SET_CONST_PAIR(mask_m, 0, 5); \ ++ k1_m = VP9_SET_CONST_PAIR(mask_m, 1, 0); \ ++ k2_m = VP9_SET_CONST_PAIR(mask_m, 6, 3); \ ++ k3_m = VP9_SET_CONST_PAIR(mask_m, 3, 2); \ ++ VP9_MADD(in1, in7, in3, in5, k0_m, k1_m, k2_m, k3_m, in1, in7, in3, in5); \ ++ LSX_DUP2_ARG2(__lsx_vsub_h, in1, in3, in7, in5, res0_m, res1_m); \ ++ k0_m = VP9_SET_CONST_PAIR(mask_m, 4, 7); \ ++ k1_m = __lsx_vreplvei_h(mask_m, 4); \ ++ \ ++ res2_m = __lsx_vilvl_h(res0_m, res1_m); \ ++ res3_m = __lsx_vilvh_h(res0_m, res1_m); \ ++ LSX_DUP4_ARG2(__lsx_dp2_w_h, \ ++ res2_m, k0_m, res3_m, k0_m, res2_m, k1_m, res3_m, k1_m, \ ++ tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ ++ LSX_DUP4_ARG2(__lsx_vsrari_w, \ ++ tmp0_m, VP9_DCT_CONST_BITS, tmp1_m, VP9_DCT_CONST_BITS, \ ++ tmp2_m, VP9_DCT_CONST_BITS, tmp3_m, VP9_DCT_CONST_BITS, \ ++ tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ ++ tp4_m = __lsx_vadd_h(in1, in3); \ ++ LSX_DUP2_ARG2(__lsx_vpickev_h, tmp1_m, tmp0_m, tmp3_m, tmp2_m, \ ++ tp5_m, tp6_m); \ ++ tp7_m = __lsx_vadd_h(in7, in5); \ ++ k2_m = VP9_SET_COSPI_PAIR(cospi_24_64, -cospi_8_64); \ ++ k3_m = VP9_SET_COSPI_PAIR(cospi_8_64, cospi_24_64); \ ++ VP9_MADD(in0, in4, in2, in6, k1_m, k0_m, k2_m, k3_m, \ ++ in0, in4, in2, in6); \ ++ BUTTERFLY_4_H(in0, in4, in2, in6, tp0_m, tp1_m, tp2_m, tp3_m); \ ++ BUTTERFLY_8_H(tp0_m, tp1_m, tp2_m, tp3_m, tp4_m, tp5_m, tp6_m, tp7_m, \ ++ out0, out1, out2, out3, out4, out5, out6, out7); \ ++} ++ ++static av_always_inline ++void vp9_idct8x8_1_add_lsx(int16_t *input, uint8_t *dst, ++ int32_t dst_stride) ++{ ++ int16_t out; ++ int32_t val; ++ __m128i vec; ++ ++ out = ROUND_POWER_OF_TWO((input[0] * cospi_16_64), VP9_DCT_CONST_BITS); ++ out = ROUND_POWER_OF_TWO((out * cospi_16_64), VP9_DCT_CONST_BITS); ++ val = ROUND_POWER_OF_TWO(out, 5); ++ vec = __lsx_vreplgr2vr_h(val); ++ input[0] = 0; ++ ++ VP9_ADDBLK_ST8x4_UB(dst, dst_stride, vec, vec, vec, vec); ++ dst += (4 * dst_stride); ++ VP9_ADDBLK_ST8x4_UB(dst, dst_stride, vec, vec, vec, vec); ++} ++ ++static void vp9_idct8x8_12_colcol_addblk_lsx(int16_t *input, uint8_t *dst, ++ int32_t dst_stride) ++{ ++ __m128i in0, in1, in2, in3, in4, in5, in6, in7; ++ __m128i s0, s1, s2, s3, s4, s5, s6, s7, k0, k1, k2, k3, m0, m1, m2, m3; ++ __m128i tmp0, tmp1, tmp2, tmp3; ++ __m128i zero = __lsx_vldi(0); ++ ++ /* load vector elements of 8x8 block */ ++ LSX_DUP4_ARG2(__lsx_vld, ++ input, 0, input, 16, input, 32, input, 48, ++ in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vld, ++ input, 64, input, 80, input, 96, input, 112, ++ in4, in5, in6, in7); ++ __lsx_vst(zero, input, 0); ++ __lsx_vst(zero, input, 16); ++ __lsx_vst(zero, input, 32); ++ __lsx_vst(zero, input, 48); ++ __lsx_vst(zero, input, 64); ++ __lsx_vst(zero, input, 80); ++ __lsx_vst(zero, input, 96); ++ __lsx_vst(zero, input, 112); ++ LSX_DUP4_ARG2(__lsx_vilvl_d, ++ in1, in0, in3, in2, in5, in4, in7, in6, ++ in0, in1, in2, in3); ++ ++ /* stage1 */ ++ LSX_DUP2_ARG2(__lsx_vilvh_h, in3, in0, in2, in1, s0, s1); ++ k0 = VP9_SET_COSPI_PAIR(cospi_28_64, -cospi_4_64); ++ k1 = VP9_SET_COSPI_PAIR(cospi_4_64, cospi_28_64); ++ k2 = VP9_SET_COSPI_PAIR(-cospi_20_64, cospi_12_64); ++ k3 = VP9_SET_COSPI_PAIR(cospi_12_64, cospi_20_64); ++ LSX_DUP4_ARG2(__lsx_dp2_w_h, s0, k0, s0, k1, s1, k2, s1, k3, ++ tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP4_ARG2(__lsx_vsrari_w, ++ tmp0, VP9_DCT_CONST_BITS, ++ tmp1, VP9_DCT_CONST_BITS, ++ tmp2, VP9_DCT_CONST_BITS, ++ tmp3, VP9_DCT_CONST_BITS, ++ tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP4_ARG2(__lsx_vpickev_h, ++ zero, tmp0, zero, tmp1, ++ zero, tmp2, zero, tmp3, ++ s0, s1, s2, s3); ++ BUTTERFLY_4_H(s0, s1, s3, s2, s4, s7, s6, s5); ++ ++ /* stage2 */ ++ LSX_DUP2_ARG2(__lsx_vilvl_h, in3, in1, in2, in0, s1, s0); ++ k0 = VP9_SET_COSPI_PAIR(cospi_16_64, cospi_16_64); ++ k1 = VP9_SET_COSPI_PAIR(cospi_16_64, -cospi_16_64); ++ k2 = VP9_SET_COSPI_PAIR(cospi_24_64, -cospi_8_64); ++ k3 = VP9_SET_COSPI_PAIR(cospi_8_64, cospi_24_64); ++ LSX_DUP4_ARG2(__lsx_dp2_w_h, s0, k0, s0, k1, s1, k2, s1, k3, ++ tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP4_ARG2(__lsx_vsrari_w, ++ tmp0, VP9_DCT_CONST_BITS, ++ tmp1, VP9_DCT_CONST_BITS, ++ tmp2, VP9_DCT_CONST_BITS, ++ tmp3, VP9_DCT_CONST_BITS, ++ tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP4_ARG2(__lsx_vpickev_h, ++ zero, tmp0, zero, tmp1, ++ zero, tmp2, zero, tmp3, ++ s0, s1, s2, s3); ++ BUTTERFLY_4_H(s0, s1, s2, s3, m0, m1, m2, m3); ++ ++ /* stage3 */ ++ s0 = __lsx_vilvl_h(s6, s5); ++ ++ k1 = VP9_SET_COSPI_PAIR(-cospi_16_64, cospi_16_64); ++ LSX_DUP2_ARG2(__lsx_dp2_w_h, s0, k1, s0, k0, tmp0, tmp1); ++ LSX_DUP2_ARG2(__lsx_vsrari_w, ++ tmp0, VP9_DCT_CONST_BITS, tmp1, ++ VP9_DCT_CONST_BITS, tmp0, tmp1); ++ LSX_DUP2_ARG2(__lsx_vpickev_h, zero, tmp0, zero, tmp1, s2, s3); ++ ++ /* stage4 */ ++ BUTTERFLY_8_H(m0, m1, m2, m3, s4, s2, s3, s7, ++ in0, in1, in2, in3, in4, in5, in6, in7); ++ VP9_ILVLTRANS4x8_H(in0, in1, in2, in3, in4, in5, in6, in7, ++ in0, in1, in2, in3, in4, in5, in6, in7); ++ VP9_IDCT8x8_1D(in0, in1, in2, in3, in4, in5, in6, in7, ++ in0, in1, in2, in3, in4, in5, in6, in7); ++ ++ /* final rounding (add 2^4, divide by 2^5) and shift */ ++ LSX_DUP4_ARG2(__lsx_vsrari_h, in0 , 5, in1, 5, in2, 5, in3, 5, ++ in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vsrari_h, in4 , 5, in5, 5, in6, 5, in7, 5, ++ in4, in5, in6, in7); ++ ++ /* add block and store 8x8 */ ++ VP9_ADDBLK_ST8x4_UB(dst, dst_stride, in0, in1, in2, in3); ++ dst += (4 * dst_stride); ++ VP9_ADDBLK_ST8x4_UB(dst, dst_stride, in4, in5, in6, in7); ++} ++ ++static void vp9_idct8x8_colcol_addblk_lsx(int16_t *input, uint8_t *dst, ++ int32_t dst_stride) ++{ ++ __m128i in0, in1, in2, in3, in4, in5, in6, in7; ++ __m128i zero = __lsx_vldi(0); ++ ++ /* load vector elements of 8x8 block */ ++ LSX_DUP4_ARG2(__lsx_vld, ++ input, 0, input, 16, input, 32, input, 48, ++ in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vld, ++ input, 64, input, 80, input, 96, input, 112, ++ in4, in5, in6, in7); ++ __lsx_vst(zero, input, 0); ++ __lsx_vst(zero, input, 16); ++ __lsx_vst(zero, input, 32); ++ __lsx_vst(zero, input, 48); ++ __lsx_vst(zero, input, 64); ++ __lsx_vst(zero, input, 80); ++ __lsx_vst(zero, input, 96); ++ __lsx_vst(zero, input, 112); ++ /* 1D idct8x8 */ ++ VP9_IDCT8x8_1D(in0, in1, in2, in3, in4, in5, in6, in7, ++ in0, in1, in2, in3, in4, in5, in6, in7); ++ /* columns transform */ ++ TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, ++ in0, in1, in2, in3, in4, in5, in6, in7); ++ /* 1D idct8x8 */ ++ VP9_IDCT8x8_1D(in0, in1, in2, in3, in4, in5, in6, in7, ++ in0, in1, in2, in3, in4, in5, in6, in7); ++ /* final rounding (add 2^4, divide by 2^5) and shift */ ++ LSX_DUP4_ARG2(__lsx_vsrari_h, ++ in0, 5, in1, 5, in2, 5, in3, 5, ++ in0, in1, in2, in3); ++ LSX_DUP4_ARG2(__lsx_vsrari_h, ++ in4, 5, in5, 5, in6, 5, in7, 5, ++ in4, in5, in6, in7); ++ /* add block and store 8x8 */ ++ VP9_ADDBLK_ST8x4_UB(dst, dst_stride, in0, in1, in2, in3); ++ dst += (4 * dst_stride); ++ VP9_ADDBLK_ST8x4_UB(dst, dst_stride, in4, in5, in6, in7); ++} ++ ++static void vp9_idct16_1d_columns_addblk_lsx(int16_t *input, uint8_t *dst, ++ int32_t dst_stride) ++{ ++ __m128i loc0, loc1, loc2, loc3; ++ __m128i reg0, reg2, reg4, reg6, reg8, reg10, reg12, reg14; ++ __m128i reg1, reg3, reg5, reg7, reg9, reg11, reg13, reg15; ++ __m128i tmp5, tmp6, tmp7; ++ __m128i zero = __lsx_vldi(0); ++ int32_t offset = dst_stride << 2; ++ ++ LSX_DUP4_ARG2(__lsx_vld, ++ input, 32*0, input, 32*1, ++ input, 32*2, input, 32*3, ++ reg0, reg1, reg2, reg3); ++ LSX_DUP4_ARG2(__lsx_vld, ++ input, 32*4, input, 32*5, ++ input, 32*6, input, 32*7, ++ reg4, reg5, reg6, reg7); ++ LSX_DUP4_ARG2(__lsx_vld, ++ input, 32*8, input, 32*9, ++ input, 32*10, input, 32*11, ++ reg8, reg9, reg10, reg11); ++ LSX_DUP4_ARG2(__lsx_vld, ++ input, 32*12, input, 32*13, ++ input, 32*14, input, 32*15, ++ reg12, reg13, reg14, reg15); ++ ++ __lsx_vst(zero, input, 32*0); ++ __lsx_vst(zero, input, 32*1); ++ __lsx_vst(zero, input, 32*2); ++ __lsx_vst(zero, input, 32*3); ++ __lsx_vst(zero, input, 32*4); ++ __lsx_vst(zero, input, 32*5); ++ __lsx_vst(zero, input, 32*6); ++ __lsx_vst(zero, input, 32*7); ++ __lsx_vst(zero, input, 32*8); ++ __lsx_vst(zero, input, 32*9); ++ __lsx_vst(zero, input, 32*10); ++ __lsx_vst(zero, input, 32*11); ++ __lsx_vst(zero, input, 32*12); ++ __lsx_vst(zero, input, 32*13); ++ __lsx_vst(zero, input, 32*14); ++ __lsx_vst(zero, input, 32*15); ++ ++ VP9_DOTP_CONST_PAIR(reg2, reg14, cospi_28_64, cospi_4_64, reg2, reg14); ++ VP9_DOTP_CONST_PAIR(reg10, reg6, cospi_12_64, cospi_20_64, reg10, reg6); ++ BUTTERFLY_4_H(reg2, reg14, reg6, reg10, loc0, loc1, reg14, reg2); ++ VP9_DOTP_CONST_PAIR(reg14, reg2, cospi_16_64, cospi_16_64, loc2, loc3); ++ VP9_DOTP_CONST_PAIR(reg0, reg8, cospi_16_64, cospi_16_64, reg0, reg8); ++ VP9_DOTP_CONST_PAIR(reg4, reg12, cospi_24_64, cospi_8_64, reg4, reg12); ++ BUTTERFLY_4_H(reg8, reg0, reg4, reg12, reg2, reg6, reg10, reg14); ++ ++ reg0 = __lsx_vsub_h(reg2, loc1); ++ reg2 = __lsx_vadd_h(reg2, loc1); ++ reg12 = __lsx_vsub_h(reg14, loc0); ++ reg14 = __lsx_vadd_h(reg14, loc0); ++ reg4 = __lsx_vsub_h(reg6, loc3); ++ reg6 = __lsx_vadd_h(reg6, loc3); ++ reg8 = __lsx_vsub_h(reg10, loc2); ++ reg10 = __lsx_vadd_h(reg10, loc2); ++ ++ /* stage2 */ ++ VP9_DOTP_CONST_PAIR(reg1, reg15, cospi_30_64, cospi_2_64, reg1, reg15); ++ VP9_DOTP_CONST_PAIR(reg9, reg7, cospi_14_64, cospi_18_64, loc2, loc3); ++ ++ reg9 = __lsx_vsub_h(reg1, loc2); ++ reg1 = __lsx_vadd_h(reg1, loc2); ++ reg7 = __lsx_vsub_h(reg15, loc3); ++ reg15 = __lsx_vadd_h(reg15, loc3); ++ ++ VP9_DOTP_CONST_PAIR(reg5, reg11, cospi_22_64, cospi_10_64, reg5, reg11); ++ VP9_DOTP_CONST_PAIR(reg13, reg3, cospi_6_64, cospi_26_64, loc0, loc1); ++ BUTTERFLY_4_H(loc0, loc1, reg11, reg5, reg13, reg3, reg11, reg5); ++ ++ loc1 = __lsx_vadd_h(reg15, reg3); ++ reg3 = __lsx_vsub_h(reg15, reg3); ++ loc2 = __lsx_vadd_h(reg2, loc1); ++ reg15 = __lsx_vsub_h(reg2, loc1); ++ ++ loc1 = __lsx_vadd_h(reg1, reg13); ++ reg13 = __lsx_vsub_h(reg1, reg13); ++ loc0 = __lsx_vadd_h(reg0, loc1); ++ loc1 = __lsx_vsub_h(reg0, loc1); ++ tmp6 = loc0; ++ tmp7 = loc1; ++ reg0 = loc2; ++ ++ VP9_DOTP_CONST_PAIR(reg7, reg9, cospi_24_64, cospi_8_64, reg7, reg9); ++ VP9_DOTP_CONST_PAIR(__lsx_vneg_h(reg5), __lsx_vneg_h(reg11), cospi_8_64, ++ cospi_24_64, reg5, reg11); ++ ++ loc0 = __lsx_vadd_h(reg9, reg5); ++ reg5 = __lsx_vsub_h(reg9, reg5); ++ reg2 = __lsx_vadd_h(reg6, loc0); ++ reg1 = __lsx_vsub_h(reg6, loc0); ++ ++ loc0 = __lsx_vadd_h(reg7, reg11); ++ reg11 = __lsx_vsub_h(reg7, reg11); ++ loc1 = __lsx_vadd_h(reg4, loc0); ++ loc2 = __lsx_vsub_h(reg4, loc0); ++ tmp5 = loc1; ++ ++ VP9_DOTP_CONST_PAIR(reg5, reg11, cospi_16_64, cospi_16_64, reg5, reg11); ++ BUTTERFLY_4_H(reg8, reg10, reg11, reg5, loc0, reg4, reg9, loc1); ++ ++ reg10 = loc0; ++ reg11 = loc1; ++ ++ VP9_DOTP_CONST_PAIR(reg3, reg13, cospi_16_64, cospi_16_64, reg3, reg13); ++ BUTTERFLY_4_H(reg12, reg14, reg13, reg3, reg8, reg6, reg7, reg5); ++ reg13 = loc2; ++ ++ /* Transpose and store the output */ ++ reg12 = tmp5; ++ reg14 = tmp6; ++ reg3 = tmp7; ++ ++ LSX_DUP4_ARG2(__lsx_vsrari_h, ++ reg0, 6, reg2, 6, reg4, 6, reg6, 6, ++ reg0, reg2, reg4, reg6); ++ VP9_ADDBLK_ST8x4_UB(dst, dst_stride, reg0, reg2, reg4, reg6); ++ dst += offset; ++ LSX_DUP4_ARG2(__lsx_vsrari_h, ++ reg8, 6, reg10, 6, reg12, 6, reg14, 6, ++ reg8, reg10, reg12, reg14); ++ VP9_ADDBLK_ST8x4_UB(dst, dst_stride, reg8, reg10, reg12, reg14); ++ dst += offset; ++ LSX_DUP4_ARG2(__lsx_vsrari_h, ++ reg3, 6, reg5, 6, reg11, 6, reg13, 6, ++ reg3, reg5, reg11, reg13); ++ VP9_ADDBLK_ST8x4_UB(dst, dst_stride, reg3, reg13, reg11, reg5); ++ dst += offset; ++ LSX_DUP4_ARG2(__lsx_vsrari_h, ++ reg1, 6, reg7, 6, reg9, 6, reg15, 6, ++ reg1, reg7, reg9, reg15); ++ VP9_ADDBLK_ST8x4_UB(dst, dst_stride, reg7, reg9, reg1, reg15); ++} ++ ++static void vp9_idct16_1d_columns_lsx(int16_t *input, int16_t *output) ++{ ++ __m128i loc0, loc1, loc2, loc3; ++ __m128i reg1, reg3, reg5, reg7, reg9, reg11, reg13, reg15; ++ __m128i reg0, reg2, reg4, reg6, reg8, reg10, reg12, reg14; ++ __m128i tmp5, tmp6, tmp7; ++ __m128i zero = __lsx_vldi(0); ++ int16_t *offset; ++ ++ LSX_DUP4_ARG2(__lsx_vld, ++ input, 32*0, input, 32*1, ++ input, 32*2, input, 32*3, ++ reg0, reg1, reg2, reg3); ++ LSX_DUP4_ARG2(__lsx_vld, ++ input, 32*4, input, 32*5, ++ input, 32*6, input, 32*7, ++ reg4, reg5, reg6, reg7); ++ LSX_DUP4_ARG2(__lsx_vld, ++ input, 32*8, input, 32*9, ++ input, 32*10, input, 32*11, ++ reg8, reg9, reg10, reg11); ++ LSX_DUP4_ARG2(__lsx_vld, ++ input, 32*12, input, 32*13, ++ input, 32*14, input, 32*15, ++ reg12, reg13, reg14, reg15); ++ ++ __lsx_vst(zero, input, 32*0); ++ __lsx_vst(zero, input, 32*1); ++ __lsx_vst(zero, input, 32*2); ++ __lsx_vst(zero, input, 32*3); ++ __lsx_vst(zero, input, 32*4); ++ __lsx_vst(zero, input, 32*5); ++ __lsx_vst(zero, input, 32*6); ++ __lsx_vst(zero, input, 32*7); ++ __lsx_vst(zero, input, 32*8); ++ __lsx_vst(zero, input, 32*9); ++ __lsx_vst(zero, input, 32*10); ++ __lsx_vst(zero, input, 32*11); ++ __lsx_vst(zero, input, 32*12); ++ __lsx_vst(zero, input, 32*13); ++ __lsx_vst(zero, input, 32*14); ++ __lsx_vst(zero, input, 32*15); ++ ++ VP9_DOTP_CONST_PAIR(reg2, reg14, cospi_28_64, cospi_4_64, reg2, reg14); ++ VP9_DOTP_CONST_PAIR(reg10, reg6, cospi_12_64, cospi_20_64, reg10, reg6); ++ BUTTERFLY_4_H(reg2, reg14, reg6, reg10, loc0, loc1, reg14, reg2); ++ VP9_DOTP_CONST_PAIR(reg14, reg2, cospi_16_64, cospi_16_64, loc2, loc3); ++ VP9_DOTP_CONST_PAIR(reg0, reg8, cospi_16_64, cospi_16_64, reg0, reg8); ++ VP9_DOTP_CONST_PAIR(reg4, reg12, cospi_24_64, cospi_8_64, reg4, reg12); ++ BUTTERFLY_4_H(reg8, reg0, reg4, reg12, reg2, reg6, reg10, reg14); ++ ++ reg0 = __lsx_vsub_h(reg2, loc1); ++ reg2 = __lsx_vadd_h(reg2, loc1); ++ reg12 = __lsx_vsub_h(reg14, loc0); ++ reg14 = __lsx_vadd_h(reg14, loc0); ++ reg4 = __lsx_vsub_h(reg6, loc3); ++ reg6 = __lsx_vadd_h(reg6, loc3); ++ reg8 = __lsx_vsub_h(reg10, loc2); ++ reg10 = __lsx_vadd_h(reg10, loc2); ++ ++ /* stage2 */ ++ VP9_DOTP_CONST_PAIR(reg1, reg15, cospi_30_64, cospi_2_64, reg1, reg15); ++ VP9_DOTP_CONST_PAIR(reg9, reg7, cospi_14_64, cospi_18_64, loc2, loc3); ++ ++ reg9 = __lsx_vsub_h(reg1, loc2); ++ reg1 = __lsx_vadd_h(reg1, loc2); ++ reg7 = __lsx_vsub_h(reg15, loc3); ++ reg15 = __lsx_vadd_h(reg15, loc3); ++ ++ VP9_DOTP_CONST_PAIR(reg5, reg11, cospi_22_64, cospi_10_64, reg5, reg11); ++ VP9_DOTP_CONST_PAIR(reg13, reg3, cospi_6_64, cospi_26_64, loc0, loc1); ++ BUTTERFLY_4_H(loc0, loc1, reg11, reg5, reg13, reg3, reg11, reg5); ++ ++ loc1 = __lsx_vadd_h(reg15, reg3); ++ reg3 = __lsx_vsub_h(reg15, reg3); ++ loc2 = __lsx_vadd_h(reg2, loc1); ++ reg15 = __lsx_vsub_h(reg2, loc1); ++ ++ loc1 = __lsx_vadd_h(reg1, reg13); ++ reg13 = __lsx_vsub_h(reg1, reg13); ++ loc0 = __lsx_vadd_h(reg0, loc1); ++ loc1 = __lsx_vsub_h(reg0, loc1); ++ tmp6 = loc0; ++ tmp7 = loc1; ++ reg0 = loc2; ++ ++ VP9_DOTP_CONST_PAIR(reg7, reg9, cospi_24_64, cospi_8_64, reg7, reg9); ++ VP9_DOTP_CONST_PAIR(__lsx_vneg_h(reg5), __lsx_vneg_h(reg11), cospi_8_64, ++ cospi_24_64, reg5, reg11); ++ ++ loc0 = __lsx_vadd_h(reg9, reg5); ++ reg5 = __lsx_vsub_h(reg9, reg5); ++ reg2 = __lsx_vadd_h(reg6, loc0); ++ reg1 = __lsx_vsub_h(reg6, loc0); ++ ++ loc0 = __lsx_vadd_h(reg7, reg11); ++ reg11 = __lsx_vsub_h(reg7, reg11); ++ loc1 = __lsx_vadd_h(reg4, loc0); ++ loc2 = __lsx_vsub_h(reg4, loc0); ++ ++ tmp5 = loc1; ++ ++ VP9_DOTP_CONST_PAIR(reg5, reg11, cospi_16_64, cospi_16_64, reg5, reg11); ++ BUTTERFLY_4_H(reg8, reg10, reg11, reg5, loc0, reg4, reg9, loc1); ++ ++ reg10 = loc0; ++ reg11 = loc1; ++ ++ VP9_DOTP_CONST_PAIR(reg3, reg13, cospi_16_64, cospi_16_64, reg3, reg13); ++ BUTTERFLY_4_H(reg12, reg14, reg13, reg3, reg8, reg6, reg7, reg5); ++ reg13 = loc2; ++ ++ /* Transpose and store the output */ ++ reg12 = tmp5; ++ reg14 = tmp6; ++ reg3 = tmp7; ++ ++ /* transpose block */ ++ TRANSPOSE8x8_H(reg0, reg2, reg4, reg6, reg8, reg10, reg12, reg14, ++ reg0, reg2, reg4, reg6, reg8, reg10, reg12, reg14); ++ ++ __lsx_vst(reg0, output, 32*0); ++ __lsx_vst(reg2, output, 32*1); ++ __lsx_vst(reg4, output, 32*2); ++ __lsx_vst(reg6, output, 32*3); ++ __lsx_vst(reg8, output, 32*4); ++ __lsx_vst(reg10, output, 32*5); ++ __lsx_vst(reg12, output, 32*6); ++ __lsx_vst(reg14, output, 32*7); ++ ++ /* transpose block */ ++ TRANSPOSE8x8_H(reg3, reg13, reg11, reg5, reg7, reg9, reg1, reg15, ++ reg3, reg13, reg11, reg5, reg7, reg9, reg1, reg15); ++ ++ offset = output + 8; ++ __lsx_vst(reg3, offset, 32*0); ++ __lsx_vst(reg13, offset, 32*1); ++ __lsx_vst(reg11, offset, 32*2); ++ __lsx_vst(reg5, offset, 32*3); ++ ++ offset = output + 8 + 4 * 16; ++ __lsx_vst(reg7, offset, 32*0); ++ __lsx_vst(reg9, offset, 32*1); ++ __lsx_vst(reg1, offset, 32*2); ++ __lsx_vst(reg15, offset, 32*3); ++} ++ ++static void vp9_idct16x16_1_add_lsx(int16_t *input, uint8_t *dst, ++ int32_t dst_stride) ++{ ++ uint8_t i; ++ int16_t out; ++ __m128i vec, res0, res1, res2, res3, res4, res5, res6, res7; ++ __m128i dst0, dst1, dst2, dst3, tmp0, tmp1, tmp2, tmp3; ++ ++ out = ROUND_POWER_OF_TWO((input[0] * cospi_16_64), VP9_DCT_CONST_BITS); ++ out = ROUND_POWER_OF_TWO((out * cospi_16_64), VP9_DCT_CONST_BITS); ++ out = ROUND_POWER_OF_TWO(out, 6); ++ input[0] = 0; ++ vec = __lsx_vreplgr2vr_h(out); ++ ++ for (i = 4; i--;) { ++ LSX_DUP4_ARG2(__lsx_vld, ++ dst, 0, ++ dst + dst_stride, 0, ++ dst + dst_stride * 2, 0, ++ dst + dst_stride * 3, 0, ++ dst0, dst1, dst2, dst3); ++ VP9_UNPCK_UB_SH(dst0, res4, res0); ++ VP9_UNPCK_UB_SH(dst1, res5, res1); ++ VP9_UNPCK_UB_SH(dst2, res6, res2); ++ VP9_UNPCK_UB_SH(dst3, res7, res3); ++ LSX_DUP4_ARG2(__lsx_vadd_h, ++ res0, vec, res1, vec, res2, vec, res3, vec, ++ res0, res1, res2, res3); ++ LSX_DUP4_ARG2(__lsx_vadd_h, ++ res4, vec, res5, vec, res6, vec, res7, vec, ++ res4, res5, res6, res7); ++ LSX_DUP4_ARG1(__lsx_clamp255_h, ++ res0, res1, res2, res3, ++ res0, res1, res2, res3); ++ LSX_DUP4_ARG1(__lsx_clamp255_h, ++ res4, res5, res6, res7, ++ res4, res5, res6, res7); ++ LSX_DUP4_ARG2(__lsx_vpickev_b, ++ res4, res0, res5, res1, res6, res2, res7, res3, ++ tmp0, tmp1, tmp2, tmp3); ++ __lsx_vst(tmp0, dst, 0); ++ __lsx_vst(tmp1, dst + dst_stride, 0); ++ __lsx_vst(tmp2, dst + dst_stride * 2, 0); ++ __lsx_vst(tmp3, dst + dst_stride * 3, 0); ++ dst += dst_stride << 2; ++ } ++} ++ ++static void vp9_idct16x16_10_colcol_addblk_lsx(int16_t *input, uint8_t *dst, ++ int32_t dst_stride) ++{ ++ int32_t i; ++ int16_t out_arr[16 * 16] ALLOC_ALIGNED(16); ++ int16_t *out = out_arr; ++ __m128i zero = __lsx_vldi(0); ++ ++ /* transform rows */ ++ vp9_idct16_1d_columns_lsx(input, out); ++ ++ /* short case just considers top 4 rows as valid output */ ++ out += 4 * 16; ++ for (i = 3; i--;) { ++ __lsx_vst(zero, out, 0); ++ __lsx_vst(zero, out, 16); ++ __lsx_vst(zero, out, 32); ++ __lsx_vst(zero, out, 48); ++ __lsx_vst(zero, out, 64); ++ __lsx_vst(zero, out, 80); ++ __lsx_vst(zero, out, 96); ++ __lsx_vst(zero, out, 112); ++ out += 64; ++ } ++ ++ out = out_arr; ++ ++ /* transform columns */ ++ for (i = 0; i < 2; i++) { ++ /* process 8 * 16 block */ ++ vp9_idct16_1d_columns_addblk_lsx((out + (i << 3)), (dst + (i << 3)), ++ dst_stride); ++ } ++} ++ ++static void vp9_idct16x16_colcol_addblk_lsx(int16_t *input, uint8_t *dst, ++ int32_t dst_stride) ++{ ++ int32_t i; ++ int16_t out_arr[16 * 16] ALLOC_ALIGNED(16); ++ int16_t *out = out_arr; ++ ++ /* transform rows */ ++ for (i = 0; i < 2; i++) { ++ /* process 8 * 16 block */ ++ vp9_idct16_1d_columns_lsx((input + (i << 3)), (out + (i << 7))); ++ } ++ ++ /* transform columns */ ++ for (i = 0; i < 2; i++) { ++ /* process 8 * 16 block */ ++ vp9_idct16_1d_columns_addblk_lsx((out + (i << 3)), (dst + (i << 3)), ++ dst_stride); ++ } ++} ++ ++static void vp9_idct_butterfly_transpose_store(int16_t *tmp_buf, ++ int16_t *tmp_eve_buf, ++ int16_t *tmp_odd_buf, ++ int16_t *dst) ++{ ++ __m128i vec0, vec1, vec2, vec3, loc0, loc1, loc2, loc3; ++ __m128i m0, m1, m2, m3, m4, m5, m6, m7, n0, n1, n2, n3, n4, n5, n6, n7; ++ ++ /* FINAL BUTTERFLY : Dependency on Even & Odd */ ++ vec0 = __lsx_vld(tmp_odd_buf, 0); ++ vec1 = __lsx_vld(tmp_odd_buf, 9 * 16); ++ vec2 = __lsx_vld(tmp_odd_buf, 14 * 16); ++ vec3 = __lsx_vld(tmp_odd_buf, 6 * 16); ++ loc0 = __lsx_vld(tmp_eve_buf, 0); ++ loc1 = __lsx_vld(tmp_eve_buf, 8 * 16); ++ loc2 = __lsx_vld(tmp_eve_buf, 4 * 16); ++ loc3 = __lsx_vld(tmp_eve_buf, 12 * 16); ++ ++ LSX_DUP4_ARG2(__lsx_vadd_h, ++ loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ m0, m4, m2, m6); ++ ++ #define SUB(a, b) __lsx_vsub_h(a, b) ++ ++ __lsx_vst(SUB(loc0, vec3), tmp_buf, 31 * 16); ++ __lsx_vst(SUB(loc1, vec2), tmp_buf, 23 * 16); ++ __lsx_vst(SUB(loc2, vec1), tmp_buf, 27 * 16); ++ __lsx_vst(SUB(loc3, vec0), tmp_buf, 19 * 16); ++ ++ /* Load 8 & Store 8 */ ++ vec0 = __lsx_vld(tmp_odd_buf, 4 * 16); ++ vec1 = __lsx_vld(tmp_odd_buf, 13 * 16); ++ vec2 = __lsx_vld(tmp_odd_buf, 10 * 16); ++ vec3 = __lsx_vld(tmp_odd_buf, 3 * 16); ++ loc0 = __lsx_vld(tmp_eve_buf, 2 * 16); ++ loc1 = __lsx_vld(tmp_eve_buf, 10 * 16); ++ loc2 = __lsx_vld(tmp_eve_buf, 6 * 16); ++ loc3 = __lsx_vld(tmp_eve_buf, 14 * 16); ++ ++ LSX_DUP4_ARG2(__lsx_vadd_h, ++ loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ m1, m5, m3, m7); ++ ++ __lsx_vst(SUB(loc0, vec3), tmp_buf, 29 * 16); ++ __lsx_vst(SUB(loc1, vec2), tmp_buf, 21 * 16); ++ __lsx_vst(SUB(loc2, vec1), tmp_buf, 25 * 16); ++ __lsx_vst(SUB(loc3, vec0), tmp_buf, 17 * 16); ++ ++ /* Load 8 & Store 8 */ ++ vec0 = __lsx_vld(tmp_odd_buf, 2 * 16); ++ vec1 = __lsx_vld(tmp_odd_buf, 11 * 16); ++ vec2 = __lsx_vld(tmp_odd_buf, 12 * 16); ++ vec3 = __lsx_vld(tmp_odd_buf, 7 * 16); ++ loc0 = __lsx_vld(tmp_eve_buf, 1 * 16); ++ loc1 = __lsx_vld(tmp_eve_buf, 9 * 16); ++ loc2 = __lsx_vld(tmp_eve_buf, 5 * 16); ++ loc3 = __lsx_vld(tmp_eve_buf, 13 * 16); ++ ++ LSX_DUP4_ARG2(__lsx_vadd_h, ++ loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ n0, n4, n2, n6); ++ ++ __lsx_vst(SUB(loc0, vec3), tmp_buf, 30 * 16); ++ __lsx_vst(SUB(loc1, vec2), tmp_buf, 22 * 16); ++ __lsx_vst(SUB(loc2, vec1), tmp_buf, 26 * 16); ++ __lsx_vst(SUB(loc3, vec0), tmp_buf, 18 * 16); ++ ++ /* Load 8 & Store 8 */ ++ vec0 = __lsx_vld(tmp_odd_buf, 5 * 16); ++ vec1 = __lsx_vld(tmp_odd_buf, 15 * 16); ++ vec2 = __lsx_vld(tmp_odd_buf, 8 * 16); ++ vec3 = __lsx_vld(tmp_odd_buf, 1 * 16); ++ loc0 = __lsx_vld(tmp_eve_buf, 3 * 16); ++ loc1 = __lsx_vld(tmp_eve_buf, 11 * 16); ++ loc2 = __lsx_vld(tmp_eve_buf, 7 * 16); ++ loc3 = __lsx_vld(tmp_eve_buf, 15 * 16); ++ ++ LSX_DUP4_ARG2(__lsx_vadd_h, ++ loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ n1, n5, n3, n7); ++ ++ __lsx_vst(SUB(loc0, vec3), tmp_buf, 28 * 16); ++ __lsx_vst(SUB(loc1, vec2), tmp_buf, 20 * 16); ++ __lsx_vst(SUB(loc2, vec1), tmp_buf, 24 * 16); ++ __lsx_vst(SUB(loc3, vec0), tmp_buf, 16 * 16); ++ ++ /* Transpose : 16 vectors */ ++ /* 1st & 2nd 8x8 */ ++ TRANSPOSE8x8_H(m0, n0, m1, n1, m2, n2, m3, n3, ++ m0, n0, m1, n1, m2, n2, m3, n3); ++ __lsx_vst(m0, dst, 0); ++ __lsx_vst(n0, dst, 32 * 2); ++ __lsx_vst(m1, dst, 32 * 4); ++ __lsx_vst(n1, dst, 32 * 6); ++ __lsx_vst(m2, dst, 32 * 8); ++ __lsx_vst(n2, dst, 32 * 10); ++ __lsx_vst(m3, dst, 32 * 12); ++ __lsx_vst(n3, dst, 32 * 14); ++ ++ TRANSPOSE8x8_H(m4, n4, m5, n5, m6, n6, m7, n7, ++ m4, n4, m5, n5, m6, n6, m7, n7); ++ ++ __lsx_vst(m4, dst, 16); ++ __lsx_vst(n4, dst, 16 + 32 * 2); ++ __lsx_vst(m5, dst, 16 + 32 * 4); ++ __lsx_vst(n5, dst, 16 + 32 * 6); ++ __lsx_vst(m6, dst, 16 + 32 * 8); ++ __lsx_vst(n6, dst, 16 + 32 * 10); ++ __lsx_vst(m7, dst, 16 + 32 * 12); ++ __lsx_vst(n7, dst, 16 + 32 * 14); ++ ++ /* 3rd & 4th 8x8 */ ++ LSX_DUP4_ARG2(__lsx_vld, ++ tmp_buf, 16 * 16, tmp_buf, 16 * 17, ++ tmp_buf, 16 * 18, tmp_buf, 16 * 19, ++ m0, n0, m1, n1); ++ LSX_DUP4_ARG2(__lsx_vld, ++ tmp_buf, 16 * 20, tmp_buf, 16 * 21, ++ tmp_buf, 16 * 22, tmp_buf, 16 * 23, ++ m2, n2, m3, n3); ++ ++ LSX_DUP4_ARG2(__lsx_vld, ++ tmp_buf, 16 * 24, tmp_buf, 16 * 25, ++ tmp_buf, 16 * 26, tmp_buf, 16 * 27, ++ m4, n4, m5, n5); ++ LSX_DUP4_ARG2(__lsx_vld, ++ tmp_buf, 16 * 28, tmp_buf, 16 * 29, ++ tmp_buf, 16 * 30, tmp_buf, 16 * 31, ++ m6, n6, m7, n7); ++ ++ TRANSPOSE8x8_H(m0, n0, m1, n1, m2, n2, m3, n3, ++ m0, n0, m1, n1, m2, n2, m3, n3); ++ ++ __lsx_vst(m0, dst, 32); ++ __lsx_vst(n0, dst, 32 + 32 * 2); ++ __lsx_vst(m1, dst, 32 + 32 * 4); ++ __lsx_vst(n1, dst, 32 + 32 * 6); ++ __lsx_vst(m2, dst, 32 + 32 * 8); ++ __lsx_vst(n2, dst, 32 + 32 * 10); ++ __lsx_vst(m3, dst, 32 + 32 * 12); ++ __lsx_vst(n3, dst, 32 + 32 * 14); ++ ++ TRANSPOSE8x8_H(m4, n4, m5, n5, m6, n6, m7, n7, ++ m4, n4, m5, n5, m6, n6, m7, n7); ++ ++ __lsx_vst(m4, dst, 48); ++ __lsx_vst(n4, dst, 48 + 32 * 2); ++ __lsx_vst(m5, dst, 48 + 32 * 4); ++ __lsx_vst(n5, dst, 48 + 32 * 6); ++ __lsx_vst(m6, dst, 48 + 32 * 8); ++ __lsx_vst(n6, dst, 48 + 32 * 10); ++ __lsx_vst(m7, dst, 48 + 32 * 12); ++ __lsx_vst(n7, dst, 48 + 32 * 14); ++} ++ ++static void vp9_idct8x32_column_even_process_store(int16_t *tmp_buf, ++ int16_t *tmp_eve_buf) ++{ ++ __m128i vec0, vec1, vec2, vec3, loc0, loc1, loc2, loc3; ++ __m128i reg0, reg1, reg2, reg3, reg4, reg5, reg6, reg7; ++ __m128i stp0, stp1, stp2, stp3, stp4, stp5, stp6, stp7; ++ __m128i zero = __lsx_vldi(0); ++ ++ /* Even stage 1 */ ++ LSX_DUP4_ARG2(__lsx_vld, ++ tmp_buf, 0, tmp_buf, 32 * 8, ++ tmp_buf, 32 * 16, tmp_buf, 32 * 24, ++ reg0, reg1, reg2, reg3); ++ LSX_DUP4_ARG2(__lsx_vld, ++ tmp_buf, 32 * 32, tmp_buf, 32 * 40, ++ tmp_buf, 32 * 48, tmp_buf, 32 * 56, ++ reg4, reg5, reg6, reg7); ++ ++ __lsx_vst(zero, tmp_buf, 0); ++ __lsx_vst(zero, tmp_buf, 32 * 8); ++ __lsx_vst(zero, tmp_buf, 32 * 16); ++ __lsx_vst(zero, tmp_buf, 32 * 24); ++ __lsx_vst(zero, tmp_buf, 32 * 32); ++ __lsx_vst(zero, tmp_buf, 32 * 40); ++ __lsx_vst(zero, tmp_buf, 32 * 48); ++ __lsx_vst(zero, tmp_buf, 32 * 56); ++ ++ tmp_buf += (2 * 32); ++ ++ VP9_DOTP_CONST_PAIR(reg1, reg7, cospi_28_64, cospi_4_64, reg1, reg7); ++ VP9_DOTP_CONST_PAIR(reg5, reg3, cospi_12_64, cospi_20_64, reg5, reg3); ++ BUTTERFLY_4_H(reg1, reg7, reg3, reg5, vec1, vec3, vec2, vec0); ++ VP9_DOTP_CONST_PAIR(vec2, vec0, cospi_16_64, cospi_16_64, loc2, loc3); ++ ++ loc1 = vec3; ++ loc0 = vec1; ++ ++ VP9_DOTP_CONST_PAIR(reg0, reg4, cospi_16_64, cospi_16_64, reg0, reg4); ++ VP9_DOTP_CONST_PAIR(reg2, reg6, cospi_24_64, cospi_8_64, reg2, reg6); ++ BUTTERFLY_4_H(reg4, reg0, reg2, reg6, vec1, vec3, vec2, vec0); ++ BUTTERFLY_4_H(vec0, vec1, loc1, loc0, stp3, stp0, stp7, stp4); ++ BUTTERFLY_4_H(vec2, vec3, loc3, loc2, stp2, stp1, stp6, stp5); ++ ++ /* Even stage 2 */ ++ /* Load 8 */ ++ LSX_DUP4_ARG2(__lsx_vld, ++ tmp_buf, 0, tmp_buf, 32 * 8, ++ tmp_buf, 32 * 16, tmp_buf, 32 * 24, ++ reg0, reg1, reg2, reg3); ++ LSX_DUP4_ARG2(__lsx_vld, ++ tmp_buf, 32 * 32, tmp_buf, 32 * 40, ++ tmp_buf, 32 * 48, tmp_buf, 32 * 56, ++ reg4, reg5, reg6, reg7); ++ ++ __lsx_vst(zero, tmp_buf, 0); ++ __lsx_vst(zero, tmp_buf, 32 * 8); ++ __lsx_vst(zero, tmp_buf, 32 * 16); ++ __lsx_vst(zero, tmp_buf, 32 * 24); ++ __lsx_vst(zero, tmp_buf, 32 * 32); ++ __lsx_vst(zero, tmp_buf, 32 * 40); ++ __lsx_vst(zero, tmp_buf, 32 * 48); ++ __lsx_vst(zero, tmp_buf, 32 * 56); ++ ++ VP9_DOTP_CONST_PAIR(reg0, reg7, cospi_30_64, cospi_2_64, reg0, reg7); ++ VP9_DOTP_CONST_PAIR(reg4, reg3, cospi_14_64, cospi_18_64, reg4, reg3); ++ VP9_DOTP_CONST_PAIR(reg2, reg5, cospi_22_64, cospi_10_64, reg2, reg5); ++ VP9_DOTP_CONST_PAIR(reg6, reg1, cospi_6_64, cospi_26_64, reg6, reg1); ++ ++ vec0 = __lsx_vadd_h(reg0, reg4); ++ reg0 = __lsx_vsub_h(reg0, reg4); ++ reg4 = __lsx_vadd_h(reg6, reg2); ++ reg6 = __lsx_vsub_h(reg6, reg2); ++ reg2 = __lsx_vadd_h(reg1, reg5); ++ reg1 = __lsx_vsub_h(reg1, reg5); ++ reg5 = __lsx_vadd_h(reg7, reg3); ++ reg7 = __lsx_vsub_h(reg7, reg3); ++ reg3 = vec0; ++ ++ vec1 = reg2; ++ reg2 = __lsx_vadd_h(reg3, reg4); ++ reg3 = __lsx_vsub_h(reg3, reg4); ++ reg4 = __lsx_vsub_h(reg5, vec1); ++ reg5 = __lsx_vadd_h(reg5, vec1); ++ ++ VP9_DOTP_CONST_PAIR(reg7, reg0, cospi_24_64, cospi_8_64, reg0, reg7); ++ VP9_DOTP_CONST_PAIR(__lsx_vneg_h(reg6), reg1, cospi_24_64, cospi_8_64, ++ reg6, reg1); ++ ++ vec0 = __lsx_vsub_h(reg0, reg6); ++ reg0 = __lsx_vadd_h(reg0, reg6); ++ vec1 = __lsx_vsub_h(reg7, reg1); ++ reg7 = __lsx_vadd_h(reg7, reg1); ++ ++ VP9_DOTP_CONST_PAIR(vec1, vec0, cospi_16_64, cospi_16_64, reg6, reg1); ++ VP9_DOTP_CONST_PAIR(reg4, reg3, cospi_16_64, cospi_16_64, reg3, reg4); ++ ++ /* Even stage 3 : Dependency on Even stage 1 & Even stage 2 */ ++ /* Store 8 */ ++ BUTTERFLY_4_H(stp0, stp1, reg7, reg5, loc1, loc3, loc2, loc0); ++ __lsx_vst(loc1, tmp_eve_buf, 0); ++ __lsx_vst(loc3, tmp_eve_buf, 16); ++ __lsx_vst(loc2, tmp_eve_buf, 14 * 16); ++ __lsx_vst(loc0, tmp_eve_buf, 14 * 16 + 16); ++ BUTTERFLY_4_H(stp2, stp3, reg4, reg1, loc1, loc3, loc2, loc0); ++ __lsx_vst(loc1, tmp_eve_buf, 2 * 16); ++ __lsx_vst(loc3, tmp_eve_buf, 2 * 16 + 16); ++ __lsx_vst(loc2, tmp_eve_buf, 12 * 16); ++ __lsx_vst(loc0, tmp_eve_buf, 12 * 16 + 16); ++ ++ /* Store 8 */ ++ BUTTERFLY_4_H(stp4, stp5, reg6, reg3, loc1, loc3, loc2, loc0); ++ __lsx_vst(loc1, tmp_eve_buf, 4 * 16); ++ __lsx_vst(loc3, tmp_eve_buf, 4 * 16 + 16); ++ __lsx_vst(loc2, tmp_eve_buf, 10 * 16); ++ __lsx_vst(loc0, tmp_eve_buf, 10 * 16 + 16); ++ ++ BUTTERFLY_4_H(stp6, stp7, reg2, reg0, loc1, loc3, loc2, loc0); ++ __lsx_vst(loc1, tmp_eve_buf, 6 * 16); ++ __lsx_vst(loc3, tmp_eve_buf, 6 * 16 + 16); ++ __lsx_vst(loc2, tmp_eve_buf, 8 * 16); ++ __lsx_vst(loc0, tmp_eve_buf, 8 * 16 + 16); ++} ++ ++static void vp9_idct8x32_column_odd_process_store(int16_t *tmp_buf, ++ int16_t *tmp_odd_buf) ++{ ++ __m128i vec0, vec1, vec2, vec3, loc0, loc1, loc2, loc3; ++ __m128i reg0, reg1, reg2, reg3, reg4, reg5, reg6, reg7; ++ __m128i zero = __lsx_vldi(0); ++ ++ /* Odd stage 1 */ ++ reg0 = __lsx_vld(tmp_buf, 64); ++ reg1 = __lsx_vld(tmp_buf, 7 * 64); ++ reg2 = __lsx_vld(tmp_buf, 9 * 64); ++ reg3 = __lsx_vld(tmp_buf, 15 * 64); ++ reg4 = __lsx_vld(tmp_buf, 17 * 64); ++ reg5 = __lsx_vld(tmp_buf, 23 * 64); ++ reg6 = __lsx_vld(tmp_buf, 25 * 64); ++ reg7 = __lsx_vld(tmp_buf, 31 * 64); ++ ++ __lsx_vst(zero, tmp_buf, 64); ++ __lsx_vst(zero, tmp_buf, 7 * 64); ++ __lsx_vst(zero, tmp_buf, 9 * 64); ++ __lsx_vst(zero, tmp_buf, 15 * 64); ++ __lsx_vst(zero, tmp_buf, 17 * 64); ++ __lsx_vst(zero, tmp_buf, 23 * 64); ++ __lsx_vst(zero, tmp_buf, 25 * 64); ++ __lsx_vst(zero, tmp_buf, 31 * 64); ++ ++ VP9_DOTP_CONST_PAIR(reg0, reg7, cospi_31_64, cospi_1_64, reg0, reg7); ++ VP9_DOTP_CONST_PAIR(reg4, reg3, cospi_15_64, cospi_17_64, reg3, reg4); ++ VP9_DOTP_CONST_PAIR(reg2, reg5, cospi_23_64, cospi_9_64, reg2, reg5); ++ VP9_DOTP_CONST_PAIR(reg6, reg1, cospi_7_64, cospi_25_64, reg1, reg6); ++ ++ vec0 = __lsx_vadd_h(reg0, reg3); ++ reg0 = __lsx_vsub_h(reg0, reg3); ++ reg3 = __lsx_vadd_h(reg7, reg4); ++ reg7 = __lsx_vsub_h(reg7, reg4); ++ reg4 = __lsx_vadd_h(reg1, reg2); ++ reg1 = __lsx_vsub_h(reg1, reg2); ++ reg2 = __lsx_vadd_h(reg6, reg5); ++ reg6 = __lsx_vsub_h(reg6, reg5); ++ reg5 = vec0; ++ ++ /* 4 Stores */ ++ LSX_DUP2_ARG2(__lsx_vadd_h, reg5, reg4, reg3, reg2, vec0, vec1); ++ __lsx_vst(vec0, tmp_odd_buf, 4 * 16); ++ __lsx_vst(vec1, tmp_odd_buf, 4 * 16 + 16); ++ LSX_DUP2_ARG2(__lsx_vsub_h, reg5, reg4, reg3, reg2, vec0, vec1); ++ VP9_DOTP_CONST_PAIR(vec1, vec0, cospi_24_64, cospi_8_64, vec0, vec1); ++ __lsx_vst(vec0, tmp_odd_buf, 0); ++ __lsx_vst(vec1, tmp_odd_buf, 16); ++ ++ /* 4 Stores */ ++ VP9_DOTP_CONST_PAIR(reg7, reg0, cospi_28_64, cospi_4_64, reg0, reg7); ++ VP9_DOTP_CONST_PAIR(reg6, reg1, -cospi_4_64, cospi_28_64, reg1, reg6); ++ BUTTERFLY_4_H(reg0, reg7, reg6, reg1, vec0, vec1, vec2, vec3); ++ __lsx_vst(vec0, tmp_odd_buf, 6 * 16); ++ __lsx_vst(vec1, tmp_odd_buf, 6 * 16 + 16); ++ VP9_DOTP_CONST_PAIR(vec2, vec3, cospi_24_64, cospi_8_64, vec2, vec3); ++ __lsx_vst(vec2, tmp_odd_buf, 2 * 16); ++ __lsx_vst(vec3, tmp_odd_buf, 2 * 16 + 16); ++ ++ /* Odd stage 2 */ ++ /* 8 loads */ ++ reg0 = __lsx_vld(tmp_buf, 3 * 64); ++ reg1 = __lsx_vld(tmp_buf, 5 * 64); ++ reg2 = __lsx_vld(tmp_buf, 11 * 64); ++ reg3 = __lsx_vld(tmp_buf, 13 * 64); ++ reg4 = __lsx_vld(tmp_buf, 19 * 64); ++ reg5 = __lsx_vld(tmp_buf, 21 * 64); ++ reg6 = __lsx_vld(tmp_buf, 27 * 64); ++ reg7 = __lsx_vld(tmp_buf, 29 * 64); ++ ++ __lsx_vst(zero, tmp_buf, 3 * 64); ++ __lsx_vst(zero, tmp_buf, 5 * 64); ++ __lsx_vst(zero, tmp_buf, 11 * 64); ++ __lsx_vst(zero, tmp_buf, 13 * 64); ++ __lsx_vst(zero, tmp_buf, 19 * 64); ++ __lsx_vst(zero, tmp_buf, 21 * 64); ++ __lsx_vst(zero, tmp_buf, 27 * 64); ++ __lsx_vst(zero, tmp_buf, 29 * 64); ++ ++ VP9_DOTP_CONST_PAIR(reg1, reg6, cospi_27_64, cospi_5_64, reg1, reg6); ++ VP9_DOTP_CONST_PAIR(reg5, reg2, cospi_11_64, cospi_21_64, reg2, reg5); ++ VP9_DOTP_CONST_PAIR(reg3, reg4, cospi_19_64, cospi_13_64, reg3, reg4); ++ VP9_DOTP_CONST_PAIR(reg7, reg0, cospi_3_64, cospi_29_64, reg0, reg7); ++ ++ /* 4 Stores */ ++ LSX_DUP4_ARG2(__lsx_vsub_h,reg1, reg2, reg6, reg5, reg0, reg3, reg7, reg4, ++ vec0, vec1, vec2, vec3); ++ VP9_DOTP_CONST_PAIR(vec1, vec0, cospi_12_64, cospi_20_64, loc0, loc1); ++ VP9_DOTP_CONST_PAIR(vec3, vec2, -cospi_20_64, cospi_12_64, loc2, loc3); ++ BUTTERFLY_4_H(loc2, loc3, loc1, loc0, vec0, vec1, vec3, vec2); ++ __lsx_vst(vec0, tmp_odd_buf, 12 * 16); ++ __lsx_vst(vec1, tmp_odd_buf, 12 * 16 + 3 * 16); ++ VP9_DOTP_CONST_PAIR(vec3, vec2, -cospi_8_64, cospi_24_64, vec0, vec1); ++ __lsx_vst(vec0, tmp_odd_buf, 10 * 16); ++ __lsx_vst(vec1, tmp_odd_buf, 10 * 16 + 16); ++ ++ /* 4 Stores */ ++ LSX_DUP4_ARG2(__lsx_vadd_h, reg0, reg3, reg1, reg2, reg5, reg6, reg4, reg7, ++ vec0, vec1, vec2, vec3); ++ BUTTERFLY_4_H(vec0, vec3, vec2, vec1, reg0, reg1, reg3, reg2); ++ __lsx_vst(reg0, tmp_odd_buf, 13 * 16); ++ __lsx_vst(reg1, tmp_odd_buf, 13 * 16 + 16); ++ VP9_DOTP_CONST_PAIR(reg3, reg2, -cospi_8_64, cospi_24_64, ++ reg0, reg1); ++ __lsx_vst(reg0, tmp_odd_buf, 8 * 16); ++ __lsx_vst(reg1, tmp_odd_buf, 8 * 16 + 16); ++ ++ /* Odd stage 3 : Dependency on Odd stage 1 & Odd stage 2 */ ++ /* Load 8 & Store 8 */ ++ LSX_DUP4_ARG2(__lsx_vld, ++ tmp_odd_buf, 0, tmp_odd_buf, 16, ++ tmp_odd_buf, 32, tmp_odd_buf, 48, ++ reg0, reg1, reg2, reg3); ++ LSX_DUP4_ARG2(__lsx_vld, ++ tmp_odd_buf, 8 * 16, tmp_odd_buf, 8 * 16 + 16, ++ tmp_odd_buf, 8 * 16 + 32, tmp_odd_buf, 8 * 16 + 48, ++ reg4, reg5, reg6, reg7); ++ ++ LSX_DUP4_ARG2(__lsx_vadd_h, reg0, reg4, reg1, reg5, reg2, reg6, reg3, reg7, ++ loc0, loc1, loc2, loc3); ++ __lsx_vst(loc0, tmp_odd_buf, 0); ++ __lsx_vst(loc1, tmp_odd_buf, 16); ++ __lsx_vst(loc2, tmp_odd_buf, 32); ++ __lsx_vst(loc3, tmp_odd_buf, 48); ++ LSX_DUP2_ARG2(__lsx_vsub_h, reg0, reg4, reg1, reg5, vec0, vec1); ++ VP9_DOTP_CONST_PAIR(vec1, vec0, cospi_16_64, cospi_16_64, loc0, loc1); ++ ++ LSX_DUP2_ARG2(__lsx_vsub_h, reg2, reg6, reg3, reg7, vec0, vec1); ++ VP9_DOTP_CONST_PAIR(vec1, vec0, cospi_16_64, cospi_16_64, loc2, loc3); ++ __lsx_vst(loc0, tmp_odd_buf, 8 * 16); ++ __lsx_vst(loc1, tmp_odd_buf, 8 * 16 + 16); ++ __lsx_vst(loc2, tmp_odd_buf, 8 * 16 + 32); ++ __lsx_vst(loc3, tmp_odd_buf, 8 * 16 + 48); ++ ++ /* Load 8 & Store 8 */ ++ LSX_DUP4_ARG2(__lsx_vld, ++ tmp_odd_buf, 4 * 16, tmp_odd_buf, 4 * 16 + 16, ++ tmp_odd_buf, 4 * 16 + 32, tmp_odd_buf, 4 * 16 + 48, ++ reg1, reg2, reg0, reg3); ++ LSX_DUP4_ARG2(__lsx_vld, ++ tmp_odd_buf, 12 * 16, tmp_odd_buf, 12 * 16 + 16, ++ tmp_odd_buf, 12 * 16 + 32, tmp_odd_buf, 12 * 16 + 48, ++ reg4, reg5, reg6, reg7); ++ ++ LSX_DUP4_ARG2(__lsx_vadd_h, reg0, reg4, reg1, reg5, reg2, reg6, reg3, reg7, ++ loc0, loc1, loc2, loc3); ++ __lsx_vst(loc0, tmp_odd_buf, 4 * 16); ++ __lsx_vst(loc1, tmp_odd_buf, 4 * 16 + 16); ++ __lsx_vst(loc2, tmp_odd_buf, 4 * 16 + 32); ++ __lsx_vst(loc3, tmp_odd_buf, 4 * 16 + 48); ++ ++ LSX_DUP2_ARG2(__lsx_vsub_h, reg0, reg4, reg3, reg7, vec0, vec1); ++ VP9_DOTP_CONST_PAIR(vec1, vec0, cospi_16_64, cospi_16_64, loc0, loc1); ++ ++ LSX_DUP2_ARG2(__lsx_vsub_h, reg1, reg5, reg2, reg6, vec0, vec1); ++ VP9_DOTP_CONST_PAIR(vec1, vec0, cospi_16_64, cospi_16_64, loc2, loc3); ++ __lsx_vst(loc0, tmp_odd_buf, 12 * 16); ++ __lsx_vst(loc1, tmp_odd_buf, 12 * 16 + 16); ++ __lsx_vst(loc2, tmp_odd_buf, 12 * 16 + 32); ++ __lsx_vst(loc3, tmp_odd_buf, 12 * 16 + 48); ++} ++ ++static void vp9_idct8x32_column_butterfly_addblk(int16_t *tmp_eve_buf, ++ int16_t *tmp_odd_buf, ++ uint8_t *dst, ++ int32_t dst_stride) ++{ ++ __m128i vec0, vec1, vec2, vec3, loc0, loc1, loc2, loc3; ++ __m128i m0, m1, m2, m3, m4, m5, m6, m7, n0, n1, n2, n3, n4, n5, n6, n7; ++ ++ /* FINAL BUTTERFLY : Dependency on Even & Odd */ ++ vec0 = __lsx_vld(tmp_odd_buf, 0); ++ vec1 = __lsx_vld(tmp_odd_buf, 9 * 16); ++ vec2 = __lsx_vld(tmp_odd_buf, 14 * 16); ++ vec3 = __lsx_vld(tmp_odd_buf, 6 * 16); ++ loc0 = __lsx_vld(tmp_eve_buf, 0); ++ loc1 = __lsx_vld(tmp_eve_buf, 8 * 16); ++ loc2 = __lsx_vld(tmp_eve_buf, 4 * 16); ++ loc3 = __lsx_vld(tmp_eve_buf, 12 * 16); ++ ++ LSX_DUP4_ARG2(__lsx_vadd_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ m0, m4, m2, m6); ++ LSX_DUP4_ARG2(__lsx_vsrari_h, m0, 6, m2, 6, m4, 6, m6, 6, m0, m2, m4, m6); ++ VP9_ADDBLK_ST8x4_UB(dst, (4 * dst_stride), m0, m2, m4, m6); ++ ++ LSX_DUP4_ARG2(__lsx_vsub_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ m6, m2, m4, m0); ++ LSX_DUP4_ARG2(__lsx_vsrari_h, m0, 6, m2, 6, m4, 6, m6, 6, m0, m2, m4, m6); ++ VP9_ADDBLK_ST8x4_UB((dst + 19 * dst_stride), (4 * dst_stride), ++ m0, m2, m4, m6); ++ ++ /* Load 8 & Store 8 */ ++ vec0 = __lsx_vld(tmp_odd_buf, 4 * 16); ++ vec1 = __lsx_vld(tmp_odd_buf, 13 * 16); ++ vec2 = __lsx_vld(tmp_odd_buf, 10 * 16); ++ vec3 = __lsx_vld(tmp_odd_buf, 3 * 16); ++ loc0 = __lsx_vld(tmp_eve_buf, 2 * 16); ++ loc1 = __lsx_vld(tmp_eve_buf, 10 * 16); ++ loc2 = __lsx_vld(tmp_eve_buf, 6 * 16); ++ loc3 = __lsx_vld(tmp_eve_buf, 14 * 16); ++ ++ LSX_DUP4_ARG2(__lsx_vadd_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ m1, m5, m3, m7); ++ LSX_DUP4_ARG2(__lsx_vsrari_h, m1, 6, m3, 6, m5, 6, m7, 6, m1, m3, m5, m7); ++ VP9_ADDBLK_ST8x4_UB((dst + 2 * dst_stride), (4 * dst_stride), ++ m1, m3, m5, m7); ++ ++ LSX_DUP4_ARG2(__lsx_vsub_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ m7, m3, m5, m1); ++ LSX_DUP4_ARG2(__lsx_vsrari_h, m1, 6, m3, 6, m5, 6, m7, 6, m1, m3, m5, m7); ++ VP9_ADDBLK_ST8x4_UB((dst + 17 * dst_stride), (4 * dst_stride), ++ m1, m3, m5, m7); ++ ++ /* Load 8 & Store 8 */ ++ vec0 = __lsx_vld(tmp_odd_buf, 2 * 16); ++ vec1 = __lsx_vld(tmp_odd_buf, 11 * 16); ++ vec2 = __lsx_vld(tmp_odd_buf, 12 * 16); ++ vec3 = __lsx_vld(tmp_odd_buf, 7 * 16); ++ loc0 = __lsx_vld(tmp_eve_buf, 1 * 16); ++ loc1 = __lsx_vld(tmp_eve_buf, 9 * 16); ++ loc2 = __lsx_vld(tmp_eve_buf, 5 * 16); ++ loc3 = __lsx_vld(tmp_eve_buf, 13 * 16); ++ ++ LSX_DUP4_ARG2(__lsx_vadd_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ n0, n4, n2, n6); ++ LSX_DUP4_ARG2(__lsx_vsrari_h, n0, 6, n2, 6, n4, 6, n6, 6, n0, n2, n4, n6); ++ VP9_ADDBLK_ST8x4_UB((dst + 1 * dst_stride), (4 * dst_stride), ++ n0, n2, n4, n6); ++ LSX_DUP4_ARG2(__lsx_vsub_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ n6, n2, n4, n0); ++ LSX_DUP4_ARG2(__lsx_vsrari_h, n0, 6, n2, 6, n4, 6, n6, 6, n0, n2, n4, n6); ++ VP9_ADDBLK_ST8x4_UB((dst + 18 * dst_stride), (4 * dst_stride), ++ n0, n2, n4, n6); ++ ++ /* Load 8 & Store 8 */ ++ vec0 = __lsx_vld(tmp_odd_buf, 5 * 16); ++ vec1 = __lsx_vld(tmp_odd_buf, 15 * 16); ++ vec2 = __lsx_vld(tmp_odd_buf, 8 * 16); ++ vec3 = __lsx_vld(tmp_odd_buf, 1 * 16); ++ loc0 = __lsx_vld(tmp_eve_buf, 3 * 16); ++ loc1 = __lsx_vld(tmp_eve_buf, 11 * 16); ++ loc2 = __lsx_vld(tmp_eve_buf, 7 * 16); ++ loc3 = __lsx_vld(tmp_eve_buf, 15 * 16); ++ ++ LSX_DUP4_ARG2(__lsx_vadd_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ n1, n5, n3, n7); ++ LSX_DUP4_ARG2(__lsx_vsrari_h, n1, 6, n3, 6, n5, 6, n7, 6, n1, n3, n5, n7); ++ VP9_ADDBLK_ST8x4_UB((dst + 3 * dst_stride), (4 * dst_stride), ++ n1, n3, n5, n7); ++ LSX_DUP4_ARG2(__lsx_vsub_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ n7, n3, n5, n1); ++ LSX_DUP4_ARG2(__lsx_vsrari_h, n1, 6, n3, 6, n5, 6, n7, 6, n1, n3, n5, n7); ++ VP9_ADDBLK_ST8x4_UB((dst + 16 * dst_stride), (4 * dst_stride), ++ n1, n3, n5, n7); ++} ++ ++static void vp9_idct8x32_1d_columns_addblk_lsx(int16_t *input, uint8_t *dst, ++ int32_t dst_stride) ++{ ++ int16_t tmp_odd_buf[16 * 8] ALLOC_ALIGNED(16); ++ int16_t tmp_eve_buf[16 * 8] ALLOC_ALIGNED(16); ++ ++ vp9_idct8x32_column_even_process_store(input, &tmp_eve_buf[0]); ++ vp9_idct8x32_column_odd_process_store(input, &tmp_odd_buf[0]); ++ vp9_idct8x32_column_butterfly_addblk(&tmp_eve_buf[0], &tmp_odd_buf[0], ++ dst, dst_stride); ++} ++ ++static void vp9_idct8x32_1d_columns_lsx(int16_t *input, int16_t *output, ++ int16_t *tmp_buf) ++{ ++ int16_t tmp_odd_buf[16 * 8] ALLOC_ALIGNED(16); ++ int16_t tmp_eve_buf[16 * 8] ALLOC_ALIGNED(16); ++ ++ vp9_idct8x32_column_even_process_store(input, &tmp_eve_buf[0]); ++ vp9_idct8x32_column_odd_process_store(input, &tmp_odd_buf[0]); ++ vp9_idct_butterfly_transpose_store(tmp_buf, &tmp_eve_buf[0], ++ &tmp_odd_buf[0], output); ++} ++ ++static void vp9_idct32x32_1_add_lsx(int16_t *input, uint8_t *dst, ++ int32_t dst_stride) ++{ ++ int32_t i; ++ int16_t out; ++ __m128i zero = __lsx_vldi(0); ++ __m128i dst0, dst1, dst2, dst3, tmp0, tmp1, tmp2, tmp3; ++ __m128i res0, res1, res2, res3, res4, res5, res6, res7, vec; ++ ++ out = ROUND_POWER_OF_TWO((input[0] * cospi_16_64), VP9_DCT_CONST_BITS); ++ out = ROUND_POWER_OF_TWO((out * cospi_16_64), VP9_DCT_CONST_BITS); ++ out = ROUND_POWER_OF_TWO(out, 6); ++ input[0] = 0; ++ ++ vec = __lsx_vreplgr2vr_h(out); ++ ++ for (i = 16; i--;) { ++ LSX_DUP2_ARG2(__lsx_vld, dst, 0, dst, 16, dst0, dst1); ++ LSX_DUP2_ARG2(__lsx_vld, dst + dst_stride, 0, ++ dst + dst_stride, 16, dst2, dst3); ++ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, ++ zero, dst0, zero, dst1, zero, dst2, zero, dst3, ++ res0, res1, res2, res3); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, ++ zero, dst0, zero, dst1, zero, dst2, zero, dst3, ++ res4, res5, res6, res7); ++ LSX_DUP4_ARG2(__lsx_vadd_h, ++ res0, vec, res1, vec, res2, vec, res3, vec, ++ res0, res1, res2, res3); ++ LSX_DUP4_ARG2(__lsx_vadd_h, ++ res4, vec, res5, vec, res6, vec, res7, vec, ++ res4, res5, res6, res7); ++ LSX_DUP4_ARG1(__lsx_clamp255_h, ++ res0, res1, res2, res3, ++ res0, res1, res2, res3); ++ LSX_DUP4_ARG1(__lsx_clamp255_h, ++ res4, res5, res6, res7, ++ res4, res5, res6, res7); ++ LSX_DUP4_ARG2(__lsx_vpickev_b, ++ res4, res0, res5, res1, res6, res2, res7, res3, ++ tmp0, tmp1, tmp2, tmp3); ++ ++ __lsx_vst(tmp0, dst, 0); ++ __lsx_vst(tmp1, dst, 16); ++ dst += dst_stride; ++ __lsx_vst(tmp2, dst, 0); ++ __lsx_vst(tmp3, dst, 16); ++ dst += dst_stride; ++ } ++} ++ ++static void vp9_idct32x32_34_colcol_addblk_lsx(int16_t *input, uint8_t *dst, ++ int32_t dst_stride) ++{ ++ int32_t i; ++ int16_t out_arr[32 * 32] ALLOC_ALIGNED(16); ++ int16_t *out_ptr = out_arr; ++ int16_t tmp_buf[8 * 32] ALLOC_ALIGNED(16); ++ __m128i zero = __lsx_vldi(0); ++ ++ for (i = 16; i--;) { ++ __lsx_vst(zero, out_ptr, 0); ++ __lsx_vst(zero, out_ptr, 16); ++ __lsx_vst(zero, out_ptr, 32); ++ __lsx_vst(zero, out_ptr, 48); ++ __lsx_vst(zero, out_ptr, 64); ++ __lsx_vst(zero, out_ptr, 80); ++ __lsx_vst(zero, out_ptr, 96); ++ __lsx_vst(zero, out_ptr, 112); ++ out_ptr += 64; ++ } ++ ++ out_ptr = out_arr; ++ ++ /* process 8*32 block */ ++ vp9_idct8x32_1d_columns_lsx(input, out_ptr, &tmp_buf[0]); ++ ++ /* transform columns */ ++ for (i = 0; i < 4; i++) { ++ /* process 8*32 block */ ++ vp9_idct8x32_1d_columns_addblk_lsx((out_ptr + (i << 3)), ++ (dst + (i << 3)), dst_stride); ++ } ++} ++ ++static void vp9_idct32x32_colcol_addblk_lsx(int16_t *input, uint8_t *dst, ++ int32_t dst_stride) ++{ ++ int32_t i; ++ int16_t out_arr[32 * 32] ALLOC_ALIGNED(16); ++ int16_t *out_ptr = out_arr; ++ int16_t tmp_buf[8 * 32] ALLOC_ALIGNED(16); ++ ++ /* transform rows */ ++ for (i = 0; i < 4; i++) { ++ /* process 8*32 block */ ++ vp9_idct8x32_1d_columns_lsx((input + (i << 3)), (out_ptr + (i << 8)), ++ &tmp_buf[0]); ++ } ++ ++ /* transform columns */ ++ for (i = 0; i < 4; i++) { ++ /* process 8*32 block */ ++ vp9_idct8x32_1d_columns_addblk_lsx((out_ptr + (i << 3)), ++ (dst + (i << 3)), dst_stride); ++ } ++} ++ ++void ff_idct_idct_8x8_add_lsx(uint8_t *dst, ptrdiff_t stride, ++ int16_t *block, int eob) ++{ ++ if (eob == 1) { ++ vp9_idct8x8_1_add_lsx(block, dst, stride); ++ } ++ else if (eob <= 12) { ++ vp9_idct8x8_12_colcol_addblk_lsx(block, dst, stride); ++ } ++ else { ++ vp9_idct8x8_colcol_addblk_lsx(block, dst, stride); ++ } ++} ++ ++void ff_idct_idct_16x16_add_lsx(uint8_t *dst, ptrdiff_t stride, ++ int16_t *block, int eob) ++{ ++ if (eob == 1) { ++ /* DC only DCT coefficient. */ ++ vp9_idct16x16_1_add_lsx(block, dst, stride); ++ } ++ else if (eob <= 10) { ++ vp9_idct16x16_10_colcol_addblk_lsx(block, dst, stride); ++ } ++ else { ++ vp9_idct16x16_colcol_addblk_lsx(block, dst, stride); ++ } ++} ++ ++void ff_idct_idct_32x32_add_lsx(uint8_t *dst, ptrdiff_t stride, ++ int16_t *block, int eob) ++{ ++ if (eob == 1) { ++ vp9_idct32x32_1_add_lsx(block, dst, stride); ++ } ++ else if (eob <= 34) { ++ vp9_idct32x32_34_colcol_addblk_lsx(block, dst, stride); ++ } ++ else { ++ vp9_idct32x32_colcol_addblk_lsx(block, dst, stride); ++ } ++} ++ +diff --git a/libavcodec/loongarch/vp9_intra_lsx.c b/libavcodec/loongarch/vp9_intra_lsx.c +new file mode 100644 +index 0000000000..6adb3f9e3c +--- /dev/null ++++ b/libavcodec/loongarch/vp9_intra_lsx.c +@@ -0,0 +1,612 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hao Chen ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavcodec/vp9dsp.h" ++#include "libavutil/loongarch/generic_macros_lsx.h" ++#include "vp9dsp_loongarch.h" ++ ++#define LSX_ST_8(_dst0, _dst1, _dst2, _dst3, _dst4, \ ++ _dst5, _dst6, _dst7, _dst, _stride) \ ++{ \ ++ __lsx_vst(_dst0, _dst, 0); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst1, _dst, 0); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst2, _dst, 0); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst3, _dst, 0); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst4, _dst, 0); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst5, _dst, 0); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst6, _dst, 0); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst7, _dst, 0); \ ++ _dst += _stride; \ ++} ++ ++#define LSX_ST_8X16(_dst0, _dst1, _dst2, _dst3, _dst4, \ ++ _dst5, _dst6, _dst7, _dst, _stride) \ ++{ \ ++ __lsx_vst(_dst0, _dst, 0); \ ++ __lsx_vst(_dst0, _dst, 16); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst1, _dst, 0); \ ++ __lsx_vst(_dst1, _dst, 16); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst2, _dst, 0); \ ++ __lsx_vst(_dst2, _dst, 16); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst3, _dst, 0); \ ++ __lsx_vst(_dst3, _dst, 16); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst4, _dst, 0); \ ++ __lsx_vst(_dst4, _dst, 16); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst5, _dst, 0); \ ++ __lsx_vst(_dst5, _dst, 16); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst6, _dst, 0); \ ++ __lsx_vst(_dst6, _dst, 16); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst7, _dst, 0); \ ++ __lsx_vst(_dst7, _dst, 16); \ ++ _dst += _stride; \ ++} ++ ++void ff_vert_16x16_lsx(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *left, ++ const uint8_t *src) ++{ ++ __m128i src0; ++ ++ src0 = __lsx_vld(src, 0); ++ LSX_ST_8(src0, src0, src0, src0, src0, src0, src0, src0, dst, dst_stride); ++ LSX_ST_8(src0, src0, src0, src0, src0, src0, src0, src0, dst, dst_stride); ++} ++ ++void ff_vert_32x32_lsx(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *left, ++ const uint8_t *src) ++{ ++ uint32_t row; ++ __m128i src0, src1; ++ ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src1); ++ for (row = 32; row--;) { ++ __lsx_vst(src0, dst, 0); ++ __lsx_vst(src1, dst, 16); ++ dst += dst_stride; ++ } ++} ++ ++void ff_hor_16x16_lsx(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *src, ++ const uint8_t *top) ++{ ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i src8, src9, src10, src11, src12, src13, src14, src15; ++ ++ src15 = __lsx_vldrepl_b(src, 0); ++ src14 = __lsx_vldrepl_b(src, 1); ++ src13 = __lsx_vldrepl_b(src, 2); ++ src12 = __lsx_vldrepl_b(src, 3); ++ src11 = __lsx_vldrepl_b(src, 4); ++ src10 = __lsx_vldrepl_b(src, 5); ++ src9 = __lsx_vldrepl_b(src, 6); ++ src8 = __lsx_vldrepl_b(src, 7); ++ src7 = __lsx_vldrepl_b(src, 8); ++ src6 = __lsx_vldrepl_b(src, 9); ++ src5 = __lsx_vldrepl_b(src, 10); ++ src4 = __lsx_vldrepl_b(src, 11); ++ src3 = __lsx_vldrepl_b(src, 12); ++ src2 = __lsx_vldrepl_b(src, 13); ++ src1 = __lsx_vldrepl_b(src, 14); ++ src0 = __lsx_vldrepl_b(src, 15); ++ LSX_ST_8(src0, src1, src2, src3, src4, src5, src6, src7, dst, dst_stride); ++ LSX_ST_8(src8, src9, src10, src11, src12, src13, src14, src15, dst, dst_stride); ++} ++ ++void ff_hor_32x32_lsx(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *src, ++ const uint8_t *top) ++{ ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i src8, src9, src10, src11, src12, src13, src14, src15; ++ __m128i src16, src17, src18, src19, src20, src21, src22, src23; ++ __m128i src24, src25, src26, src27, src28, src29, src30, src31; ++ ++ src31 = __lsx_vldrepl_b(src, 0); ++ src30 = __lsx_vldrepl_b(src, 1); ++ src29 = __lsx_vldrepl_b(src, 2); ++ src28 = __lsx_vldrepl_b(src, 3); ++ src27 = __lsx_vldrepl_b(src, 4); ++ src26 = __lsx_vldrepl_b(src, 5); ++ src25 = __lsx_vldrepl_b(src, 6); ++ src24 = __lsx_vldrepl_b(src, 7); ++ src23 = __lsx_vldrepl_b(src, 8); ++ src22 = __lsx_vldrepl_b(src, 9); ++ src21 = __lsx_vldrepl_b(src, 10); ++ src20 = __lsx_vldrepl_b(src, 11); ++ src19 = __lsx_vldrepl_b(src, 12); ++ src18 = __lsx_vldrepl_b(src, 13); ++ src17 = __lsx_vldrepl_b(src, 14); ++ src16 = __lsx_vldrepl_b(src, 15); ++ src15 = __lsx_vldrepl_b(src, 16); ++ src14 = __lsx_vldrepl_b(src, 17); ++ src13 = __lsx_vldrepl_b(src, 18); ++ src12 = __lsx_vldrepl_b(src, 19); ++ src11 = __lsx_vldrepl_b(src, 20); ++ src10 = __lsx_vldrepl_b(src, 21); ++ src9 = __lsx_vldrepl_b(src, 22); ++ src8 = __lsx_vldrepl_b(src, 23); ++ src7 = __lsx_vldrepl_b(src, 24); ++ src6 = __lsx_vldrepl_b(src, 25); ++ src5 = __lsx_vldrepl_b(src, 26); ++ src4 = __lsx_vldrepl_b(src, 27); ++ src3 = __lsx_vldrepl_b(src, 28); ++ src2 = __lsx_vldrepl_b(src, 29); ++ src1 = __lsx_vldrepl_b(src, 30); ++ src0 = __lsx_vldrepl_b(src, 31); ++ LSX_ST_8X16(src0, src1, src2, src3, src4, src5, src6, src7, dst, dst_stride); ++ LSX_ST_8X16(src8, src9, src10, src11, src12, src13, src14, src15, dst, dst_stride); ++ LSX_ST_8X16(src16, src17, src18, src19, src20, src21, src22, src23, dst, dst_stride); ++ LSX_ST_8X16(src24, src25, src26, src27, src28, src29, src30, src31, dst, dst_stride); ++} ++ ++void ff_dc_4x4_lsx(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *src_left, ++ const uint8_t *src_top) ++{ ++ __m128i tmp0, tmp1, dst0; ++ ++ tmp0 = __lsx_vldrepl_w(src_top, 0); ++ tmp1 = __lsx_vldrepl_w(src_left, 0); ++ dst0 = __lsx_vilvl_w(tmp1, tmp0); ++ dst0 = __lsx_vhaddw_hu_bu(dst0, dst0); ++ dst0 = __lsx_vhaddw_wu_hu(dst0, dst0); ++ dst0 = __lsx_vhaddw_du_wu(dst0, dst0); ++ dst0 = __lsx_vsrari_w(dst0, 3); ++ dst0 = __lsx_vshuf4i_b(dst0, 0); ++ __lsx_vstelm_w(dst0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_w(dst0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_w(dst0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_w(dst0, dst, 0, 0); ++} ++ ++#define INTRA_DC_TL_4X4(dir) \ ++void ff_dc_##dir##_4x4_lsx(uint8_t *dst, ptrdiff_t dst_stride, \ ++ const uint8_t *left, \ ++ const uint8_t *top) \ ++{ \ ++ __m128i tmp0, dst0; \ ++ \ ++ tmp0 = __lsx_vldrepl_w(dir, 0); \ ++ dst0 = __lsx_vhaddw_hu_bu(tmp0, tmp0); \ ++ dst0 = __lsx_vhaddw_wu_hu(dst0, dst0); \ ++ dst0 = __lsx_vsrari_w(dst0, 2); \ ++ dst0 = __lsx_vshuf4i_b(dst0, 0); \ ++ __lsx_vstelm_w(dst0, dst, 0, 0); \ ++ dst += dst_stride; \ ++ __lsx_vstelm_w(dst0, dst, 0, 0); \ ++ dst += dst_stride; \ ++ __lsx_vstelm_w(dst0, dst, 0, 0); \ ++ dst += dst_stride; \ ++ __lsx_vstelm_w(dst0, dst, 0, 0); \ ++} ++INTRA_DC_TL_4X4(top); ++INTRA_DC_TL_4X4(left); ++ ++void ff_dc_8x8_lsx(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *src_left, ++ const uint8_t *src_top) ++{ ++ __m128i tmp0, tmp1, dst0; ++ ++ tmp0 = __lsx_vldrepl_d(src_top, 0); ++ tmp1 = __lsx_vldrepl_d(src_left, 0); ++ dst0 = __lsx_vilvl_d(tmp1, tmp0); ++ dst0 = __lsx_vhaddw_hu_bu(dst0, dst0); ++ dst0 = __lsx_vhaddw_wu_hu(dst0, dst0); ++ dst0 = __lsx_vhaddw_du_wu(dst0, dst0); ++ dst0 = __lsx_vhaddw_qu_du(dst0, dst0); ++ dst0 = __lsx_vsrari_w(dst0, 4); ++ dst0 = __lsx_vreplvei_b(dst0, 0); ++ __lsx_vstelm_d(dst0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(dst0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(dst0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(dst0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(dst0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(dst0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(dst0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(dst0, dst, 0, 0); ++} ++ ++#define INTRA_DC_TL_8X8(dir) \ ++void ff_dc_##dir##_8x8_lsx(uint8_t *dst, ptrdiff_t dst_stride, \ ++ const uint8_t *left, \ ++ const uint8_t *top) \ ++{ \ ++ __m128i tmp0, dst0; \ ++ \ ++ tmp0 = __lsx_vldrepl_d(dir, 0); \ ++ dst0 = __lsx_vhaddw_hu_bu(tmp0, tmp0); \ ++ dst0 = __lsx_vhaddw_wu_hu(dst0, dst0); \ ++ dst0 = __lsx_vhaddw_du_wu(dst0, dst0); \ ++ dst0 = __lsx_vsrari_w(dst0, 3); \ ++ dst0 = __lsx_vreplvei_b(dst0, 0); \ ++ __lsx_vstelm_d(dst0, dst, 0, 0); \ ++ dst += dst_stride; \ ++ __lsx_vstelm_d(dst0, dst, 0, 0); \ ++ dst += dst_stride; \ ++ __lsx_vstelm_d(dst0, dst, 0, 0); \ ++ dst += dst_stride; \ ++ __lsx_vstelm_d(dst0, dst, 0, 0); \ ++ dst += dst_stride; \ ++ __lsx_vstelm_d(dst0, dst, 0, 0); \ ++ dst += dst_stride; \ ++ __lsx_vstelm_d(dst0, dst, 0, 0); \ ++ dst += dst_stride; \ ++ __lsx_vstelm_d(dst0, dst, 0, 0); \ ++ dst += dst_stride; \ ++ __lsx_vstelm_d(dst0, dst, 0, 0); \ ++} ++ ++INTRA_DC_TL_8X8(top); ++INTRA_DC_TL_8X8(left); ++ ++void ff_dc_16x16_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ const uint8_t *src_left, const uint8_t *src_top) ++{ ++ __m128i tmp0, tmp1, dst0; ++ ++ tmp0 = __lsx_vld(src_top, 0); ++ tmp1 = __lsx_vld(src_left, 0); ++ LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, tmp0, tmp0, tmp1, tmp1, tmp0, tmp1); ++ dst0 = __lsx_vadd_h(tmp0, tmp1); ++ dst0 = __lsx_vhaddw_wu_hu(dst0, dst0); ++ dst0 = __lsx_vhaddw_du_wu(dst0, dst0); ++ dst0 = __lsx_vhaddw_qu_du(dst0, dst0); ++ dst0 = __lsx_vsrari_w(dst0, 5); ++ dst0 = __lsx_vreplvei_b(dst0, 0); ++ LSX_ST_8(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride); ++ LSX_ST_8(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride); ++} ++ ++#define INTRA_DC_TL_16X16(dir) \ ++void ff_dc_##dir##_16x16_lsx(uint8_t *dst, ptrdiff_t dst_stride, \ ++ const uint8_t *left, \ ++ const uint8_t *top) \ ++{ \ ++ __m128i tmp0, dst0; \ ++ \ ++ tmp0 = __lsx_vld(dir, 0); \ ++ dst0 = __lsx_vhaddw_hu_bu(tmp0, tmp0); \ ++ dst0 = __lsx_vhaddw_wu_hu(dst0, dst0); \ ++ dst0 = __lsx_vhaddw_du_wu(dst0, dst0); \ ++ dst0 = __lsx_vhaddw_qu_du(dst0, dst0); \ ++ dst0 = __lsx_vsrari_w(dst0, 4); \ ++ dst0 = __lsx_vreplvei_b(dst0, 0); \ ++ LSX_ST_8(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride);\ ++ LSX_ST_8(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride);\ ++} ++ ++INTRA_DC_TL_16X16(top); ++INTRA_DC_TL_16X16(left); ++ ++void ff_dc_32x32_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ const uint8_t *src_left, const uint8_t *src_top) ++{ ++ __m128i tmp0, tmp1, tmp2, tmp3, dst0; ++ ++ LSX_DUP2_ARG2(__lsx_vld, src_top, 0, src_top, 16, tmp0, tmp1); ++ LSX_DUP2_ARG2(__lsx_vld, src_left, 0, src_left, 16, tmp2, tmp3); ++ LSX_DUP4_ARG2(__lsx_vhaddw_hu_bu, tmp0, tmp0, tmp1, tmp1, tmp2, tmp2, ++ tmp3, tmp3, tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP2_ARG2(__lsx_vadd_h, tmp0, tmp1, tmp2, tmp3, tmp0, tmp1); ++ dst0 = __lsx_vadd_h(tmp0, tmp1); ++ dst0 = __lsx_vhaddw_wu_hu(dst0, dst0); ++ dst0 = __lsx_vhaddw_du_wu(dst0, dst0); ++ dst0 = __lsx_vhaddw_qu_du(dst0, dst0); ++ dst0 = __lsx_vsrari_w(dst0, 6); ++ dst0 = __lsx_vreplvei_b(dst0, 0); ++ LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride); ++ LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride); ++ LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride); ++ LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride); ++} ++ ++#define INTRA_DC_TL_32X32(dir) \ ++void ff_dc_##dir##_32x32_lsx(uint8_t *dst, ptrdiff_t dst_stride, \ ++ const uint8_t *left, \ ++ const uint8_t *top) \ ++{ \ ++ __m128i tmp0, tmp1, dst0; \ ++ \ ++ LSX_DUP2_ARG2(__lsx_vld, dir, 0, dir, 16, tmp0, tmp1); \ ++ LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, tmp0, tmp0, tmp1, tmp1, tmp0, tmp1); \ ++ dst0 = __lsx_vadd_h(tmp0, tmp1); \ ++ dst0 = __lsx_vhaddw_wu_hu(dst0, dst0); \ ++ dst0 = __lsx_vhaddw_du_wu(dst0, dst0); \ ++ dst0 = __lsx_vhaddw_qu_du(dst0, dst0); \ ++ dst0 = __lsx_vsrari_w(dst0, 5); \ ++ dst0 = __lsx_vreplvei_b(dst0, 0); \ ++ LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride);\ ++ LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride);\ ++ LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride);\ ++ LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride);\ ++} ++ ++INTRA_DC_TL_32X32(top); ++INTRA_DC_TL_32X32(left); ++ ++#define INTRA_PREDICT_VALDC_16X16_LSX(val) \ ++void ff_dc_##val##_16x16_lsx(uint8_t *dst, ptrdiff_t dst_stride, \ ++ const uint8_t *left, const uint8_t *top) \ ++{ \ ++ __m128i out = __lsx_vldi(val); \ ++ \ ++ LSX_ST_8(out, out, out, out, out, out, out, out, dst, dst_stride); \ ++ LSX_ST_8(out, out, out, out, out, out, out, out, dst, dst_stride); \ ++} ++ ++INTRA_PREDICT_VALDC_16X16_LSX(127); ++INTRA_PREDICT_VALDC_16X16_LSX(128); ++INTRA_PREDICT_VALDC_16X16_LSX(129); ++ ++#define INTRA_PREDICT_VALDC_32X32_LSX(val) \ ++void ff_dc_##val##_32x32_lsx(uint8_t *dst, ptrdiff_t dst_stride, \ ++ const uint8_t *left, const uint8_t *top) \ ++{ \ ++ __m128i out = __lsx_vldi(val); \ ++ \ ++ LSX_ST_8X16(out, out, out, out, out, out, out, out, dst, dst_stride);\ ++ LSX_ST_8X16(out, out, out, out, out, out, out, out, dst, dst_stride);\ ++ LSX_ST_8X16(out, out, out, out, out, out, out, out, dst, dst_stride);\ ++ LSX_ST_8X16(out, out, out, out, out, out, out, out, dst, dst_stride);\ ++} ++ ++INTRA_PREDICT_VALDC_32X32_LSX(127); ++INTRA_PREDICT_VALDC_32X32_LSX(128); ++INTRA_PREDICT_VALDC_32X32_LSX(129); ++ ++void ff_tm_4x4_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ const uint8_t *src_left, const uint8_t *src_top_ptr) ++{ ++ uint8_t top_left = src_top_ptr[-1]; ++ __m128i tmp0, tmp1, tmp2, tmp3, reg0, reg1; ++ __m128i src0, src1, src2, src3; ++ __m128i dst0, dst1, dst2, dst3; ++ ++ reg0 = __lsx_vreplgr2vr_h(top_left); ++ reg1 = __lsx_vld(src_top_ptr, 0); ++ LSX_DUP4_ARG2(__lsx_vldrepl_b, src_left, 0, src_left, 1, src_left, 2, src_left, ++ 3, tmp3, tmp2, tmp1, tmp0); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, reg1, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vhaddw_hu_bu, src0, src0, src1, src1, src2, src2, src3, ++ src3, dst0, dst1, dst2, dst3); ++ LSX_DUP4_ARG2(__lsx_vssub_hu, dst0, reg0, dst1, reg0, dst2, reg0, dst3, reg0, ++ dst0, dst1, dst2, dst3); ++ LSX_DUP4_ARG2(__lsx_vsat_hu, dst0, 7, dst1, 7, dst2, 7, dst3, 7, ++ dst0, dst1, dst2, dst3); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); ++ __lsx_vstelm_w(dst0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_w(dst0, dst, 0, 2); ++ dst += dst_stride; ++ __lsx_vstelm_w(dst1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_w(dst1, dst, 0, 2); ++} ++ ++void ff_tm_8x8_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ const uint8_t *src_left, const uint8_t *src_top_ptr) ++{ ++ uint8_t top_left = src_top_ptr[-1]; ++ __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i reg0, reg1; ++ ++ reg0 = __lsx_vreplgr2vr_h(top_left); ++ reg1 = __lsx_vld(src_top_ptr, 0); ++ LSX_DUP4_ARG2(__lsx_vldrepl_b, src_left, 0, src_left, 1, src_left, 2, src_left, ++ 3, tmp7, tmp6, tmp5, tmp4); ++ LSX_DUP4_ARG2(__lsx_vldrepl_b, src_left, 4, src_left, 5, src_left, 6, src_left, ++ 7, tmp3, tmp2, tmp1, tmp0); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, reg1, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, tmp4, reg1, tmp5, reg1, tmp6, reg1, tmp7, reg1, ++ src4, src5, src6, src7); ++ LSX_DUP4_ARG2(__lsx_vhaddw_hu_bu, src0, src0, src1, src1, src2, src2, src3, ++ src3, src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vhaddw_hu_bu, src4, src4, src5, src5, src6, src6, src7, ++ src7, src4, src5, src6, src7); ++ LSX_DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, ++ src4, src5, src6, src7); ++ LSX_DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, ++ src4, src5, src6, src7); ++ LSX_DUP4_ARG2(__lsx_vpickev_b, src1, src0, src3, src2, src5, src4, src7, src6, ++ src0, src1, src2, src3); ++ __lsx_vstelm_d(src0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(src0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(src1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(src1, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(src2, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(src2, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(src3, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(src3, dst, 0, 1); ++} ++ ++void ff_tm_16x16_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ const uint8_t *src_left, const uint8_t *src_top_ptr) ++{ ++ uint8_t top_left = src_top_ptr[-1]; ++ __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; ++ __m128i tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i reg0, reg1; ++ ++ reg0 = __lsx_vreplgr2vr_h(top_left); ++ reg1 = __lsx_vld(src_top_ptr, 0); ++ LSX_DUP4_ARG2(__lsx_vldrepl_b, src_left, 0, src_left, 1, src_left, 2, src_left, ++ 3, tmp15, tmp14, tmp13, tmp12); ++ LSX_DUP4_ARG2(__lsx_vldrepl_b, src_left, 4, src_left, 5, src_left, 6, src_left, ++ 7, tmp11, tmp10, tmp9, tmp8); ++ LSX_DUP4_ARG2(__lsx_vldrepl_b, src_left, 8, src_left, 9, src_left, 10, src_left, ++ 11, tmp7, tmp6, tmp5, tmp4); ++ LSX_DUP4_ARG2(__lsx_vldrepl_b, src_left, 12, src_left, 13, src_left, 14, src_left, ++ 15, tmp3, tmp2, tmp1, tmp0); ++ LSX_DUP4_ARG2(__lsx_vaddwev_h_bu, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, reg1, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vaddwod_h_bu, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, reg1, ++ src4, src5, src6, src7); ++ LSX_DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, ++ src4, src5, src6, src7); ++ LSX_DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, ++ src4, src5, src6, src7); ++ LSX_DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, src3, ++ tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP4_ARG2(__lsx_vaddwev_h_bu, tmp4, reg1, tmp5, reg1, tmp6, reg1, tmp7, reg1, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vaddwod_h_bu, tmp4, reg1, tmp5, reg1, tmp6, reg1, tmp7, reg1, ++ src4, src5, src6, src7); ++ LSX_DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, ++ src4, src5, src6, src7); ++ LSX_DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, ++ src4, src5, src6, src7); ++ LSX_DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, src3, ++ tmp4, tmp5, tmp6, tmp7); ++ LSX_DUP4_ARG2(__lsx_vaddwev_h_bu, tmp8, reg1, tmp9, reg1, tmp10, reg1, tmp11, reg1, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vaddwod_h_bu, tmp8, reg1, tmp9, reg1, tmp10, reg1, tmp11, reg1, ++ src4, src5, src6, src7); ++ LSX_DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, ++ src4, src5, src6, src7); ++ LSX_DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, ++ src4, src5, src6, src7); ++ LSX_DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, src3, ++ tmp8, tmp9, tmp10, tmp11); ++ LSX_DUP4_ARG2(__lsx_vaddwev_h_bu, tmp12, reg1, tmp13, reg1, tmp14, reg1, tmp15, reg1, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vaddwod_h_bu, tmp12, reg1, tmp13, reg1, tmp14, reg1, tmp15, reg1, ++ src4, src5, src6, src7); ++ LSX_DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, ++ src4, src5, src6, src7); ++ LSX_DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, ++ src4, src5, src6, src7); ++ LSX_DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, src3, ++ tmp12, tmp13, tmp14, tmp15); ++ LSX_ST_8(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, dst, dst_stride); ++ LSX_ST_8(tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, dst, dst_stride); ++} ++ ++void ff_tm_32x32_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ const uint8_t *src_left, const uint8_t *src_top_ptr) ++{ ++ uint8_t top_left = src_top_ptr[-1]; ++ uint32_t loop_cnt; ++ __m128i tmp0, tmp1, tmp2, tmp3, reg0, reg1, reg2; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; ++ ++ reg0 = __lsx_vreplgr2vr_h(top_left); ++ LSX_DUP2_ARG2(__lsx_vld, src_top_ptr, 0, src_top_ptr, 16, reg1, reg2); ++ ++ src_left += 28; ++ for (loop_cnt = 8; loop_cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vldrepl_b, src_left, 0, src_left, 1, src_left, 2, src_left, 3, ++ tmp3, tmp2, tmp1, tmp0); ++ src_left -= 4; ++ LSX_DUP4_ARG2(__lsx_vaddwev_h_bu, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, reg1, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vaddwod_h_bu, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, reg1, ++ src4, src5, src6, src7); ++ LSX_DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, ++ src4, src5, src6, src7); ++ LSX_DUP4_ARG2(__lsx_vaddwev_h_bu, tmp0, reg2, tmp1, reg2, tmp2, reg2, tmp3, reg2, ++ dst0, dst1, dst2, dst3); ++ LSX_DUP4_ARG2(__lsx_vaddwod_h_bu, tmp0, reg2, tmp1, reg2, tmp2, reg2, tmp3, reg2, ++ dst4, dst5, dst6, dst7); ++ LSX_DUP4_ARG2(__lsx_vssub_hu, dst0, reg0, dst1, reg0, dst2, reg0, dst3, reg0, ++ dst0, dst1, dst2, dst3); ++ LSX_DUP4_ARG2(__lsx_vssub_hu, dst4, reg0, dst5, reg0, dst6, reg0, dst7, reg0, ++ dst4, dst5, dst6, dst7); ++ LSX_DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, ++ src4, src5, src6, src7); ++ LSX_DUP4_ARG2(__lsx_vsat_hu, dst0, 7, dst1, 7, dst2, 7, dst3, 7, ++ dst0, dst1, dst2, dst3); ++ LSX_DUP4_ARG2(__lsx_vsat_hu, dst4, 7, dst5, 7, dst6, 7, dst7, 7, ++ dst4, dst5, dst6, dst7); ++ LSX_DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, src3, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vpackev_b, dst4, dst0, dst5, dst1, dst6, dst2, dst7, dst3, ++ dst0, dst1, dst2, dst3); ++ __lsx_vst(src0, dst, 0); ++ __lsx_vst(dst0, dst, 16); ++ dst += dst_stride; ++ __lsx_vst(src1, dst, 0); ++ __lsx_vst(dst1, dst, 16); ++ dst += dst_stride; ++ __lsx_vst(src2, dst, 0); ++ __lsx_vst(dst2, dst, 16); ++ dst += dst_stride; ++ __lsx_vst(src3, dst, 0); ++ __lsx_vst(dst3, dst, 16); ++ dst += dst_stride; ++ } ++} +diff --git a/libavcodec/loongarch/vp9_lpf_lsx.c b/libavcodec/loongarch/vp9_lpf_lsx.c +new file mode 100644 +index 0000000000..f8bde7e300 +--- /dev/null ++++ b/libavcodec/loongarch/vp9_lpf_lsx.c +@@ -0,0 +1,3140 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Jin Bo ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavcodec/vp9dsp.h" ++#include "libavutil/loongarch/generic_macros_lsx.h" ++#include "libavutil/common.h" ++#include "vp9dsp_loongarch.h" ++ ++#define LSX_LD_8(_src, _stride, _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7) \ ++{ \ ++ _in0 = __lsx_vld(_src, 0); \ ++ _src += _stride; \ ++ _in1 = __lsx_vld(_src, 0); \ ++ _src += _stride; \ ++ _in2 = __lsx_vld(_src, 0); \ ++ _src += _stride; \ ++ _in3 = __lsx_vld(_src, 0); \ ++ _src += _stride; \ ++ _in4 = __lsx_vld(_src, 0); \ ++ _src += _stride; \ ++ _in5 = __lsx_vld(_src, 0); \ ++ _src += _stride; \ ++ _in6 = __lsx_vld(_src, 0); \ ++ _src += _stride; \ ++ _in7 = __lsx_vld(_src, 0); \ ++} ++ ++#define LSX_ST_8(_dst0, _dst1, _dst2, _dst3, _dst4, _dst5, \ ++ _dst6, _dst7, _dst, _stride) \ ++{ \ ++ __lsx_vst(_dst0, _dst, 0); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst1, _dst, 0); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst2, _dst, 0); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst3, _dst, 0); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst4, _dst, 0); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst5, _dst, 0); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst6, _dst, 0); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst7, _dst, 0); \ ++} ++ ++#define VP9_LPF_FILTER4_4W(p1_src, p0_src, q0_src, q1_src, mask_src, hev_src, \ ++ p1_dst, p0_dst, q0_dst, q1_dst) \ ++{ \ ++ __m128i p1_tmp, p0_tmp, q0_tmp, q1_tmp, q0_sub_p0, filt, filt1, filt2; \ ++ const __m128i cnst3b = __lsx_vldi(3); \ ++ const __m128i cnst4b = __lsx_vldi(4); \ ++ \ ++ p1_tmp = __lsx_vxori_b(p1_src, 0x80); \ ++ p0_tmp = __lsx_vxori_b(p0_src, 0x80); \ ++ q0_tmp = __lsx_vxori_b(q0_src, 0x80); \ ++ q1_tmp = __lsx_vxori_b(q1_src, 0x80); \ ++ \ ++ filt = __lsx_vssub_b(p1_tmp, q1_tmp); \ ++ \ ++ filt = filt & hev_src; \ ++ \ ++ q0_sub_p0 = __lsx_vssub_b(q0_tmp, p0_tmp); \ ++ filt = __lsx_vsadd_b(filt, q0_sub_p0); \ ++ filt = __lsx_vsadd_b(filt, q0_sub_p0); \ ++ filt = __lsx_vsadd_b(filt, q0_sub_p0); \ ++ filt = filt & mask_src; \ ++ \ ++ filt1 = __lsx_vsadd_b(filt, cnst4b); \ ++ filt1 = __lsx_vsrai_b(filt1, 3); \ ++ \ ++ filt2 = __lsx_vsadd_b(filt, cnst3b); \ ++ filt2 = __lsx_vsrai_b(filt2, 3); \ ++ \ ++ q0_tmp = __lsx_vssub_b(q0_tmp, filt1); \ ++ q0_dst = __lsx_vxori_b(q0_tmp, 0x80); \ ++ p0_tmp = __lsx_vsadd_b(p0_tmp, filt2); \ ++ p0_dst = __lsx_vxori_b(p0_tmp, 0x80); \ ++ \ ++ filt = __lsx_vsrari_b(filt1, 1); \ ++ hev_src = __lsx_vxori_b(hev_src, 0xff); \ ++ filt = filt & hev_src; \ ++ \ ++ q1_tmp = __lsx_vssub_b(q1_tmp, filt); \ ++ q1_dst = __lsx_vxori_b(q1_tmp, 0x80); \ ++ p1_tmp = __lsx_vsadd_b(p1_tmp, filt); \ ++ p1_dst = __lsx_vxori_b(p1_tmp, 0x80); \ ++} ++ ++#define VP9_FLAT4(p3_src, p2_src, p0_src, q0_src, q2_src, q3_src, flat_dst) \ ++{ \ ++ __m128i f_tmp = __lsx_vldi(1); \ ++ __m128i p2_a_sub_p0, q2_a_sub_q0, p3_a_sub_p0, q3_a_sub_q0; \ ++ \ ++ p2_a_sub_p0 = __lsx_vabsd_bu(p2_src, p0_src); \ ++ q2_a_sub_q0 = __lsx_vabsd_bu(q2_src, q0_src); \ ++ p3_a_sub_p0 = __lsx_vabsd_bu(p3_src, p0_src); \ ++ q3_a_sub_q0 = __lsx_vabsd_bu(q3_src, q0_src); \ ++ \ ++ p2_a_sub_p0 = __lsx_vmax_bu(p2_a_sub_p0, q2_a_sub_q0); \ ++ flat_dst = __lsx_vmax_bu(p2_a_sub_p0, flat_dst); \ ++ p3_a_sub_p0 = __lsx_vmax_bu(p3_a_sub_p0, q3_a_sub_q0); \ ++ flat_dst = __lsx_vmax_bu(p3_a_sub_p0, flat_dst); \ ++ \ ++ flat_dst = __lsx_vslt_bu(f_tmp, flat_dst); \ ++ flat_dst = __lsx_vxori_b(flat_dst, 0xff); \ ++ flat_dst = flat_dst & mask; \ ++} ++ ++#define VP9_FLAT5(p7_src, p6_src, p5_src, p4_src, p0_src, q0_src, q4_src, \ ++ q5_src, q6_src, q7_src, flat_src, flat2_dst) \ ++{ \ ++ __m128i f_tmp = __lsx_vldi(1); \ ++ __m128i p4_a_sub_p0, q4_a_sub_q0, p5_a_sub_p0, q5_a_sub_q0; \ ++ __m128i p6_a_sub_p0, q6_a_sub_q0, p7_a_sub_p0, q7_a_sub_q0; \ ++ \ ++ p4_a_sub_p0 = __lsx_vabsd_bu(p4_src, p0_src); \ ++ q4_a_sub_q0 = __lsx_vabsd_bu(q4_src, q0_src); \ ++ p5_a_sub_p0 = __lsx_vabsd_bu(p5_src, p0_src); \ ++ q5_a_sub_q0 = __lsx_vabsd_bu(q5_src, q0_src); \ ++ p6_a_sub_p0 = __lsx_vabsd_bu(p6_src, p0_src); \ ++ q6_a_sub_q0 = __lsx_vabsd_bu(q6_src, q0_src); \ ++ p7_a_sub_p0 = __lsx_vabsd_bu(p7_src, p0_src); \ ++ q7_a_sub_q0 = __lsx_vabsd_bu(q7_src, q0_src); \ ++ \ ++ p4_a_sub_p0 = __lsx_vmax_bu(p4_a_sub_p0, q4_a_sub_q0); \ ++ flat2_dst = __lsx_vmax_bu(p5_a_sub_p0, q5_a_sub_q0); \ ++ flat2_dst = __lsx_vmax_bu(p4_a_sub_p0, flat2_dst); \ ++ p6_a_sub_p0 = __lsx_vmax_bu(p6_a_sub_p0, q6_a_sub_q0); \ ++ flat2_dst = __lsx_vmax_bu(p6_a_sub_p0, flat2_dst); \ ++ p7_a_sub_p0 = __lsx_vmax_bu(p7_a_sub_p0, q7_a_sub_q0); \ ++ flat2_dst = __lsx_vmax_bu(p7_a_sub_p0, flat2_dst); \ ++ \ ++ flat2_dst = __lsx_vslt_bu(f_tmp, flat2_dst); \ ++ flat2_dst = __lsx_vxori_b(flat2_dst, 0xff); \ ++ flat2_dst = flat2_dst & flat_src; \ ++} ++ ++#define VP9_FILTER8(p3_src, p2_src, p1_src, p0_src, \ ++ q0_src, q1_src, q2_src, q3_src, \ ++ p2_filt8_dst, p1_filt8_dst, p0_filt8_dst, \ ++ q0_filt8_dst, q1_filt8_dst, q2_filt8_dst) \ ++{ \ ++ __m128i tmp0, tmp1, tmp2; \ ++ \ ++ tmp2 = __lsx_vadd_h(p2_src, p1_src); \ ++ tmp2 = __lsx_vadd_h(tmp2, p0_src); \ ++ tmp0 = __lsx_vslli_h(p3_src, 1); \ ++ \ ++ tmp0 = __lsx_vadd_h(tmp0, tmp2); \ ++ tmp0 = __lsx_vadd_h(tmp0, q0_src); \ ++ tmp1 = __lsx_vadd_h(tmp0, p3_src); \ ++ tmp1 = __lsx_vadd_h(tmp1, p2_src); \ ++ p2_filt8_dst = __lsx_vsrari_h(tmp1, 3); \ ++ \ ++ tmp1 = __lsx_vadd_h(tmp0, p1_src); \ ++ tmp1 = __lsx_vadd_h(tmp1, q1_src); \ ++ p1_filt8_dst = __lsx_vsrari_h(tmp1, 3); \ ++ \ ++ tmp1 = __lsx_vadd_h(q2_src, q1_src); \ ++ tmp1 = __lsx_vadd_h(tmp1, q0_src); \ ++ tmp2 = __lsx_vadd_h(tmp2, tmp1); \ ++ tmp0 = __lsx_vadd_h(tmp2, p0_src); \ ++ tmp0 = __lsx_vadd_h(tmp0, p3_src); \ ++ p0_filt8_dst = __lsx_vsrari_h(tmp0, 3); \ ++ \ ++ tmp0 = __lsx_vadd_h(q2_src, q3_src); \ ++ tmp0 = __lsx_vadd_h(tmp0, p0_src); \ ++ tmp0 = __lsx_vadd_h(tmp0, tmp1); \ ++ tmp1 = __lsx_vadd_h(q3_src, q3_src); \ ++ tmp1 = __lsx_vadd_h(tmp1, tmp0); \ ++ q2_filt8_dst = __lsx_vsrari_h(tmp1, 3); \ ++ \ ++ tmp0 = __lsx_vadd_h(tmp2, q3_src); \ ++ tmp1 = __lsx_vadd_h(tmp0, q0_src); \ ++ q0_filt8_dst = __lsx_vsrari_h(tmp1, 3); \ ++ \ ++ tmp1 = __lsx_vsub_h(tmp0, p2_src); \ ++ tmp0 = __lsx_vadd_h(q1_src, q3_src); \ ++ tmp1 = __lsx_vadd_h(tmp0, tmp1); \ ++ q1_filt8_dst = __lsx_vsrari_h(tmp1, 3); \ ++} ++ ++#define LPF_MASK_HEV(p3_src, p2_src, p1_src, p0_src, q0_src, q1_src, \ ++ q2_src, q3_src, limit_src, b_limit_src, thresh_src, \ ++ hev_dst, mask_dst, flat_dst) \ ++{ \ ++ __m128i p3_asub_p2_tmp, p2_asub_p1_tmp, p1_asub_p0_tmp, q1_asub_q0_tmp; \ ++ __m128i p1_asub_q1_tmp, p0_asub_q0_tmp, q3_asub_q2_tmp, q2_asub_q1_tmp; \ ++ \ ++ /* absolute subtraction of pixel values */ \ ++ p3_asub_p2_tmp = __lsx_vabsd_bu(p3_src, p2_src); \ ++ p2_asub_p1_tmp = __lsx_vabsd_bu(p2_src, p1_src); \ ++ p1_asub_p0_tmp = __lsx_vabsd_bu(p1_src, p0_src); \ ++ q1_asub_q0_tmp = __lsx_vabsd_bu(q1_src, q0_src); \ ++ q2_asub_q1_tmp = __lsx_vabsd_bu(q2_src, q1_src); \ ++ q3_asub_q2_tmp = __lsx_vabsd_bu(q3_src, q2_src); \ ++ p0_asub_q0_tmp = __lsx_vabsd_bu(p0_src, q0_src); \ ++ p1_asub_q1_tmp = __lsx_vabsd_bu(p1_src, q1_src); \ ++ \ ++ /* calculation of hev */ \ ++ flat_dst = __lsx_vmax_bu(p1_asub_p0_tmp, q1_asub_q0_tmp); \ ++ hev_dst = __lsx_vslt_bu(thresh_src, flat_dst); \ ++ \ ++ /* calculation of mask */ \ ++ p0_asub_q0_tmp = __lsx_vsadd_bu(p0_asub_q0_tmp, p0_asub_q0_tmp); \ ++ p1_asub_q1_tmp = __lsx_vsrli_b(p1_asub_q1_tmp, 1); \ ++ p0_asub_q0_tmp = __lsx_vsadd_bu(p0_asub_q0_tmp, p1_asub_q1_tmp); \ ++ \ ++ mask_dst = __lsx_vslt_bu(b_limit_src, p0_asub_q0_tmp); \ ++ mask_dst = __lsx_vmax_bu(flat_dst, mask_dst); \ ++ p3_asub_p2_tmp = __lsx_vmax_bu(p3_asub_p2_tmp, p2_asub_p1_tmp); \ ++ mask_dst = __lsx_vmax_bu(p3_asub_p2_tmp, mask_dst); \ ++ q2_asub_q1_tmp = __lsx_vmax_bu(q2_asub_q1_tmp, q3_asub_q2_tmp); \ ++ mask_dst = __lsx_vmax_bu(q2_asub_q1_tmp, mask_dst); \ ++ \ ++ mask_dst = __lsx_vslt_bu(limit_src, mask_dst); \ ++ mask_dst = __lsx_vxori_b(mask_dst, 0xff); \ ++} ++ ++#define LSX_TRANSPOSE8x8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ ++{ \ ++ __m128i _tmp0, _tmp1, _tmp2, _tmp3, _tmp4, _tmp5, _tmp6, _tmp7; \ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, _in2, _in0, _in3, _in1, _in6, _in4, _in7, _in5, \ ++ _tmp0, _tmp1, _tmp2, _tmp3); \ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, _tmp1, _tmp0, _tmp3, _tmp2, _tmp4, _tmp6); \ ++ LSX_DUP2_ARG2(__lsx_vilvh_b, _tmp1, _tmp0, _tmp3, _tmp2, _tmp5, _tmp7); \ ++ LSX_DUP2_ARG2(__lsx_vilvl_w, _tmp6, _tmp4, _tmp7, _tmp5, _out0, _out4); \ ++ LSX_DUP2_ARG2(__lsx_vilvh_w, _tmp6, _tmp4, _tmp7, _tmp5, _out2, _out6); \ ++ LSX_DUP4_ARG2(__lsx_vbsrl_v, _out0, 8, _out2, 8, _out4, 8, _out6, 8, \ ++ _out1, _out3, _out5, _out7); \ ++} ++ ++#define LSX_TRANSPOSE16x8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, _in8, \ ++ _in9, _in10, _in11, _in12, _in13, _in14, _in15, _out0, \ ++ _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ ++{ \ ++ __m128i _tmp0, _tmp1, _tmp2, _tmp3, _tmp4, _tmp5, _tmp6, _tmp7; \ ++ __m128i _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, _in2, _in0, _in3, _in1, _in6, _in4, _in7, _in5, \ ++ _tmp0, _tmp1, _tmp2, _tmp3); \ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, _in10, _in8, _in11, _in9, _in14, _in12, _in15, \ ++ _in13, _tmp4, _tmp5, _tmp6, _tmp7); \ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, _tmp1, _tmp0, _tmp3, _tmp2, _t0, _t2); \ ++ LSX_DUP2_ARG2(__lsx_vilvh_b, _tmp1, _tmp0, _tmp3, _tmp2, _t1, _t3); \ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, _tmp5, _tmp4, _tmp7, _tmp6, _t4, _t6); \ ++ LSX_DUP2_ARG2(__lsx_vilvh_b, _tmp5, _tmp4, _tmp7, _tmp6, _t5, _t7); \ ++ LSX_DUP2_ARG2(__lsx_vilvl_w, _t2, _t0, _t3, _t1, _tmp0, _tmp4); \ ++ LSX_DUP2_ARG2(__lsx_vilvh_w, _t2, _t0, _t3, _t1, _tmp2, _tmp6); \ ++ LSX_DUP2_ARG2(__lsx_vilvl_w, _t6, _t4, _t7, _t5, _tmp1, _tmp5); \ ++ LSX_DUP2_ARG2(__lsx_vilvh_w, _t6, _t4, _t7, _t5, _tmp3, _tmp7); \ ++ LSX_DUP2_ARG2(__lsx_vilvl_d, _tmp1, _tmp0, _tmp3, _tmp2, _out0, _out2); \ ++ LSX_DUP2_ARG2(__lsx_vilvh_d, _tmp1, _tmp0, _tmp3, _tmp2, _out1, _out3); \ ++ LSX_DUP2_ARG2(__lsx_vilvl_d, _tmp5, _tmp4, _tmp7, _tmp6, _out4, _out6); \ ++ LSX_DUP2_ARG2(__lsx_vilvh_d, _tmp5, _tmp4, _tmp7, _tmp6, _out5, _out7); \ ++} ++ ++ ++void ff_loop_filter_v_4_8_lsx(uint8_t *dst, ptrdiff_t stride, ++ int32_t b_limit_ptr, ++ int32_t limit_ptr, ++ int32_t thresh_ptr) ++{ ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ ptrdiff_t stride4 = stride2 << 1; ++ __m128i mask, hev, flat, thresh, b_limit, limit; ++ __m128i p3, p2, p1, p0, q3, q2, q1, q0, p1_out, p0_out, q0_out, q1_out; ++ ++ LSX_DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, ++ dst - stride, 0, p3, p2, p1, p0); ++ LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, ++ dst + stride3, 0, q0, q1, q2, q3); ++ ++ ++ thresh = __lsx_vreplgr2vr_b(thresh_ptr); ++ b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); ++ limit = __lsx_vreplgr2vr_b(limit_ptr); ++ ++ LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, ++ hev, mask, flat); ++ ++ VP9_LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev, p1_out, p0_out, q0_out, ++ q1_out); ++ ++ __lsx_vstelm_d(p1_out, dst - stride2, 0, 0); ++ __lsx_vstelm_d(p0_out, dst - stride, 0, 0); ++ __lsx_vstelm_d(q0_out, dst , 0, 0); ++ __lsx_vstelm_d(q1_out, dst + stride, 0, 0); ++} ++ ++void ff_loop_filter_v_44_16_lsx(uint8_t *dst, ptrdiff_t stride, ++ int32_t b_limit_ptr, ++ int32_t limit_ptr, ++ int32_t thresh_ptr) ++{ ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ ptrdiff_t stride4 = stride2 << 1; ++ __m128i mask, hev, flat, thresh0, b_limit0; ++ __m128i limit0, thresh1, b_limit1, limit1; ++ __m128i p3, p2, p1, p0, q3, q2, q1, q0; ++ ++ LSX_DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, ++ dst - stride, 0, p3, p2, p1, p0); ++ LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, ++ dst + stride3, 0, q0, q1, q2, q3); ++ ++ thresh0 = __lsx_vreplgr2vr_b(thresh_ptr); ++ thresh1 = __lsx_vreplgr2vr_b(thresh_ptr >> 8); ++ thresh0 = __lsx_vilvl_d(thresh1, thresh0); ++ ++ b_limit0 = __lsx_vreplgr2vr_b(b_limit_ptr); ++ b_limit1 = __lsx_vreplgr2vr_b(b_limit_ptr >> 8); ++ b_limit0 = __lsx_vilvl_d(b_limit1, b_limit0); ++ ++ limit0 = __lsx_vreplgr2vr_b(limit_ptr); ++ limit1 = __lsx_vreplgr2vr_b(limit_ptr >> 8); ++ limit0 = __lsx_vilvl_d(limit1, limit0); ++ ++ LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit0, b_limit0, thresh0, ++ hev, mask, flat); ++ VP9_LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev, p1, p0, q0, q1); ++ ++ __lsx_vst(p1, dst - stride2, 0); ++ __lsx_vst(p0, dst - stride, 0); ++ __lsx_vst(q0, dst , 0); ++ __lsx_vst(q1, dst + stride, 0); ++} ++ ++void ff_loop_filter_v_8_8_lsx(uint8_t *dst, ptrdiff_t stride, ++ int32_t b_limit_ptr, ++ int32_t limit_ptr, ++ int32_t thresh_ptr) ++{ ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ ptrdiff_t stride4 = stride2 << 1; ++ __m128i mask, hev, flat, thresh, b_limit, limit; ++ __m128i p3, p2, p1, p0, q3, q2, q1, q0; ++ __m128i p2_out, p1_out, p0_out, q0_out, q1_out, q2_out; ++ __m128i p2_filter8, p1_filter8, p0_filter8; ++ __m128i q0_filter8, q1_filter8, q2_filter8; ++ __m128i p3_l, p2_l, p1_l, p0_l, q3_l, q2_l, q1_l, q0_l; ++ __m128i zero = __lsx_vldi(0); ++ ++ LSX_DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, ++ dst - stride, 0, p3, p2, p1, p0); ++ LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, ++ dst + stride3, 0, q0, q1, q2, q3); ++ ++ thresh = __lsx_vreplgr2vr_b(thresh_ptr); ++ b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); ++ limit = __lsx_vreplgr2vr_b(limit_ptr); ++ ++ LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, ++ hev, mask, flat); ++ VP9_FLAT4(p3, p2, p0, q0, q2, q3, flat); ++ VP9_LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev, p1_out, p0_out, q0_out, ++ q1_out); ++ ++ flat = __lsx_vilvl_d(zero, flat); ++ ++ /* if flat is zero for all pixels, then no need to calculate other filter */ ++ if (__lsx_bz_v(flat)) { ++ __lsx_vstelm_d(p1_out, dst - stride2, 0, 0); ++ __lsx_vstelm_d(p0_out, dst - stride, 0, 0); ++ __lsx_vstelm_d(q0_out, dst , 0, 0); ++ __lsx_vstelm_d(q1_out, dst + stride, 0, 0); ++ } else { ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_l, p2_l, p1_l, p0_l); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_l, q1_l, q2_l, q3_l); ++ VP9_FILTER8(p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l, p2_filter8, ++ p1_filter8, p0_filter8, q0_filter8, q1_filter8, q2_filter8); ++ ++ /* convert 16 bit output data into 8 bit */ ++ LSX_DUP4_ARG2(__lsx_vpickev_b, zero, p2_filter8, zero, p1_filter8, ++ zero, p0_filter8, zero, q0_filter8, p2_filter8, ++ p1_filter8, p0_filter8, q0_filter8); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, zero, q1_filter8, zero, q2_filter8, ++ q1_filter8, q2_filter8); ++ ++ /* store pixel values */ ++ p2_out = __lsx_vbitsel_v(p2, p2_filter8, flat); ++ p1_out = __lsx_vbitsel_v(p1_out, p1_filter8, flat); ++ p0_out = __lsx_vbitsel_v(p0_out, p0_filter8, flat); ++ q0_out = __lsx_vbitsel_v(q0_out, q0_filter8, flat); ++ q1_out = __lsx_vbitsel_v(q1_out, q1_filter8, flat); ++ q2_out = __lsx_vbitsel_v(q2, q2_filter8, flat); ++ ++ __lsx_vstelm_d(p2_out, dst - stride3, 0, 0); ++ __lsx_vstelm_d(p1_out, dst - stride2, 0, 0); ++ __lsx_vstelm_d(p0_out, dst - stride, 0, 0); ++ __lsx_vstelm_d(q0_out, dst, 0, 0); ++ __lsx_vstelm_d(q1_out, dst + stride, 0, 0); ++ __lsx_vstelm_d(q2_out, dst + stride2, 0, 0); ++ } ++} ++ ++void ff_loop_filter_v_88_16_lsx(uint8_t *dst, ptrdiff_t stride, ++ int32_t b_limit_ptr, ++ int32_t limit_ptr, ++ int32_t thresh_ptr) ++{ ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ ptrdiff_t stride4 = stride2 << 1; ++ __m128i p3, p2, p1, p0, q3, q2, q1, q0; ++ __m128i p2_out, p1_out, p0_out, q0_out, q1_out, q2_out; ++ __m128i flat, mask, hev, tmp, thresh, b_limit, limit; ++ __m128i p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l; ++ __m128i p3_h, p2_h, p1_h, p0_h, q0_h, q1_h, q2_h, q3_h; ++ __m128i p2_filt8_l, p1_filt8_l, p0_filt8_l; ++ __m128i q0_filt8_l, q1_filt8_l, q2_filt8_l; ++ __m128i p2_filt8_h, p1_filt8_h, p0_filt8_h; ++ __m128i q0_filt8_h, q1_filt8_h, q2_filt8_h; ++ __m128i zero = __lsx_vldi(0); ++ ++ /* load vector elements */ ++ LSX_DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, ++ dst - stride, 0, p3, p2, p1, p0); ++ LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, ++ dst + stride3, 0, q0, q1, q2, q3); ++ ++ thresh = __lsx_vreplgr2vr_b(thresh_ptr); ++ tmp = __lsx_vreplgr2vr_b(thresh_ptr >> 8); ++ thresh = __lsx_vilvl_d(tmp, thresh); ++ ++ b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); ++ tmp = __lsx_vreplgr2vr_b(b_limit_ptr >> 8); ++ b_limit = __lsx_vilvl_d(tmp, b_limit); ++ ++ limit = __lsx_vreplgr2vr_b(limit_ptr); ++ tmp = __lsx_vreplgr2vr_b(limit_ptr >> 8); ++ limit = __lsx_vilvl_d(tmp, limit); ++ ++ /* mask and hev */ ++ LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, ++ hev, mask, flat); ++ VP9_FLAT4(p3, p2, p0, q0, q2, q3, flat); ++ VP9_LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev, p1_out, p0_out, q0_out, ++ q1_out); ++ ++ /* if flat is zero for all pixels, then no need to calculate other filter */ ++ if (__lsx_bz_v(flat)) { ++ __lsx_vst(p1_out, dst - stride2, 0); ++ __lsx_vst(p0_out, dst - stride, 0); ++ __lsx_vst(q0_out, dst, 0); ++ __lsx_vst(q1_out, dst + stride, 0); ++ } else { ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_l, p2_l, p1_l, p0_l); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_l, q1_l, q2_l, q3_l); ++ VP9_FILTER8(p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l, p2_filt8_l, ++ p1_filt8_l, p0_filt8_l, q0_filt8_l, q1_filt8_l, q2_filt8_l); ++ ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_h, p2_h, p1_h, p0_h); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_h, q1_h, q2_h, q3_h); ++ VP9_FILTER8(p3_h, p2_h, p1_h, p0_h, q0_h, q1_h, q2_h, q3_h, p2_filt8_h, ++ p1_filt8_h, p0_filt8_h, q0_filt8_h, q1_filt8_h, q2_filt8_h); ++ ++ /* convert 16 bit output data into 8 bit */ ++ LSX_DUP4_ARG2(__lsx_vpickev_b, p2_filt8_h, p2_filt8_l, p1_filt8_h, ++ p1_filt8_l, p0_filt8_h, p0_filt8_l, q0_filt8_h, ++ q0_filt8_l, p2_filt8_l, p1_filt8_l, p0_filt8_l, ++ q0_filt8_l); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, q1_filt8_h, q1_filt8_l, q2_filt8_h, ++ q2_filt8_l, q1_filt8_l, q2_filt8_l); ++ ++ /* store pixel values */ ++ p2_out = __lsx_vbitsel_v(p2, p2_filt8_l, flat); ++ p1_out = __lsx_vbitsel_v(p1_out, p1_filt8_l, flat); ++ p0_out = __lsx_vbitsel_v(p0_out, p0_filt8_l, flat); ++ q0_out = __lsx_vbitsel_v(q0_out, q0_filt8_l, flat); ++ q1_out = __lsx_vbitsel_v(q1_out, q1_filt8_l, flat); ++ q2_out = __lsx_vbitsel_v(q2, q2_filt8_l, flat); ++ ++ ++ __lsx_vst(p2_out, dst - stride3, 0); ++ __lsx_vst(p1_out, dst - stride2, 0); ++ __lsx_vst(p0_out, dst - stride, 0); ++ __lsx_vst(q0_out, dst, 0); ++ __lsx_vst(q1_out, dst + stride, 0); ++ __lsx_vst(q2_out, dst + stride2, 0); ++ } ++} ++ ++void ff_loop_filter_v_84_16_lsx(uint8_t *dst, ptrdiff_t stride, ++ int32_t b_limit_ptr, ++ int32_t limit_ptr, ++ int32_t thresh_ptr) ++{ ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ ptrdiff_t stride4 = stride2 << 1; ++ __m128i p3, p2, p1, p0, q3, q2, q1, q0; ++ __m128i p2_out, p1_out, p0_out, q0_out, q1_out, q2_out; ++ __m128i flat, mask, hev, tmp, thresh, b_limit, limit; ++ __m128i p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l; ++ __m128i p2_filt8_l, p1_filt8_l, p0_filt8_l; ++ __m128i q0_filt8_l, q1_filt8_l, q2_filt8_l; ++ __m128i zero = __lsx_vldi(0); ++ ++ /* load vector elements */ ++ LSX_DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, ++ dst - stride, 0, p3, p2, p1, p0); ++ LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, ++ dst + stride3, 0, q0, q1, q2, q3); ++ ++ thresh = __lsx_vreplgr2vr_b(thresh_ptr); ++ tmp = __lsx_vreplgr2vr_b(thresh_ptr >> 8); ++ thresh = __lsx_vilvl_d(tmp, thresh); ++ ++ b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); ++ tmp = __lsx_vreplgr2vr_b(b_limit_ptr >> 8); ++ b_limit = __lsx_vilvl_d(tmp, b_limit); ++ ++ limit = __lsx_vreplgr2vr_b(limit_ptr); ++ tmp = __lsx_vreplgr2vr_b(limit_ptr >> 8); ++ limit = __lsx_vilvl_d(tmp, limit); ++ ++ /* mask and hev */ ++ LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, ++ hev, mask, flat); ++ VP9_FLAT4(p3, p2, p0, q0, q2, q3, flat); ++ VP9_LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev, p1_out, p0_out, q0_out, ++ q1_out); ++ ++ flat = __lsx_vilvl_d(zero, flat); ++ ++ /* if flat is zero for all pixels, then no need to calculate other filter */ ++ if (__lsx_bz_v(flat)) { ++ __lsx_vst(p1_out, dst - stride2, 0); ++ __lsx_vst(p0_out, dst - stride, 0); ++ __lsx_vst(q0_out, dst, 0); ++ __lsx_vst(q1_out, dst + stride, 0); ++ } else { ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_l, p2_l, p1_l, p0_l); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_l, q1_l, q2_l, q3_l); ++ VP9_FILTER8(p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l, p2_filt8_l, ++ p1_filt8_l, p0_filt8_l, q0_filt8_l, q1_filt8_l, q2_filt8_l); ++ ++ /* convert 16 bit output data into 8 bit */ ++ LSX_DUP4_ARG2(__lsx_vpickev_b, p2_filt8_l, p2_filt8_l, p1_filt8_l, ++ p1_filt8_l, p0_filt8_l, p0_filt8_l, q0_filt8_l, ++ q0_filt8_l, p2_filt8_l, p1_filt8_l, p0_filt8_l, ++ q0_filt8_l); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, q1_filt8_l, q1_filt8_l, q2_filt8_l, ++ q2_filt8_l, q1_filt8_l, q2_filt8_l); ++ ++ /* store pixel values */ ++ p2_out = __lsx_vbitsel_v(p2, p2_filt8_l, flat); ++ p1_out = __lsx_vbitsel_v(p1_out, p1_filt8_l, flat); ++ p0_out = __lsx_vbitsel_v(p0_out, p0_filt8_l, flat); ++ q0_out = __lsx_vbitsel_v(q0_out, q0_filt8_l, flat); ++ q1_out = __lsx_vbitsel_v(q1_out, q1_filt8_l, flat); ++ q2_out = __lsx_vbitsel_v(q2, q2_filt8_l, flat); ++ ++ __lsx_vst(p2_out, dst - stride3, 0); ++ __lsx_vst(p1_out, dst - stride2, 0); ++ __lsx_vst(p0_out, dst - stride, 0); ++ __lsx_vst(q0_out, dst, 0); ++ __lsx_vst(q1_out, dst + stride, 0); ++ __lsx_vst(q2_out, dst + stride2, 0); ++ } ++} ++ ++void ff_loop_filter_v_48_16_lsx(uint8_t *dst, ptrdiff_t stride, ++ int32_t b_limit_ptr, ++ int32_t limit_ptr, ++ int32_t thresh_ptr) ++{ ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ ptrdiff_t stride4 = stride2 << 1; ++ __m128i p3, p2, p1, p0, q3, q2, q1, q0; ++ __m128i p2_out, p1_out, p0_out, q0_out, q1_out, q2_out; ++ __m128i flat, mask, hev, tmp, thresh, b_limit, limit; ++ __m128i p3_h, p2_h, p1_h, p0_h, q0_h, q1_h, q2_h, q3_h; ++ __m128i p2_filt8_h, p1_filt8_h, p0_filt8_h; ++ __m128i q0_filt8_h, q1_filt8_h, q2_filt8_h; ++ __m128i zero = { 0 }; ++ ++ /* load vector elements */ ++ LSX_DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, ++ dst - stride, 0, p3, p2, p1, p0); ++ LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, ++ dst + stride3, 0, q0, q1, q2, q3); ++ ++ thresh = __lsx_vreplgr2vr_b(thresh_ptr); ++ tmp = __lsx_vreplgr2vr_b(thresh_ptr >> 8); ++ thresh = __lsx_vilvl_d(tmp, thresh); ++ ++ b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); ++ tmp = __lsx_vreplgr2vr_b(b_limit_ptr >> 8); ++ b_limit = __lsx_vilvl_d(tmp, b_limit); ++ ++ limit = __lsx_vreplgr2vr_b(limit_ptr); ++ tmp = __lsx_vreplgr2vr_b(limit_ptr >> 8); ++ limit = __lsx_vilvl_d(tmp, limit); ++ ++ /* mask and hev */ ++ LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, ++ hev, mask, flat); ++ VP9_FLAT4(p3, p2, p0, q0, q2, q3, flat); ++ VP9_LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev, p1_out, p0_out, q0_out, ++ q1_out); ++ ++ flat = __lsx_vilvh_d(flat, zero); ++ ++ /* if flat is zero for all pixels, then no need to calculate other filter */ ++ if (__lsx_bz_v(flat)) { ++ __lsx_vst(p1_out, dst - stride2, 0); ++ __lsx_vst(p0_out, dst - stride, 0); ++ __lsx_vst(q0_out, dst, 0); ++ __lsx_vst(q1_out, dst + stride, 0); ++ } else { ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_h, p2_h, p1_h, p0_h); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_h, q1_h, q2_h, q3_h); ++ VP9_FILTER8(p3_h, p2_h, p1_h, p0_h, q0_h, q1_h, q2_h, q3_h, p2_filt8_h, ++ p1_filt8_h, p0_filt8_h, q0_filt8_h, q1_filt8_h, q2_filt8_h); ++ ++ /* convert 16 bit output data into 8 bit */ ++ LSX_DUP4_ARG2(__lsx_vpickev_b, p2_filt8_h, p2_filt8_h, p1_filt8_h, ++ p1_filt8_h, p0_filt8_h, p0_filt8_h, q0_filt8_h, ++ q0_filt8_h, p2_filt8_h, p1_filt8_h, p0_filt8_h, ++ q0_filt8_h); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, q1_filt8_h, q1_filt8_h, q2_filt8_h, ++ q2_filt8_h, q1_filt8_h, q2_filt8_h); ++ ++ /* store pixel values */ ++ p2_out = __lsx_vbitsel_v(p2, p2_filt8_h, flat); ++ p1_out = __lsx_vbitsel_v(p1_out, p1_filt8_h, flat); ++ p0_out = __lsx_vbitsel_v(p0_out, p0_filt8_h, flat); ++ q0_out = __lsx_vbitsel_v(q0_out, q0_filt8_h, flat); ++ q1_out = __lsx_vbitsel_v(q1_out, q1_filt8_h, flat); ++ q2_out = __lsx_vbitsel_v(q2, q2_filt8_h, flat); ++ ++ __lsx_vst(p2_out, dst - stride3, 0); ++ __lsx_vst(p1_out, dst - stride2, 0); ++ __lsx_vst(p0_out, dst - stride, 0); ++ __lsx_vst(q0_out, dst, 0); ++ __lsx_vst(q1_out, dst + stride, 0); ++ __lsx_vst(q2_out, dst + stride2, 0); ++ } ++} ++ ++static int32_t vp9_hz_lpf_t4_and_t8_16w(uint8_t *dst, ptrdiff_t stride, ++ uint8_t *filter48, ++ int32_t b_limit_ptr, ++ int32_t limit_ptr, ++ int32_t thresh_ptr) ++{ ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ ptrdiff_t stride4 = stride2 << 1; ++ __m128i p3, p2, p1, p0, q3, q2, q1, q0; ++ __m128i p2_out, p1_out, p0_out, q0_out, q1_out, q2_out; ++ __m128i flat, mask, hev, thresh, b_limit, limit; ++ __m128i p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l; ++ __m128i p3_h, p2_h, p1_h, p0_h, q0_h, q1_h, q2_h, q3_h; ++ __m128i p2_filt8_l, p1_filt8_l, p0_filt8_l; ++ __m128i q0_filt8_l, q1_filt8_l, q2_filt8_l; ++ __m128i p2_filt8_h, p1_filt8_h, p0_filt8_h; ++ __m128i q0_filt8_h, q1_filt8_h, q2_filt8_h; ++ __m128i zero = __lsx_vldi(0); ++ ++ /* load vector elements */ ++ LSX_DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, ++ dst - stride, 0, p3, p2, p1, p0); ++ LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, ++ dst + stride3, 0, q0, q1, q2, q3); ++ ++ thresh = __lsx_vreplgr2vr_b(thresh_ptr); ++ b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); ++ limit = __lsx_vreplgr2vr_b(limit_ptr); ++ ++ /* mask and hev */ ++ LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, ++ hev, mask, flat); ++ VP9_FLAT4(p3, p2, p0, q0, q2, q3, flat); ++ VP9_LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev, p1_out, p0_out, q0_out, ++ q1_out); ++ ++ /* if flat is zero for all pixels, then no need to calculate other filter */ ++ if (__lsx_bz_v(flat)) { ++ __lsx_vst(p1_out, dst - stride2, 0); ++ __lsx_vst(p0_out, dst - stride, 0); ++ __lsx_vst(q0_out, dst, 0); ++ __lsx_vst(q1_out, dst + stride, 0); ++ return 1; ++ } else { ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_l, p2_l, p1_l, p0_l); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_l, q1_l, q2_l, q3_l); ++ VP9_FILTER8(p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l, p2_filt8_l, ++ p1_filt8_l, p0_filt8_l, q0_filt8_l, q1_filt8_l, q2_filt8_l); ++ ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_h, p2_h, p1_h, p0_h); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_h, q1_h, q2_h, q3_h); ++ VP9_FILTER8(p3_h, p2_h, p1_h, p0_h, q0_h, q1_h, q2_h, q3_h, p2_filt8_h, ++ p1_filt8_h, p0_filt8_h, q0_filt8_h, q1_filt8_h, q2_filt8_h); ++ ++ /* convert 16 bit output data into 8 bit */ ++ LSX_DUP4_ARG2(__lsx_vpickev_b, p2_filt8_h, p2_filt8_l, p1_filt8_h, ++ p1_filt8_l, p0_filt8_h, p0_filt8_l, q0_filt8_h, ++ q0_filt8_l, p2_filt8_l, p1_filt8_l, p0_filt8_l, ++ q0_filt8_l); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, q1_filt8_h, q1_filt8_l, q2_filt8_h, ++ q2_filt8_l, q1_filt8_l, q2_filt8_l); ++ ++ /* store pixel values */ ++ p2_out = __lsx_vbitsel_v(p2, p2_filt8_l, flat); ++ p1_out = __lsx_vbitsel_v(p1_out, p1_filt8_l, flat); ++ p0_out = __lsx_vbitsel_v(p0_out, p0_filt8_l, flat); ++ q0_out = __lsx_vbitsel_v(q0_out, q0_filt8_l, flat); ++ q1_out = __lsx_vbitsel_v(q1_out, q1_filt8_l, flat); ++ q2_out = __lsx_vbitsel_v(q2, q2_filt8_l, flat); ++ ++ __lsx_vst(p2_out, filter48, 0); ++ __lsx_vst(p1_out, filter48, 16); ++ __lsx_vst(p0_out, filter48, 32); ++ __lsx_vst(q0_out, filter48, 48); ++ __lsx_vst(q1_out, filter48, 64); ++ __lsx_vst(q2_out, filter48, 80); ++ __lsx_vst(flat, filter48, 96); ++ ++ return 0; ++ } ++} ++ ++static void vp9_hz_lpf_t16_16w(uint8_t *dst, ptrdiff_t stride, uint8_t *filter48) ++{ ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ ptrdiff_t stride4 = stride2 << 1; ++ uint8_t *dst_tmp = dst - stride4; ++ uint8_t *dst_tmp1 = dst + stride4; ++ __m128i p7, p6, p5, p4, p3, p2, p1, p0, q0, q1, q2, q3, q4, q5, q6, q7; ++ __m128i flat, flat2, filter8; ++ __m128i zero = __lsx_vldi(0); ++ __m128i out_h, out_l; ++ v8u16 p7_l_in, p6_l_in, p5_l_in, p4_l_in; ++ v8u16 p3_l_in, p2_l_in, p1_l_in, p0_l_in; ++ v8u16 q7_l_in, q6_l_in, q5_l_in, q4_l_in; ++ v8u16 q3_l_in, q2_l_in, q1_l_in, q0_l_in; ++ v8u16 p7_h_in, p6_h_in, p5_h_in, p4_h_in; ++ v8u16 p3_h_in, p2_h_in, p1_h_in, p0_h_in; ++ v8u16 q7_h_in, q6_h_in, q5_h_in, q4_h_in; ++ v8u16 q3_h_in, q2_h_in, q1_h_in, q0_h_in; ++ v8u16 tmp0_l, tmp1_l, tmp0_h, tmp1_h; ++ ++ flat = __lsx_vld(filter48, 96); ++ ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp - stride4, 0, dst_tmp - stride3, 0, ++ dst_tmp - stride2, 0, dst_tmp - stride, 0, p7, p6, p5, p4); ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp + stride, 0, dst_tmp + stride2, 0, ++ dst_tmp + stride3, 0, p3, p2, p1, p0); ++ LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, dst + stride3, ++ 0, q0, q1, q2, q3); ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp1, 0, dst_tmp1 + stride, 0, dst_tmp1 + stride2, 0, ++ dst_tmp1 + stride3, 0, q4, q5, q6, q7); ++ VP9_FLAT5(p7, p6, p5, p4, p0, q0, q4, q5, q6, q7, flat, flat2); ++ ++ /* if flat2 is zero for all pixels, then no need to calculate other filter */ ++ if (__lsx_bz_v(flat2)) { ++ LSX_DUP4_ARG2(__lsx_vld, filter48, 0, filter48, 16, filter48, 32, filter48, ++ 48, p2, p1, p0, q0); ++ LSX_DUP2_ARG2(__lsx_vld, filter48, 64, filter48, 80, q1, q2); ++ ++ __lsx_vst(p2, dst - stride3, 0); ++ __lsx_vst(p1, dst - stride2, 0); ++ __lsx_vst(p0, dst - stride, 0); ++ __lsx_vst(q0, dst, 0); ++ __lsx_vst(q1, dst + stride, 0); ++ __lsx_vst(q2, dst + stride2, 0); ++ } else { ++ dst = dst_tmp - stride3; ++ ++ p7_l_in = (v8u16)__lsx_vilvl_b(zero, p7); ++ p6_l_in = (v8u16)__lsx_vilvl_b(zero, p6); ++ p5_l_in = (v8u16)__lsx_vilvl_b(zero, p5); ++ p4_l_in = (v8u16)__lsx_vilvl_b(zero, p4); ++ p3_l_in = (v8u16)__lsx_vilvl_b(zero, p3); ++ p2_l_in = (v8u16)__lsx_vilvl_b(zero, p2); ++ p1_l_in = (v8u16)__lsx_vilvl_b(zero, p1); ++ p0_l_in = (v8u16)__lsx_vilvl_b(zero, p0); ++ ++ q0_l_in = (v8u16)__lsx_vilvl_b(zero, q0); ++ ++ tmp0_l = p7_l_in << 3; ++ tmp0_l -= p7_l_in; ++ tmp0_l += p6_l_in; ++ tmp0_l += q0_l_in; ++ tmp1_l = p6_l_in + p5_l_in; ++ tmp1_l += p4_l_in; ++ tmp1_l += p3_l_in; ++ tmp1_l += p2_l_in; ++ tmp1_l += p1_l_in; ++ tmp1_l += p0_l_in; ++ tmp1_l += tmp0_l; ++ ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ ++ p7_h_in = (v8u16)__lsx_vilvh_b(zero, p7); ++ p6_h_in = (v8u16)__lsx_vilvh_b(zero, p6); ++ p5_h_in = (v8u16)__lsx_vilvh_b(zero, p5); ++ p4_h_in = (v8u16)__lsx_vilvh_b(zero, p4); ++ ++ p3_h_in = (v8u16)__lsx_vilvh_b(zero, p3); ++ p2_h_in = (v8u16)__lsx_vilvh_b(zero, p2); ++ p1_h_in = (v8u16)__lsx_vilvh_b(zero, p1); ++ p0_h_in = (v8u16)__lsx_vilvh_b(zero, p0); ++ q0_h_in = (v8u16)__lsx_vilvh_b(zero, q0); ++ ++ tmp0_h = p7_h_in << 3; ++ tmp0_h -= p7_h_in; ++ tmp0_h += p6_h_in; ++ tmp0_h += q0_h_in; ++ tmp1_h = p6_h_in + p5_h_in; ++ tmp1_h += p4_h_in; ++ tmp1_h += p3_h_in; ++ tmp1_h += p2_h_in; ++ tmp1_h += p1_h_in; ++ tmp1_h += p0_h_in; ++ tmp1_h += tmp0_h; ++ ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ p6 = __lsx_vbitsel_v(p6, out_l, flat2); ++ __lsx_vst(p6, dst, 0); ++ dst += stride; ++ ++ /* p5 */ ++ q1_l_in = (v8u16)__lsx_vilvl_b(zero, q1); ++ tmp0_l = p5_l_in - p6_l_in; ++ tmp0_l += q1_l_in; ++ tmp0_l -= p7_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ ++ q1_h_in = (v8u16)__lsx_vilvh_b(zero, q1); ++ tmp0_h = p5_h_in - p6_h_in; ++ tmp0_h += q1_h_in; ++ tmp0_h -= p7_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ p5 = __lsx_vbitsel_v(p5, out_l, flat2); ++ __lsx_vst(p5, dst, 0); ++ dst += stride; ++ ++ /* p4 */ ++ q2_l_in = (v8u16)__lsx_vilvl_b(zero, q2); ++ tmp0_l = p4_l_in - p5_l_in; ++ tmp0_l += q2_l_in; ++ tmp0_l -= p7_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ ++ q2_h_in = (v8u16)__lsx_vilvh_b(zero, q2); ++ tmp0_h = p4_h_in - p5_h_in; ++ tmp0_h += q2_h_in; ++ tmp0_h -= p7_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ p4 = __lsx_vbitsel_v(p4, out_l, flat2); ++ __lsx_vst(p4, dst, 0); ++ dst += stride; ++ ++ /* p3 */ ++ q3_l_in = (v8u16)__lsx_vilvl_b(zero, q3); ++ tmp0_l = p3_l_in - p4_l_in; ++ tmp0_l += q3_l_in; ++ tmp0_l -= p7_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ ++ q3_h_in = (v8u16)__lsx_vilvh_b(zero, q3); ++ tmp0_h = p3_h_in - p4_h_in; ++ tmp0_h += q3_h_in; ++ tmp0_h -= p7_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ p3 = __lsx_vbitsel_v(p3, out_l, flat2); ++ __lsx_vst(p3, dst, 0); ++ dst += stride; ++ ++ /* p2 */ ++ q4_l_in = (v8u16)__lsx_vilvl_b(zero, q4); ++ filter8 = __lsx_vld(filter48, 0); ++ tmp0_l = p2_l_in - p3_l_in; ++ tmp0_l += q4_l_in; ++ tmp0_l -= p7_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ ++ q4_h_in = (v8u16)__lsx_vilvh_b(zero, q4); ++ tmp0_h = p2_h_in - p3_h_in; ++ tmp0_h += q4_h_in; ++ tmp0_h -= p7_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ filter8 = __lsx_vbitsel_v(filter8, out_l, flat2); ++ __lsx_vst(filter8, dst, 0); ++ dst += stride; ++ ++ /* p1 */ ++ q5_l_in = (v8u16)__lsx_vilvl_b(zero, q5); ++ filter8 = __lsx_vld(filter48, 16); ++ tmp0_l = p1_l_in - p2_l_in; ++ tmp0_l += q5_l_in; ++ tmp0_l -= p7_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ ++ q5_h_in = (v8u16)__lsx_vilvh_b(zero, q5); ++ tmp0_h = p1_h_in - p2_h_in; ++ tmp0_h += q5_h_in; ++ tmp0_h -= p7_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ filter8 = __lsx_vbitsel_v(filter8, out_l, flat2); ++ __lsx_vst(filter8, dst, 0); ++ dst += stride; ++ ++ /* p0 */ ++ q6_l_in = (v8u16)__lsx_vilvl_b(zero, q6); ++ filter8 = __lsx_vld(filter48, 32); ++ tmp0_l = p0_l_in - p1_l_in; ++ tmp0_l += q6_l_in; ++ tmp0_l -= p7_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ ++ q6_h_in = (v8u16)__lsx_vilvh_b(zero, q6); ++ tmp0_h = p0_h_in - p1_h_in; ++ tmp0_h += q6_h_in; ++ tmp0_h -= p7_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ filter8 = __lsx_vbitsel_v(filter8, out_l, flat2); ++ __lsx_vst(filter8, dst, 0); ++ dst += stride; ++ ++ /* q0 */ ++ q7_l_in = (v8u16)__lsx_vilvl_b(zero, q7); ++ filter8 = __lsx_vld(filter48, 48); ++ tmp0_l = q7_l_in - p0_l_in; ++ tmp0_l += q0_l_in; ++ tmp0_l -= p7_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ ++ q7_h_in = (v8u16)__lsx_vilvh_b(zero, q7); ++ tmp0_h = q7_h_in - p0_h_in; ++ tmp0_h += q0_h_in; ++ tmp0_h -= p7_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ filter8 = __lsx_vbitsel_v(filter8, out_l, flat2); ++ __lsx_vst(filter8, dst, 0); ++ dst += stride; ++ ++ /* q1 */ ++ filter8 = __lsx_vld(filter48, 64); ++ tmp0_l = q7_l_in - q0_l_in; ++ tmp0_l += q1_l_in; ++ tmp0_l -= p6_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ ++ tmp0_h = q7_h_in - q0_h_in; ++ tmp0_h += q1_h_in; ++ tmp0_h -= p6_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ filter8 = __lsx_vbitsel_v(filter8, out_l, flat2); ++ __lsx_vst(filter8, dst, 0); ++ dst += stride; ++ ++ /* q2 */ ++ filter8 = __lsx_vld(filter48, 80); ++ tmp0_l = q7_l_in - q1_l_in; ++ tmp0_l += q2_l_in; ++ tmp0_l -= p5_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ ++ tmp0_h = q7_h_in - q1_h_in; ++ tmp0_h += q2_h_in; ++ tmp0_h -= p5_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ filter8 = __lsx_vbitsel_v(filter8, out_l, flat2); ++ __lsx_vst(filter8, dst, 0); ++ dst += stride; ++ ++ /* q3 */ ++ tmp0_l = q7_l_in - q2_l_in; ++ tmp0_l += q3_l_in; ++ tmp0_l -= p4_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ ++ tmp0_h = q7_h_in - q2_h_in; ++ tmp0_h += q3_h_in; ++ tmp0_h -= p4_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ q3 = __lsx_vbitsel_v(q3, out_l, flat2); ++ __lsx_vst(q3, dst, 0); ++ dst += stride; ++ ++ /* q4 */ ++ tmp0_l = q7_l_in - q3_l_in; ++ tmp0_l += q4_l_in; ++ tmp0_l -= p3_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ ++ tmp0_h = q7_h_in - q3_h_in; ++ tmp0_h += q4_h_in; ++ tmp0_h -= p3_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ q4 = __lsx_vbitsel_v(q4, out_l, flat2); ++ __lsx_vst(q4, dst, 0); ++ dst += stride; ++ ++ /* q5 */ ++ tmp0_l = q7_l_in - q4_l_in; ++ tmp0_l += q5_l_in; ++ tmp0_l -= p2_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ ++ tmp0_h = q7_h_in - q4_h_in; ++ tmp0_h += q5_h_in; ++ tmp0_h -= p2_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ q5 = __lsx_vbitsel_v(q5, out_l, flat2); ++ __lsx_vst(q5, dst, 0); ++ dst += stride; ++ ++ /* q6 */ ++ tmp0_l = q7_l_in - q5_l_in; ++ tmp0_l += q6_l_in; ++ tmp0_l -= p1_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ ++ tmp0_h = q7_h_in - q5_h_in; ++ tmp0_h += q6_h_in; ++ tmp0_h -= p1_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ q6 = __lsx_vbitsel_v(q6, out_l, flat2); ++ __lsx_vst(q6, dst, 0); ++ } ++} ++ ++void ff_loop_filter_v_16_16_lsx(uint8_t *dst, ptrdiff_t stride, ++ int32_t b_limit_ptr, ++ int32_t limit_ptr, ++ int32_t thresh_ptr) ++{ ++ uint8_t filter48[16 * 8] __attribute__ ((aligned(16))); ++ uint8_t early_exit = 0; ++ ++ early_exit = vp9_hz_lpf_t4_and_t8_16w(dst, stride, &filter48[0], ++ b_limit_ptr, limit_ptr, thresh_ptr); ++ ++ if (0 == early_exit) { ++ vp9_hz_lpf_t16_16w(dst, stride, filter48); ++ } ++} ++ ++void ff_loop_filter_v_16_8_lsx(uint8_t *dst, ptrdiff_t stride, ++ int32_t b_limit_ptr, ++ int32_t limit_ptr, ++ int32_t thresh_ptr) ++{ ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ ptrdiff_t stride4 = stride2 << 1; ++ uint8_t *dst_tmp = dst - stride4; ++ uint8_t *dst_tmp1 = dst + stride4; ++ __m128i zero = __lsx_vldi(0); ++ __m128i flat2, mask, hev, flat, thresh, b_limit, limit; ++ __m128i p3, p2, p1, p0, q3, q2, q1, q0, p7, p6, p5, p4, q4, q5, q6, q7; ++ __m128i p2_out, p1_out, p0_out, q0_out, q1_out, q2_out; ++ __m128i p0_filter16, p1_filter16; ++ __m128i p2_filter8, p1_filter8, p0_filter8; ++ __m128i q0_filter8, q1_filter8, q2_filter8; ++ __m128i p7_l, p6_l, p5_l, p4_l, q7_l, q6_l, q5_l, q4_l; ++ __m128i p3_l, p2_l, p1_l, p0_l, q3_l, q2_l, q1_l, q0_l; ++ __m128i tmp0, tmp1, tmp2; ++ ++ /* load vector elements */ ++ LSX_DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, ++ dst - stride, 0, p3, p2, p1, p0); ++ LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, ++ dst + stride3, 0, q0, q1, q2, q3); ++ ++ thresh = __lsx_vreplgr2vr_b(thresh_ptr); ++ b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); ++ limit = __lsx_vreplgr2vr_b(limit_ptr); ++ ++ LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, ++ hev, mask, flat); ++ VP9_FLAT4(p3, p2, p0, q0, q2, q3, flat); ++ VP9_LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev, p1_out, p0_out, q0_out, ++ q1_out); ++ ++ flat = __lsx_vilvl_d(zero, flat); ++ ++ /* if flat is zero for all pixels, then no need to calculate other filter */ ++ if (__lsx_bz_v(flat)) { ++ __lsx_vstelm_d(p1_out, dst - stride2, 0, 0); ++ __lsx_vstelm_d(p0_out, dst - stride, 0, 0); ++ __lsx_vstelm_d(q0_out, dst , 0, 0); ++ __lsx_vstelm_d(q1_out, dst + stride, 0, 0); ++ } else { ++ /* convert 8 bit input data into 16 bit */ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_l, p2_l, p1_l, p0_l); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_l, q1_l, q2_l, q3_l); ++ VP9_FILTER8(p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l, ++ p2_filter8, p1_filter8, p0_filter8, q0_filter8, ++ q1_filter8, q2_filter8); ++ ++ /* convert 16 bit output data into 8 bit */ ++ LSX_DUP4_ARG2(__lsx_vpickev_b, zero, p2_filter8, zero, p1_filter8, ++ zero, p0_filter8, zero, q0_filter8, p2_filter8, ++ p1_filter8, p0_filter8, q0_filter8); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, zero, q1_filter8, zero, q2_filter8, ++ q1_filter8, q2_filter8); ++ ++ /* store pixel values */ ++ p2_out = __lsx_vbitsel_v(p2, p2_filter8, flat); ++ p1_out = __lsx_vbitsel_v(p1_out, p1_filter8, flat); ++ p0_out = __lsx_vbitsel_v(p0_out, p0_filter8, flat); ++ q0_out = __lsx_vbitsel_v(q0_out, q0_filter8, flat); ++ q1_out = __lsx_vbitsel_v(q1_out, q1_filter8, flat); ++ q2_out = __lsx_vbitsel_v(q2, q2_filter8, flat); ++ ++ /* load 16 vector elements */ ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp - stride4, 0, dst_tmp - stride3, 0, ++ dst_tmp - stride2, 0, dst_tmp - stride, 0, p7, p6, p5, p4); ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp1, 0, dst_tmp1 + stride, 0, dst_tmp1 + stride2, ++ 0, dst_tmp1 + stride3, 0, q4, q5, q6, q7); ++ ++ VP9_FLAT5(p7, p6, p5, p4, p0, q0, q4, q5, q6, q7, flat, flat2); ++ ++ /* if flat2 is zero for all pixels, then no need to calculate other filter */ ++ if (__lsx_bz_v(flat2)) { ++ dst -= stride3; ++ __lsx_vstelm_d(p2_out, dst, 0, 0); ++ dst += stride; ++ __lsx_vstelm_d(p1_out, dst, 0, 0); ++ dst += stride; ++ __lsx_vstelm_d(p0_out, dst, 0, 0); ++ dst += stride; ++ __lsx_vstelm_d(q0_out, dst, 0, 0); ++ dst += stride; ++ __lsx_vstelm_d(q1_out, dst, 0, 0); ++ dst += stride; ++ __lsx_vstelm_d(q2_out, dst, 0, 0); ++ } else { ++ /* LSB(right) 8 pixel operation */ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p7, zero, p6, zero, p5, zero, p4, ++ p7_l, p6_l, p5_l, p4_l); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q4, zero, q5, zero, q6, zero, q7, ++ q4_l, q5_l, q6_l, q7_l); ++ ++ tmp0 = __lsx_vslli_h(p7_l, 3); ++ tmp0 = __lsx_vsub_h(tmp0, p7_l); ++ tmp0 = __lsx_vadd_h(tmp0, p6_l); ++ tmp0 = __lsx_vadd_h(tmp0, q0_l); ++ ++ dst = dst_tmp - stride3; ++ ++ /* calculation of p6 and p5 */ ++ tmp1 = __lsx_vadd_h(p6_l, p5_l); ++ tmp1 = __lsx_vadd_h(tmp1, p4_l); ++ tmp1 = __lsx_vadd_h(tmp1, p3_l); ++ tmp1 = __lsx_vadd_h(tmp1, p2_l); ++ tmp1 = __lsx_vadd_h(tmp1, p1_l); ++ tmp1 = __lsx_vadd_h(tmp1, p0_l); ++ tmp1 = __lsx_vadd_h(tmp1, tmp0); ++ ++ p0_filter16 = __lsx_vsrari_h(tmp1, 4); ++ tmp0 = __lsx_vsub_h(p5_l, p6_l); ++ tmp0 = __lsx_vadd_h(tmp0, q1_l); ++ tmp0 = __lsx_vsub_h(tmp0, p7_l); ++ tmp1 = __lsx_vadd_h(tmp1, tmp0); ++ ++ p1_filter16 = __lsx_vsrari_h(tmp1, 4); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, zero, p0_filter16, zero, ++ p1_filter16, p0_filter16, p1_filter16); ++ p0_filter16 = __lsx_vbitsel_v(p6, p0_filter16, flat2); ++ p1_filter16 = __lsx_vbitsel_v(p5, p1_filter16, flat2); ++ __lsx_vstelm_d(p0_filter16, dst, 0, 0); ++ dst += stride; ++ __lsx_vstelm_d(p1_filter16, dst, 0, 0); ++ dst += stride; ++ ++ /* calculation of p4 and p3 */ ++ tmp0 = __lsx_vsub_h(p4_l, p5_l); ++ tmp0 = __lsx_vadd_h(tmp0, q2_l); ++ tmp0 = __lsx_vsub_h(tmp0, p7_l); ++ tmp2 = __lsx_vsub_h(p3_l, p4_l); ++ tmp2 = __lsx_vadd_h(tmp2, q3_l); ++ tmp2 = __lsx_vsub_h(tmp2, p7_l); ++ tmp1 = __lsx_vadd_h(tmp1, tmp0); ++ p0_filter16 = __lsx_vsrari_h(tmp1, 4); ++ tmp1 = __lsx_vadd_h(tmp1, tmp2); ++ p1_filter16 = __lsx_vsrari_h(tmp1, 4); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, zero, p0_filter16, zero, ++ p1_filter16, p0_filter16, p1_filter16); ++ p0_filter16 = __lsx_vbitsel_v(p4, p0_filter16, flat2); ++ p1_filter16 = __lsx_vbitsel_v(p3, p1_filter16, flat2); ++ __lsx_vstelm_d(p0_filter16, dst, 0, 0); ++ dst += stride; ++ __lsx_vstelm_d(p1_filter16, dst, 0, 0); ++ dst += stride; ++ ++ /* calculation of p2 and p1 */ ++ tmp0 = __lsx_vsub_h(p2_l, p3_l); ++ tmp0 = __lsx_vadd_h(tmp0, q4_l); ++ tmp0 = __lsx_vsub_h(tmp0, p7_l); ++ tmp2 = __lsx_vsub_h(p1_l, p2_l); ++ tmp2 = __lsx_vadd_h(tmp2, q5_l); ++ tmp2 = __lsx_vsub_h(tmp2, p7_l); ++ tmp1 = __lsx_vadd_h(tmp1, tmp0); ++ p0_filter16 = __lsx_vsrari_h(tmp1, 4); ++ tmp1 = __lsx_vadd_h(tmp1, tmp2); ++ p1_filter16 = __lsx_vsrari_h(tmp1, 4); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, zero, p0_filter16, zero, ++ p1_filter16, p0_filter16, p1_filter16); ++ p0_filter16 = __lsx_vbitsel_v(p2_out, p0_filter16, flat2); ++ p1_filter16 = __lsx_vbitsel_v(p1_out, p1_filter16, flat2); ++ __lsx_vstelm_d(p0_filter16, dst, 0, 0); ++ dst += stride; ++ __lsx_vstelm_d(p1_filter16, dst, 0, 0); ++ dst += stride; ++ ++ /* calculation of p0 and q0 */ ++ tmp0 = __lsx_vsub_h(p0_l, p1_l); ++ tmp0 = __lsx_vadd_h(tmp0, q6_l); ++ tmp0 = __lsx_vsub_h(tmp0, p7_l); ++ tmp2 = __lsx_vsub_h(q7_l, p0_l); ++ tmp2 = __lsx_vadd_h(tmp2, q0_l); ++ tmp2 = __lsx_vsub_h(tmp2, p7_l); ++ tmp1 = __lsx_vadd_h(tmp1, tmp0); ++ p0_filter16 = __lsx_vsrari_h((__m128i)tmp1, 4); ++ tmp1 = __lsx_vadd_h(tmp1, tmp2); ++ p1_filter16 = __lsx_vsrari_h((__m128i)tmp1, 4); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, zero, p0_filter16, zero, ++ p1_filter16, p0_filter16, p1_filter16); ++ p0_filter16 = __lsx_vbitsel_v(p0_out, p0_filter16, flat2); ++ p1_filter16 = __lsx_vbitsel_v(q0_out, p1_filter16, flat2); ++ __lsx_vstelm_d(p0_filter16, dst, 0, 0); ++ dst += stride; ++ __lsx_vstelm_d(p1_filter16, dst, 0, 0); ++ dst += stride; ++ ++ /* calculation of q1 and q2 */ ++ tmp0 = __lsx_vsub_h(q7_l, q0_l); ++ tmp0 = __lsx_vadd_h(tmp0, q1_l); ++ tmp0 = __lsx_vsub_h(tmp0, p6_l); ++ tmp2 = __lsx_vsub_h(q7_l, q1_l); ++ tmp2 = __lsx_vadd_h(tmp2, q2_l); ++ tmp2 = __lsx_vsub_h(tmp2, p5_l); ++ tmp1 = __lsx_vadd_h(tmp1, tmp0); ++ p0_filter16 = __lsx_vsrari_h(tmp1, 4); ++ tmp1 = __lsx_vadd_h(tmp1, tmp2); ++ p1_filter16 = __lsx_vsrari_h(tmp1, 4); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, zero, p0_filter16, zero, ++ p1_filter16, p0_filter16, p1_filter16); ++ p0_filter16 = __lsx_vbitsel_v(q1_out, p0_filter16, flat2); ++ p1_filter16 = __lsx_vbitsel_v(q2_out, p1_filter16, flat2); ++ __lsx_vstelm_d(p0_filter16, dst, 0, 0); ++ dst += stride; ++ __lsx_vstelm_d(p1_filter16, dst, 0, 0); ++ dst += stride; ++ ++ /* calculation of q3 and q4 */ ++ tmp0 = __lsx_vsub_h(q7_l, q2_l); ++ tmp0 = __lsx_vadd_h(tmp0, q3_l); ++ tmp0 = __lsx_vsub_h(tmp0, p4_l); ++ tmp2 = __lsx_vsub_h(q7_l, q3_l); ++ tmp2 = __lsx_vadd_h(tmp2, q4_l); ++ tmp2 = __lsx_vsub_h(tmp2, p3_l); ++ tmp1 = __lsx_vadd_h(tmp1, tmp0); ++ p0_filter16 = __lsx_vsrari_h(tmp1, 4); ++ tmp1 = __lsx_vadd_h(tmp1, tmp2); ++ p1_filter16 = __lsx_vsrari_h(tmp1, 4); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, zero, p0_filter16, zero, ++ p1_filter16, p0_filter16, p1_filter16); ++ p0_filter16 = __lsx_vbitsel_v(q3, p0_filter16, flat2); ++ p1_filter16 = __lsx_vbitsel_v(q4, p1_filter16, flat2); ++ __lsx_vstelm_d(p0_filter16, dst, 0, 0); ++ dst += stride; ++ __lsx_vstelm_d(p1_filter16, dst, 0, 0); ++ dst += stride; ++ ++ /* calculation of q5 and q6 */ ++ tmp0 = __lsx_vsub_h(q7_l, q4_l); ++ tmp0 = __lsx_vadd_h(tmp0, q5_l); ++ tmp0 = __lsx_vsub_h(tmp0, p2_l); ++ tmp2 = __lsx_vsub_h(q7_l, q5_l); ++ tmp2 = __lsx_vadd_h(tmp2, q6_l); ++ tmp2 = __lsx_vsub_h(tmp2, p1_l); ++ tmp1 = __lsx_vadd_h(tmp1, tmp0); ++ p0_filter16 = __lsx_vsrari_h(tmp1, 4); ++ tmp1 = __lsx_vadd_h(tmp1, tmp2); ++ p1_filter16 = __lsx_vsrari_h(tmp1, 4); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, zero, p0_filter16, zero, ++ p1_filter16, p0_filter16, p1_filter16); ++ p0_filter16 = __lsx_vbitsel_v(q5, p0_filter16, flat2); ++ p1_filter16 = __lsx_vbitsel_v(q6, p1_filter16, flat2); ++ __lsx_vstelm_d(p0_filter16, dst, 0, 0); ++ dst += stride; ++ __lsx_vstelm_d(p1_filter16, dst, 0, 0); ++ } ++ } ++} ++ ++void ff_loop_filter_h_4_8_lsx(uint8_t *dst, ptrdiff_t stride, ++ int32_t b_limit_ptr, ++ int32_t limit_ptr, ++ int32_t thresh_ptr) ++{ ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ ptrdiff_t stride4 = stride2 << 1; ++ uint8_t *dst_tmp = dst + stride4; ++ __m128i mask, hev, flat, limit, thresh, b_limit; ++ __m128i p3, p2, p1, p0, q3, q2, q1, q0; ++ __m128i vec0, vec1, vec2, vec3; ++ ++ LSX_DUP4_ARG2(__lsx_vld, dst, -4, dst + stride, -4, dst + stride2, -4, ++ dst + stride3, -4, p3, p2, p1, p0); ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, q0, q1, q2, q3); ++ ++ thresh = __lsx_vreplgr2vr_b(thresh_ptr); ++ b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); ++ limit = __lsx_vreplgr2vr_b(limit_ptr); ++ ++ LSX_TRANSPOSE8x8_B(p3, p2, p1, p0, q0, q1, q2, q3, ++ p3, p2, p1, p0, q0, q1, q2, q3); ++ LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, ++ hev, mask, flat); ++ VP9_LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev, p1, p0, q0, q1); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, p0, p1, q1, q0, vec0, vec1); ++ vec2 = __lsx_vilvl_h(vec1, vec0); ++ vec3 = __lsx_vilvh_h(vec1, vec0); ++ ++ dst -= 2; ++ __lsx_vstelm_w(vec2, dst, 0, 0); ++ __lsx_vstelm_w(vec2, dst + stride, 0, 1); ++ __lsx_vstelm_w(vec2, dst + stride2, 0, 2); ++ __lsx_vstelm_w(vec2, dst + stride3, 0, 3); ++ dst += stride4; ++ __lsx_vstelm_w(vec3, dst, 0, 0); ++ __lsx_vstelm_w(vec3, dst + stride, 0, 1); ++ __lsx_vstelm_w(vec3, dst + stride2, 0, 2); ++ __lsx_vstelm_w(vec3, dst + stride3, 0, 3); ++} ++ ++void ff_loop_filter_h_44_16_lsx(uint8_t *dst, ptrdiff_t stride, ++ int32_t b_limit_ptr, ++ int32_t limit_ptr, ++ int32_t thresh_ptr) ++{ ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ ptrdiff_t stride4 = stride2 << 1; ++ uint8_t *dst_tmp = dst; ++ __m128i mask, hev, flat; ++ __m128i thresh0, b_limit0, limit0, thresh1, b_limit1, limit1; ++ __m128i p3, p2, p1, p0, q3, q2, q1, q0; ++ __m128i row0, row1, row2, row3, row4, row5, row6, row7; ++ __m128i row8, row9, row10, row11, row12, row13, row14, row15; ++ __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; ++ ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, row0, row1, row2, row3); ++ dst_tmp += stride4; ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, row4, row5, row6, row7); ++ dst_tmp += stride4; ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, row8, row9, row10, row11); ++ dst_tmp += stride4; ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, row12, row13, row14, row15); ++ ++ LSX_TRANSPOSE16x8_B(row0, row1, row2, row3, row4, row5, row6, row7, ++ row8, row9, row10, row11, row12, row13, row14, row15, ++ p3, p2, p1, p0, q0, q1, q2, q3); ++ ++ thresh0 = __lsx_vreplgr2vr_b(thresh_ptr); ++ thresh1 = __lsx_vreplgr2vr_b(thresh_ptr >> 8); ++ thresh0 = __lsx_vilvl_d(thresh1, thresh0); ++ ++ b_limit0 = __lsx_vreplgr2vr_b(b_limit_ptr); ++ b_limit1 = __lsx_vreplgr2vr_b(b_limit_ptr >> 8); ++ b_limit0 = __lsx_vilvl_d(b_limit1, b_limit0); ++ ++ limit0 = __lsx_vreplgr2vr_b(limit_ptr); ++ limit1 = __lsx_vreplgr2vr_b(limit_ptr >> 8); ++ limit0 = __lsx_vilvl_d(limit1, limit0); ++ ++ LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit0, b_limit0, thresh0, ++ hev, mask, flat); ++ VP9_LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev, p1, p0, q0, q1); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, p0, p1, q1, q0, tmp0, tmp1); ++ tmp2 = __lsx_vilvl_h(tmp1, tmp0); ++ tmp3 = __lsx_vilvh_h(tmp1, tmp0); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, p0, p1, q1, q0, tmp0, tmp1); ++ tmp4 = __lsx_vilvl_h(tmp1, tmp0); ++ tmp5 = __lsx_vilvh_h(tmp1, tmp0); ++ ++ dst -= 2; ++ __lsx_vstelm_w(tmp2, dst, 0, 0); ++ __lsx_vstelm_w(tmp2, dst + stride, 0, 1); ++ __lsx_vstelm_w(tmp2, dst + stride2, 0, 2); ++ __lsx_vstelm_w(tmp2, dst + stride3, 0, 3); ++ dst += stride4; ++ __lsx_vstelm_w(tmp3, dst, 0, 0); ++ __lsx_vstelm_w(tmp3, dst + stride, 0, 1); ++ __lsx_vstelm_w(tmp3, dst + stride2, 0, 2); ++ __lsx_vstelm_w(tmp3, dst + stride3, 0, 3); ++ dst += stride4; ++ __lsx_vstelm_w(tmp4, dst, 0, 0); ++ __lsx_vstelm_w(tmp4, dst + stride, 0, 1); ++ __lsx_vstelm_w(tmp4, dst + stride2, 0, 2); ++ __lsx_vstelm_w(tmp4, dst + stride3, 0, 3); ++ dst += stride4; ++ __lsx_vstelm_w(tmp5, dst, 0, 0); ++ __lsx_vstelm_w(tmp5, dst + stride, 0, 1); ++ __lsx_vstelm_w(tmp5, dst + stride2, 0, 2); ++ __lsx_vstelm_w(tmp5, dst + stride3, 0, 3); ++} ++ ++void ff_loop_filter_h_8_8_lsx(uint8_t *dst, ptrdiff_t stride, ++ int32_t b_limit_ptr, ++ int32_t limit_ptr, ++ int32_t thresh_ptr) ++{ ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ ptrdiff_t stride4 = stride2 << 1; ++ uint8_t *dst_tmp = dst; ++ __m128i p3, p2, p1, p0, q3, q2, q1, q0; ++ __m128i p1_out, p0_out, q0_out, q1_out; ++ __m128i flat, mask, hev, thresh, b_limit, limit; ++ __m128i p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l; ++ __m128i p2_filt8_l, p1_filt8_l, p0_filt8_l; ++ __m128i q0_filt8_l, q1_filt8_l, q2_filt8_l; ++ __m128i vec0, vec1, vec2, vec3, vec4; ++ __m128i zero = __lsx_vldi(0); ++ ++ /* load vector elements */ ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, p3, p2, p1, p0); ++ dst_tmp += stride4; ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, q0, q1, q2, q3); ++ ++ LSX_TRANSPOSE8x8_B(p3, p2, p1, p0, q0, q1, q2, q3, ++ p3, p2, p1, p0, q0, q1, q2, q3); ++ ++ thresh = __lsx_vreplgr2vr_b(thresh_ptr); ++ b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); ++ limit = __lsx_vreplgr2vr_b(limit_ptr); ++ ++ /* mask and hev */ ++ LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, ++ hev, mask, flat); ++ /* flat4 */ ++ VP9_FLAT4(p3, p2, p0, q0, q2, q3, flat); ++ /* filter4 */ ++ VP9_LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev, p1_out, p0_out, q0_out, ++ q1_out); ++ ++ flat = __lsx_vilvl_d(zero, flat); ++ ++ /* if flat is zero for all pixels, then no need to calculate other filter */ ++ if (__lsx_bz_v(flat)) { ++ /* Store 4 pixels p1-_q1 */ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); ++ vec2 = __lsx_vilvl_h(vec1, vec0); ++ vec3 = __lsx_vilvh_h(vec1, vec0); ++ ++ dst -= 2; ++ __lsx_vstelm_w(vec2, dst, 0, 0); ++ __lsx_vstelm_w(vec2, dst + stride, 0, 1); ++ __lsx_vstelm_w(vec2, dst + stride2, 0, 2); ++ __lsx_vstelm_w(vec2, dst + stride3, 0, 3); ++ dst += stride4; ++ __lsx_vstelm_w(vec3, dst, 0, 0); ++ __lsx_vstelm_w(vec3, dst + stride, 0, 1); ++ __lsx_vstelm_w(vec3, dst + stride2, 0, 2); ++ __lsx_vstelm_w(vec3, dst + stride3, 0, 3); ++ } else { ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_l, p2_l, p1_l, p0_l); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_l, q1_l, q2_l, q3_l); ++ VP9_FILTER8(p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l, p2_filt8_l, ++ p1_filt8_l, p0_filt8_l, q0_filt8_l, q1_filt8_l, q2_filt8_l); ++ /* convert 16 bit output data into 8 bit */ ++ LSX_DUP4_ARG2(__lsx_vpickev_b, p2_filt8_l, p2_filt8_l, p1_filt8_l, ++ p1_filt8_l, p0_filt8_l, p0_filt8_l, q0_filt8_l, ++ q0_filt8_l, p2_filt8_l, p1_filt8_l, p0_filt8_l, ++ q0_filt8_l); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, q1_filt8_l, q1_filt8_l, q2_filt8_l, ++ q2_filt8_l, q1_filt8_l, q2_filt8_l); ++ ++ /* store pixel values */ ++ p2 = __lsx_vbitsel_v(p2, p2_filt8_l, flat); ++ p1 = __lsx_vbitsel_v(p1_out, p1_filt8_l, flat); ++ p0 = __lsx_vbitsel_v(p0_out, p0_filt8_l, flat); ++ q0 = __lsx_vbitsel_v(q0_out, q0_filt8_l, flat); ++ q1 = __lsx_vbitsel_v(q1_out, q1_filt8_l, flat); ++ q2 = __lsx_vbitsel_v(q2, q2_filt8_l, flat); ++ ++ /* Store 6 pixels p2-_q2 */ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, p1, p2, q0, p0, vec0, vec1); ++ vec2 = __lsx_vilvl_h(vec1, vec0); ++ vec3 = __lsx_vilvh_h(vec1, vec0); ++ vec4 = __lsx_vilvl_b(q2, q1); ++ ++ dst -= 3; ++ __lsx_vstelm_w(vec2, dst, 0, 0); ++ __lsx_vstelm_h(vec4, dst, 4, 0); ++ dst += stride; ++ __lsx_vstelm_w(vec2, dst, 0, 1); ++ __lsx_vstelm_h(vec4, dst, 4, 1); ++ dst += stride; ++ __lsx_vstelm_w(vec2, dst, 0, 2); ++ __lsx_vstelm_h(vec4, dst, 4, 2); ++ dst += stride; ++ __lsx_vstelm_w(vec2, dst, 0, 3); ++ __lsx_vstelm_h(vec4, dst, 4, 3); ++ dst += stride; ++ __lsx_vstelm_w(vec3, dst, 0, 0); ++ __lsx_vstelm_h(vec4, dst, 4, 4); ++ dst += stride; ++ __lsx_vstelm_w(vec3, dst, 0, 1); ++ __lsx_vstelm_h(vec4, dst, 4, 5); ++ dst += stride; ++ __lsx_vstelm_w(vec3, dst, 0, 2); ++ __lsx_vstelm_h(vec4, dst, 4, 6); ++ dst += stride; ++ __lsx_vstelm_w(vec3, dst, 0, 3); ++ __lsx_vstelm_h(vec4, dst, 4, 7); ++ } ++} ++ ++void ff_loop_filter_h_88_16_lsx(uint8_t *dst, ptrdiff_t stride, ++ int32_t b_limit_ptr, ++ int32_t limit_ptr, ++ int32_t thresh_ptr) ++{ ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ ptrdiff_t stride4 = stride2 << 1; ++ uint8_t *dst_tmp = dst; ++ __m128i p3, p2, p1, p0, q3, q2, q1, q0; ++ __m128i p1_out, p0_out, q0_out, q1_out; ++ __m128i flat, mask, hev, thresh, b_limit, limit; ++ __m128i row4, row5, row6, row7, row12, row13, row14, row15; ++ __m128i p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l; ++ __m128i p3_h, p2_h, p1_h, p0_h, q0_h, q1_h, q2_h, q3_h; ++ __m128i p2_filt8_l, p1_filt8_l, p0_filt8_l; ++ __m128i q0_filt8_l, q1_filt8_l, q2_filt8_l; ++ __m128i p2_filt8_h, p1_filt8_h, p0_filt8_h; ++ __m128i q0_filt8_h, q1_filt8_h, q2_filt8_h; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; ++ __m128i zero = __lsx_vldi(0); ++ ++ ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, p0, p1, p2, p3); ++ dst_tmp += stride4; ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, row4, row5, row6, row7); ++ dst_tmp += stride4; ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, q3, q2, q1, q0); ++ dst_tmp += stride4; ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, row12, row13, row14, row15); ++ ++ /* transpose 16x8 matrix into 8x16 */ ++ LSX_TRANSPOSE16x8_B(p0, p1, p2, p3, row4, row5, row6, row7, ++ q3, q2, q1, q0, row12, row13, row14, row15, ++ p3, p2, p1, p0, q0, q1, q2, q3); ++ ++ thresh = __lsx_vreplgr2vr_b(thresh_ptr); ++ vec0 = __lsx_vreplgr2vr_b(thresh_ptr >> 8); ++ thresh = __lsx_vilvl_d(vec0, thresh); ++ ++ b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); ++ vec0 = __lsx_vreplgr2vr_b(b_limit_ptr >> 8); ++ b_limit = __lsx_vilvl_d(vec0, b_limit); ++ ++ limit = __lsx_vreplgr2vr_b(limit_ptr); ++ vec0 = __lsx_vreplgr2vr_b(limit_ptr >> 8); ++ limit = __lsx_vilvl_d(vec0, limit); ++ ++ /* mask and hev */ ++ LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, ++ hev, mask, flat); ++ /* flat4 */ ++ VP9_FLAT4(p3, p2, p0, q0, q2, q3, flat); ++ /* filter4 */ ++ VP9_LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev, p1_out, p0_out, q0_out, ++ q1_out); ++ ++ /* if flat is zero for all pixels, then no need to calculate other filter */ ++ if (__lsx_bz_v(flat)) { ++ LSX_DUP2_ARG2(__lsx_vilvl_b, p0_out, p1_out, q1_out, q0_out, ++ vec0, vec1); ++ vec2 = __lsx_vilvl_h(vec1, vec0); ++ vec3 = __lsx_vilvh_h(vec1, vec0); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, p0_out, p1_out, q1_out, q0_out, ++ vec0, vec1); ++ vec4 = __lsx_vilvl_h(vec1, vec0); ++ vec5 = __lsx_vilvh_h(vec1, vec0); ++ ++ dst -= 2; ++ __lsx_vstelm_w(vec2, dst, 0, 0); ++ __lsx_vstelm_w(vec2, dst + stride, 0, 1); ++ __lsx_vstelm_w(vec2, dst + stride2, 0, 2); ++ __lsx_vstelm_w(vec2, dst + stride3, 0, 3); ++ dst += stride4; ++ __lsx_vstelm_w(vec3, dst, 0, 0); ++ __lsx_vstelm_w(vec3, dst + stride, 0, 1); ++ __lsx_vstelm_w(vec3, dst + stride2, 0, 2); ++ __lsx_vstelm_w(vec3, dst + stride3, 0, 3); ++ dst += stride4; ++ __lsx_vstelm_w(vec4, dst, 0, 0); ++ __lsx_vstelm_w(vec4, dst + stride, 0, 1); ++ __lsx_vstelm_w(vec4, dst + stride2, 0, 2); ++ __lsx_vstelm_w(vec4, dst + stride3, 0, 3); ++ dst += stride4; ++ __lsx_vstelm_w(vec5, dst, 0, 0); ++ __lsx_vstelm_w(vec5, dst + stride, 0, 1); ++ __lsx_vstelm_w(vec5, dst + stride2, 0, 2); ++ __lsx_vstelm_w(vec5, dst + stride3, 0, 3); ++ } else { ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_l, p2_l, p1_l, p0_l); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_l, q1_l, q2_l, q3_l); ++ VP9_FILTER8(p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l, p2_filt8_l, ++ p1_filt8_l, p0_filt8_l, q0_filt8_l, q1_filt8_l, q2_filt8_l); ++ ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_h, p2_h, p1_h, p0_h); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_h, q1_h, q2_h, q3_h); ++ ++ /* filter8 */ ++ VP9_FILTER8(p3_h, p2_h, p1_h, p0_h, q0_h, q1_h, q2_h, q3_h, p2_filt8_h, ++ p1_filt8_h, p0_filt8_h, q0_filt8_h, q1_filt8_h, q2_filt8_h); ++ ++ /* convert 16 bit output data into 8 bit */ ++ LSX_DUP4_ARG2(__lsx_vpickev_b, p2_filt8_h, p2_filt8_l, p1_filt8_h, ++ p1_filt8_l, p0_filt8_h, p0_filt8_l, q0_filt8_h, ++ q0_filt8_l, p2_filt8_l, p1_filt8_l, p0_filt8_l, ++ q0_filt8_l); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, q1_filt8_h, q1_filt8_l, q2_filt8_h, ++ q2_filt8_l, q1_filt8_l, q2_filt8_l); ++ ++ /* store pixel values */ ++ p2 = __lsx_vbitsel_v(p2, p2_filt8_l, flat); ++ p1 = __lsx_vbitsel_v(p1_out, p1_filt8_l, flat); ++ p0 = __lsx_vbitsel_v(p0_out, p0_filt8_l, flat); ++ q0 = __lsx_vbitsel_v(q0_out, q0_filt8_l, flat); ++ q1 = __lsx_vbitsel_v(q1_out, q1_filt8_l, flat); ++ q2 = __lsx_vbitsel_v(q2, q2_filt8_l, flat); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, p1, p2, q0, p0, vec0, vec1); ++ vec3 = __lsx_vilvl_h(vec1, vec0); ++ vec4 = __lsx_vilvh_h(vec1, vec0); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, p1, p2, q0, p0, vec0, vec1); ++ vec6 = __lsx_vilvl_h(vec1, vec0); ++ vec7 = __lsx_vilvh_h(vec1, vec0); ++ vec2 = __lsx_vilvl_b(q2, q1); ++ vec5 = __lsx_vilvh_b(q2, q1); ++ ++ dst -= 3; ++ __lsx_vstelm_w(vec3, dst, 0, 0); ++ __lsx_vstelm_h(vec2, dst, 4, 0); ++ dst += stride; ++ __lsx_vstelm_w(vec3, dst, 0, 1); ++ __lsx_vstelm_h(vec2, dst, 4, 1); ++ dst += stride; ++ __lsx_vstelm_w(vec3, dst, 0, 2); ++ __lsx_vstelm_h(vec2, dst, 4, 2); ++ dst += stride; ++ __lsx_vstelm_w(vec3, dst, 0, 3); ++ __lsx_vstelm_h(vec2, dst, 4, 3); ++ dst += stride; ++ __lsx_vstelm_w(vec4, dst, 0, 0); ++ __lsx_vstelm_h(vec2, dst, 4, 4); ++ dst += stride; ++ __lsx_vstelm_w(vec4, dst, 0, 1); ++ __lsx_vstelm_h(vec2, dst, 4, 5); ++ dst += stride; ++ __lsx_vstelm_w(vec4, dst, 0, 2); ++ __lsx_vstelm_h(vec2, dst, 4, 6); ++ dst += stride; ++ __lsx_vstelm_w(vec4, dst, 0, 3); ++ __lsx_vstelm_h(vec2, dst, 4, 7); ++ dst += stride; ++ __lsx_vstelm_w(vec6, dst, 0, 0); ++ __lsx_vstelm_h(vec5, dst, 4, 0); ++ dst += stride; ++ __lsx_vstelm_w(vec6, dst, 0, 1); ++ __lsx_vstelm_h(vec5, dst, 4, 1); ++ dst += stride; ++ __lsx_vstelm_w(vec6, dst, 0, 2); ++ __lsx_vstelm_h(vec5, dst, 4, 2); ++ dst += stride; ++ __lsx_vstelm_w(vec6, dst, 0, 3); ++ __lsx_vstelm_h(vec5, dst, 4, 3); ++ dst += stride; ++ __lsx_vstelm_w(vec7, dst, 0, 0); ++ __lsx_vstelm_h(vec5, dst, 4, 4); ++ dst += stride; ++ __lsx_vstelm_w(vec7, dst, 0, 1); ++ __lsx_vstelm_h(vec5, dst, 4, 5); ++ dst += stride; ++ __lsx_vstelm_w(vec7, dst, 0, 2); ++ __lsx_vstelm_h(vec5, dst, 4, 6); ++ dst += stride; ++ __lsx_vstelm_w(vec7, dst, 0, 3); ++ __lsx_vstelm_h(vec5, dst, 4, 7); ++ } ++} ++ ++void ff_loop_filter_h_84_16_lsx(uint8_t *dst, ptrdiff_t stride, ++ int32_t b_limit_ptr, ++ int32_t limit_ptr, ++ int32_t thresh_ptr) ++{ ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ ptrdiff_t stride4 = stride2 << 1; ++ uint8_t *dst_tmp = dst; ++ __m128i p3, p2, p1, p0, q3, q2, q1, q0; ++ __m128i p1_out, p0_out, q0_out, q1_out; ++ __m128i flat, mask, hev, thresh, b_limit, limit; ++ __m128i row4, row5, row6, row7, row12, row13, row14, row15; ++ __m128i p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l; ++ __m128i p2_filt8_l, p1_filt8_l, p0_filt8_l; ++ __m128i q0_filt8_l, q1_filt8_l, q2_filt8_l; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; ++ __m128i zero = __lsx_vldi(0); ++ ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, p0, p1, p2, p3); ++ dst_tmp += stride4; ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, row4, row5, row6, row7); ++ dst_tmp += stride4; ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, q3, q2, q1, q0); ++ dst_tmp += stride4; ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, row12, row13, row14, row15); ++ ++ /* transpose 16x8 matrix into 8x16 */ ++ LSX_TRANSPOSE16x8_B(p0, p1, p2, p3, row4, row5, row6, row7, ++ q3, q2, q1, q0, row12, row13, row14, row15, ++ p3, p2, p1, p0, q0, q1, q2, q3); ++ ++ thresh = __lsx_vreplgr2vr_b(thresh_ptr); ++ vec0 = __lsx_vreplgr2vr_b(thresh_ptr >> 8); ++ thresh = __lsx_vilvl_d(vec0, thresh); ++ ++ b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); ++ vec0 = __lsx_vreplgr2vr_b(b_limit_ptr >> 8); ++ b_limit = __lsx_vilvl_d(vec0, b_limit); ++ ++ limit = __lsx_vreplgr2vr_b(limit_ptr); ++ vec0 = __lsx_vreplgr2vr_b(limit_ptr >> 8); ++ limit = __lsx_vilvl_d(vec0, limit); ++ ++ /* mask and hev */ ++ LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, ++ hev, mask, flat); ++ /* flat4 */ ++ VP9_FLAT4(p3, p2, p0, q0, q2, q3, flat); ++ /* filter4 */ ++ VP9_LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev, p1_out, p0_out, q0_out, ++ q1_out); ++ ++ flat = __lsx_vilvl_d(zero, flat); ++ ++ /* if flat is zero for all pixels, then no need to calculate other filter */ ++ if (__lsx_bz_v(flat)) { ++ LSX_DUP2_ARG2(__lsx_vilvl_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); ++ vec2 = __lsx_vilvl_h(vec1, vec0); ++ vec3 = __lsx_vilvh_h(vec1, vec0); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); ++ vec4 = __lsx_vilvl_h(vec1, vec0); ++ vec5 = __lsx_vilvh_h(vec1, vec0); ++ ++ dst -= 2; ++ __lsx_vstelm_w(vec2, dst, 0, 0); ++ __lsx_vstelm_w(vec2, dst + stride, 0, 1); ++ __lsx_vstelm_w(vec2, dst + stride2, 0, 2); ++ __lsx_vstelm_w(vec2, dst + stride3, 0, 3); ++ dst += stride4; ++ __lsx_vstelm_w(vec3, dst, 0, 0); ++ __lsx_vstelm_w(vec3, dst + stride, 0, 1); ++ __lsx_vstelm_w(vec3, dst + stride2, 0, 2); ++ __lsx_vstelm_w(vec3, dst + stride3, 0, 3); ++ dst += stride4; ++ __lsx_vstelm_w(vec4, dst, 0, 0); ++ __lsx_vstelm_w(vec4, dst + stride, 0, 1); ++ __lsx_vstelm_w(vec4, dst + stride2, 0, 2); ++ __lsx_vstelm_w(vec4, dst + stride3, 0, 3); ++ dst += stride4; ++ __lsx_vstelm_w(vec5, dst, 0, 0); ++ __lsx_vstelm_w(vec5, dst + stride, 0, 1); ++ __lsx_vstelm_w(vec5, dst + stride2, 0, 2); ++ __lsx_vstelm_w(vec5, dst + stride3, 0, 3); ++ } else { ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_l, p2_l, p1_l, p0_l); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_l, q1_l, q2_l, q3_l); ++ VP9_FILTER8(p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l, p2_filt8_l, ++ p1_filt8_l, p0_filt8_l, q0_filt8_l, q1_filt8_l, q2_filt8_l); ++ ++ /* convert 16 bit output data into 8 bit */ ++ LSX_DUP4_ARG2(__lsx_vpickev_b, p2_filt8_l, p2_filt8_l, p1_filt8_l, ++ p1_filt8_l, p0_filt8_l, p0_filt8_l, q0_filt8_l, ++ q0_filt8_l, p2_filt8_l, p1_filt8_l, p0_filt8_l, ++ q0_filt8_l); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, q1_filt8_l, q1_filt8_l, q2_filt8_l, ++ q2_filt8_l, q1_filt8_l, q2_filt8_l); ++ ++ /* store pixel values */ ++ p2 = __lsx_vbitsel_v(p2, p2_filt8_l, flat); ++ p1 = __lsx_vbitsel_v(p1_out, p1_filt8_l, flat); ++ p0 = __lsx_vbitsel_v(p0_out, p0_filt8_l, flat); ++ q0 = __lsx_vbitsel_v(q0_out, q0_filt8_l, flat); ++ q1 = __lsx_vbitsel_v(q1_out, q1_filt8_l, flat); ++ q2 = __lsx_vbitsel_v(q2, q2_filt8_l, flat); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, p1, p2, q0, p0, vec0, vec1); ++ vec3 = __lsx_vilvl_h(vec1, vec0); ++ vec4 = __lsx_vilvh_h(vec1, vec0); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, p1, p2, q0, p0, vec0, vec1); ++ vec6 = __lsx_vilvl_h(vec1, vec0); ++ vec7 = __lsx_vilvh_h(vec1, vec0); ++ vec2 = __lsx_vilvl_b(q2, q1); ++ vec5 = __lsx_vilvh_b(q2, q1); ++ ++ dst -= 3; ++ __lsx_vstelm_w(vec3, dst, 0, 0); ++ __lsx_vstelm_h(vec2, dst, 4, 0); ++ dst += stride; ++ __lsx_vstelm_w(vec3, dst, 0, 1); ++ __lsx_vstelm_h(vec2, dst, 4, 1); ++ dst += stride; ++ __lsx_vstelm_w(vec3, dst, 0, 2); ++ __lsx_vstelm_h(vec2, dst, 4, 2); ++ dst += stride; ++ __lsx_vstelm_w(vec3, dst, 0, 3); ++ __lsx_vstelm_h(vec2, dst, 4, 3); ++ dst += stride; ++ __lsx_vstelm_w(vec4, dst, 0, 0); ++ __lsx_vstelm_h(vec2, dst, 4, 4); ++ dst += stride; ++ __lsx_vstelm_w(vec4, dst, 0, 1); ++ __lsx_vstelm_h(vec2, dst, 4, 5); ++ dst += stride; ++ __lsx_vstelm_w(vec4, dst, 0, 2); ++ __lsx_vstelm_h(vec2, dst, 4, 6); ++ dst += stride; ++ __lsx_vstelm_w(vec4, dst, 0, 3); ++ __lsx_vstelm_h(vec2, dst, 4, 7); ++ dst += stride; ++ __lsx_vstelm_w(vec6, dst, 0, 0); ++ __lsx_vstelm_h(vec5, dst, 4, 0); ++ dst += stride; ++ __lsx_vstelm_w(vec6, dst, 0, 1); ++ __lsx_vstelm_h(vec5, dst, 4, 1); ++ dst += stride; ++ __lsx_vstelm_w(vec6, dst, 0, 2); ++ __lsx_vstelm_h(vec5, dst, 4, 2); ++ dst += stride; ++ __lsx_vstelm_w(vec6, dst, 0, 3); ++ __lsx_vstelm_h(vec5, dst, 4, 3); ++ dst += stride; ++ __lsx_vstelm_w(vec7, dst, 0, 0); ++ __lsx_vstelm_h(vec5, dst, 4, 4); ++ dst += stride; ++ __lsx_vstelm_w(vec7, dst, 0, 1); ++ __lsx_vstelm_h(vec5, dst, 4, 5); ++ dst += stride; ++ __lsx_vstelm_w(vec7, dst, 0, 2); ++ __lsx_vstelm_h(vec5, dst, 4, 6); ++ dst += stride; ++ __lsx_vstelm_w(vec7, dst, 0, 3); ++ __lsx_vstelm_h(vec5, dst, 4, 7); ++ } ++} ++ ++void ff_loop_filter_h_48_16_lsx(uint8_t *dst, ptrdiff_t stride, ++ int32_t b_limit_ptr, ++ int32_t limit_ptr, ++ int32_t thresh_ptr) ++{ ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ ptrdiff_t stride4 = stride2 << 1; ++ uint8_t *dst_tmp = dst; ++ __m128i p3, p2, p1, p0, q3, q2, q1, q0; ++ __m128i p1_out, p0_out, q0_out, q1_out; ++ __m128i flat, mask, hev, thresh, b_limit, limit; ++ __m128i row4, row5, row6, row7, row12, row13, row14, row15; ++ __m128i p3_h, p2_h, p1_h, p0_h, q0_h, q1_h, q2_h, q3_h; ++ __m128i p2_filt8_h, p1_filt8_h, p0_filt8_h; ++ __m128i q0_filt8_h, q1_filt8_h, q2_filt8_h; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; ++ __m128i zero = __lsx_vldi(0); ++ ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, p0, p1, p2, p3); ++ dst_tmp += stride4; ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, row4, row5, row6, row7); ++ dst_tmp += stride4; ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, q3, q2, q1, q0); ++ dst_tmp += stride4; ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, row12, row13, row14, row15); ++ ++ /* transpose 16x8 matrix into 8x16 */ ++ LSX_TRANSPOSE16x8_B(p0, p1, p2, p3, row4, row5, row6, row7, ++ q3, q2, q1, q0, row12, row13, row14, row15, ++ p3, p2, p1, p0, q0, q1, q2, q3); ++ ++ thresh = __lsx_vreplgr2vr_b(thresh_ptr); ++ vec0 = __lsx_vreplgr2vr_b(thresh_ptr >> 8); ++ thresh = __lsx_vilvl_d(vec0, thresh); ++ ++ b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); ++ vec0 = __lsx_vreplgr2vr_b(b_limit_ptr >> 8); ++ b_limit = __lsx_vilvl_d(vec0, b_limit); ++ ++ limit = __lsx_vreplgr2vr_b(limit_ptr); ++ vec0 = __lsx_vreplgr2vr_b(limit_ptr >> 8); ++ limit = __lsx_vilvl_d(vec0, limit); ++ ++ /* mask and hev */ ++ LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, ++ hev, mask, flat); ++ /* flat4 */ ++ VP9_FLAT4(p3, p2, p0, q0, q2, q3, flat); ++ /* filter4 */ ++ VP9_LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev, p1_out, p0_out, q0_out, ++ q1_out); ++ ++ flat = __lsx_vilvh_d(flat, zero); ++ ++ /* if flat is zero for all pixels, then no need to calculate other filter */ ++ if (__lsx_bz_v(flat)) { ++ LSX_DUP2_ARG2(__lsx_vilvl_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); ++ vec2 = __lsx_vilvl_h(vec1, vec0); ++ vec3 = __lsx_vilvh_h(vec1, vec0); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); ++ vec4 = __lsx_vilvl_h(vec1, vec0); ++ vec5 = __lsx_vilvh_h(vec1, vec0); ++ ++ dst -= 2; ++ __lsx_vstelm_w(vec2, dst, 0, 0); ++ __lsx_vstelm_w(vec2, dst + stride, 0, 1); ++ __lsx_vstelm_w(vec2, dst + stride2, 0, 2); ++ __lsx_vstelm_w(vec2, dst + stride3, 0, 3); ++ dst += stride4; ++ __lsx_vstelm_w(vec3, dst, 0, 0); ++ __lsx_vstelm_w(vec3, dst + stride, 0, 1); ++ __lsx_vstelm_w(vec3, dst + stride2, 0, 2); ++ __lsx_vstelm_w(vec3, dst + stride3, 0, 3); ++ dst += stride4; ++ __lsx_vstelm_w(vec4, dst, 0, 0); ++ __lsx_vstelm_w(vec4, dst + stride, 0, 1); ++ __lsx_vstelm_w(vec4, dst + stride2, 0, 2); ++ __lsx_vstelm_w(vec4, dst + stride3, 0, 3); ++ dst += stride4; ++ __lsx_vstelm_w(vec5, dst, 0, 0); ++ __lsx_vstelm_w(vec5, dst + stride, 0, 1); ++ __lsx_vstelm_w(vec5, dst + stride2, 0, 2); ++ __lsx_vstelm_w(vec5, dst + stride3, 0, 3); ++ } else { ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_h, p2_h, p1_h, p0_h); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_h, q1_h, q2_h, q3_h); ++ ++ VP9_FILTER8(p3_h, p2_h, p1_h, p0_h, q0_h, q1_h, q2_h, q3_h, p2_filt8_h, ++ p1_filt8_h, p0_filt8_h, q0_filt8_h, q1_filt8_h, q2_filt8_h); ++ ++ /* convert 16 bit output data into 8 bit */ ++ LSX_DUP4_ARG2(__lsx_vpickev_b, p2_filt8_h, p2_filt8_h, p1_filt8_h, ++ p1_filt8_h, p0_filt8_h, p0_filt8_h, q0_filt8_h, ++ q0_filt8_h, p2_filt8_h, p1_filt8_h, p0_filt8_h, ++ q0_filt8_h); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, q1_filt8_h, q1_filt8_h, q2_filt8_h, ++ q2_filt8_h, q1_filt8_h, q2_filt8_h); ++ ++ /* store pixel values */ ++ p2 = __lsx_vbitsel_v(p2, p2_filt8_h, flat); ++ p1 = __lsx_vbitsel_v(p1_out, p1_filt8_h, flat); ++ p0 = __lsx_vbitsel_v(p0_out, p0_filt8_h, flat); ++ q0 = __lsx_vbitsel_v(q0_out, q0_filt8_h, flat); ++ q1 = __lsx_vbitsel_v(q1_out, q1_filt8_h, flat); ++ q2 = __lsx_vbitsel_v(q2, q2_filt8_h, flat); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, p1, p2, q0, p0, vec0, vec1); ++ vec3 = __lsx_vilvl_h(vec1, vec0); ++ vec4 = __lsx_vilvh_h(vec1, vec0); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, p1, p2, q0, p0, vec0, vec1); ++ vec6 = __lsx_vilvl_h(vec1, vec0); ++ vec7 = __lsx_vilvh_h(vec1, vec0); ++ vec2 = __lsx_vilvl_b(q2, q1); ++ vec5 = __lsx_vilvh_b(q2, q1); ++ ++ dst -= 3; ++ __lsx_vstelm_w(vec3, dst, 0, 0); ++ __lsx_vstelm_h(vec2, dst, 4, 0); ++ dst += stride; ++ __lsx_vstelm_w(vec3, dst, 0, 1); ++ __lsx_vstelm_h(vec2, dst, 4, 1); ++ dst += stride; ++ __lsx_vstelm_w(vec3, dst, 0, 2); ++ __lsx_vstelm_h(vec2, dst, 4, 2); ++ dst += stride; ++ __lsx_vstelm_w(vec3, dst, 0, 3); ++ __lsx_vstelm_h(vec2, dst, 4, 3); ++ dst += stride; ++ __lsx_vstelm_w(vec4, dst, 0, 0); ++ __lsx_vstelm_h(vec2, dst, 4, 4); ++ dst += stride; ++ __lsx_vstelm_w(vec4, dst, 0, 1); ++ __lsx_vstelm_h(vec2, dst, 4, 5); ++ dst += stride; ++ __lsx_vstelm_w(vec4, dst, 0, 2); ++ __lsx_vstelm_h(vec2, dst, 4, 6); ++ dst += stride; ++ __lsx_vstelm_w(vec4, dst, 0, 3); ++ __lsx_vstelm_h(vec2, dst, 4, 7); ++ dst += stride; ++ __lsx_vstelm_w(vec6, dst, 0, 0); ++ __lsx_vstelm_h(vec5, dst, 4, 0); ++ dst += stride; ++ __lsx_vstelm_w(vec6, dst, 0, 1); ++ __lsx_vstelm_h(vec5, dst, 4, 1); ++ dst += stride; ++ __lsx_vstelm_w(vec6, dst, 0, 2); ++ __lsx_vstelm_h(vec5, dst, 4, 2); ++ dst += stride; ++ __lsx_vstelm_w(vec6, dst, 0, 3); ++ __lsx_vstelm_h(vec5, dst, 4, 3); ++ dst += stride; ++ __lsx_vstelm_w(vec7, dst, 0, 0); ++ __lsx_vstelm_h(vec5, dst, 4, 4); ++ dst += stride; ++ __lsx_vstelm_w(vec7, dst, 0, 1); ++ __lsx_vstelm_h(vec5, dst, 4, 5); ++ dst += stride; ++ __lsx_vstelm_w(vec7, dst, 0, 2); ++ __lsx_vstelm_h(vec5, dst, 4, 6); ++ dst += stride; ++ __lsx_vstelm_w(vec7, dst, 0, 3); ++ __lsx_vstelm_h(vec5, dst, 4, 7); ++ } ++} ++ ++static void vp9_transpose_16x8_to_8x16(uint8_t *input, int32_t in_pitch, ++ uint8_t *output, int32_t out_pitch) ++{ ++ __m128i p7_org, p6_org, p5_org, p4_org, p3_org, p2_org, p1_org, p0_org; ++ __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; ++ __m128i p7, p6, p5, p4, p3, p2, p1, p0, q0, q1, q2, q3, q4, q5, q6, q7; ++ ++ LSX_LD_8(input, in_pitch, ++ p7_org, p6_org, p5_org, p4_org, p3_org, p2_org, p1_org, p0_org); ++ /* 8x8 transpose */ ++ LSX_TRANSPOSE8x8_B(p7_org, p6_org, p5_org, p4_org, p3_org, p2_org, p1_org, ++ p0_org, p7, p6, p5, p4, p3, p2, p1, p0); ++ /* 8x8 transpose */ ++ LSX_DUP4_ARG2(__lsx_vilvh_b, p5_org, p7_org, p4_org, p6_org, p1_org, ++ p3_org, p0_org, p2_org, tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, tmp1, tmp0, tmp3, tmp2, tmp4, tmp6); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, tmp1, tmp0, tmp3, tmp2, tmp5, tmp7); ++ LSX_DUP2_ARG2(__lsx_vilvl_w, tmp6, tmp4, tmp7, tmp5, q0, q4); ++ LSX_DUP2_ARG2(__lsx_vilvh_w, tmp6, tmp4, tmp7, tmp5, q2, q6); ++ LSX_DUP4_ARG2(__lsx_vbsrl_v, q0, 8, q2, 8, q4, 8, q6, 8, q1, q3, q5, q7); ++ ++ LSX_ST_8(p7, p6, p5, p4, p3, p2, p1, p0, output, out_pitch); ++ output += out_pitch; ++ LSX_ST_8(q0, q1, q2, q3, q4, q5, q6, q7, output, out_pitch); ++} ++ ++static void vp9_transpose_8x16_to_16x8(uint8_t *input, int32_t in_pitch, ++ uint8_t *output, int32_t out_pitch) ++{ ++ __m128i p7_o, p6_o, p5_o, p4_o, p3_o, p2_o, p1_o, p0_o; ++ __m128i p7, p6, p5, p4, p3, p2, p1, p0, q0, q1, q2, q3, q4, q5, q6, q7; ++ ++ LSX_LD_8(input, in_pitch, p7, p6, p5, p4, p3, p2, p1, p0); ++ input += in_pitch; ++ LSX_LD_8(input, in_pitch, q0, q1, q2, q3, q4, q5, q6, q7); ++ LSX_TRANSPOSE16x8_B(p7, p6, p5, p4, p3, p2, p1, p0, q0, q1, q2, q3, q4, q5, ++ q6, q7, p7_o, p6_o, p5_o, p4_o, p3_o, p2_o, p1_o, p0_o); ++ LSX_ST_8(p7_o, p6_o, p5_o, p4_o, p3_o, p2_o, p1_o, p0_o, output, out_pitch); ++} ++ ++static void vp9_transpose_16x16(uint8_t *input, int32_t in_stride, ++ uint8_t *output, int32_t out_stride) ++{ ++ __m128i row0, row1, row2, row3, row4, row5, row6, row7; ++ __m128i row8, row9, row10, row11, row12, row13, row14, row15; ++ __m128i tmp0, tmp1, tmp4, tmp5, tmp6, tmp7; ++ __m128i tmp2, tmp3; ++ __m128i p7, p6, p5, p4, p3, p2, p1, p0, q0, q1, q2, q3, q4, q5, q6, q7; ++ ++ LSX_LD_8(input, in_stride, row0, row1, row2, row3, row4, row5, row6, row7); ++ input += in_stride; ++ LSX_LD_8(input, in_stride, ++ row8, row9, row10, row11, row12, row13, row14, row15); ++ ++ LSX_TRANSPOSE16x8_B(row0, row1, row2, row3, row4, row5, row6, row7, ++ row8, row9, row10, row11, row12, row13, row14, row15, ++ p7, p6, p5, p4, p3, p2, p1, p0); ++ ++ /* transpose 16x8 matrix into 8x16 */ ++ /* total 8 intermediate register and 32 instructions */ ++ q7 = __lsx_vpackod_d(row8, row0); ++ q6 = __lsx_vpackod_d(row9, row1); ++ q5 = __lsx_vpackod_d(row10, row2); ++ q4 = __lsx_vpackod_d(row11, row3); ++ q3 = __lsx_vpackod_d(row12, row4); ++ q2 = __lsx_vpackod_d(row13, row5); ++ q1 = __lsx_vpackod_d(row14, row6); ++ q0 = __lsx_vpackod_d(row15, row7); ++ ++ LSX_DUP2_ARG2(__lsx_vpackev_b, q6, q7, q4, q5, tmp0, tmp1); ++ LSX_DUP2_ARG2(__lsx_vpackod_b, q6, q7, q4, q5, tmp4, tmp5); ++ ++ LSX_DUP2_ARG2(__lsx_vpackev_b, q2, q3, q0, q1, q5, q7); ++ LSX_DUP2_ARG2(__lsx_vpackod_b, q2, q3, q0, q1, tmp6, tmp7); ++ ++ LSX_DUP2_ARG2(__lsx_vpackev_h, tmp1, tmp0, q7, q5, tmp2, tmp3); ++ q0 = __lsx_vpackev_w(tmp3, tmp2); ++ q4 = __lsx_vpackod_w(tmp3, tmp2); ++ ++ tmp2 = __lsx_vpackod_h(tmp1, tmp0); ++ tmp3 = __lsx_vpackod_h(q7, q5); ++ q2 = __lsx_vpackev_w(tmp3, tmp2); ++ q6 = __lsx_vpackod_w(tmp3, tmp2); ++ ++ LSX_DUP2_ARG2(__lsx_vpackev_h, tmp5, tmp4, tmp7, tmp6, tmp2, tmp3); ++ q1 = __lsx_vpackev_w(tmp3, tmp2); ++ q5 = __lsx_vpackod_w(tmp3, tmp2); ++ ++ tmp2 = __lsx_vpackod_h(tmp5, tmp4); ++ tmp3 = __lsx_vpackod_h(tmp7, tmp6); ++ q3 = __lsx_vpackev_w(tmp3, tmp2); ++ q7 = __lsx_vpackod_w(tmp3, tmp2); ++ ++ LSX_ST_8(p7, p6, p5, p4, p3, p2, p1, p0, output, out_stride); ++ output += out_stride; ++ LSX_ST_8(q0, q1, q2, q3, q4, q5, q6, q7, output, out_stride); ++} ++ ++static int32_t vp9_vt_lpf_t4_and_t8_8w(uint8_t *src, uint8_t *filter48, ++ uint8_t *src_org, int32_t pitch_org, ++ int32_t b_limit_ptr, ++ int32_t limit_ptr, ++ int32_t thresh_ptr) ++{ ++ __m128i p3, p2, p1, p0, q3, q2, q1, q0; ++ __m128i p2_out, p1_out, p0_out, q0_out, q1_out, q2_out; ++ __m128i flat, mask, hev, thresh, b_limit, limit; ++ __m128i p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l; ++ __m128i p2_filt8_l, p1_filt8_l, p0_filt8_l; ++ __m128i q0_filt8_l, q1_filt8_l, q2_filt8_l; ++ __m128i vec0, vec1, vec2, vec3; ++ __m128i zero = __lsx_vldi(0); ++ ++ /* load vector elements */ ++ LSX_DUP4_ARG2(__lsx_vld, src, -64, src, -48, src, -32, ++ src, -16, p3, p2, p1, p0); ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, ++ q0, q1, q2, q3); ++ ++ thresh = __lsx_vreplgr2vr_b(thresh_ptr); ++ b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); ++ limit = __lsx_vreplgr2vr_b(limit_ptr); ++ ++ /* mask and hev */ ++ LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, ++ hev, mask, flat); ++ /* flat4 */ ++ VP9_FLAT4(p3, p2, p0, q0, q2, q3, flat); ++ /* filter4 */ ++ VP9_LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev, p1_out, p0_out, q0_out, ++ q1_out); ++ ++ flat = __lsx_vilvl_d(zero, flat); ++ ++ /* if flat is zero for all pixels, then no need to calculate other filter */ ++ if (__lsx_bz_v(flat)) { ++ LSX_DUP2_ARG2(__lsx_vilvl_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); ++ vec2 = __lsx_vilvl_h(vec1, vec0); ++ vec3 = __lsx_vilvh_h(vec1, vec0); ++ ++ src_org -= 2; ++ __lsx_vstelm_w(vec2, src_org, 0, 0); ++ src_org += pitch_org; ++ __lsx_vstelm_w(vec2, src_org, 0, 1); ++ src_org += pitch_org; ++ __lsx_vstelm_w(vec2, src_org, 0, 2); ++ src_org += pitch_org; ++ __lsx_vstelm_w(vec2, src_org, 0, 3); ++ src_org += pitch_org; ++ __lsx_vstelm_w(vec3, src_org, 0, 0); ++ src_org += pitch_org; ++ __lsx_vstelm_w(vec3, src_org, 0, 1); ++ src_org += pitch_org; ++ __lsx_vstelm_w(vec3, src_org, 0, 2); ++ src_org += pitch_org; ++ __lsx_vstelm_w(vec3, src_org, 0, 3); ++ return 1; ++ } else { ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_l, p2_l, p1_l, p0_l); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_l, q1_l, q2_l, q3_l); ++ VP9_FILTER8(p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l, p2_filt8_l, ++ p1_filt8_l, p0_filt8_l, q0_filt8_l, q1_filt8_l, q2_filt8_l); ++ ++ /* convert 16 bit output data into 8 bit */ ++ p2_l = __lsx_vpickev_b(p2_filt8_l, p2_filt8_l); ++ p1_l = __lsx_vpickev_b(p1_filt8_l, p1_filt8_l); ++ p0_l = __lsx_vpickev_b(p0_filt8_l, p0_filt8_l); ++ q0_l = __lsx_vpickev_b(q0_filt8_l, q0_filt8_l); ++ q1_l = __lsx_vpickev_b(q1_filt8_l, q1_filt8_l); ++ q2_l = __lsx_vpickev_b(q2_filt8_l, q2_filt8_l); ++ ++ /* store pixel values */ ++ p2_out = __lsx_vbitsel_v(p2, p2_l, flat); ++ p1_out = __lsx_vbitsel_v(p1_out, p1_l, flat); ++ p0_out = __lsx_vbitsel_v(p0_out, p0_l, flat); ++ q0_out = __lsx_vbitsel_v(q0_out, q0_l, flat); ++ q1_out = __lsx_vbitsel_v(q1_out, q1_l, flat); ++ q2_out = __lsx_vbitsel_v(q2, q2_l, flat); ++ ++ __lsx_vst(p2_out, filter48, 0); ++ __lsx_vst(p1_out, filter48, 16); ++ __lsx_vst(p0_out, filter48, 32); ++ __lsx_vst(q0_out, filter48, 48); ++ __lsx_vst(q1_out, filter48, 64); ++ __lsx_vst(q2_out, filter48, 80); ++ __lsx_vst(flat, filter48, 96); ++ ++ return 0; ++ } ++} ++ ++static int32_t vp9_vt_lpf_t16_8w(uint8_t *dst, uint8_t *dst_org, ++ ptrdiff_t stride, ++ uint8_t *filter48) ++{ ++ __m128i zero = __lsx_vldi(0); ++ __m128i filter8, flat, flat2; ++ __m128i p7, p6, p5, p4, p3, p2, p1, p0, q0, q1, q2, q3, q4, q5, q6, q7; ++ v8u16 p7_l_in, p6_l_in, p5_l_in, p4_l_in; ++ v8u16 p3_l_in, p2_l_in, p1_l_in, p0_l_in; ++ v8u16 q7_l_in, q6_l_in, q5_l_in, q4_l_in; ++ v8u16 q3_l_in, q2_l_in, q1_l_in, q0_l_in; ++ v8u16 tmp0_l, tmp1_l; ++ __m128i out_l; ++ uint8_t *dst_tmp = dst - 128; ++ ++ /* load vector elements */ ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp, 16, dst_tmp, 32, ++ dst_tmp, 48, p7, p6, p5, p4); ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, 64, dst_tmp, 80, dst_tmp, 96, ++ dst_tmp, 112, p3, p2, p1, p0); ++ LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst, 16, dst, 32, ++ dst, 48, q0, q1, q2, q3); ++ LSX_DUP4_ARG2(__lsx_vld, dst, 64, dst, 80, dst, 96, ++ dst, 112, q4, q5, q6, q7); ++ ++ flat = __lsx_vld(filter48, 96); ++ ++ ++ VP9_FLAT5(p7, p6, p5, p4, p0, q0, q4, q5, q6, q7, flat, flat2); ++ ++ /* if flat2 is zero for all pixels, then no need to calculate other filter */ ++ if (__lsx_bz_v(flat2)) { ++ __m128i vec0, vec1, vec2, vec3, vec4; ++ ++ LSX_DUP4_ARG2(__lsx_vld, filter48, 0, filter48, 16, filter48, 32, ++ filter48, 48, p2, p1, p0, q0); ++ LSX_DUP2_ARG2(__lsx_vld, filter48, 64, filter48, 80, q1, q2); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, p1, p2, q0, p0, vec0, vec1); ++ vec3 = __lsx_vilvl_h(vec1, vec0); ++ vec4 = __lsx_vilvh_h(vec1, vec0); ++ vec2 = __lsx_vilvl_b(q2, q1); ++ ++ dst_org -= 3; ++ __lsx_vstelm_w(vec3, dst_org, 0, 0); ++ __lsx_vstelm_h(vec2, dst_org, 4, 0); ++ dst_org += stride; ++ __lsx_vstelm_w(vec3, dst_org, 0, 1); ++ __lsx_vstelm_h(vec2, dst_org, 4, 1); ++ dst_org += stride; ++ __lsx_vstelm_w(vec3, dst_org, 0, 2); ++ __lsx_vstelm_h(vec2, dst_org, 4, 2); ++ dst_org += stride; ++ __lsx_vstelm_w(vec3, dst_org, 0, 3); ++ __lsx_vstelm_h(vec2, dst_org, 4, 3); ++ dst_org += stride; ++ __lsx_vstelm_w(vec4, dst_org, 0, 0); ++ __lsx_vstelm_h(vec2, dst_org, 4, 4); ++ dst_org += stride; ++ __lsx_vstelm_w(vec4, dst_org, 0, 1); ++ __lsx_vstelm_h(vec2, dst_org, 4, 5); ++ dst_org += stride; ++ __lsx_vstelm_w(vec4, dst_org, 0, 2); ++ __lsx_vstelm_h(vec2, dst_org, 4, 6); ++ dst_org += stride; ++ __lsx_vstelm_w(vec4, dst_org, 0, 3); ++ __lsx_vstelm_h(vec2, dst_org, 4, 7); ++ return 1; ++ } else { ++ dst -= 7 * 16; ++ ++ p7_l_in = (v8u16)__lsx_vilvl_b(zero, p7); ++ p6_l_in = (v8u16)__lsx_vilvl_b(zero, p6); ++ p5_l_in = (v8u16)__lsx_vilvl_b(zero, p5); ++ p4_l_in = (v8u16)__lsx_vilvl_b(zero, p4); ++ p3_l_in = (v8u16)__lsx_vilvl_b(zero, p3); ++ p2_l_in = (v8u16)__lsx_vilvl_b(zero, p2); ++ p1_l_in = (v8u16)__lsx_vilvl_b(zero, p1); ++ p0_l_in = (v8u16)__lsx_vilvl_b(zero, p0); ++ q0_l_in = (v8u16)__lsx_vilvl_b(zero, q0); ++ ++ tmp0_l = p7_l_in << 3; ++ tmp0_l -= p7_l_in; ++ tmp0_l += p6_l_in; ++ tmp0_l += q0_l_in; ++ tmp1_l = p6_l_in + p5_l_in; ++ tmp1_l += p4_l_in; ++ tmp1_l += p3_l_in; ++ tmp1_l += p2_l_in; ++ tmp1_l += p1_l_in; ++ tmp1_l += p0_l_in; ++ tmp1_l += tmp0_l; ++ ++ out_l =__lsx_vsrari_h((__m128i)tmp1_l, 4); ++ out_l =__lsx_vpickev_b(out_l, out_l); ++ p6 = __lsx_vbitsel_v(p6, out_l, flat2); ++ __lsx_vstelm_d(p6, dst, 0, 0); ++ dst += 16; ++ ++ /* p5 */ ++ q1_l_in = (v8u16)__lsx_vilvl_b(zero, q1); ++ tmp0_l = p5_l_in - p6_l_in; ++ tmp0_l += q1_l_in; ++ tmp0_l -= p7_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ out_l = __lsx_vpickev_b(out_l, out_l); ++ p5 = __lsx_vbitsel_v(p5, out_l, flat2); ++ __lsx_vstelm_d(p5, dst, 0, 0); ++ dst += 16; ++ ++ /* p4 */ ++ q2_l_in = (v8u16)__lsx_vilvl_b(zero, q2); ++ tmp0_l = p4_l_in - p5_l_in; ++ tmp0_l += q2_l_in; ++ tmp0_l -= p7_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ out_l = __lsx_vpickev_b(out_l, out_l); ++ p4 = __lsx_vbitsel_v(p4, out_l, flat2); ++ __lsx_vstelm_d(p4, dst, 0, 0); ++ dst += 16; ++ ++ /* p3 */ ++ q3_l_in = (v8u16)__lsx_vilvl_b(zero, q3); ++ tmp0_l = p3_l_in - p4_l_in; ++ tmp0_l += q3_l_in; ++ tmp0_l -= p7_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ out_l = __lsx_vpickev_b(out_l, out_l); ++ p3 = __lsx_vbitsel_v(p3, out_l, flat2); ++ __lsx_vstelm_d(p3, dst, 0, 0); ++ dst += 16; ++ ++ /* p2 */ ++ q4_l_in = (v8u16)__lsx_vilvl_b(zero, q4); ++ filter8 = __lsx_vld(filter48, 0); ++ tmp0_l = p2_l_in - p3_l_in; ++ tmp0_l += q4_l_in; ++ tmp0_l -= p7_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ out_l = __lsx_vpickev_b(out_l, out_l); ++ filter8 = __lsx_vbitsel_v(filter8, out_l, flat2); ++ __lsx_vstelm_d(filter8, dst, 0, 0); ++ dst += 16; ++ ++ /* p1 */ ++ q5_l_in = (v8u16)__lsx_vilvl_b(zero, q5); ++ filter8 = __lsx_vld(filter48, 16); ++ tmp0_l = p1_l_in - p2_l_in; ++ tmp0_l += q5_l_in; ++ tmp0_l -= p7_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ out_l = __lsx_vpickev_b(out_l, out_l); ++ filter8 = __lsx_vbitsel_v(filter8, out_l, flat2); ++ __lsx_vstelm_d(filter8, dst, 0, 0); ++ dst += 16; ++ ++ /* p0 */ ++ q6_l_in = (v8u16)__lsx_vilvl_b(zero, q6); ++ filter8 = __lsx_vld(filter48, 32); ++ tmp0_l = p0_l_in - p1_l_in; ++ tmp0_l += q6_l_in; ++ tmp0_l -= p7_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ out_l = __lsx_vpickev_b(out_l, out_l); ++ filter8 = __lsx_vbitsel_v(filter8, out_l, flat2); ++ __lsx_vstelm_d(filter8, dst, 0, 0); ++ dst += 16; ++ ++ /* q0 */ ++ q7_l_in = (v8u16)__lsx_vilvl_b(zero, q7); ++ filter8 = __lsx_vld(filter48, 48); ++ tmp0_l = q7_l_in - p0_l_in; ++ tmp0_l += q0_l_in; ++ tmp0_l -= p7_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((v8i16) tmp1_l, 4); ++ out_l = __lsx_vpickev_b(out_l, out_l); ++ filter8 = __lsx_vbitsel_v(filter8, out_l, flat2); ++ __lsx_vstelm_d(filter8, dst, 0, 0); ++ dst += 16; ++ ++ /* q1 */ ++ filter8 = __lsx_vld(filter48, 64); ++ tmp0_l = q7_l_in - q0_l_in; ++ tmp0_l += q1_l_in; ++ tmp0_l -= p6_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ out_l = __lsx_vpickev_b(out_l, out_l); ++ filter8 = __lsx_vbitsel_v(filter8, out_l, flat2); ++ __lsx_vstelm_d(filter8, dst, 0, 0); ++ dst += 16; ++ ++ /* q2 */ ++ filter8 = __lsx_vld(filter48, 80); ++ tmp0_l = q7_l_in - q1_l_in; ++ tmp0_l += q2_l_in; ++ tmp0_l -= p5_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ out_l = __lsx_vpickev_b(out_l, out_l); ++ filter8 = __lsx_vbitsel_v(filter8, out_l, flat2); ++ __lsx_vstelm_d(filter8, dst, 0, 0); ++ dst += 16; ++ ++ /* q3 */ ++ tmp0_l = q7_l_in - q2_l_in; ++ tmp0_l += q3_l_in; ++ tmp0_l -= p4_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ out_l = __lsx_vpickev_b(out_l, out_l); ++ q3 = __lsx_vbitsel_v(q3, out_l, flat2); ++ __lsx_vstelm_d(q3, dst, 0, 0); ++ dst += 16; ++ ++ /* q4 */ ++ tmp0_l = q7_l_in - q3_l_in; ++ tmp0_l += q4_l_in; ++ tmp0_l -= p3_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ out_l = __lsx_vpickev_b(out_l, out_l); ++ q4 = __lsx_vbitsel_v(q4, out_l, flat2); ++ __lsx_vstelm_d(q4, dst, 0, 0); ++ dst += 16; ++ ++ /* q5 */ ++ tmp0_l = q7_l_in - q4_l_in; ++ tmp0_l += q5_l_in; ++ tmp0_l -= p2_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ out_l = __lsx_vpickev_b(out_l, out_l); ++ q5 = __lsx_vbitsel_v(q5, out_l, flat2); ++ __lsx_vstelm_d(q5, dst, 0, 0); ++ dst += 16; ++ ++ /* q6 */ ++ tmp0_l = q7_l_in - q5_l_in; ++ tmp0_l += q6_l_in; ++ tmp0_l -= p1_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ out_l = __lsx_vpickev_b(out_l, out_l); ++ q6 = __lsx_vbitsel_v(q6, out_l, flat2); ++ __lsx_vstelm_d(q6, dst, 0, 0); ++ ++ return 0; ++ } ++} ++ ++void ff_loop_filter_h_16_8_lsx(uint8_t *dst, ptrdiff_t stride, ++ int32_t b_limit_ptr, ++ int32_t limit_ptr, ++ int32_t thresh_ptr) ++{ ++ uint8_t early_exit = 0; ++ uint8_t transposed_input[16 * 24] __attribute__ ((aligned(16))); ++ uint8_t *filter48 = &transposed_input[16 * 16]; ++ ++ vp9_transpose_16x8_to_8x16(dst - 8, stride, transposed_input, 16); ++ ++ early_exit = vp9_vt_lpf_t4_and_t8_8w((transposed_input + 16 * 8), ++ &filter48[0], dst, stride, ++ b_limit_ptr, limit_ptr, thresh_ptr); ++ ++ if (0 == early_exit) { ++ early_exit = vp9_vt_lpf_t16_8w((transposed_input + 16 * 8), dst, stride, ++ &filter48[0]); ++ ++ if (0 == early_exit) { ++ vp9_transpose_8x16_to_16x8(transposed_input, 16, dst - 8, stride); ++ } ++ } ++} ++ ++static int32_t vp9_vt_lpf_t4_and_t8_16w(uint8_t *dst, uint8_t *filter48, ++ uint8_t *dst_org, ptrdiff_t stride, ++ int32_t b_limit_ptr, ++ int32_t limit_ptr, ++ int32_t thresh_ptr) ++{ ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ ptrdiff_t stride4 = stride2 << 1; ++ __m128i p3, p2, p1, p0, q3, q2, q1, q0; ++ __m128i p2_out, p1_out, p0_out, q0_out, q1_out, q2_out; ++ __m128i flat, mask, hev, thresh, b_limit, limit; ++ __m128i p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l; ++ __m128i p3_h, p2_h, p1_h, p0_h, q0_h, q1_h, q2_h, q3_h; ++ __m128i p2_filt8_l, p1_filt8_l, p0_filt8_l; ++ __m128i q0_filt8_l, q1_filt8_l, q2_filt8_l; ++ __m128i p2_filt8_h, p1_filt8_h, p0_filt8_h; ++ __m128i q0_filt8_h, q1_filt8_h, q2_filt8_h; ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5; ++ __m128i zero = __lsx_vldi(0); ++ ++ /* load vector elements */ ++ LSX_DUP4_ARG2(__lsx_vld, dst, -64, dst, -48, dst, -32, ++ dst, -16, p3, p2, p1, p0); ++ LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst, 16, dst, 32, ++ dst, 48, q0, q1, q2, q3); ++ ++ thresh = __lsx_vreplgr2vr_b(thresh_ptr); ++ b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); ++ limit = __lsx_vreplgr2vr_b(limit_ptr); ++ ++ /* mask and hev */ ++ LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, ++ hev, mask, flat); ++ /* flat4 */ ++ VP9_FLAT4(p3, p2, p0, q0, q2, q3, flat); ++ /* filter4 */ ++ VP9_LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev, p1_out, p0_out, q0_out, ++ q1_out); ++ ++ /* if flat is zero for all pixels, then no need to calculate other filter */ ++ if (__lsx_bz_v(flat)) { ++ LSX_DUP2_ARG2(__lsx_vilvl_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); ++ vec2 = __lsx_vilvl_h(vec1, vec0); ++ vec3 = __lsx_vilvh_h(vec1, vec0); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); ++ vec4 = __lsx_vilvl_h(vec1, vec0); ++ vec5 = __lsx_vilvh_h(vec1, vec0); ++ ++ dst_org -= 2; ++ __lsx_vstelm_w(vec2, dst_org, 0, 0); ++ __lsx_vstelm_w(vec2, dst_org + stride, 0, 1); ++ __lsx_vstelm_w(vec2, dst_org + stride2, 0, 2); ++ __lsx_vstelm_w(vec2, dst_org + stride3, 0, 3); ++ dst_org += stride4; ++ __lsx_vstelm_w(vec3, dst_org, 0, 0); ++ __lsx_vstelm_w(vec3, dst_org + stride, 0, 1); ++ __lsx_vstelm_w(vec3, dst_org + stride2, 0, 2); ++ __lsx_vstelm_w(vec3, dst_org + stride3, 0, 3); ++ dst_org += stride4; ++ __lsx_vstelm_w(vec4, dst_org, 0, 0); ++ __lsx_vstelm_w(vec4, dst_org + stride, 0, 1); ++ __lsx_vstelm_w(vec4, dst_org + stride2, 0, 2); ++ __lsx_vstelm_w(vec4, dst_org + stride3, 0, 3); ++ dst_org += stride4; ++ __lsx_vstelm_w(vec5, dst_org, 0, 0); ++ __lsx_vstelm_w(vec5, dst_org + stride, 0, 1); ++ __lsx_vstelm_w(vec5, dst_org + stride2, 0, 2); ++ __lsx_vstelm_w(vec5, dst_org + stride3, 0, 3); ++ ++ return 1; ++ } else { ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_l, p2_l, p1_l, p0_l); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_l, q1_l, q2_l, q3_l); ++ VP9_FILTER8(p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l, p2_filt8_l, ++ p1_filt8_l, p0_filt8_l, q0_filt8_l, q1_filt8_l, q2_filt8_l); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_h, p2_h, p1_h, p0_h); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_h, q1_h, q2_h, q3_h); ++ VP9_FILTER8(p3_h, p2_h, p1_h, p0_h, q0_h, q1_h, q2_h, q3_h, p2_filt8_h, ++ p1_filt8_h, p0_filt8_h, q0_filt8_h, q1_filt8_h, q2_filt8_h); ++ ++ /* convert 16 bit output data into 8 bit */ ++ LSX_DUP4_ARG2(__lsx_vpickev_b, p2_filt8_h, p2_filt8_l, p1_filt8_h, ++ p1_filt8_l, p0_filt8_h, p0_filt8_l, q0_filt8_h, ++ q0_filt8_l, p2_filt8_l, p1_filt8_l, p0_filt8_l, ++ q0_filt8_l); ++ LSX_DUP2_ARG2(__lsx_vpickev_b, q1_filt8_h, q1_filt8_l, q2_filt8_h, ++ q2_filt8_l, q1_filt8_l, q2_filt8_l); ++ ++ /* store pixel values */ ++ p2_out = __lsx_vbitsel_v(p2, p2_filt8_l, flat); ++ p1_out = __lsx_vbitsel_v(p1_out, p1_filt8_l, flat); ++ p0_out = __lsx_vbitsel_v(p0_out, p0_filt8_l, flat); ++ q0_out = __lsx_vbitsel_v(q0_out, q0_filt8_l, flat); ++ q1_out = __lsx_vbitsel_v(q1_out, q1_filt8_l, flat); ++ q2_out = __lsx_vbitsel_v(q2, q2_filt8_l, flat); ++ ++ __lsx_vst(p2_out, filter48, 0); ++ __lsx_vst(p1_out, filter48, 16); ++ __lsx_vst(p0_out, filter48, 32); ++ __lsx_vst(q0_out, filter48, 48); ++ __lsx_vst(q1_out, filter48, 64); ++ __lsx_vst(q2_out, filter48, 80); ++ __lsx_vst(flat, filter48, 96); ++ ++ return 0; ++ } ++} ++ ++static int32_t vp9_vt_lpf_t16_16w(uint8_t *dst, uint8_t *dst_org, ++ ptrdiff_t stride, ++ uint8_t *filter48) ++{ ++ __m128i zero = __lsx_vldi(0); ++ __m128i flat, flat2, filter8; ++ __m128i p7, p6, p5, p4, p3, p2, p1, p0, q0, q1, q2, q3, q4, q5, q6, q7; ++ v8u16 p7_l_in, p6_l_in, p5_l_in, p4_l_in; ++ v8u16 p3_l_in, p2_l_in, p1_l_in, p0_l_in; ++ v8u16 q7_l_in, q6_l_in, q5_l_in, q4_l_in; ++ v8u16 q3_l_in, q2_l_in, q1_l_in, q0_l_in; ++ v8u16 p7_h_in, p6_h_in, p5_h_in, p4_h_in; ++ v8u16 p3_h_in, p2_h_in, p1_h_in, p0_h_in; ++ v8u16 q7_h_in, q6_h_in, q5_h_in, q4_h_in; ++ v8u16 q3_h_in, q2_h_in, q1_h_in, q0_h_in; ++ v8u16 tmp0_l, tmp1_l, tmp0_h, tmp1_h; ++ __m128i out_l, out_h; ++ uint8_t *dst_tmp = dst - 128; ++ ++ flat = __lsx_vld(filter48, 96); ++ ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp, 16, dst_tmp, 32, ++ dst_tmp, 48, p7, p6, p5, p4); ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, 64, dst_tmp, 80, dst_tmp, 96, ++ dst_tmp, 112, p3, p2, p1, p0); ++ LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst, 16, dst, 32, ++ dst, 48, q0, q1, q2, q3); ++ LSX_DUP4_ARG2(__lsx_vld, dst, 64, dst, 80, dst, 96, ++ dst, 112, q4, q5, q6, q7); ++ ++ VP9_FLAT5(p7, p6, p5, p4, p0, q0, q4, q5, q6, q7, flat, flat2); ++ ++ /* if flat2 is zero for all pixels, then no need to calculate other filter */ ++ if (__lsx_bz_v(flat2)) { ++ __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; ++ ++ LSX_DUP4_ARG2(__lsx_vld, filter48, 0, filter48, 16, filter48, 32, ++ filter48, 48, p2, p1, p0, q0); ++ LSX_DUP2_ARG2(__lsx_vld, filter48, 64, filter48, 80, q1, q2); ++ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, p1, p2, q0, p0, vec0, vec1); ++ vec3 = __lsx_vilvl_h(vec1, vec0); ++ vec4 = __lsx_vilvh_h(vec1, vec0); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, p1, p2, q0, p0, vec0, vec1); ++ vec6 = __lsx_vilvl_h(vec1, vec0); ++ vec7 = __lsx_vilvh_h(vec1, vec0); ++ vec2 = __lsx_vilvl_b(q2, q1); ++ vec5 = __lsx_vilvh_b(q2, q1); ++ ++ dst_org -= 3; ++ __lsx_vstelm_w(vec3, dst_org, 0, 0); ++ __lsx_vstelm_h(vec2, dst_org, 4, 0); ++ dst_org += stride; ++ __lsx_vstelm_w(vec3, dst_org, 0, 1); ++ __lsx_vstelm_h(vec2, dst_org, 4, 1); ++ dst_org += stride; ++ __lsx_vstelm_w(vec3, dst_org, 0, 2); ++ __lsx_vstelm_h(vec2, dst_org, 4, 2); ++ dst_org += stride; ++ __lsx_vstelm_w(vec3, dst_org, 0, 3); ++ __lsx_vstelm_h(vec2, dst_org, 4, 3); ++ dst_org += stride; ++ __lsx_vstelm_w(vec4, dst_org, 0, 0); ++ __lsx_vstelm_h(vec2, dst_org, 4, 4); ++ dst_org += stride; ++ __lsx_vstelm_w(vec4, dst_org, 0, 1); ++ __lsx_vstelm_h(vec2, dst_org, 4, 5); ++ dst_org += stride; ++ __lsx_vstelm_w(vec4, dst_org, 0, 2); ++ __lsx_vstelm_h(vec2, dst_org, 4, 6); ++ dst_org += stride; ++ __lsx_vstelm_w(vec4, dst_org, 0, 3); ++ __lsx_vstelm_h(vec2, dst_org, 4, 7); ++ dst_org += stride; ++ __lsx_vstelm_w(vec6, dst_org, 0, 0); ++ __lsx_vstelm_h(vec5, dst_org, 4, 0); ++ dst_org += stride; ++ __lsx_vstelm_w(vec6, dst_org, 0, 1); ++ __lsx_vstelm_h(vec5, dst_org, 4, 1); ++ dst_org += stride; ++ __lsx_vstelm_w(vec6, dst_org, 0, 2); ++ __lsx_vstelm_h(vec5, dst_org, 4, 2); ++ dst_org += stride; ++ __lsx_vstelm_w(vec6, dst_org, 0, 3); ++ __lsx_vstelm_h(vec5, dst_org, 4, 3); ++ dst_org += stride; ++ __lsx_vstelm_w(vec7, dst_org, 0, 0); ++ __lsx_vstelm_h(vec5, dst_org, 4, 4); ++ dst_org += stride; ++ __lsx_vstelm_w(vec7, dst_org, 0, 1); ++ __lsx_vstelm_h(vec5, dst_org, 4, 5); ++ dst_org += stride; ++ __lsx_vstelm_w(vec7, dst_org, 0, 2); ++ __lsx_vstelm_h(vec5, dst_org, 4, 6); ++ dst_org += stride; ++ __lsx_vstelm_w(vec7, dst_org, 0, 3); ++ __lsx_vstelm_h(vec5, dst_org, 4, 7); ++ ++ return 1; ++ } else { ++ dst -= 7 * 16; ++ ++ p7_l_in = (v8u16)__lsx_vilvl_b(zero, p7); ++ p6_l_in = (v8u16)__lsx_vilvl_b(zero, p6); ++ p5_l_in = (v8u16)__lsx_vilvl_b(zero, p5); ++ p4_l_in = (v8u16)__lsx_vilvl_b(zero, p4); ++ p3_l_in = (v8u16)__lsx_vilvl_b(zero, p3); ++ p2_l_in = (v8u16)__lsx_vilvl_b(zero, p2); ++ p1_l_in = (v8u16)__lsx_vilvl_b(zero, p1); ++ p0_l_in = (v8u16)__lsx_vilvl_b(zero, p0); ++ q0_l_in = (v8u16)__lsx_vilvl_b(zero, q0); ++ ++ tmp0_l = p7_l_in << 3; ++ tmp0_l -= p7_l_in; ++ tmp0_l += p6_l_in; ++ tmp0_l += q0_l_in; ++ tmp1_l = p6_l_in + p5_l_in; ++ tmp1_l += p4_l_in; ++ tmp1_l += p3_l_in; ++ tmp1_l += p2_l_in; ++ tmp1_l += p1_l_in; ++ tmp1_l += p0_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ ++ p7_h_in = (v8u16)__lsx_vilvh_b(zero, p7); ++ p6_h_in = (v8u16)__lsx_vilvh_b(zero, p6); ++ p5_h_in = (v8u16)__lsx_vilvh_b(zero, p5); ++ p4_h_in = (v8u16)__lsx_vilvh_b(zero, p4); ++ p3_h_in = (v8u16)__lsx_vilvh_b(zero, p3); ++ p2_h_in = (v8u16)__lsx_vilvh_b(zero, p2); ++ p1_h_in = (v8u16)__lsx_vilvh_b(zero, p1); ++ p0_h_in = (v8u16)__lsx_vilvh_b(zero, p0); ++ q0_h_in = (v8u16)__lsx_vilvh_b(zero, q0); ++ ++ tmp0_h = p7_h_in << 3; ++ tmp0_h -= p7_h_in; ++ tmp0_h += p6_h_in; ++ tmp0_h += q0_h_in; ++ tmp1_h = p6_h_in + p5_h_in; ++ tmp1_h += p4_h_in; ++ tmp1_h += p3_h_in; ++ tmp1_h += p2_h_in; ++ tmp1_h += p1_h_in; ++ tmp1_h += p0_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ p6 = __lsx_vbitsel_v(p6, out_l, flat2); ++ __lsx_vst(p6, dst, 0); ++ ++ /* p5 */ ++ q1_l_in = (v8u16)__lsx_vilvl_b(zero, q1); ++ tmp0_l = p5_l_in - p6_l_in; ++ tmp0_l += q1_l_in; ++ tmp0_l -= p7_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ q1_h_in = (v8u16)__lsx_vilvh_b(zero, q1); ++ tmp0_h = p5_h_in - p6_h_in; ++ tmp0_h += q1_h_in; ++ tmp0_h -= p7_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ p5 = __lsx_vbitsel_v(p5, out_l, flat2); ++ __lsx_vst(p5, dst, 16); ++ ++ /* p4 */ ++ q2_l_in = (v8u16)__lsx_vilvl_b(zero, q2); ++ tmp0_l = p4_l_in - p5_l_in; ++ tmp0_l += q2_l_in; ++ tmp0_l -= p7_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ q2_h_in = (v8u16)__lsx_vilvh_b(zero, q2); ++ tmp0_h = p4_h_in - p5_h_in; ++ tmp0_h += q2_h_in; ++ tmp0_h -= p7_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ p4 = __lsx_vbitsel_v(p4, out_l, flat2); ++ __lsx_vst(p4, dst, 16*2); ++ ++ /* p3 */ ++ q3_l_in = (v8u16)__lsx_vilvl_b(zero, q3); ++ tmp0_l = p3_l_in - p4_l_in; ++ tmp0_l += q3_l_in; ++ tmp0_l -= p7_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ q3_h_in = (v8u16)__lsx_vilvh_b(zero, q3); ++ tmp0_h = p3_h_in - p4_h_in; ++ tmp0_h += q3_h_in; ++ tmp0_h -= p7_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ p3 = __lsx_vbitsel_v(p3, out_l, flat2); ++ __lsx_vst(p3, dst, 16*3); ++ ++ /* p2 */ ++ q4_l_in = (v8u16)__lsx_vilvl_b(zero, q4); ++ filter8 = __lsx_vld(filter48, 0); ++ tmp0_l = p2_l_in - p3_l_in; ++ tmp0_l += q4_l_in; ++ tmp0_l -= p7_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ q4_h_in = (v8u16)__lsx_vilvh_b(zero, q4); ++ tmp0_h = p2_h_in - p3_h_in; ++ tmp0_h += q4_h_in; ++ tmp0_h -= p7_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ filter8 = __lsx_vbitsel_v(filter8, out_l, flat2); ++ __lsx_vst(filter8, dst, 16*4); ++ ++ /* p1 */ ++ q5_l_in = (v8u16)__lsx_vilvl_b(zero, q5); ++ filter8 = __lsx_vld(filter48, 16); ++ tmp0_l = p1_l_in - p2_l_in; ++ tmp0_l += q5_l_in; ++ tmp0_l -= p7_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ q5_h_in = (v8u16)__lsx_vilvh_b(zero, q5); ++ tmp0_h = p1_h_in - p2_h_in; ++ tmp0_h += q5_h_in; ++ tmp0_h -= p7_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)(tmp1_h), 4); ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ filter8 = __lsx_vbitsel_v(filter8, out_l, flat2); ++ __lsx_vst(filter8, dst, 16*5); ++ ++ /* p0 */ ++ q6_l_in = (v8u16)__lsx_vilvl_b(zero, q6); ++ filter8 = __lsx_vld(filter48, 32); ++ tmp0_l = p0_l_in - p1_l_in; ++ tmp0_l += q6_l_in; ++ tmp0_l -= p7_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ q6_h_in = (v8u16)__lsx_vilvh_b(zero, q6); ++ tmp0_h = p0_h_in - p1_h_in; ++ tmp0_h += q6_h_in; ++ tmp0_h -= p7_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ filter8 = __lsx_vbitsel_v(filter8, out_l, flat2); ++ __lsx_vst(filter8, dst, 16*6); ++ ++ /* q0 */ ++ q7_l_in = (v8u16)__lsx_vilvl_b(zero, q7); ++ filter8 = __lsx_vld(filter48, 48); ++ tmp0_l = q7_l_in - p0_l_in; ++ tmp0_l += q0_l_in; ++ tmp0_l -= p7_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ q7_h_in = (v8u16)__lsx_vilvh_b(zero, q7); ++ tmp0_h = q7_h_in - p0_h_in; ++ tmp0_h += q0_h_in; ++ tmp0_h -= p7_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ filter8 = __lsx_vbitsel_v(filter8, out_l, flat2); ++ __lsx_vst(filter8, dst, 16*7); ++ ++ /* q1 */ ++ filter8 = __lsx_vld(filter48, 64); ++ tmp0_l = q7_l_in - q0_l_in; ++ tmp0_l += q1_l_in; ++ tmp0_l -= p6_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ tmp0_h = q7_h_in - q0_h_in; ++ tmp0_h += q1_h_in; ++ tmp0_h -= p6_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ filter8 = __lsx_vbitsel_v(filter8, out_l, flat2); ++ __lsx_vst(filter8, dst, 16*8); ++ ++ /* q2 */ ++ filter8 = __lsx_vld(filter48, 80); ++ tmp0_l = q7_l_in - q1_l_in; ++ tmp0_l += q2_l_in; ++ tmp0_l -= p5_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ tmp0_h = q7_h_in - q1_h_in; ++ tmp0_h += q2_h_in; ++ tmp0_h -= p5_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ filter8 = __lsx_vbitsel_v(filter8, out_l, flat2); ++ __lsx_vst(filter8, dst, 16*9); ++ ++ /* q3 */ ++ tmp0_l = q7_l_in - q2_l_in; ++ tmp0_l += q3_l_in; ++ tmp0_l -= p4_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ tmp0_h = q7_h_in - q2_h_in; ++ tmp0_h += q3_h_in; ++ tmp0_h -= p4_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ q3 = __lsx_vbitsel_v(q3, out_l, flat2); ++ __lsx_vst(q3, dst, 16*10); ++ ++ /* q4 */ ++ tmp0_l = q7_l_in - q3_l_in; ++ tmp0_l += q4_l_in; ++ tmp0_l -= p3_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ tmp0_h = q7_h_in - q3_h_in; ++ tmp0_h += q4_h_in; ++ tmp0_h -= p3_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ q4 = __lsx_vbitsel_v(q4, out_l, flat2); ++ __lsx_vst(q4, dst, 16*11); ++ ++ /* q5 */ ++ tmp0_l = q7_l_in - q4_l_in; ++ tmp0_l += q5_l_in; ++ tmp0_l -= p2_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ tmp0_h = q7_h_in - q4_h_in; ++ tmp0_h += q5_h_in; ++ tmp0_h -= p2_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ q5 = __lsx_vbitsel_v(q5, out_l, flat2); ++ __lsx_vst(q5, dst, 16*12); ++ ++ /* q6 */ ++ tmp0_l = q7_l_in - q5_l_in; ++ tmp0_l += q6_l_in; ++ tmp0_l -= p1_l_in; ++ tmp1_l += tmp0_l; ++ out_l = __lsx_vsrari_h((__m128i)tmp1_l, 4); ++ tmp0_h = q7_h_in - q5_h_in; ++ tmp0_h += q6_h_in; ++ tmp0_h -= p1_h_in; ++ tmp1_h += tmp0_h; ++ out_h = __lsx_vsrari_h((__m128i)tmp1_h, 4); ++ out_l = __lsx_vpickev_b(out_h, out_l); ++ q6 = __lsx_vbitsel_v(q6, out_l, flat2); ++ __lsx_vst(q6, dst, 16*13); ++ ++ return 0; ++ } ++} ++ ++void ff_loop_filter_h_16_16_lsx(uint8_t *dst, ptrdiff_t stride, ++ int32_t b_limit_ptr, ++ int32_t limit_ptr, ++ int32_t thresh_ptr) ++{ ++ uint8_t early_exit = 0; ++ uint8_t transposed_input[16 * 24] __attribute__ ((aligned(16))); ++ uint8_t *filter48 = &transposed_input[16 * 16]; ++ ++ vp9_transpose_16x16((dst - 8), stride, &transposed_input[0], 16); ++ ++ early_exit = vp9_vt_lpf_t4_and_t8_16w((transposed_input + 16 * 8), ++ &filter48[0], dst, stride, ++ b_limit_ptr, limit_ptr, thresh_ptr); ++ ++ if (0 == early_exit) { ++ early_exit = vp9_vt_lpf_t16_16w((transposed_input + 16 * 8), dst, stride, ++ &filter48[0]); ++ ++ if (0 == early_exit) { ++ vp9_transpose_16x16(transposed_input, 16, (dst - 8), stride); ++ } ++ } ++} ++ +diff --git a/libavcodec/loongarch/vp9_mc_lsx.c b/libavcodec/loongarch/vp9_mc_lsx.c +new file mode 100644 +index 0000000000..02ee916447 +--- /dev/null ++++ b/libavcodec/loongarch/vp9_mc_lsx.c +@@ -0,0 +1,2318 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hao Chen ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavcodec/vp9dsp.h" ++#include "libavutil/loongarch/generic_macros_lsx.h" ++#include "vp9dsp_loongarch.h" ++ ++static const uint8_t mc_filt_mask_arr[16 * 3] = { ++ /* 8 width cases */ ++ 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, ++ /* 4 width cases */ ++ 0, 1, 1, 2, 2, 3, 3, 4, 16, 17, 17, 18, 18, 19, 19, 20, ++ /* 4 width cases */ ++ 8, 9, 9, 10, 10, 11, 11, 12, 24, 25, 25, 26, 26, 27, 27, 28 ++}; ++ ++ ++#define HORIZ_8TAP_4WID_4VECS_FILT(_src0, _src1, _src2, _src3, \ ++ _mask0, _mask1, _mask2, _mask3, \ ++ _filter0, _filter1, _filter2, _filter3, \ ++ _out0, _out1) \ ++{ \ ++ __m128i _tmp0, _tmp1, _tmp2, _tmp3, _tmp4, _tmp5, _tmp6, _tmp7; \ ++ __m128i _reg0, _reg1, _reg2, _reg3; \ ++ \ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, _src1, _src0, _mask0, \ ++ _src3, _src2, _mask0, _tmp0, _tmp1); \ ++ LSX_DUP2_ARG2(__lsx_dp2_h_b, _tmp0, _filter0, _tmp1, _filter0, _reg0, _reg1); \ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, _src1, _src0, _mask1, \ ++ _src3, _src2, _mask1, _tmp2, _tmp3); \ ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, _reg0, _tmp2, _filter1, \ ++ _reg1, _tmp3, _filter1, _reg0, _reg1); \ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, _src1, _src0, _mask2, \ ++ _src3, _src2, _mask2, _tmp4, _tmp5); \ ++ LSX_DUP2_ARG2(__lsx_dp2_h_b, _tmp4, _filter2, _tmp5, _filter2, _reg2, _reg3); \ ++ LSX_DUP2_ARG3(__lsx_vshuf_b, _src1, _src0, _mask3, \ ++ _src3, _src2, _mask3, _tmp6, _tmp7); \ ++ LSX_DUP2_ARG3(__lsx_dp2add_h_b, _reg2, _tmp6, _filter3, \ ++ _reg3, _tmp7, _filter3, _reg2, _reg3); \ ++ LSX_DUP2_ARG2(__lsx_vsadd_h, _reg0, _reg2, _reg1, _reg3, _out0, _out1); \ ++} ++ ++#define HORIZ_8TAP_8WID_4VECS_FILT(_src0, _src1, _src2, _src3, \ ++ _mask0, _mask1, _mask2, _mask3, \ ++ _filter0, _filter1, _filter2, _filter3, \ ++ _out0, _out1, _out2, _out3) \ ++{ \ ++ __m128i _tmp0, _tmp1, _tmp2, _tmp3, _tmp4, _tmp5, _tmp6, _tmp7; \ ++ __m128i _reg0, _reg1, _reg2, _reg3, _reg4, _reg5, _reg6, _reg7; \ ++ \ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, _src0, _src0, _mask0, _src1, _src1, _mask0, _src2, \ ++ _src2, _mask0, _src3, _src3, _mask0, _tmp0, _tmp1, _tmp2, _tmp3); \ ++ LSX_DUP4_ARG2(__lsx_dp2_h_b, _tmp0, _filter0, _tmp1, _filter0, _tmp2, _filter0, \ ++ _tmp3, _filter0, _reg0, _reg1, _reg2, _reg3); \ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, _src0, _src0, _mask2, _src1, _src1, _mask2, _src2, \ ++ _src2, _mask2, _src3, _src3, _mask2, _tmp0, _tmp1, _tmp2, _tmp3); \ ++ LSX_DUP4_ARG2(__lsx_dp2_h_b, _tmp0, _filter2, _tmp1, _filter2, _tmp2, _filter2, \ ++ _tmp3, _filter2, _reg4, _reg5, _reg6, _reg7); \ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, _src0, _src0, _mask1, _src1, _src1, _mask1, _src2, \ ++ _src2, _mask1, _src3, _src3, _mask1, _tmp4, _tmp5, _tmp6, _tmp7); \ ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, _reg0, _tmp4, _filter1, _reg1, _tmp5, _filter1, \ ++ _reg2, _tmp6, _filter1, _reg3, _tmp7, _filter1, _reg0, _reg1, _reg2, _reg3);\ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, _src0, _src0, _mask3, _src1, _src1, _mask3, _src2, \ ++ _src2, _mask3, _src3, _src3, _mask3, _tmp4, _tmp5, _tmp6, _tmp7); \ ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, _reg4, _tmp4, _filter3, _reg5, _tmp5, _filter3, \ ++ _reg6, _tmp6, _filter3, _reg7, _tmp7, _filter3, _reg4, _reg5, _reg6, _reg7);\ ++ LSX_DUP4_ARG2(__lsx_vsadd_h, _reg0, _reg4, _reg1, _reg5, _reg2, _reg6, _reg3, _reg7, \ ++ _out0, _out1, _out2, _out3); \ ++} ++ ++#define FILT_8TAP_DPADD_S_H(_reg0, _reg1, _reg2, _reg3, \ ++ _filter0, _filter1, _filter2, _filter3) \ ++( { \ ++ __m128i _vec0, _vec1; \ ++ \ ++ _vec0 = __lsx_dp2_h_b(_reg0, _filter0); \ ++ _vec0 = __lsx_dp2add_h_b(_vec0, _reg1, _filter1); \ ++ _vec1 = __lsx_dp2_h_b(_reg2, _filter2); \ ++ _vec1 = __lsx_dp2add_h_b(_vec1, _reg3, _filter3); \ ++ _vec0 = __lsx_vsadd_h(_vec0, _vec1); \ ++ \ ++ _vec0; \ ++} ) ++ ++#define HORIZ_8TAP_FILT(_src0, _src1, _mask0, _mask1, _mask2, _mask3, \ ++ _filt_h0, _filt_h1, _filt_h2, _filt_h3) \ ++( { \ ++ __m128i _tmp0, _tmp1, _tmp2, _tmp3; \ ++ __m128i _out; \ ++ \ ++ LSX_DUP4_ARG3(__lsx_vshuf_b, _src1, _src0, _mask0, _src1, _src0, _mask1, _src1,\ ++ _src0, _mask2, _src1, _src0, _mask3, _tmp0, _tmp1, _tmp2, _tmp3);\ ++ _out = FILT_8TAP_DPADD_S_H(_tmp0, _tmp1, _tmp2, _tmp3, _filt_h0, _filt_h1, \ ++ _filt_h2, _filt_h3); \ ++ _out = __lsx_vsrari_h(_out, 7); \ ++ _out = __lsx_vsat_h(_out, 7); \ ++ \ ++ _out; \ ++} ) ++ ++#define LSX_LD_4(_src, _stride, _src0, _src1, _src2, _src3) \ ++{ \ ++ _src0 = __lsx_vld(_src, 0); \ ++ _src += _stride; \ ++ _src1 = __lsx_vld(_src, 0); \ ++ _src += _stride; \ ++ _src2 = __lsx_vld(_src, 0); \ ++ _src += _stride; \ ++ _src3 = __lsx_vld(_src, 0); \ ++} ++ ++#define LSX_ST_4(_dst0, _dst1, _dst2, _dst3, _dst, _stride) \ ++{ \ ++ __lsx_vst(_dst0, _dst, 0); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst1, _dst, 0); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst2, _dst, 0); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst3, _dst, 0); \ ++} ++ ++#define LSX_LD_4_16(_src, _stride, _src0, _src1, _src2, _src3) \ ++{ \ ++ _src0 = __lsx_vld(_src, 16); \ ++ _src += _stride; \ ++ _src1 = __lsx_vld(_src, 16); \ ++ _src += _stride; \ ++ _src2 = __lsx_vld(_src, 16); \ ++ _src += _stride; \ ++ _src3 = __lsx_vld(_src, 16); \ ++} ++ ++#define LSX_ST_4_16(_dst0, _dst1, _dst2, _dst3, _dst, _stride) \ ++{ \ ++ __lsx_vst(_dst0, _dst, 16); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst1, _dst, 16); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst2, _dst, 16); \ ++ _dst += _stride; \ ++ __lsx_vst(_dst3, _dst, 16); \ ++} ++ ++static void common_hz_8t_4x4_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter) ++{ ++ __m128i src0, src1, src2, src3; ++ __m128i filter0, filter1, filter2, filter3; ++ __m128i mask0, mask1, mask2, mask3; ++ __m128i out, out0, out1; ++ ++ mask0 = __lsx_vld(mc_filt_mask_arr, 16); ++ src -= 3; ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ ++ LSX_LD_4(src, src_stride, src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ HORIZ_8TAP_4WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, ++ filter0, filter1, filter2, filter3, out0, out1); ++ out = __lsx_vssrarni_b_h(out1, out0, 7); ++ out = __lsx_vxori_b(out, 128); ++ __lsx_vstelm_w(out, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_w(out, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_w(out, dst, 0, 2); ++ dst += dst_stride; ++ __lsx_vstelm_w(out, dst, 0, 3); ++} ++ ++static void common_hz_8t_4x8_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter) ++{ ++ int32_t stride = src_stride << 1; ++ __m128i src0, src1, src2, src3; ++ __m128i filter0, filter1, filter2, filter3; ++ __m128i mask0, mask1, mask2, mask3; ++ __m128i out0, out1, out2, out3; ++ ++ mask0 = __lsx_vld(mc_filt_mask_arr, 16); ++ src -= 3; ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); ++ ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ src += stride; ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ HORIZ_8TAP_4WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, ++ filter0, filter1, filter2, filter3, out0, out1); ++ src += stride; ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ src += stride; ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ HORIZ_8TAP_4WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, ++ filter0, filter1, filter2, filter3, out2, out3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ __lsx_vstelm_w(out0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_w(out0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_w(out0, dst, 0, 2); ++ dst += dst_stride; ++ __lsx_vstelm_w(out0, dst, 0, 3); ++ dst += dst_stride; ++ __lsx_vstelm_w(out1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_w(out1, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_w(out1, dst, 0, 2); ++ dst += dst_stride; ++ __lsx_vstelm_w(out1, dst, 0, 3); ++} ++ ++static void common_hz_8t_4w_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ if (height == 4) { ++ common_hz_8t_4x4_lsx(src, src_stride, dst, dst_stride, filter); ++ } else if (height == 8) { ++ common_hz_8t_4x8_lsx(src, src_stride, dst, dst_stride, filter); ++ } ++} ++ ++static void common_hz_8t_8x4_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter) ++{ ++ __m128i src0, src1, src2, src3; ++ __m128i filter0, filter1, filter2, filter3; ++ __m128i mask0, mask1, mask2, mask3; ++ __m128i out0, out1, out2, out3; ++ ++ mask0 = __lsx_vld(mc_filt_mask_arr, 0); ++ src -= 3; ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); ++ ++ LSX_LD_4(src, src_stride, src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, ++ filter0, filter1, filter2, filter3, out0, out1, out2, out3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ __lsx_vstelm_d(out0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(out0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(out1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(out1, dst, 0, 1); ++} ++ ++static void common_hz_8t_8x8mult_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ uint32_t loop_cnt = height >> 2; ++ int32_t stride = src_stride << 1; ++ __m128i src0, src1, src2, src3; ++ __m128i filter0, filter1, filter2, filter3; ++ __m128i mask0, mask1, mask2, mask3; ++ __m128i out0, out1, out2, out3; ++ ++ mask0 = __lsx_vld(mc_filt_mask_arr, 0); ++ src -= 3; ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); ++ ++ for (; loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ src += stride; ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, ++ filter0, filter1, filter2, filter3, out0, out1, out2, out3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ __lsx_vstelm_d(out0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(out0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(out1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(out1, dst, 0, 1); ++ dst += dst_stride; ++ src += stride; ++ } ++} ++ ++static void common_hz_8t_8w_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ if (height == 4) { ++ common_hz_8t_8x4_lsx(src, src_stride, dst, dst_stride, filter); ++ } else { ++ common_hz_8t_8x8mult_lsx(src, src_stride, dst, dst_stride, filter, height); ++ } ++} ++ ++static void common_hz_8t_16w_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ uint32_t loop_cnt = height >> 1; ++ int32_t stride = src_stride << 1; ++ __m128i src0, src1, src2, src3; ++ __m128i filter0, filter1, filter2, filter3; ++ __m128i mask0, mask1, mask2, mask3; ++ __m128i out0, out1, out2, out3; ++ ++ mask0 = __lsx_vld(mc_filt_mask_arr, 0); ++ src -= 3; ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); ++ ++ for (; loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src2); ++ LSX_DUP2_ARG2(__lsx_vld, src, 8, src + src_stride, 8, src1, src3); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, ++ filter0, filter1, filter2, filter3, out0, out1, out2, out3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ __lsx_vst(out0, dst, 0); ++ dst += dst_stride; ++ __lsx_vst(out1, dst, 0); ++ dst += dst_stride; ++ src += stride; ++ } ++} ++ ++static void common_hz_8t_32w_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ uint32_t loop_cnt = height >> 1; ++ __m128i src0, src1, src2, src3; ++ __m128i filter0, filter1, filter2, filter3; ++ __m128i mask0, mask1, mask2, mask3; ++ __m128i out0, out1, out2, out3; ++ __m128i shuff = {0x0F0E0D0C0B0A0908, 0x1716151413121110}; ++ ++ mask0 = __lsx_vld(mc_filt_mask_arr, 0); ++ src -= 3; ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); ++ ++ for (; loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src2); ++ src3 = __lsx_vld(src, 24); ++ src1 = __lsx_vshuf_b(src2, src0, shuff); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, ++ filter0, filter1, filter2, filter3, out0, out1, out2, out3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ __lsx_vst(out0, dst, 0); ++ __lsx_vst(out1, dst, 16); ++ ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src2); ++ src3 = __lsx_vld(src, 24); ++ src1 = __lsx_vshuf_b(src2, src0, shuff); ++ src += src_stride; ++ ++ dst += dst_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, ++ filter0, filter1, filter2, filter3, out0, out1, out2, out3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ __lsx_vst(out0, dst, 0); ++ __lsx_vst(out1, dst, 16); ++ dst += dst_stride; ++ } ++} ++ ++static void common_hz_8t_64w_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ int32_t loop_cnt = height; ++ __m128i src0, src1, src2, src3; ++ __m128i filter0, filter1, filter2, filter3; ++ __m128i mask0, mask1, mask2, mask3; ++ __m128i out0, out1, out2, out3; ++ __m128i shuff = {0x0F0E0D0C0B0A0908, 0x1716151413121110}; ++ ++ mask0 = __lsx_vld(mc_filt_mask_arr, 0); ++ src -= 3; ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); ++ ++ for (; loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src2); ++ src3 = __lsx_vld(src, 24); ++ src1 = __lsx_vshuf_b(src2, src0, shuff); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, ++ filter0, filter1, filter2, filter3, out0, out1, out2, out3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ __lsx_vst(out0, dst, 0); ++ __lsx_vst(out1, dst, 16); ++ ++ LSX_DUP2_ARG2(__lsx_vld, src, 32, src, 48, src0, src2); ++ src3 = __lsx_vld(src, 56); ++ src1 = __lsx_vshuf_b(src2, src0, shuff); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, ++ filter0, filter1, filter2, filter3, out0, out1, out2, out3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ __lsx_vst(out0, dst, 32); ++ __lsx_vst(out1, dst, 48); ++ src += src_stride; ++ dst += dst_stride; ++ } ++} ++ ++static void common_vt_8t_4w_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ uint32_t loop_cnt = height >> 2; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; ++ __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; ++ __m128i reg0, reg1, reg2, reg3, reg4; ++ __m128i filter0, filter1, filter2, filter3; ++ __m128i out0, out1; ++ ++ src -= (3 * src_stride); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); ++ LSX_LD_4(src, src_stride, src0, src1, src2, src3); ++ src += src_stride; ++ src4 = __lsx_vld(src, 0); ++ src += src_stride; ++ src5 = __lsx_vld(src, 0); ++ src += src_stride; ++ src6 = __lsx_vld(src, 0); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, tmp4, tmp5); ++ LSX_DUP2_ARG2(__lsx_vilvl_d, tmp3, tmp0, tmp4, tmp1, reg0, reg1); ++ reg2 = __lsx_vilvl_d(tmp5, tmp2); ++ LSX_DUP2_ARG2(__lsx_vxori_b, reg0, 128, reg1, 128, reg0, reg1); ++ reg2 = __lsx_vxori_b(reg2, 128); ++ ++ for (;loop_cnt--;) { ++ LSX_LD_4(src, src_stride, src7, src8, src9, src10); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP2_ARG2(__lsx_vilvl_d, tmp1, tmp0, tmp3, tmp2, reg3, reg4); ++ LSX_DUP2_ARG2(__lsx_vxori_b, reg3, 128, reg4, 128, reg3, reg4); ++ out0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, reg3, filter0, filter1, filter2, filter3); ++ out1 = FILT_8TAP_DPADD_S_H(reg1, reg2, reg3, reg4, filter0, filter1, filter2, filter3); ++ out0 = __lsx_vssrarni_b_h(out1, out0, 7); ++ out0 = __lsx_vxori_b(out0, 128); ++ __lsx_vstelm_w(out0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_w(out0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_w(out0, dst, 0, 2); ++ dst += dst_stride; ++ __lsx_vstelm_w(out0, dst, 0, 3); ++ dst += dst_stride; ++ ++ reg0 = reg2; ++ reg1 = reg3; ++ reg2 = reg4; ++ src6 = src10; ++ } ++} ++ ++static void common_vt_8t_8w_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ uint32_t loop_cnt = height >> 2; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; ++ __m128i tmp0, tmp1, tmp2, tmp3; ++ __m128i reg0, reg1, reg2, reg3, reg4, reg5; ++ __m128i filter0, filter1, filter2, filter3; ++ __m128i out0, out1, out2, out3; ++ ++ src -= (3 * src_stride); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); ++ ++ LSX_LD_4(src, src_stride, src0, src1, src2, src3); ++ src += src_stride; ++ src4 = __lsx_vld(src, 0); ++ src += src_stride; ++ src5 = __lsx_vld(src, 0); ++ src += src_stride; ++ src6 = __lsx_vld(src, 0); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, reg0, reg1, reg2, reg3); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, reg4, reg5); ++ ++ for (;loop_cnt--;) { ++ LSX_LD_4(src, src_stride, src7, src8, src9, src10); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ tmp0, tmp1, tmp2, tmp3); ++ out0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, tmp0, filter0, filter1, filter2, filter3); ++ out1 = FILT_8TAP_DPADD_S_H(reg3, reg4, reg5, tmp1, filter0, filter1, filter2, filter3); ++ out2 = FILT_8TAP_DPADD_S_H(reg1, reg2, tmp0, tmp2, filter0, filter1, filter2, filter3); ++ out3 = FILT_8TAP_DPADD_S_H(reg4, reg5, tmp1, tmp3, filter0, filter1, filter2, filter3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ __lsx_vstelm_d(out0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(out0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(out1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(out1, dst, 0, 1); ++ dst += dst_stride; ++ ++ reg0 = reg2; ++ reg1 = tmp0; ++ reg2 = tmp2; ++ reg3 = reg5; ++ reg4 = tmp1; ++ reg5 = tmp3; ++ src6 = src10; ++ } ++} ++ ++static void common_vt_8t_16w_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ uint32_t loop_cnt = height >> 2; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; ++ __m128i filter0, filter1, filter2, filter3; ++ __m128i reg0, reg1, reg2, reg3, reg4, reg5; ++ __m128i reg6, reg7, reg8, reg9, reg10, reg11; ++ __m128i tmp0, tmp1, tmp2, tmp3; ++ ++ src -= (3 * src_stride); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); ++ LSX_LD_4(src, src_stride, src0, src1, src2, src3); ++ src += src_stride; ++ src4 = __lsx_vld(src, 0); ++ src += src_stride; ++ src5 = __lsx_vld(src, 0); ++ src += src_stride; ++ src6 = __lsx_vld(src, 0); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, reg0, reg1, reg2, reg3); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, reg4, reg5); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, reg6, reg7, reg8, reg9); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, reg10, reg11); ++ ++ for (;loop_cnt--;) { ++ LSX_LD_4(src, src_stride, src7, src8, src9, src10); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src4, src5, src7, src8); ++ tmp0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, src0, filter0, filter1, filter2, filter3); ++ tmp1 = FILT_8TAP_DPADD_S_H(reg3, reg4, reg5, src1, filter0, filter1, filter2, filter3); ++ tmp2 = FILT_8TAP_DPADD_S_H(reg6, reg7, reg8, src4, filter0, filter1, filter2, filter3); ++ tmp3 = FILT_8TAP_DPADD_S_H(reg9, reg10, reg11, src5, filter0, filter1, filter2, filter3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ __lsx_vst(tmp0, dst, 0); ++ dst += dst_stride; ++ __lsx_vst(tmp1, dst, 0); ++ dst += dst_stride; ++ tmp0 = FILT_8TAP_DPADD_S_H(reg1, reg2, src0, src2, filter0, filter1, filter2, filter3); ++ tmp1 = FILT_8TAP_DPADD_S_H(reg4, reg5, src1, src3, filter0, filter1, filter2, filter3); ++ tmp2 = FILT_8TAP_DPADD_S_H(reg7, reg8, src4, src7, filter0, filter1, filter2, filter3); ++ tmp3 = FILT_8TAP_DPADD_S_H(reg10, reg11, src5, src8, filter0, filter1, filter2, filter3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ __lsx_vst(tmp0, dst, 0); ++ dst += dst_stride; ++ __lsx_vst(tmp1, dst, 0); ++ dst += dst_stride; ++ ++ reg0 = reg2; ++ reg1 = src0; ++ reg2 = src2; ++ reg3 = reg5; ++ reg4 = src1; ++ reg5 = src3; ++ reg6 = reg8; ++ reg7 = src4; ++ reg8 = src7; ++ reg9 = reg11; ++ reg10 = src5; ++ reg11 = src8; ++ src6 = src10; ++ } ++} ++ ++static void common_vt_8t_16w_mult_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height, ++ int32_t width) ++{ ++ const uint8_t *src_tmp; ++ uint8_t *dst_tmp; ++ uint32_t cnt = width >> 4; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; ++ __m128i filter0, filter1, filter2, filter3; ++ __m128i reg0, reg1, reg2, reg3, reg4, reg5; ++ __m128i reg6, reg7, reg8, reg9, reg10, reg11; ++ __m128i tmp0, tmp1, tmp2, tmp3; ++ ++ src -= (3 * src_stride); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); ++ for (;cnt--;) { ++ uint32_t loop_cnt = height >> 2; ++ ++ src_tmp = src; ++ dst_tmp = dst; ++ ++ LSX_LD_4(src_tmp, src_stride, src0, src1, src2, src3); ++ src_tmp += src_stride; ++ src4 = __lsx_vld(src_tmp, 0); ++ src_tmp += src_stride; ++ src5 = __lsx_vld(src_tmp, 0); ++ src_tmp += src_stride; ++ src6 = __lsx_vld(src_tmp, 0); ++ src_tmp += src_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ reg0, reg1, reg2, reg3); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, reg4, reg5); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ reg6, reg7, reg8, reg9); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, reg10, reg11); ++ ++ for (;loop_cnt--;) { ++ LSX_LD_4(src_tmp, src_stride, src7, src8, src9, src10); ++ src_tmp += src_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src4, src5, src7, src8); ++ tmp0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, src0, filter0, filter1, filter2, filter3); ++ tmp1 = FILT_8TAP_DPADD_S_H(reg3, reg4, reg5, src1, filter0, filter1, filter2, filter3); ++ tmp2 = FILT_8TAP_DPADD_S_H(reg6, reg7, reg8, src4, filter0, filter1, filter2, filter3); ++ tmp3 = FILT_8TAP_DPADD_S_H(reg9, reg10, reg11, src5, filter0, filter1, filter2, filter3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ __lsx_vst(tmp0, dst_tmp, 0); ++ dst_tmp += dst_stride; ++ __lsx_vst(tmp1, dst_tmp, 0); ++ dst_tmp += dst_stride; ++ tmp0 = FILT_8TAP_DPADD_S_H(reg1, reg2, src0, src2, filter0, filter1, filter2, filter3); ++ tmp1 = FILT_8TAP_DPADD_S_H(reg4, reg5, src1, src3, filter0, filter1, filter2, filter3); ++ tmp2 = FILT_8TAP_DPADD_S_H(reg7, reg8, src4, src7, filter0, filter1, filter2, filter3); ++ tmp3 = FILT_8TAP_DPADD_S_H(reg10, reg11, src5, src8, filter0, filter1, filter2, filter3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ __lsx_vst(tmp0, dst_tmp, 0); ++ dst_tmp += dst_stride; ++ __lsx_vst(tmp1, dst_tmp, 0); ++ dst_tmp += dst_stride; ++ ++ reg0 = reg2; ++ reg1 = src0; ++ reg2 = src2; ++ reg3 = reg5; ++ reg4 = src1; ++ reg5 = src3; ++ reg6 = reg8; ++ reg7 = src4; ++ reg8 = src7; ++ reg9 = reg11; ++ reg10 = src5; ++ reg11 = src8; ++ src6 = src10; ++ } ++ src += 16; ++ dst += 16; ++ } ++} ++ ++static void common_vt_8t_32w_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ common_vt_8t_16w_mult_lsx(src, src_stride, dst, dst_stride, filter, height, 32); ++} ++ ++static void common_vt_8t_64w_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) ++{ ++ common_vt_8t_16w_mult_lsx(src, src_stride, dst, dst_stride, filter, height, 64); ++} ++ ++static void common_hv_8ht_8vt_4w_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter_horiz, ++ const int8_t *filter_vert, ++ int32_t height) ++{ ++ uint32_t loop_cnt = height >> 2; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; ++ __m128i filt_hz0, filt_hz1, filt_hz2, filt_hz3; ++ __m128i filt_vt0, filt_vt1, filt_vt2, filt_vt3; ++ __m128i mask0, mask1, mask2, mask3; ++ __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; ++ __m128i out0, out1; ++ __m128i shuff = {0x0F0E0D0C0B0A0908, 0x1716151413121110}; ++ ++ mask0 = __lsx_vld(mc_filt_mask_arr, 16); ++ src -= (3 + 3 * src_stride); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_horiz, 0, filter_horiz, 2, filter_horiz, 4, ++ filter_horiz, 6, filt_hz0, filt_hz1, filt_hz2, filt_hz3); ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ ++ LSX_LD_4(src, src_stride, src0, src1, src2, src3); ++ src += src_stride; ++ src4 = __lsx_vld(src, 0); ++ src += src_stride; ++ src5 = __lsx_vld(src, 0); ++ src += src_stride; ++ src6 = __lsx_vld(src, 0); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ ++ tmp0 = HORIZ_8TAP_FILT(src0, src1, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ tmp2 = HORIZ_8TAP_FILT(src2, src3, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ tmp4 = HORIZ_8TAP_FILT(src4, src5, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ tmp5 = HORIZ_8TAP_FILT(src5, src6, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, tmp2, tmp0, shuff, tmp4, tmp2, shuff, tmp1, tmp3); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_vert, 0, filter_vert, 2, filter_vert, 4, ++ filter_vert, 6, filt_vt0, filt_vt1, filt_vt2, filt_vt3); ++ LSX_DUP2_ARG2(__lsx_vpackev_b, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ tmp2 = __lsx_vpackev_b(tmp5, tmp4); ++ ++ for (;loop_cnt--;) { ++ LSX_LD_4(src, src_stride, src7, src8, src9, src10); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); ++ tmp3 = HORIZ_8TAP_FILT(src7, src8, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ tmp4 = __lsx_vshuf_b(tmp3, tmp5, shuff); ++ tmp4 = __lsx_vpackev_b(tmp3, tmp4); ++ out0 = FILT_8TAP_DPADD_S_H(tmp0, tmp1, tmp2, tmp4, filt_vt0, filt_vt1, ++ filt_vt2, filt_vt3); ++ src1 = HORIZ_8TAP_FILT(src9, src10, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ src0 = __lsx_vshuf_b(src1, tmp3, shuff); ++ src0 = __lsx_vpackev_b(src1, src0); ++ out1 = FILT_8TAP_DPADD_S_H(tmp1, tmp2, tmp4, src0, filt_vt0, filt_vt1, ++ filt_vt2, filt_vt3); ++ out0 = __lsx_vssrarni_b_h(out1, out0, 7); ++ out0 = __lsx_vxori_b(out0, 128); ++ __lsx_vstelm_w(out0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_w(out0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_w(out0, dst, 0, 2); ++ dst += dst_stride; ++ __lsx_vstelm_w(out0, dst, 0, 3); ++ dst += dst_stride; ++ ++ tmp5 = src1; ++ tmp0 = tmp2; ++ tmp1 = tmp4; ++ tmp2 = src0; ++ } ++} ++ ++static void common_hv_8ht_8vt_8w_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter_horiz, ++ const int8_t *filter_vert, ++ int32_t height) ++{ ++ uint32_t loop_cnt = height >> 2; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; ++ __m128i filt_hz0, filt_hz1, filt_hz2, filt_hz3; ++ __m128i filt_vt0, filt_vt1, filt_vt2, filt_vt3; ++ __m128i mask0, mask1, mask2, mask3; ++ __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6; ++ __m128i out0, out1; ++ ++ mask0 = __lsx_vld(mc_filt_mask_arr, 0); ++ src -= (3 + 3 * src_stride); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_horiz, 0, filter_horiz, 2, filter_horiz, 4, ++ filter_horiz, 6, filt_hz0, filt_hz1, filt_hz2, filt_hz3); ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ ++ LSX_LD_4(src, src_stride, src0, src1, src2, src3); ++ src += src_stride; ++ src4 = __lsx_vld(src, 0); ++ src += src_stride; ++ src5 = __lsx_vld(src, 0); ++ src += src_stride; ++ src6 = __lsx_vld(src, 0); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ ++ src0 = HORIZ_8TAP_FILT(src0, src0, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ src1 = HORIZ_8TAP_FILT(src1, src1, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ src2 = HORIZ_8TAP_FILT(src2, src2, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ src3 = HORIZ_8TAP_FILT(src3, src3, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ src4 = HORIZ_8TAP_FILT(src4, src4, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ src5 = HORIZ_8TAP_FILT(src5, src5, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ src6 = HORIZ_8TAP_FILT(src6, src6, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_vert, 0, filter_vert, 2, filter_vert, 4, ++ filter_vert, 6, filt_vt0, filt_vt1, filt_vt2, filt_vt3); ++ LSX_DUP4_ARG2(__lsx_vpackev_b, src1, src0, src3, src2, src5, src4, ++ src2, src1, tmp0, tmp1, tmp2, tmp4); ++ LSX_DUP2_ARG2(__lsx_vpackev_b, src4, src3, src6, src5, tmp5, tmp6); ++ ++ for (;loop_cnt--;) { ++ LSX_LD_4(src, src_stride, src7, src8, src9, src10); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); ++ src7 = HORIZ_8TAP_FILT(src7, src7, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ tmp3 = __lsx_vpackev_b(src7, src6); ++ out0 = FILT_8TAP_DPADD_S_H(tmp0, tmp1, tmp2, tmp3, filt_vt0, filt_vt1, ++ filt_vt2, filt_vt3); ++ src8 = HORIZ_8TAP_FILT(src8, src8, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ src0 = __lsx_vpackev_b(src8, src7); ++ out1 = FILT_8TAP_DPADD_S_H(tmp4, tmp5, tmp6, src0, filt_vt0, filt_vt1, ++ filt_vt2, filt_vt3); ++ src9 = HORIZ_8TAP_FILT(src9, src9, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ src1 = __lsx_vpackev_b(src9, src8); ++ src3 = FILT_8TAP_DPADD_S_H(tmp1, tmp2, tmp3, src1, filt_vt0, filt_vt1, ++ filt_vt2, filt_vt3); ++ src10 = HORIZ_8TAP_FILT(src10, src10, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ src2 = __lsx_vpackev_b(src10, src9); ++ src4 = FILT_8TAP_DPADD_S_H(tmp5, tmp6, src0, src2, filt_vt0, filt_vt1, ++ filt_vt2, filt_vt3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, src4, src3, 7, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ __lsx_vstelm_d(out0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(out0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(out1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(out1, dst, 0, 1); ++ dst += dst_stride; ++ ++ src6 = src10; ++ tmp0 = tmp2; ++ tmp1 = tmp3; ++ tmp2 = src1; ++ tmp4 = tmp6; ++ tmp5 = src0; ++ tmp6 = src2; ++ } ++} ++ ++static void common_hv_8ht_8vt_16w_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter_horiz, ++ const int8_t *filter_vert, ++ int32_t height) ++{ ++ int32_t multiple8_cnt; ++ ++ for (multiple8_cnt = 2; multiple8_cnt--;) { ++ common_hv_8ht_8vt_8w_lsx(src, src_stride, dst, dst_stride, filter_horiz, ++ filter_vert, height); ++ src += 8; ++ dst += 8; ++ } ++} ++ ++static void common_hv_8ht_8vt_32w_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter_horiz, ++ const int8_t *filter_vert, ++ int32_t height) ++{ ++ int32_t multiple8_cnt; ++ ++ for (multiple8_cnt = 4; multiple8_cnt--;) { ++ common_hv_8ht_8vt_8w_lsx(src, src_stride, dst, dst_stride, filter_horiz, ++ filter_vert, height); ++ src += 8; ++ dst += 8; ++ } ++} ++ ++static void common_hv_8ht_8vt_64w_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter_horiz, ++ const int8_t *filter_vert, ++ int32_t height) ++{ ++ int32_t multiple8_cnt; ++ ++ for (multiple8_cnt = 8; multiple8_cnt--;) { ++ common_hv_8ht_8vt_8w_lsx(src, src_stride, dst, dst_stride, filter_horiz, ++ filter_vert, height); ++ src += 8; ++ dst += 8; ++ } ++} ++ ++static void copy_width8_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ int32_t height) ++{ ++ int32_t cnt = height >> 2; ++ __m128i src0, src1, src2, src3; ++ ++ for (;cnt--;) { ++ src0 = __lsx_vldrepl_d(src, 0); ++ src += src_stride; ++ src1 = __lsx_vldrepl_d(src, 0); ++ src += src_stride; ++ src2 = __lsx_vldrepl_d(src, 0); ++ src += src_stride; ++ src3 = __lsx_vldrepl_d(src, 0); ++ src += src_stride; ++ __lsx_vstelm_d(src0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(src1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(src2, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(src3, dst, 0, 0); ++ dst += dst_stride; ++ } ++} ++ ++static void copy_width16_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ int32_t height) ++{ ++ int32_t cnt = height >> 2; ++ __m128i src0, src1, src2, src3; ++ ++ for (;cnt--;) { ++ LSX_LD_4(src, src_stride, src0, src1, src2, src3); ++ src += src_stride; ++ LSX_ST_4(src0, src1, src2, src3, dst, dst_stride); ++ dst += dst_stride; ++ } ++} ++ ++static void copy_width32_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ int32_t height) ++{ ++ int32_t cnt = height >> 2; ++ const uint8_t *src_tmp = src; ++ uint8_t *dst_tmp = dst; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ ++ for (;cnt--;) { ++ LSX_LD_4(src_tmp, src_stride, src0, src1, src2, src3); ++ src_tmp += src_stride; ++ ++ LSX_LD_4_16(src, src_stride, src4, src5, src6, src7); ++ src += src_stride; ++ LSX_ST_4(src0, src1, src2, src3, dst_tmp, dst_stride); ++ dst_tmp += dst_stride; ++ LSX_ST_4_16(src4, src5, src6, src7, dst, dst_stride); ++ dst += dst_stride; ++ } ++} ++ ++static void copy_width64_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ int32_t height) ++{ ++ int32_t cnt = height >> 2; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i src8, src9, src10, src11, src12, src13, src14, src15; ++ ++ for (;cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src0, src1, src2, src3); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src4, src5, src6, src7); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src8, src9, src10, src11); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src12, src13, src14, src15); ++ src += src_stride; ++ __lsx_vst(src0, dst, 0); ++ __lsx_vst(src1, dst, 16); ++ __lsx_vst(src2, dst, 32); ++ __lsx_vst(src3, dst, 48); ++ dst += dst_stride; ++ __lsx_vst(src4, dst, 0); ++ __lsx_vst(src5, dst, 16); ++ __lsx_vst(src6, dst, 32); ++ __lsx_vst(src7, dst, 48); ++ dst += dst_stride; ++ __lsx_vst(src8, dst, 0); ++ __lsx_vst(src9, dst, 16); ++ __lsx_vst(src10, dst, 32); ++ __lsx_vst(src11, dst, 48); ++ dst += dst_stride; ++ __lsx_vst(src12, dst, 0); ++ __lsx_vst(src13, dst, 16); ++ __lsx_vst(src14, dst, 32); ++ __lsx_vst(src15, dst, 48); ++ dst += dst_stride; ++ } ++} ++ ++static void common_hz_8t_and_aver_dst_4x4_lsx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter) ++{ ++ uint8_t *dst_tmp = dst; ++ __m128i src0, src1, src2, src3; ++ __m128i filter0, filter1, filter2, filter3; ++ __m128i mask0, mask1, mask2, mask3; ++ __m128i tmp0, tmp1; ++ __m128i dst0, dst1, dst2, dst3; ++ ++ mask0 = __lsx_vld(mc_filt_mask_arr, 16); ++ src -= 3; ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); ++ LSX_LD_4(src, src_stride, src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ HORIZ_8TAP_4WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, ++ filter0, filter1, filter2, filter3, tmp0, tmp1); ++ dst0 = __lsx_vldrepl_w(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ dst1 = __lsx_vldrepl_w(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ dst2 = __lsx_vldrepl_w(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ dst3 = __lsx_vldrepl_w(dst_tmp, 0); ++ dst0 = __lsx_vilvl_w(dst1, dst0); ++ dst1 = __lsx_vilvl_w(dst3, dst2); ++ dst0 = __lsx_vilvl_d(dst1, dst0); ++ tmp0 = __lsx_vssrarni_b_h(tmp1, tmp0, 7); ++ tmp0 = __lsx_vxori_b(tmp0, 128); ++ dst0 = __lsx_vavgr_bu(tmp0, dst0); ++ __lsx_vstelm_w(dst0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_w(dst0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_w(dst0, dst, 0, 2); ++ dst += dst_stride; ++ __lsx_vstelm_w(dst0, dst, 0, 3); ++} ++ ++static void common_hz_8t_and_aver_dst_4x8_lsx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter) ++{ ++ uint8_t *dst_tmp = dst; ++ __m128i src0, src1, src2, src3, filter0, filter1, filter2, filter3; ++ __m128i mask0, mask1, mask2, mask3, tmp0, tmp1, tmp2, tmp3; ++ __m128i dst0, dst1; ++ ++ mask0 = __lsx_vld(mc_filt_mask_arr, 16); ++ src -= 3; ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); ++ ++ LSX_LD_4(src, src_stride, src0, src1, src2, src3); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ tmp0 = __lsx_vldrepl_w(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ tmp1 = __lsx_vldrepl_w(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ tmp2 = __lsx_vldrepl_w(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ tmp3 = __lsx_vldrepl_w(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ tmp0 = __lsx_vilvl_w(tmp1, tmp0); ++ tmp1 = __lsx_vilvl_w(tmp3, tmp2); ++ dst0 = __lsx_vilvl_d(tmp1, tmp0); ++ ++ tmp0 = __lsx_vldrepl_w(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ tmp1 = __lsx_vldrepl_w(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ tmp2 = __lsx_vldrepl_w(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ tmp3 = __lsx_vldrepl_w(dst_tmp, 0); ++ tmp0 = __lsx_vilvl_w(tmp1, tmp0); ++ tmp1 = __lsx_vilvl_w(tmp3, tmp2); ++ dst1 = __lsx_vilvl_d(tmp1, tmp0); ++ HORIZ_8TAP_4WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, ++ filter0, filter1, filter2, filter3, tmp0, tmp1); ++ LSX_LD_4(src, src_stride, src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ HORIZ_8TAP_4WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, ++ filter0, filter1, filter2, filter3, tmp2, tmp3); ++ LSX_DUP4_ARG3(__lsx_vssrarni_b_h, tmp0, tmp0, 7, tmp1, tmp1, 7, tmp2, tmp2, 7, ++ tmp3, tmp3, 7, tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP2_ARG2(__lsx_vilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ LSX_DUP2_ARG2(__lsx_vavgr_bu, tmp0, dst0, tmp1, dst1, dst0, dst1); ++ __lsx_vstelm_w(dst0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_w(dst0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_w(dst0, dst, 0, 2); ++ dst += dst_stride; ++ __lsx_vstelm_w(dst0, dst, 0, 3); ++ dst += dst_stride; ++ __lsx_vstelm_w(dst1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_w(dst1, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_w(dst1, dst, 0, 2); ++ dst += dst_stride; ++ __lsx_vstelm_w(dst1, dst, 0, 3); ++} ++ ++static void common_hz_8t_and_aver_dst_4w_lsx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ if (height == 4) { ++ common_hz_8t_and_aver_dst_4x4_lsx(src, src_stride, dst, dst_stride, filter); ++ } else if (height == 8) { ++ common_hz_8t_and_aver_dst_4x8_lsx(src, src_stride, dst, dst_stride, filter); ++ } ++} ++ ++static void common_hz_8t_and_aver_dst_8w_lsx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ int32_t loop_cnt = height >> 2; ++ uint8_t *dst_tmp = dst; ++ __m128i src0, src1, src2, src3, filter0, filter1, filter2, filter3; ++ __m128i mask0, mask1, mask2, mask3; ++ __m128i tmp0, tmp1, tmp2, tmp3; ++ __m128i dst0, dst1, dst2, dst3; ++ ++ mask0 = __lsx_vld(mc_filt_mask_arr, 0); ++ src -= 3; ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); ++ ++ for (;loop_cnt--;) { ++ LSX_LD_4(src, src_stride, src0, src1, src2, src3); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, ++ filter0, filter1, filter2, filter3, tmp0, tmp1, tmp2, tmp3); ++ dst0 = __lsx_vldrepl_d(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ dst1 = __lsx_vldrepl_d(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ dst2 = __lsx_vldrepl_d(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ dst3 = __lsx_vldrepl_d(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ LSX_DUP2_ARG2(__lsx_vilvl_d, dst1, dst0, dst3, dst2, dst0, dst1); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 7, tmp3, tmp2, 7, tmp0, tmp1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ LSX_DUP2_ARG2(__lsx_vavgr_bu, tmp0, dst0, tmp1, dst1, dst0, dst1); ++ __lsx_vstelm_d(dst0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(dst0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(dst1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(dst1, dst, 0, 1); ++ dst += dst_stride; ++ } ++} ++ ++static void common_hz_8t_and_aver_dst_16w_lsx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ int32_t loop_cnt = height >> 1; ++ uint8_t *dst_tmp = dst; ++ __m128i src0, src1, src2, src3, filter0, filter1, filter2, filter3; ++ __m128i mask0, mask1, mask2, mask3, dst0, dst1, dst2, dst3; ++ __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; ++ __m128i tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15; ++ ++ mask0 = __lsx_vld(mc_filt_mask_arr, 0); ++ src -= 3; ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); ++ ++ for (;loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 8, src0, src1); ++ src += src_stride; ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 8, src2, src3); ++ src += src_stride; ++ dst0 = __lsx_vld(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ dst1 = __lsx_vld(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, src2, src2, ++ mask0, src3, src3, mask0, tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, src2, src2, ++ mask1, src3, src3, mask1, tmp4, tmp5, tmp6, tmp7); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, src2, src2, ++ mask2, src3, src3, mask2, tmp8, tmp9, tmp10, tmp11); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, src2, src2, ++ mask3, src3, src3, mask3, tmp12, tmp13, tmp14, tmp15); ++ LSX_DUP4_ARG2(__lsx_dp2_h_b, tmp0, filter0, tmp1, filter0, tmp2, filter0, tmp3, ++ filter0, tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP4_ARG2(__lsx_dp2_h_b, tmp8, filter2, tmp9, filter2, tmp10, filter2, tmp11, ++ filter2, tmp8, tmp9, tmp10, tmp11); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, tmp0, tmp4, filter1, tmp1, tmp5, filter1, tmp2, ++ tmp6, filter1, tmp3, tmp7, filter1, tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, tmp8, tmp12, filter3, tmp9, tmp13, filter3, tmp10, ++ tmp14, filter3, tmp11, tmp15, filter3, tmp4, tmp5, tmp6, tmp7); ++ LSX_DUP4_ARG2(__lsx_vsadd_h, tmp0, tmp4, tmp1, tmp5, tmp2, tmp6, tmp3, tmp7, ++ tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 7, tmp3, tmp2, 7, dst2, dst3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, dst2, 128, dst3, 128, dst2, dst3); ++ LSX_DUP2_ARG2(__lsx_vavgr_bu, dst0, dst2, dst1, dst3, dst0, dst1); ++ __lsx_vst(dst0, dst, 0); ++ dst += dst_stride; ++ __lsx_vst(dst1, dst, 0); ++ dst += dst_stride; ++ } ++} ++ ++static void common_hz_8t_and_aver_dst_32w_lsx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ uint32_t loop_cnt = height; ++ uint8_t *dst_tmp = dst; ++ __m128i src0, src1, src2, src3, filter0, filter1, filter2, filter3; ++ __m128i mask0, mask1, mask2, mask3, dst0, dst1; ++ __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; ++ __m128i tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15; ++ __m128i shuff = {0x0F0E0D0C0B0A0908, 0x1716151413121110}; ++ ++ mask0 = __lsx_vld(mc_filt_mask_arr, 0); ++ src -= 3; ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); ++ ++ for (;loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src2); ++ src3 = __lsx_vld(src, 24); ++ src1 = __lsx_vshuf_b(src2, src0, shuff); ++ src += src_stride; ++ LSX_DUP2_ARG2(__lsx_vld, dst_tmp, 0, dst, 16, dst0, dst1); ++ dst_tmp += dst_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, src2, src2, ++ mask0, src3, src3, mask0, tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, src2, src2, ++ mask1, src3, src3, mask1, tmp4, tmp5, tmp6, tmp7); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, src2, src2, ++ mask2, src3, src3, mask2, tmp8, tmp9, tmp10, tmp11); ++ LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, src2, src2, ++ mask3, src3, src3, mask3, tmp12, tmp13, tmp14, tmp15); ++ LSX_DUP4_ARG2(__lsx_dp2_h_b, tmp0, filter0, tmp1, filter0, tmp2, filter0, tmp3, ++ filter0, tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP4_ARG2(__lsx_dp2_h_b, tmp8, filter2, tmp9, filter2, tmp10, filter2, tmp11, ++ filter2, tmp8, tmp9, tmp10, tmp11); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, tmp0, tmp4, filter1, tmp1, tmp5, filter1, tmp2, ++ tmp6, filter1, tmp3, tmp7, filter1, tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP4_ARG3(__lsx_dp2add_h_b, tmp8, tmp12, filter3, tmp9, tmp13, filter3, tmp10, ++ tmp14, filter3, tmp11, tmp15, filter3, tmp4, tmp5, tmp6, tmp7); ++ LSX_DUP4_ARG2(__lsx_vsadd_h, tmp0, tmp4, tmp1, tmp5, tmp2, tmp6, tmp3, tmp7, ++ tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 7, tmp3, tmp2, 7, tmp0, tmp1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ LSX_DUP2_ARG2(__lsx_vavgr_bu, dst0, tmp0, dst1, tmp1, dst0, dst1); ++ __lsx_vst(dst0, dst, 0); ++ __lsx_vst(dst1, dst, 16); ++ dst += dst_stride; ++ } ++} ++ ++static void common_hz_8t_and_aver_dst_64w_lsx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ int32_t loop_cnt = height; ++ __m128i src0, src1, src2, src3; ++ __m128i filter0, filter1, filter2, filter3; ++ __m128i mask0, mask1, mask2, mask3; ++ __m128i out0, out1, out2, out3, dst0, dst1; ++ __m128i shuff = {0x0F0E0D0C0B0A0908, 0x1716151413121110}; ++ ++ mask0 = __lsx_vld(mc_filt_mask_arr, 0); ++ src -= 3; ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); ++ ++ for (;loop_cnt--;) { ++ LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src2); ++ src3 = __lsx_vld(src, 24); ++ src1 = __lsx_vshuf_b(src2, src0, shuff); ++ LSX_DUP2_ARG2(__lsx_vld, dst, 0, dst, 16, dst0, dst1); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, ++ filter0, filter1, filter2, filter3, out0, out1, out2, out3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vavgr_bu, out0, dst0, out1, dst1, out0, out1); ++ __lsx_vst(out0, dst, 0); ++ __lsx_vst(out1, dst, 16); ++ ++ LSX_DUP2_ARG2(__lsx_vld, src, 32, src, 48, src0, src2); ++ src3 = __lsx_vld(src, 56); ++ src1 = __lsx_vshuf_b(src2, src0, shuff); ++ LSX_DUP2_ARG2(__lsx_vld, dst, 32, dst, 48, dst0, dst1); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, ++ filter0, filter1, filter2, filter3, out0, out1, out2, out3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vavgr_bu, out0, dst0, out1, dst1, out0, out1); ++ __lsx_vst(out0, dst, 32); ++ __lsx_vst(out1, dst, 48); ++ src += src_stride; ++ dst += dst_stride; ++ } ++} ++ ++static void common_vt_8t_and_aver_dst_4w_lsx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ uint32_t loop_cnt = height >> 2; ++ uint8_t *dst_tmp = dst; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; ++ __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; ++ __m128i reg0, reg1, reg2, reg3, reg4; ++ __m128i filter0, filter1, filter2, filter3; ++ __m128i out0, out1; ++ ++ src -= (3 * src_stride); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); ++ LSX_LD_4(src, src_stride, src0, src1, src2, src3); ++ src += src_stride; ++ src4 = __lsx_vld(src, 0); ++ src += src_stride; ++ src5 = __lsx_vld(src, 0); ++ src += src_stride; ++ src6 = __lsx_vld(src, 0); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, tmp4, tmp5); ++ LSX_DUP2_ARG2(__lsx_vilvl_d, tmp3, tmp0, tmp4, tmp1, reg0, reg1); ++ reg2 = __lsx_vilvl_d(tmp5, tmp2); ++ LSX_DUP2_ARG2(__lsx_vxori_b, reg0, 128, reg1, 128, reg0, reg1); ++ reg2 = __lsx_vxori_b(reg2, 128); ++ ++ for (;loop_cnt--;) { ++ LSX_LD_4(src, src_stride, src7, src8, src9, src10); ++ src += src_stride; ++ src0 = __lsx_vldrepl_w(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ src1 = __lsx_vldrepl_w(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ src2 = __lsx_vldrepl_w(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ src3 = __lsx_vldrepl_w(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ LSX_DUP2_ARG2(__lsx_vilvl_w, src1, src0, src3, src2, src0, src1); ++ src0 = __lsx_vilvl_d(src1, src0); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, tmp0, tmp1, tmp2, tmp3); ++ LSX_DUP2_ARG2(__lsx_vilvl_d, tmp1, tmp0, tmp3, tmp2, reg3, reg4); ++ LSX_DUP2_ARG2(__lsx_vxori_b, reg3, 128, reg4, 128, reg3, reg4); ++ out0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, reg3, filter0, filter1, filter2, filter3); ++ out1 = FILT_8TAP_DPADD_S_H(reg1, reg2, reg3, reg4, filter0, filter1, filter2, filter3); ++ out0 = __lsx_vssrarni_b_h(out1, out0, 7); ++ out0 = __lsx_vxori_b(out0, 128); ++ out0 = __lsx_vavgr_bu(out0, src0); ++ __lsx_vstelm_w(out0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_w(out0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_w(out0, dst, 0, 2); ++ dst += dst_stride; ++ __lsx_vstelm_w(out0, dst, 0, 3); ++ dst += dst_stride; ++ reg0 = reg2; ++ reg1 = reg3; ++ reg2 = reg4; ++ src6 = src10; ++ } ++} ++ ++static void common_vt_8t_and_aver_dst_8w_lsx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ uint32_t loop_cnt = height >> 2; ++ uint8_t *dst_tmp = dst; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; ++ __m128i tmp0, tmp1, tmp2, tmp3; ++ __m128i reg0, reg1, reg2, reg3, reg4, reg5; ++ __m128i filter0, filter1, filter2, filter3; ++ __m128i out0, out1, out2, out3; ++ ++ src -= (3 * src_stride); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); ++ ++ LSX_LD_4(src, src_stride, src0, src1, src2, src3); ++ src += src_stride; ++ src4 = __lsx_vld(src, 0); ++ src += src_stride; ++ src5 = __lsx_vld(src, 0); ++ src += src_stride; ++ src6 = __lsx_vld(src, 0); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, reg0, reg1, reg2, reg3); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, reg4, reg5); ++ ++ for (;loop_cnt--;) { ++ LSX_LD_4(src, src_stride, src7, src8, src9, src10); ++ src += src_stride; ++ src0 = __lsx_vldrepl_d(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ src1 = __lsx_vldrepl_d(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ src2 = __lsx_vldrepl_d(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ src3 = __lsx_vldrepl_d(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ LSX_DUP2_ARG2(__lsx_vilvl_d, src1, src0, src3, src2, src0, src1); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ tmp0, tmp1, tmp2, tmp3); ++ out0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, tmp0, filter0, filter1, filter2, filter3); ++ out1 = FILT_8TAP_DPADD_S_H(reg3, reg4, reg5, tmp1, filter0, filter1, filter2, filter3); ++ out2 = FILT_8TAP_DPADD_S_H(reg1, reg2, tmp0, tmp2, filter0, filter1, filter2, filter3); ++ out3 = FILT_8TAP_DPADD_S_H(reg4, reg5, tmp1, tmp3, filter0, filter1, filter2, filter3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vavgr_bu, out0, src0, out1, src1, out0, out1); ++ __lsx_vstelm_d(out0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(out0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(out1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(out1, dst, 0, 1); ++ dst += dst_stride; ++ ++ reg0 = reg2; ++ reg1 = tmp0; ++ reg2 = tmp2; ++ reg3 = reg5; ++ reg4 = tmp1; ++ reg5 = tmp3; ++ src6 = src10; ++ } ++} ++ ++static void common_vt_8t_and_aver_dst_16w_mult_lsx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height, ++ int32_t width) ++{ ++ const uint8_t *src_tmp; ++ uint8_t *dst_tmp; ++ uint32_t cnt = width >> 4; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; ++ __m128i filter0, filter1, filter2, filter3; ++ __m128i reg0, reg1, reg2, reg3, reg4, reg5; ++ __m128i reg6, reg7, reg8, reg9, reg10, reg11; ++ __m128i tmp0, tmp1, tmp2, tmp3; ++ ++ src -= (3 * src_stride); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); ++ for (;cnt--;) { ++ uint32_t loop_cnt = height >> 2; ++ uint8_t *dst_reg = dst; ++ ++ src_tmp = src; ++ dst_tmp = dst; ++ ++ LSX_LD_4(src_tmp, src_stride, src0, src1, src2, src3); ++ src_tmp += src_stride; ++ src4 = __lsx_vld(src_tmp, 0); ++ src_tmp += src_stride; ++ src5 = __lsx_vld(src_tmp, 0); ++ src_tmp += src_stride; ++ src6 = __lsx_vld(src_tmp, 0); ++ src_tmp += src_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ reg0, reg1, reg2, reg3); ++ LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, reg4, reg5); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ reg6, reg7, reg8, reg9); ++ LSX_DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, reg10, reg11); ++ ++ for (;loop_cnt--;) { ++ LSX_LD_4(src_tmp, src_stride, src7, src8, src9, src10); ++ src_tmp += src_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); ++ LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src0, src1, src2, src3); ++ LSX_DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src4, src5, src7, src8); ++ tmp0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, src0, filter0, filter1, filter2, filter3); ++ tmp1 = FILT_8TAP_DPADD_S_H(reg3, reg4, reg5, src1, filter0, filter1, filter2, filter3); ++ tmp2 = FILT_8TAP_DPADD_S_H(reg6, reg7, reg8, src4, filter0, filter1, filter2, filter3); ++ tmp3 = FILT_8TAP_DPADD_S_H(reg9, reg10, reg11, src5, filter0, filter1, filter2, filter3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ tmp2 = __lsx_vld(dst_reg, 0); ++ dst_reg += dst_stride; ++ tmp3 = __lsx_vld(dst_reg, 0); ++ dst_reg += dst_stride; ++ LSX_DUP2_ARG2(__lsx_vavgr_bu, tmp0, tmp2, tmp1, tmp3, tmp0, tmp1); ++ __lsx_vst(tmp0, dst_tmp, 0); ++ dst_tmp += dst_stride; ++ __lsx_vst(tmp1, dst_tmp, 0); ++ dst_tmp += dst_stride; ++ tmp0 = FILT_8TAP_DPADD_S_H(reg1, reg2, src0, src2, filter0, filter1, filter2, filter3); ++ tmp1 = FILT_8TAP_DPADD_S_H(reg4, reg5, src1, src3, filter0, filter1, filter2, filter3); ++ tmp2 = FILT_8TAP_DPADD_S_H(reg7, reg8, src4, src7, filter0, filter1, filter2, filter3); ++ tmp3 = FILT_8TAP_DPADD_S_H(reg10, reg11, src5, src8, filter0, filter1, filter2, filter3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ tmp2 = __lsx_vld(dst_reg, 0); ++ dst_reg += dst_stride; ++ tmp3 = __lsx_vld(dst_reg, 0); ++ dst_reg += dst_stride; ++ LSX_DUP2_ARG2(__lsx_vavgr_bu, tmp0, tmp2, tmp1, tmp3, tmp0, tmp1); ++ __lsx_vst(tmp0, dst_tmp, 0); ++ dst_tmp += dst_stride; ++ __lsx_vst(tmp1, dst_tmp, 0); ++ dst_tmp += dst_stride; ++ ++ reg0 = reg2; ++ reg1 = src0; ++ reg2 = src2; ++ reg3 = reg5; ++ reg4 = src1; ++ reg5 = src3; ++ reg6 = reg8; ++ reg7 = src4; ++ reg8 = src7; ++ reg9 = reg11; ++ reg10 = src5; ++ reg11 = src8; ++ src6 = src10; ++ } ++ src += 16; ++ dst += 16; ++ } ++} ++ ++static void common_vt_8t_and_aver_dst_16w_lsx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ common_vt_8t_and_aver_dst_16w_mult_lsx(src, src_stride, dst, dst_stride, ++ filter, height, 16); ++} ++ ++static void common_vt_8t_and_aver_dst_32w_lsx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ common_vt_8t_and_aver_dst_16w_mult_lsx(src, src_stride, dst, dst_stride, ++ filter, height, 32); ++} ++ ++static void common_vt_8t_and_aver_dst_64w_lsx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, ++ int32_t height) ++{ ++ common_vt_8t_and_aver_dst_16w_mult_lsx(src, src_stride, dst, dst_stride, ++ filter, height, 64); ++} ++ ++static void common_hv_8ht_8vt_and_aver_dst_4w_lsx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_horiz, ++ const int8_t *filter_vert, ++ int32_t height) ++{ ++ uint32_t loop_cnt = height >> 2; ++ uint8_t *dst_tmp = dst; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; ++ __m128i filt_hz0, filt_hz1, filt_hz2, filt_hz3; ++ __m128i filt_vt0, filt_vt1, filt_vt2, filt_vt3; ++ __m128i mask0, mask1, mask2, mask3; ++ __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; ++ __m128i out0, out1; ++ __m128i shuff = {0x0F0E0D0C0B0A0908, 0x1716151413121110}; ++ ++ mask0 = __lsx_vld(mc_filt_mask_arr, 16); ++ src -= (3 + 3 * src_stride); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_horiz, 0, filter_horiz, 2, filter_horiz, 4, ++ filter_horiz, 6, filt_hz0, filt_hz1, filt_hz2, filt_hz3); ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ ++ LSX_LD_4(src, src_stride, src0, src1, src2, src3); ++ src += src_stride; ++ src4 = __lsx_vld(src, 0); ++ src += src_stride; ++ src5 = __lsx_vld(src, 0); ++ src += src_stride; ++ src6 = __lsx_vld(src, 0); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ ++ tmp0 = HORIZ_8TAP_FILT(src0, src1, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ tmp2 = HORIZ_8TAP_FILT(src2, src3, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ tmp4 = HORIZ_8TAP_FILT(src4, src5, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ tmp5 = HORIZ_8TAP_FILT(src5, src6, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ LSX_DUP2_ARG3(__lsx_vshuf_b, tmp2, tmp0, shuff, tmp4, tmp2, shuff, tmp1, tmp3); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_vert, 0, filter_vert, 2, filter_vert, 4, ++ filter_vert, 6, filt_vt0, filt_vt1, filt_vt2, filt_vt3); ++ LSX_DUP2_ARG2(__lsx_vpackev_b, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ tmp2 = __lsx_vpackev_b(tmp5, tmp4); ++ ++ for (;loop_cnt--;) { ++ LSX_LD_4(src, src_stride, src7, src8, src9, src10); ++ src += src_stride; ++ src2 = __lsx_vldrepl_w(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ src3 = __lsx_vldrepl_w(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ src4 = __lsx_vldrepl_w(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ src5 = __lsx_vldrepl_w(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ LSX_DUP2_ARG2(__lsx_vilvl_w, src3, src2, src5, src4, src2, src3); ++ src2 = __lsx_vilvl_d(src3, src2); ++ LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); ++ tmp3 = HORIZ_8TAP_FILT(src7, src8, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ tmp4 = __lsx_vshuf_b(tmp3, tmp5, shuff); ++ tmp4 = __lsx_vpackev_b(tmp3, tmp4); ++ out0 = FILT_8TAP_DPADD_S_H(tmp0, tmp1, tmp2, tmp4, filt_vt0, filt_vt1, ++ filt_vt2, filt_vt3); ++ src1 = HORIZ_8TAP_FILT(src9, src10, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ src0 = __lsx_vshuf_b(src1, tmp3, shuff); ++ src0 = __lsx_vpackev_b(src1, src0); ++ out1 = FILT_8TAP_DPADD_S_H(tmp1, tmp2, tmp4, src0, filt_vt0, filt_vt1, ++ filt_vt2, filt_vt3); ++ out0 = __lsx_vssrarni_b_h(out1, out0, 7); ++ out0 = __lsx_vxori_b(out0, 128); ++ out0 = __lsx_vavgr_bu(out0, src2); ++ __lsx_vstelm_w(out0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_w(out0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_w(out0, dst, 0, 2); ++ dst += dst_stride; ++ __lsx_vstelm_w(out0, dst, 0, 3); ++ dst += dst_stride; ++ ++ tmp5 = src1; ++ tmp0 = tmp2; ++ tmp1 = tmp4; ++ tmp2 = src0; ++ } ++} ++ ++static void common_hv_8ht_8vt_and_aver_dst_8w_lsx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_horiz, ++ const int8_t *filter_vert, ++ int32_t height) ++{ ++ uint32_t loop_cnt = height >> 2; ++ uint8_t *dst_tmp = dst; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; ++ __m128i filt_hz0, filt_hz1, filt_hz2, filt_hz3; ++ __m128i filt_vt0, filt_vt1, filt_vt2, filt_vt3; ++ __m128i mask0, mask1, mask2, mask3; ++ __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6; ++ __m128i out0, out1; ++ ++ mask0 = __lsx_vld(mc_filt_mask_arr, 0); ++ src -= (3 + 3 * src_stride); ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_horiz, 0, filter_horiz, 2, filter_horiz, 4, ++ filter_horiz, 6, filt_hz0, filt_hz1, filt_hz2, filt_hz3); ++ LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ mask3 = __lsx_vaddi_bu(mask0, 6); ++ ++ LSX_LD_4(src, src_stride, src0, src1, src2, src3); ++ src += src_stride; ++ src4 = __lsx_vld(src, 0); ++ src += src_stride; ++ src5 = __lsx_vld(src, 0); ++ src += src_stride; ++ src6 = __lsx_vld(src, 0); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); ++ LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ src6 = __lsx_vxori_b(src6, 128); ++ ++ src0 = HORIZ_8TAP_FILT(src0, src0, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ src1 = HORIZ_8TAP_FILT(src1, src1, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ src2 = HORIZ_8TAP_FILT(src2, src2, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ src3 = HORIZ_8TAP_FILT(src3, src3, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ src4 = HORIZ_8TAP_FILT(src4, src4, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ src5 = HORIZ_8TAP_FILT(src5, src5, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ src6 = HORIZ_8TAP_FILT(src6, src6, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ ++ LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_vert, 0, filter_vert, 2, filter_vert, 4, ++ filter_vert, 6, filt_vt0, filt_vt1, filt_vt2, filt_vt3); ++ LSX_DUP4_ARG2(__lsx_vpackev_b, src1, src0, src3, src2, src5, src4, ++ src2, src1, tmp0, tmp1, tmp2, tmp4); ++ LSX_DUP2_ARG2(__lsx_vpackev_b, src4, src3, src6, src5, tmp5, tmp6); ++ ++ for (;loop_cnt--;) { ++ LSX_LD_4(src, src_stride, src7, src8, src9, src10); ++ src += src_stride; ++ ++ LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); ++ src7 = HORIZ_8TAP_FILT(src7, src7, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ tmp3 = __lsx_vpackev_b(src7, src6); ++ out0 = FILT_8TAP_DPADD_S_H(tmp0, tmp1, tmp2, tmp3, filt_vt0, filt_vt1, ++ filt_vt2, filt_vt3); ++ src8 = HORIZ_8TAP_FILT(src8, src8, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ src0 = __lsx_vpackev_b(src8, src7); ++ out1 = FILT_8TAP_DPADD_S_H(tmp4, tmp5, tmp6, src0, filt_vt0, filt_vt1, ++ filt_vt2, filt_vt3); ++ src9 = HORIZ_8TAP_FILT(src9, src9, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ src1 = __lsx_vpackev_b(src9, src8); ++ src3 = FILT_8TAP_DPADD_S_H(tmp1, tmp2, tmp3, src1, filt_vt0, filt_vt1, ++ filt_vt2, filt_vt3); ++ src10 = HORIZ_8TAP_FILT(src10, src10, mask0, mask1, mask2, mask3, filt_hz0, ++ filt_hz1, filt_hz2, filt_hz3); ++ src2 = __lsx_vpackev_b(src10, src9); ++ src4 = FILT_8TAP_DPADD_S_H(tmp5, tmp6, src0, src2, filt_vt0, filt_vt1, ++ filt_vt2, filt_vt3); ++ LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, src4, src3, 7, out0, out1); ++ LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ src5 = __lsx_vldrepl_d(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ src7 = __lsx_vldrepl_d(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ src8 = __lsx_vldrepl_d(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ src9 = __lsx_vldrepl_d(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ LSX_DUP2_ARG2(__lsx_vilvl_d, src7, src5, src9, src8, src5, src7); ++ LSX_DUP2_ARG2(__lsx_vavgr_bu, out0, src5, out1, src7, out0, out1); ++ __lsx_vstelm_d(out0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(out0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(out1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(out1, dst, 0, 1); ++ dst += dst_stride; ++ ++ src6 = src10; ++ tmp0 = tmp2; ++ tmp1 = tmp3; ++ tmp2 = src1; ++ tmp4 = tmp6; ++ tmp5 = src0; ++ tmp6 = src2; ++ } ++} ++ ++static void common_hv_8ht_8vt_and_aver_dst_16w_lsx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_horiz, ++ const int8_t *filter_vert, ++ int32_t height) ++{ ++ int32_t multiple8_cnt; ++ ++ for (multiple8_cnt = 2; multiple8_cnt--;) { ++ common_hv_8ht_8vt_and_aver_dst_8w_lsx(src, src_stride, dst, dst_stride, ++ filter_horiz, filter_vert, ++ height); ++ ++ src += 8; ++ dst += 8; ++ } ++} ++ ++static void common_hv_8ht_8vt_and_aver_dst_32w_lsx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_horiz, ++ const int8_t *filter_vert, ++ int32_t height) ++{ ++ int32_t multiple8_cnt; ++ ++ for (multiple8_cnt = 4; multiple8_cnt--;) { ++ common_hv_8ht_8vt_and_aver_dst_8w_lsx(src, src_stride, dst, dst_stride, ++ filter_horiz, filter_vert, ++ height); ++ ++ src += 8; ++ dst += 8; ++ } ++} ++ ++static void common_hv_8ht_8vt_and_aver_dst_64w_lsx(const uint8_t *src, ++ int32_t src_stride, ++ uint8_t *dst, ++ int32_t dst_stride, ++ const int8_t *filter_horiz, ++ const int8_t *filter_vert, ++ int32_t height) ++{ ++ int32_t multiple8_cnt; ++ ++ for (multiple8_cnt = 8; multiple8_cnt--;) { ++ common_hv_8ht_8vt_and_aver_dst_8w_lsx(src, src_stride, dst, dst_stride, ++ filter_horiz, filter_vert, ++ height); ++ ++ src += 8; ++ dst += 8; ++ } ++} ++ ++static void avg_width8_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ int32_t height) ++{ ++ int32_t cnt = height >> 2; ++ uint8_t *dst_tmp = dst; ++ __m128i src0, src1, dst0, dst1; ++ __m128i tmp0, tmp1, tmp2, tmp3; ++ ++ for (;cnt--;) { ++ tmp0 = __lsx_vldrepl_d(src, 0); ++ src += src_stride; ++ tmp1 = __lsx_vldrepl_d(src, 0); ++ src += src_stride; ++ tmp2 = __lsx_vldrepl_d(src, 0); ++ src += src_stride; ++ tmp3 = __lsx_vldrepl_d(src, 0); ++ src += src_stride; ++ LSX_DUP2_ARG2(__lsx_vilvl_d, tmp1, tmp0, tmp3, tmp2, src0, src1); ++ tmp0 = __lsx_vldrepl_d(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ tmp1 = __lsx_vldrepl_d(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ tmp2 = __lsx_vldrepl_d(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ tmp3 = __lsx_vldrepl_d(dst_tmp, 0); ++ dst_tmp += dst_stride; ++ LSX_DUP2_ARG2(__lsx_vilvl_d, tmp1, tmp0, tmp3, tmp2, dst0, dst1); ++ LSX_DUP2_ARG2(__lsx_vavgr_bu, src0, dst0, src1, dst1, dst0, dst1); ++ __lsx_vstelm_d(dst0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(dst0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(dst1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(dst1, dst, 0, 1); ++ dst += dst_stride; ++ } ++} ++ ++static void avg_width16_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ int32_t height) ++{ ++ int32_t cnt = height >> 2; ++ uint8_t *dst_tmp = dst; ++ __m128i src0, src1, src2, src3; ++ __m128i dst0, dst1, dst2, dst3; ++ ++ for (;cnt--;) { ++ LSX_LD_4(src, src_stride, src0, src1, src2, src3); ++ src += src_stride; ++ LSX_LD_4(dst_tmp, dst_stride, dst0, dst1, dst2, dst3); ++ dst_tmp += dst_stride; ++ LSX_DUP4_ARG2(__lsx_vavgr_bu, src0, dst0, src1, dst1, ++ src2, dst2, src3, dst3, dst0, dst1, dst2, dst3); ++ LSX_ST_4(dst0, dst1, dst2, dst3, dst, dst_stride); ++ dst += dst_stride; ++ } ++} ++ ++static void avg_width32_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ int32_t height) ++{ ++ int32_t cnt = height >> 2; ++ const uint8_t *src_tmp = src; ++ uint8_t *dst_tmp, *dst_tmp1, *dst_tmp2; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; ++ ++ dst_tmp = dst_tmp1 = dst_tmp2 = dst; ++ for (;cnt--;) { ++ LSX_LD_4(src, src_stride, src0, src2, src4, src6); ++ src += src_stride; ++ LSX_LD_4_16(src_tmp, src_stride, src1, src3, src5, src7); ++ src_tmp += src_stride; ++ LSX_LD_4(dst_tmp1, dst_stride, dst0, dst2, dst4, dst6); ++ dst_tmp1 += dst_stride; ++ LSX_LD_4_16(dst_tmp2, dst_stride, dst1, dst3, dst5, dst7); ++ dst_tmp2 += dst_stride; ++ LSX_DUP4_ARG2(__lsx_vavgr_bu, src0, dst0, src1, dst1, ++ src2, dst2, src3, dst3, dst0, dst1, dst2, dst3); ++ LSX_DUP4_ARG2(__lsx_vavgr_bu, src4, dst4, src5, dst5, ++ src6, dst6, src7, dst7, dst4, dst5, dst6, dst7); ++ LSX_ST_4(dst0, dst2, dst4, dst6, dst_tmp, dst_stride); ++ dst_tmp += dst_stride; ++ LSX_ST_4_16(dst1, dst3, dst5, dst7, dst, dst_stride); ++ dst += dst_stride; ++ } ++} ++ ++static void avg_width64_lsx(const uint8_t *src, int32_t src_stride, ++ uint8_t *dst, int32_t dst_stride, ++ int32_t height) ++{ ++ int32_t cnt = height >> 2; ++ uint8_t *dst_tmp = dst; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i src8, src9, src10, src11, src12, src13, src14, src15; ++ __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; ++ __m128i dst8, dst9, dst10, dst11, dst12, dst13, dst14, dst15; ++ ++ for (;cnt--;) { ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, ++ src0, src1, src2, src3); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, ++ src4, src5, src6, src7); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, ++ src8, src9, src10, src11); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, ++ src12, src13, src14, src15); ++ src += src_stride; ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp, 16, dst_tmp, 32, dst_tmp, 48, ++ dst0, dst1, dst2, dst3); ++ dst_tmp += dst_stride; ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp, 16, dst_tmp, 32, dst_tmp, 48, ++ dst4, dst5, dst6, dst7); ++ dst_tmp += dst_stride; ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp, 16, dst_tmp, 32, dst_tmp, 48, ++ dst8, dst9, dst10, dst11); ++ dst_tmp += dst_stride; ++ LSX_DUP4_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp, 16, dst_tmp, 32, dst_tmp, 48, ++ dst12, dst13, dst14, dst15); ++ dst_tmp += dst_stride; ++ LSX_DUP4_ARG2(__lsx_vavgr_bu, src0, dst0, src1, dst1, ++ src2, dst2, src3, dst3, dst0, dst1, dst2, dst3); ++ LSX_DUP4_ARG2(__lsx_vavgr_bu, src4, dst4, src5, dst5, ++ src6, dst6, src7, dst7, dst4, dst5, dst6, dst7); ++ LSX_DUP4_ARG2(__lsx_vavgr_bu, src8, dst8, src9, dst9, src10, ++ dst10, src11, dst11, dst8, dst9, dst10, dst11); ++ LSX_DUP4_ARG2(__lsx_vavgr_bu, src12, dst12, src13, dst13, src14, ++ dst14, src15, dst15, dst12, dst13, dst14, dst15); ++ __lsx_vst(dst0, dst, 0); ++ __lsx_vst(dst1, dst, 16); ++ __lsx_vst(dst2, dst, 32); ++ __lsx_vst(dst3, dst, 48); ++ dst += dst_stride; ++ __lsx_vst(dst4, dst, 0); ++ __lsx_vst(dst5, dst, 16); ++ __lsx_vst(dst6, dst, 32); ++ __lsx_vst(dst7, dst, 48); ++ dst += dst_stride; ++ __lsx_vst(dst8, dst, 0); ++ __lsx_vst(dst9, dst, 16); ++ __lsx_vst(dst10, dst, 32); ++ __lsx_vst(dst11, dst, 48); ++ dst += dst_stride; ++ __lsx_vst(dst12, dst, 0); ++ __lsx_vst(dst13, dst, 16); ++ __lsx_vst(dst14, dst, 32); ++ __lsx_vst(dst15, dst, 48); ++ dst += dst_stride; ++ } ++} ++ ++static const int8_t vp9_subpel_filters_lsx[3][15][8] = { ++ [FILTER_8TAP_REGULAR] = { ++ {0, 1, -5, 126, 8, -3, 1, 0}, ++ {-1, 3, -10, 122, 18, -6, 2, 0}, ++ {-1, 4, -13, 118, 27, -9, 3, -1}, ++ {-1, 4, -16, 112, 37, -11, 4, -1}, ++ {-1, 5, -18, 105, 48, -14, 4, -1}, ++ {-1, 5, -19, 97, 58, -16, 5, -1}, ++ {-1, 6, -19, 88, 68, -18, 5, -1}, ++ {-1, 6, -19, 78, 78, -19, 6, -1}, ++ {-1, 5, -18, 68, 88, -19, 6, -1}, ++ {-1, 5, -16, 58, 97, -19, 5, -1}, ++ {-1, 4, -14, 48, 105, -18, 5, -1}, ++ {-1, 4, -11, 37, 112, -16, 4, -1}, ++ {-1, 3, -9, 27, 118, -13, 4, -1}, ++ {0, 2, -6, 18, 122, -10, 3, -1}, ++ {0, 1, -3, 8, 126, -5, 1, 0}, ++ }, [FILTER_8TAP_SHARP] = { ++ {-1, 3, -7, 127, 8, -3, 1, 0}, ++ {-2, 5, -13, 125, 17, -6, 3, -1}, ++ {-3, 7, -17, 121, 27, -10, 5, -2}, ++ {-4, 9, -20, 115, 37, -13, 6, -2}, ++ {-4, 10, -23, 108, 48, -16, 8, -3}, ++ {-4, 10, -24, 100, 59, -19, 9, -3}, ++ {-4, 11, -24, 90, 70, -21, 10, -4}, ++ {-4, 11, -23, 80, 80, -23, 11, -4}, ++ {-4, 10, -21, 70, 90, -24, 11, -4}, ++ {-3, 9, -19, 59, 100, -24, 10, -4}, ++ {-3, 8, -16, 48, 108, -23, 10, -4}, ++ {-2, 6, -13, 37, 115, -20, 9, -4}, ++ {-2, 5, -10, 27, 121, -17, 7, -3}, ++ {-1, 3, -6, 17, 125, -13, 5, -2}, ++ {0, 1, -3, 8, 127, -7, 3, -1}, ++ }, [FILTER_8TAP_SMOOTH] = { ++ {-3, -1, 32, 64, 38, 1, -3, 0}, ++ {-2, -2, 29, 63, 41, 2, -3, 0}, ++ {-2, -2, 26, 63, 43, 4, -4, 0}, ++ {-2, -3, 24, 62, 46, 5, -4, 0}, ++ {-2, -3, 21, 60, 49, 7, -4, 0}, ++ {-1, -4, 18, 59, 51, 9, -4, 0}, ++ {-1, -4, 16, 57, 53, 12, -4, -1}, ++ {-1, -4, 14, 55, 55, 14, -4, -1}, ++ {-1, -4, 12, 53, 57, 16, -4, -1}, ++ {0, -4, 9, 51, 59, 18, -4, -1}, ++ {0, -4, 7, 49, 60, 21, -3, -2}, ++ {0, -4, 5, 46, 62, 24, -3, -2}, ++ {0, -4, 4, 43, 63, 26, -2, -2}, ++ {0, -3, 2, 41, 63, 29, -2, -2}, ++ {0, -3, 1, 38, 64, 32, -1, -3}, ++ } ++}; ++ ++#define VP9_8TAP_LOONGARCH_LSX_FUNC(SIZE, type, type_idx) \ ++void ff_put_8tap_##type##_##SIZE##h_lsx(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my) \ ++{ \ ++ const int8_t *filter = vp9_subpel_filters_lsx[type_idx][mx-1]; \ ++ \ ++ common_hz_8t_##SIZE##w_lsx(src, srcstride, dst, dststride, filter, h); \ ++} \ ++ \ ++void ff_put_8tap_##type##_##SIZE##v_lsx(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my) \ ++{ \ ++ const int8_t *filter = vp9_subpel_filters_lsx[type_idx][my-1]; \ ++ \ ++ common_vt_8t_##SIZE##w_lsx(src, srcstride, dst, dststride, filter, h); \ ++} \ ++ \ ++void ff_put_8tap_##type##_##SIZE##hv_lsx(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my) \ ++{ \ ++ const int8_t *hfilter = vp9_subpel_filters_lsx[type_idx][mx-1]; \ ++ const int8_t *vfilter = vp9_subpel_filters_lsx[type_idx][my-1]; \ ++ \ ++ common_hv_8ht_8vt_##SIZE##w_lsx(src, srcstride, dst, dststride, hfilter, \ ++ vfilter, h); \ ++} \ ++ \ ++void ff_avg_8tap_##type##_##SIZE##h_lsx(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my) \ ++{ \ ++ const int8_t *filter = vp9_subpel_filters_lsx[type_idx][mx-1]; \ ++ \ ++ common_hz_8t_and_aver_dst_##SIZE##w_lsx(src, srcstride, dst, \ ++ dststride, filter, h); \ ++} \ ++ \ ++void ff_avg_8tap_##type##_##SIZE##v_lsx(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my) \ ++{ \ ++ const int8_t *filter = vp9_subpel_filters_lsx[type_idx][my-1]; \ ++ \ ++ common_vt_8t_and_aver_dst_##SIZE##w_lsx(src, srcstride, dst, dststride, \ ++ filter, h); \ ++} \ ++ \ ++void ff_avg_8tap_##type##_##SIZE##hv_lsx(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my) \ ++{ \ ++ const int8_t *hfilter = vp9_subpel_filters_lsx[type_idx][mx-1]; \ ++ const int8_t *vfilter = vp9_subpel_filters_lsx[type_idx][my-1]; \ ++ \ ++ common_hv_8ht_8vt_and_aver_dst_##SIZE##w_lsx(src, srcstride, dst, \ ++ dststride, hfilter, \ ++ vfilter, h); \ ++} ++ ++#define VP9_COPY_LOONGARCH_LSX_FUNC(SIZE) \ ++void ff_copy##SIZE##_lsx(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, ptrdiff_t srcstride, \ ++ int h, int mx, int my) \ ++{ \ ++ \ ++ copy_width##SIZE##_lsx(src, srcstride, dst, dststride, h); \ ++} \ ++void ff_avg##SIZE##_lsx(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, ptrdiff_t srcstride, \ ++ int h, int mx, int my) \ ++{ \ ++ \ ++ avg_width##SIZE##_lsx(src, srcstride, dst, dststride, h); \ ++} ++ ++VP9_8TAP_LOONGARCH_LSX_FUNC(64, regular, FILTER_8TAP_REGULAR); ++VP9_8TAP_LOONGARCH_LSX_FUNC(32, regular, FILTER_8TAP_REGULAR); ++VP9_8TAP_LOONGARCH_LSX_FUNC(16, regular, FILTER_8TAP_REGULAR); ++VP9_8TAP_LOONGARCH_LSX_FUNC(8, regular, FILTER_8TAP_REGULAR); ++VP9_8TAP_LOONGARCH_LSX_FUNC(4, regular, FILTER_8TAP_REGULAR); ++ ++VP9_8TAP_LOONGARCH_LSX_FUNC(64, sharp, FILTER_8TAP_SHARP); ++VP9_8TAP_LOONGARCH_LSX_FUNC(32, sharp, FILTER_8TAP_SHARP); ++VP9_8TAP_LOONGARCH_LSX_FUNC(16, sharp, FILTER_8TAP_SHARP); ++VP9_8TAP_LOONGARCH_LSX_FUNC(8, sharp, FILTER_8TAP_SHARP); ++VP9_8TAP_LOONGARCH_LSX_FUNC(4, sharp, FILTER_8TAP_SHARP); ++ ++VP9_8TAP_LOONGARCH_LSX_FUNC(64, smooth, FILTER_8TAP_SMOOTH); ++VP9_8TAP_LOONGARCH_LSX_FUNC(32, smooth, FILTER_8TAP_SMOOTH); ++VP9_8TAP_LOONGARCH_LSX_FUNC(16, smooth, FILTER_8TAP_SMOOTH); ++VP9_8TAP_LOONGARCH_LSX_FUNC(8, smooth, FILTER_8TAP_SMOOTH); ++VP9_8TAP_LOONGARCH_LSX_FUNC(4, smooth, FILTER_8TAP_SMOOTH); ++ ++VP9_COPY_LOONGARCH_LSX_FUNC(64); ++VP9_COPY_LOONGARCH_LSX_FUNC(32); ++VP9_COPY_LOONGARCH_LSX_FUNC(16); ++VP9_COPY_LOONGARCH_LSX_FUNC(8); ++ ++#undef VP9_8TAP_LOONGARCH_LSX_FUNC ++#undef VP9_COPY_LOONGARCH_LSX_FUNC +diff --git a/libavcodec/loongarch/vp9dsp_init_loongarch.c b/libavcodec/loongarch/vp9dsp_init_loongarch.c +new file mode 100644 +index 0000000000..f85abde11d +--- /dev/null ++++ b/libavcodec/loongarch/vp9dsp_init_loongarch.c +@@ -0,0 +1,178 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hao Chen ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/loongarch/cpu.h" ++#include "libavutil/attributes.h" ++#include "libavcodec/vp9dsp.h" ++#include "vp9dsp_loongarch.h" ++ ++#define init_subpel1(idx1, idx2, idxh, idxv, sz, dir, type) \ ++ dsp->mc[idx1][FILTER_8TAP_SMOOTH ][idx2][idxh][idxv] = \ ++ ff_##type##_8tap_smooth_##sz##dir##_lsx; \ ++ dsp->mc[idx1][FILTER_8TAP_REGULAR][idx2][idxh][idxv] = \ ++ ff_##type##_8tap_regular_##sz##dir##_lsx; \ ++ dsp->mc[idx1][FILTER_8TAP_SHARP ][idx2][idxh][idxv] = \ ++ ff_##type##_8tap_sharp_##sz##dir##_lsx; ++ ++#define init_subpel2(idx, idxh, idxv, dir, type) \ ++ init_subpel1(0, idx, idxh, idxv, 64, dir, type); \ ++ init_subpel1(1, idx, idxh, idxv, 32, dir, type); \ ++ init_subpel1(2, idx, idxh, idxv, 16, dir, type); \ ++ init_subpel1(3, idx, idxh, idxv, 8, dir, type); \ ++ init_subpel1(4, idx, idxh, idxv, 4, dir, type) ++ ++#define init_subpel3(idx, type) \ ++ init_subpel2(idx, 1, 0, h, type) \ ++ init_subpel2(idx, 0, 1, v, type); \ ++ init_subpel2(idx, 1, 1, hv, type); ++ ++#define init_fpel(idx1, idx2, sz, type) \ ++ dsp->mc[idx1][FILTER_8TAP_SMOOTH ][idx2][0][0] = ff_##type##sz##_lsx; \ ++ dsp->mc[idx1][FILTER_8TAP_REGULAR][idx2][0][0] = ff_##type##sz##_lsx; \ ++ dsp->mc[idx1][FILTER_8TAP_SHARP ][idx2][0][0] = ff_##type##sz##_lsx; \ ++ dsp->mc[idx1][FILTER_BILINEAR ][idx2][0][0] = ff_##type##sz##_lsx ++ ++#define init_copy(idx, sz) \ ++ init_fpel(idx, 0, sz, copy); \ ++ init_fpel(idx, 1, sz, avg) ++ ++static av_cold void vp9dsp_mc_init_lsx(VP9DSPContext *dsp, int bpp) ++{ ++ int cpu_flags = av_get_cpu_flags(); ++ if (have_lsx(cpu_flags)) { ++ if (bpp == 8) { ++ init_subpel3(0, put); ++ init_subpel3(1, avg); ++ init_copy(0, 64); ++ init_copy(1, 32); ++ init_copy(2, 16); ++ init_copy(3, 8); ++ } ++ } ++} ++ ++#undef init_subpel1 ++#undef init_subpel2 ++#undef init_subpel3 ++#undef init_copy ++#undef init_fpel ++ ++#define init_intra_pred1_lsx(tx, sz) \ ++ dsp->intra_pred[tx][VERT_PRED] = ff_vert_##sz##_lsx; \ ++ dsp->intra_pred[tx][HOR_PRED] = ff_hor_##sz##_lsx; \ ++ dsp->intra_pred[tx][DC_PRED] = ff_dc_##sz##_lsx; \ ++ dsp->intra_pred[tx][LEFT_DC_PRED] = ff_dc_left_##sz##_lsx; \ ++ dsp->intra_pred[tx][TOP_DC_PRED] = ff_dc_top_##sz##_lsx; \ ++ dsp->intra_pred[tx][DC_128_PRED] = ff_dc_128_##sz##_lsx; \ ++ dsp->intra_pred[tx][DC_127_PRED] = ff_dc_127_##sz##_lsx; \ ++ dsp->intra_pred[tx][DC_129_PRED] = ff_dc_129_##sz##_lsx; \ ++ dsp->intra_pred[tx][TM_VP8_PRED] = ff_tm_##sz##_lsx; \ ++ ++#define init_intra_pred2_lsx(tx, sz) \ ++ dsp->intra_pred[tx][DC_PRED] = ff_dc_##sz##_lsx; \ ++ dsp->intra_pred[tx][LEFT_DC_PRED] = ff_dc_left_##sz##_lsx; \ ++ dsp->intra_pred[tx][TOP_DC_PRED] = ff_dc_top_##sz##_lsx; \ ++ dsp->intra_pred[tx][TM_VP8_PRED] = ff_tm_##sz##_lsx; \ ++ ++static av_cold void vp9dsp_intrapred_init_lsx(VP9DSPContext *dsp, int bpp) ++{ ++ int cpu_flags = av_get_cpu_flags(); ++ if (have_lsx(cpu_flags)) { ++ if (bpp == 8) { ++ init_intra_pred1_lsx(TX_16X16, 16x16); ++ init_intra_pred1_lsx(TX_32X32, 32x32); ++ init_intra_pred2_lsx(TX_4X4, 4x4); ++ init_intra_pred2_lsx(TX_8X8, 8x8); ++ } ++ } ++} ++ ++#undef init_intra_pred_lsx ++#undef init_intra_pred_lsx ++ ++#define init_idct(tx, nm) \ ++ dsp->itxfm_add[tx][DCT_DCT] = \ ++ dsp->itxfm_add[tx][ADST_DCT] = \ ++ dsp->itxfm_add[tx][DCT_ADST] = \ ++ dsp->itxfm_add[tx][ADST_ADST] = nm##_add_lsx ++ ++#define init_itxfm(tx, sz) \ ++ dsp->itxfm_add[tx][DCT_DCT] = ff_idct_idct_##sz##_add_lsx ++ ++static av_cold void vp9dsp_itxfm_init_lsx(VP9DSPContext *dsp, int bpp) ++{ ++ int cpu_flags = av_get_cpu_flags(); ++ if (have_lsx(cpu_flags)) { ++ if (bpp == 8) { ++ init_itxfm(TX_8X8, 8x8); ++ init_itxfm(TX_16X16, 16x16); ++ init_idct(TX_32X32, ff_idct_idct_32x32); ++ } ++ } ++} ++ ++#undef init_idct ++#undef init_itxfm ++ ++static av_cold void vp9dsp_loopfilter_init_lsx(VP9DSPContext *dsp, int bpp) ++{ ++ int cpu_flags = av_get_cpu_flags(); ++ if (have_lsx(cpu_flags)) { ++ if (bpp == 8) { ++ dsp->loop_filter_8[0][0] = ff_loop_filter_h_4_8_lsx; ++ dsp->loop_filter_8[0][1] = ff_loop_filter_v_4_8_lsx; ++ dsp->loop_filter_8[1][0] = ff_loop_filter_h_8_8_lsx; ++ dsp->loop_filter_8[1][1] = ff_loop_filter_v_8_8_lsx; ++ dsp->loop_filter_8[2][0] = ff_loop_filter_h_16_8_lsx; ++ dsp->loop_filter_8[2][1] = ff_loop_filter_v_16_8_lsx; ++ ++ dsp->loop_filter_16[0] = ff_loop_filter_h_16_16_lsx; ++ dsp->loop_filter_16[1] = ff_loop_filter_v_16_16_lsx; ++ ++ dsp->loop_filter_mix2[0][0][0] = ff_loop_filter_h_44_16_lsx; ++ dsp->loop_filter_mix2[0][0][1] = ff_loop_filter_v_44_16_lsx; ++ dsp->loop_filter_mix2[0][1][0] = ff_loop_filter_h_48_16_lsx; ++ dsp->loop_filter_mix2[0][1][1] = ff_loop_filter_v_48_16_lsx; ++ dsp->loop_filter_mix2[1][0][0] = ff_loop_filter_h_84_16_lsx; ++ dsp->loop_filter_mix2[1][0][1] = ff_loop_filter_v_84_16_lsx; ++ dsp->loop_filter_mix2[1][1][0] = ff_loop_filter_h_88_16_lsx; ++ dsp->loop_filter_mix2[1][1][1] = ff_loop_filter_v_88_16_lsx; ++ } ++ } ++} ++ ++static av_cold void vp9dsp_init_lsx(VP9DSPContext *dsp, int bpp) ++{ ++ int cpu_flags = av_get_cpu_flags(); ++ if (have_lsx(cpu_flags)) { ++ vp9dsp_mc_init_lsx(dsp, bpp); ++ vp9dsp_intrapred_init_lsx(dsp, bpp); ++ vp9dsp_loopfilter_init_lsx(dsp, bpp); ++ vp9dsp_itxfm_init_lsx(dsp, bpp); ++ } ++} ++ ++av_cold void ff_vp9dsp_init_loongarch(VP9DSPContext *dsp, int bpp) ++{ ++ int cpu_flags = av_get_cpu_flags(); ++ if (have_lsx(cpu_flags)) ++ vp9dsp_init_lsx(dsp, bpp); ++} +diff --git a/libavcodec/loongarch/vp9dsp_loongarch.h b/libavcodec/loongarch/vp9dsp_loongarch.h +new file mode 100644 +index 0000000000..3cc918a18c +--- /dev/null ++++ b/libavcodec/loongarch/vp9dsp_loongarch.h +@@ -0,0 +1,182 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hao Chen ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef AVCODEC_LOONGARCH_VP9DSP_LOONGARCH_H ++#define AVCODEC_LOONGARCH_VP9DSP_LOONGARCH_H ++ ++#define VP9_8TAP_LOONGARCH_LSX_FUNC(SIZE, type, type_idx) \ ++void ff_put_8tap_##type##_##SIZE##h_lsx(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my); \ ++ \ ++void ff_put_8tap_##type##_##SIZE##v_lsx(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my); \ ++ \ ++void ff_put_8tap_##type##_##SIZE##hv_lsx(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my); \ ++ \ ++void ff_avg_8tap_##type##_##SIZE##h_lsx(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my); \ ++ \ ++void ff_avg_8tap_##type##_##SIZE##v_lsx(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my); \ ++ \ ++void ff_avg_8tap_##type##_##SIZE##hv_lsx(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, \ ++ ptrdiff_t srcstride, \ ++ int h, int mx, int my); ++ ++#define VP9_COPY_LOONGARCH_LSX_FUNC(SIZE) \ ++void ff_copy##SIZE##_lsx(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, ptrdiff_t srcstride, \ ++ int h, int mx, int my); \ ++ \ ++void ff_avg##SIZE##_lsx(uint8_t *dst, ptrdiff_t dststride, \ ++ const uint8_t *src, ptrdiff_t srcstride, \ ++ int h, int mx, int my); ++ ++VP9_8TAP_LOONGARCH_LSX_FUNC(64, regular, FILTER_8TAP_REGULAR); ++VP9_8TAP_LOONGARCH_LSX_FUNC(32, regular, FILTER_8TAP_REGULAR); ++VP9_8TAP_LOONGARCH_LSX_FUNC(16, regular, FILTER_8TAP_REGULAR); ++VP9_8TAP_LOONGARCH_LSX_FUNC(8, regular, FILTER_8TAP_REGULAR); ++VP9_8TAP_LOONGARCH_LSX_FUNC(4, regular, FILTER_8TAP_REGULAR); ++ ++VP9_8TAP_LOONGARCH_LSX_FUNC(64, sharp, FILTER_8TAP_SHARP); ++VP9_8TAP_LOONGARCH_LSX_FUNC(32, sharp, FILTER_8TAP_SHARP); ++VP9_8TAP_LOONGARCH_LSX_FUNC(16, sharp, FILTER_8TAP_SHARP); ++VP9_8TAP_LOONGARCH_LSX_FUNC(8, sharp, FILTER_8TAP_SHARP); ++VP9_8TAP_LOONGARCH_LSX_FUNC(4, sharp, FILTER_8TAP_SHARP); ++ ++VP9_8TAP_LOONGARCH_LSX_FUNC(64, smooth, FILTER_8TAP_SMOOTH); ++VP9_8TAP_LOONGARCH_LSX_FUNC(32, smooth, FILTER_8TAP_SMOOTH); ++VP9_8TAP_LOONGARCH_LSX_FUNC(16, smooth, FILTER_8TAP_SMOOTH); ++VP9_8TAP_LOONGARCH_LSX_FUNC(8, smooth, FILTER_8TAP_SMOOTH); ++VP9_8TAP_LOONGARCH_LSX_FUNC(4, smooth, FILTER_8TAP_SMOOTH); ++ ++VP9_COPY_LOONGARCH_LSX_FUNC(64); ++VP9_COPY_LOONGARCH_LSX_FUNC(32); ++VP9_COPY_LOONGARCH_LSX_FUNC(16); ++VP9_COPY_LOONGARCH_LSX_FUNC(8); ++ ++#undef VP9_8TAP_LOONGARCH_LSX_FUNC ++#undef VP9_COPY_LOONGARCH_LSX_FUNC ++ ++void ff_vert_16x16_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, ++ const uint8_t *top); ++void ff_vert_32x32_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, ++ const uint8_t *top); ++void ff_hor_16x16_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, ++ const uint8_t *top); ++void ff_hor_32x32_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, ++ const uint8_t *top); ++void ff_dc_4x4_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, ++ const uint8_t *top); ++void ff_dc_8x8_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, ++ const uint8_t *top); ++void ff_dc_16x16_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, ++ const uint8_t *top); ++void ff_dc_32x32_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, ++ const uint8_t *top); ++void ff_dc_left_4x4_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, ++ const uint8_t *top); ++void ff_dc_left_8x8_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, ++ const uint8_t *top); ++void ff_dc_left_16x16_lsx(uint8_t *dst, ptrdiff_t stride, ++ const uint8_t *left, const uint8_t *top); ++void ff_dc_left_32x32_lsx(uint8_t *dst, ptrdiff_t stride, ++ const uint8_t *left, const uint8_t *top); ++void ff_dc_top_4x4_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, ++ const uint8_t *top); ++void ff_dc_top_8x8_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, ++ const uint8_t *top); ++void ff_dc_top_16x16_lsx(uint8_t *dst, ptrdiff_t stride, ++ const uint8_t *left, const uint8_t *top); ++void ff_dc_top_32x32_lsx(uint8_t *dst, ptrdiff_t stride, ++ const uint8_t *left, const uint8_t *top); ++void ff_dc_128_16x16_lsx(uint8_t *dst, ptrdiff_t stride, ++ const uint8_t *left, const uint8_t *top); ++void ff_dc_128_32x32_lsx(uint8_t *dst, ptrdiff_t stride, ++ const uint8_t *left, const uint8_t *top); ++void ff_dc_127_16x16_lsx(uint8_t *dst, ptrdiff_t stride, ++ const uint8_t *left, const uint8_t *top); ++void ff_dc_127_32x32_lsx(uint8_t *dst, ptrdiff_t stride, ++ const uint8_t *left, const uint8_t *top); ++void ff_dc_129_16x16_lsx(uint8_t *dst, ptrdiff_t stride, ++ const uint8_t *left, const uint8_t *top); ++void ff_dc_129_32x32_lsx(uint8_t *dst, ptrdiff_t stride, ++ const uint8_t *left, const uint8_t *top); ++void ff_tm_4x4_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, ++ const uint8_t *top); ++void ff_tm_8x8_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, ++ const uint8_t *top); ++void ff_tm_16x16_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, ++ const uint8_t *top); ++void ff_tm_32x32_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, ++ const uint8_t *top); ++void ff_loop_filter_h_16_8_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, ++ int32_t i, int32_t h); ++void ff_loop_filter_v_16_8_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, ++ int32_t i, int32_t h); ++void ff_loop_filter_h_4_8_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, ++ int32_t i, int32_t h); ++void ff_loop_filter_v_4_8_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, ++ int32_t i, int32_t h); ++void ff_loop_filter_h_44_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, ++ int32_t i, int32_t h); ++void ff_loop_filter_v_44_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, ++ int32_t i, int32_t h); ++void ff_loop_filter_h_8_8_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, ++ int32_t i, int32_t h); ++void ff_loop_filter_v_8_8_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, ++ int32_t i, int32_t h); ++void ff_loop_filter_h_88_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, ++ int32_t i, int32_t h); ++void ff_loop_filter_v_88_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, ++ int32_t i, int32_t h); ++void ff_loop_filter_h_84_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, ++ int32_t i, int32_t h); ++void ff_loop_filter_v_84_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, ++ int32_t i, int32_t h); ++void ff_loop_filter_h_48_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, ++ int32_t i, int32_t h); ++void ff_loop_filter_v_48_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, ++ int32_t i, int32_t h); ++void ff_loop_filter_h_16_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, ++ int32_t i, int32_t h); ++void ff_loop_filter_v_16_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, ++ int32_t i, int32_t h); ++void ff_idct_idct_8x8_add_lsx(uint8_t *dst, ptrdiff_t stride, ++ int16_t *block, int eob); ++void ff_idct_idct_16x16_add_lsx(uint8_t *dst, ptrdiff_t stride, ++ int16_t *block, int eob); ++void ff_idct_idct_32x32_add_lsx(uint8_t *dst, ptrdiff_t stride, ++ int16_t *block, int eob); ++ ++#endif /* AVCODEC_LOONGARCH_VP9DSP_LOONGARCH_H */ +diff --git a/libavcodec/mips/Makefile b/libavcodec/mips/Makefile +index 2be4d9b8a2..81a73a4d0e 100644 +--- a/libavcodec/mips/Makefile ++++ b/libavcodec/mips/Makefile +@@ -57,7 +57,8 @@ MSA-OBJS-$(CONFIG_VP8_DECODER) += mips/vp8_mc_msa.o \ + mips/vp8_lpf_msa.o + MSA-OBJS-$(CONFIG_VP3DSP) += mips/vp3dsp_idct_msa.o + MSA-OBJS-$(CONFIG_H264DSP) += mips/h264dsp_msa.o \ +- mips/h264idct_msa.o ++ mips/h264idct_msa.o \ ++ mips/h264_deblock_msa.o + MSA-OBJS-$(CONFIG_H264QPEL) += mips/h264qpel_msa.o + MSA-OBJS-$(CONFIG_H264CHROMA) += mips/h264chroma_msa.o + MSA-OBJS-$(CONFIG_H264PRED) += mips/h264pred_msa.o +diff --git a/libavcodec/mips/blockdsp_mmi.c b/libavcodec/mips/blockdsp_mmi.c +index 68641e2544..8b5c7e955c 100644 +--- a/libavcodec/mips/blockdsp_mmi.c ++++ b/libavcodec/mips/blockdsp_mmi.c +@@ -76,8 +76,8 @@ void ff_clear_block_mmi(int16_t *block) + double ftmp[2]; + + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "xor %[ftmp1], %[ftmp1], %[ftmp1] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp1], %[ftmp1], %[ftmp1] \n\t" + MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x00) + MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x10) + MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x20) +@@ -97,8 +97,8 @@ void ff_clear_blocks_mmi(int16_t *block) + double ftmp[2]; + + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "xor %[ftmp1], %[ftmp1], %[ftmp1] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp1], %[ftmp1], %[ftmp1] \n\t" + MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x00) + MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x10) + MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x20) +diff --git a/libavcodec/mips/cabac.h b/libavcodec/mips/cabac.h +index 6a13b777ba..2f3a3dc0a5 100644 +--- a/libavcodec/mips/cabac.h ++++ b/libavcodec/mips/cabac.h +@@ -2,7 +2,8 @@ + * Loongson SIMD optimized h264chroma + * + * Copyright (c) 2018 Loongson Technology Corporation Limited +- * Copyright (c) 2018 Shiyou Yin ++ * Contributed by Shiyou Yin ++ * Gu Xiwei(guxiwei-hf@loongson.cn) + * + * This file is part of FFmpeg. + * +@@ -25,7 +26,7 @@ + #define AVCODEC_MIPS_CABAC_H + + #include "libavcodec/cabac.h" +-#include "libavutil/mips/asmdefs.h" ++#include "libavutil/mips/mmiutils.h" + #include "config.h" + + #define get_cabac_inline get_cabac_inline_mips +@@ -36,7 +37,7 @@ static av_always_inline int get_cabac_inline(CABACContext *c, + __asm__ volatile ( + "lbu %[bit], 0(%[state]) \n\t" + "and %[tmp0], %[c_range], 0xC0 \n\t" +- PTR_ADDU "%[tmp0], %[tmp0], %[tmp0] \n\t" ++ PTR_SLL "%[tmp0], %[tmp0], 0x01 \n\t" + PTR_ADDU "%[tmp0], %[tmp0], %[tables] \n\t" + PTR_ADDU "%[tmp0], %[tmp0], %[bit] \n\t" + /* tmp1: RangeLPS */ +@@ -44,18 +45,11 @@ static av_always_inline int get_cabac_inline(CABACContext *c, + + PTR_SUBU "%[c_range], %[c_range], %[tmp1] \n\t" + PTR_SLL "%[tmp0], %[c_range], 0x11 \n\t" +- PTR_SUBU "%[tmp0], %[tmp0], %[c_low] \n\t" +- +- /* tmp2: lps_mask */ +- PTR_SRA "%[tmp2], %[tmp0], 0x1F \n\t" +- /* If tmp0 < 0, lps_mask == 0xffffffff*/ +- /* If tmp0 >= 0, lps_mask == 0x00000000*/ ++ "slt %[tmp2], %[tmp0], %[c_low] \n\t" + "beqz %[tmp2], 1f \n\t" +- PTR_SLL "%[tmp0], %[c_range], 0x11 \n\t" ++ "move %[c_range], %[tmp1] \n\t" ++ "not %[bit], %[bit] \n\t" + PTR_SUBU "%[c_low], %[c_low], %[tmp0] \n\t" +- PTR_SUBU "%[tmp0], %[tmp1], %[c_range] \n\t" +- PTR_ADDU "%[c_range], %[c_range], %[tmp0] \n\t" +- "xor %[bit], %[bit], %[tmp2] \n\t" + + "1: \n\t" + /* tmp1: *state */ +@@ -70,23 +64,18 @@ static av_always_inline int get_cabac_inline(CABACContext *c, + PTR_SLL "%[c_range], %[c_range], %[tmp2] \n\t" + PTR_SLL "%[c_low], %[c_low], %[tmp2] \n\t" + +- "and %[tmp0], %[c_low], %[cabac_mask] \n\t" +- "bnez %[tmp0], 1f \n\t" +- PTR_ADDI "%[tmp0], %[c_low], -0X01 \n\t" ++ "and %[tmp1], %[c_low], %[cabac_mask] \n\t" ++ "bnez %[tmp1], 1f \n\t" ++ PTR_ADDIU "%[tmp0], %[c_low], -0X01 \n\t" + "xor %[tmp0], %[c_low], %[tmp0] \n\t" + PTR_SRA "%[tmp0], %[tmp0], 0x0f \n\t" + PTR_ADDU "%[tmp0], %[tmp0], %[tables] \n\t" ++ /* tmp2: ff_h264_norm_shift[x >> (CABAC_BITS - 1)] */ + "lbu %[tmp2], %[norm_off](%[tmp0]) \n\t" +-#if CABAC_BITS == 16 +- "lbu %[tmp0], 0(%[c_bytestream]) \n\t" +- "lbu %[tmp1], 1(%[c_bytestream]) \n\t" +- PTR_SLL "%[tmp0], %[tmp0], 0x09 \n\t" +- PTR_SLL "%[tmp1], %[tmp1], 0x01 \n\t" +- PTR_ADDU "%[tmp0], %[tmp0], %[tmp1] \n\t" +-#else +- "lbu %[tmp0], 0(%[c_bytestream]) \n\t" ++ ++ "lhu %[tmp0], 0(%[c_bytestream]) \n\t" ++ "wsbh %[tmp0], %[tmp0] \n\t" + PTR_SLL "%[tmp0], %[tmp0], 0x01 \n\t" +-#endif + PTR_SUBU "%[tmp0], %[tmp0], %[cabac_mask] \n\t" + + "li %[tmp1], 0x07 \n\t" +@@ -94,10 +83,13 @@ static av_always_inline int get_cabac_inline(CABACContext *c, + PTR_SLL "%[tmp0], %[tmp0], %[tmp1] \n\t" + PTR_ADDU "%[c_low], %[c_low], %[tmp0] \n\t" + +-#if !UNCHECKED_BITSTREAM_READER +- "bge %[c_bytestream], %[c_bytestream_end], 1f \n\t" ++#if UNCHECKED_BITSTREAM_READER ++ PTR_ADDIU "%[c_bytestream], %[c_bytestream], 0x02 \n\t" ++#else ++ "slt %[tmp0], %[c_bytestream], %[c_bytestream_end] \n\t" ++ PTR_ADDIU "%[tmp2], %[c_bytestream], 0x02 \n\t" ++ "movn %[c_bytestream], %[tmp2], %[tmp0] \n\t" + #endif +- PTR_ADDIU "%[c_bytestream], %[c_bytestream], 0X02 \n\t" + "1: \n\t" + : [bit]"=&r"(bit), [tmp0]"=&r"(tmp0), [tmp1]"=&r"(tmp1), [tmp2]"=&r"(tmp2), + [c_range]"+&r"(c->range), [c_low]"+&r"(c->low), +@@ -116,4 +108,85 @@ static av_always_inline int get_cabac_inline(CABACContext *c, + return bit; + } + ++#define get_cabac_bypass get_cabac_bypass_mips ++static av_always_inline int get_cabac_bypass_mips(CABACContext *c) ++{ ++ mips_reg tmp0, tmp1; ++ int res = 0; ++ __asm__ volatile( ++ PTR_SLL "%[c_low], %[c_low], 0x01 \n\t" ++ "and %[tmp0], %[c_low], %[cabac_mask] \n\t" ++ "bnez %[tmp0], 1f \n\t" ++ "lhu %[tmp1], 0(%[c_bytestream]) \n\t" ++ "wsbh %[tmp1], %[tmp1] \n\t" ++ PTR_SLL "%[tmp1], %[tmp1], 0x01 \n\t" ++ PTR_SUBU "%[tmp1], %[tmp1], %[cabac_mask] \n\t" ++ PTR_ADDU "%[c_low], %[c_low], %[tmp1] \n\t" ++#if UNCHECKED_BITSTREAM_READER ++ PTR_ADDIU "%[c_bytestream], %[c_bytestream], 0x02 \n\t" ++#else ++ "slt %[tmp0], %[c_bytestream], %[c_bytestream_end] \n\t" ++ PTR_ADDIU "%[tmp1], %[c_bytestream], 0x02 \n\t" ++ "movn %[c_bytestream], %[tmp1], %[tmp0] \n\t" ++#endif ++ "1: \n\t" ++ PTR_SLL "%[tmp1], %[c_range], 0x11 \n\t" ++ "slt %[tmp0], %[c_low], %[tmp1] \n\t" ++ PTR_SUBU "%[tmp1], %[c_low], %[tmp1] \n\t" ++ "movz %[res], %[one], %[tmp0] \n\t" ++ "movz %[c_low], %[tmp1], %[tmp0] \n\t" ++ : [tmp0]"=&r"(tmp0), [tmp1]"=&r"(tmp1), [res]"+&r"(res), ++ [c_range]"+&r"(c->range), [c_low]"+&r"(c->low), ++ [c_bytestream]"+&r"(c->bytestream) ++ : [cabac_mask]"r"(CABAC_MASK), ++#if !UNCHECKED_BITSTREAM_READER ++ [c_bytestream_end]"r"(c->bytestream_end), ++#endif ++ [one]"r"(0x01) ++ : "memory" ++ ); ++ return res; ++} ++ ++#define get_cabac_bypass_sign get_cabac_bypass_sign_mips ++static av_always_inline int get_cabac_bypass_sign_mips(CABACContext *c, int val) ++{ ++ mips_reg tmp0, tmp1; ++ int res = val; ++ __asm__ volatile( ++ PTR_SLL "%[c_low], %[c_low], 0x01 \n\t" ++ "and %[tmp0], %[c_low], %[cabac_mask] \n\t" ++ "bnez %[tmp0], 1f \n\t" ++ "lhu %[tmp1], 0(%[c_bytestream]) \n\t" ++ "wsbh %[tmp1], %[tmp1] \n\t" ++ PTR_SLL "%[tmp1], %[tmp1], 0x01 \n\t" ++ PTR_SUBU "%[tmp1], %[tmp1], %[cabac_mask] \n\t" ++ PTR_ADDU "%[c_low], %[c_low], %[tmp1] \n\t" ++#if UNCHECKED_BITSTREAM_READER ++ PTR_ADDIU "%[c_bytestream], %[c_bytestream], 0x02 \n\t" ++#else ++ "slt %[tmp0], %[c_bytestream], %[c_bytestream_end] \n\t" ++ PTR_ADDIU "%[tmp1], %[c_bytestream], 0x02 \n\t" ++ "movn %[c_bytestream], %[tmp1], %[tmp0] \n\t" ++#endif ++ "1: \n\t" ++ PTR_SLL "%[tmp1], %[c_range], 0x11 \n\t" ++ "slt %[tmp0], %[c_low], %[tmp1] \n\t" ++ PTR_SUBU "%[tmp1], %[c_low], %[tmp1] \n\t" ++ "movz %[c_low], %[tmp1], %[tmp0] \n\t" ++ PTR_SUBU "%[tmp1], %[zero], %[res] \n\t" ++ "movn %[res], %[tmp1], %[tmp0] \n\t" ++ : [tmp0]"=&r"(tmp0), [tmp1]"=&r"(tmp1), [res]"+&r"(res), ++ [c_range]"+&r"(c->range), [c_low]"+&r"(c->low), ++ [c_bytestream]"+&r"(c->bytestream) ++ : [cabac_mask]"r"(CABAC_MASK), ++#if !UNCHECKED_BITSTREAM_READER ++ [c_bytestream_end]"r"(c->bytestream_end), ++#endif ++ [zero]"r"(0x0) ++ : "memory" ++ ); ++ ++ return res; ++} + #endif /* AVCODEC_MIPS_CABAC_H */ +diff --git a/libavcodec/mips/constants.c b/libavcodec/mips/constants.c +index a7c4a5ccf6..6a8f1a522b 100644 +--- a/libavcodec/mips/constants.c ++++ b/libavcodec/mips/constants.c +@@ -19,50 +19,49 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "config.h" +-#include "libavutil/mem.h" ++#include "libavutil/intfloat.h" + #include "constants.h" + +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_1) = {0x0001000100010001ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_2) = {0x0002000200020002ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_3) = {0x0003000300030003ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_4) = {0x0004000400040004ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_5) = {0x0005000500050005ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_6) = {0x0006000600060006ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_8) = {0x0008000800080008ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_9) = {0x0009000900090009ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_10) = {0x000A000A000A000AULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_12) = {0x000C000C000C000CULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_15) = {0x000F000F000F000FULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_16) = {0x0010001000100010ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_17) = {0x0011001100110011ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_18) = {0x0012001200120012ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_20) = {0x0014001400140014ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_22) = {0x0016001600160016ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_28) = {0x001C001C001C001CULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_32) = {0x0020002000200020ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_53) = {0x0035003500350035ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_64) = {0x0040004000400040ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_128) = {0x0080008000800080ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_512) = {0x0200020002000200ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_m8tom5) = {0xFFFBFFFAFFF9FFF8ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_m4tom1) = {0xFFFFFFFEFFFDFFFCULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_1to4) = {0x0004000300020001ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_5to8) = {0x0008000700060005ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_0to3) = {0x0003000200010000ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_4to7) = {0x0007000600050004ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_8tob) = {0x000b000a00090008ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pw_ctof) = {0x000f000e000d000cULL}; +- +-DECLARE_ALIGNED(8, const uint64_t, ff_pb_1) = {0x0101010101010101ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pb_3) = {0x0303030303030303ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pb_80) = {0x8080808080808080ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pb_A1) = {0xA1A1A1A1A1A1A1A1ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_pb_FE) = {0xFEFEFEFEFEFEFEFEULL}; +- +-DECLARE_ALIGNED(8, const uint64_t, ff_rnd) = {0x0004000400040004ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_rnd2) = {0x0040004000400040ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_rnd3) = {0x0020002000200020ULL}; +- +-DECLARE_ALIGNED(8, const uint64_t, ff_wm1010) = {0xFFFF0000FFFF0000ULL}; +-DECLARE_ALIGNED(8, const uint64_t, ff_d40000) = {0x0000000000040000ULL}; ++union av_intfloat64 ff_pw_1 = {0x0001000100010001ULL}; ++union av_intfloat64 ff_pw_2 = {0x0002000200020002ULL}; ++union av_intfloat64 ff_pw_3 = {0x0003000300030003ULL}; ++union av_intfloat64 ff_pw_4 = {0x0004000400040004ULL}; ++union av_intfloat64 ff_pw_5 = {0x0005000500050005ULL}; ++union av_intfloat64 ff_pw_6 = {0x0006000600060006ULL}; ++union av_intfloat64 ff_pw_8 = {0x0008000800080008ULL}; ++union av_intfloat64 ff_pw_9 = {0x0009000900090009ULL}; ++union av_intfloat64 ff_pw_10 = {0x000A000A000A000AULL}; ++union av_intfloat64 ff_pw_12 = {0x000C000C000C000CULL}; ++union av_intfloat64 ff_pw_15 = {0x000F000F000F000FULL}; ++union av_intfloat64 ff_pw_16 = {0x0010001000100010ULL}; ++union av_intfloat64 ff_pw_17 = {0x0011001100110011ULL}; ++union av_intfloat64 ff_pw_18 = {0x0012001200120012ULL}; ++union av_intfloat64 ff_pw_20 = {0x0014001400140014ULL}; ++union av_intfloat64 ff_pw_22 = {0x0016001600160016ULL}; ++union av_intfloat64 ff_pw_28 = {0x001C001C001C001CULL}; ++union av_intfloat64 ff_pw_32 = {0x0020002000200020ULL}; ++union av_intfloat64 ff_pw_53 = {0x0035003500350035ULL}; ++union av_intfloat64 ff_pw_64 = {0x0040004000400040ULL}; ++union av_intfloat64 ff_pw_128 = {0x0080008000800080ULL}; ++union av_intfloat64 ff_pw_512 = {0x0200020002000200ULL}; ++union av_intfloat64 ff_pw_m8tom5 = {0xFFFBFFFAFFF9FFF8ULL}; ++union av_intfloat64 ff_pw_m4tom1 = {0xFFFFFFFEFFFDFFFCULL}; ++union av_intfloat64 ff_pw_1to4 = {0x0004000300020001ULL}; ++union av_intfloat64 ff_pw_5to8 = {0x0008000700060005ULL}; ++union av_intfloat64 ff_pw_0to3 = {0x0003000200010000ULL}; ++union av_intfloat64 ff_pw_4to7 = {0x0007000600050004ULL}; ++union av_intfloat64 ff_pw_8tob = {0x000b000a00090008ULL}; ++union av_intfloat64 ff_pw_ctof = {0x000f000e000d000cULL}; ++union av_intfloat64 ff_pw_32_1 = {0x0000000100000001ULL}; ++union av_intfloat64 ff_pw_32_4 = {0x0000000400000004ULL}; ++union av_intfloat64 ff_pw_32_64 = {0x0000004000000040ULL}; ++union av_intfloat64 ff_pb_1 = {0x0101010101010101ULL}; ++union av_intfloat64 ff_pb_3 = {0x0303030303030303ULL}; ++union av_intfloat64 ff_pb_80 = {0x8080808080808080ULL}; ++union av_intfloat64 ff_pb_A1 = {0xA1A1A1A1A1A1A1A1ULL}; ++union av_intfloat64 ff_pb_FE = {0xFEFEFEFEFEFEFEFEULL}; ++union av_intfloat64 ff_rnd = {0x0004000400040004ULL}; ++union av_intfloat64 ff_rnd2 = {0x0040004000400040ULL}; ++union av_intfloat64 ff_rnd3 = {0x0020002000200020ULL}; ++union av_intfloat64 ff_ff_wm1010 = {0xFFFF0000FFFF0000ULL}; ++union av_intfloat64 ff_d40000 = {0x0000000000040000ULL}; +diff --git a/libavcodec/mips/constants.h b/libavcodec/mips/constants.h +index 2604559950..bd86cd1bf1 100644 +--- a/libavcodec/mips/constants.h ++++ b/libavcodec/mips/constants.h +@@ -22,50 +22,48 @@ + #ifndef AVCODEC_MIPS_CONSTANTS_H + #define AVCODEC_MIPS_CONSTANTS_H + +-#include +- +-extern const uint64_t ff_pw_1; +-extern const uint64_t ff_pw_2; +-extern const uint64_t ff_pw_3; +-extern const uint64_t ff_pw_4; +-extern const uint64_t ff_pw_5; +-extern const uint64_t ff_pw_6; +-extern const uint64_t ff_pw_8; +-extern const uint64_t ff_pw_9; +-extern const uint64_t ff_pw_10; +-extern const uint64_t ff_pw_12; +-extern const uint64_t ff_pw_15; +-extern const uint64_t ff_pw_16; +-extern const uint64_t ff_pw_17; +-extern const uint64_t ff_pw_18; +-extern const uint64_t ff_pw_20; +-extern const uint64_t ff_pw_22; +-extern const uint64_t ff_pw_28; +-extern const uint64_t ff_pw_32; +-extern const uint64_t ff_pw_53; +-extern const uint64_t ff_pw_64; +-extern const uint64_t ff_pw_128; +-extern const uint64_t ff_pw_512; +-extern const uint64_t ff_pw_m8tom5; +-extern const uint64_t ff_pw_m4tom1; +-extern const uint64_t ff_pw_1to4; +-extern const uint64_t ff_pw_5to8; +-extern const uint64_t ff_pw_0to3; +-extern const uint64_t ff_pw_4to7; +-extern const uint64_t ff_pw_8tob; +-extern const uint64_t ff_pw_ctof; +- +-extern const uint64_t ff_pb_1; +-extern const uint64_t ff_pb_3; +-extern const uint64_t ff_pb_80; +-extern const uint64_t ff_pb_A1; +-extern const uint64_t ff_pb_FE; +- +-extern const uint64_t ff_rnd; +-extern const uint64_t ff_rnd2; +-extern const uint64_t ff_rnd3; +- +-extern const uint64_t ff_wm1010; +-extern const uint64_t ff_d40000; ++extern union av_intfloat64 ff_pw_1; ++extern union av_intfloat64 ff_pw_2; ++extern union av_intfloat64 ff_pw_3; ++extern union av_intfloat64 ff_pw_4; ++extern union av_intfloat64 ff_pw_5; ++extern union av_intfloat64 ff_pw_6; ++extern union av_intfloat64 ff_pw_8; ++extern union av_intfloat64 ff_pw_9; ++extern union av_intfloat64 ff_pw_10; ++extern union av_intfloat64 ff_pw_12; ++extern union av_intfloat64 ff_pw_15; ++extern union av_intfloat64 ff_pw_16; ++extern union av_intfloat64 ff_pw_17; ++extern union av_intfloat64 ff_pw_18; ++extern union av_intfloat64 ff_pw_20; ++extern union av_intfloat64 ff_pw_22; ++extern union av_intfloat64 ff_pw_28; ++extern union av_intfloat64 ff_pw_32; ++extern union av_intfloat64 ff_pw_53; ++extern union av_intfloat64 ff_pw_64; ++extern union av_intfloat64 ff_pw_128; ++extern union av_intfloat64 ff_pw_512; ++extern union av_intfloat64 ff_pw_m8tom5; ++extern union av_intfloat64 ff_pw_m4tom1; ++extern union av_intfloat64 ff_pw_1to4; ++extern union av_intfloat64 ff_pw_5to8; ++extern union av_intfloat64 ff_pw_0to3; ++extern union av_intfloat64 ff_pw_4to7; ++extern union av_intfloat64 ff_pw_8tob; ++extern union av_intfloat64 ff_pw_ctof; ++extern union av_intfloat64 ff_pw_32_1; ++extern union av_intfloat64 ff_pw_32_4; ++extern union av_intfloat64 ff_pw_32_64; ++extern union av_intfloat64 ff_pb_1; ++extern union av_intfloat64 ff_pb_3; ++extern union av_intfloat64 ff_pb_80; ++extern union av_intfloat64 ff_pb_A1; ++extern union av_intfloat64 ff_pb_FE; ++extern union av_intfloat64 ff_rnd; ++extern union av_intfloat64 ff_rnd2; ++extern union av_intfloat64 ff_rnd3; ++extern union av_intfloat64 ff_wm1010; ++extern union av_intfloat64 ff_d40000; + + #endif /* AVCODEC_MIPS_CONSTANTS_H */ +diff --git a/libavcodec/mips/h264_deblock_msa.c b/libavcodec/mips/h264_deblock_msa.c +new file mode 100644 +index 0000000000..4fed55c504 +--- /dev/null ++++ b/libavcodec/mips/h264_deblock_msa.c +@@ -0,0 +1,153 @@ ++/* ++ * MIPS SIMD optimized H.264 deblocking code ++ * ++ * Copyright (c) 2020 Loongson Technology Corporation Limited ++ * Gu Xiwei ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavcodec/bit_depth_template.c" ++#include "h264dsp_mips.h" ++#include "libavutil/mips/generic_macros_msa.h" ++#include "libavcodec/mips/h264dsp_mips.h" ++ ++#define h264_loop_filter_strength_iteration_msa(edges, step, mask_mv, dir, \ ++ d_idx, mask_dir) \ ++do { \ ++ int b_idx = 0; \ ++ int step_x4 = step << 2; \ ++ int d_idx_12 = d_idx + 12; \ ++ int d_idx_52 = d_idx + 52; \ ++ int d_idx_x4 = d_idx << 2; \ ++ int d_idx_x4_48 = d_idx_x4 + 48; \ ++ int dir_x32 = dir * 32; \ ++ uint8_t *ref_t = (uint8_t*)ref; \ ++ uint8_t *mv_t = (uint8_t*)mv; \ ++ uint8_t *nnz_t = (uint8_t*)nnz; \ ++ uint8_t *bS_t = (uint8_t*)bS; \ ++ mask_mv <<= 3; \ ++ for (; b_idx < edges; b_idx += step) { \ ++ out &= mask_dir; \ ++ if (!(mask_mv & b_idx)) { \ ++ if (bidir) { \ ++ ref_2 = LD_SB(ref_t + d_idx_12); \ ++ ref_3 = LD_SB(ref_t + d_idx_52); \ ++ ref_0 = LD_SB(ref_t + 12); \ ++ ref_1 = LD_SB(ref_t + 52); \ ++ ref_2 = (v16i8)__msa_ilvr_w((v4i32)ref_3, (v4i32)ref_2); \ ++ ref_0 = (v16i8)__msa_ilvr_w((v4i32)ref_0, (v4i32)ref_0); \ ++ ref_1 = (v16i8)__msa_ilvr_w((v4i32)ref_1, (v4i32)ref_1); \ ++ ref_3 = (v16i8)__msa_shf_h((v8i16)ref_2, 0x4e); \ ++ ref_0 -= ref_2; \ ++ ref_1 -= ref_3; \ ++ ref_0 = (v16i8)__msa_or_v((v16u8)ref_0, (v16u8)ref_1); \ ++\ ++ tmp_2 = LD_SH(mv_t + d_idx_x4_48); \ ++ tmp_3 = LD_SH(mv_t + 48); \ ++ tmp_4 = LD_SH(mv_t + 208); \ ++ tmp_5 = tmp_2 - tmp_3; \ ++ tmp_6 = tmp_2 - tmp_4; \ ++ SAT_SH2_SH(tmp_5, tmp_6, 7); \ ++ tmp_0 = __msa_pckev_b((v16i8)tmp_6, (v16i8)tmp_5); \ ++ tmp_0 += cnst_1; \ ++ tmp_0 = (v16i8)__msa_subs_u_b((v16u8)tmp_0, (v16u8)cnst_0);\ ++ tmp_0 = (v16i8)__msa_sat_s_h((v8i16)tmp_0, 7); \ ++ tmp_0 = __msa_pckev_b(tmp_0, tmp_0); \ ++ out = (v16i8)__msa_or_v((v16u8)ref_0, (v16u8)tmp_0); \ ++\ ++ tmp_2 = LD_SH(mv_t + 208 + d_idx_x4); \ ++ tmp_5 = tmp_2 - tmp_3; \ ++ tmp_6 = tmp_2 - tmp_4; \ ++ SAT_SH2_SH(tmp_5, tmp_6, 7); \ ++ tmp_1 = __msa_pckev_b((v16i8)tmp_6, (v16i8)tmp_5); \ ++ tmp_1 += cnst_1; \ ++ tmp_1 = (v16i8)__msa_subs_u_b((v16u8)tmp_1, (v16u8)cnst_0); \ ++ tmp_1 = (v16i8)__msa_sat_s_h((v8i16)tmp_1, 7); \ ++ tmp_1 = __msa_pckev_b(tmp_1, tmp_1); \ ++\ ++ tmp_1 = (v16i8)__msa_shf_h((v8i16)tmp_1, 0x4e); \ ++ out = (v16i8)__msa_or_v((v16u8)out, (v16u8)tmp_1); \ ++ tmp_0 = (v16i8)__msa_shf_h((v8i16)out, 0x4e); \ ++ out = (v16i8)__msa_min_u_b((v16u8)out, (v16u8)tmp_0); \ ++ } else { \ ++ ref_0 = LD_SB(ref_t + d_idx_12); \ ++ ref_3 = LD_SB(ref_t + 12); \ ++ tmp_2 = LD_SH(mv_t + d_idx_x4_48); \ ++ tmp_3 = LD_SH(mv_t + 48); \ ++ tmp_4 = tmp_3 - tmp_2; \ ++ tmp_1 = (v16i8)__msa_sat_s_h(tmp_4, 7); \ ++ tmp_1 = __msa_pckev_b(tmp_1, tmp_1); \ ++ tmp_1 += cnst_1; \ ++ out = (v16i8)__msa_subs_u_b((v16u8)tmp_1, (v16u8)cnst_0); \ ++ out = (v16i8)__msa_sat_s_h((v8i16)out, 7); \ ++ out = __msa_pckev_b(out, out); \ ++ ref_0 = ref_3 - ref_0; \ ++ out = (v16i8)__msa_or_v((v16u8)out, (v16u8)ref_0); \ ++ } \ ++ } \ ++ tmp_0 = LD_SB(nnz_t + 12); \ ++ tmp_1 = LD_SB(nnz_t + d_idx_12); \ ++ tmp_0 = (v16i8)__msa_or_v((v16u8)tmp_0, (v16u8)tmp_1); \ ++ tmp_0 = (v16i8)__msa_min_u_b((v16u8)tmp_0, (v16u8)cnst_2); \ ++ out = (v16i8)__msa_min_u_b((v16u8)out, (v16u8)cnst_2); \ ++ tmp_0 = (v16i8)((v8i16)tmp_0 << 1); \ ++ tmp_0 = (v16i8)__msa_max_u_b((v16u8)out, (v16u8)tmp_0); \ ++ tmp_0 = __msa_ilvr_b(zero, tmp_0); \ ++ ST_D1(tmp_0, 0, bS_t + dir_x32); \ ++ ref_t += step; \ ++ mv_t += step_x4; \ ++ nnz_t += step; \ ++ bS_t += step; \ ++ } \ ++} while(0) ++ ++void ff_h264_loop_filter_strength_msa(int16_t bS[2][4][4], uint8_t nnz[40], ++ int8_t ref[2][40], int16_t mv[2][40][2], ++ int bidir, int edges, int step, ++ int mask_mv0, int mask_mv1, int field) ++{ ++ v16i8 out; ++ v16i8 ref_0, ref_1, ref_2, ref_3; ++ v16i8 tmp_0, tmp_1; ++ v8i16 tmp_2, tmp_3, tmp_4, tmp_5, tmp_6; ++ v16i8 cnst_0, cnst_1, cnst_2; ++ v16i8 zero = { 0 }; ++ v16i8 one = __msa_fill_b(0xff); ++ if (field) { ++ cnst_0 = (v16i8)__msa_fill_h(0x206); ++ cnst_1 = (v16i8)__msa_fill_h(0x103); ++ cnst_2 = (v16i8)__msa_fill_h(0x101); ++ } else { ++ cnst_0 = __msa_fill_b(0x6); ++ cnst_1 = __msa_fill_b(0x3); ++ cnst_2 = __msa_fill_b(0x1); ++ } ++ step <<= 3; ++ edges <<= 3; ++ ++ h264_loop_filter_strength_iteration_msa(edges, step, mask_mv1, 1, -8, zero); ++ h264_loop_filter_strength_iteration_msa(32, 8, mask_mv0, 0, -1, one); ++ ++ LD_SB2((int8_t*)bS, 16, tmp_0, tmp_1); ++ tmp_2 = (v8i16)__msa_ilvl_d((v2i64)tmp_0, (v2i64)tmp_0); ++ tmp_3 = (v8i16)__msa_ilvl_d((v2i64)tmp_1, (v2i64)tmp_1); ++ TRANSPOSE4x4_SH_SH(tmp_0, tmp_2, tmp_1, tmp_3, tmp_2, tmp_3, tmp_4, tmp_5); ++ tmp_0 = (v16i8)__msa_ilvr_d((v2i64)tmp_3, (v2i64)tmp_2); ++ tmp_1 = (v16i8)__msa_ilvr_d((v2i64)tmp_5, (v2i64)tmp_4); ++ ST_SB2(tmp_0, tmp_1, (int8_t*)bS, 16); ++} +diff --git a/libavcodec/mips/h264chroma_init_mips.c b/libavcodec/mips/h264chroma_init_mips.c +index 6bb19d3ddd..755cc0401f 100644 +--- a/libavcodec/mips/h264chroma_init_mips.c ++++ b/libavcodec/mips/h264chroma_init_mips.c +@@ -28,7 +28,15 @@ av_cold void ff_h264chroma_init_mips(H264ChromaContext *c, int bit_depth) + int cpu_flags = av_get_cpu_flags(); + int high_bit_depth = bit_depth > 8; + +- /* MMI apears to be faster than MSA here */ ++ if (have_mmi(cpu_flags)) { ++ if (!high_bit_depth) { ++ c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_mmi; ++ c->avg_h264_chroma_pixels_tab[0] = ff_avg_h264_chroma_mc8_mmi; ++ c->put_h264_chroma_pixels_tab[1] = ff_put_h264_chroma_mc4_mmi; ++ c->avg_h264_chroma_pixels_tab[1] = ff_avg_h264_chroma_mc4_mmi; ++ } ++ } ++ + if (have_msa(cpu_flags)) { + if (!high_bit_depth) { + c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_msa; +@@ -40,13 +48,4 @@ av_cold void ff_h264chroma_init_mips(H264ChromaContext *c, int bit_depth) + c->avg_h264_chroma_pixels_tab[2] = ff_avg_h264_chroma_mc2_msa; + } + } +- +- if (have_mmi(cpu_flags)) { +- if (!high_bit_depth) { +- c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_mmi; +- c->avg_h264_chroma_pixels_tab[0] = ff_avg_h264_chroma_mc8_mmi; +- c->put_h264_chroma_pixels_tab[1] = ff_put_h264_chroma_mc4_mmi; +- c->avg_h264_chroma_pixels_tab[1] = ff_avg_h264_chroma_mc4_mmi; +- } +- } + } +diff --git a/libavcodec/mips/h264chroma_mmi.c b/libavcodec/mips/h264chroma_mmi.c +index 739dd7d4d6..cc2d7cb7e9 100644 +--- a/libavcodec/mips/h264chroma_mmi.c ++++ b/libavcodec/mips/h264chroma_mmi.c +@@ -29,12 +29,12 @@ + void ff_put_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + int h, int x, int y) + { +- int A = 64, B, C, D, E; + double ftmp[12]; +- uint64_t tmp[1]; ++ union mmi_intfloat64 A, B, C, D, E; ++ A.i = 64; + + if (!(x || y)) { +- /* x=0, y=0, A=64 */ ++ /* x=0, y=0, A.i=64 */ + __asm__ volatile ( + "1: \n\t" + MMI_ULDC1(%[ftmp0], %[src], 0x00) +@@ -66,14 +66,13 @@ void ff_put_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + ); + } else if (x && y) { + /* x!=0, y!=0 */ +- D = x * y; +- B = (x << 3) - D; +- C = (y << 3) - D; +- A = 64 - D - B - C; ++ D.i = x * y; ++ B.i = (x << 3) - D.i; ++ C.i = (y << 3) - D.i; ++ A.i = 64 - D.i - B.i - C.i; + + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "dli %[tmp0], 0x06 \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "pshufh %[A], %[A], %[ftmp0] \n\t" + "pshufh %[B], %[B], %[ftmp0] \n\t" + "mtc1 %[tmp0], %[ftmp9] \n\t" +@@ -158,22 +157,21 @@ void ff_put_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), + [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), + [ftmp10]"=&f"(ftmp[10]), [ftmp11]"=&f"(ftmp[11]), +- [tmp0]"=&r"(tmp[0]), + [dst]"+&r"(dst), [src]"+&r"(src), + [h]"+&r"(h) +- : [stride]"r"((mips_reg)stride),[ff_pw_32]"f"(ff_pw_32), +- [A]"f"(A), [B]"f"(B), +- [C]"f"(C), [D]"f"(D) ++ : [stride]"r"((mips_reg)stride),[ff_pw_32]"f"(ff_pw_32.f), ++ [A]"f"(A.f), [B]"f"(B.f), ++ [C]"f"(C.f), [D]"f"(D.f), ++ [tmp0]"r"(0x06) + : "memory" + ); + } else if (x) { + /* x!=0, y==0 */ +- E = x << 3; +- A = 64 - E; ++ E.i = x << 3; ++ A.i = 64 - E.i; + + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "dli %[tmp0], 0x06 \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "pshufh %[A], %[A], %[ftmp0] \n\t" + "pshufh %[E], %[E], %[ftmp0] \n\t" + "mtc1 %[tmp0], %[ftmp7] \n\t" +@@ -207,22 +205,20 @@ void ff_put_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), + [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), + [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), +- [tmp0]"=&r"(tmp[0]), + [dst]"+&r"(dst), [src]"+&r"(src), + [h]"+&r"(h) + : [stride]"r"((mips_reg)stride), +- [ff_pw_32]"f"(ff_pw_32), +- [A]"f"(A), [E]"f"(E) ++ [ff_pw_32]"f"(ff_pw_32.f), [tmp0]"r"(0x06), ++ [A]"f"(A.f), [E]"f"(E.f) + : "memory" + ); + } else { + /* x==0, y!=0 */ +- E = y << 3; +- A = 64 - E; ++ E.i = y << 3; ++ A.i = 64 - E.i; + + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "dli %[tmp0], 0x06 \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "pshufh %[A], %[A], %[ftmp0] \n\t" + "pshufh %[E], %[E], %[ftmp0] \n\t" + "mtc1 %[tmp0], %[ftmp7] \n\t" +@@ -276,12 +272,12 @@ void ff_put_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), + [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), + [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), +- [ftmp8]"=&f"(ftmp[8]), [tmp0]"=&r"(tmp[0]), ++ [ftmp8]"=&f"(ftmp[8]), + [dst]"+&r"(dst), [src]"+&r"(src), + [h]"+&r"(h) + : [stride]"r"((mips_reg)stride), +- [ff_pw_32]"f"(ff_pw_32), +- [A]"f"(A), [E]"f"(E) ++ [ff_pw_32]"f"(ff_pw_32.f), [A]"f"(A.f), ++ [E]"f"(E.f), [tmp0]"r"(0x06) + : "memory" + ); + } +@@ -290,12 +286,12 @@ void ff_put_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + void ff_avg_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + int h, int x, int y) + { +- int A = 64, B, C, D, E; + double ftmp[10]; +- uint64_t tmp[1]; ++ union mmi_intfloat64 A, B, C, D, E; ++ A.i = 64; + + if(!(x || y)){ +- /* x=0, y=0, A=64 */ ++ /* x=0, y=0, A.i=64 */ + __asm__ volatile ( + "1: \n\t" + MMI_ULDC1(%[ftmp0], %[src], 0x00) +@@ -323,13 +319,12 @@ void ff_avg_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + ); + } else if (x && y) { + /* x!=0, y!=0 */ +- D = x * y; +- B = (x << 3) - D; +- C = (y << 3) - D; +- A = 64 - D - B - C; ++ D.i = x * y; ++ B.i = (x << 3) - D.i; ++ C.i = (y << 3) - D.i; ++ A.i = 64 - D.i - B.i - C.i; + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "dli %[tmp0], 0x06 \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "pshufh %[A], %[A], %[ftmp0] \n\t" + "pshufh %[B], %[B], %[ftmp0] \n\t" + "mtc1 %[tmp0], %[ftmp9] \n\t" +@@ -383,21 +378,20 @@ void ff_avg_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), + [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), + [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), +- [tmp0]"=&r"(tmp[0]), + [dst]"+&r"(dst), [src]"+&r"(src), + [h]"+&r"(h) +- : [stride]"r"((mips_reg)stride),[ff_pw_32]"f"(ff_pw_32), +- [A]"f"(A), [B]"f"(B), +- [C]"f"(C), [D]"f"(D) ++ : [stride]"r"((mips_reg)stride),[ff_pw_32]"f"(ff_pw_32.f), ++ [A]"f"(A.f), [B]"f"(B.f), ++ [C]"f"(C.f), [D]"f"(D.f), ++ [tmp0]"r"(0x06) + : "memory" + ); + } else if (x) { + /* x!=0, y==0 */ +- E = x << 3; +- A = 64 - E; ++ E.i = x << 3; ++ A.i = 64 - E.i; + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "dli %[tmp0], 0x06 \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "pshufh %[A], %[A], %[ftmp0] \n\t" + "pshufh %[E], %[E], %[ftmp0] \n\t" + "mtc1 %[tmp0], %[ftmp7] \n\t" +@@ -433,21 +427,19 @@ void ff_avg_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), + [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), + [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), +- [tmp0]"=&r"(tmp[0]), + [dst]"+&r"(dst), [src]"+&r"(src), + [h]"+&r"(h) + : [stride]"r"((mips_reg)stride), +- [ff_pw_32]"f"(ff_pw_32), +- [A]"f"(A), [E]"f"(E) ++ [ff_pw_32]"f"(ff_pw_32.f), [tmp0]"r"(0x06), ++ [A]"f"(A.f), [E]"f"(E.f) + : "memory" + ); + } else { + /* x==0, y!=0 */ +- E = y << 3; +- A = 64 - E; ++ E.i = y << 3; ++ A.i = 64 - E.i; + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "dli %[tmp0], 0x06 \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "pshufh %[A], %[A], %[ftmp0] \n\t" + "pshufh %[E], %[E], %[ftmp0] \n\t" + "mtc1 %[tmp0], %[ftmp7] \n\t" +@@ -469,8 +461,8 @@ void ff_avg_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + "pmullh %[ftmp6], %[ftmp6], %[E] \n\t" + "paddh %[ftmp2], %[ftmp4], %[ftmp6] \n\t" + +- "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" +- "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t" ++ "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t" ++ "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t" + "psrlh %[ftmp1], %[ftmp1], %[ftmp7] \n\t" + "psrlh %[ftmp2], %[ftmp2], %[ftmp7] \n\t" + "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t" +@@ -483,12 +475,11 @@ void ff_avg_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), + [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), + [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), +- [tmp0]"=&r"(tmp[0]), + [dst]"+&r"(dst), [src]"+&r"(src), + [h]"+&r"(h) + : [stride]"r"((mips_reg)stride), +- [ff_pw_32]"f"(ff_pw_32), +- [A]"f"(A), [E]"f"(E) ++ [ff_pw_32]"f"(ff_pw_32.f), [tmp0]"r"(0x06), ++ [A]"f"(A.f), [E]"f"(E.f) + : "memory" + ); + } +@@ -497,20 +488,19 @@ void ff_avg_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + void ff_put_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + int h, int x, int y) + { +- const int A = (8 - x) * (8 - y); +- const int B = x * (8 - y); +- const int C = (8 - x) * y; +- const int D = x * y; +- const int E = B + C; + double ftmp[8]; +- uint64_t tmp[1]; + mips_reg addr[1]; ++ union mmi_intfloat64 A, B, C, D, E; + DECLARE_VAR_LOW32; ++ A.i = (8 - x) * (8 - y); ++ B.i = x * (8 - y); ++ C.i = (8 - x) * y; ++ D.i = x * y; ++ E.i = B.i + C.i; + +- if (D) { ++ if (D.i) { + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "dli %[tmp0], 0x06 \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "pshufh %[A], %[A], %[ftmp0] \n\t" + "pshufh %[B], %[B], %[ftmp0] \n\t" + "mtc1 %[tmp0], %[ftmp7] \n\t" +@@ -547,20 +537,19 @@ void ff_put_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), + [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), + [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), +- [tmp0]"=&r"(tmp[0]), + RESTRICT_ASM_LOW32 + [dst]"+&r"(dst), [src]"+&r"(src), + [h]"+&r"(h) +- : [stride]"r"((mips_reg)stride),[ff_pw_32]"f"(ff_pw_32), +- [A]"f"(A), [B]"f"(B), +- [C]"f"(C), [D]"f"(D) ++ : [stride]"r"((mips_reg)stride),[ff_pw_32]"f"(ff_pw_32.f), ++ [A]"f"(A.f), [B]"f"(B.f), ++ [C]"f"(C.f), [D]"f"(D.f), ++ [tmp0]"r"(0x06) + : "memory" + ); +- } else if (E) { +- const int step = C ? stride : 1; ++ } else if (E.i) { ++ const int step = C.i ? stride : 1; + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "dli %[tmp0], 0x06 \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "pshufh %[A], %[A], %[ftmp0] \n\t" + "pshufh %[E], %[E], %[ftmp0] \n\t" + "mtc1 %[tmp0], %[ftmp5] \n\t" +@@ -585,14 +574,13 @@ void ff_put_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), + [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), + [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), +- [tmp0]"=&r"(tmp[0]), + RESTRICT_ASM_LOW32 + [addr0]"=&r"(addr[0]), + [dst]"+&r"(dst), [src]"+&r"(src), + [h]"+&r"(h) + : [stride]"r"((mips_reg)stride),[step]"r"((mips_reg)step), +- [ff_pw_32]"f"(ff_pw_32), +- [A]"f"(A), [E]"f"(E) ++ [ff_pw_32]"f"(ff_pw_32.f), [tmp0]"r"(0x06), ++ [A]"f"(A.f), [E]"f"(E.f) + : "memory" + ); + } else { +@@ -621,20 +609,19 @@ void ff_put_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + void ff_avg_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + int h, int x, int y) + { +- const int A = (8 - x) *(8 - y); +- const int B = x * (8 - y); +- const int C = (8 - x) * y; +- const int D = x * y; +- const int E = B + C; + double ftmp[8]; +- uint64_t tmp[1]; + mips_reg addr[1]; ++ union mmi_intfloat64 A, B, C, D, E; + DECLARE_VAR_LOW32; ++ A.i = (8 - x) *(8 - y); ++ B.i = x * (8 - y); ++ C.i = (8 - x) * y; ++ D.i = x * y; ++ E.i = B.i + C.i; + +- if (D) { ++ if (D.i) { + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "dli %[tmp0], 0x06 \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "pshufh %[A], %[A], %[ftmp0] \n\t" + "pshufh %[B], %[B], %[ftmp0] \n\t" + "mtc1 %[tmp0], %[ftmp7] \n\t" +@@ -673,20 +660,19 @@ void ff_avg_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), + [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), + [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), +- [tmp0]"=&r"(tmp[0]), + RESTRICT_ASM_LOW32 + [dst]"+&r"(dst), [src]"+&r"(src), + [h]"+&r"(h) +- : [stride]"r"((mips_reg)stride),[ff_pw_32]"f"(ff_pw_32), +- [A]"f"(A), [B]"f"(B), +- [C]"f"(C), [D]"f"(D) ++ : [stride]"r"((mips_reg)stride),[ff_pw_32]"f"(ff_pw_32.f), ++ [A]"f"(A.f), [B]"f"(B.f), ++ [C]"f"(C.f), [D]"f"(D.f), ++ [tmp0]"r"(0x06) + : "memory" + ); +- } else if (E) { +- const int step = C ? stride : 1; ++ } else if (E.i) { ++ const int step = C.i ? stride : 1; + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "dli %[tmp0], 0x06 \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "pshufh %[A], %[A], %[ftmp0] \n\t" + "pshufh %[E], %[E], %[ftmp0] \n\t" + "mtc1 %[tmp0], %[ftmp5] \n\t" +@@ -713,14 +699,13 @@ void ff_avg_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), + [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), + [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), +- [tmp0]"=&r"(tmp[0]), + RESTRICT_ASM_LOW32 + [addr0]"=&r"(addr[0]), + [dst]"+&r"(dst), [src]"+&r"(src), + [h]"+&r"(h) + : [stride]"r"((mips_reg)stride),[step]"r"((mips_reg)step), +- [ff_pw_32]"f"(ff_pw_32), +- [A]"f"(A), [E]"f"(E) ++ [ff_pw_32]"f"(ff_pw_32.f), [tmp0]"r"(0x06), ++ [A]"f"(A.f), [E]"f"(E.f) + : "memory" + ); + } else { +diff --git a/libavcodec/mips/h264dsp_init_mips.c b/libavcodec/mips/h264dsp_init_mips.c +index 9cd05e0f2f..02669e0059 100644 +--- a/libavcodec/mips/h264dsp_init_mips.c ++++ b/libavcodec/mips/h264dsp_init_mips.c +@@ -78,8 +78,12 @@ av_cold void ff_h264dsp_init_mips(H264DSPContext *c, const int bit_depth, + } + + if (have_msa(cpu_flags)) { ++ if (chroma_format_idc <= 1) ++ c->h264_loop_filter_strength = ff_h264_loop_filter_strength_msa; + if (bit_depth == 8) { +- c->h264_v_loop_filter_luma = ff_h264_v_lpf_luma_inter_msa; ++ /* TODO: Presently, MMI version of h264_v_loop_filter_luma are ++ more effective than MSA. To be refined. */ ++ //c->h264_v_loop_filter_luma = ff_h264_v_lpf_luma_inter_msa; + c->h264_h_loop_filter_luma = ff_h264_h_lpf_luma_inter_msa; + c->h264_h_loop_filter_luma_mbaff = + ff_h264_h_loop_filter_luma_mbaff_msa; +diff --git a/libavcodec/mips/h264dsp_mips.h b/libavcodec/mips/h264dsp_mips.h +index 35e16c41b3..5847ef36fe 100644 +--- a/libavcodec/mips/h264dsp_mips.h ++++ b/libavcodec/mips/h264dsp_mips.h +@@ -319,6 +319,10 @@ void ff_vp8_pred8x8_129_dc_8_msa(uint8_t *src, ptrdiff_t stride); + void ff_vp8_pred16x16_127_dc_8_msa(uint8_t *src, ptrdiff_t stride); + void ff_vp8_pred16x16_129_dc_8_msa(uint8_t *src, ptrdiff_t stride); + ++void ff_h264_loop_filter_strength_msa(int16_t bS[2][4][4], uint8_t nnz[40], ++ int8_t ref[2][40], int16_t mv[2][40][2], int bidir, int edges, ++ int step, int mask_mv0, int mask_mv1, int field); ++ + void ff_h264_add_pixels4_8_mmi(uint8_t *_dst, int16_t *_src, int stride); + void ff_h264_idct_add_8_mmi(uint8_t *dst, int16_t *block, int stride); + void ff_h264_idct8_add_8_mmi(uint8_t *dst, int16_t *block, int stride); +diff --git a/libavcodec/mips/h264dsp_mmi.c b/libavcodec/mips/h264dsp_mmi.c +index 173e191c77..66a82c131e 100644 +--- a/libavcodec/mips/h264dsp_mmi.c ++++ b/libavcodec/mips/h264dsp_mmi.c +@@ -33,7 +33,7 @@ void ff_h264_add_pixels4_8_mmi(uint8_t *dst, int16_t *src, int stride) + DECLARE_VAR_LOW32; + + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + MMI_LDC1(%[ftmp1], %[src], 0x00) + MMI_LDC1(%[ftmp2], %[src], 0x08) + MMI_LDC1(%[ftmp3], %[src], 0x10) +@@ -88,7 +88,7 @@ void ff_h264_idct_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + MMI_LDC1(%[ftmp2], %[block], 0x10) + MMI_LDC1(%[ftmp3], %[block], 0x18) + /* memset(block, 0, 32) */ +- "xor %[ftmp4], %[ftmp4], %[ftmp4] \n\t" ++ "pxor %[ftmp4], %[ftmp4], %[ftmp4] \n\t" + "gssqc1 %[ftmp4], %[ftmp4], 0x00(%[block]) \n\t" + "gssqc1 %[ftmp4], %[ftmp4], 0x10(%[block]) \n\t" + "dli %[tmp0], 0x01 \n\t" +@@ -126,7 +126,7 @@ void ff_h264_idct_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + "psubh %[ftmp5], %[ftmp5], %[ftmp4] \n\t" + MMI_ULWC1(%[ftmp2], %[dst], 0x00) + MMI_LWXC1(%[ftmp0], %[dst], %[stride], 0x00) +- "xor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" ++ "pxor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" + "psrah %[ftmp3], %[ftmp10], %[ftmp9] \n\t" + "psrah %[ftmp4], %[ftmp11], %[ftmp9] \n\t" + "punpcklbh %[ftmp2], %[ftmp2], %[ftmp7] \n\t" +@@ -161,7 +161,7 @@ void ff_h264_idct_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + RESTRICT_ASM_ADDRT + [tmp0]"=&r"(tmp[0]) + : [dst]"r"(dst), [block]"r"(block), +- [stride]"r"((mips_reg)stride), [ff_pw_32]"f"(ff_pw_32) ++ [stride]"r"((mips_reg)stride), [ff_pw_32]"f"(ff_pw_32.f) + : "memory" + ); + +@@ -418,7 +418,7 @@ void ff_h264_idct8_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + "psubh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" + MMI_SDC1(%[ftmp0], $sp, 0x10) + "dmfc1 %[tmp1], %[ftmp2] \n\t" +- "xor %[ftmp2], %[ftmp2], %[ftmp2] \n\t" ++ "pxor %[ftmp2], %[ftmp2], %[ftmp2] \n\t" + MMI_SDC1(%[ftmp2], %[block], 0x00) + MMI_SDC1(%[ftmp2], %[block], 0x08) + MMI_SDC1(%[ftmp2], %[block], 0x10) +@@ -554,7 +554,7 @@ void ff_h264_idct8_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + "psubh %[ftmp3], %[ftmp3], %[ftmp4] \n\t" + MMI_SDC1(%[ftmp7], $sp, 0x18) + "dmfc1 %[tmp2], %[ftmp0] \n\t" +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + MMI_ULWC1(%[ftmp6], %[addr0], 0x00) + MMI_LWXC1(%[ftmp7], %[addr0], %[stride], 0x00) + "psrah %[ftmp2], %[ftmp2], %[ftmp10] \n\t" +@@ -645,7 +645,7 @@ void ff_h264_idct_dc_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + + __asm__ volatile ( + "mtc1 %[dc], %[ftmp5] \n\t" +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "pshufh %[ftmp5], %[ftmp5], %[ftmp0] \n\t" + MMI_ULWC1(%[ftmp1], %[dst0], 0x00) + MMI_ULWC1(%[ftmp2], %[dst1], 0x00) +@@ -689,7 +689,7 @@ void ff_h264_idct8_dc_add_8_mmi(uint8_t *dst, int16_t *block, int stride) + + __asm__ volatile ( + "mtc1 %[dc], %[ftmp5] \n\t" +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "pshufh %[ftmp5], %[ftmp5], %[ftmp0] \n\t" + MMI_LDC1(%[ftmp1], %[dst0], 0x00) + MMI_LDC1(%[ftmp2], %[dst1], 0x00) +@@ -928,7 +928,7 @@ void ff_h264_luma_dc_dequant_idct_8_mmi(int16_t *output, int16_t *input, + "packsswh %[ftmp0], %[ftmp0], %[ftmp1] \n\t" + "packsswh %[ftmp2], %[ftmp2], %[ftmp5] \n\t" + "dmfc1 %[tmp1], %[ftmp0] \n\t" +- "dsrl %[ftmp0], %[ftmp0], %[ftmp9] \n\t" ++ "ssrld %[ftmp0], %[ftmp0], %[ftmp9] \n\t" + "mfc1 %[input], %[ftmp0] \n\t" + "sh %[tmp1], 0x00(%[output]) \n\t" + "sh %[input], 0x80(%[output]) \n\t" +@@ -937,7 +937,7 @@ void ff_h264_luma_dc_dequant_idct_8_mmi(int16_t *output, int16_t *input, + "sh %[tmp1], 0x20(%[output]) \n\t" + "sh %[input], 0xa0(%[output]) \n\t" + "dmfc1 %[tmp1], %[ftmp2] \n\t" +- "dsrl %[ftmp2], %[ftmp2], %[ftmp9] \n\t" ++ "ssrld %[ftmp2], %[ftmp2], %[ftmp9] \n\t" + "mfc1 %[input], %[ftmp2] \n\t" + "sh %[tmp1], 0x40(%[output]) \n\t" + "sh %[input], 0xc0(%[output]) \n\t" +@@ -962,7 +962,7 @@ void ff_h264_luma_dc_dequant_idct_8_mmi(int16_t *output, int16_t *input, + "packsswh %[ftmp3], %[ftmp3], %[ftmp1] \n\t" + "packsswh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" + "dmfc1 %[tmp1], %[ftmp3] \n\t" +- "dsrl %[ftmp3], %[ftmp3], %[ftmp9] \n\t" ++ "ssrld %[ftmp3], %[ftmp3], %[ftmp9] \n\t" + "mfc1 %[input], %[ftmp3] \n\t" + "sh %[tmp1], 0x100(%[output]) \n\t" + "sh %[input], 0x180(%[output]) \n\t" +@@ -971,7 +971,7 @@ void ff_h264_luma_dc_dequant_idct_8_mmi(int16_t *output, int16_t *input, + "sh %[tmp1], 0x120(%[output]) \n\t" + "sh %[input], 0x1a0(%[output]) \n\t" + "dmfc1 %[tmp1], %[ftmp4] \n\t" +- "dsrl %[ftmp4], %[ftmp4], %[ftmp9] \n\t" ++ "ssrld %[ftmp4], %[ftmp4], %[ftmp9] \n\t" + "mfc1 %[input], %[ftmp4] \n\t" + "sh %[tmp1], 0x140(%[output]) \n\t" + "sh %[input], 0x1c0(%[output]) \n\t" +@@ -1015,7 +1015,7 @@ void ff_h264_luma_dc_dequant_idct_8_mmi(int16_t *output, int16_t *input, + "packsswh %[ftmp0], %[ftmp0], %[ftmp1] \n\t" + "packsswh %[ftmp2], %[ftmp2], %[ftmp5] \n\t" + "dmfc1 %[tmp1], %[ftmp0] \n\t" +- "dsrl %[ftmp0], %[ftmp0], %[ftmp9] \n\t" ++ "ssrld %[ftmp0], %[ftmp0], %[ftmp9] \n\t" + "sh %[tmp1], 0x00(%[output]) \n\t" + "mfc1 %[input], %[ftmp0] \n\t" + "dsrl %[tmp1], %[tmp1], 0x10 \n\t" +@@ -1024,7 +1024,7 @@ void ff_h264_luma_dc_dequant_idct_8_mmi(int16_t *output, int16_t *input, + PTR_SRL "%[input], %[input], 0x10 \n\t" + "dmfc1 %[tmp1], %[ftmp2] \n\t" + "sh %[input], 0xa0(%[output]) \n\t" +- "dsrl %[ftmp2], %[ftmp2], %[ftmp9] \n\t" ++ "ssrld %[ftmp2], %[ftmp2], %[ftmp9] \n\t" + "sh %[tmp1], 0x40(%[output]) \n\t" + "mfc1 %[input], %[ftmp2] \n\t" + "dsrl %[tmp1], %[tmp1], 0x10 \n\t" +@@ -1049,7 +1049,7 @@ void ff_h264_luma_dc_dequant_idct_8_mmi(int16_t *output, int16_t *input, + "packsswh %[ftmp3], %[ftmp3], %[ftmp1] \n\t" + "packsswh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" + "dmfc1 %[tmp1], %[ftmp3] \n\t" +- "dsrl %[ftmp3], %[ftmp3], %[ftmp9] \n\t" ++ "ssrld %[ftmp3], %[ftmp3], %[ftmp9] \n\t" + "mfc1 %[input], %[ftmp3] \n\t" + "sh %[tmp1], 0x100(%[output]) \n\t" + "sh %[input], 0x180(%[output]) \n\t" +@@ -1058,7 +1058,7 @@ void ff_h264_luma_dc_dequant_idct_8_mmi(int16_t *output, int16_t *input, + "sh %[tmp1], 0x120(%[output]) \n\t" + "sh %[input], 0x1a0(%[output]) \n\t" + "dmfc1 %[tmp1], %[ftmp4] \n\t" +- "dsrl %[ftmp4], %[ftmp4], %[ftmp9] \n\t" ++ "ssrld %[ftmp4], %[ftmp4], %[ftmp9] \n\t" + "mfc1 %[input], %[ftmp4] \n\t" + "sh %[tmp1], 0x140(%[output]) \n\t" + "sh %[input], 0x1c0(%[output]) \n\t" +@@ -1077,7 +1077,7 @@ void ff_h264_luma_dc_dequant_idct_8_mmi(int16_t *output, int16_t *input, + RESTRICT_ASM_ALL64 + [output]"+&r"(output), [input]"+&r"(input), + [qmul]"+&r"(qmul) +- : [ff_pw_1]"f"(ff_pw_1) ++ : [ff_pw_1]"f"(ff_pw_1.f) + : "memory" + ); + } +@@ -1143,7 +1143,7 @@ void ff_h264_weight_pixels16_8_mmi(uint8_t *block, ptrdiff_t stride, int height, + + for (y=0; y> 2], pTc[1 >> 2], pTc[2 >> 2], pTc[3 >> 2], ++ pTc[4 >> 2], pTc[5 >> 2], pTc[6 >> 2], pTc[7 >> 2], ++ pTc[8 >> 2], pTc[9 >> 2], pTc[10 >> 2], pTc[11 >> 2], ++ pTc[12 >> 2], pTc[13 >> 2], pTc[14 >> 2], pTc[15 >> 2] }; ++ negTc = zero - tc; ++ iTc = tc; ++ ++ // Load data from pPix ++ LD_SH8(pPix - 3, iStride, t0, t1, t2, t3, q1_l, q1_r, q2_l, q2_r); ++ LD_SH8(pPix + 8 * iStride - 3, iStride, p0_l, p0_r, p1_l, p1_r, ++ p2_l, p2_r, q0_l, q0_r); ++ TRANSPOSE16x8_UB_UB(t0, t1, t2, t3, q1_l, q1_r, q2_l, q2_r, ++ p0_l, p0_r, p1_l, p1_r, p2_l, p2_r, q0_l, q0_r, ++ p2, p1, p0, q0, q1, q2, alpha, beta); ++ ++ alpha = (v16u8)__msa_fill_b(iAlpha); ++ beta = (v16u8)__msa_fill_b(iBeta); ++ ++ bDetaP0Q0 = __msa_asub_u_b(p0, q0); ++ bDetaP1P0 = __msa_asub_u_b(p1, p0); ++ bDetaQ1Q0 = __msa_asub_u_b(q1, q0); ++ bDetaP2P0 = __msa_asub_u_b(p2, p0); ++ bDetaQ2Q0 = __msa_asub_u_b(q2, q0); ++ bDetaP0Q0 = (v16u8)__msa_clt_u_b(bDetaP0Q0, alpha); ++ bDetaP1P0 = (v16u8)__msa_clt_u_b(bDetaP1P0, beta); ++ bDetaQ1Q0 = (v16u8)__msa_clt_u_b(bDetaQ1Q0, beta); ++ bDetaP2P0 = (v16u8)__msa_clt_u_b(bDetaP2P0, beta); ++ bDetaQ2Q0 = (v16u8)__msa_clt_u_b(bDetaQ2Q0, beta); ++ ++ // Unsigned extend p0, p1, p2, q0, q1, q2 from 8 bits to 16 bits ++ ILVRL_B2_SH(zero, p0, p0_r, p0_l); ++ ILVRL_B2_SH(zero, p1, p1_r, p1_l); ++ ILVRL_B2_SH(zero, p2, p2_r, p2_l); ++ ILVRL_B2_SH(zero, q0, q0_r, q0_l); ++ ILVRL_B2_SH(zero, q1, q1_r, q1_l); ++ ILVRL_B2_SH(zero, q2, q2_r, q2_l); ++ // Signed extend tc, negTc from 8 bits to 16 bits ++ flags = __msa_clt_s_b(tc, zero); ++ ILVRL_B2(v8i16, flags, tc, tc_r, tc_l); ++ flags = __msa_clt_s_b(negTc, zero); ++ ILVRL_B2(v8i16, flags, negTc, negTc_r, negTc_l); ++ ++ f = (v16i8)bDetaP0Q0 & (v16i8)bDetaP1P0 & (v16i8)bDetaQ1Q0; ++ flags = f & (v16i8)bDetaP2P0; ++ flags = __msa_ceq_b(flags, zero); ++ iTc += ((~flags) & const_1_b); ++ flags = f & (v16i8)bDetaQ2Q0; ++ flags = __msa_ceq_b(flags, zero); ++ iTc += ((~flags) & const_1_b); ++ negiTc = zero - iTc; ++ // Signed extend iTc, negiTc from 8 bits to 16 bits ++ flags = __msa_clt_s_b(iTc, zero); ++ ILVRL_B2(v8i16, flags, iTc, iTc_r, iTc_l); ++ flags = __msa_clt_s_b(negiTc, zero); ++ ILVRL_B2(v8i16, flags, negiTc, negiTc_r, negiTc_l); ++ ++ // Calculate the left part ++ // p1 ++ t0 = (p2_l + ((p0_l + q0_l + const_1_h) >> 1) - (p1_l << 1)) >> 1; ++ t0 = __msa_max_s_h(negTc_l, t0); ++ t0 = __msa_min_s_h(tc_l, t0); ++ t1 = p1_l + t0; ++ // q1 ++ t0 = (q2_l + ((p0_l + q0_l + const_1_h) >> 1) - (q1_l << 1)) >> 1; ++ t0 = __msa_max_s_h(negTc_l, t0); ++ t0 = __msa_min_s_h(tc_l, t0); ++ t2 = q1_l + t0; ++ // iDeta ++ t0 = (((q0_l - p0_l) << 2) + (p1_l - q1_l) + const_4_h) >> 3; ++ t0 = __msa_max_s_h(negiTc_l, t0); ++ t0 = __msa_min_s_h(iTc_l, t0); ++ p1_l = t1; ++ q1_l = t2; ++ // p0 ++ t1 = p0_l + t0; ++ t2 = t1 & const_not_255_h; ++ t3 = __msa_cle_s_h((v8i16)zero, t1); ++ flags = (v16i8)__msa_ceq_h(t2, (v8i16)zero); ++ p0_l = (t1 & (v8i16)flags) + (t3 & (v8i16)(~flags)); ++ // q0 ++ t1 = q0_l - t0; ++ t2 = t1 & const_not_255_h; ++ t3 = __msa_cle_s_h((v8i16)zero, t1); ++ flags = (v16i8)__msa_ceq_h(t2, (v8i16)zero); ++ q0_l = (t1 & (v8i16)flags) + (t3 & (v8i16)(~flags)); ++ ++ // Calculate the right part ++ // p1 ++ t0 = (p2_r + ((p0_r + q0_r + const_1_h) >> 1) - (p1_r << 1)) >> 1; ++ t0 = __msa_max_s_h(negTc_r, t0); ++ t0 = __msa_min_s_h(tc_r, t0); ++ t1 = p1_r + t0; ++ // q1 ++ t0 = (q2_r + ((p0_r + q0_r + const_1_h) >> 1) - (q1_r << 1)) >> 1; ++ t0 = __msa_max_s_h(negTc_r, t0); ++ t0 = __msa_min_s_h(tc_r, t0); ++ t2 = q1_r + t0; ++ // iDeta ++ t0 = (((q0_r - p0_r) << 2) + (p1_r - q1_r) + const_4_h) >> 3; ++ t0 = __msa_max_s_h(negiTc_r, t0); ++ t0 = __msa_min_s_h(iTc_r, t0); ++ p1_r = t1; ++ q1_r = t2; ++ // p0 ++ t1 = p0_r + t0; ++ t2 = t1 & const_not_255_h; ++ t3 = __msa_cle_s_h((v8i16)zero, t1); ++ flags = (v16i8)__msa_ceq_h(t2, (v8i16)zero); ++ p0_r = (t1 & (v8i16)flags) + (t3 & (v8i16)(~flags)); ++ // q0 ++ t1 = q0_r - t0; ++ t2 = t1 & const_not_255_h; ++ t3 = __msa_cle_s_h((v8i16)zero, t1); ++ flags = (v16i8)__msa_ceq_h(t2, (v8i16)zero); ++ q0_r = (t1 & (v8i16)flags) + (t3 & (v8i16)(~flags)); ++ ++ // Combined left and right ++ PCKEV_B4(v8i16, p1_l, p1_r, p0_l, p0_r, q0_l, q0_r, q1_l, q1_r, ++ t0, t1, t2, t3); ++ flags = (v16i8)__msa_cle_s_b(zero, tc); ++ flags &= f; ++ p0 = (v16u8)(((v16i8)t1 & flags) + (p0 & (~flags))); ++ q0 = (v16u8)(((v16i8)t2 & flags) + (q0 & (~flags))); ++ // Using t1, t2 as temporary flags ++ t1 = (v8i16)(flags & (~(__msa_ceq_b((v16i8)bDetaP2P0, zero)))); ++ p1 = (v16u8)(t0 & t1) + (p1 & (v16u8)(~t1)); ++ t2 = (v8i16)(flags & (~(__msa_ceq_b((v16i8)bDetaQ2Q0, zero)))); ++ q1 = (v16u8)(t3 & t2) + (q1 & (v16u8)(~t2)); ++ ++ ILVRL_B2_SH(p0, p1, t0, t1); ++ ILVRL_B2_SH(q1, q0, t2, t3); ++ ILVRL_H2_UB(t2, t0, p1, p0); ++ ILVRL_H2_UB(t3, t1, q0, q1); ++ // Store data to pPix ++ ST_W8(p1, p0, 0, 1, 2, 3, 0, 1, 2, 3, pPix - 2, iStride); ++ ST_W8(q0, q1, 0, 1, 2, 3, 0, 1, 2, 3, pPix + 8 * iStride - 2, iStride); + } + + static void avc_loopfilter_luma_inter_edge_hor_msa(uint8_t *data, +@@ -2180,23 +2056,24 @@ static void avc_h_loop_filter_chroma422_mbaff_msa(uint8_t *src, + void ff_h264_h_lpf_luma_inter_msa(uint8_t *data, ptrdiff_t img_width, + int alpha, int beta, int8_t *tc) + { +- uint8_t bs0 = 1; +- uint8_t bs1 = 1; +- uint8_t bs2 = 1; +- uint8_t bs3 = 1; +- +- if (tc[0] < 0) +- bs0 = 0; +- if (tc[1] < 0) +- bs1 = 0; +- if (tc[2] < 0) +- bs2 = 0; +- if (tc[3] < 0) +- bs3 = 0; +- +- avc_loopfilter_luma_inter_edge_ver_msa(data, bs0, bs1, bs2, bs3, +- tc[0], tc[1], tc[2], tc[3], +- alpha, beta, img_width); ++// uint8_t bs0 = 1; ++// uint8_t bs1 = 1; ++// uint8_t bs2 = 1; ++// uint8_t bs3 = 1; ++// ++// if (tc[0] < 0) ++// bs0 = 0; ++// if (tc[1] < 0) ++// bs1 = 0; ++// if (tc[2] < 0) ++// bs2 = 0; ++// if (tc[3] < 0) ++// bs3 = 0; ++// ++// avc_loopfilter_luma_inter_edge_ver_msa(data, bs0, bs1, bs2, bs3, ++// tc[0], tc[1], tc[2], tc[3], ++// alpha, beta, img_width); ++ avc_loopfilter_luma_inter_edge_ver_msa(data, img_width, alpha, beta, tc); + } + + void ff_h264_v_lpf_luma_inter_msa(uint8_t *data, ptrdiff_t img_width, +diff --git a/libavcodec/mips/h264pred_mmi.c b/libavcodec/mips/h264pred_mmi.c +index 0209c2e43f..480411f5b5 100644 +--- a/libavcodec/mips/h264pred_mmi.c ++++ b/libavcodec/mips/h264pred_mmi.c +@@ -155,14 +155,14 @@ void ff_pred16x16_dc_8_mmi(uint8_t *src, ptrdiff_t stride) + void ff_pred8x8l_top_dc_8_mmi(uint8_t *src, int has_topleft, + int has_topright, ptrdiff_t stride) + { +- uint32_t dc; + double ftmp[11]; + mips_reg tmp[3]; ++ union av_intfloat64 dc; + DECLARE_VAR_ALL64; + DECLARE_VAR_ADDRT; + + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + MMI_ULDC1(%[ftmp10], %[srcA], 0x00) + MMI_ULDC1(%[ftmp9], %[src0], 0x00) + MMI_ULDC1(%[ftmp8], %[src1], 0x00) +@@ -209,12 +209,12 @@ void ff_pred8x8l_top_dc_8_mmi(uint8_t *src, int has_topleft, + [ftmp10]"=&f"(ftmp[10]), + [tmp0]"=&r"(tmp[0]), [tmp1]"=&r"(tmp[1]), + RESTRICT_ASM_ALL64 +- [dc]"=r"(dc) ++ [dc]"=r"(dc.i) + : [srcA]"r"((mips_reg)(src-stride-1)), + [src0]"r"((mips_reg)(src-stride)), + [src1]"r"((mips_reg)(src-stride+1)), + [has_topleft]"r"(has_topleft), [has_topright]"r"(has_topright), +- [ff_pb_1]"r"(ff_pb_1), [ff_pw_2]"f"(ff_pw_2) ++ [ff_pb_1]"r"(ff_pb_1.i), [ff_pw_2]"f"(ff_pw_2.f) + : "memory" + ); + +@@ -238,7 +238,7 @@ void ff_pred8x8l_top_dc_8_mmi(uint8_t *src, int has_topleft, + RESTRICT_ASM_ALL64 + RESTRICT_ASM_ADDRT + [src]"+&r"(src) +- : [dc]"f"(dc), [stride]"r"((mips_reg)stride) ++ : [dc]"f"(dc.f), [stride]"r"((mips_reg)stride) + : "memory" + ); + } +@@ -246,9 +246,10 @@ void ff_pred8x8l_top_dc_8_mmi(uint8_t *src, int has_topleft, + void ff_pred8x8l_dc_8_mmi(uint8_t *src, int has_topleft, int has_topright, + ptrdiff_t stride) + { +- uint32_t dc, dc1, dc2; ++ uint32_t dc1, dc2; + double ftmp[14]; + mips_reg tmp[1]; ++ union av_intfloat64 dc; + + const int l0 = ((has_topleft ? src[-1+-1*stride] : src[-1+0*stride]) + 2*src[-1+0*stride] + src[-1+1*stride] + 2) >> 2; + const int l1 = (src[-1+0*stride] + 2*src[-1+1*stride] + src[-1+2*stride] + 2) >> 2; +@@ -266,7 +267,7 @@ void ff_pred8x8l_dc_8_mmi(uint8_t *src, int has_topleft, int has_topright, + MMI_ULDC1(%[ftmp4], %[srcA], 0x00) + MMI_ULDC1(%[ftmp5], %[src0], 0x00) + MMI_ULDC1(%[ftmp6], %[src1], 0x00) +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "dli %[tmp0], 0x03 \n\t" + "punpcklbh %[ftmp7], %[ftmp4], %[ftmp0] \n\t" + "punpckhbh %[ftmp8], %[ftmp4], %[ftmp0] \n\t" +@@ -322,7 +323,7 @@ void ff_pred8x8l_dc_8_mmi(uint8_t *src, int has_topleft, int has_topright, + ); + + dc1 = l0+l1+l2+l3+l4+l5+l6+l7; +- dc = ((dc1+dc2+8)>>4)*0x01010101U; ++ dc.i = ((dc1+dc2+8)>>4)*0x01010101U; + + __asm__ volatile ( + "dli %[tmp0], 0x02 \n\t" +@@ -344,7 +345,7 @@ void ff_pred8x8l_dc_8_mmi(uint8_t *src, int has_topleft, int has_topright, + RESTRICT_ASM_ALL64 + RESTRICT_ASM_ADDRT + [src]"+&r"(src) +- : [dc]"f"(dc), [stride]"r"((mips_reg)stride) ++ : [dc]"f"(dc.f), [stride]"r"((mips_reg)stride) + : "memory" + ); + } +@@ -357,7 +358,7 @@ void ff_pred8x8l_vertical_8_mmi(uint8_t *src, int has_topleft, + DECLARE_VAR_ALL64; + + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + MMI_LDC1(%[ftmp3], %[srcA], 0x00) + MMI_LDC1(%[ftmp4], %[src0], 0x00) + MMI_LDC1(%[ftmp5], %[src1], 0x00) +@@ -530,7 +531,7 @@ void ff_pred8x8_top_dc_8_mmi(uint8_t *src, ptrdiff_t stride) + + __asm__ volatile ( + "dli %[tmp0], 0x02 \n\t" +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + PTR_SUBU "%[addr0], %[src], %[stride] \n\t" + MMI_LDC1(%[ftmp1], %[addr0], 0x00) + "punpcklbh %[ftmp2], %[ftmp1], %[ftmp0] \n\t" +@@ -640,7 +641,7 @@ void ff_pred8x8_dc_8_mmi(uint8_t *src, ptrdiff_t stride) + PTR_SRL "%[addr4], 0x02 \n\t" + PTR_SRL "%[addr1], 0x02 \n\t" + PTR_SRL "%[addr2], 0x03 \n\t" +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "dmtc1 %[addr3], %[ftmp1] \n\t" + "pshufh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" + "dmtc1 %[addr4], %[ftmp2] \n\t" +@@ -757,9 +758,9 @@ static inline void pred16x16_plane_compat_mmi(uint8_t *src, int stride, + "dmtc1 %[tmp0], %[ftmp4] \n\t" + MMI_ULDC1(%[ftmp0], %[addr0], -0x01) + MMI_ULDC1(%[ftmp2], %[addr0], 0x08) +- "dsrl %[ftmp1], %[ftmp0], %[ftmp4] \n\t" +- "dsrl %[ftmp3], %[ftmp2], %[ftmp4] \n\t" +- "xor %[ftmp4], %[ftmp4], %[ftmp4] \n\t" ++ "ssrld %[ftmp1], %[ftmp0], %[ftmp4] \n\t" ++ "ssrld %[ftmp3], %[ftmp2], %[ftmp4] \n\t" ++ "pxor %[ftmp4], %[ftmp4], %[ftmp4] \n\t" + "punpcklbh %[ftmp0], %[ftmp0], %[ftmp4] \n\t" + "punpcklbh %[ftmp1], %[ftmp1], %[ftmp4] \n\t" + "punpcklbh %[ftmp2], %[ftmp2], %[ftmp4] \n\t" +@@ -915,7 +916,7 @@ static inline void pred16x16_plane_compat_mmi(uint8_t *src, int stride, + "dmul %[tmp3], %[tmp3], %[tmp2] \n\t" + "dsubu %[tmp5], %[tmp5], %[tmp3] \n\t" + +- "xor %[ftmp4], %[ftmp4], %[ftmp4] \n\t" ++ "pxor %[ftmp4], %[ftmp4], %[ftmp4] \n\t" + "dmtc1 %[tmp0], %[ftmp0] \n\t" + "pshufh %[ftmp0], %[ftmp0], %[ftmp4] \n\t" + "dmtc1 %[tmp1], %[ftmp5] \n\t" +@@ -965,10 +966,10 @@ static inline void pred16x16_plane_compat_mmi(uint8_t *src, int stride, + [addr0]"=&r"(addr[0]) + : [src]"r"(src), [stride]"r"((mips_reg)stride), + [svq3]"r"(svq3), [rv40]"r"(rv40), +- [ff_pw_m8tom5]"f"(ff_pw_m8tom5), [ff_pw_m4tom1]"f"(ff_pw_m4tom1), +- [ff_pw_1to4]"f"(ff_pw_1to4), [ff_pw_5to8]"f"(ff_pw_5to8), +- [ff_pw_0to3]"f"(ff_pw_0to3), [ff_pw_4to7]"r"(ff_pw_4to7), +- [ff_pw_8tob]"r"(ff_pw_8tob), [ff_pw_ctof]"r"(ff_pw_ctof) ++ [ff_pw_m8tom5]"f"(ff_pw_m8tom5.f),[ff_pw_m4tom1]"f"(ff_pw_m4tom1.f), ++ [ff_pw_1to4]"f"(ff_pw_1to4.f), [ff_pw_5to8]"f"(ff_pw_5to8.f), ++ [ff_pw_0to3]"f"(ff_pw_0to3.f), [ff_pw_4to7]"r"(ff_pw_4to7.i), ++ [ff_pw_8tob]"r"(ff_pw_8tob.i), [ff_pw_ctof]"r"(ff_pw_ctof.i) + : "memory" + ); + } +diff --git a/libavcodec/mips/h264qpel_mmi.c b/libavcodec/mips/h264qpel_mmi.c +index 13fbebf7f5..3482956e13 100644 +--- a/libavcodec/mips/h264qpel_mmi.c ++++ b/libavcodec/mips/h264qpel_mmi.c +@@ -114,7 +114,7 @@ static void put_h264_qpel4_h_lowpass_mmi(uint8_t *dst, const uint8_t *src, + DECLARE_VAR_LOW32; + + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "dli %[tmp0], 0x04 \n\t" + "1: \n\t" + MMI_ULWC1(%[ftmp1], %[src], -0x02) +@@ -155,8 +155,8 @@ static void put_h264_qpel4_h_lowpass_mmi(uint8_t *dst, const uint8_t *src, + [dst]"+&r"(dst), [src]"+&r"(src) + : [dstStride]"r"((mips_reg)dstStride), + [srcStride]"r"((mips_reg)srcStride), +- [ff_pw_20]"f"(ff_pw_20), [ff_pw_5]"f"(ff_pw_5), +- [ff_pw_16]"f"(ff_pw_16) ++ [ff_pw_20]"f"(ff_pw_20.f), [ff_pw_5]"f"(ff_pw_5.f), ++ [ff_pw_16]"f"(ff_pw_16.f) + : "memory" + ); + } +@@ -169,7 +169,7 @@ static void put_h264_qpel8_h_lowpass_mmi(uint8_t *dst, const uint8_t *src, + DECLARE_VAR_ALL64; + + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "dli %[tmp0], 0x08 \n\t" + "1: \n\t" + MMI_ULDC1(%[ftmp1], %[src], -0x02) +@@ -225,8 +225,8 @@ static void put_h264_qpel8_h_lowpass_mmi(uint8_t *dst, const uint8_t *src, + [dst]"+&r"(dst), [src]"+&r"(src) + : [dstStride]"r"((mips_reg)dstStride), + [srcStride]"r"((mips_reg)srcStride), +- [ff_pw_20]"f"(ff_pw_20), [ff_pw_5]"f"(ff_pw_5), +- [ff_pw_16]"f"(ff_pw_16) ++ [ff_pw_20]"f"(ff_pw_20.f), [ff_pw_5]"f"(ff_pw_5.f), ++ [ff_pw_16]"f"(ff_pw_16.f) + : "memory" + ); + } +@@ -250,7 +250,7 @@ static void avg_h264_qpel4_h_lowpass_mmi(uint8_t *dst, const uint8_t *src, + DECLARE_VAR_LOW32; + + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "dli %[tmp0], 0x04 \n\t" + "1: \n\t" + MMI_ULWC1(%[ftmp1], %[src], -0x02) +@@ -293,8 +293,8 @@ static void avg_h264_qpel4_h_lowpass_mmi(uint8_t *dst, const uint8_t *src, + [dst]"+&r"(dst), [src]"+&r"(src) + : [dstStride]"r"((mips_reg)dstStride), + [srcStride]"r"((mips_reg)srcStride), +- [ff_pw_20]"f"(ff_pw_20), [ff_pw_5]"f"(ff_pw_5), +- [ff_pw_16]"f"(ff_pw_16) ++ [ff_pw_20]"f"(ff_pw_20.f), [ff_pw_5]"f"(ff_pw_5.f), ++ [ff_pw_16]"f"(ff_pw_16.f) + : "memory" + ); + } +@@ -307,7 +307,7 @@ static void avg_h264_qpel8_h_lowpass_mmi(uint8_t *dst, const uint8_t *src, + DECLARE_VAR_ALL64; + + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "dli %[tmp0], 0x08 \n\t" + "1: \n\t" + MMI_ULDC1(%[ftmp1], %[src], -0x02) +@@ -365,8 +365,8 @@ static void avg_h264_qpel8_h_lowpass_mmi(uint8_t *dst, const uint8_t *src, + [dst]"+&r"(dst), [src]"+&r"(src) + : [dstStride]"r"((mips_reg)dstStride), + [srcStride]"r"((mips_reg)srcStride), +- [ff_pw_20]"f"(ff_pw_20), [ff_pw_5]"f"(ff_pw_5), +- [ff_pw_16]"f"(ff_pw_16) ++ [ff_pw_20]"f"(ff_pw_20.f), [ff_pw_5]"f"(ff_pw_5.f), ++ [ff_pw_16]"f"(ff_pw_16.f) + : "memory" + ); + } +@@ -394,7 +394,7 @@ static void put_h264_qpel4_v_lowpass_mmi(uint8_t *dst, const uint8_t *src, + __asm__ volatile ( + ".set push \n\t" + ".set noreorder \n\t" +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "dli %[tmp0], 0x02 \n\t" + MMI_LWC1(%[ftmp1], %[src], 0x00) + "mtc1 %[tmp0], %[ftmp10] \n\t" +@@ -486,7 +486,7 @@ static void put_h264_qpel4_v_lowpass_mmi(uint8_t *dst, const uint8_t *src, + [dst]"+&r"(dst), [src]"+&r"(src) + : [dstStride]"r"((mips_reg)dstStride), + [srcStride]"r"((mips_reg)srcStride), +- [ff_pw_5]"f"(ff_pw_5), [ff_pw_16]"f"(ff_pw_16) ++ [ff_pw_5]"f"(ff_pw_5.f), [ff_pw_16]"f"(ff_pw_16.f) + : "memory" + ); + } +@@ -516,7 +516,7 @@ static void put_h264_qpel8_v_lowpass_mmi(uint8_t *dst, const uint8_t *src, + PTR_ADDU "%[src], %[src], %[srcStride] \n\t" + MMI_LWC1(%[ftmp2], %[src], 0x00) + PTR_ADDU "%[src], %[src], %[srcStride] \n\t" +- "xor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" ++ "pxor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" + MMI_LWC1(%[ftmp3], %[src], 0x00) + PTR_ADDU "%[src], %[src], %[srcStride] \n\t" + MMI_LWC1(%[ftmp4], %[src], 0x00) +@@ -780,7 +780,7 @@ static void put_h264_qpel8_v_lowpass_mmi(uint8_t *dst, const uint8_t *src, + [h]"+&r"(h) + : [dstStride]"r"((mips_reg)dstStride), + [srcStride]"r"((mips_reg)srcStride), +- [ff_pw_5]"f"(ff_pw_5), [ff_pw_16]"f"(ff_pw_16) ++ [ff_pw_5]"f"(ff_pw_5.f), [ff_pw_16]"f"(ff_pw_16.f) + : "memory" + ); + +@@ -812,7 +812,7 @@ static void avg_h264_qpel4_v_lowpass_mmi(uint8_t *dst, const uint8_t *src, + ".set push \n\t" + ".set noreorder \n\t" + "dli %[tmp0], 0x02 \n\t" +- "xor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" ++ "pxor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" + "mtc1 %[tmp0], %[ftmp9] \n\t" + "dli %[tmp0], 0x05 \n\t" + MMI_LWC1(%[ftmp0], %[src], 0x00) +@@ -909,7 +909,7 @@ static void avg_h264_qpel4_v_lowpass_mmi(uint8_t *dst, const uint8_t *src, + [src]"+&r"(src), [dst]"+&r"(dst) + : [dstStride]"r"((mips_reg)dstStride), + [srcStride]"r"((mips_reg)srcStride), +- [ff_pw_5]"f"(ff_pw_5), [ff_pw_16]"f"(ff_pw_16) ++ [ff_pw_5]"f"(ff_pw_5.f), [ff_pw_16]"f"(ff_pw_16.f) + : "memory" + ); + } +@@ -930,7 +930,7 @@ static void avg_h264_qpel8_v_lowpass_mmi(uint8_t *dst, const uint8_t *src, + ".set push \n\t" + ".set noreorder \n\t" + "dli %[tmp0], 0x02 \n\t" +- "xor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" ++ "pxor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" + "mtc1 %[tmp0], %[ftmp9] \n\t" + "dli %[tmp0], 0x05 \n\t" + MMI_LWC1(%[ftmp0], %[src], 0x00) +@@ -1235,7 +1235,7 @@ static void avg_h264_qpel8_v_lowpass_mmi(uint8_t *dst, const uint8_t *src, + [h]"+&r"(h) + : [dstStride]"r"((mips_reg)dstStride), + [srcStride]"r"((mips_reg)srcStride), +- [ff_pw_5]"f"(ff_pw_5), [ff_pw_16]"f"(ff_pw_16) ++ [ff_pw_5]"f"(ff_pw_5.f), [ff_pw_16]"f"(ff_pw_16.f) + : "memory" + ); + +@@ -1269,7 +1269,7 @@ static void put_h264_qpel4_hv_lowpass_mmi(uint8_t *dst, const uint8_t *src, + src -= 2*srcStride; + + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "dli %[tmp0], 0x09 \n\t" + "1: \n\t" + MMI_ULWC1(%[ftmp1], %[src], -0x02) +@@ -1306,7 +1306,7 @@ static void put_h264_qpel4_hv_lowpass_mmi(uint8_t *dst, const uint8_t *src, + [tmp]"+&r"(tmp), [src]"+&r"(src) + : [tmpStride]"r"(8), + [srcStride]"r"((mips_reg)srcStride), +- [ff_pw_20]"f"(ff_pw_20), [ff_pw_5]"f"(ff_pw_5) ++ [ff_pw_20]"f"(ff_pw_20.f), [ff_pw_5]"f"(ff_pw_5.f) + : "memory" + ); + +@@ -1347,7 +1347,7 @@ static void put_h264_qpel8or16_hv1_lowpass_mmi(int16_t *tmp, + MMI_ULWC1(%[ftmp0], %[src], 0x00) + "mtc1 %[tmp0], %[ftmp10] \n\t" + PTR_ADDU "%[src], %[src], %[srcStride] \n\t" +- "xor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" ++ "pxor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" + MMI_ULWC1(%[ftmp1], %[src], 0x00) + PTR_ADDU "%[src], %[src], %[srcStride] \n\t" + MMI_ULWC1(%[ftmp2], %[src], 0x00) +@@ -1567,7 +1567,7 @@ static void put_h264_qpel8or16_hv1_lowpass_mmi(int16_t *tmp, + [src]"+&r"(src) + : [tmp]"r"(tmp), [size]"r"(size), + [srcStride]"r"((mips_reg)srcStride), +- [ff_pw_5]"f"(ff_pw_5), [ff_pw_16]"f"(ff_pw_16) ++ [ff_pw_5]"f"(ff_pw_5.f), [ff_pw_16]"f"(ff_pw_16.f) + : "memory" + ); + +@@ -1684,7 +1684,7 @@ static void put_h264_qpel8_h_lowpass_l2_mmi(uint8_t *dst, const uint8_t *src, + "dli %[tmp0], 0x02 \n\t" + "mtc1 %[tmp0], %[ftmp7] \n\t" + "dli %[tmp0], 0x05 \n\t" +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "mtc1 %[tmp0], %[ftmp8] \n\t" + "1: \n\t" + MMI_ULDC1(%[ftmp1], %[src], 0x00) +@@ -1742,7 +1742,7 @@ static void put_h264_qpel8_h_lowpass_l2_mmi(uint8_t *dst, const uint8_t *src, + [src2]"+&r"(src2), [h]"+&r"(h) + : [src2Stride]"r"((mips_reg)src2Stride), + [dstStride]"r"((mips_reg)dstStride), +- [ff_pw_5]"f"(ff_pw_5), [ff_pw_16]"f"(ff_pw_16) ++ [ff_pw_5]"f"(ff_pw_5.f), [ff_pw_16]"f"(ff_pw_16.f) + : "memory" + ); + } +@@ -1833,7 +1833,7 @@ static void avg_h264_qpel4_hv_lowpass_mmi(uint8_t *dst, const uint8_t *src, + src -= 2*srcStride; + + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "dli %[tmp0], 0x09 \n\t" + "1: \n\t" + MMI_ULWC1(%[ftmp1], %[src], -0x02) +@@ -1870,7 +1870,7 @@ static void avg_h264_qpel4_hv_lowpass_mmi(uint8_t *dst, const uint8_t *src, + [tmp]"+&r"(tmp), [src]"+&r"(src) + : [tmpStride]"r"(8), + [srcStride]"r"((mips_reg)srcStride), +- [ff_pw_20]"f"(ff_pw_20), [ff_pw_5]"f"(ff_pw_5) ++ [ff_pw_20]"f"(ff_pw_20.f), [ff_pw_5]"f"(ff_pw_5.f) + : "memory" + ); + +@@ -2005,7 +2005,7 @@ static void avg_h264_qpel8_h_lowpass_l2_mmi(uint8_t *dst, const uint8_t *src, + "ori %[tmp0], $0, 0x8 \n\t" + "mtc1 %[tmp1], %[ftmp7] \n\t" + "dli %[tmp1], 0x05 \n\t" +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "mtc1 %[tmp1], %[ftmp8] \n\t" + "1: \n\t" + MMI_ULDC1(%[ftmp1], %[src], 0x00) +@@ -2065,7 +2065,7 @@ static void avg_h264_qpel8_h_lowpass_l2_mmi(uint8_t *dst, const uint8_t *src, + [src2]"+&r"(src2) + : [dstStride]"r"((mips_reg)dstStride), + [src2Stride]"r"((mips_reg)src2Stride), +- [ff_pw_5]"f"(ff_pw_5), [ff_pw_16]"f"(ff_pw_16) ++ [ff_pw_5]"f"(ff_pw_5.f), [ff_pw_16]"f"(ff_pw_16.f) + : "memory" + ); + } +diff --git a/libavcodec/mips/hevcdsp_mmi.c b/libavcodec/mips/hevcdsp_mmi.c +index aa83e1f9ad..87fc2555a4 100644 +--- a/libavcodec/mips/hevcdsp_mmi.c ++++ b/libavcodec/mips/hevcdsp_mmi.c +@@ -32,7 +32,7 @@ void ff_hevc_put_hevc_qpel_h##w##_8_mmi(int16_t *dst, uint8_t *_src, \ + int x, y; \ + pixel *src = (pixel*)_src - 3; \ + ptrdiff_t srcstride = _srcstride / sizeof(pixel); \ +- uint64_t ftmp[15]; \ ++ double ftmp[15]; \ + uint64_t rtmp[1]; \ + const int8_t *filter = ff_hevc_qpel_filters[mx - 1]; \ + \ +@@ -46,7 +46,7 @@ void ff_hevc_put_hevc_qpel_h##w##_8_mmi(int16_t *dst, uint8_t *_src, \ + "punpcklbh %[ftmp1], %[ftmp0], %[ftmp1] \n\t" \ + "psrah %[ftmp1], %[ftmp1], %[ftmp0] \n\t" \ + "psrah %[ftmp2], %[ftmp2], %[ftmp0] \n\t" \ +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ + \ + "1: \n\t" \ + "2: \n\t" \ +@@ -132,7 +132,7 @@ void ff_hevc_put_hevc_qpel_hv##w##_8_mmi(int16_t *dst, uint8_t *_src, \ + ptrdiff_t srcstride = _srcstride / sizeof(pixel); \ + int16_t tmp_array[(MAX_PB_SIZE + QPEL_EXTRA) * MAX_PB_SIZE]; \ + int16_t *tmp = tmp_array; \ +- uint64_t ftmp[15]; \ ++ double ftmp[15]; \ + uint64_t rtmp[1]; \ + \ + src -= (QPEL_EXTRA_BEFORE * srcstride + 3); \ +@@ -147,7 +147,7 @@ void ff_hevc_put_hevc_qpel_hv##w##_8_mmi(int16_t *dst, uint8_t *_src, \ + "punpcklbh %[ftmp1], %[ftmp0], %[ftmp1] \n\t" \ + "psrah %[ftmp1], %[ftmp1], %[ftmp0] \n\t" \ + "psrah %[ftmp2], %[ftmp2], %[ftmp0] \n\t" \ +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ + \ + "1: \n\t" \ + "2: \n\t" \ +@@ -329,10 +329,12 @@ void ff_hevc_put_hevc_qpel_bi_h##w##_8_mmi(uint8_t *_dst, \ + pixel *dst = (pixel *)_dst; \ + ptrdiff_t dststride = _dststride / sizeof(pixel); \ + const int8_t *filter = ff_hevc_qpel_filters[mx - 1]; \ +- uint64_t ftmp[20]; \ ++ double ftmp[20]; \ + uint64_t rtmp[1]; \ +- int shift = 7; \ +- int offset = 64; \ ++ union av_intfloat64 shift; \ ++ union av_intfloat64 offset; \ ++ shift.i = 7; \ ++ offset.i = 64; \ + \ + x = width >> 2; \ + y = height; \ +@@ -344,7 +346,7 @@ void ff_hevc_put_hevc_qpel_bi_h##w##_8_mmi(uint8_t *_dst, \ + "punpcklbh %[ftmp1], %[ftmp0], %[ftmp1] \n\t" \ + "psrah %[ftmp1], %[ftmp1], %[ftmp0] \n\t" \ + "psrah %[ftmp2], %[ftmp2], %[ftmp0] \n\t" \ +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ + "punpcklhw %[offset], %[offset], %[offset] \n\t" \ + "punpcklwd %[offset], %[offset], %[offset] \n\t" \ + \ +@@ -403,7 +405,7 @@ void ff_hevc_put_hevc_qpel_bi_h##w##_8_mmi(uint8_t *_dst, \ + "psraw %[ftmp6], %[ftmp6], %[shift] \n\t" \ + "packsswh %[ftmp5], %[ftmp5], %[ftmp6] \n\t" \ + "pcmpgth %[ftmp7], %[ftmp5], %[ftmp0] \n\t" \ +- "and %[ftmp3], %[ftmp5], %[ftmp7] \n\t" \ ++ "pand %[ftmp3], %[ftmp5], %[ftmp7] \n\t" \ + "packushb %[ftmp3], %[ftmp3], %[ftmp3] \n\t" \ + "gsswlc1 %[ftmp3], 0x03(%[dst]) \n\t" \ + "gsswrc1 %[ftmp3], 0x00(%[dst]) \n\t" \ +@@ -430,9 +432,9 @@ void ff_hevc_put_hevc_qpel_bi_h##w##_8_mmi(uint8_t *_dst, \ + [ftmp10]"=&f"(ftmp[10]), [ftmp11]"=&f"(ftmp[11]), \ + [ftmp12]"=&f"(ftmp[12]), [src2]"+&r"(src2), \ + [dst]"+&r"(dst), [src]"+&r"(src), [y]"+&r"(y), [x]"=&r"(x), \ +- [offset]"+&f"(offset), [rtmp0]"=&r"(rtmp[0]) \ ++ [offset]"+&f"(offset.f), [rtmp0]"=&r"(rtmp[0]) \ + : [src_stride]"r"(srcstride), [dst_stride]"r"(dststride), \ +- [filter]"r"(filter), [shift]"f"(shift) \ ++ [filter]"r"(filter), [shift]"f"(shift.f) \ + : "memory" \ + ); \ + } +@@ -463,10 +465,12 @@ void ff_hevc_put_hevc_qpel_bi_hv##w##_8_mmi(uint8_t *_dst, \ + ptrdiff_t dststride = _dststride / sizeof(pixel); \ + int16_t tmp_array[(MAX_PB_SIZE + QPEL_EXTRA) * MAX_PB_SIZE]; \ + int16_t *tmp = tmp_array; \ +- uint64_t ftmp[20]; \ ++ double ftmp[20]; \ + uint64_t rtmp[1]; \ +- int shift = 7; \ +- int offset = 64; \ ++ union av_intfloat64 shift; \ ++ union av_intfloat64 offset; \ ++ shift.i = 7; \ ++ offset.i = 64; \ + \ + src -= (QPEL_EXTRA_BEFORE * srcstride + 3); \ + filter = ff_hevc_qpel_filters[mx - 1]; \ +@@ -480,7 +484,7 @@ void ff_hevc_put_hevc_qpel_bi_hv##w##_8_mmi(uint8_t *_dst, \ + "punpcklbh %[ftmp1], %[ftmp0], %[ftmp1] \n\t" \ + "psrah %[ftmp1], %[ftmp1], %[ftmp0] \n\t" \ + "psrah %[ftmp2], %[ftmp2], %[ftmp0] \n\t" \ +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ + \ + "1: \n\t" \ + "2: \n\t" \ +@@ -612,7 +616,7 @@ void ff_hevc_put_hevc_qpel_bi_hv##w##_8_mmi(uint8_t *_dst, \ + "packsswh %[ftmp3], %[ftmp3], %[ftmp5] \n\t" \ + "gsldlc1 %[ftmp4], 0x07(%[src2]) \n\t" \ + "gsldrc1 %[ftmp4], 0x00(%[src2]) \n\t" \ +- "xor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" \ ++ "pxor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" \ + "li %[rtmp0], 0x10 \n\t" \ + "dmtc1 %[rtmp0], %[ftmp8] \n\t" \ + "punpcklhw %[ftmp5], %[ftmp7], %[ftmp3] \n\t" \ +@@ -631,7 +635,7 @@ void ff_hevc_put_hevc_qpel_bi_hv##w##_8_mmi(uint8_t *_dst, \ + "psraw %[ftmp6], %[ftmp6], %[shift] \n\t" \ + "packsswh %[ftmp5], %[ftmp5], %[ftmp6] \n\t" \ + "pcmpgth %[ftmp7], %[ftmp5], %[ftmp7] \n\t" \ +- "and %[ftmp3], %[ftmp5], %[ftmp7] \n\t" \ ++ "pand %[ftmp3], %[ftmp5], %[ftmp7] \n\t" \ + "packushb %[ftmp3], %[ftmp3], %[ftmp3] \n\t" \ + "gsswlc1 %[ftmp3], 0x03(%[dst]) \n\t" \ + "gsswrc1 %[ftmp3], 0x00(%[dst]) \n\t" \ +@@ -659,9 +663,9 @@ void ff_hevc_put_hevc_qpel_bi_hv##w##_8_mmi(uint8_t *_dst, \ + [ftmp12]"=&f"(ftmp[12]), [ftmp13]"=&f"(ftmp[13]), \ + [ftmp14]"=&f"(ftmp[14]), [src2]"+&r"(src2), \ + [dst]"+&r"(dst), [tmp]"+&r"(tmp), [y]"+&r"(y), [x]"=&r"(x), \ +- [offset]"+&f"(offset), [rtmp0]"=&r"(rtmp[0]) \ ++ [offset]"+&f"(offset.f), [rtmp0]"=&r"(rtmp[0]) \ + : [filter]"r"(filter), [stride]"r"(dststride), \ +- [shift]"f"(shift) \ ++ [shift]"f"(shift.f) \ + : "memory" \ + ); \ + } +@@ -692,10 +696,12 @@ void ff_hevc_put_hevc_epel_bi_hv##w##_8_mmi(uint8_t *_dst, \ + const int8_t *filter = ff_hevc_epel_filters[mx - 1]; \ + int16_t tmp_array[(MAX_PB_SIZE + EPEL_EXTRA) * MAX_PB_SIZE]; \ + int16_t *tmp = tmp_array; \ +- uint64_t ftmp[12]; \ ++ double ftmp[12]; \ + uint64_t rtmp[1]; \ +- int shift = 7; \ +- int offset = 64; \ ++ union av_intfloat64 shift; \ ++ union av_intfloat64 offset; \ ++ shift.i = 7; \ ++ offset.i = 64; \ + \ + src -= (EPEL_EXTRA_BEFORE * srcstride + 1); \ + x = width >> 2; \ +@@ -706,7 +712,7 @@ void ff_hevc_put_hevc_epel_bi_hv##w##_8_mmi(uint8_t *_dst, \ + "dmtc1 %[rtmp0], %[ftmp0] \n\t" \ + "punpcklbh %[ftmp1], %[ftmp0], %[ftmp1] \n\t" \ + "psrah %[ftmp1], %[ftmp1], %[ftmp0] \n\t" \ +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ + \ + "1: \n\t" \ + "2: \n\t" \ +@@ -771,7 +777,7 @@ void ff_hevc_put_hevc_epel_bi_hv##w##_8_mmi(uint8_t *_dst, \ + "li %[rtmp0], 0x06 \n\t" \ + "dmtc1 %[rtmp0], %[ftmp0] \n\t" \ + "punpcklwd %[offset], %[offset], %[offset] \n\t" \ +- "xor %[ftmp2], %[ftmp2], %[ftmp2] \n\t" \ ++ "pxor %[ftmp2], %[ftmp2], %[ftmp2] \n\t" \ + \ + "1: \n\t" \ + "li %[x], " #x_step " \n\t" \ +@@ -821,7 +827,7 @@ void ff_hevc_put_hevc_epel_bi_hv##w##_8_mmi(uint8_t *_dst, \ + "psraw %[ftmp6], %[ftmp6], %[shift] \n\t" \ + "packsswh %[ftmp5], %[ftmp5], %[ftmp6] \n\t" \ + "pcmpgth %[ftmp7], %[ftmp5], %[ftmp2] \n\t" \ +- "and %[ftmp3], %[ftmp5], %[ftmp7] \n\t" \ ++ "pand %[ftmp3], %[ftmp5], %[ftmp7] \n\t" \ + "packushb %[ftmp3], %[ftmp3], %[ftmp3] \n\t" \ + "gsswlc1 %[ftmp3], 0x03(%[dst]) \n\t" \ + "gsswrc1 %[ftmp3], 0x00(%[dst]) \n\t" \ +@@ -847,9 +853,9 @@ void ff_hevc_put_hevc_epel_bi_hv##w##_8_mmi(uint8_t *_dst, \ + [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), \ + [ftmp10]"=&f"(ftmp[10]), [src2]"+&r"(src2), \ + [dst]"+&r"(dst), [tmp]"+&r"(tmp), [y]"+&r"(y), [x]"=&r"(x), \ +- [offset]"+&f"(offset), [rtmp0]"=&r"(rtmp[0]) \ ++ [offset]"+&f"(offset.f), [rtmp0]"=&r"(rtmp[0]) \ + : [filter]"r"(filter), [stride]"r"(dststride), \ +- [shift]"f"(shift) \ ++ [shift]"f"(shift.f) \ + : "memory" \ + ); \ + } +@@ -875,14 +881,15 @@ void ff_hevc_put_hevc_pel_bi_pixels##w##_8_mmi(uint8_t *_dst, \ + ptrdiff_t srcstride = _srcstride / sizeof(pixel); \ + pixel *dst = (pixel *)_dst; \ + ptrdiff_t dststride = _dststride / sizeof(pixel); \ +- uint64_t ftmp[12]; \ ++ double ftmp[12]; \ + uint64_t rtmp[1]; \ +- int shift = 7; \ ++ union av_intfloat64 shift; \ ++ shift.i = 7; \ + \ + y = height; \ + x = width >> 3; \ + __asm__ volatile( \ +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ + "li %[rtmp0], 0x06 \n\t" \ + "dmtc1 %[rtmp0], %[ftmp1] \n\t" \ + "li %[rtmp0], 0x10 \n\t" \ +@@ -930,8 +937,8 @@ void ff_hevc_put_hevc_pel_bi_pixels##w##_8_mmi(uint8_t *_dst, \ + "packsswh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" \ + "pcmpgth %[ftmp3], %[ftmp2], %[ftmp0] \n\t" \ + "pcmpgth %[ftmp5], %[ftmp4], %[ftmp0] \n\t" \ +- "and %[ftmp2], %[ftmp2], %[ftmp3] \n\t" \ +- "and %[ftmp4], %[ftmp4], %[ftmp5] \n\t" \ ++ "pand %[ftmp2], %[ftmp2], %[ftmp3] \n\t" \ ++ "pand %[ftmp4], %[ftmp4], %[ftmp5] \n\t" \ + "packushb %[ftmp2], %[ftmp2], %[ftmp4] \n\t" \ + "gssdlc1 %[ftmp2], 0x07(%[dst]) \n\t" \ + "gssdrc1 %[ftmp2], 0x00(%[dst]) \n\t" \ +@@ -959,7 +966,7 @@ void ff_hevc_put_hevc_pel_bi_pixels##w##_8_mmi(uint8_t *_dst, \ + [ftmp10]"=&f"(ftmp[10]), [offset]"=&f"(ftmp[11]), \ + [src2]"+&r"(src2), [dst]"+&r"(dst), [src]"+&r"(src), \ + [x]"+&r"(x), [y]"+&r"(y), [rtmp0]"=&r"(rtmp[0]) \ +- : [dststride]"r"(dststride), [shift]"f"(shift), \ ++ : [dststride]"r"(dststride), [shift]"f"(shift.f), \ + [srcstride]"r"(srcstride) \ + : "memory" \ + ); \ +@@ -989,10 +996,12 @@ void ff_hevc_put_hevc_qpel_uni_hv##w##_8_mmi(uint8_t *_dst, \ + ptrdiff_t dststride = _dststride / sizeof(pixel); \ + int16_t tmp_array[(MAX_PB_SIZE + QPEL_EXTRA) * MAX_PB_SIZE]; \ + int16_t *tmp = tmp_array; \ +- uint64_t ftmp[20]; \ ++ double ftmp[20]; \ + uint64_t rtmp[1]; \ +- int shift = 6; \ +- int offset = 32; \ ++ union av_intfloat64 shift; \ ++ union av_intfloat64 offset; \ ++ shift.i = 6; \ ++ offset.i = 32; \ + \ + src -= (QPEL_EXTRA_BEFORE * srcstride + 3); \ + filter = ff_hevc_qpel_filters[mx - 1]; \ +@@ -1006,7 +1015,7 @@ void ff_hevc_put_hevc_qpel_uni_hv##w##_8_mmi(uint8_t *_dst, \ + "punpcklbh %[ftmp1], %[ftmp0], %[ftmp1] \n\t" \ + "psrah %[ftmp1], %[ftmp1], %[ftmp0] \n\t" \ + "psrah %[ftmp2], %[ftmp2], %[ftmp0] \n\t" \ +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ + \ + "1: \n\t" \ + "2: \n\t" \ +@@ -1139,9 +1148,9 @@ void ff_hevc_put_hevc_qpel_uni_hv##w##_8_mmi(uint8_t *_dst, \ + "packsswh %[ftmp3], %[ftmp3], %[ftmp5] \n\t" \ + "paddh %[ftmp3], %[ftmp3], %[offset] \n\t" \ + "psrah %[ftmp3], %[ftmp3], %[shift] \n\t" \ +- "xor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" \ ++ "pxor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" \ + "pcmpgth %[ftmp7], %[ftmp3], %[ftmp7] \n\t" \ +- "and %[ftmp3], %[ftmp3], %[ftmp7] \n\t" \ ++ "pand %[ftmp3], %[ftmp3], %[ftmp7] \n\t" \ + "packushb %[ftmp3], %[ftmp3], %[ftmp3] \n\t" \ + "gsswlc1 %[ftmp3], 0x03(%[dst]) \n\t" \ + "gsswrc1 %[ftmp3], 0x00(%[dst]) \n\t" \ +@@ -1166,9 +1175,9 @@ void ff_hevc_put_hevc_qpel_uni_hv##w##_8_mmi(uint8_t *_dst, \ + [ftmp12]"=&f"(ftmp[12]), [ftmp13]"=&f"(ftmp[13]), \ + [ftmp14]"=&f"(ftmp[14]), \ + [dst]"+&r"(dst), [tmp]"+&r"(tmp), [y]"+&r"(y), [x]"=&r"(x), \ +- [offset]"+&f"(offset), [rtmp0]"=&r"(rtmp[0]) \ ++ [offset]"+&f"(offset.f), [rtmp0]"=&r"(rtmp[0]) \ + : [filter]"r"(filter), [stride]"r"(dststride), \ +- [shift]"f"(shift) \ ++ [shift]"f"(shift.f) \ + : "memory" \ + ); \ + } +diff --git a/libavcodec/mips/hpeldsp_mmi.c b/libavcodec/mips/hpeldsp_mmi.c +index e69b2bd980..bf3e4636aa 100644 +--- a/libavcodec/mips/hpeldsp_mmi.c ++++ b/libavcodec/mips/hpeldsp_mmi.c +@@ -676,14 +676,14 @@ inline void ff_put_no_rnd_pixels8_l2_8_mmi(uint8_t *dst, const uint8_t *src1, + PTR_ADDU "%[addr1], %[src2], %[src_stride2] \n\t" + MMI_ULDC1(%[ftmp3], %[addr1], 0x00) + PTR_ADDU "%[src1], %[src1], %[addr2] \n\t" +- "xor %[ftmp0], %[ftmp0], %[ftmp4] \n\t" +- "xor %[ftmp1], %[ftmp1], %[ftmp4] \n\t" +- "xor %[ftmp2], %[ftmp2], %[ftmp4] \n\t" +- "xor %[ftmp3], %[ftmp3], %[ftmp4] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp4] \n\t" ++ "pxor %[ftmp1], %[ftmp1], %[ftmp4] \n\t" ++ "pxor %[ftmp2], %[ftmp2], %[ftmp4] \n\t" ++ "pxor %[ftmp3], %[ftmp3], %[ftmp4] \n\t" + "pavgb %[ftmp0], %[ftmp0], %[ftmp2] \n\t" + "pavgb %[ftmp1], %[ftmp1], %[ftmp3] \n\t" +- "xor %[ftmp0], %[ftmp0], %[ftmp4] \n\t" +- "xor %[ftmp1], %[ftmp1], %[ftmp4] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp4] \n\t" ++ "pxor %[ftmp1], %[ftmp1], %[ftmp4] \n\t" + MMI_SDC1(%[ftmp0], %[dst], 0x00) + MMI_SDXC1(%[ftmp1], %[dst], %[dst_stride], 0x00) + PTR_ADDU "%[src2], %[src2], %[addr3] \n\t" +@@ -696,14 +696,14 @@ inline void ff_put_no_rnd_pixels8_l2_8_mmi(uint8_t *dst, const uint8_t *src1, + PTR_ADDU "%[addr1], %[src2], %[src_stride2] \n\t" + MMI_ULDC1(%[ftmp3], %[addr1], 0x00) + PTR_ADDU "%[src1], %[src1], %[addr2] \n\t" +- "xor %[ftmp0], %[ftmp0], %[ftmp4] \n\t" +- "xor %[ftmp1], %[ftmp1], %[ftmp4] \n\t" +- "xor %[ftmp2], %[ftmp2], %[ftmp4] \n\t" +- "xor %[ftmp3], %[ftmp3], %[ftmp4] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp4] \n\t" ++ "pxor %[ftmp1], %[ftmp1], %[ftmp4] \n\t" ++ "pxor %[ftmp2], %[ftmp2], %[ftmp4] \n\t" ++ "pxor %[ftmp3], %[ftmp3], %[ftmp4] \n\t" + "pavgb %[ftmp0], %[ftmp0], %[ftmp2] \n\t" + "pavgb %[ftmp1], %[ftmp1], %[ftmp3] \n\t" +- "xor %[ftmp0], %[ftmp0], %[ftmp4] \n\t" +- "xor %[ftmp1], %[ftmp1], %[ftmp4] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp4] \n\t" ++ "pxor %[ftmp1], %[ftmp1], %[ftmp4] \n\t" + MMI_SDC1(%[ftmp0], %[dst], 0x00) + MMI_SDXC1(%[ftmp1], %[dst], %[dst_stride], 0x00) + PTR_ADDU "%[src2], %[src2], %[addr3] \n\t" +@@ -846,7 +846,7 @@ void ff_put_pixels8_xy2_8_mmi(uint8_t *block, const uint8_t *pixels, + DECLARE_VAR_ADDRT; + + __asm__ volatile ( +- "xor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" ++ "pxor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" + "dli %[addr0], 0x0f \n\t" + "pcmpeqw %[ftmp6], %[ftmp6], %[ftmp6] \n\t" + "dmtc1 %[addr0], %[ftmp8] \n\t" +diff --git a/libavcodec/mips/idctdsp_mmi.c b/libavcodec/mips/idctdsp_mmi.c +index a96dac4704..d22e5eedd7 100644 +--- a/libavcodec/mips/idctdsp_mmi.c ++++ b/libavcodec/mips/idctdsp_mmi.c +@@ -142,7 +142,7 @@ void ff_put_signed_pixels_clamped_mmi(const int16_t *block, + [pixels]"+&r"(pixels) + : [block]"r"(block), + [line_size]"r"((mips_reg)line_size), +- [ff_pb_80]"f"(ff_pb_80) ++ [ff_pb_80]"f"(ff_pb_80.f) + : "memory" + ); + } +@@ -154,7 +154,7 @@ void ff_add_pixels_clamped_mmi(const int16_t *block, + uint64_t tmp[1]; + __asm__ volatile ( + "li %[tmp0], 0x04 \n\t" +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "1: \n\t" + MMI_LDC1(%[ftmp5], %[pixels], 0x00) + PTR_ADDU "%[pixels], %[pixels], %[line_size] \n\t" +diff --git a/libavcodec/mips/mpegvideo_mmi.c b/libavcodec/mips/mpegvideo_mmi.c +index e4aba08661..3d5b5e20ab 100644 +--- a/libavcodec/mips/mpegvideo_mmi.c ++++ b/libavcodec/mips/mpegvideo_mmi.c +@@ -28,12 +28,13 @@ + void ff_dct_unquantize_h263_intra_mmi(MpegEncContext *s, int16_t *block, + int n, int qscale) + { +- int64_t level, qmul, qadd, nCoeffs; ++ int64_t level, nCoeffs; + double ftmp[6]; + mips_reg addr[1]; ++ union mmi_intfloat64 qmul_u, qadd_u; + DECLARE_VAR_ALL64; + +- qmul = qscale << 1; ++ qmul_u.i = qscale << 1; + av_assert2(s->block_last_index[n]>=0 || s->h263_aic); + + if (!s->h263_aic) { +@@ -41,9 +42,9 @@ void ff_dct_unquantize_h263_intra_mmi(MpegEncContext *s, int16_t *block, + level = block[0] * s->y_dc_scale; + else + level = block[0] * s->c_dc_scale; +- qadd = (qscale-1) | 1; ++ qadd_u.i = (qscale-1) | 1; + } else { +- qadd = 0; ++ qadd_u.i = 0; + level = block[0]; + } + +@@ -53,13 +54,13 @@ void ff_dct_unquantize_h263_intra_mmi(MpegEncContext *s, int16_t *block, + nCoeffs = s->inter_scantable.raster_end[s->block_last_index[n]]; + + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "packsswh %[qmul], %[qmul], %[qmul] \n\t" + "packsswh %[qmul], %[qmul], %[qmul] \n\t" + "packsswh %[qadd], %[qadd], %[qadd] \n\t" + "packsswh %[qadd], %[qadd], %[qadd] \n\t" + "psubh %[ftmp0], %[ftmp0], %[qadd] \n\t" +- "xor %[ftmp5], %[ftmp5], %[ftmp5] \n\t" ++ "pxor %[ftmp5], %[ftmp5], %[ftmp5] \n\t" + ".p2align 4 \n\t" + + "1: \n\t" +@@ -72,12 +73,12 @@ void ff_dct_unquantize_h263_intra_mmi(MpegEncContext *s, int16_t *block, + "pmullh %[ftmp2], %[ftmp2], %[qmul] \n\t" + "pcmpgth %[ftmp3], %[ftmp3], %[ftmp5] \n\t" + "pcmpgth %[ftmp4], %[ftmp4], %[ftmp5] \n\t" +- "xor %[ftmp1], %[ftmp1], %[ftmp3] \n\t" +- "xor %[ftmp2], %[ftmp2], %[ftmp4] \n\t" ++ "pxor %[ftmp1], %[ftmp1], %[ftmp3] \n\t" ++ "pxor %[ftmp2], %[ftmp2], %[ftmp4] \n\t" + "paddh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" + "paddh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" +- "xor %[ftmp3], %[ftmp3], %[ftmp1] \n\t" +- "xor %[ftmp4], %[ftmp4], %[ftmp2] \n\t" ++ "pxor %[ftmp3], %[ftmp3], %[ftmp1] \n\t" ++ "pxor %[ftmp4], %[ftmp4], %[ftmp2] \n\t" + "pcmpeqh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" + "pcmpeqh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" + "pandn %[ftmp1], %[ftmp1], %[ftmp3] \n\t" +@@ -93,7 +94,7 @@ void ff_dct_unquantize_h263_intra_mmi(MpegEncContext *s, int16_t *block, + [addr0]"=&r"(addr[0]) + : [block]"r"((mips_reg)(block+nCoeffs)), + [nCoeffs]"r"((mips_reg)(2*(-nCoeffs))), +- [qmul]"f"(qmul), [qadd]"f"(qadd) ++ [qmul]"f"(qmul_u.f), [qadd]"f"(qadd_u.f) + : "memory" + ); + +@@ -103,24 +104,25 @@ void ff_dct_unquantize_h263_intra_mmi(MpegEncContext *s, int16_t *block, + void ff_dct_unquantize_h263_inter_mmi(MpegEncContext *s, int16_t *block, + int n, int qscale) + { +- int64_t qmul, qadd, nCoeffs; ++ int64_t nCoeffs; + double ftmp[6]; + mips_reg addr[1]; ++ union mmi_intfloat64 qmul_u, qadd_u; + DECLARE_VAR_ALL64; + +- qmul = qscale << 1; +- qadd = (qscale - 1) | 1; ++ qmul_u.i = qscale << 1; ++ qadd_u.i = (qscale - 1) | 1; + av_assert2(s->block_last_index[n]>=0 || s->h263_aic); + nCoeffs = s->inter_scantable.raster_end[s->block_last_index[n]]; + + __asm__ volatile ( + "packsswh %[qmul], %[qmul], %[qmul] \n\t" + "packsswh %[qmul], %[qmul], %[qmul] \n\t" +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "packsswh %[qadd], %[qadd], %[qadd] \n\t" + "packsswh %[qadd], %[qadd], %[qadd] \n\t" + "psubh %[ftmp0], %[ftmp0], %[qadd] \n\t" +- "xor %[ftmp5], %[ftmp5], %[ftmp5] \n\t" ++ "pxor %[ftmp5], %[ftmp5], %[ftmp5] \n\t" + ".p2align 4 \n\t" + "1: \n\t" + PTR_ADDU "%[addr0], %[block], %[nCoeffs] \n\t" +@@ -132,12 +134,12 @@ void ff_dct_unquantize_h263_inter_mmi(MpegEncContext *s, int16_t *block, + "pmullh %[ftmp2], %[ftmp2], %[qmul] \n\t" + "pcmpgth %[ftmp3], %[ftmp3], %[ftmp5] \n\t" + "pcmpgth %[ftmp4], %[ftmp4], %[ftmp5] \n\t" +- "xor %[ftmp1], %[ftmp1], %[ftmp3] \n\t" +- "xor %[ftmp2], %[ftmp2], %[ftmp4] \n\t" ++ "pxor %[ftmp1], %[ftmp1], %[ftmp3] \n\t" ++ "pxor %[ftmp2], %[ftmp2], %[ftmp4] \n\t" + "paddh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" + "paddh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" +- "xor %[ftmp3], %[ftmp3], %[ftmp1] \n\t" +- "xor %[ftmp4], %[ftmp4], %[ftmp2] \n\t" ++ "pxor %[ftmp3], %[ftmp3], %[ftmp1] \n\t" ++ "pxor %[ftmp4], %[ftmp4], %[ftmp2] \n\t" + "pcmpeqh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" + "pcmpeqh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" + "pandn %[ftmp1], %[ftmp1], %[ftmp3] \n\t" +@@ -153,7 +155,7 @@ void ff_dct_unquantize_h263_inter_mmi(MpegEncContext *s, int16_t *block, + [addr0]"=&r"(addr[0]) + : [block]"r"((mips_reg)(block+nCoeffs)), + [nCoeffs]"r"((mips_reg)(2*(-nCoeffs))), +- [qmul]"f"(qmul), [qadd]"f"(qadd) ++ [qmul]"f"(qmul_u.f), [qadd]"f"(qadd_u.f) + : "memory" + ); + } +@@ -201,18 +203,18 @@ void ff_dct_unquantize_mpeg1_intra_mmi(MpegEncContext *s, int16_t *block, + MMI_LDXC1(%[ftmp7], %[addr0], %[quant], 0x08) + "pmullh %[ftmp6], %[ftmp6], %[ftmp1] \n\t" + "pmullh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" +- "xor %[ftmp8], %[ftmp8], %[ftmp8] \n\t" +- "xor %[ftmp9], %[ftmp9], %[ftmp9] \n\t" ++ "pxor %[ftmp8], %[ftmp8], %[ftmp8] \n\t" ++ "pxor %[ftmp9], %[ftmp9], %[ftmp9] \n\t" + "pcmpgth %[ftmp8], %[ftmp8], %[ftmp2] \n\t" + "pcmpgth %[ftmp9], %[ftmp9], %[ftmp3] \n\t" +- "xor %[ftmp2], %[ftmp2], %[ftmp8] \n\t" +- "xor %[ftmp3], %[ftmp3], %[ftmp9] \n\t" ++ "pxor %[ftmp2], %[ftmp2], %[ftmp8] \n\t" ++ "pxor %[ftmp3], %[ftmp3], %[ftmp9] \n\t" + "psubh %[ftmp2], %[ftmp2], %[ftmp8] \n\t" + "psubh %[ftmp3], %[ftmp3], %[ftmp9] \n\t" + "pmullh %[ftmp2], %[ftmp2], %[ftmp6] \n\t" + "pmullh %[ftmp3], %[ftmp3], %[ftmp7] \n\t" +- "xor %[ftmp6], %[ftmp6], %[ftmp6] \n\t" +- "xor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" ++ "pxor %[ftmp6], %[ftmp6], %[ftmp6] \n\t" ++ "pxor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" + "pcmpeqh %[ftmp6], %[ftmp6], %[ftmp4] \n\t" + "dli %[tmp0], 0x03 \n\t" + "pcmpeqh %[ftmp7], %[ftmp7], %[ftmp5] \n\t" +@@ -221,10 +223,10 @@ void ff_dct_unquantize_mpeg1_intra_mmi(MpegEncContext *s, int16_t *block, + "psrah %[ftmp3], %[ftmp3], %[ftmp4] \n\t" + "psubh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" + "psubh %[ftmp3], %[ftmp3], %[ftmp0] \n\t" +- "or %[ftmp2], %[ftmp2], %[ftmp0] \n\t" +- "or %[ftmp3], %[ftmp3], %[ftmp0] \n\t" +- "xor %[ftmp2], %[ftmp2], %[ftmp8] \n\t" +- "xor %[ftmp3], %[ftmp3], %[ftmp9] \n\t" ++ "por %[ftmp2], %[ftmp2], %[ftmp0] \n\t" ++ "por %[ftmp3], %[ftmp3], %[ftmp0] \n\t" ++ "pxor %[ftmp2], %[ftmp2], %[ftmp8] \n\t" ++ "pxor %[ftmp3], %[ftmp3], %[ftmp9] \n\t" + "psubh %[ftmp2], %[ftmp2], %[ftmp8] \n\t" + "psubh %[ftmp3], %[ftmp3], %[ftmp9] \n\t" + "pandn %[ftmp6], %[ftmp6], %[ftmp2] \n\t" +@@ -287,12 +289,12 @@ void ff_dct_unquantize_mpeg1_inter_mmi(MpegEncContext *s, int16_t *block, + MMI_LDXC1(%[ftmp7], %[addr0], %[quant], 0x08) + "pmullh %[ftmp6], %[ftmp6], %[ftmp1] \n\t" + "pmullh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" +- "xor %[ftmp8], %[ftmp8], %[ftmp8] \n\t" +- "xor %[ftmp9], %[ftmp9], %[ftmp9] \n\t" ++ "pxor %[ftmp8], %[ftmp8], %[ftmp8] \n\t" ++ "pxor %[ftmp9], %[ftmp9], %[ftmp9] \n\t" + "pcmpgth %[ftmp8], %[ftmp8], %[ftmp2] \n\t" + "pcmpgth %[ftmp9], %[ftmp9], %[ftmp3] \n\t" +- "xor %[ftmp2], %[ftmp2], %[ftmp8] \n\t" +- "xor %[ftmp3], %[ftmp3], %[ftmp9] \n\t" ++ "pxor %[ftmp2], %[ftmp2], %[ftmp8] \n\t" ++ "pxor %[ftmp3], %[ftmp3], %[ftmp9] \n\t" + "psubh %[ftmp2], %[ftmp2], %[ftmp8] \n\t" + "psubh %[ftmp3], %[ftmp3], %[ftmp9] \n\t" + "paddh %[ftmp2], %[ftmp2], %[ftmp2] \n\t" +@@ -301,8 +303,8 @@ void ff_dct_unquantize_mpeg1_inter_mmi(MpegEncContext *s, int16_t *block, + "paddh %[ftmp3], %[ftmp3], %[ftmp0] \n\t" + "pmullh %[ftmp2], %[ftmp2], %[ftmp6] \n\t" + "pmullh %[ftmp3], %[ftmp3], %[ftmp7] \n\t" +- "xor %[ftmp6], %[ftmp6], %[ftmp6] \n\t" +- "xor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" ++ "pxor %[ftmp6], %[ftmp6], %[ftmp6] \n\t" ++ "pxor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" + "pcmpeqh %[ftmp6], %[ftmp6], %[ftmp4] \n\t" + "dli %[tmp0], 0x04 \n\t" + "pcmpeqh %[ftmp7], %[ftmp7], %[ftmp5] \n\t" +@@ -311,10 +313,10 @@ void ff_dct_unquantize_mpeg1_inter_mmi(MpegEncContext *s, int16_t *block, + "psrah %[ftmp3], %[ftmp3], %[ftmp4] \n\t" + "psubh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" + "psubh %[ftmp3], %[ftmp3], %[ftmp0] \n\t" +- "or %[ftmp2], %[ftmp2], %[ftmp0] \n\t" +- "or %[ftmp3], %[ftmp3], %[ftmp0] \n\t" +- "xor %[ftmp2], %[ftmp2], %[ftmp8] \n\t" +- "xor %[ftmp3], %[ftmp3], %[ftmp9] \n\t" ++ "por %[ftmp2], %[ftmp2], %[ftmp0] \n\t" ++ "por %[ftmp3], %[ftmp3], %[ftmp0] \n\t" ++ "pxor %[ftmp2], %[ftmp2], %[ftmp8] \n\t" ++ "pxor %[ftmp3], %[ftmp3], %[ftmp9] \n\t" + "psubh %[ftmp2], %[ftmp2], %[ftmp8] \n\t" + "psubh %[ftmp3], %[ftmp3], %[ftmp9] \n\t" + "pandn %[ftmp6], %[ftmp6], %[ftmp2] \n\t" +@@ -386,26 +388,26 @@ void ff_dct_unquantize_mpeg2_intra_mmi(MpegEncContext *s, int16_t *block, + MMI_LDXC1(%[ftmp6], %[addr0], %[quant], 0x08) + "pmullh %[ftmp5], %[ftmp5], %[ftmp9] \n\t" + "pmullh %[ftmp6], %[ftmp6], %[ftmp9] \n\t" +- "xor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" +- "xor %[ftmp8], %[ftmp8], %[ftmp8] \n\t" ++ "pxor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" ++ "pxor %[ftmp8], %[ftmp8], %[ftmp8] \n\t" + "pcmpgth %[ftmp7], %[ftmp7], %[ftmp1] \n\t" + "pcmpgth %[ftmp8], %[ftmp8], %[ftmp2] \n\t" +- "xor %[ftmp1], %[ftmp1], %[ftmp7] \n\t" +- "xor %[ftmp2], %[ftmp2], %[ftmp8] \n\t" ++ "pxor %[ftmp1], %[ftmp1], %[ftmp7] \n\t" ++ "pxor %[ftmp2], %[ftmp2], %[ftmp8] \n\t" + "psubh %[ftmp1], %[ftmp1], %[ftmp7] \n\t" + "psubh %[ftmp2], %[ftmp2], %[ftmp8] \n\t" + "pmullh %[ftmp1], %[ftmp1], %[ftmp5] \n\t" + "pmullh %[ftmp2], %[ftmp2], %[ftmp6] \n\t" +- "xor %[ftmp5], %[ftmp5], %[ftmp5] \n\t" +- "xor %[ftmp6], %[ftmp6], %[ftmp6] \n\t" ++ "pxor %[ftmp5], %[ftmp5], %[ftmp5] \n\t" ++ "pxor %[ftmp6], %[ftmp6], %[ftmp6] \n\t" + "pcmpeqh %[ftmp5], %[ftmp5], %[ftmp3] \n\t" + "dli %[tmp0], 0x03 \n\t" + "pcmpeqh %[ftmp6] , %[ftmp6], %[ftmp4] \n\t" + "mtc1 %[tmp0], %[ftmp3] \n\t" + "psrah %[ftmp1], %[ftmp1], %[ftmp3] \n\t" + "psrah %[ftmp2], %[ftmp2], %[ftmp3] \n\t" +- "xor %[ftmp1], %[ftmp1], %[ftmp7] \n\t" +- "xor %[ftmp2], %[ftmp2], %[ftmp8] \n\t" ++ "pxor %[ftmp1], %[ftmp1], %[ftmp7] \n\t" ++ "pxor %[ftmp2], %[ftmp2], %[ftmp8] \n\t" + "psubh %[ftmp1], %[ftmp1], %[ftmp7] \n\t" + "psubh %[ftmp2], %[ftmp2], %[ftmp8] \n\t" + "pandn %[ftmp5], %[ftmp5], %[ftmp1] \n\t" +@@ -445,16 +447,16 @@ void ff_denoise_dct_mmi(MpegEncContext *s, int16_t *block) + s->dct_count[intra]++; + + __asm__ volatile( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "1: \n\t" + MMI_LDC1(%[ftmp1], %[block], 0x00) +- "xor %[ftmp2], %[ftmp2], %[ftmp2] \n\t" ++ "pxor %[ftmp2], %[ftmp2], %[ftmp2] \n\t" + MMI_LDC1(%[ftmp3], %[block], 0x08) +- "xor %[ftmp4], %[ftmp4], %[ftmp4] \n\t" ++ "pxor %[ftmp4], %[ftmp4], %[ftmp4] \n\t" + "pcmpgth %[ftmp2], %[ftmp2], %[ftmp1] \n\t" + "pcmpgth %[ftmp4], %[ftmp4], %[ftmp3] \n\t" +- "xor %[ftmp1], %[ftmp1], %[ftmp2] \n\t" +- "xor %[ftmp3], %[ftmp3], %[ftmp4] \n\t" ++ "pxor %[ftmp1], %[ftmp1], %[ftmp2] \n\t" ++ "pxor %[ftmp3], %[ftmp3], %[ftmp4] \n\t" + "psubh %[ftmp1], %[ftmp1], %[ftmp2] \n\t" + "psubh %[ftmp3], %[ftmp3], %[ftmp4] \n\t" + MMI_LDC1(%[ftmp6], %[offset], 0x00) +@@ -463,8 +465,8 @@ void ff_denoise_dct_mmi(MpegEncContext *s, int16_t *block) + MMI_LDC1(%[ftmp6], %[offset], 0x08) + "mov.d %[ftmp7], %[ftmp3] \n\t" + "psubush %[ftmp3], %[ftmp3], %[ftmp6] \n\t" +- "xor %[ftmp1], %[ftmp1], %[ftmp2] \n\t" +- "xor %[ftmp3], %[ftmp3], %[ftmp4] \n\t" ++ "pxor %[ftmp1], %[ftmp1], %[ftmp2] \n\t" ++ "pxor %[ftmp3], %[ftmp3], %[ftmp4] \n\t" + "psubh %[ftmp1], %[ftmp1], %[ftmp2] \n\t" + "psubh %[ftmp3], %[ftmp3], %[ftmp4] \n\t" + MMI_SDC1(%[ftmp1], %[block], 0x00) +diff --git a/libavcodec/mips/pixblockdsp_mmi.c b/libavcodec/mips/pixblockdsp_mmi.c +index a915a3c28b..1230f5de88 100644 +--- a/libavcodec/mips/pixblockdsp_mmi.c ++++ b/libavcodec/mips/pixblockdsp_mmi.c +@@ -33,7 +33,7 @@ void ff_get_pixels_8_mmi(int16_t *av_restrict block, const uint8_t *pixels, + DECLARE_VAR_ADDRT; + + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + + MMI_LDC1(%[ftmp1], %[pixels], 0x00) + MMI_LDXC1(%[ftmp2], %[pixels], %[stride], 0x00) +@@ -103,12 +103,12 @@ void ff_diff_pixels_mmi(int16_t *av_restrict block, const uint8_t *src1, + + __asm__ volatile ( + "li %[tmp0], 0x08 \n\t" +- "xor %[ftmp4], %[ftmp4], %[ftmp4] \n\t" ++ "pxor %[ftmp4], %[ftmp4], %[ftmp4] \n\t" + "1: \n\t" + MMI_LDC1(%[ftmp0], %[src1], 0x00) +- "or %[ftmp1], %[ftmp0], %[ftmp0] \n\t" ++ "por %[ftmp1], %[ftmp0], %[ftmp0] \n\t" + MMI_LDC1(%[ftmp2], %[src2], 0x00) +- "or %[ftmp3], %[ftmp2], %[ftmp2] \n\t" ++ "por %[ftmp3], %[ftmp2], %[ftmp2] \n\t" + "punpcklbh %[ftmp0], %[ftmp0], %[ftmp4] \n\t" + "punpckhbh %[ftmp1], %[ftmp1], %[ftmp4] \n\t" + "punpcklbh %[ftmp2], %[ftmp2], %[ftmp4] \n\t" +diff --git a/libavcodec/mips/simple_idct_mmi.c b/libavcodec/mips/simple_idct_mmi.c +index 73d797ffbc..fc2a84f863 100644 +--- a/libavcodec/mips/simple_idct_mmi.c ++++ b/libavcodec/mips/simple_idct_mmi.c +@@ -132,7 +132,7 @@ void ff_simple_idct_8_mmi(int16_t *block) + "psllh $f28, "#src1", $f30 \n\t" \ + "dmtc1 $9, $f31 \n\t" \ + "punpcklhw $f29, $f28, $f28 \n\t" \ +- "and $f29, $f29, $f31 \n\t" \ ++ "pand $f29, $f29, $f31 \n\t" \ + "paddw $f28, $f28, $f29 \n\t" \ + "punpcklwd "#src1", $f28, $f28 \n\t" \ + "punpcklwd "#src2", $f28, $f28 \n\t" \ +@@ -267,9 +267,9 @@ void ff_simple_idct_8_mmi(int16_t *block) + "punpcklwd $f8, $f27, $f29 \n\t" + "punpckhwd $f12, $f27, $f29 \n\t" + +- "or $f26, $f2, $f6 \n\t" +- "or $f26, $f26, $f10 \n\t" +- "or $f26, $f26, $f14 \n\t" ++ "por $f26, $f2, $f6 \n\t" ++ "por $f26, $f26, $f10 \n\t" ++ "por $f26, $f26, $f14 \n\t" + "dmfc1 $10, $f26 \n\t" + "bnez $10, 1f \n\t" + /* case1: In this case, row[1,3,5,7] are all zero */ +@@ -337,9 +337,9 @@ void ff_simple_idct_8_mmi(int16_t *block) + "punpcklwd $f9, $f27, $f29 \n\t" + "punpckhwd $f13, $f27, $f29 \n\t" + +- "or $f26, $f3, $f7 \n\t" +- "or $f26, $f26, $f11 \n\t" +- "or $f26, $f26, $f15 \n\t" ++ "por $f26, $f3, $f7 \n\t" ++ "por $f26, $f26, $f11 \n\t" ++ "por $f26, $f26, $f15 \n\t" + "dmfc1 $10, $f26 \n\t" + "bnez $10, 1f \n\t" + /* case1: In this case, row[1,3,5,7] are all zero */ +diff --git a/libavcodec/mips/vc1dsp_mmi.c b/libavcodec/mips/vc1dsp_mmi.c +index 98378683b8..693f1013fe 100644 +--- a/libavcodec/mips/vc1dsp_mmi.c ++++ b/libavcodec/mips/vc1dsp_mmi.c +@@ -126,12 +126,14 @@ void ff_vc1_inv_trans_8x8_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *blo + double ftmp[9]; + mips_reg addr[1]; + int count; ++ union mmi_intfloat64 dc_u; + + dc = (3 * dc + 1) >> 1; + dc = (3 * dc + 16) >> 5; ++ dc_u.i = dc; + + __asm__ volatile( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "pshufh %[dc], %[dc], %[ftmp0] \n\t" + "li %[count], 0x02 \n\t" + +@@ -186,7 +188,7 @@ void ff_vc1_inv_trans_8x8_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *blo + [addr0]"=&r"(addr[0]), + [count]"=&r"(count), [dest]"+&r"(dest) + : [linesize]"r"((mips_reg)linesize), +- [dc]"f"(dc) ++ [dc]"f"(dc_u.f) + : "memory" + ); + } +@@ -195,9 +197,6 @@ void ff_vc1_inv_trans_8x8_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *blo + void ff_vc1_inv_trans_8x8_mmi(int16_t block[64]) + { + DECLARE_ALIGNED(16, int16_t, temp[64]); +- DECLARE_ALIGNED(8, const uint64_t, ff_pw_1_local) = {0x0000000100000001ULL}; +- DECLARE_ALIGNED(8, const uint64_t, ff_pw_4_local) = {0x0000000400000004ULL}; +- DECLARE_ALIGNED(8, const uint64_t, ff_pw_64_local)= {0x0000004000000040ULL}; + double ftmp[23]; + uint64_t tmp[1]; + +@@ -404,8 +403,8 @@ void ff_vc1_inv_trans_8x8_mmi(int16_t block[64]) + [ftmp20]"=&f"(ftmp[20]), [ftmp21]"=&f"(ftmp[21]), + [ftmp22]"=&f"(ftmp[22]), + [tmp0]"=&r"(tmp[0]) +- : [ff_pw_1]"f"(ff_pw_1_local), [ff_pw_64]"f"(ff_pw_64_local), +- [ff_pw_4]"f"(ff_pw_4_local), [block]"r"(block), ++ : [ff_pw_1]"f"(ff_pw_32_1.f), [ff_pw_64]"f"(ff_pw_32_64.f), ++ [ff_pw_4]"f"(ff_pw_32_4.f), [block]"r"(block), + [temp]"r"(temp) + : "memory" + ); +@@ -417,12 +416,14 @@ void ff_vc1_inv_trans_8x4_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *blo + { + int dc = block[0]; + double ftmp[9]; ++ union mmi_intfloat64 dc_u; + + dc = ( 3 * dc + 1) >> 1; + dc = (17 * dc + 64) >> 7; ++ dc_u.i = dc; + + __asm__ volatile( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "pshufh %[dc], %[dc], %[ftmp0] \n\t" + + MMI_LDC1(%[ftmp1], %[dest0], 0x00) +@@ -464,7 +465,7 @@ void ff_vc1_inv_trans_8x4_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *blo + [ftmp8]"=&f"(ftmp[8]) + : [dest0]"r"(dest+0*linesize), [dest1]"r"(dest+1*linesize), + [dest2]"r"(dest+2*linesize), [dest3]"r"(dest+3*linesize), +- [dc]"f"(dc) ++ [dc]"f"(dc_u.f) + : "memory" + ); + } +@@ -477,8 +478,6 @@ void ff_vc1_inv_trans_8x4_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block) + double ftmp[16]; + uint32_t tmp[1]; + int16_t count = 4; +- DECLARE_ALIGNED(16, const uint64_t, ff_pw_4_local) = {0x0000000400000004ULL}; +- DECLARE_ALIGNED(16, const uint64_t, ff_pw_64_local)= {0x0000004000000040ULL}; + int16_t coeff[64] = {12, 16, 16, 15, 12, 9, 6, 4, + 12, 15, 6, -4, -12, -16, -16, -9, + 12, 9, -6, -16, -12, 4, 16, 15, +@@ -588,7 +587,7 @@ void ff_vc1_inv_trans_8x4_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block) + [ftmp12]"=&f"(ftmp[12]), [ftmp13]"=&f"(ftmp[13]), + [ftmp14]"=&f"(ftmp[14]), [tmp0]"=&r"(tmp[0]), + [src]"+&r"(src), [dst]"+&r"(dst), [count]"+&r"(count) +- : [ff_pw_4]"f"(ff_pw_4_local), [coeff]"r"(coeff) ++ : [ff_pw_4]"f"(ff_pw_32_4.f), [coeff]"r"(coeff) + : "memory" + ); + +@@ -702,7 +701,7 @@ void ff_vc1_inv_trans_8x4_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block) + MMI_LWC1(%[ftmp3], %[tmp0], 0x00) + PTR_ADDU "%[tmp0], %[tmp0], %[linesize] \n\t" + MMI_LWC1(%[ftmp4], %[tmp0], 0x00) +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "punpcklbh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" + "punpcklbh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" + "punpcklbh %[ftmp3], %[ftmp3], %[ftmp0] \n\t" +@@ -826,7 +825,7 @@ void ff_vc1_inv_trans_8x4_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block) + MMI_LWC1(%[ftmp3], %[tmp0], 0x04) + PTR_ADDU "%[tmp0], %[tmp0], %[linesize] \n\t" + MMI_LWC1(%[ftmp4], %[tmp0], 0x04) +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "punpcklbh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" + "punpcklbh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" + "punpcklbh %[ftmp3], %[ftmp3], %[ftmp0] \n\t" +@@ -856,7 +855,7 @@ void ff_vc1_inv_trans_8x4_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block) + [ftmp12]"=&f"(ftmp[12]), [ftmp13]"=&f"(ftmp[13]), + [ftmp14]"=&f"(ftmp[14]), [ftmp15]"=&f"(ftmp[15]), + [tmp0]"=&r"(tmp[0]) +- : [ff_pw_64]"f"(ff_pw_64_local), ++ : [ff_pw_64]"f"(ff_pw_32_64.f), + [src]"r"(src), [dest]"r"(dest), [linesize]"r"(linesize) + :"memory" + ); +@@ -868,13 +867,15 @@ void ff_vc1_inv_trans_4x8_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *blo + { + int dc = block[0]; + double ftmp[9]; ++ union mmi_intfloat64 dc_u; + DECLARE_VAR_LOW32; + + dc = (17 * dc + 4) >> 3; + dc = (12 * dc + 64) >> 7; ++ dc_u.i = dc; + + __asm__ volatile( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "pshufh %[dc], %[dc], %[ftmp0] \n\t" + + MMI_LWC1(%[ftmp1], %[dest0], 0x00) +@@ -931,7 +932,7 @@ void ff_vc1_inv_trans_4x8_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *blo + [dest2]"r"(dest+2*linesize), [dest3]"r"(dest+3*linesize), + [dest4]"r"(dest+4*linesize), [dest5]"r"(dest+5*linesize), + [dest6]"r"(dest+6*linesize), [dest7]"r"(dest+7*linesize), +- [dc]"f"(dc) ++ [dc]"f"(dc_u.f) + : "memory" + ); + } +@@ -942,14 +943,11 @@ void ff_vc1_inv_trans_4x8_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block) + int16_t *src = block; + int16_t *dst = block; + double ftmp[23]; +- uint32_t count = 8, tmp[1]; ++ uint64_t count = 8, tmp[1]; + int16_t coeff[16] = {17, 22, 17, 10, + 17, 10,-17,-22, + 17,-10,-17, 22, + 17,-22, 17,-10}; +- DECLARE_ALIGNED(8, const uint64_t, ff_pw_1_local) = {0x0000000100000001ULL}; +- DECLARE_ALIGNED(8, const uint64_t, ff_pw_4_local) = {0x0000000400000004ULL}; +- DECLARE_ALIGNED(8, const uint64_t, ff_pw_64_local)= {0x0000004000000040ULL}; + + // 1st loop + __asm__ volatile ( +@@ -995,7 +993,7 @@ void ff_vc1_inv_trans_4x8_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block) + [ftmp10]"=&f"(ftmp[10]), [ftmp11]"=&f"(ftmp[11]), + [tmp0]"=&r"(tmp[0]), [count]"+&r"(count), + [src]"+&r"(src), [dst]"+&r"(dst) +- : [ff_pw_4]"f"(ff_pw_4_local), [coeff]"r"(coeff) ++ : [ff_pw_4]"f"(ff_pw_32_4.f), [coeff]"r"(coeff) + : "memory" + ); + +@@ -1055,7 +1053,7 @@ void ff_vc1_inv_trans_4x8_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block) + MMI_LWC1(%[ftmp7], %[tmp0], 0x00) + PTR_ADDU "%[tmp0], %[tmp0], %[linesize] \n\t" + MMI_LWC1(%[ftmp8], %[tmp0], 0x00) +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "punpcklbh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" + "punpcklbh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" + "punpcklbh %[ftmp3], %[ftmp3], %[ftmp0] \n\t" +@@ -1112,7 +1110,7 @@ void ff_vc1_inv_trans_4x8_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block) + [ftmp20]"=&f"(ftmp[20]), [ftmp21]"=&f"(ftmp[21]), + [ftmp22]"=&f"(ftmp[22]), + [tmp0]"=&r"(tmp[0]) +- : [ff_pw_1]"f"(ff_pw_1_local), [ff_pw_64]"f"(ff_pw_64_local), ++ : [ff_pw_1]"f"(ff_pw_32_1.f), [ff_pw_64]"f"(ff_pw_32_64.f), + [src]"r"(src), [dest]"r"(dest), [linesize]"r"(linesize) + : "memory" + ); +@@ -1124,13 +1122,15 @@ void ff_vc1_inv_trans_4x4_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *blo + { + int dc = block[0]; + double ftmp[5]; ++ union mmi_intfloat64 dc_u; + DECLARE_VAR_LOW32; + + dc = (17 * dc + 4) >> 3; + dc = (17 * dc + 64) >> 7; ++ dc_u.i = dc; + + __asm__ volatile( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "pshufh %[dc], %[dc], %[ftmp0] \n\t" + + MMI_LWC1(%[ftmp1], %[dest0], 0x00) +@@ -1163,7 +1163,7 @@ void ff_vc1_inv_trans_4x4_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *blo + [ftmp4]"=&f"(ftmp[4]) + : [dest0]"r"(dest+0*linesize), [dest1]"r"(dest+1*linesize), + [dest2]"r"(dest+2*linesize), [dest3]"r"(dest+3*linesize), +- [dc]"f"(dc) ++ [dc]"f"(dc_u.f) + : "memory" + ); + } +@@ -1178,8 +1178,6 @@ void ff_vc1_inv_trans_4x4_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block) + 17, 10,-17,-22, + 17,-10,-17, 22, + 17,-22, 17,-10}; +- DECLARE_ALIGNED(8, const uint64_t, ff_pw_4_local) = {0x0000000400000004ULL}; +- DECLARE_ALIGNED(8, const uint64_t, ff_pw_64_local)= {0x0000004000000040ULL}; + // 1st loop + __asm__ volatile ( + +@@ -1223,7 +1221,7 @@ void ff_vc1_inv_trans_4x4_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block) + [ftmp10]"=&f"(ftmp[10]), [ftmp11]"=&f"(ftmp[11]), + [tmp0]"=&r"(tmp[0]), [count]"+&r"(count), + [src]"+&r"(src), [dst]"+&r"(dst) +- : [ff_pw_4]"f"(ff_pw_4_local), [coeff]"r"(coeff) ++ : [ff_pw_4]"f"(ff_pw_32_4.f), [coeff]"r"(coeff) + : "memory" + ); + +@@ -1336,7 +1334,7 @@ void ff_vc1_inv_trans_4x4_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block) + MMI_LWC1(%[ftmp3], %[tmp0], 0x00) + PTR_ADDU "%[tmp0], %[tmp0], %[linesize] \n\t" + MMI_LWC1(%[ftmp4], %[tmp0], 0x00) +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "punpcklbh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" + "punpcklbh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" + "punpcklbh %[ftmp3], %[ftmp3], %[ftmp0] \n\t" +@@ -1367,7 +1365,7 @@ void ff_vc1_inv_trans_4x4_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block) + [ftmp12]"=&f"(ftmp[12]), [ftmp13]"=&f"(ftmp[13]), + [ftmp14]"=&f"(ftmp[14]), [ftmp15]"=&f"(ftmp[15]), + [tmp0]"=&r"(tmp[0]) +- : [ff_pw_64]"f"(ff_pw_64_local), ++ : [ff_pw_64]"f"(ff_pw_32_64.f), + [src]"r"(src), [dest]"r"(dest), [linesize]"r"(linesize) + :"memory" + ); +@@ -1657,14 +1655,15 @@ static void vc1_put_ver_16b_shift2_mmi(int16_t *dst, + const uint8_t *src, mips_reg stride, + int rnd, int64_t shift) + { ++ union mmi_intfloat64 shift_u; + DECLARE_VAR_LOW32; + DECLARE_VAR_ADDRT; ++ shift_u.i = shift; + + __asm__ volatile( +- "xor $f0, $f0, $f0 \n\t" ++ "pxor $f0, $f0, $f0 \n\t" + "li $8, 0x03 \n\t" + LOAD_ROUNDER_MMI("%[rnd]") +- "ldc1 $f12, %[ff_pw_9] \n\t" + "1: \n\t" + MMI_ULWC1($f4, %[src], 0x00) + PTR_ADDU "%[src], %[src], %[stride] \n\t" +@@ -1686,9 +1685,9 @@ static void vc1_put_ver_16b_shift2_mmi(int16_t *dst, + : RESTRICT_ASM_LOW32 RESTRICT_ASM_ADDRT + [src]"+r"(src), [dst]"+r"(dst) + : [stride]"r"(stride), [stride1]"r"(-2*stride), +- [shift]"f"(shift), [rnd]"m"(rnd), +- [stride2]"r"(9*stride-4), [ff_pw_9]"m"(ff_pw_9) +- : "$8", "$9", "$f0", "$f2", "$f4", "$f6", "$f8", "$f10", "$f12", ++ [shift]"f"(shift_u.f), [rnd]"m"(rnd), ++ [stride2]"r"(9*stride-4) ++ : "$8", "$9", "$f0", "$f2", "$f4", "$f6", "$f8", "$f10", + "$f14", "$f16", "memory" + ); + } +@@ -1710,8 +1709,6 @@ static void OPNAME ## vc1_hor_16b_shift2_mmi(uint8_t *dst, mips_reg stride, \ + \ + __asm__ volatile( \ + LOAD_ROUNDER_MMI("%[rnd]") \ +- "ldc1 $f12, %[ff_pw_128] \n\t" \ +- "ldc1 $f10, %[ff_pw_9] \n\t" \ + "1: \n\t" \ + MMI_ULDC1($f2, %[src], 0x00) \ + MMI_ULDC1($f4, %[src], 0x08) \ +@@ -1725,16 +1722,16 @@ static void OPNAME ## vc1_hor_16b_shift2_mmi(uint8_t *dst, mips_reg stride, \ + "paddh $f6, $f6, $f0 \n\t" \ + MMI_ULDC1($f0, %[src], 0x0b) \ + "paddh $f8, $f8, $f0 \n\t" \ +- "pmullh $f6, $f6, $f10 \n\t" \ +- "pmullh $f8, $f8, $f10 \n\t" \ ++ "pmullh $f6, $f6, %[ff_pw_9] \n\t" \ ++ "pmullh $f8, $f8, %[ff_pw_9] \n\t" \ + "psubh $f6, $f6, $f2 \n\t" \ + "psubh $f8, $f8, $f4 \n\t" \ + "li $8, 0x07 \n\t" \ + "mtc1 $8, $f16 \n\t" \ + NORMALIZE_MMI("$f16") \ + /* Remove bias */ \ +- "paddh $f6, $f6, $f12 \n\t" \ +- "paddh $f8, $f8, $f12 \n\t" \ ++ "paddh $f6, $f6, %[ff_pw_128] \n\t" \ ++ "paddh $f8, $f8, %[ff_pw_128] \n\t" \ + TRANSFER_DO_PACK(OP) \ + "addiu %[h], %[h], -0x01 \n\t" \ + PTR_ADDIU "%[src], %[src], 0x18 \n\t" \ +@@ -1744,8 +1741,8 @@ static void OPNAME ## vc1_hor_16b_shift2_mmi(uint8_t *dst, mips_reg stride, \ + [h]"+r"(h), \ + [src]"+r"(src), [dst]"+r"(dst) \ + : [stride]"r"(stride), [rnd]"m"(rnd), \ +- [ff_pw_9]"m"(ff_pw_9), [ff_pw_128]"m"(ff_pw_128) \ +- : "$8", "$f0", "$f2", "$f4", "$f6", "$f8", "$f10", "$f12", "$f14", \ ++ [ff_pw_9]"f"(ff_pw_9.f), [ff_pw_128]"f"(ff_pw_128.f) \ ++ : "$8", "$f0", "$f2", "$f4", "$f6", "$f8", "$f14", \ + "$f16", "memory" \ + ); \ + } +@@ -1768,10 +1765,9 @@ static void OPNAME ## vc1_shift2_mmi(uint8_t *dst, const uint8_t *src, \ + rnd = 8 - rnd; \ + \ + __asm__ volatile( \ +- "xor $f0, $f0, $f0 \n\t" \ ++ "pxor $f0, $f0, $f0 \n\t" \ + "li $10, 0x08 \n\t" \ + LOAD_ROUNDER_MMI("%[rnd]") \ +- "ldc1 $f12, %[ff_pw_9] \n\t" \ + "1: \n\t" \ + MMI_ULWC1($f6, %[src], 0x00) \ + MMI_ULWC1($f8, %[src], 0x04) \ +@@ -1788,8 +1784,8 @@ static void OPNAME ## vc1_shift2_mmi(uint8_t *dst, const uint8_t *src, \ + PTR_ADDU "$9, %[src], %[offset_x2n] \n\t" \ + MMI_ULWC1($f2, $9, 0x00) \ + MMI_ULWC1($f4, $9, 0x04) \ +- "pmullh $f6, $f6, $f12 \n\t" /* 0,9,9,0*/ \ +- "pmullh $f8, $f8, $f12 \n\t" /* 0,9,9,0*/ \ ++ "pmullh $f6, $f6, %[ff_pw_9] \n\t" /* 0,9,9,0*/ \ ++ "pmullh $f8, $f8, %[ff_pw_9] \n\t" /* 0,9,9,0*/ \ + "punpcklbh $f2, $f2, $f0 \n\t" \ + "punpcklbh $f4, $f4, $f0 \n\t" \ + "psubh $f6, $f6, $f2 \n\t" /*-1,9,9,0*/ \ +@@ -1816,9 +1812,9 @@ static void OPNAME ## vc1_shift2_mmi(uint8_t *dst, const uint8_t *src, \ + : [offset]"r"(offset), [offset_x2n]"r"(-2*offset), \ + [stride]"r"(stride), [rnd]"m"(rnd), \ + [stride1]"r"(stride-offset), \ +- [ff_pw_9]"m"(ff_pw_9) \ ++ [ff_pw_9]"f"(ff_pw_9.f) \ + : "$8", "$9", "$10", "$f0", "$f2", "$f4", "$f6", "$f8", "$f10", \ +- "$f12", "$f14", "$f16", "memory" \ ++ "$f14", "$f16", "memory" \ + ); \ + } + +@@ -1849,8 +1845,8 @@ VC1_SHIFT2(OP_AVG, avg_) + LOAD($f8, $9, M*4) \ + UNPACK("$f6") \ + UNPACK("$f8") \ +- "pmullh $f6, $f6, $f12 \n\t" /* *18 */ \ +- "pmullh $f8, $f8, $f12 \n\t" /* *18 */ \ ++ "pmullh $f6, $f6, %[ff_pw_18] \n\t" /* *18 */ \ ++ "pmullh $f8, $f8, %[ff_pw_18] \n\t" /* *18 */ \ + "psubh $f6, $f6, $f2 \n\t" /* *18, -3 */ \ + "psubh $f8, $f8, $f4 \n\t" /* *18, -3 */ \ + PTR_ADDU "$9, %[src], "#A4" \n\t" \ +@@ -1869,8 +1865,8 @@ VC1_SHIFT2(OP_AVG, avg_) + LOAD($f4, $9, M*4) \ + UNPACK("$f2") \ + UNPACK("$f4") \ +- "pmullh $f2, $f2, $f10 \n\t" /* *53 */ \ +- "pmullh $f4, $f4, $f10 \n\t" /* *53 */ \ ++ "pmullh $f2, $f2, %[ff_pw_53] \n\t" /* *53 */ \ ++ "pmullh $f4, $f4, %[ff_pw_53] \n\t" /* *53 */ \ + "paddh $f6, $f6, $f2 \n\t" /* 4,53,18,-3 */ \ + "paddh $f8, $f8, $f4 \n\t" /* 4,53,18,-3 */ + +@@ -1889,16 +1885,16 @@ vc1_put_ver_16b_ ## NAME ## _mmi(int16_t *dst, const uint8_t *src, \ + int rnd, int64_t shift) \ + { \ + int h = 8; \ ++ union mmi_intfloat64 shift_u; \ + DECLARE_VAR_LOW32; \ + DECLARE_VAR_ADDRT; \ ++ shift_u.i = shift; \ + \ + src -= src_stride; \ + \ + __asm__ volatile( \ +- "xor $f0, $f0, $f0 \n\t" \ ++ "pxor $f0, $f0, $f0 \n\t" \ + LOAD_ROUNDER_MMI("%[rnd]") \ +- "ldc1 $f10, %[ff_pw_53] \n\t" \ +- "ldc1 $f12, %[ff_pw_18] \n\t" \ + ".p2align 3 \n\t" \ + "1: \n\t" \ + MSPEL_FILTER13_CORE(DO_UNPACK, MMI_ULWC1, 1, A1, A2, A3, A4) \ +@@ -1914,12 +1910,12 @@ vc1_put_ver_16b_ ## NAME ## _mmi(int16_t *dst, const uint8_t *src, \ + PTR_ADDU "$9, %[src], "#A2" \n\t" \ + MMI_ULWC1($f6, $9, 0x08) \ + DO_UNPACK("$f6") \ +- "pmullh $f6, $f6, $f12 \n\t" /* *18 */ \ ++ "pmullh $f6, $f6, %[ff_pw_18] \n\t" /* *18 */ \ + "psubh $f6, $f6, $f2 \n\t" /* *18,-3 */ \ + PTR_ADDU "$9, %[src], "#A3" \n\t" \ + MMI_ULWC1($f2, $9, 0x08) \ + DO_UNPACK("$f2") \ +- "pmullh $f2, $f2, $f10 \n\t" /* *53 */ \ ++ "pmullh $f2, $f2, %[ff_pw_53] \n\t" /* *53 */ \ + "paddh $f6, $f6, $f2 \n\t" /* *53,18,-3 */ \ + PTR_ADDU "$9, %[src], "#A4" \n\t" \ + MMI_ULWC1($f2, $9, 0x08) \ +@@ -1942,10 +1938,10 @@ vc1_put_ver_16b_ ## NAME ## _mmi(int16_t *dst, const uint8_t *src, \ + [src]"+r"(src), [dst]"+r"(dst) \ + : [stride_x1]"r"(src_stride), [stride_x2]"r"(2*src_stride), \ + [stride_x3]"r"(3*src_stride), \ +- [rnd]"m"(rnd), [shift]"f"(shift), \ +- [ff_pw_53]"m"(ff_pw_53), [ff_pw_18]"m"(ff_pw_18), \ +- [ff_pw_3]"f"(ff_pw_3) \ +- : "$8", "$9", "$f0", "$f2", "$f4", "$f6", "$f8", "$f10", "$f12", \ ++ [rnd]"m"(rnd), [shift]"f"(shift_u.f), \ ++ [ff_pw_53]"f"(ff_pw_53.f), [ff_pw_18]"f"(ff_pw_18.f), \ ++ [ff_pw_3]"f"(ff_pw_3.f) \ ++ : "$8", "$9", "$f0", "$f2", "$f4", "$f6", "$f8", \ + "$f14", "$f16", "memory" \ + ); \ + } +@@ -1970,10 +1966,8 @@ OPNAME ## vc1_hor_16b_ ## NAME ## _mmi(uint8_t *dst, mips_reg stride, \ + rnd -= (-4+58+13-3)*256; /* Add -256 bias */ \ + \ + __asm__ volatile( \ +- "xor $f0, $f0, $f0 \n\t" \ ++ "pxor $f0, $f0, $f0 \n\t" \ + LOAD_ROUNDER_MMI("%[rnd]") \ +- "ldc1 $f10, %[ff_pw_53] \n\t" \ +- "ldc1 $f12, %[ff_pw_18] \n\t" \ + ".p2align 3 \n\t" \ + "1: \n\t" \ + MSPEL_FILTER13_CORE(DONT_UNPACK, MMI_ULDC1, 2, A1, A2, A3, A4) \ +@@ -1992,9 +1986,9 @@ OPNAME ## vc1_hor_16b_ ## NAME ## _mmi(uint8_t *dst, mips_reg stride, \ + [h]"+r"(h), \ + [src]"+r"(src), [dst]"+r"(dst) \ + : [stride]"r"(stride), [rnd]"m"(rnd), \ +- [ff_pw_53]"m"(ff_pw_53), [ff_pw_18]"m"(ff_pw_18), \ +- [ff_pw_3]"f"(ff_pw_3), [ff_pw_128]"f"(ff_pw_128) \ +- : "$8", "$9", "$f0", "$f2", "$f4", "$f6", "$f8", "$f10", "$f12", \ ++ [ff_pw_53]"f"(ff_pw_53.f), [ff_pw_18]"f"(ff_pw_18.f), \ ++ [ff_pw_3]"f"(ff_pw_3.f), [ff_pw_128]"f"(ff_pw_128.f) \ ++ : "$8", "$9", "$f0", "$f2", "$f4", "$f6", "$f8", \ + "$f14", "$f16", "memory" \ + ); \ + } +@@ -2020,10 +2014,8 @@ OPNAME ## vc1_## NAME ## _mmi(uint8_t *dst, const uint8_t *src, \ + rnd = 32-rnd; \ + \ + __asm__ volatile ( \ +- "xor $f0, $f0, $f0 \n\t" \ ++ "pxor $f0, $f0, $f0 \n\t" \ + LOAD_ROUNDER_MMI("%[rnd]") \ +- "ldc1 $f10, %[ff_pw_53] \n\t" \ +- "ldc1 $f12, %[ff_pw_18] \n\t" \ + ".p2align 3 \n\t" \ + "1: \n\t" \ + MSPEL_FILTER13_CORE(DO_UNPACK, MMI_ULWC1, 1, A1, A2, A3, A4) \ +@@ -2041,9 +2033,9 @@ OPNAME ## vc1_## NAME ## _mmi(uint8_t *dst, const uint8_t *src, \ + : [offset_x1]"r"(offset), [offset_x2]"r"(2*offset), \ + [offset_x3]"r"(3*offset), [stride]"r"(stride), \ + [rnd]"m"(rnd), \ +- [ff_pw_53]"m"(ff_pw_53), [ff_pw_18]"m"(ff_pw_18), \ +- [ff_pw_3]"f"(ff_pw_3) \ +- : "$8", "$9", "$f0", "$f2", "$f4", "$f6", "$f8", "$f10", "$f12", \ ++ [ff_pw_53]"f"(ff_pw_53.f), [ff_pw_18]"f"(ff_pw_18.f), \ ++ [ff_pw_3]"f"(ff_pw_3.f) \ ++ : "$8", "$9", "$f0", "$f2", "$f4", "$f6", "$f8", \ + "$f14", "$f16", "memory" \ + ); \ + } +@@ -2243,20 +2235,21 @@ void ff_put_no_rnd_vc1_chroma_mc8_mmi(uint8_t *dst /* align 8 */, + uint8_t *src /* align 1 */, + ptrdiff_t stride, int h, int x, int y) + { +- const int A = (8 - x) * (8 - y); +- const int B = (x) * (8 - y); +- const int C = (8 - x) * (y); +- const int D = (x) * (y); ++ union mmi_intfloat64 A, B, C, D; + double ftmp[10]; + uint32_t tmp[1]; + DECLARE_VAR_ALL64; + DECLARE_VAR_ADDRT; ++ A.i = (8 - x) * (8 - y); ++ B.i = (x) * (8 - y); ++ C.i = (8 - x) * (y); ++ D.i = (x) * (y); + + av_assert2(x < 8 && y < 8 && x >= 0 && y >= 0); + + __asm__ volatile( + "li %[tmp0], 0x06 \n\t" +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "mtc1 %[tmp0], %[ftmp9] \n\t" + "pshufh %[A], %[A], %[ftmp0] \n\t" + "pshufh %[B], %[B], %[ftmp0] \n\t" +@@ -2287,9 +2280,9 @@ void ff_put_no_rnd_vc1_chroma_mc8_mmi(uint8_t *dst /* align 8 */, + [src]"+&r"(src), [dst]"+&r"(dst), + [h]"+&r"(h) + : [stride]"r"((mips_reg)stride), +- [A]"f"(A), [B]"f"(B), +- [C]"f"(C), [D]"f"(D), +- [ff_pw_28]"f"(ff_pw_28) ++ [A]"f"(A.f), [B]"f"(B.f), ++ [C]"f"(C.f), [D]"f"(D.f), ++ [ff_pw_28]"f"(ff_pw_28.f) + : "memory" + ); + } +@@ -2298,20 +2291,21 @@ void ff_put_no_rnd_vc1_chroma_mc4_mmi(uint8_t *dst /* align 8 */, + uint8_t *src /* align 1 */, + ptrdiff_t stride, int h, int x, int y) + { +- const int A = (8 - x) * (8 - y); +- const int B = (x) * (8 - y); +- const int C = (8 - x) * (y); +- const int D = (x) * (y); ++ union mmi_intfloat64 A, B, C, D; + double ftmp[6]; + uint32_t tmp[1]; + DECLARE_VAR_LOW32; + DECLARE_VAR_ADDRT; ++ A.i = (8 - x) * (8 - y); ++ B.i = (x) * (8 - y); ++ C.i = (8 - x) * (y); ++ D.i = (x) * (y); + + av_assert2(x < 8 && y < 8 && x >= 0 && y >= 0); + + __asm__ volatile( + "li %[tmp0], 0x06 \n\t" +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "mtc1 %[tmp0], %[ftmp5] \n\t" + "pshufh %[A], %[A], %[ftmp0] \n\t" + "pshufh %[B], %[B], %[ftmp0] \n\t" +@@ -2340,9 +2334,9 @@ void ff_put_no_rnd_vc1_chroma_mc4_mmi(uint8_t *dst /* align 8 */, + [src]"+&r"(src), [dst]"+&r"(dst), + [h]"+&r"(h) + : [stride]"r"((mips_reg)stride), +- [A]"f"(A), [B]"f"(B), +- [C]"f"(C), [D]"f"(D), +- [ff_pw_28]"f"(ff_pw_28) ++ [A]"f"(A.f), [B]"f"(B.f), ++ [C]"f"(C.f), [D]"f"(D.f), ++ [ff_pw_28]"f"(ff_pw_28.f) + : "memory" + ); + } +@@ -2351,20 +2345,21 @@ void ff_avg_no_rnd_vc1_chroma_mc8_mmi(uint8_t *dst /* align 8 */, + uint8_t *src /* align 1 */, + ptrdiff_t stride, int h, int x, int y) + { +- const int A = (8 - x) * (8 - y); +- const int B = (x) * (8 - y); +- const int C = (8 - x) * (y); +- const int D = (x) * (y); ++ union mmi_intfloat64 A, B, C, D; + double ftmp[10]; + uint32_t tmp[1]; + DECLARE_VAR_ALL64; + DECLARE_VAR_ADDRT; ++ A.i = (8 - x) * (8 - y); ++ B.i = (x) * (8 - y); ++ C.i = (8 - x) * (y); ++ D.i = (x) * (y); + + av_assert2(x < 8 && y < 8 && x >= 0 && y >= 0); + + __asm__ volatile( + "li %[tmp0], 0x06 \n\t" +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "mtc1 %[tmp0], %[ftmp9] \n\t" + "pshufh %[A], %[A], %[ftmp0] \n\t" + "pshufh %[B], %[B], %[ftmp0] \n\t" +@@ -2398,9 +2393,9 @@ void ff_avg_no_rnd_vc1_chroma_mc8_mmi(uint8_t *dst /* align 8 */, + [src]"+&r"(src), [dst]"+&r"(dst), + [h]"+&r"(h) + : [stride]"r"((mips_reg)stride), +- [A]"f"(A), [B]"f"(B), +- [C]"f"(C), [D]"f"(D), +- [ff_pw_28]"f"(ff_pw_28) ++ [A]"f"(A.f), [B]"f"(B.f), ++ [C]"f"(C.f), [D]"f"(D.f), ++ [ff_pw_28]"f"(ff_pw_28.f) + : "memory" + ); + } +@@ -2409,20 +2404,21 @@ void ff_avg_no_rnd_vc1_chroma_mc4_mmi(uint8_t *dst /* align 8 */, + uint8_t *src /* align 1 */, + ptrdiff_t stride, int h, int x, int y) + { +- const int A = (8 - x) * (8 - y); +- const int B = ( x) * (8 - y); +- const int C = (8 - x) * ( y); +- const int D = ( x) * ( y); ++ union mmi_intfloat64 A, B, C, D; + double ftmp[6]; + uint32_t tmp[1]; + DECLARE_VAR_LOW32; + DECLARE_VAR_ADDRT; ++ A.i = (8 - x) * (8 - y); ++ B.i = (x) * (8 - y); ++ C.i = (8 - x) * (y); ++ D.i = (x) * (y); + + av_assert2(x < 8 && y < 8 && x >= 0 && y >= 0); + + __asm__ volatile( + "li %[tmp0], 0x06 \n\t" +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "mtc1 %[tmp0], %[ftmp5] \n\t" + "pshufh %[A], %[A], %[ftmp0] \n\t" + "pshufh %[B], %[B], %[ftmp0] \n\t" +@@ -2454,9 +2450,9 @@ void ff_avg_no_rnd_vc1_chroma_mc4_mmi(uint8_t *dst /* align 8 */, + [src]"+&r"(src), [dst]"+&r"(dst), + [h]"+&r"(h) + : [stride]"r"((mips_reg)stride), +- [A]"f"(A), [B]"f"(B), +- [C]"f"(C), [D]"f"(D), +- [ff_pw_28]"f"(ff_pw_28) ++ [A]"f"(A.f), [B]"f"(B.f), ++ [C]"f"(C.f), [D]"f"(D.f), ++ [ff_pw_28]"f"(ff_pw_28.f) + : "memory" + ); + } +diff --git a/libavcodec/mips/vp3dsp_idct_mmi.c b/libavcodec/mips/vp3dsp_idct_mmi.c +index c5c4cf3127..0d4cba19ec 100644 +--- a/libavcodec/mips/vp3dsp_idct_mmi.c ++++ b/libavcodec/mips/vp3dsp_idct_mmi.c +@@ -34,7 +34,7 @@ static void idct_row_mmi(int16_t *input) + double ftmp[23]; + uint64_t tmp[2]; + __asm__ volatile ( +- "xor %[ftmp10], %[ftmp10], %[ftmp10] \n\t" ++ "pxor %[ftmp10], %[ftmp10], %[ftmp10] \n\t" + LOAD_CONST(%[csth_1], 1) + "li %[tmp0], 0x02 \n\t" + "1: \n\t" +@@ -51,14 +51,14 @@ static void idct_row_mmi(int16_t *input) + LOAD_CONST(%[ftmp9], 12785) + "pmulhh %[A], %[ftmp9], %[ftmp7] \n\t" + "pcmpgth %[C], %[ftmp10], %[ftmp1] \n\t" +- "or %[mask], %[C], %[csth_1] \n\t" ++ "por %[mask], %[C], %[csth_1] \n\t" + "pmullh %[B], %[ftmp1], %[mask] \n\t" + "pmulhuh %[B], %[ftmp8], %[B] \n\t" + "pmullh %[B], %[B], %[mask] \n\t" + "paddh %[A], %[A], %[B] \n\t" + "paddh %[A], %[A], %[C] \n\t" + "pcmpgth %[D], %[ftmp10], %[ftmp7] \n\t" +- "or %[mask], %[D], %[csth_1] \n\t" ++ "por %[mask], %[D], %[csth_1] \n\t" + "pmullh %[ftmp7], %[ftmp7], %[mask] \n\t" + "pmulhuh %[B], %[ftmp8], %[ftmp7] \n\t" + "pmullh %[B], %[B], %[mask] \n\t" +@@ -69,12 +69,12 @@ static void idct_row_mmi(int16_t *input) + LOAD_CONST(%[ftmp8], 54491) + LOAD_CONST(%[ftmp9], 36410) + "pcmpgth %[Ad], %[ftmp10], %[ftmp5] \n\t" +- "or %[mask], %[Ad], %[csth_1] \n\t" ++ "por %[mask], %[Ad], %[csth_1] \n\t" + "pmullh %[ftmp1], %[ftmp5], %[mask] \n\t" + "pmulhuh %[C], %[ftmp9], %[ftmp1] \n\t" + "pmullh %[C], %[C], %[mask] \n\t" + "pcmpgth %[Bd], %[ftmp10], %[ftmp3] \n\t" +- "or %[mask], %[Bd], %[csth_1] \n\t" ++ "por %[mask], %[Bd], %[csth_1] \n\t" + "pmullh %[D], %[ftmp3], %[mask] \n\t" + "pmulhuh %[D], %[ftmp8], %[D] \n\t" + "pmullh %[D], %[D], %[mask] \n\t" +@@ -82,12 +82,12 @@ static void idct_row_mmi(int16_t *input) + "paddh %[C], %[C], %[Ad] \n\t" + "paddh %[C], %[C], %[Bd] \n\t" + "pcmpgth %[Bd], %[ftmp10], %[ftmp3] \n\t" +- "or %[mask], %[Bd], %[csth_1] \n\t" ++ "por %[mask], %[Bd], %[csth_1] \n\t" + "pmullh %[ftmp1], %[ftmp3], %[mask] \n\t" + "pmulhuh %[D], %[ftmp9], %[ftmp1] \n\t" + "pmullh %[D], %[D], %[mask] \n\t" + "pcmpgth %[Ed], %[ftmp10], %[ftmp5] \n\t" +- "or %[mask], %[Ed], %[csth_1] \n\t" ++ "por %[mask], %[Ed], %[csth_1] \n\t" + "pmullh %[Ad], %[ftmp5], %[mask] \n\t" + "pmulhuh %[Ad], %[ftmp8], %[Ad] \n\t" + "pmullh %[Ad], %[Ad], %[mask] \n\t" +@@ -98,14 +98,14 @@ static void idct_row_mmi(int16_t *input) + LOAD_CONST(%[ftmp8], 46341) + "psubh %[Ad], %[A], %[C] \n\t" + "pcmpgth %[Bd], %[ftmp10], %[Ad] \n\t" +- "or %[mask], %[Bd], %[csth_1] \n\t" ++ "por %[mask], %[Bd], %[csth_1] \n\t" + "pmullh %[Ad], %[Ad], %[mask] \n\t" + "pmulhuh %[Ad], %[ftmp8], %[Ad] \n\t" + "pmullh %[Ad], %[Ad], %[mask] \n\t" + "paddh %[Ad], %[Ad], %[Bd] \n\t" + "psubh %[Bd], %[B], %[D] \n\t" + "pcmpgth %[Cd], %[ftmp10], %[Bd] \n\t" +- "or %[mask], %[Cd], %[csth_1] \n\t" ++ "por %[mask], %[Cd], %[csth_1] \n\t" + "pmullh %[Bd], %[Bd], %[mask] \n\t" + "pmulhuh %[Bd], %[ftmp8], %[Bd] \n\t" + "pmullh %[Bd], %[Bd], %[mask] \n\t" +@@ -114,14 +114,14 @@ static void idct_row_mmi(int16_t *input) + "paddh %[Dd], %[B], %[D] \n\t" + "paddh %[A], %[ftmp0], %[ftmp4] \n\t" + "pcmpgth %[B], %[ftmp10], %[A] \n\t" +- "or %[mask], %[B], %[csth_1] \n\t" ++ "por %[mask], %[B], %[csth_1] \n\t" + "pmullh %[A], %[A], %[mask] \n\t" + "pmulhuh %[A], %[ftmp8], %[A] \n\t" + "pmullh %[A], %[A], %[mask] \n\t" + "paddh %[A], %[A], %[B] \n\t" + "psubh %[B], %[ftmp0], %[ftmp4] \n\t" + "pcmpgth %[C], %[ftmp10], %[B] \n\t" +- "or %[mask], %[C], %[csth_1] \n\t" ++ "por %[mask], %[C], %[csth_1] \n\t" + "pmullh %[B], %[B], %[mask] \n\t" + "pmulhuh %[B], %[ftmp8], %[B] \n\t" + "pmullh %[B], %[B], %[mask] \n\t" +@@ -131,14 +131,14 @@ static void idct_row_mmi(int16_t *input) + LOAD_CONST(%[ftmp9], 25080) + "pmulhh %[C], %[ftmp9], %[ftmp6] \n\t" + "pcmpgth %[D], %[ftmp10], %[ftmp2] \n\t" +- "or %[mask], %[D], %[csth_1] \n\t" ++ "por %[mask], %[D], %[csth_1] \n\t" + "pmullh %[Ed], %[ftmp2], %[mask] \n\t" + "pmulhuh %[Ed], %[ftmp8], %[Ed] \n\t" + "pmullh %[Ed], %[Ed], %[mask] \n\t" + "paddh %[C], %[C], %[Ed] \n\t" + "paddh %[C], %[C], %[D] \n\t" + "pcmpgth %[Ed], %[ftmp10], %[ftmp6] \n\t" +- "or %[mask], %[Ed], %[csth_1] \n\t" ++ "por %[mask], %[Ed], %[csth_1] \n\t" + "pmullh %[ftmp6], %[ftmp6], %[mask] \n\t" + "pmulhuh %[D], %[ftmp8], %[ftmp6] \n\t" + "pmullh %[D], %[D], %[mask] \n\t" +@@ -193,7 +193,7 @@ static void idct_column_true_mmi(uint8_t *dst, int stride, int16_t *input) + for (int i = 0; i < 8; ++i) + temp_value[i] = av_clip_uint8(128 + ((46341 * input[i << 3] + (8 << 16)) >> 20)); + __asm__ volatile ( +- "xor %[ftmp10], %[ftmp10], %[ftmp10] \n\t" ++ "pxor %[ftmp10], %[ftmp10], %[ftmp10] \n\t" + "li %[tmp0], 0x02 \n\t" + "1: \n\t" + "ldc1 %[ftmp0], 0x00(%[input]) \n\t" +@@ -213,14 +213,14 @@ static void idct_column_true_mmi(uint8_t *dst, int stride, int16_t *input) + LOAD_CONST(%[Gd], 1) + "pmulhh %[A], %[ftmp9], %[ftmp7] \n\t" + "pcmpgth %[C], %[ftmp10], %[ftmp1] \n\t" +- "or %[mask], %[C], %[Gd] \n\t" ++ "por %[mask], %[C], %[Gd] \n\t" + "pmullh %[B], %[ftmp1], %[mask] \n\t" + "pmulhuh %[B], %[ftmp8], %[B] \n\t" + "pmullh %[B], %[B], %[mask] \n\t" + "paddh %[A], %[A], %[B] \n\t" + "paddh %[A], %[A], %[C] \n\t" + "pcmpgth %[D], %[ftmp10], %[ftmp7] \n\t" +- "or %[mask], %[D], %[Gd] \n\t" ++ "por %[mask], %[D], %[Gd] \n\t" + "pmullh %[Ad], %[ftmp7], %[mask] \n\t" + "pmulhuh %[B], %[ftmp8], %[Ad] \n\t" + "pmullh %[B], %[B], %[mask] \n\t" +@@ -231,12 +231,12 @@ static void idct_column_true_mmi(uint8_t *dst, int stride, int16_t *input) + LOAD_CONST(%[ftmp8], 54491) + LOAD_CONST(%[ftmp9], 36410) + "pcmpgth %[Ad], %[ftmp10], %[ftmp5] \n\t" +- "or %[mask], %[Ad], %[Gd] \n\t" ++ "por %[mask], %[Ad], %[Gd] \n\t" + "pmullh %[Cd], %[ftmp5], %[mask] \n\t" + "pmulhuh %[C], %[ftmp9], %[Cd] \n\t" + "pmullh %[C], %[C], %[mask] \n\t" + "pcmpgth %[Bd], %[ftmp10], %[ftmp3] \n\t" +- "or %[mask], %[Bd], %[Gd] \n\t" ++ "por %[mask], %[Bd], %[Gd] \n\t" + "pmullh %[D], %[ftmp3], %[mask] \n\t" + "pmulhuh %[D], %[ftmp8], %[D] \n\t" + "pmullh %[D], %[D], %[mask] \n\t" +@@ -244,12 +244,12 @@ static void idct_column_true_mmi(uint8_t *dst, int stride, int16_t *input) + "paddh %[C], %[C], %[Ad] \n\t" + "paddh %[C], %[C], %[Bd] \n\t" + "pcmpgth %[Bd], %[ftmp10], %[ftmp3] \n\t" +- "or %[mask], %[Bd], %[Gd] \n\t" ++ "por %[mask], %[Bd], %[Gd] \n\t" + "pmullh %[Cd], %[ftmp3], %[mask] \n\t" + "pmulhuh %[D], %[ftmp9], %[Cd] \n\t" + "pmullh %[D], %[D], %[mask] \n\t" + "pcmpgth %[Ed], %[ftmp10], %[ftmp5] \n\t" +- "or %[mask], %[Ed], %[Gd] \n\t" ++ "por %[mask], %[Ed], %[Gd] \n\t" + "pmullh %[Ad], %[ftmp5], %[mask] \n\t" + "pmulhuh %[Ad], %[ftmp8], %[Ad] \n\t" + "pmullh %[Ad], %[Ad], %[mask] \n\t" +@@ -260,14 +260,14 @@ static void idct_column_true_mmi(uint8_t *dst, int stride, int16_t *input) + LOAD_CONST(%[ftmp8], 46341) + "psubh %[Ad], %[A], %[C] \n\t" + "pcmpgth %[Bd], %[ftmp10], %[Ad] \n\t" +- "or %[mask], %[Bd], %[Gd] \n\t" ++ "por %[mask], %[Bd], %[Gd] \n\t" + "pmullh %[Ad], %[Ad], %[mask] \n\t" + "pmulhuh %[Ad], %[ftmp8], %[Ad] \n\t" + "pmullh %[Ad], %[Ad], %[mask] \n\t" + "paddh %[Ad], %[Ad], %[Bd] \n\t" + "psubh %[Bd], %[B], %[D] \n\t" + "pcmpgth %[Cd], %[ftmp10], %[Bd] \n\t" +- "or %[mask], %[Cd], %[Gd] \n\t" ++ "por %[mask], %[Cd], %[Gd] \n\t" + "pmullh %[Bd], %[Bd], %[mask] \n\t" + "pmulhuh %[Bd], %[ftmp8], %[Bd] \n\t" + "pmullh %[Bd], %[Bd], %[mask] \n\t" +@@ -278,7 +278,7 @@ static void idct_column_true_mmi(uint8_t *dst, int stride, int16_t *input) + LOAD_CONST(%[Ed], 2056) + "paddh %[A], %[ftmp0], %[ftmp4] \n\t" + "pcmpgth %[B], %[ftmp10], %[A] \n\t" +- "or %[mask], %[B], %[Gd] \n\t" ++ "por %[mask], %[B], %[Gd] \n\t" + "pmullh %[A], %[A], %[mask] \n\t" + "pmulhuh %[A], %[ftmp8], %[A] \n\t" + "pmullh %[A], %[A], %[mask] \n\t" +@@ -286,7 +286,7 @@ static void idct_column_true_mmi(uint8_t *dst, int stride, int16_t *input) + "paddh %[A], %[A], %[Ed] \n\t" + "psubh %[B], %[ftmp0], %[ftmp4] \n\t" + "pcmpgth %[C], %[ftmp10], %[B] \n\t" +- "or %[mask], %[C], %[Gd] \n\t" ++ "por %[mask], %[C], %[Gd] \n\t" + "pmullh %[B], %[B], %[mask] \n\t" + "pmulhuh %[B], %[ftmp8], %[B] \n\t" + "pmullh %[B], %[B], %[mask] \n\t" +@@ -297,14 +297,14 @@ static void idct_column_true_mmi(uint8_t *dst, int stride, int16_t *input) + LOAD_CONST(%[ftmp9], 25080) + "pmulhh %[C], %[ftmp9], %[ftmp6] \n\t" + "pcmpgth %[D], %[ftmp10], %[ftmp2] \n\t" +- "or %[mask], %[D], %[Gd] \n\t" ++ "por %[mask], %[D], %[Gd] \n\t" + "pmullh %[Ed], %[ftmp2], %[mask] \n\t" + "pmulhuh %[Ed], %[ftmp8], %[Ed] \n\t" + "pmullh %[Ed], %[Ed], %[mask] \n\t" + "paddh %[C], %[C], %[Ed] \n\t" + "paddh %[C], %[C], %[D] \n\t" + "pcmpgth %[Ed], %[ftmp10], %[ftmp6] \n\t" +- "or %[mask], %[Ed], %[Gd] \n\t" ++ "por %[mask], %[Ed], %[Gd] \n\t" + "pmullh %[D], %[ftmp6], %[mask] \n\t" + "pmulhuh %[D], %[ftmp8], %[D] \n\t" + "pmullh %[D], %[D], %[mask] \n\t" +@@ -317,12 +317,12 @@ static void idct_column_true_mmi(uint8_t *dst, int stride, int16_t *input) + "psubh %[C], %[B], %[Ad] \n\t" + "psubh %[B], %[Bd], %[D] \n\t" + "paddh %[D], %[Bd], %[D] \n\t" +- "or %[mask], %[ftmp1], %[ftmp2] \n\t" +- "or %[mask], %[mask], %[ftmp3] \n\t" +- "or %[mask], %[mask], %[ftmp4] \n\t" +- "or %[mask], %[mask], %[ftmp5] \n\t" +- "or %[mask], %[mask], %[ftmp6] \n\t" +- "or %[mask], %[mask], %[ftmp7] \n\t" ++ "por %[mask], %[ftmp1], %[ftmp2] \n\t" ++ "por %[mask], %[mask], %[ftmp3] \n\t" ++ "por %[mask], %[mask], %[ftmp4] \n\t" ++ "por %[mask], %[mask], %[ftmp5] \n\t" ++ "por %[mask], %[mask], %[ftmp6] \n\t" ++ "por %[mask], %[mask], %[ftmp7] \n\t" + "pcmpeqh %[mask], %[mask], %[ftmp10] \n\t" + "packushb %[mask], %[mask], %[ftmp10] \n\t" + "li %[tmp1], 0x04 \n\t" +@@ -361,7 +361,7 @@ static void idct_column_true_mmi(uint8_t *dst, int stride, int16_t *input) + "packushb %[ftmp7], %[ftmp7], %[ftmp10] \n\t" + + "lwc1 %[Ed], 0x00(%[temp_value]) \n\t" +- "and %[Ed], %[Ed], %[mask] \n\t" ++ "pand %[Ed], %[Ed], %[mask] \n\t" + "paddb %[ftmp0], %[ftmp0], %[Ed] \n\t" + "paddb %[ftmp1], %[ftmp1], %[Ed] \n\t" + "paddb %[ftmp2], %[ftmp2], %[Ed] \n\t" +@@ -412,7 +412,7 @@ static void idct_column_false_mmi(uint8_t *dst, int stride, int16_t *input) + for (int i = 0; i < 8; ++i) + temp_value[i] = (46341 * input[i << 3] + (8 << 16)) >> 20; + __asm__ volatile ( +- "xor %[ftmp10], %[ftmp10], %[ftmp10] \n\t" ++ "pxor %[ftmp10], %[ftmp10], %[ftmp10] \n\t" + "li %[tmp0], 0x02 \n\t" + "1: \n\t" + "ldc1 %[ftmp0], 0x00(%[input]) \n\t" +@@ -432,14 +432,14 @@ static void idct_column_false_mmi(uint8_t *dst, int stride, int16_t *input) + LOAD_CONST(%[Gd], 1) + "pmulhh %[A], %[ftmp9], %[ftmp7] \n\t" + "pcmpgth %[C], %[ftmp10], %[ftmp1] \n\t" +- "or %[mask], %[C], %[Gd] \n\t" ++ "por %[mask], %[C], %[Gd] \n\t" + "pmullh %[B], %[ftmp1], %[mask] \n\t" + "pmulhuh %[B], %[ftmp8], %[B] \n\t" + "pmullh %[B], %[B], %[mask] \n\t" + "paddh %[A], %[A], %[B] \n\t" + "paddh %[A], %[A], %[C] \n\t" + "pcmpgth %[D], %[ftmp10], %[ftmp7] \n\t" +- "or %[mask], %[D], %[Gd] \n\t" ++ "por %[mask], %[D], %[Gd] \n\t" + "pmullh %[Ad], %[ftmp7], %[mask] \n\t" + "pmulhuh %[B], %[ftmp8], %[Ad] \n\t" + "pmullh %[B], %[B], %[mask] \n\t" +@@ -450,12 +450,12 @@ static void idct_column_false_mmi(uint8_t *dst, int stride, int16_t *input) + LOAD_CONST(%[ftmp8], 54491) + LOAD_CONST(%[ftmp9], 36410) + "pcmpgth %[Ad], %[ftmp10], %[ftmp5] \n\t" +- "or %[mask], %[Ad], %[Gd] \n\t" ++ "por %[mask], %[Ad], %[Gd] \n\t" + "pmullh %[Cd], %[ftmp5], %[mask] \n\t" + "pmulhuh %[C], %[ftmp9], %[Cd] \n\t" + "pmullh %[C], %[C], %[mask] \n\t" + "pcmpgth %[Bd], %[ftmp10], %[ftmp3] \n\t" +- "or %[mask], %[Bd], %[Gd] \n\t" ++ "por %[mask], %[Bd], %[Gd] \n\t" + "pmullh %[D], %[ftmp3], %[mask] \n\t" + "pmulhuh %[D], %[ftmp8], %[D] \n\t" + "pmullh %[D], %[D], %[mask] \n\t" +@@ -463,12 +463,12 @@ static void idct_column_false_mmi(uint8_t *dst, int stride, int16_t *input) + "paddh %[C], %[C], %[Ad] \n\t" + "paddh %[C], %[C], %[Bd] \n\t" + "pcmpgth %[Bd], %[ftmp10], %[ftmp3] \n\t" +- "or %[mask], %[Bd], %[Gd] \n\t" ++ "por %[mask], %[Bd], %[Gd] \n\t" + "pmullh %[Cd], %[ftmp3], %[mask] \n\t" + "pmulhuh %[D], %[ftmp9], %[Cd] \n\t" + "pmullh %[D], %[D], %[mask] \n\t" + "pcmpgth %[Ed], %[ftmp10], %[ftmp5] \n\t" +- "or %[mask], %[Ed], %[Gd] \n\t" ++ "por %[mask], %[Ed], %[Gd] \n\t" + "pmullh %[Ad], %[ftmp5], %[mask] \n\t" + "pmulhuh %[Ad], %[ftmp8], %[Ad] \n\t" + "pmullh %[Ad], %[Ad], %[mask] \n\t" +@@ -479,14 +479,14 @@ static void idct_column_false_mmi(uint8_t *dst, int stride, int16_t *input) + LOAD_CONST(%[ftmp8], 46341) + "psubh %[Ad], %[A], %[C] \n\t" + "pcmpgth %[Bd], %[ftmp10], %[Ad] \n\t" +- "or %[mask], %[Bd], %[Gd] \n\t" ++ "por %[mask], %[Bd], %[Gd] \n\t" + "pmullh %[Ad], %[Ad], %[mask] \n\t" + "pmulhuh %[Ad], %[ftmp8], %[Ad] \n\t" + "pmullh %[Ad], %[Ad], %[mask] \n\t" + "paddh %[Ad], %[Ad], %[Bd] \n\t" + "psubh %[Bd], %[B], %[D] \n\t" + "pcmpgth %[Cd], %[ftmp10], %[Bd] \n\t" +- "or %[mask], %[Cd], %[Gd] \n\t" ++ "por %[mask], %[Cd], %[Gd] \n\t" + "pmullh %[Bd], %[Bd], %[mask] \n\t" + "pmulhuh %[Bd], %[ftmp8], %[Bd] \n\t" + "pmullh %[Bd], %[Bd], %[mask] \n\t" +@@ -497,7 +497,7 @@ static void idct_column_false_mmi(uint8_t *dst, int stride, int16_t *input) + LOAD_CONST(%[Ed], 8) + "paddh %[A], %[ftmp0], %[ftmp4] \n\t" + "pcmpgth %[B], %[ftmp10], %[A] \n\t" +- "or %[mask], %[B], %[Gd] \n\t" ++ "por %[mask], %[B], %[Gd] \n\t" + "pmullh %[A], %[A], %[mask] \n\t" + "pmulhuh %[A], %[ftmp8], %[A] \n\t" + "pmullh %[A], %[A], %[mask] \n\t" +@@ -505,7 +505,7 @@ static void idct_column_false_mmi(uint8_t *dst, int stride, int16_t *input) + "paddh %[A], %[A], %[Ed] \n\t" + "psubh %[B], %[ftmp0], %[ftmp4] \n\t" + "pcmpgth %[C], %[ftmp10], %[B] \n\t" +- "or %[mask], %[C], %[Gd] \n\t" ++ "por %[mask], %[C], %[Gd] \n\t" + "pmullh %[B], %[B], %[mask] \n\t" + "pmulhuh %[B], %[ftmp8], %[B] \n\t" + "pmullh %[B], %[B], %[mask] \n\t" +@@ -516,14 +516,14 @@ static void idct_column_false_mmi(uint8_t *dst, int stride, int16_t *input) + LOAD_CONST(%[ftmp9], 25080) + "pmulhh %[C], %[ftmp9], %[ftmp6] \n\t" + "pcmpgth %[D], %[ftmp10], %[ftmp2] \n\t" +- "or %[mask], %[D], %[Gd] \n\t" ++ "por %[mask], %[D], %[Gd] \n\t" + "pmullh %[Ed], %[ftmp2], %[mask] \n\t" + "pmulhuh %[Ed], %[ftmp8], %[Ed] \n\t" + "pmullh %[Ed], %[Ed], %[mask] \n\t" + "paddh %[C], %[C], %[Ed] \n\t" + "paddh %[C], %[C], %[D] \n\t" + "pcmpgth %[Ed], %[ftmp10], %[ftmp6] \n\t" +- "or %[mask], %[Ed], %[Gd] \n\t" ++ "por %[mask], %[Ed], %[Gd] \n\t" + "pmullh %[D], %[ftmp6], %[mask] \n\t" + "pmulhuh %[D], %[ftmp8], %[D] \n\t" + "pmullh %[D], %[D], %[mask] \n\t" +@@ -536,12 +536,12 @@ static void idct_column_false_mmi(uint8_t *dst, int stride, int16_t *input) + "psubh %[C], %[B], %[Ad] \n\t" + "psubh %[B], %[Bd], %[D] \n\t" + "paddh %[D], %[Bd], %[D] \n\t" +- "or %[mask], %[ftmp1], %[ftmp2] \n\t" +- "or %[mask], %[mask], %[ftmp3] \n\t" +- "or %[mask], %[mask], %[ftmp4] \n\t" +- "or %[mask], %[mask], %[ftmp5] \n\t" +- "or %[mask], %[mask], %[ftmp6] \n\t" +- "or %[mask], %[mask], %[ftmp7] \n\t" ++ "por %[mask], %[ftmp1], %[ftmp2] \n\t" ++ "por %[mask], %[mask], %[ftmp3] \n\t" ++ "por %[mask], %[mask], %[ftmp4] \n\t" ++ "por %[mask], %[mask], %[ftmp5] \n\t" ++ "por %[mask], %[mask], %[ftmp6] \n\t" ++ "por %[mask], %[mask], %[ftmp7] \n\t" + "pcmpeqh %[mask], %[mask], %[ftmp10] \n\t" + "li %[tmp1], 0x04 \n\t" + "dmtc1 %[tmp1], %[ftmp8] \n\t" +@@ -587,16 +587,16 @@ static void idct_column_false_mmi(uint8_t *dst, int stride, int16_t *input) + "punpcklbh %[Cd], %[Cd], %[ftmp10] \n\t" + "punpcklbh %[Dd], %[Dd], %[ftmp10] \n\t" + "ldc1 %[Ed], 0x00(%[temp_value]) \n\t" +- "and %[Ed], %[Ed], %[mask] \n\t" +- "nor %[mask], %[mask], %[mask] \n\t" +- "and %[ftmp0], %[ftmp0], %[mask] \n\t" +- "and %[ftmp1], %[ftmp1], %[mask] \n\t" +- "and %[ftmp2], %[ftmp2], %[mask] \n\t" +- "and %[ftmp3], %[ftmp3], %[mask] \n\t" +- "and %[ftmp4], %[ftmp4], %[mask] \n\t" +- "and %[ftmp5], %[ftmp5], %[mask] \n\t" +- "and %[ftmp6], %[ftmp6], %[mask] \n\t" +- "and %[ftmp7], %[ftmp7], %[mask] \n\t" ++ "pand %[Ed], %[Ed], %[mask] \n\t" ++ "pnor %[mask], %[mask], %[mask] \n\t" ++ "pand %[ftmp0], %[ftmp0], %[mask] \n\t" ++ "pand %[ftmp1], %[ftmp1], %[mask] \n\t" ++ "pand %[ftmp2], %[ftmp2], %[mask] \n\t" ++ "pand %[ftmp3], %[ftmp3], %[mask] \n\t" ++ "pand %[ftmp4], %[ftmp4], %[mask] \n\t" ++ "pand %[ftmp5], %[ftmp5], %[mask] \n\t" ++ "pand %[ftmp6], %[ftmp6], %[mask] \n\t" ++ "pand %[ftmp7], %[ftmp7], %[mask] \n\t" + "paddh %[ftmp0], %[ftmp0], %[A] \n\t" + "paddh %[ftmp1], %[ftmp1], %[B] \n\t" + "paddh %[ftmp2], %[ftmp2], %[C] \n\t" +@@ -689,7 +689,7 @@ void ff_vp3_idct_dc_add_mmi(uint8_t *dest, ptrdiff_t line_size, int16_t *block) + double ftmp[7]; + uint64_t tmp; + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "mtc1 %[dc], %[ftmp5] \n\t" + "pshufh %[ftmp5], %[ftmp5], %[ftmp0] \n\t" + "li %[tmp0], 0x08 \n\t" +@@ -734,10 +734,10 @@ void ff_put_no_rnd_pixels_l2_mmi(uint8_t *dst, const uint8_t *src1, + "gsldrc1 %[ftmp1], 0x00(%[src1]) \n\t" + "gsldlc1 %[ftmp2], 0x07(%[src2]) \n\t" + "gsldrc1 %[ftmp2], 0x00(%[src2]) \n\t" +- "xor %[ftmp3], %[ftmp1], %[ftmp2] \n\t" +- "and %[ftmp3], %[ftmp3], %[ftmp4] \n\t" ++ "pxor %[ftmp3], %[ftmp1], %[ftmp2] \n\t" ++ "pand %[ftmp3], %[ftmp3], %[ftmp4] \n\t" + "psrlw %[ftmp3], %[ftmp3], %[ftmp5] \n\t" +- "and %[ftmp6], %[ftmp1], %[ftmp2] \n\t" ++ "pand %[ftmp6], %[ftmp1], %[ftmp2] \n\t" + "paddw %[ftmp3], %[ftmp3], %[ftmp6] \n\t" + "sdc1 %[ftmp3], 0x00(%[dst]) \n\t" + PTR_ADDU "%[src1], %[src1], %[stride] \n\t" +diff --git a/libavcodec/mips/vp8dsp_mmi.c b/libavcodec/mips/vp8dsp_mmi.c +index bd80aa1445..20632c68c7 100644 +--- a/libavcodec/mips/vp8dsp_mmi.c ++++ b/libavcodec/mips/vp8dsp_mmi.c +@@ -36,10 +36,10 @@ + "pcmpeqb %[db_1], "#src1", "#src2" \n\t" \ + "pmaxub %[db_2], "#src1", "#src2" \n\t" \ + "pcmpeqb %[db_2], %[db_2], "#src1" \n\t" \ +- "xor "#dst", %[db_2], %[db_1] \n\t" ++ "pxor "#dst", %[db_2], %[db_1] \n\t" + + #define MMI_BTOH(dst_l, dst_r, src) \ +- "xor %[db_1], %[db_1], %[db_1] \n\t" \ ++ "pxor %[db_1], %[db_1], %[db_1] \n\t" \ + "pcmpgtb %[db_2], %[db_1], "#src" \n\t" \ + "punpcklbh "#dst_r", "#src", %[db_2] \n\t" \ + "punpckhbh "#dst_l", "#src", %[db_2] \n\t" +@@ -82,17 +82,17 @@ + "punpcklwd %[ftmp3], %[ftmp3], %[ftmp3] \n\t" \ + MMI_PCMPGTUB(%[mask], %[mask], %[ftmp3]) \ + "pcmpeqw %[ftmp3], %[ftmp3], %[ftmp3] \n\t" \ +- "xor %[mask], %[mask], %[ftmp3] \n\t" \ ++ "pxor %[mask], %[mask], %[ftmp3] \n\t" \ + /* VP8_MBFILTER */ \ + "li %[tmp0], 0x80808080 \n\t" \ + "dmtc1 %[tmp0], %[ftmp7] \n\t" \ + "punpcklwd %[ftmp7], %[ftmp7], %[ftmp7] \n\t" \ +- "xor %[p2], %[p2], %[ftmp7] \n\t" \ +- "xor %[p1], %[p1], %[ftmp7] \n\t" \ +- "xor %[p0], %[p0], %[ftmp7] \n\t" \ +- "xor %[q0], %[q0], %[ftmp7] \n\t" \ +- "xor %[q1], %[q1], %[ftmp7] \n\t" \ +- "xor %[q2], %[q2], %[ftmp7] \n\t" \ ++ "pxor %[p2], %[p2], %[ftmp7] \n\t" \ ++ "pxor %[p1], %[p1], %[ftmp7] \n\t" \ ++ "pxor %[p0], %[p0], %[ftmp7] \n\t" \ ++ "pxor %[q0], %[q0], %[ftmp7] \n\t" \ ++ "pxor %[q1], %[q1], %[ftmp7] \n\t" \ ++ "pxor %[q2], %[q2], %[ftmp7] \n\t" \ + "psubsb %[ftmp4], %[p1], %[q1] \n\t" \ + "psubb %[ftmp5], %[q0], %[p0] \n\t" \ + MMI_BTOH(%[ftmp1], %[ftmp0], %[ftmp5]) \ +@@ -107,8 +107,8 @@ + "paddh %[ftmp1], %[ftmp3], %[ftmp1] \n\t" \ + /* Combine left and right part */ \ + "packsshb %[ftmp1], %[ftmp0], %[ftmp1] \n\t" \ +- "and %[ftmp1], %[ftmp1], %[mask] \n\t" \ +- "and %[ftmp2], %[ftmp1], %[hev] \n\t" \ ++ "pand %[ftmp1], %[ftmp1], %[mask] \n\t" \ ++ "pand %[ftmp2], %[ftmp1], %[hev] \n\t" \ + "li %[tmp0], 0x04040404 \n\t" \ + "dmtc1 %[tmp0], %[ftmp0] \n\t" \ + "punpcklwd %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ +@@ -127,8 +127,8 @@ + "paddsb %[p0], %[p0], %[ftmp4] \n\t" \ + /* filt_val &= ~hev */ \ + "pcmpeqw %[ftmp0], %[ftmp0], %[ftmp0] \n\t" \ +- "xor %[hev], %[hev], %[ftmp0] \n\t" \ +- "and %[ftmp1], %[ftmp1], %[hev] \n\t" \ ++ "pxor %[hev], %[hev], %[ftmp0] \n\t" \ ++ "pand %[ftmp1], %[ftmp1], %[hev] \n\t" \ + MMI_BTOH(%[ftmp5], %[ftmp6], %[ftmp1]) \ + "li %[tmp0], 0x07 \n\t" \ + "dmtc1 %[tmp0], %[ftmp2] \n\t" \ +@@ -149,9 +149,9 @@ + /* Combine left and right part */ \ + "packsshb %[ftmp4], %[ftmp3], %[ftmp4] \n\t" \ + "psubsb %[q0], %[q0], %[ftmp4] \n\t" \ +- "xor %[q0], %[q0], %[ftmp7] \n\t" \ ++ "pxor %[q0], %[q0], %[ftmp7] \n\t" \ + "paddsb %[p0], %[p0], %[ftmp4] \n\t" \ +- "xor %[p0], %[p0], %[ftmp7] \n\t" \ ++ "pxor %[p0], %[p0], %[ftmp7] \n\t" \ + "li %[tmp0], 0x00120012 \n\t" \ + "dmtc1 %[tmp0], %[ftmp1] \n\t" \ + "punpcklwd %[ftmp1], %[ftmp1], %[ftmp1] \n\t" \ +@@ -166,9 +166,9 @@ + /* Combine left and right part */ \ + "packsshb %[ftmp4], %[ftmp3], %[ftmp4] \n\t" \ + "psubsb %[q1], %[q1], %[ftmp4] \n\t" \ +- "xor %[q1], %[q1], %[ftmp7] \n\t" \ ++ "pxor %[q1], %[q1], %[ftmp7] \n\t" \ + "paddsb %[p1], %[p1], %[ftmp4] \n\t" \ +- "xor %[p1], %[p1], %[ftmp7] \n\t" \ ++ "pxor %[p1], %[p1], %[ftmp7] \n\t" \ + "li %[tmp0], 0x03 \n\t" \ + "dmtc1 %[tmp0], %[ftmp1] \n\t" \ + /* Right part */ \ +@@ -184,9 +184,9 @@ + /* Combine left and right part */ \ + "packsshb %[ftmp4], %[ftmp3], %[ftmp4] \n\t" \ + "psubsb %[q2], %[q2], %[ftmp4] \n\t" \ +- "xor %[q2], %[q2], %[ftmp7] \n\t" \ ++ "pxor %[q2], %[q2], %[ftmp7] \n\t" \ + "paddsb %[p2], %[p2], %[ftmp4] \n\t" \ +- "xor %[p2], %[p2], %[ftmp7] \n\t" ++ "pxor %[p2], %[p2], %[ftmp7] \n\t" + + #define PUT_VP8_EPEL4_H6_MMI(src, dst) \ + MMI_ULWC1(%[ftmp1], src, 0x00) \ +@@ -1019,7 +1019,7 @@ void ff_vp8_luma_dc_wht_mmi(int16_t block[4][4][16], int16_t dc[16]) + block[3][3][0] = (dc[12] - dc[15] + 3 - dc[13] + dc[14]) >> 3; + + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + MMI_SDC1(%[ftmp0], %[dc], 0x00) + MMI_SDC1(%[ftmp0], %[dc], 0x08) + MMI_SDC1(%[ftmp0], %[dc], 0x10) +@@ -1126,15 +1126,17 @@ void ff_vp8_luma_dc_wht_dc_mmi(int16_t block[4][4][16], int16_t dc[16]) + void ff_vp8_idct_add_mmi(uint8_t *dst, int16_t block[16], ptrdiff_t stride) + { + #if 1 +- DECLARE_ALIGNED(8, const uint64_t, ff_ph_4e7b) = {0x4e7b4e7b4e7b4e7bULL}; +- DECLARE_ALIGNED(8, const uint64_t, ff_ph_22a3) = {0x22a322a322a322a3ULL}; + double ftmp[12]; + uint32_t tmp[1]; ++ union av_intfloat64 ff_ph_4e7b_u; ++ union av_intfloat64 ff_ph_22a3_u; + DECLARE_VAR_LOW32; + DECLARE_VAR_ALL64; ++ ff_ph_4e7b_u.i = 0x4e7b4e7b4e7b4e7bULL; ++ ff_ph_22a3_u.i = 0x22a322a322a322a3ULL; + + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + MMI_LDC1(%[ftmp1], %[block], 0x00) + MMI_LDC1(%[ftmp2], %[block], 0x08) + MMI_LDC1(%[ftmp3], %[block], 0x10) +@@ -1251,8 +1253,8 @@ void ff_vp8_idct_add_mmi(uint8_t *dst, int16_t block[16], ptrdiff_t stride) + [tmp0]"=&r"(tmp[0]) + : [dst0]"r"(dst), [dst1]"r"(dst+stride), + [dst2]"r"(dst+2*stride), [dst3]"r"(dst+3*stride), +- [block]"r"(block), [ff_pw_4]"f"(ff_pw_4), +- [ff_ph_4e7b]"f"(ff_ph_4e7b), [ff_ph_22a3]"f"(ff_ph_22a3) ++ [block]"r"(block), [ff_pw_4]"f"(ff_pw_4.f), ++ [ff_ph_4e7b]"f"(ff_ph_4e7b_u.f), [ff_ph_22a3]"f"(ff_ph_22a3_u.f) + : "memory" + ); + #else +@@ -1300,7 +1302,7 @@ void ff_vp8_idct_dc_add_mmi(uint8_t *dst, int16_t block[16], ptrdiff_t stride) + block[0] = 0; + + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "mtc1 %[dc], %[ftmp5] \n\t" + MMI_LWC1(%[ftmp1], %[dst0], 0x00) + MMI_LWC1(%[ftmp2], %[dst1], 0x00) +@@ -1593,8 +1595,16 @@ void ff_put_vp8_epel16_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + const uint64_t *filter = fourtap_subpel_filters[mx - 1]; + double ftmp[9]; + uint32_t tmp[1]; ++ union av_intfloat64 filter1; ++ union av_intfloat64 filter2; ++ union av_intfloat64 filter3; ++ union av_intfloat64 filter4; + mips_reg src1, dst1; + DECLARE_VAR_ALL64; ++ filter1.i = filter[1]; ++ filter2.i = filter[2]; ++ filter3.i = filter[3]; ++ filter4.i = filter[4]; + + /* + dst[0] = cm[(filter[2] * src[0] - filter[1] * src[-1] + filter[3] * src[1] - filter[4] * src[2] + 64) >> 7]; +@@ -1616,7 +1626,7 @@ void ff_put_vp8_epel16_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + dst[15] = cm[(filter[2] * src[15] - filter[1] * src[14] + filter[3] * src[16] - filter[4] * src[17] + 64) >> 7]; + */ + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "li %[tmp0], 0x07 \n\t" + "mtc1 %[tmp0], %[ftmp4] \n\t" + +@@ -1642,11 +1652,11 @@ void ff_put_vp8_epel16_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + [dst1]"=&r"(dst1), [src1]"=&r"(src1), + [h]"+&r"(h), + [dst]"+&r"(dst), [src]"+&r"(src) +- : [ff_pw_64]"f"(ff_pw_64), ++ : [ff_pw_64]"f"(ff_pw_64.f), + [srcstride]"r"((mips_reg)srcstride), + [dststride]"r"((mips_reg)dststride), +- [filter1]"f"(filter[1]), [filter2]"f"(filter[2]), +- [filter3]"f"(filter[3]), [filter4]"f"(filter[4]) ++ [filter1]"f"(filter1.f), [filter2]"f"(filter2.f), ++ [filter3]"f"(filter3.f), [filter4]"f"(filter4.f) + : "memory" + ); + #else +@@ -1670,7 +1680,16 @@ void ff_put_vp8_epel8_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + const uint64_t *filter = fourtap_subpel_filters[mx - 1]; + double ftmp[9]; + uint32_t tmp[1]; ++ union av_intfloat64 filter1; ++ union av_intfloat64 filter2; ++ union av_intfloat64 filter3; ++ union av_intfloat64 filter4; + DECLARE_VAR_ALL64; ++ filter1.i = filter[1]; ++ filter2.i = filter[2]; ++ filter3.i = filter[3]; ++ filter4.i = filter[4]; ++ + + /* + dst[0] = cm[(filter[2] * src[0] - filter[1] * src[-1] + filter[3] * src[1] - filter[4] * src[2] + 64) >> 7]; +@@ -1683,7 +1702,7 @@ void ff_put_vp8_epel8_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + dst[7] = cm[(filter[2] * src[7] - filter[1] * src[ 6] + filter[3] * src[8] - filter[4] * src[9] + 64) >> 7]; + */ + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "li %[tmp0], 0x07 \n\t" + "mtc1 %[tmp0], %[ftmp4] \n\t" + +@@ -1703,11 +1722,11 @@ void ff_put_vp8_epel8_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + RESTRICT_ASM_ALL64 + [h]"+&r"(h), + [dst]"+&r"(dst), [src]"+&r"(src) +- : [ff_pw_64]"f"(ff_pw_64), ++ : [ff_pw_64]"f"(ff_pw_64.f), + [srcstride]"r"((mips_reg)srcstride), + [dststride]"r"((mips_reg)dststride), +- [filter1]"f"(filter[1]), [filter2]"f"(filter[2]), +- [filter3]"f"(filter[3]), [filter4]"f"(filter[4]) ++ [filter1]"f"(filter1.f), [filter2]"f"(filter2.f), ++ [filter3]"f"(filter3.f), [filter4]"f"(filter4.f) + : "memory" + ); + #else +@@ -1731,7 +1750,15 @@ void ff_put_vp8_epel4_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + const uint64_t *filter = fourtap_subpel_filters[mx - 1]; + double ftmp[6]; + uint32_t tmp[1]; ++ union av_intfloat64 filter1; ++ union av_intfloat64 filter2; ++ union av_intfloat64 filter3; ++ union av_intfloat64 filter4; + DECLARE_VAR_LOW32; ++ filter1.i = filter[1]; ++ filter2.i = filter[2]; ++ filter3.i = filter[3]; ++ filter4.i = filter[4]; + + /* + dst[0] = cm[(filter[2] * src[0] - filter[1] * src[-1] + filter[3] * src[1] - filter[4] * src[2] + 64) >> 7]; +@@ -1740,7 +1767,7 @@ void ff_put_vp8_epel4_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + dst[3] = cm[(filter[2] * src[3] - filter[1] * src[ 2] + filter[3] * src[4] - filter[4] * src[5] + 64) >> 7]; + */ + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "li %[tmp0], 0x07 \n\t" + "mtc1 %[tmp0], %[ftmp4] \n\t" + +@@ -1758,11 +1785,11 @@ void ff_put_vp8_epel4_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + RESTRICT_ASM_LOW32 + [h]"+&r"(h), + [dst]"+&r"(dst), [src]"+&r"(src) +- : [ff_pw_64]"f"(ff_pw_64), ++ : [ff_pw_64]"f"(ff_pw_64.f), + [srcstride]"r"((mips_reg)srcstride), + [dststride]"r"((mips_reg)dststride), +- [filter1]"f"(filter[1]), [filter2]"f"(filter[2]), +- [filter3]"f"(filter[3]), [filter4]"f"(filter[4]) ++ [filter1]"f"(filter1.f), [filter2]"f"(filter2.f), ++ [filter3]"f"(filter3.f), [filter4]"f"(filter4.f) + : "memory" + ); + #else +@@ -1787,7 +1814,19 @@ void ff_put_vp8_epel16_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + double ftmp[9]; + uint32_t tmp[1]; + mips_reg src1, dst1; ++ union av_intfloat64 filter0; ++ union av_intfloat64 filter1; ++ union av_intfloat64 filter2; ++ union av_intfloat64 filter3; ++ union av_intfloat64 filter4; ++ union av_intfloat64 filter5; + DECLARE_VAR_ALL64; ++ filter0.i = filter[0]; ++ filter1.i = filter[1]; ++ filter2.i = filter[2]; ++ filter3.i = filter[3]; ++ filter4.i = filter[4]; ++ filter5.i = filter[5]; + + /* + dst[ 0] = cm[(filter[2]*src[ 0] - filter[1]*src[-1] + filter[0]*src[-2] + filter[3]*src[ 1] - filter[4]*src[ 2] + filter[5]*src[ 3] + 64) >> 7]; +@@ -1809,7 +1848,7 @@ void ff_put_vp8_epel16_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + dst[15] = cm[(filter[2]*src[15] - filter[1]*src[14] + filter[0]*src[13] + filter[3]*src[16] - filter[4]*src[17] + filter[5]*src[18] + 64) >> 7]; + */ + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "li %[tmp0], 0x07 \n\t" + "mtc1 %[tmp0], %[ftmp4] \n\t" + +@@ -1835,12 +1874,12 @@ void ff_put_vp8_epel16_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + [dst1]"=&r"(dst1), [src1]"=&r"(src1), + [h]"+&r"(h), + [dst]"+&r"(dst), [src]"+&r"(src) +- : [ff_pw_64]"f"(ff_pw_64), ++ : [ff_pw_64]"f"(ff_pw_64.f), + [srcstride]"r"((mips_reg)srcstride), + [dststride]"r"((mips_reg)dststride), +- [filter0]"f"(filter[0]), [filter1]"f"(filter[1]), +- [filter2]"f"(filter[2]), [filter3]"f"(filter[3]), +- [filter4]"f"(filter[4]), [filter5]"f"(filter[5]) ++ [filter0]"f"(filter0.f), [filter1]"f"(filter1.f), ++ [filter2]"f"(filter2.f), [filter3]"f"(filter3.f), ++ [filter4]"f"(filter4.f), [filter5]"f"(filter5.f) + : "memory" + ); + #else +@@ -1864,7 +1903,19 @@ void ff_put_vp8_epel8_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + const uint64_t *filter = fourtap_subpel_filters[mx - 1]; + double ftmp[9]; + uint32_t tmp[1]; ++ union av_intfloat64 filter0; ++ union av_intfloat64 filter1; ++ union av_intfloat64 filter2; ++ union av_intfloat64 filter3; ++ union av_intfloat64 filter4; ++ union av_intfloat64 filter5; + DECLARE_VAR_ALL64; ++ filter0.i = filter[0]; ++ filter1.i = filter[1]; ++ filter2.i = filter[2]; ++ filter3.i = filter[3]; ++ filter4.i = filter[4]; ++ filter5.i = filter[5]; + + /* + dst[0] = cm[(filter[2]*src[0] - filter[1]*src[-1] + filter[0]*src[-2] + filter[3]*src[1] - filter[4]*src[2] + filter[5]*src[ 3] + 64) >> 7]; +@@ -1877,7 +1928,7 @@ void ff_put_vp8_epel8_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + dst[7] = cm[(filter[2]*src[7] - filter[1]*src[ 6] + filter[0]*src[ 5] + filter[3]*src[8] - filter[4]*src[9] + filter[5]*src[10] + 64) >> 7]; + */ + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "li %[tmp0], 0x07 \n\t" + "mtc1 %[tmp0], %[ftmp4] \n\t" + +@@ -1897,12 +1948,12 @@ void ff_put_vp8_epel8_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + RESTRICT_ASM_ALL64 + [h]"+&r"(h), + [dst]"+&r"(dst), [src]"+&r"(src) +- : [ff_pw_64]"f"(ff_pw_64), ++ : [ff_pw_64]"f"(ff_pw_64.f), + [srcstride]"r"((mips_reg)srcstride), + [dststride]"r"((mips_reg)dststride), +- [filter0]"f"(filter[0]), [filter1]"f"(filter[1]), +- [filter2]"f"(filter[2]), [filter3]"f"(filter[3]), +- [filter4]"f"(filter[4]), [filter5]"f"(filter[5]) ++ [filter0]"f"(filter0.f), [filter1]"f"(filter1.f), ++ [filter2]"f"(filter2.f), [filter3]"f"(filter3.f), ++ [filter4]"f"(filter4.f), [filter5]"f"(filter5.f) + : "memory" + ); + #else +@@ -1926,7 +1977,19 @@ void ff_put_vp8_epel4_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + const uint64_t *filter = fourtap_subpel_filters[mx - 1]; + double ftmp[6]; + uint32_t tmp[1]; ++ union av_intfloat64 filter0; ++ union av_intfloat64 filter1; ++ union av_intfloat64 filter2; ++ union av_intfloat64 filter3; ++ union av_intfloat64 filter4; ++ union av_intfloat64 filter5; + DECLARE_VAR_LOW32; ++ filter0.i = filter[0]; ++ filter1.i = filter[1]; ++ filter2.i = filter[2]; ++ filter3.i = filter[3]; ++ filter4.i = filter[4]; ++ filter5.i = filter[5]; + + /* + dst[0] = cm[(filter[2]*src[0] - filter[1]*src[-1] + filter[0]*src[-2] + filter[3]*src[1] - filter[4]*src[2] + filter[5]*src[ 3] + 64) >> 7]; +@@ -1935,7 +1998,7 @@ void ff_put_vp8_epel4_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + dst[3] = cm[(filter[2]*src[3] - filter[1]*src[ 2] + filter[0]*src[ 1] + filter[3]*src[4] - filter[4]*src[5] + filter[5]*src[ 6] + 64) >> 7]; + */ + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "li %[tmp0], 0x07 \n\t" + "mtc1 %[tmp0], %[ftmp4] \n\t" + +@@ -1953,12 +2016,12 @@ void ff_put_vp8_epel4_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + RESTRICT_ASM_LOW32 + [h]"+&r"(h), + [dst]"+&r"(dst), [src]"+&r"(src) +- : [ff_pw_64]"f"(ff_pw_64), ++ : [ff_pw_64]"f"(ff_pw_64.f), + [srcstride]"r"((mips_reg)srcstride), + [dststride]"r"((mips_reg)dststride), +- [filter0]"f"(filter[0]), [filter1]"f"(filter[1]), +- [filter2]"f"(filter[2]), [filter3]"f"(filter[3]), +- [filter4]"f"(filter[4]), [filter5]"f"(filter[5]) ++ [filter0]"f"(filter0.f), [filter1]"f"(filter1.f), ++ [filter2]"f"(filter2.f), [filter3]"f"(filter3.f), ++ [filter4]"f"(filter4.f), [filter5]"f"(filter5.f) + : "memory" + ); + #else +@@ -1983,7 +2046,15 @@ void ff_put_vp8_epel16_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + double ftmp[9]; + uint32_t tmp[1]; + mips_reg src0, src1, dst0; ++ union av_intfloat64 filter1; ++ union av_intfloat64 filter2; ++ union av_intfloat64 filter3; ++ union av_intfloat64 filter4; + DECLARE_VAR_ALL64; ++ filter1.i = filter[1]; ++ filter2.i = filter[2]; ++ filter3.i = filter[3]; ++ filter4.i = filter[4]; + + /* + dst[0] = cm[(filter[2] * src[0] - filter[1] * src[ -srcstride] + filter[3] * src[ srcstride] - filter[4] * src[ 2*srcstride] + 64) >> 7]; +@@ -2005,7 +2076,7 @@ void ff_put_vp8_epel16_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + dst[15] = cm[(filter[2] * src[15] - filter[1] * src[15-srcstride] + filter[3] * src[15+srcstride] - filter[4] * src[15+2*srcstride] + 64) >> 7]; + */ + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "li %[tmp0], 0x07 \n\t" + "mtc1 %[tmp0], %[ftmp4] \n\t" + +@@ -2032,11 +2103,11 @@ void ff_put_vp8_epel16_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + [src1]"=&r"(src1), + [h]"+&r"(h), + [dst]"+&r"(dst), [src]"+&r"(src) +- : [ff_pw_64]"f"(ff_pw_64), ++ : [ff_pw_64]"f"(ff_pw_64.f), + [srcstride]"r"((mips_reg)srcstride), + [dststride]"r"((mips_reg)dststride), +- [filter1]"f"(filter[1]), [filter2]"f"(filter[2]), +- [filter3]"f"(filter[3]), [filter4]"f"(filter[4]) ++ [filter1]"f"(filter1.f), [filter2]"f"(filter2.f), ++ [filter3]"f"(filter3.f), [filter4]"f"(filter4.f) + : "memory" + ); + #else +@@ -2061,7 +2132,15 @@ void ff_put_vp8_epel8_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + double ftmp[9]; + uint32_t tmp[1]; + mips_reg src1; ++ union av_intfloat64 filter1; ++ union av_intfloat64 filter2; ++ union av_intfloat64 filter3; ++ union av_intfloat64 filter4; + DECLARE_VAR_ALL64; ++ filter1.i = filter[1]; ++ filter2.i = filter[2]; ++ filter3.i = filter[3]; ++ filter4.i = filter[4]; + + /* + dst[0] = cm[(filter[2] * src[0] - filter[1] * src[ -srcstride] + filter[3] * src[ srcstride] - filter[4] * src[ 2*srcstride] + 64) >> 7]; +@@ -2074,7 +2153,7 @@ void ff_put_vp8_epel8_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + dst[7] = cm[(filter[2] * src[7] - filter[1] * src[7-srcstride] + filter[3] * src[7+srcstride] - filter[4] * src[7+2*srcstride] + 64) >> 7]; + */ + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "li %[tmp0], 0x07 \n\t" + "mtc1 %[tmp0], %[ftmp4] \n\t" + +@@ -2095,11 +2174,11 @@ void ff_put_vp8_epel8_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + [src1]"=&r"(src1), + [h]"+&r"(h), + [dst]"+&r"(dst), [src]"+&r"(src) +- : [ff_pw_64]"f"(ff_pw_64), ++ : [ff_pw_64]"f"(ff_pw_64.f), + [srcstride]"r"((mips_reg)srcstride), + [dststride]"r"((mips_reg)dststride), +- [filter1]"f"(filter[1]), [filter2]"f"(filter[2]), +- [filter3]"f"(filter[3]), [filter4]"f"(filter[4]) ++ [filter1]"f"(filter1.f), [filter2]"f"(filter2.f), ++ [filter3]"f"(filter3.f), [filter4]"f"(filter4.f) + : "memory" + ); + #else +@@ -2124,7 +2203,15 @@ void ff_put_vp8_epel4_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + double ftmp[6]; + uint32_t tmp[1]; + mips_reg src1; ++ union av_intfloat64 filter1; ++ union av_intfloat64 filter2; ++ union av_intfloat64 filter3; ++ union av_intfloat64 filter4; + DECLARE_VAR_LOW32; ++ filter1.i = filter[1]; ++ filter2.i = filter[2]; ++ filter3.i = filter[3]; ++ filter4.i = filter[4]; + + /* + dst[0] = cm[(filter[2] * src[0] - filter[1] * src[ -srcstride] + filter[3] * src[ srcstride] - filter[4] * src[ 2*srcstride] + 64) >> 7]; +@@ -2133,7 +2220,7 @@ void ff_put_vp8_epel4_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + dst[3] = cm[(filter[2] * src[3] - filter[1] * src[3-srcstride] + filter[3] * src[3+srcstride] - filter[4] * src[3+2*srcstride] + 64) >> 7]; + */ + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "li %[tmp0], 0x07 \n\t" + "mtc1 %[tmp0], %[ftmp4] \n\t" + +@@ -2152,11 +2239,11 @@ void ff_put_vp8_epel4_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + [src1]"=&r"(src1), + [h]"+&r"(h), + [dst]"+&r"(dst), [src]"+&r"(src) +- : [ff_pw_64]"f"(ff_pw_64), ++ : [ff_pw_64]"f"(ff_pw_64.f), + [srcstride]"r"((mips_reg)srcstride), + [dststride]"r"((mips_reg)dststride), +- [filter1]"f"(filter[1]), [filter2]"f"(filter[2]), +- [filter3]"f"(filter[3]), [filter4]"f"(filter[4]) ++ [filter1]"f"(filter1.f), [filter2]"f"(filter2.f), ++ [filter3]"f"(filter3.f), [filter4]"f"(filter4.f) + : "memory" + ); + #else +@@ -2181,7 +2268,19 @@ void ff_put_vp8_epel16_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + double ftmp[9]; + uint32_t tmp[1]; + mips_reg src0, src1, dst0; ++ union av_intfloat64 filter0; ++ union av_intfloat64 filter1; ++ union av_intfloat64 filter2; ++ union av_intfloat64 filter3; ++ union av_intfloat64 filter4; ++ union av_intfloat64 filter5; + DECLARE_VAR_ALL64; ++ filter0.i = filter[0]; ++ filter1.i = filter[1]; ++ filter2.i = filter[2]; ++ filter3.i = filter[3]; ++ filter4.i = filter[4]; ++ filter5.i = filter[5]; + + /* + dst[0] = cm[(filter[2]*src[0] - filter[1]*src[0-srcstride] + filter[0]*src[0-2*srcstride] + filter[3]*src[0+srcstride] - filter[4]*src[0+2*srcstride] + filter[5]*src[0+3*srcstride] + 64) >> 7]; +@@ -2203,7 +2302,7 @@ void ff_put_vp8_epel16_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + dst[15] = cm[(filter[2]*src[15] - filter[1]*src[15-srcstride] + filter[0]*src[15-2*srcstride] + filter[3]*src[15+srcstride] - filter[4]*src[15+2*srcstride] + filter[5]*src[15+3*srcstride] + 64) >> 7]; + */ + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "li %[tmp0], 0x07 \n\t" + "mtc1 %[tmp0], %[ftmp4] \n\t" + +@@ -2230,12 +2329,12 @@ void ff_put_vp8_epel16_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + [src1]"=&r"(src1), + [h]"+&r"(h), + [dst]"+&r"(dst), [src]"+&r"(src) +- : [ff_pw_64]"f"(ff_pw_64), ++ : [ff_pw_64]"f"(ff_pw_64.f), + [srcstride]"r"((mips_reg)srcstride), + [dststride]"r"((mips_reg)dststride), +- [filter0]"f"(filter[0]), [filter1]"f"(filter[1]), +- [filter2]"f"(filter[2]), [filter3]"f"(filter[3]), +- [filter4]"f"(filter[4]), [filter5]"f"(filter[5]) ++ [filter0]"f"(filter0.f), [filter1]"f"(filter1.f), ++ [filter2]"f"(filter2.f), [filter3]"f"(filter3.f), ++ [filter4]"f"(filter4.f), [filter5]"f"(filter5.f) + : "memory" + ); + #else +@@ -2260,7 +2359,19 @@ void ff_put_vp8_epel8_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + double ftmp[9]; + uint32_t tmp[1]; + mips_reg src1; ++ union av_intfloat64 filter0; ++ union av_intfloat64 filter1; ++ union av_intfloat64 filter2; ++ union av_intfloat64 filter3; ++ union av_intfloat64 filter4; ++ union av_intfloat64 filter5; + DECLARE_VAR_ALL64; ++ filter0.i = filter[0]; ++ filter1.i = filter[1]; ++ filter2.i = filter[2]; ++ filter3.i = filter[3]; ++ filter4.i = filter[4]; ++ filter5.i = filter[5]; + + /* + dst[0] = cm[(filter[2]*src[0] - filter[1]*src[0-srcstride] + filter[0]*src[0-2*srcstride] + filter[3]*src[0+srcstride] - filter[4]*src[0+2*srcstride] + filter[5]*src[0+3*srcstride] + 64) >> 7]; +@@ -2273,7 +2384,7 @@ void ff_put_vp8_epel8_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + dst[7] = cm[(filter[2]*src[7] - filter[1]*src[7-srcstride] + filter[0]*src[7-2*srcstride] + filter[3]*src[7+srcstride] - filter[4]*src[7+2*srcstride] + filter[5]*src[7+3*srcstride] + 64) >> 7]; + */ + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "li %[tmp0], 0x07 \n\t" + "mtc1 %[tmp0], %[ftmp4] \n\t" + +@@ -2294,12 +2405,12 @@ void ff_put_vp8_epel8_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + [src1]"=&r"(src1), + [h]"+&r"(h), + [dst]"+&r"(dst), [src]"+&r"(src) +- : [ff_pw_64]"f"(ff_pw_64), ++ : [ff_pw_64]"f"(ff_pw_64.f), + [srcstride]"r"((mips_reg)srcstride), + [dststride]"r"((mips_reg)dststride), +- [filter0]"f"(filter[0]), [filter1]"f"(filter[1]), +- [filter2]"f"(filter[2]), [filter3]"f"(filter[3]), +- [filter4]"f"(filter[4]), [filter5]"f"(filter[5]) ++ [filter0]"f"(filter0.f), [filter1]"f"(filter1.f), ++ [filter2]"f"(filter2.f), [filter3]"f"(filter3.f), ++ [filter4]"f"(filter4.f), [filter5]"f"(filter5.f) + : "memory" + ); + #else +@@ -2324,7 +2435,19 @@ void ff_put_vp8_epel4_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + double ftmp[6]; + uint32_t tmp[1]; + mips_reg src1; ++ union av_intfloat64 filter0; ++ union av_intfloat64 filter1; ++ union av_intfloat64 filter2; ++ union av_intfloat64 filter3; ++ union av_intfloat64 filter4; ++ union av_intfloat64 filter5; + DECLARE_VAR_LOW32; ++ filter0.i = filter[0]; ++ filter1.i = filter[1]; ++ filter2.i = filter[2]; ++ filter3.i = filter[3]; ++ filter4.i = filter[4]; ++ filter5.i = filter[5]; + + /* + dst[0] = cm[(filter[2]*src[0] - filter[1]*src[0-srcstride] + filter[0]*src[0-2*srcstride] + filter[3]*src[0+srcstride] - filter[4]*src[0+2*srcstride] + filter[5]*src[0+3*srcstride] + 64) >> 7]; +@@ -2333,7 +2456,7 @@ void ff_put_vp8_epel4_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + dst[3] = cm[(filter[2]*src[3] - filter[1]*src[3-srcstride] + filter[0]*src[3-2*srcstride] + filter[3]*src[3+srcstride] - filter[4]*src[3+2*srcstride] + filter[5]*src[3+3*srcstride] + 64) >> 7]; + */ + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "li %[tmp0], 0x07 \n\t" + "mtc1 %[tmp0], %[ftmp4] \n\t" + +@@ -2352,12 +2475,12 @@ void ff_put_vp8_epel4_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, + [src1]"=&r"(src1), + [h]"+&r"(h), + [dst]"+&r"(dst), [src]"+&r"(src) +- : [ff_pw_64]"f"(ff_pw_64), ++ : [ff_pw_64]"f"(ff_pw_64.f), + [srcstride]"r"((mips_reg)srcstride), + [dststride]"r"((mips_reg)dststride), +- [filter0]"f"(filter[0]), [filter1]"f"(filter[1]), +- [filter2]"f"(filter[2]), [filter3]"f"(filter[3]), +- [filter4]"f"(filter[4]), [filter5]"f"(filter[5]) ++ [filter0]"f"(filter0.f), [filter1]"f"(filter1.f), ++ [filter2]"f"(filter2.f), [filter3]"f"(filter3.f), ++ [filter4]"f"(filter4.f), [filter5]"f"(filter5.f) + : "memory" + ); + #else +@@ -2845,11 +2968,13 @@ void ff_put_vp8_bilinear16_h_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src, + ptrdiff_t sstride, int h, int mx, int my) + { + #if 1 +- int a = 8 - mx, b = mx; ++ union mmi_intfloat64 a, b; + double ftmp[7]; + uint32_t tmp[1]; + mips_reg dst0, src0; + DECLARE_VAR_ALL64; ++ a.i = 8 - mx; ++ b.i = mx; + + /* + dst[0] = (a * src[0] + b * src[1] + 4) >> 3; +@@ -2871,7 +2996,7 @@ void ff_put_vp8_bilinear16_h_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src, + dst[15] = (a * src[15] + b * src[16] + 4) >> 3; + */ + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "li %[tmp0], 0x03 \n\t" + "mtc1 %[tmp0], %[ftmp4] \n\t" + "pshufh %[a], %[a], %[ftmp0] \n\t" +@@ -2898,10 +3023,10 @@ void ff_put_vp8_bilinear16_h_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src, + [dst0]"=&r"(dst0), [src0]"=&r"(src0), + [h]"+&r"(h), + [dst]"+&r"(dst), [src]"+&r"(src), +- [a]"+&f"(a), [b]"+&f"(b) ++ [a]"+&f"(a.f), [b]"+&f"(b.f) + : [sstride]"r"((mips_reg)sstride), + [dstride]"r"((mips_reg)dstride), +- [ff_pw_4]"f"(ff_pw_4) ++ [ff_pw_4]"f"(ff_pw_4.f) + : "memory" + ); + #else +@@ -2921,11 +3046,13 @@ void ff_put_vp8_bilinear16_v_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src, + ptrdiff_t sstride, int h, int mx, int my) + { + #if 1 +- int c = 8 - my, d = my; ++ union mmi_intfloat64 c, d; + double ftmp[7]; + uint32_t tmp[1]; + mips_reg src0, src1, dst0; + DECLARE_VAR_ALL64; ++ c.i = 8 - my; ++ d.i = my; + + /* + dst[0] = (c * src[0] + d * src[ sstride] + 4) >> 3; +@@ -2938,7 +3065,7 @@ void ff_put_vp8_bilinear16_v_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src, + dst[7] = (c * src[7] + d * src[7 + sstride] + 4) >> 3; + */ + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "li %[tmp0], 0x03 \n\t" + "mtc1 %[tmp0], %[ftmp4] \n\t" + "pshufh %[c], %[c], %[ftmp0] \n\t" +@@ -2966,10 +3093,10 @@ void ff_put_vp8_bilinear16_v_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src, + [src1]"=&r"(src1), + [h]"+&r"(h), + [dst]"+&r"(dst), [src]"+&r"(src), +- [c]"+&f"(c), [d]"+&f"(d) ++ [c]"+&f"(c.f), [d]"+&f"(d.f) + : [sstride]"r"((mips_reg)sstride), + [dstride]"r"((mips_reg)dstride), +- [ff_pw_4]"f"(ff_pw_4) ++ [ff_pw_4]"f"(ff_pw_4.f) + : "memory" + ); + #else +@@ -3023,10 +3150,12 @@ void ff_put_vp8_bilinear8_h_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src, + ptrdiff_t sstride, int h, int mx, int my) + { + #if 1 +- int a = 8 - mx, b = mx; ++ union mmi_intfloat64 a, b; + double ftmp[7]; + uint32_t tmp[1]; + DECLARE_VAR_ALL64; ++ a.i = 8 - mx; ++ b.i = mx; + + /* + dst[0] = (a * src[0] + b * src[1] + 4) >> 3; +@@ -3039,7 +3168,7 @@ void ff_put_vp8_bilinear8_h_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src, + dst[7] = (a * src[7] + b * src[8] + 4) >> 3; + */ + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "li %[tmp0], 0x03 \n\t" + "mtc1 %[tmp0], %[ftmp4] \n\t" + "pshufh %[a], %[a], %[ftmp0] \n\t" +@@ -3060,10 +3189,10 @@ void ff_put_vp8_bilinear8_h_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src, + RESTRICT_ASM_ALL64 + [h]"+&r"(h), + [dst]"+&r"(dst), [src]"+&r"(src), +- [a]"+&f"(a), [b]"+&f"(b) ++ [a]"+&f"(a.f), [b]"+&f"(b.f) + : [sstride]"r"((mips_reg)sstride), + [dstride]"r"((mips_reg)dstride), +- [ff_pw_4]"f"(ff_pw_4) ++ [ff_pw_4]"f"(ff_pw_4.f) + : "memory" + ); + #else +@@ -3083,11 +3212,13 @@ void ff_put_vp8_bilinear8_v_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src, + ptrdiff_t sstride, int h, int mx, int my) + { + #if 1 +- int c = 8 - my, d = my; ++ union mmi_intfloat64 c, d; + double ftmp[7]; + uint32_t tmp[1]; + mips_reg src1; + DECLARE_VAR_ALL64; ++ c.i = 8 - my; ++ d.i = my; + + /* + dst[0] = (c * src[0] + d * src[ sstride] + 4) >> 3; +@@ -3100,7 +3231,7 @@ void ff_put_vp8_bilinear8_v_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src, + dst[7] = (c * src[7] + d * src[7 + sstride] + 4) >> 3; + */ + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "li %[tmp0], 0x03 \n\t" + "mtc1 %[tmp0], %[ftmp4] \n\t" + "pshufh %[c], %[c], %[ftmp0] \n\t" +@@ -3122,10 +3253,10 @@ void ff_put_vp8_bilinear8_v_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src, + [src1]"=&r"(src1), + [h]"+&r"(h), + [dst]"+&r"(dst), [src]"+&r"(src), +- [c]"+&f"(c), [d]"+&f"(d) ++ [c]"+&f"(c.f), [d]"+&f"(d.f) + : [sstride]"r"((mips_reg)sstride), + [dstride]"r"((mips_reg)dstride), +- [ff_pw_4]"f"(ff_pw_4) ++ [ff_pw_4]"f"(ff_pw_4.f) + : "memory" + ); + #else +@@ -3179,11 +3310,13 @@ void ff_put_vp8_bilinear4_h_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src, + ptrdiff_t sstride, int h, int mx, int my) + { + #if 1 +- int a = 8 - mx, b = mx; ++ union mmi_intfloat64 a, b; + double ftmp[5]; + uint32_t tmp[1]; + DECLARE_VAR_LOW32; + DECLARE_VAR_ALL64; ++ a.i = 8 - mx; ++ b.i = mx; + + /* + dst[0] = (a * src[0] + b * src[1] + 4) >> 3; +@@ -3192,7 +3325,7 @@ void ff_put_vp8_bilinear4_h_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src, + dst[3] = (a * src[3] + b * src[4] + 4) >> 3; + */ + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "li %[tmp0], 0x03 \n\t" + "mtc1 %[tmp0], %[ftmp4] \n\t" + "pshufh %[a], %[a], %[ftmp0] \n\t" +@@ -3213,10 +3346,10 @@ void ff_put_vp8_bilinear4_h_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src, + RESTRICT_ASM_ALL64 + [h]"+&r"(h), + [dst]"+&r"(dst), [src]"+&r"(src), +- [a]"+&f"(a), [b]"+&f"(b) ++ [a]"+&f"(a.f), [b]"+&f"(b.f) + : [sstride]"r"((mips_reg)sstride), + [dstride]"r"((mips_reg)dstride), +- [ff_pw_4]"f"(ff_pw_4) ++ [ff_pw_4]"f"(ff_pw_4.f) + : "memory" + ); + #else +@@ -3236,12 +3369,14 @@ void ff_put_vp8_bilinear4_v_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src, + ptrdiff_t sstride, int h, int mx, int my) + { + #if 1 +- int c = 8 - my, d = my; ++ union mmi_intfloat64 c, d; + double ftmp[7]; + uint32_t tmp[1]; + mips_reg src1; + DECLARE_VAR_LOW32; + DECLARE_VAR_ALL64; ++ c.i = 8 - my; ++ d.i = my; + + /* + dst[0] = (c * src[0] + d * src[ sstride] + 4) >> 3; +@@ -3250,7 +3385,7 @@ void ff_put_vp8_bilinear4_v_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src, + dst[3] = (c * src[3] + d * src[3 + sstride] + 4) >> 3; + */ + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "li %[tmp0], 0x03 \n\t" + "mtc1 %[tmp0], %[ftmp4] \n\t" + "pshufh %[c], %[c], %[ftmp0] \n\t" +@@ -3272,10 +3407,10 @@ void ff_put_vp8_bilinear4_v_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src, + [src1]"=&r"(src1), + [h]"+&r"(h), + [dst]"+&r"(dst), [src]"+&r"(src), +- [c]"+&f"(c), [d]"+&f"(d) ++ [c]"+&f"(c.f), [d]"+&f"(d.f) + : [sstride]"r"((mips_reg)sstride), + [dstride]"r"((mips_reg)dstride), +- [ff_pw_4]"f"(ff_pw_4) ++ [ff_pw_4]"f"(ff_pw_4.f) + : "memory" + ); + #else +diff --git a/libavcodec/mips/vp9_mc_mmi.c b/libavcodec/mips/vp9_mc_mmi.c +index e7a83875b9..812f7a6994 100644 +--- a/libavcodec/mips/vp9_mc_mmi.c ++++ b/libavcodec/mips/vp9_mc_mmi.c +@@ -82,10 +82,10 @@ static void convolve_horiz_mmi(const uint8_t *src, int32_t src_stride, + dst_stride -= w; + __asm__ volatile ( + "move %[tmp1], %[width] \n\t" +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "gsldlc1 %[filter1], 0x03(%[filter]) \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "gsldlc1 %[filter1], 0x07(%[filter]) \n\t" + "gsldrc1 %[filter1], 0x00(%[filter]) \n\t" +- "gsldlc1 %[filter2], 0x0b(%[filter]) \n\t" ++ "gsldlc1 %[filter2], 0x0f(%[filter]) \n\t" + "gsldrc1 %[filter2], 0x08(%[filter]) \n\t" + "li %[tmp0], 0x07 \n\t" + "dmtc1 %[tmp0], %[ftmp13] \n\t" +@@ -157,10 +157,10 @@ static void convolve_vert_mmi(const uint8_t *src, int32_t src_stride, + dst_stride -= w; + + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "gsldlc1 %[ftmp4], 0x03(%[filter]) \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "gsldlc1 %[ftmp4], 0x07(%[filter]) \n\t" + "gsldrc1 %[ftmp4], 0x00(%[filter]) \n\t" +- "gsldlc1 %[ftmp5], 0x0b(%[filter]) \n\t" ++ "gsldlc1 %[ftmp5], 0x0f(%[filter]) \n\t" + "gsldrc1 %[ftmp5], 0x08(%[filter]) \n\t" + "punpcklwd %[filter10], %[ftmp4], %[ftmp4] \n\t" + "punpckhwd %[filter32], %[ftmp4], %[ftmp4] \n\t" +@@ -253,10 +253,10 @@ static void convolve_avg_horiz_mmi(const uint8_t *src, int32_t src_stride, + + __asm__ volatile ( + "move %[tmp1], %[width] \n\t" +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "gsldlc1 %[filter1], 0x03(%[filter]) \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "gsldlc1 %[filter1], 0x07(%[filter]) \n\t" + "gsldrc1 %[filter1], 0x00(%[filter]) \n\t" +- "gsldlc1 %[filter2], 0x0b(%[filter]) \n\t" ++ "gsldlc1 %[filter2], 0x0f(%[filter]) \n\t" + "gsldrc1 %[filter2], 0x08(%[filter]) \n\t" + "li %[tmp0], 0x07 \n\t" + "dmtc1 %[tmp0], %[ftmp13] \n\t" +@@ -339,10 +339,10 @@ static void convolve_avg_vert_mmi(const uint8_t *src, int32_t src_stride, + dst_stride -= w; + + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" +- "gsldlc1 %[ftmp4], 0x03(%[filter]) \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "gsldlc1 %[ftmp4], 0x07(%[filter]) \n\t" + "gsldrc1 %[ftmp4], 0x00(%[filter]) \n\t" +- "gsldlc1 %[ftmp5], 0x0b(%[filter]) \n\t" ++ "gsldlc1 %[ftmp5], 0x0f(%[filter]) \n\t" + "gsldrc1 %[ftmp5], 0x08(%[filter]) \n\t" + "punpcklwd %[filter10], %[ftmp4], %[ftmp4] \n\t" + "punpckhwd %[filter32], %[ftmp4], %[ftmp4] \n\t" +@@ -444,7 +444,7 @@ static void convolve_avg_mmi(const uint8_t *src, int32_t src_stride, + + __asm__ volatile ( + "move %[tmp1], %[width] \n\t" +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "li %[tmp0], 0x10001 \n\t" + "dmtc1 %[tmp0], %[ftmp3] \n\t" + "punpcklhw %[ftmp3], %[ftmp3], %[ftmp3] \n\t" +diff --git a/libavcodec/mips/wmv2dsp_mmi.c b/libavcodec/mips/wmv2dsp_mmi.c +index 82e16f929b..1a6781ae77 100644 +--- a/libavcodec/mips/wmv2dsp_mmi.c ++++ b/libavcodec/mips/wmv2dsp_mmi.c +@@ -106,7 +106,7 @@ void ff_wmv2_idct_add_mmi(uint8_t *dest, ptrdiff_t line_size, int16_t *block) + wmv2_idct_col_mmi(block + i); + + __asm__ volatile ( +- "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" ++ "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + + // low 4 loop + MMI_LDC1(%[ftmp1], %[block], 0x00) +diff --git a/libavcodec/vc1dsp.c b/libavcodec/vc1dsp.c +index c25a6f3adf..a543792e14 100644 +--- a/libavcodec/vc1dsp.c ++++ b/libavcodec/vc1dsp.c +@@ -445,7 +445,6 @@ static void vc1_inv_trans_4x8_c(uint8_t *dest, ptrdiff_t stride, int16_t *block) + dst[1] = (t2 - t4) >> 3; + dst[2] = (t2 + t4) >> 3; + dst[3] = (t1 - t3) >> 3; +- + src += 8; + dst += 8; + } +@@ -1039,4 +1038,6 @@ av_cold void ff_vc1dsp_init(VC1DSPContext *dsp) + ff_vc1dsp_init_x86(dsp); + if (ARCH_MIPS) + ff_vc1dsp_init_mips(dsp); ++ if (ARCH_LOONGARCH) ++ ff_vc1dsp_init_loongarch(dsp); + } +diff --git a/libavcodec/vc1dsp.h b/libavcodec/vc1dsp.h +index 75db62b1b4..c6443acb20 100644 +--- a/libavcodec/vc1dsp.h ++++ b/libavcodec/vc1dsp.h +@@ -88,5 +88,6 @@ void ff_vc1dsp_init_arm(VC1DSPContext* dsp); + void ff_vc1dsp_init_ppc(VC1DSPContext *c); + void ff_vc1dsp_init_x86(VC1DSPContext* dsp); + void ff_vc1dsp_init_mips(VC1DSPContext* dsp); ++void ff_vc1dsp_init_loongarch(VC1DSPContext* dsp); + + #endif /* AVCODEC_VC1DSP_H */ +diff --git a/libavcodec/videodsp.c b/libavcodec/videodsp.c +index ce9e9eb143..fe64b5e81a 100644 +--- a/libavcodec/videodsp.c ++++ b/libavcodec/videodsp.c +@@ -54,4 +54,6 @@ av_cold void ff_videodsp_init(VideoDSPContext *ctx, int bpc) + ff_videodsp_init_x86(ctx, bpc); + if (ARCH_MIPS) + ff_videodsp_init_mips(ctx, bpc); ++ if (ARCH_LOONGARCH) ++ ff_videodsp_init_loongarch(ctx, bpc); + } +diff --git a/libavcodec/videodsp.h b/libavcodec/videodsp.h +index c0545f22b0..ac971dc57f 100644 +--- a/libavcodec/videodsp.h ++++ b/libavcodec/videodsp.h +@@ -84,5 +84,6 @@ void ff_videodsp_init_arm(VideoDSPContext *ctx, int bpc); + void ff_videodsp_init_ppc(VideoDSPContext *ctx, int bpc); + void ff_videodsp_init_x86(VideoDSPContext *ctx, int bpc); + void ff_videodsp_init_mips(VideoDSPContext *ctx, int bpc); ++void ff_videodsp_init_loongarch(VideoDSPContext *ctx, int bpc); + + #endif /* AVCODEC_VIDEODSP_H */ +diff --git a/libavcodec/vp8dsp.c b/libavcodec/vp8dsp.c +index fed5c67a90..ca21e41cd0 100644 +--- a/libavcodec/vp8dsp.c ++++ b/libavcodec/vp8dsp.c +@@ -739,5 +739,7 @@ av_cold void ff_vp8dsp_init(VP8DSPContext *dsp) + ff_vp8dsp_init_x86(dsp); + if (ARCH_MIPS) + ff_vp8dsp_init_mips(dsp); ++ if (ARCH_LOONGARCH) ++ ff_vp8dsp_init_loongarch(dsp); + } + #endif /* CONFIG_VP8_DECODER */ +diff --git a/libavcodec/vp8dsp.h b/libavcodec/vp8dsp.h +index eaae4aed6d..c603d075f6 100644 +--- a/libavcodec/vp8dsp.h ++++ b/libavcodec/vp8dsp.h +@@ -99,6 +99,7 @@ void ff_vp8dsp_init(VP8DSPContext *c); + void ff_vp8dsp_init_arm(VP8DSPContext *c); + void ff_vp8dsp_init_x86(VP8DSPContext *c); + void ff_vp8dsp_init_mips(VP8DSPContext *c); ++void ff_vp8dsp_init_loongarch(VP8DSPContext *c); + + #define IS_VP7 1 + #define IS_VP8 0 +diff --git a/libavcodec/vp9dsp.c b/libavcodec/vp9dsp.c +index f6d73f73cd..5fe8888da6 100644 +--- a/libavcodec/vp9dsp.c ++++ b/libavcodec/vp9dsp.c +@@ -96,4 +96,5 @@ av_cold void ff_vp9dsp_init(VP9DSPContext *dsp, int bpp, int bitexact) + if (ARCH_ARM) ff_vp9dsp_init_arm(dsp, bpp); + if (ARCH_X86) ff_vp9dsp_init_x86(dsp, bpp, bitexact); + if (ARCH_MIPS) ff_vp9dsp_init_mips(dsp, bpp); ++ if (ARCH_LOONGARCH) ff_vp9dsp_init_loongarch(dsp, bpp); + } +diff --git a/libavcodec/vp9dsp.h b/libavcodec/vp9dsp.h +index e2256316a8..700dd72de8 100644 +--- a/libavcodec/vp9dsp.h ++++ b/libavcodec/vp9dsp.h +@@ -132,5 +132,6 @@ void ff_vp9dsp_init_aarch64(VP9DSPContext *dsp, int bpp); + void ff_vp9dsp_init_arm(VP9DSPContext *dsp, int bpp); + void ff_vp9dsp_init_x86(VP9DSPContext *dsp, int bpp, int bitexact); + void ff_vp9dsp_init_mips(VP9DSPContext *dsp, int bpp); ++void ff_vp9dsp_init_loongarch(VP9DSPContext *dsp, int bpp); + + #endif /* AVCODEC_VP9DSP_H */ +diff --git a/libavutil/cpu.c b/libavutil/cpu.c +index 52f6b9a3bf..efb48eb544 100644 +--- a/libavutil/cpu.c ++++ b/libavutil/cpu.c +@@ -61,6 +61,8 @@ static int get_cpu_flags(void) + return ff_get_cpu_flags_ppc(); + if (ARCH_X86) + return ff_get_cpu_flags_x86(); ++ if (ARCH_LOONGARCH) ++ return ff_get_cpu_flags_loongarch(); + return 0; + } + +@@ -174,6 +176,9 @@ int av_parse_cpu_flags(const char *s) + #elif ARCH_MIPS + { "mmi", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_MMI }, .unit = "flags" }, + { "msa", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_MSA }, .unit = "flags" }, ++#elif ARCH_LOONGARCH ++ { "lsx", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_LSX }, .unit = "flags" }, ++ { "lasx", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_LASX }, .unit = "flags" }, + #endif + { NULL }, + }; +@@ -258,6 +263,9 @@ int av_parse_cpu_caps(unsigned *flags, const char *s) + #elif ARCH_MIPS + { "mmi", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_MMI }, .unit = "flags" }, + { "msa", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_MSA }, .unit = "flags" }, ++#elif ARCH_LOONGARCH ++ { "lsx", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_LSX }, .unit = "flags" }, ++ { "lasx", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_LASX }, .unit = "flags" }, + #endif + { NULL }, + }; +@@ -326,6 +334,8 @@ size_t av_cpu_max_align(void) + return ff_get_cpu_max_align_ppc(); + if (ARCH_X86) + return ff_get_cpu_max_align_x86(); ++ if (ARCH_LOONGARCH) ++ return ff_get_cpu_max_align_loongarch(); + + return 8; + } +diff --git a/libavutil/cpu.h b/libavutil/cpu.h +index 83099dd969..c1dbdc0061 100644 +--- a/libavutil/cpu.h ++++ b/libavutil/cpu.h +@@ -74,6 +74,10 @@ + #define AV_CPU_FLAG_MMI (1 << 0) + #define AV_CPU_FLAG_MSA (1 << 1) + ++//Loongarch SIMD extension. ++#define AV_CPU_FLAG_LSX (1 << 0) ++#define AV_CPU_FLAG_LASX (1 << 1) ++ + /** + * Return the flags which specify extensions supported by the CPU. + * The returned value is affected by av_force_cpu_flags() if that was used +diff --git a/libavutil/cpu_internal.h b/libavutil/cpu_internal.h +index 889764320b..e207b2d480 100644 +--- a/libavutil/cpu_internal.h ++++ b/libavutil/cpu_internal.h +@@ -46,11 +46,13 @@ int ff_get_cpu_flags_aarch64(void); + int ff_get_cpu_flags_arm(void); + int ff_get_cpu_flags_ppc(void); + int ff_get_cpu_flags_x86(void); ++int ff_get_cpu_flags_loongarch(void); + + size_t ff_get_cpu_max_align_mips(void); + size_t ff_get_cpu_max_align_aarch64(void); + size_t ff_get_cpu_max_align_arm(void); + size_t ff_get_cpu_max_align_ppc(void); + size_t ff_get_cpu_max_align_x86(void); ++size_t ff_get_cpu_max_align_loongarch(void); + + #endif /* AVUTIL_CPU_INTERNAL_H */ +diff --git a/libavutil/loongarch/Makefile b/libavutil/loongarch/Makefile +new file mode 100644 +index 0000000000..2addd9351c +--- /dev/null ++++ b/libavutil/loongarch/Makefile +@@ -0,0 +1 @@ ++OBJS += loongarch/cpu.o +diff --git a/libavutil/loongarch/cpu.c b/libavutil/loongarch/cpu.c +new file mode 100644 +index 0000000000..e4b240bc44 +--- /dev/null ++++ b/libavutil/loongarch/cpu.c +@@ -0,0 +1,69 @@ ++/* ++ * Copyright (c) 2020 Loongson Technology Corporation Limited ++ * Contributed by Shiyou Yin ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include ++#include "cpu.h" ++ ++#define LOONGARCH_CFG2 0x2 ++#define LOONGARCH_CFG2_LSX (1 << 6) ++#define LOONGARCH_CFG2_LASX (1 << 7) ++ ++static int cpu_flags_cpucfg(void) ++{ ++ int flags = 0; ++ uint32_t cfg2 = 0; ++ ++ __asm__ volatile( ++ "cpucfg %0, %1 \n\t" ++ : "+&r"(cfg2) ++ : "r"(LOONGARCH_CFG2) ++ ); ++ ++ if (cfg2 & LOONGARCH_CFG2_LSX) ++ flags |= AV_CPU_FLAG_LSX; ++ ++ if (cfg2 & LOONGARCH_CFG2_LASX) ++ flags |= AV_CPU_FLAG_LASX; ++ ++ return flags; ++} ++ ++int ff_get_cpu_flags_loongarch(void) ++{ ++#if defined __linux__ ++ return cpu_flags_cpucfg(); ++#else ++ /* Assume no SIMD ASE supported */ ++ return 0; ++#endif ++} ++ ++size_t ff_get_cpu_max_align_loongarch(void) ++{ ++ int flags = av_get_cpu_flags(); ++ ++ if (flags & AV_CPU_FLAG_LASX) ++ return 32; ++ if (flags & AV_CPU_FLAG_LSX) ++ return 16; ++ ++ return 8; ++} +diff --git a/libavutil/loongarch/cpu.h b/libavutil/loongarch/cpu.h +new file mode 100644 +index 0000000000..1a445c69bc +--- /dev/null ++++ b/libavutil/loongarch/cpu.h +@@ -0,0 +1,31 @@ ++/* ++ * Copyright (c) 2020 Loongson Technology Corporation Limited ++ * Contributed by Shiyou Yin ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef AVUTIL_LOONGARCH_CPU_H ++#define AVUTIL_LOONGARCH_CPU_H ++ ++#include "libavutil/cpu.h" ++#include "libavutil/cpu_internal.h" ++ ++#define have_lsx(flags) CPUEXT(flags, LSX) ++#define have_lasx(flags) CPUEXT(flags, LASX) ++ ++#endif /* AVUTIL_LOONGARCH_CPU_H */ +diff --git a/libavutil/loongarch/generic_macros_lasx.h b/libavutil/loongarch/generic_macros_lasx.h +new file mode 100644 +index 0000000000..aca12e6959 +--- /dev/null ++++ b/libavutil/loongarch/generic_macros_lasx.h +@@ -0,0 +1,3561 @@ ++/* ++ * Copyright (c) 2020 Loongson Technology Corporation Limited ++ * All rights reserved. ++ * Contributed by Shiyou Yin ++ * Xiwei Gu ++ * Jin Bo ++ * Hao Chen ++ * Lu Wang ++ * Peng Zhou ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ * ++ */ ++ ++#ifndef AVUTIL_LOONGARCH_GENERIC_MACROS_LASX_H ++#define AVUTIL_LOONGARCH_GENERIC_MACROS_LASX_H ++ ++/* ++ * Copyright (c) 2020 Loongson Technology Corporation Limited ++ * All rights reserved. ++ * Contributed by Shiyou Yin ++ * Xiwei Gu ++ * Jin Bo ++ * Hao Chen ++ * Lu Wang ++ * Peng Zhou ++ * ++ * This file is maintained in LSOM project, don't change it directly. ++ * You can get the latest version of this header from: *** ++ * ++ */ ++ ++#ifndef GENERIC_MACROS_LASX_H ++#define GENERIC_MACROS_LASX_H ++ ++#include ++#include ++ ++/** ++ * MAJOR version: Macro usage changes. ++ * MINOR version: Add new macros, or bug fix. ++ * MICRO version: Comment changes or implementation changes。 ++ */ ++#define LSOM_LASX_VERSION_MAJOR 3 ++#define LSOM_LASX_VERSION_MINOR 0 ++#define LSOM_LASX_VERSION_MICRO 0 ++ ++/* Description : Load 256-bit vector data with stride ++ * Arguments : Inputs - psrc (source pointer to load from) ++ * - stride ++ * Outputs - out0, out1, ~ ++ * Details : Load 256-bit data in 'out0' from (psrc) ++ * Load 256-bit data in 'out1' from (psrc + stride) ++ */ ++#define LASX_LD(psrc) *((__m256i *)(psrc)) ++ ++#define LASX_LD_2(psrc, stride, out0, out1) \ ++{ \ ++ out0 = LASX_LD(psrc); \ ++ out1 = LASX_LD((psrc) + stride); \ ++} ++ ++#define LASX_LD_4(psrc, stride, out0, out1, out2, out3) \ ++{ \ ++ LASX_LD_2((psrc), stride, out0, out1); \ ++ LASX_LD_2((psrc) + 2 * stride , stride, out2, out3); \ ++} ++ ++#define LASX_LD_8(psrc, stride, out0, out1, out2, out3, out4, out5, \ ++ out6, out7) \ ++{ \ ++ LASX_LD_4((psrc), stride, out0, out1, out2, out3); \ ++ LASX_LD_4((psrc) + 4 * stride, stride, out4, out5, out6, out7); \ ++} ++ ++/* Description : Store 256-bit vector data with stride ++ * Arguments : Inputs - in0, in1, ~ ++ * - pdst (destination pointer to store to) ++ * - stride ++ * Details : Store 256-bit data from 'in0' to (pdst) ++ * Store 256-bit data from 'in1' to (pdst + stride) ++ */ ++#define LASX_ST(in, pdst) *((__m256i *)(pdst)) = (in) ++ ++#define LASX_ST_2(in0, in1, pdst, stride) \ ++{ \ ++ LASX_ST(in0, (pdst)); \ ++ LASX_ST(in1, (pdst) + stride); \ ++} ++ ++#define LASX_ST_4(in0, in1, in2, in3, pdst, stride) \ ++{ \ ++ LASX_ST_2(in0, in1, (pdst), stride); \ ++ LASX_ST_2(in2, in3, (pdst) + 2 * stride, stride); \ ++} ++ ++#define LASX_ST_8(in0, in1, in2, in3, in4, in5, in6, in7, pdst, stride) \ ++{ \ ++ LASX_ST_4(in0, in1, in2, in3, (pdst), stride); \ ++ LASX_ST_4(in4, in5, in6, in7, (pdst) + 4 * stride, stride); \ ++} ++ ++/* Description : Store half word elements of vector with stride ++ * Arguments : Inputs - in source vector ++ * - idx, idx0, idx1, ~ ++ * - pdst (destination pointer to store to) ++ * - stride ++ * Details : Store half word 'idx0' from 'in' to (pdst) ++ * Store half word 'idx1' from 'in' to (pdst + stride) ++ * Similar for other elements ++ * Example : LASX_ST_H(in, idx, pdst) ++ * in : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ++ * idx0 : 0x01 ++ * out0 : 2 ++ */ ++#define LASX_ST_H(in, idx, pdst) \ ++{ \ ++ __lasx_xvstelm_h(in, pdst, 0, idx); \ ++} ++ ++#define LASX_ST_H_2(in, idx0, idx1, pdst, stride) \ ++{ \ ++ LASX_ST_H(in, idx0, (pdst)); \ ++ LASX_ST_H(in, idx1, (pdst) + stride); \ ++} ++ ++#define LASX_ST_H_4(in, idx0, idx1, idx2, idx3, pdst, stride) \ ++{ \ ++ LASX_ST_H_2(in, idx0, idx1, (pdst), stride); \ ++ LASX_ST_H_2(in, idx2, idx3, (pdst) + 2 * stride, stride); \ ++} ++ ++ ++/* Description : Store word elements of vector with stride ++ * Arguments : Inputs - in source vector ++ * - idx, idx0, idx1, ~ ++ * - pdst (destination pointer to store to) ++ * - stride ++ * Details : Store word 'idx0' from 'in' to (pdst) ++ * Store word 'idx1' from 'in' to (pdst + stride) ++ * Similar for other elements ++ * Example : LASX_ST_W(in, idx, pdst) ++ * in : 1, 2, 3, 4, 5, 6, 7, 8 ++ * idx0 : 0x01 ++ * out0 : 2 ++ */ ++#define LASX_ST_W(in, idx, pdst) \ ++{ \ ++ __lasx_xvstelm_w(in, pdst, 0, idx); \ ++} ++ ++#define LASX_ST_W_2(in, idx0, idx1, pdst, stride) \ ++{ \ ++ LASX_ST_W(in, idx0, (pdst)); \ ++ LASX_ST_W(in, idx1, (pdst) + stride); \ ++} ++ ++#define LASX_ST_W_4(in, idx0, idx1, idx2, idx3, pdst, stride) \ ++{ \ ++ LASX_ST_W_2(in, idx0, idx1, (pdst), stride); \ ++ LASX_ST_W_2(in, idx2, idx3, (pdst) + 2 * stride, stride); \ ++} ++ ++#define LASX_ST_W_8(in, idx0, idx1, idx2, idx3, idx4, idx5, idx6, idx7, \ ++ pdst, stride) \ ++{ \ ++ LASX_ST_W_4(in, idx0, idx1, idx2, idx3, (pdst), stride); \ ++ LASX_ST_W_4(in, idx4, idx5, idx6, idx7, (pdst) + 4 * stride, stride); \ ++} ++ ++/* Description : Store double word elements of vector with stride ++ * Arguments : Inputs - in source vector ++ * - idx, idx0, idx1, ~ ++ * - pdst (destination pointer to store to) ++ * - stride ++ * Details : Store double word 'idx0' from 'in' to (pdst) ++ * Store double word 'idx1' from 'in' to (pdst + stride) ++ * Similar for other elements ++ * Example : See LASX_ST_W(in, idx, pdst) ++ */ ++#define LASX_ST_D(in, idx, pdst) \ ++{ \ ++ __lasx_xvstelm_d(in, pdst, 0, idx); \ ++} ++ ++#define LASX_ST_D_2(in, idx0, idx1, pdst, stride) \ ++{ \ ++ LASX_ST_D(in, idx0, (pdst)); \ ++ LASX_ST_D(in, idx1, (pdst) + stride); \ ++} ++ ++#define LASX_ST_D_4(in, idx0, idx1, idx2, idx3, pdst, stride) \ ++{ \ ++ LASX_ST_D_2(in, idx0, idx1, (pdst), stride); \ ++ LASX_ST_D_2(in, idx2, idx3, (pdst) + 2 * stride, stride); \ ++} ++ ++/* Description : Store quad word elements of vector with stride ++ * Arguments : Inputs - in source vector ++ * - idx, idx0, idx1, ~ ++ * - pdst (destination pointer to store to) ++ * - stride ++ * Details : Store quad word 'idx0' from 'in' to (pdst) ++ * Store quad word 'idx1' from 'in' to (pdst + stride) ++ * Similar for other elements ++ * Example : See LASX_ST_W(in, idx, pdst) ++ */ ++#define LASX_ST_Q(in, idx, pdst) \ ++{ \ ++ LASX_ST_D(in, (idx << 1), pdst); \ ++ LASX_ST_D(in, (( idx << 1) + 1), (char*)(pdst) + 8); \ ++} ++ ++#define LASX_ST_Q_2(in, idx0, idx1, pdst, stride) \ ++{ \ ++ LASX_ST_Q(in, idx0, (pdst)); \ ++ LASX_ST_Q(in, idx1, (pdst) + stride); \ ++} ++ ++#define LASX_ST_Q_4(in, idx0, idx1, idx2, idx3, pdst, stride) \ ++{ \ ++ LASX_ST_Q_2(in, idx0, idx1, (pdst), stride); \ ++ LASX_ST_Q_2(in, idx2, idx3, (pdst) + 2 * stride, stride); \ ++} ++ ++/* Description : Dot product of byte vector elements ++ * Arguments : Inputs - in0, in1 ++ * Outputs - out0, out1 ++ * Return Type - unsigned halfword ++ * Details : Unsigned byte elements from in0 are iniplied with ++ * unsigned byte elements from in0 producing a result ++ * twice the size of input i.e. unsigned halfword. ++ * Then this iniplication results of adjacent odd-even elements ++ * are added together and stored to the out vector ++ * (2 unsigned halfword results) ++ * Example : see LASX_DP2_W_H ++ */ ++#define LASX_DP2_H_BU(in0, in1, out0) \ ++{ \ ++ __m256i _tmp0_m ; \ ++ \ ++ _tmp0_m = __lasx_xvmulwev_h_bu( in0, in1 ); \ ++ out0 = __lasx_xvmaddwod_h_bu( _tmp0_m, in0, in1 ); \ ++} ++#define LASX_DP2_H_BU_2(in0, in1, in2, in3, out0, out1) \ ++{ \ ++ LASX_DP2_H_BU(in0, in1, out0); \ ++ LASX_DP2_H_BU(in2, in3, out1); \ ++} ++#define LASX_DP2_H_BU_4(in0, in1, in2, in3, \ ++ in4, in5, in6, in7, \ ++ out0, out1, out2, out3) \ ++{ \ ++ LASX_DP2_H_BU_2(in0, in1, in0, in1, out0, out1); \ ++ LASX_DP2_H_BU_2(in4, in5, in6, in7, out2, out3); \ ++} ++ ++/* Description : Dot product of byte vector elements ++ * Arguments : Inputs - in0, in1 ++ * Outputs - out0, out1 ++ * Return Type - signed halfword ++ * Details : Signed byte elements from in0 are iniplied with ++ * signed byte elements from in0 producing a result ++ * twice the size of input i.e. signed halfword. ++ * Then this iniplication results of adjacent odd-even elements ++ * are added together and stored to the out vector ++ * (2 signed halfword results) ++ * Example : see LASX_DP2_W_H ++ */ ++#define LASX_DP2_H_B(in0, in1, out0) \ ++{ \ ++ __m256i _tmp0_m ; \ ++ \ ++ _tmp0_m = __lasx_xvmulwev_h_b( in0, in1 ); \ ++ out0 = __lasx_xvmaddwod_h_b( _tmp0_m, in0, in1 ); \ ++} ++#define LASX_DP2_H_B_2(in0, in1, in2, in3, out0, out1) \ ++{ \ ++ LASX_DP2_H_B(in0, in1, out0); \ ++ LASX_DP2_H_B(in2, in3, out1); \ ++} ++#define LASX_DP2_H_B_4(in0, in1, in2, in3, \ ++ in4, in5, in6, in7, \ ++ out0, out1, out2, out3) \ ++{ \ ++ LASX_DP2_H_B_2(in0, in1, in2, in3, out0, out1); \ ++ LASX_DP2_H_B_2(in4, in5, in6, in7, out2, out3); \ ++} ++ ++/* Description : Dot product of half word vector elements ++ * Arguments : Inputs - in0, in1, ~ ++ * Outputs - out0, out1, ~ ++ * Return Type - signed word ++ * Details : Signed half word elements from in* are iniplied with ++ * signed half word elements from in* producing a result ++ * twice the size of input i.e. signed word. ++ * Then this iniplication results of adjacent odd-even elements ++ * are added together and stored to the out vector. ++ * Example : LASX_DP2_W_H(in0, in1, out0) ++ * in0: 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8, ++ * in0: 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1, ++ * out0: 22,38,38,22, 22,38,38,22 ++ */ ++#define LASX_DP2_W_H(in0, in1, out0) \ ++{ \ ++ __m256i _tmp0_m ; \ ++ \ ++ _tmp0_m = __lasx_xvmulwev_w_h( in0, in1 ); \ ++ out0 = __lasx_xvmaddwod_w_h( _tmp0_m, in0, in1 ); \ ++} ++#define LASX_DP2_W_H_2(in0, in1, in2, in3, out0, out1) \ ++{ \ ++ LASX_DP2_W_H(in0, in1, out0); \ ++ LASX_DP2_W_H(in2, in3, out1); \ ++} ++#define LASX_DP2_W_H_4(in0, in1, in2, in3, \ ++ in4, in5, in6, in7, out0, out1, out2, out3) \ ++{ \ ++ LASX_DP2_W_H_2(in0, in1, in2, in3, out0, out1); \ ++ LASX_DP2_W_H_2(in4, in5, in6, in7, out2, out3); \ ++} ++#define LASX_DP2_W_H_8(in0, in1, in2, in3, in4, in5, in6, in7, \ ++ in8, in9, in10, in11, in12, in13, in14, in15, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_DP2_W_H_4(in0, in1, in2, in3, in4, in5, in6, in7, \ ++ out0, out1, out2, out3); \ ++ LASX_DP2_W_H_4(in8, in9, in10, in11, in12, in13, in14, in15, \ ++ out4, out5, out6, out7); \ ++} ++ ++/* Description : Dot product of word vector elements ++ * Arguments : Inputs - in0, in1, ~ ++ * Outputs - out0, out1, ~ ++ * Retrun Type - signed double ++ * Details : Signed word elements from in* are iniplied with ++ * signed word elements from in* producing a result ++ * twice the size of input i.e. signed double word. ++ * Then this iniplication results of adjacent odd-even elements ++ * are added together and stored to the out vector. ++ * Example : see LASX_DP2_W_H ++ */ ++#define LASX_DP2_D_W(in0, in1, out0) \ ++{ \ ++ __m256i _tmp0_m ; \ ++ \ ++ _tmp0_m = __lasx_xvmulwev_d_w( in0, in1 ); \ ++ out0 = __lasx_xvmaddwod_d_w( _tmp0_m, in0, in1 ); \ ++} ++#define LASX_DP2_D_W_2(in0, in1, in2, in3, out0, out1) \ ++{ \ ++ LASX_DP2_D_W(in0, in1, out0); \ ++ LASX_DP2_D_W(in2, in3, out1); \ ++} ++#define LASX_DP2_D_W_4(in0, in1, in2, in3, \ ++ in4, in5, in6, in7, out0, out1, out2, out3) \ ++{ \ ++ LASX_DP2_D_W_2(in0, in1, in2, in3, out0, out1); \ ++ LASX_DP2_D_W_2(in4, in5, in6, in7, out2, out3); \ ++} ++#define LASX_DP2_D_W_8(in0, in1, in2, in3, in4, in5, in6, in7, \ ++ in8, in9, in10, in11, in12, in13, in14, in15, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_DP2_D_W_4(in0, in1, in2, in3, in4, in5, in6, in7, \ ++ out0, out1, out2, out3); \ ++ LASX_DP2_D_W_4(in8, in9, in10, in11, in12, in13, in14, in15, \ ++ out4, out5, out6, out7); \ ++} ++ ++/* Description : Dot product of halfword vector elements ++ * Arguments : Inputs - in0, in1 ++ * Outputs - out0, out1 ++ * Return Type - as per RTYPE ++ * Details : Unsigned halfword elements from 'in0' are iniplied with ++ * halfword elements from 'in0' producing a result ++ * twice the size of input i.e. unsigned word. ++ * Multiplication result of adjacent odd-even elements ++ * are added together and written to the 'out0' vector ++ */ ++#define LASX_DP2_W_HU_H(in0, in1, out0) \ ++{ \ ++ __m256i _tmp0_m; \ ++ \ ++ _tmp0_m = __lasx_xvmulwev_w_hu_h( in0, in1 ); \ ++ out0 = __lasx_xvmaddwod_w_hu_h( _tmp0_m, in0, in1 ); \ ++} ++ ++#define LASX_DP2_W_HU_H_2(in0, in1, in2, in3, out0, out1) \ ++{ \ ++ LASX_DP2_W_HU_H(in0, in1, out0); \ ++ LASX_DP2_W_HU_H(in2, in3, out1); \ ++} ++ ++#define LASX_DP2_W_HU_H_4(in0, in1, in2, in3, \ ++ in4, in5, in6, in7, \ ++ out0, out1, out2, out3) \ ++{ \ ++ LASX_DP2_W_HU_H_2(in0, in1, in2, in3, out0, out1); \ ++ LASX_DP2_W_HU_H_2(in4, in5, in6, in7, out2, out3); \ ++} ++ ++/* Description : Dot product & addition of byte vector elements ++ * Arguments : Inputs - in0, in1 ++ * Outputs - out0, out1 ++ * Retrun Type - halfword ++ * Details : Signed byte elements from in0 are iniplied with ++ * signed byte elements from in0 producing a result ++ * twice the size of input i.e. signed halfword. ++ * Then this iniplication results of adjacent odd-even elements ++ * are added to the out vector ++ * (2 signed halfword results) ++ * Example : LASX_DP2ADD_H_B(in0, in1, in2, out0) ++ * in0: 1,2,3,4, 1,2,3,4, 1,2,3,4, 1,2,3,4, ++ * in1: 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8, ++ * 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * in2: 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1, ++ * 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1 ++ * out0: 23,40,41,26, 23,40,41,26, 23,40,41,26, 23,40,41,26 ++ */ ++#define LASX_DP2ADD_H_B(in0, in1, in2, out0) \ ++{ \ ++ __m256i _tmp0_m; \ ++ \ ++ _tmp0_m = __lasx_xvmaddwev_h_b( in0, in1, in2 ); \ ++ out0 = __lasx_xvmaddwod_h_b( _tmp0_m, in1, in2 ); \ ++} ++#define LASX_DP2ADD_H_B_2(in0, in1, in2, in3, in4, in5, out0, out1) \ ++{ \ ++ LASX_DP2ADD_H_B(in0, in1, in2, out0); \ ++ LASX_DP2ADD_H_B(in3, in4, in5, out1); \ ++} ++#define LASX_DP2ADD_H_B_4(in0, in1, in2, in3, in4, in5, \ ++ in6, in7, in8, in9, in10, in11, \ ++ out0, out1, out2, out3) \ ++{ \ ++ LASX_DP2ADD_H_B_2(in0, in1, in2, in3, in4, in5, out0, out1); \ ++ LASX_DP2ADD_H_B_2(in6, in7, in8, in9, in10, in11, out2, out3); \ ++} ++ ++/* Description : Dot product of halfword vector elements ++ * Arguments : Inputs - in0, in1 ++ * Outputs - out0, out1 ++ * Return Type - as per RTYPE ++ * Details : Signed halfword elements from 'in0' are iniplied with ++ * signed halfword elements from 'in0' producing a result ++ * twice the size of input i.e. signed word. ++ * Multiplication result of adjacent odd-even elements ++ * are added together and written to the 'out0' vector ++ */ ++#define LASX_DP2ADD_W_H(in0, in1, in2, out0) \ ++{ \ ++ __m256i _tmp0_m; \ ++ \ ++ _tmp0_m = __lasx_xvmaddwev_w_h( in0, in1, in2 ); \ ++ out0 = __lasx_xvmaddwod_w_h( _tmp0_m, in1, in2 ); \ ++} ++#define LASX_DP2ADD_W_H_2(in0, in1, in2, in3, in4, in5, out0, out1 ) \ ++{ \ ++ LASX_DP2ADD_W_H(in0, in1, in2, out0); \ ++ LASX_DP2ADD_W_H(in3, in4, in5, out1); \ ++} ++#define LASX_DP2ADD_W_H_4(in0, in1, in2, in3, in4, in5, \ ++ in6, in7, in8, in9, in10, in11, \ ++ out0, out1, out2, out3) \ ++{ \ ++ LASX_DP2ADD_W_H_2(in0, in1, in2, in3, in4, in5, out0, out1); \ ++ LASX_DP2ADD_W_H_2(in6, in7, in8, in9, in10, in11, out2, out3); \ ++} ++ ++/* Description : Dot product of halfword vector elements ++ * Arguments : Inputs - in0, in1 ++ * Outputs - out0, out1 ++ * Return Type - as per RTYPE ++ * Details : Unsigned halfword elements from 'in0' are iniplied with ++ * unsigned halfword elements from 'in0' producing a result ++ * twice the size of input i.e. unsigned word. ++ * Multiplication result of adjacent odd-even elements ++ * are added together and written to the 'out0' vector ++ */ ++#define LASX_DP2ADD_W_HU(in0, in1, in2, out0) \ ++{ \ ++ __m256i _tmp0_m; \ ++ \ ++ _tmp0_m = __lasx_xvmaddwev_w_hu( in0, in1, in2 ); \ ++ out0 = __lasx_xvmaddwod_w_hu( _tmp0_m, in1, in2 ); \ ++} ++#define LASX_DP2ADD_W_HU_2(in0, in1, in2, in3, in4, in5, out0, out1) \ ++{ \ ++ LASX_DP2ADD_W_HU(in0, in1, in2, out0); \ ++ LASX_DP2ADD_W_HU(in3, in4, in5, out1); \ ++} ++#define LASX_DP2ADD_W_HU_4(in0, in1, in2, in3, in4, in5, \ ++ in6, in7, in8, in9, in10, in11, \ ++ out0, out1, out2, out3) \ ++{ \ ++ LASX_DP2ADD_W_HU_2(in0, in1, in2, in3, in4, in5, out0, out1); \ ++ LASX_DP2ADD_W_HU_2(in6, in7, in8, in9, in10, in11, out2, out3); \ ++} ++ ++/* Description : Dot product of halfword vector elements ++ * Arguments : Inputs - in0, in1 ++ * Outputs - out0, out1 ++ * Return Type - as per RTYPE ++ * Details : Unsigned halfword elements from 'in0' are iniplied with ++ * halfword elements from 'in0' producing a result ++ * twice the size of input i.e. unsigned word. ++ * Multiplication result of adjacent odd-even elements ++ * are added together and written to the 'out0' vector ++ */ ++#define LASX_DP2ADD_W_HU_H(in0, in1, in2, out0) \ ++{ \ ++ __m256i _tmp0_m; \ ++ \ ++ _tmp0_m = __lasx_xvmaddwev_w_hu_h( in0, in1, in2 ); \ ++ out0 = __lasx_xvmaddwod_w_hu_h( _tmp0_m, in1, in2 ); \ ++} ++ ++#define LASX_DP2ADD_W_HU_H_2(in0, in1, in2, in3, in4, in5, out0, out1) \ ++{ \ ++ LASX_DP2ADD_W_HU_H(in0, in1, in2, out0); \ ++ LASX_DP2ADD_W_HU_H(in3, in4, in5, out1); \ ++} ++ ++#define LASX_DP2ADD_W_HU_H_4(in0, in1, in2, in3, in4, in5, \ ++ in6, in7, in8, in9, in10, in11, \ ++ out0, out1, out2, out3) \ ++{ \ ++ LASX_DP2ADD_W_HU_H_2(in0, in1, in2, in3, in4, in5, out0, out1); \ ++ LASX_DP2ADD_W_HU_H_2(in6, in7, in8, in9, in10, in11, out2, out3); \ ++} ++ ++/* Description : Vector Unsigned Dot Product and Subtract. ++ * Arguments : Inputs - in0, in1 ++ * Outputs - out0, out1 ++ * Return Type - as per RTYPE ++ * Details : Unsigned byte elements from 'in0' are iniplied with ++ * unsigned byte elements from 'in0' producing a result ++ * twice the size of input i.e. signed word. ++ * Multiplication result of adjacent odd-even elements ++ * are added together and subtract from double width elements, ++ * then written to the 'out0' vector. ++ */ ++#define LASX_DP2SUB_H_BU(in0, in1, in2, out0) \ ++{ \ ++ __m256i _tmp0_m; \ ++ \ ++ _tmp0_m = __lasx_xvmulwev_h_bu( in1, in2 ); \ ++ _tmp0_m = __lasx_xvmaddwod_h_bu( _tmp0_m, in1, in2 ); \ ++ out0 = __lasx_xvsub_h( in0, _tmp0_m ); \ ++} ++ ++#define LASX_DP2SUB_H_BU_2(in0, in1, in2, in3, in4, in5, out0, out1) \ ++{ \ ++ LASX_DP2SUB_H_BU(in0, in1, in2, out0); \ ++ LASX_DP2SUB_H_BU(in0, in1, in2, out0); \ ++} ++ ++#define LASX_DP2SUB_H_BU_4(in0, in1, in2, in3, in4, in5, \ ++ in6, in7, in8, in9, in10, in11, \ ++ out0, out1, out2, out3) \ ++{ \ ++ LASX_DP2SUB_H_BU_2(in0, in1, in2, in3, in4, in5, out0, out1); \ ++ LASX_DP2SUB_H_BU_2(in6, in7, in8, in9, in10, in11, out2, out3); \ ++} ++ ++/* Description : Vector Signed Dot Product and Subtract. ++ * Arguments : Inputs - in0, in1 ++ * Outputs - out0, out1 ++ * Return Type - as per RTYPE ++ * Details : Signed halfword elements from 'in0' are iniplied with ++ * signed halfword elements from 'in0' producing a result ++ * twice the size of input i.e. signed word. ++ * Multiplication result of adjacent odd-even elements ++ * are added together and subtract from double width elements, ++ * then written to the 'out0' vector. ++ */ ++#define LASX_DP2SUB_W_H(in0, in1, in2, out0) \ ++{ \ ++ __m256i _tmp0_m; \ ++ \ ++ _tmp0_m = __lasx_xvmulwev_w_h( in1, in2 ); \ ++ _tmp0_m = __lasx_xvmaddwod_w_h( _tmp0_m, in1, in2 ); \ ++ out0 = __lasx_xvsub_w( in0, _tmp0_m ); \ ++} ++ ++#define LASX_DP2SUB_W_H_2(in0, in1, in2, in3, in4, in5, out0, out1) \ ++{ \ ++ LASX_DP2SUB_W_H(in0, in1, in2, out0); \ ++ LASX_DP2SUB_W_H(in3, in4, in5, out1); \ ++} ++ ++#define LASX_DP2SUB_W_H_4(in0, in1, in2, in3, in4, in5, \ ++ in6, in7, in8, in9, in10, in11, \ ++ out0, out1, out2, out3) \ ++{ \ ++ LASX_DP2SUB_W_H_2(in0, in1, in2, in3, in4, in5, out0, out1); \ ++ LASX_DP2SUB_W_H_2(in6, in7, in8, in9, in10, in11, out2, out3); \ ++} ++ ++/* Description : Dot product of half word vector elements ++ * Arguments : Inputs - in0, in1, ~ ++ * Outputs - out0, out1, ~ ++ * Return Type - signed word ++ * Details : Signed half word elements from in* are iniplied with ++ * signed half word elements from in* producing a result ++ * twice the size of input i.e. signed word. ++ * Then this iniplication results of four adjacent elements ++ * are added together and stored to the out vector. ++ * Example : LASX_DP2_W_H(in0, in0, out0) ++ * in0: 3,1,3,0, 0,0,0,1, 0,0,1,-1, 0,0,0,1, ++ * in0: -2,1,1,0, 1,0,0,0, 0,0,1,0, 1,0,0,1, ++ * out0: -2,0,1,1, ++ */ ++#define LASX_DP4_D_H(in0, in1, out0) \ ++{ \ ++ __m256i _tmp0_m ; \ ++ \ ++ _tmp0_m = __lasx_xvmulwev_w_h( in0, in1 ); \ ++ _tmp0_m = __lasx_xvmaddwod_w_h( _tmp0_m, in0, in1 ); \ ++ out0 = __lasx_xvhaddw_d_w( _tmp0_m, _tmp0_m ); \ ++} ++#define LASX_DP4_D_H_2(in0, in1, in2, in3, out0, out1) \ ++{ \ ++ LASX_DP4_D_H(in0, in1, out0); \ ++ LASX_DP4_D_H(in2, in3, out1); \ ++} ++#define LASX_DP4_D_H_4(in0, in1, in2, in3, \ ++ in4, in5, in6, in7, out0, out1, out2, out3) \ ++{ \ ++ LASX_DP4_D_H_2(in0, in1, in2, in3, out0, out1); \ ++ LASX_DP4_D_H_2(in4, in5, in6, in7, out2, out3); \ ++} ++ ++/* Description : The high half of the vector elements are expanded and ++ * added after being doubled ++ * Arguments : Inputs - in0, in1, ~ ++ * Outputs - out0, out1, ~ ++ * Details : The in0 vector and the in1 vector are added after the ++ * higher half of the two-fold sign extension ( signed byte ++ * to signed half word ) and stored to the out vector. ++ * Example : see LASX_ADDWL_W_H_128SV ++ */ ++#define LASX_ADDWH_H_B_128SV(in0, in1, out0) \ ++{ \ ++ __m256i _tmp0_m, _tmp1_m; \ ++ \ ++ _tmp0_m = __lasx_xvilvh_b( in0, in0 ); \ ++ _tmp1_m = __lasx_xvilvh_b( in1, in1 ); \ ++ out0 = __lasx_xvaddwev_h_b( _tmp0_m, _tmp1_m ); \ ++} ++#define LASX_ADDWH_H_B_2_128SV(in0, in1, in2, in3, out0, out1) \ ++{ \ ++ LASX_ADDWH_H_B_128SV(in0, in1, out0); \ ++ LASX_ADDWH_H_B_128SV(in2, in3, out1); \ ++} ++#define LASX_ADDWH_H_B_4_128SV(in0, in1, in2, in3, \ ++ in4, in5, in6, in7, out0, out1, out2, out3) \ ++{ \ ++ LASX_ADDWH_H_B_2_128SV(in0, in1, in2, in3, out0, out1); \ ++ LASX_ADDWH_H_B_2_128SV(in4, in5, in6, in7, out2, out3); \ ++} ++ ++/* Description : The high half of the vector elements are expanded and ++ * added after being doubled ++ * Arguments : Inputs - in0, in1, ~ ++ * Outputs - out0, out1, ~ ++ * Details : The in0 vector and the in1 vector are added after the ++ * higher half of the two-fold sign extension ( signed half word ++ * to signed word ) and stored to the out vector. ++ * Example : see LASX_ADDWL_W_H_128SV ++ */ ++#define LASX_ADDWH_W_H_128SV(in0, in1, out0) \ ++{ \ ++ __m256i _tmp0_m, _tmp1_m; \ ++ \ ++ _tmp0_m = __lasx_xvilvh_h( in0, in0 ); \ ++ _tmp1_m = __lasx_xvilvh_h( in1, in1 ); \ ++ out0 = __lasx_xvaddwev_w_h( _tmp0_m, _tmp1_m ); \ ++} ++#define LASX_ADDWH_W_H_2_128SV(in0, in1, in2, in3, out0, out1) \ ++{ \ ++ LASX_ADDWH_W_H_128SV(in0, in1, out0); \ ++ LASX_ADDWH_W_H_128SV(in2, in3, out1); \ ++} ++#define LASX_ADDWH_W_H_4_128SV(in0, in1, in2, in3, \ ++ in4, in5, in6, in7, out0, out1, out2, out3) \ ++{ \ ++ LASX_ADDWH_W_H_2_128SV(in0, in1, in2, in3, out0, out1); \ ++ LASX_ADDWH_W_H_2_128SV(in4, in5, in6, in7, out2, out3); \ ++} ++ ++/* Description : The low half of the vector elements are expanded and ++ * added after being doubled ++ * Arguments : Inputs - in0, in1, ~ ++ * Outputs - out0, out1, ~ ++ * Details : The in0 vector and the in1 vector are added after the ++ * lower half of the two-fold sign extension ( signed byte ++ * to signed half word ) and stored to the out vector. ++ * Example : see LASX_ADDWL_W_H_128SV ++ */ ++#define LASX_ADDWL_H_B_128SV(in0, in1, out0) \ ++{ \ ++ __m256i _tmp0_m, _tmp1_m; \ ++ \ ++ _tmp0_m = __lasx_xvsllwil_h_b( in0, 0 ); \ ++ _tmp1_m = __lasx_xvsllwil_h_b( in1, 0 ); \ ++ out0 = __lasx_xvadd_h( _tmp0_m, _tmp1_m ); \ ++} ++#define LASX_ADDWL_H_B_2_128SV(in0, in1, in2, in3, out0, out1) \ ++{ \ ++ LASX_ADDWL_H_B_128SV(in0, in1, out0); \ ++ LASX_ADDWL_H_B_128SV(in2, in3, out1); \ ++} ++#define LASX_ADDWL_H_B_4_128SV(in0, in1, in2, in3, \ ++ in4, in5, in6, in7, out0, out1, out2, out3) \ ++{ \ ++ LASX_ADDWL_H_B_2_128SV(in0, in1, in2, in3, out0, out1); \ ++ LASX_ADDWL_H_B_2_128SV(in4, in5, in6, in7, out2, out3); \ ++} ++ ++/* Description : The low half of the vector elements are expanded and ++ * added after being doubled ++ * Arguments : Inputs - in0, in1, ~ ++ * Outputs - out0, out1, ~ ++ * Details : The in0 vector and the in1 vector are added after the ++ * lower half of the two-fold sign extension ( signed half word ++ * to signed word ) and stored to the out vector. ++ * Example : LASX_ADDWL_W_H_128SV(in0, in1, out0) ++ * in0 3,0,3,0, 0,0,0,-1, 0,0,1,-1, 0,0,0,1, ++ * in1 2,-1,1,2, 1,0,0,0, 1,0,1,0, 1,0,0,1, ++ * out0 5,-1,4,2, 1,0,2,-1, ++ */ ++#define LASX_ADDWL_W_H_128SV(in0, in1, out0) \ ++{ \ ++ __m256i _tmp0_m; \ ++ \ ++ _tmp0_m = __lasx_xvilvl_h(in1, in0); \ ++ out0 = __lasx_xvhaddw_w_h( _tmp0_m, _tmp0_m ); \ ++} ++#define LASX_ADDWL_W_H_2_128SV(in0, in1, in2, in3, out0, out1) \ ++{ \ ++ LASX_ADDWL_W_H_128SV(in0, in1, out0); \ ++ LASX_ADDWL_W_H_128SV(in2, in3, out1); \ ++} ++#define LASX_ADDWL_W_H_4_128SV(in0, in1, in2, in3, \ ++ in4, in5, in6, in7, out0, out1, out2, out3) \ ++{ \ ++ LASX_ADDWL_W_H_2_128SV(in0, in1, in2, in3, out0, out1); \ ++ LASX_ADDWL_W_H_2_128SV(in4, in5, in6, in7, out2, out3); \ ++} ++ ++/* Description : The low half of the vector elements are expanded and ++ * added after being doubled ++ * Arguments : Inputs - in0, in1, ~ ++ * Outputs - out0, out1, ~ ++ * Details : The in0 vector and the in1 vector are added after the ++ * lower half of the two-fold zero extension ( unsigned byte ++ * to unsigned half word ) and stored to the out vector. ++ */ ++#define LASX_ADDWL_H_BU_128SV(in0, in1, out0) \ ++{ \ ++ __m256i _tmp0_m; \ ++ \ ++ _tmp0_m = __lasx_xvilvl_b(in1, in0); \ ++ out0 = __lasx_xvhaddw_hu_bu( _tmp0_m, _tmp0_m ); \ ++} ++#define LASX_ADDWL_H_BU_2_128SV(in0, in1, in2, in3, out0, out1) \ ++{ \ ++ LASX_ADDWL_H_BU_128SV(in0, in1, out0); \ ++ LASX_ADDWL_H_BU_128SV(in2, in3, out1); \ ++} ++#define LASX_ADDWL_H_BU_4_128SV(in0, in1, in2, in3, \ ++ in4, in5, in6, in7, out0, out1, out2, out3) \ ++{ \ ++ LASX_ADDWL_H_BU_2_128SV(in0, in1, in2, in3, out0, out1); \ ++ LASX_ADDWL_H_BU_2_128SV(in4, in5, in6, in7, out2, out3); \ ++} ++ ++/* Description : The low half of the vector elements are expanded and ++ * added after being doubled ++ * Arguments : Inputs - in0, in1, ~ ++ * Outputs - out0, out1, ~ ++ * Details : In1 vector plus in0 vector after double zero extension ++ * ( unsigned byte to half word ),add and stored to the out vector. ++ * Example : reference to LASX_ADDW_W_W_H_128SV(in0, in1, out0) ++ */ ++#define LASX_ADDW_H_H_BU_128SV(in0, in1, out0) \ ++{ \ ++ __m256i _tmp1_m; \ ++ \ ++ _tmp1_m = __lasx_xvsllwil_hu_bu( in1, 0 ); \ ++ out0 = __lasx_xvadd_h( in0, _tmp1_m ); \ ++} ++#define LASX_ADDW_H_H_BU_2_128SV(in0, in1, in2, in3, out0, out1) \ ++{ \ ++ LASX_ADDW_H_H_BU_128SV(in0, in1, out0); \ ++ LASX_ADDW_H_H_BU_128SV(in2, in3, out1); \ ++} ++#define LASX_ADDW_H_H_BU_4_128SV(in0, in1, in2, in3, \ ++ in4, in5, in6, in7, out0, out1, out2, out3) \ ++{ \ ++ LASX_ADDW_H_H_BU_2_128SV(in0, in1, in2, in3, out0, out1); \ ++ LASX_ADDW_H_H_BU_2_128SV(in4, in5, in6, in7, out2, out3); \ ++} ++ ++/* Description : The low half of the vector elements are expanded and ++ * added after being doubled ++ * Arguments : Inputs - in0, in1, ~ ++ * Outputs - out0, out1, ~ ++ * Details : In1 vector plus in0 vector after double sign extension ++ * ( signed half word to word ),add and stored to the out vector. ++ * Example : LASX_ADDW_W_W_H_128SV(in0, in1, out0) ++ * in0 0,1,0,0, -1,0,0,1, ++ * in1 2,-1,1,2, 1,0,0,0, 0,0,1,0, 1,0,0,1, ++ * out0 2,0,1,2, -1,0,1,1, ++ */ ++#define LASX_ADDW_W_W_H_128SV(in0, in1, out0) \ ++{ \ ++ __m256i _tmp1_m; \ ++ \ ++ _tmp1_m = __lasx_xvsllwil_w_h( in1, 0 ); \ ++ out0 = __lasx_xvadd_w( in0, _tmp1_m ); \ ++} ++#define LASX_ADDW_W_W_H_2_128SV(in0, in1, in2, in3, out0, out1) \ ++{ \ ++ LASX_ADDW_W_W_H_128SV(in0, in1, out0); \ ++ LASX_ADDW_W_W_H_128SV(in2, in3, out1); \ ++} ++#define LASX_ADDW_W_W_H_4_128SV(in0, in1, in2, in3, \ ++ in4, in5, in6, in7, out0, out1, out2, out3) \ ++{ \ ++ LASX_ADDW_W_W_H_2_128SV(in0, in1, in2, in3, out0, out1); \ ++ LASX_ADDW_W_W_H_2_128SV(in4, in5, in6, in7, out2, out3); \ ++} ++ ++/* Description : Multiplication and addition calculation after expansion ++ * of the lower half of the vector ++ * Arguments : Inputs - in0, in1, ~ ++ * Outputs - out0, out1, ~ ++ * Details : The in1 vector and the in0 vector are multiplied after ++ * the lower half of the two-fold sign extension ( signed ++ * half word to signed word ) , and the result is added to ++ * the vector in0, the stored to the out vector. ++ * Example : LASX_MADDWL_W_H_128SV(in0, in1, in2, out0) ++ * in0 1,2,3,4, 5,6,7 8 ++ * in1 1,2,3,4, 1,2,3,4, 5,6,7,8, 5,6,7,8 ++ * in2 200,300,400,500, 2000,3000,4000,5000, ++ * -200,-300,-400,-500, -2000,-3000,-4000,-5000 ++ * out0 5,-1,4,2, 1,0,2,-1, ++ */ ++#define LASX_MADDWL_W_H_128SV(in0, in1, in2, out0) \ ++{ \ ++ __m256i _tmp0_m, _tmp1_m; \ ++ \ ++ _tmp0_m = __lasx_xvsllwil_w_h( in1, 0 ); \ ++ _tmp1_m = __lasx_xvsllwil_w_h( in2, 0 ); \ ++ _tmp0_m = __lasx_xvmul_w( _tmp0_m, _tmp1_m ); \ ++ out0 = __lasx_xvadd_w( _tmp0_m, in0 ); \ ++} ++#define LASX_MADDWL_W_H_2_128SV(in0, in1, in2, in3, in4, in5, out0, out1) \ ++{ \ ++ LASX_MADDWL_W_H_128SV(in0, in1, in2, out0); \ ++ LASX_MADDWL_W_H_128SV(in3, in4, in5, out1); \ ++} ++#define LASX_MADDWL_W_H_4_128SV(in0, in1, in2, in3, in4, in5, \ ++ in6, in7, in8, in9, in10, in11, \ ++ out0, out1, out2, out3) \ ++{ \ ++ LASX_MADDWL_W_H_2_128SV(in0, in1, in2, in3, in4, in5, out0, out1); \ ++ LASX_MADDWL_W_H_2_128SV(in6, in7, in8, in9, in10, in11, out2, out3); \ ++} ++ ++/* Description : Multiplication and addition calculation after expansion ++ * of the higher half of the vector ++ * Arguments : Inputs - in0, in1, ~ ++ * Outputs - out0, out1, ~ ++ * Details : The in1 vector and the in0 vector are multiplied after ++ * the higher half of the two-fold sign extension ( signed ++ * half word to signed word ) , and the result is added to ++ * the vector in0, the stored to the out vector. ++ * Example : see LASX_MADDWL_W_H_128SV ++ */ ++#define LASX_MADDWH_W_H_128SV(in0, in1, in2, out0) \ ++{ \ ++ __m256i _tmp0_m, _tmp1_m; \ ++ \ ++ _tmp0_m = __lasx_xvilvh_h( in1, in1 ); \ ++ _tmp1_m = __lasx_xvilvh_h( in2, in2 ); \ ++ _tmp0_m = __lasx_xvmulwev_w_h( _tmp0_m, _tmp1_m ); \ ++ out0 = __lasx_xvadd_w( _tmp0_m, in0 ); \ ++} ++#define LASX_MADDWH_W_H_2_128SV(in0, in1, in2, in3, in4, in5, out0, out1) \ ++{ \ ++ LASX_MADDWH_W_H_128SV(in0, in1, in2, out0); \ ++ LASX_MADDWH_W_H_128SV(in3, in4, in5, out1); \ ++} ++#define LASX_MADDWH_W_H_4_128SV(in0, in1, in2, in3, in4, in5, \ ++ in6, in7, in8, in9, in10, in11, \ ++ out0, out1, out2, out3) \ ++{ \ ++ LASX_MADDWH_W_H_2_128SV(in0, in1, in2, in3, in4, in5, out0, out1); \ ++ LASX_MADDWH_W_H_2_128SV(in6, in7, in8, in9, in10, in11, out2, out3); \ ++} ++ ++/* Description : Multiplication calculation after expansion ++ * of the lower half of the vector ++ * Arguments : Inputs - in0, in1, ~ ++ * Outputs - out0, out1, ~ ++ * Details : The in1 vector and the in0 vector are multiplied after ++ * the lower half of the two-fold sign extension ( signed ++ * half word to signed word ) , the stored to the out vector. ++ * Example : LASX_MULWL_W_H_128SV(in0, in1, out0) ++ * in0 3,-1,3,0, 0,0,0,-1, 0,0,1,-1, 0,0,0,1, ++ * in1 2,-1,1,2, 1,0,0,0, 0,0,1,0, 1,0,0,1, ++ * out0 6,1,3,0, 0,0,1,0, ++ */ ++#define LASX_MULWL_W_H_128SV(in0, in1, out0) \ ++{ \ ++ __m256i _tmp0_m, _tmp1_m; \ ++ \ ++ _tmp0_m = __lasx_xvsllwil_w_h( in0, 0 ); \ ++ _tmp1_m = __lasx_xvsllwil_w_h( in1, 0 ); \ ++ out0 = __lasx_xvmul_w( _tmp0_m, _tmp1_m ); \ ++} ++#define LASX_MULWL_W_H_2_128SV(in0, in1, in2, in3, out0, out1) \ ++{ \ ++ LASX_MULWL_W_H_128SV(in0, in1, out0); \ ++ LASX_MULWL_W_H_128SV(in2, in3, out1); \ ++} ++#define LASX_MULWL_W_H_4_128SV(in0, in1, in2, in3, \ ++ in4, in5, in6, in7, \ ++ out0, out1, out2, out3) \ ++{ \ ++ LASX_MULWL_W_H_2_128SV(in0, in1, in2, in3, out0, out1); \ ++ LASX_MULWL_W_H_2_128SV(in4, in5, in6, in7, out2, out3); \ ++} ++ ++/* Description : Multiplication calculation after expansion ++ * of the lower half of the vector ++ * Arguments : Inputs - in0, in1, ~ ++ * Outputs - out0, out1, ~ ++ * Details : The in1 vector and the in0 vector are multiplied after ++ * the lower half of the two-fold sign extension ( signed ++ * half word to signed word ) , the stored to the out vector. ++ * Example : see LASX_MULWL_W_H_128SV ++ */ ++#define LASX_MULWH_W_H_128SV(in0, in1, out0) \ ++{ \ ++ __m256i _tmp0_m, _tmp1_m; \ ++ \ ++ _tmp0_m = __lasx_xvilvh_h( in0, in0 ); \ ++ _tmp1_m = __lasx_xvilvh_h( in1, in1 ); \ ++ out0 = __lasx_xvmulwev_w_h( _tmp0_m, _tmp1_m ); \ ++} ++#define LASX_MULWH_W_H_2_128SV(in0, in1, in2, in3, out0, out1) \ ++{ \ ++ LASX_MULWH_W_H_128SV(in0, in1, out0); \ ++ LASX_MULWH_W_H_128SV(in2, in3, out1); \ ++} ++#define LASX_MULWH_W_H_4_128SV(in0, in1, in2, in3, \ ++ in4, in5, in6, in7, \ ++ out0, out1, out2, out3) \ ++{ \ ++ LASX_MULWH_W_H_2_128SV(in0, in1, in2, in3, out0, out1); \ ++ LASX_MULWH_W_H_2_128SV(in4, in5, in6, in7, out2, out3); \ ++} ++ ++/* Description : The low half of the vector elements are expanded and ++ * added after being doubled ++ * Arguments : Inputs - in0, in1, ~ ++ * Outputs - out0, out1, ~ ++ * Details : The in1 vector add the in0 vector after the ++ * lower half of the two-fold zero extension ( unsigned byte ++ * to unsigned half word ) and stored to the out vector. ++ */ ++#define LASX_SADDW_HU_HU_BU_128SV(in0, in1, out0) \ ++{ \ ++ __m256i _tmp1_m; \ ++ __m256i _zero_m = { 0 }; \ ++ \ ++ _tmp1_m = __lasx_xvilvl_b( _zero_m, in1 ); \ ++ out0 = __lasx_xvsadd_hu( in0, _tmp1_m ); \ ++} ++#define LASX_SADDW_HU_HU_BU_2_128SV(in0, in1, in2, in3, out0, out1) \ ++{ \ ++ LASX_SADDW_HU_HU_BU_128SV(in0, in1, out0); \ ++ LASX_SADDW_HU_HU_BU_128SV(in2, in3, out1); \ ++} ++#define LASX_SADDW_HU_HU_BU_4_128SV(in0, in1, in2, in3, \ ++ in4, in5, in6, in7, \ ++ out0, out1, out2, out3) \ ++{ \ ++ LASX_SADDW_HU_HU_BU_2_128SV(in0, in1, in2, in3, out0, out1); \ ++ LASX_SADDW_HU_HU_BU_2_128SV(in4, in5, in6, in7, out2, out3); \ ++} ++ ++/* Description : Low 8-bit vector elements unsigned extension to halfword ++ * Arguments : Inputs - in0, in1, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Low 8-bit elements from in0 unsigned extension to halfword, ++ * written to output vector out0. Similar for in1. ++ * Example : See LASX_UNPCK_L_W_H(in0, out0) ++ */ ++#define LASX_UNPCK_L_HU_BU(in0, out0) \ ++{ \ ++ out0 = __lasx_vext2xv_hu_bu(in0); \ ++} ++ ++#define LASX_UNPCK_L_HU_BU_2(in0, in1, out0, out1) \ ++{ \ ++ LASX_UNPCK_L_HU_BU(in0, out0); \ ++ LASX_UNPCK_L_HU_BU(in1, out1); \ ++} ++ ++#define LASX_UNPCK_L_HU_BU_4(in0, in1, in2, in3, out0, out1, out2, out3) \ ++{ \ ++ LASX_UNPCK_L_HU_BU_2(in0, in1, out0, out1); \ ++ LASX_UNPCK_L_HU_BU_2(in2, in3, out2, out3); \ ++} ++ ++#define LASX_UNPCK_L_HU_BU_8(in0, in1, in2, in3, in4, in5, in6, in7, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_UNPCK_L_HU_BU_4(in0, in1, in2, in3, out0, out1, out2, out3); \ ++ LASX_UNPCK_L_HU_BU_4(in4, in5, in6, in7, out4, out5, out6, out7); \ ++} ++ ++/* Description : Low 8-bit vector elements unsigned extension to word ++ * Arguments : Inputs - in0, in1, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Low 8-bit elements from in0 unsigned extension to word, ++ * written to output vector out0. Similar for in1. ++ * Example : See LASX_UNPCK_L_W_H(in0, out0) ++ */ ++#define LASX_UNPCK_L_WU_BU(in0, out0) \ ++{ \ ++ out0 = __lasx_vext2xv_wu_bu(in0); \ ++} ++ ++#define LASX_UNPCK_L_WU_BU_2(in0, in1, out0, out1) \ ++{ \ ++ LASX_UNPCK_L_WU_BU(in0, out0); \ ++ LASX_UNPCK_L_WU_BU(in1, out1); \ ++} ++ ++#define LASX_UNPCK_L_WU_BU_4(in0, in1, in2, in3, out0, out1, out2, out3) \ ++{ \ ++ LASX_UNPCK_L_WU_BU_2(in0, in1, out0, out1); \ ++ LASX_UNPCK_L_WU_BU_2(in2, in3, out2, out3); \ ++} ++ ++#define LASX_UNPCK_L_WU_BU_8(in0, in1, in2, in3, in4, in5, in6, in7, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_UNPCK_L_WU_BU_4(in0, in1, in2, in3, out0, out1, out2, out3); \ ++ LASX_UNPCK_L_WU_BU_4(in4, in5, in6, in7, out4, out5, out6, out7); \ ++} ++ ++/* Description : Low 8-bit vector elements signed extension to halfword ++ * Arguments : Inputs - in0, in1, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Low 8-bit elements from in0 signed extension to halfword, ++ * written to output vector out0. Similar for in1. ++ * Example : See LASX_UNPCK_L_W_H(in0, out0) ++ */ ++#define LASX_UNPCK_L_H_B(in0, out0) \ ++{ \ ++ out0 = __lasx_vext2xv_h_b(in0); \ ++} ++ ++#define LASX_UNPCK_L_H_B_2(in0, in1, out0, out1) \ ++{ \ ++ LASX_UNPCK_L_H_B(in0, out0); \ ++ LASX_UNPCK_L_H_B(in1, out1); \ ++} ++ ++#define LASX_UNPCK_L_H_B_4(in0, in1, in2, in3, out0, out1, out2, out3) \ ++{ \ ++ LASX_UNPCK_L_H_B_2(in0, in1, out0, out1); \ ++ LASX_UNPCK_L_H_B_2(in2, in3, out2, out3); \ ++} ++ ++/* Description : Low halfword vector elements signed extension to word ++ * Arguments : Inputs - in0, in1, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Low halfword elements from in0 signed extension to ++ * word, written to output vector out0. Similar for in1. ++ * Similar for other pairs. ++ * Example : LASX_UNPCK_L_W_H(in0, out0) ++ * in0 : 3, 0, 3, 0, 0, 0, 0, -1, 0, 0, 1, 1, 0, 0, 0, 1 ++ * out0 : 3, 0, 3, 0, 0, 0, 0, -1 ++ */ ++#define LASX_UNPCK_L_W_H(in0, out0) \ ++{ \ ++ out0 = __lasx_vext2xv_w_h(in0); \ ++} ++ ++#define LASX_UNPCK_L_W_H_2(in0, in1, out0, out1) \ ++{ \ ++ LASX_UNPCK_L_W_H(in0, out0); \ ++ LASX_UNPCK_L_W_H(in1, out1); \ ++} ++ ++#define LASX_UNPCK_L_W_H_4(in0, in1, in2, in3, out0, out1, out2, out3) \ ++{ \ ++ LASX_UNPCK_L_W_H_2(in0, in1, out0, out1); \ ++ LASX_UNPCK_L_W_H_2(in2, in3, out2, out3); \ ++} ++ ++#define LASX_UNPCK_L_W_H_8(in0, in1, in2, in3, in4, in5, in6, in7, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_UNPCK_L_W_H_4(in0, in1, in2, in3, out0, out1, out2, out3); \ ++ LASX_UNPCK_L_W_H_4(in4, in5, in6, in7, out4, out5, out6, out7); \ ++} ++ ++/* Description : Interleave odd byte elements from vectors. ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out, out0, ~ ++ * Details : Odd byte elements of in_h and odd byte ++ * elements of in_l are interleaved and copied to out. ++ * Example : See LASX_ILVOD_W(in_h, in_l, out) ++ */ ++#define LASX_ILVOD_B(in_h, in_l, out) \ ++{ \ ++ out = __lasx_xvpackod_b((in_h, in1_l); \ ++} ++ ++#define LASX_ILVOD_B_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_ILVOD_B(in0_h, in0_l, out0); \ ++ LASX_ILVOD_B(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_ILVOD_B_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0, out1, out2, out3) \ ++{ \ ++ LASX_ILVOD_B_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_ILVOD_B_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++/* Description : Interleave odd half word elements from vectors. ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out, out0, ~ ++ * Details : Odd half word elements of in_h and odd half word ++ * elements of in_l are interleaved and copied to out. ++ * Example : See LASX_ILVOD_W(in_h, in_l, out) ++ */ ++#define LASX_ILVOD_H(in_h, in_l, out) \ ++{ \ ++ out = __lasx_xvpackod_h(in_h, in_l); \ ++} ++ ++#define LASX_ILVOD_H_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_ILVOD_H(in0_h, in0_l, out0); \ ++ LASX_ILVOD_H(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_ILVOD_H_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0, out1, out2, out3) \ ++{ \ ++ LASX_ILVOD_H_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_ILVOD_H_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++/* Description : Interleave odd word elements from vectors. ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out, out0, ~ ++ * Details : Odd word elements of in_h and odd word ++ * elements of in_l are interleaved and copied to out. ++ * Example : See LASX_ILVOD_W(in_h, in_l, out) ++ * in_h : 1, 2, 3, 4, 5, 6, 7, 8 ++ * in_l : 1, 0, 3, 1, 1, 2, 3, 4 ++ * out : 0, 2, 1, 4, 2, 6, 4, 8 ++ */ ++#define LASX_ILVOD_W(in_h, in_l, out) \ ++{ \ ++ out = __lasx_xvpackod_w(in_h, in_l); \ ++} ++ ++#define LASX_ILVOD_W_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_ILVOD_W(in0_h, in0_l, out0); \ ++ LASX_ILVOD_W(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_ILVOD_W_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0, out1, out2, out3) \ ++{ \ ++ LASX_ILVOD_W_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_ILVOD_W_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++/* Description : Interleave odd double word elements from vectors. ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out, out0, ~ ++ * Details : Odd double word elements of in_h and odd double word ++ * elements of in_l are interleaved and copied to out. ++ * Example : LASX_ILVOD_W(in_h, in_l, out) ++ */ ++#define LASX_ILVOD_D(in_h, in_l, out) \ ++{ \ ++ out = __lasx_xvpackod_d(in_h, in_l); \ ++} ++ ++#define LASX_ILVOD_D_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_ILVOD_D(in0_h, in0_l, out0); \ ++ LASX_ILVOD_D(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_ILVOD_D_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0, out1, out2, out3) \ ++{ \ ++ LASX_ILVOD_D_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_ILVOD_D_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++/* Description : Interleave right half of byte elements from vectors ++ * Arguments : Inputs - in0_h, in0_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Low half of byte elements of in_l and high half of byte ++ * elements of in_h are interleaved and copied to out0. ++ * Similar for other pairs ++ * Example : See LASX_ILVL_W(in_h, in_l, out0) ++ */ ++#define LASX_ILVL_B(in_h, in_l, out0) \ ++{ \ ++ __m256i tmp0, tmp1; \ ++ tmp0 = __lasx_xvilvl_b(in_h, in_l); \ ++ tmp1 = __lasx_xvilvh_b(in_h, in_l); \ ++ out0 = __lasx_xvpermi_q(tmp0, tmp1, 0x02); \ ++} ++ ++#define LASX_ILVL_B_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_ILVL_B(in0_h, in0_l, out0) \ ++ LASX_ILVL_B(in1_h, in1_l, out1) \ ++} ++ ++#define LASX_ILVL_B_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_ILVL_B_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++ LASX_ILVL_B_2(in2_h, in2_l, in3_h, in3_l, out2, out3) \ ++} ++ ++#define LASX_ILVL_B_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_ILVL_B_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0, out1, out2, out3); \ ++ LASX_ILVL_B_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4, out5, out6, out7); \ ++} ++ ++/* Description : Interleave low half of byte elements from vectors ++ * (128-bit symmetry version) ++ * Arguments : Inputs - in0_h, in0_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Low half of byte elements of in_l and low half of byte ++ * elements of in_h are interleaved and copied to out0. ++ * Similar for other pairs ++ * Example : See LASX_ILVL_W_128SV(in_h, in_l, out0) ++ */ ++#define LASX_ILVL_B_128SV(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvilvl_b(in_h, in_l); \ ++} ++ ++#define LASX_ILVL_B_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_ILVL_B_128SV(in0_h, in0_l, out0); \ ++ LASX_ILVL_B_128SV(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_ILVL_B_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_ILVL_B_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_ILVL_B_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++#define LASX_ILVL_B_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_ILVL_B_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0, out1, out2, out3); \ ++ LASX_ILVL_B_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4, out5, out6, out7); \ ++} ++ ++/* Description : Interleave low half of half word elements from vectors ++ * Arguments : Inputs - in0_h, in0_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Low half of half word elements of in_l and right half of ++ * half word elements of in_h are interleaved and copied to ++ * out0. Similar for other pairs. ++ * Example : See LASX_ILVL_W(in_h, in_l, out0) ++ */ ++#define LASX_ILVL_H(in_h, in_l, out0) \ ++{ \ ++ __m256i tmp0, tmp1; \ ++ tmp0 = __lasx_xvilvl_h(in_h, in_l); \ ++ tmp1 = __lasx_xvilvh_h(in_h, in_l); \ ++ out0 = __lasx_xvpermi_q(tmp0, tmp1, 0x02); \ ++} ++ ++#define LASX_ILVL_H_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_ILVL_H(in0_h, in0_l, out0) \ ++ LASX_ILVL_H(in1_h, in1_l, out1) \ ++} ++ ++#define LASX_ILVL_H_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_ILVL_H_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++ LASX_ILVL_H_2(in2_h, in2_l, in3_h, in3_l, out2, out3) \ ++} ++ ++#define LASX_ILVL_H_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_ILVL_H_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0, out1, out2, out3); \ ++ LASX_ILVL_H_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4, out5, out6, out7); \ ++} ++ ++/* Description : Interleave low half of half word elements from vectors ++ * (128-bit symmetry version) ++ * Arguments : Inputs - in0_h, in0_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Low half of half word elements of in_l and low half of half ++ * word elements of in_h are interleaved and copied to ++ * out0. Similar for other pairs. ++ * Example : See LASX_ILVL_W_128SV(in_h, in_l, out0) ++ */ ++#define LASX_ILVL_H_128SV(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvilvl_h(in_h, in_l); \ ++} ++ ++#define LASX_ILVL_H_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_ILVL_H_128SV(in0_h, in0_l, out0); \ ++ LASX_ILVL_H_128SV(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_ILVL_H_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_ILVL_H_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_ILVL_H_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++#define LASX_ILVL_H_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_ILVL_H_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0, out1, out2, out3); \ ++ LASX_ILVL_H_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4, out5, out6, out7); \ ++} ++ ++/* Description : Interleave low half of word elements from vectors ++ * Arguments : Inputs - in0_h, in0_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Low half of halfword elements of in_l and low half of word ++ * elements of in_h are interleaved and copied to out0. ++ * Similar for other pairs ++ * Example : LASX_ILVL_W(in_h, in_l, out0) ++ * in_h : 0, 1, 0, 1, 0, 1, 0, 1 ++ * in_l : 1, 2, 3, 4, 5, 6, 7, 8 ++ * out0 : 1, 0, 2, 1, 3, 0, 4, 1 ++ */ ++#define LASX_ILVL_W(in_h, in_l, out0) \ ++{ \ ++ __m256i tmp0, tmp1; \ ++ tmp0 = __lasx_xvilvl_w(in_h, in_l); \ ++ tmp1 = __lasx_xvilvh_w(in_h, in_l); \ ++ out0 = __lasx_xvpermi_q(tmp0, tmp1, 0x02); \ ++} ++ ++#define LASX_ILVL_W_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_ILVL_W(in0_h, in0_l, out0) \ ++ LASX_ILVL_W(in1_h, in1_l, out1) \ ++} ++ ++#define LASX_ILVL_W_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_ILVL_W_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++ LASX_ILVL_W_2(in2_h, in2_l, in3_h, in3_l, out2, out3) \ ++} ++ ++#define LASX_ILVL_W_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_ILVL_W_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0, out1, out2, out3); \ ++ LASX_ILVL_W_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4, out5, out6, out7); \ ++} ++ ++/* Description : Interleave low half of word elements from vectors ++ * (128-bit symmetry version) ++ * Arguments : Inputs - in0_h, in0_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Low half of halfword elements of in_l and low half of word ++ * elements of in_h are interleaved and copied to out0. ++ * Similar for other pairs ++ * Example : LASX_ILVL_W_128SV(in_h, in_l, out0) ++ * in_h : 0, 1, 0, 1, 0, 1, 0, 1 ++ * in_l : 1, 2, 3, 4, 5, 6, 7, 8 ++ * out0 : 1, 0, 2, 1, 5, 0, 6, 1 ++ */ ++#define LASX_ILVL_W_128SV(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvilvl_w(in_h, in_l); \ ++} ++ ++#define LASX_ILVL_W_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_ILVL_W_128SV(in0_h, in0_l, out0); \ ++ LASX_ILVL_W_128SV(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_ILVL_W_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_ILVL_W_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_ILVL_W_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++#define LASX_ILVL_W_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_ILVL_W_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0, out1, out2, out3); \ ++ LASX_ILVL_W_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4, out5, out6, out7); \ ++} ++ ++/* Description : Interleave low half of double word elements from vectors ++ * Arguments : Inputs - in0_h, in0_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Low half of double word elements of in_l and low half of ++ * double word elements of in_h are interleaved and copied to out0. ++ * Similar for other pairs ++ * Example : See LASX_ILVL_W(in_h, in_l, out0) ++ */ ++#define LASX_ILVL_D(in_h, in_l, out0) \ ++{ \ ++ __m256i tmp0, tmp1; \ ++ tmp0 = __lasx_xvilvl_d(in_h, in_l); \ ++ tmp1 = __lasx_xvilvh_d(in_h, in_l); \ ++ out0 = __lasx_xvpermi_q(tmp0, tmp1, 0x02); \ ++} ++ ++#define LASX_ILVL_D_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_ILVL_D(in0_h, in0_l, out0) \ ++ LASX_ILVL_D(in1_h, in1_l, out1) \ ++} ++ ++#define LASX_ILVL_D_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_ILVL_D_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++ LASX_ILVL_D_2(in2_h, in2_l, in3_h, in3_l, out2, out3) \ ++} ++ ++#define LASX_ILVL_D_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_ILVL_D_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0, out1, out2, out3); \ ++ LASX_ILVL_D_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4, out5, out6, out7); \ ++} ++ ++/* Description : Interleave right half of double word elements from vectors ++ * (128-bit symmetry version) ++ * Arguments : Inputs - in0_h, in0_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Right half of double word elements of in_l and right half of ++ * double word elements of in_h are interleaved and copied to out0. ++ * Similar for other pairs. ++ * Example : See LASX_ILVL_W_128SV(in_h, in_l, out0) ++ */ ++#define LASX_ILVL_D_128SV(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvilvl_d(in_h, in_l); \ ++} ++ ++#define LASX_ILVL_D_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_ILVL_D_128SV(in0_h, in0_l, out0); \ ++ LASX_ILVL_D_128SV(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_ILVL_D_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_ILVL_D_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_ILVL_D_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++#define LASX_ILVL_D_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_ILVL_D_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0, out1, out2, out3); \ ++ LASX_ILVL_D_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4, out5, out6, out7); \ ++} ++ ++/* Description : Interleave high half of byte elements from vectors ++ * Arguments : Inputs - in0_h, in0_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : High half of byte elements of in_l and high half of ++ * byte ++ * elements of in_h are interleaved and copied to out0. ++ * Similar for other pairs. ++ * Example : see LASX_ILVH_W(in_h, in_l, out0) ++ */ ++#define LASX_ILVH_B(in_h, in_l, out0) \ ++{ \ ++ __m256i tmp0, tmp1; \ ++ tmp0 = __lasx_xvilvl_b(in_h, in_l); \ ++ tmp1 = __lasx_xvilvh_b(in_h, in_l); \ ++ out0 = __lasx_xvpermi_q(tmp0, tmp1, 0x13); \ ++} ++ ++#define LASX_ILVH_B_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_ILVH_B(in0_h, in0_l, out0) \ ++ LASX_ILVH_B(in1_h, in1_l, out1) \ ++} ++ ++#define LASX_ILVH_B_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_ILVH_B_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++ LASX_ILVH_B_2(in2_h, in2_l, in3_h, in3_l, out2, out3) \ ++} ++ ++#define LASX_ILVH_B_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_ILVH_B_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0, out1, out2, out3); \ ++ LASX_ILVH_B_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4, out5, out6, out7); \ ++} ++ ++/* Description : Interleave high half of byte elements from vectors ++ * (128-bit symmetry version) ++ * Arguments : Inputs - in0_h, in0_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : High half of byte elements of in_l and high half ++ * of byte elements of in_h are interleaved and copied ++ * to out0. ++ * Similar for other pairs. ++ * Example : see LASX_ILVH_W_128SV(in_h, in_l, out0) ++ */ ++#define LASX_ILVH_B_128SV(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvilvh_b(in_h, in_l); \ ++} ++ ++#define LASX_ILVH_B_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_ILVH_B_128SV(in0_h, in0_l, out0); \ ++ LASX_ILVH_B_128SV(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_ILVH_B_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_ILVH_B_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_ILVH_B_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++#define LASX_ILVH_B_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_ILVH_B_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0, out1, out2, out3); \ ++ LASX_ILVH_B_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4, out5, out6, out7); \ ++} ++ ++/* Description : Interleave high half of half word elements from vectors ++ * Arguments : Inputs - in0_h, in0_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : High half of half word elements of in_l and high half of ++ * half word ++ * elements of in_h are interleaved and copied to out0. ++ * Similar for other pairs. ++ * Example : see LASX_ILVH_W(in_h, in_l, out0) ++ */ ++#define LASX_ILVH_H(in_h, in_l, out0) \ ++{ \ ++ __m256i tmp0, tmp1; \ ++ tmp0 = __lasx_xvilvl_h(in_h, in_l); \ ++ tmp1 = __lasx_xvilvh_h(in_h, in_l); \ ++ out0 = __lasx_xvpermi_q(tmp0, tmp1, 0x13); \ ++} ++ ++#define LASX_ILVH_H_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_ILVH_H(in0_h, in0_l, out0) \ ++ LASX_ILVH_H(in1_h, in1_l, out1) \ ++} ++ ++#define LASX_ILVH_H_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_ILVH_H_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++ LASX_ILVH_H_2(in2_h, in2_l, in3_h, in3_l, out2, out3) \ ++} ++ ++#define LASX_ILVH_H_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_ILVH_H_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0, out1, out2, out3); \ ++ LASX_ILVH_H_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4, out5, out6, out7); \ ++} ++ ++/* Description : Interleave high half of half word elements from vectors ++ * (128-bit symmetry version) ++ * Arguments : Inputs - in0_h, in0_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : High half of half word elements of in_l and high half ++ * of half word elements of in_h are interleaved and copied ++ * to out0. ++ * Similar for other pairs. ++ * Example : see LASX_ILVH_W_128SV(in_h, in_l, out0) ++ */ ++#define LASX_ILVH_H_128SV(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvilvh_h(in_h, in_l); \ ++} ++ ++#define LASX_ILVH_H_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_ILVH_H_128SV(in0_h, in0_l, out0); \ ++ LASX_ILVH_H_128SV(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_ILVH_H_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_ILVH_H_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_ILVH_H_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++#define LASX_ILVH_H_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_ILVH_H_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0, out1, out2, out3); \ ++ LASX_ILVH_H_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4, out5, out6, out7); \ ++} ++ ++/* Description : Interleave high half of word elements from vectors ++ * Arguments : Inputs - in0_h, in0_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : High half of word elements of in_l and high half of ++ * word elements of in_h are interleaved and copied to ++ * out0. ++ * Similar for other pairs. ++ * Example : LASX_ILVH_W(in_h, in_l, out0) ++ * in_h:-1, -2, -3, -4, -5, -6, -7, -8 ++ * in_l: 1, 2, 3, 4, 5, 6, 7, 8 ++ * out0: 5, -5, 6, -6, 7, -7, 8, -8 ++ */ ++#define LASX_ILVH_W(in_h, in_l, out0) \ ++{ \ ++ __m256i tmp0, tmp1; \ ++ tmp0 = __lasx_xvilvl_w(in_h, in_l); \ ++ tmp1 = __lasx_xvilvh_w(in_h, in_l); \ ++ out0 = __lasx_xvpermi_q(tmp0, tmp1, 0x13); \ ++} ++ ++#define LASX_ILVH_W_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_ILVH_W(in0_h, in0_l, out0) \ ++ LASX_ILVH_W(in1_h, in1_l, out1) \ ++} ++ ++#define LASX_ILVH_W_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_ILVH_W_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++ LASX_ILVH_W_2(in2_h, in2_l, in3_h, in3_l, out2, out3) \ ++} ++ ++#define LASX_ILVH_W_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_ILVH_W_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0, out1, out2, out3); \ ++ LASX_ILVH_W_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4, out5, out6, out7); \ ++} ++ ++/* Description : Interleave high half of word elements from vectors ++ * (128-bit symmetry version) ++ * Arguments : Inputs - in0_h, in0_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : High half of word elements of every 128-bit of in_l ++ * and high half of word elements of every 128-bit of ++ * in_h are interleaved and copied to out0. ++ * Similar for other pairs. ++ * Example : LASX_ILVH_W_128SV(in_h, in_l, out0) ++ * in_h:-1, -2, -3, -4, -5, -6, -7, -8 ++ * in_l: 1, 2, 3, 4, 5, 6, 7, 8 ++ * out0: 3, -3, 4, -4, 7, -7, 8, -8* ++ */ ++#define LASX_ILVH_W_128SV(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvilvh_w(in_h, in_l); \ ++} ++ ++#define LASX_ILVH_W_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_ILVH_W_128SV(in0_h, in0_l, out0); \ ++ LASX_ILVH_W_128SV(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_ILVH_W_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_ILVH_W_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_ILVH_W_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++#define LASX_ILVH_W_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_ILVH_W_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0, out1, out2, out3); \ ++ LASX_ILVH_W_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4, out5, out6, out7); \ ++} ++ ++/* Description : Interleave high half of double word elements from vectors ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out0, out1, ~ ++ :* Details : High half of double word elements of in_l and high half of ++ * double word elements of in_h are interleaved and copied to ++ * out0. ++ * Similar for other pairs. ++ * Example : see LASX_ILVH_W(in_h, in_l, out0) ++ */ ++#define LASX_ILVH_D(in_h, in_l, out0) \ ++{ \ ++ __m256i tmp0, tmp1; \ ++ tmp0 = __lasx_xvilvl_d(in_h, in_l); \ ++ tmp1 = __lasx_xvilvh_d(in_h, in_l); \ ++ out0 = __lasx_xvpermi_q(tmp0, tmp1, 0x13); \ ++} ++ ++#define LASX_ILVH_D_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_ILVH_D(in0_h, in0_l, out0) \ ++ LASX_ILVH_D(in1_h, in1_l, out1) \ ++} ++ ++#define LASX_ILVH_D_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_ILVH_D_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++ LASX_ILVH_D_2(in2_h, in2_l, in3_h, in3_l, out2, out3) \ ++} ++ ++#define LASX_ILVH_D_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_ILVH_D_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0, out1, out2, out3); \ ++ LASX_ILVH_D_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4, out5, out6, out7); \ ++} ++ ++/* Description : Interleave high half of double word elements from vectors ++ * (128-bit symmetry version) ++ * Arguments : Inputs - in0, in1, ~ ++ * Outputs - out0, out1, ~ ++ * Details : High half of double word elements of every 128-bit in_l and ++ * high half of double word elements of every 128-bit in_h are ++ * interleaved and copied to out0. ++ * Similar for other pairs. ++ * Example : see LASX_ILVH_W_128SV(in_h, in_l, out0) ++ */ ++#define LASX_ILVH_D_128SV(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvilvh_d(in_h, in_l); \ ++} ++ ++#define LASX_ILVH_D_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_ILVH_D_128SV(in0_h, in0_l, out0); \ ++ LASX_ILVH_D_128SV(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_ILVH_D_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_ILVH_D_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_ILVH_D_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++#define LASX_ILVH_D_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_ILVH_D_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0, out1, out2, out3); \ ++ LASX_ILVH_D_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4, out5, out6, out7); \ ++} ++ ++/* Description : Interleave byte elements from vectors ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out_h, out_l, ~ ++ * Details : Low half of byte elements of in_l and low half of byte ++ * elements of in_h are interleaved and copied to out_l. ++ * High half of byte elements of in_l and high half of byte ++ * elements of in_h are interleaved and copied to out_h. ++ * Similar for other pairs. ++ * Example : see LASX_ILVLH_W(in_h, in_l, out_l, out_h) ++ */ ++#define LASX_ILVLH_B(in_h, in_l, out_h, out_l) \ ++{ \ ++ __m256i tmp0, tmp1; \ ++ tmp0 = __lasx_xvilvl_b(in_h, in_l); \ ++ tmp1 = __lasx_xvilvh_b(in_h, in_l); \ ++ out_l = __lasx_xvpermi_q(tmp0, tmp1, 0x02); \ ++ out_h = __lasx_xvpermi_q(tmp0, tmp1, 0x13); \ ++} ++ ++#define LASX_ILVLH_B_2(in0_h, in0_l, in1_h, in1_l, \ ++ out0_h, out0_l, out1_h, out1_l) \ ++{ \ ++ LASX_ILVLH_B(in0_h, in0_l, out0_h, out0_l); \ ++ LASX_ILVLH_B(in1_h, in1_l, out1_h, out1_l); \ ++} ++ ++#define LASX_ILVLH_B_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l) \ ++{ \ ++ LASX_ILVLH_B_2(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l); \ ++ LASX_ILVLH_B_2(in2_h, in2_l, in3_h, in3_l, out2_h, out2_l, out3_h, out3_l); \ ++} ++ ++#define LASX_ILVLH_B_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l, \ ++ out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l) \ ++{ \ ++ LASX_ILVLH_B_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l); \ ++ LASX_ILVLH_B_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l); \ ++} ++ ++/* Description : Interleave byte elements from vectors ++ * (128-bit symmetry version) ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out_h, out_l, ~ ++ * Details : Low half of byte elements of in_l and low half of byte elements ++ * of in_h are interleaved and copied to out_l. High half of byte ++ * elements of in_h and high half of byte elements of in_l are ++ * interleaved and copied to out_h. ++ * Similar for other pairs. ++ * Example : see LASX_ILVLH_W_128SV(in_h, in_l, out_h, out_l) ++ */ ++#define LASX_ILVLH_B_128SV(in_h, in_l, out_h, out_l) \ ++{ \ ++ LASX_ILVL_B_128SV(in_h, in_l, out_l); \ ++ LASX_ILVH_B_128SV(in_h, in_l, out_h); \ ++} ++ ++#define LASX_ILVLH_B_2_128SV(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l) \ ++{ \ ++ LASX_ILVLH_B_128SV(in0_h, in0_l, out0_h, out0_l); \ ++ LASX_ILVLH_B_128SV(in1_h, in1_l, out1_h, out1_l); \ ++} ++ ++#define LASX_ILVLH_B_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l) \ ++{ \ ++ LASX_ILVLH_B_2_128SV(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l); \ ++ LASX_ILVLH_B_2_128SV(in2_h, in2_l, in3_h, in3_l, out2_h, out2_l, out3_h, out3_l); \ ++} ++ ++#define LASX_ILVLH_B_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l, \ ++ out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l) \ ++{ \ ++ LASX_ILVLH_B_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l); \ ++ LASX_ILVLH_B_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l); \ ++} ++ ++/* Description : Interleave half word elements from vectors ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out_h, out_l, ~ ++ * Details : Low half of half word elements of in_l and low half of half ++ * word elements of in_h are interleaved and copied to out_l. ++ * High half of half word elements of in_l and high half of half ++ * word elements of in_h are interleaved and copied to out_h. ++ * Similar for other pairs. ++ * Example : see LASX_ILVLH_W(in_h, in_l, out_h, out_l) ++ */ ++#define LASX_ILVLH_H(in_h, in_l, out_h, out_l) \ ++{ \ ++ __m256i tmp0, tmp1; \ ++ tmp0 = __lasx_xvilvl_h(in_h, in_l); \ ++ tmp1 = __lasx_xvilvh_h(in_h, in_l); \ ++ out_l = __lasx_xvpermi_q(tmp0, tmp1, 0x02); \ ++ out_h = __lasx_xvpermi_q(tmp0, tmp1, 0x13); \ ++} ++ ++#define LASX_ILVLH_H_2(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, \ ++ out1_h, out1_l) \ ++{ \ ++ LASX_ILVLH_H(in0_h, in0_l, out0_h, out0_l); \ ++ LASX_ILVLH_H(in1_h, in1_l, out1_h, out1_l); \ ++} ++ ++#define LASX_ILVLH_H_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l) \ ++{ \ ++ LASX_ILVLH_H_2(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l); \ ++ LASX_ILVLH_H_2(in2_h, in2_l, in3_h, in3_l, out2_h, out2_l, out3_h, out3_l); \ ++} ++ ++#define LASX_ILVLH_H_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l, \ ++ out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l) \ ++{ \ ++ LASX_ILVLH_H_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l); \ ++ LASX_ILVLH_H_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l); \ ++} ++ ++/* Description : Interleave half word elements from vectors ++ * (128-bit symmetry version) ++ * Arguments : Inputs - in0_h, in0_l, ~ ++ * Outputs - out0_h, out0_l, ~ ++ * Details : Low half of half word elements of every 128-bit of in_l and ++ * low half of half word elements of every 128-bit of in_h are ++ * interleaved and copied to out_l. ++ * High half of half word elements of every 128-bit of in_l and ++ * high half of half word elements of every 128-bit of in_h are ++ * interleaved and copied to out_h. ++ * Similar for other pairs. ++ * Example : see LASX_ILVLH_W_128SV(in_h, in_l, out_h, out_l) ++ */ ++#define LASX_ILVLH_H_128SV(in_h, in_l, out_h, out_l) \ ++{ \ ++ LASX_ILVL_H_128SV(in_h, in_l, out_l); \ ++ LASX_ILVH_H_128SV(in_h, in_l, out_h); \ ++} ++ ++#define LASX_ILVLH_H_2_128SV(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l) \ ++{ \ ++ LASX_ILVLH_H_128SV(in0_h, in0_l, out0_h, out0_l); \ ++ LASX_ILVLH_H_128SV(in1_h, in1_l, out1_h, out1_l); \ ++} ++ ++#define LASX_ILVLH_H_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l) \ ++{ \ ++ LASX_ILVLH_H_2_128SV(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l); \ ++ LASX_ILVLH_H_2_128SV(in2_h, in2_l, in3_h, in3_l, out2_h, out2_l, out3_h, out3_l); \ ++} ++ ++#define LASX_ILVLH_H_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l, \ ++ out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l) \ ++{ \ ++ LASX_ILVLH_H_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l); \ ++ LASX_ILVLH_H_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l); \ ++} ++ ++/* Description : Interleave word elements from vectors ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out_h, out_l, ~ ++ * Details : Low half of word elements of in_l and low half of word ++ * elements of in_h are interleaved and copied to out_l. ++ * High half of word elements of in_l and high half of word ++ * elements of in_h are interleaved and copied to out_h. ++ * Similar for other pairs. ++ * Example : LASX_ILVLH_W(in_h, in_l, out_h, out_l) ++ * in_h:-1, -2, -3, -4, -5, -6, -7, -8 ++ * in_l: 1, 2, 3, 4, 5, 6, 7, 8 ++ * out_h: 5, -5, 6, -6, 7, -7, 8, -8 ++ * out_l: 1, -1, 2, -2, 3, -3, 4, -4 ++ */ ++#define LASX_ILVLH_W(in_h, in_l, out_h, out_l) \ ++{ \ ++ __m256i tmp0, tmp1; \ ++ tmp0 = __lasx_xvilvl_w(in_h, in_l); \ ++ tmp1 = __lasx_xvilvh_w(in_h, in_l); \ ++ out_l = __lasx_xvpermi_q(tmp0, tmp1, 0x02); \ ++ out_h = __lasx_xvpermi_q(tmp0, tmp1, 0x13); \ ++} ++ ++#define LASX_ILVLH_W_2(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, \ ++ out1_h, out1_l) \ ++{ \ ++ LASX_ILVLH_W(in0_h, in0_l, out0_h, out0_l); \ ++ LASX_ILVLH_W(in1_h, in1_l, out1_h, out1_l); \ ++} ++ ++#define LASX_ILVLH_W_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l) \ ++{ \ ++ LASX_ILVLH_W_2(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l); \ ++ LASX_ILVLH_W_2(in2_h, in2_l, in3_h, in3_l, out2_h, out2_l, out3_h, out3_l); \ ++} ++ ++#define LASX_ILVLH_W_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l, \ ++ out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l) \ ++{ \ ++ LASX_ILVLH_W_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l); \ ++ LASX_ILVLH_W_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l); \ ++} ++ ++/* Description : Interleave word elements from vectors ++ * (128-bit symmetry version) ++ * Arguments : Inputs - in0_h, in0_l, ~ ++ * Outputs - out0_h, out0_l, ~ ++ * Details : Low half of word elements of every 128-bit of in_l and ++ * low half of word elements of every 128-bit of in_h are ++ * interleaved and copied to out_l. ++ * High half of word elements of every 128-bit of in_l and ++ * high half of word elements of every 128-bit of in_h are ++ * interleaved and copied to out_h. ++ * Similar for other pairs. ++ * Example : LASX_ILVLH_W_128SV(in_h, in_l, out_h, out_l) ++ * in_h:-1, -2, -3, -4, -5, -6, -7, -8 ++ * in_l: 1, 2, 3, 4, 5, 6, 7, 8 ++ * out_h: 3, -3, 4, -4, 7, -7, 8, -8 ++ * out_l: 1, -1, 2, -2, 5, -5, 6, -6 ++ */ ++#define LASX_ILVLH_W_128SV(in_h, in_l, out_h, out_l) \ ++{ \ ++ LASX_ILVL_W_128SV(in_h, in_l, out_l); \ ++ LASX_ILVH_W_128SV(in_h, in_l, out_h); \ ++} ++ ++#define LASX_ILVLH_W_2_128SV(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l) \ ++{ \ ++ LASX_ILVLH_W_128SV(in0_h, in0_l, out0_h, out0_l); \ ++ LASX_ILVLH_W_128SV(in1_h, in1_l, out1_h, out1_l); \ ++} ++ ++#define LASX_ILVLH_W_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l) \ ++{ \ ++ LASX_ILVLH_W_2_128SV(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l); \ ++ LASX_ILVLH_W_2_128SV(in2_h, in2_l, in3_h, in3_l, out2_h, out2_l, out3_h, out3_l); \ ++} ++ ++#define LASX_ILVLH_W_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l, \ ++ out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l) \ ++{ \ ++ LASX_ILVLH_W_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l); \ ++ LASX_ILVLH_W_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l); \ ++} ++ ++/* Description : Interleave double word elements from vectors ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out_h, out_l, ~ ++ * Details : Low half of double word elements of in_l and low half of ++ * double word elements of in_h are interleaved and copied to ++ * out_l. High half of double word elements of in_l and high ++ * half of double word elements of in_h are interleaved and ++ * copied to out_h. ++ * Similar for other pairs. ++ * Example : see LASX_ILVLH_W(in_h, in_l, out_h, out_l) ++ */ ++#define LASX_ILVLH_D(in_h, in_l, out_h, out_l) \ ++{ \ ++ __m256i tmp0, tmp1; \ ++ tmp0 = __lasx_xvilvl_d(in_h, in_l); \ ++ tmp1 = __lasx_xvilvh_d(in_h, in_l); \ ++ out_l = __lasx_xvpermi_q(tmp0, tmp1, 0x02); \ ++ out_h = __lasx_xvpermi_q(tmp0, tmp1, 0x13); \ ++} ++ ++#define LASX_ILVLH_D_2(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, \ ++ out1_h, out1_l) \ ++{ \ ++ LASX_ILVLH_D(in0_h, in0_l, out0_h, out0_l); \ ++ LASX_ILVLH_D(in1_h, in1_l, out1_h, out1_l); \ ++} ++ ++#define LASX_ILVLH_D_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l) \ ++{ \ ++ LASX_ILVLH_D_2(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l); \ ++ LASX_ILVLH_D_2(in2_h, in2_l, in3_h, in3_l, out2_h, out2_l, out3_h, out3_l); \ ++} ++ ++#define LASX_ILVLH_D_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l, \ ++ out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l) \ ++{ \ ++ LASX_ILVLH_D_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l); \ ++ LASX_ILVLH_D_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l); \ ++} ++ ++/* Description : Interleave double word elements from vectors ++ * (128-bit symmetry version) ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out_h, out_l, ~ ++ * Details : Low half of double word elements of every 128-bit of in_l and ++ * low half of double word elements of every 128-bit of in_h are ++ * interleaved and copied to out_l. ++ * High half of double word elements of every 128-bit of in_l and ++ * high half of double word elements of every 128-bit of in_h are ++ * interleaved and copied to out_h. ++ * Similar for other pairs. ++ * Example : see LASX_ILVLH_W_128SV(in_h, in_l, out_h, out_l) ++ */ ++#define LASX_ILVLH_D_128SV(in_h, in_l, out_h, out_l) \ ++{ \ ++ LASX_ILVL_D_128SV(in_h, in_l, out_l); \ ++ LASX_ILVH_D_128SV(in_h, in_l, out_h); \ ++} ++ ++#define LASX_ILVLH_D_2_128SV(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l) \ ++{ \ ++ LASX_ILVLH_D_128SV(in0_h, in0_l, out0_h, out0_l); \ ++ LASX_ILVLH_D_128SV(in1_h, in1_l, out1_h, out1_l); \ ++} ++ ++#define LASX_ILVLH_D_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l) \ ++{ \ ++ LASX_ILVLH_D_2_128SV(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l); \ ++ LASX_ILVLH_D_2_128SV(in2_h, in2_l, in3_h, in3_l, out2_h, out2_l, out3_h, out3_l); \ ++} ++ ++#define LASX_ILVLH_D_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l, \ ++ out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l) \ ++{ \ ++ LASX_ILVLH_D_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l); \ ++ LASX_ILVLH_D_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l); \ ++} ++ ++/* Description : Immediate number of columns to slide with zero ++ * Arguments : Inputs - in0, in1, slide_val, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Byte elements from every 128-bit of in0 vector ++ * are slide into out0 by number of elements ++ * specified by slide_val. ++ * Example : LASX_SLDI_B_0_128SV(in0, out0, slide_val) ++ * in0: 1, 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, ++ * 19,20,21,22,23,24,25,26,27,28,29,30,31,32 ++ * out0: 4, 5,6,7,8,9,10,11,12,13,14,15,16,0,0,0,20,21, ++ * 22,23,24,25,26,27,28,29,30,31,32,0,0,0 ++ * slide_val: 3 ++ */ ++#define LASX_SLDI_B_0_128SV(in0, out0, slide_val) \ ++{ \ ++ out0 = __lasx_xvbsrl_v(in0, slide_val); \ ++} ++ ++#define LASX_SLDI_B_2_0_128SV(in0, in1, out0, out1, slide_val) \ ++{ \ ++ LASX_SLDI_B_0_128SV(in0, out0, slide_val); \ ++ LASX_SLDI_B_0_128SV(in1, out1, slide_val); \ ++} ++ ++#define LASX_SLDI_B_4_0_128SV(in0, in1, in2, in3, \ ++ out0, out1, out2, out3, slide_val) \ ++{ \ ++ LASX_SLDI_B_2_0_128SV(in0, in1, out0, out1, slide_val); \ ++ LASX_SLDI_B_2_0_128SV(in2, in3, out2, out3, slide_val); \ ++} ++ ++/* Description : Pack even byte elements of vector pairs ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Even byte elements of in_l are copied to the low half of ++ * out0. Even byte elements of in_h are copied to the high ++ * half of out0. ++ * Similar for other pairs. ++ * Example : see LASX_PCKEV_W(in_h, in_l, out0) ++ */ ++#define LASX_PCKEV_B(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvpickev_b(in_h, in_l); \ ++ out0 = __lasx_xvpermi_d(out0, 0xd8); \ ++} ++ ++#define LASX_PCKEV_B_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_PCKEV_B(in0_h, in0_l, out0); \ ++ LASX_PCKEV_B(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_PCKEV_B_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_PCKEV_B_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_PCKEV_B_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++#define LASX_PCKEV_B_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_PCKEV_B_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3); \ ++ LASX_PCKEV_B_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, \ ++ in7_h, in7_l, out4, out5, out6, out7); \ ++} ++ ++/* Description : Pack even byte elements of vector pairs ++ * (128-bit symmetry version) ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Even byte elements of in_l are copied to the low half of ++ * out0. Even byte elements of in_h are copied to the high ++ * half of out0. ++ * Similar for other pairs. ++ * Example : see LASX_PCKEV_W_128SV(in_h, in_l, out0) ++ */ ++#define LASX_PCKEV_B_128SV(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvpickev_b(in_h, in_l); \ ++} ++ ++#define LASX_PCKEV_B_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_PCKEV_B_128SV(in0_h, in0_l, out0); \ ++ LASX_PCKEV_B_128SV(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_PCKEV_B_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_PCKEV_B_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_PCKEV_B_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++#define LASX_PCKEV_B_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, in4_h, in4_l, in5_h, in5_l, \ ++ in6_h, in6_l, in7_h, in7_l, out0, out1, \ ++ out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_PCKEV_B_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3); \ ++ LASX_PCKEV_B_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, \ ++ in7_h, in7_l, out4, out5, out6, out7); \ ++} ++ ++/* Description : Pack even half word elements of vector pairs ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Even half word elements of in_l are copied to the low ++ * half of out0. Even half word elements of in_h are ++ * copied to the high half of out0. ++ * Example : see LASX_PCKEV_W(in_h, in_l, out0) ++ */ ++#define LASX_PCKEV_H(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvpickev_h(in_h, in_l); \ ++ out0 = __lasx_xvpermi_d(out0, 0xd8); \ ++} ++ ++#define LASX_PCKEV_H_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_PCKEV_H(in0_h, in0_l, out0); \ ++ LASX_PCKEV_H(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_PCKEV_H_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_PCKEV_H_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_PCKEV_H_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++#define LASX_PCKEV_H_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_PCKEV_H_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3); \ ++ LASX_PCKEV_H_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, \ ++ in7_h, in7_l, out4, out5, out6, out7); \ ++} ++ ++/* Description : Pack even half word elements of vector pairs ++ * (128-bit symmetry version) ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Even half word elements of in_l are copied to the low ++ * half of out0. Even half word elements of in_h are ++ * copied to the high half of out0. ++ * Example : see LASX_PCKEV_W_128SV(in_h, in_l, out0) ++ */ ++#define LASX_PCKEV_H_128SV(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvpickev_h(in_h, in_l); \ ++} ++ ++#define LASX_PCKEV_H_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_PCKEV_H_128SV(in0_h, in0_l, out0); \ ++ LASX_PCKEV_H_128SV(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_PCKEV_H_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_PCKEV_H_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_PCKEV_H_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++#define LASX_PCKEV_H_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, in4_h, in4_l, in5_h, in5_l, \ ++ in6_h, in6_l, in7_h, in7_l, out0, out1, \ ++ out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_PCKEV_H_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3); \ ++ LASX_PCKEV_H_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, \ ++ in7_h, in7_l, out4, out5, out6, out7); \ ++} ++ ++/* Description : Pack even word elements of vector pairs ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Even word elements of in_l are copied to ++ * the low half of out0. Even word elements ++ * of in_h are copied to the high half of out0. ++ * Example : LASX_PCKEV_W(in_h, in_l, out0) ++ * in_h: -1, -2, -3, -4, -5, -6, -7, -8 ++ * in_l: 1, 2, 3, 4, 5, 6, 7, 8 ++ * out0: 1, 3, 5, 7, -1, -3, -5, -7 ++ */ ++#define LASX_PCKEV_W(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvpickev_w(in_h, in_l); \ ++ out0 = __lasx_xvpermi_d(out0, 0xd8); \ ++} ++ ++#define LASX_PCKEV_W_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_PCKEV_W(in0_h, in0_l, out0); \ ++ LASX_PCKEV_W(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_PCKEV_W_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_PCKEV_W_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_PCKEV_W_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++#define LASX_PCKEV_W_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_PCKEV_W_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3); \ ++ LASX_PCKEV_W_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, \ ++ in7_h, in7_l, out4, out5, out6, out7); \ ++} ++ ++/* Description : Pack even word elements of vector pairs ++ * (128-bit symmetry version) ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Even word elements of in_l are copied to ++ * the low half of out0. Even word elements ++ * of in_h are copied to the high half of out0. ++ * Example : LASX_PCKEV_W_128SV(in_h, in_l, out0) ++ * in_h: -1, -2, -3, -4, -5, -6, -7, -8 ++ * in_l: 1, 2, 3, 4, 5, 6, 7, 8 ++ * out0: 1, 3, -1, -3, 5, 7, -5, -7 ++ */ ++#define LASX_PCKEV_W_128SV(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvpickev_w(in_h, in_l); \ ++} ++ ++#define LASX_PCKEV_W_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_PCKEV_W_128SV(in0_h, in0_l, out0); \ ++ LASX_PCKEV_W_128SV(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_PCKEV_W_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_PCKEV_W_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_PCKEV_W_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++#define LASX_PCKEV_W_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, in4_h, in4_l, in5_h, in5_l, \ ++ in6_h, in6_l, in7_h, in7_l, out0, out1, \ ++ out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_PCKEV_W_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3); \ ++ LASX_PCKEV_W_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, \ ++ in7_h, in7_l, out4, out5, out6, out7); \ ++} ++ ++/* Description : Pack even half word elements of vector pairs ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Even half word elements of in_l are copied to the low ++ * half of out0. Even half word elements of in_h are ++ * copied to the high half of out0. ++ * Example : See LASX_PCKEV_W(in_h, in_l, out0) ++ */ ++#define LASX_PCKEV_D(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvpickev_d(in_h, in_l); \ ++ out0 = __lasx_xvpermi_d(out0, 0xd8); \ ++} ++ ++#define LASX_PCKEV_D_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_PCKEV_D(in0_h, in0_l, out0) \ ++ LASX_PCKEV_D(in1_h, in1_l, out1) \ ++} ++ ++#define LASX_PCKEV_D_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_PCKEV_D_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++ LASX_PCKEV_D_2(in2_h, in2_l, in3_h, in3_l, out2, out3) \ ++} ++ ++/* Description : Pack even half word elements of vector pairs ++ * (128-bit symmetry version) ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Even half word elements of in_l are copied to the low ++ * half of out0. Even half word elements of in_h are ++ * copied to the high half of out0. ++ * Example : LASX_PCKEV_D_128SV(in_h, in_l, out0) ++ * in_h : 1, 2, 3, 4 ++ * in_l : 5, 6, 7, 8 ++ * out0 : 5, 1, 7, 3 ++ */ ++#define LASX_PCKEV_D_128SV(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvpickev_d(in_h, in_l); \ ++} ++ ++#define LASX_PCKEV_D_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_PCKEV_D_128SV(in0_h, in0_l, out0) \ ++ LASX_PCKEV_D_128SV(in1_h, in1_l, out1) \ ++} ++ ++#define LASX_PCKEV_D_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_PCKEV_D_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++ LASX_PCKEV_D_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3) \ ++} ++ ++/* Description : Pack even quad word elements of vector pairs ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Even quad elements of in_l are copied to the low ++ * half of out0. Even quad elements of in_h are ++ * copied to the high half of out0. ++ * Similar for other pairs. ++ * Example : see LASX_PCKEV_W(in_h, in_l, out0) ++ */ ++#define LASX_PCKEV_Q(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvpermi_q(in_h, in_l, 0x20); \ ++} ++ ++#define LASX_PCKEV_Q_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_PCKEV_Q(in0_h, in0_l, out0); \ ++ LASX_PCKEV_Q(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_PCKEV_Q_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_PCKEV_Q_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_PCKEV_Q_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++#define LASX_PCKEV_Q_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_PCKEV_Q_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3); \ ++ LASX_PCKEV_Q_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, \ ++ in7_h, in7_l, out4, out5, out6, out7); \ ++} ++ ++/* Description : Pack odd byte elements of vector pairs ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Odd byte elements of in_l are copied to the low half of ++ * out0. Odd byte elements of in_h are copied to the high ++ * half of out0. ++ * Similar for other pairs. ++ * Example : see LASX_PCKOD_W(in_h, in_l, out0) ++ */ ++#define LASX_PCKOD_B(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvpickod_b(in_h, in_l); \ ++ out0 = __lasx_xvpermi_d(out0, 0xd8); \ ++} ++ ++#define LASX_PCKOD_B_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_PCKOD_B(in0_h, in0_l, out0); \ ++ LASX_PCKOD_B(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_PCKOD_B_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_PCKOD_B_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_PCKOD_B_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++#define LASX_PCKOD_B_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_PCKOD_B_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3); \ ++ LASX_PCKOD_B_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, \ ++ in7_h, in7_l, out4, out5, out6, out7); \ ++} ++ ++/* Description : Pack odd half word elements of vector pairs ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Odd half word elements of in_l are copied to the low ++ * half of out0. Odd half word elements of in_h are copied ++ * to the high half of out0. ++ * Example : see LASX_PCKOD_W(in_h, in_l, out0) ++ */ ++#define LASX_PCKOD_H(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvpickod_h(in_h, in_l); \ ++ out0 = __lasx_xvpermi_d(out0, 0xd8); \ ++} ++ ++#define LASX_PCKOD_H_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_PCKOD_H(in0_h, in0_l, out0); \ ++ LASX_PCKOD_H(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_PCKOD_H_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_PCKOD_H_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_PCKOD_H_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++#define LASX_PCKOD_H_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_PCKOD_H_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3); \ ++ LASX_PCKOD_H_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, \ ++ in7_h, in7_l, out4, out5, out6, out7); \ ++} ++ ++/* Description : Pack odd word elements of vector pairs ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Odd word elements of in_l are copied to the low half of out0. ++ * Odd word elements of in_h are copied to the high half of out0. ++ * Example : LASX_PCKOD_W(in_h, in_l, out0) ++ * in_h: -1, -2, -3, -4, -5, -6, -7, -8 ++ * in_l: 1, 2, 3, 4, 5, 6, 7, 8 ++ * out0: 2, 4, 6, 8, -2, -4, -6, -8 ++ */ ++#define LASX_PCKOD_W(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvpickod_w(in_h, in_l); \ ++ out0 = __lasx_xvpermi_d(out0, 0xd8); \ ++} ++ ++#define LASX_PCKOD_W_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_PCKOD_W(in0_h, in0_l, out0); \ ++ LASX_PCKOD_W(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_PCKOD_W_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_PCKOD_W_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_PCKOD_W_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++#define LASX_PCKOD_W_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_PCKOD_W_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3); \ ++ LASX_PCKOD_W_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, \ ++ in7_h, in7_l, out4, out5, out6, out7); \ ++} ++ ++/* Description : Pack odd half word elements of vector pairs ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Odd half word elements of in_l are copied to the low ++ * half of out0. Odd half word elements of in_h are ++ * copied to the high half of out0. ++ * Example : See LASX_PCKOD_W(in_h, in_l, out0) ++ */ ++#define LASX_PCKOD_D(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvpickod_d(in_h, in_l); \ ++ out0 = __lasx_xvpermi_d(out0, 0xd8); \ ++} ++ ++#define LASX_PCKOD_D_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_PCKOD_D(in0_h, in0_l, out0) \ ++ LASX_PCKOD_D(in1_h, in1_l, out1) \ ++} ++ ++#define LASX_PCKOD_D_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_PCKOD_D_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++ LASX_PCKOD_D_2(in2_h, in2_l, in3_h, in3_l, out2, out3) \ ++} ++ ++/* Description : Pack odd quad word elements of vector pairs ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Odd quad elements of in0_h are copied to the high half of ++ * out0 & odd quad elements of in0_l are copied to the low ++ * half of out0. ++ * Odd quad elements of in1_h are copied to the high half of ++ * out1 & odd quad elements of in1_l are copied to the low ++ * half of out1. ++ * LASX_PCKOD_Q(in_h, in_l, out0) ++ * in_h: 0,0,0,0, 0,0,0,0, 19,10,11,12, 13,14,15,16 ++ * in_l: 0,0,0,0, 0,0,0,0, 1,2,3,4, 5,6,7,8 ++ * out0: 1,2,3,4, 5,6,7,8, 19,10,11,12, 13,14,15,16 ++ */ ++#define LASX_PCKOD_Q(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvpermi_q(in_h, in_l, 0x31); \ ++} ++ ++#define LASX_PCKOD_Q_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_PCKOD_Q(in0_h, in0_l, out0); \ ++ LASX_PCKOD_Q(in1_h, in1_l, out1); \ ++} ++ ++#define LASX_PCKOD_Q_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_PCKOD_Q_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ ++ LASX_PCKOD_Q_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ ++} ++ ++#define LASX_PCKOD_Q_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ ++ in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_PCKOD_Q_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3); \ ++ LASX_PCKOD_Q_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, \ ++ in7_h, in7_l, out4, out5, out6, out7); \ ++} ++ ++/* Description : Pack odd half word elements of vector pairsi ++ * (128-bit symmetry version) ++ * Arguments : Inputs - in_h, in_l, ~ ++ * Outputs - out0, out1, ~ ++ * Details : Odd half word elements of in_l are copied to the low ++ * half of out0 of . Odd half word elements of in_h are ++ * copied to the high half of out0. ++ * Example : LASX_PCKOD_D_128SV(in_h, in_l, out0) ++ * in_h : 1, 2, 3, 4 ++ * in_l : 5, 6, 7, 8 ++ * out0 : 6, 2, 8, 4 ++ */ ++#define LASX_PCKOD_D_128SV(in_h, in_l, out0) \ ++{ \ ++ out0 = __lasx_xvpickod_d(in_h, in_l); \ ++} ++ ++#define LASX_PCKOD_D_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++{ \ ++ LASX_PCKOD_D_128SV(in0_h, in0_l, out0) \ ++ LASX_PCKOD_D_128SV(in1_h, in1_l, out1) \ ++} ++ ++#define LASX_PCKOD_D_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, out0, out1, out2, out3) \ ++{ \ ++ LASX_PCKOD_D_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ ++ LASX_PCKOD_D_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3) \ ++} ++ ++ ++/* Description : Transposes 8x8 block with half word elements in vectors. ++ * Arguments : Inputs - in0, in1, ~ ++ * Outputs - out0, out1, ~ ++ * Details : The rows of the matrix become columns, and the columns become rows. ++ * Example : LASX_TRANSPOSE8x8_H_128SV ++ * in0 : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * in1 : 8,2,3,4, 5,6,7,8, 8,2,3,4, 5,6,7,8 ++ * in2 : 8,2,3,4, 5,6,7,8, 8,2,3,4, 5,6,7,8 ++ * in3 : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * in4 : 9,2,3,4, 5,6,7,8, 9,2,3,4, 5,6,7,8 ++ * in5 : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * in6 : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * in7 : 9,2,3,4, 5,6,7,8, 9,2,3,4, 5,6,7,8 ++ * ++ * out0 : 1,8,8,1, 9,1,1,9, 1,8,8,1, 9,1,1,9 ++ * out1 : 2,2,2,2, 2,2,2,2, 2,2,2,2, 2,2,2,2 ++ * out2 : 3,3,3,3, 3,3,3,3, 3,3,3,3, 3,3,3,3 ++ * out3 : 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4 ++ * out4 : 5,5,5,5, 5,5,5,5, 5,5,5,5, 5,5,5,5 ++ * out5 : 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,6,6,6 ++ * out6 : 7,7,7,7, 7,7,7,7, 7,7,7,7, 7,7,7,7 ++ * out7 : 8,8,8,8, 8,8,8,8, 8,8,8,8, 8,8,8,8 ++ */ ++#define LASX_TRANSPOSE8x8_H_128SV(in0, in1, in2, in3, in4, in5, in6, in7, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ __m256i s0_m, s1_m; \ ++ __m256i tmp0_m, tmp1_m, tmp2_m, tmp3_m; \ ++ __m256i tmp4_m, tmp5_m, tmp6_m, tmp7_m; \ ++ \ ++ LASX_ILVL_H_2_128SV(in6, in4, in7, in5, s0_m, s1_m); \ ++ LASX_ILVLH_H_128SV(s1_m, s0_m, tmp1_m, tmp0_m); \ ++ LASX_ILVH_H_2_128SV(in6, in4, in7, in5, s0_m, s1_m); \ ++ LASX_ILVLH_H_128SV(s1_m, s0_m, tmp3_m, tmp2_m); \ ++ \ ++ LASX_ILVL_H_2_128SV(in2, in0, in3, in1, s0_m, s1_m); \ ++ LASX_ILVLH_H_128SV(s1_m, s0_m, tmp5_m, tmp4_m); \ ++ LASX_ILVH_H_2_128SV(in2, in0, in3, in1, s0_m, s1_m); \ ++ LASX_ILVLH_H_128SV(s1_m, s0_m, tmp7_m, tmp6_m); \ ++ \ ++ LASX_PCKEV_D_4_128SV(tmp0_m, tmp4_m, tmp1_m, tmp5_m, tmp2_m, tmp6_m, \ ++ tmp3_m, tmp7_m, out0, out2, out4, out6); \ ++ LASX_PCKOD_D_4_128SV(tmp0_m, tmp4_m, tmp1_m, tmp5_m, tmp2_m, tmp6_m, \ ++ tmp3_m, tmp7_m, out1, out3, out5, out7); \ ++} ++ ++/* Description : Transposes 8x8 block with word elements in vectors ++ * Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7 ++ * Outputs - out0, out1, out2, out3, out4, out5, out6, out7 ++ * Details : ++ */ ++#define LASX_TRANSPOSE8x8_W(in0, in1, in2, in3, in4, in5, in6, in7, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ __m256i s0_m, s1_m; \ ++ __m256i tmp0_m, tmp1_m, tmp2_m, tmp3_m; \ ++ __m256i tmp4_m, tmp5_m, tmp6_m, tmp7_m; \ ++ \ ++ LASX_ILVL_W_2_128SV(in2, in0, in3, in1, s0_m, s1_m); \ ++ LASX_ILVLH_W_128SV(s1_m, s0_m, tmp1_m, tmp0_m); \ ++ LASX_ILVH_W_2_128SV(in2, in0, in3, in1, s0_m, s1_m); \ ++ LASX_ILVLH_W_128SV(s1_m, s0_m, tmp3_m, tmp2_m); \ ++ \ ++ LASX_ILVL_W_2_128SV(in6, in4, in7, in5, s0_m, s1_m); \ ++ LASX_ILVLH_W_128SV(s1_m, s0_m, tmp5_m, tmp4_m); \ ++ LASX_ILVH_W_2_128SV(in6, in4, in7, in5, s0_m, s1_m); \ ++ LASX_ILVLH_W_128SV(s1_m, s0_m, tmp7_m, tmp6_m); \ ++ LASX_PCKEV_Q_4(tmp4_m, tmp0_m, tmp5_m, tmp1_m, tmp6_m, tmp2_m, \ ++ tmp7_m, tmp3_m, out0, out1, out2, out3); \ ++ LASX_PCKOD_Q_4(tmp4_m, tmp0_m, tmp5_m, tmp1_m, tmp6_m, tmp2_m, \ ++ tmp7_m, tmp3_m, out4, out5, out6, out7); \ ++} ++ ++/* Description : Transposes 2x2 block with quad word elements in vectors ++ * Arguments : Inputs - in0, in1 ++ * Outputs - out0, out1 ++ * Details : ++ */ ++#define LASX_TRANSPOSE2x2_Q(in0, in1, out0, out1) \ ++{ \ ++ __m256i tmp0; \ ++ tmp0 = __lasx_xvpermi_q(in1, in0, 0x02); \ ++ out1 = __lasx_xvpermi_q(in1, in0, 0x13); \ ++ out0 = tmp0; \ ++} ++ ++/* Description : Transposes 4x4 block with double word elements in vectors ++ * Arguments : Inputs - in0, in1, in2, in3 ++ * Outputs - out0, out1, out2, out3 ++ * Details : ++ */ ++#define LASX_TRANSPOSE4x4_D(in0, in1, in2, in3, out0, out1, out2, out3) \ ++{ \ ++ __m256i tmp0, tmp1, tmp2, tmp3; \ ++ LASX_ILVLH_D_2_128SV(in1, in0, in3, in2, tmp0, tmp1, tmp2, tmp3); \ ++ out0 = __lasx_xvpermi_q(tmp2, tmp0, 0x20); \ ++ out2 = __lasx_xvpermi_q(tmp2, tmp0, 0x31); \ ++ out1 = __lasx_xvpermi_q(tmp3, tmp1, 0x20); \ ++ out3 = __lasx_xvpermi_q(tmp3, tmp1, 0x31); \ ++} ++ ++/* Description : Transpose 4x4 block with half word elements in vectors ++ * Arguments : Inputs - in0, in1, in2, in3 ++ * Outputs - out0, out1, out2, out3 ++ * Return Type - signed halfword ++ */ ++#define LASX_TRANSPOSE4x4_H_128SV(in0, in1, in2, in3, out0, out1, out2, out3) \ ++{ \ ++ __m256i s0_m, s1_m; \ ++ \ ++ LASX_ILVL_H_2_128SV(in1, in0, in3, in2, s0_m, s1_m); \ ++ LASX_ILVLH_W_128SV(s1_m, s0_m, out2, out0); \ ++ out1 = __lasx_xvilvh_d(out0, out0); \ ++ out3 = __lasx_xvilvh_d(out2, out2); \ ++} ++ ++/* Description : Transposes input 8x8 byte block ++ * Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7 ++ * (input 8x8 byte block) ++ * Outputs - out0, out1, out2, out3, out4, out5, out6, out7 ++ * (output 8x8 byte block) ++ * Details : ++ */ ++#define LASX_TRANSPOSE8x8_B(in0, in1, in2, in3, in4, in5, in6, in7, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ __m256i tmp0_m, tmp1_m, tmp2_m, tmp3_m; \ ++ __m256i tmp4_m, tmp5_m, tmp6_m, tmp7_m; \ ++ LASX_ILVL_B_4_128SV(in2, in0, in3, in1, in6, in4, in7, in5, \ ++ tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ ++ LASX_ILVLH_B_128SV(tmp1_m, tmp0_m, tmp5_m, tmp4_m); \ ++ LASX_ILVLH_B_128SV(tmp3_m, tmp2_m, tmp7_m, tmp6_m); \ ++ LASX_ILVLH_W_128SV(tmp6_m, tmp4_m, out2, out0); \ ++ LASX_ILVLH_W_128SV(tmp7_m, tmp5_m, out6, out4); \ ++ LASX_SLDI_B_2_0_128SV(out0, out2, out1, out3, 8); \ ++ LASX_SLDI_B_2_0_128SV(out4, out6, out5, out7, 8); \ ++} ++ ++/* Description : Transposes input 16x8 byte block ++ * Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7, ++ * in8, in9, in10, in11, in12, in13, in14, in15 ++ * (input 16x8 byte block) ++ * Outputs - out0, out1, out2, out3, out4, out5, out6, out7 ++ * (output 8x16 byte block) ++ * Details : ++ */ ++#define LASX_TRANSPOSE16x8_B(in0, in1, in2, in3, in4, in5, in6, in7, \ ++ in8, in9, in10, in11, in12, in13, in14, in15, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ __m256i tmp0_m, tmp1_m, tmp2_m, tmp3_m; \ ++ __m256i tmp4_m, tmp5_m, tmp6_m, tmp7_m; \ ++ __m256i t0, t1, t2, t3, t4, t5, t6, t7; \ ++ LASX_ILVL_B_8_128SV(in2, in0, in3, in1, in6, in4, in7, in5, \ ++ in10, in8, in11, in9, in14, in12, in15, in13, \ ++ tmp0_m, tmp1_m, tmp2_m, tmp3_m, \ ++ tmp4_m, tmp5_m, tmp6_m, tmp7_m); \ ++ LASX_ILVLH_B_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, t1, t0, t3, t2); \ ++ LASX_ILVLH_B_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, t5, t4, t7, t6); \ ++ LASX_ILVLH_W_2_128SV(t2, t0, t3, t1, tmp2_m, tmp0_m, tmp6_m, tmp4_m); \ ++ LASX_ILVLH_W_2_128SV(t6, t4, t7, t5, tmp3_m, tmp1_m, tmp7_m, tmp5_m); \ ++ LASX_ILVLH_D_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, out1, out0, out3, out2); \ ++ LASX_ILVLH_D_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, out5, out4, out7, out6); \ ++} ++ ++/* Description : Transposes input 16x8 byte block ++ * Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7, ++ * in8, in9, in10, in11, in12, in13, in14, in15 ++ * (input 16x8 byte block) ++ * Outputs - out0, out1, out2, out3, out4, out5, out6, out7 ++ * (output 8x16 byte block) ++ * Details : The rows of the matrix become columns, and the columns become rows. ++ * Example : LASX_TRANSPOSE16x8_H ++ * in0 : 1,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * in1 : 2,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * in2 : 3,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * in3 : 4,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * in4 : 5,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * in5 : 6,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * in6 : 7,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * in7 : 8,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * in8 : 9,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * in9 : 1,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * in10 : 0,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * in11 : 2,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * in12 : 3,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * in13 : 7,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * in14 : 5,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * in15 : 6,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * ++ * out0 : 1,2,3,4,5,6,7,8,9,1,0,2,3,7,5,6 ++ * out1 : 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ++ * out2 : 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ++ * out3 : 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 ++ * out4 : 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ++ * out5 : 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ++ * out6 : 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ++ * out7 : 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ++ */ ++#define LASX_TRANSPOSE16x8_H(in0, in1, in2, in3, in4, in5, in6, in7, \ ++ in8, in9, in10, in11, in12, in13, in14, in15, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ __m256i tmp0_m, tmp1_m, tmp2_m, tmp3_m; \ ++ __m256i tmp4_m, tmp5_m, tmp6_m, tmp7_m; \ ++ __m256i t0, t1, t2, t3, t4, t5, t6, t7; \ ++ LASX_ILVL_H_8_128SV(in2, in0, in3, in1, in6, in4, in7, in5, \ ++ in10, in8, in11, in9, in14, in12, in15, in13, \ ++ tmp0_m, tmp1_m, tmp2_m, tmp3_m, \ ++ tmp4_m, tmp5_m, tmp6_m, tmp7_m); \ ++ LASX_ILVLH_H_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, t1, t0, t3, t2); \ ++ LASX_ILVLH_H_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, t5, t4, t7, t6); \ ++ LASX_ILVLH_D_2_128SV(t2, t0, t3, t1, tmp2_m, tmp0_m, tmp6_m, tmp4_m); \ ++ LASX_ILVLH_D_2_128SV(t6, t4, t7, t5, tmp3_m, tmp1_m, tmp7_m, tmp5_m); \ ++ LASX_PCKEV_Q_2(tmp1_m, tmp0_m, tmp3_m, tmp2_m, out0, out1); \ ++ LASX_PCKEV_Q_2(tmp5_m, tmp4_m, tmp7_m, tmp6_m, out2, out3); \ ++ \ ++ LASX_ILVH_H_8_128SV(in2, in0, in3, in1, in6, in4, in7, in5, \ ++ in10, in8, in11, in9, in14, in12, in15, in13, \ ++ tmp0_m, tmp1_m, tmp2_m, tmp3_m, \ ++ tmp4_m, tmp5_m, tmp6_m, tmp7_m); \ ++ LASX_ILVLH_H_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, t1, t0, t3, t2); \ ++ LASX_ILVLH_H_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, t5, t4, t7, t6); \ ++ LASX_ILVLH_D_2_128SV(t2, t0, t3, t1, tmp2_m, tmp0_m, tmp6_m, tmp4_m); \ ++ LASX_ILVLH_D_2_128SV(t6, t4, t7, t5, tmp3_m, tmp1_m, tmp7_m, tmp5_m); \ ++ LASX_PCKEV_Q_2(tmp1_m, tmp0_m, tmp3_m, tmp2_m, out4, out5); \ ++ LASX_PCKEV_Q_2(tmp5_m, tmp4_m, tmp7_m, tmp6_m, out6, out7); \ ++} ++ ++/* Description : Clips all signed word elements of input vector ++ * between 0 & 255 ++ * Arguments : Inputs - in (input vector) ++ * Outputs - out_m (output vector with clipped elements) ++ * Return Type - signed word ++ */ ++#define LASX_CLIP_W_0_255(in, out_m) \ ++{ \ ++ out_m = __lasx_xvmaxi_w(in, 0); \ ++ out_m = __lasx_xvsat_wu(out_m, 7); \ ++} ++ ++#define LASX_CLIP_W_0_255_2(in0, in1, out0, out1) \ ++{ \ ++ LASX_CLIP_W_0_255(in0, out0); \ ++ LASX_CLIP_W_0_255(in1, out1); \ ++} ++ ++#define LASX_CLIP_W_0_255_4(in0, in1, in2, in3, out0, out1, out2, out3) \ ++{ \ ++ LASX_CLIP_W_0_255_2(in0, in1, out0, out1); \ ++ LASX_CLIP_W_0_255_2(in2, in3, out2, out3); \ ++} ++ ++/* Description : Clips all signed halfword elements of input vector ++ * between 0 & 255 ++ * Arguments : Inputs - in (input vector) ++ * Outputs - out_m (output vector with clipped elements) ++ * Return Type - signed halfword ++ */ ++#define LASX_CLIP_H_0_255(in, out_m) \ ++{ \ ++ out_m = __lasx_xvmaxi_h(in, 0); \ ++ out_m = __lasx_xvsat_hu(out_m, 7); \ ++} ++ ++#define LASX_CLIP_H_0_255_2(in0, in1, out0, out1) \ ++{ \ ++ LASX_CLIP_H_0_255(in0, out0); \ ++ LASX_CLIP_H_0_255(in1, out1); \ ++} ++ ++#define LASX_CLIP_H_0_255_4(in0, in1, in2, in3, out0, out1, out2, out3) \ ++{ \ ++ LASX_CLIP_H_0_255_2(in0, in1, out0, out1); \ ++ LASX_CLIP_H_0_255_2(in2, in3, out2, out3); \ ++} ++ ++/* Description : Clips all halfword elements of input vector between min & max ++ * out = ((in) < (min)) ? (min) : (((in) > (max)) ? (max) : (in)) ++ * Arguments : Inputs - in (input vector) ++ * - min (min threshold) ++ * - max (max threshold) ++ * Outputs - in (output vector with clipped elements) ++ * Return Type - signed halfword ++ */ ++#define LASX_CLIP_H(in, min, max) \ ++{ \ ++ in = __lasx_xvmax_h(min, in); \ ++ in = __lasx_xvmin_h(max, in); \ ++} ++ ++/* Description : Dot product and addition of 3 signed byte input vectors ++ * Arguments : Inputs - in0, in1, in2, coeff0, coeff1, coeff2 ++ * Outputs - out0_m ++ * Return Type - signed halfword ++ * Details : Dot product of 'in0' with 'coeff0' ++ * Dot product of 'in1' with 'coeff1' ++ * Dot product of 'in2' with 'coeff2' ++ * Addition of all the 3 vector results ++ * out0_m = (in0 * coeff0) + (in1 * coeff1) + (in2 * coeff2) ++ */ ++#define LASX_DP2ADD_H_B_3(in0, in1, in2, out0_m, coeff0, coeff1, coeff2) \ ++{ \ ++ LASX_DP2_H_B(in0, coeff0, out0_m); \ ++ LASX_DP2ADD_H_B(out0_m, in1, coeff1, out0_m); \ ++ LASX_DP2ADD_H_B(out0_m, in2, coeff2, out0_m); \ ++} ++ ++/* Description : Each byte element is logically xor'ed with immediate 128 ++ * Arguments : Inputs - in0, in1 ++ * Outputs - in0, in1 (in-place) ++ * Details : Each unsigned byte element from input vector 'in0' is ++ * logically xor'ed with 128 and result is in-place stored in ++ * 'in0' vector ++ * Each unsigned byte element from input vector 'in1' is ++ * logically xor'ed with 128 and result is in-place stored in ++ * 'in1' vector ++ * Similar for other pairs ++ * Example : LASX_XORI_B_128(in0) ++ * in0: 9,10,11,12, 13,14,15,16, 121,122,123,124, 125,126,127,128, 17,18,19,20, 21,22,23,24, ++ * 248,249,250,251, 252,253,254,255, ++ * in0: 137,138,139,140, 141,142,143,144, 249,250,251,252, 253,254,255,0, 145,146,147,148, ++ * 149,150,151,152, 120,121,122,123, 124,125,126,127 ++ */ ++#define LASX_XORI_B_128(in0) \ ++{ \ ++ in0 = __lasx_xvxori_b(in0, 128); \ ++} ++#define LASX_XORI_B_2_128(in0, in1) \ ++{ \ ++ LASX_XORI_B_128(in0); \ ++ LASX_XORI_B_128(in1); \ ++} ++#define LASX_XORI_B_4_128(in0, in1, in2, in3) \ ++{ \ ++ LASX_XORI_B_2_128(in0, in1); \ ++ LASX_XORI_B_2_128(in2, in3); \ ++} ++#define LASX_XORI_B_8_128(in0, in1, in2, in3, in4, in5, in6, in7) \ ++{ \ ++ LASX_XORI_B_4_128(in0, in1, in2, in3); \ ++ LASX_XORI_B_4_128(in4, in5, in6, in7); \ ++} ++ ++/* Description : Indexed halfword element values are replicated to all ++ * elements in output vector. If 'indx0 < 8' use SPLATI_R_*, ++ * if 'indx0 >= 8' use SPLATI_L_* ++ * Arguments : Inputs - in, idx0, idx1 ++ * Outputs - out0, out1 ++ * Details : 'idx0' element value from 'in' vector is replicated to all ++ * elements in 'out0' vector ++ * Valid index range for halfword operation is 0-7 ++ */ ++#define LASX_SPLATI_L_H(in, idx0, out0) \ ++{ \ ++ in = __lasx_xvpermi_q(in, in, 0x02); \ ++ out0 = __lasx_xvrepl128vei_h(in, idx0); \ ++} ++#define LASX_SPLATI_H_H(in, idx0, out0) \ ++{ \ ++ in = __lasx_xvpermi_q(in, in, 0X13); \ ++ out0 = __lasx_xvrepl128vei_h(in, idx0 - 8); \ ++} ++#define LASX_SPLATI_L_H_2(in, idx0, idx1, out0, out1) \ ++{ \ ++ LASX_SPLATI_L_H(in, idx0, out0); \ ++ out1 = __lasx_xvrepl128vei_h(in, idx1); \ ++} ++#define LASX_SPLATI_H_H_2(in, idx0, idx1, out0, out1) \ ++{ \ ++ LASX_SPLATI_H_H(in, idx0, out0); \ ++ out1 = __lasx_xvrepl128vei_h(in, idx1 - 8); \ ++} ++#define LASX_SPLATI_L_H_4(in, idx0, idx1, idx2, idx3, \ ++ out0, out1, out2, out3) \ ++{ \ ++ LASX_SPLATI_L_H_2(in, idx0, idx1, out0, out1); \ ++ out2 = __lasx_xvrepl128vei_h(in, idx2); \ ++ out3 = __lasx_xvrepl128vei_h(in, idx3); \ ++} ++#define SPLATI_H_H_4(in, idx0, idx1, idx2, idx3, \ ++ out0, out1, out2, out3) \ ++{ \ ++ LASX_SPLATI_H_H_2(in, idx0, idx1, out0, out1); \ ++ out2 = __lasx_xvrepl128vei_h(in, idx2 - 8); \ ++ out3 = __lasx_xvrepl128vei_h(in, idx3 - 8); \ ++} ++ ++/* Description : Pack even elements of input vectors & xor with 128 ++ * Arguments : Inputs - in0, in1 ++ * Outputs - out_m ++ * Details : Signed byte even elements from 'in0' and 'in1' are packed ++ * together in one vector and the resulted vector is xor'ed with ++ * 128 to shift the range from signed to unsigned byte ++ */ ++#define LASX_PICKEV_XORI128_B(in0, in1, out_m) \ ++{ \ ++ out_m = __lasx_xvpickev_b(in1, in0); \ ++ out_m = __lasx_xvxori_b(out_m, 128); \ ++} ++ ++/* Description : Shift right logical all byte elements of vector. ++ * Arguments : Inputs - in, shift ++ * Outputs - in (in place) ++ * Details : Each element of vector in is shifted right logical by ++ * number of bits respective element holds in vector shift and ++ * result is in place written to in. ++ * Here, shift is a vector passed in. ++ * Example : See LASX_SRL_W(in, shift) ++ */ ++#define LASX_SRL_B(in, shift) \ ++{ \ ++ in = __lasx_xvsrl_b(in, shift); \ ++} ++ ++#define LASX_SRL_B_2(in0, in1, shift) \ ++{ \ ++ LASX_SRL_B(in0, shift); \ ++ LASX_SRL_B(in1, shift); \ ++} ++ ++#define LASX_SRL_B_4(in0, in1, in2, in3, shift) \ ++{ \ ++ LASX_SRL_B_2(in0, in1, shift); \ ++ LASX_SRL_B_2(in2, in3, shift); \ ++} ++ ++/* Description : Shift right logical all halfword elements of vector. ++ * Arguments : Inputs - in, shift ++ * Outputs - in (in place) ++ * Details : Each element of vector in is shifted right logical by ++ * number of bits respective element holds in vector shift and ++ * result is in place written to in. ++ * Here, shift is a vector passed in. ++ * Example : See LASX_SRL_W(in, shift) ++ */ ++#define LASX_SRL_H(in, shift) \ ++{ \ ++ in = __lasx_xvsrl_h(in, shift); \ ++} ++ ++#define LASX_SRL_H_2(in0, in1, shift) \ ++{ \ ++ LASX_SRL_H(in0, shift); \ ++ LASX_SRL_H(in1, shift); \ ++} ++ ++#define LASX_SRL_H_4(in0, in1, in2, in3, shift) \ ++{ \ ++ LASX_SRL_H_2(in0, in1, shift); \ ++ LASX_SRL_H_2(in2, in3, shift); \ ++} ++ ++/* Description : Shift right logical all word elements of vector. ++ * Arguments : Inputs - in, shift ++ * Outputs - in (in place) ++ * Details : Each element of vector in is shifted right logical by ++ * number of bits respective element holds in vector shift and ++ * result is in place written to in. ++ * Here, shift is a vector passed in. ++ * Example : LASX_SRL_W(in, shift) ++ * in : 1, 3, 2, -4, 0, -2, 25, 0 ++ * shift : 1, 1, 1, 1, 2, 2, 2, 2 ++ * in(output) : 0, 1, 1, 32766, 0, 16383, 6, 0 ++ */ ++#define LASX_SRL_W(in, shift) \ ++{ \ ++ in = __lasx_xvsrl_w(in, shift); \ ++} ++ ++#define LASX_SRL_W_2(in0, in1, shift) \ ++{ \ ++ LASX_SRL_W(in0, shift); \ ++ LASX_SRL_W(in1, shift); \ ++} ++ ++#define LASX_SRL_W_4(in0, in1, in2, in3, shift) \ ++{ \ ++ LASX_SRL_W_2(in0, in1, shift); \ ++ LASX_SRL_W_2(in2, in3, shift); \ ++} ++ ++/* Description : Shift right logical all double word elements of vector. ++ * Arguments : Inputs - in, shift ++ * Outputs - in (in place) ++ * Details : Each element of vector in is shifted right logical by ++ * number of bits respective element holds in vector shift and ++ * result is in place written to in. ++ * Here, shift is a vector passed in. ++ * Example : See LASX_SRL_W(in, shift) ++ */ ++#define LASX_SRL_D(in, shift) \ ++{ \ ++ in = __lasx_xvsrl_d(in, shift); \ ++} ++ ++#define LASX_SRL_D_2(in0, in1, shift) \ ++{ \ ++ LASX_SRL_D(in0, shift); \ ++ LASX_SRL_D(in1, shift); \ ++} ++ ++#define LASX_SRL_D_4(in0, in1, in2, in3, shift) \ ++{ \ ++ LASX_SRL_D_2(in0, in1, shift); \ ++ LASX_SRL_D_2(in2, in3, shift); \ ++} ++ ++ ++/* Description : Shift right arithmetic rounded (immediate) ++ * Arguments : Inputs - in0, in1, shift ++ * Outputs - in0, in1, (in place) ++ * Details : Each element of vector 'in0' is shifted right arithmetic by ++ * value in 'shift'. ++ * The last discarded bit is added to shifted value for rounding ++ * and the result is in place written to 'in0' ++ * Similar for other pairs ++ * Example : LASX_SRARI_H(in0, out0, shift) ++ * in0: 1,2,3,4, -5,-6,-7,-8, 19,10,11,12, 13,14,15,16 ++ * shift: 2 ++ * out0: 0,1,1,1, -1,-1,-2,-2, 5,3,3,3, 3,4,4,4 ++ */ ++#define LASX_SRARI_H(in0, out0, shift) \ ++{ \ ++ out0 = __lasx_xvsrari_h(in0, shift); \ ++} ++#define LASX_SRARI_H_2(in0, in1, out0, out1, shift) \ ++{ \ ++ LASX_SRARI_H(in0, out0, shift); \ ++ LASX_SRARI_H(in1, out1, shift); \ ++} ++#define LASX_SRARI_H_4(in0, in1, in2, in3, out0, out1, out2, out3, shift) \ ++{ \ ++ LASX_SRARI_H_2(in0, in1, out0, out1, shift); \ ++ LASX_SRARI_H_2(in2, in3, out2, out3, shift); \ ++} ++ ++/* Description : Shift right arithmetic (immediate) ++ * Arguments : Inputs - in0, in1, shift ++ * Outputs - in0, in1, (in place) ++ * Details : Each element of vector 'in0' is shifted right arithmetic by ++ * value in 'shift'. ++ * Similar for other pairs ++ * Example : see LASX_SRARI_H(in0, out0, shift) ++ */ ++#define LASX_SRAI_W(in0, out0, shift) \ ++{ \ ++ out0 = __lasx_xvsrai_w(in0, shift); \ ++} ++#define LASX_SRAI_W_2(in0, in1, out0, out1, shift) \ ++{ \ ++ LASX_SRAI_W(in0, out0, shift); \ ++ LASX_SRAI_W(in1, out1, shift); \ ++} ++#define LASX_SRAI_W_4(in0, in1, in2, in3, out0, out1, out2, out3, shift) \ ++{ \ ++ LASX_SRAI_W_2(in0, in1, out0, out1, shift); \ ++ LASX_SRAI_W_2(in2, in3, out2, out3, shift); \ ++} ++#define LASX_SRAI_W_8(in0, in1, in2, in3, in4, in5, in6, in7, \ ++ out0, out1, out2, out3, out4, out5, out6, out7, shift) \ ++{ \ ++ LASX_SRAI_W_4(in0, in1, in2, in3, out0, out1, out2, out3, shift); \ ++ LASX_SRAI_W_4(in4, in5, in6, in7, out4, out5, out6, out7, shift); \ ++} ++ ++/* Description : Saturate the halfword element values to the max ++ * unsigned value of (sat_val+1 bits) ++ * The element data width remains unchanged ++ * Arguments : Inputs - in0, in1, in2, in3, sat_val ++ * Outputs - in0, in1, in2, in3 (in place) ++ * Return Type - unsigned halfword ++ * Details : Each unsigned halfword element from 'in0' is saturated to the ++ * value generated with (sat_val+1) bit range ++ * Results are in placed to original vectors ++ * Example : LASX_SAT_H(in0, out0, sat_val) ++ * in0: 1,2,3,4, 5,6,7,8, 19,10,11,12, 13,14,15,16 ++ * sat_val:3 ++ * out0: 1,2,3,4, 5,6,7,7, 7,7,7,7, 7,7,7,7 ++ */ ++#define LASX_SAT_H(in0, out0, sat_val) \ ++{ \ ++ out0 = __lasx_xvsat_h(in0, sat_val); \ ++} //some error in xvsat_h built-in function ++#define LASX_SAT_H_2(in0, in1, out0, out1, sat_val) \ ++{ \ ++ LASX_SAT_H(in0, out0, sat_val); \ ++ LASX_SAT_H(in1, out1, sat_val); \ ++} ++#define LASX_SAT_H_4(in0, in1, in2, in3, out0, out1, out2, out3, sat_val) \ ++{ \ ++ LASX_SAT_H_2(in0, in1, out0, out1, sat_val); \ ++ LASX_SAT_H_2(in2, in3, out2, out3, sat_val); \ ++} ++ ++/* Description : Addition of 2 pairs of vectors ++ * Arguments : Inputs - in0, in1, in2, in3 ++ * Outputs - out0, out1 ++ * Details : Each halfwords element from 2 pairs vectors is added ++ * and 2 results are produced ++ * Example : LASX_ADD_H(in0, in1, out) ++ * in0: 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * in1: 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1 ++ * out: 9,9,9,9, 9,9,9,9, 9,9,9,9, 9,9,9,9 ++ */ ++#define LASX_ADD_H(in0, in1, out) \ ++{ \ ++ out = __lasx_xvadd_h(in0, in1); \ ++} ++#define LASX_ADD_H_2(in0, in1, in2, in3, out0, out1) \ ++{ \ ++ LASX_ADD_H(in0, in1, out0); \ ++ LASX_ADD_H(in2, in3, out1); \ ++} ++#define LASX_ADD_H_4(in0, in1, in2, in3, in4, in5, in6, in7, out0, out1, out2, out3) \ ++{ \ ++ LASX_ADD_H_2(in0, in1, in2, in3, out0, out1); \ ++ LASX_ADD_H_2(in4, in5, in6, in7, out2, out3); \ ++} ++#define LASX_ADD_H_8(in0, in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, \ ++ in13, in14, in15, out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ LASX_ADD_H_4(in0, in1, in2, in3, in4, in5, in6, in7, out0, out1, out2, out3); \ ++ LASX_ADD_H_4(in8, in9, in10, in11, in12, in13, in14, in15, out4, out5, out6, out7); \ ++} ++ ++/* Description : Horizontal subtraction of unsigned byte vector elements ++ * Arguments : Inputs - in0, in1 ++ * Outputs - out0, out1 ++ * Return Type - as per RTYPE ++ * Details : Each unsigned odd byte element from 'in0' is subtracted from ++ * even unsigned byte element from 'in0' (pairwise) and the ++ * halfword result is written to 'out0' ++ */ ++#define LASX_HSUB_UB_2(in0, in1, out0, out1) \ ++{ \ ++ out0 = __lasx_xvhsubw_hu_bu(in0, in0); \ ++ out1 = __lasx_xvhsubw_hu_bu(in1, in1); \ ++} ++ ++#define LASX_HSUB_UB_4(in0, in1, in2, in3, out0, out1, out2, out3) \ ++{ \ ++ LASX_HSUB_UB_2(in0, in1, out0, out1); \ ++ LASX_HSUB_UB_2(in2, in3, out2, out3); \ ++} ++ ++/* Description : Shuffle byte vector elements as per mask vector ++ * Arguments : Inputs - in0, in1, in2, in3, mask0, mask1 ++ * Outputs - out0, out1 ++ * Return Type - as per RTYPE ++ * Details : Selective byte elements from in0 & in1 are copied to out0 as ++ * per control vector mask0 ++ * Selective byte elements from in2 & in3 are copied to out1 as ++ * per control vector mask1 ++ * Example : LASX_SHUF_B_128SV(in0, in1, mask0, out0) ++ * in_h : 9,10,11,12, 13,14,15,16, 0,0,0,0, 0,0,0,0, ++ * 17,18,19,20, 21,22,23,24, 0,0,0,0, 0,0,0,0 ++ * in_l : 1, 2, 3, 4, 5, 6, 7, 8, 0,0,0,0, 0,0,0,0, ++ * 25,26,27,28, 29,30,31,32, 0,0,0,0, 0,0,0,0 ++ * mask0: 0, 1, 2, 3, 4, 5, 6, 7, 16,17,18,19, 20,21,22,23, ++ * 16,17,18,19, 20,21,22,23, 0, 1, 2, 3, 4, 5, 6, 7 ++ * out0 : 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12, 13,14,15,16, ++ * 17,18,19,20, 21,22,23,24, 25,26,27,28, 29,30,31,32 ++ */ ++ ++#define LASX_SHUF_B_128SV(in_h, in_l, mask0, out0) \ ++{ \ ++ out0 = __lasx_xvshuf_b(in_h, in_l, mask0); \ ++} ++#define LASX_SHUF_B_2_128SV(in0_h, in0_l, in1_h, in1_l, mask0, mask1, \ ++ out0, out1) \ ++{ \ ++ LASX_SHUF_B_128SV(in0_h, in0_l, mask0, out0); \ ++ LASX_SHUF_B_128SV(in1_h, in1_l, mask1, out1); \ ++} ++#define LASX_SHUF_B_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ ++ in3_h, in3_l, mask0, mask1, mask2, mask3, \ ++ out0, out1, out2, out3) \ ++{ \ ++ LASX_SHUF_B_2_128SV(in0_h, in0_l, in1_h, in1_l, mask0, mask1, out0, out1); \ ++ LASX_SHUF_B_2_128SV(in2_h, in2_l, in3_h, in3_l, mask2, mask3, out2, out3); \ ++} ++ ++/* Description : Addition of signed halfword elements and signed saturation ++ * Arguments : Inputs - in0, in1, in2, in3 ~ ++ * Outputs - out0, out1 ~ ++ * Details : Signed halfword elements from 'in0' are added to signed ++ * halfword elements of 'in1'. The result is then signed saturated ++ * between -32768 to +32767 (as per halfword data type) ++ * Similar for other pairs ++ * Example : LASX_SADD_H(in0, in1, out0) ++ * in0: 1,2,32766,4, 5,6,7,8, 1,2,3,4, 5,6,7,8, ++ * in1: 8,7,30586,5, 4,3,2,1, 8,7,6,5, 4,3,2,1, ++ * out0: 9,9,32767,9, 9,9,9,9, 9,9,9,9, 9,9,9,9, ++ */ ++#define LASX_SADD_H(in0, in1, out0) \ ++{ \ ++ out0 = __lasx_xvsadd_h(in0, in1); \ ++} ++#define LASX_SADD_H_2(in0, in1, in2, in3, out0, out1) \ ++{ \ ++ LASX_SADD_H(in0, in1, out0); \ ++ LASX_SADD_H(in2, in3, out1); \ ++} ++#define LASX_SADD_H_4(in0, in1, in2, in3, in4, in5, in6, in7, \ ++ out0, out1, out2, out3) \ ++{ \ ++ LASX_SADD_H_2(in0, in1, in2, in3, out0, out1); \ ++ LASX_SADD_H_2(in4, in5, in6, in7, out2, out3); \ ++} ++ ++/* Description : Average with rounding (in0 + in1 + 1) / 2. ++ * Arguments : Inputs - in0, in1, in2, in3, ++ * Outputs - out0, out1 ++ * Details : Each unsigned byte element from 'in0' vector is added with ++ * each unsigned byte element from 'in1' vector. ++ * Average with rounding is calculated and written to 'out0' ++ */ ++#define LASX_AVER_BU( in0, in1, out0 ) \ ++{ \ ++ out0 = __lasx_xvavgr_bu( in0, in1 ); \ ++} ++ ++#define LASX_AVER_BU_2( in0, in1, in2, in3, out0, out1 ) \ ++{ \ ++ LASX_AVER_BU( in0, in1, out0 ); \ ++ LASX_AVER_BU( in2, in3, out1 ); \ ++} ++ ++#define LASX_AVER_BU_4( in0, in1, in2, in3, in4, in5, in6, in7, \ ++ out0, out1, out2, out3 ) \ ++{ \ ++ LASX_AVER_BU_2( in0, in1, in2, in3, out0, out1 ); \ ++ LASX_AVER_BU_2( in4, in5, in6, in7, out2, out3 ); \ ++} ++ ++/* Description : Butterfly of 4 input vectors ++ * Arguments : Inputs - in0, in1, in2, in3 ++ * Outputs - out0, out1, out2, out3 ++ * Details : Butterfly operationuu ++ */ ++#define LASX_BUTTERFLY_4(RTYPE, in0, in1, in2, in3, out0, out1, out2, out3) \ ++{ \ ++ out0 = (__m256i)( (RTYPE)in0 + (RTYPE)in3 ); \ ++ out1 = (__m256i)( (RTYPE)in1 + (RTYPE)in2 ); \ ++ \ ++ out2 = (__m256i)( (RTYPE)in1 - (RTYPE)in2 ); \ ++ out3 = (__m256i)( (RTYPE)in0 - (RTYPE)in3 ); \ ++} ++ ++/* Description : Butterfly of 8 input vectors ++ * Arguments : Inputs - in0 in1 in2 ~ ++ * Outputs - out0 out1 out2 ~ ++ * Details : Butterfly operation ++ */ ++#define LASX_BUTTERFLY_8(RTYPE, in0, in1, in2, in3, in4, in5, in6, in7, \ ++ out0, out1, out2, out3, out4, out5, out6, out7) \ ++{ \ ++ out0 = (__m256i)( (RTYPE)in0 + (RTYPE)in7 ); \ ++ out1 = (__m256i)( (RTYPE)in1 + (RTYPE)in6 ); \ ++ out2 = (__m256i)( (RTYPE)in2 + (RTYPE)in5 ); \ ++ out3 = (__m256i)( (RTYPE)in3 + (RTYPE)in4 ); \ ++ \ ++ out4 = (__m256i)( (RTYPE)in3 - (RTYPE)in4 ); \ ++ out5 = (__m256i)( (RTYPE)in2 - (RTYPE)in5 ); \ ++ out6 = (__m256i)( (RTYPE)in1 - (RTYPE)in6 ); \ ++ out7 = (__m256i)( (RTYPE)in0 - (RTYPE)in7 ); \ ++} ++ ++ ++#endif /* GENERIC_MACROS_LASX_H */ ++#endif /* AVUTIL_LOONGARCH_GENERIC_MACROS_LASX_H */ +diff --git a/libavutil/loongarch/generic_macros_lsx.h b/libavutil/loongarch/generic_macros_lsx.h +new file mode 100644 +index 0000000000..8edebb4be0 +--- /dev/null ++++ b/libavutil/loongarch/generic_macros_lsx.h +@@ -0,0 +1,670 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * All rights reserved. ++ * Contributed by Shiyou Yin ++ * Xiwei Gu ++ * Lu Wang ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ * ++ */ ++ ++#ifndef AVUTIL_LOONGARCH_GENERIC_MACROS_LSX_H ++#define AVUTIL_LOONGARCH_GENERIC_MACROS_LSX_H ++ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * All rights reserved. ++ * Contributed by Shiyou Yin ++ * Xiwei Gu ++ * Lu Wang ++ * Hecai Yuan ++ * ++ * This file is maintained in LSOM project, don't change it directly. ++ * You can get the latest version of this header from: *** ++ * ++ */ ++ ++#ifndef GENERIC_MACROS_LSX_H ++#define GENERIC_MACROS_LSX_H ++ ++#include ++ ++/** ++ * MAJOR version: Macro usage changes. ++ * MINOR version: Add new functions, or bug fix. ++ * MICRO version: Comment changes or implementation changes. ++ */ ++#define LSOM_LSX_VERSION_MAJOR 0 ++#define LSOM_LSX_VERSION_MINOR 7 ++#define LSOM_LSX_VERSION_MICRO 0 ++ ++#define LSX_DUP2_ARG1(_LSX_INS, _IN0, _IN1, _OUT0, _OUT1) \ ++{ \ ++ _OUT0 = _LSX_INS(_IN0); \ ++ _OUT1 = _LSX_INS(_IN1); \ ++} ++ ++#define LSX_DUP2_ARG2(_LSX_INS, _IN0, _IN1, _IN2, _IN3, _OUT0, _OUT1) \ ++{ \ ++ _OUT0 = _LSX_INS(_IN0, _IN1); \ ++ _OUT1 = _LSX_INS(_IN2, _IN3); \ ++} ++ ++#define LSX_DUP2_ARG3(_LSX_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _OUT0, _OUT1) \ ++{ \ ++ _OUT0 = _LSX_INS(_IN0, _IN1, _IN2); \ ++ _OUT1 = _LSX_INS(_IN3, _IN4, _IN5); \ ++} ++ ++#define LSX_DUP4_ARG1(_LSX_INS, _IN0, _IN1, _IN2, _IN3, _OUT0, _OUT1, _OUT2, _OUT3) \ ++{ \ ++ LSX_DUP2_ARG1(_LSX_INS, _IN0, _IN1, _OUT0, _OUT1); \ ++ LSX_DUP2_ARG1(_LSX_INS, _IN2, _IN3, _OUT2, _OUT3); \ ++} ++ ++#define LSX_DUP4_ARG2(_LSX_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _IN6, _IN7, \ ++ _OUT0, _OUT1, _OUT2, _OUT3) \ ++{ \ ++ LSX_DUP2_ARG2(_LSX_INS, _IN0, _IN1, _IN2, _IN3, _OUT0, _OUT1); \ ++ LSX_DUP2_ARG2(_LSX_INS, _IN4, _IN5, _IN6, _IN7, _OUT2, _OUT3); \ ++} ++ ++#define LSX_DUP4_ARG3(_LSX_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _IN6, _IN7, \ ++ _IN8, _IN9, _IN10, _IN11, _OUT0, _OUT1, _OUT2, _OUT3) \ ++{ \ ++ LSX_DUP2_ARG3(_LSX_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _OUT0, _OUT1); \ ++ LSX_DUP2_ARG3(_LSX_INS, _IN6, _IN7, _IN8, _IN9, _IN10, _IN11, _OUT2, _OUT3); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product & addition of byte vector elements ++ * Arguments : Inputs - in_c, in_h, in_l ++ * Outputs - out ++ * Retrun Type - halfword ++ * Details : Signed byte elements from in_h are multiplied by ++ * signed byte elements from in_l, and then added adjacent to ++ * each other to get results with the twice size of input. ++ * Then the results plus to signed half word elements from in_c. ++ * Example : out = __lsx_dp2add_h_b(in_c, in_h, in_l) ++ * in_c : 1,2,3,4, 1,2,3,4 ++ * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * in_l : 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1 ++ * out : 23,40,41,26, 23,40,41,26 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_dp2add_h_b(__m128i in_c, __m128i in_h, __m128i in_l) ++{ ++ __m128i out; ++ ++ out = __lsx_vmaddwev_h_b(in_c, in_h, in_l); ++ out = __lsx_vmaddwod_h_b(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product & addition of byte vector elements ++ * Arguments : Inputs - in_c, in_h, in_l ++ * Outputs - out ++ * Retrun Type - halfword ++ * Details : Unsigned byte elements from in_h are multiplied by ++ * unsigned byte elements from in_l, and then added adjacent to ++ * each other to get results with the twice size of input. ++ * The results plus to signed half word elements from in_c. ++ * Example : out = __lsx_dp2add_h_b(in_c, in_h, in_l) ++ * in_c : 1,2,3,4, 1,2,3,4 ++ * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * in_l : 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1 ++ * out : 23,40,41,26, 23,40,41,26 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_dp2add_h_bu(__m128i in_c, __m128i in_h, __m128i in_l) ++{ ++ __m128i out; ++ ++ out = __lsx_vmaddwev_h_bu(in_c, in_h, in_l); ++ out = __lsx_vmaddwod_h_bu(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product & addition of half word vector elements ++ * Arguments : Inputs - in_c, in_h, in_l ++ * Outputs - out ++ * Retrun Type - __m128i ++ * Details : Signed half word elements from in_h are multiplied by ++ * signed half word elements from in_l, and then added adjacent to ++ * each other to get results with the twice size of input. ++ * Then the results plus to signed word elements from in_c. ++ * Example : out = __lsx_dp2add_h_b(in_c, in_h, in_l) ++ * in_c : 1,2,3,4 ++ * in_h : 1,2,3,4, 5,6,7,8 ++ * in_l : 8,7,6,5, 4,3,2,1 ++ * out : 23,40,41,26 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_dp2add_w_h(__m128i in_c, __m128i in_h, __m128i in_l) ++{ ++ __m128i out; ++ ++ out = __lsx_vmaddwev_w_h(in_c, in_h, in_l); ++ out = __lsx_vmaddwod_w_h(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product of byte vector elements ++ * Arguments : Inputs - in_h, in_l ++ * Outputs - out ++ * Retrun Type - halfword ++ * Details : Signed byte elements from in_h are multiplied by ++ * signed byte elements from in_l, and then added adjacent to ++ * each other to get results with the twice size of input. ++ * Example : out = __lsx_dp2_h_b(in_h, in_l) ++ * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * in_l : 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1 ++ * out : 22,38,38,22, 22,38,38,22 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_dp2_h_b(__m128i in_h, __m128i in_l) ++{ ++ __m128i out; ++ ++ out = __lsx_vmulwev_h_b(in_h, in_l); ++ out = __lsx_vmaddwod_h_b(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product of byte vector elements ++ * Arguments : Inputs - in_h, in_l ++ * Outputs - out ++ * Retrun Type - halfword ++ * Details : Unsigned byte elements from in_h are multiplied by ++ * unsigned byte elements from in_l, and then added adjacent to ++ * each other to get results with the twice size of input. ++ * Example : out = __lsx_dp2_h_bu(in_h, in_l) ++ * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * in_l : 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1 ++ * out : 22,38,38,22, 22,38,38,22 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_dp2_h_bu(__m128i in_h, __m128i in_l) ++{ ++ __m128i out; ++ ++ out = __lsx_vmulwev_h_bu(in_h, in_l); ++ out = __lsx_vmaddwod_h_bu(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product of byte vector elements ++ * Arguments : Inputs - in_h, in_l ++ * Outputs - out ++ * Retrun Type - halfword ++ * Details : Unsigned byte elements from in_h are multiplied by ++ * signed byte elements from in_l, and then added adjacent to ++ * each other to get results with the twice size of input. ++ * Example : out = __lsx_dp2_h_bu_b(in_h, in_l) ++ * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * in_l : 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,-1 ++ * out : 22,38,38,22, 22,38,38,6 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_dp2_h_bu_b(__m128i in_h, __m128i in_l) ++{ ++ __m128i out; ++ ++ out = __lsx_vmulwev_h_bu_b(in_h, in_l); ++ out = __lsx_vmaddwod_h_bu_b(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product of byte vector elements ++ * Arguments : Inputs - in_h, in_l ++ * Outputs - out ++ * Retrun Type - halfword ++ * Details : Signed byte elements from in_h are multiplied by ++ * signed byte elements from in_l, and then added adjacent to ++ * each other to get results with the twice size of input. ++ * Example : out = __lsx_dp2_w_h(in_h, in_l) ++ * in_h : 1,2,3,4, 5,6,7,8 ++ * in_l : 8,7,6,5, 4,3,2,1 ++ * out : 22,38,38,22 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_dp2_w_h(__m128i in_h, __m128i in_l) ++{ ++ __m128i out; ++ ++ out = __lsx_vmulwev_w_h(in_h, in_l); ++ out = __lsx_vmaddwod_w_h(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Clip all halfword elements of input vector between min & max ++ out = ((_in) < (min)) ? (min) : (((_in) > (max)) ? (max) : (_in)) ++ Arguments : Inputs - _in (input vector) ++ - min (min threshold) ++ - max (max threshold) ++ Outputs - out (output vector with clipped elements) ++ Return Type - signed halfword ++ * Example : out = __lsx_clip_h(_in) ++ * _in : -8,2,280,249, -8,255,280,249 ++ * min : 1,1,1,1, 1,1,1,1 ++ * max : 9,9,9,9, 9,9,9,9 ++ * out : 1,2,9,9, 1,9,9,9 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_clip_h(__m128i _in, __m128i min, __m128i max) ++{ ++ __m128i out; ++ ++ out = __lsx_vmax_h(min, _in); ++ out = __lsx_vmin_h(max, out); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Set each element of vector between 0 and 255 ++ * Arguments : Inputs - _in ++ * Outputs - out ++ * Retrun Type - halfword ++ * Details : Signed byte elements from _in are clamped between 0 and 255. ++ * Example : out = __lsx_clamp255_h(_in) ++ * _in : -8,255,280,249, -8,255,280,249 ++ * out : 0,255,255,249, 0,255,255,249 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_clamp255_h(__m128i _in) ++{ ++ __m128i out; ++ ++ out = __lsx_vmaxi_h(_in, 0); ++ out = __lsx_vsat_hu(out, 7); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Set each element of vector between 0 and 255 ++ * Arguments : Inputs - _in ++ * Outputs - out ++ * Retrun Type - word ++ * Details : Signed byte elements from _in are clamped between 0 and 255. ++ * Example : out = __lsx_clamp255_w(_in) ++ * _in : -8,255,280,249 ++ * out : 0,255,255,249 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_clamp255_w(__m128i _in) ++{ ++ __m128i out; ++ ++ out = __lsx_vmaxi_w(_in, 0); ++ out = __lsx_vsat_wu(out, 7); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Swap two variables ++ Arguments : Inputs - _in0, _in1 ++ Outputs - _in0, _in1 (in-place) ++ Details : Swapping of two input variables using xor ++ * Example : SWAP(_in0, _in1) ++ * _in0 : 1,2,3,4 ++ * _in1 : 5,6,7,8 ++ * _in0(out) : 5,6,7,8 ++ * _in1(out) : 1,2,3,4 ++ * ============================================================================= ++ */ ++#define SWAP(_in0, _in1) \ ++{ \ ++ _in0 = __lsx_vxor_v(_in0, _in1); \ ++ _in1 = __lsx_vxor_v(_in0, _in1); \ ++ _in0 = __lsx_vxor_v(_in0, _in1); \ ++} \ ++ ++/* ++ * ============================================================================= ++ * Description : Transpose 4x4 block with word elements in vectors ++ * Arguments : Inputs - in0, in1, in2, in3 ++ * Outputs - out0, out1, out2, out3 ++ * Details : ++ * Example : ++ * 1, 2, 3, 4 1, 5, 9,13 ++ * 5, 6, 7, 8 to 2, 6,10,14 ++ * 9,10,11,12 =====> 3, 7,11,15 ++ * 13,14,15,16 4, 8,12,16 ++ * ============================================================================= ++ */ ++#define TRANSPOSE4x4_W(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++{ \ ++ __m128i _t0, _t1, _t2, _t3; \ ++ \ ++ _t0 = __lsx_vilvl_w(_in1, _in0); \ ++ _t1 = __lsx_vilvh_w(_in1, _in0); \ ++ _t2 = __lsx_vilvl_w(_in3, _in2); \ ++ _t3 = __lsx_vilvh_w(_in3, _in2); \ ++ _out0 = __lsx_vilvl_d(_t2, _t0); \ ++ _out1 = __lsx_vilvh_d(_t2, _t0); \ ++ _out2 = __lsx_vilvl_d(_t3, _t1); \ ++ _out3 = __lsx_vilvh_d(_t3, _t1); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Transpose 8x8 block with byte elements in vectors ++ * Arguments : Inputs - _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7 ++ * Outputs - _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7 ++ * Details : The rows of the matrix become columns, and the columns become rows. ++ * Example : TRANSPOSE8x8_B ++ * _in0 : 00,01,02,03,04,05,06,07, 00,00,00,00,00,00,00,00 ++ * _in1 : 10,11,12,13,14,15,16,17, 00,00,00,00,00,00,00,00 ++ * _in2 : 20,21,22,23,24,25,26,27, 00,00,00,00,00,00,00,00 ++ * _in3 : 30,31,32,33,34,35,36,37, 00,00,00,00,00,00,00,00 ++ * _in4 : 40,41,42,43,44,45,46,47, 00,00,00,00,00,00,00,00 ++ * _in5 : 50,51,52,53,54,55,56,57, 00,00,00,00,00,00,00,00 ++ * _in6 : 60,61,62,63,64,65,66,67, 00,00,00,00,00,00,00,00 ++ * _in7 : 70,71,72,73,74,75,76,77, 00,00,00,00,00,00,00,00 ++ * ++ * _ out0 : 00,10,20,30,40,50,60,70, 00,00,00,00,00,00,00,00 ++ * _ out1 : 01,11,21,31,41,51,61,71, 00,00,00,00,00,00,00,00 ++ * _ out2 : 02,12,22,32,42,52,62,72, 00,00,00,00,00,00,00,00 ++ * _ out3 : 03,13,23,33,43,53,63,73, 00,00,00,00,00,00,00,00 ++ * _ out4 : 04,14,24,34,44,54,64,74, 00,00,00,00,00,00,00,00 ++ * _ out5 : 05,15,25,35,45,55,65,75, 00,00,00,00,00,00,00,00 ++ * _ out6 : 06,16,26,36,46,56,66,76, 00,00,00,00,00,00,00,00 ++ * _ out7 : 07,17,27,37,47,57,67,77, 00,00,00,00,00,00,00,00 ++ * ============================================================================= ++ */ ++#define TRANSPOSE8x8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ ++{ \ ++ __m128i zero = {0}; \ ++ __m128i shuf8 = {0x0F0E0D0C0B0A0908, 0x1716151413121110}; \ ++ __m128i _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ ++ \ ++ _t0 = __lsx_vilvl_b(_in2, _in0); \ ++ _t1 = __lsx_vilvl_b(_in3, _in1); \ ++ _t2 = __lsx_vilvl_b(_in6, _in4); \ ++ _t3 = __lsx_vilvl_b(_in7, _in5); \ ++ _t4 = __lsx_vilvl_b(_t1, _t0); \ ++ _t5 = __lsx_vilvh_b(_t1, _t0); \ ++ _t6 = __lsx_vilvl_b(_t3, _t2); \ ++ _t7 = __lsx_vilvh_b(_t3, _t2); \ ++ _out0 = __lsx_vilvl_w(_t6, _t4); \ ++ _out2 = __lsx_vilvh_w(_t6, _t4); \ ++ _out4 = __lsx_vilvl_w(_t7, _t5); \ ++ _out6 = __lsx_vilvh_w(_t7, _t5); \ ++ _out1 = __lsx_vshuf_b(zero, _out0, shuf8); \ ++ _out3 = __lsx_vshuf_b(zero, _out2, shuf8); \ ++ _out5 = __lsx_vshuf_b(zero, _out4, shuf8); \ ++ _out7 = __lsx_vshuf_b(zero, _out6, shuf8); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Transpose 8x8 block with half word elements in vectors ++ * Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7 ++ * Outputs - out0, out1, out2, out3, out4, out5, out6, out7 ++ * Details : ++ * Example : ++ * 00,01,02,03,04,05,06,07 00,10,20,30,40,50,60,70 ++ * 10,11,12,13,14,15,16,17 01,11,21,31,41,51,61,71 ++ * 20,21,22,23,24,25,26,27 02,12,22,32,42,52,62,72 ++ * 30,31,32,33,34,35,36,37 to 03,13,23,33,43,53,63,73 ++ * 40,41,42,43,44,45,46,47 ======> 04,14,24,34,44,54,64,74 ++ * 50,51,52,53,54,55,56,57 05,15,25,35,45,55,65,75 ++ * 60,61,62,63,64,65,66,67 06,16,26,36,46,56,66,76 ++ * 70,71,72,73,74,75,76,77 07,17,27,37,47,57,67,77 ++ * ============================================================================= ++ */ ++#define TRANSPOSE8x8_H(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ ++{ \ ++ __m128i _s0, _s1, _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ ++ \ ++ _s0 = __lsx_vilvl_h(_in6, _in4); \ ++ _s1 = __lsx_vilvl_h(_in7, _in5); \ ++ _t0 = __lsx_vilvl_h(_s1, _s0); \ ++ _t1 = __lsx_vilvh_h(_s1, _s0); \ ++ _s0 = __lsx_vilvh_h(_in6, _in4); \ ++ _s1 = __lsx_vilvh_h(_in7, _in5); \ ++ _t2 = __lsx_vilvl_h(_s1, _s0); \ ++ _t3 = __lsx_vilvh_h(_s1, _s0); \ ++ _s0 = __lsx_vilvl_h(_in2, _in0); \ ++ _s1 = __lsx_vilvl_h(_in3, _in1); \ ++ _t4 = __lsx_vilvl_h(_s1, _s0); \ ++ _t5 = __lsx_vilvh_h(_s1, _s0); \ ++ _s0 = __lsx_vilvh_h(_in2, _in0); \ ++ _s1 = __lsx_vilvh_h(_in3, _in1); \ ++ _t6 = __lsx_vilvl_h(_s1, _s0); \ ++ _t7 = __lsx_vilvh_h(_s1, _s0); \ ++ \ ++ _out0 = __lsx_vpickev_d(_t0, _t4); \ ++ _out2 = __lsx_vpickev_d(_t1, _t5); \ ++ _out4 = __lsx_vpickev_d(_t2, _t6); \ ++ _out6 = __lsx_vpickev_d(_t3, _t7); \ ++ _out1 = __lsx_vpickod_d(_t0, _t4); \ ++ _out3 = __lsx_vpickod_d(_t1, _t5); \ ++ _out5 = __lsx_vpickod_d(_t2, _t6); \ ++ _out7 = __lsx_vpickod_d(_t3, _t7); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Transpose input 8x4 byte block into 4x8 ++ Arguments : Inputs - _in0, _in1, _in2, _in3 (input 8x4 byte block) ++ Outputs - _out0, _out1, _out2, _out3 (output 4x8 byte block) ++ Return Type - as per RTYPE ++ * Details : The rows of the matrix become columns, and the columns become rows. ++ * Example : TRANSPOSE8x4_B ++ * _in0 : 00,01,02,03,00,00,00,00, 00,00,00,00,00,00,00,00 ++ * _in1 : 10,11,12,13,00,00,00,00, 00,00,00,00,00,00,00,00 ++ * _in2 : 20,21,22,23,00,00,00,00, 00,00,00,00,00,00,00,00 ++ * _in3 : 30,31,32,33,00,00,00,00, 00,00,00,00,00,00,00,00 ++ * _in4 : 40,41,42,43,00,00,00,00, 00,00,00,00,00,00,00,00 ++ * _in5 : 50,51,52,53,00,00,00,00, 00,00,00,00,00,00,00,00 ++ * _in6 : 60,61,62,63,00,00,00,00, 00,00,00,00,00,00,00,00 ++ * _in7 : 70,71,72,73,00,00,00,00, 00,00,00,00,00,00,00,00 ++ * ++ * _out0 : 00,10,20,30,40,50,60,70, 00,00,00,00,00,00,00,00 ++ * _out1 : 01,11,21,31,41,51,61,71, 00,00,00,00,00,00,00,00 ++ * _out2 : 02,12,22,32,42,52,62,72, 00,00,00,00,00,00,00,00 ++ * _out3 : 03,13,23,33,43,53,63,73, 00,00,00,00,00,00,00,00 ++ * ============================================================================= ++ */ ++#define TRANSPOSE8x4_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3) \ ++{ \ ++ __m128i _tmp0_m, _tmp1_m, _tmp2_m, _tmp3_m; \ ++ \ ++ _tmp0_m = __lsx_vpackev_w(_in4, _in0); \ ++ _tmp1_m = __lsx_vpackev_w(_in5, _in1); \ ++ _tmp2_m = __lsx_vilvl_b(_tmp1_m, _tmp0_m); \ ++ _tmp0_m = __lsx_vpackev_w(_in6, _in2); \ ++ _tmp1_m = __lsx_vpackev_w(_in7, _in3); \ ++ \ ++ _tmp3_m = __lsx_vilvl_b(_tmp1_m, _tmp0_m); \ ++ _tmp0_m = __lsx_vilvl_h(_tmp3_m, _tmp2_m); \ ++ _tmp1_m = __lsx_vilvh_h(_tmp3_m, _tmp2_m); \ ++ \ ++ _out0 = __lsx_vilvl_w(_tmp1_m, _tmp0_m); \ ++ _out2 = __lsx_vilvh_w(_tmp1_m, _tmp0_m); \ ++ _out1 = __lsx_vilvh_d(_out2, _out0); \ ++ _out3 = __lsx_vilvh_d(_out0, _out2); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Transpose 16x8 block with byte elements in vectors ++ * Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7, in8 ++ * in9, in10, in11, in12, in13, in14, in15 ++ * Outputs - out0, out1, out2, out3, out4, out5, out6, out7 ++ * Details : ++ * Example : ++ * 000,001,002,003,004,005,006,007 ++ * 008,009,010,011,012,013,014,015 ++ * 016,017,018,019,020,021,022,023 ++ * 024,025,026,027,028,029,030,031 ++ * 032,033,034,035,036,037,038,039 ++ * 040,041,042,043,044,045,046,047 000,008,...,112,120 ++ * 048,049,050,051,052,053,054,055 001,009,...,113,121 ++ * 056,057,058,059,060,061,062,063 to 002,010,...,114,122 ++ * 064,068,066,067,068,069,070,071 =====> 003,011,...,115,123 ++ * 072,073,074,075,076,077,078,079 004,012,...,116,124 ++ * 080,081,082,083,084,085,086,087 005,013,...,117,125 ++ * 088,089,090,091,092,093,094,095 006,014,...,118,126 ++ * 096,097,098,099,100,101,102,103 007,015,...,119,127 ++ * 104,105,106,107,108,109,110,111 ++ * 112,113,114,115,116,117,118,119 ++ * 120,121,122,123,124,125,126,127 ++ * ============================================================================= ++ */ ++#define TRANSPOSE16x8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, _in8, \ ++ _in9, _in10, _in11, _in12, _in13, _in14, _in15, _out0, \ ++ _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ ++{ \ ++ __m128i _tmp0, _tmp1, _tmp2, _tmp3, _tmp4, _tmp5, _tmp6, _tmp7; \ ++ __m128i _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, _in2, _in0, _in3, _in1, _in6, _in4, _in7, _in5, \ ++ _tmp0, _tmp1, _tmp2, _tmp3); \ ++ LSX_DUP4_ARG2(__lsx_vilvl_b, _in10, _in8, _in11, _in9, _in14, _in12, _in15, \ ++ _in13, _tmp4, _tmp5, _tmp6, _tmp7); \ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, _tmp1, _tmp0, _tmp3, _tmp2, _t0, _t2); \ ++ LSX_DUP2_ARG2(__lsx_vilvh_b, _tmp1, _tmp0, _tmp3, _tmp2, _t1, _t3); \ ++ LSX_DUP2_ARG2(__lsx_vilvl_b, _tmp5, _tmp4, _tmp7, _tmp6, _t4, _t6); \ ++ LSX_DUP2_ARG2(__lsx_vilvh_b, _tmp5, _tmp4, _tmp7, _tmp6, _t5, _t7); \ ++ LSX_DUP2_ARG2(__lsx_vilvl_w, _t2, _t0, _t3, _t1, _tmp0, _tmp4); \ ++ LSX_DUP2_ARG2(__lsx_vilvh_w, _t2, _t0, _t3, _t1, _tmp2, _tmp6); \ ++ LSX_DUP2_ARG2(__lsx_vilvl_w, _t6, _t4, _t7, _t5, _tmp1, _tmp5); \ ++ LSX_DUP2_ARG2(__lsx_vilvh_w, _t6, _t4, _t7, _t5, _tmp3, _tmp7); \ ++ LSX_DUP2_ARG2(__lsx_vilvl_d, _tmp1, _tmp0, _tmp3, _tmp2, _out0, _out2); \ ++ LSX_DUP2_ARG2(__lsx_vilvh_d, _tmp1, _tmp0, _tmp3, _tmp2, _out1, _out3); \ ++ LSX_DUP2_ARG2(__lsx_vilvl_d, _tmp5, _tmp4, _tmp7, _tmp6, _out4, _out6); \ ++ LSX_DUP2_ARG2(__lsx_vilvh_d, _tmp5, _tmp4, _tmp7, _tmp6, _out5, _out7); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Butterfly of 4 input vectors ++ * Arguments : Inputs - in0, in1, in2, in3 ++ * Outputs - out0, out1, out2, out3 ++ * Details : Butterfly operation ++ * Example : ++ * out0 = in0 + in3; ++ * out1 = in1 + in2; ++ * out2 = in1 - in2; ++ * out3 = in0 - in3; ++ * ============================================================================= ++ */ ++#define BUTTERFLY_4_B(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++{ \ ++ _out0 = __lsx_vadd_b(_in0, _in3); \ ++ _out1 = __lsx_vadd_b(_in1, _in2); \ ++ _out2 = __lsx_vsub_b(_in1, _in2); \ ++ _out3 = __lsx_vsub_b(_in0, _in3); \ ++} ++#define BUTTERFLY_4_H(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++{ \ ++ _out0 = __lsx_vadd_h(_in0, _in3); \ ++ _out1 = __lsx_vadd_h(_in1, _in2); \ ++ _out2 = __lsx_vsub_h(_in1, _in2); \ ++ _out3 = __lsx_vsub_h(_in0, _in3); \ ++} ++#define BUTTERFLY_4_W(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++{ \ ++ _out0 = __lsx_vadd_w(_in0, _in3); \ ++ _out1 = __lsx_vadd_w(_in1, _in2); \ ++ _out2 = __lsx_vsub_w(_in1, _in2); \ ++ _out3 = __lsx_vsub_w(_in0, _in3); \ ++} ++#define BUTTERFLY_4_D(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++{ \ ++ _out0 = __lsx_vadd_d(_in0, _in3); \ ++ _out1 = __lsx_vadd_d(_in1, _in2); \ ++ _out2 = __lsx_vsub_d(_in1, _in2); \ ++ _out3 = __lsx_vsub_d(_in0, _in3); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Butterfly of 8 input vectors ++ * Arguments : Inputs - _in0, _in1, _in2, _in3, ~ ++ * Outputs - _out0, _out1, _out2, _out3, ~ ++ * Details : Butterfly operation ++ * Example : ++ * _out0 = _in0 + _in7; ++ * _out1 = _in1 + _in6; ++ * _out2 = _in2 + _in5; ++ * _out3 = _in3 + _in4; ++ * _out4 = _in3 - _in4; ++ * _out5 = _in2 - _in5; ++ * _out6 = _in1 - _in6; ++ * _out7 = _in0 - _in7; ++ * ============================================================================= ++ */ ++#define BUTTERFLY_8_H(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ ++{ \ ++ _out0 = __lsx_vadd_h(_in0, _in7); \ ++ _out1 = __lsx_vadd_h(_in1, _in6); \ ++ _out2 = __lsx_vadd_h(_in2, _in5); \ ++ _out3 = __lsx_vadd_h(_in3, _in4); \ ++ _out4 = __lsx_vsub_h(_in3, _in4); \ ++ _out5 = __lsx_vsub_h(_in2, _in5); \ ++ _out6 = __lsx_vsub_h(_in1, _in6); \ ++ _out7 = __lsx_vsub_h(_in0, _in7); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Print out elements in vector. ++ * Arguments : Inputs - RTYPE, _element_num, _in0, _enter ++ * Outputs - ++ * Details : Print out '_element_num' elements in 'RTYPE' vector '_in0', if ++ * '_enter' is TRUE, prefix "\nVP:" will be added first. ++ * Example : VECT_PRINT(v4i32,4,in0,1); // in0: 1,2,3,4 ++ * VP:1,2,3,4, ++ * ============================================================================= ++ */ ++#define VECT_PRINT(RTYPE, element_num, in0, enter) \ ++{ \ ++ RTYPE _tmp0 = (RTYPE)in0; \ ++ int _i = 0; \ ++ if (enter) \ ++ printf("\nVP:"); \ ++ for(_i = 0; _i < element_num; _i++) \ ++ printf("%d,",_tmp0[_i]); \ ++} ++ ++#endif /* GENERIC_MACROS_LSX_H */ ++#endif /* AVUTIL_LOONGARCH_GENERIC_MACROS_LSX_H */ +diff --git a/libavutil/loongarch/generic_macros_lsx.h.bak b/libavutil/loongarch/generic_macros_lsx.h.bak +new file mode 100644 +index 0000000000..5d3eef9cf1 +--- /dev/null ++++ b/libavutil/loongarch/generic_macros_lsx.h.bak +@@ -0,0 +1,425 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * All rights reserved. ++ * Contributed by Shiyou Yin ++ * Xiwei Gu ++ * Lu Wang ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ * ++ */ ++ ++#ifndef AVUTIL_LOONGARCH_GENERIC_MACROS_LSX_H ++#define AVUTIL_LOONGARCH_GENERIC_MACROS_LSX_H ++ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * All rights reserved. ++ * Contributed by Shiyou Yin ++ * Xiwei Gu ++ * Lu Wang ++ * ++ * This file is maintained in LSOM project, don't change it directly. ++ * You can get the latest version of this header from: *** ++ * ++ */ ++ ++#ifndef GENERIC_MACROS_LSX_H ++#define GENERIC_MACROS_LSX_H ++ ++#include ++ ++/** ++ * MAJOR version: Macro usage changes. ++ * MINOR version: Add new functions, or bug fix. ++ * MICRO version: Comment changes or implementation changes. ++ */ ++#define LSOM_LSX_VERSION_MAJOR 0 ++#define LSOM_LSX_VERSION_MINOR 4 ++#define LSOM_LSX_VERSION_MICRO 0 ++ ++#define LSX_DUP2_ARG1(_LSX_INS, _IN0, _IN1, _OUT0, _OUT1) \ ++{ \ ++ _OUT0 = _LSX_INS(_IN0); \ ++ _OUT1 = _LSX_INS(_IN1); \ ++} ++ ++#define LSX_DUP2_ARG2(_LSX_INS, _IN0, _IN1, _IN2, _IN3, _OUT0, _OUT1) \ ++{ \ ++ _OUT0 = _LSX_INS(_IN0, _IN1); \ ++ _OUT1 = _LSX_INS(_IN2, _IN3); \ ++} ++ ++#define LSX_DUP2_ARG3(_LSX_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _OUT0, _OUT1) \ ++{ \ ++ _OUT0 = _LSX_INS(_IN0, _IN1, _IN2); \ ++ _OUT1 = _LSX_INS(_IN3, _IN4, _IN5); \ ++} ++ ++#define LSX_DUP4_ARG1(_LSX_INS, _IN0, _IN1, _IN2, _IN3, _OUT0, _OUT1, _OUT2, _OUT3) \ ++{ \ ++ LSX_DUP2_ARG1(_LSX_INS, _IN0, _IN1, _OUT0, _OUT1); \ ++ LSX_DUP2_ARG1(_LSX_INS, _IN2, _IN3, _OUT2, _OUT3); \ ++} ++ ++#define LSX_DUP4_ARG2(_LSX_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _IN6, _IN7, \ ++ _OUT0, _OUT1, _OUT2, _OUT3) \ ++{ \ ++ LSX_DUP2_ARG2(_LSX_INS, _IN0, _IN1, _IN2, _IN3, _OUT0, _OUT1); \ ++ LSX_DUP2_ARG2(_LSX_INS, _IN4, _IN5, _IN6, _IN7, _OUT2, _OUT3); \ ++} ++ ++#define LSX_DUP4_ARG3(_LSX_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _IN6, _IN7, \ ++ _IN8, _IN9, _IN10, _IN11, _OUT0, _OUT1, _OUT2, _OUT3) \ ++{ \ ++ LSX_DUP2_ARG3(_LSX_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _OUT0, _OUT1); \ ++ LSX_DUP2_ARG3(_LSX_INS, _IN6, _IN7, _IN8, _IN9, _IN10, _IN11, _OUT2, _OUT3); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product & addition of byte vector elements ++ * Arguments : Inputs - in_c, in_h, in_l ++ * Outputs - out ++ * Retrun Type - halfword ++ * Details : Signed byte elements from in_h are multiplied by ++ * signed byte elements from in_l, and then added adjacent to ++ * each other to get results with the twice size of input. ++ * Then the results plus to signed half word elements from in_c. ++ * Example : out = __lsx_dp2add_h_b(in_c, in_h, in_l) ++ * in_c : 1,2,3,4, 1,2,3,4 ++ * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * in_l : 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1 ++ * out : 23,40,41,26, 23,40,41,26 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_dp2add_h_b(__m128i in_c, __m128i in_h, __m128i in_l) ++{ ++ __m128i out; ++ ++ out = __lsx_vmaddwev_h_b(in_c, in_h, in_l); ++ out = __lsx_vmaddwod_h_b(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product & addition of byte vector elements ++ * Arguments : Inputs - in_c, in_h, in_l ++ * Outputs - out ++ * Retrun Type - halfword ++ * Details : Unsigned byte elements from in_h are multiplied by ++ * unsigned byte elements from in_l, and then added adjacent to ++ * each other to get results with the twice size of input. ++ * The results plus to signed half word elements from in_c. ++ * Example : out = __lsx_dp2add_h_b(in_c, in_h, in_l) ++ * in_c : 1,2,3,4, 1,2,3,4 ++ * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * in_l : 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1 ++ * out : 23,40,41,26, 23,40,41,26 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_dp2add_h_bu(__m128i in_c, __m128i in_h, __m128i in_l) ++{ ++ __m128i out; ++ ++ out = __lsx_vmaddwev_h_bu(in_c, in_h, in_l); ++ out = __lsx_vmaddwod_h_bu(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product of byte vector elements ++ * Arguments : Inputs - in_h, in_l ++ * Outputs - out ++ * Retrun Type - halfword ++ * Details : Signed byte elements from in_h are multiplied by ++ * signed byte elements from in_l, and then added adjacent to ++ * each other to get results with the twice size of input. ++ * Example : out = __lsx_dp2_h_b(in_h, in_l) ++ * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * in_l : 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1 ++ * out : 22,38,38,22, 22,38,38,22 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_dp2_h_b(__m128i in_h, __m128i in_l) ++{ ++ __m128i out; ++ ++ out = __lsx_vmulwev_h_b(in_h, in_l); ++ out = __lsx_vmaddwod_h_b(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product of byte vector elements ++ * Arguments : Inputs - in_h, in_l ++ * Outputs - out ++ * Retrun Type - halfword ++ * Details : Unsigned byte elements from in_h are multiplied by ++ * signed byte elements from in_l, and then added adjacent to ++ * each other to get results with the twice size of input. ++ * Example : out = __lsx_dp2_h_bu_b(in_h, in_l) ++ * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * in_l : 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,-1 ++ * out : 22,38,38,22, 22,38,38,6 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_dp2_h_bu_b(__m128i in_h, __m128i in_l) ++{ ++ __m128i out; ++ ++ out = __lsx_vmulwev_h_bu_b(in_h, in_l); ++ out = __lsx_vmaddwod_h_bu_b(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product of byte vector elements ++ * Arguments : Inputs - in_h, in_l ++ * Outputs - out ++ * Retrun Type - halfword ++ * Details : Signed byte elements from in_h are multiplied by ++ * signed byte elements from in_l, and then added adjacent to ++ * each other to get results with the twice size of input. ++ * Example : out = __lsx_dp2_w_h(in_h, in_l) ++ * in_h : 1,2,3,4, 5,6,7,8 ++ * in_l : 8,7,6,5, 4,3,2,1 ++ * out : 22,38,38,22 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_dp2_w_h(__m128i in_h, __m128i in_l) ++{ ++ __m128i out; ++ ++ out = __lsx_vmulwev_w_h(in_h, in_l); ++ out = __lsx_vmaddwod_w_h(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product & addition of half word vector elements ++ * Arguments : Inputs - in_c, in_h, in_l ++ * Outputs - out ++ * Retrun Type - __m128i ++ * Details : Signed half word elements from in_h are multiplied by ++ * signed half word elements from in_l, and then added adjacent to ++ * each other to get results with the twice size of input. ++ * Then the results plus to signed word elements from in_c. ++ * Example : out = __lsx_dp2add_h_b(in_c, in_h, in_l) ++ * in_c : 1,2,3,4 ++ * in_h : 1,2,3,4, 5,6,7,8 ++ * in_l : 8,7,6,5, 4,3,2,1 ++ * out : 23,40,41,26 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_dp2add_w_h(__m128i in_c, __m128i in_h, __m128i in_l) ++{ ++ __m128i out; ++ ++ out = __lsx_vmaddwev_w_h(in_c, in_h, in_l); ++ out = __lsx_vmaddwod_w_h(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Set each element of vector between 0 and 255 ++ * Arguments : Inputs - _in ++ * Outputs - out ++ * Retrun Type - halfword ++ * Details : Signed byte elements from _in are clamped between 0 and 255. ++ * Example : out = __lsx_clamp255_h(_in) ++ * _in : -8,255,280,249, -8,255,280,249 ++ * out : 0,255,255,249, 0,255,255,249 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_clamp255_h(__m128i _in) ++{ ++ __m128i out; ++ ++ out = __lsx_vmaxi_h(_in, 0); ++ out = __lsx_vsat_hu(out, 7); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Set each element of vector between 0 and 255 ++ * Arguments : Inputs - _in ++ * Outputs - out ++ * Retrun Type - word ++ * Details : Signed byte elements from _in are clamped between 0 and 255. ++ * Example : out = __lsx_clamp255_w(_in) ++ * _in : -8,255,280,249 ++ * out : 0,255,255,249 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_clamp255_w(__m128i _in) ++{ ++ __m128i out; ++ ++ out = __lsx_vmaxi_w(_in, 0); ++ out = __lsx_vsat_wu(out, 7); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Transposes 4x4 block with word elements in vectors ++ * Arguments : Inputs - in0, in1, in2, in3 ++ * Outputs - out0, out1, out2, out3 ++ * Details : ++ * Example : ++ * 1, 2, 3, 4 1, 5, 9,13 ++ * 5, 6, 7, 8 to 2, 6,10,14 ++ * 9,10,11,12 =====> 3, 7,11,15 ++ * 13,14,15,16 4, 8,12,16 ++ * ============================================================================= ++ */ ++#define TRANSPOSE4x4_W(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++{ \ ++ __m128i _t0, _t1, _t2, _t3; \ ++ \ ++ _t0 = __lsx_vilvl_w(_in1, _in0); \ ++ _t1 = __lsx_vilvh_w(_in1, _in0); \ ++ _t2 = __lsx_vilvl_w(_in3, _in2); \ ++ _t3 = __lsx_vilvh_w(_in3, _in2); \ ++ _out0 = __lsx_vilvl_d(_t2, _t0); \ ++ _out1 = __lsx_vilvh_d(_t2, _t0); \ ++ _out2 = __lsx_vilvl_d(_t3, _t1); \ ++ _out3 = __lsx_vilvh_d(_t3, _t1); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Transposes 8x8 block with half word elements in vectors ++ * Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7 ++ * Outputs - out0, out1, out2, out3, out4, out5, out6, out7 ++ * Details : ++ * Example : ++ * 00,01,02,03,04,05,06,07 00,10,20,30,40,50,60,70 ++ * 10,11,12,13,14,15,16,17 01,11,21,31,41,51,61,71 ++ * 20,21,22,23,24,25,26,27 02,12,22,32,42,52,62,72 ++ * 30,31,32,33,34,35,36,37 to 03,13,23,33,43,53,63,73 ++ * 40,41,42,43,44,45,46,47 ======> 04,14,24,34,44,54,64,74 ++ * 50,51,52,53,54,55,56,57 05,15,25,35,45,55,65,75 ++ * 60,61,62,63,64,65,66,67 06,16,26,36,46,56,66,76 ++ * 70,71,72,73,74,75,76,77 07,17,27,37,47,57,67,77 ++ * ============================================================================= ++ */ ++#define TRANSPOSE8x8_H(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ ++{ \ ++ __m128i _s0, _s1, _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ ++ \ ++ _s0 = __lsx_vilvl_h(_in6, _in4); \ ++ _s1 = __lsx_vilvl_h(_in7, _in5); \ ++ _t0 = __lsx_vilvl_h(_s1, _s0); \ ++ _t1 = __lsx_vilvh_h(_s1, _s0); \ ++ _s0 = __lsx_vilvh_h(_in6, _in4); \ ++ _s1 = __lsx_vilvh_h(_in7, _in5); \ ++ _t2 = __lsx_vilvl_h(_s1, _s0); \ ++ _t3 = __lsx_vilvh_h(_s1, _s0); \ ++ _s0 = __lsx_vilvl_h(_in2, _in0); \ ++ _s1 = __lsx_vilvl_h(_in3, _in1); \ ++ _t4 = __lsx_vilvl_h(_s1, _s0); \ ++ _t5 = __lsx_vilvh_h(_s1, _s0); \ ++ _s0 = __lsx_vilvh_h(_in2, _in0); \ ++ _s1 = __lsx_vilvh_h(_in3, _in1); \ ++ _t6 = __lsx_vilvl_h(_s1, _s0); \ ++ _t7 = __lsx_vilvh_h(_s1, _s0); \ ++ \ ++ _out0 = __lsx_vpickev_d(_t0, _t4); \ ++ _out2 = __lsx_vpickev_d(_t1, _t5); \ ++ _out4 = __lsx_vpickev_d(_t2, _t6); \ ++ _out6 = __lsx_vpickev_d(_t3, _t7); \ ++ _out1 = __lsx_vpickod_d(_t0, _t4); \ ++ _out3 = __lsx_vpickod_d(_t1, _t5); \ ++ _out5 = __lsx_vpickod_d(_t2, _t6); \ ++ _out7 = __lsx_vpickod_d(_t3, _t7); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Butterfly of 4 input vectors ++ * Arguments : Inputs - in0, in1, in2, in3 ++ * Outputs - out0, out1, out2, out3 ++ * Details : Butterfly operation ++ * Example : ++ * out0 = in0 + in3; ++ * out1 = in1 + in2; ++ * out2 = in1 - in2; ++ * out3 = in0 - in3; ++ * ============================================================================= ++ */ ++#define BUTTERFLY_4_B(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++{ \ ++ _out0 = __lsx_vadd_b(_in0, _in3); \ ++ _out1 = __lsx_vadd_b(_in1, _in2); \ ++ _out2 = __lsx_vsub_b(_in1, _in2); \ ++ _out3 = __lsx_vsub_b(_in0, _in3); \ ++} ++#define BUTTERFLY_4_H(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++{ \ ++ _out0 = __lsx_vadd_h(_in0, _in3); \ ++ _out1 = __lsx_vadd_h(_in1, _in2); \ ++ _out2 = __lsx_vsub_h(_in1, _in2); \ ++ _out3 = __lsx_vsub_h(_in0, _in3); \ ++} ++#define BUTTERFLY_4_W(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++{ \ ++ _out0 = __lsx_vadd_w(_in0, _in3); \ ++ _out1 = __lsx_vadd_w(_in1, _in2); \ ++ _out2 = __lsx_vsub_w(_in1, _in2); \ ++ _out3 = __lsx_vsub_w(_in0, _in3); \ ++} ++#define BUTTERFLY_4_D(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++{ \ ++ _out0 = __lsx_vadd_d(_in0, _in3); \ ++ _out1 = __lsx_vadd_d(_in1, _in2); \ ++ _out2 = __lsx_vsub_d(_in1, _in2); \ ++ _out3 = __lsx_vsub_d(_in0, _in3); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Print out elements in vector. ++ * Arguments : Inputs - RTYPE, _element_num, _in0, _enter ++ * Outputs - ++ * Details : Print out '_element_num' elements in 'RTYPE' vector '_in0', if ++ * '_enter' is TRUE, prefix "\nVP:" will be added first. ++ * Example : VECT_PRINT(v4i32,4,in0,1); // in0: 1,2,3,4 ++ * VP:1,2,3,4, ++ * ============================================================================= ++ */ ++#define VECT_PRINT(RTYPE, element_num, in0, enter) \ ++{ \ ++ RTYPE _tmp0 = (RTYPE)in0; \ ++ int _i = 0; \ ++ if (enter) \ ++ printf("\nVP:"); \ ++ for(_i = 0; _i < element_num; _i++) \ ++ printf("%d,",_tmp0[_i]); \ ++} ++ ++#endif /* GENERIC_MACROS_LSX_H */ ++#endif /* AVUTIL_LOONGARCH_GENERIC_MACROS_LSX_H */ +diff --git a/libavutil/mips/asmdefs.h b/libavutil/mips/asmdefs.h +index 76bb2b93fa..659342bab9 100644 +--- a/libavutil/mips/asmdefs.h ++++ b/libavutil/mips/asmdefs.h +@@ -27,6 +27,8 @@ + #ifndef AVUTIL_MIPS_ASMDEFS_H + #define AVUTIL_MIPS_ASMDEFS_H + ++#include ++ + #if defined(_ABI64) && _MIPS_SIM == _ABI64 + # define mips_reg int64_t + # define PTRSIZE " 8 " +@@ -97,4 +99,10 @@ __asm__(".macro parse_r var r\n\t" + ".endif\n\t" + ".endm"); + ++/* General union structure for clang adaption */ ++union mmi_intfloat64 { ++ int64_t i; ++ double f; ++}; ++ + #endif /* AVCODEC_MIPS_ASMDEFS_H */ +diff --git a/libavutil/mips/generic_macros_msa.h b/libavutil/mips/generic_macros_msa.h +index bb25e9fd74..1486f7296e 100644 +--- a/libavutil/mips/generic_macros_msa.h ++++ b/libavutil/mips/generic_macros_msa.h +@@ -25,10 +25,6 @@ + #include + #include + +-#if HAVE_MSA2 +-#include +-#endif +- + #define ALIGNMENT 16 + #define ALLOC_ALIGNED(align) __attribute__ ((aligned((align) << 1))) + +@@ -1119,15 +1115,6 @@ + unsigned absolute diff values, even-odd pairs are added + together to generate 8 halfword results. + */ +-#if HAVE_MSA2 +-#define SAD_UB2_UH(in0, in1, ref0, ref1) \ +-( { \ +- v8u16 sad_m = { 0 }; \ +- sad_m += __builtin_msa2_sad_adj2_u_w2x_b((v16u8) in0, (v16u8) ref0); \ +- sad_m += __builtin_msa2_sad_adj2_u_w2x_b((v16u8) in1, (v16u8) ref1); \ +- sad_m; \ +-} ) +-#else + #define SAD_UB2_UH(in0, in1, ref0, ref1) \ + ( { \ + v16u8 diff0_m, diff1_m; \ +@@ -1141,7 +1128,6 @@ + \ + sad_m; \ + } ) +-#endif // #if HAVE_MSA2 + + /* Description : Insert specified word elements from input vectors to 1 + destination vector +@@ -2183,12 +2169,6 @@ + extracted and interleaved with same vector 'in0' to generate + 4 word elements keeping sign intact + */ +-#if HAVE_MSA2 +-#define UNPCK_R_SH_SW(in, out) \ +-{ \ +- out = (v4i32) __builtin_msa2_w2x_lo_s_h((v8i16) in); \ +-} +-#else + #define UNPCK_R_SH_SW(in, out) \ + { \ + v8i16 sign_m; \ +@@ -2196,7 +2176,6 @@ + sign_m = __msa_clti_s_h((v8i16) in, 0); \ + out = (v4i32) __msa_ilvr_h(sign_m, (v8i16) in); \ + } +-#endif // #if HAVE_MSA2 + + /* Description : Sign extend byte elements from input vector and return + halfword results in pair of vectors +@@ -2209,13 +2188,6 @@ + Then interleaved left with same vector 'in0' to + generate 8 signed halfword elements in 'out1' + */ +-#if HAVE_MSA2 +-#define UNPCK_SB_SH(in, out0, out1) \ +-{ \ +- out0 = (v4i32) __builtin_msa2_w2x_lo_s_b((v16i8) in); \ +- out1 = (v4i32) __builtin_msa2_w2x_hi_s_b((v16i8) in); \ +-} +-#else + #define UNPCK_SB_SH(in, out0, out1) \ + { \ + v16i8 tmp_m; \ +@@ -2223,7 +2195,6 @@ + tmp_m = __msa_clti_s_b((v16i8) in, 0); \ + ILVRL_B2_SH(tmp_m, in, out0, out1); \ + } +-#endif // #if HAVE_MSA2 + + /* Description : Zero extend unsigned byte elements to halfword elements + Arguments : Inputs - in (1 input unsigned byte vector) +@@ -2250,13 +2221,6 @@ + Then interleaved left with same vector 'in0' to + generate 4 signed word elements in 'out1' + */ +-#if HAVE_MSA2 +-#define UNPCK_SH_SW(in, out0, out1) \ +-{ \ +- out0 = (v4i32) __builtin_msa2_w2x_lo_s_h((v8i16) in); \ +- out1 = (v4i32) __builtin_msa2_w2x_hi_s_h((v8i16) in); \ +-} +-#else + #define UNPCK_SH_SW(in, out0, out1) \ + { \ + v8i16 tmp_m; \ +@@ -2264,7 +2228,6 @@ + tmp_m = __msa_clti_s_h((v8i16) in, 0); \ + ILVRL_H2_SW(tmp_m, in, out0, out1); \ + } +-#endif // #if HAVE_MSA2 + + /* Description : Swap two variables + Arguments : Inputs - in0, in1 +diff --git a/libavutil/tests/cpu.c b/libavutil/tests/cpu.c +index c853371fb3..0a6c0cd32e 100644 +--- a/libavutil/tests/cpu.c ++++ b/libavutil/tests/cpu.c +@@ -77,6 +77,9 @@ static const struct { + { AV_CPU_FLAG_BMI2, "bmi2" }, + { AV_CPU_FLAG_AESNI, "aesni" }, + { AV_CPU_FLAG_AVX512, "avx512" }, ++#elif ARCH_LOONGARCH ++ { AV_CPU_FLAG_LSX, "lsx" }, ++ { AV_CPU_FLAG_LASX, "lasx" }, + #endif + { 0 } + }; +diff --git a/libswscale/loongarch/Makefile b/libswscale/loongarch/Makefile +new file mode 100644 +index 0000000000..47dae42ff7 +--- /dev/null ++++ b/libswscale/loongarch/Makefile +@@ -0,0 +1,6 @@ ++OBJS-$(CONFIG_SWSCALE) += loongarch/swscale_init_loongarch.o ++LASX-OBJS-$(CONFIG_SWSCALE) += loongarch/swscale_lasx.o \ ++ loongarch/output_lasx.o \ ++ loongarch/input_lasx.o \ ++ loongarch/yuv2rgb_lasx.o \ ++ loongarch/rgb2rgb_lasx.o +diff --git a/libswscale/loongarch/input_lasx.c b/libswscale/loongarch/input_lasx.c +new file mode 100644 +index 0000000000..49b37cd0f6 +--- /dev/null ++++ b/libswscale/loongarch/input_lasx.c +@@ -0,0 +1,191 @@ ++/* ++ * Copyright (C) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hao Chen(chenhao@loongson.cn) ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "swscale_loongarch.h" ++#include "libavutil/loongarch/generic_macros_lasx.h" ++ ++void planar_rgb_to_uv_lasx(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4], ++ int width, int32_t *rgb2yuv) ++{ ++ int i; ++ uint16_t *dstU = (uint16_t *)_dstU; ++ uint16_t *dstV = (uint16_t *)_dstV; ++ int set = 0x4001 << (RGB2YUV_SHIFT - 7); ++ int len = width - 15; ++ int32_t tem_ru = rgb2yuv[RU_IDX], tem_gu = rgb2yuv[GU_IDX], tem_bu = rgb2yuv[BU_IDX]; ++ int32_t tem_rv = rgb2yuv[RV_IDX], tem_gv = rgb2yuv[GV_IDX], tem_bv = rgb2yuv[BV_IDX]; ++ int shift = RGB2YUV_SHIFT - 6; ++ const uint8_t *src0 = src[0], *src1 = src[1], *src2 = src[2]; ++ __m256i ru, gu, bu, rv, gv, bv; ++ __m256i mask = {0x0D0C090805040100, 0x1D1C191815141110, 0x0D0C090805040100, 0x1D1C191815141110}; ++ __m256i temp = __lasx_xvreplgr2vr_w(set); ++ __m256i sra = __lasx_xvreplgr2vr_w(shift); ++ ++ ru = __lasx_xvreplgr2vr_w(tem_ru); ++ gu = __lasx_xvreplgr2vr_w(tem_gu); ++ bu = __lasx_xvreplgr2vr_w(tem_bu); ++ rv = __lasx_xvreplgr2vr_w(tem_rv); ++ gv = __lasx_xvreplgr2vr_w(tem_gv); ++ bv = __lasx_xvreplgr2vr_w(tem_bv); ++ for (i = 0; i < len; i += 16) { ++ __m256i _g, _b, _r; ++ __m256i g_l, g_h, b_l, b_h, r_l, r_h; ++ __m256i v_l, v_h, u_l, u_h, u_lh, v_lh; ++ ++ _g = LASX_LD((src0 + i)); ++ _b = LASX_LD((src1 + i)); ++ _r = LASX_LD((src2 + i)); ++ LASX_UNPCK_L_WU_BU(_g, g_l); ++ LASX_UNPCK_L_WU_BU_2(_b, _r, b_l, r_l); ++ _g = __lasx_xvpermi_d(_g, 0x01); ++ _b = __lasx_xvpermi_d(_b, 0x01); ++ _r = __lasx_xvpermi_d(_r, 0x01); ++ LASX_UNPCK_L_WU_BU(_g, g_h); ++ LASX_UNPCK_L_WU_BU_2(_b, _r, b_h, r_h); ++ u_l = __lasx_xvmadd_w(temp, ru, r_l); ++ u_h = __lasx_xvmadd_w(temp, ru, r_h); ++ v_l = __lasx_xvmadd_w(temp, rv, r_l); ++ v_h = __lasx_xvmadd_w(temp, rv, r_h); ++ u_l = __lasx_xvmadd_w(u_l, gu, g_l); ++ u_l = __lasx_xvmadd_w(u_l, bu, b_l); ++ u_h = __lasx_xvmadd_w(u_h, gu, g_h); ++ u_h = __lasx_xvmadd_w(u_h, bu, b_h); ++ v_l = __lasx_xvmadd_w(v_l, gv, g_l); ++ v_l = __lasx_xvmadd_w(v_l, bv, b_l); ++ v_h = __lasx_xvmadd_w(v_h, gv, g_h); ++ v_h = __lasx_xvmadd_w(v_h, bv, b_h); ++ u_l = __lasx_xvsra_w(u_l, sra); ++ u_h = __lasx_xvsra_w(u_h, sra); ++ v_l = __lasx_xvsra_w(v_l, sra); ++ v_h = __lasx_xvsra_w(v_h, sra); ++ LASX_SHUF_B_2_128SV(u_h, u_l, v_h, v_l, mask, mask, u_lh, v_lh); ++ u_lh = __lasx_xvpermi_d(u_lh, 0xD8); ++ v_lh = __lasx_xvpermi_d(v_lh, 0xD8); ++ __lasx_xvst(u_lh, (dstU + i), 0); ++ __lasx_xvst(v_lh, (dstV + i), 0); ++ } ++ if (width - i >= 8) { ++ __m256i _g, _b, _r; ++ __m256i g_l, b_l, r_l; ++ __m256i v_l, u_l, u, v; ++ ++ _g = __lasx_xvldrepl_d((src0 + i), 0); ++ _b = __lasx_xvldrepl_d((src1 + i), 0); ++ _r = __lasx_xvldrepl_d((src2 + i), 0); ++ LASX_UNPCK_L_WU_BU(_g, g_l); ++ LASX_UNPCK_L_WU_BU_2(_b, _r, b_l, r_l); ++ u_l = __lasx_xvmadd_w(temp, ru, r_l); ++ v_l = __lasx_xvmadd_w(temp, rv, r_l); ++ u_l = __lasx_xvmadd_w(u_l, gu, g_l); ++ u_l = __lasx_xvmadd_w(u_l, bu, b_l); ++ v_l = __lasx_xvmadd_w(v_l, gv, g_l); ++ v_l = __lasx_xvmadd_w(v_l, bv, b_l); ++ u_l = __lasx_xvsra_w(u_l, sra); ++ v_l = __lasx_xvsra_w(v_l, sra); ++ LASX_SHUF_B_2_128SV(u_l, u_l, v_l, v_l, mask, mask, u, v); ++ __lasx_xvstelm_d(u, (dstU + i), 0, 0); ++ __lasx_xvstelm_d(u, (dstU + i), 8, 2); ++ __lasx_xvstelm_d(v, (dstV + i), 0, 0); ++ __lasx_xvstelm_d(v, (dstV + i), 8, 2); ++ i += 8; ++ } ++ for (; i < width; i++) { ++ int g = src[0][i]; ++ int b = src[1][i]; ++ int r = src[2][i]; ++ ++ dstU[i] = (tem_ru * r + tem_gu * g + tem_bu * b + set) >> shift; ++ dstV[i] = (tem_rv * r + tem_gv * g + tem_bv * b + set) >> shift; ++ } ++} ++ ++void planar_rgb_to_y_lasx(uint8_t *_dst, const uint8_t *src[4], int width, ++ int32_t *rgb2yuv) ++{ ++ int i; ++ int shift = (RGB2YUV_SHIFT - 6); ++ int set = 0x801 << (RGB2YUV_SHIFT - 7); ++ int len = width - 15; ++ uint16_t *dst = (uint16_t *)_dst; ++ int32_t tem_ry = rgb2yuv[RY_IDX], tem_gy = rgb2yuv[GY_IDX]; ++ int32_t tem_by = rgb2yuv[BY_IDX]; ++ const uint8_t *src0 = src[0], *src1 = src[1], *src2 = src[2]; ++ __m256i mask = {0x0D0C090805040100, 0x1D1C191815141110, 0x0D0C090805040100, 0x1D1C191815141110}; ++ __m256i temp = __lasx_xvreplgr2vr_w(set); ++ __m256i sra = __lasx_xvreplgr2vr_w(shift); ++ __m256i ry = __lasx_xvreplgr2vr_w(tem_ry); ++ __m256i gy = __lasx_xvreplgr2vr_w(tem_gy); ++ __m256i by = __lasx_xvreplgr2vr_w(tem_by); ++ ++ for (i = 0; i < len; i += 16) { ++ __m256i _g, _b, _r; ++ __m256i g_l, g_h, b_l, b_h, r_l, r_h; ++ __m256i y_l, y_h, y_lh; ++ ++ _g = LASX_LD((src0 + i)); ++ _b = LASX_LD((src1 + i)); ++ _r = LASX_LD((src2 + i)); ++ LASX_UNPCK_L_WU_BU(_g, g_l); ++ LASX_UNPCK_L_WU_BU_2(_b, _r, b_l, r_l); ++ _g = __lasx_xvpermi_d(_g, 0x01); ++ _b = __lasx_xvpermi_d(_b, 0x01); ++ _r = __lasx_xvpermi_d(_r, 0x01); ++ LASX_UNPCK_L_WU_BU(_g, g_h); ++ LASX_UNPCK_L_WU_BU_2(_b, _r, b_h, r_h); ++ y_l = __lasx_xvmadd_w(temp, ry, r_l); ++ y_h = __lasx_xvmadd_w(temp, ry, r_h); ++ y_l = __lasx_xvmadd_w(y_l, gy, g_l); ++ y_l = __lasx_xvmadd_w(y_l, by, b_l); ++ y_h = __lasx_xvmadd_w(y_h, gy, g_h); ++ y_h = __lasx_xvmadd_w(y_h, by, b_h); ++ y_l = __lasx_xvsra_w(y_l, sra); ++ y_h = __lasx_xvsra_w(y_h, sra); ++ LASX_SHUF_B_128SV(y_h, y_l, mask, y_lh); ++ y_lh = __lasx_xvpermi_d(y_lh, 0xD8); ++ __lasx_xvst(y_lh, (dst + i), 0); ++ } ++ if (width - i >= 8) { ++ __m256i _g, _b, _r; ++ __m256i g_l, b_l, r_l; ++ __m256i y_l, y; ++ ++ _g = __lasx_xvldrepl_d((src0 + i), 0); ++ _b = __lasx_xvldrepl_d((src1 + i), 0); ++ _r = __lasx_xvldrepl_d((src2 + i), 0); ++ LASX_UNPCK_L_WU_BU(_g, g_l); ++ LASX_UNPCK_L_WU_BU_2(_b, _r, b_l, r_l); ++ y_l = __lasx_xvmadd_w(temp, ry, r_l); ++ y_l = __lasx_xvmadd_w(y_l, gy, g_l); ++ y_l = __lasx_xvmadd_w(y_l, by, b_l); ++ y_l = __lasx_xvsra_w(y_l, sra); ++ LASX_SHUF_B_128SV(y_l, y_l, mask, y); ++ __lasx_xvstelm_d(y, (dst + i), 0, 0); ++ __lasx_xvstelm_d(y, (dst + i), 8, 2); ++ i += 8; ++ } ++ for (; i < width; i++) { ++ int g = src[0][i]; ++ int b = src[1][i]; ++ int r = src[2][i]; ++ ++ dst[i] = (tem_ry * r + tem_gy * g + tem_by * b + set) >> shift; ++ } ++} +diff --git a/libswscale/loongarch/output_lasx.c b/libswscale/loongarch/output_lasx.c +new file mode 100644 +index 0000000000..b3fb1f5ce0 +--- /dev/null ++++ b/libswscale/loongarch/output_lasx.c +@@ -0,0 +1,2436 @@ ++/* ++ * Copyright (C) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hao Chen(chenhao@loongson.cn) ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "swscale_loongarch.h" ++#include "libavutil/loongarch/generic_macros_lasx.h" ++ ++void ff_yuv2planeX_8_lasx(const int16_t *filter, int filterSize, ++ const int16_t **src, uint8_t *dest, int dstW, ++ const uint8_t *dither, int offset) ++{ ++ int i; ++ int len = dstW - 15; ++ __m256i mask = {0x1C1814100C080400, 0x0101010101010101, 0x1C1814100C080400, 0x0101010101010101}; ++ __m256i val1, val2, val3; ++ uint8_t dither0 = dither[offset & 7]; ++ uint8_t dither1 = dither[(offset + 1) & 7]; ++ uint8_t dither2 = dither[(offset + 2) & 7]; ++ uint8_t dither3 = dither[(offset + 3) & 7]; ++ uint8_t dither4 = dither[(offset + 4) & 7]; ++ uint8_t dither5 = dither[(offset + 5) & 7]; ++ uint8_t dither6 = dither[(offset + 6) & 7]; ++ uint8_t dither7 = dither[(offset + 7) & 7]; ++ int val_1[8] = {dither0, dither1, dither2, dither3, dither0, dither1, dither2, dither3}; ++ int val_2[8] = {dither4, dither5, dither6, dither7, dither4, dither5, dither6, dither7}; ++ int val_3[8] = {dither0, dither1, dither2, dither3, dither4, dither5, dither6, dither7}; ++ ++ val1 = LASX_LD(val_1); ++ val2 = LASX_LD(val_2); ++ val3 = LASX_LD(val_3); ++ ++ for (i = 0; i < len; i += 16) { ++ int j; ++ __m256i src0, filter0, val_lh; ++ __m256i val_l, val_h; ++ ++ val_l = __lasx_xvslli_w(val1, 12); ++ val_h = __lasx_xvslli_w(val2, 12); ++ ++ for (j = 0; j < filterSize; j++) { ++ src0 = LASX_LD(src[j]+ i); ++ filter0 = __lasx_xvldrepl_h((filter + j), 0); ++ LASX_MADDWL_W_H_128SV(val_l, src0, filter0, val_l); ++ LASX_MADDWH_W_H_128SV(val_h, src0, filter0, val_h); ++ } ++ val_l = __lasx_xvsrai_w(val_l, 19); ++ val_h = __lasx_xvsrai_w(val_h, 19); ++ LASX_CLIP_W_0_255(val_l, val_l); ++ LASX_CLIP_W_0_255(val_h, val_h); ++ LASX_SHUF_B_128SV(val_h, val_l, mask, val_lh); ++ __lasx_xvstelm_d(val_lh, (dest + i), 0, 0); ++ __lasx_xvstelm_d(val_lh, (dest + i), 8, 2); ++ } ++ if (dstW - i >= 8){ ++ int j; ++ __m256i src0, filter0, val_h; ++ __m256i val_l; ++ ++ val_l = __lasx_xvslli_w(val3, 12); ++ ++ for (j = 0; j < filterSize; j++) { ++ src0 = LASX_LD(src[j] + i); ++ src0 = __lasx_xvpermi_d(src0, 0xD8); ++ filter0 = __lasx_xvldrepl_h((filter + j), 0); ++ LASX_MADDWL_W_H_128SV(val_l, src0, filter0, val_l); ++ } ++ val_l = __lasx_xvsrai_w(val_l, 19); ++ LASX_CLIP_W_0_255(val_l, val_l); ++ val_h = __lasx_xvpermi_d(val_l, 0x4E); ++ LASX_SHUF_B_128SV(val_h, val_l, mask, val_l); ++ __lasx_xvstelm_d(val_l, (dest + i), 0, 0); ++ i += 8; ++ } ++ for (; i < dstW; i++) { ++ int val = dither[(i + offset) & 7] << 12; ++ int j; ++ for (j = 0; j< filterSize; j++) ++ val += src[j][i] * filter[j]; ++ ++ dest[i] = av_clip_uint8(val >> 19); ++ } ++} ++ ++/*Copy from libswscale/output.c*/ ++static av_always_inline void ++yuv2rgb_write(uint8_t *_dest, int i, int Y1, int Y2, ++ unsigned A1, unsigned A2, ++ const void *_r, const void *_g, const void *_b, int y, ++ enum AVPixelFormat target, int hasAlpha) ++{ ++ if (target == AV_PIX_FMT_ARGB || target == AV_PIX_FMT_RGBA || ++ target == AV_PIX_FMT_ABGR || target == AV_PIX_FMT_BGRA) { ++ uint32_t *dest = (uint32_t *) _dest; ++ const uint32_t *r = (const uint32_t *) _r; ++ const uint32_t *g = (const uint32_t *) _g; ++ const uint32_t *b = (const uint32_t *) _b; ++ ++#if CONFIG_SMALL ++ dest[i * 2 + 0] = r[Y1] + g[Y1] + b[Y1]; ++ dest[i * 2 + 1] = r[Y2] + g[Y2] + b[Y2]; ++#else ++#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1 ++ int sh = (target == AV_PIX_FMT_RGB32_1 || ++ target == AV_PIX_FMT_BGR32_1) ? 0 : 24; ++ av_assert2((((r[Y1] + g[Y1] + b[Y1]) >> sh) & 0xFF) == 0xFF); ++#endif ++ dest[i * 2 + 0] = r[Y1] + g[Y1] + b[Y1]; ++ dest[i * 2 + 1] = r[Y2] + g[Y2] + b[Y2]; ++#endif ++ } else if (target == AV_PIX_FMT_RGB24 || target == AV_PIX_FMT_BGR24) { ++ uint8_t *dest = (uint8_t *) _dest; ++ const uint8_t *r = (const uint8_t *) _r; ++ const uint8_t *g = (const uint8_t *) _g; ++ const uint8_t *b = (const uint8_t *) _b; ++ ++#define r_b ((target == AV_PIX_FMT_RGB24) ? r : b) ++#define b_r ((target == AV_PIX_FMT_RGB24) ? b : r) ++ ++ dest[i * 6 + 0] = r_b[Y1]; ++ dest[i * 6 + 1] = g[Y1]; ++ dest[i * 6 + 2] = b_r[Y1]; ++ dest[i * 6 + 3] = r_b[Y2]; ++ dest[i * 6 + 4] = g[Y2]; ++ dest[i * 6 + 5] = b_r[Y2]; ++#undef r_b ++#undef b_r ++ } else if (target == AV_PIX_FMT_RGB565 || target == AV_PIX_FMT_BGR565 || ++ target == AV_PIX_FMT_RGB555 || target == AV_PIX_FMT_BGR555 || ++ target == AV_PIX_FMT_RGB444 || target == AV_PIX_FMT_BGR444) { ++ uint16_t *dest = (uint16_t *) _dest; ++ const uint16_t *r = (const uint16_t *) _r; ++ const uint16_t *g = (const uint16_t *) _g; ++ const uint16_t *b = (const uint16_t *) _b; ++ int dr1, dg1, db1, dr2, dg2, db2; ++ ++ if (target == AV_PIX_FMT_RGB565 || target == AV_PIX_FMT_BGR565) { ++ dr1 = ff_dither_2x2_8[ y & 1 ][0]; ++ dg1 = ff_dither_2x2_4[ y & 1 ][0]; ++ db1 = ff_dither_2x2_8[(y & 1) ^ 1][0]; ++ dr2 = ff_dither_2x2_8[ y & 1 ][1]; ++ dg2 = ff_dither_2x2_4[ y & 1 ][1]; ++ db2 = ff_dither_2x2_8[(y & 1) ^ 1][1]; ++ } else if (target == AV_PIX_FMT_RGB555 || target == AV_PIX_FMT_BGR555) { ++ dr1 = ff_dither_2x2_8[ y & 1 ][0]; ++ dg1 = ff_dither_2x2_8[ y & 1 ][1]; ++ db1 = ff_dither_2x2_8[(y & 1) ^ 1][0]; ++ dr2 = ff_dither_2x2_8[ y & 1 ][1]; ++ dg2 = ff_dither_2x2_8[ y & 1 ][0]; ++ db2 = ff_dither_2x2_8[(y & 1) ^ 1][1]; ++ } else { ++ dr1 = ff_dither_4x4_16[ y & 3 ][0]; ++ dg1 = ff_dither_4x4_16[ y & 3 ][1]; ++ db1 = ff_dither_4x4_16[(y & 3) ^ 3][0]; ++ dr2 = ff_dither_4x4_16[ y & 3 ][1]; ++ dg2 = ff_dither_4x4_16[ y & 3 ][0]; ++ db2 = ff_dither_4x4_16[(y & 3) ^ 3][1]; ++ } ++ ++ dest[i * 2 + 0] = r[Y1 + dr1] + g[Y1 + dg1] + b[Y1 + db1]; ++ dest[i * 2 + 1] = r[Y2 + dr2] + g[Y2 + dg2] + b[Y2 + db2]; ++ } else /* 8/4 bits */ { ++ uint8_t *dest = (uint8_t *) _dest; ++ const uint8_t *r = (const uint8_t *) _r; ++ const uint8_t *g = (const uint8_t *) _g; ++ const uint8_t *b = (const uint8_t *) _b; ++ int dr1, dg1, db1, dr2, dg2, db2; ++ ++ if (target == AV_PIX_FMT_RGB8 || target == AV_PIX_FMT_BGR8) { ++ const uint8_t * const d64 = ff_dither_8x8_73[y & 7]; ++ const uint8_t * const d32 = ff_dither_8x8_32[y & 7]; ++ dr1 = dg1 = d32[(i * 2 + 0) & 7]; ++ db1 = d64[(i * 2 + 0) & 7]; ++ dr2 = dg2 = d32[(i * 2 + 1) & 7]; ++ db2 = d64[(i * 2 + 1) & 7]; ++ } else { ++ const uint8_t * const d64 = ff_dither_8x8_73 [y & 7]; ++ const uint8_t * const d128 = ff_dither_8x8_220[y & 7]; ++ dr1 = db1 = d128[(i * 2 + 0) & 7]; ++ dg1 = d64[(i * 2 + 0) & 7]; ++ dr2 = db2 = d128[(i * 2 + 1) & 7]; ++ dg2 = d64[(i * 2 + 1) & 7]; ++ } ++ ++ if (target == AV_PIX_FMT_RGB4 || target == AV_PIX_FMT_BGR4) { ++ dest[i] = r[Y1 + dr1] + g[Y1 + dg1] + b[Y1 + db1] + ++ ((r[Y2 + dr2] + g[Y2 + dg2] + b[Y2 + db2]) << 4); ++ } else { ++ dest[i * 2 + 0] = r[Y1 + dr1] + g[Y1 + dg1] + b[Y1 + db1]; ++ dest[i * 2 + 1] = r[Y2 + dr2] + g[Y2 + dg2] + b[Y2 + db2]; ++ } ++ } ++} ++ ++#define WRITE_YUV2RGB_16(y_l, y_h, u, v, count, r, g, b, y, \ ++ target, Y1, Y2, U, V) \ ++{ \ ++ Y1 = __lasx_xvpickve2gr_w(y_l, 0); \ ++ Y2 = __lasx_xvpickve2gr_w(y_l, 1); \ ++ U = __lasx_xvpickve2gr_w(u, 0); \ ++ V = __lasx_xvpickve2gr_w(v, 0); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_l, 2); \ ++ Y2 = __lasx_xvpickve2gr_w(y_l, 3); \ ++ U = __lasx_xvpickve2gr_w(u, 1); \ ++ V = __lasx_xvpickve2gr_w(v, 1); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_h, 0); \ ++ Y2 = __lasx_xvpickve2gr_w(y_h, 1); \ ++ U = __lasx_xvpickve2gr_w(u, 2); \ ++ V = __lasx_xvpickve2gr_w(v, 2); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_h, 2); \ ++ Y2 = __lasx_xvpickve2gr_w(y_h, 3); \ ++ U = __lasx_xvpickve2gr_w(u, 3); \ ++ V = __lasx_xvpickve2gr_w(v, 3); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_l, 4); \ ++ Y2 = __lasx_xvpickve2gr_w(y_l, 5); \ ++ U = __lasx_xvpickve2gr_w(u, 4); \ ++ V = __lasx_xvpickve2gr_w(v, 4); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_l, 6); \ ++ Y2 = __lasx_xvpickve2gr_w(y_l, 7); \ ++ U = __lasx_xvpickve2gr_w(u, 5); \ ++ V = __lasx_xvpickve2gr_w(v, 5); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_h, 4); \ ++ Y2 = __lasx_xvpickve2gr_w(y_h, 5); \ ++ U = __lasx_xvpickve2gr_w(u, 6); \ ++ V = __lasx_xvpickve2gr_w(v, 6); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_h, 6); \ ++ Y2 = __lasx_xvpickve2gr_w(y_h, 7); \ ++ U = __lasx_xvpickve2gr_w(u, 7); \ ++ V = __lasx_xvpickve2gr_w(v, 7); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++} ++ ++#define WRITE_YUV2RGB_16_L(y_ev, y_od, u_ev, u_od, v_ev, v_od, \ ++ count, r, g, b, y, target, Y1, Y2, U, V) \ ++{ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 0); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 0); \ ++ U = __lasx_xvpickve2gr_w(u_ev, 0); \ ++ V = __lasx_xvpickve2gr_w(v_ev, 0); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 1); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 1); \ ++ U = __lasx_xvpickve2gr_w(u_od, 0); \ ++ V = __lasx_xvpickve2gr_w(v_od, 0); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 2); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 2); \ ++ U = __lasx_xvpickve2gr_w(u_ev, 1); \ ++ V = __lasx_xvpickve2gr_w(v_ev, 1); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 3); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 3); \ ++ U = __lasx_xvpickve2gr_w(u_od, 1); \ ++ V = __lasx_xvpickve2gr_w(v_od, 1); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 4); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 4); \ ++ U = __lasx_xvpickve2gr_w(u_ev, 2); \ ++ V = __lasx_xvpickve2gr_w(v_ev, 2); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 5); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 5); \ ++ U = __lasx_xvpickve2gr_w(u_od, 2); \ ++ V = __lasx_xvpickve2gr_w(v_od, 2); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 6); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 6); \ ++ U = __lasx_xvpickve2gr_w(u_ev, 3); \ ++ V = __lasx_xvpickve2gr_w(v_ev, 3); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 7); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 7); \ ++ U = __lasx_xvpickve2gr_w(u_od, 3); \ ++ V = __lasx_xvpickve2gr_w(v_od, 3); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++} ++ ++#define WRITE_YUV2RGB_16_H(y_ev, y_od, u_ev, u_od, v_ev, v_od, \ ++ count, r, g, b, y, target, Y1, Y2, U, V) \ ++{ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 0); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 0); \ ++ U = __lasx_xvpickve2gr_w(u_ev, 4); \ ++ V = __lasx_xvpickve2gr_w(v_ev, 4); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 1); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 1); \ ++ U = __lasx_xvpickve2gr_w(u_od, 4); \ ++ V = __lasx_xvpickve2gr_w(v_od, 4); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 2); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 2); \ ++ U = __lasx_xvpickve2gr_w(u_ev, 5); \ ++ V = __lasx_xvpickve2gr_w(v_ev, 5); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 3); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 3); \ ++ U = __lasx_xvpickve2gr_w(u_od, 5); \ ++ V = __lasx_xvpickve2gr_w(v_od, 5); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 4); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 4); \ ++ U = __lasx_xvpickve2gr_w(u_ev, 6); \ ++ V = __lasx_xvpickve2gr_w(v_ev, 6); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 5); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 5); \ ++ U = __lasx_xvpickve2gr_w(u_od, 6); \ ++ V = __lasx_xvpickve2gr_w(v_od, 6); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 6); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 6); \ ++ U = __lasx_xvpickve2gr_w(u_ev, 7); \ ++ V = __lasx_xvpickve2gr_w(v_ev, 7); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 7); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 7); \ ++ U = __lasx_xvpickve2gr_w(u_od, 7); \ ++ V = __lasx_xvpickve2gr_w(v_od, 7); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++} ++ ++#define WRITE_YUV2RGB_16_N(y_ev, y_od, u, v, count, \ ++ r, g, b, y, target, Y1, Y2, U, V) \ ++{ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 0); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 0); \ ++ U = __lasx_xvpickve2gr_w(u, 0); \ ++ V = __lasx_xvpickve2gr_w(v, 0); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 1); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 1); \ ++ U = __lasx_xvpickve2gr_w(u, 1); \ ++ V = __lasx_xvpickve2gr_w(v, 1); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 2); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 2); \ ++ U = __lasx_xvpickve2gr_w(u, 2); \ ++ V = __lasx_xvpickve2gr_w(v, 2); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 3); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 3); \ ++ U = __lasx_xvpickve2gr_w(u, 3); \ ++ V = __lasx_xvpickve2gr_w(v, 3); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 4); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 4); \ ++ U = __lasx_xvpickve2gr_w(u, 4); \ ++ V = __lasx_xvpickve2gr_w(v, 4); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 5); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 5); \ ++ U = __lasx_xvpickve2gr_w(u, 5); \ ++ V = __lasx_xvpickve2gr_w(v, 5); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 6); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 6); \ ++ U = __lasx_xvpickve2gr_w(u, 6); \ ++ V = __lasx_xvpickve2gr_w(v, 6); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 7); \ ++ Y2 = __lasx_xvpickve2gr_w(y_od, 7); \ ++ U = __lasx_xvpickve2gr_w(u, 7); \ ++ V = __lasx_xvpickve2gr_w(v, 7); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++} ++ ++#define WRITE_YUV2RGB_8_N(y_ev, uv, count, r, g, b, \ ++ y, target, Y1, Y2, U, V) \ ++{ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 0); \ ++ Y2 = __lasx_xvpickve2gr_w(y_ev, 1); \ ++ U = __lasx_xvpickve2gr_w(uv, 0); \ ++ V = __lasx_xvpickve2gr_w(uv, 4); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 2); \ ++ Y2 = __lasx_xvpickve2gr_w(y_ev, 3); \ ++ U = __lasx_xvpickve2gr_w(uv, 1); \ ++ V = __lasx_xvpickve2gr_w(uv, 5); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 4); \ ++ Y2 = __lasx_xvpickve2gr_w(y_ev, 5); \ ++ U = __lasx_xvpickve2gr_w(uv, 2); \ ++ V = __lasx_xvpickve2gr_w(uv, 6); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_ev, 6); \ ++ Y2 = __lasx_xvpickve2gr_w(y_ev, 7); \ ++ U = __lasx_xvpickve2gr_w(uv, 3); \ ++ V = __lasx_xvpickve2gr_w(uv, 7); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++} ++ ++#define WRITE_YUV2RGBL_8(y_l, u, v, count, r, g, b, y, target, \ ++ Y1, Y2, U, V) \ ++{ \ ++ Y1 = __lasx_xvpickve2gr_w(y_l, 0); \ ++ Y2 = __lasx_xvpickve2gr_w(y_l, 1); \ ++ U = __lasx_xvpickve2gr_w(u, 0); \ ++ V = __lasx_xvpickve2gr_w(v, 0); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_l, 2); \ ++ Y2 = __lasx_xvpickve2gr_w(y_l, 3); \ ++ U = __lasx_xvpickve2gr_w(u, 1); \ ++ V = __lasx_xvpickve2gr_w(v, 1); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_l, 4); \ ++ Y2 = __lasx_xvpickve2gr_w(y_l, 5); \ ++ U = __lasx_xvpickve2gr_w(u, 2); \ ++ V = __lasx_xvpickve2gr_w(v, 2); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_l, 6); \ ++ Y2 = __lasx_xvpickve2gr_w(y_l, 7); \ ++ U = __lasx_xvpickve2gr_w(u, 3); \ ++ V = __lasx_xvpickve2gr_w(v, 3); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++} ++ ++#define WRITE_YUV2RGBH_8(y_h, u, v, count, r, g, b, y, target, \ ++ Y1, Y2, U, V) \ ++{ \ ++ Y1 = __lasx_xvpickve2gr_w(y_h, 0); \ ++ Y2 = __lasx_xvpickve2gr_w(y_h, 1); \ ++ U = __lasx_xvpickve2gr_w(u, 4); \ ++ V = __lasx_xvpickve2gr_w(v, 4); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_h, 2); \ ++ Y2 = __lasx_xvpickve2gr_w(y_h, 3); \ ++ U = __lasx_xvpickve2gr_w(u, 5); \ ++ V = __lasx_xvpickve2gr_w(v, 5); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_h, 4); \ ++ Y2 = __lasx_xvpickve2gr_w(y_h, 5); \ ++ U = __lasx_xvpickve2gr_w(u, 6); \ ++ V = __lasx_xvpickve2gr_w(v, 6); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++ \ ++ Y1 = __lasx_xvpickve2gr_w(y_h, 6); \ ++ Y2 = __lasx_xvpickve2gr_w(y_h, 7); \ ++ U = __lasx_xvpickve2gr_w(u, 7); \ ++ V = __lasx_xvpickve2gr_w(v, 7); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++} ++ ++ ++static void ++yuv2rgb_X_template_lasx(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, int dstW, ++ int y, enum AVPixelFormat target, int hasAlpha) ++{ ++ int i, j; ++ int count = 0; ++ int t = 1 << 18; ++ int len = dstW >> 6; ++ int res = dstW & 63; ++ int len_count = (dstW + 1) >> 1; ++ const void *r, *g, *b; ++ int head = YUVRGB_TABLE_HEADROOM; ++ __m256i headroom = __lasx_xvldrepl_w(&head, 0); ++ ++ for (i = 0; i < len; i++) { ++ int Y1, Y2, U, V, count_lum = count << 1; ++ __m256i l_src1, l_src2, l_src3, l_src4, u_src1, u_src2, v_src1, v_src2; ++ __m256i yl1_ev, yl1_od, yh1_ev, yh1_od, yl2_ev, yl2_od, yh2_ev, yh2_od; ++ __m256i u1_ev, u1_od, v1_ev, v1_od, u2_ev, u2_od, v2_ev, v2_od, temp; ++ ++ yl1_ev = __lasx_xvldrepl_w(&t, 0); ++ yl1_od = yl1_ev; ++ yh1_ev = yl1_ev; ++ yh1_od = yl1_ev; ++ u1_ev = yl1_ev; ++ v1_ev = yl1_ev; ++ u1_od = yl1_ev; ++ v1_od = yl1_ev; ++ yl2_ev = yl1_ev; ++ yl2_od = yl1_ev; ++ yh2_ev = yl1_ev; ++ yh2_od = yl1_ev; ++ u2_ev = yl1_ev; ++ v2_ev = yl1_ev; ++ u2_od = yl1_ev; ++ v2_od = yl1_ev; ++ for (j = 0; j < lumFilterSize; j++) { ++ temp = __lasx_xvldrepl_h((lumFilter + j), 0); ++ LASX_LD_4((lumSrc[j] + count_lum), 16, l_src1, l_src2, l_src3, l_src4); ++ yl1_ev = __lasx_xvmaddwev_w_h(yl1_ev, temp, l_src1); ++ yl1_od = __lasx_xvmaddwod_w_h(yl1_od, temp, l_src1); ++ yh1_ev = __lasx_xvmaddwev_w_h(yh1_ev, temp, l_src2); ++ yh1_od = __lasx_xvmaddwod_w_h(yh1_od, temp, l_src2); ++ yl2_ev = __lasx_xvmaddwev_w_h(yl2_ev, temp, l_src3); ++ yl2_od = __lasx_xvmaddwod_w_h(yl2_od, temp, l_src3); ++ yh2_ev = __lasx_xvmaddwev_w_h(yh2_ev, temp, l_src4); ++ yh2_od = __lasx_xvmaddwod_w_h(yh2_od, temp, l_src4); ++ } ++ for (j = 0; j < chrFilterSize; j++) { ++ LASX_LD_2((chrUSrc[j] + count), 16, u_src1, u_src2); ++ LASX_LD_2((chrVSrc[j] + count), 16, v_src1, v_src2); ++ temp = __lasx_xvldrepl_h((chrFilter + j), 0); ++ u1_ev = __lasx_xvmaddwev_w_h(u1_ev, temp, u_src1); ++ u1_od = __lasx_xvmaddwod_w_h(u1_od, temp, u_src1); ++ v1_ev = __lasx_xvmaddwev_w_h(v1_ev, temp, v_src1); ++ v1_od = __lasx_xvmaddwod_w_h(v1_od, temp, v_src1); ++ u2_ev = __lasx_xvmaddwev_w_h(u2_ev, temp, u_src2); ++ u2_od = __lasx_xvmaddwod_w_h(u2_od, temp, u_src2); ++ v2_ev = __lasx_xvmaddwev_w_h(v2_ev, temp, v_src2); ++ v2_od = __lasx_xvmaddwod_w_h(v2_od, temp, v_src2); ++ } ++ yl1_ev = __lasx_xvsrai_w(yl1_ev, 19); ++ yh1_ev = __lasx_xvsrai_w(yh1_ev, 19); ++ yl1_od = __lasx_xvsrai_w(yl1_od, 19); ++ yh1_od = __lasx_xvsrai_w(yh1_od, 19); ++ u1_ev = __lasx_xvsrai_w(u1_ev, 19); ++ v1_ev = __lasx_xvsrai_w(v1_ev, 19); ++ u1_od = __lasx_xvsrai_w(u1_od, 19); ++ v1_od = __lasx_xvsrai_w(v1_od, 19); ++ yl2_ev = __lasx_xvsrai_w(yl2_ev, 19); ++ yh2_ev = __lasx_xvsrai_w(yh2_ev, 19); ++ yl2_od = __lasx_xvsrai_w(yl2_od, 19); ++ yh2_od = __lasx_xvsrai_w(yh2_od, 19); ++ u2_ev = __lasx_xvsrai_w(u2_ev, 19); ++ v2_ev = __lasx_xvsrai_w(v2_ev, 19); ++ u2_od = __lasx_xvsrai_w(u2_od, 19); ++ v2_od = __lasx_xvsrai_w(v2_od, 19); ++ u1_ev = __lasx_xvadd_w(u1_ev, headroom); ++ v1_ev = __lasx_xvadd_w(v1_ev, headroom); ++ u1_od = __lasx_xvadd_w(u1_od, headroom); ++ v1_od = __lasx_xvadd_w(v1_od, headroom); ++ u2_ev = __lasx_xvadd_w(u2_ev, headroom); ++ v2_ev = __lasx_xvadd_w(v2_ev, headroom); ++ u2_od = __lasx_xvadd_w(u2_od, headroom); ++ v2_od = __lasx_xvadd_w(v2_od, headroom); ++ WRITE_YUV2RGB_16_L(yl1_ev, yl1_od, u1_ev, u1_od, v1_ev, v1_od, count, ++ r, g, b, y, target, Y1, Y2, U, V); ++ WRITE_YUV2RGB_16_H(yh1_ev, yh1_od, u1_ev, u1_od, v1_ev, v1_od, count, ++ r, g, b, y, target, Y1, Y2, U, V); ++ WRITE_YUV2RGB_16_L(yl2_ev, yl2_od, u2_ev, u2_od, v2_ev, v2_od, count, ++ r, g, b, y, target, Y1, Y2, U, V); ++ WRITE_YUV2RGB_16_H(yh2_ev, yh2_od, u2_ev, u2_od, v2_ev, v2_od, count, ++ r, g, b, y, target, Y1, Y2, U, V); ++ } ++ if (res >= 32) { ++ int Y1, Y2, U, V, count_lum = count << 1; ++ __m256i l_src1, l_src2, u_src, v_src; ++ __m256i yl_ev, yl_od, yh_ev, yh_od; ++ __m256i u_ev, u_od, v_ev, v_od, temp; ++ ++ yl_ev = __lasx_xvldrepl_w(&t, 0); ++ yl_od = yl_ev; ++ yh_ev = yl_ev; ++ yh_od = yl_ev; ++ u_ev = yl_ev; ++ v_ev = yl_ev; ++ u_od = yl_ev; ++ v_od = yl_ev; ++ for (j = 0; j < lumFilterSize; j++) { ++ temp = __lasx_xvldrepl_h((lumFilter + j), 0); ++ l_src1 = LASX_LD((lumSrc[j] + count_lum)); ++ l_src2 = LASX_LD((lumSrc[j] + count_lum + 16)); ++ yl_ev = __lasx_xvmaddwev_w_h(yl_ev, temp, l_src1); ++ yl_od = __lasx_xvmaddwod_w_h(yl_od, temp, l_src1); ++ yh_ev = __lasx_xvmaddwev_w_h(yh_ev, temp, l_src2); ++ yh_od = __lasx_xvmaddwod_w_h(yh_od, temp, l_src2); ++ } ++ for (j = 0; j < chrFilterSize; j++) { ++ u_src = LASX_LD((chrUSrc[j] + count)); ++ v_src = LASX_LD((chrVSrc[j] + count)); ++ temp = __lasx_xvldrepl_h((chrFilter + j), 0); ++ u_ev = __lasx_xvmaddwev_w_h(u_ev, temp, u_src); ++ u_od = __lasx_xvmaddwod_w_h(u_od, temp, u_src); ++ v_ev = __lasx_xvmaddwev_w_h(v_ev, temp, v_src); ++ v_od = __lasx_xvmaddwod_w_h(v_od, temp, v_src); ++ } ++ yl_ev = __lasx_xvsrai_w(yl_ev, 19); ++ yh_ev = __lasx_xvsrai_w(yh_ev, 19); ++ yl_od = __lasx_xvsrai_w(yl_od, 19); ++ yh_od = __lasx_xvsrai_w(yh_od, 19); ++ u_ev = __lasx_xvsrai_w(u_ev, 19); ++ v_ev = __lasx_xvsrai_w(v_ev, 19); ++ u_od = __lasx_xvsrai_w(u_od, 19); ++ v_od = __lasx_xvsrai_w(v_od, 19); ++ u_ev = __lasx_xvadd_w(u_ev, headroom); ++ v_ev = __lasx_xvadd_w(v_ev, headroom); ++ u_od = __lasx_xvadd_w(u_od, headroom); ++ v_od = __lasx_xvadd_w(v_od, headroom); ++ WRITE_YUV2RGB_16_L(yl_ev, yl_od, u_ev, u_od, v_ev, v_od, count, ++ r, g, b, y, target, Y1, Y2, U, V); ++ WRITE_YUV2RGB_16_H(yh_ev, yh_od, u_ev, u_od, v_ev, v_od, count, ++ r, g, b, y, target, Y1, Y2, U, V); ++ res -= 32; ++ } ++ if (res >= 16) { ++ int Y1, Y2, U, V; ++ int count_lum = count << 1; ++ __m256i l_src, u_src, v_src; ++ __m256i y_ev, y_od, u, v, temp; ++ ++ y_ev = __lasx_xvldrepl_w(&t, 0); ++ y_od = y_ev; ++ u = y_ev; ++ v = y_ev; ++ for (j = 0; j < lumFilterSize; j++) { ++ temp = __lasx_xvldrepl_h((lumFilter + j), 0); ++ l_src = LASX_LD((lumSrc[j] + count_lum)); ++ y_ev = __lasx_xvmaddwev_w_h(y_ev, temp, l_src); ++ y_od = __lasx_xvmaddwod_w_h(y_od, temp, l_src); ++ } ++ for (j = 0; j < chrFilterSize; j++) { ++ u_src = LASX_LD((chrUSrc[j] + count)); ++ v_src = LASX_LD((chrVSrc[j] + count)); ++ temp = __lasx_xvldrepl_h((chrFilter + j), 0); ++ u_src = __lasx_vext2xv_w_h(u_src); ++ v_src = __lasx_vext2xv_w_h(v_src); ++ u = __lasx_xvmaddwev_w_h(u, temp, u_src); ++ v = __lasx_xvmaddwev_w_h(v, temp, v_src); ++ } ++ y_ev = __lasx_xvsrai_w(y_ev, 19); ++ y_od = __lasx_xvsrai_w(y_od, 19); ++ u = __lasx_xvsrai_w(u, 19); ++ v = __lasx_xvsrai_w(v, 19); ++ u = __lasx_xvadd_w(u, headroom); ++ v = __lasx_xvadd_w(v, headroom); ++ WRITE_YUV2RGB_16_N(y_ev, y_od, u, v, count, r, g, b, y, target, Y1, Y2, U, V); ++ res -= 16; ++ } ++ if (res >= 8) { ++ int Y1, Y2, U, V; ++ int count_lum = count << 1; ++ __m256i l_src, u_src, v_src; ++ __m256i y_ev, uv, temp; ++ ++ y_ev = __lasx_xvldrepl_w(&t, 0); ++ uv = y_ev; ++ for (j = 0; j < lumFilterSize; j++) { ++ temp = __lasx_xvldrepl_h((lumFilter + j), 0); ++ l_src = LASX_LD((lumSrc[j] + count_lum)); ++ l_src = __lasx_vext2xv_w_h(l_src); ++ y_ev = __lasx_xvmaddwev_w_h(y_ev, temp, l_src); ++ } ++ for (j = 0; j < chrFilterSize; j++) { ++ u_src = __lasx_xvldrepl_d((chrUSrc[j] + count), 0); ++ v_src = __lasx_xvldrepl_d((chrVSrc[j] + count), 0); ++ temp = __lasx_xvldrepl_h((chrFilter + j), 0); ++ u_src = __lasx_xvilvl_d(v_src, u_src); ++ u_src = __lasx_vext2xv_w_h(u_src); ++ uv = __lasx_xvmaddwev_w_h(uv, temp, u_src); ++ } ++ y_ev = __lasx_xvsrai_w(y_ev, 19); ++ uv = __lasx_xvsrai_w(uv, 19); ++ uv = __lasx_xvadd_w(uv, headroom); ++ WRITE_YUV2RGB_8_N(y_ev, uv, count, r, g, b, y, target, Y1, Y2, U, V); ++ } ++ for (; count < len_count; count++) { ++ int Y1 = 1 << 18; ++ int Y2 = Y1; ++ int U = Y1; ++ int V = Y1; ++ ++ for (j = 0; j < lumFilterSize; j++) { ++ Y1 += lumSrc[j][count * 2] * lumFilter[j]; ++ Y2 += lumSrc[j][count * 2 + 1] * lumFilter[j]; ++ } ++ for (j = 0; j < chrFilterSize; j++) { ++ U += chrUSrc[j][count] * chrFilter[j]; ++ V += chrVSrc[j][count] * chrFilter[j]; ++ } ++ Y1 >>= 19; ++ Y2 >>= 19; ++ U >>= 19; ++ V >>= 19; ++ r = c->table_rV[V + YUVRGB_TABLE_HEADROOM]; ++ g = (c->table_gU[U + YUVRGB_TABLE_HEADROOM] + ++ c->table_gV[V + YUVRGB_TABLE_HEADROOM]); ++ b = c->table_bU[U + YUVRGB_TABLE_HEADROOM]; ++ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, ++ r, g, b, y, target, 0); ++ } ++} ++ ++static void ++yuv2rgb_2_template_lasx(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y, ++ enum AVPixelFormat target, int hasAlpha) ++{ ++ const int16_t *buf0 = buf[0], *buf1 = buf[1], ++ *ubuf0 = ubuf[0], *ubuf1 = ubuf[1], ++ *vbuf0 = vbuf[0], *vbuf1 = vbuf[1]; ++ int yalpha1 = 4096 - yalpha; ++ int uvalpha1 = 4096 - uvalpha; ++ int i, count = 0; ++ int len = dstW - 15; ++ int len_count = (dstW + 1) >> 1; ++ const void *r, *g, *b; ++ int head = YUVRGB_TABLE_HEADROOM; ++ __m256i v_yalpha1 = __lasx_xvreplgr2vr_w(yalpha1); ++ __m256i v_uvalpha1 = __lasx_xvreplgr2vr_w(uvalpha1); ++ __m256i v_yalpha = __lasx_xvreplgr2vr_w(yalpha); ++ __m256i v_uvalpha = __lasx_xvreplgr2vr_w(uvalpha); ++ __m256i headroom = __lasx_xvreplgr2vr_w(head); ++ ++ for (i = 0; i < len; i += 16) { ++ int Y1, Y2, U, V; ++ __m256i y0_h, y0_l, y0, u0, v0; ++ __m256i y1_h, y1_l, y1, u1, v1; ++ __m256i y_l, y_h, u, v; ++ ++ y0 = LASX_LD(buf0 + i); ++ u0 = LASX_LD(ubuf0 + count); ++ v0 = LASX_LD(vbuf0 + count); ++ y1 = LASX_LD(buf1 + i); ++ u1 = LASX_LD(ubuf1 + count); ++ v1 = LASX_LD(vbuf1 + count); ++ LASX_UNPCK_L_W_H_2(y0, y1, y0_l, y1_l); ++ y0 = __lasx_xvpermi_d(y0, 0x4E); ++ y1 = __lasx_xvpermi_d(y1, 0x4E); ++ LASX_UNPCK_L_W_H_2(y0, y1, y0_h, y1_h); ++ LASX_UNPCK_L_W_H_4(u0, u1, v0, v1, u0, u1, v0, v1); ++ y0_l = __lasx_xvmul_w(y0_l, v_yalpha1); ++ y0_h = __lasx_xvmul_w(y0_h, v_yalpha1); ++ u0 = __lasx_xvmul_w(u0, v_uvalpha1); ++ v0 = __lasx_xvmul_w(v0, v_uvalpha1); ++ y_l = __lasx_xvmadd_w(y0_l, v_yalpha, y1_l); ++ y_h = __lasx_xvmadd_w(y0_h, v_yalpha, y1_h); ++ u = __lasx_xvmadd_w(u0, v_uvalpha, u1); ++ v = __lasx_xvmadd_w(v0, v_uvalpha, v1); ++ y_l = __lasx_xvsrai_w(y_l, 19); ++ y_h = __lasx_xvsrai_w(y_h, 19); ++ u = __lasx_xvsrai_w(u, 19); ++ v = __lasx_xvsrai_w(v, 19); ++ u = __lasx_xvadd_w(u, headroom); ++ v = __lasx_xvadd_w(v, headroom); ++ WRITE_YUV2RGBL_8(y_l, u, v, count, r, g, b, y, target, Y1, Y2, U, V); ++ WRITE_YUV2RGBH_8(y_h, u, v, count, r, g, b, y, target, Y1, Y2, U, V); ++ } ++ if (dstW - i >= 8) { ++ int Y1, Y2, U, V; ++ __m256i y0_l, y0, u0, v0; ++ __m256i y1_l, y1, u1, v1; ++ __m256i y_l, u, v; ++ ++ y0 = LASX_LD(buf0 + i); ++ u0 = __lasx_xvldrepl_d((ubuf0 + count), 0); ++ v0 = __lasx_xvldrepl_d((vbuf0 + count), 0); ++ y1 = LASX_LD(buf1 + i); ++ u1 = __lasx_xvldrepl_d((ubuf1 + count), 0); ++ v1 = __lasx_xvldrepl_d((vbuf1 + count), 0); ++ LASX_UNPCK_L_W_H_2(y0, y1, y0_l, y1_l); ++ LASX_UNPCK_L_W_H_4(u0, u1, v0, v1, u0, u1, v0, v1); ++ y0_l = __lasx_xvmul_w(y0_l, v_yalpha1); ++ u0 = __lasx_xvmul_w(u0, v_uvalpha1); ++ v0 = __lasx_xvmul_w(v0, v_uvalpha1); ++ y_l = __lasx_xvmadd_w(y0_l, v_yalpha, y1_l); ++ u = __lasx_xvmadd_w(u0, v_uvalpha, u1); ++ v = __lasx_xvmadd_w(v0, v_uvalpha, v1); ++ y_l = __lasx_xvsrai_w(y_l, 19); ++ u = __lasx_xvsrai_w(u, 19); ++ v = __lasx_xvsrai_w(v, 19); ++ u = __lasx_xvadd_w(u, headroom); ++ v = __lasx_xvadd_w(v, headroom); ++ WRITE_YUV2RGBL_8(y_l, u, v, count, r, g, b, y, target, Y1, Y2, U, V); ++ i += 8; ++ } ++ for (; count < len_count; count++) { ++ int Y1 = (buf0[count * 2] * yalpha1 + ++ buf1[count * 2] * yalpha) >> 19; ++ int Y2 = (buf0[count * 2 + 1] * yalpha1 + ++ buf1[count * 2 + 1] * yalpha) >> 19; ++ int U = (ubuf0[count] * uvalpha1 + ubuf1[count] * uvalpha) >> 19; ++ int V = (vbuf0[count] * uvalpha1 + vbuf1[count] * uvalpha) >> 19; ++ ++ r = c->table_rV[V + YUVRGB_TABLE_HEADROOM], ++ g = (c->table_gU[U + YUVRGB_TABLE_HEADROOM] + ++ c->table_gV[V + YUVRGB_TABLE_HEADROOM]), ++ b = c->table_bU[U + YUVRGB_TABLE_HEADROOM]; ++ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, ++ r, g, b, y, target, 0); ++ } ++} ++ ++static void ++yuv2rgb_1_template_lasx(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y, enum AVPixelFormat target, ++ int hasAlpha) ++{ ++ const int16_t *ubuf0 = ubuf[0], *vbuf0 = vbuf[0]; ++ int i; ++ int len = (dstW - 15); ++ int len_count = (dstW + 1) >> 1; ++ const void *r, *g, *b; ++ ++ if (uvalpha < 2048) { ++ int count = 0; ++ int16_t bias_int = 64; ++ int head = YUVRGB_TABLE_HEADROOM; ++ __m256i headroom = __lasx_xvreplgr2vr_w(head); ++ __m256i bias_64 = __lasx_xvreplgr2vr_h(bias_int); ++ ++ for (i = 0; i < len; i += 16) { ++ int Y1, Y2, U, V; ++ __m256i src_y, src_u, src_v; ++ __m256i y_h, y_l, u, v; ++ ++ src_y = LASX_LD(buf0 + i); ++ src_u = LASX_LD(ubuf0 + count); ++ src_v = LASX_LD(vbuf0 + count); ++ LASX_ADDWL_W_H_128SV(src_y, bias_64, y_l); ++ LASX_ADDWH_W_H_128SV(src_y, bias_64, y_h); ++ src_u = __lasx_xvpermi_d(src_u, 0xD8); ++ src_v = __lasx_xvpermi_d(src_v, 0xD8); ++ LASX_ADDWL_W_H_2_128SV(src_u, bias_64, src_v, bias_64, u, v); ++ y_l = __lasx_xvsrai_w(y_l, 7); ++ y_h = __lasx_xvsrai_w(y_h, 7); ++ u = __lasx_xvsrai_w(u, 7); ++ v = __lasx_xvsrai_w(v, 7); ++ u = __lasx_xvadd_w(u, headroom); ++ v = __lasx_xvadd_w(v, headroom); ++ WRITE_YUV2RGB_16(y_l, y_h, u, v, count, r, g, b, y, target, Y1, Y2, U, V); ++ } ++ if (dstW - i >= 8){ ++ int Y1, Y2, U, V; ++ __m256i src_y, src_u, src_v; ++ __m256i y_l, u, v; ++ ++ src_y = LASX_LD(buf0 + i); ++ src_u = __lasx_xvldrepl_d((ubuf0 + count), 0); ++ src_v = __lasx_xvldrepl_d((vbuf0 + count), 0); ++ src_y = __lasx_xvpermi_d(src_y, 0xD8); ++ LASX_ADDWL_W_H_2_128SV(src_y, bias_64, src_u, bias_64, y_l, u); ++ LASX_ADDWL_W_H_128SV(src_v, bias_64, v); ++ y_l = __lasx_xvsrai_w(y_l, 7); ++ u = __lasx_xvsrai_w(u, 7); ++ v = __lasx_xvsrai_w(v, 7); ++ u = __lasx_xvadd_w(u, headroom); ++ v = __lasx_xvadd_w(v, headroom); ++ WRITE_YUV2RGBL_8(y_l, u, v, count, r, g, b, y, target, Y1, Y2, U, V); ++ i += 8; ++ } ++ for (; count < len_count; count++) { ++ int Y1 = (buf0[count * 2 ] + 64) >> 7; ++ int Y2 = (buf0[count * 2 + 1] + 64) >> 7; ++ int U = (ubuf0[count] + 64) >> 7; ++ int V = (vbuf0[count] + 64) >> 7; ++ ++ r = c->table_rV[V + YUVRGB_TABLE_HEADROOM], ++ g = (c->table_gU[U + YUVRGB_TABLE_HEADROOM] + ++ c->table_gV[V + YUVRGB_TABLE_HEADROOM]), ++ b = c->table_bU[U + YUVRGB_TABLE_HEADROOM]; ++ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, ++ r, g, b, y, target, 0); ++ } ++ } else { ++ const int16_t *ubuf1 = ubuf[1], *vbuf1 = vbuf[1]; ++ int count = 0; ++ int16_t bias_int_64 = 64; ++ int bias_int_128 = 128; ++ int HEADROOM = YUVRGB_TABLE_HEADROOM; ++ __m256i headroom = __lasx_xvreplgr2vr_w(HEADROOM); ++ __m256i bias_64 = __lasx_xvreplgr2vr_h(bias_int_64); ++ __m256i bias_128 = __lasx_xvreplgr2vr_w(bias_int_128); ++ ++ for (i = 0; i < len; i += 16) { ++ int Y1, Y2, U, V; ++ __m256i src_y, src_u0, src_v0, src_u1, src_v1; ++ __m256i y_h, y_l, u, v; ++ ++ src_y = LASX_LD(buf0 + i); ++ src_u0 = LASX_LD(ubuf0 + count); ++ src_v0 = LASX_LD(vbuf0 + count); ++ src_u1 = LASX_LD(ubuf1 + count); ++ src_v1 = LASX_LD(vbuf1 + count); ++ src_u0 = __lasx_xvpermi_d(src_u0, 0xD8); ++ src_v0 = __lasx_xvpermi_d(src_v0, 0xD8); ++ src_u1 = __lasx_xvpermi_d(src_u1, 0xD8); ++ src_v1 = __lasx_xvpermi_d(src_v1, 0xD8); ++ LASX_ADDWL_W_H_128SV(src_y, bias_64, y_l); ++ LASX_ADDWH_W_H_128SV(src_y, bias_64, y_h); ++ LASX_ADDWL_W_H_2_128SV(src_u0, src_u1, src_v0, src_v1, u, v); ++ u = __lasx_xvadd_w(u, bias_128); ++ v = __lasx_xvadd_w(v, bias_128); ++ y_l = __lasx_xvsrai_w(y_l, 7); ++ y_h = __lasx_xvsrai_w(y_h, 7); ++ u = __lasx_xvsrai_w(u, 8); ++ v = __lasx_xvsrai_w(v, 8); ++ u = __lasx_xvadd_w(u, headroom); ++ v = __lasx_xvadd_w(v, headroom); ++ WRITE_YUV2RGB_16(y_l, y_h, u, v, count, r, g, b, y, target, Y1, Y2, U, V); ++ } ++ if (dstW - i >= 8){ ++ int Y1, Y2, U, V; ++ __m256i src_y, src_u0, src_v0, src_u1, src_v1; ++ __m256i y_l, u, v; ++ ++ src_y = LASX_LD(buf0 + i); ++ src_u0 = __lasx_xvldrepl_d((ubuf0 + count), 0); ++ src_v0 = __lasx_xvldrepl_d((vbuf0 + count), 0); ++ src_u1 = __lasx_xvldrepl_d((ubuf1 + count), 0); ++ src_v1 = __lasx_xvldrepl_d((vbuf1 + count), 0); ++ ++ src_y = __lasx_xvpermi_d(src_y, 0xD8); ++ LASX_ADDWL_W_H_128SV(src_y, bias_64, y_l); ++ LASX_ADDWL_W_H_2_128SV(src_u0, src_u1, src_v0, src_v1, u, v); ++ u = __lasx_xvadd_w(u, bias_128); ++ v = __lasx_xvadd_w(v, bias_128); ++ y_l = __lasx_xvsrai_w(y_l, 7); ++ u = __lasx_xvsrai_w(u, 8); ++ v = __lasx_xvsrai_w(v, 8); ++ u = __lasx_xvadd_w(u, headroom); ++ v = __lasx_xvadd_w(v, headroom); ++ WRITE_YUV2RGBL_8(y_l, u, v, count, r, g, b, y, target, Y1, Y2, U, V); ++ i += 8; ++ } ++ for (; count < len_count; count++) { ++ int Y1 = (buf0[count * 2 ] + 64) >> 7; ++ int Y2 = (buf0[count * 2 + 1] + 64) >> 7; ++ int U = (ubuf0[count] + ubuf1[count] + 128) >> 8; ++ int V = (vbuf0[count] + vbuf1[count] + 128) >> 8; ++ ++ r = c->table_rV[V + YUVRGB_TABLE_HEADROOM], ++ g = (c->table_gU[U + YUVRGB_TABLE_HEADROOM] + ++ c->table_gV[V + YUVRGB_TABLE_HEADROOM]), ++ b = c->table_bU[U + YUVRGB_TABLE_HEADROOM]; ++ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, ++ r, g, b, y, target, 0); ++ } ++ } ++} ++ ++#define YUV2RGBWRAPPERX(name, base, ext, fmt, hasAlpha) \ ++static void name ## ext ## _X_lasx(SwsContext *c, const int16_t *lumFilter, \ ++ const int16_t **lumSrc, int lumFilterSize, \ ++ const int16_t *chrFilter, const int16_t **chrUSrc, \ ++ const int16_t **chrVSrc, int chrFilterSize, \ ++ const int16_t **alpSrc, uint8_t *dest, int dstW, \ ++ int y) \ ++{ \ ++ name ## base ## _X_template_lasx(c, lumFilter, lumSrc, lumFilterSize, \ ++ chrFilter, chrUSrc, chrVSrc, chrFilterSize, \ ++ alpSrc, dest, dstW, y, fmt, hasAlpha); \ ++} ++ ++#define YUV2RGBWRAPPERX2(name, base, ext, fmt, hasAlpha) \ ++YUV2RGBWRAPPERX(name, base, ext, fmt, hasAlpha) \ ++static void name ## ext ## _2_lasx(SwsContext *c, const int16_t *buf[2], \ ++ const int16_t *ubuf[2], const int16_t *vbuf[2], \ ++ const int16_t *abuf[2], uint8_t *dest, int dstW, \ ++ int yalpha, int uvalpha, int y) \ ++{ \ ++ name ## base ## _2_template_lasx(c, buf, ubuf, vbuf, abuf, dest, \ ++ dstW, yalpha, uvalpha, y, fmt, hasAlpha); \ ++} ++ ++#define YUV2RGBWRAPPER(name, base, ext, fmt, hasAlpha) \ ++YUV2RGBWRAPPERX2(name, base, ext, fmt, hasAlpha) \ ++static void name ## ext ## _1_lasx(SwsContext *c, const int16_t *buf0, \ ++ const int16_t *ubuf[2], const int16_t *vbuf[2], \ ++ const int16_t *abuf0, uint8_t *dest, int dstW, \ ++ int uvalpha, int y) \ ++{ \ ++ name ## base ## _1_template_lasx(c, buf0, ubuf, vbuf, abuf0, dest, \ ++ dstW, uvalpha, y, fmt, hasAlpha); \ ++} ++ ++ ++#if CONFIG_SMALL ++#else ++#if CONFIG_SWSCALE_ALPHA ++#endif ++YUV2RGBWRAPPER(yuv2rgb,, x32_1, AV_PIX_FMT_RGB32_1, 0) ++YUV2RGBWRAPPER(yuv2rgb,, x32, AV_PIX_FMT_RGB32, 0) ++#endif ++YUV2RGBWRAPPER(yuv2, rgb, rgb24, AV_PIX_FMT_RGB24, 0) ++YUV2RGBWRAPPER(yuv2, rgb, bgr24, AV_PIX_FMT_BGR24, 0) ++YUV2RGBWRAPPER(yuv2rgb,, 16, AV_PIX_FMT_RGB565, 0) ++YUV2RGBWRAPPER(yuv2rgb,, 15, AV_PIX_FMT_RGB555, 0) ++YUV2RGBWRAPPER(yuv2rgb,, 12, AV_PIX_FMT_RGB444, 0) ++YUV2RGBWRAPPER(yuv2rgb,, 8, AV_PIX_FMT_RGB8, 0) ++YUV2RGBWRAPPER(yuv2rgb,, 4, AV_PIX_FMT_RGB4, 0) ++YUV2RGBWRAPPER(yuv2rgb,, 4b, AV_PIX_FMT_RGB4_BYTE, 0) ++ ++// This function is copied from libswscale/output.c ++static av_always_inline void yuv2rgb_write_full(SwsContext *c, ++ uint8_t *dest, int i, int R, int A, int G, int B, ++ int y, enum AVPixelFormat target, int hasAlpha, int err[4]) ++{ ++ int isrgb8 = target == AV_PIX_FMT_BGR8 || target == AV_PIX_FMT_RGB8; ++ ++ if ((R | G | B) & 0xC0000000) { ++ R = av_clip_uintp2(R, 30); ++ G = av_clip_uintp2(G, 30); ++ B = av_clip_uintp2(B, 30); ++ } ++ ++ switch(target) { ++ case AV_PIX_FMT_ARGB: ++ dest[0] = hasAlpha ? A : 255; ++ dest[1] = R >> 22; ++ dest[2] = G >> 22; ++ dest[3] = B >> 22; ++ break; ++ case AV_PIX_FMT_RGB24: ++ dest[0] = R >> 22; ++ dest[1] = G >> 22; ++ dest[2] = B >> 22; ++ break; ++ case AV_PIX_FMT_RGBA: ++ dest[0] = R >> 22; ++ dest[1] = G >> 22; ++ dest[2] = B >> 22; ++ dest[3] = hasAlpha ? A : 255; ++ break; ++ case AV_PIX_FMT_ABGR: ++ dest[0] = hasAlpha ? A : 255; ++ dest[1] = B >> 22; ++ dest[2] = G >> 22; ++ dest[3] = R >> 22; ++ break; ++ case AV_PIX_FMT_BGR24: ++ dest[0] = B >> 22; ++ dest[1] = G >> 22; ++ dest[2] = R >> 22; ++ break; ++ case AV_PIX_FMT_BGRA: ++ dest[0] = B >> 22; ++ dest[1] = G >> 22; ++ dest[2] = R >> 22; ++ dest[3] = hasAlpha ? A : 255; ++ break; ++ case AV_PIX_FMT_BGR4_BYTE: ++ case AV_PIX_FMT_RGB4_BYTE: ++ case AV_PIX_FMT_BGR8: ++ case AV_PIX_FMT_RGB8: ++ { ++ int r,g,b; ++ ++ switch (c->dither) { ++ default: ++ case SWS_DITHER_AUTO: ++ case SWS_DITHER_ED: ++ R >>= 22; ++ G >>= 22; ++ B >>= 22; ++ R += (7*err[0] + 1*c->dither_error[0][i] + 5*c->dither_error[0][i+1] + 3*c->dither_error[0][i+2])>>4; ++ G += (7*err[1] + 1*c->dither_error[1][i] + 5*c->dither_error[1][i+1] + 3*c->dither_error[1][i+2])>>4; ++ B += (7*err[2] + 1*c->dither_error[2][i] + 5*c->dither_error[2][i+1] + 3*c->dither_error[2][i+2])>>4; ++ c->dither_error[0][i] = err[0]; ++ c->dither_error[1][i] = err[1]; ++ c->dither_error[2][i] = err[2]; ++ r = R >> (isrgb8 ? 5 : 7); ++ g = G >> (isrgb8 ? 5 : 6); ++ b = B >> (isrgb8 ? 6 : 7); ++ r = av_clip(r, 0, isrgb8 ? 7 : 1); ++ g = av_clip(g, 0, isrgb8 ? 7 : 3); ++ b = av_clip(b, 0, isrgb8 ? 3 : 1); ++ err[0] = R - r*(isrgb8 ? 36 : 255); ++ err[1] = G - g*(isrgb8 ? 36 : 85); ++ err[2] = B - b*(isrgb8 ? 85 : 255); ++ break; ++ case SWS_DITHER_A_DITHER: ++ if (isrgb8) { ++ /* see http://pippin.gimp.org/a_dither/ for details/origin */ ++#define A_DITHER(u,v) (((((u)+((v)*236))*119)&0xff)) ++ r = (((R >> 19) + A_DITHER(i,y) -96)>>8); ++ g = (((G >> 19) + A_DITHER(i + 17,y) - 96)>>8); ++ b = (((B >> 20) + A_DITHER(i + 17*2,y) -96)>>8); ++ r = av_clip_uintp2(r, 3); ++ g = av_clip_uintp2(g, 3); ++ b = av_clip_uintp2(b, 2); ++ } else { ++ r = (((R >> 21) + A_DITHER(i,y)-256)>>8); ++ g = (((G >> 19) + A_DITHER(i + 17,y)-256)>>8); ++ b = (((B >> 21) + A_DITHER(i + 17*2,y)-256)>>8); ++ r = av_clip_uintp2(r, 1); ++ g = av_clip_uintp2(g, 2); ++ b = av_clip_uintp2(b, 1); ++ } ++ break; ++ case SWS_DITHER_X_DITHER: ++ if (isrgb8) { ++ /* see http://pippin.gimp.org/a_dither/ for details/origin */ ++#define X_DITHER(u,v) (((((u)^((v)*237))*181)&0x1ff)/2) ++ r = (((R >> 19) + X_DITHER(i,y) - 96)>>8); ++ g = (((G >> 19) + X_DITHER(i + 17,y) - 96)>>8); ++ b = (((B >> 20) + X_DITHER(i + 17*2,y) - 96)>>8); ++ r = av_clip_uintp2(r, 3); ++ g = av_clip_uintp2(g, 3); ++ b = av_clip_uintp2(b, 2); ++ } else { ++ r = (((R >> 21) + X_DITHER(i,y)-256)>>8); ++ g = (((G >> 19) + X_DITHER(i + 17,y)-256)>>8); ++ b = (((B >> 21) + X_DITHER(i + 17*2,y)-256)>>8); ++ r = av_clip_uintp2(r, 1); ++ g = av_clip_uintp2(g, 2); ++ b = av_clip_uintp2(b, 1); ++ } ++ ++ break; ++ } ++ ++ if(target == AV_PIX_FMT_BGR4_BYTE) { ++ dest[0] = r + 2*g + 8*b; ++ } else if(target == AV_PIX_FMT_RGB4_BYTE) { ++ dest[0] = b + 2*g + 8*r; ++ } else if(target == AV_PIX_FMT_BGR8) { ++ dest[0] = r + 8*g + 64*b; ++ } else if(target == AV_PIX_FMT_RGB8) { ++ dest[0] = b + 4*g + 32*r; ++ } else ++ av_assert2(0); ++ break; } ++ } ++} ++ ++#define YUVTORGB_SETUP \ ++ int y_offset = c->yuv2rgb_y_offset; \ ++ int y_coeff = c->yuv2rgb_y_coeff; \ ++ int v2r_coe = c->yuv2rgb_v2r_coeff; \ ++ int v2g_coe = c->yuv2rgb_v2g_coeff; \ ++ int u2g_coe = c->yuv2rgb_u2g_coeff; \ ++ int u2b_coe = c->yuv2rgb_u2b_coeff; \ ++ __m256i offset = __lasx_xvreplgr2vr_w(y_offset); \ ++ __m256i coeff = __lasx_xvreplgr2vr_w(y_coeff); \ ++ __m256i v2r = __lasx_xvreplgr2vr_w(v2r_coe); \ ++ __m256i v2g = __lasx_xvreplgr2vr_w(v2g_coe); \ ++ __m256i u2g = __lasx_xvreplgr2vr_w(u2g_coe); \ ++ __m256i u2b = __lasx_xvreplgr2vr_w(u2b_coe); \ ++ ++ ++#define YUVTORGB(y, u, v, R, G, B, offset, coeff, \ ++ y_temp, v2r, v2g, u2g, u2b) \ ++{ \ ++ y = __lasx_xvsub_w(y, offset); \ ++ y = __lasx_xvmul_w(y, coeff); \ ++ y = __lasx_xvadd_w(y, y_temp); \ ++ R = __lasx_xvmadd_w(y, v, v2r); \ ++ v = __lasx_xvmadd_w(y, v, v2g); \ ++ G = __lasx_xvmadd_w(v, u, u2g); \ ++ B = __lasx_xvmadd_w(y, u, u2b); \ ++} ++ ++#define WRITE_FULL_L_A(r, g, b, a, c, dest, i, R, A, G, B, \ ++ y, target, hasAlpha, err) \ ++{ \ ++ R = __lasx_xvpickve2gr_w(r, 0); \ ++ G = __lasx_xvpickve2gr_w(g, 0); \ ++ B = __lasx_xvpickve2gr_w(b, 0); \ ++ A = __lasx_xvpickve2gr_w(a, 0); \ ++ if (A & 0x100) \ ++ A = av_clip_uint8(A); \ ++ yuv2rgb_write_full(c, dest, i, R, A, G, B, y, target, hasAlpha, err); \ ++ dest += step; \ ++ R = __lasx_xvpickve2gr_w(r, 1); \ ++ G = __lasx_xvpickve2gr_w(g, 1); \ ++ B = __lasx_xvpickve2gr_w(b, 1); \ ++ A = __lasx_xvpickve2gr_w(a, 1); \ ++ if (A & 0x100) \ ++ A = av_clip_uint8(A); \ ++ yuv2rgb_write_full(c, dest, i + 1, R, A, G, B, y, target, hasAlpha, err); \ ++ dest += step; \ ++ R = __lasx_xvpickve2gr_w(r, 2); \ ++ G = __lasx_xvpickve2gr_w(g, 2); \ ++ B = __lasx_xvpickve2gr_w(b, 2); \ ++ A = __lasx_xvpickve2gr_w(a, 2); \ ++ if (A & 0x100) \ ++ A = av_clip_uint8(A); \ ++ yuv2rgb_write_full(c, dest, i + 2, R, A, G, B, y, target, hasAlpha, err); \ ++ dest += step; \ ++ R = __lasx_xvpickve2gr_w(r, 3); \ ++ G = __lasx_xvpickve2gr_w(g, 3); \ ++ B = __lasx_xvpickve2gr_w(b, 3); \ ++ A = __lasx_xvpickve2gr_w(a, 3); \ ++ if (A & 0x100) \ ++ A = av_clip_uint8(A); \ ++ yuv2rgb_write_full(c, dest, i + 3, R, A, G, B, y, target, hasAlpha, err); \ ++ dest += step; \ ++} ++ ++#define WRITE_FULL_H_A(r, g, b, a, c, dest, i, R, A, G, B, \ ++ y, target, hasAlpha, err) \ ++{ \ ++ R = __lasx_xvpickve2gr_w(r, 4); \ ++ G = __lasx_xvpickve2gr_w(g, 4); \ ++ B = __lasx_xvpickve2gr_w(b, 4); \ ++ A = __lasx_xvpickve2gr_w(a, 4); \ ++ if (A & 0x100) \ ++ A = av_clip_uint8(A); \ ++ yuv2rgb_write_full(c, dest, i, R, A, G, B, y, target, hasAlpha, err); \ ++ dest += step; \ ++ R = __lasx_xvpickve2gr_w(r, 5); \ ++ G = __lasx_xvpickve2gr_w(g, 5); \ ++ B = __lasx_xvpickve2gr_w(b, 5); \ ++ A = __lasx_xvpickve2gr_w(a, 5); \ ++ if (A & 0x100) \ ++ A = av_clip_uint8(A); \ ++ yuv2rgb_write_full(c, dest, i + 1, R, A, G, B, y, target, hasAlpha, err); \ ++ dest += step; \ ++ R = __lasx_xvpickve2gr_w(r, 6); \ ++ G = __lasx_xvpickve2gr_w(g, 6); \ ++ B = __lasx_xvpickve2gr_w(b, 6); \ ++ A = __lasx_xvpickve2gr_w(a, 6); \ ++ if (A & 0x100) \ ++ A = av_clip_uint8(A); \ ++ yuv2rgb_write_full(c, dest, i + 2, R, A, G, B, y, target, hasAlpha, err); \ ++ dest += step; \ ++ R = __lasx_xvpickve2gr_w(r, 7); \ ++ G = __lasx_xvpickve2gr_w(g, 7); \ ++ B = __lasx_xvpickve2gr_w(b, 7); \ ++ A = __lasx_xvpickve2gr_w(a, 7); \ ++ if (A & 0x100) \ ++ A = av_clip_uint8(A); \ ++ yuv2rgb_write_full(c, dest, i + 3, R, A, G, B, y, target, hasAlpha, err); \ ++ dest += step; \ ++} ++ ++ ++#define WRITE_FULL_L(r, g, b, c, dest, i, R, G, B, \ ++ y, target, hasAlpha, err) \ ++{ \ ++ R = __lasx_xvpickve2gr_w(r, 0); \ ++ G = __lasx_xvpickve2gr_w(g, 0); \ ++ B = __lasx_xvpickve2gr_w(b, 0); \ ++ yuv2rgb_write_full(c, dest, i, R, 0, G, B, y, target, hasAlpha, err); \ ++ dest += step; \ ++ R = __lasx_xvpickve2gr_w(r, 1); \ ++ G = __lasx_xvpickve2gr_w(g, 1); \ ++ B = __lasx_xvpickve2gr_w(b, 1); \ ++ yuv2rgb_write_full(c, dest, i + 1, R, 0, G, B, y, target, hasAlpha, err); \ ++ dest += step; \ ++ R = __lasx_xvpickve2gr_w(r, 2); \ ++ G = __lasx_xvpickve2gr_w(g, 2); \ ++ B = __lasx_xvpickve2gr_w(b, 2); \ ++ yuv2rgb_write_full(c, dest, i + 2, R, 0, G, B, y, target, hasAlpha, err); \ ++ dest += step; \ ++ R = __lasx_xvpickve2gr_w(r, 3); \ ++ G = __lasx_xvpickve2gr_w(g, 3); \ ++ B = __lasx_xvpickve2gr_w(b, 3); \ ++ yuv2rgb_write_full(c, dest, i + 3, R, 0, G, B, y, target, hasAlpha, err); \ ++ dest += step; \ ++} ++ ++#define WRITE_FULL_H(r, g, b, c, dest, i, R, G, B, \ ++ y, target, hasAlpha, err) \ ++{ \ ++ R = __lasx_xvpickve2gr_w(r, 4); \ ++ G = __lasx_xvpickve2gr_w(g, 4); \ ++ B = __lasx_xvpickve2gr_w(b, 4); \ ++ yuv2rgb_write_full(c, dest, i, R, 0, G, B, y, target, hasAlpha, err); \ ++ dest += step; \ ++ R = __lasx_xvpickve2gr_w(r, 5); \ ++ G = __lasx_xvpickve2gr_w(g, 5); \ ++ B = __lasx_xvpickve2gr_w(b, 5); \ ++ yuv2rgb_write_full(c, dest, i + 1, R, 0, G, B, y, target, hasAlpha, err); \ ++ dest += step; \ ++ R = __lasx_xvpickve2gr_w(r, 6); \ ++ G = __lasx_xvpickve2gr_w(g, 6); \ ++ B = __lasx_xvpickve2gr_w(b, 6); \ ++ yuv2rgb_write_full(c, dest, i + 2, R, 0, G, B, y, target, hasAlpha, err); \ ++ dest += step; \ ++ R = __lasx_xvpickve2gr_w(r, 7); \ ++ G = __lasx_xvpickve2gr_w(g, 7); \ ++ B = __lasx_xvpickve2gr_w(b, 7); \ ++ yuv2rgb_write_full(c, dest, i + 3, R, 0, G, B, y, target, hasAlpha, err); \ ++ dest += step; \ ++} ++ ++static void ++yuv2rgb_full_X_template_lasx(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, ++ int dstW, int y, enum AVPixelFormat target, int hasAlpha) ++{ ++ int i, j, B, G, R, A; ++ int step = (target == AV_PIX_FMT_RGB24 || target == AV_PIX_FMT_BGR24) ? 3 : 4; ++ int err[4] = {0}; ++ int a_temp = 1 << 18; ++ int templ = 1 << 9; ++ int tempc = templ - (128 << 19); ++ int ytemp = 1 << 21; ++ int len = dstW - 15; ++ __m256i y_temp = __lasx_xvreplgr2vr_w(ytemp); ++ YUVTORGB_SETUP ++ ++ if( target == AV_PIX_FMT_BGR4_BYTE || target == AV_PIX_FMT_RGB4_BYTE ++ || target == AV_PIX_FMT_BGR8 || target == AV_PIX_FMT_RGB8) ++ step = 1; ++ ++ for (i = 0; i < len; i += 16) { ++ __m256i l_src, u_src, v_src; ++ __m256i y_l, y_h, u_l, u_h, v_l, v_h, temp; ++ __m256i R_l, R_h, G_l, G_h, B_l, B_h; ++ ++ y_l = y_h = __lasx_xvreplgr2vr_w(templ); ++ u_l = u_h = v_l = v_h = __lasx_xvreplgr2vr_w(tempc); ++ for (j = 0; j < lumFilterSize; j++) { ++ temp = __lasx_xvldrepl_h((lumFilter + j), 0); ++ l_src = LASX_LD((lumSrc[j] + i)); ++ LASX_MADDWL_W_H_128SV(y_l, l_src, temp, y_l); ++ LASX_MADDWH_W_H_128SV(y_h, l_src, temp, y_h); ++ } ++ for (j = 0; j < chrFilterSize; j++) { ++ temp = __lasx_xvldrepl_h((chrFilter + j), 0); ++ u_src = LASX_LD((chrUSrc[j] + i)); ++ v_src = LASX_LD((chrVSrc[j] + i)); ++ LASX_MADDWL_W_H_2_128SV(u_l, u_src, temp, v_l, v_src, temp, u_l, v_l); ++ LASX_MADDWH_W_H_2_128SV(u_h, u_src, temp, v_h, v_src, temp, u_h, v_h); ++ } ++ y_l = __lasx_xvsrai_w(y_l, 10); ++ y_h = __lasx_xvsrai_w(y_h, 10); ++ u_l = __lasx_xvsrai_w(u_l, 10); ++ u_h = __lasx_xvsrai_w(u_h, 10); ++ v_l = __lasx_xvsrai_w(v_l, 10); ++ v_h = __lasx_xvsrai_w(v_h, 10); ++ YUVTORGB(y_l, u_l, v_l, R_l, G_l, B_l, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ YUVTORGB(y_h, u_h, v_h, R_h, G_h, B_h, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ ++ if (hasAlpha) { ++ __m256i a_src, a_l, a_h; ++ ++ a_l = a_h = __lasx_xvreplgr2vr_w(a_temp); ++ for (j = 0; j < lumFilterSize; j++) { ++ temp = __lasx_xvldrepl_h(lumFilter + j, 0); ++ a_src = LASX_LD((alpSrc[j] + i)); ++ LASX_MADDWL_W_H_128SV(a_l, a_src, temp, a_l); ++ LASX_MADDWH_W_H_128SV(a_h, a_src, temp, a_h); ++ } ++ a_h = __lasx_xvsrai_w(a_h, 19); ++ a_l = __lasx_xvsrai_w(a_l, 19); ++ WRITE_FULL_L_A(R_l, G_l, B_l, a_l, c, dest, i, R, A, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_L_A(R_h, G_h, B_h, a_h, c, dest, i + 4, R, A, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H_A(R_l, G_l, B_l, a_l, c, dest, i + 8, R, A, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H_A(R_h, G_h, B_h, a_h, c, dest, i + 12, R, A, G, B, ++ y, target, hasAlpha, err); ++ } else { ++ WRITE_FULL_L(R_l, G_l, B_l, c, dest, i, R, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_L(R_h, G_h, B_h, c, dest, i + 4, R, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H(R_l, G_l, B_l, c, dest, i + 8, R, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H(R_h, G_h, B_h, c, dest, i + 12, R, G, B, ++ y, target, hasAlpha, err); ++ } ++ } ++ if (dstW - i >= 8) { ++ __m256i l_src, u_src, v_src; ++ __m256i y_l, u_l, v_l, temp; ++ __m256i R_l, G_l, B_l; ++ ++ y_l = __lasx_xvreplgr2vr_w(templ); ++ u_l = v_l = __lasx_xvreplgr2vr_w(tempc); ++ for (j = 0; j < lumFilterSize; j++) { ++ temp = __lasx_xvldrepl_h((lumFilter + j), 0); ++ l_src = LASX_LD((lumSrc[j] + i)); ++ l_src = __lasx_xvpermi_d(l_src, 0xD8); ++ LASX_MADDWL_W_H_128SV(y_l, l_src, temp, y_l); ++ } ++ for (j = 0; j < chrFilterSize; j++) { ++ temp = __lasx_xvldrepl_h((chrFilter + j), 0); ++ u_src = LASX_LD((chrUSrc[j] + i)); ++ v_src = LASX_LD((chrVSrc[j] + i)); ++ u_src = __lasx_xvpermi_d(u_src, 0xD8); ++ v_src = __lasx_xvpermi_d(v_src, 0xD8); ++ LASX_MADDWL_W_H_2_128SV(u_l, u_src, temp, v_l, v_src, temp, u_l, v_l); ++ } ++ y_l = __lasx_xvsrai_w(y_l, 10); ++ u_l = __lasx_xvsrai_w(u_l, 10); ++ v_l = __lasx_xvsrai_w(v_l, 10); ++ YUVTORGB(y_l, u_l, v_l, R_l, G_l, B_l, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ ++ if (hasAlpha) { ++ __m256i a_src, a_l; ++ ++ a_l = __lasx_xvreplgr2vr_w(a_temp); ++ for (j = 0; j < lumFilterSize; j++) { ++ temp = __lasx_xvldrepl_h(lumFilter + j, 0); ++ a_src = LASX_LD((alpSrc[j] + i)); ++ a_src = __lasx_xvpermi_d(a_src, 0xD8); ++ LASX_MADDWL_W_H_128SV(a_l, a_src, temp, a_l); ++ } ++ a_l = __lasx_xvsrai_w(a_l, 19); ++ WRITE_FULL_L_A(R_l, G_l, B_l, a_l, c, dest, i, R, A, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H_A(R_l, G_l, B_l, a_l, c, dest, i + 4, R, A, G, B, ++ y, target, hasAlpha, err); ++ } else { ++ WRITE_FULL_L(R_l, G_l, B_l, c, dest, i, R, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H(R_l, G_l, B_l, c, dest, i + 4, R, G, B, ++ y, target, hasAlpha, err); ++ } ++ i += 8; ++ } ++ for (; i < dstW; i++) { ++ int Y = templ; ++ int V, U = V = tempc; ++ ++ A = 0; ++ for (j = 0; j < lumFilterSize; j++) { ++ Y += lumSrc[j][i] * lumFilter[j]; ++ } ++ for (j = 0; j < chrFilterSize; j++) { ++ U += chrUSrc[j][i] * chrFilter[j]; ++ V += chrVSrc[j][i] * chrFilter[j]; ++ ++ } ++ Y >>= 10; ++ U >>= 10; ++ V >>= 10; ++ if (hasAlpha) { ++ A = 1 << 18; ++ for (j = 0; j < lumFilterSize; j++) { ++ A += alpSrc[j][i] * lumFilter[j]; ++ } ++ A >>= 19; ++ if (A & 0x100) ++ A = av_clip_uint8(A); ++ } ++ Y -= y_offset; ++ Y *= y_coeff; ++ Y += ytemp; ++ R = (unsigned)Y + V * v2r_coe; ++ G = (unsigned)Y + V * v2g_coe + U * u2g_coe; ++ B = (unsigned)Y + U * u2b_coe; ++ yuv2rgb_write_full(c, dest, i, R, A, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ c->dither_error[0][i] = err[0]; ++ c->dither_error[1][i] = err[1]; ++ c->dither_error[2][i] = err[2]; ++} ++ ++static void ++yuv2rgb_full_2_template_lasx(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y, ++ enum AVPixelFormat target, int hasAlpha) ++{ ++ const int16_t *buf0 = buf[0], *buf1 = buf[1], ++ *ubuf0 = ubuf[0], *ubuf1 = ubuf[1], ++ *vbuf0 = vbuf[0], *vbuf1 = vbuf[1], ++ *abuf0 = hasAlpha ? abuf[0] : NULL, ++ *abuf1 = hasAlpha ? abuf[1] : NULL; ++ int yalpha1 = 4096 - yalpha; ++ int uvalpha1 = 4096 - uvalpha; ++ int uvtemp = 128 << 19; ++ int atemp = 1 << 18; ++ int err[4] = {0}; ++ int ytemp = 1 << 21; ++ int len = dstW - 15; ++ int i, R, G, B, A; ++ int step = (target == AV_PIX_FMT_RGB24 || target == AV_PIX_FMT_BGR24) ? 3 : 4; ++ __m256i v_uvalpha1 = __lasx_xvreplgr2vr_w(uvalpha1); ++ __m256i v_yalpha1 = __lasx_xvreplgr2vr_w(yalpha1); ++ __m256i v_uvalpha = __lasx_xvreplgr2vr_w(uvalpha); ++ __m256i v_yalpha = __lasx_xvreplgr2vr_w(yalpha); ++ __m256i uv = __lasx_xvreplgr2vr_w(uvtemp); ++ __m256i a_bias = __lasx_xvreplgr2vr_w(atemp); ++ __m256i y_temp = __lasx_xvreplgr2vr_w(ytemp); ++ YUVTORGB_SETUP ++ ++ av_assert2(yalpha <= 4096U); ++ av_assert2(uvalpha <= 4096U); ++ ++ if( target == AV_PIX_FMT_BGR4_BYTE || target == AV_PIX_FMT_RGB4_BYTE ++ || target == AV_PIX_FMT_BGR8 || target == AV_PIX_FMT_RGB8) ++ step = 1; ++ ++ for (i = 0; i < len; i += 16) { ++ __m256i b0, b1, ub0, ub1, vb0, vb1; ++ __m256i y0_l, y0_h, y1_l, y1_h, u0_l, u0_h; ++ __m256i v0_l, v0_h, u1_l, u1_h, v1_l, v1_h; ++ __m256i y_l, y_h, v_l, v_h, u_l, u_h; ++ __m256i R_l, R_h, G_l, G_h, B_l, B_h; ++ ++ b0 = LASX_LD((buf0 + i)); ++ b1 = LASX_LD((buf1 + i)); ++ ub0 = LASX_LD((ubuf0 + i)); ++ ub1 = LASX_LD((ubuf1 + i)); ++ vb0 = LASX_LD((vbuf0 + i)); ++ vb1 = LASX_LD((vbuf1 + i)); ++ LASX_UNPCK_L_W_H_2(b0, b1, y0_l, y1_l); ++ LASX_UNPCK_L_W_H_4(ub0, ub1, vb0, vb1, u0_l, u1_l, v0_l, v1_l); ++ b0 = __lasx_xvpermi_d(b0, 0x4E); ++ b1 = __lasx_xvpermi_d(b1, 0x4E); ++ ub0 = __lasx_xvpermi_d(ub0, 0x4E); ++ ub1 = __lasx_xvpermi_d(ub1, 0x4E); ++ vb0 = __lasx_xvpermi_d(vb0, 0x4E); ++ vb1 = __lasx_xvpermi_d(vb1, 0x4E); ++ LASX_UNPCK_L_W_H_2(b0, b1, y0_h, y1_h); ++ LASX_UNPCK_L_W_H_4(ub0, ub1, vb0, vb1, u0_h, u1_h, v0_h, v1_h); ++ y0_l = __lasx_xvmul_w(y0_l, v_yalpha1); ++ y0_h = __lasx_xvmul_w(y0_h, v_yalpha1); ++ u0_l = __lasx_xvmul_w(u0_l, v_uvalpha1); ++ u0_h = __lasx_xvmul_w(u0_h, v_uvalpha1); ++ v0_l = __lasx_xvmul_w(v0_l, v_uvalpha1); ++ v0_h = __lasx_xvmul_w(v0_h, v_uvalpha1); ++ y_l = __lasx_xvmadd_w(y0_l, v_yalpha, y1_l); ++ y_h = __lasx_xvmadd_w(y0_h, v_yalpha, y1_h); ++ u_l = __lasx_xvmadd_w(u0_l, v_uvalpha, u1_l); ++ u_h = __lasx_xvmadd_w(u0_h, v_uvalpha, u1_h); ++ v_l = __lasx_xvmadd_w(v0_l, v_uvalpha, v1_l); ++ v_h = __lasx_xvmadd_w(v0_h, v_uvalpha, v1_h); ++ u_l = __lasx_xvsub_w(u_l, uv); ++ u_h = __lasx_xvsub_w(u_h, uv); ++ v_l = __lasx_xvsub_w(v_l, uv); ++ v_h = __lasx_xvsub_w(v_h, uv); ++ y_l = __lasx_xvsrai_w(y_l, 10); ++ y_h = __lasx_xvsrai_w(y_h, 10); ++ u_l = __lasx_xvsrai_w(u_l, 10); ++ u_h = __lasx_xvsrai_w(u_h, 10); ++ v_l = __lasx_xvsrai_w(v_l, 10); ++ v_h = __lasx_xvsrai_w(v_h, 10); ++ YUVTORGB(y_l, u_l, v_l, R_l, G_l, B_l, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ YUVTORGB(y_h, u_h, v_h, R_h, G_h, B_h, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ ++ if (hasAlpha) { ++ __m256i a0, a1, a0_l, a0_h; ++ __m256i a_l, a_h, a1_l, a1_h; ++ ++ a0 = LASX_LD((abuf0 + i)); ++ a1 = LASX_LD((abuf1 + i)); ++ LASX_UNPCK_L_W_H_2(a0, a1, a0_l, a1_l); ++ a0 = __lasx_xvpermi_d(a0, 0x4E); ++ a1 = __lasx_xvpermi_d(a1, 0x4E); ++ LASX_UNPCK_L_W_H_2(a0, a1, a0_h, a1_h); ++ a_l = __lasx_xvmadd_w(a_bias, a0_l, v_yalpha1); ++ a_h = __lasx_xvmadd_w(a_bias, a0_h, v_yalpha1); ++ a_l = __lasx_xvmadd_w(a_l, v_yalpha, a1_l); ++ a_h = __lasx_xvmadd_w(a_h, v_yalpha, a1_h); ++ a_l = __lasx_xvsrai_w(a_l, 19); ++ a_h = __lasx_xvsrai_w(a_h, 19); ++ WRITE_FULL_L_A(R_l, G_l, B_l, a_l, c, dest, i, R, A, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H_A(R_l, G_l, B_l, a_l, c, dest, i + 4, R, A, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_L_A(R_h, G_h, B_h, a_h, c, dest, i + 8, R, A, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H_A(R_h, G_h, B_h, a_h, c, dest, i + 12, R, A, G, B, ++ y, target, hasAlpha, err); ++ } else { ++ WRITE_FULL_L(R_l, G_l, B_l, c, dest, i, R, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H(R_l, G_l, B_l, c, dest, i + 4, R, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_L(R_h, G_h, B_h, c, dest, i + 8, R, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H(R_h, G_h, B_h, c, dest, i + 12, R, G, B, ++ y, target, hasAlpha, err); ++ } ++ } ++ if (dstW - i >= 8) { ++ __m256i b0, b1, ub0, ub1, vb0, vb1; ++ __m256i y0_l, y1_l, u0_l; ++ __m256i v0_l, u1_l, v1_l; ++ __m256i y_l, u_l, v_l; ++ __m256i R_l, G_l, B_l; ++ ++ b0 = LASX_LD((buf0 + i)); ++ b1 = LASX_LD((buf1 + i)); ++ ub0 = LASX_LD((ubuf0 + i)); ++ ub1 = LASX_LD((ubuf1 + i)); ++ vb0 = LASX_LD((vbuf0 + i)); ++ vb1 = LASX_LD((vbuf1 + i)); ++ LASX_UNPCK_L_W_H_2(b0, b1, y0_l, y1_l); ++ LASX_UNPCK_L_W_H_4(ub0, ub1, vb0, vb1, u0_l, u1_l, v0_l, v1_l); ++ y0_l = __lasx_xvmul_w(y0_l, v_yalpha1); ++ u0_l = __lasx_xvmul_w(u0_l, v_uvalpha1); ++ v0_l = __lasx_xvmul_w(v0_l, v_uvalpha1); ++ y_l = __lasx_xvmadd_w(y0_l, v_yalpha, y1_l); ++ u_l = __lasx_xvmadd_w(u0_l, v_uvalpha, u1_l); ++ v_l = __lasx_xvmadd_w(v0_l, v_uvalpha, v1_l); ++ u_l = __lasx_xvsub_w(u_l, uv); ++ v_l = __lasx_xvsub_w(v_l, uv); ++ y_l = __lasx_xvsrai_w(y_l, 10); ++ u_l = __lasx_xvsrai_w(u_l, 10); ++ v_l = __lasx_xvsrai_w(v_l, 10); ++ YUVTORGB(y_l, u_l, v_l, R_l, G_l, B_l, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ ++ if (hasAlpha) { ++ __m256i a0, a1, a0_l; ++ __m256i a_l, a1_l; ++ ++ a0 = LASX_LD((abuf0 + i)); ++ a1 = LASX_LD((abuf1 + i)); ++ LASX_UNPCK_L_W_H_2(a0, a1, a0_l, a1_l); ++ a_l = __lasx_xvmadd_w(a_bias, a0_l, v_yalpha1); ++ a_l = __lasx_xvmadd_w(a_l, v_yalpha, a1_l); ++ a_l = __lasx_xvsrai_w(a_l, 19); ++ WRITE_FULL_L_A(R_l, G_l, B_l, a_l, c, dest, i, R, A, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H_A(R_l, G_l, B_l, a_l, c, dest, i + 4, R, A, G, B, ++ y, target, hasAlpha, err); ++ } else { ++ WRITE_FULL_L(R_l, G_l, B_l, c, dest, i, R, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H(R_l, G_l, B_l, c, dest, i + 4, R, G, B, ++ y, target, hasAlpha, err); ++ } ++ i += 8; ++ } ++ for (; i < dstW; i++){ ++ int Y = ( buf0[i] * yalpha1 + buf1[i] * yalpha ) >> 10; //FIXME rounding ++ int U = (ubuf0[i] * uvalpha1 + ubuf1[i] * uvalpha- uvtemp) >> 10; ++ int V = (vbuf0[i] * uvalpha1 + vbuf1[i] * uvalpha- uvtemp) >> 10; ++ ++ A = 0; ++ if (hasAlpha){ ++ A = (abuf0[i] * yalpha1 + abuf1[i] * yalpha + atemp) >> 19; ++ if (A & 0x100) ++ A = av_clip_uint8(A); ++ } ++ ++ Y -= y_offset; ++ Y *= y_coeff; ++ Y += ytemp; ++ R = (unsigned)Y + V * v2r_coe; ++ G = (unsigned)Y + V * v2g_coe + U * u2g_coe; ++ B = (unsigned)Y + U * u2b_coe; ++ yuv2rgb_write_full(c, dest, i, R, A, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ c->dither_error[0][i] = err[0]; ++ c->dither_error[1][i] = err[1]; ++ c->dither_error[2][i] = err[2]; ++} ++ ++static void ++yuv2rgb_full_1_template_lasx(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y, enum AVPixelFormat target, ++ int hasAlpha) ++{ ++ const int16_t *ubuf0 = ubuf[0], *vbuf0 = vbuf[0]; ++ int i, B, G, R, A; ++ int step = (target == AV_PIX_FMT_RGB24 || target == AV_PIX_FMT_BGR24) ? 3 : 4; ++ int err[4] = {0}; ++ int ytemp = 1 << 21; ++ int bias_int = 64; ++ int len = dstW - 15; ++ __m256i bias = __lasx_xvreplgr2vr_w(bias_int); ++ __m256i y_temp = __lasx_xvreplgr2vr_w(ytemp); ++ YUVTORGB_SETUP ++ ++ if( target == AV_PIX_FMT_BGR4_BYTE || target == AV_PIX_FMT_RGB4_BYTE ++ || target == AV_PIX_FMT_BGR8 || target == AV_PIX_FMT_RGB8) ++ step = 1; ++ if (uvalpha < 2048) { ++ int uvtemp = 128 << 7; ++ __m256i uv = __lasx_xvreplgr2vr_w(uvtemp); ++ ++ for (i = 0; i < len; i += 16) { ++ __m256i b, ub, vb, ub_l, ub_h, vb_l, vb_h; ++ __m256i y_l, y_h, u_l, u_h, v_l, v_h; ++ __m256i R_l, R_h, G_l, G_h, B_l, B_h; ++ ++ b = LASX_LD((buf0 + i)); ++ ub = LASX_LD((ubuf0 + i)); ++ vb = LASX_LD((vbuf0 + i)); ++ LASX_UNPCK_L_W_H(b, y_l); ++ LASX_UNPCK_L_W_H_2(ub, vb, ub_l, vb_l); ++ b = __lasx_xvpermi_d(b, 0x4E); ++ ub = __lasx_xvpermi_d(ub, 0x4E); ++ vb = __lasx_xvpermi_d(vb, 0x4E); ++ LASX_UNPCK_L_W_H(b, y_h); ++ LASX_UNPCK_L_W_H_2(ub, vb, ub_h, vb_h); ++ y_l = __lasx_xvslli_w(y_l, 2); ++ y_h = __lasx_xvslli_w(y_h, 2); ++ u_l = __lasx_xvsub_w(ub_l, uv); ++ u_h = __lasx_xvsub_w(ub_h, uv); ++ v_l = __lasx_xvsub_w(vb_l, uv); ++ v_h = __lasx_xvsub_w(vb_h, uv); ++ u_l = __lasx_xvslli_w(u_l, 2); ++ u_h = __lasx_xvslli_w(u_h, 2); ++ v_l = __lasx_xvslli_w(v_l, 2); ++ v_h = __lasx_xvslli_w(v_h, 2); ++ YUVTORGB(y_l, u_l, v_l, R_l, G_l, B_l, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ YUVTORGB(y_h, u_h, v_h, R_h, G_h, B_h, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ ++ if(hasAlpha) { ++ __m256i a_src; ++ __m256i a_l, a_h; ++ ++ a_src = LASX_LD((abuf0 + i)); ++ a_src = __lasx_xvpermi_d(a_src, 0xD8); ++ LASX_ADDW_W_W_H_128SV(bias, a_src, a_l); ++ a_src = __lasx_xvpermi_d(a_src, 0xB1); ++ LASX_ADDW_W_W_H_128SV(bias, a_src, a_h); ++ a_l = __lasx_xvsrai_w(a_l, 7); ++ a_h = __lasx_xvsrai_w(a_h, 7); ++ WRITE_FULL_L_A(R_l, G_l, B_l, a_l, c, dest, i, R, A, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H_A(R_l, G_l, B_l, a_l, c, dest, i + 4, R, A, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_L_A(R_h, G_h, B_h, a_h, c, dest, i + 8, R, A, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H_A(R_h, G_h, B_h, a_h, c, dest, i + 12, R, A, G, B, ++ y, target, hasAlpha, err); ++ } else { ++ WRITE_FULL_L(R_l, G_l, B_l, c, dest, i, R, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H(R_l, G_l, B_l, c, dest, i + 4, R, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_L(R_h, G_h, B_h, c, dest, i + 8, R, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H(R_h, G_h, B_h, c, dest, i + 12, R, G, B, ++ y, target, hasAlpha, err); ++ } ++ } ++ if (dstW - i >= 8) { ++ __m256i b, ub, vb, ub_l, vb_l; ++ __m256i y_l, u_l, v_l; ++ __m256i R_l, G_l, B_l; ++ ++ b = LASX_LD((buf0 + i)); ++ ub = LASX_LD((ubuf0 + i)); ++ vb = LASX_LD((vbuf0 + i)); ++ LASX_UNPCK_L_W_H(b, y_l); ++ LASX_UNPCK_L_W_H_2(ub, vb, ub_l, vb_l); ++ y_l = __lasx_xvslli_w(y_l, 2); ++ u_l = __lasx_xvsub_w(ub_l, uv); ++ v_l = __lasx_xvsub_w(vb_l, uv); ++ u_l = __lasx_xvslli_w(u_l, 2); ++ v_l = __lasx_xvslli_w(v_l, 2); ++ YUVTORGB(y_l, u_l, v_l, R_l, G_l, B_l, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ ++ if(hasAlpha) { ++ __m256i a_src, a_l; ++ ++ a_src = LASX_LD((abuf0 + i)); ++ a_src = __lasx_xvpermi_d(a_src, 0xD8); ++ LASX_ADDW_W_W_H_128SV(bias, a_src, a_l); ++ a_l = __lasx_xvsrai_w(a_l, 7); ++ WRITE_FULL_L_A(R_l, G_l, B_l, a_l, c, dest, i, R, A, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H_A(R_l, G_l, B_l, a_l, c, dest, i + 4, R, A, G, B, ++ y, target, hasAlpha, err); ++ } else { ++ WRITE_FULL_L(R_l, G_l, B_l, c, dest, i, R, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H(R_l, G_l, B_l, c, dest, i + 4, R, G, B, ++ y, target, hasAlpha, err); ++ } ++ i += 8; ++ } ++ for (; i < dstW; i++) { ++ int Y = buf0[i] << 2; ++ int U = (ubuf0[i] - uvtemp) << 2; ++ int V = (vbuf0[i] - uvtemp) << 2; ++ ++ A = 0; ++ if(hasAlpha) { ++ A = (abuf0[i] + 64) >> 7; ++ if (A & 0x100) ++ A = av_clip_uint8(A); ++ } ++ Y -= y_offset; ++ Y *= y_coeff; ++ Y += ytemp; ++ R = (unsigned)Y + V * v2r_coe; ++ G = (unsigned)Y + V * v2g_coe + U * u2g_coe; ++ B = (unsigned)Y + U * u2b_coe; ++ yuv2rgb_write_full(c, dest, i, R, A, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ } else { ++ const int16_t *ubuf1 = ubuf[1], *vbuf1 = vbuf[1]; ++ int uvtemp = 128 << 8; ++ __m256i uv = __lasx_xvreplgr2vr_w(uvtemp); ++ ++ for (i = 0; i < len; i += 16) { ++ __m256i b, ub0, ub1, vb0, vb1; ++ __m256i y_l, y_h, u_l, u_h, v_l, v_h; ++ __m256i R_l, R_h, G_l, G_h, B_l, B_h; ++ ++ b = LASX_LD((buf0 + i)); ++ ub0 = LASX_LD((ubuf0 + i)); ++ vb0 = LASX_LD((vbuf0 + i)); ++ ub1 = LASX_LD((ubuf1 + i)); ++ vb1 = LASX_LD((vbuf1 + i)); ++ LASX_UNPCK_L_W_H(b, y_l); ++ b = __lasx_xvpermi_d(b, 0X4E); ++ LASX_UNPCK_L_W_H(b, y_h); ++ y_l = __lasx_xvslli_w(y_l, 2); ++ y_h = __lasx_xvslli_w(y_h, 2); ++ ub0 = __lasx_xvpermi_d(ub0, 0xD8); ++ vb0 = __lasx_xvpermi_d(vb0, 0xD8); ++ ub1 = __lasx_xvpermi_d(ub1, 0xD8); ++ vb1 = __lasx_xvpermi_d(vb1, 0xD8); ++ LASX_ADDWL_W_H_2_128SV(ub0, ub1, vb0, vb1, u_l, v_l); ++ LASX_ADDWH_W_H_2_128SV(ub0, ub1, vb0, vb1, u_h, v_h); ++ u_l = __lasx_xvsub_w(u_l, uv); ++ u_h = __lasx_xvsub_w(u_h, uv); ++ v_l = __lasx_xvsub_w(v_l, uv); ++ v_h = __lasx_xvsub_w(v_h, uv); ++ u_l = __lasx_xvslli_w(u_l, 1); ++ u_h = __lasx_xvslli_w(u_h, 1); ++ v_l = __lasx_xvslli_w(v_l, 1); ++ v_h = __lasx_xvslli_w(v_h, 1); ++ YUVTORGB(y_l, u_l, v_l, R_l, G_l, B_l, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ YUVTORGB(y_h, u_h, v_h, R_h, G_h, B_h, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ ++ if(hasAlpha) { ++ __m256i a_src; ++ __m256i a_l, a_h; ++ ++ a_src = LASX_LD((abuf0 + i)); ++ a_src = __lasx_xvpermi_d(a_src, 0xD8); ++ LASX_ADDW_W_W_H_128SV(bias, a_src, a_l); ++ a_src = __lasx_xvpermi_d(a_src, 0xB1); ++ LASX_ADDW_W_W_H_128SV(bias, a_src, a_h); ++ a_l = __lasx_xvsrai_w(a_l, 7); ++ a_h = __lasx_xvsrai_w(a_h, 7); ++ WRITE_FULL_L_A(R_l, G_l, B_l, a_l, c, dest, i, R, A, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H_A(R_l, G_l, B_l, a_l, c, dest, i + 4, R, A, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_L_A(R_h, G_h, B_h, a_h, c, dest, i + 8, R, A, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H_A(R_h, G_h, B_h, a_h, c, dest, i + 12, R, A, G, B, ++ y, target, hasAlpha, err); ++ } else { ++ WRITE_FULL_L(R_l, G_l, B_l, c, dest, i, R, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H(R_l, G_l, B_l, c, dest, i + 4, R, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_L(R_h, G_h, B_h, c, dest, i + 8, R, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H(R_h, G_h, B_h, c, dest, i + 12, R, G, B, ++ y, target, hasAlpha, err); ++ } ++ } ++ if (dstW - i >= 8) { ++ __m256i b, ub0, ub1, vb0, vb1; ++ __m256i y_l, u_l, v_l; ++ __m256i R_l, G_l, B_l; ++ ++ b = LASX_LD((buf0 + i)); ++ ub0 = LASX_LD((ubuf0 + i)); ++ vb0 = LASX_LD((vbuf0 + i)); ++ ub1 = LASX_LD((ubuf1 + i)); ++ vb1 = LASX_LD((vbuf1 + i)); ++ LASX_UNPCK_L_W_H(b, y_l); ++ y_l = __lasx_xvslli_w(y_l, 2); ++ ub0 = __lasx_xvpermi_d(ub0, 0xD8); ++ vb0 = __lasx_xvpermi_d(vb0, 0xD8); ++ ub1 = __lasx_xvpermi_d(ub1, 0xD8); ++ vb1 = __lasx_xvpermi_d(vb1, 0xD8); ++ LASX_ADDWL_W_H_2_128SV(ub0, ub1, vb0, vb1, u_l, v_l); ++ u_l = __lasx_xvsub_w(u_l, uv); ++ v_l = __lasx_xvsub_w(v_l, uv); ++ u_l = __lasx_xvslli_w(u_l, 1); ++ v_l = __lasx_xvslli_w(v_l, 1); ++ YUVTORGB(y_l, u_l, v_l, R_l, G_l, B_l, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ ++ if(hasAlpha) { ++ __m256i a_src; ++ __m256i a_l; ++ ++ a_src = LASX_LD((abuf0 + i)); ++ a_src = __lasx_xvpermi_d(a_src, 0xD8); ++ LASX_ADDW_W_W_H_128SV(bias, a_src, a_l); ++ a_l = __lasx_xvsrai_w(a_l, 7); ++ WRITE_FULL_L_A(R_l, G_l, B_l, a_l, c, dest, i, R, A, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H_A(R_l, G_l, B_l, a_l, c, dest, i + 4, R, A, G, B, ++ y, target, hasAlpha, err); ++ } else { ++ WRITE_FULL_L(R_l, G_l, B_l, c, dest, i, R, G, B, ++ y, target, hasAlpha, err); ++ WRITE_FULL_H(R_l, G_l, B_l, c, dest, i + 4, R, G, B, ++ y, target, hasAlpha, err); ++ } ++ i += 8; ++ } ++ for (; i < dstW; i++) { ++ int Y = buf0[i] << 2; ++ int U = (ubuf0[i] + ubuf1[i] - uvtemp) << 1; ++ int V = (vbuf0[i] + vbuf1[i] - uvtemp) << 1; ++ ++ A = 0; ++ if(hasAlpha) { ++ A = (abuf0[i] + 64) >> 7; ++ if (A & 0x100) ++ A = av_clip_uint8(A); ++ } ++ Y -= y_offset; ++ Y *= y_coeff; ++ Y += ytemp; ++ R = (unsigned)Y + V * v2r_coe; ++ G = (unsigned)Y + V * v2g_coe + U * u2g_coe; ++ B = (unsigned)Y + U * u2b_coe; ++ yuv2rgb_write_full(c, dest, i, R, A, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ } ++ c->dither_error[0][i] = err[0]; ++ c->dither_error[1][i] = err[1]; ++ c->dither_error[2][i] = err[2]; ++} ++#if CONFIG_SMALL ++YUV2RGBWRAPPER(yuv2, rgb_full, bgra32_full, AV_PIX_FMT_BGRA, CONFIG_SWSCALE_ALPHA && c->needAlpha) ++YUV2RGBWRAPPER(yuv2, rgb_full, abgr32_full, AV_PIX_FMT_ABGR, CONFIG_SWSCALE_ALPHA && c->needAlpha) ++YUV2RGBWRAPPER(yuv2, rgb_full, rgba32_full, AV_PIX_FMT_RGBA, CONFIG_SWSCALE_ALPHA && c->needAlpha) ++YUV2RGBWRAPPER(yuv2, rgb_full, argb32_full, AV_PIX_FMT_ARGB, CONFIG_SWSCALE_ALPHA && c->needAlpha) ++#else ++#if CONFIG_SWSCALE_ALPHA ++YUV2RGBWRAPPER(yuv2, rgb_full, bgra32_full, AV_PIX_FMT_BGRA, 1) ++YUV2RGBWRAPPER(yuv2, rgb_full, abgr32_full, AV_PIX_FMT_ABGR, 1) ++YUV2RGBWRAPPER(yuv2, rgb_full, rgba32_full, AV_PIX_FMT_RGBA, 1) ++YUV2RGBWRAPPER(yuv2, rgb_full, argb32_full, AV_PIX_FMT_ARGB, 1) ++#endif ++YUV2RGBWRAPPER(yuv2, rgb_full, bgrx32_full, AV_PIX_FMT_BGRA, 0) ++YUV2RGBWRAPPER(yuv2, rgb_full, xbgr32_full, AV_PIX_FMT_ABGR, 0) ++YUV2RGBWRAPPER(yuv2, rgb_full, rgbx32_full, AV_PIX_FMT_RGBA, 0) ++YUV2RGBWRAPPER(yuv2, rgb_full, xrgb32_full, AV_PIX_FMT_ARGB, 0) ++#endif ++YUV2RGBWRAPPER(yuv2, rgb_full, bgr24_full, AV_PIX_FMT_BGR24, 0) ++YUV2RGBWRAPPER(yuv2, rgb_full, rgb24_full, AV_PIX_FMT_RGB24, 0) ++ ++YUV2RGBWRAPPER(yuv2, rgb_full, bgr4_byte_full, AV_PIX_FMT_BGR4_BYTE, 0) ++YUV2RGBWRAPPER(yuv2, rgb_full, rgb4_byte_full, AV_PIX_FMT_RGB4_BYTE, 0) ++YUV2RGBWRAPPER(yuv2, rgb_full, bgr8_full, AV_PIX_FMT_BGR8, 0) ++YUV2RGBWRAPPER(yuv2, rgb_full, rgb8_full, AV_PIX_FMT_RGB8, 0) ++#undef yuvTorgb ++#undef yuvTorgb_setup ++ ++ ++av_cold void ff_sws_init_output_loongarch(SwsContext *c) ++{ ++ ++ if(c->flags & SWS_FULL_CHR_H_INT) { ++ switch (c->dstFormat) { ++ case AV_PIX_FMT_RGBA: ++#if CONFIG_SMALL ++ c->yuv2packedX = yuv2rgba32_full_X_lasx; ++ c->yuv2packed2 = yuv2rgba32_full_2_lasx; ++ c->yuv2packed1 = yuv2rgba32_full_1_lasx; ++#else ++#if CONFIG_SWSCALE_ALPHA ++ if (c->needAlpha) { ++ c->yuv2packedX = yuv2rgba32_full_X_lasx; ++ c->yuv2packed2 = yuv2rgba32_full_2_lasx; ++ c->yuv2packed1 = yuv2rgba32_full_1_lasx; ++ } else ++#endif /* CONFIG_SWSCALE_ALPHA */ ++ { ++ c->yuv2packedX = yuv2rgbx32_full_X_lasx; ++ c->yuv2packed2 = yuv2rgbx32_full_2_lasx; ++ c->yuv2packed1 = yuv2rgbx32_full_1_lasx; ++ } ++#endif /* !CONFIG_SMALL */ ++ break; ++ case AV_PIX_FMT_ARGB: ++#if CONFIG_SMALL ++ c->yuv2packedX = yuv2argb32_full_X_lasx; ++ c->yuv2packed2 = yuv2argb32_full_2_lasx; ++ c->yuv2packed1 = yuv2argb32_full_1_lasx; ++#else ++#if CONFIG_SWSCALE_ALPHA ++ if (c->needAlpha) { ++ c->yuv2packedX = yuv2argb32_full_X_lasx; ++ c->yuv2packed2 = yuv2argb32_full_2_lasx; ++ c->yuv2packed1 = yuv2argb32_full_1_lasx; ++ } else ++#endif /* CONFIG_SWSCALE_ALPHA */ ++ { ++ c->yuv2packedX = yuv2xrgb32_full_X_lasx; ++ c->yuv2packed2 = yuv2xrgb32_full_2_lasx; ++ c->yuv2packed1 = yuv2xrgb32_full_1_lasx; ++ } ++#endif /* !CONFIG_SMALL */ ++ break; ++ case AV_PIX_FMT_BGRA: ++#if CONFIG_SMALL ++ c->yuv2packedX = yuv2bgra32_full_X_lasx; ++ c->yuv2packed2 = yuv2bgra32_full_2_lasx; ++ c->yuv2packed1 = yuv2bgra32_full_1_lasx; ++#else ++#if CONFIG_SWSCALE_ALPHA ++ if (c->needAlpha) { ++ c->yuv2packedX = yuv2bgra32_full_X_lasx; ++ c->yuv2packed2 = yuv2bgra32_full_2_lasx; ++ c->yuv2packed1 = yuv2bgra32_full_1_lasx; ++ } else ++#endif /* CONFIG_SWSCALE_ALPHA */ ++ { ++ c->yuv2packedX = yuv2bgrx32_full_X_lasx; ++ c->yuv2packed2 = yuv2bgrx32_full_2_lasx; ++ c->yuv2packed1 = yuv2bgrx32_full_1_lasx; ++ } ++#endif /* !CONFIG_SMALL */ ++ break; ++ case AV_PIX_FMT_ABGR: ++#if CONFIG_SMALL ++ c->yuv2packedX = yuv2abgr32_full_X_lasx; ++ c->yuv2packed2 = yuv2abgr32_full_2_lasx; ++ c->yuv2packed1 = yuv2abgr32_full_1_lasx; ++#else ++#if CONFIG_SWSCALE_ALPHA ++ if (c->needAlpha) { ++ c->yuv2packedX = yuv2abgr32_full_X_lasx; ++ c->yuv2packed2 = yuv2abgr32_full_2_lasx; ++ c->yuv2packed1 = yuv2abgr32_full_1_lasx; ++ } else ++#endif /* CONFIG_SWSCALE_ALPHA */ ++ { ++ c->yuv2packedX = yuv2xbgr32_full_X_lasx; ++ c->yuv2packed2 = yuv2xbgr32_full_2_lasx; ++ c->yuv2packed1 = yuv2xbgr32_full_1_lasx; ++ } ++#endif /* !CONFIG_SMALL */ ++ break; ++ case AV_PIX_FMT_RGB24: ++ c->yuv2packedX = yuv2rgb24_full_X_lasx; ++ c->yuv2packed2 = yuv2rgb24_full_2_lasx; ++ c->yuv2packed1 = yuv2rgb24_full_1_lasx; ++ break; ++ case AV_PIX_FMT_BGR24: ++ c->yuv2packedX = yuv2bgr24_full_X_lasx; ++ c->yuv2packed2 = yuv2bgr24_full_2_lasx; ++ c->yuv2packed1 = yuv2bgr24_full_1_lasx; ++ break; ++ case AV_PIX_FMT_BGR4_BYTE: ++ c->yuv2packedX = yuv2bgr4_byte_full_X_lasx; ++ c->yuv2packed2 = yuv2bgr4_byte_full_2_lasx; ++ c->yuv2packed1 = yuv2bgr4_byte_full_1_lasx; ++ break; ++ case AV_PIX_FMT_RGB4_BYTE: ++ c->yuv2packedX = yuv2rgb4_byte_full_X_lasx; ++ c->yuv2packed2 = yuv2rgb4_byte_full_2_lasx; ++ c->yuv2packed1 = yuv2rgb4_byte_full_1_lasx; ++ break; ++ case AV_PIX_FMT_BGR8: ++ c->yuv2packedX = yuv2bgr8_full_X_lasx; ++ c->yuv2packed2 = yuv2bgr8_full_2_lasx; ++ c->yuv2packed1 = yuv2bgr8_full_1_lasx; ++ break; ++ case AV_PIX_FMT_RGB8: ++ c->yuv2packedX = yuv2rgb8_full_X_lasx; ++ c->yuv2packed2 = yuv2rgb8_full_2_lasx; ++ c->yuv2packed1 = yuv2rgb8_full_1_lasx; ++ break; ++ } ++ } else { ++ switch (c->dstFormat) { ++ case AV_PIX_FMT_RGB32: ++ case AV_PIX_FMT_BGR32: ++#if CONFIG_SMALL ++#else ++#if CONFIG_SWSCALE_ALPHA ++ if (c->needAlpha) { ++ } else ++#endif /* CONFIG_SWSCALE_ALPHA */ ++ { ++ c->yuv2packed1 = yuv2rgbx32_1_lasx; ++ c->yuv2packed2 = yuv2rgbx32_2_lasx; ++ c->yuv2packedX = yuv2rgbx32_X_lasx; ++ } ++#endif /* !CONFIG_SMALL */ ++ break; ++ case AV_PIX_FMT_RGB32_1: ++ case AV_PIX_FMT_BGR32_1: ++#if CONFIG_SMALL ++#else ++#if CONFIG_SWSCALE_ALPHA ++ if (c->needAlpha) { ++ } else ++#endif /* CONFIG_SWSCALE_ALPHA */ ++ { ++ c->yuv2packed1 = yuv2rgbx32_1_1_lasx; ++ c->yuv2packed2 = yuv2rgbx32_1_2_lasx; ++ c->yuv2packedX = yuv2rgbx32_1_X_lasx; ++ } ++#endif /* !CONFIG_SMALL */ ++ break; ++ case AV_PIX_FMT_RGB24: ++ c->yuv2packed1 = yuv2rgb24_1_lasx; ++ c->yuv2packed2 = yuv2rgb24_2_lasx; ++ c->yuv2packedX = yuv2rgb24_X_lasx; ++ break; ++ case AV_PIX_FMT_BGR24: ++ c->yuv2packed1 = yuv2bgr24_1_lasx; ++ c->yuv2packed2 = yuv2bgr24_2_lasx; ++ c->yuv2packedX = yuv2bgr24_X_lasx; ++ break; ++ case AV_PIX_FMT_RGB565LE: ++ case AV_PIX_FMT_RGB565BE: ++ case AV_PIX_FMT_BGR565LE: ++ case AV_PIX_FMT_BGR565BE: ++ c->yuv2packed1 = yuv2rgb16_1_lasx; ++ c->yuv2packed2 = yuv2rgb16_2_lasx; ++ c->yuv2packedX = yuv2rgb16_X_lasx; ++ break; ++ case AV_PIX_FMT_RGB555LE: ++ case AV_PIX_FMT_RGB555BE: ++ case AV_PIX_FMT_BGR555LE: ++ case AV_PIX_FMT_BGR555BE: ++ c->yuv2packed1 = yuv2rgb15_1_lasx; ++ c->yuv2packed2 = yuv2rgb15_2_lasx; ++ c->yuv2packedX = yuv2rgb15_X_lasx; ++ break; ++ case AV_PIX_FMT_RGB444LE: ++ case AV_PIX_FMT_RGB444BE: ++ case AV_PIX_FMT_BGR444LE: ++ case AV_PIX_FMT_BGR444BE: ++ c->yuv2packed1 = yuv2rgb12_1_lasx; ++ c->yuv2packed2 = yuv2rgb12_2_lasx; ++ c->yuv2packedX = yuv2rgb12_X_lasx; ++ break; ++ case AV_PIX_FMT_RGB8: ++ case AV_PIX_FMT_BGR8: ++ c->yuv2packed1 = yuv2rgb8_1_lasx; ++ c->yuv2packed2 = yuv2rgb8_2_lasx; ++ c->yuv2packedX = yuv2rgb8_X_lasx; ++ break; ++ case AV_PIX_FMT_RGB4: ++ case AV_PIX_FMT_BGR4: ++ c->yuv2packed1 = yuv2rgb4_1_lasx; ++ c->yuv2packed2 = yuv2rgb4_2_lasx; ++ c->yuv2packedX = yuv2rgb4_X_lasx; ++ break; ++ case AV_PIX_FMT_RGB4_BYTE: ++ case AV_PIX_FMT_BGR4_BYTE: ++ c->yuv2packed1 = yuv2rgb4b_1_lasx; ++ c->yuv2packed2 = yuv2rgb4b_2_lasx; ++ c->yuv2packedX = yuv2rgb4b_X_lasx; ++ break; ++ } ++ } ++} +diff --git a/libswscale/loongarch/rgb2rgb_lasx.c b/libswscale/loongarch/rgb2rgb_lasx.c +new file mode 100644 +index 0000000000..d04cecd57f +--- /dev/null ++++ b/libswscale/loongarch/rgb2rgb_lasx.c +@@ -0,0 +1,54 @@ ++/* ++ * Copyright (C) 2021 Loongson Technology Co. Ltd. ++ * Contributed by Hao Chen(chenhao@loongson.cn) ++ * All rights reserved. ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "swscale_loongarch.h" ++#include "libavutil/loongarch/generic_macros_lasx.h" ++ ++void ff_interleave_bytes_lasx(const uint8_t *src1, const uint8_t *src2, ++ uint8_t *dest, int width, int height, ++ int src1Stride, int src2Stride, int dstStride) ++{ ++ int h; ++ int len = width & (0xFFFFFFF0); ++ ++ for (h = 0; h < height; h++) { ++ int w, index = 0; ++ __m256i src_1, src_2, dst; ++ ++ for (w = 0; w < len; w += 16) { ++ src_1 = LASX_LD(src1 + w); ++ src_2 = LASX_LD(src2 + w); ++ src_1 = __lasx_xvpermi_d(src_1, 0xD8); ++ src_2 = __lasx_xvpermi_d(src_2, 0xD8); ++ dst = __lasx_xvilvl_b(src_2, src_1); ++ LASX_ST(dst, dest + index); ++ index += 32; ++ } ++ for (w = 0; w < width; w++) { ++ dest[(w << 1) + 0] = src1[w]; ++ dest[(w << 1) + 1] = src2[w]; ++ } ++ dest += dstStride; ++ src1 += src1Stride; ++ src2 += src2Stride; ++ } ++} +diff --git a/libswscale/loongarch/swscale_init_loongarch.c b/libswscale/loongarch/swscale_init_loongarch.c +new file mode 100644 +index 0000000000..d4fd3c2842 +--- /dev/null ++++ b/libswscale/loongarch/swscale_init_loongarch.c +@@ -0,0 +1,95 @@ ++/* ++ * Copyright (C) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hao Chen(chenhao@loongson.cn) ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "swscale_loongarch.h" ++#include "libswscale/swscale_internal.h" ++#include "libswscale/rgb2rgb.h" ++#include "libavutil/loongarch/cpu.h" ++ ++av_cold void ff_sws_init_swscale_loongarch(SwsContext *c) ++{ ++ int cpu_flags = av_get_cpu_flags(); ++ if (have_lasx(cpu_flags)) { ++ ff_sws_init_output_loongarch(c); ++ if (c->srcBpc == 8) { ++ if (c->dstBpc <= 14) { ++ c->hyScale = c->hcScale = ff_hscale_8_to_15_lasx; ++ } else { ++ c->hyScale = c->hcScale = ff_hscale_8_to_19_lasx; ++ } ++ } else { ++ c->hyScale = c->hcScale = c->dstBpc > 14 ? ff_hscale_16_to_19_lasx ++ : ff_hscale_16_to_15_lasx; ++ } ++ switch (c->srcFormat) { ++ case AV_PIX_FMT_GBRAP: ++ case AV_PIX_FMT_GBRP: ++ { ++ c->readChrPlanar = planar_rgb_to_uv_lasx; ++ c->readLumPlanar = planar_rgb_to_y_lasx; ++ } ++ break; ++ } ++ if (c->dstBpc == 8) ++ c->yuv2planeX = ff_yuv2planeX_8_lasx; ++ } ++} ++ ++av_cold void rgb2rgb_init_loongarch(void) ++{ ++ int cpu_flags = av_get_cpu_flags(); ++ if (have_lasx(cpu_flags)) ++ interleaveBytes = ff_interleave_bytes_lasx; ++} ++ ++av_cold SwsFunc ff_yuv2rgb_init_loongarch(SwsContext *c) ++{ ++ int cpu_flags = av_get_cpu_flags(); ++ if (have_lasx(cpu_flags)) { ++ switch (c->dstFormat) { ++ case AV_PIX_FMT_RGB24: ++ return yuv420_rgb24_lasx; ++ case AV_PIX_FMT_BGR24: ++ return yuv420_bgr24_lasx; ++ case AV_PIX_FMT_RGBA: ++ if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) { ++ break; ++ } else ++ return yuv420_rgba32_lasx; ++ case AV_PIX_FMT_ARGB: ++ if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) { ++ break; ++ } else ++ return yuv420_argb32_lasx; ++ case AV_PIX_FMT_BGRA: ++ if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) { ++ break; ++ } else ++ return yuv420_bgra32_lasx; ++ case AV_PIX_FMT_ABGR: ++ if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) { ++ break; ++ } else ++ return yuv420_abgr32_lasx; ++ } ++ } ++ return NULL; ++} +diff --git a/libswscale/loongarch/swscale_lasx.c b/libswscale/loongarch/swscale_lasx.c +new file mode 100644 +index 0000000000..b3dc96681e +--- /dev/null ++++ b/libswscale/loongarch/swscale_lasx.c +@@ -0,0 +1,944 @@ ++/* ++ * Copyright (C) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hao Chen(chenhao@loongson.cn) ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "swscale_loongarch.h" ++#include "libavutil/loongarch/generic_macros_lasx.h" ++#include "libavutil/intreadwrite.h" ++ ++#define SCALE_8_16(_sh) \ ++{ \ ++ src0 = __lasx_xvldrepl_d(src + filterPos[0], 0); \ ++ src1 = __lasx_xvldrepl_d(src + filterPos[1], 0); \ ++ src2 = __lasx_xvldrepl_d(src + filterPos[2], 0); \ ++ src3 = __lasx_xvldrepl_d(src + filterPos[3], 0); \ ++ src4 = __lasx_xvldrepl_d(src + filterPos[4], 0); \ ++ src5 = __lasx_xvldrepl_d(src + filterPos[5], 0); \ ++ src6 = __lasx_xvldrepl_d(src + filterPos[6], 0); \ ++ src7 = __lasx_xvldrepl_d(src + filterPos[7], 0); \ ++ src8 = __lasx_xvldrepl_d(src + filterPos[8], 0); \ ++ src9 = __lasx_xvldrepl_d(src + filterPos[9], 0); \ ++ src10 = __lasx_xvldrepl_d(src + filterPos[10], 0); \ ++ src11 = __lasx_xvldrepl_d(src + filterPos[11], 0); \ ++ src12 = __lasx_xvldrepl_d(src + filterPos[12], 0); \ ++ src13 = __lasx_xvldrepl_d(src + filterPos[13], 0); \ ++ src14 = __lasx_xvldrepl_d(src + filterPos[14], 0); \ ++ src15 = __lasx_xvldrepl_d(src + filterPos[15], 0); \ ++ LASX_LD_8(filter, 16, filter0, filter1, filter2, filter3, \ ++ filter4, filter5, filter6, filter7); \ ++ LASX_PCKEV_D_4_128SV(src1, src0, src3, src2, src5, src4, \ ++ src7, src6, src0, src2, src4, src6); \ ++ LASX_PCKEV_D_4_128SV(src9, src8, src11, src10, src13, src12, \ ++ src15, src14, src8, src10, src12, src14);\ ++ LASX_UNPCK_L_HU_BU_8(src0, src2, src4, src6, src8, src10, \ ++ src12, src14, src0, src2, src4, src6, \ ++ src8, src10, src12, src14); \ ++ LASX_DP2_W_H_8(filter0, src0, filter1, src2, filter2, src4, \ ++ filter3, src6, filter4, src8, filter5, src10, \ ++ filter6, src12, filter7, src14, src0, src1, \ ++ src2, src3, src4, src5, src6, src7); \ ++ src0 = __lasx_xvhaddw_d_w(src0, src0); \ ++ src1 = __lasx_xvhaddw_d_w(src1, src1); \ ++ src2 = __lasx_xvhaddw_d_w(src2, src2); \ ++ src3 = __lasx_xvhaddw_d_w(src3, src3); \ ++ src4 = __lasx_xvhaddw_d_w(src4, src4); \ ++ src5 = __lasx_xvhaddw_d_w(src5, src5); \ ++ src6 = __lasx_xvhaddw_d_w(src6, src6); \ ++ src7 = __lasx_xvhaddw_d_w(src7, src7); \ ++ LASX_PCKEV_W_4_128SV(src1, src0, src3, src2, src5, src4, \ ++ src7, src6, src0, src1, src2, src3); \ ++ src0 = __lasx_xvhaddw_d_w(src0, src0); \ ++ src1 = __lasx_xvhaddw_d_w(src1, src1); \ ++ src2 = __lasx_xvhaddw_d_w(src2, src2); \ ++ src3 = __lasx_xvhaddw_d_w(src3, src3); \ ++ LASX_PCKEV_W_2_128SV(src1, src0, src3, src2, src0, src1); \ ++ LASX_SRAI_W_2(src0, src1, src0, src1, _sh); \ ++ src0 = __lasx_xvmin_w(src0, vmax); \ ++ src1 = __lasx_xvmin_w(src1, vmax); \ ++ src0 = __lasx_xvperm_w(src0, shuf); \ ++ src1 = __lasx_xvperm_w(src1, shuf); \ ++ LASX_PCKEV_H(src1, src0, src0); \ ++ LASX_ST(src0, dst); \ ++ filterPos += 16; \ ++ filter += 128; \ ++ dst += 16; \ ++} ++ ++#define SCALE_8_8(_sh) \ ++{ \ ++ src0 = __lasx_xvldrepl_d(src + filterPos[0], 0); \ ++ src1 = __lasx_xvldrepl_d(src + filterPos[1], 0); \ ++ src2 = __lasx_xvldrepl_d(src + filterPos[2], 0); \ ++ src3 = __lasx_xvldrepl_d(src + filterPos[3], 0); \ ++ src4 = __lasx_xvldrepl_d(src + filterPos[4], 0); \ ++ src5 = __lasx_xvldrepl_d(src + filterPos[5], 0); \ ++ src6 = __lasx_xvldrepl_d(src + filterPos[6], 0); \ ++ src7 = __lasx_xvldrepl_d(src + filterPos[7], 0); \ ++ LASX_LD_4(filter, 16, filter0, filter1, filter2, filter3); \ ++ LASX_PCKEV_D_4_128SV(src1, src0, src3, src2, src5, src4, \ ++ src7, src6, src0, src2, src4, src6); \ ++ LASX_UNPCK_L_HU_BU_4(src0, src2, src4, src6, \ ++ src0, src2, src4, src6); \ ++ LASX_DP2_W_H_4(filter0, src0, filter1, src2, filter2, src4, \ ++ filter3, src6, src0, src1, src2, src3); \ ++ src0 = __lasx_xvhaddw_d_w(src0, src0); \ ++ src1 = __lasx_xvhaddw_d_w(src1, src1); \ ++ src2 = __lasx_xvhaddw_d_w(src2, src2); \ ++ src3 = __lasx_xvhaddw_d_w(src3, src3); \ ++ LASX_PCKEV_W_2_128SV(src1, src0, src3, src2, src0, src1); \ ++ src0 = __lasx_xvhaddw_d_w(src0, src0); \ ++ src1 = __lasx_xvhaddw_d_w(src1, src1); \ ++ LASX_PCKEV_W_128SV(src1, src0, src0); \ ++ LASX_SRAI_W(src0, src0, _sh); \ ++ src0 = __lasx_xvmin_w(src0, vmax); \ ++ src0 = __lasx_xvperm_w(src0, shuf); \ ++} ++ ++#define SCALE_8_4(_sh) \ ++{ \ ++ src0 = __lasx_xvldrepl_d(src + filterPos[0], 0); \ ++ src1 = __lasx_xvldrepl_d(src + filterPos[1], 0); \ ++ src2 = __lasx_xvldrepl_d(src + filterPos[2], 0); \ ++ src3 = __lasx_xvldrepl_d(src + filterPos[3], 0); \ ++ LASX_LD_2(filter, 16, filter0, filter1); \ ++ LASX_PCKEV_D_2_128SV(src1, src0, src3, src2, src0, src2); \ ++ LASX_UNPCK_L_HU_BU_2(src0, src2, src0, src2); \ ++ LASX_DP2_W_H_2(filter0, src0, filter1, src2, src0, src1); \ ++ src0 = __lasx_xvhaddw_d_w(src0, src0); \ ++ src1 = __lasx_xvhaddw_d_w(src1, src1); \ ++ LASX_PCKEV_W_128SV(src1, src0, src0); \ ++ src0 = __lasx_xvhaddw_d_w(src0, src0); \ ++ LASX_PCKEV_W_128SV(src0, src0, src0); \ ++ LASX_SRAI_W(src0, src0, _sh); \ ++ src0 = __lasx_xvmin_w(src0, vmax); \ ++ src0 = __lasx_xvperm_w(src0, shuf); \ ++} ++ ++#define SCALE_8_2(_sh) \ ++{ \ ++ src0 = __lasx_xvldrepl_d(src + filterPos[0], 0); \ ++ src1 = __lasx_xvldrepl_d(src + filterPos[1], 0); \ ++ filter0 = LASX_LD(filter); \ ++ LASX_PCKEV_D_128SV(src1, src0, src0); \ ++ LASX_UNPCK_L_HU_BU(src0, src0); \ ++ LASX_DP2_W_H(filter0, src0, src0); \ ++ src0 = __lasx_xvhaddw_d_w(src0, src0); \ ++ src0 = __lasx_xvhaddw_q_d(src0, src0); \ ++ LASX_SRAI_W(src0, src0, _sh); \ ++ src0 = __lasx_xvmin_w(src0, vmax); \ ++ dst[0] = __lasx_xvpickve2gr_w(src0, 0); \ ++ dst[1] = __lasx_xvpickve2gr_w(src0, 4); \ ++ filterPos += 2; \ ++ filter += 16; \ ++ dst += 2; \ ++} ++ ++#define SCALE_4_16(_sh) \ ++{ \ ++ src0 = __lasx_xvldrepl_w(src + filterPos[0], 0); \ ++ src1 = __lasx_xvldrepl_w(src + filterPos[1], 0); \ ++ src2 = __lasx_xvldrepl_w(src + filterPos[2], 0); \ ++ src3 = __lasx_xvldrepl_w(src + filterPos[3], 0); \ ++ src4 = __lasx_xvldrepl_w(src + filterPos[4], 0); \ ++ src5 = __lasx_xvldrepl_w(src + filterPos[5], 0); \ ++ src6 = __lasx_xvldrepl_w(src + filterPos[6], 0); \ ++ src7 = __lasx_xvldrepl_w(src + filterPos[7], 0); \ ++ src8 = __lasx_xvldrepl_w(src + filterPos[8], 0); \ ++ src9 = __lasx_xvldrepl_w(src + filterPos[9], 0); \ ++ src10 = __lasx_xvldrepl_w(src + filterPos[10], 0); \ ++ src11 = __lasx_xvldrepl_w(src + filterPos[11], 0); \ ++ src12 = __lasx_xvldrepl_w(src + filterPos[12], 0); \ ++ src13 = __lasx_xvldrepl_w(src + filterPos[13], 0); \ ++ src14 = __lasx_xvldrepl_w(src + filterPos[14], 0); \ ++ src15 = __lasx_xvldrepl_w(src + filterPos[15], 0); \ ++ LASX_LD_4(filter, 16, filter0, filter1, filter2, filter3); \ ++ LASX_ILVL_W_4_128SV(src1, src0, src3, src2, src5, src4, \ ++ src7, src6, src0, src2, src4, src6); \ ++ LASX_ILVL_W_4_128SV(src9, src8, src11, src10, src13, src12, \ ++ src15, src14, src8, src10, src12, src14); \ ++ LASX_ILVL_D_4_128SV(src2, src0, src6, src4, src10, src8, \ ++ src14, src12, src0, src1, src2, src3); \ ++ LASX_UNPCK_L_HU_BU_4(src0, src1, src2, src3, \ ++ src0, src1, src2, src3); \ ++ LASX_DP2_W_H_4(filter0, src0, filter1, src1, filter2, src2, \ ++ filter3, src3, src0, src1, src2, src3); \ ++ src0 = __lasx_xvhaddw_d_w(src0, src0); \ ++ src1 = __lasx_xvhaddw_d_w(src1, src1); \ ++ src2 = __lasx_xvhaddw_d_w(src2, src2); \ ++ src3 = __lasx_xvhaddw_d_w(src3, src3); \ ++ LASX_PCKEV_W_2_128SV(src1, src0, src3, src2, src0, src1); \ ++ LASX_SRAI_W_2(src0, src1, src0, src1, _sh); \ ++ src0 = __lasx_xvmin_w(src0, vmax); \ ++ src1 = __lasx_xvmin_w(src1, vmax); \ ++ LASX_PCKEV_H_128SV(src1, src0, src0); \ ++ src0 = __lasx_xvperm_w(src0, shuf); \ ++ LASX_ST(src0, dst); \ ++ filterPos += 16; \ ++ filter += 64; \ ++ dst += 16; \ ++} ++ ++#define SCALE_4_8(_sh) \ ++{ \ ++ src0 = __lasx_xvldrepl_w(src + filterPos[0], 0); \ ++ src1 = __lasx_xvldrepl_w(src + filterPos[1], 0); \ ++ src2 = __lasx_xvldrepl_w(src + filterPos[2], 0); \ ++ src3 = __lasx_xvldrepl_w(src + filterPos[3], 0); \ ++ src4 = __lasx_xvldrepl_w(src + filterPos[4], 0); \ ++ src5 = __lasx_xvldrepl_w(src + filterPos[5], 0); \ ++ src6 = __lasx_xvldrepl_w(src + filterPos[6], 0); \ ++ src7 = __lasx_xvldrepl_w(src + filterPos[7], 0); \ ++ LASX_LD_2(filter, 16, filter0, filter1); \ ++ LASX_ILVL_W_4_128SV(src1, src0, src3, src2, src5, src4, \ ++ src7, src6, src0, src2, src4, src6); \ ++ LASX_ILVL_D_2_128SV(src2, src0, src6, src4, src0, src1); \ ++ LASX_UNPCK_L_HU_BU_2(src0, src1, src0, src1); \ ++ LASX_DP2_W_H_2(filter0, src0, filter1, src1, src0, src1); \ ++ src0 = __lasx_xvhaddw_d_w(src0, src0); \ ++ src1 = __lasx_xvhaddw_d_w(src1, src1); \ ++ LASX_PCKEV_W_128SV(src1, src0, src0); \ ++ LASX_SRAI_W(src0, src0, _sh); \ ++ src0 = __lasx_xvmin_w(src0, vmax); \ ++} ++ ++#define SCALE_4_4(_sh) \ ++{ \ ++ src0 = __lasx_xvldrepl_w(src + filterPos[0], 0); \ ++ src1 = __lasx_xvldrepl_w(src + filterPos[1], 0); \ ++ src2 = __lasx_xvldrepl_w(src + filterPos[2], 0); \ ++ src3 = __lasx_xvldrepl_w(src + filterPos[3], 0); \ ++ filter0 = LASX_LD(filter); \ ++ LASX_ILVL_W_2_128SV(src1, src0, src3, src2, src0, src1); \ ++ LASX_ILVL_D_128SV(src1, src0, src0); \ ++ LASX_UNPCK_L_HU_BU(src0, src0); \ ++ LASX_DP2_W_H(filter0, src0, src0); \ ++ src0 = __lasx_xvhaddw_d_w(src0, src0); \ ++ LASX_SRAI_W(src0, src0, _sh); \ ++ src0 = __lasx_xvmin_w(src0, vmax); \ ++ LASX_PCKEV_W(src0, src0, src0); \ ++} ++ ++#define SCALE_4_2(_sh) \ ++{ \ ++ src0 = __lasx_xvldrepl_w(src + filterPos[0], 0); \ ++ src1 = __lasx_xvldrepl_w(src + filterPos[1], 0); \ ++ filter0 = LASX_LD(filter); \ ++ LASX_ILVL_W_128SV(src1, src0, src0); \ ++ LASX_UNPCK_L_HU_BU(src0, src0); \ ++ LASX_DP2_W_H(filter0, src0, src0); \ ++ src0 = __lasx_xvhaddw_d_w(src0, src0); \ ++ LASX_SRAI_W(src0, src0, _sh); \ ++ src0 = __lasx_xvmin_w(src0, vmax); \ ++ dst[0] = __lasx_xvpickve2gr_w(src0, 0); \ ++ dst[1] = __lasx_xvpickve2gr_w(src0, 2); \ ++ filterPos += 2; \ ++ filter += 8; \ ++ dst += 2; \ ++} ++ ++#define SCALE_16 \ ++{ \ ++ src0 = __lasx_xvldrepl_d((srcPos1 + j), 0); \ ++ src1 = __lasx_xvldrepl_d((srcPos2 + j), 0); \ ++ src2 = __lasx_xvldrepl_d((srcPos3 + j), 0); \ ++ src3 = __lasx_xvldrepl_d((srcPos4 + j), 0); \ ++ filter0 = LASX_LD(filterStart1 + j); \ ++ filter1 = LASX_LD(filterStart2 + j); \ ++ filter2 = LASX_LD(filterStart3 + j); \ ++ filter3 = LASX_LD(filterStart4 + j); \ ++ src0 = __lasx_xvpermi_q(src0, src1, 0x02); \ ++ src1 = __lasx_xvpermi_q(src2, src3, 0x02); \ ++ filter0 = __lasx_xvpermi_q(filter0, filter1, 0x02); \ ++ filter1 = __lasx_xvpermi_q(filter2, filter3, 0x02); \ ++ LASX_ILVL_B_2_128SV(zero, src0, zero, src1, src0, src1); \ ++ LASX_DP2_W_H(filter0, src0, out0); \ ++ LASX_DP2_W_H(filter1, src1, out1); \ ++ src0 = __lasx_xvhaddw_d_w(out0, out0); \ ++ src1 = __lasx_xvhaddw_d_w(out1, out1); \ ++ out0 = __lasx_xvpackev_d(src1, src0); \ ++ out1 = __lasx_xvpackod_d(src1, src0); \ ++ out0 = __lasx_xvadd_w(out0, out1); \ ++ out = __lasx_xvadd_w(out, out0); \ ++} ++ ++void ff_hscale_8_to_15_lasx(SwsContext *c, int16_t *dst, int dstW, ++ const uint8_t *src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize) ++{ ++ int i; ++ int max = (1 << 15) - 1; ++ ++ if (filterSize == 8) { ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m256i src8, src9, src10, src11, src12, src13, src14, src15; ++ __m256i filter0, filter1, filter2, filter3; ++ __m256i filter4, filter5, filter6, filter7; ++ __m256i vmax = __lasx_xvreplgr2vr_w(max); ++ __m256i shuf = {0x0000000400000000, 0x0000000500000001, 0x0000000600000002, 0x0000000700000003}; ++ int len = dstW >> 4; ++ int res = dstW & 15; ++ while (len--) { ++ SCALE_8_16(7); ++ } ++ if (res & 8) { ++ SCALE_8_8(7); ++ LASX_PCKEV_H_128SV(src0, src0, src0); ++ LASX_ST_D_2(src0, 0, 2, dst, 4); ++ filterPos += 8; ++ filter += 64; ++ dst += 8; ++ } ++ if (res & 4) { ++ SCALE_8_4(7); ++ LASX_PCKEV_H_128SV(src0, src0, src0); ++ LASX_ST_D(src0, 0, dst); ++ filterPos += 4; ++ filter += 32; ++ dst += 4; ++ } ++ if (res & 2) { ++ SCALE_8_2(7); ++ } ++ if (res & 1) { ++ int val = 0; ++ src0 = __lasx_xvldrepl_d(src + filterPos[0], 0); ++ filter0 = LASX_LD(filter); ++ LASX_UNPCK_L_HU_BU(src0, src0); ++ LASX_DP2_W_H(filter0, src0, src0); ++ src0 = __lasx_xvhaddw_d_w(src0, src0); ++ src0 = __lasx_xvhaddw_q_d(src0, src0); ++ val = __lasx_xvpickve2gr_w(src0, 0); ++ dst[0] = FFMIN(val >> 7, max); ++ } ++ } else if (filterSize == 4) { ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m256i src8, src9, src10, src11, src12, src13, src14, src15; ++ __m256i filter0, filter1, filter2, filter3; ++ __m256i vmax = __lasx_xvreplgr2vr_w(max); ++ __m256i shuf = {0x0000000400000000, 0x0000000500000001, 0x0000000600000002, 0x0000000700000003}; ++ int len = dstW >> 4; ++ int res = dstW & 15; ++ while (len--) { ++ SCALE_4_16(7); ++ } ++ if (res & 8) { ++ SCALE_4_8(7); ++ LASX_PCKEV_H_128SV(src1, src0, src0); ++ src0 = __lasx_xvperm_w(src0, shuf); ++ LASX_ST_D_2(src0, 0, 1, dst, 4); ++ filterPos += 8; ++ filter += 32; ++ dst += 8; ++ } ++ if (res & 4) { ++ SCALE_4_4(7); ++ LASX_PCKEV_H_128SV(src0, src0, src0); ++ LASX_ST_D(src0, 0, dst); ++ filterPos += 4; ++ filter += 16; ++ dst += 4; ++ } ++ if (res & 2) { ++ SCALE_4_2(7); ++ } ++ if (res & 1) { ++ int val = 0; ++ const uint8_t *srcPos = src + filterPos[0]; ++ ++ for (int j = 0; j < filterSize; j++) { ++ val += ((int)srcPos[j]) * filter[j]; ++ } ++ dst[0] = FFMIN(val >> 7, max); ++ } ++ } else if (filterSize > 8) { ++ int filterlen = filterSize - 7; ++ int len = dstW >> 2; ++ int res = dstW & 3; ++ __m256i zero = __lasx_xvldi(0); ++ ++ while (len--) { ++ __m256i src0, src1, src2, src3; ++ __m256i filter0, filter1, filter2, filter3, out0, out1; ++ __m256i out = zero; ++ const uint8_t *srcPos1 = src + filterPos[0]; ++ const uint8_t *srcPos2 = src + filterPos[1]; ++ const uint8_t *srcPos3 = src + filterPos[2]; ++ const uint8_t *srcPos4 = src + filterPos[3]; ++ const int16_t *filterStart1 = filter; ++ const int16_t *filterStart2 = filterStart1 + filterSize; ++ const int16_t *filterStart3 = filterStart2 + filterSize; ++ const int16_t *filterStart4 = filterStart3 + filterSize; ++ int j, val1 = 0, val2 = 0, val3 = 0, val4 = 0; ++ ++ for (j = 0; j < filterlen; j += 8) { ++ SCALE_16 ++ } ++ val1 = __lasx_xvpickve2gr_w(out, 0); ++ val2 = __lasx_xvpickve2gr_w(out, 4); ++ val3 = __lasx_xvpickve2gr_w(out, 2); ++ val4 = __lasx_xvpickve2gr_w(out, 6); ++ for (; j < filterSize; j++) { ++ val1 += ((int)srcPos1[j]) * filterStart1[j]; ++ val2 += ((int)srcPos2[j]) * filterStart2[j]; ++ val3 += ((int)srcPos3[j]) * filterStart3[j]; ++ val4 += ((int)srcPos4[j]) * filterStart4[j]; ++ } ++ dst[0] = FFMIN(val1 >> 7, max); ++ dst[1] = FFMIN(val2 >> 7, max); ++ dst[2] = FFMIN(val3 >> 7, max); ++ dst[3] = FFMIN(val4 >> 7, max); ++ dst += 4; ++ filterPos += 4; ++ filter = filterStart4 + filterSize; ++ } ++ for(i = 0; i < res; i++) { ++ int j, val = 0; ++ const uint8_t *srcPos = src + filterPos[i]; ++ __m256i src1, filter0, out0; ++ ++ for (j = 0; j < filterlen; j += 8) { ++ src1 = __lasx_xvldrepl_d((srcPos + j), 0); ++ filter0 = LASX_LD(filter + j); ++ LASX_ILVL_B_128SV(zero, src1, src1); ++ LASX_DP2_W_H(filter0, src1, out0); ++ out0 = __lasx_xvhaddw_d_w(out0, out0); ++ out0 = __lasx_xvhaddw_q_d(out0, out0); ++ val += __lasx_xvpickve2gr_w(out0, 0); ++ } ++ for (; j < filterSize; j++) { ++ val += ((int)srcPos[j]) * filter[j]; ++ } ++ dst[i] = FFMIN(val >> 7, max); ++ filter += filterSize; ++ } ++ } else { ++ for (i = 0; i < dstW; i++) { ++ int val = 0; ++ const uint8_t *srcPos = src + filterPos[i]; ++ ++ for (int j = 0; j < filterSize; j++) { ++ val += ((int)srcPos[j]) * filter[j]; ++ } ++ dst[i] = FFMIN(val >> 7, max); ++ filter += filterSize; ++ } ++ } ++} ++ ++void ff_hscale_8_to_19_lasx(SwsContext *c, int16_t *_dst, int dstW, ++ const uint8_t *src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize) ++{ ++ int i; ++ int max = (1 << 19) - 1; ++ int32_t *dst = (int32_t *) _dst; ++ ++ if (filterSize == 8) { ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m256i filter0, filter1, filter2, filter3; ++ __m256i vmax = __lasx_xvreplgr2vr_w(max); ++ __m256i shuf = {0x0000000400000000, 0x0000000500000001, 0x0000000600000002, 0x0000000700000003}; ++ int len = dstW >> 3; ++ int res = dstW & 7; ++ while (len--) { ++ SCALE_8_8(3); ++ LASX_ST(src0, dst); ++ filterPos += 8; ++ filter += 64; ++ dst += 8; ++ } ++ if (res & 4) { ++ SCALE_8_4(3); ++ LASX_ST_D_2(src0, 0, 1, dst, 4); ++ filterPos += 4; ++ filter += 32; ++ dst += 4; ++ } ++ if (res & 2) { ++ SCALE_8_2(3); ++ } ++ if (res & 1) { ++ int val = 0; ++ __m256i src0, filter0, out0; ++ ++ src0 = __lasx_xvldrepl_d(src + filterPos[0], 0); ++ filter0 = LASX_LD(filter); ++ LASX_UNPCK_L_HU_BU(src0, src0); ++ LASX_DP2_W_H(filter0, src0, out0); ++ out0 = __lasx_xvhaddw_d_w(out0, out0); ++ out0 = __lasx_xvhaddw_q_d(out0, out0); ++ val = __lasx_xvpickve2gr_w(out0, 0); ++ dst[0] = FFMIN(val >> 3, max); ++ } ++ } else if (filterSize == 4) { ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m256i filter0, filter1; ++ __m256i vmax = __lasx_xvreplgr2vr_w(max); ++ __m256i shuf = {0x0000000100000000, 0x0000000500000004, 0x0000000300000002, 0x0000000700000006}; ++ int len = dstW >> 3; ++ int res = dstW & 7; ++ while (len--) { ++ SCALE_4_8(3); ++ src0 = __lasx_xvperm_w(src0, shuf); ++ LASX_ST(src0, dst); ++ filterPos += 8; ++ filter += 32; ++ dst += 8; ++ } ++ if (res & 4) { ++ SCALE_4_4(3); ++ LASX_ST_D_2(src0, 0, 2, dst, 4); ++ filterPos += 4; ++ filter += 16; ++ dst += 4; ++ } ++ if (res & 2) { ++ SCALE_4_2(3); ++ } ++ if (res & 1) { ++ int val = 0; ++ const uint8_t *srcPos = src + filterPos[0]; ++ ++ for (int j = 0; j < filterSize; j++) { ++ val += ((int)srcPos[j]) * filter[j]; ++ } ++ dst[0] = FFMIN(val >> 3, max); ++ } ++ } else if (filterSize > 8) { ++ int len = dstW >> 2; ++ int res = dstW & 3; ++ int filterlen = filterSize - 7; ++ __m256i zero = __lasx_xvldi(0); ++ ++ while (len--) { ++ __m256i src0, src1, src2, src3; ++ __m256i filter0, filter1, filter2, filter3, out0, out1; ++ __m256i out = zero; ++ const uint8_t *srcPos1 = src + filterPos[0]; ++ const uint8_t *srcPos2 = src + filterPos[1]; ++ const uint8_t *srcPos3 = src + filterPos[2]; ++ const uint8_t *srcPos4 = src + filterPos[3]; ++ const int16_t *filterStart1 = filter; ++ const int16_t *filterStart2 = filterStart1 + filterSize; ++ const int16_t *filterStart3 = filterStart2 + filterSize; ++ const int16_t *filterStart4 = filterStart3 + filterSize; ++ int j, val1 = 0, val2 = 0, val3 = 0, val4 = 0; ++ ++ for (j = 0; j < filterlen; j += 8) { ++ SCALE_16 ++ } ++ val1 = __lasx_xvpickve2gr_w(out, 0); ++ val2 = __lasx_xvpickve2gr_w(out, 4); ++ val3 = __lasx_xvpickve2gr_w(out, 2); ++ val4 = __lasx_xvpickve2gr_w(out, 6); ++ for (; j < filterSize; j++) { ++ val1 += ((int)srcPos1[j]) * filterStart1[j]; ++ val2 += ((int)srcPos2[j]) * filterStart2[j]; ++ val3 += ((int)srcPos3[j]) * filterStart3[j]; ++ val4 += ((int)srcPos4[j]) * filterStart4[j]; ++ } ++ dst[0] = FFMIN(val1 >> 3, max); ++ dst[1] = FFMIN(val2 >> 3, max); ++ dst[2] = FFMIN(val3 >> 3, max); ++ dst[3] = FFMIN(val4 >> 3, max); ++ dst += 4; ++ filterPos += 4; ++ filter = filterStart4 + filterSize; ++ } ++ for (i = 0; i < res; i++) { ++ int j, val = 0; ++ const uint8_t *srcPos = src + filterPos[i]; ++ __m256i src1, filter0, out0; ++ ++ for (j = 0; j < filterlen; j += 8) { ++ src1 = __lasx_xvldrepl_d((srcPos + j), 0); ++ filter0 = LASX_LD(filter + j); ++ LASX_ILVL_B_128SV(zero, src1, src1); ++ LASX_DP2_W_H(filter0, src1, out0); ++ out0 = __lasx_xvhaddw_d_w(out0, out0); ++ out0 = __lasx_xvhaddw_q_d(out0, out0); ++ val += __lasx_xvpickve2gr_w(out0, 0); ++ } ++ for (; j < filterSize; j++) { ++ val += ((int)srcPos[j]) * filter[j]; ++ } ++ dst[i] = FFMIN(val >> 3, max); ++ filter += filterSize; ++ } ++ } else { ++ for (i = 0; i < dstW; i++) { ++ int val = 0; ++ const uint8_t *srcPos = src + filterPos[i]; ++ ++ for (int j = 0; j < filterSize; j++) { ++ val += ((int)srcPos[j]) * filter[j]; ++ } ++ dst[i] = FFMIN(val >> 3, max); ++ filter += filterSize; ++ } ++ } ++} ++ ++#undef SCALE_16 ++ ++#define SCALE_8 \ ++{ \ ++ int val1, val2, val3, val4; \ ++ __m256i src0, src1, src2, src3, filter0, filter1, out0, out1; \ ++ src0 = LASX_LD(src + filterPos[0]); \ ++ src1 = LASX_LD(src + filterPos[1]); \ ++ src2 = LASX_LD(src + filterPos[2]); \ ++ src3 = LASX_LD(src + filterPos[3]); \ ++ filter0 = LASX_LD(filter); \ ++ filter1 = LASX_LD(filter + 16); \ ++ src0 = __lasx_xvpermi_q(src0, src1, 0x02); \ ++ src2 = __lasx_xvpermi_q(src2, src3, 0x02); \ ++ LASX_DP2_W_HU_H_2(src0, filter0, src2, filter1, out0, out1); \ ++ src0 = __lasx_xvhaddw_d_w(out0, out0); \ ++ src1 = __lasx_xvhaddw_d_w(out1, out1); \ ++ out0 = __lasx_xvpackev_d(src1, src0); \ ++ out1 = __lasx_xvpackod_d(src1, src0); \ ++ out0 = __lasx_xvadd_w(out0, out1); \ ++ out0 = __lasx_xvsra_w(out0, shift); \ ++ val1 = __lasx_xvpickve2gr_w(out0, 0); \ ++ val2 = __lasx_xvpickve2gr_w(out0, 4); \ ++ val3 = __lasx_xvpickve2gr_w(out0, 2); \ ++ val4 = __lasx_xvpickve2gr_w(out0, 6); \ ++ dst[0] = FFMIN(val1, max); \ ++ dst[1] = FFMIN(val2, max); \ ++ dst[2] = FFMIN(val3, max); \ ++ dst[3] = FFMIN(val4, max); \ ++ filterPos += 4; \ ++ filter += 32; \ ++ dst += 4; \ ++} ++ ++#define SCALE_16 \ ++{ \ ++ src0 = LASX_LD(srcPos1 + j); \ ++ src1 = LASX_LD(srcPos2 + j); \ ++ src2 = LASX_LD(srcPos3 + j); \ ++ src3 = LASX_LD(srcPos4 + j); \ ++ filter0 = LASX_LD(filterStart1 + j); \ ++ filter1 = LASX_LD(filterStart2 + j); \ ++ filter2 = LASX_LD(filterStart3 + j); \ ++ filter3 = LASX_LD(filterStart4 + j); \ ++ src0 = __lasx_xvpermi_q(src0, src1, 0x02); \ ++ src1 = __lasx_xvpermi_q(src2, src3, 0x02); \ ++ filter0 = __lasx_xvpermi_q(filter0, filter1, 0x02); \ ++ filter1 = __lasx_xvpermi_q(filter2, filter3, 0x02); \ ++ LASX_DP2_W_HU_H_2(src0, filter0, src1, filter1, out0, out1); \ ++ src0 = __lasx_xvhaddw_d_w(out0, out0); \ ++ src1 = __lasx_xvhaddw_d_w(out1, out1); \ ++ out0 = __lasx_xvpackev_d(src1, src0); \ ++ out1 = __lasx_xvpackod_d(src1, src0); \ ++ out0 = __lasx_xvadd_w(out0, out1); \ ++ out = __lasx_xvadd_w(out, out0); \ ++} ++ ++void ff_hscale_16_to_15_lasx(SwsContext *c, int16_t *dst, int dstW, ++ const uint8_t *_src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize) ++{ ++ const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(c->srcFormat); ++ int i; ++ const uint16_t *src = (const uint16_t *) _src; ++ int sh = desc->comp[0].depth - 1; ++ int max = (1 << 15) - 1; ++ int len = dstW >> 2; ++ int res = dstW & 3; ++ __m256i shift; ++ __m256i zero = __lasx_xvldi(0); ++ ++ if (sh < 15) { ++ sh = isAnyRGB(c->srcFormat) || c->srcFormat==AV_PIX_FMT_PAL8 ? 13 : ++ (desc->comp[0].depth - 1); ++ } else if (desc->flags && AV_PIX_FMT_FLAG_FLOAT) { ++ sh = 15; ++ } ++ shift = __lasx_xvreplgr2vr_w(sh); ++ ++ if (filterSize == 8) { ++ for (i = 0; i < len; i++) { ++ SCALE_8 ++ } ++ for (i = 0; i < res; i++) { ++ int val = 0; ++ __m256i src0, filter0, out0; ++ ++ src0 = LASX_LD(src + filterPos[i]); ++ filter0 = LASX_LD(filter); ++ LASX_DP2_W_HU_H(src0, filter0, out0); ++ out0 = __lasx_xvhaddw_d_w(out0, out0); ++ out0 = __lasx_xvhaddw_q_d(out0, out0); ++ val = __lasx_xvpickve2gr_w(out0, 0); ++ dst[i] = FFMIN(val >> sh, max); ++ filter += 8; ++ } ++ } else if (filterSize == 4) { ++ for (i = 0; i < len; i++) { ++ __m256i src1, src2, src3, src4, src0, filter0, out0; ++ ++ src1 = __lasx_xvldrepl_d(src + filterPos[0], 0); ++ src2 = __lasx_xvldrepl_d(src + filterPos[1], 0); ++ src3 = __lasx_xvldrepl_d(src + filterPos[2], 0); ++ src4 = __lasx_xvldrepl_d(src + filterPos[3], 0); ++ filter0 = LASX_LD(filter); ++ src1 = __lasx_xvextrins_d(src1, src2, 0x10); ++ src3 = __lasx_xvextrins_d(src3, src4, 0x10); ++ src0 = __lasx_xvpermi_q(src1, src3, 0x02); ++ LASX_DP2_W_HU_H(src0, filter0, out0); ++ out0 = __lasx_xvhaddw_d_w(out0, out0); ++ out0 = __lasx_xvsra_w(out0, shift); ++ dst[0] = FFMIN((__lasx_xvpickve2gr_w(out0, 0)), max); ++ dst[1] = FFMIN((__lasx_xvpickve2gr_w(out0, 2)), max); ++ dst[2] = FFMIN((__lasx_xvpickve2gr_w(out0, 4)), max); ++ dst[3] = FFMIN((__lasx_xvpickve2gr_w(out0, 6)), max); ++ dst += 4; ++ filterPos += 4; ++ filter += 16; ++ } ++ for (i = 0; i < res; i++) { ++ int val = 0; ++ const uint16_t *srcPos = src + filterPos[i]; ++ ++ for (int j = 0; j < filterSize; j++) { ++ val += ((int)srcPos[j]) * filter[j]; ++ } ++ dst[i] = FFMIN(val >> sh, max); ++ filter += 4; ++ } ++ } else if (filterSize > 8) { ++ int filterlen = filterSize - 7; ++ ++ for (i = 0; i < len; i++) { ++ __m256i src0, src1, src2, src3; ++ __m256i filter0, filter1, filter2, filter3, out0, out1; ++ __m256i out = zero; ++ const uint16_t *srcPos1 = src + filterPos[0]; ++ const uint16_t *srcPos2 = src + filterPos[1]; ++ const uint16_t *srcPos3 = src + filterPos[2]; ++ const uint16_t *srcPos4 = src + filterPos[3]; ++ const int16_t *filterStart1 = filter; ++ const int16_t *filterStart2 = filterStart1 + filterSize; ++ const int16_t *filterStart3 = filterStart2 + filterSize; ++ const int16_t *filterStart4 = filterStart3 + filterSize; ++ int j, val1 = 0, val2 = 0, val3 = 0, val4 = 0; ++ ++ for (j = 0; j < filterlen; j += 8) { ++ SCALE_16 ++ } ++ val1 = __lasx_xvpickve2gr_w(out, 0); ++ val2 = __lasx_xvpickve2gr_w(out, 4); ++ val3 = __lasx_xvpickve2gr_w(out, 2); ++ val4 = __lasx_xvpickve2gr_w(out, 6); ++ for (; j < filterSize; j++) { ++ val1 += ((int)srcPos1[j]) * filterStart1[j]; ++ val2 += ((int)srcPos2[j]) * filterStart2[j]; ++ val3 += ((int)srcPos3[j]) * filterStart3[j]; ++ val4 += ((int)srcPos4[j]) * filterStart4[j]; ++ } ++ dst[0] = FFMIN(val1 >> sh, max); ++ dst[1] = FFMIN(val2 >> sh, max); ++ dst[2] = FFMIN(val3 >> sh, max); ++ dst[3] = FFMIN(val4 >> sh, max); ++ dst += 4; ++ filterPos += 4; ++ filter = filterStart4 + filterSize; ++ } ++ for (i = 0; i < res; i++) { ++ int j, val = 0; ++ const uint16_t *srcPos = src + filterPos[i]; ++ __m256i src0, filter0, out0; ++ ++ for (j = 0; j < filterlen; j += 8) { ++ src0 = LASX_LD(srcPos + j); ++ filter0 = LASX_LD(filter + j); ++ LASX_DP2_W_HU_H(src0, filter0, out0); ++ out0 = __lasx_xvhaddw_d_w(out0, out0); ++ out0 = __lasx_xvhaddw_q_d(out0, out0); ++ val += __lasx_xvpickve2gr_w(out0, 0); ++ } ++ for (; j < filterSize; j++) { ++ val += ((int)srcPos[j]) * filter[j]; ++ } ++ dst[i] = FFMIN(val >> sh, max); ++ filter += filterSize; ++ } ++ } else { ++ for (i = 0; i < dstW; i++) { ++ int val = 0; ++ const uint16_t *srcPos = src + filterPos[i]; ++ ++ for (int j = 0; j < filterSize; j++) { ++ val += ((int)srcPos[j]) * filter[j]; ++ } ++ dst[i] = FFMIN(val >> sh, max); ++ filter += filterSize; ++ } ++ } ++} ++ ++void ff_hscale_16_to_19_lasx(SwsContext *c, int16_t *_dst, int dstW, ++ const uint8_t *_src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize) ++{ ++ const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(c->srcFormat); ++ int i; ++ int32_t *dst = (int32_t *) _dst; ++ const uint16_t *src = (const uint16_t *) _src; ++ int sh = desc->comp[0].depth - 5; ++ int max = (1 << 19) - 1; ++ int len = dstW >> 2; ++ int res = dstW & 3; ++ __m256i shift; ++ __m256i zero = __lasx_xvldi(0); ++ ++ if ((isAnyRGB(c->srcFormat) || c->srcFormat == AV_PIX_FMT_PAL8) ++ && desc->comp[0].depth<16) { ++ sh = 9; ++ } else if (desc->flags & AV_PIX_FMT_FLAG_FLOAT) { ++ sh = 11; ++ } ++ shift = __lasx_xvreplgr2vr_w(sh); ++ ++ if (filterSize == 8) { ++ for (i = 0; i < len; i++) { ++ SCALE_8 ++ } ++ for (i = 0; i < res; i++) { ++ int val = 0; ++ __m256i src0, filter0, out0; ++ ++ src0 = LASX_LD(src + filterPos[i]); ++ filter0 = LASX_LD(filter); ++ LASX_DP2_W_HU_H(src0, filter0, out0); ++ out0 = __lasx_xvhaddw_d_w(out0, out0); ++ out0 = __lasx_xvhaddw_q_d(out0, out0); ++ val = __lasx_xvpickve2gr_w(out0, 0); ++ dst[i] = FFMIN(val >> sh, max); ++ filter += 8; ++ } ++ } else if (filterSize == 4) { ++ for (i = 0; i < len; i++) { ++ __m256i src1, src2, src3, src4, src0, filter0, out0; ++ ++ src1 = __lasx_xvldrepl_d(src + filterPos[0], 0); ++ src2 = __lasx_xvldrepl_d(src + filterPos[1], 0); ++ src3 = __lasx_xvldrepl_d(src + filterPos[2], 0); ++ src4 = __lasx_xvldrepl_d(src + filterPos[3], 0); ++ filter0 = LASX_LD(filter); ++ src1 = __lasx_xvextrins_d(src1, src2, 0x10); ++ src3 = __lasx_xvextrins_d(src3, src4, 0x10); ++ src0 = __lasx_xvpermi_q(src1, src3, 0x02); ++ LASX_DP2_W_HU_H(src0, filter0, out0); ++ out0 = __lasx_xvhaddw_d_w(out0, out0); ++ out0 = __lasx_xvsra_w(out0, shift); ++ dst[0] = FFMIN((__lasx_xvpickve2gr_w(out0, 0)), max); ++ dst[1] = FFMIN((__lasx_xvpickve2gr_w(out0, 2)), max); ++ dst[2] = FFMIN((__lasx_xvpickve2gr_w(out0, 4)), max); ++ dst[3] = FFMIN((__lasx_xvpickve2gr_w(out0, 6)), max); ++ dst += 4; ++ filterPos += 4; ++ filter += 16; ++ } ++ for (i = 0; i < res; i++) { ++ int val = 0; ++ const uint16_t *srcPos = src + filterPos[i]; ++ ++ for (int j = 0; j < filterSize; j++) { ++ val += ((int)srcPos[j]) * filter[j]; ++ } ++ dst[i] = FFMIN(val >> sh, max); ++ filter += 4; ++ } ++ } else if (filterSize > 8) { ++ int filterlen = filterSize - 7; ++ ++ for (i = 0; i < len; i ++) { ++ __m256i src0, src1, src2, src3; ++ __m256i filter0, filter1, filter2, filter3, out0, out1; ++ __m256i out = zero; ++ const uint16_t *srcPos1 = src + filterPos[0]; ++ const uint16_t *srcPos2 = src + filterPos[1]; ++ const uint16_t *srcPos3 = src + filterPos[2]; ++ const uint16_t *srcPos4 = src + filterPos[3]; ++ const int16_t *filterStart1 = filter; ++ const int16_t *filterStart2 = filterStart1 + filterSize; ++ const int16_t *filterStart3 = filterStart2 + filterSize; ++ const int16_t *filterStart4 = filterStart3 + filterSize; ++ int j, val1 = 0, val2 = 0, val3 = 0, val4 = 0; ++ ++ for (j = 0; j < filterlen; j += 8) { ++ SCALE_16 ++ } ++ val1 = __lasx_xvpickve2gr_w(out, 0); ++ val2 = __lasx_xvpickve2gr_w(out, 4); ++ val3 = __lasx_xvpickve2gr_w(out, 2); ++ val4 = __lasx_xvpickve2gr_w(out, 6); ++ for (; j < filterSize; j++) { ++ val1 += ((int)srcPos1[j]) * filterStart1[j]; ++ val2 += ((int)srcPos2[j]) * filterStart2[j]; ++ val3 += ((int)srcPos3[j]) * filterStart3[j]; ++ val4 += ((int)srcPos4[j]) * filterStart4[j]; ++ } ++ dst[0] = FFMIN(val1 >> sh, max); ++ dst[1] = FFMIN(val2 >> sh, max); ++ dst[2] = FFMIN(val3 >> sh, max); ++ dst[3] = FFMIN(val4 >> sh, max); ++ dst += 4; ++ filterPos += 4; ++ filter = filterStart4 + filterSize; ++ } ++ for (i = 0; i < res; i++) { ++ int j, val = 0; ++ const uint16_t *srcPos = src + filterPos[i]; ++ __m256i src0, filter0, out0; ++ ++ for (j = 0; j < filterlen; j += 8) { ++ src0 = LASX_LD(srcPos + j); ++ filter0 = LASX_LD(filter + j); ++ LASX_DP2_W_HU_H(src0, filter0, out0); ++ out0 = __lasx_xvhaddw_d_w(out0, out0); ++ out0 = __lasx_xvhaddw_q_d(out0, out0); ++ val += __lasx_xvpickve2gr_w(out0, 0); ++ } ++ for (; j < filterSize; j++) { ++ val += ((int)srcPos[j]) * filter[j]; ++ } ++ dst[i] = FFMIN(val >> sh, max); ++ filter += filterSize; ++ } ++ } else { ++ for (i = 0; i < dstW; i++) { ++ int val = 0; ++ const uint16_t *srcPos = src + filterPos[i]; ++ ++ for (int j = 0; j < filterSize; j++) { ++ val += ((int)srcPos[j]) * filter[j]; ++ } ++ dst[i] = FFMIN(val >> sh, max); ++ filter += filterSize; ++ } ++ } ++} ++ ++#undef SCALE_8 ++#undef SCALE_16 +diff --git a/libswscale/loongarch/swscale_loongarch.h b/libswscale/loongarch/swscale_loongarch.h +new file mode 100644 +index 0000000000..cb5e0452bc +--- /dev/null ++++ b/libswscale/loongarch/swscale_loongarch.h +@@ -0,0 +1,78 @@ ++/* ++ * Copyright (C) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hao Chen(chenhao@loongson.cn) ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef SWSCALE_LOONGARCH_SWSCALE_LOONGARCH_H ++#define SWSCALE_LOONGARCH_SWSCALE_LOONGARCH_H ++ ++#include "libswscale/swscale.h" ++#include "libswscale/swscale_internal.h" ++ ++void ff_hscale_8_to_15_lasx(SwsContext *c, int16_t *dst, int dstW, ++ const uint8_t *src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize); ++ ++void ff_hscale_8_to_19_lasx(SwsContext *c, int16_t *_dst, int dstW, ++ const uint8_t *src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize); ++ ++void ff_hscale_16_to_19_lasx(SwsContext *c, int16_t *_dst, int dstW, ++ const uint8_t *_src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize); ++ ++void ff_hscale_16_to_15_lasx(SwsContext *c, int16_t *dst, int dstW, ++ const uint8_t *_src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize); ++ ++void ff_yuv2planeX_8_lasx(const int16_t *filter, int filterSize, ++ const int16_t **src, uint8_t *dest, int dstW, ++ const uint8_t *dither, int offset); ++ ++int yuv420_rgb24_lasx(SwsContext *c, const uint8_t *src[], int srcStride[], ++ int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]); ++ ++int yuv420_bgr24_lasx(SwsContext *c, const uint8_t *src[], int srcStride[], ++ int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]); ++ ++int yuv420_rgba32_lasx(SwsContext *c, const uint8_t *src[], int srcStride[], ++ int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]); ++ ++int yuv420_bgra32_lasx(SwsContext *c, const uint8_t *src[], int srcStride[], ++ int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]); ++ ++int yuv420_argb32_lasx(SwsContext *c, const uint8_t *src[], int srcStride[], ++ int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]); ++ ++int yuv420_abgr32_lasx(SwsContext *c, const uint8_t *src[], int srcStride[], ++ int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]); ++ ++void ff_interleave_bytes_lasx(const uint8_t *src1, const uint8_t *src2, ++ uint8_t *dest, int width, int height, ++ int src1Stride, int src2Stride, int dstStride); ++ ++av_cold void ff_sws_init_output_loongarch(SwsContext *c); ++ ++void planar_rgb_to_uv_lasx(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4], ++ int width, int32_t *rgb2yuv); ++ ++void planar_rgb_to_y_lasx(uint8_t *_dst, const uint8_t *src[4], int width, ++ int32_t *rgb2yuv); ++ ++#endif /* SWSCALE_LOONGARCH_SWSCALE_LOONGARCH_H */ +diff --git a/libswscale/loongarch/yuv2rgb_lasx.c b/libswscale/loongarch/yuv2rgb_lasx.c +new file mode 100644 +index 0000000000..be8aca4c66 +--- /dev/null ++++ b/libswscale/loongarch/yuv2rgb_lasx.c +@@ -0,0 +1,209 @@ ++/* ++ * Copyright (C) 2021 Loongson Technology Co. Ltd. ++ * Contributed by Hao Chen(chenhao@loongson.cn) ++ * All rights reserved. ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "swscale_loongarch.h" ++#include "libavutil/loongarch/generic_macros_lasx.h" ++ ++#define YUV2RGB_LOAD_COE \ ++ /* Load x_offset */ \ ++ __m256i y_offset = __lasx_xvreplgr2vr_d(c->yOffset); \ ++ __m256i u_offset = __lasx_xvreplgr2vr_d(c->uOffset); \ ++ __m256i v_offset = __lasx_xvreplgr2vr_d(c->vOffset); \ ++ /* Load x_coeff */ \ ++ __m256i ug_coeff = __lasx_xvreplgr2vr_d(c->ugCoeff); \ ++ __m256i vg_coeff = __lasx_xvreplgr2vr_d(c->vgCoeff); \ ++ __m256i y_coeff = __lasx_xvreplgr2vr_d(c->yCoeff); \ ++ __m256i ub_coeff = __lasx_xvreplgr2vr_d(c->ubCoeff); \ ++ __m256i vr_coeff = __lasx_xvreplgr2vr_d(c->vrCoeff); \ ++ ++#define LOAD_YUV_16 \ ++ m_y = LASX_LD(py + (w << 4)); \ ++ m_u = __lasx_xvldrepl_d(pu + (w << 3), 0); \ ++ m_v = __lasx_xvldrepl_d(pv + (w << 3), 0); \ ++ LASX_UNPCK_L_HU_BU(m_y, m_y); \ ++ LASX_UNPCK_L_HU_BU_2(m_u, m_v, m_u, m_v); \ ++ ++/* YUV2RGB method ++ * The conversion method is as follows: ++ * R = Y' * y_coeff + V' * vr_coeff ++ * G = Y' * y_coeff + V' * vg_coeff + U' * ug_coeff ++ * B = Y' * y_coeff + U' * ub_coeff ++ * ++ * where X' = X * 8 - x_offset ++ * ++ */ ++ ++#define YUV2RGB \ ++ m_y = __lasx_xvslli_h(m_y, 3); \ ++ m_u = __lasx_xvslli_h(m_u, 3); \ ++ m_v = __lasx_xvslli_h(m_v, 3); \ ++ m_y = __lasx_xvsub_h(m_y, y_offset); \ ++ m_u = __lasx_xvsub_h(m_u, u_offset); \ ++ m_v = __lasx_xvsub_h(m_v, v_offset); \ ++ m_u = __lasx_xvshuf_h(shuf1, m_u, m_u); \ ++ m_v = __lasx_xvshuf_h(shuf1, m_v, m_v); \ ++ y_1 = __lasx_xvmuh_h(m_y, y_coeff); \ ++ u2g = __lasx_xvmuh_h(m_u, ug_coeff); \ ++ u2b = __lasx_xvmuh_h(m_u, ub_coeff); \ ++ v2r = __lasx_xvmuh_h(m_v, vr_coeff); \ ++ v2g = __lasx_xvmuh_h(m_v, vg_coeff); \ ++ r = __lasx_xvsadd_h(y_1, v2r); \ ++ v2g = __lasx_xvsadd_h(v2g, u2g); \ ++ g = __lasx_xvsadd_h(v2g, y_1); \ ++ b = __lasx_xvsadd_h(y_1, u2b); \ ++ LASX_CLIP_H_0_255_2(r, g, r, g); \ ++ LASX_CLIP_H_0_255(b, b); \ ++ ++#define RGB_PACK_16(r, g, b, rgb_l, rgb_h) \ ++{ \ ++ __m256i rg; \ ++ rg = __lasx_xvpackev_b(g, r); \ ++ LASX_SHUF_B_2_128SV(b, rg, b, rg, shuf2, shuf3, rgb_l, rgb_h); \ ++} ++ ++#define RGB_PACK_32(r, g, b, a, rgb_l, rgb_h) \ ++{ \ ++ __m256i rg, ba; \ ++ rgb_l = __lasx_xvpackev_b(g, r); \ ++ rgb_h = __lasx_xvpackev_b(a, b); \ ++ LASX_ILVL_H_128SV(rgb_h, rgb_l, rg); \ ++ LASX_ILVH_H_128SV(rgb_h, rgb_l, ba); \ ++ rgb_l = __lasx_xvpermi_q(ba, rg, 0x20); \ ++ rgb_h = __lasx_xvpermi_q(ba, rg, 0x31); \ ++} ++ ++#define RGB_STORE_32(rgb_l, rgb_h, iamge, w) \ ++{ \ ++ uint8_t *index = image + (w * 64); \ ++ LASX_ST_2(rgb_l, rgb_h, index, 32); \ ++} ++ ++#define RGB_STORE(rgb_l, rgb_h, image, w) \ ++{ \ ++ uint8_t *index = image + (w * 48); \ ++ __lasx_xvstelm_d(rgb_l, (index), 0, 0); \ ++ __lasx_xvstelm_d(rgb_l, (index), 8, 1); \ ++ __lasx_xvstelm_d(rgb_h, (index), 16, 0); \ ++ __lasx_xvstelm_d(rgb_l, (index), 24, 2); \ ++ __lasx_xvstelm_d(rgb_l, (index), 32, 3); \ ++ __lasx_xvstelm_d(rgb_h, (index), 40, 2); \ ++} ++ ++#define YUV2RGBFUNC(func_name, dst_type, alpha) \ ++ int func_name(SwsContext *c, const uint8_t *src[], \ ++ int srcStride[], int srcSliceY, int srcSliceH, \ ++ uint8_t *dst[], int dstStride[]) \ ++{ \ ++ int w, y, h_size, vshift; \ ++ __m256i m_y, m_u, m_v; \ ++ __m256i y_1, u2g, v2g, u2b, v2r, rgb_l, rgb_h; \ ++ __m256i r, g, b; \ ++ __m256i shuf2 = {0x0504120302100100, 0x0A18090816070614, \ ++ 0x0504120302100100, 0x0A18090816070614}; \ ++ __m256i shuf3 = {0x1E0F0E1C0D0C1A0B, 0x0101010101010101, \ ++ 0x1E0F0E1C0D0C1A0B, 0x0101010101010101}; \ ++ __m256i shuf1 = {0x0001000100000000, 0x0003000300020002, \ ++ 0x0005000500040004, 0x0007000700060006}; \ ++ YUV2RGB_LOAD_COE \ ++ \ ++ h_size = c->dstW >> 4; \ ++ vshift = c->srcFormat != AV_PIX_FMT_YUV422P; \ ++ for (y = 0; y < srcSliceH; y++) { \ ++ dst_type *image = dst[0] + (y + srcSliceY) * dstStride[0]; \ ++ const uint8_t *py = src[0] + y * srcStride[0]; \ ++ const uint8_t *pu = src[1] + (y >> vshift) * srcStride[1]; \ ++ const uint8_t *pv = src[2] + (y >> vshift) * srcStride[2]; \ ++ for (w = 0; w < h_size; w ++) { \ ++ ++ ++#define END_FUNC() \ ++ } \ ++ } \ ++ return srcSliceH; \ ++} ++ ++ ++#define YUV2RGBFUNC_32(func_name, dst_type, alpha) \ ++ int func_name(SwsContext *c, const uint8_t *src[], \ ++ int srcStride[], int srcSliceY, int srcSliceH, \ ++ uint8_t *dst[], int dstStride[]) \ ++{ \ ++ int w, y, h_size, vshift, a = -1; \ ++ __m256i m_y, m_u, m_v; \ ++ __m256i y_1, u2g, v2g, u2b, v2r, rgb_l, rgb_h; \ ++ __m256i r, g, b; \ ++ __m256i alp = __lasx_xvreplgr2vr_w(a); \ ++ __m256i shuf1 = {0x0001000100000000, 0x0003000300020002, \ ++ 0x0005000500040004, 0x0007000700060006}; \ ++ YUV2RGB_LOAD_COE \ ++ \ ++ h_size = c->dstW >> 4; \ ++ vshift = c->srcFormat != AV_PIX_FMT_YUV422P; \ ++ for (y = 0; y < srcSliceH; y++) { \ ++ dst_type *image = dst[0] + (y + srcSliceY) * dstStride[0]; \ ++ const uint8_t *py = src[0] + y * srcStride[0]; \ ++ const uint8_t *pu = src[1] + (y >> vshift) * srcStride[1]; \ ++ const uint8_t *pv = src[2] + (y >> vshift) * srcStride[2]; \ ++ for (w = 0; w < h_size; w ++) { \ ++ ++ ++YUV2RGBFUNC(yuv420_rgb24_lasx, uint8_t, 0) ++ LOAD_YUV_16 ++ YUV2RGB ++ RGB_PACK_16(r, g, b, rgb_l, rgb_h); ++ RGB_STORE(rgb_l, rgb_h, image, w); ++ END_FUNC() ++ ++YUV2RGBFUNC(yuv420_bgr24_lasx, uint8_t, 0) ++ LOAD_YUV_16 ++ YUV2RGB ++ RGB_PACK_16(b, g, r, rgb_l, rgb_h); ++ RGB_STORE(rgb_l, rgb_h, image, w); ++ END_FUNC() ++ ++YUV2RGBFUNC_32(yuv420_rgba32_lasx, uint8_t, 0) ++ LOAD_YUV_16 ++ YUV2RGB ++ RGB_PACK_32(r, g, b, alp, rgb_l, rgb_h); ++ RGB_STORE_32(rgb_l, rgb_h, image, w); ++ END_FUNC() ++ ++YUV2RGBFUNC_32(yuv420_bgra32_lasx, uint8_t, 0) ++ LOAD_YUV_16 ++ YUV2RGB ++ RGB_PACK_32(b, g, r, alp, rgb_l, rgb_h); ++ RGB_STORE_32(rgb_l, rgb_h, image, w); ++ END_FUNC() ++ ++YUV2RGBFUNC_32(yuv420_argb32_lasx, uint8_t, 0) ++ LOAD_YUV_16 ++ YUV2RGB ++ RGB_PACK_32(alp, r, g, b, rgb_l, rgb_h); ++ RGB_STORE_32(rgb_l, rgb_h, image, w); ++ END_FUNC() ++ ++YUV2RGBFUNC_32(yuv420_abgr32_lasx, uint8_t, 0) ++ LOAD_YUV_16 ++ YUV2RGB ++ RGB_PACK_32(alp, b, g, r, rgb_l, rgb_h); ++ RGB_STORE_32(rgb_l, rgb_h, image, w); ++ END_FUNC() +diff --git a/libswscale/mips/Makefile b/libswscale/mips/Makefile +new file mode 100644 +index 0000000000..48c2425eff +--- /dev/null ++++ b/libswscale/mips/Makefile +@@ -0,0 +1,4 @@ ++OBJS += mips/swscale_init_mips.o ++OBJS += mips/rgb2rgb_init_mips.o ++MSA-OBJS += mips/swscale_msa.o ++MSA-OBJS += mips/rgb2rgb_msa.o +diff --git a/libswscale/mips/rgb2rgb_init_mips.c b/libswscale/mips/rgb2rgb_init_mips.c +new file mode 100644 +index 0000000000..f1bcd6f726 +--- /dev/null ++++ b/libswscale/mips/rgb2rgb_init_mips.c +@@ -0,0 +1,33 @@ ++/* ++ * Copyright (C) 2020 Loongson Technology Co. Ltd. ++ * Contributed by Gu Xiwei(guxiwei-hf@loongson.cn) ++ * All rights reserved. ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "rgb2rgb_mips.h" ++#include "libavutil/mips/cpu.h" ++ ++av_cold void rgb2rgb_init_mips(void) ++{ ++ int cpu_flags = av_get_cpu_flags(); ++#if HAVE_MSA ++ if (have_msa(cpu_flags)) ++ interleaveBytes = ff_interleave_bytes_msa; ++#endif /* #if HAVE_MSA */ ++} +diff --git a/libswscale/mips/rgb2rgb_mips.h b/libswscale/mips/rgb2rgb_mips.h +new file mode 100644 +index 0000000000..5271d2f032 +--- /dev/null ++++ b/libswscale/mips/rgb2rgb_mips.h +@@ -0,0 +1,32 @@ ++/* ++ * Copyright (C) 2020 Loongson Technology Co. Ltd. ++ * Contributed by Gu Xiwei(guxiwei-hf@loongson.cn) ++ * All rights reserved. ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef SWSCALE_MIPS_RGB2RGB_MIPS_H ++#define SWSCALE_MIPS_RGB2RGB_MIPS_H ++ ++#include "libswscale/rgb2rgb.h" ++ ++void ff_interleave_bytes_msa(const uint8_t *src1, const uint8_t *src2, ++ uint8_t *dest, int width, int height, ++ int src1Stride, int src2Stride, int dstStride); ++ ++#endif /* SWSCALE_MIPS_RGB2RGB_MIPS_H */ +diff --git a/libswscale/mips/rgb2rgb_msa.c b/libswscale/mips/rgb2rgb_msa.c +new file mode 100644 +index 0000000000..594a34c651 +--- /dev/null ++++ b/libswscale/mips/rgb2rgb_msa.c +@@ -0,0 +1,51 @@ ++/* ++ * Copyright (C) 2020 Loongson Technology Co. Ltd. ++ * Contributed by Gu Xiwei(guxiwei-hf@loongson.cn) ++ * All rights reserved. ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "rgb2rgb_mips.h" ++#include "libavutil/mips/generic_macros_msa.h" ++ ++void ff_interleave_bytes_msa(const uint8_t *src1, const uint8_t *src2, ++ uint8_t *dest, int width, int height, ++ int src1Stride, int src2Stride, int dstStride) ++{ ++ int h; ++ int len = width >> 4; ++ int part = len << 4; ++ for (h = 0; h < height; h++) { ++ int w; ++ v16u8 src_0, src_1; ++ v16u8 dst_0, dst_1; ++ for (w = 0; w < len; w++) { ++ src_0 = LD_UB(src1 + w * 16); ++ src_1 = LD_UB(src2 + w * 16); ++ ILVRL_B2_UB(src_1, src_0, dst_0, dst_1); ++ ST_UB2(dst_0, dst_1, dest + w * 32, 16); ++ } ++ for (w = part; w < width; w++) { ++ dest[2 * w + 0] = src1[w]; ++ dest[2 * w + 1] = src2[w]; ++ } ++ dest += dstStride; ++ src1 += src1Stride; ++ src2 += src2Stride; ++ } ++} +diff --git a/libswscale/mips/swscale_init_mips.c b/libswscale/mips/swscale_init_mips.c +new file mode 100644 +index 0000000000..8e26486f1e +--- /dev/null ++++ b/libswscale/mips/swscale_init_mips.c +@@ -0,0 +1,211 @@ ++/* ++ * Copyright (C) 2020 Loongson Technology Co. Ltd. ++ * Contributed by Gu Xiwei(guxiwei-hf@loongson.cn) ++ * All rights reserved. ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "swscale_mips.h" ++#include "libavutil/mips/cpu.h" ++ ++av_cold void ff_sws_init_swscale_mips(SwsContext *c) ++{ ++ int cpu_flags = av_get_cpu_flags(); ++#if HAVE_MSA ++ if (have_msa(cpu_flags)) { ++ const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(c->dstFormat); ++ ++ if (c->srcBpc == 8) { ++ if (c->dstBpc <= 14) { ++ c->hyScale = c->hcScale = ff_hscale_8_to_15_msa; ++ } else { ++ c->hyScale = c->hcScale = ff_hscale_8_to_19_msa; ++ } ++ } else { ++ c->hyScale = c->hcScale = c->dstBpc > 14 ? ff_hscale_16_to_19_msa ++ : ff_hscale_16_to_15_msa; ++ } ++ switch (c->srcFormat) { ++ case AV_PIX_FMT_GBRAP: ++ case AV_PIX_FMT_GBRP: ++ { ++ c->readChrPlanar = planar_rgb_to_uv_msa; ++ c->readLumPlanar = planar_rgb_to_y_msa; ++ } ++ break; ++ } ++ if (c->dstBpc == 8) ++ c->yuv2planeX = ff_yuv2planeX_8_msa; ++ if (c->flags & SWS_FULL_CHR_H_INT) { ++ switch (c->dstFormat) { ++ case AV_PIX_FMT_RGBA: ++#if CONFIG_SMALL ++ c->yuv2packedX = yuv2rgba32_full_X_msa; ++ c->yuv2packed2 = yuv2rgba32_full_2_msa; ++ c->yuv2packed1 = yuv2rgba32_full_1_msa; ++#else ++#if CONFIG_SWSCALE_ALPHA ++ if (c->needAlpha) { ++ c->yuv2packedX = yuv2rgba32_full_X_msa; ++ c->yuv2packed2 = yuv2rgba32_full_2_msa; ++ c->yuv2packed1 = yuv2rgba32_full_1_msa; ++ } else ++#endif /* CONFIG_SWSCALE_ALPHA */ ++ { ++ c->yuv2packedX = yuv2rgbx32_full_X_msa; ++ c->yuv2packed2 = yuv2rgbx32_full_2_msa; ++ c->yuv2packed1 = yuv2rgbx32_full_1_msa; ++ } ++#endif /* !CONFIG_SMALL */ ++ break; ++ case AV_PIX_FMT_ARGB: ++#if CONFIG_SMALL ++ c->yuv2packedX = yuv2argb32_full_X_msa; ++ c->yuv2packed2 = yuv2argb32_full_2_msa; ++ c->yuv2packed1 = yuv2argb32_full_1_msa; ++#else ++#if CONFIG_SWSCALE_ALPHA ++ if (c->needAlpha) { ++ c->yuv2packedX = yuv2argb32_full_X_msa; ++ c->yuv2packed2 = yuv2argb32_full_2_msa; ++ c->yuv2packed1 = yuv2argb32_full_1_msa; ++ } else ++#endif /* CONFIG_SWSCALE_ALPHA */ ++ { ++ c->yuv2packedX = yuv2xrgb32_full_X_msa; ++ c->yuv2packed2 = yuv2xrgb32_full_2_msa; ++ c->yuv2packed1 = yuv2xrgb32_full_1_msa; ++ } ++#endif /* !CONFIG_SMALL */ ++ break; ++ case AV_PIX_FMT_BGRA: ++#if CONFIG_SMALL ++ c->yuv2packedX = yuv2bgra32_full_X_msa; ++ c->yuv2packed2 = yuv2bgra32_full_2_msa; ++ c->yuv2packed1 = yuv2bgra32_full_1_msa; ++#else ++#if CONFIG_SWSCALE_ALPHA ++ if (c->needAlpha) { ++ c->yuv2packedX = yuv2bgra32_full_X_msa; ++ c->yuv2packed2 = yuv2bgra32_full_2_msa; ++ c->yuv2packed1 = yuv2bgra32_full_1_msa; ++ } else ++#endif /* CONFIG_SWSCALE_ALPHA */ ++ { ++ c->yuv2packedX = yuv2bgrx32_full_X_msa; ++ c->yuv2packed2 = yuv2bgrx32_full_2_msa; ++ c->yuv2packed1 = yuv2bgrx32_full_1_msa; ++ } ++#endif /* !CONFIG_SMALL */ ++ break; ++ case AV_PIX_FMT_ABGR: ++#if CONFIG_SMALL ++ c->yuv2packedX = yuv2abgr32_full_X_msa; ++ c->yuv2packed2 = yuv2abgr32_full_2_msa; ++ c->yuv2packed1 = yuv2abgr32_full_1_msa; ++#else ++#if CONFIG_SWSCALE_ALPHA ++ if (c->needAlpha) { ++ c->yuv2packedX = yuv2abgr32_full_X_msa; ++ c->yuv2packed2 = yuv2abgr32_full_2_msa; ++ c->yuv2packed1 = yuv2abgr32_full_1_msa; ++ } else ++#endif /* CONFIG_SWSCALE_ALPHA */ ++ { ++ c->yuv2packedX = yuv2xbgr32_full_X_msa; ++ c->yuv2packed2 = yuv2xbgr32_full_2_msa; ++ c->yuv2packed1 = yuv2xbgr32_full_1_msa; ++ } ++#endif /* !CONFIG_SMALL */ ++ break; ++ case AV_PIX_FMT_RGB24: ++ c->yuv2packedX = yuv2rgb24_full_X_msa; ++ c->yuv2packed2 = yuv2rgb24_full_2_msa; ++ c->yuv2packed1 = yuv2rgb24_full_1_msa; ++ break; ++ case AV_PIX_FMT_BGR24: ++ c->yuv2packedX = yuv2bgr24_full_X_msa; ++ c->yuv2packed2 = yuv2bgr24_full_2_msa; ++ c->yuv2packed1 = yuv2bgr24_full_1_msa; ++ break; ++ case AV_PIX_FMT_BGR4_BYTE: ++ c->yuv2packedX = yuv2bgr4_byte_full_X_msa; ++ c->yuv2packed2 = yuv2bgr4_byte_full_2_msa; ++ c->yuv2packed1 = yuv2bgr4_byte_full_1_msa; ++ break; ++ case AV_PIX_FMT_RGB4_BYTE: ++ c->yuv2packedX = yuv2rgb4_byte_full_X_msa; ++ c->yuv2packed2 = yuv2rgb4_byte_full_2_msa; ++ c->yuv2packed1 = yuv2rgb4_byte_full_1_msa; ++ break; ++ case AV_PIX_FMT_BGR8: ++ c->yuv2packedX = yuv2bgr8_full_X_msa; ++ c->yuv2packed2 = yuv2bgr8_full_2_msa; ++ c->yuv2packed1 = yuv2bgr8_full_1_msa; ++ break; ++ case AV_PIX_FMT_RGB8: ++ c->yuv2packedX = yuv2rgb8_full_X_msa; ++ c->yuv2packed2 = yuv2rgb8_full_2_msa; ++ c->yuv2packed1 = yuv2rgb8_full_1_msa; ++ break; ++ } ++ } else { ++ switch (c->dstFormat) { ++ case AV_PIX_FMT_RGB32: ++ case AV_PIX_FMT_BGR32: ++#if CONFIG_SMALL ++#else ++#if CONFIG_SWSCALE_ALPHA ++ if (c->needAlpha) { ++ } else ++#endif /* CONFIG_SWSCALE_ALPHA */ ++ { ++ c->yuv2packed1 = yuv2rgbx32_1_msa; ++ c->yuv2packed2 = yuv2rgbx32_2_msa; ++ c->yuv2packedX = yuv2rgbx32_X_msa; ++ } ++#endif /* !CONFIG_SMALL */ ++ break; ++ case AV_PIX_FMT_RGB32_1: ++ case AV_PIX_FMT_BGR32_1: ++#if CONFIG_SMALL ++#else ++#if CONFIG_SWSCALE_ALPHA ++ if (c->needAlpha) { ++ } else ++#endif /* CONFIG_SWSCALE_ALPHA */ ++ { ++ c->yuv2packed1 = yuv2rgbx32_1_1_msa; ++ c->yuv2packed2 = yuv2rgbx32_1_2_msa; ++ c->yuv2packedX = yuv2rgbx32_1_X_msa; ++ } ++#endif /* !CONFIG_SMALL */ ++ break; ++ case AV_PIX_FMT_RGB565LE: ++ case AV_PIX_FMT_RGB565BE: ++ case AV_PIX_FMT_BGR565LE: ++ case AV_PIX_FMT_BGR565BE: ++ c->yuv2packed1 = yuv2rgb16_1_msa; ++ c->yuv2packed2 = yuv2rgb16_2_msa; ++ c->yuv2packedX = yuv2rgb16_X_msa; ++ break; ++ } ++ } ++ } ++#endif /* #if HAVE_MSA */ ++} +diff --git a/libswscale/mips/swscale_mips.h b/libswscale/mips/swscale_mips.h +new file mode 100644 +index 0000000000..ff30593e0d +--- /dev/null ++++ b/libswscale/mips/swscale_mips.h +@@ -0,0 +1,404 @@ ++/* ++ * Copyright (C) 2020 Loongson Technology Co. Ltd. ++ * Contributed by Gu Xiwei(guxiwei-hf@loongson.cn) ++ * All rights reserved. ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef SWSCALE_MIPS_SWSCALE_MIPS_H ++#define SWSCALE_MIPS_SWSCALE_MIPS_H ++ ++#include "libswscale/swscale.h" ++#include "libswscale/swscale_internal.h" ++ ++void ff_hscale_8_to_15_msa(SwsContext *c, int16_t *dst, int dstW, ++ const uint8_t *src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize); ++ ++void ff_hscale_8_to_19_msa(SwsContext *c, int16_t *_dst, int dstW, ++ const uint8_t *src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize); ++ ++void ff_hscale_16_to_19_msa(SwsContext *c, int16_t *_dst, int dstW, ++ const uint8_t *_src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize); ++ ++void ff_hscale_16_to_15_msa(SwsContext *c, int16_t *dst, int dstW, ++ const uint8_t *_src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize); ++ ++void ff_yuv2planeX_8_msa(const int16_t *filter, int filterSize, ++ const int16_t **src, uint8_t *dest, int dstW, ++ const uint8_t *dither, int offset); ++ ++void yuv2rgbx32_1_X_msa(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, int dstW, ++ int y); ++ ++void yuv2rgbx32_1_2_msa(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y); ++ ++void yuv2rgbx32_1_1_msa(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y); ++ ++void yuv2rgbx32_X_msa(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, int dstW, ++ int y); ++ ++void yuv2rgbx32_2_msa(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y); ++ ++void yuv2rgbx32_1_msa(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y); ++ ++void yuv2rgb16_2_msa(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y); ++ ++void yuv2rgb16_1_msa(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y); ++ ++void yuv2rgb16_X_msa(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, int dstW, ++ int y); ++ ++void yuv2bgra32_full_2_msa(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y); ++ ++void yuv2bgra32_full_1_msa(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y); ++ ++void yuv2bgra32_full_X_msa(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, int dstW, ++ int y); ++ ++void yuv2abgr32_full_2_msa(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y); ++ ++void yuv2abgr32_full_1_msa(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y); ++ ++void yuv2abgr32_full_X_msa(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, int dstW, ++ int y); ++ ++void yuv2rgba32_full_2_msa(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y); ++ ++void yuv2rgba32_full_1_msa(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y); ++ ++void yuv2rgba32_full_X_msa(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, int dstW, ++ int y); ++ ++void yuv2argb32_full_2_msa(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y); ++ ++void yuv2argb32_full_1_msa(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y); ++ ++void yuv2argb32_full_X_msa(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, int dstW, ++ int y); ++ ++void yuv2bgrx32_full_2_msa(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y); ++ ++void yuv2bgrx32_full_1_msa(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y); ++ ++void yuv2bgrx32_full_X_msa(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, int dstW, ++ int y); ++ ++void yuv2xbgr32_full_2_msa(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y); ++ ++void yuv2xbgr32_full_1_msa(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y); ++ ++void yuv2xbgr32_full_X_msa(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, int dstW, ++ int y); ++ ++void yuv2rgbx32_full_2_msa(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y); ++ ++void yuv2rgbx32_full_1_msa(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y); ++ ++void yuv2rgbx32_full_X_msa(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, int dstW, ++ int y); ++ ++void yuv2xrgb32_full_2_msa(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y); ++ ++void yuv2xrgb32_full_1_msa(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y); ++ ++void yuv2xrgb32_full_X_msa(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, int dstW, ++ int y); ++ ++void yuv2bgr24_full_2_msa(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y); ++ ++void yuv2bgr24_full_1_msa(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y); ++ ++void yuv2bgr24_full_X_msa(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, int dstW, ++ int y); ++ ++void yuv2rgb24_full_2_msa(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y); ++ ++void yuv2rgb24_full_1_msa(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y); ++ ++void yuv2rgb24_full_X_msa(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, int dstW, ++ int y); ++ ++void yuv2bgr4_byte_full_2_msa(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y); ++ ++void yuv2bgr4_byte_full_1_msa(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y); ++ ++void yuv2bgr4_byte_full_X_msa(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, int dstW, ++ int y); ++ ++void yuv2rgb4_byte_full_2_msa(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y); ++ ++void yuv2rgb4_byte_full_1_msa(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y); ++ ++void yuv2rgb4_byte_full_X_msa(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, int dstW, ++ int y); ++ ++void yuv2bgr8_full_2_msa(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y); ++ ++void yuv2bgr8_full_1_msa(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y); ++ ++void yuv2bgr8_full_X_msa(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, int dstW, ++ int y); ++ ++void yuv2rgb8_full_2_msa(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y); ++ ++void yuv2rgb8_full_1_msa(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y); ++ ++void yuv2rgb8_full_X_msa(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, int dstW, ++ int y); ++ ++void yuv2plane1_9BE_msa(const int16_t *src, uint8_t *dest, int dstW, ++ const uint8_t *dither, int offset); ++ ++void yuv2plane1_9LE_msa(const int16_t *src, uint8_t *dest, int dstW, ++ const uint8_t *dither, int offset); ++ ++void yuv2planeX_9BE_msa(const int16_t *filter, int filterSize, const int16_t **src, ++ uint8_t *dest, int dstW, const uint8_t *ditherm, int offset); ++ ++void yuv2planeX_9LE_msa(const int16_t *filter, int filterSize, const int16_t **src, ++ uint8_t *dest, int dstW, const uint8_t *ditherm, int offset); ++ ++void yuv2plane1_10BE_msa(const int16_t *src, uint8_t *dest, int dstW, ++ const uint8_t *dither, int offset); ++ ++void yuv2plane1_10LE_msa(const int16_t *src, uint8_t *dest, int dstW, ++ const uint8_t *dither, int offset); ++ ++void yuv2planeX_10BE_msa(const int16_t *filter, int filterSize, const int16_t **src, ++ uint8_t *dest, int dstW, const uint8_t *ditherm, int offset); ++ ++void yuv2planeX_10LE_msa(const int16_t *filter, int filterSize, const int16_t **src, ++ uint8_t *dest, int dstW, const uint8_t *ditherm, int offset); ++ ++void yuv2plane1_12BE_msa(const int16_t *src, uint8_t *dest, int dstW, ++ const uint8_t *dither, int offset); ++ ++void yuv2plane1_12LE_msa(const int16_t *src, uint8_t *dest, int dstW, ++ const uint8_t *dither, int offset); ++ ++void yuv2planeX_12BE_msa(const int16_t *filter, int filterSize, const int16_t **src, ++ uint8_t *dest, int dstW, const uint8_t *ditherm, int offset); ++ ++void yuv2planeX_12LE_msa(const int16_t *filter, int filterSize, const int16_t **src, ++ uint8_t *dest, int dstW, const uint8_t *ditherm, int offset); ++ ++void yuv2plane1_14BE_msa(const int16_t *src, uint8_t *dest, int dstW, ++ const uint8_t *dither, int offset); ++ ++void yuv2plane1_14LE_msa(const int16_t *src, uint8_t *dest, int dstW, ++ const uint8_t *dither, int offset); ++ ++void yuv2planeX_14BE_msa(const int16_t *filter, int filterSize, const int16_t **src, ++ uint8_t *dest, int dstW, const uint8_t *ditherm, int offset); ++ ++void yuv2planeX_14LE_msa(const int16_t *filter, int filterSize, const int16_t **src, ++ uint8_t *dest, int dstW, const uint8_t *ditherm, int offset); ++ ++void yuv2plane1_16BE_msa(const int16_t *src, uint8_t *dest, int dstW, ++ const uint8_t *dither, int offset); ++ ++void yuv2plane1_16LE_msa(const int16_t *src, uint8_t *dest, int dstW, ++ const uint8_t *dither, int offset); ++ ++void yuv2planeX_16BE_msa(const int16_t *filter, int filterSize, const int16_t **src, ++ uint8_t *dest, int dstW, const uint8_t *ditherm, int offset); ++ ++void yuv2planeX_16LE_msa(const int16_t *filter, int filterSize, const int16_t **src, ++ uint8_t *dest, int dstW, const uint8_t *ditherm, int offset); ++ ++void planar_rgb_to_uv_msa(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4], ++ int width, int32_t *rgb2yuv); ++ ++void planar_rgb_to_y_msa(uint8_t *_dst, const uint8_t *src[4], int width, ++ int32_t *rgb2yuv); ++ ++#endif /* SWSCALE_MIPS_SWSCALE_MIPS_H */ +diff --git a/libswscale/mips/swscale_msa.c b/libswscale/mips/swscale_msa.c +new file mode 100644 +index 0000000000..4f6422c4cc +--- /dev/null ++++ b/libswscale/mips/swscale_msa.c +@@ -0,0 +1,1805 @@ ++/* ++ * Copyright (C) 2020 Loongson Technology Co. Ltd. ++ * Contributed by Gu Xiwei(guxiwei-hf@loongson.cn) ++ * All rights reserved. ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "swscale_mips.h" ++#include "libavutil/mips/generic_macros_msa.h" ++#include "libavutil/intreadwrite.h" ++ ++void ff_hscale_8_to_15_msa(SwsContext *c, int16_t *dst, int dstW, ++ const uint8_t *src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize) ++{ ++ int i; ++ ++ if (filterSize == 8) { ++ for (i = 0; i < dstW; i++) { ++ int val = 0; ++ v8i16 src0, filter0, out0; ++ v16i8 zero = { 0 }; ++ ++ src0 = LD_V(v8i16, src + filterPos[i]); ++ filter0 = LD_V(v8i16, filter + (i << 3)); ++ src0 = (v8i16)__msa_ilvr_b(zero, (v16i8)src0); ++ out0 = (v8i16)__msa_dotp_s_w(src0, filter0); ++ out0 = (v8i16)__msa_hadd_s_d((v4i32)out0, (v4i32)out0); ++ val += (__msa_copy_s_w((v4i32)out0, 0) + ++ __msa_copy_s_w((v4i32)out0, 2)); ++ dst[i] = FFMIN(val >> 7, (1 << 15) - 1); ++ } ++ } else if (filterSize == 4) { ++ int len = dstW & (~1); ++ ++ for (i = 0; i < len; i += 2) { ++ v8i16 src1, src2, src3; ++ v8i16 filter0; ++ v4i32 out0; ++ int val1 = 0; ++ int val2 = 0; ++ v16i8 zero = {0}; ++ ++ src1 = LD_V(v8i16, src + filterPos[i]); ++ src2 = LD_V(v8i16, src + filterPos[i + 1]); ++ filter0 = LD_V(v8i16, filter + (i << 2)); ++ src1 = (v8i16)__msa_ilvr_b(zero, (v16i8)src1); ++ src2 = (v8i16)__msa_ilvr_b(zero, (v16i8)src2); ++ src3 = (v8i16)__msa_ilvr_d((v2i64)src2, (v2i64)src1); ++ out0 = (v4i32)__msa_dotp_s_w(src3, filter0); ++ val1 = __msa_copy_s_w(out0, 0) + __msa_copy_s_w(out0, 1); ++ val2 = __msa_copy_s_w(out0, 2) + __msa_copy_s_w(out0, 3); ++ dst[i] = FFMIN(val1 >> 7, (1 << 15) - 1); ++ dst[i + 1] = FFMIN(val2 >> 7, (1 << 15) - 1); ++ } ++ if (i < dstW) { ++ int val = 0; ++ uint8_t *srcPos = src + filterPos[i]; ++ int16_t *filterStart = filter + filterSize * i; ++ ++ for (int j = 0; j < 4; j++) { ++ val += ((int)srcPos[j]) * filterStart[j]; ++ } ++ dst[i] = FFMIN(val >> 7, (1 << 15) - 1); ++ } ++ } else if (filterSize > 8) { ++ int len = filterSize >> 3; ++ int part = len << 3; ++ ++ for (i = 0; i < dstW; i++) { ++ v8i16 src0, filter0, out0; ++ v16i8 zero = { 0 }; ++ uint8_t *srcPos = src + filterPos[i]; ++ int16_t *filterStart = filter + filterSize * i; ++ int j, val = 0; ++ ++ for (j = 0; j < len; j++) { ++ src0 = LD_V(v8i16, srcPos + (j << 3)); ++ filter0 = LD_V(v8i16, filterStart + (j << 3)); ++ src0 = (v8i16)__msa_ilvr_b(zero, (v16i8)src0); ++ out0 = (v8i16)__msa_dotp_s_w(src0, filter0); ++ out0 = (v8i16)__msa_hadd_s_d((v4i32)out0, (v4i32)out0); ++ val += (__msa_copy_s_w((v4i32)out0, 0) + ++ __msa_copy_s_w((v4i32)out0, 2)); ++ } ++ for (j = part; j < filterSize; j++) { ++ val += ((int)srcPos[j]) * filterStart[j]; ++ } ++ dst[i] = FFMIN(val >> 7, (1 << 15) - 1); ++ } ++ } else { ++ for (i = 0; i < dstW; i++) { ++ int val = 0; ++ uint8_t *srcPos = src + filterPos[i]; ++ int16_t *filterStart = filter + filterSize * i; ++ ++ for (int j = 0; j < filterSize; j++) { ++ val += ((int)srcPos[j]) * filterStart[j]; ++ } ++ dst[i] = FFMIN(val >> 7, (1 << 15) - 1); ++ } ++ } ++} ++ ++void ff_hscale_8_to_19_msa(SwsContext *c, int16_t *_dst, int dstW, ++ const uint8_t *src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize) ++{ ++ int i; ++ int32_t *dst = (int32_t *) _dst; ++ ++ if (filterSize == 8) { ++ for (i = 0; i < dstW; i++) { ++ int val = 0; ++ v8i16 src0, filter0, out0; ++ v16i8 zero = { 0 }; ++ ++ src0 = LD_V(v8i16, src + filterPos[i]); ++ filter0 = LD_V(v8i16, filter + (i << 3)); ++ src0 = (v8i16)__msa_ilvr_b(zero, (v16i8)src0); ++ out0 = (v8i16)__msa_dotp_s_w(src0, filter0); ++ out0 = (v8i16)__msa_hadd_s_d((v4i32)out0, (v4i32)out0); ++ val += (__msa_copy_s_w((v4i32)out0, 0) + ++ __msa_copy_s_w((v4i32)out0, 2)); ++ dst[i] = FFMIN(val >> 3, (1 << 19) - 1); ++ } ++ } else if (filterSize == 4) { ++ int len = dstW & (~1); ++ ++ for (i = 0; i < len; i += 2) { ++ v8i16 src1, src2, src3; ++ v8i16 filter0; ++ v4i32 out0; ++ int val1 = 0; ++ int val2 = 0; ++ v16i8 zero = {0}; ++ ++ src1 = LD_V(v8i16, src + filterPos[i]); ++ src2 = LD_V(v8i16, src + filterPos[i + 1]); ++ filter0 = LD_V(v8i16, filter + (i << 2)); ++ src1 = (v8i16)__msa_ilvr_b(zero, (v16i8)src1); ++ src2 = (v8i16)__msa_ilvr_b(zero, (v16i8)src2); ++ src3 = (v8i16)__msa_ilvr_d((v2i64)src2, (v2i64)src1); ++ out0 = (v4i32)__msa_dotp_s_w(src3, filter0); ++ val1 = __msa_copy_s_w(out0, 0) + __msa_copy_s_w(out0, 1); ++ val2 = __msa_copy_s_w(out0, 2) + __msa_copy_s_w(out0, 3); ++ dst[i] = FFMIN(val1 >> 3, (1 << 19) - 1); ++ dst[i + 1] = FFMIN(val2 >> 3, (1 << 19) - 1); ++ } ++ if (i < dstW) { ++ int val = 0; ++ uint8_t *srcPos = src + filterPos[i]; ++ int16_t *filterStart = filter + filterSize * i; ++ ++ for (int j = 0; j < 4; j++) { ++ val += ((int)srcPos[j]) * filterStart[j]; ++ } ++ dst[i] = FFMIN(val >> 3, (1 << 19) - 1); ++ } ++ } else if (filterSize > 8) { ++ int len = filterSize >> 3; ++ int part = len << 3; ++ ++ for (i = 0; i < dstW; i++) { ++ v8i16 src0, filter0, out0; ++ v16i8 zero = { 0 }; ++ uint8_t *srcPos = src + filterPos[i]; ++ int16_t *filterStart = filter + filterSize * i; ++ int j, val = 0; ++ ++ for (j = 0; j < len; j++) { ++ src0 = LD_V(v8i16, srcPos + (j << 3)); ++ filter0 = LD_V(v8i16, filterStart + (j << 3)); ++ src0 = (v8i16)__msa_ilvr_b(zero, (v16i8)src0); ++ out0 = (v8i16)__msa_dotp_s_w(src0, filter0); ++ out0 = (v8i16)__msa_hadd_s_d((v4i32)out0, (v4i32)out0); ++ val += (__msa_copy_s_w((v4i32)out0, 0) + ++ __msa_copy_s_w((v4i32)out0, 2)); ++ } ++ for (j = part; j < filterSize; j++) { ++ val += ((int)srcPos[j]) * filterStart[j]; ++ } ++ dst[i] = FFMIN(val >> 3, (1 << 19) - 1); ++ } ++ } else { ++ for (i = 0; i < dstW; i++) { ++ int val = 0; ++ uint8_t *srcPos = src + filterPos[i]; ++ int16_t *filterStart = filter + filterSize * i; ++ ++ for (int j = 0; j < filterSize; j++) { ++ val += ((int)srcPos[j]) * filterStart[j]; ++ } ++ dst[i] = FFMIN(val >> 3, (1 << 19) - 1); ++ } ++ } ++} ++ ++void ff_hscale_16_to_19_msa(SwsContext *c, int16_t *_dst, int dstW, ++ const uint8_t *_src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize) ++{ ++ const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(c->srcFormat); ++ int i; ++ int32_t *dst = (int32_t *) _dst; ++ const uint16_t *src = (const uint16_t *) _src; ++ int bits = desc->comp[0].depth - 1; ++ int sh = bits - 4; ++ ++ if ((isAnyRGB(c->srcFormat) || c->srcFormat == AV_PIX_FMT_PAL8) ++ && desc->comp[0].depth<16) { ++ sh = 9; ++ } else if (desc->flags & AV_PIX_FMT_FLAG_FLOAT) { ++ sh = 11; ++ } ++ if (filterSize == 8) { ++ for (i = 0; i < dstW; i++) { ++ int val = 0; ++ v8i16 src0, filter0; ++ v4i32 src_l, src_r, filter_l, filter_r, out_l, out_r, out; ++ v8i16 zero = { 0 }; ++ ++ src0 = LD_V(v8i16, src + filterPos[i]); ++ filter0 = LD_V(v8i16, filter + (i << 3)); ++ src_r = (v4i32)__msa_ilvr_h(zero, (v8i16)src0); ++ src_l = (v4i32)__msa_ilvl_h(zero, (v8i16)src0); ++ UNPCK_SH_SW(filter0, filter_r, filter_l); ++ out_r = (v4i32)__msa_dotp_s_d(src_r, filter_r); ++ out_l = (v4i32)__msa_dotp_s_d(src_l, filter_l); ++ out = (v4i32)__msa_addv_w(out_r, out_l); ++ val += (__msa_copy_s_w(out, 0) + ++ __msa_copy_s_w(out, 2)); ++ dst[i] = FFMIN(val >> sh, (1 << 19) - 1); ++ } ++ } else if (filterSize == 4) { ++ int len = dstW & (~1); ++ ++ for (i = 0; i < len; i += 2) { ++ v8i16 src1, src2, filter0; ++ v4i32 src1_r, src2_r, filter_r, filter_l; ++ v4i32 out1, out2; ++ int val1 = 0; ++ int val2 = 0; ++ v8i16 zero = {0}; ++ ++ src1 = LD_V(v8i16, src + filterPos[i]); ++ src2 = LD_V(v8i16, src + filterPos[i + 1]); ++ filter0 = LD_V(v8i16, filter + (i << 2)); ++ src1_r = (v4i32)__msa_ilvr_h(zero, src1); ++ src2_r = (v4i32)__msa_ilvr_h(zero, src2); ++ UNPCK_SH_SW(filter0, filter_r, filter_l); ++ out1 = (v4i32)__msa_dotp_s_d(src1_r, filter_r); ++ out2 = (v4i32)__msa_dotp_s_d(src2_r, filter_l); ++ val1 = __msa_copy_s_w(out1, 0) + __msa_copy_s_w(out1, 2); ++ val2 = __msa_copy_s_w(out2, 0) + __msa_copy_s_w(out2, 2); ++ dst[i] = FFMIN(val1 >> sh, (1 << 19) - 1); ++ dst[i + 1] = FFMIN(val2 >> sh, (1 << 19) - 1); ++ } ++ if (i < dstW) { ++ int val = 0; ++ uint8_t *srcPos = src + filterPos[i]; ++ int16_t *filterStart = filter + filterSize * i; ++ ++ for (int j = 0; j < 4; j++) { ++ val += ((int)srcPos[j]) * filterStart[j]; ++ } ++ dst[i] = FFMIN(val >> sh, (1 << 19) - 1); ++ } ++ } else if (filterSize > 8) { ++ int len = filterSize >> 3; ++ int part = len << 3; ++ ++ for (i = 0; i < dstW; i++) { ++ v8i16 src0, filter0; ++ v4i32 src_r, src_l, filter_r, filter_l, out_r, out_l, out; ++ v8i16 zero = { 0 }; ++ uint16_t *srcPos = src + filterPos[i]; ++ int16_t *filterStart = filter + filterSize * i; ++ int j, val = 0; ++ ++ for (j = 0; j < len; j++) { ++ src0 = LD_V(v8i16, srcPos + (j << 3)); ++ filter0 = LD_V(v8i16, filterStart + (j << 3)); ++ src_r = (v4i32)__msa_ilvr_h(zero, (v8i16)src0); ++ src_l = (v4i32)__msa_ilvl_h(zero, (v8i16)src0); ++ UNPCK_SH_SW(filter0, filter_r, filter_l); ++ out_r = (v4i32)__msa_dotp_s_d(src_r, filter_r); ++ out_l = (v4i32)__msa_dotp_s_d(src_l, filter_l); ++ out = (v4i32)__msa_addv_w(out_r, out_l); ++ val += (__msa_copy_s_w(out, 0) + ++ __msa_copy_s_w(out, 2)); ++ } ++ for (j = part; j < filterSize; j++) { ++ val += ((int)srcPos[j]) * filterStart[j]; ++ } ++ dst[i] = FFMIN(val >> sh, (1 << 19) - 1); ++ } ++ } else { ++ for (i = 0; i < dstW; i++) { ++ int val = 0; ++ uint16_t *srcPos = src + filterPos[i]; ++ int16_t *filterStart = filter + filterSize * i; ++ ++ for (int j = 0; j < filterSize; j++) { ++ val += ((int)srcPos[j]) * filterStart[j]; ++ } ++ dst[i] = FFMIN(val >> sh, (1 << 19) - 1); ++ } ++ } ++} ++ ++void ff_hscale_16_to_15_msa(SwsContext *c, int16_t *dst, int dstW, ++ const uint8_t *_src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize) ++{ ++ const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(c->srcFormat); ++ int i; ++ const uint16_t *src = (const uint16_t *) _src; ++ int sh = desc->comp[0].depth - 1; ++ ++ if (sh < 15) { ++ sh = isAnyRGB(c->srcFormat) || c->srcFormat==AV_PIX_FMT_PAL8 ? 13 : ++ (desc->comp[0].depth - 1); ++ } else if (desc->flags && AV_PIX_FMT_FLAG_FLOAT) { ++ sh = 15; ++ } ++ if (filterSize == 8) { ++ for (i = 0; i < dstW; i++) { ++ int val = 0; ++ v8i16 src0, filter0; ++ v4i32 src_l, src_r, filter_l, filter_r, out_l, out_r, out; ++ v8i16 zero = { 0 }; ++ ++ src0 = LD_V(v8i16, src + filterPos[i]); ++ filter0 = LD_V(v8i16, filter + (i << 3)); ++ src_r = (v4i32)__msa_ilvr_h(zero, (v8i16)src0); ++ src_l = (v4i32)__msa_ilvl_h(zero, (v8i16)src0); ++ UNPCK_SH_SW(filter0, filter_r, filter_l); ++ out_r = (v4i32)__msa_dotp_s_d(src_r, filter_r); ++ out_l = (v4i32)__msa_dotp_s_d(src_l, filter_l); ++ out = (v4i32)__msa_addv_w(out_r, out_l); ++ val += (__msa_copy_s_w(out, 0) + ++ __msa_copy_s_w(out, 2)); ++ dst[i] = FFMIN(val >> sh, (1 << 15) - 1); ++ } ++ } else if (filterSize == 4) { ++ int len = dstW & (~1); ++ ++ for (i = 0; i < len; i += 2) { ++ v8i16 src1, src2, filter0; ++ v4i32 src1_r, src2_r, filter_r, filter_l; ++ v4i32 out1, out2; ++ int val1 = 0; ++ int val2 = 0; ++ v8i16 zero = {0}; ++ ++ src1 = LD_V(v8i16, src + filterPos[i]); ++ src2 = LD_V(v8i16, src + filterPos[i + 1]); ++ filter0 = LD_V(v8i16, filter + (i << 2)); ++ src1_r = (v4i32)__msa_ilvr_h(zero, src1); ++ src2_r = (v4i32)__msa_ilvr_h(zero, src2); ++ UNPCK_SH_SW(filter0, filter_r, filter_l); ++ out1 = (v4i32)__msa_dotp_s_d(src1_r, filter_r); ++ out2 = (v4i32)__msa_dotp_s_d(src2_r, filter_l); ++ val1 = __msa_copy_s_w(out1, 0) + __msa_copy_s_w(out1, 2); ++ val2 = __msa_copy_s_w(out2, 0) + __msa_copy_s_w(out2, 2); ++ dst[i] = FFMIN(val1 >> sh, (1 << 15) - 1); ++ dst[i + 1] = FFMIN(val2 >> sh, (1 << 15) - 1); ++ } ++ if (i < dstW) { ++ int val = 0; ++ uint8_t *srcPos = src + filterPos[i]; ++ int16_t *filterStart = filter + filterSize * i; ++ ++ for (int j = 0; j < 4; j++) { ++ val += ((int)srcPos[j]) * filterStart[j]; ++ } ++ dst[i] = FFMIN(val >> sh, (1 << 15) - 1); ++ } ++ } else if (filterSize > 8) { ++ int len = filterSize >> 3; ++ int part = len << 3; ++ ++ for (i = 0; i < dstW; i++) { ++ v8i16 src0, filter0; ++ v4i32 src_r, src_l, filter_r, filter_l, out_r, out_l, out; ++ v8i16 zero = { 0 }; ++ uint16_t *srcPos = src + filterPos[i]; ++ int16_t *filterStart = filter + filterSize * i; ++ int j, val = 0; ++ ++ for (j = 0; j < len; j++) { ++ src0 = LD_V(v8i16, srcPos + (j << 3)); ++ filter0 = LD_V(v8i16, filterStart + (j << 3)); ++ src_r = (v4i32)__msa_ilvr_h(zero, (v8i16)src0); ++ src_l = (v4i32)__msa_ilvl_h(zero, (v8i16)src0); ++ UNPCK_SH_SW(filter0, filter_r, filter_l); ++ out_r = (v4i32)__msa_dotp_s_d(src_r, filter_r); ++ out_l = (v4i32)__msa_dotp_s_d(src_l, filter_l); ++ out = (v4i32)__msa_addv_w(out_r, out_l); ++ val += (__msa_copy_s_w(out, 0) + ++ __msa_copy_s_w(out, 2)); ++ } ++ for (j = part; j < filterSize; j++) { ++ val += ((int)srcPos[j]) * filterStart[j]; ++ } ++ dst[i] = FFMIN(val >> sh, (1 << 15) - 1); ++ } ++ } else { ++ for (i = 0; i < dstW; i++) { ++ int val = 0; ++ uint16_t *srcPos = src + filterPos[i]; ++ int16_t *filterStart = filter + filterSize * i; ++ ++ for (int j = 0; j < filterSize; j++) { ++ val += ((int)srcPos[j]) * filterStart[j]; ++ } ++ dst[i] = FFMIN(val >> sh, (1 << 15) - 1); ++ } ++ } ++} ++void ff_yuv2planeX_8_msa(const int16_t *filter, int filterSize, ++ const int16_t **src, uint8_t *dest, int dstW, ++ const uint8_t *dither, int offset) ++{ ++ int i; ++ int len = dstW >> 3; ++ int part = len << 3; ++ for (i = 0; i < len; i++) { ++ int j; ++ v8i16 src0, flags; ++ v4i32 src_l, src_r, filter0; ++ v4i32 val_r = { dither[(i * 8 + 0 + offset) & 7] << 12, ++ dither[(i * 8 + 1 + offset) & 7] << 12, ++ dither[(i * 8 + 2 + offset) & 7] << 12, ++ dither[(i * 8 + 3 + offset) & 7] << 12 }; ++ v4i32 val_l = { dither[(i * 8 + 4 + offset) & 7] << 12, ++ dither[(i * 8 + 5 + offset) & 7] << 12, ++ dither[(i * 8 + 6 + offset) & 7] << 12, ++ dither[(i * 8 + 7 + offset) & 7] << 12 }; ++ v8i16 zero = { 0 }; ++ ++ for (j = 0; j < filterSize; j++) { ++ src0 = LD_V(v8i16, &src[j][i * 8]); ++ filter0 = __msa_fill_w(filter[j]); ++ flags = __msa_clt_s_h(src0, zero); ++ ILVRL_H2_SW(flags, src0, src_r, src_l); ++ val_r += src_r * filter0; ++ val_l += src_l * filter0; ++ } ++ val_r >>= 19; ++ val_l >>= 19; ++ CLIP_SW2_0_255(val_r, val_l); ++ src0 = __msa_pckev_h((v8i16)val_l, (v8i16)val_r); ++ src0 = (v8i16)__msa_pckev_b((v16i8)src0, (v16i8)src0); ++ SD(__msa_copy_s_d((v2i64)src0, 0), dest + i * 8); ++ } ++ for (i = part; i < dstW; i++) { ++ int val = dither[(i + offset) & 7] << 12; ++ int j; ++ for (j = 0; j< filterSize; j++) ++ val += src[j][i] * filter[j]; ++ ++ dest[i] = av_clip_uint8(val >> 19); ++ } ++} ++ ++/*Copy from libswscale/output.c*/ ++static av_always_inline void ++yuv2rgb_write(uint8_t *_dest, int i, int Y1, int Y2, ++ unsigned A1, unsigned A2, ++ const void *_r, const void *_g, const void *_b, int y, ++ enum AVPixelFormat target, int hasAlpha) ++{ ++ if (target == AV_PIX_FMT_ARGB || target == AV_PIX_FMT_RGBA || ++ target == AV_PIX_FMT_ABGR || target == AV_PIX_FMT_BGRA) { ++ uint32_t *dest = (uint32_t *) _dest; ++ const uint32_t *r = (const uint32_t *) _r; ++ const uint32_t *g = (const uint32_t *) _g; ++ const uint32_t *b = (const uint32_t *) _b; ++ ++#if CONFIG_SMALL ++ int sh = hasAlpha ? ((target ==AV_PIX_FMT_RGB32_1 || target == AV_PIX_FMT_BGR32_1) ? 0 : 24) : 0; ++ dest[i * 2 + 0] = r[Y1] + g[Y1] + b[Y1]; ++ dest[i * 2 + 1] = r[Y2] + g[Y2] + b[Y2]; ++#else ++#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1 ++ int sh = (target == AV_PIX_FMT_RGB32_1 || ++ target == AV_PIX_FMT_BGR32_1) ? 0 : 24; ++ av_assert2((((r[Y1] + g[Y1] + b[Y1]) >> sh) & 0xFF) == 0xFF); ++#endif ++ dest[i * 2 + 0] = r[Y1] + g[Y1] + b[Y1]; ++ dest[i * 2 + 1] = r[Y2] + g[Y2] + b[Y2]; ++#endif ++ ++ } else if (target == AV_PIX_FMT_RGB565 || target == AV_PIX_FMT_BGR565 || ++ target == AV_PIX_FMT_RGB555 || target == AV_PIX_FMT_BGR555 || ++ target == AV_PIX_FMT_RGB444 || target == AV_PIX_FMT_BGR444) { ++ uint16_t *dest = (uint16_t *) _dest; ++ const uint16_t *r = (const uint16_t *) _r; ++ const uint16_t *g = (const uint16_t *) _g; ++ const uint16_t *b = (const uint16_t *) _b; ++ int dr1, dg1, db1, dr2, dg2, db2; ++ ++ if (target == AV_PIX_FMT_RGB565 || target == AV_PIX_FMT_BGR565) { ++ dr1 = ff_dither_2x2_8[ y & 1 ][0]; ++ dg1 = ff_dither_2x2_4[ y & 1 ][0]; ++ db1 = ff_dither_2x2_8[(y & 1) ^ 1][0]; ++ dr2 = ff_dither_2x2_8[ y & 1 ][1]; ++ dg2 = ff_dither_2x2_4[ y & 1 ][1]; ++ db2 = ff_dither_2x2_8[(y & 1) ^ 1][1]; ++ } ++ ++ dest[i * 2 + 0] = r[Y1 + dr1] + g[Y1 + dg1] + b[Y1 + db1]; ++ dest[i * 2 + 1] = r[Y2 + dr2] + g[Y2 + dg2] + b[Y2 + db2]; ++ } ++} ++ ++static av_always_inline void ++yuv2rgb_X_msa_template(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, int dstW, ++ int y, enum AVPixelFormat target, int hasAlpha) ++{ ++ int i, j; ++ int count = 0; ++ int len = dstW & (~0x07); ++ int len_count = (dstW + 1) >> 1; ++ const void *r, *g, *b; ++ v4i32 headroom = (v4i32)__msa_fill_w(YUVRGB_TABLE_HEADROOM); ++ ++ for (i = 0; i < len; i += 8) { ++ int t = 1 << 18; ++ v8i16 l_src, u_src, v_src; ++ v4i32 lumsrc_r, lumsrc_l, usrc, vsrc, temp; ++ v4i32 y_r, y_l, u, v; ++ ++ y_r = __msa_fill_w(t); ++ y_l = y_r; ++ u = y_r; ++ v = y_r; ++ for (j = 0; j < lumFilterSize; j++) { ++ temp = __msa_fill_w(lumFilter[j]); ++ l_src = LD_V(v8i16, (lumSrc[j] + i)); ++ UNPCK_SH_SW(l_src, lumsrc_r, lumsrc_l); /*can use lsx optimization*/ ++ y_r = __msa_maddv_w(lumsrc_r, temp, y_r); ++ y_l = __msa_maddv_w(lumsrc_l, temp, y_l); ++ } ++ for (j = 0; j < chrFilterSize; j++) { ++ u_src = LD_V(v8i16, (chrUSrc[j] + count)); ++ v_src = LD_V(v8i16, (chrVSrc[j] + count)); ++ UNPCK_R_SH_SW(u_src, usrc); ++ UNPCK_R_SH_SW(v_src, vsrc); ++ temp = __msa_fill_w(chrFilter[j]); ++ u = __msa_maddv_w(usrc, temp, u); ++ v = __msa_maddv_w(vsrc, temp, v); ++ } ++ y_r = __msa_srai_w(y_r, 19); ++ y_l = __msa_srai_w(y_l, 19); ++ u = __msa_srai_w(u, 19); ++ v = __msa_srai_w(v, 19); ++ u = __msa_addv_w(u, headroom); ++ v = __msa_addv_w(v, headroom); ++ for (j = 0; j < 2; j++) { ++ int Y1, Y2, U, V; ++ int m = j * 2; ++ int n = j + 2; ++ ++ Y1 = y_r[m]; ++ Y2 = y_r[m + 1]; ++ U = u[j]; ++ V = v[j]; ++ r = c->table_rV[V]; ++ g = (c->table_gU[U] + c->table_gV[V]); ++ b = c->table_bU[U]; ++ ++ yuv2rgb_write(dest, count + j, Y1, Y2, 0, 0, ++ r, g, b, y, target, 0); ++ Y1 = y_l[m]; ++ Y2 = y_l[m + 1]; ++ U = u[n]; ++ V = v[n]; ++ r = c->table_rV[V]; ++ g = (c->table_gU[U] + c->table_gV[V]); ++ b = c->table_bU[U]; ++ ++ yuv2rgb_write(dest, count + n, Y1, Y2, 0, 0, ++ r, g, b, y, target, 0); ++ } ++ count += 4; ++ } ++ for (count; count < len_count; count++) { ++ int Y1 = 1 << 18; ++ int Y2 = 1 << 18; ++ int U = 1 << 18; ++ int V = 1 << 18; ++ ++ for (j = 0; j < lumFilterSize; j++) { ++ Y1 += lumSrc[j][count * 2] * lumFilter[j]; ++ Y2 += lumSrc[j][count * 2 + 1] * lumFilter[j]; ++ } ++ for (j = 0; j < chrFilterSize; j++) { ++ U += chrUSrc[j][count] * chrFilter[j]; ++ V += chrVSrc[j][count] * chrFilter[j]; ++ } ++ Y1 >>= 19; ++ Y2 >>= 19; ++ U >>= 19; ++ V >>= 19; ++ r = c->table_rV[V + YUVRGB_TABLE_HEADROOM]; ++ g = (c->table_gU[U + YUVRGB_TABLE_HEADROOM] + ++ c->table_gV[V + YUVRGB_TABLE_HEADROOM]); ++ b = c->table_bU[U + YUVRGB_TABLE_HEADROOM]; ++ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, ++ r, g, b, y, target, 0); ++ } ++} ++ ++static av_always_inline void ++yuv2rgb_2_msa_template(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y, ++ enum AVPixelFormat target, int hasAlpha) ++{ ++ const int16_t *buf0 = buf[0], *buf1 = buf[1], ++ *ubuf0 = ubuf[0], *ubuf1 = ubuf[1], ++ *vbuf0 = vbuf[0], *vbuf1 = vbuf[1], ++ *abuf0 = NULL, ++ *abuf1 = NULL; ++ int yalpha1 = 4096 - yalpha; ++ int uvalpha1 = 4096 - uvalpha; ++ int i, count = 0; ++ int len = dstW & (~0x07); ++ int len_count = (dstW + 1) >> 1; ++ const void *r, *g, *b; ++ v4i32 v_yalpha1 = (v4i32)__msa_fill_w(yalpha1); ++ v4i32 v_uvalpha1 = (v4i32)__msa_fill_w(uvalpha1); ++ v4i32 v_yalpha = (v4i32)__msa_fill_w(yalpha); ++ v4i32 v_uvalpha = (v4i32)__msa_fill_w(uvalpha); ++ v4i32 headroom = (v4i32)__msa_fill_w(YUVRGB_TABLE_HEADROOM); ++ ++ for (i = 0; i < len; i += 8) { ++ v8i16 src_y, src_u, src_v; ++ v4i32 y0_r, y0_l, u0, v0; ++ v4i32 y1_r, y1_l, u1, v1; ++ v4i32 y_r, y_l, u, v; ++ ++ src_y = LD_V(v8i16, buf0 + i); ++ src_u = LD_V(v8i16, ubuf0 + count); ++ src_v = LD_V(v8i16, vbuf0 + count); ++ UNPCK_SH_SW(src_y, y0_r, y0_l); ++ UNPCK_R_SH_SW(src_u, u0); ++ UNPCK_R_SH_SW(src_v, v0); ++ src_y = LD_V(v8i16, buf1 + i); ++ src_u = LD_V(v8i16, ubuf1 + count); ++ src_v = LD_V(v8i16, vbuf1 + count); ++ UNPCK_SH_SW(src_y, y1_r, y1_l); ++ UNPCK_R_SH_SW(src_u, u1); ++ UNPCK_R_SH_SW(src_v, v1); ++ y0_r = __msa_mulv_w(y0_r, v_yalpha1); ++ y0_l = __msa_mulv_w(y0_l, v_yalpha1); ++ u0 = __msa_mulv_w(u0, v_uvalpha1); ++ v0 = __msa_mulv_w(v0, v_uvalpha1); ++ y_r = __msa_maddv_w(y1_r, v_yalpha, y0_r); ++ y_l = __msa_maddv_w(y1_l, v_yalpha, y0_l); ++ u = __msa_maddv_w(u1, v_uvalpha, u0); ++ v = __msa_maddv_w(v1, v_uvalpha, v0); ++ y_r = __msa_srai_w(y_r, 19); ++ y_l = __msa_srai_w(y_l, 19); ++ u = __msa_srai_w(u, 19); ++ v = __msa_srai_w(v, 19); ++ u = __msa_addv_w(u, headroom); ++ v = __msa_addv_w(v, headroom); ++ for (int j = 0; j < 2; j++) { ++ int Y1, Y2, U, V; ++ int m = j * 2; ++ int n = j + 2; ++ ++ Y1 = y_r[m]; ++ Y2 = y_r[m + 1]; ++ U = u[j]; ++ V = v[j]; ++ r = c->table_rV[V]; ++ g = (c->table_gU[U] + c->table_gV[V]); ++ b = c->table_bU[U]; ++ ++ yuv2rgb_write(dest, count + j, Y1, Y2, 0, 0, ++ r, g, b, y, target, 0); ++ Y1 = y_l[m]; ++ Y2 = y_l[m + 1]; ++ U = u[n]; ++ V = v[n]; ++ r = c->table_rV[V]; ++ g = (c->table_gU[U] + c->table_gV[V]); ++ b = c->table_bU[U]; ++ ++ yuv2rgb_write(dest, count + n, Y1, Y2, 0, 0, ++ r, g, b, y, target, 0); ++ } ++ count += 4; ++ } ++ ++ for (count; count < len_count; count++) { ++ int Y1 = (buf0[count * 2] * yalpha1 + ++ buf1[count * 2] * yalpha) >> 19; ++ int Y2 = (buf0[count * 2 + 1] * yalpha1 + ++ buf1[count * 2 + 1] * yalpha) >> 19; ++ int U = (ubuf0[count] * uvalpha1 + ubuf1[count] * uvalpha) >> 19; ++ int V = (vbuf0[count] * uvalpha1 + vbuf1[count] * uvalpha) >> 19; ++ ++ r = c->table_rV[V + YUVRGB_TABLE_HEADROOM], ++ g = (c->table_gU[U + YUVRGB_TABLE_HEADROOM] + ++ c->table_gV[V + YUVRGB_TABLE_HEADROOM]), ++ b = c->table_bU[U + YUVRGB_TABLE_HEADROOM]; ++ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, ++ r, g, b, y, target, 0); ++ } ++} ++ ++static av_always_inline void ++yuv2rgb_1_msa_template(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y, enum AVPixelFormat target, ++ int hasAlpha) ++{ ++ const int16_t *ubuf0 = ubuf[0], *vbuf0 = vbuf[0]; ++ int i, j; ++ const void *r, *g, *b; ++ int len = dstW & (~0x07); ++ int len_count = (dstW + 1) >> 1; ++ ++ if (uvalpha < 2048) { ++ int count = 0; ++ v4i32 headroom = (v4i32)__msa_fill_w(YUVRGB_TABLE_HEADROOM); ++ v4i32 bias_64 = (v4i32)__msa_fill_w(64); ++ ++ for (i = 0; i < len; i += 8) { ++ v8i16 src_y, src_u, src_v; ++ v4i32 y_r, y_l, u, v; ++ ++ src_y = LD_V(v8i16, buf0 + i); ++ src_u = LD_V(v8i16, ubuf0 + count); ++ src_v = LD_V(v8i16, vbuf0 + count); ++ UNPCK_SH_SW(src_y, y_r, y_l); ++ UNPCK_R_SH_SW(src_u, u); ++ UNPCK_R_SH_SW(src_v, v); ++ y_r = __msa_addv_w(y_r, bias_64); ++ y_l = __msa_addv_w(y_l, bias_64); ++ u = __msa_addv_w(u, bias_64); ++ v = __msa_addv_w(v, bias_64); ++ y_r = __msa_srai_w(y_r, 7); ++ y_l = __msa_srai_w(y_l, 7); ++ u = __msa_srai_w(u, 7); ++ v = __msa_srai_w(v, 7); ++ u = __msa_addv_w(u, headroom); ++ v = __msa_addv_w(v, headroom); ++ for (j = 0; j < 2; j++) { ++ int Y1, Y2, U, V; ++ int m = j * 2; ++ int n = j + 2; ++ ++ Y1 = y_r[m]; ++ Y2 = y_r[m + 1]; ++ U = u[j]; ++ V = v[j]; ++ r = c->table_rV[V]; ++ g = (c->table_gU[U] + c->table_gV[V]); ++ b = c->table_bU[U]; ++ ++ yuv2rgb_write(dest, count + j, Y1, Y2, 0, 0, ++ r, g, b, y, target, 0); ++ Y1 = y_l[m]; ++ Y2 = y_l[m + 1]; ++ U = u[n]; ++ V = v[n]; ++ r = c->table_rV[V]; ++ g = (c->table_gU[U] + c->table_gV[V]); ++ b = c->table_bU[U]; ++ ++ yuv2rgb_write(dest, count + n, Y1, Y2, 0, 0, ++ r, g, b, y, target, 0); ++ } ++ count += 4; ++ } ++ for (count; count < len_count; count++) { ++ int Y1 = (buf0[count * 2 ] + 64) >> 7; ++ int Y2 = (buf0[count * 2 + 1] + 64) >> 7; ++ int U = (ubuf0[count] + 64) >> 7; ++ int V = (vbuf0[count] + 64) >> 7; ++ ++ r = c->table_rV[V + YUVRGB_TABLE_HEADROOM], ++ g = (c->table_gU[U + YUVRGB_TABLE_HEADROOM] + ++ c->table_gV[V + YUVRGB_TABLE_HEADROOM]), ++ b = c->table_bU[U + YUVRGB_TABLE_HEADROOM]; ++ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, ++ r, g, b, y, target, 0); ++ } ++ } else { ++ const int16_t *ubuf1 = ubuf[1], *vbuf1 = vbuf[1]; ++ int count = 0; ++ v4i32 headroom = (v4i32)__msa_fill_w(YUVRGB_TABLE_HEADROOM); ++ v4i32 bias_64 = (v4i32)__msa_fill_w(64); ++ v4i32 bias_128 = (v4i32)__msa_fill_w(128); ++ ++ for (i = 0; i < len; i += 8) { ++ v8i16 src_y, src_u, src_v; ++ v4i32 y_r, y_l, u0, v0, u1, v1, u, v; ++ ++ src_y = LD_V(v8i16, buf0 + i); ++ src_u = LD_V(v8i16, ubuf0 + count); ++ src_v = LD_V(v8i16, vbuf0 + count); ++ UNPCK_SH_SW(src_y, y_r, y_l); ++ UNPCK_R_SH_SW(src_u, u0); ++ UNPCK_R_SH_SW(src_v, v0); ++ src_u = LD_V(v8i16, ubuf1 + count); ++ src_v = LD_V(v8i16, vbuf1 + count); ++ UNPCK_R_SH_SW(src_u, u1); ++ UNPCK_R_SH_SW(src_v, v1); ++ ++ u = __msa_addv_w(u0, u1); ++ v = __msa_addv_w(v0, v1); ++ y_r = __msa_addv_w(y_r, bias_64); ++ y_l = __msa_addv_w(y_l, bias_64); ++ u = __msa_addv_w(u, bias_128); ++ v = __msa_addv_w(v, bias_128); ++ y_r = __msa_srai_w(y_r, 7); ++ y_l = __msa_srai_w(y_l, 7); ++ u = __msa_srai_w(u, 8); ++ v = __msa_srai_w(v, 8); ++ u = __msa_addv_w(u, headroom); ++ v = __msa_addv_w(v, headroom); ++ for (j = 0; j < 2; j++) { ++ int Y1, Y2, U, V; ++ int m = j * 2; ++ int n = j + 2; ++ ++ Y1 = y_r[m]; ++ Y2 = y_r[m + 1]; ++ U = u[j]; ++ V = v[j]; ++ r = c->table_rV[V]; ++ g = (c->table_gU[U] + c->table_gV[V]); ++ b = c->table_bU[U]; ++ ++ yuv2rgb_write(dest, count + j, Y1, Y2, 0, 0, ++ r, g, b, y, target, 0); ++ Y1 = y_l[m]; ++ Y2 = y_l[m + 1]; ++ U = u[n]; ++ V = v[n]; ++ r = c->table_rV[V]; ++ g = (c->table_gU[U] + c->table_gV[V]); ++ b = c->table_bU[U]; ++ ++ yuv2rgb_write(dest, count + n, Y1, Y2, 0, 0, ++ r, g, b, y, target, 0); ++ } ++ count += 4; ++ } ++ for (count; count < len_count; count++) { ++ int Y1 = (buf0[count * 2 ] + 64) >> 7; ++ int Y2 = (buf0[count * 2 + 1] + 64) >> 7; ++ int U = (ubuf0[count] + ubuf1[count] + 128) >> 8; ++ int V = (vbuf0[count] + vbuf1[count] + 128) >> 8; ++ ++ r = c->table_rV[V + YUVRGB_TABLE_HEADROOM], ++ g = (c->table_gU[U + YUVRGB_TABLE_HEADROOM] + ++ c->table_gV[V + YUVRGB_TABLE_HEADROOM]), ++ b = c->table_bU[U + YUVRGB_TABLE_HEADROOM]; ++ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, ++ r, g, b, y, target, 0); ++ } ++ } ++} ++ ++#define YUV2RGBWRAPPERX(name, base, ext, fmt, hasAlpha) \ ++void name ## ext ## _X_msa(SwsContext *c, const int16_t *lumFilter, \ ++ const int16_t **lumSrc, int lumFilterSize, \ ++ const int16_t *chrFilter, const int16_t **chrUSrc, \ ++ const int16_t **chrVSrc, int chrFilterSize, \ ++ const int16_t **alpSrc, uint8_t *dest, int dstW, \ ++ int y) \ ++{ \ ++ name ## base ## _X_msa_template(c, lumFilter, lumSrc, lumFilterSize, \ ++ chrFilter, chrUSrc, chrVSrc, chrFilterSize,\ ++ alpSrc, dest, dstW, y, fmt, hasAlpha); \ ++} ++ ++#define YUV2RGBWRAPPERX2(name, base, ext, fmt, hasAlpha) \ ++YUV2RGBWRAPPERX(name, base, ext, fmt, hasAlpha) \ ++void name ## ext ## _2_msa(SwsContext *c, const int16_t *buf[2], \ ++ const int16_t *ubuf[2], const int16_t *vbuf[2], \ ++ const int16_t *abuf[2], uint8_t *dest, int dstW, \ ++ int yalpha, int uvalpha, int y) \ ++{ \ ++ name ## base ## _2_msa_template(c, buf, ubuf, vbuf, abuf, dest, \ ++ dstW, yalpha, uvalpha, y, fmt, hasAlpha); \ ++} ++ ++#define YUV2RGBWRAPPER(name, base, ext, fmt, hasAlpha) \ ++YUV2RGBWRAPPERX2(name, base, ext, fmt, hasAlpha) \ ++void name ## ext ## _1_msa(SwsContext *c, const int16_t *buf0, \ ++ const int16_t *ubuf[2], const int16_t *vbuf[2], \ ++ const int16_t *abuf0, uint8_t *dest, int dstW, \ ++ int uvalpha, int y) \ ++{ \ ++ name ## base ## _1_msa_template(c, buf0, ubuf, vbuf, abuf0, dest, \ ++ dstW, uvalpha, y, fmt, hasAlpha); \ ++} ++ ++ ++#if CONFIG_SMALL ++#else ++#if CONFIG_SWSCALE_ALPHA ++#endif ++YUV2RGBWRAPPER(yuv2rgb,, x32_1, AV_PIX_FMT_RGB32_1, 0) ++YUV2RGBWRAPPER(yuv2rgb,, x32, AV_PIX_FMT_RGB32, 0) ++#endif ++YUV2RGBWRAPPER(yuv2rgb,, 16, AV_PIX_FMT_RGB565, 0) ++ ++// This function is copied from libswscale/output.c ++static av_always_inline void yuv2rgb_write_full(SwsContext *c, ++ uint8_t *dest, int i, int R, int A, int G, int B, ++ int y, enum AVPixelFormat target, int hasAlpha, int err[4]) ++{ ++ int isrgb8 = target == AV_PIX_FMT_BGR8 || target == AV_PIX_FMT_RGB8; ++ ++ if ((R | G | B) & 0xC0000000) { ++ R = av_clip_uintp2(R, 30); ++ G = av_clip_uintp2(G, 30); ++ B = av_clip_uintp2(B, 30); ++ } ++ ++ switch(target) { ++ case AV_PIX_FMT_ARGB: ++ dest[0] = hasAlpha ? A : 255; ++ dest[1] = R >> 22; ++ dest[2] = G >> 22; ++ dest[3] = B >> 22; ++ break; ++ case AV_PIX_FMT_RGB24: ++ dest[0] = R >> 22; ++ dest[1] = G >> 22; ++ dest[2] = B >> 22; ++ break; ++ case AV_PIX_FMT_RGBA: ++ dest[0] = R >> 22; ++ dest[1] = G >> 22; ++ dest[2] = B >> 22; ++ dest[3] = hasAlpha ? A : 255; ++ break; ++ case AV_PIX_FMT_ABGR: ++ dest[0] = hasAlpha ? A : 255; ++ dest[1] = B >> 22; ++ dest[2] = G >> 22; ++ dest[3] = R >> 22; ++ break; ++ case AV_PIX_FMT_BGR24: ++ dest[0] = B >> 22; ++ dest[1] = G >> 22; ++ dest[2] = R >> 22; ++ break; ++ case AV_PIX_FMT_BGRA: ++ dest[0] = B >> 22; ++ dest[1] = G >> 22; ++ dest[2] = R >> 22; ++ dest[3] = hasAlpha ? A : 255; ++ break; ++ case AV_PIX_FMT_BGR4_BYTE: ++ case AV_PIX_FMT_RGB4_BYTE: ++ case AV_PIX_FMT_BGR8: ++ case AV_PIX_FMT_RGB8: ++ { ++ int r,g,b; ++ ++ switch (c->dither) { ++ default: ++ case SWS_DITHER_AUTO: ++ case SWS_DITHER_ED: ++ R >>= 22; ++ G >>= 22; ++ B >>= 22; ++ R += (7*err[0] + 1*c->dither_error[0][i] + 5*c->dither_error[0][i+1] + 3*c->dither_error[0][i+2])>>4; ++ G += (7*err[1] + 1*c->dither_error[1][i] + 5*c->dither_error[1][i+1] + 3*c->dither_error[1][i+2])>>4; ++ B += (7*err[2] + 1*c->dither_error[2][i] + 5*c->dither_error[2][i+1] + 3*c->dither_error[2][i+2])>>4; ++ c->dither_error[0][i] = err[0]; ++ c->dither_error[1][i] = err[1]; ++ c->dither_error[2][i] = err[2]; ++ r = R >> (isrgb8 ? 5 : 7); ++ g = G >> (isrgb8 ? 5 : 6); ++ b = B >> (isrgb8 ? 6 : 7); ++ r = av_clip(r, 0, isrgb8 ? 7 : 1); ++ g = av_clip(g, 0, isrgb8 ? 7 : 3); ++ b = av_clip(b, 0, isrgb8 ? 3 : 1); ++ err[0] = R - r*(isrgb8 ? 36 : 255); ++ err[1] = G - g*(isrgb8 ? 36 : 85); ++ err[2] = B - b*(isrgb8 ? 85 : 255); ++ break; ++ case SWS_DITHER_A_DITHER: ++ if (isrgb8) { ++ /* see http://pippin.gimp.org/a_dither/ for details/origin */ ++#define A_DITHER(u,v) (((((u)+((v)*236))*119)&0xff)) ++ r = (((R >> 19) + A_DITHER(i,y) -96)>>8); ++ g = (((G >> 19) + A_DITHER(i + 17,y) - 96)>>8); ++ b = (((B >> 20) + A_DITHER(i + 17*2,y) -96)>>8); ++ r = av_clip_uintp2(r, 3); ++ g = av_clip_uintp2(g, 3); ++ b = av_clip_uintp2(b, 2); ++ } else { ++ r = (((R >> 21) + A_DITHER(i,y)-256)>>8); ++ g = (((G >> 19) + A_DITHER(i + 17,y)-256)>>8); ++ b = (((B >> 21) + A_DITHER(i + 17*2,y)-256)>>8); ++ r = av_clip_uintp2(r, 1); ++ g = av_clip_uintp2(g, 2); ++ b = av_clip_uintp2(b, 1); ++ } ++ break; ++ case SWS_DITHER_X_DITHER: ++ if (isrgb8) { ++ /* see http://pippin.gimp.org/a_dither/ for details/origin */ ++#define X_DITHER(u,v) (((((u)^((v)*237))*181)&0x1ff)/2) ++ r = (((R >> 19) + X_DITHER(i,y) - 96)>>8); ++ g = (((G >> 19) + X_DITHER(i + 17,y) - 96)>>8); ++ b = (((B >> 20) + X_DITHER(i + 17*2,y) - 96)>>8); ++ r = av_clip_uintp2(r, 3); ++ g = av_clip_uintp2(g, 3); ++ b = av_clip_uintp2(b, 2); ++ } else { ++ r = (((R >> 21) + X_DITHER(i,y)-256)>>8); ++ g = (((G >> 19) + X_DITHER(i + 17,y)-256)>>8); ++ b = (((B >> 21) + X_DITHER(i + 17*2,y)-256)>>8); ++ r = av_clip_uintp2(r, 1); ++ g = av_clip_uintp2(g, 2); ++ b = av_clip_uintp2(b, 1); ++ } ++ ++ break; ++ } ++ ++ if(target == AV_PIX_FMT_BGR4_BYTE) { ++ dest[0] = r + 2*g + 8*b; ++ } else if(target == AV_PIX_FMT_RGB4_BYTE) { ++ dest[0] = b + 2*g + 8*r; ++ } else if(target == AV_PIX_FMT_BGR8) { ++ dest[0] = r + 8*g + 64*b; ++ } else if(target == AV_PIX_FMT_RGB8) { ++ dest[0] = b + 4*g + 32*r; ++ } else ++ av_assert2(0); ++ break; } ++ } ++} ++ ++#define yuvTorgb_setup \ ++ int y_offset = c->yuv2rgb_y_offset; \ ++ int y_coeff = c->yuv2rgb_y_coeff; \ ++ int v2r_coe = c->yuv2rgb_v2r_coeff; \ ++ int v2g_coe = c->yuv2rgb_v2g_coeff; \ ++ int u2g_coe = c->yuv2rgb_u2g_coeff; \ ++ int u2b_coe = c->yuv2rgb_u2b_coeff; \ ++ v4i32 offset = __msa_fill_w(y_offset); \ ++ v4i32 coeff = __msa_fill_w(y_coeff); \ ++ v4i32 v2r = __msa_fill_w(v2r_coe); \ ++ v4i32 v2g = __msa_fill_w(v2g_coe); \ ++ v4i32 u2g = __msa_fill_w(u2g_coe); \ ++ v4i32 u2b = __msa_fill_w(u2b_coe); \ ++ ++ ++#define yuvTorgb \ ++ y_r -= offset; \ ++ y_l -= offset; \ ++ y_r *= coeff; \ ++ y_l *= coeff; \ ++ y_r += y_temp; \ ++ y_l += y_temp; \ ++ R_r = __msa_maddv_w(v_r, v2r, y_r); \ ++ R_l = __msa_maddv_w(v_l, v2r, y_l); \ ++ v_r = __msa_maddv_w(v_r, v2g, y_r); \ ++ v_l = __msa_maddv_w(v_l, v2g, y_l); \ ++ G_r = __msa_maddv_w(u_r, u2g, v_r); \ ++ G_l = __msa_maddv_w(u_l, u2g, v_l); \ ++ B_r = __msa_maddv_w(u_r, u2b, y_r); \ ++ B_l = __msa_maddv_w(u_l, u2b, y_l); \ ++ ++ ++static av_always_inline void ++yuv2rgb_full_X_msa_template(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, ++ int dstW, int y, enum AVPixelFormat target, int hasAlpha) ++{ ++ int i, j, B, G, R, A; ++ int step = (target == AV_PIX_FMT_RGB24 || target == AV_PIX_FMT_BGR24) ? 3 : 4; ++ int err[4] = {0}; ++ int a_temp = 1 << 18; //init to silence warning ++ int templ = 1 << 9; ++ int tempc = templ - (128 << 19); ++ int len = dstW & (~0x07); ++ int ytemp = 1 << 21; ++ v4i32 y_temp = __msa_fill_w(ytemp); ++ yuvTorgb_setup ++ ++ if( target == AV_PIX_FMT_BGR4_BYTE || target == AV_PIX_FMT_RGB4_BYTE ++ || target == AV_PIX_FMT_BGR8 || target == AV_PIX_FMT_RGB8) ++ step = 1; ++ ++ for (i = 0; i < len; i += 8) { ++ int m = i + 4; ++ v8i16 l_src, u_src, v_src; ++ v4i32 lum_r, lum_l, usrc_r, usrc_l, vsrc_r, vsrc_l; ++ v4i32 y_r, y_l, u_r, u_l, v_r, v_l, temp; ++ v4i32 R_r, R_l, G_r, G_l, B_r, B_l; ++ ++ y_r = y_l = (v4i32)__msa_fill_w(templ); ++ u_r = u_l = v_r = v_l = (v4i32)__msa_fill_w(tempc); ++ for (j = 0; j < lumFilterSize; j++) { ++ temp = __msa_fill_w(lumFilter[j]); ++ l_src = LD_V(v8i16, (lumSrc[j] + i)); ++ UNPCK_SH_SW(l_src, lum_r, lum_l); ++ y_l = __msa_maddv_w(lum_l, temp, y_l); ++ y_r = __msa_maddv_w(lum_r, temp, y_r); ++ } ++ for (j = 0; j < chrFilterSize; j++) { ++ temp = __msa_fill_w(chrFilter[j]); ++ u_src = LD_V(v8i16, (chrUSrc[j] + i)); ++ v_src = LD_V(v8i16, (chrVSrc[j] + i)); ++ UNPCK_SH_SW(u_src, usrc_r, usrc_l); ++ UNPCK_SH_SW(v_src, vsrc_r, vsrc_l); ++ u_l = __msa_maddv_w(usrc_l, temp, u_l); ++ u_r = __msa_maddv_w(usrc_r, temp, u_r); ++ v_l = __msa_maddv_w(vsrc_l, temp, v_l); ++ v_r = __msa_maddv_w(vsrc_r, temp, v_r); ++ } ++ y_r = __msa_srai_w(y_r, 10); ++ y_l = __msa_srai_w(y_l, 10); ++ u_r = __msa_srai_w(u_r, 10); ++ u_l = __msa_srai_w(u_l, 10); ++ v_r = __msa_srai_w(v_r, 10); ++ v_l = __msa_srai_w(v_l, 10); ++ yuvTorgb ++ ++ if (hasAlpha) { ++ v8i16 a_src; ++ v4i32 asrc_r, asrc_l, a_r, a_l; ++ ++ a_r = a_l = __msa_fill_w(a_temp); ++ for (j = 0; j < lumFilterSize; j++) { ++ temp = __msa_fill_w(lumFilter[j]); ++ a_src = LD_V(v8i16, (alpSrc[j] + i)); ++ UNPCK_SH_SW(a_src, asrc_r, asrc_l); ++ a_l = __msa_maddv_w(asrc_l, temp, a_l); ++ a_r = __msa_maddv_w(asrc_r, temp, a_r); ++ } ++ a_l = __msa_srai_w(a_l, 19); ++ a_r = __msa_srai_w(a_r, 19); ++ for (j = 0; j < 4; j++) { ++ R = R_r[j]; ++ G = G_r[j]; ++ B = B_r[j]; ++ A = a_r[j]; ++ if (A & 0x100) ++ A = av_clip_uint8(A); ++ yuv2rgb_write_full(c, dest, i + j, R, A, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ for (j = 0; j < 4; j++) { ++ R = R_l[j]; ++ G = G_l[j]; ++ B = B_l[j]; ++ A = a_l[j]; ++ if (A & 0x100) ++ A = av_clip_uint8(A); ++ yuv2rgb_write_full(c, dest, m + j, R, A, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ } else { ++ for (j = 0; j < 4; j++) { ++ R = R_r[j]; ++ G = G_r[j]; ++ B = B_r[j]; ++ yuv2rgb_write_full(c, dest, i + j, R, 0, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ for (j = 0; j < 4; j++) { ++ R = R_l[j]; ++ G = G_l[j]; ++ B = B_l[j]; ++ yuv2rgb_write_full(c, dest, m + j, R, 0, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ } ++ } ++ for (i; i < dstW; i++) { ++ int Y = templ; ++ int V, U = V = tempc; ++ ++ A = 0; ++ for (j = 0; j < lumFilterSize; j++) { ++ Y += lumSrc[j][i] * lumFilter[j]; ++ } ++ for (j = 0; j < chrFilterSize; j++) { ++ U += chrUSrc[j][i] * chrFilter[j]; ++ V += chrVSrc[j][i] * chrFilter[j]; ++ ++ } ++ Y >>= 10; ++ U >>= 10; ++ V >>= 10; ++ if (hasAlpha) { ++ A = 1 << 18; ++ for (j = 0; j < lumFilterSize; j++) { ++ A += alpSrc[j][i] * lumFilter[j]; ++ } ++ A >>= 19; ++ if (A & 0x100) ++ A = av_clip_uint8(A); ++ } ++ Y -= y_offset; ++ Y *= y_coeff; ++ Y += ytemp; ++ R = (unsigned)Y + V * v2r_coe; ++ G = (unsigned)Y + V * v2g_coe + U * u2g_coe; ++ B = (unsigned)Y + U * u2b_coe; ++ yuv2rgb_write_full(c, dest, i, R, A, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ c->dither_error[0][i] = err[0]; ++ c->dither_error[1][i] = err[1]; ++ c->dither_error[2][i] = err[2]; ++} ++ ++static av_always_inline void ++yuv2rgb_full_2_msa_template(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y, ++ enum AVPixelFormat target, int hasAlpha) ++{ ++ const int16_t *buf0 = buf[0], *buf1 = buf[1], ++ *ubuf0 = ubuf[0], *ubuf1 = ubuf[1], ++ *vbuf0 = vbuf[0], *vbuf1 = vbuf[1], ++ *abuf0 = hasAlpha ? abuf[0] : NULL, ++ *abuf1 = hasAlpha ? abuf[1] : NULL; ++ int yalpha1 = 4096 - yalpha; ++ int uvalpha1 = 4096 - uvalpha; ++ int uvtemp = 128 << 19; ++ int atemp = 1 << 18; ++ int i, j, R, G, B, A; ++ int step = (target == AV_PIX_FMT_RGB24 || target == AV_PIX_FMT_BGR24) ? 3 : 4; ++ int err[4] = {0}; ++ int len = dstW & (~0x07); ++ int ytemp = 1 << 21; ++ v4i32 uvalp1 = (v4i32)__msa_fill_w(uvalpha1); ++ v4i32 yalp1 = (v4i32)__msa_fill_w(yalpha1); ++ v4i32 uvalp = (v4i32)__msa_fill_w(uvalpha); ++ v4i32 yalp = (v4i32)__msa_fill_w(yalpha); ++ v4i32 uv = (v4i32)__msa_fill_w(uvtemp); ++ v4i32 a_bias = (v4i32)__msa_fill_w(atemp); ++ v4i32 y_temp = __msa_fill_w(ytemp); ++ yuvTorgb_setup ++ ++ av_assert2(yalpha <= 4096U); ++ av_assert2(uvalpha <= 4096U); ++ ++ if( target == AV_PIX_FMT_BGR4_BYTE || target == AV_PIX_FMT_RGB4_BYTE ++ || target == AV_PIX_FMT_BGR8 || target == AV_PIX_FMT_RGB8) ++ step = 1; ++ ++ for (i = 0; i < len; i += 8) { ++ int m = i + 4; ++ v8i16 b0, b1, ub0, ub1, vb0, vb1; ++ v4i32 b0_r, b0_l, b1_r, b1_l, ub0_r, ub0_l, ub1_r, ub1_l, vb0_r, vb0_l, vb1_r, vb1_l; ++ v4i32 y_r, y_l, u_r, u_l, v_r, v_l; ++ v4i32 R_r, R_l, G_r, G_l, B_r, B_l; ++ ++ b0 = LD_V(v8i16, (buf0 + i)); ++ b1 = LD_V(v8i16, (buf1 + i)); ++ ub0 = LD_V(v8i16, (ubuf0 + i)); ++ ub1 = LD_V(v8i16, (ubuf1 + i)); ++ vb0 = LD_V(v8i16, (vbuf0 + i)); ++ vb1 = LD_V(v8i16, (vbuf1 + i)); ++ UNPCK_SH_SW(b0, b0_r, b0_l); ++ UNPCK_SH_SW(b1, b1_r, b1_l); ++ UNPCK_SH_SW(ub0, ub0_r, ub0_l); ++ UNPCK_SH_SW(ub1, ub1_r, ub1_l); ++ UNPCK_SH_SW(vb0, vb0_r, vb0_l); ++ UNPCK_SH_SW(vb1, vb1_r, vb1_l); ++ y_r = b0_r * yalp1; ++ y_l = b0_l * yalp1; ++ y_r = __msa_maddv_w(b1_r, yalp, y_r); ++ y_l = __msa_maddv_w(b1_l, yalp, y_l); ++ u_r = ub0_r * uvalp1; ++ u_l = ub0_l * uvalp1; ++ u_r = __msa_maddv_w(ub1_r, uvalp, u_r); ++ u_l = __msa_maddv_w(ub1_l, uvalp, u_l); ++ v_r = vb0_r * uvalp1; ++ v_l = vb0_l * uvalp1; ++ v_r = __msa_maddv_w(vb1_r, uvalp, v_r); ++ v_l = __msa_maddv_w(vb1_l, uvalp, v_l); ++ u_r -= uv; ++ u_l -= uv; ++ v_r -= uv; ++ v_l -= uv; ++ y_r = __msa_srai_w(y_r, 10); ++ y_l = __msa_srai_w(y_l, 10); ++ u_r = __msa_srai_w(u_r, 10); ++ u_l = __msa_srai_w(u_l, 10); ++ v_r = __msa_srai_w(v_r, 10); ++ v_l = __msa_srai_w(v_l, 10); ++ yuvTorgb ++ ++ if (hasAlpha) { ++ v8i16 a0, a1; ++ v4i32 a_r, a_l, a1_r, a1_l; ++ ++ a0 = LD_V(v8i16, (abuf0 + i)); ++ a1 = LD_V(v8i16, (abuf1 + i)); ++ UNPCK_SH_SW(a0, a_r, a_l); ++ UNPCK_SH_SW(a1, a1_r, a1_l); ++ a_r *= yalp1; ++ a_l *= yalp1; ++ a_r = __msa_maddv_w(a1_r, yalp, a_r); ++ a_l = __msa_maddv_w(a1_l, yalp, a_l); ++ a_r += a_bias; ++ a_l += a_bias; ++ a_r = __msa_srai_w(a_r, 19); ++ a_l = __msa_srai_w(a_l, 19); ++ for (j = 0; j < 4; j++) { ++ R = R_r[j]; ++ G = G_r[j]; ++ B = B_r[j]; ++ A = a_r[j]; ++ if (A & 0x100) ++ A = av_clip_uint8(A); ++ yuv2rgb_write_full(c, dest, i + j, R, A, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ for (j = 0; j < 4; j++) { ++ R = R_l[j]; ++ G = G_l[j]; ++ B = B_l[j]; ++ A = a_l[j]; ++ if (A & 0x100) ++ A = av_clip_uint8(A); ++ yuv2rgb_write_full(c, dest, m + j, R, A, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ } else { ++ for (j = 0; j < 4; j++) { ++ R = R_r[j]; ++ G = G_r[j]; ++ B = B_r[j]; ++ yuv2rgb_write_full(c, dest, i + j, R, 0, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ for (j = 0; j < 4; j++) { ++ R = R_l[j]; ++ G = G_l[j]; ++ B = B_l[j]; ++ yuv2rgb_write_full(c, dest, m + j, R, 0, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ } ++ } ++ for (i; i < dstW; i++){ ++ int Y = ( buf0[i] * yalpha1 + buf1[i] * yalpha ) >> 10; //FIXME rounding ++ int U = (ubuf0[i] * uvalpha1 + ubuf1[i] * uvalpha- uvtemp) >> 10; ++ int V = (vbuf0[i] * uvalpha1 + vbuf1[i] * uvalpha- uvtemp) >> 10; ++ ++ A = 0; ++ if (hasAlpha){ ++ A = (abuf0[i] * yalpha1 + abuf1[i] * yalpha + atemp) >> 19; ++ if (A & 0x100) ++ A = av_clip_uint8(A); ++ } ++ ++ Y -= y_offset; ++ Y *= y_coeff; ++ Y += ytemp; ++ R = (unsigned)Y + V * v2r_coe; ++ G = (unsigned)Y + V * v2g_coe + U * u2g_coe; ++ B = (unsigned)Y + U * u2b_coe; ++ yuv2rgb_write_full(c, dest, i, R, A, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ c->dither_error[0][i] = err[0]; ++ c->dither_error[1][i] = err[1]; ++ c->dither_error[2][i] = err[2]; ++} ++ ++static av_always_inline void ++yuv2rgb_full_1_msa_template(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y, enum AVPixelFormat target, ++ int hasAlpha) ++{ ++ const int16_t *ubuf0 = ubuf[0], *vbuf0 = vbuf[0]; ++ int i, j, B, G, R, A; ++ int step = (target == AV_PIX_FMT_RGB24 || target == AV_PIX_FMT_BGR24) ? 3 : 4; ++ int err[4] = {0}; ++ int len = dstW & (~0x07); ++ int ytemp = 1 << 21; ++ v4i32 bias = __msa_fill_w(64); ++ v4i32 y_temp = __msa_fill_w(ytemp); ++ yuvTorgb_setup ++ ++ if( target == AV_PIX_FMT_BGR4_BYTE || target == AV_PIX_FMT_RGB4_BYTE ++ || target == AV_PIX_FMT_BGR8 || target == AV_PIX_FMT_RGB8) ++ step = 1; ++ if (uvalpha < 2048) { ++ int uvtemp = 128 << 7; ++ v4i32 uv = __msa_fill_w(uvtemp); ++ ++ for (i = 0; i < len; i += 8) { ++ int m = i + 4; ++ v8i16 b, ub, vb; ++ v4i32 y_r, y_l, u_r, u_l, v_r, v_l; ++ v4i32 R_r, R_l, G_r, G_l, B_r, B_l; ++ ++ b = LD_V(v8i16, (buf0 + i)); ++ ub = LD_V(v8i16, (ubuf0 + i)); ++ vb = LD_V(v8i16, (vbuf0 + i)); ++ UNPCK_SH_SW(b, y_r, y_l); ++ UNPCK_SH_SW(ub, u_r, u_l); ++ UNPCK_SH_SW(vb, v_r, v_l); ++ y_r = __msa_slli_w(y_r, 2); ++ y_l = __msa_slli_w(y_l, 2); ++ u_r -= uv; ++ u_l -= uv; ++ v_r -= uv; ++ v_l -= uv; ++ u_r = __msa_slli_w(u_r, 2); ++ u_l = __msa_slli_w(u_l, 2); ++ v_r = __msa_slli_w(v_r, 2); ++ v_l = __msa_slli_w(v_l, 2); ++ yuvTorgb ++ ++ if(hasAlpha) { ++ v8i16 a_src; ++ v4i32 a_r, a_l; ++ ++ a_src = LD_V(v8i16, (abuf0 + i)); ++ UNPCK_SH_SW(a_src, a_r, a_l); ++ a_r += bias; ++ a_l += bias; ++ a_r = __msa_srai_w(a_r, 7); ++ a_l = __msa_srai_w(a_l, 7); ++ for (j = 0; j < 4; j++) { ++ R = R_r[j]; ++ G = G_r[j]; ++ B = B_r[j]; ++ A = a_r[j]; ++ if (A & 0x100) ++ A = av_clip_uint8(A); ++ yuv2rgb_write_full(c, dest, i + j, R, A, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ for (j = 0; j < 4; j++) { ++ R = R_l[j]; ++ G = G_l[j]; ++ B = B_l[j]; ++ A = a_l[j]; ++ if (A & 0x100) ++ A = av_clip_uint8(A); ++ yuv2rgb_write_full(c, dest, m + j, R, A, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ } else { ++ for (j = 0; j < 4; j++) { ++ R = R_r[j]; ++ G = G_r[j]; ++ B = B_r[j]; ++ yuv2rgb_write_full(c, dest, i + j, R, 0, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ for (j = 0; j < 4; j++) { ++ R = R_l[j]; ++ G = G_l[j]; ++ B = B_l[j]; ++ yuv2rgb_write_full(c, dest, m + j, R, 0, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ } ++ } ++ for (i; i < dstW; i++) { ++ int Y = buf0[i] << 2; ++ int U = (ubuf0[i] - uvtemp) << 2; ++ int V = (vbuf0[i] - uvtemp) << 2; ++ ++ A = 0; ++ if(hasAlpha) { ++ A = (abuf0[i] + 64) >> 7; ++ if (A & 0x100) ++ A = av_clip_uint8(A); ++ } ++ Y -= y_offset; ++ Y *= y_coeff; ++ Y += ytemp; ++ R = (unsigned)Y + V * v2r_coe; ++ G = (unsigned)Y + V * v2g_coe + U * u2g_coe; ++ B = (unsigned)Y + U * u2b_coe; ++ yuv2rgb_write_full(c, dest, i, R, A, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ } else { ++ const int16_t *ubuf1 = ubuf[1], *vbuf1 = vbuf[1]; ++ int uvtemp = 128 << 8; ++ v4i32 uv = __msa_fill_w(uvtemp); ++ ++ for (i = 0; i < len; i += 8) { ++ v8i16 b, ub, vb; ++ v4i32 y_r, y_l, u_r, u_l, v_r, v_l; ++ v4i32 u1_r, u1_l, v1_r, v1_l; ++ v4i32 R_r, R_l, G_r, G_l, B_r, B_l; ++ int m = i + 4; ++ ++ b = LD_V(v8i16, (buf0 + i)); ++ ub = LD_V(v8i16, (ubuf0 + i)); ++ vb = LD_V(v8i16, (vbuf0 + i)); ++ UNPCK_SH_SW(b, y_r, y_l); ++ UNPCK_SH_SW(ub, u_r, u_l); ++ UNPCK_SH_SW(vb, v_r, v_l); ++ y_r = __msa_slli_w(y_r, 2); ++ y_l = __msa_slli_w(y_l, 2); ++ u_r -= uv; ++ u_l -= uv; ++ v_r -= uv; ++ v_l -= uv; ++ ub = LD_V(v8i16, (ubuf1 + i)); ++ vb = LD_V(v8i16, (vbuf1 + i)); ++ UNPCK_SH_SW(ub, u1_r, u1_l); ++ UNPCK_SH_SW(vb, v1_r, v1_l); ++ u_r += u1_r; ++ u_l += u1_l; ++ v_r += v1_r; ++ v_l += v1_l; ++ u_r = __msa_slli_w(u_r, 1); ++ u_l = __msa_slli_w(u_l, 1); ++ yuvTorgb ++ ++ if(hasAlpha) { ++ v8i16 a_src; ++ v4i32 a_r, a_l; ++ ++ a_src = LD_V(v8i16, (abuf0 + i)); ++ UNPCK_SH_SW(a_src, a_r, a_l); ++ a_r += bias; ++ a_l += bias; ++ a_r = __msa_srai_w(a_r, 7); ++ a_l = __msa_srai_w(a_l, 7); ++ for (j = 0; j < 4; j++) { ++ R = R_r[j]; ++ G = G_r[j]; ++ B = B_r[j]; ++ A = a_r[j]; ++ if (A & 0x100) ++ A = av_clip_uint8(A); ++ yuv2rgb_write_full(c, dest, i + j, R, A, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ for (j = 0; j < 4; j++) { ++ R = R_l[j]; ++ G = G_l[j]; ++ B = B_l[j]; ++ A = a_l[j]; ++ if (A & 0x100) ++ A = av_clip_uint8(A); ++ yuv2rgb_write_full(c, dest, m + j, R, A, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ } else { ++ for (j = 0; j < 4; j++) { ++ R = R_r[j]; ++ G = G_r[j]; ++ B = B_r[j]; ++ yuv2rgb_write_full(c, dest, i + j, R, 0, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ for (j = 0; j < 4; j++) { ++ R = R_l[j]; ++ G = G_l[j]; ++ B = B_l[j]; ++ yuv2rgb_write_full(c, dest, m + j, R, 0, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ } ++ } ++ for (i; i < dstW; i++) { ++ int Y = buf0[i] << 2; ++ int U = (ubuf0[i] + ubuf1[i] - uvtemp) << 1; ++ int V = (vbuf0[i] + vbuf1[i] - uvtemp) << 1; ++ ++ A = 0; ++ if(hasAlpha) { ++ A = (abuf0[i] + 64) >> 7; ++ if (A & 0x100) ++ A = av_clip_uint8(A); ++ } ++ Y -= y_offset; ++ Y *= y_coeff; ++ Y += ytemp; ++ R = (unsigned)Y + V * v2r_coe; ++ G = (unsigned)Y + V * v2g_coe + U * u2g_coe; ++ B = (unsigned)Y + U * u2b_coe; ++ yuv2rgb_write_full(c, dest, i, R, A, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ } ++ c->dither_error[0][i] = err[0]; ++ c->dither_error[1][i] = err[1]; ++ c->dither_error[2][i] = err[2]; ++} ++#if CONFIG_SMALL ++YUV2RGBWRAPPER(yuv2, rgb_full, bgra32_full, AV_PIX_FMT_BGRA, CONFIG_SWSCALE_ALPHA && c->needAlpha) ++YUV2RGBWRAPPER(yuv2, rgb_full, abgr32_full, AV_PIX_FMT_ABGR, CONFIG_SWSCALE_ALPHA && c->needAlpha) ++YUV2RGBWRAPPER(yuv2, rgb_full, rgba32_full, AV_PIX_FMT_RGBA, CONFIG_SWSCALE_ALPHA && c->needAlpha) ++YUV2RGBWRAPPER(yuv2, rgb_full, argb32_full, AV_PIX_FMT_ARGB, CONFIG_SWSCALE_ALPHA && c->needAlpha) ++#else ++#if CONFIG_SWSCALE_ALPHA ++YUV2RGBWRAPPER(yuv2, rgb_full, bgra32_full, AV_PIX_FMT_BGRA, 1) ++YUV2RGBWRAPPER(yuv2, rgb_full, abgr32_full, AV_PIX_FMT_ABGR, 1) ++YUV2RGBWRAPPER(yuv2, rgb_full, rgba32_full, AV_PIX_FMT_RGBA, 1) ++YUV2RGBWRAPPER(yuv2, rgb_full, argb32_full, AV_PIX_FMT_ARGB, 1) ++#endif ++YUV2RGBWRAPPER(yuv2, rgb_full, bgrx32_full, AV_PIX_FMT_BGRA, 0) ++YUV2RGBWRAPPER(yuv2, rgb_full, xbgr32_full, AV_PIX_FMT_ABGR, 0) ++YUV2RGBWRAPPER(yuv2, rgb_full, rgbx32_full, AV_PIX_FMT_RGBA, 0) ++YUV2RGBWRAPPER(yuv2, rgb_full, xrgb32_full, AV_PIX_FMT_ARGB, 0) ++#endif ++YUV2RGBWRAPPER(yuv2, rgb_full, bgr24_full, AV_PIX_FMT_BGR24, 0) ++YUV2RGBWRAPPER(yuv2, rgb_full, rgb24_full, AV_PIX_FMT_RGB24, 0) ++ ++YUV2RGBWRAPPER(yuv2, rgb_full, bgr4_byte_full, AV_PIX_FMT_BGR4_BYTE, 0) ++YUV2RGBWRAPPER(yuv2, rgb_full, rgb4_byte_full, AV_PIX_FMT_RGB4_BYTE, 0) ++YUV2RGBWRAPPER(yuv2, rgb_full, bgr8_full, AV_PIX_FMT_BGR8, 0) ++YUV2RGBWRAPPER(yuv2, rgb_full, rgb8_full, AV_PIX_FMT_RGB8, 0) ++#undef yuvTorgb ++#undef yuvTorgb_setup ++ ++void planar_rgb_to_uv_msa(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4], ++ int width, int32_t *rgb2yuv) ++{ ++ uint16_t *dstU = (uint16_t *)_dstU; ++ uint16_t *dstV = (uint16_t *)_dstV; ++ int i; ++ int len = width & (~0x07); ++ int set = 0x4001<<(RGB2YUV_SHIFT - 7); ++ int32_t tem_ru = rgb2yuv[RU_IDX], tem_gu = rgb2yuv[GU_IDX]; ++ int32_t tem_bu = rgb2yuv[BU_IDX]; ++ int32_t tem_rv = rgb2yuv[RV_IDX], tem_gv = rgb2yuv[GV_IDX]; ++ int32_t tem_bv = rgb2yuv[BV_IDX]; ++ int shift = RGB2YUV_SHIFT - 6; ++ v4i32 ru, gu, bu, rv, gv, bv; ++ v4i32 temp = __msa_fill_w(set); ++ v4i32 sra = __msa_fill_w(shift); ++ v16i8 zero = {0}; ++ ++ ru = __msa_fill_w(tem_ru); ++ gu = __msa_fill_w(tem_gu); ++ bu = __msa_fill_w(tem_bu); ++ rv = __msa_fill_w(tem_rv); ++ gv = __msa_fill_w(tem_gv); ++ bv = __msa_fill_w(tem_bv); ++ for (i = 0; i < len; i += 8) { ++ v16i8 _g, _b, _r; ++ v8i16 t_g, t_b, t_r; ++ v4i32 g_r, g_l, b_r, b_l, r_r, r_l; ++ v4i32 v_r, v_l, u_r, u_l; ++ ++ _g = LD_V(v16i8, (src[0] + i)); ++ _b = LD_V(v16i8, (src[1] + i)); ++ _r = LD_V(v16i8, (src[2] + i)); ++ t_g = (v8i16)__msa_ilvr_b((v16i8)zero, (v16i8)_g); ++ t_b = (v8i16)__msa_ilvr_b((v16i8)zero, (v16i8)_b); ++ t_r = (v8i16)__msa_ilvr_b((v16i8)zero, (v16i8)_r); ++ g_r = (v4i32)__msa_ilvr_h((v8i16)zero, (v8i16)t_g); ++ g_l = (v4i32)__msa_ilvl_h((v8i16)zero, (v8i16)t_g); ++ b_r = (v4i32)__msa_ilvr_h((v8i16)zero, (v8i16)t_b); ++ b_l = (v4i32)__msa_ilvl_h((v8i16)zero, (v8i16)t_b); ++ r_r = (v4i32)__msa_ilvr_h((v8i16)zero, (v8i16)t_r); ++ r_l = (v4i32)__msa_ilvl_h((v8i16)zero, (v8i16)t_r); ++ v_r = (v4i32)__msa_mulv_w(r_r, rv); ++ v_l = (v4i32)__msa_mulv_w(r_l, rv); ++ v_r = (v4i32)__msa_maddv_w(g_r, gv, v_r); ++ v_l = (v4i32)__msa_maddv_w(g_l, gv, v_l); ++ v_r = (v4i32)__msa_maddv_w(b_r, bv, v_r); ++ v_l = (v4i32)__msa_maddv_w(b_l, bv, v_l); ++ u_r = (v4i32)__msa_mulv_w(r_r, ru); ++ u_l = (v4i32)__msa_mulv_w(r_l, ru); ++ u_r = (v4i32)__msa_maddv_w(g_r, gu, u_r); ++ u_l = (v4i32)__msa_maddv_w(g_l, gu, u_l); ++ u_r = (v4i32)__msa_maddv_w(b_r, bu, u_r); ++ u_l = (v4i32)__msa_maddv_w(b_l, bu, u_l); ++ v_r = (v4i32)__msa_addv_w(v_r, temp); ++ v_l = (v4i32)__msa_addv_w(v_l, temp); ++ u_r = (v4i32)__msa_addv_w(u_r, temp); ++ u_l = (v4i32)__msa_addv_w(u_l, temp); ++ v_r = (v4i32)__msa_sra_w(v_r, sra); ++ v_l = (v4i32)__msa_sra_w(v_l, sra); ++ u_r = (v4i32)__msa_sra_w(u_r, sra); ++ u_l = (v4i32)__msa_sra_w(u_l, sra); ++ for (int j = 0; j < 4; j++) { ++ int m = i + j; ++ ++ dstU[m] = u_r[j]; ++ dstV[m] = v_r[j]; ++ dstU[m + 4] = u_l[j]; ++ dstV[m + 4] = v_l[j]; ++ } ++ } ++ for (i; i < width; i++) { ++ int g = src[0][i]; ++ int b = src[1][i]; ++ int r = src[2][i]; ++ ++ dstU[i] = (tem_ru * r + tem_gu * g + tem_bu * b + set) >> shift; ++ dstV[i] = (tem_rv * r + tem_gv * g + tem_bv * b + set) >> shift; ++ } ++} ++ ++void planar_rgb_to_y_msa(uint8_t *_dst, const uint8_t *src[4], int width, ++ int32_t *rgb2yuv) ++{ ++ uint16_t *dst = (uint16_t *)_dst; ++ int32_t tem_ry = rgb2yuv[RY_IDX], tem_gy = rgb2yuv[GY_IDX]; ++ int32_t tem_by = rgb2yuv[BY_IDX]; ++ int len = width & (~0x07); ++ int shift = (RGB2YUV_SHIFT-6); ++ int set = 0x801 << (RGB2YUV_SHIFT - 7); ++ int i; ++ v4i32 temp = (v4i32)__msa_fill_w(set); ++ v4i32 sra = (v4i32)__msa_fill_w(shift); ++ v4i32 ry = (v4i32)__msa_fill_w(tem_ry); ++ v4i32 gy = (v4i32)__msa_fill_w(tem_gy); ++ v4i32 by = (v4i32)__msa_fill_w(tem_by); ++ v16i8 zero = {0}; ++ ++ for (i = 0; i < len; i += 8) { ++ v16i8 _g, _b, _r; ++ v8i16 t_g, t_b, t_r; ++ v4i32 g_r, g_l, b_r, b_l, r_r, r_l; ++ v4i32 out_r, out_l; ++ ++ _g = LD_V(v16i8, src[0] + i); ++ _b = LD_V(v16i8, src[1] + i); ++ _r = LD_V(v16i8, src[2] + i); ++ t_g = (v8i16)__msa_ilvr_b((v16i8)zero, (v16i8)_g); ++ t_b = (v8i16)__msa_ilvr_b((v16i8)zero, (v16i8)_b); ++ t_r = (v8i16)__msa_ilvr_b((v16i8)zero, (v16i8)_r); ++ g_r = (v4i32)__msa_ilvr_h((v8i16)zero, (v8i16)t_g); ++ g_l = (v4i32)__msa_ilvl_h((v8i16)zero, (v8i16)t_g); ++ b_r = (v4i32)__msa_ilvr_h((v8i16)zero, (v8i16)t_b); ++ b_l = (v4i32)__msa_ilvl_h((v8i16)zero, (v8i16)t_b); ++ r_r = (v4i32)__msa_ilvr_h((v8i16)zero, (v8i16)t_r); ++ r_l = (v4i32)__msa_ilvl_h((v8i16)zero, (v8i16)t_r); ++ out_r = (v4i32)__msa_mulv_w(r_r, ry); ++ out_l = (v4i32)__msa_mulv_w(r_l, ry); ++ out_r = (v4i32)__msa_maddv_w(g_r, gy, out_r); ++ out_l = (v4i32)__msa_maddv_w(g_l, gy, out_l); ++ out_r = (v4i32)__msa_maddv_w(b_r, by, out_r); ++ out_l = (v4i32)__msa_maddv_w(b_l, by, out_l); ++ out_r = (v4i32)__msa_addv_w(out_r, temp); ++ out_l = (v4i32)__msa_addv_w(out_l, temp); ++ out_r = (v4i32)__msa_sra_w(out_r, sra); ++ out_l = (v4i32)__msa_sra_w(out_l, sra); ++ for (int j = 0; j < 4; j++) { ++ int m = i + j; ++ dst[m] = out_r[j]; ++ dst[m + 4] = out_l[j]; ++ } ++ } ++ for (i; i < width; i++) { ++ int g = src[0][i]; ++ int b = src[1][i]; ++ int r = src[2][i]; ++ ++ dst[i] = (tem_ry * r + tem_gy * g + tem_by * b + set) >> shift; ++ } ++} +diff --git a/libswscale/rgb2rgb.c b/libswscale/rgb2rgb.c +index eab8e6aebb..b9cc922ec7 100644 +--- a/libswscale/rgb2rgb.c ++++ b/libswscale/rgb2rgb.c +@@ -139,6 +139,10 @@ av_cold void ff_sws_rgb2rgb_init(void) + rgb2rgb_init_c(); + if (ARCH_X86) + rgb2rgb_init_x86(); ++ if (ARCH_MIPS) ++ rgb2rgb_init_mips(); ++ if (ARCH_LOONGARCH) ++ rgb2rgb_init_loongarch(); + } + + void rgb32to24(const uint8_t *src, uint8_t *dst, int src_size) +diff --git a/libswscale/rgb2rgb.h b/libswscale/rgb2rgb.h +index 3569254df9..c092f52a68 100644 +--- a/libswscale/rgb2rgb.h ++++ b/libswscale/rgb2rgb.h +@@ -170,5 +170,7 @@ extern void (*yuyvtoyuv422)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const u + void ff_sws_rgb2rgb_init(void); + + void rgb2rgb_init_x86(void); ++void rgb2rgb_init_mips(void); ++void rgb2rgb_init_loongarch(void); + + #endif /* SWSCALE_RGB2RGB_H */ +diff --git a/libswscale/swscale.c b/libswscale/swscale.c +index 36f7aa9a03..b5d77e7bfc 100644 +--- a/libswscale/swscale.c ++++ b/libswscale/swscale.c +@@ -607,6 +607,10 @@ SwsFunc ff_getSwsFunc(SwsContext *c) + ff_sws_init_swscale_aarch64(c); + if (ARCH_ARM) + ff_sws_init_swscale_arm(c); ++ if (ARCH_MIPS) ++ ff_sws_init_swscale_mips(c); ++ if (ARCH_LOONGARCH) ++ ff_sws_init_swscale_loongarch(c); + + return swscale; + } +diff --git a/libswscale/swscale_internal.h b/libswscale/swscale_internal.h +index 4fa59386a6..1d2932dc43 100644 +--- a/libswscale/swscale_internal.h ++++ b/libswscale/swscale_internal.h +@@ -642,6 +642,7 @@ av_cold void ff_sws_init_range_convert(SwsContext *c); + + SwsFunc ff_yuv2rgb_init_x86(SwsContext *c); + SwsFunc ff_yuv2rgb_init_ppc(SwsContext *c); ++SwsFunc ff_yuv2rgb_init_loongarch(SwsContext *c); + + static av_always_inline int is16BPS(enum AVPixelFormat pix_fmt) + { +@@ -871,6 +872,8 @@ void ff_sws_init_swscale_ppc(SwsContext *c); + void ff_sws_init_swscale_x86(SwsContext *c); + void ff_sws_init_swscale_aarch64(SwsContext *c); + void ff_sws_init_swscale_arm(SwsContext *c); ++void ff_sws_init_swscale_mips(SwsContext *c); ++void ff_sws_init_swscale_loongarch(SwsContext *c); + + void ff_hyscale_fast_c(SwsContext *c, int16_t *dst, int dstWidth, + const uint8_t *src, int srcW, int xInc); +diff --git a/libswscale/utils.c b/libswscale/utils.c +index 2484cdf8d7..2bb32a1661 100644 +--- a/libswscale/utils.c ++++ b/libswscale/utils.c +@@ -53,6 +53,8 @@ + #include "libavutil/ppc/cpu.h" + #include "libavutil/x86/asm.h" + #include "libavutil/x86/cpu.h" ++#include "libavutil/mips/cpu.h" ++#include "libavutil/loongarch/cpu.h" + + // We have to implement deprecated functions until they are removed, this is the + // simplest way to prevent warnings +@@ -589,6 +591,24 @@ static av_cold int initFilter(int16_t **outFilter, int32_t **filterPos, + filterAlign = 1; + } + ++ if (have_msa(cpu_flags)) { ++ int reNum = minFilterSize & (0x07); ++ ++ if (minFilterSize < 5) ++ filterAlign = 4; ++ if (reNum < 3) ++ filterAlign = 1; ++ } ++ ++ if (have_lasx(cpu_flags)) { ++ int reNum = minFilterSize & (0x07); ++ ++ if (minFilterSize < 5) ++ filterAlign = 4; ++ if (reNum < 3) ++ filterAlign = 1; ++ } ++ + if (HAVE_MMX && cpu_flags & AV_CPU_FLAG_MMX) { + // special case for unscaled vertical filtering + if (minFilterSize == 1 && filterAlign == 2) +@@ -1665,7 +1685,9 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter, + { + const int filterAlign = X86_MMX(cpu_flags) ? 4 : + PPC_ALTIVEC(cpu_flags) ? 8 : +- have_neon(cpu_flags) ? 8 : 1; ++ have_neon(cpu_flags) ? 8 : ++ have_lasx(cpu_flags) ? 8 : ++ have_msa(cpu_flags) ? 8 : 1; + + if ((ret = initFilter(&c->hLumFilter, &c->hLumFilterPos, + &c->hLumFilterSize, c->lumXInc, +diff --git a/libswscale/yuv2rgb.c b/libswscale/yuv2rgb.c +index 9604019464..f7edfd3d0c 100644 +--- a/libswscale/yuv2rgb.c ++++ b/libswscale/yuv2rgb.c +@@ -684,6 +684,8 @@ SwsFunc ff_yuv2rgb_get_func_ptr(SwsContext *c) + t = ff_yuv2rgb_init_ppc(c); + if (ARCH_X86) + t = ff_yuv2rgb_init_x86(c); ++ if (ARCH_LOONGARCH) ++ t = ff_yuv2rgb_init_loongarch(c); + + if (t) + return t; +diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c +index ec00723b9b..b68c6b4aa0 100644 +--- a/tests/checkasm/checkasm.c ++++ b/tests/checkasm/checkasm.c +@@ -218,6 +218,9 @@ static const struct { + { "FMA4", "fma4", AV_CPU_FLAG_FMA4 }, + { "AVX2", "avx2", AV_CPU_FLAG_AVX2 }, + { "AVX-512", "avx512", AV_CPU_FLAG_AVX512 }, ++#elif ARCH_LOONGARCH ++ { "LSX", "lsx", AV_CPU_FLAG_LSX }, ++ { "LASX", "lasx", AV_CPU_FLAG_LASX }, + #endif + { NULL } + }; +-- +2.20.1 + diff --git a/package/ffmpeg/0003-Release-4.1.6-1.lnd.6.patch b/package/ffmpeg/0003-Release-4.1.6-1.lnd.6.patch new file mode 100644 index 00000000..be288b04 --- /dev/null +++ b/package/ffmpeg/0003-Release-4.1.6-1.lnd.6.patch @@ -0,0 +1,30020 @@ +From 39ed8565dff31986dee2b332a3147ca73d2c840e Mon Sep 17 00:00:00 2001 +From: Hao Chen +Date: Mon, 18 Oct 2021 17:57:57 +0800 +Subject: [PATCH] Release 4.1.6-1.lnd.6 + +Patch 7752dd6==>f7f7601. + +Change-Id: Iedb389ea2b5df6b4fdd24c7b0ba15cbaf3566560 +--- + libavcodec/loongarch/Makefile | 3 +- + libavcodec/loongarch/h264_deblock_lasx.c | 71 +- + libavcodec/loongarch/h264chroma_lasx.c | 594 +-- + libavcodec/loongarch/h264dsp_lasx.c | 1053 ++++-- + libavcodec/loongarch/h264idct_lasx.c | 219 +- + libavcodec/loongarch/h264qpel_lasx.c | 483 ++- + libavcodec/loongarch/hevc_idct_lsx.c | 387 +- + libavcodec/loongarch/hevc_lpf_sao_lsx.c | 1811 +++++---- + libavcodec/loongarch/hevc_macros_lsx.h | 24 +- + libavcodec/loongarch/hevc_mc_bi_lsx.c | 1777 +++++---- + libavcodec/loongarch/hevc_mc_uni_lsx.c | 681 ++-- + libavcodec/loongarch/hevc_mc_uniw_lsx.c | 103 +- + libavcodec/loongarch/hevcdsp_lsx.c | 2411 ++++++------ + libavcodec/loongarch/hpeldsp_lasx.c | 903 +++-- + libavcodec/loongarch/hpeldsp_lasx.h | 1 + + libavcodec/loongarch/idctdsp_lasx.c | 71 +- + libavcodec/loongarch/simple_idct_lasx.c | 169 +- + libavcodec/loongarch/vc1dsp_lasx.c | 602 +-- + libavcodec/loongarch/vp8_lpf_lsx.c | 228 +- + libavcodec/loongarch/vp8_mc_lsx.c | 951 +++++ + libavcodec/loongarch/vp8dsp_init_loongarch.c | 21 + + libavcodec/loongarch/vp8dsp_loongarch.h | 51 + + libavcodec/loongarch/vp9_idct_lsx.c | 618 ++- + libavcodec/loongarch/vp9_intra_lsx.c | 268 +- + libavcodec/loongarch/vp9_lpf_lsx.c | 621 ++- + libavcodec/loongarch/vp9_mc_lsx.c | 842 +++-- + libavutil/loongarch/generic_macros_lasx.h | 3561 ------------------ + libavutil/loongarch/generic_macros_lsx.h | 670 ---- + libavutil/loongarch/loongson_intrinsics.h | 1881 +++++++++ + libswscale/loongarch/input_lasx.c | 44 +- + libswscale/loongarch/output_lasx.c | 259 +- + libswscale/loongarch/rgb2rgb_lasx.c | 7 +- + libswscale/loongarch/swscale_lasx.c | 663 ++-- + libswscale/loongarch/yuv2rgb_lasx.c | 21 +- + 34 files changed, 10728 insertions(+), 11341 deletions(-) + create mode 100644 libavcodec/loongarch/vp8_mc_lsx.c + delete mode 100644 libavutil/loongarch/generic_macros_lasx.h + delete mode 100644 libavutil/loongarch/generic_macros_lsx.h + create mode 100644 libavutil/loongarch/loongson_intrinsics.h + +diff --git a/libavcodec/loongarch/Makefile b/libavcodec/loongarch/Makefile +index 2a8d7e430f..d82eef4fd0 100644 +--- a/libavcodec/loongarch/Makefile ++++ b/libavcodec/loongarch/Makefile +@@ -27,4 +27,5 @@ LSX-OBJS-$(CONFIG_VP9_DECODER) += loongarch/vp9_mc_lsx.o \ + loongarch/vp9_intra_lsx.o \ + loongarch/vp9_lpf_lsx.o \ + loongarch/vp9_idct_lsx.o +-LSX-OBJS-$(CONFIG_VP8_DECODER) += loongarch/vp8_lpf_lsx.o ++LSX-OBJS-$(CONFIG_VP8_DECODER) += loongarch/vp8_mc_lsx.o \ ++ loongarch/vp8_lpf_lsx.o +diff --git a/libavcodec/loongarch/h264_deblock_lasx.c b/libavcodec/loongarch/h264_deblock_lasx.c +index 73706739a0..886cc66d95 100644 +--- a/libavcodec/loongarch/h264_deblock_lasx.c ++++ b/libavcodec/loongarch/h264_deblock_lasx.c +@@ -21,7 +21,7 @@ + + #include "libavcodec/bit_depth_template.c" + #include "h264dsp_lasx.h" +-#include "libavutil/loongarch/generic_macros_lasx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + + #define H264_LOOP_FILTER_STRENGTH_ITERATION_LASX(edges, step, mask_mv, dir, \ + d_idx, mask_dir) \ +@@ -42,10 +42,10 @@ do { \ + out &= mask_dir; \ + if (!(mask_mv & b_idx)) { \ + if (bidir) { \ +- ref2 = LASX_LD(ref_t + d_idx_12); \ +- ref3 = LASX_LD(ref_t + d_idx_52); \ +- ref0 = LASX_LD(ref_t + 12); \ +- ref1 = LASX_LD(ref_t + 52); \ ++ ref2 = __lasx_xvldx(ref_t, d_idx_12); \ ++ ref3 = __lasx_xvldx(ref_t, d_idx_52); \ ++ ref0 = __lasx_xvld(ref_t, 12); \ ++ ref1 = __lasx_xvld(ref_t, 52); \ + ref2 = __lasx_xvilvl_w(ref3, ref2); \ + ref0 = __lasx_xvilvl_w(ref0, ref0); \ + ref1 = __lasx_xvilvl_w(ref1, ref1); \ +@@ -54,51 +54,53 @@ do { \ + ref1 = __lasx_xvsub_b(ref1, ref3); \ + ref0 = __lasx_xvor_v(ref0, ref1); \ + \ +- tmp2 = LASX_LD(mv_t + d_idx_x4_48); \ +- tmp3 = LASX_LD(mv_t + 48); \ +- tmp4 = LASX_LD(mv_t + 208); \ +- tmp5 = LASX_LD(mv_t + 208 + d_idx_x4); \ +- LASX_PCKEV_Q_2(tmp2, tmp2, tmp5, tmp5, tmp2, tmp5); \ +- LASX_PCKEV_Q(tmp4, tmp3, tmp3); \ ++ tmp2 = __lasx_xvldx(mv_t, d_idx_x4_48); \ ++ tmp3 = __lasx_xvld(mv_t, 48); \ ++ tmp4 = __lasx_xvld(mv_t, 208); \ ++ tmp5 = __lasx_xvld(mv_t + d_idx_x4, 208); \ ++ DUP2_ARG3(__lasx_xvpermi_q, tmp2, tmp2, 0x20, tmp5, tmp5, 0x20, tmp2, tmp5); \ ++ tmp3 = __lasx_xvpermi_q(tmp4, tmp3, 0x20); \ + tmp2 = __lasx_xvsub_h(tmp2, tmp3); \ + tmp5 = __lasx_xvsub_h(tmp5, tmp3); \ +- LASX_SAT_H_2(tmp2, tmp5, tmp2, tmp5, 7); \ +- LASX_PCKEV_B(tmp5, tmp2, tmp0); \ ++ DUP2_ARG2(__lasx_xvsat_h, tmp2, 7, tmp5, 7, tmp2, tmp5); \ ++ tmp0 = __lasx_xvpickev_b(tmp5, tmp2); \ ++ tmp0 = __lasx_xvpermi_d(tmp0, 0xd8); \ + tmp0 = __lasx_xvadd_b(tmp0, cnst_1); \ + tmp0 = __lasx_xvssub_bu(tmp0, cnst_0); \ +- LASX_SAT_H(tmp0, tmp0, 7); \ +- LASX_PCKEV_B(tmp0, tmp0, tmp0); \ +- LASX_PCKOD_D_128SV(tmp0, tmp0, tmp1); \ ++ tmp0 = __lasx_xvsat_h(tmp0, 7); \ ++ tmp0 = __lasx_xvpickev_b(tmp0, tmp0); \ ++ tmp0 = __lasx_xvpermi_d(tmp0, 0xd8); \ ++ tmp1 = __lasx_xvpickod_d(tmp0, tmp0); \ + out = __lasx_xvor_v(ref0, tmp0); \ + tmp1 = __lasx_xvshuf4i_w(tmp1, 0xB1); \ + out = __lasx_xvor_v(out, tmp1); \ + tmp0 = __lasx_xvshuf4i_w(out, 0xB1); \ + out = __lasx_xvmin_bu(out, tmp0); \ + } else { \ +- ref0 = LASX_LD(ref_t + d_idx_12); \ +- ref3 = LASX_LD(ref_t + 12); \ +- tmp2 = LASX_LD(mv_t + d_idx_x4_48); \ +- tmp3 = LASX_LD(mv_t + 48); \ ++ ref0 = __lasx_xvldx(ref_t, d_idx_12); \ ++ ref3 = __lasx_xvld(ref_t, 12); \ ++ tmp2 = __lasx_xvldx(mv_t, d_idx_x4_48); \ ++ tmp3 = __lasx_xvld(mv_t, 48); \ + tmp4 = __lasx_xvsub_h(tmp3, tmp2); \ +- LASX_SAT_H(tmp4, tmp1, 7); \ ++ tmp1 = __lasx_xvsat_h(tmp4, 7); \ + tmp1 = __lasx_xvpickev_b(tmp1, tmp1); \ + tmp1 = __lasx_xvadd_b(tmp1, cnst_1); \ + out = __lasx_xvssub_bu(tmp1, cnst_0); \ +- LASX_SAT_H(out, out, 7); \ ++ out = __lasx_xvsat_h(out, 7); \ + out = __lasx_xvpickev_b(out, out); \ + ref0 = __lasx_xvsub_b(ref3, ref0); \ + out = __lasx_xvor_v(out, ref0); \ + } \ + } \ +- tmp0 = LASX_LD(nnz_t + 12); \ +- tmp1 = LASX_LD(nnz_t + d_idx_12); \ ++ tmp0 = __lasx_xvld(nnz_t, 12); \ ++ tmp1 = __lasx_xvldx(nnz_t, d_idx_12); \ + tmp0 = __lasx_xvor_v(tmp0, tmp1); \ + tmp0 = __lasx_xvmin_bu(tmp0, cnst_2); \ + out = __lasx_xvmin_bu(out, cnst_2); \ + tmp0 = __lasx_xvslli_h(tmp0, 1); \ + tmp0 = __lasx_xvmax_bu(out, tmp0); \ +- LASX_UNPCK_L_HU_BU(tmp0, tmp0); \ +- LASX_ST_D(tmp0, 0, bS_t + dir_x32); \ ++ tmp0 = __lasx_vext2xv_hu_bu(tmp0); \ ++ __lasx_xvstelm_d(tmp0, bS_t + dir_x32, 0, 0); \ + ref_t += step; \ + mv_t += step_x4; \ + nnz_t += step; \ +@@ -124,8 +126,7 @@ void ff_h264_loop_filter_strength_lasx(int16_t bS[2][4][4], uint8_t nnz[40], + cnst_1 = __lasx_xvreplgr2vr_d(cnst4); + cnst_2 = __lasx_xvldi(0x01); + } else { +- cnst_0 = __lasx_xvldi(0x06); +- cnst_1 = __lasx_xvldi(0x03); ++ DUP2_ARG1(__lasx_xvldi, 0x06, 0x03, cnst_0, cnst_1); + cnst_2 = __lasx_xvldi(0x01); + } + step <<= 3; +@@ -134,11 +135,11 @@ void ff_h264_loop_filter_strength_lasx(int16_t bS[2][4][4], uint8_t nnz[40], + H264_LOOP_FILTER_STRENGTH_ITERATION_LASX(edges, step, mask_mv1, 1, -8, zero); + H264_LOOP_FILTER_STRENGTH_ITERATION_LASX(32, 8, mask_mv0, 0, -1, one); + +- LASX_LD_2((int8_t*)bS, 16, tmp0, tmp1); +- LASX_ILVH_D_2_128SV(tmp0, tmp0, tmp1, tmp1, tmp2, tmp3); +- LASX_TRANSPOSE4x4_H_128SV(tmp0, tmp2, tmp1, tmp3, tmp2, tmp3, tmp4, tmp5); +- __lasx_xvstelm_d(tmp2, (int8_t*)bS, 0, 0); +- __lasx_xvstelm_d(tmp3, (int8_t*)bS + 8, 0, 0); +- __lasx_xvstelm_d(tmp4, (int8_t*)bS + 16, 0, 0); +- __lasx_xvstelm_d(tmp5, (int8_t*)bS + 24, 0, 0); ++ DUP2_ARG2(__lasx_xvld, (int8_t*)bS, 0, (int8_t*)bS, 16, tmp0, tmp1); ++ DUP2_ARG2(__lasx_xvilvh_d, tmp0, tmp0, tmp1, tmp1, tmp2, tmp3); ++ LASX_TRANSPOSE4x4_H(tmp0, tmp2, tmp1, tmp3, tmp2, tmp3, tmp4, tmp5); ++ __lasx_xvstelm_d(tmp2, (int8_t*)bS, 0, 0); ++ __lasx_xvstelm_d(tmp3, (int8_t*)bS + 8, 0, 0); ++ __lasx_xvstelm_d(tmp4, (int8_t*)bS + 16, 0, 0); ++ __lasx_xvstelm_d(tmp5, (int8_t*)bS + 24, 0, 0); + } +diff --git a/libavcodec/loongarch/h264chroma_lasx.c b/libavcodec/loongarch/h264chroma_lasx.c +index 4fbe99ba73..82cef77a95 100644 +--- a/libavcodec/loongarch/h264chroma_lasx.c ++++ b/libavcodec/loongarch/h264chroma_lasx.c +@@ -24,7 +24,7 @@ + #include "h264chroma_lasx.h" + #include "libavutil/attributes.h" + #include "libavutil/avassert.h" +-#include "libavutil/loongarch/generic_macros_lasx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + + static const uint8_t chroma_mask_arr[32] = { + 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, +@@ -36,6 +36,8 @@ static av_always_inline void avc_chroma_hv_8x4_lasx(uint8_t *src, uint8_t *dst, + uint32_t coef_hor1, uint32_t coef_ver0, + uint32_t coef_ver1) + { ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; + __m256i src0, src1, src2, src3, src4, out; + __m256i res_hz0, res_hz1, res_hz2, res_vt0, res_vt1; + __m256i mask; +@@ -45,28 +47,31 @@ static av_always_inline void avc_chroma_hv_8x4_lasx(uint8_t *src, uint8_t *dst, + __m256i coeff_vt_vec0 = __lasx_xvreplgr2vr_h(coef_ver0); + __m256i coeff_vt_vec1 = __lasx_xvreplgr2vr_h(coef_ver1); + +- mask = LASX_LD(chroma_mask_arr); +- src0 = LASX_LD(src); +- LASX_LD_4(src + stride, stride, src1, src2, src3, src4); +- LASX_PCKEV_Q_2(src2, src1, src4, src3, src1, src3); +- LASX_SHUF_B_128SV(src0, src0, mask, src0); +- LASX_SHUF_B_2_128SV(src1, src1, src3, src3, mask, mask, src1, src3); +- LASX_DP2_H_BU(src0, coeff_hz_vec, res_hz0); +- LASX_DP2_H_BU(src1, coeff_hz_vec, res_hz1); +- LASX_DP2_H_BU(src3, coeff_hz_vec, res_hz2); ++ DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 0, src, 0, mask, src0); ++ src += stride; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, ++ src1, src2, src3, src4); ++ DUP2_ARG3(__lasx_xvpermi_q, src2, src1, 0x20, src4, src3, 0x20, src1, src3); ++ src0 = __lasx_xvshuf_b(src0, src0, mask); ++ DUP2_ARG3(__lasx_xvshuf_b, src1, src1, mask, src3, src3, mask, src1, src3); ++ DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_hz_vec, src1, coeff_hz_vec, res_hz0, res_hz1); ++ res_hz2 = __lasx_xvdp2_h_bu(src3, coeff_hz_vec); + res_vt0 = __lasx_xvmul_h(res_hz1, coeff_vt_vec0); + res_vt1 = __lasx_xvmul_h(res_hz2, coeff_vt_vec0); +- LASX_PCKEV_Q(res_hz1, res_hz0, res_hz0); ++ res_hz0 = __lasx_xvpermi_q(res_hz1, res_hz0, 0x20); + res_hz1 = __lasx_xvpermi_q(res_hz1, res_hz2, 0x3); + res_hz0 = __lasx_xvmul_h(res_hz0, coeff_vt_vec1); + res_hz1 = __lasx_xvmul_h(res_hz1, coeff_vt_vec1); + res_vt0 = __lasx_xvadd_h(res_vt0, res_hz0); + res_vt1 = __lasx_xvadd_h(res_vt1, res_hz1); +- LASX_SRARI_H_2(res_vt0, res_vt1, res_vt0, res_vt1, 6); ++ DUP2_ARG2(__lasx_xvsrari_h, res_vt0, 6, res_vt1, 6, res_vt0, res_vt1); + res_vt0 = __lasx_xvsat_hu(res_vt0, 7); + res_vt1 = __lasx_xvsat_hu(res_vt1, 7); +- LASX_PCKEV_B_128SV(res_vt1, res_vt0, out); +- LASX_ST_D_4(out, 0, 2, 1, 3, dst, stride); ++ out = __lasx_xvpickev_b(res_vt1, res_vt0); ++ __lasx_xvstelm_d(out, dst, 0, 0); ++ __lasx_xvstelm_d(out, dst + stride, 0, 2); ++ __lasx_xvstelm_d(out, dst + stride_2x, 0, 1); ++ __lasx_xvstelm_d(out, dst + stride_3x, 0, 3); + } + + static av_always_inline void avc_chroma_hv_8x8_lasx(uint8_t *src, uint8_t *dst, +@@ -74,6 +79,9 @@ static av_always_inline void avc_chroma_hv_8x8_lasx(uint8_t *src, uint8_t *dst, + uint32_t coef_hor1, uint32_t coef_ver0, + uint32_t coef_ver1) + { ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; ++ ptrdiff_t stride_4x = stride << 2; + __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8; + __m256i out0, out1; + __m256i res_hz0, res_hz1, res_hz2, res_hz3, res_hz4; +@@ -85,25 +93,26 @@ static av_always_inline void avc_chroma_hv_8x8_lasx(uint8_t *src, uint8_t *dst, + __m256i coeff_vt_vec0 = __lasx_xvreplgr2vr_h(coef_ver0); + __m256i coeff_vt_vec1 = __lasx_xvreplgr2vr_h(coef_ver1); + +- mask = LASX_LD(chroma_mask_arr); +- src0 = LASX_LD(src); +- LASX_LD_8(src + stride, stride, src1, src2, src3, src4, ++ DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 0, src, 0, mask, src0); ++ src += stride; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, ++ src1, src2, src3, src4); ++ src += stride_4x; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, + src5, src6, src7, src8); +- LASX_PCKEV_Q_4(src2, src1, src4, src3, src6, src5, src8, src7, +- src1, src3, src5, src7); +- LASX_SHUF_B_128SV(src0, src0, mask, src0); +- LASX_SHUF_B_4_128SV(src1, src1, src3, src3, src5, src5, src7, src7, +- mask, mask, mask, mask, src1, src3, src5, src7); +- LASX_DP2_H_BU(src0, coeff_hz_vec, res_hz0); +- LASX_DP2_H_BU(src1, coeff_hz_vec, res_hz1); +- LASX_DP2_H_BU(src3, coeff_hz_vec, res_hz2); +- LASX_DP2_H_BU(src5, coeff_hz_vec, res_hz3); +- LASX_DP2_H_BU(src7, coeff_hz_vec, res_hz4); ++ DUP4_ARG3(__lasx_xvpermi_q, src2, src1, 0x20, src4, src3, 0x20, src6, src5, 0x20, ++ src8, src7, 0x20, src1, src3, src5, src7); ++ src0 = __lasx_xvshuf_b(src0, src0, mask); ++ DUP4_ARG3(__lasx_xvshuf_b, src1, src1, mask, src3, src3, mask, src5, src5, mask, src7, ++ src7, mask, src1, src3, src5, src7); ++ DUP4_ARG2(__lasx_xvdp2_h_bu, src0, coeff_hz_vec, src1, coeff_hz_vec, src3, ++ coeff_hz_vec, src5, coeff_hz_vec, res_hz0, res_hz1, res_hz2, res_hz3); ++ res_hz4 = __lasx_xvdp2_h_bu(src7, coeff_hz_vec); + res_vt0 = __lasx_xvmul_h(res_hz1, coeff_vt_vec0); + res_vt1 = __lasx_xvmul_h(res_hz2, coeff_vt_vec0); + res_vt2 = __lasx_xvmul_h(res_hz3, coeff_vt_vec0); + res_vt3 = __lasx_xvmul_h(res_hz4, coeff_vt_vec0); +- LASX_PCKEV_Q(res_hz1, res_hz0, res_hz0); ++ res_hz0 = __lasx_xvpermi_q(res_hz1, res_hz0, 0x20); + res_hz1 = __lasx_xvpermi_q(res_hz1, res_hz2, 0x3); + res_hz2 = __lasx_xvpermi_q(res_hz2, res_hz3, 0x3); + res_hz3 = __lasx_xvpermi_q(res_hz3, res_hz4, 0x3); +@@ -115,20 +124,29 @@ static av_always_inline void avc_chroma_hv_8x8_lasx(uint8_t *src, uint8_t *dst, + res_vt1 = __lasx_xvadd_h(res_vt1, res_hz1); + res_vt2 = __lasx_xvadd_h(res_vt2, res_hz2); + res_vt3 = __lasx_xvadd_h(res_vt3, res_hz3); +- LASX_SRARI_H_4(res_vt0, res_vt1, res_vt2, res_vt3, +- res_vt0, res_vt1, res_vt2, res_vt3, 6); ++ DUP4_ARG2(__lasx_xvsrari_h, res_vt0, 6, res_vt1, 6, res_vt2, 6, res_vt3, 6, ++ res_vt0, res_vt1, res_vt2, res_vt3); + res_vt0 = __lasx_xvsat_hu(res_vt0, 7); + res_vt1 = __lasx_xvsat_hu(res_vt1, 7); + res_vt2 = __lasx_xvsat_hu(res_vt2, 7); + res_vt3 = __lasx_xvsat_hu(res_vt3, 7); +- LASX_PCKEV_B_2_128SV(res_vt1, res_vt0, res_vt3, res_vt2, out0, out1); +- LASX_ST_D_4(out0, 0, 2, 1, 3, dst, stride); +- LASX_ST_D_4(out1, 0, 2, 1, 3, dst + stride * 4, stride); ++ DUP2_ARG2(__lasx_xvpickev_b, res_vt1, res_vt0, res_vt3, res_vt2, out0, out1); ++ __lasx_xvstelm_d(out0, dst, 0, 0); ++ __lasx_xvstelm_d(out0, dst + stride, 0, 2); ++ __lasx_xvstelm_d(out0, dst + stride_2x, 0, 1); ++ __lasx_xvstelm_d(out0, dst + stride_3x, 0, 3); ++ dst += stride_4x; ++ __lasx_xvstelm_d(out1, dst, 0, 0); ++ __lasx_xvstelm_d(out1, dst + stride, 0, 2); ++ __lasx_xvstelm_d(out1, dst + stride_2x, 0, 1); ++ __lasx_xvstelm_d(out1, dst + stride_3x, 0, 3); + } + + static av_always_inline void avc_chroma_hz_8x4_lasx(uint8_t *src, uint8_t *dst, + ptrdiff_t stride, uint32_t coeff0, uint32_t coeff1) + { ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; + __m256i src0, src1, src2, src3, out; + __m256i res0, res1; + __m256i mask; +@@ -136,24 +154,31 @@ static av_always_inline void avc_chroma_hz_8x4_lasx(uint8_t *src, uint8_t *dst, + __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); + __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); + +- mask = LASX_LD(chroma_mask_arr); +- LASX_LD_4(src, stride, src0, src1, src2, src3); +- LASX_PCKEV_Q_2(src1, src0, src3, src2, src0, src2); +- LASX_SHUF_B_2_128SV(src0, src0, src2, src2, mask, mask, src0, src2); +- LASX_DP2_H_BU(src0, coeff_vec, res0); +- LASX_DP2_H_BU(src2, coeff_vec, res1); ++ mask = __lasx_xvld(chroma_mask_arr, 0); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, ++ src0, src1, src2, src3); ++ DUP2_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src0, src2); ++ DUP2_ARG3(__lasx_xvshuf_b, src0, src0, mask, src2, src2, mask, src0, src2); ++ DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, res0, res1); + res0 = __lasx_xvslli_h(res0, 3); + res1 = __lasx_xvslli_h(res1, 3); +- LASX_SRARI_H_2(res0, res1, res0, res1, 6); ++ DUP2_ARG2(__lasx_xvsrari_h, res0, 6, res1, 6, res0, res1); + res0 = __lasx_xvsat_hu(res0, 7); + res1 = __lasx_xvsat_hu(res1, 7); +- LASX_PCKEV_B_128SV(res1, res0, out); +- LASX_ST_D_4(out, 0, 2, 1, 3, dst, stride); ++ out = __lasx_xvpickev_b(res1, res0); ++ __lasx_xvstelm_d(out, dst, 0, 0); ++ __lasx_xvstelm_d(out, dst + stride, 0, 2); ++ __lasx_xvstelm_d(out, dst + stride_2x, 0, 1); ++ __lasx_xvstelm_d(out, dst + stride_3x, 0, 3); ++ + } + + static av_always_inline void avc_chroma_hz_8x8_lasx(uint8_t *src, uint8_t *dst, + ptrdiff_t stride, uint32_t coeff0, uint32_t coeff1) + { ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; ++ ptrdiff_t stride_4x = stride << 2; + __m256i src0, src1, src2, src3, src4, src5, src6, src7; + __m256i out0, out1; + __m256i res0, res1, res2, res3; +@@ -162,29 +187,37 @@ static av_always_inline void avc_chroma_hz_8x8_lasx(uint8_t *src, uint8_t *dst, + __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); + __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); + +- mask = LASX_LD(chroma_mask_arr); +- LASX_LD_8(src, stride, src0, src1, src2, src3, src4, src5, src6, src7); +- LASX_PCKEV_Q_4(src1, src0, src3, src2, src5, src4, src7, src6, +- src0, src2, src4, src6); +- LASX_SHUF_B_4_128SV(src0, src0, src2, src2, src4, src4, src6, src6, +- mask, mask, mask, mask, src0, src2, src4, src6); +- LASX_DP2_H_BU(src0, coeff_vec, res0); +- LASX_DP2_H_BU(src2, coeff_vec, res1); +- LASX_DP2_H_BU(src4, coeff_vec, res2); +- LASX_DP2_H_BU(src6, coeff_vec, res3); ++ mask = __lasx_xvld(chroma_mask_arr, 0); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, ++ src0, src1, src2, src3); ++ src += stride_4x; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, ++ src4, src5, src6, src7); ++ DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src5, src4, 0x20, ++ src7, src6, 0x20, src0, src2, src4, src6); ++ DUP4_ARG3(__lasx_xvshuf_b, src0, src0, mask, src2, src2, mask, src4, src4, mask, ++ src6, src6, mask, src0, src2, src4, src6); ++ DUP4_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, src4, coeff_vec, src6, ++ coeff_vec, res0, res1, res2, res3); + res0 = __lasx_xvslli_h(res0, 3); + res1 = __lasx_xvslli_h(res1, 3); + res2 = __lasx_xvslli_h(res2, 3); + res3 = __lasx_xvslli_h(res3, 3); +- LASX_SRARI_H_4(res0, res1, res2, res3, +- res0, res1, res2, res3, 6); ++ DUP4_ARG2(__lasx_xvsrari_h, res0, 6, res1, 6, res2, 6, res3, 6, res0, res1, res2, res3); + res0 = __lasx_xvsat_hu(res0, 7); + res1 = __lasx_xvsat_hu(res1, 7); + res2 = __lasx_xvsat_hu(res2, 7); + res3 = __lasx_xvsat_hu(res3, 7); +- LASX_PCKEV_B_2_128SV(res1, res0, res3, res2, out0, out1); +- LASX_ST_D_4(out0, 0, 2, 1, 3, dst, stride); +- LASX_ST_D_4(out1, 0, 2, 1, 3, dst + stride * 4, stride) ++ DUP2_ARG2(__lasx_xvpickev_b, res1, res0, res3, res2, out0, out1); ++ __lasx_xvstelm_d(out0, dst, 0, 0); ++ __lasx_xvstelm_d(out0, dst + stride, 0, 2); ++ __lasx_xvstelm_d(out0, dst + stride_2x, 0, 1); ++ __lasx_xvstelm_d(out0, dst + stride_3x, 0, 3); ++ dst += stride_4x; ++ __lasx_xvstelm_d(out1, dst, 0, 0); ++ __lasx_xvstelm_d(out1, dst + stride, 0, 2); ++ __lasx_xvstelm_d(out1, dst + stride_2x, 0, 1); ++ __lasx_xvstelm_d(out1, dst + stride_3x, 0, 3); + } + + static av_always_inline void avc_chroma_hz_nonmult_lasx(uint8_t *src, +@@ -192,6 +225,9 @@ static av_always_inline void avc_chroma_hz_nonmult_lasx(uint8_t *src, + uint32_t coeff1, int32_t height) + { + uint32_t row; ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; ++ ptrdiff_t stride_4x = stride << 2; + __m256i src0, src1, src2, src3, out; + __m256i res0, res1; + __m256i mask; +@@ -199,36 +235,39 @@ static av_always_inline void avc_chroma_hz_nonmult_lasx(uint8_t *src, + __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); + __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); + +- mask = LASX_LD(chroma_mask_arr); ++ mask = __lasx_xvld(chroma_mask_arr, 0); + + for (row = height >> 2; row--;) { +- LASX_LD_4(src, stride, src0, src1, src2, src3); +- src += (stride * 4); +- LASX_PCKEV_Q_2(src1, src0, src3, src2, src0, src2); +- LASX_SHUF_B_2_128SV(src0, src0, src2, src2, mask, mask, src0, src2); +- LASX_DP2_H_BU(src0, coeff_vec, res0); +- LASX_DP2_H_BU(src2, coeff_vec, res1); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, ++ src0, src1, src2, src3); ++ src += stride_4x; ++ DUP2_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src0, src2); ++ DUP2_ARG3(__lasx_xvshuf_b, src0, src0, mask, src2, src2, mask, src0, src2); ++ DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, res0, res1); + res0 = __lasx_xvslli_h(res0, 3); + res1 = __lasx_xvslli_h(res1, 3); +- LASX_SRARI_H_2(res0, res1, res0, res1, 6); ++ DUP2_ARG2(__lasx_xvsrari_h, res0, 6, res1, 6, res0, res1); + res0 = __lasx_xvsat_hu(res0, 7); + res1 = __lasx_xvsat_hu(res1, 7); +- LASX_PCKEV_B_128SV(res1, res0, out); +- LASX_ST_D_4(out, 0, 2, 1, 3, dst, stride); +- dst += (stride * 4); ++ out = __lasx_xvpickev_b(res1, res0); ++ __lasx_xvstelm_d(out, dst, 0, 0); ++ __lasx_xvstelm_d(out, dst + stride, 0, 2); ++ __lasx_xvstelm_d(out, dst + stride_2x, 0, 1); ++ __lasx_xvstelm_d(out, dst + stride_3x, 0, 3); ++ dst += stride_4x; + } + + if ((height & 3)) { + for (row = (height & 3); row--;) { +- src0 = LASX_LD(src); ++ src0 = __lasx_xvld(src, 0); + src += stride; +- LASX_SHUF_B_128SV(src0, src0, mask, src0); +- LASX_DP2_H_BU(src0, coeff_vec, res0); ++ src0 = __lasx_xvshuf_b(src0, src0, mask); ++ res0 = __lasx_xvdp2_h_bu(src0, coeff_vec); + res0 = __lasx_xvslli_h(res0, 3); +- LASX_SRARI_H(res0, res0, 6); ++ res0 = __lasx_xvsrari_h(res0, 6); + res0 = __lasx_xvsat_hu(res0, 7); +- LASX_PCKEV_B_128SV(res0, res0, out); +- LASX_ST_D(out, 0, dst); ++ out = __lasx_xvpickev_b(res0, res0); ++ __lasx_xvstelm_d(out, dst, 0, 0); + dst += stride; + } + } +@@ -237,31 +276,40 @@ static av_always_inline void avc_chroma_hz_nonmult_lasx(uint8_t *src, + static av_always_inline void avc_chroma_vt_8x4_lasx(uint8_t *src, uint8_t *dst, + ptrdiff_t stride, uint32_t coeff0, uint32_t coeff1) + { ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; + __m256i src0, src1, src2, src3, src4, out; + __m256i res0, res1; + __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); + __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); + __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); + +- src0 = LASX_LD(src); +- LASX_LD_4(src + stride, stride, src1, src2, src3, src4); +- LASX_PCKEV_Q_4(src1, src0, src2, src1, src3, src2, src4, src3, +- src0, src1, src2, src3); +- LASX_ILVL_B_2_128SV(src1, src0, src3, src2, src0, src2); +- LASX_DP2_H_BU(src0, coeff_vec, res0); +- LASX_DP2_H_BU(src2, coeff_vec, res1); ++ src0 = __lasx_xvld(src, 0); ++ src += stride; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, ++ src1, src2, src3, src4); ++ DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src2, src1, 0x20, src3, src2, 0x20, ++ src4, src3, 0x20, src0, src1, src2, src3); ++ DUP2_ARG2(__lasx_xvilvl_b, src1, src0, src3, src2, src0, src2); ++ DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, res0, res1); + res0 = __lasx_xvslli_h(res0, 3); + res1 = __lasx_xvslli_h(res1, 3); +- LASX_SRARI_H_2(res0, res1, res0, res1, 6); ++ DUP2_ARG2(__lasx_xvsrari_h, res0, 6, res1, 6, res0, res1); + res0 = __lasx_xvsat_hu(res0, 7); + res1 = __lasx_xvsat_hu(res1, 7); +- LASX_PCKEV_B_128SV(res1, res0, out); +- LASX_ST_D_4(out, 0, 2, 1, 3, dst, stride); ++ out = __lasx_xvpickev_b(res1, res0); ++ __lasx_xvstelm_d(out, dst, 0, 0); ++ __lasx_xvstelm_d(out, dst + stride, 0, 2); ++ __lasx_xvstelm_d(out, dst + stride_2x, 0, 1); ++ __lasx_xvstelm_d(out, dst + stride_3x, 0, 3); + } + + static av_always_inline void avc_chroma_vt_8x8_lasx(uint8_t *src, uint8_t *dst, + ptrdiff_t stride, uint32_t coeff0, uint32_t coeff1) + { ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; ++ ptrdiff_t stride_4x = stride << 2; + __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8; + __m256i out0, out1; + __m256i res0, res1, res2, res3; +@@ -269,31 +317,40 @@ static av_always_inline void avc_chroma_vt_8x8_lasx(uint8_t *src, uint8_t *dst, + __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); + __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); + +- src0 = LASX_LD(src); +- LASX_LD_8(src+stride, stride, src1, src2, src3, src4, ++ src0 = __lasx_xvld(src, 0); ++ src += stride; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, ++ src1, src2, src3, src4); ++ src += stride_4x; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, + src5, src6, src7, src8); +- LASX_PCKEV_Q_4(src1, src0, src2, src1, src3, src2, src4, src3, +- src0, src1, src2, src3); +- LASX_PCKEV_Q_4(src5, src4, src6, src5, src7, src6, src8, src7, +- src4, src5, src6, src7); +- LASX_ILVL_B_4_128SV(src1, src0, src3, src2, src5, src4, src7, src6, +- src0, src2, src4, src6); +- LASX_DP2_H_BU(src0, coeff_vec, res0); +- LASX_DP2_H_BU(src2, coeff_vec, res1); +- LASX_DP2_H_BU(src4, coeff_vec, res2); +- LASX_DP2_H_BU(src6, coeff_vec, res3); ++ DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src2, src1, 0x20, src3, src2, 0x20, ++ src4, src3, 0x20, src0, src1, src2, src3); ++ DUP4_ARG3(__lasx_xvpermi_q, src5, src4, 0x20, src6, src5, 0x20, src7, src6, 0x20, ++ src8, src7, 0x20, src4, src5, src6, src7); ++ DUP4_ARG2(__lasx_xvilvl_b, src1, src0, src3, src2, src5, src4, src7, src6, ++ src0, src2, src4, src6); ++ DUP4_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, src4, coeff_vec, ++ src6, coeff_vec, res0, res1, res2, res3); + res0 = __lasx_xvslli_h(res0, 3); + res1 = __lasx_xvslli_h(res1, 3); + res2 = __lasx_xvslli_h(res2, 3); + res3 = __lasx_xvslli_h(res3, 3); +- LASX_SRARI_H_4(res0, res1, res2, res3, res0, res1, res2, res3, 6); ++ DUP4_ARG2(__lasx_xvsrari_h, res0, 6, res1, 6, res2, 6, res3, 6, res0, res1, res2, res3); + res0 = __lasx_xvsat_hu(res0, 7); + res1 = __lasx_xvsat_hu(res1, 7); + res2 = __lasx_xvsat_hu(res2, 7); + res3 = __lasx_xvsat_hu(res3, 7); +- LASX_PCKEV_B_2_128SV(res1, res0, res3, res2, out0, out1); +- LASX_ST_D_4(out0, 0, 2, 1, 3, dst, stride); +- LASX_ST_D_4(out1, 0, 2, 1, 3, dst + stride * 4, stride); ++ DUP2_ARG2(__lasx_xvpickev_b, res1, res0, res3, res2, out0, out1); ++ __lasx_xvstelm_d(out0, dst, 0, 0); ++ __lasx_xvstelm_d(out0, dst + stride, 0, 2); ++ __lasx_xvstelm_d(out0, dst + stride_2x, 0, 1); ++ __lasx_xvstelm_d(out0, dst + stride_3x, 0, 3); ++ dst += stride_4x; ++ __lasx_xvstelm_d(out1, dst, 0, 0); ++ __lasx_xvstelm_d(out1, dst + stride, 0, 2); ++ __lasx_xvstelm_d(out1, dst + stride_2x, 0, 1); ++ __lasx_xvstelm_d(out1, dst + stride_3x, 0, 3); + } + + static av_always_inline void copy_width8x8_lasx(uint8_t *src, uint8_t *dst, +@@ -439,6 +496,9 @@ static av_always_inline void avc_chroma_hv_and_aver_dst_8x4_lasx(uint8_t *src, + uint32_t coef_hor1, uint32_t coef_ver0, + uint32_t coef_ver1) + { ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; ++ ptrdiff_t stride_4x = stride << 2; + __m256i tp0, tp1, tp2, tp3; + __m256i src0, src1, src2, src3, src4, out; + __m256i res_hz0, res_hz1, res_hz2, res_vt0, res_vt1; +@@ -449,32 +509,35 @@ static av_always_inline void avc_chroma_hv_and_aver_dst_8x4_lasx(uint8_t *src, + __m256i coeff_vt_vec0 = __lasx_xvreplgr2vr_h(coef_ver0); + __m256i coeff_vt_vec1 = __lasx_xvreplgr2vr_h(coef_ver1); + +- mask = LASX_LD(chroma_mask_arr); +- src0 = LASX_LD(src); +- LASX_LD_4(src + stride, stride, src1, src2, src3, src4); +- LASX_PCKEV_Q_2(src2, src1, src4, src3, src1, src3); +- LASX_SHUF_B_128SV(src0, src0, mask, src0); +- LASX_SHUF_B_2_128SV(src1, src1, src3, src3, mask, mask, src1, src3); +- LASX_DP2_H_BU(src0, coeff_hz_vec, res_hz0); +- LASX_DP2_H_BU(src1, coeff_hz_vec, res_hz1); +- LASX_DP2_H_BU(src3, coeff_hz_vec, res_hz2); ++ DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 0, src, 0, mask, src0); ++ DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2x, src, stride_3x, src, stride_4x, ++ src1, src2, src3, src4); ++ DUP2_ARG3(__lasx_xvpermi_q, src2, src1, 0x20, src4, src3, 0x20, src1, src3); ++ src0 = __lasx_xvshuf_b(src0, src0, mask); ++ DUP2_ARG3(__lasx_xvshuf_b, src1, src1, mask, src3, src3, mask, src1, src3); ++ DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_hz_vec, src1, coeff_hz_vec, res_hz0, res_hz1); ++ res_hz2 = __lasx_xvdp2_h_bu(src3, coeff_hz_vec); + res_vt0 = __lasx_xvmul_h(res_hz1, coeff_vt_vec0); + res_vt1 = __lasx_xvmul_h(res_hz2, coeff_vt_vec0); +- LASX_PCKEV_Q(res_hz1, res_hz0, res_hz0); ++ res_hz0 = __lasx_xvpermi_q(res_hz1, res_hz0, 0x20); + res_hz1 = __lasx_xvpermi_q(res_hz1, res_hz2, 0x3); + res_hz0 = __lasx_xvmul_h(res_hz0, coeff_vt_vec1); + res_hz1 = __lasx_xvmul_h(res_hz1, coeff_vt_vec1); + res_vt0 = __lasx_xvadd_h(res_vt0, res_hz0); + res_vt1 = __lasx_xvadd_h(res_vt1, res_hz1); +- LASX_SRARI_H_2(res_vt0, res_vt1, res_vt0, res_vt1, 6); ++ DUP2_ARG2(__lasx_xvsrari_h, res_vt0, 6, res_vt1, 6, res_vt0, res_vt1); + res_vt0 = __lasx_xvsat_hu(res_vt0, 7); + res_vt1 = __lasx_xvsat_hu(res_vt1, 7); +- LASX_PCKEV_B_128SV(res_vt1, res_vt0, out); +- LASX_LD_4(dst, stride, tp0, tp1, tp2, tp3); +- LASX_ILVL_D_2_128SV(tp2, tp0, tp3, tp1, tp0, tp2); +- LASX_PCKEV_Q(tp2, tp0, tp0); ++ out = __lasx_xvpickev_b(res_vt1, res_vt0); ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, ++ tp0, tp1, tp2, tp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); ++ tp0 = __lasx_xvpermi_q(tp2, tp0, 0x20); + out = __lasx_xvavgr_bu(out, tp0); +- LASX_ST_D_4(out, 0, 2, 1, 3, dst, stride); ++ __lasx_xvstelm_d(out, dst, 0, 0); ++ __lasx_xvstelm_d(out, dst + stride, 0, 2); ++ __lasx_xvstelm_d(out, dst + stride_2x, 0, 1); ++ __lasx_xvstelm_d(out, dst + stride_3x, 0, 3); + } + + static av_always_inline void avc_chroma_hv_and_aver_dst_8x8_lasx(uint8_t *src, +@@ -482,6 +545,9 @@ static av_always_inline void avc_chroma_hv_and_aver_dst_8x8_lasx(uint8_t *src, + uint32_t coef_hor1, uint32_t coef_ver0, + uint32_t coef_ver1) + { ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; ++ ptrdiff_t stride_4x = stride << 2; + __m256i tp0, tp1, tp2, tp3, dst0, dst1; + __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8; + __m256i out0, out1; +@@ -494,25 +560,26 @@ static av_always_inline void avc_chroma_hv_and_aver_dst_8x8_lasx(uint8_t *src, + __m256i coeff_vt_vec1 = __lasx_xvreplgr2vr_h(coef_ver1); + __m256i coeff_hz_vec = __lasx_xvilvl_b(coeff_hz_vec0, coeff_hz_vec1); + +- mask = LASX_LD(chroma_mask_arr); +- src0 = LASX_LD(src); +- LASX_LD_8(src + stride, stride, src1, src2, src3, src4, ++ DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 0, src, 0, mask, src0); ++ src += stride; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, ++ src1, src2, src3, src4); ++ src += stride_4x; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, + src5, src6, src7, src8); +- LASX_PCKEV_Q_4(src2, src1, src4, src3, src6, src5, src8, src7, +- src1, src3, src5, src7); +- LASX_SHUF_B_128SV(src0, src0, mask, src0); +- LASX_SHUF_B_4_128SV(src1, src1, src3, src3, src5, src5, src7, src7, +- mask, mask, mask, mask, src1, src3, src5, src7); +- LASX_DP2_H_BU(src0, coeff_hz_vec, res_hz0); +- LASX_DP2_H_BU(src1, coeff_hz_vec, res_hz1); +- LASX_DP2_H_BU(src3, coeff_hz_vec, res_hz2); +- LASX_DP2_H_BU(src5, coeff_hz_vec, res_hz3); +- LASX_DP2_H_BU(src7, coeff_hz_vec, res_hz4); ++ DUP4_ARG3(__lasx_xvpermi_q, src2, src1, 0x20, src4, src3, 0x20, src6, src5, 0x20, ++ src8, src7, 0x20, src1, src3, src5, src7); ++ src0 = __lasx_xvshuf_b(src0, src0, mask); ++ DUP4_ARG3(__lasx_xvshuf_b, src1, src1, mask, src3, src3, mask, src5, src5, mask, src7, ++ src7, mask, src1, src3, src5, src7); ++ DUP4_ARG2(__lasx_xvdp2_h_bu, src0, coeff_hz_vec, src1, coeff_hz_vec, src3, ++ coeff_hz_vec, src5, coeff_hz_vec, res_hz0, res_hz1, res_hz2, res_hz3); ++ res_hz4 = __lasx_xvdp2_h_bu(src7, coeff_hz_vec); + res_vt0 = __lasx_xvmul_h(res_hz1, coeff_vt_vec0); + res_vt1 = __lasx_xvmul_h(res_hz2, coeff_vt_vec0); + res_vt2 = __lasx_xvmul_h(res_hz3, coeff_vt_vec0); + res_vt3 = __lasx_xvmul_h(res_hz4, coeff_vt_vec0); +- LASX_PCKEV_Q(res_hz1, res_hz0, res_hz0); ++ res_hz0 = __lasx_xvpermi_q(res_hz1, res_hz0, 0x20); + res_hz1 = __lasx_xvpermi_q(res_hz1, res_hz2, 0x3); + res_hz2 = __lasx_xvpermi_q(res_hz2, res_hz3, 0x3); + res_hz3 = __lasx_xvpermi_q(res_hz3, res_hz4, 0x3); +@@ -524,29 +591,42 @@ static av_always_inline void avc_chroma_hv_and_aver_dst_8x8_lasx(uint8_t *src, + res_vt1 = __lasx_xvadd_h(res_vt1, res_hz1); + res_vt2 = __lasx_xvadd_h(res_vt2, res_hz2); + res_vt3 = __lasx_xvadd_h(res_vt3, res_hz3); +- LASX_SRARI_H_4(res_vt0, res_vt1, res_vt2, res_vt3, +- res_vt0, res_vt1, res_vt2, res_vt3, 6); ++ DUP4_ARG2(__lasx_xvsrari_h, res_vt0, 6, res_vt1, 6, res_vt2, 6, res_vt3, 6, ++ res_vt0, res_vt1, res_vt2, res_vt3); + res_vt0 = __lasx_xvsat_hu(res_vt0, 7); + res_vt1 = __lasx_xvsat_hu(res_vt1, 7); + res_vt2 = __lasx_xvsat_hu(res_vt2, 7); + res_vt3 = __lasx_xvsat_hu(res_vt3, 7); +- LASX_PCKEV_B_2_128SV(res_vt1, res_vt0, res_vt3, res_vt2, out0, out1); +- LASX_LD_4(dst, stride, tp0, tp1, tp2, tp3); +- LASX_ILVL_D_2_128SV(tp2, tp0, tp3, tp1, tp0, tp2); +- LASX_PCKEV_Q(tp2, tp0, dst0); +- LASX_LD_4(dst + 4 * stride, stride, tp0, tp1, tp2, tp3); +- LASX_ILVL_D_2_128SV(tp2, tp0, tp3, tp1, tp0, tp2); +- LASX_PCKEV_Q(tp2, tp0, dst1); ++ DUP2_ARG2(__lasx_xvpickev_b, res_vt1, res_vt0, res_vt3, res_vt2, out0, out1); ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, ++ tp0, tp1, tp2, tp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); ++ dst0 = __lasx_xvpermi_q(tp2, tp0, 0x20); ++ dst += stride_4x; ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, ++ tp0, tp1, tp2, tp3); ++ dst -= stride_4x; ++ DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); ++ dst1 = __lasx_xvpermi_q(tp2, tp0, 0x20); + out0 = __lasx_xvavgr_bu(out0, dst0); + out1 = __lasx_xvavgr_bu(out1, dst1); +- LASX_ST_D_4(out0, 0, 2, 1, 3, dst, stride); +- LASX_ST_D_4(out1, 0, 2, 1, 3, dst + stride * 4, stride); ++ __lasx_xvstelm_d(out0, dst, 0, 0); ++ __lasx_xvstelm_d(out0, dst + stride, 0, 2); ++ __lasx_xvstelm_d(out0, dst + stride_2x, 0, 1); ++ __lasx_xvstelm_d(out0, dst + stride_3x, 0, 3); ++ dst += stride_4x; ++ __lasx_xvstelm_d(out1, dst, 0, 0); ++ __lasx_xvstelm_d(out1, dst + stride, 0, 2); ++ __lasx_xvstelm_d(out1, dst + stride_2x, 0, 1); ++ __lasx_xvstelm_d(out1, dst + stride_3x, 0, 3); + } + + static av_always_inline void avc_chroma_hz_and_aver_dst_8x4_lasx(uint8_t *src, + uint8_t *dst, ptrdiff_t stride, uint32_t coeff0, + uint32_t coeff1) + { ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; + __m256i tp0, tp1, tp2, tp3; + __m256i src0, src1, src2, src3, out; + __m256i res0, res1; +@@ -555,29 +635,36 @@ static av_always_inline void avc_chroma_hz_and_aver_dst_8x4_lasx(uint8_t *src, + __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); + __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); + +- mask = LASX_LD(chroma_mask_arr); +- LASX_LD_4(src, stride, src0, src1, src2, src3); +- LASX_PCKEV_Q_2(src1, src0, src3, src2, src0, src2); +- LASX_SHUF_B_2_128SV(src0, src0, src2, src2, mask, mask, src0, src2); +- LASX_DP2_H_BU(src0, coeff_vec, res0); +- LASX_DP2_H_BU(src2, coeff_vec, res1); ++ mask = __lasx_xvld(chroma_mask_arr, 0); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, ++ src0, src1, src2, src3); ++ DUP2_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src0, src2); ++ DUP2_ARG3(__lasx_xvshuf_b, src0, src0, mask, src2, src2, mask, src0, src2); ++ DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, res0, res1); + res0 = __lasx_xvslli_h(res0, 3); + res1 = __lasx_xvslli_h(res1, 3); +- LASX_SRARI_H_2(res0, res1, res0, res1, 6); ++ DUP2_ARG2(__lasx_xvsrari_h, res0, 6, res1, 6, res0, res1); + res0 = __lasx_xvsat_hu(res0, 7); + res1 = __lasx_xvsat_hu(res1, 7); +- LASX_PCKEV_B_128SV(res1, res0, out); +- LASX_LD_4(dst, stride, tp0, tp1, tp2, tp3); +- LASX_ILVL_D_2_128SV(tp2, tp0, tp3, tp1, tp0, tp2); +- LASX_PCKEV_Q(tp2, tp0, tp0); ++ out = __lasx_xvpickev_b(res1, res0); ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, ++ tp0, tp1, tp2, tp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); ++ tp0 = __lasx_xvpermi_q(tp2, tp0, 0x20); + out = __lasx_xvavgr_bu(out, tp0); +- LASX_ST_D_4(out, 0, 2, 1, 3, dst, stride); ++ __lasx_xvstelm_d(out, dst, 0, 0); ++ __lasx_xvstelm_d(out, dst + stride, 0, 2); ++ __lasx_xvstelm_d(out, dst + stride_2x, 0, 1); ++ __lasx_xvstelm_d(out, dst + stride_3x, 0, 3); + } + + static av_always_inline void avc_chroma_hz_and_aver_dst_8x8_lasx(uint8_t *src, + uint8_t *dst, ptrdiff_t stride, uint32_t coeff0, + uint32_t coeff1) + { ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; ++ ptrdiff_t stride_4x = stride << 2; + __m256i tp0, tp1, tp2, tp3, dst0, dst1; + __m256i src0, src1, src2, src3, src4, src5, src6, src7; + __m256i out0, out1; +@@ -587,43 +674,58 @@ static av_always_inline void avc_chroma_hz_and_aver_dst_8x8_lasx(uint8_t *src, + __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); + __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); + +- mask = LASX_LD(chroma_mask_arr); +- LASX_LD_8(src, stride, src0, src1, src2, src3, src4, src5, src6, src7); +- LASX_PCKEV_Q_4(src1, src0, src3, src2, src5, src4, src7, src6, +- src0, src2, src4, src6); +- LASX_SHUF_B_4_128SV(src0, src0, src2, src2, src4, src4, src6, src6, +- mask, mask, mask, mask, src0, src2, src4, src6); +- LASX_DP2_H_BU(src0, coeff_vec, res0); +- LASX_DP2_H_BU(src2, coeff_vec, res1); +- LASX_DP2_H_BU(src4, coeff_vec, res2); +- LASX_DP2_H_BU(src6, coeff_vec, res3); ++ mask = __lasx_xvld(chroma_mask_arr, 0); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, ++ src0, src1, src2, src3); ++ src += stride_4x; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, ++ src4, src5, src6, src7); ++ DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src5, src4, 0x20, ++ src7, src6, 0x20, src0, src2, src4, src6); ++ DUP4_ARG3(__lasx_xvshuf_b, src0, src0, mask, src2, src2, mask, src4, src4, ++ mask, src6, src6, mask, src0, src2, src4, src6); ++ DUP4_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, src4, coeff_vec, src6, ++ coeff_vec, res0, res1, res2, res3); + res0 = __lasx_xvslli_h(res0, 3); + res1 = __lasx_xvslli_h(res1, 3); + res2 = __lasx_xvslli_h(res2, 3); + res3 = __lasx_xvslli_h(res3, 3); +- LASX_SRARI_H_4(res0, res1, res2, res3, +- res0, res1, res2, res3, 6); ++ DUP4_ARG2(__lasx_xvsrari_h, res0, 6, res1, 6, res2, 6, res3, 6, res0, res1, res2, res3); + res0 = __lasx_xvsat_hu(res0, 7); + res1 = __lasx_xvsat_hu(res1, 7); + res2 = __lasx_xvsat_hu(res2, 7); + res3 = __lasx_xvsat_hu(res3, 7); +- LASX_PCKEV_B_2_128SV(res1, res0, res3, res2, out0, out1); +- LASX_LD_4(dst, stride, tp0, tp1, tp2, tp3); +- LASX_ILVL_D_2_128SV(tp2, tp0, tp3, tp1, tp0, tp2); +- LASX_PCKEV_Q(tp2, tp0, dst0); +- LASX_LD_4(dst + 4 * stride, stride, tp0, tp1, tp2, tp3); +- LASX_ILVL_D_2_128SV(tp2, tp0, tp3, tp1, tp0, tp2); +- LASX_PCKEV_Q(tp2, tp0, dst1); ++ DUP2_ARG2(__lasx_xvpickev_b, res1, res0, res3, res2, out0, out1); ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, ++ tp0, tp1, tp2, tp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); ++ dst0 = __lasx_xvpermi_q(tp2, tp0, 0x20); ++ dst += stride_4x; ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, ++ tp0, tp1, tp2, tp3); ++ dst -= stride_4x; ++ DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); ++ dst1 = __lasx_xvpermi_q(tp2, tp0, 0x20); + out0 = __lasx_xvavgr_bu(out0, dst0); + out1 = __lasx_xvavgr_bu(out1, dst1); +- LASX_ST_D_4(out0, 0, 2, 1, 3, dst, stride); +- LASX_ST_D_4(out1, 0, 2, 1, 3, dst + stride * 4, stride) ++ __lasx_xvstelm_d(out0, dst, 0, 0); ++ __lasx_xvstelm_d(out0, dst + stride, 0, 2); ++ __lasx_xvstelm_d(out0, dst + stride_2x, 0, 1); ++ __lasx_xvstelm_d(out0, dst + stride_3x, 0, 3); ++ dst += stride_4x; ++ __lasx_xvstelm_d(out1, dst, 0, 0); ++ __lasx_xvstelm_d(out1, dst + stride, 0, 2); ++ __lasx_xvstelm_d(out1, dst + stride_2x, 0, 1); ++ __lasx_xvstelm_d(out1, dst + stride_3x, 0, 3); + } + + static av_always_inline void avc_chroma_vt_and_aver_dst_8x4_lasx(uint8_t *src, + uint8_t *dst, ptrdiff_t stride, uint32_t coeff0, + uint32_t coeff1) + { ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; ++ ptrdiff_t stride_4x = stride << 2; + __m256i tp0, tp1, tp2, tp3; + __m256i src0, src1, src2, src3, src4, out; + __m256i res0, res1; +@@ -631,30 +733,37 @@ static av_always_inline void avc_chroma_vt_and_aver_dst_8x4_lasx(uint8_t *src, + __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); + __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); + +- src0 = LASX_LD(src); +- LASX_LD_4(src + stride, stride, src1, src2, src3, src4); +- LASX_PCKEV_Q_4(src1, src0, src2, src1, src3, src2, src4, src3, +- src0, src1, src2, src3); +- LASX_ILVL_B_2_128SV(src1, src0, src3, src2, src0, src2); +- LASX_DP2_H_BU(src0, coeff_vec, res0); +- LASX_DP2_H_BU(src2, coeff_vec, res1); ++ src0 = __lasx_xvld(src, 0); ++ DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2x, src, stride_3x, src, stride_4x, ++ src1, src2, src3, src4); ++ DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src2, src1, 0x20, src3, src2, 0x20, ++ src4, src3, 0x20, src0, src1, src2, src3); ++ DUP2_ARG2(__lasx_xvilvl_b, src1, src0, src3, src2, src0, src2); ++ DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, res0, res1); + res0 = __lasx_xvslli_h(res0, 3); + res1 = __lasx_xvslli_h(res1, 3); +- LASX_SRARI_H_2(res0, res1, res0, res1, 6); ++ DUP2_ARG2(__lasx_xvsrari_h, res0, 6, res1, 6, res0, res1) + res0 = __lasx_xvsat_hu(res0, 7); + res1 = __lasx_xvsat_hu(res1, 7); +- LASX_PCKEV_B_128SV(res1, res0, out); +- LASX_LD_4(dst, stride, tp0, tp1, tp2, tp3); +- LASX_ILVL_D_2_128SV(tp2, tp0, tp3, tp1, tp0, tp2); +- LASX_PCKEV_Q(tp2, tp0, tp0); ++ out = __lasx_xvpickev_b(res1, res0); ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, ++ tp0, tp1, tp2, tp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); ++ tp0 = __lasx_xvpermi_q(tp2, tp0, 0x20); + out = __lasx_xvavgr_bu(out, tp0); +- LASX_ST_D_4(out, 0, 2, 1, 3, dst, stride); ++ __lasx_xvstelm_d(out, dst, 0, 0); ++ __lasx_xvstelm_d(out, dst + stride, 0, 2); ++ __lasx_xvstelm_d(out, dst + stride_2x, 0, 1); ++ __lasx_xvstelm_d(out, dst + stride_3x, 0, 3); + } + + static av_always_inline void avc_chroma_vt_and_aver_dst_8x8_lasx(uint8_t *src, + uint8_t *dst, ptrdiff_t stride, uint32_t coeff0, + uint32_t coeff1) + { ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; ++ ptrdiff_t stride_4x = stride << 2; + __m256i tp0, tp1, tp2, tp3, dst0, dst1; + __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8; + __m256i out0, out1; +@@ -663,39 +772,53 @@ static av_always_inline void avc_chroma_vt_and_aver_dst_8x8_lasx(uint8_t *src, + __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); + __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); + +- src0 = LASX_LD(src); +- LASX_LD_8(src + stride, stride, src1, src2, src3, src4, ++ src0 = __lasx_xvld(src, 0); ++ src += stride; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, ++ src1, src2, src3, src4); ++ src += stride_4x; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, + src5, src6, src7, src8); +- LASX_PCKEV_Q_4(src1, src0, src2, src1, src3, src2, src4, src3, +- src0, src1, src2, src3); +- LASX_PCKEV_Q_4(src5, src4, src6, src5, src7, src6, src8, src7, +- src4, src5, src6, src7); +- LASX_ILVL_B_4_128SV(src1, src0, src3, src2, src5, src4, src7, src6, +- src0, src2, src4, src6); +- LASX_DP2_H_BU(src0, coeff_vec, res0); +- LASX_DP2_H_BU(src2, coeff_vec, res1); +- LASX_DP2_H_BU(src4, coeff_vec, res2); +- LASX_DP2_H_BU(src6, coeff_vec, res3); ++ DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src2, src1, 0x20, src3, src2, 0x20, ++ src4, src3, 0x20, src0, src1, src2, src3); ++ DUP4_ARG3(__lasx_xvpermi_q, src5, src4, 0x20, src6, src5, 0x20, src7, src6, 0x20, ++ src8, src7, 0x20, src4, src5, src6, src7); ++ DUP4_ARG2(__lasx_xvilvl_b, src1, src0, src3, src2, src5, src4, src7, src6, ++ src0, src2, src4, src6); ++ DUP4_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, src4, coeff_vec, src6, ++ coeff_vec, res0, res1, res2, res3); + res0 = __lasx_xvslli_h(res0, 3); + res1 = __lasx_xvslli_h(res1, 3); + res2 = __lasx_xvslli_h(res2, 3); + res3 = __lasx_xvslli_h(res3, 3); +- LASX_SRARI_H_4(res0, res1, res2, res3, res0, res1, res2, res3, 6); ++ DUP4_ARG2(__lasx_xvsrari_h, res0, 6, res1, 6, res2, 6, res3, 6, ++ res0, res1, res2, res3); + res0 = __lasx_xvsat_hu(res0, 7); + res1 = __lasx_xvsat_hu(res1, 7); + res2 = __lasx_xvsat_hu(res2, 7); + res3 = __lasx_xvsat_hu(res3, 7); +- LASX_PCKEV_B_2_128SV(res1, res0, res3, res2, out0, out1); +- LASX_LD_4(dst, stride, tp0, tp1, tp2, tp3); +- LASX_ILVL_D_2_128SV(tp2, tp0, tp3, tp1, tp0, tp2); +- LASX_PCKEV_Q(tp2, tp0, dst0); +- LASX_LD_4(dst + 4 * stride, stride, tp0, tp1, tp2, tp3); +- LASX_ILVL_D_2_128SV(tp2, tp0, tp3, tp1, tp0, tp2); +- LASX_PCKEV_Q(tp2, tp0, dst1); ++ DUP2_ARG2(__lasx_xvpickev_b, res1, res0, res3, res2, out0, out1); ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, ++ tp0, tp1, tp2, tp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); ++ dst0 = __lasx_xvpermi_q(tp2, tp0, 0x20); ++ dst += stride_4x; ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, ++ tp0, tp1, tp2, tp3); ++ dst -= stride_4x; ++ DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); ++ dst1 = __lasx_xvpermi_q(tp2, tp0, 0x20); + out0 = __lasx_xvavgr_bu(out0, dst0); + out1 = __lasx_xvavgr_bu(out1, dst1); +- LASX_ST_D_4(out0, 0, 2, 1, 3, dst, stride); +- LASX_ST_D_4(out1, 0, 2, 1, 3, dst + stride * 4, stride); ++ __lasx_xvstelm_d(out0, dst, 0, 0); ++ __lasx_xvstelm_d(out0, dst + stride, 0, 2); ++ __lasx_xvstelm_d(out0, dst + stride_2x, 0, 1); ++ __lasx_xvstelm_d(out0, dst + stride_3x, 0, 3); ++ dst += stride_4x; ++ __lasx_xvstelm_d(out1, dst, 0, 0); ++ __lasx_xvstelm_d(out1, dst + stride, 0, 2); ++ __lasx_xvstelm_d(out1, dst + stride_2x, 0, 1); ++ __lasx_xvstelm_d(out1, dst + stride_3x, 0, 3); + } + + static av_always_inline void avg_width8x8_lasx(uint8_t *src, uint8_t *dst, +@@ -703,18 +826,18 @@ static av_always_inline void avg_width8x8_lasx(uint8_t *src, uint8_t *dst, + { + __m256i src0, src1, src2, src3; + __m256i dst0, dst1, dst2, dst3; +- ptrdiff_t stride_x2 = stride << 1; +- ptrdiff_t stride_x3 = stride_x2 + stride; +- ptrdiff_t stride_x4 = stride << 2; ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; ++ ptrdiff_t stride_4x = stride << 2; + + src0 = __lasx_xvldrepl_d(src, 0); + src1 = __lasx_xvldrepl_d(src + stride, 0); +- src2 = __lasx_xvldrepl_d(src + stride_x2, 0); +- src3 = __lasx_xvldrepl_d(src + stride_x3, 0); ++ src2 = __lasx_xvldrepl_d(src + stride_2x, 0); ++ src3 = __lasx_xvldrepl_d(src + stride_3x, 0); + dst0 = __lasx_xvldrepl_d(dst, 0); + dst1 = __lasx_xvldrepl_d(dst + stride, 0); +- dst2 = __lasx_xvldrepl_d(dst + stride_x2, 0); +- dst3 = __lasx_xvldrepl_d(dst + stride_x3, 0); ++ dst2 = __lasx_xvldrepl_d(dst + stride_2x, 0); ++ dst3 = __lasx_xvldrepl_d(dst + stride_3x, 0); + src0 = __lasx_xvpackev_d(src1,src0); + src2 = __lasx_xvpackev_d(src3,src2); + src0 = __lasx_xvpermi_q(src0, src2, 0x02); +@@ -722,18 +845,21 @@ static av_always_inline void avg_width8x8_lasx(uint8_t *src, uint8_t *dst, + dst2 = __lasx_xvpackev_d(dst3,dst2); + dst0 = __lasx_xvpermi_q(dst0, dst2, 0x02); + dst0 = __lasx_xvavgr_bu(src0, dst0); +- LASX_ST_D_4(dst0, 0, 1, 2, 3, dst, stride); ++ __lasx_xvstelm_d(dst0, dst, 0, 0); ++ __lasx_xvstelm_d(dst0, dst + stride, 0, 1); ++ __lasx_xvstelm_d(dst0, dst + stride_2x, 0, 2); ++ __lasx_xvstelm_d(dst0, dst + stride_3x, 0, 3); + +- src += stride_x4; +- dst += stride_x4; ++ src += stride_4x; ++ dst += stride_4x; + src0 = __lasx_xvldrepl_d(src, 0); + src1 = __lasx_xvldrepl_d(src + stride, 0); +- src2 = __lasx_xvldrepl_d(src + stride_x2, 0); +- src3 = __lasx_xvldrepl_d(src + stride_x3, 0); ++ src2 = __lasx_xvldrepl_d(src + stride_2x, 0); ++ src3 = __lasx_xvldrepl_d(src + stride_3x, 0); + dst0 = __lasx_xvldrepl_d(dst, 0); + dst1 = __lasx_xvldrepl_d(dst + stride, 0); +- dst2 = __lasx_xvldrepl_d(dst + stride_x2, 0); +- dst3 = __lasx_xvldrepl_d(dst + stride_x3, 0); ++ dst2 = __lasx_xvldrepl_d(dst + stride_2x, 0); ++ dst3 = __lasx_xvldrepl_d(dst + stride_3x, 0); + src0 = __lasx_xvpackev_d(src1,src0); + src2 = __lasx_xvpackev_d(src3,src2); + src0 = __lasx_xvpermi_q(src0, src2, 0x02); +@@ -741,7 +867,10 @@ static av_always_inline void avg_width8x8_lasx(uint8_t *src, uint8_t *dst, + dst2 = __lasx_xvpackev_d(dst3,dst2); + dst0 = __lasx_xvpermi_q(dst0, dst2, 0x02); + dst0 = __lasx_xvavgr_bu(src0, dst0); +- LASX_ST_D_4(dst0, 0, 1, 2, 3, dst, stride); ++ __lasx_xvstelm_d(dst0, dst, 0, 0); ++ __lasx_xvstelm_d(dst0, dst + stride, 0, 1); ++ __lasx_xvstelm_d(dst0, dst + stride_2x, 0, 2); ++ __lasx_xvstelm_d(dst0, dst + stride_3x, 0, 3); + } + + static av_always_inline void avg_width8x4_lasx(uint8_t *src, uint8_t *dst, +@@ -749,17 +878,17 @@ static av_always_inline void avg_width8x4_lasx(uint8_t *src, uint8_t *dst, + { + __m256i src0, src1, src2, src3; + __m256i dst0, dst1, dst2, dst3; +- ptrdiff_t stride_x2 = stride << 1; +- ptrdiff_t stride_x3 = stride_x2 + stride; ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; + + src0 = __lasx_xvldrepl_d(src, 0); + src1 = __lasx_xvldrepl_d(src + stride, 0); +- src2 = __lasx_xvldrepl_d(src + stride_x2, 0); +- src3 = __lasx_xvldrepl_d(src + stride_x3, 0); ++ src2 = __lasx_xvldrepl_d(src + stride_2x, 0); ++ src3 = __lasx_xvldrepl_d(src + stride_3x, 0); + dst0 = __lasx_xvldrepl_d(dst, 0); + dst1 = __lasx_xvldrepl_d(dst + stride, 0); +- dst2 = __lasx_xvldrepl_d(dst + stride_x2, 0); +- dst3 = __lasx_xvldrepl_d(dst + stride_x3, 0); ++ dst2 = __lasx_xvldrepl_d(dst + stride_2x, 0); ++ dst3 = __lasx_xvldrepl_d(dst + stride_3x, 0); + src0 = __lasx_xvpackev_d(src1,src0); + src2 = __lasx_xvpackev_d(src3,src2); + src0 = __lasx_xvpermi_q(src0, src2, 0x02); +@@ -767,7 +896,10 @@ static av_always_inline void avg_width8x4_lasx(uint8_t *src, uint8_t *dst, + dst2 = __lasx_xvpackev_d(dst3,dst2); + dst0 = __lasx_xvpermi_q(dst0, dst2, 0x02); + dst0 = __lasx_xvavgr_bu(src0, dst0); +- LASX_ST_D_4(dst0, 0, 1, 2, 3, dst, stride); ++ __lasx_xvstelm_d(dst0, dst, 0, 0); ++ __lasx_xvstelm_d(dst0, dst + stride, 0, 1); ++ __lasx_xvstelm_d(dst0, dst + stride_2x, 0, 2); ++ __lasx_xvstelm_d(dst0, dst + stride_3x, 0, 3); + } + + static void avc_chroma_hv_and_aver_dst_8w_lasx(uint8_t *src, uint8_t *dst, +diff --git a/libavcodec/loongarch/h264dsp_lasx.c b/libavcodec/loongarch/h264dsp_lasx.c +index 21efa69672..873c109413 100644 +--- a/libavcodec/loongarch/h264dsp_lasx.c ++++ b/libavcodec/loongarch/h264dsp_lasx.c +@@ -22,7 +22,7 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "libavutil/loongarch/generic_macros_lasx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + #include "h264dsp_lasx.h" + + #define AVC_LPF_P1_OR_Q1(p0_or_q0_org_in, q0_or_p0_org_in, \ +@@ -36,7 +36,7 @@ + temp = __lasx_xvslli_h(p1_or_q1_org_in, 1); \ + clip3 = __lasx_xvsub_h(clip3, temp); \ + clip3 = __lasx_xvavg_h(p2_or_q2_org_in, clip3); \ +- LASX_CLIP_H(clip3, neg_tc_in, tc_in); \ ++ clip3 = __lasx_xvclip_h(clip3, neg_tc_in, tc_in); \ + p1_or_q1_out = __lasx_xvadd_h(p1_or_q1_org_in, clip3); \ + } + +@@ -55,21 +55,22 @@ + p1_sub_q1 = __lasx_xvaddi_hu(p1_sub_q1, 4); \ + delta = __lasx_xvadd_h(q0_sub_p0, p1_sub_q1); \ + delta = __lasx_xvsrai_h(delta, 3); \ +- \ +- LASX_CLIP_H(delta, neg_threshold_in, threshold_in); \ +- \ ++ delta = __lasx_xvclip_h(delta, neg_threshold_in, \ ++ threshold_in); \ + p0_or_q0_out = __lasx_xvadd_h(p0_or_q0_org_in, delta); \ + q0_or_p0_out = __lasx_xvsub_h(q0_or_p0_org_in, delta); \ + \ +- LASX_CLIP_H_0_255(p0_or_q0_out, p0_or_q0_out); \ +- LASX_CLIP_H_0_255(q0_or_p0_out, q0_or_p0_out); \ ++ p0_or_q0_out = __lasx_xvclip255_h(p0_or_q0_out); \ ++ q0_or_p0_out = __lasx_xvclip255_h(q0_or_p0_out); \ + } + + void ff_h264_h_lpf_luma_8_lasx(uint8_t *data, int img_width, +- int alpha_in, int beta_in, int8_t *tc) ++ int alpha_in, int beta_in, int8_t *tc) + { + int img_width_2x = img_width << 1; ++ int img_width_4x = img_width << 2; + int img_width_8x = img_width << 3; ++ int img_width_3x = img_width_2x + img_width; + __m256i tmp_vec0, bs_vec; + __m256i tc_vec = {0x0101010100000000, 0x0303030302020202, 0x0101010100000000, 0x0303030302020202}; + +@@ -94,10 +95,18 @@ void ff_h264_h_lpf_luma_8_lasx(uint8_t *data, int img_width, + __m256i row0, row1, row2, row3, row4, row5, row6, row7; + __m256i row8, row9, row10, row11, row12, row13, row14, row15; + +- LASX_LD_8(src, img_width, row0, row1, row2, row3, +- row4, row5, row6, row7); +- LASX_LD_8(src_tmp, img_width, row8, row9, row10, row11, +- row12, row13, row14, row15); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, img_width, src, img_width_2x, ++ src, img_width_3x, row0, row1, row2, row3); ++ src += img_width_4x; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, img_width, src, img_width_2x, ++ src, img_width_3x, row4, row5, row6, row7); ++ src -= img_width_4x; ++ DUP4_ARG2(__lasx_xvldx, src_tmp, 0, src_tmp, img_width, src_tmp, ++ img_width_2x, src_tmp, img_width_3x, row8, row9, row10, row11); ++ src_tmp += img_width_4x; ++ DUP4_ARG2(__lasx_xvldx, src_tmp, 0, src_tmp, img_width, src_tmp, ++ img_width_2x, src_tmp, img_width_3x, row12, row13, row14, row15); ++ src_tmp -= img_width_4x; + + LASX_TRANSPOSE16x8_B(row0, row1, row2, row3, row4, row5, row6, row7, + row8, row9, row10, row11, +@@ -141,8 +150,8 @@ void ff_h264_h_lpf_luma_8_lasx(uint8_t *data, int img_width, + p2_org_h = __lasx_vext2xv_hu_bu(p2_org); + AVC_LPF_P1_OR_Q1(p0_org_h, q0_org_h, p1_org_h, p2_org_h, + neg_tc_h, tc_h, p1_h); +- LASX_PCKEV_B(p1_h, p1_h, p1_h); +- ++ p1_h = __lasx_xvpickev_b(p1_h, p1_h); ++ p1_h = __lasx_xvpermi_d(p1_h, 0xd8); + p1_org = __lasx_xvbitsel_v(p1_org, p1_h, is_less_than_beta); + is_less_than_beta = __lasx_xvandi_b(is_less_than_beta, 1); + tc_vec = __lasx_xvadd_b(tc_vec, is_less_than_beta); +@@ -160,7 +169,8 @@ void ff_h264_h_lpf_luma_8_lasx(uint8_t *data, int img_width, + q2_org_h = __lasx_vext2xv_hu_bu(q2_org); + AVC_LPF_P1_OR_Q1(p0_org_h, q0_org_h, q1_org_h, q2_org_h, + neg_tc_h, tc_h, q1_h); +- LASX_PCKEV_B(q1_h, q1_h, q1_h); ++ q1_h = __lasx_xvpickev_b(q1_h, q1_h); ++ q1_h = __lasx_xvpermi_d(q1_h, 0xd8); + q1_org = __lasx_xvbitsel_v(q1_org, q1_h, is_less_than_beta); + + is_less_than_beta = __lasx_xvandi_b(is_less_than_beta, 1); +@@ -176,35 +186,49 @@ void ff_h264_h_lpf_luma_8_lasx(uint8_t *data, int img_width, + + AVC_LPF_P0Q0(q0_org_h, p0_org_h, p1_org_h, q1_org_h, + neg_thresh_h, tc_h, p0_h, q0_h); +- LASX_PCKEV_B_2(p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); ++ DUP2_ARG2(__lasx_xvpickev_b, p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); ++ DUP2_ARG2(__lasx_xvpermi_d, p0_h, 0xd8, q0_h, 0xd8, p0_h, q0_h); + p0_org = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than); + q0_org = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than); + } + + { + __m256i row0, row1, row2, row3, row4, row5, row6, row7; +- +- LASX_ILVL_B_4(p1_org, p3_org, p0_org, p2_org, q2_org, q0_org, q3_org, +- q1_org, row0, row1, row2, row3); +- LASX_ILVLH_B_2(row1, row0, row3, row2, row5, row4, row7, row6); +- LASX_ILVLH_W_2(row6, row4, row7, row5, row1, row0, row3, row2); +- LASX_PCKEV_Q_4(row0, row0, row1, row1, row2, row2, row3, row3, +- row4, row5, row6, row7); +- LASX_ST_D_2(row4, 2, 3, src, img_width); ++ __m256i control = {0x0000000400000000, 0x0000000500000001, ++ 0x0000000600000002, 0x0000000700000003}; ++ ++ DUP4_ARG3(__lasx_xvpermi_q, p0_org, q3_org, 0x02, p1_org, q2_org, 0x02, ++ p2_org, q1_org, 0x02, p3_org, q0_org, 0x02, p0_org, p1_org, ++ p2_org, p3_org); ++ DUP2_ARG2(__lasx_xvilvl_b, p1_org, p3_org, p0_org, p2_org, row0, row2); ++ DUP2_ARG2(__lasx_xvilvh_b, p1_org, p3_org, p0_org, p2_org, row1, row3); ++ DUP2_ARG2(__lasx_xvilvl_b, row2, row0, row3, row1, row4, row6); ++ DUP2_ARG2(__lasx_xvilvh_b, row2, row0, row3, row1, row5, row7); ++ DUP4_ARG2(__lasx_xvperm_w, row4, control, row5, control, row6, control, ++ row7, control, row4, row5, row6, row7); ++ __lasx_xvstelm_d(row4, src, 0, 0); ++ __lasx_xvstelm_d(row4, src + img_width, 0, 1); + src += img_width_2x; +- LASX_ST_D_2(row0, 2, 3, src, img_width); ++ __lasx_xvstelm_d(row4, src, 0, 2); ++ __lasx_xvstelm_d(row4, src + img_width, 0, 3); + src += img_width_2x; +- LASX_ST_D_2(row5, 2, 3, src, img_width); ++ __lasx_xvstelm_d(row5, src, 0, 0); ++ __lasx_xvstelm_d(row5, src + img_width, 0, 1); + src += img_width_2x; +- LASX_ST_D_2(row1, 2, 3, src, img_width); ++ __lasx_xvstelm_d(row5, src, 0, 2); ++ __lasx_xvstelm_d(row5, src + img_width, 0, 3); + src += img_width_2x; +- LASX_ST_D_2(row6, 2, 3, src, img_width); ++ __lasx_xvstelm_d(row6, src, 0, 0); ++ __lasx_xvstelm_d(row6, src + img_width, 0, 1); + src += img_width_2x; +- LASX_ST_D_2(row2, 2, 3, src, img_width); ++ __lasx_xvstelm_d(row6, src, 0, 2); ++ __lasx_xvstelm_d(row6, src + img_width, 0, 3); + src += img_width_2x; +- LASX_ST_D_2(row7, 2, 3, src, img_width); ++ __lasx_xvstelm_d(row7, src, 0, 0); ++ __lasx_xvstelm_d(row7, src + img_width, 0, 1); + src += img_width_2x; +- LASX_ST_D_2(row3, 2, 3, src, img_width); ++ __lasx_xvstelm_d(row7, src, 0, 2); ++ __lasx_xvstelm_d(row7, src + img_width, 0, 3); + } + } + } +@@ -235,10 +259,9 @@ void ff_h264_v_lpf_luma_8_lasx(uint8_t *data, int img_width, + alpha = __lasx_xvreplgr2vr_b(alpha_in); + beta = __lasx_xvreplgr2vr_b(beta_in); + +- p2_org = LASX_LD(data - img_width_3x); +- p1_org = LASX_LD(data - img_width_2x); +- p0_org = LASX_LD(data - img_width); +- LASX_LD_2(data, img_width, q0_org, q1_org); ++ DUP2_ARG2(__lasx_xvldx, data, -img_width_3x, data, -img_width_2x, p2_org, p1_org); ++ p0_org = __lasx_xvldx(data, -img_width); ++ DUP2_ARG2(__lasx_xvldx, data, 0, data, img_width, q0_org, q1_org); + + is_bs_greater_than0 = __lasx_xvslt_bu(zero, bs_vec); + p0_asub_q0 = __lasx_xvabsd_bu(p0_org, q0_org); +@@ -255,7 +278,7 @@ void ff_h264_v_lpf_luma_8_lasx(uint8_t *data, int img_width, + if (__lasx_xbnz_v(is_less_than)) { + __m256i neg_tc_h, tc_h, p2_asub_p0, q2_asub_q0; + +- q2_org = LASX_LD(data + img_width_2x); ++ q2_org = __lasx_xvldx(data, img_width_2x); + + neg_tc_h = __lasx_xvneg_b(tc_vec); + neg_tc_h = __lasx_vext2xv_h_b(neg_tc_h); +@@ -274,10 +297,11 @@ void ff_h264_v_lpf_luma_8_lasx(uint8_t *data, int img_width, + p2_org_h = __lasx_vext2xv_hu_bu(p2_org); + AVC_LPF_P1_OR_Q1(p0_org_h, q0_org_h, p1_org_h, p2_org_h, + neg_tc_h, tc_h, p1_h); +- LASX_PCKEV_B(p1_h, p1_h, p1_h); ++ p1_h = __lasx_xvpickev_b(p1_h, p1_h); ++ p1_h = __lasx_xvpermi_d(p1_h, 0xd8); + p1_h = __lasx_xvbitsel_v(p1_org, p1_h, is_less_than_beta); + p1_org = __lasx_xvpermi_q(p1_org, p1_h, 0x30); +- LASX_ST(p1_org, data - img_width_2x); ++ __lasx_xvst(p1_org, data - img_width_2x, 0); + + is_less_than_beta = __lasx_xvandi_b(is_less_than_beta, 1); + tc_vec = __lasx_xvadd_b(tc_vec, is_less_than_beta); +@@ -295,10 +319,11 @@ void ff_h264_v_lpf_luma_8_lasx(uint8_t *data, int img_width, + q2_org_h = __lasx_vext2xv_hu_bu(q2_org); + AVC_LPF_P1_OR_Q1(p0_org_h, q0_org_h, q1_org_h, q2_org_h, + neg_tc_h, tc_h, q1_h); +- LASX_PCKEV_B(q1_h, q1_h, q1_h); ++ q1_h = __lasx_xvpickev_b(q1_h, q1_h); ++ q1_h = __lasx_xvpermi_d(q1_h, 0xd8); + q1_h = __lasx_xvbitsel_v(q1_org, q1_h, is_less_than_beta); + q1_org = __lasx_xvpermi_q(q1_org, q1_h, 0x30); +- LASX_ST(q1_org, data + img_width); ++ __lasx_xvst(q1_org, data + img_width, 0); + + is_less_than_beta = __lasx_xvandi_b(is_less_than_beta, 1); + tc_vec = __lasx_xvadd_b(tc_vec, is_less_than_beta); +@@ -314,13 +339,14 @@ void ff_h264_v_lpf_luma_8_lasx(uint8_t *data, int img_width, + + AVC_LPF_P0Q0(q0_org_h, p0_org_h, p1_org_h, q1_org_h, + neg_thresh_h, tc_h, p0_h, q0_h); +- LASX_PCKEV_B_2(p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); ++ DUP2_ARG2(__lasx_xvpickev_b, p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); ++ DUP2_ARG2(__lasx_xvpermi_d, p0_h, 0Xd8, q0_h, 0xd8, p0_h, q0_h); + p0_h = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than); + q0_h = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than); + p0_org = __lasx_xvpermi_q(p0_org, p0_h, 0x30); + q0_org = __lasx_xvpermi_q(q0_org, q0_h, 0x30); +- LASX_ST(p0_org, data - img_width); +- LASX_ST(q0_org, data); ++ __lasx_xvst(p0_org, data - img_width, 0); ++ __lasx_xvst(q0_org, data, 0); + } + } + } +@@ -332,6 +358,9 @@ void ff_h264_h_lpf_chroma_8_lasx(uint8_t *data, int img_width, + __m256i tmp_vec0, bs_vec; + __m256i tc_vec = {0x0303020201010000, 0x0303020201010000, 0x0, 0x0}; + __m256i zero = __lasx_xvldi(0); ++ int img_width_2x = img_width << 1; ++ int img_width_4x = img_width << 2; ++ int img_width_3x = img_width_2x + img_width; + + tmp_vec0 = __lasx_xvldrepl_w((uint32_t*)tc, 0); + tc_vec = __lasx_xvshuf_b(tmp_vec0, tmp_vec0, tc_vec); +@@ -352,13 +381,19 @@ void ff_h264_h_lpf_chroma_8_lasx(uint8_t *data, int img_width, + { + __m256i row0, row1, row2, row3, row4, row5, row6, row7; + +- LASX_LD_8(src, img_width, row0, row1, row2, row3, +- row4, row5, row6, row7); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, img_width, src, img_width_2x, ++ src, img_width_3x, row0, row1, row2, row3); ++ src += img_width_4x; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, img_width, src, img_width_2x, ++ src, img_width_3x, row4, row5, row6, row7); ++ src -= img_width_4x; + /* LASX_TRANSPOSE8x4_B */ +- LASX_ILVL_B_4(row2, row0, row3, row1, row6, row4, row7, row5, +- p1_org, p0_org, q0_org, q1_org); +- LASX_ILVL_B_2(p0_org, p1_org, q1_org, q0_org, row0, row1); +- LASX_ILVLH_W_128SV(row1, row0, row3, row2); ++ DUP4_ARG2(__lasx_xvilvl_b, row2, row0, row3, row1, row6, row4, row7, row5, ++ p1_org, p0_org, q0_org, q1_org); ++ row0 = __lasx_xvilvl_b(p0_org, p1_org); ++ row1 = __lasx_xvilvl_b(q1_org, q0_org); ++ row3 = __lasx_xvilvh_w(row1, row0); ++ row2 = __lasx_xvilvl_w(row1, row0); + p1_org = __lasx_xvpermi_d(row2, 0x00); + p0_org = __lasx_xvpermi_d(row2, 0x55); + q0_org = __lasx_xvpermi_d(row3, 0x00); +@@ -396,7 +431,8 @@ void ff_h264_h_lpf_chroma_8_lasx(uint8_t *data, int img_width, + + AVC_LPF_P0Q0(q0_org_h, p0_org_h, p1_org_h, q1_org_h, + neg_thresh_h, tc_h, p0_h, q0_h); +- LASX_PCKEV_B_2(p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); ++ DUP2_ARG2(__lasx_xvpickev_b, p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); ++ DUP2_ARG2(__lasx_xvpermi_d, p0_h, 0xd8, q0_h, 0xd8, p0_h, q0_h); + p0_org = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than); + q0_org = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than); + } +@@ -446,9 +482,8 @@ void ff_h264_v_lpf_chroma_8_lasx(uint8_t *data, int img_width, + alpha = __lasx_xvreplgr2vr_b(alpha_in); + beta = __lasx_xvreplgr2vr_b(beta_in); + +- p1_org = LASX_LD(data - img_width_2x); +- p0_org = LASX_LD(data - img_width); +- LASX_LD_2(data, img_width, q0_org, q1_org); ++ DUP2_ARG2(__lasx_xvldx, data, -img_width_2x, data, -img_width, p1_org, p0_org); ++ DUP2_ARG2(__lasx_xvldx, data, 0, data, img_width, q0_org, q1_org); + + is_bs_greater_than0 = __lasx_xvslt_bu(zero, bs_vec); + p0_asub_q0 = __lasx_xvabsd_bu(p0_org, q0_org); +@@ -479,11 +514,12 @@ void ff_h264_v_lpf_chroma_8_lasx(uint8_t *data, int img_width, + + AVC_LPF_P0Q0(q0_org_h, p0_org_h, p1_org_h, q1_org_h, + neg_thresh_h, tc_h, p0_h, q0_h); +- LASX_PCKEV_B_2(p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); ++ DUP2_ARG2(__lasx_xvpickev_b, p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); ++ DUP2_ARG2(__lasx_xvpermi_d, p0_h, 0xd8, q0_h, 0xd8, p0_h, q0_h); + p0_h = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than); + q0_h = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than); +- LASX_ST_D(p0_h, 0, data - img_width); +- LASX_ST_D(q0_h, 0, data); ++ __lasx_xvstelm_d(p0_h, data - img_width, 0, 0); ++ __lasx_xvstelm_d(q0_h, data, 0, 0); + } + } + } +@@ -533,6 +569,8 @@ void ff_h264_h_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, + int alpha_in, int beta_in) + { + int img_width_2x = img_width << 1; ++ int img_width_4x = img_width << 2; ++ int img_width_3x = img_width_2x + img_width; + uint8_t *src = data - 4; + __m256i p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha, beta; + __m256i is_less_than, is_less_than_beta, is_less_than_alpha; +@@ -543,11 +581,18 @@ void ff_h264_h_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, + __m256i row0, row1, row2, row3, row4, row5, row6, row7; + __m256i row8, row9, row10, row11, row12, row13, row14, row15; + +- LASX_LD_8(src, img_width, row0, row1, row2, row3, +- row4, row5, row6, row7); +- src += img_width << 3; +- LASX_LD_8(src, img_width, row8, row9, row10, row11, +- row12, row13, row14, row15); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, img_width, src, img_width_2x, ++ src, img_width_3x, row0, row1, row2, row3); ++ src += img_width_4x; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, img_width, src, img_width_2x, ++ src, img_width_3x, row4, row5, row6, row7); ++ src += img_width_4x; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, img_width, src, img_width_2x, ++ src, img_width_3x, row8, row9, row10, row11); ++ src += img_width_4x; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, img_width, src, img_width_2x, ++ src, img_width_3x, row12, row13, row14, row15); ++ src += img_width_4x; + + LASX_TRANSPOSE16x8_B(row0, row1, row2, row3, + row4, row5, row6, row7, +@@ -600,8 +645,10 @@ void ff_h264_h_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, + AVC_LPF_P0P1P2_OR_Q0Q1Q2(p3_org_h, p0_org_h, q0_org_h, p1_org_h, + p2_org_h, q1_org_h, p0_h, p1_h, p2_h); + +- LASX_PCKEV_B(p0_h, p0_h, p0_h); +- LASX_PCKEV_B_2(p1_h, p1_h, p2_h, p2_h, p1_h, p2_h); ++ p0_h = __lasx_xvpickev_b(p0_h, p0_h); ++ p0_h = __lasx_xvpermi_d(p0_h, 0xd8); ++ DUP2_ARG2(__lasx_xvpickev_b, p1_h, p1_h, p2_h, p2_h, p1_h, p2_h); ++ DUP2_ARG2(__lasx_xvpermi_d, p1_h, 0xd8, p2_h, 0xd8, p1_h, p2_h); + p0_org = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than_beta); + p1_org = __lasx_xvbitsel_v(p1_org, p1_h, is_less_than_beta); + p2_org = __lasx_xvbitsel_v(p2_org, p2_h, is_less_than_beta); +@@ -609,7 +656,8 @@ void ff_h264_h_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, + + AVC_LPF_P0_OR_Q0(p0_org_h, q1_org_h, p1_org_h, p0_h); + /* combine */ +- LASX_PCKEV_B(p0_h, p0_h, p0_h); ++ p0_h = __lasx_xvpickev_b(p0_h, p0_h); ++ p0_h = __lasx_xvpermi_d(p0_h, 0xd8); + p0_org = __lasx_xvbitsel_v(p0_org, p0_h, negate_is_less_than_beta); + + /* if (tmpFlag && (unsigned)ABS(q2-q0) < thresholds->beta_in) */ +@@ -630,8 +678,10 @@ void ff_h264_h_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, + AVC_LPF_P0P1P2_OR_Q0Q1Q2(q3_org_h, q0_org_h, p0_org_h, q1_org_h, + q2_org_h, p1_org_h, q0_h, q1_h, q2_h); + +- LASX_PCKEV_B(q0_h, q0_h, q0_h); +- LASX_PCKEV_B_2(q1_h, q1_h, q2_h, q2_h, q1_h, q2_h); ++ q0_h = __lasx_xvpickev_b(q0_h, q0_h); ++ q0_h = __lasx_xvpermi_d(q0_h, 0xd8); ++ DUP2_ARG2(__lasx_xvpickev_b, q1_h, q1_h, q2_h, q2_h, q1_h, q2_h); ++ DUP2_ARG2(__lasx_xvpermi_d, q1_h, 0xd8, q2_h, 0xd8, q1_h, q2_h); + q0_org = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than_beta); + q1_org = __lasx_xvbitsel_v(q1_org, q1_h, is_less_than_beta); + q2_org = __lasx_xvbitsel_v(q2_org, q2_h, is_less_than_beta); +@@ -641,35 +691,49 @@ void ff_h264_h_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, + AVC_LPF_P0_OR_Q0(q0_org_h, p1_org_h, q1_org_h, q0_h); + + /* combine */ +- LASX_PCKEV_B(q0_h, q0_h, q0_h); ++ q0_h = __lasx_xvpickev_b(q0_h, q0_h); ++ q0_h = __lasx_xvpermi_d(q0_h, 0xd8); + q0_org = __lasx_xvbitsel_v(q0_org, q0_h, negate_is_less_than_beta); + + /* transpose and store */ + { + __m256i row0, row1, row2, row3, row4, row5, row6, row7; +- +- LASX_ILVL_B_4(p1_org, p3_org, p0_org, p2_org, q2_org, q0_org, q3_org, +- q1_org, row0, row1, row2, row3); +- LASX_ILVLH_B_2(row1, row0, row3, row2, row5, row4, row7, row6); +- LASX_ILVLH_W_2(row6, row4, row7, row5, row1, row0, row3, row2); +- LASX_PCKEV_Q_4(row0, row0, row1, row1, row2, row2, row3, row3, +- row4, row5, row6, row7); ++ __m256i control = {0x0000000400000000, 0x0000000500000001, ++ 0x0000000600000002, 0x0000000700000003}; ++ ++ DUP4_ARG3(__lasx_xvpermi_q, p0_org, q3_org, 0x02, p1_org, q2_org, 0x02, ++ p2_org, q1_org, 0x02, p3_org, q0_org, 0x02, p0_org, p1_org, p2_org, ++ p3_org); ++ DUP2_ARG2(__lasx_xvilvl_b, p1_org, p3_org, p0_org, p2_org, row0, row2); ++ DUP2_ARG2(__lasx_xvilvh_b, p1_org, p3_org, p0_org, p2_org, row1, row3); ++ DUP2_ARG2(__lasx_xvilvl_b, row2, row0, row3, row1, row4, row6); ++ DUP2_ARG2(__lasx_xvilvh_b, row2, row0, row3, row1, row5, row7); ++ DUP4_ARG2(__lasx_xvperm_w, row4, control, row5, control, row6, control, ++ row7, control, row4, row5, row6, row7); + src = data - 4; +- LASX_ST_D_2(row4, 2, 3, src, img_width); ++ __lasx_xvstelm_d(row4, src, 0, 0); ++ __lasx_xvstelm_d(row4, src + img_width, 0, 1); + src += img_width_2x; +- LASX_ST_D_2(row0, 2, 3, src, img_width); ++ __lasx_xvstelm_d(row4, src, 0, 2); ++ __lasx_xvstelm_d(row4, src + img_width, 0, 3); + src += img_width_2x; +- LASX_ST_D_2(row5, 2, 3, src, img_width); ++ __lasx_xvstelm_d(row5, src, 0, 0); ++ __lasx_xvstelm_d(row5, src + img_width, 0, 1); + src += img_width_2x; +- LASX_ST_D_2(row1, 2, 3, src, img_width); ++ __lasx_xvstelm_d(row5, src, 0, 2); ++ __lasx_xvstelm_d(row5, src + img_width, 0, 3); + src += img_width_2x; +- LASX_ST_D_2(row6, 2, 3, src, img_width); ++ __lasx_xvstelm_d(row6, src, 0, 0); ++ __lasx_xvstelm_d(row6, src + img_width, 0, 1); + src += img_width_2x; +- LASX_ST_D_2(row2, 2, 3, src, img_width); ++ __lasx_xvstelm_d(row6, src, 0, 2); ++ __lasx_xvstelm_d(row6, src + img_width, 0, 3); + src += img_width_2x; +- LASX_ST_D_2(row7, 2, 3, src, img_width); ++ __lasx_xvstelm_d(row7, src, 0, 0); ++ __lasx_xvstelm_d(row7, src + img_width, 0, 1); + src += img_width_2x; +- LASX_ST_D_2(row3, 2, 3, src, img_width); ++ __lasx_xvstelm_d(row7, src, 0, 2); ++ __lasx_xvstelm_d(row7, src + img_width, 0, 3); + } + } + } +@@ -678,13 +742,15 @@ void ff_h264_v_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, + int alpha_in, int beta_in) + { + int img_width_2x = img_width << 1; ++ int img_width_3x = img_width_2x + img_width; + uint8_t *src = data - img_width_2x; + __m256i p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha, beta; + __m256i is_less_than, is_less_than_beta, is_less_than_alpha; + __m256i p1_org, p0_org, q0_org, q1_org; + __m256i zero = __lasx_xvldi(0); + +- LASX_LD_4(src, img_width, p1_org, p0_org, q0_org, q1_org) ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, img_width, src, img_width_2x, src, img_width_3x, ++ p1_org, p0_org, q0_org, q1_org); + alpha = __lasx_xvreplgr2vr_b(alpha_in); + beta = __lasx_xvreplgr2vr_b(beta_in); + p0_asub_q0 = __lasx_xvabsd_bu(p0_org, q0_org); +@@ -701,8 +767,8 @@ void ff_h264_v_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, + if (__lasx_xbnz_v(is_less_than)) { + __m256i p2_asub_p0, q2_asub_q0, p0_h, q0_h, negate_is_less_than_beta; + __m256i p1_org_h, p0_org_h, q0_org_h, q1_org_h; +- __m256i p2_org = LASX_LD(src - img_width); +- __m256i q2_org = LASX_LD(data + img_width_2x); ++ __m256i p2_org = __lasx_xvldx(src, -img_width); ++ __m256i q2_org = __lasx_xvldx(data, img_width_2x); + __m256i less_alpha_shift2_add2 = __lasx_xvsrli_b(alpha, 2); + less_alpha_shift2_add2 = __lasx_xvaddi_bu(less_alpha_shift2_add2, 2); + less_alpha_shift2_add2 = __lasx_xvslt_bu(p0_asub_q0, less_alpha_shift2_add2); +@@ -722,7 +788,7 @@ void ff_h264_v_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, + /* combine and store */ + if (__lasx_xbnz_v(is_less_than_beta)) { + __m256i p2_org_h, p3_org_h, p1_h, p2_h; +- __m256i p3_org = LASX_LD(src - img_width_2x); ++ __m256i p3_org = __lasx_xvldx(src, -img_width_2x); + + p2_org_h = __lasx_vext2xv_hu_bu(p2_org); + p3_org_h = __lasx_vext2xv_hu_bu(p3_org); +@@ -730,21 +796,24 @@ void ff_h264_v_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, + AVC_LPF_P0P1P2_OR_Q0Q1Q2(p3_org_h, p0_org_h, q0_org_h, p1_org_h, + p2_org_h, q1_org_h, p0_h, p1_h, p2_h); + +- LASX_PCKEV_B(p0_h, p0_h, p0_h); +- LASX_PCKEV_B_2(p1_h, p1_h, p2_h, p2_h, p1_h, p2_h); ++ p0_h = __lasx_xvpickev_b(p0_h, p0_h); ++ p0_h = __lasx_xvpermi_d(p0_h, 0xd8); ++ DUP2_ARG2(__lasx_xvpickev_b, p1_h, p1_h, p2_h, p2_h, p1_h, p2_h); ++ DUP2_ARG2(__lasx_xvpermi_d, p1_h, 0xd8, p2_h, 0xd8, p1_h, p2_h); + p0_org = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than_beta); + p1_org = __lasx_xvbitsel_v(p1_org, p1_h, is_less_than_beta); + p2_org = __lasx_xvbitsel_v(p2_org, p2_h, is_less_than_beta); + +- LASX_ST(p1_org, src); +- LASX_ST(p2_org, src - img_width); ++ __lasx_xvst(p1_org, src, 0); ++ __lasx_xvst(p2_org, src - img_width, 0); + } + + AVC_LPF_P0_OR_Q0(p0_org_h, q1_org_h, p1_org_h, p0_h); + /* combine */ +- LASX_PCKEV_B(p0_h, p0_h, p0_h); ++ p0_h = __lasx_xvpickev_b(p0_h, p0_h); ++ p0_h = __lasx_xvpermi_d(p0_h, 0xd8); + p0_org = __lasx_xvbitsel_v(p0_org, p0_h, negate_is_less_than_beta); +- LASX_ST(p0_org, data - img_width); ++ __lasx_xvst(p0_org, data - img_width, 0); + + /* if (tmpFlag && (unsigned)ABS(q2-q0) < thresholds->beta_in) */ + q2_asub_q0 = __lasx_xvabsd_bu(q2_org, q0_org); +@@ -757,7 +826,7 @@ void ff_h264_v_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, + /* combine and store */ + if (__lasx_xbnz_v(is_less_than_beta)) { + __m256i q2_org_h, q3_org_h, q1_h, q2_h; +- __m256i q3_org = LASX_LD(data + img_width_2x + img_width); ++ __m256i q3_org = __lasx_xvldx(data, img_width_2x + img_width); + + q2_org_h = __lasx_vext2xv_hu_bu(q2_org); + q3_org_h = __lasx_vext2xv_hu_bu(q3_org); +@@ -765,23 +834,26 @@ void ff_h264_v_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, + AVC_LPF_P0P1P2_OR_Q0Q1Q2(q3_org_h, q0_org_h, p0_org_h, q1_org_h, + q2_org_h, p1_org_h, q0_h, q1_h, q2_h); + +- LASX_PCKEV_B(q0_h, q0_h, q0_h); +- LASX_PCKEV_B_2(q1_h, q1_h, q2_h, q2_h, q1_h, q2_h); ++ q0_h = __lasx_xvpickev_b(q0_h, q0_h); ++ q0_h = __lasx_xvpermi_d(q0_h, 0xd8); ++ DUP2_ARG2(__lasx_xvpickev_b, q1_h, q1_h, q2_h, q2_h, q1_h, q2_h); ++ DUP2_ARG2(__lasx_xvpermi_d, q1_h, 0xd8, q2_h, 0xd8, q1_h, q2_h); + q0_org = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than_beta); + q1_org = __lasx_xvbitsel_v(q1_org, q1_h, is_less_than_beta); + q2_org = __lasx_xvbitsel_v(q2_org, q2_h, is_less_than_beta); + +- LASX_ST(q1_org, data + img_width); +- LASX_ST(q2_org, data + img_width_2x); ++ __lasx_xvst(q1_org, data + img_width, 0); ++ __lasx_xvst(q2_org, data + img_width_2x, 0); + } + + AVC_LPF_P0_OR_Q0(q0_org_h, p1_org_h, q1_org_h, q0_h); + + /* combine */ +- LASX_PCKEV_B(q0_h, q0_h, q0_h); ++ q0_h = __lasx_xvpickev_b(q0_h, q0_h); ++ q0_h = __lasx_xvpermi_d(q0_h, 0xd8); + q0_org = __lasx_xvbitsel_v(q0_org, q0_h, negate_is_less_than_beta); + +- LASX_ST(q0_org, data); ++ __lasx_xvst(q0_org, data, 0); + } + } + +@@ -789,6 +861,9 @@ void ff_h264_h_lpf_chroma_intra_8_lasx(uint8_t *data, int img_width, + int alpha_in, int beta_in) + { + uint8_t *src = data - 2; ++ int img_width_2x = img_width << 1; ++ int img_width_4x = img_width << 2; ++ int img_width_3x = img_width_2x + img_width; + __m256i p1_org, p0_org, q0_org, q1_org; + __m256i p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha, beta; + __m256i is_less_than, is_less_than_beta, is_less_than_alpha; +@@ -796,14 +871,19 @@ void ff_h264_h_lpf_chroma_intra_8_lasx(uint8_t *data, int img_width, + { + __m256i row0, row1, row2, row3, row4, row5, row6, row7; + +- LASX_LD_8(src, img_width, row0, row1, row2, row3, +- row4, row5, row6, row7); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, img_width, src, img_width_2x, src, ++ img_width_3x, row0, row1, row2, row3); ++ src += img_width_4x; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, img_width, src, img_width_2x, src, ++ img_width_3x, row4, row5, row6, row7); + + /* LASX_TRANSPOSE8x4_B */ +- LASX_ILVL_B_4(row2, row0, row3, row1, row6, row4, row7, row5, +- p1_org, p0_org, q0_org, q1_org); +- LASX_ILVL_B_2(p0_org, p1_org, q1_org, q0_org, row0, row1); +- LASX_ILVLH_W_128SV(row1, row0, row3, row2); ++ DUP4_ARG2(__lasx_xvilvl_b, row2, row0, row3, row1, row6, row4, row7, row5, ++ p1_org, p0_org, q0_org, q1_org); ++ row0 = __lasx_xvilvl_b(p0_org, p1_org); ++ row1 = __lasx_xvilvl_b(q1_org, q0_org); ++ row3 = __lasx_xvilvh_w(row1, row0); ++ row2 = __lasx_xvilvl_w(row1, row0); + p1_org = __lasx_xvpermi_d(row2, 0x00); + p0_org = __lasx_xvpermi_d(row2, 0x55); + q0_org = __lasx_xvpermi_d(row3, 0x00); +@@ -833,7 +913,8 @@ void ff_h264_h_lpf_chroma_intra_8_lasx(uint8_t *data, int img_width, + + AVC_LPF_P0_OR_Q0(p0_org_h, q1_org_h, p1_org_h, p0_h); + AVC_LPF_P0_OR_Q0(q0_org_h, p1_org_h, q1_org_h, q0_h); +- LASX_PCKEV_B_2(p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); ++ DUP2_ARG2(__lasx_xvpickev_b, p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); ++ DUP2_ARG2(__lasx_xvpermi_d, p0_h, 0xd8, q0_h, 0xd8, p0_h, q0_h); + p0_org = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than); + q0_org = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than); + } +@@ -867,9 +948,9 @@ void ff_h264_v_lpf_chroma_intra_8_lasx(uint8_t *data, int img_width, + alpha = __lasx_xvreplgr2vr_b(alpha_in); + beta = __lasx_xvreplgr2vr_b(beta_in); + +- p1_org = LASX_LD(data - img_width_2x); +- p0_org = LASX_LD(data - img_width); +- LASX_LD_2(data, img_width, q0_org, q1_org); ++ p1_org = __lasx_xvldx(data, -img_width_2x); ++ p0_org = __lasx_xvldx(data, -img_width); ++ DUP2_ARG2(__lasx_xvldx, data, 0, data, img_width, q0_org, q1_org); + + p0_asub_q0 = __lasx_xvabsd_bu(p0_org, q0_org); + p1_asub_p0 = __lasx_xvabsd_bu(p1_org, p0_org); +@@ -891,11 +972,12 @@ void ff_h264_v_lpf_chroma_intra_8_lasx(uint8_t *data, int img_width, + + AVC_LPF_P0_OR_Q0(p0_org_h, q1_org_h, p1_org_h, p0_h); + AVC_LPF_P0_OR_Q0(q0_org_h, p1_org_h, q1_org_h, q0_h); +- LASX_PCKEV_B_2(p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); ++ DUP2_ARG2(__lasx_xvpickev_b, p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); ++ DUP2_ARG2(__lasx_xvpermi_d, p0_h, 0xd8, q0_h, 0xd8, p0_h, q0_h); + p0_h = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than); + q0_h = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than); +- LASX_ST_D(p0_h, 0, data - img_width); +- LASX_ST_D(q0_h, 0, data); ++ __lasx_xvstelm_d(p0_h, data - img_width, 0, 0); ++ __lasx_xvstelm_d(q0_h, data, 0, 0); + } + } + +@@ -910,6 +992,9 @@ void ff_biweight_h264_pixels16_8_lasx(uint8_t *dst, uint8_t *src, + __m256i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; + __m256i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; + __m256i denom, offset; ++ int stride_2x = stride << 1; ++ int stride_4x = stride << 2; ++ int stride_3x = stride_2x + stride; + + offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom; + offset_in += ((weight_src + weight_dst) << 7); +@@ -921,26 +1006,36 @@ void ff_biweight_h264_pixels16_8_lasx(uint8_t *dst, uint8_t *src, + offset = __lasx_xvreplgr2vr_h(offset_in); + denom = __lasx_xvreplgr2vr_h(log2_denom); + +- LASX_LD_8(src, stride, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); +- src += 8 * stride; +- LASX_PCKEV_Q_4(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, +- src0, src1, src2, src3); +- LASX_LD_8(dst, stride, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); +- LASX_PCKEV_Q_4(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, +- dst0, dst1, dst2, dst3); +- +- LASX_XORI_B_8_128(src0, src1, src2, src3, dst0, dst1, dst2, dst3); +- LASX_ILVLH_B_4(dst0, src0, dst1, src1, dst2, src2, dst3, src3, +- vec1, vec0, vec3, vec2, vec5, vec4, vec7, vec6); +- +- LASX_DP2ADD_H_B(offset, wgt, vec0, tmp0); +- LASX_DP2ADD_H_B(offset, wgt, vec1, tmp1); +- LASX_DP2ADD_H_B(offset, wgt, vec2, tmp2); +- LASX_DP2ADD_H_B(offset, wgt, vec3, tmp3); +- LASX_DP2ADD_H_B(offset, wgt, vec4, tmp4); +- LASX_DP2ADD_H_B(offset, wgt, vec5, tmp5); +- LASX_DP2ADD_H_B(offset, wgt, vec6, tmp6); +- LASX_DP2ADD_H_B(offset, wgt, vec7, tmp7); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, ++ src, stride_3x, tmp0, tmp1, tmp2, tmp3); ++ src += stride_4x; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, ++ src, stride_3x, tmp4, tmp5, tmp6, tmp7); ++ src += stride_4x; ++ DUP4_ARG3(__lasx_xvpermi_q, tmp1, tmp0, 0x20, tmp3, tmp2, 0x20, tmp5, tmp4, ++ 0x20, tmp7, tmp6, 0x20, src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, ++ dst, stride_3x, tmp0, tmp1, tmp2, tmp3); ++ dst += stride_4x; ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, ++ dst, stride_3x, tmp4, tmp5, tmp6, tmp7); ++ dst -= stride_4x; ++ DUP4_ARG3(__lasx_xvpermi_q, tmp1, tmp0, 0x20, tmp3, tmp2, 0x20, tmp5, tmp4, ++ 0x20, tmp7, tmp6, 0x20, dst0, dst1, dst2, dst3); ++ ++ DUP4_ARG2(__lasx_xvxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, 128, ++ dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lasx_xvilvl_b, dst0, src0, dst1, src1, dst2, src2, ++ dst3, src3, vec0, vec2, vec4, vec6); ++ DUP4_ARG2(__lasx_xvilvh_b, dst0, src0, dst1, src1, dst2, src2, ++ dst3, src3, vec1, vec3, vec5, vec7); ++ ++ DUP4_ARG3(__lasx_xvdp2add_h_b, offset, wgt, vec0, offset, wgt, vec1, ++ offset, wgt, vec2, offset, wgt, vec3, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG3(__lasx_xvdp2add_h_b, offset, wgt, vec4, offset, wgt, vec5, ++ offset, wgt, vec6, offset, wgt, vec7, tmp4, tmp5, tmp6, tmp7); + + tmp0 = __lasx_xvsra_h(tmp0, denom); + tmp1 = __lasx_xvsra_h(tmp1, denom); +@@ -951,57 +1046,66 @@ void ff_biweight_h264_pixels16_8_lasx(uint8_t *dst, uint8_t *src, + tmp6 = __lasx_xvsra_h(tmp6, denom); + tmp7 = __lasx_xvsra_h(tmp7, denom); + +- LASX_CLIP_H_0_255_4(tmp0, tmp1, tmp2, tmp3, +- tmp0, tmp1, tmp2, tmp3); +- LASX_CLIP_H_0_255_4(tmp4, tmp5, tmp6, tmp7, +- tmp4, tmp5, tmp6, tmp7); +- LASX_PCKEV_B_4_128SV(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, +- dst0, dst1, dst2, dst3); ++ DUP4_ARG1(__lasx_xvclip255_h, tmp0, tmp1, tmp2, tmp3, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG1(__lasx_xvclip255_h, tmp4, tmp5, tmp6, tmp7, tmp4, tmp5, tmp6, tmp7); ++ DUP4_ARG2(__lasx_xvpickev_b, tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, ++ dst0, dst1, dst2, dst3); + __lasx_xvstelm_d(dst0, dst, 0, 0); +- __lasx_xvstelm_d(dst0, dst, 8, 2); ++ __lasx_xvstelm_d(dst0, dst, 8, 1); + dst += stride; +- __lasx_xvstelm_d(dst0, dst, 0, 1); ++ __lasx_xvstelm_d(dst0, dst, 0, 2); + __lasx_xvstelm_d(dst0, dst, 8, 3); + dst += stride; + __lasx_xvstelm_d(dst1, dst, 0, 0); +- __lasx_xvstelm_d(dst1, dst, 8, 2); ++ __lasx_xvstelm_d(dst1, dst, 8, 1); + dst += stride; +- __lasx_xvstelm_d(dst1, dst, 0, 1); ++ __lasx_xvstelm_d(dst1, dst, 0, 2); + __lasx_xvstelm_d(dst1, dst, 8, 3); + dst += stride; + __lasx_xvstelm_d(dst2, dst, 0, 0); +- __lasx_xvstelm_d(dst2, dst, 8, 2); ++ __lasx_xvstelm_d(dst2, dst, 8, 1); + dst += stride; +- __lasx_xvstelm_d(dst2, dst, 0, 1); ++ __lasx_xvstelm_d(dst2, dst, 0, 2); + __lasx_xvstelm_d(dst2, dst, 8, 3); + dst += stride; + __lasx_xvstelm_d(dst3, dst, 0, 0); +- __lasx_xvstelm_d(dst3, dst, 8, 2); ++ __lasx_xvstelm_d(dst3, dst, 8, 1); + dst += stride; +- __lasx_xvstelm_d(dst3, dst, 0, 1); ++ __lasx_xvstelm_d(dst3, dst, 0, 2); + __lasx_xvstelm_d(dst3, dst, 8, 3); + dst += stride; + + if (16 == height) { +- LASX_LD_8(src, stride, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); +- LASX_PCKEV_Q_4(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, +- src0, src1, src2, src3); +- LASX_LD_8(dst, stride, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); +- LASX_PCKEV_Q_4(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, +- dst0, dst1, dst2, dst3); +- +- LASX_XORI_B_8_128(src0, src1, src2, src3, dst0, dst1, dst2, dst3); +- LASX_ILVLH_B_4(dst0, src0, dst1, src1, dst2, src2, dst3, src3, +- vec1, vec0, vec3, vec2, vec5, vec4, vec7, vec6); +- +- LASX_DP2ADD_H_B(offset, wgt, vec0, tmp0); +- LASX_DP2ADD_H_B(offset, wgt, vec1, tmp1); +- LASX_DP2ADD_H_B(offset, wgt, vec2, tmp2); +- LASX_DP2ADD_H_B(offset, wgt, vec3, tmp3); +- LASX_DP2ADD_H_B(offset, wgt, vec4, tmp4); +- LASX_DP2ADD_H_B(offset, wgt, vec5, tmp5); +- LASX_DP2ADD_H_B(offset, wgt, vec6, tmp6); +- LASX_DP2ADD_H_B(offset, wgt, vec7, tmp7); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, ++ src, stride_3x, tmp0, tmp1, tmp2, tmp3); ++ src += stride_4x; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, ++ src, stride_3x, tmp4, tmp5, tmp6, tmp7); ++ src += stride_4x; ++ DUP4_ARG3(__lasx_xvpermi_q, tmp1, tmp0, 0x20, tmp3, tmp2, 0x20, tmp5, tmp4, ++ 0x20, tmp7, tmp6, 0x20, src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, ++ dst, stride_3x, tmp0, tmp1, tmp2, tmp3); ++ dst += stride_4x; ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, ++ dst, stride_3x, tmp4, tmp5, tmp6, tmp7); ++ dst -= stride_4x; ++ DUP4_ARG3(__lasx_xvpermi_q, tmp1, tmp0, 0x20, tmp3, tmp2, 0x20, tmp5, tmp4, ++ 0x20, tmp7, tmp6, 0x20, dst0, dst1, dst2, dst3); ++ ++ DUP4_ARG2(__lasx_xvxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, 128, ++ dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lasx_xvilvl_b, dst0, src0, dst1, src1, dst2, src2, ++ dst3, src3, vec0, vec2, vec4, vec6); ++ DUP4_ARG2(__lasx_xvilvh_b, dst0, src0, dst1, src1, dst2, src2, ++ dst3, src3, vec1, vec3, vec5, vec7); ++ ++ DUP4_ARG3(__lasx_xvdp2add_h_b, offset, wgt, vec0, offset, wgt, vec1, ++ offset, wgt, vec2, offset, wgt, vec3, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG3(__lasx_xvdp2add_h_b, offset, wgt, vec4, offset, wgt, vec5, ++ offset, wgt, vec6, offset, wgt, vec7, tmp4, tmp5, tmp6, tmp7); + + tmp0 = __lasx_xvsra_h(tmp0, denom); + tmp1 = __lasx_xvsra_h(tmp1, denom); +@@ -1012,34 +1116,32 @@ void ff_biweight_h264_pixels16_8_lasx(uint8_t *dst, uint8_t *src, + tmp6 = __lasx_xvsra_h(tmp6, denom); + tmp7 = __lasx_xvsra_h(tmp7, denom); + +- LASX_CLIP_H_0_255_4(tmp0, tmp1, tmp2, tmp3, +- tmp0, tmp1, tmp2, tmp3); +- LASX_CLIP_H_0_255_4(tmp4, tmp5, tmp6, tmp7, +- tmp4, tmp5, tmp6, tmp7); +- LASX_PCKEV_B_4_128SV(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, +- dst0, dst1, dst2, dst3); ++ DUP4_ARG1(__lasx_xvclip255_h, tmp0, tmp1, tmp2, tmp3, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG1(__lasx_xvclip255_h, tmp4, tmp5, tmp6, tmp7, tmp4, tmp5, tmp6, tmp7); ++ DUP4_ARG2(__lasx_xvpickev_b, tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, ++ dst0, dst1, dst2, dst3); + __lasx_xvstelm_d(dst0, dst, 0, 0); +- __lasx_xvstelm_d(dst0, dst, 8, 2); ++ __lasx_xvstelm_d(dst0, dst, 8, 1); + dst += stride; +- __lasx_xvstelm_d(dst0, dst, 0, 1); ++ __lasx_xvstelm_d(dst0, dst, 0, 2); + __lasx_xvstelm_d(dst0, dst, 8, 3); + dst += stride; + __lasx_xvstelm_d(dst1, dst, 0, 0); +- __lasx_xvstelm_d(dst1, dst, 8, 2); ++ __lasx_xvstelm_d(dst1, dst, 8, 1); + dst += stride; +- __lasx_xvstelm_d(dst1, dst, 0, 1); ++ __lasx_xvstelm_d(dst1, dst, 0, 2); + __lasx_xvstelm_d(dst1, dst, 8, 3); + dst += stride; + __lasx_xvstelm_d(dst2, dst, 0, 0); +- __lasx_xvstelm_d(dst2, dst, 8, 2); ++ __lasx_xvstelm_d(dst2, dst, 8, 1); + dst += stride; +- __lasx_xvstelm_d(dst2, dst, 0, 1); ++ __lasx_xvstelm_d(dst2, dst, 0, 2); + __lasx_xvstelm_d(dst2, dst, 8, 3); + dst += stride; + __lasx_xvstelm_d(dst3, dst, 0, 0); +- __lasx_xvstelm_d(dst3, dst, 8, 2); ++ __lasx_xvstelm_d(dst3, dst, 8, 1); + dst += stride; +- __lasx_xvstelm_d(dst3, dst, 0, 1); ++ __lasx_xvstelm_d(dst3, dst, 0, 2); + __lasx_xvstelm_d(dst3, dst, 8, 3); + } + } +@@ -1051,6 +1153,8 @@ static void avc_biwgt_8x4_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + __m256i wgt, vec0, vec1; + __m256i src0, dst0; + __m256i tmp0, tmp1, tmp2, tmp3, denom, offset; ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; + + offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom; + offset_in += ((weight_src + weight_dst) << 7); +@@ -1062,21 +1166,26 @@ static void avc_biwgt_8x4_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + offset = __lasx_xvreplgr2vr_h(offset_in); + denom = __lasx_xvreplgr2vr_h(log2_denom); + +- LASX_LD_4(src, stride, tmp0, tmp1, tmp2, tmp3); +- LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, src0); +- LASX_LD_4(dst, stride, tmp0, tmp1, tmp2, tmp3); +- LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, dst0); +- LASX_XORI_B_2_128(src0, dst0); +- LASX_ILVLH_B(dst0, src0, vec1, vec0); +- LASX_DP2ADD_H_B(offset, wgt, vec0, tmp0); +- LASX_DP2ADD_H_B(offset, wgt, vec1, tmp1); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, ++ src, stride_3x, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ src0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, ++ dst, stride_3x, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ dst0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ DUP2_ARG2(__lasx_xvxori_b, src0, 128, dst0, 128, src0, dst0); ++ vec0 = __lasx_xvilvl_b(dst0, src0); ++ vec1 = __lasx_xvilvh_b(dst0, src0); ++ DUP2_ARG3(__lasx_xvdp2add_h_b, offset, wgt, vec0, offset, wgt, vec1, tmp0, tmp1); + tmp0 = __lasx_xvsra_h(tmp0, denom); + tmp1 = __lasx_xvsra_h(tmp1, denom); +- LASX_CLIP_H_0_255_2(tmp0, tmp1, tmp0, tmp1); +- LASX_PCKEV_B_128SV(tmp1, tmp0, dst0) +- LASX_ST_D_4(dst0, 0, 2, 1, 3, dst, stride); ++ DUP2_ARG1(__lasx_xvclip255_h, tmp0, tmp1, tmp0, tmp1); ++ dst0 = __lasx_xvpickev_b(tmp1, tmp0); ++ __lasx_xvstelm_d(dst0, dst, 0, 0); ++ __lasx_xvstelm_d(dst0, dst + stride, 0, 1); ++ __lasx_xvstelm_d(dst0, dst + stride_2x, 0, 2); ++ __lasx_xvstelm_d(dst0, dst + stride_3x, 0, 3); + } + + static void avc_biwgt_8x8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +@@ -1086,7 +1195,9 @@ static void avc_biwgt_8x8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + __m256i wgt, vec0, vec1, vec2, vec3; + __m256i src0, src1, dst0, dst1; + __m256i tmp0, tmp1, tmp2, tmp3, denom, offset; ++ ptrdiff_t stride_2x = stride << 1; + ptrdiff_t stride_4x = stride << 2; ++ ptrdiff_t stride_3x = stride_2x + stride; + uint8_t* dst_tmp = dst; + + offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom; +@@ -1099,37 +1210,46 @@ static void avc_biwgt_8x8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + offset = __lasx_xvreplgr2vr_h(offset_in); + denom = __lasx_xvreplgr2vr_h(log2_denom); + +- LASX_LD_4(src, stride, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, ++ src, stride_3x, tmp0, tmp1, tmp2, tmp3); + src += stride_4x; +- LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, src0); +- LASX_LD_4(src, stride, tmp0, tmp1, tmp2, tmp3); +- LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, src1); +- +- LASX_LD_4(dst_tmp, stride, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ src0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, ++ src, stride_3x, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ src1 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ DUP4_ARG2(__lasx_xvld, dst_tmp, 0, dst_tmp + stride, 0, dst_tmp + stride_2x, 0, ++ dst_tmp + stride_3x, 0, tmp0, tmp1, tmp2, tmp3); + dst_tmp += stride_4x; +- LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, dst0); +- LASX_LD_4(dst_tmp, stride, tmp0, tmp1, tmp2, tmp3); +- LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, dst1); +- +- LASX_XORI_B_4_128(src0, src1, dst0, dst1); +- LASX_ILVLH_B_2(dst0, src0, dst1, src1, vec1, vec0, vec3, vec2); +- LASX_DP2ADD_H_B(offset, wgt, vec0, tmp0); +- LASX_DP2ADD_H_B(offset, wgt, vec1, tmp1); +- LASX_DP2ADD_H_B(offset, wgt, vec2, tmp2); +- LASX_DP2ADD_H_B(offset, wgt, vec3, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ dst0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ DUP4_ARG2(__lasx_xvldx, dst_tmp, 0, dst_tmp, stride, dst_tmp, stride_2x, ++ dst_tmp, stride_3x, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ dst1 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ ++ DUP4_ARG2(__lasx_xvxori_b, src0, 128, src1, 128, dst0, 128, dst1, 128, ++ src0, src1, dst0, dst1); ++ DUP2_ARG2(__lasx_xvilvl_b, dst0, src0, dst1, src1, vec0, vec2); ++ DUP2_ARG2(__lasx_xvilvh_b, dst0, src0, dst1, src1, vec1, vec3); ++ DUP4_ARG3(__lasx_xvdp2add_h_b, offset, wgt, vec0, offset, wgt, vec1, ++ offset, wgt, vec2, offset, wgt, vec3, tmp0, tmp1, tmp2, tmp3); + tmp0 = __lasx_xvsra_h(tmp0, denom); + tmp1 = __lasx_xvsra_h(tmp1, denom); + tmp2 = __lasx_xvsra_h(tmp2, denom); + tmp3 = __lasx_xvsra_h(tmp3, denom); +- LASX_CLIP_H_0_255_4(tmp0, tmp1, tmp2, tmp3, tmp0, tmp1, tmp2, tmp3); +- LASX_PCKEV_B_2_128SV(tmp1, tmp0, tmp3, tmp2, dst0, dst1) +- LASX_ST_D_4(dst0, 0, 2, 1, 3, dst, stride); ++ DUP4_ARG1(__lasx_xvclip255_h, tmp0, tmp1, tmp2, tmp3, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvpickev_b, tmp1, tmp0, tmp3, tmp2, dst0, dst1); ++ __lasx_xvstelm_d(dst0, dst, 0, 0); ++ __lasx_xvstelm_d(dst0, dst + stride, 0, 1); ++ __lasx_xvstelm_d(dst0, dst + stride_2x, 0, 2); ++ __lasx_xvstelm_d(dst0, dst + stride_3x, 0, 3); + dst += stride_4x; +- LASX_ST_D_4(dst1, 0, 2, 1, 3, dst, stride); ++ __lasx_xvstelm_d(dst1, dst, 0, 0); ++ __lasx_xvstelm_d(dst1, dst + stride, 0, 1); ++ __lasx_xvstelm_d(dst1, dst + stride_2x, 0, 2); ++ __lasx_xvstelm_d(dst1, dst + stride_3x, 0, 3); + } + + static void avc_biwgt_8x16_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +@@ -1139,7 +1259,9 @@ static void avc_biwgt_8x16_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + __m256i wgt, vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; + __m256i src0, src1, src2, src3, dst0, dst1, dst2, dst3; + __m256i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, denom, offset; ++ ptrdiff_t stride_2x = stride << 1; + ptrdiff_t stride_4x = stride << 2; ++ ptrdiff_t stride_3x = stride_2x + stride; + uint8_t* dst_tmp = dst; + + offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom; +@@ -1152,49 +1274,58 @@ static void avc_biwgt_8x16_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + offset = __lasx_xvreplgr2vr_h(offset_in); + denom = __lasx_xvreplgr2vr_h(log2_denom); + +- LASX_LD_4(src, stride, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, ++ src, stride_3x, tmp0, tmp1, tmp2, tmp3); + src += stride_4x; +- LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, src0); +- LASX_LD_4(src, stride, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ src0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, ++ src, stride_3x, tmp0, tmp1, tmp2, tmp3); + src += stride_4x; +- LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, src1); +- LASX_LD_4(src, stride, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ src1 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, ++ src, stride_3x, tmp0, tmp1, tmp2, tmp3); + src += stride_4x; +- LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, src2); +- LASX_LD_4(src, stride, tmp0, tmp1, tmp2, tmp3); +- LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, src3); +- +- LASX_LD_4(dst_tmp, stride, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ src2 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, ++ src, stride_3x, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ src3 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ ++ DUP4_ARG2(__lasx_xvldx, dst_tmp, 0, dst_tmp, stride, dst_tmp, stride_2x, ++ dst_tmp, stride_3x, tmp0, tmp1, tmp2, tmp3); + dst_tmp += stride_4x; +- LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, dst0); +- LASX_LD_4(dst_tmp, stride, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ dst0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ DUP4_ARG2(__lasx_xvldx, dst_tmp, 0, dst_tmp, stride, dst_tmp, stride_2x, ++ dst_tmp, stride_3x, tmp0, tmp1, tmp2, tmp3); + dst_tmp += stride_4x; +- LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, dst1); +- LASX_LD_4(dst_tmp, stride, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ dst1 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ DUP4_ARG2(__lasx_xvldx, dst_tmp, 0, dst_tmp, stride, dst_tmp, stride_2x, ++ dst_tmp, stride_3x, tmp0, tmp1, tmp2, tmp3); + dst_tmp += stride_4x; +- LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, dst2); +- LASX_LD_4(dst_tmp, stride, tmp0, tmp1, tmp2, tmp3); +- LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, dst3); +- +- LASX_XORI_B_8_128(src0, src1, src2, src3, dst0, dst1, dst2, dst3); +- LASX_ILVLH_B_4(dst0, src0, dst1, src1, dst2, src2, dst3, src3, +- vec1, vec0, vec3, vec2, vec5, vec4, vec7, vec6); +- LASX_DP2ADD_H_B(offset, wgt, vec0, tmp0); +- LASX_DP2ADD_H_B(offset, wgt, vec1, tmp1); +- LASX_DP2ADD_H_B(offset, wgt, vec2, tmp2); +- LASX_DP2ADD_H_B(offset, wgt, vec3, tmp3); +- LASX_DP2ADD_H_B(offset, wgt, vec4, tmp4); +- LASX_DP2ADD_H_B(offset, wgt, vec5, tmp5); +- LASX_DP2ADD_H_B(offset, wgt, vec6, tmp6); +- LASX_DP2ADD_H_B(offset, wgt, vec7, tmp7); ++ DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ dst2 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ DUP4_ARG2(__lasx_xvldx, dst_tmp, 0, dst_tmp, stride, dst_tmp, stride_2x, ++ dst_tmp, stride_3x, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ dst3 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ ++ DUP4_ARG2(__lasx_xvxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, 128, ++ dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lasx_xvilvl_b, dst0, src0, dst1, src1, dst2, src2, ++ dst3, src3, vec0, vec2, vec4, vec6); ++ DUP4_ARG2(__lasx_xvilvh_b, dst0, src0, dst1, src1, dst2, src2, ++ dst3, src3, vec1, vec3, vec5, vec7); ++ DUP4_ARG3(__lasx_xvdp2add_h_b, offset, wgt, vec0, offset, wgt, vec1, ++ offset, wgt, vec2, offset, wgt, vec3, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG3(__lasx_xvdp2add_h_b,offset, wgt, vec4, offset, wgt, vec5, ++ offset, wgt, vec6, offset, wgt, vec7, tmp4, tmp5, tmp6, tmp7); + tmp0 = __lasx_xvsra_h(tmp0, denom); + tmp1 = __lasx_xvsra_h(tmp1, denom); + tmp2 = __lasx_xvsra_h(tmp2, denom); +@@ -1203,17 +1334,29 @@ static void avc_biwgt_8x16_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + tmp5 = __lasx_xvsra_h(tmp5, denom); + tmp6 = __lasx_xvsra_h(tmp6, denom); + tmp7 = __lasx_xvsra_h(tmp7, denom); +- LASX_CLIP_H_0_255_4(tmp0, tmp1, tmp2, tmp3, tmp0, tmp1, tmp2, tmp3); +- LASX_CLIP_H_0_255_4(tmp4, tmp5, tmp6, tmp7, tmp4, tmp5, tmp6, tmp7); +- LASX_PCKEV_B_4_128SV(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, +- dst0, dst1, dst2, dst3) +- LASX_ST_D_4(dst0, 0, 2, 1, 3, dst, stride); ++ DUP4_ARG1(__lasx_xvclip255_h, tmp0, tmp1, tmp2, tmp3, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG1(__lasx_xvclip255_h, tmp4, tmp5, tmp6, tmp7, tmp4, tmp5, tmp6, tmp7); ++ DUP4_ARG2(__lasx_xvpickev_b, tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, ++ dst0, dst1, dst2, dst3) ++ __lasx_xvstelm_d(dst0, dst, 0, 0); ++ __lasx_xvstelm_d(dst0, dst + stride, 0, 1); ++ __lasx_xvstelm_d(dst0, dst + stride_2x, 0, 2); ++ __lasx_xvstelm_d(dst0, dst + stride_3x, 0, 3); + dst += stride_4x; +- LASX_ST_D_4(dst1, 0, 2, 1, 3, dst, stride); ++ __lasx_xvstelm_d(dst1, dst, 0, 0); ++ __lasx_xvstelm_d(dst1, dst + stride, 0, 1); ++ __lasx_xvstelm_d(dst1, dst + stride_2x, 0, 2); ++ __lasx_xvstelm_d(dst1, dst + stride_3x, 0, 3); + dst += stride_4x; +- LASX_ST_D_4(dst2, 0, 2, 1, 3, dst, stride); ++ __lasx_xvstelm_d(dst2, dst, 0, 0); ++ __lasx_xvstelm_d(dst2, dst + stride, 0, 1); ++ __lasx_xvstelm_d(dst2, dst + stride_2x, 0, 2); ++ __lasx_xvstelm_d(dst2, dst + stride_3x, 0, 3); + dst += stride_4x; +- LASX_ST_D_4(dst3, 0, 2, 1, 3, dst, stride); ++ __lasx_xvstelm_d(dst3, dst, 0, 0); ++ __lasx_xvstelm_d(dst3, dst + stride, 0, 1); ++ __lasx_xvstelm_d(dst3, dst + stride_2x, 0, 2); ++ __lasx_xvstelm_d(dst3, dst + stride_3x, 0, 3); + } + + void ff_biweight_h264_pixels8_8_lasx(uint8_t *dst, uint8_t *src, +@@ -1251,17 +1394,18 @@ static void avc_biwgt_4x2_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + offset = __lasx_xvreplgr2vr_h(offset_in); + denom = __lasx_xvreplgr2vr_h(log2_denom); + +- LASX_LD_2(src, stride, tmp0, tmp1); +- LASX_ILVL_W_128SV(tmp1, tmp0, src0); +- LASX_LD_2(dst, stride, tmp0, tmp1); +- LASX_ILVL_W_128SV(tmp1, tmp0, dst0); +- LASX_XORI_B_2_128(src0, dst0); +- LASX_ILVL_B_128SV(dst0, src0, vec0); +- LASX_DP2ADD_H_B(offset, wgt, vec0, tmp0); ++ DUP2_ARG2(__lasx_xvldx, src, 0, src, stride, tmp0, tmp1); ++ src0 = __lasx_xvilvl_w(tmp1, tmp0); ++ DUP2_ARG2(__lasx_xvldx, dst, 0, dst, stride, tmp0, tmp1); ++ dst0 = __lasx_xvilvl_w(tmp1, tmp0); ++ DUP2_ARG2(__lasx_xvxori_b, src0, 128, dst0, 128, src0, dst0); ++ vec0 = __lasx_xvilvl_b(dst0, src0); ++ tmp0 = __lasx_xvdp2add_h_b(offset, wgt, vec0); + tmp0 = __lasx_xvsra_h(tmp0, denom); +- LASX_CLIP_H_0_255(tmp0, tmp0); +- LASX_PCKEV_B_128SV(tmp0, tmp0, tmp0); +- LASX_ST_W_2(tmp0, 0, 1, dst, stride); ++ tmp0 = __lasx_xvclip255_h(tmp0); ++ tmp0 = __lasx_xvpickev_b(tmp0, tmp0); ++ __lasx_xvstelm_w(tmp0, dst, 0, 0); ++ __lasx_xvstelm_w(tmp0, dst + stride, 0, 1); + } + + static void avc_biwgt_4x4_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +@@ -1271,6 +1415,8 @@ static void avc_biwgt_4x4_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + __m256i wgt, vec0; + __m256i src0, dst0; + __m256i tmp0, tmp1, tmp2, tmp3, denom, offset; ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; + + offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom; + offset_in += ((weight_src + weight_dst) << 7); +@@ -1282,19 +1428,26 @@ static void avc_biwgt_4x4_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + offset = __lasx_xvreplgr2vr_h(offset_in); + denom = __lasx_xvreplgr2vr_h(log2_denom); + +- LASX_LD_4(src, stride, tmp0, tmp1, tmp2, tmp3); +- LASX_ILVL_W_2_128SV(tmp2, tmp0, tmp3, tmp1, tmp0, tmp1); +- LASX_ILVL_W_128SV(tmp1, tmp0, src0); +- LASX_LD_4(dst, stride, tmp0, tmp1, tmp2, tmp3); +- LASX_ILVL_W_2_128SV(tmp2, tmp0, tmp3, tmp1, tmp0, tmp1); +- LASX_ILVL_W_128SV(tmp1, tmp0, dst0); +- LASX_XORI_B_2_128(src0, dst0); +- LASX_ILVL_B(dst0, src0, vec0); +- LASX_DP2ADD_H_B(offset, wgt, vec0, tmp0); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, ++ src, stride_3x, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_w, tmp2, tmp0, tmp3, tmp1, tmp0, tmp1); ++ src0 = __lasx_xvilvl_w(tmp1, tmp0); ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, ++ dst, stride_3x, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_w, tmp2, tmp0, tmp3, tmp1, tmp0, tmp1); ++ dst0 = __lasx_xvilvl_w(tmp1, tmp0); ++ DUP2_ARG2(__lasx_xvxori_b, src0, 128, dst0, 128, src0, dst0); ++ vec0 = __lasx_xvilvl_b(dst0, src0); ++ dst0 = __lasx_xvilvh_b(dst0, src0); ++ vec0 = __lasx_xvpermi_q(vec0, dst0, 0x02); ++ tmp0 = __lasx_xvdp2add_h_b(offset, wgt, vec0); + tmp0 = __lasx_xvsra_h(tmp0, denom); +- LASX_CLIP_H_0_255(tmp0, tmp0); +- LASX_PCKEV_B_128SV(tmp0, tmp0, tmp0); +- LASX_ST_W_4(tmp0, 0, 1, 4, 5, dst, stride); ++ tmp0 = __lasx_xvclip255_h(tmp0); ++ tmp0 = __lasx_xvpickev_b(tmp0, tmp0); ++ __lasx_xvstelm_w(tmp0, dst, 0, 0); ++ __lasx_xvstelm_w(tmp0, dst + stride, 0, 1); ++ __lasx_xvstelm_w(tmp0, dst + stride_2x, 0, 4); ++ __lasx_xvstelm_w(tmp0, dst + stride_3x, 0, 5); + } + + static void avc_biwgt_4x8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +@@ -1304,6 +1457,9 @@ static void avc_biwgt_4x8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + __m256i wgt, vec0, vec1; + __m256i src0, dst0; + __m256i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, denom, offset; ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_4x = stride << 2; ++ ptrdiff_t stride_3x = stride_2x + stride; + + offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom; + offset_in += ((weight_src + weight_dst) << 7); +@@ -1315,25 +1471,42 @@ static void avc_biwgt_4x8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + offset = __lasx_xvreplgr2vr_h(offset_in); + denom = __lasx_xvreplgr2vr_h(log2_denom); + +- LASX_LD_8(src, stride, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); +- LASX_ILVL_W_4_128SV(tmp2, tmp0, tmp3, tmp1, tmp6, tmp4, tmp7, tmp5, +- tmp0, tmp1, tmp2, tmp3); +- LASX_ILVL_W_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, src0); +- LASX_LD_8(dst, stride, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); +- LASX_ILVL_W_4_128SV(tmp2, tmp0, tmp3, tmp1, tmp6, tmp4, tmp7, tmp5, +- tmp0, tmp1, tmp2, tmp3); +- LASX_ILVL_W_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, dst0); +- LASX_XORI_B_2_128(src0, dst0); +- LASX_ILVLH_B(dst0, src0, vec1, vec0); +- LASX_DP2ADD_H_B(offset, wgt, vec0, tmp0); +- LASX_DP2ADD_H_B(offset, wgt, vec1, tmp1); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, ++ src, stride_3x, tmp0, tmp1, tmp2, tmp3); ++ src += stride_4x; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, ++ src, stride_3x, tmp4, tmp5, tmp6, tmp7); ++ DUP4_ARG2(__lasx_xvilvl_w, tmp2, tmp0, tmp3, tmp1, tmp6, tmp4, tmp7, tmp5, ++ tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_w, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ src0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, ++ dst, stride_3x, tmp0, tmp1, tmp2, tmp3); ++ dst += stride_4x; ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, ++ dst, stride_3x, tmp4, tmp5, tmp6, tmp7); ++ dst -= stride_4x; ++ DUP4_ARG2(__lasx_xvilvl_w, tmp2, tmp0, tmp3, tmp1, tmp6, tmp4, tmp7, tmp5, ++ tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_w, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ dst0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ DUP2_ARG2(__lasx_xvxori_b, src0, 128, dst0, 128, src0, dst0); ++ vec0 = __lasx_xvilvl_b(dst0, src0); ++ vec1 = __lasx_xvilvh_b(dst0, src0); ++ DUP2_ARG3(__lasx_xvdp2add_h_b, offset, wgt, vec0, offset, wgt, vec1, tmp0, tmp1); + tmp0 = __lasx_xvsra_h(tmp0, denom); + tmp1 = __lasx_xvsra_h(tmp1, denom); +- LASX_CLIP_H_0_255_2(tmp0, tmp1, tmp0, tmp1); +- LASX_PCKEV_B_128SV(tmp1, tmp0, tmp0); +- LASX_ST_W_8(tmp0, 0, 1, 4, 5, 2, 3, 6, 7, dst, stride); ++ DUP2_ARG1(__lasx_xvclip255_h, tmp0, tmp1, tmp0, tmp1); ++ tmp0 = __lasx_xvpickev_b(tmp1, tmp0); ++ __lasx_xvstelm_w(tmp0, dst, 0, 0); ++ __lasx_xvstelm_w(tmp0, dst + stride, 0, 1); ++ __lasx_xvstelm_w(tmp0, dst + stride_2x, 0, 2); ++ __lasx_xvstelm_w(tmp0, dst + stride_3x, 0, 3); ++ dst += stride_4x; ++ __lasx_xvstelm_w(tmp0, dst, 0, 4); ++ __lasx_xvstelm_w(tmp0, dst + stride, 0, 5); ++ __lasx_xvstelm_w(tmp0, dst + stride_2x, 0, 6); ++ __lasx_xvstelm_w(tmp0, dst + stride_3x, 0, 7); + } + + void ff_biweight_h264_pixels4_8_lasx(uint8_t *dst, uint8_t *src, +@@ -1358,6 +1531,9 @@ void ff_weight_h264_pixels16_8_lasx(uint8_t *src, ptrdiff_t stride, + int weight_src, int offset_in) + { + uint32_t offset_val; ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_4x = stride << 2; ++ ptrdiff_t stride_3x = stride_2x + stride; + __m256i zero = __lasx_xvldi(0); + __m256i src0, src1, src2, src3; + __m256i src0_l, src1_l, src2_l, src3_l, src0_h, src1_h, src2_h, src3_h; +@@ -1370,11 +1546,18 @@ void ff_weight_h264_pixels16_8_lasx(uint8_t *src, ptrdiff_t stride, + offset = __lasx_xvreplgr2vr_h(offset_val); + denom = __lasx_xvreplgr2vr_h(log2_denom); + +- LASX_LD_8(src, stride, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); +- LASX_PCKEV_Q_4(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, +- src0, src1, src2, src3); +- LASX_ILVLH_B_4(zero, src0, zero, src1, zero, src2, zero, src3, +- src0_h, src0_l, src1_h, src1_l, src2_h, src2_l, src3_h, src3_l); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, ++ src, stride_3x, tmp0, tmp1, tmp2, tmp3); ++ src += stride_4x; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, ++ src, stride_3x, tmp4, tmp5, tmp6, tmp7); ++ src -= stride_4x; ++ DUP4_ARG3(__lasx_xvpermi_q, tmp1, tmp0, 0x20, tmp3, tmp2, 0x20, tmp5, tmp4, ++ 0x20, tmp7, tmp6, 0x20, src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvilvl_b, zero, src0, zero, src1, zero, src2, ++ zero, src3, src0_l, src1_l, src2_l, src3_l); ++ DUP4_ARG2(__lasx_xvilvh_b, zero, src0, zero, src1, zero, src2, ++ zero, src3, src0_h, src1_h, src2_h, src3_h); + src0_l = __lasx_xvmul_h(wgt, src0_l); + src0_h = __lasx_xvmul_h(wgt, src0_h); + src1_l = __lasx_xvmul_h(wgt, src1_l); +@@ -1383,10 +1566,10 @@ void ff_weight_h264_pixels16_8_lasx(uint8_t *src, ptrdiff_t stride, + src2_h = __lasx_xvmul_h(wgt, src2_h); + src3_l = __lasx_xvmul_h(wgt, src3_l); + src3_h = __lasx_xvmul_h(wgt, src3_h); +- LASX_SADD_H_4(src0_l, offset, src0_h, offset, src1_l, offset, +- src1_h, offset, src0_l, src0_h, src1_l, src1_h); +- LASX_SADD_H_4(src2_l, offset, src2_h, offset, src3_l, offset, +- src3_h, offset, src2_l, src2_h, src3_l, src3_h); ++ DUP4_ARG2(__lasx_xvsadd_h, src0_l, offset, src0_h, offset, src1_l, offset, ++ src1_h, offset, src0_l, src0_h, src1_l, src1_h); ++ DUP4_ARG2(__lasx_xvsadd_h, src2_l, offset, src2_h, offset, src3_l, offset, ++ src3_h, offset, src2_l, src2_h, src3_l, src3_h); + src0_l = __lasx_xvmaxi_h(src0_l, 0); + src0_h = __lasx_xvmaxi_h(src0_h, 0); + src1_l = __lasx_xvmaxi_h(src1_l, 0); +@@ -1404,37 +1587,43 @@ void ff_weight_h264_pixels16_8_lasx(uint8_t *src, ptrdiff_t stride, + src3_l = __lasx_xvssrlrn_bu_h(src3_l, denom); + src3_h = __lasx_xvssrlrn_bu_h(src3_h, denom); + __lasx_xvstelm_d(src0_l, src, 0, 0); +- __lasx_xvstelm_d(src0_l, src, 8, 2); ++ __lasx_xvstelm_d(src0_h, src, 8, 0); + src += stride; +- __lasx_xvstelm_d(src0_h, src, 0, 0); ++ __lasx_xvstelm_d(src0_l, src, 0, 2); + __lasx_xvstelm_d(src0_h, src, 8, 2); + src += stride; + __lasx_xvstelm_d(src1_l, src, 0, 0); +- __lasx_xvstelm_d(src1_l, src, 8, 2); ++ __lasx_xvstelm_d(src1_h, src, 8, 0); + src += stride; +- __lasx_xvstelm_d(src1_h, src, 0, 0); ++ __lasx_xvstelm_d(src1_l, src, 0, 2); + __lasx_xvstelm_d(src1_h, src, 8, 2); + src += stride; + __lasx_xvstelm_d(src2_l, src, 0, 0); +- __lasx_xvstelm_d(src2_l, src, 8, 2); ++ __lasx_xvstelm_d(src2_h, src, 8, 0); + src += stride; +- __lasx_xvstelm_d(src2_h, src, 0, 0); ++ __lasx_xvstelm_d(src2_l, src, 0, 2); + __lasx_xvstelm_d(src2_h, src, 8, 2); + src += stride; + __lasx_xvstelm_d(src3_l, src, 0, 0); +- __lasx_xvstelm_d(src3_l, src, 8, 2); ++ __lasx_xvstelm_d(src3_h, src, 8, 0); + src += stride; +- __lasx_xvstelm_d(src3_h, src, 0, 0); ++ __lasx_xvstelm_d(src3_l, src, 0, 2); + __lasx_xvstelm_d(src3_h, src, 8, 2); + src += stride; + + if (16 == height) { +- LASX_LD_8(src, stride, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); +- LASX_PCKEV_Q_4(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, +- src0, src1, src2, src3); +- LASX_ILVLH_B_4(zero, src0, zero, src1, zero, src2, zero, src3, +- src0_h, src0_l, src1_h, src1_l, src2_h, src2_l, +- src3_h, src3_l); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, ++ src, stride_3x, tmp0, tmp1, tmp2, tmp3); ++ src += stride_4x; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, ++ src, stride_3x, tmp4, tmp5, tmp6, tmp7); ++ src -= stride_4x; ++ DUP4_ARG3(__lasx_xvpermi_q, tmp1, tmp0, 0x20, tmp3, tmp2, 0x20, tmp5, tmp4, ++ 0x20, tmp7, tmp6, 0x20, src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvilvl_b, zero, src0, zero, src1, zero, src2, ++ zero, src3, src0_l, src1_l, src2_l, src3_l); ++ DUP4_ARG2(__lasx_xvilvh_b, zero, src0, zero, src1, zero, src2, ++ zero, src3, src0_h, src1_h, src2_h, src3_h); + src0_l = __lasx_xvmul_h(wgt, src0_l); + src0_h = __lasx_xvmul_h(wgt, src0_h); + src1_l = __lasx_xvmul_h(wgt, src1_l); +@@ -1443,10 +1632,10 @@ void ff_weight_h264_pixels16_8_lasx(uint8_t *src, ptrdiff_t stride, + src2_h = __lasx_xvmul_h(wgt, src2_h); + src3_l = __lasx_xvmul_h(wgt, src3_l); + src3_h = __lasx_xvmul_h(wgt, src3_h); +- LASX_SADD_H_4(src0_l, offset, src0_h, offset, src1_l, offset, +- src1_h, offset, src0_l, src0_h, src1_l, src1_h); +- LASX_SADD_H_4(src2_l, offset, src2_h, offset, src3_l, offset, +- src3_h, offset, src2_l, src2_h, src3_l, src3_h); ++ DUP4_ARG2(__lasx_xvsadd_h, src0_l, offset, src0_h, offset, src1_l, offset, ++ src1_h, offset, src0_l, src0_h, src1_l, src1_h); ++ DUP4_ARG2(__lasx_xvsadd_h, src2_l, offset, src2_h, offset, src3_l, offset, ++ src3_h, offset, src2_l, src2_h, src3_l, src3_h); + src0_l = __lasx_xvmaxi_h(src0_l, 0); + src0_h = __lasx_xvmaxi_h(src0_h, 0); + src1_l = __lasx_xvmaxi_h(src1_l, 0); +@@ -1464,27 +1653,27 @@ void ff_weight_h264_pixels16_8_lasx(uint8_t *src, ptrdiff_t stride, + src3_l = __lasx_xvssrlrn_bu_h(src3_l, denom); + src3_h = __lasx_xvssrlrn_bu_h(src3_h, denom); + __lasx_xvstelm_d(src0_l, src, 0, 0); +- __lasx_xvstelm_d(src0_l, src, 8, 2); ++ __lasx_xvstelm_d(src0_h, src, 8, 0); + src += stride; +- __lasx_xvstelm_d(src0_h, src, 0, 0); ++ __lasx_xvstelm_d(src0_l, src, 0, 2); + __lasx_xvstelm_d(src0_h, src, 8, 2); + src += stride; + __lasx_xvstelm_d(src1_l, src, 0, 0); +- __lasx_xvstelm_d(src1_l, src, 8, 2); ++ __lasx_xvstelm_d(src1_h, src, 8, 0); + src += stride; +- __lasx_xvstelm_d(src1_h, src, 0, 0); ++ __lasx_xvstelm_d(src1_l, src, 0, 2); + __lasx_xvstelm_d(src1_h, src, 8, 2); + src += stride; + __lasx_xvstelm_d(src2_l, src, 0, 0); +- __lasx_xvstelm_d(src2_l, src, 8, 2); ++ __lasx_xvstelm_d(src2_h, src, 8, 0); + src += stride; +- __lasx_xvstelm_d(src2_h, src, 0, 0); ++ __lasx_xvstelm_d(src2_l, src, 0, 2); + __lasx_xvstelm_d(src2_h, src, 8, 2); + src += stride; + __lasx_xvstelm_d(src3_l, src, 0, 0); +- __lasx_xvstelm_d(src3_l, src, 8, 2); ++ __lasx_xvstelm_d(src3_h, src, 8, 0); + src += stride; +- __lasx_xvstelm_d(src3_h, src, 0, 0); ++ __lasx_xvstelm_d(src3_l, src, 0, 2); + __lasx_xvstelm_d(src3_h, src, 8, 2); + } + } +@@ -1494,6 +1683,8 @@ static void avc_wgt_8x4_lasx(uint8_t *src, ptrdiff_t stride, + int32_t offset_in) + { + uint32_t offset_val; ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; + __m256i wgt, zero = __lasx_xvldi(0); + __m256i src0, src0_h, src0_l; + __m256i tmp0, tmp1, tmp2, tmp3, denom, offset; +@@ -1504,10 +1695,12 @@ static void avc_wgt_8x4_lasx(uint8_t *src, ptrdiff_t stride, + offset = __lasx_xvreplgr2vr_h(offset_val); + denom = __lasx_xvreplgr2vr_h(log2_denom); + +- LASX_LD_4(src, stride, tmp0, tmp1, tmp2, tmp3); +- LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, src0); +- LASX_ILVLH_B(zero, src0, src0_h, src0_l); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, ++ src, stride_3x, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ src0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ src0_l = __lasx_xvilvl_b(zero, src0); ++ src0_h = __lasx_xvilvh_b(zero, src0); + src0_l = __lasx_xvmul_h(wgt, src0_l); + src0_h = __lasx_xvmul_h(wgt, src0_h); + src0_l = __lasx_xvsadd_h(src0_l, offset); +@@ -1517,18 +1710,23 @@ static void avc_wgt_8x4_lasx(uint8_t *src, ptrdiff_t stride, + src0_l = __lasx_xvssrlrn_bu_h(src0_l, denom); + src0_h = __lasx_xvssrlrn_bu_h(src0_h, denom); + +- LASX_PCKEV_D(src0_h, src0_l, src0); +- LASX_ST_D_4(src0, 0, 1, 2, 3, src, stride); ++ src0 = __lasx_xvpickev_d(src0_h, src0_l); ++ __lasx_xvstelm_d(src0, src, 0, 0); ++ __lasx_xvstelm_d(src0, src + stride, 0, 1); ++ __lasx_xvstelm_d(src0, src + stride_2x, 0, 2); ++ __lasx_xvstelm_d(src0, src + stride_3x, 0, 3); + } + + static void avc_wgt_8x8_lasx(uint8_t *src, ptrdiff_t stride, int32_t log2_denom, + int32_t src_weight, int32_t offset_in) + { +- uint32_t offset_val; + __m256i src0, src1, src0_h, src0_l, src1_h, src1_l, zero = __lasx_xvldi(0); + __m256i tmp0, tmp1, tmp2, tmp3, denom, offset, wgt; +- ptrdiff_t stride_4x = stride << 2; ++ uint32_t offset_val; + uint8_t* src_tmp = src; ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_4x = stride << 2; ++ ptrdiff_t stride_3x = stride_2x + stride; + + offset_val = (unsigned) offset_in << log2_denom; + +@@ -1536,20 +1734,23 @@ static void avc_wgt_8x8_lasx(uint8_t *src, ptrdiff_t stride, int32_t log2_denom, + offset = __lasx_xvreplgr2vr_h(offset_val); + denom = __lasx_xvreplgr2vr_h(log2_denom); + +- LASX_LD_4(src_tmp, stride, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lasx_xvldx, src_tmp, 0, src_tmp, stride, src_tmp, stride_2x, ++ src_tmp, stride_3x, tmp0, tmp1, tmp2, tmp3); + src_tmp += stride_4x; +- LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, src0); +- LASX_LD_4(src_tmp, stride, tmp0, tmp1, tmp2, tmp3); +- LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, src1); +- LASX_ILVLH_B_2(zero, src0, zero, src1, src0_h, src0_l, src1_h, src1_l); ++ DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ src0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ DUP4_ARG2(__lasx_xvldx, src_tmp, 0, src_tmp, stride, src_tmp, stride_2x, ++ src_tmp, stride_3x, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ src1 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ DUP2_ARG2(__lasx_xvilvl_b, zero, src0, zero, src1, src0_l, src1_l); ++ DUP2_ARG2(__lasx_xvilvh_b, zero, src0, zero, src1, src0_h, src1_h); + src0_l = __lasx_xvmul_h(wgt, src0_l); + src0_h = __lasx_xvmul_h(wgt, src0_h); + src1_l = __lasx_xvmul_h(wgt, src1_l); + src1_h = __lasx_xvmul_h(wgt, src1_h); +- LASX_SADD_H_4(src0_l, offset, src0_h, offset, src1_l, offset, +- src1_h, offset, src0_l, src0_h, src1_l, src1_h); ++ DUP4_ARG2(__lasx_xvsadd_h, src0_l, offset, src0_h, offset, src1_l, offset, ++ src1_h, offset, src0_l, src0_h, src1_l, src1_h); + src0_l = __lasx_xvmaxi_h(src0_l, 0); + src0_h = __lasx_xvmaxi_h(src0_h, 0); + src1_l = __lasx_xvmaxi_h(src1_l, 0); +@@ -1559,23 +1760,31 @@ static void avc_wgt_8x8_lasx(uint8_t *src, ptrdiff_t stride, int32_t log2_denom, + src1_l = __lasx_xvssrlrn_bu_h(src1_l, denom); + src1_h = __lasx_xvssrlrn_bu_h(src1_h, denom); + +- LASX_PCKEV_D_2(src0_h, src0_l, src1_h, src1_l, src0, src1); +- LASX_ST_D_4(src0, 0, 1, 2, 3, src, stride); ++ DUP2_ARG2(__lasx_xvpickev_d, src0_h, src0_l, src1_h, src1_l, src0, src1); ++ __lasx_xvstelm_d(src0, src, 0, 0); ++ __lasx_xvstelm_d(src0, src + stride, 0, 1); ++ __lasx_xvstelm_d(src0, src + stride_2x, 0, 2); ++ __lasx_xvstelm_d(src0, src + stride_3x, 0, 3); + src += stride_4x; +- LASX_ST_D_4(src1, 0, 1, 2, 3, src, stride); ++ __lasx_xvstelm_d(src1, src, 0, 0); ++ __lasx_xvstelm_d(src1, src + stride, 0, 1); ++ __lasx_xvstelm_d(src1, src + stride_2x, 0, 2); ++ __lasx_xvstelm_d(src1, src + stride_3x, 0, 3); + } + + static void avc_wgt_8x16_lasx(uint8_t *src, ptrdiff_t stride, + int32_t log2_denom, int32_t src_weight, + int32_t offset_in) + { +- uint32_t offset_val; + __m256i src0, src1, src2, src3; + __m256i src0_h, src0_l, src1_h, src1_l, src2_h, src2_l, src3_h, src3_l; + __m256i tmp0, tmp1, tmp2, tmp3, denom, offset, wgt; + __m256i zero = __lasx_xvldi(0); +- ptrdiff_t stride_4x = stride << 2; ++ uint32_t offset_val; + uint8_t* src_tmp = src; ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_4x = stride << 2; ++ ptrdiff_t stride_3x = stride_2x + stride; + + offset_val = (unsigned) offset_in << log2_denom; + +@@ -1583,24 +1792,30 @@ static void avc_wgt_8x16_lasx(uint8_t *src, ptrdiff_t stride, + offset = __lasx_xvreplgr2vr_h(offset_val); + denom = __lasx_xvreplgr2vr_h(log2_denom); + +- LASX_LD_4(src_tmp, stride, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lasx_xvldx, src_tmp, 0, src_tmp, stride, src_tmp, stride_2x, ++ src_tmp, stride_3x, tmp0, tmp1, tmp2, tmp3); + src_tmp += stride_4x; +- LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, src0); +- LASX_LD_4(src_tmp, stride, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ src0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ DUP4_ARG2(__lasx_xvldx, src_tmp, 0, src_tmp, stride, src_tmp, stride_2x, ++ src_tmp, stride_3x, tmp0, tmp1, tmp2, tmp3); + src_tmp += stride_4x; +- LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, src1); +- LASX_LD_4(src_tmp, stride, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ src1 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ DUP4_ARG2(__lasx_xvldx, src_tmp, 0, src_tmp, stride, src_tmp, stride_2x, ++ src_tmp, stride_3x, tmp0, tmp1, tmp2, tmp3); + src_tmp += stride_4x; +- LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, src2); +- LASX_LD_4(src_tmp, stride, tmp0, tmp1, tmp2, tmp3); +- LASX_ILVL_D_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, src3); +- +- LASX_ILVLH_B_4(zero, src0, zero, src1, zero, src2, zero, src3, +- src0_h, src0_l, src1_h, src1_l, src2_h, src2_l, src3_h, src3_l); ++ DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ src2 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ DUP4_ARG2(__lasx_xvldx, src_tmp, 0, src_tmp, stride, src_tmp, stride_2x, ++ src_tmp, stride_3x, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ src3 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ ++ DUP4_ARG2(__lasx_xvilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ src0_l, src1_l, src2_l, src3_l); ++ DUP4_ARG2(__lasx_xvilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ src0_h, src1_h, src2_h, src3_h); + src0_l = __lasx_xvmul_h(wgt, src0_l); + src0_h = __lasx_xvmul_h(wgt, src0_h); + src1_l = __lasx_xvmul_h(wgt, src1_l); +@@ -1610,10 +1825,10 @@ static void avc_wgt_8x16_lasx(uint8_t *src, ptrdiff_t stride, + src3_l = __lasx_xvmul_h(wgt, src3_l); + src3_h = __lasx_xvmul_h(wgt, src3_h); + +- LASX_SADD_H_4(src0_l, offset, src0_h, offset, src1_l, offset, +- src1_h, offset, src0_l, src0_h, src1_l, src1_h); +- LASX_SADD_H_4(src2_l, offset, src2_h, offset, src3_l, offset, +- src3_h, offset, src2_l, src2_h, src3_l, src3_h); ++ DUP4_ARG2(__lasx_xvsadd_h, src0_l, offset, src0_h, offset, src1_l, offset, ++ src1_h, offset, src0_l, src0_h, src1_l, src1_h); ++ DUP4_ARG2(__lasx_xvsadd_h, src2_l, offset, src2_h, offset, src3_l, offset, ++ src3_h, offset, src2_l, src2_h, src3_l, src3_h); + + src0_l = __lasx_xvmaxi_h(src0_l, 0); + src0_h = __lasx_xvmaxi_h(src0_h, 0); +@@ -1631,16 +1846,28 @@ static void avc_wgt_8x16_lasx(uint8_t *src, ptrdiff_t stride, + src2_h = __lasx_xvssrlrn_bu_h(src2_h, denom); + src3_l = __lasx_xvssrlrn_bu_h(src3_l, denom); + src3_h = __lasx_xvssrlrn_bu_h(src3_h, denom); +- LASX_PCKEV_D_4(src0_h, src0_l, src1_h, src1_l, src2_h, src2_l, src3_h, src3_l, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvpickev_d, src0_h, src0_l, src1_h, src1_l, src2_h, src2_l, ++ src3_h, src3_l, src0, src1, src2, src3); + +- LASX_ST_D_4(src0, 0, 1, 2, 3, src, stride); ++ __lasx_xvstelm_d(src0, src, 0, 0); ++ __lasx_xvstelm_d(src0, src + stride, 0, 1); ++ __lasx_xvstelm_d(src0, src + stride_2x, 0, 2); ++ __lasx_xvstelm_d(src0, src + stride_3x, 0, 3); + src += stride_4x; +- LASX_ST_D_4(src1, 0, 1, 2, 3, src, stride); ++ __lasx_xvstelm_d(src1, src, 0, 0); ++ __lasx_xvstelm_d(src1, src + stride, 0, 1); ++ __lasx_xvstelm_d(src1, src + stride_2x, 0, 2); ++ __lasx_xvstelm_d(src1, src + stride_3x, 0, 3); + src += stride_4x; +- LASX_ST_D_4(src2, 0, 1, 2, 3, src, stride); ++ __lasx_xvstelm_d(src2, src, 0, 0); ++ __lasx_xvstelm_d(src2, src + stride, 0, 1); ++ __lasx_xvstelm_d(src2, src + stride_2x, 0, 2); ++ __lasx_xvstelm_d(src2, src + stride_3x, 0, 3); + src += stride_4x; +- LASX_ST_D_4(src3, 0, 1, 2, 3, src, stride); ++ __lasx_xvstelm_d(src3, src, 0, 0); ++ __lasx_xvstelm_d(src3, src + stride, 0, 1); ++ __lasx_xvstelm_d(src3, src + stride_2x, 0, 2); ++ __lasx_xvstelm_d(src3, src + stride_3x, 0, 3); + } + + void ff_weight_h264_pixels8_8_lasx(uint8_t *src, ptrdiff_t stride, +@@ -1670,23 +1897,26 @@ static void avc_wgt_4x2_lasx(uint8_t *src, ptrdiff_t stride, + offset = __lasx_xvreplgr2vr_h(offset_val); + denom = __lasx_xvreplgr2vr_h(log2_denom); + +- LASX_LD_2(src, stride, tmp0, tmp1); +- LASX_ILVL_W_128SV(tmp1, tmp0, src0); +- LASX_ILVL_B_128SV(zero, src0, src0); ++ DUP2_ARG2(__lasx_xvldx, src, 0, src, stride, tmp0, tmp1); ++ src0 = __lasx_xvilvl_w(tmp1, tmp0); ++ src0 = __lasx_xvilvl_b(zero, src0); + src0 = __lasx_xvmul_h(wgt, src0); + src0 = __lasx_xvsadd_h(src0, offset); + src0 = __lasx_xvmaxi_h(src0, 0); + src0 = __lasx_xvssrlrn_bu_h(src0, denom); +- LASX_ST_W_2(src0, 0, 1, src, stride); ++ __lasx_xvstelm_w(src0, src, 0, 0); ++ __lasx_xvstelm_w(src0, src + stride, 0, 1); + } + + static void avc_wgt_4x4_lasx(uint8_t *src, ptrdiff_t stride, + int32_t log2_denom, int32_t weight_src, + int32_t offset_in) + { +- uint32_t offset_val; + __m256i wgt; + __m256i src0, tmp0, tmp1, tmp2, tmp3, denom, offset; ++ uint32_t offset_val; ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; + + offset_val = (unsigned) offset_in << log2_denom; + +@@ -1694,25 +1924,32 @@ static void avc_wgt_4x4_lasx(uint8_t *src, ptrdiff_t stride, + offset = __lasx_xvreplgr2vr_h(offset_val); + denom = __lasx_xvreplgr2vr_h(log2_denom); + +- LASX_LD_4(src, stride, tmp0, tmp1, tmp2, tmp3); +- LASX_ILVL_W_2_128SV(tmp2, tmp0, tmp3, tmp1, tmp0, tmp1); +- LASX_ILVL_W_128SV(tmp1, tmp0, src0); +- LASX_UNPCK_L_HU_BU(src0, src0); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, ++ src, stride_3x, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_w, tmp2, tmp0, tmp3, tmp1, tmp0, tmp1); ++ src0 = __lasx_xvilvl_w(tmp1, tmp0); ++ src0 = __lasx_vext2xv_hu_bu(src0); + src0 = __lasx_xvmul_h(wgt, src0); + src0 = __lasx_xvsadd_h(src0, offset); + src0 = __lasx_xvmaxi_h(src0, 0); + src0 = __lasx_xvssrlrn_bu_h(src0, denom); +- LASX_ST_W_4(src0, 0, 1, 4, 5, src, stride); ++ __lasx_xvstelm_w(src0, src, 0, 0); ++ __lasx_xvstelm_w(src0, src + stride, 0, 1); ++ __lasx_xvstelm_w(src0, src + stride_2x, 0, 4); ++ __lasx_xvstelm_w(src0, src + stride_3x, 0, 5); + } + + static void avc_wgt_4x8_lasx(uint8_t *src, ptrdiff_t stride, + int32_t log2_denom, int32_t weight_src, + int32_t offset_in) + { +- uint32_t offset_val; + __m256i src0, src0_h, src0_l; + __m256i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, denom, offset; + __m256i wgt, zero = __lasx_xvldi(0); ++ uint32_t offset_val; ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_4x = stride << 2; ++ ptrdiff_t stride_3x = stride_2x + stride; + + offset_val = (unsigned) offset_in << log2_denom; + +@@ -1720,12 +1957,18 @@ static void avc_wgt_4x8_lasx(uint8_t *src, ptrdiff_t stride, + offset = __lasx_xvreplgr2vr_h(offset_val); + denom = __lasx_xvreplgr2vr_h(log2_denom); + +- LASX_LD_8(src, stride, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); +- LASX_ILVL_W_4_128SV(tmp2, tmp0, tmp3, tmp1, tmp6, tmp4, tmp7, tmp5, +- tmp0, tmp1, tmp2, tmp3); +- LASX_ILVL_W_2_128SV(tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LASX_PCKEV_Q(tmp1, tmp0, src0); +- LASX_ILVLH_B(zero, src0, src0_h, src0_l); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, ++ src, stride_3x, tmp0, tmp1, tmp2, tmp3); ++ src += stride_4x; ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, ++ src, stride_3x, tmp4, tmp5, tmp6, tmp7); ++ src -= stride_4x; ++ DUP4_ARG2(__lasx_xvilvl_w, tmp2, tmp0, tmp3, tmp1, tmp6, tmp4, tmp7, ++ tmp5, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_w, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ src0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); ++ src0_l = __lasx_xvilvl_b(zero, src0); ++ src0_h = __lasx_xvilvh_b(zero, src0); + src0_l = __lasx_xvmul_h(wgt, src0_l); + src0_h = __lasx_xvmul_h(wgt, src0_h); + src0_l = __lasx_xvsadd_h(src0_l, offset); +@@ -1734,9 +1977,15 @@ static void avc_wgt_4x8_lasx(uint8_t *src, ptrdiff_t stride, + src0_h = __lasx_xvmaxi_h(src0_h, 0); + src0_l = __lasx_xvssrlrn_bu_h(src0_l, denom); + src0_h = __lasx_xvssrlrn_bu_h(src0_h, denom); +- LASX_ST_W_4(src0_l, 0, 1, 4, 5, src, stride); +- src += (stride << 2); +- LASX_ST_W_4(src0_h, 0, 1, 4, 5, src, stride); ++ __lasx_xvstelm_w(src0_l, src, 0, 0); ++ __lasx_xvstelm_w(src0_l, src + stride, 0, 1); ++ __lasx_xvstelm_w(src0_h, src + stride_2x, 0, 0); ++ __lasx_xvstelm_w(src0_h, src + stride_3x, 0, 1); ++ src += stride_4x; ++ __lasx_xvstelm_w(src0_l, src, 0, 4); ++ __lasx_xvstelm_w(src0_l, src + stride, 0, 5); ++ __lasx_xvstelm_w(src0_h, src + stride_2x, 0, 4); ++ __lasx_xvstelm_w(src0_h, src + stride_3x, 0, 5); + } + + void ff_weight_h264_pixels4_8_lasx(uint8_t *src, ptrdiff_t stride, +diff --git a/libavcodec/loongarch/h264idct_lasx.c b/libavcodec/loongarch/h264idct_lasx.c +index a4acb2d404..88dc56ef2c 100644 +--- a/libavcodec/loongarch/h264idct_lasx.c ++++ b/libavcodec/loongarch/h264idct_lasx.c +@@ -22,39 +22,10 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "libavutil/loongarch/generic_macros_lasx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + #include "h264dsp_lasx.h" + #include "libavcodec/bit_depth_template.c" + +-#define BUTTERFLY_4_H(tmp0_m, tmp1_m, tmp2_m, tmp3_m, out0, out1, out2, out3) \ +-{ \ +- out0 = __lasx_xvadd_h(tmp0_m, tmp3_m); \ +- out1 = __lasx_xvadd_h(tmp1_m, tmp2_m); \ +- out2 = __lasx_xvsub_h(tmp1_m, tmp2_m); \ +- out3 = __lasx_xvsub_h(tmp0_m, tmp3_m); \ +- } +- +-#define BUTTERFLY_4_W(tmp0_m, tmp1_m, tmp2_m, tmp3_m, out0, out1, out2, out3) \ +-{ \ +- out0 = __lasx_xvadd_w(tmp0_m, tmp3_m); \ +- out1 = __lasx_xvadd_w(tmp1_m, tmp2_m); \ +- out2 = __lasx_xvsub_w(tmp1_m, tmp2_m); \ +- out3 = __lasx_xvsub_w(tmp0_m, tmp3_m); \ +- } +- +-#define BUTTERFLY_8_H(in0, in1, in2, in3, in4, in5, in6, in7, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- out0 = __lasx_xvadd_h(in0, in7); \ +- out1 = __lasx_xvadd_h(in1, in6); \ +- out2 = __lasx_xvadd_h(in2, in5); \ +- out3 = __lasx_xvadd_h(in3, in4); \ +- out4 = __lasx_xvsub_h(in3, in4); \ +- out5 = __lasx_xvsub_h(in2, in5); \ +- out6 = __lasx_xvsub_h(in1, in6); \ +- out7 = __lasx_xvsub_h(in0, in7); \ +-} +- + #define AVC_ITRANS_H(in0, in1, in2, in3, out0, out1, out2, out3) \ + { \ + __m256i tmp0_m, tmp1_m, tmp2_m, tmp3_m; \ +@@ -66,8 +37,8 @@ + tmp3_m = __lasx_xvsrai_h(in3, 1); \ + tmp3_m = __lasx_xvadd_h(in1, tmp3_m); \ + \ +- BUTTERFLY_4_H(tmp0_m, tmp1_m, tmp2_m, tmp3_m, \ +- out0, out1, out2, out3); \ ++ LASX_BUTTERFLY_4_H(tmp0_m, tmp1_m, tmp2_m, tmp3_m, \ ++ out0, out1, out2, out3); \ + } + + void ff_h264_idct_add_lasx(uint8_t *dst, int16_t *src, int32_t dst_stride) +@@ -76,27 +47,34 @@ void ff_h264_idct_add_lasx(uint8_t *dst, int16_t *src, int32_t dst_stride) + __m256i dst0_m, dst1_m; + __m256i hres0, hres1, hres2, hres3, vres0, vres1, vres2, vres3; + __m256i inp0_m, inp1_m, res0_m, src1, src3; +- __m256i src0 = LASX_LD(src); +- __m256i src2 = LASX_LD(src + 8); ++ __m256i src0 = __lasx_xvld(src, 0); ++ __m256i src2 = __lasx_xvld(src, 16); + __m256i zero = __lasx_xvldi(0); ++ int32_t dst_stride_2x = dst_stride << 1; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; + +- LASX_ST(zero, src); +- LASX_ILVH_D_2_128SV(src0, src0, src2, src2, src1, src3); ++ __lasx_xvst(zero, src, 0); ++ DUP2_ARG2(__lasx_xvilvh_d, src0, src0, src2, src2, src1, src3); + AVC_ITRANS_H(src0, src1, src2, src3, hres0, hres1, hres2, hres3); +- LASX_TRANSPOSE4x4_H_128SV(hres0, hres1, hres2, hres3, +- hres0, hres1, hres2, hres3); ++ LASX_TRANSPOSE4x4_H(hres0, hres1, hres2, hres3, hres0, hres1, hres2, hres3); + AVC_ITRANS_H(hres0, hres1, hres2, hres3, vres0, vres1, vres2, vres3); +- LASX_LD_4(dst, dst_stride, src0_m, src1_m, src2_m, src3_m); +- LASX_ILVL_D_2_128SV(vres1, vres0, vres3, vres2, inp0_m, inp1_m); +- LASX_PCKEV_Q(inp1_m, inp0_m, inp0_m); +- LASX_SRARI_H(inp0_m, inp0_m, 6); +- LASX_ILVL_W_2_128SV(src1_m, src0_m, src3_m, src2_m, dst0_m, dst1_m); +- LASX_ILVL_D_128SV(dst1_m, dst0_m, dst0_m); +- LASX_UNPCK_L_HU_BU(dst0_m, res0_m); ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dst_stride, dst, dst_stride_2x, ++ dst, dst_stride_3x, src0_m, src1_m, src2_m, src3_m); ++ DUP4_ARG2(__lasx_xvld, dst, 0, dst + dst_stride, 0, dst + dst_stride_2x, ++ 0, dst + dst_stride_3x, 0, src0_m, src1_m, src2_m, src3_m); ++ DUP2_ARG2(__lasx_xvilvl_d, vres1, vres0, vres3, vres2, inp0_m, inp1_m); ++ inp0_m = __lasx_xvpermi_q(inp1_m, inp0_m, 0x20); ++ inp0_m = __lasx_xvsrari_h(inp0_m, 6); ++ DUP2_ARG2(__lasx_xvilvl_w, src1_m, src0_m, src3_m, src2_m, dst0_m, dst1_m); ++ dst0_m = __lasx_xvilvl_d(dst1_m, dst0_m); ++ res0_m = __lasx_vext2xv_hu_bu(dst0_m); + res0_m = __lasx_xvadd_h(res0_m, inp0_m); +- LASX_CLIP_H_0_255(res0_m, res0_m); ++ res0_m = __lasx_xvclip255_h(res0_m); + dst0_m = __lasx_xvpickev_b(res0_m, res0_m); +- LASX_ST_W_4(dst0_m, 0, 1, 4, 5, dst, dst_stride); ++ __lasx_xvstelm_w(dst0_m, dst, 0, 0); ++ __lasx_xvstelm_w(dst0_m, dst + dst_stride, 0, 1); ++ __lasx_xvstelm_w(dst0_m, dst + dst_stride_2x, 0, 4); ++ __lasx_xvstelm_w(dst0_m, dst + dst_stride_3x, 0, 5); + } + + void ff_h264_idct8_addblk_lasx(uint8_t *dst, int16_t *src, +@@ -108,10 +86,17 @@ void ff_h264_idct8_addblk_lasx(uint8_t *dst, int16_t *src, + __m256i res0, res1, res2, res3, res4, res5, res6, res7; + __m256i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; + __m256i zero = __lasx_xvldi(0); ++ int32_t dst_stride_2x = dst_stride << 1; ++ int32_t dst_stride_4x = dst_stride << 2; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; + + src[0] += 32; +- LASX_LD_8(src, 8, src0, src1, src2, src3, src4, src5, src6, src7); +- LASX_ST_4(zero, zero, zero, zero, src, 16); ++ DUP4_ARG2(__lasx_xvld, src, 0, src, 16, src, 32, src, 48, src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvld, src, 64, src, 80, src, 96, src, 112, src4, src5, src6, src7); ++ __lasx_xvst(zero, src, 0); ++ __lasx_xvst(zero, src, 32); ++ __lasx_xvst(zero, src, 64); ++ __lasx_xvst(zero, src, 96); + + vec0 = __lasx_xvadd_h(src0, src4); + vec1 = __lasx_xvsub_h(src0, src4); +@@ -120,7 +105,7 @@ void ff_h264_idct8_addblk_lasx(uint8_t *dst, int16_t *src, + vec3 = __lasx_xvsrai_h(src6, 1); + vec3 = __lasx_xvadd_h(src2, vec3); + +- BUTTERFLY_4_H(vec0, vec1, vec2, vec3, tmp0, tmp1, tmp2, tmp3); ++ LASX_BUTTERFLY_4_H(vec0, vec1, vec2, vec3, tmp0, tmp1, tmp2, tmp3); + + vec0 = __lasx_xvsrai_h(src7, 1); + vec0 = __lasx_xvsub_h(src5, vec0); +@@ -151,13 +136,13 @@ void ff_h264_idct8_addblk_lasx(uint8_t *dst, int16_t *src, + tmp7 = __lasx_xvsrai_h(vec0, 2); + tmp7 = __lasx_xvsub_h(vec3, tmp7); + +- BUTTERFLY_8_H(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, +- res0, res1, res2, res3, res4, res5, res6, res7); +- LASX_TRANSPOSE8x8_H_128SV(res0, res1, res2, res3, res4, res5, res6, res7, +- res0, res1, res2, res3, res4, res5, res6, res7); ++ LASX_BUTTERFLY_8_H(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, ++ res0, res1, res2, res3, res4, res5, res6, res7); ++ LASX_TRANSPOSE8x8_H(res0, res1, res2, res3, res4, res5, res6, res7, ++ res0, res1, res2, res3, res4, res5, res6, res7); + +- LASX_UNPCK_L_W_H_8(res0, res1, res2, res3, res4, res5, res6, res7, +- tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7); ++ DUP4_ARG1(__lasx_vext2xv_w_h, res0, res1, res2, res3, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG1(__lasx_vext2xv_w_h, res4, res5, res6, res7, tmp4, tmp5, tmp6, tmp7); + vec0 = __lasx_xvadd_w(tmp0, tmp4); + vec1 = __lasx_xvsub_w(tmp0, tmp4); + +@@ -200,52 +185,77 @@ void ff_h264_idct8_addblk_lasx(uint8_t *dst, int16_t *src, + tmp7 = __lasx_xvsrai_w(vec0, 2); + tmp7 = __lasx_xvsub_w(vec3, tmp7); + +- BUTTERFLY_4_W(tmp0, tmp2, tmp5, tmp7, res0, res1, res6, res7); +- BUTTERFLY_4_W(tmp4, tmp6, tmp1, tmp3, res2, res3, res4, res5); +- +- LASX_SRAI_W_8(res0, res1, res2, res3, res4, res5, res6, res7, +- res0, res1, res2, res3, res4, res5, res6, res7, 6); +- LASX_PCKEV_H_4(res1, res0, res3, res2, res5, res4, res7, res6, +- res0, res1, res2, res3); +- +- LASX_LD_8(dst, dst_stride, dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7); +- LASX_ILVL_B_8_128SV(zero, dst0, zero, dst1, zero, dst2, zero, dst3, +- zero, dst4, zero, dst5, zero, dst6, zero, dst7, +- dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7); +- LASX_PCKEV_Q_4(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, +- dst0, dst1, dst2, dst3); ++ LASX_BUTTERFLY_4_W(tmp0, tmp2, tmp5, tmp7, res0, res1, res6, res7); ++ LASX_BUTTERFLY_4_W(tmp4, tmp6, tmp1, tmp3, res2, res3, res4, res5); ++ ++ DUP4_ARG2(__lasx_xvsrai_w, res0, 6, res1, 6, res2, 6, res3, 6, res0, res1, res2, res3); ++ DUP4_ARG2(__lasx_xvsrai_w, res4, 6, res5, 6, res6, 6, res7, 6, res4, res5, res6, res7); ++ DUP4_ARG2(__lasx_xvpickev_h, res1, res0, res3, res2, res5, res4, res7, res6, ++ res0, res1, res2, res3); ++ DUP4_ARG2(__lasx_xvpermi_d, res0, 0xd8, res1, 0xd8, res2, 0xd8, res3, 0xd8, ++ res0, res1, res2, res3); ++ ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dst_stride, dst, dst_stride_2x, ++ dst, dst_stride_3x, dst0, dst1, dst2, dst3); ++ dst += dst_stride_4x; ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dst_stride, dst, dst_stride_2x, ++ dst, dst_stride_3x, dst4, dst5, dst6, dst7); ++ dst -= dst_stride_4x; ++ DUP4_ARG2(__lasx_xvilvl_b, zero, dst0, zero, dst1, zero, dst2, zero, dst3, ++ dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lasx_xvilvl_b, zero, dst4, zero, dst5, zero, dst6, zero, dst7, ++ dst4, dst5, dst6, dst7); ++ DUP4_ARG3(__lasx_xvpermi_q, dst1, dst0, 0x20, dst3, dst2, 0x20, dst5, dst4, 0x20, ++ dst7, dst6, 0x20, dst0, dst1, dst2, dst3); + res0 = __lasx_xvadd_h(res0, dst0); + res1 = __lasx_xvadd_h(res1, dst1); + res2 = __lasx_xvadd_h(res2, dst2); + res3 = __lasx_xvadd_h(res3, dst3); +- LASX_CLIP_H_0_255_4(res0, res1, res2, res3, res0, res1, res2, res3); +- LASX_PCKEV_B_2_128SV(res1, res0, res3, res2, res0, res1); +- LASX_ST_D_4(res0, 0, 2, 1, 3, dst, dst_stride); +- LASX_ST_D_4(res1, 0, 2, 1, 3, dst + 4 * dst_stride, dst_stride); ++ DUP4_ARG1(__lasx_xvclip255_h, res0, res1, res2, res3, res0, res1, res2, res3); ++ DUP2_ARG2(__lasx_xvpickev_b, res1, res0, res3, res2, res0, res1); ++ __lasx_xvstelm_d(res0, dst, 0, 0); ++ __lasx_xvstelm_d(res0, dst + dst_stride, 0, 2); ++ __lasx_xvstelm_d(res0, dst + dst_stride_2x, 0, 1); ++ __lasx_xvstelm_d(res0, dst + dst_stride_3x, 0, 3); ++ dst += dst_stride_4x; ++ __lasx_xvstelm_d(res1, dst, 0, 0); ++ __lasx_xvstelm_d(res1, dst + dst_stride, 0, 2); ++ __lasx_xvstelm_d(res1, dst + dst_stride_2x, 0, 1); ++ __lasx_xvstelm_d(res1, dst + dst_stride_3x, 0, 3); + } + + void ff_h264_idct4x4_addblk_dc_lasx(uint8_t *dst, int16_t *src, + int32_t dst_stride) + { + const int16_t dc = (src[0] + 32) >> 6; ++ int32_t dst_stride_2x = dst_stride << 1; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; + __m256i pred, out; + __m256i src0, src1, src2, src3; + __m256i input_dc = __lasx_xvreplgr2vr_h(dc); + + src[0] = 0; +- LASX_LD_4(dst, dst_stride, src0, src1, src2, src3); +- LASX_ILVL_W_2_128SV(src1, src0, src3, src2, src0, src1); ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dst_stride, dst, dst_stride_2x, ++ dst, dst_stride_3x, src0, src1, src2, src3); ++ DUP2_ARG2(__lasx_xvilvl_w, src1, src0, src3, src2, src0, src1); ++ + pred = __lasx_xvpermi_q(src0, src1, 0x02); +- LASX_ADDW_H_H_BU_128SV(input_dc, pred, pred); +- LASX_CLIP_H_0_255(pred, pred); ++ pred = __lasx_xvaddw_h_h_bu(input_dc, pred); ++ pred = __lasx_xvclip255_h(pred); + out = __lasx_xvpickev_b(pred, pred); +- LASX_ST_W_4(out, 0, 1, 4, 5, dst, dst_stride); ++ __lasx_xvstelm_w(out, dst, 0, 0); ++ __lasx_xvstelm_w(out, dst + dst_stride, 0, 1); ++ __lasx_xvstelm_w(out, dst + dst_stride_2x, 0, 4); ++ __lasx_xvstelm_w(out, dst + dst_stride_3x, 0, 5); + } + + void ff_h264_idct8_dc_addblk_lasx(uint8_t *dst, int16_t *src, + int32_t dst_stride) + { + int32_t dc_val; ++ int32_t dst_stride_2x = dst_stride << 1; ++ int32_t dst_stride_4x = dst_stride << 2; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; + __m256i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; + __m256i dc; + +@@ -254,19 +264,31 @@ void ff_h264_idct8_dc_addblk_lasx(uint8_t *dst, int16_t *src, + + src[0] = 0; + +- LASX_LD_8(dst, dst_stride, dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7); +- LASX_UNPCK_L_HU_BU_8(dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, +- dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7); +- LASX_PCKEV_Q_4(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, +- dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dst_stride, dst, dst_stride_2x, ++ dst, dst_stride_3x, dst0, dst1, dst2, dst3); ++ dst += dst_stride_4x; ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dst_stride, dst, dst_stride_2x, ++ dst, dst_stride_3x, dst4, dst5, dst6, dst7); ++ dst -= dst_stride_4x; ++ DUP4_ARG1(__lasx_vext2xv_hu_bu, dst0, dst1, dst2, dst3, dst0, dst1, dst2, dst3); ++ DUP4_ARG1(__lasx_vext2xv_hu_bu, dst4, dst5, dst6, dst7, dst4, dst5, dst6, dst7); ++ DUP4_ARG3(__lasx_xvpermi_q, dst1, dst0, 0x20, dst3, dst2, 0x20, dst5, dst4, 0x20, ++ dst7, dst6, 0x20, dst0, dst1, dst2, dst3); + dst0 = __lasx_xvadd_h(dst0, dc); + dst1 = __lasx_xvadd_h(dst1, dc); + dst2 = __lasx_xvadd_h(dst2, dc); + dst3 = __lasx_xvadd_h(dst3, dc); +- LASX_CLIP_H_0_255_4(dst0, dst1, dst2, dst3, dst0, dst1, dst2, dst3); +- LASX_PCKEV_B_2_128SV(dst1, dst0, dst3, dst2, dst0, dst1); +- LASX_ST_D_4(dst0, 0, 2, 1, 3, dst, dst_stride); +- LASX_ST_D_4(dst1, 0, 2, 1, 3, dst + 4 * dst_stride, dst_stride); ++ DUP4_ARG1(__lasx_xvclip255_h, dst0, dst1, dst2, dst3, dst0, dst1, dst2, dst3); ++ DUP2_ARG2(__lasx_xvpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); ++ __lasx_xvstelm_d(dst0, dst, 0, 0); ++ __lasx_xvstelm_d(dst0, dst + dst_stride, 0, 2); ++ __lasx_xvstelm_d(dst0, dst + dst_stride_2x, 0, 1); ++ __lasx_xvstelm_d(dst0, dst + dst_stride_3x, 0, 3); ++ dst += dst_stride_4x; ++ __lasx_xvstelm_d(dst1, dst, 0, 0); ++ __lasx_xvstelm_d(dst1, dst + dst_stride, 0, 2); ++ __lasx_xvstelm_d(dst1, dst + dst_stride_2x, 0, 1); ++ __lasx_xvstelm_d(dst1, dst + dst_stride_3x, 0, 3); + } + + void ff_h264_idct_add16_lasx(uint8_t *dst, +@@ -424,22 +446,23 @@ void ff_h264_deq_idct_luma_dc_lasx(int16_t *dst, int16_t *src, + __m256i vres0, vres1, vres2, vres3; + __m256i de_q_vec = __lasx_xvreplgr2vr_w(de_qval); + +- LASX_LD_4(src, 4, src0, src1, src2, src3); +- LASX_TRANSPOSE4x4_H_128SV(src0, src1, src2, src3, tmp0, tmp1, tmp2, tmp3); +- BUTTERFLY_4_H(tmp0, tmp2, tmp3, tmp1, vec0, vec3, vec2, vec1); +- BUTTERFLY_4_H(vec0, vec1, vec2, vec3, hres0, hres3, hres2, hres1); +- LASX_TRANSPOSE4x4_H_128SV(hres0, hres1, hres2, hres3, hres0, hres1, hres2, hres3); +- BUTTERFLY_4_H(hres0, hres1, hres3, hres2, vec0, vec3, vec2, vec1); +- BUTTERFLY_4_H(vec0, vec1, vec2, vec3, vres0, vres1, vres2, vres3); +- LASX_UNPCK_L_W_H_4(vres0, vres1, vres2, vres3, vres0, vres1, vres2, vres3); +- LASX_PCKEV_Q_2(vres1, vres0, vres3, vres2, vres0, vres1); ++ DUP4_ARG2(__lasx_xvld, src, 0, src, 8, src, 16, src, 24, src0, src1, src2, src3); ++ LASX_TRANSPOSE4x4_H(src0, src1, src2, src3, tmp0, tmp1, tmp2, tmp3); ++ LASX_BUTTERFLY_4_H(tmp0, tmp2, tmp3, tmp1, vec0, vec3, vec2, vec1); ++ LASX_BUTTERFLY_4_H(vec0, vec1, vec2, vec3, hres0, hres3, hres2, hres1); ++ LASX_TRANSPOSE4x4_H(hres0, hres1, hres2, hres3, hres0, hres1, hres2, hres3); ++ LASX_BUTTERFLY_4_H(hres0, hres1, hres3, hres2, vec0, vec3, vec2, vec1); ++ LASX_BUTTERFLY_4_H(vec0, vec1, vec2, vec3, vres0, vres1, vres2, vres3); ++ DUP4_ARG1(__lasx_vext2xv_w_h, vres0, vres1, vres2, vres3, vres0, vres1, vres2, vres3); ++ DUP2_ARG3(__lasx_xvpermi_q, vres1, vres0, 0x20, vres3, vres2, 0x20, vres0, vres1); + + vres0 = __lasx_xvmul_w(vres0, de_q_vec); + vres1 = __lasx_xvmul_w(vres1, de_q_vec); + + vres0 = __lasx_xvsrari_w(vres0, 8); + vres1 = __lasx_xvsrari_w(vres1, 8); +- LASX_PCKEV_H(vres1, vres0, vec0); ++ vec0 = __lasx_xvpickev_h(vres1, vres0); ++ vec0 = __lasx_xvpermi_d(vec0, 0xd8); + __lasx_xvstelm_h(vec0, dst + 0 * DC_DEST_STRIDE, 0, 0); + __lasx_xvstelm_h(vec0, dst + 2 * DC_DEST_STRIDE, 0, 1); + __lasx_xvstelm_h(vec0, dst + 8 * DC_DEST_STRIDE, 0, 2); +diff --git a/libavcodec/loongarch/h264qpel_lasx.c b/libavcodec/loongarch/h264qpel_lasx.c +index 9bf1f60a4f..833cb07027 100644 +--- a/libavcodec/loongarch/h264qpel_lasx.c ++++ b/libavcodec/loongarch/h264qpel_lasx.c +@@ -22,7 +22,7 @@ + */ + + #include "h264qpel_lasx.h" +-#include "libavutil/loongarch/generic_macros_lasx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + #include "libavutil/attributes.h" + + static const uint8_t luma_mask_arr[16 * 6] __attribute__((aligned(0x40))) = { +@@ -43,9 +43,9 @@ static const uint8_t luma_mask_arr[16 * 6] __attribute__((aligned(0x40))) = { + tmp0_m = __lasx_xvshuf_b(in1, in0, mask0); \ + out0_m = __lasx_xvhaddw_h_b(tmp0_m, tmp0_m); \ + tmp0_m = __lasx_xvshuf_b(in1, in0, mask1); \ +- LASX_DP2ADD_H_B(out0_m, minus5b, tmp0_m, out0_m); \ ++ out0_m = __lasx_xvdp2add_h_b(out0_m, minus5b, tmp0_m); \ + tmp0_m = __lasx_xvshuf_b(in1, in0, mask2); \ +- LASX_DP2ADD_H_B(out0_m, plus20b, tmp0_m, out0_m); \ ++ out0_m = __lasx_xvdp2add_h_b(out0_m, plus20b, tmp0_m); \ + \ + out0_m; \ + } ) +@@ -54,9 +54,9 @@ static const uint8_t luma_mask_arr[16 * 6] __attribute__((aligned(0x40))) = { + ( { \ + __m256i out0_m; \ + \ +- LASX_DP2_H_B(in0, coeff0, out0_m); \ +- LASX_DP2ADD_H_B(out0_m, in1, coeff1, out0_m); \ +- LASX_DP2ADD_H_B(out0_m, in2, coeff2, out0_m); \ ++ out0_m = __lasx_xvdp2_h_b(in0, coeff0); \ ++ DUP2_ARG3(__lasx_xvdp2add_h_b, out0_m, in1, coeff1, out0_m,\ ++ in2, coeff2, out0_m, out0_m); \ + \ + out0_m; \ + } ) +@@ -70,9 +70,9 @@ void avc_luma_hv_qrt_and_aver_dst_16x16_lasx(const uint8_t *src_x, + const int16_t filt_const1 = 0x1414; + const int16_t filt_const2 = 0x1fb; + uint32_t loop_cnt; +- int32_t stride_x2 = stride << 1; +- int32_t stride_x3 = stride_x2 + stride; +- int32_t stride_x4 = stride << 2; ++ int32_t stride_2x = stride << 1; ++ int32_t stride_3x = stride_2x + stride; ++ int32_t stride_4x = stride << 2; + __m256i tmp0, tmp1; + __m256i src_hz0, src_hz1, src_hz2, src_hz3, mask0, mask1, mask2; + __m256i src_vt0, src_vt1, src_vt2, src_vt3, src_vt4, src_vt5, src_vt6; +@@ -88,23 +88,27 @@ void avc_luma_hv_qrt_and_aver_dst_16x16_lasx(const uint8_t *src_x, + filt1 = __lasx_xvreplgr2vr_h(filt_const1); + filt2 = __lasx_xvreplgr2vr_h(filt_const2); + +- mask0 = LASX_LD(luma_mask_arr); +- LASX_LD_2(luma_mask_arr + 32, 32, mask1, mask2); +- src_vt0 = LASX_LD(src_y); +- LASX_LD_4(src_y + stride, stride, src_vt1, src_vt2, src_vt3, src_vt4); +- src_y += stride_x4 + stride; ++ mask0 = __lasx_xvld(luma_mask_arr, 0); ++ DUP2_ARG2(__lasx_xvld, luma_mask_arr, 32, luma_mask_arr, 64, mask1, mask2); ++ src_vt0 = __lasx_xvld(src_y, 0); ++ DUP4_ARG2(__lasx_xvld, src_y + stride, 0, src_y + stride_2x, 0, src_y + stride_3x, 0, ++ src_y + stride_4x, 0, src_vt1, src_vt2, src_vt3, src_vt4); ++ src_y += stride_4x + stride; + +- LASX_XORI_B_128(src_vt0); +- LASX_XORI_B_4_128(src_vt1, src_vt2, src_vt3, src_vt4); ++ src_vt0 = __lasx_xvxori_b(src_vt0, 128); ++ DUP4_ARG2(__lasx_xvxori_b, src_vt1, 128, src_vt2, 128, src_vt3, 128, src_vt4, 128, ++ src_vt1, src_vt2, src_vt3, src_vt4); + + for (loop_cnt = 4; loop_cnt--;) { +- LASX_LD_4(src_x, stride, src_hz0, src_hz1, src_hz2, src_hz3); +- src_x += stride_x4; ++ DUP4_ARG2(__lasx_xvld, src_x, 0, src_x + stride, 0, src_x + stride_2x, 0, ++ src_x + stride_3x, 0, src_hz0, src_hz1, src_hz2, src_hz3); ++ src_x += stride_4x; + src_hz0 = __lasx_xvpermi_d(src_hz0, 0x94); + src_hz1 = __lasx_xvpermi_d(src_hz1, 0x94); + src_hz2 = __lasx_xvpermi_d(src_hz2, 0x94); + src_hz3 = __lasx_xvpermi_d(src_hz3, 0x94); +- LASX_XORI_B_4_128(src_hz0, src_hz1, src_hz2, src_hz3); ++ DUP4_ARG2(__lasx_xvxori_b, src_hz0, 128, src_hz1, 128, src_hz2, 128, src_hz3, ++ 128, src_hz0, src_hz1, src_hz2, src_hz3); + + hz_out0 = AVC_HORZ_FILTER_SH(src_hz0, src_hz0, mask0, mask1, mask2); + hz_out1 = AVC_HORZ_FILTER_SH(src_hz1, src_hz1, mask0, mask1, mask2); +@@ -113,16 +117,27 @@ void avc_luma_hv_qrt_and_aver_dst_16x16_lasx(const uint8_t *src_x, + hz_out0 = __lasx_xvssrarni_b_h(hz_out1, hz_out0, 5); + hz_out2 = __lasx_xvssrarni_b_h(hz_out3, hz_out2, 5); + +- LASX_LD_4(src_y, stride, src_vt5, src_vt6, src_vt7, src_vt8); +- src_y += stride_x4; +- +- LASX_XORI_B_4_128(src_vt5, src_vt6, src_vt7, src_vt8); +- LASX_ILVL_B_4(src_vt1, src_vt0, src_vt2, src_vt1, src_vt3, src_vt2, +- src_vt4, src_vt3, src_vt10_h, src_vt21_h, src_vt32_h, +- src_vt43_h); +- LASX_ILVL_B_4(src_vt5, src_vt4, src_vt6, src_vt5, src_vt7, src_vt6, +- src_vt8, src_vt7, src_vt54_h, src_vt65_h, src_vt76_h, +- src_vt87_h); ++ DUP4_ARG2(__lasx_xvld, src_y, 0, src_y + stride, 0, src_y + stride_2x, 0, ++ src_y + stride_3x, 0, src_vt5, src_vt6, src_vt7, src_vt8); ++ src_y += stride_4x; ++ ++ DUP4_ARG2(__lasx_xvxori_b, src_vt5, 128, src_vt6, 128, src_vt7, 128, src_vt8, ++ 128, src_vt5, src_vt6, src_vt7, src_vt8); ++ ++ DUP4_ARG3(__lasx_xvpermi_q, src_vt0, src_vt4, 0x02, src_vt1, src_vt5, 0x02, ++ src_vt2, src_vt6, 0x02, src_vt3, src_vt7, 0x02, src_vt0, src_vt1, ++ src_vt2, src_vt3); ++ src_vt87_h = __lasx_xvpermi_q(src_vt4, src_vt8, 0x02); ++ DUP4_ARG2(__lasx_xvilvh_b, src_vt1, src_vt0, src_vt2, src_vt1, src_vt3, src_vt2, ++ src_vt87_h, src_vt3, src_hz0, src_hz1, src_hz2, src_hz3); ++ DUP4_ARG2(__lasx_xvilvl_b, src_vt1, src_vt0, src_vt2, src_vt1, src_vt3, src_vt2, ++ src_vt87_h, src_vt3, src_vt0, src_vt1, src_vt2, src_vt3); ++ DUP4_ARG3(__lasx_xvpermi_q, src_vt0, src_hz0, 0x02, src_vt1, src_hz1, 0x02, ++ src_vt2, src_hz2, 0x02, src_vt3, src_hz3, 0x02, src_vt10_h, src_vt21_h, ++ src_vt32_h, src_vt43_h); ++ DUP4_ARG3(__lasx_xvpermi_q, src_vt0, src_hz0, 0x13, src_vt1, src_hz1, 0x13, ++ src_vt2, src_hz2, 0x13, src_vt3, src_hz3, 0x13, src_vt54_h, src_vt65_h, ++ src_vt76_h, src_vt87_h); + vt_out0 = AVC_DOT_SH3_SH(src_vt10_h, src_vt32_h, src_vt54_h, filt0, + filt1, filt2); + vt_out1 = AVC_DOT_SH3_SH(src_vt21_h, src_vt43_h, src_vt65_h, filt0, +@@ -134,29 +149,34 @@ void avc_luma_hv_qrt_and_aver_dst_16x16_lasx(const uint8_t *src_x, + vt_out0 = __lasx_xvssrarni_b_h(vt_out1, vt_out0, 5); + vt_out2 = __lasx_xvssrarni_b_h(vt_out3, vt_out2, 5); + +- LASX_ADDWL_H_B_2_128SV(hz_out0, vt_out0, hz_out2, vt_out2, out0, out2); +- LASX_ADDWH_H_B_2_128SV(hz_out0, vt_out0, hz_out2, vt_out2, out1, out3); ++ DUP2_ARG2(__lasx_xvaddwl_h_b, hz_out0, vt_out0, hz_out2, vt_out2, out0, out2); ++ DUP2_ARG2(__lasx_xvaddwh_h_b, hz_out0, vt_out0, hz_out2, vt_out2, out1, out3); + tmp0 = __lasx_xvssrarni_b_h(out1, out0, 1); + tmp1 = __lasx_xvssrarni_b_h(out3, out2, 1); + +- LASX_XORI_B_2_128(tmp0, tmp1); +- +- LASX_LD_4(dst, stride, out0, out1, out2, out3); +- LASX_ILVL_D_2(out1, out0, out3, out2, out0, out1); ++ DUP2_ARG2(__lasx_xvxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, ++ out0, out1, out2, out3); ++ out0 = __lasx_xvpermi_q(out0, out2, 0x02); ++ out1 = __lasx_xvpermi_q(out1, out3, 0x02); ++ out2 = __lasx_xvilvl_d(out1, out0); ++ out3 = __lasx_xvilvh_d(out1, out0); ++ out0 = __lasx_xvpermi_q(out2, out3, 0x02); ++ out1 = __lasx_xvpermi_q(out2, out3, 0x13); + tmp0 = __lasx_xvavgr_bu(out0, tmp0); + tmp1 = __lasx_xvavgr_bu(out1, tmp1); + +- *(int64_t*)dst = __lasx_xvpickve2gr_d(tmp0, 0); +- *(int64_t*)(dst + stride) = __lasx_xvpickve2gr_d(tmp0, 1); +- *(int64_t*)(dst + stride_x2) = __lasx_xvpickve2gr_d(tmp1, 0); +- *(int64_t*)(dst + stride_x3) = __lasx_xvpickve2gr_d(tmp1, 1); ++ __lasx_xvstelm_d(tmp0, dst, 0, 0); ++ __lasx_xvstelm_d(tmp0, dst + stride, 0, 1); ++ __lasx_xvstelm_d(tmp1, dst + stride_2x, 0, 0); ++ __lasx_xvstelm_d(tmp1, dst + stride_3x, 0, 1); + +- *(int64_t*)(dst + 8) = __lasx_xvpickve2gr_d(tmp0, 2); +- *(int64_t*)(dst + 8 + stride) = __lasx_xvpickve2gr_d(tmp0, 3); +- *(int64_t*)(dst + 8 + stride_x2) = __lasx_xvpickve2gr_d(tmp1, 2); +- *(int64_t*)(dst + 8 + stride_x3) = __lasx_xvpickve2gr_d(tmp1, 3); ++ __lasx_xvstelm_d(tmp0, dst, 8, 2); ++ __lasx_xvstelm_d(tmp0, dst + stride, 8, 3); ++ __lasx_xvstelm_d(tmp1, dst + stride_2x, 8, 2); ++ __lasx_xvstelm_d(tmp1, dst + stride_3x, 8, 3); + +- dst += stride_x4; ++ dst += stride_4x; + src_vt0 = src_vt4; + src_vt1 = src_vt5; + src_vt2 = src_vt6; +@@ -173,9 +193,9 @@ avc_luma_hv_qrt_16x16_lasx(const uint8_t *src_x, const uint8_t *src_y, uint8_t * + const int16_t filt_const1 = 0x1414; + const int16_t filt_const2 = 0x1fb; + uint32_t loop_cnt; +- int32_t stride_x2 = stride << 1; +- int32_t stride_x3 = stride_x2 + stride; +- int32_t stride_x4 = stride << 2; ++ int32_t stride_2x = stride << 1; ++ int32_t stride_3x = stride_2x + stride; ++ int32_t stride_4x = stride << 2; + __m256i tmp0, tmp1; + __m256i src_hz0, src_hz1, src_hz2, src_hz3, mask0, mask1, mask2; + __m256i src_vt0, src_vt1, src_vt2, src_vt3, src_vt4, src_vt5, src_vt6; +@@ -191,23 +211,27 @@ avc_luma_hv_qrt_16x16_lasx(const uint8_t *src_x, const uint8_t *src_y, uint8_t * + filt1 = __lasx_xvreplgr2vr_h(filt_const1); + filt2 = __lasx_xvreplgr2vr_h(filt_const2); + +- mask0 = LASX_LD(luma_mask_arr); +- LASX_LD_2(luma_mask_arr + 32, 32, mask1, mask2); +- src_vt0 = LASX_LD(src_y); +- LASX_LD_4(src_y + stride, stride, src_vt1, src_vt2, src_vt3, src_vt4); +- src_y += stride_x4 + stride; ++ mask0 = __lasx_xvld(luma_mask_arr, 0); ++ DUP2_ARG2(__lasx_xvld, luma_mask_arr, 32, luma_mask_arr, 64, mask1, mask2); ++ src_vt0 = __lasx_xvld(src_y, 0); ++ DUP4_ARG2(__lasx_xvld, src_y + stride, 0, src_y + stride_2x, 0, src_y + stride_3x, ++ 0, src_y + stride_4x, 0, src_vt1, src_vt2, src_vt3, src_vt4); ++ src_y += stride_4x + stride; + +- LASX_XORI_B_128(src_vt0); +- LASX_XORI_B_4_128(src_vt1, src_vt2, src_vt3, src_vt4); ++ src_vt0 = __lasx_xvxori_b(src_vt0, 128); ++ DUP4_ARG2(__lasx_xvxori_b, src_vt1, 128, src_vt2, 128, src_vt3, 128, src_vt4, 128, ++ src_vt1, src_vt2, src_vt3, src_vt4); + + for (loop_cnt = 4; loop_cnt--;) { +- LASX_LD_4(src_x, stride, src_hz0, src_hz1, src_hz2, src_hz3); +- src_x += stride_x4; ++ DUP4_ARG2(__lasx_xvld, src_x, 0, src_x + stride, 0, src_x + stride_2x, 0, ++ src_x + stride_3x, 0, src_hz0, src_hz1, src_hz2, src_hz3); ++ src_x += stride_4x; + src_hz0 = __lasx_xvpermi_d(src_hz0, 0x94); + src_hz1 = __lasx_xvpermi_d(src_hz1, 0x94); + src_hz2 = __lasx_xvpermi_d(src_hz2, 0x94); + src_hz3 = __lasx_xvpermi_d(src_hz3, 0x94); +- LASX_XORI_B_4_128(src_hz0, src_hz1, src_hz2, src_hz3); ++ DUP4_ARG2(__lasx_xvxori_b, src_hz0, 128, src_hz1, 128, src_hz2, 128, src_hz3, ++ 128, src_hz0, src_hz1, src_hz2, src_hz3); + + hz_out0 = AVC_HORZ_FILTER_SH(src_hz0, src_hz0, mask0, mask1, mask2); + hz_out1 = AVC_HORZ_FILTER_SH(src_hz1, src_hz1, mask0, mask1, mask2); +@@ -216,44 +240,51 @@ avc_luma_hv_qrt_16x16_lasx(const uint8_t *src_x, const uint8_t *src_y, uint8_t * + hz_out0 = __lasx_xvssrarni_b_h(hz_out1, hz_out0, 5); + hz_out2 = __lasx_xvssrarni_b_h(hz_out3, hz_out2, 5); + +- LASX_LD_4(src_y, stride, src_vt5, src_vt6, src_vt7, src_vt8); +- src_y += stride_x4; +- +- LASX_XORI_B_4_128(src_vt5, src_vt6, src_vt7, src_vt8); +- LASX_ILVL_B_4(src_vt1, src_vt0, src_vt2, src_vt1, src_vt3, src_vt2, +- src_vt4, src_vt3, src_vt10_h, src_vt21_h, src_vt32_h, +- src_vt43_h); +- LASX_ILVL_B_4(src_vt5, src_vt4, src_vt6, src_vt5, src_vt7, src_vt6, +- src_vt8, src_vt7, src_vt54_h, src_vt65_h, src_vt76_h, +- src_vt87_h); +- vt_out0 = AVC_DOT_SH3_SH(src_vt10_h, src_vt32_h, src_vt54_h, filt0, +- filt1, filt2); +- vt_out1 = AVC_DOT_SH3_SH(src_vt21_h, src_vt43_h, src_vt65_h, filt0, +- filt1, filt2); +- vt_out2 = AVC_DOT_SH3_SH(src_vt32_h, src_vt54_h, src_vt76_h, filt0, +- filt1, filt2); +- vt_out3 = AVC_DOT_SH3_SH(src_vt43_h, src_vt65_h, src_vt87_h, filt0, +- filt1, filt2); ++ DUP4_ARG2(__lasx_xvld, src_y, 0, src_y + stride, 0, src_y + stride_2x, 0, ++ src_y + stride_3x, 0, src_vt5, src_vt6, src_vt7, src_vt8); ++ src_y += stride_4x; ++ ++ DUP4_ARG2(__lasx_xvxori_b, src_vt5, 128, src_vt6, 128, src_vt7, 128, src_vt8, ++ 128, src_vt5, src_vt6, src_vt7, src_vt8); ++ DUP4_ARG3(__lasx_xvpermi_q, src_vt0, src_vt4, 0x02, src_vt1, src_vt5, 0x02, ++ src_vt2, src_vt6, 0x02, src_vt3, src_vt7, 0x02, src_vt0, src_vt1, ++ src_vt2, src_vt3); ++ src_vt87_h = __lasx_xvpermi_q(src_vt4, src_vt8, 0x02); ++ DUP4_ARG2(__lasx_xvilvh_b, src_vt1, src_vt0, src_vt2, src_vt1, src_vt3, src_vt2, ++ src_vt87_h, src_vt3, src_hz0, src_hz1, src_hz2, src_hz3); ++ DUP4_ARG2(__lasx_xvilvl_b, src_vt1, src_vt0, src_vt2, src_vt1, src_vt3, src_vt2, ++ src_vt87_h, src_vt3, src_vt0, src_vt1, src_vt2, src_vt3); ++ DUP4_ARG3(__lasx_xvpermi_q, src_vt0, src_hz0, 0x02, src_vt1, src_hz1, 0x02, ++ src_vt2, src_hz2, 0x02, src_vt3, src_hz3, 0x02, src_vt10_h, src_vt21_h, ++ src_vt32_h, src_vt43_h); ++ DUP4_ARG3(__lasx_xvpermi_q, src_vt0, src_hz0, 0x13, src_vt1, src_hz1, 0x13, ++ src_vt2, src_hz2, 0x13, src_vt3, src_hz3, 0x13, src_vt54_h, src_vt65_h, ++ src_vt76_h, src_vt87_h); ++ ++ vt_out0 = AVC_DOT_SH3_SH(src_vt10_h, src_vt32_h, src_vt54_h, filt0, filt1, filt2); ++ vt_out1 = AVC_DOT_SH3_SH(src_vt21_h, src_vt43_h, src_vt65_h, filt0, filt1, filt2); ++ vt_out2 = AVC_DOT_SH3_SH(src_vt32_h, src_vt54_h, src_vt76_h, filt0, filt1, filt2); ++ vt_out3 = AVC_DOT_SH3_SH(src_vt43_h, src_vt65_h, src_vt87_h, filt0, filt1, filt2); + vt_out0 = __lasx_xvssrarni_b_h(vt_out1, vt_out0, 5); + vt_out2 = __lasx_xvssrarni_b_h(vt_out3, vt_out2, 5); + +- LASX_ADDWL_H_B_2_128SV(hz_out0, vt_out0, hz_out2, vt_out2, out0, out2); +- LASX_ADDWH_H_B_2_128SV(hz_out0, vt_out0, hz_out2, vt_out2, out1, out3); ++ DUP2_ARG2(__lasx_xvaddwl_h_b, hz_out0, vt_out0, hz_out2, vt_out2, out0, out2); ++ DUP2_ARG2(__lasx_xvaddwh_h_b, hz_out0, vt_out0, hz_out2, vt_out2, out1, out3); + tmp0 = __lasx_xvssrarni_b_h(out1, out0, 1); + tmp1 = __lasx_xvssrarni_b_h(out3, out2, 1); + +- LASX_XORI_B_2_128(tmp0, tmp1); +- *(int64_t*)dst = __lasx_xvpickve2gr_d(tmp0, 0); +- *(int64_t*)(dst + stride) = __lasx_xvpickve2gr_d(tmp0, 1); +- *(int64_t*)(dst + stride_x2) = __lasx_xvpickve2gr_d(tmp1, 0); +- *(int64_t*)(dst + stride_x3) = __lasx_xvpickve2gr_d(tmp1, 1); ++ DUP2_ARG2(__lasx_xvxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ __lasx_xvstelm_d(tmp0, dst, 0, 0); ++ __lasx_xvstelm_d(tmp0, dst + stride, 0, 1); ++ __lasx_xvstelm_d(tmp1, dst + stride_2x, 0, 0); ++ __lasx_xvstelm_d(tmp1, dst + stride_3x, 0, 1); + +- *(int64_t*)(dst + 8) = __lasx_xvpickve2gr_d(tmp0, 2); +- *(int64_t*)(dst + 8 + stride) = __lasx_xvpickve2gr_d(tmp0, 3); +- *(int64_t*)(dst + 8 + stride_x2) = __lasx_xvpickve2gr_d(tmp1, 2); +- *(int64_t*)(dst + 8 + stride_x3) = __lasx_xvpickve2gr_d(tmp1, 3); ++ __lasx_xvstelm_d(tmp0, dst, 8, 2); ++ __lasx_xvstelm_d(tmp0, dst + stride, 8, 3); ++ __lasx_xvstelm_d(tmp1, dst + stride_2x, 8, 2); ++ __lasx_xvstelm_d(tmp1, dst + stride_3x, 8, 3); + +- dst += stride_x4; ++ dst += stride_4x; + src_vt0 = src_vt4; + src_vt1 = src_vt5; + src_vt2 = src_vt6; +@@ -1028,25 +1059,25 @@ avg_pixels16_l2_8_lsx(uint8_t *dst, const uint8_t *src, uint8_t *half, + ); + } + +-#define QPEL8_H_LOWPASS(out_v) \ +- src00 = LASX_LD(src - 2); \ +- src += srcStride; \ +- src10 = LASX_LD(src - 2); \ +- src += srcStride; \ +- src00 = __lasx_xvpermi_q(src00, src10, 0x02); \ +- src01 = __lasx_xvshuf_b(src00, src00, (__m256i)mask1); \ +- src02 = __lasx_xvshuf_b(src00, src00, (__m256i)mask2); \ +- src03 = __lasx_xvshuf_b(src00, src00, (__m256i)mask3); \ +- src04 = __lasx_xvshuf_b(src00, src00, (__m256i)mask4); \ +- src05 = __lasx_xvshuf_b(src00, src00, (__m256i)mask5); \ +- LASX_ADDWL_H_BU_2_128SV(src02, src03, src01, src04, src02, src01); \ +- LASX_ADDWL_H_BU_128SV(src00, src05, src00); \ +- src02 = __lasx_xvmul_h(src02, h_20); \ +- src01 = __lasx_xvmul_h(src01, h_5); \ +- src02 = __lasx_xvssub_h(src02, src01); \ +- src02 = __lasx_xvsadd_h(src02, src00); \ +- src02 = __lasx_xvsadd_h(src02, h_16); \ +- out_v = __lasx_xvssrani_bu_h(src02, src02, 5); \ ++#define QPEL8_H_LOWPASS(out_v) \ ++ src00 = __lasx_xvld(src, - 2); \ ++ src += srcStride; \ ++ src10 = __lasx_xvld(src, - 2); \ ++ src += srcStride; \ ++ src00 = __lasx_xvpermi_q(src00, src10, 0x02); \ ++ src01 = __lasx_xvshuf_b(src00, src00, (__m256i)mask1); \ ++ src02 = __lasx_xvshuf_b(src00, src00, (__m256i)mask2); \ ++ src03 = __lasx_xvshuf_b(src00, src00, (__m256i)mask3); \ ++ src04 = __lasx_xvshuf_b(src00, src00, (__m256i)mask4); \ ++ src05 = __lasx_xvshuf_b(src00, src00, (__m256i)mask5); \ ++ DUP2_ARG2(__lasx_xvaddwl_h_bu, src02, src03, src01, src04, src02, src01);\ ++ src00 = __lasx_xvaddwl_h_bu(src00, src05); \ ++ src02 = __lasx_xvmul_h(src02, h_20); \ ++ src01 = __lasx_xvmul_h(src01, h_5); \ ++ src02 = __lasx_xvssub_h(src02, src01); \ ++ src02 = __lasx_xvsadd_h(src02, src00); \ ++ src02 = __lasx_xvsadd_h(src02, h_16); \ ++ out_v = __lasx_xvssrani_bu_h(src02, src02, 5); \ + + static av_always_inline void + put_h264_qpel8_h_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, +@@ -1074,13 +1105,17 @@ put_h264_qpel8_h_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, + QPEL8_H_LOWPASS(out1) + QPEL8_H_LOWPASS(out2) + QPEL8_H_LOWPASS(out3) +- LASX_ST_D_2(out0, 0, 2, dst, dstStride); ++ __lasx_xvstelm_d(out0, dst, 0, 0); ++ __lasx_xvstelm_d(out0, dst + dstStride, 0, 2); + dst += dstStride_2x; +- LASX_ST_D_2(out1, 0, 2, dst, dstStride); ++ __lasx_xvstelm_d(out1, dst, 0, 0); ++ __lasx_xvstelm_d(out1, dst + dstStride, 0, 2); + dst += dstStride_2x; +- LASX_ST_D_2(out2, 0, 2, dst, dstStride); ++ __lasx_xvstelm_d(out2, dst, 0, 0); ++ __lasx_xvstelm_d(out2, dst + dstStride, 0, 2); + dst += dstStride_2x; +- LASX_ST_D_2(out3, 0, 2, dst, dstStride); ++ __lasx_xvstelm_d(out3, dst, 0, 0); ++ __lasx_xvstelm_d(out3, dst + dstStride, 0, 2); + } + + #define QPEL8_V_LOWPASS(src0, src1, src2, src3, src4, src5, src6, \ +@@ -1092,8 +1127,8 @@ put_h264_qpel8_h_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, + tmp3 = __lasx_xvpermi_q(src3, src4, 0x02); \ + tmp4 = __lasx_xvpermi_q(src4, src5, 0x02); \ + tmp5 = __lasx_xvpermi_q(src5, src6, 0x02); \ +- LASX_ADDWL_H_BU_2_128SV(tmp2, tmp3, tmp1, tmp4, tmp2, tmp1); \ +- LASX_ADDWL_H_BU_128SV(tmp0, tmp5, tmp0); \ ++ DUP2_ARG2(__lasx_xvaddwl_h_bu, tmp2, tmp3, tmp1, tmp4, tmp2, tmp1); \ ++ tmp0 = __lasx_xvaddwl_h_bu(tmp0, tmp5); \ + tmp2 = __lasx_xvmul_h(tmp2, h_20); \ + tmp1 = __lasx_xvmul_h(tmp1, h_5); \ + tmp2 = __lasx_xvssub_h(tmp2, tmp1); \ +@@ -1107,6 +1142,9 @@ put_h264_qpel8_v_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, + int srcStride) + { + int srcStride_2x = srcStride << 1; ++ int dstStride_2x = dstStride << 1; ++ int srcStride_4x = srcStride << 2; ++ int srcStride_3x = srcStride_2x + srcStride; + __m256i src00, src01, src02, src03, src04, src05, src06; + __m256i src07, src08, src09, src10, src11, src12; + __m256i tmp00, tmp01, tmp02, tmp03, tmp04, tmp05; +@@ -1120,29 +1158,36 @@ put_h264_qpel8_v_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, + h_5 = __lasx_xvreplve0_h(h_5); + h_16 = __lasx_xvreplve0_h(h_16); + +- LASX_LD_2(src - srcStride_2x, srcStride, src00, src01); +- LASX_LD_8(src, srcStride, src02, src03, src04, src05, +- src06, src07, src08, src09); +- src += srcStride << 3; +- LASX_LD_2(src, srcStride, src10, src11); ++ DUP2_ARG2(__lasx_xvld, src - srcStride_2x, 0, src - srcStride, 0, src00, src01); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + srcStride, 0, src + srcStride_2x, 0, ++ src + srcStride_3x, 0, src02, src03, src04, src05); ++ src += srcStride_4x; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + srcStride, 0, src + srcStride_2x, 0, ++ src + srcStride_3x, 0, src06, src07, src08, src09); ++ src += srcStride_4x; ++ DUP2_ARG2(__lasx_xvld, src, 0, src + srcStride, 0, src10, src11); + src += srcStride_2x; +- src12 = LASX_LD(src); ++ src12 = __lasx_xvld(src, 0); + + QPEL8_V_LOWPASS(src00, src01, src02, src03, src04, src05, src06, + tmp00, tmp01, tmp02, tmp03, tmp04, tmp05); +- LASX_ST_D_2(tmp02, 0, 2, dst, dstStride); +- dst += dstStride << 1; ++ __lasx_xvstelm_d(tmp02, dst, 0, 0); ++ __lasx_xvstelm_d(tmp02, dst + dstStride, 0, 2); ++ dst += dstStride_2x; + QPEL8_V_LOWPASS(src02, src03, src04, src05, src06, src07, src08, + tmp00, tmp01, tmp02, tmp03, tmp04, tmp05); +- LASX_ST_D_2(tmp02, 0, 2, dst, dstStride); +- dst += dstStride << 1; ++ __lasx_xvstelm_d(tmp02, dst, 0, 0); ++ __lasx_xvstelm_d(tmp02, dst + dstStride, 0, 2); ++ dst += dstStride_2x; + QPEL8_V_LOWPASS(src04, src05, src06, src07, src08, src09, src10, + tmp00, tmp01, tmp02, tmp03, tmp04, tmp05); +- LASX_ST_D_2(tmp02, 0, 2, dst, dstStride); +- dst += dstStride << 1; ++ __lasx_xvstelm_d(tmp02, dst, 0, 0); ++ __lasx_xvstelm_d(tmp02, dst + dstStride, 0, 2); ++ dst += dstStride_2x; + QPEL8_V_LOWPASS(src06, src07, src08, src09, src10, src11, src12, + tmp00, tmp01, tmp02, tmp03, tmp04, tmp05); +- LASX_ST_D_2(tmp02, 0, 2, dst, dstStride); ++ __lasx_xvstelm_d(tmp02, dst, 0, 0); ++ __lasx_xvstelm_d(tmp02, dst + dstStride, 0, 2); + } + + static av_always_inline void +@@ -1150,6 +1195,11 @@ avg_h264_qpel8_v_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, + int srcStride) + { + int srcStride_2x = srcStride << 1; ++ int srcStride_4x = srcStride << 2; ++ int dstStride_2x = dstStride << 1; ++ int dstStride_4x = dstStride << 2; ++ int srcStride_3x = srcStride_2x + srcStride; ++ int dstStride_3x = dstStride_2x + dstStride; + __m256i src00, src01, src02, src03, src04, src05, src06; + __m256i src07, src08, src09, src10, src11, src12; + __m256i tmp00, tmp01, tmp02, tmp03, tmp04, tmp05, tmp06, tmp07, tmp08, tmp09; +@@ -1163,16 +1213,24 @@ avg_h264_qpel8_v_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, + h_5 = __lasx_xvreplve0_h(h_5); + h_16 = __lasx_xvreplve0_h(h_16); + +- LASX_LD_2(src - srcStride_2x, srcStride, src00, src01); +- LASX_LD_8(src, srcStride, src02, src03, src04, src05, +- src06, src07, src08, src09); +- src += srcStride << 3; +- LASX_LD_2(src, srcStride, src10, src11); ++ DUP2_ARG2(__lasx_xvld, src - srcStride_2x, 0, src - srcStride, 0, src00, src01); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + srcStride, 0, src + srcStride_2x, 0, ++ src + srcStride_3x, 0, src02, src03, src04, src05); ++ src += srcStride_4x; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + srcStride, 0, src + srcStride_2x, 0, ++ src + srcStride_3x, 0, src06, src07, src08, src09); ++ src += srcStride_4x; ++ DUP2_ARG2(__lasx_xvld, src, 0, src + srcStride, 0, src10, src11); + src += srcStride_2x; +- src12 = LASX_LD(src); ++ src12 = __lasx_xvld(src, 0); + +- LASX_LD_8(dst, dstStride, tmp06, tmp07, tmp02, tmp03, ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dstStride, dst, dstStride_2x, dst, dstStride_3x, ++ tmp06, tmp07, tmp02, tmp03); ++ dst += dstStride_4x; ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dstStride, dst, dstStride_2x, dst, dstStride_3x, + tmp04, tmp05, tmp00, tmp01); ++ dst -= dstStride_4x; ++ + tmp06 = __lasx_xvpermi_q(tmp06, tmp07, 0x02); + tmp07 = __lasx_xvpermi_q(tmp02, tmp03, 0x02); + tmp08 = __lasx_xvpermi_q(tmp04, tmp05, 0x02); +@@ -1181,67 +1239,71 @@ avg_h264_qpel8_v_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, + QPEL8_V_LOWPASS(src00, src01, src02, src03, src04, src05, src06, + tmp00, tmp01, tmp02, tmp03, tmp04, tmp05); + tmp06 = __lasx_xvavgr_bu(tmp06, tmp02); +- LASX_ST_D_2(tmp06, 0, 2, dst, dstStride); ++ __lasx_xvstelm_d(tmp06, dst, 0, 0); ++ __lasx_xvstelm_d(tmp06, dst + dstStride, 0, 2); + dst += dstStride << 1; + QPEL8_V_LOWPASS(src02, src03, src04, src05, src06, src07, src08, + tmp00, tmp01, tmp02, tmp03, tmp04, tmp05); + tmp07 = __lasx_xvavgr_bu(tmp07, tmp02); +- LASX_ST_D_2(tmp07, 0, 2, dst, dstStride); ++ __lasx_xvstelm_d(tmp07, dst, 0, 0); ++ __lasx_xvstelm_d(tmp07, dst + dstStride, 0, 2); + dst += dstStride << 1; + QPEL8_V_LOWPASS(src04, src05, src06, src07, src08, src09, src10, + tmp00, tmp01, tmp02, tmp03, tmp04, tmp05); + tmp08 = __lasx_xvavgr_bu(tmp08, tmp02); +- LASX_ST_D_2(tmp08, 0, 2, dst, dstStride); ++ __lasx_xvstelm_d(tmp08, dst, 0, 0); ++ __lasx_xvstelm_d(tmp08, dst + dstStride, 0, 2); + dst += dstStride << 1; + QPEL8_V_LOWPASS(src06, src07, src08, src09, src10, src11, src12, + tmp00, tmp01, tmp02, tmp03, tmp04, tmp05); + tmp09 = __lasx_xvavgr_bu(tmp09, tmp02); +- LASX_ST_D_2(tmp09, 0, 2, dst, dstStride); +-} +- +-#define QPEL8_HV_LOWPASS_H(tmp) \ +-{ \ +- src00 = LASX_LD(src - 2); \ +- src += srcStride; \ +- src10 = LASX_LD(src - 2); \ +- src += srcStride; \ +- src00 = __lasx_xvpermi_q(src00, src10, 0x02); \ +- src01 = __lasx_xvshuf_b(src00, src00, (__m256i)mask1); \ +- src02 = __lasx_xvshuf_b(src00, src00, (__m256i)mask2); \ +- src03 = __lasx_xvshuf_b(src00, src00, (__m256i)mask3); \ +- src04 = __lasx_xvshuf_b(src00, src00, (__m256i)mask4); \ +- src05 = __lasx_xvshuf_b(src00, src00, (__m256i)mask5); \ +- LASX_ADDWL_H_BU_2_128SV(src02, src03, src01, src04, src02, src01); \ +- LASX_ADDWL_H_BU_128SV(src00, src05, src00); \ +- src02 = __lasx_xvmul_h(src02, h_20); \ +- src01 = __lasx_xvmul_h(src01, h_5); \ +- src02 = __lasx_xvssub_h(src02, src01); \ +- tmp = __lasx_xvsadd_h(src02, src00); \ +-} +- +-#define QPEL8_HV_LOWPASS_V(src0, src1, src2, src3, \ +- src4, src5, temp0, temp1, \ +- temp2, temp3, temp4, temp5, \ +- out) \ +-{ \ +- LASX_ADDWL_W_H_2_128SV(src2, src3, src1, src4, temp0, temp2); \ +- LASX_ADDWH_W_H_2_128SV(src2, src3, src1, src4, temp1, temp3); \ +- LASX_ADDWL_W_H_128SV(src0, src5, temp4); \ +- LASX_ADDWH_W_H_128SV(src0, src5, temp5); \ +- temp0 = __lasx_xvmul_w(temp0, w_20); \ +- temp1 = __lasx_xvmul_w(temp1, w_20); \ +- temp2 = __lasx_xvmul_w(temp2, w_5); \ +- temp3 = __lasx_xvmul_w(temp3, w_5); \ +- temp0 = __lasx_xvssub_w(temp0, temp2); \ +- temp1 = __lasx_xvssub_w(temp1, temp3); \ +- temp0 = __lasx_xvsadd_w(temp0, temp4); \ +- temp1 = __lasx_xvsadd_w(temp1, temp5); \ +- temp0 = __lasx_xvsadd_w(temp0, w_512); \ +- temp1 = __lasx_xvsadd_w(temp1, w_512); \ +- temp0 = __lasx_xvssrani_hu_w(temp0, temp0, 10); \ +- temp1 = __lasx_xvssrani_hu_w(temp1, temp1, 10); \ +- temp0 = __lasx_xvpackev_d(temp1, temp0); \ +- out = __lasx_xvssrani_bu_h(temp0, temp0, 0); \ ++ __lasx_xvstelm_d(tmp09, dst, 0, 0); ++ __lasx_xvstelm_d(tmp09, dst + dstStride, 0, 2); ++} ++ ++#define QPEL8_HV_LOWPASS_H(tmp) \ ++{ \ ++ src00 = __lasx_xvld(src, -2); \ ++ src += srcStride; \ ++ src10 = __lasx_xvld(src, -2); \ ++ src += srcStride; \ ++ src00 = __lasx_xvpermi_q(src00, src10, 0x02); \ ++ src01 = __lasx_xvshuf_b(src00, src00, (__m256i)mask1); \ ++ src02 = __lasx_xvshuf_b(src00, src00, (__m256i)mask2); \ ++ src03 = __lasx_xvshuf_b(src00, src00, (__m256i)mask3); \ ++ src04 = __lasx_xvshuf_b(src00, src00, (__m256i)mask4); \ ++ src05 = __lasx_xvshuf_b(src00, src00, (__m256i)mask5); \ ++ DUP2_ARG2(__lasx_xvaddwl_h_bu, src02, src03, src01, src04, src02, src01);\ ++ src00 = __lasx_xvaddwl_h_bu(src00, src05); \ ++ src02 = __lasx_xvmul_h(src02, h_20); \ ++ src01 = __lasx_xvmul_h(src01, h_5); \ ++ src02 = __lasx_xvssub_h(src02, src01); \ ++ tmp = __lasx_xvsadd_h(src02, src00); \ ++} ++ ++#define QPEL8_HV_LOWPASS_V(src0, src1, src2, src3, \ ++ src4, src5, temp0, temp1, \ ++ temp2, temp3, temp4, temp5, \ ++ out) \ ++{ \ ++ DUP2_ARG2(__lasx_xvaddwl_w_h, src2, src3, src1, src4, temp0, temp2); \ ++ DUP2_ARG2(__lasx_xvaddwh_w_h, src2, src3, src1, src4, temp1, temp3); \ ++ temp4 = __lasx_xvaddwl_w_h(src0, src5); \ ++ temp5 = __lasx_xvaddwh_w_h(src0, src5); \ ++ temp0 = __lasx_xvmul_w(temp0, w_20); \ ++ temp1 = __lasx_xvmul_w(temp1, w_20); \ ++ temp2 = __lasx_xvmul_w(temp2, w_5); \ ++ temp3 = __lasx_xvmul_w(temp3, w_5); \ ++ temp0 = __lasx_xvssub_w(temp0, temp2); \ ++ temp1 = __lasx_xvssub_w(temp1, temp3); \ ++ temp0 = __lasx_xvsadd_w(temp0, temp4); \ ++ temp1 = __lasx_xvsadd_w(temp1, temp5); \ ++ temp0 = __lasx_xvsadd_w(temp0, w_512); \ ++ temp1 = __lasx_xvsadd_w(temp1, w_512); \ ++ temp0 = __lasx_xvssrani_hu_w(temp0, temp0, 10); \ ++ temp1 = __lasx_xvssrani_hu_w(temp1, temp1, 10); \ ++ temp0 = __lasx_xvpackev_d(temp1, temp0); \ ++ out = __lasx_xvssrani_bu_h(temp0, temp0, 0); \ + } + + static av_always_inline void +@@ -1291,13 +1353,17 @@ put_h264_qpel8_hv_lowpass_lasx(uint8_t *dst, const uint8_t *src, + src02, src03, src04, src05, tmp4) + QPEL8_HV_LOWPASS_V(tmp6, tmp7, tmp8, tmp9, tmp10, tmp11, src00, src01, + src02, src03, src04, src05, tmp6) +- LASX_ST_D_2(tmp0, 0, 2, dst, dstStride); ++ __lasx_xvstelm_d(tmp0, dst, 0, 0); ++ __lasx_xvstelm_d(tmp0, dst + dstStride, 0, 2); + dst += dstStride << 1; +- LASX_ST_D_2(tmp2, 0, 2, dst, dstStride); ++ __lasx_xvstelm_d(tmp2, dst, 0, 0); ++ __lasx_xvstelm_d(tmp2, dst + dstStride, 0, 2); + dst += dstStride << 1; +- LASX_ST_D_2(tmp4, 0, 2, dst, dstStride); ++ __lasx_xvstelm_d(tmp4, dst, 0, 0); ++ __lasx_xvstelm_d(tmp4, dst + dstStride, 0, 2); + dst += dstStride << 1; +- LASX_ST_D_2(tmp6, 0, 2, dst, dstStride); ++ __lasx_xvstelm_d(tmp6, dst, 0, 0); ++ __lasx_xvstelm_d(tmp6, dst + dstStride, 0, 2); + } + + static av_always_inline void +@@ -1306,7 +1372,7 @@ avg_h264_qpel8_h_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, + { + int dstStride_2x = dstStride << 1; + int dstStride_4x = dstStride << 2; +- int dstStride_6x = dstStride_2x + dstStride_4x; ++ int dstStride_3x = dstStride_2x + dstStride; + __m256i src00, src01, src02, src03, src04, src05, src10; + __m256i dst00, dst01, dst0, dst1, dst2, dst3; + __m256i out0, out1, out2, out3; +@@ -1329,10 +1395,12 @@ avg_h264_qpel8_h_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, + QPEL8_H_LOWPASS(out1) + QPEL8_H_LOWPASS(out2) + QPEL8_H_LOWPASS(out3) +- LASX_LD_2(dst, dstStride, src00, src01); +- LASX_LD_2(dst + dstStride_2x, dstStride, src02, src03); +- LASX_LD_2(dst + dstStride_4x, dstStride, src04, src05); +- LASX_LD_2(dst + dstStride_6x, dstStride, dst00, dst01); ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dstStride, dst, dstStride_2x, dst, dstStride_3x, ++ src00, src01, src02, src03); ++ dst += dstStride_4x; ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dstStride, dst, dstStride_2x, dst, dstStride_3x, ++ src04, src05, dst00, dst01); ++ dst -= dstStride_4x; + dst0 = __lasx_xvpermi_q(src00, src01, 0x02); + dst1 = __lasx_xvpermi_q(src02, src03, 0x02); + dst2 = __lasx_xvpermi_q(src04, src05, 0x02); +@@ -1341,10 +1409,15 @@ avg_h264_qpel8_h_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, + dst1 = __lasx_xvavgr_bu(dst1, out1); + dst2 = __lasx_xvavgr_bu(dst2, out2); + dst3 = __lasx_xvavgr_bu(dst3, out3); +- LASX_ST_D_2(dst0, 0, 2, dst, dstStride); +- LASX_ST_D_2(dst1, 0, 2, dst + dstStride_2x, dstStride); +- LASX_ST_D_2(dst2, 0, 2, dst + dstStride_4x, dstStride); +- LASX_ST_D_2(dst3, 0, 2, dst + dstStride_6x, dstStride); ++ __lasx_xvstelm_d(dst0, dst, 0, 0); ++ __lasx_xvstelm_d(dst0, dst + dstStride, 0, 2); ++ __lasx_xvstelm_d(dst1, dst + dstStride_2x, 0, 0); ++ __lasx_xvstelm_d(dst1, dst + dstStride_3x, 0, 2); ++ dst += dstStride_4x; ++ __lasx_xvstelm_d(dst2, dst, 0, 0); ++ __lasx_xvstelm_d(dst2, dst + dstStride, 0, 2); ++ __lasx_xvstelm_d(dst3, dst + dstStride_2x, 0, 0); ++ __lasx_xvstelm_d(dst3, dst + dstStride_3x, 0, 2); + } + + static av_always_inline void +@@ -1364,6 +1437,9 @@ avg_h264_qpel8_hv_lowpass_lasx(uint8_t *dst, const uint8_t *src, + __m256i mask3 = {0x0a09080706050403, 0x0, 0x0a09080706050403, 0x0}; + __m256i mask4 = {0x0b0a090807060504, 0x0, 0x0b0a090807060504, 0x0}; + __m256i mask5 = {0x0c0b0a0908070605, 0x0, 0x0c0b0a0908070605, 0x0}; ++ ptrdiff_t dstStride_2x = dstStride << 1; ++ ptrdiff_t dstStride_4x = dstStride << 2; ++ ptrdiff_t dstStride_3x = dstStride_2x + dstStride; + + h_20 = __lasx_xvreplve0_h(w_20); + h_5 = __lasx_xvreplve0_h(w_5); +@@ -1395,7 +1471,12 @@ avg_h264_qpel8_hv_lowpass_lasx(uint8_t *dst, const uint8_t *src, + QPEL8_HV_LOWPASS_V(tmp6, tmp7, tmp8, tmp9, tmp10, tmp11, src00, src01, + src02, src03, src04, src05, tmp6) + +- LASX_LD_8(dst, dstStride, src00, src01, src02, src03, src04, src05, tmp8, tmp9); ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dstStride, dst, dstStride_2x, dst, dstStride_3x, ++ src00, src01, src02, src03); ++ dst += dstStride_4x; ++ DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dstStride, dst, dstStride_2x, dst, dstStride_3x, ++ src04, src05, tmp8, tmp9); ++ dst -= dstStride_4x; + tmp1 = __lasx_xvpermi_q(src00, src01, 0x02); + tmp3 = __lasx_xvpermi_q(src02, src03, 0x02); + tmp5 = __lasx_xvpermi_q(src04, src05, 0x02); +@@ -1404,13 +1485,17 @@ avg_h264_qpel8_hv_lowpass_lasx(uint8_t *dst, const uint8_t *src, + tmp2 = __lasx_xvavgr_bu(tmp2, tmp3); + tmp4 = __lasx_xvavgr_bu(tmp4, tmp5); + tmp6 = __lasx_xvavgr_bu(tmp6, tmp7); +- LASX_ST_D_2(tmp0, 0, 2, dst, dstStride); ++ __lasx_xvstelm_d(tmp0, dst, 0, 0); ++ __lasx_xvstelm_d(tmp0, dst + dstStride, 0, 2); + dst += dstStride << 1; +- LASX_ST_D_2(tmp2, 0, 2, dst, dstStride); ++ __lasx_xvstelm_d(tmp2, dst, 0, 0); ++ __lasx_xvstelm_d(tmp2, dst + dstStride, 0, 2); + dst += dstStride << 1; +- LASX_ST_D_2(tmp4, 0, 2, dst, dstStride); ++ __lasx_xvstelm_d(tmp4, dst, 0, 0); ++ __lasx_xvstelm_d(tmp4, dst + dstStride, 0, 2); + dst += dstStride << 1; +- LASX_ST_D_2(tmp6, 0, 2, dst, dstStride); ++ __lasx_xvstelm_d(tmp6, dst, 0, 0); ++ __lasx_xvstelm_d(tmp6, dst + dstStride, 0, 2); + } + + static av_always_inline void +diff --git a/libavcodec/loongarch/hevc_idct_lsx.c b/libavcodec/loongarch/hevc_idct_lsx.c +index 2d166e5790..c73193d1f9 100644 +--- a/libavcodec/loongarch/hevc_idct_lsx.c ++++ b/libavcodec/loongarch/hevc_idct_lsx.c +@@ -19,7 +19,7 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "libavutil/loongarch/generic_macros_lsx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + #include "hevcdsp_lsx.h" + + static const int16_t gt8x8_cnst[16] __attribute__ ((aligned (64))) = { +@@ -71,12 +71,12 @@ static const int16_t gt32x32_cnst2[16] __attribute__ ((aligned (64))) = { + __m128i cnst83 = __lsx_vldi(0x0853); \ + __m128i cnst36 = __lsx_vldi(0x0824); \ + \ +- vec0 = __lsx_dp2_w_h(in_r0, cnst64); \ +- vec1 = __lsx_dp2_w_h(in_l0, cnst83); \ +- vec2 = __lsx_dp2_w_h(in_r1, cnst64); \ +- vec3 = __lsx_dp2_w_h(in_l1, cnst36); \ +- vec4 = __lsx_dp2_w_h(in_l0, cnst36); \ +- vec5 = __lsx_dp2_w_h(in_l1, cnst83); \ ++ vec0 = __lsx_vdp2_w_h(in_r0, cnst64); \ ++ vec1 = __lsx_vdp2_w_h(in_l0, cnst83); \ ++ vec2 = __lsx_vdp2_w_h(in_r1, cnst64); \ ++ vec3 = __lsx_vdp2_w_h(in_l1, cnst36); \ ++ vec4 = __lsx_vdp2_w_h(in_l0, cnst36); \ ++ vec5 = __lsx_vdp2_w_h(in_l1, cnst83); \ + \ + sum0 = __lsx_vadd_w(vec0, vec2); \ + sum1 = __lsx_vsub_w(vec0, vec2); \ +@@ -107,27 +107,27 @@ static const int16_t gt32x32_cnst2[16] __attribute__ ((aligned (64))) = { + __m128i sum0_r, sum1_r, sum2_r, sum3_r; \ + __m128i sum0_l, sum1_l, sum2_l, sum3_l; \ + \ +- LSX_DUP4_ARG2(__lsx_vilvl_h, in4, in0, in6, in2, in5, in1, in3, in7, \ +- src0_r, src1_r, src2_r, src3_r); \ +- LSX_DUP4_ARG2(__lsx_vilvh_h, in4, in0, in6, in2, in5, in1, in3, in7, \ +- src0_l, src1_l, src2_l, src3_l); \ ++ DUP4_ARG2(__lsx_vilvl_h, in4, in0, in6, in2, in5, in1, in3, in7, \ ++ src0_r, src1_r, src2_r, src3_r); \ ++ DUP4_ARG2(__lsx_vilvh_h, in4, in0, in6, in2, in5, in1, in3, in7, \ ++ src0_l, src1_l, src2_l, src3_l); \ + \ +- LSX_DUP4_ARG2(__lsx_vldrepl_w, filter, 0, filter, 4, filter, 8, \ +- filter, 12, filter0, filter1, filter2, filter3); \ +- LSX_DUP4_ARG2(__lsx_dp2_w_h, src0_r, filter0, src0_l, filter0, \ +- src1_r, filter1, src1_l, filter1, temp0_r, temp0_l, \ +- temp1_r, temp1_l); \ ++ DUP4_ARG2(__lsx_vldrepl_w, filter, 0, filter, 4, filter, 8, \ ++ filter, 12, filter0, filter1, filter2, filter3); \ ++ DUP4_ARG2(__lsx_vdp2_w_h, src0_r, filter0, src0_l, filter0, \ ++ src1_r, filter1, src1_l, filter1, temp0_r, temp0_l, \ ++ temp1_r, temp1_l); \ + \ +- BUTTERFLY_4_W(temp0_r, temp0_l, temp1_l, temp1_r, sum0_r, sum0_l, \ +- sum1_l, sum1_r); \ ++ LSX_BUTTERFLY_4_W(temp0_r, temp0_l, temp1_l, temp1_r, sum0_r, sum0_l,\ ++ sum1_l, sum1_r); \ + sum2_r = sum1_r; \ + sum2_l = sum1_l; \ + sum3_r = sum0_r; \ + sum3_l = sum0_l; \ + \ +- LSX_DUP4_ARG2(__lsx_dp2_w_h, src2_r, filter2, src2_l, filter2, \ +- src3_r, filter3, src3_l, filter3, temp2_r, temp2_l, \ +- temp3_r, temp3_l); \ ++ DUP4_ARG2(__lsx_vdp2_w_h, src2_r, filter2, src2_l, filter2, \ ++ src3_r, filter3, src3_l, filter3, temp2_r, temp2_l, \ ++ temp3_r, temp3_l); \ + temp2_r = __lsx_vadd_w(temp2_r, temp3_r); \ + temp2_l = __lsx_vadd_w(temp2_l, temp3_l); \ + sum0_r = __lsx_vadd_w(sum0_r, temp2_r); \ +@@ -138,9 +138,9 @@ static const int16_t gt32x32_cnst2[16] __attribute__ ((aligned (64))) = { + in0 = __lsx_vssrarni_h_w(sum0_l, sum0_r, shift); \ + in7 = __lsx_vssrarni_h_w(sum3_l, sum3_r, shift); \ + \ +- LSX_DUP4_ARG2(__lsx_dp2_w_h, src2_r, filter3, src2_l, filter3, \ +- src3_r, filter2, src3_l, filter2, temp4_r, temp4_l, \ +- temp5_r, temp5_l); \ ++ DUP4_ARG2(__lsx_vdp2_w_h, src2_r, filter3, src2_l, filter3, \ ++ src3_r, filter2, src3_l, filter2, temp4_r, temp4_l, \ ++ temp5_r, temp5_l); \ + temp4_r = __lsx_vsub_w(temp4_r, temp5_r); \ + temp4_l = __lsx_vsub_w(temp4_l, temp5_l); \ + sum1_r = __lsx_vadd_w(sum1_r, temp4_r); \ +@@ -151,22 +151,22 @@ static const int16_t gt32x32_cnst2[16] __attribute__ ((aligned (64))) = { + in3 = __lsx_vssrarni_h_w(sum1_l, sum1_r, shift); \ + in4 = __lsx_vssrarni_h_w(sum2_l, sum2_r, shift); \ + \ +- LSX_DUP4_ARG2(__lsx_vldrepl_w, filter, 16, filter, 20, filter, 24, \ +- filter, 28, filter0, filter1, filter2, filter3); \ +- LSX_DUP4_ARG2(__lsx_dp2_w_h, src0_r, filter0, src0_l, filter0, \ +- src1_r, filter1, src1_l, filter1, temp0_r, temp0_l, \ +- temp1_r, temp1_l); \ ++ DUP4_ARG2(__lsx_vldrepl_w, filter, 16, filter, 20, filter, 24, \ ++ filter, 28, filter0, filter1, filter2, filter3); \ ++ DUP4_ARG2(__lsx_vdp2_w_h, src0_r, filter0, src0_l, filter0, \ ++ src1_r, filter1, src1_l, filter1, temp0_r, temp0_l, \ ++ temp1_r, temp1_l); \ + \ +- BUTTERFLY_4_W(temp0_r, temp0_l, temp1_l, temp1_r, sum0_r, sum0_l, \ +- sum1_l, sum1_r); \ ++ LSX_BUTTERFLY_4_W(temp0_r, temp0_l, temp1_l, temp1_r, sum0_r, sum0_l,\ ++ sum1_l, sum1_r); \ + sum2_r = sum1_r; \ + sum2_l = sum1_l; \ + sum3_r = sum0_r; \ + sum3_l = sum0_l; \ + \ +- LSX_DUP4_ARG2(__lsx_dp2_w_h, src2_r, filter2, src2_l, filter2, \ +- src3_r, filter3, src3_l, filter3, temp2_r, temp2_l, \ +- temp3_r, temp3_l); \ ++ DUP4_ARG2(__lsx_vdp2_w_h, src2_r, filter2, src2_l, filter2, \ ++ src3_r, filter3, src3_l, filter3, temp2_r, temp2_l, \ ++ temp3_r, temp3_l); \ + temp2_r = __lsx_vadd_w(temp2_r, temp3_r); \ + temp2_l = __lsx_vadd_w(temp2_l, temp3_l); \ + sum0_r = __lsx_vadd_w(sum0_r, temp2_r); \ +@@ -177,9 +177,9 @@ static const int16_t gt32x32_cnst2[16] __attribute__ ((aligned (64))) = { + in1 = __lsx_vssrarni_h_w(sum0_l, sum0_r, shift); \ + in6 = __lsx_vssrarni_h_w(sum3_l, sum3_r, shift); \ + \ +- LSX_DUP4_ARG2(__lsx_dp2_w_h, src2_r, filter3, src2_l, filter3, \ +- src3_r, filter2, src3_l, filter2, temp4_r, temp4_l, \ +- temp5_r, temp5_l); \ ++ DUP4_ARG2(__lsx_vdp2_w_h, src2_r, filter3, src2_l, filter3, \ ++ src3_r, filter2, src3_l, filter2, temp4_r, temp4_l, \ ++ temp5_r, temp5_l); \ + temp4_r = __lsx_vsub_w(temp4_r, temp5_r); \ + temp4_l = __lsx_vsub_w(temp4_l, temp5_l); \ + sum1_r = __lsx_vsub_w(sum1_r, temp4_r); \ +@@ -209,31 +209,31 @@ static const int16_t gt32x32_cnst2[16] __attribute__ ((aligned (64))) = { + \ + for (j = 0; j < 4; j++) \ + { \ +- LSX_DUP4_ARG2(__lsx_vldrepl_w, filter, 0, filter, 4, filter, 16, \ ++ DUP4_ARG2(__lsx_vldrepl_w, filter, 0, filter, 4, filter, 16, \ + filter, 20, filter0, filter1, filter2, filter3); \ +- LSX_DUP4_ARG2(__lsx_dp2_w_h, src0_r, filter0, src0_l, filter0, \ +- src4_r, filter2, src4_l, filter2, sum0_r, sum0_l, \ +- sum2_r, sum2_l); \ +- LSX_DUP2_ARG2(__lsx_dp2_w_h, src7_r, filter2, src7_l, filter2, \ +- sum3_r, sum3_l); \ +- LSX_DUP4_ARG3(__lsx_dp2add_w_h, sum0_r, src1_r, filter1, sum0_l, \ +- src1_l, filter1, sum2_r, src5_r, filter3, sum2_l, \ +- src5_l, filter3, sum0_r, sum0_l, sum2_r, sum2_l); \ +- LSX_DUP2_ARG3(__lsx_dp2add_w_h, sum3_r, src6_r, filter3, sum3_l, \ +- src6_l, filter3, sum3_r, sum3_l); \ ++ DUP4_ARG2(__lsx_vdp2_w_h, src0_r, filter0, src0_l, filter0, \ ++ src4_r, filter2, src4_l, filter2, sum0_r, sum0_l, \ ++ sum2_r, sum2_l); \ ++ DUP2_ARG2(__lsx_vdp2_w_h, src7_r, filter2, src7_l, filter2, \ ++ sum3_r, sum3_l); \ ++ DUP4_ARG3(__lsx_vdp2add_w_h, sum0_r, src1_r, filter1, sum0_l, \ ++ src1_l, filter1, sum2_r, src5_r, filter3, sum2_l, \ ++ src5_l, filter3, sum0_r, sum0_l, sum2_r, sum2_l); \ ++ DUP2_ARG3(__lsx_vdp2add_w_h, sum3_r, src6_r, filter3, sum3_l, \ ++ src6_l, filter3, sum3_r, sum3_l); \ + \ + sum1_r = sum0_r; \ + sum1_l = sum0_l; \ + \ +- LSX_DUP4_ARG2(__lsx_vldrepl_w, filter, 8, filter, 12, filter, 24, \ ++ DUP4_ARG2(__lsx_vldrepl_w, filter, 8, filter, 12, filter, 24, \ + filter, 28, filter0, filter1, filter2, filter3); \ + filter += 16; \ +- LSX_DUP2_ARG2(__lsx_dp2_w_h, src2_r, filter0, src2_l, filter0, \ +- temp0_r, temp0_l); \ +- LSX_DUP2_ARG3(__lsx_dp2add_w_h, sum2_r, src6_r, filter2, sum2_l, \ +- src6_l, filter2, sum2_r, sum2_l); \ +- LSX_DUP2_ARG2(__lsx_dp2_w_h, src5_r, filter2, src5_l, filter2, \ +- temp1_r, temp1_l); \ ++ DUP2_ARG2(__lsx_vdp2_w_h, src2_r, filter0, src2_l, filter0, \ ++ temp0_r, temp0_l); \ ++ DUP2_ARG3(__lsx_vdp2add_w_h, sum2_r, src6_r, filter2, sum2_l, \ ++ src6_l, filter2, sum2_r, sum2_l); \ ++ DUP2_ARG2(__lsx_vdp2_w_h, src5_r, filter2, src5_l, filter2, \ ++ temp1_r, temp1_l); \ + \ + sum0_r = __lsx_vadd_w(sum0_r, temp0_r); \ + sum0_l = __lsx_vadd_w(sum0_l, temp0_l); \ +@@ -242,26 +242,26 @@ static const int16_t gt32x32_cnst2[16] __attribute__ ((aligned (64))) = { + sum3_r = __lsx_vsub_w(temp1_r, sum3_r); \ + sum3_l = __lsx_vsub_w(temp1_l, sum3_l); \ + \ +- LSX_DUP2_ARG2(__lsx_dp2_w_h, src3_r, filter1, src3_l, filter1, \ +- temp0_r, temp0_l); \ +- LSX_DUP4_ARG3(__lsx_dp2add_w_h, sum2_r, src7_r, filter3, sum2_l, \ +- src7_l, filter3, sum3_r, src4_r, filter3, sum3_l, \ +- src4_l, filter3, sum2_r, sum2_l, sum3_r, sum3_l); \ ++ DUP2_ARG2(__lsx_vdp2_w_h, src3_r, filter1, src3_l, filter1, \ ++ temp0_r, temp0_l); \ ++ DUP4_ARG3(__lsx_vdp2add_w_h, sum2_r, src7_r, filter3, sum2_l, \ ++ src7_l, filter3, sum3_r, src4_r, filter3, sum3_l, \ ++ src4_l, filter3, sum2_r, sum2_l, sum3_r, sum3_l); \ + \ + sum0_r = __lsx_vadd_w(sum0_r, temp0_r); \ + sum0_l = __lsx_vadd_w(sum0_l, temp0_l); \ + sum1_r = __lsx_vsub_w(sum1_r, temp0_r); \ + sum1_l = __lsx_vsub_w(sum1_l, temp0_l); \ + \ +- BUTTERFLY_4_W(sum0_r, sum0_l, sum2_l, sum2_r, res0_r, res0_l, \ +- res1_l, res1_r); \ ++ LSX_BUTTERFLY_4_W(sum0_r, sum0_l, sum2_l, sum2_r, res0_r, res0_l, \ ++ res1_l, res1_r); \ + dst0 = __lsx_vssrarni_h_w(res0_l, res0_r, shift); \ + dst1 = __lsx_vssrarni_h_w(res1_l, res1_r, shift); \ + __lsx_vst(dst0, buf_ptr, 0); \ + __lsx_vst(dst1, (buf_ptr + ((15 - (j * 2)) << 4)), 0); \ + \ +- BUTTERFLY_4_W(sum1_r, sum1_l, sum3_l, sum3_r, res0_r, res0_l, \ +- res1_l, res1_r); \ ++ LSX_BUTTERFLY_4_W(sum1_r, sum1_l, sum3_l, sum3_r, res0_r, res0_l, \ ++ res1_l, res1_r); \ + \ + dst0 = __lsx_vssrarni_h_w(res0_l, res0_r, shift); \ + dst1 = __lsx_vssrarni_h_w(res1_l, res1_r, shift); \ +@@ -341,7 +341,7 @@ static void hevc_idct_4x4_lsx(int16_t *coeffs) + in_l1 = __lsx_vilvh_h(zero, in1); + + HEVC_IDCT4x4_COL(in_r0, in_l0, in_r1, in_l1, sum0, sum1, sum2, sum3, 7); +- TRANSPOSE4x4_W(sum0, sum1, sum2, sum3, in_r0, in_l0, in_r1, in_l1); ++ LSX_TRANSPOSE4x4_W(sum0, sum1, sum2, sum3, in_r0, in_l0, in_r1, in_l1); + HEVC_IDCT4x4_COL(in_r0, in_l0, in_r1, in_l1, sum0, sum1, sum2, sum3, 12); + + /* Pack and transpose */ +@@ -361,16 +361,16 @@ static void hevc_idct_8x8_lsx(int16_t *coeffs) + const int16_t *filter = >8x8_cnst[0]; + __m128i in0, in1, in2, in3, in4, in5, in6, in7; + +- LSX_DUP4_ARG2(__lsx_vld, coeffs, 0, coeffs, 16, coeffs, 32, +- coeffs, 48, in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vld, coeffs, 64, coeffs, 80, coeffs, 96, +- coeffs, 112, in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vld, coeffs, 0, coeffs, 16, coeffs, 32, ++ coeffs, 48, in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, coeffs, 64, coeffs, 80, coeffs, 96, ++ coeffs, 112, in4, in5, in6, in7); + HEVC_IDCT8x8_COL(in0, in1, in2, in3, in4, in5, in6, in7, 7); +- TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, +- in0, in1, in2, in3, in4, in5, in6, in7); ++ LSX_TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, ++ in0, in1, in2, in3, in4, in5, in6, in7); + HEVC_IDCT8x8_COL(in0, in1, in2, in3, in4, in5, in6, in7, 12); +- TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, +- in0, in1, in2, in3, in4, in5, in6, in7); ++ LSX_TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, ++ in0, in1, in2, in3, in4, in5, in6, in7); + + __lsx_vst(in0, coeffs,0); + __lsx_vst(in1, coeffs,16); +@@ -396,23 +396,23 @@ static void hevc_idct_16x16_lsx(int16_t *coeffs) + __m128i src0_l, src1_l, src2_l, src3_l, src4_l, src5_l, src6_l, src7_l; + + for (i = 2; i--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 32, src, 64, src, 96, +- in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vld, src, 128, src, 160, src, 192, src, 224, +- in4, in5, in6, in7); +- LSX_DUP4_ARG2(__lsx_vld, src, 256, src, 288, src, 320, src, 352, +- in8, in9, in10, in11); +- LSX_DUP4_ARG2(__lsx_vld, src, 384, src, 416, src, 448, src, 480, +- in12, in13, in14, in15); +- +- LSX_DUP4_ARG2(__lsx_vilvl_h, in4, in0, in12, in8, in6, in2, in14, in10, +- src0_r, src1_r, src2_r, src3_r); +- LSX_DUP4_ARG2(__lsx_vilvl_h, in5, in1, in13, in9, in3, in7, in11, in15, +- src4_r, src5_r, src6_r, src7_r); +- LSX_DUP4_ARG2(__lsx_vilvh_h, in4, in0, in12, in8, in6, in2, in14, in10, +- src0_l, src1_l, src2_l, src3_l); +- LSX_DUP4_ARG2(__lsx_vilvh_h, in5, in1, in13, in9, in3, in7, in11, in15, +- src4_l, src5_l, src6_l, src7_l); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 32, src, 64, src, 96, ++ in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, src, 128, src, 160, src, 192, src, 224, ++ in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vld, src, 256, src, 288, src, 320, src, 352, ++ in8, in9, in10, in11); ++ DUP4_ARG2(__lsx_vld, src, 384, src, 416, src, 448, src, 480, ++ in12, in13, in14, in15); ++ ++ DUP4_ARG2(__lsx_vilvl_h, in4, in0, in12, in8, in6, in2, in14, in10, ++ src0_r, src1_r, src2_r, src3_r); ++ DUP4_ARG2(__lsx_vilvl_h, in5, in1, in13, in9, in3, in7, in11, in15, ++ src4_r, src5_r, src6_r, src7_r); ++ DUP4_ARG2(__lsx_vilvh_h, in4, in0, in12, in8, in6, in2, in14, in10, ++ src0_l, src1_l, src2_l, src3_l); ++ DUP4_ARG2(__lsx_vilvh_h, in5, in1, in13, in9, in3, in7, in11, in15, ++ src4_l, src5_l, src6_l, src7_l); + + HEVC_IDCT16x16_COL(src0_r, src1_r, src2_r, src3_r, src4_r, src5_r, + src6_r, src7_r, src0_l, src1_l, src2_l, src3_l, +@@ -428,26 +428,26 @@ static void hevc_idct_16x16_lsx(int16_t *coeffs) + filter = >16x16_cnst[0]; + + for (i = 2; i--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, +- in0, in8, in1, in9); +- LSX_DUP4_ARG2(__lsx_vld, src, 64, src, 80, src, 96, src, 112, +- in2, in10, in3, in11); +- LSX_DUP4_ARG2(__lsx_vld, src, 128, src, 144, src, 160, src, 176, +- in4, in12, in5, in13); +- LSX_DUP4_ARG2(__lsx_vld, src, 192, src, 208, src, 224, src, 240, +- in6, in14, in7, in15); +- TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, +- in0, in1, in2, in3, in4, in5, in6, in7); +- TRANSPOSE8x8_H(in8, in9, in10, in11, in12, in13, in14, in15, +- in8, in9, in10, in11, in12, in13, in14, in15); +- LSX_DUP4_ARG2(__lsx_vilvl_h, in4, in0, in12, in8, in6, in2, in14, in10, +- src0_r, src1_r, src2_r, src3_r); +- LSX_DUP4_ARG2(__lsx_vilvl_h, in5, in1, in13, in9, in3, in7, in11, in15, +- src4_r, src5_r, src6_r, src7_r); +- LSX_DUP4_ARG2(__lsx_vilvh_h, in4, in0, in12, in8, in6, in2, in14, in10, +- src0_l, src1_l, src2_l, src3_l); +- LSX_DUP4_ARG2(__lsx_vilvh_h, in5, in1, in13, in9, in3, in7, in11, in15, +- src4_l, src5_l, src6_l, src7_l); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, ++ in0, in8, in1, in9); ++ DUP4_ARG2(__lsx_vld, src, 64, src, 80, src, 96, src, 112, ++ in2, in10, in3, in11); ++ DUP4_ARG2(__lsx_vld, src, 128, src, 144, src, 160, src, 176, ++ in4, in12, in5, in13); ++ DUP4_ARG2(__lsx_vld, src, 192, src, 208, src, 224, src, 240, ++ in6, in14, in7, in15); ++ LSX_TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, ++ in0, in1, in2, in3, in4, in5, in6, in7); ++ LSX_TRANSPOSE8x8_H(in8, in9, in10, in11, in12, in13, in14, in15, ++ in8, in9, in10, in11, in12, in13, in14, in15); ++ DUP4_ARG2(__lsx_vilvl_h, in4, in0, in12, in8, in6, in2, in14, in10, ++ src0_r, src1_r, src2_r, src3_r); ++ DUP4_ARG2(__lsx_vilvl_h, in5, in1, in13, in9, in3, in7, in11, in15, ++ src4_r, src5_r, src6_r, src7_r); ++ DUP4_ARG2(__lsx_vilvh_h, in4, in0, in12, in8, in6, in2, in14, in10, ++ src0_l, src1_l, src2_l, src3_l); ++ DUP4_ARG2(__lsx_vilvh_h, in5, in1, in13, in9, in3, in7, in11, in15, ++ src4_l, src5_l, src6_l, src7_l); + HEVC_IDCT16x16_COL(src0_r, src1_r, src2_r, src3_r, src4_r, src5_r, + src6_r, src7_r, src0_l, src1_l, src2_l, src3_l, + src4_l, src5_l, src6_l, src7_l, 12); +@@ -457,12 +457,12 @@ static void hevc_idct_16x16_lsx(int16_t *coeffs) + filter = >16x16_cnst[0]; + } + +- LSX_DUP4_ARG2(__lsx_vld, coeffs, 0, coeffs, 32, coeffs, 64, coeffs, 96, +- in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vld, coeffs, 128, coeffs, 160, coeffs, 192, coeffs, 224, +- in4, in5, in6, in7); +- TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, +- vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7); ++ DUP4_ARG2(__lsx_vld, coeffs, 0, coeffs, 32, coeffs, 64, coeffs, 96, ++ in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, coeffs, 128, coeffs, 160, coeffs, 192, coeffs, 224, ++ in4, in5, in6, in7); ++ LSX_TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, ++ vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7); + __lsx_vst(vec0, coeffs, 0); + __lsx_vst(vec1, coeffs, 32); + __lsx_vst(vec2, coeffs, 64); +@@ -473,17 +473,13 @@ static void hevc_idct_16x16_lsx(int16_t *coeffs) + __lsx_vst(vec7, coeffs, 224); + + src = coeffs + 8; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 32, src, 64, src, 96, +- in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vld, src, 128, src, 160, src, 192, src, 224, +- in4, in5, in6, in7); +- TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, +- vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 32, src, 64, src, 96, in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, src, 128, src, 160, src, 192, src, 224, in4, in5, in6, in7); ++ LSX_TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, ++ vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7); + src = coeffs + 128; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 32, src, 64, src, 96, +- in8, in9, in10, in11); +- LSX_DUP4_ARG2(__lsx_vld, src, 128, src, 160, src, 192, src, 224, +- in12, in13, in14, in15); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 32, src, 64, src, 96, in8, in9, in10, in11); ++ DUP4_ARG2(__lsx_vld, src, 128, src, 160, src, 192, src, 224, in12, in13, in14, in15); + + __lsx_vst(vec0, src, 0); + __lsx_vst(vec1, src, 32); +@@ -493,8 +489,8 @@ static void hevc_idct_16x16_lsx(int16_t *coeffs) + __lsx_vst(vec5, src, 160); + __lsx_vst(vec6, src, 192); + __lsx_vst(vec7, src, 224); +- TRANSPOSE8x8_H(in8, in9, in10, in11, in12, in13, in14, in15, +- vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7); ++ LSX_TRANSPOSE8x8_H(in8, in9, in10, in11, in12, in13, in14, in15, ++ vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7); + src = coeffs + 8; + __lsx_vst(vec0, src, 0); + __lsx_vst(vec1, src, 32); +@@ -506,12 +502,10 @@ static void hevc_idct_16x16_lsx(int16_t *coeffs) + __lsx_vst(vec7, src, 224); + + src = coeffs + 136; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 32, src, 64, src, 96, +- in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vld, src, 128, src, 160, src, 192, src, 224, +- in4, in5, in6, in7); +- TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, +- vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 32, src, 64, src, 96, in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, src, 128, src, 160, src, 192, src, 224, in4, in5, in6, in7); ++ LSX_TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, ++ vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7); + __lsx_vst(vec0, src, 0); + __lsx_vst(vec1, src, 32); + __lsx_vst(vec2, src, 64); +@@ -567,30 +561,30 @@ static void hevc_idct_8x32_column_lsx(int16_t *coeffs, uint8_t buf_pitch, + in5 = __lsx_vld(src3 + buf_pitch_8x, 0); + in6 = __lsx_vld(src3 + buf_pitch_16x, 0); + in7 = __lsx_vld(src3 + buf_pitch_16x + buf_pitch_8x, 0); +- LSX_DUP4_ARG2(__lsx_vilvl_h, in1, in0, in3, in2, in6, in4, in7, in5, +- src0_r, src1_r, src2_r, src3_r); +- LSX_DUP4_ARG2(__lsx_vilvh_h, in1, in0, in3, in2, in6, in4, in7, in5, +- src0_l, src1_l, src2_l, src3_l); ++ DUP4_ARG2(__lsx_vilvl_h, in1, in0, in3, in2, in6, in4, in7, in5, ++ src0_r, src1_r, src2_r, src3_r); ++ DUP4_ARG2(__lsx_vilvh_h, in1, in0, in3, in2, in6, in4, in7, in5, ++ src0_l, src1_l, src2_l, src3_l); + + /* loop for all columns of constants */ + for (i = 0; i < 2; i++) { + /* processing single column of constants */ + filter0 = __lsx_vldrepl_w(filter_ptr2, 0); + filter1 = __lsx_vldrepl_w(filter_ptr2, 4); +- sum0_r = __lsx_dp2_w_h(src0_r, filter0); +- sum0_l = __lsx_dp2_w_h(src0_l, filter0); +- sum0_r = __lsx_dp2add_w_h(sum0_r, src1_r, filter1); +- sum0_l = __lsx_dp2add_w_h(sum0_l, src1_l, filter1); ++ sum0_r = __lsx_vdp2_w_h(src0_r, filter0); ++ sum0_l = __lsx_vdp2_w_h(src0_l, filter0); ++ sum0_r = __lsx_vdp2add_w_h(sum0_r, src1_r, filter1); ++ sum0_l = __lsx_vdp2add_w_h(sum0_l, src1_l, filter1); + __lsx_vst(sum0_r, (tmp_buf_ptr + 2 * i * 8), 0); + __lsx_vst(sum0_l, (tmp_buf_ptr + 2 * i * 8), 16); + + /* processing single column of constants */ + filter0 = __lsx_vldrepl_w(filter_ptr2, 8); + filter1 = __lsx_vldrepl_w(filter_ptr2, 12); +- sum0_r = __lsx_dp2_w_h(src0_r, filter0); +- sum0_l = __lsx_dp2_w_h(src0_l, filter0); +- sum0_r = __lsx_dp2add_w_h(sum0_r, src1_r, filter1); +- sum0_l = __lsx_dp2add_w_h(sum0_l, src1_l, filter1); ++ sum0_r = __lsx_vdp2_w_h(src0_r, filter0); ++ sum0_l = __lsx_vdp2_w_h(src0_l, filter0); ++ sum0_r = __lsx_vdp2add_w_h(sum0_r, src1_r, filter1); ++ sum0_l = __lsx_vdp2add_w_h(sum0_l, src1_l, filter1); + __lsx_vst(sum0_r, (tmp_buf_ptr + (2 * i + 1) * 8), 0); + __lsx_vst(sum0_l, (tmp_buf_ptr + (2 * i + 1) * 8), 16); + +@@ -604,9 +598,8 @@ static void hevc_idct_8x32_column_lsx(int16_t *coeffs, uint8_t buf_pitch, + filter0 = __lsx_vldrepl_w(filter_ptr3, 0); + filter1 = __lsx_vldrepl_w(filter_ptr3, 4); + +- LSX_DUP4_ARG2(__lsx_dp2_w_h, src2_r, filter0, src2_l, filter0, +- src3_r, filter1, src3_l, filter1, sum0_r, sum0_l, +- tmp1_r, tmp1_l); ++ DUP4_ARG2(__lsx_vdp2_w_h, src2_r, filter0, src2_l, filter0, ++ src3_r, filter1, src3_l, filter1, sum0_r, sum0_l, tmp1_r, tmp1_l); + sum1_r = __lsx_vsub_w(sum0_r, tmp1_r); + sum1_l = __lsx_vsub_w(sum0_l, tmp1_l); + sum0_r = __lsx_vadd_w(sum0_r, tmp1_r); +@@ -635,10 +628,10 @@ static void hevc_idct_8x32_column_lsx(int16_t *coeffs, uint8_t buf_pitch, + in5 = __lsx_vld(src1 + buf_pitch_16x + buf_pitch_4x, 0); + in6 = __lsx_vld(src1 + buf_pitch_16x + buf_pitch_8x, 0); + in7 = __lsx_vld(src1 + buf_pitch_16x + buf_pitch_8x + buf_pitch_4x, 0); +- LSX_DUP4_ARG2(__lsx_vilvl_h, in1, in0, in3, in2, in5, in4, in7, in6, +- src0_r, src1_r, src2_r, src3_r); +- LSX_DUP4_ARG2(__lsx_vilvh_h, in1, in0, in3, in2, in5, in4, in7, in6, +- src0_l, src1_l, src2_l, src3_l); ++ DUP4_ARG2(__lsx_vilvl_h, in1, in0, in3, in2, in5, in4, in7, in6, ++ src0_r, src1_r, src2_r, src3_r); ++ DUP4_ARG2(__lsx_vilvh_h, in1, in0, in3, in2, in5, in4, in7, in6, ++ src0_l, src1_l, src2_l, src3_l); + + /* loop for all columns of constants */ + for (i = 0; i < 8; i++) { +@@ -647,14 +640,14 @@ static void hevc_idct_8x32_column_lsx(int16_t *coeffs, uint8_t buf_pitch, + filter1 = __lsx_vldrepl_w(filter_ptr1, 4); + filter2 = __lsx_vldrepl_w(filter_ptr1, 8); + filter3 = __lsx_vldrepl_w(filter_ptr1, 12); +- sum0_r = __lsx_dp2_w_h(src0_r, filter0); +- sum0_l = __lsx_dp2_w_h(src0_l, filter0); +- sum0_r = __lsx_dp2add_w_h(sum0_r, src1_r, filter1); +- sum0_l = __lsx_dp2add_w_h(sum0_l, src1_l, filter1); +- sum0_r = __lsx_dp2add_w_h(sum0_r, src2_r, filter2); +- sum0_l = __lsx_dp2add_w_h(sum0_l, src2_l, filter2); +- sum0_r = __lsx_dp2add_w_h(sum0_r, src3_r, filter3); +- sum0_l = __lsx_dp2add_w_h(sum0_l, src3_l, filter3); ++ sum0_r = __lsx_vdp2_w_h(src0_r, filter0); ++ sum0_l = __lsx_vdp2_w_h(src0_l, filter0); ++ sum0_r = __lsx_vdp2add_w_h(sum0_r, src1_r, filter1); ++ sum0_l = __lsx_vdp2add_w_h(sum0_l, src1_l, filter1); ++ sum0_r = __lsx_vdp2add_w_h(sum0_r, src2_r, filter2); ++ sum0_l = __lsx_vdp2add_w_h(sum0_l, src2_l, filter2); ++ sum0_r = __lsx_vdp2add_w_h(sum0_r, src3_r, filter3); ++ sum0_l = __lsx_vdp2add_w_h(sum0_l, src3_l, filter3); + + tmp0_r = __lsx_vld(tmp_buf_ptr + (i << 3), 0); + tmp0_l = __lsx_vld(tmp_buf_ptr + (i << 3), 16); +@@ -690,10 +683,10 @@ static void hevc_idct_8x32_column_lsx(int16_t *coeffs, uint8_t buf_pitch, + in6 = __lsx_vld(src0 + buf_pitch_8x + buf_pitch_4x, 0); + in7 = __lsx_vld(src0 + buf_pitch_8x + buf_pitch_4x + buf_pitch_2x, 0); + src0 += 16 * buf_pitch; +- LSX_DUP4_ARG2(__lsx_vilvl_h, in1, in0, in3, in2, in5, in4, in7, in6, +- src0_r, src1_r, src2_r, src3_r); +- LSX_DUP4_ARG2(__lsx_vilvh_h, in1, in0, in3, in2, in5, in4, in7, in6, +- src0_l, src1_l, src2_l, src3_l); ++ DUP4_ARG2(__lsx_vilvl_h, in1, in0, in3, in2, in5, in4, in7, in6, ++ src0_r, src1_r, src2_r, src3_r); ++ DUP4_ARG2(__lsx_vilvh_h, in1, in0, in3, in2, in5, in4, in7, in6, ++ src0_l, src1_l, src2_l, src3_l); + in0 = __lsx_vld(src0, 0); + // TODO: Use vldx once gcc fixed. + //in1 = __lsx_vldx(src0, buf_pitch_4x); +@@ -710,10 +703,10 @@ static void hevc_idct_8x32_column_lsx(int16_t *coeffs, uint8_t buf_pitch, + in5 = __lsx_vld(src0 + buf_pitch_8x + buf_pitch_2x, 0); + in6 = __lsx_vld(src0 + buf_pitch_8x + buf_pitch_4x, 0); + in7 = __lsx_vld(src0 + buf_pitch_8x + buf_pitch_4x + buf_pitch_2x, 0); +- LSX_DUP4_ARG2(__lsx_vilvl_h, in1, in0, in3, in2, in5, in4, in7, in6, +- src4_r, src5_r, src6_r, src7_r); +- LSX_DUP4_ARG2(__lsx_vilvh_h, in1, in0, in3, in2, in5, in4, in7, in6, +- src4_l, src5_l, src6_l, src7_l); ++ DUP4_ARG2(__lsx_vilvl_h, in1, in0, in3, in2, in5, in4, in7, in6, ++ src4_r, src5_r, src6_r, src7_r); ++ DUP4_ARG2(__lsx_vilvh_h, in1, in0, in3, in2, in5, in4, in7, in6, ++ src4_l, src5_l, src6_l, src7_l); + + /* loop for all columns of filter constants */ + for (i = 0; i < 16; i++) { +@@ -722,14 +715,14 @@ static void hevc_idct_8x32_column_lsx(int16_t *coeffs, uint8_t buf_pitch, + filter1 = __lsx_vldrepl_w(filter_ptr0, 4); + filter2 = __lsx_vldrepl_w(filter_ptr0, 8); + filter3 = __lsx_vldrepl_w(filter_ptr0, 12); +- sum0_r = __lsx_dp2_w_h(src0_r, filter0); +- sum0_l = __lsx_dp2_w_h(src0_l, filter0); +- sum0_r = __lsx_dp2add_w_h(sum0_r, src1_r, filter1); +- sum0_l = __lsx_dp2add_w_h(sum0_l, src1_l, filter1); +- sum0_r = __lsx_dp2add_w_h(sum0_r, src2_r, filter2); +- sum0_l = __lsx_dp2add_w_h(sum0_l, src2_l, filter2); +- sum0_r = __lsx_dp2add_w_h(sum0_r, src3_r, filter3); +- sum0_l = __lsx_dp2add_w_h(sum0_l, src3_l, filter3); ++ sum0_r = __lsx_vdp2_w_h(src0_r, filter0); ++ sum0_l = __lsx_vdp2_w_h(src0_l, filter0); ++ sum0_r = __lsx_vdp2add_w_h(sum0_r, src1_r, filter1); ++ sum0_l = __lsx_vdp2add_w_h(sum0_l, src1_l, filter1); ++ sum0_r = __lsx_vdp2add_w_h(sum0_r, src2_r, filter2); ++ sum0_l = __lsx_vdp2add_w_h(sum0_l, src2_l, filter2); ++ sum0_r = __lsx_vdp2add_w_h(sum0_r, src3_r, filter3); ++ sum0_l = __lsx_vdp2add_w_h(sum0_l, src3_l, filter3); + tmp1_r = sum0_r; + tmp1_l = sum0_l; + +@@ -737,14 +730,14 @@ static void hevc_idct_8x32_column_lsx(int16_t *coeffs, uint8_t buf_pitch, + filter1 = __lsx_vldrepl_w(filter_ptr0, 20); + filter2 = __lsx_vldrepl_w(filter_ptr0, 24); + filter3 = __lsx_vldrepl_w(filter_ptr0, 28); +- sum0_r = __lsx_dp2_w_h(src4_r, filter0); +- sum0_l = __lsx_dp2_w_h(src4_l, filter0); +- sum0_r = __lsx_dp2add_w_h(sum0_r, src5_r, filter1); +- sum0_l = __lsx_dp2add_w_h(sum0_l, src5_l, filter1); +- sum0_r = __lsx_dp2add_w_h(sum0_r, src6_r, filter2); +- sum0_l = __lsx_dp2add_w_h(sum0_l, src6_l, filter2); +- sum0_r = __lsx_dp2add_w_h(sum0_r, src7_r, filter3); +- sum0_l = __lsx_dp2add_w_h(sum0_l, src7_l, filter3); ++ sum0_r = __lsx_vdp2_w_h(src4_r, filter0); ++ sum0_l = __lsx_vdp2_w_h(src4_l, filter0); ++ sum0_r = __lsx_vdp2add_w_h(sum0_r, src5_r, filter1); ++ sum0_l = __lsx_vdp2add_w_h(sum0_l, src5_l, filter1); ++ sum0_r = __lsx_vdp2add_w_h(sum0_r, src6_r, filter2); ++ sum0_l = __lsx_vdp2add_w_h(sum0_l, src6_l, filter2); ++ sum0_r = __lsx_vdp2add_w_h(sum0_r, src7_r, filter3); ++ sum0_l = __lsx_vdp2add_w_h(sum0_l, src7_l, filter3); + sum0_r = __lsx_vadd_w(sum0_r, tmp1_r); + sum0_l = __lsx_vadd_w(sum0_l, tmp1_l); + +@@ -776,13 +769,13 @@ static void hevc_idct_transpose_32x8_to_8x32(int16_t *coeffs, int16_t *tmp_buf) + __m128i in0, in1, in2, in3, in4, in5, in6, in7; + + for (i = 0; i < 4; i++) { +- LSX_DUP4_ARG2(__lsx_vld, coeffs, 0, coeffs, 64, coeffs, 128, +- coeffs, 192, in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vld, coeffs, 256, coeffs, 320, coeffs, 384, +- coeffs, 448, in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vld, coeffs, 0, coeffs, 64, coeffs, 128, ++ coeffs, 192, in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, coeffs, 256, coeffs, 320, coeffs, 384, ++ coeffs, 448, in4, in5, in6, in7); + coeffs += 8; +- TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, +- in0, in1, in2, in3, in4, in5, in6, in7); ++ LSX_TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, ++ in0, in1, in2, in3, in4, in5, in6, in7); + __lsx_vst(in0, tmp_buf, 0); + __lsx_vst(in1, tmp_buf, 16); + __lsx_vst(in2, tmp_buf, 32); +@@ -801,13 +794,13 @@ static void hevc_idct_transpose_8x32_to_32x8(int16_t *tmp_buf, int16_t *coeffs) + __m128i in0, in1, in2, in3, in4, in5, in6, in7; + + for (i = 0; i < 4; i++) { +- LSX_DUP4_ARG2(__lsx_vld, tmp_buf, 0, tmp_buf, 16, tmp_buf, 32, +- tmp_buf, 48, in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vld, tmp_buf, 64, tmp_buf, 80, tmp_buf, 96, +- tmp_buf, 112, in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vld, tmp_buf, 0, tmp_buf, 16, tmp_buf, 32, ++ tmp_buf, 48, in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, tmp_buf, 64, tmp_buf, 80, tmp_buf, 96, ++ tmp_buf, 112, in4, in5, in6, in7); + tmp_buf += 64; +- TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, +- in0, in1, in2, in3, in4, in5, in6, in7); ++ LSX_TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, ++ in0, in1, in2, in3, in4, in5, in6, in7); + __lsx_vst(in0, coeffs, 0); + __lsx_vst(in1, coeffs, 64); + __lsx_vst(in2, coeffs, 128); +diff --git a/libavcodec/loongarch/hevc_lpf_sao_lsx.c b/libavcodec/loongarch/hevc_lpf_sao_lsx.c +index 01b22085ed..556e45e1ff 100644 +--- a/libavcodec/loongarch/hevc_lpf_sao_lsx.c ++++ b/libavcodec/loongarch/hevc_lpf_sao_lsx.c +@@ -19,7 +19,7 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "libavutil/loongarch/generic_macros_lsx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + #include "hevcdsp_lsx.h" + + static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, +@@ -69,20 +69,19 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + q_is_pcm0 = q_is_pcm[0]; + q_is_pcm4 = q_is_pcm[1]; + +- LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, p_is_pcm0, p_is_pcm4, cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_d, p_is_pcm0, p_is_pcm4, cmp0, cmp1); + p_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); + p_is_pcm_vec = __lsx_vseqi_d(p_is_pcm_vec, 0); + d0030 = (d00 + d30) >= beta; + d0434 = (d04 + d34) >= beta; +- LSX_DUP2_ARG1(__lsx_vreplgr2vr_w, d0030, d0434, cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_w, d0030, d0434, cmp0, cmp1); + cmp3 = __lsx_vpackev_w(cmp1, cmp0); + cmp3 = __lsx_vseqi_w(cmp3, 0); + + if ((!p_is_pcm0 || !p_is_pcm4 || !q_is_pcm0 || !q_is_pcm4) && + (!d0030 || !d0434)) { +- LSX_DUP4_ARG2(__lsx_vld, p3, 0, p2, 0, p1, 0, p0, 0, p3_src, p2_src, p1_src, +- p0_src); +- LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, q_is_pcm0, q_is_pcm4, cmp0, cmp1); ++ DUP4_ARG2(__lsx_vld, p3, 0, p2, 0, p1, 0, p0, 0, p3_src, p2_src, p1_src, p0_src); ++ DUP2_ARG1(__lsx_vreplgr2vr_d, q_is_pcm0, q_is_pcm4, cmp0, cmp1); + q_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); + q_is_pcm_vec = __lsx_vseqi_d(q_is_pcm_vec, 0); + +@@ -93,24 +92,23 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + tc4 = tc[1]; + tc254 = (((tc4 << 2) + tc4 + 1) >> 1); + +- LSX_DUP2_ARG1(__lsx_vreplgr2vr_h, tc0, tc4, cmp0, cmp1); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3_src, zero, p2_src, zero, p1_src, zero, +- p0_src, p3_src, p2_src, p1_src, p0_src); +- LSX_DUP4_ARG2(__lsx_vld, q0, 0, q1, 0, q2, 0, q3, 0, q0_src, q1_src, q2_src, +- q3_src); ++ DUP2_ARG1(__lsx_vreplgr2vr_h, tc0, tc4, cmp0, cmp1); ++ DUP4_ARG2(__lsx_vilvl_b, zero, p3_src, zero, p2_src, zero, p1_src, zero, ++ p0_src, p3_src, p2_src, p1_src, p0_src); ++ DUP4_ARG2(__lsx_vld, q0, 0, q1, 0, q2, 0, q3, 0, q0_src, q1_src, q2_src, q3_src); + flag0 = abs(p3[0] - p0[0]) + abs(q3[0] - q0[0]) < beta30 && abs(p0[0] - q0[0]) + < tc250; + flag0 = flag0 && (abs(p3[3] - p0[3]) + abs(q3[3] - q0[3]) < beta30 && + abs(p0[3] - q0[3]) < tc250 && (d00 << 1) < beta20 && (d30 << 1) < beta20); + tc_pos = __lsx_vpackev_d(cmp1, cmp0); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0_src, zero, q1_src, zero, q2_src, zero, +- q3_src, q0_src, q1_src, q2_src, q3_src); ++ DUP4_ARG2(__lsx_vilvl_b, zero, q0_src, zero, q1_src, zero, q2_src, zero, q3_src, ++ q0_src, q1_src, q2_src, q3_src); + + flag1 = abs(p3[4] - p0[4]) + abs(q3[4] - q0[4]) < beta30 && abs(p0[4] - q0[4]) + < tc254; + flag1 = flag1 && (abs(p3[7] - p0[7]) + abs(q3[7] - q0[7]) < beta30 && + abs(p0[7] - q0[7]) < tc254 && (d04 << 1) < beta20 && (d34 << 1) < beta20); +- LSX_DUP2_ARG1(__lsx_vreplgr2vr_w, flag0, flag1, cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_w, flag0, flag1, cmp0, cmp1); + cmp2 = __lsx_vpackev_w(cmp1, cmp0); + cmp2 = __lsx_vseqi_w(cmp2, 0); + +@@ -120,71 +118,71 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + tc_neg = __lsx_vneg_h(tc_pos); + + /* p part */ +- LSX_DUP2_ARG2(__lsx_vadd_h, p1_src, p0_src, temp0, q0_src, temp0, temp0); ++ DUP2_ARG2(__lsx_vadd_h, p1_src, p0_src, temp0, q0_src, temp0, temp0); + temp1 = __lsx_vadd_h(p3_src, p2_src); + temp1 = __lsx_vslli_h(temp1, 1); +- LSX_DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, temp0, temp1, temp1); ++ DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, temp0, temp1, temp1); + temp1 = __lsx_vsrari_h(temp1, 3); + temp2 = __lsx_vsub_h(temp1, p2_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst0 = __lsx_vadd_h(temp2, p2_src); + + temp1 = __lsx_vadd_h(temp0, p2_src); + temp1 = __lsx_vsrari_h(temp1, 2); + temp2 = __lsx_vsub_h(temp1, p1_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst1 = __lsx_vadd_h(temp2, p1_src); + + temp1 = __lsx_vslli_h(temp0, 1); +- LSX_DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, q1_src, temp1, temp1); ++ DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, q1_src, temp1, temp1); + temp1 = __lsx_vsrari_h(temp1, 3); + temp2 = __lsx_vsub_h(temp1, p0_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst2 = __lsx_vadd_h(temp2, p0_src); + + p_is_pcm_vec = __lsx_vnor_v(p_is_pcm_vec, p_is_pcm_vec); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, dst0, p2_src, p_is_pcm_vec, dst1, p1_src, +- p_is_pcm_vec, dst0, dst1); ++ DUP2_ARG3(__lsx_vbitsel_v, dst0, p2_src, p_is_pcm_vec, dst1, p1_src, ++ p_is_pcm_vec, dst0, dst1); + dst2 = __lsx_vbitsel_v(dst2, p0_src, p_is_pcm_vec); + + /* q part */ +- LSX_DUP2_ARG2(__lsx_vadd_h, q1_src, p0_src, temp0, q0_src, temp0, temp0); ++ DUP2_ARG2(__lsx_vadd_h, q1_src, p0_src, temp0, q0_src, temp0, temp0); + temp1 = __lsx_vadd_h(q3_src, q2_src); + temp1 = __lsx_vslli_h(temp1, 1); +- LSX_DUP2_ARG2(__lsx_vadd_h, temp1, q2_src, temp1, temp0, temp1, temp1); ++ DUP2_ARG2(__lsx_vadd_h, temp1, q2_src, temp1, temp0, temp1, temp1); + temp1 = __lsx_vsrari_h(temp1, 3); + temp2 = __lsx_vsub_h(temp1, q2_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst5 = __lsx_vadd_h(temp2, q2_src); + + temp1 = __lsx_vadd_h(temp0, q2_src); + temp1 = __lsx_vsrari_h(temp1, 2); + temp2 = __lsx_vsub_h(temp1, q1_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst4 = __lsx_vadd_h(temp2, q1_src); + + temp0 = __lsx_vslli_h(temp0, 1); +- LSX_DUP2_ARG2(__lsx_vadd_h, temp0, p1_src, temp1, q2_src, temp1, temp1); ++ DUP2_ARG2(__lsx_vadd_h, temp0, p1_src, temp1, q2_src, temp1, temp1); + temp1 = __lsx_vsrari_h(temp1, 3); + temp2 = __lsx_vsub_h(temp1, q0_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst3 = __lsx_vadd_h(temp2, q0_src); + + q_is_pcm_vec = __lsx_vnor_v(q_is_pcm_vec, q_is_pcm_vec); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, dst3, q0_src, q_is_pcm_vec, dst4, q1_src, +- q_is_pcm_vec, dst3, dst4); ++ DUP2_ARG3(__lsx_vbitsel_v, dst3, q0_src, q_is_pcm_vec, dst4, q1_src, ++ q_is_pcm_vec, dst3, dst4); + dst5 = __lsx_vbitsel_v(dst5, q2_src, q_is_pcm_vec); + + /* pack results to 8 bit */ +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); ++ DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); + dst2 = __lsx_vpickev_b(dst5, dst4); + + /* pack src to 8 bit */ +- LSX_DUP2_ARG2(__lsx_vpickev_b, p1_src, p2_src, q0_src, p0_src, dst3, dst4); ++ DUP2_ARG2(__lsx_vpickev_b, p1_src, p2_src, q0_src, p0_src, dst3, dst4); + dst5 = __lsx_vpickev_b(q2_src, q1_src); + + cmp3 = __lsx_vnor_v(cmp3, cmp3); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, dst0, dst3, cmp3, dst1, dst4, cmp3, dst0, dst1); ++ DUP2_ARG3(__lsx_vbitsel_v, dst0, dst3, cmp3, dst1, dst4, cmp3, dst0, dst1); + dst2 = __lsx_vbitsel_v(dst2, dst5, cmp3); + + __lsx_vstelm_d(dst0, p2, 0, 0); +@@ -197,9 +195,9 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + } else if (flag0 == flag1) { /* weak only */ + /* weak filter */ + tc_neg = __lsx_vneg_h(tc_pos); +- LSX_DUP2_ARG2(__lsx_vsub_h, q0_src, p0_src, q1_src, p1_src, diff0, diff1); +- LSX_DUP2_ARG2(__lsx_vadd_h, __lsx_vslli_h(diff0, 3), diff0, __lsx_vslli_h( +- diff1, 1), diff1, diff0, diff1); ++ DUP2_ARG2(__lsx_vsub_h, q0_src, p0_src, q1_src, p1_src, diff0, diff1); ++ DUP2_ARG2(__lsx_vadd_h, __lsx_vslli_h(diff0, 3), diff0, __lsx_vslli_h( ++ diff1, 1), diff1, diff0, diff1); + delta0 = __lsx_vsub_h(diff0, diff1); + delta0 = __lsx_vsrari_h(delta0, 4); + temp1 = __lsx_vadd_h(__lsx_vslli_h(tc_pos, 3), __lsx_vslli_h(tc_pos, 1)); +@@ -207,56 +205,53 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + abs_delta0 = __lsx_vsle_hu(temp1, abs_delta0); + abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); + +- delta0 = __lsx_clip_h(delta0, tc_neg, tc_pos); ++ delta0 = __lsx_vclip_h(delta0, tc_neg, tc_pos); + temp2 = __lsx_vadd_h(delta0, p0_src); +- temp2 = __lsx_clamp255_h(temp2); ++ temp2 = __lsx_vclip255_h(temp2); + temp0 = __lsx_vbitsel_v(temp2, p0_src, __lsx_vnor_v(p_is_pcm_vec, + p_is_pcm_vec)); + temp2 = __lsx_vsub_h(q0_src, delta0); +- temp2 = __lsx_clamp255_h(temp2); ++ temp2 = __lsx_vclip255_h(temp2); + temp2 = __lsx_vbitsel_v(temp2, q0_src, __lsx_vnor_v(q_is_pcm_vec, + q_is_pcm_vec)); +- LSX_DUP2_ARG2(__lsx_vnor_v, p_is_pcm_vec, p_is_pcm_vec, q_is_pcm_vec, +- q_is_pcm_vec, p_is_pcm_vec, q_is_pcm_vec); ++ DUP2_ARG2(__lsx_vnor_v, p_is_pcm_vec, p_is_pcm_vec, q_is_pcm_vec, ++ q_is_pcm_vec, p_is_pcm_vec, q_is_pcm_vec); + + tmp = (beta + (beta >> 1)) >> 3; +- LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, dp00 + dp30 < tmp, dp04 + dp34 < tmp, +- cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_d, dp00 + dp30 < tmp, dp04 + dp34 < tmp, cmp0, cmp1); + cmp0 = __lsx_vpackev_d(cmp1, cmp0); + cmp0 = __lsx_vseqi_d(cmp0, 0); + p_is_pcm_vec = __lsx_vor_v(p_is_pcm_vec, cmp0); + +- LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, dq00 + dq30 < tmp, dq04 + dq34 < tmp, +- cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_d, dq00 + dq30 < tmp, dq04 + dq34 < tmp, cmp0, cmp1); + cmp0 = __lsx_vpackev_d(cmp1, cmp0); + cmp0 = __lsx_vseqi_d(cmp0, 0); + q_is_pcm_vec = __lsx_vor_v(q_is_pcm_vec, cmp0); + tc_pos = __lsx_vsrai_h(tc_pos, 1); + tc_neg = __lsx_vneg_h(tc_pos); + +- LSX_DUP2_ARG2(__lsx_vavgr_hu, p2_src, p0_src, q0_src, q2_src, delta1, delta2); +- LSX_DUP2_ARG2(__lsx_vsub_h, delta1, p1_src, delta2, q1_src, delta1, delta2); ++ DUP2_ARG2(__lsx_vavgr_hu, p2_src, p0_src, q0_src, q2_src, delta1, delta2); ++ DUP2_ARG2(__lsx_vsub_h, delta1, p1_src, delta2, q1_src, delta1, delta2); + delta1 = __lsx_vadd_h(delta1, delta0); + delta2 = __lsx_vsub_h(delta2, delta0); +- LSX_DUP2_ARG2(__lsx_vsrai_h, delta1, 1, delta2, 1, delta1, delta2); +- LSX_DUP2_ARG3(__lsx_clip_h, delta1, tc_neg, tc_pos, delta2, tc_neg, tc_pos, +- delta1, delta2); +- LSX_DUP2_ARG2(__lsx_vadd_h, p1_src, delta1, q1_src, delta2, delta1, delta2); +- LSX_DUP2_ARG1(__lsx_clamp255_h, delta1, delta2, delta1, delta2); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, delta1, p1_src, p_is_pcm_vec, delta2, q1_src, +- q_is_pcm_vec, delta1, delta2); ++ DUP2_ARG2(__lsx_vsrai_h, delta1, 1, delta2, 1, delta1, delta2); ++ DUP2_ARG3(__lsx_vclip_h, delta1, tc_neg, tc_pos, delta2, tc_neg, tc_pos, ++ delta1, delta2); ++ DUP2_ARG2(__lsx_vadd_h, p1_src, delta1, q1_src, delta2, delta1, delta2); ++ DUP2_ARG1(__lsx_vclip255_h, delta1, delta2, delta1, delta2); ++ DUP2_ARG3(__lsx_vbitsel_v, delta1, p1_src, p_is_pcm_vec, delta2, q1_src, ++ q_is_pcm_vec, delta1, delta2); + + abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); +- LSX_DUP4_ARG3(__lsx_vbitsel_v, delta1, p1_src, abs_delta0, temp0, p0_src, +- abs_delta0, temp2, q0_src, abs_delta0, delta2, q1_src, +- abs_delta0, dst1, dst2, dst3, dst4); ++ DUP4_ARG3(__lsx_vbitsel_v, delta1, p1_src, abs_delta0, temp0, p0_src, ++ abs_delta0, temp2, q0_src, abs_delta0, delta2, q1_src, abs_delta0, ++ dst1, dst2, dst3, dst4); + /* pack results to 8 bit */ +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst2, dst1, dst4, dst3, dst0, dst1); ++ DUP2_ARG2(__lsx_vpickev_b, dst2, dst1, dst4, dst3, dst0, dst1); + /* pack src to 8 bit */ +- LSX_DUP2_ARG2(__lsx_vpickev_b, p0_src, p1_src, q1_src, q0_src, dst2, dst3); ++ DUP2_ARG2(__lsx_vpickev_b, p0_src, p1_src, q1_src, q0_src, dst2, dst3); + cmp3 = __lsx_vnor_v(cmp3, cmp3); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, dst0, dst2, cmp3, dst1, dst3, cmp3, dst0, +- dst1); ++ DUP2_ARG3(__lsx_vbitsel_v, dst0, dst2, cmp3, dst1, dst3, cmp3, dst0, dst1); + + p2 += stride; + __lsx_vstelm_d(dst0, p2, 0, 0); +@@ -270,63 +265,63 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + tc_neg = __lsx_vneg_h(tc_pos); + + /* p part */ +- LSX_DUP2_ARG2(__lsx_vadd_h, p1_src, p0_src, temp0, q0_src, temp0, temp0); ++ DUP2_ARG2(__lsx_vadd_h, p1_src, p0_src, temp0, q0_src, temp0, temp0); + temp1 = __lsx_vadd_h(p3_src, p2_src); + temp1 = __lsx_vslli_h(temp1, 1); +- LSX_DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, temp0, temp1, temp1); ++ DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, temp0, temp1, temp1); + temp1 = __lsx_vsrari_h(temp1, 3); + temp2 = __lsx_vsub_h(temp1, p2_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst0 = __lsx_vadd_h(temp2, p2_src); + + temp1 = __lsx_vadd_h(temp0, p2_src); + temp1 = __lsx_vsrari_h(temp1, 2); + temp2 = __lsx_vsub_h(temp1, p1_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst1 = __lsx_vadd_h(temp2, p1_src); + + temp1 = __lsx_vslli_h(temp0, 1); +- LSX_DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, q1_src, temp1, temp1); ++ DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, q1_src, temp1, temp1); + temp1 = __lsx_vsrari_h(temp1, 3); + temp2 = __lsx_vsub_h(temp1, p0_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst2 = __lsx_vadd_h(temp2, p0_src); + + p_is_pcm_vec = __lsx_vnor_v(p_is_pcm_vec, p_is_pcm_vec); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, dst0, p2_src, p_is_pcm_vec, dst1, p1_src, +- p_is_pcm_vec, dst0, dst1); ++ DUP2_ARG3(__lsx_vbitsel_v, dst0, p2_src, p_is_pcm_vec, dst1, p1_src, ++ p_is_pcm_vec, dst0, dst1); + dst2 = __lsx_vbitsel_v(dst2, p0_src, p_is_pcm_vec); + + /* q part */ +- LSX_DUP2_ARG2(__lsx_vadd_h, q1_src, p0_src, temp0, q0_src, temp0, temp0); ++ DUP2_ARG2(__lsx_vadd_h, q1_src, p0_src, temp0, q0_src, temp0, temp0); + temp1 = __lsx_vadd_h(q3_src, q2_src); + temp1 = __lsx_vslli_h(temp1, 1); +- LSX_DUP2_ARG2(__lsx_vadd_h, temp1, q2_src, temp1, temp0, temp1, temp1); ++ DUP2_ARG2(__lsx_vadd_h, temp1, q2_src, temp1, temp0, temp1, temp1); + temp1 = __lsx_vsrari_h(temp1, 3); + temp2 = __lsx_vsub_h(temp1, q2_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst5 = __lsx_vadd_h(temp2, q2_src); + + temp1 = __lsx_vadd_h(temp0, q2_src); + temp1 = __lsx_vsrari_h(temp1, 2); + temp2 = __lsx_vsub_h(temp1, q1_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst4 = __lsx_vadd_h(temp2, q1_src); + + temp1 = __lsx_vslli_h(temp0, 1); +- LSX_DUP2_ARG2(__lsx_vadd_h, temp1, p1_src, temp1, q2_src, temp1, temp1); ++ DUP2_ARG2(__lsx_vadd_h, temp1, p1_src, temp1, q2_src, temp1, temp1); + temp1 = __lsx_vsrari_h(temp1, 3); + temp2 = __lsx_vsub_h(temp1, q0_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst3 = __lsx_vadd_h(temp2, q0_src); + + q_is_pcm_vec = __lsx_vnor_v(q_is_pcm_vec, q_is_pcm_vec); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, dst3, q0_src, q_is_pcm_vec, dst4, q1_src, +- q_is_pcm_vec, dst3, dst4); ++ DUP2_ARG3(__lsx_vbitsel_v, dst3, q0_src, q_is_pcm_vec, dst4, q1_src, ++ q_is_pcm_vec, dst3, dst4); + dst5 = __lsx_vbitsel_v(dst5, q2_src, q_is_pcm_vec); + + /* pack strong results to 8 bit */ +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); ++ DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); + dst2 = __lsx_vpickev_b(dst5, dst4); + /* strong filter ends */ + +@@ -334,9 +329,9 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + tc_pos = __lsx_vsrai_h(tc_pos, 1); + tc_neg = __lsx_vneg_h(tc_pos); + +- LSX_DUP2_ARG2(__lsx_vsub_h, q0_src, p0_src, q1_src, p1_src, diff0, diff1); +- LSX_DUP2_ARG2(__lsx_vadd_h, __lsx_vslli_h(diff0, 3), diff0, __lsx_vslli_h( +- diff1, 1), diff1, diff0, diff1); ++ DUP2_ARG2(__lsx_vsub_h, q0_src, p0_src, q1_src, p1_src, diff0, diff1); ++ DUP2_ARG2(__lsx_vadd_h, __lsx_vslli_h(diff0, 3), diff0, __lsx_vslli_h( ++ diff1, 1), diff1, diff0, diff1); + delta0 = __lsx_vsub_h(diff0, diff1); + delta0 = __lsx_vsrari_h(delta0, 4); + temp1 = __lsx_vadd_h(__lsx_vslli_h(tc_pos, 3), __lsx_vslli_h(tc_pos, 1)); +@@ -344,59 +339,57 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + abs_delta0 = __lsx_vsle_hu(temp1, abs_delta0); + abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); + +- delta0 = __lsx_clip_h(delta0, tc_neg, tc_pos); ++ delta0 = __lsx_vclip_h(delta0, tc_neg, tc_pos); + temp2 = __lsx_vadd_h(delta0, p0_src); +- temp2 = __lsx_clamp255_h(temp2); ++ temp2 = __lsx_vclip255_h(temp2); + temp0 = __lsx_vbitsel_v(temp2, p0_src, p_is_pcm_vec); + + temp2 = __lsx_vsub_h(q0_src, delta0); +- temp2 = __lsx_clamp255_h(temp2); ++ temp2 = __lsx_vclip255_h(temp2); + temp2 = __lsx_vbitsel_v(temp2, q0_src, q_is_pcm_vec); + + tmp = (beta + (beta >> 1)) >> 3; +- LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, dp00 + dp30 < tmp, dp04 + dp34 < tmp, +- cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_d, dp00 + dp30 < tmp, dp04 + dp34 < tmp, cmp0, cmp1); + cmp0 = __lsx_vpackev_d(cmp1, cmp0); + p_is_pcm_vec = __lsx_vor_v(p_is_pcm_vec, __lsx_vseqi_d(cmp0, 0)); +- LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, dq00 + dq30 < tmp, dq04 + dq34 < tmp, +- cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_d, dq00 + dq30 < tmp, dq04 + dq34 < tmp, cmp0, cmp1); + cmp0 = __lsx_vpackev_d(cmp1, cmp0); + q_is_pcm_vec = __lsx_vor_v(q_is_pcm_vec, __lsx_vseqi_d(cmp0, 0)); + + tc_pos = __lsx_vsrai_h(tc_pos, 1); + tc_neg = __lsx_vneg_h(tc_pos); + +- LSX_DUP2_ARG2(__lsx_vavgr_hu, p2_src, p0_src, q0_src, q2_src, delta1, delta2); +- LSX_DUP2_ARG2(__lsx_vsub_h, delta1, p1_src, delta2, q1_src, delta1, delta2); ++ DUP2_ARG2(__lsx_vavgr_hu, p2_src, p0_src, q0_src, q2_src, delta1, delta2); ++ DUP2_ARG2(__lsx_vsub_h, delta1, p1_src, delta2, q1_src, delta1, delta2); + delta1 = __lsx_vadd_h(delta1, delta0); + delta2 = __lsx_vsub_h(delta2, delta0); +- LSX_DUP2_ARG2(__lsx_vsrai_h, delta1, 1, delta2, 1, delta1, delta2); +- LSX_DUP2_ARG3(__lsx_clip_h, delta1, tc_neg, tc_pos, delta2, tc_neg, tc_pos, +- delta1, delta2); +- LSX_DUP2_ARG2(__lsx_vadd_h, p1_src, delta1, q1_src, delta2, delta1, delta2); +- LSX_DUP2_ARG1(__lsx_clamp255_h, delta1, delta2, delta1, delta2); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, delta1, p1_src, p_is_pcm_vec, delta2, q1_src, +- q_is_pcm_vec, delta1, delta2); ++ DUP2_ARG2(__lsx_vsrai_h, delta1, 1, delta2, 1, delta1, delta2); ++ DUP2_ARG3(__lsx_vclip_h, delta1, tc_neg, tc_pos, delta2, tc_neg, tc_pos, ++ delta1, delta2); ++ DUP2_ARG2(__lsx_vadd_h, p1_src, delta1, q1_src, delta2, delta1, delta2); ++ DUP2_ARG1(__lsx_vclip255_h, delta1, delta2, delta1, delta2); ++ DUP2_ARG3(__lsx_vbitsel_v, delta1, p1_src, p_is_pcm_vec, delta2, q1_src, ++ q_is_pcm_vec, delta1, delta2); + abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); +- LSX_DUP4_ARG3(__lsx_vbitsel_v, delta1, p1_src, abs_delta0, delta2, q1_src, +- abs_delta0, temp0, p0_src, abs_delta0, temp2, q0_src, +- abs_delta0, delta1, delta2, temp0, temp2); ++ DUP4_ARG3(__lsx_vbitsel_v, delta1, p1_src, abs_delta0, delta2, q1_src, ++ abs_delta0, temp0, p0_src, abs_delta0, temp2, q0_src, ++ abs_delta0, delta1, delta2, temp0, temp2); + /* weak filter ends */ + + /* pack weak results to 8 bit */ +- LSX_DUP2_ARG2(__lsx_vpickev_b, delta1, p2_src, temp2, temp0, dst3, dst4); ++ DUP2_ARG2(__lsx_vpickev_b, delta1, p2_src, temp2, temp0, dst3, dst4); + dst5 = __lsx_vpickev_b(q2_src, delta2); + + /* select between weak or strong */ +- LSX_DUP2_ARG3(__lsx_vbitsel_v, dst0, dst3, cmp2, dst1, dst4, cmp2, dst0, dst1); ++ DUP2_ARG3(__lsx_vbitsel_v, dst0, dst3, cmp2, dst1, dst4, cmp2, dst0, dst1); + dst2 = __lsx_vbitsel_v(dst2, dst5, cmp2); + + /* pack src to 8 bit */ +- LSX_DUP2_ARG2(__lsx_vpickev_b, p1_src, p2_src, q0_src, p0_src, dst3, dst4); ++ DUP2_ARG2(__lsx_vpickev_b, p1_src, p2_src, q0_src, p0_src, dst3, dst4); + dst5 = __lsx_vpickev_b(q2_src, q1_src); + + cmp3 = __lsx_vnor_v(cmp3, cmp3); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, dst0, dst3, cmp3, dst1, dst4, cmp3, dst0, dst1); ++ DUP2_ARG3(__lsx_vbitsel_v, dst0, dst3, cmp3, dst1, dst4, cmp3, dst0, dst1); + dst2 = __lsx_vbitsel_v(dst2, dst5, cmp3); + + __lsx_vstelm_d(dst0, p2, 0, 0); +@@ -455,28 +448,28 @@ static void hevc_loopfilter_luma_ver_lsx(uint8_t *src, int32_t stride, + p_is_pcm4 = p_is_pcm[1]; + q_is_pcm4 = q_is_pcm[1]; + +- LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, p_is_pcm0, p_is_pcm4, cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_d, p_is_pcm0, p_is_pcm4, cmp0, cmp1); + p_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); + p_is_pcm_vec = __lsx_vseqi_d(p_is_pcm_vec, 0); + + d0030 = (d00 + d30) >= beta; + d0434 = (d04 + d34) >= beta; + +- LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, d0030, d0434, cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_d, d0030, d0434, cmp0, cmp1); + cmp3 = __lsx_vpackev_d(cmp1, cmp0); + cmp3 = __lsx_vseqi_d(cmp3, 0); + + if ((!p_is_pcm0 || !p_is_pcm4 || !q_is_pcm0 || !q_is_pcm4) && + (!d0030 || !d0434)) { + src -= 4; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + stride, 0, src + stride_2x, 0, +- src + stride_3x, 0, p3_src, p2_src, p1_src, p0_src); ++ DUP4_ARG2(__lsx_vld, src, 0, src + stride, 0, src + stride_2x, 0, ++ src + stride_3x, 0, p3_src, p2_src, p1_src, p0_src); + src += stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + stride, 0, src + stride_2x, 0, +- src + stride_3x, 0, q0_src, q1_src, q2_src, q3_src); ++ DUP4_ARG2(__lsx_vld, src, 0, src + stride, 0, src + stride_2x, 0, ++ src + stride_3x, 0, q0_src, q1_src, q2_src, q3_src); + src -= stride_4x; + +- LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, q_is_pcm0, q_is_pcm4, cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_d, q_is_pcm0, q_is_pcm4, cmp0, cmp1); + q_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); + q_is_pcm_vec = __lsx_vseqi_d(q_is_pcm_vec, 0); + +@@ -486,11 +479,11 @@ static void hevc_loopfilter_luma_ver_lsx(uint8_t *src, int32_t stride, + tc250 = (((tc0 << 2) + tc0 + 1) >> 1); + tc4 = tc[1]; + tc254 = (((tc4 << 2) + tc4 + 1) >> 1); +- LSX_DUP2_ARG1( __lsx_vreplgr2vr_h, tc0 << 1, tc4 << 1, cmp0, cmp1); ++ DUP2_ARG1( __lsx_vreplgr2vr_h, tc0 << 1, tc4 << 1, cmp0, cmp1); + tc_pos = __lsx_vpackev_d(cmp1, cmp0); +- TRANSPOSE8x8_B(p3_src, p2_src, p1_src, p0_src, q0_src, q1_src, +- q2_src, q3_src, p3_src, p2_src, p1_src, p0_src, +- q0_src, q1_src, q2_src, q3_src); ++ LSX_TRANSPOSE8x8_B(p3_src, p2_src, p1_src, p0_src, q0_src, q1_src, ++ q2_src, q3_src, p3_src, p2_src, p1_src, p0_src, ++ q0_src, q1_src, q2_src, q3_src); + + flag0 = abs(p3[-4] - p3[-1]) + abs(p3[3] - p3[0]) < beta30 && + abs(p3[-1] - p3[0]) < tc250; +@@ -498,16 +491,16 @@ static void hevc_loopfilter_luma_ver_lsx(uint8_t *src, int32_t stride, + abs(p2[-1] - p2[0]) < tc250 && (d00 << 1) < beta20 && + (d30 << 1) < beta20); + cmp0 = __lsx_vreplgr2vr_d(flag0); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3_src, zero, p2_src, zero, p1_src, zero, +- p0_src, p3_src, p2_src, p1_src, p0_src); ++ DUP4_ARG2(__lsx_vilvl_b, zero, p3_src, zero, p2_src, zero, p1_src, zero, ++ p0_src, p3_src, p2_src, p1_src, p0_src); + + flag1 = abs(p1[-4] - p1[-1]) + abs(p1[3] - p1[0]) < beta30 && + abs(p1[-1] - p1[0]) < tc254; + flag1 = flag1 && (abs(p0[-4] - p0[-1]) + abs(p0[3] - p0[0]) < beta30 && + abs(p0[-1] - p0[0]) < tc254 && (d04 << 1) < beta20 && + (d34 << 1) < beta20); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0_src, zero, q1_src, zero, q2_src, zero, +- q3_src, q0_src, q1_src, q2_src, q3_src); ++ DUP4_ARG2(__lsx_vilvl_b, zero, q0_src, zero, q1_src, zero, q2_src, zero, ++ q3_src, q0_src, q1_src, q2_src, q3_src); + + cmp1 = __lsx_vreplgr2vr_d(flag1); + cmp2 = __lsx_vpackev_d(cmp1, cmp0); +@@ -517,60 +510,60 @@ static void hevc_loopfilter_luma_ver_lsx(uint8_t *src, int32_t stride, + /* strong filter */ + tc_neg = __lsx_vneg_h(tc_pos); + /* p part */ +- LSX_DUP2_ARG2(__lsx_vadd_h, p1_src, p0_src, temp0, q0_src, temp0, temp0); ++ DUP2_ARG2(__lsx_vadd_h, p1_src, p0_src, temp0, q0_src, temp0, temp0); + + temp1 = __lsx_vadd_h(p3_src, p2_src); + temp1 = __lsx_vslli_h(temp1, 1); +- LSX_DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, temp0, temp1, temp1); ++ DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, temp0, temp1, temp1); + temp1 = __lsx_vsrari_h(temp1, 3); + temp2 = __lsx_vsub_h(temp1, p2_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst0 = __lsx_vadd_h(temp2, p2_src); + + temp1 = __lsx_vadd_h(temp0, p2_src); + temp1 = __lsx_vsrari_h(temp1, 2); + temp2 = __lsx_vsub_h(temp1, p1_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst1 = __lsx_vadd_h(temp2, p1_src); + + temp1 = __lsx_vslli_h(temp0, 1); +- LSX_DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, q1_src, temp1, temp1); ++ DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, q1_src, temp1, temp1); + temp1 = __lsx_vsrari_h(temp1, 3); + temp2 = __lsx_vsub_h(temp1, p0_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst2 = __lsx_vadd_h(temp2, p0_src); + + p_is_pcm_vec = __lsx_vnor_v(p_is_pcm_vec, p_is_pcm_vec); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, dst0, p2_src, p_is_pcm_vec, dst1, p1_src, +- p_is_pcm_vec, dst0, dst1); ++ DUP2_ARG3(__lsx_vbitsel_v, dst0, p2_src, p_is_pcm_vec, dst1, p1_src, ++ p_is_pcm_vec, dst0, dst1); + dst2 = __lsx_vbitsel_v(dst2, p0_src, p_is_pcm_vec); + + /* q part */ +- LSX_DUP2_ARG2(__lsx_vadd_h, q1_src, p0_src, temp0, q0_src, temp0, temp0); ++ DUP2_ARG2(__lsx_vadd_h, q1_src, p0_src, temp0, q0_src, temp0, temp0); + temp1 = __lsx_vadd_h(q3_src, q2_src); + temp1 = __lsx_vslli_h(temp1, 1); +- LSX_DUP2_ARG2(__lsx_vadd_h, temp1, q2_src, temp1, temp0, temp1, temp1); ++ DUP2_ARG2(__lsx_vadd_h, temp1, q2_src, temp1, temp0, temp1, temp1); + temp1 = __lsx_vsrari_h(temp1, 3); + temp2 = __lsx_vsub_h(temp1, q2_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst5 = __lsx_vadd_h(temp2, q2_src); + + temp1 = __lsx_vadd_h(temp0, q2_src); + temp1 = __lsx_vsrari_h(temp1, 2); + temp2 = __lsx_vsub_h(temp1, q1_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst4 = __lsx_vadd_h(temp2, q1_src); + + temp1 = __lsx_vslli_h(temp0, 1); +- LSX_DUP2_ARG2(__lsx_vadd_h, temp1, p1_src, temp1, q2_src, temp1, temp1); ++ DUP2_ARG2(__lsx_vadd_h, temp1, p1_src, temp1, q2_src, temp1, temp1); + temp1 = __lsx_vsrari_h(temp1, 3); + temp2 = __lsx_vsub_h(temp1, q0_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst3 = __lsx_vadd_h(temp2, q0_src); + + q_is_pcm_vec = __lsx_vnor_v(q_is_pcm_vec, q_is_pcm_vec); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, dst3, q0_src, q_is_pcm_vec, dst4, q1_src, +- q_is_pcm_vec, dst3, dst4); ++ DUP2_ARG3(__lsx_vbitsel_v, dst3, q0_src, q_is_pcm_vec, dst4, q1_src, ++ q_is_pcm_vec, dst3, dst4); + dst5 = __lsx_vbitsel_v(dst5, q2_src, q_is_pcm_vec); + /* strong filter ends */ + } else if (flag0 == flag1) { /* weak only */ +@@ -578,9 +571,9 @@ static void hevc_loopfilter_luma_ver_lsx(uint8_t *src, int32_t stride, + tc_pos = __lsx_vsrai_h(tc_pos, 1); + tc_neg = __lsx_vneg_h(tc_pos); + +- LSX_DUP2_ARG2(__lsx_vsub_h, q0_src, p0_src, q1_src, p1_src, diff0, diff1); +- LSX_DUP2_ARG2(__lsx_vadd_h, __lsx_vslli_h(diff0, 3), diff0, __lsx_vslli_h( +- diff1, 1), diff1, diff0, diff1); ++ DUP2_ARG2(__lsx_vsub_h, q0_src, p0_src, q1_src, p1_src, diff0, diff1); ++ DUP2_ARG2(__lsx_vadd_h, __lsx_vslli_h(diff0, 3), diff0, __lsx_vslli_h( ++ diff1, 1), diff1, diff0, diff1); + delta0 = __lsx_vsub_h(diff0, diff1); + delta0 = __lsx_vsrari_h(delta0, 4); + temp1 = __lsx_vadd_h(__lsx_vslli_h(tc_pos, 3), __lsx_vslli_h(tc_pos, 1)); +@@ -588,52 +581,52 @@ static void hevc_loopfilter_luma_ver_lsx(uint8_t *src, int32_t stride, + abs_delta0 = __lsx_vsle_hu(temp1, abs_delta0); + abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); + +- delta0 = __lsx_clip_h(delta0, tc_neg, tc_pos); ++ delta0 = __lsx_vclip_h(delta0, tc_neg, tc_pos); + temp2 = __lsx_vadd_h(delta0, p0_src); +- temp2 = __lsx_clamp255_h(temp2); ++ temp2 = __lsx_vclip255_h(temp2); + p_is_pcm_vec = __lsx_vnor_v(p_is_pcm_vec, p_is_pcm_vec); + temp0 = __lsx_vbitsel_v(temp2, p0_src, p_is_pcm_vec); + + temp2 = __lsx_vsub_h(q0_src, delta0); +- temp2 = __lsx_clamp255_h(temp2); ++ temp2 = __lsx_vclip255_h(temp2); + q_is_pcm_vec = __lsx_vnor_v(q_is_pcm_vec, q_is_pcm_vec); + temp2 = __lsx_vbitsel_v(temp2, q0_src, q_is_pcm_vec); + + tmp = ((beta + (beta >> 1)) >> 3); +- LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, !p_is_pcm0 && ((dp00 + dp30) < tmp), +- !p_is_pcm4 && ((dp04 + dp34) < tmp), cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_d, !p_is_pcm0 && ((dp00 + dp30) < tmp), ++ !p_is_pcm4 && ((dp04 + dp34) < tmp), cmp0, cmp1); + p_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); + p_is_pcm_vec = __lsx_vseqi_d(p_is_pcm_vec, 0); + +- LSX_DUP2_ARG1(__lsx_vreplgr2vr_h, (!q_is_pcm0) && (dq00 + dq30 < tmp), +- (!q_is_pcm4) && (dq04 + dq34 < tmp), cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_h, (!q_is_pcm0) && (dq00 + dq30 < tmp), ++ (!q_is_pcm4) && (dq04 + dq34 < tmp), cmp0, cmp1); + q_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); + q_is_pcm_vec = __lsx_vseqi_d(q_is_pcm_vec, 0); + tc_pos = __lsx_vsrai_h(tc_pos, 1); + tc_neg = __lsx_vneg_h(tc_pos); + +- LSX_DUP2_ARG2(__lsx_vavgr_hu, p2_src, p0_src, q0_src, q2_src, delta1, delta2); +- LSX_DUP2_ARG2(__lsx_vsub_h, delta1, p1_src, delta2, q1_src, delta1, delta2); ++ DUP2_ARG2(__lsx_vavgr_hu, p2_src, p0_src, q0_src, q2_src, delta1, delta2); ++ DUP2_ARG2(__lsx_vsub_h, delta1, p1_src, delta2, q1_src, delta1, delta2); + delta1 = __lsx_vadd_h(delta1, delta0); + delta2 = __lsx_vsub_h(delta2, delta0); +- LSX_DUP2_ARG2(__lsx_vsrai_h, delta1, 1, delta2, 1, delta1, delta2); +- LSX_DUP2_ARG3(__lsx_clip_h, delta1, tc_neg, tc_pos, delta2, tc_neg, tc_pos, +- delta1, delta2); +- LSX_DUP2_ARG2(__lsx_vadd_h, p1_src, delta1, q1_src, delta2, delta1, delta2); +- LSX_DUP2_ARG1(__lsx_clamp255_h, delta1, delta2, delta1, delta2); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, delta1, p1_src, p_is_pcm_vec, delta2, q1_src, +- q_is_pcm_vec, delta1, delta2); ++ DUP2_ARG2(__lsx_vsrai_h, delta1, 1, delta2, 1, delta1, delta2); ++ DUP2_ARG3(__lsx_vclip_h, delta1, tc_neg, tc_pos, delta2, tc_neg, tc_pos, ++ delta1, delta2); ++ DUP2_ARG2(__lsx_vadd_h, p1_src, delta1, q1_src, delta2, delta1, delta2); ++ DUP2_ARG1(__lsx_vclip255_h, delta1, delta2, delta1, delta2); ++ DUP2_ARG3(__lsx_vbitsel_v, delta1, p1_src, p_is_pcm_vec, delta2, q1_src, ++ q_is_pcm_vec, delta1, delta2); + + abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); +- LSX_DUP4_ARG3(__lsx_vbitsel_v, delta1, p1_src, abs_delta0, temp0, p0_src, +- abs_delta0, temp2, q0_src, abs_delta0, delta2, q1_src, +- abs_delta0, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vbitsel_v, delta1, p1_src, abs_delta0, temp0, p0_src, ++ abs_delta0, temp2, q0_src, abs_delta0, delta2, q1_src, ++ abs_delta0, dst0, dst1, dst2, dst3); + /* weak filter ends */ + + cmp3 = __lsx_vnor_v(cmp3, cmp3); +- LSX_DUP4_ARG3(__lsx_vbitsel_v, dst0, p1_src, cmp3, dst1, p0_src, cmp3, dst2, +- q0_src, cmp3, dst3, q1_src, cmp3, dst0, dst1, dst2, dst3); +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst2, dst0, dst3, dst1, dst0, dst1); ++ DUP4_ARG3(__lsx_vbitsel_v, dst0, p1_src, cmp3, dst1, p0_src, cmp3, dst2, ++ q0_src, cmp3, dst3, q1_src, cmp3, dst0, dst1, dst2, dst3); ++ DUP2_ARG2(__lsx_vpickev_b, dst2, dst0, dst3, dst1, dst0, dst1); + + /* transpose */ + dst4 = __lsx_vilvl_b(dst1, dst0); +@@ -657,60 +650,60 @@ static void hevc_loopfilter_luma_ver_lsx(uint8_t *src, int32_t stride, + tc_neg = __lsx_vneg_h(tc_pos); + + /* p part */ +- LSX_DUP2_ARG2(__lsx_vadd_h, p1_src, p0_src, temp0, q0_src, temp0, temp0); ++ DUP2_ARG2(__lsx_vadd_h, p1_src, p0_src, temp0, q0_src, temp0, temp0); + + temp1 = __lsx_vadd_h(p3_src, p2_src); + temp1 = __lsx_vslli_h(temp1, 1); +- LSX_DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, temp0, temp1, temp1); ++ DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, temp0, temp1, temp1); + temp1 = __lsx_vsrari_h(temp1, 3); + temp2 = __lsx_vsub_h(temp1, p2_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst0 = __lsx_vadd_h(temp2, p2_src); + + temp1 = __lsx_vadd_h(temp0, p2_src); + temp1 = __lsx_vsrari_h(temp1, 2); + temp2 = __lsx_vsub_h(temp1, p1_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst1 = __lsx_vadd_h(temp2, p1_src); + + temp1 = __lsx_vslli_h(temp0, 1); +- LSX_DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, q1_src, temp1, temp1); ++ DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, q1_src, temp1, temp1); + temp1 = __lsx_vsrari_h(temp1, 3); + temp2 = __lsx_vsub_h(temp1, p0_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst2 = __lsx_vadd_h(temp2, p0_src); + + p_is_pcm_vec = __lsx_vnor_v(p_is_pcm_vec, p_is_pcm_vec); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, dst0, p2_src, p_is_pcm_vec, dst1, p1_src, +- p_is_pcm_vec, dst0, dst1); ++ DUP2_ARG3(__lsx_vbitsel_v, dst0, p2_src, p_is_pcm_vec, dst1, p1_src, ++ p_is_pcm_vec, dst0, dst1); + dst2 = __lsx_vbitsel_v(dst2, p0_src, p_is_pcm_vec); + + /* q part */ +- LSX_DUP2_ARG2(__lsx_vadd_h, q1_src, p0_src, temp0, q0_src, temp0, temp0); ++ DUP2_ARG2(__lsx_vadd_h, q1_src, p0_src, temp0, q0_src, temp0, temp0); + temp1 = __lsx_vadd_h(q3_src, q2_src); + temp1 = __lsx_vslli_h(temp1, 1); +- LSX_DUP2_ARG2(__lsx_vadd_h, temp1, q2_src, temp1, temp0, temp1, temp1); ++ DUP2_ARG2(__lsx_vadd_h, temp1, q2_src, temp1, temp0, temp1, temp1); + temp1 = __lsx_vsrari_h(temp1, 3); + temp2 = __lsx_vsub_h(temp1, q2_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst5 = __lsx_vadd_h(temp2, q2_src); + + temp1 = __lsx_vadd_h(temp0, q2_src); + temp1 = __lsx_vsrari_h(temp1, 2); + temp2 = __lsx_vsub_h(temp1, q1_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst4 = __lsx_vadd_h(temp2, q1_src); + + temp1 = __lsx_vslli_h(temp0, 1); +- LSX_DUP2_ARG2(__lsx_vadd_h, temp1, p1_src, temp1, q2_src, temp1, temp1); ++ DUP2_ARG2(__lsx_vadd_h, temp1, p1_src, temp1, q2_src, temp1, temp1); + temp1 = __lsx_vsrari_h(temp1, 3); + temp2 = __lsx_vsub_h(temp1, q0_src); +- temp2 = __lsx_clip_h(temp2, tc_neg, tc_pos); ++ temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst3 = __lsx_vadd_h(temp2, q0_src); + + q_is_pcm_vec = __lsx_vnor_v(q_is_pcm_vec, q_is_pcm_vec); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, dst3, q0_src, q_is_pcm_vec, dst4, q1_src, +- q_is_pcm_vec, dst3, dst4); ++ DUP2_ARG3(__lsx_vbitsel_v, dst3, q0_src, q_is_pcm_vec, dst4, q1_src, ++ q_is_pcm_vec, dst3, dst4); + dst5 = __lsx_vbitsel_v(dst5, q2_src, q_is_pcm_vec); + /* strong filter ends */ + +@@ -718,9 +711,9 @@ static void hevc_loopfilter_luma_ver_lsx(uint8_t *src, int32_t stride, + tc_pos = __lsx_vsrai_h(tc_pos, 1); + tc_neg = __lsx_vneg_h(tc_pos); + +- LSX_DUP2_ARG2(__lsx_vsub_h, q0_src, p0_src, q1_src, p1_src, diff0, diff1); +- LSX_DUP2_ARG2(__lsx_vadd_h, __lsx_vslli_h(diff0, 3), diff0, __lsx_vslli_h( +- diff1, 1), diff1, diff0, diff1); ++ DUP2_ARG2(__lsx_vsub_h, q0_src, p0_src, q1_src, p1_src, diff0, diff1); ++ DUP2_ARG2(__lsx_vadd_h, __lsx_vslli_h(diff0, 3), diff0, __lsx_vslli_h( ++ diff1, 1), diff1, diff0, diff1); + delta0 = __lsx_vsub_h(diff0, diff1); + delta0 = __lsx_vsrari_h(delta0, 4); + +@@ -728,66 +721,65 @@ static void hevc_loopfilter_luma_ver_lsx(uint8_t *src, int32_t stride, + abs_delta0 = __lsx_vadda_h(delta0, zero); + abs_delta0 = __lsx_vsle_hu(temp1, abs_delta0); + abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); +- delta0 = __lsx_clip_h(delta0, tc_neg, tc_pos); ++ delta0 = __lsx_vclip_h(delta0, tc_neg, tc_pos); + temp2 = __lsx_vadd_h(delta0, p0_src); +- temp2 = __lsx_clamp255_h(temp2); ++ temp2 = __lsx_vclip255_h(temp2); + temp0 = __lsx_vbitsel_v(temp2, p0_src, p_is_pcm_vec); + temp2 = __lsx_vsub_h(q0_src, delta0); +- temp2 = __lsx_clamp255_h(temp2); ++ temp2 = __lsx_vclip255_h(temp2); + temp2 = __lsx_vbitsel_v(temp2, q0_src, q_is_pcm_vec); + + tmp = (beta + (beta >> 1)) >> 3; +- LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, !p_is_pcm0 && ((dp00 + dp30) < tmp), +- !p_is_pcm4 && ((dp04 + dp34) < tmp), cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_d, !p_is_pcm0 && ((dp00 + dp30) < tmp), ++ !p_is_pcm4 && ((dp04 + dp34) < tmp), cmp0, cmp1); + p_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); + p_is_pcm_vec = __lsx_vseqi_d(p_is_pcm_vec, 0); + +- LSX_DUP2_ARG1(__lsx_vreplgr2vr_h, (!q_is_pcm0) && (dq00 + dq30 < tmp), +- (!q_is_pcm4) && (dq04 + dq34 < tmp), cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_h, (!q_is_pcm0) && (dq00 + dq30 < tmp), ++ (!q_is_pcm4) && (dq04 + dq34 < tmp), cmp0, cmp1); + q_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); + q_is_pcm_vec = __lsx_vseqi_d(q_is_pcm_vec, 0); + tc_pos = __lsx_vsrai_h(tc_pos, 1); + tc_neg = __lsx_vneg_h(tc_pos); + +- LSX_DUP2_ARG2(__lsx_vavgr_hu, p2_src, p0_src, q0_src, q2_src, delta1, delta2); +- LSX_DUP2_ARG2(__lsx_vsub_h, delta1, p1_src, delta2, q1_src, delta1, delta2); ++ DUP2_ARG2(__lsx_vavgr_hu, p2_src, p0_src, q0_src, q2_src, delta1, delta2); ++ DUP2_ARG2(__lsx_vsub_h, delta1, p1_src, delta2, q1_src, delta1, delta2); + delta1 = __lsx_vadd_h(delta1, delta0); + delta2 = __lsx_vsub_h(delta2, delta0); +- LSX_DUP2_ARG2(__lsx_vsrai_h, delta1, 1, delta2, 1, delta1, delta2); +- LSX_DUP2_ARG3(__lsx_clip_h, delta1, tc_neg, tc_pos, delta2, tc_neg, tc_pos, +- delta1, delta2); +- LSX_DUP2_ARG2(__lsx_vadd_h, p1_src, delta1, q1_src, delta2, delta1, delta2); +- LSX_DUP2_ARG1(__lsx_clamp255_h, delta1, delta2, delta1, delta2); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, delta1, p1_src, p_is_pcm_vec, delta2, q1_src, +- q_is_pcm_vec, delta1, delta2); ++ DUP2_ARG2(__lsx_vsrai_h, delta1, 1, delta2, 1, delta1, delta2); ++ DUP2_ARG3(__lsx_vclip_h, delta1, tc_neg, tc_pos, delta2, tc_neg, tc_pos, ++ delta1, delta2); ++ DUP2_ARG2(__lsx_vadd_h, p1_src, delta1, q1_src, delta2, delta1, delta2); ++ DUP2_ARG1(__lsx_vclip255_h, delta1, delta2, delta1, delta2); ++ DUP2_ARG3(__lsx_vbitsel_v, delta1, p1_src, p_is_pcm_vec, delta2, q1_src, ++ q_is_pcm_vec, delta1, delta2); + + abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); +- LSX_DUP4_ARG3(__lsx_vbitsel_v, delta1, p1_src, abs_delta0, delta2, q1_src, +- abs_delta0, temp0, p0_src, abs_delta0, temp2, q0_src, +- abs_delta0, delta1, delta2, temp0, temp2); ++ DUP4_ARG3(__lsx_vbitsel_v, delta1, p1_src, abs_delta0, delta2, q1_src, ++ abs_delta0, temp0, p0_src, abs_delta0, temp2, q0_src, abs_delta0, ++ delta1, delta2, temp0, temp2); + /* weak filter ends*/ + + /* select between weak or strong */ +- LSX_DUP4_ARG3(__lsx_vbitsel_v, dst0, p2_src, cmp2, dst1, delta1, cmp2, dst2, +- temp0, cmp2, dst3, temp2, cmp2, dst0, dst1, dst2, dst3); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, dst4, delta2, cmp2, dst5, q2_src, cmp2, dst4, +- dst5); ++ DUP4_ARG3(__lsx_vbitsel_v, dst0, p2_src, cmp2, dst1, delta1, cmp2, dst2, ++ temp0, cmp2, dst3, temp2, cmp2, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vbitsel_v, dst4, delta2, cmp2, dst5, q2_src, cmp2, dst4, dst5); + } + + cmp3 = __lsx_vnor_v(cmp3, cmp3); +- LSX_DUP4_ARG3(__lsx_vbitsel_v, dst0, p2_src, cmp3, dst1, p1_src, cmp3, dst2, +- p0_src, cmp3, dst3, q0_src, cmp3, dst0, dst1, dst2, dst3); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, dst4, q1_src, cmp3, dst5, q2_src, cmp3, dst4, dst5); ++ DUP4_ARG3(__lsx_vbitsel_v, dst0, p2_src, cmp3, dst1, p1_src, cmp3, dst2, ++ p0_src, cmp3, dst3, q0_src, cmp3, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vbitsel_v, dst4, q1_src, cmp3, dst5, q2_src, cmp3, dst4, dst5); + + /* pack results to 8 bit */ +- LSX_DUP4_ARG2(__lsx_vpickev_b, dst2, dst0, dst3, dst1, dst4, dst4, dst5, dst5, +- dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vpickev_b, dst2, dst0, dst3, dst1, dst4, dst4, dst5, dst5, ++ dst0, dst1, dst2, dst3); + + /* transpose */ +- LSX_DUP2_ARG2(__lsx_vilvl_b, dst1, dst0, dst3, dst2, dst4, dst6); +- LSX_DUP2_ARG2(__lsx_vilvh_b, dst1, dst0, dst3, dst2, dst5, dst7); +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst7, dst6, dst0, dst2); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst7, dst6, dst1, dst3); ++ DUP2_ARG2(__lsx_vilvl_b, dst1, dst0, dst3, dst2, dst4, dst6); ++ DUP2_ARG2(__lsx_vilvh_b, dst1, dst0, dst3, dst2, dst5, dst7); ++ DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst7, dst6, dst0, dst2); ++ DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst7, dst6, dst1, dst3); + + src += 1; + __lsx_vstelm_w(dst0, src, 0, 0); +@@ -834,39 +826,36 @@ static void hevc_loopfilter_chroma_hor_lsx(uint8_t *src, int32_t stride, + __m128i temp0, temp1, delta; + + if (!(tc[0] <= 0) || !(tc[1] <= 0)) { +- LSX_DUP2_ARG1(__lsx_vreplgr2vr_h, tc[0], tc[1], cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_h, tc[0], tc[1], cmp0, cmp1); + tc_pos = __lsx_vpackev_d(cmp1, cmp0); + tc_neg = __lsx_vneg_h(tc_pos); +- LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, p_is_pcm[0], p_is_pcm[1], cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_d, p_is_pcm[0], p_is_pcm[1], cmp0, cmp1); + p_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); + p_is_pcm_vec = __lsx_vseqi_d(p_is_pcm_vec, 0); + +- LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, q_is_pcm[0], q_is_pcm[1], cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_d, q_is_pcm[0], q_is_pcm[1], cmp0, cmp1); + q_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); + q_is_pcm_vec = __lsx_vseqi_d(q_is_pcm_vec, 0); + +- LSX_DUP4_ARG2(__lsx_vld, p1_ptr, 0, p0_ptr, 0, q0_ptr, 0, q1_ptr, 0, p1, +- p0, q0, q1); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p1, zero, p0, zero, q0, zero, q1, p1, +- p0, q0, q1); +- LSX_DUP2_ARG2(__lsx_vsub_h, q0, p0, p1, q1, temp0, temp1); ++ DUP4_ARG2(__lsx_vld, p1_ptr, 0, p0_ptr, 0, q0_ptr, 0, q1_ptr, 0, p1, p0, q0, q1); ++ DUP4_ARG2(__lsx_vilvl_b, zero, p1, zero, p0, zero, q0, zero, q1, p1, p0, q0, q1); ++ DUP2_ARG2(__lsx_vsub_h, q0, p0, p1, q1, temp0, temp1); + temp0 = __lsx_vslli_h(temp0, 2); + temp0 = __lsx_vadd_h(temp0, temp1); + delta = __lsx_vsrari_h(temp0, 3); +- delta = __lsx_clip_h(delta, tc_neg, tc_pos); ++ delta = __lsx_vclip_h(delta, tc_neg, tc_pos); + temp0 = __lsx_vadd_h(p0, delta); +- temp0 = __lsx_clamp255_h(temp0); ++ temp0 = __lsx_vclip255_h(temp0); + p_is_pcm_vec = __lsx_vnor_v(p_is_pcm_vec, p_is_pcm_vec); + temp0 = __lsx_vbitsel_v(temp0, p0, p_is_pcm_vec); + + temp1 = __lsx_vsub_h(q0, delta); +- temp1 = __lsx_clamp255_h(temp1); ++ temp1 = __lsx_vclip255_h(temp1); + q_is_pcm_vec = __lsx_vnor_v(q_is_pcm_vec, q_is_pcm_vec); + temp1 = __lsx_vbitsel_v(temp1, q0, q_is_pcm_vec); + + tc_pos = __lsx_vslei_d(tc_pos, 0); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, temp0, p0, tc_pos, temp1, q0, tc_pos, +- temp0, temp1); ++ DUP2_ARG3(__lsx_vbitsel_v, temp0, p0, tc_pos, temp1, q0, tc_pos, temp0, temp1); + temp0 = __lsx_vpickev_b(temp1, temp0); + __lsx_vstelm_d(temp0, p0_ptr, 0, 0); + __lsx_vstelm_d(temp0, p0_ptr + stride, 0, 1); +@@ -888,46 +877,44 @@ static void hevc_loopfilter_chroma_ver_lsx(uint8_t *src, int32_t stride, + __m128i temp0, temp1, delta; + + if (!(tc[0] <= 0) || !(tc[1] <= 0)) { +- LSX_DUP2_ARG1(__lsx_vreplgr2vr_h, tc[0], tc[1], cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_h, tc[0], tc[1], cmp0, cmp1); + tc_pos = __lsx_vpackev_d(cmp1, cmp0); + tc_neg = __lsx_vneg_h(tc_pos); + +- LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, p_is_pcm[0], p_is_pcm[1], cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_d, p_is_pcm[0], p_is_pcm[1], cmp0, cmp1); + p_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); + p_is_pcm_vec = __lsx_vseqi_d(p_is_pcm_vec, 0); +- LSX_DUP2_ARG1(__lsx_vreplgr2vr_d, q_is_pcm[0], q_is_pcm[1], cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_d, q_is_pcm[0], q_is_pcm[1], cmp0, cmp1); + q_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); + q_is_pcm_vec = __lsx_vseqi_d(q_is_pcm_vec, 0); + + src -= 2; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + stride, 0, src + stride_2x, 0, +- src + stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + stride, 0, src + stride_2x, 0, ++ src + stride_3x, 0, src0, src1, src2, src3); + src += stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + stride, 0, src + stride_2x, 0, +- src + stride_3x, 0, src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vld, src, 0, src + stride, 0, src + stride_2x, 0, ++ src + stride_3x, 0, src4, src5, src6, src7); + src -= stride_4x; +- TRANSPOSE8x4_B(src0, src1, src2, src3, src4, src5, src6, src7, +- p1, p0, q0, q1); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p1, zero, p0, zero, q0, zero, q1, p1, p0, +- q0, q1); ++ LSX_TRANSPOSE8x4_B(src0, src1, src2, src3, src4, src5, src6, src7, ++ p1, p0, q0, q1); ++ DUP4_ARG2(__lsx_vilvl_b, zero, p1, zero, p0, zero, q0, zero, q1, p1, p0, q0, q1); + +- LSX_DUP2_ARG2(__lsx_vsub_h, q0, p0, p1, q1, temp0, temp1); ++ DUP2_ARG2(__lsx_vsub_h, q0, p0, p1, q1, temp0, temp1); + temp0 = __lsx_vslli_h(temp0, 2); + temp0 = __lsx_vadd_h(temp0, temp1); + delta = __lsx_vsrari_h(temp0, 3); +- delta = __lsx_clip_h(delta, tc_neg, tc_pos); ++ delta = __lsx_vclip_h(delta, tc_neg, tc_pos); + + temp0 = __lsx_vadd_h(p0, delta); + temp1 = __lsx_vsub_h(q0, delta); +- LSX_DUP2_ARG1(__lsx_clamp255_h, temp0, temp1, temp0, temp1); +- LSX_DUP2_ARG2(__lsx_vnor_v, p_is_pcm_vec, p_is_pcm_vec, q_is_pcm_vec, +- q_is_pcm_vec, p_is_pcm_vec, q_is_pcm_vec); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, temp0, p0, p_is_pcm_vec, temp1, q0, +- q_is_pcm_vec, temp0, temp1); ++ DUP2_ARG1(__lsx_vclip255_h, temp0, temp1, temp0, temp1); ++ DUP2_ARG2(__lsx_vnor_v, p_is_pcm_vec, p_is_pcm_vec, q_is_pcm_vec, q_is_pcm_vec, ++ p_is_pcm_vec, q_is_pcm_vec); ++ DUP2_ARG3(__lsx_vbitsel_v, temp0, p0, p_is_pcm_vec, temp1, q0, q_is_pcm_vec, ++ temp0, temp1); + + tc_pos = __lsx_vslei_d(tc_pos, 0); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, temp0, p0, tc_pos, temp1, q0, tc_pos, +- temp0, temp1); ++ DUP2_ARG3(__lsx_vbitsel_v, temp0, p0, tc_pos, temp1, q0, tc_pos, temp0, temp1); + temp0 = __lsx_vpackev_b(temp1, temp0); + + src += 1; +@@ -966,7 +953,7 @@ static void hevc_sao_edge_filter_0degree_4width_lsx(uint8_t *dst, + src -= 1; + + /* load in advance */ +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src_minus10, src_minus11); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src_minus10, src_minus11); + + for (height -= 2; height; height -= 2) { + src += src_stride_2x; +@@ -974,24 +961,24 @@ static void hevc_sao_edge_filter_0degree_4width_lsx(uint8_t *dst, + src0 = __lsx_vshuf_b(zero, src_minus10, shuf1); + src_plus10 = __lsx_vshuf_b(zero, src_minus10, shuf2); + +- LSX_DUP2_ARG2(__lsx_vseq_b, src0, src_minus10, src0, src_plus10, cmp_minus10, +- cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- LSX_DUP2_ARG2(__lsx_vsle_bu, src0, src_minus10, src0, src_plus10, cmp_minus10, +- cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vseq_b, src0, src_minus10, src0, src_plus10, cmp_minus10, ++ cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src0, src_minus10, src0, src_plus10, cmp_minus10, ++ cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); + + offset = __lsx_vadd_b(diff_minus10, diff_minus11); + offset = __lsx_vaddi_bu(offset, 2); + + /* load in advance */ +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src_minus10, src_minus11); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src_minus10, src_minus11); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); + src0 = __lsx_vxori_b(src0, 128); + dst0 = __lsx_vsadd_b(src0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -1005,21 +992,21 @@ static void hevc_sao_edge_filter_0degree_4width_lsx(uint8_t *dst, + src0 = __lsx_vshuf_b(zero, src_minus10, shuf1); + src_plus10 = __lsx_vshuf_b(zero, src_minus10, shuf2); + +- LSX_DUP2_ARG2(__lsx_vseq_b, src0, src_minus10, src0, src_plus10, cmp_minus10, +- cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- LSX_DUP2_ARG2(__lsx_vsle_bu, src0, src_minus10, src0, src_plus10, cmp_minus10, +- cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vseq_b, src0, src_minus10, src0, src_plus10, cmp_minus10, ++ cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src0, src_minus10, src0, src_plus10, cmp_minus10, ++ cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); + + offset = __lsx_vadd_b(diff_minus10, diff_minus11); + offset = __lsx_vaddi_bu(offset, 2); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); + src0 = __lsx_vxori_b(src0, 128); + dst0 = __lsx_vsadd_b(src0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -1050,36 +1037,36 @@ static void hevc_sao_edge_filter_0degree_8width_lsx(uint8_t *dst, + src -= 1; + + /* load in advance */ +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src_minus10, src_minus11); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src_minus10, src_minus11); + + for (height -= 2; height; height -= 2) { + src += src_stride_2x; +- LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf1, zeros, src_minus11, +- shuf1, src0, src1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, +- shuf2, src_plus10, src_plus11); +- LSX_DUP2_ARG2(__lsx_vpickev_d, src_minus11, src_minus10, src_plus11, src_plus10, +- src_minus10, src_plus10); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf1, zeros, src_minus11, shuf1, ++ src0, src1); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, shuf2, ++ src_plus10, src_plus11); ++ DUP2_ARG2(__lsx_vpickev_d, src_minus11, src_minus10, src_plus11, src_plus10, ++ src_minus10, src_plus10); + src0 = __lsx_vpickev_d(src1, src0); + +- LSX_DUP2_ARG2(__lsx_vseq_b, src0, src_minus10, src0, src_plus10, cmp_minus10, +- cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- LSX_DUP2_ARG2(__lsx_vsle_bu, src0, src_minus10, src0, src_plus10, cmp_minus10, +- cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vseq_b, src0, src_minus10, src0, src_plus10, cmp_minus10, ++ cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src0, src_minus10, src0, src_plus10, cmp_minus10, ++ cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); + + offset = __lsx_vadd_b(diff_minus10, diff_minus11); + offset = __lsx_vaddi_bu(offset, 2); + + /* load in advance */ +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src_minus10, src_minus11); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src_minus10, src_minus11); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); + src0 = __lsx_vxori_b(src0, 128); + dst0 = __lsx_vsadd_b(src0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -1089,29 +1076,29 @@ static void hevc_sao_edge_filter_0degree_8width_lsx(uint8_t *dst, + dst += dst_stride_2x; + } + +- LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf1, zeros, src_minus11, shuf1, +- src0, src1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, shuf2, +- src_plus10, src_plus11); +- LSX_DUP2_ARG2(__lsx_vpickev_d, src_minus11, src_minus10, src_plus11, src_plus10, +- src_minus10, src_plus10); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf1, zeros, src_minus11, shuf1, ++ src0, src1); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, shuf2, ++ src_plus10, src_plus11); ++ DUP2_ARG2(__lsx_vpickev_d, src_minus11, src_minus10, src_plus11, src_plus10, ++ src_minus10, src_plus10); + src0 = __lsx_vpickev_d(src1, src0); + +- LSX_DUP2_ARG2(__lsx_vseq_b, src0, src_minus10, src0, src_plus10, cmp_minus10, +- cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- LSX_DUP2_ARG2(__lsx_vsle_bu, src0, src_minus10, src0, src_plus10, cmp_minus10, +- cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vseq_b, src0, src_minus10, src0, src_plus10, cmp_minus10, ++ cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src0, src_minus10, src0, src_plus10, cmp_minus10, ++ cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); + + offset = __lsx_vadd_b(diff_minus10, diff_minus11); + offset = __lsx_vaddi_bu(offset, 2); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); + src0 = __lsx_vxori_b(src0, 128); + dst0 = __lsx_vsadd_b(src0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -1157,79 +1144,78 @@ static void hevc_sao_edge_filter_0degree_16multiple_lsx(uint8_t *dst, + + for (; height; height -= 4) { + src_minus1 = src - 1; +- LSX_DUP4_ARG2(__lsx_vld, src_minus1, 0, src_minus1 + src_stride, 0, +- src_minus1 + src_stride_2x, 0, src_minus1 + src_stride_3x, 0, +- src_minus10, src_minus11, src_minus12, src_minus13); ++ DUP4_ARG2(__lsx_vld, src_minus1, 0, src_minus1 + src_stride, 0, ++ src_minus1 + src_stride_2x, 0, src_minus1 + src_stride_3x, 0, ++ src_minus10, src_minus11, src_minus12, src_minus13); + + for (v_cnt = 0; v_cnt < width; v_cnt += 16) { + src_minus1 += 16; + dst_ptr = dst + v_cnt; +- LSX_DUP4_ARG2(__lsx_vld, src_minus1, 0, src_minus1 + src_stride, 0, +- src_minus1 + src_stride_2x, 0, src_minus1 + src_stride_3x, 0, +- src10, src11, src12, src13); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src10, src_minus10, shuf1, src11, src_minus11, +- shuf1, src12, src_minus12, shuf1, src13, src_minus13, shuf1, +- src_zero0, src_zero1, src_zero2, src_zero3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src10, src_minus10, shuf2, src11, src_minus11, +- shuf2, src12, src_minus12, shuf2, src13, src_minus13, shuf2, +- src_plus10, src_plus11, src_plus12, src_plus13); +- +- LSX_DUP4_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero0, src_plus10, +- src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, +- cmp_plus10, cmp_minus11, cmp_plus11); +- LSX_DUP4_ARG2(__lsx_vseq_b, src_zero2, src_minus12, src_zero2, src_plus12, +- src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, +- cmp_plus12, cmp_minus13, cmp_plus13); +- LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, +- cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, diff_minus10, +- diff_plus10, diff_minus11, diff_plus11); +- LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, +- cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, diff_minus12, +- diff_plus12, diff_minus13, diff_plus13); +- LSX_DUP4_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero0, src_plus10, +- src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, +- cmp_plus10, cmp_minus11, cmp_plus11); +- LSX_DUP4_ARG2(__lsx_vsle_bu, src_zero2, src_minus12, src_zero2, src_plus12, +- src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, +- cmp_plus12, cmp_minus13, cmp_plus13); +- LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, +- cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, cmp_minus10, +- cmp_plus10, cmp_minus11, cmp_plus11); +- LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, +- cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, cmp_minus12, +- cmp_plus12, cmp_minus13, cmp_plus13); +- LSX_DUP4_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, +- diff_plus10, const1, cmp_plus10, diff_minus11, const1, +- cmp_minus11, diff_plus11, const1, cmp_plus11, diff_minus10, +- diff_plus10, diff_minus11, diff_plus11); +- LSX_DUP4_ARG3(__lsx_vbitsel_v, diff_minus12, const1, cmp_minus12, +- diff_plus12, const1, cmp_plus12, diff_minus13, const1, +- cmp_minus13, diff_plus13, const1, cmp_plus13, diff_minus12, +- diff_plus12, diff_minus13, diff_plus13); +- +- LSX_DUP4_ARG2(__lsx_vadd_b, diff_minus10, diff_plus10, diff_minus11, +- diff_plus11, diff_minus12, diff_plus12, diff_minus13, +- diff_plus13, offset_mask0, offset_mask1, offset_mask2, +- offset_mask3); +- LSX_DUP4_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, offset_mask2, +- 2, offset_mask3, 2, offset_mask0, offset_mask1, offset_mask2, +- offset_mask3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask0, sao_offset, +- sao_offset, offset_mask0, offset_mask0, offset_mask0); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask1, sao_offset, +- sao_offset, offset_mask1, offset_mask1, offset_mask1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask2, sao_offset, +- sao_offset, offset_mask2, offset_mask2, offset_mask2); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask3, sao_offset, +- sao_offset, offset_mask3, offset_mask3, offset_mask3); +- +- LSX_DUP4_ARG2(__lsx_vxori_b, src_zero0, 128, src_zero1, 128, src_zero2, 128, +- src_zero3, 128, src_zero0, src_zero1, src_zero2, src_zero3); +- LSX_DUP4_ARG2(__lsx_vsadd_b, src_zero0, offset_mask0, src_zero1, +- offset_mask1, src_zero2, offset_mask2, src_zero3, offset_mask3, +- dst0, dst1, dst2, dst3); +- LSX_DUP4_ARG2(__lsx_vxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, 128, +- dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vld, src_minus1, 0, src_minus1 + src_stride, 0, ++ src_minus1 + src_stride_2x, 0, src_minus1 + src_stride_3x, 0, ++ src10, src11, src12, src13); ++ DUP4_ARG3(__lsx_vshuf_b, src10, src_minus10, shuf1, src11, src_minus11, ++ shuf1, src12, src_minus12, shuf1, src13, src_minus13, shuf1, ++ src_zero0, src_zero1, src_zero2, src_zero3); ++ DUP4_ARG3(__lsx_vshuf_b, src10, src_minus10, shuf2, src11, src_minus11, ++ shuf2, src12, src_minus12, shuf2, src13, src_minus13, shuf2, ++ src_plus10, src_plus11, src_plus12, src_plus13); ++ ++ DUP4_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero0, src_plus10, ++ src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, ++ cmp_plus10, cmp_minus11, cmp_plus11); ++ DUP4_ARG2(__lsx_vseq_b, src_zero2, src_minus12, src_zero2, src_plus12, ++ src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, ++ cmp_plus12, cmp_minus13, cmp_plus13); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, ++ cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, diff_minus10, ++ diff_plus10, diff_minus11, diff_plus11); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, ++ cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, diff_minus12, ++ diff_plus12, diff_minus13, diff_plus13); ++ DUP4_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero0, src_plus10, ++ src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, ++ cmp_plus10, cmp_minus11, cmp_plus11); ++ DUP4_ARG2(__lsx_vsle_bu, src_zero2, src_minus12, src_zero2, src_plus12, ++ src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, ++ cmp_plus12, cmp_minus13, cmp_plus13); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, ++ cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, cmp_minus10, ++ cmp_plus10, cmp_minus11, cmp_plus11); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, ++ cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, cmp_minus12, ++ cmp_plus12, cmp_minus13, cmp_plus13); ++ DUP4_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, ++ diff_plus10, const1, cmp_plus10, diff_minus11, const1, ++ cmp_minus11, diff_plus11, const1, cmp_plus11, diff_minus10, ++ diff_plus10, diff_minus11, diff_plus11); ++ DUP4_ARG3(__lsx_vbitsel_v, diff_minus12, const1, cmp_minus12, ++ diff_plus12, const1, cmp_plus12, diff_minus13, const1, ++ cmp_minus13, diff_plus13, const1, cmp_plus13, diff_minus12, ++ diff_plus12, diff_minus13, diff_plus13); ++ ++ DUP4_ARG2(__lsx_vadd_b, diff_minus10, diff_plus10, diff_minus11, diff_plus11, ++ diff_minus12, diff_plus12, diff_minus13, diff_plus13, offset_mask0, ++ offset_mask1, offset_mask2, offset_mask3); ++ DUP4_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, offset_mask2, ++ 2, offset_mask3, 2, offset_mask0, offset_mask1, offset_mask2, ++ offset_mask3); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask0, sao_offset, ++ sao_offset, offset_mask0, offset_mask0, offset_mask0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask1, sao_offset, ++ sao_offset, offset_mask1, offset_mask1, offset_mask1); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask2, sao_offset, ++ sao_offset, offset_mask2, offset_mask2, offset_mask2); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask3, sao_offset, ++ sao_offset, offset_mask3, offset_mask3, offset_mask3); ++ ++ DUP4_ARG2(__lsx_vxori_b, src_zero0, 128, src_zero1, 128, src_zero2, 128, ++ src_zero3, 128, src_zero0, src_zero1, src_zero2, src_zero3); ++ DUP4_ARG2(__lsx_vsadd_b, src_zero0, offset_mask0, src_zero1, ++ offset_mask1, src_zero2, offset_mask2, src_zero3, offset_mask3, ++ dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, 128, ++ dst0, dst1, dst2, dst3); + + src_minus10 = src10; + src_minus11 = src11; +@@ -1268,33 +1254,33 @@ static void hevc_sao_edge_filter_90degree_4width_lsx(uint8_t *dst, + sao_offset = __lsx_vpickev_b(sao_offset, sao_offset); + + /* load in advance */ +- LSX_DUP4_ARG2(__lsx_vld, src - src_stride, 0, src, 0, src + src_stride, 0, +- src + src_stride_2x, 0, src_minus10, src_minus11, src10, src11); ++ DUP4_ARG2(__lsx_vld, src - src_stride, 0, src, 0, src + src_stride, 0, ++ src + src_stride_2x, 0, src_minus10, src_minus11, src10, src11); + + for (height -= 2; height; height -= 2) { + src += src_stride_2x; +- LSX_DUP4_ARG2(__lsx_vilvl_b, src10, src_minus10, src_minus11, src_minus11, +- src11, src_minus11, src10, src10, src_minus10, src_zero0, +- src_minus11, src_zero1); +- LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); +- +- LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, +- diff_minus11, offset_mask0, offset_mask1); +- LSX_DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, +- offset_mask1); +- LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP4_ARG2(__lsx_vilvl_b, src10, src_minus10, src_minus11, src_minus11, ++ src11, src_minus11, src10, src10, src_minus10, src_zero0, ++ src_minus11, src_zero1); ++ DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, ++ offset_mask1); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); + + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); +@@ -1303,36 +1289,33 @@ static void hevc_sao_edge_filter_90degree_4width_lsx(uint8_t *dst, + src_minus11 = src11; + + /* load in advance */ +- LSX_DUP2_ARG2(__lsx_vld, src + src_stride, 0, src + src_stride_2x, 0, +- src10, src11); ++ DUP2_ARG2(__lsx_vld, src + src_stride, 0, src + src_stride_2x, 0, src10, src11); + + __lsx_vstelm_w(dst0, dst, 0, 0); + __lsx_vstelm_w(dst0, dst + dst_stride, 0, 2); + dst += dst_stride_2x; + } + +- LSX_DUP4_ARG2(__lsx_vilvl_b, src10, src_minus10, src_minus11, src_minus11, src11, +- src_minus11, src10, src10, src_minus10, src_zero0, src_minus11, +- src_zero1); +- LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); +- +- LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, +- diff_minus11, offset_mask0, offset_mask1); +- LSX_DUP2_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, offset_mask0, +- offset_mask1); +- LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP4_ARG2(__lsx_vilvl_b, src10, src_minus10, src_minus11, src_minus11, src11, ++ src_minus11, src10, src10, src_minus10, src_zero0, src_minus11, src_zero1); ++ DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ DUP2_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, offset_mask0, offset_mask1); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -1361,33 +1344,33 @@ static void hevc_sao_edge_filter_90degree_8width_lsx(uint8_t *dst, + sao_offset = __lsx_vpickev_b(sao_offset, sao_offset); + + /* load in advance */ +- LSX_DUP2_ARG2(__lsx_vld, src - src_stride, 0, src, 0, src_minus10, src_minus11); +- LSX_DUP2_ARG2(__lsx_vld, src + src_stride, 0, src + src_stride_2x, 0, src10, src11); ++ DUP2_ARG2(__lsx_vld, src - src_stride, 0, src, 0, src_minus10, src_minus11); ++ DUP2_ARG2(__lsx_vld, src + src_stride, 0, src + src_stride_2x, 0, src10, src11); + + for (height -= 2; height; height -= 2) { + src += src_stride_2x; +- LSX_DUP4_ARG2(__lsx_vilvl_b, src10, src_minus10, src_minus11, src_minus11, src11, +- src_minus11, src10, src10, src_minus10, src_zero0, src_minus11, +- src_zero1); +- LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); +- +- LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, +- diff_minus11, offset_mask0, offset_mask1); +- LSX_DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, +- offset_mask1); +- LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP4_ARG2(__lsx_vilvl_b, src10, src_minus10, src_minus11, src_minus11, src11, ++ src_minus11, src10, src10, src_minus10, src_zero0, src_minus11, ++ src_zero1); ++ DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, ++ offset_mask1); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); + + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); +@@ -1396,36 +1379,33 @@ static void hevc_sao_edge_filter_90degree_8width_lsx(uint8_t *dst, + src_minus11 = src11; + + /* load in advance */ +- LSX_DUP2_ARG2(__lsx_vld, src + src_stride, 0, src + src_stride_2x, 0, +- src10, src11); ++ DUP2_ARG2(__lsx_vld, src + src_stride, 0, src + src_stride_2x, 0, src10, src11); + + __lsx_vstelm_d(dst0, dst, 0, 0); + __lsx_vstelm_d(dst0, dst + dst_stride, 0, 1); + dst += dst_stride_2x; + } + +- LSX_DUP4_ARG2(__lsx_vilvl_b, src10, src_minus10, src_minus11, src_minus11, src11, +- src_minus11, src10, src10, src_minus10, src_zero0, src_minus11, +- src_zero1); +- LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); +- +- LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, +- diff_minus11, offset_mask0, offset_mask1); +- LSX_DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, +- offset_mask1); +- LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP4_ARG2(__lsx_vilvl_b, src10, src_minus10, src_minus11, src_minus11, src11, ++ src_minus11, src10, src10, src_minus10, src_zero0, src_minus11, src_zero1); ++ DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, diff_minus11, ++ offset_mask0, offset_mask1); ++ DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, offset_mask1); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -1469,68 +1449,67 @@ static void hevc_sao_edge_filter_90degree_16multiple_lsx(uint8_t *dst, + src = src_orig + v_cnt; + dst = dst_orig + v_cnt; + +- LSX_DUP2_ARG2(__lsx_vld, src - src_stride, 0, src, 0, src_minus10, src_minus11); ++ DUP2_ARG2(__lsx_vld, src - src_stride, 0, src, 0, src_minus10, src_minus11); + + for (h_cnt = (height >> 2); h_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src + src_stride_4x, 0, +- src10, src11, src12, src13); +- +- LSX_DUP4_ARG2(__lsx_vseq_b, src_minus11, src_minus10, src_minus11, src10, +- src10, src_minus11, src10, src11, cmp_minus10, cmp_plus10, +- cmp_minus11, cmp_plus11); +- LSX_DUP4_ARG2(__lsx_vseq_b, src11, src10, src11, src12, src12, src11, src12, +- src13, cmp_minus12, cmp_plus12, cmp_minus13, cmp_plus13); +- LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, +- cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, diff_minus10, +- diff_plus10, diff_minus11, diff_plus11); +- LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, +- cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, diff_minus12, +- diff_plus12, diff_minus13, diff_plus13); +- LSX_DUP4_ARG2(__lsx_vsle_bu, src_minus11, src_minus10, src_minus11, src10, +- src10, src_minus11, src10, src11, cmp_minus10, cmp_plus10, +- cmp_minus11, cmp_plus11); +- LSX_DUP4_ARG2(__lsx_vsle_bu, src11, src10, src11, src12, src12, src11, src12, +- src13, cmp_minus12, cmp_plus12, cmp_minus13, cmp_plus13); +- LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, +- cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, cmp_minus10, +- cmp_plus10, cmp_minus11, cmp_plus11); +- LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, +- cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, cmp_minus12, +- cmp_plus12, cmp_minus13, cmp_plus13); +- LSX_DUP4_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, +- diff_plus10, const1, cmp_plus10, diff_minus11, const1, +- cmp_minus11, diff_plus11, const1, cmp_plus11, diff_minus10, +- diff_plus10, diff_minus11, diff_plus11); +- LSX_DUP4_ARG3(__lsx_vbitsel_v, diff_minus12, const1, cmp_minus12, +- diff_plus12, const1, cmp_plus12, diff_minus13, const1, +- cmp_minus13, diff_plus13, const1, cmp_plus13, diff_minus12, +- diff_plus12, diff_minus13, diff_plus13); +- +- LSX_DUP4_ARG2(__lsx_vadd_b, diff_minus10, diff_plus10, diff_minus11, +- diff_plus11, diff_minus12, diff_plus12, diff_minus13, +- diff_plus13, offset_mask0, offset_mask1, offset_mask2, +- offset_mask3); +- LSX_DUP4_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, offset_mask2, +- 2, offset_mask3, 2, offset_mask0, offset_mask1, offset_mask2, +- offset_mask3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask0, sao_offset, +- sao_offset, offset_mask0, offset_mask0, offset_mask0); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask1, sao_offset, +- sao_offset, offset_mask1, offset_mask1, offset_mask1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask2, sao_offset, +- sao_offset, offset_mask2, offset_mask2, offset_mask2); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask3, sao_offset, +- sao_offset, offset_mask3, offset_mask3, offset_mask3); ++ DUP4_ARG2(__lsx_vld, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src + src_stride_4x, 0, ++ src10, src11, src12, src13); ++ ++ DUP4_ARG2(__lsx_vseq_b, src_minus11, src_minus10, src_minus11, src10, ++ src10, src_minus11, src10, src11, cmp_minus10, cmp_plus10, ++ cmp_minus11, cmp_plus11); ++ DUP4_ARG2(__lsx_vseq_b, src11, src10, src11, src12, src12, src11, src12, ++ src13, cmp_minus12, cmp_plus12, cmp_minus13, cmp_plus13); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, ++ cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, diff_minus10, ++ diff_plus10, diff_minus11, diff_plus11); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, ++ cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, diff_minus12, ++ diff_plus12, diff_minus13, diff_plus13); ++ DUP4_ARG2(__lsx_vsle_bu, src_minus11, src_minus10, src_minus11, src10, ++ src10, src_minus11, src10, src11, cmp_minus10, cmp_plus10, ++ cmp_minus11, cmp_plus11); ++ DUP4_ARG2(__lsx_vsle_bu, src11, src10, src11, src12, src12, src11, src12, ++ src13, cmp_minus12, cmp_plus12, cmp_minus13, cmp_plus13); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, ++ cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, cmp_minus10, ++ cmp_plus10, cmp_minus11, cmp_plus11); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, ++ cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, cmp_minus12, ++ cmp_plus12, cmp_minus13, cmp_plus13); ++ DUP4_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, ++ diff_plus10, const1, cmp_plus10, diff_minus11, const1, ++ cmp_minus11, diff_plus11, const1, cmp_plus11, diff_minus10, ++ diff_plus10, diff_minus11, diff_plus11); ++ DUP4_ARG3(__lsx_vbitsel_v, diff_minus12, const1, cmp_minus12, ++ diff_plus12, const1, cmp_plus12, diff_minus13, const1, ++ cmp_minus13, diff_plus13, const1, cmp_plus13, diff_minus12, ++ diff_plus12, diff_minus13, diff_plus13); ++ ++ DUP4_ARG2(__lsx_vadd_b, diff_minus10, diff_plus10, diff_minus11, ++ diff_plus11, diff_minus12, diff_plus12, diff_minus13, ++ diff_plus13, offset_mask0, offset_mask1, offset_mask2, ++ offset_mask3); ++ DUP4_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, offset_mask2, ++ 2, offset_mask3, 2, offset_mask0, offset_mask1, offset_mask2, ++ offset_mask3); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask0, sao_offset, ++ sao_offset, offset_mask0, offset_mask0, offset_mask0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask1, sao_offset, ++ sao_offset, offset_mask1, offset_mask1, offset_mask1); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask2, sao_offset, ++ sao_offset, offset_mask2, offset_mask2, offset_mask2); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask3, sao_offset, ++ sao_offset, offset_mask3, offset_mask3, offset_mask3); + + src_minus10 = src12; +- LSX_DUP4_ARG2(__lsx_vxori_b, src_minus11, 128, src10, 128, src11, 128, +- src12, 128, src_minus11, src10, src11, src12); +- LSX_DUP4_ARG2(__lsx_vsadd_b, src_minus11, offset_mask0, src10, offset_mask1, +- src11, offset_mask2, src12, offset_mask3, dst0, dst1, dst2, +- dst3); +- LSX_DUP4_ARG2(__lsx_vxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, 128, +- dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vxori_b, src_minus11, 128, src10, 128, src11, 128, ++ src12, 128, src_minus11, src10, src11, src12); ++ DUP4_ARG2(__lsx_vsadd_b, src_minus11, offset_mask0, src10, offset_mask1, ++ src11, offset_mask2, src12, offset_mask3, dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, 128, ++ dst0, dst1, dst2, dst3); + src_minus11 = src13; + + __lsx_vst(dst0, dst, 0); +@@ -1568,42 +1547,41 @@ static void hevc_sao_edge_filter_45degree_4width_lsx(uint8_t *dst, + src_orig = src - 1; + + /* load in advance */ +- LSX_DUP2_ARG2(__lsx_vld, src_orig - src_stride, 0, src_orig, 0, src_minus10, +- src_minus11); +- LSX_DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, +- src10, src11); ++ DUP2_ARG2(__lsx_vld, src_orig - src_stride, 0, src_orig, 0, src_minus10, src_minus11); ++ DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ src10, src11); + + for (height -= 2; height; height -= 2) { + src_orig += src_stride_2x; + +- LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, +- src_zero0, src_zero1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src10, shuf2, zeros, src11, shuf2, +- src_plus0, src_plus1); +- +- LSX_DUP2_ARG2(__lsx_vilvl_b, src_plus0, src_minus10, src_plus1, src_minus11, +- src_minus10, src_minus11); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, +- src_zero0, src_zero1); +- LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); +- +- LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, +- diff_minus11, offset_mask0, offset_mask1); +- LSX_DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, +- offset_mask1); +- LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, ++ src_zero0, src_zero1); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src10, shuf2, zeros, src11, shuf2, ++ src_plus0, src_plus1); ++ ++ DUP2_ARG2(__lsx_vilvl_b, src_plus0, src_minus10, src_plus1, src_minus11, ++ src_minus10, src_minus11); ++ DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, ++ src_zero0, src_zero1); ++ DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, ++ offset_mask1); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -1612,42 +1590,42 @@ static void hevc_sao_edge_filter_45degree_4width_lsx(uint8_t *dst, + src_minus11 = src11; + + /* load in advance */ +- LSX_DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, +- 0, src10, src11); ++ DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ src10, src11); + + __lsx_vstelm_w(dst0, dst, 0, 0); + __lsx_vstelm_w(dst0, dst + dst_stride, 0, 2); + dst += dst_stride_2x; + } + +- LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, +- src_zero0, src_zero1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src10, shuf2, zeros, src11, shuf2, src_plus0, +- src_plus1); +- +- LSX_DUP2_ARG2(__lsx_vilvl_b, src_plus0, src_minus10, src_plus1, src_minus11, +- src_minus10, src_minus11); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, src_zero0, +- src_zero1); +- LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); +- +- LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, +- diff_minus11, offset_mask0, offset_mask1); +- LSX_DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, +- offset_mask1); +- LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, ++ src_zero0, src_zero1); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src10, shuf2, zeros, src11, shuf2, src_plus0, ++ src_plus1); ++ ++ DUP2_ARG2(__lsx_vilvl_b, src_plus0, src_minus10, src_plus1, src_minus11, ++ src_minus10, src_minus11); ++ DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, src_zero0, ++ src_zero1); ++ DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, ++ offset_mask1); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -1681,42 +1659,42 @@ static void hevc_sao_edge_filter_45degree_8width_lsx(uint8_t *dst, + src_orig = src - 1; + + /* load in advance */ +- LSX_DUP2_ARG2(__lsx_vld, src_orig - src_stride, 0, src_orig, 0, src_minus10, +- src_minus11); +- LSX_DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, +- src10, src11); ++ DUP2_ARG2(__lsx_vld, src_orig - src_stride, 0, src_orig, 0, src_minus10, ++ src_minus11); ++ DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ src10, src11); + + for (height -= 2; height; height -= 2) { + src_orig += src_stride_2x; + +- LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, +- src_zero0, src_zero1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src10, shuf2, zeros, src11, shuf2, +- src_plus10, src_plus11); +- +- LSX_DUP2_ARG2(__lsx_vilvl_b, src_plus10, src_minus10, src_plus11, src_minus11, +- src_minus10, src_minus11); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, +- src_zero0, src_zero1); +- LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); +- +- LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, +- diff_minus11, offset_mask0, offset_mask1); +- LSX_DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, +- offset_mask1); +- LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, ++ src_zero0, src_zero1); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src10, shuf2, zeros, src11, shuf2, ++ src_plus10, src_plus11); ++ ++ DUP2_ARG2(__lsx_vilvl_b, src_plus10, src_minus10, src_plus11, src_minus11, ++ src_minus10, src_minus11); ++ DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, ++ src_zero0, src_zero1); ++ DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, ++ offset_mask1); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -1725,41 +1703,41 @@ static void hevc_sao_edge_filter_45degree_8width_lsx(uint8_t *dst, + src_minus11 = src11; + + /* load in advance */ +- LSX_DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, +- src10, src11) ++ DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ src10, src11) + __lsx_vstelm_d(dst0, dst, 0, 0); + __lsx_vstelm_d(dst0, dst + dst_stride, 0, 1); + dst += dst_stride_2x; + } + +- LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, +- src_zero0, src_zero1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src10, shuf2, zeros, src11, shuf2, src_plus10, +- src_plus11); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src_plus10, src_minus10, src_plus11, src_minus11, +- src_minus10, src_minus11); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, src_zero0, +- src_zero1); +- +- LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); +- +- LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, +- diff_minus11, offset_mask0, offset_mask1); +- LSX_DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, +- offset_mask1); +- LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, ++ src_zero0, src_zero1); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src10, shuf2, zeros, src11, shuf2, src_plus10, ++ src_plus11); ++ DUP2_ARG2(__lsx_vilvl_b, src_plus10, src_minus10, src_plus11, src_minus11, ++ src_minus10, src_minus11); ++ DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, src_zero0, ++ src_zero1); ++ ++ DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, ++ offset_mask1); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -1768,8 +1746,8 @@ static void hevc_sao_edge_filter_45degree_8width_lsx(uint8_t *dst, + src_minus11 = src11; + + /* load in advance */ +- LSX_DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, +- src10, src11); ++ DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ src10, src11); + + __lsx_vstelm_d(dst0, dst, 0, 0); + __lsx_vstelm_d(dst0, dst + dst_stride, 0, 1); +@@ -1814,82 +1792,81 @@ static void hevc_sao_edge_filter_45degree_16multiple_lsx(uint8_t *dst, + for (; height; height -= 4) { + src_orig = src - 1; + dst_orig = dst; +- LSX_DUP4_ARG2(__lsx_vld, src_orig, 0, src_orig + src_stride, 0, +- src_orig + src_stride_2x, 0, src_orig + src_stride_3x, 0, +- src_minus11, src_minus12, src_minus13, src_minus14); ++ DUP4_ARG2(__lsx_vld, src_orig, 0, src_orig + src_stride, 0, ++ src_orig + src_stride_2x, 0, src_orig + src_stride_3x, 0, ++ src_minus11, src_minus12, src_minus13, src_minus14); + + for (v_cnt = 0; v_cnt < width; v_cnt += 16) { + src_minus10 = __lsx_vld(src_orig - src_stride, 0); +- LSX_DUP4_ARG2(__lsx_vld, src_orig, 16, src_orig + src_stride, 16, +- src_orig + src_stride_2x, 16, src_orig + src_stride_3x, 16, +- src10, src11, src12, src13); ++ DUP4_ARG2(__lsx_vld, src_orig, 16, src_orig + src_stride, 16, ++ src_orig + src_stride_2x, 16, src_orig + src_stride_3x, 16, ++ src10, src11, src12, src13); + src_plus13 = __lsx_vld(src + v_cnt + src_stride_4x, 1); + src_orig += 16; + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src10, src_minus11, shuf1, src11, src_minus12, +- shuf1, src12, src_minus13, shuf1, src13, src_minus14, shuf1, +- src_zero0, src_zero1, src_zero2, src_zero3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src11, src_minus12, shuf2, src12, src_minus13, +- shuf2, src_plus10, src_plus11); ++ DUP4_ARG3(__lsx_vshuf_b, src10, src_minus11, shuf1, src11, src_minus12, ++ shuf1, src12, src_minus13, shuf1, src13, src_minus14, shuf1, ++ src_zero0, src_zero1, src_zero2, src_zero3); ++ DUP2_ARG3(__lsx_vshuf_b, src11, src_minus12, shuf2, src12, src_minus13, ++ shuf2, src_plus10, src_plus11); + src_plus12 = __lsx_vshuf_b(src13, src_minus14, shuf2); + +- LSX_DUP4_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero0, src_plus10, +- src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, +- cmp_plus10, cmp_minus11, cmp_plus11); +- LSX_DUP4_ARG2(__lsx_vseq_b, src_zero2, src_minus12, src_zero2, src_plus12, +- src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, +- cmp_plus12, cmp_minus13, cmp_plus13); +- LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, +- cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, diff_minus10, +- diff_plus10, diff_minus11, diff_plus11); +- LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, +- cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, diff_minus12, +- diff_plus12, diff_minus13, diff_plus13); +- LSX_DUP4_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero0, src_plus10, +- src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, +- cmp_plus10, cmp_minus11, cmp_plus11); +- LSX_DUP4_ARG2(__lsx_vsle_bu, src_zero2, src_minus12, src_zero2, src_plus12, +- src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, +- cmp_plus12, cmp_minus13, cmp_plus13); +- LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, +- cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, cmp_minus10, +- cmp_plus10, cmp_minus11, cmp_plus11); +- LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, +- cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, cmp_minus12, +- cmp_plus12, cmp_minus13, cmp_plus13); +- LSX_DUP4_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, +- diff_plus10, const1, cmp_plus10, diff_minus11, const1, +- cmp_minus11, diff_plus11, const1, cmp_plus11, diff_minus10, +- diff_plus10, diff_minus11, diff_plus11); +- LSX_DUP4_ARG3(__lsx_vbitsel_v, diff_minus12, const1, cmp_minus12, +- diff_plus12, const1, cmp_plus12, diff_minus13, const1, +- cmp_minus13, diff_plus13, const1, cmp_plus13, diff_minus12, +- diff_plus12, diff_minus13, diff_plus13); +- +- LSX_DUP4_ARG2(__lsx_vadd_b, diff_minus10, diff_plus10, diff_minus11, +- diff_plus11, diff_minus12, diff_plus12, diff_minus13, +- diff_plus13, offset_mask0, offset_mask1, offset_mask2, +- offset_mask3); +- LSX_DUP4_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, offset_mask2, +- 2, offset_mask3, 2, offset_mask0, offset_mask1, offset_mask2, +- offset_mask3); +- +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask0, sao_offset, +- sao_offset, offset_mask0, offset_mask0, offset_mask0); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask1, sao_offset, +- sao_offset, offset_mask1, offset_mask1, offset_mask1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask2, sao_offset, +- sao_offset, offset_mask2, offset_mask2, offset_mask2); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask3, sao_offset, +- sao_offset, offset_mask3, offset_mask3, offset_mask3); +- +- LSX_DUP4_ARG2(__lsx_vxori_b, src_zero0, 128, src_zero1, 128, src_zero2, 128, +- src_zero3, 128, src_zero0, src_zero1, src_zero2, src_zero3); +- LSX_DUP4_ARG2(__lsx_vsadd_b, src_zero0, offset_mask0, src_zero1, +- offset_mask1, src_zero2, offset_mask2, src_zero3, offset_mask3, +- dst0, dst1, dst2, dst3); +- LSX_DUP4_ARG2(__lsx_vxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, 128, +- dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero0, src_plus10, ++ src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, ++ cmp_plus10, cmp_minus11, cmp_plus11); ++ DUP4_ARG2(__lsx_vseq_b, src_zero2, src_minus12, src_zero2, src_plus12, ++ src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, ++ cmp_plus12, cmp_minus13, cmp_plus13); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, ++ cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, diff_minus10, ++ diff_plus10, diff_minus11, diff_plus11); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, ++ cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, diff_minus12, ++ diff_plus12, diff_minus13, diff_plus13); ++ DUP4_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero0, src_plus10, ++ src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, ++ cmp_plus10, cmp_minus11, cmp_plus11); ++ DUP4_ARG2(__lsx_vsle_bu, src_zero2, src_minus12, src_zero2, src_plus12, ++ src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, ++ cmp_plus12, cmp_minus13, cmp_plus13); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, ++ cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, cmp_minus10, ++ cmp_plus10, cmp_minus11, cmp_plus11); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, ++ cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, cmp_minus12, ++ cmp_plus12, cmp_minus13, cmp_plus13); ++ DUP4_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, ++ diff_plus10, const1, cmp_plus10, diff_minus11, const1, ++ cmp_minus11, diff_plus11, const1, cmp_plus11, diff_minus10, ++ diff_plus10, diff_minus11, diff_plus11); ++ DUP4_ARG3(__lsx_vbitsel_v, diff_minus12, const1, cmp_minus12, ++ diff_plus12, const1, cmp_plus12, diff_minus13, const1, ++ cmp_minus13, diff_plus13, const1, cmp_plus13, diff_minus12, ++ diff_plus12, diff_minus13, diff_plus13); ++ ++ DUP4_ARG2(__lsx_vadd_b, diff_minus10, diff_plus10, diff_minus11, diff_plus11, ++ diff_minus12, diff_plus12, diff_minus13, diff_plus13, offset_mask0, ++ offset_mask1, offset_mask2, offset_mask3); ++ DUP4_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, offset_mask2, ++ 2, offset_mask3, 2, offset_mask0, offset_mask1, offset_mask2, ++ offset_mask3); ++ ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask0, sao_offset, ++ sao_offset, offset_mask0, offset_mask0, offset_mask0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask1, sao_offset, ++ sao_offset, offset_mask1, offset_mask1, offset_mask1); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask2, sao_offset, ++ sao_offset, offset_mask2, offset_mask2, offset_mask2); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask3, sao_offset, ++ sao_offset, offset_mask3, offset_mask3, offset_mask3); ++ ++ DUP4_ARG2(__lsx_vxori_b, src_zero0, 128, src_zero1, 128, src_zero2, 128, ++ src_zero3, 128, src_zero0, src_zero1, src_zero2, src_zero3); ++ DUP4_ARG2(__lsx_vsadd_b, src_zero0, offset_mask0, src_zero1, ++ offset_mask1, src_zero2, offset_mask2, src_zero3, offset_mask3, ++ dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, 128, ++ dst0, dst1, dst2, dst3); + + src_minus11 = src10; + src_minus12 = src11; +@@ -1933,42 +1910,41 @@ static void hevc_sao_edge_filter_135degree_4width_lsx(uint8_t *dst, + src_orig = src - 1; + + /* load in advance */ +- LSX_DUP2_ARG2(__lsx_vld, src_orig - src_stride, 0, src_orig, 0, src_minus10, +- src_minus11); +- LSX_DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, +- src10, src11); ++ DUP2_ARG2(__lsx_vld, src_orig - src_stride, 0, src_orig, 0, src_minus10, src_minus11); ++ DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ src10, src11); + + for (height -= 2; height; height -= 2) { + src_orig += src_stride_2x; + +- LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, +- src_zero0, src_zero1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, +- shuf2, src_minus10, src_minus11); +- +- LSX_DUP2_ARG2(__lsx_vilvl_b, src10, src_minus10, src11, src_minus11, src_minus10, +- src_minus11); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, +- src_zero0, src_zero1); +- LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); +- +- LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, +- diff_minus11, offset_mask0, offset_mask1); +- LSX_DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, +- offset_mask1); +- LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, ++ src_zero0, src_zero1); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, ++ shuf2, src_minus10, src_minus11); ++ ++ DUP2_ARG2(__lsx_vilvl_b, src10, src_minus10, src11, src_minus11, src_minus10, ++ src_minus11); ++ DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, ++ src_zero0, src_zero1); ++ DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, ++ offset_mask1); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -1977,42 +1953,42 @@ static void hevc_sao_edge_filter_135degree_4width_lsx(uint8_t *dst, + src_minus11 = src11; + + /* load in advance */ +- LSX_DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, +- src10, src11); ++ DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ src10, src11); + + __lsx_vstelm_w(dst0, dst, 0, 0); + __lsx_vstelm_w(dst0, dst + dst_stride, 0, 2); + dst += dst_stride_2x; + } + +- LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, +- src_zero0, src_zero1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, shuf2, +- src_minus10, src_minus11); +- +- LSX_DUP2_ARG2(__lsx_vilvl_b, src10, src_minus10, src11, src_minus11, src_minus10, +- src_minus11); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, src_zero0, +- src_zero1); +- LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); +- +- LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, +- diff_minus11, offset_mask0, offset_mask1); +- LSX_DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, +- offset_mask1); +- LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, ++ src_zero0, src_zero1); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, shuf2, ++ src_minus10, src_minus11); ++ ++ DUP2_ARG2(__lsx_vilvl_b, src10, src_minus10, src11, src_minus11, src_minus10, ++ src_minus11); ++ DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, src_zero0, ++ src_zero1); ++ DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, ++ offset_mask1); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -2048,42 +2024,41 @@ static void hevc_sao_edge_filter_135degree_8width_lsx(uint8_t *dst, + src_orig = src - 1; + + /* load in advance */ +- LSX_DUP2_ARG2(__lsx_vld, src_orig - src_stride, 0, src_orig, 0, src_minus10, +- src_minus11); +- LSX_DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, +- src10, src11); ++ DUP2_ARG2(__lsx_vld, src_orig - src_stride, 0, src_orig, 0, src_minus10, src_minus11); ++ DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ src10, src11); + + for (height -= 2; height; height -= 2) { + src_orig += src_stride_2x; + +- LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, +- src_zero0, src_zero1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, +- shuf2, src_minus10, src_minus11); +- +- LSX_DUP2_ARG2(__lsx_vilvl_b, src10, src_minus10, src11, src_minus11, src_minus10, +- src_minus11); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, +- src_zero0, src_zero1); +- LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); +- +- LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, +- diff_minus11, offset_mask0, offset_mask1); +- LSX_DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, +- offset_mask1); +- LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, ++ src_zero0, src_zero1); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, ++ shuf2, src_minus10, src_minus11); ++ ++ DUP2_ARG2(__lsx_vilvl_b, src10, src_minus10, src11, src_minus11, src_minus10, ++ src_minus11); ++ DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, ++ src_zero0, src_zero1); ++ DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, ++ offset_mask1); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -2092,42 +2067,42 @@ static void hevc_sao_edge_filter_135degree_8width_lsx(uint8_t *dst, + src_minus11 = src11; + + /* load in advance */ +- LSX_DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, +- src10, src11); ++ DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ src10, src11); + + __lsx_vstelm_d(dst0, dst, 0, 0); + __lsx_vstelm_d(dst0, dst + dst_stride, 0, 1); + dst += dst_stride_2x; + } + +- LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, +- src_zero0, src_zero1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, shuf2, +- src_minus10, src_minus11); +- +- LSX_DUP2_ARG2(__lsx_vilvl_b, src10, src_minus10, src11, src_minus11, src_minus10, +- src_minus11); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, src_zero0, +- src_zero1); +- LSX_DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- LSX_DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- cmp_minus10, cmp_minus11); +- LSX_DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); +- +- LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, +- diff_minus11, offset_mask0, offset_mask1); +- LSX_DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, +- offset_mask1); +- LSX_DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, ++ src_zero0, src_zero1); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, shuf2, ++ src_minus10, src_minus11); ++ ++ DUP2_ARG2(__lsx_vilvl_b, src10, src_minus10, src11, src_minus11, src_minus10, ++ src_minus11); ++ DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, src_zero0, ++ src_zero1); ++ DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, ++ const1, cmp_minus11, diff_minus10, diff_minus11); ++ ++ DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, ++ offset_mask1); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, ++ offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, ++ offset, offset, offset); + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -2173,82 +2148,82 @@ static void hevc_sao_edge_filter_135degree_16multiple_lsx(uint8_t *dst, + src_orig = src - 1; + dst_orig = dst; + +- LSX_DUP4_ARG2(__lsx_vld, src_orig, 0, src_orig + src_stride, 0, +- src_orig + src_stride_2x, 0, src_orig + src_stride_3x, 0, +- src_minus11, src_plus10, src_plus11, src_plus12); ++ DUP4_ARG2(__lsx_vld, src_orig, 0, src_orig + src_stride, 0, ++ src_orig + src_stride_2x, 0, src_orig + src_stride_3x, 0, ++ src_minus11, src_plus10, src_plus11, src_plus12); + + for (v_cnt = 0; v_cnt < width; v_cnt += 16) { + src_minus10 = __lsx_vld(src_orig - src_stride, 2); +- LSX_DUP4_ARG2(__lsx_vld, src_orig, 16, src_orig + src_stride, 16, +- src_orig + src_stride_2x, 16, src_orig + src_stride_3x, 16, +- src10, src11, src12, src13); ++ DUP4_ARG2(__lsx_vld, src_orig, 16, src_orig + src_stride, 16, ++ src_orig + src_stride_2x, 16, src_orig + src_stride_3x, 16, ++ src10, src11, src12, src13); + src_plus13 = __lsx_vld(src_orig + src_stride_4x, 0); + src_orig += 16; + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src10, src_minus11, shuf1, src11, src_plus10, +- shuf1, src12, src_plus11, shuf1, src13, src_plus12, shuf1, +- src_zero0, src_zero1, src_zero2, src_zero3); ++ DUP4_ARG3(__lsx_vshuf_b, src10, src_minus11, shuf1, src11, src_plus10, ++ shuf1, src12, src_plus11, shuf1, src13, src_plus12, shuf1, ++ src_zero0, src_zero1, src_zero2, src_zero3); + src_minus11 = __lsx_vshuf_b(src10, src_minus11, shuf2); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src11, src_plus10, shuf2, src12, src_plus11, +- shuf2, src_minus12, src_minus13); +- +- LSX_DUP4_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero0, src_plus10, +- src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, +- cmp_plus10, cmp_minus11, cmp_plus11); +- LSX_DUP4_ARG2(__lsx_vseq_b, src_zero2, src_minus12, src_zero2, src_plus12, +- src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, +- cmp_plus12, cmp_minus13, cmp_plus13); +- LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, +- cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, diff_minus10, +- diff_plus10, diff_minus11, diff_plus11); +- LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, +- cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, diff_minus12, +- diff_plus12, diff_minus13, diff_plus13); +- LSX_DUP4_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero0, src_plus10, +- src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, +- cmp_plus10, cmp_minus11, cmp_plus11); +- LSX_DUP4_ARG2(__lsx_vsle_bu, src_zero2, src_minus12, src_zero2, src_plus12, +- src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, +- cmp_plus12, cmp_minus13, cmp_plus13); +- LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, +- cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, cmp_minus10, +- cmp_plus10, cmp_minus11, cmp_plus11); +- LSX_DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, +- cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, cmp_minus12, +- cmp_plus12, cmp_minus13, cmp_plus13); +- LSX_DUP4_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, +- diff_plus10, const1, cmp_plus10, diff_minus11, const1, +- cmp_minus11, diff_plus11, const1, cmp_plus11, diff_minus10, +- diff_plus10, diff_minus11, diff_plus11); +- LSX_DUP4_ARG3(__lsx_vbitsel_v, diff_minus12, const1, cmp_minus12, +- diff_plus12, const1, cmp_plus12, diff_minus13, const1, +- cmp_minus13, diff_plus13, const1, cmp_plus13, diff_minus12, +- diff_plus12, diff_minus13, diff_plus13); +- +- LSX_DUP4_ARG2(__lsx_vadd_b, diff_minus10, diff_plus10, diff_minus11, +- diff_plus11, diff_minus12, diff_plus12, diff_minus13, +- diff_plus13, offset_mask0, offset_mask1, offset_mask2, +- offset_mask3); +- LSX_DUP4_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, offset_mask2, +- 2, offset_mask3, 2, offset_mask0, offset_mask1, offset_mask2, +- offset_mask3); +- +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask0, sao_offset, +- sao_offset, offset_mask0, offset_mask0, offset_mask0); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask1, sao_offset, +- sao_offset, offset_mask1, offset_mask1, offset_mask1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask2, sao_offset, +- sao_offset, offset_mask2, offset_mask2, offset_mask2); +- LSX_DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask3, sao_offset, +- sao_offset, offset_mask3, offset_mask3, offset_mask3); +- +- LSX_DUP4_ARG2(__lsx_vxori_b, src_zero0, 128, src_zero1, 128, src_zero2, 128, +- src_zero3, 128, src_zero0, src_zero1, src_zero2, src_zero3); +- LSX_DUP4_ARG2(__lsx_vsadd_b, src_zero0, offset_mask0, src_zero1, +- offset_mask1, src_zero2, offset_mask2, src_zero3, offset_mask3, +- dst0, dst1, dst2, dst3); +- LSX_DUP4_ARG2(__lsx_vxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, 128, +- dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src11, src_plus10, shuf2, src12, src_plus11, ++ shuf2, src_minus12, src_minus13); ++ ++ DUP4_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero0, src_plus10, ++ src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, ++ cmp_plus10, cmp_minus11, cmp_plus11); ++ DUP4_ARG2(__lsx_vseq_b, src_zero2, src_minus12, src_zero2, src_plus12, ++ src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, ++ cmp_plus12, cmp_minus13, cmp_plus13); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, ++ cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, diff_minus10, ++ diff_plus10, diff_minus11, diff_plus11); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, ++ cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, diff_minus12, ++ diff_plus12, diff_minus13, diff_plus13); ++ DUP4_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero0, src_plus10, ++ src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, ++ cmp_plus10, cmp_minus11, cmp_plus11); ++ DUP4_ARG2(__lsx_vsle_bu, src_zero2, src_minus12, src_zero2, src_plus12, ++ src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, ++ cmp_plus12, cmp_minus13, cmp_plus13); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, ++ cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, cmp_minus10, ++ cmp_plus10, cmp_minus11, cmp_plus11); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, ++ cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, cmp_minus12, ++ cmp_plus12, cmp_minus13, cmp_plus13); ++ DUP4_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, ++ diff_plus10, const1, cmp_plus10, diff_minus11, const1, ++ cmp_minus11, diff_plus11, const1, cmp_plus11, diff_minus10, ++ diff_plus10, diff_minus11, diff_plus11); ++ DUP4_ARG3(__lsx_vbitsel_v, diff_minus12, const1, cmp_minus12, ++ diff_plus12, const1, cmp_plus12, diff_minus13, const1, ++ cmp_minus13, diff_plus13, const1, cmp_plus13, diff_minus12, ++ diff_plus12, diff_minus13, diff_plus13); ++ ++ DUP4_ARG2(__lsx_vadd_b, diff_minus10, diff_plus10, diff_minus11, ++ diff_plus11, diff_minus12, diff_plus12, diff_minus13, ++ diff_plus13, offset_mask0, offset_mask1, offset_mask2, ++ offset_mask3); ++ DUP4_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, offset_mask2, ++ 2, offset_mask3, 2, offset_mask0, offset_mask1, offset_mask2, ++ offset_mask3); ++ ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask0, sao_offset, ++ sao_offset, offset_mask0, offset_mask0, offset_mask0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask1, sao_offset, ++ sao_offset, offset_mask1, offset_mask1, offset_mask1); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask2, sao_offset, ++ sao_offset, offset_mask2, offset_mask2, offset_mask2); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask3, sao_offset, ++ sao_offset, offset_mask3, offset_mask3, offset_mask3); ++ ++ DUP4_ARG2(__lsx_vxori_b, src_zero0, 128, src_zero1, 128, src_zero2, 128, ++ src_zero3, 128, src_zero0, src_zero1, src_zero2, src_zero3); ++ DUP4_ARG2(__lsx_vsadd_b, src_zero0, offset_mask0, src_zero1, ++ offset_mask1, src_zero2, offset_mask2, src_zero3, offset_mask3, ++ dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, 128, ++ dst0, dst1, dst2, dst3); + + src_minus11 = src10; + src_plus10 = src11; +diff --git a/libavcodec/loongarch/hevc_macros_lsx.h b/libavcodec/loongarch/hevc_macros_lsx.h +index 580157a8cf..809efc289c 100644 +--- a/libavcodec/loongarch/hevc_macros_lsx.h ++++ b/libavcodec/loongarch/hevc_macros_lsx.h +@@ -28,10 +28,10 @@ static inline __m128i __lsx_hevc_filt_8tap_h(__m128i in0, __m128i in1, __m128i i + { + __m128i out_m; + +- out_m = __lsx_dp2_h_b(in0, filt0); +- out_m = __lsx_dp2add_h_b(out_m, in1, filt1); +- out_m = __lsx_dp2add_h_b(out_m, in2, filt2); +- out_m = __lsx_dp2add_h_b(out_m, in3, filt3); ++ out_m = __lsx_vdp2_h_b(in0, filt0); ++ out_m = __lsx_vdp2add_h_b(out_m, in1, filt1); ++ out_m = __lsx_vdp2add_h_b(out_m, in2, filt2); ++ out_m = __lsx_vdp2add_h_b(out_m, in3, filt3); + return out_m; + } + +@@ -41,10 +41,10 @@ static inline __m128i __lsx_hevc_filt_8tap_w(__m128i in0, __m128i in1, __m128i i + { + __m128i out_m; + +- out_m = __lsx_dp2_w_h(in0, filt0); +- out_m = __lsx_dp2add_w_h(out_m, in1, filt1); +- out_m = __lsx_dp2add_w_h(out_m, in2, filt2); +- out_m = __lsx_dp2add_w_h(out_m, in3, filt3); ++ out_m = __lsx_vdp2_w_h(in0, filt0); ++ out_m = __lsx_vdp2add_w_h(out_m, in1, filt1); ++ out_m = __lsx_vdp2add_w_h(out_m, in2, filt2); ++ out_m = __lsx_vdp2add_w_h(out_m, in3, filt3); + return out_m; + } + +@@ -53,8 +53,8 @@ static inline __m128i __lsx_hevc_filt_4tap_h(__m128i in0, __m128i in1, __m128i f + { + __m128i out_m; + +- out_m = __lsx_dp2_h_b(in0, filt0); +- out_m = __lsx_dp2add_h_b(out_m, in1, filt1); ++ out_m = __lsx_vdp2_h_b(in0, filt0); ++ out_m = __lsx_vdp2add_h_b(out_m, in1, filt1); + return out_m; + } + +@@ -63,8 +63,8 @@ static inline __m128i __lsx_hevc_filt_4tap_w(__m128i in0, __m128i in1, __m128i f + { + __m128i out_m; + +- out_m = __lsx_dp2_w_h(in0, filt0); +- out_m = __lsx_dp2add_w_h(out_m, in1, filt1); ++ out_m = __lsx_vdp2_w_h(in0, filt0); ++ out_m = __lsx_vdp2add_w_h(out_m, in1, filt1); + return out_m; + } + +diff --git a/libavcodec/loongarch/hevc_mc_bi_lsx.c b/libavcodec/loongarch/hevc_mc_bi_lsx.c +index 22dfad90c1..00ee34fff8 100644 +--- a/libavcodec/loongarch/hevc_mc_bi_lsx.c ++++ b/libavcodec/loongarch/hevc_mc_bi_lsx.c +@@ -19,7 +19,7 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "libavutil/loongarch/generic_macros_lsx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + #include "hevcdsp_lsx.h" + #include "hevc_macros_lsx.h" + +@@ -37,8 +37,8 @@ void __lsx_hevc_bi_rnd_clip2(__m128i in0, __m128i in1, __m128i vec0, __m128i vec + *out1 = __lsx_vsadd_h(vec1, in1); + *out0 = __lsx_vsrari_h(*out0, 7); + *out1 = __lsx_vsrari_h(*out1, 7); +- *out0 = __lsx_clamp255_h(*out0); +- *out1 = __lsx_clamp255_h(*out1); ++ *out0 = __lsx_vclip255_h(*out0); ++ *out1 = __lsx_vclip255_h(*out1); + } + + static av_always_inline +@@ -78,10 +78,10 @@ static void hevc_bi_copy_4w_lsx(uint8_t *src0_ptr, + if (2 == height) { + tp0 = *(uint32_t *)src0_ptr; + tp1 = *(uint32_t *)(src0_ptr + src_stride); +- LSX_DUP2_ARG3(__lsx_vinsgr2vr_w, src0, tp0, 0, src0, tp1, 1, src0, src0); ++ DUP2_ARG3(__lsx_vinsgr2vr_w, src0, tp0, 0, src0, tp1, 1, src0, src0); + tpd0 = *(uint64_t *)src1_ptr; + tpd1 = *(uint64_t *)(src1_ptr + src2_stride); +- LSX_DUP2_ARG3(__lsx_vinsgr2vr_d, in0, tpd0, 0, in0, tpd1, 1, in0, in0); ++ DUP2_ARG3(__lsx_vinsgr2vr_d, in0, tpd0, 0, in0, tpd1, 1, in0, in0); + + dst0 = __lsx_vilvl_b(zero, src0); + dst0 = __lsx_vslli_h(dst0, 6); +@@ -95,17 +95,17 @@ static void hevc_bi_copy_4w_lsx(uint8_t *src0_ptr, + tp1 = *(uint32_t *)(src0_ptr + src_stride); + tp2 = *(uint32_t *)(src0_ptr + src_stride_2x); + tp3 = *(uint32_t *)(src0_ptr + src_stride_3x); +- LSX_DUP4_ARG3(__lsx_vinsgr2vr_w, src0, tp0, 0, src0, tp1, 1, src0, tp2, 2, src0, +- tp3, 3, src0, src0, src0, src0); ++ DUP4_ARG3(__lsx_vinsgr2vr_w, src0, tp0, 0, src0, tp1, 1, src0, tp2, 2, src0, ++ tp3, 3, src0, src0, src0, src0); + tpd0 = *(uint64_t *)src1_ptr; + tpd1 = *(uint64_t *)(src1_ptr + src2_stride); + tpd2 = *(uint64_t *)(src1_ptr + src2_stride_2x); + tpd3 = *(uint64_t *)(src1_ptr + src2_stride_3x); +- LSX_DUP4_ARG3(__lsx_vinsgr2vr_d, in0, tpd0, 0, in0, tpd1, 1, in1, tpd2, 0, in1, +- tpd3, 1, in0, in0, in1, in1); ++ DUP4_ARG3(__lsx_vinsgr2vr_d, in0, tpd0, 0, in0, tpd1, 1, in1, tpd2, 0, in1, ++ tpd3, 1, in0, in0, in1, in1); + dst0 = __lsx_vilvl_b(zero, src0); + dst1 = __lsx_vilvh_b(zero, src0); +- LSX_DUP2_ARG2(__lsx_vslli_h, dst0, 6, dst1, 6, dst0, dst1); ++ DUP2_ARG2(__lsx_vslli_h, dst0, 6, dst1, 6, dst0, dst1); + __lsx_hevc_bi_rnd_clip2(in0, in1, dst0, dst1, &dst0, &dst1); + dst0 = __lsx_vpickev_b(dst1, dst0); + __lsx_vstelm_w(dst0, dst, 0, 0); +@@ -118,37 +118,37 @@ static void hevc_bi_copy_4w_lsx(uint8_t *src0_ptr, + tp1 = *(uint32_t *)(src0_ptr + src_stride); + tp2 = *(uint32_t *)(src0_ptr + src_stride_2x); + tp3 = *(uint32_t *)(src0_ptr + src_stride_3x); +- LSX_DUP4_ARG3(__lsx_vinsgr2vr_w, src0, tp0, 0, src0, tp1, 1, src0, tp2, 2, +- src0, tp3, 3, src0, src0, src0, src0); ++ DUP4_ARG3(__lsx_vinsgr2vr_w, src0, tp0, 0, src0, tp1, 1, src0, tp2, 2, ++ src0, tp3, 3, src0, src0, src0, src0); + src0_ptr += src_stride_4x; + tp0 = *(uint32_t *)src0_ptr; + tp1 = *(uint32_t *)(src0_ptr + src_stride); + tp2 = *(uint32_t *)(src0_ptr + src_stride_2x); + tp3 = *(uint32_t *)(src0_ptr + src_stride_3x); +- LSX_DUP4_ARG3(__lsx_vinsgr2vr_w, src1, tp0, 0, src1, tp1, 1, src1, tp2, 2, +- src1, tp3, 3, src1, src1, src1, src1); ++ DUP4_ARG3(__lsx_vinsgr2vr_w, src1, tp0, 0, src1, tp1, 1, src1, tp2, 2, ++ src1, tp3, 3, src1, src1, src1, src1); + src0_ptr += src_stride_4x; + tpd0 = *(uint64_t *)src1_ptr; + tpd1 = *(uint64_t *)(src1_ptr + src2_stride); + tpd2 = *(uint64_t *)(src1_ptr + src2_stride_2x); + tpd3 = *(uint64_t *)(src1_ptr + src2_stride_3x); +- LSX_DUP4_ARG3(__lsx_vinsgr2vr_d, in0, tpd0, 0, in0, tpd1, 1, in1, tpd2, 0, +- in1, tpd3, 1, in0, in0, in1, in1); ++ DUP4_ARG3(__lsx_vinsgr2vr_d, in0, tpd0, 0, in0, tpd1, 1, in1, tpd2, 0, ++ in1, tpd3, 1, in0, in0, in1, in1); + src1_ptr += src2_stride_4x; + tpd0 = *(uint64_t *)src1_ptr; + tpd1 = *(uint64_t *)(src1_ptr + src2_stride); + tpd2 = *(uint64_t *)(src1_ptr + src2_stride_2x); + tpd3 = *(uint64_t *)(src1_ptr + src2_stride_3x); +- LSX_DUP4_ARG3(__lsx_vinsgr2vr_d, in2, tpd0, 0, in2, tpd1, 1, in3, tpd2, 0, +- in3, tpd3, 1, in2, in2, in3, in3); ++ DUP4_ARG3(__lsx_vinsgr2vr_d, in2, tpd0, 0, in2, tpd1, 1, in3, tpd2, 0, ++ in3, tpd3, 1, in2, in2, in3, in3); + src1_ptr += src2_stride_4x; +- LSX_DUP2_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, dst0, dst2); +- LSX_DUP2_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, dst1, dst3); +- LSX_DUP2_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst1, dst3); ++ DUP2_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, dst0, dst2); ++ DUP2_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, dst1, dst3); ++ DUP2_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst1, dst3); + + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, + &dst0, &dst1, &dst2, &dst3); +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); ++ DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); + __lsx_vstelm_w(dst0, dst, 0, 0); + __lsx_vstelm_w(dst0, dst + dst_stride, 0, 1); + __lsx_vstelm_w(dst0, dst + dst_stride_2x, 0, 2); +@@ -193,36 +193,36 @@ static void hevc_bi_copy_6w_lsx(uint8_t *src0_ptr, + tp1 = *(uint64_t *)(src0_ptr + src_stride); + tp2 = *(uint64_t *)(src0_ptr + src_stride_2x); + tp3 = *(uint64_t *)(src0_ptr + src_stride_3x); +- LSX_DUP4_ARG3(__lsx_vinsgr2vr_d, src0, tp0, 0, src0, tp1, 1, src1, tp2, 0, src1, +- tp3, 1, src0, src0, src1, src1); ++ DUP4_ARG3(__lsx_vinsgr2vr_d, src0, tp0, 0, src0, tp1, 1, src1, tp2, 0, src1, ++ tp3, 1, src0, src0, src1, src1); + src0_ptr += src_stride_4x; + tp0 = *(uint64_t *)src0_ptr; + tp1 = *(uint64_t *)(src0_ptr + src_stride); + tp2 = *(uint64_t *)(src0_ptr + src_stride_2x); + tp3 = *(uint64_t *)(src0_ptr + src_stride_3x); +- LSX_DUP4_ARG3(__lsx_vinsgr2vr_d, src2, tp0, 0, src2, tp1, 1, src3, tp2, 0, src3, +- tp3, 1, src2, src2, src3, src3); ++ DUP4_ARG3(__lsx_vinsgr2vr_d, src2, tp0, 0, src2, tp1, 1, src3, tp2, 0, src3, ++ tp3, 1, src2, src2, src3, src3); + src0_ptr += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in0, in1, in2, in3); + src1_ptr += src2_stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in4, in5, in6, in7); + src1_ptr += src2_stride_4x; +- LSX_DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, +- dst0, dst2, dst4, dst6); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, +- dst1, dst3, dst5, dst7); +- LSX_DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst5, 6, dst7, 6, dst1, dst3, +- dst5, dst7); ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, ++ dst0, dst2, dst4, dst6); ++ DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ dst1, dst3, dst5, dst7); ++ DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst5, 6, dst7, 6, dst1, dst3, ++ dst5, dst7); + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, + &dst0, &dst1, &dst2, &dst3); + __lsx_hevc_bi_rnd_clip4(in4, in5, in6, in7, dst4, dst5, dst6, dst7, + &dst4, &dst5, &dst6, &dst7); +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst5, dst4, dst7, dst6, out2, out3); ++ DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); ++ DUP2_ARG2(__lsx_vpickev_b, dst5, dst4, dst7, dst6, out2, out3); + __lsx_vstelm_w(out0, dst, 0, 0); + __lsx_vstelm_w(out0, dst + dst_stride, 0, 2); + __lsx_vstelm_h(out0, dst, 4, 2); +@@ -271,8 +271,8 @@ static void hevc_bi_copy_8w_lsx(uint8_t *src0_ptr, + if (2 == height) { + tp0 = *(uint64_t *)src0_ptr; + tp1 = *(uint64_t *)(src0_ptr + src_stride); +- LSX_DUP2_ARG3(__lsx_vinsgr2vr_d, src0, tp0, 0, src0, tp1, 1, src0, src0); +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); ++ DUP2_ARG3(__lsx_vinsgr2vr_d, src0, tp0, 0, src0, tp1, 1, src0, src0); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); + dst0 = __lsx_vsllwil_hu_bu(src0, 6); + dst1 = __lsx_vilvh_b(zero, src0); + dst1 = __lsx_vslli_h(dst1, 6); +@@ -285,17 +285,17 @@ static void hevc_bi_copy_8w_lsx(uint8_t *src0_ptr, + tp1 = *(uint64_t *)(src0_ptr + src_stride); + tp2 = *(uint64_t *)(src0_ptr + src_stride_2x); + tp3 = *(uint64_t *)(src0_ptr + src_stride_3x); +- LSX_DUP4_ARG3(__lsx_vinsgr2vr_d, src0, tp0, 0, src0, tp1, 1, src1, tp2, 0, src1, +- tp3, 1, src0, src0, src1, src1); +- LSX_DUP2_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, dst0, dst2); +- LSX_DUP2_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, dst1, dst3); +- LSX_DUP2_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst1, dst3); +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, in0, +- in1, in2, in3); ++ DUP4_ARG3(__lsx_vinsgr2vr_d, src0, tp0, 0, src0, tp1, 1, src1, tp2, 0, src1, ++ tp3, 1, src0, src0, src1, src1); ++ DUP2_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, dst0, dst2); ++ DUP2_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, dst1, dst3); ++ DUP2_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst1, dst3); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, in0, ++ in1, in2, in3); + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, + &dst0, &dst1, &dst2, &dst3); +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); ++ DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); + __lsx_vstelm_d(out0, dst, 0, 0); + __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); + __lsx_vstelm_d(out1, dst + dst_stride_2x, 0, 0); +@@ -305,28 +305,28 @@ static void hevc_bi_copy_8w_lsx(uint8_t *src0_ptr, + tp1 = *(uint64_t *)(src0_ptr + src_stride); + tp2 = *(uint64_t *)(src0_ptr + src_stride_2x); + tp3 = *(uint64_t *)(src0_ptr + src_stride_3x); +- LSX_DUP4_ARG3(__lsx_vinsgr2vr_d, src0, tp0, 0, src0, tp1, 1, src1, tp2, 0, src1, +- tp3, 1, src0, src0, src1, src1); ++ DUP4_ARG3(__lsx_vinsgr2vr_d, src0, tp0, 0, src0, tp1, 1, src1, tp2, 0, src1, ++ tp3, 1, src0, src0, src1, src1); + src0_ptr += src_stride_4x; + tp0 = *(uint64_t *)src0_ptr; + tp1 = *(uint64_t *)(src0_ptr + src_stride); +- LSX_DUP2_ARG3(__lsx_vinsgr2vr_d, src2, tp0, 0, src2, tp1, 1, src2, src2); ++ DUP2_ARG3(__lsx_vinsgr2vr_d, src2, tp0, 0, src2, tp1, 1, src2, src2); + +- LSX_DUP2_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, dst0, dst2); +- LSX_DUP2_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, dst1, dst3); +- LSX_DUP2_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst1, dst3); ++ DUP2_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, dst0, dst2); ++ DUP2_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, dst1, dst3); ++ DUP2_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst1, dst3); + dst4 = __lsx_vsllwil_hu_bu(src2, 6); + dst5 = __lsx_vilvh_b(zero, src2); + dst5 = __lsx_vslli_h(dst5, 6); +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in0, in1, in2, in3); + src1_ptr += src2_stride_4x; +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in4, in5); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in4, in5); + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, + &dst0, &dst1, &dst2, &dst3); + __lsx_hevc_bi_rnd_clip2(in4, in5, dst4, dst5, &dst4, &dst5); +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); ++ DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); + out2 = __lsx_vpickev_b(dst5, dst4); + __lsx_vstelm_d(out0, dst, 0, 0); + __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); +@@ -342,36 +342,36 @@ static void hevc_bi_copy_8w_lsx(uint8_t *src0_ptr, + tp1 = *(uint64_t *)(src0_ptr + src_stride); + tp2 = *(uint64_t *)(src0_ptr + src_stride_2x); + tp3 = *(uint64_t *)(src0_ptr + src_stride_3x); +- LSX_DUP4_ARG3(__lsx_vinsgr2vr_d, src0, tp0, 0, src0, tp1, 1, src1, tp2, 0, +- src1, tp3, 1, src0, src0, src1, src1); ++ DUP4_ARG3(__lsx_vinsgr2vr_d, src0, tp0, 0, src0, tp1, 1, src1, tp2, 0, ++ src1, tp3, 1, src0, src0, src1, src1); + src0_ptr += src_stride_4x; + tp0 = *(uint64_t *)src0_ptr; + tp1 = *(uint64_t *)(src0_ptr + src_stride); + tp2 = *(uint64_t *)(src0_ptr + src_stride_2x); + tp3 = *(uint64_t *)(src0_ptr + src_stride_3x); +- LSX_DUP4_ARG3(__lsx_vinsgr2vr_d, src2, tp0, 0, src2, tp1, 1, src3, tp2, 0, +- src3, tp3, 1, src2, src2, src3, src3); ++ DUP4_ARG3(__lsx_vinsgr2vr_d, src2, tp0, 0, src2, tp1, 1, src3, tp2, 0, ++ src3, tp3, 1, src2, src2, src3, src3); + src0_ptr += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, dst0, +- dst2, dst4, dst6); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, +- dst1, dst3, dst5, dst7); +- LSX_DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst5, 6, dst7, 6, dst1, +- dst3, dst5, dst7); +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, dst0, ++ dst2, dst4, dst6); ++ DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ dst1, dst3, dst5, dst7); ++ DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst5, 6, dst7, 6, dst1, ++ dst3, dst5, dst7); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in0, in1, in2, in3); + src1_ptr += src2_stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in4, in5, in6, in7); + src1_ptr += src2_stride_4x; + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, + dst3, &dst0, &dst1, &dst2, &dst3); + __lsx_hevc_bi_rnd_clip4(in4, in5, in6, in7, dst4, dst5, dst6, + dst7, &dst4, &dst5, &dst6, &dst7); +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst5, dst4, dst7, dst6, out2, out3); ++ DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); ++ DUP2_ARG2(__lsx_vpickev_b, dst5, dst4, dst7, dst6, out2, out3); + __lsx_vstelm_d(out0, dst, 0, 0); + __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); + __lsx_vstelm_d(out1, dst + dst_stride_2x, 0, 0); +@@ -410,27 +410,27 @@ static void hevc_bi_copy_12w_lsx(uint8_t *src0_ptr, + __m128i dst0, dst1, dst2, dst3, dst4, dst5; + + for (loop_cnt = 4; loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, +- src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, ++ src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, ++ src0, src1, src2, src3); + src0_ptr += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, +- src1_ptr + src2_stride_2x, 16, src1_ptr + src2_stride_3x, 16, +- in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, ++ src1_ptr + src2_stride_2x, 16, src1_ptr + src2_stride_3x, 16, ++ in4, in5, in6, in7); + + src1_ptr += src2_stride_4x; +- LSX_DUP2_ARG2(__lsx_vilvl_d, in5, in4, in7, in6, in4, in5); +- LSX_DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, +- dst0, dst1, dst2, dst3) +- LSX_DUP2_ARG2(__lsx_vilvh_w, src1, src0, src3, src2, src0, src1); +- LSX_DUP2_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, dst4, dst5) ++ DUP2_ARG2(__lsx_vilvl_d, in5, in4, in7, in6, in4, in5); ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, ++ dst0, dst1, dst2, dst3) ++ DUP2_ARG2(__lsx_vilvh_w, src1, src0, src3, src2, src0, src1); ++ DUP2_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, dst4, dst5) + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, + &dst0, &dst1, &dst2, &dst3); + __lsx_hevc_bi_rnd_clip2(in4, in5, dst4, dst5, &dst4, &dst5); +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); ++ DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); + out2 = __lsx_vpickev_b(dst5, dst4); + __lsx_vstelm_d(out0, dst, 0, 0); + __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); +@@ -469,30 +469,30 @@ static void hevc_bi_copy_16w_lsx(uint8_t *src0_ptr, + __m128i zero = {0}; + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, +- src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, ++ src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, ++ src0, src1, src2, src3); + src0_ptr += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, +- src1_ptr + src2_stride_2x, 16, src1_ptr + src2_stride_3x, 16, +- in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, ++ src1_ptr + src2_stride_2x, 16, src1_ptr + src2_stride_3x, 16, ++ in4, in5, in6, in7); + src1_ptr += src2_stride_4x; +- LSX_DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, +- dst0_r, dst1_r, dst2_r, dst3_r) +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, +- dst0_l, dst1_l, dst2_l, dst3_l); +- LSX_DUP4_ARG2(__lsx_vslli_h, dst0_l, 6, dst1_l, 6, dst2_l, 6, dst3_l, 6, dst0_l, +- dst1_l, dst2_l, dst3_l); ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, ++ dst0_r, dst1_r, dst2_r, dst3_r) ++ DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ dst0_l, dst1_l, dst2_l, dst3_l); ++ DUP4_ARG2(__lsx_vslli_h, dst0_l, 6, dst1_l, 6, dst2_l, 6, dst3_l, 6, dst0_l, ++ dst1_l, dst2_l, dst3_l); + + __lsx_hevc_bi_rnd_clip4(in0, in1, in4, in5, dst0_r, dst1_r, dst0_l, + dst1_l, &dst0_r, &dst1_r, &dst0_l, &dst1_l); + __lsx_hevc_bi_rnd_clip4(in2, in3, in6, in7, dst2_r, dst3_r, dst2_l, + dst3_l, &dst2_r, &dst3_r, &dst2_l, &dst3_l); +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, out0, out1); +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst2_l, dst2_r, dst3_l, dst3_r, out2, out3); ++ DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, out0, out1); ++ DUP2_ARG2(__lsx_vpickev_b, dst2_l, dst2_r, dst3_l, dst3_r, out2, out3); + __lsx_vst(out0, dst, 0); + __lsx_vstx(out1, dst, dst_stride); + __lsx_vstx(out2, dst, dst_stride_2x); +@@ -525,32 +525,32 @@ static void hevc_bi_copy_24w_lsx(uint8_t *src0_ptr, + __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, dst8, dst9, dst10, dst11; + + for (loop_cnt = 8; loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, +- src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, +- in0, in1, in4, in5); +- LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, +- src0_ptr + src_stride_2x, 16, src0_ptr + src_stride_3x, 16, +- in2, in3, in6, in7); +- LSX_DUP4_ARG2(__lsx_vsllwil_hu_bu, in0, 6, in1, 6, in2, 6, in3, 6, +- dst0, dst2, dst4, dst5) +- +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, in0, zero, in1, zero, in4, zero, in5, +- dst1, dst3, dst7, dst9); +- LSX_DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst7, 6, dst9, 6, +- dst1, dst3, dst7, dst9); +- LSX_DUP4_ARG2(__lsx_vsllwil_hu_bu, in4, 6, in5, 6, in6, 6, in7, 6, +- dst6, dst8, dst10, dst11) ++ DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, ++ src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, ++ in0, in1, in4, in5); ++ DUP4_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, ++ src0_ptr + src_stride_2x, 16, src0_ptr + src_stride_3x, 16, ++ in2, in3, in6, in7); ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, in0, 6, in1, 6, in2, 6, in3, 6, ++ dst0, dst2, dst4, dst5) ++ ++ DUP4_ARG2(__lsx_vilvh_b, zero, in0, zero, in1, zero, in4, zero, in5, ++ dst1, dst3, dst7, dst9); ++ DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst7, 6, dst9, 6, ++ dst1, dst3, dst7, dst9); ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, in4, 6, in5, 6, in6, 6, in7, 6, ++ dst6, dst8, dst10, dst11) + + src0_ptr += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, +- src1_ptr + src2_stride_2x, 16, src1_ptr + src2_stride_3x, 16, +- in4, in5, in6, in7); +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 32, src1_ptr + src2_stride, 32, +- src1_ptr + src2_stride_2x, 32, src1_ptr + src2_stride_3x, 32, +- in8, in9, in10, in11); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, ++ src1_ptr + src2_stride_2x, 16, src1_ptr + src2_stride_3x, 16, ++ in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 32, src1_ptr + src2_stride, 32, ++ src1_ptr + src2_stride_2x, 32, src1_ptr + src2_stride_3x, 32, ++ in8, in9, in10, in11); + src1_ptr += src2_stride_4x; + + __lsx_hevc_bi_rnd_clip4(in0, in4, in1, in5, dst0, dst1, dst2, dst3, +@@ -559,9 +559,9 @@ static void hevc_bi_copy_24w_lsx(uint8_t *src0_ptr, + &dst4, &dst5, &dst6, &dst7); + __lsx_hevc_bi_rnd_clip4(in3, in7, in10, in11, dst8, dst9, dst10, dst11, + &dst8, &dst9, &dst10, &dst11); +- LSX_DUP4_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, +- out0, out1, out2, out3); +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst9, dst8, dst11, dst10, out4, out5); ++ DUP4_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, ++ out0, out1, out2, out3); ++ DUP2_ARG2(__lsx_vpickev_b, dst9, dst8, dst11, dst10, out4, out5); + __lsx_vst(out0, dst, 0); + __lsx_vstelm_d(out2, dst, 16, 0); + __lsx_vstx(out1, dst, dst_stride); +@@ -590,29 +590,29 @@ static void hevc_bi_copy_32w_lsx(uint8_t *src0_ptr, + __m128i in0, in1, in2, in3, in4, in5, in6, in7; + + for (loop_cnt = (height >> 1); loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); + src0_ptr += src_stride; +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src2, src3); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src2, src3); + src0_ptr += src_stride; +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, 48, +- in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, 48, ++ in0, in1, in2, in3); + src1_ptr += src2_stride; +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, 48, +- in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, 48, ++ in4, in5, in6, in7); + src1_ptr += src2_stride; + +- LSX_DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, +- dst0, dst2, dst4, dst6) +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, +- dst1, dst3, dst5, dst7); +- LSX_DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst5, 6, dst7, 6, dst1, dst3, +- dst5, dst7); ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, ++ dst0, dst2, dst4, dst6) ++ DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ dst1, dst3, dst5, dst7); ++ DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst5, 6, dst7, 6, dst1, dst3, ++ dst5, dst7); + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, + &dst0, &dst1, &dst2, &dst3); + __lsx_hevc_bi_rnd_clip4(in4, in5, in6, in7, dst4, dst5, dst6, dst7, + &dst4, &dst5, &dst6, &dst7); +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst5, dst4, dst7, dst6, out2, out3); ++ DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); ++ DUP2_ARG2(__lsx_vpickev_b, dst5, dst4, dst7, dst6, out2, out3); + __lsx_vst(out0, dst, 0); + __lsx_vst(out1, dst, 16); + dst += dst_stride; +@@ -638,31 +638,31 @@ static void hevc_bi_copy_48w_lsx(uint8_t *src0_ptr, + __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, dst8, dst9, dst10, dst11; + + for (loop_cnt = (height >> 1); loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); + src2 = __lsx_vld(src0_ptr, 32); + src0_ptr += src_stride; +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src3, src4); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src3, src4); + src5 = __lsx_vld(src0_ptr, 32); + src0_ptr += src_stride; + +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, 48, +- in0, in1, in2, in3); +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 64, src1_ptr, 80, in4, in5); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, 48, ++ in0, in1, in2, in3); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 64, src1_ptr, 80, in4, in5); + src1_ptr += src2_stride; +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, 48, +- in6, in7, in8, in9); +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 64, src1_ptr, 80, in10, in11); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, 48, ++ in6, in7, in8, in9); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 64, src1_ptr, 80, in10, in11); + src1_ptr += src2_stride; + +- LSX_DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, +- dst0, dst2, dst4, dst6); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, +- dst1, dst3, dst5, dst7); +- LSX_DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst5, 6, dst7, 6, dst1, dst3, +- dst5, dst7); +- LSX_DUP2_ARG2(__lsx_vsllwil_hu_bu, src4, 6, src5, 6, dst8, dst10); +- LSX_DUP2_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, dst9, dst11); +- LSX_DUP2_ARG2(__lsx_vslli_h, dst9, 6, dst11, 6, dst9, dst11); ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, ++ dst0, dst2, dst4, dst6); ++ DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ dst1, dst3, dst5, dst7); ++ DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst5, 6, dst7, 6, dst1, dst3, ++ dst5, dst7); ++ DUP2_ARG2(__lsx_vsllwil_hu_bu, src4, 6, src5, 6, dst8, dst10); ++ DUP2_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, dst9, dst11); ++ DUP2_ARG2(__lsx_vslli_h, dst9, 6, dst11, 6, dst9, dst11); + + + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, +@@ -671,9 +671,9 @@ static void hevc_bi_copy_48w_lsx(uint8_t *src0_ptr, + &dst4, &dst5, &dst6, &dst7); + __lsx_hevc_bi_rnd_clip4(in8, in9, in10, in11, dst8, dst9, dst10, dst11, + &dst8, &dst9, &dst10, &dst11); +- LSX_DUP4_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, +- out0, out1, out2, out3); +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst9, dst8, dst11, dst10, out4, out5); ++ DUP4_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, ++ out0, out1, out2, out3); ++ DUP2_ARG2(__lsx_vpickev_b, dst9, dst8, dst11, dst10, out4, out5); + __lsx_vst(out0, dst, 0); + __lsx_vst(out1, dst, 16); + __lsx_vst(out2, dst, 32); +@@ -701,28 +701,28 @@ static void hevc_bi_copy_64w_lsx(uint8_t *src0_ptr, + __m128i in0, in1, in2, in3, in4, in5, in6, in7; + + for (loop_cnt = height; loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0_ptr, 32, src0_ptr, 48, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0_ptr, 32, src0_ptr, 48, ++ src0, src1, src2, src3); + src0_ptr += src_stride; +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, 48, +- in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 64, src1_ptr, 80, src1_ptr, 96, src1_ptr, 112, +- in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, 48, ++ in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 64, src1_ptr, 80, src1_ptr, 96, src1_ptr, 112, ++ in4, in5, in6, in7); + src1_ptr += src2_stride; + +- LSX_DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, +- dst0, dst2, dst4, dst6); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, +- dst1, dst3, dst5, dst7); +- LSX_DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst5, 6, dst7, 6, dst1, dst3, +- dst5, dst7); ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, ++ dst0, dst2, dst4, dst6); ++ DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ dst1, dst3, dst5, dst7); ++ DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst5, 6, dst7, 6, dst1, dst3, ++ dst5, dst7); + + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, + &dst0, &dst1, &dst2, &dst3); + __lsx_hevc_bi_rnd_clip4(in4, in5, in6, in7, dst4, dst5, dst6, dst7, + &dst4, &dst5, &dst6, &dst7); +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst5, dst4, dst7, dst6, out2, out3); ++ DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); ++ DUP2_ARG2(__lsx_vpickev_b, dst5, dst4, dst7, dst6, out2, out3); + + __lsx_vst(out0, dst, 0); + __lsx_vst(out1, dst, 16); +@@ -754,45 +754,44 @@ static void hevc_hz_bi_8t_16w_lsx(uint8_t *src0_ptr, + + src0_ptr -= 3; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); + +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + + for (loop_cnt = (height >> 1); loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 8, src0, src1); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 8, src0, src1); + src0_ptr += src_stride; +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 8, src2, src3); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 8, src2, src3); + src0_ptr += src_stride; +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, in0, in1); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, in0, in1); + src1_ptr += src2_stride; +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, in2, in3); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, in2, in3); + src1_ptr += src2_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, +- dst3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, +- vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, +- vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, ++ vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, ++ vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); + + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, &dst0, &dst1, + &dst2, &dst3); +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); ++ DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); + __lsx_vst(dst0, dst, 0); + __lsx_vstx(dst1, dst, dst_stride); + dst += dst_stride_2x; +@@ -820,34 +819,34 @@ static void hevc_hz_bi_8t_24w_lsx(uint8_t *src0_ptr, + + src0_ptr -= 3; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); + +- LSX_DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, +- mask3, mask4); +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); ++ DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, ++ mask3, mask4); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); + mask7 = __lsx_vaddi_bu(mask0, 14); + + for (loop_cnt = height; loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); + src0_ptr += src_stride; +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, in0, in1); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, in0, in1); + in2 = __lsx_vld(src1_ptr, 32); + src1_ptr += src2_stride; +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, src1, src1, +- mask0, src0, src0, mask1, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, dst0, vec3, filt1, dst0, dst1, dst2, dst0); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src0, mask5, src1, src1, mask1, src0, src0, +- mask2, src1, src0, mask6, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst1, vec0, filt1, dst2, vec1, filt1, dst0, vec2, +- filt2, dst1, vec3, filt2, dst1, dst2, dst0, dst1); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask2, src0, src0, mask3, src1, src0, +- mask7, src1, src1, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst2, vec0, filt2, dst0, vec1, filt3, dst1, +- vec2, filt3, dst2, vec3, filt3, dst2, dst0, dst1, dst2); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, src1, src1, ++ mask0, src0, src0, mask1, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, dst0, vec3, filt1, dst0, dst1, dst2, dst0); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src0, mask5, src1, src1, mask1, src0, src0, ++ mask2, src1, src0, mask6, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst1, vec0, filt1, dst2, vec1, filt1, dst0, vec2, ++ filt2, dst1, vec3, filt2, dst1, dst2, dst0, dst1); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask2, src0, src0, mask3, src1, src0, ++ mask7, src1, src1, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst2, vec0, filt2, dst0, vec1, filt3, dst1, ++ vec2, filt3, dst2, vec3, filt3, dst2, dst0, dst1, dst2); + + __lsx_hevc_bi_rnd_clip2(in0, in1, dst0, dst1, &dst0, &dst1); + tmp0 = __lsx_vpickev_b(dst1, dst0); +@@ -883,46 +882,45 @@ static void hevc_hz_bi_8t_32w_lsx(uint8_t *src0_ptr, + src0_ptr -= 3; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); + +- LSX_DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, +- mask3, mask4); +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); ++ DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, ++ mask3, mask4); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); + mask7 = __lsx_vaddi_bu(mask0, 14); + + for (loop_cnt = height; loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); + src2 = __lsx_vld(src0_ptr, 24); + src0_ptr += src_stride; +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, +- 48, in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, ++ 48, in0, in1, in2, in3); + src1_ptr += src2_stride; +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); + src2 = __lsx_vxori_b(src2, 128); + +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src2, src2, mask0, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, +- dst3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask1, src2, src2, mask1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask2, src2, src2, mask2, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, vec2, +- filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask3, src2, src2, mask3, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, vec2, +- filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src2, src2, mask0, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask1, src2, src2, mask1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask2, src2, src2, mask2, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, vec2, ++ filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask3, src2, src2, mask3, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, vec2, ++ filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); + + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, + &dst0, &dst1, &dst2, &dst3); + +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, tmp0, tmp1); + __lsx_vst(tmp0, dst, 0); + __lsx_vst(tmp1, dst, 16); + dst += dst_stride; +@@ -951,56 +949,55 @@ static void hevc_hz_bi_8t_48w_lsx(uint8_t *src0_ptr, + + src0_ptr -= 3; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); + +- LSX_DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, +- mask3, mask4); +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); ++ DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, ++ mask3, mask4); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); + mask7 = __lsx_vaddi_bu(mask0, 14); + + for (loop_cnt = 64; loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 32, src0_ptr, 40, src2, src3); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 32, src0_ptr, 40, src2, src3); + src0_ptr += src_stride; +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, +- 48, in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); +- +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, src1, src1, +- mask0, src2, src1, mask4, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, +- dst3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, src1, src1, +- mask1, src2, src1, mask5, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, src1, src1, +- mask2, src2, src1, mask6, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, +- vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, src1, src1, +- mask3, src2, src1, mask7, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, +- vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, ++ 48, in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, src1, src1, ++ mask0, src2, src1, mask4, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, src1, src1, ++ mask1, src2, src1, mask5, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, src1, src1, ++ mask2, src2, src1, mask6, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, ++ vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, src1, src1, ++ mask3, src2, src1, mask7, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, ++ vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); + __lsx_hevc_bi_rnd_clip2(in0, in1, dst0, dst1, &dst0, &dst1); + __lsx_hevc_bi_rnd_clip2(in2, in3, dst2, dst3, &dst2, &dst3); +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, tmp0, tmp1); + __lsx_vst(tmp0, dst, 0); + __lsx_vst(tmp1, dst, 16); + +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 64, src1_ptr, 80, in4, in5); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 64, src1_ptr, 80, in4, in5); + src1_ptr += src2_stride; +- LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, src2, src2, +- mask1, src3, src3, mask1, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- dst4, vec2, filt1, dst5, vec3, filt1, dst4, dst5, dst4, dst5); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, src2, src2, +- mask3, src3, src3, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst4, vec0, filt2, dst5, vec1, filt2, dst4, +- vec2, filt3, dst5, vec3, filt3, dst4, dst5, dst4, dst5); ++ DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, src2, src2, ++ mask1, src3, src3, mask1, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ dst4, vec2, filt1, dst5, vec3, filt1, dst4, dst5, dst4, dst5); ++ DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, src2, src2, ++ mask3, src3, src3, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst4, vec0, filt2, dst5, vec1, filt2, dst4, ++ vec2, filt3, dst5, vec3, filt3, dst4, dst5, dst4, dst5); + + __lsx_hevc_bi_rnd_clip2(in4, in5, dst4, dst5, &dst4, &dst5); + tmp2 = __lsx_vpickev_b(dst5, dst4); +@@ -1031,46 +1028,45 @@ static void hevc_hz_bi_8t_64w_lsx(uint8_t *src0_ptr, + src0_ptr -= 3; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); + +- LSX_DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, +- mask3, mask4); +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); ++ DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, ++ mask3, mask4); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); + mask7 = __lsx_vaddi_bu(mask0, 14); + + for (loop_cnt = height; loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); + src2 = __lsx_vld(src0_ptr, 24); +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 32, src0_ptr, 48, src3, src4); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 32, src0_ptr, 48, src3, src4); + src5 = __lsx_vld(src0_ptr, 56); +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, +- 48, in0, in1, in2, in3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, ++ 48, in0, in1, in2, in3); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); + src2 = __lsx_vxori_b(src2, 128); + +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src2, src2, mask0, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, +- dst3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask1, src2, src2, mask1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask2, src2, src2, mask2, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, +- vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask3, src2, src2, mask3, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, +- vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src2, src2, mask0, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask1, src2, src2, mask1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask2, src2, src2, mask2, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, ++ vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask3, src2, src2, mask3, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, ++ vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); + + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, + &dst0, &dst1, &dst2, &dst3); + +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, tmp0, tmp1); + __lsx_vst(tmp0, dst, 0); + __lsx_vst(tmp1, dst, 16); + +@@ -1078,32 +1074,31 @@ static void hevc_hz_bi_8t_64w_lsx(uint8_t *src0_ptr, + src1 = src4; + src2 = src5; + +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 64, src1_ptr, 80, src1_ptr, 96, src1_ptr, +- 112, in0, in1, in2, in3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 64, src1_ptr, 80, src1_ptr, 96, src1_ptr, ++ 112, in0, in1, in2, in3); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); + src2 = __lsx_vxori_b(src2, 128); + +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src2, src2, mask0, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, +- dst3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask1, src2, src2, mask1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask2, src2, src2, mask2, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, +- vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask3, src2, src2, mask3, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, +- vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src2, src2, mask0, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask1, src2, src2, mask1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask2, src2, src2, mask2, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, ++ vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask3, src2, src2, mask3, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, ++ vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, + &dst0, &dst1, &dst2, &dst3); + +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, tmp0, tmp1); + __lsx_vst(tmp0, dst, 32); + __lsx_vst(tmp1, dst, 48); + src1_ptr += src2_stride; +@@ -1144,55 +1139,54 @@ void hevc_vt_bi_8t_8w_lsx(uint8_t *src0_ptr, + src0_ptr -= src_stride_3x; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, +- filt0, filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filt0, filt1, filt2, filt3); + +- LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, +- src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, src0, src1, +- src2, src3); ++ DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0_ptr + src_stride_2x, ++ 0, src0_ptr + src_stride_3x, 0, src0, src1, src2, src3); + src0_ptr += src_stride_4x; +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src4, src5); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src4, src5); + src6 = __lsx_vld(src0_ptr + src_stride_2x, 0); + src0_ptr += src_stride_3x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, +- src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, ++ src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); +- LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, +- src10_r, src32_r, src54_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); ++ DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_r, src32_r, src54_r, src21_r); ++ DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, +- src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, +- src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, ++ src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, ++ src7, src8, src9, src10); + src0_ptr += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in0, in1, in2, in3); + src1_ptr += src2_stride_4x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, +- src8, src9, src10); +- LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src76_r, src87_r, src98_r, src109_r); +- +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, dst0_r, src54_r, filt2, dst0_r, src76_r, filt3, dst0_r, +- dst0_r, dst0_r, dst0_r); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, +- filt1, dst1_r, src65_r, filt2, dst1_r, src87_r, filt3, dst1_r, +- dst1_r, dst1_r, dst1_r); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src32_r, filt0, dst2_r, src54_r, +- filt1, dst2_r, src76_r, filt2, dst2_r, src98_r, filt3, dst2_r, +- dst2_r, dst2_r, dst2_r); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src43_r, filt0, dst3_r, src65_r, +- filt1, dst3_r, src87_r, filt2, dst3_r, src109_r, filt3, dst3_r, +- dst3_r, dst3_r, dst3_r); ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, ++ src8, src9, src10); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src76_r, src87_r, src98_r, src109_r); ++ ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, dst0_r, src54_r, filt2, dst0_r, src76_r, filt3, dst0_r, ++ dst0_r, dst0_r, dst0_r); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, ++ filt1, dst1_r, src65_r, filt2, dst1_r, src87_r, filt3, dst1_r, ++ dst1_r, dst1_r, dst1_r); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src32_r, filt0, dst2_r, src54_r, ++ filt1, dst2_r, src76_r, filt2, dst2_r, src98_r, filt3, dst2_r, ++ dst2_r, dst2_r, dst2_r); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src43_r, filt0, dst3_r, src65_r, ++ filt1, dst3_r, src87_r, filt2, dst3_r, src109_r, filt3, dst3_r, ++ dst3_r, dst3_r, dst3_r); + + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst2_r, dst3_r, + &dst0_r, &dst1_r, &dst2_r, &dst3_r); + +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst1_r); ++ DUP2_ARG2(__lsx_vpickev_b, dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst1_r); + __lsx_vstelm_d(dst0_r, dst, 0, 0); + __lsx_vstelm_d(dst0_r, dst + dst_stride, 0, 1); + __lsx_vstelm_d(dst1_r, dst + dst_stride_2x, 0, 0); +@@ -1245,64 +1239,64 @@ void hevc_vt_bi_8t_16multx2mult_lsx(uint8_t *src0_ptr, + src0_ptr -= src_stride_3x; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, +- filt0, filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filt0, filt1, filt2, filt3); + + for (cnt = (width >> 4); cnt--;) { + src0_ptr_tmp = src0_ptr; + src1_ptr_tmp = src1_ptr; + dst_tmp = dst; + +- LSX_DUP4_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, +- src0_ptr_tmp + src_stride_2x, 0, src0_ptr_tmp + src_stride_3x, +- 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, ++ src0_ptr_tmp + src_stride_2x, 0, src0_ptr_tmp + src_stride_3x, ++ 0, src0, src1, src2, src3); + src0_ptr_tmp += src_stride_4x; +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, src4, src5); ++ DUP2_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, src4, src5); + src6 = __lsx_vld(src0_ptr_tmp + src_stride_2x, 0); + src0_ptr_tmp += src_stride_3x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); + +- LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, +- src10_r, src32_r, src54_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); +- LSX_DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, +- src10_l, src32_l, src54_l, src21_l); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, src43_l, src65_l); ++ DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_r, src32_r, src54_r, src21_r); ++ DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); ++ DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_l, src32_l, src54_l, src21_l); ++ DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, src43_l, src65_l); + + for (loop_cnt = (height >> 1); loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, +- src7, src8); ++ DUP2_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, ++ src7, src8); + src0_ptr_tmp += src_stride_2x; +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr_tmp, 0, src1_ptr_tmp + src2_stride, 0, +- in0, in1); +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr_tmp, 16, src1_ptr_tmp + src2_stride, +- 16, in2, in3); ++ DUP2_ARG2(__lsx_vld, src1_ptr_tmp, 0, src1_ptr_tmp + src2_stride, 0, ++ in0, in1); ++ DUP2_ARG2(__lsx_vld, src1_ptr_tmp, 16, src1_ptr_tmp + src2_stride, ++ 16, in2, in3); + src1_ptr_tmp += src2_stride_2x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src7, src8); +- +- LSX_DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src76_l, src87_l); +- +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, dst0_r, src54_r, filt2, dst0_r, src76_r, filt3, dst0_r, +- dst0_r, dst0_r, dst0_r); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, +- filt1, dst1_r, src65_r, filt2, dst1_r, src87_r, filt3, dst1_r, +- dst1_r, dst1_r, dst1_r); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, +- filt1, dst0_l, src54_l, filt2, dst0_l, src76_l, filt3, dst0_l, +- dst0_l, dst0_l, dst0_l); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, +- filt1, dst1_l, src65_l, filt2, dst1_l, src87_l, filt3, dst1_l, +- dst1_l, dst1_l, dst1_l); ++ DUP2_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src7, src8); ++ ++ DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); ++ DUP2_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src76_l, src87_l); ++ ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, dst0_r, src54_r, filt2, dst0_r, src76_r, filt3, dst0_r, ++ dst0_r, dst0_r, dst0_r); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, ++ filt1, dst1_r, src65_r, filt2, dst1_r, src87_r, filt3, dst1_r, ++ dst1_r, dst1_r, dst1_r); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, ++ filt1, dst0_l, src54_l, filt2, dst0_l, src76_l, filt3, dst0_l, ++ dst0_l, dst0_l, dst0_l); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, ++ filt1, dst1_l, src65_l, filt2, dst1_l, src87_l, filt3, dst1_l, ++ dst1_l, dst1_l, dst1_l); + + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst0_l, dst1_l, + &dst0_r, &dst1_r, &dst0_l, &dst1_l); + +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); ++ DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); + + __lsx_vst(dst0_r, dst_tmp, 0); + __lsx_vst(dst1_r, dst_tmp + dst_stride, 0); +@@ -1434,15 +1428,15 @@ void hevc_hv_bi_8t_8multx1mult_lsx(uint8_t *src0_ptr, + src0_ptr -= src_stride_3x + 3; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, filter_x, 6, +- filt0, filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, filter_x, 6, ++ filt0, filt1, filt2, filt3); + filt_h3 = __lsx_vld(filter_y, 0); + filt_h3 = __lsx_vsllwil_h_b(filt_h3, 0); + +- LSX_DUP4_ARG2(__lsx_vreplvei_w, filt_h3, 0, filt_h3, 1, filt_h3, 2, filt_h3, 3, +- filt_h0, filt_h1, filt_h2, filt_h3); ++ DUP4_ARG2(__lsx_vreplvei_w, filt_h3, 0, filt_h3, 1, filt_h3, 2, filt_h3, 3, ++ filt_h0, filt_h1, filt_h2, filt_h3); + +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + + for (cnt = width >> 3; cnt--;) { +@@ -1450,27 +1444,27 @@ void hevc_hv_bi_8t_8multx1mult_lsx(uint8_t *src0_ptr, + dst_tmp = dst; + src1_ptr_tmp = src1_ptr; + +- LSX_DUP4_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, +- src0_ptr_tmp + src_stride_2x, 0, src0_ptr_tmp + src_stride_3x, 0, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, ++ src0_ptr_tmp + src_stride_2x, 0, src0_ptr_tmp + src_stride_3x, 0, ++ src0, src1, src2, src3); + src0_ptr_tmp += src_stride_4x; +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, src4, src5); ++ DUP2_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, src4, src5); + src6 = __lsx_vld(src0_ptr_tmp + src_stride_2x, 0); + src0_ptr_tmp += src_stride_3x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); + + /* row 0 row 1 row 2 row 3 */ +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, +- mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, +- mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, +- mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, +- mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, ++ mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, ++ mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, ++ mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); ++ DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, ++ mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); + dst0 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, filt2, + filt3); + dst1 = __lsx_hevc_filt_8tap_h(vec4, vec5, vec6, vec7, filt0, filt1, filt2, +@@ -1480,12 +1474,12 @@ void hevc_hv_bi_8t_8multx1mult_lsx(uint8_t *src0_ptr, + dst3 = __lsx_hevc_filt_8tap_h(vec12, vec13, vec14, vec15, filt0, filt1, + filt2, filt3); + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, +- mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, src5, +- mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, src6, +- mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); ++ DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, ++ mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, src5, ++ mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, src6, ++ mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); + dst4 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, filt2, + filt3); + dst5 = __lsx_hevc_filt_8tap_h(vec4, vec5, vec6, vec7, filt0, filt1, filt2, +@@ -1501,14 +1495,14 @@ void hevc_hv_bi_8t_8multx1mult_lsx(uint8_t *src0_ptr, + in0 = __lsx_vld(src1_ptr_tmp, 0); + src1_ptr_tmp += src2_stride; + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, src7, +- src7, mask2, src7, src7, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, src7, ++ src7, mask2, src7, src7, mask3, vec0, vec1, vec2, vec3); + dst7 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, + filt2, filt3); +- LSX_DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, +- dst10_r, dst32_r, dst54_r, dst76_r); +- LSX_DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, +- dst10_l, dst32_l, dst54_l, dst76_l); ++ DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, ++ dst10_r, dst32_r, dst54_r, dst76_r); ++ DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, ++ dst10_l, dst32_l, dst54_l, dst76_l); + + dst0_r = __lsx_hevc_filt_8tap_w(dst10_r, dst32_r, dst54_r, dst76_r, + filt_h0, filt_h1, filt_h2, filt_h3); +@@ -1518,7 +1512,7 @@ void hevc_hv_bi_8t_8multx1mult_lsx(uint8_t *src0_ptr, + dst0_l = __lsx_vsrli_w(dst0_l, 6); + + tmp = __lsx_vpickev_h(dst0_l, dst0_r); +- LSX_DUP2_ARG2(__lsx_vsadd_h, tmp, in0, tmp, const_vec, tmp, tmp); ++ DUP2_ARG2(__lsx_vsadd_h, tmp, in0, tmp, const_vec, tmp, tmp); + tmp = __lsx_vmaxi_h(tmp, 0); + out = __lsx_vssrlrni_bu_h(tmp, tmp, 7); + __lsx_vstelm_d(out, dst_tmp, 0, 0); +@@ -1662,85 +1656,82 @@ static void hevc_hz_bi_4t_24w_lsx(uint8_t *src0_ptr, + + src0_ptr -= 1; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); + +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 8, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 8, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 10); + + dst_tmp = dst + 16; + src1_ptr_tmp = src1_ptr + 16; + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, +- src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, +- src0, src2, src4, src6); +- LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, +- src0_ptr + src_stride_2x, 16, src0_ptr + src_stride_3x, 16, +- src1, src3, src5, src7); ++ DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, ++ src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, ++ src0, src2, src4, src6); ++ DUP4_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, ++ src0_ptr + src_stride_2x, 16, src0_ptr + src_stride_3x, 16, ++ src1, src3, src5, src7); + src0_ptr += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in0, in2, in4, in6); +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, +- src1_ptr + src2_stride_2x, 16, src1_ptr + src2_stride_3x, 16, +- in1, in3, in5, in7); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in0, in2, in4, in6); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, ++ src1_ptr + src2_stride_2x, 16, src1_ptr + src2_stride_3x, 16, ++ in1, in3, in5, in7); + src1_ptr += src2_stride_4x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src6, 128, src7, 128, src4, +- src5, src6, src7); +- +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask2, src2, src2, +- mask0, src3, src2, mask2, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, +- dst3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask3, src2, src2, +- mask1, src3, src2, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); +- +- LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src5, src4, mask2, src6, src6, +- mask0, src7, src6, mask2, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst4, dst5, dst6, +- dst7); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask1, src5, src4, mask3, src6, src6, +- mask1, src7, src6, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst4, vec0, filt1, dst5, vec1, filt1, dst6, +- vec2, filt1, dst7, vec3, filt1, dst4, dst5, dst6, dst7); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src6, 128, src7, 128, src4, ++ src5, src6, src7); ++ ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask2, src2, src2, ++ mask0, src3, src2, mask2, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask3, src2, src2, ++ mask1, src3, src2, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ ++ DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src5, src4, mask2, src6, src6, ++ mask0, src7, src6, mask2, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst4, dst5, dst6, dst7); ++ DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask1, src5, src4, mask3, src6, src6, ++ mask1, src7, src6, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst4, vec0, filt1, dst5, vec1, filt1, dst6, ++ vec2, filt1, dst7, vec3, filt1, dst4, dst5, dst6, dst7); + + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, + &dst0, &dst1, &dst2, &dst3); + __lsx_hevc_bi_rnd_clip4(in4, in5, in6, in7, dst4, dst5, dst6, dst7, + &dst4, &dst5, &dst6, &dst7); + +- LSX_DUP4_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, +- dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, ++ dst0, dst1, dst2, dst3); + __lsx_vst(dst0, dst, 0); + __lsx_vstx(dst1, dst, dst_stride); + __lsx_vstx(dst2, dst, dst_stride_2x); + __lsx_vstx(dst3, dst, dst_stride_3x); + dst += dst_stride_4x; + +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr_tmp, 0, src1_ptr_tmp + src2_stride, 0, +- src1_ptr_tmp + src2_stride_2x, 0, src1_ptr_tmp + src2_stride_3x, 0, +- in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, src1_ptr_tmp, 0, src1_ptr_tmp + src2_stride, 0, ++ src1_ptr_tmp + src2_stride_2x, 0, src1_ptr_tmp + src2_stride_3x, 0, ++ in0, in1, in2, in3); + src1_ptr_tmp += src2_stride_4x; + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src3, src3, mask0, src5, src5, +- mask0, src7, src7, mask0, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, +- dst3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask1, src3, src3, mask1, src5, src5, +- mask1, src7, src7, mask1, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src3, src3, mask0, src5, src5, ++ mask0, src7, src7, mask0, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask1, src3, src3, mask1, src5, src5, ++ mask1, src7, src7, mask1, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, + &dst0, &dst1, &dst2, &dst3); + +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); ++ DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); + __lsx_vstelm_d(dst0, dst_tmp, 0, 0); + __lsx_vstelm_d(dst0, dst_tmp + dst_stride, 0, 1); + __lsx_vstelm_d(dst1, dst_tmp + dst_stride_2x, 0, 0); +@@ -1771,33 +1762,32 @@ static void hevc_hz_bi_4t_32w_lsx(uint8_t *src0_ptr, + src0_ptr -= 1; + + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); + +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 8, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 8, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 10); + + for (loop_cnt = height; loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); + src2 = __lsx_vld(src0_ptr, 24); + src0_ptr += src_stride; +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, + 48, in0, in1, in2, in3); + src1_ptr += src2_stride; +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); + src2 = __lsx_vxori_b(src2, 128); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask2, src1, src1, +- mask0, src2, src2, mask0, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, +- dst3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask3, src1, src1, +- mask1, src2, src2, mask1, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, vec2, +- filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask2, src1, src1, ++ mask0, src2, src2, mask0, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask3, src1, src1, ++ mask1, src2, src2, mask1, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, vec2, ++ filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, + &dst0, &dst1, &dst2, &dst3); + +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); ++ DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); + __lsx_vst(dst0, dst, 0); + __lsx_vst(dst1, dst, 16); + dst += dst_stride; +@@ -1833,54 +1823,54 @@ static void hevc_vt_bi_4t_12w_lsx(uint8_t *src0_ptr, + + src0_ptr -= src_stride; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); + +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0, src1); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0, src1); + src2 = __lsx_vld(src0_ptr + src_stride_2x, 0); + src0_ptr += src_stride_3x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); + src2 = __lsx_vxori_b(src2, 128); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); ++ DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); ++ DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); + src2110 = __lsx_vilvl_d(src21_l, src10_l); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src3, src4); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src3, src4); + src0_ptr += src_stride_2x; +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src5, src6); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src5, src6); + src0_ptr += src_stride_2x; +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, +- src1_ptr + src2_stride_2x, 16, src1_ptr + src2_stride_3x, 16, +- in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, ++ src1_ptr + src2_stride_2x, 16, src1_ptr + src2_stride_3x, 16, ++ in4, in5, in6, in7); + src1_ptr += src2_stride_4x; +- LSX_DUP2_ARG2(__lsx_vilvl_d, in5, in4, in7, in6, in4, in5); +- LSX_DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, +- src4, src5, src6); ++ DUP2_ARG2(__lsx_vilvl_d, in5, in4, in7, in6, in4, in5); ++ DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, ++ src4, src5, src6); + +- LSX_DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); ++ DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); ++ DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); + src4332 = __lsx_vilvl_d(src43_l, src32_l); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src5, src4, src6, src5, src54_r, src65_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src5, src4, src6, src5, src54_l, src65_l); ++ DUP2_ARG2(__lsx_vilvl_b, src5, src4, src6, src5, src54_r, src65_r); ++ DUP2_ARG2(__lsx_vilvh_b, src5, src4, src6, src5, src54_l, src65_l); + src6554 = __lsx_vilvl_d(src65_l, src54_l); + +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, const_vec, src21_r, filt0, dst1_r, src43_r, filt1, dst0_r, +- dst0_r, dst1_r, dst1_r ); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src2110, filt0, dst0_l, src4332, +- filt1, const_vec, src32_r, filt0, dst2_r, src54_r, filt1, dst0_l, +- dst0_l, dst2_r, dst2_r); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src43_r, filt0, dst3_r, src65_r, +- filt1, const_vec, src4332, filt0, dst1_l, src6554, filt1, dst3_r, +- dst3_r, dst1_l, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, const_vec, src21_r, filt0, dst1_r, src43_r, filt1, dst0_r, ++ dst0_r, dst1_r, dst1_r ); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src2110, filt0, dst0_l, src4332, ++ filt1, const_vec, src32_r, filt0, dst2_r, src54_r, filt1, dst0_l, ++ dst0_l, dst2_r, dst2_r); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src43_r, filt0, dst3_r, src65_r, ++ filt1, const_vec, src4332, filt0, dst1_l, src6554, filt1, dst3_r, ++ dst3_r, dst1_l, dst1_l); + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst2_r, dst3_r, + &dst0_r, &dst1_r, &dst2_r, &dst3_r); + __lsx_hevc_bi_rnd_clip2(in4, in5, dst0_l, dst1_l, &dst0_l, &dst1_l); + +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst1_r); ++ DUP2_ARG2(__lsx_vpickev_b, dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst1_r); + dst0_l = __lsx_vpickev_b(dst1_l, dst0_l); + __lsx_vstelm_d(dst0_r, dst, 0, 0); + __lsx_vstelm_d(dst0_r, dst + dst_stride, 0, 1); +@@ -1923,63 +1913,63 @@ static void hevc_vt_bi_4t_16w_lsx(uint8_t *src0_ptr, + + src0_ptr -= src_stride; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); + +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0, src1); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0, src1); + src2 = __lsx_vld(src0_ptr + src_stride_2x, 0); + src0_ptr += src_stride_3x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); + src2 = __lsx_vxori_b(src2, 128); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); ++ DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); ++ DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src3, src4); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src3, src4); + src0_ptr += src_stride_2x; +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, in2, in3); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, in2, in3); + src1_ptr += src2_stride_2x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); +- +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, dst0_r, dst0_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, +- filt1, dst1_r, dst1_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, +- filt1, dst0_l, dst0_l); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, +- filt1, dst1_l, dst1_l); ++ DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); ++ DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); ++ DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); ++ ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, dst0_r, dst0_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, ++ filt1, dst1_r, dst1_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, ++ filt1, dst0_l, dst0_l); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, ++ filt1, dst1_l, dst1_l); + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst0_l, dst1_l, + &dst0_r, &dst1_r, &dst0_l, &dst1_l); + +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); ++ DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); + __lsx_vst(dst0_r, dst, 0); + __lsx_vst(dst1_r, dst + dst_stride, 0); + dst += dst_stride_2x; + +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src5, src2); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src5, src2); + src0_ptr += src_stride_2x; +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, in2, in3); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, in2, in3); + src1_ptr += src2_stride_2x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); +- +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src32_r, filt0, dst0_r, src10_r, +- filt1, dst0_r, dst0_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src32_l, filt0, dst0_l, src10_l, +- filt1, dst0_l, dst0_l); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src43_r, filt0, dst1_r, src21_r, +- filt1, dst1_r, dst1_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src43_l, filt0, dst1_l, src21_l, +- filt1, dst1_l, dst1_l); ++ DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); ++ DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); ++ DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); ++ ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src32_r, filt0, dst0_r, src10_r, ++ filt1, dst0_r, dst0_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src32_l, filt0, dst0_l, src10_l, ++ filt1, dst0_l, dst0_l); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src43_r, filt0, dst1_r, src21_r, ++ filt1, dst1_r, dst1_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src43_l, filt0, dst1_l, src21_l, ++ filt1, dst1_l, dst1_l); + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst0_l, dst1_l, + &dst0_r, &dst1_r, &dst0_l, &dst1_l); + +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); ++ DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); + __lsx_vst(dst0_r, dst, 0); + __lsx_vstx(dst1_r, dst, dst_stride); + dst += dst_stride_2x; +@@ -2013,55 +2003,55 @@ static void hevc_vt_bi_4t_24w_lsx(uint8_t *src0_ptr, + + src0_ptr -= src_stride; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); + + /* 16width */ +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0, src1); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0, src1); + src2 = __lsx_vld(src0_ptr + src_stride_2x, 0); +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); + src2 = __lsx_vxori_b(src2, 128); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); ++ DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); ++ DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); + /* 8width */ +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, src6, src7); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, src6, src7); + src8 = __lsx_vld(src0_ptr + src_stride_2x, 16); + src0_ptr += src_stride_3x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); ++ DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); + src8 = __lsx_vxori_b(src8, 128); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); ++ DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); + + for (loop_cnt = (height >> 2); loop_cnt--;) { + /* 16width */ +- LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src1_ptr, 0, +- src1_ptr + src2_stride, 0, src3, src4, in0, in1); +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, src1_ptr, +- 32, src1_ptr + src2_stride, 32, in2, in3, in4, in5); ++ DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src1_ptr, 0, ++ src1_ptr + src2_stride, 0, src3, src4, in0, in1); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, src1_ptr, ++ 32, src1_ptr + src2_stride, 32, in2, in3, in4, in5); + src1_ptr += src2_stride_2x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); ++ DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); ++ DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); ++ DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); + /* 8width */ +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, src9, src10); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, src9, src10); + src0_ptr += src_stride_2x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); ++ DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); ++ DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); + /* 16width */ +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, const_vec, src10_l, filt0, dst0_l, src32_l, filt1, dst0_r, +- dst0_r, dst0_l, dst0_l); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, +- filt1, const_vec, src21_l, filt0, dst1_l, src43_l, filt1, dst1_r, +- dst1_r, dst1_l, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, const_vec, src10_l, filt0, dst0_l, src32_l, filt1, dst0_r, ++ dst0_r, dst0_l, dst0_l); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, ++ filt1, const_vec, src21_l, filt0, dst1_l, src43_l, filt1, dst1_r, ++ dst1_r, dst1_l, dst1_l); + /* 8width */ +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src76_r, filt0, dst2_r, src98_r, +- filt1, const_vec, src87_r, filt0, dst3_r, src109_r, filt1, dst2_r, +- dst2_r, dst3_r, dst3_r); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src76_r, filt0, dst2_r, src98_r, ++ filt1, const_vec, src87_r, filt0, dst3_r, src109_r, filt1, dst2_r, ++ dst2_r, dst3_r, dst3_r); + /* 16width */ + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst0_l, dst1_l, + &dst0_r, &dst1_r, &dst0_l, &dst1_l); + __lsx_hevc_bi_rnd_clip2(in4, in5, dst2_r, dst3_r, &dst2_r, &dst3_r); + +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); ++ DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); + dst2_r = __lsx_vpickev_b(dst3_r, dst2_r); + __lsx_vst(dst0_r, dst, 0); + __lsx_vstx(dst1_r, dst, dst_stride); +@@ -2070,36 +2060,36 @@ static void hevc_vt_bi_4t_24w_lsx(uint8_t *src0_ptr, + dst += dst_stride_2x; + + /* 16width */ +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src5, src2); +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, in2, in3); +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 32, src1_ptr + src2_stride, 32, in4, in5); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src5, src2); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, in2, in3); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 32, src1_ptr + src2_stride, 32, in4, in5); + src1_ptr += src2_stride_2x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); ++ DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); ++ DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); ++ DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); + /* 8width */ +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, src11, src8); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, src11, src8); + src0_ptr += src_stride_2x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src11, 128, src8, 128, src11, src8); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src11, src10, src8, src11, src76_r, src87_r); ++ DUP2_ARG2(__lsx_vxori_b, src11, 128, src8, 128, src11, src8); ++ DUP2_ARG2(__lsx_vilvl_b, src11, src10, src8, src11, src76_r, src87_r); + /* 16width */ +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src32_r, filt0, dst0_r, src10_r, +- filt1, const_vec, src32_l, filt0, dst0_l, src10_l, filt1, dst0_r, +- dst0_r, dst0_l, dst0_l); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src43_r, filt0, dst1_r, src21_r, +- filt1, const_vec, src43_l, filt0, dst1_l, src21_l, filt1, dst1_r, +- dst1_r, dst1_l, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src32_r, filt0, dst0_r, src10_r, ++ filt1, const_vec, src32_l, filt0, dst0_l, src10_l, filt1, dst0_r, ++ dst0_r, dst0_l, dst0_l); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src43_r, filt0, dst1_r, src21_r, ++ filt1, const_vec, src43_l, filt0, dst1_l, src21_l, filt1, dst1_r, ++ dst1_r, dst1_l, dst1_l); + /* 8width */ +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src98_r, filt0, dst2_r, src76_r, +- filt1, const_vec, src109_r, filt0, dst3_r, src87_r, filt1, dst2_r, +- dst2_r, dst3_r, dst3_r); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src98_r, filt0, dst2_r, src76_r, ++ filt1, const_vec, src109_r, filt0, dst3_r, src87_r, filt1, dst2_r, ++ dst2_r, dst3_r, dst3_r); + + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst0_l, dst1_l, + &dst0_r, &dst1_r, &dst0_l, &dst1_l); + __lsx_hevc_bi_rnd_clip2(in4, in5, dst2_r, dst3_r, &dst2_r, &dst3_r); + +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); ++ DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); + dst2_r = __lsx_vpickev_b(dst3_r, dst2_r); + __lsx_vst(dst0_r, dst, 0); + __lsx_vstx(dst1_r, dst, dst_stride); +@@ -2138,45 +2128,45 @@ static void hevc_vt_bi_4t_32w_lsx(uint8_t *src0_ptr, + src0_ptr -= src_stride; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); + + /* 16width */ +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0, src1); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0, src1); + src2 = __lsx_vld(src0_ptr + src_stride_2x, 0); +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); + src2 = __lsx_vxori_b(src2, 128); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); ++ DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); ++ DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); + + /* next 16width */ +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, src6, src7); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, src6, src7); + src8 = __lsx_vld(src0_ptr + src_stride_2x, 16); + src0_ptr += src_stride_3x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); ++ DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); + src8 = __lsx_vxori_b(src8, 128); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src76_l, src87_l); ++ DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); ++ DUP2_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src76_l, src87_l); + + for (loop_cnt = (height >> 1); loop_cnt--;) { + /* 16width */ +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src3, src4); +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, in2, in3); +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 32, src1_ptr + src2_stride, 32, in4, in5); +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 48, src1_ptr + src2_stride, 48, in6, in7); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src3, src4); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, in2, in3); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 32, src1_ptr + src2_stride, 32, in4, in5); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 48, src1_ptr + src2_stride, 48, in6, in7); + src1_ptr += src2_stride_2x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); ++ DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); ++ DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); ++ DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); + /* 16width */ +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, dst0_r, dst0_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, +- filt1, dst0_l, dst0_l); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, +- filt1, dst1_r, dst1_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, +- filt1, dst1_l, dst1_l); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, dst0_r, dst0_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, ++ filt1, dst0_l, dst0_l); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, ++ filt1, dst1_r, dst1_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, ++ filt1, dst1_l, dst1_l); + /* 16width */ + __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst0_l, dst1_l, + &dst0_r, &dst1_r, &dst0_l, &dst1_l); +@@ -2187,31 +2177,31 @@ static void hevc_vt_bi_4t_32w_lsx(uint8_t *src0_ptr, + src21_l = src43_l; + src2 = src4; + +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); ++ DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); + __lsx_vst(dst0_r, dst, 0); + __lsx_vst(dst1_r, dst + dst_stride, 0); + dst += dst_stride_2x; + + /* next 16width */ +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, src9, src10); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, src9, src10); + src0_ptr += src_stride_2x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src9, src8, src10, src9, src98_l, src109_l); ++ DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); ++ DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); ++ DUP2_ARG2(__lsx_vilvh_b, src9, src8, src10, src9, src98_l, src109_l); + /* next 16width */ +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src76_r, filt0, dst2_r, src98_r, +- filt1, dst2_r, dst2_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src76_l, filt0, dst2_l, src98_l, +- filt1, dst2_l, dst2_l); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src87_r, filt0, dst3_r, src109_r, +- filt1, dst3_r, dst3_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src87_l, filt0, dst3_l, src109_l, +- filt1, dst3_l, dst3_l); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src76_r, filt0, dst2_r, src98_r, ++ filt1, dst2_r, dst2_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src76_l, filt0, dst2_l, src98_l, ++ filt1, dst2_l, dst2_l); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src87_r, filt0, dst3_r, src109_r, ++ filt1, dst3_r, dst3_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src87_l, filt0, dst3_l, src109_l, ++ filt1, dst3_l, dst3_l); + /* next 16width */ + __lsx_hevc_bi_rnd_clip4(in4, in5, in6, in7, dst2_r, dst3_r, dst2_l, dst3_l, + &dst2_r, &dst3_r, &dst2_l, &dst3_l); + +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst2_l, dst2_r, dst3_l, dst3_r, dst2_r, dst3_r); ++ DUP2_ARG2(__lsx_vpickev_b, dst2_l, dst2_r, dst3_l, dst3_r, dst2_r, dst3_r); + __lsx_vst(dst2_r, dst_tmp, 0); + __lsx_vstx(dst3_r, dst_tmp, dst_stride); + dst_tmp += dst_stride_2x; +@@ -2258,41 +2248,40 @@ static void hevc_hv_bi_4t_6w_lsx(uint8_t *src0_ptr, + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + + src0_ptr -= (src_stride + 1); +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); + + filt_h1 = __lsx_vld(filter_y, 0); + filt_h1 = __lsx_vsllwil_h_b(filt_h1, 0); +- LSX_DUP2_ARG2(__lsx_vreplvei_w, filt_h1, 0, filt_h1, 1, filt_h0, filt_h1); ++ DUP2_ARG2(__lsx_vreplvei_w, filt_h1, 0, filt_h1, 1, filt_h0, filt_h1); + + mask1 = __lsx_vaddi_bu(mask0, 2); + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0, src1); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0, src1); + src2 = __lsx_vld(src0_ptr + src_stride_2x, 0); + src0_ptr += src_stride_3x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); + src2 = __lsx_vxori_b(src2, 128); + +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); + + dsth0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); + dsth1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); + dsth2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); + +- LSX_DUP2_ARG2(__lsx_vilvl_h, dsth1, dsth0, dsth2, dsth1, tmp0, tmp2); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dsth1, dsth0, dsth2, dsth1, tmp1, tmp3); ++ DUP2_ARG2(__lsx_vilvl_h, dsth1, dsth0, dsth2, dsth1, tmp0, tmp2); ++ DUP2_ARG2(__lsx_vilvh_h, dsth1, dsth0, dsth2, dsth1, tmp1, tmp3); + +- LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, +- src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, src3, src4, +- src5, src6); +- LSX_DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, src4, +- src5, src6); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); ++ DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0_ptr + src_stride_2x, ++ 0, src0_ptr + src_stride_3x, 0, src3, src4, src5, src6); ++ DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, src4, ++ src5, src6); ++ DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); + + dsth3 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); + dsth4 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +@@ -2300,79 +2289,77 @@ static void hevc_hv_bi_4t_6w_lsx(uint8_t *src0_ptr, + dsth6 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); + + src0_ptr += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, +- src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, src3, src4, +- src5, src6); +- LSX_DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, src4, +- src5, src6); ++ DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0_ptr + src_stride_2x, ++ 0, src0_ptr + src_stride_3x, 0, src3, src4, src5, src6); ++ DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, src4, ++ src5, src6); + +- LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); ++ DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); + + dsth7 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); + dsth8 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); + dsth9 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); + dsth10 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); + +- LSX_DUP2_ARG2(__lsx_vilvl_h, dsth3, dsth2, dsth4, dsth3, tmp4, tmp6); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dsth3, dsth2, dsth4, dsth3, tmp5, tmp7); +- LSX_DUP2_ARG2(__lsx_vilvl_h, dsth5, dsth4, dsth6, dsth5, dsth0, dsth2); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dsth5, dsth4, dsth6, dsth5, dsth1, dsth3); ++ DUP2_ARG2(__lsx_vilvl_h, dsth3, dsth2, dsth4, dsth3, tmp4, tmp6); ++ DUP2_ARG2(__lsx_vilvh_h, dsth3, dsth2, dsth4, dsth3, tmp5, tmp7); ++ DUP2_ARG2(__lsx_vilvl_h, dsth5, dsth4, dsth6, dsth5, dsth0, dsth2); ++ DUP2_ARG2(__lsx_vilvh_h, dsth5, dsth4, dsth6, dsth5, dsth1, dsth3); + dst0_r = __lsx_hevc_filt_4tap_w(tmp0, tmp4, filt_h0, filt_h1); + dst1_r = __lsx_hevc_filt_4tap_w(tmp2, tmp6, filt_h0, filt_h1); + dst2_r = __lsx_hevc_filt_4tap_w(tmp4, dsth0, filt_h0, filt_h1); + dst3_r = __lsx_hevc_filt_4tap_w(tmp6, dsth2, filt_h0, filt_h1); +- LSX_DUP2_ARG2(__lsx_vpickev_d, tmp3, tmp1, tmp7, tmp5, tmp0, tmp8); ++ DUP2_ARG2(__lsx_vpickev_d, tmp3, tmp1, tmp7, tmp5, tmp0, tmp8); + dst0_l = __lsx_hevc_filt_4tap_w(tmp0, tmp8, filt_h0, filt_h1); + +- LSX_DUP2_ARG2(__lsx_vilvl_h, dsth7, dsth6, dsth8, dsth7, tmp0, tmp2); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dsth7, dsth6, dsth8, dsth7, tmp1, tmp3); +- LSX_DUP2_ARG2(__lsx_vilvl_h, dsth9, dsth8, dsth10, dsth9, tmp4, tmp6); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dsth9, dsth8, dsth10, dsth9, tmp5, tmp7); ++ DUP2_ARG2(__lsx_vilvl_h, dsth7, dsth6, dsth8, dsth7, tmp0, tmp2); ++ DUP2_ARG2(__lsx_vilvh_h, dsth7, dsth6, dsth8, dsth7, tmp1, tmp3); ++ DUP2_ARG2(__lsx_vilvl_h, dsth9, dsth8, dsth10, dsth9, tmp4, tmp6); ++ DUP2_ARG2(__lsx_vilvh_h, dsth9, dsth8, dsth10, dsth9, tmp5, tmp7); + dst4_r = __lsx_hevc_filt_4tap_w(dsth0, tmp0, filt_h0, filt_h1); + dst5_r = __lsx_hevc_filt_4tap_w(dsth2, tmp2, filt_h0, filt_h1); + dst6_r = __lsx_hevc_filt_4tap_w(tmp0, tmp4, filt_h0, filt_h1); + dst7_r = __lsx_hevc_filt_4tap_w(tmp2, tmp6, filt_h0, filt_h1); +- LSX_DUP2_ARG2(__lsx_vpickev_d, dsth3, dsth1, tmp3, tmp1, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vpickev_d, dsth3, dsth1, tmp3, tmp1, tmp0, tmp1); + tmp2 = __lsx_vpickev_d(tmp7, tmp5); + + dst1_l = __lsx_hevc_filt_4tap_w(tmp8, tmp0, filt_h0, filt_h1); + dst2_l = __lsx_hevc_filt_4tap_w(tmp0, tmp1, filt_h0, filt_h1); + dst3_l = __lsx_hevc_filt_4tap_w(tmp1, tmp2, filt_h0, filt_h1); + +- LSX_DUP4_ARG2(__lsx_vsrai_d, dst0_r, 6, dst1_r, 6, dst2_r, 6, dst3_r, 6, dst0_r, +- dst1_r, dst2_r, dst3_r); +- LSX_DUP4_ARG2(__lsx_vsrai_d, dst4_r, 6, dst5_r, 6, dst6_r, 6, dst7_r, 6, dst4_r, +- dst5_r, dst6_r, dst7_r); +- LSX_DUP4_ARG2(__lsx_vsrai_d, dst0_l, 6, dst1_l, 6, dst2_l, 6, dst3_l, 6, dst0_l, +- dst1_l, dst2_l, dst3_l); +- LSX_DUP2_ARG2(__lsx_vpickev_h, dst1_r, dst0_r, dst3_r, dst2_r, tmp0, tmp1); +- LSX_DUP2_ARG2(__lsx_vpickev_h, dst5_r, dst4_r, dst7_r, dst6_r, tmp2, tmp3); +- LSX_DUP2_ARG2(__lsx_vpickev_h, dst1_l, dst0_l, dst3_l, dst2_l, tmp4, tmp5); ++ DUP4_ARG2(__lsx_vsrai_d, dst0_r, 6, dst1_r, 6, dst2_r, 6, dst3_r, 6, dst0_r, ++ dst1_r, dst2_r, dst3_r); ++ DUP4_ARG2(__lsx_vsrai_d, dst4_r, 6, dst5_r, 6, dst6_r, 6, dst7_r, 6, dst4_r, ++ dst5_r, dst6_r, dst7_r); ++ DUP4_ARG2(__lsx_vsrai_d, dst0_l, 6, dst1_l, 6, dst2_l, 6, dst3_l, 6, dst0_l, ++ dst1_l, dst2_l, dst3_l); ++ DUP2_ARG2(__lsx_vpickev_h, dst1_r, dst0_r, dst3_r, dst2_r, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vpickev_h, dst5_r, dst4_r, dst7_r, dst6_r, tmp2, tmp3); ++ DUP2_ARG2(__lsx_vpickev_h, dst1_l, dst0_l, dst3_l, dst2_l, tmp4, tmp5); + + tp0 = *(uint64_t *)src1_ptr; + tp1 = *(uint64_t *)(src1_ptr + src2_stride); +- LSX_DUP2_ARG3(__lsx_vinsgr2vr_d, zero, tp0, 0, dsth0, tp1, 1, dsth0, dsth0); ++ DUP2_ARG3(__lsx_vinsgr2vr_d, zero, tp0, 0, dsth0, tp1, 1, dsth0, dsth0); + tp0 = *(uint64_t *)(src1_ptr + src2_stride_2x); + tp1 = *(uint64_t *)(src1_ptr + src2_stride_3x); +- LSX_DUP2_ARG3(__lsx_vinsgr2vr_d, zero, tp0, 0, dsth1, tp1, 1, dsth1, dsth1); ++ DUP2_ARG3(__lsx_vinsgr2vr_d, zero, tp0, 0, dsth1, tp1, 1, dsth1, dsth1); + src1_ptr += src2_stride_4x; + tp0 = *(uint64_t *)src1_ptr; + tp1 = *(uint64_t *)(src1_ptr + src2_stride); +- LSX_DUP2_ARG3(__lsx_vinsgr2vr_d, zero, tp0, 0, dsth2, tp1, 1, dsth2, dsth2); ++ DUP2_ARG3(__lsx_vinsgr2vr_d, zero, tp0, 0, dsth2, tp1, 1, dsth2, dsth2); + tp0 = *(uint64_t *)(src1_ptr + src2_stride_2x); + tp1 = *(uint64_t *)(src1_ptr + src2_stride_3x); +- LSX_DUP2_ARG3(__lsx_vinsgr2vr_d, zero, tp0, 0, dsth3, tp1, 1, dsth3, dsth3); ++ DUP2_ARG3(__lsx_vinsgr2vr_d, zero, tp0, 0, dsth3, tp1, 1, dsth3, dsth3); + +- LSX_DUP4_ARG2(__lsx_vsadd_h, dsth0, const_vec, dsth1, const_vec, dsth2, const_vec, +- dsth3, const_vec, dsth0, dsth1, dsth2, dsth3); +- LSX_DUP4_ARG2(__lsx_vsadd_h, dsth0, tmp0, dsth1, tmp1, dsth2, tmp2, dsth3, tmp3, +- tmp0, tmp1, tmp2, tmp3); +- LSX_DUP4_ARG2(__lsx_vmaxi_h, tmp0, 0, tmp1, 0, tmp2, 0, tmp3, 0, tmp0, tmp1, tmp2, +- tmp3); +- LSX_DUP2_ARG3(__lsx_vssrlrni_bu_h, tmp1, tmp0, 7, tmp3, tmp2, 7, out0, out1); ++ DUP4_ARG2(__lsx_vsadd_h, dsth0, const_vec, dsth1, const_vec, dsth2, const_vec, ++ dsth3, const_vec, dsth0, dsth1, dsth2, dsth3); ++ DUP4_ARG2(__lsx_vsadd_h, dsth0, tmp0, dsth1, tmp1, dsth2, tmp2, dsth3, tmp3, ++ tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vmaxi_h, tmp0, 0, tmp1, 0, tmp2, 0, tmp3, 0, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG3(__lsx_vssrlrni_bu_h, tmp1, tmp0, 7, tmp3, tmp2, 7, out0, out1); + + __lsx_vstelm_w(out0, dst, 0, 0); + __lsx_vstelm_w(out0, dst + dst_stride, 0, 1); +@@ -2390,18 +2377,18 @@ static void hevc_hv_bi_4t_6w_lsx(uint8_t *src0_ptr, + tpw1 = *(uint32_t *)(src1_ptr + 4 + src2_stride); + tpw2 = *(uint32_t *)(src1_ptr + 4 + src2_stride_2x); + tpw3 = *(uint32_t *)(src1_ptr + 4 + src2_stride_3x); +- LSX_DUP4_ARG3(__lsx_vinsgr2vr_w, zero, tpw0, 0, dsth4, tpw1, 1, dsth4, tpw2, 2, +- dsth4, tpw3, 3, dsth4, dsth4, dsth4, dsth4); ++ DUP4_ARG3(__lsx_vinsgr2vr_w, zero, tpw0, 0, dsth4, tpw1, 1, dsth4, tpw2, 2, ++ dsth4, tpw3, 3, dsth4, dsth4, dsth4, dsth4); + src1_ptr += src2_stride_4x; + tpw0 = *(uint32_t *)(src1_ptr + 4); + tpw1 = *(uint32_t *)(src1_ptr + 4 + src2_stride); + tpw2 = *(uint32_t *)(src1_ptr + 4 + src2_stride_2x); + tpw3 = *(uint32_t *)(src1_ptr + 4 + src2_stride_3x); +- LSX_DUP4_ARG3(__lsx_vinsgr2vr_w, zero, tpw0, 0, dsth5, tpw1, 1, dsth5, tpw2, 2, +- dsth5, tpw3, 3, dsth5, dsth5, dsth5, dsth5); +- LSX_DUP2_ARG2(__lsx_vsadd_h, dsth4, const_vec, dsth5, const_vec, dsth4, dsth5); +- LSX_DUP2_ARG2(__lsx_vsadd_h, dsth4, tmp4, dsth5, tmp5, tmp4, tmp5); +- LSX_DUP2_ARG2(__lsx_vmaxi_h, tmp4, 0, tmp5, 7, tmp4, tmp5); ++ DUP4_ARG3(__lsx_vinsgr2vr_w, zero, tpw0, 0, dsth5, tpw1, 1, dsth5, tpw2, 2, ++ dsth5, tpw3, 3, dsth5, dsth5, dsth5, dsth5); ++ DUP2_ARG2(__lsx_vsadd_h, dsth4, const_vec, dsth5, const_vec, dsth4, dsth5); ++ DUP2_ARG2(__lsx_vsadd_h, dsth4, tmp4, dsth5, tmp5, tmp4, tmp5); ++ DUP2_ARG2(__lsx_vmaxi_h, tmp4, 0, tmp5, 7, tmp4, tmp5); + out0 = __lsx_vssrlrni_bu_h(tmp5, tmp4, 7); + + __lsx_vstelm_h(out0, dst, 4, 0); +@@ -2445,31 +2432,30 @@ void hevc_hv_bi_4t_8x2_lsx(uint8_t *src0_ptr, + __m128i in0, in1; + + src0_ptr -= (src_stride + 1); +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); + + filter_vec = __lsx_vld(filter_y, 0); + filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); +- LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); + + mask1 = __lsx_vaddi_bu(mask0, 2); + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, +- src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, src0, src1, +- src2, src3); ++ DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0_ptr + src_stride_2x, ++ 0, src0_ptr + src_stride_3x, 0, src0, src1, src2, src3); + src4 = __lsx_vld(src0_ptr + src_stride_4x, 0); +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, +- src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, ++ src2, src3); + src4 = __lsx_vxori_b(src4, 128); + +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); +- LSX_DUP2_ARG2(__lsx_vsadd_h, in0, const_vec, in1, const_vec, in0, in1); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); ++ DUP2_ARG2(__lsx_vsadd_h, in0, const_vec, in1, const_vec, in0, in1); + +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec6, vec7); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec8, vec9); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec6, vec7); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec8, vec9); + + dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); + dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +@@ -2477,19 +2463,19 @@ void hevc_hv_bi_4t_8x2_lsx(uint8_t *src0_ptr, + dst3 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); + dst4 = __lsx_hevc_filt_4tap_h(vec8, vec9, filt0, filt1); + +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); ++ DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); ++ DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); + dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); + dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); + dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); + dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); +- LSX_DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, dst0_r, +- dst0_l, dst1_r, dst1_l); +- LSX_DUP2_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, tmp0, tmp1); +- LSX_DUP2_ARG2(__lsx_vsadd_h, in0, tmp0, in1, tmp1, tmp0, tmp1); +- LSX_DUP2_ARG2(__lsx_vmaxi_h, tmp0, 0, tmp1, 0, tmp0, tmp1); ++ DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, dst0_r, ++ dst0_l, dst1_r, dst1_l); ++ DUP2_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vsadd_h, in0, tmp0, in1, tmp1, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vmaxi_h, tmp0, 0, tmp1, 0, tmp0, tmp1); + out = __lsx_vssrlrni_bu_h(tmp1, tmp0, 7); + __lsx_vstelm_d(out, dst, 0, 0); + __lsx_vstelm_d(out, dst + dst_stride, 0, 1); +@@ -2526,61 +2512,61 @@ void hevc_hv_bi_4t_8multx4_lsx(uint8_t *src0_ptr, + __m128i dst10_l, dst32_l, dst54_l, dst21_l, dst43_l, dst65_l; + + src0_ptr -= (src_stride + 1); +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); + + filter_vec = __lsx_vld(filter_y, 0); + filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); +- LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); + + mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + mask1 = __lsx_vaddi_bu(mask0, 2); + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + for (cnt = width8mult; cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, +- src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, src0, +- src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, ++ src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, src0, ++ src1, src2, src3); + src0_ptr += src_stride_4x; +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src4, src5); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src4, src5); + src6 = __lsx_vld(src0_ptr + src_stride_2x, 0); + src0_ptr += (8 - src_stride_4x); +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); + +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, ++ in0, in1, in2, in3); + src1_ptr += 8; +- LSX_DUP4_ARG2(__lsx_vsadd_h, in0, const_vec, in1, const_vec, in2, const_vec, +- in3, const_vec, in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vsadd_h, in0, const_vec, in1, const_vec, in2, const_vec, ++ in3, const_vec, in0, in1, in2, in3); + +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); + + dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); + dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); + dst2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); + +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); ++ DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); + +- LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); ++ DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); + + dst3 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); + dst4 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); + dst5 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); + dst6 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); + +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst54_r, dst65_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst54_l, dst65_l); ++ DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); ++ DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst54_r, dst65_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst54_l, dst65_l); + + dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); + dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +@@ -2591,17 +2577,17 @@ void hevc_hv_bi_4t_8multx4_lsx(uint8_t *src0_ptr, + dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); + dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); + +- LSX_DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, +- dst0_r, dst0_l, dst1_r, dst1_l); +- LSX_DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, +- dst2_r, dst2_l, dst3_r, dst3_l); +- LSX_DUP4_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, dst2_r, +- dst3_l, dst3_r, tmp0, tmp1, tmp2, tmp3); +- LSX_DUP4_ARG2(__lsx_vsadd_h, in0, tmp0, in1, tmp1, in2, tmp2, in3, tmp3, +- tmp0, tmp1, tmp2, tmp3); +- LSX_DUP4_ARG2(__lsx_vmaxi_h, tmp0, 0, tmp1, 0, tmp2, 0, tmp3, 0, tmp0, tmp1, +- tmp2, tmp3); +- LSX_DUP2_ARG3(__lsx_vssrlrni_bu_h, tmp1, tmp0, 7, tmp3, tmp2, 7, out0, out1); ++ DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, ++ dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, ++ dst2_r, dst2_l, dst3_r, dst3_l); ++ DUP4_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, dst2_r, ++ dst3_l, dst3_r, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vsadd_h, in0, tmp0, in1, tmp1, in2, tmp2, in3, tmp3, ++ tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vmaxi_h, tmp0, 0, tmp1, 0, tmp2, 0, tmp3, 0, tmp0, tmp1, ++ tmp2, tmp3); ++ DUP2_ARG3(__lsx_vssrlrni_bu_h, tmp1, tmp0, 7, tmp3, tmp2, 7, out0, out1); + __lsx_vstelm_d(out0, dst, 0, 0); + __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); + __lsx_vstelm_d(out1, dst + dst_stride_2x, 0, 0); +@@ -2650,48 +2636,46 @@ void hevc_hv_bi_4t_8x6_lsx(uint8_t *src0_ptr, + __m128i dst76_r, dst76_l, dst87_r, dst87_l; + + src0_ptr -= (src_stride + 1); +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); + + filter_vec = __lsx_vld(filter_y, 0); + filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); +- LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); + + mask1 = __lsx_vaddi_bu(mask0, 2); + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, +- src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, src0, src1, +- src2, src3); ++ DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0_ptr + src_stride_2x, ++ 0, src0_ptr + src_stride_3x, 0, src0, src1, src2, src3); + src0_ptr += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, +- src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, src4, src5, +- src6, src7); ++ DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0_ptr + src_stride_2x, ++ 0, src0_ptr + src_stride_3x, 0, src4, src5, src6, src7); + src8 = __lsx_vld(src0_ptr + src_stride_4x, 0); + +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, +- src2, src3); +- LSX_DUP4_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src6, 128, src7, 128, src4, src5, +- src6, src7) ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, ++ src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src6, 128, src7, 128, src4, src5, ++ src6, src7) + src8 = __lsx_vxori_b(src8, 128); + +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, in0, in1, +- in2, in3); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, ++ src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, in0, in1, ++ in2, in3); + src1_ptr += src2_stride_4x; +- LSX_DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in4, in5); +- LSX_DUP4_ARG2(__lsx_vsadd_h, in0, const_vec, in1, const_vec, in2, const_vec, in3, +- const_vec, in0, in1, in2, in3); +- LSX_DUP2_ARG2(__lsx_vsadd_h, in4, const_vec, in5, const_vec, in4, in5); +- +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec6, vec7); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec8, vec9); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec10, vec11); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec12, vec13); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, vec14, vec15); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src8, src8, mask0, src8, src8, mask1, vec16, vec17); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in4, in5); ++ DUP4_ARG2(__lsx_vsadd_h, in0, const_vec, in1, const_vec, in2, const_vec, in3, ++ const_vec, in0, in1, in2, in3); ++ DUP2_ARG2(__lsx_vsadd_h, in4, const_vec, in5, const_vec, in4, in5); ++ ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec6, vec7); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec8, vec9); ++ DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec10, vec11); ++ DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec12, vec13); ++ DUP2_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, vec14, vec15); ++ DUP2_ARG3(__lsx_vshuf_b, src8, src8, mask0, src8, src8, mask1, vec16, vec17); + + dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); + dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +@@ -2703,14 +2687,14 @@ void hevc_hv_bi_4t_8x6_lsx(uint8_t *src0_ptr, + dst7 = __lsx_hevc_filt_4tap_h(vec14, vec15, filt0, filt1); + dst8 = __lsx_hevc_filt_4tap_h(vec16, vec17, filt0, filt1); + +- LSX_DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, +- dst10_r, dst21_r, dst32_r, dst43_r); +- LSX_DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, +- dst10_l, dst21_l, dst32_l, dst43_l); +- LSX_DUP4_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst7, dst6, dst8, dst7, +- dst54_r, dst65_r, dst76_r, dst87_r); +- LSX_DUP4_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst7, dst6, dst8, dst7, +- dst54_l, dst65_l, dst76_l, dst87_l); ++ DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, ++ dst10_r, dst21_r, dst32_r, dst43_r); ++ DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, ++ dst10_l, dst21_l, dst32_l, dst43_l); ++ DUP4_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst7, dst6, dst8, dst7, ++ dst54_r, dst65_r, dst76_r, dst87_r); ++ DUP4_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst7, dst6, dst8, dst7, ++ dst54_l, dst65_l, dst76_l, dst87_l); + + dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); + dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +@@ -2725,22 +2709,21 @@ void hevc_hv_bi_4t_8x6_lsx(uint8_t *src0_ptr, + dst5_r = __lsx_hevc_filt_4tap_w(dst65_r, dst87_r, filt_h0, filt_h1); + dst5_l = __lsx_hevc_filt_4tap_w(dst65_l, dst87_l, filt_h0, filt_h1); + +- LSX_DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, dst0_r, +- dst0_l, dst1_r, dst1_l); +- LSX_DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, dst2_r, +- dst2_l, dst3_r, dst3_l); +- LSX_DUP4_ARG2(__lsx_vsrai_w, dst4_r, 6, dst4_l, 6, dst5_r, 6, dst5_l, 6, dst4_r, +- dst4_l, dst5_r, dst5_l); +- LSX_DUP4_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, dst2_r, +- dst3_l, dst3_r, tmp0, tmp1, tmp2, tmp3); +- LSX_DUP2_ARG2(__lsx_vpickev_h, dst4_l, dst4_r, dst5_l, dst5_r, tmp4, tmp5); +- LSX_DUP4_ARG2(__lsx_vsadd_h, in0, tmp0, in1, tmp1, in2, tmp2, in3, tmp3, tmp0, tmp1, +- tmp2, tmp3); +- LSX_DUP2_ARG2(__lsx_vsadd_h, in4, tmp4, in5, tmp5, tmp4, tmp5); +- LSX_DUP4_ARG2(__lsx_vmaxi_h, tmp0, 0, tmp1, 0, tmp2, 0, tmp3, 0, tmp0, tmp1, tmp2, +- tmp3); +- LSX_DUP2_ARG2(__lsx_vmaxi_h, tmp4, 0, tmp5, 0, tmp4, tmp5); +- LSX_DUP2_ARG3(__lsx_vssrlrni_bu_h, tmp1, tmp0, 7, tmp3, tmp2, 7, out0, out1); ++ DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, dst0_r, ++ dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, dst2_r, ++ dst2_l, dst3_r, dst3_l); ++ DUP4_ARG2(__lsx_vsrai_w, dst4_r, 6, dst4_l, 6, dst5_r, 6, dst5_l, 6, dst4_r, ++ dst4_l, dst5_r, dst5_l); ++ DUP4_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, dst2_r, ++ dst3_l, dst3_r, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lsx_vpickev_h, dst4_l, dst4_r, dst5_l, dst5_r, tmp4, tmp5); ++ DUP4_ARG2(__lsx_vsadd_h, in0, tmp0, in1, tmp1, in2, tmp2, in3, tmp3, tmp0, tmp1, ++ tmp2, tmp3); ++ DUP2_ARG2(__lsx_vsadd_h, in4, tmp4, in5, tmp5, tmp4, tmp5); ++ DUP4_ARG2(__lsx_vmaxi_h, tmp0, 0, tmp1, 0, tmp2, 0, tmp3, 0, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lsx_vmaxi_h, tmp4, 0, tmp5, 0, tmp4, tmp5); ++ DUP2_ARG3(__lsx_vssrlrni_bu_h, tmp1, tmp0, 7, tmp3, tmp2, 7, out0, out1); + out2 = __lsx_vssrlrni_bu_h(tmp5, tmp4, 7); + __lsx_vstelm_d(out0, dst, 0, 0); + __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); +@@ -2794,12 +2777,12 @@ void hevc_hv_bi_4t_8multx4mult_lsx(uint8_t *src0_ptr, + + src0_ptr -= (src_stride + 1); + +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); + + filter_vec = __lsx_vld(filter_y, 0); + filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); + +- LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); + + mask1 = __lsx_vaddi_bu(mask0, 2); + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +@@ -2809,52 +2792,52 @@ void hevc_hv_bi_4t_8multx4mult_lsx(uint8_t *src0_ptr, + dst_tmp = dst; + src1_ptr_tmp = src1_ptr; + +- LSX_DUP2_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, src0, src1); ++ DUP2_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, src0, src1); + src2 = __lsx_vld(src0_ptr_tmp + src_stride_2x, 0); + src0_ptr_tmp += src_stride_3x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); + src2 = __lsx_vxori_b(src2, 128); + +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); + + dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); + dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); + dst2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); + +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); ++ DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); + + for (loop_cnt = height >> 2; loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, +- src0_ptr_tmp + src_stride_2x, 0, src0_ptr_tmp + src_stride_3x, +- 0, src3, src4, src5, src6); ++ DUP4_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, ++ src0_ptr_tmp + src_stride_2x, 0, src0_ptr_tmp + src_stride_3x, ++ 0, src3, src4, src5, src6); + src0_ptr_tmp += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src1_ptr_tmp, 0, src1_ptr_tmp + src2_stride, 0, +- src1_ptr_tmp + src2_stride_2x, 0, src1_ptr_tmp + src2_stride_3x, +- 0, in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, src1_ptr_tmp, 0, src1_ptr_tmp + src2_stride, 0, ++ src1_ptr_tmp + src2_stride_2x, 0, src1_ptr_tmp + src2_stride_3x, ++ 0, in0, in1, in2, in3); + src1_ptr_tmp += src2_stride_4x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, +- src3, src4, src5, src6); ++ DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, ++ src3, src4, src5, src6); + +- LSX_DUP4_ARG2(__lsx_vsadd_h, in0, const_vec, in1, const_vec, in2, +- const_vec, in3, const_vec, in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vsadd_h, in0, const_vec, in1, const_vec, in2, ++ const_vec, in3, const_vec, in0, in1, in2, in3); + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src4, +- src4, mask0, src4, src4, mask1, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src6, +- src6, mask0, src6, src6, mask1, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src4, ++ src4, mask0, src4, src4, mask1, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src6, ++ src6, mask0, src6, src6, mask1, vec4, vec5, vec6, vec7); + + dst3 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); + dst4 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); + dst5 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); + dst6 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); + +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst54_r, dst65_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst54_l, dst65_l); ++ DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); ++ DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst54_r, dst65_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst54_l, dst65_l); + + dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); + dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +@@ -2865,17 +2848,17 @@ void hevc_hv_bi_4t_8multx4mult_lsx(uint8_t *src0_ptr, + dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); + dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); + +- LSX_DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, +- dst0_r, dst0_l, dst1_r, dst1_l); +- LSX_DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, +- dst2_r, dst2_l, dst3_r, dst3_l); +- LSX_DUP4_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, +- dst2_r, dst3_l, dst3_r, tmp0, tmp1, tmp2, tmp3); +- LSX_DUP4_ARG2(__lsx_vsadd_h, in0, tmp0, in1, tmp1, in2, tmp2, in3, tmp3, +- tmp0, tmp1, tmp2, tmp3); +- LSX_DUP4_ARG2(__lsx_vmaxi_h, tmp0, 0, tmp1, 0, tmp2, 0, tmp3, 0, tmp0, +- tmp1, tmp2, tmp3); +- LSX_DUP2_ARG3(__lsx_vssrlrni_bu_h, tmp1, tmp0, 7, tmp3, tmp2, 7, out0, out1); ++ DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, ++ dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, ++ dst2_r, dst2_l, dst3_r, dst3_l); ++ DUP4_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, ++ dst2_r, dst3_l, dst3_r, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vsadd_h, in0, tmp0, in1, tmp1, in2, tmp2, in3, tmp3, ++ tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vmaxi_h, tmp0, 0, tmp1, 0, tmp2, 0, tmp3, 0, tmp0, ++ tmp1, tmp2, tmp3); ++ DUP2_ARG3(__lsx_vssrlrni_bu_h, tmp1, tmp0, 7, tmp3, tmp2, 7, out0, out1); + __lsx_vstelm_d(out0, dst_tmp, 0, 0); + __lsx_vstelm_d(out0, dst_tmp + dst_stride, 0, 1); + __lsx_vstelm_d(out1, dst_tmp + dst_stride_2x, 0, 0); +diff --git a/libavcodec/loongarch/hevc_mc_uni_lsx.c b/libavcodec/loongarch/hevc_mc_uni_lsx.c +index bd481c7ff1..9976502f18 100644 +--- a/libavcodec/loongarch/hevc_mc_uni_lsx.c ++++ b/libavcodec/loongarch/hevc_mc_uni_lsx.c +@@ -19,7 +19,7 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "libavutil/loongarch/generic_macros_lsx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + #include "hevcdsp_lsx.h" + #include "hevc_macros_lsx.h" + +@@ -48,40 +48,38 @@ void common_hz_8t_64w_lsx(uint8_t *src, int32_t src_stride, + src -= 3; + + /* rearranging filter */ +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); + +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + + for (loop_cnt = height; loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 8, src, 16, src, 24, src0, src1, src2, +- src3); +- LSX_DUP4_ARG2(__lsx_vld, src, 32, src, 40, src, 48, src, 56, src4, src5, src6, +- src7); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 8, src, 16, src, 24, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 32, src, 40, src, 48, src, 56, src4, src5, src6, src7); + src += src_stride; + +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src6, 128, src7, 128, src4, +- src5, src6, src7); +- +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, vec2, vec3); +- LSX_DUP4_ARG2(__lsx_dp2_h_b, vec0, filt0, vec1, filt0, vec2, filt0, vec3, filt0, +- res0, res1, res2, res3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, res0, vec0, filt2, res1, vec1, filt2, res2, +- vec2, filt2, res3, vec3, filt2, res0, res1, res2, res3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, vec4, vec5); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, vec6, vec7); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, res0, vec4, filt1, res1, vec5, filt1, res2, +- vec6, filt1, res3, vec7, filt1, res0, res1, res2, res3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, vec4, vec5); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, vec6, vec7); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, res0, vec4, filt3, res1, vec5, filt3, res2, +- vec6, filt3, res3, vec7, filt3, res0, res1, res2, res3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src6, 128, src7, 128, src4, ++ src5, src6, src7); ++ ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, vec2, vec3); ++ DUP4_ARG2(__lsx_vdp2_h_b, vec0, filt0, vec1, filt0, vec2, filt0, vec3, filt0, ++ res0, res1, res2, res3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, res0, vec0, filt2, res1, vec1, filt2, res2, ++ vec2, filt2, res3, vec3, filt2, res0, res1, res2, res3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, vec6, vec7); ++ DUP4_ARG3(__lsx_vdp2add_h_b, res0, vec4, filt1, res1, vec5, filt1, res2, ++ vec6, filt1, res3, vec7, filt1, res0, res1, res2, res3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, vec6, vec7); ++ DUP4_ARG3(__lsx_vdp2add_h_b, res0, vec4, filt3, res1, vec5, filt3, res2, ++ vec6, filt3, res3, vec7, filt3, res0, res1, res2, res3); + + out = __lsx_vssrarni_b_h(res1, res0, 6); + out = __lsx_vxori_b(out, 128); +@@ -90,27 +88,27 @@ void common_hz_8t_64w_lsx(uint8_t *src, int32_t src_stride, + out = __lsx_vxori_b(out, 128); + __lsx_vst(out, dst, 16); + +- LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src5, src5, mask0, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src7, src7, mask0, vec2, vec3); +- LSX_DUP4_ARG2(__lsx_dp2_h_b, vec0, filt0, vec1, filt0, vec2, filt0, vec3, +- filt0, res0, res1, res2, res3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask2, src5, src5, mask2, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask2, src7, src7, mask2, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, res0, vec0, filt2, res1, vec1, filt2, res2, +- vec2, filt2, res3, vec3, filt2, res0, res1, res2, res3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask1, src5, src5, mask1, vec4, vec5); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask1, src7, src7, mask1, vec6, vec7); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, res0, vec4, filt1, res1, vec5, filt1, res2, +- vec6, filt1, res3, vec7, filt1, res0, res1, res2, res3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask3, src5, src5, mask3, vec4, vec5); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask3, src7, src7, mask3, vec6, vec7); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, res0, vec4, filt3, res1, vec5, filt3, res2, +- vec6, filt3, res3, vec7, filt3, res0, res1, res2, res3); +- +- LSX_DUP4_ARG2(__lsx_vsrari_h, res0, 6, res1, 6, res2, 6, res3, 6, res0, res1, +- res2, res3); +- LSX_DUP4_ARG2(__lsx_vsat_h, res0, 7, res1, 7, res2, 7, res3, 7, res0, res1, +- res2, res3); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src5, src5, mask0, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src7, src7, mask0, vec2, vec3); ++ DUP4_ARG2(__lsx_vdp2_h_b, vec0, filt0, vec1, filt0, vec2, filt0, vec3, ++ filt0, res0, res1, res2, res3); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask2, src5, src5, mask2, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask2, src7, src7, mask2, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, res0, vec0, filt2, res1, vec1, filt2, res2, ++ vec2, filt2, res3, vec3, filt2, res0, res1, res2, res3); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask1, src5, src5, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask1, src7, src7, mask1, vec6, vec7); ++ DUP4_ARG3(__lsx_vdp2add_h_b, res0, vec4, filt1, res1, vec5, filt1, res2, ++ vec6, filt1, res3, vec7, filt1, res0, res1, res2, res3); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask3, src5, src5, mask3, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask3, src7, src7, mask3, vec6, vec7); ++ DUP4_ARG3(__lsx_vdp2add_h_b, res0, vec4, filt3, res1, vec5, filt3, res2, ++ vec6, filt3, res3, vec7, filt3, res0, res1, res2, res3); ++ ++ DUP4_ARG2(__lsx_vsrari_h, res0, 6, res1, 6, res2, 6, res3, 6, res0, res1, ++ res2, res3); ++ DUP4_ARG2(__lsx_vsat_h, res0, 7, res1, 7, res2, 7, res3, 7, res0, res1, ++ res2, res3); + out = __lsx_vpickev_b(res1, res0); + out = __lsx_vxori_b(out, 128); + __lsx_vst(out, dst, 32); +@@ -141,43 +139,43 @@ void common_vt_8t_8w_lsx(uint8_t *src, int32_t src_stride, + __m128i out0_r, out1_r, out2_r, out3_r; + + src -= src_stride_3x; +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); + +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); + src += src_stride_4x; +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); + src6 = __lsx_vld(src + src_stride_2x, 0); +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, +- src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, ++ src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); + src += src_stride_3x; +- LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, src10_r, +- src32_r, src54_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); ++ DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, src10_r, ++ src32_r, src54_r, src21_r); ++ DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src7, src8, src9, src10); +- LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, +- src8, src9, src10); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, ++ src8, src9, src10); + src += src_stride_4x; + +- LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src76_r, src87_r, src98_r, src109_r); +- LSX_DUP4_ARG2(__lsx_dp2_h_b, src10_r, filt0, src21_r, filt0, src32_r, filt0, +- src43_r, filt0, out0_r, out1_r, out2_r, out3_r); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, out0_r, src32_r, filt1, out1_r, src43_r, filt1, +- out2_r, src54_r, filt1, out3_r, src65_r, filt1, out0_r, out1_r, +- out2_r, out3_r); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, out0_r, src54_r, filt2, out1_r, src65_r, filt2, +- out2_r, src76_r, filt2, out3_r, src87_r, filt2, out0_r, out1_r, +- out2_r, out3_r); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, out0_r, src76_r, filt3, out1_r, src87_r, filt3, +- out2_r, src98_r, filt3, out3_r, src109_r, filt3, out0_r, out1_r, +- out2_r, out3_r); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src76_r, src87_r, src98_r, src109_r); ++ DUP4_ARG2(__lsx_vdp2_h_b, src10_r, filt0, src21_r, filt0, src32_r, filt0, ++ src43_r, filt0, out0_r, out1_r, out2_r, out3_r); ++ DUP4_ARG3(__lsx_vdp2add_h_b, out0_r, src32_r, filt1, out1_r, src43_r, filt1, ++ out2_r, src54_r, filt1, out3_r, src65_r, filt1, out0_r, out1_r, ++ out2_r, out3_r); ++ DUP4_ARG3(__lsx_vdp2add_h_b, out0_r, src54_r, filt2, out1_r, src65_r, filt2, ++ out2_r, src76_r, filt2, out3_r, src87_r, filt2, out0_r, out1_r, ++ out2_r, out3_r); ++ DUP4_ARG3(__lsx_vdp2add_h_b, out0_r, src76_r, filt3, out1_r, src87_r, filt3, ++ out2_r, src98_r, filt3, out3_r, src109_r, filt3, out0_r, out1_r, ++ out2_r, out3_r); + + tmp0 = __lsx_vssrarni_b_h(out1_r, out0_r, 6); + tmp0 = __lsx_vxori_b(tmp0, 128); +@@ -224,42 +222,42 @@ void common_vt_8t_16w_mult_lsx(uint8_t *src, int32_t src_stride, + __m128i out0_r, out1_r, out2_r, out3_r, out0_l, out1_l, out2_l, out3_l; + + src -= src_stride_3x; +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); + + for (cnt = (width >> 4); cnt--;) { + src_tmp = src; + dst_tmp = dst; + +- LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, +- src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, src0, +- src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, src0, ++ src1, src2, src3); + src_tmp += src_stride_4x; +- LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); ++ DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); + src6 = __lsx_vld(src_tmp + src_stride_2x, 0); +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); + src_tmp += src_stride_3x; +- LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, +- src10_r, src32_r, src54_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); +- LSX_DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, +- src10_l, src32_l, src54_l, src21_l); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, src43_l, src65_l); ++ DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_r, src32_r, src54_r, src21_r); ++ DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); ++ DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_l, src32_l, src54_l, src21_l); ++ DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, src43_l, src65_l); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, +- src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, src7, +- src8, src9, src10); +- LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, +- src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, src7, ++ src8, src9, src10); ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); + src_tmp += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, +- src9, src76_r, src87_r, src98_r, src109_r); +- LSX_DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, +- src9, src76_l, src87_l, src98_l, src109_l); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, ++ src9, src76_r, src87_r, src98_r, src109_r); ++ DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, ++ src9, src76_l, src87_l, src98_l, src109_l); + out0_r = __lsx_hevc_filt_8tap_h(src10_r, src32_r, src54_r, src76_r, + filt0, filt1, filt2, filt3); + out1_r = __lsx_hevc_filt_8tap_h(src21_r, src43_r, src65_r, src87_r, +@@ -276,10 +274,10 @@ void common_vt_8t_16w_mult_lsx(uint8_t *src, int32_t src_stride, + filt0, filt1, filt2, filt3); + out3_l = __lsx_hevc_filt_8tap_h(src43_l, src65_l, src87_l, src109_l, + filt0, filt1, filt2, filt3); +- LSX_DUP4_ARG3(__lsx_vssrarni_b_h, out0_l, out0_r, 6, out1_l, out1_r, 6, +- out2_l, out2_r, 6, out3_l, out3_r, 6, tmp0, tmp1, tmp2, tmp3); +- LSX_DUP4_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp2, 128, tmp3, 128, +- tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG3(__lsx_vssrarni_b_h, out0_l, out0_r, 6, out1_l, out1_r, 6, ++ out2_l, out2_r, 6, out3_l, out3_r, 6, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp2, 128, tmp3, 128, ++ tmp0, tmp1, tmp2, tmp3); + __lsx_vst(tmp0, dst_tmp, 0); + __lsx_vstx(tmp1, dst_tmp, dst_stride); + __lsx_vstx(tmp2, dst_tmp, dst_stride_2x); +@@ -374,71 +372,71 @@ void hevc_hv_uni_8t_8multx2mult_lsx(uint8_t *src, + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + + src -= (src_stride_3x + 3); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, filter_x, 6, +- filt0, filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, filter_x, 6, ++ filt0, filt1, filt2, filt3); + + filter_vec = __lsx_vld(filter_y, 0); + filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); +- LSX_DUP4_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filter_vec, 2, +- filter_vec, 3, filt_h0, filt_h1, filt_h2, filt_h3); ++ DUP4_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filter_vec, 2, ++ filter_vec, 3, filt_h0, filt_h1, filt_h2, filt_h3); + +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + + for (cnt = width >> 3; cnt--;) { + src_tmp = src; + dst_tmp = dst; + +- LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, +- src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, src0, +- src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, src0, ++ src1, src2, src3); + src_tmp += src_stride_4x; +- LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); ++ DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); + src6 = __lsx_vld(src_tmp + src_stride_2x, 0); + src_tmp += src_stride_3x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); + + /* row 0 row 1 row 2 row 3 */ +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, +- mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, +- mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, +- mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, +- mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, ++ mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, ++ mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, ++ mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); ++ DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, ++ mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); + dst0 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3); + dst1 = __lsx_hevc_filt_8tap_h(vec4, vec5, vec6, vec7, filt0, filt1, filt2, filt3); + dst2 = __lsx_hevc_filt_8tap_h(vec8, vec9, vec10, vec11, filt0, filt1, filt2, filt3); + dst3 = __lsx_hevc_filt_8tap_h(vec12, vec13, vec14, vec15, filt0, filt1, filt2, filt3); + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, +- mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, src5, +- mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, src6, +- mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); ++ DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, ++ mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, src5, ++ mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, src6, ++ mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); + dst4 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3); + dst5 = __lsx_hevc_filt_8tap_h(vec4, vec5, vec6, vec7, filt0, filt1, filt2, filt3); + dst6 = __lsx_hevc_filt_8tap_h(vec8, vec9, vec10, vec11, filt0, filt1, filt2, filt3); + + for (loop_cnt = height >> 1; loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src7, src8); +- LSX_DUP2_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src7, src8); ++ DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src7, src8); ++ DUP2_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src7, src8); + src_tmp += src_stride_2x; + +- LSX_DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst2, dst1, +- dst10_r, dst32_r, dst54_r, dst21_r); +- LSX_DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst2, dst1, +- dst10_l, dst32_l, dst54_l, dst21_l); +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst4, dst3, dst6, dst5, dst43_r, dst65_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst4, dst3, dst6, dst5, dst43_l, dst65_l); ++ DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst2, dst1, ++ dst10_r, dst32_r, dst54_r, dst21_r); ++ DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst2, dst1, ++ dst10_l, dst32_l, dst54_l, dst21_l); ++ DUP2_ARG2(__lsx_vilvl_h, dst4, dst3, dst6, dst5, dst43_r, dst65_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst4, dst3, dst6, dst5, dst43_l, dst65_l); + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, src7, +- src7, mask2, src7, src7, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, src7, ++ src7, mask2, src7, src7, mask3, vec0, vec1, vec2, vec3); + dst7 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3); + + dst76_r = __lsx_vilvl_h(dst7, dst6); +@@ -447,10 +445,10 @@ void hevc_hv_uni_8t_8multx2mult_lsx(uint8_t *src, + filt_h1, filt_h2, filt_h3); + dst0_l = __lsx_hevc_filt_8tap_w(dst10_l, dst32_l, dst54_l, dst76_l, filt_h0, + filt_h1, filt_h2, filt_h3); +- LSX_DUP2_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst0_r, dst0_l); ++ DUP2_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst0_r, dst0_l); + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src8, src8, mask0, src8, src8, mask1, src8, +- src8, mask2, src8, src8, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src8, src8, mask0, src8, src8, mask1, src8, ++ src8, mask2, src8, src8, mask3, vec0, vec1, vec2, vec3); + dst8 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, + filt2, filt3); + +@@ -460,9 +458,9 @@ void hevc_hv_uni_8t_8multx2mult_lsx(uint8_t *src, + filt_h0, filt_h1, filt_h2, filt_h3); + dst1_l = __lsx_hevc_filt_8tap_w(dst21_l, dst43_l, dst65_l, dst87_l, + filt_h0, filt_h1, filt_h2, filt_h3); +- LSX_DUP2_ARG2(__lsx_vsrai_w, dst1_r, 6, dst1_l, 6, dst1_r, dst1_l); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, +- dst0, dst1); ++ DUP2_ARG2(__lsx_vsrai_w, dst1_r, 6, dst1_l, 6, dst1_r, dst1_l); ++ DUP2_ARG3(__lsx_vssrarni_b_h, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, ++ dst0, dst1); + out = __lsx_vpickev_b(dst1, dst0); + out = __lsx_vxori_b(out, 128); + __lsx_vstelm_d(out, dst_tmp, 0, 0); +@@ -571,36 +569,36 @@ void common_vt_4t_24w_lsx(uint8_t *src, int32_t src_stride, + __m128i out, out0_r, out1_r, out2_r, out3_r, out0_l, out1_l; + + src -= src_stride; +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); + + /* 16 width */ +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); + src2 = __lsx_vld(src + src_stride_2x, 0); +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); + src2 = __lsx_vxori_b(src2, 128); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); ++ DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); ++ DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); + + /* 8 width */ +- LSX_DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src6, src7); ++ DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src6, src7); + src8 = __lsx_vld(src + src_stride_2x, 16); + src += src_stride_3x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); ++ DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); + src8 = __lsx_vxori_b(src8, 128); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); ++ DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); + + for (loop_cnt = 8; loop_cnt--;) { + /* 16 width */ +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src3, src4); +- LSX_DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src3, src4); ++ DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); ++ DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); ++ DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); + + /* 8 width */ +- LSX_DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src9, src10); ++ DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src9, src10); + src += src_stride_2x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); ++ DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); ++ DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); + + /* 16 width */ + out0_r = __lsx_hevc_filt_4tap_h(src10_r, src32_r, filt0, filt1); +@@ -616,9 +614,9 @@ void common_vt_4t_24w_lsx(uint8_t *src, int32_t src_stride, + out = __lsx_vssrarni_b_h(out0_l, out0_r, 6); + out = __lsx_vxori_b(out, 128); + __lsx_vst(out, dst, 0); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out2_r, out2_r, 6, out3_r, out3_r, 6, +- out2_r, out3_r); +- LSX_DUP2_ARG2(__lsx_vxori_b, out2_r, 128, out3_r, 128, out2_r, out3_r); ++ DUP2_ARG3(__lsx_vssrarni_b_h, out2_r, out2_r, 6, out3_r, out3_r, 6, ++ out2_r, out3_r); ++ DUP2_ARG2(__lsx_vxori_b, out2_r, 128, out3_r, 128, out2_r, out3_r); + __lsx_vstelm_d(out2_r, dst, 16, 0); + dst += dst_stride; + out = __lsx_vssrarni_b_h(out1_l, out1_r, 6); +@@ -628,16 +626,16 @@ void common_vt_4t_24w_lsx(uint8_t *src, int32_t src_stride, + dst += dst_stride; + + /* 16 width */ +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src5, src2); +- LSX_DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src5, src2); ++ DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); ++ DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); ++ DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); + + /* 8 width */ +- LSX_DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src11, src8); ++ DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src11, src8); + src += src_stride_2x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src11, 128, src8, 128, src11, src8); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src11, src10, src8, src11, src76_r, src87_r); ++ DUP2_ARG2(__lsx_vxori_b, src11, 128, src8, 128, src11, src8); ++ DUP2_ARG2(__lsx_vilvl_b, src11, src10, src8, src11, src76_r, src87_r); + + /* 16 width */ + out0_r = __lsx_hevc_filt_4tap_h(src32_r, src10_r, filt0, filt1); +@@ -688,33 +686,33 @@ void common_vt_4t_32w_lsx(uint8_t *src, int32_t src_stride, + __m128i out; + + src -= src_stride; +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); + + /* 16 width */ +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); + src2 = __lsx_vld(src + src_stride_2x, 0); +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); + src2 = __lsx_vxori_b(src2, 128); + +- LSX_DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); ++ DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); ++ DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); + + /* next 16 width */ +- LSX_DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src6, src7); ++ DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src6, src7); + src8 = __lsx_vld(src + src_stride_2x, 16); + src += src_stride_3x; + +- LSX_DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); ++ DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); + src8 = __lsx_vxori_b(src8, 128); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src76_l, src87_l); ++ DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); ++ DUP2_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src76_l, src87_l); + + for (loop_cnt = (height >> 1); loop_cnt--;) { + /* 16 width */ +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src3, src4); +- LSX_DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src3, src4); ++ DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); ++ DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); ++ DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); + + /* 16 width */ + out0_r = __lsx_hevc_filt_4tap_h(src10_r, src32_r, filt0, filt1); +@@ -737,11 +735,11 @@ void common_vt_4t_32w_lsx(uint8_t *src, int32_t src_stride, + src2 = src4; + + /* next 16 width */ +- LSX_DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src9, src10); ++ DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src9, src10); + src += src_stride_2x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src9, src8, src10, src9, src98_l, src109_l); ++ DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); ++ DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); ++ DUP2_ARG2(__lsx_vilvh_b, src9, src8, src10, src9, src98_l, src109_l); + + /* next 16 width */ + out2_r = __lsx_hevc_filt_4tap_h(src76_r, src98_r, filt0, filt1); +@@ -792,41 +790,40 @@ void hevc_hv_uni_4t_8x2_lsx(uint8_t *src, + __m128i out0_r, out1_r; + + src -= (src_stride + 1); +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); + + filter_vec = __lsx_vld(filter_y, 0); + filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); +- LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); + + mask1 = __lsx_vaddi_bu(mask0, 2); +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); + src4 = __lsx_vld(src + src_stride_4x, 0); +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); + src4 = __lsx_vxori_b(src4, 128); + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src1, src1, +- mask0, src1, src1, mask1, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src3, src3, +- mask0, src3, src3, mask1, vec4, vec5, vec6, vec7); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec8, vec9); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src1, src1, ++ mask0, src1, src1, mask1, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src3, src3, ++ mask0, src3, src3, mask1, vec4, vec5, vec6, vec7); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec8, vec9); + + dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); + dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); + dst2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); + dst3 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); + dst4 = __lsx_hevc_filt_4tap_h(vec8, vec9, filt0, filt1); +- LSX_DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, +- dst10_r, dst21_r, dst32_r, dst43_r); +- LSX_DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, +- dst10_l, dst21_l, dst32_l, dst43_l); ++ DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, ++ dst10_r, dst21_r, dst32_r, dst43_r); ++ DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, ++ dst10_l, dst21_l, dst32_l, dst43_l); + dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); + dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); + dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); + dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); +- LSX_DUP2_ARG3(__lsx_vsrani_h_w, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, +- out0_r, out1_r); ++ DUP2_ARG3(__lsx_vsrani_h_w, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, out0_r, out1_r); + out = __lsx_vssrarni_b_h(out1_r, out0_r, 6); + out = __lsx_vxori_b(out, 128); + __lsx_vstelm_d(out, dst, 0, 0); +@@ -859,51 +856,51 @@ void hevc_hv_uni_4t_8multx4_lsx(uint8_t *src, + __m128i dst10_l, dst32_l, dst54_l, dst21_l, dst43_l, dst65_l; + + src -= (src_stride + 1); +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); + + filter_vec = __lsx_vld(filter_y, 0); + filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); +- LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); + + mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + mask1 = __lsx_vaddi_bu(mask0, 2); + + for (cnt = width8mult; cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); + src += src_stride_4x; +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); + src6 = __lsx_vld(src + src_stride_2x, 0); + src += (8 - src_stride_4x); +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); + + dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); + dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); + dst2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); + +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); ++ DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); + +- LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); ++ DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); + + dst3 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); + dst4 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); + dst5 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); + dst6 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); + +- LSX_DUP4_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst5, dst4, dst6, dst5, +- dst32_r, dst43_r, dst54_r, dst65_r); +- LSX_DUP4_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst5, dst4, dst6, dst5, +- dst32_l, dst43_l, dst54_l, dst65_l); ++ DUP4_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst5, dst4, dst6, dst5, ++ dst32_r, dst43_r, dst54_r, dst65_r); ++ DUP4_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst5, dst4, dst6, dst5, ++ dst32_l, dst43_l, dst54_l, dst65_l); + + dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); + dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +@@ -914,10 +911,10 @@ void hevc_hv_uni_4t_8multx4_lsx(uint8_t *src, + dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); + dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); + +- LSX_DUP4_ARG3(__lsx_vsrani_h_w, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, dst2_l, +- dst2_r, 6, dst3_l, dst3_r, 6, tmp0, tmp1, tmp2, tmp3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 6, tmp3, tmp2, 6, out0, out1); +- LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ DUP4_ARG3(__lsx_vsrani_h_w, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, dst2_l, ++ dst2_r, 6, dst3_l, dst3_r, 6, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 6, tmp3, tmp2, 6, out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + __lsx_vstelm_d(out0, dst, 0, 0); + __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); + __lsx_vstelm_d(out1, dst + dst_stride_2x, 0, 0); +@@ -958,34 +955,34 @@ void hevc_hv_uni_4t_8x6_lsx(uint8_t *src, + __m128i out0_r, out1_r, out2_r, out3_r, out4_r, out5_r; + + src -= (src_stride + 1); +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); + + filter_vec = __lsx_vld(filter_y, 0); + filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); +- LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); + + mask1 = __lsx_vaddi_bu(mask0, 2); +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); + src4 = __lsx_vld(src + src_stride_4x, 0); + src += (src_stride_4x + src_stride); +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src5, src6, src7, src8); +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, +- src2, src3) ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src5, src6, src7, src8); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, ++ src2, src3) + src4 = __lsx_vxori_b(src4, 128); +- LSX_DUP4_ARG2(__lsx_vxori_b, src5, 128, src6, 128, src7, 128, src8, 128, src5, src6, +- src7, src8); +- +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src1, src1, +- mask0, src1, src1, mask1, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src3, src3, +- mask0, src3, src3, mask1, vec4, vec5, vec6, vec7); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src5, src5, +- mask0, src5, src5, mask1, vec8, vec9, vec10, vec11); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src7, src7, +- mask0, src7, src7, mask1, vec12, vec13, vec14, vec15); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src8, src8, mask0, src8, src8, mask1, vec16, vec17); ++ DUP4_ARG2(__lsx_vxori_b, src5, 128, src6, 128, src7, 128, src8, 128, src5, src6, ++ src7, src8); ++ ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src1, src1, ++ mask0, src1, src1, mask1, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src3, src3, ++ mask0, src3, src3, mask1, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src5, src5, ++ mask0, src5, src5, mask1, vec8, vec9, vec10, vec11); ++ DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src7, src7, ++ mask0, src7, src7, mask1, vec12, vec13, vec14, vec15); ++ DUP2_ARG3(__lsx_vshuf_b, src8, src8, mask0, src8, src8, mask1, vec16, vec17); + + dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); + dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +@@ -997,14 +994,14 @@ void hevc_hv_uni_4t_8x6_lsx(uint8_t *src, + dst7 = __lsx_hevc_filt_4tap_h(vec14, vec15, filt0, filt1); + dst8 = __lsx_hevc_filt_4tap_h(vec16, vec17, filt0, filt1); + +- LSX_DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, +- dst10_r, dst21_r, dst32_r, dst43_r); +- LSX_DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, +- dst10_l, dst21_l, dst32_l, dst43_l); +- LSX_DUP4_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst7, dst6, dst8, dst7, +- dst54_r, dst65_r, dst76_r, dst87_r); +- LSX_DUP4_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst7, dst6, dst8, dst7, +- dst54_l, dst65_l, dst76_l, dst87_l); ++ DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, ++ dst10_r, dst21_r, dst32_r, dst43_r); ++ DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, ++ dst10_l, dst21_l, dst32_l, dst43_l); ++ DUP4_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst7, dst6, dst8, dst7, ++ dst54_r, dst65_r, dst76_r, dst87_r); ++ DUP4_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst7, dst6, dst8, dst7, ++ dst54_l, dst65_l, dst76_l, dst87_l); + + dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); + dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +@@ -1019,13 +1016,11 @@ void hevc_hv_uni_4t_8x6_lsx(uint8_t *src, + dst5_r = __lsx_hevc_filt_4tap_w(dst65_r, dst87_r, filt_h0, filt_h1); + dst5_l = __lsx_hevc_filt_4tap_w(dst65_l, dst87_l, filt_h0, filt_h1); + +- LSX_DUP4_ARG3(__lsx_vsrani_h_w, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, dst2_l, +- dst2_r, 6, dst3_l, dst3_r, 6, out0_r, out1_r, out2_r, out3_r); +- LSX_DUP2_ARG3(__lsx_vsrani_h_w, dst4_l, dst4_r, 6, dst5_l, dst5_r, 6, +- out4_r, out5_r); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1_r, out0_r, 6, out3_r, out2_r, 6, +- out0, out1); +- LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1) ++ DUP4_ARG3(__lsx_vsrani_h_w, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, dst2_l, ++ dst2_r, 6, dst3_l, dst3_r, 6, out0_r, out1_r, out2_r, out3_r); ++ DUP2_ARG3(__lsx_vsrani_h_w, dst4_l, dst4_r, 6, dst5_l, dst5_r, 6, out4_r, out5_r); ++ DUP2_ARG3(__lsx_vssrarni_b_h, out1_r, out0_r, 6, out3_r, out2_r, 6, out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1) + out2 = __lsx_vssrarni_b_h(out5_r, out4_r, 6); + out2 = __lsx_vxori_b(out2, 128); + +@@ -1073,58 +1068,58 @@ void hevc_hv_uni_4t_8multx4mult_lsx(uint8_t *src, + __m128i out0_r, out1_r, out2_r, out3_r; + + src -= (src_stride + 1); +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); + + filter_vec = __lsx_vld(filter_y, 0); + filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); +- LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); + mask1 = __lsx_vaddi_bu(mask0, 2); + + for (cnt = width8mult; cnt--;) { + src_tmp = src; + dst_tmp = dst; + +- LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src0, src1); ++ DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src0, src1); + src2 = __lsx_vld(src_tmp + src_stride_2x, 0); + src_tmp += src_stride_3x; + +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); + src2 = __lsx_vxori_b(src2, 128); + +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); + + dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); + dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); + dst2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); + +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); ++ DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, +- src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, src3, +- src4, src5, src6); ++ DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, ++ src3, src4, src5, src6); + src_tmp += src_stride_4x; + +- LSX_DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, +- src3, src4, src5, src6); ++ DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, ++ src3, src4, src5, src6); + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src4, +- src4, mask0, src4, src4, mask1, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src6, +- src6, mask0, src6, src6, mask1, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src4, ++ src4, mask0, src4, src4, mask1, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src6, ++ src6, mask0, src6, src6, mask1, vec4, vec5, vec6, vec7); + + dst3 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); + dst4 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); + dst5 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); + dst6 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); + +- LSX_DUP4_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst5, dst4, dst6, dst5, +- dst32_r, dst43_r, dst54_r, dst65_r); +- LSX_DUP4_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst5, dst4, dst6, dst5, +- dst32_l, dst43_l, dst54_l, dst65_l); ++ DUP4_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst5, dst4, dst6, dst5, ++ dst32_r, dst43_r, dst54_r, dst65_r); ++ DUP4_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst5, dst4, dst6, dst5, ++ dst32_l, dst43_l, dst54_l, dst65_l); + + dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); + dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +@@ -1135,12 +1130,12 @@ void hevc_hv_uni_4t_8multx4mult_lsx(uint8_t *src, + dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); + dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); + +- LSX_DUP4_ARG3(__lsx_vsrani_h_w, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, +- dst2_l, dst2_r, 6, dst3_l, dst3_r, 6, out0_r, out1_r, +- out2_r, out3_r); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1_r, out0_r, 6, out3_r, out2_r, 6, +- out0, out1); +- LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ DUP4_ARG3(__lsx_vsrani_h_w, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, ++ dst2_l, dst2_r, 6, dst3_l, dst3_r, 6, out0_r, out1_r, ++ out2_r, out3_r); ++ DUP2_ARG3(__lsx_vssrarni_b_h, out1_r, out0_r, 6, out3_r, out2_r, 6, ++ out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + __lsx_vstelm_d(out0, dst_tmp, 0, 0); + __lsx_vstelm_d(out0, dst_tmp + dst_stride, 0, 1); + __lsx_vstelm_d(out1, dst_tmp + dst_stride_2x, 0, 0); +@@ -1213,11 +1208,11 @@ void hevc_hv_uni_4t_12w_lsx(uint8_t *src, + __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; + + src -= (src_stride + 1); +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); + + filter_vec = __lsx_vld(filter_y, 0); + filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); +- LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); + + mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + mask1 = __lsx_vaddi_bu(mask0, 2); +@@ -1225,46 +1220,46 @@ void hevc_hv_uni_4t_12w_lsx(uint8_t *src, + src_tmp = src; + dst_tmp = dst; + +- LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src0, src1); ++ DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src0, src1); + src2 = __lsx_vld(src_tmp + src_stride_2x, 0); + src_tmp += src_stride_3x; + +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); + src2 = __lsx_vxori_b(src2, 128); + +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); + + dsth0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); + dsth1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); + dsth2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); + +- LSX_DUP2_ARG2(__lsx_vilvl_h, dsth1, dsth0, dsth2, dsth1, dst10_r, dst21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dsth1, dsth0, dsth2, dsth1, dst10_l, dst21_l); ++ DUP2_ARG2(__lsx_vilvl_h, dsth1, dsth0, dsth2, dsth1, dst10_r, dst21_r); ++ DUP2_ARG2(__lsx_vilvh_h, dsth1, dsth0, dsth2, dsth1, dst10_l, dst21_l); + + for (loop_cnt = 4; loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, +- src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, +- src3, src4, src5, src6); ++ DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, ++ src3, src4, src5, src6); + src_tmp += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, +- src3, src4, src5, src6); ++ DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, ++ src3, src4, src5, src6); + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src4, src4, +- mask0, src4, src4, mask1, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src6, src6, +- mask0, src6, src6, mask1, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src4, src4, ++ mask0, src4, src4, mask1, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src6, src6, ++ mask0, src6, src6, mask1, vec4, vec5, vec6, vec7); + + dsth3 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); + dsth4 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); + dsth5 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); + dsth6 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); + +- LSX_DUP4_ARG2(__lsx_vilvl_h, dsth3, dsth2, dsth4, dsth3, dsth5, dsth4, dsth6, +- dsth5, dst32_r, dst43_r, dst54_r, dst65_r); +- LSX_DUP4_ARG2(__lsx_vilvh_h, dsth3, dsth2, dsth4, dsth3, dsth5, dsth4, dsth6, +- dsth5, dst32_l, dst43_l, dst54_l, dst65_l); ++ DUP4_ARG2(__lsx_vilvl_h, dsth3, dsth2, dsth4, dsth3, dsth5, dsth4, dsth6, ++ dsth5, dst32_r, dst43_r, dst54_r, dst65_r); ++ DUP4_ARG2(__lsx_vilvh_h, dsth3, dsth2, dsth4, dsth3, dsth5, dsth4, dsth6, ++ dsth5, dst32_l, dst43_l, dst54_l, dst65_l); + + dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); + dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +@@ -1275,10 +1270,10 @@ void hevc_hv_uni_4t_12w_lsx(uint8_t *src, + dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); + dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); + +- LSX_DUP4_ARG3(__lsx_vsrani_h_w, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, dst2_l, +- dst2_r, 6, dst3_l, dst3_r, 6, tmp0, tmp1, tmp2, tmp3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 6, tmp3, tmp2, 6, out0, out1); +- LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ DUP4_ARG3(__lsx_vsrani_h_w, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, dst2_l, ++ dst2_r, 6, dst3_l, dst3_r, 6, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 6, tmp3, tmp2, 6, out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + + __lsx_vstelm_d(out0, dst_tmp, 0, 0); + __lsx_vstelm_d(out0, dst_tmp + dst_stride, 0, 1); +@@ -1299,13 +1294,13 @@ void hevc_hv_uni_4t_12w_lsx(uint8_t *src, + mask2 = __lsx_vld(ff_hevc_mask_arr, 16); + mask3 = __lsx_vaddi_bu(mask2, 2); + +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); + src2 = __lsx_vld(src + src_stride_2x, 0); + src += src_stride_3x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); + src2 = __lsx_vxori_b(src2, 128); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src0, mask2, src1, src0, mask3, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src1, mask2, src2, src1, mask3, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src0, mask2, src1, src0, mask3, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src1, mask2, src2, src1, mask3, vec2, vec3); + + dst10 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); + dst21 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +@@ -1315,20 +1310,20 @@ void hevc_hv_uni_4t_12w_lsx(uint8_t *src, + dst22 = __lsx_vreplvei_d(dst21, 1); + + for (loop_cnt = 2; loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src3, src4, src5, src6); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src3, src4, src5, src6); + src += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src7, src8, src9, src10); + src += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, +- src4, src5, src6) +- LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, +- src8, src9, src10) +- LSX_DUP4_ARG3(__lsx_vshuf_b, src7, src3, mask2, src7, src3, mask3, src8, src4, +- mask2, src8, src4, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src9, src5, mask2, src9, src5, mask3, src10, src6, +- mask2, src10, src6, mask3, vec4, vec5, vec6, vec7); ++ DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, ++ src4, src5, src6) ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, ++ src8, src9, src10) ++ DUP4_ARG3(__lsx_vshuf_b, src7, src3, mask2, src7, src3, mask3, src8, src4, ++ mask2, src8, src4, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src9, src5, mask2, src9, src5, mask3, src10, src6, ++ mask2, src10, src6, mask3, vec4, vec5, vec6, vec7); + + dst73 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); + dst84 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +@@ -1336,8 +1331,8 @@ void hevc_hv_uni_4t_12w_lsx(uint8_t *src, + dst106 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); + + dst32_r = __lsx_vilvl_h(dst73, dst22); +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst84, dst73, dst95, dst84, dst43_r, dst54_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst84, dst73, dst95, dst84, dst87_r, dst98_r); ++ DUP2_ARG2(__lsx_vilvl_h, dst84, dst73, dst95, dst84, dst43_r, dst54_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst84, dst73, dst95, dst84, dst87_r, dst98_r); + dst65_r = __lsx_vilvl_h(dst106, dst95); + dst109_r = __lsx_vilvh_h(dst106, dst95); + dst22 = __lsx_vreplvei_d(dst73, 1); +@@ -1352,10 +1347,10 @@ void hevc_hv_uni_4t_12w_lsx(uint8_t *src, + dst6 = __lsx_hevc_filt_4tap_w(dst76_r, dst98_r, filt_h0, filt_h1); + dst7 = __lsx_hevc_filt_4tap_w(dst87_r, dst109_r, filt_h0, filt_h1); + +- LSX_DUP4_ARG3(__lsx_vsrani_h_w, dst1, dst0, 6, dst3, dst2, 6, dst5, dst4, 6, +- dst7, dst6, 6, tmp0, tmp1, tmp2, tmp3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 6, tmp3, tmp2, 6, out0, out1); +- LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ DUP4_ARG3(__lsx_vsrani_h_w, dst1, dst0, 6, dst3, dst2, 6, dst5, dst4, 6, ++ dst7, dst6, 6, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 6, tmp3, tmp2, 6, out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + + __lsx_vstelm_w(out0, dst, 0, 0); + __lsx_vstelm_w(out0, dst + dst_stride, 0, 1); +diff --git a/libavcodec/loongarch/hevc_mc_uniw_lsx.c b/libavcodec/loongarch/hevc_mc_uniw_lsx.c +index 619ef95960..541d814438 100644 +--- a/libavcodec/loongarch/hevc_mc_uniw_lsx.c ++++ b/libavcodec/loongarch/hevc_mc_uniw_lsx.c +@@ -19,7 +19,7 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "libavutil/loongarch/generic_macros_lsx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + #include "hevcdsp_lsx.h" + #include "hevc_macros_lsx.h" + +@@ -78,39 +78,38 @@ void hevc_hv_uniwgt_8t_8multx2mult_lsx(uint8_t *src, + denom_vec = __lsx_vsrar_w(const_128, denom_vec); + offset_vec = __lsx_vadd_w(denom_vec, offset_vec); + +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, filter_x, 6, +- filt0, filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, filter_x, 6, ++ filt0, filt1, filt2, filt3); + filter_vec = __lsx_vld(filter_y, 0); + filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); +- LSX_DUP4_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filter_vec, 2, +- filter_vec, 3, filt_h0, filt_h1, filt_h2, filt_h3); +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP4_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filter_vec, 2, ++ filter_vec, 3, filt_h0, filt_h1, filt_h2, filt_h3); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + + for (cnt = width >> 3; cnt--;) { + src_tmp = src; + dst_tmp = dst; + +- LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, +- src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, src0, +- src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src_tmp + src_stride_2x, ++ 0, src_tmp + src_stride_3x, 0, src0, src1, src2, src3); + src_tmp += src_stride_4x; +- LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); ++ DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); + src6 = __lsx_vld(src_tmp + src_stride_2x, 0); + src_tmp += src_stride_3x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, +- mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, +- mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, +- mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, +- mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, ++ mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, ++ mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, ++ mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); ++ DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, ++ mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); + dst0 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, filt2, + filt3); + dst1 = __lsx_hevc_filt_8tap_h(vec4, vec5, vec6, vec7, filt0, filt1, filt2, +@@ -119,12 +118,12 @@ void hevc_hv_uniwgt_8t_8multx2mult_lsx(uint8_t *src, + filt3); + dst3 = __lsx_hevc_filt_8tap_h(vec12, vec13, vec14, vec15, filt0, filt1, + filt2, filt3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, +- mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, src5, +- mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, src6, +- mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); ++ DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, ++ mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, src5, ++ mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, src6, ++ mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); + dst4 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, filt2, + filt3); + dst5 = __lsx_hevc_filt_8tap_h(vec4, vec5, vec6, vec7, filt0, filt1, filt2, +@@ -132,19 +131,19 @@ void hevc_hv_uniwgt_8t_8multx2mult_lsx(uint8_t *src, + dst6 = __lsx_hevc_filt_8tap_h(vec8, vec9, vec10, vec11, filt0, filt1, filt2, + filt3); + +- LSX_DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst2, dst1, +- dst10_r, dst32_r, dst54_r, dst21_r); +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst4, dst3, dst6, dst5, dst43_r, dst65_r); +- LSX_DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst2, dst1, +- dst10_l, dst32_l, dst54_l, dst21_l); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst4, dst3, dst6, dst5, dst43_l, dst65_l); ++ DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst2, dst1, ++ dst10_r, dst32_r, dst54_r, dst21_r); ++ DUP2_ARG2(__lsx_vilvl_h, dst4, dst3, dst6, dst5, dst43_r, dst65_r); ++ DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst2, dst1, ++ dst10_l, dst32_l, dst54_l, dst21_l); ++ DUP2_ARG2(__lsx_vilvh_h, dst4, dst3, dst6, dst5, dst43_l, dst65_l); + + for (loop_cnt = height >> 1; loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src7, src8); ++ DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src7, src8); + src_tmp += src_stride_2x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src7, src8); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, src7, +- src7, mask2, src7, src7, mask3, vec0, vec1, vec2, vec3); ++ DUP2_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src7, src8); ++ DUP4_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, src7, ++ src7, mask2, src7, src7, mask3, vec0, vec1, vec2, vec3); + dst7 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, + filt2, filt3); + dst76_r = __lsx_vilvl_h(dst7, dst6); +@@ -153,11 +152,11 @@ void hevc_hv_uniwgt_8t_8multx2mult_lsx(uint8_t *src, + filt_h0, filt_h1, filt_h2, filt_h3); + dst0_l = __lsx_hevc_filt_8tap_w(dst10_l, dst32_l, dst54_l, dst76_l, + filt_h0, filt_h1, filt_h2, filt_h3); +- LSX_DUP2_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst0_r, dst0_l); ++ DUP2_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst0_r, dst0_l); + + /* row 8 */ +- LSX_DUP4_ARG3(__lsx_vshuf_b, src8, src8, mask0, src8, src8, mask1, src8, +- src8, mask2, src8, src8, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src8, src8, mask0, src8, src8, mask1, src8, ++ src8, mask2, src8, src8, mask3, vec0, vec1, vec2, vec3); + dst8 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, + filt2, filt3); + +@@ -167,22 +166,18 @@ void hevc_hv_uniwgt_8t_8multx2mult_lsx(uint8_t *src, + filt_h0, filt_h1, filt_h2, filt_h3); + dst1_l = __lsx_hevc_filt_8tap_w(dst21_l, dst43_l, dst65_l, dst87_l, + filt_h0, filt_h1, filt_h2, filt_h3); +- LSX_DUP2_ARG2(__lsx_vsrai_w, dst1_r, 6, dst1_l, 6, dst1_r, dst1_l); ++ DUP2_ARG2(__lsx_vsrai_w, dst1_r, 6, dst1_l, 6, dst1_r, dst1_l); + +- LSX_DUP2_ARG2(__lsx_vmul_w, dst0_r, weight_vec, dst0_l, weight_vec, dst0_r, +- dst0_l); +- LSX_DUP2_ARG2(__lsx_vmul_w, dst1_r, weight_vec, dst1_l, weight_vec, dst1_r, +- dst1_l); +- LSX_DUP4_ARG2(__lsx_vsrar_w, dst0_r, rnd_vec, dst1_r, rnd_vec, dst0_l, +- rnd_vec, dst1_l, rnd_vec, dst0_r, dst1_r, dst0_l, dst1_l); ++ DUP2_ARG2(__lsx_vmul_w, dst0_r, weight_vec, dst0_l, weight_vec, dst0_r, dst0_l); ++ DUP2_ARG2(__lsx_vmul_w, dst1_r, weight_vec, dst1_l, weight_vec, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vsrar_w, dst0_r, rnd_vec, dst1_r, rnd_vec, dst0_l, ++ rnd_vec, dst1_l, rnd_vec, dst0_r, dst1_r, dst0_l, dst1_l); + +- LSX_DUP2_ARG2(__lsx_vadd_w, dst0_r, offset_vec, dst0_l, offset_vec, dst0_r, +- dst0_l); +- LSX_DUP2_ARG2(__lsx_vadd_w, dst1_r, offset_vec, dst1_l, offset_vec, dst1_r, +- dst1_l); +- LSX_DUP4_ARG1(__lsx_clamp255_w, dst0_r, dst1_r, dst0_l, dst1_l, dst0_r, +- dst1_r, dst0_l, dst1_l); +- LSX_DUP2_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); ++ DUP2_ARG2(__lsx_vadd_w, dst0_r, offset_vec, dst0_l, offset_vec, dst0_r, dst0_l); ++ DUP2_ARG2(__lsx_vadd_w, dst1_r, offset_vec, dst1_l, offset_vec, dst1_r, dst1_l); ++ DUP4_ARG1(__lsx_vclip255_w, dst0_r, dst1_r, dst0_l, dst1_l, dst0_r, ++ dst1_r, dst0_l, dst1_l); ++ DUP2_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); + dst0_r = __lsx_vpickev_b(dst1_r, dst0_r); + + __lsx_vstelm_d(dst0_r, dst_tmp, 0, 0); +diff --git a/libavcodec/loongarch/hevcdsp_lsx.c b/libavcodec/loongarch/hevcdsp_lsx.c +index 9e2d9e29b4..e4779c77a6 100644 +--- a/libavcodec/loongarch/hevcdsp_lsx.c ++++ b/libavcodec/loongarch/hevcdsp_lsx.c +@@ -19,7 +19,7 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "libavutil/loongarch/generic_macros_lsx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + #include "hevcdsp_lsx.h" + #include "hevc_macros_lsx.h" + +@@ -46,7 +46,7 @@ static void hevc_copy_4w_lsx(uint8_t *src, int32_t src_stride, + __m128i src0, src1; + __m128i in0; + +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); + src0 = __lsx_vilvl_w(src1, src0); + in0 = __lsx_vilvl_b(zero, src0); + in0 = __lsx_vslli_h(in0, 6); +@@ -56,11 +56,11 @@ static void hevc_copy_4w_lsx(uint8_t *src, int32_t src_stride, + __m128i src0, src1, src2, src3; + __m128i in0, in1; + +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- LSX_DUP2_ARG2(__lsx_vilvl_w, src1, src0, src3, src2, src0, src1); +- LSX_DUP2_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, in0, in1); +- LSX_DUP2_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in0, in1); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP2_ARG2(__lsx_vilvl_w, src1, src0, src3, src2, src0, src1); ++ DUP2_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, in0, in1); ++ DUP2_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in0, in1); + __lsx_vstelm_d(in0, dst, 0, 0); + __lsx_vstelm_d(in0, dst + dst_stride, 0, 1); + __lsx_vstelm_d(in1, dst + dst_stride_2x, 0, 0); +@@ -70,20 +70,18 @@ static void hevc_copy_4w_lsx(uint8_t *src, int32_t src_stride, + __m128i in0, in1, in2, in3; + uint32_t loop_cnt; + for (loop_cnt = (height >> 3); loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, +- src + src_stride_2x, 0, src + src_stride_3x, 0, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); + src += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0,src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0,src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); + src += src_stride_4x; + +- LSX_DUP4_ARG2(__lsx_vilvl_w, src1, src0, src3, src2, src5, src4, src7, src6, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in2, 6, in3, 6, in0, in1, +- in2, in3); ++ DUP4_ARG2(__lsx_vilvl_w, src1, src0, src3, src2, src5, src4, src7, src6, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in2, 6, in3, 6, in0, in1, in2, in3); + + __lsx_vstelm_d(in0, dst, 0, 0); + __lsx_vstelm_d(in0, dst + dst_stride, 0, 1); +@@ -117,29 +115,29 @@ static void hevc_copy_6w_lsx(uint8_t *src, int32_t src_stride, + __m128i in0, in1, in2, in3, in4, in5, in6, in7; + + for (loop_cnt = (height >> 3); loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); + src += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); + src += src_stride_4x; + +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, +- in4, in5, in6, in7); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in2, 6, in3, 6, in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vslli_h, in4, 6, in5, 6, in6, 6, in7, 6, in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in2, 6, in3, 6, in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vslli_h, in4, 6, in5, 6, in6, 6, in7, 6, in4, in5, in6, in7); + +- LSX_DUP4_ARG2(__lsx_vpickve2gr_du, in0, 0, in1, 0, in2, 0, in3, 0, out0_m, +- out1_m, out2_m, out3_m); +- LSX_DUP4_ARG2(__lsx_vpickve2gr_du, in4, 0, in5, 0, in6, 0, in7, 0, out4_m, +- out5_m, out6_m, out7_m); ++ DUP4_ARG2(__lsx_vpickve2gr_du, in0, 0, in1, 0, in2, 0, in3, 0, out0_m, ++ out1_m, out2_m, out3_m); ++ DUP4_ARG2(__lsx_vpickve2gr_du, in4, 0, in5, 0, in6, 0, in7, 0, out4_m, ++ out5_m, out6_m, out7_m); + +- LSX_DUP4_ARG2(__lsx_vpickve2gr_wu, in0, 2, in1, 2, in2, 2, in3, 2, out8_m, +- out9_m, out10_m, out11_m); +- LSX_DUP4_ARG2(__lsx_vpickve2gr_wu, in4, 2, in5, 2, in6, 2, in7, 2, out12_m, +- out13_m, out14_m, out15_m); ++ DUP4_ARG2(__lsx_vpickve2gr_wu, in0, 2, in1, 2, in2, 2, in3, 2, out8_m, ++ out9_m, out10_m, out11_m); ++ DUP4_ARG2(__lsx_vpickve2gr_wu, in4, 2, in5, 2, in6, 2, in7, 2, out12_m, ++ out13_m, out14_m, out15_m); + + *(uint64_t *)dst = out0_m; + *(uint32_t *)(dst + 4) = out8_m; +@@ -184,20 +182,20 @@ static void hevc_copy_8w_lsx(uint8_t *src, int32_t src_stride, + __m128i src0, src1; + __m128i in0, in1; + +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); +- LSX_DUP2_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, in0, in1); +- LSX_DUP2_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in0, in1); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ DUP2_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, in0, in1); ++ DUP2_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in0, in1); + __lsx_vst(in0, dst, 0); + __lsx_vst(in1, dst + dst_stride, 0); + } else if (4 == height) { + __m128i src0, src1, src2, src3; + __m128i in0, in1, in2, in3; + +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in2, 6, in3, 6, in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in2, 6, in3, 6, in0, in1, in2, in3); + __lsx_vst(in0, dst, 0); + __lsx_vst(in1, dst + dst_stride, 0); + __lsx_vst(in2, dst + dst_stride_2x, 0); +@@ -206,15 +204,15 @@ static void hevc_copy_8w_lsx(uint8_t *src, int32_t src_stride, + __m128i src0, src1, src2, src3, src4, src5; + __m128i in0, in1, in2, in3, in4, in5; + +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); + src += src_stride_4x; +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, in0, +- in1, in2, in3); +- LSX_DUP2_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, in4, in5); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in2, 6, in3, 6, in0, in1, in2, in3); +- LSX_DUP2_ARG2(__lsx_vslli_h, in4, 6, in5, 6, in4, in5); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); ++ DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, in0, ++ in1, in2, in3); ++ DUP2_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, in4, in5); ++ DUP4_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in2, 6, in3, 6, in0, in1, in2, in3); ++ DUP2_ARG2(__lsx_vslli_h, in4, 6, in5, 6, in4, in5); + __lsx_vst(in0, dst, 0); + __lsx_vst(in1, dst + dst_stride, 0); + __lsx_vst(in2, dst + dst_stride_2x, 0); +@@ -227,21 +225,19 @@ static void hevc_copy_8w_lsx(uint8_t *src, int32_t src_stride, + __m128i in0, in1, in2, in3, in4, in5, in6, in7; + + for (loop_cnt = (height >> 3); loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, +- src + src_stride_2x, 0, src + src_stride_3x, 0, src0, +- src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); + src += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, +- src + src_stride_2x, 0, src + src_stride_3x, 0, src4, +- src5, src6, src7); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); + src += src_stride_4x; + +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, +- in4, in5, in6, in7); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in2, 6, in3, 6, in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vslli_h, in4, 6, in5, 6, in6, 6, in7, 6, in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in2, 6, in3, 6, in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vslli_h, in4, 6, in5, 6, in6, 6, in7, 6, in4, in5, in6, in7); + __lsx_vst(in0, dst, 0); + __lsx_vst(in1, dst + dst_stride, 0); + __lsx_vst(in2, dst + dst_stride_2x, 0); +@@ -272,20 +268,20 @@ static void hevc_copy_12w_lsx(uint8_t *src, int32_t src_stride, + __m128i in0, in1, in0_r, in1_r, in2_r, in3_r; + + for (loop_cnt = (height >> 3); loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); + src += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); + src += src_stride_4x; + +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0_r, in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); +- LSX_DUP2_ARG2(__lsx_vilvh_w, src1, src0, src3, src2, src0, src1); +- LSX_DUP2_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, in0, in1); +- LSX_DUP2_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in0, in1); ++ DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_r, in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ DUP2_ARG2(__lsx_vilvh_w, src1, src0, src3, src2, src0, src1); ++ DUP2_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, in0, in1); ++ DUP2_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in0, in1); + __lsx_vst(in0_r, dst, 0); + __lsx_vst(in1_r, dst + dst_stride, 0); + __lsx_vst(in2_r, dst + dst_stride_2x, 0); +@@ -296,13 +292,13 @@ static void hevc_copy_12w_lsx(uint8_t *src, int32_t src_stride, + __lsx_vstelm_d(in1, dst + dst_stride_3x, 16, 1); + dst += dst_stride_4x; + +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, +- in0_r, in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); +- LSX_DUP2_ARG2(__lsx_vilvh_w, src5, src4, src7, src6, src0, src1); +- LSX_DUP2_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, in0, in1); +- LSX_DUP2_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in0, in1); ++ DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in0_r, in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ DUP2_ARG2(__lsx_vilvh_w, src5, src4, src7, src6, src0, src1); ++ DUP2_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, in0, in1); ++ DUP2_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in0, in1); + __lsx_vst(in0_r, dst, 0); + __lsx_vst(in1_r, dst + dst_stride, 0); + __lsx_vst(in2_r, dst + dst_stride_2x, 0); +@@ -332,17 +328,17 @@ static void hevc_copy_16w_lsx(uint8_t *src, int32_t src_stride, + __m128i in0_r, in1_r, in2_r, in3_r; + __m128i in0_l, in1_l, in2_l, in3_l; + +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0_r, in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0_l, in1_l, in2_l, in3_l); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, +- in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ ++ DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_r, in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_l, in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); + __lsx_vst(in0_r, dst, 0); + __lsx_vst(in1_r, dst + dst_stride, 0); + __lsx_vst(in2_r, dst + dst_stride_2x, 0); +@@ -357,23 +353,23 @@ static void hevc_copy_16w_lsx(uint8_t *src, int32_t src_stride, + __m128i in0_r, in1_r, in2_r, in3_r; + __m128i in0_l, in1_l, in2_l, in3_l; + +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); + src += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); + src += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src8, src9, src10, src11); +- +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0_r, in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0_l, in1_l, in2_l, in3_l); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, +- in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src8, src9, src10, src11); ++ ++ DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_r, in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_l, in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); + __lsx_vst(in0_r, dst, 0); + __lsx_vst(in1_r, dst + dst_stride, 0); + __lsx_vst(in2_r, dst + dst_stride_2x, 0); +@@ -384,14 +380,14 @@ static void hevc_copy_16w_lsx(uint8_t *src, int32_t src_stride, + __lsx_vst(in3_l, dst + dst_stride_3x, 16); + dst += dst_stride_4x; + +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, +- in0_r, in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, zero, src6, zero, src7, +- in0_l, in1_l, in2_l, in3_l); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, +- in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in0_r, in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in0_l, in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); + __lsx_vst(in0_r, dst, 0); + __lsx_vst(in1_r, dst + dst_stride, 0); + __lsx_vst(in2_r, dst + dst_stride_2x, 0); +@@ -402,14 +398,14 @@ static void hevc_copy_16w_lsx(uint8_t *src, int32_t src_stride, + __lsx_vst(in3_l, dst + dst_stride_3x, 16); + dst += dst_stride_4x; + +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src8, zero, src9, zero, src10, zero, src11, +- in0_r, in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src8, zero, src9, zero, src10, zero, src11, +- in0_l, in1_l, in2_l, in3_l); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, +- in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, src8, zero, src9, zero, src10, zero, src11, ++ in0_r, in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vilvh_b, zero, src8, zero, src9, zero, src10, zero, src11, ++ in0_l, in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); + __lsx_vst(in0_r, dst, 0); + __lsx_vst(in1_r, dst + dst_stride, 0); + __lsx_vst(in2_r, dst + dst_stride_2x, 0); +@@ -424,22 +420,20 @@ static void hevc_copy_16w_lsx(uint8_t *src, int32_t src_stride, + __m128i in0_r, in1_r, in2_r, in3_r, in0_l, in1_l, in2_l, in3_l; + + for (loop_cnt = (height >> 3); loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, +- src + src_stride_2x, 0, src + src_stride_3x, 0, src0, +- src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); + src += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, +- src + src_stride_2x, 0, src + src_stride_3x, 0, src4, +- src5, src6, src7); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src4, src5, src6, src7); + src += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0_r, in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0_l, in1_l, in2_l, in3_l); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, +- in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_r, in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_l, in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); + __lsx_vst(in0_r, dst, 0); + __lsx_vst(in1_r, dst + dst_stride, 0); + __lsx_vst(in2_r, dst + dst_stride_2x, 0); +@@ -450,14 +444,14 @@ static void hevc_copy_16w_lsx(uint8_t *src, int32_t src_stride, + __lsx_vst(in3_l, dst + dst_stride_3x, 16); + dst += dst_stride_4x; + +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, +- in0_r, in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, zero, src6, zero, src7, +- in0_l, in1_l, in2_l, in3_l); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, +- in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in0_r, in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in0_l, in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); + __lsx_vst(in0_r, dst, 0); + __lsx_vst(in1_r, dst + dst_stride, 0); + __lsx_vst(in2_r, dst + dst_stride_2x, 0); +@@ -487,19 +481,19 @@ static void hevc_copy_24w_lsx(uint8_t *src, int32_t src_stride, + __m128i in0_r, in1_r, in2_r, in3_r, in0_l, in1_l, in2_l, in3_l; + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src + src_stride_2x, +- 16, src + src_stride_3x, 16, src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src + src_stride_2x, ++ 16, src + src_stride_3x, 16, src4, src5, src6, src7); + src += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0_r, in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0_l, in1_l, in2_l, in3_l); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, +- in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_r, in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_l, in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); + __lsx_vst(in0_r, dst, 0); + __lsx_vst(in1_r, dst + dst_stride, 0); + __lsx_vst(in2_r, dst + dst_stride_2x, 0); +@@ -508,10 +502,10 @@ static void hevc_copy_24w_lsx(uint8_t *src, int32_t src_stride, + __lsx_vst(in1_l, dst + dst_stride, 16); + __lsx_vst(in2_l, dst + dst_stride_2x, 16); + __lsx_vst(in3_l, dst + dst_stride_3x, 16); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, +- in0_r, in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in0_r, in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); + __lsx_vst(in0_r, dst, 32); + __lsx_vst(in1_r, dst + dst_stride, 32); + __lsx_vst(in2_r, dst + dst_stride_2x, 32); +@@ -533,20 +527,20 @@ static void hevc_copy_32w_lsx(uint8_t *src, int32_t src_stride, + __m128i in0_r, in1_r, in2_r, in3_r, in0_l, in1_l, in2_l, in3_l; + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src2, src4, src6); +- LSX_DUP4_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src + src_stride_2x, +- 16, src + src_stride_3x, 16, src1, src3, src5, src7); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src2, src4, src6); ++ DUP4_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src + src_stride_2x, ++ 16, src + src_stride_3x, 16, src1, src3, src5, src7); + src += src_stride_4x; + +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0_r, in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0_l, in1_l, in2_l, in3_l); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, +- in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_r, in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_l, in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); + __lsx_vst(in0_r, dst, 0); + __lsx_vst(in0_l, dst, 16); + __lsx_vst(in1_r, dst, 32); +@@ -558,14 +552,14 @@ static void hevc_copy_32w_lsx(uint8_t *src, int32_t src_stride, + __lsx_vst(in3_l, dst, 48); + dst += dst_stride; + +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, +- in0_r, in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, zero, src6, zero, src7, +- in0_l, in1_l, in2_l, in3_l); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, +- in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in0_r, in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in0_l, in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); + __lsx_vst(in0_r, dst, 0); + __lsx_vst(in0_l, dst, 16); + __lsx_vst(in1_r, dst, 32); +@@ -591,31 +585,31 @@ static void hevc_copy_48w_lsx(uint8_t *src, int32_t src_stride, + __m128i in0_l, in1_l, in2_l, in3_l, in4_l, in5_l; + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src1); ++ DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src1); + src2 = __lsx_vld(src, 32); + src += src_stride; +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src3, src4); ++ DUP2_ARG2(__lsx_vld, src, 0, src, 16, src3, src4); + src5 = __lsx_vld(src, 32); + src += src_stride; +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src6, src7); ++ DUP2_ARG2(__lsx_vld, src, 0, src, 16, src6, src7); + src8 = __lsx_vld(src, 32); + src += src_stride; +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src9, src10); ++ DUP2_ARG2(__lsx_vld, src, 0, src, 16, src9, src10); + src11 = __lsx_vld(src, 32); + src += src_stride; + +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0_r, in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0_l, in1_l, in2_l, in3_l); +- LSX_DUP2_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, in4_r, in5_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, in4_l, in5_l); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, +- in1_l, in2_l, in3_l); +- LSX_DUP4_ARG2(__lsx_vslli_h, in4_r, 6, in5_r, 6, in4_l, 6, in5_l, 6, in4_r, +- in5_r, in4_l, in5_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_r, in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ in0_l, in1_l, in2_l, in3_l); ++ DUP2_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, in4_r, in5_r); ++ DUP2_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, in4_l, in5_l); ++ DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vslli_h, in4_r, 6, in5_r, 6, in4_l, 6, in5_l, 6, in4_r, ++ in5_r, in4_l, in5_l); + __lsx_vst(in0_r, dst, 0); + __lsx_vst(in0_l, dst, 16); + __lsx_vst(in1_r, dst, 32); +@@ -631,18 +625,18 @@ static void hevc_copy_48w_lsx(uint8_t *src, int32_t src_stride, + __lsx_vst(in5_l, dst, 80); + dst += dst_stride; + +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src6, zero, src7, zero, src8, zero, src9, +- in0_r, in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src6, zero, src7, zero, src8, zero, src9, +- in0_l, in1_l, in2_l, in3_l); +- LSX_DUP2_ARG2(__lsx_vilvl_b, zero, src10, zero, src11, in4_r, in5_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, zero, src10, zero, src11, in4_l, in5_l); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, +- in1_l, in2_l, in3_l); +- LSX_DUP4_ARG2(__lsx_vslli_h, in4_r, 6, in5_r, 6, in4_l, 6, in5_l, 6, in4_r, +- in5_r, in4_l, in5_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, src6, zero, src7, zero, src8, zero, src9, ++ in0_r, in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vilvh_b, zero, src6, zero, src7, zero, src8, zero, src9, ++ in0_l, in1_l, in2_l, in3_l); ++ DUP2_ARG2(__lsx_vilvl_b, zero, src10, zero, src11, in4_r, in5_r); ++ DUP2_ARG2(__lsx_vilvh_b, zero, src10, zero, src11, in4_l, in5_l); ++ DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vslli_h, in4_r, 6, in5_r, 6, in4_l, 6, in5_l, 6, in4_r, ++ in5_r, in4_l, in5_l); + __lsx_vst(in0_r, dst, 0); + __lsx_vst(in0_l, dst, 16); + __lsx_vst(in1_r, dst, 32); +@@ -671,20 +665,18 @@ static void hevc_copy_64w_lsx(uint8_t *src, int32_t src_stride, + + + for (loop_cnt = (height >> 1); loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src0, src1, src2, +- src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src0, src1, src2, src3); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src4, src5, src6, +- src7); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src4, src5, src6, src7); + src += src_stride; + +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, + in0_r, in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, + in0_l, in1_l, in2_l, in3_l); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, + in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, + in1_l, in2_l, in3_l); + __lsx_vst(in0_r, dst, 0); + __lsx_vst(in0_l, dst, 16); +@@ -696,14 +688,14 @@ static void hevc_copy_64w_lsx(uint8_t *src, int32_t src_stride, + __lsx_vst(in3_l, dst, 112); + dst += dst_stride; + +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, +- in0_r, in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, zero, src6, zero, src7, +- in0_l, in1_l, in2_l, in3_l); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); +- LSX_DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, +- in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in0_r, in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ in0_l, in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, ++ in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, ++ in1_l, in2_l, in3_l); + __lsx_vst(in0_r, dst, 0); + __lsx_vst(in0_l, dst, 16); + __lsx_vst(in1_r, dst, 32); +@@ -737,39 +729,39 @@ static void hevc_hz_8t_4w_lsx(uint8_t *src, int32_t src_stride, + + src -= 3; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); + +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + + for (loop_cnt = (height >> 3); loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); + src += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); + src += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src6, 128, src7, 128, +- src4, src5, src6, src7); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src0, mask0, src1, src0, mask1, src1, src0, +- mask2, src1, src0, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, +- vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src2, mask0, src3, src2, mask1, src3, src2, +- mask2, src3, src2, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst1, vec1, filt1, dst1, +- vec2, filt2, dst1, vec3, filt3, dst1, dst1, dst1, dst1); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src5, src4, mask0, src5, src4, mask1, src5, src4, +- mask2, src5, src4, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst2, vec1, filt1, dst2, +- vec2, filt2, dst2, vec3, filt3, dst2, dst2, dst2, dst2); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src7, src6, mask0, src7, src6, mask1, src7, src6, +- mask2, src7, src6, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, dst3, +- vec2, filt2, dst3, vec3, filt3, dst3, dst3, dst3, dst3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src6, 128, src7, 128, ++ src4, src5, src6, src7); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src0, mask0, src1, src0, mask1, src1, src0, ++ mask2, src1, src0, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, ++ vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); ++ DUP4_ARG3(__lsx_vshuf_b, src3, src2, mask0, src3, src2, mask1, src3, src2, ++ mask2, src3, src2, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst1, vec1, filt1, dst1, ++ vec2, filt2, dst1, vec3, filt3, dst1, dst1, dst1, dst1); ++ DUP4_ARG3(__lsx_vshuf_b, src5, src4, mask0, src5, src4, mask1, src5, src4, ++ mask2, src5, src4, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst2, vec1, filt1, dst2, ++ vec2, filt2, dst2, vec3, filt3, dst2, dst2, dst2, dst2); ++ DUP4_ARG3(__lsx_vshuf_b, src7, src6, mask0, src7, src6, mask1, src7, src6, ++ mask2, src7, src6, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, dst3, ++ vec2, filt2, dst3, vec3, filt3, dst3, dst3, dst3, dst3); + + __lsx_vstelm_d(dst0, dst, 0, 0); + __lsx_vstelm_d(dst0, dst + dst_stride, 0, 1); +@@ -805,36 +797,35 @@ static void hevc_hz_8t_8w_lsx(uint8_t *src, int32_t src_stride, + + src -= 3; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); + +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); + src += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, +- mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, +- vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, +- mask2, src1, src1, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst1, vec1, filt1, dst1, +- vec2, filt2, dst1, vec3, filt3, dst1, dst1, dst1, dst1); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, +- mask2, src2, src2, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst2, vec1, filt1, dst2, +- vec2, filt2, dst2, vec3, filt3, dst2, dst2, dst2, dst2); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, +- mask2, src3, src3, mask3, vec0, vec1, vec2, vec3); +- dst3 = const_vec; +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst3, vec0, filt0, dst3, vec1, filt1, dst3, +- vec2, filt2, dst3, vec3, filt3, dst3, dst3, dst3, dst3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, ++ mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, ++ vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, ++ mask2, src1, src1, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst1, vec1, filt1, dst1, ++ vec2, filt2, dst1, vec3, filt3, dst1, dst1, dst1, dst1); ++ DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, ++ mask2, src2, src2, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst2, vec1, filt1, dst2, ++ vec2, filt2, dst2, vec3, filt3, dst2, dst2, dst2, dst2); ++ DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, ++ mask2, src3, src3, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, dst3, ++ vec2, filt2, dst3, vec3, filt3, dst3, dst3, dst3, dst3); + + __lsx_vst(dst0, dst, 0); + __lsx_vst(dst1, dst + dst_stride, 0); +@@ -863,53 +854,53 @@ static void hevc_hz_8t_12w_lsx(uint8_t *src, int32_t src_stride, + + src -= 3; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); + + mask0 = __lsx_vld(ff_hevc_mask_arr, 0); +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + mask4 = __lsx_vld(ff_hevc_mask_arr, 16); +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask4, 2, mask4, 4, mask5, mask6); ++ DUP2_ARG2(__lsx_vaddi_bu, mask4, 2, mask4, 4, mask5, mask6); + mask7 = __lsx_vaddi_bu(mask4, 6); + + for (loop_cnt = 4; loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vld, src, 8, src + src_stride, 8, src + src_stride_2x, 8, +- src + src_stride_3x, 8, src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 8, src + src_stride, 8, src + src_stride_2x, 8, ++ src + src_stride_3x, 8, src4, src5, src6, src7); + src += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src6, 128, src7, 128, src4, +- src5, src6, src7); +- +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src4, mask4, src7, src6, mask4, vec4, vec5); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, +- dst3); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, const_vec, vec5, filt0, +- dst4, dst5); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src4, mask5, src7, src6, mask5, vec4, vec5); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, dst4, vec4, filt1, dst5, vec5, filt1, dst4, dst5); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src4, mask6, src7, src6, mask6, vec4, vec5); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, +- vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, dst4, vec4, filt2, dst5, vec5, filt2, dst4, dst5); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src4, mask7, src7, src6, mask7, vec4, vec5); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, +- vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, dst4, vec4, filt3, dst5, vec5, filt3, dst4, dst5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src6, 128, src7, 128, src4, ++ src5, src6, src7); ++ ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src5, src4, mask4, src7, src6, mask4, vec4, vec5); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, ++ dst3); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, const_vec, vec5, filt0, ++ dst4, dst5); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src5, src4, mask5, src7, src6, mask5, vec4, vec5); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vdp2add_h_b, dst4, vec4, filt1, dst5, vec5, filt1, dst4, dst5); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src5, src4, mask6, src7, src6, mask6, vec4, vec5); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, ++ vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vdp2add_h_b, dst4, vec4, filt2, dst5, vec5, filt2, dst4, dst5); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src5, src4, mask7, src7, src6, mask7, vec4, vec5); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, ++ vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vdp2add_h_b, dst4, vec4, filt3, dst5, vec5, filt3, dst4, dst5); + + __lsx_vst(dst0, dst, 0); + __lsx_vst(dst1, dst + dst_stride, 0); +@@ -943,36 +934,36 @@ static void hevc_hz_8t_16w_lsx(uint8_t *src, int32_t src_stride, + src -= 3; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + mask0 = __lsx_vld(ff_hevc_mask_arr, 0); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, +- filter, 6, filt0, filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filt0, filt1, filt2, filt3); + +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + + for (loop_cnt = (height >> 1); loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src2); +- LSX_DUP2_ARG2(__lsx_vld, src, 8, src + src_stride, 8, src1, src3); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src2); ++ DUP2_ARG2(__lsx_vld, src, 8, src + src_stride, 8, src1, src3); + src += src_stride_2x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, +- dst3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, +- vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, +- vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, ++ dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, ++ vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, ++ vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); + + __lsx_vst(dst0, dst, 0); + __lsx_vst(dst2, dst + dst_stride, 0); +@@ -996,49 +987,48 @@ static void hevc_hz_8t_24w_lsx(uint8_t *src, int32_t src_stride, + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + + src -= 3; +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); + +- LSX_DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, +- mask3, mask4); +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); ++ DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, ++ mask3, mask4); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); + mask7 = __lsx_vaddi_bu(mask0, 14); + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + for (loop_cnt = (height >> 1); loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src1); ++ DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src1); + src += src_stride; +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src2, src3); ++ DUP2_ARG2(__lsx_vld, src, 0, src, 16, src2, src3); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, src1, src1, +- mask0, src2, src2, mask0, vec0, vec1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src2, mask4, src3, src3, mask0, vec4, vec5); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, +- dst3); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, const_vec, vec5, filt0, +- dst4, dst5); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, src1, src1, +- mask1, src2, src2, mask1, vec0, vec1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src2, mask5, src3, src3, mask1, vec4, vec5); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, dst4, vec4, filt1, dst5, vec5, filt1, dst4, dst5); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, src1, src1, +- mask2, src2, src2, mask2, vec0, vec1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src2, mask6, src3, src3, mask2, vec4, vec5); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, +- vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, dst4, vec4, filt2, dst5, vec5, filt2, dst4, dst5); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, src1, src1, +- mask3, src2, src2, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src2, mask7, src3, src3, mask3, vec4, vec5); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, +- vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, dst4, vec4, filt3, dst5, vec5, filt3, dst4, dst5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, src1, src1, ++ mask0, src2, src2, mask0, vec0, vec1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src3, src2, mask4, src3, src3, mask0, vec4, vec5); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, const_vec, vec5, filt0, ++ dst4, dst5); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, src1, src1, ++ mask1, src2, src2, mask1, vec0, vec1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src3, src2, mask5, src3, src3, mask1, vec4, vec5); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vdp2add_h_b, dst4, vec4, filt1, dst5, vec5, filt1, dst4, dst5); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, src1, src1, ++ mask2, src2, src2, mask2, vec0, vec1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src3, src2, mask6, src3, src3, mask2, vec4, vec5); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, ++ vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vdp2add_h_b, dst4, vec4, filt2, dst5, vec5, filt2, dst4, dst5); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, src1, src1, ++ mask3, src2, src2, mask3, vec0, vec1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src3, src2, mask7, src3, src3, mask3, vec4, vec5); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, ++ vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vdp2add_h_b, dst4, vec4, filt3, dst5, vec5, filt3, dst4, dst5); + + __lsx_vst(dst0, dst, 0); + __lsx_vst(dst1, dst, 16); +@@ -1065,39 +1055,39 @@ static void hevc_hz_8t_32w_lsx(uint8_t *src, int32_t src_stride, + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + + src -= 3; +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); + +- LSX_DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, +- mask3, mask4); +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); ++ DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, ++ mask3, mask4); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); + mask7 = __lsx_vaddi_bu(mask0, 14); + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + for (loop_cnt = height; loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src1); ++ DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src1); + src2 = __lsx_vld(src, 24); + src += src_stride; +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); + src2 = __lsx_vxori_b(src2, 128); + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, +- mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, +- vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); +- +- LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src0, mask4, src1, src0, mask5, src1, src0, +- mask6, src1, src0, mask7, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst1, vec1, filt1, dst1, +- vec2, filt2, dst1, vec3, filt3, dst1, dst1, dst1, dst1); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, +- mask2, src1, src1, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst2, vec1, filt1, dst2, +- vec2, filt2, dst2, vec3, filt3, dst2, dst2, dst2, dst2); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, +- mask2, src2, src2, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, dst3, +- vec2, filt2, dst3, vec3, filt3, dst3, dst3, dst3, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, ++ mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, ++ vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); ++ ++ DUP4_ARG3(__lsx_vshuf_b, src1, src0, mask4, src1, src0, mask5, src1, src0, ++ mask6, src1, src0, mask7, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst1, vec1, filt1, dst1, ++ vec2, filt2, dst1, vec3, filt3, dst1, dst1, dst1, dst1); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, ++ mask2, src1, src1, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst2, vec1, filt1, dst2, ++ vec2, filt2, dst2, vec3, filt3, dst2, dst2, dst2, dst2); ++ DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, ++ mask2, src2, src2, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, dst3, ++ vec2, filt2, dst3, vec3, filt3, dst3, dst3, dst3, dst3); + + __lsx_vst(dst0, dst, 0); + __lsx_vst(dst1, dst, 16); +@@ -1121,54 +1111,54 @@ static void hevc_hz_8t_48w_lsx(uint8_t *src, int32_t src_stride, + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + + src -= 3; +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); + +- LSX_DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, +- mask3, mask4); +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); ++ DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, ++ mask3, mask4); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); + mask7 = __lsx_vaddi_bu(mask0, 14); + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + for (loop_cnt = height; loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src1); ++ DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src1); + src2 = __lsx_vld(src, 32); + src3 = __lsx_vld(src, 40); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, src1, src1, +- mask0, src2, src1, mask4, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, +- dst3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, src1, src1, +- mask1, src2, src1, mask5, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, src1, src1, +- mask2, src2, src1, mask6, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, +- vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, src1, src1, +- mask3, src2, src1, mask7, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, +- vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, src1, src1, ++ mask0, src2, src1, mask4, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, ++ dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, src1, src1, ++ mask1, src2, src1, mask5, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, src1, src1, ++ mask2, src2, src1, mask6, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, ++ vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, src1, src1, ++ mask3, src2, src1, mask7, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, ++ vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); + __lsx_vst(dst0, dst, 0); + __lsx_vst(dst1, dst, 16); + __lsx_vst(dst2, dst, 32); + __lsx_vst(dst3, dst, 48); + +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, vec4, vec5); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, const_vec, vec5, filt0, +- dst4, dst5); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, vec4, vec5); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, dst4, vec4, filt1, dst5, vec5, filt1, dst4, dst5); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, vec4, vec5); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, dst4, vec4, filt2, dst5, vec5, filt2, dst4, dst5); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, vec4, vec5); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, dst4, vec4, filt3, dst5, vec5, filt3, dst4, dst5); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, vec4, vec5); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, const_vec, vec5, filt0, ++ dst4, dst5); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vdp2add_h_b, dst4, vec4, filt1, dst5, vec5, filt1, dst4, dst5); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, vec4, vec5); ++ DUP2_ARG3(__lsx_vdp2add_h_b, dst4, vec4, filt2, dst5, vec5, filt2, dst4, dst5); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, vec4, vec5); ++ DUP2_ARG3(__lsx_vdp2add_h_b, dst4, vec4, filt3, dst5, vec5, filt3, dst4, dst5); + __lsx_vst(dst4, dst, 64); + __lsx_vst(dst5, dst, 80); + dst += dst_stride; +@@ -1189,73 +1179,69 @@ static void hevc_hz_8t_64w_lsx(uint8_t *src, int32_t src_stride, + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + + src -= 3; +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); + +- LSX_DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, +- mask3, mask4); +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6) ++ DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, ++ mask3, mask4); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6) + mask7 = __lsx_vaddi_bu(mask0, 14); + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + for (loop_cnt = height; loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src0, src1, src2, +- src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src0, src1, src2, src3); + src4 = __lsx_vld(src, 56); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); + src4 = __lsx_vxori_b(src4, 128); + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, +- mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, +- vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, ++ mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, ++ vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); + __lsx_vst(dst0, dst, 0); + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src0, mask4, src1, src0, mask5, src1, src0, +- mask6, src1, src0, mask7, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst1, vec1, filt1, dst1, +- vec2, filt2, dst1, vec3, filt3, dst1, dst1, dst1, dst1); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src0, mask4, src1, src0, mask5, src1, src0, ++ mask6, src1, src0, mask7, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst1, vec1, filt1, dst1, ++ vec2, filt2, dst1, vec3, filt3, dst1, dst1, dst1, dst1); + __lsx_vst(dst1, dst, 16); + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, +- mask2, src1, src1, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst2, vec1, filt1, dst2, +- vec2, filt2, dst2, vec3, filt3, dst2, dst2, dst2, dst2); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, ++ mask2, src1, src1, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst2, vec1, filt1, dst2, ++ vec2, filt2, dst2, vec3, filt3, dst2, dst2, dst2, dst2); + __lsx_vst(dst2, dst, 32); + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src1, mask4, src2, src1, mask5, src2, src1, +- mask6, src2, src1, mask7, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, dst3, +- vec2, filt2, dst3, vec3, filt3, dst3, dst3, dst3, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src2, src1, mask4, src2, src1, mask5, src2, src1, ++ mask6, src2, src1, mask7, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, dst3, ++ vec2, filt2, dst3, vec3, filt3, dst3, dst3, dst3, dst3); + __lsx_vst(dst3, dst, 48); + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, +- mask2, src2, src2, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst4, vec1, filt1, dst4, +- vec2, filt2, dst4, vec3, filt3, dst4, dst4, dst4, dst4); ++ DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, ++ mask2, src2, src2, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst4, vec1, filt1, dst4, ++ vec2, filt2, dst4, vec3, filt3, dst4, dst4, dst4, dst4); + __lsx_vst(dst4, dst, 64); + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src2, mask4, src3, src2, mask5, src3, src2, +- mask6, src3, src2, mask7, vec0, vec1, vec2, vec3); +- dst5 = const_vec; +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst5, vec0, filt0, dst5, vec1, filt1, dst5, +- vec2, filt2, dst5, vec3, filt3, dst5, dst5, dst5, dst5); ++ DUP4_ARG3(__lsx_vshuf_b, src3, src2, mask4, src3, src2, mask5, src3, src2, ++ mask6, src3, src2, mask7, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst5, vec1, filt1, dst5, ++ vec2, filt2, dst5, vec3, filt3, dst5, dst5, dst5, dst5); + __lsx_vst(dst5, dst, 80); + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, +- mask2, src3, src3, mask3, vec0, vec1, vec2, vec3); +- dst6 = const_vec; +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst6, vec0, filt0, dst6, vec1, filt1, dst6, +- vec2, filt2, dst6, vec3, filt3, dst6, dst6, dst6, dst6); ++ DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, ++ mask2, src3, src3, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst6, vec1, filt1, dst6, ++ vec2, filt2, dst6, vec3, filt3, dst6, dst6, dst6, dst6); + __lsx_vst(dst6, dst, 96); + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, +- mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); +- dst7 = const_vec; +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst7, vec0, filt0, dst7, vec1, filt1, dst7, +- vec2, filt2, dst7, vec3, filt3, dst7, dst7, dst7, dst7); ++ DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, ++ mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst7, vec1, filt1, dst7, ++ vec2, filt2, dst7, vec3, filt3, dst7, dst7, dst7, dst7); + __lsx_vst(dst7, dst, 112); + dst += dst_stride; + } +@@ -1286,53 +1272,53 @@ static void hevc_vt_8t_4w_lsx(uint8_t *src, int32_t src_stride, + src -= src_stride_3x; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); + +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); + src += src_stride_4x; +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); + src6 = __lsx_vld(src + src_stride_2x, 0); + src += src_stride_3x; +- LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, +- src10_r, src32_r, src54_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); +- LSX_DUP2_ARG2(__lsx_vilvl_d, src21_r, src10_r, src43_r, src32_r, src2110, src4332); ++ DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_r, src32_r, src54_r, src21_r); ++ DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); ++ DUP2_ARG2(__lsx_vilvl_d, src21_r, src10_r, src43_r, src32_r, src2110, src4332); + src6554 = __lsx_vilvl_d(src65_r, src54_r); +- LSX_DUP2_ARG2(__lsx_vxori_b, src2110, 128, src4332, 128, src2110, src4332); ++ DUP2_ARG2(__lsx_vxori_b, src2110, 128, src4332, 128, src2110, src4332); + src6554 = __lsx_vxori_b(src6554, 128); + + for (loop_cnt = (height >> 3); loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src7, src8, src9, src10); + src += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src11, src12, src13, src14); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src11, src12, src13, src14); + src += src_stride_4x; + +- LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src76_r, src87_r, src98_r, src109_r); +- LSX_DUP4_ARG2(__lsx_vilvl_b, src11, src10, src12, src11, src13, src12, src14, +- src13, src1110_r, src1211_r, src1312_r, src1413_r); +- LSX_DUP4_ARG2(__lsx_vilvl_d, src87_r, src76_r, src109_r, src98_r, src1211_r, +- src1110_r, src1413_r, src1312_r, src8776, src10998, src12111110, +- src14131312); +- LSX_DUP4_ARG2(__lsx_vxori_b, src8776, 128, src10998, 128, src12111110, 128, +- src14131312, 128, src8776, src10998, src12111110, src14131312); +- +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src2110, filt0, dst10, src4332, filt1, +- dst10, src6554, filt2, dst10, src8776, filt3, dst10, dst10, dst10, +- dst10); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src4332, filt0, dst32, src6554, filt1, +- dst32, src8776, filt2, dst32, src10998, filt3, dst32, dst32, +- dst32, dst32); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src6554, filt0, dst54, src8776, filt1, +- dst54, src10998, filt2, dst54, src12111110, filt3, dst54, dst54, +- dst54, dst54); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src8776, filt0, dst76, src10998, +- filt1, dst76, src12111110, filt2, dst76, src14131312, filt3, dst76, +- dst76, dst76, dst76); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src76_r, src87_r, src98_r, src109_r); ++ DUP4_ARG2(__lsx_vilvl_b, src11, src10, src12, src11, src13, src12, src14, ++ src13, src1110_r, src1211_r, src1312_r, src1413_r); ++ DUP4_ARG2(__lsx_vilvl_d, src87_r, src76_r, src109_r, src98_r, src1211_r, ++ src1110_r, src1413_r, src1312_r, src8776, src10998, src12111110, ++ src14131312); ++ DUP4_ARG2(__lsx_vxori_b, src8776, 128, src10998, 128, src12111110, 128, ++ src14131312, 128, src8776, src10998, src12111110, src14131312); ++ ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src2110, filt0, dst10, src4332, filt1, ++ dst10, src6554, filt2, dst10, src8776, filt3, dst10, dst10, dst10, ++ dst10); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src4332, filt0, dst32, src6554, filt1, ++ dst32, src8776, filt2, dst32, src10998, filt3, dst32, dst32, ++ dst32, dst32); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src6554, filt0, dst54, src8776, filt1, ++ dst54, src10998, filt2, dst54, src12111110, filt3, dst54, dst54, ++ dst54, dst54); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src8776, filt0, dst76, src10998, ++ filt1, dst76, src12111110, filt2, dst76, src14131312, filt3, dst76, ++ dst76, dst76, dst76); + + __lsx_vstelm_d(dst10, dst, 0, 0); + __lsx_vstelm_d(dst10, dst + dst_stride, 0, 1); +@@ -1373,44 +1359,44 @@ static void hevc_vt_8t_8w_lsx(uint8_t *src, int32_t src_stride, + src -= src_stride_3x; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, +- filter, 6, filt0, filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filt0, filt1, filt2, filt3); + +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); + src += src_stride_4x; +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); + src6 = __lsx_vld(src + src_stride_2x, 0); + src += src_stride_3x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); +- LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, +- src10_r, src32_r, src54_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); ++ DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_r, src32_r, src54_r, src21_r); ++ DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src7, src8, src9, src10); + src += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, +- src7, src8, src9, src10); +- LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src76_r, src87_r, src98_r, src109_r); +- +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, dst0_r, src54_r, filt2, dst0_r, src76_r, filt3, dst0_r, +- dst0_r, dst0_r, dst0_r); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, +- filt1, dst1_r, src65_r, filt2, dst1_r, src87_r, filt3, dst1_r, +- dst1_r, dst1_r, dst1_r); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src32_r, filt0, dst2_r, src54_r, +- filt1, dst2_r, src76_r, filt2, dst2_r, src98_r, filt3, dst2_r, +- dst2_r, dst2_r, dst2_r); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src43_r, filt0, dst3_r, src65_r, +- filt1, dst3_r, src87_r, filt2, dst3_r, src109_r, filt3, dst3_r, +- dst3_r, dst3_r, dst3_r); ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src76_r, src87_r, src98_r, src109_r); ++ ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, dst0_r, src54_r, filt2, dst0_r, src76_r, filt3, dst0_r, ++ dst0_r, dst0_r, dst0_r); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, ++ filt1, dst1_r, src65_r, filt2, dst1_r, src87_r, filt3, dst1_r, ++ dst1_r, dst1_r, dst1_r); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src32_r, filt0, dst2_r, src54_r, ++ filt1, dst2_r, src76_r, filt2, dst2_r, src98_r, filt3, dst2_r, ++ dst2_r, dst2_r, dst2_r); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src43_r, filt0, dst3_r, src65_r, ++ filt1, dst3_r, src87_r, filt2, dst3_r, src109_r, filt3, dst3_r, ++ dst3_r, dst3_r, dst3_r); + + __lsx_vst(dst0_r, dst, 0); + __lsx_vst(dst1_r, dst + dst_stride, 0); +@@ -1453,57 +1439,57 @@ static void hevc_vt_8t_12w_lsx(uint8_t *src, int32_t src_stride, + src -= src_stride_3x; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); + src += src_stride_4x; +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); + src6 = __lsx_vld(src + src_stride_2x, 0); + src += src_stride_3x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); +- LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, +- src10_r, src32_r, src54_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); +- LSX_DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, +- src10_l, src32_l, src54_l, src21_l); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, src43_l, src65_l); +- LSX_DUP2_ARG2(__lsx_vilvl_d, src21_l, src10_l, src43_l, src32_l, src2110, src4332); ++ DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_r, src32_r, src54_r, src21_r); ++ DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); ++ DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_l, src32_l, src54_l, src21_l); ++ DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, src43_l, src65_l); ++ DUP2_ARG2(__lsx_vilvl_d, src21_l, src10_l, src43_l, src32_l, src2110, src4332); + src6554 = __lsx_vilvl_d(src65_l, src54_l); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src+ src_stride_2x, 0, +- src + src_stride_3x, 0, src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src+ src_stride_2x, 0, ++ src + src_stride_3x, 0, src7, src8, src9, src10); + src += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, +- src8, src9, src10); +- LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src76_r, src87_r, src98_r, src109_r); +- LSX_DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src76_l, src87_l, src98_l, src109_l); +- LSX_DUP2_ARG2(__lsx_vilvl_d, src87_l, src76_l, src109_l, src98_l, src8776, src10998); +- +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, dst0_r, src54_r, filt2, dst0_r, src76_r, filt3, dst0_r, +- dst0_r, dst0_r, dst0_r); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, +- filt1, dst1_r, src65_r, filt2, dst1_r, src87_r, filt3, dst1_r, +- dst1_r, dst1_r, dst1_r); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src32_r, filt0, dst2_r, src54_r, +- filt1, dst2_r, src76_r, filt2, dst2_r, src98_r, filt3, dst2_r, +- dst2_r, dst2_r, dst2_r); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src43_r, filt0, dst3_r, src65_r, +- filt1, dst3_r, src87_r, filt2, dst3_r, src109_r, filt3, dst3_r, +- dst3_r, dst3_r, dst3_r); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src2110, filt0, dst0_l, src4332, +- filt1, dst0_l, src6554, filt2, dst0_l, src8776, filt3, dst0_l, +- dst0_l, dst0_l, dst0_l); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src4332, filt0, dst1_l, src6554, +- filt1, dst1_l, src8776, filt2, dst1_l, src10998, filt3, dst1_l, +- dst1_l, dst1_l, dst1_l); ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, ++ src8, src9, src10); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src76_r, src87_r, src98_r, src109_r); ++ DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src76_l, src87_l, src98_l, src109_l); ++ DUP2_ARG2(__lsx_vilvl_d, src87_l, src76_l, src109_l, src98_l, src8776, src10998); ++ ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, dst0_r, src54_r, filt2, dst0_r, src76_r, filt3, dst0_r, ++ dst0_r, dst0_r, dst0_r); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, ++ filt1, dst1_r, src65_r, filt2, dst1_r, src87_r, filt3, dst1_r, ++ dst1_r, dst1_r, dst1_r); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src32_r, filt0, dst2_r, src54_r, ++ filt1, dst2_r, src76_r, filt2, dst2_r, src98_r, filt3, dst2_r, ++ dst2_r, dst2_r, dst2_r); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src43_r, filt0, dst3_r, src65_r, ++ filt1, dst3_r, src87_r, filt2, dst3_r, src109_r, filt3, dst3_r, ++ dst3_r, dst3_r, dst3_r); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src2110, filt0, dst0_l, src4332, ++ filt1, dst0_l, src6554, filt2, dst0_l, src8776, filt3, dst0_l, ++ dst0_l, dst0_l, dst0_l); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src4332, filt0, dst1_l, src6554, ++ filt1, dst1_l, src8776, filt2, dst1_l, src10998, filt3, dst1_l, ++ dst1_l, dst1_l, dst1_l); + + __lsx_vst(dst0_r, dst, 0); + __lsx_vst(dst1_r, dst + dst_stride, 0); +@@ -1558,67 +1544,66 @@ static void hevc_vt_8t_16multx4mult_lsx(uint8_t *src, + src -= src_stride_3x; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, ++ filt1, filt2, filt3); + + for (cnt = width >> 4; cnt--;) { + src_tmp = src; + dst_tmp = dst; + +- LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, +- src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src_tmp + src_stride_2x, ++ 0, src_tmp + src_stride_3x, 0, src0, src1, src2, src3); + src_tmp += src_stride_4x; +- LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); ++ DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); + src6 = __lsx_vld(src_tmp + src_stride_2x, 0); + src_tmp += src_stride_3x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); +- LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, +- src10_r, src32_r, src54_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); +- LSX_DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, +- src10_l, src32_l, src54_l, src21_l); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, src43_l, src65_l); ++ DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_r, src32_r, src54_r, src21_r); ++ DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); ++ DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_l, src32_l, src54_l, src21_l); ++ DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, src43_l, src65_l); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, +- src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, +- src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, ++ src7, src8, src9, src10); + src_tmp += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, +- src7, src8, src9, src10); +- LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src76_r, src87_r, src98_r, src109_r); +- LSX_DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src76_l, src87_l, src98_l, src109_l); +- +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, dst0_r, src54_r, filt2, dst0_r, src76_r, filt3, +- dst0_r, dst0_r, dst0_r, dst0_r); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, +- filt1, dst1_r, src65_r, filt2, dst1_r, src87_r, filt3, +- dst1_r, dst1_r, dst1_r, dst1_r); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src32_r, filt0, dst2_r, src54_r, +- filt1, dst2_r, src76_r, filt2, dst2_r, src98_r, filt3, +- dst2_r, dst2_r, dst2_r, dst2_r); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src43_r, filt0, dst3_r, src65_r, +- filt1, dst3_r, src87_r, filt2, dst3_r, src109_r, filt3, +- dst3_r, dst3_r, dst3_r, dst3_r); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, +- filt1, dst0_l, src54_l, filt2, dst0_l, src76_l, filt3, +- dst0_l, dst0_l, dst0_l, dst0_l); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, +- filt1, dst1_l, src65_l, filt2, dst1_l, src87_l, filt3, +- dst1_l, dst1_l, dst1_l, dst1_l); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src32_l, filt0, dst2_l, src54_l, +- filt1, dst2_l, src76_l, filt2, dst2_l, src98_l, filt3, +- dst2_l, dst2_l, dst2_l, dst2_l); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, src43_l, filt0, dst3_l, src65_l, +- filt1, dst3_l, src87_l, filt2, dst3_l, src109_l, filt3, +- dst3_l, dst3_l, dst3_l, dst3_l); ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src76_r, src87_r, src98_r, src109_r); ++ DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src76_l, src87_l, src98_l, src109_l); ++ ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, dst0_r, src54_r, filt2, dst0_r, src76_r, filt3, ++ dst0_r, dst0_r, dst0_r, dst0_r); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, ++ filt1, dst1_r, src65_r, filt2, dst1_r, src87_r, filt3, ++ dst1_r, dst1_r, dst1_r, dst1_r); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src32_r, filt0, dst2_r, src54_r, ++ filt1, dst2_r, src76_r, filt2, dst2_r, src98_r, filt3, ++ dst2_r, dst2_r, dst2_r, dst2_r); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src43_r, filt0, dst3_r, src65_r, ++ filt1, dst3_r, src87_r, filt2, dst3_r, src109_r, filt3, ++ dst3_r, dst3_r, dst3_r, dst3_r); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, ++ filt1, dst0_l, src54_l, filt2, dst0_l, src76_l, filt3, ++ dst0_l, dst0_l, dst0_l, dst0_l); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, ++ filt1, dst1_l, src65_l, filt2, dst1_l, src87_l, filt3, ++ dst1_l, dst1_l, dst1_l, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src32_l, filt0, dst2_l, src54_l, ++ filt1, dst2_l, src76_l, filt2, dst2_l, src98_l, filt3, ++ dst2_l, dst2_l, dst2_l, dst2_l); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src43_l, filt0, dst3_l, src65_l, ++ filt1, dst3_l, src87_l, filt2, dst3_l, src109_l, filt3, ++ dst3_l, dst3_l, dst3_l, dst3_l); + + __lsx_vst(dst0_r, dst_tmp, 0); + __lsx_vst(dst1_r, dst_tmp + dst_stride, 0); +@@ -1719,69 +1704,69 @@ static void hevc_hv_8t_4w_lsx(uint8_t *src, int32_t src_stride, + mask0 = __lsx_vld(ff_hevc_mask_arr, 16); + + src -= src_stride_3x + 3; +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, +- filter_x, 6, filt0, filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, ++ filter_x, 6, filt0, filt1, filt2, filt3); + filter_vec = __lsx_vld(filter_y, 0); + filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); + +- LSX_DUP4_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filter_vec, 2, +- filter_vec, 3, filt_h0, filt_h1, filt_h2, filt_h3); +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP4_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filter_vec, 2, ++ filter_vec, 3, filt_h0, filt_h1, filt_h2, filt_h3); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); + src += src_stride_4x; +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); + src6 = __lsx_vld(src + src_stride_2x, 0); + src += src_stride_3x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, +- src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, ++ src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src0, mask0, src3, src0, mask1, src3, src0, +- mask2, src3, src0, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src1, mask0, src4, src1, mask1, src4, src1, +- mask2, src4, src1, mask3, vec4, vec5, vec6, vec7); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src5, src2, mask0, src5, src2, mask1, src5, src2, +- mask2, src5, src2, mask3, vec8, vec9, vec10, vec11); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src6, src3, mask0, src6, src3, mask1, src6, src3, +- mask2, src6, src3, mask3, vec12, vec13, vec14, vec15); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst30, vec1, filt1, dst30, +- vec2, filt2, dst30, vec3, filt3, dst30, dst30, dst30, dst30); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst41, vec5, filt1, dst41, +- vec6, filt2, dst41, vec7, filt3, dst41, dst41, dst41, dst41); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec8, filt0, dst52, vec9, filt1, dst52, +- vec10, filt2, dst52, vec11, filt3, dst52, dst52, dst52, dst52); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec12, filt0, dst63, vec13, filt1, dst63, +- vec14, filt2, dst63, vec15, filt3, dst63, dst63, dst63, dst63); +- +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst41, dst30, dst52, dst41, dst10_r, dst21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst41, dst30, dst52, dst41, dst43_r, dst54_r); ++ DUP4_ARG3(__lsx_vshuf_b, src3, src0, mask0, src3, src0, mask1, src3, src0, ++ mask2, src3, src0, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src4, src1, mask0, src4, src1, mask1, src4, src1, ++ mask2, src4, src1, mask3, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src5, src2, mask0, src5, src2, mask1, src5, src2, ++ mask2, src5, src2, mask3, vec8, vec9, vec10, vec11); ++ DUP4_ARG3(__lsx_vshuf_b, src6, src3, mask0, src6, src3, mask1, src6, src3, ++ mask2, src6, src3, mask3, vec12, vec13, vec14, vec15); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst30, vec1, filt1, dst30, ++ vec2, filt2, dst30, vec3, filt3, dst30, dst30, dst30, dst30); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst41, vec5, filt1, dst41, ++ vec6, filt2, dst41, vec7, filt3, dst41, dst41, dst41, dst41); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec8, filt0, dst52, vec9, filt1, dst52, ++ vec10, filt2, dst52, vec11, filt3, dst52, dst52, dst52, dst52); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec12, filt0, dst63, vec13, filt1, dst63, ++ vec14, filt2, dst63, vec15, filt3, dst63, dst63, dst63, dst63); ++ ++ DUP2_ARG2(__lsx_vilvl_h, dst41, dst30, dst52, dst41, dst10_r, dst21_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst41, dst30, dst52, dst41, dst43_r, dst54_r); + dst32_r = __lsx_vilvl_h(dst63, dst52); + dst65_r = __lsx_vilvh_h(dst63, dst52); + dst66 = __lsx_vreplvei_d(dst63, 1); + + for (loop_cnt = height >> 2; loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src7, src8, src9, src10); + src += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, +- src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src9, src7, mask0, src9, src7, mask1, src9, src7, +- mask2, src9, src7, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src10, src8, mask0, src10, src8, mask1, src10, src8, +- mask2, src10, src8, mask3, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src9, src7, mask0, src9, src7, mask1, src9, src7, ++ mask2, src9, src7, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src10, src8, mask0, src10, src8, mask1, src10, src8, ++ mask2, src10, src8, mask3, vec4, vec5, vec6, vec7); + +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst97, vec1, filt1, +- dst97, vec2, filt2, dst97, vec3, filt3, dst97, dst97, dst97, dst97); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst108, vec5, filt1, +- dst108, vec6, filt2, dst108, vec7, filt3, dst108, dst108, dst108, dst108); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst97, vec1, filt1, ++ dst97, vec2, filt2, dst97, vec3, filt3, dst97, dst97, dst97, dst97); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst108, vec5, filt1, ++ dst108, vec6, filt2, dst108, vec7, filt3, dst108, dst108, dst108, dst108); + +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst97, dst66, dst108, dst97, dst76_r, dst87_r); ++ DUP2_ARG2(__lsx_vilvl_h, dst97, dst66, dst108, dst97, dst76_r, dst87_r); + dst109_r = __lsx_vilvh_h(dst108, dst97); + dst66 = __lsx_vreplvei_d(dst97, 1); + dst98_r = __lsx_vilvl_h(dst66, dst108); +@@ -1794,9 +1779,9 @@ static void hevc_hv_8t_4w_lsx(uint8_t *src, int32_t src_stride, + filt_h0, filt_h1, filt_h2, filt_h3); + dst3_r = __lsx_hevc_filt_8tap_w(dst43_r, dst65_r, dst87_r, dst109_r, + filt_h0, filt_h1, filt_h2, filt_h3); +- LSX_DUP4_ARG2(__lsx_vsrli_w, dst0_r, 6, dst1_r, 6, dst2_r, 6, dst3_r, 6, +- dst0_r, dst1_r, dst2_r, dst3_r); +- LSX_DUP2_ARG2(__lsx_vpickev_h, dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst2_r); ++ DUP4_ARG2(__lsx_vsrli_w, dst0_r, 6, dst1_r, 6, dst2_r, 6, dst3_r, 6, ++ dst0_r, dst1_r, dst2_r, dst3_r); ++ DUP2_ARG2(__lsx_vpickev_h, dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst2_r); + __lsx_vstelm_d(dst0_r, dst, 0, 0); + __lsx_vstelm_d(dst0_r, dst + dst_stride, 0, 1); + __lsx_vstelm_d(dst2_r, dst + dst_stride_2x, 0, 0); +@@ -1842,80 +1827,79 @@ static void hevc_hv_8t_8multx1mult_lsx(uint8_t *src, + __m128i mask0 = {0x403030202010100, 0x807070606050504}; + + src -= src_stride_3x + 3; +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, +- filter_x, 6, filt0, filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, ++ filter_x, 6, filt0, filt1, filt2, filt3); + + filter_vec = __lsx_vld(filter_y, 0); + filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); + +- LSX_DUP4_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filter_vec, 2, +- filter_vec, 3, filt_h0, filt_h1, filt_h2, filt_h3); ++ DUP4_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filter_vec, 2, ++ filter_vec, 3, filt_h0, filt_h1, filt_h2, filt_h3); + +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + for (cnt = width >> 3; cnt--;) { + src_tmp = src; + dst_tmp = dst; +- LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, +- src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src_tmp + src_stride_2x, ++ 0, src_tmp + src_stride_3x, 0, src0, src1, src2, src3); + src_tmp += src_stride_4x; +- LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); ++ DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); + src6 = __lsx_vld(src_tmp + src_stride_2x, 0); + src_tmp += src_stride_3x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); + + /* row 0 row 1 row 2 row 3 */ +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, +- mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, +- mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, +- mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, +- mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, +- vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst1, vec5, filt1, dst1, +- vec6, filt2, dst1, vec7, filt3, dst1, dst1, dst1, dst1); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec8, filt0, dst2, vec9, filt1, dst2, +- vec10, filt2, dst2, vec11, filt3, dst2, dst2, dst2, dst2); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec12, filt0, dst3, vec13, filt1, +- dst3, vec14, filt2, dst3, vec15, filt3, dst3, dst3, dst3, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, ++ mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, ++ mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, ++ mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); ++ DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, ++ mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, ++ vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst1, vec5, filt1, dst1, ++ vec6, filt2, dst1, vec7, filt3, dst1, dst1, dst1, dst1); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec8, filt0, dst2, vec9, filt1, dst2, ++ vec10, filt2, dst2, vec11, filt3, dst2, dst2, dst2, dst2); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec12, filt0, dst3, vec13, filt1, ++ dst3, vec14, filt2, dst3, vec15, filt3, dst3, dst3, dst3, dst3); + + /* row 4 row 5 row 6 */ +- LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, +- mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, src5, +- mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, src6, +- mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst4, filt1, vec1, dst4, +- vec2, filt2, dst4, vec3, filt3, dst4, dst4, dst4, dst4); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst5, vec5, filt1, dst5, +- vec6, filt2, dst5, vec7, filt3, dst5, dst5, dst5, dst5); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec8, filt0, dst6, vec9, filt1, dst6, +- vec10, filt2, dst6, vec11, filt3, dst6, dst6, dst6, dst6); ++ DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, ++ mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, src5, ++ mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, src6, ++ mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst4, filt1, vec1, dst4, ++ vec2, filt2, dst4, vec3, filt3, dst4, dst4, dst4, dst4); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst5, vec5, filt1, dst5, ++ vec6, filt2, dst5, vec7, filt3, dst5, dst5, dst5, dst5); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec8, filt0, dst6, vec9, filt1, dst6, ++ vec10, filt2, dst6, vec11, filt3, dst6, dst6, dst6, dst6); + + for (loop_cnt = height; loop_cnt--;) { + src7 = __lsx_vld(src_tmp, 0); + src7 = __lsx_vxori_b(src7, 128); + src_tmp += src_stride; + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, src7, +- src7, mask2, src7, src7, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst7, vec1, filt1, +- dst7, vec2, filt2, dst7, vec3, filt3, dst7, dst7, dst7, dst7); ++ DUP4_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, src7, ++ src7, mask2, src7, src7, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst7, vec1, filt1, ++ dst7, vec2, filt2, dst7, vec3, filt3, dst7, dst7, dst7, dst7); + +- LSX_DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, +- dst10_r, dst32_r, dst54_r, dst76_r); +- LSX_DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, +- dst10_l, dst32_l, dst54_l, dst76_l); ++ DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, ++ dst10_r, dst32_r, dst54_r, dst76_r); ++ DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, ++ dst10_l, dst32_l, dst54_l, dst76_l); + + dst0_r = __lsx_hevc_filt_8tap_w(dst10_r, dst32_r, dst54_r, dst76_r, + filt_h0, filt_h1, filt_h2, filt_h3); +@@ -1977,81 +1961,81 @@ static void hevc_hv_8t_12w_lsx(uint8_t *src, int32_t src_stride, + __m128i dst0_r, dst0_l, dst1_r, dst2_r, dst3_r; + + src -= src_stride_3x + 3; +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, +- filter_x, 6, filt0, filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, ++ filter_x, 6, filt0, filt1, filt2, filt3); + + filter_vec = __lsx_vld(filter_y, 0); + filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); + +- LSX_DUP4_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filter_vec, 2, +- filter_vec, 3, filt_h0, filt_h1, filt_h2, filt_h3); ++ DUP4_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filter_vec, 2, ++ filter_vec, 3, filt_h0, filt_h1, filt_h2, filt_h3); + + mask0 = __lsx_vld(ff_hevc_mask_arr, 0); +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + src_tmp = src; + dst_tmp = dst; + +- LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, +- src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, ++ src0, src1, src2, src3); + src_tmp += src_stride_4x; +- LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); ++ DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); + src6 = __lsx_vld(src_tmp + src_stride_2x, 0); + src_tmp += src_stride_3x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, +- src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, ++ src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); + + /* row 0 row 1 row 2 row 3 */ +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, +- mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, +- mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, +- mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, +- mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, +- vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst1, vec5, filt1, dst1, +- vec6, filt2, dst1, vec7, filt3, dst1, dst1, dst1, dst1); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec8, filt0, dst2, vec9, filt1, dst2, +- vec10, filt2, dst2, vec11, filt3, dst2, dst2, dst2, dst2); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec12, filt0, dst3, vec13, filt1, dst3, +- vec14, filt2, dst3, vec15, filt3, dst3, dst3, dst3, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, ++ mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, ++ mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, ++ mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); ++ DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, ++ mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, ++ vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst1, vec5, filt1, dst1, ++ vec6, filt2, dst1, vec7, filt3, dst1, dst1, dst1, dst1); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec8, filt0, dst2, vec9, filt1, dst2, ++ vec10, filt2, dst2, vec11, filt3, dst2, dst2, dst2, dst2); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec12, filt0, dst3, vec13, filt1, dst3, ++ vec14, filt2, dst3, vec15, filt3, dst3, dst3, dst3, dst3); + + /* row 4 row 5 row 6 */ +- LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, +- mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, src5, +- mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, src6, +- mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst4, vec1, filt1, dst4, +- vec2, filt2, dst4, vec3, filt3, dst4, dst4, dst4, dst4); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst5, vec5, filt1, dst5, +- vec6, filt2, dst5, vec7, filt3, dst5, dst5, dst5, dst5); ++ DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, ++ mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, src5, ++ mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, src6, ++ mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst4, vec1, filt1, dst4, ++ vec2, filt2, dst4, vec3, filt3, dst4, dst4, dst4, dst4); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst5, vec5, filt1, dst5, ++ vec6, filt2, dst5, vec7, filt3, dst5, dst5, dst5, dst5); + dst6 = const_vec; +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec8, filt0, dst6, vec9, filt1, dst6, +- vec10, filt2, dst6, vec11, filt3, dst6, dst6, dst6, dst6); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec8, filt0, dst6, vec9, filt1, dst6, ++ vec10, filt2, dst6, vec11, filt3, dst6, dst6, dst6, dst6); + + for (loop_cnt = height; loop_cnt--;) { + src7 = __lsx_vld(src_tmp, 0); + src7 = __lsx_vxori_b(src7, 128); + src_tmp += src_stride; + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, src7, src7, +- mask2, src7, src7, mask3, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst7, vec1, filt1, dst7, +- vec2, filt2, dst7, vec3, filt3, dst7, dst7, dst7, dst7); +- LSX_DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, +- dst10_r, dst32_r, dst54_r, dst76_r); +- LSX_DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, +- dst10_l, dst32_l, dst54_l, dst76_l); ++ DUP4_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, src7, src7, ++ mask2, src7, src7, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst7, vec1, filt1, dst7, ++ vec2, filt2, dst7, vec3, filt3, dst7, dst7, dst7, dst7); ++ DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, ++ dst10_r, dst32_r, dst54_r, dst76_r); ++ DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, ++ dst10_l, dst32_l, dst54_l, dst76_l); + dst0_r = __lsx_hevc_filt_8tap_w(dst10_r, dst32_r, dst54_r, dst76_r, filt_h0, + filt_h1, filt_h2, filt_h3); + dst0_l = __lsx_hevc_filt_8tap_w(dst10_l, dst32_l, dst54_l, dst76_l, filt_h0, +@@ -2075,64 +2059,61 @@ static void hevc_hv_8t_12w_lsx(uint8_t *src, int32_t src_stride, + dst += 8; + + mask4 = __lsx_vld(ff_hevc_mask_arr, 16); +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask4, 2, mask4, 4, mask5, mask6); ++ DUP2_ARG2(__lsx_vaddi_bu, mask4, 2, mask4, 4, mask5, mask6); + mask7 = __lsx_vaddi_bu(mask4, 6); + +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); + src += src_stride_4x; +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); + src6 = __lsx_vld(src + src_stride_2x, 0); + src += src_stride_3x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3) +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3) ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); + +- LSX_DUP4_ARG3(__lsx_vshuf_b, src3, src0, mask4, src3, src0, mask5, src3, src0, +- mask6, src3, src0, mask7, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src1, mask4, src4, src1, mask5, src4, src1, +- mask6, src4, src1, mask7, vec4, vec5, vec6, vec7); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src5, src2, mask4, src5, src2, mask5, src5, src2, +- mask6, src5, src2, mask7, vec8, vec9, vec10, vec11); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src6, src3, mask4, src6, src3, mask5, src6, src3, +- mask6, src6, src3, mask7, vec12, vec13, vec14, vec15); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst30, vec1, filt1, dst30, +- vec2, filt2, dst30, vec3, filt3, dst30, dst30, dst30, dst30); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst41, vec5, filt1, dst41, +- vec6, filt2, dst41, vec7, filt3, dst41, dst41, dst41, dst41); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec8, filt0, dst52, vec9, filt1, dst52, +- vec10, filt2, dst52, vec11, filt3, dst52, dst52, dst52, dst52); +- dst63 = const_vec; +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec12, filt0, dst63, vec13, filt1, dst63, +- vec14, filt2, dst63, vec15, filt3, dst63, dst63, dst63, dst63); +- +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst41, dst30, dst52, dst41, dst10_r, dst21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst41, dst30, dst52, dst41, dst43_r, dst54_r); ++ DUP4_ARG3(__lsx_vshuf_b, src3, src0, mask4, src3, src0, mask5, src3, src0, ++ mask6, src3, src0, mask7, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src4, src1, mask4, src4, src1, mask5, src4, src1, ++ mask6, src4, src1, mask7, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src5, src2, mask4, src5, src2, mask5, src5, src2, ++ mask6, src5, src2, mask7, vec8, vec9, vec10, vec11); ++ DUP4_ARG3(__lsx_vshuf_b, src6, src3, mask4, src6, src3, mask5, src6, src3, ++ mask6, src6, src3, mask7, vec12, vec13, vec14, vec15); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst30, vec1, filt1, dst30, ++ vec2, filt2, dst30, vec3, filt3, dst30, dst30, dst30, dst30); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst41, vec5, filt1, dst41, ++ vec6, filt2, dst41, vec7, filt3, dst41, dst41, dst41, dst41); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec8, filt0, dst52, vec9, filt1, dst52, ++ vec10, filt2, dst52, vec11, filt3, dst52, dst52, dst52, dst52); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec12, filt0, dst63, vec13, filt1, dst63, ++ vec14, filt2, dst63, vec15, filt3, dst63, dst63, dst63, dst63); ++ ++ DUP2_ARG2(__lsx_vilvl_h, dst41, dst30, dst52, dst41, dst10_r, dst21_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst41, dst30, dst52, dst41, dst43_r, dst54_r); + dst32_r = __lsx_vilvl_h(dst63, dst52); + dst65_r = __lsx_vilvh_h(dst63, dst52); + + dst66 = __lsx_vreplvei_d(dst63, 1); + + for (loop_cnt = height >> 2; loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src7, src8, src9, src10); + src += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, +- src8, src9, src10); +- +- LSX_DUP4_ARG3(__lsx_vshuf_b, src9, src7, mask4, src9, src7, mask5, src9, src7, +- mask6, src9, src7, mask7, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src10, src8, mask4, src10, src8, mask5, src10, +- src8, mask6, src10, src8, mask7, vec4, vec5, vec6, vec7); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst97, vec1, filt1, +- dst97, vec2, filt2, dst97, vec3, filt3, dst97, dst97, dst97, +- dst97); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst108, vec5, filt1, +- dst108, vec6, filt2, dst108, vec7, filt3, dst108, dst108, dst108, +- dst108); +- +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst97, dst66, dst108, dst97, dst76_r, dst87_r); ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, ++ src8, src9, src10); ++ ++ DUP4_ARG3(__lsx_vshuf_b, src9, src7, mask4, src9, src7, mask5, src9, src7, ++ mask6, src9, src7, mask7, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src10, src8, mask4, src10, src8, mask5, src10, ++ src8, mask6, src10, src8, mask7, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst97, vec1, filt1, ++ dst97, vec2, filt2, dst97, vec3, filt3, dst97, dst97, dst97, dst97); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst108, vec5, filt1, dst108, ++ vec6, filt2, dst108, vec7, filt3, dst108, dst108, dst108, dst108); ++ ++ DUP2_ARG2(__lsx_vilvl_h, dst97, dst66, dst108, dst97, dst76_r, dst87_r); + dst109_r = __lsx_vilvh_h(dst108, dst97); + dst66 = __lsx_vreplvei_d(dst97, 1); + dst98_r = __lsx_vilvl_h(dst66, dst108); +@@ -2145,9 +2126,9 @@ static void hevc_hv_8t_12w_lsx(uint8_t *src, int32_t src_stride, + filt_h1, filt_h2, filt_h3); + dst3_r = __lsx_hevc_filt_8tap_w(dst43_r, dst65_r, dst87_r, dst109_r, filt_h0, + filt_h1, filt_h2, filt_h3); +- LSX_DUP4_ARG2(__lsx_vsrli_w, dst0_r, 6, dst1_r, 6, dst2_r, 6, dst3_r, 6, +- dst0_r, dst1_r, dst2_r, dst3_r); +- LSX_DUP2_ARG2(__lsx_vpickev_h, dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst2_r); ++ DUP4_ARG2(__lsx_vsrli_w, dst0_r, 6, dst1_r, 6, dst2_r, 6, dst3_r, 6, ++ dst0_r, dst1_r, dst2_r, dst3_r); ++ DUP2_ARG2(__lsx_vpickev_h, dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst2_r); + __lsx_vstelm_d(dst0_r, dst, 0, 0); + __lsx_vstelm_d(dst0_r, dst + dst_stride, 0, 1); + __lsx_vstelm_d(dst2_r, dst + dst_stride_2x, 0, 0); +@@ -2226,29 +2207,29 @@ static void hevc_hz_4t_32w_lsx(uint8_t *src, + __m128i const_vec; + + src -= 1; +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 8, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 8, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 10); + + for (loop_cnt = height; loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src1); ++ DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src1); + src2 = __lsx_vld(src, 24); + src += src_stride; + +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); + src2 = __lsx_vxori_b(src2, 128); + +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask2, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src2, src2, mask0, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, +- dst3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask3, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask1, src2, src2, mask1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask2, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src2, src2, mask0, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, ++ const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, ++ dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask3, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask1, src2, src2, mask1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, ++ vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); + __lsx_vst(dst0, dst, 0); + __lsx_vst(dst1, dst, 16); + __lsx_vst(dst2, dst, 32); +@@ -2276,30 +2257,30 @@ static void hevc_vt_4t_16w_lsx(uint8_t *src, + + src -= src_stride; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); + +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); + src2 = __lsx_vld(src + src_stride_2x, 0); + src += src_stride_3x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); + src2 = __lsx_vxori_b(src2, 128); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); ++ DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); ++ DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src3, src4); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src3, src4); + src += src_stride_2x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, dst0_r, dst0_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, +- filt1, dst0_l, dst0_l); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, +- filt1, dst1_r, dst1_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, +- filt1, dst1_l, dst1_l); ++ DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); ++ DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); ++ DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, dst0_r, dst0_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, ++ filt1, dst0_l, dst0_l); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, ++ filt1, dst1_r, dst1_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, ++ filt1, dst1_l, dst1_l); + __lsx_vst(dst0_r, dst, 0); + __lsx_vst(dst0_l, dst, 16); + dst += dst_stride; +@@ -2307,19 +2288,19 @@ static void hevc_vt_4t_16w_lsx(uint8_t *src, + __lsx_vst(dst1_l, dst, 16); + dst += dst_stride; + +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src5, src2); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src5, src2); + src += src_stride_2x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src32_r, filt0, dst0_r, src10_r, +- filt1, dst0_r, dst0_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src32_l, filt0, dst0_l, src10_l, +- filt1, dst0_l, dst0_l); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src43_r, filt0, dst1_r, src21_r, +- filt1, dst1_r, dst1_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src43_l, filt0, dst1_l, src21_l, +- filt1, dst1_l, dst1_l); ++ DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); ++ DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); ++ DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src32_r, filt0, dst0_r, src10_r, ++ filt1, dst0_r, dst0_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src32_l, filt0, dst0_l, src10_l, ++ filt1, dst0_l, dst0_l); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src43_r, filt0, dst1_r, src21_r, ++ filt1, dst1_r, dst1_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src43_l, filt0, dst1_l, src21_l, ++ filt1, dst1_l, dst1_l); + __lsx_vst(dst0_r, dst, 0); + __lsx_vst(dst0_l, dst, 16); + dst += dst_stride; +@@ -2352,45 +2333,45 @@ static void hevc_vt_4t_24w_lsx(uint8_t *src, + + src -= src_stride; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); + +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); + src2 = __lsx_vld(src + src_stride_2x, 0); +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); + src2 = __lsx_vxori_b(src2, 128); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); ++ DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); ++ DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); + +- LSX_DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src6, src7); ++ DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src6, src7); + src8 = __lsx_vld(src + src_stride_2x, 16); + src += src_stride_3x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); ++ DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); + src8 = __lsx_vxori_b(src8, 128); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); ++ DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src3, src4); +- LSX_DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src3, src4); ++ DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); ++ DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); ++ DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); + +- LSX_DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src9, src10); ++ DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src9, src10); + src += src_stride_2x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); +- +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, dst0_r, dst0_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, +- filt1, dst0_l, dst0_l); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, +- filt1, dst1_r, dst1_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, +- filt1, dst1_l, dst1_l); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src76_r, filt0, dst2_r, src98_r, +- filt1, dst2_r, dst2_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src87_r, filt0, dst3_r, src109_r, +- filt1, dst3_r, dst3_r); ++ DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); ++ DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); ++ ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, dst0_r, dst0_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, ++ filt1, dst0_l, dst0_l); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, ++ filt1, dst1_r, dst1_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, ++ filt1, dst1_l, dst1_l); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src76_r, filt0, dst2_r, src98_r, ++ filt1, dst2_r, dst2_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src87_r, filt0, dst3_r, src109_r, ++ filt1, dst3_r, dst3_r); + + __lsx_vst(dst0_r, dst, 0); + __lsx_vst(dst0_l, dst, 16); +@@ -2401,28 +2382,28 @@ static void hevc_vt_4t_24w_lsx(uint8_t *src, + __lsx_vst(dst3_r, dst, 32); + dst += dst_stride; + +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src5, src2); +- LSX_DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src5, src2); ++ DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); ++ DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); ++ DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); + +- LSX_DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src11, src8); ++ DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src11, src8); + src += src_stride_2x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src11, 128, src8, 128, src11, src8); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src11, src10, src8, src11, src76_r, src87_r); +- +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src32_r, filt0, dst0_r, src10_r, +- filt1, dst0_r, dst0_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src32_l, filt0, dst0_l, src10_l, +- filt1, dst0_l, dst0_l); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src43_r, filt0, dst1_r, src21_r, +- filt1, dst1_r, dst1_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src43_l, filt0, dst1_l, src21_l, +- filt1, dst1_l, dst1_l); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src98_r, filt0, dst2_r, src76_r, +- filt1, dst2_r, dst2_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src109_r, filt0, dst3_r, src87_r, +- filt1, dst3_r, dst3_r); ++ DUP2_ARG2(__lsx_vxori_b, src11, 128, src8, 128, src11, src8); ++ DUP2_ARG2(__lsx_vilvl_b, src11, src10, src8, src11, src76_r, src87_r); ++ ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src32_r, filt0, dst0_r, src10_r, ++ filt1, dst0_r, dst0_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src32_l, filt0, dst0_l, src10_l, ++ filt1, dst0_l, dst0_l); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src43_r, filt0, dst1_r, src21_r, ++ filt1, dst1_r, dst1_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src43_l, filt0, dst1_l, src21_l, ++ filt1, dst1_l, dst1_l); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src98_r, filt0, dst2_r, src76_r, ++ filt1, dst2_r, dst2_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src109_r, filt0, dst3_r, src87_r, ++ filt1, dst3_r, dst3_r); + + __lsx_vst(dst0_r, dst, 0); + __lsx_vst(dst0_l, dst, 16); +@@ -2459,51 +2440,51 @@ static void hevc_vt_4t_32w_lsx(uint8_t *src, + + src -= src_stride; + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); + +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); + src2 = __lsx_vld(src + src_stride_2x, 0); +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1) ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1) + src2 = __lsx_vxori_b(src2, 128); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); ++ DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); ++ DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); + +- LSX_DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src6, src7); ++ DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src6, src7); + src8 = __lsx_vld(src + src_stride_2x, 16); + src += src_stride_3x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); ++ DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); + src8 = __lsx_vxori_b(src8, 128); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src76_l, src87_l); ++ DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); ++ DUP2_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src76_l, src87_l); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src3, src4); +- LSX_DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src3, src4); ++ DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); ++ DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); ++ DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); + +- LSX_DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src9, src10); ++ DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src9, src10); + src += src_stride_2x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src9, src8, src10, src9, src98_l, src109_l); +- +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, dst0_r, dst0_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, +- filt1, dst0_l, dst0_l); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, +- filt1, dst1_r, dst1_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src21_l, filt0, dst1_l,src43_l, +- filt1, dst1_l, dst1_l); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src76_r, filt0, dst2_r, src98_r, +- filt1, dst2_r, dst2_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src76_l, filt0, dst2_l, src98_l, +- filt1, dst2_l, dst2_l); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src87_r, filt0, dst3_r, src109_r, +- filt1, dst3_r, dst3_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src87_l, filt0, dst3_l, src109_l, +- filt1, dst3_l, dst3_l); ++ DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); ++ DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); ++ DUP2_ARG2(__lsx_vilvh_b, src9, src8, src10, src9, src98_l, src109_l); ++ ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, ++ filt1, dst0_r, dst0_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, ++ filt1, dst0_l, dst0_l); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, ++ filt1, dst1_r, dst1_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src21_l, filt0, dst1_l,src43_l, ++ filt1, dst1_l, dst1_l); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src76_r, filt0, dst2_r, src98_r, ++ filt1, dst2_r, dst2_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src76_l, filt0, dst2_l, src98_l, ++ filt1, dst2_l, dst2_l); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src87_r, filt0, dst3_r, src109_r, ++ filt1, dst3_r, dst3_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src87_l, filt0, dst3_l, src109_l, ++ filt1, dst3_l, dst3_l); + + __lsx_vst(dst0_r, dst, 0); + __lsx_vst(dst0_l, dst, 16); +@@ -2516,33 +2497,33 @@ static void hevc_vt_4t_32w_lsx(uint8_t *src, + __lsx_vst(dst3_l, dst, 48); + dst += dst_stride; + +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src5, src2); +- LSX_DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src5, src2); ++ DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); ++ DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); ++ DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); + +- LSX_DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src11, src8); ++ DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src11, src8); + src += src_stride_2x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src11, 128, src8, 128, src11, src8); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src11, src10, src8, src11, src76_r, src87_r); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src11, src10, src8, src11, src76_l, src87_l); +- +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src32_r, filt0, dst0_r, src10_r, +- filt1, dst0_r, dst0_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src32_l, filt0, dst0_l, src10_l, +- filt1, dst0_l, dst0_l); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src43_r, filt0, dst1_r, src21_r, +- filt1, dst1_r, dst1_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src43_l, filt0, dst1_l, src21_l, +- filt1, dst1_l, dst1_l); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src98_r, filt0, dst2_r, src76_r, +- filt1, dst2_r, dst2_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src98_l, filt0, dst2_l, src76_l, +- filt1, dst2_l, dst2_l); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src109_r, filt0, dst3_r, src87_r, +- filt1, dst3_r, dst3_r); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, src109_l, filt0, dst3_l, src87_l, +- filt1, dst3_l, dst3_l); ++ DUP2_ARG2(__lsx_vxori_b, src11, 128, src8, 128, src11, src8); ++ DUP2_ARG2(__lsx_vilvl_b, src11, src10, src8, src11, src76_r, src87_r); ++ DUP2_ARG2(__lsx_vilvh_b, src11, src10, src8, src11, src76_l, src87_l); ++ ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src32_r, filt0, dst0_r, src10_r, ++ filt1, dst0_r, dst0_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src32_l, filt0, dst0_l, src10_l, ++ filt1, dst0_l, dst0_l); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src43_r, filt0, dst1_r, src21_r, ++ filt1, dst1_r, dst1_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src43_l, filt0, dst1_l, src21_l, ++ filt1, dst1_l, dst1_l); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src98_r, filt0, dst2_r, src76_r, ++ filt1, dst2_r, dst2_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src98_l, filt0, dst2_l, src76_l, ++ filt1, dst2_l, dst2_l); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src109_r, filt0, dst3_r, src87_r, ++ filt1, dst3_r, dst3_r); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src109_l, filt0, dst3_l, src87_l, ++ filt1, dst3_l, dst3_l); + + __lsx_vst(dst0_r, dst, 0); + __lsx_vst(dst0_l, dst, 16); +@@ -2581,51 +2562,51 @@ static void hevc_hv_4t_8x2_lsx(uint8_t *src, + __m128i dst10_l, dst32_l, dst21_l, dst43_l; + + src -= (src_stride + 1); +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); + + filter_vec = __lsx_vld(filter_y, 0); + filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); +- LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); + + mask1 = __lsx_vaddi_bu(mask0, 2); + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); + src4 = __lsx_vld(src + src_stride_4x, 0); +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); + src4 = __lsx_vxori_b(src4, 128); + +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec6, vec7); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec8, vec9); +- +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, +- dst0, dst0); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec2, filt0, dst1, vec3, filt1, +- dst1, dst1); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst2, vec5, filt1, +- dst2, dst2); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec6, filt0, dst3, vec7, filt1, +- dst3, dst3); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec8, filt0, dst4, vec9, filt1, +- dst4, dst4); +- +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec6, vec7); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec8, vec9); ++ ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, ++ dst0, dst0); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec2, filt0, dst1, vec3, filt1, ++ dst1, dst1); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst2, vec5, filt1, ++ dst2, dst2); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec6, filt0, dst3, vec7, filt1, ++ dst3, dst3); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec8, filt0, dst4, vec9, filt1, ++ dst4, dst4); ++ ++ DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); ++ DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); + + dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); + dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); + dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); + dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); +- LSX_DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, dst0_r, +- dst0_l, dst1_r, dst1_l); +- LSX_DUP2_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); ++ DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, dst0_r, ++ dst0_l, dst1_r, dst1_l); ++ DUP2_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); + __lsx_vst(dst0_r, dst, 0); + __lsx_vst(dst1_r, dst + dst_stride, 0); + } +@@ -2651,58 +2632,51 @@ static void hevc_hv_4t_8multx4_lsx(uint8_t *src, int32_t src_stride, + __m128i dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l; + + src -= (src_stride + 1); +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); + + filter_vec = __lsx_vld(filter_y, 0); + filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); +- LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); + + mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + mask1 = __lsx_vaddi_bu(mask0, 2); + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + for (cnt = width8mult; cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); + src += src_stride_4x; +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); + src6 = __lsx_vld(src + src_stride_2x, 0); + src += (8 - src_stride_4x); +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3) +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3) ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); + +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); +- +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, +- dst0, dst0); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec2, filt0, dst1, vec3, filt1, +- dst1, dst1); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst2, vec5, filt1, +- dst2, dst2); +- +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); +- +- LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, +- dst3, dst3); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec2, filt0, dst4, vec3, filt1, +- dst4, dst4); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst5, vec5, filt1, +- dst5, dst5); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec6, filt0, dst6, vec7, filt1, +- dst6, dst6); +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst54_r, dst65_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst54_l, dst65_l); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, dst0); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec2, filt0, dst1, vec3, filt1, dst1, dst1); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst2, vec5, filt1, dst2, dst2); ++ ++ DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); ++ ++ DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, dst3, dst3); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec2, filt0, dst4, vec3, filt1, dst4, dst4); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst5, vec5, filt1, dst5, dst5); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec6, filt0, dst6, vec7, filt1, dst6, dst6); ++ DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); ++ DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst54_r, dst65_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst54_l, dst65_l); + + dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); + dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +@@ -2713,12 +2687,12 @@ static void hevc_hv_4t_8multx4_lsx(uint8_t *src, int32_t src_stride, + dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); + dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); + dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); +- LSX_DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, +- dst0_r, dst0_l, dst1_r, dst1_l); +- LSX_DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, +- dst2_r, dst2_l, dst3_r, dst3_l); +- LSX_DUP2_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); +- LSX_DUP2_ARG2(__lsx_vpickev_h, dst2_l, dst2_r, dst3_l, dst3_r, dst2_r, dst3_r); ++ DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, ++ dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, ++ dst2_r, dst2_l, dst3_r, dst3_l); ++ DUP2_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); ++ DUP2_ARG2(__lsx_vpickev_h, dst2_l, dst2_r, dst3_l, dst3_r, dst2_r, dst3_r); + + __lsx_vst(dst0_r, dst, 0); + __lsx_vst(dst1_r, dst + dst_stride, 0); +@@ -2756,57 +2730,56 @@ static void hevc_hv_4t_8x6_lsx(uint8_t *src, + __m128i dst76_r, dst76_l, dst87_r, dst87_l; + + src -= (src_stride + 1); +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); + + filter_vec = __lsx_vld(filter_y, 0); + filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); +- LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); + + mask1 = __lsx_vaddi_bu(mask0, 2); + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src0, src1, src2, src3); + src4 = __lsx_vld(src + src_stride_4x, 0); + src += (src_stride_4x + src_stride); +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src5, src6, src7, src8); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src5, src6, src7, src8); + +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); + src4 = __lsx_vxori_b(src4, 128); +- LSX_DUP4_ARG2(__lsx_vxori_b, src5, 128, src6, 128, src7, 128, src8, 128, src5, +- src6, src7, src8); +- +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src1, src1, +- mask0, src1, src1, mask1, vec0, vec1, vec2, vec3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1,src3, src3, +- mask0, src3, src3, mask1, vec4, vec5, vec6, vec7); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src5, src5, +- mask0, src5, src5, mask1, vec8, vec9, vec10, vec11); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src7, src7, +- mask0, src7, src7, mask1, vec12, vec13, vec14, vec15); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src8, src8, mask0, src8, src8, mask1, vec16, vec17); +- +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, +- const_vec, vec2, filt0, dst1, vec3, filt1, dst0, dst0, dst1, dst1); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst2, vec5, filt1, +- const_vec, vec6, filt0, dst3, vec7, filt1, dst2, dst2, dst3, dst3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec8, filt0, dst4, vec9, filt1, +- const_vec, vec10, filt0, dst5, vec11, filt1, dst4, dst4, dst5, dst5); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, const_vec, vec12, filt0, dst6, vec13, filt1, +- const_vec, vec14, filt0, dst7, vec15, filt1, dst6, dst6, dst7, dst7); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec16, filt0, dst8, vec17, filt1, dst8, +- dst8); +- +- LSX_DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, +- dst10_r, dst21_r, dst32_r, dst43_r); +- LSX_DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, +- dst10_l, dst21_l, dst32_l, dst43_l); +- LSX_DUP4_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst7, dst6, dst8, dst7, +- dst54_r, dst65_r, dst76_r, dst87_r); +- LSX_DUP4_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst7, dst6, dst8, dst7, +- dst54_l, dst65_l, dst76_l, dst87_l); ++ DUP4_ARG2(__lsx_vxori_b, src5, 128, src6, 128, src7, 128, src8, 128, src5, ++ src6, src7, src8); ++ ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src1, src1, ++ mask0, src1, src1, mask1, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1,src3, src3, ++ mask0, src3, src3, mask1, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src5, src5, ++ mask0, src5, src5, mask1, vec8, vec9, vec10, vec11); ++ DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src7, src7, ++ mask0, src7, src7, mask1, vec12, vec13, vec14, vec15); ++ DUP2_ARG3(__lsx_vshuf_b, src8, src8, mask0, src8, src8, mask1, vec16, vec17); ++ ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, ++ const_vec, vec2, filt0, dst1, vec3, filt1, dst0, dst0, dst1, dst1); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst2, vec5, filt1, ++ const_vec, vec6, filt0, dst3, vec7, filt1, dst2, dst2, dst3, dst3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec8, filt0, dst4, vec9, filt1, ++ const_vec, vec10, filt0, dst5, vec11, filt1, dst4, dst4, dst5, dst5); ++ DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec12, filt0, dst6, vec13, filt1, ++ const_vec, vec14, filt0, dst7, vec15, filt1, dst6, dst6, dst7, dst7); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec16, filt0, dst8, vec17, filt1, dst8, dst8); ++ ++ DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, ++ dst10_r, dst21_r, dst32_r, dst43_r); ++ DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, ++ dst10_l, dst21_l, dst32_l, dst43_l); ++ DUP4_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst7, dst6, dst8, dst7, ++ dst54_r, dst65_r, dst76_r, dst87_r); ++ DUP4_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst7, dst6, dst8, dst7, ++ dst54_l, dst65_l, dst76_l, dst87_l); + + dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); + dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +@@ -2821,16 +2794,16 @@ static void hevc_hv_4t_8x6_lsx(uint8_t *src, + dst5_r = __lsx_hevc_filt_4tap_w(dst65_r, dst87_r, filt_h0, filt_h1); + dst5_l = __lsx_hevc_filt_4tap_w(dst65_l, dst87_l, filt_h0, filt_h1); + +- LSX_DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, dst0_r, +- dst0_l, dst1_r, dst1_l); +- LSX_DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, dst2_r, +- dst2_l, dst3_r, dst3_l); +- LSX_DUP4_ARG2(__lsx_vsrai_w, dst4_r, 6, dst4_l, 6, dst5_r, 6, dst5_l, 6, dst4_r, +- dst4_l, dst5_r, dst5_l); ++ DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, dst0_r, ++ dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, dst2_r, ++ dst2_l, dst3_r, dst3_l); ++ DUP4_ARG2(__lsx_vsrai_w, dst4_r, 6, dst4_l, 6, dst5_r, 6, dst5_l, 6, dst4_r, ++ dst4_l, dst5_r, dst5_l); + +- LSX_DUP4_ARG2(__lsx_vpickev_h,dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, dst2_r, +- dst3_l, dst3_r, dst0_r, dst1_r, dst2_r, dst3_r); +- LSX_DUP2_ARG2(__lsx_vpickev_h, dst4_l, dst4_r, dst5_l, dst5_r, dst4_r, dst5_r); ++ DUP4_ARG2(__lsx_vpickev_h,dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, dst2_r, ++ dst3_l, dst3_r, dst0_r, dst1_r, dst2_r, dst3_r); ++ DUP2_ARG2(__lsx_vpickev_h, dst4_l, dst4_r, dst5_l, dst5_r, dst4_r, dst5_r); + + __lsx_vst(dst0_r, dst, 0); + __lsx_vst(dst1_r, dst + dst_stride, 0); +@@ -2874,11 +2847,11 @@ static void hevc_hv_4t_8multx4mult_lsx(uint8_t *src, + __m128i dst10_l, dst32_l, dst54_l, dst21_l, dst43_l, dst65_l; + + src -= (src_stride + 1); +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); + + filter_vec = __lsx_vld(filter_y, 0); + filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); +- LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); + + mask1 = __lsx_vaddi_bu(mask0, 2); + const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +@@ -2887,53 +2860,50 @@ static void hevc_hv_4t_8multx4mult_lsx(uint8_t *src, + src_tmp = src; + dst_tmp = dst; + +- LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src0, src1); ++ DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src0, src1); + src2 = __lsx_vld(src_tmp + src_stride_2x, 0); + src_tmp += src_stride_3x; + +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); + src2 = __lsx_vxori_b(src2, 128); + +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); + +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, +- dst0, dst0); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec2, filt0, dst1, vec3, filt1, +- dst1, dst1); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst2, vec5, filt1, +- dst2, dst2); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, dst0); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec2, filt0, dst1, vec3, filt1, dst1, dst1); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst2, vec5, filt1, dst2, dst2); + +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); ++ DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); + + for (loop_cnt = height >> 2; loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, +- src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, +- src3, src4, src5, src6); ++ DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, ++ src3, src4, src5, src6); + src_tmp += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, +- src3, src4, src5, src6); +- +- LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); +- +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, +- dst3, dst3); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec2, filt0, dst4, vec3, filt1, +- dst4, dst4); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst5, vec5, filt1, +- dst5, dst5); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec6, filt0, dst6, vec7, filt1, +- dst6, dst6); +- +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst54_r, dst65_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst54_l, dst65_l); ++ DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, ++ src3, src4, src5, src6); ++ ++ DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); ++ ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, ++ dst3, dst3); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec2, filt0, dst4, vec3, filt1, ++ dst4, dst4); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst5, vec5, filt1, ++ dst5, dst5); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec6, filt0, dst6, vec7, filt1, ++ dst6, dst6); ++ ++ DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); ++ DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst54_r, dst65_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst54_l, dst65_l); + + dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); + dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +@@ -2944,13 +2914,13 @@ static void hevc_hv_4t_8multx4mult_lsx(uint8_t *src, + dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); + dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); + +- LSX_DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, +- dst0_r, dst0_l, dst1_r, dst1_l); +- LSX_DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, +- dst2_r, dst2_l, dst3_r, dst3_l); ++ DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, ++ dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, ++ dst2_r, dst2_l, dst3_r, dst3_l); + +- LSX_DUP4_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, +- dst2_r, dst3_l, dst3_r, dst0_r, dst1_r, dst2_r, dst3_r); ++ DUP4_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, ++ dst2_r, dst3_l, dst3_r, dst0_r, dst1_r, dst2_r, dst3_r); + + __lsx_vst(dst0_r, dst_tmp, 0); + __lsx_vst(dst1_r, dst_tmp + dst_stride, 0); +@@ -3023,11 +2993,11 @@ static void hevc_hv_4t_12w_lsx(uint8_t *src, + __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; + + src -= (src_stride + 1); +- LSX_DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filt0, filt1); + + filter_vec = __lsx_vld(filter_y, 0); + filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); +- LSX_DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); ++ DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); + + mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + mask1 = __lsx_vaddi_bu(mask0, 2); +@@ -3036,53 +3006,46 @@ static void hevc_hv_4t_12w_lsx(uint8_t *src, + src_tmp = src; + dst_tmp = dst; + +- LSX_DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src0, src1); ++ DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src0, src1); + src2 = __lsx_vld(src_tmp + src_stride_2x, 0); + src_tmp += src_stride_3x; + +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); + src2 = __lsx_vxori_b(src2, 128); + +- LSX_DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); + +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, +- dst0, dst0); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec2, filt0, dst1, vec3, filt1, +- dst1, dst1); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst2, vec5, filt1, +- dst2, dst2); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, dst0); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec2, filt0, dst1, vec3, filt1, dst1, dst1); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst2, vec5, filt1, dst2, dst2); + +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); ++ DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); + + for (loop_cnt = 4; loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, +- src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, src3, +- src4, src5, src6); ++ DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, src3, ++ src4, src5, src6); + src_tmp += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, +- src4, src5, src6); ++ DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, ++ src4, src5, src6); + +- LSX_DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); ++ DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); + +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, +- dst3, dst3); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec2, filt0, dst4, vec3, filt1, +- dst4, dst4); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst5, vec5, filt1, +- dst5, dst5); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec6, filt0, dst6, vec7, filt1, +- dst6, dst6); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, dst3, dst3); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec2, filt0, dst4, vec3, filt1, dst4, dst4); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst5, vec5, filt1, dst5, dst5); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec6, filt0, dst6, vec7, filt1, dst6, dst6); + +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst54_r, dst65_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst54_l, dst65_l); ++ DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); ++ DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst54_r, dst65_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst54_l, dst65_l); + + dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); + dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +@@ -3093,12 +3056,12 @@ static void hevc_hv_4t_12w_lsx(uint8_t *src, + dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); + dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); + +- LSX_DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, +- dst0_r, dst0_l, dst1_r, dst1_l); +- LSX_DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, +- dst2_r, dst2_l, dst3_r, dst3_l); +- LSX_DUP4_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, dst2_r, +- dst3_l, dst3_r, dst0_r, dst1_r, dst2_r, dst3_r); ++ DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, ++ dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, ++ dst2_r, dst2_l, dst3_r, dst3_l); ++ DUP4_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, dst2_r, ++ dst3_l, dst3_r, dst0_r, dst1_r, dst2_r, dst3_r); + __lsx_vst(dst0_r, dst_tmp, 0); + __lsx_vst(dst1_r, dst_tmp + dst_stride, 0); + __lsx_vst(dst2_r, dst_tmp + dst_stride_2x, 0); +@@ -3118,49 +3081,47 @@ static void hevc_hv_4t_12w_lsx(uint8_t *src, + mask2 = __lsx_vld(ff_hevc_mask_arr, 16); + mask3 = __lsx_vaddi_bu(mask2, 2); + +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); + src2 = __lsx_vld(src + src_stride_2x, 0); + src += src_stride_3x; +- LSX_DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); + src2 = __lsx_vxori_b(src2, 128); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src1, src0, mask2, src1, src0, mask3, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src2, src1, mask2, src2, src1, mask3, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst10, vec1, filt1, +- dst10, dst10); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec2, filt0, dst21, vec3, filt1, +- dst21, dst21); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src0, mask2, src1, src0, mask3, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src1, mask2, src2, src1, mask3, vec2, vec3); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst10, vec1, filt1, dst10, dst10); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec2, filt0, dst21, vec3, filt1, dst21, dst21); + dst10_r = __lsx_vilvl_h(dst21, dst10); + dst21_r = __lsx_vilvh_h(dst21, dst10); + dst22 = __lsx_vreplvei_d(dst21, 1); + + for (loop_cnt = 2; loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src3, src4, src5, src6); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src3, src4, src5, src6); + src += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, ++ src + src_stride_3x, 0, src7, src8, src9, src10); + src += src_stride_4x; +- LSX_DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, +- src4, src5, src6); +- LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, +- src8, src9, src10); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src7, src3, mask2, src7, src3, mask3, vec0, vec1); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src8, src4, mask2, src8, src4, mask3, vec2, vec3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src9, src5, mask2, src9, src5, mask3, vec4, vec5); +- LSX_DUP2_ARG3(__lsx_vshuf_b, src10, src6, mask2, src10, src6, mask3, vec6, vec7); +- +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec0, filt0, dst73, vec1, filt1, +- dst73, dst73); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec2, filt0, dst84, vec3, filt1, +- dst84, dst84); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec4, filt0, dst95, vec5, filt1, +- dst95, dst95); +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, const_vec, vec6, filt0, dst106, vec7, filt1, +- dst106, dst106); +- +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst73, dst22, dst84, dst73, dst32_r, dst43_r); +- LSX_DUP2_ARG2(__lsx_vilvh_h, dst84, dst73, dst95, dst84, dst87_r, dst98_r); +- LSX_DUP2_ARG2(__lsx_vilvl_h, dst95, dst84, dst106, dst95, dst54_r, dst65_r); ++ DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, ++ src4, src5, src6); ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, ++ src8, src9, src10); ++ DUP2_ARG3(__lsx_vshuf_b, src7, src3, mask2, src7, src3, mask3, vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src8, src4, mask2, src8, src4, mask3, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src9, src5, mask2, src9, src5, mask3, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src10, src6, mask2, src10, src6, mask3, vec6, vec7); ++ ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst73, vec1, filt1, ++ dst73, dst73); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec2, filt0, dst84, vec3, filt1, ++ dst84, dst84); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst95, vec5, filt1, ++ dst95, dst95); ++ DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec6, filt0, dst106, vec7, filt1, ++ dst106, dst106); ++ ++ DUP2_ARG2(__lsx_vilvl_h, dst73, dst22, dst84, dst73, dst32_r, dst43_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst84, dst73, dst95, dst84, dst87_r, dst98_r); ++ DUP2_ARG2(__lsx_vilvl_h, dst95, dst84, dst106, dst95, dst54_r, dst65_r); + dst109_r = __lsx_vilvh_h(dst106, dst95); + dst22 = __lsx_vreplvei_d(dst73, 1); + dst76_r = __lsx_vilvl_h(dst22, dst106); +@@ -3174,12 +3135,10 @@ static void hevc_hv_4t_12w_lsx(uint8_t *src, + tmp6 = __lsx_hevc_filt_4tap_w(dst76_r, dst98_r, filt_h0, filt_h1); + tmp7 = __lsx_hevc_filt_4tap_w(dst87_r, dst109_r, filt_h0, filt_h1); + +- LSX_DUP4_ARG2(__lsx_vsrai_w, tmp0, 6, tmp1, 6, tmp2, 6, tmp3, 6, tmp0, tmp1, +- tmp2, tmp3); +- LSX_DUP4_ARG2(__lsx_vsrai_w, tmp4, 6, tmp5, 6, tmp6, 6, tmp7, 6, tmp4, tmp5, +- tmp6, tmp7); +- LSX_DUP4_ARG2(__lsx_vpickev_h, tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, +- tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vsrai_w, tmp0, 6, tmp1, 6, tmp2, 6, tmp3, 6, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vsrai_w, tmp4, 6, tmp5, 6, tmp6, 6, tmp7, 6, tmp4, tmp5, tmp6, tmp7); ++ DUP4_ARG2(__lsx_vpickev_h, tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, ++ tmp0, tmp1, tmp2, tmp3); + + __lsx_vstelm_d(tmp0, dst, 0, 0); + __lsx_vstelm_d(tmp0, dst + dst_stride, 0, 1); +diff --git a/libavcodec/loongarch/hpeldsp_lasx.c b/libavcodec/loongarch/hpeldsp_lasx.c +index f88e1244a8..256c6e79d8 100644 +--- a/libavcodec/loongarch/hpeldsp_lasx.c ++++ b/libavcodec/loongarch/hpeldsp_lasx.c +@@ -19,8 +19,8 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "libavutil/loongarch/generic_macros_lasx.h" +-#include "libavcodec/loongarch/hpeldsp_lasx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" ++#include "hpeldsp_lasx.h" + + static inline void + put_pixels8_l2_8_lsx(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, +@@ -282,86 +282,100 @@ static void common_hz_bil_no_rnd_16x16_lasx(const uint8_t *src, + uint8_t *dst, int32_t dst_stride) + { + __m256i src0, src1, src2, src3, src4, src5, src6, src7; ++ int32_t src_stride_2x = src_stride << 1; + int32_t src_stride_4x = src_stride << 2; +- +- LASX_LD_4(src, src_stride, src0, src1, src2, src3); +- LASX_LD_4((src + 1), src_stride, src4, src5, src6, src7); +- src += src_stride_4x; +- LASX_PCKEV_Q_4(src1, src0, src3, src2, src5, src4, src7, src6, +- src0, src1, src2, src3); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += 1; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src += (src_stride_4x -1); ++ DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src5, src4, 0x20, ++ src7, src6, 0x20, src0, src1, src2, src3); + src0 = __lasx_xvavg_bu(src0, src2); + src1 = __lasx_xvavg_bu(src1, src3); + __lasx_xvstelm_d(src0, dst, 0, 0); +- __lasx_xvstelm_d(src0, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src0, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src0, dst, 0, 2); +- __lasx_xvstelm_d(src0, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src0, dst, 8, 3); + dst += dst_stride; + __lasx_xvstelm_d(src1, dst, 0, 0); +- __lasx_xvstelm_d(src1, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src1, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src1, dst, 0, 2); +- __lasx_xvstelm_d(src1, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src1, dst, 8, 3); + dst += dst_stride; + +- LASX_LD_4(src, src_stride, src0, src1, src2, src3); +- LASX_LD_4((src + 1), src_stride, src4, src5, src6, src7); +- src += src_stride_4x; +- LASX_PCKEV_Q_4(src1, src0, src3, src2, src5, src4, src7, src6, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += 1; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src += (src_stride_4x - 1); ++ DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src5, src4, ++ 0x20, src7, src6, 0x20, src0, src1, src2, src3); + src0 = __lasx_xvavg_bu(src0, src2); + src1 = __lasx_xvavg_bu(src1, src3); + __lasx_xvstelm_d(src0, dst, 0, 0); +- __lasx_xvstelm_d(src0, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src0, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src0, dst, 0, 2); +- __lasx_xvstelm_d(src0, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src0, dst, 8, 3); + dst += dst_stride; + __lasx_xvstelm_d(src1, dst, 0, 0); +- __lasx_xvstelm_d(src1, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src1, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src1, dst, 0, 2); +- __lasx_xvstelm_d(src1, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src1, dst, 8, 3); + dst += dst_stride; + +- LASX_LD_4(src, src_stride, src0, src1, src2, src3); +- LASX_LD_4((src + 1), src_stride, src4, src5, src6, src7); +- src += src_stride_4x; +- LASX_PCKEV_Q_4(src1, src0, src3, src2, src5, src4, src7, src6, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += 1; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src += (src_stride_4x - 1); ++ DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src5, src4, ++ 0x20, src7, src6, 0x20, src0, src1, src2, src3); + src0 = __lasx_xvavg_bu(src0, src2); + src1 = __lasx_xvavg_bu(src1, src3); + __lasx_xvstelm_d(src0, dst, 0, 0); +- __lasx_xvstelm_d(src0, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src0, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src0, dst, 0, 2); +- __lasx_xvstelm_d(src0, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src0, dst, 8, 3); + dst += dst_stride; + __lasx_xvstelm_d(src1, dst, 0, 0); +- __lasx_xvstelm_d(src1, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src1, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src1, dst, 0, 2); +- __lasx_xvstelm_d(src1, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src1, dst, 8, 3); + dst += dst_stride; + +- LASX_LD_4(src, src_stride, src0, src1, src2, src3); +- LASX_LD_4((src + 1), src_stride, src4, src5, src6, src7); +- src += src_stride_4x; +- LASX_PCKEV_Q_4(src1, src0, src3, src2, src5, src4, src7, src6, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += 1; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src += (src_stride_4x - 1); ++ DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src5, src4, ++ 0x20, src7, src6, 0x20, src0, src1, src2, src3); + src0 = __lasx_xvavg_bu(src0, src2); + src1 = __lasx_xvavg_bu(src1, src3); + __lasx_xvstelm_d(src0, dst, 0, 0); +- __lasx_xvstelm_d(src0, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src0, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src0, dst, 0, 2); +- __lasx_xvstelm_d(src0, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src0, dst, 8, 3); + dst += dst_stride; + __lasx_xvstelm_d(src1, dst, 0, 0); +- __lasx_xvstelm_d(src1, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src1, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src1, dst, 0, 2); +- __lasx_xvstelm_d(src1, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src1, dst, 8, 3); + } + + static void common_hz_bil_no_rnd_8x16_lasx(const uint8_t *src, +@@ -369,46 +383,54 @@ static void common_hz_bil_no_rnd_8x16_lasx(const uint8_t *src, + uint8_t *dst, int32_t dst_stride) + { + __m256i src0, src1, src2, src3, src4, src5, src6, src7; ++ int32_t src_stride_2x = src_stride << 1; + int32_t src_stride_4x = src_stride << 2; +- +- LASX_LD_4(src, src_stride, src0, src1, src2, src3); +- LASX_LD_4((src + 1), src_stride, src4, src5, src6, src7); +- src += src_stride_4x; +- LASX_PCKEV_Q_4(src1, src0, src3, src2, src5, src4, src7, src6, +- src0, src1, src2, src3); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += 1; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src += (src_stride_4x -1); ++ DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src5, src4, ++ 0x20, src7, src6, 0x20, src0, src1, src2, src3); + src0 = __lasx_xvavg_bu(src0, src2); + src1 = __lasx_xvavg_bu(src1, src3); + __lasx_xvstelm_d(src0, dst, 0, 0); +- __lasx_xvstelm_d(src0, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src0, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src0, dst, 0, 2); +- __lasx_xvstelm_d(src0, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src0, dst, 8, 3); + dst += dst_stride; + __lasx_xvstelm_d(src1, dst, 0, 0); +- __lasx_xvstelm_d(src1, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src1, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src1, dst, 0, 2); +- __lasx_xvstelm_d(src1, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src1, dst, 8, 3); + dst += dst_stride; + +- LASX_LD_4(src, src_stride, src0, src1, src2, src3); +- LASX_LD_4((src + 1), src_stride, src4, src5, src6, src7); +- src += src_stride_4x; +- LASX_PCKEV_Q_4(src1, src0, src3, src2, src5, src4, src7, src6, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += 1; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src += (src_stride_4x - 1); ++ DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src5, src4, ++ 0x20, src7, src6, 0x20, src0, src1, src2, src3); + src0 = __lasx_xvavg_bu(src0, src2); + src1 = __lasx_xvavg_bu(src1, src3); + __lasx_xvstelm_d(src0, dst, 0, 0); +- __lasx_xvstelm_d(src0, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src0, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src0, dst, 0, 2); +- __lasx_xvstelm_d(src0, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src0, dst, 8, 3); + dst += dst_stride; + __lasx_xvstelm_d(src1, dst, 0, 0); +- __lasx_xvstelm_d(src1, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src1, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src1, dst, 0, 2); +- __lasx_xvstelm_d(src1, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src1, dst, 8, 3); + } + + void ff_put_no_rnd_pixels16_x2_8_lasx(uint8_t *block, const uint8_t *pixels, +@@ -427,20 +449,32 @@ static void common_vt_bil_no_rnd_16x16_lasx(const uint8_t *src, + { + __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8; + __m256i src9, src10, src11, src12, src13, src14, src15, src16; +- int32_t src_stride_8x = src_stride << 3; +- +- LASX_LD_8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); +- src += src_stride_8x; +- LASX_LD_8(src, src_stride, src8, src9, src10, src11, src12, src13, src14, src15); +- src += src_stride_8x; +- src16 = LASX_LD(src); +- +- LASX_PCKEV_Q_8(src1, src0, src2, src1, src3, src2, src4, src3, +- src5, src4, src6, src5, src7, src6, src8, src7, +- src0, src1, src2, src3, src4, src5, src6, src7); +- LASX_PCKEV_Q_8(src9, src8, src10, src9, src11, src10, src12, src11, +- src13, src12, src14, src13, src15, src14, src16, src15, +- src8, src9, src10, src11, src12, src13, src14, src15); ++ int32_t src_stride_2x = src_stride << 1; ++ int32_t src_stride_4x = src_stride << 2; ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src += src_stride_4x; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src8, src9, src10, src11); ++ src += src_stride_4x; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src12, src13, src14, src15); ++ src += src_stride_4x; ++ src16 = __lasx_xvld(src, 0); ++ ++ DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src2, src1, 0x20, src3, src2, ++ 0x20, src4, src3, 0x20, src0, src1, src2, src3); ++ DUP4_ARG3(__lasx_xvpermi_q, src5, src4, 0x20, src6, src5, 0x20, src7, src6, ++ 0x20, src8, src7, 0x20, src4, src5, src6, src7); ++ DUP4_ARG3(__lasx_xvpermi_q, src9, src8, 0x20, src10, src9, 0x20, src11, src10, ++ 0x20, src12, src11, 0x20, src8, src9, src10, src11); ++ DUP4_ARG3(__lasx_xvpermi_q, src13, src12, 0x20, src14, src13, 0x20, src15, src14, ++ 0x20, src16, src15, 0x20, src12, src13, src14, src15); + src0 = __lasx_xvavg_bu(src0, src1); + src2 = __lasx_xvavg_bu(src2, src3); + src4 = __lasx_xvavg_bu(src4, src5); +@@ -451,52 +485,52 @@ static void common_vt_bil_no_rnd_16x16_lasx(const uint8_t *src, + src14 = __lasx_xvavg_bu(src14, src15); + + __lasx_xvstelm_d(src0, dst, 0, 0); +- __lasx_xvstelm_d(src0, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src0, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src0, dst, 0, 2); +- __lasx_xvstelm_d(src0, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src0, dst, 8, 3); + dst += dst_stride; + __lasx_xvstelm_d(src2, dst, 0, 0); +- __lasx_xvstelm_d(src2, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src2, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src2, dst, 0, 2); +- __lasx_xvstelm_d(src2, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src2, dst, 8, 3); + dst += dst_stride; + __lasx_xvstelm_d(src4, dst, 0, 0); +- __lasx_xvstelm_d(src4, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src4, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src4, dst, 0, 2); +- __lasx_xvstelm_d(src4, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src4, dst, 8, 3); + dst += dst_stride; + __lasx_xvstelm_d(src6, dst, 0, 0); +- __lasx_xvstelm_d(src6, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src6, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src6, dst, 0, 2); +- __lasx_xvstelm_d(src6, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src6, dst, 8, 3); + dst += dst_stride; + __lasx_xvstelm_d(src8, dst, 0, 0); +- __lasx_xvstelm_d(src8, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src8, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src8, dst, 0, 2); +- __lasx_xvstelm_d(src8, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src8, dst, 8, 3); + dst += dst_stride; + __lasx_xvstelm_d(src10, dst, 0, 0); +- __lasx_xvstelm_d(src10, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src10, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src10, dst, 0, 2); +- __lasx_xvstelm_d(src10, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src10, dst, 8, 3); + dst += dst_stride; + __lasx_xvstelm_d(src12, dst, 0, 0); +- __lasx_xvstelm_d(src12, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src12, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src12, dst, 0, 2); +- __lasx_xvstelm_d(src12, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src12, dst, 8, 3); + dst += dst_stride; + __lasx_xvstelm_d(src14, dst, 0, 0); +- __lasx_xvstelm_d(src14, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src14, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src14, dst, 0, 2); +- __lasx_xvstelm_d(src14, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src14, dst, 8, 3); + } + + static void common_vt_bil_no_rnd_8x16_lasx(const uint8_t *src, +@@ -504,43 +538,50 @@ static void common_vt_bil_no_rnd_8x16_lasx(const uint8_t *src, + uint8_t *dst, int32_t dst_stride) + { + __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8; +- int32_t src_stride_8x = src_stride << 3; ++ int32_t src_stride_2x = src_stride << 1; ++ int32_t src_stride_4x = src_stride << 2; ++ int32_t src_stride_3x = src_stride_2x + src_stride; + +- LASX_LD_8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); +- src += src_stride_8x; +- src8 = LASX_LD(src); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src += src_stride_4x; ++ src8 = __lasx_xvld(src, 0); + +- LASX_PCKEV_Q_8(src1, src0, src2, src1, src3, src2, src4, src3, +- src5, src4, src6, src5, src7, src6, src8, src7, +- src0, src1, src2, src3, src4, src5, src6, src7); ++ DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src2, src1, 0x20, src3, src2, ++ 0x20, src4, src3, 0x20, src0, src1, src2, src3); ++ DUP4_ARG3(__lasx_xvpermi_q, src5, src4, 0x20, src6, src5, 0x20, src7, src6, ++ 0x20, src8, src7, 0x20, src4, src5, src6, src7); + src0 = __lasx_xvavg_bu(src0, src1); + src2 = __lasx_xvavg_bu(src2, src3); + src4 = __lasx_xvavg_bu(src4, src5); + src6 = __lasx_xvavg_bu(src6, src7); + + __lasx_xvstelm_d(src0, dst, 0, 0); +- __lasx_xvstelm_d(src0, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src0, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src0, dst, 0, 2); +- __lasx_xvstelm_d(src0, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src0, dst, 8, 3); + dst += dst_stride; + __lasx_xvstelm_d(src2, dst, 0, 0); +- __lasx_xvstelm_d(src2, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src2, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src2, dst, 0, 2); +- __lasx_xvstelm_d(src2, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src2, dst, 8, 3); + dst += dst_stride; + __lasx_xvstelm_d(src4, dst, 0, 0); +- __lasx_xvstelm_d(src4, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src4, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src4, dst, 0, 2); +- __lasx_xvstelm_d(src4, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src4, dst, 8, 3); + dst += dst_stride; + __lasx_xvstelm_d(src6, dst, 0, 0); +- __lasx_xvstelm_d(src6, dst + 8, 0, 1); ++ __lasx_xvstelm_d(src6, dst, 8, 1); + dst += dst_stride; + __lasx_xvstelm_d(src6, dst, 0, 2); +- __lasx_xvstelm_d(src6, dst + 8, 0, 3); ++ __lasx_xvstelm_d(src6, dst, 8, 3); + } + + void ff_put_no_rnd_pixels16_y2_8_lasx(uint8_t *block, const uint8_t *pixels, +@@ -560,31 +601,47 @@ static void common_hv_bil_no_rnd_16x16_lasx(const uint8_t *src, + __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9; + __m256i src10, src11, src12, src13, src14, src15, src16, src17; + __m256i sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7; +- int32_t src_stride_8x = src_stride << 3; +- +- LASX_LD_8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); +- LASX_LD_8((src + 1), src_stride, +- src9, src10, src11, src12, src13, src14, src15, src16); +- src += src_stride_8x; +- src8 = LASX_LD(src); +- src17 = LASX_LD(src + 1); +- +- LASX_ILVL_H_8(src9, src0, src10, src1, src11, src2, src12, src3, +- src13, src4, src14, src5, src15, src6, src16, src7, +- src0, src1, src2, src3, src4, src5, src6, src7); +- LASX_ILVL_H(src17, src8, src8); +- src0 = __lasx_xvhaddw_hu_bu(src0, src0); +- src1 = __lasx_xvhaddw_hu_bu(src1, src1); +- src2 = __lasx_xvhaddw_hu_bu(src2, src2); +- src3 = __lasx_xvhaddw_hu_bu(src3, src3); +- src4 = __lasx_xvhaddw_hu_bu(src4, src4); +- src5 = __lasx_xvhaddw_hu_bu(src5, src5); +- src6 = __lasx_xvhaddw_hu_bu(src6, src6); +- src7 = __lasx_xvhaddw_hu_bu(src7, src7); +- src8 = __lasx_xvhaddw_hu_bu(src8, src8); +- LASX_ADD_H_8(src0, src1, src1, src2, src2, src3, src3, src4, +- src4, src5, src5, src6, src6, src7, src7, src8, +- sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7); ++ int32_t src_stride_2x = src_stride << 1; ++ int32_t src_stride_4x = src_stride << 2; ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src += (1 - src_stride_4x); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src9, src10, src11, src12); ++ src += src_stride_4x; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src13, src14, src15, src16); ++ src += (src_stride_4x - 1); ++ DUP2_ARG2(__lasx_xvld, src, 0, src, 1, src8, src17); ++ ++ DUP4_ARG3(__lasx_xvpermi_q, src0, src4, 0x02, src1, src5, 0x02, src2, src6, 0x02, ++ src3, src7, 0x02, src0, src1, src2, src3); ++ DUP4_ARG3(__lasx_xvpermi_q, src4, src8, 0x02, src9, src13, 0x02, src10, src14, 0x02, ++ src11, src15, 0x02, src4, src5, src6, src7); ++ DUP2_ARG3(__lasx_xvpermi_q, src12, src16, 0x02, src13, src17, 0x02, src8, src9); ++ ++ DUP4_ARG2(__lasx_xvilvl_h, src5, src0, src6, src1, src7, src2, src8, src3, ++ sum0, sum2, sum4, sum6); ++ DUP4_ARG2(__lasx_xvilvh_h, src5, src0, src6, src1, src7, src2, src8, src3, ++ sum1, sum3, sum5, sum7); ++ src8 = __lasx_xvilvl_h(src9, src4); ++ src9 = __lasx_xvilvh_h(src9, src4); ++ ++ DUP4_ARG2(__lasx_xvhaddw_hu_bu, sum0, sum0, sum1, sum1, sum2, sum2, ++ sum3, sum3, src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvhaddw_hu_bu, sum4, sum4, sum5, sum5, sum6, sum6, ++ sum7, sum7, src4, src5, src6, src7); ++ DUP2_ARG2(__lasx_xvhaddw_hu_bu, src8, src8, src9, src9, src8, src9); ++ ++ DUP4_ARG2(__lasx_xvadd_h, src0, src2, src1, src3, src2, src4, src3, src5, ++ sum0, sum1, sum2, sum3); ++ DUP4_ARG2(__lasx_xvadd_h, src4, src6, src5, src7, src6, src8, src7, src9, ++ sum4, sum5, sum6, sum7); + sum0 = __lasx_xvaddi_hu(sum0, 1); + sum1 = __lasx_xvaddi_hu(sum1, 1); + sum2 = __lasx_xvaddi_hu(sum2, 1); +@@ -601,48 +658,70 @@ static void common_hv_bil_no_rnd_16x16_lasx(const uint8_t *src, + sum5 = __lasx_xvsrai_h(sum5, 2); + sum6 = __lasx_xvsrai_h(sum6, 2); + sum7 = __lasx_xvsrai_h(sum7, 2); +- LASX_PCKEV_B_4_128SV(sum1, sum0, sum3, sum2, sum5, sum4, sum7, sum6, +- sum0, sum1, sum2, sum3); +- LASX_ST_D_2(sum0, 0, 2, dst, 8); ++ DUP4_ARG2(__lasx_xvpickev_b, sum1, sum0, sum3, sum2, sum5, sum4, sum7, sum6, ++ sum0, sum1, sum2, sum3); ++ __lasx_xvstelm_d(sum0, dst, 0, 0); ++ __lasx_xvstelm_d(sum0, dst, 8, 1); + dst += dst_stride; +- LASX_ST_D_2(sum0, 1, 3, dst, 8); ++ __lasx_xvstelm_d(sum1, dst, 0, 0); ++ __lasx_xvstelm_d(sum1, dst, 8, 1); + dst += dst_stride; +- LASX_ST_D_2(sum1, 0, 2, dst, 8); ++ __lasx_xvstelm_d(sum2, dst, 0, 0); ++ __lasx_xvstelm_d(sum2, dst, 8, 1); + dst += dst_stride; +- LASX_ST_D_2(sum1, 1, 3, dst, 8); ++ __lasx_xvstelm_d(sum3, dst, 0, 0); ++ __lasx_xvstelm_d(sum3, dst, 8, 1); + dst += dst_stride; +- LASX_ST_D_2(sum2, 0, 2, dst, 8); ++ __lasx_xvstelm_d(sum0, dst, 0, 2); ++ __lasx_xvstelm_d(sum0, dst, 8, 3); + dst += dst_stride; +- LASX_ST_D_2(sum2, 1, 3, dst, 8); ++ __lasx_xvstelm_d(sum1, dst, 0, 2); ++ __lasx_xvstelm_d(sum1, dst, 8, 3); + dst += dst_stride; +- LASX_ST_D_2(sum3, 0, 2, dst, 8); ++ __lasx_xvstelm_d(sum2, dst, 0, 2); ++ __lasx_xvstelm_d(sum2, dst, 8, 3); + dst += dst_stride; +- LASX_ST_D_2(sum3, 1, 3, dst, 8); ++ __lasx_xvstelm_d(sum3, dst, 0, 2); ++ __lasx_xvstelm_d(sum3, dst, 8, 3); + dst += dst_stride; + +- LASX_LD_8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); +- LASX_LD_8((src + 1), src_stride, +- src9, src10, src11, src12, src13, src14, src15, src16); +- src += src_stride_8x; +- src8 = LASX_LD(src); +- src17 = LASX_LD(src + 1); +- +- LASX_ILVL_H_8(src9, src0, src10, src1, src11, src2, src12, src3, +- src13, src4, src14, src5, src15, src6, src16, src7, +- src0, src1, src2, src3, src4, src5, src6, src7); +- LASX_ILVL_H(src17, src8, src8); +- src0 = __lasx_xvhaddw_hu_bu(src0, src0); +- src1 = __lasx_xvhaddw_hu_bu(src1, src1); +- src2 = __lasx_xvhaddw_hu_bu(src2, src2); +- src3 = __lasx_xvhaddw_hu_bu(src3, src3); +- src4 = __lasx_xvhaddw_hu_bu(src4, src4); +- src5 = __lasx_xvhaddw_hu_bu(src5, src5); +- src6 = __lasx_xvhaddw_hu_bu(src6, src6); +- src7 = __lasx_xvhaddw_hu_bu(src7, src7); +- src8 = __lasx_xvhaddw_hu_bu(src8, src8); +- LASX_ADD_H_8(src0, src1, src1, src2, src2, src3, src3, src4, +- src4, src5, src5, src6, src6, src7, src7, src8, +- sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src += (1 - src_stride_4x); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src9, src10, src11, src12); ++ src += src_stride_4x; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src13, src14, src15, src16); ++ src += (src_stride_4x - 1); ++ DUP2_ARG2(__lasx_xvld, src, 0, src, 1, src8, src17); ++ ++ DUP4_ARG3(__lasx_xvpermi_q, src0, src4, 0x02, src1, src5, 0x02, src2, src6, 0x02, ++ src3, src7, 0x02, src0, src1, src2, src3); ++ DUP4_ARG3(__lasx_xvpermi_q, src4, src8, 0x02, src9, src13, 0x02, src10, src14, 0x02, ++ src11, src15, 0x02, src4, src5, src6, src7); ++ DUP2_ARG3(__lasx_xvpermi_q, src12, src16, 0x02, src13, src17, 0x02, src8, src9); ++ ++ DUP4_ARG2(__lasx_xvilvl_h, src5, src0, src6, src1, src7, src2, src8, src3, ++ sum0, sum2, sum4, sum6); ++ DUP4_ARG2(__lasx_xvilvh_h, src5, src0, src6, src1, src7, src2, src8, src3, ++ sum1, sum3, sum5, sum7); ++ src8 = __lasx_xvilvl_h(src9, src4); ++ src9 = __lasx_xvilvh_h(src9, src4); ++ ++ DUP4_ARG2(__lasx_xvhaddw_hu_bu, sum0, sum0, sum1, sum1, sum2, sum2, ++ sum3, sum3, src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvhaddw_hu_bu, sum4, sum4, sum5, sum5, sum6, sum6, ++ sum7, sum7, src4, src5, src6, src7); ++ DUP2_ARG2(__lasx_xvhaddw_hu_bu, src8, src8, src9, src9, src8, src9); ++ ++ DUP4_ARG2(__lasx_xvadd_h, src0, src2, src1, src3, src2, src4, src3, src5, ++ sum0, sum1, sum2, sum3); ++ DUP4_ARG2(__lasx_xvadd_h, src4, src6, src5, src7, src6, src8, src7, src9, ++ sum4, sum5, sum6, sum7); + sum0 = __lasx_xvaddi_hu(sum0, 1); + sum1 = __lasx_xvaddi_hu(sum1, 1); + sum2 = __lasx_xvaddi_hu(sum2, 1); +@@ -659,23 +738,32 @@ static void common_hv_bil_no_rnd_16x16_lasx(const uint8_t *src, + sum5 = __lasx_xvsrai_h(sum5, 2); + sum6 = __lasx_xvsrai_h(sum6, 2); + sum7 = __lasx_xvsrai_h(sum7, 2); +- LASX_PCKEV_B_4_128SV(sum1, sum0, sum3, sum2, sum5, sum4, sum7, sum6, +- sum0, sum1, sum2, sum3); +- LASX_ST_D_2(sum0, 0, 2, dst, 8); ++ DUP4_ARG2(__lasx_xvpickev_b, sum1, sum0, sum3, sum2, sum5, sum4, sum7, sum6, ++ sum0, sum1, sum2, sum3); ++ __lasx_xvstelm_d(sum0, dst, 0, 0); ++ __lasx_xvstelm_d(sum0, dst, 8, 1); ++ dst += dst_stride; ++ __lasx_xvstelm_d(sum1, dst, 0, 0); ++ __lasx_xvstelm_d(sum1, dst, 8, 1); + dst += dst_stride; +- LASX_ST_D_2(sum0, 1, 3, dst, 8); ++ __lasx_xvstelm_d(sum2, dst, 0, 0); ++ __lasx_xvstelm_d(sum2, dst, 8, 1); + dst += dst_stride; +- LASX_ST_D_2(sum1, 0, 2, dst, 8); ++ __lasx_xvstelm_d(sum3, dst, 0, 0); ++ __lasx_xvstelm_d(sum3, dst, 8, 1); + dst += dst_stride; +- LASX_ST_D_2(sum1, 1, 3, dst, 8); ++ __lasx_xvstelm_d(sum0, dst, 0, 2); ++ __lasx_xvstelm_d(sum0, dst, 8, 3); + dst += dst_stride; +- LASX_ST_D_2(sum2, 0, 2, dst, 8); ++ __lasx_xvstelm_d(sum1, dst, 0, 2); ++ __lasx_xvstelm_d(sum1, dst, 8, 3); + dst += dst_stride; +- LASX_ST_D_2(sum2, 1, 3, dst, 8); ++ __lasx_xvstelm_d(sum2, dst, 0, 2); ++ __lasx_xvstelm_d(sum2, dst, 8, 3); + dst += dst_stride; +- LASX_ST_D_2(sum3, 0, 2, dst, 8); ++ __lasx_xvstelm_d(sum3, dst, 0, 2); ++ __lasx_xvstelm_d(sum3, dst, 8, 3); + dst += dst_stride; +- LASX_ST_D_2(sum3, 1, 3, dst, 8); + } + + static void common_hv_bil_no_rnd_8x16_lasx(const uint8_t *src, +@@ -685,31 +773,47 @@ static void common_hv_bil_no_rnd_8x16_lasx(const uint8_t *src, + __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9; + __m256i src10, src11, src12, src13, src14, src15, src16, src17; + __m256i sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7; +- int32_t src_stride_8x = src_stride << 3; +- +- LASX_LD_8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); +- LASX_LD_8((src + 1), src_stride, +- src9, src10, src11, src12, src13, src14, src15, src16); +- src += src_stride_8x; +- src8 = LASX_LD(src); +- src17 = LASX_LD(src + 1); +- +- LASX_ILVL_H_8(src9, src0, src10, src1, src11, src2, src12, src3, +- src13, src4, src14, src5, src15, src6, src16, src7, +- src0, src1, src2, src3, src4, src5, src6, src7); +- LASX_ILVL_H(src17, src8, src8); +- src0 = __lasx_xvhaddw_hu_bu(src0, src0); +- src1 = __lasx_xvhaddw_hu_bu(src1, src1); +- src2 = __lasx_xvhaddw_hu_bu(src2, src2); +- src3 = __lasx_xvhaddw_hu_bu(src3, src3); +- src4 = __lasx_xvhaddw_hu_bu(src4, src4); +- src5 = __lasx_xvhaddw_hu_bu(src5, src5); +- src6 = __lasx_xvhaddw_hu_bu(src6, src6); +- src7 = __lasx_xvhaddw_hu_bu(src7, src7); +- src8 = __lasx_xvhaddw_hu_bu(src8, src8); +- LASX_ADD_H_8(src0, src1, src1, src2, src2, src3, src3, src4, +- src4, src5, src5, src6, src6, src7, src7, src8, +- sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7); ++ int32_t src_stride_2x = src_stride << 1; ++ int32_t src_stride_4x = src_stride << 2; ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src += (1 - src_stride_4x); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src9, src10, src11, src12); ++ src += src_stride_4x; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src13, src14, src15, src16); ++ src += (src_stride_4x - 1); ++ DUP2_ARG2(__lasx_xvld, src, 0, src, 1, src8, src17); ++ ++ DUP4_ARG3(__lasx_xvpermi_q, src0, src4, 0x02, src1, src5, 0x02, src2, src6, 0x02, ++ src3, src7, 0x02, src0, src1, src2, src3); ++ DUP4_ARG3(__lasx_xvpermi_q, src4, src8, 0x02, src9, src13, 0x02, src10, src14, 0x02, ++ src11, src15, 0x02, src4, src5, src6, src7); ++ DUP2_ARG3(__lasx_xvpermi_q, src12, src16, 0x02, src13, src17, 0x02, src8, src9); ++ ++ DUP4_ARG2(__lasx_xvilvl_h, src5, src0, src6, src1, src7, src2, src8, src3, ++ sum0, sum2, sum4, sum6); ++ DUP4_ARG2(__lasx_xvilvh_h, src5, src0, src6, src1, src7, src2, src8, src3, ++ sum1, sum3, sum5, sum7); ++ src8 = __lasx_xvilvl_h(src9, src4); ++ src9 = __lasx_xvilvh_h(src9, src4); ++ ++ DUP4_ARG2(__lasx_xvhaddw_hu_bu, sum0, sum0, sum1, sum1, sum2, sum2, ++ sum3, sum3, src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvhaddw_hu_bu, sum4, sum4, sum5, sum5, sum6, sum6, ++ sum7, sum7, src4, src5, src6, src7); ++ DUP2_ARG2(__lasx_xvhaddw_hu_bu, src8, src8, src9, src9, src8, src9); ++ ++ DUP4_ARG2(__lasx_xvadd_h, src0, src2, src1, src3, src2, src4, src3, src5, ++ sum0, sum1, sum2, sum3); ++ DUP4_ARG2(__lasx_xvadd_h, src4, src6, src5, src7, src6, src8, src7, src9, ++ sum4, sum5, sum6, sum7); + sum0 = __lasx_xvaddi_hu(sum0, 1); + sum1 = __lasx_xvaddi_hu(sum1, 1); + sum2 = __lasx_xvaddi_hu(sum2, 1); +@@ -726,23 +830,32 @@ static void common_hv_bil_no_rnd_8x16_lasx(const uint8_t *src, + sum5 = __lasx_xvsrai_h(sum5, 2); + sum6 = __lasx_xvsrai_h(sum6, 2); + sum7 = __lasx_xvsrai_h(sum7, 2); +- LASX_PCKEV_B_4_128SV(sum1, sum0, sum3, sum2, sum5, sum4, sum7, sum6, +- sum0, sum1, sum2, sum3); +- LASX_ST_D_2(sum0, 0, 2, dst, 8); ++ DUP4_ARG2(__lasx_xvpickev_b, sum1, sum0, sum3, sum2, sum5, sum4, sum7, sum6, ++ sum0, sum1, sum2, sum3); ++ __lasx_xvstelm_d(sum0, dst, 0, 0); ++ __lasx_xvstelm_d(sum0, dst, 8, 1); + dst += dst_stride; +- LASX_ST_D_2(sum0, 1, 3, dst, 8); ++ __lasx_xvstelm_d(sum1, dst, 0, 0); ++ __lasx_xvstelm_d(sum1, dst, 8, 1); + dst += dst_stride; +- LASX_ST_D_2(sum1, 0, 2, dst, 8); ++ __lasx_xvstelm_d(sum2, dst, 0, 0); ++ __lasx_xvstelm_d(sum2, dst, 8, 1); + dst += dst_stride; +- LASX_ST_D_2(sum1, 1, 3, dst, 8); ++ __lasx_xvstelm_d(sum3, dst, 0, 0); ++ __lasx_xvstelm_d(sum3, dst, 8, 1); + dst += dst_stride; +- LASX_ST_D_2(sum2, 0, 2, dst, 8); ++ __lasx_xvstelm_d(sum0, dst, 0, 2); ++ __lasx_xvstelm_d(sum0, dst, 8, 3); + dst += dst_stride; +- LASX_ST_D_2(sum2, 1, 3, dst, 8); ++ __lasx_xvstelm_d(sum1, dst, 0, 2); ++ __lasx_xvstelm_d(sum1, dst, 8, 3); + dst += dst_stride; +- LASX_ST_D_2(sum3, 0, 2, dst, 8); ++ __lasx_xvstelm_d(sum2, dst, 0, 2); ++ __lasx_xvstelm_d(sum2, dst, 8, 3); ++ dst += dst_stride; ++ __lasx_xvstelm_d(sum3, dst, 0, 2); ++ __lasx_xvstelm_d(sum3, dst, 8, 3); + dst += dst_stride; +- LASX_ST_D_2(sum3, 1, 3, dst, 8); + } + + void ff_put_no_rnd_pixels16_xy2_8_lasx(uint8_t *block, +@@ -761,34 +874,66 @@ static void common_hz_bil_no_rnd_8x8_lasx(const uint8_t *src, int32_t src_stride + { + __m256i src0, src1, src2, src3, src4, src5, src6, src7; + __m256i src8, src9, src10, src11, src12, src13, src14, src15; ++ int32_t src_stride_2x = src_stride << 1; ++ int32_t src_stride_4x = src_stride << 2; ++ int32_t dst_stride_2x = dst_stride << 1; ++ int32_t dst_stride_4x = dst_stride << 2; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t src_stride_3x = src_stride_2x + src_stride; + +- LASX_LD_8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); +- LASX_LD_8((src + 1), src_stride, +- src8, src9, src10, src11, src12, src13, src14, src15); +- LASX_PCKEV_D_4_128SV(src1, src0, src3, src2, src5, src4, src7, src6, +- src0, src1, src2, src3); +- LASX_PCKEV_D_4_128SV(src9, src8, src11, src10, src13, src12, src15, src14, +- src4, src5, src6, src7); +- LASX_PCKEV_Q_4(src1, src0, src3, src2, src5, src4, src7, src6, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src += (1 - src_stride_4x); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src8, src9, src10, src11); ++ src += src_stride_4x; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src12, src13, src14, src15); ++ ++ DUP4_ARG2(__lasx_xvpickev_d, src1, src0, src3, src2, src5, src4, src7, src6, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvpickev_d, src9, src8, src11, src10, src13, src12, src15, ++ src14, src4, src5, src6, src7); ++ DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src5, src4, ++ 0x20, src7, src6, 0x20, src0, src1, src2, src3); + src0 = __lasx_xvavg_bu(src0, src2); + src1 = __lasx_xvavg_bu(src1, src3); +- LASX_ST_D_4(src0, 0, 1, 2, 3, dst, dst_stride); +- dst += (dst_stride << 2); +- LASX_ST_D_4(src1, 0, 1, 2, 3, dst, dst_stride); ++ __lasx_xvstelm_d(src0, dst, 0, 0); ++ __lasx_xvstelm_d(src0, dst + dst_stride, 0, 1); ++ __lasx_xvstelm_d(src0, dst + dst_stride_2x, 0, 2); ++ __lasx_xvstelm_d(src0, dst + dst_stride_3x, 0, 3); ++ dst += dst_stride_4x; ++ __lasx_xvstelm_d(src1, dst, 0, 0); ++ __lasx_xvstelm_d(src1, dst + dst_stride, 0, 1); ++ __lasx_xvstelm_d(src1, dst + dst_stride_2x, 0, 2); ++ __lasx_xvstelm_d(src1, dst + dst_stride_3x, 0, 3); + } + + static void common_hz_bil_no_rnd_4x8_lasx(const uint8_t *src, int32_t src_stride, + uint8_t *dst, int32_t dst_stride) + { + __m256i src0, src1, src2, src3, src4, src5, src6, src7; +- LASX_LD_4(src, src_stride, src0, src1, src2, src3); +- LASX_LD_4((src + 1), src_stride, src4, src5, src6, src7); +- LASX_PCKEV_D_4_128SV(src1, src0, src3, src2, src5, src4, src7, src6, +- src0, src1, src2, src3); +- LASX_PCKEV_Q_2(src1, src0, src3, src2, src0, src1); ++ int32_t src_stride_2x = src_stride << 1; ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_2x = dst_stride << 1; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += 1; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ DUP4_ARG2(__lasx_xvpickev_d, src1, src0, src3, src2, src5, src4, src7, src6, ++ src0, src1, src2, src3); ++ DUP2_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src0, src1); + src0 = __lasx_xvavg_bu(src0, src1); +- LASX_ST_D_4(src0, 0, 1, 2, 3, dst, dst_stride); ++ __lasx_xvstelm_d(src0, dst, 0, 0); ++ __lasx_xvstelm_d(src0, dst + dst_stride, 0, 1); ++ __lasx_xvstelm_d(src0, dst + dst_stride_2x, 0, 2); ++ __lasx_xvstelm_d(src0, dst + dst_stride_3x, 0, 3); + } + + void ff_put_no_rnd_pixels8_x2_8_lasx(uint8_t *block, const uint8_t *pixels, +@@ -805,37 +950,62 @@ static void common_vt_bil_no_rnd_8x8_lasx(const uint8_t *src, int32_t src_stride + uint8_t *dst, int32_t dst_stride) + { + __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8; ++ int32_t src_stride_2x = src_stride << 1; ++ int32_t src_stride_4x = src_stride << 2; ++ int32_t dst_stride_2x = dst_stride << 1; ++ int32_t dst_stride_4x = dst_stride << 2; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t src_stride_3x = src_stride_2x + src_stride; + +- LASX_LD_8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); +- src += (src_stride << 3); +- src8 = LASX_LD(src); +- +- LASX_PCKEV_D_4_128SV(src1, src0, src2, src1, src3, src2, src4, src3, +- src0, src1, src2, src3); +- LASX_PCKEV_D_4_128SV(src5, src4, src6, src5, src7, src6, src8, src7, +- src4, src5, src6, src7); +- LASX_PCKEV_Q_4(src2, src0, src3, src1, src6, src4, src7, src5, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src += src_stride_4x; ++ src8 = __lasx_xvld(src, 0); ++ ++ DUP4_ARG2(__lasx_xvpickev_d, src1, src0, src2, src1, src3, src2, src4, src3, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvpickev_d, src5, src4, src6, src5, src7, src6, src8, src7, ++ src4, src5, src6, src7); ++ DUP4_ARG3(__lasx_xvpermi_q, src2, src0, 0x20, src3, src1, 0x20, src6, src4, ++ 0x20, src7, src5, 0x20, src0, src1, src2, src3); + src0 = __lasx_xvavg_bu(src0, src1); + src1 = __lasx_xvavg_bu(src2, src3); +- LASX_ST_D_4(src0, 0, 1, 2, 3, dst, dst_stride); +- dst += (dst_stride << 2); +- LASX_ST_D_4(src1, 0, 1, 2, 3, dst, dst_stride); ++ __lasx_xvstelm_d(src0, dst, 0, 0); ++ __lasx_xvstelm_d(src0, dst + dst_stride, 0, 1); ++ __lasx_xvstelm_d(src0, dst + dst_stride_2x, 0, 2); ++ __lasx_xvstelm_d(src0, dst + dst_stride_3x, 0, 3); ++ dst += dst_stride_4x; ++ __lasx_xvstelm_d(src1, dst, 0, 0); ++ __lasx_xvstelm_d(src1, dst + dst_stride, 0, 1); ++ __lasx_xvstelm_d(src1, dst + dst_stride_2x, 0, 2); ++ __lasx_xvstelm_d(src1, dst + dst_stride_3x, 0, 3); + } + + static void common_vt_bil_no_rnd_4x8_lasx(const uint8_t *src, int32_t src_stride, + uint8_t *dst, int32_t dst_stride) + { + __m256i src0, src1, src2, src3, src4; ++ int32_t src_stride_2x = src_stride << 1; ++ int32_t src_stride_4x = src_stride << 2; ++ int32_t dst_stride_2x = dst_stride << 1; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t src_stride_3x = src_stride_2x + src_stride; + +- LASX_LD_4(src, src_stride, src0, src1, src2, src3); +- src += (src_stride << 2); +- src4 = LASX_LD(src); +- LASX_PCKEV_D_4_128SV(src1, src0, src2, src1, src3, src2, src4, src3, +- src0, src1, src2, src3); +- LASX_PCKEV_Q_2(src2, src0, src3, src1, src0, src1); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ src4 = __lasx_xvld(src, 0); ++ DUP4_ARG2(__lasx_xvpickev_d, src1, src0, src2, src1, src3, src2, src4, src3, ++ src0, src1, src2, src3); ++ DUP2_ARG3(__lasx_xvpermi_q, src2, src0, 0x20, src3, src1, 0x20, src0, src1); + src0 = __lasx_xvavg_bu(src0, src1); +- LASX_ST_D_4(src0, 0, 1, 2, 3, dst, dst_stride); ++ __lasx_xvstelm_d(src0, dst, 0, 0); ++ __lasx_xvstelm_d(src0, dst + dst_stride, 0, 1); ++ __lasx_xvstelm_d(src0, dst + dst_stride_2x, 0, 2); ++ __lasx_xvstelm_d(src0, dst + dst_stride_3x, 0, 3); + } + + void ff_put_no_rnd_pixels8_y2_8_lasx(uint8_t *block, const uint8_t *pixels, +@@ -854,21 +1024,36 @@ static void common_hv_bil_no_rnd_8x8_lasx(const uint8_t *src, int32_t src_stride + __m256i src0, src1, src2, src3, src4, src5, src6, src7; + __m256i src8, src9, src10, src11, src12, src13, src14, src15, src16, src17; + __m256i sum0, sum1, sum2, sum3; ++ int32_t src_stride_2x = src_stride << 1; ++ int32_t src_stride_4x = src_stride << 2; ++ int32_t dst_stride_2x = dst_stride << 1; ++ int32_t dst_stride_4x = dst_stride << 2; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t src_stride_3x = src_stride_2x + src_stride; + +- LASX_LD_8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); +- LASX_LD_8((src + 1), src_stride, +- src9, src10, src11, src12, src13, src14, src15, src16); +- src += (src_stride << 3); +- src8 = LASX_LD(src); +- src17 = LASX_LD(src + 1); +- +- LASX_ILVL_B_8_128SV(src9, src0, src10, src1, src11, src2, src12, src3, +- src13, src4, src14, src5, src15, src6, src16, src7, +- src0, src1, src2, src3, src4, src5, src6, src7); +- LASX_ILVL_B_128SV(src17, src8, src8); +- LASX_PCKEV_Q_8(src1, src0, src2, src1, src3, src2, src4, src3, +- src5, src4, src6, src5, src7, src6, src8, src7, +- src0, src1, src2, src3, src4, src5, src6, src7); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src += (1 - src_stride_4x); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src9, src10, src11, src12); ++ src += src_stride_4x; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src13, src14, src15, src16); ++ src += (src_stride_4x - 1); ++ DUP2_ARG2(__lasx_xvld, src, 0, src, 1, src8, src17); ++ ++ DUP4_ARG2(__lasx_xvilvl_b, src9, src0, src10, src1, src11, src2, src12, src3, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvilvl_b, src13, src4, src14, src5, src15, src6, src16, src7, ++ src4, src5, src6, src7); ++ src8 = __lasx_xvilvl_b(src17, src8); ++ DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src2, src1, 0x20, src3, src2, ++ 0x20, src4, src3, 0x20, src0, src1, src2, src3); ++ DUP4_ARG3(__lasx_xvpermi_q, src5, src4, 0x20, src6, src5, 0x20, src7, src6, ++ 0x20, src8, src7, 0x20, src4, src5, src6, src7); + src0 = __lasx_xvhaddw_hu_bu(src0, src0); + src1 = __lasx_xvhaddw_hu_bu(src1, src1); + src2 = __lasx_xvhaddw_hu_bu(src2, src2); +@@ -877,8 +1062,8 @@ static void common_hv_bil_no_rnd_8x8_lasx(const uint8_t *src, int32_t src_stride + src5 = __lasx_xvhaddw_hu_bu(src5, src5); + src6 = __lasx_xvhaddw_hu_bu(src6, src6); + src7 = __lasx_xvhaddw_hu_bu(src7, src7); +- LASX_ADD_H_4(src0, src1, src2, src3, src4, src5, src6, src7, +- sum0, sum1, sum2, sum3); ++ DUP4_ARG2(__lasx_xvadd_h, src0, src1, src2, src3, src4, src5, src6, src7, ++ sum0, sum1, sum2, sum3); + sum0 = __lasx_xvaddi_hu(sum0, 1); + sum1 = __lasx_xvaddi_hu(sum1, 1); + sum2 = __lasx_xvaddi_hu(sum2, 1); +@@ -887,10 +1072,16 @@ static void common_hv_bil_no_rnd_8x8_lasx(const uint8_t *src, int32_t src_stride + sum1 = __lasx_xvsrai_h(sum1, 2); + sum2 = __lasx_xvsrai_h(sum2, 2); + sum3 = __lasx_xvsrai_h(sum3, 2); +- LASX_PCKEV_B_2_128SV(sum1, sum0, sum3, sum2, sum0, sum1); +- LASX_ST_D_4(sum0, 0, 2, 1, 3, dst, dst_stride); +- dst += (dst_stride << 2); +- LASX_ST_D_4(sum1, 0, 2, 1, 3, dst, dst_stride); ++ DUP2_ARG2(__lasx_xvpickev_b, sum1, sum0, sum3, sum2, sum0, sum1); ++ __lasx_xvstelm_d(sum0, dst, 0, 0); ++ __lasx_xvstelm_d(sum0, dst + dst_stride, 0, 2); ++ __lasx_xvstelm_d(sum0, dst + dst_stride_2x, 0, 1); ++ __lasx_xvstelm_d(sum0, dst + dst_stride_3x, 0, 3); ++ dst += dst_stride_4x; ++ __lasx_xvstelm_d(sum1, dst, 0, 0); ++ __lasx_xvstelm_d(sum1, dst + dst_stride, 0, 2); ++ __lasx_xvstelm_d(sum1, dst + dst_stride_2x, 0, 1); ++ __lasx_xvstelm_d(sum1, dst + dst_stride_3x, 0, 3); + } + + static void common_hv_bil_no_rnd_4x8_lasx(const uint8_t *src, int32_t src_stride, +@@ -898,29 +1089,39 @@ static void common_hv_bil_no_rnd_4x8_lasx(const uint8_t *src, int32_t src_stride + { + __m256i src0, src1, src2, src3, src4, src5, src6, src7; + __m256i src8, src9, sum0, sum1; +- +- LASX_LD_4(src, src_stride, src0, src1, src2, src3); +- LASX_LD_4((src + 1), src_stride, src5, src6, src7, src8); +- src += (src_stride << 2); +- src4 = LASX_LD(src); +- src9 = LASX_LD(src + 1); +- +- LASX_ILVL_B_4_128SV(src5, src0, src6, src1, src7, src2, src8, src3, +- src0, src1, src2, src3); +- LASX_ILVL_B_128SV(src9, src4, src4); +- LASX_PCKEV_Q_4(src1, src0, src2, src1, src3, src2, src4, src3, +- src0, src1, src2, src3); ++ int32_t src_stride_2x = src_stride << 1; ++ int32_t src_stride_4x = src_stride << 2; ++ int32_t dst_stride_2x = dst_stride << 1; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += 1; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src5, src6, src7, src8); ++ src += (src_stride_4x - 1); ++ DUP2_ARG2(__lasx_xvld, src, 0, src, 1, src4, src9); ++ ++ DUP4_ARG2(__lasx_xvilvl_b, src5, src0, src6, src1, src7, src2, src8, src3, ++ src0, src1, src2, src3); ++ src4 = __lasx_xvilvl_b(src9, src4); ++ DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src2, src1, 0x20, src3, src2, ++ 0x20, src4, src3, 0x20, src0, src1, src2, src3); + src0 = __lasx_xvhaddw_hu_bu(src0, src0); + src1 = __lasx_xvhaddw_hu_bu(src1, src1); + src2 = __lasx_xvhaddw_hu_bu(src2, src2); + src3 = __lasx_xvhaddw_hu_bu(src3, src3); +- LASX_ADD_H_2(src0, src1, src2, src3, sum0, sum1); ++ DUP2_ARG2(__lasx_xvadd_h, src0, src1, src2, src3, sum0, sum1); + sum0 = __lasx_xvaddi_hu(sum0, 1); + sum1 = __lasx_xvaddi_hu(sum1, 1); + sum0 = __lasx_xvsrai_h(sum0, 2); + sum1 = __lasx_xvsrai_h(sum1, 2); +- LASX_PCKEV_B_128SV(sum1, sum0, sum0); +- LASX_ST_D_4(sum0, 0, 2, 1, 3, dst, dst_stride); ++ sum0 = __lasx_xvpickev_b(sum1, sum0); ++ __lasx_xvstelm_d(sum0, dst, 0, 0); ++ __lasx_xvstelm_d(sum0, dst + dst_stride, 0, 2); ++ __lasx_xvstelm_d(sum0, dst + dst_stride_2x, 0, 1); ++ __lasx_xvstelm_d(sum0, dst + dst_stride_3x, 0, 3); + } + + void ff_put_no_rnd_pixels8_xy2_8_lasx(uint8_t *block, const uint8_t *pixels, +@@ -937,56 +1138,81 @@ static void common_hv_bil_16w_lasx(const uint8_t *src, int32_t src_stride, + uint8_t *dst, int32_t dst_stride, + uint8_t height) + { +- uint8_t loop_cnt; + __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9; + __m256i src10, src11, src12, src13, src14, src15, src16, src17; + __m256i sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7; +- int32_t src_stride_8x = (src_stride << 3); ++ uint8_t loop_cnt; ++ int32_t src_stride_2x = src_stride << 1; ++ int32_t src_stride_4x = src_stride << 2; ++ int32_t src_stride_3x = src_stride_2x + src_stride; + + for (loop_cnt = (height >> 3); loop_cnt--;) { +- LASX_LD_8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); +- LASX_LD_8((src + 1), src_stride, +- src9, src10, src11, src12, src13, src14, src15, src16); +- src += src_stride_8x; +- +- src8 = LASX_LD(src); +- src17 = LASX_LD(src + 1); +- +- LASX_ILVL_H_8(src9, src0, src10, src1, src11, src2, src12, src3, +- src13, src4, src14, src5, src15, src6, src16, src7, +- src0, src1, src2, src3, src4, src5, src6, src7); +- LASX_ILVL_H(src17, src8, src8); +- src0 = __lasx_xvhaddw_hu_bu(src0, src0); +- src1 = __lasx_xvhaddw_hu_bu(src1, src1); +- src2 = __lasx_xvhaddw_hu_bu(src2, src2); +- src3 = __lasx_xvhaddw_hu_bu(src3, src3); +- src4 = __lasx_xvhaddw_hu_bu(src4, src4); +- src5 = __lasx_xvhaddw_hu_bu(src5, src5); +- src6 = __lasx_xvhaddw_hu_bu(src6, src6); +- src7 = __lasx_xvhaddw_hu_bu(src7, src7); +- src8 = __lasx_xvhaddw_hu_bu(src8, src8); +- LASX_ADD_H_8(src0, src1, src1, src2, src2, src3, src3, src4, +- src4, src5, src5, src6, src6, src7, src7, src8, +- sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7); +- LASX_SRARI_H_4(sum0, sum1, sum2, sum3, sum0, sum1, sum2, sum3, 2); +- LASX_SRARI_H_4(sum4, sum5, sum6, sum7, sum4, sum5, sum6, sum7, 2); +- LASX_PCKEV_B_4_128SV(sum1, sum0, sum3, sum2, sum5, sum4, sum7, sum6, +- sum0, sum1, sum2, sum3); +- LASX_ST_D_2(sum0, 0, 2, dst, 8); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src += src_stride_4x; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src += (1 - src_stride_4x); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src9, src10, src11, src12); ++ src += src_stride_4x; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src13, src14, src15, src16); ++ src += (src_stride_4x - 1); ++ DUP2_ARG2(__lasx_xvld, src, 0, src, 1, src8, src17); ++ ++ DUP4_ARG3(__lasx_xvpermi_q, src0, src4, 0x02, src1, src5, 0x02, src2, src6, 0x02, ++ src3, src7, 0x02, src0, src1, src2, src3); ++ DUP4_ARG3(__lasx_xvpermi_q, src4, src8, 0x02, src9, src13, 0x02, src10, src14, ++ 0x02, src11, src15, 0x02, src4, src5, src6, src7); ++ DUP2_ARG3(__lasx_xvpermi_q, src12, src16, 0x02, src13, src17, 0x02, src8, src9); ++ ++ DUP4_ARG2(__lasx_xvilvl_h, src5, src0, src6, src1, src7, src2, src8, src3, ++ sum0, sum2, sum4, sum6); ++ DUP4_ARG2(__lasx_xvilvh_h, src5, src0, src6, src1, src7, src2, src8, src3, ++ sum1, sum3, sum5, sum7); ++ src8 = __lasx_xvilvl_h(src9, src4); ++ src9 = __lasx_xvilvh_h(src9, src4); ++ ++ DUP4_ARG2(__lasx_xvhaddw_hu_bu, sum0, sum0, sum1, sum1, sum2, sum2, ++ sum3, sum3, src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvhaddw_hu_bu, sum4, sum4, sum5, sum5, sum6, sum6, ++ sum7, sum7, src4, src5, src6, src7); ++ DUP2_ARG2(__lasx_xvhaddw_hu_bu, src8, src8, src9, src9, src8, src9); ++ ++ DUP4_ARG2(__lasx_xvadd_h, src0, src2, src1, src3, src2, src4, src3, src5, ++ sum0, sum1, sum2, sum3); ++ DUP4_ARG2(__lasx_xvadd_h, src4, src6, src5, src7, src6, src8, src7, src9, ++ sum4, sum5, sum6, sum7); ++ DUP4_ARG2(__lasx_xvsrari_h, sum0, 2, sum1, 2, sum2, 2, sum3, 2, sum0, sum1, ++ sum2, sum3); ++ DUP4_ARG2(__lasx_xvsrari_h, sum4, 2, sum5, 2, sum6, 2, sum7, 2, sum4, sum5, ++ sum6, sum7); ++ DUP4_ARG2(__lasx_xvpickev_b, sum1, sum0, sum3, sum2, sum5, sum4, sum7, sum6, ++ sum0, sum1, sum2, sum3); ++ __lasx_xvstelm_d(sum0, dst, 0, 0); ++ __lasx_xvstelm_d(sum0, dst, 8, 1); + dst += dst_stride; +- LASX_ST_D_2(sum0, 1, 3, dst, 8); ++ __lasx_xvstelm_d(sum1, dst, 0, 0); ++ __lasx_xvstelm_d(sum1, dst, 8, 1); + dst += dst_stride; +- LASX_ST_D_2(sum1, 0, 2, dst, 8); ++ __lasx_xvstelm_d(sum2, dst, 0, 0); ++ __lasx_xvstelm_d(sum2, dst, 8, 1); + dst += dst_stride; +- LASX_ST_D_2(sum1, 1, 3, dst, 8); ++ __lasx_xvstelm_d(sum3, dst, 0, 0); ++ __lasx_xvstelm_d(sum3, dst, 8, 1); + dst += dst_stride; +- LASX_ST_D_2(sum2, 0, 2, dst, 8); ++ __lasx_xvstelm_d(sum0, dst, 0, 2); ++ __lasx_xvstelm_d(sum0, dst, 8, 3); + dst += dst_stride; +- LASX_ST_D_2(sum2, 1, 3, dst, 8); ++ __lasx_xvstelm_d(sum1, dst, 0, 2); ++ __lasx_xvstelm_d(sum1, dst, 8, 3); + dst += dst_stride; +- LASX_ST_D_2(sum3, 0, 2, dst, 8); ++ __lasx_xvstelm_d(sum2, dst, 0, 2); ++ __lasx_xvstelm_d(sum2, dst, 8, 3); + dst += dst_stride; +- LASX_ST_D_2(sum3, 1, 3, dst, 8); ++ __lasx_xvstelm_d(sum3, dst, 0, 2); ++ __lasx_xvstelm_d(sum3, dst, 8, 3); + dst += dst_stride; + } + } +@@ -1001,33 +1227,42 @@ static void common_hv_bil_8w_lasx(const uint8_t *src, int32_t src_stride, + uint8_t *dst, int32_t dst_stride, + uint8_t height) + { +- uint8_t loop_cnt; + __m256i src0, src1, src2, src3, src4, src5, src6, src7; + __m256i src8, src9, sum0, sum1; +- int32_t src_stride_4x = (src_stride << 2); +- int32_t dst_stride_4x = (dst_stride << 2); ++ uint8_t loop_cnt; ++ int32_t src_stride_2x = src_stride << 1; ++ int32_t src_stride_4x = src_stride << 2; ++ int32_t dst_stride_2x = dst_stride << 1; ++ int32_t dst_stride_4x = dst_stride << 2; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t src_stride_3x = src_stride_2x + src_stride; + +- src0 = LASX_LD(src); +- src5 = LASX_LD(src + 1); ++ DUP2_ARG2(__lasx_xvld, src, 0, src, 1, src0, src5); + src += src_stride; + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- LASX_LD_4(src, src_stride, src1, src2, src3, src4); +- LASX_LD_4((src + 1), src_stride, src6, src7, src8, src9); +- src += src_stride_4x; +- LASX_ILVL_B_4_128SV(src5, src0, src6, src1, src7, src2, src8, src3, +- src0, src1, src2, src3); +- LASX_ILVL_B_128SV(src9, src4, src5); +- LASX_PCKEV_Q_4(src1, src0, src2, src1, src3, src2, src5, src3, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src1, src2, src3, src4); ++ src += 1; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, ++ 0, src + src_stride_3x, 0, src6, src7, src8, src9); ++ src += (src_stride_4x - 1); ++ DUP4_ARG2(__lasx_xvilvl_b, src5, src0, src6, src1, src7, src2, src8, src3, ++ src0, src1, src2, src3); ++ src5 = __lasx_xvilvl_b(src9, src4); ++ DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src2, src1, 0x20, src3, src2, ++ 0x20, src5, src3, 0x20, src0, src1, src2, src3); + src0 = __lasx_xvhaddw_hu_bu(src0, src0); + src1 = __lasx_xvhaddw_hu_bu(src1, src1); + src2 = __lasx_xvhaddw_hu_bu(src2, src2); + src3 = __lasx_xvhaddw_hu_bu(src3, src3); +- LASX_ADD_H_2(src0, src1, src2, src3, sum0, sum1); +- LASX_SRARI_H_2(sum0, sum1, sum0, sum1, 2); +- LASX_PCKEV_B_128SV(sum1, sum0, sum0); +- LASX_ST_D_4(sum0, 0, 2, 1, 3, dst, dst_stride); ++ DUP2_ARG2(__lasx_xvadd_h, src0, src1, src2, src3, sum0, sum1); ++ DUP2_ARG2(__lasx_xvsrari_h, sum0, 2, sum1, 2, sum0, sum1); ++ sum0 = __lasx_xvpickev_b(sum1, sum0); ++ __lasx_xvstelm_d(sum0, dst, 0, 0); ++ __lasx_xvstelm_d(sum0, dst + dst_stride, 0, 2); ++ __lasx_xvstelm_d(sum0, dst + dst_stride_2x, 0, 1); ++ __lasx_xvstelm_d(sum0, dst + dst_stride_3x, 0, 3); + dst += dst_stride_4x; + src0 = src4; + src5 = src9; +diff --git a/libavcodec/loongarch/hpeldsp_lasx.h b/libavcodec/loongarch/hpeldsp_lasx.h +index 0477cb54ea..2e035eade8 100644 +--- a/libavcodec/loongarch/hpeldsp_lasx.h ++++ b/libavcodec/loongarch/hpeldsp_lasx.h +@@ -22,6 +22,7 @@ + #ifndef AVCODEC_LOONGARCH_HPELDSP_LASX_H + #define AVCODEC_LOONGARCH_HPELDSP_LASX_H + ++#include + #include + #include "libavutil/attributes.h" + +diff --git a/libavcodec/loongarch/idctdsp_lasx.c b/libavcodec/loongarch/idctdsp_lasx.c +index 78f15f17ee..dfcb9b1a4f 100644 +--- a/libavcodec/loongarch/idctdsp_lasx.c ++++ b/libavcodec/loongarch/idctdsp_lasx.c +@@ -20,20 +20,29 @@ + */ + + #include "idctdsp_loongarch.h" +-#include "libavutil/loongarch/generic_macros_lasx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + + static void put_pixels_clamped_lasx(const int16_t *block, uint8_t *pixels, + int32_t stride) + { + __m256i b0, b1, b2, b3; + __m256i temp0, temp1; ++ int32_t stride_2x = stride << 1; ++ int32_t stride_4x = stride << 2; ++ int32_t stride_3x = stride_2x + stride; + +- LASX_LD_4(block, 16, b0, b1, b2, b3); +- LASX_CLIP_H_0_255_4(b0, b1, b2, b3, b0, b1, b2, b3); +- LASX_PCKEV_B_2_128SV(b1, b0, b3, b2, temp0, temp1); +- LASX_ST_D_4(temp0, 0, 2, 1, 3, pixels, stride); +- pixels += (stride << 2); +- LASX_ST_D_4(temp1, 0, 2, 1, 3, pixels, stride); ++ DUP4_ARG2(__lasx_xvld, block, 0, block, 32, block, 64, block, 96, b0, b1, b2, b3); ++ DUP4_ARG1(__lasx_xvclip255_h, b0, b1, b2, b3, b0, b1, b2, b3); ++ DUP2_ARG2(__lasx_xvpickev_b, b1, b0, b3, b2, temp0, temp1); ++ __lasx_xvstelm_d(temp0, pixels, 0, 0); ++ __lasx_xvstelm_d(temp0, pixels + stride, 0, 2); ++ __lasx_xvstelm_d(temp0, pixels + stride_2x, 0, 1); ++ __lasx_xvstelm_d(temp0, pixels + stride_3x, 0, 3); ++ pixels += stride_4x; ++ __lasx_xvstelm_d(temp1, pixels, 0, 0); ++ __lasx_xvstelm_d(temp1, pixels + stride, 0, 2); ++ __lasx_xvstelm_d(temp1, pixels + stride_2x, 0, 1); ++ __lasx_xvstelm_d(temp1, pixels + stride_3x, 0, 3); + } + + static void put_signed_pixels_clamped_lasx(const int16_t *block, uint8_t *pixels, +@@ -42,17 +51,26 @@ static void put_signed_pixels_clamped_lasx(const int16_t *block, uint8_t *pixels + __m256i b0, b1, b2, b3; + __m256i temp0, temp1; + __m256i const_128 = {0x0080008000800080, 0x0080008000800080, 0x0080008000800080, 0x0080008000800080}; ++ int32_t stride_2x = stride << 1; ++ int32_t stride_4x = stride << 2; ++ int32_t stride_3x = stride_2x + stride; + +- LASX_LD_4(block, 16, b0, b1, b2, b3); ++ DUP4_ARG2(__lasx_xvld, block, 0, block, 32, block, 64, block, 96, b0, b1, b2, b3); + b0 = __lasx_xvadd_h(b0, const_128); + b1 = __lasx_xvadd_h(b1, const_128); + b2 = __lasx_xvadd_h(b2, const_128); + b3 = __lasx_xvadd_h(b3, const_128); +- LASX_CLIP_H_0_255_4(b0, b1, b2, b3, b0, b1, b2, b3); +- LASX_PCKEV_B_2_128SV(b1, b0, b3, b2, temp0, temp1); +- LASX_ST_D_4(temp0, 0, 2, 1, 3, pixels, stride); +- pixels += (stride << 2); +- LASX_ST_D_4(temp1, 0, 2, 1, 3, pixels, stride); ++ DUP4_ARG1(__lasx_xvclip255_h, b0, b1, b2, b3, b0, b1, b2, b3); ++ DUP2_ARG2(__lasx_xvpickev_b, b1, b0, b3, b2, temp0, temp1); ++ __lasx_xvstelm_d(temp0, pixels, 0, 0); ++ __lasx_xvstelm_d(temp0, pixels + stride, 0, 2); ++ __lasx_xvstelm_d(temp0, pixels + stride_2x, 0, 1); ++ __lasx_xvstelm_d(temp0, pixels + stride_3x, 0, 3); ++ pixels += stride_4x; ++ __lasx_xvstelm_d(temp1, pixels, 0, 0); ++ __lasx_xvstelm_d(temp1, pixels + stride, 0, 2); ++ __lasx_xvstelm_d(temp1, pixels + stride_2x, 0, 1); ++ __lasx_xvstelm_d(temp1, pixels + stride_3x, 0, 3); + } + + static void add_pixels_clamped_lasx(const int16_t *block, uint8_t *pixels, +@@ -62,8 +80,11 @@ static void add_pixels_clamped_lasx(const int16_t *block, uint8_t *pixels, + __m256i p0, p1, p2, p3, p4, p5, p6, p7; + __m256i temp0, temp1, temp2, temp3; + uint8_t *pix = pixels; ++ int32_t stride_2x = stride << 1; ++ int32_t stride_4x = stride << 2; ++ int32_t stride_3x = stride_2x + stride; + +- LASX_LD_4(block, 16, b0, b1, b2, b3); ++ DUP4_ARG2(__lasx_xvld, block, 0, block, 32, block, 64, block, 96, b0, b1, b2, b3); + p0 = __lasx_xvldrepl_d(pix, 0); + pix += stride; + p1 = __lasx_xvldrepl_d(pix, 0); +@@ -83,15 +104,19 @@ static void add_pixels_clamped_lasx(const int16_t *block, uint8_t *pixels, + temp1 = __lasx_xvpermi_q(p3, p2, 0x20); + temp2 = __lasx_xvpermi_q(p5, p4, 0x20); + temp3 = __lasx_xvpermi_q(p7, p6, 0x20); +- LASX_ADDW_H_H_BU_128SV(b0, temp0, temp0); +- LASX_ADDW_H_H_BU_128SV(b1, temp1, temp1); +- LASX_ADDW_H_H_BU_128SV(b2, temp2, temp2); +- LASX_ADDW_H_H_BU_128SV(b3, temp3, temp3); +- LASX_CLIP_H_0_255_4(temp0, temp1, temp2, temp3, temp0, temp1, temp2, temp3); +- LASX_PCKEV_B_2_128SV(temp1, temp0, temp3, temp2, temp0, temp1); +- LASX_ST_D_4(temp0, 0, 2, 1, 3, pixels, stride); +- pixels += (stride << 2); +- LASX_ST_D_4(temp1, 0, 2, 1, 3, pixels, stride); ++ DUP4_ARG2(__lasx_xvaddw_h_h_bu, b0, temp0, b1, temp1, b2, temp2, b3, temp3, ++ temp0, temp1, temp2, temp3); ++ DUP4_ARG1(__lasx_xvclip255_h, temp0, temp1, temp2, temp3, temp0, temp1, temp2, temp3); ++ DUP2_ARG2(__lasx_xvpickev_b, temp1, temp0, temp3, temp2, temp0, temp1); ++ __lasx_xvstelm_d(temp0, pixels, 0, 0); ++ __lasx_xvstelm_d(temp0, pixels + stride, 0, 2); ++ __lasx_xvstelm_d(temp0, pixels + stride_2x, 0, 1); ++ __lasx_xvstelm_d(temp0, pixels + stride_3x, 0, 3); ++ pixels += stride_4x; ++ __lasx_xvstelm_d(temp1, pixels, 0, 0); ++ __lasx_xvstelm_d(temp1, pixels + stride, 0, 2); ++ __lasx_xvstelm_d(temp1, pixels + stride_2x, 0, 1); ++ __lasx_xvstelm_d(temp1, pixels + stride_3x, 0, 3); + } + + void ff_put_pixels_clamped_lasx(const int16_t *block, +diff --git a/libavcodec/loongarch/simple_idct_lasx.c b/libavcodec/loongarch/simple_idct_lasx.c +index 38e879cfa8..3caf83d846 100644 +--- a/libavcodec/loongarch/simple_idct_lasx.c ++++ b/libavcodec/loongarch/simple_idct_lasx.c +@@ -19,7 +19,7 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "libavutil/loongarch/generic_macros_lasx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + #include "idctdsp_loongarch.h" + + #define LASX_TRANSPOSE4x16(in_0, in_1, in_2, in_3, out_0, out_1, out_2, out_3) \ +@@ -30,17 +30,18 @@ + temp_1 = __lasx_xvpermi_q(in_2, in_0, 0x31); \ + temp_2 = __lasx_xvpermi_q(in_3, in_1, 0x20); \ + temp_3 = __lasx_xvpermi_q(in_3, in_1, 0x31); \ +- LASX_ILVLH_H_128SV(temp_1, temp_0, temp_5, temp_4); \ +- LASX_ILVLH_H_128SV(temp_3, temp_2, temp_7, temp_6); \ +- LASX_ILVLH_W_128SV(temp_6, temp_4, out_1, out_0); \ +- LASX_ILVLH_W_128SV(temp_7, temp_5, out_3, out_2); \ ++ DUP2_ARG2(__lasx_xvilvl_h, temp_1, temp_0, temp_3, temp_2, temp_4, temp_6); \ ++ DUP2_ARG2(__lasx_xvilvh_h, temp_1, temp_0, temp_3, temp_2, temp_5, temp_7); \ ++ DUP2_ARG2(__lasx_xvilvl_w, temp_6, temp_4, temp_7, temp_5, out_0, out_2); \ ++ DUP2_ARG2(__lasx_xvilvh_w, temp_6, temp_4, temp_7, temp_5, out_1, out_3); \ + } + + #define LASX_IDCTROWCONDDC \ + const_val = 16383 * ((1 << 19) / 16383); \ + const_val1 = __lasx_xvinsgr2vr_w(const_val0, const_val, 0); \ + const_val1 = __lasx_xvreplve0_w(const_val1); \ +- LASX_LD_4(block, 16, in0, in1, in2, in3); \ ++ DUP4_ARG2(__lasx_xvld, block, 0, block + 16, 0, block + 32, 0, block + 48, \ ++ 0, in0, in1, in2, in3); \ + LASX_TRANSPOSE4x16(in0, in1, in2, in3, in0, in1, in2, in3); \ + a0 = __lasx_xvpermi_d(in0, 0xD8); \ + a0 = __lasx_vext2xv_w_h(a0); \ +@@ -71,45 +72,45 @@ + w1 = __lasx_xvrepl128vei_h(w1, 1); \ + \ + /* part of FUNC6(idctRowCondDC) */ \ +- LASX_MADDWL_W_H_128SV(const_val0, in0, w4, temp0); \ +- LASX_MULWL_W_H_2_128SV(in1, w2, in1, w6, temp1, temp2); \ ++ temp0 = __lasx_xvmaddwl_w_h(const_val0, in0, w4); \ ++ DUP2_ARG2(__lasx_xvmulwl_w_h, in1, w2, in1, w6, temp1, temp2); \ + a0 = __lasx_xvadd_w(temp0, temp1); \ + a1 = __lasx_xvadd_w(temp0, temp2); \ + a2 = __lasx_xvsub_w(temp0, temp2); \ + a3 = __lasx_xvsub_w(temp0, temp1); \ + \ +- LASX_ILVH_H_2_128SV(in1, in0, w3, w1, temp0, temp1); \ +- LASX_DP2_W_H(temp0, temp1, b0); \ ++ DUP2_ARG2(__lasx_xvilvh_h, in1, in0, w3, w1, temp0, temp1); \ ++ b0 = __lasx_xvdp2_w_h(temp0, temp1); \ + temp1 = __lasx_xvneg_h(w7); \ +- LASX_ILVL_H_128SV(temp1, w3, temp2); \ +- LASX_DP2_W_H(temp0, temp2, b1); \ ++ temp2 = __lasx_xvilvl_h(temp1, w3); \ ++ b1 = __lasx_xvdp2_w_h(temp0, temp2); \ + temp1 = __lasx_xvneg_h(w1); \ +- LASX_ILVL_H_128SV(temp1, w5, temp2); \ +- LASX_DP2_W_H(temp0, temp2, b2); \ ++ temp2 = __lasx_xvilvl_h(temp1, w5); \ ++ b2 = __lasx_xvdp2_w_h(temp0, temp2); \ + temp1 = __lasx_xvneg_h(w5); \ +- LASX_ILVL_H_128SV(temp1, w7, temp2); \ +- LASX_DP2_W_H(temp0, temp2, b3); \ ++ temp2 = __lasx_xvilvl_h(temp1, w7); \ ++ b3 = __lasx_xvdp2_w_h(temp0, temp2); \ + \ + /* if (AV_RAN64A(row + 4)) */ \ +- LASX_ILVL_H_2_128SV(in3, in2, w6, w4, temp0, temp1); \ +- LASX_DP2ADD_W_H(a0, temp0, temp1, a0); \ +- LASX_ILVL_H_128SV(w2, w4, temp1); \ +- LASX_DP2SUB_W_H(a1, temp0, temp1, a1); \ ++ DUP2_ARG2(__lasx_xvilvl_h, in3, in2, w6, w4, temp0, temp1); \ ++ a0 = __lasx_xvdp2add_w_h(a0, temp0, temp1); \ ++ temp1 = __lasx_xvilvl_h(w2, w4); \ ++ a1 = __lasx_xvdp2sub_w_h(a1, temp0, temp1); \ + temp1 = __lasx_xvneg_h(w4); \ +- LASX_ILVL_H_128SV(w2, temp1, temp2); \ +- LASX_DP2ADD_W_H(a2, temp0, temp2, a2); \ ++ temp2 = __lasx_xvilvl_h(w2, temp1); \ ++ a2 = __lasx_xvdp2add_w_h(a2, temp0, temp2); \ + temp1 = __lasx_xvneg_h(w6); \ +- LASX_ILVL_H_128SV(temp1, w4, temp2); \ +- LASX_DP2ADD_W_H(a3, temp0, temp2, a3); \ ++ temp2 = __lasx_xvilvl_h(temp1, w4); \ ++ a3 = __lasx_xvdp2add_w_h(a3, temp0, temp2); \ + \ +- LASX_ILVH_H_2_128SV(in3, in2, w7, w5, temp0, temp1); \ +- LASX_DP2ADD_W_H(b0, temp0, temp1, b0); \ +- LASX_ILVL_H_2_128SV(w5, w1, w3, w7, temp1, temp2); \ +- LASX_DP2SUB_W_H(b1, temp0, temp1, b1); \ +- LASX_DP2ADD_W_H(b2, temp0, temp2, b2); \ ++ DUP2_ARG2(__lasx_xvilvh_h, in3, in2, w7, w5, temp0, temp1); \ ++ b0 = __lasx_xvdp2add_w_h(b0, temp0, temp1); \ ++ DUP2_ARG2(__lasx_xvilvl_h, w5, w1, w3, w7, temp1, temp2); \ ++ b1 = __lasx_xvdp2sub_w_h(b1, temp0, temp1); \ ++ b2 = __lasx_xvdp2add_w_h(b2, temp0, temp2); \ + temp1 = __lasx_xvneg_h(w1); \ +- LASX_ILVL_H_128SV(temp1, w3, temp2); \ +- LASX_DP2ADD_W_H(b3, temp0, temp2, b3); \ ++ temp2 = __lasx_xvilvl_h(temp1, w3); \ ++ b3 = __lasx_xvdp2add_w_h(b3, temp0, temp2); \ + \ + temp0 = __lasx_xvadd_w(a0, b0); \ + temp1 = __lasx_xvadd_w(a1, b1); \ +@@ -119,8 +120,9 @@ + a1 = __lasx_xvsub_w(a1, b1); \ + a2 = __lasx_xvsub_w(a2, b2); \ + a3 = __lasx_xvsub_w(a3, b3); \ +- LASX_SRAI_W_8(temp0, temp1, temp2, temp3, a0, a1, a2, a3, \ +- temp0, temp1, temp2, temp3, a0, a1, a2, a3, 11); \ ++ DUP4_ARG2(__lasx_xvsrai_w, temp0, 11, temp1, 11, temp2, 11, temp3, 11, \ ++ temp0, temp1, temp2, temp3); \ ++ DUP4_ARG2(__lasx_xvsrai_w, a0, 11, a1, 11, a2, 11, a3, 11, a0, a1, a2, a3); \ + in0 = __lasx_xvbitsel_v(temp0, temp, select_vec); \ + in1 = __lasx_xvbitsel_v(temp1, temp, select_vec); \ + in2 = __lasx_xvbitsel_v(temp2, temp, select_vec); \ +@@ -142,45 +144,45 @@ + #define LASX_IDCTCOLS \ + /* part of FUNC6(idctSparaseCol) */ \ + LASX_TRANSPOSE4x16(in0, in1, in2, in3, in0, in1, in2, in3); \ +- LASX_MADDWL_W_H_128SV(const_val1, in0, w4, temp0); \ +- LASX_MULWL_W_H_2_128SV(in1, w2, in1, w6, temp1, temp2); \ ++ temp0 = __lasx_xvmaddwl_w_h(const_val1, in0, w4); \ ++ DUP2_ARG2(__lasx_xvmulwl_w_h, in1, w2, in1, w6, temp1, temp2); \ + a0 = __lasx_xvadd_w(temp0, temp1); \ + a1 = __lasx_xvadd_w(temp0, temp2); \ + a2 = __lasx_xvsub_w(temp0, temp2); \ + a3 = __lasx_xvsub_w(temp0, temp1); \ + \ +- LASX_ILVH_H_2_128SV(in1, in0, w3, w1, temp0, temp1); \ +- LASX_DP2_W_H(temp0, temp1, b0); \ ++ DUP2_ARG2(__lasx_xvilvh_h, in1, in0, w3, w1, temp0, temp1); \ ++ b0 = __lasx_xvdp2_w_h(temp0, temp1); \ + temp1 = __lasx_xvneg_h(w7); \ +- LASX_ILVL_H_128SV(temp1, w3, temp2); \ +- LASX_DP2_W_H(temp0, temp2, b1); \ ++ temp2 = __lasx_xvilvl_h(temp1, w3); \ ++ b1 = __lasx_xvdp2_w_h(temp0, temp2); \ + temp1 = __lasx_xvneg_h(w1); \ +- LASX_ILVL_H_128SV(temp1, w5, temp2); \ +- LASX_DP2_W_H(temp0, temp2, b2); \ ++ temp2 = __lasx_xvilvl_h(temp1, w5); \ ++ b2 = __lasx_xvdp2_w_h(temp0, temp2); \ + temp1 = __lasx_xvneg_h(w5); \ +- LASX_ILVL_H_128SV(temp1, w7, temp2); \ +- LASX_DP2_W_H(temp0, temp2, b3); \ ++ temp2 = __lasx_xvilvl_h(temp1, w7); \ ++ b3 = __lasx_xvdp2_w_h(temp0, temp2); \ + \ + /* if (AV_RAN64A(row + 4)) */ \ +- LASX_ILVL_H_2_128SV(in3, in2, w6, w4, temp0, temp1); \ +- LASX_DP2ADD_W_H(a0, temp0, temp1, a0); \ +- LASX_ILVL_H_128SV(w2, w4, temp1); \ +- LASX_DP2SUB_W_H(a1, temp0, temp1, a1); \ ++ DUP2_ARG2(__lasx_xvilvl_h, in3, in2, w6, w4, temp0, temp1); \ ++ a0 = __lasx_xvdp2add_w_h(a0, temp0, temp1); \ ++ temp1 = __lasx_xvilvl_h(w2, w4); \ ++ a1 = __lasx_xvdp2sub_w_h(a1, temp0, temp1); \ + temp1 = __lasx_xvneg_h(w4); \ +- LASX_ILVL_H_128SV(w2, temp1, temp2); \ +- LASX_DP2ADD_W_H(a2, temp0, temp2, a2); \ ++ temp2 = __lasx_xvilvl_h(w2, temp1); \ ++ a2 = __lasx_xvdp2add_w_h(a2, temp0, temp2); \ + temp1 = __lasx_xvneg_h(w6); \ +- LASX_ILVL_H_128SV(temp1, w4, temp2); \ +- LASX_DP2ADD_W_H(a3, temp0, temp2, a3); \ ++ temp2 = __lasx_xvilvl_h(temp1, w4); \ ++ a3 = __lasx_xvdp2add_w_h(a3, temp0, temp2); \ + \ +- LASX_ILVH_H_2_128SV(in3, in2, w7, w5, temp0, temp1); \ +- LASX_DP2ADD_W_H(b0, temp0, temp1, b0); \ +- LASX_ILVL_H_2_128SV(w5, w1, w3, w7, temp1, temp2); \ +- LASX_DP2SUB_W_H(b1, temp0, temp1, b1); \ +- LASX_DP2ADD_W_H(b2, temp0, temp2, b2); \ ++ DUP2_ARG2(__lasx_xvilvh_h, in3, in2, w7, w5, temp0, temp1); \ ++ b0 = __lasx_xvdp2add_w_h(b0, temp0, temp1); \ ++ DUP2_ARG2(__lasx_xvilvl_h, w5, w1, w3, w7, temp1, temp2); \ ++ b1 = __lasx_xvdp2sub_w_h(b1, temp0, temp1); \ ++ b2 = __lasx_xvdp2add_w_h(b2, temp0, temp2); \ + temp1 = __lasx_xvneg_h(w1); \ +- LASX_ILVL_H_128SV(temp1, w3, temp2); \ +- LASX_DP2ADD_W_H(b3, temp0, temp2, b3); \ ++ temp2 = __lasx_xvilvl_h(temp1, w3); \ ++ b3 = __lasx_xvdp2add_w_h(b3, temp0, temp2); \ + \ + temp0 = __lasx_xvadd_w(a0, b0); \ + temp1 = __lasx_xvadd_w(a1, b1); \ +@@ -190,8 +192,9 @@ + a2 = __lasx_xvsub_w(a2, b2); \ + a1 = __lasx_xvsub_w(a1, b1); \ + a0 = __lasx_xvsub_w(a0, b0); \ +- LASX_SRAI_W_8(temp0, temp1, temp2, temp3, a0, a1, a2, a3, \ +- temp0, temp1, temp2, temp3, a0, a1, a2, a3, 20); \ ++ DUP4_ARG2(__lasx_xvsrai_w, temp0, 20, temp1, 20, temp2, 20, temp3, 20, \ ++ temp0, temp1, temp2, temp3); \ ++ DUP4_ARG2(__lasx_xvsrai_w, a0, 20, a1, 20, a2, 20, a3, 20, a0, a1, a2, a3); \ + in0 = __lasx_xvpickev_h(temp1, temp0); \ + in1 = __lasx_xvpickev_h(temp3, temp2); \ + in2 = __lasx_xvpickev_h(a2, a3); \ +@@ -216,13 +219,19 @@ static void simple_idct_lasx(int16_t *block) + in1 = __lasx_xvpermi_d(in1, 0xD8); + in2 = __lasx_xvpermi_d(in2, 0xD8); + in3 = __lasx_xvpermi_d(in3, 0xD8); +- LASX_ST_4(in0, in1, in2, in3, block, 16); ++ __lasx_xvst(in0, block, 0); ++ __lasx_xvst(in1, block, 32); ++ __lasx_xvst(in2, block, 64); ++ __lasx_xvst(in3, block, 96); + } + + static void simple_idct_put_lasx(uint8_t *dst, int32_t dst_stride, + int16_t *block) + { + int32_t const_val = 1 << 10; ++ int32_t dst_stride_2x = dst_stride << 1; ++ int32_t dst_stride_4x = dst_stride << 2; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; + __m256i w1 = {0x4B42539F58C50000, 0x11A822A332493FFF, 0x4B42539F58C50000, 0x11A822A332493FFF}; + __m256i in0, in1, in2, in3; + __m256i w2, w3, w4, w5, w6, w7; +@@ -238,11 +247,17 @@ static void simple_idct_put_lasx(uint8_t *dst, int32_t dst_stride, + in1 = __lasx_xvpermi_d(in1, 0xD8); + in2 = __lasx_xvpermi_d(in2, 0xD8); + in3 = __lasx_xvpermi_d(in3, 0xD8); +- LASX_CLIP_H_0_255_4(in0, in1, in2, in3, in0, in1, in2, in3); +- LASX_PCKEV_B_2_128SV(in1, in0, in3, in2, in0, in1); +- LASX_ST_D_4(in0, 0, 2, 1, 3, dst, dst_stride); +- dst += (dst_stride << 2); +- LASX_ST_D_4(in1, 0, 2, 1, 3, dst, dst_stride); ++ DUP4_ARG1(__lasx_xvclip255_h, in0, in1, in2, in3, in0, in1, in2, in3); ++ DUP2_ARG2(__lasx_xvpickev_b, in1, in0, in3, in2, in0, in1); ++ __lasx_xvstelm_d(in0, dst, 0, 0); ++ __lasx_xvstelm_d(in0, dst + dst_stride, 0, 2); ++ __lasx_xvstelm_d(in0, dst + dst_stride_2x, 0, 1); ++ __lasx_xvstelm_d(in0, dst + dst_stride_3x, 0, 3); ++ dst += dst_stride_4x; ++ __lasx_xvstelm_d(in1, dst, 0, 0); ++ __lasx_xvstelm_d(in1, dst + dst_stride, 0, 2); ++ __lasx_xvstelm_d(in1, dst + dst_stride_2x, 0, 1); ++ __lasx_xvstelm_d(in1, dst + dst_stride_3x, 0, 3); + } + + static void simple_idct_add_lasx(uint8_t *dst, int32_t dst_stride, +@@ -250,8 +265,12 @@ static void simple_idct_add_lasx(uint8_t *dst, int32_t dst_stride, + { + int32_t const_val = 1 << 10; + uint8_t *dst1 = dst; ++ int32_t dst_stride_2x = dst_stride << 1; ++ int32_t dst_stride_4x = dst_stride << 2; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ + __m256i w1 = {0x4B42539F58C50000, 0x11A822A332493FFF, 0x4B42539F58C50000, 0x11A822A332493FFF}; +- __m256i sh = {0x0003000200010000, 0x000B000A00090008, 0x0007000600050004, 0x000F000E000D000B}; ++ __m256i sh = {0x0003000200010000, 0x000B000A00090008, 0x0007000600050004, 0x000F000E000D000C}; + __m256i in0, in1, in2, in3; + __m256i w2, w3, w4, w5, w6, w7; + __m256i a0, a1, a2, a3; +@@ -297,11 +316,17 @@ static void simple_idct_add_lasx(uint8_t *dst, int32_t dst_stride, + in1 = __lasx_xvpermi_d(in1, 0xD8); + in2 = __lasx_xvpermi_d(in2, 0xD8); + in3 = __lasx_xvpermi_d(in3, 0xD8); +- LASX_CLIP_H_0_255_4(in0, in1, in2, in3, in0, in1, in2, in3); +- LASX_PCKEV_B_2_128SV(in1, in0, in3, in2, in0, in1); +- LASX_ST_D_4(in0, 0, 2, 1, 3, dst, dst_stride); +- dst += (dst_stride << 2); +- LASX_ST_D_4(in1, 0, 2, 1, 3, dst, dst_stride); ++ DUP4_ARG1(__lasx_xvclip255_h, in0, in1, in2, in3, in0, in1, in2, in3); ++ DUP2_ARG2(__lasx_xvpickev_b, in1, in0, in3, in2, in0, in1); ++ __lasx_xvstelm_d(in0, dst, 0, 0); ++ __lasx_xvstelm_d(in0, dst + dst_stride, 0, 2); ++ __lasx_xvstelm_d(in0, dst + dst_stride_2x, 0, 1); ++ __lasx_xvstelm_d(in0, dst + dst_stride_3x, 0, 3); ++ dst += dst_stride_4x; ++ __lasx_xvstelm_d(in1, dst, 0, 0); ++ __lasx_xvstelm_d(in1, dst + dst_stride, 0, 2); ++ __lasx_xvstelm_d(in1, dst + dst_stride_2x, 0, 1); ++ __lasx_xvstelm_d(in1, dst + dst_stride_3x, 0, 3); + } + + void ff_simple_idct_lasx(int16_t *block) +diff --git a/libavcodec/loongarch/vc1dsp_lasx.c b/libavcodec/loongarch/vc1dsp_lasx.c +index 216fcd23fa..4f4088fa1d 100644 +--- a/libavcodec/loongarch/vc1dsp_lasx.c ++++ b/libavcodec/loongarch/vc1dsp_lasx.c +@@ -20,7 +20,7 @@ + */ + + #include "vc1dsp_loongarch.h" +-#include "libavutil/loongarch/generic_macros_lasx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + + void ff_vc1_inv_trans_8x8_lasx(int16_t block[64]) + { +@@ -41,33 +41,31 @@ void ff_vc1_inv_trans_8x8_lasx(int16_t block[64]) + __m256i const_11 = {0xfff70004fff70004, 0xfff70004fff70004, 0xfff70004fff70004, 0xfff70004fff70004}; + __m256i const_12 = {0xfff0000ffff0000f, 0xfff0000ffff0000f, 0xfff0000ffff0000f, 0xfff0000ffff0000f}; + +- LASX_LD_4(block, 16, in0, in1, in2, in3); ++ DUP4_ARG2(__lasx_xvld, block, 0, block, 32, block, 64, block, 96, in0, in1, in2, in3); + in0 = __lasx_xvpermi_d(in0, 0xD8); + in1 = __lasx_xvpermi_d(in1, 0xD8); + in2 = __lasx_xvpermi_d(in2, 0xD8); + in3 = __lasx_xvpermi_d(in3, 0xD8); + /* first loops */ +- LASX_ILVL_H_2_128SV(in2, in0, in3, in1, temp0, temp1); ++ DUP2_ARG2(__lasx_xvilvl_h, in2, in0, in3, in1, temp0, temp1); + t2 = __lasx_xvreplgr2vr_w(con_4); +- LASX_DP2ADD_W_H(t2, temp0, const_1, t1); +- LASX_DP2ADD_W_H(t2, temp0, const_2, t2); +- LASX_DP2_W_H(temp1, const_3, t3); +- LASX_DP2_W_H(temp1, const_4, t4); ++ DUP2_ARG3(__lasx_xvdp2add_w_h, t2, temp0, const_1, t2, temp0, const_2, t1, t2); ++ DUP2_ARG2(__lasx_xvdp2_w_h, temp1, const_3, temp1, const_4, t3, t4); + + t5 = __lasx_xvadd_w(t1, t3); + t6 = __lasx_xvadd_w(t2, t4); + t7 = __lasx_xvsub_w(t2, t4); + t8 = __lasx_xvsub_w(t1, t3); + +- LASX_ILVH_H_2_128SV(in1, in0, in3, in2, temp0, temp1); +- LASX_DP2_W_H(const_5, temp0, temp2); +- LASX_DP2ADD_W_H(temp2, temp1, const_6, t1); +- LASX_DP2_W_H(const_7, temp0, temp2); +- LASX_DP2ADD_W_H(temp2, temp1, const_8, t2); +- LASX_DP2_W_H(const_9, temp0, temp2); +- LASX_DP2ADD_W_H(temp2, temp1, const_10, t3); +- LASX_DP2_W_H(const_11, temp0, temp2); +- LASX_DP2ADD_W_H(temp2, temp1, const_12, t4); ++ DUP2_ARG2(__lasx_xvilvh_h, in1, in0, in3, in2, temp0, temp1); ++ temp2 = __lasx_xvdp2_w_h(const_5, temp0); ++ t1 = __lasx_xvdp2add_w_h(temp2, temp1, const_6); ++ temp2 = __lasx_xvdp2_w_h(const_7, temp0); ++ t2 = __lasx_xvdp2add_w_h(temp2, temp1, const_8); ++ temp2 = __lasx_xvdp2_w_h(const_9, temp0); ++ t3 = __lasx_xvdp2add_w_h(temp2, temp1, const_10); ++ temp2 = __lasx_xvdp2_w_h(const_11, temp0); ++ t4 = __lasx_xvdp2add_w_h(temp2, temp1, const_12); + + temp0 = __lasx_xvadd_w(t1, t5); + temp1 = __lasx_xvadd_w(t6, t2); +@@ -77,41 +75,40 @@ void ff_vc1_inv_trans_8x8_lasx(int16_t block[64]) + in1 = __lasx_xvsub_w(t7, t3); + in2 = __lasx_xvsub_w(t6, t2); + in3 = __lasx_xvsub_w(t5, t1); +- LASX_SRAI_W_8(temp0, temp1, temp2, temp3, in0, in1, in2, in3, +- temp0, temp1, temp2, temp3, in0, in1, in2, in3, 3); ++ DUP4_ARG2(__lasx_xvsrai_w, temp0, 3, temp1, 3, temp2, 3, temp3, 3, ++ temp0, temp1, temp2, temp3); ++ DUP4_ARG2(__lasx_xvsrai_w, in0, 3, in1, 3, in2, 3, in3, 3, in0, in1, in2, in3); + + /* second loops */ + temp0 = __lasx_xvpackev_h(temp1, temp0); + temp1 = __lasx_xvpackev_h(temp3, temp2); + temp2 = __lasx_xvpackev_h(in1, in0); + temp3 = __lasx_xvpackev_h(in3, in2); +- LASX_ILVL_W_2_128SV(temp1, temp0, temp3, temp2, t1, t3); +- LASX_ILVH_W_2_128SV(temp1, temp0, temp3, temp2, t2, t4); ++ DUP2_ARG2(__lasx_xvilvl_w, temp1, temp0, temp3, temp2, t1, t3); ++ DUP2_ARG2(__lasx_xvilvh_w, temp1, temp0, temp3, temp2, t2, t4); + in0 = __lasx_xvpermi_q(t3, t1, 0x20); + in1 = __lasx_xvpermi_q(t3, t1, 0x31); + in2 = __lasx_xvpermi_q(t4, t2, 0x20); + in3 = __lasx_xvpermi_q(t4, t2, 0x31); +- LASX_ILVL_H_2_128SV(in1, in0, in3, in2, temp0, temp1); ++ DUP2_ARG2(__lasx_xvilvl_h, in1, in0, in3, in2, temp0, temp1); + t3 = __lasx_xvreplgr2vr_w(con_64); +- LASX_DP2ADD_W_H(t3, temp0, const_1, t1); +- LASX_DP2ADD_W_H(t3, temp0, const_2, t2); +- LASX_DP2_W_H(temp1, const_3, t3); +- LASX_DP2_W_H(temp1, const_4, t4); ++ DUP2_ARG3(__lasx_xvdp2add_w_h, t3, temp0, const_1, t3, temp0, const_2, t1, t2); ++ DUP2_ARG2(__lasx_xvdp2_w_h, temp1, const_3, temp1, const_4, t3, t4); + + t5 = __lasx_xvadd_w(t1, t3); + t6 = __lasx_xvadd_w(t2, t4); + t7 = __lasx_xvsub_w(t2, t4); + t8 = __lasx_xvsub_w(t1, t3); + +- LASX_ILVH_H_2_128SV(in2, in0, in3, in1, temp0, temp1); +- LASX_DP2_W_H(const_5, temp0, temp2); +- LASX_DP2ADD_W_H(temp2, temp1, const_6, t1); +- LASX_DP2_W_H(const_7, temp0, temp2); +- LASX_DP2ADD_W_H(temp2, temp1, const_8, t2); +- LASX_DP2_W_H(const_9, temp0, temp2); +- LASX_DP2ADD_W_H(temp2, temp1, const_10, t3); +- LASX_DP2_W_H(const_11, temp0, temp2); +- LASX_DP2ADD_W_H(temp2, temp1, const_12, t4); ++ DUP2_ARG2(__lasx_xvilvh_h, in2, in0, in3, in1, temp0, temp1); ++ temp2 = __lasx_xvdp2_w_h(const_5, temp0); ++ t1 = __lasx_xvdp2add_w_h(temp2, temp1, const_6); ++ temp2 = __lasx_xvdp2_w_h(const_7, temp0); ++ t2 = __lasx_xvdp2add_w_h(temp2, temp1, const_8); ++ temp2 = __lasx_xvdp2_w_h(const_9, temp0); ++ t3 = __lasx_xvdp2add_w_h(temp2, temp1, const_10); ++ temp2 = __lasx_xvdp2_w_h(const_11, temp0); ++ t4 = __lasx_xvdp2add_w_h(temp2, temp1, const_12); + + temp0 = __lasx_xvadd_w(t5, t1); + temp1 = __lasx_xvadd_w(t6, t2); +@@ -125,8 +122,9 @@ void ff_vc1_inv_trans_8x8_lasx(int16_t block[64]) + in1 = __lasx_xvaddi_wu(in1, 1); + in2 = __lasx_xvaddi_wu(in2, 1); + in3 = __lasx_xvaddi_wu(in3, 1); +- LASX_SRAI_W_8(temp0, temp1, temp2, temp3, in0, in1, in2, in3, +- temp0, temp1, temp2, temp3, in0, in1, in2, in3, 7); ++ DUP4_ARG2(__lasx_xvsrai_w, temp0, 7, temp1, 7, temp2, 7, temp3, 7, ++ temp0, temp1, temp2, temp3); ++ DUP4_ARG2(__lasx_xvsrai_w, in0, 7, in1, 7, in2, 7, in3, 7, in0, in1, in2, in3); + t1 = __lasx_xvpickev_h(temp1, temp0); + t2 = __lasx_xvpickev_h(temp3, temp2); + t3 = __lasx_xvpickev_h(in1, in0); +@@ -135,7 +133,10 @@ void ff_vc1_inv_trans_8x8_lasx(int16_t block[64]) + in1 = __lasx_xvpermi_d(t2, 0xD8); + in2 = __lasx_xvpermi_d(t3, 0xD8); + in3 = __lasx_xvpermi_d(t4, 0xD8); +- LASX_ST_4(in0, in1, in2, in3, block, 16); ++ __lasx_xvst(in0, block, 0); ++ __lasx_xvst(in1, block, 32); ++ __lasx_xvst(in2, block, 64); ++ __lasx_xvst(in3, block, 96); + } + + void ff_vc1_inv_trans_8x8_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) +@@ -152,9 +153,9 @@ void ff_vc1_inv_trans_8x8_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *bloc + in0 = __lasx_xvldrepl_d(dest, 0); + in1 = __lasx_xvldrepl_d(dst, 0); + in0 = __lasx_xvpermi_q(in1, in0, 0x20); +- LASX_ILVL_B_128SV(zero, in0, temp0); ++ temp0 = __lasx_xvilvl_b(zero, in0); + temp0 = __lasx_xvadd_h(temp0, const_dc); +- LASX_CLIP_H_0_255(temp0, in0); ++ in0 = __lasx_xvclip255_h(temp0); + temp0 = __lasx_xvpickev_b(in0, in0); + __lasx_xvstelm_d(temp0, dest, 0, 0); + __lasx_xvstelm_d(temp0, dst, 0, 2); +@@ -163,9 +164,9 @@ void ff_vc1_inv_trans_8x8_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *bloc + in0 = __lasx_xvldrepl_d(dest, 0); + in1 = __lasx_xvldrepl_d(dst, 0); + in0 = __lasx_xvpermi_q(in1, in0, 0x20); +- LASX_ILVL_B_128SV(zero, in0, temp0); ++ temp0 = __lasx_xvilvl_b(zero, in0); + temp0 = __lasx_xvadd_h(temp0, const_dc); +- LASX_CLIP_H_0_255(temp0, in0); ++ in0 = __lasx_xvclip255_h(temp0); + temp0 = __lasx_xvpickev_b(in0, in0); + __lasx_xvstelm_d(temp0, dest, 0, 0); + __lasx_xvstelm_d(temp0, dst, 0, 2); +@@ -174,9 +175,9 @@ void ff_vc1_inv_trans_8x8_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *bloc + in0 = __lasx_xvldrepl_d(dest, 0); + in1 = __lasx_xvldrepl_d(dst, 0); + in0 = __lasx_xvpermi_q(in1, in0, 0x20); +- LASX_ILVL_B_128SV(zero, in0, temp0); ++ temp0 = __lasx_xvilvl_b(zero, in0); + temp0 = __lasx_xvadd_h(temp0, const_dc); +- LASX_CLIP_H_0_255(temp0, in0); ++ in0 = __lasx_xvclip255_h(temp0); + temp0 = __lasx_xvpickev_b(in0, in0); + __lasx_xvstelm_d(temp0, dest, 0, 0); + __lasx_xvstelm_d(temp0, dst, 0, 2); +@@ -185,9 +186,9 @@ void ff_vc1_inv_trans_8x8_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *bloc + in0 = __lasx_xvldrepl_d(dest, 0); + in1 = __lasx_xvldrepl_d(dst, 0); + in0 = __lasx_xvpermi_q(in1, in0, 0x20); +- LASX_ILVL_B_128SV(zero, in0, temp0); ++ temp0 = __lasx_xvilvl_b(zero, in0); + temp0 = __lasx_xvadd_h(temp0, const_dc); +- LASX_CLIP_H_0_255(temp0, in0); ++ in0 = __lasx_xvclip255_h(temp0); + temp0 = __lasx_xvpickev_b(in0, in0); + __lasx_xvstelm_d(temp0, dest, 0, 0); + __lasx_xvstelm_d(temp0, dst, 0, 2); +@@ -196,6 +197,8 @@ void ff_vc1_inv_trans_8x8_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *bloc + void ff_vc1_inv_trans_8x4_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + { + uint8_t *dst = dest; ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; + __m256i shift = {0x0000000400000000, 0x0000000500000001, 0x0000000600000002, 0x0000000700000003}; + __m256i const_64 = {0x0000004000000040, 0x0000004000000040, 0x0000004000000040, 0x0000004000000040}; + __m256i const_1 = {0x00060010000C000C, 0x00060010000C000C, 0x00060010000C000C, 0x00060010000C000C}; +@@ -212,16 +215,15 @@ void ff_vc1_inv_trans_8x4_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + __m256i in0, in1; + __m256i temp0, temp1, temp2, temp3, t1, t2, t3, t4; + +- LASX_LD_2(block, 16, in0, in1); ++ DUP2_ARG2(__lasx_xvld, block, 0, block, 32, in0, in1); + /* first loops */ + temp0 = __lasx_xvpermi_d(in0, 0xB1); + temp1 = __lasx_xvpermi_d(in1, 0xB1); +- LASX_ILVL_H_2_128SV(temp0, in0, temp1, in1, temp0, temp1); ++ DUP2_ARG2(__lasx_xvilvl_h, temp0, in0, temp1, in1, temp0, temp1); + temp2 = __lasx_xvpickev_w(temp1, temp0); + temp3 = __lasx_xvpickod_w(temp1, temp0); + +- LASX_DP2_W_H(temp2, const_1, temp0); +- LASX_DP2_W_H(temp2, const_2, temp1); ++ DUP2_ARG2(__lasx_xvdp2_w_h, temp2, const_1, temp2, const_2, temp0, temp1); + t1 = __lasx_xvadd_w(temp0, const_7); + t2 = __lasx_xvadd_w(temp1, const_7); + temp0 = __lasx_xvpickev_w(t2, t1); +@@ -230,11 +232,8 @@ void ff_vc1_inv_trans_8x4_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + t4 = __lasx_xvsub_w(temp0, temp1); + t4 = __lasx_xvpermi_d(t4, 0xB1); + +- LASX_DP4_D_H(temp3, const_3, t1); +- LASX_DP4_D_H(temp3, const_4, t2); +- LASX_DP4_D_H(temp3, const_5, temp0); +- LASX_DP4_D_H(temp3, const_6, temp1); +- ++ DUP4_ARG2(__lasx_xvdp4_d_h, temp3, const_3, temp3, const_4, temp3, const_5, temp3, ++ const_6, t1, t2, temp0, temp1); + temp2 = __lasx_xvpickev_w(t2, t1); + temp3 = __lasx_xvpickev_w(temp1, temp0); + +@@ -242,22 +241,21 @@ void ff_vc1_inv_trans_8x4_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + t2 = __lasx_xvadd_w(temp3, t4); + temp0 = __lasx_xvsub_w(t4, temp3); + temp1 = __lasx_xvsub_w(t3, temp2); +- LASX_SRAI_W_4(t1, t2, temp0, temp1, t1, t2, t3, t4, 3); ++ DUP4_ARG2(__lasx_xvsrai_w, t1, 3, t2, 3, temp0, 3, temp1, 3, t1, t2, t3, t4); + /* second loops */ + temp2 = __lasx_xvpickev_h(t2, t1); + temp3 = __lasx_xvpickev_h(t4, t3); + temp3 = __lasx_xvshuf4i_h(temp3, 0x4E); + temp0 = __lasx_xvpermi_q(temp3, temp2, 0x20); + temp1 = __lasx_xvpermi_q(temp3, temp2, 0x31); +- LASX_DP2ADD_W_H(const_64, temp0, const_8, t1); +- LASX_DP2ADD_W_H(const_64, temp0, const_9, t2); +- LASX_DP2_W_H(temp1, const_10, t3); +- LASX_DP2_W_H(temp1, const_11, t4); ++ DUP2_ARG3(__lasx_xvdp2add_w_h, const_64, temp0, const_8, const_64, temp0, ++ const_9, t1, t2); ++ DUP2_ARG2(__lasx_xvdp2_w_h, temp1, const_10, temp1, const_11, t3, t4); + temp0 = __lasx_xvadd_w(t1, t3); + temp1 = __lasx_xvsub_w(t2, t4); + temp2 = __lasx_xvadd_w(t2, t4); + temp3 = __lasx_xvsub_w(t1, t3); +- LASX_SRAI_W_4(temp0, temp1, temp2, temp3, t1, t2, t3, t4, 7); ++ DUP4_ARG2(__lasx_xvsrai_w, temp0, 7, temp1, 7, temp2, 7, temp3, 7, t1, t2, t3, t4); + + temp0 = __lasx_xvldrepl_d(dst, 0); + temp0 = __lasx_vext2xv_wu_bu(temp0); +@@ -274,11 +272,14 @@ void ff_vc1_inv_trans_8x4_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + t2 = __lasx_xvadd_w(temp1, t2); + t3 = __lasx_xvadd_w(temp2, t3); + t4 = __lasx_xvadd_w(temp3, t4); +- LASX_CLIP_W_0_255_4(t1, t2, t3, t4, t1, t2, t3, t4); +- LASX_PCKEV_H_2_128SV(t2, t1, t4, t3, temp0, temp1); ++ DUP4_ARG1(__lasx_xvclip255_w, t1, t2, t3, t4, t1, t2, t3, t4); ++ DUP2_ARG2(__lasx_xvpickev_h, t2, t1, t4, t3, temp0, temp1); + temp2 = __lasx_xvpickev_b(temp1, temp0); + temp0 = __lasx_xvperm_w(temp2, shift); +- LASX_ST_D_4(temp0, 0, 1, 2, 3, dest, stride); ++ __lasx_xvstelm_d(temp0, dest, 0, 0); ++ __lasx_xvstelm_d(temp0, dest + stride, 0, 1); ++ __lasx_xvstelm_d(temp0, dest + stride_2x, 0, 2); ++ __lasx_xvstelm_d(temp0, dest + stride_3x, 0, 3); + } + + void ff_vc1_inv_trans_8x4_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) +@@ -295,9 +296,9 @@ void ff_vc1_inv_trans_8x4_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *bloc + in0 = __lasx_xvldrepl_d(dest, 0); + in1 = __lasx_xvldrepl_d(dst, 0); + in0 = __lasx_xvpermi_q(in1, in0, 0x20); +- LASX_ILVL_B_128SV(zero, in0, temp0); ++ temp0 = __lasx_xvilvl_b(zero, in0); + temp0 = __lasx_xvadd_h(temp0, const_dc); +- LASX_CLIP_H_0_255(temp0, in0); ++ in0 = __lasx_xvclip255_h(temp0); + temp0 = __lasx_xvpickev_b(in0, in0); + __lasx_xvstelm_d(temp0, dest, 0, 0); + __lasx_xvstelm_d(temp0, dst, 0, 2); +@@ -306,9 +307,9 @@ void ff_vc1_inv_trans_8x4_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *bloc + in0 = __lasx_xvldrepl_d(dest, 0); + in1 = __lasx_xvldrepl_d(dst, 0); + in0 = __lasx_xvpermi_q(in1, in0, 0x20); +- LASX_ILVL_B_128SV(zero, in0, temp0); ++ temp0 = __lasx_xvilvl_b(zero, in0); + temp0 = __lasx_xvadd_h(temp0, const_dc); +- LASX_CLIP_H_0_255(temp0, in0); ++ in0 = __lasx_xvclip255_h(temp0); + temp0 = __lasx_xvpickev_b(in0, in0); + __lasx_xvstelm_d(temp0, dest, 0, 0); + __lasx_xvstelm_d(temp0, dst, 0, 2); +@@ -331,11 +332,11 @@ void ff_vc1_inv_trans_4x8_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *bloc + in1 = __lasx_xvldrepl_w(dst1, 0); + in2 = __lasx_xvldrepl_w(dst2, 0); + in3 = __lasx_xvldrepl_w(dst3, 0); +- LASX_ILVL_W_2_128SV(in1, in0, in3, in2, temp0, temp1); ++ DUP2_ARG2(__lasx_xvilvl_w, in1, in0, in3, in2, temp0, temp1); + in0 = __lasx_xvpermi_q(temp1, temp0, 0x20); +- LASX_ILVL_B_128SV(zero, in0, temp0); ++ temp0 = __lasx_xvilvl_b(zero, in0); + temp0 = __lasx_xvadd_h(temp0, const_dc); +- LASX_CLIP_H_0_255(temp0, in0); ++ in0 = __lasx_xvclip255_h(temp0); + temp0 = __lasx_xvpickev_b(in0, in0); + __lasx_xvstelm_w(temp0, dest, 0, 0); + __lasx_xvstelm_w(temp0, dst1, 0, 1); +@@ -351,11 +352,11 @@ void ff_vc1_inv_trans_4x8_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *bloc + in1 = __lasx_xvldrepl_w(dst1, 0); + in2 = __lasx_xvldrepl_w(dst2, 0); + in3 = __lasx_xvldrepl_w(dst3, 0); +- LASX_ILVL_W_2_128SV(in1, in0, in3, in2, temp0, temp1); ++ DUP2_ARG2(__lasx_xvilvl_w, in1, in0, in3, in2, temp0, temp1); + in0 = __lasx_xvpermi_q(temp1, temp0, 0x20); +- LASX_ILVL_B_128SV(zero, in0, temp0); ++ temp0 = __lasx_xvilvl_b(zero, in0); + temp0 = __lasx_xvadd_h(temp0, const_dc); +- LASX_CLIP_H_0_255(temp0, in0); ++ in0 = __lasx_xvclip255_h(temp0); + temp0 = __lasx_xvpickev_b(in0, in0); + __lasx_xvstelm_w(temp0, dest, 0, 0); + __lasx_xvstelm_w(temp0, dst1, 0, 1); +@@ -367,6 +368,9 @@ void ff_vc1_inv_trans_4x8_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *bloc + void ff_vc1_inv_trans_4x8_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + { + uint8_t *dst = dest; ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_4x = stride << 2; ++ ptrdiff_t stride_3x = stride_2x + stride; + __m256i in0, in1, in2, in3; + __m256i temp0, temp1, temp2, temp3, t1, t2, t3, t4; + +@@ -385,7 +389,7 @@ void ff_vc1_inv_trans_4x8_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + __m256i shift = {0x0000000400000000, 0x0000000600000002, 0x0000000500000001, 0x0000000700000003}; + + /* first loops */ +- LASX_LD_4(block, 16, in0, in1, in2, in3); ++ DUP4_ARG2(__lasx_xvld, block, 0, block, 32, block, 64, block, 96, in0, in1, in2, in3); + in0 = __lasx_xvilvl_d(in1, in0); + in1 = __lasx_xvilvl_d(in3, in2); + temp0 = __lasx_xvpickev_h(in1, in0); +@@ -393,16 +397,16 @@ void ff_vc1_inv_trans_4x8_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + temp0 = __lasx_xvperm_w(temp0, shift); + temp1 = __lasx_xvperm_w(temp1, shift); + +- LASX_DP2ADD_W_H(const_5, temp0, const_1, t1); +- LASX_DP2ADD_W_H(const_5, temp0, const_2, t2); +- LASX_DP2_W_H(temp1, const_3, t3); +- LASX_DP2_W_H(temp1, const_4, t4); ++ DUP2_ARG3(__lasx_xvdp2add_w_h, const_5, temp0, const_1, const_5, temp0, ++ const_2, t1, t2); ++ DUP2_ARG2(__lasx_xvdp2_w_h, temp1, const_3, temp1, const_4, t3, t4); + + temp0 = __lasx_xvadd_w(t1, t3); + temp1 = __lasx_xvsub_w(t2, t4); + temp2 = __lasx_xvadd_w(t2, t4); + temp3 = __lasx_xvsub_w(t1, t3); +- LASX_SRAI_W_4(temp0, temp1, temp2, temp3, temp0, temp1, temp2, temp3, 3); ++ DUP4_ARG2(__lasx_xvsrai_w, temp0, 3, temp1, 3, temp2, 3, temp3, 3, ++ temp0, temp1, temp2, temp3); + + /* second loops */ + t1 = __lasx_xvpickev_w(temp1, temp0); +@@ -413,16 +417,14 @@ void ff_vc1_inv_trans_4x8_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + temp1 = __lasx_xvpickev_h(t4, t3); + temp2 = __lasx_xvpermi_q(t1, t1, 0x00); + temp3 = __lasx_xvpermi_q(t1, t1, 0x11); +- LASX_DP2ADD_W_H(const_6, temp2, const_7, t1); +- LASX_DP2_W_H(temp3, const_8, t2); ++ t1 = __lasx_xvdp2add_w_h(const_6, temp2, const_7); ++ t2 = __lasx_xvdp2_w_h(temp3, const_8); + t3 = __lasx_xvadd_w(t1, t2); + t4 = __lasx_xvsub_w(t1, t2); + t4 = __lasx_xvpermi_d(t4, 0x4E); + +- LASX_DP2_W_H(temp1, const_9, t1); +- LASX_DP2_W_H(temp1, const_10, t2); +- LASX_DP2_W_H(temp1, const_11, temp2); +- LASX_DP2_W_H(temp1, const_12, temp3); ++ DUP4_ARG2(__lasx_xvdp2_w_h, temp1, const_9, temp1, const_10, temp1, const_11, ++ temp1, const_12, t1, t2, temp2, temp3); + + temp0 = __lasx_xvpermi_q(t2, t1, 0x20); + temp1 = __lasx_xvpermi_q(t2, t1, 0x31); +@@ -436,7 +438,8 @@ void ff_vc1_inv_trans_4x8_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + temp3 = __lasx_xvsub_w(t3, t1); + temp2 = __lasx_xvaddi_wu(temp2, 1); + temp3 = __lasx_xvaddi_wu(temp3, 1); +- LASX_SRAI_W_4(temp0, temp1, temp2, temp3, temp0, temp1, temp2, temp3, 7); ++ DUP4_ARG2(__lasx_xvsrai_w, temp0, 7, temp1, 7, temp2, 7, temp3, 7, ++ temp0, temp1, temp2, temp3); + + const_1 = __lasx_xvldrepl_w(dst, 0); + dst += stride; +@@ -454,8 +457,8 @@ void ff_vc1_inv_trans_4x8_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + dst += stride; + const_8 = __lasx_xvldrepl_w(dst, 0); + +- LASX_ILVL_W_4_128SV(const_2, const_1, const_4, const_3, const_5, const_6, +- const_7, const_8, const_1, const_2, const_3, const_4); ++ DUP4_ARG2(__lasx_xvilvl_w, const_2, const_1, const_4, const_3, const_5, const_6, ++ const_7, const_8, const_1, const_2, const_3, const_4); + const_1 = __lasx_vext2xv_wu_bu(const_1); + const_2 = __lasx_vext2xv_wu_bu(const_2); + const_3 = __lasx_vext2xv_wu_bu(const_3); +@@ -465,10 +468,18 @@ void ff_vc1_inv_trans_4x8_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + temp1 = __lasx_xvadd_w(temp1, const_2); + temp2 = __lasx_xvadd_w(temp2, const_3); + temp3 = __lasx_xvadd_w(temp3, const_4); +- LASX_CLIP_W_0_255_4(temp0, temp1, temp2, temp3, temp0, temp1, temp2, temp3); +- LASX_PCKEV_H_2_128SV(temp1, temp0, temp3, temp2, temp0, temp1); ++ DUP4_ARG1(__lasx_xvclip255_w, temp0, temp1, temp2, temp3, temp0, temp1, temp2, temp3); ++ DUP2_ARG2(__lasx_xvpickev_h, temp1, temp0, temp3, temp2, temp0, temp1); + temp0 = __lasx_xvpickev_b(temp1, temp0); +- LASX_ST_W_8(temp0, 0, 4, 1, 5, 6, 2, 7, 3, dest, stride); ++ __lasx_xvstelm_w(temp0, dest, 0, 0); ++ __lasx_xvstelm_w(temp0, dest + stride, 0, 4); ++ __lasx_xvstelm_w(temp0, dest + stride_2x, 0, 1); ++ __lasx_xvstelm_w(temp0, dest + stride_3x, 0, 5); ++ dest += stride_4x; ++ __lasx_xvstelm_w(temp0, dest, 0, 6); ++ __lasx_xvstelm_w(temp0, dest + stride, 0, 2); ++ __lasx_xvstelm_w(temp0, dest + stride_2x, 0, 7); ++ __lasx_xvstelm_w(temp0, dest + stride_3x, 0, 3); + } + + void ff_vc1_inv_trans_4x4_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) +@@ -488,11 +499,11 @@ void ff_vc1_inv_trans_4x4_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *bloc + in1 = __lasx_xvldrepl_w(dst1, 0); + in2 = __lasx_xvldrepl_w(dst2, 0); + in3 = __lasx_xvldrepl_w(dst3, 0); +- LASX_ILVL_W_2_128SV(in1, in0, in3, in2, temp0, temp1); ++ DUP2_ARG2(__lasx_xvilvl_w, in1, in0, in3, in2, temp0, temp1); + in0 = __lasx_xvpermi_q(temp1, temp0, 0x20); +- LASX_ILVL_B_128SV(zero, in0, temp0); ++ temp0 = __lasx_xvilvl_b(zero, in0); + temp0 = __lasx_xvadd_h(temp0, const_dc); +- LASX_CLIP_H_0_255(temp0, in0); ++ in0 = __lasx_xvclip255_h(temp0); + temp0 = __lasx_xvpickev_b(in0, in0); + __lasx_xvstelm_w(temp0, dest, 0, 0); + __lasx_xvstelm_w(temp0, dst1, 0, 1); +@@ -503,6 +514,8 @@ void ff_vc1_inv_trans_4x4_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *bloc + void ff_vc1_inv_trans_4x4_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + { + uint8_t *dst = dest + stride; ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; + __m256i in0, in1, in2, in3; + __m256i temp0, temp1, temp2, temp3, t1, t2; + +@@ -510,28 +523,27 @@ void ff_vc1_inv_trans_4x4_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + __m256i const_2 = {0x000A0016000A0016, 0x0016FFF60016FFF6, 0x000A0016000A0016, 0x0016FFF60016FFF6}; + __m256i const_64 = {0x0000004000000040, 0x0000004000000040, 0x0000004000000040, 0x0000004000000040}; + +- LASX_LD_2(block, 16, in0, in1); ++ DUP2_ARG2(__lasx_xvld, block, 0, block, 32, in0, in1); + /* first loops */ + temp0 = __lasx_xvilvl_d(in1, in0); + temp1 = __lasx_xvpickev_h(temp0, temp0); + temp2 = __lasx_xvpickod_h(temp0, temp0); +- LASX_DP2_W_H(temp1, const_1, t1); +- LASX_DP2_W_H(temp2, const_2, t2); ++ DUP2_ARG2(__lasx_xvdp2_w_h, temp1, const_1, temp2, const_2, t1, t2); + t1 = __lasx_xvaddi_wu(t1, 4); + in0 = __lasx_xvadd_w(t1, t2); + in1 = __lasx_xvsub_w(t1, t2); +- LASX_SRAI_W_2(in0, in1, in0, in1, 3); ++ DUP2_ARG2(__lasx_xvsrai_w, in0, 3, in1, 3, in0, in1); + /* second loops */ + temp0 = __lasx_xvpickev_h(in1, in0); + temp1 = __lasx_xvpermi_q(temp0, temp0, 0x00); + temp2 = __lasx_xvpermi_q(temp0, temp0, 0x11); + const_1 = __lasx_xvpermi_d(const_1, 0xD8); + const_2 = __lasx_xvpermi_d(const_2, 0xD8); +- LASX_DP2ADD_W_H(const_64, temp1, const_1, t1); +- LASX_DP2_W_H(temp2, const_2, t2); ++ t1 = __lasx_xvdp2add_w_h(const_64, temp1, const_1); ++ t2 = __lasx_xvdp2_w_h(temp2, const_2); + in0 = __lasx_xvadd_w(t1, t2); + in1 = __lasx_xvsub_w(t1, t2); +- LASX_SRAI_W_2(in0, in1, in0, in1, 7); ++ DUP2_ARG2(__lasx_xvsrai_w, in0, 7, in1, 7, in0, in1); + temp0 = __lasx_xvshuf4i_w(in0, 0x9C); + temp1 = __lasx_xvshuf4i_w(in1, 0x9C); + +@@ -547,10 +559,13 @@ void ff_vc1_inv_trans_4x4_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + temp3 = __lasx_vext2xv_wu_bu(temp3); + temp0 = __lasx_xvadd_w(temp0, temp2); + temp1 = __lasx_xvadd_w(temp1, temp3); +- LASX_CLIP_W_0_255_2(temp0, temp1, temp0, temp1); ++ DUP2_ARG1(__lasx_xvclip255_w, temp0, temp1, temp0, temp1); + temp1 = __lasx_xvpickev_h(temp1, temp0); + temp0 = __lasx_xvpickev_b(temp1, temp1); +- LASX_ST_W_4(temp0, 0, 5, 4, 1, dest, stride); ++ __lasx_xvstelm_w(temp0, dest, 0, 0); ++ __lasx_xvstelm_w(temp0, dest + stride, 0, 5); ++ __lasx_xvstelm_w(temp0, dest + stride_2x, 0, 4); ++ __lasx_xvstelm_w(temp0, dest + stride_3x, 0, 1); + } + + static void put_vc1_mspel_mc_h_v_lasx(uint8_t *dst, const uint8_t *src, +@@ -569,65 +584,70 @@ static void put_vc1_mspel_mc_h_v_lasx(uint8_t *dst, const uint8_t *src, + int shift = (shift_value[hmode] + shift_value[vmode]) >> 1; + int r = (1 << (shift - 1)) + rnd - 1; + const uint8_t *para_v = para_value[vmode - 1]; ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_4x = stride << 2; ++ ptrdiff_t stride_3x = stride_2x + stride; + + const_r = __lasx_xvreplgr2vr_h(r); + const_sh = __lasx_xvreplgr2vr_h(shift); + src -= 1, src -= stride; + const_para0_3 = __lasx_xvldrepl_h(para_v, 0); + const_para1_2 = __lasx_xvldrepl_h(para_v, 2); +- LASX_LD_4(src, stride, in0, in1, in2, in3); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + stride, 0, src + stride_2x, 0, src + stride_3x, ++ 0, in0, in1, in2, in3); + in0 = __lasx_xvpermi_d(in0, 0xD8); + in1 = __lasx_xvpermi_d(in1, 0xD8); + in2 = __lasx_xvpermi_d(in2, 0xD8); + in3 = __lasx_xvpermi_d(in3, 0xD8); +- LASX_ILVL_B_2_128SV(in2, in1, in3, in0, temp0, temp1); +- LASX_DP2_H_BU(temp0, const_para1_2, t0); +- LASX_DP2SUB_H_BU(t0, temp1, const_para0_3, t0); ++ DUP2_ARG2(__lasx_xvilvl_b, in2, in1, in3, in0, temp0, temp1); ++ t0 = __lasx_xvdp2_h_bu(temp0, const_para1_2); ++ t0 = __lasx_xvdp2sub_h_bu(t0, temp1, const_para0_3); + src += (stride << 2); +- in0 = LASX_LD(src); ++ in0 = __lasx_xvld(src, 0); + in0 = __lasx_xvpermi_d(in0, 0xD8); +- LASX_ILVL_B_2_128SV(in3, in2, in0, in1, temp0, temp1); +- LASX_DP2_H_BU(temp0, const_para1_2, t1); +- LASX_DP2SUB_H_BU(t1, temp1, const_para0_3, t1); ++ DUP2_ARG2(__lasx_xvilvl_b, in3, in2, in0, in1, temp0, temp1); ++ t1 = __lasx_xvdp2_h_bu(temp0, const_para1_2); ++ t1 = __lasx_xvdp2sub_h_bu(t1, temp1, const_para0_3); + src += stride; +- in1 = LASX_LD(src); ++ in1 = __lasx_xvld(src, 0); + in1 = __lasx_xvpermi_d(in1, 0xD8); +- LASX_ILVL_B_2_128SV(in0, in3, in1, in2, temp0, temp1); +- LASX_DP2_H_BU(temp0, const_para1_2, t2); +- LASX_DP2SUB_H_BU(t2, temp1, const_para0_3, t2); ++ DUP2_ARG2(__lasx_xvilvl_b, in0, in3, in1, in2, temp0, temp1); ++ t2 = __lasx_xvdp2_h_bu(temp0, const_para1_2); ++ t2 = __lasx_xvdp2sub_h_bu(t2, temp1, const_para0_3); + src += stride; +- in2 = LASX_LD(src); ++ in2 = __lasx_xvld(src, 0); + in2 = __lasx_xvpermi_d(in2, 0xD8); +- LASX_ILVL_B_2_128SV(in1, in0, in2, in3, temp0, temp1); +- LASX_DP2_H_BU(temp0, const_para1_2, t3); +- LASX_DP2SUB_H_BU(t3, temp1, const_para0_3, t3); ++ DUP2_ARG2(__lasx_xvilvl_b, in1, in0, in2, in3, temp0, temp1); ++ t3 = __lasx_xvdp2_h_bu(temp0, const_para1_2); ++ t3 = __lasx_xvdp2sub_h_bu(t3, temp1, const_para0_3); + src += stride; +- in3 = LASX_LD(src); ++ in3 = __lasx_xvld(src, 0); + in3 = __lasx_xvpermi_d(in3, 0xD8); +- LASX_ILVL_B_2_128SV(in2, in1, in3, in0, temp0, temp1); +- LASX_DP2_H_BU(temp0, const_para1_2, t4); +- LASX_DP2SUB_H_BU(t4, temp1, const_para0_3, t4); ++ DUP2_ARG2(__lasx_xvilvl_b, in2, in1, in3, in0, temp0, temp1); ++ t4 = __lasx_xvdp2_h_bu(temp0, const_para1_2); ++ t4 = __lasx_xvdp2sub_h_bu(t4, temp1, const_para0_3); + src += stride; +- in0 = LASX_LD(src); ++ in0 = __lasx_xvld(src, 0); + in0 = __lasx_xvpermi_d(in0, 0xD8); +- LASX_ILVL_B_2_128SV(in3, in2, in0, in1, temp0, temp1); +- LASX_DP2_H_BU(temp0, const_para1_2, t5); +- LASX_DP2SUB_H_BU(t5, temp1, const_para0_3, t5); ++ DUP2_ARG2(__lasx_xvilvl_b, in3, in2, in0, in1, temp0, temp1); ++ t5 = __lasx_xvdp2_h_bu(temp0, const_para1_2); ++ t5 = __lasx_xvdp2sub_h_bu(t5, temp1, const_para0_3); + src += stride; +- in1 = LASX_LD(src); ++ in1 = __lasx_xvld(src, 0); + in1 = __lasx_xvpermi_d(in1, 0xD8); +- LASX_ILVL_B_2_128SV(in0, in3, in1, in2, temp0, temp1); +- LASX_DP2_H_BU(temp0, const_para1_2, t6); +- LASX_DP2SUB_H_BU(t6, temp1, const_para0_3, t6); ++ DUP2_ARG2(__lasx_xvilvl_b, in0, in3, in1, in2, temp0, temp1); ++ t6 = __lasx_xvdp2_h_bu(temp0, const_para1_2); ++ t6 = __lasx_xvdp2sub_h_bu(t6, temp1, const_para0_3); + src += stride; +- in2 = LASX_LD(src); ++ in2 = __lasx_xvld(src, 0); + in2 = __lasx_xvpermi_d(in2, 0xD8); +- LASX_ILVL_B_2_128SV(in1, in0, in2, in3, temp0, temp1); +- LASX_DP2_H_BU(temp0, const_para1_2, t7); +- LASX_DP2SUB_H_BU(t7, temp1, const_para0_3, t7); +- LASX_ADD_H_8(t0, const_r, t1, const_r, t2, const_r, t3, const_r, +- t4, const_r, t5, const_r, t6, const_r, t7, const_r, +- t0, t1, t2, t3, t4, t5, t6, t7); ++ DUP2_ARG2(__lasx_xvilvl_b, in1, in0, in2, in3, temp0, temp1); ++ t7 = __lasx_xvdp2_h_bu(temp0, const_para1_2); ++ t7 = __lasx_xvdp2sub_h_bu(t7, temp1, const_para0_3); ++ DUP4_ARG2(__lasx_xvadd_h, t0, const_r, t1, const_r, t2, const_r, t3, const_r, ++ t0, t1, t2, t3); ++ DUP4_ARG2(__lasx_xvadd_h, t4, const_r, t5, const_r, t6, const_r, t7, const_r, ++ t4, t5, t6, t7); + t0 = __lasx_xvsra_h(t0, const_sh); + t1 = __lasx_xvsra_h(t1, const_sh); + t2 = __lasx_xvsra_h(t2, const_sh); +@@ -636,8 +656,7 @@ static void put_vc1_mspel_mc_h_v_lasx(uint8_t *dst, const uint8_t *src, + t5 = __lasx_xvsra_h(t5, const_sh); + t6 = __lasx_xvsra_h(t6, const_sh); + t7 = __lasx_xvsra_h(t7, const_sh); +- LASX_TRANSPOSE8x8_H_128SV(t0, t1, t2, t3, t4, t5, t6, t7, +- t0, t1, t2, t3, t4, t5, t6, t7); ++ LASX_TRANSPOSE8x8_H(t0, t1, t2, t3, t4, t5, t6, t7, t0, t1, t2, t3, t4, t5, t6, t7); + para_v = para_value[hmode - 1]; + const_para0_3 = __lasx_xvldrepl_h(para_v, 0); + const_para1_2 = __lasx_xvldrepl_h(para_v, 2); +@@ -656,30 +675,30 @@ static void put_vc1_mspel_mc_h_v_lasx(uint8_t *dst, const uint8_t *src, + t5 = __lasx_xvpermi_d(t5, 0xD8); + t6 = __lasx_xvpermi_d(t6, 0xD8); + t7 = __lasx_xvpermi_d(t7, 0xD8); +- LASX_ILVL_H_2_128SV(t2, t1, t3, t0, temp0, temp1); +- LASX_DP2_W_H(temp0, const_para1_2, t0); +- LASX_DP2SUB_W_H(t0, temp1, const_para0_3, t0); +- LASX_ILVL_H_2_128SV(t3, t2, t4, t1, temp0, temp1); +- LASX_DP2_W_H(temp0, const_para1_2, t1); +- LASX_DP2SUB_W_H(t1, temp1, const_para0_3, t1); +- LASX_ILVL_H_2_128SV(t4, t3, t5, t2, temp0, temp1); +- LASX_DP2_W_H(temp0, const_para1_2, t2); +- LASX_DP2SUB_W_H(t2, temp1, const_para0_3, t2); +- LASX_ILVL_H_2_128SV(t5, t4, t6, t3, temp0, temp1); +- LASX_DP2_W_H(temp0, const_para1_2, t3); +- LASX_DP2SUB_W_H(t3, temp1, const_para0_3, t3); +- LASX_ILVL_H_2_128SV(t6, t5, t7, t4, temp0, temp1); +- LASX_DP2_W_H(temp0, const_para1_2, t4); +- LASX_DP2SUB_W_H(t4, temp1, const_para0_3, t4); +- LASX_ILVL_H_2_128SV(t7, t6, in0, t5, temp0, temp1); +- LASX_DP2_W_H(temp0, const_para1_2, t5); +- LASX_DP2SUB_W_H(t5, temp1, const_para0_3, t5); +- LASX_ILVL_H_2_128SV(in0, t7, in1, t6, temp0, temp1); +- LASX_DP2_W_H(temp0, const_para1_2, t6); +- LASX_DP2SUB_W_H(t6, temp1, const_para0_3, t6); +- LASX_ILVL_H_2_128SV(in1, in0, in2, t7, temp0, temp1); +- LASX_DP2_W_H(temp0, const_para1_2, t7); +- LASX_DP2SUB_W_H(t7, temp1, const_para0_3, t7); ++ DUP2_ARG2(__lasx_xvilvl_h, t2, t1, t3, t0, temp0, temp1); ++ t0 = __lasx_xvdp2_w_h(temp0, const_para1_2); ++ t0 = __lasx_xvdp2sub_w_h(t0, temp1, const_para0_3); ++ DUP2_ARG2(__lasx_xvilvl_h, t3, t2, t4, t1, temp0, temp1); ++ t1 = __lasx_xvdp2_w_h(temp0, const_para1_2); ++ t1 = __lasx_xvdp2sub_w_h(t1, temp1, const_para0_3); ++ DUP2_ARG2(__lasx_xvilvl_h, t4, t3, t5, t2, temp0, temp1); ++ t2 = __lasx_xvdp2_w_h(temp0, const_para1_2); ++ t2 = __lasx_xvdp2sub_w_h(t2, temp1, const_para0_3); ++ DUP2_ARG2(__lasx_xvilvl_h, t5, t4, t6, t3, temp0, temp1); ++ t3 = __lasx_xvdp2_w_h(temp0, const_para1_2); ++ t3 = __lasx_xvdp2sub_w_h(t3, temp1, const_para0_3); ++ DUP2_ARG2(__lasx_xvilvl_h, t6, t5, t7, t4, temp0, temp1); ++ t4 = __lasx_xvdp2_w_h(temp0, const_para1_2); ++ t4 = __lasx_xvdp2sub_w_h(t4, temp1, const_para0_3); ++ DUP2_ARG2(__lasx_xvilvl_h, t7, t6, in0, t5, temp0, temp1); ++ t5 = __lasx_xvdp2_w_h(temp0, const_para1_2); ++ t5 = __lasx_xvdp2sub_w_h(t5, temp1, const_para0_3); ++ DUP2_ARG2(__lasx_xvilvl_h, in0, t7, in1, t6, temp0, temp1); ++ t6 = __lasx_xvdp2_w_h(temp0, const_para1_2); ++ t6 = __lasx_xvdp2sub_w_h(t6, temp1, const_para0_3); ++ DUP2_ARG2(__lasx_xvilvl_h, in1, in0, in2, t7, temp0, temp1); ++ t7 = __lasx_xvdp2_w_h(temp0, const_para1_2); ++ t7 = __lasx_xvdp2sub_w_h(t7, temp1, const_para0_3); + t0 = __lasx_xvadd_w(t0, const_r); + t1 = __lasx_xvadd_w(t1, const_r); + t2 = __lasx_xvadd_w(t2, const_r); +@@ -688,20 +707,25 @@ static void put_vc1_mspel_mc_h_v_lasx(uint8_t *dst, const uint8_t *src, + t5 = __lasx_xvadd_w(t5, const_r); + t6 = __lasx_xvadd_w(t6, const_r); + t7 = __lasx_xvadd_w(t7, const_r); +- LASX_SRAI_W_8(t0, t1, t2, t3, t4, t5, t6, t7, +- t0, t1, t2, t3, t4, t5, t6, t7, 7); ++ DUP4_ARG2(__lasx_xvsrai_w, t0, 7, t1, 7, t2, 7, t3, 7, t0, t1, t2, t3); ++ DUP4_ARG2(__lasx_xvsrai_w, t4, 7, t5, 7, t6, 7, t7, 7, t4, t5, t6, t7); + LASX_TRANSPOSE8x8_W(t0, t1, t2, t3, t4, t5, t6, t7, + t0, t1, t2, t3, t4, t5, t6, t7); +- LASX_CLIP_W_0_255_4(t0, t1, t2, t3, t0, t1, t2, t3); +- LASX_CLIP_W_0_255_4(t4, t5, t6, t7, t4, t5, t6, t7); +- LASX_PCKEV_H_4_128SV(t1, t0, t3, t2, t5, t4, t7, t6, +- t0, t1, t2, t3); +- LASX_PCKEV_B_2_128SV(t1, t0, t3, t2, t0, t1); ++ DUP4_ARG1(__lasx_xvclip255_w, t0, t1, t2, t3, t0, t1, t2, t3); ++ DUP4_ARG1(__lasx_xvclip255_w, t4, t5, t6, t7, t4, t5, t6, t7); ++ DUP4_ARG2(__lasx_xvpickev_h, t1, t0, t3, t2, t5, t4, t7, t6, t0, t1, t2, t3); ++ DUP2_ARG2(__lasx_xvpickev_b, t1, t0, t3, t2, t0, t1); + t0 = __lasx_xvperm_w(t0, sh); + t1 = __lasx_xvperm_w(t1, sh); +- LASX_ST_D_4(t0, 0, 1, 2, 3, dst, stride); +- dst += (stride << 2); +- LASX_ST_D_4(t1, 0, 1, 2, 3, dst, stride); ++ __lasx_xvstelm_d(t0, dst, 0, 0); ++ __lasx_xvstelm_d(t0, dst + stride, 0, 1); ++ __lasx_xvstelm_d(t0, dst + stride_2x, 0, 2); ++ __lasx_xvstelm_d(t0, dst + stride_3x, 0, 3); ++ dst += stride_4x; ++ __lasx_xvstelm_d(t1, dst, 0, 0); ++ __lasx_xvstelm_d(t1, dst + stride, 0, 1); ++ __lasx_xvstelm_d(t1, dst + stride_2x, 0, 2); ++ __lasx_xvstelm_d(t1, dst + stride_3x, 0, 3); + } + + #define PUT_VC1_MSPEL_MC_LASX(hmode, vmode) \ +@@ -753,12 +777,12 @@ void ff_put_no_rnd_vc1_chroma_mc8_lasx(uint8_t *dst /* align 8 */, + C = __lasx_xvreplgr2vr_h(intC); + D = __lasx_xvreplgr2vr_h(intD); + for(i = 0; i < h; i++){ +- LASX_LD_2(src, 1, src00, src01); ++ DUP2_ARG2(__lasx_xvld, src, 0, src, 1, src00, src01); + src += stride; +- LASX_LD_2(src, 1, src10, src11); ++ DUP2_ARG2(__lasx_xvld, src, 0, src, 1, src10, src11); + +- LASX_UNPCK_L_HU_BU_4(src00, src01, src10, src11, +- src00, src01, src10, src11); ++ DUP4_ARG1(__lasx_vext2xv_hu_bu, src00, src01, src10, src11, ++ src00, src01, src10, src11); + src00 = __lasx_xvmul_h(src00, A); + src01 = __lasx_xvmul_h(src01, B); + src10 = __lasx_xvmul_h(src10, C); +@@ -768,8 +792,8 @@ void ff_put_no_rnd_vc1_chroma_mc8_lasx(uint8_t *dst /* align 8 */, + src00 = __lasx_xvadd_h(src00, src10); + src00 = __lasx_xvaddi_hu(src00, 28); + src00 = __lasx_xvsrli_h(src00, 6); +- LASX_PCKEV_B_128SV(src00, src00, src00); +- LASX_ST_D(src00, 0, dst); ++ src00 = __lasx_xvpickev_b(src00, src00); ++ __lasx_xvstelm_d(src00, dst, 0, 0); + dst += stride; + } + } +@@ -794,22 +818,23 @@ static void put_vc1_mspel_mc_v_lasx(uint8_t *dst, const uint8_t *src, + const_para0_3 = __lasx_xvreplgr2vr_h(*para_v); + const_para1_2 = __lasx_xvreplgr2vr_h(*(para_v + 1)); + +- LASX_LD_2((src - stride), stride, in0, in1); +- in2 = LASX_LD(src + stride); ++ DUP2_ARG2(__lasx_xvld, src - stride, 0, src, 0, in0, in1); ++ in2 = __lasx_xvld(src + stride, 0); + in0 = __lasx_xvpermi_d(in0, 0xD8); + in1 = __lasx_xvpermi_d(in1, 0xD8); + in2 = __lasx_xvpermi_d(in2, 0xD8); + for (; i < 16; i++) { +- in3 = LASX_LD(src + stride_2x); ++ in3 = __lasx_xvld(src + stride_2x, 0); + in3 = __lasx_xvpermi_d(in3, 0xD8); +- LASX_ILVL_B_2_128SV(in2, in1, in3, in0, temp0, temp1); +- LASX_DP2_H_BU(temp0, const_para1_2, t0); +- LASX_DP2SUB_H_BU(t0, temp1, const_para0_3, t0); +- LASX_ADD_H(t0, const_r, t0); ++ DUP2_ARG2(__lasx_xvilvl_b, in2, in1, in3, in0, temp0, temp1); ++ t0 = __lasx_xvdp2_h_bu(temp0, const_para1_2); ++ t0 = __lasx_xvdp2sub_h_bu(t0, temp1, const_para0_3); ++ t0 = __lasx_xvadd_h(t0, const_r); + t0 = __lasx_xvsra_h(t0, const_sh); +- LASX_CLIP_H_0_255(t0, t0); +- LASX_PCKEV_B_128SV(t0, t0, t0); +- LASX_ST_D_2(t0, 0, 2, dst, 8); ++ t0 = __lasx_xvclip255_h(t0); ++ t0 = __lasx_xvpickev_b(t0, t0); ++ __lasx_xvstelm_d(t0, dst, 0, 0); ++ __lasx_xvstelm_d(t0, dst, 8, 2); + dst += stride; + src += stride; + in0 = in1; +@@ -830,14 +855,15 @@ PUT_VC1_MSPEL_MC_V_LASX(1); + PUT_VC1_MSPEL_MC_V_LASX(2); + PUT_VC1_MSPEL_MC_V_LASX(3); + +-#define ROW_LASX(in0, in1, in2, in3, out0) \ +- LASX_ILVL_B_2_128SV(in2, in1, in3, in0, tmp0_m, tmp1_m); \ +- LASX_DP2_H_BU(tmp0_m, const_para1_2, out0); \ +- LASX_DP2SUB_H_BU(out0, tmp1_m, const_para0_3, out0); \ +- LASX_ADD_H(out0, const_r, out0); \ +- out0 = __lasx_xvsra_h(out0, const_sh); \ +- LASX_CLIP_H_0_255(out0, out0); \ +- LASX_PCKEV_B(out0, out0, out0); ++#define ROW_LASX(in0, in1, in2, in3, out0) \ ++ DUP2_ARG2(__lasx_xvilvl_b, in2, in1, in3, in0, tmp0_m, tmp1_m); \ ++ out0 = __lasx_xvdp2_h_bu(tmp0_m, const_para1_2); \ ++ out0 = __lasx_xvdp2sub_h_bu(out0, tmp1_m, const_para0_3); \ ++ out0 = __lasx_xvadd_h(out0, const_r); \ ++ out0 = __lasx_xvsra_h(out0, const_sh); \ ++ out0 = __lasx_xvclip255_h(out0); \ ++ out0 = __lasx_xvpickev_b(out0, out0); \ ++ out0 = __lasx_xvpermi_d(out0, 0xd8); \ + + static void put_vc1_mspel_mc_h_lasx(uint8_t *dst, const uint8_t *src, + ptrdiff_t stride, int hmode, int rnd) +@@ -850,6 +876,9 @@ static void put_vc1_mspel_mc_h_lasx(uint8_t *dst, const uint8_t *src, + __m256i tmp0_m, tmp1_m, tmp2_m, tmp3_m; + __m256i tmp4_m, tmp5_m, tmp6_m, tmp7_m; + __m256i t0, t1, t2, t3, t4, t5, t6, t7; ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_4x = stride << 2; ++ ptrdiff_t stride_3x = stride_2x + stride; + static const uint16_t para_value[][2] = {{0x0304, 0x1235}, + {0x0101, 0x0909}, + {0x0403, 0x3512}}; +@@ -864,33 +893,53 @@ static void put_vc1_mspel_mc_h_lasx(uint8_t *dst, const uint8_t *src, + const_para1_2 = __lasx_xvreplgr2vr_h(*(para_v + 1)); + src -= 1; + +- LASX_LD_8(src, stride, in0, in1, in2, in3, in4, in5, in6, in7); +- src += stride << 3; +- LASX_LD_8(src, stride, in8, in9, in10, in11, in12, in13, in14, in15); +- LASX_ILVL_B_8_128SV(in2, in0, in3, in1, in6, in4, in7, in5, +- in10, in8, in11, in9, in14, in12, in15, in13, +- tmp0_m, tmp1_m, tmp2_m, tmp3_m, +- tmp4_m, tmp5_m, tmp6_m, tmp7_m); +- LASX_ILVLH_B_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, t1, t0, t3, t2); +- LASX_ILVLH_B_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, t5, t4, t7, t6); +- LASX_ILVLH_W_2_128SV(t2, t0, t3, t1, tmp2_m, tmp0_m, tmp6_m, tmp4_m); +- LASX_ILVLH_W_2_128SV(t6, t4, t7, t5, tmp3_m, tmp1_m, tmp7_m, tmp5_m); +- LASX_ILVLH_D_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, out1, out0, out3, out2); +- LASX_ILVLH_D_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, out5, out4, out7, out6); +- +- LASX_ILVH_B_8_128SV(in2, in0, in3, in1, in6, in4, in7, in5, +- in10, in8, in11, in9, in14, in12, in15, in13, +- tmp0_m, tmp1_m, tmp2_m, tmp3_m, +- tmp4_m, tmp5_m, tmp6_m, tmp7_m); +- LASX_ILVLH_B_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, t1, t0, t3, t2); +- LASX_ILVLH_B_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, t5, t4, t7, t6); +- LASX_ILVLH_W_2_128SV(t2, t0, t3, t1, tmp2_m, tmp0_m, tmp6_m, tmp4_m); +- LASX_ILVLH_W_2_128SV(t6, t4, t7, t5, tmp3_m, tmp1_m, tmp7_m, tmp5_m); +- LASX_ILVLH_D_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, out9, out8, out11, out10); +- LASX_ILVLH_D_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, +- out13, out12, out15, out14); +- LASX_PCKOD_Q_2(out0, out0, out1, out1, out16, out17); +- LASX_PCKOD_Q(out2, out2, out18); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + stride, 0, src + stride_2x, 0, ++ src + stride_3x, 0, in0, in1, in2, in3); ++ src += stride_4x; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + stride, 0, src + stride_2x, 0, ++ src + stride_3x, 0, in4, in5, in6, in7); ++ src += stride_4x; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + stride, 0, src + stride_2x, 0, ++ src + stride_3x, 0, in8, in9, in10, in11); ++ src += stride_4x; ++ DUP4_ARG2(__lasx_xvld, src, 0, src + stride, 0, src + stride_2x, 0, ++ src + stride_3x, 0, in12, in13, in14, in15); ++ src -= stride_4x; ++ DUP4_ARG2(__lasx_xvilvl_b, in2, in0, in3, in1, in6, in4, in7, in5, ++ tmp0_m, tmp1_m, tmp2_m, tmp3_m); ++ DUP4_ARG2(__lasx_xvilvl_b, in10, in8, in11, in9, in14, in12, in15, in13, ++ tmp4_m, tmp5_m, tmp6_m, tmp7_m); ++ DUP4_ARG2(__lasx_xvilvl_b, tmp1_m, tmp0_m, tmp3_m, tmp2_m, tmp5_m, tmp4_m, ++ tmp7_m, tmp6_m, t0, t2, t4, t6); ++ DUP4_ARG2(__lasx_xvilvh_b, tmp1_m, tmp0_m, tmp3_m, tmp2_m, tmp5_m, tmp4_m, ++ tmp7_m, tmp6_m, t1, t3, t5, t7); ++ DUP4_ARG2(__lasx_xvilvl_w, t2, t0, t3, t1, t6, t4, t7, t5, tmp0_m, tmp4_m, ++ tmp1_m, tmp5_m); ++ DUP4_ARG2(__lasx_xvilvh_w, t2, t0, t3, t1, t6, t4, t7, t5, tmp2_m, tmp6_m, ++ tmp3_m, tmp7_m); ++ DUP4_ARG2(__lasx_xvilvl_d, tmp1_m, tmp0_m, tmp3_m, tmp2_m, tmp5_m, tmp4_m, ++ tmp7_m, tmp6_m, out0, out2, out4, out6); ++ DUP4_ARG2(__lasx_xvilvh_d, tmp1_m, tmp0_m, tmp3_m, tmp2_m, tmp5_m, tmp4_m, ++ tmp7_m, tmp6_m, out1, out3, out5, out7); ++ ++ DUP4_ARG2(__lasx_xvilvh_b, in2, in0, in3, in1, in6, in4, in7, in5, ++ tmp0_m, tmp1_m, tmp2_m, tmp3_m); ++ DUP4_ARG2(__lasx_xvilvh_b, in10, in8, in11, in9, in14, in12, in15, in13, ++ tmp4_m, tmp5_m, tmp6_m, tmp7_m); ++ DUP4_ARG2(__lasx_xvilvl_b, tmp1_m, tmp0_m, tmp3_m, tmp2_m, tmp5_m, tmp4_m, ++ tmp7_m, tmp6_m, t0, t2, t4, t6); ++ DUP4_ARG2(__lasx_xvilvh_b, tmp1_m, tmp0_m, tmp3_m, tmp2_m, tmp5_m, tmp4_m, ++ tmp7_m, tmp6_m, t1, t3, t5, t7); ++ DUP4_ARG2(__lasx_xvilvl_w, t2, t0, t3, t1, t6, t4, t7, t5, tmp0_m, tmp4_m, ++ tmp1_m, tmp5_m); ++ DUP4_ARG2(__lasx_xvilvh_w, t2, t0, t3, t1, t6, t4, t7, t5, tmp2_m, tmp6_m, ++ tmp3_m, tmp7_m); ++ DUP4_ARG2(__lasx_xvilvl_d, tmp1_m, tmp0_m, tmp3_m, tmp2_m, tmp5_m, tmp4_m, ++ tmp7_m, tmp6_m, out8, out10, out12, out14); ++ DUP4_ARG2(__lasx_xvilvh_d, tmp1_m, tmp0_m, tmp3_m, tmp2_m, tmp5_m, tmp4_m, ++ tmp7_m, tmp6_m, out9, out11, out13, out15); ++ DUP2_ARG3(__lasx_xvpermi_q, out0, out0, 0x31, out1, out1, 0x31, out16, out17); ++ out18 = __lasx_xvpermi_q(out2, out2, 0x31); + + out0 = __lasx_xvpermi_d(out0, 0xD8); + out1 = __lasx_xvpermi_d(out1, 0xD8); +@@ -929,59 +978,86 @@ static void put_vc1_mspel_mc_h_lasx(uint8_t *dst, const uint8_t *src, + ROW_LASX(out14, out15, out16, out17, in14); + ROW_LASX(out15, out16, out17, out18, in15); + +- LASX_ILVL_B_8_128SV(in2, in0, in3, in1, in6, in4, in7, in5, +- in10, in8, in11, in9, in14, in12, in15, in13, +- tmp0_m, tmp1_m, tmp2_m, tmp3_m, +- tmp4_m, tmp5_m, tmp6_m, tmp7_m); +- LASX_ILVLH_B_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, t1, t0, t3, t2); +- LASX_ILVLH_B_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, t5, t4, t7, t6); +- LASX_ILVLH_W_2_128SV(t2, t0, t3, t1, tmp2_m, tmp0_m, tmp6_m, tmp4_m); +- LASX_ILVLH_W_2_128SV(t6, t4, t7, t5, tmp3_m, tmp1_m, tmp7_m, tmp5_m); +- LASX_ILVLH_D_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, out1, out0, out3, out2); +- LASX_ILVLH_D_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, out5, out4, out7, out6); +- +- LASX_ILVH_B_8_128SV(in2, in0, in3, in1, in6, in4, in7, in5, +- in10, in8, in11, in9, in14, in12, in15, in13, +- tmp0_m, tmp1_m, tmp2_m, tmp3_m, +- tmp4_m, tmp5_m, tmp6_m, tmp7_m); +- LASX_ILVLH_B_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, t1, t0, t3, t2); +- LASX_ILVLH_B_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, t5, t4, t7, t6); +- LASX_ILVLH_W_2_128SV(t2, t0, t3, t1, tmp2_m, tmp0_m, tmp6_m, tmp4_m); +- LASX_ILVLH_W_2_128SV(t6, t4, t7, t5, tmp3_m, tmp1_m, tmp7_m, tmp5_m); +- LASX_ILVLH_D_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, out9, out8, out11, out10); +- LASX_ILVLH_D_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, +- out13, out12, out15, out14); +- LASX_ST_D_2(out0, 0, 1, dst, 8); ++ DUP4_ARG2(__lasx_xvilvl_b, in2, in0, in3, in1, in6, in4, in7, in5, ++ tmp0_m, tmp1_m, tmp2_m, tmp3_m); ++ DUP4_ARG2(__lasx_xvilvl_b, in10, in8, in11, in9, in14, in12, in15, in13, ++ tmp4_m, tmp5_m, tmp6_m, tmp7_m); ++ DUP4_ARG2(__lasx_xvilvl_b, tmp1_m, tmp0_m, tmp3_m, tmp2_m, tmp5_m, tmp4_m, ++ tmp7_m, tmp6_m, t0, t2, t4, t6); ++ DUP4_ARG2(__lasx_xvilvh_b, tmp1_m, tmp0_m, tmp3_m, tmp2_m, tmp5_m, tmp4_m, ++ tmp7_m, tmp6_m, t1, t3, t5, t7); ++ DUP4_ARG2(__lasx_xvilvl_w, t2, t0, t3, t1, t6, t4, t7, t5, tmp0_m, tmp4_m, ++ tmp1_m, tmp5_m); ++ DUP4_ARG2(__lasx_xvilvh_w, t2, t0, t3, t1, t6, t4, t7, t5, tmp2_m, tmp6_m, ++ tmp3_m, tmp7_m); ++ DUP4_ARG2(__lasx_xvilvl_d, tmp1_m, tmp0_m, tmp3_m, tmp2_m, tmp5_m, tmp4_m, ++ tmp7_m, tmp6_m, out0, out2, out4, out6); ++ DUP4_ARG2(__lasx_xvilvh_d, tmp1_m, tmp0_m, tmp3_m, tmp2_m, tmp5_m, tmp4_m, ++ tmp7_m, tmp6_m, out1, out3, out5, out7); ++ ++ DUP4_ARG2(__lasx_xvilvh_b, in2, in0, in3, in1, in6, in4, in7, in5, ++ tmp0_m, tmp1_m, tmp2_m, tmp3_m); ++ DUP4_ARG2(__lasx_xvilvh_b, in10, in8, in11, in9, in14, in12, in15, in13, ++ tmp4_m, tmp5_m, tmp6_m, tmp7_m); ++ DUP4_ARG2(__lasx_xvilvl_b, tmp1_m, tmp0_m, tmp3_m, tmp2_m, tmp5_m, tmp4_m, ++ tmp7_m, tmp6_m, t0, t2, t4, t6); ++ DUP4_ARG2(__lasx_xvilvh_b, tmp1_m, tmp0_m, tmp3_m, tmp2_m, tmp5_m, tmp4_m, ++ tmp7_m, tmp6_m, t1, t3, t5, t7); ++ DUP4_ARG2(__lasx_xvilvl_w, t2, t0, t3, t1, t6, t4, t7, t5, tmp0_m, tmp4_m, ++ tmp1_m, tmp5_m); ++ DUP4_ARG2(__lasx_xvilvh_w, t2, t0, t3, t1, t6, t4, t7, t5, tmp2_m, tmp6_m, ++ tmp3_m, tmp7_m); ++ DUP4_ARG2(__lasx_xvilvl_d, tmp1_m, tmp0_m, tmp3_m, tmp2_m, tmp5_m, tmp4_m, ++ tmp7_m, tmp6_m, out8, out10, out12, out14); ++ DUP4_ARG2(__lasx_xvilvh_d, tmp1_m, tmp0_m, tmp3_m, tmp2_m, tmp5_m, tmp4_m, ++ tmp7_m, tmp6_m, out9, out11, out13, out15); ++ __lasx_xvstelm_d(out0, dst, 0, 0); ++ __lasx_xvstelm_d(out0, dst, 8, 1); + dst += stride; +- LASX_ST_D_2(out1, 0, 1, dst, 8); ++ __lasx_xvstelm_d(out1, dst, 0, 0); ++ __lasx_xvstelm_d(out1, dst, 8, 1); + dst += stride; +- LASX_ST_D_2(out2, 0, 1, dst, 8); ++ __lasx_xvstelm_d(out2, dst, 0, 0); ++ __lasx_xvstelm_d(out2, dst, 8, 1); + dst += stride; +- LASX_ST_D_2(out3, 0, 1, dst, 8); ++ __lasx_xvstelm_d(out3, dst, 0, 0); ++ __lasx_xvstelm_d(out3, dst, 8, 1); + dst += stride; +- LASX_ST_D_2(out4, 0, 1, dst, 8); ++ __lasx_xvstelm_d(out4, dst, 0, 0); ++ __lasx_xvstelm_d(out4, dst, 8, 1); + dst += stride; +- LASX_ST_D_2(out5, 0, 1, dst, 8); ++ __lasx_xvstelm_d(out5, dst, 0, 0); ++ __lasx_xvstelm_d(out5, dst, 8, 1); + dst += stride; +- LASX_ST_D_2(out6, 0, 1, dst, 8); ++ __lasx_xvstelm_d(out6, dst, 0, 0); ++ __lasx_xvstelm_d(out6, dst, 8, 1); + dst += stride; +- LASX_ST_D_2(out7, 0, 1, dst, 8); ++ __lasx_xvstelm_d(out7, dst, 0, 0); ++ __lasx_xvstelm_d(out7, dst, 8, 1); + dst += stride; +- LASX_ST_D_2(out8, 0, 1, dst, 8); ++ __lasx_xvstelm_d(out8, dst, 0, 0); ++ __lasx_xvstelm_d(out8, dst, 8, 1); + dst += stride; +- LASX_ST_D_2(out9, 0, 1, dst, 8); ++ __lasx_xvstelm_d(out9, dst, 0, 0); ++ __lasx_xvstelm_d(out9, dst, 8, 1); + dst += stride; +- LASX_ST_D_2(out10, 0, 1, dst, 8); ++ __lasx_xvstelm_d(out10, dst, 0, 0); ++ __lasx_xvstelm_d(out10, dst, 8, 1); + dst += stride; +- LASX_ST_D_2(out11, 0, 1, dst, 8); ++ __lasx_xvstelm_d(out11, dst, 0, 0); ++ __lasx_xvstelm_d(out11, dst, 8, 1); + dst += stride; +- LASX_ST_D_2(out12, 0, 1, dst, 8); ++ __lasx_xvstelm_d(out12, dst, 0, 0); ++ __lasx_xvstelm_d(out12, dst, 8, 1); + dst += stride; +- LASX_ST_D_2(out13, 0, 1, dst, 8); ++ __lasx_xvstelm_d(out13, dst, 0, 0); ++ __lasx_xvstelm_d(out13, dst, 8, 1); + dst += stride; +- LASX_ST_D_2(out14, 0, 1, dst, 8); ++ __lasx_xvstelm_d(out14, dst, 0, 0); ++ __lasx_xvstelm_d(out14, dst, 8, 1); + dst += stride; +- LASX_ST_D_2(out15, 0, 1, dst, 8); ++ __lasx_xvstelm_d(out15, dst, 0, 0); ++ __lasx_xvstelm_d(out15, dst, 8, 1); + } + + #define PUT_VC1_MSPEL_MC_H_LASX(hmode) \ +diff --git a/libavcodec/loongarch/vp8_lpf_lsx.c b/libavcodec/loongarch/vp8_lpf_lsx.c +index d16d5dca4f..f0fc3f3a5b 100644 +--- a/libavcodec/loongarch/vp8_lpf_lsx.c ++++ b/libavcodec/loongarch/vp8_lpf_lsx.c +@@ -21,7 +21,62 @@ + + #include "libavcodec/vp8dsp.h" + #include "vp8dsp_loongarch.h" +-#include "libavutil/loongarch/generic_macros_lsx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" ++ ++#define VP8_LPF_FILTER4_4W(p1_in_out, p0_in_out, q0_in_out, q1_in_out, \ ++ mask_in, hev_in) \ ++{ \ ++ __m128i p1_m, p0_m, q0_m, q1_m, q0_sub_p0, filt_sign; \ ++ __m128i filt, filt1, filt2, cnst4b, cnst3b; \ ++ __m128i q0_sub_p0_l, q0_sub_p0_h, filt_h, filt_l, cnst3h; \ ++ \ ++ p1_m = __lsx_vxori_b(p1_in_out, 0x80); \ ++ p0_m = __lsx_vxori_b(p0_in_out, 0x80); \ ++ q0_m = __lsx_vxori_b(q0_in_out, 0x80); \ ++ q1_m = __lsx_vxori_b(q1_in_out, 0x80); \ ++ filt = __lsx_vssub_b(p1_m, q1_m); \ ++ filt = filt & hev_in; \ ++ \ ++ q0_sub_p0 = __lsx_vsub_b(q0_m, p0_m); \ ++ filt_sign = __lsx_vslti_b(filt, 0); \ ++ \ ++ cnst3h = __lsx_vreplgr2vr_h(3); \ ++ q0_sub_p0_l = __lsx_vilvl_b(q0_sub_p0, q0_sub_p0); \ ++ q0_sub_p0_l = __lsx_vdp2_h_b(q0_sub_p0_l, cnst3h); \ ++ filt_l = __lsx_vilvl_b(filt_sign, filt); \ ++ filt_l = __lsx_vadd_h(filt_l, q0_sub_p0_l); \ ++ filt_l = __lsx_vsat_h(filt_l, 7); \ ++ \ ++ q0_sub_p0_h = __lsx_vilvh_b(q0_sub_p0, q0_sub_p0); \ ++ q0_sub_p0_h = __lsx_vdp2_h_b(q0_sub_p0_h, cnst3h); \ ++ filt_h = __lsx_vilvh_b(filt_sign, filt); \ ++ filt_h = __lsx_vadd_h(filt_h, q0_sub_p0_h); \ ++ filt_h = __lsx_vsat_h(filt_h, 7); \ ++ \ ++ filt = __lsx_vpickev_b(filt_h, filt_l); \ ++ filt = filt & mask_in; \ ++ cnst4b = __lsx_vreplgr2vr_b(4); \ ++ filt1 = __lsx_vsadd_b(filt, cnst4b); \ ++ filt1 = __lsx_vsrai_b(filt1, 3); \ ++ \ ++ cnst3b = __lsx_vreplgr2vr_b(3); \ ++ filt2 = __lsx_vsadd_b(filt, cnst3b); \ ++ filt2 = __lsx_vsrai_b(filt2, 3); \ ++ \ ++ q0_m = __lsx_vssub_b(q0_m, filt1); \ ++ q0_in_out = __lsx_vxori_b(q0_m, 0x80); \ ++ p0_m = __lsx_vsadd_b(p0_m, filt2); \ ++ p0_in_out = __lsx_vxori_b(p0_m, 0x80); \ ++ \ ++ filt = __lsx_vsrari_b(filt1, 1); \ ++ hev_in = __lsx_vxori_b(hev_in, 0xff); \ ++ filt = filt & hev_in; \ ++ \ ++ q1_m = __lsx_vssub_b(q1_m, filt); \ ++ q1_in_out = __lsx_vxori_b(q1_m, 0x80); \ ++ p1_m = __lsx_vsadd_b(p1_m, filt); \ ++ p1_in_out = __lsx_vxori_b(p1_m, 0x80); \ ++} + + #define VP8_MBFILTER(p2, p1, p0, q0, q1, q2, mask, hev) \ + { \ +@@ -172,11 +227,22 @@ + + #define VP8_ST6x1_UB(in0, in0_idx, in1, in1_idx, pdst, stride) \ + { \ +- \ + __lsx_vstelm_w(in0, pdst, 0, in0_idx); \ + __lsx_vstelm_h(in1, pdst + stride, 0, in1_idx); \ + } + ++#define ST_W4(in, idx0, idx1, idx2, idx3, pdst, stride) \ ++{ \ ++ __lsx_vstelm_w(in, pdst, 0, idx0); \ ++ pdst += stride; \ ++ __lsx_vstelm_w(in, pdst, 0, idx1); \ ++ pdst += stride; \ ++ __lsx_vstelm_w(in, pdst, 0, idx2); \ ++ pdst += stride; \ ++ __lsx_vstelm_w(in, pdst, 0, idx3); \ ++ pdst += stride; \ ++} ++ + void ff_vp8_v_loop_filter16_lsx(uint8_t *dst, ptrdiff_t stride, int b_limit_in, + int limit_in, int thresh_in) + { +@@ -192,10 +258,10 @@ void ff_vp8_v_loop_filter16_lsx(uint8_t *dst, ptrdiff_t stride, int b_limit_in, + thresh = __lsx_vreplgr2vr_b(thresh_in); + + /*load vector elements*/ +- LSX_DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, +- dst - stride, 0, p3, p2, p1, p0); +- LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, dst + stride3, 0, +- q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, ++ dst - stride, 0, p3, p2, p1, p0); ++ DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, dst + stride3, 0, ++ q0, q1, q2, q3); + LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, hev, mask, flat); + VP8_MBFILTER(p2, p1, p0, q0, q1, q2, mask, hev); + +@@ -226,19 +292,19 @@ void ff_vp8_v_loop_filter8uv_lsx(uint8_t *dst_u, uint8_t *dst_v, + limit = __lsx_vreplgr2vr_b(limit_in); + thresh = __lsx_vreplgr2vr_b(thresh_in); + +- LSX_DUP4_ARG2(__lsx_vld, dst_u - stride4, 0, dst_u - stride3, 0, dst_u - stride2, 0, +- dst_u - stride, 0, p3_u, p2_u, p1_u, p0_u); +- LSX_DUP4_ARG2(__lsx_vld, dst_u, 0, dst_u + stride, 0, dst_u + stride2, 0, +- dst_u + stride3, 0, q0_u, q1_u, q2_u, q3_u); ++ DUP4_ARG2(__lsx_vld, dst_u - stride4, 0, dst_u - stride3, 0, dst_u - stride2, 0, ++ dst_u - stride, 0, p3_u, p2_u, p1_u, p0_u); ++ DUP4_ARG2(__lsx_vld, dst_u, 0, dst_u + stride, 0, dst_u + stride2, 0, ++ dst_u + stride3, 0, q0_u, q1_u, q2_u, q3_u); + +- LSX_DUP4_ARG2(__lsx_vld, dst_v - stride4, 0, dst_v - stride3, 0, dst_v - stride2, 0, +- dst_v - stride, 0, p3_v, p2_v, p1_v, p0_v); +- LSX_DUP4_ARG2(__lsx_vld, dst_v, 0, dst_v + stride, 0, dst_v + stride2, 0, +- dst_v + stride3, 0, q0_v, q1_v, q2_v, q3_v); ++ DUP4_ARG2(__lsx_vld, dst_v - stride4, 0, dst_v - stride3, 0, dst_v - stride2, 0, ++ dst_v - stride, 0, p3_v, p2_v, p1_v, p0_v); ++ DUP4_ARG2(__lsx_vld, dst_v, 0, dst_v + stride, 0, dst_v + stride2, 0, ++ dst_v + stride3, 0, q0_v, q1_v, q2_v, q3_v); + + /* rht 8 element of p3 are u pixel and left 8 element of p3 are v pixei */ +- LSX_DUP4_ARG2(__lsx_vilvl_d, p3_v, p3_u, p2_v, p2_u, p1_v, p1_u, p0_v, p0_u, p3, p2, p1, p0); +- LSX_DUP4_ARG2(__lsx_vilvl_d, q0_v, q0_u, q1_v, q1_u, q2_v, q2_u, q3_v, q3_u, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vilvl_d, p3_v, p3_u, p2_v, p2_u, p1_v, p1_u, p0_v, p0_u, p3, p2, p1, p0); ++ DUP4_ARG2(__lsx_vilvl_d, q0_v, q0_u, q1_v, q1_u, q2_v, q2_u, q3_v, q3_u, q0, q1, q2, q3); + LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, + hev, mask, flat); + VP8_MBFILTER(p2, p1, p0, q0, q1, q2, mask, hev); +@@ -279,20 +345,20 @@ void ff_vp8_h_loop_filter16_lsx(uint8_t *dst, ptrdiff_t stride, int b_limit_in, + thresh = __lsx_vreplgr2vr_b(thresh_in); + + temp_src = dst - 4; +- LSX_DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, temp_src + stride2, 0, +- temp_src + stride3, 0, row0, row1, row2, row3); ++ DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, temp_src + stride2, 0, ++ temp_src + stride3, 0, row0, row1, row2, row3); + temp_src += stride4; +- LSX_DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, +- temp_src + stride2, 0, temp_src + stride3, 0, row4, row5, row6, row7); ++ DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, temp_src + stride2, 0, ++ temp_src + stride3, 0, row4, row5, row6, row7); + + temp_src += stride4; +- LSX_DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, temp_src + stride2, 0, +- temp_src + stride3, 0, row8, row9, row10, row11); ++ DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, temp_src + stride2, 0, ++ temp_src + stride3, 0, row8, row9, row10, row11); + temp_src += stride4; +- LSX_DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, +- temp_src + stride2, 0, temp_src + stride3, 0, row12, row13, row14, row15); +- TRANSPOSE16x8_B(row0, row1, row2, row3, row4, row5, row6, row7, row8, row9, row10, row11, +- row12, row13, row14, row15, p3, p2, p1, p0, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, temp_src + stride2, 0, ++ temp_src + stride3, 0, row12, row13, row14, row15); ++ LSX_TRANSPOSE16x8_B(row0, row1, row2, row3, row4, row5, row6, row7, row8, row9, row10, ++ row11, row12, row13, row14, row15, p3, p2, p1, p0, q0, q1, q2, q3); + + LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, hev, mask, flat); + VP8_MBFILTER(p2, p1, p0, q0, q1, q2, mask, hev); +@@ -366,22 +432,22 @@ void ff_vp8_h_loop_filter8uv_lsx(uint8_t *dst_u, uint8_t *dst_v, + thresh = __lsx_vreplgr2vr_b(thresh_in); + + temp_src = dst_u - 4; +- LSX_DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, temp_src + stride2, 0, +- temp_src + stride3, 0, row0, row1, row2, row3); ++ DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, temp_src + stride2, 0, ++ temp_src + stride3, 0, row0, row1, row2, row3); + temp_src += stride4; +- LSX_DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, +- temp_src + stride2, 0, temp_src + stride3, 0, row4, row5, row6, row7); ++ DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, temp_src + stride2, 0, ++ temp_src + stride3, 0, row4, row5, row6, row7); + + temp_src = dst_v - 4; +- LSX_DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, temp_src + stride2, 0, +- temp_src + stride3, 0, row8, row9, row10, row11); ++ DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, temp_src + stride2, 0, ++ temp_src + stride3, 0, row8, row9, row10, row11); + temp_src += stride4; +- LSX_DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, +- temp_src + stride2, 0, temp_src + stride3, 0, row12, row13, row14, row15); ++ DUP4_ARG2(__lsx_vld, temp_src, 0, temp_src + stride, 0, temp_src + stride2, 0, ++ temp_src + stride3, 0, row12, row13, row14, row15); + +- TRANSPOSE16x8_B(row0, row1, row2, row3, row4, row5, row6, row7, +- row8, row9, row10, row11, row12, row13, row14, row15, +- p3, p2, p1, p0, q0, q1, q2, q3); ++ LSX_TRANSPOSE16x8_B(row0, row1, row2, row3, row4, row5, row6, row7, ++ row8, row9, row10, row11, row12, row13, row14, row15, ++ p3, p2, p1, p0, q0, q1, q2, q3); + + LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, hev, mask, flat); + VP8_MBFILTER(p2, p1, p0, q0, q1, q2, mask, hev); +@@ -435,3 +501,91 @@ void ff_vp8_h_loop_filter8uv_lsx(uint8_t *dst_u, uint8_t *dst_v, + dst_v += stride; + VP8_ST6x1_UB(tmp7, 3, tmp5, 7, dst_v, 4); + } ++ ++void ff_vp8_v_loop_filter16_inner_lsx(uint8_t *src, ptrdiff_t stride, ++ int32_t e, int32_t i, int32_t h) ++{ ++ __m128i mask, hev, flat; ++ __m128i thresh, b_limit, limit; ++ __m128i p3, p2, p1, p0, q3, q2, q1, q0; ++ ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ ptrdiff_t stride4 = stride2 << 1; ++ ++ /* load vector elements */ ++ src -= stride4; ++ DUP4_ARG2(__lsx_vld, src, 0, src + stride, 0, src + stride2, 0, ++ src + stride3, 0, p3, p2, p1, p0); ++ src += stride4; ++ DUP4_ARG2(__lsx_vld, src, 0, src + stride, 0, src + stride2, 0, ++ src + stride3, 0, q0, q1, q2, q3); ++ thresh = __lsx_vreplgr2vr_b(h); ++ b_limit = __lsx_vreplgr2vr_b(e); ++ limit = __lsx_vreplgr2vr_b(i); ++ ++ LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, ++ hev, mask, flat); ++ VP8_LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev); ++ ++ __lsx_vst(p1, src - stride2, 0); ++ __lsx_vst(p0, src - stride, 0); ++ __lsx_vst(q0, src, 0); ++ __lsx_vst(q1, src + stride, 0); ++} ++ ++void ff_vp8_h_loop_filter16_inner_lsx(uint8_t *src, ptrdiff_t stride, ++ int32_t e, int32_t i, int32_t h) ++{ ++ __m128i mask, hev, flat; ++ __m128i thresh, b_limit, limit; ++ __m128i p3, p2, p1, p0, q3, q2, q1, q0; ++ __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; ++ __m128i tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15; ++ ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ ptrdiff_t stride4 = stride2 << 1; ++ ++ src -= 4; ++ DUP4_ARG2(__lsx_vld, src, 0, src + stride, 0, src + stride2, 0, ++ src + stride3, 0, tmp0, tmp1, tmp2, tmp3); ++ src += stride4; ++ DUP4_ARG2(__lsx_vld, src, 0, src + stride, 0, src + stride2, 0, ++ src + stride3, 0, tmp4, tmp5, tmp6, tmp7); ++ src += stride4; ++ DUP4_ARG2(__lsx_vld, src, 0, src + stride, 0, src + stride2, 0, ++ src + stride3, 0, tmp8, tmp9, tmp10, tmp11); ++ src += stride4; ++ DUP4_ARG2(__lsx_vld, src, 0, src + stride, 0, src + stride2, 0, ++ src + stride3, 0, tmp12, tmp13, tmp14, tmp15); ++ src -= 3 * stride4; ++ ++ LSX_TRANSPOSE16x8_B(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, ++ tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, ++ p3, p2, p1, p0, q0, q1, q2, q3); ++ ++ thresh = __lsx_vreplgr2vr_b(h); ++ b_limit = __lsx_vreplgr2vr_b(e); ++ limit = __lsx_vreplgr2vr_b(i); ++ ++ LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, ++ hev, mask, flat); ++ VP8_LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev); ++ ++ DUP2_ARG2(__lsx_vilvl_b, p0, p1, q1, q0, tmp0, tmp1); ++ tmp2 = __lsx_vilvl_h(tmp1, tmp0); ++ tmp3 = __lsx_vilvh_h(tmp1, tmp0); ++ ++ src += 2; ++ ST_W4(tmp2, 0, 1, 2, 3, src, stride); ++ ST_W4(tmp3, 0, 1, 2, 3, src, stride); ++ ++ DUP2_ARG2(__lsx_vilvh_b, p0, p1, q1, q0, tmp0, tmp1); ++ tmp2 = __lsx_vilvl_h(tmp1, tmp0); ++ tmp3 = __lsx_vilvh_h(tmp1, tmp0); ++ ++ ST_W4(tmp2, 0, 1, 2, 3, src, stride); ++ ST_W4(tmp3, 0, 1, 2, 3, src, stride); ++ src -= 4 * stride4; ++} +diff --git a/libavcodec/loongarch/vp8_mc_lsx.c b/libavcodec/loongarch/vp8_mc_lsx.c +new file mode 100644 +index 0000000000..80c4f87e80 +--- /dev/null ++++ b/libavcodec/loongarch/vp8_mc_lsx.c +@@ -0,0 +1,951 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hecai Yuan ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++#include "libavcodec/vp8dsp.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" ++#include "vp8dsp_loongarch.h" ++ ++static const uint8_t mc_filt_mask_arr[16 * 3] = { ++ /* 8 width cases */ ++ 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, ++ /* 4 width cases */ ++ 0, 1, 1, 2, 2, 3, 3, 4, 16, 17, 17, 18, 18, 19, 19, 20, ++ /* 4 width cases */ ++ 8, 9, 9, 10, 10, 11, 11, 12, 24, 25, 25, 26, 26, 27, 27, 28 ++}; ++ ++static const int8_t subpel_filters_lsx[7][8] = { ++ {-6, 123, 12, -1, 0, 0, 0, 0}, ++ {2, -11, 108, 36, -8, 1, 0, 0}, /* New 1/4 pel 6 tap filter */ ++ {-9, 93, 50, -6, 0, 0, 0, 0}, ++ {3, -16, 77, 77, -16, 3, 0, 0}, /* New 1/2 pel 6 tap filter */ ++ {-6, 50, 93, -9, 0, 0, 0, 0}, ++ {1, -8, 36, 108, -11, 2, 0, 0}, /* New 1/4 pel 6 tap filter */ ++ {-1, 12, 123, -6, 0, 0, 0, 0}, ++}; ++ ++#define DPADD_SH3_SH(in0, in1, in2, coeff0, coeff1, coeff2) \ ++( { \ ++ __m128i out0_m; \ ++ \ ++ out0_m = __lsx_vdp2_h_b(in0, coeff0); \ ++ out0_m = __lsx_vdp2add_h_b(out0_m, in1, coeff1); \ ++ out0_m = __lsx_vdp2add_h_b(out0_m, in2, coeff2); \ ++ \ ++ out0_m; \ ++} ) ++ ++#define VSHF_B3_SB(in0, in1, in2, in3, in4, in5, mask0, mask1, mask2, \ ++ out0, out1, out2) \ ++{ \ ++ DUP2_ARG3(__lsx_vshuf_b, in1, in0, mask0, in3, in2, mask1, \ ++ out0, out1); \ ++ out2 = __lsx_vshuf_b(in5, in4, mask2); \ ++} ++ ++#define HORIZ_6TAP_FILT(src0, src1, mask0, mask1, mask2, \ ++ filt_h0, filt_h1, filt_h2) \ ++( { \ ++ __m128i vec0_m, vec1_m, vec2_m; \ ++ __m128i hz_out_m; \ ++ \ ++ VSHF_B3_SB(src0, src1, src0, src1, src0, src1, mask0, mask1, mask2, \ ++ vec0_m, vec1_m, vec2_m); \ ++ hz_out_m = DPADD_SH3_SH(vec0_m, vec1_m, vec2_m, \ ++ filt_h0, filt_h1, filt_h2); \ ++ \ ++ hz_out_m = __lsx_vsrari_h(hz_out_m, 7); \ ++ hz_out_m = __lsx_vsat_h(hz_out_m, 7); \ ++ \ ++ hz_out_m; \ ++} ) ++ ++#define HORIZ_6TAP_8WID_4VECS_FILT(src0, src1, src2, src3, \ ++ mask0, mask1, mask2, \ ++ filt0, filt1, filt2, \ ++ out0, out1, out2, out3) \ ++{ \ ++ __m128i vec0_m, vec1_m, vec2_m, vec3_m, vec4_m, vec5_m, vec6_m, vec7_m; \ ++ \ ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, src2, src2, \ ++ mask0, src3, src3, mask0, vec0_m, vec1_m, vec2_m, vec3_m); \ ++ DUP4_ARG2(__lsx_vdp2_h_b, vec0_m, filt0, vec1_m, filt0, vec2_m, filt0, \ ++ vec3_m, filt0, out0, out1, out2, out3); \ ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, src2, src2, \ ++ mask1, src3, src3, mask1, vec0_m, vec1_m, vec2_m, vec3_m); \ ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, src2, src2, \ ++ mask2, src3, src3, mask2, vec4_m, vec5_m, vec6_m, vec7_m); \ ++ DUP4_ARG3(__lsx_vdp2add_h_b, out0, vec0_m, filt1, out1, vec1_m, filt1, \ ++ out2, vec2_m, filt1, out3, vec3_m, filt1, out0, out1, out2, out3); \ ++ DUP4_ARG3(__lsx_vdp2add_h_b, out0, vec4_m, filt2, out1, vec5_m, filt2, \ ++ out2, vec6_m, filt2, out3, vec7_m, filt2, out0, out1, out2, out3); \ ++} ++ ++#define FILT_4TAP_DPADD_S_H(vec0, vec1, filt0, filt1) \ ++( { \ ++ __m128i tmp0; \ ++ \ ++ tmp0 = __lsx_vdp2_h_b(vec0, filt0); \ ++ tmp0 = __lsx_vdp2add_h_b(tmp0, vec1, filt1); \ ++ \ ++ tmp0; \ ++} ) ++ ++#define HORIZ_4TAP_FILT(src0, src1, mask0, mask1, filt_h0, filt_h1) \ ++( { \ ++ __m128i vec0_m, vec1_m; \ ++ __m128i hz_out_m; \ ++ DUP2_ARG3(__lsx_vshuf_b, src1, src0, mask0, src1, src0, mask1, \ ++ vec0_m, vec1_m); \ ++ hz_out_m = FILT_4TAP_DPADD_S_H(vec0_m, vec1_m, filt_h0, filt_h1); \ ++ \ ++ hz_out_m = __lsx_vsrari_h(hz_out_m, 7); \ ++ hz_out_m = __lsx_vsat_h(hz_out_m, 7); \ ++ \ ++ hz_out_m; \ ++} ) ++ ++void ff_put_vp8_epel8_h6_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int height, int mx, int my) ++{ ++ uint32_t loop_cnt; ++ const int8_t *filter = subpel_filters_lsx[mx - 1]; ++ __m128i src0, src1, src2, src3, filt0, filt1, filt2; ++ __m128i mask0, mask1, mask2; ++ __m128i out0, out1, out2, out3; ++ ++ ptrdiff_t src_stride2 = src_stride << 1; ++ ptrdiff_t src_stride3 = src_stride2 + src_stride; ++ ptrdiff_t src_stride4 = src_stride2 << 1; ++ ++ mask0 = __lsx_vld(mc_filt_mask_arr, 0); ++ src -= 2; ++ ++ /* rearranging filter */ ++ DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ filt2 = __lsx_vldrepl_h(filter, 4); ++ ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride2, 0, ++ src + src_stride3, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ src += src_stride4; ++ HORIZ_6TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, ++ filt0, filt1, filt2, out0, out1, out2, out3); ++ ++ DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ __lsx_vstelm_d(out0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(out0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(out1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(out1, dst, 0, 1); ++ dst += dst_stride; ++ ++ for (loop_cnt = (height >> 2) - 1; loop_cnt--;) { ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride2, 0, ++ src + src_stride3, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ src += src_stride4; ++ HORIZ_6TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, ++ filt0, filt1, filt2, out0, out1, out2, out3); ++ ++ DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ ++ __lsx_vstelm_d(out0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(out0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(out1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(out1, dst, 0, 1); ++ dst += dst_stride; ++ } ++} ++ ++void ff_put_vp8_epel16_h6_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int height, int mx, int my) ++{ ++ uint32_t loop_cnt; ++ const int8_t *filter = subpel_filters_lsx[mx - 1]; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, filt0, filt1; ++ __m128i filt2, mask0, mask1, mask2; ++ __m128i out0, out1, out2, out3, out4, out5, out6, out7; ++ ++ ptrdiff_t src_stride2 = src_stride << 1; ++ ptrdiff_t src_stride3 = src_stride2 + src_stride; ++ ptrdiff_t src_stride4 = src_stride2 << 1; ++ ++ mask0 = __lsx_vld(mc_filt_mask_arr, 0); ++ src -= 2; ++ /* rearranging filter */ ++ DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ filt2 = __lsx_vldrepl_h(filter, 4); ++ ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride2, ++ 0, src + src_stride3, 0, src0 ,src2, src4, src6); ++ DUP4_ARG2(__lsx_vld, src, 8, src + src_stride, 8, src + src_stride2, ++ 8, src + src_stride3, 8, src1, src3, src5, src7); ++ ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src6, 128, src7, 128, ++ src4, src5, src6, src7); ++ src += src_stride4; ++ ++ HORIZ_6TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, ++ filt0, filt1, filt2, out0, out1, out2, out3); ++ HORIZ_6TAP_8WID_4VECS_FILT(src4, src5, src6, src7, mask0, mask1, mask2, ++ filt0, filt1, filt2, out4, out5, out6, out7); ++ DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ __lsx_vst(out0, dst, 0); ++ dst += dst_stride; ++ __lsx_vst(out1, dst, 0); ++ dst += dst_stride; ++ ++ DUP2_ARG3(__lsx_vssrarni_b_h, out5, out4, 7, out7, out6, 7, out4, out5); ++ DUP2_ARG2(__lsx_vxori_b, out4, 128, out5, 128, out4, out5); ++ __lsx_vst(out4, dst, 0); ++ dst += dst_stride; ++ __lsx_vst(out5, dst, 0); ++ dst += dst_stride; ++ } ++} ++ ++void ff_put_vp8_epel8_v6_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int height, int mx, int my) ++{ ++ uint32_t loop_cnt; ++ const int8_t *filter = subpel_filters_lsx[my - 1]; ++ __m128i src0, src1, src2, src3, src4, src7, src8, src9, src10; ++ __m128i src10_l, src32_l, src76_l, src98_l, src21_l, src43_l, src87_l; ++ __m128i src109_l, filt0, filt1, filt2; ++ __m128i out0_l, out1_l, out2_l, out3_l; ++ ++ ptrdiff_t src_stride2 = src_stride << 1; ++ ptrdiff_t src_stride3 = src_stride2 + src_stride; ++ ptrdiff_t src_stride4 = src_stride2 << 1; ++ ++ src -= src_stride2; ++ DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ filt2 = __lsx_vldrepl_h(filter, 4); ++ ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride2, 0, ++ src + src_stride3, 0, src0, src1, src2, src3); ++ src += src_stride4; ++ src4 = __lsx_vld(src, 0); ++ src += src_stride; ++ ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ src4 = __lsx_vxori_b(src4, 128); ++ ++ DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src2, src1, src4, ++ src3, src10_l, src32_l, src21_l, src43_l); ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride2, ++ 0, src + src_stride3, 0, src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, ++ 128, src7, src8, src9, src10); ++ src += src_stride4; ++ ++ DUP4_ARG2(__lsx_vilvl_b, src7, src4, src8, src7, src9, src8, src10, ++ src9, src76_l, src87_l, src98_l, src109_l); ++ ++ out0_l = DPADD_SH3_SH(src10_l, src32_l, src76_l, filt0, filt1, filt2); ++ out1_l = DPADD_SH3_SH(src21_l, src43_l, src87_l, filt0, filt1, filt2); ++ out2_l = DPADD_SH3_SH(src32_l, src76_l, src98_l, filt0, filt1, filt2); ++ out3_l = DPADD_SH3_SH(src43_l, src87_l, src109_l, filt0, filt1, filt2); ++ ++ DUP2_ARG3(__lsx_vssrarni_b_h, out1_l, out0_l, 7, out3_l, out2_l, 7, ++ out0_l, out1_l); ++ DUP2_ARG2(__lsx_vxori_b, out0_l, 128, out1_l, 128, out0_l, out1_l); ++ ++ __lsx_vstelm_d(out0_l, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(out0_l, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(out1_l, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(out1_l, dst, 0, 1); ++ dst += dst_stride; ++ ++ src10_l = src76_l; ++ src32_l = src98_l; ++ src21_l = src87_l; ++ src43_l = src109_l; ++ src4 = src10; ++ } ++} ++ ++void ff_put_vp8_epel16_v6_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int height, int mx, int my) ++{ ++ uint32_t loop_cnt; ++ const int8_t *filter = subpel_filters_lsx[my - 1]; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8; ++ __m128i src10_l, src32_l, src54_l, src76_l, src21_l, src43_l, src65_l, src87_l; ++ __m128i src10_h, src32_h, src54_h, src76_h, src21_h, src43_h, src65_h, src87_h; ++ __m128i filt0, filt1, filt2; ++ __m128i tmp0, tmp1, tmp2, tmp3; ++ ++ ptrdiff_t src_stride2 = src_stride << 1; ++ ptrdiff_t src_stride3 = src_stride2 + src_stride; ++ ptrdiff_t src_stride4 = src_stride2 << 1; ++ ++ DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ filt2 = __lsx_vldrepl_h(filter, 4); ++ ++ DUP4_ARG2(__lsx_vld, src - src_stride2, 0, src - src_stride, 0, src, 0, ++ src + src_stride, 0, src0, src1, src2, src3); ++ src4 = __lsx_vld(src + src_stride2, 0); ++ src += src_stride3; ++ ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ src4 = __lsx_vxori_b(src4, 128); ++ ++ DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src4, src3, src2, src1, ++ src10_l, src32_l, src43_l, src21_l); ++ DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src4, src3, src2, src1, ++ src10_h, src32_h, src43_h, src21_h); ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride2, 0, ++ src + src_stride3, 0, src5, src6, src7, src8); ++ src += src_stride4; ++ DUP4_ARG2(__lsx_vxori_b, src5, 128, src6, 128, src7, 128, src8, 128, ++ src5, src6, src7, src8); ++ ++ DUP4_ARG2(__lsx_vilvl_b, src5, src4, src6, src5, src7, src6, src8, src7, ++ src54_l, src65_l, src76_l, src87_l); ++ DUP4_ARG2(__lsx_vilvh_b, src5, src4, src6, src5, src7, src6, src8, src7, ++ src54_h, src65_h, src76_h, src87_h); ++ ++ tmp0 = DPADD_SH3_SH(src10_l, src32_l, src54_l, filt0, filt1, filt2); ++ tmp1 = DPADD_SH3_SH(src21_l, src43_l, src65_l, filt0, filt1, filt2); ++ tmp2 = DPADD_SH3_SH(src10_h, src32_h, src54_h, filt0, filt1, filt2); ++ tmp3 = DPADD_SH3_SH(src21_h, src43_h, src65_h, filt0, filt1, filt2); ++ ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ __lsx_vst(tmp0, dst, 0); ++ dst += dst_stride; ++ __lsx_vst(tmp1, dst, 0); ++ dst += dst_stride; ++ ++ tmp0 = DPADD_SH3_SH(src32_l, src54_l, src76_l, filt0, filt1, filt2); ++ tmp1 = DPADD_SH3_SH(src43_l, src65_l, src87_l, filt0, filt1, filt2); ++ tmp2 = DPADD_SH3_SH(src32_h, src54_h, src76_h, filt0, filt1, filt2); ++ tmp3 = DPADD_SH3_SH(src43_h, src65_h, src87_h, filt0, filt1, filt2); ++ ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ __lsx_vst(tmp0, dst, 0); ++ dst += dst_stride; ++ __lsx_vst(tmp1, dst, 0); ++ dst += dst_stride; ++ ++ src10_l = src54_l; ++ src32_l = src76_l; ++ src21_l = src65_l; ++ src43_l = src87_l; ++ src10_h = src54_h; ++ src32_h = src76_h; ++ src21_h = src65_h; ++ src43_h = src87_h; ++ src4 = src8; ++ } ++} ++ ++void ff_put_vp8_epel8_h6v6_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int height, int mx, int my) ++{ ++ uint32_t loop_cnt; ++ const int8_t *filter_horiz = subpel_filters_lsx[mx - 1]; ++ const int8_t *filter_vert = subpel_filters_lsx[my - 1]; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8; ++ __m128i filt_hz0, filt_hz1, filt_hz2; ++ __m128i mask0, mask1, mask2, filt_vt0, filt_vt1, filt_vt2; ++ __m128i hz_out0, hz_out1, hz_out2, hz_out3, hz_out4, hz_out5, hz_out6; ++ __m128i hz_out7, hz_out8, out0, out1, out2, out3, out4, out5, out6, out7; ++ __m128i tmp0, tmp1, tmp2, tmp3; ++ ++ ptrdiff_t src_stride2 = src_stride << 1; ++ ptrdiff_t src_stride3 = src_stride2 + src_stride; ++ ptrdiff_t src_stride4 = src_stride2 << 1; ++ ++ mask0 = __lsx_vld(mc_filt_mask_arr, 0); ++ src -= (2 + src_stride2); ++ ++ /* rearranging filter */ ++ DUP2_ARG2(__lsx_vldrepl_h, filter_horiz, 0, filter_horiz, 2, filt_hz0, filt_hz1); ++ filt_hz2 = __lsx_vldrepl_h(filter_horiz, 4); ++ ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride2, 0, ++ src + src_stride3, 0, src0, src1, src2, src3); ++ src += src_stride4; ++ src4 = __lsx_vld(src, 0); ++ src += src_stride; ++ ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0 ,src1, src2, src3); ++ src4 = __lsx_vxori_b(src4, 128); ++ ++ hz_out0 = HORIZ_6TAP_FILT(src0, src0, mask0, mask1, mask2, filt_hz0, ++ filt_hz1, filt_hz2); ++ hz_out1 = HORIZ_6TAP_FILT(src1, src1, mask0, mask1, mask2, filt_hz0, ++ filt_hz1, filt_hz2); ++ hz_out2 = HORIZ_6TAP_FILT(src2, src2, mask0, mask1, mask2, filt_hz0, ++ filt_hz1, filt_hz2); ++ hz_out3 = HORIZ_6TAP_FILT(src3, src3, mask0, mask1, mask2, filt_hz0, ++ filt_hz1, filt_hz2); ++ hz_out4 = HORIZ_6TAP_FILT(src4, src4, mask0, mask1, mask2, filt_hz0, ++ filt_hz1, filt_hz2); ++ ++ DUP2_ARG2(__lsx_vldrepl_h, filter_vert, 0, filter_vert, 2, filt_vt0, filt_vt1); ++ filt_vt2 = __lsx_vldrepl_h(filter_vert, 4); ++ ++ DUP2_ARG2(__lsx_vpackev_b, hz_out1, hz_out0, hz_out3, hz_out2, out0, out1); ++ DUP2_ARG2(__lsx_vpackev_b, hz_out2, hz_out1, hz_out4, hz_out3, out3, out4); ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride2, 0, ++ src + src_stride3, 0, src5, src6, src7, src8); ++ src += src_stride4; ++ ++ DUP4_ARG2(__lsx_vxori_b, src5, 128, src6, 128, src7, 128, src8, 128, ++ src5, src6, src7, src8); ++ ++ hz_out5 = HORIZ_6TAP_FILT(src5, src5, mask0, mask1, mask2, filt_hz0, ++ filt_hz1, filt_hz2); ++ out2 = __lsx_vpackev_b(hz_out5, hz_out4); ++ tmp0 = DPADD_SH3_SH(out0, out1, out2,filt_vt0, filt_vt1, filt_vt2); ++ ++ hz_out6 = HORIZ_6TAP_FILT(src6, src6, mask0, mask1, mask2, filt_hz0, ++ filt_hz1, filt_hz2); ++ out5 = __lsx_vpackev_b(hz_out6, hz_out5); ++ tmp1 = DPADD_SH3_SH(out3, out4, out5, filt_vt0, filt_vt1, filt_vt2); ++ ++ hz_out7 = HORIZ_6TAP_FILT(src7, src7, mask0, mask1, mask2, filt_hz0, ++ filt_hz1, filt_hz2); ++ ++ out7 = __lsx_vpackev_b(hz_out7, hz_out6); ++ tmp2 = DPADD_SH3_SH(out1, out2, out7, filt_vt0, filt_vt1, filt_vt2); ++ ++ hz_out8 = HORIZ_6TAP_FILT(src8, src8, mask0, mask1, mask2, filt_hz0, ++ filt_hz1, filt_hz2); ++ out6 = __lsx_vpackev_b(hz_out8, hz_out7); ++ tmp3 = DPADD_SH3_SH(out4, out5, out6, filt_vt0, filt_vt1, filt_vt2); ++ ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 7, tmp3, tmp2, 7, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ __lsx_vstelm_d(tmp0, dst, 0, 0); ++ ++ dst += dst_stride; ++ __lsx_vstelm_d(tmp0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(tmp1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(tmp1, dst, 0, 1); ++ dst += dst_stride; ++ ++ hz_out4 = hz_out8; ++ out0 = out2; ++ out1 = out7; ++ out3 = out5; ++ out4 = out6; ++ } ++} ++ ++void ff_put_vp8_epel16_h6v6_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int height, int mx, int my) ++{ ++ int32_t multiple8_cnt; ++ ++ for (multiple8_cnt = 2; multiple8_cnt--;) { ++ ff_put_vp8_epel8_h6v6_lsx(dst, dst_stride, src, src_stride, height, mx, my); ++ src += 8; ++ dst += 8; ++ } ++} ++ ++void ff_put_vp8_epel8_v4_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int height, int mx, int my) ++{ ++ uint32_t loop_cnt; ++ const int8_t *filter = subpel_filters_lsx[my - 1]; ++ __m128i src0, src1, src2, src7, src8, src9, src10; ++ __m128i src10_l, src72_l, src98_l, src21_l, src87_l, src109_l, filt0, filt1; ++ __m128i out0, out1, out2, out3; ++ ++ ptrdiff_t src_stride2 = src_stride << 1; ++ ptrdiff_t src_stride3 = src_stride2 + src_stride; ++ ptrdiff_t src_stride4 = src_stride2 << 1; ++ ++ src -= src_stride; ++ ++ DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ src2 = __lsx_vld(src + src_stride2, 0); ++ src += src_stride3; ++ ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_l, src21_l); ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride2, 0, ++ src + src_stride3, 0, src7, src8, src9, src10); ++ src += src_stride4; ++ ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src2, src8, src7, src9, src8, src10, src9, ++ src72_l, src87_l, src98_l, src109_l); ++ ++ out0 = FILT_4TAP_DPADD_S_H(src10_l, src72_l, filt0, filt1); ++ out1 = FILT_4TAP_DPADD_S_H(src21_l, src87_l, filt0, filt1); ++ out2 = FILT_4TAP_DPADD_S_H(src72_l, src98_l, filt0, filt1); ++ out3 = FILT_4TAP_DPADD_S_H(src87_l, src109_l, filt0, filt1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ ++ __lsx_vstelm_d(out0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(out0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(out1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(out1, dst, 0, 1); ++ dst += dst_stride; ++ ++ src10_l = src98_l; ++ src21_l = src109_l; ++ src2 = src10; ++ } ++} ++ ++void ff_put_vp8_epel16_v4_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int height, int mx, int my) ++{ ++ uint32_t loop_cnt; ++ const int8_t *filter = subpel_filters_lsx[my - 1]; ++ __m128i src0, src1, src2, src3, src4, src5, src6; ++ __m128i src10_l, src32_l, src54_l, src21_l, src43_l, src65_l, src10_h; ++ __m128i src32_h, src54_h, src21_h, src43_h, src65_h, filt0, filt1; ++ __m128i tmp0, tmp1, tmp2, tmp3; ++ ++ ptrdiff_t src_stride2 = src_stride << 1; ++ ptrdiff_t src_stride3 = src_stride2 + src_stride; ++ ptrdiff_t src_stride4 = src_stride2 << 1; ++ ++ src -= src_stride; ++ DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ src2 = __lsx_vld(src + src_stride2, 0); ++ src += src_stride3; ++ ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_l, src21_l); ++ DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_h, src21_h); ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride2, ++ 0, src + src_stride3, 0, src3, src4, src5, src6); ++ src += src_stride4; ++ ++ DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, ++ src3, src4, src5, src6); ++ DUP4_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src5, src4, src6, ++ src5, src32_l, src43_l, src54_l, src65_l); ++ DUP4_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src5, src4, src6, ++ src5, src32_h, src43_h, src54_h, src65_h); ++ ++ tmp0 = FILT_4TAP_DPADD_S_H(src10_l, src32_l, filt0, filt1); ++ tmp1 = FILT_4TAP_DPADD_S_H(src21_l, src43_l, filt0, filt1); ++ tmp2 = FILT_4TAP_DPADD_S_H(src10_h, src32_h, filt0, filt1); ++ tmp3 = FILT_4TAP_DPADD_S_H(src21_h, src43_h, filt0, filt1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ ++ __lsx_vst(tmp0, dst, 0); ++ dst += dst_stride; ++ __lsx_vst(tmp1, dst, 0); ++ dst += dst_stride; ++ ++ tmp0 = FILT_4TAP_DPADD_S_H(src32_l, src54_l, filt0, filt1); ++ tmp1 = FILT_4TAP_DPADD_S_H(src43_l, src65_l, filt0, filt1); ++ tmp2 = FILT_4TAP_DPADD_S_H(src32_h, src54_h, filt0, filt1); ++ tmp3 = FILT_4TAP_DPADD_S_H(src43_h, src65_h, filt0, filt1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ ++ __lsx_vst(tmp0, dst, 0); ++ dst += dst_stride; ++ __lsx_vst(tmp1, dst, 0); ++ dst += dst_stride; ++ ++ src10_l = src54_l; ++ src21_l = src65_l; ++ src10_h = src54_h; ++ src21_h = src65_h; ++ src2 = src6; ++ } ++} ++ ++void ff_put_vp8_epel8_h6v4_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int height, int mx, int my) ++{ ++ uint32_t loop_cnt; ++ const int8_t *filter_horiz = subpel_filters_lsx[mx - 1]; ++ const int8_t *filter_vert = subpel_filters_lsx[my - 1]; ++ __m128i src0, src1, src2, src3, src4, src5, src6; ++ __m128i filt_hz0, filt_hz1, filt_hz2, mask0, mask1, mask2; ++ __m128i filt_vt0, filt_vt1, hz_out0, hz_out1, hz_out2, hz_out3; ++ __m128i tmp0, tmp1, tmp2, tmp3, vec0, vec1, vec2, vec3; ++ ++ ptrdiff_t src_stride2 = src_stride << 1; ++ ptrdiff_t src_stride3 = src_stride2 + src_stride; ++ ptrdiff_t src_stride4 = src_stride2 << 1; ++ ++ mask0 = __lsx_vld(mc_filt_mask_arr, 0); ++ src -= (2 + src_stride); ++ ++ /* rearranging filter */ ++ DUP2_ARG2(__lsx_vldrepl_h, filter_horiz, 0, filter_horiz, 2, filt_hz0, filt_hz1); ++ filt_hz2 = __lsx_vldrepl_h(filter_horiz, 4); ++ ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ src2 = __lsx_vld(src + src_stride2, 0); ++ src += src_stride3; ++ ++ DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); ++ src2 = __lsx_vxori_b(src2, 128); ++ hz_out0 = HORIZ_6TAP_FILT(src0, src0, mask0, mask1, mask2, filt_hz0, ++ filt_hz1, filt_hz2); ++ hz_out1 = HORIZ_6TAP_FILT(src1, src1, mask0, mask1, mask2, filt_hz0, ++ filt_hz1, filt_hz2); ++ hz_out2 = HORIZ_6TAP_FILT(src2, src2, mask0, mask1, mask2, filt_hz0, ++ filt_hz1, filt_hz2); ++ DUP2_ARG2(__lsx_vpackev_b, hz_out1, hz_out0, hz_out2, hz_out1, vec0, vec2); ++ ++ DUP2_ARG2(__lsx_vldrepl_h, filter_vert, 0, filter_vert, 2, filt_vt0, filt_vt1); ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride2, 0, ++ src + src_stride3, 0, src3, src4, src5, src6); ++ src += src_stride4; ++ ++ DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, ++ src3, src4, src5, src6); ++ ++ hz_out3 = HORIZ_6TAP_FILT(src3, src3, mask0, mask1, mask2, filt_hz0, ++ filt_hz1, filt_hz2); ++ vec1 = __lsx_vpackev_b(hz_out3, hz_out2); ++ tmp0 = FILT_4TAP_DPADD_S_H(vec0, vec1, filt_vt0, filt_vt1); ++ ++ hz_out0 = HORIZ_6TAP_FILT(src4, src4, mask0, mask1, mask2, filt_hz0, ++ filt_hz1, filt_hz2); ++ vec3 = __lsx_vpackev_b(hz_out0, hz_out3); ++ tmp1 = FILT_4TAP_DPADD_S_H(vec2, vec3, filt_vt0, filt_vt1); ++ ++ hz_out1 = HORIZ_6TAP_FILT(src5, src5, mask0, mask1, mask2, filt_hz0, ++ filt_hz1, filt_hz2); ++ vec0 = __lsx_vpackev_b(hz_out1, hz_out0); ++ tmp2 = FILT_4TAP_DPADD_S_H(vec1, vec0, filt_vt0, filt_vt1); ++ ++ hz_out2 = HORIZ_6TAP_FILT(src6, src6, mask0, mask1, mask2, filt_hz0, ++ filt_hz1, filt_hz2); ++ DUP2_ARG2(__lsx_vpackev_b, hz_out0, hz_out3, hz_out2, hz_out1, vec1, vec2); ++ tmp3 = FILT_4TAP_DPADD_S_H(vec1, vec2, filt_vt0, filt_vt1); ++ ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 7, tmp3, tmp2, 7, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ ++ __lsx_vstelm_d(tmp0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(tmp0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(tmp1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(tmp1, dst, 0, 1); ++ dst += dst_stride; ++ } ++} ++ ++void ff_put_vp8_epel16_h6v4_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int height, int mx, int my) ++{ ++ int32_t multiple8_cnt; ++ ++ for (multiple8_cnt = 2; multiple8_cnt--;) { ++ ff_put_vp8_epel8_h6v4_lsx(dst, dst_stride, src, src_stride, height, ++ mx, my); ++ src += 8; ++ dst += 8; ++ } ++} ++ ++void ff_put_vp8_epel8_h4v6_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int height, int mx, int my) ++{ ++ uint32_t loop_cnt; ++ const int8_t *filter_horiz = subpel_filters_lsx[mx - 1]; ++ const int8_t *filter_vert = subpel_filters_lsx[my - 1]; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8; ++ __m128i filt_hz0, filt_hz1, mask0, mask1; ++ __m128i filt_vt0, filt_vt1, filt_vt2; ++ __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8; ++ __m128i out0, out1, out2, out3, out4, out5, out6, out7; ++ ++ ptrdiff_t src_stride2 = src_stride << 1; ++ ptrdiff_t src_stride3 = src_stride2 + src_stride; ++ ptrdiff_t src_stride4 = src_stride2 << 1; ++ ++ mask0 = __lsx_vld(mc_filt_mask_arr, 0); ++ src -= (1 + src_stride2); ++ ++ /* rearranging filter */ ++ DUP2_ARG2(__lsx_vldrepl_h, filter_horiz, 0, filter_horiz, 2, filt_hz0, filt_hz1); ++ mask1 = __lsx_vaddi_bu(mask0, 2); ++ ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride2, 0, ++ src + src_stride3, 0, src0, src1, src2, src3); ++ src += src_stride4; ++ src4 = __lsx_vld(src, 0); ++ src += src_stride; ++ ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ src4 = __lsx_vxori_b(src4, 128); ++ ++ tmp0 = HORIZ_4TAP_FILT(src0, src0, mask0, mask1, filt_hz0, filt_hz1); ++ tmp1 = HORIZ_4TAP_FILT(src1, src1, mask0, mask1, filt_hz0, filt_hz1); ++ tmp2 = HORIZ_4TAP_FILT(src2, src2, mask0, mask1, filt_hz0, filt_hz1); ++ tmp3 = HORIZ_4TAP_FILT(src3, src3, mask0, mask1, filt_hz0, filt_hz1); ++ tmp4 = HORIZ_4TAP_FILT(src4, src4, mask0, mask1, filt_hz0, filt_hz1); ++ ++ DUP4_ARG2(__lsx_vpackev_b, tmp1, tmp0, tmp3, tmp2, tmp2, tmp1, ++ tmp4, tmp3, out0, out1, out3, out4); ++ ++ DUP2_ARG2(__lsx_vldrepl_h, filter_vert, 0, filter_vert, 2, filt_vt0, filt_vt1); ++ filt_vt2 = __lsx_vldrepl_h(filter_vert, 4); ++ ++ for (loop_cnt = (height >> 2); loop_cnt--;) { ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride2, 0, ++ src + src_stride3, 0, src5, src6, src7, src8); ++ src += src_stride4; ++ ++ DUP4_ARG2(__lsx_vxori_b, src5, 128, src6, 128, src7, 128, src8, 128, ++ src5, src6, src7, src8); ++ ++ tmp5 = HORIZ_4TAP_FILT(src5, src5, mask0, mask1, filt_hz0, filt_hz1); ++ out2 = __lsx_vpackev_b(tmp5, tmp4); ++ tmp0 = DPADD_SH3_SH(out0, out1, out2, filt_vt0, filt_vt1, filt_vt2); ++ ++ tmp6 = HORIZ_4TAP_FILT(src6, src6, mask0, mask1, filt_hz0, filt_hz1); ++ out5 = __lsx_vpackev_b(tmp6, tmp5); ++ tmp1 = DPADD_SH3_SH(out3, out4, out5, filt_vt0, filt_vt1, filt_vt2); ++ ++ tmp7 = HORIZ_4TAP_FILT(src7, src7, mask0, mask1, filt_hz0, filt_hz1); ++ out6 = __lsx_vpackev_b(tmp7, tmp6); ++ tmp2 = DPADD_SH3_SH(out1, out2, out6, filt_vt0, filt_vt1, filt_vt2); ++ ++ tmp8 = HORIZ_4TAP_FILT(src8, src8, mask0, mask1, filt_hz0, filt_hz1); ++ out7 = __lsx_vpackev_b(tmp8, tmp7); ++ tmp3 = DPADD_SH3_SH(out4, out5, out7, filt_vt0, filt_vt1, filt_vt2); ++ ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 7, tmp3, tmp2, 7, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ ++ __lsx_vstelm_d(tmp0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(tmp0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(tmp1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(tmp1, dst, 0, 1); ++ dst += dst_stride; ++ ++ tmp4 = tmp8; ++ out0 = out2; ++ out1 = out6; ++ out3 = out5; ++ out4 = out7; ++ } ++} ++ ++void ff_put_vp8_epel16_h4v6_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int height, int mx, int my) ++{ ++ int32_t multiple8_cnt; ++ ++ for (multiple8_cnt = 2; multiple8_cnt--;) { ++ ff_put_vp8_epel8_h4v6_lsx(dst, dst_stride, src, src_stride, height, ++ mx, my); ++ src += 8; ++ dst += 8; ++ } ++} ++ ++void ff_put_vp8_pixels8_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int height, int mx, int my) ++{ ++ int32_t cnt; ++ __m128i src0, src1, src2, src3; ++ ++ ptrdiff_t src_stride2 = src_stride << 1; ++ ptrdiff_t src_stride3 = src_stride2 + src_stride; ++ ptrdiff_t src_stride4 = src_stride2 << 1; ++ ++ if (0 == height % 8) { ++ for (cnt = height >> 3; cnt--;) { ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride2, 0, ++ src + src_stride3, 0, src0, src1, src2, src3); ++ src += src_stride4; ++ ++ __lsx_vstelm_d(src0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(src1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(src2, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(src3, dst, 0, 0); ++ dst += dst_stride; ++ ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride2, 0, ++ src + src_stride3, 0, src0, src1, src2, src3); ++ src += src_stride4; ++ ++ __lsx_vstelm_d(src0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(src1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(src2, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(src3, dst, 0, 0); ++ dst += dst_stride; ++ } ++ } else if( 0 == height % 4) { ++ for (cnt = (height >> 2); cnt--;) { ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride2, 0, ++ src + src_stride3, 0, src0, src1, src2, src3); ++ src += src_stride4; ++ ++ __lsx_vstelm_d(src0, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(src1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(src2, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(src3, dst, 0, 0); ++ dst += dst_stride; ++ } ++ } ++} ++ ++void ff_put_vp8_pixels16_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int height, int mx, int my) ++{ ++ int32_t width = 16; ++ int32_t cnt, loop_cnt; ++ uint8_t *src_tmp, *dst_tmp; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ ++ ptrdiff_t src_stride2 = src_stride << 1; ++ ptrdiff_t src_stride3 = src_stride2 + src_stride; ++ ptrdiff_t src_stride4 = src_stride2 << 1; ++ ++ ptrdiff_t dst_stride2 = dst_stride << 1; ++ ptrdiff_t dst_stride3 = dst_stride2 + dst_stride; ++ ptrdiff_t dst_stride4 = dst_stride2 << 1; ++ ++ if (0 == height % 8) { ++ for (cnt = (width >> 4); cnt--;) { ++ src_tmp = src; ++ dst_tmp = dst; ++ for (loop_cnt = (height >> 3); loop_cnt--;) { ++ DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride2, 0, src_tmp + src_stride3, 0, ++ src4, src5, src6, src7); ++ src_tmp += src_stride4; ++ ++ __lsx_vst(src4, dst_tmp, 0); ++ __lsx_vst(src5, dst_tmp + dst_stride, 0); ++ __lsx_vst(src6, dst_tmp + dst_stride2, 0); ++ __lsx_vst(src7, dst_tmp + dst_stride3, 0); ++ dst_tmp += dst_stride4; ++ ++ DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, ++ src_tmp + src_stride2, 0, src_tmp + src_stride3, 0, ++ src4, src5, src6, src7); ++ src_tmp += src_stride4; ++ ++ __lsx_vst(src4, dst_tmp, 0); ++ __lsx_vst(src5, dst_tmp + dst_stride, 0); ++ __lsx_vst(src6, dst_tmp + dst_stride2, 0); ++ __lsx_vst(src7, dst_tmp + dst_stride3, 0); ++ dst_tmp += dst_stride4; ++ } ++ src += 16; ++ dst += 16; ++ } ++ } else if (0 == height % 4) { ++ for (cnt = (height >> 2); cnt--;) { ++ DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride2, 0, ++ src + src_stride3, 0, src0, src1, src2, src3); ++ src += 4 * src_stride4; ++ ++ __lsx_vst(src0, dst, 0); ++ __lsx_vst(src1, dst + dst_stride, 0); ++ __lsx_vst(src2, dst + dst_stride2, 0); ++ __lsx_vst(src3, dst + dst_stride3, 0); ++ dst += dst_stride4; ++ } ++ } ++} +diff --git a/libavcodec/loongarch/vp8dsp_init_loongarch.c b/libavcodec/loongarch/vp8dsp_init_loongarch.c +index 17a7c4065c..7f36fb90c1 100644 +--- a/libavcodec/loongarch/vp8dsp_init_loongarch.c ++++ b/libavcodec/loongarch/vp8dsp_init_loongarch.c +@@ -28,14 +28,35 @@ + #include "libavcodec/vp8dsp.h" + #include "vp8dsp_loongarch.h" + ++#define VP8_MC_LOONGARCH_FUNC(IDX, SIZE) \ ++ dsp->put_vp8_epel_pixels_tab[IDX][0][2] = ff_put_vp8_epel##SIZE##_h6_lsx; \ ++ dsp->put_vp8_epel_pixels_tab[IDX][1][0] = ff_put_vp8_epel##SIZE##_v4_lsx; \ ++ dsp->put_vp8_epel_pixels_tab[IDX][1][2] = ff_put_vp8_epel##SIZE##_h6v4_lsx; \ ++ dsp->put_vp8_epel_pixels_tab[IDX][2][0] = ff_put_vp8_epel##SIZE##_v6_lsx; \ ++ dsp->put_vp8_epel_pixels_tab[IDX][2][1] = ff_put_vp8_epel##SIZE##_h4v6_lsx; \ ++ dsp->put_vp8_epel_pixels_tab[IDX][2][2] = ff_put_vp8_epel##SIZE##_h6v6_lsx; ++ ++#define VP8_MC_LOONGARCH_COPY(IDX, SIZE) \ ++ dsp->put_vp8_epel_pixels_tab[IDX][0][0] = ff_put_vp8_pixels##SIZE##_lsx; \ ++ dsp->put_vp8_bilinear_pixels_tab[IDX][0][0] = ff_put_vp8_pixels##SIZE##_lsx; ++ + av_cold void ff_vp8dsp_init_loongarch(VP8DSPContext *dsp) + { + int cpu_flags = av_get_cpu_flags(); + + if (have_lsx(cpu_flags)) { ++ VP8_MC_LOONGARCH_FUNC(0, 16); ++ VP8_MC_LOONGARCH_FUNC(1, 8); ++ ++ VP8_MC_LOONGARCH_COPY(0, 16); ++ VP8_MC_LOONGARCH_COPY(1, 8); ++ + dsp->vp8_v_loop_filter16y = ff_vp8_v_loop_filter16_lsx; + dsp->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16_lsx; + dsp->vp8_v_loop_filter8uv = ff_vp8_v_loop_filter8uv_lsx; + dsp->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_lsx; ++ ++ dsp->vp8_v_loop_filter16y_inner = ff_vp8_v_loop_filter16_inner_lsx; ++ dsp->vp8_h_loop_filter16y_inner = ff_vp8_h_loop_filter16_inner_lsx; + } + } +diff --git a/libavcodec/loongarch/vp8dsp_loongarch.h b/libavcodec/loongarch/vp8dsp_loongarch.h +index f73ab784cc..87e9509db9 100644 +--- a/libavcodec/loongarch/vp8dsp_loongarch.h ++++ b/libavcodec/loongarch/vp8dsp_loongarch.h +@@ -24,7 +24,58 @@ + + #include "libavcodec/vp8dsp.h" + ++void ff_put_vp8_pixels8_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int h, int x, int y); ++void ff_put_vp8_pixels16_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int h, int x, int y); ++ ++void ff_put_vp8_epel16_h6_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int h, int mx, int my); ++void ff_put_vp8_epel16_v4_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int h, int mx, int my); ++void ff_put_vp8_epel16_v6_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int h, int mx, int my); ++void ff_put_vp8_epel16_h6v4_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int h, int mx, int my); ++void ff_put_vp8_epel16_h4v6_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int h, int mx, int my); ++void ff_put_vp8_epel16_h6v6_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int h, int mx, int my); ++ ++void ff_put_vp8_epel8_v4_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int h, int mx, int my); ++void ff_put_vp8_epel8_v6_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int h, int mx, int my); ++void ff_put_vp8_epel8_h6v4_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int h, int mx, int my); ++void ff_put_vp8_epel8_h4v6_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int h, int mx, int my); ++void ff_put_vp8_epel8_h6v6_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int h, int mx, int my); ++ ++void ff_put_vp8_epel8_h6_lsx(uint8_t *dst, ptrdiff_t dst_stride, ++ uint8_t *src, ptrdiff_t src_stride, ++ int h, int mx, int my); ++ + /* loop filter */ ++void ff_vp8_v_loop_filter16_inner_lsx(uint8_t *dst, ptrdiff_t stride, ++ int32_t e, int32_t i, int32_t h); ++void ff_vp8_h_loop_filter16_inner_lsx(uint8_t *src, ptrdiff_t stride, ++ int32_t e, int32_t i, int32_t h); ++ + void ff_vp8_v_loop_filter16_lsx(uint8_t *dst, ptrdiff_t stride, + int flim_e, int flim_i, int hev_thresh); + void ff_vp8_h_loop_filter16_lsx(uint8_t *dst, ptrdiff_t stride, +diff --git a/libavcodec/loongarch/vp9_idct_lsx.c b/libavcodec/loongarch/vp9_idct_lsx.c +index b9412c0b5d..b977687237 100644 +--- a/libavcodec/loongarch/vp9_idct_lsx.c ++++ b/libavcodec/loongarch/vp9_idct_lsx.c +@@ -20,7 +20,7 @@ + */ + + #include "libavcodec/vp9dsp.h" +-#include "libavutil/loongarch/generic_macros_lsx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + #include "vp9dsp_loongarch.h" + #include "libavutil/attributes.h" + +@@ -77,15 +77,13 @@ static const int32_t sinpi_4_9 = 15212; + s0_m = __lsx_vilvh_h(__lsx_vneg_h(reg1), reg0); \ + s3_m = __lsx_vilvl_h(reg0, reg1); \ + s2_m = __lsx_vilvh_h(reg0, reg1); \ +- LSX_DUP2_ARG2(__lsx_dp2_w_h, s1_m, k0_m, s0_m, k0_m, s1_m, \ +- s0_m); \ +- LSX_DUP2_ARG2(__lsx_vsrari_w, s1_m, VP9_DCT_CONST_BITS, \ +- s0_m, VP9_DCT_CONST_BITS, s1_m, s0_m); \ ++ DUP2_ARG2(__lsx_vdp2_w_h, s1_m, k0_m, s0_m, k0_m, s1_m, s0_m); \ ++ DUP2_ARG2(__lsx_vsrari_w, s1_m, VP9_DCT_CONST_BITS, \ ++ s0_m, VP9_DCT_CONST_BITS, s1_m, s0_m); \ + out0 = __lsx_vpickev_h(s0_m, s1_m); \ +- LSX_DUP2_ARG2(__lsx_dp2_w_h, s3_m, k0_m, s2_m, k0_m, s1_m, \ +- s0_m); \ +- LSX_DUP2_ARG2(__lsx_vsrari_w, s1_m, VP9_DCT_CONST_BITS, \ +- s0_m, VP9_DCT_CONST_BITS, s1_m, s0_m); \ ++ DUP2_ARG2(__lsx_vdp2_w_h, s3_m, k0_m, s2_m, k0_m, s1_m, s0_m); \ ++ DUP2_ARG2(__lsx_vsrari_w, s1_m, VP9_DCT_CONST_BITS, \ ++ s0_m, VP9_DCT_CONST_BITS, s1_m, s0_m); \ + out1 = __lsx_vpickev_h(s0_m, s1_m); \ + } + +@@ -100,34 +98,28 @@ static const int32_t sinpi_4_9 = 15212; + out0_m; \ + } ) + +-#define VP9_ADDBLK_ST8x4_UB(dst, dst_stride, in0, in1, in2, in3) \ +-{ \ +- uint8_t *dst_m = (uint8_t *) (dst); \ +- __m128i dst0_m, dst1_m, dst2_m, dst3_m; \ +- __m128i tmp0_m, tmp1_m; \ +- __m128i res0_m, res1_m, res2_m, res3_m; \ +- __m128i zero_m = __lsx_vldi(0); \ +- LSX_DUP4_ARG2(__lsx_vld, \ +- dst_m, 0, \ +- dst_m + dst_stride, 0, \ +- dst_m + 2 * dst_stride, 0, \ +- dst_m + 3 * dst_stride, 0, \ +- dst0_m, dst1_m, dst2_m, dst3_m); \ +- LSX_DUP4_ARG2(__lsx_vilvl_b, \ +- zero_m, dst0_m, zero_m, dst1_m, zero_m, dst2_m, \ +- zero_m, dst3_m, res0_m, res1_m, res2_m, res3_m); \ +- LSX_DUP4_ARG2(__lsx_vadd_h, \ +- res0_m, in0, res1_m, in1, res2_m, in2, res3_m, \ +- in3, res0_m, res1_m, res2_m, res3_m); \ +- LSX_DUP4_ARG1(__lsx_clamp255_h, \ +- res0_m, res1_m, res2_m, res3_m, \ +- res0_m, res1_m, res2_m, res3_m); \ +- LSX_DUP2_ARG2(__lsx_vpickev_b, \ +- res1_m, res0_m, res3_m, res2_m, tmp0_m, tmp1_m); \ +- __lsx_vstelm_d(tmp0_m, dst_m, 0, 0); \ +- __lsx_vstelm_d(tmp0_m, dst_m + dst_stride, 0, 1); \ +- __lsx_vstelm_d(tmp1_m, dst_m + 2 * dst_stride, 0, 0); \ +- __lsx_vstelm_d(tmp1_m, dst_m + 3 * dst_stride, 0, 1); \ ++#define VP9_ADDBLK_ST8x4_UB(dst, dst_stride, in0, in1, in2, in3) \ ++{ \ ++ uint8_t *dst_m = (uint8_t *) (dst); \ ++ __m128i dst0_m, dst1_m, dst2_m, dst3_m; \ ++ __m128i tmp0_m, tmp1_m; \ ++ __m128i res0_m, res1_m, res2_m, res3_m; \ ++ __m128i zero_m = __lsx_vldi(0); \ ++ DUP4_ARG2(__lsx_vld, dst_m, 0, dst_m + dst_stride, 0, \ ++ dst_m + 2 * dst_stride, 0, dst_m + 3 * dst_stride, 0, \ ++ dst0_m, dst1_m, dst2_m, dst3_m); \ ++ DUP4_ARG2(__lsx_vilvl_b, zero_m, dst0_m, zero_m, dst1_m, zero_m, \ ++ dst2_m, zero_m, dst3_m, res0_m, res1_m, res2_m, res3_m);\ ++ DUP4_ARG2(__lsx_vadd_h, res0_m, in0, res1_m, in1, res2_m, in2, \ ++ res3_m, in3, res0_m, res1_m, res2_m, res3_m); \ ++ DUP4_ARG1(__lsx_vclip255_h, res0_m, res1_m, res2_m, res3_m, \ ++ res0_m, res1_m, res2_m, res3_m); \ ++ DUP2_ARG2(__lsx_vpickev_b, res1_m, res0_m, res3_m, res2_m, \ ++ tmp0_m, tmp1_m); \ ++ __lsx_vstelm_d(tmp0_m, dst_m, 0, 0); \ ++ __lsx_vstelm_d(tmp0_m, dst_m + dst_stride, 0, 1); \ ++ __lsx_vstelm_d(tmp1_m, dst_m + 2 * dst_stride, 0, 0); \ ++ __lsx_vstelm_d(tmp1_m, dst_m + 3 * dst_stride, 0, 1); \ + } + + #define VP9_UNPCK_UB_SH(in, out_h, out_l) \ +@@ -144,8 +136,8 @@ static const int32_t sinpi_4_9 = 15212; + __m128i tmp0_n, tmp1_n, tmp2_n, tmp3_n; \ + __m128i zero_m = __lsx_vldi(0); \ + \ +- LSX_DUP4_ARG2(__lsx_vilvl_h, in1, in0, in3, in2, in5, in4, in7, in6, \ +- tmp0_n, tmp1_n, tmp2_n, tmp3_n); \ ++ DUP4_ARG2(__lsx_vilvl_h, in1, in0, in3, in2, in5, in4, in7, in6, \ ++ tmp0_n, tmp1_n, tmp2_n, tmp3_n); \ + tmp0_m = __lsx_vilvl_w(tmp1_n, tmp0_n); \ + tmp2_m = __lsx_vilvh_w(tmp1_n, tmp0_n); \ + tmp1_m = __lsx_vilvl_w(tmp3_n, tmp2_n); \ +@@ -173,42 +165,28 @@ static const int32_t sinpi_4_9 = 15212; + madd_s0_m = __lsx_vilvh_h(inp1, inp0); \ + madd_s3_m = __lsx_vilvl_h(inp3, inp2); \ + madd_s2_m = __lsx_vilvh_h(inp3, inp2); \ +- LSX_DUP4_ARG2(__lsx_dp2_w_h, \ +- madd_s1_m, cst0, madd_s0_m, cst0, \ +- madd_s1_m, cst1, madd_s0_m, cst1, \ +- tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ +- LSX_DUP4_ARG2(__lsx_vsrari_w, \ +- tmp0_m, VP9_DCT_CONST_BITS, \ +- tmp1_m, VP9_DCT_CONST_BITS, \ +- tmp2_m, VP9_DCT_CONST_BITS, \ +- tmp3_m, VP9_DCT_CONST_BITS, \ +- tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ +- LSX_DUP2_ARG2(__lsx_vpickev_h, tmp1_m, tmp0_m, tmp3_m, tmp2_m, \ +- out0, out1); \ +- LSX_DUP4_ARG2(__lsx_dp2_w_h, \ +- madd_s3_m, cst2, madd_s2_m, cst2, \ +- madd_s3_m, cst3, madd_s2_m, cst3, \ +- tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ +- LSX_DUP4_ARG2(__lsx_vsrari_w, \ +- tmp0_m, VP9_DCT_CONST_BITS, \ +- tmp1_m, VP9_DCT_CONST_BITS, \ +- tmp2_m, VP9_DCT_CONST_BITS, \ +- tmp3_m, VP9_DCT_CONST_BITS, \ +- tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ +- LSX_DUP2_ARG2(__lsx_vpickev_h, tmp1_m, tmp0_m, tmp3_m, tmp2_m, \ +- out2, out3); \ ++ DUP4_ARG2(__lsx_vdp2_w_h, madd_s1_m, cst0, madd_s0_m, cst0, \ ++ madd_s1_m, cst1, madd_s0_m, cst1, tmp0_m, tmp1_m, tmp2_m, tmp3_m);\ ++ DUP4_ARG2(__lsx_vsrari_w, tmp0_m, VP9_DCT_CONST_BITS, \ ++ tmp1_m, VP9_DCT_CONST_BITS, tmp2_m, VP9_DCT_CONST_BITS, \ ++ tmp3_m, VP9_DCT_CONST_BITS, tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ ++ DUP2_ARG2(__lsx_vpickev_h, tmp1_m, tmp0_m, tmp3_m, tmp2_m, out0, out1); \ ++ DUP4_ARG2(__lsx_vdp2_w_h, madd_s3_m, cst2, madd_s2_m, cst2, \ ++ madd_s3_m, cst3, madd_s2_m, cst3, tmp0_m, tmp1_m, tmp2_m, tmp3_m);\ ++ DUP4_ARG2(__lsx_vsrari_w, tmp0_m, VP9_DCT_CONST_BITS, \ ++ tmp1_m, VP9_DCT_CONST_BITS, tmp2_m, VP9_DCT_CONST_BITS, \ ++ tmp3_m, VP9_DCT_CONST_BITS, tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ ++ DUP2_ARG2(__lsx_vpickev_h, tmp1_m, tmp0_m, tmp3_m, tmp2_m, out2, out3); \ + } + +-#define VP9_SET_CONST_PAIR(mask_h, idx1_h, idx2_h) \ +-( { \ +- __m128i c0_m, c1_m; \ +- \ +- LSX_DUP2_ARG2(__lsx_vreplvei_h, \ +- mask_h, idx1_h, mask_h, idx2_h, \ +- c0_m, c1_m); \ +- c0_m = __lsx_vpackev_h(c1_m, c0_m); \ +- \ +- c0_m; \ ++#define VP9_SET_CONST_PAIR(mask_h, idx1_h, idx2_h) \ ++( { \ ++ __m128i c0_m, c1_m; \ ++ \ ++ DUP2_ARG2(__lsx_vreplvei_h, mask_h, idx1_h, mask_h, idx2_h, c0_m, c1_m); \ ++ c0_m = __lsx_vpackev_h(c1_m, c0_m); \ ++ \ ++ c0_m; \ + } ) + + /* idct 8x8 macro */ +@@ -226,29 +204,26 @@ static const int32_t sinpi_4_9 = 15212; + k2_m = VP9_SET_CONST_PAIR(mask_m, 6, 3); \ + k3_m = VP9_SET_CONST_PAIR(mask_m, 3, 2); \ + VP9_MADD(in1, in7, in3, in5, k0_m, k1_m, k2_m, k3_m, in1, in7, in3, in5); \ +- LSX_DUP2_ARG2(__lsx_vsub_h, in1, in3, in7, in5, res0_m, res1_m); \ ++ DUP2_ARG2(__lsx_vsub_h, in1, in3, in7, in5, res0_m, res1_m); \ + k0_m = VP9_SET_CONST_PAIR(mask_m, 4, 7); \ + k1_m = __lsx_vreplvei_h(mask_m, 4); \ + \ + res2_m = __lsx_vilvl_h(res0_m, res1_m); \ + res3_m = __lsx_vilvh_h(res0_m, res1_m); \ +- LSX_DUP4_ARG2(__lsx_dp2_w_h, \ +- res2_m, k0_m, res3_m, k0_m, res2_m, k1_m, res3_m, k1_m, \ +- tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ +- LSX_DUP4_ARG2(__lsx_vsrari_w, \ +- tmp0_m, VP9_DCT_CONST_BITS, tmp1_m, VP9_DCT_CONST_BITS, \ +- tmp2_m, VP9_DCT_CONST_BITS, tmp3_m, VP9_DCT_CONST_BITS, \ +- tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ ++ DUP4_ARG2(__lsx_vdp2_w_h, res2_m, k0_m, res3_m, k0_m, res2_m, k1_m, \ ++ res3_m, k1_m, tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ ++ DUP4_ARG2(__lsx_vsrari_w, tmp0_m, VP9_DCT_CONST_BITS, \ ++ tmp1_m, VP9_DCT_CONST_BITS, tmp2_m, VP9_DCT_CONST_BITS, \ ++ tmp3_m, VP9_DCT_CONST_BITS, tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ + tp4_m = __lsx_vadd_h(in1, in3); \ +- LSX_DUP2_ARG2(__lsx_vpickev_h, tmp1_m, tmp0_m, tmp3_m, tmp2_m, \ +- tp5_m, tp6_m); \ ++ DUP2_ARG2(__lsx_vpickev_h, tmp1_m, tmp0_m, tmp3_m, tmp2_m, tp5_m, tp6_m); \ + tp7_m = __lsx_vadd_h(in7, in5); \ + k2_m = VP9_SET_COSPI_PAIR(cospi_24_64, -cospi_8_64); \ + k3_m = VP9_SET_COSPI_PAIR(cospi_8_64, cospi_24_64); \ + VP9_MADD(in0, in4, in2, in6, k1_m, k0_m, k2_m, k3_m, \ + in0, in4, in2, in6); \ +- BUTTERFLY_4_H(in0, in4, in2, in6, tp0_m, tp1_m, tp2_m, tp3_m); \ +- BUTTERFLY_8_H(tp0_m, tp1_m, tp2_m, tp3_m, tp4_m, tp5_m, tp6_m, tp7_m, \ ++ LSX_BUTTERFLY_4_H(in0, in4, in2, in6, tp0_m, tp1_m, tp2_m, tp3_m); \ ++ LSX_BUTTERFLY_8_H(tp0_m, tp1_m, tp2_m, tp3_m, tp4_m, tp5_m, tp6_m, tp7_m, \ + out0, out1, out2, out3, out4, out5, out6, out7); \ + } + +@@ -280,12 +255,8 @@ static void vp9_idct8x8_12_colcol_addblk_lsx(int16_t *input, uint8_t *dst, + __m128i zero = __lsx_vldi(0); + + /* load vector elements of 8x8 block */ +- LSX_DUP4_ARG2(__lsx_vld, +- input, 0, input, 16, input, 32, input, 48, +- in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vld, +- input, 64, input, 80, input, 96, input, 112, +- in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vld, input, 0, input, 16, input, 32, input, 48, in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, input, 64, input, 80, input, 96, input, 112, in4, in5, in6, in7); + __lsx_vst(zero, input, 0); + __lsx_vst(zero, input, 16); + __lsx_vst(zero, input, 32); +@@ -294,73 +265,55 @@ static void vp9_idct8x8_12_colcol_addblk_lsx(int16_t *input, uint8_t *dst, + __lsx_vst(zero, input, 80); + __lsx_vst(zero, input, 96); + __lsx_vst(zero, input, 112); +- LSX_DUP4_ARG2(__lsx_vilvl_d, +- in1, in0, in3, in2, in5, in4, in7, in6, +- in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vilvl_d,in1, in0, in3, in2, in5, in4, in7, in6, in0, in1, in2, in3); + + /* stage1 */ +- LSX_DUP2_ARG2(__lsx_vilvh_h, in3, in0, in2, in1, s0, s1); ++ DUP2_ARG2(__lsx_vilvh_h, in3, in0, in2, in1, s0, s1); + k0 = VP9_SET_COSPI_PAIR(cospi_28_64, -cospi_4_64); + k1 = VP9_SET_COSPI_PAIR(cospi_4_64, cospi_28_64); + k2 = VP9_SET_COSPI_PAIR(-cospi_20_64, cospi_12_64); + k3 = VP9_SET_COSPI_PAIR(cospi_12_64, cospi_20_64); +- LSX_DUP4_ARG2(__lsx_dp2_w_h, s0, k0, s0, k1, s1, k2, s1, k3, +- tmp0, tmp1, tmp2, tmp3); +- LSX_DUP4_ARG2(__lsx_vsrari_w, +- tmp0, VP9_DCT_CONST_BITS, +- tmp1, VP9_DCT_CONST_BITS, +- tmp2, VP9_DCT_CONST_BITS, +- tmp3, VP9_DCT_CONST_BITS, +- tmp0, tmp1, tmp2, tmp3); +- LSX_DUP4_ARG2(__lsx_vpickev_h, +- zero, tmp0, zero, tmp1, +- zero, tmp2, zero, tmp3, +- s0, s1, s2, s3); +- BUTTERFLY_4_H(s0, s1, s3, s2, s4, s7, s6, s5); ++ DUP4_ARG2(__lsx_vdp2_w_h, s0, k0, s0, k1, s1, k2, s1, k3, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vsrari_w, tmp0, VP9_DCT_CONST_BITS, tmp1, VP9_DCT_CONST_BITS, ++ tmp2, VP9_DCT_CONST_BITS, tmp3, VP9_DCT_CONST_BITS, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vpickev_h, zero, tmp0, zero, tmp1, zero, tmp2, zero, tmp3, ++ s0, s1, s2, s3); ++ LSX_BUTTERFLY_4_H(s0, s1, s3, s2, s4, s7, s6, s5); + + /* stage2 */ +- LSX_DUP2_ARG2(__lsx_vilvl_h, in3, in1, in2, in0, s1, s0); ++ DUP2_ARG2(__lsx_vilvl_h, in3, in1, in2, in0, s1, s0); + k0 = VP9_SET_COSPI_PAIR(cospi_16_64, cospi_16_64); + k1 = VP9_SET_COSPI_PAIR(cospi_16_64, -cospi_16_64); + k2 = VP9_SET_COSPI_PAIR(cospi_24_64, -cospi_8_64); + k3 = VP9_SET_COSPI_PAIR(cospi_8_64, cospi_24_64); +- LSX_DUP4_ARG2(__lsx_dp2_w_h, s0, k0, s0, k1, s1, k2, s1, k3, +- tmp0, tmp1, tmp2, tmp3); +- LSX_DUP4_ARG2(__lsx_vsrari_w, +- tmp0, VP9_DCT_CONST_BITS, +- tmp1, VP9_DCT_CONST_BITS, +- tmp2, VP9_DCT_CONST_BITS, +- tmp3, VP9_DCT_CONST_BITS, ++ DUP4_ARG2(__lsx_vdp2_w_h, s0, k0, s0, k1, s1, k2, s1, k3, + tmp0, tmp1, tmp2, tmp3); +- LSX_DUP4_ARG2(__lsx_vpickev_h, +- zero, tmp0, zero, tmp1, +- zero, tmp2, zero, tmp3, +- s0, s1, s2, s3); +- BUTTERFLY_4_H(s0, s1, s2, s3, m0, m1, m2, m3); ++ DUP4_ARG2(__lsx_vsrari_w, tmp0, VP9_DCT_CONST_BITS, tmp1, VP9_DCT_CONST_BITS, ++ tmp2, VP9_DCT_CONST_BITS, tmp3, VP9_DCT_CONST_BITS, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vpickev_h, zero, tmp0, zero, tmp1, zero, tmp2, zero, tmp3, ++ s0, s1, s2, s3); ++ LSX_BUTTERFLY_4_H(s0, s1, s2, s3, m0, m1, m2, m3); + + /* stage3 */ + s0 = __lsx_vilvl_h(s6, s5); + + k1 = VP9_SET_COSPI_PAIR(-cospi_16_64, cospi_16_64); +- LSX_DUP2_ARG2(__lsx_dp2_w_h, s0, k1, s0, k0, tmp0, tmp1); +- LSX_DUP2_ARG2(__lsx_vsrari_w, +- tmp0, VP9_DCT_CONST_BITS, tmp1, +- VP9_DCT_CONST_BITS, tmp0, tmp1); +- LSX_DUP2_ARG2(__lsx_vpickev_h, zero, tmp0, zero, tmp1, s2, s3); ++ DUP2_ARG2(__lsx_vdp2_w_h, s0, k1, s0, k0, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vsrari_w, tmp0, VP9_DCT_CONST_BITS, tmp1, ++ VP9_DCT_CONST_BITS, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vpickev_h, zero, tmp0, zero, tmp1, s2, s3); + + /* stage4 */ +- BUTTERFLY_8_H(m0, m1, m2, m3, s4, s2, s3, s7, +- in0, in1, in2, in3, in4, in5, in6, in7); ++ LSX_BUTTERFLY_8_H(m0, m1, m2, m3, s4, s2, s3, s7, ++ in0, in1, in2, in3, in4, in5, in6, in7); + VP9_ILVLTRANS4x8_H(in0, in1, in2, in3, in4, in5, in6, in7, + in0, in1, in2, in3, in4, in5, in6, in7); + VP9_IDCT8x8_1D(in0, in1, in2, in3, in4, in5, in6, in7, + in0, in1, in2, in3, in4, in5, in6, in7); + + /* final rounding (add 2^4, divide by 2^5) and shift */ +- LSX_DUP4_ARG2(__lsx_vsrari_h, in0 , 5, in1, 5, in2, 5, in3, 5, +- in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vsrari_h, in4 , 5, in5, 5, in6, 5, in7, 5, +- in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vsrari_h, in0 , 5, in1, 5, in2, 5, in3, 5, in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vsrari_h, in4 , 5, in5, 5, in6, 5, in7, 5, in4, in5, in6, in7); + + /* add block and store 8x8 */ + VP9_ADDBLK_ST8x4_UB(dst, dst_stride, in0, in1, in2, in3); +@@ -375,12 +328,10 @@ static void vp9_idct8x8_colcol_addblk_lsx(int16_t *input, uint8_t *dst, + __m128i zero = __lsx_vldi(0); + + /* load vector elements of 8x8 block */ +- LSX_DUP4_ARG2(__lsx_vld, +- input, 0, input, 16, input, 32, input, 48, +- in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vld, +- input, 64, input, 80, input, 96, input, 112, +- in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vld, input, 0, input, 16, input, 32, input, 48, ++ in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, input, 64, input, 80, input, 96, input, 112, ++ in4, in5, in6, in7); + __lsx_vst(zero, input, 0); + __lsx_vst(zero, input, 16); + __lsx_vst(zero, input, 32); +@@ -393,18 +344,14 @@ static void vp9_idct8x8_colcol_addblk_lsx(int16_t *input, uint8_t *dst, + VP9_IDCT8x8_1D(in0, in1, in2, in3, in4, in5, in6, in7, + in0, in1, in2, in3, in4, in5, in6, in7); + /* columns transform */ +- TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, +- in0, in1, in2, in3, in4, in5, in6, in7); ++ LSX_TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, ++ in0, in1, in2, in3, in4, in5, in6, in7); + /* 1D idct8x8 */ + VP9_IDCT8x8_1D(in0, in1, in2, in3, in4, in5, in6, in7, + in0, in1, in2, in3, in4, in5, in6, in7); + /* final rounding (add 2^4, divide by 2^5) and shift */ +- LSX_DUP4_ARG2(__lsx_vsrari_h, +- in0, 5, in1, 5, in2, 5, in3, 5, +- in0, in1, in2, in3); +- LSX_DUP4_ARG2(__lsx_vsrari_h, +- in4, 5, in5, 5, in6, 5, in7, 5, +- in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vsrari_h, in0, 5, in1, 5, in2, 5, in3, 5, in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vsrari_h, in4, 5, in5, 5, in6, 5, in7, 5, in4, in5, in6, in7); + /* add block and store 8x8 */ + VP9_ADDBLK_ST8x4_UB(dst, dst_stride, in0, in1, in2, in3); + dst += (4 * dst_stride); +@@ -421,22 +368,14 @@ static void vp9_idct16_1d_columns_addblk_lsx(int16_t *input, uint8_t *dst, + __m128i zero = __lsx_vldi(0); + int32_t offset = dst_stride << 2; + +- LSX_DUP4_ARG2(__lsx_vld, +- input, 32*0, input, 32*1, +- input, 32*2, input, 32*3, +- reg0, reg1, reg2, reg3); +- LSX_DUP4_ARG2(__lsx_vld, +- input, 32*4, input, 32*5, +- input, 32*6, input, 32*7, +- reg4, reg5, reg6, reg7); +- LSX_DUP4_ARG2(__lsx_vld, +- input, 32*8, input, 32*9, +- input, 32*10, input, 32*11, +- reg8, reg9, reg10, reg11); +- LSX_DUP4_ARG2(__lsx_vld, +- input, 32*12, input, 32*13, +- input, 32*14, input, 32*15, +- reg12, reg13, reg14, reg15); ++ DUP4_ARG2(__lsx_vld, input, 32*0, input, 32*1, input, 32*2, input, 32*3, ++ reg0, reg1, reg2, reg3); ++ DUP4_ARG2(__lsx_vld, input, 32*4, input, 32*5, input, 32*6, input, 32*7, ++ reg4, reg5, reg6, reg7); ++ DUP4_ARG2(__lsx_vld, input, 32*8, input, 32*9, input, 32*10, input, 32*11, ++ reg8, reg9, reg10, reg11); ++ DUP4_ARG2(__lsx_vld, input, 32*12, input, 32*13, input, 32*14, input, 32*15, ++ reg12, reg13, reg14, reg15); + + __lsx_vst(zero, input, 32*0); + __lsx_vst(zero, input, 32*1); +@@ -457,11 +396,11 @@ static void vp9_idct16_1d_columns_addblk_lsx(int16_t *input, uint8_t *dst, + + VP9_DOTP_CONST_PAIR(reg2, reg14, cospi_28_64, cospi_4_64, reg2, reg14); + VP9_DOTP_CONST_PAIR(reg10, reg6, cospi_12_64, cospi_20_64, reg10, reg6); +- BUTTERFLY_4_H(reg2, reg14, reg6, reg10, loc0, loc1, reg14, reg2); ++ LSX_BUTTERFLY_4_H(reg2, reg14, reg6, reg10, loc0, loc1, reg14, reg2); + VP9_DOTP_CONST_PAIR(reg14, reg2, cospi_16_64, cospi_16_64, loc2, loc3); + VP9_DOTP_CONST_PAIR(reg0, reg8, cospi_16_64, cospi_16_64, reg0, reg8); + VP9_DOTP_CONST_PAIR(reg4, reg12, cospi_24_64, cospi_8_64, reg4, reg12); +- BUTTERFLY_4_H(reg8, reg0, reg4, reg12, reg2, reg6, reg10, reg14); ++ LSX_BUTTERFLY_4_H(reg8, reg0, reg4, reg12, reg2, reg6, reg10, reg14); + + reg0 = __lsx_vsub_h(reg2, loc1); + reg2 = __lsx_vadd_h(reg2, loc1); +@@ -483,7 +422,7 @@ static void vp9_idct16_1d_columns_addblk_lsx(int16_t *input, uint8_t *dst, + + VP9_DOTP_CONST_PAIR(reg5, reg11, cospi_22_64, cospi_10_64, reg5, reg11); + VP9_DOTP_CONST_PAIR(reg13, reg3, cospi_6_64, cospi_26_64, loc0, loc1); +- BUTTERFLY_4_H(loc0, loc1, reg11, reg5, reg13, reg3, reg11, reg5); ++ LSX_BUTTERFLY_4_H(loc0, loc1, reg11, reg5, reg13, reg3, reg11, reg5); + + loc1 = __lsx_vadd_h(reg15, reg3); + reg3 = __lsx_vsub_h(reg15, reg3); +@@ -514,13 +453,13 @@ static void vp9_idct16_1d_columns_addblk_lsx(int16_t *input, uint8_t *dst, + tmp5 = loc1; + + VP9_DOTP_CONST_PAIR(reg5, reg11, cospi_16_64, cospi_16_64, reg5, reg11); +- BUTTERFLY_4_H(reg8, reg10, reg11, reg5, loc0, reg4, reg9, loc1); ++ LSX_BUTTERFLY_4_H(reg8, reg10, reg11, reg5, loc0, reg4, reg9, loc1); + + reg10 = loc0; + reg11 = loc1; + + VP9_DOTP_CONST_PAIR(reg3, reg13, cospi_16_64, cospi_16_64, reg3, reg13); +- BUTTERFLY_4_H(reg12, reg14, reg13, reg3, reg8, reg6, reg7, reg5); ++ LSX_BUTTERFLY_4_H(reg12, reg14, reg13, reg3, reg8, reg6, reg7, reg5); + reg13 = loc2; + + /* Transpose and store the output */ +@@ -528,24 +467,20 @@ static void vp9_idct16_1d_columns_addblk_lsx(int16_t *input, uint8_t *dst, + reg14 = tmp6; + reg3 = tmp7; + +- LSX_DUP4_ARG2(__lsx_vsrari_h, +- reg0, 6, reg2, 6, reg4, 6, reg6, 6, +- reg0, reg2, reg4, reg6); ++ DUP4_ARG2(__lsx_vsrari_h, reg0, 6, reg2, 6, reg4, 6, reg6, 6, ++ reg0, reg2, reg4, reg6); + VP9_ADDBLK_ST8x4_UB(dst, dst_stride, reg0, reg2, reg4, reg6); + dst += offset; +- LSX_DUP4_ARG2(__lsx_vsrari_h, +- reg8, 6, reg10, 6, reg12, 6, reg14, 6, +- reg8, reg10, reg12, reg14); ++ DUP4_ARG2(__lsx_vsrari_h, reg8, 6, reg10, 6, reg12, 6, reg14, 6, ++ reg8, reg10, reg12, reg14); + VP9_ADDBLK_ST8x4_UB(dst, dst_stride, reg8, reg10, reg12, reg14); + dst += offset; +- LSX_DUP4_ARG2(__lsx_vsrari_h, +- reg3, 6, reg5, 6, reg11, 6, reg13, 6, +- reg3, reg5, reg11, reg13); ++ DUP4_ARG2(__lsx_vsrari_h, reg3, 6, reg5, 6, reg11, 6, reg13, 6, ++ reg3, reg5, reg11, reg13); + VP9_ADDBLK_ST8x4_UB(dst, dst_stride, reg3, reg13, reg11, reg5); + dst += offset; +- LSX_DUP4_ARG2(__lsx_vsrari_h, +- reg1, 6, reg7, 6, reg9, 6, reg15, 6, +- reg1, reg7, reg9, reg15); ++ DUP4_ARG2(__lsx_vsrari_h, reg1, 6, reg7, 6, reg9, 6, reg15, 6, ++ reg1, reg7, reg9, reg15); + VP9_ADDBLK_ST8x4_UB(dst, dst_stride, reg7, reg9, reg1, reg15); + } + +@@ -558,22 +493,14 @@ static void vp9_idct16_1d_columns_lsx(int16_t *input, int16_t *output) + __m128i zero = __lsx_vldi(0); + int16_t *offset; + +- LSX_DUP4_ARG2(__lsx_vld, +- input, 32*0, input, 32*1, +- input, 32*2, input, 32*3, +- reg0, reg1, reg2, reg3); +- LSX_DUP4_ARG2(__lsx_vld, +- input, 32*4, input, 32*5, +- input, 32*6, input, 32*7, +- reg4, reg5, reg6, reg7); +- LSX_DUP4_ARG2(__lsx_vld, +- input, 32*8, input, 32*9, +- input, 32*10, input, 32*11, +- reg8, reg9, reg10, reg11); +- LSX_DUP4_ARG2(__lsx_vld, +- input, 32*12, input, 32*13, +- input, 32*14, input, 32*15, +- reg12, reg13, reg14, reg15); ++ DUP4_ARG2(__lsx_vld, input, 32*0, input, 32*1, input, 32*2, input, 32*3, ++ reg0, reg1, reg2, reg3); ++ DUP4_ARG2(__lsx_vld, input, 32*4, input, 32*5, input, 32*6, input, 32*7, ++ reg4, reg5, reg6, reg7); ++ DUP4_ARG2(__lsx_vld, input, 32*8, input, 32*9, input, 32*10, input, 32*11, ++ reg8, reg9, reg10, reg11); ++ DUP4_ARG2(__lsx_vld, input, 32*12, input, 32*13, input, 32*14, input, 32*15, ++ reg12, reg13, reg14, reg15); + + __lsx_vst(zero, input, 32*0); + __lsx_vst(zero, input, 32*1); +@@ -594,11 +521,11 @@ static void vp9_idct16_1d_columns_lsx(int16_t *input, int16_t *output) + + VP9_DOTP_CONST_PAIR(reg2, reg14, cospi_28_64, cospi_4_64, reg2, reg14); + VP9_DOTP_CONST_PAIR(reg10, reg6, cospi_12_64, cospi_20_64, reg10, reg6); +- BUTTERFLY_4_H(reg2, reg14, reg6, reg10, loc0, loc1, reg14, reg2); ++ LSX_BUTTERFLY_4_H(reg2, reg14, reg6, reg10, loc0, loc1, reg14, reg2); + VP9_DOTP_CONST_PAIR(reg14, reg2, cospi_16_64, cospi_16_64, loc2, loc3); + VP9_DOTP_CONST_PAIR(reg0, reg8, cospi_16_64, cospi_16_64, reg0, reg8); + VP9_DOTP_CONST_PAIR(reg4, reg12, cospi_24_64, cospi_8_64, reg4, reg12); +- BUTTERFLY_4_H(reg8, reg0, reg4, reg12, reg2, reg6, reg10, reg14); ++ LSX_BUTTERFLY_4_H(reg8, reg0, reg4, reg12, reg2, reg6, reg10, reg14); + + reg0 = __lsx_vsub_h(reg2, loc1); + reg2 = __lsx_vadd_h(reg2, loc1); +@@ -620,7 +547,7 @@ static void vp9_idct16_1d_columns_lsx(int16_t *input, int16_t *output) + + VP9_DOTP_CONST_PAIR(reg5, reg11, cospi_22_64, cospi_10_64, reg5, reg11); + VP9_DOTP_CONST_PAIR(reg13, reg3, cospi_6_64, cospi_26_64, loc0, loc1); +- BUTTERFLY_4_H(loc0, loc1, reg11, reg5, reg13, reg3, reg11, reg5); ++ LSX_BUTTERFLY_4_H(loc0, loc1, reg11, reg5, reg13, reg3, reg11, reg5); + + loc1 = __lsx_vadd_h(reg15, reg3); + reg3 = __lsx_vsub_h(reg15, reg3); +@@ -652,13 +579,13 @@ static void vp9_idct16_1d_columns_lsx(int16_t *input, int16_t *output) + tmp5 = loc1; + + VP9_DOTP_CONST_PAIR(reg5, reg11, cospi_16_64, cospi_16_64, reg5, reg11); +- BUTTERFLY_4_H(reg8, reg10, reg11, reg5, loc0, reg4, reg9, loc1); ++ LSX_BUTTERFLY_4_H(reg8, reg10, reg11, reg5, loc0, reg4, reg9, loc1); + + reg10 = loc0; + reg11 = loc1; + + VP9_DOTP_CONST_PAIR(reg3, reg13, cospi_16_64, cospi_16_64, reg3, reg13); +- BUTTERFLY_4_H(reg12, reg14, reg13, reg3, reg8, reg6, reg7, reg5); ++ LSX_BUTTERFLY_4_H(reg12, reg14, reg13, reg3, reg8, reg6, reg7, reg5); + reg13 = loc2; + + /* Transpose and store the output */ +@@ -667,8 +594,8 @@ static void vp9_idct16_1d_columns_lsx(int16_t *input, int16_t *output) + reg3 = tmp7; + + /* transpose block */ +- TRANSPOSE8x8_H(reg0, reg2, reg4, reg6, reg8, reg10, reg12, reg14, +- reg0, reg2, reg4, reg6, reg8, reg10, reg12, reg14); ++ LSX_TRANSPOSE8x8_H(reg0, reg2, reg4, reg6, reg8, reg10, reg12, reg14, ++ reg0, reg2, reg4, reg6, reg8, reg10, reg12, reg14); + + __lsx_vst(reg0, output, 32*0); + __lsx_vst(reg2, output, 32*1); +@@ -680,8 +607,8 @@ static void vp9_idct16_1d_columns_lsx(int16_t *input, int16_t *output) + __lsx_vst(reg14, output, 32*7); + + /* transpose block */ +- TRANSPOSE8x8_H(reg3, reg13, reg11, reg5, reg7, reg9, reg1, reg15, +- reg3, reg13, reg11, reg5, reg7, reg9, reg1, reg15); ++ LSX_TRANSPOSE8x8_H(reg3, reg13, reg11, reg5, reg7, reg9, reg1, reg15, ++ reg3, reg13, reg11, reg5, reg7, reg9, reg1, reg15); + + offset = output + 8; + __lsx_vst(reg3, offset, 32*0); +@@ -711,31 +638,20 @@ static void vp9_idct16x16_1_add_lsx(int16_t *input, uint8_t *dst, + vec = __lsx_vreplgr2vr_h(out); + + for (i = 4; i--;) { +- LSX_DUP4_ARG2(__lsx_vld, +- dst, 0, +- dst + dst_stride, 0, +- dst + dst_stride * 2, 0, +- dst + dst_stride * 3, 0, +- dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vld, dst, 0, dst + dst_stride, 0, dst + dst_stride * 2, 0, ++ dst + dst_stride * 3, 0, dst0, dst1, dst2, dst3); + VP9_UNPCK_UB_SH(dst0, res4, res0); + VP9_UNPCK_UB_SH(dst1, res5, res1); + VP9_UNPCK_UB_SH(dst2, res6, res2); + VP9_UNPCK_UB_SH(dst3, res7, res3); +- LSX_DUP4_ARG2(__lsx_vadd_h, +- res0, vec, res1, vec, res2, vec, res3, vec, +- res0, res1, res2, res3); +- LSX_DUP4_ARG2(__lsx_vadd_h, +- res4, vec, res5, vec, res6, vec, res7, vec, +- res4, res5, res6, res7); +- LSX_DUP4_ARG1(__lsx_clamp255_h, +- res0, res1, res2, res3, +- res0, res1, res2, res3); +- LSX_DUP4_ARG1(__lsx_clamp255_h, +- res4, res5, res6, res7, +- res4, res5, res6, res7); +- LSX_DUP4_ARG2(__lsx_vpickev_b, +- res4, res0, res5, res1, res6, res2, res7, res3, +- tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vadd_h, res0, vec, res1, vec, res2, vec, res3, vec, ++ res0, res1, res2, res3); ++ DUP4_ARG2(__lsx_vadd_h, res4, vec, res5, vec, res6, vec, res7, vec, ++ res4, res5, res6, res7); ++ DUP4_ARG1(__lsx_vclip255_h, res0, res1, res2, res3, res0, res1, res2, res3); ++ DUP4_ARG1(__lsx_vclip255_h, res4, res5, res6, res7, res4, res5, res6, res7); ++ DUP4_ARG2(__lsx_vpickev_b, res4, res0, res5, res1, res6, res2, res7, res3, ++ tmp0, tmp1, tmp2, tmp3); + __lsx_vst(tmp0, dst, 0); + __lsx_vst(tmp1, dst + dst_stride, 0); + __lsx_vst(tmp2, dst + dst_stride * 2, 0); +@@ -818,9 +734,8 @@ static void vp9_idct_butterfly_transpose_store(int16_t *tmp_buf, + loc2 = __lsx_vld(tmp_eve_buf, 4 * 16); + loc3 = __lsx_vld(tmp_eve_buf, 12 * 16); + +- LSX_DUP4_ARG2(__lsx_vadd_h, +- loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, +- m0, m4, m2, m6); ++ DUP4_ARG2(__lsx_vadd_h,loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ m0, m4, m2, m6); + + #define SUB(a, b) __lsx_vsub_h(a, b) + +@@ -839,9 +754,8 @@ static void vp9_idct_butterfly_transpose_store(int16_t *tmp_buf, + loc2 = __lsx_vld(tmp_eve_buf, 6 * 16); + loc3 = __lsx_vld(tmp_eve_buf, 14 * 16); + +- LSX_DUP4_ARG2(__lsx_vadd_h, +- loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, +- m1, m5, m3, m7); ++ DUP4_ARG2(__lsx_vadd_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ m1, m5, m3, m7); + + __lsx_vst(SUB(loc0, vec3), tmp_buf, 29 * 16); + __lsx_vst(SUB(loc1, vec2), tmp_buf, 21 * 16); +@@ -858,9 +772,8 @@ static void vp9_idct_butterfly_transpose_store(int16_t *tmp_buf, + loc2 = __lsx_vld(tmp_eve_buf, 5 * 16); + loc3 = __lsx_vld(tmp_eve_buf, 13 * 16); + +- LSX_DUP4_ARG2(__lsx_vadd_h, +- loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, +- n0, n4, n2, n6); ++ DUP4_ARG2(__lsx_vadd_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ n0, n4, n2, n6); + + __lsx_vst(SUB(loc0, vec3), tmp_buf, 30 * 16); + __lsx_vst(SUB(loc1, vec2), tmp_buf, 22 * 16); +@@ -877,9 +790,8 @@ static void vp9_idct_butterfly_transpose_store(int16_t *tmp_buf, + loc2 = __lsx_vld(tmp_eve_buf, 7 * 16); + loc3 = __lsx_vld(tmp_eve_buf, 15 * 16); + +- LSX_DUP4_ARG2(__lsx_vadd_h, +- loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, +- n1, n5, n3, n7); ++ DUP4_ARG2(__lsx_vadd_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ n1, n5, n3, n7); + + __lsx_vst(SUB(loc0, vec3), tmp_buf, 28 * 16); + __lsx_vst(SUB(loc1, vec2), tmp_buf, 20 * 16); +@@ -888,8 +800,8 @@ static void vp9_idct_butterfly_transpose_store(int16_t *tmp_buf, + + /* Transpose : 16 vectors */ + /* 1st & 2nd 8x8 */ +- TRANSPOSE8x8_H(m0, n0, m1, n1, m2, n2, m3, n3, +- m0, n0, m1, n1, m2, n2, m3, n3); ++ LSX_TRANSPOSE8x8_H(m0, n0, m1, n1, m2, n2, m3, n3, ++ m0, n0, m1, n1, m2, n2, m3, n3); + __lsx_vst(m0, dst, 0); + __lsx_vst(n0, dst, 32 * 2); + __lsx_vst(m1, dst, 32 * 4); +@@ -899,8 +811,8 @@ static void vp9_idct_butterfly_transpose_store(int16_t *tmp_buf, + __lsx_vst(m3, dst, 32 * 12); + __lsx_vst(n3, dst, 32 * 14); + +- TRANSPOSE8x8_H(m4, n4, m5, n5, m6, n6, m7, n7, +- m4, n4, m5, n5, m6, n6, m7, n7); ++ LSX_TRANSPOSE8x8_H(m4, n4, m5, n5, m6, n6, m7, n7, ++ m4, n4, m5, n5, m6, n6, m7, n7); + + __lsx_vst(m4, dst, 16); + __lsx_vst(n4, dst, 16 + 32 * 2); +@@ -912,26 +824,18 @@ static void vp9_idct_butterfly_transpose_store(int16_t *tmp_buf, + __lsx_vst(n7, dst, 16 + 32 * 14); + + /* 3rd & 4th 8x8 */ +- LSX_DUP4_ARG2(__lsx_vld, +- tmp_buf, 16 * 16, tmp_buf, 16 * 17, +- tmp_buf, 16 * 18, tmp_buf, 16 * 19, +- m0, n0, m1, n1); +- LSX_DUP4_ARG2(__lsx_vld, +- tmp_buf, 16 * 20, tmp_buf, 16 * 21, +- tmp_buf, 16 * 22, tmp_buf, 16 * 23, +- m2, n2, m3, n3); +- +- LSX_DUP4_ARG2(__lsx_vld, +- tmp_buf, 16 * 24, tmp_buf, 16 * 25, +- tmp_buf, 16 * 26, tmp_buf, 16 * 27, +- m4, n4, m5, n5); +- LSX_DUP4_ARG2(__lsx_vld, +- tmp_buf, 16 * 28, tmp_buf, 16 * 29, +- tmp_buf, 16 * 30, tmp_buf, 16 * 31, +- m6, n6, m7, n7); +- +- TRANSPOSE8x8_H(m0, n0, m1, n1, m2, n2, m3, n3, +- m0, n0, m1, n1, m2, n2, m3, n3); ++ DUP4_ARG2(__lsx_vld, tmp_buf, 16 * 16, tmp_buf, 16 * 17, ++ tmp_buf, 16 * 18, tmp_buf, 16 * 19, m0, n0, m1, n1); ++ DUP4_ARG2(__lsx_vld, tmp_buf, 16 * 20, tmp_buf, 16 * 21, ++ tmp_buf, 16 * 22, tmp_buf, 16 * 23, m2, n2, m3, n3); ++ ++ DUP4_ARG2(__lsx_vld, tmp_buf, 16 * 24, tmp_buf, 16 * 25, ++ tmp_buf, 16 * 26, tmp_buf, 16 * 27, m4, n4, m5, n5); ++ DUP4_ARG2(__lsx_vld, tmp_buf, 16 * 28, tmp_buf, 16 * 29, ++ tmp_buf, 16 * 30, tmp_buf, 16 * 31, m6, n6, m7, n7); ++ ++ LSX_TRANSPOSE8x8_H(m0, n0, m1, n1, m2, n2, m3, n3, ++ m0, n0, m1, n1, m2, n2, m3, n3); + + __lsx_vst(m0, dst, 32); + __lsx_vst(n0, dst, 32 + 32 * 2); +@@ -942,8 +846,8 @@ static void vp9_idct_butterfly_transpose_store(int16_t *tmp_buf, + __lsx_vst(m3, dst, 32 + 32 * 12); + __lsx_vst(n3, dst, 32 + 32 * 14); + +- TRANSPOSE8x8_H(m4, n4, m5, n5, m6, n6, m7, n7, +- m4, n4, m5, n5, m6, n6, m7, n7); ++ LSX_TRANSPOSE8x8_H(m4, n4, m5, n5, m6, n6, m7, n7, ++ m4, n4, m5, n5, m6, n6, m7, n7); + + __lsx_vst(m4, dst, 48); + __lsx_vst(n4, dst, 48 + 32 * 2); +@@ -964,14 +868,10 @@ static void vp9_idct8x32_column_even_process_store(int16_t *tmp_buf, + __m128i zero = __lsx_vldi(0); + + /* Even stage 1 */ +- LSX_DUP4_ARG2(__lsx_vld, +- tmp_buf, 0, tmp_buf, 32 * 8, +- tmp_buf, 32 * 16, tmp_buf, 32 * 24, +- reg0, reg1, reg2, reg3); +- LSX_DUP4_ARG2(__lsx_vld, +- tmp_buf, 32 * 32, tmp_buf, 32 * 40, +- tmp_buf, 32 * 48, tmp_buf, 32 * 56, +- reg4, reg5, reg6, reg7); ++ DUP4_ARG2(__lsx_vld, tmp_buf, 0, tmp_buf, 32 * 8, ++ tmp_buf, 32 * 16, tmp_buf, 32 * 24, reg0, reg1, reg2, reg3); ++ DUP4_ARG2(__lsx_vld, tmp_buf, 32 * 32, tmp_buf, 32 * 40, ++ tmp_buf, 32 * 48, tmp_buf, 32 * 56, reg4, reg5, reg6, reg7); + + __lsx_vst(zero, tmp_buf, 0); + __lsx_vst(zero, tmp_buf, 32 * 8); +@@ -986,7 +886,7 @@ static void vp9_idct8x32_column_even_process_store(int16_t *tmp_buf, + + VP9_DOTP_CONST_PAIR(reg1, reg7, cospi_28_64, cospi_4_64, reg1, reg7); + VP9_DOTP_CONST_PAIR(reg5, reg3, cospi_12_64, cospi_20_64, reg5, reg3); +- BUTTERFLY_4_H(reg1, reg7, reg3, reg5, vec1, vec3, vec2, vec0); ++ LSX_BUTTERFLY_4_H(reg1, reg7, reg3, reg5, vec1, vec3, vec2, vec0); + VP9_DOTP_CONST_PAIR(vec2, vec0, cospi_16_64, cospi_16_64, loc2, loc3); + + loc1 = vec3; +@@ -994,20 +894,16 @@ static void vp9_idct8x32_column_even_process_store(int16_t *tmp_buf, + + VP9_DOTP_CONST_PAIR(reg0, reg4, cospi_16_64, cospi_16_64, reg0, reg4); + VP9_DOTP_CONST_PAIR(reg2, reg6, cospi_24_64, cospi_8_64, reg2, reg6); +- BUTTERFLY_4_H(reg4, reg0, reg2, reg6, vec1, vec3, vec2, vec0); +- BUTTERFLY_4_H(vec0, vec1, loc1, loc0, stp3, stp0, stp7, stp4); +- BUTTERFLY_4_H(vec2, vec3, loc3, loc2, stp2, stp1, stp6, stp5); ++ LSX_BUTTERFLY_4_H(reg4, reg0, reg2, reg6, vec1, vec3, vec2, vec0); ++ LSX_BUTTERFLY_4_H(vec0, vec1, loc1, loc0, stp3, stp0, stp7, stp4); ++ LSX_BUTTERFLY_4_H(vec2, vec3, loc3, loc2, stp2, stp1, stp6, stp5); + + /* Even stage 2 */ + /* Load 8 */ +- LSX_DUP4_ARG2(__lsx_vld, +- tmp_buf, 0, tmp_buf, 32 * 8, +- tmp_buf, 32 * 16, tmp_buf, 32 * 24, +- reg0, reg1, reg2, reg3); +- LSX_DUP4_ARG2(__lsx_vld, +- tmp_buf, 32 * 32, tmp_buf, 32 * 40, +- tmp_buf, 32 * 48, tmp_buf, 32 * 56, +- reg4, reg5, reg6, reg7); ++ DUP4_ARG2(__lsx_vld, tmp_buf, 0, tmp_buf, 32 * 8, ++ tmp_buf, 32 * 16, tmp_buf, 32 * 24, reg0, reg1, reg2, reg3); ++ DUP4_ARG2(__lsx_vld, tmp_buf, 32 * 32, tmp_buf, 32 * 40, ++ tmp_buf, 32 * 48, tmp_buf, 32 * 56, reg4, reg5, reg6, reg7); + + __lsx_vst(zero, tmp_buf, 0); + __lsx_vst(zero, tmp_buf, 32 * 8); +@@ -1053,25 +949,25 @@ static void vp9_idct8x32_column_even_process_store(int16_t *tmp_buf, + + /* Even stage 3 : Dependency on Even stage 1 & Even stage 2 */ + /* Store 8 */ +- BUTTERFLY_4_H(stp0, stp1, reg7, reg5, loc1, loc3, loc2, loc0); ++ LSX_BUTTERFLY_4_H(stp0, stp1, reg7, reg5, loc1, loc3, loc2, loc0); + __lsx_vst(loc1, tmp_eve_buf, 0); + __lsx_vst(loc3, tmp_eve_buf, 16); + __lsx_vst(loc2, tmp_eve_buf, 14 * 16); + __lsx_vst(loc0, tmp_eve_buf, 14 * 16 + 16); +- BUTTERFLY_4_H(stp2, stp3, reg4, reg1, loc1, loc3, loc2, loc0); ++ LSX_BUTTERFLY_4_H(stp2, stp3, reg4, reg1, loc1, loc3, loc2, loc0); + __lsx_vst(loc1, tmp_eve_buf, 2 * 16); + __lsx_vst(loc3, tmp_eve_buf, 2 * 16 + 16); + __lsx_vst(loc2, tmp_eve_buf, 12 * 16); + __lsx_vst(loc0, tmp_eve_buf, 12 * 16 + 16); + + /* Store 8 */ +- BUTTERFLY_4_H(stp4, stp5, reg6, reg3, loc1, loc3, loc2, loc0); ++ LSX_BUTTERFLY_4_H(stp4, stp5, reg6, reg3, loc1, loc3, loc2, loc0); + __lsx_vst(loc1, tmp_eve_buf, 4 * 16); + __lsx_vst(loc3, tmp_eve_buf, 4 * 16 + 16); + __lsx_vst(loc2, tmp_eve_buf, 10 * 16); + __lsx_vst(loc0, tmp_eve_buf, 10 * 16 + 16); + +- BUTTERFLY_4_H(stp6, stp7, reg2, reg0, loc1, loc3, loc2, loc0); ++ LSX_BUTTERFLY_4_H(stp6, stp7, reg2, reg0, loc1, loc3, loc2, loc0); + __lsx_vst(loc1, tmp_eve_buf, 6 * 16); + __lsx_vst(loc3, tmp_eve_buf, 6 * 16 + 16); + __lsx_vst(loc2, tmp_eve_buf, 8 * 16); +@@ -1120,10 +1016,10 @@ static void vp9_idct8x32_column_odd_process_store(int16_t *tmp_buf, + reg5 = vec0; + + /* 4 Stores */ +- LSX_DUP2_ARG2(__lsx_vadd_h, reg5, reg4, reg3, reg2, vec0, vec1); ++ DUP2_ARG2(__lsx_vadd_h, reg5, reg4, reg3, reg2, vec0, vec1); + __lsx_vst(vec0, tmp_odd_buf, 4 * 16); + __lsx_vst(vec1, tmp_odd_buf, 4 * 16 + 16); +- LSX_DUP2_ARG2(__lsx_vsub_h, reg5, reg4, reg3, reg2, vec0, vec1); ++ DUP2_ARG2(__lsx_vsub_h, reg5, reg4, reg3, reg2, vec0, vec1); + VP9_DOTP_CONST_PAIR(vec1, vec0, cospi_24_64, cospi_8_64, vec0, vec1); + __lsx_vst(vec0, tmp_odd_buf, 0); + __lsx_vst(vec1, tmp_odd_buf, 16); +@@ -1131,7 +1027,7 @@ static void vp9_idct8x32_column_odd_process_store(int16_t *tmp_buf, + /* 4 Stores */ + VP9_DOTP_CONST_PAIR(reg7, reg0, cospi_28_64, cospi_4_64, reg0, reg7); + VP9_DOTP_CONST_PAIR(reg6, reg1, -cospi_4_64, cospi_28_64, reg1, reg6); +- BUTTERFLY_4_H(reg0, reg7, reg6, reg1, vec0, vec1, vec2, vec3); ++ LSX_BUTTERFLY_4_H(reg0, reg7, reg6, reg1, vec0, vec1, vec2, vec3); + __lsx_vst(vec0, tmp_odd_buf, 6 * 16); + __lsx_vst(vec1, tmp_odd_buf, 6 * 16 + 16); + VP9_DOTP_CONST_PAIR(vec2, vec3, cospi_24_64, cospi_8_64, vec2, vec3); +@@ -1164,11 +1060,11 @@ static void vp9_idct8x32_column_odd_process_store(int16_t *tmp_buf, + VP9_DOTP_CONST_PAIR(reg7, reg0, cospi_3_64, cospi_29_64, reg0, reg7); + + /* 4 Stores */ +- LSX_DUP4_ARG2(__lsx_vsub_h,reg1, reg2, reg6, reg5, reg0, reg3, reg7, reg4, +- vec0, vec1, vec2, vec3); ++ DUP4_ARG2(__lsx_vsub_h,reg1, reg2, reg6, reg5, reg0, reg3, reg7, reg4, ++ vec0, vec1, vec2, vec3); + VP9_DOTP_CONST_PAIR(vec1, vec0, cospi_12_64, cospi_20_64, loc0, loc1); + VP9_DOTP_CONST_PAIR(vec3, vec2, -cospi_20_64, cospi_12_64, loc2, loc3); +- BUTTERFLY_4_H(loc2, loc3, loc1, loc0, vec0, vec1, vec3, vec2); ++ LSX_BUTTERFLY_4_H(loc2, loc3, loc1, loc0, vec0, vec1, vec3, vec2); + __lsx_vst(vec0, tmp_odd_buf, 12 * 16); + __lsx_vst(vec1, tmp_odd_buf, 12 * 16 + 3 * 16); + VP9_DOTP_CONST_PAIR(vec3, vec2, -cospi_8_64, cospi_24_64, vec0, vec1); +@@ -1176,9 +1072,9 @@ static void vp9_idct8x32_column_odd_process_store(int16_t *tmp_buf, + __lsx_vst(vec1, tmp_odd_buf, 10 * 16 + 16); + + /* 4 Stores */ +- LSX_DUP4_ARG2(__lsx_vadd_h, reg0, reg3, reg1, reg2, reg5, reg6, reg4, reg7, +- vec0, vec1, vec2, vec3); +- BUTTERFLY_4_H(vec0, vec3, vec2, vec1, reg0, reg1, reg3, reg2); ++ DUP4_ARG2(__lsx_vadd_h, reg0, reg3, reg1, reg2, reg5, reg6, reg4, reg7, ++ vec0, vec1, vec2, vec3); ++ LSX_BUTTERFLY_4_H(vec0, vec3, vec2, vec1, reg0, reg1, reg3, reg2); + __lsx_vst(reg0, tmp_odd_buf, 13 * 16); + __lsx_vst(reg1, tmp_odd_buf, 13 * 16 + 16); + VP9_DOTP_CONST_PAIR(reg3, reg2, -cospi_8_64, cospi_24_64, +@@ -1188,25 +1084,21 @@ static void vp9_idct8x32_column_odd_process_store(int16_t *tmp_buf, + + /* Odd stage 3 : Dependency on Odd stage 1 & Odd stage 2 */ + /* Load 8 & Store 8 */ +- LSX_DUP4_ARG2(__lsx_vld, +- tmp_odd_buf, 0, tmp_odd_buf, 16, +- tmp_odd_buf, 32, tmp_odd_buf, 48, +- reg0, reg1, reg2, reg3); +- LSX_DUP4_ARG2(__lsx_vld, +- tmp_odd_buf, 8 * 16, tmp_odd_buf, 8 * 16 + 16, +- tmp_odd_buf, 8 * 16 + 32, tmp_odd_buf, 8 * 16 + 48, +- reg4, reg5, reg6, reg7); +- +- LSX_DUP4_ARG2(__lsx_vadd_h, reg0, reg4, reg1, reg5, reg2, reg6, reg3, reg7, ++ DUP4_ARG2(__lsx_vld, tmp_odd_buf, 0, tmp_odd_buf, 16, ++ tmp_odd_buf, 32, tmp_odd_buf, 48, reg0, reg1, reg2, reg3); ++ DUP4_ARG2(__lsx_vld, tmp_odd_buf, 8 * 16, tmp_odd_buf, 8 * 16 + 16, ++ tmp_odd_buf, 8 * 16 + 32, tmp_odd_buf, 8 * 16 + 48, reg4, reg5, reg6, reg7); ++ ++ DUP4_ARG2(__lsx_vadd_h, reg0, reg4, reg1, reg5, reg2, reg6, reg3, reg7, + loc0, loc1, loc2, loc3); + __lsx_vst(loc0, tmp_odd_buf, 0); + __lsx_vst(loc1, tmp_odd_buf, 16); + __lsx_vst(loc2, tmp_odd_buf, 32); + __lsx_vst(loc3, tmp_odd_buf, 48); +- LSX_DUP2_ARG2(__lsx_vsub_h, reg0, reg4, reg1, reg5, vec0, vec1); ++ DUP2_ARG2(__lsx_vsub_h, reg0, reg4, reg1, reg5, vec0, vec1); + VP9_DOTP_CONST_PAIR(vec1, vec0, cospi_16_64, cospi_16_64, loc0, loc1); + +- LSX_DUP2_ARG2(__lsx_vsub_h, reg2, reg6, reg3, reg7, vec0, vec1); ++ DUP2_ARG2(__lsx_vsub_h, reg2, reg6, reg3, reg7, vec0, vec1); + VP9_DOTP_CONST_PAIR(vec1, vec0, cospi_16_64, cospi_16_64, loc2, loc3); + __lsx_vst(loc0, tmp_odd_buf, 8 * 16); + __lsx_vst(loc1, tmp_odd_buf, 8 * 16 + 16); +@@ -1214,26 +1106,22 @@ static void vp9_idct8x32_column_odd_process_store(int16_t *tmp_buf, + __lsx_vst(loc3, tmp_odd_buf, 8 * 16 + 48); + + /* Load 8 & Store 8 */ +- LSX_DUP4_ARG2(__lsx_vld, +- tmp_odd_buf, 4 * 16, tmp_odd_buf, 4 * 16 + 16, +- tmp_odd_buf, 4 * 16 + 32, tmp_odd_buf, 4 * 16 + 48, +- reg1, reg2, reg0, reg3); +- LSX_DUP4_ARG2(__lsx_vld, +- tmp_odd_buf, 12 * 16, tmp_odd_buf, 12 * 16 + 16, +- tmp_odd_buf, 12 * 16 + 32, tmp_odd_buf, 12 * 16 + 48, +- reg4, reg5, reg6, reg7); +- +- LSX_DUP4_ARG2(__lsx_vadd_h, reg0, reg4, reg1, reg5, reg2, reg6, reg3, reg7, +- loc0, loc1, loc2, loc3); ++ DUP4_ARG2(__lsx_vld, tmp_odd_buf, 4 * 16, tmp_odd_buf, 4 * 16 + 16, ++ tmp_odd_buf, 4 * 16 + 32, tmp_odd_buf, 4 * 16 + 48, reg1, reg2, reg0, reg3); ++ DUP4_ARG2(__lsx_vld, tmp_odd_buf, 12 * 16, tmp_odd_buf, 12 * 16 + 16, ++ tmp_odd_buf, 12 * 16 + 32, tmp_odd_buf, 12 * 16 + 48, reg4, reg5, reg6, reg7); ++ ++ DUP4_ARG2(__lsx_vadd_h, reg0, reg4, reg1, reg5, reg2, reg6, reg3, reg7, ++ loc0, loc1, loc2, loc3); + __lsx_vst(loc0, tmp_odd_buf, 4 * 16); + __lsx_vst(loc1, tmp_odd_buf, 4 * 16 + 16); + __lsx_vst(loc2, tmp_odd_buf, 4 * 16 + 32); + __lsx_vst(loc3, tmp_odd_buf, 4 * 16 + 48); + +- LSX_DUP2_ARG2(__lsx_vsub_h, reg0, reg4, reg3, reg7, vec0, vec1); ++ DUP2_ARG2(__lsx_vsub_h, reg0, reg4, reg3, reg7, vec0, vec1); + VP9_DOTP_CONST_PAIR(vec1, vec0, cospi_16_64, cospi_16_64, loc0, loc1); + +- LSX_DUP2_ARG2(__lsx_vsub_h, reg1, reg5, reg2, reg6, vec0, vec1); ++ DUP2_ARG2(__lsx_vsub_h, reg1, reg5, reg2, reg6, vec0, vec1); + VP9_DOTP_CONST_PAIR(vec1, vec0, cospi_16_64, cospi_16_64, loc2, loc3); + __lsx_vst(loc0, tmp_odd_buf, 12 * 16); + __lsx_vst(loc1, tmp_odd_buf, 12 * 16 + 16); +@@ -1259,14 +1147,14 @@ static void vp9_idct8x32_column_butterfly_addblk(int16_t *tmp_eve_buf, + loc2 = __lsx_vld(tmp_eve_buf, 4 * 16); + loc3 = __lsx_vld(tmp_eve_buf, 12 * 16); + +- LSX_DUP4_ARG2(__lsx_vadd_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, +- m0, m4, m2, m6); +- LSX_DUP4_ARG2(__lsx_vsrari_h, m0, 6, m2, 6, m4, 6, m6, 6, m0, m2, m4, m6); ++ DUP4_ARG2(__lsx_vadd_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ m0, m4, m2, m6); ++ DUP4_ARG2(__lsx_vsrari_h, m0, 6, m2, 6, m4, 6, m6, 6, m0, m2, m4, m6); + VP9_ADDBLK_ST8x4_UB(dst, (4 * dst_stride), m0, m2, m4, m6); + +- LSX_DUP4_ARG2(__lsx_vsub_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, +- m6, m2, m4, m0); +- LSX_DUP4_ARG2(__lsx_vsrari_h, m0, 6, m2, 6, m4, 6, m6, 6, m0, m2, m4, m6); ++ DUP4_ARG2(__lsx_vsub_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ m6, m2, m4, m0); ++ DUP4_ARG2(__lsx_vsrari_h, m0, 6, m2, 6, m4, 6, m6, 6, m0, m2, m4, m6); + VP9_ADDBLK_ST8x4_UB((dst + 19 * dst_stride), (4 * dst_stride), + m0, m2, m4, m6); + +@@ -1280,15 +1168,15 @@ static void vp9_idct8x32_column_butterfly_addblk(int16_t *tmp_eve_buf, + loc2 = __lsx_vld(tmp_eve_buf, 6 * 16); + loc3 = __lsx_vld(tmp_eve_buf, 14 * 16); + +- LSX_DUP4_ARG2(__lsx_vadd_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, +- m1, m5, m3, m7); +- LSX_DUP4_ARG2(__lsx_vsrari_h, m1, 6, m3, 6, m5, 6, m7, 6, m1, m3, m5, m7); ++ DUP4_ARG2(__lsx_vadd_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ m1, m5, m3, m7); ++ DUP4_ARG2(__lsx_vsrari_h, m1, 6, m3, 6, m5, 6, m7, 6, m1, m3, m5, m7); + VP9_ADDBLK_ST8x4_UB((dst + 2 * dst_stride), (4 * dst_stride), + m1, m3, m5, m7); + +- LSX_DUP4_ARG2(__lsx_vsub_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, +- m7, m3, m5, m1); +- LSX_DUP4_ARG2(__lsx_vsrari_h, m1, 6, m3, 6, m5, 6, m7, 6, m1, m3, m5, m7); ++ DUP4_ARG2(__lsx_vsub_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ m7, m3, m5, m1); ++ DUP4_ARG2(__lsx_vsrari_h, m1, 6, m3, 6, m5, 6, m7, 6, m1, m3, m5, m7); + VP9_ADDBLK_ST8x4_UB((dst + 17 * dst_stride), (4 * dst_stride), + m1, m3, m5, m7); + +@@ -1302,14 +1190,14 @@ static void vp9_idct8x32_column_butterfly_addblk(int16_t *tmp_eve_buf, + loc2 = __lsx_vld(tmp_eve_buf, 5 * 16); + loc3 = __lsx_vld(tmp_eve_buf, 13 * 16); + +- LSX_DUP4_ARG2(__lsx_vadd_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, +- n0, n4, n2, n6); +- LSX_DUP4_ARG2(__lsx_vsrari_h, n0, 6, n2, 6, n4, 6, n6, 6, n0, n2, n4, n6); ++ DUP4_ARG2(__lsx_vadd_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ n0, n4, n2, n6); ++ DUP4_ARG2(__lsx_vsrari_h, n0, 6, n2, 6, n4, 6, n6, 6, n0, n2, n4, n6); + VP9_ADDBLK_ST8x4_UB((dst + 1 * dst_stride), (4 * dst_stride), + n0, n2, n4, n6); +- LSX_DUP4_ARG2(__lsx_vsub_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, +- n6, n2, n4, n0); +- LSX_DUP4_ARG2(__lsx_vsrari_h, n0, 6, n2, 6, n4, 6, n6, 6, n0, n2, n4, n6); ++ DUP4_ARG2(__lsx_vsub_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ n6, n2, n4, n0); ++ DUP4_ARG2(__lsx_vsrari_h, n0, 6, n2, 6, n4, 6, n6, 6, n0, n2, n4, n6); + VP9_ADDBLK_ST8x4_UB((dst + 18 * dst_stride), (4 * dst_stride), + n0, n2, n4, n6); + +@@ -1323,14 +1211,14 @@ static void vp9_idct8x32_column_butterfly_addblk(int16_t *tmp_eve_buf, + loc2 = __lsx_vld(tmp_eve_buf, 7 * 16); + loc3 = __lsx_vld(tmp_eve_buf, 15 * 16); + +- LSX_DUP4_ARG2(__lsx_vadd_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, +- n1, n5, n3, n7); +- LSX_DUP4_ARG2(__lsx_vsrari_h, n1, 6, n3, 6, n5, 6, n7, 6, n1, n3, n5, n7); ++ DUP4_ARG2(__lsx_vadd_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ n1, n5, n3, n7); ++ DUP4_ARG2(__lsx_vsrari_h, n1, 6, n3, 6, n5, 6, n7, 6, n1, n3, n5, n7); + VP9_ADDBLK_ST8x4_UB((dst + 3 * dst_stride), (4 * dst_stride), + n1, n3, n5, n7); +- LSX_DUP4_ARG2(__lsx_vsub_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, +- n7, n3, n5, n1); +- LSX_DUP4_ARG2(__lsx_vsrari_h, n1, 6, n3, 6, n5, 6, n7, 6, n1, n3, n5, n7); ++ DUP4_ARG2(__lsx_vsub_h, loc0, vec3, loc1, vec2, loc2, vec1, loc3, vec0, ++ n7, n3, n5, n1); ++ DUP4_ARG2(__lsx_vsrari_h, n1, 6, n3, 6, n5, 6, n7, 6, n1, n3, n5, n7); + VP9_ADDBLK_ST8x4_UB((dst + 16 * dst_stride), (4 * dst_stride), + n1, n3, n5, n7); + } +@@ -1376,31 +1264,21 @@ static void vp9_idct32x32_1_add_lsx(int16_t *input, uint8_t *dst, + vec = __lsx_vreplgr2vr_h(out); + + for (i = 16; i--;) { +- LSX_DUP2_ARG2(__lsx_vld, dst, 0, dst, 16, dst0, dst1); +- LSX_DUP2_ARG2(__lsx_vld, dst + dst_stride, 0, +- dst + dst_stride, 16, dst2, dst3); +- +- LSX_DUP4_ARG2(__lsx_vilvl_b, +- zero, dst0, zero, dst1, zero, dst2, zero, dst3, +- res0, res1, res2, res3); +- LSX_DUP4_ARG2(__lsx_vilvh_b, +- zero, dst0, zero, dst1, zero, dst2, zero, dst3, +- res4, res5, res6, res7); +- LSX_DUP4_ARG2(__lsx_vadd_h, +- res0, vec, res1, vec, res2, vec, res3, vec, +- res0, res1, res2, res3); +- LSX_DUP4_ARG2(__lsx_vadd_h, +- res4, vec, res5, vec, res6, vec, res7, vec, +- res4, res5, res6, res7); +- LSX_DUP4_ARG1(__lsx_clamp255_h, +- res0, res1, res2, res3, +- res0, res1, res2, res3); +- LSX_DUP4_ARG1(__lsx_clamp255_h, +- res4, res5, res6, res7, +- res4, res5, res6, res7); +- LSX_DUP4_ARG2(__lsx_vpickev_b, +- res4, res0, res5, res1, res6, res2, res7, res3, +- tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lsx_vld, dst, 0, dst, 16, dst0, dst1); ++ DUP2_ARG2(__lsx_vld, dst + dst_stride, 0, dst + dst_stride, 16, dst2, dst3); ++ ++ DUP4_ARG2(__lsx_vilvl_b, zero, dst0, zero, dst1, zero, dst2, zero, dst3, ++ res0, res1, res2, res3); ++ DUP4_ARG2(__lsx_vilvh_b, zero, dst0, zero, dst1, zero, dst2, zero, dst3, ++ res4, res5, res6, res7); ++ DUP4_ARG2(__lsx_vadd_h, res0, vec, res1, vec, res2, vec, res3, vec, ++ res0, res1, res2, res3); ++ DUP4_ARG2(__lsx_vadd_h, res4, vec, res5, vec, res6, vec, res7, vec, ++ res4, res5, res6, res7); ++ DUP4_ARG1(__lsx_vclip255_h, res0, res1, res2, res3, res0, res1, res2, res3); ++ DUP4_ARG1(__lsx_vclip255_h, res4, res5, res6, res7, res4, res5, res6, res7); ++ DUP4_ARG2(__lsx_vpickev_b, res4, res0, res5, res1, res6, res2, res7, res3, ++ tmp0, tmp1, tmp2, tmp3); + + __lsx_vst(tmp0, dst, 0); + __lsx_vst(tmp1, dst, 16); +diff --git a/libavcodec/loongarch/vp9_intra_lsx.c b/libavcodec/loongarch/vp9_intra_lsx.c +index 6adb3f9e3c..b3d4f88158 100644 +--- a/libavcodec/loongarch/vp9_intra_lsx.c ++++ b/libavcodec/loongarch/vp9_intra_lsx.c +@@ -20,7 +20,7 @@ + */ + + #include "libavcodec/vp9dsp.h" +-#include "libavutil/loongarch/generic_macros_lsx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + #include "vp9dsp_loongarch.h" + + #define LSX_ST_8(_dst0, _dst1, _dst2, _dst3, _dst4, \ +@@ -89,7 +89,7 @@ void ff_vert_32x32_lsx(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *left, + uint32_t row; + __m128i src0, src1; + +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src1); ++ DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src1); + for (row = 32; row--;) { + __lsx_vst(src0, dst, 0); + __lsx_vst(src1, dst, 16); +@@ -285,7 +285,7 @@ void ff_dc_16x16_lsx(uint8_t *dst, ptrdiff_t dst_stride, + + tmp0 = __lsx_vld(src_top, 0); + tmp1 = __lsx_vld(src_left, 0); +- LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, tmp0, tmp0, tmp1, tmp1, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vhaddw_hu_bu, tmp0, tmp0, tmp1, tmp1, tmp0, tmp1); + dst0 = __lsx_vadd_h(tmp0, tmp1); + dst0 = __lsx_vhaddw_wu_hu(dst0, dst0); + dst0 = __lsx_vhaddw_du_wu(dst0, dst0); +@@ -322,11 +322,11 @@ void ff_dc_32x32_lsx(uint8_t *dst, ptrdiff_t dst_stride, + { + __m128i tmp0, tmp1, tmp2, tmp3, dst0; + +- LSX_DUP2_ARG2(__lsx_vld, src_top, 0, src_top, 16, tmp0, tmp1); +- LSX_DUP2_ARG2(__lsx_vld, src_left, 0, src_left, 16, tmp2, tmp3); +- LSX_DUP4_ARG2(__lsx_vhaddw_hu_bu, tmp0, tmp0, tmp1, tmp1, tmp2, tmp2, +- tmp3, tmp3, tmp0, tmp1, tmp2, tmp3); +- LSX_DUP2_ARG2(__lsx_vadd_h, tmp0, tmp1, tmp2, tmp3, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vld, src_top, 0, src_top, 16, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vld, src_left, 0, src_left, 16, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vhaddw_hu_bu, tmp0, tmp0, tmp1, tmp1, tmp2, tmp2, ++ tmp3, tmp3, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lsx_vadd_h, tmp0, tmp1, tmp2, tmp3, tmp0, tmp1); + dst0 = __lsx_vadd_h(tmp0, tmp1); + dst0 = __lsx_vhaddw_wu_hu(dst0, dst0); + dst0 = __lsx_vhaddw_du_wu(dst0, dst0); +@@ -346,8 +346,8 @@ void ff_dc_##dir##_32x32_lsx(uint8_t *dst, ptrdiff_t dst_stride, + { \ + __m128i tmp0, tmp1, dst0; \ + \ +- LSX_DUP2_ARG2(__lsx_vld, dir, 0, dir, 16, tmp0, tmp1); \ +- LSX_DUP2_ARG2(__lsx_vhaddw_hu_bu, tmp0, tmp0, tmp1, tmp1, tmp0, tmp1); \ ++ DUP2_ARG2(__lsx_vld, dir, 0, dir, 16, tmp0, tmp1); \ ++ DUP2_ARG2(__lsx_vhaddw_hu_bu, tmp0, tmp0, tmp1, tmp1, tmp0, tmp1); \ + dst0 = __lsx_vadd_h(tmp0, tmp1); \ + dst0 = __lsx_vhaddw_wu_hu(dst0, dst0); \ + dst0 = __lsx_vhaddw_du_wu(dst0, dst0); \ +@@ -403,17 +403,17 @@ void ff_tm_4x4_lsx(uint8_t *dst, ptrdiff_t dst_stride, + + reg0 = __lsx_vreplgr2vr_h(top_left); + reg1 = __lsx_vld(src_top_ptr, 0); +- LSX_DUP4_ARG2(__lsx_vldrepl_b, src_left, 0, src_left, 1, src_left, 2, src_left, +- 3, tmp3, tmp2, tmp1, tmp0); +- LSX_DUP4_ARG2(__lsx_vilvl_b, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, reg1, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vhaddw_hu_bu, src0, src0, src1, src1, src2, src2, src3, +- src3, dst0, dst1, dst2, dst3); +- LSX_DUP4_ARG2(__lsx_vssub_hu, dst0, reg0, dst1, reg0, dst2, reg0, dst3, reg0, +- dst0, dst1, dst2, dst3); +- LSX_DUP4_ARG2(__lsx_vsat_hu, dst0, 7, dst1, 7, dst2, 7, dst3, 7, +- dst0, dst1, dst2, dst3); +- LSX_DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); ++ DUP4_ARG2(__lsx_vldrepl_b, src_left, 0, src_left, 1, src_left, 2, src_left, ++ 3, tmp3, tmp2, tmp1, tmp0); ++ DUP4_ARG2(__lsx_vilvl_b, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, reg1, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vhaddw_hu_bu, src0, src0, src1, src1, src2, src2, src3, ++ src3, dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vssub_hu, dst0, reg0, dst1, reg0, dst2, reg0, dst3, reg0, ++ dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vsat_hu, dst0, 7, dst1, 7, dst2, 7, dst3, 7, ++ dst0, dst1, dst2, dst3); ++ DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); + __lsx_vstelm_w(dst0, dst, 0, 0); + dst += dst_stride; + __lsx_vstelm_w(dst0, dst, 0, 2); +@@ -433,28 +433,26 @@ void ff_tm_8x8_lsx(uint8_t *dst, ptrdiff_t dst_stride, + + reg0 = __lsx_vreplgr2vr_h(top_left); + reg1 = __lsx_vld(src_top_ptr, 0); +- LSX_DUP4_ARG2(__lsx_vldrepl_b, src_left, 0, src_left, 1, src_left, 2, src_left, +- 3, tmp7, tmp6, tmp5, tmp4); +- LSX_DUP4_ARG2(__lsx_vldrepl_b, src_left, 4, src_left, 5, src_left, 6, src_left, +- 7, tmp3, tmp2, tmp1, tmp0); +- LSX_DUP4_ARG2(__lsx_vilvl_b, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, reg1, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vilvl_b, tmp4, reg1, tmp5, reg1, tmp6, reg1, tmp7, reg1, +- src4, src5, src6, src7); +- LSX_DUP4_ARG2(__lsx_vhaddw_hu_bu, src0, src0, src1, src1, src2, src2, src3, +- src3, src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vhaddw_hu_bu, src4, src4, src5, src5, src6, src6, src7, +- src7, src4, src5, src6, src7); +- LSX_DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, +- src4, src5, src6, src7); +- LSX_DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, +- src4, src5, src6, src7); +- LSX_DUP4_ARG2(__lsx_vpickev_b, src1, src0, src3, src2, src5, src4, src7, src6, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vldrepl_b, src_left, 0, src_left, 1, src_left, 2, src_left, ++ 3, tmp7, tmp6, tmp5, tmp4); ++ DUP4_ARG2(__lsx_vldrepl_b, src_left, 4, src_left, 5, src_left, 6, src_left, ++ 7, tmp3, tmp2, tmp1, tmp0); ++ DUP4_ARG2(__lsx_vilvl_b, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, reg1, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vilvl_b, tmp4, reg1, tmp5, reg1, tmp6, reg1, tmp7, reg1, ++ src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vhaddw_hu_bu, src0, src0, src1, src1, src2, src2, src3, ++ src3, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vhaddw_hu_bu, src4, src4, src5, src5, src6, src6, src7, ++ src7, src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, ++ src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vpickev_b, src1, src0, src3, src2, src5, src4, src7, src6, ++ src0, src1, src2, src3); + __lsx_vstelm_d(src0, dst, 0, 0); + dst += dst_stride; + __lsx_vstelm_d(src0, dst, 0, 1); +@@ -483,70 +481,64 @@ void ff_tm_16x16_lsx(uint8_t *dst, ptrdiff_t dst_stride, + + reg0 = __lsx_vreplgr2vr_h(top_left); + reg1 = __lsx_vld(src_top_ptr, 0); +- LSX_DUP4_ARG2(__lsx_vldrepl_b, src_left, 0, src_left, 1, src_left, 2, src_left, +- 3, tmp15, tmp14, tmp13, tmp12); +- LSX_DUP4_ARG2(__lsx_vldrepl_b, src_left, 4, src_left, 5, src_left, 6, src_left, +- 7, tmp11, tmp10, tmp9, tmp8); +- LSX_DUP4_ARG2(__lsx_vldrepl_b, src_left, 8, src_left, 9, src_left, 10, src_left, +- 11, tmp7, tmp6, tmp5, tmp4); +- LSX_DUP4_ARG2(__lsx_vldrepl_b, src_left, 12, src_left, 13, src_left, 14, src_left, +- 15, tmp3, tmp2, tmp1, tmp0); +- LSX_DUP4_ARG2(__lsx_vaddwev_h_bu, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, reg1, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vaddwod_h_bu, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, reg1, +- src4, src5, src6, src7); +- LSX_DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, +- src4, src5, src6, src7); +- LSX_DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, +- src4, src5, src6, src7); +- LSX_DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, src3, +- tmp0, tmp1, tmp2, tmp3); +- LSX_DUP4_ARG2(__lsx_vaddwev_h_bu, tmp4, reg1, tmp5, reg1, tmp6, reg1, tmp7, reg1, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vaddwod_h_bu, tmp4, reg1, tmp5, reg1, tmp6, reg1, tmp7, reg1, +- src4, src5, src6, src7); +- LSX_DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, +- src4, src5, src6, src7); +- LSX_DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, +- src4, src5, src6, src7); +- LSX_DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, src3, +- tmp4, tmp5, tmp6, tmp7); +- LSX_DUP4_ARG2(__lsx_vaddwev_h_bu, tmp8, reg1, tmp9, reg1, tmp10, reg1, tmp11, reg1, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vaddwod_h_bu, tmp8, reg1, tmp9, reg1, tmp10, reg1, tmp11, reg1, +- src4, src5, src6, src7); +- LSX_DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, +- src4, src5, src6, src7); +- LSX_DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, +- src4, src5, src6, src7); +- LSX_DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, src3, +- tmp8, tmp9, tmp10, tmp11); +- LSX_DUP4_ARG2(__lsx_vaddwev_h_bu, tmp12, reg1, tmp13, reg1, tmp14, reg1, tmp15, reg1, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vaddwod_h_bu, tmp12, reg1, tmp13, reg1, tmp14, reg1, tmp15, reg1, +- src4, src5, src6, src7); +- LSX_DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, +- src4, src5, src6, src7); +- LSX_DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, +- src4, src5, src6, src7); +- LSX_DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, src3, +- tmp12, tmp13, tmp14, tmp15); ++ DUP4_ARG2(__lsx_vldrepl_b, src_left, 0, src_left, 1, src_left, 2, src_left, ++ 3, tmp15, tmp14, tmp13, tmp12); ++ DUP4_ARG2(__lsx_vldrepl_b, src_left, 4, src_left, 5, src_left, 6, src_left, ++ 7, tmp11, tmp10, tmp9, tmp8); ++ DUP4_ARG2(__lsx_vldrepl_b, src_left, 8, src_left, 9, src_left, 10, src_left, ++ 11, tmp7, tmp6, tmp5, tmp4); ++ DUP4_ARG2(__lsx_vldrepl_b, src_left, 12, src_left, 13, src_left, 14, src_left, ++ 15, tmp3, tmp2, tmp1, tmp0); ++ DUP4_ARG2(__lsx_vaddwev_h_bu, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, reg1, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vaddwod_h_bu, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, reg1, ++ src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, ++ src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, src3, ++ tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vaddwev_h_bu, tmp4, reg1, tmp5, reg1, tmp6, reg1, tmp7, reg1, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vaddwod_h_bu, tmp4, reg1, tmp5, reg1, tmp6, reg1, tmp7, reg1, ++ src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, ++ src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, ++ src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, src3, ++ tmp4, tmp5, tmp6, tmp7); ++ DUP4_ARG2(__lsx_vaddwev_h_bu, tmp8, reg1, tmp9, reg1, tmp10, reg1, tmp11, reg1, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vaddwod_h_bu, tmp8, reg1, tmp9, reg1, tmp10, reg1, tmp11, reg1, ++ src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, ++ src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, src3, ++ tmp8, tmp9, tmp10, tmp11); ++ DUP4_ARG2(__lsx_vaddwev_h_bu, tmp12, reg1, tmp13, reg1, tmp14, reg1, tmp15, reg1, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vaddwod_h_bu, tmp12, reg1, tmp13, reg1, tmp14, reg1, tmp15, reg1, ++ src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, ++ src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, src3, ++ tmp12, tmp13, tmp14, tmp15); + LSX_ST_8(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, dst, dst_stride); + LSX_ST_8(tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, dst, dst_stride); + } +@@ -561,41 +553,41 @@ void ff_tm_32x32_lsx(uint8_t *dst, ptrdiff_t dst_stride, + __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; + + reg0 = __lsx_vreplgr2vr_h(top_left); +- LSX_DUP2_ARG2(__lsx_vld, src_top_ptr, 0, src_top_ptr, 16, reg1, reg2); ++ DUP2_ARG2(__lsx_vld, src_top_ptr, 0, src_top_ptr, 16, reg1, reg2); + + src_left += 28; + for (loop_cnt = 8; loop_cnt--;) { +- LSX_DUP4_ARG2(__lsx_vldrepl_b, src_left, 0, src_left, 1, src_left, 2, src_left, 3, +- tmp3, tmp2, tmp1, tmp0); ++ DUP4_ARG2(__lsx_vldrepl_b, src_left, 0, src_left, 1, src_left, 2, src_left, 3, ++ tmp3, tmp2, tmp1, tmp0); + src_left -= 4; +- LSX_DUP4_ARG2(__lsx_vaddwev_h_bu, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, reg1, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vaddwod_h_bu, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, reg1, +- src4, src5, src6, src7); +- LSX_DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, +- src4, src5, src6, src7); +- LSX_DUP4_ARG2(__lsx_vaddwev_h_bu, tmp0, reg2, tmp1, reg2, tmp2, reg2, tmp3, reg2, +- dst0, dst1, dst2, dst3); +- LSX_DUP4_ARG2(__lsx_vaddwod_h_bu, tmp0, reg2, tmp1, reg2, tmp2, reg2, tmp3, reg2, +- dst4, dst5, dst6, dst7); +- LSX_DUP4_ARG2(__lsx_vssub_hu, dst0, reg0, dst1, reg0, dst2, reg0, dst3, reg0, +- dst0, dst1, dst2, dst3); +- LSX_DUP4_ARG2(__lsx_vssub_hu, dst4, reg0, dst5, reg0, dst6, reg0, dst7, reg0, +- dst4, dst5, dst6, dst7); +- LSX_DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, +- src4, src5, src6, src7); +- LSX_DUP4_ARG2(__lsx_vsat_hu, dst0, 7, dst1, 7, dst2, 7, dst3, 7, +- dst0, dst1, dst2, dst3); +- LSX_DUP4_ARG2(__lsx_vsat_hu, dst4, 7, dst5, 7, dst6, 7, dst7, 7, +- dst4, dst5, dst6, dst7); +- LSX_DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, src3, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vpackev_b, dst4, dst0, dst5, dst1, dst6, dst2, dst7, dst3, +- dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vaddwev_h_bu, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, reg1, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vaddwod_h_bu, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, reg1, ++ src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, ++ src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vaddwev_h_bu, tmp0, reg2, tmp1, reg2, tmp2, reg2, tmp3, reg2, ++ dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vaddwod_h_bu, tmp0, reg2, tmp1, reg2, tmp2, reg2, tmp3, reg2, ++ dst4, dst5, dst6, dst7); ++ DUP4_ARG2(__lsx_vssub_hu, dst0, reg0, dst1, reg0, dst2, reg0, dst3, reg0, ++ dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vssub_hu, dst4, reg0, dst5, reg0, dst6, reg0, dst7, reg0, ++ dst4, dst5, dst6, dst7); ++ DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, ++ src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vsat_hu, dst0, 7, dst1, 7, dst2, 7, dst3, 7, ++ dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vsat_hu, dst4, 7, dst5, 7, dst6, 7, dst7, 7, ++ dst4, dst5, dst6, dst7); ++ DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, src3, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vpackev_b, dst4, dst0, dst5, dst1, dst6, dst2, dst7, dst3, ++ dst0, dst1, dst2, dst3); + __lsx_vst(src0, dst, 0); + __lsx_vst(dst0, dst, 16); + dst += dst_stride; +diff --git a/libavcodec/loongarch/vp9_lpf_lsx.c b/libavcodec/loongarch/vp9_lpf_lsx.c +index f8bde7e300..58619e6950 100644 +--- a/libavcodec/loongarch/vp9_lpf_lsx.c ++++ b/libavcodec/loongarch/vp9_lpf_lsx.c +@@ -20,7 +20,7 @@ + */ + + #include "libavcodec/vp9dsp.h" +-#include "libavutil/loongarch/generic_macros_lsx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + #include "libavutil/common.h" + #include "vp9dsp_loongarch.h" + +@@ -237,45 +237,6 @@ + mask_dst = __lsx_vxori_b(mask_dst, 0xff); \ + } + +-#define LSX_TRANSPOSE8x8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ +- _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ +-{ \ +- __m128i _tmp0, _tmp1, _tmp2, _tmp3, _tmp4, _tmp5, _tmp6, _tmp7; \ +- LSX_DUP4_ARG2(__lsx_vilvl_b, _in2, _in0, _in3, _in1, _in6, _in4, _in7, _in5, \ +- _tmp0, _tmp1, _tmp2, _tmp3); \ +- LSX_DUP2_ARG2(__lsx_vilvl_b, _tmp1, _tmp0, _tmp3, _tmp2, _tmp4, _tmp6); \ +- LSX_DUP2_ARG2(__lsx_vilvh_b, _tmp1, _tmp0, _tmp3, _tmp2, _tmp5, _tmp7); \ +- LSX_DUP2_ARG2(__lsx_vilvl_w, _tmp6, _tmp4, _tmp7, _tmp5, _out0, _out4); \ +- LSX_DUP2_ARG2(__lsx_vilvh_w, _tmp6, _tmp4, _tmp7, _tmp5, _out2, _out6); \ +- LSX_DUP4_ARG2(__lsx_vbsrl_v, _out0, 8, _out2, 8, _out4, 8, _out6, 8, \ +- _out1, _out3, _out5, _out7); \ +-} +- +-#define LSX_TRANSPOSE16x8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, _in8, \ +- _in9, _in10, _in11, _in12, _in13, _in14, _in15, _out0, \ +- _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ +-{ \ +- __m128i _tmp0, _tmp1, _tmp2, _tmp3, _tmp4, _tmp5, _tmp6, _tmp7; \ +- __m128i _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ +- LSX_DUP4_ARG2(__lsx_vilvl_b, _in2, _in0, _in3, _in1, _in6, _in4, _in7, _in5, \ +- _tmp0, _tmp1, _tmp2, _tmp3); \ +- LSX_DUP4_ARG2(__lsx_vilvl_b, _in10, _in8, _in11, _in9, _in14, _in12, _in15, \ +- _in13, _tmp4, _tmp5, _tmp6, _tmp7); \ +- LSX_DUP2_ARG2(__lsx_vilvl_b, _tmp1, _tmp0, _tmp3, _tmp2, _t0, _t2); \ +- LSX_DUP2_ARG2(__lsx_vilvh_b, _tmp1, _tmp0, _tmp3, _tmp2, _t1, _t3); \ +- LSX_DUP2_ARG2(__lsx_vilvl_b, _tmp5, _tmp4, _tmp7, _tmp6, _t4, _t6); \ +- LSX_DUP2_ARG2(__lsx_vilvh_b, _tmp5, _tmp4, _tmp7, _tmp6, _t5, _t7); \ +- LSX_DUP2_ARG2(__lsx_vilvl_w, _t2, _t0, _t3, _t1, _tmp0, _tmp4); \ +- LSX_DUP2_ARG2(__lsx_vilvh_w, _t2, _t0, _t3, _t1, _tmp2, _tmp6); \ +- LSX_DUP2_ARG2(__lsx_vilvl_w, _t6, _t4, _t7, _t5, _tmp1, _tmp5); \ +- LSX_DUP2_ARG2(__lsx_vilvh_w, _t6, _t4, _t7, _t5, _tmp3, _tmp7); \ +- LSX_DUP2_ARG2(__lsx_vilvl_d, _tmp1, _tmp0, _tmp3, _tmp2, _out0, _out2); \ +- LSX_DUP2_ARG2(__lsx_vilvh_d, _tmp1, _tmp0, _tmp3, _tmp2, _out1, _out3); \ +- LSX_DUP2_ARG2(__lsx_vilvl_d, _tmp5, _tmp4, _tmp7, _tmp6, _out4, _out6); \ +- LSX_DUP2_ARG2(__lsx_vilvh_d, _tmp5, _tmp4, _tmp7, _tmp6, _out5, _out7); \ +-} +- +- + void ff_loop_filter_v_4_8_lsx(uint8_t *dst, ptrdiff_t stride, + int32_t b_limit_ptr, + int32_t limit_ptr, +@@ -287,11 +248,10 @@ void ff_loop_filter_v_4_8_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i mask, hev, flat, thresh, b_limit, limit; + __m128i p3, p2, p1, p0, q3, q2, q1, q0, p1_out, p0_out, q0_out, q1_out; + +- LSX_DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, +- dst - stride, 0, p3, p2, p1, p0); +- LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, +- dst + stride3, 0, q0, q1, q2, q3); +- ++ DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, ++ dst - stride, 0, p3, p2, p1, p0); ++ DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, ++ dst + stride3, 0, q0, q1, q2, q3); + + thresh = __lsx_vreplgr2vr_b(thresh_ptr); + b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); +@@ -321,10 +281,10 @@ void ff_loop_filter_v_44_16_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i limit0, thresh1, b_limit1, limit1; + __m128i p3, p2, p1, p0, q3, q2, q1, q0; + +- LSX_DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, +- dst - stride, 0, p3, p2, p1, p0); +- LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, +- dst + stride3, 0, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, ++ dst - stride, 0, p3, p2, p1, p0); ++ DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, ++ dst + stride3, 0, q0, q1, q2, q3); + + thresh0 = __lsx_vreplgr2vr_b(thresh_ptr); + thresh1 = __lsx_vreplgr2vr_b(thresh_ptr >> 8); +@@ -364,10 +324,10 @@ void ff_loop_filter_v_8_8_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i p3_l, p2_l, p1_l, p0_l, q3_l, q2_l, q1_l, q0_l; + __m128i zero = __lsx_vldi(0); + +- LSX_DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, +- dst - stride, 0, p3, p2, p1, p0); +- LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, +- dst + stride3, 0, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, ++ dst - stride, 0, p3, p2, p1, p0); ++ DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, ++ dst + stride3, 0, q0, q1, q2, q3); + + thresh = __lsx_vreplgr2vr_b(thresh_ptr); + b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); +@@ -388,19 +348,19 @@ void ff_loop_filter_v_8_8_lsx(uint8_t *dst, ptrdiff_t stride, + __lsx_vstelm_d(q0_out, dst , 0, 0); + __lsx_vstelm_d(q1_out, dst + stride, 0, 0); + } else { +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, +- p3_l, p2_l, p1_l, p0_l); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, +- q0_l, q1_l, q2_l, q3_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_l, p2_l, p1_l, p0_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_l, q1_l, q2_l, q3_l); + VP9_FILTER8(p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l, p2_filter8, + p1_filter8, p0_filter8, q0_filter8, q1_filter8, q2_filter8); + + /* convert 16 bit output data into 8 bit */ +- LSX_DUP4_ARG2(__lsx_vpickev_b, zero, p2_filter8, zero, p1_filter8, +- zero, p0_filter8, zero, q0_filter8, p2_filter8, +- p1_filter8, p0_filter8, q0_filter8); +- LSX_DUP2_ARG2(__lsx_vpickev_b, zero, q1_filter8, zero, q2_filter8, +- q1_filter8, q2_filter8); ++ DUP4_ARG2(__lsx_vpickev_b, zero, p2_filter8, zero, p1_filter8, ++ zero, p0_filter8, zero, q0_filter8, p2_filter8, ++ p1_filter8, p0_filter8, q0_filter8); ++ DUP2_ARG2(__lsx_vpickev_b, zero, q1_filter8, zero, q2_filter8, ++ q1_filter8, q2_filter8); + + /* store pixel values */ + p2_out = __lsx_vbitsel_v(p2, p2_filter8, flat); +@@ -439,10 +399,10 @@ void ff_loop_filter_v_88_16_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i zero = __lsx_vldi(0); + + /* load vector elements */ +- LSX_DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, +- dst - stride, 0, p3, p2, p1, p0); +- LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, +- dst + stride3, 0, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, ++ dst - stride, 0, p3, p2, p1, p0); ++ DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, ++ dst + stride3, 0, q0, q1, q2, q3); + + thresh = __lsx_vreplgr2vr_b(thresh_ptr); + tmp = __lsx_vreplgr2vr_b(thresh_ptr >> 8); +@@ -470,27 +430,26 @@ void ff_loop_filter_v_88_16_lsx(uint8_t *dst, ptrdiff_t stride, + __lsx_vst(q0_out, dst, 0); + __lsx_vst(q1_out, dst + stride, 0); + } else { +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, +- p3_l, p2_l, p1_l, p0_l); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, +- q0_l, q1_l, q2_l, q3_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_l, p2_l, p1_l, p0_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_l, q1_l, q2_l, q3_l); + VP9_FILTER8(p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l, p2_filt8_l, + p1_filt8_l, p0_filt8_l, q0_filt8_l, q1_filt8_l, q2_filt8_l); + +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, p3, zero, p2, zero, p1, zero, p0, +- p3_h, p2_h, p1_h, p0_h); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, q0, zero, q1, zero, q2, zero, q3, +- q0_h, q1_h, q2_h, q3_h); ++ DUP4_ARG2(__lsx_vilvh_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_h, p2_h, p1_h, p0_h); ++ DUP4_ARG2(__lsx_vilvh_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_h, q1_h, q2_h, q3_h); + VP9_FILTER8(p3_h, p2_h, p1_h, p0_h, q0_h, q1_h, q2_h, q3_h, p2_filt8_h, + p1_filt8_h, p0_filt8_h, q0_filt8_h, q1_filt8_h, q2_filt8_h); + + /* convert 16 bit output data into 8 bit */ +- LSX_DUP4_ARG2(__lsx_vpickev_b, p2_filt8_h, p2_filt8_l, p1_filt8_h, +- p1_filt8_l, p0_filt8_h, p0_filt8_l, q0_filt8_h, +- q0_filt8_l, p2_filt8_l, p1_filt8_l, p0_filt8_l, +- q0_filt8_l); +- LSX_DUP2_ARG2(__lsx_vpickev_b, q1_filt8_h, q1_filt8_l, q2_filt8_h, +- q2_filt8_l, q1_filt8_l, q2_filt8_l); ++ DUP4_ARG2(__lsx_vpickev_b, p2_filt8_h, p2_filt8_l, p1_filt8_h, p1_filt8_l, ++ p0_filt8_h, p0_filt8_l, q0_filt8_h, q0_filt8_l, p2_filt8_l, ++ p1_filt8_l, p0_filt8_l, q0_filt8_l); ++ DUP2_ARG2(__lsx_vpickev_b, q1_filt8_h, q1_filt8_l, q2_filt8_h, q2_filt8_l, ++ q1_filt8_l, q2_filt8_l); + + /* store pixel values */ + p2_out = __lsx_vbitsel_v(p2, p2_filt8_l, flat); +@@ -527,10 +486,10 @@ void ff_loop_filter_v_84_16_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i zero = __lsx_vldi(0); + + /* load vector elements */ +- LSX_DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, +- dst - stride, 0, p3, p2, p1, p0); +- LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, +- dst + stride3, 0, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, ++ dst - stride, 0, p3, p2, p1, p0); ++ DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, ++ dst + stride3, 0, q0, q1, q2, q3); + + thresh = __lsx_vreplgr2vr_b(thresh_ptr); + tmp = __lsx_vreplgr2vr_b(thresh_ptr >> 8); +@@ -560,20 +519,19 @@ void ff_loop_filter_v_84_16_lsx(uint8_t *dst, ptrdiff_t stride, + __lsx_vst(q0_out, dst, 0); + __lsx_vst(q1_out, dst + stride, 0); + } else { +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, +- p3_l, p2_l, p1_l, p0_l); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, +- q0_l, q1_l, q2_l, q3_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_l, p2_l, p1_l, p0_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_l, q1_l, q2_l, q3_l); + VP9_FILTER8(p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l, p2_filt8_l, + p1_filt8_l, p0_filt8_l, q0_filt8_l, q1_filt8_l, q2_filt8_l); + + /* convert 16 bit output data into 8 bit */ +- LSX_DUP4_ARG2(__lsx_vpickev_b, p2_filt8_l, p2_filt8_l, p1_filt8_l, +- p1_filt8_l, p0_filt8_l, p0_filt8_l, q0_filt8_l, +- q0_filt8_l, p2_filt8_l, p1_filt8_l, p0_filt8_l, +- q0_filt8_l); +- LSX_DUP2_ARG2(__lsx_vpickev_b, q1_filt8_l, q1_filt8_l, q2_filt8_l, +- q2_filt8_l, q1_filt8_l, q2_filt8_l); ++ DUP4_ARG2(__lsx_vpickev_b, p2_filt8_l, p2_filt8_l, p1_filt8_l, p1_filt8_l, ++ p0_filt8_l, p0_filt8_l, q0_filt8_l, q0_filt8_l, p2_filt8_l, p1_filt8_l, ++ p0_filt8_l, q0_filt8_l); ++ DUP2_ARG2(__lsx_vpickev_b, q1_filt8_l, q1_filt8_l, q2_filt8_l, q2_filt8_l, ++ q1_filt8_l, q2_filt8_l); + + /* store pixel values */ + p2_out = __lsx_vbitsel_v(p2, p2_filt8_l, flat); +@@ -609,10 +567,10 @@ void ff_loop_filter_v_48_16_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i zero = { 0 }; + + /* load vector elements */ +- LSX_DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, +- dst - stride, 0, p3, p2, p1, p0); +- LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, +- dst + stride3, 0, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, ++ dst - stride, 0, p3, p2, p1, p0); ++ DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, ++ dst + stride3, 0, q0, q1, q2, q3); + + thresh = __lsx_vreplgr2vr_b(thresh_ptr); + tmp = __lsx_vreplgr2vr_b(thresh_ptr >> 8); +@@ -642,20 +600,19 @@ void ff_loop_filter_v_48_16_lsx(uint8_t *dst, ptrdiff_t stride, + __lsx_vst(q0_out, dst, 0); + __lsx_vst(q1_out, dst + stride, 0); + } else { +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, p3, zero, p2, zero, p1, zero, p0, +- p3_h, p2_h, p1_h, p0_h); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, q0, zero, q1, zero, q2, zero, q3, +- q0_h, q1_h, q2_h, q3_h); ++ DUP4_ARG2(__lsx_vilvh_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_h, p2_h, p1_h, p0_h); ++ DUP4_ARG2(__lsx_vilvh_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_h, q1_h, q2_h, q3_h); + VP9_FILTER8(p3_h, p2_h, p1_h, p0_h, q0_h, q1_h, q2_h, q3_h, p2_filt8_h, + p1_filt8_h, p0_filt8_h, q0_filt8_h, q1_filt8_h, q2_filt8_h); + + /* convert 16 bit output data into 8 bit */ +- LSX_DUP4_ARG2(__lsx_vpickev_b, p2_filt8_h, p2_filt8_h, p1_filt8_h, +- p1_filt8_h, p0_filt8_h, p0_filt8_h, q0_filt8_h, +- q0_filt8_h, p2_filt8_h, p1_filt8_h, p0_filt8_h, +- q0_filt8_h); +- LSX_DUP2_ARG2(__lsx_vpickev_b, q1_filt8_h, q1_filt8_h, q2_filt8_h, +- q2_filt8_h, q1_filt8_h, q2_filt8_h); ++ DUP4_ARG2(__lsx_vpickev_b, p2_filt8_h, p2_filt8_h, p1_filt8_h, ++ p1_filt8_h, p0_filt8_h, p0_filt8_h, q0_filt8_h, q0_filt8_h, ++ p2_filt8_h, p1_filt8_h, p0_filt8_h, q0_filt8_h); ++ DUP2_ARG2(__lsx_vpickev_b, q1_filt8_h, q1_filt8_h, q2_filt8_h, ++ q2_filt8_h, q1_filt8_h, q2_filt8_h); + + /* store pixel values */ + p2_out = __lsx_vbitsel_v(p2, p2_filt8_h, flat); +@@ -695,10 +652,10 @@ static int32_t vp9_hz_lpf_t4_and_t8_16w(uint8_t *dst, ptrdiff_t stride, + __m128i zero = __lsx_vldi(0); + + /* load vector elements */ +- LSX_DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, +- dst - stride, 0, p3, p2, p1, p0); +- LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, +- dst + stride3, 0, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, ++ dst - stride, 0, p3, p2, p1, p0); ++ DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, ++ dst + stride3, 0, q0, q1, q2, q3); + + thresh = __lsx_vreplgr2vr_b(thresh_ptr); + b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); +@@ -719,27 +676,26 @@ static int32_t vp9_hz_lpf_t4_and_t8_16w(uint8_t *dst, ptrdiff_t stride, + __lsx_vst(q1_out, dst + stride, 0); + return 1; + } else { +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, +- p3_l, p2_l, p1_l, p0_l); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, +- q0_l, q1_l, q2_l, q3_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_l, p2_l, p1_l, p0_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_l, q1_l, q2_l, q3_l); + VP9_FILTER8(p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l, p2_filt8_l, + p1_filt8_l, p0_filt8_l, q0_filt8_l, q1_filt8_l, q2_filt8_l); + +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, p3, zero, p2, zero, p1, zero, p0, +- p3_h, p2_h, p1_h, p0_h); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, q0, zero, q1, zero, q2, zero, q3, +- q0_h, q1_h, q2_h, q3_h); ++ DUP4_ARG2(__lsx_vilvh_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_h, p2_h, p1_h, p0_h); ++ DUP4_ARG2(__lsx_vilvh_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_h, q1_h, q2_h, q3_h); + VP9_FILTER8(p3_h, p2_h, p1_h, p0_h, q0_h, q1_h, q2_h, q3_h, p2_filt8_h, + p1_filt8_h, p0_filt8_h, q0_filt8_h, q1_filt8_h, q2_filt8_h); + + /* convert 16 bit output data into 8 bit */ +- LSX_DUP4_ARG2(__lsx_vpickev_b, p2_filt8_h, p2_filt8_l, p1_filt8_h, +- p1_filt8_l, p0_filt8_h, p0_filt8_l, q0_filt8_h, +- q0_filt8_l, p2_filt8_l, p1_filt8_l, p0_filt8_l, +- q0_filt8_l); +- LSX_DUP2_ARG2(__lsx_vpickev_b, q1_filt8_h, q1_filt8_l, q2_filt8_h, +- q2_filt8_l, q1_filt8_l, q2_filt8_l); ++ DUP4_ARG2(__lsx_vpickev_b, p2_filt8_h, p2_filt8_l, p1_filt8_h, ++ p1_filt8_l, p0_filt8_h, p0_filt8_l, q0_filt8_h, q0_filt8_l, ++ p2_filt8_l, p1_filt8_l, p0_filt8_l, q0_filt8_l); ++ DUP2_ARG2(__lsx_vpickev_b, q1_filt8_h, q1_filt8_l, q2_filt8_h, ++ q2_filt8_l, q1_filt8_l, q2_filt8_l); + + /* store pixel values */ + p2_out = __lsx_vbitsel_v(p2, p2_filt8_l, flat); +@@ -784,21 +740,21 @@ static void vp9_hz_lpf_t16_16w(uint8_t *dst, ptrdiff_t stride, uint8_t *filter48 + + flat = __lsx_vld(filter48, 96); + +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp - stride4, 0, dst_tmp - stride3, 0, +- dst_tmp - stride2, 0, dst_tmp - stride, 0, p7, p6, p5, p4); +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp + stride, 0, dst_tmp + stride2, 0, +- dst_tmp + stride3, 0, p3, p2, p1, p0); +- LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, dst + stride3, +- 0, q0, q1, q2, q3); +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp1, 0, dst_tmp1 + stride, 0, dst_tmp1 + stride2, 0, +- dst_tmp1 + stride3, 0, q4, q5, q6, q7); ++ DUP4_ARG2(__lsx_vld, dst_tmp - stride4, 0, dst_tmp - stride3, 0, ++ dst_tmp - stride2, 0, dst_tmp - stride, 0, p7, p6, p5, p4); ++ DUP4_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp + stride, 0, dst_tmp + stride2, 0, ++ dst_tmp + stride3, 0, p3, p2, p1, p0); ++ DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, dst + stride3, ++ 0, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vld, dst_tmp1, 0, dst_tmp1 + stride, 0, dst_tmp1 + stride2, 0, ++ dst_tmp1 + stride3, 0, q4, q5, q6, q7); + VP9_FLAT5(p7, p6, p5, p4, p0, q0, q4, q5, q6, q7, flat, flat2); + + /* if flat2 is zero for all pixels, then no need to calculate other filter */ + if (__lsx_bz_v(flat2)) { +- LSX_DUP4_ARG2(__lsx_vld, filter48, 0, filter48, 16, filter48, 32, filter48, +- 48, p2, p1, p0, q0); +- LSX_DUP2_ARG2(__lsx_vld, filter48, 64, filter48, 80, q1, q2); ++ DUP4_ARG2(__lsx_vld, filter48, 0, filter48, 16, filter48, 32, filter48, ++ 48, p2, p1, p0, q0); ++ DUP2_ARG2(__lsx_vld, filter48, 64, filter48, 80, q1, q2); + + __lsx_vst(p2, dst - stride3, 0); + __lsx_vst(p1, dst - stride2, 0); +@@ -1157,10 +1113,10 @@ void ff_loop_filter_v_16_8_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i tmp0, tmp1, tmp2; + + /* load vector elements */ +- LSX_DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, +- dst - stride, 0, p3, p2, p1, p0); +- LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, +- dst + stride3, 0, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, ++ dst - stride, 0, p3, p2, p1, p0); ++ DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, ++ dst + stride3, 0, q0, q1, q2, q3); + + thresh = __lsx_vreplgr2vr_b(thresh_ptr); + b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); +@@ -1182,20 +1138,20 @@ void ff_loop_filter_v_16_8_lsx(uint8_t *dst, ptrdiff_t stride, + __lsx_vstelm_d(q1_out, dst + stride, 0, 0); + } else { + /* convert 8 bit input data into 16 bit */ +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, +- p3_l, p2_l, p1_l, p0_l); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, +- q0_l, q1_l, q2_l, q3_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_l, p2_l, p1_l, p0_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_l, q1_l, q2_l, q3_l); + VP9_FILTER8(p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l, + p2_filter8, p1_filter8, p0_filter8, q0_filter8, + q1_filter8, q2_filter8); + + /* convert 16 bit output data into 8 bit */ +- LSX_DUP4_ARG2(__lsx_vpickev_b, zero, p2_filter8, zero, p1_filter8, +- zero, p0_filter8, zero, q0_filter8, p2_filter8, +- p1_filter8, p0_filter8, q0_filter8); +- LSX_DUP2_ARG2(__lsx_vpickev_b, zero, q1_filter8, zero, q2_filter8, +- q1_filter8, q2_filter8); ++ DUP4_ARG2(__lsx_vpickev_b, zero, p2_filter8, zero, p1_filter8, ++ zero, p0_filter8, zero, q0_filter8, p2_filter8, ++ p1_filter8, p0_filter8, q0_filter8); ++ DUP2_ARG2(__lsx_vpickev_b, zero, q1_filter8, zero, q2_filter8, ++ q1_filter8, q2_filter8); + + /* store pixel values */ + p2_out = __lsx_vbitsel_v(p2, p2_filter8, flat); +@@ -1206,10 +1162,10 @@ void ff_loop_filter_v_16_8_lsx(uint8_t *dst, ptrdiff_t stride, + q2_out = __lsx_vbitsel_v(q2, q2_filter8, flat); + + /* load 16 vector elements */ +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp - stride4, 0, dst_tmp - stride3, 0, +- dst_tmp - stride2, 0, dst_tmp - stride, 0, p7, p6, p5, p4); +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp1, 0, dst_tmp1 + stride, 0, dst_tmp1 + stride2, +- 0, dst_tmp1 + stride3, 0, q4, q5, q6, q7); ++ DUP4_ARG2(__lsx_vld, dst_tmp - stride4, 0, dst_tmp - stride3, 0, ++ dst_tmp - stride2, 0, dst_tmp - stride, 0, p7, p6, p5, p4); ++ DUP4_ARG2(__lsx_vld, dst_tmp1, 0, dst_tmp1 + stride, 0, dst_tmp1 + stride2, ++ 0, dst_tmp1 + stride3, 0, q4, q5, q6, q7); + + VP9_FLAT5(p7, p6, p5, p4, p0, q0, q4, q5, q6, q7, flat, flat2); + +@@ -1229,10 +1185,10 @@ void ff_loop_filter_v_16_8_lsx(uint8_t *dst, ptrdiff_t stride, + __lsx_vstelm_d(q2_out, dst, 0, 0); + } else { + /* LSB(right) 8 pixel operation */ +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p7, zero, p6, zero, p5, zero, p4, +- p7_l, p6_l, p5_l, p4_l); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q4, zero, q5, zero, q6, zero, q7, +- q4_l, q5_l, q6_l, q7_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, p7, zero, p6, zero, p5, zero, p4, ++ p7_l, p6_l, p5_l, p4_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, q4, zero, q5, zero, q6, zero, q7, ++ q4_l, q5_l, q6_l, q7_l); + + tmp0 = __lsx_vslli_h(p7_l, 3); + tmp0 = __lsx_vsub_h(tmp0, p7_l); +@@ -1257,8 +1213,8 @@ void ff_loop_filter_v_16_8_lsx(uint8_t *dst, ptrdiff_t stride, + tmp1 = __lsx_vadd_h(tmp1, tmp0); + + p1_filter16 = __lsx_vsrari_h(tmp1, 4); +- LSX_DUP2_ARG2(__lsx_vpickev_b, zero, p0_filter16, zero, +- p1_filter16, p0_filter16, p1_filter16); ++ DUP2_ARG2(__lsx_vpickev_b, zero, p0_filter16, zero, ++ p1_filter16, p0_filter16, p1_filter16); + p0_filter16 = __lsx_vbitsel_v(p6, p0_filter16, flat2); + p1_filter16 = __lsx_vbitsel_v(p5, p1_filter16, flat2); + __lsx_vstelm_d(p0_filter16, dst, 0, 0); +@@ -1277,8 +1233,8 @@ void ff_loop_filter_v_16_8_lsx(uint8_t *dst, ptrdiff_t stride, + p0_filter16 = __lsx_vsrari_h(tmp1, 4); + tmp1 = __lsx_vadd_h(tmp1, tmp2); + p1_filter16 = __lsx_vsrari_h(tmp1, 4); +- LSX_DUP2_ARG2(__lsx_vpickev_b, zero, p0_filter16, zero, +- p1_filter16, p0_filter16, p1_filter16); ++ DUP2_ARG2(__lsx_vpickev_b, zero, p0_filter16, zero, ++ p1_filter16, p0_filter16, p1_filter16); + p0_filter16 = __lsx_vbitsel_v(p4, p0_filter16, flat2); + p1_filter16 = __lsx_vbitsel_v(p3, p1_filter16, flat2); + __lsx_vstelm_d(p0_filter16, dst, 0, 0); +@@ -1297,8 +1253,8 @@ void ff_loop_filter_v_16_8_lsx(uint8_t *dst, ptrdiff_t stride, + p0_filter16 = __lsx_vsrari_h(tmp1, 4); + tmp1 = __lsx_vadd_h(tmp1, tmp2); + p1_filter16 = __lsx_vsrari_h(tmp1, 4); +- LSX_DUP2_ARG2(__lsx_vpickev_b, zero, p0_filter16, zero, +- p1_filter16, p0_filter16, p1_filter16); ++ DUP2_ARG2(__lsx_vpickev_b, zero, p0_filter16, zero, ++ p1_filter16, p0_filter16, p1_filter16); + p0_filter16 = __lsx_vbitsel_v(p2_out, p0_filter16, flat2); + p1_filter16 = __lsx_vbitsel_v(p1_out, p1_filter16, flat2); + __lsx_vstelm_d(p0_filter16, dst, 0, 0); +@@ -1317,8 +1273,8 @@ void ff_loop_filter_v_16_8_lsx(uint8_t *dst, ptrdiff_t stride, + p0_filter16 = __lsx_vsrari_h((__m128i)tmp1, 4); + tmp1 = __lsx_vadd_h(tmp1, tmp2); + p1_filter16 = __lsx_vsrari_h((__m128i)tmp1, 4); +- LSX_DUP2_ARG2(__lsx_vpickev_b, zero, p0_filter16, zero, +- p1_filter16, p0_filter16, p1_filter16); ++ DUP2_ARG2(__lsx_vpickev_b, zero, p0_filter16, zero, ++ p1_filter16, p0_filter16, p1_filter16); + p0_filter16 = __lsx_vbitsel_v(p0_out, p0_filter16, flat2); + p1_filter16 = __lsx_vbitsel_v(q0_out, p1_filter16, flat2); + __lsx_vstelm_d(p0_filter16, dst, 0, 0); +@@ -1337,8 +1293,8 @@ void ff_loop_filter_v_16_8_lsx(uint8_t *dst, ptrdiff_t stride, + p0_filter16 = __lsx_vsrari_h(tmp1, 4); + tmp1 = __lsx_vadd_h(tmp1, tmp2); + p1_filter16 = __lsx_vsrari_h(tmp1, 4); +- LSX_DUP2_ARG2(__lsx_vpickev_b, zero, p0_filter16, zero, +- p1_filter16, p0_filter16, p1_filter16); ++ DUP2_ARG2(__lsx_vpickev_b, zero, p0_filter16, zero, ++ p1_filter16, p0_filter16, p1_filter16); + p0_filter16 = __lsx_vbitsel_v(q1_out, p0_filter16, flat2); + p1_filter16 = __lsx_vbitsel_v(q2_out, p1_filter16, flat2); + __lsx_vstelm_d(p0_filter16, dst, 0, 0); +@@ -1357,8 +1313,8 @@ void ff_loop_filter_v_16_8_lsx(uint8_t *dst, ptrdiff_t stride, + p0_filter16 = __lsx_vsrari_h(tmp1, 4); + tmp1 = __lsx_vadd_h(tmp1, tmp2); + p1_filter16 = __lsx_vsrari_h(tmp1, 4); +- LSX_DUP2_ARG2(__lsx_vpickev_b, zero, p0_filter16, zero, +- p1_filter16, p0_filter16, p1_filter16); ++ DUP2_ARG2(__lsx_vpickev_b, zero, p0_filter16, zero, ++ p1_filter16, p0_filter16, p1_filter16); + p0_filter16 = __lsx_vbitsel_v(q3, p0_filter16, flat2); + p1_filter16 = __lsx_vbitsel_v(q4, p1_filter16, flat2); + __lsx_vstelm_d(p0_filter16, dst, 0, 0); +@@ -1377,8 +1333,8 @@ void ff_loop_filter_v_16_8_lsx(uint8_t *dst, ptrdiff_t stride, + p0_filter16 = __lsx_vsrari_h(tmp1, 4); + tmp1 = __lsx_vadd_h(tmp1, tmp2); + p1_filter16 = __lsx_vsrari_h(tmp1, 4); +- LSX_DUP2_ARG2(__lsx_vpickev_b, zero, p0_filter16, zero, +- p1_filter16, p0_filter16, p1_filter16); ++ DUP2_ARG2(__lsx_vpickev_b, zero, p0_filter16, zero, ++ p1_filter16, p0_filter16, p1_filter16); + p0_filter16 = __lsx_vbitsel_v(q5, p0_filter16, flat2); + p1_filter16 = __lsx_vbitsel_v(q6, p1_filter16, flat2); + __lsx_vstelm_d(p0_filter16, dst, 0, 0); +@@ -1401,10 +1357,10 @@ void ff_loop_filter_h_4_8_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i p3, p2, p1, p0, q3, q2, q1, q0; + __m128i vec0, vec1, vec2, vec3; + +- LSX_DUP4_ARG2(__lsx_vld, dst, -4, dst + stride, -4, dst + stride2, -4, +- dst + stride3, -4, p3, p2, p1, p0); +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vld, dst, -4, dst + stride, -4, dst + stride2, -4, ++ dst + stride3, -4, p3, p2, p1, p0); ++ DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, q0, q1, q2, q3); + + thresh = __lsx_vreplgr2vr_b(thresh_ptr); + b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); +@@ -1415,7 +1371,7 @@ void ff_loop_filter_h_4_8_lsx(uint8_t *dst, ptrdiff_t stride, + LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, + hev, mask, flat); + VP9_LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev, p1, p0, q0, q1); +- LSX_DUP2_ARG2(__lsx_vilvl_b, p0, p1, q1, q0, vec0, vec1); ++ DUP2_ARG2(__lsx_vilvl_b, p0, p1, q1, q0, vec0, vec1); + vec2 = __lsx_vilvl_h(vec1, vec0); + vec3 = __lsx_vilvh_h(vec1, vec0); + +@@ -1447,17 +1403,17 @@ void ff_loop_filter_h_44_16_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i row8, row9, row10, row11, row12, row13, row14, row15; + __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; + +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, row0, row1, row2, row3); ++ DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, row0, row1, row2, row3); + dst_tmp += stride4; +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, row4, row5, row6, row7); ++ DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, row4, row5, row6, row7); + dst_tmp += stride4; +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, row8, row9, row10, row11); ++ DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, row8, row9, row10, row11); + dst_tmp += stride4; +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, row12, row13, row14, row15); ++ DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, row12, row13, row14, row15); + + LSX_TRANSPOSE16x8_B(row0, row1, row2, row3, row4, row5, row6, row7, + row8, row9, row10, row11, row12, row13, row14, row15, +@@ -1478,10 +1434,10 @@ void ff_loop_filter_h_44_16_lsx(uint8_t *dst, ptrdiff_t stride, + LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit0, b_limit0, thresh0, + hev, mask, flat); + VP9_LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev, p1, p0, q0, q1); +- LSX_DUP2_ARG2(__lsx_vilvl_b, p0, p1, q1, q0, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vilvl_b, p0, p1, q1, q0, tmp0, tmp1); + tmp2 = __lsx_vilvl_h(tmp1, tmp0); + tmp3 = __lsx_vilvh_h(tmp1, tmp0); +- LSX_DUP2_ARG2(__lsx_vilvh_b, p0, p1, q1, q0, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vilvh_b, p0, p1, q1, q0, tmp0, tmp1); + tmp4 = __lsx_vilvl_h(tmp1, tmp0); + tmp5 = __lsx_vilvh_h(tmp1, tmp0); + +@@ -1526,11 +1482,11 @@ void ff_loop_filter_h_8_8_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i zero = __lsx_vldi(0); + + /* load vector elements */ +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, p3, p2, p1, p0); ++ DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, p3, p2, p1, p0); + dst_tmp += stride4; +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, q0, q1, q2, q3); + + LSX_TRANSPOSE8x8_B(p3, p2, p1, p0, q0, q1, q2, q3, + p3, p2, p1, p0, q0, q1, q2, q3); +@@ -1553,7 +1509,7 @@ void ff_loop_filter_h_8_8_lsx(uint8_t *dst, ptrdiff_t stride, + /* if flat is zero for all pixels, then no need to calculate other filter */ + if (__lsx_bz_v(flat)) { + /* Store 4 pixels p1-_q1 */ +- LSX_DUP2_ARG2(__lsx_vilvl_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); ++ DUP2_ARG2(__lsx_vilvl_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); + vec2 = __lsx_vilvl_h(vec1, vec0); + vec3 = __lsx_vilvh_h(vec1, vec0); + +@@ -1568,19 +1524,19 @@ void ff_loop_filter_h_8_8_lsx(uint8_t *dst, ptrdiff_t stride, + __lsx_vstelm_w(vec3, dst + stride2, 0, 2); + __lsx_vstelm_w(vec3, dst + stride3, 0, 3); + } else { +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, +- p3_l, p2_l, p1_l, p0_l); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, +- q0_l, q1_l, q2_l, q3_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_l, p2_l, p1_l, p0_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_l, q1_l, q2_l, q3_l); + VP9_FILTER8(p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l, p2_filt8_l, + p1_filt8_l, p0_filt8_l, q0_filt8_l, q1_filt8_l, q2_filt8_l); + /* convert 16 bit output data into 8 bit */ +- LSX_DUP4_ARG2(__lsx_vpickev_b, p2_filt8_l, p2_filt8_l, p1_filt8_l, +- p1_filt8_l, p0_filt8_l, p0_filt8_l, q0_filt8_l, +- q0_filt8_l, p2_filt8_l, p1_filt8_l, p0_filt8_l, +- q0_filt8_l); +- LSX_DUP2_ARG2(__lsx_vpickev_b, q1_filt8_l, q1_filt8_l, q2_filt8_l, +- q2_filt8_l, q1_filt8_l, q2_filt8_l); ++ DUP4_ARG2(__lsx_vpickev_b, p2_filt8_l, p2_filt8_l, p1_filt8_l, ++ p1_filt8_l, p0_filt8_l, p0_filt8_l, q0_filt8_l, ++ q0_filt8_l, p2_filt8_l, p1_filt8_l, p0_filt8_l, ++ q0_filt8_l); ++ DUP2_ARG2(__lsx_vpickev_b, q1_filt8_l, q1_filt8_l, q2_filt8_l, ++ q2_filt8_l, q1_filt8_l, q2_filt8_l); + + /* store pixel values */ + p2 = __lsx_vbitsel_v(p2, p2_filt8_l, flat); +@@ -1591,7 +1547,7 @@ void ff_loop_filter_h_8_8_lsx(uint8_t *dst, ptrdiff_t stride, + q2 = __lsx_vbitsel_v(q2, q2_filt8_l, flat); + + /* Store 6 pixels p2-_q2 */ +- LSX_DUP2_ARG2(__lsx_vilvl_b, p1, p2, q0, p0, vec0, vec1); ++ DUP2_ARG2(__lsx_vilvl_b, p1, p2, q0, p0, vec0, vec1); + vec2 = __lsx_vilvl_h(vec1, vec0); + vec3 = __lsx_vilvh_h(vec1, vec0); + vec4 = __lsx_vilvl_b(q2, q1); +@@ -1646,17 +1602,17 @@ void ff_loop_filter_h_88_16_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i zero = __lsx_vldi(0); + + +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, p0, p1, p2, p3); ++ DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, p0, p1, p2, p3); + dst_tmp += stride4; +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, row4, row5, row6, row7); ++ DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, row4, row5, row6, row7); + dst_tmp += stride4; +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, q3, q2, q1, q0); ++ DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, q3, q2, q1, q0); + dst_tmp += stride4; +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, row12, row13, row14, row15); ++ DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, row12, row13, row14, row15); + + /* transpose 16x8 matrix into 8x16 */ + LSX_TRANSPOSE16x8_B(p0, p1, p2, p3, row4, row5, row6, row7, +@@ -1686,12 +1642,10 @@ void ff_loop_filter_h_88_16_lsx(uint8_t *dst, ptrdiff_t stride, + + /* if flat is zero for all pixels, then no need to calculate other filter */ + if (__lsx_bz_v(flat)) { +- LSX_DUP2_ARG2(__lsx_vilvl_b, p0_out, p1_out, q1_out, q0_out, +- vec0, vec1); ++ DUP2_ARG2(__lsx_vilvl_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); + vec2 = __lsx_vilvl_h(vec1, vec0); + vec3 = __lsx_vilvh_h(vec1, vec0); +- LSX_DUP2_ARG2(__lsx_vilvh_b, p0_out, p1_out, q1_out, q0_out, +- vec0, vec1); ++ DUP2_ARG2(__lsx_vilvh_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); + vec4 = __lsx_vilvl_h(vec1, vec0); + vec5 = __lsx_vilvh_h(vec1, vec0); + +@@ -1716,29 +1670,28 @@ void ff_loop_filter_h_88_16_lsx(uint8_t *dst, ptrdiff_t stride, + __lsx_vstelm_w(vec5, dst + stride2, 0, 2); + __lsx_vstelm_w(vec5, dst + stride3, 0, 3); + } else { +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, +- p3_l, p2_l, p1_l, p0_l); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, +- q0_l, q1_l, q2_l, q3_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_l, p2_l, p1_l, p0_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_l, q1_l, q2_l, q3_l); + VP9_FILTER8(p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l, p2_filt8_l, + p1_filt8_l, p0_filt8_l, q0_filt8_l, q1_filt8_l, q2_filt8_l); + +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, p3, zero, p2, zero, p1, zero, p0, +- p3_h, p2_h, p1_h, p0_h); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, q0, zero, q1, zero, q2, zero, q3, +- q0_h, q1_h, q2_h, q3_h); ++ DUP4_ARG2(__lsx_vilvh_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_h, p2_h, p1_h, p0_h); ++ DUP4_ARG2(__lsx_vilvh_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_h, q1_h, q2_h, q3_h); + + /* filter8 */ + VP9_FILTER8(p3_h, p2_h, p1_h, p0_h, q0_h, q1_h, q2_h, q3_h, p2_filt8_h, + p1_filt8_h, p0_filt8_h, q0_filt8_h, q1_filt8_h, q2_filt8_h); + + /* convert 16 bit output data into 8 bit */ +- LSX_DUP4_ARG2(__lsx_vpickev_b, p2_filt8_h, p2_filt8_l, p1_filt8_h, +- p1_filt8_l, p0_filt8_h, p0_filt8_l, q0_filt8_h, +- q0_filt8_l, p2_filt8_l, p1_filt8_l, p0_filt8_l, +- q0_filt8_l); +- LSX_DUP2_ARG2(__lsx_vpickev_b, q1_filt8_h, q1_filt8_l, q2_filt8_h, +- q2_filt8_l, q1_filt8_l, q2_filt8_l); ++ DUP4_ARG2(__lsx_vpickev_b, p2_filt8_h, p2_filt8_l, p1_filt8_h, p1_filt8_l, ++ p0_filt8_h, p0_filt8_l, q0_filt8_h, q0_filt8_l, p2_filt8_l, p1_filt8_l, ++ p0_filt8_l, q0_filt8_l); ++ DUP2_ARG2(__lsx_vpickev_b, q1_filt8_h, q1_filt8_l, q2_filt8_h, q2_filt8_l, ++ q1_filt8_l, q2_filt8_l); + + /* store pixel values */ + p2 = __lsx_vbitsel_v(p2, p2_filt8_l, flat); +@@ -1748,10 +1701,10 @@ void ff_loop_filter_h_88_16_lsx(uint8_t *dst, ptrdiff_t stride, + q1 = __lsx_vbitsel_v(q1_out, q1_filt8_l, flat); + q2 = __lsx_vbitsel_v(q2, q2_filt8_l, flat); + +- LSX_DUP2_ARG2(__lsx_vilvl_b, p1, p2, q0, p0, vec0, vec1); ++ DUP2_ARG2(__lsx_vilvl_b, p1, p2, q0, p0, vec0, vec1); + vec3 = __lsx_vilvl_h(vec1, vec0); + vec4 = __lsx_vilvh_h(vec1, vec0); +- LSX_DUP2_ARG2(__lsx_vilvh_b, p1, p2, q0, p0, vec0, vec1); ++ DUP2_ARG2(__lsx_vilvh_b, p1, p2, q0, p0, vec0, vec1); + vec6 = __lsx_vilvl_h(vec1, vec0); + vec7 = __lsx_vilvh_h(vec1, vec0); + vec2 = __lsx_vilvl_b(q2, q1); +@@ -1827,17 +1780,17 @@ void ff_loop_filter_h_84_16_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; + __m128i zero = __lsx_vldi(0); + +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, p0, p1, p2, p3); ++ DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, p0, p1, p2, p3); + dst_tmp += stride4; +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, row4, row5, row6, row7); ++ DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, row4, row5, row6, row7); + dst_tmp += stride4; +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, q3, q2, q1, q0); ++ DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, q3, q2, q1, q0); + dst_tmp += stride4; +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, row12, row13, row14, row15); ++ DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, row12, row13, row14, row15); + + /* transpose 16x8 matrix into 8x16 */ + LSX_TRANSPOSE16x8_B(p0, p1, p2, p3, row4, row5, row6, row7, +@@ -1869,10 +1822,10 @@ void ff_loop_filter_h_84_16_lsx(uint8_t *dst, ptrdiff_t stride, + + /* if flat is zero for all pixels, then no need to calculate other filter */ + if (__lsx_bz_v(flat)) { +- LSX_DUP2_ARG2(__lsx_vilvl_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); ++ DUP2_ARG2(__lsx_vilvl_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); + vec2 = __lsx_vilvl_h(vec1, vec0); + vec3 = __lsx_vilvh_h(vec1, vec0); +- LSX_DUP2_ARG2(__lsx_vilvh_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); ++ DUP2_ARG2(__lsx_vilvh_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); + vec4 = __lsx_vilvl_h(vec1, vec0); + vec5 = __lsx_vilvh_h(vec1, vec0); + +@@ -1897,20 +1850,19 @@ void ff_loop_filter_h_84_16_lsx(uint8_t *dst, ptrdiff_t stride, + __lsx_vstelm_w(vec5, dst + stride2, 0, 2); + __lsx_vstelm_w(vec5, dst + stride3, 0, 3); + } else { +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, +- p3_l, p2_l, p1_l, p0_l); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, +- q0_l, q1_l, q2_l, q3_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_l, p2_l, p1_l, p0_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_l, q1_l, q2_l, q3_l); + VP9_FILTER8(p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l, p2_filt8_l, + p1_filt8_l, p0_filt8_l, q0_filt8_l, q1_filt8_l, q2_filt8_l); + + /* convert 16 bit output data into 8 bit */ +- LSX_DUP4_ARG2(__lsx_vpickev_b, p2_filt8_l, p2_filt8_l, p1_filt8_l, +- p1_filt8_l, p0_filt8_l, p0_filt8_l, q0_filt8_l, +- q0_filt8_l, p2_filt8_l, p1_filt8_l, p0_filt8_l, +- q0_filt8_l); +- LSX_DUP2_ARG2(__lsx_vpickev_b, q1_filt8_l, q1_filt8_l, q2_filt8_l, +- q2_filt8_l, q1_filt8_l, q2_filt8_l); ++ DUP4_ARG2(__lsx_vpickev_b, p2_filt8_l, p2_filt8_l, p1_filt8_l, p1_filt8_l, ++ p0_filt8_l, p0_filt8_l, q0_filt8_l, q0_filt8_l, p2_filt8_l, ++ p1_filt8_l, p0_filt8_l, q0_filt8_l); ++ DUP2_ARG2(__lsx_vpickev_b, q1_filt8_l, q1_filt8_l, q2_filt8_l, q2_filt8_l, ++ q1_filt8_l, q2_filt8_l); + + /* store pixel values */ + p2 = __lsx_vbitsel_v(p2, p2_filt8_l, flat); +@@ -1920,10 +1872,10 @@ void ff_loop_filter_h_84_16_lsx(uint8_t *dst, ptrdiff_t stride, + q1 = __lsx_vbitsel_v(q1_out, q1_filt8_l, flat); + q2 = __lsx_vbitsel_v(q2, q2_filt8_l, flat); + +- LSX_DUP2_ARG2(__lsx_vilvl_b, p1, p2, q0, p0, vec0, vec1); ++ DUP2_ARG2(__lsx_vilvl_b, p1, p2, q0, p0, vec0, vec1); + vec3 = __lsx_vilvl_h(vec1, vec0); + vec4 = __lsx_vilvh_h(vec1, vec0); +- LSX_DUP2_ARG2(__lsx_vilvh_b, p1, p2, q0, p0, vec0, vec1); ++ DUP2_ARG2(__lsx_vilvh_b, p1, p2, q0, p0, vec0, vec1); + vec6 = __lsx_vilvl_h(vec1, vec0); + vec7 = __lsx_vilvh_h(vec1, vec0); + vec2 = __lsx_vilvl_b(q2, q1); +@@ -1999,17 +1951,17 @@ void ff_loop_filter_h_48_16_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; + __m128i zero = __lsx_vldi(0); + +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, p0, p1, p2, p3); ++ DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, p0, p1, p2, p3); + dst_tmp += stride4; +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, row4, row5, row6, row7); ++ DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, row4, row5, row6, row7); + dst_tmp += stride4; +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, q3, q2, q1, q0); ++ DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, q3, q2, q1, q0); + dst_tmp += stride4; +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, row12, row13, row14, row15); ++ DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, ++ dst_tmp + stride3, -4, row12, row13, row14, row15); + + /* transpose 16x8 matrix into 8x16 */ + LSX_TRANSPOSE16x8_B(p0, p1, p2, p3, row4, row5, row6, row7, +@@ -2041,10 +1993,10 @@ void ff_loop_filter_h_48_16_lsx(uint8_t *dst, ptrdiff_t stride, + + /* if flat is zero for all pixels, then no need to calculate other filter */ + if (__lsx_bz_v(flat)) { +- LSX_DUP2_ARG2(__lsx_vilvl_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); ++ DUP2_ARG2(__lsx_vilvl_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); + vec2 = __lsx_vilvl_h(vec1, vec0); + vec3 = __lsx_vilvh_h(vec1, vec0); +- LSX_DUP2_ARG2(__lsx_vilvh_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); ++ DUP2_ARG2(__lsx_vilvh_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); + vec4 = __lsx_vilvl_h(vec1, vec0); + vec5 = __lsx_vilvh_h(vec1, vec0); + +@@ -2069,21 +2021,20 @@ void ff_loop_filter_h_48_16_lsx(uint8_t *dst, ptrdiff_t stride, + __lsx_vstelm_w(vec5, dst + stride2, 0, 2); + __lsx_vstelm_w(vec5, dst + stride3, 0, 3); + } else { +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, p3, zero, p2, zero, p1, zero, p0, +- p3_h, p2_h, p1_h, p0_h); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, q0, zero, q1, zero, q2, zero, q3, +- q0_h, q1_h, q2_h, q3_h); ++ DUP4_ARG2(__lsx_vilvh_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_h, p2_h, p1_h, p0_h); ++ DUP4_ARG2(__lsx_vilvh_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_h, q1_h, q2_h, q3_h); + + VP9_FILTER8(p3_h, p2_h, p1_h, p0_h, q0_h, q1_h, q2_h, q3_h, p2_filt8_h, + p1_filt8_h, p0_filt8_h, q0_filt8_h, q1_filt8_h, q2_filt8_h); + + /* convert 16 bit output data into 8 bit */ +- LSX_DUP4_ARG2(__lsx_vpickev_b, p2_filt8_h, p2_filt8_h, p1_filt8_h, +- p1_filt8_h, p0_filt8_h, p0_filt8_h, q0_filt8_h, +- q0_filt8_h, p2_filt8_h, p1_filt8_h, p0_filt8_h, +- q0_filt8_h); +- LSX_DUP2_ARG2(__lsx_vpickev_b, q1_filt8_h, q1_filt8_h, q2_filt8_h, +- q2_filt8_h, q1_filt8_h, q2_filt8_h); ++ DUP4_ARG2(__lsx_vpickev_b, p2_filt8_h, p2_filt8_h, p1_filt8_h, ++ p1_filt8_h, p0_filt8_h, p0_filt8_h, q0_filt8_h, q0_filt8_h, ++ p2_filt8_h, p1_filt8_h, p0_filt8_h, q0_filt8_h); ++ DUP2_ARG2(__lsx_vpickev_b, q1_filt8_h, q1_filt8_h, q2_filt8_h, ++ q2_filt8_h, q1_filt8_h, q2_filt8_h); + + /* store pixel values */ + p2 = __lsx_vbitsel_v(p2, p2_filt8_h, flat); +@@ -2093,10 +2044,10 @@ void ff_loop_filter_h_48_16_lsx(uint8_t *dst, ptrdiff_t stride, + q1 = __lsx_vbitsel_v(q1_out, q1_filt8_h, flat); + q2 = __lsx_vbitsel_v(q2, q2_filt8_h, flat); + +- LSX_DUP2_ARG2(__lsx_vilvl_b, p1, p2, q0, p0, vec0, vec1); ++ DUP2_ARG2(__lsx_vilvl_b, p1, p2, q0, p0, vec0, vec1); + vec3 = __lsx_vilvl_h(vec1, vec0); + vec4 = __lsx_vilvh_h(vec1, vec0); +- LSX_DUP2_ARG2(__lsx_vilvh_b, p1, p2, q0, p0, vec0, vec1); ++ DUP2_ARG2(__lsx_vilvh_b, p1, p2, q0, p0, vec0, vec1); + vec6 = __lsx_vilvl_h(vec1, vec0); + vec7 = __lsx_vilvh_h(vec1, vec0); + vec2 = __lsx_vilvl_b(q2, q1); +@@ -2166,13 +2117,13 @@ static void vp9_transpose_16x8_to_8x16(uint8_t *input, int32_t in_pitch, + LSX_TRANSPOSE8x8_B(p7_org, p6_org, p5_org, p4_org, p3_org, p2_org, p1_org, + p0_org, p7, p6, p5, p4, p3, p2, p1, p0); + /* 8x8 transpose */ +- LSX_DUP4_ARG2(__lsx_vilvh_b, p5_org, p7_org, p4_org, p6_org, p1_org, +- p3_org, p0_org, p2_org, tmp0, tmp1, tmp2, tmp3); +- LSX_DUP2_ARG2(__lsx_vilvl_b, tmp1, tmp0, tmp3, tmp2, tmp4, tmp6); +- LSX_DUP2_ARG2(__lsx_vilvh_b, tmp1, tmp0, tmp3, tmp2, tmp5, tmp7); +- LSX_DUP2_ARG2(__lsx_vilvl_w, tmp6, tmp4, tmp7, tmp5, q0, q4); +- LSX_DUP2_ARG2(__lsx_vilvh_w, tmp6, tmp4, tmp7, tmp5, q2, q6); +- LSX_DUP4_ARG2(__lsx_vbsrl_v, q0, 8, q2, 8, q4, 8, q6, 8, q1, q3, q5, q7); ++ DUP4_ARG2(__lsx_vilvh_b, p5_org, p7_org, p4_org, p6_org, p1_org, ++ p3_org, p0_org, p2_org, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lsx_vilvl_b, tmp1, tmp0, tmp3, tmp2, tmp4, tmp6); ++ DUP2_ARG2(__lsx_vilvh_b, tmp1, tmp0, tmp3, tmp2, tmp5, tmp7); ++ DUP2_ARG2(__lsx_vilvl_w, tmp6, tmp4, tmp7, tmp5, q0, q4); ++ DUP2_ARG2(__lsx_vilvh_w, tmp6, tmp4, tmp7, tmp5, q2, q6); ++ DUP4_ARG2(__lsx_vbsrl_v, q0, 8, q2, 8, q4, 8, q6, 8, q1, q3, q5, q7); + + LSX_ST_8(p7, p6, p5, p4, p3, p2, p1, p0, output, out_pitch); + output += out_pitch; +@@ -2222,13 +2173,13 @@ static void vp9_transpose_16x16(uint8_t *input, int32_t in_stride, + q1 = __lsx_vpackod_d(row14, row6); + q0 = __lsx_vpackod_d(row15, row7); + +- LSX_DUP2_ARG2(__lsx_vpackev_b, q6, q7, q4, q5, tmp0, tmp1); +- LSX_DUP2_ARG2(__lsx_vpackod_b, q6, q7, q4, q5, tmp4, tmp5); ++ DUP2_ARG2(__lsx_vpackev_b, q6, q7, q4, q5, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vpackod_b, q6, q7, q4, q5, tmp4, tmp5); + +- LSX_DUP2_ARG2(__lsx_vpackev_b, q2, q3, q0, q1, q5, q7); +- LSX_DUP2_ARG2(__lsx_vpackod_b, q2, q3, q0, q1, tmp6, tmp7); ++ DUP2_ARG2(__lsx_vpackev_b, q2, q3, q0, q1, q5, q7); ++ DUP2_ARG2(__lsx_vpackod_b, q2, q3, q0, q1, tmp6, tmp7); + +- LSX_DUP2_ARG2(__lsx_vpackev_h, tmp1, tmp0, q7, q5, tmp2, tmp3); ++ DUP2_ARG2(__lsx_vpackev_h, tmp1, tmp0, q7, q5, tmp2, tmp3); + q0 = __lsx_vpackev_w(tmp3, tmp2); + q4 = __lsx_vpackod_w(tmp3, tmp2); + +@@ -2237,7 +2188,7 @@ static void vp9_transpose_16x16(uint8_t *input, int32_t in_stride, + q2 = __lsx_vpackev_w(tmp3, tmp2); + q6 = __lsx_vpackod_w(tmp3, tmp2); + +- LSX_DUP2_ARG2(__lsx_vpackev_h, tmp5, tmp4, tmp7, tmp6, tmp2, tmp3); ++ DUP2_ARG2(__lsx_vpackev_h, tmp5, tmp4, tmp7, tmp6, tmp2, tmp3); + q1 = __lsx_vpackev_w(tmp3, tmp2); + q5 = __lsx_vpackod_w(tmp3, tmp2); + +@@ -2267,10 +2218,8 @@ static int32_t vp9_vt_lpf_t4_and_t8_8w(uint8_t *src, uint8_t *filter48, + __m128i zero = __lsx_vldi(0); + + /* load vector elements */ +- LSX_DUP4_ARG2(__lsx_vld, src, -64, src, -48, src, -32, +- src, -16, p3, p2, p1, p0); +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, +- q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vld, src, -64, src, -48, src, -32, src, -16, p3, p2, p1, p0); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, q0, q1, q2, q3); + + thresh = __lsx_vreplgr2vr_b(thresh_ptr); + b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); +@@ -2289,7 +2238,7 @@ static int32_t vp9_vt_lpf_t4_and_t8_8w(uint8_t *src, uint8_t *filter48, + + /* if flat is zero for all pixels, then no need to calculate other filter */ + if (__lsx_bz_v(flat)) { +- LSX_DUP2_ARG2(__lsx_vilvl_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); ++ DUP2_ARG2(__lsx_vilvl_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); + vec2 = __lsx_vilvl_h(vec1, vec0); + vec3 = __lsx_vilvh_h(vec1, vec0); + +@@ -2311,10 +2260,10 @@ static int32_t vp9_vt_lpf_t4_and_t8_8w(uint8_t *src, uint8_t *filter48, + __lsx_vstelm_w(vec3, src_org, 0, 3); + return 1; + } else { +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, +- p3_l, p2_l, p1_l, p0_l); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, +- q0_l, q1_l, q2_l, q3_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_l, p2_l, p1_l, p0_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_l, q1_l, q2_l, q3_l); + VP9_FILTER8(p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l, p2_filt8_l, + p1_filt8_l, p0_filt8_l, q0_filt8_l, q1_filt8_l, q2_filt8_l); + +@@ -2362,14 +2311,12 @@ static int32_t vp9_vt_lpf_t16_8w(uint8_t *dst, uint8_t *dst_org, + uint8_t *dst_tmp = dst - 128; + + /* load vector elements */ +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp, 16, dst_tmp, 32, +- dst_tmp, 48, p7, p6, p5, p4); +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, 64, dst_tmp, 80, dst_tmp, 96, +- dst_tmp, 112, p3, p2, p1, p0); +- LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst, 16, dst, 32, +- dst, 48, q0, q1, q2, q3); +- LSX_DUP4_ARG2(__lsx_vld, dst, 64, dst, 80, dst, 96, +- dst, 112, q4, q5, q6, q7); ++ DUP4_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp, 16, dst_tmp, 32, ++ dst_tmp, 48, p7, p6, p5, p4); ++ DUP4_ARG2(__lsx_vld, dst_tmp, 64, dst_tmp, 80, dst_tmp, 96, ++ dst_tmp, 112, p3, p2, p1, p0); ++ DUP4_ARG2(__lsx_vld, dst, 0, dst, 16, dst, 32, dst, 48, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vld, dst, 64, dst, 80, dst, 96, dst, 112, q4, q5, q6, q7); + + flat = __lsx_vld(filter48, 96); + +@@ -2380,11 +2327,11 @@ static int32_t vp9_vt_lpf_t16_8w(uint8_t *dst, uint8_t *dst_org, + if (__lsx_bz_v(flat2)) { + __m128i vec0, vec1, vec2, vec3, vec4; + +- LSX_DUP4_ARG2(__lsx_vld, filter48, 0, filter48, 16, filter48, 32, +- filter48, 48, p2, p1, p0, q0); +- LSX_DUP2_ARG2(__lsx_vld, filter48, 64, filter48, 80, q1, q2); ++ DUP4_ARG2(__lsx_vld, filter48, 0, filter48, 16, filter48, 32, ++ filter48, 48, p2, p1, p0, q0); ++ DUP2_ARG2(__lsx_vld, filter48, 64, filter48, 80, q1, q2); + +- LSX_DUP2_ARG2(__lsx_vilvl_b, p1, p2, q0, p0, vec0, vec1); ++ DUP2_ARG2(__lsx_vilvl_b, p1, p2, q0, p0, vec0, vec1); + vec3 = __lsx_vilvl_h(vec1, vec0); + vec4 = __lsx_vilvh_h(vec1, vec0); + vec2 = __lsx_vilvl_b(q2, q1); +@@ -2651,10 +2598,8 @@ static int32_t vp9_vt_lpf_t4_and_t8_16w(uint8_t *dst, uint8_t *filter48, + __m128i zero = __lsx_vldi(0); + + /* load vector elements */ +- LSX_DUP4_ARG2(__lsx_vld, dst, -64, dst, -48, dst, -32, +- dst, -16, p3, p2, p1, p0); +- LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst, 16, dst, 32, +- dst, 48, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vld, dst, -64, dst, -48, dst, -32, dst, -16, p3, p2, p1, p0); ++ DUP4_ARG2(__lsx_vld, dst, 0, dst, 16, dst, 32, dst, 48, q0, q1, q2, q3); + + thresh = __lsx_vreplgr2vr_b(thresh_ptr); + b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); +@@ -2671,10 +2616,10 @@ static int32_t vp9_vt_lpf_t4_and_t8_16w(uint8_t *dst, uint8_t *filter48, + + /* if flat is zero for all pixels, then no need to calculate other filter */ + if (__lsx_bz_v(flat)) { +- LSX_DUP2_ARG2(__lsx_vilvl_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); ++ DUP2_ARG2(__lsx_vilvl_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); + vec2 = __lsx_vilvl_h(vec1, vec0); + vec3 = __lsx_vilvh_h(vec1, vec0); +- LSX_DUP2_ARG2(__lsx_vilvh_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); ++ DUP2_ARG2(__lsx_vilvh_b, p0_out, p1_out, q1_out, q0_out, vec0, vec1); + vec4 = __lsx_vilvl_h(vec1, vec0); + vec5 = __lsx_vilvh_h(vec1, vec0); + +@@ -2701,26 +2646,26 @@ static int32_t vp9_vt_lpf_t4_and_t8_16w(uint8_t *dst, uint8_t *filter48, + + return 1; + } else { +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, +- p3_l, p2_l, p1_l, p0_l); +- LSX_DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, +- q0_l, q1_l, q2_l, q3_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_l, p2_l, p1_l, p0_l); ++ DUP4_ARG2(__lsx_vilvl_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_l, q1_l, q2_l, q3_l); + VP9_FILTER8(p3_l, p2_l, p1_l, p0_l, q0_l, q1_l, q2_l, q3_l, p2_filt8_l, + p1_filt8_l, p0_filt8_l, q0_filt8_l, q1_filt8_l, q2_filt8_l); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, p3, zero, p2, zero, p1, zero, p0, +- p3_h, p2_h, p1_h, p0_h); +- LSX_DUP4_ARG2(__lsx_vilvh_b, zero, q0, zero, q1, zero, q2, zero, q3, +- q0_h, q1_h, q2_h, q3_h); ++ DUP4_ARG2(__lsx_vilvh_b, zero, p3, zero, p2, zero, p1, zero, p0, ++ p3_h, p2_h, p1_h, p0_h); ++ DUP4_ARG2(__lsx_vilvh_b, zero, q0, zero, q1, zero, q2, zero, q3, ++ q0_h, q1_h, q2_h, q3_h); + VP9_FILTER8(p3_h, p2_h, p1_h, p0_h, q0_h, q1_h, q2_h, q3_h, p2_filt8_h, + p1_filt8_h, p0_filt8_h, q0_filt8_h, q1_filt8_h, q2_filt8_h); + + /* convert 16 bit output data into 8 bit */ +- LSX_DUP4_ARG2(__lsx_vpickev_b, p2_filt8_h, p2_filt8_l, p1_filt8_h, ++ DUP4_ARG2(__lsx_vpickev_b, p2_filt8_h, p2_filt8_l, p1_filt8_h, + p1_filt8_l, p0_filt8_h, p0_filt8_l, q0_filt8_h, + q0_filt8_l, p2_filt8_l, p1_filt8_l, p0_filt8_l, + q0_filt8_l); +- LSX_DUP2_ARG2(__lsx_vpickev_b, q1_filt8_h, q1_filt8_l, q2_filt8_h, +- q2_filt8_l, q1_filt8_l, q2_filt8_l); ++ DUP2_ARG2(__lsx_vpickev_b, q1_filt8_h, q1_filt8_l, q2_filt8_h, ++ q2_filt8_l, q1_filt8_l, q2_filt8_l); + + /* store pixel values */ + p2_out = __lsx_vbitsel_v(p2, p2_filt8_l, flat); +@@ -2763,14 +2708,12 @@ static int32_t vp9_vt_lpf_t16_16w(uint8_t *dst, uint8_t *dst_org, + + flat = __lsx_vld(filter48, 96); + +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp, 16, dst_tmp, 32, +- dst_tmp, 48, p7, p6, p5, p4); +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, 64, dst_tmp, 80, dst_tmp, 96, +- dst_tmp, 112, p3, p2, p1, p0); +- LSX_DUP4_ARG2(__lsx_vld, dst, 0, dst, 16, dst, 32, +- dst, 48, q0, q1, q2, q3); +- LSX_DUP4_ARG2(__lsx_vld, dst, 64, dst, 80, dst, 96, +- dst, 112, q4, q5, q6, q7); ++ DUP4_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp, 16, dst_tmp, 32, ++ dst_tmp, 48, p7, p6, p5, p4); ++ DUP4_ARG2(__lsx_vld, dst_tmp, 64, dst_tmp, 80, dst_tmp, 96, ++ dst_tmp, 112, p3, p2, p1, p0); ++ DUP4_ARG2(__lsx_vld, dst, 0, dst, 16, dst, 32, dst, 48, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vld, dst, 64, dst, 80, dst, 96, dst, 112, q4, q5, q6, q7); + + VP9_FLAT5(p7, p6, p5, p4, p0, q0, q4, q5, q6, q7, flat, flat2); + +@@ -2778,14 +2721,14 @@ static int32_t vp9_vt_lpf_t16_16w(uint8_t *dst, uint8_t *dst_org, + if (__lsx_bz_v(flat2)) { + __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; + +- LSX_DUP4_ARG2(__lsx_vld, filter48, 0, filter48, 16, filter48, 32, +- filter48, 48, p2, p1, p0, q0); +- LSX_DUP2_ARG2(__lsx_vld, filter48, 64, filter48, 80, q1, q2); ++ DUP4_ARG2(__lsx_vld, filter48, 0, filter48, 16, filter48, 32, ++ filter48, 48, p2, p1, p0, q0); ++ DUP2_ARG2(__lsx_vld, filter48, 64, filter48, 80, q1, q2); + +- LSX_DUP2_ARG2(__lsx_vilvl_b, p1, p2, q0, p0, vec0, vec1); ++ DUP2_ARG2(__lsx_vilvl_b, p1, p2, q0, p0, vec0, vec1); + vec3 = __lsx_vilvl_h(vec1, vec0); + vec4 = __lsx_vilvh_h(vec1, vec0); +- LSX_DUP2_ARG2(__lsx_vilvh_b, p1, p2, q0, p0, vec0, vec1); ++ DUP2_ARG2(__lsx_vilvh_b, p1, p2, q0, p0, vec0, vec1); + vec6 = __lsx_vilvl_h(vec1, vec0); + vec7 = __lsx_vilvh_h(vec1, vec0); + vec2 = __lsx_vilvl_b(q2, q1); +diff --git a/libavcodec/loongarch/vp9_mc_lsx.c b/libavcodec/loongarch/vp9_mc_lsx.c +index 02ee916447..9d91675781 100644 +--- a/libavcodec/loongarch/vp9_mc_lsx.c ++++ b/libavcodec/loongarch/vp9_mc_lsx.c +@@ -20,7 +20,7 @@ + */ + + #include "libavcodec/vp9dsp.h" +-#include "libavutil/loongarch/generic_macros_lsx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + #include "vp9dsp_loongarch.h" + + static const uint8_t mc_filt_mask_arr[16 * 3] = { +@@ -33,57 +33,56 @@ static const uint8_t mc_filt_mask_arr[16 * 3] = { + }; + + +-#define HORIZ_8TAP_4WID_4VECS_FILT(_src0, _src1, _src2, _src3, \ +- _mask0, _mask1, _mask2, _mask3, \ +- _filter0, _filter1, _filter2, _filter3, \ +- _out0, _out1) \ +-{ \ +- __m128i _tmp0, _tmp1, _tmp2, _tmp3, _tmp4, _tmp5, _tmp6, _tmp7; \ +- __m128i _reg0, _reg1, _reg2, _reg3; \ +- \ +- LSX_DUP2_ARG3(__lsx_vshuf_b, _src1, _src0, _mask0, \ +- _src3, _src2, _mask0, _tmp0, _tmp1); \ +- LSX_DUP2_ARG2(__lsx_dp2_h_b, _tmp0, _filter0, _tmp1, _filter0, _reg0, _reg1); \ +- LSX_DUP2_ARG3(__lsx_vshuf_b, _src1, _src0, _mask1, \ +- _src3, _src2, _mask1, _tmp2, _tmp3); \ +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, _reg0, _tmp2, _filter1, \ +- _reg1, _tmp3, _filter1, _reg0, _reg1); \ +- LSX_DUP2_ARG3(__lsx_vshuf_b, _src1, _src0, _mask2, \ +- _src3, _src2, _mask2, _tmp4, _tmp5); \ +- LSX_DUP2_ARG2(__lsx_dp2_h_b, _tmp4, _filter2, _tmp5, _filter2, _reg2, _reg3); \ +- LSX_DUP2_ARG3(__lsx_vshuf_b, _src1, _src0, _mask3, \ +- _src3, _src2, _mask3, _tmp6, _tmp7); \ +- LSX_DUP2_ARG3(__lsx_dp2add_h_b, _reg2, _tmp6, _filter3, \ +- _reg3, _tmp7, _filter3, _reg2, _reg3); \ +- LSX_DUP2_ARG2(__lsx_vsadd_h, _reg0, _reg2, _reg1, _reg3, _out0, _out1); \ ++#define HORIZ_8TAP_4WID_4VECS_FILT(_src0, _src1, _src2, _src3, \ ++ _mask0, _mask1, _mask2, _mask3, \ ++ _filter0, _filter1, _filter2, _filter3, \ ++ _out0, _out1) \ ++{ \ ++ __m128i _tmp0, _tmp1, _tmp2, _tmp3, _tmp4, _tmp5, _tmp6, _tmp7; \ ++ __m128i _reg0, _reg1, _reg2, _reg3; \ ++ \ ++ DUP2_ARG3(__lsx_vshuf_b, _src1, _src0, _mask0, _src3, _src2, _mask0, \ ++ _tmp0, _tmp1); \ ++ DUP2_ARG2(__lsx_vdp2_h_b, _tmp0, _filter0, _tmp1, _filter0, _reg0, _reg1); \ ++ DUP2_ARG3(__lsx_vshuf_b, _src1, _src0, _mask1, _src3, _src2, _mask1, _tmp2, _tmp3);\ ++ DUP2_ARG3(__lsx_vdp2add_h_b, _reg0, _tmp2, _filter1, _reg1, _tmp3, _filter1, \ ++ _reg0, _reg1); \ ++ DUP2_ARG3(__lsx_vshuf_b, _src1, _src0, _mask2, _src3, _src2, _mask2, _tmp4, _tmp5);\ ++ DUP2_ARG2(__lsx_vdp2_h_b, _tmp4, _filter2, _tmp5, _filter2, _reg2, _reg3); \ ++ DUP2_ARG3(__lsx_vshuf_b, _src1, _src0, _mask3, _src3, _src2, _mask3, _tmp6, _tmp7);\ ++ DUP2_ARG3(__lsx_vdp2add_h_b, _reg2, _tmp6, _filter3, _reg3, _tmp7, _filter3, \ ++ _reg2, _reg3); \ ++ DUP2_ARG2(__lsx_vsadd_h, _reg0, _reg2, _reg1, _reg3, _out0, _out1); \ + } + +-#define HORIZ_8TAP_8WID_4VECS_FILT(_src0, _src1, _src2, _src3, \ +- _mask0, _mask1, _mask2, _mask3, \ +- _filter0, _filter1, _filter2, _filter3, \ +- _out0, _out1, _out2, _out3) \ +-{ \ +- __m128i _tmp0, _tmp1, _tmp2, _tmp3, _tmp4, _tmp5, _tmp6, _tmp7; \ +- __m128i _reg0, _reg1, _reg2, _reg3, _reg4, _reg5, _reg6, _reg7; \ +- \ +- LSX_DUP4_ARG3(__lsx_vshuf_b, _src0, _src0, _mask0, _src1, _src1, _mask0, _src2, \ +- _src2, _mask0, _src3, _src3, _mask0, _tmp0, _tmp1, _tmp2, _tmp3); \ +- LSX_DUP4_ARG2(__lsx_dp2_h_b, _tmp0, _filter0, _tmp1, _filter0, _tmp2, _filter0, \ +- _tmp3, _filter0, _reg0, _reg1, _reg2, _reg3); \ +- LSX_DUP4_ARG3(__lsx_vshuf_b, _src0, _src0, _mask2, _src1, _src1, _mask2, _src2, \ +- _src2, _mask2, _src3, _src3, _mask2, _tmp0, _tmp1, _tmp2, _tmp3); \ +- LSX_DUP4_ARG2(__lsx_dp2_h_b, _tmp0, _filter2, _tmp1, _filter2, _tmp2, _filter2, \ +- _tmp3, _filter2, _reg4, _reg5, _reg6, _reg7); \ +- LSX_DUP4_ARG3(__lsx_vshuf_b, _src0, _src0, _mask1, _src1, _src1, _mask1, _src2, \ +- _src2, _mask1, _src3, _src3, _mask1, _tmp4, _tmp5, _tmp6, _tmp7); \ +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, _reg0, _tmp4, _filter1, _reg1, _tmp5, _filter1, \ +- _reg2, _tmp6, _filter1, _reg3, _tmp7, _filter1, _reg0, _reg1, _reg2, _reg3);\ +- LSX_DUP4_ARG3(__lsx_vshuf_b, _src0, _src0, _mask3, _src1, _src1, _mask3, _src2, \ +- _src2, _mask3, _src3, _src3, _mask3, _tmp4, _tmp5, _tmp6, _tmp7); \ +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, _reg4, _tmp4, _filter3, _reg5, _tmp5, _filter3, \ +- _reg6, _tmp6, _filter3, _reg7, _tmp7, _filter3, _reg4, _reg5, _reg6, _reg7);\ +- LSX_DUP4_ARG2(__lsx_vsadd_h, _reg0, _reg4, _reg1, _reg5, _reg2, _reg6, _reg3, _reg7, \ +- _out0, _out1, _out2, _out3); \ ++#define HORIZ_8TAP_8WID_4VECS_FILT(_src0, _src1, _src2, _src3, \ ++ _mask0, _mask1, _mask2, _mask3, \ ++ _filter0, _filter1, _filter2, _filter3, \ ++ _out0, _out1, _out2, _out3) \ ++{ \ ++ __m128i _tmp0, _tmp1, _tmp2, _tmp3, _tmp4, _tmp5, _tmp6, _tmp7; \ ++ __m128i _reg0, _reg1, _reg2, _reg3, _reg4, _reg5, _reg6, _reg7; \ ++ \ ++ DUP4_ARG3(__lsx_vshuf_b, _src0, _src0, _mask0, _src1, _src1, _mask0, _src2, \ ++ _src2, _mask0, _src3, _src3, _mask0, _tmp0, _tmp1, _tmp2, _tmp3); \ ++ DUP4_ARG2(__lsx_vdp2_h_b, _tmp0, _filter0, _tmp1, _filter0, _tmp2, _filter0, \ ++ _tmp3, _filter0, _reg0, _reg1, _reg2, _reg3); \ ++ DUP4_ARG3(__lsx_vshuf_b, _src0, _src0, _mask2, _src1, _src1, _mask2, _src2, \ ++ _src2, _mask2, _src3, _src3, _mask2, _tmp0, _tmp1, _tmp2, _tmp3); \ ++ DUP4_ARG2(__lsx_vdp2_h_b, _tmp0, _filter2, _tmp1, _filter2, _tmp2, _filter2, \ ++ _tmp3, _filter2, _reg4, _reg5, _reg6, _reg7); \ ++ DUP4_ARG3(__lsx_vshuf_b, _src0, _src0, _mask1, _src1, _src1, _mask1, _src2, \ ++ _src2, _mask1, _src3, _src3, _mask1, _tmp4, _tmp5, _tmp6, _tmp7); \ ++ DUP4_ARG3(__lsx_vdp2add_h_b, _reg0, _tmp4, _filter1, _reg1, _tmp5, _filter1, \ ++ _reg2, _tmp6, _filter1, _reg3, _tmp7, _filter1, _reg0, _reg1, _reg2, \ ++ _reg3); \ ++ DUP4_ARG3(__lsx_vshuf_b, _src0, _src0, _mask3, _src1, _src1, _mask3, _src2, \ ++ _src2, _mask3, _src3, _src3, _mask3, _tmp4, _tmp5, _tmp6, _tmp7); \ ++ DUP4_ARG3(__lsx_vdp2add_h_b, _reg4, _tmp4, _filter3, _reg5, _tmp5, _filter3, \ ++ _reg6, _tmp6, _filter3, _reg7, _tmp7, _filter3, _reg4, _reg5, _reg6, \ ++ _reg7); \ ++ DUP4_ARG2(__lsx_vsadd_h, _reg0, _reg4, _reg1, _reg5, _reg2, _reg6, _reg3, _reg7, \ ++ _out0, _out1, _out2, _out3); \ + } + + #define FILT_8TAP_DPADD_S_H(_reg0, _reg1, _reg2, _reg3, \ +@@ -91,10 +90,10 @@ static const uint8_t mc_filt_mask_arr[16 * 3] = { + ( { \ + __m128i _vec0, _vec1; \ + \ +- _vec0 = __lsx_dp2_h_b(_reg0, _filter0); \ +- _vec0 = __lsx_dp2add_h_b(_vec0, _reg1, _filter1); \ +- _vec1 = __lsx_dp2_h_b(_reg2, _filter2); \ +- _vec1 = __lsx_dp2add_h_b(_vec1, _reg3, _filter3); \ ++ _vec0 = __lsx_vdp2_h_b(_reg0, _filter0); \ ++ _vec0 = __lsx_vdp2add_h_b(_vec0, _reg1, _filter1); \ ++ _vec1 = __lsx_vdp2_h_b(_reg2, _filter2); \ ++ _vec1 = __lsx_vdp2add_h_b(_vec1, _reg3, _filter3); \ + _vec0 = __lsx_vsadd_h(_vec0, _vec1); \ + \ + _vec0; \ +@@ -106,8 +105,8 @@ static const uint8_t mc_filt_mask_arr[16 * 3] = { + __m128i _tmp0, _tmp1, _tmp2, _tmp3; \ + __m128i _out; \ + \ +- LSX_DUP4_ARG3(__lsx_vshuf_b, _src1, _src0, _mask0, _src1, _src0, _mask1, _src1,\ +- _src0, _mask2, _src1, _src0, _mask3, _tmp0, _tmp1, _tmp2, _tmp3);\ ++ DUP4_ARG3(__lsx_vshuf_b, _src1, _src0, _mask0, _src1, _src0, _mask1, _src1, \ ++ _src0, _mask2, _src1, _src0, _mask3, _tmp0, _tmp1, _tmp2, _tmp3); \ + _out = FILT_8TAP_DPADD_S_H(_tmp0, _tmp1, _tmp2, _tmp3, _filt_h0, _filt_h1, \ + _filt_h2, _filt_h3); \ + _out = __lsx_vsrari_h(_out, 7); \ +@@ -171,14 +170,14 @@ static void common_hz_8t_4x4_lsx(const uint8_t *src, int32_t src_stride, + + mask0 = __lsx_vld(mc_filt_mask_arr, 16); + src -= 3; +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, +- filter0, filter1, filter2, filter3); +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + + LSX_LD_4(src, src_stride, src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + HORIZ_8TAP_4WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, + filter0, filter1, filter2, filter3, out0, out1); + out = __lsx_vssrarni_b_h(out1, out0, 7); +@@ -204,28 +203,28 @@ static void common_hz_8t_4x8_lsx(const uint8_t *src, int32_t src_stride, + + mask0 = __lsx_vld(mc_filt_mask_arr, 16); + src -= 3; +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, +- filter0, filter1, filter2, filter3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); + +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); + src += stride; +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src2, src3); +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + HORIZ_8TAP_4WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, + filter0, filter1, filter2, filter3, out0, out1); + src += stride; +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); + src += stride; +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src2, src3); +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + HORIZ_8TAP_4WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, + filter0, filter1, filter2, filter3, out2, out3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); +- LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + __lsx_vstelm_w(out0, dst, 0, 0); + dst += dst_stride; + __lsx_vstelm_w(out0, dst, 0, 1); +@@ -265,18 +264,18 @@ static void common_hz_8t_8x4_lsx(const uint8_t *src, int32_t src_stride, + + mask0 = __lsx_vld(mc_filt_mask_arr, 0); + src -= 3; +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, +- filter0, filter1, filter2, filter3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); + + LSX_LD_4(src, src_stride, src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, + filter0, filter1, filter2, filter3, out0, out1, out2, out3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); +- LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + __lsx_vstelm_d(out0, dst, 0, 0); + dst += dst_stride; + __lsx_vstelm_d(out0, dst, 0, 1); +@@ -299,21 +298,21 @@ static void common_hz_8t_8x8mult_lsx(const uint8_t *src, int32_t src_stride, + + mask0 = __lsx_vld(mc_filt_mask_arr, 0); + src -= 3; +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, +- filter0, filter1, filter2, filter3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); + + for (; loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); + src += stride; +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src2, src3); +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, + filter0, filter1, filter2, filter3, out0, out1, out2, out3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); +- LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + __lsx_vstelm_d(out0, dst, 0, 0); + dst += dst_stride; + __lsx_vstelm_d(out0, dst, 0, 1); +@@ -350,20 +349,20 @@ static void common_hz_8t_16w_lsx(const uint8_t *src, int32_t src_stride, + + mask0 = __lsx_vld(mc_filt_mask_arr, 0); + src -= 3; +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, +- filter0, filter1, filter2, filter3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); + + for (; loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src2); +- LSX_DUP2_ARG2(__lsx_vld, src, 8, src + src_stride, 8, src1, src3); +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src2); ++ DUP2_ARG2(__lsx_vld, src, 8, src + src_stride, 8, src1, src3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, + filter0, filter1, filter2, filter3, out0, out1, out2, out3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); +- LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + __lsx_vst(out0, dst, 0); + dst += dst_stride; + __lsx_vst(out1, dst, 0); +@@ -385,37 +384,37 @@ static void common_hz_8t_32w_lsx(const uint8_t *src, int32_t src_stride, + + mask0 = __lsx_vld(mc_filt_mask_arr, 0); + src -= 3; +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, +- filter0, filter1, filter2, filter3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); + + for (; loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src2); ++ DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src2); + src3 = __lsx_vld(src, 24); + src1 = __lsx_vshuf_b(src2, src0, shuff); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, + filter0, filter1, filter2, filter3, out0, out1, out2, out3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); +- LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + __lsx_vst(out0, dst, 0); + __lsx_vst(out1, dst, 16); + +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src2); ++ DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src2); + src3 = __lsx_vld(src, 24); + src1 = __lsx_vshuf_b(src2, src0, shuff); + src += src_stride; + + dst += dst_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, + filter0, filter1, filter2, filter3, out0, out1, out2, out3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); +- LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + __lsx_vst(out0, dst, 0); + __lsx_vst(out1, dst, 16); + dst += dst_stride; +@@ -435,33 +434,33 @@ static void common_hz_8t_64w_lsx(const uint8_t *src, int32_t src_stride, + + mask0 = __lsx_vld(mc_filt_mask_arr, 0); + src -= 3; +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, +- filter0, filter1, filter2, filter3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); + + for (; loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src2); ++ DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src2); + src3 = __lsx_vld(src, 24); + src1 = __lsx_vshuf_b(src2, src0, shuff); +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, + filter0, filter1, filter2, filter3, out0, out1, out2, out3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); +- LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + __lsx_vst(out0, dst, 0); + __lsx_vst(out1, dst, 16); + +- LSX_DUP2_ARG2(__lsx_vld, src, 32, src, 48, src0, src2); ++ DUP2_ARG2(__lsx_vld, src, 32, src, 48, src0, src2); + src3 = __lsx_vld(src, 56); + src1 = __lsx_vshuf_b(src2, src0, shuff); +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, + filter0, filter1, filter2, filter3, out0, out1, out2, out3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); +- LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + __lsx_vst(out0, dst, 32); + __lsx_vst(out1, dst, 48); + src += src_stride; +@@ -481,8 +480,8 @@ static void common_vt_8t_4w_lsx(const uint8_t *src, int32_t src_stride, + __m128i out0, out1; + + src -= (3 * src_stride); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, +- filter0, filter1, filter2, filter3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); + LSX_LD_4(src, src_stride, src0, src1, src2, src3); + src += src_stride; + src4 = __lsx_vld(src, 0); +@@ -491,19 +490,21 @@ static void common_vt_8t_4w_lsx(const uint8_t *src, int32_t src_stride, + src += src_stride; + src6 = __lsx_vld(src, 0); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, tmp0, tmp1, tmp2, tmp3); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, tmp4, tmp5); +- LSX_DUP2_ARG2(__lsx_vilvl_d, tmp3, tmp0, tmp4, tmp1, reg0, reg1); ++ DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, tmp0, ++ tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, tmp4, tmp5); ++ DUP2_ARG2(__lsx_vilvl_d, tmp3, tmp0, tmp4, tmp1, reg0, reg1); + reg2 = __lsx_vilvl_d(tmp5, tmp2); +- LSX_DUP2_ARG2(__lsx_vxori_b, reg0, 128, reg1, 128, reg0, reg1); ++ DUP2_ARG2(__lsx_vxori_b, reg0, 128, reg1, 128, reg0, reg1); + reg2 = __lsx_vxori_b(reg2, 128); + + for (;loop_cnt--;) { + LSX_LD_4(src, src_stride, src7, src8, src9, src10); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, tmp0, tmp1, tmp2, tmp3); +- LSX_DUP2_ARG2(__lsx_vilvl_d, tmp1, tmp0, tmp3, tmp2, reg3, reg4); +- LSX_DUP2_ARG2(__lsx_vxori_b, reg3, 128, reg4, 128, reg3, reg4); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, tmp0, ++ tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lsx_vilvl_d, tmp1, tmp0, tmp3, tmp2, reg3, reg4); ++ DUP2_ARG2(__lsx_vxori_b, reg3, 128, reg4, 128, reg3, reg4); + out0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, reg3, filter0, filter1, filter2, filter3); + out1 = FILT_8TAP_DPADD_S_H(reg1, reg2, reg3, reg4, filter0, filter1, filter2, filter3); + out0 = __lsx_vssrarni_b_h(out1, out0, 7); +@@ -536,8 +537,8 @@ static void common_vt_8t_8w_lsx(const uint8_t *src, int32_t src_stride, + __m128i out0, out1, out2, out3; + + src -= (3 * src_stride); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, +- filter0, filter1, filter2, filter3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); + + LSX_LD_4(src, src_stride, src0, src1, src2, src3); + src += src_stride; +@@ -547,25 +548,25 @@ static void common_vt_8t_8w_lsx(const uint8_t *src, int32_t src_stride, + src += src_stride; + src6 = __lsx_vld(src, 0); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); +- LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, reg0, reg1, reg2, reg3); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, reg4, reg5); ++ DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, reg0, reg1, reg2, reg3); ++ DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, reg4, reg5); + + for (;loop_cnt--;) { + LSX_LD_4(src, src_stride, src7, src8, src9, src10); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, +- src7, src8, src9, src10); +- LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, +- tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ tmp0, tmp1, tmp2, tmp3); + out0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, tmp0, filter0, filter1, filter2, filter3); + out1 = FILT_8TAP_DPADD_S_H(reg3, reg4, reg5, tmp1, filter0, filter1, filter2, filter3); + out2 = FILT_8TAP_DPADD_S_H(reg1, reg2, tmp0, tmp2, filter0, filter1, filter2, filter3); + out3 = FILT_8TAP_DPADD_S_H(reg4, reg5, tmp1, tmp3, filter0, filter1, filter2, filter3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); +- LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + __lsx_vstelm_d(out0, dst, 0, 0); + dst += dst_stride; + __lsx_vstelm_d(out0, dst, 0, 1); +@@ -597,8 +598,8 @@ static void common_vt_8t_16w_lsx(const uint8_t *src, int32_t src_stride, + __m128i tmp0, tmp1, tmp2, tmp3; + + src -= (3 * src_stride); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, +- filter0, filter1, filter2, filter3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); + LSX_LD_4(src, src_stride, src0, src1, src2, src3); + src += src_stride; + src4 = __lsx_vld(src, 0); +@@ -607,29 +608,32 @@ static void common_vt_8t_16w_lsx(const uint8_t *src, int32_t src_stride, + src += src_stride; + src6 = __lsx_vld(src, 0); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, ++ src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); +- LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, reg0, reg1, reg2, reg3); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, reg4, reg5); +- LSX_DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, reg6, reg7, reg8, reg9); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, reg10, reg11); ++ DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, reg0, reg1, ++ reg2, reg3); ++ DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, reg4, reg5); ++ DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, reg6, reg7, ++ reg8, reg9); ++ DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, reg10, reg11); + + for (;loop_cnt--;) { + LSX_LD_4(src, src_stride, src7, src8, src9, src10); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, +- src7, src8, src9, src10); +- LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src4, src5, src7, src8); ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src4, src5, src7, src8); + tmp0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, src0, filter0, filter1, filter2, filter3); + tmp1 = FILT_8TAP_DPADD_S_H(reg3, reg4, reg5, src1, filter0, filter1, filter2, filter3); + tmp2 = FILT_8TAP_DPADD_S_H(reg6, reg7, reg8, src4, filter0, filter1, filter2, filter3); + tmp3 = FILT_8TAP_DPADD_S_H(reg9, reg10, reg11, src5, filter0, filter1, filter2, filter3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); +- LSX_DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); + __lsx_vst(tmp0, dst, 0); + dst += dst_stride; + __lsx_vst(tmp1, dst, 0); +@@ -638,8 +642,8 @@ static void common_vt_8t_16w_lsx(const uint8_t *src, int32_t src_stride, + tmp1 = FILT_8TAP_DPADD_S_H(reg4, reg5, src1, src3, filter0, filter1, filter2, filter3); + tmp2 = FILT_8TAP_DPADD_S_H(reg7, reg8, src4, src7, filter0, filter1, filter2, filter3); + tmp3 = FILT_8TAP_DPADD_S_H(reg10, reg11, src5, src8, filter0, filter1, filter2, filter3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); +- LSX_DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); + __lsx_vst(tmp0, dst, 0); + dst += dst_stride; + __lsx_vst(tmp1, dst, 0); +@@ -676,8 +680,8 @@ static void common_vt_8t_16w_mult_lsx(const uint8_t *src, int32_t src_stride, + __m128i tmp0, tmp1, tmp2, tmp3; + + src -= (3 * src_stride); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, +- filter0, filter1, filter2, filter3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); + for (;cnt--;) { + uint32_t loop_cnt = height >> 2; + +@@ -692,31 +696,32 @@ static void common_vt_8t_16w_mult_lsx(const uint8_t *src, int32_t src_stride, + src_tmp += src_stride; + src6 = __lsx_vld(src_tmp, 0); + src_tmp += src_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, ++ src1, src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); +- LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, +- reg0, reg1, reg2, reg3); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, reg4, reg5); +- LSX_DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, +- reg6, reg7, reg8, reg9); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, reg10, reg11); ++ DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ reg0, reg1, reg2, reg3); ++ DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, reg4, reg5); ++ DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ reg6, reg7, reg8, reg9); ++ DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, reg10, reg11); + + for (;loop_cnt--;) { + LSX_LD_4(src_tmp, src_stride, src7, src8, src9, src10); + src_tmp += src_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, +- src7, src8, src9, src10); +- LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src4, src5, src7, src8); ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src4, src5, src7, src8); + tmp0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, src0, filter0, filter1, filter2, filter3); + tmp1 = FILT_8TAP_DPADD_S_H(reg3, reg4, reg5, src1, filter0, filter1, filter2, filter3); + tmp2 = FILT_8TAP_DPADD_S_H(reg6, reg7, reg8, src4, filter0, filter1, filter2, filter3); + tmp3 = FILT_8TAP_DPADD_S_H(reg9, reg10, reg11, src5, filter0, filter1, filter2, filter3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); +- LSX_DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); + __lsx_vst(tmp0, dst_tmp, 0); + dst_tmp += dst_stride; + __lsx_vst(tmp1, dst_tmp, 0); +@@ -725,8 +730,8 @@ static void common_vt_8t_16w_mult_lsx(const uint8_t *src, int32_t src_stride, + tmp1 = FILT_8TAP_DPADD_S_H(reg4, reg5, src1, src3, filter0, filter1, filter2, filter3); + tmp2 = FILT_8TAP_DPADD_S_H(reg7, reg8, src4, src7, filter0, filter1, filter2, filter3); + tmp3 = FILT_8TAP_DPADD_S_H(reg10, reg11, src5, src8, filter0, filter1, filter2, filter3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); +- LSX_DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); + __lsx_vst(tmp0, dst_tmp, 0); + dst_tmp += dst_stride; + __lsx_vst(tmp1, dst_tmp, 0); +@@ -782,9 +787,9 @@ static void common_hv_8ht_8vt_4w_lsx(const uint8_t *src, int32_t src_stride, + + mask0 = __lsx_vld(mc_filt_mask_arr, 16); + src -= (3 + 3 * src_stride); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_horiz, 0, filter_horiz, 2, filter_horiz, 4, +- filter_horiz, 6, filt_hz0, filt_hz1, filt_hz2, filt_hz3); +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP4_ARG2(__lsx_vldrepl_h, filter_horiz, 0, filter_horiz, 2, filter_horiz, 4, ++ filter_horiz, 6, filt_hz0, filt_hz1, filt_hz2, filt_hz3); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + + LSX_LD_4(src, src_stride, src0, src1, src2, src3); +@@ -795,8 +800,8 @@ static void common_hv_8ht_8vt_4w_lsx(const uint8_t *src, int32_t src_stride, + src += src_stride; + src6 = __lsx_vld(src, 0); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); + + tmp0 = HORIZ_8TAP_FILT(src0, src1, mask0, mask1, mask2, mask3, filt_hz0, +@@ -807,17 +812,17 @@ static void common_hv_8ht_8vt_4w_lsx(const uint8_t *src, int32_t src_stride, + filt_hz1, filt_hz2, filt_hz3); + tmp5 = HORIZ_8TAP_FILT(src5, src6, mask0, mask1, mask2, mask3, filt_hz0, + filt_hz1, filt_hz2, filt_hz3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, tmp2, tmp0, shuff, tmp4, tmp2, shuff, tmp1, tmp3); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_vert, 0, filter_vert, 2, filter_vert, 4, +- filter_vert, 6, filt_vt0, filt_vt1, filt_vt2, filt_vt3); +- LSX_DUP2_ARG2(__lsx_vpackev_b, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ DUP2_ARG3(__lsx_vshuf_b, tmp2, tmp0, shuff, tmp4, tmp2, shuff, tmp1, tmp3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter_vert, 0, filter_vert, 2, filter_vert, 4, ++ filter_vert, 6, filt_vt0, filt_vt1, filt_vt2, filt_vt3); ++ DUP2_ARG2(__lsx_vpackev_b, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); + tmp2 = __lsx_vpackev_b(tmp5, tmp4); + + for (;loop_cnt--;) { + LSX_LD_4(src, src_stride, src7, src8, src9, src10); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, +- src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); + tmp3 = HORIZ_8TAP_FILT(src7, src8, mask0, mask1, mask2, mask3, filt_hz0, + filt_hz1, filt_hz2, filt_hz3); + tmp4 = __lsx_vshuf_b(tmp3, tmp5, shuff); +@@ -864,9 +869,9 @@ static void common_hv_8ht_8vt_8w_lsx(const uint8_t *src, int32_t src_stride, + + mask0 = __lsx_vld(mc_filt_mask_arr, 0); + src -= (3 + 3 * src_stride); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_horiz, 0, filter_horiz, 2, filter_horiz, 4, +- filter_horiz, 6, filt_hz0, filt_hz1, filt_hz2, filt_hz3); +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP4_ARG2(__lsx_vldrepl_h, filter_horiz, 0, filter_horiz, 2, filter_horiz, 4, ++ filter_horiz, 6, filt_hz0, filt_hz1, filt_hz2, filt_hz3); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + + LSX_LD_4(src, src_stride, src0, src1, src2, src3); +@@ -877,8 +882,9 @@ static void common_hv_8ht_8vt_8w_lsx(const uint8_t *src, int32_t src_stride, + src += src_stride; + src6 = __lsx_vld(src, 0); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, ++ src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); + + src0 = HORIZ_8TAP_FILT(src0, src0, mask0, mask1, mask2, mask3, filt_hz0, +@@ -896,17 +902,17 @@ static void common_hv_8ht_8vt_8w_lsx(const uint8_t *src, int32_t src_stride, + src6 = HORIZ_8TAP_FILT(src6, src6, mask0, mask1, mask2, mask3, filt_hz0, + filt_hz1, filt_hz2, filt_hz3); + +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_vert, 0, filter_vert, 2, filter_vert, 4, +- filter_vert, 6, filt_vt0, filt_vt1, filt_vt2, filt_vt3); +- LSX_DUP4_ARG2(__lsx_vpackev_b, src1, src0, src3, src2, src5, src4, +- src2, src1, tmp0, tmp1, tmp2, tmp4); +- LSX_DUP2_ARG2(__lsx_vpackev_b, src4, src3, src6, src5, tmp5, tmp6); ++ DUP4_ARG2(__lsx_vldrepl_h, filter_vert, 0, filter_vert, 2, filter_vert, 4, ++ filter_vert, 6, filt_vt0, filt_vt1, filt_vt2, filt_vt3); ++ DUP4_ARG2(__lsx_vpackev_b, src1, src0, src3, src2, src5, src4, ++ src2, src1, tmp0, tmp1, tmp2, tmp4); ++ DUP2_ARG2(__lsx_vpackev_b, src4, src3, src6, src5, tmp5, tmp6); + + for (;loop_cnt--;) { + LSX_LD_4(src, src_stride, src7, src8, src9, src10); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, +- src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); + src7 = HORIZ_8TAP_FILT(src7, src7, mask0, mask1, mask2, mask3, filt_hz0, + filt_hz1, filt_hz2, filt_hz3); + tmp3 = __lsx_vpackev_b(src7, src6); +@@ -927,8 +933,8 @@ static void common_hv_8ht_8vt_8w_lsx(const uint8_t *src, int32_t src_stride, + src2 = __lsx_vpackev_b(src10, src9); + src4 = FILT_8TAP_DPADD_S_H(tmp5, tmp6, src0, src2, filt_vt0, filt_vt1, + filt_vt2, filt_vt3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, src4, src3, 7, out0, out1); +- LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, src4, src3, 7, out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + __lsx_vstelm_d(out0, dst, 0, 0); + dst += dst_stride; + __lsx_vstelm_d(out0, dst, 0, 1); +@@ -1069,13 +1075,13 @@ static void copy_width64_lsx(const uint8_t *src, int32_t src_stride, + __m128i src8, src9, src10, src11, src12, src13, src14, src15; + + for (;cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src0, src1, src2, src3); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src4, src5, src6, src7); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src8, src9, src10, src11); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src8, src9, src10, src11); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src12, src13, src14, src15); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src12, src13, src14, src15); + src += src_stride; + __lsx_vst(src0, dst, 0); + __lsx_vst(src1, dst, 16); +@@ -1114,13 +1120,13 @@ static void common_hz_8t_and_aver_dst_4x4_lsx(const uint8_t *src, + + mask0 = __lsx_vld(mc_filt_mask_arr, 16); + src -= 3; +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, +- filter0, filter1, filter2, filter3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); + LSX_LD_4(src, src_stride, src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + HORIZ_8TAP_4WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, + filter0, filter1, filter2, filter3, tmp0, tmp1); + dst0 = __lsx_vldrepl_w(dst_tmp, 0); +@@ -1157,15 +1163,15 @@ static void common_hz_8t_and_aver_dst_4x8_lsx(const uint8_t *src, + + mask0 = __lsx_vld(mc_filt_mask_arr, 16); + src -= 3; +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, +- filter0, filter1, filter2, filter3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); + + LSX_LD_4(src, src_stride, src0, src1, src2, src3); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + tmp0 = __lsx_vldrepl_w(dst_tmp, 0); + dst_tmp += dst_stride; + tmp1 = __lsx_vldrepl_w(dst_tmp, 0); +@@ -1191,15 +1197,15 @@ static void common_hz_8t_and_aver_dst_4x8_lsx(const uint8_t *src, + HORIZ_8TAP_4WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, + filter0, filter1, filter2, filter3, tmp0, tmp1); + LSX_LD_4(src, src_stride, src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + HORIZ_8TAP_4WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, + filter0, filter1, filter2, filter3, tmp2, tmp3); +- LSX_DUP4_ARG3(__lsx_vssrarni_b_h, tmp0, tmp0, 7, tmp1, tmp1, 7, tmp2, tmp2, 7, +- tmp3, tmp3, 7, tmp0, tmp1, tmp2, tmp3); +- LSX_DUP2_ARG2(__lsx_vilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- LSX_DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); +- LSX_DUP2_ARG2(__lsx_vavgr_bu, tmp0, dst0, tmp1, dst1, dst0, dst1); ++ DUP4_ARG3(__lsx_vssrarni_b_h, tmp0, tmp0, 7, tmp1, tmp1, 7, tmp2, tmp2, 7, ++ tmp3, tmp3, 7, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lsx_vilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vavgr_bu, tmp0, dst0, tmp1, dst1, dst0, dst1); + __lsx_vstelm_w(dst0, dst, 0, 0); + dst += dst_stride; + __lsx_vstelm_w(dst0, dst, 0, 1); +@@ -1245,16 +1251,16 @@ static void common_hz_8t_and_aver_dst_8w_lsx(const uint8_t *src, + + mask0 = __lsx_vld(mc_filt_mask_arr, 0); + src -= 3; +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, +- filter0, filter1, filter2, filter3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); + + for (;loop_cnt--;) { + LSX_LD_4(src, src_stride, src0, src1, src2, src3); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, + filter0, filter1, filter2, filter3, tmp0, tmp1, tmp2, tmp3); + dst0 = __lsx_vldrepl_d(dst_tmp, 0); +@@ -1265,10 +1271,10 @@ static void common_hz_8t_and_aver_dst_8w_lsx(const uint8_t *src, + dst_tmp += dst_stride; + dst3 = __lsx_vldrepl_d(dst_tmp, 0); + dst_tmp += dst_stride; +- LSX_DUP2_ARG2(__lsx_vilvl_d, dst1, dst0, dst3, dst2, dst0, dst1); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 7, tmp3, tmp2, 7, tmp0, tmp1); +- LSX_DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); +- LSX_DUP2_ARG2(__lsx_vavgr_bu, tmp0, dst0, tmp1, dst1, dst0, dst1); ++ DUP2_ARG2(__lsx_vilvl_d, dst1, dst0, dst3, dst2, dst0, dst1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 7, tmp3, tmp2, 7, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vavgr_bu, tmp0, dst0, tmp1, dst1, dst0, dst1); + __lsx_vstelm_d(dst0, dst, 0, 0); + dst += dst_stride; + __lsx_vstelm_d(dst0, dst, 0, 1); +@@ -1295,43 +1301,43 @@ static void common_hz_8t_and_aver_dst_16w_lsx(const uint8_t *src, + + mask0 = __lsx_vld(mc_filt_mask_arr, 0); + src -= 3; +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, +- filter0, filter1, filter2, filter3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); + + for (;loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 8, src0, src1); ++ DUP2_ARG2(__lsx_vld, src, 0, src, 8, src0, src1); + src += src_stride; +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 8, src2, src3); ++ DUP2_ARG2(__lsx_vld, src, 0, src, 8, src2, src3); + src += src_stride; + dst0 = __lsx_vld(dst_tmp, 0); + dst_tmp += dst_stride; + dst1 = __lsx_vld(dst_tmp, 0); + dst_tmp += dst_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, src2, src2, +- mask0, src3, src3, mask0, tmp0, tmp1, tmp2, tmp3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, src2, src2, +- mask1, src3, src3, mask1, tmp4, tmp5, tmp6, tmp7); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, src2, src2, +- mask2, src3, src3, mask2, tmp8, tmp9, tmp10, tmp11); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, src2, src2, +- mask3, src3, src3, mask3, tmp12, tmp13, tmp14, tmp15); +- LSX_DUP4_ARG2(__lsx_dp2_h_b, tmp0, filter0, tmp1, filter0, tmp2, filter0, tmp3, +- filter0, tmp0, tmp1, tmp2, tmp3); +- LSX_DUP4_ARG2(__lsx_dp2_h_b, tmp8, filter2, tmp9, filter2, tmp10, filter2, tmp11, +- filter2, tmp8, tmp9, tmp10, tmp11); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, tmp0, tmp4, filter1, tmp1, tmp5, filter1, tmp2, +- tmp6, filter1, tmp3, tmp7, filter1, tmp0, tmp1, tmp2, tmp3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, tmp8, tmp12, filter3, tmp9, tmp13, filter3, tmp10, +- tmp14, filter3, tmp11, tmp15, filter3, tmp4, tmp5, tmp6, tmp7); +- LSX_DUP4_ARG2(__lsx_vsadd_h, tmp0, tmp4, tmp1, tmp5, tmp2, tmp6, tmp3, tmp7, +- tmp0, tmp1, tmp2, tmp3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 7, tmp3, tmp2, 7, dst2, dst3); +- LSX_DUP2_ARG2(__lsx_vxori_b, dst2, 128, dst3, 128, dst2, dst3); +- LSX_DUP2_ARG2(__lsx_vavgr_bu, dst0, dst2, dst1, dst3, dst0, dst1); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, src2, src2, ++ mask0, src3, src3, mask0, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, src2, src2, ++ mask1, src3, src3, mask1, tmp4, tmp5, tmp6, tmp7); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, src2, src2, ++ mask2, src3, src3, mask2, tmp8, tmp9, tmp10, tmp11); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, src2, src2, ++ mask3, src3, src3, mask3, tmp12, tmp13, tmp14, tmp15); ++ DUP4_ARG2(__lsx_vdp2_h_b, tmp0, filter0, tmp1, filter0, tmp2, filter0, tmp3, ++ filter0, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vdp2_h_b, tmp8, filter2, tmp9, filter2, tmp10, filter2, tmp11, ++ filter2, tmp8, tmp9, tmp10, tmp11); ++ DUP4_ARG3(__lsx_vdp2add_h_b, tmp0, tmp4, filter1, tmp1, tmp5, filter1, tmp2, ++ tmp6, filter1, tmp3, tmp7, filter1, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, tmp8, tmp12, filter3, tmp9, tmp13, filter3, tmp10, ++ tmp14, filter3, tmp11, tmp15, filter3, tmp4, tmp5, tmp6, tmp7); ++ DUP4_ARG2(__lsx_vsadd_h, tmp0, tmp4, tmp1, tmp5, tmp2, tmp6, tmp3, tmp7, ++ tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 7, tmp3, tmp2, 7, dst2, dst3); ++ DUP2_ARG2(__lsx_vxori_b, dst2, 128, dst3, 128, dst2, dst3); ++ DUP2_ARG2(__lsx_vavgr_bu, dst0, dst2, dst1, dst3, dst0, dst1); + __lsx_vst(dst0, dst, 0); + dst += dst_stride; + __lsx_vst(dst1, dst, 0); +@@ -1355,41 +1361,41 @@ static void common_hz_8t_and_aver_dst_32w_lsx(const uint8_t *src, + + mask0 = __lsx_vld(mc_filt_mask_arr, 0); + src -= 3; +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, + filter0, filter1, filter2, filter3); + + for (;loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src2); ++ DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src2); + src3 = __lsx_vld(src, 24); + src1 = __lsx_vshuf_b(src2, src0, shuff); + src += src_stride; +- LSX_DUP2_ARG2(__lsx_vld, dst_tmp, 0, dst, 16, dst0, dst1); ++ DUP2_ARG2(__lsx_vld, dst_tmp, 0, dst, 16, dst0, dst1); + dst_tmp += dst_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, src2, src2, +- mask0, src3, src3, mask0, tmp0, tmp1, tmp2, tmp3); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, src2, src2, +- mask1, src3, src3, mask1, tmp4, tmp5, tmp6, tmp7); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, src2, src2, +- mask2, src3, src3, mask2, tmp8, tmp9, tmp10, tmp11); +- LSX_DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, src2, src2, +- mask3, src3, src3, mask3, tmp12, tmp13, tmp14, tmp15); +- LSX_DUP4_ARG2(__lsx_dp2_h_b, tmp0, filter0, tmp1, filter0, tmp2, filter0, tmp3, +- filter0, tmp0, tmp1, tmp2, tmp3); +- LSX_DUP4_ARG2(__lsx_dp2_h_b, tmp8, filter2, tmp9, filter2, tmp10, filter2, tmp11, +- filter2, tmp8, tmp9, tmp10, tmp11); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, tmp0, tmp4, filter1, tmp1, tmp5, filter1, tmp2, +- tmp6, filter1, tmp3, tmp7, filter1, tmp0, tmp1, tmp2, tmp3); +- LSX_DUP4_ARG3(__lsx_dp2add_h_b, tmp8, tmp12, filter3, tmp9, tmp13, filter3, tmp10, +- tmp14, filter3, tmp11, tmp15, filter3, tmp4, tmp5, tmp6, tmp7); +- LSX_DUP4_ARG2(__lsx_vsadd_h, tmp0, tmp4, tmp1, tmp5, tmp2, tmp6, tmp3, tmp7, +- tmp0, tmp1, tmp2, tmp3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 7, tmp3, tmp2, 7, tmp0, tmp1); +- LSX_DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); +- LSX_DUP2_ARG2(__lsx_vavgr_bu, dst0, tmp0, dst1, tmp1, dst0, dst1); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, src2, src2, ++ mask0, src3, src3, mask0, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, src2, src2, ++ mask1, src3, src3, mask1, tmp4, tmp5, tmp6, tmp7); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, src2, src2, ++ mask2, src3, src3, mask2, tmp8, tmp9, tmp10, tmp11); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, src2, src2, ++ mask3, src3, src3, mask3, tmp12, tmp13, tmp14, tmp15); ++ DUP4_ARG2(__lsx_vdp2_h_b, tmp0, filter0, tmp1, filter0, tmp2, filter0, tmp3, ++ filter0, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vdp2_h_b, tmp8, filter2, tmp9, filter2, tmp10, filter2, tmp11, ++ filter2, tmp8, tmp9, tmp10, tmp11); ++ DUP4_ARG3(__lsx_vdp2add_h_b, tmp0, tmp4, filter1, tmp1, tmp5, filter1, tmp2, ++ tmp6, filter1, tmp3, tmp7, filter1, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, tmp8, tmp12, filter3, tmp9, tmp13, filter3, tmp10, ++ tmp14, filter3, tmp11, tmp15, filter3, tmp4, tmp5, tmp6, tmp7); ++ DUP4_ARG2(__lsx_vsadd_h, tmp0, tmp4, tmp1, tmp5, tmp2, tmp6, tmp3, tmp7, ++ tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 7, tmp3, tmp2, 7, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vavgr_bu, dst0, tmp0, dst1, tmp1, dst0, dst1); + __lsx_vst(dst0, dst, 0); + __lsx_vst(dst1, dst, 16); + dst += dst_stride; +@@ -1411,37 +1417,37 @@ static void common_hz_8t_and_aver_dst_64w_lsx(const uint8_t *src, + + mask0 = __lsx_vld(mc_filt_mask_arr, 0); + src -= 3; +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, + filter0, filter1, filter2, filter3); + + for (;loop_cnt--;) { +- LSX_DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src2); ++ DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src2); + src3 = __lsx_vld(src, 24); + src1 = __lsx_vshuf_b(src2, src0, shuff); +- LSX_DUP2_ARG2(__lsx_vld, dst, 0, dst, 16, dst0, dst1); +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); ++ DUP2_ARG2(__lsx_vld, dst, 0, dst, 16, dst0, dst1); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, + filter0, filter1, filter2, filter3, out0, out1, out2, out3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); +- LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); +- LSX_DUP2_ARG2(__lsx_vavgr_bu, out0, dst0, out1, dst1, out0, out1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ DUP2_ARG2(__lsx_vavgr_bu, out0, dst0, out1, dst1, out0, out1); + __lsx_vst(out0, dst, 0); + __lsx_vst(out1, dst, 16); + +- LSX_DUP2_ARG2(__lsx_vld, src, 32, src, 48, src0, src2); ++ DUP2_ARG2(__lsx_vld, src, 32, src, 48, src0, src2); + src3 = __lsx_vld(src, 56); + src1 = __lsx_vshuf_b(src2, src0, shuff); +- LSX_DUP2_ARG2(__lsx_vld, dst, 32, dst, 48, dst0, dst1); +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); ++ DUP2_ARG2(__lsx_vld, dst, 32, dst, 48, dst0, dst1); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, + filter0, filter1, filter2, filter3, out0, out1, out2, out3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); +- LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); +- LSX_DUP2_ARG2(__lsx_vavgr_bu, out0, dst0, out1, dst1, out0, out1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ DUP2_ARG2(__lsx_vavgr_bu, out0, dst0, out1, dst1, out0, out1); + __lsx_vst(out0, dst, 32); + __lsx_vst(out1, dst, 48); + src += src_stride; +@@ -1464,8 +1470,8 @@ static void common_vt_8t_and_aver_dst_4w_lsx(const uint8_t *src, + __m128i out0, out1; + + src -= (3 * src_stride); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, +- filter0, filter1, filter2, filter3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); + LSX_LD_4(src, src_stride, src0, src1, src2, src3); + src += src_stride; + src4 = __lsx_vld(src, 0); +@@ -1474,11 +1480,12 @@ static void common_vt_8t_and_aver_dst_4w_lsx(const uint8_t *src, + src += src_stride; + src6 = __lsx_vld(src, 0); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, tmp0, tmp1, tmp2, tmp3); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, tmp4, tmp5); +- LSX_DUP2_ARG2(__lsx_vilvl_d, tmp3, tmp0, tmp4, tmp1, reg0, reg1); ++ DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, tmp0, tmp1, ++ tmp2, tmp3); ++ DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, tmp4, tmp5); ++ DUP2_ARG2(__lsx_vilvl_d, tmp3, tmp0, tmp4, tmp1, reg0, reg1); + reg2 = __lsx_vilvl_d(tmp5, tmp2); +- LSX_DUP2_ARG2(__lsx_vxori_b, reg0, 128, reg1, 128, reg0, reg1); ++ DUP2_ARG2(__lsx_vxori_b, reg0, 128, reg1, 128, reg0, reg1); + reg2 = __lsx_vxori_b(reg2, 128); + + for (;loop_cnt--;) { +@@ -1492,11 +1499,12 @@ static void common_vt_8t_and_aver_dst_4w_lsx(const uint8_t *src, + dst_tmp += dst_stride; + src3 = __lsx_vldrepl_w(dst_tmp, 0); + dst_tmp += dst_stride; +- LSX_DUP2_ARG2(__lsx_vilvl_w, src1, src0, src3, src2, src0, src1); ++ DUP2_ARG2(__lsx_vilvl_w, src1, src0, src3, src2, src0, src1); + src0 = __lsx_vilvl_d(src1, src0); +- LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, tmp0, tmp1, tmp2, tmp3); +- LSX_DUP2_ARG2(__lsx_vilvl_d, tmp1, tmp0, tmp3, tmp2, reg3, reg4); +- LSX_DUP2_ARG2(__lsx_vxori_b, reg3, 128, reg4, 128, reg3, reg4); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, tmp0, ++ tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lsx_vilvl_d, tmp1, tmp0, tmp3, tmp2, reg3, reg4); ++ DUP2_ARG2(__lsx_vxori_b, reg3, 128, reg4, 128, reg3, reg4); + out0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, reg3, filter0, filter1, filter2, filter3); + out1 = FILT_8TAP_DPADD_S_H(reg1, reg2, reg3, reg4, filter0, filter1, filter2, filter3); + out0 = __lsx_vssrarni_b_h(out1, out0, 7); +@@ -1532,8 +1540,8 @@ static void common_vt_8t_and_aver_dst_8w_lsx(const uint8_t *src, + __m128i out0, out1, out2, out3; + + src -= (3 * src_stride); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, +- filter0, filter1, filter2, filter3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); + + LSX_LD_4(src, src_stride, src0, src1, src2, src3); + src += src_stride; +@@ -1543,11 +1551,11 @@ static void common_vt_8t_and_aver_dst_8w_lsx(const uint8_t *src, + src += src_stride; + src6 = __lsx_vld(src, 0); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); +- LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, reg0, reg1, reg2, reg3); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, reg4, reg5); ++ DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, reg0, reg1, reg2, reg3); ++ DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, reg4, reg5); + + for (;loop_cnt--;) { + LSX_LD_4(src, src_stride, src7, src8, src9, src10); +@@ -1560,18 +1568,18 @@ static void common_vt_8t_and_aver_dst_8w_lsx(const uint8_t *src, + dst_tmp += dst_stride; + src3 = __lsx_vldrepl_d(dst_tmp, 0); + dst_tmp += dst_stride; +- LSX_DUP2_ARG2(__lsx_vilvl_d, src1, src0, src3, src2, src0, src1); +- LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, +- src7, src8, src9, src10); +- LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, +- tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lsx_vilvl_d, src1, src0, src3, src2, src0, src1); ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ tmp0, tmp1, tmp2, tmp3); + out0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, tmp0, filter0, filter1, filter2, filter3); + out1 = FILT_8TAP_DPADD_S_H(reg3, reg4, reg5, tmp1, filter0, filter1, filter2, filter3); + out2 = FILT_8TAP_DPADD_S_H(reg1, reg2, tmp0, tmp2, filter0, filter1, filter2, filter3); + out3 = FILT_8TAP_DPADD_S_H(reg4, reg5, tmp1, tmp3, filter0, filter1, filter2, filter3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); +- LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); +- LSX_DUP2_ARG2(__lsx_vavgr_bu, out0, src0, out1, src1, out0, out1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ DUP2_ARG2(__lsx_vavgr_bu, out0, src0, out1, src1, out0, out1); + __lsx_vstelm_d(out0, dst, 0, 0); + dst += dst_stride; + __lsx_vstelm_d(out0, dst, 0, 1); +@@ -1609,8 +1617,8 @@ static void common_vt_8t_and_aver_dst_16w_mult_lsx(const uint8_t *src, + __m128i tmp0, tmp1, tmp2, tmp3; + + src -= (3 * src_stride); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, +- filter0, filter1, filter2, filter3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filter0, filter1, filter2, filter3); + for (;cnt--;) { + uint32_t loop_cnt = height >> 2; + uint8_t *dst_reg = dst; +@@ -1626,36 +1634,36 @@ static void common_vt_8t_and_aver_dst_16w_mult_lsx(const uint8_t *src, + src_tmp += src_stride; + src6 = __lsx_vld(src_tmp, 0); + src_tmp += src_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); +- LSX_DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, +- reg0, reg1, reg2, reg3); +- LSX_DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, reg4, reg5); +- LSX_DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, +- reg6, reg7, reg8, reg9); +- LSX_DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, reg10, reg11); ++ DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ reg0, reg1, reg2, reg3); ++ DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, reg4, reg5); ++ DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ reg6, reg7, reg8, reg9); ++ DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, reg10, reg11); + + for (;loop_cnt--;) { + LSX_LD_4(src_tmp, src_stride, src7, src8, src9, src10); + src_tmp += src_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, +- src7, src8, src9, src10); +- LSX_DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src0, src1, src2, src3); +- LSX_DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src4, src5, src7, src8); ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, src9, ++ src4, src5, src7, src8); + tmp0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, src0, filter0, filter1, filter2, filter3); + tmp1 = FILT_8TAP_DPADD_S_H(reg3, reg4, reg5, src1, filter0, filter1, filter2, filter3); + tmp2 = FILT_8TAP_DPADD_S_H(reg6, reg7, reg8, src4, filter0, filter1, filter2, filter3); + tmp3 = FILT_8TAP_DPADD_S_H(reg9, reg10, reg11, src5, filter0, filter1, filter2, filter3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); +- LSX_DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); + tmp2 = __lsx_vld(dst_reg, 0); + dst_reg += dst_stride; + tmp3 = __lsx_vld(dst_reg, 0); + dst_reg += dst_stride; +- LSX_DUP2_ARG2(__lsx_vavgr_bu, tmp0, tmp2, tmp1, tmp3, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vavgr_bu, tmp0, tmp2, tmp1, tmp3, tmp0, tmp1); + __lsx_vst(tmp0, dst_tmp, 0); + dst_tmp += dst_stride; + __lsx_vst(tmp1, dst_tmp, 0); +@@ -1664,13 +1672,13 @@ static void common_vt_8t_and_aver_dst_16w_mult_lsx(const uint8_t *src, + tmp1 = FILT_8TAP_DPADD_S_H(reg4, reg5, src1, src3, filter0, filter1, filter2, filter3); + tmp2 = FILT_8TAP_DPADD_S_H(reg7, reg8, src4, src7, filter0, filter1, filter2, filter3); + tmp3 = FILT_8TAP_DPADD_S_H(reg10, reg11, src5, src8, filter0, filter1, filter2, filter3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); +- LSX_DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); + tmp2 = __lsx_vld(dst_reg, 0); + dst_reg += dst_stride; + tmp3 = __lsx_vld(dst_reg, 0); + dst_reg += dst_stride; +- LSX_DUP2_ARG2(__lsx_vavgr_bu, tmp0, tmp2, tmp1, tmp3, tmp0, tmp1); ++ DUP2_ARG2(__lsx_vavgr_bu, tmp0, tmp2, tmp1, tmp3, tmp0, tmp1); + __lsx_vst(tmp0, dst_tmp, 0); + dst_tmp += dst_stride; + __lsx_vst(tmp1, dst_tmp, 0); +@@ -1745,9 +1753,9 @@ static void common_hv_8ht_8vt_and_aver_dst_4w_lsx(const uint8_t *src, + + mask0 = __lsx_vld(mc_filt_mask_arr, 16); + src -= (3 + 3 * src_stride); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_horiz, 0, filter_horiz, 2, filter_horiz, 4, +- filter_horiz, 6, filt_hz0, filt_hz1, filt_hz2, filt_hz3); +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP4_ARG2(__lsx_vldrepl_h, filter_horiz, 0, filter_horiz, 2, filter_horiz, 4, ++ filter_horiz, 6, filt_hz0, filt_hz1, filt_hz2, filt_hz3); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + + LSX_LD_4(src, src_stride, src0, src1, src2, src3); +@@ -1758,8 +1766,8 @@ static void common_hv_8ht_8vt_and_aver_dst_4w_lsx(const uint8_t *src, + src += src_stride; + src6 = __lsx_vld(src, 0); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); + + tmp0 = HORIZ_8TAP_FILT(src0, src1, mask0, mask1, mask2, mask3, filt_hz0, +@@ -1770,10 +1778,10 @@ static void common_hv_8ht_8vt_and_aver_dst_4w_lsx(const uint8_t *src, + filt_hz1, filt_hz2, filt_hz3); + tmp5 = HORIZ_8TAP_FILT(src5, src6, mask0, mask1, mask2, mask3, filt_hz0, + filt_hz1, filt_hz2, filt_hz3); +- LSX_DUP2_ARG3(__lsx_vshuf_b, tmp2, tmp0, shuff, tmp4, tmp2, shuff, tmp1, tmp3); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_vert, 0, filter_vert, 2, filter_vert, 4, +- filter_vert, 6, filt_vt0, filt_vt1, filt_vt2, filt_vt3); +- LSX_DUP2_ARG2(__lsx_vpackev_b, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); ++ DUP2_ARG3(__lsx_vshuf_b, tmp2, tmp0, shuff, tmp4, tmp2, shuff, tmp1, tmp3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter_vert, 0, filter_vert, 2, filter_vert, 4, ++ filter_vert, 6, filt_vt0, filt_vt1, filt_vt2, filt_vt3); ++ DUP2_ARG2(__lsx_vpackev_b, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); + tmp2 = __lsx_vpackev_b(tmp5, tmp4); + + for (;loop_cnt--;) { +@@ -1787,10 +1795,10 @@ static void common_hv_8ht_8vt_and_aver_dst_4w_lsx(const uint8_t *src, + dst_tmp += dst_stride; + src5 = __lsx_vldrepl_w(dst_tmp, 0); + dst_tmp += dst_stride; +- LSX_DUP2_ARG2(__lsx_vilvl_w, src3, src2, src5, src4, src2, src3); ++ DUP2_ARG2(__lsx_vilvl_w, src3, src2, src5, src4, src2, src3); + src2 = __lsx_vilvl_d(src3, src2); +- LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, +- src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); + tmp3 = HORIZ_8TAP_FILT(src7, src8, mask0, mask1, mask2, mask3, filt_hz0, + filt_hz1, filt_hz2, filt_hz3); + tmp4 = __lsx_vshuf_b(tmp3, tmp5, shuff); +@@ -1841,9 +1849,9 @@ static void common_hv_8ht_8vt_and_aver_dst_8w_lsx(const uint8_t *src, + + mask0 = __lsx_vld(mc_filt_mask_arr, 0); + src -= (3 + 3 * src_stride); +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_horiz, 0, filter_horiz, 2, filter_horiz, 4, +- filter_horiz, 6, filt_hz0, filt_hz1, filt_hz2, filt_hz3); +- LSX_DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); ++ DUP4_ARG2(__lsx_vldrepl_h, filter_horiz, 0, filter_horiz, 2, filter_horiz, 4, ++ filter_horiz, 6, filt_hz0, filt_hz1, filt_hz2, filt_hz3); ++ DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + + LSX_LD_4(src, src_stride, src0, src1, src2, src3); +@@ -1854,8 +1862,8 @@ static void common_hv_8ht_8vt_and_aver_dst_8w_lsx(const uint8_t *src, + src += src_stride; + src6 = __lsx_vld(src, 0); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); +- LSX_DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); ++ DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); + + src0 = HORIZ_8TAP_FILT(src0, src0, mask0, mask1, mask2, mask3, filt_hz0, +@@ -1873,18 +1881,18 @@ static void common_hv_8ht_8vt_and_aver_dst_8w_lsx(const uint8_t *src, + src6 = HORIZ_8TAP_FILT(src6, src6, mask0, mask1, mask2, mask3, filt_hz0, + filt_hz1, filt_hz2, filt_hz3); + +- LSX_DUP4_ARG2(__lsx_vldrepl_h, filter_vert, 0, filter_vert, 2, filter_vert, 4, +- filter_vert, 6, filt_vt0, filt_vt1, filt_vt2, filt_vt3); +- LSX_DUP4_ARG2(__lsx_vpackev_b, src1, src0, src3, src2, src5, src4, +- src2, src1, tmp0, tmp1, tmp2, tmp4); +- LSX_DUP2_ARG2(__lsx_vpackev_b, src4, src3, src6, src5, tmp5, tmp6); ++ DUP4_ARG2(__lsx_vldrepl_h, filter_vert, 0, filter_vert, 2, filter_vert, 4, ++ filter_vert, 6, filt_vt0, filt_vt1, filt_vt2, filt_vt3); ++ DUP4_ARG2(__lsx_vpackev_b, src1, src0, src3, src2, src5, src4, ++ src2, src1, tmp0, tmp1, tmp2, tmp4); ++ DUP2_ARG2(__lsx_vpackev_b, src4, src3, src6, src5, tmp5, tmp6); + + for (;loop_cnt--;) { + LSX_LD_4(src, src_stride, src7, src8, src9, src10); + src += src_stride; + +- LSX_DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, +- src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, ++ src7, src8, src9, src10); + src7 = HORIZ_8TAP_FILT(src7, src7, mask0, mask1, mask2, mask3, filt_hz0, + filt_hz1, filt_hz2, filt_hz3); + tmp3 = __lsx_vpackev_b(src7, src6); +@@ -1905,8 +1913,8 @@ static void common_hv_8ht_8vt_and_aver_dst_8w_lsx(const uint8_t *src, + src2 = __lsx_vpackev_b(src10, src9); + src4 = FILT_8TAP_DPADD_S_H(tmp5, tmp6, src0, src2, filt_vt0, filt_vt1, + filt_vt2, filt_vt3); +- LSX_DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, src4, src3, 7, out0, out1); +- LSX_DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, src4, src3, 7, out0, out1); ++ DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + src5 = __lsx_vldrepl_d(dst_tmp, 0); + dst_tmp += dst_stride; + src7 = __lsx_vldrepl_d(dst_tmp, 0); +@@ -1915,8 +1923,8 @@ static void common_hv_8ht_8vt_and_aver_dst_8w_lsx(const uint8_t *src, + dst_tmp += dst_stride; + src9 = __lsx_vldrepl_d(dst_tmp, 0); + dst_tmp += dst_stride; +- LSX_DUP2_ARG2(__lsx_vilvl_d, src7, src5, src9, src8, src5, src7); +- LSX_DUP2_ARG2(__lsx_vavgr_bu, out0, src5, out1, src7, out0, out1); ++ DUP2_ARG2(__lsx_vilvl_d, src7, src5, src9, src8, src5, src7); ++ DUP2_ARG2(__lsx_vavgr_bu, out0, src5, out1, src7, out0, out1); + __lsx_vstelm_d(out0, dst, 0, 0); + dst += dst_stride; + __lsx_vstelm_d(out0, dst, 0, 1); +@@ -2014,7 +2022,7 @@ static void avg_width8_lsx(const uint8_t *src, int32_t src_stride, + src += src_stride; + tmp3 = __lsx_vldrepl_d(src, 0); + src += src_stride; +- LSX_DUP2_ARG2(__lsx_vilvl_d, tmp1, tmp0, tmp3, tmp2, src0, src1); ++ DUP2_ARG2(__lsx_vilvl_d, tmp1, tmp0, tmp3, tmp2, src0, src1); + tmp0 = __lsx_vldrepl_d(dst_tmp, 0); + dst_tmp += dst_stride; + tmp1 = __lsx_vldrepl_d(dst_tmp, 0); +@@ -2023,8 +2031,8 @@ static void avg_width8_lsx(const uint8_t *src, int32_t src_stride, + dst_tmp += dst_stride; + tmp3 = __lsx_vldrepl_d(dst_tmp, 0); + dst_tmp += dst_stride; +- LSX_DUP2_ARG2(__lsx_vilvl_d, tmp1, tmp0, tmp3, tmp2, dst0, dst1); +- LSX_DUP2_ARG2(__lsx_vavgr_bu, src0, dst0, src1, dst1, dst0, dst1); ++ DUP2_ARG2(__lsx_vilvl_d, tmp1, tmp0, tmp3, tmp2, dst0, dst1); ++ DUP2_ARG2(__lsx_vavgr_bu, src0, dst0, src1, dst1, dst0, dst1); + __lsx_vstelm_d(dst0, dst, 0, 0); + dst += dst_stride; + __lsx_vstelm_d(dst0, dst, 0, 1); +@@ -2050,8 +2058,8 @@ static void avg_width16_lsx(const uint8_t *src, int32_t src_stride, + src += src_stride; + LSX_LD_4(dst_tmp, dst_stride, dst0, dst1, dst2, dst3); + dst_tmp += dst_stride; +- LSX_DUP4_ARG2(__lsx_vavgr_bu, src0, dst0, src1, dst1, +- src2, dst2, src3, dst3, dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vavgr_bu, src0, dst0, src1, dst1, ++ src2, dst2, src3, dst3, dst0, dst1, dst2, dst3); + LSX_ST_4(dst0, dst1, dst2, dst3, dst, dst_stride); + dst += dst_stride; + } +@@ -2077,10 +2085,10 @@ static void avg_width32_lsx(const uint8_t *src, int32_t src_stride, + dst_tmp1 += dst_stride; + LSX_LD_4_16(dst_tmp2, dst_stride, dst1, dst3, dst5, dst7); + dst_tmp2 += dst_stride; +- LSX_DUP4_ARG2(__lsx_vavgr_bu, src0, dst0, src1, dst1, +- src2, dst2, src3, dst3, dst0, dst1, dst2, dst3); +- LSX_DUP4_ARG2(__lsx_vavgr_bu, src4, dst4, src5, dst5, +- src6, dst6, src7, dst7, dst4, dst5, dst6, dst7); ++ DUP4_ARG2(__lsx_vavgr_bu, src0, dst0, src1, dst1, ++ src2, dst2, src3, dst3, dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vavgr_bu, src4, dst4, src5, dst5, ++ src6, dst6, src7, dst7, dst4, dst5, dst6, dst7); + LSX_ST_4(dst0, dst2, dst4, dst6, dst_tmp, dst_stride); + dst_tmp += dst_stride; + LSX_ST_4_16(dst1, dst3, dst5, dst7, dst, dst_stride); +@@ -2100,38 +2108,38 @@ static void avg_width64_lsx(const uint8_t *src, int32_t src_stride, + __m128i dst8, dst9, dst10, dst11, dst12, dst13, dst14, dst15; + + for (;cnt--;) { +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, +- src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, ++ src0, src1, src2, src3); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, +- src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, ++ src4, src5, src6, src7); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, +- src8, src9, src10, src11); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, ++ src8, src9, src10, src11); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, +- src12, src13, src14, src15); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, ++ src12, src13, src14, src15); + src += src_stride; +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp, 16, dst_tmp, 32, dst_tmp, 48, +- dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp, 16, dst_tmp, 32, dst_tmp, 48, ++ dst0, dst1, dst2, dst3); + dst_tmp += dst_stride; +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp, 16, dst_tmp, 32, dst_tmp, 48, +- dst4, dst5, dst6, dst7); ++ DUP4_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp, 16, dst_tmp, 32, dst_tmp, 48, ++ dst4, dst5, dst6, dst7); + dst_tmp += dst_stride; +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp, 16, dst_tmp, 32, dst_tmp, 48, +- dst8, dst9, dst10, dst11); ++ DUP4_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp, 16, dst_tmp, 32, dst_tmp, 48, ++ dst8, dst9, dst10, dst11); + dst_tmp += dst_stride; +- LSX_DUP4_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp, 16, dst_tmp, 32, dst_tmp, 48, +- dst12, dst13, dst14, dst15); ++ DUP4_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp, 16, dst_tmp, 32, dst_tmp, 48, ++ dst12, dst13, dst14, dst15); + dst_tmp += dst_stride; +- LSX_DUP4_ARG2(__lsx_vavgr_bu, src0, dst0, src1, dst1, +- src2, dst2, src3, dst3, dst0, dst1, dst2, dst3); +- LSX_DUP4_ARG2(__lsx_vavgr_bu, src4, dst4, src5, dst5, +- src6, dst6, src7, dst7, dst4, dst5, dst6, dst7); +- LSX_DUP4_ARG2(__lsx_vavgr_bu, src8, dst8, src9, dst9, src10, +- dst10, src11, dst11, dst8, dst9, dst10, dst11); +- LSX_DUP4_ARG2(__lsx_vavgr_bu, src12, dst12, src13, dst13, src14, +- dst14, src15, dst15, dst12, dst13, dst14, dst15); ++ DUP4_ARG2(__lsx_vavgr_bu, src0, dst0, src1, dst1, ++ src2, dst2, src3, dst3, dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vavgr_bu, src4, dst4, src5, dst5, ++ src6, dst6, src7, dst7, dst4, dst5, dst6, dst7); ++ DUP4_ARG2(__lsx_vavgr_bu, src8, dst8, src9, dst9, src10, ++ dst10, src11, dst11, dst8, dst9, dst10, dst11); ++ DUP4_ARG2(__lsx_vavgr_bu, src12, dst12, src13, dst13, src14, ++ dst14, src15, dst15, dst12, dst13, dst14, dst15); + __lsx_vst(dst0, dst, 0); + __lsx_vst(dst1, dst, 16); + __lsx_vst(dst2, dst, 32); +diff --git a/libavutil/loongarch/generic_macros_lasx.h b/libavutil/loongarch/generic_macros_lasx.h +deleted file mode 100644 +index aca12e6959..0000000000 +--- a/libavutil/loongarch/generic_macros_lasx.h ++++ /dev/null +@@ -1,3561 +0,0 @@ +-/* +- * Copyright (c) 2020 Loongson Technology Corporation Limited +- * All rights reserved. +- * Contributed by Shiyou Yin +- * Xiwei Gu +- * Jin Bo +- * Hao Chen +- * Lu Wang +- * Peng Zhou +- * +- * This file is part of FFmpeg. +- * +- * FFmpeg is free software; you can redistribute it and/or +- * modify it under the terms of the GNU Lesser General Public +- * License as published by the Free Software Foundation; either +- * version 2.1 of the License, or (at your option) any later version. +- * +- * FFmpeg 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 +- * Lesser General Public License for more details. +- * +- * You should have received a copy of the GNU Lesser General Public +- * License along with FFmpeg; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +- * +- */ +- +-#ifndef AVUTIL_LOONGARCH_GENERIC_MACROS_LASX_H +-#define AVUTIL_LOONGARCH_GENERIC_MACROS_LASX_H +- +-/* +- * Copyright (c) 2020 Loongson Technology Corporation Limited +- * All rights reserved. +- * Contributed by Shiyou Yin +- * Xiwei Gu +- * Jin Bo +- * Hao Chen +- * Lu Wang +- * Peng Zhou +- * +- * This file is maintained in LSOM project, don't change it directly. +- * You can get the latest version of this header from: *** +- * +- */ +- +-#ifndef GENERIC_MACROS_LASX_H +-#define GENERIC_MACROS_LASX_H +- +-#include +-#include +- +-/** +- * MAJOR version: Macro usage changes. +- * MINOR version: Add new macros, or bug fix. +- * MICRO version: Comment changes or implementation changes。 +- */ +-#define LSOM_LASX_VERSION_MAJOR 3 +-#define LSOM_LASX_VERSION_MINOR 0 +-#define LSOM_LASX_VERSION_MICRO 0 +- +-/* Description : Load 256-bit vector data with stride +- * Arguments : Inputs - psrc (source pointer to load from) +- * - stride +- * Outputs - out0, out1, ~ +- * Details : Load 256-bit data in 'out0' from (psrc) +- * Load 256-bit data in 'out1' from (psrc + stride) +- */ +-#define LASX_LD(psrc) *((__m256i *)(psrc)) +- +-#define LASX_LD_2(psrc, stride, out0, out1) \ +-{ \ +- out0 = LASX_LD(psrc); \ +- out1 = LASX_LD((psrc) + stride); \ +-} +- +-#define LASX_LD_4(psrc, stride, out0, out1, out2, out3) \ +-{ \ +- LASX_LD_2((psrc), stride, out0, out1); \ +- LASX_LD_2((psrc) + 2 * stride , stride, out2, out3); \ +-} +- +-#define LASX_LD_8(psrc, stride, out0, out1, out2, out3, out4, out5, \ +- out6, out7) \ +-{ \ +- LASX_LD_4((psrc), stride, out0, out1, out2, out3); \ +- LASX_LD_4((psrc) + 4 * stride, stride, out4, out5, out6, out7); \ +-} +- +-/* Description : Store 256-bit vector data with stride +- * Arguments : Inputs - in0, in1, ~ +- * - pdst (destination pointer to store to) +- * - stride +- * Details : Store 256-bit data from 'in0' to (pdst) +- * Store 256-bit data from 'in1' to (pdst + stride) +- */ +-#define LASX_ST(in, pdst) *((__m256i *)(pdst)) = (in) +- +-#define LASX_ST_2(in0, in1, pdst, stride) \ +-{ \ +- LASX_ST(in0, (pdst)); \ +- LASX_ST(in1, (pdst) + stride); \ +-} +- +-#define LASX_ST_4(in0, in1, in2, in3, pdst, stride) \ +-{ \ +- LASX_ST_2(in0, in1, (pdst), stride); \ +- LASX_ST_2(in2, in3, (pdst) + 2 * stride, stride); \ +-} +- +-#define LASX_ST_8(in0, in1, in2, in3, in4, in5, in6, in7, pdst, stride) \ +-{ \ +- LASX_ST_4(in0, in1, in2, in3, (pdst), stride); \ +- LASX_ST_4(in4, in5, in6, in7, (pdst) + 4 * stride, stride); \ +-} +- +-/* Description : Store half word elements of vector with stride +- * Arguments : Inputs - in source vector +- * - idx, idx0, idx1, ~ +- * - pdst (destination pointer to store to) +- * - stride +- * Details : Store half word 'idx0' from 'in' to (pdst) +- * Store half word 'idx1' from 'in' to (pdst + stride) +- * Similar for other elements +- * Example : LASX_ST_H(in, idx, pdst) +- * in : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 +- * idx0 : 0x01 +- * out0 : 2 +- */ +-#define LASX_ST_H(in, idx, pdst) \ +-{ \ +- __lasx_xvstelm_h(in, pdst, 0, idx); \ +-} +- +-#define LASX_ST_H_2(in, idx0, idx1, pdst, stride) \ +-{ \ +- LASX_ST_H(in, idx0, (pdst)); \ +- LASX_ST_H(in, idx1, (pdst) + stride); \ +-} +- +-#define LASX_ST_H_4(in, idx0, idx1, idx2, idx3, pdst, stride) \ +-{ \ +- LASX_ST_H_2(in, idx0, idx1, (pdst), stride); \ +- LASX_ST_H_2(in, idx2, idx3, (pdst) + 2 * stride, stride); \ +-} +- +- +-/* Description : Store word elements of vector with stride +- * Arguments : Inputs - in source vector +- * - idx, idx0, idx1, ~ +- * - pdst (destination pointer to store to) +- * - stride +- * Details : Store word 'idx0' from 'in' to (pdst) +- * Store word 'idx1' from 'in' to (pdst + stride) +- * Similar for other elements +- * Example : LASX_ST_W(in, idx, pdst) +- * in : 1, 2, 3, 4, 5, 6, 7, 8 +- * idx0 : 0x01 +- * out0 : 2 +- */ +-#define LASX_ST_W(in, idx, pdst) \ +-{ \ +- __lasx_xvstelm_w(in, pdst, 0, idx); \ +-} +- +-#define LASX_ST_W_2(in, idx0, idx1, pdst, stride) \ +-{ \ +- LASX_ST_W(in, idx0, (pdst)); \ +- LASX_ST_W(in, idx1, (pdst) + stride); \ +-} +- +-#define LASX_ST_W_4(in, idx0, idx1, idx2, idx3, pdst, stride) \ +-{ \ +- LASX_ST_W_2(in, idx0, idx1, (pdst), stride); \ +- LASX_ST_W_2(in, idx2, idx3, (pdst) + 2 * stride, stride); \ +-} +- +-#define LASX_ST_W_8(in, idx0, idx1, idx2, idx3, idx4, idx5, idx6, idx7, \ +- pdst, stride) \ +-{ \ +- LASX_ST_W_4(in, idx0, idx1, idx2, idx3, (pdst), stride); \ +- LASX_ST_W_4(in, idx4, idx5, idx6, idx7, (pdst) + 4 * stride, stride); \ +-} +- +-/* Description : Store double word elements of vector with stride +- * Arguments : Inputs - in source vector +- * - idx, idx0, idx1, ~ +- * - pdst (destination pointer to store to) +- * - stride +- * Details : Store double word 'idx0' from 'in' to (pdst) +- * Store double word 'idx1' from 'in' to (pdst + stride) +- * Similar for other elements +- * Example : See LASX_ST_W(in, idx, pdst) +- */ +-#define LASX_ST_D(in, idx, pdst) \ +-{ \ +- __lasx_xvstelm_d(in, pdst, 0, idx); \ +-} +- +-#define LASX_ST_D_2(in, idx0, idx1, pdst, stride) \ +-{ \ +- LASX_ST_D(in, idx0, (pdst)); \ +- LASX_ST_D(in, idx1, (pdst) + stride); \ +-} +- +-#define LASX_ST_D_4(in, idx0, idx1, idx2, idx3, pdst, stride) \ +-{ \ +- LASX_ST_D_2(in, idx0, idx1, (pdst), stride); \ +- LASX_ST_D_2(in, idx2, idx3, (pdst) + 2 * stride, stride); \ +-} +- +-/* Description : Store quad word elements of vector with stride +- * Arguments : Inputs - in source vector +- * - idx, idx0, idx1, ~ +- * - pdst (destination pointer to store to) +- * - stride +- * Details : Store quad word 'idx0' from 'in' to (pdst) +- * Store quad word 'idx1' from 'in' to (pdst + stride) +- * Similar for other elements +- * Example : See LASX_ST_W(in, idx, pdst) +- */ +-#define LASX_ST_Q(in, idx, pdst) \ +-{ \ +- LASX_ST_D(in, (idx << 1), pdst); \ +- LASX_ST_D(in, (( idx << 1) + 1), (char*)(pdst) + 8); \ +-} +- +-#define LASX_ST_Q_2(in, idx0, idx1, pdst, stride) \ +-{ \ +- LASX_ST_Q(in, idx0, (pdst)); \ +- LASX_ST_Q(in, idx1, (pdst) + stride); \ +-} +- +-#define LASX_ST_Q_4(in, idx0, idx1, idx2, idx3, pdst, stride) \ +-{ \ +- LASX_ST_Q_2(in, idx0, idx1, (pdst), stride); \ +- LASX_ST_Q_2(in, idx2, idx3, (pdst) + 2 * stride, stride); \ +-} +- +-/* Description : Dot product of byte vector elements +- * Arguments : Inputs - in0, in1 +- * Outputs - out0, out1 +- * Return Type - unsigned halfword +- * Details : Unsigned byte elements from in0 are iniplied with +- * unsigned byte elements from in0 producing a result +- * twice the size of input i.e. unsigned halfword. +- * Then this iniplication results of adjacent odd-even elements +- * are added together and stored to the out vector +- * (2 unsigned halfword results) +- * Example : see LASX_DP2_W_H +- */ +-#define LASX_DP2_H_BU(in0, in1, out0) \ +-{ \ +- __m256i _tmp0_m ; \ +- \ +- _tmp0_m = __lasx_xvmulwev_h_bu( in0, in1 ); \ +- out0 = __lasx_xvmaddwod_h_bu( _tmp0_m, in0, in1 ); \ +-} +-#define LASX_DP2_H_BU_2(in0, in1, in2, in3, out0, out1) \ +-{ \ +- LASX_DP2_H_BU(in0, in1, out0); \ +- LASX_DP2_H_BU(in2, in3, out1); \ +-} +-#define LASX_DP2_H_BU_4(in0, in1, in2, in3, \ +- in4, in5, in6, in7, \ +- out0, out1, out2, out3) \ +-{ \ +- LASX_DP2_H_BU_2(in0, in1, in0, in1, out0, out1); \ +- LASX_DP2_H_BU_2(in4, in5, in6, in7, out2, out3); \ +-} +- +-/* Description : Dot product of byte vector elements +- * Arguments : Inputs - in0, in1 +- * Outputs - out0, out1 +- * Return Type - signed halfword +- * Details : Signed byte elements from in0 are iniplied with +- * signed byte elements from in0 producing a result +- * twice the size of input i.e. signed halfword. +- * Then this iniplication results of adjacent odd-even elements +- * are added together and stored to the out vector +- * (2 signed halfword results) +- * Example : see LASX_DP2_W_H +- */ +-#define LASX_DP2_H_B(in0, in1, out0) \ +-{ \ +- __m256i _tmp0_m ; \ +- \ +- _tmp0_m = __lasx_xvmulwev_h_b( in0, in1 ); \ +- out0 = __lasx_xvmaddwod_h_b( _tmp0_m, in0, in1 ); \ +-} +-#define LASX_DP2_H_B_2(in0, in1, in2, in3, out0, out1) \ +-{ \ +- LASX_DP2_H_B(in0, in1, out0); \ +- LASX_DP2_H_B(in2, in3, out1); \ +-} +-#define LASX_DP2_H_B_4(in0, in1, in2, in3, \ +- in4, in5, in6, in7, \ +- out0, out1, out2, out3) \ +-{ \ +- LASX_DP2_H_B_2(in0, in1, in2, in3, out0, out1); \ +- LASX_DP2_H_B_2(in4, in5, in6, in7, out2, out3); \ +-} +- +-/* Description : Dot product of half word vector elements +- * Arguments : Inputs - in0, in1, ~ +- * Outputs - out0, out1, ~ +- * Return Type - signed word +- * Details : Signed half word elements from in* are iniplied with +- * signed half word elements from in* producing a result +- * twice the size of input i.e. signed word. +- * Then this iniplication results of adjacent odd-even elements +- * are added together and stored to the out vector. +- * Example : LASX_DP2_W_H(in0, in1, out0) +- * in0: 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8, +- * in0: 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1, +- * out0: 22,38,38,22, 22,38,38,22 +- */ +-#define LASX_DP2_W_H(in0, in1, out0) \ +-{ \ +- __m256i _tmp0_m ; \ +- \ +- _tmp0_m = __lasx_xvmulwev_w_h( in0, in1 ); \ +- out0 = __lasx_xvmaddwod_w_h( _tmp0_m, in0, in1 ); \ +-} +-#define LASX_DP2_W_H_2(in0, in1, in2, in3, out0, out1) \ +-{ \ +- LASX_DP2_W_H(in0, in1, out0); \ +- LASX_DP2_W_H(in2, in3, out1); \ +-} +-#define LASX_DP2_W_H_4(in0, in1, in2, in3, \ +- in4, in5, in6, in7, out0, out1, out2, out3) \ +-{ \ +- LASX_DP2_W_H_2(in0, in1, in2, in3, out0, out1); \ +- LASX_DP2_W_H_2(in4, in5, in6, in7, out2, out3); \ +-} +-#define LASX_DP2_W_H_8(in0, in1, in2, in3, in4, in5, in6, in7, \ +- in8, in9, in10, in11, in12, in13, in14, in15, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_DP2_W_H_4(in0, in1, in2, in3, in4, in5, in6, in7, \ +- out0, out1, out2, out3); \ +- LASX_DP2_W_H_4(in8, in9, in10, in11, in12, in13, in14, in15, \ +- out4, out5, out6, out7); \ +-} +- +-/* Description : Dot product of word vector elements +- * Arguments : Inputs - in0, in1, ~ +- * Outputs - out0, out1, ~ +- * Retrun Type - signed double +- * Details : Signed word elements from in* are iniplied with +- * signed word elements from in* producing a result +- * twice the size of input i.e. signed double word. +- * Then this iniplication results of adjacent odd-even elements +- * are added together and stored to the out vector. +- * Example : see LASX_DP2_W_H +- */ +-#define LASX_DP2_D_W(in0, in1, out0) \ +-{ \ +- __m256i _tmp0_m ; \ +- \ +- _tmp0_m = __lasx_xvmulwev_d_w( in0, in1 ); \ +- out0 = __lasx_xvmaddwod_d_w( _tmp0_m, in0, in1 ); \ +-} +-#define LASX_DP2_D_W_2(in0, in1, in2, in3, out0, out1) \ +-{ \ +- LASX_DP2_D_W(in0, in1, out0); \ +- LASX_DP2_D_W(in2, in3, out1); \ +-} +-#define LASX_DP2_D_W_4(in0, in1, in2, in3, \ +- in4, in5, in6, in7, out0, out1, out2, out3) \ +-{ \ +- LASX_DP2_D_W_2(in0, in1, in2, in3, out0, out1); \ +- LASX_DP2_D_W_2(in4, in5, in6, in7, out2, out3); \ +-} +-#define LASX_DP2_D_W_8(in0, in1, in2, in3, in4, in5, in6, in7, \ +- in8, in9, in10, in11, in12, in13, in14, in15, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_DP2_D_W_4(in0, in1, in2, in3, in4, in5, in6, in7, \ +- out0, out1, out2, out3); \ +- LASX_DP2_D_W_4(in8, in9, in10, in11, in12, in13, in14, in15, \ +- out4, out5, out6, out7); \ +-} +- +-/* Description : Dot product of halfword vector elements +- * Arguments : Inputs - in0, in1 +- * Outputs - out0, out1 +- * Return Type - as per RTYPE +- * Details : Unsigned halfword elements from 'in0' are iniplied with +- * halfword elements from 'in0' producing a result +- * twice the size of input i.e. unsigned word. +- * Multiplication result of adjacent odd-even elements +- * are added together and written to the 'out0' vector +- */ +-#define LASX_DP2_W_HU_H(in0, in1, out0) \ +-{ \ +- __m256i _tmp0_m; \ +- \ +- _tmp0_m = __lasx_xvmulwev_w_hu_h( in0, in1 ); \ +- out0 = __lasx_xvmaddwod_w_hu_h( _tmp0_m, in0, in1 ); \ +-} +- +-#define LASX_DP2_W_HU_H_2(in0, in1, in2, in3, out0, out1) \ +-{ \ +- LASX_DP2_W_HU_H(in0, in1, out0); \ +- LASX_DP2_W_HU_H(in2, in3, out1); \ +-} +- +-#define LASX_DP2_W_HU_H_4(in0, in1, in2, in3, \ +- in4, in5, in6, in7, \ +- out0, out1, out2, out3) \ +-{ \ +- LASX_DP2_W_HU_H_2(in0, in1, in2, in3, out0, out1); \ +- LASX_DP2_W_HU_H_2(in4, in5, in6, in7, out2, out3); \ +-} +- +-/* Description : Dot product & addition of byte vector elements +- * Arguments : Inputs - in0, in1 +- * Outputs - out0, out1 +- * Retrun Type - halfword +- * Details : Signed byte elements from in0 are iniplied with +- * signed byte elements from in0 producing a result +- * twice the size of input i.e. signed halfword. +- * Then this iniplication results of adjacent odd-even elements +- * are added to the out vector +- * (2 signed halfword results) +- * Example : LASX_DP2ADD_H_B(in0, in1, in2, out0) +- * in0: 1,2,3,4, 1,2,3,4, 1,2,3,4, 1,2,3,4, +- * in1: 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8, +- * 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 +- * in2: 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1, +- * 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1 +- * out0: 23,40,41,26, 23,40,41,26, 23,40,41,26, 23,40,41,26 +- */ +-#define LASX_DP2ADD_H_B(in0, in1, in2, out0) \ +-{ \ +- __m256i _tmp0_m; \ +- \ +- _tmp0_m = __lasx_xvmaddwev_h_b( in0, in1, in2 ); \ +- out0 = __lasx_xvmaddwod_h_b( _tmp0_m, in1, in2 ); \ +-} +-#define LASX_DP2ADD_H_B_2(in0, in1, in2, in3, in4, in5, out0, out1) \ +-{ \ +- LASX_DP2ADD_H_B(in0, in1, in2, out0); \ +- LASX_DP2ADD_H_B(in3, in4, in5, out1); \ +-} +-#define LASX_DP2ADD_H_B_4(in0, in1, in2, in3, in4, in5, \ +- in6, in7, in8, in9, in10, in11, \ +- out0, out1, out2, out3) \ +-{ \ +- LASX_DP2ADD_H_B_2(in0, in1, in2, in3, in4, in5, out0, out1); \ +- LASX_DP2ADD_H_B_2(in6, in7, in8, in9, in10, in11, out2, out3); \ +-} +- +-/* Description : Dot product of halfword vector elements +- * Arguments : Inputs - in0, in1 +- * Outputs - out0, out1 +- * Return Type - as per RTYPE +- * Details : Signed halfword elements from 'in0' are iniplied with +- * signed halfword elements from 'in0' producing a result +- * twice the size of input i.e. signed word. +- * Multiplication result of adjacent odd-even elements +- * are added together and written to the 'out0' vector +- */ +-#define LASX_DP2ADD_W_H(in0, in1, in2, out0) \ +-{ \ +- __m256i _tmp0_m; \ +- \ +- _tmp0_m = __lasx_xvmaddwev_w_h( in0, in1, in2 ); \ +- out0 = __lasx_xvmaddwod_w_h( _tmp0_m, in1, in2 ); \ +-} +-#define LASX_DP2ADD_W_H_2(in0, in1, in2, in3, in4, in5, out0, out1 ) \ +-{ \ +- LASX_DP2ADD_W_H(in0, in1, in2, out0); \ +- LASX_DP2ADD_W_H(in3, in4, in5, out1); \ +-} +-#define LASX_DP2ADD_W_H_4(in0, in1, in2, in3, in4, in5, \ +- in6, in7, in8, in9, in10, in11, \ +- out0, out1, out2, out3) \ +-{ \ +- LASX_DP2ADD_W_H_2(in0, in1, in2, in3, in4, in5, out0, out1); \ +- LASX_DP2ADD_W_H_2(in6, in7, in8, in9, in10, in11, out2, out3); \ +-} +- +-/* Description : Dot product of halfword vector elements +- * Arguments : Inputs - in0, in1 +- * Outputs - out0, out1 +- * Return Type - as per RTYPE +- * Details : Unsigned halfword elements from 'in0' are iniplied with +- * unsigned halfword elements from 'in0' producing a result +- * twice the size of input i.e. unsigned word. +- * Multiplication result of adjacent odd-even elements +- * are added together and written to the 'out0' vector +- */ +-#define LASX_DP2ADD_W_HU(in0, in1, in2, out0) \ +-{ \ +- __m256i _tmp0_m; \ +- \ +- _tmp0_m = __lasx_xvmaddwev_w_hu( in0, in1, in2 ); \ +- out0 = __lasx_xvmaddwod_w_hu( _tmp0_m, in1, in2 ); \ +-} +-#define LASX_DP2ADD_W_HU_2(in0, in1, in2, in3, in4, in5, out0, out1) \ +-{ \ +- LASX_DP2ADD_W_HU(in0, in1, in2, out0); \ +- LASX_DP2ADD_W_HU(in3, in4, in5, out1); \ +-} +-#define LASX_DP2ADD_W_HU_4(in0, in1, in2, in3, in4, in5, \ +- in6, in7, in8, in9, in10, in11, \ +- out0, out1, out2, out3) \ +-{ \ +- LASX_DP2ADD_W_HU_2(in0, in1, in2, in3, in4, in5, out0, out1); \ +- LASX_DP2ADD_W_HU_2(in6, in7, in8, in9, in10, in11, out2, out3); \ +-} +- +-/* Description : Dot product of halfword vector elements +- * Arguments : Inputs - in0, in1 +- * Outputs - out0, out1 +- * Return Type - as per RTYPE +- * Details : Unsigned halfword elements from 'in0' are iniplied with +- * halfword elements from 'in0' producing a result +- * twice the size of input i.e. unsigned word. +- * Multiplication result of adjacent odd-even elements +- * are added together and written to the 'out0' vector +- */ +-#define LASX_DP2ADD_W_HU_H(in0, in1, in2, out0) \ +-{ \ +- __m256i _tmp0_m; \ +- \ +- _tmp0_m = __lasx_xvmaddwev_w_hu_h( in0, in1, in2 ); \ +- out0 = __lasx_xvmaddwod_w_hu_h( _tmp0_m, in1, in2 ); \ +-} +- +-#define LASX_DP2ADD_W_HU_H_2(in0, in1, in2, in3, in4, in5, out0, out1) \ +-{ \ +- LASX_DP2ADD_W_HU_H(in0, in1, in2, out0); \ +- LASX_DP2ADD_W_HU_H(in3, in4, in5, out1); \ +-} +- +-#define LASX_DP2ADD_W_HU_H_4(in0, in1, in2, in3, in4, in5, \ +- in6, in7, in8, in9, in10, in11, \ +- out0, out1, out2, out3) \ +-{ \ +- LASX_DP2ADD_W_HU_H_2(in0, in1, in2, in3, in4, in5, out0, out1); \ +- LASX_DP2ADD_W_HU_H_2(in6, in7, in8, in9, in10, in11, out2, out3); \ +-} +- +-/* Description : Vector Unsigned Dot Product and Subtract. +- * Arguments : Inputs - in0, in1 +- * Outputs - out0, out1 +- * Return Type - as per RTYPE +- * Details : Unsigned byte elements from 'in0' are iniplied with +- * unsigned byte elements from 'in0' producing a result +- * twice the size of input i.e. signed word. +- * Multiplication result of adjacent odd-even elements +- * are added together and subtract from double width elements, +- * then written to the 'out0' vector. +- */ +-#define LASX_DP2SUB_H_BU(in0, in1, in2, out0) \ +-{ \ +- __m256i _tmp0_m; \ +- \ +- _tmp0_m = __lasx_xvmulwev_h_bu( in1, in2 ); \ +- _tmp0_m = __lasx_xvmaddwod_h_bu( _tmp0_m, in1, in2 ); \ +- out0 = __lasx_xvsub_h( in0, _tmp0_m ); \ +-} +- +-#define LASX_DP2SUB_H_BU_2(in0, in1, in2, in3, in4, in5, out0, out1) \ +-{ \ +- LASX_DP2SUB_H_BU(in0, in1, in2, out0); \ +- LASX_DP2SUB_H_BU(in0, in1, in2, out0); \ +-} +- +-#define LASX_DP2SUB_H_BU_4(in0, in1, in2, in3, in4, in5, \ +- in6, in7, in8, in9, in10, in11, \ +- out0, out1, out2, out3) \ +-{ \ +- LASX_DP2SUB_H_BU_2(in0, in1, in2, in3, in4, in5, out0, out1); \ +- LASX_DP2SUB_H_BU_2(in6, in7, in8, in9, in10, in11, out2, out3); \ +-} +- +-/* Description : Vector Signed Dot Product and Subtract. +- * Arguments : Inputs - in0, in1 +- * Outputs - out0, out1 +- * Return Type - as per RTYPE +- * Details : Signed halfword elements from 'in0' are iniplied with +- * signed halfword elements from 'in0' producing a result +- * twice the size of input i.e. signed word. +- * Multiplication result of adjacent odd-even elements +- * are added together and subtract from double width elements, +- * then written to the 'out0' vector. +- */ +-#define LASX_DP2SUB_W_H(in0, in1, in2, out0) \ +-{ \ +- __m256i _tmp0_m; \ +- \ +- _tmp0_m = __lasx_xvmulwev_w_h( in1, in2 ); \ +- _tmp0_m = __lasx_xvmaddwod_w_h( _tmp0_m, in1, in2 ); \ +- out0 = __lasx_xvsub_w( in0, _tmp0_m ); \ +-} +- +-#define LASX_DP2SUB_W_H_2(in0, in1, in2, in3, in4, in5, out0, out1) \ +-{ \ +- LASX_DP2SUB_W_H(in0, in1, in2, out0); \ +- LASX_DP2SUB_W_H(in3, in4, in5, out1); \ +-} +- +-#define LASX_DP2SUB_W_H_4(in0, in1, in2, in3, in4, in5, \ +- in6, in7, in8, in9, in10, in11, \ +- out0, out1, out2, out3) \ +-{ \ +- LASX_DP2SUB_W_H_2(in0, in1, in2, in3, in4, in5, out0, out1); \ +- LASX_DP2SUB_W_H_2(in6, in7, in8, in9, in10, in11, out2, out3); \ +-} +- +-/* Description : Dot product of half word vector elements +- * Arguments : Inputs - in0, in1, ~ +- * Outputs - out0, out1, ~ +- * Return Type - signed word +- * Details : Signed half word elements from in* are iniplied with +- * signed half word elements from in* producing a result +- * twice the size of input i.e. signed word. +- * Then this iniplication results of four adjacent elements +- * are added together and stored to the out vector. +- * Example : LASX_DP2_W_H(in0, in0, out0) +- * in0: 3,1,3,0, 0,0,0,1, 0,0,1,-1, 0,0,0,1, +- * in0: -2,1,1,0, 1,0,0,0, 0,0,1,0, 1,0,0,1, +- * out0: -2,0,1,1, +- */ +-#define LASX_DP4_D_H(in0, in1, out0) \ +-{ \ +- __m256i _tmp0_m ; \ +- \ +- _tmp0_m = __lasx_xvmulwev_w_h( in0, in1 ); \ +- _tmp0_m = __lasx_xvmaddwod_w_h( _tmp0_m, in0, in1 ); \ +- out0 = __lasx_xvhaddw_d_w( _tmp0_m, _tmp0_m ); \ +-} +-#define LASX_DP4_D_H_2(in0, in1, in2, in3, out0, out1) \ +-{ \ +- LASX_DP4_D_H(in0, in1, out0); \ +- LASX_DP4_D_H(in2, in3, out1); \ +-} +-#define LASX_DP4_D_H_4(in0, in1, in2, in3, \ +- in4, in5, in6, in7, out0, out1, out2, out3) \ +-{ \ +- LASX_DP4_D_H_2(in0, in1, in2, in3, out0, out1); \ +- LASX_DP4_D_H_2(in4, in5, in6, in7, out2, out3); \ +-} +- +-/* Description : The high half of the vector elements are expanded and +- * added after being doubled +- * Arguments : Inputs - in0, in1, ~ +- * Outputs - out0, out1, ~ +- * Details : The in0 vector and the in1 vector are added after the +- * higher half of the two-fold sign extension ( signed byte +- * to signed half word ) and stored to the out vector. +- * Example : see LASX_ADDWL_W_H_128SV +- */ +-#define LASX_ADDWH_H_B_128SV(in0, in1, out0) \ +-{ \ +- __m256i _tmp0_m, _tmp1_m; \ +- \ +- _tmp0_m = __lasx_xvilvh_b( in0, in0 ); \ +- _tmp1_m = __lasx_xvilvh_b( in1, in1 ); \ +- out0 = __lasx_xvaddwev_h_b( _tmp0_m, _tmp1_m ); \ +-} +-#define LASX_ADDWH_H_B_2_128SV(in0, in1, in2, in3, out0, out1) \ +-{ \ +- LASX_ADDWH_H_B_128SV(in0, in1, out0); \ +- LASX_ADDWH_H_B_128SV(in2, in3, out1); \ +-} +-#define LASX_ADDWH_H_B_4_128SV(in0, in1, in2, in3, \ +- in4, in5, in6, in7, out0, out1, out2, out3) \ +-{ \ +- LASX_ADDWH_H_B_2_128SV(in0, in1, in2, in3, out0, out1); \ +- LASX_ADDWH_H_B_2_128SV(in4, in5, in6, in7, out2, out3); \ +-} +- +-/* Description : The high half of the vector elements are expanded and +- * added after being doubled +- * Arguments : Inputs - in0, in1, ~ +- * Outputs - out0, out1, ~ +- * Details : The in0 vector and the in1 vector are added after the +- * higher half of the two-fold sign extension ( signed half word +- * to signed word ) and stored to the out vector. +- * Example : see LASX_ADDWL_W_H_128SV +- */ +-#define LASX_ADDWH_W_H_128SV(in0, in1, out0) \ +-{ \ +- __m256i _tmp0_m, _tmp1_m; \ +- \ +- _tmp0_m = __lasx_xvilvh_h( in0, in0 ); \ +- _tmp1_m = __lasx_xvilvh_h( in1, in1 ); \ +- out0 = __lasx_xvaddwev_w_h( _tmp0_m, _tmp1_m ); \ +-} +-#define LASX_ADDWH_W_H_2_128SV(in0, in1, in2, in3, out0, out1) \ +-{ \ +- LASX_ADDWH_W_H_128SV(in0, in1, out0); \ +- LASX_ADDWH_W_H_128SV(in2, in3, out1); \ +-} +-#define LASX_ADDWH_W_H_4_128SV(in0, in1, in2, in3, \ +- in4, in5, in6, in7, out0, out1, out2, out3) \ +-{ \ +- LASX_ADDWH_W_H_2_128SV(in0, in1, in2, in3, out0, out1); \ +- LASX_ADDWH_W_H_2_128SV(in4, in5, in6, in7, out2, out3); \ +-} +- +-/* Description : The low half of the vector elements are expanded and +- * added after being doubled +- * Arguments : Inputs - in0, in1, ~ +- * Outputs - out0, out1, ~ +- * Details : The in0 vector and the in1 vector are added after the +- * lower half of the two-fold sign extension ( signed byte +- * to signed half word ) and stored to the out vector. +- * Example : see LASX_ADDWL_W_H_128SV +- */ +-#define LASX_ADDWL_H_B_128SV(in0, in1, out0) \ +-{ \ +- __m256i _tmp0_m, _tmp1_m; \ +- \ +- _tmp0_m = __lasx_xvsllwil_h_b( in0, 0 ); \ +- _tmp1_m = __lasx_xvsllwil_h_b( in1, 0 ); \ +- out0 = __lasx_xvadd_h( _tmp0_m, _tmp1_m ); \ +-} +-#define LASX_ADDWL_H_B_2_128SV(in0, in1, in2, in3, out0, out1) \ +-{ \ +- LASX_ADDWL_H_B_128SV(in0, in1, out0); \ +- LASX_ADDWL_H_B_128SV(in2, in3, out1); \ +-} +-#define LASX_ADDWL_H_B_4_128SV(in0, in1, in2, in3, \ +- in4, in5, in6, in7, out0, out1, out2, out3) \ +-{ \ +- LASX_ADDWL_H_B_2_128SV(in0, in1, in2, in3, out0, out1); \ +- LASX_ADDWL_H_B_2_128SV(in4, in5, in6, in7, out2, out3); \ +-} +- +-/* Description : The low half of the vector elements are expanded and +- * added after being doubled +- * Arguments : Inputs - in0, in1, ~ +- * Outputs - out0, out1, ~ +- * Details : The in0 vector and the in1 vector are added after the +- * lower half of the two-fold sign extension ( signed half word +- * to signed word ) and stored to the out vector. +- * Example : LASX_ADDWL_W_H_128SV(in0, in1, out0) +- * in0 3,0,3,0, 0,0,0,-1, 0,0,1,-1, 0,0,0,1, +- * in1 2,-1,1,2, 1,0,0,0, 1,0,1,0, 1,0,0,1, +- * out0 5,-1,4,2, 1,0,2,-1, +- */ +-#define LASX_ADDWL_W_H_128SV(in0, in1, out0) \ +-{ \ +- __m256i _tmp0_m; \ +- \ +- _tmp0_m = __lasx_xvilvl_h(in1, in0); \ +- out0 = __lasx_xvhaddw_w_h( _tmp0_m, _tmp0_m ); \ +-} +-#define LASX_ADDWL_W_H_2_128SV(in0, in1, in2, in3, out0, out1) \ +-{ \ +- LASX_ADDWL_W_H_128SV(in0, in1, out0); \ +- LASX_ADDWL_W_H_128SV(in2, in3, out1); \ +-} +-#define LASX_ADDWL_W_H_4_128SV(in0, in1, in2, in3, \ +- in4, in5, in6, in7, out0, out1, out2, out3) \ +-{ \ +- LASX_ADDWL_W_H_2_128SV(in0, in1, in2, in3, out0, out1); \ +- LASX_ADDWL_W_H_2_128SV(in4, in5, in6, in7, out2, out3); \ +-} +- +-/* Description : The low half of the vector elements are expanded and +- * added after being doubled +- * Arguments : Inputs - in0, in1, ~ +- * Outputs - out0, out1, ~ +- * Details : The in0 vector and the in1 vector are added after the +- * lower half of the two-fold zero extension ( unsigned byte +- * to unsigned half word ) and stored to the out vector. +- */ +-#define LASX_ADDWL_H_BU_128SV(in0, in1, out0) \ +-{ \ +- __m256i _tmp0_m; \ +- \ +- _tmp0_m = __lasx_xvilvl_b(in1, in0); \ +- out0 = __lasx_xvhaddw_hu_bu( _tmp0_m, _tmp0_m ); \ +-} +-#define LASX_ADDWL_H_BU_2_128SV(in0, in1, in2, in3, out0, out1) \ +-{ \ +- LASX_ADDWL_H_BU_128SV(in0, in1, out0); \ +- LASX_ADDWL_H_BU_128SV(in2, in3, out1); \ +-} +-#define LASX_ADDWL_H_BU_4_128SV(in0, in1, in2, in3, \ +- in4, in5, in6, in7, out0, out1, out2, out3) \ +-{ \ +- LASX_ADDWL_H_BU_2_128SV(in0, in1, in2, in3, out0, out1); \ +- LASX_ADDWL_H_BU_2_128SV(in4, in5, in6, in7, out2, out3); \ +-} +- +-/* Description : The low half of the vector elements are expanded and +- * added after being doubled +- * Arguments : Inputs - in0, in1, ~ +- * Outputs - out0, out1, ~ +- * Details : In1 vector plus in0 vector after double zero extension +- * ( unsigned byte to half word ),add and stored to the out vector. +- * Example : reference to LASX_ADDW_W_W_H_128SV(in0, in1, out0) +- */ +-#define LASX_ADDW_H_H_BU_128SV(in0, in1, out0) \ +-{ \ +- __m256i _tmp1_m; \ +- \ +- _tmp1_m = __lasx_xvsllwil_hu_bu( in1, 0 ); \ +- out0 = __lasx_xvadd_h( in0, _tmp1_m ); \ +-} +-#define LASX_ADDW_H_H_BU_2_128SV(in0, in1, in2, in3, out0, out1) \ +-{ \ +- LASX_ADDW_H_H_BU_128SV(in0, in1, out0); \ +- LASX_ADDW_H_H_BU_128SV(in2, in3, out1); \ +-} +-#define LASX_ADDW_H_H_BU_4_128SV(in0, in1, in2, in3, \ +- in4, in5, in6, in7, out0, out1, out2, out3) \ +-{ \ +- LASX_ADDW_H_H_BU_2_128SV(in0, in1, in2, in3, out0, out1); \ +- LASX_ADDW_H_H_BU_2_128SV(in4, in5, in6, in7, out2, out3); \ +-} +- +-/* Description : The low half of the vector elements are expanded and +- * added after being doubled +- * Arguments : Inputs - in0, in1, ~ +- * Outputs - out0, out1, ~ +- * Details : In1 vector plus in0 vector after double sign extension +- * ( signed half word to word ),add and stored to the out vector. +- * Example : LASX_ADDW_W_W_H_128SV(in0, in1, out0) +- * in0 0,1,0,0, -1,0,0,1, +- * in1 2,-1,1,2, 1,0,0,0, 0,0,1,0, 1,0,0,1, +- * out0 2,0,1,2, -1,0,1,1, +- */ +-#define LASX_ADDW_W_W_H_128SV(in0, in1, out0) \ +-{ \ +- __m256i _tmp1_m; \ +- \ +- _tmp1_m = __lasx_xvsllwil_w_h( in1, 0 ); \ +- out0 = __lasx_xvadd_w( in0, _tmp1_m ); \ +-} +-#define LASX_ADDW_W_W_H_2_128SV(in0, in1, in2, in3, out0, out1) \ +-{ \ +- LASX_ADDW_W_W_H_128SV(in0, in1, out0); \ +- LASX_ADDW_W_W_H_128SV(in2, in3, out1); \ +-} +-#define LASX_ADDW_W_W_H_4_128SV(in0, in1, in2, in3, \ +- in4, in5, in6, in7, out0, out1, out2, out3) \ +-{ \ +- LASX_ADDW_W_W_H_2_128SV(in0, in1, in2, in3, out0, out1); \ +- LASX_ADDW_W_W_H_2_128SV(in4, in5, in6, in7, out2, out3); \ +-} +- +-/* Description : Multiplication and addition calculation after expansion +- * of the lower half of the vector +- * Arguments : Inputs - in0, in1, ~ +- * Outputs - out0, out1, ~ +- * Details : The in1 vector and the in0 vector are multiplied after +- * the lower half of the two-fold sign extension ( signed +- * half word to signed word ) , and the result is added to +- * the vector in0, the stored to the out vector. +- * Example : LASX_MADDWL_W_H_128SV(in0, in1, in2, out0) +- * in0 1,2,3,4, 5,6,7 8 +- * in1 1,2,3,4, 1,2,3,4, 5,6,7,8, 5,6,7,8 +- * in2 200,300,400,500, 2000,3000,4000,5000, +- * -200,-300,-400,-500, -2000,-3000,-4000,-5000 +- * out0 5,-1,4,2, 1,0,2,-1, +- */ +-#define LASX_MADDWL_W_H_128SV(in0, in1, in2, out0) \ +-{ \ +- __m256i _tmp0_m, _tmp1_m; \ +- \ +- _tmp0_m = __lasx_xvsllwil_w_h( in1, 0 ); \ +- _tmp1_m = __lasx_xvsllwil_w_h( in2, 0 ); \ +- _tmp0_m = __lasx_xvmul_w( _tmp0_m, _tmp1_m ); \ +- out0 = __lasx_xvadd_w( _tmp0_m, in0 ); \ +-} +-#define LASX_MADDWL_W_H_2_128SV(in0, in1, in2, in3, in4, in5, out0, out1) \ +-{ \ +- LASX_MADDWL_W_H_128SV(in0, in1, in2, out0); \ +- LASX_MADDWL_W_H_128SV(in3, in4, in5, out1); \ +-} +-#define LASX_MADDWL_W_H_4_128SV(in0, in1, in2, in3, in4, in5, \ +- in6, in7, in8, in9, in10, in11, \ +- out0, out1, out2, out3) \ +-{ \ +- LASX_MADDWL_W_H_2_128SV(in0, in1, in2, in3, in4, in5, out0, out1); \ +- LASX_MADDWL_W_H_2_128SV(in6, in7, in8, in9, in10, in11, out2, out3); \ +-} +- +-/* Description : Multiplication and addition calculation after expansion +- * of the higher half of the vector +- * Arguments : Inputs - in0, in1, ~ +- * Outputs - out0, out1, ~ +- * Details : The in1 vector and the in0 vector are multiplied after +- * the higher half of the two-fold sign extension ( signed +- * half word to signed word ) , and the result is added to +- * the vector in0, the stored to the out vector. +- * Example : see LASX_MADDWL_W_H_128SV +- */ +-#define LASX_MADDWH_W_H_128SV(in0, in1, in2, out0) \ +-{ \ +- __m256i _tmp0_m, _tmp1_m; \ +- \ +- _tmp0_m = __lasx_xvilvh_h( in1, in1 ); \ +- _tmp1_m = __lasx_xvilvh_h( in2, in2 ); \ +- _tmp0_m = __lasx_xvmulwev_w_h( _tmp0_m, _tmp1_m ); \ +- out0 = __lasx_xvadd_w( _tmp0_m, in0 ); \ +-} +-#define LASX_MADDWH_W_H_2_128SV(in0, in1, in2, in3, in4, in5, out0, out1) \ +-{ \ +- LASX_MADDWH_W_H_128SV(in0, in1, in2, out0); \ +- LASX_MADDWH_W_H_128SV(in3, in4, in5, out1); \ +-} +-#define LASX_MADDWH_W_H_4_128SV(in0, in1, in2, in3, in4, in5, \ +- in6, in7, in8, in9, in10, in11, \ +- out0, out1, out2, out3) \ +-{ \ +- LASX_MADDWH_W_H_2_128SV(in0, in1, in2, in3, in4, in5, out0, out1); \ +- LASX_MADDWH_W_H_2_128SV(in6, in7, in8, in9, in10, in11, out2, out3); \ +-} +- +-/* Description : Multiplication calculation after expansion +- * of the lower half of the vector +- * Arguments : Inputs - in0, in1, ~ +- * Outputs - out0, out1, ~ +- * Details : The in1 vector and the in0 vector are multiplied after +- * the lower half of the two-fold sign extension ( signed +- * half word to signed word ) , the stored to the out vector. +- * Example : LASX_MULWL_W_H_128SV(in0, in1, out0) +- * in0 3,-1,3,0, 0,0,0,-1, 0,0,1,-1, 0,0,0,1, +- * in1 2,-1,1,2, 1,0,0,0, 0,0,1,0, 1,0,0,1, +- * out0 6,1,3,0, 0,0,1,0, +- */ +-#define LASX_MULWL_W_H_128SV(in0, in1, out0) \ +-{ \ +- __m256i _tmp0_m, _tmp1_m; \ +- \ +- _tmp0_m = __lasx_xvsllwil_w_h( in0, 0 ); \ +- _tmp1_m = __lasx_xvsllwil_w_h( in1, 0 ); \ +- out0 = __lasx_xvmul_w( _tmp0_m, _tmp1_m ); \ +-} +-#define LASX_MULWL_W_H_2_128SV(in0, in1, in2, in3, out0, out1) \ +-{ \ +- LASX_MULWL_W_H_128SV(in0, in1, out0); \ +- LASX_MULWL_W_H_128SV(in2, in3, out1); \ +-} +-#define LASX_MULWL_W_H_4_128SV(in0, in1, in2, in3, \ +- in4, in5, in6, in7, \ +- out0, out1, out2, out3) \ +-{ \ +- LASX_MULWL_W_H_2_128SV(in0, in1, in2, in3, out0, out1); \ +- LASX_MULWL_W_H_2_128SV(in4, in5, in6, in7, out2, out3); \ +-} +- +-/* Description : Multiplication calculation after expansion +- * of the lower half of the vector +- * Arguments : Inputs - in0, in1, ~ +- * Outputs - out0, out1, ~ +- * Details : The in1 vector and the in0 vector are multiplied after +- * the lower half of the two-fold sign extension ( signed +- * half word to signed word ) , the stored to the out vector. +- * Example : see LASX_MULWL_W_H_128SV +- */ +-#define LASX_MULWH_W_H_128SV(in0, in1, out0) \ +-{ \ +- __m256i _tmp0_m, _tmp1_m; \ +- \ +- _tmp0_m = __lasx_xvilvh_h( in0, in0 ); \ +- _tmp1_m = __lasx_xvilvh_h( in1, in1 ); \ +- out0 = __lasx_xvmulwev_w_h( _tmp0_m, _tmp1_m ); \ +-} +-#define LASX_MULWH_W_H_2_128SV(in0, in1, in2, in3, out0, out1) \ +-{ \ +- LASX_MULWH_W_H_128SV(in0, in1, out0); \ +- LASX_MULWH_W_H_128SV(in2, in3, out1); \ +-} +-#define LASX_MULWH_W_H_4_128SV(in0, in1, in2, in3, \ +- in4, in5, in6, in7, \ +- out0, out1, out2, out3) \ +-{ \ +- LASX_MULWH_W_H_2_128SV(in0, in1, in2, in3, out0, out1); \ +- LASX_MULWH_W_H_2_128SV(in4, in5, in6, in7, out2, out3); \ +-} +- +-/* Description : The low half of the vector elements are expanded and +- * added after being doubled +- * Arguments : Inputs - in0, in1, ~ +- * Outputs - out0, out1, ~ +- * Details : The in1 vector add the in0 vector after the +- * lower half of the two-fold zero extension ( unsigned byte +- * to unsigned half word ) and stored to the out vector. +- */ +-#define LASX_SADDW_HU_HU_BU_128SV(in0, in1, out0) \ +-{ \ +- __m256i _tmp1_m; \ +- __m256i _zero_m = { 0 }; \ +- \ +- _tmp1_m = __lasx_xvilvl_b( _zero_m, in1 ); \ +- out0 = __lasx_xvsadd_hu( in0, _tmp1_m ); \ +-} +-#define LASX_SADDW_HU_HU_BU_2_128SV(in0, in1, in2, in3, out0, out1) \ +-{ \ +- LASX_SADDW_HU_HU_BU_128SV(in0, in1, out0); \ +- LASX_SADDW_HU_HU_BU_128SV(in2, in3, out1); \ +-} +-#define LASX_SADDW_HU_HU_BU_4_128SV(in0, in1, in2, in3, \ +- in4, in5, in6, in7, \ +- out0, out1, out2, out3) \ +-{ \ +- LASX_SADDW_HU_HU_BU_2_128SV(in0, in1, in2, in3, out0, out1); \ +- LASX_SADDW_HU_HU_BU_2_128SV(in4, in5, in6, in7, out2, out3); \ +-} +- +-/* Description : Low 8-bit vector elements unsigned extension to halfword +- * Arguments : Inputs - in0, in1, ~ +- * Outputs - out0, out1, ~ +- * Details : Low 8-bit elements from in0 unsigned extension to halfword, +- * written to output vector out0. Similar for in1. +- * Example : See LASX_UNPCK_L_W_H(in0, out0) +- */ +-#define LASX_UNPCK_L_HU_BU(in0, out0) \ +-{ \ +- out0 = __lasx_vext2xv_hu_bu(in0); \ +-} +- +-#define LASX_UNPCK_L_HU_BU_2(in0, in1, out0, out1) \ +-{ \ +- LASX_UNPCK_L_HU_BU(in0, out0); \ +- LASX_UNPCK_L_HU_BU(in1, out1); \ +-} +- +-#define LASX_UNPCK_L_HU_BU_4(in0, in1, in2, in3, out0, out1, out2, out3) \ +-{ \ +- LASX_UNPCK_L_HU_BU_2(in0, in1, out0, out1); \ +- LASX_UNPCK_L_HU_BU_2(in2, in3, out2, out3); \ +-} +- +-#define LASX_UNPCK_L_HU_BU_8(in0, in1, in2, in3, in4, in5, in6, in7, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_UNPCK_L_HU_BU_4(in0, in1, in2, in3, out0, out1, out2, out3); \ +- LASX_UNPCK_L_HU_BU_4(in4, in5, in6, in7, out4, out5, out6, out7); \ +-} +- +-/* Description : Low 8-bit vector elements unsigned extension to word +- * Arguments : Inputs - in0, in1, ~ +- * Outputs - out0, out1, ~ +- * Details : Low 8-bit elements from in0 unsigned extension to word, +- * written to output vector out0. Similar for in1. +- * Example : See LASX_UNPCK_L_W_H(in0, out0) +- */ +-#define LASX_UNPCK_L_WU_BU(in0, out0) \ +-{ \ +- out0 = __lasx_vext2xv_wu_bu(in0); \ +-} +- +-#define LASX_UNPCK_L_WU_BU_2(in0, in1, out0, out1) \ +-{ \ +- LASX_UNPCK_L_WU_BU(in0, out0); \ +- LASX_UNPCK_L_WU_BU(in1, out1); \ +-} +- +-#define LASX_UNPCK_L_WU_BU_4(in0, in1, in2, in3, out0, out1, out2, out3) \ +-{ \ +- LASX_UNPCK_L_WU_BU_2(in0, in1, out0, out1); \ +- LASX_UNPCK_L_WU_BU_2(in2, in3, out2, out3); \ +-} +- +-#define LASX_UNPCK_L_WU_BU_8(in0, in1, in2, in3, in4, in5, in6, in7, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_UNPCK_L_WU_BU_4(in0, in1, in2, in3, out0, out1, out2, out3); \ +- LASX_UNPCK_L_WU_BU_4(in4, in5, in6, in7, out4, out5, out6, out7); \ +-} +- +-/* Description : Low 8-bit vector elements signed extension to halfword +- * Arguments : Inputs - in0, in1, ~ +- * Outputs - out0, out1, ~ +- * Details : Low 8-bit elements from in0 signed extension to halfword, +- * written to output vector out0. Similar for in1. +- * Example : See LASX_UNPCK_L_W_H(in0, out0) +- */ +-#define LASX_UNPCK_L_H_B(in0, out0) \ +-{ \ +- out0 = __lasx_vext2xv_h_b(in0); \ +-} +- +-#define LASX_UNPCK_L_H_B_2(in0, in1, out0, out1) \ +-{ \ +- LASX_UNPCK_L_H_B(in0, out0); \ +- LASX_UNPCK_L_H_B(in1, out1); \ +-} +- +-#define LASX_UNPCK_L_H_B_4(in0, in1, in2, in3, out0, out1, out2, out3) \ +-{ \ +- LASX_UNPCK_L_H_B_2(in0, in1, out0, out1); \ +- LASX_UNPCK_L_H_B_2(in2, in3, out2, out3); \ +-} +- +-/* Description : Low halfword vector elements signed extension to word +- * Arguments : Inputs - in0, in1, ~ +- * Outputs - out0, out1, ~ +- * Details : Low halfword elements from in0 signed extension to +- * word, written to output vector out0. Similar for in1. +- * Similar for other pairs. +- * Example : LASX_UNPCK_L_W_H(in0, out0) +- * in0 : 3, 0, 3, 0, 0, 0, 0, -1, 0, 0, 1, 1, 0, 0, 0, 1 +- * out0 : 3, 0, 3, 0, 0, 0, 0, -1 +- */ +-#define LASX_UNPCK_L_W_H(in0, out0) \ +-{ \ +- out0 = __lasx_vext2xv_w_h(in0); \ +-} +- +-#define LASX_UNPCK_L_W_H_2(in0, in1, out0, out1) \ +-{ \ +- LASX_UNPCK_L_W_H(in0, out0); \ +- LASX_UNPCK_L_W_H(in1, out1); \ +-} +- +-#define LASX_UNPCK_L_W_H_4(in0, in1, in2, in3, out0, out1, out2, out3) \ +-{ \ +- LASX_UNPCK_L_W_H_2(in0, in1, out0, out1); \ +- LASX_UNPCK_L_W_H_2(in2, in3, out2, out3); \ +-} +- +-#define LASX_UNPCK_L_W_H_8(in0, in1, in2, in3, in4, in5, in6, in7, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_UNPCK_L_W_H_4(in0, in1, in2, in3, out0, out1, out2, out3); \ +- LASX_UNPCK_L_W_H_4(in4, in5, in6, in7, out4, out5, out6, out7); \ +-} +- +-/* Description : Interleave odd byte elements from vectors. +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out, out0, ~ +- * Details : Odd byte elements of in_h and odd byte +- * elements of in_l are interleaved and copied to out. +- * Example : See LASX_ILVOD_W(in_h, in_l, out) +- */ +-#define LASX_ILVOD_B(in_h, in_l, out) \ +-{ \ +- out = __lasx_xvpackod_b((in_h, in1_l); \ +-} +- +-#define LASX_ILVOD_B_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_ILVOD_B(in0_h, in0_l, out0); \ +- LASX_ILVOD_B(in1_h, in1_l, out1); \ +-} +- +-#define LASX_ILVOD_B_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0, out1, out2, out3) \ +-{ \ +- LASX_ILVOD_B_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_ILVOD_B_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-/* Description : Interleave odd half word elements from vectors. +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out, out0, ~ +- * Details : Odd half word elements of in_h and odd half word +- * elements of in_l are interleaved and copied to out. +- * Example : See LASX_ILVOD_W(in_h, in_l, out) +- */ +-#define LASX_ILVOD_H(in_h, in_l, out) \ +-{ \ +- out = __lasx_xvpackod_h(in_h, in_l); \ +-} +- +-#define LASX_ILVOD_H_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_ILVOD_H(in0_h, in0_l, out0); \ +- LASX_ILVOD_H(in1_h, in1_l, out1); \ +-} +- +-#define LASX_ILVOD_H_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0, out1, out2, out3) \ +-{ \ +- LASX_ILVOD_H_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_ILVOD_H_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-/* Description : Interleave odd word elements from vectors. +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out, out0, ~ +- * Details : Odd word elements of in_h and odd word +- * elements of in_l are interleaved and copied to out. +- * Example : See LASX_ILVOD_W(in_h, in_l, out) +- * in_h : 1, 2, 3, 4, 5, 6, 7, 8 +- * in_l : 1, 0, 3, 1, 1, 2, 3, 4 +- * out : 0, 2, 1, 4, 2, 6, 4, 8 +- */ +-#define LASX_ILVOD_W(in_h, in_l, out) \ +-{ \ +- out = __lasx_xvpackod_w(in_h, in_l); \ +-} +- +-#define LASX_ILVOD_W_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_ILVOD_W(in0_h, in0_l, out0); \ +- LASX_ILVOD_W(in1_h, in1_l, out1); \ +-} +- +-#define LASX_ILVOD_W_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0, out1, out2, out3) \ +-{ \ +- LASX_ILVOD_W_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_ILVOD_W_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-/* Description : Interleave odd double word elements from vectors. +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out, out0, ~ +- * Details : Odd double word elements of in_h and odd double word +- * elements of in_l are interleaved and copied to out. +- * Example : LASX_ILVOD_W(in_h, in_l, out) +- */ +-#define LASX_ILVOD_D(in_h, in_l, out) \ +-{ \ +- out = __lasx_xvpackod_d(in_h, in_l); \ +-} +- +-#define LASX_ILVOD_D_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_ILVOD_D(in0_h, in0_l, out0); \ +- LASX_ILVOD_D(in1_h, in1_l, out1); \ +-} +- +-#define LASX_ILVOD_D_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0, out1, out2, out3) \ +-{ \ +- LASX_ILVOD_D_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_ILVOD_D_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-/* Description : Interleave right half of byte elements from vectors +- * Arguments : Inputs - in0_h, in0_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Low half of byte elements of in_l and high half of byte +- * elements of in_h are interleaved and copied to out0. +- * Similar for other pairs +- * Example : See LASX_ILVL_W(in_h, in_l, out0) +- */ +-#define LASX_ILVL_B(in_h, in_l, out0) \ +-{ \ +- __m256i tmp0, tmp1; \ +- tmp0 = __lasx_xvilvl_b(in_h, in_l); \ +- tmp1 = __lasx_xvilvh_b(in_h, in_l); \ +- out0 = __lasx_xvpermi_q(tmp0, tmp1, 0x02); \ +-} +- +-#define LASX_ILVL_B_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_ILVL_B(in0_h, in0_l, out0) \ +- LASX_ILVL_B(in1_h, in1_l, out1) \ +-} +- +-#define LASX_ILVL_B_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_ILVL_B_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +- LASX_ILVL_B_2(in2_h, in2_l, in3_h, in3_l, out2, out3) \ +-} +- +-#define LASX_ILVL_B_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_ILVL_B_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0, out1, out2, out3); \ +- LASX_ILVL_B_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4, out5, out6, out7); \ +-} +- +-/* Description : Interleave low half of byte elements from vectors +- * (128-bit symmetry version) +- * Arguments : Inputs - in0_h, in0_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Low half of byte elements of in_l and low half of byte +- * elements of in_h are interleaved and copied to out0. +- * Similar for other pairs +- * Example : See LASX_ILVL_W_128SV(in_h, in_l, out0) +- */ +-#define LASX_ILVL_B_128SV(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvilvl_b(in_h, in_l); \ +-} +- +-#define LASX_ILVL_B_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_ILVL_B_128SV(in0_h, in0_l, out0); \ +- LASX_ILVL_B_128SV(in1_h, in1_l, out1); \ +-} +- +-#define LASX_ILVL_B_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_ILVL_B_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_ILVL_B_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-#define LASX_ILVL_B_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_ILVL_B_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0, out1, out2, out3); \ +- LASX_ILVL_B_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4, out5, out6, out7); \ +-} +- +-/* Description : Interleave low half of half word elements from vectors +- * Arguments : Inputs - in0_h, in0_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Low half of half word elements of in_l and right half of +- * half word elements of in_h are interleaved and copied to +- * out0. Similar for other pairs. +- * Example : See LASX_ILVL_W(in_h, in_l, out0) +- */ +-#define LASX_ILVL_H(in_h, in_l, out0) \ +-{ \ +- __m256i tmp0, tmp1; \ +- tmp0 = __lasx_xvilvl_h(in_h, in_l); \ +- tmp1 = __lasx_xvilvh_h(in_h, in_l); \ +- out0 = __lasx_xvpermi_q(tmp0, tmp1, 0x02); \ +-} +- +-#define LASX_ILVL_H_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_ILVL_H(in0_h, in0_l, out0) \ +- LASX_ILVL_H(in1_h, in1_l, out1) \ +-} +- +-#define LASX_ILVL_H_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_ILVL_H_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +- LASX_ILVL_H_2(in2_h, in2_l, in3_h, in3_l, out2, out3) \ +-} +- +-#define LASX_ILVL_H_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_ILVL_H_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0, out1, out2, out3); \ +- LASX_ILVL_H_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4, out5, out6, out7); \ +-} +- +-/* Description : Interleave low half of half word elements from vectors +- * (128-bit symmetry version) +- * Arguments : Inputs - in0_h, in0_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Low half of half word elements of in_l and low half of half +- * word elements of in_h are interleaved and copied to +- * out0. Similar for other pairs. +- * Example : See LASX_ILVL_W_128SV(in_h, in_l, out0) +- */ +-#define LASX_ILVL_H_128SV(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvilvl_h(in_h, in_l); \ +-} +- +-#define LASX_ILVL_H_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_ILVL_H_128SV(in0_h, in0_l, out0); \ +- LASX_ILVL_H_128SV(in1_h, in1_l, out1); \ +-} +- +-#define LASX_ILVL_H_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_ILVL_H_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_ILVL_H_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-#define LASX_ILVL_H_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_ILVL_H_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0, out1, out2, out3); \ +- LASX_ILVL_H_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4, out5, out6, out7); \ +-} +- +-/* Description : Interleave low half of word elements from vectors +- * Arguments : Inputs - in0_h, in0_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Low half of halfword elements of in_l and low half of word +- * elements of in_h are interleaved and copied to out0. +- * Similar for other pairs +- * Example : LASX_ILVL_W(in_h, in_l, out0) +- * in_h : 0, 1, 0, 1, 0, 1, 0, 1 +- * in_l : 1, 2, 3, 4, 5, 6, 7, 8 +- * out0 : 1, 0, 2, 1, 3, 0, 4, 1 +- */ +-#define LASX_ILVL_W(in_h, in_l, out0) \ +-{ \ +- __m256i tmp0, tmp1; \ +- tmp0 = __lasx_xvilvl_w(in_h, in_l); \ +- tmp1 = __lasx_xvilvh_w(in_h, in_l); \ +- out0 = __lasx_xvpermi_q(tmp0, tmp1, 0x02); \ +-} +- +-#define LASX_ILVL_W_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_ILVL_W(in0_h, in0_l, out0) \ +- LASX_ILVL_W(in1_h, in1_l, out1) \ +-} +- +-#define LASX_ILVL_W_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_ILVL_W_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +- LASX_ILVL_W_2(in2_h, in2_l, in3_h, in3_l, out2, out3) \ +-} +- +-#define LASX_ILVL_W_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_ILVL_W_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0, out1, out2, out3); \ +- LASX_ILVL_W_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4, out5, out6, out7); \ +-} +- +-/* Description : Interleave low half of word elements from vectors +- * (128-bit symmetry version) +- * Arguments : Inputs - in0_h, in0_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Low half of halfword elements of in_l and low half of word +- * elements of in_h are interleaved and copied to out0. +- * Similar for other pairs +- * Example : LASX_ILVL_W_128SV(in_h, in_l, out0) +- * in_h : 0, 1, 0, 1, 0, 1, 0, 1 +- * in_l : 1, 2, 3, 4, 5, 6, 7, 8 +- * out0 : 1, 0, 2, 1, 5, 0, 6, 1 +- */ +-#define LASX_ILVL_W_128SV(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvilvl_w(in_h, in_l); \ +-} +- +-#define LASX_ILVL_W_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_ILVL_W_128SV(in0_h, in0_l, out0); \ +- LASX_ILVL_W_128SV(in1_h, in1_l, out1); \ +-} +- +-#define LASX_ILVL_W_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_ILVL_W_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_ILVL_W_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-#define LASX_ILVL_W_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_ILVL_W_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0, out1, out2, out3); \ +- LASX_ILVL_W_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4, out5, out6, out7); \ +-} +- +-/* Description : Interleave low half of double word elements from vectors +- * Arguments : Inputs - in0_h, in0_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Low half of double word elements of in_l and low half of +- * double word elements of in_h are interleaved and copied to out0. +- * Similar for other pairs +- * Example : See LASX_ILVL_W(in_h, in_l, out0) +- */ +-#define LASX_ILVL_D(in_h, in_l, out0) \ +-{ \ +- __m256i tmp0, tmp1; \ +- tmp0 = __lasx_xvilvl_d(in_h, in_l); \ +- tmp1 = __lasx_xvilvh_d(in_h, in_l); \ +- out0 = __lasx_xvpermi_q(tmp0, tmp1, 0x02); \ +-} +- +-#define LASX_ILVL_D_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_ILVL_D(in0_h, in0_l, out0) \ +- LASX_ILVL_D(in1_h, in1_l, out1) \ +-} +- +-#define LASX_ILVL_D_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_ILVL_D_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +- LASX_ILVL_D_2(in2_h, in2_l, in3_h, in3_l, out2, out3) \ +-} +- +-#define LASX_ILVL_D_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_ILVL_D_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0, out1, out2, out3); \ +- LASX_ILVL_D_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4, out5, out6, out7); \ +-} +- +-/* Description : Interleave right half of double word elements from vectors +- * (128-bit symmetry version) +- * Arguments : Inputs - in0_h, in0_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Right half of double word elements of in_l and right half of +- * double word elements of in_h are interleaved and copied to out0. +- * Similar for other pairs. +- * Example : See LASX_ILVL_W_128SV(in_h, in_l, out0) +- */ +-#define LASX_ILVL_D_128SV(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvilvl_d(in_h, in_l); \ +-} +- +-#define LASX_ILVL_D_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_ILVL_D_128SV(in0_h, in0_l, out0); \ +- LASX_ILVL_D_128SV(in1_h, in1_l, out1); \ +-} +- +-#define LASX_ILVL_D_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_ILVL_D_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_ILVL_D_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-#define LASX_ILVL_D_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_ILVL_D_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0, out1, out2, out3); \ +- LASX_ILVL_D_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4, out5, out6, out7); \ +-} +- +-/* Description : Interleave high half of byte elements from vectors +- * Arguments : Inputs - in0_h, in0_l, ~ +- * Outputs - out0, out1, ~ +- * Details : High half of byte elements of in_l and high half of +- * byte +- * elements of in_h are interleaved and copied to out0. +- * Similar for other pairs. +- * Example : see LASX_ILVH_W(in_h, in_l, out0) +- */ +-#define LASX_ILVH_B(in_h, in_l, out0) \ +-{ \ +- __m256i tmp0, tmp1; \ +- tmp0 = __lasx_xvilvl_b(in_h, in_l); \ +- tmp1 = __lasx_xvilvh_b(in_h, in_l); \ +- out0 = __lasx_xvpermi_q(tmp0, tmp1, 0x13); \ +-} +- +-#define LASX_ILVH_B_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_ILVH_B(in0_h, in0_l, out0) \ +- LASX_ILVH_B(in1_h, in1_l, out1) \ +-} +- +-#define LASX_ILVH_B_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_ILVH_B_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +- LASX_ILVH_B_2(in2_h, in2_l, in3_h, in3_l, out2, out3) \ +-} +- +-#define LASX_ILVH_B_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_ILVH_B_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0, out1, out2, out3); \ +- LASX_ILVH_B_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4, out5, out6, out7); \ +-} +- +-/* Description : Interleave high half of byte elements from vectors +- * (128-bit symmetry version) +- * Arguments : Inputs - in0_h, in0_l, ~ +- * Outputs - out0, out1, ~ +- * Details : High half of byte elements of in_l and high half +- * of byte elements of in_h are interleaved and copied +- * to out0. +- * Similar for other pairs. +- * Example : see LASX_ILVH_W_128SV(in_h, in_l, out0) +- */ +-#define LASX_ILVH_B_128SV(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvilvh_b(in_h, in_l); \ +-} +- +-#define LASX_ILVH_B_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_ILVH_B_128SV(in0_h, in0_l, out0); \ +- LASX_ILVH_B_128SV(in1_h, in1_l, out1); \ +-} +- +-#define LASX_ILVH_B_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_ILVH_B_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_ILVH_B_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-#define LASX_ILVH_B_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_ILVH_B_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0, out1, out2, out3); \ +- LASX_ILVH_B_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4, out5, out6, out7); \ +-} +- +-/* Description : Interleave high half of half word elements from vectors +- * Arguments : Inputs - in0_h, in0_l, ~ +- * Outputs - out0, out1, ~ +- * Details : High half of half word elements of in_l and high half of +- * half word +- * elements of in_h are interleaved and copied to out0. +- * Similar for other pairs. +- * Example : see LASX_ILVH_W(in_h, in_l, out0) +- */ +-#define LASX_ILVH_H(in_h, in_l, out0) \ +-{ \ +- __m256i tmp0, tmp1; \ +- tmp0 = __lasx_xvilvl_h(in_h, in_l); \ +- tmp1 = __lasx_xvilvh_h(in_h, in_l); \ +- out0 = __lasx_xvpermi_q(tmp0, tmp1, 0x13); \ +-} +- +-#define LASX_ILVH_H_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_ILVH_H(in0_h, in0_l, out0) \ +- LASX_ILVH_H(in1_h, in1_l, out1) \ +-} +- +-#define LASX_ILVH_H_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_ILVH_H_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +- LASX_ILVH_H_2(in2_h, in2_l, in3_h, in3_l, out2, out3) \ +-} +- +-#define LASX_ILVH_H_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_ILVH_H_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0, out1, out2, out3); \ +- LASX_ILVH_H_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4, out5, out6, out7); \ +-} +- +-/* Description : Interleave high half of half word elements from vectors +- * (128-bit symmetry version) +- * Arguments : Inputs - in0_h, in0_l, ~ +- * Outputs - out0, out1, ~ +- * Details : High half of half word elements of in_l and high half +- * of half word elements of in_h are interleaved and copied +- * to out0. +- * Similar for other pairs. +- * Example : see LASX_ILVH_W_128SV(in_h, in_l, out0) +- */ +-#define LASX_ILVH_H_128SV(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvilvh_h(in_h, in_l); \ +-} +- +-#define LASX_ILVH_H_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_ILVH_H_128SV(in0_h, in0_l, out0); \ +- LASX_ILVH_H_128SV(in1_h, in1_l, out1); \ +-} +- +-#define LASX_ILVH_H_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_ILVH_H_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_ILVH_H_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-#define LASX_ILVH_H_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_ILVH_H_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0, out1, out2, out3); \ +- LASX_ILVH_H_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4, out5, out6, out7); \ +-} +- +-/* Description : Interleave high half of word elements from vectors +- * Arguments : Inputs - in0_h, in0_l, ~ +- * Outputs - out0, out1, ~ +- * Details : High half of word elements of in_l and high half of +- * word elements of in_h are interleaved and copied to +- * out0. +- * Similar for other pairs. +- * Example : LASX_ILVH_W(in_h, in_l, out0) +- * in_h:-1, -2, -3, -4, -5, -6, -7, -8 +- * in_l: 1, 2, 3, 4, 5, 6, 7, 8 +- * out0: 5, -5, 6, -6, 7, -7, 8, -8 +- */ +-#define LASX_ILVH_W(in_h, in_l, out0) \ +-{ \ +- __m256i tmp0, tmp1; \ +- tmp0 = __lasx_xvilvl_w(in_h, in_l); \ +- tmp1 = __lasx_xvilvh_w(in_h, in_l); \ +- out0 = __lasx_xvpermi_q(tmp0, tmp1, 0x13); \ +-} +- +-#define LASX_ILVH_W_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_ILVH_W(in0_h, in0_l, out0) \ +- LASX_ILVH_W(in1_h, in1_l, out1) \ +-} +- +-#define LASX_ILVH_W_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_ILVH_W_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +- LASX_ILVH_W_2(in2_h, in2_l, in3_h, in3_l, out2, out3) \ +-} +- +-#define LASX_ILVH_W_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_ILVH_W_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0, out1, out2, out3); \ +- LASX_ILVH_W_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4, out5, out6, out7); \ +-} +- +-/* Description : Interleave high half of word elements from vectors +- * (128-bit symmetry version) +- * Arguments : Inputs - in0_h, in0_l, ~ +- * Outputs - out0, out1, ~ +- * Details : High half of word elements of every 128-bit of in_l +- * and high half of word elements of every 128-bit of +- * in_h are interleaved and copied to out0. +- * Similar for other pairs. +- * Example : LASX_ILVH_W_128SV(in_h, in_l, out0) +- * in_h:-1, -2, -3, -4, -5, -6, -7, -8 +- * in_l: 1, 2, 3, 4, 5, 6, 7, 8 +- * out0: 3, -3, 4, -4, 7, -7, 8, -8* +- */ +-#define LASX_ILVH_W_128SV(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvilvh_w(in_h, in_l); \ +-} +- +-#define LASX_ILVH_W_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_ILVH_W_128SV(in0_h, in0_l, out0); \ +- LASX_ILVH_W_128SV(in1_h, in1_l, out1); \ +-} +- +-#define LASX_ILVH_W_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_ILVH_W_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_ILVH_W_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-#define LASX_ILVH_W_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_ILVH_W_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0, out1, out2, out3); \ +- LASX_ILVH_W_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4, out5, out6, out7); \ +-} +- +-/* Description : Interleave high half of double word elements from vectors +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out0, out1, ~ +- :* Details : High half of double word elements of in_l and high half of +- * double word elements of in_h are interleaved and copied to +- * out0. +- * Similar for other pairs. +- * Example : see LASX_ILVH_W(in_h, in_l, out0) +- */ +-#define LASX_ILVH_D(in_h, in_l, out0) \ +-{ \ +- __m256i tmp0, tmp1; \ +- tmp0 = __lasx_xvilvl_d(in_h, in_l); \ +- tmp1 = __lasx_xvilvh_d(in_h, in_l); \ +- out0 = __lasx_xvpermi_q(tmp0, tmp1, 0x13); \ +-} +- +-#define LASX_ILVH_D_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_ILVH_D(in0_h, in0_l, out0) \ +- LASX_ILVH_D(in1_h, in1_l, out1) \ +-} +- +-#define LASX_ILVH_D_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_ILVH_D_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +- LASX_ILVH_D_2(in2_h, in2_l, in3_h, in3_l, out2, out3) \ +-} +- +-#define LASX_ILVH_D_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_ILVH_D_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0, out1, out2, out3); \ +- LASX_ILVH_D_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4, out5, out6, out7); \ +-} +- +-/* Description : Interleave high half of double word elements from vectors +- * (128-bit symmetry version) +- * Arguments : Inputs - in0, in1, ~ +- * Outputs - out0, out1, ~ +- * Details : High half of double word elements of every 128-bit in_l and +- * high half of double word elements of every 128-bit in_h are +- * interleaved and copied to out0. +- * Similar for other pairs. +- * Example : see LASX_ILVH_W_128SV(in_h, in_l, out0) +- */ +-#define LASX_ILVH_D_128SV(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvilvh_d(in_h, in_l); \ +-} +- +-#define LASX_ILVH_D_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_ILVH_D_128SV(in0_h, in0_l, out0); \ +- LASX_ILVH_D_128SV(in1_h, in1_l, out1); \ +-} +- +-#define LASX_ILVH_D_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_ILVH_D_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_ILVH_D_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-#define LASX_ILVH_D_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_ILVH_D_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0, out1, out2, out3); \ +- LASX_ILVH_D_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4, out5, out6, out7); \ +-} +- +-/* Description : Interleave byte elements from vectors +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out_h, out_l, ~ +- * Details : Low half of byte elements of in_l and low half of byte +- * elements of in_h are interleaved and copied to out_l. +- * High half of byte elements of in_l and high half of byte +- * elements of in_h are interleaved and copied to out_h. +- * Similar for other pairs. +- * Example : see LASX_ILVLH_W(in_h, in_l, out_l, out_h) +- */ +-#define LASX_ILVLH_B(in_h, in_l, out_h, out_l) \ +-{ \ +- __m256i tmp0, tmp1; \ +- tmp0 = __lasx_xvilvl_b(in_h, in_l); \ +- tmp1 = __lasx_xvilvh_b(in_h, in_l); \ +- out_l = __lasx_xvpermi_q(tmp0, tmp1, 0x02); \ +- out_h = __lasx_xvpermi_q(tmp0, tmp1, 0x13); \ +-} +- +-#define LASX_ILVLH_B_2(in0_h, in0_l, in1_h, in1_l, \ +- out0_h, out0_l, out1_h, out1_l) \ +-{ \ +- LASX_ILVLH_B(in0_h, in0_l, out0_h, out0_l); \ +- LASX_ILVLH_B(in1_h, in1_l, out1_h, out1_l); \ +-} +- +-#define LASX_ILVLH_B_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l) \ +-{ \ +- LASX_ILVLH_B_2(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l); \ +- LASX_ILVLH_B_2(in2_h, in2_l, in3_h, in3_l, out2_h, out2_l, out3_h, out3_l); \ +-} +- +-#define LASX_ILVLH_B_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l, \ +- out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l) \ +-{ \ +- LASX_ILVLH_B_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l); \ +- LASX_ILVLH_B_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l); \ +-} +- +-/* Description : Interleave byte elements from vectors +- * (128-bit symmetry version) +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out_h, out_l, ~ +- * Details : Low half of byte elements of in_l and low half of byte elements +- * of in_h are interleaved and copied to out_l. High half of byte +- * elements of in_h and high half of byte elements of in_l are +- * interleaved and copied to out_h. +- * Similar for other pairs. +- * Example : see LASX_ILVLH_W_128SV(in_h, in_l, out_h, out_l) +- */ +-#define LASX_ILVLH_B_128SV(in_h, in_l, out_h, out_l) \ +-{ \ +- LASX_ILVL_B_128SV(in_h, in_l, out_l); \ +- LASX_ILVH_B_128SV(in_h, in_l, out_h); \ +-} +- +-#define LASX_ILVLH_B_2_128SV(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l) \ +-{ \ +- LASX_ILVLH_B_128SV(in0_h, in0_l, out0_h, out0_l); \ +- LASX_ILVLH_B_128SV(in1_h, in1_l, out1_h, out1_l); \ +-} +- +-#define LASX_ILVLH_B_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l) \ +-{ \ +- LASX_ILVLH_B_2_128SV(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l); \ +- LASX_ILVLH_B_2_128SV(in2_h, in2_l, in3_h, in3_l, out2_h, out2_l, out3_h, out3_l); \ +-} +- +-#define LASX_ILVLH_B_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l, \ +- out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l) \ +-{ \ +- LASX_ILVLH_B_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l); \ +- LASX_ILVLH_B_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l); \ +-} +- +-/* Description : Interleave half word elements from vectors +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out_h, out_l, ~ +- * Details : Low half of half word elements of in_l and low half of half +- * word elements of in_h are interleaved and copied to out_l. +- * High half of half word elements of in_l and high half of half +- * word elements of in_h are interleaved and copied to out_h. +- * Similar for other pairs. +- * Example : see LASX_ILVLH_W(in_h, in_l, out_h, out_l) +- */ +-#define LASX_ILVLH_H(in_h, in_l, out_h, out_l) \ +-{ \ +- __m256i tmp0, tmp1; \ +- tmp0 = __lasx_xvilvl_h(in_h, in_l); \ +- tmp1 = __lasx_xvilvh_h(in_h, in_l); \ +- out_l = __lasx_xvpermi_q(tmp0, tmp1, 0x02); \ +- out_h = __lasx_xvpermi_q(tmp0, tmp1, 0x13); \ +-} +- +-#define LASX_ILVLH_H_2(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, \ +- out1_h, out1_l) \ +-{ \ +- LASX_ILVLH_H(in0_h, in0_l, out0_h, out0_l); \ +- LASX_ILVLH_H(in1_h, in1_l, out1_h, out1_l); \ +-} +- +-#define LASX_ILVLH_H_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l) \ +-{ \ +- LASX_ILVLH_H_2(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l); \ +- LASX_ILVLH_H_2(in2_h, in2_l, in3_h, in3_l, out2_h, out2_l, out3_h, out3_l); \ +-} +- +-#define LASX_ILVLH_H_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l, \ +- out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l) \ +-{ \ +- LASX_ILVLH_H_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l); \ +- LASX_ILVLH_H_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l); \ +-} +- +-/* Description : Interleave half word elements from vectors +- * (128-bit symmetry version) +- * Arguments : Inputs - in0_h, in0_l, ~ +- * Outputs - out0_h, out0_l, ~ +- * Details : Low half of half word elements of every 128-bit of in_l and +- * low half of half word elements of every 128-bit of in_h are +- * interleaved and copied to out_l. +- * High half of half word elements of every 128-bit of in_l and +- * high half of half word elements of every 128-bit of in_h are +- * interleaved and copied to out_h. +- * Similar for other pairs. +- * Example : see LASX_ILVLH_W_128SV(in_h, in_l, out_h, out_l) +- */ +-#define LASX_ILVLH_H_128SV(in_h, in_l, out_h, out_l) \ +-{ \ +- LASX_ILVL_H_128SV(in_h, in_l, out_l); \ +- LASX_ILVH_H_128SV(in_h, in_l, out_h); \ +-} +- +-#define LASX_ILVLH_H_2_128SV(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l) \ +-{ \ +- LASX_ILVLH_H_128SV(in0_h, in0_l, out0_h, out0_l); \ +- LASX_ILVLH_H_128SV(in1_h, in1_l, out1_h, out1_l); \ +-} +- +-#define LASX_ILVLH_H_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l) \ +-{ \ +- LASX_ILVLH_H_2_128SV(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l); \ +- LASX_ILVLH_H_2_128SV(in2_h, in2_l, in3_h, in3_l, out2_h, out2_l, out3_h, out3_l); \ +-} +- +-#define LASX_ILVLH_H_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l, \ +- out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l) \ +-{ \ +- LASX_ILVLH_H_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l); \ +- LASX_ILVLH_H_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l); \ +-} +- +-/* Description : Interleave word elements from vectors +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out_h, out_l, ~ +- * Details : Low half of word elements of in_l and low half of word +- * elements of in_h are interleaved and copied to out_l. +- * High half of word elements of in_l and high half of word +- * elements of in_h are interleaved and copied to out_h. +- * Similar for other pairs. +- * Example : LASX_ILVLH_W(in_h, in_l, out_h, out_l) +- * in_h:-1, -2, -3, -4, -5, -6, -7, -8 +- * in_l: 1, 2, 3, 4, 5, 6, 7, 8 +- * out_h: 5, -5, 6, -6, 7, -7, 8, -8 +- * out_l: 1, -1, 2, -2, 3, -3, 4, -4 +- */ +-#define LASX_ILVLH_W(in_h, in_l, out_h, out_l) \ +-{ \ +- __m256i tmp0, tmp1; \ +- tmp0 = __lasx_xvilvl_w(in_h, in_l); \ +- tmp1 = __lasx_xvilvh_w(in_h, in_l); \ +- out_l = __lasx_xvpermi_q(tmp0, tmp1, 0x02); \ +- out_h = __lasx_xvpermi_q(tmp0, tmp1, 0x13); \ +-} +- +-#define LASX_ILVLH_W_2(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, \ +- out1_h, out1_l) \ +-{ \ +- LASX_ILVLH_W(in0_h, in0_l, out0_h, out0_l); \ +- LASX_ILVLH_W(in1_h, in1_l, out1_h, out1_l); \ +-} +- +-#define LASX_ILVLH_W_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l) \ +-{ \ +- LASX_ILVLH_W_2(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l); \ +- LASX_ILVLH_W_2(in2_h, in2_l, in3_h, in3_l, out2_h, out2_l, out3_h, out3_l); \ +-} +- +-#define LASX_ILVLH_W_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l, \ +- out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l) \ +-{ \ +- LASX_ILVLH_W_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l); \ +- LASX_ILVLH_W_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l); \ +-} +- +-/* Description : Interleave word elements from vectors +- * (128-bit symmetry version) +- * Arguments : Inputs - in0_h, in0_l, ~ +- * Outputs - out0_h, out0_l, ~ +- * Details : Low half of word elements of every 128-bit of in_l and +- * low half of word elements of every 128-bit of in_h are +- * interleaved and copied to out_l. +- * High half of word elements of every 128-bit of in_l and +- * high half of word elements of every 128-bit of in_h are +- * interleaved and copied to out_h. +- * Similar for other pairs. +- * Example : LASX_ILVLH_W_128SV(in_h, in_l, out_h, out_l) +- * in_h:-1, -2, -3, -4, -5, -6, -7, -8 +- * in_l: 1, 2, 3, 4, 5, 6, 7, 8 +- * out_h: 3, -3, 4, -4, 7, -7, 8, -8 +- * out_l: 1, -1, 2, -2, 5, -5, 6, -6 +- */ +-#define LASX_ILVLH_W_128SV(in_h, in_l, out_h, out_l) \ +-{ \ +- LASX_ILVL_W_128SV(in_h, in_l, out_l); \ +- LASX_ILVH_W_128SV(in_h, in_l, out_h); \ +-} +- +-#define LASX_ILVLH_W_2_128SV(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l) \ +-{ \ +- LASX_ILVLH_W_128SV(in0_h, in0_l, out0_h, out0_l); \ +- LASX_ILVLH_W_128SV(in1_h, in1_l, out1_h, out1_l); \ +-} +- +-#define LASX_ILVLH_W_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l) \ +-{ \ +- LASX_ILVLH_W_2_128SV(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l); \ +- LASX_ILVLH_W_2_128SV(in2_h, in2_l, in3_h, in3_l, out2_h, out2_l, out3_h, out3_l); \ +-} +- +-#define LASX_ILVLH_W_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l, \ +- out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l) \ +-{ \ +- LASX_ILVLH_W_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l); \ +- LASX_ILVLH_W_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l); \ +-} +- +-/* Description : Interleave double word elements from vectors +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out_h, out_l, ~ +- * Details : Low half of double word elements of in_l and low half of +- * double word elements of in_h are interleaved and copied to +- * out_l. High half of double word elements of in_l and high +- * half of double word elements of in_h are interleaved and +- * copied to out_h. +- * Similar for other pairs. +- * Example : see LASX_ILVLH_W(in_h, in_l, out_h, out_l) +- */ +-#define LASX_ILVLH_D(in_h, in_l, out_h, out_l) \ +-{ \ +- __m256i tmp0, tmp1; \ +- tmp0 = __lasx_xvilvl_d(in_h, in_l); \ +- tmp1 = __lasx_xvilvh_d(in_h, in_l); \ +- out_l = __lasx_xvpermi_q(tmp0, tmp1, 0x02); \ +- out_h = __lasx_xvpermi_q(tmp0, tmp1, 0x13); \ +-} +- +-#define LASX_ILVLH_D_2(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, \ +- out1_h, out1_l) \ +-{ \ +- LASX_ILVLH_D(in0_h, in0_l, out0_h, out0_l); \ +- LASX_ILVLH_D(in1_h, in1_l, out1_h, out1_l); \ +-} +- +-#define LASX_ILVLH_D_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l) \ +-{ \ +- LASX_ILVLH_D_2(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l); \ +- LASX_ILVLH_D_2(in2_h, in2_l, in3_h, in3_l, out2_h, out2_l, out3_h, out3_l); \ +-} +- +-#define LASX_ILVLH_D_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l, \ +- out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l) \ +-{ \ +- LASX_ILVLH_D_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l); \ +- LASX_ILVLH_D_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l); \ +-} +- +-/* Description : Interleave double word elements from vectors +- * (128-bit symmetry version) +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out_h, out_l, ~ +- * Details : Low half of double word elements of every 128-bit of in_l and +- * low half of double word elements of every 128-bit of in_h are +- * interleaved and copied to out_l. +- * High half of double word elements of every 128-bit of in_l and +- * high half of double word elements of every 128-bit of in_h are +- * interleaved and copied to out_h. +- * Similar for other pairs. +- * Example : see LASX_ILVLH_W_128SV(in_h, in_l, out_h, out_l) +- */ +-#define LASX_ILVLH_D_128SV(in_h, in_l, out_h, out_l) \ +-{ \ +- LASX_ILVL_D_128SV(in_h, in_l, out_l); \ +- LASX_ILVH_D_128SV(in_h, in_l, out_h); \ +-} +- +-#define LASX_ILVLH_D_2_128SV(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l) \ +-{ \ +- LASX_ILVLH_D_128SV(in0_h, in0_l, out0_h, out0_l); \ +- LASX_ILVLH_D_128SV(in1_h, in1_l, out1_h, out1_l); \ +-} +- +-#define LASX_ILVLH_D_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l) \ +-{ \ +- LASX_ILVLH_D_2_128SV(in0_h, in0_l, in1_h, in1_l, out0_h, out0_l, out1_h, out1_l); \ +- LASX_ILVLH_D_2_128SV(in2_h, in2_l, in3_h, in3_l, out2_h, out2_l, out3_h, out3_l); \ +-} +- +-#define LASX_ILVLH_D_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l, \ +- out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l) \ +-{ \ +- LASX_ILVLH_D_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- out0_h, out0_l, out1_h, out1_l, out2_h, out2_l, out3_h, out3_l); \ +- LASX_ILVLH_D_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out4_h, out4_l, out5_h, out5_l, out6_h, out6_l, out7_h, out7_l); \ +-} +- +-/* Description : Immediate number of columns to slide with zero +- * Arguments : Inputs - in0, in1, slide_val, ~ +- * Outputs - out0, out1, ~ +- * Details : Byte elements from every 128-bit of in0 vector +- * are slide into out0 by number of elements +- * specified by slide_val. +- * Example : LASX_SLDI_B_0_128SV(in0, out0, slide_val) +- * in0: 1, 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, +- * 19,20,21,22,23,24,25,26,27,28,29,30,31,32 +- * out0: 4, 5,6,7,8,9,10,11,12,13,14,15,16,0,0,0,20,21, +- * 22,23,24,25,26,27,28,29,30,31,32,0,0,0 +- * slide_val: 3 +- */ +-#define LASX_SLDI_B_0_128SV(in0, out0, slide_val) \ +-{ \ +- out0 = __lasx_xvbsrl_v(in0, slide_val); \ +-} +- +-#define LASX_SLDI_B_2_0_128SV(in0, in1, out0, out1, slide_val) \ +-{ \ +- LASX_SLDI_B_0_128SV(in0, out0, slide_val); \ +- LASX_SLDI_B_0_128SV(in1, out1, slide_val); \ +-} +- +-#define LASX_SLDI_B_4_0_128SV(in0, in1, in2, in3, \ +- out0, out1, out2, out3, slide_val) \ +-{ \ +- LASX_SLDI_B_2_0_128SV(in0, in1, out0, out1, slide_val); \ +- LASX_SLDI_B_2_0_128SV(in2, in3, out2, out3, slide_val); \ +-} +- +-/* Description : Pack even byte elements of vector pairs +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Even byte elements of in_l are copied to the low half of +- * out0. Even byte elements of in_h are copied to the high +- * half of out0. +- * Similar for other pairs. +- * Example : see LASX_PCKEV_W(in_h, in_l, out0) +- */ +-#define LASX_PCKEV_B(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvpickev_b(in_h, in_l); \ +- out0 = __lasx_xvpermi_d(out0, 0xd8); \ +-} +- +-#define LASX_PCKEV_B_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_PCKEV_B(in0_h, in0_l, out0); \ +- LASX_PCKEV_B(in1_h, in1_l, out1); \ +-} +- +-#define LASX_PCKEV_B_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_PCKEV_B_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_PCKEV_B_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-#define LASX_PCKEV_B_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_PCKEV_B_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3); \ +- LASX_PCKEV_B_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, \ +- in7_h, in7_l, out4, out5, out6, out7); \ +-} +- +-/* Description : Pack even byte elements of vector pairs +- * (128-bit symmetry version) +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Even byte elements of in_l are copied to the low half of +- * out0. Even byte elements of in_h are copied to the high +- * half of out0. +- * Similar for other pairs. +- * Example : see LASX_PCKEV_W_128SV(in_h, in_l, out0) +- */ +-#define LASX_PCKEV_B_128SV(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvpickev_b(in_h, in_l); \ +-} +- +-#define LASX_PCKEV_B_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_PCKEV_B_128SV(in0_h, in0_l, out0); \ +- LASX_PCKEV_B_128SV(in1_h, in1_l, out1); \ +-} +- +-#define LASX_PCKEV_B_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_PCKEV_B_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_PCKEV_B_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-#define LASX_PCKEV_B_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, in4_h, in4_l, in5_h, in5_l, \ +- in6_h, in6_l, in7_h, in7_l, out0, out1, \ +- out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_PCKEV_B_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3); \ +- LASX_PCKEV_B_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, \ +- in7_h, in7_l, out4, out5, out6, out7); \ +-} +- +-/* Description : Pack even half word elements of vector pairs +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Even half word elements of in_l are copied to the low +- * half of out0. Even half word elements of in_h are +- * copied to the high half of out0. +- * Example : see LASX_PCKEV_W(in_h, in_l, out0) +- */ +-#define LASX_PCKEV_H(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvpickev_h(in_h, in_l); \ +- out0 = __lasx_xvpermi_d(out0, 0xd8); \ +-} +- +-#define LASX_PCKEV_H_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_PCKEV_H(in0_h, in0_l, out0); \ +- LASX_PCKEV_H(in1_h, in1_l, out1); \ +-} +- +-#define LASX_PCKEV_H_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_PCKEV_H_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_PCKEV_H_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-#define LASX_PCKEV_H_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_PCKEV_H_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3); \ +- LASX_PCKEV_H_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, \ +- in7_h, in7_l, out4, out5, out6, out7); \ +-} +- +-/* Description : Pack even half word elements of vector pairs +- * (128-bit symmetry version) +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Even half word elements of in_l are copied to the low +- * half of out0. Even half word elements of in_h are +- * copied to the high half of out0. +- * Example : see LASX_PCKEV_W_128SV(in_h, in_l, out0) +- */ +-#define LASX_PCKEV_H_128SV(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvpickev_h(in_h, in_l); \ +-} +- +-#define LASX_PCKEV_H_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_PCKEV_H_128SV(in0_h, in0_l, out0); \ +- LASX_PCKEV_H_128SV(in1_h, in1_l, out1); \ +-} +- +-#define LASX_PCKEV_H_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_PCKEV_H_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_PCKEV_H_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-#define LASX_PCKEV_H_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, in4_h, in4_l, in5_h, in5_l, \ +- in6_h, in6_l, in7_h, in7_l, out0, out1, \ +- out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_PCKEV_H_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3); \ +- LASX_PCKEV_H_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, \ +- in7_h, in7_l, out4, out5, out6, out7); \ +-} +- +-/* Description : Pack even word elements of vector pairs +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Even word elements of in_l are copied to +- * the low half of out0. Even word elements +- * of in_h are copied to the high half of out0. +- * Example : LASX_PCKEV_W(in_h, in_l, out0) +- * in_h: -1, -2, -3, -4, -5, -6, -7, -8 +- * in_l: 1, 2, 3, 4, 5, 6, 7, 8 +- * out0: 1, 3, 5, 7, -1, -3, -5, -7 +- */ +-#define LASX_PCKEV_W(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvpickev_w(in_h, in_l); \ +- out0 = __lasx_xvpermi_d(out0, 0xd8); \ +-} +- +-#define LASX_PCKEV_W_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_PCKEV_W(in0_h, in0_l, out0); \ +- LASX_PCKEV_W(in1_h, in1_l, out1); \ +-} +- +-#define LASX_PCKEV_W_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_PCKEV_W_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_PCKEV_W_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-#define LASX_PCKEV_W_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_PCKEV_W_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3); \ +- LASX_PCKEV_W_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, \ +- in7_h, in7_l, out4, out5, out6, out7); \ +-} +- +-/* Description : Pack even word elements of vector pairs +- * (128-bit symmetry version) +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Even word elements of in_l are copied to +- * the low half of out0. Even word elements +- * of in_h are copied to the high half of out0. +- * Example : LASX_PCKEV_W_128SV(in_h, in_l, out0) +- * in_h: -1, -2, -3, -4, -5, -6, -7, -8 +- * in_l: 1, 2, 3, 4, 5, 6, 7, 8 +- * out0: 1, 3, -1, -3, 5, 7, -5, -7 +- */ +-#define LASX_PCKEV_W_128SV(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvpickev_w(in_h, in_l); \ +-} +- +-#define LASX_PCKEV_W_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_PCKEV_W_128SV(in0_h, in0_l, out0); \ +- LASX_PCKEV_W_128SV(in1_h, in1_l, out1); \ +-} +- +-#define LASX_PCKEV_W_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_PCKEV_W_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_PCKEV_W_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-#define LASX_PCKEV_W_8_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, in4_h, in4_l, in5_h, in5_l, \ +- in6_h, in6_l, in7_h, in7_l, out0, out1, \ +- out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_PCKEV_W_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3); \ +- LASX_PCKEV_W_4_128SV(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, \ +- in7_h, in7_l, out4, out5, out6, out7); \ +-} +- +-/* Description : Pack even half word elements of vector pairs +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Even half word elements of in_l are copied to the low +- * half of out0. Even half word elements of in_h are +- * copied to the high half of out0. +- * Example : See LASX_PCKEV_W(in_h, in_l, out0) +- */ +-#define LASX_PCKEV_D(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvpickev_d(in_h, in_l); \ +- out0 = __lasx_xvpermi_d(out0, 0xd8); \ +-} +- +-#define LASX_PCKEV_D_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_PCKEV_D(in0_h, in0_l, out0) \ +- LASX_PCKEV_D(in1_h, in1_l, out1) \ +-} +- +-#define LASX_PCKEV_D_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_PCKEV_D_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +- LASX_PCKEV_D_2(in2_h, in2_l, in3_h, in3_l, out2, out3) \ +-} +- +-/* Description : Pack even half word elements of vector pairs +- * (128-bit symmetry version) +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Even half word elements of in_l are copied to the low +- * half of out0. Even half word elements of in_h are +- * copied to the high half of out0. +- * Example : LASX_PCKEV_D_128SV(in_h, in_l, out0) +- * in_h : 1, 2, 3, 4 +- * in_l : 5, 6, 7, 8 +- * out0 : 5, 1, 7, 3 +- */ +-#define LASX_PCKEV_D_128SV(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvpickev_d(in_h, in_l); \ +-} +- +-#define LASX_PCKEV_D_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_PCKEV_D_128SV(in0_h, in0_l, out0) \ +- LASX_PCKEV_D_128SV(in1_h, in1_l, out1) \ +-} +- +-#define LASX_PCKEV_D_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_PCKEV_D_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +- LASX_PCKEV_D_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3) \ +-} +- +-/* Description : Pack even quad word elements of vector pairs +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Even quad elements of in_l are copied to the low +- * half of out0. Even quad elements of in_h are +- * copied to the high half of out0. +- * Similar for other pairs. +- * Example : see LASX_PCKEV_W(in_h, in_l, out0) +- */ +-#define LASX_PCKEV_Q(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvpermi_q(in_h, in_l, 0x20); \ +-} +- +-#define LASX_PCKEV_Q_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_PCKEV_Q(in0_h, in0_l, out0); \ +- LASX_PCKEV_Q(in1_h, in1_l, out1); \ +-} +- +-#define LASX_PCKEV_Q_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_PCKEV_Q_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_PCKEV_Q_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-#define LASX_PCKEV_Q_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_PCKEV_Q_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3); \ +- LASX_PCKEV_Q_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, \ +- in7_h, in7_l, out4, out5, out6, out7); \ +-} +- +-/* Description : Pack odd byte elements of vector pairs +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Odd byte elements of in_l are copied to the low half of +- * out0. Odd byte elements of in_h are copied to the high +- * half of out0. +- * Similar for other pairs. +- * Example : see LASX_PCKOD_W(in_h, in_l, out0) +- */ +-#define LASX_PCKOD_B(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvpickod_b(in_h, in_l); \ +- out0 = __lasx_xvpermi_d(out0, 0xd8); \ +-} +- +-#define LASX_PCKOD_B_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_PCKOD_B(in0_h, in0_l, out0); \ +- LASX_PCKOD_B(in1_h, in1_l, out1); \ +-} +- +-#define LASX_PCKOD_B_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_PCKOD_B_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_PCKOD_B_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-#define LASX_PCKOD_B_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_PCKOD_B_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3); \ +- LASX_PCKOD_B_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, \ +- in7_h, in7_l, out4, out5, out6, out7); \ +-} +- +-/* Description : Pack odd half word elements of vector pairs +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Odd half word elements of in_l are copied to the low +- * half of out0. Odd half word elements of in_h are copied +- * to the high half of out0. +- * Example : see LASX_PCKOD_W(in_h, in_l, out0) +- */ +-#define LASX_PCKOD_H(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvpickod_h(in_h, in_l); \ +- out0 = __lasx_xvpermi_d(out0, 0xd8); \ +-} +- +-#define LASX_PCKOD_H_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_PCKOD_H(in0_h, in0_l, out0); \ +- LASX_PCKOD_H(in1_h, in1_l, out1); \ +-} +- +-#define LASX_PCKOD_H_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_PCKOD_H_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_PCKOD_H_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-#define LASX_PCKOD_H_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_PCKOD_H_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3); \ +- LASX_PCKOD_H_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, \ +- in7_h, in7_l, out4, out5, out6, out7); \ +-} +- +-/* Description : Pack odd word elements of vector pairs +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Odd word elements of in_l are copied to the low half of out0. +- * Odd word elements of in_h are copied to the high half of out0. +- * Example : LASX_PCKOD_W(in_h, in_l, out0) +- * in_h: -1, -2, -3, -4, -5, -6, -7, -8 +- * in_l: 1, 2, 3, 4, 5, 6, 7, 8 +- * out0: 2, 4, 6, 8, -2, -4, -6, -8 +- */ +-#define LASX_PCKOD_W(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvpickod_w(in_h, in_l); \ +- out0 = __lasx_xvpermi_d(out0, 0xd8); \ +-} +- +-#define LASX_PCKOD_W_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_PCKOD_W(in0_h, in0_l, out0); \ +- LASX_PCKOD_W(in1_h, in1_l, out1); \ +-} +- +-#define LASX_PCKOD_W_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_PCKOD_W_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_PCKOD_W_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-#define LASX_PCKOD_W_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_PCKOD_W_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3); \ +- LASX_PCKOD_W_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, \ +- in7_h, in7_l, out4, out5, out6, out7); \ +-} +- +-/* Description : Pack odd half word elements of vector pairs +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Odd half word elements of in_l are copied to the low +- * half of out0. Odd half word elements of in_h are +- * copied to the high half of out0. +- * Example : See LASX_PCKOD_W(in_h, in_l, out0) +- */ +-#define LASX_PCKOD_D(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvpickod_d(in_h, in_l); \ +- out0 = __lasx_xvpermi_d(out0, 0xd8); \ +-} +- +-#define LASX_PCKOD_D_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_PCKOD_D(in0_h, in0_l, out0) \ +- LASX_PCKOD_D(in1_h, in1_l, out1) \ +-} +- +-#define LASX_PCKOD_D_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_PCKOD_D_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +- LASX_PCKOD_D_2(in2_h, in2_l, in3_h, in3_l, out2, out3) \ +-} +- +-/* Description : Pack odd quad word elements of vector pairs +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Odd quad elements of in0_h are copied to the high half of +- * out0 & odd quad elements of in0_l are copied to the low +- * half of out0. +- * Odd quad elements of in1_h are copied to the high half of +- * out1 & odd quad elements of in1_l are copied to the low +- * half of out1. +- * LASX_PCKOD_Q(in_h, in_l, out0) +- * in_h: 0,0,0,0, 0,0,0,0, 19,10,11,12, 13,14,15,16 +- * in_l: 0,0,0,0, 0,0,0,0, 1,2,3,4, 5,6,7,8 +- * out0: 1,2,3,4, 5,6,7,8, 19,10,11,12, 13,14,15,16 +- */ +-#define LASX_PCKOD_Q(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvpermi_q(in_h, in_l, 0x31); \ +-} +- +-#define LASX_PCKOD_Q_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_PCKOD_Q(in0_h, in0_l, out0); \ +- LASX_PCKOD_Q(in1_h, in1_l, out1); \ +-} +- +-#define LASX_PCKOD_Q_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_PCKOD_Q_2(in0_h, in0_l, in1_h, in1_l, out0, out1); \ +- LASX_PCKOD_Q_2(in2_h, in2_l, in3_h, in3_l, out2, out3); \ +-} +- +-#define LASX_PCKOD_Q_8(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, in3_h, in3_l, \ +- in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, in7_h, in7_l, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_PCKOD_Q_4(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3); \ +- LASX_PCKOD_Q_4(in4_h, in4_l, in5_h, in5_l, in6_h, in6_l, \ +- in7_h, in7_l, out4, out5, out6, out7); \ +-} +- +-/* Description : Pack odd half word elements of vector pairsi +- * (128-bit symmetry version) +- * Arguments : Inputs - in_h, in_l, ~ +- * Outputs - out0, out1, ~ +- * Details : Odd half word elements of in_l are copied to the low +- * half of out0 of . Odd half word elements of in_h are +- * copied to the high half of out0. +- * Example : LASX_PCKOD_D_128SV(in_h, in_l, out0) +- * in_h : 1, 2, 3, 4 +- * in_l : 5, 6, 7, 8 +- * out0 : 6, 2, 8, 4 +- */ +-#define LASX_PCKOD_D_128SV(in_h, in_l, out0) \ +-{ \ +- out0 = __lasx_xvpickod_d(in_h, in_l); \ +-} +- +-#define LASX_PCKOD_D_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +-{ \ +- LASX_PCKOD_D_128SV(in0_h, in0_l, out0) \ +- LASX_PCKOD_D_128SV(in1_h, in1_l, out1) \ +-} +- +-#define LASX_PCKOD_D_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, out0, out1, out2, out3) \ +-{ \ +- LASX_PCKOD_D_2_128SV(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +- LASX_PCKOD_D_2_128SV(in2_h, in2_l, in3_h, in3_l, out2, out3) \ +-} +- +- +-/* Description : Transposes 8x8 block with half word elements in vectors. +- * Arguments : Inputs - in0, in1, ~ +- * Outputs - out0, out1, ~ +- * Details : The rows of the matrix become columns, and the columns become rows. +- * Example : LASX_TRANSPOSE8x8_H_128SV +- * in0 : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 +- * in1 : 8,2,3,4, 5,6,7,8, 8,2,3,4, 5,6,7,8 +- * in2 : 8,2,3,4, 5,6,7,8, 8,2,3,4, 5,6,7,8 +- * in3 : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 +- * in4 : 9,2,3,4, 5,6,7,8, 9,2,3,4, 5,6,7,8 +- * in5 : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 +- * in6 : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 +- * in7 : 9,2,3,4, 5,6,7,8, 9,2,3,4, 5,6,7,8 +- * +- * out0 : 1,8,8,1, 9,1,1,9, 1,8,8,1, 9,1,1,9 +- * out1 : 2,2,2,2, 2,2,2,2, 2,2,2,2, 2,2,2,2 +- * out2 : 3,3,3,3, 3,3,3,3, 3,3,3,3, 3,3,3,3 +- * out3 : 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4 +- * out4 : 5,5,5,5, 5,5,5,5, 5,5,5,5, 5,5,5,5 +- * out5 : 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,6,6,6 +- * out6 : 7,7,7,7, 7,7,7,7, 7,7,7,7, 7,7,7,7 +- * out7 : 8,8,8,8, 8,8,8,8, 8,8,8,8, 8,8,8,8 +- */ +-#define LASX_TRANSPOSE8x8_H_128SV(in0, in1, in2, in3, in4, in5, in6, in7, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- __m256i s0_m, s1_m; \ +- __m256i tmp0_m, tmp1_m, tmp2_m, tmp3_m; \ +- __m256i tmp4_m, tmp5_m, tmp6_m, tmp7_m; \ +- \ +- LASX_ILVL_H_2_128SV(in6, in4, in7, in5, s0_m, s1_m); \ +- LASX_ILVLH_H_128SV(s1_m, s0_m, tmp1_m, tmp0_m); \ +- LASX_ILVH_H_2_128SV(in6, in4, in7, in5, s0_m, s1_m); \ +- LASX_ILVLH_H_128SV(s1_m, s0_m, tmp3_m, tmp2_m); \ +- \ +- LASX_ILVL_H_2_128SV(in2, in0, in3, in1, s0_m, s1_m); \ +- LASX_ILVLH_H_128SV(s1_m, s0_m, tmp5_m, tmp4_m); \ +- LASX_ILVH_H_2_128SV(in2, in0, in3, in1, s0_m, s1_m); \ +- LASX_ILVLH_H_128SV(s1_m, s0_m, tmp7_m, tmp6_m); \ +- \ +- LASX_PCKEV_D_4_128SV(tmp0_m, tmp4_m, tmp1_m, tmp5_m, tmp2_m, tmp6_m, \ +- tmp3_m, tmp7_m, out0, out2, out4, out6); \ +- LASX_PCKOD_D_4_128SV(tmp0_m, tmp4_m, tmp1_m, tmp5_m, tmp2_m, tmp6_m, \ +- tmp3_m, tmp7_m, out1, out3, out5, out7); \ +-} +- +-/* Description : Transposes 8x8 block with word elements in vectors +- * Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7 +- * Outputs - out0, out1, out2, out3, out4, out5, out6, out7 +- * Details : +- */ +-#define LASX_TRANSPOSE8x8_W(in0, in1, in2, in3, in4, in5, in6, in7, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- __m256i s0_m, s1_m; \ +- __m256i tmp0_m, tmp1_m, tmp2_m, tmp3_m; \ +- __m256i tmp4_m, tmp5_m, tmp6_m, tmp7_m; \ +- \ +- LASX_ILVL_W_2_128SV(in2, in0, in3, in1, s0_m, s1_m); \ +- LASX_ILVLH_W_128SV(s1_m, s0_m, tmp1_m, tmp0_m); \ +- LASX_ILVH_W_2_128SV(in2, in0, in3, in1, s0_m, s1_m); \ +- LASX_ILVLH_W_128SV(s1_m, s0_m, tmp3_m, tmp2_m); \ +- \ +- LASX_ILVL_W_2_128SV(in6, in4, in7, in5, s0_m, s1_m); \ +- LASX_ILVLH_W_128SV(s1_m, s0_m, tmp5_m, tmp4_m); \ +- LASX_ILVH_W_2_128SV(in6, in4, in7, in5, s0_m, s1_m); \ +- LASX_ILVLH_W_128SV(s1_m, s0_m, tmp7_m, tmp6_m); \ +- LASX_PCKEV_Q_4(tmp4_m, tmp0_m, tmp5_m, tmp1_m, tmp6_m, tmp2_m, \ +- tmp7_m, tmp3_m, out0, out1, out2, out3); \ +- LASX_PCKOD_Q_4(tmp4_m, tmp0_m, tmp5_m, tmp1_m, tmp6_m, tmp2_m, \ +- tmp7_m, tmp3_m, out4, out5, out6, out7); \ +-} +- +-/* Description : Transposes 2x2 block with quad word elements in vectors +- * Arguments : Inputs - in0, in1 +- * Outputs - out0, out1 +- * Details : +- */ +-#define LASX_TRANSPOSE2x2_Q(in0, in1, out0, out1) \ +-{ \ +- __m256i tmp0; \ +- tmp0 = __lasx_xvpermi_q(in1, in0, 0x02); \ +- out1 = __lasx_xvpermi_q(in1, in0, 0x13); \ +- out0 = tmp0; \ +-} +- +-/* Description : Transposes 4x4 block with double word elements in vectors +- * Arguments : Inputs - in0, in1, in2, in3 +- * Outputs - out0, out1, out2, out3 +- * Details : +- */ +-#define LASX_TRANSPOSE4x4_D(in0, in1, in2, in3, out0, out1, out2, out3) \ +-{ \ +- __m256i tmp0, tmp1, tmp2, tmp3; \ +- LASX_ILVLH_D_2_128SV(in1, in0, in3, in2, tmp0, tmp1, tmp2, tmp3); \ +- out0 = __lasx_xvpermi_q(tmp2, tmp0, 0x20); \ +- out2 = __lasx_xvpermi_q(tmp2, tmp0, 0x31); \ +- out1 = __lasx_xvpermi_q(tmp3, tmp1, 0x20); \ +- out3 = __lasx_xvpermi_q(tmp3, tmp1, 0x31); \ +-} +- +-/* Description : Transpose 4x4 block with half word elements in vectors +- * Arguments : Inputs - in0, in1, in2, in3 +- * Outputs - out0, out1, out2, out3 +- * Return Type - signed halfword +- */ +-#define LASX_TRANSPOSE4x4_H_128SV(in0, in1, in2, in3, out0, out1, out2, out3) \ +-{ \ +- __m256i s0_m, s1_m; \ +- \ +- LASX_ILVL_H_2_128SV(in1, in0, in3, in2, s0_m, s1_m); \ +- LASX_ILVLH_W_128SV(s1_m, s0_m, out2, out0); \ +- out1 = __lasx_xvilvh_d(out0, out0); \ +- out3 = __lasx_xvilvh_d(out2, out2); \ +-} +- +-/* Description : Transposes input 8x8 byte block +- * Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7 +- * (input 8x8 byte block) +- * Outputs - out0, out1, out2, out3, out4, out5, out6, out7 +- * (output 8x8 byte block) +- * Details : +- */ +-#define LASX_TRANSPOSE8x8_B(in0, in1, in2, in3, in4, in5, in6, in7, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- __m256i tmp0_m, tmp1_m, tmp2_m, tmp3_m; \ +- __m256i tmp4_m, tmp5_m, tmp6_m, tmp7_m; \ +- LASX_ILVL_B_4_128SV(in2, in0, in3, in1, in6, in4, in7, in5, \ +- tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ +- LASX_ILVLH_B_128SV(tmp1_m, tmp0_m, tmp5_m, tmp4_m); \ +- LASX_ILVLH_B_128SV(tmp3_m, tmp2_m, tmp7_m, tmp6_m); \ +- LASX_ILVLH_W_128SV(tmp6_m, tmp4_m, out2, out0); \ +- LASX_ILVLH_W_128SV(tmp7_m, tmp5_m, out6, out4); \ +- LASX_SLDI_B_2_0_128SV(out0, out2, out1, out3, 8); \ +- LASX_SLDI_B_2_0_128SV(out4, out6, out5, out7, 8); \ +-} +- +-/* Description : Transposes input 16x8 byte block +- * Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7, +- * in8, in9, in10, in11, in12, in13, in14, in15 +- * (input 16x8 byte block) +- * Outputs - out0, out1, out2, out3, out4, out5, out6, out7 +- * (output 8x16 byte block) +- * Details : +- */ +-#define LASX_TRANSPOSE16x8_B(in0, in1, in2, in3, in4, in5, in6, in7, \ +- in8, in9, in10, in11, in12, in13, in14, in15, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- __m256i tmp0_m, tmp1_m, tmp2_m, tmp3_m; \ +- __m256i tmp4_m, tmp5_m, tmp6_m, tmp7_m; \ +- __m256i t0, t1, t2, t3, t4, t5, t6, t7; \ +- LASX_ILVL_B_8_128SV(in2, in0, in3, in1, in6, in4, in7, in5, \ +- in10, in8, in11, in9, in14, in12, in15, in13, \ +- tmp0_m, tmp1_m, tmp2_m, tmp3_m, \ +- tmp4_m, tmp5_m, tmp6_m, tmp7_m); \ +- LASX_ILVLH_B_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, t1, t0, t3, t2); \ +- LASX_ILVLH_B_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, t5, t4, t7, t6); \ +- LASX_ILVLH_W_2_128SV(t2, t0, t3, t1, tmp2_m, tmp0_m, tmp6_m, tmp4_m); \ +- LASX_ILVLH_W_2_128SV(t6, t4, t7, t5, tmp3_m, tmp1_m, tmp7_m, tmp5_m); \ +- LASX_ILVLH_D_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, out1, out0, out3, out2); \ +- LASX_ILVLH_D_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, out5, out4, out7, out6); \ +-} +- +-/* Description : Transposes input 16x8 byte block +- * Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7, +- * in8, in9, in10, in11, in12, in13, in14, in15 +- * (input 16x8 byte block) +- * Outputs - out0, out1, out2, out3, out4, out5, out6, out7 +- * (output 8x16 byte block) +- * Details : The rows of the matrix become columns, and the columns become rows. +- * Example : LASX_TRANSPOSE16x8_H +- * in0 : 1,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 +- * in1 : 2,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 +- * in2 : 3,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 +- * in3 : 4,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 +- * in4 : 5,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 +- * in5 : 6,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 +- * in6 : 7,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 +- * in7 : 8,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 +- * in8 : 9,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 +- * in9 : 1,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 +- * in10 : 0,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 +- * in11 : 2,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 +- * in12 : 3,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 +- * in13 : 7,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 +- * in14 : 5,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 +- * in15 : 6,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 +- * +- * out0 : 1,2,3,4,5,6,7,8,9,1,0,2,3,7,5,6 +- * out1 : 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 +- * out2 : 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 +- * out3 : 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 +- * out4 : 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 +- * out5 : 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 +- * out6 : 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 +- * out7 : 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 +- */ +-#define LASX_TRANSPOSE16x8_H(in0, in1, in2, in3, in4, in5, in6, in7, \ +- in8, in9, in10, in11, in12, in13, in14, in15, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- __m256i tmp0_m, tmp1_m, tmp2_m, tmp3_m; \ +- __m256i tmp4_m, tmp5_m, tmp6_m, tmp7_m; \ +- __m256i t0, t1, t2, t3, t4, t5, t6, t7; \ +- LASX_ILVL_H_8_128SV(in2, in0, in3, in1, in6, in4, in7, in5, \ +- in10, in8, in11, in9, in14, in12, in15, in13, \ +- tmp0_m, tmp1_m, tmp2_m, tmp3_m, \ +- tmp4_m, tmp5_m, tmp6_m, tmp7_m); \ +- LASX_ILVLH_H_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, t1, t0, t3, t2); \ +- LASX_ILVLH_H_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, t5, t4, t7, t6); \ +- LASX_ILVLH_D_2_128SV(t2, t0, t3, t1, tmp2_m, tmp0_m, tmp6_m, tmp4_m); \ +- LASX_ILVLH_D_2_128SV(t6, t4, t7, t5, tmp3_m, tmp1_m, tmp7_m, tmp5_m); \ +- LASX_PCKEV_Q_2(tmp1_m, tmp0_m, tmp3_m, tmp2_m, out0, out1); \ +- LASX_PCKEV_Q_2(tmp5_m, tmp4_m, tmp7_m, tmp6_m, out2, out3); \ +- \ +- LASX_ILVH_H_8_128SV(in2, in0, in3, in1, in6, in4, in7, in5, \ +- in10, in8, in11, in9, in14, in12, in15, in13, \ +- tmp0_m, tmp1_m, tmp2_m, tmp3_m, \ +- tmp4_m, tmp5_m, tmp6_m, tmp7_m); \ +- LASX_ILVLH_H_2_128SV(tmp1_m, tmp0_m, tmp3_m, tmp2_m, t1, t0, t3, t2); \ +- LASX_ILVLH_H_2_128SV(tmp5_m, tmp4_m, tmp7_m, tmp6_m, t5, t4, t7, t6); \ +- LASX_ILVLH_D_2_128SV(t2, t0, t3, t1, tmp2_m, tmp0_m, tmp6_m, tmp4_m); \ +- LASX_ILVLH_D_2_128SV(t6, t4, t7, t5, tmp3_m, tmp1_m, tmp7_m, tmp5_m); \ +- LASX_PCKEV_Q_2(tmp1_m, tmp0_m, tmp3_m, tmp2_m, out4, out5); \ +- LASX_PCKEV_Q_2(tmp5_m, tmp4_m, tmp7_m, tmp6_m, out6, out7); \ +-} +- +-/* Description : Clips all signed word elements of input vector +- * between 0 & 255 +- * Arguments : Inputs - in (input vector) +- * Outputs - out_m (output vector with clipped elements) +- * Return Type - signed word +- */ +-#define LASX_CLIP_W_0_255(in, out_m) \ +-{ \ +- out_m = __lasx_xvmaxi_w(in, 0); \ +- out_m = __lasx_xvsat_wu(out_m, 7); \ +-} +- +-#define LASX_CLIP_W_0_255_2(in0, in1, out0, out1) \ +-{ \ +- LASX_CLIP_W_0_255(in0, out0); \ +- LASX_CLIP_W_0_255(in1, out1); \ +-} +- +-#define LASX_CLIP_W_0_255_4(in0, in1, in2, in3, out0, out1, out2, out3) \ +-{ \ +- LASX_CLIP_W_0_255_2(in0, in1, out0, out1); \ +- LASX_CLIP_W_0_255_2(in2, in3, out2, out3); \ +-} +- +-/* Description : Clips all signed halfword elements of input vector +- * between 0 & 255 +- * Arguments : Inputs - in (input vector) +- * Outputs - out_m (output vector with clipped elements) +- * Return Type - signed halfword +- */ +-#define LASX_CLIP_H_0_255(in, out_m) \ +-{ \ +- out_m = __lasx_xvmaxi_h(in, 0); \ +- out_m = __lasx_xvsat_hu(out_m, 7); \ +-} +- +-#define LASX_CLIP_H_0_255_2(in0, in1, out0, out1) \ +-{ \ +- LASX_CLIP_H_0_255(in0, out0); \ +- LASX_CLIP_H_0_255(in1, out1); \ +-} +- +-#define LASX_CLIP_H_0_255_4(in0, in1, in2, in3, out0, out1, out2, out3) \ +-{ \ +- LASX_CLIP_H_0_255_2(in0, in1, out0, out1); \ +- LASX_CLIP_H_0_255_2(in2, in3, out2, out3); \ +-} +- +-/* Description : Clips all halfword elements of input vector between min & max +- * out = ((in) < (min)) ? (min) : (((in) > (max)) ? (max) : (in)) +- * Arguments : Inputs - in (input vector) +- * - min (min threshold) +- * - max (max threshold) +- * Outputs - in (output vector with clipped elements) +- * Return Type - signed halfword +- */ +-#define LASX_CLIP_H(in, min, max) \ +-{ \ +- in = __lasx_xvmax_h(min, in); \ +- in = __lasx_xvmin_h(max, in); \ +-} +- +-/* Description : Dot product and addition of 3 signed byte input vectors +- * Arguments : Inputs - in0, in1, in2, coeff0, coeff1, coeff2 +- * Outputs - out0_m +- * Return Type - signed halfword +- * Details : Dot product of 'in0' with 'coeff0' +- * Dot product of 'in1' with 'coeff1' +- * Dot product of 'in2' with 'coeff2' +- * Addition of all the 3 vector results +- * out0_m = (in0 * coeff0) + (in1 * coeff1) + (in2 * coeff2) +- */ +-#define LASX_DP2ADD_H_B_3(in0, in1, in2, out0_m, coeff0, coeff1, coeff2) \ +-{ \ +- LASX_DP2_H_B(in0, coeff0, out0_m); \ +- LASX_DP2ADD_H_B(out0_m, in1, coeff1, out0_m); \ +- LASX_DP2ADD_H_B(out0_m, in2, coeff2, out0_m); \ +-} +- +-/* Description : Each byte element is logically xor'ed with immediate 128 +- * Arguments : Inputs - in0, in1 +- * Outputs - in0, in1 (in-place) +- * Details : Each unsigned byte element from input vector 'in0' is +- * logically xor'ed with 128 and result is in-place stored in +- * 'in0' vector +- * Each unsigned byte element from input vector 'in1' is +- * logically xor'ed with 128 and result is in-place stored in +- * 'in1' vector +- * Similar for other pairs +- * Example : LASX_XORI_B_128(in0) +- * in0: 9,10,11,12, 13,14,15,16, 121,122,123,124, 125,126,127,128, 17,18,19,20, 21,22,23,24, +- * 248,249,250,251, 252,253,254,255, +- * in0: 137,138,139,140, 141,142,143,144, 249,250,251,252, 253,254,255,0, 145,146,147,148, +- * 149,150,151,152, 120,121,122,123, 124,125,126,127 +- */ +-#define LASX_XORI_B_128(in0) \ +-{ \ +- in0 = __lasx_xvxori_b(in0, 128); \ +-} +-#define LASX_XORI_B_2_128(in0, in1) \ +-{ \ +- LASX_XORI_B_128(in0); \ +- LASX_XORI_B_128(in1); \ +-} +-#define LASX_XORI_B_4_128(in0, in1, in2, in3) \ +-{ \ +- LASX_XORI_B_2_128(in0, in1); \ +- LASX_XORI_B_2_128(in2, in3); \ +-} +-#define LASX_XORI_B_8_128(in0, in1, in2, in3, in4, in5, in6, in7) \ +-{ \ +- LASX_XORI_B_4_128(in0, in1, in2, in3); \ +- LASX_XORI_B_4_128(in4, in5, in6, in7); \ +-} +- +-/* Description : Indexed halfword element values are replicated to all +- * elements in output vector. If 'indx0 < 8' use SPLATI_R_*, +- * if 'indx0 >= 8' use SPLATI_L_* +- * Arguments : Inputs - in, idx0, idx1 +- * Outputs - out0, out1 +- * Details : 'idx0' element value from 'in' vector is replicated to all +- * elements in 'out0' vector +- * Valid index range for halfword operation is 0-7 +- */ +-#define LASX_SPLATI_L_H(in, idx0, out0) \ +-{ \ +- in = __lasx_xvpermi_q(in, in, 0x02); \ +- out0 = __lasx_xvrepl128vei_h(in, idx0); \ +-} +-#define LASX_SPLATI_H_H(in, idx0, out0) \ +-{ \ +- in = __lasx_xvpermi_q(in, in, 0X13); \ +- out0 = __lasx_xvrepl128vei_h(in, idx0 - 8); \ +-} +-#define LASX_SPLATI_L_H_2(in, idx0, idx1, out0, out1) \ +-{ \ +- LASX_SPLATI_L_H(in, idx0, out0); \ +- out1 = __lasx_xvrepl128vei_h(in, idx1); \ +-} +-#define LASX_SPLATI_H_H_2(in, idx0, idx1, out0, out1) \ +-{ \ +- LASX_SPLATI_H_H(in, idx0, out0); \ +- out1 = __lasx_xvrepl128vei_h(in, idx1 - 8); \ +-} +-#define LASX_SPLATI_L_H_4(in, idx0, idx1, idx2, idx3, \ +- out0, out1, out2, out3) \ +-{ \ +- LASX_SPLATI_L_H_2(in, idx0, idx1, out0, out1); \ +- out2 = __lasx_xvrepl128vei_h(in, idx2); \ +- out3 = __lasx_xvrepl128vei_h(in, idx3); \ +-} +-#define SPLATI_H_H_4(in, idx0, idx1, idx2, idx3, \ +- out0, out1, out2, out3) \ +-{ \ +- LASX_SPLATI_H_H_2(in, idx0, idx1, out0, out1); \ +- out2 = __lasx_xvrepl128vei_h(in, idx2 - 8); \ +- out3 = __lasx_xvrepl128vei_h(in, idx3 - 8); \ +-} +- +-/* Description : Pack even elements of input vectors & xor with 128 +- * Arguments : Inputs - in0, in1 +- * Outputs - out_m +- * Details : Signed byte even elements from 'in0' and 'in1' are packed +- * together in one vector and the resulted vector is xor'ed with +- * 128 to shift the range from signed to unsigned byte +- */ +-#define LASX_PICKEV_XORI128_B(in0, in1, out_m) \ +-{ \ +- out_m = __lasx_xvpickev_b(in1, in0); \ +- out_m = __lasx_xvxori_b(out_m, 128); \ +-} +- +-/* Description : Shift right logical all byte elements of vector. +- * Arguments : Inputs - in, shift +- * Outputs - in (in place) +- * Details : Each element of vector in is shifted right logical by +- * number of bits respective element holds in vector shift and +- * result is in place written to in. +- * Here, shift is a vector passed in. +- * Example : See LASX_SRL_W(in, shift) +- */ +-#define LASX_SRL_B(in, shift) \ +-{ \ +- in = __lasx_xvsrl_b(in, shift); \ +-} +- +-#define LASX_SRL_B_2(in0, in1, shift) \ +-{ \ +- LASX_SRL_B(in0, shift); \ +- LASX_SRL_B(in1, shift); \ +-} +- +-#define LASX_SRL_B_4(in0, in1, in2, in3, shift) \ +-{ \ +- LASX_SRL_B_2(in0, in1, shift); \ +- LASX_SRL_B_2(in2, in3, shift); \ +-} +- +-/* Description : Shift right logical all halfword elements of vector. +- * Arguments : Inputs - in, shift +- * Outputs - in (in place) +- * Details : Each element of vector in is shifted right logical by +- * number of bits respective element holds in vector shift and +- * result is in place written to in. +- * Here, shift is a vector passed in. +- * Example : See LASX_SRL_W(in, shift) +- */ +-#define LASX_SRL_H(in, shift) \ +-{ \ +- in = __lasx_xvsrl_h(in, shift); \ +-} +- +-#define LASX_SRL_H_2(in0, in1, shift) \ +-{ \ +- LASX_SRL_H(in0, shift); \ +- LASX_SRL_H(in1, shift); \ +-} +- +-#define LASX_SRL_H_4(in0, in1, in2, in3, shift) \ +-{ \ +- LASX_SRL_H_2(in0, in1, shift); \ +- LASX_SRL_H_2(in2, in3, shift); \ +-} +- +-/* Description : Shift right logical all word elements of vector. +- * Arguments : Inputs - in, shift +- * Outputs - in (in place) +- * Details : Each element of vector in is shifted right logical by +- * number of bits respective element holds in vector shift and +- * result is in place written to in. +- * Here, shift is a vector passed in. +- * Example : LASX_SRL_W(in, shift) +- * in : 1, 3, 2, -4, 0, -2, 25, 0 +- * shift : 1, 1, 1, 1, 2, 2, 2, 2 +- * in(output) : 0, 1, 1, 32766, 0, 16383, 6, 0 +- */ +-#define LASX_SRL_W(in, shift) \ +-{ \ +- in = __lasx_xvsrl_w(in, shift); \ +-} +- +-#define LASX_SRL_W_2(in0, in1, shift) \ +-{ \ +- LASX_SRL_W(in0, shift); \ +- LASX_SRL_W(in1, shift); \ +-} +- +-#define LASX_SRL_W_4(in0, in1, in2, in3, shift) \ +-{ \ +- LASX_SRL_W_2(in0, in1, shift); \ +- LASX_SRL_W_2(in2, in3, shift); \ +-} +- +-/* Description : Shift right logical all double word elements of vector. +- * Arguments : Inputs - in, shift +- * Outputs - in (in place) +- * Details : Each element of vector in is shifted right logical by +- * number of bits respective element holds in vector shift and +- * result is in place written to in. +- * Here, shift is a vector passed in. +- * Example : See LASX_SRL_W(in, shift) +- */ +-#define LASX_SRL_D(in, shift) \ +-{ \ +- in = __lasx_xvsrl_d(in, shift); \ +-} +- +-#define LASX_SRL_D_2(in0, in1, shift) \ +-{ \ +- LASX_SRL_D(in0, shift); \ +- LASX_SRL_D(in1, shift); \ +-} +- +-#define LASX_SRL_D_4(in0, in1, in2, in3, shift) \ +-{ \ +- LASX_SRL_D_2(in0, in1, shift); \ +- LASX_SRL_D_2(in2, in3, shift); \ +-} +- +- +-/* Description : Shift right arithmetic rounded (immediate) +- * Arguments : Inputs - in0, in1, shift +- * Outputs - in0, in1, (in place) +- * Details : Each element of vector 'in0' is shifted right arithmetic by +- * value in 'shift'. +- * The last discarded bit is added to shifted value for rounding +- * and the result is in place written to 'in0' +- * Similar for other pairs +- * Example : LASX_SRARI_H(in0, out0, shift) +- * in0: 1,2,3,4, -5,-6,-7,-8, 19,10,11,12, 13,14,15,16 +- * shift: 2 +- * out0: 0,1,1,1, -1,-1,-2,-2, 5,3,3,3, 3,4,4,4 +- */ +-#define LASX_SRARI_H(in0, out0, shift) \ +-{ \ +- out0 = __lasx_xvsrari_h(in0, shift); \ +-} +-#define LASX_SRARI_H_2(in0, in1, out0, out1, shift) \ +-{ \ +- LASX_SRARI_H(in0, out0, shift); \ +- LASX_SRARI_H(in1, out1, shift); \ +-} +-#define LASX_SRARI_H_4(in0, in1, in2, in3, out0, out1, out2, out3, shift) \ +-{ \ +- LASX_SRARI_H_2(in0, in1, out0, out1, shift); \ +- LASX_SRARI_H_2(in2, in3, out2, out3, shift); \ +-} +- +-/* Description : Shift right arithmetic (immediate) +- * Arguments : Inputs - in0, in1, shift +- * Outputs - in0, in1, (in place) +- * Details : Each element of vector 'in0' is shifted right arithmetic by +- * value in 'shift'. +- * Similar for other pairs +- * Example : see LASX_SRARI_H(in0, out0, shift) +- */ +-#define LASX_SRAI_W(in0, out0, shift) \ +-{ \ +- out0 = __lasx_xvsrai_w(in0, shift); \ +-} +-#define LASX_SRAI_W_2(in0, in1, out0, out1, shift) \ +-{ \ +- LASX_SRAI_W(in0, out0, shift); \ +- LASX_SRAI_W(in1, out1, shift); \ +-} +-#define LASX_SRAI_W_4(in0, in1, in2, in3, out0, out1, out2, out3, shift) \ +-{ \ +- LASX_SRAI_W_2(in0, in1, out0, out1, shift); \ +- LASX_SRAI_W_2(in2, in3, out2, out3, shift); \ +-} +-#define LASX_SRAI_W_8(in0, in1, in2, in3, in4, in5, in6, in7, \ +- out0, out1, out2, out3, out4, out5, out6, out7, shift) \ +-{ \ +- LASX_SRAI_W_4(in0, in1, in2, in3, out0, out1, out2, out3, shift); \ +- LASX_SRAI_W_4(in4, in5, in6, in7, out4, out5, out6, out7, shift); \ +-} +- +-/* Description : Saturate the halfword element values to the max +- * unsigned value of (sat_val+1 bits) +- * The element data width remains unchanged +- * Arguments : Inputs - in0, in1, in2, in3, sat_val +- * Outputs - in0, in1, in2, in3 (in place) +- * Return Type - unsigned halfword +- * Details : Each unsigned halfword element from 'in0' is saturated to the +- * value generated with (sat_val+1) bit range +- * Results are in placed to original vectors +- * Example : LASX_SAT_H(in0, out0, sat_val) +- * in0: 1,2,3,4, 5,6,7,8, 19,10,11,12, 13,14,15,16 +- * sat_val:3 +- * out0: 1,2,3,4, 5,6,7,7, 7,7,7,7, 7,7,7,7 +- */ +-#define LASX_SAT_H(in0, out0, sat_val) \ +-{ \ +- out0 = __lasx_xvsat_h(in0, sat_val); \ +-} //some error in xvsat_h built-in function +-#define LASX_SAT_H_2(in0, in1, out0, out1, sat_val) \ +-{ \ +- LASX_SAT_H(in0, out0, sat_val); \ +- LASX_SAT_H(in1, out1, sat_val); \ +-} +-#define LASX_SAT_H_4(in0, in1, in2, in3, out0, out1, out2, out3, sat_val) \ +-{ \ +- LASX_SAT_H_2(in0, in1, out0, out1, sat_val); \ +- LASX_SAT_H_2(in2, in3, out2, out3, sat_val); \ +-} +- +-/* Description : Addition of 2 pairs of vectors +- * Arguments : Inputs - in0, in1, in2, in3 +- * Outputs - out0, out1 +- * Details : Each halfwords element from 2 pairs vectors is added +- * and 2 results are produced +- * Example : LASX_ADD_H(in0, in1, out) +- * in0: 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 +- * in1: 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1 +- * out: 9,9,9,9, 9,9,9,9, 9,9,9,9, 9,9,9,9 +- */ +-#define LASX_ADD_H(in0, in1, out) \ +-{ \ +- out = __lasx_xvadd_h(in0, in1); \ +-} +-#define LASX_ADD_H_2(in0, in1, in2, in3, out0, out1) \ +-{ \ +- LASX_ADD_H(in0, in1, out0); \ +- LASX_ADD_H(in2, in3, out1); \ +-} +-#define LASX_ADD_H_4(in0, in1, in2, in3, in4, in5, in6, in7, out0, out1, out2, out3) \ +-{ \ +- LASX_ADD_H_2(in0, in1, in2, in3, out0, out1); \ +- LASX_ADD_H_2(in4, in5, in6, in7, out2, out3); \ +-} +-#define LASX_ADD_H_8(in0, in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, \ +- in13, in14, in15, out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- LASX_ADD_H_4(in0, in1, in2, in3, in4, in5, in6, in7, out0, out1, out2, out3); \ +- LASX_ADD_H_4(in8, in9, in10, in11, in12, in13, in14, in15, out4, out5, out6, out7); \ +-} +- +-/* Description : Horizontal subtraction of unsigned byte vector elements +- * Arguments : Inputs - in0, in1 +- * Outputs - out0, out1 +- * Return Type - as per RTYPE +- * Details : Each unsigned odd byte element from 'in0' is subtracted from +- * even unsigned byte element from 'in0' (pairwise) and the +- * halfword result is written to 'out0' +- */ +-#define LASX_HSUB_UB_2(in0, in1, out0, out1) \ +-{ \ +- out0 = __lasx_xvhsubw_hu_bu(in0, in0); \ +- out1 = __lasx_xvhsubw_hu_bu(in1, in1); \ +-} +- +-#define LASX_HSUB_UB_4(in0, in1, in2, in3, out0, out1, out2, out3) \ +-{ \ +- LASX_HSUB_UB_2(in0, in1, out0, out1); \ +- LASX_HSUB_UB_2(in2, in3, out2, out3); \ +-} +- +-/* Description : Shuffle byte vector elements as per mask vector +- * Arguments : Inputs - in0, in1, in2, in3, mask0, mask1 +- * Outputs - out0, out1 +- * Return Type - as per RTYPE +- * Details : Selective byte elements from in0 & in1 are copied to out0 as +- * per control vector mask0 +- * Selective byte elements from in2 & in3 are copied to out1 as +- * per control vector mask1 +- * Example : LASX_SHUF_B_128SV(in0, in1, mask0, out0) +- * in_h : 9,10,11,12, 13,14,15,16, 0,0,0,0, 0,0,0,0, +- * 17,18,19,20, 21,22,23,24, 0,0,0,0, 0,0,0,0 +- * in_l : 1, 2, 3, 4, 5, 6, 7, 8, 0,0,0,0, 0,0,0,0, +- * 25,26,27,28, 29,30,31,32, 0,0,0,0, 0,0,0,0 +- * mask0: 0, 1, 2, 3, 4, 5, 6, 7, 16,17,18,19, 20,21,22,23, +- * 16,17,18,19, 20,21,22,23, 0, 1, 2, 3, 4, 5, 6, 7 +- * out0 : 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12, 13,14,15,16, +- * 17,18,19,20, 21,22,23,24, 25,26,27,28, 29,30,31,32 +- */ +- +-#define LASX_SHUF_B_128SV(in_h, in_l, mask0, out0) \ +-{ \ +- out0 = __lasx_xvshuf_b(in_h, in_l, mask0); \ +-} +-#define LASX_SHUF_B_2_128SV(in0_h, in0_l, in1_h, in1_l, mask0, mask1, \ +- out0, out1) \ +-{ \ +- LASX_SHUF_B_128SV(in0_h, in0_l, mask0, out0); \ +- LASX_SHUF_B_128SV(in1_h, in1_l, mask1, out1); \ +-} +-#define LASX_SHUF_B_4_128SV(in0_h, in0_l, in1_h, in1_l, in2_h, in2_l, \ +- in3_h, in3_l, mask0, mask1, mask2, mask3, \ +- out0, out1, out2, out3) \ +-{ \ +- LASX_SHUF_B_2_128SV(in0_h, in0_l, in1_h, in1_l, mask0, mask1, out0, out1); \ +- LASX_SHUF_B_2_128SV(in2_h, in2_l, in3_h, in3_l, mask2, mask3, out2, out3); \ +-} +- +-/* Description : Addition of signed halfword elements and signed saturation +- * Arguments : Inputs - in0, in1, in2, in3 ~ +- * Outputs - out0, out1 ~ +- * Details : Signed halfword elements from 'in0' are added to signed +- * halfword elements of 'in1'. The result is then signed saturated +- * between -32768 to +32767 (as per halfword data type) +- * Similar for other pairs +- * Example : LASX_SADD_H(in0, in1, out0) +- * in0: 1,2,32766,4, 5,6,7,8, 1,2,3,4, 5,6,7,8, +- * in1: 8,7,30586,5, 4,3,2,1, 8,7,6,5, 4,3,2,1, +- * out0: 9,9,32767,9, 9,9,9,9, 9,9,9,9, 9,9,9,9, +- */ +-#define LASX_SADD_H(in0, in1, out0) \ +-{ \ +- out0 = __lasx_xvsadd_h(in0, in1); \ +-} +-#define LASX_SADD_H_2(in0, in1, in2, in3, out0, out1) \ +-{ \ +- LASX_SADD_H(in0, in1, out0); \ +- LASX_SADD_H(in2, in3, out1); \ +-} +-#define LASX_SADD_H_4(in0, in1, in2, in3, in4, in5, in6, in7, \ +- out0, out1, out2, out3) \ +-{ \ +- LASX_SADD_H_2(in0, in1, in2, in3, out0, out1); \ +- LASX_SADD_H_2(in4, in5, in6, in7, out2, out3); \ +-} +- +-/* Description : Average with rounding (in0 + in1 + 1) / 2. +- * Arguments : Inputs - in0, in1, in2, in3, +- * Outputs - out0, out1 +- * Details : Each unsigned byte element from 'in0' vector is added with +- * each unsigned byte element from 'in1' vector. +- * Average with rounding is calculated and written to 'out0' +- */ +-#define LASX_AVER_BU( in0, in1, out0 ) \ +-{ \ +- out0 = __lasx_xvavgr_bu( in0, in1 ); \ +-} +- +-#define LASX_AVER_BU_2( in0, in1, in2, in3, out0, out1 ) \ +-{ \ +- LASX_AVER_BU( in0, in1, out0 ); \ +- LASX_AVER_BU( in2, in3, out1 ); \ +-} +- +-#define LASX_AVER_BU_4( in0, in1, in2, in3, in4, in5, in6, in7, \ +- out0, out1, out2, out3 ) \ +-{ \ +- LASX_AVER_BU_2( in0, in1, in2, in3, out0, out1 ); \ +- LASX_AVER_BU_2( in4, in5, in6, in7, out2, out3 ); \ +-} +- +-/* Description : Butterfly of 4 input vectors +- * Arguments : Inputs - in0, in1, in2, in3 +- * Outputs - out0, out1, out2, out3 +- * Details : Butterfly operationuu +- */ +-#define LASX_BUTTERFLY_4(RTYPE, in0, in1, in2, in3, out0, out1, out2, out3) \ +-{ \ +- out0 = (__m256i)( (RTYPE)in0 + (RTYPE)in3 ); \ +- out1 = (__m256i)( (RTYPE)in1 + (RTYPE)in2 ); \ +- \ +- out2 = (__m256i)( (RTYPE)in1 - (RTYPE)in2 ); \ +- out3 = (__m256i)( (RTYPE)in0 - (RTYPE)in3 ); \ +-} +- +-/* Description : Butterfly of 8 input vectors +- * Arguments : Inputs - in0 in1 in2 ~ +- * Outputs - out0 out1 out2 ~ +- * Details : Butterfly operation +- */ +-#define LASX_BUTTERFLY_8(RTYPE, in0, in1, in2, in3, in4, in5, in6, in7, \ +- out0, out1, out2, out3, out4, out5, out6, out7) \ +-{ \ +- out0 = (__m256i)( (RTYPE)in0 + (RTYPE)in7 ); \ +- out1 = (__m256i)( (RTYPE)in1 + (RTYPE)in6 ); \ +- out2 = (__m256i)( (RTYPE)in2 + (RTYPE)in5 ); \ +- out3 = (__m256i)( (RTYPE)in3 + (RTYPE)in4 ); \ +- \ +- out4 = (__m256i)( (RTYPE)in3 - (RTYPE)in4 ); \ +- out5 = (__m256i)( (RTYPE)in2 - (RTYPE)in5 ); \ +- out6 = (__m256i)( (RTYPE)in1 - (RTYPE)in6 ); \ +- out7 = (__m256i)( (RTYPE)in0 - (RTYPE)in7 ); \ +-} +- +- +-#endif /* GENERIC_MACROS_LASX_H */ +-#endif /* AVUTIL_LOONGARCH_GENERIC_MACROS_LASX_H */ +diff --git a/libavutil/loongarch/generic_macros_lsx.h b/libavutil/loongarch/generic_macros_lsx.h +deleted file mode 100644 +index 8edebb4be0..0000000000 +--- a/libavutil/loongarch/generic_macros_lsx.h ++++ /dev/null +@@ -1,670 +0,0 @@ +-/* +- * Copyright (c) 2021 Loongson Technology Corporation Limited +- * All rights reserved. +- * Contributed by Shiyou Yin +- * Xiwei Gu +- * Lu Wang +- * +- * This file is part of FFmpeg. +- * +- * FFmpeg is free software; you can redistribute it and/or +- * modify it under the terms of the GNU Lesser General Public +- * License as published by the Free Software Foundation; either +- * version 2.1 of the License, or (at your option) any later version. +- * +- * FFmpeg 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 +- * Lesser General Public License for more details. +- * +- * You should have received a copy of the GNU Lesser General Public +- * License along with FFmpeg; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +- * +- */ +- +-#ifndef AVUTIL_LOONGARCH_GENERIC_MACROS_LSX_H +-#define AVUTIL_LOONGARCH_GENERIC_MACROS_LSX_H +- +-/* +- * Copyright (c) 2021 Loongson Technology Corporation Limited +- * All rights reserved. +- * Contributed by Shiyou Yin +- * Xiwei Gu +- * Lu Wang +- * Hecai Yuan +- * +- * This file is maintained in LSOM project, don't change it directly. +- * You can get the latest version of this header from: *** +- * +- */ +- +-#ifndef GENERIC_MACROS_LSX_H +-#define GENERIC_MACROS_LSX_H +- +-#include +- +-/** +- * MAJOR version: Macro usage changes. +- * MINOR version: Add new functions, or bug fix. +- * MICRO version: Comment changes or implementation changes. +- */ +-#define LSOM_LSX_VERSION_MAJOR 0 +-#define LSOM_LSX_VERSION_MINOR 7 +-#define LSOM_LSX_VERSION_MICRO 0 +- +-#define LSX_DUP2_ARG1(_LSX_INS, _IN0, _IN1, _OUT0, _OUT1) \ +-{ \ +- _OUT0 = _LSX_INS(_IN0); \ +- _OUT1 = _LSX_INS(_IN1); \ +-} +- +-#define LSX_DUP2_ARG2(_LSX_INS, _IN0, _IN1, _IN2, _IN3, _OUT0, _OUT1) \ +-{ \ +- _OUT0 = _LSX_INS(_IN0, _IN1); \ +- _OUT1 = _LSX_INS(_IN2, _IN3); \ +-} +- +-#define LSX_DUP2_ARG3(_LSX_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _OUT0, _OUT1) \ +-{ \ +- _OUT0 = _LSX_INS(_IN0, _IN1, _IN2); \ +- _OUT1 = _LSX_INS(_IN3, _IN4, _IN5); \ +-} +- +-#define LSX_DUP4_ARG1(_LSX_INS, _IN0, _IN1, _IN2, _IN3, _OUT0, _OUT1, _OUT2, _OUT3) \ +-{ \ +- LSX_DUP2_ARG1(_LSX_INS, _IN0, _IN1, _OUT0, _OUT1); \ +- LSX_DUP2_ARG1(_LSX_INS, _IN2, _IN3, _OUT2, _OUT3); \ +-} +- +-#define LSX_DUP4_ARG2(_LSX_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _IN6, _IN7, \ +- _OUT0, _OUT1, _OUT2, _OUT3) \ +-{ \ +- LSX_DUP2_ARG2(_LSX_INS, _IN0, _IN1, _IN2, _IN3, _OUT0, _OUT1); \ +- LSX_DUP2_ARG2(_LSX_INS, _IN4, _IN5, _IN6, _IN7, _OUT2, _OUT3); \ +-} +- +-#define LSX_DUP4_ARG3(_LSX_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _IN6, _IN7, \ +- _IN8, _IN9, _IN10, _IN11, _OUT0, _OUT1, _OUT2, _OUT3) \ +-{ \ +- LSX_DUP2_ARG3(_LSX_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _OUT0, _OUT1); \ +- LSX_DUP2_ARG3(_LSX_INS, _IN6, _IN7, _IN8, _IN9, _IN10, _IN11, _OUT2, _OUT3); \ +-} +- +-/* +- * ============================================================================= +- * Description : Dot product & addition of byte vector elements +- * Arguments : Inputs - in_c, in_h, in_l +- * Outputs - out +- * Retrun Type - halfword +- * Details : Signed byte elements from in_h are multiplied by +- * signed byte elements from in_l, and then added adjacent to +- * each other to get results with the twice size of input. +- * Then the results plus to signed half word elements from in_c. +- * Example : out = __lsx_dp2add_h_b(in_c, in_h, in_l) +- * in_c : 1,2,3,4, 1,2,3,4 +- * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 +- * in_l : 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1 +- * out : 23,40,41,26, 23,40,41,26 +- * ============================================================================= +- */ +-static inline __m128i __lsx_dp2add_h_b(__m128i in_c, __m128i in_h, __m128i in_l) +-{ +- __m128i out; +- +- out = __lsx_vmaddwev_h_b(in_c, in_h, in_l); +- out = __lsx_vmaddwod_h_b(out, in_h, in_l); +- return out; +-} +- +-/* +- * ============================================================================= +- * Description : Dot product & addition of byte vector elements +- * Arguments : Inputs - in_c, in_h, in_l +- * Outputs - out +- * Retrun Type - halfword +- * Details : Unsigned byte elements from in_h are multiplied by +- * unsigned byte elements from in_l, and then added adjacent to +- * each other to get results with the twice size of input. +- * The results plus to signed half word elements from in_c. +- * Example : out = __lsx_dp2add_h_b(in_c, in_h, in_l) +- * in_c : 1,2,3,4, 1,2,3,4 +- * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 +- * in_l : 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1 +- * out : 23,40,41,26, 23,40,41,26 +- * ============================================================================= +- */ +-static inline __m128i __lsx_dp2add_h_bu(__m128i in_c, __m128i in_h, __m128i in_l) +-{ +- __m128i out; +- +- out = __lsx_vmaddwev_h_bu(in_c, in_h, in_l); +- out = __lsx_vmaddwod_h_bu(out, in_h, in_l); +- return out; +-} +- +-/* +- * ============================================================================= +- * Description : Dot product & addition of half word vector elements +- * Arguments : Inputs - in_c, in_h, in_l +- * Outputs - out +- * Retrun Type - __m128i +- * Details : Signed half word elements from in_h are multiplied by +- * signed half word elements from in_l, and then added adjacent to +- * each other to get results with the twice size of input. +- * Then the results plus to signed word elements from in_c. +- * Example : out = __lsx_dp2add_h_b(in_c, in_h, in_l) +- * in_c : 1,2,3,4 +- * in_h : 1,2,3,4, 5,6,7,8 +- * in_l : 8,7,6,5, 4,3,2,1 +- * out : 23,40,41,26 +- * ============================================================================= +- */ +-static inline __m128i __lsx_dp2add_w_h(__m128i in_c, __m128i in_h, __m128i in_l) +-{ +- __m128i out; +- +- out = __lsx_vmaddwev_w_h(in_c, in_h, in_l); +- out = __lsx_vmaddwod_w_h(out, in_h, in_l); +- return out; +-} +- +-/* +- * ============================================================================= +- * Description : Dot product of byte vector elements +- * Arguments : Inputs - in_h, in_l +- * Outputs - out +- * Retrun Type - halfword +- * Details : Signed byte elements from in_h are multiplied by +- * signed byte elements from in_l, and then added adjacent to +- * each other to get results with the twice size of input. +- * Example : out = __lsx_dp2_h_b(in_h, in_l) +- * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 +- * in_l : 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1 +- * out : 22,38,38,22, 22,38,38,22 +- * ============================================================================= +- */ +-static inline __m128i __lsx_dp2_h_b(__m128i in_h, __m128i in_l) +-{ +- __m128i out; +- +- out = __lsx_vmulwev_h_b(in_h, in_l); +- out = __lsx_vmaddwod_h_b(out, in_h, in_l); +- return out; +-} +- +-/* +- * ============================================================================= +- * Description : Dot product of byte vector elements +- * Arguments : Inputs - in_h, in_l +- * Outputs - out +- * Retrun Type - halfword +- * Details : Unsigned byte elements from in_h are multiplied by +- * unsigned byte elements from in_l, and then added adjacent to +- * each other to get results with the twice size of input. +- * Example : out = __lsx_dp2_h_bu(in_h, in_l) +- * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 +- * in_l : 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1 +- * out : 22,38,38,22, 22,38,38,22 +- * ============================================================================= +- */ +-static inline __m128i __lsx_dp2_h_bu(__m128i in_h, __m128i in_l) +-{ +- __m128i out; +- +- out = __lsx_vmulwev_h_bu(in_h, in_l); +- out = __lsx_vmaddwod_h_bu(out, in_h, in_l); +- return out; +-} +- +-/* +- * ============================================================================= +- * Description : Dot product of byte vector elements +- * Arguments : Inputs - in_h, in_l +- * Outputs - out +- * Retrun Type - halfword +- * Details : Unsigned byte elements from in_h are multiplied by +- * signed byte elements from in_l, and then added adjacent to +- * each other to get results with the twice size of input. +- * Example : out = __lsx_dp2_h_bu_b(in_h, in_l) +- * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 +- * in_l : 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,-1 +- * out : 22,38,38,22, 22,38,38,6 +- * ============================================================================= +- */ +-static inline __m128i __lsx_dp2_h_bu_b(__m128i in_h, __m128i in_l) +-{ +- __m128i out; +- +- out = __lsx_vmulwev_h_bu_b(in_h, in_l); +- out = __lsx_vmaddwod_h_bu_b(out, in_h, in_l); +- return out; +-} +- +-/* +- * ============================================================================= +- * Description : Dot product of byte vector elements +- * Arguments : Inputs - in_h, in_l +- * Outputs - out +- * Retrun Type - halfword +- * Details : Signed byte elements from in_h are multiplied by +- * signed byte elements from in_l, and then added adjacent to +- * each other to get results with the twice size of input. +- * Example : out = __lsx_dp2_w_h(in_h, in_l) +- * in_h : 1,2,3,4, 5,6,7,8 +- * in_l : 8,7,6,5, 4,3,2,1 +- * out : 22,38,38,22 +- * ============================================================================= +- */ +-static inline __m128i __lsx_dp2_w_h(__m128i in_h, __m128i in_l) +-{ +- __m128i out; +- +- out = __lsx_vmulwev_w_h(in_h, in_l); +- out = __lsx_vmaddwod_w_h(out, in_h, in_l); +- return out; +-} +- +-/* +- * ============================================================================= +- * Description : Clip all halfword elements of input vector between min & max +- out = ((_in) < (min)) ? (min) : (((_in) > (max)) ? (max) : (_in)) +- Arguments : Inputs - _in (input vector) +- - min (min threshold) +- - max (max threshold) +- Outputs - out (output vector with clipped elements) +- Return Type - signed halfword +- * Example : out = __lsx_clip_h(_in) +- * _in : -8,2,280,249, -8,255,280,249 +- * min : 1,1,1,1, 1,1,1,1 +- * max : 9,9,9,9, 9,9,9,9 +- * out : 1,2,9,9, 1,9,9,9 +- * ============================================================================= +- */ +-static inline __m128i __lsx_clip_h(__m128i _in, __m128i min, __m128i max) +-{ +- __m128i out; +- +- out = __lsx_vmax_h(min, _in); +- out = __lsx_vmin_h(max, out); +- return out; +-} +- +-/* +- * ============================================================================= +- * Description : Set each element of vector between 0 and 255 +- * Arguments : Inputs - _in +- * Outputs - out +- * Retrun Type - halfword +- * Details : Signed byte elements from _in are clamped between 0 and 255. +- * Example : out = __lsx_clamp255_h(_in) +- * _in : -8,255,280,249, -8,255,280,249 +- * out : 0,255,255,249, 0,255,255,249 +- * ============================================================================= +- */ +-static inline __m128i __lsx_clamp255_h(__m128i _in) +-{ +- __m128i out; +- +- out = __lsx_vmaxi_h(_in, 0); +- out = __lsx_vsat_hu(out, 7); +- return out; +-} +- +-/* +- * ============================================================================= +- * Description : Set each element of vector between 0 and 255 +- * Arguments : Inputs - _in +- * Outputs - out +- * Retrun Type - word +- * Details : Signed byte elements from _in are clamped between 0 and 255. +- * Example : out = __lsx_clamp255_w(_in) +- * _in : -8,255,280,249 +- * out : 0,255,255,249 +- * ============================================================================= +- */ +-static inline __m128i __lsx_clamp255_w(__m128i _in) +-{ +- __m128i out; +- +- out = __lsx_vmaxi_w(_in, 0); +- out = __lsx_vsat_wu(out, 7); +- return out; +-} +- +-/* +- * ============================================================================= +- * Description : Swap two variables +- Arguments : Inputs - _in0, _in1 +- Outputs - _in0, _in1 (in-place) +- Details : Swapping of two input variables using xor +- * Example : SWAP(_in0, _in1) +- * _in0 : 1,2,3,4 +- * _in1 : 5,6,7,8 +- * _in0(out) : 5,6,7,8 +- * _in1(out) : 1,2,3,4 +- * ============================================================================= +- */ +-#define SWAP(_in0, _in1) \ +-{ \ +- _in0 = __lsx_vxor_v(_in0, _in1); \ +- _in1 = __lsx_vxor_v(_in0, _in1); \ +- _in0 = __lsx_vxor_v(_in0, _in1); \ +-} \ +- +-/* +- * ============================================================================= +- * Description : Transpose 4x4 block with word elements in vectors +- * Arguments : Inputs - in0, in1, in2, in3 +- * Outputs - out0, out1, out2, out3 +- * Details : +- * Example : +- * 1, 2, 3, 4 1, 5, 9,13 +- * 5, 6, 7, 8 to 2, 6,10,14 +- * 9,10,11,12 =====> 3, 7,11,15 +- * 13,14,15,16 4, 8,12,16 +- * ============================================================================= +- */ +-#define TRANSPOSE4x4_W(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ +-{ \ +- __m128i _t0, _t1, _t2, _t3; \ +- \ +- _t0 = __lsx_vilvl_w(_in1, _in0); \ +- _t1 = __lsx_vilvh_w(_in1, _in0); \ +- _t2 = __lsx_vilvl_w(_in3, _in2); \ +- _t3 = __lsx_vilvh_w(_in3, _in2); \ +- _out0 = __lsx_vilvl_d(_t2, _t0); \ +- _out1 = __lsx_vilvh_d(_t2, _t0); \ +- _out2 = __lsx_vilvl_d(_t3, _t1); \ +- _out3 = __lsx_vilvh_d(_t3, _t1); \ +-} +- +-/* +- * ============================================================================= +- * Description : Transpose 8x8 block with byte elements in vectors +- * Arguments : Inputs - _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7 +- * Outputs - _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7 +- * Details : The rows of the matrix become columns, and the columns become rows. +- * Example : TRANSPOSE8x8_B +- * _in0 : 00,01,02,03,04,05,06,07, 00,00,00,00,00,00,00,00 +- * _in1 : 10,11,12,13,14,15,16,17, 00,00,00,00,00,00,00,00 +- * _in2 : 20,21,22,23,24,25,26,27, 00,00,00,00,00,00,00,00 +- * _in3 : 30,31,32,33,34,35,36,37, 00,00,00,00,00,00,00,00 +- * _in4 : 40,41,42,43,44,45,46,47, 00,00,00,00,00,00,00,00 +- * _in5 : 50,51,52,53,54,55,56,57, 00,00,00,00,00,00,00,00 +- * _in6 : 60,61,62,63,64,65,66,67, 00,00,00,00,00,00,00,00 +- * _in7 : 70,71,72,73,74,75,76,77, 00,00,00,00,00,00,00,00 +- * +- * _ out0 : 00,10,20,30,40,50,60,70, 00,00,00,00,00,00,00,00 +- * _ out1 : 01,11,21,31,41,51,61,71, 00,00,00,00,00,00,00,00 +- * _ out2 : 02,12,22,32,42,52,62,72, 00,00,00,00,00,00,00,00 +- * _ out3 : 03,13,23,33,43,53,63,73, 00,00,00,00,00,00,00,00 +- * _ out4 : 04,14,24,34,44,54,64,74, 00,00,00,00,00,00,00,00 +- * _ out5 : 05,15,25,35,45,55,65,75, 00,00,00,00,00,00,00,00 +- * _ out6 : 06,16,26,36,46,56,66,76, 00,00,00,00,00,00,00,00 +- * _ out7 : 07,17,27,37,47,57,67,77, 00,00,00,00,00,00,00,00 +- * ============================================================================= +- */ +-#define TRANSPOSE8x8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ +- _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ +-{ \ +- __m128i zero = {0}; \ +- __m128i shuf8 = {0x0F0E0D0C0B0A0908, 0x1716151413121110}; \ +- __m128i _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ +- \ +- _t0 = __lsx_vilvl_b(_in2, _in0); \ +- _t1 = __lsx_vilvl_b(_in3, _in1); \ +- _t2 = __lsx_vilvl_b(_in6, _in4); \ +- _t3 = __lsx_vilvl_b(_in7, _in5); \ +- _t4 = __lsx_vilvl_b(_t1, _t0); \ +- _t5 = __lsx_vilvh_b(_t1, _t0); \ +- _t6 = __lsx_vilvl_b(_t3, _t2); \ +- _t7 = __lsx_vilvh_b(_t3, _t2); \ +- _out0 = __lsx_vilvl_w(_t6, _t4); \ +- _out2 = __lsx_vilvh_w(_t6, _t4); \ +- _out4 = __lsx_vilvl_w(_t7, _t5); \ +- _out6 = __lsx_vilvh_w(_t7, _t5); \ +- _out1 = __lsx_vshuf_b(zero, _out0, shuf8); \ +- _out3 = __lsx_vshuf_b(zero, _out2, shuf8); \ +- _out5 = __lsx_vshuf_b(zero, _out4, shuf8); \ +- _out7 = __lsx_vshuf_b(zero, _out6, shuf8); \ +-} +- +-/* +- * ============================================================================= +- * Description : Transpose 8x8 block with half word elements in vectors +- * Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7 +- * Outputs - out0, out1, out2, out3, out4, out5, out6, out7 +- * Details : +- * Example : +- * 00,01,02,03,04,05,06,07 00,10,20,30,40,50,60,70 +- * 10,11,12,13,14,15,16,17 01,11,21,31,41,51,61,71 +- * 20,21,22,23,24,25,26,27 02,12,22,32,42,52,62,72 +- * 30,31,32,33,34,35,36,37 to 03,13,23,33,43,53,63,73 +- * 40,41,42,43,44,45,46,47 ======> 04,14,24,34,44,54,64,74 +- * 50,51,52,53,54,55,56,57 05,15,25,35,45,55,65,75 +- * 60,61,62,63,64,65,66,67 06,16,26,36,46,56,66,76 +- * 70,71,72,73,74,75,76,77 07,17,27,37,47,57,67,77 +- * ============================================================================= +- */ +-#define TRANSPOSE8x8_H(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ +- _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ +-{ \ +- __m128i _s0, _s1, _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ +- \ +- _s0 = __lsx_vilvl_h(_in6, _in4); \ +- _s1 = __lsx_vilvl_h(_in7, _in5); \ +- _t0 = __lsx_vilvl_h(_s1, _s0); \ +- _t1 = __lsx_vilvh_h(_s1, _s0); \ +- _s0 = __lsx_vilvh_h(_in6, _in4); \ +- _s1 = __lsx_vilvh_h(_in7, _in5); \ +- _t2 = __lsx_vilvl_h(_s1, _s0); \ +- _t3 = __lsx_vilvh_h(_s1, _s0); \ +- _s0 = __lsx_vilvl_h(_in2, _in0); \ +- _s1 = __lsx_vilvl_h(_in3, _in1); \ +- _t4 = __lsx_vilvl_h(_s1, _s0); \ +- _t5 = __lsx_vilvh_h(_s1, _s0); \ +- _s0 = __lsx_vilvh_h(_in2, _in0); \ +- _s1 = __lsx_vilvh_h(_in3, _in1); \ +- _t6 = __lsx_vilvl_h(_s1, _s0); \ +- _t7 = __lsx_vilvh_h(_s1, _s0); \ +- \ +- _out0 = __lsx_vpickev_d(_t0, _t4); \ +- _out2 = __lsx_vpickev_d(_t1, _t5); \ +- _out4 = __lsx_vpickev_d(_t2, _t6); \ +- _out6 = __lsx_vpickev_d(_t3, _t7); \ +- _out1 = __lsx_vpickod_d(_t0, _t4); \ +- _out3 = __lsx_vpickod_d(_t1, _t5); \ +- _out5 = __lsx_vpickod_d(_t2, _t6); \ +- _out7 = __lsx_vpickod_d(_t3, _t7); \ +-} +- +-/* +- * ============================================================================= +- * Description : Transpose input 8x4 byte block into 4x8 +- Arguments : Inputs - _in0, _in1, _in2, _in3 (input 8x4 byte block) +- Outputs - _out0, _out1, _out2, _out3 (output 4x8 byte block) +- Return Type - as per RTYPE +- * Details : The rows of the matrix become columns, and the columns become rows. +- * Example : TRANSPOSE8x4_B +- * _in0 : 00,01,02,03,00,00,00,00, 00,00,00,00,00,00,00,00 +- * _in1 : 10,11,12,13,00,00,00,00, 00,00,00,00,00,00,00,00 +- * _in2 : 20,21,22,23,00,00,00,00, 00,00,00,00,00,00,00,00 +- * _in3 : 30,31,32,33,00,00,00,00, 00,00,00,00,00,00,00,00 +- * _in4 : 40,41,42,43,00,00,00,00, 00,00,00,00,00,00,00,00 +- * _in5 : 50,51,52,53,00,00,00,00, 00,00,00,00,00,00,00,00 +- * _in6 : 60,61,62,63,00,00,00,00, 00,00,00,00,00,00,00,00 +- * _in7 : 70,71,72,73,00,00,00,00, 00,00,00,00,00,00,00,00 +- * +- * _out0 : 00,10,20,30,40,50,60,70, 00,00,00,00,00,00,00,00 +- * _out1 : 01,11,21,31,41,51,61,71, 00,00,00,00,00,00,00,00 +- * _out2 : 02,12,22,32,42,52,62,72, 00,00,00,00,00,00,00,00 +- * _out3 : 03,13,23,33,43,53,63,73, 00,00,00,00,00,00,00,00 +- * ============================================================================= +- */ +-#define TRANSPOSE8x4_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ +- _out0, _out1, _out2, _out3) \ +-{ \ +- __m128i _tmp0_m, _tmp1_m, _tmp2_m, _tmp3_m; \ +- \ +- _tmp0_m = __lsx_vpackev_w(_in4, _in0); \ +- _tmp1_m = __lsx_vpackev_w(_in5, _in1); \ +- _tmp2_m = __lsx_vilvl_b(_tmp1_m, _tmp0_m); \ +- _tmp0_m = __lsx_vpackev_w(_in6, _in2); \ +- _tmp1_m = __lsx_vpackev_w(_in7, _in3); \ +- \ +- _tmp3_m = __lsx_vilvl_b(_tmp1_m, _tmp0_m); \ +- _tmp0_m = __lsx_vilvl_h(_tmp3_m, _tmp2_m); \ +- _tmp1_m = __lsx_vilvh_h(_tmp3_m, _tmp2_m); \ +- \ +- _out0 = __lsx_vilvl_w(_tmp1_m, _tmp0_m); \ +- _out2 = __lsx_vilvh_w(_tmp1_m, _tmp0_m); \ +- _out1 = __lsx_vilvh_d(_out2, _out0); \ +- _out3 = __lsx_vilvh_d(_out0, _out2); \ +-} +- +-/* +- * ============================================================================= +- * Description : Transpose 16x8 block with byte elements in vectors +- * Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7, in8 +- * in9, in10, in11, in12, in13, in14, in15 +- * Outputs - out0, out1, out2, out3, out4, out5, out6, out7 +- * Details : +- * Example : +- * 000,001,002,003,004,005,006,007 +- * 008,009,010,011,012,013,014,015 +- * 016,017,018,019,020,021,022,023 +- * 024,025,026,027,028,029,030,031 +- * 032,033,034,035,036,037,038,039 +- * 040,041,042,043,044,045,046,047 000,008,...,112,120 +- * 048,049,050,051,052,053,054,055 001,009,...,113,121 +- * 056,057,058,059,060,061,062,063 to 002,010,...,114,122 +- * 064,068,066,067,068,069,070,071 =====> 003,011,...,115,123 +- * 072,073,074,075,076,077,078,079 004,012,...,116,124 +- * 080,081,082,083,084,085,086,087 005,013,...,117,125 +- * 088,089,090,091,092,093,094,095 006,014,...,118,126 +- * 096,097,098,099,100,101,102,103 007,015,...,119,127 +- * 104,105,106,107,108,109,110,111 +- * 112,113,114,115,116,117,118,119 +- * 120,121,122,123,124,125,126,127 +- * ============================================================================= +- */ +-#define TRANSPOSE16x8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, _in8, \ +- _in9, _in10, _in11, _in12, _in13, _in14, _in15, _out0, \ +- _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ +-{ \ +- __m128i _tmp0, _tmp1, _tmp2, _tmp3, _tmp4, _tmp5, _tmp6, _tmp7; \ +- __m128i _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ +- LSX_DUP4_ARG2(__lsx_vilvl_b, _in2, _in0, _in3, _in1, _in6, _in4, _in7, _in5, \ +- _tmp0, _tmp1, _tmp2, _tmp3); \ +- LSX_DUP4_ARG2(__lsx_vilvl_b, _in10, _in8, _in11, _in9, _in14, _in12, _in15, \ +- _in13, _tmp4, _tmp5, _tmp6, _tmp7); \ +- LSX_DUP2_ARG2(__lsx_vilvl_b, _tmp1, _tmp0, _tmp3, _tmp2, _t0, _t2); \ +- LSX_DUP2_ARG2(__lsx_vilvh_b, _tmp1, _tmp0, _tmp3, _tmp2, _t1, _t3); \ +- LSX_DUP2_ARG2(__lsx_vilvl_b, _tmp5, _tmp4, _tmp7, _tmp6, _t4, _t6); \ +- LSX_DUP2_ARG2(__lsx_vilvh_b, _tmp5, _tmp4, _tmp7, _tmp6, _t5, _t7); \ +- LSX_DUP2_ARG2(__lsx_vilvl_w, _t2, _t0, _t3, _t1, _tmp0, _tmp4); \ +- LSX_DUP2_ARG2(__lsx_vilvh_w, _t2, _t0, _t3, _t1, _tmp2, _tmp6); \ +- LSX_DUP2_ARG2(__lsx_vilvl_w, _t6, _t4, _t7, _t5, _tmp1, _tmp5); \ +- LSX_DUP2_ARG2(__lsx_vilvh_w, _t6, _t4, _t7, _t5, _tmp3, _tmp7); \ +- LSX_DUP2_ARG2(__lsx_vilvl_d, _tmp1, _tmp0, _tmp3, _tmp2, _out0, _out2); \ +- LSX_DUP2_ARG2(__lsx_vilvh_d, _tmp1, _tmp0, _tmp3, _tmp2, _out1, _out3); \ +- LSX_DUP2_ARG2(__lsx_vilvl_d, _tmp5, _tmp4, _tmp7, _tmp6, _out4, _out6); \ +- LSX_DUP2_ARG2(__lsx_vilvh_d, _tmp5, _tmp4, _tmp7, _tmp6, _out5, _out7); \ +-} +- +-/* +- * ============================================================================= +- * Description : Butterfly of 4 input vectors +- * Arguments : Inputs - in0, in1, in2, in3 +- * Outputs - out0, out1, out2, out3 +- * Details : Butterfly operation +- * Example : +- * out0 = in0 + in3; +- * out1 = in1 + in2; +- * out2 = in1 - in2; +- * out3 = in0 - in3; +- * ============================================================================= +- */ +-#define BUTTERFLY_4_B(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ +-{ \ +- _out0 = __lsx_vadd_b(_in0, _in3); \ +- _out1 = __lsx_vadd_b(_in1, _in2); \ +- _out2 = __lsx_vsub_b(_in1, _in2); \ +- _out3 = __lsx_vsub_b(_in0, _in3); \ +-} +-#define BUTTERFLY_4_H(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ +-{ \ +- _out0 = __lsx_vadd_h(_in0, _in3); \ +- _out1 = __lsx_vadd_h(_in1, _in2); \ +- _out2 = __lsx_vsub_h(_in1, _in2); \ +- _out3 = __lsx_vsub_h(_in0, _in3); \ +-} +-#define BUTTERFLY_4_W(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ +-{ \ +- _out0 = __lsx_vadd_w(_in0, _in3); \ +- _out1 = __lsx_vadd_w(_in1, _in2); \ +- _out2 = __lsx_vsub_w(_in1, _in2); \ +- _out3 = __lsx_vsub_w(_in0, _in3); \ +-} +-#define BUTTERFLY_4_D(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ +-{ \ +- _out0 = __lsx_vadd_d(_in0, _in3); \ +- _out1 = __lsx_vadd_d(_in1, _in2); \ +- _out2 = __lsx_vsub_d(_in1, _in2); \ +- _out3 = __lsx_vsub_d(_in0, _in3); \ +-} +- +-/* +- * ============================================================================= +- * Description : Butterfly of 8 input vectors +- * Arguments : Inputs - _in0, _in1, _in2, _in3, ~ +- * Outputs - _out0, _out1, _out2, _out3, ~ +- * Details : Butterfly operation +- * Example : +- * _out0 = _in0 + _in7; +- * _out1 = _in1 + _in6; +- * _out2 = _in2 + _in5; +- * _out3 = _in3 + _in4; +- * _out4 = _in3 - _in4; +- * _out5 = _in2 - _in5; +- * _out6 = _in1 - _in6; +- * _out7 = _in0 - _in7; +- * ============================================================================= +- */ +-#define BUTTERFLY_8_H(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ +- _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ +-{ \ +- _out0 = __lsx_vadd_h(_in0, _in7); \ +- _out1 = __lsx_vadd_h(_in1, _in6); \ +- _out2 = __lsx_vadd_h(_in2, _in5); \ +- _out3 = __lsx_vadd_h(_in3, _in4); \ +- _out4 = __lsx_vsub_h(_in3, _in4); \ +- _out5 = __lsx_vsub_h(_in2, _in5); \ +- _out6 = __lsx_vsub_h(_in1, _in6); \ +- _out7 = __lsx_vsub_h(_in0, _in7); \ +-} +- +-/* +- * ============================================================================= +- * Description : Print out elements in vector. +- * Arguments : Inputs - RTYPE, _element_num, _in0, _enter +- * Outputs - +- * Details : Print out '_element_num' elements in 'RTYPE' vector '_in0', if +- * '_enter' is TRUE, prefix "\nVP:" will be added first. +- * Example : VECT_PRINT(v4i32,4,in0,1); // in0: 1,2,3,4 +- * VP:1,2,3,4, +- * ============================================================================= +- */ +-#define VECT_PRINT(RTYPE, element_num, in0, enter) \ +-{ \ +- RTYPE _tmp0 = (RTYPE)in0; \ +- int _i = 0; \ +- if (enter) \ +- printf("\nVP:"); \ +- for(_i = 0; _i < element_num; _i++) \ +- printf("%d,",_tmp0[_i]); \ +-} +- +-#endif /* GENERIC_MACROS_LSX_H */ +-#endif /* AVUTIL_LOONGARCH_GENERIC_MACROS_LSX_H */ +diff --git a/libavutil/loongarch/loongson_intrinsics.h b/libavutil/loongarch/loongson_intrinsics.h +new file mode 100644 +index 0000000000..865d6ae9bd +--- /dev/null ++++ b/libavutil/loongarch/loongson_intrinsics.h +@@ -0,0 +1,1881 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * All rights reserved. ++ * Contributed by Shiyou Yin ++ * Xiwei Gu ++ * Lu Wang ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ * ++ */ ++ ++#ifndef AVUTIL_LOONGARCH_LOONGSON_INTRINSICS_H ++#define AVUTIL_LOONGARCH_LOONGSON_INTRINSICS_H ++ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * All rights reserved. ++ * Contributed by Shiyou Yin ++ * Xiwei Gu ++ * Lu Wang ++ * ++ * This file is maintained in LSOM project, don't change it directly. ++ * You can get the latest version of this header from: *** ++ * ++ */ ++ ++#ifndef LOONGSON_INTRINSICS_H ++#define LOONGSON_INTRINSICS_H ++ ++/** ++ * MAJOR version: Macro usage changes. ++ * MINOR version: Add new functions, or bug fix. ++ * MICRO version: Comment changes or implementation changes. ++ */ ++#define LSOM_VERSION_MAJOR 1 ++#define LSOM_VERSION_MINOR 0 ++#define LSOM_VERSION_MICRO 0 ++ ++#define DUP2_ARG1(_INS, _IN0, _IN1, _OUT0, _OUT1) \ ++{ \ ++ _OUT0 = _INS(_IN0); \ ++ _OUT1 = _INS(_IN1); \ ++} ++ ++#define DUP2_ARG2(_INS, _IN0, _IN1, _IN2, _IN3, _OUT0, _OUT1) \ ++{ \ ++ _OUT0 = _INS(_IN0, _IN1); \ ++ _OUT1 = _INS(_IN2, _IN3); \ ++} ++ ++#define DUP2_ARG3(_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _OUT0, _OUT1) \ ++{ \ ++ _OUT0 = _INS(_IN0, _IN1, _IN2); \ ++ _OUT1 = _INS(_IN3, _IN4, _IN5); \ ++} ++ ++#define DUP4_ARG1(_INS, _IN0, _IN1, _IN2, _IN3, _OUT0, _OUT1, _OUT2, _OUT3) \ ++{ \ ++ DUP2_ARG1(_INS, _IN0, _IN1, _OUT0, _OUT1); \ ++ DUP2_ARG1(_INS, _IN2, _IN3, _OUT2, _OUT3); \ ++} ++ ++#define DUP4_ARG2(_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _IN6, _IN7, \ ++ _OUT0, _OUT1, _OUT2, _OUT3) \ ++{ \ ++ DUP2_ARG2(_INS, _IN0, _IN1, _IN2, _IN3, _OUT0, _OUT1); \ ++ DUP2_ARG2(_INS, _IN4, _IN5, _IN6, _IN7, _OUT2, _OUT3); \ ++} ++ ++#define DUP4_ARG3(_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _IN6, _IN7, \ ++ _IN8, _IN9, _IN10, _IN11, _OUT0, _OUT1, _OUT2, _OUT3) \ ++{ \ ++ DUP2_ARG3(_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _OUT0, _OUT1); \ ++ DUP2_ARG3(_INS, _IN6, _IN7, _IN8, _IN9, _IN10, _IN11, _OUT2, _OUT3); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Print out elements in vector. ++ * Arguments : Inputs - RTYPE, _element_num, _in0, _enter ++ * Outputs - ++ * Details : Print out '_element_num' elements in 'RTYPE' vector '_in0', if ++ * '_enter' is TRUE, prefix "\nVP:" will be added first. ++ * Example : VECT_PRINT(v4i32,4,in0,1); // in0: 1,2,3,4 ++ * VP:1,2,3,4, ++ * ============================================================================= ++ */ ++#define VECT_PRINT(RTYPE, element_num, in0, enter) \ ++{ \ ++ RTYPE _tmp0 = (RTYPE)in0; \ ++ int _i = 0; \ ++ if (enter) \ ++ printf("\nVP:"); \ ++ for(_i = 0; _i < element_num; _i++) \ ++ printf("%d,",_tmp0[_i]); \ ++} ++ ++#ifdef __loongarch_sx ++#include ++/* ++ * ============================================================================= ++ * Description : Dot product & addition of byte vector elements ++ * Arguments : Inputs - in_c, in_h, in_l ++ * Outputs - out ++ * Retrun Type - halfword ++ * Details : Signed byte elements from in_h are multiplied by ++ * signed byte elements from in_l, and then added adjacent to ++ * each other to get results with the twice size of input. ++ * Then the results plus to signed half word elements from in_c. ++ * Example : out = __lsx_vdp2add_h_b(in_c, in_h, in_l) ++ * in_c : 1,2,3,4, 1,2,3,4 ++ * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * in_l : 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1 ++ * out : 23,40,41,26, 23,40,41,26 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_vdp2add_h_b(__m128i in_c, __m128i in_h, __m128i in_l) ++{ ++ __m128i out; ++ ++ out = __lsx_vmaddwev_h_b(in_c, in_h, in_l); ++ out = __lsx_vmaddwod_h_b(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product & addition of byte vector elements ++ * Arguments : Inputs - in_c, in_h, in_l ++ * Outputs - out ++ * Retrun Type - halfword ++ * Details : Unsigned byte elements from in_h are multiplied by ++ * unsigned byte elements from in_l, and then added adjacent to ++ * each other to get results with the twice size of input. ++ * The results plus to signed half word elements from in_c. ++ * Example : out = __lsx_vdp2add_h_b(in_c, in_h, in_l) ++ * in_c : 1,2,3,4, 1,2,3,4 ++ * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * in_l : 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1 ++ * out : 23,40,41,26, 23,40,41,26 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_vdp2add_h_bu(__m128i in_c, __m128i in_h, __m128i in_l) ++{ ++ __m128i out; ++ ++ out = __lsx_vmaddwev_h_bu(in_c, in_h, in_l); ++ out = __lsx_vmaddwod_h_bu(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product & addition of half word vector elements ++ * Arguments : Inputs - in_c, in_h, in_l ++ * Outputs - out ++ * Retrun Type - __m128i ++ * Details : Signed half word elements from in_h are multiplied by ++ * signed half word elements from in_l, and then added adjacent to ++ * each other to get results with the twice size of input. ++ * Then the results plus to signed word elements from in_c. ++ * Example : out = __lsx_vdp2add_h_b(in_c, in_h, in_l) ++ * in_c : 1,2,3,4 ++ * in_h : 1,2,3,4, 5,6,7,8 ++ * in_l : 8,7,6,5, 4,3,2,1 ++ * out : 23,40,41,26 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_vdp2add_w_h(__m128i in_c, __m128i in_h, __m128i in_l) ++{ ++ __m128i out; ++ ++ out = __lsx_vmaddwev_w_h(in_c, in_h, in_l); ++ out = __lsx_vmaddwod_w_h(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product of byte vector elements ++ * Arguments : Inputs - in_h, in_l ++ * Outputs - out ++ * Retrun Type - halfword ++ * Details : Signed byte elements from in_h are multiplied by ++ * signed byte elements from in_l, and then added adjacent to ++ * each other to get results with the twice size of input. ++ * Example : out = __lsx_vdp2_h_b(in_h, in_l) ++ * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * in_l : 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1 ++ * out : 22,38,38,22, 22,38,38,22 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_vdp2_h_b(__m128i in_h, __m128i in_l) ++{ ++ __m128i out; ++ ++ out = __lsx_vmulwev_h_b(in_h, in_l); ++ out = __lsx_vmaddwod_h_b(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product of byte vector elements ++ * Arguments : Inputs - in_h, in_l ++ * Outputs - out ++ * Retrun Type - halfword ++ * Details : Unsigned byte elements from in_h are multiplied by ++ * unsigned byte elements from in_l, and then added adjacent to ++ * each other to get results with the twice size of input. ++ * Example : out = __lsx_vdp2_h_bu(in_h, in_l) ++ * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * in_l : 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1 ++ * out : 22,38,38,22, 22,38,38,22 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_vdp2_h_bu(__m128i in_h, __m128i in_l) ++{ ++ __m128i out; ++ ++ out = __lsx_vmulwev_h_bu(in_h, in_l); ++ out = __lsx_vmaddwod_h_bu(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product of byte vector elements ++ * Arguments : Inputs - in_h, in_l ++ * Outputs - out ++ * Retrun Type - halfword ++ * Details : Unsigned byte elements from in_h are multiplied by ++ * signed byte elements from in_l, and then added adjacent to ++ * each other to get results with the twice size of input. ++ * Example : out = __lsx_vdp2_h_bu_b(in_h, in_l) ++ * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * in_l : 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,-1 ++ * out : 22,38,38,22, 22,38,38,6 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_vdp2_h_bu_b(__m128i in_h, __m128i in_l) ++{ ++ __m128i out; ++ ++ out = __lsx_vmulwev_h_bu_b(in_h, in_l); ++ out = __lsx_vmaddwod_h_bu_b(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product of byte vector elements ++ * Arguments : Inputs - in_h, in_l ++ * Outputs - out ++ * Retrun Type - halfword ++ * Details : Signed byte elements from in_h are multiplied by ++ * signed byte elements from in_l, and then added adjacent to ++ * each other to get results with the twice size of input. ++ * Example : out = __lsx_vdp2_w_h(in_h, in_l) ++ * in_h : 1,2,3,4, 5,6,7,8 ++ * in_l : 8,7,6,5, 4,3,2,1 ++ * out : 22,38,38,22 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_vdp2_w_h(__m128i in_h, __m128i in_l) ++{ ++ __m128i out; ++ ++ out = __lsx_vmulwev_w_h(in_h, in_l); ++ out = __lsx_vmaddwod_w_h(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Clip all halfword elements of input vector between min & max ++ * out = ((_in) < (min)) ? (min) : (((_in) > (max)) ? (max) : (_in)) ++ * Arguments : Inputs - _in (input vector) ++ * - min (min threshold) ++ * - max (max threshold) ++ * Outputs - out (output vector with clipped elements) ++ * Return Type - signed halfword ++ * Example : out = __lsx_vclip_h(_in) ++ * _in : -8,2,280,249, -8,255,280,249 ++ * min : 1,1,1,1, 1,1,1,1 ++ * max : 9,9,9,9, 9,9,9,9 ++ * out : 1,2,9,9, 1,9,9,9 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_vclip_h(__m128i _in, __m128i min, __m128i max) ++{ ++ __m128i out; ++ ++ out = __lsx_vmax_h(min, _in); ++ out = __lsx_vmin_h(max, out); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Set each element of vector between 0 and 255 ++ * Arguments : Inputs - _in ++ * Outputs - out ++ * Retrun Type - halfword ++ * Details : Signed byte elements from _in are clamped between 0 and 255. ++ * Example : out = __lsx_vclip255_h(_in) ++ * _in : -8,255,280,249, -8,255,280,249 ++ * out : 0,255,255,249, 0,255,255,249 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_vclip255_h(__m128i _in) ++{ ++ __m128i out; ++ ++ out = __lsx_vmaxi_h(_in, 0); ++ out = __lsx_vsat_hu(out, 7); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Set each element of vector between 0 and 255 ++ * Arguments : Inputs - _in ++ * Outputs - out ++ * Retrun Type - word ++ * Details : Signed byte elements from _in are clamped between 0 and 255. ++ * Example : out = __lsx_vclip255_w(_in) ++ * _in : -8,255,280,249 ++ * out : 0,255,255,249 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_vclip255_w(__m128i _in) ++{ ++ __m128i out; ++ ++ out = __lsx_vmaxi_w(_in, 0); ++ out = __lsx_vsat_wu(out, 7); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Swap two variables ++ * Arguments : Inputs - _in0, _in1 ++ * Outputs - _in0, _in1 (in-place) ++ * Details : Swapping of two input variables using xor ++ * Example : LSX_SWAP(_in0, _in1) ++ * _in0 : 1,2,3,4 ++ * _in1 : 5,6,7,8 ++ * _in0(out) : 5,6,7,8 ++ * _in1(out) : 1,2,3,4 ++ * ============================================================================= ++ */ ++#define LSX_SWAP(_in0, _in1) \ ++{ \ ++ _in0 = __lsx_vxor_v(_in0, _in1); \ ++ _in1 = __lsx_vxor_v(_in0, _in1); \ ++ _in0 = __lsx_vxor_v(_in0, _in1); \ ++} \ ++ ++/* ++ * ============================================================================= ++ * Description : Transpose 4x4 block with word elements in vectors ++ * Arguments : Inputs - in0, in1, in2, in3 ++ * Outputs - out0, out1, out2, out3 ++ * Details : ++ * Example : ++ * 1, 2, 3, 4 1, 5, 9,13 ++ * 5, 6, 7, 8 to 2, 6,10,14 ++ * 9,10,11,12 =====> 3, 7,11,15 ++ * 13,14,15,16 4, 8,12,16 ++ * ============================================================================= ++ */ ++#define LSX_TRANSPOSE4x4_W(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++{ \ ++ __m128i _t0, _t1, _t2, _t3; \ ++ \ ++ _t0 = __lsx_vilvl_w(_in1, _in0); \ ++ _t1 = __lsx_vilvh_w(_in1, _in0); \ ++ _t2 = __lsx_vilvl_w(_in3, _in2); \ ++ _t3 = __lsx_vilvh_w(_in3, _in2); \ ++ _out0 = __lsx_vilvl_d(_t2, _t0); \ ++ _out1 = __lsx_vilvh_d(_t2, _t0); \ ++ _out2 = __lsx_vilvl_d(_t3, _t1); \ ++ _out3 = __lsx_vilvh_d(_t3, _t1); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Transpose 8x8 block with byte elements in vectors ++ * Arguments : Inputs - _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7 ++ * Outputs - _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7 ++ * Details : The rows of the matrix become columns, and the columns become rows. ++ * Example : LSX_TRANSPOSE8x8_B ++ * _in0 : 00,01,02,03,04,05,06,07, 00,00,00,00,00,00,00,00 ++ * _in1 : 10,11,12,13,14,15,16,17, 00,00,00,00,00,00,00,00 ++ * _in2 : 20,21,22,23,24,25,26,27, 00,00,00,00,00,00,00,00 ++ * _in3 : 30,31,32,33,34,35,36,37, 00,00,00,00,00,00,00,00 ++ * _in4 : 40,41,42,43,44,45,46,47, 00,00,00,00,00,00,00,00 ++ * _in5 : 50,51,52,53,54,55,56,57, 00,00,00,00,00,00,00,00 ++ * _in6 : 60,61,62,63,64,65,66,67, 00,00,00,00,00,00,00,00 ++ * _in7 : 70,71,72,73,74,75,76,77, 00,00,00,00,00,00,00,00 ++ * ++ * _ out0 : 00,10,20,30,40,50,60,70, 00,00,00,00,00,00,00,00 ++ * _ out1 : 01,11,21,31,41,51,61,71, 00,00,00,00,00,00,00,00 ++ * _ out2 : 02,12,22,32,42,52,62,72, 00,00,00,00,00,00,00,00 ++ * _ out3 : 03,13,23,33,43,53,63,73, 00,00,00,00,00,00,00,00 ++ * _ out4 : 04,14,24,34,44,54,64,74, 00,00,00,00,00,00,00,00 ++ * _ out5 : 05,15,25,35,45,55,65,75, 00,00,00,00,00,00,00,00 ++ * _ out6 : 06,16,26,36,46,56,66,76, 00,00,00,00,00,00,00,00 ++ * _ out7 : 07,17,27,37,47,57,67,77, 00,00,00,00,00,00,00,00 ++ * ============================================================================= ++ */ ++#define LSX_TRANSPOSE8x8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7)\ ++{ \ ++ __m128i zero = {0}; \ ++ __m128i shuf8 = {0x0F0E0D0C0B0A0908, 0x1716151413121110}; \ ++ __m128i _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ ++ \ ++ _t0 = __lsx_vilvl_b(_in2, _in0); \ ++ _t1 = __lsx_vilvl_b(_in3, _in1); \ ++ _t2 = __lsx_vilvl_b(_in6, _in4); \ ++ _t3 = __lsx_vilvl_b(_in7, _in5); \ ++ _t4 = __lsx_vilvl_b(_t1, _t0); \ ++ _t5 = __lsx_vilvh_b(_t1, _t0); \ ++ _t6 = __lsx_vilvl_b(_t3, _t2); \ ++ _t7 = __lsx_vilvh_b(_t3, _t2); \ ++ _out0 = __lsx_vilvl_w(_t6, _t4); \ ++ _out2 = __lsx_vilvh_w(_t6, _t4); \ ++ _out4 = __lsx_vilvl_w(_t7, _t5); \ ++ _out6 = __lsx_vilvh_w(_t7, _t5); \ ++ _out1 = __lsx_vshuf_b(zero, _out0, shuf8); \ ++ _out3 = __lsx_vshuf_b(zero, _out2, shuf8); \ ++ _out5 = __lsx_vshuf_b(zero, _out4, shuf8); \ ++ _out7 = __lsx_vshuf_b(zero, _out6, shuf8); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Transpose 8x8 block with half word elements in vectors ++ * Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7 ++ * Outputs - out0, out1, out2, out3, out4, out5, out6, out7 ++ * Details : ++ * Example : ++ * 00,01,02,03,04,05,06,07 00,10,20,30,40,50,60,70 ++ * 10,11,12,13,14,15,16,17 01,11,21,31,41,51,61,71 ++ * 20,21,22,23,24,25,26,27 02,12,22,32,42,52,62,72 ++ * 30,31,32,33,34,35,36,37 to 03,13,23,33,43,53,63,73 ++ * 40,41,42,43,44,45,46,47 ======> 04,14,24,34,44,54,64,74 ++ * 50,51,52,53,54,55,56,57 05,15,25,35,45,55,65,75 ++ * 60,61,62,63,64,65,66,67 06,16,26,36,46,56,66,76 ++ * 70,71,72,73,74,75,76,77 07,17,27,37,47,57,67,77 ++ * ============================================================================= ++ */ ++#define LSX_TRANSPOSE8x8_H(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7)\ ++{ \ ++ __m128i _s0, _s1, _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ ++ \ ++ _s0 = __lsx_vilvl_h(_in6, _in4); \ ++ _s1 = __lsx_vilvl_h(_in7, _in5); \ ++ _t0 = __lsx_vilvl_h(_s1, _s0); \ ++ _t1 = __lsx_vilvh_h(_s1, _s0); \ ++ _s0 = __lsx_vilvh_h(_in6, _in4); \ ++ _s1 = __lsx_vilvh_h(_in7, _in5); \ ++ _t2 = __lsx_vilvl_h(_s1, _s0); \ ++ _t3 = __lsx_vilvh_h(_s1, _s0); \ ++ _s0 = __lsx_vilvl_h(_in2, _in0); \ ++ _s1 = __lsx_vilvl_h(_in3, _in1); \ ++ _t4 = __lsx_vilvl_h(_s1, _s0); \ ++ _t5 = __lsx_vilvh_h(_s1, _s0); \ ++ _s0 = __lsx_vilvh_h(_in2, _in0); \ ++ _s1 = __lsx_vilvh_h(_in3, _in1); \ ++ _t6 = __lsx_vilvl_h(_s1, _s0); \ ++ _t7 = __lsx_vilvh_h(_s1, _s0); \ ++ \ ++ _out0 = __lsx_vpickev_d(_t0, _t4); \ ++ _out2 = __lsx_vpickev_d(_t1, _t5); \ ++ _out4 = __lsx_vpickev_d(_t2, _t6); \ ++ _out6 = __lsx_vpickev_d(_t3, _t7); \ ++ _out1 = __lsx_vpickod_d(_t0, _t4); \ ++ _out3 = __lsx_vpickod_d(_t1, _t5); \ ++ _out5 = __lsx_vpickod_d(_t2, _t6); \ ++ _out7 = __lsx_vpickod_d(_t3, _t7); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Transpose input 8x4 byte block into 4x8 ++ * Arguments : Inputs - _in0, _in1, _in2, _in3 (input 8x4 byte block) ++ * Outputs - _out0, _out1, _out2, _out3 (output 4x8 byte block) ++ * Return Type - as per RTYPE ++ * Details : The rows of the matrix become columns, and the columns become rows. ++ * Example : LSX_TRANSPOSE8x4_B ++ * _in0 : 00,01,02,03,00,00,00,00, 00,00,00,00,00,00,00,00 ++ * _in1 : 10,11,12,13,00,00,00,00, 00,00,00,00,00,00,00,00 ++ * _in2 : 20,21,22,23,00,00,00,00, 00,00,00,00,00,00,00,00 ++ * _in3 : 30,31,32,33,00,00,00,00, 00,00,00,00,00,00,00,00 ++ * _in4 : 40,41,42,43,00,00,00,00, 00,00,00,00,00,00,00,00 ++ * _in5 : 50,51,52,53,00,00,00,00, 00,00,00,00,00,00,00,00 ++ * _in6 : 60,61,62,63,00,00,00,00, 00,00,00,00,00,00,00,00 ++ * _in7 : 70,71,72,73,00,00,00,00, 00,00,00,00,00,00,00,00 ++ * ++ * _out0 : 00,10,20,30,40,50,60,70, 00,00,00,00,00,00,00,00 ++ * _out1 : 01,11,21,31,41,51,61,71, 00,00,00,00,00,00,00,00 ++ * _out2 : 02,12,22,32,42,52,62,72, 00,00,00,00,00,00,00,00 ++ * _out3 : 03,13,23,33,43,53,63,73, 00,00,00,00,00,00,00,00 ++ * ============================================================================= ++ */ ++#define LSX_TRANSPOSE8x4_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3) \ ++{ \ ++ __m128i _tmp0_m, _tmp1_m, _tmp2_m, _tmp3_m; \ ++ \ ++ _tmp0_m = __lsx_vpackev_w(_in4, _in0); \ ++ _tmp1_m = __lsx_vpackev_w(_in5, _in1); \ ++ _tmp2_m = __lsx_vilvl_b(_tmp1_m, _tmp0_m); \ ++ _tmp0_m = __lsx_vpackev_w(_in6, _in2); \ ++ _tmp1_m = __lsx_vpackev_w(_in7, _in3); \ ++ \ ++ _tmp3_m = __lsx_vilvl_b(_tmp1_m, _tmp0_m); \ ++ _tmp0_m = __lsx_vilvl_h(_tmp3_m, _tmp2_m); \ ++ _tmp1_m = __lsx_vilvh_h(_tmp3_m, _tmp2_m); \ ++ \ ++ _out0 = __lsx_vilvl_w(_tmp1_m, _tmp0_m); \ ++ _out2 = __lsx_vilvh_w(_tmp1_m, _tmp0_m); \ ++ _out1 = __lsx_vilvh_d(_out2, _out0); \ ++ _out3 = __lsx_vilvh_d(_out0, _out2); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Transpose 16x8 block with byte elements in vectors ++ * Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7, in8 ++ * in9, in10, in11, in12, in13, in14, in15 ++ * Outputs - out0, out1, out2, out3, out4, out5, out6, out7 ++ * Details : ++ * Example : ++ * 000,001,002,003,004,005,006,007 ++ * 008,009,010,011,012,013,014,015 ++ * 016,017,018,019,020,021,022,023 ++ * 024,025,026,027,028,029,030,031 ++ * 032,033,034,035,036,037,038,039 ++ * 040,041,042,043,044,045,046,047 000,008,...,112,120 ++ * 048,049,050,051,052,053,054,055 001,009,...,113,121 ++ * 056,057,058,059,060,061,062,063 to 002,010,...,114,122 ++ * 064,068,066,067,068,069,070,071 =====> 003,011,...,115,123 ++ * 072,073,074,075,076,077,078,079 004,012,...,116,124 ++ * 080,081,082,083,084,085,086,087 005,013,...,117,125 ++ * 088,089,090,091,092,093,094,095 006,014,...,118,126 ++ * 096,097,098,099,100,101,102,103 007,015,...,119,127 ++ * 104,105,106,107,108,109,110,111 ++ * 112,113,114,115,116,117,118,119 ++ * 120,121,122,123,124,125,126,127 ++ * ============================================================================= ++ */ ++#define LSX_TRANSPOSE16x8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, _in8, \ ++ _in9, _in10, _in11, _in12, _in13, _in14, _in15, _out0, \ ++ _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ ++{ \ ++ __m128i _tmp0, _tmp1, _tmp2, _tmp3, _tmp4, _tmp5, _tmp6, _tmp7; \ ++ __m128i _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ ++ DUP4_ARG2(__lsx_vilvl_b, _in2, _in0, _in3, _in1, _in6, _in4, _in7, _in5, \ ++ _tmp0, _tmp1, _tmp2, _tmp3); \ ++ DUP4_ARG2(__lsx_vilvl_b, _in10, _in8, _in11, _in9, _in14, _in12, _in15, \ ++ _in13, _tmp4, _tmp5, _tmp6, _tmp7); \ ++ DUP2_ARG2(__lsx_vilvl_b, _tmp1, _tmp0, _tmp3, _tmp2, _t0, _t2); \ ++ DUP2_ARG2(__lsx_vilvh_b, _tmp1, _tmp0, _tmp3, _tmp2, _t1, _t3); \ ++ DUP2_ARG2(__lsx_vilvl_b, _tmp5, _tmp4, _tmp7, _tmp6, _t4, _t6); \ ++ DUP2_ARG2(__lsx_vilvh_b, _tmp5, _tmp4, _tmp7, _tmp6, _t5, _t7); \ ++ DUP2_ARG2(__lsx_vilvl_w, _t2, _t0, _t3, _t1, _tmp0, _tmp4); \ ++ DUP2_ARG2(__lsx_vilvh_w, _t2, _t0, _t3, _t1, _tmp2, _tmp6); \ ++ DUP2_ARG2(__lsx_vilvl_w, _t6, _t4, _t7, _t5, _tmp1, _tmp5); \ ++ DUP2_ARG2(__lsx_vilvh_w, _t6, _t4, _t7, _t5, _tmp3, _tmp7); \ ++ DUP2_ARG2(__lsx_vilvl_d, _tmp1, _tmp0, _tmp3, _tmp2, _out0, _out2); \ ++ DUP2_ARG2(__lsx_vilvh_d, _tmp1, _tmp0, _tmp3, _tmp2, _out1, _out3); \ ++ DUP2_ARG2(__lsx_vilvl_d, _tmp5, _tmp4, _tmp7, _tmp6, _out4, _out6); \ ++ DUP2_ARG2(__lsx_vilvh_d, _tmp5, _tmp4, _tmp7, _tmp6, _out5, _out7); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Butterfly of 4 input vectors ++ * Arguments : Inputs - in0, in1, in2, in3 ++ * Outputs - out0, out1, out2, out3 ++ * Details : Butterfly operation ++ * Example : ++ * out0 = in0 + in3; ++ * out1 = in1 + in2; ++ * out2 = in1 - in2; ++ * out3 = in0 - in3; ++ * ============================================================================= ++ */ ++#define LSX_BUTTERFLY_4_B(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++{ \ ++ _out0 = __lsx_vadd_b(_in0, _in3); \ ++ _out1 = __lsx_vadd_b(_in1, _in2); \ ++ _out2 = __lsx_vsub_b(_in1, _in2); \ ++ _out3 = __lsx_vsub_b(_in0, _in3); \ ++} ++#define LSX_BUTTERFLY_4_H(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++{ \ ++ _out0 = __lsx_vadd_h(_in0, _in3); \ ++ _out1 = __lsx_vadd_h(_in1, _in2); \ ++ _out2 = __lsx_vsub_h(_in1, _in2); \ ++ _out3 = __lsx_vsub_h(_in0, _in3); \ ++} ++#define LSX_BUTTERFLY_4_W(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++{ \ ++ _out0 = __lsx_vadd_w(_in0, _in3); \ ++ _out1 = __lsx_vadd_w(_in1, _in2); \ ++ _out2 = __lsx_vsub_w(_in1, _in2); \ ++ _out3 = __lsx_vsub_w(_in0, _in3); \ ++} ++#define LSX_BUTTERFLY_4_D(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++{ \ ++ _out0 = __lsx_vadd_d(_in0, _in3); \ ++ _out1 = __lsx_vadd_d(_in1, _in2); \ ++ _out2 = __lsx_vsub_d(_in1, _in2); \ ++ _out3 = __lsx_vsub_d(_in0, _in3); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Butterfly of 8 input vectors ++ * Arguments : Inputs - _in0, _in1, _in2, _in3, ~ ++ * Outputs - _out0, _out1, _out2, _out3, ~ ++ * Details : Butterfly operation ++ * Example : ++ * _out0 = _in0 + _in7; ++ * _out1 = _in1 + _in6; ++ * _out2 = _in2 + _in5; ++ * _out3 = _in3 + _in4; ++ * _out4 = _in3 - _in4; ++ * _out5 = _in2 - _in5; ++ * _out6 = _in1 - _in6; ++ * _out7 = _in0 - _in7; ++ * ============================================================================= ++ */ ++#define LSX_BUTTERFLY_8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7)\ ++{ \ ++ _out0 = __lsx_vadd_b(_in0, _in7); \ ++ _out1 = __lsx_vadd_b(_in1, _in6); \ ++ _out2 = __lsx_vadd_b(_in2, _in5); \ ++ _out3 = __lsx_vadd_b(_in3, _in4); \ ++ _out4 = __lsx_vsub_b(_in3, _in4); \ ++ _out5 = __lsx_vsub_b(_in2, _in5); \ ++ _out6 = __lsx_vsub_b(_in1, _in6); \ ++ _out7 = __lsx_vsub_b(_in0, _in7); \ ++} ++ ++#define LSX_BUTTERFLY_8_H(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7)\ ++{ \ ++ _out0 = __lsx_vadd_h(_in0, _in7); \ ++ _out1 = __lsx_vadd_h(_in1, _in6); \ ++ _out2 = __lsx_vadd_h(_in2, _in5); \ ++ _out3 = __lsx_vadd_h(_in3, _in4); \ ++ _out4 = __lsx_vsub_h(_in3, _in4); \ ++ _out5 = __lsx_vsub_h(_in2, _in5); \ ++ _out6 = __lsx_vsub_h(_in1, _in6); \ ++ _out7 = __lsx_vsub_h(_in0, _in7); \ ++} ++ ++#define LSX_BUTTERFLY_8_W(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7)\ ++{ \ ++ _out0 = __lsx_vadd_w(_in0, _in7); \ ++ _out1 = __lsx_vadd_w(_in1, _in6); \ ++ _out2 = __lsx_vadd_w(_in2, _in5); \ ++ _out3 = __lsx_vadd_w(_in3, _in4); \ ++ _out4 = __lsx_vsub_w(_in3, _in4); \ ++ _out5 = __lsx_vsub_w(_in2, _in5); \ ++ _out6 = __lsx_vsub_w(_in1, _in6); \ ++ _out7 = __lsx_vsub_w(_in0, _in7); \ ++} ++ ++#define LSX_BUTTERFLY_8_D(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7)\ ++{ \ ++ _out0 = __lsx_vadd_d(_in0, _in7); \ ++ _out1 = __lsx_vadd_d(_in1, _in6); \ ++ _out2 = __lsx_vadd_d(_in2, _in5); \ ++ _out3 = __lsx_vadd_d(_in3, _in4); \ ++ _out4 = __lsx_vsub_d(_in3, _in4); \ ++ _out5 = __lsx_vsub_d(_in2, _in5); \ ++ _out6 = __lsx_vsub_d(_in1, _in6); \ ++ _out7 = __lsx_vsub_d(_in0, _in7); \ ++} ++ ++#endif //LSX ++ ++#ifdef __loongarch_asx ++#include ++/* ++ * ============================================================================= ++ * Description : Dot product of byte vector elements ++ * Arguments : Inputs - in_h, in_l ++ * Output - out ++ * Return Type - signed halfword ++ * Details : Unsigned byte elements from in_h are multiplied with ++ * unsigned byte elements from in_l producing a result ++ * twice the size of input i.e. signed halfword. ++ * Then this multiplied results of adjacent odd-even elements ++ * are added to the out vector ++ * Example : See out = __lasx_xvdp2_w_h(in_h, in_l) ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvdp2_h_bu(__m256i in_h, __m256i in_l) ++{ ++ __m256i out; ++ ++ out = __lasx_xvmulwev_h_bu(in_h, in_l); ++ out = __lasx_xvmaddwod_h_bu(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product of byte vector elements ++ * Arguments : Inputs - in_h, in_l ++ * Output - out ++ * Return Type - signed halfword ++ * Details : Signed byte elements from in_h are multiplied with ++ * signed byte elements from in_l producing a result ++ * twice the size of input i.e. signed halfword. ++ * Then this iniplication results of adjacent odd-even elements ++ * are added to the out vector ++ * Example : See out = __lasx_xvdp2_w_h(in_h, in_l) ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvdp2_h_b(__m256i in_h, __m256i in_l) ++{ ++ __m256i out; ++ ++ out = __lasx_xvmulwev_h_b(in_h, in_l); ++ out = __lasx_xvmaddwod_h_b(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product of halfword vector elements ++ * Arguments : Inputs - in_h, in_l ++ * Output - out ++ * Return Type - signed word ++ * Details : Signed halfword elements from in_h are multiplied with ++ * signed halfword elements from in_l producing a result ++ * twice the size of input i.e. signed word. ++ * Then this multiplied results of adjacent odd-even elements ++ * are added to the out vector. ++ * Example : out = __lasx_xvdp2_w_h(in_h, in_l) ++ * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * in_l : 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1 ++ * out : 22,38,38,22, 22,38,38,22 ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvdp2_w_h(__m256i in_h, __m256i in_l) ++{ ++ __m256i out; ++ ++ out = __lasx_xvmulwev_w_h(in_h, in_l); ++ out = __lasx_xvmaddwod_w_h(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product of word vector elements ++ * Arguments : Inputs - in_h, in_l ++ * Output - out ++ * Retrun Type - signed double ++ * Details : Signed word elements from in_h are multiplied with ++ * signed word elements from in_l producing a result ++ * twice the size of input i.e. signed double word. ++ * Then this multiplied results of adjacent odd-even elements ++ * are added to the out vector. ++ * Example : See out = __lasx_xvdp2_w_h(in_h, in_l) ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvdp2_d_w(__m256i in_h, __m256i in_l) ++{ ++ __m256i out; ++ ++ out = __lasx_xvmulwev_d_w(in_h, in_l); ++ out = __lasx_xvmaddwod_d_w(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product of halfword vector elements ++ * Arguments : Inputs - in_h, in_l ++ * Output - out ++ * Return Type - signed word ++ * Details : Unsigned halfword elements from in_h are multiplied with ++ * signed halfword elements from in_l producing a result ++ * twice the size of input i.e. unsigned word. ++ * Multiplication result of adjacent odd-even elements ++ * are added to the out vector ++ * Example : See out = __lasx_xvdp2_w_h(in_h, in_l) ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvdp2_w_hu_h(__m256i in_h, __m256i in_l) ++{ ++ __m256i out; ++ ++ out = __lasx_xvmulwev_w_hu_h(in_h, in_l); ++ out = __lasx_xvmaddwod_w_hu_h(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product & addition of byte vector elements ++ * Arguments : Inputs - in_h, in_l ++ * Output - out ++ * Retrun Type - halfword ++ * Details : Signed byte elements from in_h are multiplied with ++ * signed byte elements from in_l producing a result ++ * twice the size of input i.e. signed halfword. ++ * Then this multiplied results of adjacent odd-even elements ++ * are added to the in_c vector. ++ * Example : See out = __lasx_xvdp2add_w_h(in_c, in_h, in_l) ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvdp2add_h_b(__m256i in_c,__m256i in_h, __m256i in_l) ++{ ++ __m256i out; ++ ++ out = __lasx_xvmaddwev_h_b(in_c, in_h, in_l); ++ out = __lasx_xvmaddwod_h_b(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product of halfword vector elements ++ * Arguments : Inputs - in_c, in_h, in_l ++ * Output - out ++ * Return Type - per RTYPE ++ * Details : Signed halfword elements from in_h are multiplied with ++ * signed halfword elements from in_l producing a result ++ * twice the size of input i.e. signed word. ++ * Multiplication result of adjacent odd-even elements ++ * are added to the in_c vector. ++ * Example : out = __lasx_xvdp2add_w_h(in_c, in_h, in_l) ++ * in_c : 1,2,3,4, 1,2,3,4 ++ * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8, ++ * in_l : 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1, ++ * out : 23,40,41,26, 23,40,41,26 ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvdp2add_w_h(__m256i in_c, __m256i in_h, __m256i in_l) ++{ ++ __m256i out; ++ ++ out = __lasx_xvmaddwev_w_h(in_c, in_h, in_l); ++ out = __lasx_xvmaddwod_w_h(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product of halfword vector elements ++ * Arguments : Inputs - in_c, in_h, in_l ++ * Output - out ++ * Return Type - signed word ++ * Details : Unsigned halfword elements from in_h are multiplied with ++ * unsigned halfword elements from in_l producing a result ++ * twice the size of input i.e. signed word. ++ * Multiplication result of adjacent odd-even elements ++ * are added to the in_c vector. ++ * Example : See out = __lasx_xvdp2add_w_h(in_c, in_h, in_l) ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvdp2add_w_hu(__m256i in_c, __m256i in_h, __m256i in_l) ++{ ++ __m256i out; ++ ++ out = __lasx_xvmaddwev_w_hu(in_c, in_h, in_l); ++ out = __lasx_xvmaddwod_w_hu(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product of halfword vector elements ++ * Arguments : Inputs - in_c, in_h, in_l ++ * Output - out ++ * Return Type - signed word ++ * Details : Unsigned halfword elements from in_h are multiplied with ++ * signed halfword elements from in_l producing a result ++ * twice the size of input i.e. signed word. ++ * Multiplication result of adjacent odd-even elements ++ * are added to the in_c vector ++ * Example : See out = __lasx_xvdp2add_w_h(in_c, in_h, in_l) ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvdp2add_w_hu_h(__m256i in_c, __m256i in_h, __m256i in_l) ++{ ++ __m256i out; ++ ++ out = __lasx_xvmaddwev_w_hu_h(in_c, in_h, in_l); ++ out = __lasx_xvmaddwod_w_hu_h(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Vector Unsigned Dot Product and Subtract ++ * Arguments : Inputs - in_c, in_h, in_l ++ * Output - out ++ * Return Type - signed halfword ++ * Details : Unsigned byte elements from in_h are multiplied with ++ * unsigned byte elements from in_l producing a result ++ * twice the size of input i.e. signed halfword. ++ * Multiplication result of adjacent odd-even elements ++ * are added together and subtracted from double width elements ++ * in_c vector. ++ * Example : See out = __lasx_xvdp2sub_w_h(in_c, in_h, in_l) ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvdp2sub_h_bu(__m256i in_c, __m256i in_h, __m256i in_l) ++{ ++ __m256i out; ++ ++ out = __lasx_xvmulwev_h_bu(in_h, in_l); ++ out = __lasx_xvmaddwod_h_bu(out, in_h, in_l); ++ out = __lasx_xvsub_h(in_c, out); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Vector Signed Dot Product and Subtract ++ * Arguments : Inputs - in_c, in_h, in_l ++ * Output - out ++ * Return Type - signed word ++ * Details : Signed halfword elements from in_h are multiplied with ++ * Signed halfword elements from in_l producing a result ++ * twice the size of input i.e. signed word. ++ * Multiplication result of adjacent odd-even elements ++ * are added together and subtracted from double width elements ++ * in_c vector. ++ * Example : out = __lasx_xvdp2sub_w_h(in_c, in_h, in_l) ++ * in_c : 0,0,0,0, 0,0,0,0 ++ * in_h : 3,1,3,0, 0,0,0,1, 0,0,1,1, 0,0,0,1 ++ * in_l : 2,1,1,0, 1,0,0,0, 0,0,1,0, 1,0,0,1 ++ * out : -7,-3,0,0, 0,-1,0,-1 ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvdp2sub_w_h(__m256i in_c, __m256i in_h, __m256i in_l) ++{ ++ __m256i out; ++ ++ out = __lasx_xvmulwev_w_h(in_h, in_l); ++ out = __lasx_xvmaddwod_w_h(out, in_h, in_l); ++ out = __lasx_xvsub_w(in_c, out); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product of halfword vector elements ++ * Arguments : Inputs - in_h, in_l ++ * Output - out ++ * Return Type - signed word ++ * Details : Signed halfword elements from in_h are iniplied with ++ * signed halfword elements from in_l producing a result ++ * four times the size of input i.e. signed doubleword. ++ * Then this iniplication results of four adjacent elements ++ * are added together and stored to the out vector. ++ * Example : out = __lasx_xvdp4_d_h(in_h, in_l) ++ * in_h : 3,1,3,0, 0,0,0,1, 0,0,1,-1, 0,0,0,1 ++ * in_l : -2,1,1,0, 1,0,0,0, 0,0,1, 0, 1,0,0,1 ++ * out : -2,0,1,1 ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvdp4_d_h(__m256i in_h, __m256i in_l) ++{ ++ __m256i out; ++ ++ out = __lasx_xvmulwev_w_h(in_h, in_l); ++ out = __lasx_xvmaddwod_w_h(out, in_h, in_l); ++ out = __lasx_xvhaddw_d_w(out, out); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : The high half of the vector elements are expanded and ++ * added after being doubled. ++ * Arguments : Inputs - in_h, in_l ++ * Output - out ++ * Details : The in_h vector and the in_l vector are added after the ++ * higher half of the two-fold sign extension (signed byte ++ * to signed halfword) and stored to the out vector. ++ * Example : See out = __lasx_xvaddwh_w_h(in_h, in_l) ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvaddwh_h_b(__m256i in_h, __m256i in_l) ++{ ++ __m256i out; ++ ++ out = __lasx_xvilvh_b(in_h, in_l); ++ out = __lasx_xvhaddw_h_b(out, out); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : The high half of the vector elements are expanded and ++ * added after being doubled. ++ * Arguments : Inputs - in_h, in_l ++ * Output - out ++ * Details : The in_h vector and the in_l vector are added after the ++ * higher half of the two-fold sign extension (signed halfword ++ * to signed word) and stored to the out vector. ++ * Example : out = __lasx_xvaddwh_w_h(in_h, in_l) ++ * in_h : 3, 0,3,0, 0,0,0,-1, 0,0,1,-1, 0,0,0,1 ++ * in_l : 2,-1,1,2, 1,0,0, 0, 1,0,1, 0, 1,0,0,1 ++ * out : 1,0,0,-1, 1,0,0, 2 ++ * ============================================================================= ++ */ ++ static inline __m256i __lasx_xvaddwh_w_h(__m256i in_h, __m256i in_l) ++{ ++ __m256i out; ++ ++ out = __lasx_xvilvh_h(in_h, in_l); ++ out = __lasx_xvhaddw_w_h(out, out); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : The low half of the vector elements are expanded and ++ * added after being doubled. ++ * Arguments : Inputs - in_h, in_l ++ * Output - out ++ * Details : The in_h vector and the in_l vector are added after the ++ * lower half of the two-fold sign extension (signed byte ++ * to signed halfword) and stored to the out vector. ++ * Example : See out = __lasx_xvaddwl_w_h(in_h, in_l) ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvaddwl_h_b(__m256i in_h, __m256i in_l) ++{ ++ __m256i out; ++ ++ out = __lasx_xvilvl_b(in_h, in_l); ++ out = __lasx_xvhaddw_h_b(out, out); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : The low half of the vector elements are expanded and ++ * added after being doubled. ++ * Arguments : Inputs - in_h, in_l ++ * Output - out ++ * Details : The in_h vector and the in_l vector are added after the ++ * lower half of the two-fold sign extension (signed halfword ++ * to signed word) and stored to the out vector. ++ * Example : out = __lasx_xvaddwl_w_h(in_h, in_l) ++ * in_h : 3, 0,3,0, 0,0,0,-1, 0,0,1,-1, 0,0,0,1 ++ * in_l : 2,-1,1,2, 1,0,0, 0, 1,0,1, 0, 1,0,0,1 ++ * out : 5,-1,4,2, 1,0,2,-1 ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvaddwl_w_h(__m256i in_h, __m256i in_l) ++{ ++ __m256i out; ++ ++ out = __lasx_xvilvl_h(in_h, in_l); ++ out = __lasx_xvhaddw_w_h(out, out); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : The low half of the vector elements are expanded and ++ * added after being doubled. ++ * Arguments : Inputs - in_h, in_l ++ * Output - out ++ * Details : The out vector and the out vector are added after the ++ * lower half of the two-fold zero extension (unsigned byte ++ * to unsigned halfword) and stored to the out vector. ++ * Example : See out = __lasx_xvaddwl_w_h(in_h, in_l) ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvaddwl_h_bu(__m256i in_h, __m256i in_l) ++{ ++ __m256i out; ++ ++ out = __lasx_xvilvl_b(in_h, in_l); ++ out = __lasx_xvhaddw_hu_bu(out, out); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : The low half of the vector elements are expanded and ++ * added after being doubled. ++ * Arguments : Inputs - in_h, in_l ++ * Output - out ++ * Details : The in_l vector after double zero extension (unsigned byte to ++ * signed halfword),added to the in_h vector. ++ * Example : See out = __lasx_xvaddw_w_w_h(in_h, in_l) ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvaddw_h_h_bu(__m256i in_h, __m256i in_l) ++{ ++ __m256i out; ++ ++ out = __lasx_xvsllwil_hu_bu(in_l, 0); ++ out = __lasx_xvadd_h(in_h, out); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : The low half of the vector elements are expanded and ++ * added after being doubled. ++ * Arguments : Inputs - in_h, in_l ++ * Output - out ++ * Details : The in_l vector after double sign extension (signed halfword to ++ * signed word), added to the in_h vector. ++ * Example : out = __lasx_xvaddw_w_w_h(in_h, in_l) ++ * in_h : 0, 1,0,0, -1,0,0,1, ++ * in_l : 2,-1,1,2, 1,0,0,0, 0,0,1,0, 1,0,0,1, ++ * out : 2, 0,1,2, -1,0,1,1, ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvaddw_w_w_h(__m256i in_h, __m256i in_l) ++{ ++ __m256i out; ++ ++ out = __lasx_xvsllwil_w_h(in_l, 0); ++ out = __lasx_xvadd_w(in_h, out); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Multiplication and addition calculation after expansion ++ * of the lower half of the vector. ++ * Arguments : Inputs - in_c, in_h, in_l ++ * Output - out ++ * Details : The in_h vector and the in_l vector are multiplied after ++ * the lower half of the two-fold sign extension (signed halfword ++ * to signed word), and the result is added to the vector in_c, ++ * then stored to the out vector. ++ * Example : out = __lasx_xvmaddwl_w_h(in_c, in_h, in_l) ++ * in_c : 1,2,3,4, 5,6,7,8 ++ * in_h : 1,2,3,4, 1,2,3,4, 5,6,7,8, 5,6,7,8 ++ * in_l : 200, 300, 400, 500, 2000, 3000, 4000, 5000, ++ * -200,-300,-400,-500, -2000,-3000,-4000,-5000 ++ * out : 201, 602,1203,2004, -995, -1794,-2793,-3992 ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvmaddwl_w_h(__m256i in_c, __m256i in_h, __m256i in_l) ++{ ++ __m256i tmp0, tmp1, out; ++ ++ tmp0 = __lasx_xvsllwil_w_h(in_h, 0); ++ tmp1 = __lasx_xvsllwil_w_h(in_l, 0); ++ tmp0 = __lasx_xvmul_w(tmp0, tmp1); ++ out = __lasx_xvadd_w(tmp0, in_c); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Multiplication and addition calculation after expansion ++ * of the higher half of the vector. ++ * Arguments : Inputs - in_c, in_h, in_l ++ * Output - out ++ * Details : The in_h vector and the in_l vector are multiplied after ++ * the higher half of the two-fold sign extension (signed ++ * halfword to signed word), and the result is added to ++ * the vector in_c, then stored to the out vector. ++ * Example : See out = __lasx_xvmaddwl_w_h(in_c, in_h, in_l) ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvmaddwh_w_h(__m256i in_c, __m256i in_h, __m256i in_l) ++{ ++ __m256i tmp0, tmp1, out; ++ ++ tmp0 = __lasx_xvilvh_h(in_h, in_h); ++ tmp1 = __lasx_xvilvh_h(in_l, in_l); ++ tmp0 = __lasx_xvmulwev_w_h(tmp0, tmp1); ++ out = __lasx_xvadd_w(tmp0, in_c); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Multiplication calculation after expansion of the lower ++ * half of the vector. ++ * Arguments : Inputs - in_h, in_l ++ * Output - out ++ * Details : The in_h vector and the in_l vector are multiplied after ++ * the lower half of the two-fold sign extension (signed ++ * halfword to signed word), then stored to the out vector. ++ * Example : out = __lasx_xvmulwl_w_h(in_h, in_l) ++ * in_h : 3,-1,3,0, 0,0,0,-1, 0,0,1,-1, 0,0,0,1 ++ * in_l : 2,-1,1,2, 1,0,0, 0, 0,0,1, 0, 1,0,0,1 ++ * out : 6,1,3,0, 0,0,1,0 ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvmulwl_w_h(__m256i in_h, __m256i in_l) ++{ ++ __m256i tmp0, tmp1, out; ++ ++ tmp0 = __lasx_xvsllwil_w_h(in_h, 0); ++ tmp1 = __lasx_xvsllwil_w_h(in_l, 0); ++ out = __lasx_xvmul_w(tmp0, tmp1); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Multiplication calculation after expansion of the lower ++ * half of the vector. ++ * Arguments : Inputs - in_h, in_l ++ * Output - out ++ * Details : The in_h vector and the in_l vector are multiplied after ++ * the lower half of the two-fold sign extension (signed ++ * halfword to signed word), then stored to the out vector. ++ * Example : out = __lasx_xvmulwh_w_h(in_h, in_l) ++ * in_h : 3,-1,3,0, 0,0,0,-1, 0,0,1,-1, 0,0,0,1 ++ * in_l : 2,-1,1,2, 1,0,0, 0, 0,0,1, 0, 1,0,0,1 ++ * out : 0,0,0,0, 0,0,0,1 ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvmulwh_w_h(__m256i in_h, __m256i in_l) ++{ ++ __m256i tmp0, tmp1, out; ++ ++ tmp0 = __lasx_xvilvh_h(in_h, in_h); ++ tmp1 = __lasx_xvilvh_h(in_l, in_l); ++ out = __lasx_xvmulwev_w_h(tmp0, tmp1); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : The low half of the vector elements are expanded and ++ * added saturately after being doubled. ++ * Arguments : Inputs - in_h, in_l ++ * Output - out ++ * Details : The in_h vector adds the in_l vector saturately after the lower ++ * half of the two-fold zero extension (unsigned byte to unsigned ++ * halfword) and the results are stored to the out vector. ++ * Example : out = __lasx_xvsaddw_hu_hu_bu(in_h, in_l) ++ * in_h : 2,65532,1,2, 1,0,0,0, 0,0,1,0, 1,0,0,1 ++ * in_l : 3,6,3,0, 0,0,0,1, 0,0,1,1, 0,0,0,1, 3,18,3,0, 0,0,0,1, 0,0,1,1, 0,0,0,1 ++ * out : 5,65535,4,2, 1,0,0,1, 3,18,4,0, 1,0,0,2, ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvsaddw_hu_hu_bu(__m256i in_h, __m256i in_l) ++{ ++ __m256i tmp1, out; ++ __m256i zero = {0}; ++ ++ tmp1 = __lasx_xvilvl_b(zero, in_l); ++ out = __lasx_xvsadd_hu(in_h, tmp1); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Clip all halfword elements of input vector between min & max ++ * out = ((in) < (min)) ? (min) : (((in) > (max)) ? (max) : (in)) ++ * Arguments : Inputs - in (input vector) ++ * - min (min threshold) ++ * - max (max threshold) ++ * Outputs - in (output vector with clipped elements) ++ * Return Type - signed halfword ++ * Example : out = __lasx_xvclip_h(in, min, max) ++ * in : -8,2,280,249, -8,255,280,249, 4,4,4,4, 5,5,5,5 ++ * min : 1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1 ++ * max : 9,9,9,9, 9,9,9,9, 9,9,9,9, 9,9,9,9 ++ * out : 1,2,9,9, 1,9,9,9, 4,4,4,4, 5,5,5,5 ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvclip_h(__m256i in, __m256i min, __m256i max) ++{ ++ __m256i out; ++ ++ out = __lasx_xvmax_h(min, in); ++ out = __lasx_xvmin_h(max, out); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Clip all signed halfword elements of input vector ++ * between 0 & 255 ++ * Arguments : Inputs - in (input vector) ++ * Outputs - out (output vector with clipped elements) ++ * Return Type - signed halfword ++ * Example : See out = __lasx_xvclamp255_w(in) ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvclip255_h(__m256i in) ++{ ++ __m256i out; ++ ++ out = __lasx_xvmaxi_h(in, 0); ++ out = __lasx_xvsat_hu(out, 7); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Clip all signed word elements of input vector ++ * between 0 & 255 ++ * Arguments : Inputs - in (input vector) ++ * Output - out (output vector with clipped elements) ++ * Return Type - signed word ++ * Example : out = __lasx_xvclamp255_w(in) ++ * in : -8,255,280,249, -8,255,280,249 ++ * out : 0,255,255,249, 0,255,255,249 ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvclip255_w(__m256i in) ++{ ++ __m256i out; ++ ++ out = __lasx_xvmaxi_w(in, 0); ++ out = __lasx_xvsat_wu(out, 7); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Indexed halfword element values are replicated to all ++ * elements in output vector. If 'indx < 8' use xvsplati_l_*, ++ * if 'indx >= 8' use xvsplati_h_*. ++ * Arguments : Inputs - in, idx ++ * Output - out ++ * Details : Idx element value from in vector is replicated to all ++ * elements in out vector. ++ * Valid index range for halfword operation is 0-7 ++ * Example : out = __lasx_xvsplati_l_h(in, idx) ++ * in : 20,10,11,12, 13,14,15,16, 0,0,2,0, 0,0,0,0 ++ * idx : 0x02 ++ * out : 11,11,11,11, 11,11,11,11, 11,11,11,11, 11,11,11,11 ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvsplati_l_h(__m256i in, int idx) ++{ ++ __m256i out; ++ ++ out = __lasx_xvpermi_q(in, in, 0x02); ++ out = __lasx_xvreplve_h(out, idx); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Indexed halfword element values are replicated to all ++ * elements in output vector. If 'indx < 8' use xvsplati_l_*, ++ * if 'indx >= 8' use xvsplati_h_*. ++ * Arguments : Inputs - in, idx ++ * Output - out ++ * Details : Idx element value from in vector is replicated to all ++ * elements in out vector. ++ * Valid index range for halfword operation is 0-7 ++ * Example : out = __lasx_xvsplati_h_h(in, idx) ++ * in : 20,10,11,12, 13,14,15,16, 0,2,0,0, 0,0,0,0 ++ * idx : 0x09 ++ * out : 2,2,2,2, 2,2,2,2, 2,2,2,2, 2,2,2,2 ++ * ============================================================================= ++ */ ++ ++static inline __m256i __lasx_xvsplati_h_h(__m256i in, int idx) ++{ ++ __m256i out; ++ ++ out = __lasx_xvpermi_q(in, in, 0x13); ++ out = __lasx_xvreplve_h(out, idx); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Transpose 4x4 block with double word elements in vectors ++ * Arguments : Inputs - _in0, _in1, _in2, _in3 ++ * Outputs - _out0, _out1, _out2, _out3 ++ * Example : LASX_TRANSPOSE4x4_D ++ * _in0 : 1,2,3,4 ++ * _in1 : 1,2,3,4 ++ * _in2 : 1,2,3,4 ++ * _in3 : 1,2,3,4 ++ * ++ * _out0 : 1,1,1,1 ++ * _out1 : 2,2,2,2 ++ * _out2 : 3,3,3,3 ++ * _out3 : 4,4,4,4 ++ * ============================================================================= ++ */ ++#define LASX_TRANSPOSE4x4_D(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++{ \ ++ __m256i _tmp0, _tmp1, _tmp2, _tmp3; \ ++ _tmp0 = __lasx_xvilvl_d(_in1, _in0); \ ++ _tmp1 = __lasx_xvilvh_d(_in1, _in0); \ ++ _tmp2 = __lasx_xvilvl_d(_in3, _in2); \ ++ _tmp3 = __lasx_xvilvh_d(_in3, _in2); \ ++ _out0 = __lasx_xvpermi_q(_tmp2, _tmp0, 0x20); \ ++ _out2 = __lasx_xvpermi_q(_tmp2, _tmp0, 0x31); \ ++ _out1 = __lasx_xvpermi_q(_tmp3, _tmp1, 0x20); \ ++ _out3 = __lasx_xvpermi_q(_tmp3, _tmp1, 0x31); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Transpose 8x8 block with word elements in vectors ++ * Arguments : Inputs - _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7 ++ * Outputs - _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7 ++ * Example : LASX_TRANSPOSE8x8_W ++ * _in0 : 1,2,3,4,5,6,7,8 ++ * _in1 : 2,2,3,4,5,6,7,8 ++ * _in2 : 3,2,3,4,5,6,7,8 ++ * _in3 : 4,2,3,4,5,6,7,8 ++ * _in4 : 5,2,3,4,5,6,7,8 ++ * _in5 : 6,2,3,4,5,6,7,8 ++ * _in6 : 7,2,3,4,5,6,7,8 ++ * _in7 : 8,2,3,4,5,6,7,8 ++ * ++ * _out0 : 1,2,3,4,5,6,7,8 ++ * _out1 : 2,2,2,2,2,2,2,2 ++ * _out2 : 3,3,3,3,3,3,3,3 ++ * _out3 : 4,4,4,4,4,4,4,4 ++ * _out4 : 5,5,5,5,5,5,5,5 ++ * _out5 : 6,6,6,6,6,6,6,6 ++ * _out6 : 7,7,7,7,7,7,7,7 ++ * _out7 : 8,8,8,8,8,8,8,8 ++ * ============================================================================= ++ */ ++#define LASX_TRANSPOSE8x8_W(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ ++{ \ ++ __m256i _s0_m, _s1_m; \ ++ __m256i _tmp0_m, _tmp1_m, _tmp2_m, _tmp3_m; \ ++ __m256i _tmp4_m, _tmp5_m, _tmp6_m, _tmp7_m; \ ++ \ ++ _s0_m = __lasx_xvilvl_w(_in2, _in0); \ ++ _s1_m = __lasx_xvilvl_w(_in3, _in1); \ ++ _tmp0_m = __lasx_xvilvl_w(_s1_m, _s0_m); \ ++ _tmp1_m = __lasx_xvilvh_w(_s1_m, _s0_m); \ ++ _s0_m = __lasx_xvilvh_w(_in2, _in0); \ ++ _s1_m = __lasx_xvilvh_w(_in3, _in1); \ ++ _tmp2_m = __lasx_xvilvl_w(_s1_m, _s0_m); \ ++ _tmp3_m = __lasx_xvilvh_w(_s1_m, _s0_m); \ ++ _s0_m = __lasx_xvilvl_w(_in6, _in4); \ ++ _s1_m = __lasx_xvilvl_w(_in7, _in5); \ ++ _tmp4_m = __lasx_xvilvl_w(_s1_m, _s0_m); \ ++ _tmp5_m = __lasx_xvilvh_w(_s1_m, _s0_m); \ ++ _s0_m = __lasx_xvilvh_w(_in6, _in4); \ ++ _s1_m = __lasx_xvilvh_w(_in7, _in5); \ ++ _tmp6_m = __lasx_xvilvl_w(_s1_m, _s0_m); \ ++ _tmp7_m = __lasx_xvilvh_w(_s1_m, _s0_m); \ ++ _out0 = __lasx_xvpermi_q(_tmp4_m, _tmp0_m, 0x20); \ ++ _out1 = __lasx_xvpermi_q(_tmp5_m, _tmp1_m, 0x20); \ ++ _out2 = __lasx_xvpermi_q(_tmp6_m, _tmp2_m, 0x20); \ ++ _out3 = __lasx_xvpermi_q(_tmp7_m, _tmp3_m, 0x20); \ ++ _out4 = __lasx_xvpermi_q(_tmp4_m, _tmp0_m, 0x31); \ ++ _out5 = __lasx_xvpermi_q(_tmp5_m, _tmp1_m, 0x31); \ ++ _out6 = __lasx_xvpermi_q(_tmp6_m, _tmp2_m, 0x31); \ ++ _out7 = __lasx_xvpermi_q(_tmp7_m, _tmp3_m, 0x31); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Transpose input 16x8 byte block ++ * Arguments : Inputs - _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, ++ * _in8, _in9, _in10, _in11, _in12, _in13, _in14, _in15 ++ * (input 16x8 byte block) ++ * Outputs - _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7 ++ * (output 8x16 byte block) ++ * Details : The rows of the matrix become columns, and the columns become rows. ++ * Example : See LASX_TRANSPOSE16x8_H ++ * ============================================================================= ++ */ ++#define LASX_TRANSPOSE16x8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _in8, _in9, _in10, _in11, _in12, _in13, _in14, _in15, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ ++{ \ ++ __m256i _tmp0_m, _tmp1_m, _tmp2_m, _tmp3_m; \ ++ __m256i _tmp4_m, _tmp5_m, _tmp6_m, _tmp7_m; \ ++ __m256i _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ ++ \ ++ _tmp0_m = __lasx_xvilvl_b(_in2, _in0); \ ++ _tmp1_m = __lasx_xvilvl_b(_in3, _in1); \ ++ _tmp2_m = __lasx_xvilvl_b(_in6, _in4); \ ++ _tmp3_m = __lasx_xvilvl_b(_in7, _in5); \ ++ _tmp4_m = __lasx_xvilvl_b(_in10, _in8); \ ++ _tmp5_m = __lasx_xvilvl_b(_in11, _in9); \ ++ _tmp6_m = __lasx_xvilvl_b(_in14, _in12); \ ++ _tmp7_m = __lasx_xvilvl_b(_in15, _in13); \ ++ _t0 = __lasx_xvilvl_b(_tmp1_m, _tmp0_m); \ ++ _t1 = __lasx_xvilvh_b(_tmp1_m, _tmp0_m); \ ++ _t2 = __lasx_xvilvl_b(_tmp3_m, _tmp2_m); \ ++ _t3 = __lasx_xvilvh_b(_tmp3_m, _tmp2_m); \ ++ _t4 = __lasx_xvilvl_b(_tmp5_m, _tmp4_m); \ ++ _t5 = __lasx_xvilvh_b(_tmp5_m, _tmp4_m); \ ++ _t6 = __lasx_xvilvl_b(_tmp7_m, _tmp6_m); \ ++ _t7 = __lasx_xvilvh_b(_tmp7_m, _tmp6_m); \ ++ _tmp0_m = __lasx_xvilvl_w(_t2, _t0); \ ++ _tmp2_m = __lasx_xvilvh_w(_t2, _t0); \ ++ _tmp4_m = __lasx_xvilvl_w(_t3, _t1); \ ++ _tmp6_m = __lasx_xvilvh_w(_t3, _t1); \ ++ _tmp1_m = __lasx_xvilvl_w(_t6, _t4); \ ++ _tmp3_m = __lasx_xvilvh_w(_t6, _t4); \ ++ _tmp5_m = __lasx_xvilvl_w(_t7, _t5); \ ++ _tmp7_m = __lasx_xvilvh_w(_t7, _t5); \ ++ _out0 = __lasx_xvilvl_d(_tmp1_m, _tmp0_m); \ ++ _out1 = __lasx_xvilvh_d(_tmp1_m, _tmp0_m); \ ++ _out2 = __lasx_xvilvl_d(_tmp3_m, _tmp2_m); \ ++ _out3 = __lasx_xvilvh_d(_tmp3_m, _tmp2_m); \ ++ _out4 = __lasx_xvilvl_d(_tmp5_m, _tmp4_m); \ ++ _out5 = __lasx_xvilvh_d(_tmp5_m, _tmp4_m); \ ++ _out6 = __lasx_xvilvl_d(_tmp7_m, _tmp6_m); \ ++ _out7 = __lasx_xvilvh_d(_tmp7_m, _tmp6_m); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Transpose input 16x8 byte block ++ * Arguments : Inputs - _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, ++ * _in8, _in9, _in10, _in11, _in12, _in13, _in14, _in15 ++ * (input 16x8 byte block) ++ * Outputs - _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7 ++ * (output 8x16 byte block) ++ * Details : The rows of the matrix become columns, and the columns become rows. ++ * Example : LASX_TRANSPOSE16x8_H ++ * _in0 : 1,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * _in1 : 2,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * _in2 : 3,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * _in3 : 4,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * _in4 : 5,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * _in5 : 6,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * _in6 : 7,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * _in7 : 8,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * _in8 : 9,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * _in9 : 1,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * _in10 : 0,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * _in11 : 2,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * _in12 : 3,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * _in13 : 7,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * _in14 : 5,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * _in15 : 6,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 ++ * ++ * _out0 : 1,2,3,4,5,6,7,8,9,1,0,2,3,7,5,6 ++ * _out1 : 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ++ * _out2 : 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ++ * _out3 : 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 ++ * _out4 : 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ++ * _out5 : 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ++ * _out6 : 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ++ * _out7 : 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ++ * ============================================================================= ++ */ ++#define LASX_TRANSPOSE16x8_H(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _in8, _in9, _in10, _in11, _in12, _in13, _in14, _in15, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ ++ { \ ++ __m256i _tmp0_m, _tmp1_m, _tmp2_m, _tmp3_m; \ ++ __m256i _tmp4_m, _tmp5_m, _tmp6_m, _tmp7_m; \ ++ __m256i _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ ++ \ ++ _tmp0_m = __lasx_xvilvl_h(_in2, _in0); \ ++ _tmp1_m = __lasx_xvilvl_h(_in3, _in1); \ ++ _tmp2_m = __lasx_xvilvl_h(_in6, _in4); \ ++ _tmp3_m = __lasx_xvilvl_h(_in7, _in5); \ ++ _tmp4_m = __lasx_xvilvl_h(_in10, _in8); \ ++ _tmp5_m = __lasx_xvilvl_h(_in11, _in9); \ ++ _tmp6_m = __lasx_xvilvl_h(_in14, _in12); \ ++ _tmp7_m = __lasx_xvilvl_h(_in15, _in13); \ ++ _t0 = __lasx_xvilvl_h(_tmp1_m, _tmp0_m); \ ++ _t1 = __lasx_xvilvh_h(_tmp1_m, _tmp0_m); \ ++ _t2 = __lasx_xvilvl_h(_tmp3_m, _tmp2_m); \ ++ _t3 = __lasx_xvilvh_h(_tmp3_m, _tmp2_m); \ ++ _t4 = __lasx_xvilvl_h(_tmp5_m, _tmp4_m); \ ++ _t5 = __lasx_xvilvh_h(_tmp5_m, _tmp4_m); \ ++ _t6 = __lasx_xvilvl_h(_tmp7_m, _tmp6_m); \ ++ _t7 = __lasx_xvilvh_h(_tmp7_m, _tmp6_m); \ ++ _tmp0_m = __lasx_xvilvl_d(_t2, _t0); \ ++ _tmp2_m = __lasx_xvilvh_d(_t2, _t0); \ ++ _tmp4_m = __lasx_xvilvl_d(_t3, _t1); \ ++ _tmp6_m = __lasx_xvilvh_d(_t3, _t1); \ ++ _tmp1_m = __lasx_xvilvl_d(_t6, _t4); \ ++ _tmp3_m = __lasx_xvilvh_d(_t6, _t4); \ ++ _tmp5_m = __lasx_xvilvl_d(_t7, _t5); \ ++ _tmp7_m = __lasx_xvilvh_d(_t7, _t5); \ ++ _out0 = __lasx_xvpermi_q(_tmp1_m, _tmp0_m, 0x20); \ ++ _out1 = __lasx_xvpermi_q(_tmp3_m, _tmp2_m, 0x20); \ ++ _out2 = __lasx_xvpermi_q(_tmp5_m, _tmp4_m, 0x20); \ ++ _out3 = __lasx_xvpermi_q(_tmp7_m, _tmp6_m, 0x20); \ ++ \ ++ _tmp0_m = __lasx_xvilvh_h(_in2, _in0); \ ++ _tmp1_m = __lasx_xvilvh_h(_in3, _in1); \ ++ _tmp2_m = __lasx_xvilvh_h(_in6, _in4); \ ++ _tmp3_m = __lasx_xvilvh_h(_in7, _in5); \ ++ _tmp4_m = __lasx_xvilvh_h(_in10, _in8); \ ++ _tmp5_m = __lasx_xvilvh_h(_in11, _in9); \ ++ _tmp6_m = __lasx_xvilvh_h(_in14, _in12); \ ++ _tmp7_m = __lasx_xvilvh_h(_in15, _in13); \ ++ _t0 = __lasx_xvilvl_h(_tmp1_m, _tmp0_m); \ ++ _t1 = __lasx_xvilvh_h(_tmp1_m, _tmp0_m); \ ++ _t2 = __lasx_xvilvl_h(_tmp3_m, _tmp2_m); \ ++ _t3 = __lasx_xvilvh_h(_tmp3_m, _tmp2_m); \ ++ _t4 = __lasx_xvilvl_h(_tmp5_m, _tmp4_m); \ ++ _t5 = __lasx_xvilvh_h(_tmp5_m, _tmp4_m); \ ++ _t6 = __lasx_xvilvl_h(_tmp7_m, _tmp6_m); \ ++ _t7 = __lasx_xvilvh_h(_tmp7_m, _tmp6_m); \ ++ _tmp0_m = __lasx_xvilvl_d(_t2, _t0); \ ++ _tmp2_m = __lasx_xvilvh_d(_t2, _t0); \ ++ _tmp4_m = __lasx_xvilvl_d(_t3, _t1); \ ++ _tmp6_m = __lasx_xvilvh_d(_t3, _t1); \ ++ _tmp1_m = __lasx_xvilvl_d(_t6, _t4); \ ++ _tmp3_m = __lasx_xvilvh_d(_t6, _t4); \ ++ _tmp5_m = __lasx_xvilvl_d(_t7, _t5); \ ++ _tmp7_m = __lasx_xvilvh_d(_t7, _t5); \ ++ _out4 = __lasx_xvpermi_q(_tmp1_m, _tmp0_m, 0x20); \ ++ _out5 = __lasx_xvpermi_q(_tmp3_m, _tmp2_m, 0x20); \ ++ _out6 = __lasx_xvpermi_q(_tmp5_m, _tmp4_m, 0x20); \ ++ _out7 = __lasx_xvpermi_q(_tmp7_m, _tmp6_m, 0x20); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Transpose 4x4 block with halfword elements in vectors ++ * Arguments : Inputs - _in0, _in1, _in2, _in3 ++ * Outputs - _out0, _out1, _out2, _out3 ++ * Return Type - signed halfword ++ * Details : The rows of the matrix become columns, and the columns become rows. ++ * Example : See LASX_TRANSPOSE8x8_H ++ * ============================================================================= ++ */ ++#define LASX_TRANSPOSE4x4_H(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++{ \ ++ __m256i _s0_m, _s1_m; \ ++ \ ++ _s0_m = __lasx_xvilvl_h(_in1, _in0); \ ++ _s1_m = __lasx_xvilvl_h(_in3, _in2); \ ++ _out0 = __lasx_xvilvl_w(_s1_m, _s0_m); \ ++ _out2 = __lasx_xvilvh_w(_s1_m, _s0_m); \ ++ _out1 = __lasx_xvilvh_d(_out0, _out0); \ ++ _out3 = __lasx_xvilvh_d(_out2, _out2); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Transpose input 8x8 byte block ++ * Arguments : Inputs - _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7 ++ * (input 8x8 byte block) ++ * Outputs - _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7 ++ * (output 8x8 byte block) ++ * Example : See LASX_TRANSPOSE8x8_H ++ * ============================================================================= ++ */ ++#define LASX_TRANSPOSE8x8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, _out0, \ ++ _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ ++{ \ ++ __m256i _tmp0_m, _tmp1_m, _tmp2_m, _tmp3_m; \ ++ __m256i _tmp4_m, _tmp5_m, _tmp6_m, _tmp7_m; \ ++ _tmp0_m = __lasx_xvilvl_b(_in2, _in0); \ ++ _tmp1_m = __lasx_xvilvl_b(_in3, _in1); \ ++ _tmp2_m = __lasx_xvilvl_b(_in6, _in4); \ ++ _tmp3_m = __lasx_xvilvl_b(_in7, _in5); \ ++ _tmp4_m = __lasx_xvilvl_b(_tmp1_m, _tmp0_m); \ ++ _tmp5_m = __lasx_xvilvh_b(_tmp1_m, _tmp0_m); \ ++ _tmp6_m = __lasx_xvilvl_b(_tmp3_m, _tmp2_m); \ ++ _tmp7_m = __lasx_xvilvh_b(_tmp3_m, _tmp2_m); \ ++ _out0 = __lasx_xvilvl_w(_tmp6_m, _tmp4_m); \ ++ _out2 = __lasx_xvilvh_w(_tmp6_m, _tmp4_m); \ ++ _out4 = __lasx_xvilvl_w(_tmp7_m, _tmp5_m); \ ++ _out6 = __lasx_xvilvh_w(_tmp7_m, _tmp5_m); \ ++ _out1 = __lasx_xvbsrl_v(_out0, 8); \ ++ _out3 = __lasx_xvbsrl_v(_out2, 8); \ ++ _out5 = __lasx_xvbsrl_v(_out4, 8); \ ++ _out7 = __lasx_xvbsrl_v(_out6, 8); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Transpose 8x8 block with halfword elements in vectors. ++ * Arguments : Inputs - _in0, _in1, ~ ++ * Outputs - _out0, _out1, ~ ++ * Details : The rows of the matrix become columns, and the columns become rows. ++ * Example : LASX_TRANSPOSE8x8_H ++ * _in0 : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * _in1 : 8,2,3,4, 5,6,7,8, 8,2,3,4, 5,6,7,8 ++ * _in2 : 8,2,3,4, 5,6,7,8, 8,2,3,4, 5,6,7,8 ++ * _in3 : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * _in4 : 9,2,3,4, 5,6,7,8, 9,2,3,4, 5,6,7,8 ++ * _in5 : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * _in6 : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * _in7 : 9,2,3,4, 5,6,7,8, 9,2,3,4, 5,6,7,8 ++ * ++ * _out0 : 1,8,8,1, 9,1,1,9, 1,8,8,1, 9,1,1,9 ++ * _out1 : 2,2,2,2, 2,2,2,2, 2,2,2,2, 2,2,2,2 ++ * _out2 : 3,3,3,3, 3,3,3,3, 3,3,3,3, 3,3,3,3 ++ * _out3 : 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4 ++ * _out4 : 5,5,5,5, 5,5,5,5, 5,5,5,5, 5,5,5,5 ++ * _out5 : 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,6,6,6 ++ * _out6 : 7,7,7,7, 7,7,7,7, 7,7,7,7, 7,7,7,7 ++ * _out7 : 8,8,8,8, 8,8,8,8, 8,8,8,8, 8,8,8,8 ++ * ============================================================================= ++ */ ++#define LASX_TRANSPOSE8x8_H(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, _out0, \ ++ _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ ++{ \ ++ __m256i _s0_m, _s1_m; \ ++ __m256i _tmp0_m, _tmp1_m, _tmp2_m, _tmp3_m; \ ++ __m256i _tmp4_m, _tmp5_m, _tmp6_m, _tmp7_m; \ ++ \ ++ _s0_m = __lasx_xvilvl_h(_in6, _in4); \ ++ _s1_m = __lasx_xvilvl_h(_in7, _in5); \ ++ _tmp0_m = __lasx_xvilvl_h(_s1_m, _s0_m); \ ++ _tmp1_m = __lasx_xvilvh_h(_s1_m, _s0_m); \ ++ _s0_m = __lasx_xvilvh_h(_in6, _in4); \ ++ _s1_m = __lasx_xvilvh_h(_in7, _in5); \ ++ _tmp2_m = __lasx_xvilvl_h(_s1_m, _s0_m); \ ++ _tmp3_m = __lasx_xvilvh_h(_s1_m, _s0_m); \ ++ \ ++ _s0_m = __lasx_xvilvl_h(_in2, _in0); \ ++ _s1_m = __lasx_xvilvl_h(_in3, _in1); \ ++ _tmp4_m = __lasx_xvilvl_h(_s1_m, _s0_m); \ ++ _tmp5_m = __lasx_xvilvh_h(_s1_m, _s0_m); \ ++ _s0_m = __lasx_xvilvh_h(_in2, _in0); \ ++ _s1_m = __lasx_xvilvh_h(_in3, _in1); \ ++ _tmp6_m = __lasx_xvilvl_h(_s1_m, _s0_m); \ ++ _tmp7_m = __lasx_xvilvh_h(_s1_m, _s0_m); \ ++ \ ++ _out0 = __lasx_xvpickev_d(_tmp0_m, _tmp4_m); \ ++ _out2 = __lasx_xvpickev_d(_tmp1_m, _tmp5_m); \ ++ _out4 = __lasx_xvpickev_d(_tmp2_m, _tmp6_m); \ ++ _out6 = __lasx_xvpickev_d(_tmp3_m, _tmp7_m); \ ++ _out1 = __lasx_xvpickod_d(_tmp0_m, _tmp4_m); \ ++ _out3 = __lasx_xvpickod_d(_tmp1_m, _tmp5_m); \ ++ _out5 = __lasx_xvpickod_d(_tmp2_m, _tmp6_m); \ ++ _out7 = __lasx_xvpickod_d(_tmp3_m, _tmp7_m); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Butterfly of 4 input vectors ++ * Arguments : Inputs - _in0, _in1, _in2, _in3 ++ * Outputs - _out0, _out1, _out2, _out3 ++ * Details : Butterfly operation ++ * Example : LASX_BUTTERFLY_4 ++ * _out0 = _in0 + _in3; ++ * _out1 = _in1 + _in2; ++ * _out2 = _in1 - _in2; ++ * _out3 = _in0 - _in3; ++ * ============================================================================= ++ */ ++#define LASX_BUTTERFLY_4_B(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++{ \ ++ _out0 = __lasx_xvadd_b(_in0, _in3); \ ++ _out1 = __lasx_xvadd_b(_in1, _in2); \ ++ _out2 = __lasx_xvsub_b(_in1, _in2); \ ++ _out3 = __lasx_xvsub_b(_in0, _in3); \ ++} ++#define LASX_BUTTERFLY_4_H(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++{ \ ++ _out0 = __lasx_xvadd_h(_in0, _in3); \ ++ _out1 = __lasx_xvadd_h(_in1, _in2); \ ++ _out2 = __lasx_xvsub_h(_in1, _in2); \ ++ _out3 = __lasx_xvsub_h(_in0, _in3); \ ++} ++#define LASX_BUTTERFLY_4_W(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++{ \ ++ _out0 = __lasx_xvadd_w(_in0, _in3); \ ++ _out1 = __lasx_xvadd_w(_in1, _in2); \ ++ _out2 = __lasx_xvsub_w(_in1, _in2); \ ++ _out3 = __lasx_xvsub_w(_in0, _in3); \ ++} ++#define LASX_BUTTERFLY_4_D(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++{ \ ++ _out0 = __lasx_xvadd_d(_in0, _in3); \ ++ _out1 = __lasx_xvadd_d(_in1, _in2); \ ++ _out2 = __lasx_xvsub_d(_in1, _in2); \ ++ _out3 = __lasx_xvsub_d(_in0, _in3); \ ++} ++ ++/* ++ * ============================================================================= ++ * Description : Butterfly of 8 input vectors ++ * Arguments : Inputs - _in0, _in1, _in2, _in3, ~ ++ * Outputs - _out0, _out1, _out2, _out3, ~ ++ * Details : Butterfly operation ++ * Example : LASX_BUTTERFLY_8 ++ * _out0 = _in0 + _in7; ++ * _out1 = _in1 + _in6; ++ * _out2 = _in2 + _in5; ++ * _out3 = _in3 + _in4; ++ * _out4 = _in3 - _in4; ++ * _out5 = _in2 - _in5; ++ * _out6 = _in1 - _in6; ++ * _out7 = _in0 - _in7; ++ * ============================================================================= ++ */ ++#define LASX_BUTTERFLY_8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7)\ ++{ \ ++ _out0 = __lasx_xvadd_b(_in0, _in7); \ ++ _out1 = __lasx_xvadd_b(_in1, _in6); \ ++ _out2 = __lasx_xvadd_b(_in2, _in5); \ ++ _out3 = __lasx_xvadd_b(_in3, _in4); \ ++ _out4 = __lasx_xvsub_b(_in3, _in4); \ ++ _out5 = __lasx_xvsub_b(_in2, _in5); \ ++ _out6 = __lasx_xvsub_b(_in1, _in6); \ ++ _out7 = __lasx_xvsub_b(_in0, _in7); \ ++} ++ ++#define LASX_BUTTERFLY_8_H(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7)\ ++{ \ ++ _out0 = __lasx_xvadd_h(_in0, _in7); \ ++ _out1 = __lasx_xvadd_h(_in1, _in6); \ ++ _out2 = __lasx_xvadd_h(_in2, _in5); \ ++ _out3 = __lasx_xvadd_h(_in3, _in4); \ ++ _out4 = __lasx_xvsub_h(_in3, _in4); \ ++ _out5 = __lasx_xvsub_h(_in2, _in5); \ ++ _out6 = __lasx_xvsub_h(_in1, _in6); \ ++ _out7 = __lasx_xvsub_h(_in0, _in7); \ ++} ++ ++#define LASX_BUTTERFLY_8_W(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7)\ ++{ \ ++ _out0 = __lasx_xvadd_w(_in0, _in7); \ ++ _out1 = __lasx_xvadd_w(_in1, _in6); \ ++ _out2 = __lasx_xvadd_w(_in2, _in5); \ ++ _out3 = __lasx_xvadd_w(_in3, _in4); \ ++ _out4 = __lasx_xvsub_w(_in3, _in4); \ ++ _out5 = __lasx_xvsub_w(_in2, _in5); \ ++ _out6 = __lasx_xvsub_w(_in1, _in6); \ ++ _out7 = __lasx_xvsub_w(_in0, _in7); \ ++} ++ ++#define LASX_BUTTERFLY_8_D(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7)\ ++{ \ ++ _out0 = __lasx_xvadd_d(_in0, _in7); \ ++ _out1 = __lasx_xvadd_d(_in1, _in6); \ ++ _out2 = __lasx_xvadd_d(_in2, _in5); \ ++ _out3 = __lasx_xvadd_d(_in3, _in4); \ ++ _out4 = __lasx_xvsub_d(_in3, _in4); \ ++ _out5 = __lasx_xvsub_d(_in2, _in5); \ ++ _out6 = __lasx_xvsub_d(_in1, _in6); \ ++ _out7 = __lasx_xvsub_d(_in0, _in7); \ ++} ++ ++#endif //LASX ++ ++#endif /* LOONGSON_INTRINSICS_H */ ++#endif /* AVUTIL_LOONGARCH_LOONGSON_INTRINSICS_H */ ++ +diff --git a/libswscale/loongarch/input_lasx.c b/libswscale/loongarch/input_lasx.c +index 49b37cd0f6..bc18dd5c14 100644 +--- a/libswscale/loongarch/input_lasx.c ++++ b/libswscale/loongarch/input_lasx.c +@@ -20,7 +20,7 @@ + */ + + #include "swscale_loongarch.h" +-#include "libavutil/loongarch/generic_macros_lasx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + + void planar_rgb_to_uv_lasx(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4], + int width, int32_t *rgb2yuv) +@@ -50,16 +50,15 @@ void planar_rgb_to_uv_lasx(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4] + __m256i g_l, g_h, b_l, b_h, r_l, r_h; + __m256i v_l, v_h, u_l, u_h, u_lh, v_lh; + +- _g = LASX_LD((src0 + i)); +- _b = LASX_LD((src1 + i)); +- _r = LASX_LD((src2 + i)); +- LASX_UNPCK_L_WU_BU(_g, g_l); +- LASX_UNPCK_L_WU_BU_2(_b, _r, b_l, r_l); ++ DUP2_ARG2(__lasx_xvld, src0 + i, 0, src1 + i, 0, _g, _b); ++ _r = __lasx_xvld(src2 + i, 0); ++ g_l = __lasx_vext2xv_wu_bu(_g); ++ DUP2_ARG1(__lasx_vext2xv_wu_bu, _b, _r, b_l, r_l); + _g = __lasx_xvpermi_d(_g, 0x01); + _b = __lasx_xvpermi_d(_b, 0x01); + _r = __lasx_xvpermi_d(_r, 0x01); +- LASX_UNPCK_L_WU_BU(_g, g_h); +- LASX_UNPCK_L_WU_BU_2(_b, _r, b_h, r_h); ++ g_h = __lasx_vext2xv_wu_bu(_g); ++ DUP2_ARG1(__lasx_vext2xv_wu_bu, _b, _r, b_h, r_h); + u_l = __lasx_xvmadd_w(temp, ru, r_l); + u_h = __lasx_xvmadd_w(temp, ru, r_h); + v_l = __lasx_xvmadd_w(temp, rv, r_l); +@@ -76,7 +75,7 @@ void planar_rgb_to_uv_lasx(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4] + u_h = __lasx_xvsra_w(u_h, sra); + v_l = __lasx_xvsra_w(v_l, sra); + v_h = __lasx_xvsra_w(v_h, sra); +- LASX_SHUF_B_2_128SV(u_h, u_l, v_h, v_l, mask, mask, u_lh, v_lh); ++ DUP2_ARG3(__lasx_xvshuf_b, u_h, u_l, mask, v_h, v_l, mask, u_lh, v_lh); + u_lh = __lasx_xvpermi_d(u_lh, 0xD8); + v_lh = __lasx_xvpermi_d(v_lh, 0xD8); + __lasx_xvst(u_lh, (dstU + i), 0); +@@ -90,8 +89,8 @@ void planar_rgb_to_uv_lasx(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4] + _g = __lasx_xvldrepl_d((src0 + i), 0); + _b = __lasx_xvldrepl_d((src1 + i), 0); + _r = __lasx_xvldrepl_d((src2 + i), 0); +- LASX_UNPCK_L_WU_BU(_g, g_l); +- LASX_UNPCK_L_WU_BU_2(_b, _r, b_l, r_l); ++ g_l = __lasx_vext2xv_wu_bu(_g); ++ DUP2_ARG1(__lasx_vext2xv_wu_bu, _b, _r, b_l, r_l); + u_l = __lasx_xvmadd_w(temp, ru, r_l); + v_l = __lasx_xvmadd_w(temp, rv, r_l); + u_l = __lasx_xvmadd_w(u_l, gu, g_l); +@@ -100,7 +99,7 @@ void planar_rgb_to_uv_lasx(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4] + v_l = __lasx_xvmadd_w(v_l, bv, b_l); + u_l = __lasx_xvsra_w(u_l, sra); + v_l = __lasx_xvsra_w(v_l, sra); +- LASX_SHUF_B_2_128SV(u_l, u_l, v_l, v_l, mask, mask, u, v); ++ DUP2_ARG3(__lasx_xvshuf_b, u_l, u_l, mask, v_l, v_l, mask, u, v); + __lasx_xvstelm_d(u, (dstU + i), 0, 0); + __lasx_xvstelm_d(u, (dstU + i), 8, 2); + __lasx_xvstelm_d(v, (dstV + i), 0, 0); +@@ -140,16 +139,15 @@ void planar_rgb_to_y_lasx(uint8_t *_dst, const uint8_t *src[4], int width, + __m256i g_l, g_h, b_l, b_h, r_l, r_h; + __m256i y_l, y_h, y_lh; + +- _g = LASX_LD((src0 + i)); +- _b = LASX_LD((src1 + i)); +- _r = LASX_LD((src2 + i)); +- LASX_UNPCK_L_WU_BU(_g, g_l); +- LASX_UNPCK_L_WU_BU_2(_b, _r, b_l, r_l); ++ DUP2_ARG2(__lasx_xvld, src0 + i, 0, src1 + i, 0, _g, _b); ++ _r = __lasx_xvld(src2 + i, 0); ++ g_l = __lasx_vext2xv_wu_bu(_g); ++ DUP2_ARG1(__lasx_vext2xv_wu_bu, _b, _r, b_l, r_l); + _g = __lasx_xvpermi_d(_g, 0x01); + _b = __lasx_xvpermi_d(_b, 0x01); + _r = __lasx_xvpermi_d(_r, 0x01); +- LASX_UNPCK_L_WU_BU(_g, g_h); +- LASX_UNPCK_L_WU_BU_2(_b, _r, b_h, r_h); ++ g_h = __lasx_vext2xv_wu_bu(_g); ++ DUP2_ARG1(__lasx_vext2xv_wu_bu,_b, _r, b_h, r_h); + y_l = __lasx_xvmadd_w(temp, ry, r_l); + y_h = __lasx_xvmadd_w(temp, ry, r_h); + y_l = __lasx_xvmadd_w(y_l, gy, g_l); +@@ -158,7 +156,7 @@ void planar_rgb_to_y_lasx(uint8_t *_dst, const uint8_t *src[4], int width, + y_h = __lasx_xvmadd_w(y_h, by, b_h); + y_l = __lasx_xvsra_w(y_l, sra); + y_h = __lasx_xvsra_w(y_h, sra); +- LASX_SHUF_B_128SV(y_h, y_l, mask, y_lh); ++ y_lh = __lasx_xvshuf_b(y_h, y_l, mask); + y_lh = __lasx_xvpermi_d(y_lh, 0xD8); + __lasx_xvst(y_lh, (dst + i), 0); + } +@@ -170,13 +168,13 @@ void planar_rgb_to_y_lasx(uint8_t *_dst, const uint8_t *src[4], int width, + _g = __lasx_xvldrepl_d((src0 + i), 0); + _b = __lasx_xvldrepl_d((src1 + i), 0); + _r = __lasx_xvldrepl_d((src2 + i), 0); +- LASX_UNPCK_L_WU_BU(_g, g_l); +- LASX_UNPCK_L_WU_BU_2(_b, _r, b_l, r_l); ++ g_l = __lasx_vext2xv_wu_bu(_g); ++ DUP2_ARG1(__lasx_vext2xv_wu_bu, _b, _r, b_l, r_l); + y_l = __lasx_xvmadd_w(temp, ry, r_l); + y_l = __lasx_xvmadd_w(y_l, gy, g_l); + y_l = __lasx_xvmadd_w(y_l, by, b_l); + y_l = __lasx_xvsra_w(y_l, sra); +- LASX_SHUF_B_128SV(y_l, y_l, mask, y); ++ y = __lasx_xvshuf_b(y_l, y_l, mask); + __lasx_xvstelm_d(y, (dst + i), 0, 0); + __lasx_xvstelm_d(y, (dst + i), 8, 2); + i += 8; +diff --git a/libswscale/loongarch/output_lasx.c b/libswscale/loongarch/output_lasx.c +index b3fb1f5ce0..fbcf51cf0c 100644 +--- a/libswscale/loongarch/output_lasx.c ++++ b/libswscale/loongarch/output_lasx.c +@@ -20,7 +20,7 @@ + */ + + #include "swscale_loongarch.h" +-#include "libavutil/loongarch/generic_macros_lasx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + + void ff_yuv2planeX_8_lasx(const int16_t *filter, int filterSize, + const int16_t **src, uint8_t *dest, int dstW, +@@ -42,9 +42,8 @@ void ff_yuv2planeX_8_lasx(const int16_t *filter, int filterSize, + int val_2[8] = {dither4, dither5, dither6, dither7, dither4, dither5, dither6, dither7}; + int val_3[8] = {dither0, dither1, dither2, dither3, dither4, dither5, dither6, dither7}; + +- val1 = LASX_LD(val_1); +- val2 = LASX_LD(val_2); +- val3 = LASX_LD(val_3); ++ DUP2_ARG2(__lasx_xvld, val_1, 0, val_2, 0, val1, val2); ++ val3 = __lasx_xvld(val_3, 0); + + for (i = 0; i < len; i += 16) { + int j; +@@ -55,16 +54,16 @@ void ff_yuv2planeX_8_lasx(const int16_t *filter, int filterSize, + val_h = __lasx_xvslli_w(val2, 12); + + for (j = 0; j < filterSize; j++) { +- src0 = LASX_LD(src[j]+ i); ++ src0 = __lasx_xvld(src[j]+ i, 0); + filter0 = __lasx_xvldrepl_h((filter + j), 0); +- LASX_MADDWL_W_H_128SV(val_l, src0, filter0, val_l); +- LASX_MADDWH_W_H_128SV(val_h, src0, filter0, val_h); ++ val_l = __lasx_xvmaddwl_w_h(val_l, src0, filter0); ++ val_h = __lasx_xvmaddwh_w_h(val_h, src0, filter0); + } + val_l = __lasx_xvsrai_w(val_l, 19); + val_h = __lasx_xvsrai_w(val_h, 19); +- LASX_CLIP_W_0_255(val_l, val_l); +- LASX_CLIP_W_0_255(val_h, val_h); +- LASX_SHUF_B_128SV(val_h, val_l, mask, val_lh); ++ val_l = __lasx_xvclip255_w(val_l); ++ val_h = __lasx_xvclip255_w(val_h); ++ val_lh = __lasx_xvshuf_b(val_h, val_l, mask); + __lasx_xvstelm_d(val_lh, (dest + i), 0, 0); + __lasx_xvstelm_d(val_lh, (dest + i), 8, 2); + } +@@ -76,15 +75,15 @@ void ff_yuv2planeX_8_lasx(const int16_t *filter, int filterSize, + val_l = __lasx_xvslli_w(val3, 12); + + for (j = 0; j < filterSize; j++) { +- src0 = LASX_LD(src[j] + i); ++ src0 = __lasx_xvld(src[j] + i, 0); + src0 = __lasx_xvpermi_d(src0, 0xD8); + filter0 = __lasx_xvldrepl_h((filter + j), 0); +- LASX_MADDWL_W_H_128SV(val_l, src0, filter0, val_l); ++ val_l = __lasx_xvmaddwl_w_h(val_l, src0, filter0); + } + val_l = __lasx_xvsrai_w(val_l, 19); +- LASX_CLIP_W_0_255(val_l, val_l); ++ val_l = __lasx_xvclip255_w(val_l); + val_h = __lasx_xvpermi_d(val_l, 0x4E); +- LASX_SHUF_B_128SV(val_h, val_l, mask, val_l); ++ val_l = __lasx_xvshuf_b(val_h, val_l, mask); + __lasx_xvstelm_d(val_l, (dest + i), 0, 0); + i += 8; + } +@@ -763,7 +762,10 @@ yuv2rgb_X_template_lasx(SwsContext *c, const int16_t *lumFilter, + v2_od = yl1_ev; + for (j = 0; j < lumFilterSize; j++) { + temp = __lasx_xvldrepl_h((lumFilter + j), 0); +- LASX_LD_4((lumSrc[j] + count_lum), 16, l_src1, l_src2, l_src3, l_src4); ++ DUP4_ARG2(__lasx_xvld, lumSrc[j] + count_lum, 0, lumSrc[j] + count_lum, ++ 32, lumSrc[j] + count_lum, 64, lumSrc[j] + count_lum, 96, l_src1, ++ l_src2, l_src3, l_src4); ++ + yl1_ev = __lasx_xvmaddwev_w_h(yl1_ev, temp, l_src1); + yl1_od = __lasx_xvmaddwod_w_h(yl1_od, temp, l_src1); + yh1_ev = __lasx_xvmaddwev_w_h(yh1_ev, temp, l_src2); +@@ -774,8 +776,10 @@ yuv2rgb_X_template_lasx(SwsContext *c, const int16_t *lumFilter, + yh2_od = __lasx_xvmaddwod_w_h(yh2_od, temp, l_src4); + } + for (j = 0; j < chrFilterSize; j++) { +- LASX_LD_2((chrUSrc[j] + count), 16, u_src1, u_src2); +- LASX_LD_2((chrVSrc[j] + count), 16, v_src1, v_src2); ++ DUP2_ARG2(__lasx_xvld, chrUSrc[j] + count, 0, chrUSrc[j] + count, 32, ++ u_src1, u_src2); ++ DUP2_ARG2(__lasx_xvld, chrVSrc[j] + count, 0, chrVSrc[j] + count, 32, ++ v_src1, v_src2); + temp = __lasx_xvldrepl_h((chrFilter + j), 0); + u1_ev = __lasx_xvmaddwev_w_h(u1_ev, temp, u_src1); + u1_od = __lasx_xvmaddwod_w_h(u1_od, temp, u_src1); +@@ -835,16 +839,16 @@ yuv2rgb_X_template_lasx(SwsContext *c, const int16_t *lumFilter, + v_od = yl_ev; + for (j = 0; j < lumFilterSize; j++) { + temp = __lasx_xvldrepl_h((lumFilter + j), 0); +- l_src1 = LASX_LD((lumSrc[j] + count_lum)); +- l_src2 = LASX_LD((lumSrc[j] + count_lum + 16)); ++ DUP2_ARG2(__lasx_xvld, lumSrc[j] + count_lum, 0, lumSrc[j] + count_lum, ++ 32, l_src1, l_src2); + yl_ev = __lasx_xvmaddwev_w_h(yl_ev, temp, l_src1); + yl_od = __lasx_xvmaddwod_w_h(yl_od, temp, l_src1); + yh_ev = __lasx_xvmaddwev_w_h(yh_ev, temp, l_src2); + yh_od = __lasx_xvmaddwod_w_h(yh_od, temp, l_src2); + } + for (j = 0; j < chrFilterSize; j++) { +- u_src = LASX_LD((chrUSrc[j] + count)); +- v_src = LASX_LD((chrVSrc[j] + count)); ++ DUP2_ARG2(__lasx_xvld, chrUSrc[j] + count, 0, chrVSrc[j] + count, 0, ++ u_src, v_src); + temp = __lasx_xvldrepl_h((chrFilter + j), 0); + u_ev = __lasx_xvmaddwev_w_h(u_ev, temp, u_src); + u_od = __lasx_xvmaddwod_w_h(u_od, temp, u_src); +@@ -881,13 +885,13 @@ yuv2rgb_X_template_lasx(SwsContext *c, const int16_t *lumFilter, + v = y_ev; + for (j = 0; j < lumFilterSize; j++) { + temp = __lasx_xvldrepl_h((lumFilter + j), 0); +- l_src = LASX_LD((lumSrc[j] + count_lum)); ++ l_src = __lasx_xvld(lumSrc[j] + count_lum, 0); + y_ev = __lasx_xvmaddwev_w_h(y_ev, temp, l_src); + y_od = __lasx_xvmaddwod_w_h(y_od, temp, l_src); + } + for (j = 0; j < chrFilterSize; j++) { +- u_src = LASX_LD((chrUSrc[j] + count)); +- v_src = LASX_LD((chrVSrc[j] + count)); ++ DUP2_ARG2(__lasx_xvld, chrUSrc[j] + count, 0, chrVSrc[j] + count, ++ 0, u_src, v_src); + temp = __lasx_xvldrepl_h((chrFilter + j), 0); + u_src = __lasx_vext2xv_w_h(u_src); + v_src = __lasx_vext2xv_w_h(v_src); +@@ -913,7 +917,7 @@ yuv2rgb_X_template_lasx(SwsContext *c, const int16_t *lumFilter, + uv = y_ev; + for (j = 0; j < lumFilterSize; j++) { + temp = __lasx_xvldrepl_h((lumFilter + j), 0); +- l_src = LASX_LD((lumSrc[j] + count_lum)); ++ l_src = __lasx_xvld(lumSrc[j] + count_lum, 0); + l_src = __lasx_vext2xv_w_h(l_src); + y_ev = __lasx_xvmaddwev_w_h(y_ev, temp, l_src); + } +@@ -987,17 +991,14 @@ yuv2rgb_2_template_lasx(SwsContext *c, const int16_t *buf[2], + __m256i y1_h, y1_l, y1, u1, v1; + __m256i y_l, y_h, u, v; + +- y0 = LASX_LD(buf0 + i); +- u0 = LASX_LD(ubuf0 + count); +- v0 = LASX_LD(vbuf0 + count); +- y1 = LASX_LD(buf1 + i); +- u1 = LASX_LD(ubuf1 + count); +- v1 = LASX_LD(vbuf1 + count); +- LASX_UNPCK_L_W_H_2(y0, y1, y0_l, y1_l); ++ DUP4_ARG2(__lasx_xvld, buf0 + i, 0, ubuf0 + count, 0, vbuf0 + count, ++ 0, buf1 + i, 0, y0, u0, v0, y1); ++ DUP2_ARG2(__lasx_xvld, ubuf1 + count, 0, vbuf1 + count, 0, u1, v1); ++ DUP2_ARG1(__lasx_vext2xv_w_h, y0, y1, y0_l, y1_l); + y0 = __lasx_xvpermi_d(y0, 0x4E); + y1 = __lasx_xvpermi_d(y1, 0x4E); +- LASX_UNPCK_L_W_H_2(y0, y1, y0_h, y1_h); +- LASX_UNPCK_L_W_H_4(u0, u1, v0, v1, u0, u1, v0, v1); ++ DUP2_ARG1(__lasx_vext2xv_w_h, y0, y1, y0_h, y1_h); ++ DUP4_ARG1(__lasx_vext2xv_w_h, u0, u1, v0, v1, u0, u1, v0, v1); + y0_l = __lasx_xvmul_w(y0_l, v_yalpha1); + y0_h = __lasx_xvmul_w(y0_h, v_yalpha1); + u0 = __lasx_xvmul_w(u0, v_uvalpha1); +@@ -1021,14 +1022,14 @@ yuv2rgb_2_template_lasx(SwsContext *c, const int16_t *buf[2], + __m256i y1_l, y1, u1, v1; + __m256i y_l, u, v; + +- y0 = LASX_LD(buf0 + i); ++ y0 = __lasx_xvld(buf0 + i, 0); + u0 = __lasx_xvldrepl_d((ubuf0 + count), 0); + v0 = __lasx_xvldrepl_d((vbuf0 + count), 0); +- y1 = LASX_LD(buf1 + i); ++ y1 = __lasx_xvld(buf1 + i, 0); + u1 = __lasx_xvldrepl_d((ubuf1 + count), 0); + v1 = __lasx_xvldrepl_d((vbuf1 + count), 0); +- LASX_UNPCK_L_W_H_2(y0, y1, y0_l, y1_l); +- LASX_UNPCK_L_W_H_4(u0, u1, v0, v1, u0, u1, v0, v1); ++ DUP2_ARG1(__lasx_vext2xv_w_h, y0, y1, y0_l, y1_l); ++ DUP4_ARG1(__lasx_vext2xv_w_h, u0, u1, v0, v1, u0, u1, v0, v1); + y0_l = __lasx_xvmul_w(y0_l, v_yalpha1); + u0 = __lasx_xvmul_w(u0, v_uvalpha1); + v0 = __lasx_xvmul_w(v0, v_uvalpha1); +@@ -1086,14 +1087,13 @@ yuv2rgb_1_template_lasx(SwsContext *c, const int16_t *buf0, + __m256i src_y, src_u, src_v; + __m256i y_h, y_l, u, v; + +- src_y = LASX_LD(buf0 + i); +- src_u = LASX_LD(ubuf0 + count); +- src_v = LASX_LD(vbuf0 + count); +- LASX_ADDWL_W_H_128SV(src_y, bias_64, y_l); +- LASX_ADDWH_W_H_128SV(src_y, bias_64, y_h); ++ DUP2_ARG2(__lasx_xvld, buf0 + i, 0, ubuf0 + count, 0, src_y, src_u); ++ src_v = __lasx_xvld(vbuf0 + count, 0); ++ y_l = __lasx_xvaddwl_w_h(src_y, bias_64); ++ y_h = __lasx_xvaddwh_w_h(src_y, bias_64); + src_u = __lasx_xvpermi_d(src_u, 0xD8); + src_v = __lasx_xvpermi_d(src_v, 0xD8); +- LASX_ADDWL_W_H_2_128SV(src_u, bias_64, src_v, bias_64, u, v); ++ DUP2_ARG2(__lasx_xvaddwl_w_h, src_u, bias_64, src_v, bias_64, u, v); + y_l = __lasx_xvsrai_w(y_l, 7); + y_h = __lasx_xvsrai_w(y_h, 7); + u = __lasx_xvsrai_w(u, 7); +@@ -1107,12 +1107,12 @@ yuv2rgb_1_template_lasx(SwsContext *c, const int16_t *buf0, + __m256i src_y, src_u, src_v; + __m256i y_l, u, v; + +- src_y = LASX_LD(buf0 + i); ++ src_y = __lasx_xvld(buf0 + i, 0); + src_u = __lasx_xvldrepl_d((ubuf0 + count), 0); + src_v = __lasx_xvldrepl_d((vbuf0 + count), 0); + src_y = __lasx_xvpermi_d(src_y, 0xD8); +- LASX_ADDWL_W_H_2_128SV(src_y, bias_64, src_u, bias_64, y_l, u); +- LASX_ADDWL_W_H_128SV(src_v, bias_64, v); ++ DUP2_ARG2(__lasx_xvaddwl_w_h, src_y, bias_64, src_u, bias_64, y_l, u); ++ v = __lasx_xvaddwl_w_h(src_v, bias_64); + y_l = __lasx_xvsrai_w(y_l, 7); + u = __lasx_xvsrai_w(u, 7); + v = __lasx_xvsrai_w(v, 7); +@@ -1150,18 +1150,16 @@ yuv2rgb_1_template_lasx(SwsContext *c, const int16_t *buf0, + __m256i src_y, src_u0, src_v0, src_u1, src_v1; + __m256i y_h, y_l, u, v; + +- src_y = LASX_LD(buf0 + i); +- src_u0 = LASX_LD(ubuf0 + count); +- src_v0 = LASX_LD(vbuf0 + count); +- src_u1 = LASX_LD(ubuf1 + count); +- src_v1 = LASX_LD(vbuf1 + count); ++ DUP4_ARG2(__lasx_xvld, buf0 + i, 0, ubuf0 + count, 0, vbuf0 + count, ++ 0, ubuf1 + count, 0, src_y, src_u0, src_v0, src_u1); ++ src_v1 = __lasx_xvld(vbuf1 + count, 0); + src_u0 = __lasx_xvpermi_d(src_u0, 0xD8); + src_v0 = __lasx_xvpermi_d(src_v0, 0xD8); + src_u1 = __lasx_xvpermi_d(src_u1, 0xD8); + src_v1 = __lasx_xvpermi_d(src_v1, 0xD8); +- LASX_ADDWL_W_H_128SV(src_y, bias_64, y_l); +- LASX_ADDWH_W_H_128SV(src_y, bias_64, y_h); +- LASX_ADDWL_W_H_2_128SV(src_u0, src_u1, src_v0, src_v1, u, v); ++ y_l = __lasx_xvaddwl_w_h(src_y, bias_64); ++ y_h = __lasx_xvaddwh_w_h(src_y, bias_64); ++ DUP2_ARG2(__lasx_xvaddwl_w_h, src_u0, src_u1, src_v0, src_v1, u, v); + u = __lasx_xvadd_w(u, bias_128); + v = __lasx_xvadd_w(v, bias_128); + y_l = __lasx_xvsrai_w(y_l, 7); +@@ -1177,15 +1175,15 @@ yuv2rgb_1_template_lasx(SwsContext *c, const int16_t *buf0, + __m256i src_y, src_u0, src_v0, src_u1, src_v1; + __m256i y_l, u, v; + +- src_y = LASX_LD(buf0 + i); ++ src_y = __lasx_xvld(buf0 + i, 0); + src_u0 = __lasx_xvldrepl_d((ubuf0 + count), 0); + src_v0 = __lasx_xvldrepl_d((vbuf0 + count), 0); + src_u1 = __lasx_xvldrepl_d((ubuf1 + count), 0); + src_v1 = __lasx_xvldrepl_d((vbuf1 + count), 0); + + src_y = __lasx_xvpermi_d(src_y, 0xD8); +- LASX_ADDWL_W_H_128SV(src_y, bias_64, y_l); +- LASX_ADDWL_W_H_2_128SV(src_u0, src_u1, src_v0, src_v1, u, v); ++ y_l = __lasx_xvaddwl_w_h(src_y, bias_64); ++ DUP2_ARG2(__lasx_xvaddwl_w_h, src_u0, src_u1, src_v0, src_v1, u, v); + u = __lasx_xvadd_w(u, bias_128); + v = __lasx_xvadd_w(v, bias_128); + y_l = __lasx_xvsrai_w(y_l, 7); +@@ -1582,16 +1580,15 @@ yuv2rgb_full_X_template_lasx(SwsContext *c, const int16_t *lumFilter, + u_l = u_h = v_l = v_h = __lasx_xvreplgr2vr_w(tempc); + for (j = 0; j < lumFilterSize; j++) { + temp = __lasx_xvldrepl_h((lumFilter + j), 0); +- l_src = LASX_LD((lumSrc[j] + i)); +- LASX_MADDWL_W_H_128SV(y_l, l_src, temp, y_l); +- LASX_MADDWH_W_H_128SV(y_h, l_src, temp, y_h); ++ l_src = __lasx_xvld(lumSrc[j] + i, 0); ++ y_l = __lasx_xvmaddwl_w_h(y_l, l_src, temp); ++ y_h = __lasx_xvmaddwh_w_h(y_h, l_src, temp); + } + for (j = 0; j < chrFilterSize; j++) { + temp = __lasx_xvldrepl_h((chrFilter + j), 0); +- u_src = LASX_LD((chrUSrc[j] + i)); +- v_src = LASX_LD((chrVSrc[j] + i)); +- LASX_MADDWL_W_H_2_128SV(u_l, u_src, temp, v_l, v_src, temp, u_l, v_l); +- LASX_MADDWH_W_H_2_128SV(u_h, u_src, temp, v_h, v_src, temp, u_h, v_h); ++ DUP2_ARG2(__lasx_xvld, chrUSrc[j] + i, 0, chrVSrc[j] + i, 0, u_src, v_src); ++ DUP2_ARG3(__lasx_xvmaddwl_w_h, u_l, u_src, temp, v_l, v_src, temp, u_l, v_l); ++ DUP2_ARG3(__lasx_xvmaddwh_w_h, u_h, u_src, temp, v_h, v_src, temp, u_h, v_h); + } + y_l = __lasx_xvsrai_w(y_l, 10); + y_h = __lasx_xvsrai_w(y_h, 10); +@@ -1610,9 +1607,9 @@ yuv2rgb_full_X_template_lasx(SwsContext *c, const int16_t *lumFilter, + a_l = a_h = __lasx_xvreplgr2vr_w(a_temp); + for (j = 0; j < lumFilterSize; j++) { + temp = __lasx_xvldrepl_h(lumFilter + j, 0); +- a_src = LASX_LD((alpSrc[j] + i)); +- LASX_MADDWL_W_H_128SV(a_l, a_src, temp, a_l); +- LASX_MADDWH_W_H_128SV(a_h, a_src, temp, a_h); ++ a_src = __lasx_xvld(alpSrc[j] + i, 0); ++ a_l = __lasx_xvmaddwl_w_h(a_l, a_src, temp); ++ a_h = __lasx_xvmaddwh_w_h(a_h, a_src, temp); + } + a_h = __lasx_xvsrai_w(a_h, 19); + a_l = __lasx_xvsrai_w(a_l, 19); +@@ -1644,17 +1641,16 @@ yuv2rgb_full_X_template_lasx(SwsContext *c, const int16_t *lumFilter, + u_l = v_l = __lasx_xvreplgr2vr_w(tempc); + for (j = 0; j < lumFilterSize; j++) { + temp = __lasx_xvldrepl_h((lumFilter + j), 0); +- l_src = LASX_LD((lumSrc[j] + i)); ++ l_src = __lasx_xvld(lumSrc[j] + i, 0); + l_src = __lasx_xvpermi_d(l_src, 0xD8); +- LASX_MADDWL_W_H_128SV(y_l, l_src, temp, y_l); ++ y_l = __lasx_xvmaddwl_w_h(y_l, l_src, temp); + } + for (j = 0; j < chrFilterSize; j++) { + temp = __lasx_xvldrepl_h((chrFilter + j), 0); +- u_src = LASX_LD((chrUSrc[j] + i)); +- v_src = LASX_LD((chrVSrc[j] + i)); ++ DUP2_ARG2(__lasx_xvld, chrUSrc[j] + i, 0, chrVSrc[j] + i, 0, u_src, v_src); + u_src = __lasx_xvpermi_d(u_src, 0xD8); + v_src = __lasx_xvpermi_d(v_src, 0xD8); +- LASX_MADDWL_W_H_2_128SV(u_l, u_src, temp, v_l, v_src, temp, u_l, v_l); ++ DUP2_ARG3(__lasx_xvmaddwl_w_h, u_l, u_src, temp, v_l, v_src, temp, u_l, v_l); + } + y_l = __lasx_xvsrai_w(y_l, 10); + u_l = __lasx_xvsrai_w(u_l, 10); +@@ -1668,9 +1664,9 @@ yuv2rgb_full_X_template_lasx(SwsContext *c, const int16_t *lumFilter, + a_l = __lasx_xvreplgr2vr_w(a_temp); + for (j = 0; j < lumFilterSize; j++) { + temp = __lasx_xvldrepl_h(lumFilter + j, 0); +- a_src = LASX_LD((alpSrc[j] + i)); ++ a_src = __lasx_xvld(alpSrc[j] + i, 0); + a_src = __lasx_xvpermi_d(a_src, 0xD8); +- LASX_MADDWL_W_H_128SV(a_l, a_src, temp, a_l); ++ a_l = __lasx_xvmaddwl_w_h(a_l, a_src, temp); + } + a_l = __lasx_xvsrai_w(a_l, 19); + WRITE_FULL_L_A(R_l, G_l, B_l, a_l, c, dest, i, R, A, G, B, +@@ -1768,22 +1764,19 @@ yuv2rgb_full_2_template_lasx(SwsContext *c, const int16_t *buf[2], + __m256i y_l, y_h, v_l, v_h, u_l, u_h; + __m256i R_l, R_h, G_l, G_h, B_l, B_h; + +- b0 = LASX_LD((buf0 + i)); +- b1 = LASX_LD((buf1 + i)); +- ub0 = LASX_LD((ubuf0 + i)); +- ub1 = LASX_LD((ubuf1 + i)); +- vb0 = LASX_LD((vbuf0 + i)); +- vb1 = LASX_LD((vbuf1 + i)); +- LASX_UNPCK_L_W_H_2(b0, b1, y0_l, y1_l); +- LASX_UNPCK_L_W_H_4(ub0, ub1, vb0, vb1, u0_l, u1_l, v0_l, v1_l); ++ DUP4_ARG2(__lasx_xvld, buf0 + i, 0, buf1 + i, 0, ubuf0 + i, 0, ubuf1 + i, 0, ++ b0, b1, ub0, ub1); ++ DUP2_ARG2(__lasx_xvld, vbuf0 + i, 0, vbuf1 + i, 0, vb0 , vb1); ++ DUP2_ARG1(__lasx_vext2xv_w_h, b0, b1, y0_l, y1_l); ++ DUP4_ARG1(__lasx_vext2xv_w_h, ub0, ub1, vb0, vb1, u0_l, u1_l, v0_l, v1_l); + b0 = __lasx_xvpermi_d(b0, 0x4E); + b1 = __lasx_xvpermi_d(b1, 0x4E); + ub0 = __lasx_xvpermi_d(ub0, 0x4E); + ub1 = __lasx_xvpermi_d(ub1, 0x4E); + vb0 = __lasx_xvpermi_d(vb0, 0x4E); + vb1 = __lasx_xvpermi_d(vb1, 0x4E); +- LASX_UNPCK_L_W_H_2(b0, b1, y0_h, y1_h); +- LASX_UNPCK_L_W_H_4(ub0, ub1, vb0, vb1, u0_h, u1_h, v0_h, v1_h); ++ DUP2_ARG1(__lasx_vext2xv_w_h, b0, b1, y0_h, y1_h); ++ DUP4_ARG1(__lasx_vext2xv_w_h, ub0, ub1, vb0, vb1, u0_h, u1_h, v0_h, v1_h); + y0_l = __lasx_xvmul_w(y0_l, v_yalpha1); + y0_h = __lasx_xvmul_w(y0_h, v_yalpha1); + u0_l = __lasx_xvmul_w(u0_l, v_uvalpha1); +@@ -1815,12 +1808,11 @@ yuv2rgb_full_2_template_lasx(SwsContext *c, const int16_t *buf[2], + __m256i a0, a1, a0_l, a0_h; + __m256i a_l, a_h, a1_l, a1_h; + +- a0 = LASX_LD((abuf0 + i)); +- a1 = LASX_LD((abuf1 + i)); +- LASX_UNPCK_L_W_H_2(a0, a1, a0_l, a1_l); ++ DUP2_ARG2(__lasx_xvld, abuf0 + i, 0, abuf1 + i, 0, a0, a1); ++ DUP2_ARG1(__lasx_vext2xv_w_h, a0, a1, a0_l, a1_l); + a0 = __lasx_xvpermi_d(a0, 0x4E); + a1 = __lasx_xvpermi_d(a1, 0x4E); +- LASX_UNPCK_L_W_H_2(a0, a1, a0_h, a1_h); ++ DUP2_ARG1(__lasx_vext2xv_w_h, a0, a1, a0_h, a1_h); + a_l = __lasx_xvmadd_w(a_bias, a0_l, v_yalpha1); + a_h = __lasx_xvmadd_w(a_bias, a0_h, v_yalpha1); + a_l = __lasx_xvmadd_w(a_l, v_yalpha, a1_l); +@@ -1853,14 +1845,11 @@ yuv2rgb_full_2_template_lasx(SwsContext *c, const int16_t *buf[2], + __m256i y_l, u_l, v_l; + __m256i R_l, G_l, B_l; + +- b0 = LASX_LD((buf0 + i)); +- b1 = LASX_LD((buf1 + i)); +- ub0 = LASX_LD((ubuf0 + i)); +- ub1 = LASX_LD((ubuf1 + i)); +- vb0 = LASX_LD((vbuf0 + i)); +- vb1 = LASX_LD((vbuf1 + i)); +- LASX_UNPCK_L_W_H_2(b0, b1, y0_l, y1_l); +- LASX_UNPCK_L_W_H_4(ub0, ub1, vb0, vb1, u0_l, u1_l, v0_l, v1_l); ++ DUP4_ARG2(__lasx_xvld, buf0 + i, 0, buf1 + i, 0, ubuf0 + i, 0, ubuf1 + i, 0, ++ b0, b1, ub0, ub1); ++ DUP2_ARG2(__lasx_xvld, vbuf0 + i, 0, vbuf1 + i, 0, vb0, vb1); ++ DUP2_ARG1(__lasx_vext2xv_w_h, b0, b1, y0_l, y1_l); ++ DUP4_ARG1(__lasx_vext2xv_w_h, ub0, ub1, vb0, vb1, u0_l, u1_l, v0_l, v1_l); + y0_l = __lasx_xvmul_w(y0_l, v_yalpha1); + u0_l = __lasx_xvmul_w(u0_l, v_uvalpha1); + v0_l = __lasx_xvmul_w(v0_l, v_uvalpha1); +@@ -1879,9 +1868,8 @@ yuv2rgb_full_2_template_lasx(SwsContext *c, const int16_t *buf[2], + __m256i a0, a1, a0_l; + __m256i a_l, a1_l; + +- a0 = LASX_LD((abuf0 + i)); +- a1 = LASX_LD((abuf1 + i)); +- LASX_UNPCK_L_W_H_2(a0, a1, a0_l, a1_l); ++ DUP2_ARG2(__lasx_xvld, abuf0 + i, 0, abuf1 + i, 0, a0, a1); ++ DUP2_ARG1(__lasx_vext2xv_w_h, a0, a1, a0_l, a1_l); + a_l = __lasx_xvmadd_w(a_bias, a0_l, v_yalpha1); + a_l = __lasx_xvmadd_w(a_l, v_yalpha, a1_l); + a_l = __lasx_xvsrai_w(a_l, 19); +@@ -1953,16 +1941,15 @@ yuv2rgb_full_1_template_lasx(SwsContext *c, const int16_t *buf0, + __m256i y_l, y_h, u_l, u_h, v_l, v_h; + __m256i R_l, R_h, G_l, G_h, B_l, B_h; + +- b = LASX_LD((buf0 + i)); +- ub = LASX_LD((ubuf0 + i)); +- vb = LASX_LD((vbuf0 + i)); +- LASX_UNPCK_L_W_H(b, y_l); +- LASX_UNPCK_L_W_H_2(ub, vb, ub_l, vb_l); ++ DUP2_ARG2(__lasx_xvld, buf0 + i, 0, ubuf0 + i, 0, b, ub); ++ vb = __lasx_xvld(vbuf0 + i, 0); ++ y_l = __lasx_vext2xv_w_h(b); ++ DUP2_ARG1(__lasx_vext2xv_w_h, ub, vb, ub_l, vb_l); + b = __lasx_xvpermi_d(b, 0x4E); + ub = __lasx_xvpermi_d(ub, 0x4E); + vb = __lasx_xvpermi_d(vb, 0x4E); +- LASX_UNPCK_L_W_H(b, y_h); +- LASX_UNPCK_L_W_H_2(ub, vb, ub_h, vb_h); ++ y_h = __lasx_vext2xv_w_h(b); ++ DUP2_ARG1(__lasx_vext2xv_w_h, ub, vb, ub_h, vb_h); + y_l = __lasx_xvslli_w(y_l, 2); + y_h = __lasx_xvslli_w(y_h, 2); + u_l = __lasx_xvsub_w(ub_l, uv); +@@ -1982,11 +1969,11 @@ yuv2rgb_full_1_template_lasx(SwsContext *c, const int16_t *buf0, + __m256i a_src; + __m256i a_l, a_h; + +- a_src = LASX_LD((abuf0 + i)); ++ a_src = __lasx_xvld(abuf0 + i, 0); + a_src = __lasx_xvpermi_d(a_src, 0xD8); +- LASX_ADDW_W_W_H_128SV(bias, a_src, a_l); ++ a_l = __lasx_xvaddw_h_h_bu(bias, a_src); + a_src = __lasx_xvpermi_d(a_src, 0xB1); +- LASX_ADDW_W_W_H_128SV(bias, a_src, a_h); ++ a_h = __lasx_xvaddw_w_w_h(bias, a_src); + a_l = __lasx_xvsrai_w(a_l, 7); + a_h = __lasx_xvsrai_w(a_h, 7); + WRITE_FULL_L_A(R_l, G_l, B_l, a_l, c, dest, i, R, A, G, B, +@@ -2013,11 +2000,10 @@ yuv2rgb_full_1_template_lasx(SwsContext *c, const int16_t *buf0, + __m256i y_l, u_l, v_l; + __m256i R_l, G_l, B_l; + +- b = LASX_LD((buf0 + i)); +- ub = LASX_LD((ubuf0 + i)); +- vb = LASX_LD((vbuf0 + i)); +- LASX_UNPCK_L_W_H(b, y_l); +- LASX_UNPCK_L_W_H_2(ub, vb, ub_l, vb_l); ++ DUP2_ARG2(__lasx_xvld, buf0 + i, 0, ubuf0 + i, 0, b, ub); ++ vb = __lasx_xvld(vbuf0 + i, 0); ++ y_l = __lasx_vext2xv_w_h(b); ++ DUP2_ARG1(__lasx_vext2xv_w_h, ub, vb, ub_l, vb_l); + y_l = __lasx_xvslli_w(y_l, 2); + u_l = __lasx_xvsub_w(ub_l, uv); + v_l = __lasx_xvsub_w(vb_l, uv); +@@ -2029,9 +2015,9 @@ yuv2rgb_full_1_template_lasx(SwsContext *c, const int16_t *buf0, + if(hasAlpha) { + __m256i a_src, a_l; + +- a_src = LASX_LD((abuf0 + i)); ++ a_src = __lasx_xvld(abuf0 + i, 0); + a_src = __lasx_xvpermi_d(a_src, 0xD8); +- LASX_ADDW_W_W_H_128SV(bias, a_src, a_l); ++ a_l = __lasx_xvaddw_w_w_h(bias, a_src); + a_l = __lasx_xvsrai_w(a_l, 7); + WRITE_FULL_L_A(R_l, G_l, B_l, a_l, c, dest, i, R, A, G, B, + y, target, hasAlpha, err); +@@ -2075,22 +2061,21 @@ yuv2rgb_full_1_template_lasx(SwsContext *c, const int16_t *buf0, + __m256i y_l, y_h, u_l, u_h, v_l, v_h; + __m256i R_l, R_h, G_l, G_h, B_l, B_h; + +- b = LASX_LD((buf0 + i)); +- ub0 = LASX_LD((ubuf0 + i)); +- vb0 = LASX_LD((vbuf0 + i)); +- ub1 = LASX_LD((ubuf1 + i)); +- vb1 = LASX_LD((vbuf1 + i)); +- LASX_UNPCK_L_W_H(b, y_l); ++ DUP4_ARG2(__lasx_xvld, buf0 + i, 0, ubuf0 + i, 0, vbuf0 + i, 0, ubuf1 + i, 0, ++ b, ub0, vb0, ub1); ++ vb1 = __lasx_xvld(vbuf1 + i, 0); ++ y_l = __lasx_vext2xv_w_h(b); + b = __lasx_xvpermi_d(b, 0X4E); +- LASX_UNPCK_L_W_H(b, y_h); ++ y_h = __lasx_vext2xv_w_h(b); + y_l = __lasx_xvslli_w(y_l, 2); + y_h = __lasx_xvslli_w(y_h, 2); + ub0 = __lasx_xvpermi_d(ub0, 0xD8); + vb0 = __lasx_xvpermi_d(vb0, 0xD8); + ub1 = __lasx_xvpermi_d(ub1, 0xD8); + vb1 = __lasx_xvpermi_d(vb1, 0xD8); +- LASX_ADDWL_W_H_2_128SV(ub0, ub1, vb0, vb1, u_l, v_l); +- LASX_ADDWH_W_H_2_128SV(ub0, ub1, vb0, vb1, u_h, v_h); ++ ++ DUP2_ARG2(__lasx_xvaddwl_w_h, ub0, ub1, vb0, vb1, u_l, v_l); ++ DUP2_ARG2(__lasx_xvaddwh_w_h, ub0, ub1, vb0, vb1, u_h, v_h); + u_l = __lasx_xvsub_w(u_l, uv); + u_h = __lasx_xvsub_w(u_h, uv); + v_l = __lasx_xvsub_w(v_l, uv); +@@ -2108,11 +2093,11 @@ yuv2rgb_full_1_template_lasx(SwsContext *c, const int16_t *buf0, + __m256i a_src; + __m256i a_l, a_h; + +- a_src = LASX_LD((abuf0 + i)); ++ a_src = __lasx_xvld(abuf0 + i, 0); + a_src = __lasx_xvpermi_d(a_src, 0xD8); +- LASX_ADDW_W_W_H_128SV(bias, a_src, a_l); ++ a_l = __lasx_xvaddw_w_w_h(bias, a_src); + a_src = __lasx_xvpermi_d(a_src, 0xB1); +- LASX_ADDW_W_W_H_128SV(bias, a_src, a_h); ++ a_h = __lasx_xvaddw_w_w_h(bias, a_src); + a_l = __lasx_xvsrai_w(a_l, 7); + a_h = __lasx_xvsrai_w(a_h, 7); + WRITE_FULL_L_A(R_l, G_l, B_l, a_l, c, dest, i, R, A, G, B, +@@ -2139,18 +2124,16 @@ yuv2rgb_full_1_template_lasx(SwsContext *c, const int16_t *buf0, + __m256i y_l, u_l, v_l; + __m256i R_l, G_l, B_l; + +- b = LASX_LD((buf0 + i)); +- ub0 = LASX_LD((ubuf0 + i)); +- vb0 = LASX_LD((vbuf0 + i)); +- ub1 = LASX_LD((ubuf1 + i)); +- vb1 = LASX_LD((vbuf1 + i)); +- LASX_UNPCK_L_W_H(b, y_l); ++ DUP4_ARG2(__lasx_xvld, buf0 + i, 0, ubuf0 + i, 0, vbuf0 + i, 0, ubuf1 + i, 0, ++ b, ub0, vb0, ub1); ++ vb1 = __lasx_xvld(vbuf1 + i, 0); ++ y_l = __lasx_vext2xv_w_h(b); + y_l = __lasx_xvslli_w(y_l, 2); + ub0 = __lasx_xvpermi_d(ub0, 0xD8); + vb0 = __lasx_xvpermi_d(vb0, 0xD8); + ub1 = __lasx_xvpermi_d(ub1, 0xD8); + vb1 = __lasx_xvpermi_d(vb1, 0xD8); +- LASX_ADDWL_W_H_2_128SV(ub0, ub1, vb0, vb1, u_l, v_l); ++ DUP2_ARG2(__lasx_xvaddwl_w_h, ub0, ub1, vb0, vb1, u_l, v_l); + u_l = __lasx_xvsub_w(u_l, uv); + v_l = __lasx_xvsub_w(v_l, uv); + u_l = __lasx_xvslli_w(u_l, 1); +@@ -2162,9 +2145,9 @@ yuv2rgb_full_1_template_lasx(SwsContext *c, const int16_t *buf0, + __m256i a_src; + __m256i a_l; + +- a_src = LASX_LD((abuf0 + i)); ++ a_src = __lasx_xvld(abuf0 + i, 0); + a_src = __lasx_xvpermi_d(a_src, 0xD8); +- LASX_ADDW_W_W_H_128SV(bias, a_src, a_l); ++ a_l = __lasx_xvaddw_w_w_h(bias, a_src); + a_l = __lasx_xvsrai_w(a_l, 7); + WRITE_FULL_L_A(R_l, G_l, B_l, a_l, c, dest, i, R, A, G, B, + y, target, hasAlpha, err); +diff --git a/libswscale/loongarch/rgb2rgb_lasx.c b/libswscale/loongarch/rgb2rgb_lasx.c +index d04cecd57f..78b5a03bb4 100644 +--- a/libswscale/loongarch/rgb2rgb_lasx.c ++++ b/libswscale/loongarch/rgb2rgb_lasx.c +@@ -21,7 +21,7 @@ + */ + + #include "swscale_loongarch.h" +-#include "libavutil/loongarch/generic_macros_lasx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + + void ff_interleave_bytes_lasx(const uint8_t *src1, const uint8_t *src2, + uint8_t *dest, int width, int height, +@@ -35,12 +35,11 @@ void ff_interleave_bytes_lasx(const uint8_t *src1, const uint8_t *src2, + __m256i src_1, src_2, dst; + + for (w = 0; w < len; w += 16) { +- src_1 = LASX_LD(src1 + w); +- src_2 = LASX_LD(src2 + w); ++ DUP2_ARG2(__lasx_xvld, src1 + w, 0, src2 + w, 0, src_1, src_2); + src_1 = __lasx_xvpermi_d(src_1, 0xD8); + src_2 = __lasx_xvpermi_d(src_2, 0xD8); + dst = __lasx_xvilvl_b(src_2, src_1); +- LASX_ST(dst, dest + index); ++ __lasx_xvst(dst, dest + index, 0); + index += 32; + } + for (w = 0; w < width; w++) { +diff --git a/libswscale/loongarch/swscale_lasx.c b/libswscale/loongarch/swscale_lasx.c +index b3dc96681e..fb03d1291f 100644 +--- a/libswscale/loongarch/swscale_lasx.c ++++ b/libswscale/loongarch/swscale_lasx.c +@@ -20,262 +20,271 @@ + */ + + #include "swscale_loongarch.h" +-#include "libavutil/loongarch/generic_macros_lasx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + #include "libavutil/intreadwrite.h" + +-#define SCALE_8_16(_sh) \ +-{ \ +- src0 = __lasx_xvldrepl_d(src + filterPos[0], 0); \ +- src1 = __lasx_xvldrepl_d(src + filterPos[1], 0); \ +- src2 = __lasx_xvldrepl_d(src + filterPos[2], 0); \ +- src3 = __lasx_xvldrepl_d(src + filterPos[3], 0); \ +- src4 = __lasx_xvldrepl_d(src + filterPos[4], 0); \ +- src5 = __lasx_xvldrepl_d(src + filterPos[5], 0); \ +- src6 = __lasx_xvldrepl_d(src + filterPos[6], 0); \ +- src7 = __lasx_xvldrepl_d(src + filterPos[7], 0); \ +- src8 = __lasx_xvldrepl_d(src + filterPos[8], 0); \ +- src9 = __lasx_xvldrepl_d(src + filterPos[9], 0); \ +- src10 = __lasx_xvldrepl_d(src + filterPos[10], 0); \ +- src11 = __lasx_xvldrepl_d(src + filterPos[11], 0); \ +- src12 = __lasx_xvldrepl_d(src + filterPos[12], 0); \ +- src13 = __lasx_xvldrepl_d(src + filterPos[13], 0); \ +- src14 = __lasx_xvldrepl_d(src + filterPos[14], 0); \ +- src15 = __lasx_xvldrepl_d(src + filterPos[15], 0); \ +- LASX_LD_8(filter, 16, filter0, filter1, filter2, filter3, \ +- filter4, filter5, filter6, filter7); \ +- LASX_PCKEV_D_4_128SV(src1, src0, src3, src2, src5, src4, \ +- src7, src6, src0, src2, src4, src6); \ +- LASX_PCKEV_D_4_128SV(src9, src8, src11, src10, src13, src12, \ +- src15, src14, src8, src10, src12, src14);\ +- LASX_UNPCK_L_HU_BU_8(src0, src2, src4, src6, src8, src10, \ +- src12, src14, src0, src2, src4, src6, \ +- src8, src10, src12, src14); \ +- LASX_DP2_W_H_8(filter0, src0, filter1, src2, filter2, src4, \ +- filter3, src6, filter4, src8, filter5, src10, \ +- filter6, src12, filter7, src14, src0, src1, \ +- src2, src3, src4, src5, src6, src7); \ +- src0 = __lasx_xvhaddw_d_w(src0, src0); \ +- src1 = __lasx_xvhaddw_d_w(src1, src1); \ +- src2 = __lasx_xvhaddw_d_w(src2, src2); \ +- src3 = __lasx_xvhaddw_d_w(src3, src3); \ +- src4 = __lasx_xvhaddw_d_w(src4, src4); \ +- src5 = __lasx_xvhaddw_d_w(src5, src5); \ +- src6 = __lasx_xvhaddw_d_w(src6, src6); \ +- src7 = __lasx_xvhaddw_d_w(src7, src7); \ +- LASX_PCKEV_W_4_128SV(src1, src0, src3, src2, src5, src4, \ +- src7, src6, src0, src1, src2, src3); \ +- src0 = __lasx_xvhaddw_d_w(src0, src0); \ +- src1 = __lasx_xvhaddw_d_w(src1, src1); \ +- src2 = __lasx_xvhaddw_d_w(src2, src2); \ +- src3 = __lasx_xvhaddw_d_w(src3, src3); \ +- LASX_PCKEV_W_2_128SV(src1, src0, src3, src2, src0, src1); \ +- LASX_SRAI_W_2(src0, src1, src0, src1, _sh); \ +- src0 = __lasx_xvmin_w(src0, vmax); \ +- src1 = __lasx_xvmin_w(src1, vmax); \ +- src0 = __lasx_xvperm_w(src0, shuf); \ +- src1 = __lasx_xvperm_w(src1, shuf); \ +- LASX_PCKEV_H(src1, src0, src0); \ +- LASX_ST(src0, dst); \ +- filterPos += 16; \ +- filter += 128; \ +- dst += 16; \ ++#define SCALE_8_16(_sh) \ ++{ \ ++ src0 = __lasx_xvldrepl_d(src + filterPos[0], 0); \ ++ src1 = __lasx_xvldrepl_d(src + filterPos[1], 0); \ ++ src2 = __lasx_xvldrepl_d(src + filterPos[2], 0); \ ++ src3 = __lasx_xvldrepl_d(src + filterPos[3], 0); \ ++ src4 = __lasx_xvldrepl_d(src + filterPos[4], 0); \ ++ src5 = __lasx_xvldrepl_d(src + filterPos[5], 0); \ ++ src6 = __lasx_xvldrepl_d(src + filterPos[6], 0); \ ++ src7 = __lasx_xvldrepl_d(src + filterPos[7], 0); \ ++ src8 = __lasx_xvldrepl_d(src + filterPos[8], 0); \ ++ src9 = __lasx_xvldrepl_d(src + filterPos[9], 0); \ ++ src10 = __lasx_xvldrepl_d(src + filterPos[10], 0); \ ++ src11 = __lasx_xvldrepl_d(src + filterPos[11], 0); \ ++ src12 = __lasx_xvldrepl_d(src + filterPos[12], 0); \ ++ src13 = __lasx_xvldrepl_d(src + filterPos[13], 0); \ ++ src14 = __lasx_xvldrepl_d(src + filterPos[14], 0); \ ++ src15 = __lasx_xvldrepl_d(src + filterPos[15], 0); \ ++ DUP4_ARG2(__lasx_xvld, filter, 0, filter + 16, 0, filter + 32, 0, \ ++ filter + 48, 0, filter0, filter1, filter2, filter3); \ ++ DUP4_ARG2(__lasx_xvld, filter + 64, 0, filter + 80, 0, \ ++ filter + 96, 0, filter + 112, 0, filter4, \ ++ filter5, filter6, filter7); \ ++ DUP4_ARG2(__lasx_xvpickev_d, src1, src0, src3, src2, \ ++ src5, src4, src7, src6, src0, src2, src4, src6); \ ++ DUP4_ARG2(__lasx_xvpickev_d, src9, src8, src11, src10, \ ++ src13, src12, src15, src14, src8, src10, src12, src14); \ ++ DUP4_ARG1(__lasx_vext2xv_hu_bu, src0, src2, src4, src6, \ ++ src0, src2, src4, src6); \ ++ DUP4_ARG1(__lasx_vext2xv_hu_bu, src8, src10, src12, \ ++ src14, src8, src10, src12, src14); \ ++ DUP4_ARG2(__lasx_xvdp2_w_h, filter0, src0, filter1, src2, \ ++ filter2, src4, filter3, src6, src0, src1, src2, src3); \ ++ DUP4_ARG2(__lasx_xvdp2_w_h, filter4, src8, filter5, src10, \ ++ filter6, src12, filter7, src14, src4, src5, src6, src7);\ ++ src0 = __lasx_xvhaddw_d_w(src0, src0); \ ++ src1 = __lasx_xvhaddw_d_w(src1, src1); \ ++ src2 = __lasx_xvhaddw_d_w(src2, src2); \ ++ src3 = __lasx_xvhaddw_d_w(src3, src3); \ ++ src4 = __lasx_xvhaddw_d_w(src4, src4); \ ++ src5 = __lasx_xvhaddw_d_w(src5, src5); \ ++ src6 = __lasx_xvhaddw_d_w(src6, src6); \ ++ src7 = __lasx_xvhaddw_d_w(src7, src7); \ ++ DUP4_ARG2(__lasx_xvpickev_w, src1, src0, src3, src2, \ ++ src5, src4, src7, src6, src0, src1, src2, src3); \ ++ src0 = __lasx_xvhaddw_d_w(src0, src0); \ ++ src1 = __lasx_xvhaddw_d_w(src1, src1); \ ++ src2 = __lasx_xvhaddw_d_w(src2, src2); \ ++ src3 = __lasx_xvhaddw_d_w(src3, src3); \ ++ DUP2_ARG2(__lasx_xvpickev_w, src1, src0, src3, src2, src0, src1); \ ++ DUP2_ARG2(__lasx_xvsrai_w, src0, _sh, src1, _sh, src0, src1); \ ++ src0 = __lasx_xvmin_w(src0, vmax); \ ++ src1 = __lasx_xvmin_w(src1, vmax); \ ++ src0 = __lasx_xvperm_w(src0, shuf); \ ++ src1 = __lasx_xvperm_w(src1, shuf); \ ++ src0 = __lasx_xvpickev_h(src1, src0); \ ++ src0 = __lasx_xvpermi_d(src0, 0xd8); \ ++ __lasx_xvst(src0, dst, 0); \ ++ filterPos += 16; \ ++ filter += 128; \ ++ dst += 16; \ + } + +-#define SCALE_8_8(_sh) \ +-{ \ +- src0 = __lasx_xvldrepl_d(src + filterPos[0], 0); \ +- src1 = __lasx_xvldrepl_d(src + filterPos[1], 0); \ +- src2 = __lasx_xvldrepl_d(src + filterPos[2], 0); \ +- src3 = __lasx_xvldrepl_d(src + filterPos[3], 0); \ +- src4 = __lasx_xvldrepl_d(src + filterPos[4], 0); \ +- src5 = __lasx_xvldrepl_d(src + filterPos[5], 0); \ +- src6 = __lasx_xvldrepl_d(src + filterPos[6], 0); \ +- src7 = __lasx_xvldrepl_d(src + filterPos[7], 0); \ +- LASX_LD_4(filter, 16, filter0, filter1, filter2, filter3); \ +- LASX_PCKEV_D_4_128SV(src1, src0, src3, src2, src5, src4, \ +- src7, src6, src0, src2, src4, src6); \ +- LASX_UNPCK_L_HU_BU_4(src0, src2, src4, src6, \ +- src0, src2, src4, src6); \ +- LASX_DP2_W_H_4(filter0, src0, filter1, src2, filter2, src4, \ +- filter3, src6, src0, src1, src2, src3); \ +- src0 = __lasx_xvhaddw_d_w(src0, src0); \ +- src1 = __lasx_xvhaddw_d_w(src1, src1); \ +- src2 = __lasx_xvhaddw_d_w(src2, src2); \ +- src3 = __lasx_xvhaddw_d_w(src3, src3); \ +- LASX_PCKEV_W_2_128SV(src1, src0, src3, src2, src0, src1); \ +- src0 = __lasx_xvhaddw_d_w(src0, src0); \ +- src1 = __lasx_xvhaddw_d_w(src1, src1); \ +- LASX_PCKEV_W_128SV(src1, src0, src0); \ +- LASX_SRAI_W(src0, src0, _sh); \ +- src0 = __lasx_xvmin_w(src0, vmax); \ +- src0 = __lasx_xvperm_w(src0, shuf); \ ++#define SCALE_8_8(_sh) \ ++{ \ ++ src0 = __lasx_xvldrepl_d(src + filterPos[0], 0); \ ++ src1 = __lasx_xvldrepl_d(src + filterPos[1], 0); \ ++ src2 = __lasx_xvldrepl_d(src + filterPos[2], 0); \ ++ src3 = __lasx_xvldrepl_d(src + filterPos[3], 0); \ ++ src4 = __lasx_xvldrepl_d(src + filterPos[4], 0); \ ++ src5 = __lasx_xvldrepl_d(src + filterPos[5], 0); \ ++ src6 = __lasx_xvldrepl_d(src + filterPos[6], 0); \ ++ src7 = __lasx_xvldrepl_d(src + filterPos[7], 0); \ ++ DUP4_ARG2(__lasx_xvld, filter, 0, filter + 16, 0, filter + 32, \ ++ 0, filter + 48, 0, filter0, filter1, filter2, filter3); \ ++ DUP4_ARG2(__lasx_xvpickev_d, src1, src0, src3, src2, \ ++ src5, src4, src7, src6, src0, src2, src4, src6); \ ++ DUP4_ARG1(__lasx_vext2xv_hu_bu, src0, src2, src4, src6, \ ++ src0, src2, src4, src6); \ ++ DUP4_ARG2(__lasx_xvdp2_w_h, filter0, src0, filter1, src2, \ ++ filter2, src4, filter3, src6, src0, src1, src2,src3); \ ++ src0 = __lasx_xvhaddw_d_w(src0, src0); \ ++ src1 = __lasx_xvhaddw_d_w(src1, src1); \ ++ src2 = __lasx_xvhaddw_d_w(src2, src2); \ ++ src3 = __lasx_xvhaddw_d_w(src3, src3); \ ++ DUP2_ARG2(__lasx_xvpickev_w, src1, src0, src3, src2, src0, src1); \ ++ src0 = __lasx_xvhaddw_d_w(src0, src0); \ ++ src1 = __lasx_xvhaddw_d_w(src1, src1); \ ++ src0 = __lasx_xvpickev_w(src1, src0); \ ++ src0 = __lasx_xvsrai_w(src0, _sh); \ ++ src0 = __lasx_xvmin_w(src0, vmax); \ ++ src0 = __lasx_xvperm_w(src0, shuf); \ + } + +-#define SCALE_8_4(_sh) \ +-{ \ +- src0 = __lasx_xvldrepl_d(src + filterPos[0], 0); \ +- src1 = __lasx_xvldrepl_d(src + filterPos[1], 0); \ +- src2 = __lasx_xvldrepl_d(src + filterPos[2], 0); \ +- src3 = __lasx_xvldrepl_d(src + filterPos[3], 0); \ +- LASX_LD_2(filter, 16, filter0, filter1); \ +- LASX_PCKEV_D_2_128SV(src1, src0, src3, src2, src0, src2); \ +- LASX_UNPCK_L_HU_BU_2(src0, src2, src0, src2); \ +- LASX_DP2_W_H_2(filter0, src0, filter1, src2, src0, src1); \ +- src0 = __lasx_xvhaddw_d_w(src0, src0); \ +- src1 = __lasx_xvhaddw_d_w(src1, src1); \ +- LASX_PCKEV_W_128SV(src1, src0, src0); \ +- src0 = __lasx_xvhaddw_d_w(src0, src0); \ +- LASX_PCKEV_W_128SV(src0, src0, src0); \ +- LASX_SRAI_W(src0, src0, _sh); \ +- src0 = __lasx_xvmin_w(src0, vmax); \ +- src0 = __lasx_xvperm_w(src0, shuf); \ ++#define SCALE_8_4(_sh) \ ++{ \ ++ src0 = __lasx_xvldrepl_d(src + filterPos[0], 0); \ ++ src1 = __lasx_xvldrepl_d(src + filterPos[1], 0); \ ++ src2 = __lasx_xvldrepl_d(src + filterPos[2], 0); \ ++ src3 = __lasx_xvldrepl_d(src + filterPos[3], 0); \ ++ DUP2_ARG2(__lasx_xvld, filter, 0, filter + 16, 0, filter0, filter1); \ ++ DUP2_ARG2(__lasx_xvpickev_d, src1, src0, src3, src2, src0, src2); \ ++ DUP2_ARG1(__lasx_vext2xv_hu_bu, src0, src2, src0, src2); \ ++ DUP2_ARG2(__lasx_xvdp2_w_h, filter0, src0, filter1, src2, src0, src1);\ ++ src0 = __lasx_xvhaddw_d_w(src0, src0); \ ++ src1 = __lasx_xvhaddw_d_w(src1, src1); \ ++ src0 = __lasx_xvpickev_w(src1, src0); \ ++ src0 = __lasx_xvhaddw_d_w(src0, src0); \ ++ src0 = __lasx_xvpickev_w(src0, src0); \ ++ src0 = __lasx_xvsrai_w(src0, _sh); \ ++ src0 = __lasx_xvmin_w(src0, vmax); \ ++ src0 = __lasx_xvperm_w(src0, shuf); \ + } + +-#define SCALE_8_2(_sh) \ +-{ \ +- src0 = __lasx_xvldrepl_d(src + filterPos[0], 0); \ +- src1 = __lasx_xvldrepl_d(src + filterPos[1], 0); \ +- filter0 = LASX_LD(filter); \ +- LASX_PCKEV_D_128SV(src1, src0, src0); \ +- LASX_UNPCK_L_HU_BU(src0, src0); \ +- LASX_DP2_W_H(filter0, src0, src0); \ +- src0 = __lasx_xvhaddw_d_w(src0, src0); \ +- src0 = __lasx_xvhaddw_q_d(src0, src0); \ +- LASX_SRAI_W(src0, src0, _sh); \ +- src0 = __lasx_xvmin_w(src0, vmax); \ +- dst[0] = __lasx_xvpickve2gr_w(src0, 0); \ +- dst[1] = __lasx_xvpickve2gr_w(src0, 4); \ +- filterPos += 2; \ +- filter += 16; \ +- dst += 2; \ ++#define SCALE_8_2(_sh) \ ++{ \ ++ src0 = __lasx_xvldrepl_d(src + filterPos[0], 0); \ ++ src1 = __lasx_xvldrepl_d(src + filterPos[1], 0); \ ++ filter0 = __lasx_xvld(filter, 0); \ ++ src0 = __lasx_xvpickev_d(src1, src0); \ ++ src0 = __lasx_vext2xv_hu_bu(src0); \ ++ src0 = __lasx_xvdp2_w_h(filter0, src0); \ ++ src0 = __lasx_xvhaddw_d_w(src0, src0); \ ++ src0 = __lasx_xvhaddw_q_d(src0, src0); \ ++ src0 = __lasx_xvsrai_w(src0, _sh); \ ++ src0 = __lasx_xvmin_w(src0, vmax); \ ++ dst[0] = __lasx_xvpickve2gr_w(src0, 0); \ ++ dst[1] = __lasx_xvpickve2gr_w(src0, 4); \ ++ filterPos += 2; \ ++ filter += 16; \ ++ dst += 2; \ + } + +-#define SCALE_4_16(_sh) \ +-{ \ +- src0 = __lasx_xvldrepl_w(src + filterPos[0], 0); \ +- src1 = __lasx_xvldrepl_w(src + filterPos[1], 0); \ +- src2 = __lasx_xvldrepl_w(src + filterPos[2], 0); \ +- src3 = __lasx_xvldrepl_w(src + filterPos[3], 0); \ +- src4 = __lasx_xvldrepl_w(src + filterPos[4], 0); \ +- src5 = __lasx_xvldrepl_w(src + filterPos[5], 0); \ +- src6 = __lasx_xvldrepl_w(src + filterPos[6], 0); \ +- src7 = __lasx_xvldrepl_w(src + filterPos[7], 0); \ +- src8 = __lasx_xvldrepl_w(src + filterPos[8], 0); \ +- src9 = __lasx_xvldrepl_w(src + filterPos[9], 0); \ +- src10 = __lasx_xvldrepl_w(src + filterPos[10], 0); \ +- src11 = __lasx_xvldrepl_w(src + filterPos[11], 0); \ +- src12 = __lasx_xvldrepl_w(src + filterPos[12], 0); \ +- src13 = __lasx_xvldrepl_w(src + filterPos[13], 0); \ +- src14 = __lasx_xvldrepl_w(src + filterPos[14], 0); \ +- src15 = __lasx_xvldrepl_w(src + filterPos[15], 0); \ +- LASX_LD_4(filter, 16, filter0, filter1, filter2, filter3); \ +- LASX_ILVL_W_4_128SV(src1, src0, src3, src2, src5, src4, \ +- src7, src6, src0, src2, src4, src6); \ +- LASX_ILVL_W_4_128SV(src9, src8, src11, src10, src13, src12, \ +- src15, src14, src8, src10, src12, src14); \ +- LASX_ILVL_D_4_128SV(src2, src0, src6, src4, src10, src8, \ +- src14, src12, src0, src1, src2, src3); \ +- LASX_UNPCK_L_HU_BU_4(src0, src1, src2, src3, \ +- src0, src1, src2, src3); \ +- LASX_DP2_W_H_4(filter0, src0, filter1, src1, filter2, src2, \ +- filter3, src3, src0, src1, src2, src3); \ +- src0 = __lasx_xvhaddw_d_w(src0, src0); \ +- src1 = __lasx_xvhaddw_d_w(src1, src1); \ +- src2 = __lasx_xvhaddw_d_w(src2, src2); \ +- src3 = __lasx_xvhaddw_d_w(src3, src3); \ +- LASX_PCKEV_W_2_128SV(src1, src0, src3, src2, src0, src1); \ +- LASX_SRAI_W_2(src0, src1, src0, src1, _sh); \ +- src0 = __lasx_xvmin_w(src0, vmax); \ +- src1 = __lasx_xvmin_w(src1, vmax); \ +- LASX_PCKEV_H_128SV(src1, src0, src0); \ +- src0 = __lasx_xvperm_w(src0, shuf); \ +- LASX_ST(src0, dst); \ +- filterPos += 16; \ +- filter += 64; \ +- dst += 16; \ ++#define SCALE_4_16(_sh) \ ++{ \ ++ src0 = __lasx_xvldrepl_w(src + filterPos[0], 0); \ ++ src1 = __lasx_xvldrepl_w(src + filterPos[1], 0); \ ++ src2 = __lasx_xvldrepl_w(src + filterPos[2], 0); \ ++ src3 = __lasx_xvldrepl_w(src + filterPos[3], 0); \ ++ src4 = __lasx_xvldrepl_w(src + filterPos[4], 0); \ ++ src5 = __lasx_xvldrepl_w(src + filterPos[5], 0); \ ++ src6 = __lasx_xvldrepl_w(src + filterPos[6], 0); \ ++ src7 = __lasx_xvldrepl_w(src + filterPos[7], 0); \ ++ src8 = __lasx_xvldrepl_w(src + filterPos[8], 0); \ ++ src9 = __lasx_xvldrepl_w(src + filterPos[9], 0); \ ++ src10 = __lasx_xvldrepl_w(src + filterPos[10], 0); \ ++ src11 = __lasx_xvldrepl_w(src + filterPos[11], 0); \ ++ src12 = __lasx_xvldrepl_w(src + filterPos[12], 0); \ ++ src13 = __lasx_xvldrepl_w(src + filterPos[13], 0); \ ++ src14 = __lasx_xvldrepl_w(src + filterPos[14], 0); \ ++ src15 = __lasx_xvldrepl_w(src + filterPos[15], 0); \ ++ DUP4_ARG2(__lasx_xvld, filter, 0, filter + 16, 0, filter + 32, 0, \ ++ filter + 48, 0, filter0, filter1, filter2, filter3); \ ++ DUP4_ARG2(__lasx_xvilvl_w, src1, src0, src3, src2, src5, \ ++ src4, src7, src6, src0, src2, src4, src6); \ ++ DUP4_ARG2(__lasx_xvilvl_w, src9, src8, src11, src10, src13, \ ++ src12, src15, src14, src8, src10, src12, src14); \ ++ DUP4_ARG2(__lasx_xvilvl_d, src2, src0, src6, src4, src10, \ ++ src8, src14, src12, src0, src1, src2, src3); \ ++ DUP4_ARG1(__lasx_vext2xv_hu_bu, src0, src1, src2, src3, \ ++ src0, src1, src2, src3); \ ++ DUP4_ARG2(__lasx_xvdp2_w_h, filter0, src0, filter1, src1, \ ++ filter2, src2, filter3, src3, src0, src1, src2, src3); \ ++ src0 = __lasx_xvhaddw_d_w(src0, src0); \ ++ src1 = __lasx_xvhaddw_d_w(src1, src1); \ ++ src2 = __lasx_xvhaddw_d_w(src2, src2); \ ++ src3 = __lasx_xvhaddw_d_w(src3, src3); \ ++ DUP2_ARG2(__lasx_xvpickev_w, src1, src0, src3, src2, src0, src1); \ ++ DUP2_ARG2(__lasx_xvsrai_w, src0, _sh, src1, _sh, src0, src1); \ ++ src0 = __lasx_xvmin_w(src0, vmax); \ ++ src1 = __lasx_xvmin_w(src1, vmax); \ ++ src0 = __lasx_xvpickev_h(src1, src0); \ ++ src0 = __lasx_xvperm_w(src0, shuf); \ ++ __lasx_xvst(src0, dst, 0); \ ++ filterPos += 16; \ ++ filter += 64; \ ++ dst += 16; \ + } + +-#define SCALE_4_8(_sh) \ +-{ \ +- src0 = __lasx_xvldrepl_w(src + filterPos[0], 0); \ +- src1 = __lasx_xvldrepl_w(src + filterPos[1], 0); \ +- src2 = __lasx_xvldrepl_w(src + filterPos[2], 0); \ +- src3 = __lasx_xvldrepl_w(src + filterPos[3], 0); \ +- src4 = __lasx_xvldrepl_w(src + filterPos[4], 0); \ +- src5 = __lasx_xvldrepl_w(src + filterPos[5], 0); \ +- src6 = __lasx_xvldrepl_w(src + filterPos[6], 0); \ +- src7 = __lasx_xvldrepl_w(src + filterPos[7], 0); \ +- LASX_LD_2(filter, 16, filter0, filter1); \ +- LASX_ILVL_W_4_128SV(src1, src0, src3, src2, src5, src4, \ +- src7, src6, src0, src2, src4, src6); \ +- LASX_ILVL_D_2_128SV(src2, src0, src6, src4, src0, src1); \ +- LASX_UNPCK_L_HU_BU_2(src0, src1, src0, src1); \ +- LASX_DP2_W_H_2(filter0, src0, filter1, src1, src0, src1); \ +- src0 = __lasx_xvhaddw_d_w(src0, src0); \ +- src1 = __lasx_xvhaddw_d_w(src1, src1); \ +- LASX_PCKEV_W_128SV(src1, src0, src0); \ +- LASX_SRAI_W(src0, src0, _sh); \ +- src0 = __lasx_xvmin_w(src0, vmax); \ ++#define SCALE_4_8(_sh) \ ++{ \ ++ src0 = __lasx_xvldrepl_w(src + filterPos[0], 0); \ ++ src1 = __lasx_xvldrepl_w(src + filterPos[1], 0); \ ++ src2 = __lasx_xvldrepl_w(src + filterPos[2], 0); \ ++ src3 = __lasx_xvldrepl_w(src + filterPos[3], 0); \ ++ src4 = __lasx_xvldrepl_w(src + filterPos[4], 0); \ ++ src5 = __lasx_xvldrepl_w(src + filterPos[5], 0); \ ++ src6 = __lasx_xvldrepl_w(src + filterPos[6], 0); \ ++ src7 = __lasx_xvldrepl_w(src + filterPos[7], 0); \ ++ DUP2_ARG2(__lasx_xvld, filter, 0, filter + 16, 0, filter0, filter1); \ ++ DUP4_ARG2(__lasx_xvilvl_w, src1, src0, src3, src2, src5, \ ++ src4, src7, src6, src0, src2, src4, src6); \ ++ DUP2_ARG2(__lasx_xvilvl_d, src2, src0, src6, src4, src0, src1); \ ++ \ ++ DUP2_ARG1(__lasx_vext2xv_hu_bu, src0, src1, src0, src1); \ ++ DUP2_ARG2(__lasx_xvdp2_w_h, filter0, src0, filter1, src1, src0, src1);\ ++ src0 = __lasx_xvhaddw_d_w(src0, src0); \ ++ src1 = __lasx_xvhaddw_d_w(src1, src1); \ ++ src0 = __lasx_xvpickev_w(src1, src0); \ ++ src0 = __lasx_xvsrai_w(src0, _sh); \ ++ src0 = __lasx_xvmin_w(src0, vmax); \ + } + +-#define SCALE_4_4(_sh) \ +-{ \ +- src0 = __lasx_xvldrepl_w(src + filterPos[0], 0); \ +- src1 = __lasx_xvldrepl_w(src + filterPos[1], 0); \ +- src2 = __lasx_xvldrepl_w(src + filterPos[2], 0); \ +- src3 = __lasx_xvldrepl_w(src + filterPos[3], 0); \ +- filter0 = LASX_LD(filter); \ +- LASX_ILVL_W_2_128SV(src1, src0, src3, src2, src0, src1); \ +- LASX_ILVL_D_128SV(src1, src0, src0); \ +- LASX_UNPCK_L_HU_BU(src0, src0); \ +- LASX_DP2_W_H(filter0, src0, src0); \ +- src0 = __lasx_xvhaddw_d_w(src0, src0); \ +- LASX_SRAI_W(src0, src0, _sh); \ +- src0 = __lasx_xvmin_w(src0, vmax); \ +- LASX_PCKEV_W(src0, src0, src0); \ ++#define SCALE_4_4(_sh) \ ++{ \ ++ src0 = __lasx_xvldrepl_w(src + filterPos[0], 0); \ ++ src1 = __lasx_xvldrepl_w(src + filterPos[1], 0); \ ++ src2 = __lasx_xvldrepl_w(src + filterPos[2], 0); \ ++ src3 = __lasx_xvldrepl_w(src + filterPos[3], 0); \ ++ filter0 = __lasx_xvld(filter, 0); \ ++ DUP2_ARG2(__lasx_xvilvl_w, src1, src0, src3, src2, src0, src1); \ ++ \ ++ src0 = __lasx_xvilvl_d(src1, src0); \ ++ src0 = __lasx_vext2xv_hu_bu(src0); \ ++ src0 = __lasx_xvdp2_w_h(filter0, src0); \ ++ src0 = __lasx_xvhaddw_d_w(src0, src0); \ ++ src0 = __lasx_xvsrai_w(src0, _sh); \ ++ src0 = __lasx_xvmin_w(src0, vmax); \ ++ src0 = __lasx_xvpickev_w(src0, src0); \ ++ src0 = __lasx_xvpermi_d(src0, 0xd8); \ + } + +-#define SCALE_4_2(_sh) \ +-{ \ +- src0 = __lasx_xvldrepl_w(src + filterPos[0], 0); \ +- src1 = __lasx_xvldrepl_w(src + filterPos[1], 0); \ +- filter0 = LASX_LD(filter); \ +- LASX_ILVL_W_128SV(src1, src0, src0); \ +- LASX_UNPCK_L_HU_BU(src0, src0); \ +- LASX_DP2_W_H(filter0, src0, src0); \ +- src0 = __lasx_xvhaddw_d_w(src0, src0); \ +- LASX_SRAI_W(src0, src0, _sh); \ +- src0 = __lasx_xvmin_w(src0, vmax); \ +- dst[0] = __lasx_xvpickve2gr_w(src0, 0); \ +- dst[1] = __lasx_xvpickve2gr_w(src0, 2); \ +- filterPos += 2; \ +- filter += 8; \ +- dst += 2; \ ++#define SCALE_4_2(_sh) \ ++{ \ ++ src0 = __lasx_xvldrepl_w(src + filterPos[0], 0); \ ++ src1 = __lasx_xvldrepl_w(src + filterPos[1], 0); \ ++ filter0 = __lasx_xvld(filter, 0); \ ++ src0 = __lasx_xvilvl_w(src1, src0); \ ++ src0 = __lasx_vext2xv_hu_bu(src0); \ ++ src0 = __lasx_xvdp2_w_h(filter0, src0); \ ++ src0 = __lasx_xvhaddw_d_w(src0, src0); \ ++ src0 = __lasx_xvsrai_w(src0, _sh); \ ++ src0 = __lasx_xvmin_w(src0, vmax); \ ++ dst[0] = __lasx_xvpickve2gr_w(src0, 0); \ ++ dst[1] = __lasx_xvpickve2gr_w(src0, 2); \ ++ filterPos += 2; \ ++ filter += 8; \ ++ dst += 2; \ + } + +-#define SCALE_16 \ +-{ \ +- src0 = __lasx_xvldrepl_d((srcPos1 + j), 0); \ +- src1 = __lasx_xvldrepl_d((srcPos2 + j), 0); \ +- src2 = __lasx_xvldrepl_d((srcPos3 + j), 0); \ +- src3 = __lasx_xvldrepl_d((srcPos4 + j), 0); \ +- filter0 = LASX_LD(filterStart1 + j); \ +- filter1 = LASX_LD(filterStart2 + j); \ +- filter2 = LASX_LD(filterStart3 + j); \ +- filter3 = LASX_LD(filterStart4 + j); \ +- src0 = __lasx_xvpermi_q(src0, src1, 0x02); \ +- src1 = __lasx_xvpermi_q(src2, src3, 0x02); \ +- filter0 = __lasx_xvpermi_q(filter0, filter1, 0x02); \ +- filter1 = __lasx_xvpermi_q(filter2, filter3, 0x02); \ +- LASX_ILVL_B_2_128SV(zero, src0, zero, src1, src0, src1); \ +- LASX_DP2_W_H(filter0, src0, out0); \ +- LASX_DP2_W_H(filter1, src1, out1); \ +- src0 = __lasx_xvhaddw_d_w(out0, out0); \ +- src1 = __lasx_xvhaddw_d_w(out1, out1); \ +- out0 = __lasx_xvpackev_d(src1, src0); \ +- out1 = __lasx_xvpackod_d(src1, src0); \ +- out0 = __lasx_xvadd_w(out0, out1); \ +- out = __lasx_xvadd_w(out, out0); \ ++#define SCALE_16 \ ++{ \ ++ src0 = __lasx_xvldrepl_d((srcPos1 + j), 0); \ ++ src1 = __lasx_xvldrepl_d((srcPos2 + j), 0); \ ++ src2 = __lasx_xvldrepl_d((srcPos3 + j), 0); \ ++ src3 = __lasx_xvldrepl_d((srcPos4 + j), 0); \ ++ DUP4_ARG2(__lasx_xvld, filterStart1 + j, 0, filterStart2 + j, 0, \ ++ filterStart3 + j, 0, filterStart4 + j, 0, filter0, \ ++ filter1, filter2, filter3); \ ++ src0 = __lasx_xvpermi_q(src0, src1, 0x02); \ ++ src1 = __lasx_xvpermi_q(src2, src3, 0x02); \ ++ filter0 = __lasx_xvpermi_q(filter0, filter1, 0x02); \ ++ filter1 = __lasx_xvpermi_q(filter2, filter3, 0x02); \ ++ DUP2_ARG2(__lasx_xvilvl_b, zero, src0, zero, src1, src0, src1); \ ++ DUP2_ARG2(__lasx_xvdp2_w_h, filter0, src0, filter1, src1, \ ++ out0, out1); \ ++ src0 = __lasx_xvhaddw_d_w(out0, out0); \ ++ src1 = __lasx_xvhaddw_d_w(out1, out1); \ ++ out0 = __lasx_xvpackev_d(src1, src0); \ ++ out1 = __lasx_xvpackod_d(src1, src0); \ ++ out0 = __lasx_xvadd_w(out0, out1); \ ++ out = __lasx_xvadd_w(out, out0); \ + } + + void ff_hscale_8_to_15_lasx(SwsContext *c, int16_t *dst, int dstW, +@@ -299,16 +308,17 @@ void ff_hscale_8_to_15_lasx(SwsContext *c, int16_t *dst, int dstW, + } + if (res & 8) { + SCALE_8_8(7); +- LASX_PCKEV_H_128SV(src0, src0, src0); +- LASX_ST_D_2(src0, 0, 2, dst, 4); ++ src0 = __lasx_xvpickev_h(src0, src0); ++ __lasx_xvstelm_d(src0, dst, 0, 0); ++ __lasx_xvstelm_d(src0, dst, 8, 2); + filterPos += 8; + filter += 64; + dst += 8; + } + if (res & 4) { + SCALE_8_4(7); +- LASX_PCKEV_H_128SV(src0, src0, src0); +- LASX_ST_D(src0, 0, dst); ++ src0 = __lasx_xvpickev_h(src0, src0); ++ __lasx_xvstelm_d(src0, dst, 0, 0); + filterPos += 4; + filter += 32; + dst += 4; +@@ -319,9 +329,9 @@ void ff_hscale_8_to_15_lasx(SwsContext *c, int16_t *dst, int dstW, + if (res & 1) { + int val = 0; + src0 = __lasx_xvldrepl_d(src + filterPos[0], 0); +- filter0 = LASX_LD(filter); +- LASX_UNPCK_L_HU_BU(src0, src0); +- LASX_DP2_W_H(filter0, src0, src0); ++ filter0 = __lasx_xvld(filter, 0); ++ src0 = __lasx_vext2xv_hu_bu(src0); ++ src0 = __lasx_xvdp2_w_h(filter0, src0); + src0 = __lasx_xvhaddw_d_w(src0, src0); + src0 = __lasx_xvhaddw_q_d(src0, src0); + val = __lasx_xvpickve2gr_w(src0, 0); +@@ -340,17 +350,18 @@ void ff_hscale_8_to_15_lasx(SwsContext *c, int16_t *dst, int dstW, + } + if (res & 8) { + SCALE_4_8(7); +- LASX_PCKEV_H_128SV(src1, src0, src0); ++ src0 = __lasx_xvpickev_h(src1, src0); + src0 = __lasx_xvperm_w(src0, shuf); +- LASX_ST_D_2(src0, 0, 1, dst, 4); ++ __lasx_xvstelm_d(src0, dst, 0, 0); ++ __lasx_xvstelm_d(src0, dst, 8, 1); + filterPos += 8; + filter += 32; + dst += 8; + } + if (res & 4) { + SCALE_4_4(7); +- LASX_PCKEV_H_128SV(src0, src0, src0); +- LASX_ST_D(src0, 0, dst); ++ src0 = __lasx_xvpickev_h(src0, src0); ++ __lasx_xvstelm_d(src0, dst, 0, 0); + filterPos += 4; + filter += 16; + dst += 4; +@@ -415,9 +426,9 @@ void ff_hscale_8_to_15_lasx(SwsContext *c, int16_t *dst, int dstW, + + for (j = 0; j < filterlen; j += 8) { + src1 = __lasx_xvldrepl_d((srcPos + j), 0); +- filter0 = LASX_LD(filter + j); +- LASX_ILVL_B_128SV(zero, src1, src1); +- LASX_DP2_W_H(filter0, src1, out0); ++ filter0 = __lasx_xvld(filter + j, 0); ++ src1 = __lasx_xvilvl_b(zero, src1); ++ out0 = __lasx_xvdp2_w_h(filter0, src1); + out0 = __lasx_xvhaddw_d_w(out0, out0); + out0 = __lasx_xvhaddw_q_d(out0, out0); + val += __lasx_xvpickve2gr_w(out0, 0); +@@ -459,14 +470,15 @@ void ff_hscale_8_to_19_lasx(SwsContext *c, int16_t *_dst, int dstW, + int res = dstW & 7; + while (len--) { + SCALE_8_8(3); +- LASX_ST(src0, dst); ++ __lasx_xvst(src0, dst, 0); + filterPos += 8; + filter += 64; + dst += 8; + } + if (res & 4) { + SCALE_8_4(3); +- LASX_ST_D_2(src0, 0, 1, dst, 4); ++ __lasx_xvstelm_d(src0, dst, 0, 0); ++ __lasx_xvstelm_d(src0, dst, 8, 1); + filterPos += 4; + filter += 32; + dst += 4; +@@ -479,9 +491,9 @@ void ff_hscale_8_to_19_lasx(SwsContext *c, int16_t *_dst, int dstW, + __m256i src0, filter0, out0; + + src0 = __lasx_xvldrepl_d(src + filterPos[0], 0); +- filter0 = LASX_LD(filter); +- LASX_UNPCK_L_HU_BU(src0, src0); +- LASX_DP2_W_H(filter0, src0, out0); ++ filter0 = __lasx_xvld(filter, 0); ++ src0 = __lasx_vext2xv_hu_bu(src0); ++ out0 = __lasx_xvdp2_w_h(filter0, src0); + out0 = __lasx_xvhaddw_d_w(out0, out0); + out0 = __lasx_xvhaddw_q_d(out0, out0); + val = __lasx_xvpickve2gr_w(out0, 0); +@@ -497,14 +509,15 @@ void ff_hscale_8_to_19_lasx(SwsContext *c, int16_t *_dst, int dstW, + while (len--) { + SCALE_4_8(3); + src0 = __lasx_xvperm_w(src0, shuf); +- LASX_ST(src0, dst); ++ __lasx_xvst(src0, dst, 0); + filterPos += 8; + filter += 32; + dst += 8; + } + if (res & 4) { + SCALE_4_4(3); +- LASX_ST_D_2(src0, 0, 2, dst, 4); ++ __lasx_xvstelm_d(src0, dst, 0, 0); ++ __lasx_xvstelm_d(src0, dst, 8, 1); + filterPos += 4; + filter += 16; + dst += 4; +@@ -569,9 +582,9 @@ void ff_hscale_8_to_19_lasx(SwsContext *c, int16_t *_dst, int dstW, + + for (j = 0; j < filterlen; j += 8) { + src1 = __lasx_xvldrepl_d((srcPos + j), 0); +- filter0 = LASX_LD(filter + j); +- LASX_ILVL_B_128SV(zero, src1, src1); +- LASX_DP2_W_H(filter0, src1, out0); ++ filter0 = __lasx_xvld(filter + j, 0); ++ src1 = __lasx_xvilvl_b(zero, src1); ++ out0 = __lasx_xvdp2_w_h(filter0, src1); + out0 = __lasx_xvhaddw_d_w(out0, out0); + out0 = __lasx_xvhaddw_q_d(out0, out0); + val += __lasx_xvpickve2gr_w(out0, 0); +@@ -598,59 +611,54 @@ void ff_hscale_8_to_19_lasx(SwsContext *c, int16_t *_dst, int dstW, + + #undef SCALE_16 + +-#define SCALE_8 \ +-{ \ +- int val1, val2, val3, val4; \ +- __m256i src0, src1, src2, src3, filter0, filter1, out0, out1; \ +- src0 = LASX_LD(src + filterPos[0]); \ +- src1 = LASX_LD(src + filterPos[1]); \ +- src2 = LASX_LD(src + filterPos[2]); \ +- src3 = LASX_LD(src + filterPos[3]); \ +- filter0 = LASX_LD(filter); \ +- filter1 = LASX_LD(filter + 16); \ +- src0 = __lasx_xvpermi_q(src0, src1, 0x02); \ +- src2 = __lasx_xvpermi_q(src2, src3, 0x02); \ +- LASX_DP2_W_HU_H_2(src0, filter0, src2, filter1, out0, out1); \ +- src0 = __lasx_xvhaddw_d_w(out0, out0); \ +- src1 = __lasx_xvhaddw_d_w(out1, out1); \ +- out0 = __lasx_xvpackev_d(src1, src0); \ +- out1 = __lasx_xvpackod_d(src1, src0); \ +- out0 = __lasx_xvadd_w(out0, out1); \ +- out0 = __lasx_xvsra_w(out0, shift); \ +- val1 = __lasx_xvpickve2gr_w(out0, 0); \ +- val2 = __lasx_xvpickve2gr_w(out0, 4); \ +- val3 = __lasx_xvpickve2gr_w(out0, 2); \ +- val4 = __lasx_xvpickve2gr_w(out0, 6); \ +- dst[0] = FFMIN(val1, max); \ +- dst[1] = FFMIN(val2, max); \ +- dst[2] = FFMIN(val3, max); \ +- dst[3] = FFMIN(val4, max); \ +- filterPos += 4; \ +- filter += 32; \ +- dst += 4; \ ++#define SCALE_8 \ ++{ \ ++ int val1, val2, val3, val4; \ ++ __m256i src0, src1, src2, src3, filter0, filter1, out0, out1; \ ++ DUP4_ARG2(__lasx_xvld, src + filterPos[0], 0, src + filterPos[1], 0, \ ++ src + filterPos[2], 0, src + filterPos[3], 0, src0, src1, src2,\ ++ src3); \ ++ DUP2_ARG2(__lasx_xvld, filter, 0, filter + 16, 0, filter0, filter1); \ ++ src0 = __lasx_xvpermi_q(src0, src1, 0x02); \ ++ src2 = __lasx_xvpermi_q(src2, src3, 0x02); \ ++ DUP2_ARG2(__lasx_xvdp2_w_hu_h, src0, filter0, src2, filter1, out0, out1);\ ++ src0 = __lasx_xvhaddw_d_w(out0, out0); \ ++ src1 = __lasx_xvhaddw_d_w(out1, out1); \ ++ out0 = __lasx_xvpackev_d(src1, src0); \ ++ out1 = __lasx_xvpackod_d(src1, src0); \ ++ out0 = __lasx_xvadd_w(out0, out1); \ ++ out0 = __lasx_xvsra_w(out0, shift); \ ++ val1 = __lasx_xvpickve2gr_w(out0, 0); \ ++ val2 = __lasx_xvpickve2gr_w(out0, 4); \ ++ val3 = __lasx_xvpickve2gr_w(out0, 2); \ ++ val4 = __lasx_xvpickve2gr_w(out0, 6); \ ++ dst[0] = FFMIN(val1, max); \ ++ dst[1] = FFMIN(val2, max); \ ++ dst[2] = FFMIN(val3, max); \ ++ dst[3] = FFMIN(val4, max); \ ++ filterPos += 4; \ ++ filter += 32; \ ++ dst += 4; \ + } + +-#define SCALE_16 \ +-{ \ +- src0 = LASX_LD(srcPos1 + j); \ +- src1 = LASX_LD(srcPos2 + j); \ +- src2 = LASX_LD(srcPos3 + j); \ +- src3 = LASX_LD(srcPos4 + j); \ +- filter0 = LASX_LD(filterStart1 + j); \ +- filter1 = LASX_LD(filterStart2 + j); \ +- filter2 = LASX_LD(filterStart3 + j); \ +- filter3 = LASX_LD(filterStart4 + j); \ +- src0 = __lasx_xvpermi_q(src0, src1, 0x02); \ +- src1 = __lasx_xvpermi_q(src2, src3, 0x02); \ +- filter0 = __lasx_xvpermi_q(filter0, filter1, 0x02); \ +- filter1 = __lasx_xvpermi_q(filter2, filter3, 0x02); \ +- LASX_DP2_W_HU_H_2(src0, filter0, src1, filter1, out0, out1); \ +- src0 = __lasx_xvhaddw_d_w(out0, out0); \ +- src1 = __lasx_xvhaddw_d_w(out1, out1); \ +- out0 = __lasx_xvpackev_d(src1, src0); \ +- out1 = __lasx_xvpackod_d(src1, src0); \ +- out0 = __lasx_xvadd_w(out0, out1); \ +- out = __lasx_xvadd_w(out, out0); \ ++#define SCALE_16 \ ++{ \ ++ DUP4_ARG2(__lasx_xvld, srcPos1 + j, 0, srcPos2 + j, 0, srcPos3 + j, \ ++ 0, srcPos4 + j, 0, src0, src1, src2, src3); \ ++ DUP4_ARG2(__lasx_xvld, filterStart1 + j, 0, filterStart2 + j, 0, \ ++ filterStart3 + j, 0, filterStart4 + j, 0, filter0, \ ++ filter1, filter2, filter3); \ ++ src0 = __lasx_xvpermi_q(src0, src1, 0x02); \ ++ src1 = __lasx_xvpermi_q(src2, src3, 0x02); \ ++ filter0 = __lasx_xvpermi_q(filter0, filter1, 0x02); \ ++ filter1 = __lasx_xvpermi_q(filter2, filter3, 0x02); \ ++ DUP2_ARG2(__lasx_xvdp2_w_hu_h, src0, filter0, src1, filter1, out0, out1);\ ++ src0 = __lasx_xvhaddw_d_w(out0, out0); \ ++ src1 = __lasx_xvhaddw_d_w(out1, out1); \ ++ out0 = __lasx_xvpackev_d(src1, src0); \ ++ out1 = __lasx_xvpackod_d(src1, src0); \ ++ out0 = __lasx_xvadd_w(out0, out1); \ ++ out = __lasx_xvadd_w(out, out0); \ + } + + void ff_hscale_16_to_15_lasx(SwsContext *c, int16_t *dst, int dstW, +@@ -683,9 +691,9 @@ void ff_hscale_16_to_15_lasx(SwsContext *c, int16_t *dst, int dstW, + int val = 0; + __m256i src0, filter0, out0; + +- src0 = LASX_LD(src + filterPos[i]); +- filter0 = LASX_LD(filter); +- LASX_DP2_W_HU_H(src0, filter0, out0); ++ src0 = __lasx_xvld(src + filterPos[i], 0); ++ filter0 = __lasx_xvld(filter, 0); ++ out0 = __lasx_xvdp2_w_hu_h(src0, filter0); + out0 = __lasx_xvhaddw_d_w(out0, out0); + out0 = __lasx_xvhaddw_q_d(out0, out0); + val = __lasx_xvpickve2gr_w(out0, 0); +@@ -700,11 +708,11 @@ void ff_hscale_16_to_15_lasx(SwsContext *c, int16_t *dst, int dstW, + src2 = __lasx_xvldrepl_d(src + filterPos[1], 0); + src3 = __lasx_xvldrepl_d(src + filterPos[2], 0); + src4 = __lasx_xvldrepl_d(src + filterPos[3], 0); +- filter0 = LASX_LD(filter); ++ filter0 = __lasx_xvld(filter, 0); + src1 = __lasx_xvextrins_d(src1, src2, 0x10); + src3 = __lasx_xvextrins_d(src3, src4, 0x10); + src0 = __lasx_xvpermi_q(src1, src3, 0x02); +- LASX_DP2_W_HU_H(src0, filter0, out0); ++ out0 = __lasx_xvdp2_w_hu_h(src0, filter0); + out0 = __lasx_xvhaddw_d_w(out0, out0); + out0 = __lasx_xvsra_w(out0, shift); + dst[0] = FFMIN((__lasx_xvpickve2gr_w(out0, 0)), max); +@@ -769,9 +777,8 @@ void ff_hscale_16_to_15_lasx(SwsContext *c, int16_t *dst, int dstW, + __m256i src0, filter0, out0; + + for (j = 0; j < filterlen; j += 8) { +- src0 = LASX_LD(srcPos + j); +- filter0 = LASX_LD(filter + j); +- LASX_DP2_W_HU_H(src0, filter0, out0); ++ DUP2_ARG2(__lasx_xvld, srcPos + j, 0, filter + j, 0, src0, filter0); ++ out0 = __lasx_xvdp2_w_hu_h(src0, filter0); + out0 = __lasx_xvhaddw_d_w(out0, out0); + out0 = __lasx_xvhaddw_q_d(out0, out0); + val += __lasx_xvpickve2gr_w(out0, 0); +@@ -827,9 +834,8 @@ void ff_hscale_16_to_19_lasx(SwsContext *c, int16_t *_dst, int dstW, + int val = 0; + __m256i src0, filter0, out0; + +- src0 = LASX_LD(src + filterPos[i]); +- filter0 = LASX_LD(filter); +- LASX_DP2_W_HU_H(src0, filter0, out0); ++ DUP2_ARG2(__lasx_xvld, src + filterPos[i], 0, filter, 0, src0, filter0); ++ out0 = __lasx_xvdp2_w_hu_h(src0, filter0); + out0 = __lasx_xvhaddw_d_w(out0, out0); + out0 = __lasx_xvhaddw_q_d(out0, out0); + val = __lasx_xvpickve2gr_w(out0, 0); +@@ -844,11 +850,11 @@ void ff_hscale_16_to_19_lasx(SwsContext *c, int16_t *_dst, int dstW, + src2 = __lasx_xvldrepl_d(src + filterPos[1], 0); + src3 = __lasx_xvldrepl_d(src + filterPos[2], 0); + src4 = __lasx_xvldrepl_d(src + filterPos[3], 0); +- filter0 = LASX_LD(filter); ++ filter0 = __lasx_xvld(filter, 0); + src1 = __lasx_xvextrins_d(src1, src2, 0x10); + src3 = __lasx_xvextrins_d(src3, src4, 0x10); + src0 = __lasx_xvpermi_q(src1, src3, 0x02); +- LASX_DP2_W_HU_H(src0, filter0, out0); ++ out0 = __lasx_xvdp2_w_hu_h(src0, filter0); + out0 = __lasx_xvhaddw_d_w(out0, out0); + out0 = __lasx_xvsra_w(out0, shift); + dst[0] = FFMIN((__lasx_xvpickve2gr_w(out0, 0)), max); +@@ -913,9 +919,8 @@ void ff_hscale_16_to_19_lasx(SwsContext *c, int16_t *_dst, int dstW, + __m256i src0, filter0, out0; + + for (j = 0; j < filterlen; j += 8) { +- src0 = LASX_LD(srcPos + j); +- filter0 = LASX_LD(filter + j); +- LASX_DP2_W_HU_H(src0, filter0, out0); ++ DUP2_ARG2(__lasx_xvld, srcPos + j, 0, filter + j, 0, src0, filter0); ++ out0 = __lasx_xvdp2_w_hu_h(src0, filter0); + out0 = __lasx_xvhaddw_d_w(out0, out0); + out0 = __lasx_xvhaddw_q_d(out0, out0); + val += __lasx_xvpickve2gr_w(out0, 0); +diff --git a/libswscale/loongarch/yuv2rgb_lasx.c b/libswscale/loongarch/yuv2rgb_lasx.c +index be8aca4c66..c1f805e7a1 100644 +--- a/libswscale/loongarch/yuv2rgb_lasx.c ++++ b/libswscale/loongarch/yuv2rgb_lasx.c +@@ -21,7 +21,7 @@ + */ + + #include "swscale_loongarch.h" +-#include "libavutil/loongarch/generic_macros_lasx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" + + #define YUV2RGB_LOAD_COE \ + /* Load x_offset */ \ +@@ -36,11 +36,11 @@ + __m256i vr_coeff = __lasx_xvreplgr2vr_d(c->vrCoeff); \ + + #define LOAD_YUV_16 \ +- m_y = LASX_LD(py + (w << 4)); \ ++ m_y = __lasx_xvld(py + (w << 4), 0); \ + m_u = __lasx_xvldrepl_d(pu + (w << 3), 0); \ + m_v = __lasx_xvldrepl_d(pv + (w << 3), 0); \ +- LASX_UNPCK_L_HU_BU(m_y, m_y); \ +- LASX_UNPCK_L_HU_BU_2(m_u, m_v, m_u, m_v); \ ++ m_y = __lasx_vext2xv_hu_bu(m_y); \ ++ DUP2_ARG1(__lasx_vext2xv_hu_bu, m_u, m_v, m_u, m_v); \ + + /* YUV2RGB method + * The conversion method is as follows: +@@ -70,14 +70,14 @@ + v2g = __lasx_xvsadd_h(v2g, u2g); \ + g = __lasx_xvsadd_h(v2g, y_1); \ + b = __lasx_xvsadd_h(y_1, u2b); \ +- LASX_CLIP_H_0_255_2(r, g, r, g); \ +- LASX_CLIP_H_0_255(b, b); \ ++ DUP2_ARG1(__lasx_xvclip255_h, r, g, r, g); \ ++ b = __lasx_xvclip255_h(b); \ + + #define RGB_PACK_16(r, g, b, rgb_l, rgb_h) \ + { \ + __m256i rg; \ + rg = __lasx_xvpackev_b(g, r); \ +- LASX_SHUF_B_2_128SV(b, rg, b, rg, shuf2, shuf3, rgb_l, rgb_h); \ ++ DUP2_ARG3(__lasx_xvshuf_b, b, rg, shuf2, b, rg, shuf3, rgb_l, rgb_h); \ + } + + #define RGB_PACK_32(r, g, b, a, rgb_l, rgb_h) \ +@@ -85,8 +85,8 @@ + __m256i rg, ba; \ + rgb_l = __lasx_xvpackev_b(g, r); \ + rgb_h = __lasx_xvpackev_b(a, b); \ +- LASX_ILVL_H_128SV(rgb_h, rgb_l, rg); \ +- LASX_ILVH_H_128SV(rgb_h, rgb_l, ba); \ ++ rg = __lasx_xvilvl_h(rgb_h, rgb_l); \ ++ ba = __lasx_xvilvh_h(rgb_h, rgb_l); \ + rgb_l = __lasx_xvpermi_q(ba, rg, 0x20); \ + rgb_h = __lasx_xvpermi_q(ba, rg, 0x31); \ + } +@@ -94,7 +94,8 @@ + #define RGB_STORE_32(rgb_l, rgb_h, iamge, w) \ + { \ + uint8_t *index = image + (w * 64); \ +- LASX_ST_2(rgb_l, rgb_h, index, 32); \ ++ __lasx_xvst(rgb_l, index, 0); \ ++ __lasx_xvst(rgb_h, index + 32, 0); \ + } + + #define RGB_STORE(rgb_l, rgb_h, image, w) \ +-- +2.20.1 + diff --git a/package/ffmpeg/0004-pkg_lnd1-Release.patch b/package/ffmpeg/0004-pkg_lnd1-Release.patch new file mode 100644 index 00000000..5b033958 --- /dev/null +++ b/package/ffmpeg/0004-pkg_lnd1-Release.patch @@ -0,0 +1,1750 @@ +diff --git a/libavcodec/h264_cabac.c b/libavcodec/h264_cabac.c +index 815149a501..d4ddcba9e7 100644 +--- a/libavcodec/h264_cabac.c ++++ b/libavcodec/h264_cabac.c +@@ -44,6 +44,8 @@ + + #if ARCH_X86 + #include "x86/h264_cabac.c" ++#elif ARCH_LOONGARCH64 ++#include "loongarch/h264_cabac.c" + #endif + + /* Cabac pre state table */ +diff --git a/libavcodec/h264pred.c b/libavcodec/h264pred.c +index 5632a58fd7..718f2819ce 100644 +--- a/libavcodec/h264pred.c ++++ b/libavcodec/h264pred.c +@@ -600,4 +600,6 @@ av_cold void ff_h264_pred_init(H264PredContext *h, int codec_id, + ff_h264_pred_init_x86(h, codec_id, bit_depth, chroma_format_idc); + if (ARCH_MIPS) + ff_h264_pred_init_mips(h, codec_id, bit_depth, chroma_format_idc); ++ if (ARCH_LOONGARCH) ++ ff_h264_pred_init_loongarch(h, codec_id, bit_depth, chroma_format_idc); + } +diff --git a/libavcodec/h264pred.h b/libavcodec/h264pred.h +index 2863dc9bd1..4583052dfe 100644 +--- a/libavcodec/h264pred.h ++++ b/libavcodec/h264pred.h +@@ -122,5 +122,7 @@ void ff_h264_pred_init_x86(H264PredContext *h, int codec_id, + const int bit_depth, const int chroma_format_idc); + void ff_h264_pred_init_mips(H264PredContext *h, int codec_id, + const int bit_depth, const int chroma_format_idc); ++void ff_h264_pred_init_loongarch(H264PredContext *h, int codec_id, ++ const int bit_depth, const int chroma_format_idc); + + #endif /* AVCODEC_H264PRED_H */ +diff --git a/libavcodec/loongarch/Makefile b/libavcodec/loongarch/Makefile +index d82eef4fd0..583e3545eb 100644 +--- a/libavcodec/loongarch/Makefile ++++ b/libavcodec/loongarch/Makefile +@@ -8,6 +8,7 @@ OBJS-$(CONFIG_HEVC_DECODER) += loongarch/hevcdsp_init_loongarch.o + OBJS-$(CONFIG_VP8_DECODER) += loongarch/vp8dsp_init_loongarch.o + OBJS-$(CONFIG_VP9_DECODER) += loongarch/vp9dsp_init_loongarch.o + OBJS-$(CONFIG_VIDEODSP) += loongarch/videodsp_init.o ++OBJS-$(CONFIG_H264PRED) += loongarch/h264_intrapred_init_loongarch.o + LASX-OBJS-$(CONFIG_H264DSP) += loongarch/h264dsp_lasx.o \ + loongarch/h264idct_lasx.o \ + loongarch/h264_deblock_lasx.o +@@ -17,6 +18,7 @@ LASX-OBJS-$(CONFIG_IDCTDSP) += loongarch/simple_idct_lasx.o \ + loongarch/idctdsp_lasx.o + LASX-OBJS-$(CONFIG_VC1_DECODER) += loongarch/vc1dsp_lasx.o + LASX-OBJS-$(CONFIG_HPELDSP) += loongarch/hpeldsp_lasx.o ++LASX-OBJS-$(CONFIG_H264PRED) += loongarch/h264_intrapred_lasx.o + LSX-OBJS-$(CONFIG_HEVC_DECODER) += loongarch/hevcdsp_lsx.o + LSX-OBJS-$(CONFIG_HEVC_DECODER) += loongarch/hevc_idct_lsx.o + LSX-OBJS-$(CONFIG_HEVC_DECODER) += loongarch/hevc_mc_bi_lsx.o +diff --git a/libavcodec/loongarch/cabac.h b/libavcodec/loongarch/cabac.h +index c0e17e3462..ea937665b4 100644 +--- a/libavcodec/loongarch/cabac.h ++++ b/libavcodec/loongarch/cabac.h +@@ -28,67 +28,105 @@ + #include "libavcodec/cabac.h" + #include "config.h" + ++#define GET_CABAC_LOONGARCH \ ++ "ld.bu %[bit], %[state], 0x0 \n\t" \ ++ "andi %[tmp0], %[c_range], 0xC0 \n\t" \ ++ "slli.d %[tmp0], %[tmp0], 0x01 \n\t" \ ++ "add.d %[tmp0], %[tmp0], %[tables] \n\t" \ ++ "add.d %[tmp0], %[tmp0], %[bit] \n\t" \ ++ /* tmp1: RangeLPS */ \ ++ "ld.bu %[tmp1], %[tmp0], %[lps_off] \n\t" \ ++ \ ++ "sub.d %[c_range], %[c_range], %[tmp1] \n\t" \ ++ "slli.d %[tmp0], %[c_range], 0x11 \n\t" \ ++ "bge %[tmp0], %[c_low], 1f \n\t" \ ++ "move %[c_range], %[tmp1] \n\t" \ ++ "nor %[bit], %[bit], %[bit] \n\t" \ ++ "sub.d %[c_low], %[c_low], %[tmp0] \n\t" \ ++ \ ++ "1: \n\t" \ ++ /* tmp1: *state */ \ ++ "add.d %[tmp0], %[tables], %[bit] \n\t" \ ++ "ld.bu %[tmp1], %[tmp0], %[mlps_off] \n\t" \ ++ /* tmp2: lps_mask */ \ ++ "add.d %[tmp0], %[tables], %[c_range] \n\t" \ ++ "ld.bu %[tmp2], %[tmp0], %[norm_off] \n\t" \ ++ \ ++ "andi %[bit], %[bit], 0x01 \n\t" \ ++ "st.b %[tmp1], %[state], 0x0 \n\t" \ ++ "sll.d %[c_range], %[c_range], %[tmp2] \n\t" \ ++ "sll.d %[c_low], %[c_low], %[tmp2] \n\t" \ ++ \ ++ "and %[tmp1], %[c_low], %[cabac_mask] \n\t" \ ++ "bnez %[tmp1], 1f \n\t" \ ++ "ld.hu %[tmp1], %[c_bytestream], 0x0 \n\t" \ ++ "ctz.d %[tmp0], %[c_low] \n\t" \ ++ "addi.d %[tmp2], %[tmp0], -16 \n\t" \ ++ "revb.2h %[tmp0], %[tmp1] \n\t" \ ++ "slli.d %[tmp0], %[tmp0], 0x01 \n\t" \ ++ "sub.d %[tmp0], %[tmp0], %[cabac_mask] \n\t" \ ++ "sll.d %[tmp0], %[tmp0], %[tmp2] \n\t" \ ++ "add.d %[c_low], %[c_low], %[tmp0] \n\t" \ ++ "addi.d %[c_bytestream], %[c_bytestream], 0x02 \n\t" \ ++ "1: \n\t" \ ++ ++#define GET_CABAC_LOONGARCH_END \ ++ "ld.bu %[bit], %[state], 0x0 \n\t" \ ++ "andi %[tmp0], %[c_range], 0xC0 \n\t" \ ++ "slli.d %[tmp0], %[tmp0], 0x01 \n\t" \ ++ "add.d %[tmp0], %[tmp0], %[tables] \n\t" \ ++ "add.d %[tmp0], %[tmp0], %[bit] \n\t" \ ++ /* tmp1: RangeLPS */ \ ++ "ld.bu %[tmp1], %[tmp0], %[lps_off] \n\t" \ ++ \ ++ "sub.d %[c_range], %[c_range], %[tmp1] \n\t" \ ++ "slli.d %[tmp0], %[c_range], 0x11 \n\t" \ ++ "bge %[tmp0], %[c_low], 1f \n\t" \ ++ "move %[c_range], %[tmp1] \n\t" \ ++ "nor %[bit], %[bit], %[bit] \n\t" \ ++ "sub.d %[c_low], %[c_low], %[tmp0] \n\t" \ ++ \ ++ "1: \n\t" \ ++ /* tmp1: *state */ \ ++ "add.d %[tmp0], %[tables], %[bit] \n\t" \ ++ "ld.bu %[tmp1], %[tmp0], %[mlps_off] \n\t" \ ++ /* tmp2: lps_mask */ \ ++ "add.d %[tmp0], %[tables], %[c_range] \n\t" \ ++ "ld.bu %[tmp2], %[tmp0], %[norm_off] \n\t" \ ++ \ ++ "andi %[bit], %[bit], 0x01 \n\t" \ ++ "st.b %[tmp1], %[state], 0x0 \n\t" \ ++ "sll.d %[c_range], %[c_range], %[tmp2] \n\t" \ ++ "sll.d %[c_low], %[c_low], %[tmp2] \n\t" \ ++ \ ++ "and %[tmp1], %[c_low], %[cabac_mask] \n\t" \ ++ "bnez %[tmp1], 1f \n\t" \ ++ "ld.hu %[tmp1], %[c_bytestream], 0x0 \n\t" \ ++ "ctz.d %[tmp0], %[c_low] \n\t" \ ++ "addi.d %[tmp2], %[tmp0], -16 \n\t" \ ++ "revb.2h %[tmp0], %[tmp1] \n\t" \ ++ "slli.d %[tmp0], %[tmp0], 0x01 \n\t" \ ++ "sub.d %[tmp0], %[tmp0], %[cabac_mask] \n\t" \ ++ "sll.d %[tmp0], %[tmp0], %[tmp2] \n\t" \ ++ \ ++ "add.d %[c_low], %[c_low], %[tmp0] \n\t" \ ++ \ ++ "slt %[tmp0], %[c_bytestream], %[c_bytestream_end] \n\t" \ ++ "add.d %[c_bytestream], %[c_bytestream], %[tmp0] \n\t" \ ++ "add.d %[c_bytestream], %[c_bytestream], %[tmp0] \n\t" \ ++ "1: \n\t" \ ++ + #define get_cabac_inline get_cabac_inline_loongarch + static av_always_inline int get_cabac_inline_loongarch(CABACContext *c, + uint8_t * const state){ + int64_t tmp0, tmp1, tmp2, bit; + + __asm__ volatile ( +- "ld.bu %[bit], %[state], 0x0 \n\t" +- "andi %[tmp0], %[c_range], 0xC0 \n\t" +- "slli.d %[tmp0], %[tmp0], 0x01 \n\t" +- "add.d %[tmp0], %[tmp0], %[tables] \n\t" +- "add.d %[tmp0], %[tmp0], %[bit] \n\t" +- /* tmp1: RangeLPS */ +- "ld.bu %[tmp1], %[tmp0], %[lps_off] \n\t" +- +- "sub.d %[c_range], %[c_range], %[tmp1] \n\t" +- "slli.d %[tmp0], %[c_range], 0x11 \n\t" +- "bge %[tmp0], %[c_low], 1f \n\t" +- "move %[c_range], %[tmp1] \n\t" +- "nor %[bit], %[bit], %[bit] \n\t" +- "sub.d %[c_low], %[c_low], %[tmp0] \n\t" +- +- "1: \n\t" +- /* tmp1: *state */ +- "add.d %[tmp0], %[tables], %[bit] \n\t" +- "ld.bu %[tmp1], %[tmp0], %[mlps_off] \n\t" +- /* tmp2: lps_mask */ +- "add.d %[tmp0], %[tables], %[c_range] \n\t" +- "ld.bu %[tmp2], %[tmp0], %[norm_off] \n\t" +- +- "andi %[bit], %[bit], 0x01 \n\t" +- "st.b %[tmp1], %[state], 0x0 \n\t" +- "sll.d %[c_range], %[c_range], %[tmp2] \n\t" +- "sll.d %[c_low], %[c_low], %[tmp2] \n\t" +- +- "and %[tmp1], %[c_low], %[cabac_mask] \n\t" +- "bnez %[tmp1], 1f \n\t" +- "ld.hu %[tmp1], %[c_bytestream], 0x0 \n\t" +- "addi.d %[tmp0], %[c_low], -0X01 \n\t" +- "xor %[tmp0], %[c_low], %[tmp0] \n\t" +- "srai.d %[tmp0], %[tmp0], 0x0f \n\t" +- "add.d %[tmp0], %[tmp0], %[tables] \n\t" +- /* tmp2: ff_h264_norm_shift[x >> (CABAC_BITS - 1)] */ +- "ld.bu %[tmp2], %[tmp0], %[norm_off] \n\t" +- +- "revb.2h %[tmp0], %[tmp1] \n\t" +- "slli.d %[tmp0], %[tmp0], 0x01 \n\t" +- "sub.d %[tmp0], %[tmp0], %[cabac_mask] \n\t" +- +- "li.d %[tmp1], 0x07 \n\t" +- "sub.d %[tmp1], %[tmp1], %[tmp2] \n\t" +- "sll.d %[tmp0], %[tmp0], %[tmp1] \n\t" +- "add.d %[c_low], %[c_low], %[tmp0] \n\t" +- + #if UNCHECKED_BITSTREAM_READER +- "addi.d %[c_bytestream], %[c_bytestream], 0x02 \n\t" ++ GET_CABAC_LOONGARCH + #else +- "slt %[tmp0], %[c_bytestream], %[c_bytestream_end] \n\t" +- "add.d %[c_bytestream], %[c_bytestream], %[tmp0] \n\t" +- "add.d %[c_bytestream], %[c_bytestream], %[tmp0] \n\t" ++ GET_CABAC_LOONGARCH_END + #endif +- "1: \n\t" + : [bit]"=&r"(bit), [tmp0]"=&r"(tmp0), [tmp1]"=&r"(tmp1), [tmp2]"=&r"(tmp2), + [c_range]"+&r"(c->range), [c_low]"+&r"(c->low), + [c_bytestream]"+&r"(c->bytestream) +diff --git a/libavcodec/loongarch/h264_cabac.c b/libavcodec/loongarch/h264_cabac.c +new file mode 100644 +index 0000000000..d3ea8a884c +--- /dev/null ++++ b/libavcodec/loongarch/h264_cabac.c +@@ -0,0 +1,136 @@ ++/* ++ * Loongson optimized cabac ++ * ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hao Chen ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavcodec/cabac.h" ++#include "cabac.h" ++ ++#define decode_significance decode_significance_loongarch ++static int decode_significance_loongarch(CABACContext *c, int max_coeff, ++ uint8_t *significant_coeff_ctx_base, ++ int *index, int64_t last_off) ++{ ++ void *end = significant_coeff_ctx_base + max_coeff - 1; ++ int64_t minusstart = -(int64_t)significant_coeff_ctx_base; ++ int64_t minusindex = 4 - (int64_t)index; ++ int64_t bit, tmp0, tmp1, tmp2, one = 1; ++ uint8_t *state = significant_coeff_ctx_base; ++ ++ __asm__ volatile( ++ "3:" ++#if UNCHECKED_BITSTREAM_READER ++ GET_CABAC_LOONGARCH ++#else ++ GET_CABAC_LOONGARCH_END ++#endif ++ "blt %[bit], %[one], 4f \n\t" ++ "add.d %[state], %[state], %[last_off] \n\t" ++#if UNCHECKED_BITSTREAM_READER ++ GET_CABAC_LOONGARCH ++#else ++ GET_CABAC_LOONGARCH_END ++#endif ++ "sub.d %[state], %[state], %[last_off] \n\t" ++ "add.d %[tmp0], %[state], %[minusstart] \n\t" ++ "st.w %[tmp0], %[index], 0 \n\t" ++ "bge %[bit], %[one], 5f \n\t" ++ "addi.d %[index], %[index], 4 \n\t" ++ "4: \n\t" ++ "addi.d %[state], %[state], 1 \n\t" ++ "blt %[state], %[end], 3b \n\t" ++ "add.d %[tmp0], %[state], %[minusstart] \n\t" ++ "st.w %[tmp0], %[index], 0 \n\t" ++ "5: \n\t" ++ "add.d %[tmp0], %[index], %[minusindex] \n\t" ++ "srli.d %[tmp0], %[tmp0], 2 \n\t" ++ : [bit]"=&r"(bit), [tmp0]"=&r"(tmp0), [tmp1]"=&r"(tmp1), [tmp2]"=&r"(tmp2), [c_range]"+&r"(c->range), ++ [c_low]"+&r"(c->low), [state]"+&r"(state), ++ [c_bytestream]"+&r"(c->bytestream), [index]"+&r"(index) ++ : [tables]"r"(ff_h264_cabac_tables), [end]"r"(end), [one]"r"(one), ++ [minusstart]"r"(minusstart), [minusindex]"r"(minusindex), [last_off]"r"(last_off), ++#if !UNCHECKED_BITSTREAM_READER ++ [c_bytestream_end]"r"(c->bytestream_end), ++#endif ++ [lps_off]"i"(H264_LPS_RANGE_OFFSET), ++ [mlps_off]"i"(H264_MLPS_STATE_OFFSET + 128), ++ [norm_off]"i"(H264_NORM_SHIFT_OFFSET), ++ [cabac_mask]"r"(CABAC_MASK) ++ : "memory" ++ ); ++ ++ return (int)tmp0; ++} ++ ++#define decode_significance_8x8 decode_significance_8x8_loongarch ++static int decode_significance_8x8_loongarch(CABACContext *c, ++ uint8_t *significant_coeff_ctx_base, ++ int *index, uint8_t *last_coeff_ctx_base, const uint8_t *sig_off) ++{ ++ int64_t minusindex = 4 - (int64_t)index; ++ int64_t bit, tmp0, tmp1, tmp2, one = 1, end = 63, last = 0; ++ uint8_t *state = 0; ++ int64_t flag_offset = H264_LAST_COEFF_FLAG_OFFSET_8x8_OFFSET; ++ ++ __asm__ volatile( ++ "3: \n\t" ++ "ldx.bu %[tmp0], %[sig_off], %[last] \n\t" ++ "add.d %[state], %[tmp0], %[significant_coeff_ctx_base] \n\t" ++#if UNCHECKED_BITSTREAM_READER ++ GET_CABAC_LOONGARCH ++#else ++ GET_CABAC_LOONGARCH_END ++#endif ++ "blt %[bit], %[one], 4f \n\t" ++ "add.d %[tmp0], %[tables], %[flag_offset] \n\t" ++ "ldx.bu %[tmp1], %[tmp0], %[last] \n\t" ++ "add.d %[state], %[tmp1], %[last_coeff_ctx_base] \n\t" ++#if UNCHECKED_BITSTREAM_READER ++ GET_CABAC_LOONGARCH ++#else ++ GET_CABAC_LOONGARCH_END ++#endif ++ "st.w %[last], %[index], 0 \n\t" ++ "bge %[bit], %[one], 5f \n\t" ++ "addi.d %[index], %[index], 4 \n\t" ++ "4: \n\t" ++ "addi.d %[last], %[last], 1 \n\t" ++ "blt %[last], %[end], 3b \n\t" ++ "st.w %[last], %[index], 0 \n\t" ++ "5: \n\t" ++ "add.d %[tmp0], %[index], %[minusindex] \n\t" ++ "srli.d %[tmp0], %[tmp0], 2 \n\t" ++ : [bit]"=&r"(bit), [tmp0]"=&r"(tmp0), [tmp1]"=&r"(tmp1), [tmp2]"=&r"(tmp2), [c_range]"+&r"(c->range), ++ [c_low]"+&r"(c->low), [state]"+&r"(state), [last]"+&r"(last), ++ [c_bytestream]"+&r"(c->bytestream), [index]"+&r"(index) ++ : [tables]"r"(ff_h264_cabac_tables), [end]"r"(end), [one]"r"(one), [minusindex]"r"(minusindex), ++ [last_coeff_ctx_base]"r"(last_coeff_ctx_base), [flag_offset]"r"(flag_offset), ++#if !UNCHECKED_BITSTREAM_READER ++ [c_bytestream_end]"r"(c->bytestream_end), ++#endif ++ [lps_off]"i"(H264_LPS_RANGE_OFFSET), [sig_off]"r"(sig_off), ++ [mlps_off]"i"(H264_MLPS_STATE_OFFSET + 128), ++ [norm_off]"i"(H264_NORM_SHIFT_OFFSET), ++ [cabac_mask]"r"(CABAC_MASK), [significant_coeff_ctx_base]"r"(significant_coeff_ctx_base) ++ ); ++ ++ return (int)tmp0; ++} +diff --git a/libavcodec/loongarch/h264_intrapred_init_loongarch.c b/libavcodec/loongarch/h264_intrapred_init_loongarch.c +new file mode 100644 +index 0000000000..12620bd842 +--- /dev/null ++++ b/libavcodec/loongarch/h264_intrapred_init_loongarch.c +@@ -0,0 +1,50 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hao Chen ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/loongarch/cpu.h" ++#include "libavcodec/h264pred.h" ++#include "h264_intrapred_lasx.h" ++ ++av_cold void ff_h264_pred_init_loongarch(H264PredContext *h, int codec_id, ++ const int bit_depth, ++ const int chroma_format_idc) ++{ ++ int cpu_flags = av_get_cpu_flags(); ++ ++ if (bit_depth == 8) { ++ if (have_lasx(cpu_flags)) { ++ if (chroma_format_idc <= 1) { ++ } ++ if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8) { ++ } else { ++ if (chroma_format_idc <= 1) { ++ } ++ if (codec_id == AV_CODEC_ID_SVQ3) { ++ h->pred16x16[PLANE_PRED8x8] = ff_h264_pred16x16_plane_svq3_8_lasx; ++ } else if (codec_id == AV_CODEC_ID_RV40) { ++ h->pred16x16[PLANE_PRED8x8] = ff_h264_pred16x16_plane_rv40_8_lasx; ++ } else { ++ h->pred16x16[PLANE_PRED8x8] = ff_h264_pred16x16_plane_h264_8_lasx; ++ } ++ } ++ } ++ } ++} +diff --git a/libavcodec/loongarch/h264_intrapred_lasx.c b/libavcodec/loongarch/h264_intrapred_lasx.c +new file mode 100644 +index 0000000000..c38cd611b8 +--- /dev/null ++++ b/libavcodec/loongarch/h264_intrapred_lasx.c +@@ -0,0 +1,121 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hao Chen ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/loongarch/loongson_intrinsics.h" ++#include "h264_intrapred_lasx.h" ++ ++#define PRED16X16_PLANE \ ++ ptrdiff_t stride_1, stride_2, stride_3, stride_4, stride_5, stride_6; \ ++ ptrdiff_t stride_8, stride_15; \ ++ int32_t res0, res1, res2, res3, cnt; \ ++ uint8_t *src0, *src1; \ ++ __m256i reg0, reg1, reg2, reg3, reg4; \ ++ __m256i tmp0, tmp1, tmp2, tmp3; \ ++ __m256i shuff = {0x0B040A0509060807, 0x0F000E010D020C03, 0, 0}; \ ++ __m256i mult = {0x0004000300020001, 0x0008000700060005, 0, 0}; \ ++ __m256i int_mult1 = {0x0000000100000000, 0x0000000300000002, \ ++ 0x0000000500000004, 0x0000000700000006}; \ ++ \ ++ stride_1 = -stride; \ ++ stride_2 = stride << 1; \ ++ stride_3 = stride_2 + stride; \ ++ stride_4 = stride_2 << 1; \ ++ stride_5 = stride_4 + stride; \ ++ stride_6 = stride_3 << 1; \ ++ stride_8 = stride_4 << 1; \ ++ stride_15 = (stride_8 << 1) - stride; \ ++ src0 = src - 1; \ ++ src1 = src0 + stride_8; \ ++ \ ++ reg0 = __lasx_xvldx(src0, -stride); \ ++ reg1 = __lasx_xvldx(src, (8 - stride)); \ ++ reg0 = __lasx_xvilvl_d(reg1, reg0); \ ++ reg0 = __lasx_xvshuf_b(reg0, reg0, shuff); \ ++ reg0 = __lasx_xvhsubw_hu_bu(reg0, reg0); \ ++ reg0 = __lasx_xvmul_h(reg0, mult); \ ++ res1 = (src1[0] - src0[stride_6]) + \ ++ 2 * (src1[stride] - src0[stride_5]) + \ ++ 3 * (src1[stride_2] - src0[stride_4]) + \ ++ 4 * (src1[stride_3] - src0[stride_3]) + \ ++ 5 * (src1[stride_4] - src0[stride_2]) + \ ++ 6 * (src1[stride_5] - src0[stride]) + \ ++ 7 * (src1[stride_6] - src0[0]) + \ ++ 8 * (src0[stride_15] - src0[stride_1]); \ ++ reg0 = __lasx_xvhaddw_w_h(reg0, reg0); \ ++ reg0 = __lasx_xvhaddw_d_w(reg0, reg0); \ ++ reg0 = __lasx_xvhaddw_q_d(reg0, reg0); \ ++ res0 = __lasx_xvpickve2gr_w(reg0, 0); \ ++ ++#define PRED16X16_PLANE_END \ ++ res2 = (src0[stride_15] + src[15 - stride] + 1) << 4; \ ++ res3 = 7 * (res0 + res1); \ ++ res2 -= res3; \ ++ reg0 = __lasx_xvreplgr2vr_w(res0); \ ++ reg1 = __lasx_xvreplgr2vr_w(res1); \ ++ reg2 = __lasx_xvreplgr2vr_w(res2); \ ++ reg3 = __lasx_xvmul_w(reg0, int_mult1); \ ++ reg4 = __lasx_xvslli_w(reg0, 3); \ ++ reg4 = __lasx_xvadd_w(reg4, reg3); \ ++ for (cnt = 8; cnt--;) { \ ++ tmp0 = __lasx_xvadd_w(reg2, reg3); \ ++ tmp1 = __lasx_xvadd_w(reg2, reg4); \ ++ tmp0 = __lasx_xvssrani_hu_w(tmp1, tmp0, 5); \ ++ tmp0 = __lasx_xvpermi_d(tmp0, 0xD8); \ ++ reg2 = __lasx_xvadd_w(reg2, reg1); \ ++ tmp2 = __lasx_xvadd_w(reg2, reg3); \ ++ tmp3 = __lasx_xvadd_w(reg2, reg4); \ ++ tmp1 = __lasx_xvssrani_hu_w(tmp3, tmp2, 5); \ ++ tmp1 = __lasx_xvpermi_d(tmp1, 0xD8); \ ++ tmp0 = __lasx_xvssrani_bu_h(tmp1, tmp0, 0); \ ++ reg2 = __lasx_xvadd_w(reg2, reg1); \ ++ __lasx_xvstelm_d(tmp0, src, 0, 0); \ ++ __lasx_xvstelm_d(tmp0, src, 8, 2); \ ++ src += stride; \ ++ __lasx_xvstelm_d(tmp0, src, 0, 1); \ ++ __lasx_xvstelm_d(tmp0, src, 8, 3); \ ++ src += stride; \ ++ } ++ ++ ++void ff_h264_pred16x16_plane_h264_8_lasx(uint8_t *src, ptrdiff_t stride) ++{ ++ PRED16X16_PLANE ++ res0 = (5 * res0 + 32) >> 6; ++ res1 = (5 * res1 + 32) >> 6; ++ PRED16X16_PLANE_END ++} ++ ++void ff_h264_pred16x16_plane_rv40_8_lasx(uint8_t *src, ptrdiff_t stride) ++{ ++ PRED16X16_PLANE ++ res0 = (res0 + (res0 >> 2)) >> 4; ++ res1 = (res1 + (res1 >> 2)) >> 4; ++ PRED16X16_PLANE_END ++} ++ ++void ff_h264_pred16x16_plane_svq3_8_lasx(uint8_t *src, ptrdiff_t stride) ++{ ++ PRED16X16_PLANE ++ cnt = (5 * (res0/4)) / 16; ++ res0 = (5 * (res1/4)) / 16; ++ res1 = cnt; ++ PRED16X16_PLANE_END ++} +diff --git a/libavcodec/loongarch/h264_intrapred_lasx.h b/libavcodec/loongarch/h264_intrapred_lasx.h +new file mode 100644 +index 0000000000..0c2653300c +--- /dev/null ++++ b/libavcodec/loongarch/h264_intrapred_lasx.h +@@ -0,0 +1,31 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hao Chen ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef AVCODEC_LOONGARCH_H264_INTRAPRED_LASX_H ++#define AVCODEC_LOONGARCH_H264_INTRAPRED_LASX_H ++ ++#include "libavcodec/avcodec.h" ++ ++void ff_h264_pred16x16_plane_h264_8_lasx(uint8_t *src, ptrdiff_t stride); ++void ff_h264_pred16x16_plane_rv40_8_lasx(uint8_t *src, ptrdiff_t stride); ++void ff_h264_pred16x16_plane_svq3_8_lasx(uint8_t *src, ptrdiff_t stride); ++ ++#endif // #ifndef AVCODEC_LOONGARCH_H264_INTRAPRED_LASX_H +diff --git a/libavcodec/loongarch/h264chroma_init_loongarch.c b/libavcodec/loongarch/h264chroma_init_loongarch.c +index 5789b5f573..7f1aa4d848 100644 +--- a/libavcodec/loongarch/h264chroma_init_loongarch.c ++++ b/libavcodec/loongarch/h264chroma_init_loongarch.c +@@ -30,6 +30,7 @@ av_cold void ff_h264chroma_init_loongarch(H264ChromaContext *c, int bit_depth) + if (bit_depth <= 8) { + c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_lasx; + c->avg_h264_chroma_pixels_tab[0] = ff_avg_h264_chroma_mc8_lasx; ++ c->put_h264_chroma_pixels_tab[1] = ff_put_h264_chroma_mc4_lasx; + } + } + } +diff --git a/libavcodec/loongarch/h264chroma_lasx.c b/libavcodec/loongarch/h264chroma_lasx.c +index 82cef77a95..824a78dfc8 100644 +--- a/libavcodec/loongarch/h264chroma_lasx.c ++++ b/libavcodec/loongarch/h264chroma_lasx.c +@@ -26,9 +26,11 @@ + #include "libavutil/avassert.h" + #include "libavutil/loongarch/loongson_intrinsics.h" + +-static const uint8_t chroma_mask_arr[32] = { ++static const uint8_t chroma_mask_arr[64] = { + 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, + 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, ++ 0, 1, 1, 2, 2, 3, 3, 4, 16, 17, 17, 18, 18, 19, 19, 20, ++ 0, 1, 1, 2, 2, 3, 3, 4, 16, 17, 17, 18, 18, 19, 19, 20 + }; + + static av_always_inline void avc_chroma_hv_8x4_lasx(uint8_t *src, uint8_t *dst, +@@ -38,6 +40,7 @@ static av_always_inline void avc_chroma_hv_8x4_lasx(uint8_t *src, uint8_t *dst, + { + ptrdiff_t stride_2x = stride << 1; + ptrdiff_t stride_3x = stride_2x + stride; ++ ptrdiff_t stride_4x = stride_2x << 1; + __m256i src0, src1, src2, src3, src4, out; + __m256i res_hz0, res_hz1, res_hz2, res_vt0, res_vt1; + __m256i mask; +@@ -48,8 +51,7 @@ static av_always_inline void avc_chroma_hv_8x4_lasx(uint8_t *src, uint8_t *dst, + __m256i coeff_vt_vec1 = __lasx_xvreplgr2vr_h(coef_ver1); + + DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 0, src, 0, mask, src0); +- src += stride; +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, ++ DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2x, src, stride_3x, src, stride_4x, + src1, src2, src3, src4); + DUP2_ARG3(__lasx_xvpermi_q, src2, src1, 0x20, src4, src3, 0x20, src1, src3); + src0 = __lasx_xvshuf_b(src0, src0, mask); +@@ -60,14 +62,9 @@ static av_always_inline void avc_chroma_hv_8x4_lasx(uint8_t *src, uint8_t *dst, + res_vt1 = __lasx_xvmul_h(res_hz2, coeff_vt_vec0); + res_hz0 = __lasx_xvpermi_q(res_hz1, res_hz0, 0x20); + res_hz1 = __lasx_xvpermi_q(res_hz1, res_hz2, 0x3); +- res_hz0 = __lasx_xvmul_h(res_hz0, coeff_vt_vec1); +- res_hz1 = __lasx_xvmul_h(res_hz1, coeff_vt_vec1); +- res_vt0 = __lasx_xvadd_h(res_vt0, res_hz0); +- res_vt1 = __lasx_xvadd_h(res_vt1, res_hz1); +- DUP2_ARG2(__lasx_xvsrari_h, res_vt0, 6, res_vt1, 6, res_vt0, res_vt1); +- res_vt0 = __lasx_xvsat_hu(res_vt0, 7); +- res_vt1 = __lasx_xvsat_hu(res_vt1, 7); +- out = __lasx_xvpickev_b(res_vt1, res_vt0); ++ res_vt0 = __lasx_xvmadd_h(res_vt0, res_hz0, coeff_vt_vec1); ++ res_vt1 = __lasx_xvmadd_h(res_vt1, res_hz1, coeff_vt_vec1); ++ out = __lasx_xvssrarni_bu_h(res_vt1, res_vt0, 6); + __lasx_xvstelm_d(out, dst, 0, 0); + __lasx_xvstelm_d(out, dst + stride, 0, 2); + __lasx_xvstelm_d(out, dst + stride_2x, 0, 1); +@@ -94,11 +91,10 @@ static av_always_inline void avc_chroma_hv_8x8_lasx(uint8_t *src, uint8_t *dst, + __m256i coeff_vt_vec1 = __lasx_xvreplgr2vr_h(coef_ver1); + + DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 0, src, 0, mask, src0); +- src += stride; +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, ++ DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2x, src, stride_3x, src, stride_4x, + src1, src2, src3, src4); + src += stride_4x; +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, ++ DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2x, src, stride_3x, src, stride_4x, + src5, src6, src7, src8); + DUP4_ARG3(__lasx_xvpermi_q, src2, src1, 0x20, src4, src3, 0x20, src6, src5, 0x20, + src8, src7, 0x20, src1, src3, src5, src7); +@@ -116,21 +112,10 @@ static av_always_inline void avc_chroma_hv_8x8_lasx(uint8_t *src, uint8_t *dst, + res_hz1 = __lasx_xvpermi_q(res_hz1, res_hz2, 0x3); + res_hz2 = __lasx_xvpermi_q(res_hz2, res_hz3, 0x3); + res_hz3 = __lasx_xvpermi_q(res_hz3, res_hz4, 0x3); +- res_hz0 = __lasx_xvmul_h(res_hz0, coeff_vt_vec1); +- res_hz1 = __lasx_xvmul_h(res_hz1, coeff_vt_vec1); +- res_hz2 = __lasx_xvmul_h(res_hz2, coeff_vt_vec1); +- res_hz3 = __lasx_xvmul_h(res_hz3, coeff_vt_vec1); +- res_vt0 = __lasx_xvadd_h(res_vt0, res_hz0); +- res_vt1 = __lasx_xvadd_h(res_vt1, res_hz1); +- res_vt2 = __lasx_xvadd_h(res_vt2, res_hz2); +- res_vt3 = __lasx_xvadd_h(res_vt3, res_hz3); +- DUP4_ARG2(__lasx_xvsrari_h, res_vt0, 6, res_vt1, 6, res_vt2, 6, res_vt3, 6, ++ DUP4_ARG3(__lasx_xvmadd_h, res_vt0, res_hz0, coeff_vt_vec1, res_vt1, res_hz1, coeff_vt_vec1, ++ res_vt2, res_hz2, coeff_vt_vec1, res_vt3, res_hz3, coeff_vt_vec1, + res_vt0, res_vt1, res_vt2, res_vt3); +- res_vt0 = __lasx_xvsat_hu(res_vt0, 7); +- res_vt1 = __lasx_xvsat_hu(res_vt1, 7); +- res_vt2 = __lasx_xvsat_hu(res_vt2, 7); +- res_vt3 = __lasx_xvsat_hu(res_vt3, 7); +- DUP2_ARG2(__lasx_xvpickev_b, res_vt1, res_vt0, res_vt3, res_vt2, out0, out1); ++ DUP2_ARG3(__lasx_xvssrarni_bu_h, res_vt1, res_vt0, 6, res_vt3, res_vt2, 6, out0, out1); + __lasx_xvstelm_d(out0, dst, 0, 0); + __lasx_xvstelm_d(out0, dst + stride, 0, 2); + __lasx_xvstelm_d(out0, dst + stride_2x, 0, 1); +@@ -154,18 +139,14 @@ static av_always_inline void avc_chroma_hz_8x4_lasx(uint8_t *src, uint8_t *dst, + __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); + __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); + +- mask = __lasx_xvld(chroma_mask_arr, 0); +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, +- src0, src1, src2, src3); ++ coeff_vec = __lasx_xvslli_b(coeff_vec, 3); ++ DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 0, src, 0, mask, src0); ++ DUP2_ARG2(__lasx_xvldx, src, stride, src, stride_2x, src1, src2); ++ src3 = __lasx_xvldx(src, stride_3x); + DUP2_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src0, src2); + DUP2_ARG3(__lasx_xvshuf_b, src0, src0, mask, src2, src2, mask, src0, src2); + DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, res0, res1); +- res0 = __lasx_xvslli_h(res0, 3); +- res1 = __lasx_xvslli_h(res1, 3); +- DUP2_ARG2(__lasx_xvsrari_h, res0, 6, res1, 6, res0, res1); +- res0 = __lasx_xvsat_hu(res0, 7); +- res1 = __lasx_xvsat_hu(res1, 7); +- out = __lasx_xvpickev_b(res1, res0); ++ out = __lasx_xvssrarni_bu_h(res1, res0, 6); + __lasx_xvstelm_d(out, dst, 0, 0); + __lasx_xvstelm_d(out, dst + stride, 0, 2); + __lasx_xvstelm_d(out, dst + stride_2x, 0, 1); +@@ -187,28 +168,20 @@ static av_always_inline void avc_chroma_hz_8x8_lasx(uint8_t *src, uint8_t *dst, + __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); + __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); + +- mask = __lasx_xvld(chroma_mask_arr, 0); +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, +- src0, src1, src2, src3); ++ coeff_vec = __lasx_xvslli_b(coeff_vec, 3); ++ DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 0, src, 0, mask, src0); ++ DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2x, src, stride_3x, src, stride_4x, ++ src1, src2, src3, src4); + src += stride_4x; +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, +- src4, src5, src6, src7); ++ DUP2_ARG2(__lasx_xvldx, src, stride, src, stride_2x, src5, src6); ++ src7 = __lasx_xvldx(src, stride_3x); + DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src5, src4, 0x20, + src7, src6, 0x20, src0, src2, src4, src6); + DUP4_ARG3(__lasx_xvshuf_b, src0, src0, mask, src2, src2, mask, src4, src4, mask, + src6, src6, mask, src0, src2, src4, src6); + DUP4_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, src4, coeff_vec, src6, + coeff_vec, res0, res1, res2, res3); +- res0 = __lasx_xvslli_h(res0, 3); +- res1 = __lasx_xvslli_h(res1, 3); +- res2 = __lasx_xvslli_h(res2, 3); +- res3 = __lasx_xvslli_h(res3, 3); +- DUP4_ARG2(__lasx_xvsrari_h, res0, 6, res1, 6, res2, 6, res3, 6, res0, res1, res2, res3); +- res0 = __lasx_xvsat_hu(res0, 7); +- res1 = __lasx_xvsat_hu(res1, 7); +- res2 = __lasx_xvsat_hu(res2, 7); +- res3 = __lasx_xvsat_hu(res3, 7); +- DUP2_ARG2(__lasx_xvpickev_b, res1, res0, res3, res2, out0, out1); ++ DUP2_ARG3(__lasx_xvssrarni_bu_h, res1, res0, 6, res3, res2, 6, out0, out1); + __lasx_xvstelm_d(out0, dst, 0, 0); + __lasx_xvstelm_d(out0, dst + stride, 0, 2); + __lasx_xvstelm_d(out0, dst + stride_2x, 0, 1); +@@ -236,6 +209,7 @@ static av_always_inline void avc_chroma_hz_nonmult_lasx(uint8_t *src, + __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); + + mask = __lasx_xvld(chroma_mask_arr, 0); ++ coeff_vec = __lasx_xvslli_b(coeff_vec, 3); + + for (row = height >> 2; row--;) { + DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, +@@ -244,12 +218,7 @@ static av_always_inline void avc_chroma_hz_nonmult_lasx(uint8_t *src, + DUP2_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src0, src2); + DUP2_ARG3(__lasx_xvshuf_b, src0, src0, mask, src2, src2, mask, src0, src2); + DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, res0, res1); +- res0 = __lasx_xvslli_h(res0, 3); +- res1 = __lasx_xvslli_h(res1, 3); +- DUP2_ARG2(__lasx_xvsrari_h, res0, 6, res1, 6, res0, res1); +- res0 = __lasx_xvsat_hu(res0, 7); +- res1 = __lasx_xvsat_hu(res1, 7); +- out = __lasx_xvpickev_b(res1, res0); ++ out = __lasx_xvssrarni_bu_h(res1, res0, 6); + __lasx_xvstelm_d(out, dst, 0, 0); + __lasx_xvstelm_d(out, dst + stride, 0, 2); + __lasx_xvstelm_d(out, dst + stride_2x, 0, 1); +@@ -258,18 +227,15 @@ static av_always_inline void avc_chroma_hz_nonmult_lasx(uint8_t *src, + } + + if ((height & 3)) { +- for (row = (height & 3); row--;) { +- src0 = __lasx_xvld(src, 0); +- src += stride; +- src0 = __lasx_xvshuf_b(src0, src0, mask); +- res0 = __lasx_xvdp2_h_bu(src0, coeff_vec); +- res0 = __lasx_xvslli_h(res0, 3); +- res0 = __lasx_xvsrari_h(res0, 6); +- res0 = __lasx_xvsat_hu(res0, 7); +- out = __lasx_xvpickev_b(res0, res0); +- __lasx_xvstelm_d(out, dst, 0, 0); +- dst += stride; +- } ++ src0 = __lasx_xvld(src, 0); ++ src1 = __lasx_xvldx(src, stride); ++ src1 = __lasx_xvpermi_q(src1, src0, 0x20); ++ src0 = __lasx_xvshuf_b(src1, src1, mask); ++ res0 = __lasx_xvdp2_h_bu(src0, coeff_vec); ++ out = __lasx_xvssrarni_bu_h(res0, res0, 6); ++ __lasx_xvstelm_d(out, dst, 0, 0); ++ dst += stride; ++ __lasx_xvstelm_d(out, dst, 0, 2); + } + } + +@@ -284,6 +250,7 @@ static av_always_inline void avc_chroma_vt_8x4_lasx(uint8_t *src, uint8_t *dst, + __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); + __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); + ++ coeff_vec = __lasx_xvslli_b(coeff_vec, 3); + src0 = __lasx_xvld(src, 0); + src += stride; + DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, +@@ -292,12 +259,7 @@ static av_always_inline void avc_chroma_vt_8x4_lasx(uint8_t *src, uint8_t *dst, + src4, src3, 0x20, src0, src1, src2, src3); + DUP2_ARG2(__lasx_xvilvl_b, src1, src0, src3, src2, src0, src2); + DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, res0, res1); +- res0 = __lasx_xvslli_h(res0, 3); +- res1 = __lasx_xvslli_h(res1, 3); +- DUP2_ARG2(__lasx_xvsrari_h, res0, 6, res1, 6, res0, res1); +- res0 = __lasx_xvsat_hu(res0, 7); +- res1 = __lasx_xvsat_hu(res1, 7); +- out = __lasx_xvpickev_b(res1, res0); ++ out = __lasx_xvssrarni_bu_h(res1, res0, 6); + __lasx_xvstelm_d(out, dst, 0, 0); + __lasx_xvstelm_d(out, dst + stride, 0, 2); + __lasx_xvstelm_d(out, dst + stride_2x, 0, 1); +@@ -317,6 +279,7 @@ static av_always_inline void avc_chroma_vt_8x8_lasx(uint8_t *src, uint8_t *dst, + __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); + __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); + ++ coeff_vec = __lasx_xvslli_b(coeff_vec, 3); + src0 = __lasx_xvld(src, 0); + src += stride; + DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, +@@ -332,16 +295,7 @@ static av_always_inline void avc_chroma_vt_8x8_lasx(uint8_t *src, uint8_t *dst, + src0, src2, src4, src6); + DUP4_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, src4, coeff_vec, + src6, coeff_vec, res0, res1, res2, res3); +- res0 = __lasx_xvslli_h(res0, 3); +- res1 = __lasx_xvslli_h(res1, 3); +- res2 = __lasx_xvslli_h(res2, 3); +- res3 = __lasx_xvslli_h(res3, 3); +- DUP4_ARG2(__lasx_xvsrari_h, res0, 6, res1, 6, res2, 6, res3, 6, res0, res1, res2, res3); +- res0 = __lasx_xvsat_hu(res0, 7); +- res1 = __lasx_xvsat_hu(res1, 7); +- res2 = __lasx_xvsat_hu(res2, 7); +- res3 = __lasx_xvsat_hu(res3, 7); +- DUP2_ARG2(__lasx_xvpickev_b, res1, res0, res3, res2, out0, out1); ++ DUP2_ARG3(__lasx_xvssrarni_bu_h, res1, res0, 6, res3, res2, 6, out0, out1); + __lasx_xvstelm_d(out0, dst, 0, 0); + __lasx_xvstelm_d(out0, dst + stride, 0, 2); + __lasx_xvstelm_d(out0, dst + stride_2x, 0, 1); +@@ -357,43 +311,37 @@ static av_always_inline void copy_width8x8_lasx(uint8_t *src, uint8_t *dst, + ptrdiff_t stride) + { + uint64_t tmp[8]; ++ ptrdiff_t stride_2, stride_3, stride_4; + __asm__ volatile ( +- "ld.d %[tmp0], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp1], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp2], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp3], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp4], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp5], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp6], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp7], %[src], 0x0 \n\t" +- +- "st.d %[tmp0], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp1], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp2], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp3], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp4], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp5], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp6], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp7], %[dst], 0x0 \n\t" ++ "slli.d %[stride_2], %[stride], 1 \n\t" ++ "add.d %[stride_3], %[stride_2], %[stride] \n\t" ++ "slli.d %[stride_4], %[stride_2], 1 \n\t" ++ "ld.d %[tmp0], %[src], 0x0 \n\t" ++ "ldx.d %[tmp1], %[src], %[stride] \n\t" ++ "ldx.d %[tmp2], %[src], %[stride_2] \n\t" ++ "ldx.d %[tmp3], %[src], %[stride_3] \n\t" ++ "add.d %[src], %[src], %[stride_4] \n\t" ++ "ld.d %[tmp4], %[src], 0x0 \n\t" ++ "ldx.d %[tmp5], %[src], %[stride] \n\t" ++ "ldx.d %[tmp6], %[src], %[stride_2] \n\t" ++ "ldx.d %[tmp7], %[src], %[stride_3] \n\t" ++ ++ "st.d %[tmp0], %[dst], 0x0 \n\t" ++ "stx.d %[tmp1], %[dst], %[stride] \n\t" ++ "stx.d %[tmp2], %[dst], %[stride_2] \n\t" ++ "stx.d %[tmp3], %[dst], %[stride_3] \n\t" ++ "add.d %[dst], %[dst], %[stride_4] \n\t" ++ "st.d %[tmp4], %[dst], 0x0 \n\t" ++ "stx.d %[tmp5], %[dst], %[stride] \n\t" ++ "stx.d %[tmp6], %[dst], %[stride_2] \n\t" ++ "stx.d %[tmp7], %[dst], %[stride_3] \n\t" + : [tmp0]"=&r"(tmp[0]), [tmp1]"=&r"(tmp[1]), + [tmp2]"=&r"(tmp[2]), [tmp3]"=&r"(tmp[3]), + [tmp4]"=&r"(tmp[4]), [tmp5]"=&r"(tmp[5]), + [tmp6]"=&r"(tmp[6]), [tmp7]"=&r"(tmp[7]), +- [dst]"+&r"(dst), [src]"+&r"(src) ++ [dst]"+&r"(dst), [src]"+&r"(src), ++ [stride_2]"=&r"(stride_2), [stride_3]"=&r"(stride_3), ++ [stride_4]"=&r"(stride_4) + : [stride]"r"(stride) + : "memory" + ); +@@ -403,26 +351,23 @@ static av_always_inline void copy_width8x4_lasx(uint8_t *src, uint8_t *dst, + ptrdiff_t stride) + { + uint64_t tmp[4]; ++ ptrdiff_t stride_2, stride_3; + __asm__ volatile ( +- "ld.d %[tmp0], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp1], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp2], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp3], %[src], 0x0 \n\t" +- +- "st.d %[tmp0], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp1], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp2], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp3], %[dst], 0x0 \n\t" ++ "slli.d %[stride_2], %[stride], 1 \n\t" ++ "add.d %[stride_3], %[stride_2], %[stride] \n\t" ++ "ld.d %[tmp0], %[src], 0x0 \n\t" ++ "ldx.d %[tmp1], %[src], %[stride] \n\t" ++ "ldx.d %[tmp2], %[src], %[stride_2] \n\t" ++ "ldx.d %[tmp3], %[src], %[stride_3] \n\t" ++ ++ "st.d %[tmp0], %[dst], 0x0 \n\t" ++ "stx.d %[tmp1], %[dst], %[stride] \n\t" ++ "stx.d %[tmp2], %[dst], %[stride_2] \n\t" ++ "stx.d %[tmp3], %[dst], %[stride_3] \n\t" + : [tmp0]"=&r"(tmp[0]), [tmp1]"=&r"(tmp[1]), + [tmp2]"=&r"(tmp[2]), [tmp3]"=&r"(tmp[3]), +- [dst]"+&r"(dst), [src]"+&r"(src) +- : [stride]"r"(stride) ++ [stride_2]"=&r"(stride_2), [stride_3]"=&r"(stride_3) ++ : [stride]"r"(stride), [dst]"r"(dst), [src]"r"(src) + : "memory" + ); + } +@@ -441,6 +386,221 @@ static void avc_chroma_hv_8w_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + } + } + ++static void avc_chroma_hv_4x2_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ uint32_t coef_hor0, uint32_t coef_hor1, ++ uint32_t coef_ver0, uint32_t coef_ver1) ++{ ++ ptrdiff_t stride_2 = stride << 1; ++ __m256i src0, src1, src2; ++ __m256i res_hz, res_vt; ++ __m256i mask; ++ __m256i coeff_hz_vec0 = __lasx_xvreplgr2vr_b(coef_hor0); ++ __m256i coeff_hz_vec1 = __lasx_xvreplgr2vr_b(coef_hor1); ++ __m256i coeff_hz_vec = __lasx_xvilvl_b(coeff_hz_vec0, coeff_hz_vec1); ++ __m256i coeff_vt_vec0 = __lasx_xvreplgr2vr_h(coef_ver0); ++ __m256i coeff_vt_vec1 = __lasx_xvreplgr2vr_h(coef_ver1); ++ __m256i coeff_vt_vec = __lasx_xvpermi_q(coeff_vt_vec1, coeff_vt_vec0, 0x02); ++ ++ DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 32, src, 0, mask, src0); ++ DUP2_ARG2(__lasx_xvldx, src, stride, src, stride_2, src1, src2); ++ DUP2_ARG3(__lasx_xvshuf_b, src1, src0, mask, src2, src1, mask, src0, src1); ++ src0 = __lasx_xvpermi_q(src0, src1, 0x02); ++ res_hz = __lasx_xvdp2_h_bu(src0, coeff_hz_vec); ++ res_vt = __lasx_xvmul_h(res_hz, coeff_vt_vec); ++ res_hz = __lasx_xvpermi_q(res_hz, res_vt, 0x01); ++ res_vt = __lasx_xvadd_h(res_hz, res_vt); ++ res_vt = __lasx_xvssrarni_bu_h(res_vt, res_vt, 6); ++ __lasx_xvstelm_w(res_vt, dst, 0, 0); ++ __lasx_xvstelm_w(res_vt, dst + stride, 0, 1); ++} ++ ++static void avc_chroma_hv_4x4_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ uint32_t coef_hor0, uint32_t coef_hor1, ++ uint32_t coef_ver0, uint32_t coef_ver1) ++{ ++ ptrdiff_t stride_2 = stride << 1; ++ ptrdiff_t stride_3 = stride_2 + stride; ++ ptrdiff_t stride_4 = stride_2 << 1; ++ __m256i src0, src1, src2, src3, src4; ++ __m256i res_hz0, res_hz1, res_vt0, res_vt1; ++ __m256i mask; ++ __m256i coeff_hz_vec0 = __lasx_xvreplgr2vr_b(coef_hor0); ++ __m256i coeff_hz_vec1 = __lasx_xvreplgr2vr_b(coef_hor1); ++ __m256i coeff_hz_vec = __lasx_xvilvl_b(coeff_hz_vec0, coeff_hz_vec1); ++ __m256i coeff_vt_vec0 = __lasx_xvreplgr2vr_h(coef_ver0); ++ __m256i coeff_vt_vec1 = __lasx_xvreplgr2vr_h(coef_ver1); ++ ++ DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 32, src, 0, mask, src0); ++ DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2, src, stride_3, ++ src, stride_4, src1, src2, src3, src4); ++ DUP4_ARG3(__lasx_xvshuf_b, src1, src0, mask, src2, src1, mask, src3, src2, mask, ++ src4, src3, mask, src0, src1, src2, src3); ++ DUP2_ARG3(__lasx_xvpermi_q, src0, src2, 0x02, src1, src3, 0x02, src0, src1); ++ DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_hz_vec, src1, coeff_hz_vec, res_hz0, res_hz1); ++ DUP2_ARG2(__lasx_xvmul_h, res_hz0, coeff_vt_vec1, res_hz1, coeff_vt_vec0, res_vt0, res_vt1); ++ res_hz0 = __lasx_xvadd_h(res_vt0, res_vt1); ++ res_hz0 = __lasx_xvssrarni_bu_h(res_hz0, res_hz0, 6); ++ __lasx_xvstelm_w(res_hz0, dst, 0, 0); ++ __lasx_xvstelm_w(res_hz0, dst + stride, 0, 1); ++ __lasx_xvstelm_w(res_hz0, dst + stride_2, 0, 4); ++ __lasx_xvstelm_w(res_hz0, dst + stride_3, 0, 5); ++} ++ ++static void avc_chroma_hv_4x8_lasx(uint8_t *src, uint8_t * dst, ptrdiff_t stride, ++ uint32_t coef_hor0, uint32_t coef_hor1, ++ uint32_t coef_ver0, uint32_t coef_ver1) ++{ ++ ptrdiff_t stride_2 = stride << 1; ++ ptrdiff_t stride_3 = stride_2 + stride; ++ ptrdiff_t stride_4 = stride_2 << 1; ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8; ++ __m256i res_hz0, res_hz1, res_hz2, res_hz3; ++ __m256i res_vt0, res_vt1, res_vt2, res_vt3; ++ __m256i mask; ++ __m256i coeff_hz_vec0 = __lasx_xvreplgr2vr_b(coef_hor0); ++ __m256i coeff_hz_vec1 = __lasx_xvreplgr2vr_b(coef_hor1); ++ __m256i coeff_hz_vec = __lasx_xvilvl_b(coeff_hz_vec0, coeff_hz_vec1); ++ __m256i coeff_vt_vec0 = __lasx_xvreplgr2vr_h(coef_ver0); ++ __m256i coeff_vt_vec1 = __lasx_xvreplgr2vr_h(coef_ver1); ++ ++ DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 32, src, 0, mask, src0); ++ DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2, src, stride_3, ++ src, stride_4, src1, src2, src3, src4); ++ src += stride_4; ++ DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2, src, stride_3, ++ src, stride_4, src5, src6, src7, src8); ++ DUP4_ARG3(__lasx_xvshuf_b, src1, src0, mask, src2, src1, mask, src3, src2, mask, ++ src4, src3, mask, src0, src1, src2, src3); ++ DUP4_ARG3(__lasx_xvshuf_b, src5, src4, mask, src6, src5, mask, src7, src6, mask, ++ src8, src7, mask, src4, src5, src6, src7); ++ DUP4_ARG3(__lasx_xvpermi_q, src0, src2, 0x02, src1, src3, 0x02, src4, src6, 0x02, ++ src5, src7, 0x02, src0, src1, src4, src5); ++ DUP4_ARG2(__lasx_xvdp2_h_bu, src0, coeff_hz_vec, src1, coeff_hz_vec, src4, coeff_hz_vec, ++ src5, coeff_hz_vec, res_hz0, res_hz1, res_hz2, res_hz3); ++ DUP4_ARG2(__lasx_xvmul_h, res_hz0, coeff_vt_vec1, res_hz1, coeff_vt_vec0, res_hz2, ++ coeff_vt_vec1, res_hz3, coeff_vt_vec0, res_vt0, res_vt1, res_vt2, res_vt3); ++ DUP2_ARG2(__lasx_xvadd_h, res_vt0, res_vt1, res_vt2, res_vt3, res_vt0, res_vt2); ++ res_hz0 = __lasx_xvssrarni_bu_h(res_vt2, res_vt0, 6); ++ __lasx_xvstelm_w(res_hz0, dst, 0, 0); ++ __lasx_xvstelm_w(res_hz0, dst + stride, 0, 1); ++ __lasx_xvstelm_w(res_hz0, dst + stride_2, 0, 4); ++ __lasx_xvstelm_w(res_hz0, dst + stride_3, 0, 5); ++ dst += stride_4; ++ __lasx_xvstelm_w(res_hz0, dst, 0, 2); ++ __lasx_xvstelm_w(res_hz0, dst + stride, 0, 3); ++ __lasx_xvstelm_w(res_hz0, dst + stride_2, 0, 6); ++ __lasx_xvstelm_w(res_hz0, dst + stride_3, 0, 7); ++} ++ ++static void avc_chroma_hv_4w_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ uint32_t coef_hor0, uint32_t coef_hor1, ++ uint32_t coef_ver0, uint32_t coef_ver1, ++ int32_t height) ++{ ++ if (8 == height) { ++ avc_chroma_hv_4x8_lasx(src, dst, stride, coef_hor0, coef_hor1, coef_ver0, ++ coef_ver1); ++ } else if (4 == height) { ++ avc_chroma_hv_4x4_lasx(src, dst, stride, coef_hor0, coef_hor1, coef_ver0, ++ coef_ver1); ++ } else if (2 == height) { ++ avc_chroma_hv_4x2_lasx(src, dst, stride, coef_hor0, coef_hor1, coef_ver0, ++ coef_ver1); ++ } ++} ++ ++static void avc_chroma_hz_4x2_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ uint32_t coeff0, uint32_t coeff1) ++{ ++ __m256i src0, src1; ++ __m256i res, mask; ++ __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); ++ __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); ++ __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); ++ ++ DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 32, src, 0, mask, src0); ++ src1 = __lasx_xvldx(src, stride); ++ src0 = __lasx_xvshuf_b(src1, src0, mask); ++ res = __lasx_xvdp2_h_bu(src0, coeff_vec); ++ res = __lasx_xvslli_h(res, 3); ++ res = __lasx_xvssrarni_bu_h(res, res, 6); ++ __lasx_xvstelm_w(res, dst, 0, 0); ++ __lasx_xvstelm_w(res, dst + stride, 0, 1); ++} ++ ++static void avc_chroma_hz_4x4_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ uint32_t coeff0, uint32_t coeff1) ++{ ++ ptrdiff_t stride_2 = stride << 1; ++ ptrdiff_t stride_3 = stride_2 + stride; ++ __m256i src0, src1, src2, src3; ++ __m256i res, mask; ++ __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); ++ __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); ++ __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); ++ ++ DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 32, src, 0, mask, src0); ++ DUP2_ARG2(__lasx_xvldx, src, stride, src, stride_2, src1, src2); ++ src3 = __lasx_xvldx(src, stride_3); ++ DUP2_ARG3(__lasx_xvshuf_b, src1, src0, mask, src3, src2, mask, src0, src2); ++ src0 = __lasx_xvpermi_q(src0, src2, 0x02); ++ res = __lasx_xvdp2_h_bu(src0, coeff_vec); ++ res = __lasx_xvslli_h(res, 3); ++ res = __lasx_xvssrarni_bu_h(res, res, 6); ++ __lasx_xvstelm_w(res, dst, 0, 0); ++ __lasx_xvstelm_w(res, dst + stride, 0, 1); ++ __lasx_xvstelm_w(res, dst + stride_2, 0, 4); ++ __lasx_xvstelm_w(res, dst + stride_3, 0, 5); ++} ++ ++static void avc_chroma_hz_4x8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ uint32_t coeff0, uint32_t coeff1) ++{ ++ ptrdiff_t stride_2 = stride << 1; ++ ptrdiff_t stride_3 = stride_2 + stride; ++ ptrdiff_t stride_4 = stride_2 << 1; ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m256i res0, res1, mask; ++ __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); ++ __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); ++ __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); ++ ++ coeff_vec = __lasx_xvslli_b(coeff_vec, 3); ++ DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 32, src, 0, mask, src0); ++ DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2, src, stride_3, ++ src, stride_4, src1, src2, src3, src4); ++ src += stride_4; ++ DUP2_ARG2(__lasx_xvldx, src, stride, src, stride_2, src5, src6); ++ src7 = __lasx_xvldx(src, stride_3); ++ DUP4_ARG3(__lasx_xvshuf_b, src1, src0, mask, src3, src2, mask, src5, src4, mask, ++ src7, src6, mask, src0, src2, src4, src6); ++ DUP2_ARG3(__lasx_xvpermi_q, src0, src2, 0x02, src4, src6, 0x02, src0, src4); ++ DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src4, coeff_vec, res0, res1); ++ res0 = __lasx_xvssrarni_bu_h(res1, res0, 6); ++ __lasx_xvstelm_w(res0, dst, 0, 0); ++ __lasx_xvstelm_w(res0, dst + stride, 0, 1); ++ __lasx_xvstelm_w(res0, dst + stride_2, 0, 4); ++ __lasx_xvstelm_w(res0, dst + stride_3, 0, 5); ++ dst += stride_4; ++ __lasx_xvstelm_w(res0, dst, 0, 2); ++ __lasx_xvstelm_w(res0, dst + stride, 0, 3); ++ __lasx_xvstelm_w(res0, dst + stride_2, 0, 6); ++ __lasx_xvstelm_w(res0, dst + stride_3, 0, 7); ++} ++ ++static void avc_chroma_hz_4w_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ uint32_t coeff0, uint32_t coeff1, ++ int32_t height) ++{ ++ if (8 == height) { ++ avc_chroma_hz_4x8_lasx(src, dst, stride, coeff0, coeff1); ++ } else if (4 == height) { ++ avc_chroma_hz_4x4_lasx(src, dst, stride, coeff0, coeff1); ++ } else if (2 == height) { ++ avc_chroma_hz_4x2_lasx(src, dst, stride, coeff0, coeff1); ++ } ++} ++ + static void avc_chroma_hz_8w_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + uint32_t coeff0, uint32_t coeff1, + int32_t height) +@@ -454,6 +614,110 @@ static void avc_chroma_hz_8w_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + } + } + ++static void avc_chroma_vt_4x2_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ uint32_t coeff0, uint32_t coeff1) ++{ ++ __m256i src0, src1, src2; ++ __m256i tmp0, tmp1; ++ __m256i res; ++ __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); ++ __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); ++ __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); ++ ++ src0 = __lasx_xvld(src, 0); ++ DUP2_ARG2(__lasx_xvldx, src, stride, src, stride << 1, src1, src2); ++ DUP2_ARG2(__lasx_xvilvl_b, src1, src0, src2, src1, tmp0, tmp1); ++ tmp0 = __lasx_xvilvl_d(tmp1, tmp0); ++ res = __lasx_xvdp2_h_bu(tmp0, coeff_vec); ++ res = __lasx_xvslli_h(res, 3); ++ res = __lasx_xvssrarni_bu_h(res, res, 6); ++ __lasx_xvstelm_w(res, dst, 0, 0); ++ __lasx_xvstelm_w(res, dst + stride, 0, 1); ++} ++ ++static void avc_chroma_vt_4x4_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ uint32_t coeff0, uint32_t coeff1) ++{ ++ ptrdiff_t stride_2 = stride << 1; ++ ptrdiff_t stride_3 = stride_2 + stride; ++ ptrdiff_t stride_4 = stride_2 << 1; ++ __m256i src0, src1, src2, src3, src4; ++ __m256i tmp0, tmp1, tmp2, tmp3; ++ __m256i res; ++ __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); ++ __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); ++ __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); ++ ++ src0 = __lasx_xvld(src, 0); ++ DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2, src, stride_3, ++ src, stride_4, src1, src2, src3, src4); ++ DUP4_ARG2(__lasx_xvilvl_b, src1, src0, src2, src1, src3, src2, src4, src3, ++ tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp2); ++ tmp0 = __lasx_xvpermi_q(tmp0, tmp2, 0x02); ++ res = __lasx_xvdp2_h_bu(tmp0, coeff_vec); ++ res = __lasx_xvslli_h(res, 3); ++ res = __lasx_xvssrarni_bu_h(res, res, 6); ++ __lasx_xvstelm_w(res, dst, 0, 0); ++ __lasx_xvstelm_w(res, dst + stride, 0, 1); ++ __lasx_xvstelm_w(res, dst + stride_2, 0, 4); ++ __lasx_xvstelm_w(res, dst + stride_3, 0, 5); ++} ++ ++static void avc_chroma_vt_4x8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ uint32_t coeff0, uint32_t coeff1) ++{ ++ ptrdiff_t stride_2 = stride << 1; ++ ptrdiff_t stride_3 = stride_2 + stride; ++ ptrdiff_t stride_4 = stride_2 << 1; ++ __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8; ++ __m256i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; ++ __m256i res0, res1; ++ __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); ++ __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); ++ __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); ++ ++ coeff_vec = __lasx_xvslli_b(coeff_vec, 3); ++ src0 = __lasx_xvld(src, 0); ++ DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2, src, stride_3, ++ src, stride_4, src1, src2, src3, src4); ++ src += stride_4; ++ DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2, src, stride_3, ++ src, stride_4, src5, src6, src7, src8); ++ DUP4_ARG2(__lasx_xvilvl_b, src1, src0, src2, src1, src3, src2, src4, src3, ++ tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lasx_xvilvl_b, src5, src4, src6, src5, src7, src6, src8, src7, ++ tmp4, tmp5, tmp6, tmp7); ++ DUP4_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, ++ tmp0, tmp2, tmp4, tmp6); ++ tmp0 = __lasx_xvpermi_q(tmp0, tmp2, 0x02); ++ tmp4 = __lasx_xvpermi_q(tmp4, tmp6, 0x02); ++ DUP2_ARG2(__lasx_xvdp2_h_bu, tmp0, coeff_vec, tmp4, coeff_vec, res0, res1); ++ res0 = __lasx_xvssrarni_bu_h(res1, res0, 6); ++ __lasx_xvstelm_w(res0, dst, 0, 0); ++ __lasx_xvstelm_w(res0, dst + stride, 0, 1); ++ __lasx_xvstelm_w(res0, dst + stride_2, 0, 4); ++ __lasx_xvstelm_w(res0, dst + stride_3, 0, 5); ++ dst += stride_4; ++ __lasx_xvstelm_w(res0, dst, 0, 2); ++ __lasx_xvstelm_w(res0, dst + stride, 0, 3); ++ __lasx_xvstelm_w(res0, dst + stride_2, 0, 6); ++ __lasx_xvstelm_w(res0, dst + stride_3, 0, 7); ++} ++ ++static void avc_chroma_vt_4w_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ uint32_t coeff0, uint32_t coeff1, ++ int32_t height) ++{ ++ if (8 == height) { ++ avc_chroma_vt_4x8_lasx(src, dst, stride, coeff0, coeff1); ++ } else if (4 == height) { ++ avc_chroma_vt_4x4_lasx(src, dst, stride, coeff0, coeff1); ++ } else if (2 == height) { ++ avc_chroma_vt_4x2_lasx(src, dst, stride, coeff0, coeff1); ++ } ++} ++ + static void avc_chroma_vt_8w_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + uint32_t coeff0, uint32_t coeff1, + int32_t height) +@@ -465,6 +729,76 @@ static void avc_chroma_vt_8w_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + } + } + ++static void copy_width4_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, ++ int32_t height) ++{ ++ uint32_t tp0, tp1, tp2, tp3, tp4, tp5, tp6, tp7; ++ ++ if (8 == height) { ++ ptrdiff_t stride_2, stride_3, stride_4; ++ ++ __asm__ volatile ( ++ "slli.d %[stride_2], %[stride], 1 \n\t" ++ "add.d %[stride_3], %[stride_2], %[stride] \n\t" ++ "slli.d %[stride_4], %[stride_2], 1 \n\t" ++ "ld.wu %[tp0], %[src], 0 \n\t" ++ "ldx.wu %[tp1], %[src], %[stride] \n\t" ++ "ldx.wu %[tp2], %[src], %[stride_2] \n\t" ++ "ldx.wu %[tp3], %[src], %[stride_3] \n\t" ++ "add.d %[src], %[src], %[stride_4] \n\t" ++ "ld.wu %[tp4], %[src], 0 \n\t" ++ "ldx.wu %[tp5], %[src], %[stride] \n\t" ++ "ldx.wu %[tp6], %[src], %[stride_2] \n\t" ++ "ldx.wu %[tp7], %[src], %[stride_3] \n\t" ++ "st.w %[tp0], %[dst], 0 \n\t" ++ "stx.w %[tp1], %[dst], %[stride] \n\t" ++ "stx.w %[tp2], %[dst], %[stride_2] \n\t" ++ "stx.w %[tp3], %[dst], %[stride_3] \n\t" ++ "add.d %[dst], %[dst], %[stride_4] \n\t" ++ "st.w %[tp4], %[dst], 0 \n\t" ++ "stx.w %[tp5], %[dst], %[stride] \n\t" ++ "stx.w %[tp6], %[dst], %[stride_2] \n\t" ++ "stx.w %[tp7], %[dst], %[stride_3] \n\t" ++ : [stride_2]"+&r"(stride_2), [stride_3]"+&r"(stride_3), [stride_4]"+&r"(stride_4), ++ [src]"+&r"(src), [dst]"+&r"(dst), [tp0]"+&r"(tp0), [tp1]"+&r"(tp1), ++ [tp2]"+&r"(tp2), [tp3]"+&r"(tp3), [tp4]"+&r"(tp4), [tp5]"+&r"(tp5), ++ [tp6]"+&r"(tp6), [tp7]"+&r"(tp7) ++ : [stride]"r"(stride) ++ : "memory" ++ ); ++ } else if (4 == height) { ++ ptrdiff_t stride_2, stride_3; ++ ++ __asm__ volatile ( ++ "slli.d %[stride_2], %[stride], 1 \n\t" ++ "add.d %[stride_3], %[stride_2], %[stride] \n\t" ++ "ld.wu %[tp0], %[src], 0 \n\t" ++ "ldx.wu %[tp1], %[src], %[stride] \n\t" ++ "ldx.wu %[tp2], %[src], %[stride_2] \n\t" ++ "ldx.wu %[tp3], %[src], %[stride_3] \n\t" ++ "st.w %[tp0], %[dst], 0 \n\t" ++ "stx.w %[tp1], %[dst], %[stride] \n\t" ++ "stx.w %[tp2], %[dst], %[stride_2] \n\t" ++ "stx.w %[tp3], %[dst], %[stride_3] \n\t" ++ : [stride_2]"+&r"(stride_2), [stride_3]"+&r"(stride_3), ++ [src]"+&r"(src), [dst]"+&r"(dst), [tp0]"+&r"(tp0), [tp1]"+&r"(tp1), ++ [tp2]"+&r"(tp2), [tp3]"+&r"(tp3) ++ : [stride]"r"(stride) ++ : "memory" ++ ); ++ } else if (2 == height) { ++ __asm__ volatile ( ++ "ld.wu %[tp0], %[src], 0 \n\t" ++ "ldx.wu %[tp1], %[src], %[stride] \n\t" ++ "st.w %[tp0], %[dst], 0 \n\t" ++ "stx.w %[tp1], %[dst], %[stride] \n\t" ++ : [tp0]"+&r"(tp0), [tp1]"+&r"(tp1) ++ : [src]"r"(src), [dst]"r"(dst), [stride]"r"(stride) ++ : "memory" ++ ); ++ } ++} ++ + static void copy_width8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + int32_t height) + { +@@ -475,6 +809,22 @@ static void copy_width8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + } + } + ++void ff_put_h264_chroma_mc4_lasx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++ int height, int x, int y) ++{ ++ av_assert2(x < 8 && y < 8 && x >= 0 && y >= 0); ++ ++ if(x && y) { ++ avc_chroma_hv_4w_lasx(src, dst, stride, x, (8 - x), y, (8 - y), height); ++ } else if (x) { ++ avc_chroma_hz_4w_lasx(src, dst, stride, x, (8 - x), height); ++ } else if (y) { ++ avc_chroma_vt_4w_lasx(src, dst, stride, y, (8 - y), height); ++ } else { ++ copy_width4_lasx(src, dst, stride, height); ++ } ++} ++ + void ff_put_h264_chroma_mc8_lasx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + int height, int x, int y) + { +@@ -521,14 +871,9 @@ static av_always_inline void avc_chroma_hv_and_aver_dst_8x4_lasx(uint8_t *src, + res_vt1 = __lasx_xvmul_h(res_hz2, coeff_vt_vec0); + res_hz0 = __lasx_xvpermi_q(res_hz1, res_hz0, 0x20); + res_hz1 = __lasx_xvpermi_q(res_hz1, res_hz2, 0x3); +- res_hz0 = __lasx_xvmul_h(res_hz0, coeff_vt_vec1); +- res_hz1 = __lasx_xvmul_h(res_hz1, coeff_vt_vec1); +- res_vt0 = __lasx_xvadd_h(res_vt0, res_hz0); +- res_vt1 = __lasx_xvadd_h(res_vt1, res_hz1); +- DUP2_ARG2(__lasx_xvsrari_h, res_vt0, 6, res_vt1, 6, res_vt0, res_vt1); +- res_vt0 = __lasx_xvsat_hu(res_vt0, 7); +- res_vt1 = __lasx_xvsat_hu(res_vt1, 7); +- out = __lasx_xvpickev_b(res_vt1, res_vt0); ++ res_vt0 = __lasx_xvmadd_h(res_vt0, res_hz0, coeff_vt_vec1); ++ res_vt1 = __lasx_xvmadd_h(res_vt1, res_hz1, coeff_vt_vec1); ++ out = __lasx_xvssrarni_bu_h(res_vt1, res_vt0, 6); + DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, + tp0, tp1, tp2, tp3); + DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); +@@ -583,21 +928,12 @@ static av_always_inline void avc_chroma_hv_and_aver_dst_8x8_lasx(uint8_t *src, + res_hz1 = __lasx_xvpermi_q(res_hz1, res_hz2, 0x3); + res_hz2 = __lasx_xvpermi_q(res_hz2, res_hz3, 0x3); + res_hz3 = __lasx_xvpermi_q(res_hz3, res_hz4, 0x3); +- res_hz0 = __lasx_xvmul_h(res_hz0, coeff_vt_vec1); +- res_hz1 = __lasx_xvmul_h(res_hz1, coeff_vt_vec1); +- res_hz2 = __lasx_xvmul_h(res_hz2, coeff_vt_vec1); +- res_hz3 = __lasx_xvmul_h(res_hz3, coeff_vt_vec1); +- res_vt0 = __lasx_xvadd_h(res_vt0, res_hz0); +- res_vt1 = __lasx_xvadd_h(res_vt1, res_hz1); +- res_vt2 = __lasx_xvadd_h(res_vt2, res_hz2); +- res_vt3 = __lasx_xvadd_h(res_vt3, res_hz3); +- DUP4_ARG2(__lasx_xvsrari_h, res_vt0, 6, res_vt1, 6, res_vt2, 6, res_vt3, 6, +- res_vt0, res_vt1, res_vt2, res_vt3); +- res_vt0 = __lasx_xvsat_hu(res_vt0, 7); +- res_vt1 = __lasx_xvsat_hu(res_vt1, 7); +- res_vt2 = __lasx_xvsat_hu(res_vt2, 7); +- res_vt3 = __lasx_xvsat_hu(res_vt3, 7); +- DUP2_ARG2(__lasx_xvpickev_b, res_vt1, res_vt0, res_vt3, res_vt2, out0, out1); ++ res_vt0 = __lasx_xvmadd_h(res_vt0, res_hz0, coeff_vt_vec1); ++ res_vt1 = __lasx_xvmadd_h(res_vt1, res_hz1, coeff_vt_vec1); ++ res_vt2 = __lasx_xvmadd_h(res_vt2, res_hz2, coeff_vt_vec1); ++ res_vt3 = __lasx_xvmadd_h(res_vt3, res_hz3, coeff_vt_vec1); ++ DUP2_ARG3(__lasx_xvssrarni_bu_h, res_vt1, res_vt0, 6, res_vt3, res_vt2, 6, ++ out0, out1); + DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, + tp0, tp1, tp2, tp3); + DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); +@@ -635,18 +971,14 @@ static av_always_inline void avc_chroma_hz_and_aver_dst_8x4_lasx(uint8_t *src, + __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); + __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); + ++ coeff_vec = __lasx_xvslli_b(coeff_vec, 3); + mask = __lasx_xvld(chroma_mask_arr, 0); + DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, + src0, src1, src2, src3); + DUP2_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src0, src2); + DUP2_ARG3(__lasx_xvshuf_b, src0, src0, mask, src2, src2, mask, src0, src2); + DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, res0, res1); +- res0 = __lasx_xvslli_h(res0, 3); +- res1 = __lasx_xvslli_h(res1, 3); +- DUP2_ARG2(__lasx_xvsrari_h, res0, 6, res1, 6, res0, res1); +- res0 = __lasx_xvsat_hu(res0, 7); +- res1 = __lasx_xvsat_hu(res1, 7); +- out = __lasx_xvpickev_b(res1, res0); ++ out = __lasx_xvssrarni_bu_h(res1, res0, 6); + DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, + tp0, tp1, tp2, tp3); + DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); +@@ -674,6 +1006,7 @@ static av_always_inline void avc_chroma_hz_and_aver_dst_8x8_lasx(uint8_t *src, + __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); + __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); + ++ coeff_vec = __lasx_xvslli_b(coeff_vec, 3); + mask = __lasx_xvld(chroma_mask_arr, 0); + DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, + src0, src1, src2, src3); +@@ -686,16 +1019,7 @@ static av_always_inline void avc_chroma_hz_and_aver_dst_8x8_lasx(uint8_t *src, + mask, src6, src6, mask, src0, src2, src4, src6); + DUP4_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, src4, coeff_vec, src6, + coeff_vec, res0, res1, res2, res3); +- res0 = __lasx_xvslli_h(res0, 3); +- res1 = __lasx_xvslli_h(res1, 3); +- res2 = __lasx_xvslli_h(res2, 3); +- res3 = __lasx_xvslli_h(res3, 3); +- DUP4_ARG2(__lasx_xvsrari_h, res0, 6, res1, 6, res2, 6, res3, 6, res0, res1, res2, res3); +- res0 = __lasx_xvsat_hu(res0, 7); +- res1 = __lasx_xvsat_hu(res1, 7); +- res2 = __lasx_xvsat_hu(res2, 7); +- res3 = __lasx_xvsat_hu(res3, 7); +- DUP2_ARG2(__lasx_xvpickev_b, res1, res0, res3, res2, out0, out1); ++ DUP2_ARG3(__lasx_xvssrarni_bu_h, res1, res0, 6, res3, res2, 6, out0, out1); + DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, + tp0, tp1, tp2, tp3); + DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); +@@ -733,6 +1057,7 @@ static av_always_inline void avc_chroma_vt_and_aver_dst_8x4_lasx(uint8_t *src, + __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); + __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); + ++ coeff_vec = __lasx_xvslli_b(coeff_vec, 3); + src0 = __lasx_xvld(src, 0); + DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2x, src, stride_3x, src, stride_4x, + src1, src2, src3, src4); +@@ -740,12 +1065,7 @@ static av_always_inline void avc_chroma_vt_and_aver_dst_8x4_lasx(uint8_t *src, + src4, src3, 0x20, src0, src1, src2, src3); + DUP2_ARG2(__lasx_xvilvl_b, src1, src0, src3, src2, src0, src2); + DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, res0, res1); +- res0 = __lasx_xvslli_h(res0, 3); +- res1 = __lasx_xvslli_h(res1, 3); +- DUP2_ARG2(__lasx_xvsrari_h, res0, 6, res1, 6, res0, res1) +- res0 = __lasx_xvsat_hu(res0, 7); +- res1 = __lasx_xvsat_hu(res1, 7); +- out = __lasx_xvpickev_b(res1, res0); ++ out = __lasx_xvssrarni_bu_h(res1, res0, 6); + DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, + tp0, tp1, tp2, tp3); + DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); +@@ -772,6 +1092,7 @@ static av_always_inline void avc_chroma_vt_and_aver_dst_8x8_lasx(uint8_t *src, + __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); + __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); + ++ coeff_vec = __lasx_xvslli_b(coeff_vec, 3); + src0 = __lasx_xvld(src, 0); + src += stride; + DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, +@@ -787,17 +1108,7 @@ static av_always_inline void avc_chroma_vt_and_aver_dst_8x8_lasx(uint8_t *src, + src0, src2, src4, src6); + DUP4_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, src4, coeff_vec, src6, + coeff_vec, res0, res1, res2, res3); +- res0 = __lasx_xvslli_h(res0, 3); +- res1 = __lasx_xvslli_h(res1, 3); +- res2 = __lasx_xvslli_h(res2, 3); +- res3 = __lasx_xvslli_h(res3, 3); +- DUP4_ARG2(__lasx_xvsrari_h, res0, 6, res1, 6, res2, 6, res3, 6, +- res0, res1, res2, res3); +- res0 = __lasx_xvsat_hu(res0, 7); +- res1 = __lasx_xvsat_hu(res1, 7); +- res2 = __lasx_xvsat_hu(res2, 7); +- res3 = __lasx_xvsat_hu(res3, 7); +- DUP2_ARG2(__lasx_xvpickev_b, res1, res0, res3, res2, out0, out1); ++ DUP2_ARG3(__lasx_xvssrarni_bu_h, res1, res0, 6, res3, res2, 6, out0, out1); + DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, + tp0, tp1, tp2, tp3); + DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); +diff --git a/libavcodec/loongarch/h264chroma_lasx.h b/libavcodec/loongarch/h264chroma_lasx.h +index 3b70e1dccb..4aac8db8cb 100644 +--- a/libavcodec/loongarch/h264chroma_lasx.h ++++ b/libavcodec/loongarch/h264chroma_lasx.h +@@ -26,6 +26,8 @@ + #include + #include "libavcodec/h264.h" + ++void ff_put_h264_chroma_mc4_lasx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++ int h, int x, int y); + void ff_put_h264_chroma_mc8_lasx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + int h, int x, int y); + void ff_avg_h264_chroma_mc8_lasx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, +diff --git a/libavcodec/loongarch/h264dsp_init_loongarch.c b/libavcodec/loongarch/h264dsp_init_loongarch.c +index f1b927c72e..e02e3d7fa9 100644 +--- a/libavcodec/loongarch/h264dsp_init_loongarch.c ++++ b/libavcodec/loongarch/h264dsp_init_loongarch.c +@@ -32,6 +32,8 @@ av_cold void ff_h264dsp_init_loongarch(H264DSPContext *c, const int bit_depth, + if (chroma_format_idc <= 1) + c->h264_loop_filter_strength = ff_h264_loop_filter_strength_lasx; + if (bit_depth == 8) { ++ c->h264_add_pixels4_clear = ff_h264_add_pixels4_8_lasx; ++ c->h264_add_pixels8_clear = ff_h264_add_pixels8_8_lasx; + c->h264_v_loop_filter_luma = ff_h264_v_lpf_luma_8_lasx; + c->h264_h_loop_filter_luma = ff_h264_h_lpf_luma_8_lasx; + c->h264_v_loop_filter_luma_intra = ff_h264_v_lpf_luma_intra_8_lasx; +diff --git a/libavcodec/loongarch/h264dsp_lasx.c b/libavcodec/loongarch/h264dsp_lasx.c +index 873c109413..b6f8b158e9 100644 +--- a/libavcodec/loongarch/h264dsp_lasx.c ++++ b/libavcodec/loongarch/h264dsp_lasx.c +@@ -2000,3 +2000,85 @@ void ff_weight_h264_pixels4_8_lasx(uint8_t *src, ptrdiff_t stride, + avc_wgt_4x8_lasx(src, stride, log2_denom, weight_src, offset); + } + } ++ ++void ff_h264_add_pixels4_8_lasx(uint8_t *_dst, int16_t *_src, int stride) ++{ ++ __m256i src0, dst0, dst1, dst2, dst3, zero; ++ __m256i tmp0, tmp1; ++ uint8_t* _dst1 = _dst + stride; ++ uint8_t* _dst2 = _dst1 + stride; ++ uint8_t* _dst3 = _dst2 + stride; ++ ++ src0 = __lasx_xvld(_src, 0); ++ dst0 = __lasx_xvldrepl_w(_dst, 0); ++ dst1 = __lasx_xvldrepl_w(_dst1, 0); ++ dst2 = __lasx_xvldrepl_w(_dst2, 0); ++ dst3 = __lasx_xvldrepl_w(_dst3, 0); ++ tmp0 = __lasx_xvilvl_w(dst1, dst0); ++ tmp1 = __lasx_xvilvl_w(dst3, dst2); ++ dst0 = __lasx_xvilvl_d(tmp1, tmp0); ++ tmp0 = __lasx_vext2xv_hu_bu(dst0); ++ zero = __lasx_xvldi(0); ++ tmp1 = __lasx_xvadd_h(src0, tmp0); ++ dst0 = __lasx_xvpickev_b(tmp1, tmp1); ++ __lasx_xvstelm_w(dst0, _dst, 0, 0); ++ __lasx_xvstelm_w(dst0, _dst1, 0, 1); ++ __lasx_xvstelm_w(dst0, _dst2, 0, 4); ++ __lasx_xvstelm_w(dst0, _dst3, 0, 5); ++ __lasx_xvst(zero, _src, 0); ++} ++ ++void ff_h264_add_pixels8_8_lasx(uint8_t *_dst, int16_t *_src, int stride) ++{ ++ __m256i src0, src1, src2, src3; ++ __m256i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; ++ __m256i tmp0, tmp1, tmp2, tmp3; ++ __m256i zero = __lasx_xvldi(0); ++ uint8_t *_dst1 = _dst + stride; ++ uint8_t *_dst2 = _dst1 + stride; ++ uint8_t *_dst3 = _dst2 + stride; ++ uint8_t *_dst4 = _dst3 + stride; ++ uint8_t *_dst5 = _dst4 + stride; ++ uint8_t *_dst6 = _dst5 + stride; ++ uint8_t *_dst7 = _dst6 + stride; ++ ++ src0 = __lasx_xvld(_src, 0); ++ src1 = __lasx_xvld(_src, 32); ++ src2 = __lasx_xvld(_src, 64); ++ src3 = __lasx_xvld(_src, 96); ++ dst0 = __lasx_xvldrepl_d(_dst, 0); ++ dst1 = __lasx_xvldrepl_d(_dst1, 0); ++ dst2 = __lasx_xvldrepl_d(_dst2, 0); ++ dst3 = __lasx_xvldrepl_d(_dst3, 0); ++ dst4 = __lasx_xvldrepl_d(_dst4, 0); ++ dst5 = __lasx_xvldrepl_d(_dst5, 0); ++ dst6 = __lasx_xvldrepl_d(_dst6, 0); ++ dst7 = __lasx_xvldrepl_d(_dst7, 0); ++ tmp0 = __lasx_xvilvl_d(dst1, dst0); ++ tmp1 = __lasx_xvilvl_d(dst3, dst2); ++ tmp2 = __lasx_xvilvl_d(dst5, dst4); ++ tmp3 = __lasx_xvilvl_d(dst7, dst6); ++ dst0 = __lasx_vext2xv_hu_bu(tmp0); ++ dst1 = __lasx_vext2xv_hu_bu(tmp1); ++ dst1 = __lasx_vext2xv_hu_bu(tmp1); ++ dst2 = __lasx_vext2xv_hu_bu(tmp2); ++ dst3 = __lasx_vext2xv_hu_bu(tmp3); ++ tmp0 = __lasx_xvadd_h(src0, dst0); ++ tmp1 = __lasx_xvadd_h(src1, dst1); ++ tmp2 = __lasx_xvadd_h(src2, dst2); ++ tmp3 = __lasx_xvadd_h(src3, dst3); ++ dst1 = __lasx_xvpickev_b(tmp1, tmp0); ++ dst2 = __lasx_xvpickev_b(tmp3, tmp2); ++ __lasx_xvst(zero, _src, 0); ++ __lasx_xvst(zero, _src, 32); ++ __lasx_xvst(zero, _src, 64); ++ __lasx_xvst(zero, _src, 96); ++ __lasx_xvstelm_d(dst1, _dst, 0, 0); ++ __lasx_xvstelm_d(dst1, _dst1, 0, 2); ++ __lasx_xvstelm_d(dst1, _dst2, 0, 1); ++ __lasx_xvstelm_d(dst1, _dst3, 0, 3); ++ __lasx_xvstelm_d(dst2, _dst4, 0, 0); ++ __lasx_xvstelm_d(dst2, _dst5, 0, 2); ++ __lasx_xvstelm_d(dst2, _dst6, 0, 1); ++ __lasx_xvstelm_d(dst2, _dst7, 0, 3); ++} +diff --git a/libavcodec/loongarch/h264dsp_lasx.h b/libavcodec/loongarch/h264dsp_lasx.h +index 54c57853a2..f3dcc0f3e3 100644 +--- a/libavcodec/loongarch/h264dsp_lasx.h ++++ b/libavcodec/loongarch/h264dsp_lasx.h +@@ -96,4 +96,8 @@ void ff_h264_loop_filter_strength_lasx(int16_t bS[2][4][4], uint8_t nnz[40], + int8_t ref[2][40], int16_t mv[2][40][2], + int bidir, int edges, int step, + int mask_mv0, int mask_mv1, int field); ++ ++void ff_h264_add_pixels4_8_lasx(uint8_t *_dst, int16_t *_src, int stride); ++ ++void ff_h264_add_pixels8_8_lasx(uint8_t *_dst, int16_t *_src, int stride); + #endif // #ifndef AVCODEC_LOONGARCH_H264DSP_LASX_H +diff --git a/libavutil/intmath.h b/libavutil/intmath.h +index 9573109e9d..6d35a6f9e0 100644 +--- a/libavutil/intmath.h ++++ b/libavutil/intmath.h +@@ -32,6 +32,9 @@ + #if ARCH_X86 + # include "x86/intmath.h" + #endif ++#if ARCH_LOONGARCH64 ++# include "loongarch/intmath.h" ++#endif + + #if HAVE_FAST_CLZ + #if AV_GCC_VERSION_AT_LEAST(3,4) +diff --git a/libavutil/loongarch/intmath.h b/libavutil/loongarch/intmath.h +new file mode 100644 +index 0000000000..c095b3a3e4 +--- /dev/null ++++ b/libavutil/loongarch/intmath.h +@@ -0,0 +1,73 @@ ++/* ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Hao Chen ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef AVUTIL_LOONGARCH_INTMATH_H ++#define AVUTIL_LOONGARCH_INTMATH_H ++ ++#include ++#include ++#include "config.h" ++ ++#if HAVE_FAST_CLZ ++ ++static av_always_inline unsigned ff_loongarch_clz(unsigned _1) ++{ ++ unsigned out; ++ __asm__ volatile ( ++ "clz.w %[out], %[in] \n\t" ++ : [out]"=&r"(out) ++ : [in]"r"(_1) ++ ); ++ return out; ++} ++ ++static av_always_inline int ff_loongarch_ctz_w(int _1) ++{ ++ int out; ++ __asm__ volatile ( ++ "ctz.w %[out], %[in] \n\t" ++ "andi %[out], %[out], 31 \n\t" ++ : [out]"=&r"(out) ++ : [in]"r"(_1) ++ ); ++ return out; ++} ++ ++static av_always_inline int ff_loongarch_ctz_d(long long _1) ++{ ++ int out; ++ __asm__ volatile ( ++ "ctz.d %[out], %[in] \n\t" ++ "andi %[out], %[out], 63 \n\t" ++ : [out]"=&r"(out) ++ : [in]"r"(_1) ++ ); ++ return out; ++} ++ ++#define ff_log2(x) (31 - ff_loongarch_clz((x)|1)) ++ ++#define ff_clz(x) ff_loongarch_clz(x) ++#define ff_ctz(x) ff_loongarch_ctz_w(x) ++#define ff_ctzll(x) ff_loongarch_ctz_d(x) ++ ++#endif /* HAVE_FAST_CLZ */ ++#endif /* AVUTIL_LOONGARCH_INTMATH_H */ diff --git a/package/ffmpeg/0005-pkg_lnd1-Release_ffmpeg-4.1.6-1.lnd8.patch b/package/ffmpeg/0005-pkg_lnd1-Release_ffmpeg-4.1.6-1.lnd8.patch new file mode 100644 index 00000000..a1612380 --- /dev/null +++ b/package/ffmpeg/0005-pkg_lnd1-Release_ffmpeg-4.1.6-1.lnd8.patch @@ -0,0 +1,25244 @@ +diff --git a/libavcodec/loongarch/Makefile b/libavcodec/loongarch/Makefile +index 583e3545eb..c1b5de5c44 100644 +--- a/libavcodec/loongarch/Makefile ++++ b/libavcodec/loongarch/Makefile +@@ -1,33 +1,33 @@ +-OBJS-$(CONFIG_H264QPEL) += loongarch/h264qpel_init_loongarch.o + OBJS-$(CONFIG_H264CHROMA) += loongarch/h264chroma_init_loongarch.o ++OBJS-$(CONFIG_H264QPEL) += loongarch/h264qpel_init_loongarch.o + OBJS-$(CONFIG_H264DSP) += loongarch/h264dsp_init_loongarch.o +-OBJS-$(CONFIG_IDCTDSP) += loongarch/idctdsp_init_loongarch.o +-OBJS-$(CONFIG_VC1DSP) += loongarch/vc1dsp_init_loongarch.o +-OBJS-$(CONFIG_HPELDSP) += loongarch/hpeldsp_init_loongarch.o +-OBJS-$(CONFIG_HEVC_DECODER) += loongarch/hevcdsp_init_loongarch.o ++OBJS-$(CONFIG_H264PRED) += loongarch/h264_intrapred_init_loongarch.o + OBJS-$(CONFIG_VP8_DECODER) += loongarch/vp8dsp_init_loongarch.o + OBJS-$(CONFIG_VP9_DECODER) += loongarch/vp9dsp_init_loongarch.o ++OBJS-$(CONFIG_VC1DSP) += loongarch/vc1dsp_init_loongarch.o ++OBJS-$(CONFIG_HPELDSP) += loongarch/hpeldsp_init_loongarch.o ++OBJS-$(CONFIG_IDCTDSP) += loongarch/idctdsp_init_loongarch.o + OBJS-$(CONFIG_VIDEODSP) += loongarch/videodsp_init.o +-OBJS-$(CONFIG_H264PRED) += loongarch/h264_intrapred_init_loongarch.o +-LASX-OBJS-$(CONFIG_H264DSP) += loongarch/h264dsp_lasx.o \ ++OBJS-$(CONFIG_HEVC_DECODER) += loongarch/hevcdsp_init_loongarch.o ++LASX-OBJS-$(CONFIG_H264CHROMA) += loongarch/h264chroma_lasx.o ++LASX-OBJS-$(CONFIG_H264QPEL) += loongarch/h264qpel_lasx.o ++LASX-OBJS-$(CONFIG_H264DSP) += loongarch/h264dsp_lasx.o \ + loongarch/h264idct_lasx.o \ + loongarch/h264_deblock_lasx.o +-LASX-OBJS-$(CONFIG_H264CHROMA) += loongarch/h264chroma_lasx.o +-LASX-OBJS-$(CONFIG_H264CHROMA) += loongarch/h264qpel_lasx.o +-LASX-OBJS-$(CONFIG_IDCTDSP) += loongarch/simple_idct_lasx.o \ +- loongarch/idctdsp_lasx.o ++LASX-OBJS-$(CONFIG_H264PRED) += loongarch/h264_intrapred_lasx.o + LASX-OBJS-$(CONFIG_VC1_DECODER) += loongarch/vc1dsp_lasx.o + LASX-OBJS-$(CONFIG_HPELDSP) += loongarch/hpeldsp_lasx.o +-LASX-OBJS-$(CONFIG_H264PRED) += loongarch/h264_intrapred_lasx.o +-LSX-OBJS-$(CONFIG_HEVC_DECODER) += loongarch/hevcdsp_lsx.o +-LSX-OBJS-$(CONFIG_HEVC_DECODER) += loongarch/hevc_idct_lsx.o +-LSX-OBJS-$(CONFIG_HEVC_DECODER) += loongarch/hevc_mc_bi_lsx.o +-LSX-OBJS-$(CONFIG_HEVC_DECODER) += loongarch/hevc_lpf_sao_lsx.o +-LSX-OBJS-$(CONFIG_HEVC_DECODER) += loongarch/hevc_mc_uni_lsx.o +-LSX-OBJS-$(CONFIG_HEVC_DECODER) += loongarch/hevc_mc_uniw_lsx.o +-LSX-OBJS-$(CONFIG_VP9_DECODER) += loongarch/vp9_mc_lsx.o \ ++LASX-OBJS-$(CONFIG_IDCTDSP) += loongarch/simple_idct_lasx.o \ ++ loongarch/idctdsp_lasx.o ++LSX-OBJS-$(CONFIG_VP8_DECODER) += loongarch/vp8_mc_lsx.o \ ++ loongarch/vp8_lpf_lsx.o ++LSX-OBJS-$(CONFIG_VP9_DECODER) += loongarch/vp9_mc_lsx.o \ + loongarch/vp9_intra_lsx.o \ + loongarch/vp9_lpf_lsx.o \ + loongarch/vp9_idct_lsx.o +-LSX-OBJS-$(CONFIG_VP8_DECODER) += loongarch/vp8_mc_lsx.o \ +- loongarch/vp8_lpf_lsx.o ++LSX-OBJS-$(CONFIG_HEVC_DECODER) += loongarch/hevcdsp_lsx.o \ ++ loongarch/hevc_idct_lsx.o \ ++ loongarch/hevc_lpf_sao_lsx.o \ ++ loongarch/hevc_mc_bi_lsx.o \ ++ loongarch/hevc_mc_uni_lsx.o \ ++ loongarch/hevc_mc_uniw_lsx.o +diff --git a/libavcodec/loongarch/cabac.h b/libavcodec/loongarch/cabac.h +index ea937665b4..e1c946fe16 100644 +--- a/libavcodec/loongarch/cabac.h ++++ b/libavcodec/loongarch/cabac.h +@@ -28,104 +28,105 @@ + #include "libavcodec/cabac.h" + #include "config.h" + +-#define GET_CABAC_LOONGARCH \ +- "ld.bu %[bit], %[state], 0x0 \n\t" \ +- "andi %[tmp0], %[c_range], 0xC0 \n\t" \ +- "slli.d %[tmp0], %[tmp0], 0x01 \n\t" \ +- "add.d %[tmp0], %[tmp0], %[tables] \n\t" \ +- "add.d %[tmp0], %[tmp0], %[bit] \n\t" \ +- /* tmp1: RangeLPS */ \ +- "ld.bu %[tmp1], %[tmp0], %[lps_off] \n\t" \ +- \ +- "sub.d %[c_range], %[c_range], %[tmp1] \n\t" \ +- "slli.d %[tmp0], %[c_range], 0x11 \n\t" \ +- "bge %[tmp0], %[c_low], 1f \n\t" \ +- "move %[c_range], %[tmp1] \n\t" \ +- "nor %[bit], %[bit], %[bit] \n\t" \ +- "sub.d %[c_low], %[c_low], %[tmp0] \n\t" \ +- \ +- "1: \n\t" \ +- /* tmp1: *state */ \ +- "add.d %[tmp0], %[tables], %[bit] \n\t" \ +- "ld.bu %[tmp1], %[tmp0], %[mlps_off] \n\t" \ +- /* tmp2: lps_mask */ \ +- "add.d %[tmp0], %[tables], %[c_range] \n\t" \ +- "ld.bu %[tmp2], %[tmp0], %[norm_off] \n\t" \ +- \ +- "andi %[bit], %[bit], 0x01 \n\t" \ +- "st.b %[tmp1], %[state], 0x0 \n\t" \ +- "sll.d %[c_range], %[c_range], %[tmp2] \n\t" \ +- "sll.d %[c_low], %[c_low], %[tmp2] \n\t" \ +- \ +- "and %[tmp1], %[c_low], %[cabac_mask] \n\t" \ +- "bnez %[tmp1], 1f \n\t" \ +- "ld.hu %[tmp1], %[c_bytestream], 0x0 \n\t" \ +- "ctz.d %[tmp0], %[c_low] \n\t" \ +- "addi.d %[tmp2], %[tmp0], -16 \n\t" \ +- "revb.2h %[tmp0], %[tmp1] \n\t" \ +- "slli.d %[tmp0], %[tmp0], 0x01 \n\t" \ +- "sub.d %[tmp0], %[tmp0], %[cabac_mask] \n\t" \ +- "sll.d %[tmp0], %[tmp0], %[tmp2] \n\t" \ +- "add.d %[c_low], %[c_low], %[tmp0] \n\t" \ +- "addi.d %[c_bytestream], %[c_bytestream], 0x02 \n\t" \ +- "1: \n\t" \ ++#define GET_CABAC_LOONGARCH_UNCBSR \ ++ "ld.bu %[bit], %[state], 0x0 \n\t" \ ++ "andi %[tmp0], %[c_range], 0xC0 \n\t" \ ++ "slli.d %[tmp0], %[tmp0], 0x01 \n\t" \ ++ "add.d %[tmp0], %[tmp0], %[tables] \n\t" \ ++ "add.d %[tmp0], %[tmp0], %[bit] \n\t" \ ++ /* tmp1: RangeLPS */ \ ++ "ld.bu %[tmp1], %[tmp0], %[lps_off] \n\t" \ ++ \ ++ "sub.d %[c_range], %[c_range], %[tmp1] \n\t" \ ++ "slli.d %[tmp0], %[c_range], 0x11 \n\t" \ ++ "bge %[tmp0], %[c_low], 1f \n\t" \ ++ "move %[c_range], %[tmp1] \n\t" \ ++ "nor %[bit], %[bit], %[bit] \n\t" \ ++ "sub.d %[c_low], %[c_low], %[tmp0] \n\t" \ ++ \ ++ "1: \n\t" \ ++ /* tmp1: *state */ \ ++ "add.d %[tmp0], %[tables], %[bit] \n\t" \ ++ "ld.bu %[tmp1], %[tmp0], %[mlps_off] \n\t" \ ++ /* tmp2: lps_mask */ \ ++ "add.d %[tmp0], %[tables], %[c_range] \n\t" \ ++ "ld.bu %[tmp2], %[tmp0], %[norm_off] \n\t" \ ++ \ ++ "andi %[bit], %[bit], 0x01 \n\t" \ ++ "st.b %[tmp1], %[state], 0x0 \n\t" \ ++ "sll.d %[c_range], %[c_range], %[tmp2] \n\t" \ ++ "sll.d %[c_low], %[c_low], %[tmp2] \n\t" \ ++ \ ++ "and %[tmp1], %[c_low], %[cabac_mask] \n\t" \ ++ "bnez %[tmp1], 1f \n\t" \ ++ "ld.hu %[tmp1], %[c_bytestream], 0x0 \n\t" \ ++ "ctz.d %[tmp0], %[c_low] \n\t" \ ++ "addi.d %[tmp2], %[tmp0], -16 \n\t" \ ++ "revb.2h %[tmp0], %[tmp1] \n\t" \ ++ "slli.d %[tmp0], %[tmp0], 0x01 \n\t" \ ++ "sub.d %[tmp0], %[tmp0], %[cabac_mask] \n\t" \ ++ "sll.d %[tmp0], %[tmp0], %[tmp2] \n\t" \ ++ "add.d %[c_low], %[c_low], %[tmp0] \n\t" \ ++ "addi.d %[c_bytestream], %[c_bytestream], 0x02 \n\t" \ ++ "1: \n\t" \ + +-#define GET_CABAC_LOONGARCH_END \ +- "ld.bu %[bit], %[state], 0x0 \n\t" \ +- "andi %[tmp0], %[c_range], 0xC0 \n\t" \ +- "slli.d %[tmp0], %[tmp0], 0x01 \n\t" \ +- "add.d %[tmp0], %[tmp0], %[tables] \n\t" \ +- "add.d %[tmp0], %[tmp0], %[bit] \n\t" \ +- /* tmp1: RangeLPS */ \ +- "ld.bu %[tmp1], %[tmp0], %[lps_off] \n\t" \ +- \ +- "sub.d %[c_range], %[c_range], %[tmp1] \n\t" \ +- "slli.d %[tmp0], %[c_range], 0x11 \n\t" \ +- "bge %[tmp0], %[c_low], 1f \n\t" \ +- "move %[c_range], %[tmp1] \n\t" \ +- "nor %[bit], %[bit], %[bit] \n\t" \ +- "sub.d %[c_low], %[c_low], %[tmp0] \n\t" \ +- \ +- "1: \n\t" \ +- /* tmp1: *state */ \ +- "add.d %[tmp0], %[tables], %[bit] \n\t" \ +- "ld.bu %[tmp1], %[tmp0], %[mlps_off] \n\t" \ +- /* tmp2: lps_mask */ \ +- "add.d %[tmp0], %[tables], %[c_range] \n\t" \ +- "ld.bu %[tmp2], %[tmp0], %[norm_off] \n\t" \ +- \ +- "andi %[bit], %[bit], 0x01 \n\t" \ +- "st.b %[tmp1], %[state], 0x0 \n\t" \ +- "sll.d %[c_range], %[c_range], %[tmp2] \n\t" \ +- "sll.d %[c_low], %[c_low], %[tmp2] \n\t" \ +- \ +- "and %[tmp1], %[c_low], %[cabac_mask] \n\t" \ +- "bnez %[tmp1], 1f \n\t" \ +- "ld.hu %[tmp1], %[c_bytestream], 0x0 \n\t" \ +- "ctz.d %[tmp0], %[c_low] \n\t" \ +- "addi.d %[tmp2], %[tmp0], -16 \n\t" \ +- "revb.2h %[tmp0], %[tmp1] \n\t" \ +- "slli.d %[tmp0], %[tmp0], 0x01 \n\t" \ +- "sub.d %[tmp0], %[tmp0], %[cabac_mask] \n\t" \ +- "sll.d %[tmp0], %[tmp0], %[tmp2] \n\t" \ +- \ +- "add.d %[c_low], %[c_low], %[tmp0] \n\t" \ +- \ +- "slt %[tmp0], %[c_bytestream], %[c_bytestream_end] \n\t" \ +- "add.d %[c_bytestream], %[c_bytestream], %[tmp0] \n\t" \ +- "add.d %[c_bytestream], %[c_bytestream], %[tmp0] \n\t" \ +- "1: \n\t" \ ++#define GET_CABAC_LOONGARCH \ ++ "ld.bu %[bit], %[state], 0x0 \n\t" \ ++ "andi %[tmp0], %[c_range], 0xC0 \n\t" \ ++ "slli.d %[tmp0], %[tmp0], 0x01 \n\t" \ ++ "add.d %[tmp0], %[tmp0], %[tables] \n\t" \ ++ "add.d %[tmp0], %[tmp0], %[bit] \n\t" \ ++ /* tmp1: RangeLPS */ \ ++ "ld.bu %[tmp1], %[tmp0], %[lps_off] \n\t" \ ++ \ ++ "sub.d %[c_range], %[c_range], %[tmp1] \n\t" \ ++ "slli.d %[tmp0], %[c_range], 0x11 \n\t" \ ++ "bge %[tmp0], %[c_low], 1f \n\t" \ ++ "move %[c_range], %[tmp1] \n\t" \ ++ "nor %[bit], %[bit], %[bit] \n\t" \ ++ "sub.d %[c_low], %[c_low], %[tmp0] \n\t" \ ++ \ ++ "1: \n\t" \ ++ /* tmp1: *state */ \ ++ "add.d %[tmp0], %[tables], %[bit] \n\t" \ ++ "ld.bu %[tmp1], %[tmp0], %[mlps_off] \n\t" \ ++ /* tmp2: lps_mask */ \ ++ "add.d %[tmp0], %[tables], %[c_range] \n\t" \ ++ "ld.bu %[tmp2], %[tmp0], %[norm_off] \n\t" \ ++ \ ++ "andi %[bit], %[bit], 0x01 \n\t" \ ++ "st.b %[tmp1], %[state], 0x0 \n\t" \ ++ "sll.d %[c_range], %[c_range], %[tmp2] \n\t" \ ++ "sll.d %[c_low], %[c_low], %[tmp2] \n\t" \ ++ \ ++ "and %[tmp1], %[c_low], %[cabac_mask] \n\t" \ ++ "bnez %[tmp1], 1f \n\t" \ ++ "ld.hu %[tmp1], %[c_bytestream], 0x0 \n\t" \ ++ "ctz.d %[tmp0], %[c_low] \n\t" \ ++ "addi.d %[tmp2], %[tmp0], -16 \n\t" \ ++ "revb.2h %[tmp0], %[tmp1] \n\t" \ ++ "slli.d %[tmp0], %[tmp0], 0x01 \n\t" \ ++ "sub.d %[tmp0], %[tmp0], %[cabac_mask] \n\t" \ ++ "sll.d %[tmp0], %[tmp0], %[tmp2] \n\t" \ ++ \ ++ "add.d %[c_low], %[c_low], %[tmp0] \n\t" \ ++ \ ++ "slt %[tmp0], %[c_bytestream], %[c_bytestream_end] \n\t" \ ++ "add.d %[c_bytestream], %[c_bytestream], %[tmp0] \n\t" \ ++ "add.d %[c_bytestream], %[c_bytestream], %[tmp0] \n\t" \ ++ "1: \n\t" \ + + #define get_cabac_inline get_cabac_inline_loongarch +-static av_always_inline int get_cabac_inline_loongarch(CABACContext *c, +- uint8_t * const state){ ++static av_always_inline ++int get_cabac_inline_loongarch(CABACContext *c, uint8_t * const state) ++{ + int64_t tmp0, tmp1, tmp2, bit; + + __asm__ volatile ( + #if UNCHECKED_BITSTREAM_READER +- GET_CABAC_LOONGARCH ++ GET_CABAC_LOONGARCH_UNCBSR + #else +- GET_CABAC_LOONGARCH_END ++ GET_CABAC_LOONGARCH + #endif + : [bit]"=&r"(bit), [tmp0]"=&r"(tmp0), [tmp1]"=&r"(tmp1), [tmp2]"=&r"(tmp2), + [c_range]"+&r"(c->range), [c_low]"+&r"(c->low), +@@ -189,7 +190,8 @@ static av_always_inline int get_cabac_bypass_loongarch(CABACContext *c) + } + + #define get_cabac_bypass_sign get_cabac_bypass_sign_loongarch +-static av_always_inline int get_cabac_bypass_sign_loongarch(CABACContext *c, int val) ++static av_always_inline ++int get_cabac_bypass_sign_loongarch(CABACContext *c, int val) + { + int64_t tmp0, tmp1; + int res = val; +diff --git a/libavcodec/loongarch/h264_cabac.c b/libavcodec/loongarch/h264_cabac.c +index d3ea8a884c..d88743bed7 100644 +--- a/libavcodec/loongarch/h264_cabac.c ++++ b/libavcodec/loongarch/h264_cabac.c +@@ -26,8 +26,7 @@ + + #define decode_significance decode_significance_loongarch + static int decode_significance_loongarch(CABACContext *c, int max_coeff, +- uint8_t *significant_coeff_ctx_base, +- int *index, int64_t last_off) ++ uint8_t *significant_coeff_ctx_base, int *index, int64_t last_off) + { + void *end = significant_coeff_ctx_base + max_coeff - 1; + int64_t minusstart = -(int64_t)significant_coeff_ctx_base; +@@ -38,35 +37,36 @@ static int decode_significance_loongarch(CABACContext *c, int max_coeff, + __asm__ volatile( + "3:" + #if UNCHECKED_BITSTREAM_READER +- GET_CABAC_LOONGARCH ++ GET_CABAC_LOONGARCH_UNCBSR + #else +- GET_CABAC_LOONGARCH_END ++ GET_CABAC_LOONGARCH + #endif +- "blt %[bit], %[one], 4f \n\t" +- "add.d %[state], %[state], %[last_off] \n\t" ++ "blt %[bit], %[one], 4f \n\t" ++ "add.d %[state], %[state], %[last_off] \n\t" + #if UNCHECKED_BITSTREAM_READER +- GET_CABAC_LOONGARCH ++ GET_CABAC_LOONGARCH_UNCBSR + #else +- GET_CABAC_LOONGARCH_END ++ GET_CABAC_LOONGARCH + #endif +- "sub.d %[state], %[state], %[last_off] \n\t" +- "add.d %[tmp0], %[state], %[minusstart] \n\t" +- "st.w %[tmp0], %[index], 0 \n\t" +- "bge %[bit], %[one], 5f \n\t" +- "addi.d %[index], %[index], 4 \n\t" +- "4: \n\t" +- "addi.d %[state], %[state], 1 \n\t" +- "blt %[state], %[end], 3b \n\t" +- "add.d %[tmp0], %[state], %[minusstart] \n\t" +- "st.w %[tmp0], %[index], 0 \n\t" +- "5: \n\t" +- "add.d %[tmp0], %[index], %[minusindex] \n\t" +- "srli.d %[tmp0], %[tmp0], 2 \n\t" +- : [bit]"=&r"(bit), [tmp0]"=&r"(tmp0), [tmp1]"=&r"(tmp1), [tmp2]"=&r"(tmp2), [c_range]"+&r"(c->range), +- [c_low]"+&r"(c->low), [state]"+&r"(state), ++ "sub.d %[state], %[state], %[last_off] \n\t" ++ "add.d %[tmp0], %[state], %[minusstart] \n\t" ++ "st.w %[tmp0], %[index], 0 \n\t" ++ "bge %[bit], %[one], 5f \n\t" ++ "addi.d %[index], %[index], 4 \n\t" ++ "4: \n\t" ++ "addi.d %[state], %[state], 1 \n\t" ++ "blt %[state], %[end], 3b \n\t" ++ "add.d %[tmp0], %[state], %[minusstart] \n\t" ++ "st.w %[tmp0], %[index], 0 \n\t" ++ "5: \n\t" ++ "add.d %[tmp0], %[index], %[minusindex] \n\t" ++ "srli.d %[tmp0], %[tmp0], 2 \n\t" ++ : [bit]"=&r"(bit), [tmp0]"=&r"(tmp0), [tmp1]"=&r"(tmp1), [tmp2]"=&r"(tmp2), ++ [c_range]"+&r"(c->range), [c_low]"+&r"(c->low), [state]"+&r"(state), + [c_bytestream]"+&r"(c->bytestream), [index]"+&r"(index) + : [tables]"r"(ff_h264_cabac_tables), [end]"r"(end), [one]"r"(one), +- [minusstart]"r"(minusstart), [minusindex]"r"(minusindex), [last_off]"r"(last_off), ++ [minusstart]"r"(minusstart), [minusindex]"r"(minusindex), ++ [last_off]"r"(last_off), + #if !UNCHECKED_BITSTREAM_READER + [c_bytestream_end]"r"(c->bytestream_end), + #endif +@@ -81,9 +81,9 @@ static int decode_significance_loongarch(CABACContext *c, int max_coeff, + } + + #define decode_significance_8x8 decode_significance_8x8_loongarch +-static int decode_significance_8x8_loongarch(CABACContext *c, +- uint8_t *significant_coeff_ctx_base, +- int *index, uint8_t *last_coeff_ctx_base, const uint8_t *sig_off) ++static int decode_significance_8x8_loongarch( ++ CABACContext *c, uint8_t *significant_coeff_ctx_base, ++ int *index, uint8_t *last_coeff_ctx_base, const uint8_t *sig_off) + { + int64_t minusindex = 4 - (int64_t)index; + int64_t bit, tmp0, tmp1, tmp2, one = 1, end = 63, last = 0; +@@ -91,45 +91,49 @@ static int decode_significance_8x8_loongarch(CABACContext *c, + int64_t flag_offset = H264_LAST_COEFF_FLAG_OFFSET_8x8_OFFSET; + + __asm__ volatile( +- "3: \n\t" +- "ldx.bu %[tmp0], %[sig_off], %[last] \n\t" +- "add.d %[state], %[tmp0], %[significant_coeff_ctx_base] \n\t" ++ "3: \n\t" ++ "ldx.bu %[tmp0], %[sig_off], %[last] \n\t" ++ "add.d %[state], %[tmp0], %[significant_coeff_ctx_base] \n\t" + #if UNCHECKED_BITSTREAM_READER +- GET_CABAC_LOONGARCH ++ GET_CABAC_LOONGARCH_UNCBSR + #else +- GET_CABAC_LOONGARCH_END ++ GET_CABAC_LOONGARCH + #endif +- "blt %[bit], %[one], 4f \n\t" +- "add.d %[tmp0], %[tables], %[flag_offset] \n\t" +- "ldx.bu %[tmp1], %[tmp0], %[last] \n\t" +- "add.d %[state], %[tmp1], %[last_coeff_ctx_base] \n\t" ++ "blt %[bit], %[one], 4f \n\t" ++ "add.d %[tmp0], %[tables], %[flag_offset] \n\t" ++ "ldx.bu %[tmp1], %[tmp0], %[last] \n\t" ++ "add.d %[state], %[tmp1], %[last_coeff_ctx_base] \n\t" + #if UNCHECKED_BITSTREAM_READER +- GET_CABAC_LOONGARCH ++ GET_CABAC_LOONGARCH_UNCBSR + #else +- GET_CABAC_LOONGARCH_END ++ GET_CABAC_LOONGARCH + #endif +- "st.w %[last], %[index], 0 \n\t" +- "bge %[bit], %[one], 5f \n\t" +- "addi.d %[index], %[index], 4 \n\t" +- "4: \n\t" +- "addi.d %[last], %[last], 1 \n\t" +- "blt %[last], %[end], 3b \n\t" +- "st.w %[last], %[index], 0 \n\t" +- "5: \n\t" +- "add.d %[tmp0], %[index], %[minusindex] \n\t" +- "srli.d %[tmp0], %[tmp0], 2 \n\t" +- : [bit]"=&r"(bit), [tmp0]"=&r"(tmp0), [tmp1]"=&r"(tmp1), [tmp2]"=&r"(tmp2), [c_range]"+&r"(c->range), ++ "st.w %[last], %[index], 0 \n\t" ++ "bge %[bit], %[one], 5f \n\t" ++ "addi.d %[index], %[index], 4 \n\t" ++ "4: \n\t" ++ "addi.d %[last], %[last], 1 \n\t" ++ "blt %[last], %[end], 3b \n\t" ++ "st.w %[last], %[index], 0 \n\t" ++ "5: \n\t" ++ "add.d %[tmp0], %[index], %[minusindex] \n\t" ++ "srli.d %[tmp0], %[tmp0], 2 \n\t" ++ : [bit]"=&r"(bit), [tmp0]"=&r"(tmp0), [tmp1]"=&r"(tmp1), ++ [tmp2]"=&r"(tmp2), [c_range]"+&r"(c->range), + [c_low]"+&r"(c->low), [state]"+&r"(state), [last]"+&r"(last), + [c_bytestream]"+&r"(c->bytestream), [index]"+&r"(index) +- : [tables]"r"(ff_h264_cabac_tables), [end]"r"(end), [one]"r"(one), [minusindex]"r"(minusindex), +- [last_coeff_ctx_base]"r"(last_coeff_ctx_base), [flag_offset]"r"(flag_offset), ++ : [tables]"r"(ff_h264_cabac_tables), [end]"r"(end), ++ [one]"r"(one), [minusindex]"r"(minusindex), ++ [last_coeff_ctx_base]"r"(last_coeff_ctx_base), ++ [flag_offset]"r"(flag_offset), + #if !UNCHECKED_BITSTREAM_READER + [c_bytestream_end]"r"(c->bytestream_end), + #endif + [lps_off]"i"(H264_LPS_RANGE_OFFSET), [sig_off]"r"(sig_off), + [mlps_off]"i"(H264_MLPS_STATE_OFFSET + 128), + [norm_off]"i"(H264_NORM_SHIFT_OFFSET), +- [cabac_mask]"r"(CABAC_MASK), [significant_coeff_ctx_base]"r"(significant_coeff_ctx_base) ++ [cabac_mask]"r"(CABAC_MASK), ++ [significant_coeff_ctx_base]"r"(significant_coeff_ctx_base) + ); + + return (int)tmp0; +diff --git a/libavcodec/loongarch/h264_deblock_lasx.c b/libavcodec/loongarch/h264_deblock_lasx.c +index 886cc66d95..c89bea9a84 100644 +--- a/libavcodec/loongarch/h264_deblock_lasx.c ++++ b/libavcodec/loongarch/h264_deblock_lasx.c +@@ -58,7 +58,8 @@ do { \ + tmp3 = __lasx_xvld(mv_t, 48); \ + tmp4 = __lasx_xvld(mv_t, 208); \ + tmp5 = __lasx_xvld(mv_t + d_idx_x4, 208); \ +- DUP2_ARG3(__lasx_xvpermi_q, tmp2, tmp2, 0x20, tmp5, tmp5, 0x20, tmp2, tmp5); \ ++ DUP2_ARG3(__lasx_xvpermi_q, tmp2, tmp2, 0x20, tmp5, tmp5, \ ++ 0x20, tmp2, tmp5); \ + tmp3 = __lasx_xvpermi_q(tmp4, tmp3, 0x20); \ + tmp2 = __lasx_xvsub_h(tmp2, tmp3); \ + tmp5 = __lasx_xvsub_h(tmp5, tmp3); \ +@@ -132,7 +133,8 @@ void ff_h264_loop_filter_strength_lasx(int16_t bS[2][4][4], uint8_t nnz[40], + step <<= 3; + edges <<= 3; + +- H264_LOOP_FILTER_STRENGTH_ITERATION_LASX(edges, step, mask_mv1, 1, -8, zero); ++ H264_LOOP_FILTER_STRENGTH_ITERATION_LASX(edges, step, mask_mv1, ++ 1, -8, zero); + H264_LOOP_FILTER_STRENGTH_ITERATION_LASX(32, 8, mask_mv0, 0, -1, one); + + DUP2_ARG2(__lasx_xvld, (int8_t*)bS, 0, (int8_t*)bS, 16, tmp0, tmp1); +diff --git a/libavcodec/loongarch/h264chroma_init_loongarch.c b/libavcodec/loongarch/h264chroma_init_loongarch.c +index 7f1aa4d848..0ca24ecc47 100644 +--- a/libavcodec/loongarch/h264chroma_init_loongarch.c ++++ b/libavcodec/loongarch/h264chroma_init_loongarch.c +@@ -20,6 +20,7 @@ + */ + + #include "h264chroma_lasx.h" ++#include "libavutil/attributes.h" + #include "libavutil/loongarch/cpu.h" + #include "libavcodec/h264chroma.h" + +diff --git a/libavcodec/loongarch/h264dsp_init_loongarch.c b/libavcodec/loongarch/h264dsp_init_loongarch.c +index e02e3d7fa9..37633c3e51 100644 +--- a/libavcodec/loongarch/h264dsp_init_loongarch.c ++++ b/libavcodec/loongarch/h264dsp_init_loongarch.c +@@ -38,18 +38,10 @@ av_cold void ff_h264dsp_init_loongarch(H264DSPContext *c, const int bit_depth, + c->h264_h_loop_filter_luma = ff_h264_h_lpf_luma_8_lasx; + c->h264_v_loop_filter_luma_intra = ff_h264_v_lpf_luma_intra_8_lasx; + c->h264_h_loop_filter_luma_intra = ff_h264_h_lpf_luma_intra_8_lasx; +-// c->h264_h_loop_filter_luma_mbaff = ff_h264_h_loop_filter_luma_mbaff_lasx; +-// c->h264_h_loop_filter_luma_mbaff_intra = ff_h264_h_loop_filter_luma_mbaff_intra_lasx; + c->h264_v_loop_filter_chroma = ff_h264_v_lpf_chroma_8_lasx; + + if (chroma_format_idc <= 1) + c->h264_h_loop_filter_chroma = ff_h264_h_lpf_chroma_8_lasx; +-// else +-// c->h264_h_loop_filter_chroma = ff_h264_h_loop_filter_chroma422_lasx; +-// +-// if (chroma_format_idc > 1) +-// c->h264_h_loop_filter_chroma_mbaff = ff_h264_h_loop_filter_chroma422_mbaff_lasx; +-// + c->h264_v_loop_filter_chroma_intra = ff_h264_v_lpf_chroma_intra_8_lasx; + + if (chroma_format_idc <= 1) +diff --git a/libavcodec/loongarch/h264dsp_lasx.c b/libavcodec/loongarch/h264dsp_lasx.c +index b6f8b158e9..7fd4cedf7e 100644 +--- a/libavcodec/loongarch/h264dsp_lasx.c ++++ b/libavcodec/loongarch/h264dsp_lasx.c +@@ -64,15 +64,16 @@ + q0_or_p0_out = __lasx_xvclip255_h(q0_or_p0_out); \ + } + +-void ff_h264_h_lpf_luma_8_lasx(uint8_t *data, int img_width, ++void ff_h264_h_lpf_luma_8_lasx(uint8_t *data, ptrdiff_t img_width, + int alpha_in, int beta_in, int8_t *tc) + { +- int img_width_2x = img_width << 1; +- int img_width_4x = img_width << 2; +- int img_width_8x = img_width << 3; +- int img_width_3x = img_width_2x + img_width; ++ ptrdiff_t img_width_2x = img_width << 1; ++ ptrdiff_t img_width_4x = img_width << 2; ++ ptrdiff_t img_width_8x = img_width << 3; ++ ptrdiff_t img_width_3x = img_width_2x + img_width; + __m256i tmp_vec0, bs_vec; +- __m256i tc_vec = {0x0101010100000000, 0x0303030302020202, 0x0101010100000000, 0x0303030302020202}; ++ __m256i tc_vec = {0x0101010100000000, 0x0303030302020202, ++ 0x0101010100000000, 0x0303030302020202}; + + tmp_vec0 = __lasx_xvldrepl_w((uint32_t*)tc, 0); + tc_vec = __lasx_xvshuf_b(tmp_vec0, tmp_vec0, tc_vec); +@@ -102,14 +103,16 @@ void ff_h264_h_lpf_luma_8_lasx(uint8_t *data, int img_width, + src, img_width_3x, row4, row5, row6, row7); + src -= img_width_4x; + DUP4_ARG2(__lasx_xvldx, src_tmp, 0, src_tmp, img_width, src_tmp, +- img_width_2x, src_tmp, img_width_3x, row8, row9, row10, row11); ++ img_width_2x, src_tmp, img_width_3x, ++ row8, row9, row10, row11); + src_tmp += img_width_4x; + DUP4_ARG2(__lasx_xvldx, src_tmp, 0, src_tmp, img_width, src_tmp, +- img_width_2x, src_tmp, img_width_3x, row12, row13, row14, row15); ++ img_width_2x, src_tmp, img_width_3x, ++ row12, row13, row14, row15); + src_tmp -= img_width_4x; + +- LASX_TRANSPOSE16x8_B(row0, row1, row2, row3, row4, row5, row6, row7, +- row8, row9, row10, row11, ++ LASX_TRANSPOSE16x8_B(row0, row1, row2, row3, row4, row5, row6, ++ row7, row8, row9, row10, row11, + row12, row13, row14, row15, + p3_org, p2_org, p1_org, p0_org, + q0_org, q1_org, q2_org, q3_org); +@@ -186,8 +189,10 @@ void ff_h264_h_lpf_luma_8_lasx(uint8_t *data, int img_width, + + AVC_LPF_P0Q0(q0_org_h, p0_org_h, p1_org_h, q1_org_h, + neg_thresh_h, tc_h, p0_h, q0_h); +- DUP2_ARG2(__lasx_xvpickev_b, p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); +- DUP2_ARG2(__lasx_xvpermi_d, p0_h, 0xd8, q0_h, 0xd8, p0_h, q0_h); ++ DUP2_ARG2(__lasx_xvpickev_b, p0_h, p0_h, q0_h, q0_h, ++ p0_h, q0_h); ++ DUP2_ARG2(__lasx_xvpermi_d, p0_h, 0xd8, q0_h, 0xd8, ++ p0_h, q0_h); + p0_org = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than); + q0_org = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than); + } +@@ -197,15 +202,17 @@ void ff_h264_h_lpf_luma_8_lasx(uint8_t *data, int img_width, + __m256i control = {0x0000000400000000, 0x0000000500000001, + 0x0000000600000002, 0x0000000700000003}; + +- DUP4_ARG3(__lasx_xvpermi_q, p0_org, q3_org, 0x02, p1_org, q2_org, 0x02, +- p2_org, q1_org, 0x02, p3_org, q0_org, 0x02, p0_org, p1_org, +- p2_org, p3_org); +- DUP2_ARG2(__lasx_xvilvl_b, p1_org, p3_org, p0_org, p2_org, row0, row2); +- DUP2_ARG2(__lasx_xvilvh_b, p1_org, p3_org, p0_org, p2_org, row1, row3); ++ DUP4_ARG3(__lasx_xvpermi_q, p0_org, q3_org, 0x02, p1_org, ++ q2_org, 0x02, p2_org, q1_org, 0x02, p3_org, ++ q0_org, 0x02, p0_org, p1_org, p2_org, p3_org); ++ DUP2_ARG2(__lasx_xvilvl_b, p1_org, p3_org, p0_org, p2_org, ++ row0, row2); ++ DUP2_ARG2(__lasx_xvilvh_b, p1_org, p3_org, p0_org, p2_org, ++ row1, row3); + DUP2_ARG2(__lasx_xvilvl_b, row2, row0, row3, row1, row4, row6); + DUP2_ARG2(__lasx_xvilvh_b, row2, row0, row3, row1, row5, row7); +- DUP4_ARG2(__lasx_xvperm_w, row4, control, row5, control, row6, control, +- row7, control, row4, row5, row6, row7); ++ DUP4_ARG2(__lasx_xvperm_w, row4, control, row5, control, row6, ++ control, row7, control, row4, row5, row6, row7); + __lasx_xvstelm_d(row4, src, 0, 0); + __lasx_xvstelm_d(row4, src + img_width, 0, 1); + src += img_width_2x; +@@ -234,13 +241,14 @@ void ff_h264_h_lpf_luma_8_lasx(uint8_t *data, int img_width, + } + } + +-void ff_h264_v_lpf_luma_8_lasx(uint8_t *data, int img_width, ++void ff_h264_v_lpf_luma_8_lasx(uint8_t *data, ptrdiff_t img_width, + int alpha_in, int beta_in, int8_t *tc) + { +- int img_width_2x = img_width << 1; +- int img_width_3x = img_width + img_width_2x; ++ ptrdiff_t img_width_2x = img_width << 1; ++ ptrdiff_t img_width_3x = img_width + img_width_2x; + __m256i tmp_vec0, bs_vec; +- __m256i tc_vec = {0x0101010100000000, 0x0303030302020202, 0x0101010100000000, 0x0303030302020202}; ++ __m256i tc_vec = {0x0101010100000000, 0x0303030302020202, ++ 0x0101010100000000, 0x0303030302020202}; + + tmp_vec0 = __lasx_xvldrepl_w((uint32_t*)tc, 0); + tc_vec = __lasx_xvshuf_b(tmp_vec0, tmp_vec0, tc_vec); +@@ -259,7 +267,8 @@ void ff_h264_v_lpf_luma_8_lasx(uint8_t *data, int img_width, + alpha = __lasx_xvreplgr2vr_b(alpha_in); + beta = __lasx_xvreplgr2vr_b(beta_in); + +- DUP2_ARG2(__lasx_xvldx, data, -img_width_3x, data, -img_width_2x, p2_org, p1_org); ++ DUP2_ARG2(__lasx_xvldx, data, -img_width_3x, data, -img_width_2x, ++ p2_org, p1_org); + p0_org = __lasx_xvldx(data, -img_width); + DUP2_ARG2(__lasx_xvldx, data, 0, data, img_width, q0_org, q1_org); + +@@ -339,8 +348,10 @@ void ff_h264_v_lpf_luma_8_lasx(uint8_t *data, int img_width, + + AVC_LPF_P0Q0(q0_org_h, p0_org_h, p1_org_h, q1_org_h, + neg_thresh_h, tc_h, p0_h, q0_h); +- DUP2_ARG2(__lasx_xvpickev_b, p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); +- DUP2_ARG2(__lasx_xvpermi_d, p0_h, 0Xd8, q0_h, 0xd8, p0_h, q0_h); ++ DUP2_ARG2(__lasx_xvpickev_b, p0_h, p0_h, q0_h, q0_h, ++ p0_h, q0_h); ++ DUP2_ARG2(__lasx_xvpermi_d, p0_h, 0Xd8, q0_h, 0xd8, ++ p0_h, q0_h); + p0_h = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than); + q0_h = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than); + p0_org = __lasx_xvpermi_q(p0_org, p0_h, 0x30); +@@ -352,15 +363,15 @@ void ff_h264_v_lpf_luma_8_lasx(uint8_t *data, int img_width, + } + } + +-void ff_h264_h_lpf_chroma_8_lasx(uint8_t *data, int img_width, ++void ff_h264_h_lpf_chroma_8_lasx(uint8_t *data, ptrdiff_t img_width, + int alpha_in, int beta_in, int8_t *tc) + { + __m256i tmp_vec0, bs_vec; + __m256i tc_vec = {0x0303020201010000, 0x0303020201010000, 0x0, 0x0}; + __m256i zero = __lasx_xvldi(0); +- int img_width_2x = img_width << 1; +- int img_width_4x = img_width << 2; +- int img_width_3x = img_width_2x + img_width; ++ ptrdiff_t img_width_2x = img_width << 1; ++ ptrdiff_t img_width_4x = img_width << 2; ++ ptrdiff_t img_width_3x = img_width_2x + img_width; + + tmp_vec0 = __lasx_xvldrepl_w((uint32_t*)tc, 0); + tc_vec = __lasx_xvshuf_b(tmp_vec0, tmp_vec0, tc_vec); +@@ -388,8 +399,8 @@ void ff_h264_h_lpf_chroma_8_lasx(uint8_t *data, int img_width, + src, img_width_3x, row4, row5, row6, row7); + src -= img_width_4x; + /* LASX_TRANSPOSE8x4_B */ +- DUP4_ARG2(__lasx_xvilvl_b, row2, row0, row3, row1, row6, row4, row7, row5, +- p1_org, p0_org, q0_org, q1_org); ++ DUP4_ARG2(__lasx_xvilvl_b, row2, row0, row3, row1, row6, row4, ++ row7, row5, p1_org, p0_org, q0_org, q1_org); + row0 = __lasx_xvilvl_b(p0_org, p1_org); + row1 = __lasx_xvilvl_b(q1_org, q0_org); + row3 = __lasx_xvilvh_w(row1, row0); +@@ -431,8 +442,10 @@ void ff_h264_h_lpf_chroma_8_lasx(uint8_t *data, int img_width, + + AVC_LPF_P0Q0(q0_org_h, p0_org_h, p1_org_h, q1_org_h, + neg_thresh_h, tc_h, p0_h, q0_h); +- DUP2_ARG2(__lasx_xvpickev_b, p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); +- DUP2_ARG2(__lasx_xvpermi_d, p0_h, 0xd8, q0_h, 0xd8, p0_h, q0_h); ++ DUP2_ARG2(__lasx_xvpickev_b, p0_h, p0_h, q0_h, q0_h, ++ p0_h, q0_h); ++ DUP2_ARG2(__lasx_xvpermi_d, p0_h, 0xd8, q0_h, 0xd8, ++ p0_h, q0_h); + p0_org = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than); + q0_org = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than); + } +@@ -458,7 +471,7 @@ void ff_h264_h_lpf_chroma_8_lasx(uint8_t *data, int img_width, + } + } + +-void ff_h264_v_lpf_chroma_8_lasx(uint8_t *data, int img_width, ++void ff_h264_v_lpf_chroma_8_lasx(uint8_t *data, ptrdiff_t img_width, + int alpha_in, int beta_in, int8_t *tc) + { + int img_width_2x = img_width << 1; +@@ -482,7 +495,8 @@ void ff_h264_v_lpf_chroma_8_lasx(uint8_t *data, int img_width, + alpha = __lasx_xvreplgr2vr_b(alpha_in); + beta = __lasx_xvreplgr2vr_b(beta_in); + +- DUP2_ARG2(__lasx_xvldx, data, -img_width_2x, data, -img_width, p1_org, p0_org); ++ DUP2_ARG2(__lasx_xvldx, data, -img_width_2x, data, -img_width, ++ p1_org, p0_org); + DUP2_ARG2(__lasx_xvldx, data, 0, data, img_width, q0_org, q1_org); + + is_bs_greater_than0 = __lasx_xvslt_bu(zero, bs_vec); +@@ -514,8 +528,10 @@ void ff_h264_v_lpf_chroma_8_lasx(uint8_t *data, int img_width, + + AVC_LPF_P0Q0(q0_org_h, p0_org_h, p1_org_h, q1_org_h, + neg_thresh_h, tc_h, p0_h, q0_h); +- DUP2_ARG2(__lasx_xvpickev_b, p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); +- DUP2_ARG2(__lasx_xvpermi_d, p0_h, 0xd8, q0_h, 0xd8, p0_h, q0_h); ++ DUP2_ARG2(__lasx_xvpickev_b, p0_h, p0_h, q0_h, q0_h, ++ p0_h, q0_h); ++ DUP2_ARG2(__lasx_xvpermi_d, p0_h, 0xd8, q0_h, 0xd8, ++ p0_h, q0_h); + p0_h = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than); + q0_h = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than); + __lasx_xvstelm_d(p0_h, data - img_width, 0, 0); +@@ -565,12 +581,12 @@ void ff_h264_v_lpf_chroma_8_lasx(uint8_t *data, int img_width, + p0_or_q0_out = __lasx_xvsrar_h(p0_or_q0_out, const2); \ + } + +-void ff_h264_h_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, ++void ff_h264_h_lpf_luma_intra_8_lasx(uint8_t *data, ptrdiff_t img_width, + int alpha_in, int beta_in) + { +- int img_width_2x = img_width << 1; +- int img_width_4x = img_width << 2; +- int img_width_3x = img_width_2x + img_width; ++ ptrdiff_t img_width_2x = img_width << 1; ++ ptrdiff_t img_width_4x = img_width << 2; ++ ptrdiff_t img_width_3x = img_width_2x + img_width; + uint8_t *src = data - 4; + __m256i p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha, beta; + __m256i is_less_than, is_less_than_beta, is_less_than_alpha; +@@ -621,7 +637,8 @@ void ff_h264_h_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, + __m256i less_alpha_shift2_add2 = __lasx_xvsrli_b(alpha, 2); + + less_alpha_shift2_add2 = __lasx_xvaddi_bu(less_alpha_shift2_add2, 2); +- less_alpha_shift2_add2 = __lasx_xvslt_bu(p0_asub_q0, less_alpha_shift2_add2); ++ less_alpha_shift2_add2 = __lasx_xvslt_bu(p0_asub_q0, ++ less_alpha_shift2_add2); + + p1_org_h = __lasx_vext2xv_hu_bu(p1_org); + p0_org_h = __lasx_vext2xv_hu_bu(p0_org); +@@ -701,15 +718,17 @@ void ff_h264_h_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, + __m256i control = {0x0000000400000000, 0x0000000500000001, + 0x0000000600000002, 0x0000000700000003}; + +- DUP4_ARG3(__lasx_xvpermi_q, p0_org, q3_org, 0x02, p1_org, q2_org, 0x02, +- p2_org, q1_org, 0x02, p3_org, q0_org, 0x02, p0_org, p1_org, p2_org, +- p3_org); +- DUP2_ARG2(__lasx_xvilvl_b, p1_org, p3_org, p0_org, p2_org, row0, row2); +- DUP2_ARG2(__lasx_xvilvh_b, p1_org, p3_org, p0_org, p2_org, row1, row3); ++ DUP4_ARG3(__lasx_xvpermi_q, p0_org, q3_org, 0x02, p1_org, q2_org, ++ 0x02, p2_org, q1_org, 0x02, p3_org, q0_org, 0x02, ++ p0_org, p1_org, p2_org, p3_org); ++ DUP2_ARG2(__lasx_xvilvl_b, p1_org, p3_org, p0_org, p2_org, ++ row0, row2); ++ DUP2_ARG2(__lasx_xvilvh_b, p1_org, p3_org, p0_org, p2_org, ++ row1, row3); + DUP2_ARG2(__lasx_xvilvl_b, row2, row0, row3, row1, row4, row6); + DUP2_ARG2(__lasx_xvilvh_b, row2, row0, row3, row1, row5, row7); +- DUP4_ARG2(__lasx_xvperm_w, row4, control, row5, control, row6, control, +- row7, control, row4, row5, row6, row7); ++ DUP4_ARG2(__lasx_xvperm_w, row4, control, row5, control, row6, ++ control, row7, control, row4, row5, row6, row7); + src = data - 4; + __lasx_xvstelm_d(row4, src, 0, 0); + __lasx_xvstelm_d(row4, src + img_width, 0, 1); +@@ -738,19 +757,19 @@ void ff_h264_h_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, + } + } + +-void ff_h264_v_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, ++void ff_h264_v_lpf_luma_intra_8_lasx(uint8_t *data, ptrdiff_t img_width, + int alpha_in, int beta_in) + { +- int img_width_2x = img_width << 1; +- int img_width_3x = img_width_2x + img_width; ++ ptrdiff_t img_width_2x = img_width << 1; ++ ptrdiff_t img_width_3x = img_width_2x + img_width; + uint8_t *src = data - img_width_2x; + __m256i p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha, beta; + __m256i is_less_than, is_less_than_beta, is_less_than_alpha; + __m256i p1_org, p0_org, q0_org, q1_org; + __m256i zero = __lasx_xvldi(0); + +- DUP4_ARG2(__lasx_xvldx, src, 0, src, img_width, src, img_width_2x, src, img_width_3x, +- p1_org, p0_org, q0_org, q1_org); ++ DUP4_ARG2(__lasx_xvldx, src, 0, src, img_width, src, img_width_2x, ++ src, img_width_3x, p1_org, p0_org, q0_org, q1_org); + alpha = __lasx_xvreplgr2vr_b(alpha_in); + beta = __lasx_xvreplgr2vr_b(beta_in); + p0_asub_q0 = __lasx_xvabsd_bu(p0_org, q0_org); +@@ -771,7 +790,8 @@ void ff_h264_v_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, + __m256i q2_org = __lasx_xvldx(data, img_width_2x); + __m256i less_alpha_shift2_add2 = __lasx_xvsrli_b(alpha, 2); + less_alpha_shift2_add2 = __lasx_xvaddi_bu(less_alpha_shift2_add2, 2); +- less_alpha_shift2_add2 = __lasx_xvslt_bu(p0_asub_q0, less_alpha_shift2_add2); ++ less_alpha_shift2_add2 = __lasx_xvslt_bu(p0_asub_q0, ++ less_alpha_shift2_add2); + + p1_org_h = __lasx_vext2xv_hu_bu(p1_org); + p0_org_h = __lasx_vext2xv_hu_bu(p0_org); +@@ -857,13 +877,13 @@ void ff_h264_v_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, + } + } + +-void ff_h264_h_lpf_chroma_intra_8_lasx(uint8_t *data, int img_width, ++void ff_h264_h_lpf_chroma_intra_8_lasx(uint8_t *data, ptrdiff_t img_width, + int alpha_in, int beta_in) + { + uint8_t *src = data - 2; +- int img_width_2x = img_width << 1; +- int img_width_4x = img_width << 2; +- int img_width_3x = img_width_2x + img_width; ++ ptrdiff_t img_width_2x = img_width << 1; ++ ptrdiff_t img_width_4x = img_width << 2; ++ ptrdiff_t img_width_3x = img_width_2x + img_width; + __m256i p1_org, p0_org, q0_org, q1_org; + __m256i p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha, beta; + __m256i is_less_than, is_less_than_beta, is_less_than_alpha; +@@ -937,10 +957,10 @@ void ff_h264_h_lpf_chroma_intra_8_lasx(uint8_t *data, int img_width, + __lasx_xvstelm_h(p0_org, src, 0, 7); + } + +-void ff_h264_v_lpf_chroma_intra_8_lasx(uint8_t *data, int img_width, ++void ff_h264_v_lpf_chroma_intra_8_lasx(uint8_t *data, ptrdiff_t img_width, + int alpha_in, int beta_in) + { +- int img_width_2x = img_width << 1; ++ ptrdiff_t img_width_2x = img_width << 1; + __m256i p1_org, p0_org, q0_org, q1_org; + __m256i p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha, beta; + __m256i is_less_than, is_less_than_beta, is_less_than_alpha; +@@ -1046,8 +1066,10 @@ void ff_biweight_h264_pixels16_8_lasx(uint8_t *dst, uint8_t *src, + tmp6 = __lasx_xvsra_h(tmp6, denom); + tmp7 = __lasx_xvsra_h(tmp7, denom); + +- DUP4_ARG1(__lasx_xvclip255_h, tmp0, tmp1, tmp2, tmp3, tmp0, tmp1, tmp2, tmp3); +- DUP4_ARG1(__lasx_xvclip255_h, tmp4, tmp5, tmp6, tmp7, tmp4, tmp5, tmp6, tmp7); ++ DUP4_ARG1(__lasx_xvclip255_h, tmp0, tmp1, tmp2, tmp3, ++ tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG1(__lasx_xvclip255_h, tmp4, tmp5, tmp6, tmp7, ++ tmp4, tmp5, tmp6, tmp7); + DUP4_ARG2(__lasx_xvpickev_b, tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, + dst0, dst1, dst2, dst3); + __lasx_xvstelm_d(dst0, dst, 0, 0); +@@ -1082,16 +1104,16 @@ void ff_biweight_h264_pixels16_8_lasx(uint8_t *dst, uint8_t *src, + DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, + src, stride_3x, tmp4, tmp5, tmp6, tmp7); + src += stride_4x; +- DUP4_ARG3(__lasx_xvpermi_q, tmp1, tmp0, 0x20, tmp3, tmp2, 0x20, tmp5, tmp4, +- 0x20, tmp7, tmp6, 0x20, src0, src1, src2, src3); ++ DUP4_ARG3(__lasx_xvpermi_q, tmp1, tmp0, 0x20, tmp3, tmp2, 0x20, tmp5, ++ tmp4, 0x20, tmp7, tmp6, 0x20, src0, src1, src2, src3); + DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, + dst, stride_3x, tmp0, tmp1, tmp2, tmp3); + dst += stride_4x; + DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, + dst, stride_3x, tmp4, tmp5, tmp6, tmp7); + dst -= stride_4x; +- DUP4_ARG3(__lasx_xvpermi_q, tmp1, tmp0, 0x20, tmp3, tmp2, 0x20, tmp5, tmp4, +- 0x20, tmp7, tmp6, 0x20, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lasx_xvpermi_q, tmp1, tmp0, 0x20, tmp3, tmp2, 0x20, tmp5, ++ tmp4, 0x20, tmp7, tmp6, 0x20, dst0, dst1, dst2, dst3); + + DUP4_ARG2(__lasx_xvxori_b, src0, 128, src1, 128, src2, 128, src3, 128, + src0, src1, src2, src3); +@@ -1116,10 +1138,12 @@ void ff_biweight_h264_pixels16_8_lasx(uint8_t *dst, uint8_t *src, + tmp6 = __lasx_xvsra_h(tmp6, denom); + tmp7 = __lasx_xvsra_h(tmp7, denom); + +- DUP4_ARG1(__lasx_xvclip255_h, tmp0, tmp1, tmp2, tmp3, tmp0, tmp1, tmp2, tmp3); +- DUP4_ARG1(__lasx_xvclip255_h, tmp4, tmp5, tmp6, tmp7, tmp4, tmp5, tmp6, tmp7); +- DUP4_ARG2(__lasx_xvpickev_b, tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, +- dst0, dst1, dst2, dst3); ++ DUP4_ARG1(__lasx_xvclip255_h, tmp0, tmp1, tmp2, tmp3, ++ tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG1(__lasx_xvclip255_h, tmp4, tmp5, tmp6, tmp7, ++ tmp4, tmp5, tmp6, tmp7); ++ DUP4_ARG2(__lasx_xvpickev_b, tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, ++ tmp6, dst0, dst1, dst2, dst3); + __lasx_xvstelm_d(dst0, dst, 0, 0); + __lasx_xvstelm_d(dst0, dst, 8, 1); + dst += stride; +@@ -1177,7 +1201,8 @@ static void avc_biwgt_8x4_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + DUP2_ARG2(__lasx_xvxori_b, src0, 128, dst0, 128, src0, dst0); + vec0 = __lasx_xvilvl_b(dst0, src0); + vec1 = __lasx_xvilvh_b(dst0, src0); +- DUP2_ARG3(__lasx_xvdp2add_h_b, offset, wgt, vec0, offset, wgt, vec1, tmp0, tmp1); ++ DUP2_ARG3(__lasx_xvdp2add_h_b, offset, wgt, vec0, offset, wgt, vec1, ++ tmp0, tmp1); + tmp0 = __lasx_xvsra_h(tmp0, denom); + tmp1 = __lasx_xvsra_h(tmp1, denom); + DUP2_ARG1(__lasx_xvclip255_h, tmp0, tmp1, tmp0, tmp1); +@@ -1219,8 +1244,9 @@ static void avc_biwgt_8x8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + src, stride_3x, tmp0, tmp1, tmp2, tmp3); + DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); + src1 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- DUP4_ARG2(__lasx_xvld, dst_tmp, 0, dst_tmp + stride, 0, dst_tmp + stride_2x, 0, +- dst_tmp + stride_3x, 0, tmp0, tmp1, tmp2, tmp3); ++ tmp0 = __lasx_xvld(dst_tmp, 0); ++ DUP2_ARG2(__lasx_xvldx, dst_tmp, stride, dst_tmp, stride_2x, tmp1, tmp2); ++ tmp3 = __lasx_xvldx(dst_tmp, stride_3x); + dst_tmp += stride_4x; + DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); + dst0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +@@ -1239,7 +1265,8 @@ static void avc_biwgt_8x8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + tmp1 = __lasx_xvsra_h(tmp1, denom); + tmp2 = __lasx_xvsra_h(tmp2, denom); + tmp3 = __lasx_xvsra_h(tmp3, denom); +- DUP4_ARG1(__lasx_xvclip255_h, tmp0, tmp1, tmp2, tmp3, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG1(__lasx_xvclip255_h, tmp0, tmp1, tmp2, tmp3, ++ tmp0, tmp1, tmp2, tmp3); + DUP2_ARG2(__lasx_xvpickev_b, tmp1, tmp0, tmp3, tmp2, dst0, dst1); + __lasx_xvstelm_d(dst0, dst, 0, 0); + __lasx_xvstelm_d(dst0, dst + stride, 0, 1); +@@ -1334,8 +1361,10 @@ static void avc_biwgt_8x16_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + tmp5 = __lasx_xvsra_h(tmp5, denom); + tmp6 = __lasx_xvsra_h(tmp6, denom); + tmp7 = __lasx_xvsra_h(tmp7, denom); +- DUP4_ARG1(__lasx_xvclip255_h, tmp0, tmp1, tmp2, tmp3, tmp0, tmp1, tmp2, tmp3); +- DUP4_ARG1(__lasx_xvclip255_h, tmp4, tmp5, tmp6, tmp7, tmp4, tmp5, tmp6, tmp7); ++ DUP4_ARG1(__lasx_xvclip255_h, tmp0, tmp1, tmp2, tmp3, ++ tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG1(__lasx_xvclip255_h, tmp4, tmp5, tmp6, tmp7, ++ tmp4, tmp5, tmp6, tmp7); + DUP4_ARG2(__lasx_xvpickev_b, tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, + dst0, dst1, dst2, dst3) + __lasx_xvstelm_d(dst0, dst, 0, 0); +@@ -1493,7 +1522,8 @@ static void avc_biwgt_4x8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, + DUP2_ARG2(__lasx_xvxori_b, src0, 128, dst0, 128, src0, dst0); + vec0 = __lasx_xvilvl_b(dst0, src0); + vec1 = __lasx_xvilvh_b(dst0, src0); +- DUP2_ARG3(__lasx_xvdp2add_h_b, offset, wgt, vec0, offset, wgt, vec1, tmp0, tmp1); ++ DUP2_ARG3(__lasx_xvdp2add_h_b, offset, wgt, vec0, offset, wgt, vec1, ++ tmp0, tmp1); + tmp0 = __lasx_xvsra_h(tmp0, denom); + tmp1 = __lasx_xvsra_h(tmp1, denom); + DUP2_ARG1(__lasx_xvclip255_h, tmp0, tmp1, tmp0, tmp1); +@@ -1515,14 +1545,14 @@ void ff_biweight_h264_pixels4_8_lasx(uint8_t *dst, uint8_t *src, + int weight_src, int offset) + { + if (2 == height) { +- avc_biwgt_4x2_lasx(src, dst, stride, log2_denom, weight_src, weight_dst, +- offset); ++ avc_biwgt_4x2_lasx(src, dst, stride, log2_denom, weight_src, ++ weight_dst, offset); + } else if (4 == height) { +- avc_biwgt_4x4_lasx(src, dst, stride, log2_denom, weight_src, weight_dst, +- offset); ++ avc_biwgt_4x4_lasx(src, dst, stride, log2_denom, weight_src, ++ weight_dst, offset); + } else { +- avc_biwgt_4x8_lasx(src, dst, stride, log2_denom, weight_src, weight_dst, +- offset); ++ avc_biwgt_4x8_lasx(src, dst, stride, log2_denom, weight_src, ++ weight_dst, offset); + } + } + +@@ -1618,8 +1648,8 @@ void ff_weight_h264_pixels16_8_lasx(uint8_t *src, ptrdiff_t stride, + DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, + src, stride_3x, tmp4, tmp5, tmp6, tmp7); + src -= stride_4x; +- DUP4_ARG3(__lasx_xvpermi_q, tmp1, tmp0, 0x20, tmp3, tmp2, 0x20, tmp5, tmp4, +- 0x20, tmp7, tmp6, 0x20, src0, src1, src2, src3); ++ DUP4_ARG3(__lasx_xvpermi_q, tmp1, tmp0, 0x20, tmp3, tmp2, 0x20, tmp5, ++ tmp4, 0x20, tmp7, tmp6, 0x20, src0, src1, src2, src3); + DUP4_ARG2(__lasx_xvilvl_b, zero, src0, zero, src1, zero, src2, + zero, src3, src0_l, src1_l, src2_l, src3_l); + DUP4_ARG2(__lasx_xvilvh_b, zero, src0, zero, src1, zero, src2, +@@ -1632,10 +1662,10 @@ void ff_weight_h264_pixels16_8_lasx(uint8_t *src, ptrdiff_t stride, + src2_h = __lasx_xvmul_h(wgt, src2_h); + src3_l = __lasx_xvmul_h(wgt, src3_l); + src3_h = __lasx_xvmul_h(wgt, src3_h); +- DUP4_ARG2(__lasx_xvsadd_h, src0_l, offset, src0_h, offset, src1_l, offset, +- src1_h, offset, src0_l, src0_h, src1_l, src1_h); +- DUP4_ARG2(__lasx_xvsadd_h, src2_l, offset, src2_h, offset, src3_l, offset, +- src3_h, offset, src2_l, src2_h, src3_l, src3_h); ++ DUP4_ARG2(__lasx_xvsadd_h, src0_l, offset, src0_h, offset, src1_l, ++ offset, src1_h, offset, src0_l, src0_h, src1_l, src1_h); ++ DUP4_ARG2(__lasx_xvsadd_h, src2_l, offset, src2_h, offset, src3_l, ++ offset, src3_h, offset, src2_l, src2_h, src3_l, src3_h); + src0_l = __lasx_xvmaxi_h(src0_l, 0); + src0_h = __lasx_xvmaxi_h(src0_h, 0); + src1_l = __lasx_xvmaxi_h(src1_l, 0); +diff --git a/libavcodec/loongarch/h264dsp_lasx.h b/libavcodec/loongarch/h264dsp_lasx.h +index f3dcc0f3e3..4cf813750b 100644 +--- a/libavcodec/loongarch/h264dsp_lasx.h ++++ b/libavcodec/loongarch/h264dsp_lasx.h +@@ -25,21 +25,21 @@ + + #include "libavcodec/h264dec.h" + +-void ff_h264_h_lpf_luma_8_lasx(uint8_t *src, int stride, ++void ff_h264_h_lpf_luma_8_lasx(uint8_t *src, ptrdiff_t stride, + int alpha, int beta, int8_t *tc0); +-void ff_h264_v_lpf_luma_8_lasx(uint8_t *src, int stride, ++void ff_h264_v_lpf_luma_8_lasx(uint8_t *src, ptrdiff_t stride, + int alpha, int beta, int8_t *tc0); +-void ff_h264_h_lpf_luma_intra_8_lasx(uint8_t *src, int stride, ++void ff_h264_h_lpf_luma_intra_8_lasx(uint8_t *src, ptrdiff_t stride, + int alpha, int beta); +-void ff_h264_v_lpf_luma_intra_8_lasx(uint8_t *src, int stride, ++void ff_h264_v_lpf_luma_intra_8_lasx(uint8_t *src, ptrdiff_t stride, + int alpha, int beta); +-void ff_h264_h_lpf_chroma_8_lasx(uint8_t *src, int stride, ++void ff_h264_h_lpf_chroma_8_lasx(uint8_t *src, ptrdiff_t stride, + int alpha, int beta, int8_t *tc0); +-void ff_h264_v_lpf_chroma_8_lasx(uint8_t *src, int stride, ++void ff_h264_v_lpf_chroma_8_lasx(uint8_t *src, ptrdiff_t stride, + int alpha, int beta, int8_t *tc0); +-void ff_h264_h_lpf_chroma_intra_8_lasx(uint8_t *src, int stride, ++void ff_h264_h_lpf_chroma_intra_8_lasx(uint8_t *src, ptrdiff_t stride, + int alpha, int beta); +-void ff_h264_v_lpf_chroma_intra_8_lasx(uint8_t *src, int stride, ++void ff_h264_v_lpf_chroma_intra_8_lasx(uint8_t *src, ptrdiff_t stride, + int alpha, int beta); + void ff_biweight_h264_pixels16_8_lasx(uint8_t *dst, uint8_t *src, + ptrdiff_t stride, int height, +@@ -62,32 +62,29 @@ void ff_weight_h264_pixels8_8_lasx(uint8_t *src, ptrdiff_t stride, + void ff_weight_h264_pixels4_8_lasx(uint8_t *src, ptrdiff_t stride, + int height, int log2_denom, + int weight_src, int offset); ++void ff_h264_add_pixels4_8_lasx(uint8_t *_dst, int16_t *_src, int stride); ++ ++void ff_h264_add_pixels8_8_lasx(uint8_t *_dst, int16_t *_src, int stride); + void ff_h264_idct_add_lasx(uint8_t *dst, int16_t *src, int32_t dst_stride); +-void ff_h264_idct8_addblk_lasx(uint8_t *dst, int16_t *src, +- int32_t dst_stride); ++void ff_h264_idct8_addblk_lasx(uint8_t *dst, int16_t *src, int32_t dst_stride); + void ff_h264_idct4x4_addblk_dc_lasx(uint8_t *dst, int16_t *src, + int32_t dst_stride); + void ff_h264_idct8_dc_addblk_lasx(uint8_t *dst, int16_t *src, + int32_t dst_stride); +-void ff_h264_idct_add16_lasx(uint8_t *dst, +- const int32_t *blk_offset, ++void ff_h264_idct_add16_lasx(uint8_t *dst, const int32_t *blk_offset, + int16_t *block, int32_t dst_stride, + const uint8_t nzc[15 * 8]); + void ff_h264_idct8_add4_lasx(uint8_t *dst, const int32_t *blk_offset, + int16_t *block, int32_t dst_stride, + const uint8_t nzc[15 * 8]); +-void ff_h264_idct_add8_lasx(uint8_t **dst, +- const int32_t *blk_offset, ++void ff_h264_idct_add8_lasx(uint8_t **dst, const int32_t *blk_offset, + int16_t *block, int32_t dst_stride, + const uint8_t nzc[15 * 8]); +-void ff_h264_idct_add8_422_lasx(uint8_t **dst, +- const int32_t *blk_offset, ++void ff_h264_idct_add8_422_lasx(uint8_t **dst, const int32_t *blk_offset, + int16_t *block, int32_t dst_stride, + const uint8_t nzc[15 * 8]); +-void ff_h264_idct_add16_intra_lasx(uint8_t *dst, +- const int32_t *blk_offset, +- int16_t *block, +- int32_t dst_stride, ++void ff_h264_idct_add16_intra_lasx(uint8_t *dst, const int32_t *blk_offset, ++ int16_t *block, int32_t dst_stride, + const uint8_t nzc[15 * 8]); + void ff_h264_deq_idct_luma_dc_lasx(int16_t *dst, int16_t *src, + int32_t de_qval); +@@ -97,7 +94,4 @@ void ff_h264_loop_filter_strength_lasx(int16_t bS[2][4][4], uint8_t nnz[40], + int bidir, int edges, int step, + int mask_mv0, int mask_mv1, int field); + +-void ff_h264_add_pixels4_8_lasx(uint8_t *_dst, int16_t *_src, int stride); +- +-void ff_h264_add_pixels8_8_lasx(uint8_t *_dst, int16_t *_src, int stride); + #endif // #ifndef AVCODEC_LOONGARCH_H264DSP_LASX_H +diff --git a/libavcodec/loongarch/h264idct_lasx.c b/libavcodec/loongarch/h264idct_lasx.c +index 88dc56ef2c..46bd3b74d5 100644 +--- a/libavcodec/loongarch/h264idct_lasx.c ++++ b/libavcodec/loongarch/h264idct_lasx.c +@@ -91,8 +91,10 @@ void ff_h264_idct8_addblk_lasx(uint8_t *dst, int16_t *src, + int32_t dst_stride_3x = dst_stride_2x + dst_stride; + + src[0] += 32; +- DUP4_ARG2(__lasx_xvld, src, 0, src, 16, src, 32, src, 48, src0, src1, src2, src3); +- DUP4_ARG2(__lasx_xvld, src, 64, src, 80, src, 96, src, 112, src4, src5, src6, src7); ++ DUP4_ARG2(__lasx_xvld, src, 0, src, 16, src, 32, src, 48, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvld, src, 64, src, 80, src, 96, src, 112, ++ src4, src5, src6, src7); + __lasx_xvst(zero, src, 0); + __lasx_xvst(zero, src, 32); + __lasx_xvst(zero, src, 64); +@@ -141,8 +143,10 @@ void ff_h264_idct8_addblk_lasx(uint8_t *dst, int16_t *src, + LASX_TRANSPOSE8x8_H(res0, res1, res2, res3, res4, res5, res6, res7, + res0, res1, res2, res3, res4, res5, res6, res7); + +- DUP4_ARG1(__lasx_vext2xv_w_h, res0, res1, res2, res3, tmp0, tmp1, tmp2, tmp3); +- DUP4_ARG1(__lasx_vext2xv_w_h, res4, res5, res6, res7, tmp4, tmp5, tmp6, tmp7); ++ DUP4_ARG1(__lasx_vext2xv_w_h, res0, res1, res2, res3, ++ tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG1(__lasx_vext2xv_w_h, res4, res5, res6, res7, ++ tmp4, tmp5, tmp6, tmp7); + vec0 = __lasx_xvadd_w(tmp0, tmp4); + vec1 = __lasx_xvsub_w(tmp0, tmp4); + +@@ -188,10 +192,12 @@ void ff_h264_idct8_addblk_lasx(uint8_t *dst, int16_t *src, + LASX_BUTTERFLY_4_W(tmp0, tmp2, tmp5, tmp7, res0, res1, res6, res7); + LASX_BUTTERFLY_4_W(tmp4, tmp6, tmp1, tmp3, res2, res3, res4, res5); + +- DUP4_ARG2(__lasx_xvsrai_w, res0, 6, res1, 6, res2, 6, res3, 6, res0, res1, res2, res3); +- DUP4_ARG2(__lasx_xvsrai_w, res4, 6, res5, 6, res6, 6, res7, 6, res4, res5, res6, res7); +- DUP4_ARG2(__lasx_xvpickev_h, res1, res0, res3, res2, res5, res4, res7, res6, ++ DUP4_ARG2(__lasx_xvsrai_w, res0, 6, res1, 6, res2, 6, res3, 6, + res0, res1, res2, res3); ++ DUP4_ARG2(__lasx_xvsrai_w, res4, 6, res5, 6, res6, 6, res7, 6, ++ res4, res5, res6, res7); ++ DUP4_ARG2(__lasx_xvpickev_h, res1, res0, res3, res2, res5, res4, res7, ++ res6, res0, res1, res2, res3); + DUP4_ARG2(__lasx_xvpermi_d, res0, 0xd8, res1, 0xd8, res2, 0xd8, res3, 0xd8, + res0, res1, res2, res3); + +@@ -205,13 +211,14 @@ void ff_h264_idct8_addblk_lasx(uint8_t *dst, int16_t *src, + dst0, dst1, dst2, dst3); + DUP4_ARG2(__lasx_xvilvl_b, zero, dst4, zero, dst5, zero, dst6, zero, dst7, + dst4, dst5, dst6, dst7); +- DUP4_ARG3(__lasx_xvpermi_q, dst1, dst0, 0x20, dst3, dst2, 0x20, dst5, dst4, 0x20, +- dst7, dst6, 0x20, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lasx_xvpermi_q, dst1, dst0, 0x20, dst3, dst2, 0x20, dst5, ++ dst4, 0x20, dst7, dst6, 0x20, dst0, dst1, dst2, dst3); + res0 = __lasx_xvadd_h(res0, dst0); + res1 = __lasx_xvadd_h(res1, dst1); + res2 = __lasx_xvadd_h(res2, dst2); + res3 = __lasx_xvadd_h(res3, dst3); +- DUP4_ARG1(__lasx_xvclip255_h, res0, res1, res2, res3, res0, res1, res2, res3); ++ DUP4_ARG1(__lasx_xvclip255_h, res0, res1, res2, res3, res0, res1, ++ res2, res3); + DUP2_ARG2(__lasx_xvpickev_b, res1, res0, res3, res2, res0, res1); + __lasx_xvstelm_d(res0, dst, 0, 0); + __lasx_xvstelm_d(res0, dst + dst_stride, 0, 2); +@@ -270,15 +277,18 @@ void ff_h264_idct8_dc_addblk_lasx(uint8_t *dst, int16_t *src, + DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dst_stride, dst, dst_stride_2x, + dst, dst_stride_3x, dst4, dst5, dst6, dst7); + dst -= dst_stride_4x; +- DUP4_ARG1(__lasx_vext2xv_hu_bu, dst0, dst1, dst2, dst3, dst0, dst1, dst2, dst3); +- DUP4_ARG1(__lasx_vext2xv_hu_bu, dst4, dst5, dst6, dst7, dst4, dst5, dst6, dst7); +- DUP4_ARG3(__lasx_xvpermi_q, dst1, dst0, 0x20, dst3, dst2, 0x20, dst5, dst4, 0x20, +- dst7, dst6, 0x20, dst0, dst1, dst2, dst3); ++ DUP4_ARG1(__lasx_vext2xv_hu_bu, dst0, dst1, dst2, dst3, ++ dst0, dst1, dst2, dst3); ++ DUP4_ARG1(__lasx_vext2xv_hu_bu, dst4, dst5, dst6, dst7, ++ dst4, dst5, dst6, dst7); ++ DUP4_ARG3(__lasx_xvpermi_q, dst1, dst0, 0x20, dst3, dst2, 0x20, dst5, ++ dst4, 0x20, dst7, dst6, 0x20, dst0, dst1, dst2, dst3); + dst0 = __lasx_xvadd_h(dst0, dc); + dst1 = __lasx_xvadd_h(dst1, dc); + dst2 = __lasx_xvadd_h(dst2, dc); + dst3 = __lasx_xvadd_h(dst3, dc); +- DUP4_ARG1(__lasx_xvclip255_h, dst0, dst1, dst2, dst3, dst0, dst1, dst2, dst3); ++ DUP4_ARG1(__lasx_xvclip255_h, dst0, dst1, dst2, dst3, ++ dst0, dst1, dst2, dst3); + DUP2_ARG2(__lasx_xvpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); + __lasx_xvstelm_d(dst0, dst, 0, 0); + __lasx_xvstelm_d(dst0, dst + dst_stride, 0, 2); +@@ -446,15 +456,19 @@ void ff_h264_deq_idct_luma_dc_lasx(int16_t *dst, int16_t *src, + __m256i vres0, vres1, vres2, vres3; + __m256i de_q_vec = __lasx_xvreplgr2vr_w(de_qval); + +- DUP4_ARG2(__lasx_xvld, src, 0, src, 8, src, 16, src, 24, src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvld, src, 0, src, 8, src, 16, src, 24, ++ src0, src1, src2, src3); + LASX_TRANSPOSE4x4_H(src0, src1, src2, src3, tmp0, tmp1, tmp2, tmp3); + LASX_BUTTERFLY_4_H(tmp0, tmp2, tmp3, tmp1, vec0, vec3, vec2, vec1); + LASX_BUTTERFLY_4_H(vec0, vec1, vec2, vec3, hres0, hres3, hres2, hres1); +- LASX_TRANSPOSE4x4_H(hres0, hres1, hres2, hres3, hres0, hres1, hres2, hres3); ++ LASX_TRANSPOSE4x4_H(hres0, hres1, hres2, hres3, ++ hres0, hres1, hres2, hres3); + LASX_BUTTERFLY_4_H(hres0, hres1, hres3, hres2, vec0, vec3, vec2, vec1); + LASX_BUTTERFLY_4_H(vec0, vec1, vec2, vec3, vres0, vres1, vres2, vres3); +- DUP4_ARG1(__lasx_vext2xv_w_h, vres0, vres1, vres2, vres3, vres0, vres1, vres2, vres3); +- DUP2_ARG3(__lasx_xvpermi_q, vres1, vres0, 0x20, vres3, vres2, 0x20, vres0, vres1); ++ DUP4_ARG1(__lasx_vext2xv_w_h, vres0, vres1, vres2, vres3, ++ vres0, vres1, vres2, vres3); ++ DUP2_ARG3(__lasx_xvpermi_q, vres1, vres0, 0x20, vres3, vres2, 0x20, ++ vres0, vres1); + + vres0 = __lasx_xvmul_w(vres0, de_q_vec); + vres1 = __lasx_xvmul_w(vres1, de_q_vec); +diff --git a/libavcodec/loongarch/h264qpel_init_loongarch.c b/libavcodec/loongarch/h264qpel_init_loongarch.c +index b98b2dd793..969c9c376c 100644 +--- a/libavcodec/loongarch/h264qpel_init_loongarch.c ++++ b/libavcodec/loongarch/h264qpel_init_loongarch.c +@@ -20,6 +20,7 @@ + */ + + #include "h264qpel_lasx.h" ++#include "libavutil/attributes.h" + #include "libavutil/loongarch/cpu.h" + #include "libavcodec/h264qpel.h" + +@@ -34,6 +35,7 @@ av_cold void ff_h264qpel_init_loongarch(H264QpelContext *c, int bit_depth) + c->put_h264_qpel_pixels_tab[0][3] = ff_put_h264_qpel16_mc30_lasx; + c->put_h264_qpel_pixels_tab[0][4] = ff_put_h264_qpel16_mc01_lasx; + c->put_h264_qpel_pixels_tab[0][5] = ff_put_h264_qpel16_mc11_lasx; ++ + c->put_h264_qpel_pixels_tab[0][6] = ff_put_h264_qpel16_mc21_lasx; + c->put_h264_qpel_pixels_tab[0][7] = ff_put_h264_qpel16_mc31_lasx; + c->put_h264_qpel_pixels_tab[0][8] = ff_put_h264_qpel16_mc02_lasx; +diff --git a/libavcodec/loongarch/h264qpel_lasx.c b/libavcodec/loongarch/h264qpel_lasx.c +index 833cb07027..1c142e510e 100644 +--- a/libavcodec/loongarch/h264qpel_lasx.c ++++ b/libavcodec/loongarch/h264qpel_lasx.c +@@ -62,17 +62,17 @@ static const uint8_t luma_mask_arr[16 * 6] __attribute__((aligned(0x40))) = { + } ) + + static av_always_inline +-void avc_luma_hv_qrt_and_aver_dst_16x16_lasx(const uint8_t *src_x, +- const uint8_t *src_y, +- uint8_t *dst, int32_t stride) ++void avc_luma_hv_qrt_and_aver_dst_16x16_lasx(uint8_t *src_x, ++ uint8_t *src_y, ++ uint8_t *dst, ptrdiff_t stride) + { + const int16_t filt_const0 = 0xfb01; + const int16_t filt_const1 = 0x1414; + const int16_t filt_const2 = 0x1fb; + uint32_t loop_cnt; +- int32_t stride_2x = stride << 1; +- int32_t stride_3x = stride_2x + stride; +- int32_t stride_4x = stride << 2; ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; ++ ptrdiff_t stride_4x = stride << 2; + __m256i tmp0, tmp1; + __m256i src_hz0, src_hz1, src_hz2, src_hz3, mask0, mask1, mask2; + __m256i src_vt0, src_vt1, src_vt2, src_vt3, src_vt4, src_vt5, src_vt6; +@@ -91,24 +91,26 @@ void avc_luma_hv_qrt_and_aver_dst_16x16_lasx(const uint8_t *src_x, + mask0 = __lasx_xvld(luma_mask_arr, 0); + DUP2_ARG2(__lasx_xvld, luma_mask_arr, 32, luma_mask_arr, 64, mask1, mask2); + src_vt0 = __lasx_xvld(src_y, 0); +- DUP4_ARG2(__lasx_xvld, src_y + stride, 0, src_y + stride_2x, 0, src_y + stride_3x, 0, +- src_y + stride_4x, 0, src_vt1, src_vt2, src_vt3, src_vt4); +- src_y += stride_4x + stride; ++ DUP4_ARG2(__lasx_xvldx, src_y, stride, src_y, stride_2x, src_y, stride_3x, ++ src_y, stride_4x, src_vt1, src_vt2, src_vt3, src_vt4); ++ src_y += stride_4x; + + src_vt0 = __lasx_xvxori_b(src_vt0, 128); +- DUP4_ARG2(__lasx_xvxori_b, src_vt1, 128, src_vt2, 128, src_vt3, 128, src_vt4, 128, +- src_vt1, src_vt2, src_vt3, src_vt4); ++ DUP4_ARG2(__lasx_xvxori_b, src_vt1, 128, src_vt2, 128, src_vt3, 128, ++ src_vt4, 128, src_vt1, src_vt2, src_vt3, src_vt4); + + for (loop_cnt = 4; loop_cnt--;) { +- DUP4_ARG2(__lasx_xvld, src_x, 0, src_x + stride, 0, src_x + stride_2x, 0, +- src_x + stride_3x, 0, src_hz0, src_hz1, src_hz2, src_hz3); ++ src_hz0 = __lasx_xvld(src_x, 0); ++ DUP2_ARG2(__lasx_xvldx, src_x, stride, src_x, stride_2x, ++ src_hz1, src_hz2); ++ src_hz3 = __lasx_xvldx(src_x, stride_3x); + src_x += stride_4x; + src_hz0 = __lasx_xvpermi_d(src_hz0, 0x94); + src_hz1 = __lasx_xvpermi_d(src_hz1, 0x94); + src_hz2 = __lasx_xvpermi_d(src_hz2, 0x94); + src_hz3 = __lasx_xvpermi_d(src_hz3, 0x94); +- DUP4_ARG2(__lasx_xvxori_b, src_hz0, 128, src_hz1, 128, src_hz2, 128, src_hz3, +- 128, src_hz0, src_hz1, src_hz2, src_hz3); ++ DUP4_ARG2(__lasx_xvxori_b, src_hz0, 128, src_hz1, 128, src_hz2, 128, ++ src_hz3, 128, src_hz0, src_hz1, src_hz2, src_hz3); + + hz_out0 = AVC_HORZ_FILTER_SH(src_hz0, src_hz0, mask0, mask1, mask2); + hz_out1 = AVC_HORZ_FILTER_SH(src_hz1, src_hz1, mask0, mask1, mask2); +@@ -117,27 +119,30 @@ void avc_luma_hv_qrt_and_aver_dst_16x16_lasx(const uint8_t *src_x, + hz_out0 = __lasx_xvssrarni_b_h(hz_out1, hz_out0, 5); + hz_out2 = __lasx_xvssrarni_b_h(hz_out3, hz_out2, 5); + +- DUP4_ARG2(__lasx_xvld, src_y, 0, src_y + stride, 0, src_y + stride_2x, 0, +- src_y + stride_3x, 0, src_vt5, src_vt6, src_vt7, src_vt8); ++ DUP4_ARG2(__lasx_xvldx, src_y, stride, src_y, stride_2x, ++ src_y, stride_3x, src_y, stride_4x, ++ src_vt5, src_vt6, src_vt7, src_vt8); + src_y += stride_4x; + +- DUP4_ARG2(__lasx_xvxori_b, src_vt5, 128, src_vt6, 128, src_vt7, 128, src_vt8, +- 128, src_vt5, src_vt6, src_vt7, src_vt8); ++ DUP4_ARG2(__lasx_xvxori_b, src_vt5, 128, src_vt6, 128, src_vt7, 128, ++ src_vt8, 128, src_vt5, src_vt6, src_vt7, src_vt8); + +- DUP4_ARG3(__lasx_xvpermi_q, src_vt0, src_vt4, 0x02, src_vt1, src_vt5, 0x02, +- src_vt2, src_vt6, 0x02, src_vt3, src_vt7, 0x02, src_vt0, src_vt1, +- src_vt2, src_vt3); ++ DUP4_ARG3(__lasx_xvpermi_q, src_vt0, src_vt4, 0x02, src_vt1, src_vt5, ++ 0x02, src_vt2, src_vt6, 0x02, src_vt3, src_vt7, 0x02, ++ src_vt0, src_vt1, src_vt2, src_vt3); + src_vt87_h = __lasx_xvpermi_q(src_vt4, src_vt8, 0x02); +- DUP4_ARG2(__lasx_xvilvh_b, src_vt1, src_vt0, src_vt2, src_vt1, src_vt3, src_vt2, +- src_vt87_h, src_vt3, src_hz0, src_hz1, src_hz2, src_hz3); +- DUP4_ARG2(__lasx_xvilvl_b, src_vt1, src_vt0, src_vt2, src_vt1, src_vt3, src_vt2, +- src_vt87_h, src_vt3, src_vt0, src_vt1, src_vt2, src_vt3); +- DUP4_ARG3(__lasx_xvpermi_q, src_vt0, src_hz0, 0x02, src_vt1, src_hz1, 0x02, +- src_vt2, src_hz2, 0x02, src_vt3, src_hz3, 0x02, src_vt10_h, src_vt21_h, +- src_vt32_h, src_vt43_h); +- DUP4_ARG3(__lasx_xvpermi_q, src_vt0, src_hz0, 0x13, src_vt1, src_hz1, 0x13, +- src_vt2, src_hz2, 0x13, src_vt3, src_hz3, 0x13, src_vt54_h, src_vt65_h, +- src_vt76_h, src_vt87_h); ++ DUP4_ARG2(__lasx_xvilvh_b, src_vt1, src_vt0, src_vt2, src_vt1, ++ src_vt3, src_vt2, src_vt87_h, src_vt3, ++ src_hz0, src_hz1, src_hz2, src_hz3); ++ DUP4_ARG2(__lasx_xvilvl_b, src_vt1, src_vt0, src_vt2, src_vt1, ++ src_vt3, src_vt2, src_vt87_h, src_vt3, ++ src_vt0, src_vt1, src_vt2, src_vt3); ++ DUP4_ARG3(__lasx_xvpermi_q, src_vt0, src_hz0, 0x02, src_vt1, src_hz1, ++ 0x02, src_vt2, src_hz2, 0x02, src_vt3, src_hz3, 0x02, ++ src_vt10_h, src_vt21_h, src_vt32_h, src_vt43_h); ++ DUP4_ARG3(__lasx_xvpermi_q, src_vt0, src_hz0, 0x13, src_vt1, src_hz1, ++ 0x13, src_vt2, src_hz2, 0x13, src_vt3, src_hz3, 0x13, ++ src_vt54_h, src_vt65_h, src_vt76_h, src_vt87_h); + vt_out0 = AVC_DOT_SH3_SH(src_vt10_h, src_vt32_h, src_vt54_h, filt0, + filt1, filt2); + vt_out1 = AVC_DOT_SH3_SH(src_vt21_h, src_vt43_h, src_vt65_h, filt0, +@@ -149,14 +154,17 @@ void avc_luma_hv_qrt_and_aver_dst_16x16_lasx(const uint8_t *src_x, + vt_out0 = __lasx_xvssrarni_b_h(vt_out1, vt_out0, 5); + vt_out2 = __lasx_xvssrarni_b_h(vt_out3, vt_out2, 5); + +- DUP2_ARG2(__lasx_xvaddwl_h_b, hz_out0, vt_out0, hz_out2, vt_out2, out0, out2); +- DUP2_ARG2(__lasx_xvaddwh_h_b, hz_out0, vt_out0, hz_out2, vt_out2, out1, out3); ++ DUP2_ARG2(__lasx_xvaddwl_h_b, hz_out0, vt_out0, hz_out2, vt_out2, ++ out0, out2); ++ DUP2_ARG2(__lasx_xvaddwh_h_b, hz_out0, vt_out0, hz_out2, vt_out2, ++ out1, out3); + tmp0 = __lasx_xvssrarni_b_h(out1, out0, 1); + tmp1 = __lasx_xvssrarni_b_h(out3, out2, 1); + + DUP2_ARG2(__lasx_xvxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, +- out0, out1, out2, out3); ++ out0 = __lasx_xvld(dst, 0); ++ DUP2_ARG2(__lasx_xvldx, dst, stride, dst, stride_2x, out1, out2); ++ out3 = __lasx_xvldx(dst, stride_3x); + out0 = __lasx_xvpermi_q(out0, out2, 0x02); + out1 = __lasx_xvpermi_q(out1, out3, 0x02); + out2 = __lasx_xvilvl_d(out1, out0); +@@ -186,16 +194,16 @@ void avc_luma_hv_qrt_and_aver_dst_16x16_lasx(const uint8_t *src_x, + } + + static av_always_inline void +-avc_luma_hv_qrt_16x16_lasx(const uint8_t *src_x, const uint8_t *src_y, uint8_t *dst, +- int32_t stride) ++avc_luma_hv_qrt_16x16_lasx(uint8_t *src_x, uint8_t *src_y, ++ uint8_t *dst, ptrdiff_t stride) + { + const int16_t filt_const0 = 0xfb01; + const int16_t filt_const1 = 0x1414; + const int16_t filt_const2 = 0x1fb; + uint32_t loop_cnt; +- int32_t stride_2x = stride << 1; +- int32_t stride_3x = stride_2x + stride; +- int32_t stride_4x = stride << 2; ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_3x = stride_2x + stride; ++ ptrdiff_t stride_4x = stride << 2; + __m256i tmp0, tmp1; + __m256i src_hz0, src_hz1, src_hz2, src_hz3, mask0, mask1, mask2; + __m256i src_vt0, src_vt1, src_vt2, src_vt3, src_vt4, src_vt5, src_vt6; +@@ -214,24 +222,26 @@ avc_luma_hv_qrt_16x16_lasx(const uint8_t *src_x, const uint8_t *src_y, uint8_t * + mask0 = __lasx_xvld(luma_mask_arr, 0); + DUP2_ARG2(__lasx_xvld, luma_mask_arr, 32, luma_mask_arr, 64, mask1, mask2); + src_vt0 = __lasx_xvld(src_y, 0); +- DUP4_ARG2(__lasx_xvld, src_y + stride, 0, src_y + stride_2x, 0, src_y + stride_3x, +- 0, src_y + stride_4x, 0, src_vt1, src_vt2, src_vt3, src_vt4); +- src_y += stride_4x + stride; ++ DUP4_ARG2(__lasx_xvldx, src_y, stride, src_y, stride_2x, src_y, stride_3x, ++ src_y, stride_4x, src_vt1, src_vt2, src_vt3, src_vt4); ++ src_y += stride_4x; + + src_vt0 = __lasx_xvxori_b(src_vt0, 128); +- DUP4_ARG2(__lasx_xvxori_b, src_vt1, 128, src_vt2, 128, src_vt3, 128, src_vt4, 128, +- src_vt1, src_vt2, src_vt3, src_vt4); ++ DUP4_ARG2(__lasx_xvxori_b, src_vt1, 128, src_vt2, 128, src_vt3, 128, ++ src_vt4, 128, src_vt1, src_vt2, src_vt3, src_vt4); + + for (loop_cnt = 4; loop_cnt--;) { +- DUP4_ARG2(__lasx_xvld, src_x, 0, src_x + stride, 0, src_x + stride_2x, 0, +- src_x + stride_3x, 0, src_hz0, src_hz1, src_hz2, src_hz3); ++ src_hz0 = __lasx_xvld(src_x, 0); ++ DUP2_ARG2(__lasx_xvldx, src_x, stride, src_x, stride_2x, ++ src_hz1, src_hz2); ++ src_hz3 = __lasx_xvldx(src_x, stride_3x); + src_x += stride_4x; + src_hz0 = __lasx_xvpermi_d(src_hz0, 0x94); + src_hz1 = __lasx_xvpermi_d(src_hz1, 0x94); + src_hz2 = __lasx_xvpermi_d(src_hz2, 0x94); + src_hz3 = __lasx_xvpermi_d(src_hz3, 0x94); +- DUP4_ARG2(__lasx_xvxori_b, src_hz0, 128, src_hz1, 128, src_hz2, 128, src_hz3, +- 128, src_hz0, src_hz1, src_hz2, src_hz3); ++ DUP4_ARG2(__lasx_xvxori_b, src_hz0, 128, src_hz1, 128, src_hz2, 128, ++ src_hz3, 128, src_hz0, src_hz1, src_hz2, src_hz3); + + hz_out0 = AVC_HORZ_FILTER_SH(src_hz0, src_hz0, mask0, mask1, mask2); + hz_out1 = AVC_HORZ_FILTER_SH(src_hz1, src_hz1, mask0, mask1, mask2); +@@ -240,36 +250,45 @@ avc_luma_hv_qrt_16x16_lasx(const uint8_t *src_x, const uint8_t *src_y, uint8_t * + hz_out0 = __lasx_xvssrarni_b_h(hz_out1, hz_out0, 5); + hz_out2 = __lasx_xvssrarni_b_h(hz_out3, hz_out2, 5); + +- DUP4_ARG2(__lasx_xvld, src_y, 0, src_y + stride, 0, src_y + stride_2x, 0, +- src_y + stride_3x, 0, src_vt5, src_vt6, src_vt7, src_vt8); ++ DUP4_ARG2(__lasx_xvldx, src_y, stride, src_y, stride_2x, ++ src_y, stride_3x, src_y, stride_4x, ++ src_vt5, src_vt6, src_vt7, src_vt8); + src_y += stride_4x; + +- DUP4_ARG2(__lasx_xvxori_b, src_vt5, 128, src_vt6, 128, src_vt7, 128, src_vt8, +- 128, src_vt5, src_vt6, src_vt7, src_vt8); +- DUP4_ARG3(__lasx_xvpermi_q, src_vt0, src_vt4, 0x02, src_vt1, src_vt5, 0x02, +- src_vt2, src_vt6, 0x02, src_vt3, src_vt7, 0x02, src_vt0, src_vt1, +- src_vt2, src_vt3); ++ DUP4_ARG2(__lasx_xvxori_b, src_vt5, 128, src_vt6, 128, src_vt7, 128, ++ src_vt8, 128, src_vt5, src_vt6, src_vt7, src_vt8); ++ DUP4_ARG3(__lasx_xvpermi_q, src_vt0, src_vt4, 0x02, src_vt1, src_vt5, ++ 0x02, src_vt2, src_vt6, 0x02, src_vt3, src_vt7, 0x02, ++ src_vt0, src_vt1, src_vt2, src_vt3); + src_vt87_h = __lasx_xvpermi_q(src_vt4, src_vt8, 0x02); +- DUP4_ARG2(__lasx_xvilvh_b, src_vt1, src_vt0, src_vt2, src_vt1, src_vt3, src_vt2, +- src_vt87_h, src_vt3, src_hz0, src_hz1, src_hz2, src_hz3); +- DUP4_ARG2(__lasx_xvilvl_b, src_vt1, src_vt0, src_vt2, src_vt1, src_vt3, src_vt2, +- src_vt87_h, src_vt3, src_vt0, src_vt1, src_vt2, src_vt3); +- DUP4_ARG3(__lasx_xvpermi_q, src_vt0, src_hz0, 0x02, src_vt1, src_hz1, 0x02, +- src_vt2, src_hz2, 0x02, src_vt3, src_hz3, 0x02, src_vt10_h, src_vt21_h, +- src_vt32_h, src_vt43_h); +- DUP4_ARG3(__lasx_xvpermi_q, src_vt0, src_hz0, 0x13, src_vt1, src_hz1, 0x13, +- src_vt2, src_hz2, 0x13, src_vt3, src_hz3, 0x13, src_vt54_h, src_vt65_h, +- src_vt76_h, src_vt87_h); +- +- vt_out0 = AVC_DOT_SH3_SH(src_vt10_h, src_vt32_h, src_vt54_h, filt0, filt1, filt2); +- vt_out1 = AVC_DOT_SH3_SH(src_vt21_h, src_vt43_h, src_vt65_h, filt0, filt1, filt2); +- vt_out2 = AVC_DOT_SH3_SH(src_vt32_h, src_vt54_h, src_vt76_h, filt0, filt1, filt2); +- vt_out3 = AVC_DOT_SH3_SH(src_vt43_h, src_vt65_h, src_vt87_h, filt0, filt1, filt2); ++ DUP4_ARG2(__lasx_xvilvh_b, src_vt1, src_vt0, src_vt2, src_vt1, ++ src_vt3, src_vt2, src_vt87_h, src_vt3, ++ src_hz0, src_hz1, src_hz2, src_hz3); ++ DUP4_ARG2(__lasx_xvilvl_b, src_vt1, src_vt0, src_vt2, src_vt1, ++ src_vt3, src_vt2, src_vt87_h, src_vt3, ++ src_vt0, src_vt1, src_vt2, src_vt3); ++ DUP4_ARG3(__lasx_xvpermi_q, src_vt0, src_hz0, 0x02, src_vt1, ++ src_hz1, 0x02, src_vt2, src_hz2, 0x02, src_vt3, src_hz3, ++ 0x02, src_vt10_h, src_vt21_h, src_vt32_h, src_vt43_h); ++ DUP4_ARG3(__lasx_xvpermi_q, src_vt0, src_hz0, 0x13, src_vt1, ++ src_hz1, 0x13, src_vt2, src_hz2, 0x13, src_vt3, src_hz3, ++ 0x13, src_vt54_h, src_vt65_h, src_vt76_h, src_vt87_h); ++ ++ vt_out0 = AVC_DOT_SH3_SH(src_vt10_h, src_vt32_h, src_vt54_h, ++ filt0, filt1, filt2); ++ vt_out1 = AVC_DOT_SH3_SH(src_vt21_h, src_vt43_h, src_vt65_h, ++ filt0, filt1, filt2); ++ vt_out2 = AVC_DOT_SH3_SH(src_vt32_h, src_vt54_h, src_vt76_h, ++ filt0, filt1, filt2); ++ vt_out3 = AVC_DOT_SH3_SH(src_vt43_h, src_vt65_h, src_vt87_h, ++ filt0, filt1, filt2); + vt_out0 = __lasx_xvssrarni_b_h(vt_out1, vt_out0, 5); + vt_out2 = __lasx_xvssrarni_b_h(vt_out3, vt_out2, 5); + +- DUP2_ARG2(__lasx_xvaddwl_h_b, hz_out0, vt_out0, hz_out2, vt_out2, out0, out2); +- DUP2_ARG2(__lasx_xvaddwh_h_b, hz_out0, vt_out0, hz_out2, vt_out2, out1, out3); ++ DUP2_ARG2(__lasx_xvaddwl_h_b, hz_out0, vt_out0, hz_out2, vt_out2, ++ out0, out2); ++ DUP2_ARG2(__lasx_xvaddwh_h_b, hz_out0, vt_out0, hz_out2, vt_out2, ++ out1, out3); + tmp0 = __lasx_xvssrarni_b_h(out1, out0, 1); + tmp1 = __lasx_xvssrarni_b_h(out3, out2, 1); + +@@ -298,45 +317,39 @@ static av_always_inline void + put_pixels8_8_inline_asm(uint8_t *dst, const uint8_t *src, ptrdiff_t stride) + { + uint64_t tmp[8]; ++ ptrdiff_t stride_2, stride_3, stride_4; + __asm__ volatile ( +- "ld.d %[tmp0], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp1], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp2], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp3], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp4], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp5], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp6], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp7], %[src], 0x0 \n\t" +- +- "st.d %[tmp0], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp1], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp2], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp3], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp4], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp5], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp6], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp7], %[dst], 0x0 \n\t" +- : [tmp0]"=&r"(tmp[0]), [tmp1]"=&r"(tmp[1]), +- [tmp2]"=&r"(tmp[2]), [tmp3]"=&r"(tmp[3]), +- [tmp4]"=&r"(tmp[4]), [tmp5]"=&r"(tmp[5]), +- [tmp6]"=&r"(tmp[6]), [tmp7]"=&r"(tmp[7]), +- [dst]"+&r"(dst), [src]"+&r"(src) +- : [stride]"r"(stride) +- : "memory" ++ "slli.d %[stride_2], %[stride], 1 \n\t" ++ "add.d %[stride_3], %[stride_2], %[stride] \n\t" ++ "slli.d %[stride_4], %[stride_2], 1 \n\t" ++ "ld.d %[tmp0], %[src], 0x0 \n\t" ++ "ldx.d %[tmp1], %[src], %[stride] \n\t" ++ "ldx.d %[tmp2], %[src], %[stride_2] \n\t" ++ "ldx.d %[tmp3], %[src], %[stride_3] \n\t" ++ "add.d %[src], %[src], %[stride_4] \n\t" ++ "ld.d %[tmp4], %[src], 0x0 \n\t" ++ "ldx.d %[tmp5], %[src], %[stride] \n\t" ++ "ldx.d %[tmp6], %[src], %[stride_2] \n\t" ++ "ldx.d %[tmp7], %[src], %[stride_3] \n\t" ++ ++ "st.d %[tmp0], %[dst], 0x0 \n\t" ++ "stx.d %[tmp1], %[dst], %[stride] \n\t" ++ "stx.d %[tmp2], %[dst], %[stride_2] \n\t" ++ "stx.d %[tmp3], %[dst], %[stride_3] \n\t" ++ "add.d %[dst], %[dst], %[stride_4] \n\t" ++ "st.d %[tmp4], %[dst], 0x0 \n\t" ++ "stx.d %[tmp5], %[dst], %[stride] \n\t" ++ "stx.d %[tmp6], %[dst], %[stride_2] \n\t" ++ "stx.d %[tmp7], %[dst], %[stride_3] \n\t" ++ : [tmp0]"=&r"(tmp[0]), [tmp1]"=&r"(tmp[1]), ++ [tmp2]"=&r"(tmp[2]), [tmp3]"=&r"(tmp[3]), ++ [tmp4]"=&r"(tmp[4]), [tmp5]"=&r"(tmp[5]), ++ [tmp6]"=&r"(tmp[6]), [tmp7]"=&r"(tmp[7]), ++ [stride_2]"=&r"(stride_2), [stride_3]"=&r"(stride_3), ++ [stride_4]"=&r"(stride_4), ++ [dst]"+&r"(dst), [src]"+&r"(src) ++ : [stride]"r"(stride) ++ : "memory" + ); + } + +@@ -347,67 +360,61 @@ static av_always_inline void + avg_pixels8_8_lsx(uint8_t *dst, const uint8_t *src, ptrdiff_t stride) + { + uint8_t *tmp = dst; ++ ptrdiff_t stride_2, stride_3, stride_4; + __asm__ volatile ( +- /* h0~h7 */ +- "vld $vr0, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr1, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr2, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr3, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr4, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr5, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr6, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr7, %[src], 0 \n\t" +- +- "vld $vr8, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[stride] \n\t" +- "vld $vr9, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[stride] \n\t" +- "vld $vr10, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[stride] \n\t" +- "vld $vr11, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[stride] \n\t" +- "vld $vr12, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[stride] \n\t" +- "vld $vr13, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[stride] \n\t" +- "vld $vr14, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[stride] \n\t" +- "vld $vr15, %[tmp], 0 \n\t" +- +- "vavgr.bu $vr0, $vr8, $vr0 \n\t" +- "vavgr.bu $vr1, $vr9, $vr1 \n\t" +- "vavgr.bu $vr2, $vr10, $vr2 \n\t" +- "vavgr.bu $vr3, $vr11, $vr3 \n\t" +- "vavgr.bu $vr4, $vr12, $vr4 \n\t" +- "vavgr.bu $vr5, $vr13, $vr5 \n\t" +- "vavgr.bu $vr6, $vr14, $vr6 \n\t" +- "vavgr.bu $vr7, $vr15, $vr7 \n\t" +- +- "vstelm.d $vr0, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vstelm.d $vr1, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vstelm.d $vr2, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vstelm.d $vr3, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vstelm.d $vr4, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vstelm.d $vr5, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vstelm.d $vr6, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vstelm.d $vr7, %[dst], 0, 0 \n\t" +- : [dst]"+&r"(dst), [tmp]"+&r"(tmp), [src]"+&r"(src) +- : [stride]"r"(stride) +- : "memory" ++ /* h0~h7 */ ++ "slli.d %[stride_2], %[stride], 1 \n\t" ++ "add.d %[stride_3], %[stride_2], %[stride] \n\t" ++ "slli.d %[stride_4], %[stride_2], 1 \n\t" ++ "vld $vr0, %[src], 0 \n\t" ++ "vldx $vr1, %[src], %[stride] \n\t" ++ "vldx $vr2, %[src], %[stride_2] \n\t" ++ "vldx $vr3, %[src], %[stride_3] \n\t" ++ "add.d %[src], %[src], %[stride_4] \n\t" ++ "vld $vr4, %[src], 0 \n\t" ++ "vldx $vr5, %[src], %[stride] \n\t" ++ "vldx $vr6, %[src], %[stride_2] \n\t" ++ "vldx $vr7, %[src], %[stride_3] \n\t" ++ ++ "vld $vr8, %[tmp], 0 \n\t" ++ "vldx $vr9, %[tmp], %[stride] \n\t" ++ "vldx $vr10, %[tmp], %[stride_2] \n\t" ++ "vldx $vr11, %[tmp], %[stride_3] \n\t" ++ "add.d %[tmp], %[tmp], %[stride_4] \n\t" ++ "vld $vr12, %[tmp], 0 \n\t" ++ "vldx $vr13, %[tmp], %[stride] \n\t" ++ "vldx $vr14, %[tmp], %[stride_2] \n\t" ++ "vldx $vr15, %[tmp], %[stride_3] \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vstelm.d $vr0, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vstelm.d $vr1, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vstelm.d $vr2, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vstelm.d $vr3, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vstelm.d $vr4, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vstelm.d $vr5, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vstelm.d $vr6, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "vstelm.d $vr7, %[dst], 0, 0 \n\t" ++ : [dst]"+&r"(dst), [tmp]"+&r"(tmp), [src]"+&r"(src), ++ [stride_2]"=&r"(stride_2), [stride_3]"=&r"(stride_3), ++ [stride_4]"=&r"(stride_4) ++ : [stride]"r"(stride) ++ : "memory" + ); + } + +@@ -418,60 +425,60 @@ static av_always_inline void + put_pixels8_l2_8_lsx(uint8_t *dst, const uint8_t *src, const uint8_t *half, + ptrdiff_t dstStride, ptrdiff_t srcStride) + { ++ ptrdiff_t stride_2, stride_3, stride_4; + __asm__ volatile ( +- /* h0~h7 */ +- "vld $vr0, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr1, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr2, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr3, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr4, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr5, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr6, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr7, %[src], 0 \n\t" +- +- "vld $vr8, %[half], 0x00 \n\t" +- "vld $vr9, %[half], 0x08 \n\t" +- "vld $vr10, %[half], 0x10 \n\t" +- "vld $vr11, %[half], 0x18 \n\t" +- "vld $vr12, %[half], 0x20 \n\t" +- "vld $vr13, %[half], 0x28 \n\t" +- "vld $vr14, %[half], 0x30 \n\t" +- "vld $vr15, %[half], 0x38 \n\t" +- +- "vavgr.bu $vr0, $vr8, $vr0 \n\t" +- "vavgr.bu $vr1, $vr9, $vr1 \n\t" +- "vavgr.bu $vr2, $vr10, $vr2 \n\t" +- "vavgr.bu $vr3, $vr11, $vr3 \n\t" +- "vavgr.bu $vr4, $vr12, $vr4 \n\t" +- "vavgr.bu $vr5, $vr13, $vr5 \n\t" +- "vavgr.bu $vr6, $vr14, $vr6 \n\t" +- "vavgr.bu $vr7, $vr15, $vr7 \n\t" +- +- "vstelm.d $vr0, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vstelm.d $vr1, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vstelm.d $vr2, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vstelm.d $vr3, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vstelm.d $vr4, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vstelm.d $vr5, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vstelm.d $vr6, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vstelm.d $vr7, %[dst], 0, 0 \n\t" +- : [dst]"+&r"(dst), [half]"+&r"(half), [src]"+&r"(src) +- : [srcStride]"r"(srcStride), [dstStride]"r"(dstStride) +- : "memory" ++ /* h0~h7 */ ++ "slli.d %[stride_2], %[srcStride], 1 \n\t" ++ "add.d %[stride_3], %[stride_2], %[srcStride] \n\t" ++ "slli.d %[stride_4], %[stride_2], 1 \n\t" ++ "vld $vr0, %[src], 0 \n\t" ++ "vldx $vr1, %[src], %[srcStride] \n\t" ++ "vldx $vr2, %[src], %[stride_2] \n\t" ++ "vldx $vr3, %[src], %[stride_3] \n\t" ++ "add.d %[src], %[src], %[stride_4] \n\t" ++ "vld $vr4, %[src], 0 \n\t" ++ "vldx $vr5, %[src], %[srcStride] \n\t" ++ "vldx $vr6, %[src], %[stride_2] \n\t" ++ "vldx $vr7, %[src], %[stride_3] \n\t" ++ ++ "vld $vr8, %[half], 0x00 \n\t" ++ "vld $vr9, %[half], 0x08 \n\t" ++ "vld $vr10, %[half], 0x10 \n\t" ++ "vld $vr11, %[half], 0x18 \n\t" ++ "vld $vr12, %[half], 0x20 \n\t" ++ "vld $vr13, %[half], 0x28 \n\t" ++ "vld $vr14, %[half], 0x30 \n\t" ++ "vld $vr15, %[half], 0x38 \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vstelm.d $vr0, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr1, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr2, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr3, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr4, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr5, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr6, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr7, %[dst], 0, 0 \n\t" ++ : [dst]"+&r"(dst), [half]"+&r"(half), [src]"+&r"(src), ++ [stride_2]"=&r"(stride_2), [stride_3]"=&r"(stride_3), ++ [stride_4]"=&r"(stride_4) ++ : [srcStride]"r"(srcStride), [dstStride]"r"(dstStride) ++ : "memory" + ); + } + +@@ -483,85 +490,82 @@ avg_pixels8_l2_8_lsx(uint8_t *dst, const uint8_t *src, const uint8_t *half, + ptrdiff_t dstStride, ptrdiff_t srcStride) + { + uint8_t *tmp = dst; ++ ptrdiff_t stride_2, stride_3, stride_4; + __asm__ volatile ( +- /* h0~h7 */ +- "vld $vr0, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr1, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr2, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr3, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr4, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr5, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr6, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr7, %[src], 0 \n\t" +- +- "vld $vr8, %[half], 0x00 \n\t" +- "vld $vr9, %[half], 0x08 \n\t" +- "vld $vr10, %[half], 0x10 \n\t" +- "vld $vr11, %[half], 0x18 \n\t" +- "vld $vr12, %[half], 0x20 \n\t" +- "vld $vr13, %[half], 0x28 \n\t" +- "vld $vr14, %[half], 0x30 \n\t" +- "vld $vr15, %[half], 0x38 \n\t" +- +- "vavgr.bu $vr0, $vr8, $vr0 \n\t" +- "vavgr.bu $vr1, $vr9, $vr1 \n\t" +- "vavgr.bu $vr2, $vr10, $vr2 \n\t" +- "vavgr.bu $vr3, $vr11, $vr3 \n\t" +- "vavgr.bu $vr4, $vr12, $vr4 \n\t" +- "vavgr.bu $vr5, $vr13, $vr5 \n\t" +- "vavgr.bu $vr6, $vr14, $vr6 \n\t" +- "vavgr.bu $vr7, $vr15, $vr7 \n\t" +- +- "vld $vr8, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[dstStride] \n\t" +- "vld $vr9, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[dstStride] \n\t" +- "vld $vr10, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[dstStride] \n\t" +- "vld $vr11, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[dstStride] \n\t" +- "vld $vr12, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[dstStride] \n\t" +- "vld $vr13, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[dstStride] \n\t" +- "vld $vr14, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[dstStride] \n\t" +- "vld $vr15, %[tmp], 0 \n\t" +- +- "vavgr.bu $vr0, $vr8, $vr0 \n\t" +- "vavgr.bu $vr1, $vr9, $vr1 \n\t" +- "vavgr.bu $vr2, $vr10, $vr2 \n\t" +- "vavgr.bu $vr3, $vr11, $vr3 \n\t" +- "vavgr.bu $vr4, $vr12, $vr4 \n\t" +- "vavgr.bu $vr5, $vr13, $vr5 \n\t" +- "vavgr.bu $vr6, $vr14, $vr6 \n\t" +- "vavgr.bu $vr7, $vr15, $vr7 \n\t" +- +- "vstelm.d $vr0, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vstelm.d $vr1, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vstelm.d $vr2, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vstelm.d $vr3, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vstelm.d $vr4, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vstelm.d $vr5, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vstelm.d $vr6, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vstelm.d $vr7, %[dst], 0, 0 \n\t" +- : [dst]"+&r"(dst), [tmp]"+&r"(tmp), [half]"+&r"(half), [src]"+&r"(src) +- : [dstStride]"r"(dstStride), [srcStride]"r"(srcStride) +- : "memory" ++ /* h0~h7 */ ++ "slli.d %[stride_2], %[srcStride], 1 \n\t" ++ "add.d %[stride_3], %[stride_2], %[srcStride] \n\t" ++ "slli.d %[stride_4], %[stride_2], 1 \n\t" ++ "vld $vr0, %[src], 0 \n\t" ++ "vldx $vr1, %[src], %[srcStride] \n\t" ++ "vldx $vr2, %[src], %[stride_2] \n\t" ++ "vldx $vr3, %[src], %[stride_3] \n\t" ++ "add.d %[src], %[src], %[stride_4] \n\t" ++ "vld $vr4, %[src], 0 \n\t" ++ "vldx $vr5, %[src], %[srcStride] \n\t" ++ "vldx $vr6, %[src], %[stride_2] \n\t" ++ "vldx $vr7, %[src], %[stride_3] \n\t" ++ ++ "vld $vr8, %[half], 0x00 \n\t" ++ "vld $vr9, %[half], 0x08 \n\t" ++ "vld $vr10, %[half], 0x10 \n\t" ++ "vld $vr11, %[half], 0x18 \n\t" ++ "vld $vr12, %[half], 0x20 \n\t" ++ "vld $vr13, %[half], 0x28 \n\t" ++ "vld $vr14, %[half], 0x30 \n\t" ++ "vld $vr15, %[half], 0x38 \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "slli.d %[stride_2], %[dstStride], 1 \n\t" ++ "add.d %[stride_3], %[stride_2], %[dstStride] \n\t" ++ "slli.d %[stride_4], %[stride_2], 1 \n\t" ++ "vld $vr8, %[tmp], 0 \n\t" ++ "vldx $vr9, %[tmp], %[dstStride] \n\t" ++ "vldx $vr10, %[tmp], %[stride_2] \n\t" ++ "vldx $vr11, %[tmp], %[stride_3] \n\t" ++ "add.d %[tmp], %[tmp], %[stride_4] \n\t" ++ "vld $vr12, %[tmp], 0 \n\t" ++ "vldx $vr13, %[tmp], %[dstStride] \n\t" ++ "vldx $vr14, %[tmp], %[stride_2] \n\t" ++ "vldx $vr15, %[tmp], %[stride_3] \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vstelm.d $vr0, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr1, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr2, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr3, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr4, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr5, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr6, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr7, %[dst], 0, 0 \n\t" ++ : [dst]"+&r"(dst), [tmp]"+&r"(tmp), [half]"+&r"(half), ++ [src]"+&r"(src), [stride_2]"=&r"(stride_2), ++ [stride_3]"=&r"(stride_3), [stride_4]"=&r"(stride_4) ++ : [dstStride]"r"(dstStride), [srcStride]"r"(srcStride) ++ : "memory" + ); + } + +@@ -569,75 +573,57 @@ avg_pixels8_l2_8_lsx(uint8_t *dst, const uint8_t *src, const uint8_t *half, + static av_always_inline void + put_pixels16_8_lsx(uint8_t *dst, const uint8_t *src, ptrdiff_t stride) + { ++ ptrdiff_t stride_2, stride_3, stride_4; + __asm__ volatile ( +- "vld $vr0, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr1, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr2, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr3, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr4, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr5, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr6, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr7, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- +- "vst $vr0, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr1, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr2, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr3, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr4, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr5, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr6, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr7, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- +- "vld $vr0, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr1, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr2, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr3, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr4, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr5, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr6, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr7, %[src], 0 \n\t" +- +- "vst $vr0, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr1, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr2, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr3, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr4, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr5, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr6, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr7, %[dst], 0 \n\t" +- : [dst]"+&r"(dst), [src]"+&r"(src) +- : [stride]"r"(stride) +- : "memory" ++ "slli.d %[stride_2], %[stride], 1 \n\t" ++ "add.d %[stride_3], %[stride_2], %[stride] \n\t" ++ "slli.d %[stride_4], %[stride_2], 1 \n\t" ++ "vld $vr0, %[src], 0 \n\t" ++ "vldx $vr1, %[src], %[stride] \n\t" ++ "vldx $vr2, %[src], %[stride_2] \n\t" ++ "vldx $vr3, %[src], %[stride_3] \n\t" ++ "add.d %[src], %[src], %[stride_4] \n\t" ++ "vld $vr4, %[src], 0 \n\t" ++ "vldx $vr5, %[src], %[stride] \n\t" ++ "vldx $vr6, %[src], %[stride_2] \n\t" ++ "vldx $vr7, %[src], %[stride_3] \n\t" ++ "add.d %[src], %[src], %[stride_4] \n\t" ++ ++ "vst $vr0, %[dst], 0 \n\t" ++ "vstx $vr1, %[dst], %[stride] \n\t" ++ "vstx $vr2, %[dst], %[stride_2] \n\t" ++ "vstx $vr3, %[dst], %[stride_3] \n\t" ++ "add.d %[dst], %[dst], %[stride_4] \n\t" ++ "vst $vr4, %[dst], 0 \n\t" ++ "vstx $vr5, %[dst], %[stride] \n\t" ++ "vstx $vr6, %[dst], %[stride_2] \n\t" ++ "vstx $vr7, %[dst], %[stride_3] \n\t" ++ "add.d %[dst], %[dst], %[stride_4] \n\t" ++ ++ "vld $vr0, %[src], 0 \n\t" ++ "vldx $vr1, %[src], %[stride] \n\t" ++ "vldx $vr2, %[src], %[stride_2] \n\t" ++ "vldx $vr3, %[src], %[stride_3] \n\t" ++ "add.d %[src], %[src], %[stride_4] \n\t" ++ "vld $vr4, %[src], 0 \n\t" ++ "vldx $vr5, %[src], %[stride] \n\t" ++ "vldx $vr6, %[src], %[stride_2] \n\t" ++ "vldx $vr7, %[src], %[stride_3] \n\t" ++ ++ "vst $vr0, %[dst], 0 \n\t" ++ "vstx $vr1, %[dst], %[stride] \n\t" ++ "vstx $vr2, %[dst], %[stride_2] \n\t" ++ "vstx $vr3, %[dst], %[stride_3] \n\t" ++ "add.d %[dst], %[dst], %[stride_4] \n\t" ++ "vst $vr4, %[dst], 0 \n\t" ++ "vstx $vr5, %[dst], %[stride] \n\t" ++ "vstx $vr6, %[dst], %[stride_2] \n\t" ++ "vstx $vr7, %[dst], %[stride_3] \n\t" ++ : [dst]"+&r"(dst), [src]"+&r"(src), ++ [stride_2]"=&r"(stride_2), [stride_3]"=&r"(stride_3), ++ [stride_4]"=&r"(stride_4) ++ : [stride]"r"(stride) ++ : "memory" + ); + } + +@@ -648,128 +634,98 @@ static av_always_inline void + avg_pixels16_8_lsx(uint8_t *dst, const uint8_t *src, ptrdiff_t stride) + { + uint8_t *tmp = dst; ++ ptrdiff_t stride_2, stride_3, stride_4; + __asm__ volatile ( +- /* h0~h7 */ +- "vld $vr0, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr1, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr2, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr3, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr4, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr5, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr6, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr7, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- +- "vld $vr8, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[stride] \n\t" +- "vld $vr9, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[stride] \n\t" +- "vld $vr10, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[stride] \n\t" +- "vld $vr11, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[stride] \n\t" +- "vld $vr12, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[stride] \n\t" +- "vld $vr13, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[stride] \n\t" +- "vld $vr14, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[stride] \n\t" +- "vld $vr15, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[stride] \n\t" +- +- "vavgr.bu $vr0, $vr8, $vr0 \n\t" +- "vavgr.bu $vr1, $vr9, $vr1 \n\t" +- "vavgr.bu $vr2, $vr10, $vr2 \n\t" +- "vavgr.bu $vr3, $vr11, $vr3 \n\t" +- "vavgr.bu $vr4, $vr12, $vr4 \n\t" +- "vavgr.bu $vr5, $vr13, $vr5 \n\t" +- "vavgr.bu $vr6, $vr14, $vr6 \n\t" +- "vavgr.bu $vr7, $vr15, $vr7 \n\t" +- +- "vst $vr0, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr1, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr2, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr3, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr4, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr5, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr6, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr7, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- +- /* h8~h15 */ +- "vld $vr0, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr1, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr2, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr3, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr4, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr5, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr6, %[src], 0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr7, %[src], 0 \n\t" +- +- "vld $vr8, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[stride] \n\t" +- "vld $vr9, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[stride] \n\t" +- "vld $vr10, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[stride] \n\t" +- "vld $vr11, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[stride] \n\t" +- "vld $vr12, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[stride] \n\t" +- "vld $vr13, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[stride] \n\t" +- "vld $vr14, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[stride] \n\t" +- "vld $vr15, %[tmp], 0 \n\t" +- +- "vavgr.bu $vr0, $vr8, $vr0 \n\t" +- "vavgr.bu $vr1, $vr9, $vr1 \n\t" +- "vavgr.bu $vr2, $vr10, $vr2 \n\t" +- "vavgr.bu $vr3, $vr11, $vr3 \n\t" +- "vavgr.bu $vr4, $vr12, $vr4 \n\t" +- "vavgr.bu $vr5, $vr13, $vr5 \n\t" +- "vavgr.bu $vr6, $vr14, $vr6 \n\t" +- "vavgr.bu $vr7, $vr15, $vr7 \n\t" +- +- "vst $vr0, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr1, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr2, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr3, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr4, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr5, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr6, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr7, %[dst], 0 \n\t" +- : [dst]"+&r"(dst), [tmp]"+&r"(tmp), [src]"+&r"(src) +- : [stride]"r"(stride) +- : "memory" ++ /* h0~h7 */ ++ "slli.d %[stride_2], %[stride], 1 \n\t" ++ "add.d %[stride_3], %[stride_2], %[stride] \n\t" ++ "slli.d %[stride_4], %[stride_2], 1 \n\t" ++ "vld $vr0, %[src], 0 \n\t" ++ "vldx $vr1, %[src], %[stride] \n\t" ++ "vldx $vr2, %[src], %[stride_2] \n\t" ++ "vldx $vr3, %[src], %[stride_3] \n\t" ++ "add.d %[src], %[src], %[stride_4] \n\t" ++ "vld $vr4, %[src], 0 \n\t" ++ "vldx $vr5, %[src], %[stride] \n\t" ++ "vldx $vr6, %[src], %[stride_2] \n\t" ++ "vldx $vr7, %[src], %[stride_3] \n\t" ++ "add.d %[src], %[src], %[stride_4] \n\t" ++ ++ "vld $vr8, %[tmp], 0 \n\t" ++ "vldx $vr9, %[tmp], %[stride] \n\t" ++ "vldx $vr10, %[tmp], %[stride_2] \n\t" ++ "vldx $vr11, %[tmp], %[stride_3] \n\t" ++ "add.d %[tmp], %[tmp], %[stride_4] \n\t" ++ "vld $vr12, %[tmp], 0 \n\t" ++ "vldx $vr13, %[tmp], %[stride] \n\t" ++ "vldx $vr14, %[tmp], %[stride_2] \n\t" ++ "vldx $vr15, %[tmp], %[stride_3] \n\t" ++ "add.d %[tmp], %[tmp], %[stride_4] \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vst $vr0, %[dst], 0 \n\t" ++ "vstx $vr1, %[dst], %[stride] \n\t" ++ "vstx $vr2, %[dst], %[stride_2] \n\t" ++ "vstx $vr3, %[dst], %[stride_3] \n\t" ++ "add.d %[dst], %[dst], %[stride_4] \n\t" ++ "vst $vr4, %[dst], 0 \n\t" ++ "vstx $vr5, %[dst], %[stride] \n\t" ++ "vstx $vr6, %[dst], %[stride_2] \n\t" ++ "vstx $vr7, %[dst], %[stride_3] \n\t" ++ "add.d %[dst], %[dst], %[stride_4] \n\t" ++ ++ /* h8~h15 */ ++ "vld $vr0, %[src], 0 \n\t" ++ "vldx $vr1, %[src], %[stride] \n\t" ++ "vldx $vr2, %[src], %[stride_2] \n\t" ++ "vldx $vr3, %[src], %[stride_3] \n\t" ++ "add.d %[src], %[src], %[stride_4] \n\t" ++ "vld $vr4, %[src], 0 \n\t" ++ "vldx $vr5, %[src], %[stride] \n\t" ++ "vldx $vr6, %[src], %[stride_2] \n\t" ++ "vldx $vr7, %[src], %[stride_3] \n\t" ++ ++ "vld $vr8, %[tmp], 0 \n\t" ++ "vldx $vr9, %[tmp], %[stride] \n\t" ++ "vldx $vr10, %[tmp], %[stride_2] \n\t" ++ "vldx $vr11, %[tmp], %[stride_3] \n\t" ++ "add.d %[tmp], %[tmp], %[stride_4] \n\t" ++ "vld $vr12, %[tmp], 0 \n\t" ++ "vldx $vr13, %[tmp], %[stride] \n\t" ++ "vldx $vr14, %[tmp], %[stride_2] \n\t" ++ "vldx $vr15, %[tmp], %[stride_3] \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vst $vr0, %[dst], 0 \n\t" ++ "vstx $vr1, %[dst], %[stride] \n\t" ++ "vstx $vr2, %[dst], %[stride_2] \n\t" ++ "vstx $vr3, %[dst], %[stride_3] \n\t" ++ "add.d %[dst], %[dst], %[stride_4] \n\t" ++ "vst $vr4, %[dst], 0 \n\t" ++ "vstx $vr5, %[dst], %[stride] \n\t" ++ "vstx $vr6, %[dst], %[stride_2] \n\t" ++ "vstx $vr7, %[dst], %[stride_3] \n\t" ++ : [dst]"+&r"(dst), [tmp]"+&r"(tmp), [src]"+&r"(src), ++ [stride_2]"=&r"(stride_2), [stride_3]"=&r"(stride_3), ++ [stride_4]"=&r"(stride_4) ++ : [stride]"r"(stride) ++ : "memory" + ); + } + +@@ -780,113 +736,100 @@ static av_always_inline void + put_pixels16_l2_8_lsx(uint8_t *dst, const uint8_t *src, uint8_t *half, + ptrdiff_t dstStride, ptrdiff_t srcStride) + { ++ ptrdiff_t stride_2, stride_3, stride_4; ++ ptrdiff_t dstride_2, dstride_3, dstride_4; + __asm__ volatile ( +- /* h0~h7 */ +- "vld $vr0, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr1, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr2, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr3, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr4, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr5, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr6, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr7, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- +- "vld $vr8, %[half], 0x00 \n\t" +- "vld $vr9, %[half], 0x10 \n\t" +- "vld $vr10, %[half], 0x20 \n\t" +- "vld $vr11, %[half], 0x30 \n\t" +- "vld $vr12, %[half], 0x40 \n\t" +- "vld $vr13, %[half], 0x50 \n\t" +- "vld $vr14, %[half], 0x60 \n\t" +- "vld $vr15, %[half], 0x70 \n\t" +- +- "vavgr.bu $vr0, $vr8, $vr0 \n\t" +- "vavgr.bu $vr1, $vr9, $vr1 \n\t" +- "vavgr.bu $vr2, $vr10, $vr2 \n\t" +- "vavgr.bu $vr3, $vr11, $vr3 \n\t" +- "vavgr.bu $vr4, $vr12, $vr4 \n\t" +- "vavgr.bu $vr5, $vr13, $vr5 \n\t" +- "vavgr.bu $vr6, $vr14, $vr6 \n\t" +- "vavgr.bu $vr7, $vr15, $vr7 \n\t" +- +- "vst $vr0, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr1, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr2, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr3, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr4, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr5, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr6, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr7, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- +- /* h8~h15 */ +- "vld $vr0, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr1, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr2, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr3, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr4, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr5, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr6, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr7, %[src], 0 \n\t" +- +- "vld $vr8, %[half], 0x80 \n\t" +- "vld $vr9, %[half], 0x90 \n\t" +- "vld $vr10, %[half], 0xa0 \n\t" +- "vld $vr11, %[half], 0xb0 \n\t" +- "vld $vr12, %[half], 0xc0 \n\t" +- "vld $vr13, %[half], 0xd0 \n\t" +- "vld $vr14, %[half], 0xe0 \n\t" +- "vld $vr15, %[half], 0xf0 \n\t" +- +- "vavgr.bu $vr0, $vr8, $vr0 \n\t" +- "vavgr.bu $vr1, $vr9, $vr1 \n\t" +- "vavgr.bu $vr2, $vr10, $vr2 \n\t" +- "vavgr.bu $vr3, $vr11, $vr3 \n\t" +- "vavgr.bu $vr4, $vr12, $vr4 \n\t" +- "vavgr.bu $vr5, $vr13, $vr5 \n\t" +- "vavgr.bu $vr6, $vr14, $vr6 \n\t" +- "vavgr.bu $vr7, $vr15, $vr7 \n\t" +- +- "vst $vr0, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr1, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr2, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr3, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr4, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr5, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr6, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr7, %[dst], 0 \n\t" +- : [dst]"+&r"(dst), [half]"+&r"(half), [src]"+&r"(src) +- : [dstStride]"r"(dstStride), [srcStride]"r"(srcStride) +- : "memory" ++ "slli.d %[stride_2], %[srcStride], 1 \n\t" ++ "add.d %[stride_3], %[stride_2], %[srcStride] \n\t" ++ "slli.d %[stride_4], %[stride_2], 1 \n\t" ++ "slli.d %[dstride_2], %[dstStride], 1 \n\t" ++ "add.d %[dstride_3], %[dstride_2], %[dstStride] \n\t" ++ "slli.d %[dstride_4], %[dstride_2], 1 \n\t" ++ /* h0~h7 */ ++ "vld $vr0, %[src], 0 \n\t" ++ "vldx $vr1, %[src], %[srcStride] \n\t" ++ "vldx $vr2, %[src], %[stride_2] \n\t" ++ "vldx $vr3, %[src], %[stride_3] \n\t" ++ "add.d %[src], %[src], %[stride_4] \n\t" ++ "vld $vr4, %[src], 0 \n\t" ++ "vldx $vr5, %[src], %[srcStride] \n\t" ++ "vldx $vr6, %[src], %[stride_2] \n\t" ++ "vldx $vr7, %[src], %[stride_3] \n\t" ++ "add.d %[src], %[src], %[stride_4] \n\t" ++ ++ "vld $vr8, %[half], 0x00 \n\t" ++ "vld $vr9, %[half], 0x10 \n\t" ++ "vld $vr10, %[half], 0x20 \n\t" ++ "vld $vr11, %[half], 0x30 \n\t" ++ "vld $vr12, %[half], 0x40 \n\t" ++ "vld $vr13, %[half], 0x50 \n\t" ++ "vld $vr14, %[half], 0x60 \n\t" ++ "vld $vr15, %[half], 0x70 \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vst $vr0, %[dst], 0 \n\t" ++ "vstx $vr1, %[dst], %[dstStride] \n\t" ++ "vstx $vr2, %[dst], %[dstride_2] \n\t" ++ "vstx $vr3, %[dst], %[dstride_3] \n\t" ++ "add.d %[dst], %[dst], %[dstride_4] \n\t" ++ "vst $vr4, %[dst], 0 \n\t" ++ "vstx $vr5, %[dst], %[dstStride] \n\t" ++ "vstx $vr6, %[dst], %[dstride_2] \n\t" ++ "vstx $vr7, %[dst], %[dstride_3] \n\t" ++ "add.d %[dst], %[dst], %[dstride_4] \n\t" ++ ++ /* h8~h15 */ ++ "vld $vr0, %[src], 0 \n\t" ++ "vldx $vr1, %[src], %[srcStride] \n\t" ++ "vldx $vr2, %[src], %[stride_2] \n\t" ++ "vldx $vr3, %[src], %[stride_3] \n\t" ++ "add.d %[src], %[src], %[stride_4] \n\t" ++ "vld $vr4, %[src], 0 \n\t" ++ "vldx $vr5, %[src], %[srcStride] \n\t" ++ "vldx $vr6, %[src], %[stride_2] \n\t" ++ "vldx $vr7, %[src], %[stride_3] \n\t" ++ ++ "vld $vr8, %[half], 0x80 \n\t" ++ "vld $vr9, %[half], 0x90 \n\t" ++ "vld $vr10, %[half], 0xa0 \n\t" ++ "vld $vr11, %[half], 0xb0 \n\t" ++ "vld $vr12, %[half], 0xc0 \n\t" ++ "vld $vr13, %[half], 0xd0 \n\t" ++ "vld $vr14, %[half], 0xe0 \n\t" ++ "vld $vr15, %[half], 0xf0 \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vst $vr0, %[dst], 0 \n\t" ++ "vstx $vr1, %[dst], %[dstStride] \n\t" ++ "vstx $vr2, %[dst], %[dstride_2] \n\t" ++ "vstx $vr3, %[dst], %[dstride_3] \n\t" ++ "add.d %[dst], %[dst], %[dstride_4] \n\t" ++ "vst $vr4, %[dst], 0 \n\t" ++ "vstx $vr5, %[dst], %[dstStride] \n\t" ++ "vstx $vr6, %[dst], %[dstride_2] \n\t" ++ "vstx $vr7, %[dst], %[dstride_3] \n\t" ++ : [dst]"+&r"(dst), [half]"+&r"(half), [src]"+&r"(src), ++ [stride_2]"=&r"(stride_2), [stride_3]"=&r"(stride_3), ++ [stride_4]"=&r"(stride_4), [dstride_2]"=&r"(dstride_2), ++ [dstride_3]"=&r"(dstride_3), [dstride_4]"=&r"(dstride_4) ++ : [dstStride]"r"(dstStride), [srcStride]"r"(srcStride) ++ : "memory" + ); + } + +@@ -898,164 +841,139 @@ avg_pixels16_l2_8_lsx(uint8_t *dst, const uint8_t *src, uint8_t *half, + ptrdiff_t dstStride, ptrdiff_t srcStride) + { + uint8_t *tmp = dst; ++ ptrdiff_t stride_2, stride_3, stride_4; ++ ptrdiff_t dstride_2, dstride_3, dstride_4; + __asm__ volatile ( +- /* h0~h7 */ +- "vld $vr0, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr1, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr2, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr3, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr4, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr5, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr6, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr7, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- +- "vld $vr8, %[half], 0x00 \n\t" +- "vld $vr9, %[half], 0x10 \n\t" +- "vld $vr10, %[half], 0x20 \n\t" +- "vld $vr11, %[half], 0x30 \n\t" +- "vld $vr12, %[half], 0x40 \n\t" +- "vld $vr13, %[half], 0x50 \n\t" +- "vld $vr14, %[half], 0x60 \n\t" +- "vld $vr15, %[half], 0x70 \n\t" +- +- "vavgr.bu $vr0, $vr8, $vr0 \n\t" +- "vavgr.bu $vr1, $vr9, $vr1 \n\t" +- "vavgr.bu $vr2, $vr10, $vr2 \n\t" +- "vavgr.bu $vr3, $vr11, $vr3 \n\t" +- "vavgr.bu $vr4, $vr12, $vr4 \n\t" +- "vavgr.bu $vr5, $vr13, $vr5 \n\t" +- "vavgr.bu $vr6, $vr14, $vr6 \n\t" +- "vavgr.bu $vr7, $vr15, $vr7 \n\t" +- +- "vld $vr8, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[dstStride] \n\t" +- "vld $vr9, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[dstStride] \n\t" +- "vld $vr10, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[dstStride] \n\t" +- "vld $vr11, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[dstStride] \n\t" +- "vld $vr12, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[dstStride] \n\t" +- "vld $vr13, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[dstStride] \n\t" +- "vld $vr14, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[dstStride] \n\t" +- "vld $vr15, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[dstStride] \n\t" +- +- "vavgr.bu $vr0, $vr8, $vr0 \n\t" +- "vavgr.bu $vr1, $vr9, $vr1 \n\t" +- "vavgr.bu $vr2, $vr10, $vr2 \n\t" +- "vavgr.bu $vr3, $vr11, $vr3 \n\t" +- "vavgr.bu $vr4, $vr12, $vr4 \n\t" +- "vavgr.bu $vr5, $vr13, $vr5 \n\t" +- "vavgr.bu $vr6, $vr14, $vr6 \n\t" +- "vavgr.bu $vr7, $vr15, $vr7 \n\t" +- +- "vst $vr0, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr1, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr2, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr3, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr4, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr5, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr6, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr7, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- +- /* h8~h15 */ +- "vld $vr0, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr1, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr2, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr3, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr4, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr5, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr6, %[src], 0 \n\t" +- "add.d %[src], %[src], %[srcStride] \n\t" +- "vld $vr7, %[src], 0 \n\t" +- +- "vld $vr8, %[half], 0x80 \n\t" +- "vld $vr9, %[half], 0x90 \n\t" +- "vld $vr10, %[half], 0xa0 \n\t" +- "vld $vr11, %[half], 0xb0 \n\t" +- "vld $vr12, %[half], 0xc0 \n\t" +- "vld $vr13, %[half], 0xd0 \n\t" +- "vld $vr14, %[half], 0xe0 \n\t" +- "vld $vr15, %[half], 0xf0 \n\t" +- +- "vavgr.bu $vr0, $vr8, $vr0 \n\t" +- "vavgr.bu $vr1, $vr9, $vr1 \n\t" +- "vavgr.bu $vr2, $vr10, $vr2 \n\t" +- "vavgr.bu $vr3, $vr11, $vr3 \n\t" +- "vavgr.bu $vr4, $vr12, $vr4 \n\t" +- "vavgr.bu $vr5, $vr13, $vr5 \n\t" +- "vavgr.bu $vr6, $vr14, $vr6 \n\t" +- "vavgr.bu $vr7, $vr15, $vr7 \n\t" +- +- "vld $vr8, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[dstStride] \n\t" +- "vld $vr9, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[dstStride] \n\t" +- "vld $vr10, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[dstStride] \n\t" +- "vld $vr11, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[dstStride] \n\t" +- "vld $vr12, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[dstStride] \n\t" +- "vld $vr13, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[dstStride] \n\t" +- "vld $vr14, %[tmp], 0 \n\t" +- "add.d %[tmp], %[tmp], %[dstStride] \n\t" +- "vld $vr15, %[tmp], 0 \n\t" +- +- "vavgr.bu $vr0, $vr8, $vr0 \n\t" +- "vavgr.bu $vr1, $vr9, $vr1 \n\t" +- "vavgr.bu $vr2, $vr10, $vr2 \n\t" +- "vavgr.bu $vr3, $vr11, $vr3 \n\t" +- "vavgr.bu $vr4, $vr12, $vr4 \n\t" +- "vavgr.bu $vr5, $vr13, $vr5 \n\t" +- "vavgr.bu $vr6, $vr14, $vr6 \n\t" +- "vavgr.bu $vr7, $vr15, $vr7 \n\t" +- +- "vst $vr0, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr1, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr2, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr3, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr4, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr5, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr6, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr7, %[dst], 0 \n\t" +- : [dst]"+&r"(dst), [tmp]"+&r"(tmp), [half]"+&r"(half), [src]"+&r"(src) +- : [dstStride]"r"(dstStride), [srcStride]"r"(srcStride) +- : "memory" ++ "slli.d %[stride_2], %[srcStride], 1 \n\t" ++ "add.d %[stride_3], %[stride_2], %[srcStride] \n\t" ++ "slli.d %[stride_4], %[stride_2], 1 \n\t" ++ "slli.d %[dstride_2], %[dstStride], 1 \n\t" ++ "add.d %[dstride_3], %[dstride_2], %[dstStride] \n\t" ++ "slli.d %[dstride_4], %[dstride_2], 1 \n\t" ++ /* h0~h7 */ ++ "vld $vr0, %[src], 0 \n\t" ++ "vldx $vr1, %[src], %[srcStride] \n\t" ++ "vldx $vr2, %[src], %[stride_2] \n\t" ++ "vldx $vr3, %[src], %[stride_3] \n\t" ++ "add.d %[src], %[src], %[stride_4] \n\t" ++ "vld $vr4, %[src], 0 \n\t" ++ "vldx $vr5, %[src], %[srcStride] \n\t" ++ "vldx $vr6, %[src], %[stride_2] \n\t" ++ "vldx $vr7, %[src], %[stride_3] \n\t" ++ "add.d %[src], %[src], %[stride_4] \n\t" ++ ++ "vld $vr8, %[half], 0x00 \n\t" ++ "vld $vr9, %[half], 0x10 \n\t" ++ "vld $vr10, %[half], 0x20 \n\t" ++ "vld $vr11, %[half], 0x30 \n\t" ++ "vld $vr12, %[half], 0x40 \n\t" ++ "vld $vr13, %[half], 0x50 \n\t" ++ "vld $vr14, %[half], 0x60 \n\t" ++ "vld $vr15, %[half], 0x70 \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vld $vr8, %[tmp], 0 \n\t" ++ "vldx $vr9, %[tmp], %[dstStride] \n\t" ++ "vldx $vr10, %[tmp], %[dstride_2] \n\t" ++ "vldx $vr11, %[tmp], %[dstride_3] \n\t" ++ "add.d %[tmp], %[tmp], %[dstride_4] \n\t" ++ "vld $vr12, %[tmp], 0 \n\t" ++ "vldx $vr13, %[tmp], %[dstStride] \n\t" ++ "vldx $vr14, %[tmp], %[dstride_2] \n\t" ++ "vldx $vr15, %[tmp], %[dstride_3] \n\t" ++ "add.d %[tmp], %[tmp], %[dstride_4] \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vst $vr0, %[dst], 0 \n\t" ++ "vstx $vr1, %[dst], %[dstStride] \n\t" ++ "vstx $vr2, %[dst], %[dstride_2] \n\t" ++ "vstx $vr3, %[dst], %[dstride_3] \n\t" ++ "add.d %[dst], %[dst], %[dstride_4] \n\t" ++ "vst $vr4, %[dst], 0 \n\t" ++ "vstx $vr5, %[dst], %[dstStride] \n\t" ++ "vstx $vr6, %[dst], %[dstride_2] \n\t" ++ "vstx $vr7, %[dst], %[dstride_3] \n\t" ++ "add.d %[dst], %[dst], %[dstride_4] \n\t" ++ ++ /* h8~h15 */ ++ "vld $vr0, %[src], 0 \n\t" ++ "vldx $vr1, %[src], %[srcStride] \n\t" ++ "vldx $vr2, %[src], %[stride_2] \n\t" ++ "vldx $vr3, %[src], %[stride_3] \n\t" ++ "add.d %[src], %[src], %[stride_4] \n\t" ++ "vld $vr4, %[src], 0 \n\t" ++ "vldx $vr5, %[src], %[srcStride] \n\t" ++ "vldx $vr6, %[src], %[stride_2] \n\t" ++ "vldx $vr7, %[src], %[stride_3] \n\t" ++ ++ "vld $vr8, %[half], 0x80 \n\t" ++ "vld $vr9, %[half], 0x90 \n\t" ++ "vld $vr10, %[half], 0xa0 \n\t" ++ "vld $vr11, %[half], 0xb0 \n\t" ++ "vld $vr12, %[half], 0xc0 \n\t" ++ "vld $vr13, %[half], 0xd0 \n\t" ++ "vld $vr14, %[half], 0xe0 \n\t" ++ "vld $vr15, %[half], 0xf0 \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vld $vr8, %[tmp], 0 \n\t" ++ "vldx $vr9, %[tmp], %[dstStride] \n\t" ++ "vldx $vr10, %[tmp], %[dstride_2] \n\t" ++ "vldx $vr11, %[tmp], %[dstride_3] \n\t" ++ "add.d %[tmp], %[tmp], %[dstride_4] \n\t" ++ "vld $vr12, %[tmp], 0 \n\t" ++ "vldx $vr13, %[tmp], %[dstStride] \n\t" ++ "vldx $vr14, %[tmp], %[dstride_2] \n\t" ++ "vldx $vr15, %[tmp], %[dstride_3] \n\t" ++ ++ "vavgr.bu $vr0, $vr8, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr9, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr10, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr11, $vr3 \n\t" ++ "vavgr.bu $vr4, $vr12, $vr4 \n\t" ++ "vavgr.bu $vr5, $vr13, $vr5 \n\t" ++ "vavgr.bu $vr6, $vr14, $vr6 \n\t" ++ "vavgr.bu $vr7, $vr15, $vr7 \n\t" ++ ++ "vst $vr0, %[dst], 0 \n\t" ++ "vstx $vr1, %[dst], %[dstStride] \n\t" ++ "vstx $vr2, %[dst], %[dstride_2] \n\t" ++ "vstx $vr3, %[dst], %[dstride_3] \n\t" ++ "add.d %[dst], %[dst], %[dstride_4] \n\t" ++ "vst $vr4, %[dst], 0 \n\t" ++ "vstx $vr5, %[dst], %[dstStride] \n\t" ++ "vstx $vr6, %[dst], %[dstride_2] \n\t" ++ "vstx $vr7, %[dst], %[dstride_3] \n\t" ++ : [dst]"+&r"(dst), [tmp]"+&r"(tmp), [half]"+&r"(half), [src]"+&r"(src), ++ [stride_2]"=&r"(stride_2), [stride_3]"=&r"(stride_3), ++ [stride_4]"=&r"(stride_4), [dstride_2]"=&r"(dstride_2), ++ [dstride_3]"=&r"(dstride_3), [dstride_4]"=&r"(dstride_4) ++ : [dstStride]"r"(dstStride), [srcStride]"r"(srcStride) ++ : "memory" + ); + } + +@@ -1086,21 +1004,15 @@ put_h264_qpel8_h_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, + int dstStride_2x = dstStride << 1; + __m256i src00, src01, src02, src03, src04, src05, src10; + __m256i out0, out1, out2, out3; +- __m256i zero = {0}; +- __m256i h_20 = {20}; +- __m256i h_5 = {5}; +- __m256i h_16 = {16}; ++ __m256i h_20 = __lasx_xvldi(0x414); ++ __m256i h_5 = __lasx_xvldi(0x405); ++ __m256i h_16 = __lasx_xvldi(0x410); + __m256i mask1 = {0x0807060504030201, 0x0, 0x0807060504030201, 0x0}; + __m256i mask2 = {0x0908070605040302, 0x0, 0x0908070605040302, 0x0}; + __m256i mask3 = {0x0a09080706050403, 0x0, 0x0a09080706050403, 0x0}; + __m256i mask4 = {0x0b0a090807060504, 0x0, 0x0b0a090807060504, 0x0}; + __m256i mask5 = {0x0c0b0a0908070605, 0x0, 0x0c0b0a0908070605, 0x0}; + +- zero = __lasx_xvreplve0_h(zero); +- h_20 = __lasx_xvreplve0_h(h_20); +- h_5 = __lasx_xvreplve0_h(h_5); +- h_16 = __lasx_xvreplve0_h(h_16); +- + QPEL8_H_LOWPASS(out0) + QPEL8_H_LOWPASS(out1) + QPEL8_H_LOWPASS(out2) +@@ -1138,7 +1050,7 @@ put_h264_qpel8_h_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, + } + + static av_always_inline void +-put_h264_qpel8_v_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, ++put_h264_qpel8_v_lowpass_lasx(uint8_t *dst, uint8_t *src, int dstStride, + int srcStride) + { + int srcStride_2x = srcStride << 1; +@@ -1148,26 +1060,20 @@ put_h264_qpel8_v_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, + __m256i src00, src01, src02, src03, src04, src05, src06; + __m256i src07, src08, src09, src10, src11, src12; + __m256i tmp00, tmp01, tmp02, tmp03, tmp04, tmp05; +- __m256i zero = {0}; +- __m256i h_20 = {20}; +- __m256i h_5 = {5}; +- __m256i h_16 = {16}; +- +- zero = __lasx_xvreplve0_h(zero); +- h_20 = __lasx_xvreplve0_h(h_20); +- h_5 = __lasx_xvreplve0_h(h_5); +- h_16 = __lasx_xvreplve0_h(h_16); +- +- DUP2_ARG2(__lasx_xvld, src - srcStride_2x, 0, src - srcStride, 0, src00, src01); +- DUP4_ARG2(__lasx_xvld, src, 0, src + srcStride, 0, src + srcStride_2x, 0, +- src + srcStride_3x, 0, src02, src03, src04, src05); ++ __m256i h_20 = __lasx_xvldi(0x414); ++ __m256i h_5 = __lasx_xvldi(0x405); ++ __m256i h_16 = __lasx_xvldi(0x410); ++ ++ DUP2_ARG2(__lasx_xvld, src - srcStride_2x, 0, src - srcStride, 0, ++ src00, src01); ++ src02 = __lasx_xvld(src, 0); ++ DUP4_ARG2(__lasx_xvldx, src, srcStride, src, srcStride_2x, src, ++ srcStride_3x, src, srcStride_4x, src03, src04, src05, src06); + src += srcStride_4x; +- DUP4_ARG2(__lasx_xvld, src, 0, src + srcStride, 0, src + srcStride_2x, 0, +- src + srcStride_3x, 0, src06, src07, src08, src09); ++ DUP4_ARG2(__lasx_xvldx, src, srcStride, src, srcStride_2x, src, ++ srcStride_3x, src, srcStride_4x, src07, src08, src09, src10); + src += srcStride_4x; +- DUP2_ARG2(__lasx_xvld, src, 0, src + srcStride, 0, src10, src11); +- src += srcStride_2x; +- src12 = __lasx_xvld(src, 0); ++ DUP2_ARG2(__lasx_xvldx, src, srcStride, src, srcStride_2x, src11, src12); + + QPEL8_V_LOWPASS(src00, src01, src02, src03, src04, src05, src06, + tmp00, tmp01, tmp02, tmp03, tmp04, tmp05); +@@ -1191,7 +1097,7 @@ put_h264_qpel8_v_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, + } + + static av_always_inline void +-avg_h264_qpel8_v_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, ++avg_h264_qpel8_v_lowpass_lasx(uint8_t *dst, uint8_t *src, int dstStride, + int srcStride) + { + int srcStride_2x = srcStride << 1; +@@ -1201,34 +1107,32 @@ avg_h264_qpel8_v_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, + int srcStride_3x = srcStride_2x + srcStride; + int dstStride_3x = dstStride_2x + dstStride; + __m256i src00, src01, src02, src03, src04, src05, src06; +- __m256i src07, src08, src09, src10, src11, src12; +- __m256i tmp00, tmp01, tmp02, tmp03, tmp04, tmp05, tmp06, tmp07, tmp08, tmp09; +- __m256i zero = {0}; +- __m256i h_20 = {20}; +- __m256i h_5 = {5}; +- __m256i h_16 = {16}; +- +- zero = __lasx_xvreplve0_h(zero); +- h_20 = __lasx_xvreplve0_h(h_20); +- h_5 = __lasx_xvreplve0_h(h_5); +- h_16 = __lasx_xvreplve0_h(h_16); +- +- DUP2_ARG2(__lasx_xvld, src - srcStride_2x, 0, src - srcStride, 0, src00, src01); +- DUP4_ARG2(__lasx_xvld, src, 0, src + srcStride, 0, src + srcStride_2x, 0, +- src + srcStride_3x, 0, src02, src03, src04, src05); ++ __m256i src07, src08, src09, src10, src11, src12, tmp00; ++ __m256i tmp01, tmp02, tmp03, tmp04, tmp05, tmp06, tmp07, tmp08, tmp09; ++ __m256i h_20 = __lasx_xvldi(0x414); ++ __m256i h_5 = __lasx_xvldi(0x405); ++ __m256i h_16 = __lasx_xvldi(0x410); ++ ++ ++ DUP2_ARG2(__lasx_xvld, src - srcStride_2x, 0, src - srcStride, 0, ++ src00, src01); ++ src02 = __lasx_xvld(src, 0); ++ DUP4_ARG2(__lasx_xvldx, src, srcStride, src, srcStride_2x, src, ++ srcStride_3x, src, srcStride_4x, src03, src04, src05, src06); + src += srcStride_4x; +- DUP4_ARG2(__lasx_xvld, src, 0, src + srcStride, 0, src + srcStride_2x, 0, +- src + srcStride_3x, 0, src06, src07, src08, src09); ++ DUP4_ARG2(__lasx_xvldx, src, srcStride, src, srcStride_2x, src, ++ srcStride_3x, src, srcStride_4x, src07, src08, src09, src10); + src += srcStride_4x; +- DUP2_ARG2(__lasx_xvld, src, 0, src + srcStride, 0, src10, src11); +- src += srcStride_2x; +- src12 = __lasx_xvld(src, 0); ++ DUP2_ARG2(__lasx_xvldx, src, srcStride, src, srcStride_2x, src11, src12); + +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dstStride, dst, dstStride_2x, dst, dstStride_3x, +- tmp06, tmp07, tmp02, tmp03); ++ tmp06 = __lasx_xvld(dst, 0); ++ DUP4_ARG2(__lasx_xvldx, dst, dstStride, dst, dstStride_2x, ++ dst, dstStride_3x, dst, dstStride_4x, ++ tmp07, tmp02, tmp03, tmp04); + dst += dstStride_4x; +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dstStride, dst, dstStride_2x, dst, dstStride_3x, +- tmp04, tmp05, tmp00, tmp01); ++ DUP2_ARG2(__lasx_xvldx, dst, dstStride, dst, dstStride_2x, ++ tmp05, tmp00); ++ tmp01 = __lasx_xvldx(dst, dstStride_3x); + dst -= dstStride_4x; + + tmp06 = __lasx_xvpermi_q(tmp06, tmp07, 0x02); +@@ -1241,19 +1145,19 @@ avg_h264_qpel8_v_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, + tmp06 = __lasx_xvavgr_bu(tmp06, tmp02); + __lasx_xvstelm_d(tmp06, dst, 0, 0); + __lasx_xvstelm_d(tmp06, dst + dstStride, 0, 2); +- dst += dstStride << 1; ++ dst += dstStride_2x; + QPEL8_V_LOWPASS(src02, src03, src04, src05, src06, src07, src08, + tmp00, tmp01, tmp02, tmp03, tmp04, tmp05); + tmp07 = __lasx_xvavgr_bu(tmp07, tmp02); + __lasx_xvstelm_d(tmp07, dst, 0, 0); + __lasx_xvstelm_d(tmp07, dst + dstStride, 0, 2); +- dst += dstStride << 1; ++ dst += dstStride_2x; + QPEL8_V_LOWPASS(src04, src05, src06, src07, src08, src09, src10, + tmp00, tmp01, tmp02, tmp03, tmp04, tmp05); + tmp08 = __lasx_xvavgr_bu(tmp08, tmp02); + __lasx_xvstelm_d(tmp08, dst, 0, 0); + __lasx_xvstelm_d(tmp08, dst + dstStride, 0, 2); +- dst += dstStride << 1; ++ dst += dstStride_2x; + QPEL8_V_LOWPASS(src06, src07, src08, src09, src10, src11, src12, + tmp00, tmp01, tmp02, tmp03, tmp04, tmp05); + tmp09 = __lasx_xvavgr_bu(tmp09, tmp02); +@@ -1313,10 +1217,10 @@ put_h264_qpel8_hv_lowpass_lasx(uint8_t *dst, const uint8_t *src, + __m256i src00, src01, src02, src03, src04, src05, src10; + __m256i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6; + __m256i tmp7, tmp8, tmp9, tmp10, tmp11, tmp12; +- __m256i h_20 = {20}; +- __m256i h_5 = {5}; +- __m256i w_20 = {20}; +- __m256i w_5 = {5}; ++ __m256i h_20 = __lasx_xvldi(0x414); ++ __m256i h_5 = __lasx_xvldi(0x405); ++ __m256i w_20 = __lasx_xvldi(0x814); ++ __m256i w_5 = __lasx_xvldi(0x805); + __m256i w_512 = {512}; + __m256i mask1 = {0x0807060504030201, 0x0, 0x0807060504030201, 0x0}; + __m256i mask2 = {0x0908070605040302, 0x0, 0x0908070605040302, 0x0}; +@@ -1324,10 +1228,6 @@ put_h264_qpel8_hv_lowpass_lasx(uint8_t *dst, const uint8_t *src, + __m256i mask4 = {0x0b0a090807060504, 0x0, 0x0b0a090807060504, 0x0}; + __m256i mask5 = {0x0c0b0a0908070605, 0x0, 0x0c0b0a0908070605, 0x0}; + +- h_20 = __lasx_xvreplve0_h(w_20); +- h_5 = __lasx_xvreplve0_h(w_5); +- w_20 = __lasx_xvreplve0_w(w_20); +- w_5 = __lasx_xvreplve0_w(w_5); + w_512 = __lasx_xvreplve0_w(w_512); + + src -= srcStride << 1; +@@ -1354,16 +1254,20 @@ put_h264_qpel8_hv_lowpass_lasx(uint8_t *dst, const uint8_t *src, + QPEL8_HV_LOWPASS_V(tmp6, tmp7, tmp8, tmp9, tmp10, tmp11, src00, src01, + src02, src03, src04, src05, tmp6) + __lasx_xvstelm_d(tmp0, dst, 0, 0); +- __lasx_xvstelm_d(tmp0, dst + dstStride, 0, 2); +- dst += dstStride << 1; ++ dst += dstStride; ++ __lasx_xvstelm_d(tmp0, dst, 0, 2); ++ dst += dstStride; + __lasx_xvstelm_d(tmp2, dst, 0, 0); +- __lasx_xvstelm_d(tmp2, dst + dstStride, 0, 2); +- dst += dstStride << 1; ++ dst += dstStride; ++ __lasx_xvstelm_d(tmp2, dst, 0, 2); ++ dst += dstStride; + __lasx_xvstelm_d(tmp4, dst, 0, 0); +- __lasx_xvstelm_d(tmp4, dst + dstStride, 0, 2); +- dst += dstStride << 1; ++ dst += dstStride; ++ __lasx_xvstelm_d(tmp4, dst, 0, 2); ++ dst += dstStride; + __lasx_xvstelm_d(tmp6, dst, 0, 0); +- __lasx_xvstelm_d(tmp6, dst + dstStride, 0, 2); ++ dst += dstStride; ++ __lasx_xvstelm_d(tmp6, dst, 0, 2); + } + + static av_always_inline void +@@ -1376,30 +1280,25 @@ avg_h264_qpel8_h_lowpass_lasx(uint8_t *dst, const uint8_t *src, int dstStride, + __m256i src00, src01, src02, src03, src04, src05, src10; + __m256i dst00, dst01, dst0, dst1, dst2, dst3; + __m256i out0, out1, out2, out3; +- __m256i zero = {0}; +- __m256i h_20 = {20}; +- __m256i h_5 = {5}; +- __m256i h_16 = {16}; ++ __m256i h_20 = __lasx_xvldi(0x414); ++ __m256i h_5 = __lasx_xvldi(0x405); ++ __m256i h_16 = __lasx_xvldi(0x410); + __m256i mask1 = {0x0807060504030201, 0x0, 0x0807060504030201, 0x0}; + __m256i mask2 = {0x0908070605040302, 0x0, 0x0908070605040302, 0x0}; + __m256i mask3 = {0x0a09080706050403, 0x0, 0x0a09080706050403, 0x0}; + __m256i mask4 = {0x0b0a090807060504, 0x0, 0x0b0a090807060504, 0x0}; + __m256i mask5 = {0x0c0b0a0908070605, 0x0, 0x0c0b0a0908070605, 0x0}; + +- zero = __lasx_xvreplve0_h(zero); +- h_20 = __lasx_xvreplve0_h(h_20); +- h_5 = __lasx_xvreplve0_h(h_5); +- h_16 = __lasx_xvreplve0_h(h_16); +- + QPEL8_H_LOWPASS(out0) + QPEL8_H_LOWPASS(out1) + QPEL8_H_LOWPASS(out2) + QPEL8_H_LOWPASS(out3) +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dstStride, dst, dstStride_2x, dst, dstStride_3x, +- src00, src01, src02, src03); ++ src00 = __lasx_xvld(dst, 0); ++ DUP4_ARG2(__lasx_xvldx, dst, dstStride, dst, dstStride_2x, dst, ++ dstStride_3x, dst, dstStride_4x, src01, src02, src03, src04); + dst += dstStride_4x; +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dstStride, dst, dstStride_2x, dst, dstStride_3x, +- src04, src05, dst00, dst01); ++ DUP2_ARG2(__lasx_xvldx, dst, dstStride, dst, dstStride_2x, src05, dst00); ++ dst01 = __lasx_xvldx(dst, dstStride_3x); + dst -= dstStride_4x; + dst0 = __lasx_xvpermi_q(src00, src01, 0x02); + dst1 = __lasx_xvpermi_q(src02, src03, 0x02); +@@ -1427,10 +1326,10 @@ avg_h264_qpel8_hv_lowpass_lasx(uint8_t *dst, const uint8_t *src, + __m256i src00, src01, src02, src03, src04, src05, src10; + __m256i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6; + __m256i tmp7, tmp8, tmp9, tmp10, tmp11, tmp12; +- __m256i h_20 = {20}; +- __m256i h_5 = {5}; +- __m256i w_20 = {20}; +- __m256i w_5 = {5}; ++ __m256i h_20 = __lasx_xvldi(0x414); ++ __m256i h_5 = __lasx_xvldi(0x405); ++ __m256i w_20 = __lasx_xvldi(0x814); ++ __m256i w_5 = __lasx_xvldi(0x805); + __m256i w_512 = {512}; + __m256i mask1 = {0x0807060504030201, 0x0, 0x0807060504030201, 0x0}; + __m256i mask2 = {0x0908070605040302, 0x0, 0x0908070605040302, 0x0}; +@@ -1441,10 +1340,6 @@ avg_h264_qpel8_hv_lowpass_lasx(uint8_t *dst, const uint8_t *src, + ptrdiff_t dstStride_4x = dstStride << 2; + ptrdiff_t dstStride_3x = dstStride_2x + dstStride; + +- h_20 = __lasx_xvreplve0_h(w_20); +- h_5 = __lasx_xvreplve0_h(w_5); +- w_20 = __lasx_xvreplve0_w(w_20); +- w_5 = __lasx_xvreplve0_w(w_5); + w_512 = __lasx_xvreplve0_w(w_512); + + src -= srcStride << 1; +@@ -1471,11 +1366,12 @@ avg_h264_qpel8_hv_lowpass_lasx(uint8_t *dst, const uint8_t *src, + QPEL8_HV_LOWPASS_V(tmp6, tmp7, tmp8, tmp9, tmp10, tmp11, src00, src01, + src02, src03, src04, src05, tmp6) + +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dstStride, dst, dstStride_2x, dst, dstStride_3x, +- src00, src01, src02, src03); ++ src00 = __lasx_xvld(dst, 0); ++ DUP4_ARG2(__lasx_xvldx, dst, dstStride, dst, dstStride_2x, dst, ++ dstStride_3x, dst, dstStride_4x, src01, src02, src03, src04); + dst += dstStride_4x; +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dstStride, dst, dstStride_2x, dst, dstStride_3x, +- src04, src05, tmp8, tmp9); ++ DUP2_ARG2(__lasx_xvldx, dst, dstStride, dst, dstStride_2x, src05, tmp8); ++ tmp9 = __lasx_xvldx(dst, dstStride_3x); + dst -= dstStride_4x; + tmp1 = __lasx_xvpermi_q(src00, src01, 0x02); + tmp3 = __lasx_xvpermi_q(src02, src03, 0x02); +@@ -1486,16 +1382,20 @@ avg_h264_qpel8_hv_lowpass_lasx(uint8_t *dst, const uint8_t *src, + tmp4 = __lasx_xvavgr_bu(tmp4, tmp5); + tmp6 = __lasx_xvavgr_bu(tmp6, tmp7); + __lasx_xvstelm_d(tmp0, dst, 0, 0); +- __lasx_xvstelm_d(tmp0, dst + dstStride, 0, 2); +- dst += dstStride << 1; ++ dst += dstStride; ++ __lasx_xvstelm_d(tmp0, dst, 0, 2); ++ dst += dstStride; + __lasx_xvstelm_d(tmp2, dst, 0, 0); +- __lasx_xvstelm_d(tmp2, dst + dstStride, 0, 2); +- dst += dstStride << 1; ++ dst += dstStride; ++ __lasx_xvstelm_d(tmp2, dst, 0, 2); ++ dst += dstStride; + __lasx_xvstelm_d(tmp4, dst, 0, 0); +- __lasx_xvstelm_d(tmp4, dst + dstStride, 0, 2); +- dst += dstStride << 1; ++ dst += dstStride; ++ __lasx_xvstelm_d(tmp4, dst, 0, 2); ++ dst += dstStride; + __lasx_xvstelm_d(tmp6, dst, 0, 0); +- __lasx_xvstelm_d(tmp6, dst + dstStride, 0, 2); ++ dst += dstStride; ++ __lasx_xvstelm_d(tmp6, dst, 0, 2); + } + + static av_always_inline void +@@ -1525,27 +1425,27 @@ avg_h264_qpel16_h_lowpass_lasx(uint8_t *dst, const uint8_t *src, + static void put_h264_qpel16_v_lowpass_lasx(uint8_t *dst, const uint8_t *src, + int dstStride, int srcStride) + { +- put_h264_qpel8_v_lowpass_lasx(dst, src, dstStride, srcStride); +- put_h264_qpel8_v_lowpass_lasx(dst+8, src+8, dstStride, srcStride); ++ put_h264_qpel8_v_lowpass_lasx(dst, (uint8_t*)src, dstStride, srcStride); ++ put_h264_qpel8_v_lowpass_lasx(dst+8, (uint8_t*)src+8, dstStride, srcStride); + src += 8*srcStride; + dst += 8*dstStride; +- put_h264_qpel8_v_lowpass_lasx(dst, src, dstStride, srcStride); +- put_h264_qpel8_v_lowpass_lasx(dst+8, src+8, dstStride, srcStride); ++ put_h264_qpel8_v_lowpass_lasx(dst, (uint8_t*)src, dstStride, srcStride); ++ put_h264_qpel8_v_lowpass_lasx(dst+8, (uint8_t*)src+8, dstStride, srcStride); + } + + static void avg_h264_qpel16_v_lowpass_lasx(uint8_t *dst, const uint8_t *src, + int dstStride, int srcStride) + { +- avg_h264_qpel8_v_lowpass_lasx(dst, src, dstStride, srcStride); +- avg_h264_qpel8_v_lowpass_lasx(dst+8, src+8, dstStride, srcStride); ++ avg_h264_qpel8_v_lowpass_lasx(dst, (uint8_t*)src, dstStride, srcStride); ++ avg_h264_qpel8_v_lowpass_lasx(dst+8, (uint8_t*)src+8, dstStride, srcStride); + src += 8*srcStride; + dst += 8*dstStride; +- avg_h264_qpel8_v_lowpass_lasx(dst, src, dstStride, srcStride); +- avg_h264_qpel8_v_lowpass_lasx(dst+8, src+8, dstStride, srcStride); ++ avg_h264_qpel8_v_lowpass_lasx(dst, (uint8_t*)src, dstStride, srcStride); ++ avg_h264_qpel8_v_lowpass_lasx(dst+8, (uint8_t*)src+8, dstStride, srcStride); + } + + static void put_h264_qpel16_hv_lowpass_lasx(uint8_t *dst, const uint8_t *src, +- ptrdiff_t dstStride, ptrdiff_t srcStride) ++ ptrdiff_t dstStride, ptrdiff_t srcStride) + { + put_h264_qpel8_hv_lowpass_lasx(dst, src, dstStride, srcStride); + put_h264_qpel8_hv_lowpass_lasx(dst + 8, src + 8, dstStride, srcStride); +@@ -1556,7 +1456,7 @@ static void put_h264_qpel16_hv_lowpass_lasx(uint8_t *dst, const uint8_t *src, + } + + static void avg_h264_qpel16_hv_lowpass_lasx(uint8_t *dst, const uint8_t *src, +- ptrdiff_t dstStride, ptrdiff_t srcStride) ++ ptrdiff_t dstStride, ptrdiff_t srcStride) + { + avg_h264_qpel8_hv_lowpass_lasx(dst, src, dstStride, srcStride); + avg_h264_qpel8_hv_lowpass_lasx(dst + 8, src + 8, dstStride, srcStride); +@@ -1604,7 +1504,7 @@ void ff_put_h264_qpel8_mc01_lasx(uint8_t *dst, const uint8_t *src, + { + uint8_t half[64]; + +- put_h264_qpel8_v_lowpass_lasx(half, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(half, (uint8_t*)src, 8, stride); + put_pixels8_l2_8_lsx(dst, src, half, stride, stride); + } + +@@ -1615,7 +1515,7 @@ void ff_put_h264_qpel8_mc11_lasx(uint8_t *dst, const uint8_t *src, + uint8_t halfV[64]; + + put_h264_qpel8_h_lowpass_lasx(halfH, src, 8, stride); +- put_h264_qpel8_v_lowpass_lasx(halfV, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfV, (uint8_t*)src, 8, stride); + put_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); + } + +@@ -1638,14 +1538,14 @@ void ff_put_h264_qpel8_mc31_lasx(uint8_t *dst, const uint8_t *src, + uint8_t halfV[64]; + + put_h264_qpel8_h_lowpass_lasx(halfH, src, 8, stride); +- put_h264_qpel8_v_lowpass_lasx(halfV, src + 1, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfV, (uint8_t*)src + 1, 8, stride); + put_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); + } + + void ff_put_h264_qpel8_mc02_lasx(uint8_t *dst, const uint8_t *src, + ptrdiff_t stride) + { +- put_h264_qpel8_v_lowpass_lasx(dst, src, stride, stride); ++ put_h264_qpel8_v_lowpass_lasx(dst, (uint8_t*)src, stride, stride); + } + + void ff_put_h264_qpel8_mc12_lasx(uint8_t *dst, const uint8_t *src, +@@ -1656,7 +1556,7 @@ void ff_put_h264_qpel8_mc12_lasx(uint8_t *dst, const uint8_t *src, + uint8_t *const halfH = temp + 64; + + put_h264_qpel8_hv_lowpass_lasx(halfHV, src, 8, stride); +- put_h264_qpel8_v_lowpass_lasx(halfH, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfH, (uint8_t*)src, 8, stride); + put_pixels8_l2_8_lsx(dst, halfH, halfHV, stride, 8); + } + +@@ -1674,7 +1574,7 @@ void ff_put_h264_qpel8_mc32_lasx(uint8_t *dst, const uint8_t *src, + uint8_t *const halfH = temp + 64; + + put_h264_qpel8_hv_lowpass_lasx(halfHV, src, 8, stride); +- put_h264_qpel8_v_lowpass_lasx(halfH, src + 1, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfH, (uint8_t*)src + 1, 8, stride); + put_pixels8_l2_8_lsx(dst, halfH, halfHV, stride, 8); + } + +@@ -1683,7 +1583,7 @@ void ff_put_h264_qpel8_mc03_lasx(uint8_t *dst, const uint8_t *src, + { + uint8_t half[64]; + +- put_h264_qpel8_v_lowpass_lasx(half, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(half, (uint8_t*)src, 8, stride); + put_pixels8_l2_8_lsx(dst, src + stride, half, stride, stride); + } + +@@ -1694,7 +1594,7 @@ void ff_put_h264_qpel8_mc13_lasx(uint8_t *dst, const uint8_t *src, + uint8_t halfV[64]; + + put_h264_qpel8_h_lowpass_lasx(halfH, src + stride, 8, stride); +- put_h264_qpel8_v_lowpass_lasx(halfV, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfV, (uint8_t*)src, 8, stride); + put_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); + } + +@@ -1717,7 +1617,7 @@ void ff_put_h264_qpel8_mc33_lasx(uint8_t *dst, const uint8_t *src, + uint8_t halfV[64]; + + put_h264_qpel8_h_lowpass_lasx(halfH, src + stride, 8, stride); +- put_h264_qpel8_v_lowpass_lasx(halfV, src + 1, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfV, (uint8_t*)src + 1, 8, stride); + put_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); + } + +@@ -1760,7 +1660,7 @@ void ff_avg_h264_qpel8_mc11_lasx(uint8_t *dst, const uint8_t *src, + uint8_t halfV[64]; + + put_h264_qpel8_h_lowpass_lasx(halfH, src, 8, stride); +- put_h264_qpel8_v_lowpass_lasx(halfV, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfV, (uint8_t*)src, 8, stride); + avg_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); + } + +@@ -1783,14 +1683,14 @@ void ff_avg_h264_qpel8_mc31_lasx(uint8_t *dst, const uint8_t *src, + uint8_t halfV[64]; + + put_h264_qpel8_h_lowpass_lasx(halfH, src, 8, stride); +- put_h264_qpel8_v_lowpass_lasx(halfV, src + 1, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfV, (uint8_t*)src + 1, 8, stride); + avg_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); + } + + void ff_avg_h264_qpel8_mc02_lasx(uint8_t *dst, const uint8_t *src, + ptrdiff_t stride) + { +- avg_h264_qpel8_v_lowpass_lasx(dst, src, stride, stride); ++ avg_h264_qpel8_v_lowpass_lasx(dst, (uint8_t*)src, stride, stride); + } + + void ff_avg_h264_qpel8_mc12_lasx(uint8_t *dst, const uint8_t *src, +@@ -1801,7 +1701,7 @@ void ff_avg_h264_qpel8_mc12_lasx(uint8_t *dst, const uint8_t *src, + uint8_t *const halfH = temp + 64; + + put_h264_qpel8_hv_lowpass_lasx(halfHV, src, 8, stride); +- put_h264_qpel8_v_lowpass_lasx(halfH, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfH, (uint8_t*)src, 8, stride); + avg_pixels8_l2_8_lsx(dst, halfH, halfHV, stride, 8); + } + +@@ -1819,7 +1719,7 @@ void ff_avg_h264_qpel8_mc32_lasx(uint8_t *dst, const uint8_t *src, + uint8_t *const halfH = temp + 64; + + put_h264_qpel8_hv_lowpass_lasx(halfHV, src, 8, stride); +- put_h264_qpel8_v_lowpass_lasx(halfH, src + 1, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfH, (uint8_t*)src + 1, 8, stride); + avg_pixels8_l2_8_lsx(dst, halfH, halfHV, stride, 8); + } + +@@ -1830,7 +1730,7 @@ void ff_avg_h264_qpel8_mc13_lasx(uint8_t *dst, const uint8_t *src, + uint8_t halfV[64]; + + put_h264_qpel8_h_lowpass_lasx(halfH, src + stride, 8, stride); +- put_h264_qpel8_v_lowpass_lasx(halfV, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfV, (uint8_t*)src, 8, stride); + avg_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); + } + +@@ -1853,7 +1753,7 @@ void ff_avg_h264_qpel8_mc33_lasx(uint8_t *dst, const uint8_t *src, + uint8_t halfV[64]; + + put_h264_qpel8_h_lowpass_lasx(halfH, src + stride, 8, stride); +- put_h264_qpel8_v_lowpass_lasx(halfV, src + 1, 8, stride); ++ put_h264_qpel8_v_lowpass_lasx(halfV, (uint8_t*)src + 1, 8, stride); + avg_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); + } + +@@ -1901,7 +1801,8 @@ void ff_put_h264_qpel16_mc01_lasx(uint8_t *dst, const uint8_t *src, + void ff_put_h264_qpel16_mc11_lasx(uint8_t *dst, const uint8_t *src, + ptrdiff_t stride) + { +- avc_luma_hv_qrt_16x16_lasx(src - 2, src - (stride * 2), dst, stride); ++ avc_luma_hv_qrt_16x16_lasx((uint8_t*)src - 2, (uint8_t*)src - (stride * 2), ++ dst, stride); + } + + void ff_put_h264_qpel16_mc21_lasx(uint8_t *dst, const uint8_t *src, +@@ -1919,7 +1820,8 @@ void ff_put_h264_qpel16_mc21_lasx(uint8_t *dst, const uint8_t *src, + void ff_put_h264_qpel16_mc31_lasx(uint8_t *dst, const uint8_t *src, + ptrdiff_t stride) + { +- avc_luma_hv_qrt_16x16_lasx(src - 2, src - (stride * 2) + 1, dst, stride); ++ avc_luma_hv_qrt_16x16_lasx((uint8_t*)src - 2, (uint8_t*)src - (stride * 2) + 1, ++ dst, stride); + } + + void ff_put_h264_qpel16_mc02_lasx(uint8_t *dst, const uint8_t *src, +@@ -1970,8 +1872,8 @@ void ff_put_h264_qpel16_mc03_lasx(uint8_t *dst, const uint8_t *src, + void ff_put_h264_qpel16_mc13_lasx(uint8_t *dst, const uint8_t *src, + ptrdiff_t stride) + { +- avc_luma_hv_qrt_16x16_lasx(src + stride - 2, src - (stride * 2), dst, +- stride); ++ avc_luma_hv_qrt_16x16_lasx((uint8_t*)src + stride - 2, (uint8_t*)src - (stride * 2), ++ dst, stride); + } + + void ff_put_h264_qpel16_mc23_lasx(uint8_t *dst, const uint8_t *src, +@@ -1989,8 +1891,8 @@ void ff_put_h264_qpel16_mc23_lasx(uint8_t *dst, const uint8_t *src, + void ff_put_h264_qpel16_mc33_lasx(uint8_t *dst, const uint8_t *src, + ptrdiff_t stride) + { +- avc_luma_hv_qrt_16x16_lasx(src + stride - 2, src - (stride * 2) + 1, dst, +- stride); ++ avc_luma_hv_qrt_16x16_lasx((uint8_t*)src + stride - 2, ++ (uint8_t*)src - (stride * 2) + 1, dst, stride); + } + + void ff_avg_h264_qpel16_mc00_lasx(uint8_t *dst, const uint8_t *src, +@@ -2037,9 +1939,9 @@ void ff_avg_h264_qpel16_mc01_lasx(uint8_t *dst, const uint8_t *src, + void ff_avg_h264_qpel16_mc11_lasx(uint8_t *dst, const uint8_t *src, + ptrdiff_t stride) + { +- avc_luma_hv_qrt_and_aver_dst_16x16_lasx(src - 2, +- src - (stride * 2), +- dst, stride); ++ avc_luma_hv_qrt_and_aver_dst_16x16_lasx((uint8_t*)src - 2, ++ (uint8_t*)src - (stride * 2), ++ dst, stride); + } + + void ff_avg_h264_qpel16_mc21_lasx(uint8_t *dst, const uint8_t *src, +@@ -2057,9 +1959,8 @@ void ff_avg_h264_qpel16_mc21_lasx(uint8_t *dst, const uint8_t *src, + void ff_avg_h264_qpel16_mc31_lasx(uint8_t *dst, const uint8_t *src, + ptrdiff_t stride) + { +- avc_luma_hv_qrt_and_aver_dst_16x16_lasx(src - 2, +- src - (stride * 2) + +- sizeof(uint8_t), ++ avc_luma_hv_qrt_and_aver_dst_16x16_lasx((uint8_t*)src - 2, ++ (uint8_t*)src - (stride * 2) + 1, + dst, stride); + } + +@@ -2111,8 +2012,8 @@ void ff_avg_h264_qpel16_mc03_lasx(uint8_t *dst, const uint8_t *src, + void ff_avg_h264_qpel16_mc13_lasx(uint8_t *dst, const uint8_t *src, + ptrdiff_t stride) + { +- avc_luma_hv_qrt_and_aver_dst_16x16_lasx(src + stride - 2, +- src - (stride * 2), ++ avc_luma_hv_qrt_and_aver_dst_16x16_lasx((uint8_t*)src + stride - 2, ++ (uint8_t*)src - (stride * 2), + dst, stride); + } + +@@ -2131,8 +2032,7 @@ void ff_avg_h264_qpel16_mc23_lasx(uint8_t *dst, const uint8_t *src, + void ff_avg_h264_qpel16_mc33_lasx(uint8_t *dst, const uint8_t *src, + ptrdiff_t stride) + { +- avc_luma_hv_qrt_and_aver_dst_16x16_lasx(src + stride - 2, +- src - (stride * 2) + +- sizeof(uint8_t), ++ avc_luma_hv_qrt_and_aver_dst_16x16_lasx((uint8_t*)src + stride - 2, ++ (uint8_t*)src - (stride * 2) + 1, + dst, stride); + } +diff --git a/libavcodec/loongarch/hevc_idct_lsx.c b/libavcodec/loongarch/hevc_idct_lsx.c +index c73193d1f9..2193b27546 100644 +--- a/libavcodec/loongarch/hevc_idct_lsx.c ++++ b/libavcodec/loongarch/hevc_idct_lsx.c +@@ -1,6 +1,7 @@ + /* +- * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Copyright (c) 2022 Loongson Technology Corporation Limited + * Contributed by Shiyou Yin ++ * Hao Chen + * + * This file is part of FFmpeg. + * +@@ -326,7 +327,7 @@ static const int16_t gt32x32_cnst2[16] __attribute__ ((aligned (64))) = { + res3 = __lsx_vsat_w(res3, 15); \ + } + +-static void hevc_idct_4x4_lsx(int16_t *coeffs) ++void ff_hevc_idct_4x4_lsx(int16_t *coeffs, int col_limit) + { + __m128i in0, in1; + __m128i in_r0, in_l0, in_r1, in_l1; +@@ -356,7 +357,7 @@ static void hevc_idct_4x4_lsx(int16_t *coeffs) + __lsx_vst(in1, coeffs, 16); + } + +-static void hevc_idct_8x8_lsx(int16_t *coeffs) ++void ff_hevc_idct_8x8_lsx(int16_t *coeffs, int col_limit) + { + const int16_t *filter = >8x8_cnst[0]; + __m128i in0, in1, in2, in3, in4, in5, in6, in7; +@@ -372,17 +373,17 @@ static void hevc_idct_8x8_lsx(int16_t *coeffs) + LSX_TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, + in0, in1, in2, in3, in4, in5, in6, in7); + +- __lsx_vst(in0, coeffs,0); +- __lsx_vst(in1, coeffs,16); +- __lsx_vst(in2, coeffs,32); +- __lsx_vst(in3, coeffs,48); +- __lsx_vst(in4, coeffs,64); +- __lsx_vst(in5, coeffs,80); +- __lsx_vst(in6, coeffs,96); +- __lsx_vst(in7, coeffs,112); ++ __lsx_vst(in0, coeffs, 0); ++ __lsx_vst(in1, coeffs, 16); ++ __lsx_vst(in2, coeffs, 32); ++ __lsx_vst(in3, coeffs, 48); ++ __lsx_vst(in4, coeffs, 64); ++ __lsx_vst(in5, coeffs, 80); ++ __lsx_vst(in6, coeffs, 96); ++ __lsx_vst(in7, coeffs, 112); + } + +-static void hevc_idct_16x16_lsx(int16_t *coeffs) ++void ff_hevc_idct_16x16_lsx(int16_t *coeffs, int col_limit) + { + int16_t i, j, k; + int16_t buf[256]; +@@ -474,12 +475,15 @@ static void hevc_idct_16x16_lsx(int16_t *coeffs) + + src = coeffs + 8; + DUP4_ARG2(__lsx_vld, src, 0, src, 32, src, 64, src, 96, in0, in1, in2, in3); +- DUP4_ARG2(__lsx_vld, src, 128, src, 160, src, 192, src, 224, in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vld, src, 128, src, 160, src, 192, src, 224, ++ in4, in5, in6, in7); + LSX_TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, + vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7); + src = coeffs + 128; +- DUP4_ARG2(__lsx_vld, src, 0, src, 32, src, 64, src, 96, in8, in9, in10, in11); +- DUP4_ARG2(__lsx_vld, src, 128, src, 160, src, 192, src, 224, in12, in13, in14, in15); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 32, src, 64, src, 96, ++ in8, in9, in10, in11); ++ DUP4_ARG2(__lsx_vld, src, 128, src, 160, src, 192, src, 224, ++ in12, in13, in14, in15); + + __lsx_vst(vec0, src, 0); + __lsx_vst(vec1, src, 32); +@@ -502,8 +506,10 @@ static void hevc_idct_16x16_lsx(int16_t *coeffs) + __lsx_vst(vec7, src, 224); + + src = coeffs + 136; +- DUP4_ARG2(__lsx_vld, src, 0, src, 32, src, 64, src, 96, in0, in1, in2, in3); +- DUP4_ARG2(__lsx_vld, src, 128, src, 160, src, 192, src, 224, in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 32, src, 64, src, 96, ++ in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, src, 128, src, 160, src, 192, src, 224, ++ in4, in5, in6, in7); + LSX_TRANSPOSE8x8_H(in0, in1, in2, in3, in4, in5, in6, in7, + vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7); + __lsx_vst(vec0, src, 0); +@@ -516,22 +522,22 @@ static void hevc_idct_16x16_lsx(int16_t *coeffs) + __lsx_vst(vec7, src, 224); + } + +-static void hevc_idct_8x32_column_lsx(int16_t *coeffs, uint8_t buf_pitch, ++static void hevc_idct_8x32_column_lsx(int16_t *coeffs, int32_t buf_pitch, + uint8_t round) + { + uint8_t i; +- uint16_t buf_pitch_2x = (uint16_t)buf_pitch << 1; +- uint16_t buf_pitch_4x = (uint16_t)buf_pitch << 2; +- uint16_t buf_pitch_8x = (uint16_t)buf_pitch << 3; +- uint16_t buf_pitch_16x = (uint16_t)buf_pitch << 4; +- uint16_t buf_pitch_32x = (uint16_t)buf_pitch << 5; ++ int32_t buf_pitch_2 = buf_pitch << 1; ++ int32_t buf_pitch_4 = buf_pitch << 2; ++ int32_t buf_pitch_8 = buf_pitch << 3; ++ int32_t buf_pitch_16 = buf_pitch << 4; ++ + const int16_t *filter_ptr0 = >32x32_cnst0[0]; + const int16_t *filter_ptr1 = >32x32_cnst1[0]; + const int16_t *filter_ptr2 = >32x32_cnst2[0]; + const int16_t *filter_ptr3 = >8x8_cnst[0]; + int16_t *src0 = (coeffs + buf_pitch); +- int16_t *src1 = (coeffs + 2 * buf_pitch); +- int16_t *src2 = (coeffs + 4 * buf_pitch); ++ int16_t *src1 = (coeffs + buf_pitch_2); ++ int16_t *src2 = (coeffs + buf_pitch_4); + int16_t *src3 = (coeffs); + int32_t tmp_buf[8 * 32 + 15]; + int32_t *tmp_buf_ptr = tmp_buf + 15; +@@ -546,88 +552,91 @@ static void hevc_idct_8x32_column_lsx(int16_t *coeffs, uint8_t buf_pitch, + + /* process coeff 4, 12, 20, 28 */ + in0 = __lsx_vld(src2, 0); +- // TODO: Use vldx once gcc fixed. +- //in1 = __lsx_vldx(src2, buf_pitch_16x); +- //in2 = __lsx_vldx(src2, buf_pitch_32x); +- //in3 = __lsx_vldx(src2, buf_pitch_32x + buf_pitch_16x); +- in1 = __lsx_vld(src2 + buf_pitch_8x, 0); +- in2 = __lsx_vld(src2 + buf_pitch_16x, 0); +- in3 = __lsx_vld(src2 + buf_pitch_16x + buf_pitch_8x, 0); ++ in1 = __lsx_vld(src2 + buf_pitch_8, 0); ++ in2 = __lsx_vld(src2 + buf_pitch_16, 0); ++ in3 = __lsx_vld(src2 + buf_pitch_16 + buf_pitch_8, 0); + in4 = __lsx_vld(src3, 0); +- // TODO: Use vldx once gcc fixed. +- //in5 = __lsx_vldx(src3, buf_pitch_16x); +- //in6 = __lsx_vldx(src3, buf_pitch_32x); +- //in7 = __lsx_vldx(src3, buf_pitch_32x + buf_pitch_16x); +- in5 = __lsx_vld(src3 + buf_pitch_8x, 0); +- in6 = __lsx_vld(src3 + buf_pitch_16x, 0); +- in7 = __lsx_vld(src3 + buf_pitch_16x + buf_pitch_8x, 0); ++ in5 = __lsx_vld(src3 + buf_pitch_8, 0); ++ in6 = __lsx_vld(src3 + buf_pitch_16, 0); ++ in7 = __lsx_vld(src3 + buf_pitch_16 + buf_pitch_8, 0); + DUP4_ARG2(__lsx_vilvl_h, in1, in0, in3, in2, in6, in4, in7, in5, + src0_r, src1_r, src2_r, src3_r); + DUP4_ARG2(__lsx_vilvh_h, in1, in0, in3, in2, in6, in4, in7, in5, + src0_l, src1_l, src2_l, src3_l); + +- /* loop for all columns of constants */ +- for (i = 0; i < 2; i++) { +- /* processing single column of constants */ +- filter0 = __lsx_vldrepl_w(filter_ptr2, 0); +- filter1 = __lsx_vldrepl_w(filter_ptr2, 4); +- sum0_r = __lsx_vdp2_w_h(src0_r, filter0); +- sum0_l = __lsx_vdp2_w_h(src0_l, filter0); +- sum0_r = __lsx_vdp2add_w_h(sum0_r, src1_r, filter1); +- sum0_l = __lsx_vdp2add_w_h(sum0_l, src1_l, filter1); +- __lsx_vst(sum0_r, (tmp_buf_ptr + 2 * i * 8), 0); +- __lsx_vst(sum0_l, (tmp_buf_ptr + 2 * i * 8), 16); ++ filter0 = __lsx_vldrepl_w(filter_ptr2, 0); ++ filter1 = __lsx_vldrepl_w(filter_ptr2, 4); ++ sum0_r = __lsx_vdp2_w_h(src0_r, filter0); ++ sum0_l = __lsx_vdp2_w_h(src0_l, filter0); ++ sum0_r = __lsx_vdp2add_w_h(sum0_r, src1_r, filter1); ++ sum0_l = __lsx_vdp2add_w_h(sum0_l, src1_l, filter1); ++ __lsx_vst(sum0_r, tmp_buf_ptr, 0); ++ __lsx_vst(sum0_l, tmp_buf_ptr, 16); ++ ++ filter0 = __lsx_vldrepl_w(filter_ptr2, 8); ++ filter1 = __lsx_vldrepl_w(filter_ptr2, 12); ++ sum0_r = __lsx_vdp2_w_h(src0_r, filter0); ++ sum0_l = __lsx_vdp2_w_h(src0_l, filter0); ++ sum0_r = __lsx_vdp2add_w_h(sum0_r, src1_r, filter1); ++ sum0_l = __lsx_vdp2add_w_h(sum0_l, src1_l, filter1); ++ __lsx_vst(sum0_r, tmp_buf_ptr, 32); ++ __lsx_vst(sum0_l, tmp_buf_ptr, 48); ++ ++ filter0 = __lsx_vldrepl_w(filter_ptr2, 16); ++ filter1 = __lsx_vldrepl_w(filter_ptr2, 20); ++ sum0_r = __lsx_vdp2_w_h(src0_r, filter0); ++ sum0_l = __lsx_vdp2_w_h(src0_l, filter0); ++ sum0_r = __lsx_vdp2add_w_h(sum0_r, src1_r, filter1); ++ sum0_l = __lsx_vdp2add_w_h(sum0_l, src1_l, filter1); ++ __lsx_vst(sum0_r, tmp_buf_ptr, 64); ++ __lsx_vst(sum0_l, tmp_buf_ptr, 80); ++ ++ filter0 = __lsx_vldrepl_w(filter_ptr2, 24); ++ filter1 = __lsx_vldrepl_w(filter_ptr2, 28); ++ sum0_r = __lsx_vdp2_w_h(src0_r, filter0); ++ sum0_l = __lsx_vdp2_w_h(src0_l, filter0); ++ sum0_r = __lsx_vdp2add_w_h(sum0_r, src1_r, filter1); ++ sum0_l = __lsx_vdp2add_w_h(sum0_l, src1_l, filter1); ++ __lsx_vst(sum0_r, tmp_buf_ptr, 96); ++ __lsx_vst(sum0_l, tmp_buf_ptr, 112); + +- /* processing single column of constants */ +- filter0 = __lsx_vldrepl_w(filter_ptr2, 8); +- filter1 = __lsx_vldrepl_w(filter_ptr2, 12); +- sum0_r = __lsx_vdp2_w_h(src0_r, filter0); +- sum0_l = __lsx_vdp2_w_h(src0_l, filter0); +- sum0_r = __lsx_vdp2add_w_h(sum0_r, src1_r, filter1); +- sum0_l = __lsx_vdp2add_w_h(sum0_l, src1_l, filter1); +- __lsx_vst(sum0_r, (tmp_buf_ptr + (2 * i + 1) * 8), 0); +- __lsx_vst(sum0_l, (tmp_buf_ptr + (2 * i + 1) * 8), 16); ++ /* process coeff 0, 8, 16, 24 */ ++ filter0 = __lsx_vldrepl_w(filter_ptr3, 0); ++ filter1 = __lsx_vldrepl_w(filter_ptr3, 4); + +- filter_ptr2 += 8; +- } ++ DUP4_ARG2(__lsx_vdp2_w_h, src2_r, filter0, src2_l, filter0, ++ src3_r, filter1, src3_l, filter1, sum0_r, sum0_l, tmp1_r, tmp1_l); ++ sum1_r = __lsx_vsub_w(sum0_r, tmp1_r); ++ sum1_l = __lsx_vsub_w(sum0_l, tmp1_l); ++ sum0_r = __lsx_vadd_w(sum0_r, tmp1_r); ++ sum0_l = __lsx_vadd_w(sum0_l, tmp1_l); + +- /* process coeff 0, 8, 16, 24 */ +- /* loop for all columns of constants */ +- for (i = 0; i < 2; i++) { +- /* processing first column of filter constants */ +- filter0 = __lsx_vldrepl_w(filter_ptr3, 0); +- filter1 = __lsx_vldrepl_w(filter_ptr3, 4); +- +- DUP4_ARG2(__lsx_vdp2_w_h, src2_r, filter0, src2_l, filter0, +- src3_r, filter1, src3_l, filter1, sum0_r, sum0_l, tmp1_r, tmp1_l); +- sum1_r = __lsx_vsub_w(sum0_r, tmp1_r); +- sum1_l = __lsx_vsub_w(sum0_l, tmp1_l); +- sum0_r = __lsx_vadd_w(sum0_r, tmp1_r); +- sum0_l = __lsx_vadd_w(sum0_l, tmp1_l); ++ HEVC_EVEN16_CALC(tmp_buf_ptr, sum0_r, sum0_l, 0, 7); ++ HEVC_EVEN16_CALC(tmp_buf_ptr, sum1_r, sum1_l, 3, 4); + +- HEVC_EVEN16_CALC(tmp_buf_ptr, sum0_r, sum0_l, i, (7 - i)); +- HEVC_EVEN16_CALC(tmp_buf_ptr, sum1_r, sum1_l, (3 - i), (4 + i)); ++ filter0 = __lsx_vldrepl_w(filter_ptr3, 16); ++ filter1 = __lsx_vldrepl_w(filter_ptr3, 20); + +- filter_ptr3 += 8; +- } ++ DUP4_ARG2(__lsx_vdp2_w_h, src2_r, filter0, src2_l, filter0, ++ src3_r, filter1, src3_l, filter1, sum0_r, sum0_l, tmp1_r, tmp1_l); ++ sum1_r = __lsx_vsub_w(sum0_r, tmp1_r); ++ sum1_l = __lsx_vsub_w(sum0_l, tmp1_l); ++ sum0_r = __lsx_vadd_w(sum0_r, tmp1_r); ++ sum0_l = __lsx_vadd_w(sum0_l, tmp1_l); ++ ++ HEVC_EVEN16_CALC(tmp_buf_ptr, sum0_r, sum0_l, 1, 6); ++ HEVC_EVEN16_CALC(tmp_buf_ptr, sum1_r, sum1_l, 2, 5); + + /* process coeff 2 6 10 14 18 22 26 30 */ + in0 = __lsx_vld(src1, 0); +- // TODO: Use vldx once gcc fixed. +- //in1 = __lsx_vldx(src1, buf_pitch_8x); +- //in2 = __lsx_vldx(src1, buf_pitch_16x); +- //in3 = __lsx_vldx(src1, buf_pitch_16x + buf_pitch_8x); +- //in4 = __lsx_vldx(src1, buf_pitch_32x); +- //in5 = __lsx_vldx(src1, buf_pitch_32x + buf_pitch_8x); +- //in6 = __lsx_vldx(src1, buf_pitch_32x + buf_pitch_16x); +- //in7 = __lsx_vldx(src1, buf_pitch_32x + buf_pitch_16x + buf_pitch_8x); +- in1 = __lsx_vld(src1 + buf_pitch_4x, 0); +- in2 = __lsx_vld(src1 + buf_pitch_8x, 0); +- in3 = __lsx_vld(src1 + buf_pitch_8x + buf_pitch_4x, 0); +- in4 = __lsx_vld(src1 + buf_pitch_16x, 0); +- in5 = __lsx_vld(src1 + buf_pitch_16x + buf_pitch_4x, 0); +- in6 = __lsx_vld(src1 + buf_pitch_16x + buf_pitch_8x, 0); +- in7 = __lsx_vld(src1 + buf_pitch_16x + buf_pitch_8x + buf_pitch_4x, 0); ++ in1 = __lsx_vld(src1 + buf_pitch_4, 0); ++ in2 = __lsx_vld(src1 + buf_pitch_8, 0); ++ in3 = __lsx_vld(src1 + buf_pitch_8 + buf_pitch_4, 0); ++ in4 = __lsx_vld(src1 + buf_pitch_16, 0); ++ in5 = __lsx_vld(src1 + buf_pitch_16 + buf_pitch_4, 0); ++ in6 = __lsx_vld(src1 + buf_pitch_16 + buf_pitch_8, 0); ++ in7 = __lsx_vld(src1 + buf_pitch_16 + buf_pitch_8 + buf_pitch_4, 0); ++ + DUP4_ARG2(__lsx_vilvl_h, in1, in0, in3, in2, in5, in4, in7, in6, + src0_r, src1_r, src2_r, src3_r); + DUP4_ARG2(__lsx_vilvh_h, in1, in0, in3, in2, in5, in4, in7, in6, +@@ -667,42 +676,28 @@ static void hevc_idct_8x32_column_lsx(int16_t *coeffs, uint8_t buf_pitch, + + /* process coeff 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 */ + in0 = __lsx_vld(src0, 0); +- // TODO: Use vldx once gcc fixed. +- //in1 = __lsx_vldx(src0, buf_pitch_4x); +- //in2 = __lsx_vldx(src0, buf_pitch_8x); +- //in3 = __lsx_vldx(src0, buf_pitch_8x + buf_pitch_4x); +- //in4 = __lsx_vldx(src0, buf_pitch_16x); +- //in5 = __lsx_vldx(src0, buf_pitch_16x + buf_pitch_4x); +- //in6 = __lsx_vldx(src0, buf_pitch_16x + buf_pitch_8x); +- //in7 = __lsx_vldx(src0, buf_pitch_16x + buf_pitch_8x + buf_pitch_4x); +- in1 = __lsx_vld(src0 + buf_pitch_2x, 0); +- in2 = __lsx_vld(src0 + buf_pitch_4x, 0); +- in3 = __lsx_vld(src0 + buf_pitch_4x + buf_pitch_2x, 0); +- in4 = __lsx_vld(src0 + buf_pitch_8x, 0); +- in5 = __lsx_vld(src0 + buf_pitch_8x + buf_pitch_2x, 0); +- in6 = __lsx_vld(src0 + buf_pitch_8x + buf_pitch_4x, 0); +- in7 = __lsx_vld(src0 + buf_pitch_8x + buf_pitch_4x + buf_pitch_2x, 0); ++ in1 = __lsx_vld(src0 + buf_pitch_2, 0); ++ in2 = __lsx_vld(src0 + buf_pitch_4, 0); ++ in3 = __lsx_vld(src0 + buf_pitch_4 + buf_pitch_2, 0); ++ in4 = __lsx_vld(src0 + buf_pitch_8, 0); ++ in5 = __lsx_vld(src0 + buf_pitch_8 + buf_pitch_2, 0); ++ in6 = __lsx_vld(src0 + buf_pitch_8 + buf_pitch_4, 0); ++ in7 = __lsx_vld(src0 + buf_pitch_8 + buf_pitch_4 + buf_pitch_2, 0); ++ + src0 += 16 * buf_pitch; + DUP4_ARG2(__lsx_vilvl_h, in1, in0, in3, in2, in5, in4, in7, in6, + src0_r, src1_r, src2_r, src3_r); + DUP4_ARG2(__lsx_vilvh_h, in1, in0, in3, in2, in5, in4, in7, in6, + src0_l, src1_l, src2_l, src3_l); + in0 = __lsx_vld(src0, 0); +- // TODO: Use vldx once gcc fixed. +- //in1 = __lsx_vldx(src0, buf_pitch_4x); +- //in2 = __lsx_vldx(src0, buf_pitch_8x); +- //in3 = __lsx_vldx(src0, buf_pitch_8x + buf_pitch_4x); +- //in4 = __lsx_vldx(src0, buf_pitch_16x); +- //in5 = __lsx_vldx(src0, buf_pitch_16x + buf_pitch_4x); +- //in6 = __lsx_vldx(src0, buf_pitch_16x + buf_pitch_8x); +- //in7 = __lsx_vldx(src0, buf_pitch_16x + buf_pitch_8x + buf_pitch_4x); +- in1 = __lsx_vld(src0 + buf_pitch_2x, 0); +- in2 = __lsx_vld(src0 + buf_pitch_4x, 0); +- in3 = __lsx_vld(src0 + buf_pitch_4x + buf_pitch_2x, 0); +- in4 = __lsx_vld(src0 + buf_pitch_8x, 0); +- in5 = __lsx_vld(src0 + buf_pitch_8x + buf_pitch_2x, 0); +- in6 = __lsx_vld(src0 + buf_pitch_8x + buf_pitch_4x, 0); +- in7 = __lsx_vld(src0 + buf_pitch_8x + buf_pitch_4x + buf_pitch_2x, 0); ++ in1 = __lsx_vld(src0 + buf_pitch_2, 0); ++ in2 = __lsx_vld(src0 + buf_pitch_4, 0); ++ in3 = __lsx_vld(src0 + buf_pitch_4 + buf_pitch_2, 0); ++ in4 = __lsx_vld(src0 + buf_pitch_8, 0); ++ in5 = __lsx_vld(src0 + buf_pitch_8 + buf_pitch_2, 0); ++ in6 = __lsx_vld(src0 + buf_pitch_8 + buf_pitch_4, 0); ++ in7 = __lsx_vld(src0 + buf_pitch_8 + buf_pitch_4 + buf_pitch_2, 0); ++ + DUP4_ARG2(__lsx_vilvl_h, in1, in0, in3, in2, in5, in4, in7, in6, + src4_r, src5_r, src6_r, src7_r); + DUP4_ARG2(__lsx_vilvh_h, in1, in0, in3, in2, in5, in4, in7, in6, +@@ -813,14 +808,14 @@ static void hevc_idct_transpose_8x32_to_32x8(int16_t *tmp_buf, int16_t *coeffs) + } + } + +-static void hevc_idct_32x32_lsx(int16_t *coeffs) ++void ff_hevc_idct_32x32_lsx(int16_t *coeffs, int col_limit) + { + uint8_t row_cnt, col_cnt; + int16_t *src = coeffs; + int16_t tmp_buf[8 * 32 + 31]; + int16_t *tmp_buf_ptr = tmp_buf + 31; + uint8_t round; +- uint8_t buf_pitch; ++ int32_t buf_pitch; + + /* Align pointer to 64 byte boundary */ + tmp_buf_ptr = (int16_t *)(((uintptr_t) tmp_buf_ptr) & ~(uintptr_t) 63); +@@ -845,23 +840,3 @@ static void hevc_idct_32x32_lsx(int16_t *coeffs) + hevc_idct_transpose_8x32_to_32x8(tmp_buf_ptr, src); + } + } +- +-void ff_hevc_idct_4x4_lsx(int16_t *coeffs, int col_limit) +-{ +- hevc_idct_4x4_lsx(coeffs); +-} +- +-void ff_hevc_idct_8x8_lsx(int16_t *coeffs, int col_limit) +-{ +- hevc_idct_8x8_lsx(coeffs); +-} +- +-void ff_hevc_idct_16x16_lsx(int16_t *coeffs, int col_limit) +-{ +- hevc_idct_16x16_lsx(coeffs); +-} +- +-void ff_hevc_idct_32x32_lsx(int16_t *coeffs, int col_limit) +-{ +- hevc_idct_32x32_lsx(coeffs); +-} +diff --git a/libavcodec/loongarch/hevc_lpf_sao_lsx.c b/libavcodec/loongarch/hevc_lpf_sao_lsx.c +index 556e45e1ff..fc10e8eda8 100644 +--- a/libavcodec/loongarch/hevc_lpf_sao_lsx.c ++++ b/libavcodec/loongarch/hevc_lpf_sao_lsx.c +@@ -1,6 +1,7 @@ + /* +- * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Copyright (c) 2022 Loongson Technology Corporation Limited + * Contributed by Lu Wang ++ * Hao Chen + * + * This file is part of FFmpeg. + * +@@ -22,26 +23,26 @@ + #include "libavutil/loongarch/loongson_intrinsics.h" + #include "hevcdsp_lsx.h" + +-static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, +- int32_t beta, int32_t *tc, +- uint8_t *p_is_pcm, uint8_t *q_is_pcm) ++void ff_hevc_loop_filter_luma_h_8_lsx(uint8_t *src, ptrdiff_t stride, ++ int32_t beta, int32_t *tc, ++ uint8_t *p_is_pcm, uint8_t *q_is_pcm) + { +- uint8_t *p3 = src - (stride << 2); +- uint8_t *p2 = src - ((stride << 1) + stride); +- uint8_t *p1 = src - (stride << 1); ++ ptrdiff_t stride_2x = (stride << 1); ++ ptrdiff_t stride_4x = (stride << 2); ++ ptrdiff_t stride_3x = stride_2x + stride; ++ uint8_t *p3 = src - stride_4x; ++ uint8_t *p2 = src - stride_3x; ++ uint8_t *p1 = src - stride_2x; + uint8_t *p0 = src - stride; + uint8_t *q0 = src; + uint8_t *q1 = src + stride; +- uint8_t *q2 = src + (stride << 1); +- uint8_t *q3 = src + (stride << 1) + stride; ++ uint8_t *q2 = src + stride_2x; ++ uint8_t *q3 = src + stride_3x; + uint8_t flag0, flag1; + int32_t dp00, dq00, dp30, dq30, d00, d30, d0030, d0434; + int32_t dp04, dq04, dp34, dq34, d04, d34; + int32_t tc0, p_is_pcm0, q_is_pcm0, beta30, beta20, tc250; + int32_t tc4, p_is_pcm4, q_is_pcm4, tc254, tmp; +- const int32_t stride_2x = (stride << 1); +- const int32_t stride_4x = (stride << 2); +- const int32_t stride_3x = stride_2x + stride; + + __m128i dst0, dst1, dst2, dst3, dst4, dst5; + __m128i cmp0, cmp1, cmp2, cmp3, p_is_pcm_vec, q_is_pcm_vec; +@@ -80,7 +81,8 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + + if ((!p_is_pcm0 || !p_is_pcm4 || !q_is_pcm0 || !q_is_pcm4) && + (!d0030 || !d0434)) { +- DUP4_ARG2(__lsx_vld, p3, 0, p2, 0, p1, 0, p0, 0, p3_src, p2_src, p1_src, p0_src); ++ DUP4_ARG2(__lsx_vld, p3, 0, p2, 0, p1, 0, p0, 0, ++ p3_src, p2_src, p1_src, p0_src); + DUP2_ARG1(__lsx_vreplgr2vr_d, q_is_pcm0, q_is_pcm4, cmp0, cmp1); + q_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); + q_is_pcm_vec = __lsx_vseqi_d(q_is_pcm_vec, 0); +@@ -95,19 +97,22 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + DUP2_ARG1(__lsx_vreplgr2vr_h, tc0, tc4, cmp0, cmp1); + DUP4_ARG2(__lsx_vilvl_b, zero, p3_src, zero, p2_src, zero, p1_src, zero, + p0_src, p3_src, p2_src, p1_src, p0_src); +- DUP4_ARG2(__lsx_vld, q0, 0, q1, 0, q2, 0, q3, 0, q0_src, q1_src, q2_src, q3_src); +- flag0 = abs(p3[0] - p0[0]) + abs(q3[0] - q0[0]) < beta30 && abs(p0[0] - q0[0]) +- < tc250; ++ DUP4_ARG2(__lsx_vld, q0, 0, q1, 0, q2, 0, q3, 0, ++ q0_src, q1_src, q2_src, q3_src); ++ flag0 = abs(p3[0] - p0[0]) + abs(q3[0] - q0[0]) < beta30 && ++ abs(p0[0] - q0[0]) < tc250; + flag0 = flag0 && (abs(p3[3] - p0[3]) + abs(q3[3] - q0[3]) < beta30 && +- abs(p0[3] - q0[3]) < tc250 && (d00 << 1) < beta20 && (d30 << 1) < beta20); ++ abs(p0[3] - q0[3]) < tc250 && (d00 << 1) < beta20 && ++ (d30 << 1) < beta20); + tc_pos = __lsx_vpackev_d(cmp1, cmp0); +- DUP4_ARG2(__lsx_vilvl_b, zero, q0_src, zero, q1_src, zero, q2_src, zero, q3_src, +- q0_src, q1_src, q2_src, q3_src); ++ DUP4_ARG2(__lsx_vilvl_b, zero, q0_src, zero, q1_src, zero, q2_src, ++ zero, q3_src, q0_src, q1_src, q2_src, q3_src); + +- flag1 = abs(p3[4] - p0[4]) + abs(q3[4] - q0[4]) < beta30 && abs(p0[4] - q0[4]) +- < tc254; ++ flag1 = abs(p3[4] - p0[4]) + abs(q3[4] - q0[4]) < beta30 && ++ abs(p0[4] - q0[4]) < tc254; + flag1 = flag1 && (abs(p3[7] - p0[7]) + abs(q3[7] - q0[7]) < beta30 && +- abs(p0[7] - q0[7]) < tc254 && (d04 << 1) < beta20 && (d34 << 1) < beta20); ++ abs(p0[7] - q0[7]) < tc254 && (d04 << 1) < beta20 && ++ (d34 << 1) < beta20); + DUP2_ARG1(__lsx_vreplgr2vr_w, flag0, flag1, cmp0, cmp1); + cmp2 = __lsx_vpackev_w(cmp1, cmp0); + cmp2 = __lsx_vseqi_w(cmp2, 0); +@@ -118,7 +123,8 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + tc_neg = __lsx_vneg_h(tc_pos); + + /* p part */ +- DUP2_ARG2(__lsx_vadd_h, p1_src, p0_src, temp0, q0_src, temp0, temp0); ++ DUP2_ARG2(__lsx_vadd_h, p1_src, p0_src, temp0, q0_src, ++ temp0, temp0); + temp1 = __lsx_vadd_h(p3_src, p2_src); + temp1 = __lsx_vslli_h(temp1, 1); + DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, temp0, temp1, temp1); +@@ -134,19 +140,21 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + dst1 = __lsx_vadd_h(temp2, p1_src); + + temp1 = __lsx_vslli_h(temp0, 1); +- DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, q1_src, temp1, temp1); ++ DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, q1_src, ++ temp1, temp1); + temp1 = __lsx_vsrari_h(temp1, 3); + temp2 = __lsx_vsub_h(temp1, p0_src); + temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst2 = __lsx_vadd_h(temp2, p0_src); + + p_is_pcm_vec = __lsx_vnor_v(p_is_pcm_vec, p_is_pcm_vec); +- DUP2_ARG3(__lsx_vbitsel_v, dst0, p2_src, p_is_pcm_vec, dst1, p1_src, +- p_is_pcm_vec, dst0, dst1); ++ DUP2_ARG3(__lsx_vbitsel_v, dst0, p2_src, p_is_pcm_vec, dst1, ++ p1_src, p_is_pcm_vec, dst0, dst1); + dst2 = __lsx_vbitsel_v(dst2, p0_src, p_is_pcm_vec); + + /* q part */ +- DUP2_ARG2(__lsx_vadd_h, q1_src, p0_src, temp0, q0_src, temp0, temp0); ++ DUP2_ARG2(__lsx_vadd_h, q1_src, p0_src, temp0, q0_src, ++ temp0, temp0); + temp1 = __lsx_vadd_h(q3_src, q2_src); + temp1 = __lsx_vslli_h(temp1, 1); + DUP2_ARG2(__lsx_vadd_h, temp1, q2_src, temp1, temp0, temp1, temp1); +@@ -162,15 +170,16 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + dst4 = __lsx_vadd_h(temp2, q1_src); + + temp0 = __lsx_vslli_h(temp0, 1); +- DUP2_ARG2(__lsx_vadd_h, temp0, p1_src, temp1, q2_src, temp1, temp1); ++ DUP2_ARG2(__lsx_vadd_h, temp0, p1_src, temp1, q2_src, ++ temp1, temp1); + temp1 = __lsx_vsrari_h(temp1, 3); + temp2 = __lsx_vsub_h(temp1, q0_src); + temp2 = __lsx_vclip_h(temp2, tc_neg, tc_pos); + dst3 = __lsx_vadd_h(temp2, q0_src); + + q_is_pcm_vec = __lsx_vnor_v(q_is_pcm_vec, q_is_pcm_vec); +- DUP2_ARG3(__lsx_vbitsel_v, dst3, q0_src, q_is_pcm_vec, dst4, q1_src, +- q_is_pcm_vec, dst3, dst4); ++ DUP2_ARG3(__lsx_vbitsel_v, dst3, q0_src, q_is_pcm_vec, dst4, ++ q1_src, q_is_pcm_vec, dst3, dst4); + dst5 = __lsx_vbitsel_v(dst5, q2_src, q_is_pcm_vec); + + /* pack results to 8 bit */ +@@ -178,11 +187,13 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + dst2 = __lsx_vpickev_b(dst5, dst4); + + /* pack src to 8 bit */ +- DUP2_ARG2(__lsx_vpickev_b, p1_src, p2_src, q0_src, p0_src, dst3, dst4); ++ DUP2_ARG2(__lsx_vpickev_b, p1_src, p2_src, q0_src, p0_src, ++ dst3, dst4); + dst5 = __lsx_vpickev_b(q2_src, q1_src); + + cmp3 = __lsx_vnor_v(cmp3, cmp3); +- DUP2_ARG3(__lsx_vbitsel_v, dst0, dst3, cmp3, dst1, dst4, cmp3, dst0, dst1); ++ DUP2_ARG3(__lsx_vbitsel_v, dst0, dst3, cmp3, dst1, dst4, cmp3, ++ dst0, dst1); + dst2 = __lsx_vbitsel_v(dst2, dst5, cmp3); + + __lsx_vstelm_d(dst0, p2, 0, 0); +@@ -195,12 +206,14 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + } else if (flag0 == flag1) { /* weak only */ + /* weak filter */ + tc_neg = __lsx_vneg_h(tc_pos); +- DUP2_ARG2(__lsx_vsub_h, q0_src, p0_src, q1_src, p1_src, diff0, diff1); +- DUP2_ARG2(__lsx_vadd_h, __lsx_vslli_h(diff0, 3), diff0, __lsx_vslli_h( +- diff1, 1), diff1, diff0, diff1); ++ DUP2_ARG2(__lsx_vsub_h, q0_src, p0_src, q1_src, p1_src, ++ diff0, diff1); ++ DUP2_ARG2(__lsx_vadd_h, __lsx_vslli_h(diff0, 3), diff0, ++ __lsx_vslli_h(diff1, 1), diff1, diff0, diff1); + delta0 = __lsx_vsub_h(diff0, diff1); + delta0 = __lsx_vsrari_h(delta0, 4); +- temp1 = __lsx_vadd_h(__lsx_vslli_h(tc_pos, 3), __lsx_vslli_h(tc_pos, 1)); ++ temp1 = __lsx_vadd_h(__lsx_vslli_h(tc_pos, 3), ++ __lsx_vslli_h(tc_pos, 1)); + abs_delta0 = __lsx_vadda_h(delta0, zero); + abs_delta0 = __lsx_vsle_hu(temp1, abs_delta0); + abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); +@@ -208,8 +221,8 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + delta0 = __lsx_vclip_h(delta0, tc_neg, tc_pos); + temp2 = __lsx_vadd_h(delta0, p0_src); + temp2 = __lsx_vclip255_h(temp2); +- temp0 = __lsx_vbitsel_v(temp2, p0_src, __lsx_vnor_v(p_is_pcm_vec, +- p_is_pcm_vec)); ++ temp0 = __lsx_vbitsel_v(temp2, p0_src, ++ __lsx_vnor_v(p_is_pcm_vec, p_is_pcm_vec)); + temp2 = __lsx_vsub_h(q0_src, delta0); + temp2 = __lsx_vclip255_h(temp2); + temp2 = __lsx_vbitsel_v(temp2, q0_src, __lsx_vnor_v(q_is_pcm_vec, +@@ -218,40 +231,47 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + q_is_pcm_vec, p_is_pcm_vec, q_is_pcm_vec); + + tmp = (beta + (beta >> 1)) >> 3; +- DUP2_ARG1(__lsx_vreplgr2vr_d, dp00 + dp30 < tmp, dp04 + dp34 < tmp, cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_d, dp00 + dp30 < tmp, dp04 + dp34 < tmp, ++ cmp0, cmp1); + cmp0 = __lsx_vpackev_d(cmp1, cmp0); + cmp0 = __lsx_vseqi_d(cmp0, 0); + p_is_pcm_vec = __lsx_vor_v(p_is_pcm_vec, cmp0); + +- DUP2_ARG1(__lsx_vreplgr2vr_d, dq00 + dq30 < tmp, dq04 + dq34 < tmp, cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_d, dq00 + dq30 < tmp, dq04 + dq34 < tmp, ++ cmp0, cmp1); + cmp0 = __lsx_vpackev_d(cmp1, cmp0); + cmp0 = __lsx_vseqi_d(cmp0, 0); + q_is_pcm_vec = __lsx_vor_v(q_is_pcm_vec, cmp0); + tc_pos = __lsx_vsrai_h(tc_pos, 1); + tc_neg = __lsx_vneg_h(tc_pos); + +- DUP2_ARG2(__lsx_vavgr_hu, p2_src, p0_src, q0_src, q2_src, delta1, delta2); +- DUP2_ARG2(__lsx_vsub_h, delta1, p1_src, delta2, q1_src, delta1, delta2); ++ DUP2_ARG2(__lsx_vavgr_hu, p2_src, p0_src, q0_src, q2_src, ++ delta1, delta2); ++ DUP2_ARG2(__lsx_vsub_h, delta1, p1_src, delta2, q1_src, ++ delta1, delta2); + delta1 = __lsx_vadd_h(delta1, delta0); + delta2 = __lsx_vsub_h(delta2, delta0); + DUP2_ARG2(__lsx_vsrai_h, delta1, 1, delta2, 1, delta1, delta2); +- DUP2_ARG3(__lsx_vclip_h, delta1, tc_neg, tc_pos, delta2, tc_neg, tc_pos, ++ DUP2_ARG3(__lsx_vclip_h, delta1, tc_neg, tc_pos, delta2, ++ tc_neg, tc_pos, delta1, delta2); ++ DUP2_ARG2(__lsx_vadd_h, p1_src, delta1, q1_src, delta2, + delta1, delta2); +- DUP2_ARG2(__lsx_vadd_h, p1_src, delta1, q1_src, delta2, delta1, delta2); + DUP2_ARG1(__lsx_vclip255_h, delta1, delta2, delta1, delta2); +- DUP2_ARG3(__lsx_vbitsel_v, delta1, p1_src, p_is_pcm_vec, delta2, q1_src, +- q_is_pcm_vec, delta1, delta2); ++ DUP2_ARG3(__lsx_vbitsel_v, delta1, p1_src, p_is_pcm_vec, delta2, ++ q1_src, q_is_pcm_vec, delta1, delta2); + + abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); +- DUP4_ARG3(__lsx_vbitsel_v, delta1, p1_src, abs_delta0, temp0, p0_src, +- abs_delta0, temp2, q0_src, abs_delta0, delta2, q1_src, abs_delta0, +- dst1, dst2, dst3, dst4); ++ DUP4_ARG3(__lsx_vbitsel_v, delta1, p1_src, abs_delta0, temp0, ++ p0_src, abs_delta0, temp2, q0_src, abs_delta0, delta2, ++ q1_src, abs_delta0, dst1, dst2, dst3, dst4); + /* pack results to 8 bit */ + DUP2_ARG2(__lsx_vpickev_b, dst2, dst1, dst4, dst3, dst0, dst1); + /* pack src to 8 bit */ +- DUP2_ARG2(__lsx_vpickev_b, p0_src, p1_src, q1_src, q0_src, dst2, dst3); ++ DUP2_ARG2(__lsx_vpickev_b, p0_src, p1_src, q1_src, q0_src, ++ dst2, dst3); + cmp3 = __lsx_vnor_v(cmp3, cmp3); +- DUP2_ARG3(__lsx_vbitsel_v, dst0, dst2, cmp3, dst1, dst3, cmp3, dst0, dst1); ++ DUP2_ARG3(__lsx_vbitsel_v, dst0, dst2, cmp3, dst1, dst3, cmp3, ++ dst0, dst1); + + p2 += stride; + __lsx_vstelm_d(dst0, p2, 0, 0); +@@ -265,7 +285,8 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + tc_neg = __lsx_vneg_h(tc_pos); + + /* p part */ +- DUP2_ARG2(__lsx_vadd_h, p1_src, p0_src, temp0, q0_src, temp0, temp0); ++ DUP2_ARG2(__lsx_vadd_h, p1_src, p0_src, temp0, q0_src, ++ temp0, temp0); + temp1 = __lsx_vadd_h(p3_src, p2_src); + temp1 = __lsx_vslli_h(temp1, 1); + DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, temp0, temp1, temp1); +@@ -288,12 +309,13 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + dst2 = __lsx_vadd_h(temp2, p0_src); + + p_is_pcm_vec = __lsx_vnor_v(p_is_pcm_vec, p_is_pcm_vec); +- DUP2_ARG3(__lsx_vbitsel_v, dst0, p2_src, p_is_pcm_vec, dst1, p1_src, +- p_is_pcm_vec, dst0, dst1); ++ DUP2_ARG3(__lsx_vbitsel_v, dst0, p2_src, p_is_pcm_vec, dst1, ++ p1_src, p_is_pcm_vec, dst0, dst1); + dst2 = __lsx_vbitsel_v(dst2, p0_src, p_is_pcm_vec); + + /* q part */ +- DUP2_ARG2(__lsx_vadd_h, q1_src, p0_src, temp0, q0_src, temp0, temp0); ++ DUP2_ARG2(__lsx_vadd_h, q1_src, p0_src, temp0, q0_src, ++ temp0, temp0); + temp1 = __lsx_vadd_h(q3_src, q2_src); + temp1 = __lsx_vslli_h(temp1, 1); + DUP2_ARG2(__lsx_vadd_h, temp1, q2_src, temp1, temp0, temp1, temp1); +@@ -316,8 +338,8 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + dst3 = __lsx_vadd_h(temp2, q0_src); + + q_is_pcm_vec = __lsx_vnor_v(q_is_pcm_vec, q_is_pcm_vec); +- DUP2_ARG3(__lsx_vbitsel_v, dst3, q0_src, q_is_pcm_vec, dst4, q1_src, +- q_is_pcm_vec, dst3, dst4); ++ DUP2_ARG3(__lsx_vbitsel_v, dst3, q0_src, q_is_pcm_vec, dst4, ++ q1_src, q_is_pcm_vec, dst3, dst4); + dst5 = __lsx_vbitsel_v(dst5, q2_src, q_is_pcm_vec); + + /* pack strong results to 8 bit */ +@@ -329,12 +351,14 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + tc_pos = __lsx_vsrai_h(tc_pos, 1); + tc_neg = __lsx_vneg_h(tc_pos); + +- DUP2_ARG2(__lsx_vsub_h, q0_src, p0_src, q1_src, p1_src, diff0, diff1); +- DUP2_ARG2(__lsx_vadd_h, __lsx_vslli_h(diff0, 3), diff0, __lsx_vslli_h( +- diff1, 1), diff1, diff0, diff1); ++ DUP2_ARG2(__lsx_vsub_h, q0_src, p0_src, q1_src, p1_src, ++ diff0, diff1); ++ DUP2_ARG2(__lsx_vadd_h, __lsx_vslli_h(diff0, 3), diff0, ++ __lsx_vslli_h(diff1, 1), diff1, diff0, diff1); + delta0 = __lsx_vsub_h(diff0, diff1); + delta0 = __lsx_vsrari_h(delta0, 4); +- temp1 = __lsx_vadd_h(__lsx_vslli_h(tc_pos, 3), __lsx_vslli_h(tc_pos, 1)); ++ temp1 = __lsx_vadd_h(__lsx_vslli_h(tc_pos, 3), ++ __lsx_vslli_h(tc_pos, 1)); + abs_delta0 = __lsx_vadda_h(delta0, zero); + abs_delta0 = __lsx_vsle_hu(temp1, abs_delta0); + abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); +@@ -349,47 +373,56 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + temp2 = __lsx_vbitsel_v(temp2, q0_src, q_is_pcm_vec); + + tmp = (beta + (beta >> 1)) >> 3; +- DUP2_ARG1(__lsx_vreplgr2vr_d, dp00 + dp30 < tmp, dp04 + dp34 < tmp, cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_d, dp00 + dp30 < tmp, dp04 + dp34 < tmp, ++ cmp0, cmp1); + cmp0 = __lsx_vpackev_d(cmp1, cmp0); + p_is_pcm_vec = __lsx_vor_v(p_is_pcm_vec, __lsx_vseqi_d(cmp0, 0)); +- DUP2_ARG1(__lsx_vreplgr2vr_d, dq00 + dq30 < tmp, dq04 + dq34 < tmp, cmp0, cmp1); ++ DUP2_ARG1(__lsx_vreplgr2vr_d, dq00 + dq30 < tmp, dq04 + dq34 < tmp, ++ cmp0, cmp1); + cmp0 = __lsx_vpackev_d(cmp1, cmp0); + q_is_pcm_vec = __lsx_vor_v(q_is_pcm_vec, __lsx_vseqi_d(cmp0, 0)); + + tc_pos = __lsx_vsrai_h(tc_pos, 1); + tc_neg = __lsx_vneg_h(tc_pos); + +- DUP2_ARG2(__lsx_vavgr_hu, p2_src, p0_src, q0_src, q2_src, delta1, delta2); +- DUP2_ARG2(__lsx_vsub_h, delta1, p1_src, delta2, q1_src, delta1, delta2); ++ DUP2_ARG2(__lsx_vavgr_hu, p2_src, p0_src, q0_src, q2_src, ++ delta1, delta2); ++ DUP2_ARG2(__lsx_vsub_h, delta1, p1_src, delta2, q1_src, ++ delta1, delta2); + delta1 = __lsx_vadd_h(delta1, delta0); + delta2 = __lsx_vsub_h(delta2, delta0); + DUP2_ARG2(__lsx_vsrai_h, delta1, 1, delta2, 1, delta1, delta2); +- DUP2_ARG3(__lsx_vclip_h, delta1, tc_neg, tc_pos, delta2, tc_neg, tc_pos, ++ DUP2_ARG3(__lsx_vclip_h, delta1, tc_neg, tc_pos, delta2, tc_neg, ++ tc_pos, delta1, delta2); ++ DUP2_ARG2(__lsx_vadd_h, p1_src, delta1, q1_src, delta2, + delta1, delta2); +- DUP2_ARG2(__lsx_vadd_h, p1_src, delta1, q1_src, delta2, delta1, delta2); + DUP2_ARG1(__lsx_vclip255_h, delta1, delta2, delta1, delta2); +- DUP2_ARG3(__lsx_vbitsel_v, delta1, p1_src, p_is_pcm_vec, delta2, q1_src, +- q_is_pcm_vec, delta1, delta2); ++ DUP2_ARG3(__lsx_vbitsel_v, delta1, p1_src, p_is_pcm_vec, delta2, ++ q1_src, q_is_pcm_vec, delta1, delta2); + abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); +- DUP4_ARG3(__lsx_vbitsel_v, delta1, p1_src, abs_delta0, delta2, q1_src, +- abs_delta0, temp0, p0_src, abs_delta0, temp2, q0_src, +- abs_delta0, delta1, delta2, temp0, temp2); ++ DUP4_ARG3(__lsx_vbitsel_v, delta1, p1_src, abs_delta0, delta2, ++ q1_src, abs_delta0, temp0, p0_src, abs_delta0, temp2, ++ q0_src, abs_delta0, delta1, delta2, temp0, temp2); + /* weak filter ends */ + + /* pack weak results to 8 bit */ +- DUP2_ARG2(__lsx_vpickev_b, delta1, p2_src, temp2, temp0, dst3, dst4); ++ DUP2_ARG2(__lsx_vpickev_b, delta1, p2_src, temp2, temp0, ++ dst3, dst4); + dst5 = __lsx_vpickev_b(q2_src, delta2); + + /* select between weak or strong */ +- DUP2_ARG3(__lsx_vbitsel_v, dst0, dst3, cmp2, dst1, dst4, cmp2, dst0, dst1); ++ DUP2_ARG3(__lsx_vbitsel_v, dst0, dst3, cmp2, dst1, dst4, cmp2, ++ dst0, dst1); + dst2 = __lsx_vbitsel_v(dst2, dst5, cmp2); + + /* pack src to 8 bit */ +- DUP2_ARG2(__lsx_vpickev_b, p1_src, p2_src, q0_src, p0_src, dst3, dst4); ++ DUP2_ARG2(__lsx_vpickev_b, p1_src, p2_src, q0_src, p0_src, ++ dst3, dst4); + dst5 = __lsx_vpickev_b(q2_src, q1_src); + + cmp3 = __lsx_vnor_v(cmp3, cmp3); +- DUP2_ARG3(__lsx_vbitsel_v, dst0, dst3, cmp3, dst1, dst4, cmp3, dst0, dst1); ++ DUP2_ARG3(__lsx_vbitsel_v, dst0, dst3, cmp3, dst1, dst4, cmp3, ++ dst0, dst1); + dst2 = __lsx_vbitsel_v(dst2, dst5, cmp3); + + __lsx_vstelm_d(dst0, p2, 0, 0); +@@ -402,13 +435,13 @@ static void hevc_loopfilter_luma_hor_lsx(uint8_t *src, int32_t stride, + } + } + +-static void hevc_loopfilter_luma_ver_lsx(uint8_t *src, int32_t stride, +- int32_t beta, int32_t *tc, +- uint8_t *p_is_pcm, uint8_t *q_is_pcm) ++void ff_hevc_loop_filter_luma_v_8_lsx(uint8_t *src, ptrdiff_t stride, ++ int32_t beta, int32_t *tc, ++ uint8_t *p_is_pcm, uint8_t *q_is_pcm) + { +- const int32_t stride_2x = (stride << 1); +- const int32_t stride_4x = (stride << 2); +- const int32_t stride_3x = stride_2x + stride; ++ ptrdiff_t stride_2x = (stride << 1); ++ ptrdiff_t stride_4x = (stride << 2); ++ ptrdiff_t stride_3x = stride_2x + stride; + uint8_t *p3 = src; + uint8_t *p2 = src + stride_3x; + uint8_t *p1 = src + stride_4x; +@@ -510,8 +543,8 @@ static void hevc_loopfilter_luma_ver_lsx(uint8_t *src, int32_t stride, + /* strong filter */ + tc_neg = __lsx_vneg_h(tc_pos); + /* p part */ +- DUP2_ARG2(__lsx_vadd_h, p1_src, p0_src, temp0, q0_src, temp0, temp0); +- ++ DUP2_ARG2(__lsx_vadd_h, p1_src, p0_src, temp0, q0_src, ++ temp0, temp0); + temp1 = __lsx_vadd_h(p3_src, p2_src); + temp1 = __lsx_vslli_h(temp1, 1); + DUP2_ARG2(__lsx_vadd_h, temp1, p2_src, temp1, temp0, temp1, temp1); +@@ -539,7 +572,8 @@ static void hevc_loopfilter_luma_ver_lsx(uint8_t *src, int32_t stride, + dst2 = __lsx_vbitsel_v(dst2, p0_src, p_is_pcm_vec); + + /* q part */ +- DUP2_ARG2(__lsx_vadd_h, q1_src, p0_src, temp0, q0_src, temp0, temp0); ++ DUP2_ARG2(__lsx_vadd_h, q1_src, p0_src, temp0, q0_src, ++ temp0, temp0); + temp1 = __lsx_vadd_h(q3_src, q2_src); + temp1 = __lsx_vslli_h(temp1, 1); + DUP2_ARG2(__lsx_vadd_h, temp1, q2_src, temp1, temp0, temp1, temp1); +@@ -571,12 +605,14 @@ static void hevc_loopfilter_luma_ver_lsx(uint8_t *src, int32_t stride, + tc_pos = __lsx_vsrai_h(tc_pos, 1); + tc_neg = __lsx_vneg_h(tc_pos); + +- DUP2_ARG2(__lsx_vsub_h, q0_src, p0_src, q1_src, p1_src, diff0, diff1); +- DUP2_ARG2(__lsx_vadd_h, __lsx_vslli_h(diff0, 3), diff0, __lsx_vslli_h( +- diff1, 1), diff1, diff0, diff1); ++ DUP2_ARG2(__lsx_vsub_h, q0_src, p0_src, q1_src, p1_src, ++ diff0, diff1); ++ DUP2_ARG2(__lsx_vadd_h, __lsx_vslli_h(diff0, 3), diff0, ++ __lsx_vslli_h(diff1, 1), diff1, diff0, diff1); + delta0 = __lsx_vsub_h(diff0, diff1); + delta0 = __lsx_vsrari_h(delta0, 4); +- temp1 = __lsx_vadd_h(__lsx_vslli_h(tc_pos, 3), __lsx_vslli_h(tc_pos, 1)); ++ temp1 = __lsx_vadd_h(__lsx_vslli_h(tc_pos, 3), ++ __lsx_vslli_h(tc_pos, 1)); + abs_delta0 = __lsx_vadda_h(delta0, zero); + abs_delta0 = __lsx_vsle_hu(temp1, abs_delta0); + abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); +@@ -605,27 +641,31 @@ static void hevc_loopfilter_luma_ver_lsx(uint8_t *src, int32_t stride, + tc_pos = __lsx_vsrai_h(tc_pos, 1); + tc_neg = __lsx_vneg_h(tc_pos); + +- DUP2_ARG2(__lsx_vavgr_hu, p2_src, p0_src, q0_src, q2_src, delta1, delta2); +- DUP2_ARG2(__lsx_vsub_h, delta1, p1_src, delta2, q1_src, delta1, delta2); ++ DUP2_ARG2(__lsx_vavgr_hu, p2_src, p0_src, q0_src, q2_src, ++ delta1, delta2); ++ DUP2_ARG2(__lsx_vsub_h, delta1, p1_src, delta2, q1_src, ++ delta1, delta2); + delta1 = __lsx_vadd_h(delta1, delta0); + delta2 = __lsx_vsub_h(delta2, delta0); + DUP2_ARG2(__lsx_vsrai_h, delta1, 1, delta2, 1, delta1, delta2); +- DUP2_ARG3(__lsx_vclip_h, delta1, tc_neg, tc_pos, delta2, tc_neg, tc_pos, ++ DUP2_ARG3(__lsx_vclip_h, delta1, tc_neg, tc_pos, delta2, tc_neg, ++ tc_pos, delta1, delta2); ++ DUP2_ARG2(__lsx_vadd_h, p1_src, delta1, q1_src, delta2, + delta1, delta2); +- DUP2_ARG2(__lsx_vadd_h, p1_src, delta1, q1_src, delta2, delta1, delta2); + DUP2_ARG1(__lsx_vclip255_h, delta1, delta2, delta1, delta2); +- DUP2_ARG3(__lsx_vbitsel_v, delta1, p1_src, p_is_pcm_vec, delta2, q1_src, +- q_is_pcm_vec, delta1, delta2); ++ DUP2_ARG3(__lsx_vbitsel_v, delta1, p1_src, p_is_pcm_vec, delta2, ++ q1_src, q_is_pcm_vec, delta1, delta2); + + abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); +- DUP4_ARG3(__lsx_vbitsel_v, delta1, p1_src, abs_delta0, temp0, p0_src, +- abs_delta0, temp2, q0_src, abs_delta0, delta2, q1_src, +- abs_delta0, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vbitsel_v, delta1, p1_src, abs_delta0, temp0, ++ p0_src, abs_delta0, temp2, q0_src, abs_delta0, delta2, ++ q1_src, abs_delta0, dst0, dst1, dst2, dst3); + /* weak filter ends */ + + cmp3 = __lsx_vnor_v(cmp3, cmp3); +- DUP4_ARG3(__lsx_vbitsel_v, dst0, p1_src, cmp3, dst1, p0_src, cmp3, dst2, +- q0_src, cmp3, dst3, q1_src, cmp3, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vbitsel_v, dst0, p1_src, cmp3, dst1, p0_src, ++ cmp3, dst2, q0_src, cmp3, dst3, q1_src, cmp3, ++ dst0, dst1, dst2, dst3); + DUP2_ARG2(__lsx_vpickev_b, dst2, dst0, dst3, dst1, dst0, dst1); + + /* transpose */ +@@ -650,7 +690,8 @@ static void hevc_loopfilter_luma_ver_lsx(uint8_t *src, int32_t stride, + tc_neg = __lsx_vneg_h(tc_pos); + + /* p part */ +- DUP2_ARG2(__lsx_vadd_h, p1_src, p0_src, temp0, q0_src, temp0, temp0); ++ DUP2_ARG2(__lsx_vadd_h, p1_src, p0_src, temp0, q0_src, ++ temp0, temp0); + + temp1 = __lsx_vadd_h(p3_src, p2_src); + temp1 = __lsx_vslli_h(temp1, 1); +@@ -711,13 +752,15 @@ static void hevc_loopfilter_luma_ver_lsx(uint8_t *src, int32_t stride, + tc_pos = __lsx_vsrai_h(tc_pos, 1); + tc_neg = __lsx_vneg_h(tc_pos); + +- DUP2_ARG2(__lsx_vsub_h, q0_src, p0_src, q1_src, p1_src, diff0, diff1); +- DUP2_ARG2(__lsx_vadd_h, __lsx_vslli_h(diff0, 3), diff0, __lsx_vslli_h( +- diff1, 1), diff1, diff0, diff1); ++ DUP2_ARG2(__lsx_vsub_h, q0_src, p0_src, q1_src, p1_src, ++ diff0, diff1); ++ DUP2_ARG2(__lsx_vadd_h, __lsx_vslli_h(diff0, 3), diff0, ++ __lsx_vslli_h(diff1, 1), diff1, diff0, diff1); + delta0 = __lsx_vsub_h(diff0, diff1); + delta0 = __lsx_vsrari_h(delta0, 4); + +- temp1 = __lsx_vadd_h(__lsx_vslli_h(tc_pos, 3), __lsx_vslli_h(tc_pos, 1)); ++ temp1 = __lsx_vadd_h(__lsx_vslli_h(tc_pos, 3), ++ __lsx_vslli_h(tc_pos, 1)); + abs_delta0 = __lsx_vadda_h(delta0, zero); + abs_delta0 = __lsx_vsle_hu(temp1, abs_delta0); + abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); +@@ -742,38 +785,44 @@ static void hevc_loopfilter_luma_ver_lsx(uint8_t *src, int32_t stride, + tc_pos = __lsx_vsrai_h(tc_pos, 1); + tc_neg = __lsx_vneg_h(tc_pos); + +- DUP2_ARG2(__lsx_vavgr_hu, p2_src, p0_src, q0_src, q2_src, delta1, delta2); +- DUP2_ARG2(__lsx_vsub_h, delta1, p1_src, delta2, q1_src, delta1, delta2); ++ DUP2_ARG2(__lsx_vavgr_hu, p2_src, p0_src, q0_src, q2_src, ++ delta1, delta2); ++ DUP2_ARG2(__lsx_vsub_h, delta1, p1_src, delta2, q1_src, ++ delta1, delta2); + delta1 = __lsx_vadd_h(delta1, delta0); + delta2 = __lsx_vsub_h(delta2, delta0); + DUP2_ARG2(__lsx_vsrai_h, delta1, 1, delta2, 1, delta1, delta2); +- DUP2_ARG3(__lsx_vclip_h, delta1, tc_neg, tc_pos, delta2, tc_neg, tc_pos, ++ DUP2_ARG3(__lsx_vclip_h, delta1, tc_neg, tc_pos, delta2, tc_neg, ++ tc_pos, delta1, delta2); ++ DUP2_ARG2(__lsx_vadd_h, p1_src, delta1, q1_src, delta2, + delta1, delta2); +- DUP2_ARG2(__lsx_vadd_h, p1_src, delta1, q1_src, delta2, delta1, delta2); + DUP2_ARG1(__lsx_vclip255_h, delta1, delta2, delta1, delta2); +- DUP2_ARG3(__lsx_vbitsel_v, delta1, p1_src, p_is_pcm_vec, delta2, q1_src, +- q_is_pcm_vec, delta1, delta2); ++ DUP2_ARG3(__lsx_vbitsel_v, delta1, p1_src, p_is_pcm_vec, delta2, ++ q1_src, q_is_pcm_vec, delta1, delta2); + + abs_delta0 = __lsx_vnor_v(abs_delta0, abs_delta0); +- DUP4_ARG3(__lsx_vbitsel_v, delta1, p1_src, abs_delta0, delta2, q1_src, +- abs_delta0, temp0, p0_src, abs_delta0, temp2, q0_src, abs_delta0, +- delta1, delta2, temp0, temp2); ++ DUP4_ARG3(__lsx_vbitsel_v, delta1, p1_src, abs_delta0, delta2, ++ q1_src, abs_delta0, temp0, p0_src, abs_delta0, temp2, ++ q0_src, abs_delta0, delta1, delta2, temp0, temp2); + /* weak filter ends*/ + + /* select between weak or strong */ +- DUP4_ARG3(__lsx_vbitsel_v, dst0, p2_src, cmp2, dst1, delta1, cmp2, dst2, +- temp0, cmp2, dst3, temp2, cmp2, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vbitsel_v, dst4, delta2, cmp2, dst5, q2_src, cmp2, dst4, dst5); ++ DUP4_ARG3(__lsx_vbitsel_v, dst0, p2_src, cmp2, dst1, delta1, ++ cmp2, dst2, temp0, cmp2, dst3, temp2, cmp2, ++ dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vbitsel_v, dst4, delta2, cmp2, dst5, q2_src, cmp2, ++ dst4, dst5); + } + + cmp3 = __lsx_vnor_v(cmp3, cmp3); + DUP4_ARG3(__lsx_vbitsel_v, dst0, p2_src, cmp3, dst1, p1_src, cmp3, dst2, + p0_src, cmp3, dst3, q0_src, cmp3, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vbitsel_v, dst4, q1_src, cmp3, dst5, q2_src, cmp3, dst4, dst5); ++ DUP2_ARG3(__lsx_vbitsel_v, dst4, q1_src, cmp3, dst5, q2_src, cmp3, ++ dst4, dst5); + + /* pack results to 8 bit */ +- DUP4_ARG2(__lsx_vpickev_b, dst2, dst0, dst3, dst1, dst4, dst4, dst5, dst5, +- dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vpickev_b, dst2, dst0, dst3, dst1, dst4, dst4, dst5, ++ dst5, dst0, dst1, dst2, dst3); + + /* transpose */ + DUP2_ARG2(__lsx_vilvl_b, dst1, dst0, dst3, dst2, dst4, dst6); +@@ -811,9 +860,9 @@ static void hevc_loopfilter_luma_ver_lsx(uint8_t *src, int32_t stride, + } + } + +-static void hevc_loopfilter_chroma_hor_lsx(uint8_t *src, int32_t stride, +- int32_t *tc, uint8_t *p_is_pcm, +- uint8_t *q_is_pcm) ++void ff_hevc_loop_filter_chroma_h_8_lsx(uint8_t *src, ptrdiff_t stride, ++ int32_t *tc, uint8_t *p_is_pcm, ++ uint8_t *q_is_pcm) + { + uint8_t *p1_ptr = src - (stride << 1); + uint8_t *p0_ptr = src - stride; +@@ -837,8 +886,10 @@ static void hevc_loopfilter_chroma_hor_lsx(uint8_t *src, int32_t stride, + q_is_pcm_vec = __lsx_vpackev_d(cmp1, cmp0); + q_is_pcm_vec = __lsx_vseqi_d(q_is_pcm_vec, 0); + +- DUP4_ARG2(__lsx_vld, p1_ptr, 0, p0_ptr, 0, q0_ptr, 0, q1_ptr, 0, p1, p0, q0, q1); +- DUP4_ARG2(__lsx_vilvl_b, zero, p1, zero, p0, zero, q0, zero, q1, p1, p0, q0, q1); ++ DUP4_ARG2(__lsx_vld, p1_ptr, 0, p0_ptr, 0, q0_ptr, 0, q1_ptr, 0, ++ p1, p0, q0, q1); ++ DUP4_ARG2(__lsx_vilvl_b, zero, p1, zero, p0, zero, q0, zero, q1, ++ p1, p0, q0, q1); + DUP2_ARG2(__lsx_vsub_h, q0, p0, p1, q1, temp0, temp1); + temp0 = __lsx_vslli_h(temp0, 2); + temp0 = __lsx_vadd_h(temp0, temp1); +@@ -855,20 +906,21 @@ static void hevc_loopfilter_chroma_hor_lsx(uint8_t *src, int32_t stride, + temp1 = __lsx_vbitsel_v(temp1, q0, q_is_pcm_vec); + + tc_pos = __lsx_vslei_d(tc_pos, 0); +- DUP2_ARG3(__lsx_vbitsel_v, temp0, p0, tc_pos, temp1, q0, tc_pos, temp0, temp1); ++ DUP2_ARG3(__lsx_vbitsel_v, temp0, p0, tc_pos, temp1, q0, tc_pos, ++ temp0, temp1); + temp0 = __lsx_vpickev_b(temp1, temp0); + __lsx_vstelm_d(temp0, p0_ptr, 0, 0); + __lsx_vstelm_d(temp0, p0_ptr + stride, 0, 1); + } + } + +-static void hevc_loopfilter_chroma_ver_lsx(uint8_t *src, int32_t stride, +- int32_t *tc, uint8_t *p_is_pcm, +- uint8_t *q_is_pcm) ++void ff_hevc_loop_filter_chroma_v_8_lsx(uint8_t *src, ptrdiff_t stride, ++ int32_t *tc, uint8_t *p_is_pcm, ++ uint8_t *q_is_pcm) + { +- const int32_t stride_2x = (stride << 1); +- const int32_t stride_4x = (stride << 2); +- const int32_t stride_3x = stride_2x + stride; ++ ptrdiff_t stride_2x = (stride << 1); ++ ptrdiff_t stride_4x = (stride << 2); ++ ptrdiff_t stride_3x = stride_2x + stride; + __m128i cmp0, cmp1, p_is_pcm_vec, q_is_pcm_vec; + __m128i src0, src1, src2, src3, src4, src5, src6, src7; + __m128i p1, p0, q0, q1; +@@ -897,7 +949,8 @@ static void hevc_loopfilter_chroma_ver_lsx(uint8_t *src, int32_t stride, + src -= stride_4x; + LSX_TRANSPOSE8x4_B(src0, src1, src2, src3, src4, src5, src6, src7, + p1, p0, q0, q1); +- DUP4_ARG2(__lsx_vilvl_b, zero, p1, zero, p0, zero, q0, zero, q1, p1, p0, q0, q1); ++ DUP4_ARG2(__lsx_vilvl_b, zero, p1, zero, p0, zero, q0, zero, q1, ++ p1, p0, q0, q1); + + DUP2_ARG2(__lsx_vsub_h, q0, p0, p1, q1, temp0, temp1); + temp0 = __lsx_vslli_h(temp0, 2); +@@ -908,13 +961,14 @@ static void hevc_loopfilter_chroma_ver_lsx(uint8_t *src, int32_t stride, + temp0 = __lsx_vadd_h(p0, delta); + temp1 = __lsx_vsub_h(q0, delta); + DUP2_ARG1(__lsx_vclip255_h, temp0, temp1, temp0, temp1); +- DUP2_ARG2(__lsx_vnor_v, p_is_pcm_vec, p_is_pcm_vec, q_is_pcm_vec, q_is_pcm_vec, +- p_is_pcm_vec, q_is_pcm_vec); +- DUP2_ARG3(__lsx_vbitsel_v, temp0, p0, p_is_pcm_vec, temp1, q0, q_is_pcm_vec, +- temp0, temp1); ++ DUP2_ARG2(__lsx_vnor_v, p_is_pcm_vec, p_is_pcm_vec, q_is_pcm_vec, ++ q_is_pcm_vec, p_is_pcm_vec, q_is_pcm_vec); ++ DUP2_ARG3(__lsx_vbitsel_v, temp0, p0, p_is_pcm_vec, temp1, q0, ++ q_is_pcm_vec, temp0, temp1); + + tc_pos = __lsx_vslei_d(tc_pos, 0); +- DUP2_ARG3(__lsx_vbitsel_v, temp0, p0, tc_pos, temp1, q0, tc_pos, temp0, temp1); ++ DUP2_ARG3(__lsx_vbitsel_v, temp0, p0, tc_pos, temp1, q0, tc_pos, ++ temp0, temp1); + temp0 = __lsx_vpackev_b(temp1, temp0); + + src += 1; +@@ -961,24 +1015,25 @@ static void hevc_sao_edge_filter_0degree_4width_lsx(uint8_t *dst, + src0 = __lsx_vshuf_b(zero, src_minus10, shuf1); + src_plus10 = __lsx_vshuf_b(zero, src_minus10, shuf2); + +- DUP2_ARG2(__lsx_vseq_b, src0, src_minus10, src0, src_plus10, cmp_minus10, +- cmp_minus11); +- DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- DUP2_ARG2(__lsx_vsle_bu, src0, src_minus10, src0, src_plus10, cmp_minus10, +- cmp_minus11); +- DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ DUP2_ARG2(__lsx_vseq_b, src0, src_minus10, src0, src_plus10, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, ++ cmp_minus11, diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src0, src_minus10, src0, src_plus10, + cmp_minus10, cmp_minus11); +- DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, ++ cmp_minus11, cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, ++ diff_minus11, const1, cmp_minus11, diff_minus10, diff_minus11); + + offset = __lsx_vadd_b(diff_minus10, diff_minus11); + offset = __lsx_vaddi_bu(offset, 2); + + /* load in advance */ +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src_minus10, src_minus11); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, ++ src_minus10, src_minus11); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, ++ sao_offset, sao_offset, offset, offset, offset); + src0 = __lsx_vxori_b(src0, 128); + dst0 = __lsx_vsadd_b(src0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -1041,32 +1096,33 @@ static void hevc_sao_edge_filter_0degree_8width_lsx(uint8_t *dst, + + for (height -= 2; height; height -= 2) { + src += src_stride_2x; +- DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf1, zeros, src_minus11, shuf1, +- src0, src1); +- DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, shuf2, +- src_plus10, src_plus11); +- DUP2_ARG2(__lsx_vpickev_d, src_minus11, src_minus10, src_plus11, src_plus10, +- src_minus10, src_plus10); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf1, zeros, ++ src_minus11, shuf1, src0, src1); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, ++ src_minus11, shuf2, src_plus10, src_plus11); ++ DUP2_ARG2(__lsx_vpickev_d, src_minus11, src_minus10, src_plus11, ++ src_plus10, src_minus10, src_plus10); + src0 = __lsx_vpickev_d(src1, src0); + +- DUP2_ARG2(__lsx_vseq_b, src0, src_minus10, src0, src_plus10, cmp_minus10, +- cmp_minus11); +- DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- DUP2_ARG2(__lsx_vsle_bu, src0, src_minus10, src0, src_plus10, cmp_minus10, +- cmp_minus11); +- DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, ++ DUP2_ARG2(__lsx_vseq_b, src0, src_minus10, src0, src_plus10, + cmp_minus10, cmp_minus11); +- DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, ++ cmp_minus11, diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src0, src_minus10, src0, src_plus10, ++ cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, ++ cmp_minus11, cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, ++ diff_minus11, const1, cmp_minus11, diff_minus10, diff_minus11); + + offset = __lsx_vadd_b(diff_minus10, diff_minus11); + offset = __lsx_vaddi_bu(offset, 2); + + /* load in advance */ +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src_minus10, src_minus11); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, ++ src_minus10, src_minus11); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, ++ sao_offset, offset, offset, offset); + src0 = __lsx_vxori_b(src0, 128); + dst0 = __lsx_vsadd_b(src0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -1076,12 +1132,12 @@ static void hevc_sao_edge_filter_0degree_8width_lsx(uint8_t *dst, + dst += dst_stride_2x; + } + +- DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf1, zeros, src_minus11, shuf1, +- src0, src1); +- DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, shuf2, +- src_plus10, src_plus11); +- DUP2_ARG2(__lsx_vpickev_d, src_minus11, src_minus10, src_plus11, src_plus10, +- src_minus10, src_plus10); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf1, zeros, src_minus11, ++ shuf1, src0, src1); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, ++ shuf2, src_plus10, src_plus11); ++ DUP2_ARG2(__lsx_vpickev_d, src_minus11, src_minus10, src_plus11, ++ src_plus10, src_minus10, src_plus10); + src0 = __lsx_vpickev_d(src1, src0); + + DUP2_ARG2(__lsx_vseq_b, src0, src_minus10, src0, src_plus10, cmp_minus10, +@@ -1097,8 +1153,8 @@ static void hevc_sao_edge_filter_0degree_8width_lsx(uint8_t *dst, + + offset = __lsx_vadd_b(diff_minus10, diff_minus11); + offset = __lsx_vaddi_bu(offset, 2); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, ++ sao_offset, offset, offset, offset); + src0 = __lsx_vxori_b(src0, 128); + dst0 = __lsx_vsadd_b(src0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -1144,78 +1200,91 @@ static void hevc_sao_edge_filter_0degree_16multiple_lsx(uint8_t *dst, + + for (; height; height -= 4) { + src_minus1 = src - 1; +- DUP4_ARG2(__lsx_vld, src_minus1, 0, src_minus1 + src_stride, 0, +- src_minus1 + src_stride_2x, 0, src_minus1 + src_stride_3x, 0, +- src_minus10, src_minus11, src_minus12, src_minus13); ++ src_minus10 = __lsx_vld(src_minus1, 0); ++ DUP2_ARG2(__lsx_vldx, src_minus1, src_stride, src_minus1, ++ src_stride_2x, src_minus11, src_minus12); ++ src_minus13 = __lsx_vldx(src_minus1, src_stride_3x); + + for (v_cnt = 0; v_cnt < width; v_cnt += 16) { + src_minus1 += 16; + dst_ptr = dst + v_cnt; +- DUP4_ARG2(__lsx_vld, src_minus1, 0, src_minus1 + src_stride, 0, +- src_minus1 + src_stride_2x, 0, src_minus1 + src_stride_3x, 0, +- src10, src11, src12, src13); +- DUP4_ARG3(__lsx_vshuf_b, src10, src_minus10, shuf1, src11, src_minus11, +- shuf1, src12, src_minus12, shuf1, src13, src_minus13, shuf1, +- src_zero0, src_zero1, src_zero2, src_zero3); +- DUP4_ARG3(__lsx_vshuf_b, src10, src_minus10, shuf2, src11, src_minus11, +- shuf2, src12, src_minus12, shuf2, src13, src_minus13, shuf2, +- src_plus10, src_plus11, src_plus12, src_plus13); +- +- DUP4_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero0, src_plus10, +- src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, +- cmp_plus10, cmp_minus11, cmp_plus11); +- DUP4_ARG2(__lsx_vseq_b, src_zero2, src_minus12, src_zero2, src_plus12, +- src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, +- cmp_plus12, cmp_minus13, cmp_plus13); +- DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, +- cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, diff_minus10, +- diff_plus10, diff_minus11, diff_plus11); +- DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, +- cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, diff_minus12, +- diff_plus12, diff_minus13, diff_plus13); +- DUP4_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero0, src_plus10, +- src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, +- cmp_plus10, cmp_minus11, cmp_plus11); +- DUP4_ARG2(__lsx_vsle_bu, src_zero2, src_minus12, src_zero2, src_plus12, +- src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, +- cmp_plus12, cmp_minus13, cmp_plus13); +- DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, +- cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, cmp_minus10, +- cmp_plus10, cmp_minus11, cmp_plus11); +- DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, +- cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, cmp_minus12, +- cmp_plus12, cmp_minus13, cmp_plus13); ++ src10 = __lsx_vld(src_minus1, 0); ++ DUP2_ARG2(__lsx_vldx, src_minus1, src_stride, src_minus1, ++ src_stride_2x, src11, src12); ++ src13 = __lsx_vldx(src_minus1, src_stride_3x); ++ DUP4_ARG3(__lsx_vshuf_b, src10, src_minus10, shuf1, src11, ++ src_minus11, shuf1, src12, src_minus12, shuf1, src13, ++ src_minus13, shuf1, src_zero0, src_zero1, ++ src_zero2, src_zero3); ++ DUP4_ARG3(__lsx_vshuf_b, src10, src_minus10, shuf2, src11, ++ src_minus11, shuf2, src12, src_minus12, shuf2, src13, ++ src_minus13, shuf2, src_plus10, src_plus11, ++ src_plus12, src_plus13); ++ DUP4_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero0, ++ src_plus10, src_zero1, src_minus11, src_zero1, src_plus11, ++ cmp_minus10, cmp_plus10, cmp_minus11, cmp_plus11); ++ DUP4_ARG2(__lsx_vseq_b, src_zero2, src_minus12, src_zero2, ++ src_plus12, src_zero3, src_minus13, src_zero3, src_plus13, ++ cmp_minus12, cmp_plus12, cmp_minus13, cmp_plus13); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, ++ cmp_plus10, cmp_minus11, cmp_minus11, cmp_plus11, ++ cmp_plus11, diff_minus10, diff_plus10, diff_minus11, ++ diff_plus11); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, ++ cmp_plus12, cmp_minus13, cmp_minus13, cmp_plus13, ++ cmp_plus13, diff_minus12, diff_plus12, diff_minus13, ++ diff_plus13); ++ DUP4_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero0, ++ src_plus10, src_zero1, src_minus11, src_zero1, src_plus11, ++ cmp_minus10, cmp_plus10, cmp_minus11, cmp_plus11); ++ DUP4_ARG2(__lsx_vsle_bu, src_zero2, src_minus12, src_zero2, ++ src_plus12, src_zero3, src_minus13, src_zero3, src_plus13, ++ cmp_minus12, cmp_plus12, cmp_minus13, cmp_plus13); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, ++ cmp_plus10, cmp_minus11, cmp_minus11, cmp_plus11, ++ cmp_plus11, cmp_minus10, cmp_plus10, cmp_minus11, ++ cmp_plus11); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, ++ cmp_plus12, cmp_minus13, cmp_minus13, cmp_plus13, ++ cmp_plus13, cmp_minus12, cmp_plus12, cmp_minus13, ++ cmp_plus13); + DUP4_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, + diff_plus10, const1, cmp_plus10, diff_minus11, const1, +- cmp_minus11, diff_plus11, const1, cmp_plus11, diff_minus10, +- diff_plus10, diff_minus11, diff_plus11); ++ cmp_minus11, diff_plus11, const1, cmp_plus11, ++ diff_minus10, diff_plus10, diff_minus11, diff_plus11); + DUP4_ARG3(__lsx_vbitsel_v, diff_minus12, const1, cmp_minus12, + diff_plus12, const1, cmp_plus12, diff_minus13, const1, +- cmp_minus13, diff_plus13, const1, cmp_plus13, diff_minus12, +- diff_plus12, diff_minus13, diff_plus13); ++ cmp_minus13, diff_plus13, const1, cmp_plus13, ++ diff_minus12, diff_plus12, diff_minus13, diff_plus13); + +- DUP4_ARG2(__lsx_vadd_b, diff_minus10, diff_plus10, diff_minus11, diff_plus11, +- diff_minus12, diff_plus12, diff_minus13, diff_plus13, offset_mask0, ++ DUP4_ARG2(__lsx_vadd_b, diff_minus10, diff_plus10, diff_minus11, ++ diff_plus11, diff_minus12, diff_plus12, diff_minus13, ++ diff_plus13, offset_mask0, offset_mask1, offset_mask2, ++ offset_mask3); ++ DUP4_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, ++ offset_mask2, 2, offset_mask3, 2, offset_mask0, + offset_mask1, offset_mask2, offset_mask3); +- DUP4_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, offset_mask2, +- 2, offset_mask3, 2, offset_mask0, offset_mask1, offset_mask2, ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask0, ++ sao_offset, sao_offset, offset_mask0, offset_mask0, ++ offset_mask0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask1, ++ sao_offset, sao_offset, offset_mask1, offset_mask1, ++ offset_mask1); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask2, ++ sao_offset, sao_offset, offset_mask2, offset_mask2, ++ offset_mask2); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask3, ++ sao_offset, sao_offset, offset_mask3, offset_mask3, + offset_mask3); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask0, sao_offset, +- sao_offset, offset_mask0, offset_mask0, offset_mask0); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask1, sao_offset, +- sao_offset, offset_mask1, offset_mask1, offset_mask1); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask2, sao_offset, +- sao_offset, offset_mask2, offset_mask2, offset_mask2); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask3, sao_offset, +- sao_offset, offset_mask3, offset_mask3, offset_mask3); +- +- DUP4_ARG2(__lsx_vxori_b, src_zero0, 128, src_zero1, 128, src_zero2, 128, +- src_zero3, 128, src_zero0, src_zero1, src_zero2, src_zero3); ++ ++ DUP4_ARG2(__lsx_vxori_b, src_zero0, 128, src_zero1, 128, ++ src_zero2, 128, src_zero3, 128, src_zero0, src_zero1, ++ src_zero2, src_zero3); + DUP4_ARG2(__lsx_vsadd_b, src_zero0, offset_mask0, src_zero1, +- offset_mask1, src_zero2, offset_mask2, src_zero3, offset_mask3, +- dst0, dst1, dst2, dst3); +- DUP4_ARG2(__lsx_vxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, 128, +- dst0, dst1, dst2, dst3); ++ offset_mask1, src_zero2, offset_mask2, src_zero3, ++ offset_mask3, dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, ++ 128, dst0, dst1, dst2, dst3); + + src_minus10 = src10; + src_minus11 = src11; +@@ -1264,23 +1333,23 @@ static void hevc_sao_edge_filter_90degree_4width_lsx(uint8_t *dst, + src_minus11, src_zero1); + DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, + cmp_minus10, cmp_minus11); +- DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- cmp_minus10, cmp_minus11); +- DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, ++ cmp_minus11, diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, ++ src_minus11, cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, ++ cmp_minus11, cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, ++ diff_minus11, const1, cmp_minus11, diff_minus10, diff_minus11); + + DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, + diff_minus11, offset_mask0, offset_mask1); +- DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, +- offset_mask1); +- DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, ++ offset_mask0, offset_mask1); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, ++ src_zero0, offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, ++ sao_offset, offset, offset, offset); + + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); +@@ -1289,15 +1358,17 @@ static void hevc_sao_edge_filter_90degree_4width_lsx(uint8_t *dst, + src_minus11 = src11; + + /* load in advance */ +- DUP2_ARG2(__lsx_vld, src + src_stride, 0, src + src_stride_2x, 0, src10, src11); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, ++ src10, src11); + + __lsx_vstelm_w(dst0, dst, 0, 0); + __lsx_vstelm_w(dst0, dst + dst_stride, 0, 2); + dst += dst_stride_2x; + } + +- DUP4_ARG2(__lsx_vilvl_b, src10, src_minus10, src_minus11, src_minus11, src11, +- src_minus11, src10, src10, src_minus10, src_zero0, src_minus11, src_zero1); ++ DUP4_ARG2(__lsx_vilvl_b, src10, src_minus10, src_minus11, src_minus11, ++ src11, src_minus11, src10, src10, src_minus10, src_zero0, ++ src_minus11, src_zero1); + DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, + cmp_minus10, cmp_minus11); + DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +@@ -1311,11 +1382,12 @@ static void hevc_sao_edge_filter_90degree_4width_lsx(uint8_t *dst, + + DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, + diff_minus11, offset_mask0, offset_mask1); +- DUP2_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, offset_mask0, offset_mask1); +- DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, ++ offset_mask0, offset_mask1); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, ++ src_zero0, offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, ++ sao_offset, offset, offset, offset); + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -1345,32 +1417,32 @@ static void hevc_sao_edge_filter_90degree_8width_lsx(uint8_t *dst, + + /* load in advance */ + DUP2_ARG2(__lsx_vld, src - src_stride, 0, src, 0, src_minus10, src_minus11); +- DUP2_ARG2(__lsx_vld, src + src_stride, 0, src + src_stride_2x, 0, src10, src11); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src10, src11); + + for (height -= 2; height; height -= 2) { + src += src_stride_2x; +- DUP4_ARG2(__lsx_vilvl_b, src10, src_minus10, src_minus11, src_minus11, src11, +- src_minus11, src10, src10, src_minus10, src_zero0, src_minus11, +- src_zero1); ++ DUP4_ARG2(__lsx_vilvl_b, src10, src_minus10, src_minus11, src_minus11, ++ src11, src_minus11, src10, src10, src_minus10, src_zero0, ++ src_minus11, src_zero1); + DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, + cmp_minus10, cmp_minus11); +- DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- cmp_minus10, cmp_minus11); +- DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, ++ cmp_minus11, diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, ++ src_minus11, cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, ++ cmp_minus11, cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, ++ diff_minus11, const1, cmp_minus11, diff_minus10, diff_minus11); + + DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, + diff_minus11, offset_mask0, offset_mask1); +- DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, +- offset_mask1); +- DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, ++ offset_mask0, offset_mask1); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, ++ src_zero0, offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, ++ sao_offset, offset, offset, offset); + + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); +@@ -1379,15 +1451,17 @@ static void hevc_sao_edge_filter_90degree_8width_lsx(uint8_t *dst, + src_minus11 = src11; + + /* load in advance */ +- DUP2_ARG2(__lsx_vld, src + src_stride, 0, src + src_stride_2x, 0, src10, src11); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, ++ src10, src11); + + __lsx_vstelm_d(dst0, dst, 0, 0); + __lsx_vstelm_d(dst0, dst + dst_stride, 0, 1); + dst += dst_stride_2x; + } + +- DUP4_ARG2(__lsx_vilvl_b, src10, src_minus10, src_minus11, src_minus11, src11, +- src_minus11, src10, src10, src_minus10, src_zero0, src_minus11, src_zero1); ++ DUP4_ARG2(__lsx_vilvl_b, src10, src_minus10, src_minus11, src_minus11, ++ src11, src_minus11, src10, src10, src_minus10, src_zero0, ++ src_minus11, src_zero1); + DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, + cmp_minus10, cmp_minus11); + DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +@@ -1399,13 +1473,14 @@ static void hevc_sao_edge_filter_90degree_8width_lsx(uint8_t *dst, + DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, + const1, cmp_minus11, diff_minus10, diff_minus11); + +- DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, diff_minus11, ++ DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, ++ diff_minus11, offset_mask0, offset_mask1); ++ DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, + offset_mask0, offset_mask1); +- DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, offset_mask1); +- DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, ++ src_zero0, offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, ++ sao_offset, offset, offset, offset); + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -1449,73 +1524,84 @@ static void hevc_sao_edge_filter_90degree_16multiple_lsx(uint8_t *dst, + src = src_orig + v_cnt; + dst = dst_orig + v_cnt; + +- DUP2_ARG2(__lsx_vld, src - src_stride, 0, src, 0, src_minus10, src_minus11); ++ DUP2_ARG2(__lsx_vld, src - src_stride, 0, src, 0, ++ src_minus10, src_minus11); + + for (h_cnt = (height >> 2); h_cnt--;) { +- DUP4_ARG2(__lsx_vld, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src + src_stride_4x, 0, ++ DUP4_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, ++ src, src_stride_3x, src, src_stride_4x, + src10, src11, src12, src13); +- +- DUP4_ARG2(__lsx_vseq_b, src_minus11, src_minus10, src_minus11, src10, +- src10, src_minus11, src10, src11, cmp_minus10, cmp_plus10, +- cmp_minus11, cmp_plus11); +- DUP4_ARG2(__lsx_vseq_b, src11, src10, src11, src12, src12, src11, src12, +- src13, cmp_minus12, cmp_plus12, cmp_minus13, cmp_plus13); +- DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, +- cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, diff_minus10, +- diff_plus10, diff_minus11, diff_plus11); +- DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, +- cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, diff_minus12, +- diff_plus12, diff_minus13, diff_plus13); +- DUP4_ARG2(__lsx_vsle_bu, src_minus11, src_minus10, src_minus11, src10, +- src10, src_minus11, src10, src11, cmp_minus10, cmp_plus10, +- cmp_minus11, cmp_plus11); +- DUP4_ARG2(__lsx_vsle_bu, src11, src10, src11, src12, src12, src11, src12, +- src13, cmp_minus12, cmp_plus12, cmp_minus13, cmp_plus13); +- DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, +- cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, cmp_minus10, ++ DUP4_ARG2(__lsx_vseq_b, src_minus11, src_minus10, src_minus11, ++ src10, src10, src_minus11, src10, src11, cmp_minus10, ++ cmp_plus10, cmp_minus11, cmp_plus11); ++ DUP4_ARG2(__lsx_vseq_b, src11, src10, src11, src12, src12, src11, ++ src12, src13, cmp_minus12, cmp_plus12, ++ cmp_minus13, cmp_plus13); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, ++ cmp_plus10, cmp_minus11, cmp_minus11, cmp_plus11, ++ cmp_plus11, diff_minus10, diff_plus10, diff_minus11, ++ diff_plus11); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, ++ cmp_plus12, cmp_minus13, cmp_minus13, cmp_plus13, ++ cmp_plus13, diff_minus12, diff_plus12, diff_minus13, ++ diff_plus13); ++ DUP4_ARG2(__lsx_vsle_bu, src_minus11, src_minus10, src_minus11, ++ src10, src10, src_minus11, src10, src11, cmp_minus10, + cmp_plus10, cmp_minus11, cmp_plus11); +- DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, +- cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, cmp_minus12, +- cmp_plus12, cmp_minus13, cmp_plus13); ++ DUP4_ARG2(__lsx_vsle_bu, src11, src10, src11, src12, src12, src11, ++ src12, src13, cmp_minus12, cmp_plus12, cmp_minus13, ++ cmp_plus13); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, ++ cmp_plus10, cmp_minus11, cmp_minus11, cmp_plus11, ++ cmp_plus11, cmp_minus10, cmp_plus10, cmp_minus11, ++ cmp_plus11); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, ++ cmp_plus12, cmp_minus13, cmp_minus13, cmp_plus13, ++ cmp_plus13, cmp_minus12, cmp_plus12, cmp_minus13, ++ cmp_plus13); + DUP4_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, + diff_plus10, const1, cmp_plus10, diff_minus11, const1, +- cmp_minus11, diff_plus11, const1, cmp_plus11, diff_minus10, +- diff_plus10, diff_minus11, diff_plus11); ++ cmp_minus11, diff_plus11, const1, cmp_plus11, ++ diff_minus10, diff_plus10, diff_minus11, diff_plus11); + DUP4_ARG3(__lsx_vbitsel_v, diff_minus12, const1, cmp_minus12, + diff_plus12, const1, cmp_plus12, diff_minus13, const1, +- cmp_minus13, diff_plus13, const1, cmp_plus13, diff_minus12, +- diff_plus12, diff_minus13, diff_plus13); ++ cmp_minus13, diff_plus13, const1, cmp_plus13, ++ diff_minus12, diff_plus12, diff_minus13, diff_plus13); + + DUP4_ARG2(__lsx_vadd_b, diff_minus10, diff_plus10, diff_minus11, + diff_plus11, diff_minus12, diff_plus12, diff_minus13, + diff_plus13, offset_mask0, offset_mask1, offset_mask2, + offset_mask3); +- DUP4_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, offset_mask2, +- 2, offset_mask3, 2, offset_mask0, offset_mask1, offset_mask2, ++ DUP4_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, ++ offset_mask2, 2, offset_mask3, 2, offset_mask0, ++ offset_mask1, offset_mask2, offset_mask3); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask0, ++ sao_offset, sao_offset, offset_mask0,\ ++ offset_mask0, offset_mask0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask1, ++ sao_offset, sao_offset, offset_mask1, offset_mask1, ++ offset_mask1); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask2, ++ sao_offset, sao_offset, offset_mask2, offset_mask2, ++ offset_mask2); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask3, ++ sao_offset, sao_offset, offset_mask3, offset_mask3, + offset_mask3); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask0, sao_offset, +- sao_offset, offset_mask0, offset_mask0, offset_mask0); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask1, sao_offset, +- sao_offset, offset_mask1, offset_mask1, offset_mask1); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask2, sao_offset, +- sao_offset, offset_mask2, offset_mask2, offset_mask2); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask3, sao_offset, +- sao_offset, offset_mask3, offset_mask3, offset_mask3); + + src_minus10 = src12; + DUP4_ARG2(__lsx_vxori_b, src_minus11, 128, src10, 128, src11, 128, + src12, 128, src_minus11, src10, src11, src12); +- DUP4_ARG2(__lsx_vsadd_b, src_minus11, offset_mask0, src10, offset_mask1, +- src11, offset_mask2, src12, offset_mask3, dst0, dst1, dst2, dst3); +- DUP4_ARG2(__lsx_vxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, 128, +- dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vsadd_b, src_minus11, offset_mask0, src10, ++ offset_mask1, src11, offset_mask2, src12, ++ offset_mask3, dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, ++ 128, dst0, dst1, dst2, dst3); + src_minus11 = src13; + + __lsx_vst(dst0, dst, 0); +- __lsx_vst(dst1, dst + dst_stride, 0); +- __lsx_vst(dst2, dst + dst_stride_2x, 0); +- __lsx_vst(dst3, dst + dst_stride_3x, 0); ++ __lsx_vstx(dst1, dst, dst_stride); ++ __lsx_vstx(dst2, dst, dst_stride_2x); ++ __lsx_vstx(dst3, dst, dst_stride_3x); + src += src_stride_4x; + dst += dst_stride_4x; + } +@@ -1547,41 +1633,42 @@ static void hevc_sao_edge_filter_45degree_4width_lsx(uint8_t *dst, + src_orig = src - 1; + + /* load in advance */ +- DUP2_ARG2(__lsx_vld, src_orig - src_stride, 0, src_orig, 0, src_minus10, src_minus11); +- DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ DUP2_ARG2(__lsx_vld, src_orig - src_stride, 0, src_orig, 0, ++ src_minus10, src_minus11); ++ DUP2_ARG2(__lsx_vldx, src_orig, src_stride, src_orig, src_stride_2x, + src10, src11); + + for (height -= 2; height; height -= 2) { + src_orig += src_stride_2x; + +- DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, +- src_zero0, src_zero1); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, ++ shuf1, src_zero0, src_zero1); + DUP2_ARG3(__lsx_vshuf_b, zeros, src10, shuf2, zeros, src11, shuf2, + src_plus0, src_plus1); + +- DUP2_ARG2(__lsx_vilvl_b, src_plus0, src_minus10, src_plus1, src_minus11, +- src_minus10, src_minus11); +- DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, +- src_zero0, src_zero1); +- DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- cmp_minus10, cmp_minus11); +- DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vilvl_b, src_plus0, src_minus10, src_plus1, ++ src_minus11, src_minus10, src_minus11); ++ DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, ++ src_zero1, src_zero0, src_zero1); ++ DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, ++ src_minus11, cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, ++ cmp_minus11, diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, ++ src_minus11, cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, ++ cmp_minus11, cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, ++ diff_minus11, const1, cmp_minus11, diff_minus10, diff_minus11); + + DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, + diff_minus11, offset_mask0, offset_mask1); +- DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, +- offset_mask1); +- DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, ++ offset_mask0, offset_mask1); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, ++ src_zero0, offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, ++ sao_offset, offset, offset, offset); + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -1590,7 +1677,7 @@ static void hevc_sao_edge_filter_45degree_4width_lsx(uint8_t *dst, + src_minus11 = src11; + + /* load in advance */ +- DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ DUP2_ARG2(__lsx_vldx, src_orig, src_stride, src_orig, src_stride_2x, + src10, src11); + + __lsx_vstelm_w(dst0, dst, 0, 0); +@@ -1600,13 +1687,13 @@ static void hevc_sao_edge_filter_45degree_4width_lsx(uint8_t *dst, + + DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, + src_zero0, src_zero1); +- DUP2_ARG3(__lsx_vshuf_b, zeros, src10, shuf2, zeros, src11, shuf2, src_plus0, +- src_plus1); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src10, shuf2, zeros, src11, shuf2, ++ src_plus0, src_plus1); + + DUP2_ARG2(__lsx_vilvl_b, src_plus0, src_minus10, src_plus1, src_minus11, + src_minus10, src_minus11); +- DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, src_zero0, +- src_zero1); ++ DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, ++ src_zero0, src_zero1); + DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, + cmp_minus10, cmp_minus11); + DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +@@ -1622,10 +1709,10 @@ static void hevc_sao_edge_filter_45degree_4width_lsx(uint8_t *dst, + diff_minus11, offset_mask0, offset_mask1); + DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, + offset_mask1); +- DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, ++ src_zero0, offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, ++ sao_offset, offset, offset, offset); + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -1661,40 +1748,40 @@ static void hevc_sao_edge_filter_45degree_8width_lsx(uint8_t *dst, + /* load in advance */ + DUP2_ARG2(__lsx_vld, src_orig - src_stride, 0, src_orig, 0, src_minus10, + src_minus11); +- DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ DUP2_ARG2(__lsx_vldx, src_orig, src_stride, src_orig, src_stride_2x, + src10, src11); + + for (height -= 2; height; height -= 2) { + src_orig += src_stride_2x; + +- DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, +- src_zero0, src_zero1); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, ++ shuf1, src_zero0, src_zero1); + DUP2_ARG3(__lsx_vshuf_b, zeros, src10, shuf2, zeros, src11, shuf2, + src_plus10, src_plus11); + +- DUP2_ARG2(__lsx_vilvl_b, src_plus10, src_minus10, src_plus11, src_minus11, +- src_minus10, src_minus11); ++ DUP2_ARG2(__lsx_vilvl_b, src_plus10, src_minus10, src_plus11, ++ src_minus11, src_minus10, src_minus11); + DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, + src_zero0, src_zero1); + DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, + cmp_minus10, cmp_minus11); +- DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- cmp_minus10, cmp_minus11); +- DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, ++ cmp_minus11, diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, ++ src_minus11, cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, ++ cmp_minus11, cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, ++ diff_minus11, const1, cmp_minus11, diff_minus10, diff_minus11); + + DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, + diff_minus11, offset_mask0, offset_mask1); +- DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, +- offset_mask1); +- DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, ++ offset_mask0, offset_mask1); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, ++ src_zero0, offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, ++ sao_offset, offset, offset, offset); + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -1703,7 +1790,7 @@ static void hevc_sao_edge_filter_45degree_8width_lsx(uint8_t *dst, + src_minus11 = src11; + + /* load in advance */ +- DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ DUP2_ARG2(__lsx_vldx, src_orig, src_stride, src_orig, src_stride_2x, + src10, src11) + __lsx_vstelm_d(dst0, dst, 0, 0); + __lsx_vstelm_d(dst0, dst + dst_stride, 0, 1); +@@ -1712,17 +1799,17 @@ static void hevc_sao_edge_filter_45degree_8width_lsx(uint8_t *dst, + + DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, + src_zero0, src_zero1); +- DUP2_ARG3(__lsx_vshuf_b, zeros, src10, shuf2, zeros, src11, shuf2, src_plus10, +- src_plus11); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src10, shuf2, zeros, src11, shuf2, ++ src_plus10, src_plus11); + DUP2_ARG2(__lsx_vilvl_b, src_plus10, src_minus10, src_plus11, src_minus11, + src_minus10, src_minus11); +- DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, src_zero0, +- src_zero1); ++ DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, ++ src_zero0, src_zero1); + + DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, + cmp_minus10, cmp_minus11); +- DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, ++ cmp_minus11, diff_minus10, diff_minus11); + DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, + cmp_minus10, cmp_minus11); + DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +@@ -1734,10 +1821,10 @@ static void hevc_sao_edge_filter_45degree_8width_lsx(uint8_t *dst, + diff_minus11, offset_mask0, offset_mask1); + DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, + offset_mask1); +- DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, ++ src_zero0, offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, ++ sao_offset, offset, offset, offset); + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -1746,7 +1833,7 @@ static void hevc_sao_edge_filter_45degree_8width_lsx(uint8_t *dst, + src_minus11 = src11; + + /* load in advance */ +- DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ DUP2_ARG2(__lsx_vldx, src_orig, src_stride, src_orig, src_stride_2x, + src10, src11); + + __lsx_vstelm_d(dst0, dst, 0, 0); +@@ -1783,8 +1870,8 @@ static void hevc_sao_edge_filter_45degree_16multiple_lsx(uint8_t *dst, + __m128i offset_mask0, offset_mask1, offset_mask2, offset_mask3; + __m128i src10, src_minus10, dst0, src11, src_minus11, dst1; + __m128i src12, src_minus12, dst2, src13, src_minus13, dst3; +- __m128i src_zero0, src_plus10, src_zero1, src_plus11, src_zero2, src_plus12; +- __m128i src_zero3, sao_offset; ++ __m128i src_zero0, src_plus10, src_zero1, src_plus11, src_zero2; ++ __m128i src_zero3, sao_offset, src_plus12; + + sao_offset = __lsx_vld(sao_offset_val, 0); + sao_offset = __lsx_vpickev_b(sao_offset, sao_offset); +@@ -1792,81 +1879,98 @@ static void hevc_sao_edge_filter_45degree_16multiple_lsx(uint8_t *dst, + for (; height; height -= 4) { + src_orig = src - 1; + dst_orig = dst; +- DUP4_ARG2(__lsx_vld, src_orig, 0, src_orig + src_stride, 0, +- src_orig + src_stride_2x, 0, src_orig + src_stride_3x, 0, +- src_minus11, src_minus12, src_minus13, src_minus14); ++ src_minus11 = __lsx_vld(src_orig, 0); ++ DUP2_ARG2(__lsx_vldx, src_orig, src_stride, src_orig, src_stride_2x, ++ src_minus12, src_minus13); ++ src_minus14 = __lsx_vldx(src_orig, src_stride_3x); + + for (v_cnt = 0; v_cnt < width; v_cnt += 16) { + src_minus10 = __lsx_vld(src_orig - src_stride, 0); +- DUP4_ARG2(__lsx_vld, src_orig, 16, src_orig + src_stride, 16, +- src_orig + src_stride_2x, 16, src_orig + src_stride_3x, 16, +- src10, src11, src12, src13); +- src_plus13 = __lsx_vld(src + v_cnt + src_stride_4x, 1); + src_orig += 16; ++ src10 = __lsx_vld(src_orig, 0); ++ DUP2_ARG2(__lsx_vldx, src_orig, src_stride, src_orig, ++ src_stride_2x, src11, src12); ++ src13 = __lsx_vldx(src_orig, src_stride_3x); ++ src_plus13 = __lsx_vld(src + v_cnt + src_stride_4x, 1); + +- DUP4_ARG3(__lsx_vshuf_b, src10, src_minus11, shuf1, src11, src_minus12, +- shuf1, src12, src_minus13, shuf1, src13, src_minus14, shuf1, +- src_zero0, src_zero1, src_zero2, src_zero3); +- DUP2_ARG3(__lsx_vshuf_b, src11, src_minus12, shuf2, src12, src_minus13, +- shuf2, src_plus10, src_plus11); ++ DUP4_ARG3(__lsx_vshuf_b, src10, src_minus11, shuf1, src11, ++ src_minus12, shuf1, src12, src_minus13, shuf1, ++ src13, src_minus14, shuf1, src_zero0, src_zero1, ++ src_zero2, src_zero3); ++ DUP2_ARG3(__lsx_vshuf_b, src11, src_minus12, shuf2, src12, ++ src_minus13, shuf2, src_plus10, src_plus11); + src_plus12 = __lsx_vshuf_b(src13, src_minus14, shuf2); + +- DUP4_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero0, src_plus10, +- src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, +- cmp_plus10, cmp_minus11, cmp_plus11); +- DUP4_ARG2(__lsx_vseq_b, src_zero2, src_minus12, src_zero2, src_plus12, +- src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, +- cmp_plus12, cmp_minus13, cmp_plus13); +- DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, +- cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, diff_minus10, +- diff_plus10, diff_minus11, diff_plus11); +- DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, +- cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, diff_minus12, +- diff_plus12, diff_minus13, diff_plus13); +- DUP4_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero0, src_plus10, +- src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, +- cmp_plus10, cmp_minus11, cmp_plus11); +- DUP4_ARG2(__lsx_vsle_bu, src_zero2, src_minus12, src_zero2, src_plus12, +- src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, +- cmp_plus12, cmp_minus13, cmp_plus13); +- DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, +- cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, cmp_minus10, +- cmp_plus10, cmp_minus11, cmp_plus11); +- DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, +- cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, cmp_minus12, +- cmp_plus12, cmp_minus13, cmp_plus13); ++ DUP4_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero0, ++ src_plus10, src_zero1, src_minus11, src_zero1, ++ src_plus11, cmp_minus10, cmp_plus10, ++ cmp_minus11, cmp_plus11); ++ DUP4_ARG2(__lsx_vseq_b, src_zero2, src_minus12, src_zero2, ++ src_plus12, src_zero3, src_minus13, src_zero3, ++ src_plus13, cmp_minus12, cmp_plus12, ++ cmp_minus13, cmp_plus13); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, ++ cmp_plus10, cmp_minus11, cmp_minus11, cmp_plus11, ++ cmp_plus11, diff_minus10, diff_plus10, diff_minus11, ++ diff_plus11); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, ++ cmp_plus12, cmp_minus13, cmp_minus13, cmp_plus13, ++ cmp_plus13, diff_minus12, diff_plus12, diff_minus13, ++ diff_plus13); ++ DUP4_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero0, ++ src_plus10, src_zero1, src_minus11, src_zero1, ++ src_plus11, cmp_minus10, cmp_plus10, cmp_minus11, ++ cmp_plus11); ++ DUP4_ARG2(__lsx_vsle_bu, src_zero2, src_minus12, src_zero2, ++ src_plus12, src_zero3, src_minus13, src_zero3, ++ src_plus13, cmp_minus12, cmp_plus12, cmp_minus13, ++ cmp_plus13); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, ++ cmp_plus10, cmp_minus11, cmp_minus11, cmp_plus11, ++ cmp_plus11, cmp_minus10, cmp_plus10, cmp_minus11, ++ cmp_plus11); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, ++ cmp_plus12, cmp_minus13, cmp_minus13, cmp_plus13, ++ cmp_plus13, cmp_minus12, cmp_plus12, cmp_minus13, ++ cmp_plus13); + DUP4_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, + diff_plus10, const1, cmp_plus10, diff_minus11, const1, +- cmp_minus11, diff_plus11, const1, cmp_plus11, diff_minus10, +- diff_plus10, diff_minus11, diff_plus11); ++ cmp_minus11, diff_plus11, const1, cmp_plus11, ++ diff_minus10, diff_plus10, diff_minus11, diff_plus11); + DUP4_ARG3(__lsx_vbitsel_v, diff_minus12, const1, cmp_minus12, + diff_plus12, const1, cmp_plus12, diff_minus13, const1, +- cmp_minus13, diff_plus13, const1, cmp_plus13, diff_minus12, +- diff_plus12, diff_minus13, diff_plus13); ++ cmp_minus13, diff_plus13, const1, cmp_plus13, ++ diff_minus12, diff_plus12, diff_minus13, diff_plus13); + +- DUP4_ARG2(__lsx_vadd_b, diff_minus10, diff_plus10, diff_minus11, diff_plus11, +- diff_minus12, diff_plus12, diff_minus13, diff_plus13, offset_mask0, ++ DUP4_ARG2(__lsx_vadd_b, diff_minus10, diff_plus10, diff_minus11, ++ diff_plus11, diff_minus12, diff_plus12, diff_minus13, ++ diff_plus13, offset_mask0, offset_mask1, offset_mask2, ++ offset_mask3); ++ DUP4_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, ++ offset_mask2, 2, offset_mask3, 2, offset_mask0, + offset_mask1, offset_mask2, offset_mask3); +- DUP4_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, offset_mask2, +- 2, offset_mask3, 2, offset_mask0, offset_mask1, offset_mask2, ++ ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask0, ++ sao_offset, sao_offset, offset_mask0, offset_mask0, ++ offset_mask0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask1, ++ sao_offset, sao_offset, offset_mask1, offset_mask1, ++ offset_mask1); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask2, ++ sao_offset, sao_offset, offset_mask2, offset_mask2, ++ offset_mask2); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask3, ++ sao_offset, sao_offset, offset_mask3, offset_mask3, + offset_mask3); + +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask0, sao_offset, +- sao_offset, offset_mask0, offset_mask0, offset_mask0); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask1, sao_offset, +- sao_offset, offset_mask1, offset_mask1, offset_mask1); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask2, sao_offset, +- sao_offset, offset_mask2, offset_mask2, offset_mask2); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask3, sao_offset, +- sao_offset, offset_mask3, offset_mask3, offset_mask3); +- +- DUP4_ARG2(__lsx_vxori_b, src_zero0, 128, src_zero1, 128, src_zero2, 128, +- src_zero3, 128, src_zero0, src_zero1, src_zero2, src_zero3); ++ DUP4_ARG2(__lsx_vxori_b, src_zero0, 128, src_zero1, 128, src_zero2, ++ 128, src_zero3, 128, src_zero0, src_zero1, src_zero2, ++ src_zero3); + DUP4_ARG2(__lsx_vsadd_b, src_zero0, offset_mask0, src_zero1, +- offset_mask1, src_zero2, offset_mask2, src_zero3, offset_mask3, +- dst0, dst1, dst2, dst3); +- DUP4_ARG2(__lsx_vxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, 128, +- dst0, dst1, dst2, dst3); ++ offset_mask1, src_zero2, offset_mask2, src_zero3, ++ offset_mask3, dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, ++ 128, dst0, dst1, dst2, dst3); + + src_minus11 = src10; + src_minus12 = src11; +@@ -1874,9 +1978,9 @@ static void hevc_sao_edge_filter_45degree_16multiple_lsx(uint8_t *dst, + src_minus14 = src13; + + __lsx_vst(dst0, dst_orig, 0); +- __lsx_vst(dst1, dst_orig + dst_stride, 0); +- __lsx_vst(dst2, dst_orig + dst_stride_2x, 0); +- __lsx_vst(dst3, dst_orig + dst_stride_3x, 0); ++ __lsx_vstx(dst1, dst_orig, dst_stride); ++ __lsx_vstx(dst2, dst_orig, dst_stride_2x); ++ __lsx_vstx(dst3, dst_orig, dst_stride_3x); + dst_orig += 16; + } + src += src_stride_4x; +@@ -1910,41 +2014,42 @@ static void hevc_sao_edge_filter_135degree_4width_lsx(uint8_t *dst, + src_orig = src - 1; + + /* load in advance */ +- DUP2_ARG2(__lsx_vld, src_orig - src_stride, 0, src_orig, 0, src_minus10, src_minus11); +- DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ DUP2_ARG2(__lsx_vld, src_orig - src_stride, 0, src_orig, 0, ++ src_minus10, src_minus11); ++ DUP2_ARG2(__lsx_vldx, src_orig, src_stride, src_orig, src_stride_2x, + src10, src11); + + for (height -= 2; height; height -= 2) { + src_orig += src_stride_2x; + +- DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, +- src_zero0, src_zero1); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, ++ shuf1, src_zero0, src_zero1); + DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, + shuf2, src_minus10, src_minus11); + +- DUP2_ARG2(__lsx_vilvl_b, src10, src_minus10, src11, src_minus11, src_minus10, +- src_minus11); ++ DUP2_ARG2(__lsx_vilvl_b, src10, src_minus10, src11, src_minus11, ++ src_minus10, src_minus11); + DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, + src_zero0, src_zero1); + DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, + cmp_minus10, cmp_minus11); +- DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- cmp_minus10, cmp_minus11); +- DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, ++ cmp_minus11, diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, ++ src_minus11, cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, ++ cmp_minus11, cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, ++ diff_minus11, const1, cmp_minus11, diff_minus10, diff_minus11); + + DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, + diff_minus11, offset_mask0, offset_mask1); +- DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, +- offset_mask1); +- DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, ++ offset_mask0, offset_mask1); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, ++ src_zero0, offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, ++ sao_offset, offset, offset, offset); + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -1953,7 +2058,7 @@ static void hevc_sao_edge_filter_135degree_4width_lsx(uint8_t *dst, + src_minus11 = src11; + + /* load in advance */ +- DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ DUP2_ARG2(__lsx_vldx, src_orig, src_stride, src_orig, src_stride_2x, + src10, src11); + + __lsx_vstelm_w(dst0, dst, 0, 0); +@@ -1963,17 +2068,17 @@ static void hevc_sao_edge_filter_135degree_4width_lsx(uint8_t *dst, + + DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, + src_zero0, src_zero1); +- DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, shuf2, +- src_minus10, src_minus11); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, ++ shuf2, src_minus10, src_minus11); + +- DUP2_ARG2(__lsx_vilvl_b, src10, src_minus10, src11, src_minus11, src_minus10, +- src_minus11); +- DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, src_zero0, +- src_zero1); ++ DUP2_ARG2(__lsx_vilvl_b, src10, src_minus10, src11, src_minus11, ++ src_minus10, src_minus11); ++ DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, ++ src_zero0, src_zero1); + DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, + cmp_minus10, cmp_minus11); +- DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, ++ cmp_minus11, diff_minus10, diff_minus11); + DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, + cmp_minus10, cmp_minus11); + DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +@@ -1985,10 +2090,10 @@ static void hevc_sao_edge_filter_135degree_4width_lsx(uint8_t *dst, + diff_minus11, offset_mask0, offset_mask1); + DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, + offset_mask1); +- DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, ++ src_zero0, offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, ++ sao_offset, offset, offset, offset); + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -2024,41 +2129,42 @@ static void hevc_sao_edge_filter_135degree_8width_lsx(uint8_t *dst, + src_orig = src - 1; + + /* load in advance */ +- DUP2_ARG2(__lsx_vld, src_orig - src_stride, 0, src_orig, 0, src_minus10, src_minus11); +- DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ DUP2_ARG2(__lsx_vld, src_orig - src_stride, 0, src_orig, 0, ++ src_minus10, src_minus11); ++ DUP2_ARG2(__lsx_vldx, src_orig, src_stride, src_orig, src_stride_2x, + src10, src11); + + for (height -= 2; height; height -= 2) { + src_orig += src_stride_2x; + +- DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, +- src_zero0, src_zero1); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, ++ shuf1, src_zero0, src_zero1); + DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, + shuf2, src_minus10, src_minus11); + +- DUP2_ARG2(__lsx_vilvl_b, src10, src_minus10, src11, src_minus11, src_minus10, +- src_minus11); ++ DUP2_ARG2(__lsx_vilvl_b, src10, src_minus10, src11, src_minus11, ++ src_minus10, src_minus11); + DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, + src_zero0, src_zero1); + DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, + cmp_minus10, cmp_minus11); +- DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- diff_minus10, diff_minus11); +- DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, src_minus11, +- cmp_minus10, cmp_minus11); +- DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +- cmp_minus10, cmp_minus11); +- DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, diff_minus11, +- const1, cmp_minus11, diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, ++ cmp_minus11, diff_minus10, diff_minus11); ++ DUP2_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero1, ++ src_minus11, cmp_minus10, cmp_minus11); ++ DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, ++ cmp_minus11, cmp_minus10, cmp_minus11); ++ DUP2_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, ++ diff_minus11, const1, cmp_minus11, diff_minus10, diff_minus11); + + DUP2_ARG2(__lsx_vhaddw_hu_bu, diff_minus10, diff_minus10, diff_minus11, + diff_minus11, offset_mask0, offset_mask1); +- DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, +- offset_mask1); +- DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, ++ offset_mask0, offset_mask1); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, ++ src_zero0, offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, ++ sao_offset, offset, offset, offset); + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -2067,7 +2173,7 @@ static void hevc_sao_edge_filter_135degree_8width_lsx(uint8_t *dst, + src_minus11 = src11; + + /* load in advance */ +- DUP2_ARG2(__lsx_vld, src_orig + src_stride, 0, src_orig + src_stride_2x, 0, ++ DUP2_ARG2(__lsx_vldx, src_orig, src_stride, src_orig, src_stride_2x, + src10, src11); + + __lsx_vstelm_d(dst0, dst, 0, 0); +@@ -2077,13 +2183,13 @@ static void hevc_sao_edge_filter_135degree_8width_lsx(uint8_t *dst, + + DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus11, shuf1, zeros, src10, shuf1, + src_zero0, src_zero1); +- DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, shuf2, +- src_minus10, src_minus11); ++ DUP2_ARG3(__lsx_vshuf_b, zeros, src_minus10, shuf2, zeros, src_minus11, ++ shuf2, src_minus10, src_minus11); + +- DUP2_ARG2(__lsx_vilvl_b, src10, src_minus10, src11, src_minus11, src_minus10, +- src_minus11); +- DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, src_zero0, +- src_zero1); ++ DUP2_ARG2(__lsx_vilvl_b, src10, src_minus10, src11, src_minus11, ++ src_minus10, src_minus11); ++ DUP2_ARG2(__lsx_vilvl_b, src_zero0, src_zero0, src_zero1, src_zero1, ++ src_zero0, src_zero1); + DUP2_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero1, src_minus11, + cmp_minus10, cmp_minus11); + DUP2_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_minus11, cmp_minus11, +@@ -2099,10 +2205,10 @@ static void hevc_sao_edge_filter_135degree_8width_lsx(uint8_t *dst, + diff_minus11, offset_mask0, offset_mask1); + DUP2_ARG2(__lsx_vaddi_hu, offset_mask0, 2, offset_mask1, 2, offset_mask0, + offset_mask1); +- DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, src_zero0, +- offset, dst0); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, sao_offset, +- offset, offset, offset); ++ DUP2_ARG2(__lsx_vpickev_b, offset_mask1, offset_mask0, src_zero1, ++ src_zero0, offset, dst0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset, sao_offset, ++ sao_offset, offset, offset, offset); + dst0 = __lsx_vxori_b(dst0, 128); + dst0 = __lsx_vsadd_b(dst0, offset); + dst0 = __lsx_vxori_b(dst0, 128); +@@ -2148,82 +2254,96 @@ static void hevc_sao_edge_filter_135degree_16multiple_lsx(uint8_t *dst, + src_orig = src - 1; + dst_orig = dst; + +- DUP4_ARG2(__lsx_vld, src_orig, 0, src_orig + src_stride, 0, +- src_orig + src_stride_2x, 0, src_orig + src_stride_3x, 0, +- src_minus11, src_plus10, src_plus11, src_plus12); ++ src_minus11 = __lsx_vld(src_orig, 0); ++ DUP2_ARG2(__lsx_vldx, src_orig, src_stride, src_orig, src_stride_2x, ++ src_plus10, src_plus11); ++ src_plus12 = __lsx_vldx(src_orig, src_stride_3x); + + for (v_cnt = 0; v_cnt < width; v_cnt += 16) { + src_minus10 = __lsx_vld(src_orig - src_stride, 2); +- DUP4_ARG2(__lsx_vld, src_orig, 16, src_orig + src_stride, 16, +- src_orig + src_stride_2x, 16, src_orig + src_stride_3x, 16, +- src10, src11, src12, src13); +- src_plus13 = __lsx_vld(src_orig + src_stride_4x, 0); ++ src_plus13 = __lsx_vldx(src_orig, src_stride_4x); + src_orig += 16; +- +- DUP4_ARG3(__lsx_vshuf_b, src10, src_minus11, shuf1, src11, src_plus10, +- shuf1, src12, src_plus11, shuf1, src13, src_plus12, shuf1, +- src_zero0, src_zero1, src_zero2, src_zero3); ++ src10 = __lsx_vld(src_orig, 0); ++ DUP2_ARG2(__lsx_vldx, src_orig, src_stride, src_orig, src_stride_2x, ++ src11, src12); ++ src13 =__lsx_vldx(src_orig, src_stride_3x); ++ ++ DUP4_ARG3(__lsx_vshuf_b, src10, src_minus11, shuf1, src11, ++ src_plus10, shuf1, src12, src_plus11, shuf1, src13, ++ src_plus12, shuf1, src_zero0, src_zero1, src_zero2, ++ src_zero3); + src_minus11 = __lsx_vshuf_b(src10, src_minus11, shuf2); +- DUP2_ARG3(__lsx_vshuf_b, src11, src_plus10, shuf2, src12, src_plus11, +- shuf2, src_minus12, src_minus13); +- +- DUP4_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero0, src_plus10, +- src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, +- cmp_plus10, cmp_minus11, cmp_plus11); +- DUP4_ARG2(__lsx_vseq_b, src_zero2, src_minus12, src_zero2, src_plus12, +- src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, +- cmp_plus12, cmp_minus13, cmp_plus13); +- DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, +- cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, diff_minus10, +- diff_plus10, diff_minus11, diff_plus11); +- DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, +- cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, diff_minus12, +- diff_plus12, diff_minus13, diff_plus13); +- DUP4_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero0, src_plus10, +- src_zero1, src_minus11, src_zero1, src_plus11, cmp_minus10, +- cmp_plus10, cmp_minus11, cmp_plus11); +- DUP4_ARG2(__lsx_vsle_bu, src_zero2, src_minus12, src_zero2, src_plus12, +- src_zero3, src_minus13, src_zero3, src_plus13, cmp_minus12, +- cmp_plus12, cmp_minus13, cmp_plus13); +- DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, cmp_plus10, +- cmp_minus11, cmp_minus11, cmp_plus11, cmp_plus11, cmp_minus10, +- cmp_plus10, cmp_minus11, cmp_plus11); +- DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, cmp_plus12, +- cmp_minus13, cmp_minus13, cmp_plus13, cmp_plus13, cmp_minus12, +- cmp_plus12, cmp_minus13, cmp_plus13); ++ DUP2_ARG3(__lsx_vshuf_b, src11, src_plus10, shuf2, src12, ++ src_plus11, shuf2, src_minus12, src_minus13); ++ ++ DUP4_ARG2(__lsx_vseq_b, src_zero0, src_minus10, src_zero0, ++ src_plus10, src_zero1, src_minus11, src_zero1, ++ src_plus11, cmp_minus10, cmp_plus10, cmp_minus11, ++ cmp_plus11); ++ DUP4_ARG2(__lsx_vseq_b, src_zero2, src_minus12, src_zero2, ++ src_plus12, src_zero3, src_minus13, src_zero3, ++ src_plus13, cmp_minus12, cmp_plus12, cmp_minus13, ++ cmp_plus13); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, ++ cmp_plus10, cmp_minus11, cmp_minus11, cmp_plus11, ++ cmp_plus11, diff_minus10, diff_plus10, diff_minus11, ++ diff_plus11); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, ++ cmp_plus12, cmp_minus13, cmp_minus13, cmp_plus13, ++ cmp_plus13, diff_minus12, diff_plus12, diff_minus13, ++ diff_plus13); ++ DUP4_ARG2(__lsx_vsle_bu, src_zero0, src_minus10, src_zero0, ++ src_plus10, src_zero1, src_minus11, src_zero1, src_plus11, ++ cmp_minus10, cmp_plus10, cmp_minus11, cmp_plus11); ++ DUP4_ARG2(__lsx_vsle_bu, src_zero2, src_minus12, src_zero2, ++ src_plus12, src_zero3, src_minus13, src_zero3, src_plus13, ++ cmp_minus12, cmp_plus12, cmp_minus13, cmp_plus13); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus10, cmp_minus10, cmp_plus10, ++ cmp_plus10, cmp_minus11, cmp_minus11, cmp_plus11, ++ cmp_plus11, cmp_minus10, cmp_plus10, cmp_minus11, ++ cmp_plus11); ++ DUP4_ARG2(__lsx_vnor_v, cmp_minus12, cmp_minus12, cmp_plus12, ++ cmp_plus12, cmp_minus13, cmp_minus13, cmp_plus13, ++ cmp_plus13, cmp_minus12, cmp_plus12, cmp_minus13, ++ cmp_plus13); + DUP4_ARG3(__lsx_vbitsel_v, diff_minus10, const1, cmp_minus10, + diff_plus10, const1, cmp_plus10, diff_minus11, const1, +- cmp_minus11, diff_plus11, const1, cmp_plus11, diff_minus10, +- diff_plus10, diff_minus11, diff_plus11); ++ cmp_minus11, diff_plus11, const1, cmp_plus11, ++ diff_minus10, diff_plus10, diff_minus11, diff_plus11); + DUP4_ARG3(__lsx_vbitsel_v, diff_minus12, const1, cmp_minus12, + diff_plus12, const1, cmp_plus12, diff_minus13, const1, +- cmp_minus13, diff_plus13, const1, cmp_plus13, diff_minus12, +- diff_plus12, diff_minus13, diff_plus13); ++ cmp_minus13, diff_plus13, const1, cmp_plus13, ++ diff_minus12, diff_plus12, diff_minus13, diff_plus13); + + DUP4_ARG2(__lsx_vadd_b, diff_minus10, diff_plus10, diff_minus11, + diff_plus11, diff_minus12, diff_plus12, diff_minus13, + diff_plus13, offset_mask0, offset_mask1, offset_mask2, + offset_mask3); +- DUP4_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, offset_mask2, +- 2, offset_mask3, 2, offset_mask0, offset_mask1, offset_mask2, ++ DUP4_ARG2(__lsx_vaddi_bu, offset_mask0, 2, offset_mask1, 2, ++ offset_mask2, 2, offset_mask3, 2, offset_mask0, ++ offset_mask1, offset_mask2, offset_mask3); ++ ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask0, ++ sao_offset, sao_offset, offset_mask0, offset_mask0, ++ offset_mask0); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask1, ++ sao_offset, sao_offset, offset_mask1, offset_mask1, ++ offset_mask1); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask2, ++ sao_offset, sao_offset, offset_mask2, offset_mask2, ++ offset_mask2); ++ DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask3, ++ sao_offset, sao_offset, offset_mask3, offset_mask3, + offset_mask3); + +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask0, sao_offset, +- sao_offset, offset_mask0, offset_mask0, offset_mask0); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask1, sao_offset, +- sao_offset, offset_mask1, offset_mask1, offset_mask1); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask2, sao_offset, +- sao_offset, offset_mask2, offset_mask2, offset_mask2); +- DUP2_ARG3(__lsx_vshuf_b, edge_idx, edge_idx, offset_mask3, sao_offset, +- sao_offset, offset_mask3, offset_mask3, offset_mask3); +- +- DUP4_ARG2(__lsx_vxori_b, src_zero0, 128, src_zero1, 128, src_zero2, 128, +- src_zero3, 128, src_zero0, src_zero1, src_zero2, src_zero3); ++ DUP4_ARG2(__lsx_vxori_b, src_zero0, 128, src_zero1, 128, ++ src_zero2, 128, src_zero3, 128, src_zero0, src_zero1, ++ src_zero2, src_zero3); + DUP4_ARG2(__lsx_vsadd_b, src_zero0, offset_mask0, src_zero1, +- offset_mask1, src_zero2, offset_mask2, src_zero3, offset_mask3, +- dst0, dst1, dst2, dst3); +- DUP4_ARG2(__lsx_vxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, 128, +- dst0, dst1, dst2, dst3); ++ offset_mask1, src_zero2, offset_mask2, src_zero3, ++ offset_mask3, dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, ++ 128, dst0, dst1, dst2, dst3); + + src_minus11 = src10; + src_plus10 = src11; +@@ -2231,9 +2351,9 @@ static void hevc_sao_edge_filter_135degree_16multiple_lsx(uint8_t *dst, + src_plus12 = src13; + + __lsx_vst(dst0, dst_orig, 0); +- __lsx_vst(dst1, dst_orig + dst_stride, 0); +- __lsx_vst(dst2, dst_orig + dst_stride_2x, 0); +- __lsx_vst(dst3, dst_orig + dst_stride_3x, 0); ++ __lsx_vstx(dst1, dst_orig, dst_stride); ++ __lsx_vstx(dst2, dst_orig, dst_stride_2x); ++ __lsx_vstx(dst3, dst_orig, dst_stride_3x); + dst_orig += 16; + } + +@@ -2242,44 +2362,12 @@ static void hevc_sao_edge_filter_135degree_16multiple_lsx(uint8_t *dst, + } + } + +-void ff_hevc_loop_filter_luma_h_8_lsx(uint8_t *src, +- ptrdiff_t src_stride, +- int32_t beta, int32_t *tc, +- uint8_t *no_p, uint8_t *no_q) +-{ +- hevc_loopfilter_luma_hor_lsx(src, src_stride, beta, tc, no_p, no_q); +-} +- +-void ff_hevc_loop_filter_luma_v_8_lsx(uint8_t *src, +- ptrdiff_t src_stride, +- int32_t beta, int32_t *tc, +- uint8_t *no_p, uint8_t *no_q) +-{ +- hevc_loopfilter_luma_ver_lsx(src, src_stride, beta, tc, no_p, no_q); +-} +- +-void ff_hevc_loop_filter_chroma_h_8_lsx(uint8_t *src, +- ptrdiff_t src_stride, +- int32_t *tc, uint8_t *no_p, +- uint8_t *no_q) +-{ +- hevc_loopfilter_chroma_hor_lsx(src, src_stride, tc, no_p, no_q); +-} +- +-void ff_hevc_loop_filter_chroma_v_8_lsx(uint8_t *src, +- ptrdiff_t src_stride, +- int32_t *tc, uint8_t *no_p, +- uint8_t *no_q) +-{ +- hevc_loopfilter_chroma_ver_lsx(src, src_stride, tc, no_p, no_q); +-} +- + void ff_hevc_sao_edge_filter_8_lsx(uint8_t *dst, uint8_t *src, + ptrdiff_t stride_dst, + int16_t *sao_offset_val, + int eo, int width, int height) + { +- ptrdiff_t stride_src = (2 * MAX_PB_SIZE + AV_INPUT_BUFFER_PADDING_SIZE) / sizeof(uint8_t); ++ ptrdiff_t stride_src = (2 * MAX_PB_SIZE + AV_INPUT_BUFFER_PADDING_SIZE); + + switch (eo) { + case 0: +@@ -2289,8 +2377,8 @@ void ff_hevc_sao_edge_filter_8_lsx(uint8_t *dst, uint8_t *src, + sao_offset_val, + width - (width & 0x0F), + height); +- dst += width - (width & 0x0F); +- src += width - (width & 0x0F); ++ dst += width & 0xFFFFFFF0; ++ src += width & 0xFFFFFFF0; + width &= 0x0F; + } + +@@ -2317,8 +2405,8 @@ void ff_hevc_sao_edge_filter_8_lsx(uint8_t *dst, uint8_t *src, + sao_offset_val, + width - (width & 0x0F), + height); +- dst += width - (width & 0x0F); +- src += width - (width & 0x0F); ++ dst += width & 0xFFFFFFF0; ++ src += width & 0xFFFFFFF0; + width &= 0x0F; + } + +@@ -2345,8 +2433,8 @@ void ff_hevc_sao_edge_filter_8_lsx(uint8_t *dst, uint8_t *src, + sao_offset_val, + width - (width & 0x0F), + height); +- dst += width - (width & 0x0F); +- src += width - (width & 0x0F); ++ dst += width & 0xFFFFFFF0; ++ src += width & 0xFFFFFFF0; + width &= 0x0F; + } + +@@ -2373,8 +2461,8 @@ void ff_hevc_sao_edge_filter_8_lsx(uint8_t *dst, uint8_t *src, + sao_offset_val, + width - (width & 0x0F), + height); +- dst += width - (width & 0x0F); +- src += width - (width & 0x0F); ++ dst += width & 0xFFFFFFF0; ++ src += width & 0xFFFFFFF0; + width &= 0x0F; + } + +diff --git a/libavcodec/loongarch/hevc_macros_lsx.h b/libavcodec/loongarch/hevc_macros_lsx.h +deleted file mode 100644 +index 809efc289c..0000000000 +--- a/libavcodec/loongarch/hevc_macros_lsx.h ++++ /dev/null +@@ -1,71 +0,0 @@ +-/* +- * Copyright (c) 2021 Loongson Technology Corporation Limited +- * Contributed by Lu Wang +- * +- * This file is part of FFmpeg. +- * +- * FFmpeg is free software; you can redistribute it and/or +- * modify it under the terms of the GNU Lesser General Public +- * License as published by the Free Software Foundation; either +- * version 2.1 of the License, or (at your option) any later version. +- * +- * FFmpeg 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 +- * Lesser General Public License for more details. +- * +- * You should have received a copy of the GNU Lesser General Public +- * License along with FFmpeg; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +- */ +- +-#ifndef AVCODEC_LOONGARCH_HEVC_MACROS_LSX_H +-#define AVCODEC_LOONGARCH_HEVC_MACROS_LSX_H +- +-static inline __m128i __lsx_hevc_filt_8tap_h(__m128i in0, __m128i in1, __m128i in2, +- __m128i in3, __m128i filt0, __m128i filt1, +- __m128i filt2, __m128i filt3) +-{ +- __m128i out_m; +- +- out_m = __lsx_vdp2_h_b(in0, filt0); +- out_m = __lsx_vdp2add_h_b(out_m, in1, filt1); +- out_m = __lsx_vdp2add_h_b(out_m, in2, filt2); +- out_m = __lsx_vdp2add_h_b(out_m, in3, filt3); +- return out_m; +-} +- +-static inline __m128i __lsx_hevc_filt_8tap_w(__m128i in0, __m128i in1, __m128i in2, +- __m128i in3, __m128i filt0, __m128i filt1, +- __m128i filt2, __m128i filt3) +-{ +- __m128i out_m; +- +- out_m = __lsx_vdp2_w_h(in0, filt0); +- out_m = __lsx_vdp2add_w_h(out_m, in1, filt1); +- out_m = __lsx_vdp2add_w_h(out_m, in2, filt2); +- out_m = __lsx_vdp2add_w_h(out_m, in3, filt3); +- return out_m; +-} +- +-static inline __m128i __lsx_hevc_filt_4tap_h(__m128i in0, __m128i in1, __m128i filt0, +- __m128i filt1) +-{ +- __m128i out_m; +- +- out_m = __lsx_vdp2_h_b(in0, filt0); +- out_m = __lsx_vdp2add_h_b(out_m, in1, filt1); +- return out_m; +-} +- +-static inline __m128i __lsx_hevc_filt_4tap_w(__m128i in0, __m128i in1, __m128i filt0, +- __m128i filt1) +-{ +- __m128i out_m; +- +- out_m = __lsx_vdp2_w_h(in0, filt0); +- out_m = __lsx_vdp2add_w_h(out_m, in1, filt1); +- return out_m; +-} +- +-#endif /* AVCODEC_LOONGARCH_HEVC_MACROS_LSX_H */ +diff --git a/libavcodec/loongarch/hevc_mc_bi_lsx.c b/libavcodec/loongarch/hevc_mc_bi_lsx.c +index 00ee34fff8..9092fdccb2 100644 +--- a/libavcodec/loongarch/hevc_mc_bi_lsx.c ++++ b/libavcodec/loongarch/hevc_mc_bi_lsx.c +@@ -1,6 +1,7 @@ + /* +- * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Copyright (c) 2022 Loongson Technology Corporation Limited + * Contributed by Lu Wang ++ * Hao Chen + * + * This file is part of FFmpeg. + * +@@ -21,7 +22,6 @@ + + #include "libavutil/loongarch/loongson_intrinsics.h" + #include "hevcdsp_lsx.h" +-#include "hevc_macros_lsx.h" + + static const uint8_t ff_hevc_mask_arr[16 * 2] __attribute__((aligned(0x40))) = { + /* 8 width cases */ +@@ -29,200 +29,159 @@ static const uint8_t ff_hevc_mask_arr[16 * 2] __attribute__((aligned(0x40))) = { + 0, 1, 1, 2, 2, 3, 3, 4, 16, 17, 17, 18, 18, 19, 19, 20 + }; + +-static av_always_inline +-void __lsx_hevc_bi_rnd_clip2(__m128i in0, __m128i in1, __m128i vec0, __m128i vec1, +- __m128i *out0, __m128i *out1) ++static av_always_inline __m128i ++hevc_bi_rnd_clip(__m128i in0, __m128i vec0, __m128i in1, __m128i vec1) + { +- *out0 = __lsx_vsadd_h(vec0, in0); +- *out1 = __lsx_vsadd_h(vec1, in1); +- *out0 = __lsx_vsrari_h(*out0, 7); +- *out1 = __lsx_vsrari_h(*out1, 7); +- *out0 = __lsx_vclip255_h(*out0); +- *out1 = __lsx_vclip255_h(*out1); +-} ++ __m128i out; + +-static av_always_inline +-void __lsx_hevc_bi_rnd_clip4(__m128i in0, __m128i in1, __m128i in2, __m128i in3, +- __m128i vec0, __m128i vec1, __m128i vec2, +- __m128i vec3, __m128i *out0, __m128i *out1, +- __m128i *out2, __m128i *out3) +-{ +- __lsx_hevc_bi_rnd_clip2(in0, in1, vec0, vec1, out0, out1); +- __lsx_hevc_bi_rnd_clip2(in2, in3, vec2, vec3, out2, out3); ++ vec0 = __lsx_vsadd_h(in0, vec0); ++ vec1 = __lsx_vsadd_h(in1, vec1); ++ out = __lsx_vssrarni_bu_h(vec1, vec0, 7); ++ return out; + } + +-static void hevc_bi_copy_4w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- int32_t height) ++/* hevc_bi_copy: dst = av_clip_uint8((src0 << 6 + src1) >> 7) */ ++static ++void hevc_bi_copy_4w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, int32_t height) + { +- uint32_t loop_cnt, tp0, tp1, tp2, tp3; +- uint64_t tpd0, tpd1, tpd2, tpd3; +- const int32_t src_stride_2x = (src_stride << 1); +- const int32_t dst_stride_2x = (dst_stride << 1); +- const int32_t src_stride_4x = (src_stride << 2); +- const int32_t dst_stride_4x = (dst_stride << 2); +- const int32_t src2_stride_2x = (src2_stride << 1); +- const int32_t src2_stride_4x = (src2_stride << 2); +- const int32_t src_stride_3x = src_stride_2x + src_stride; +- const int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ int32_t loop_cnt = height >> 3; ++ int32_t res = (height & 0x07) >> 1; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src2_stride_2x = (src2_stride << 1); ++ int32_t src2_stride_4x = (src2_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t src2_stride_3x = src2_stride_2x + src2_stride; + __m128i src0, src1; +- __m128i zero = {0}; ++ __m128i zero = __lsx_vldi(0); + __m128i in0, in1, in2, in3; ++ __m128i tmp0, tmp1, tmp2, tmp3; ++ __m128i reg0, reg1, reg2, reg3; + __m128i dst0, dst1, dst2, dst3; + +- if (2 == height) { +- tp0 = *(uint32_t *)src0_ptr; +- tp1 = *(uint32_t *)(src0_ptr + src_stride); +- DUP2_ARG3(__lsx_vinsgr2vr_w, src0, tp0, 0, src0, tp1, 1, src0, src0); +- tpd0 = *(uint64_t *)src1_ptr; +- tpd1 = *(uint64_t *)(src1_ptr + src2_stride); +- DUP2_ARG3(__lsx_vinsgr2vr_d, in0, tpd0, 0, in0, tpd1, 1, in0, in0); +- +- dst0 = __lsx_vilvl_b(zero, src0); +- dst0 = __lsx_vslli_h(dst0, 6); +- dst0 = __lsx_vadd_h(dst0, in0); +- dst0 = __lsx_vmaxi_h(dst0, 0); +- dst0 = __lsx_vssrlrni_bu_h(dst0, dst0, 7); +- __lsx_vstelm_w(dst0, dst, 0, 0); +- __lsx_vstelm_w(dst0, dst + dst_stride, 0, 1); +- } else if (4 == height) { +- tp0 = *(uint32_t *)src0_ptr; +- tp1 = *(uint32_t *)(src0_ptr + src_stride); +- tp2 = *(uint32_t *)(src0_ptr + src_stride_2x); +- tp3 = *(uint32_t *)(src0_ptr + src_stride_3x); +- DUP4_ARG3(__lsx_vinsgr2vr_w, src0, tp0, 0, src0, tp1, 1, src0, tp2, 2, src0, +- tp3, 3, src0, src0, src0, src0); +- tpd0 = *(uint64_t *)src1_ptr; +- tpd1 = *(uint64_t *)(src1_ptr + src2_stride); +- tpd2 = *(uint64_t *)(src1_ptr + src2_stride_2x); +- tpd3 = *(uint64_t *)(src1_ptr + src2_stride_3x); +- DUP4_ARG3(__lsx_vinsgr2vr_d, in0, tpd0, 0, in0, tpd1, 1, in1, tpd2, 0, in1, +- tpd3, 1, in0, in0, in1, in1); +- dst0 = __lsx_vilvl_b(zero, src0); +- dst1 = __lsx_vilvh_b(zero, src0); +- DUP2_ARG2(__lsx_vslli_h, dst0, 6, dst1, 6, dst0, dst1); +- __lsx_hevc_bi_rnd_clip2(in0, in1, dst0, dst1, &dst0, &dst1); +- dst0 = __lsx_vpickev_b(dst1, dst0); ++ for (;loop_cnt--;) { ++ reg0 = __lsx_vldrepl_w(src0_ptr, 0); ++ reg1 = __lsx_vldrepl_w(src0_ptr + src_stride, 0); ++ reg2 = __lsx_vldrepl_w(src0_ptr + src_stride_2x, 0); ++ reg3 = __lsx_vldrepl_w(src0_ptr + src_stride_3x, 0); ++ src0_ptr += src_stride_4x; ++ DUP2_ARG2(__lsx_vilvl_w, reg1, reg0, reg3, reg2, tmp0, tmp1); ++ src0 = __lsx_vilvl_d(tmp1, tmp0); ++ reg0 = __lsx_vldrepl_w(src0_ptr, 0); ++ reg1 = __lsx_vldrepl_w(src0_ptr + src_stride, 0); ++ reg2 = __lsx_vldrepl_w(src0_ptr + src_stride_2x, 0); ++ reg3 = __lsx_vldrepl_w(src0_ptr + src_stride_3x, 0); ++ DUP2_ARG2(__lsx_vilvl_w, reg1, reg0, reg3, reg2, tmp0, tmp1); ++ src1 = __lsx_vilvl_d(tmp1, tmp0); ++ src0_ptr += src_stride_4x; ++ ++ tmp0 = __lsx_vldrepl_d(src1_ptr, 0); ++ tmp1 = __lsx_vldrepl_d(src1_ptr + src2_stride, 0); ++ tmp2 = __lsx_vldrepl_d(src1_ptr + src2_stride_2x, 0); ++ tmp3 = __lsx_vldrepl_d(src1_ptr + src2_stride_3x, 0); ++ src1_ptr += src2_stride_4x; ++ DUP2_ARG2(__lsx_vilvl_d, tmp1, tmp0, tmp3, tmp2, in0, in1); ++ tmp0 = __lsx_vldrepl_d(src1_ptr, 0); ++ tmp1 = __lsx_vldrepl_d(src1_ptr + src2_stride, 0); ++ tmp2 = __lsx_vldrepl_d(src1_ptr + src2_stride_2x, 0); ++ tmp3 = __lsx_vldrepl_d(src1_ptr + src2_stride_3x, 0); ++ src1_ptr += src2_stride_4x; ++ DUP2_ARG2(__lsx_vilvl_d, tmp1, tmp0, tmp3, tmp2, in2, in3); ++ DUP2_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, dst0, dst2); ++ DUP2_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, dst1, dst3); ++ DUP2_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst1, dst3); ++ dst0 = hevc_bi_rnd_clip(in0, dst0, in1, dst1); ++ dst1 = hevc_bi_rnd_clip(in2, dst2, in3, dst3); + __lsx_vstelm_w(dst0, dst, 0, 0); + __lsx_vstelm_w(dst0, dst + dst_stride, 0, 1); + __lsx_vstelm_w(dst0, dst + dst_stride_2x, 0, 2); + __lsx_vstelm_w(dst0, dst + dst_stride_3x, 0, 3); +- } else if (0 == (height & 0x07)) { +- for (loop_cnt = (height >> 3); loop_cnt--;) { +- tp0 = *(uint32_t *)src0_ptr; +- tp1 = *(uint32_t *)(src0_ptr + src_stride); +- tp2 = *(uint32_t *)(src0_ptr + src_stride_2x); +- tp3 = *(uint32_t *)(src0_ptr + src_stride_3x); +- DUP4_ARG3(__lsx_vinsgr2vr_w, src0, tp0, 0, src0, tp1, 1, src0, tp2, 2, +- src0, tp3, 3, src0, src0, src0, src0); +- src0_ptr += src_stride_4x; +- tp0 = *(uint32_t *)src0_ptr; +- tp1 = *(uint32_t *)(src0_ptr + src_stride); +- tp2 = *(uint32_t *)(src0_ptr + src_stride_2x); +- tp3 = *(uint32_t *)(src0_ptr + src_stride_3x); +- DUP4_ARG3(__lsx_vinsgr2vr_w, src1, tp0, 0, src1, tp1, 1, src1, tp2, 2, +- src1, tp3, 3, src1, src1, src1, src1); +- src0_ptr += src_stride_4x; +- tpd0 = *(uint64_t *)src1_ptr; +- tpd1 = *(uint64_t *)(src1_ptr + src2_stride); +- tpd2 = *(uint64_t *)(src1_ptr + src2_stride_2x); +- tpd3 = *(uint64_t *)(src1_ptr + src2_stride_3x); +- DUP4_ARG3(__lsx_vinsgr2vr_d, in0, tpd0, 0, in0, tpd1, 1, in1, tpd2, 0, +- in1, tpd3, 1, in0, in0, in1, in1); +- src1_ptr += src2_stride_4x; +- tpd0 = *(uint64_t *)src1_ptr; +- tpd1 = *(uint64_t *)(src1_ptr + src2_stride); +- tpd2 = *(uint64_t *)(src1_ptr + src2_stride_2x); +- tpd3 = *(uint64_t *)(src1_ptr + src2_stride_3x); +- DUP4_ARG3(__lsx_vinsgr2vr_d, in2, tpd0, 0, in2, tpd1, 1, in3, tpd2, 0, +- in3, tpd3, 1, in2, in2, in3, in3); +- src1_ptr += src2_stride_4x; +- DUP2_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, dst0, dst2); +- DUP2_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, dst1, dst3); +- DUP2_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst1, dst3); +- +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, +- &dst0, &dst1, &dst2, &dst3); +- DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); +- __lsx_vstelm_w(dst0, dst, 0, 0); +- __lsx_vstelm_w(dst0, dst + dst_stride, 0, 1); +- __lsx_vstelm_w(dst0, dst + dst_stride_2x, 0, 2); +- __lsx_vstelm_w(dst0, dst + dst_stride_3x, 0, 3); +- dst += dst_stride_4x; +- __lsx_vstelm_w(dst1, dst, 0, 0); +- __lsx_vstelm_w(dst1, dst + dst_stride, 0, 1); +- __lsx_vstelm_w(dst1, dst + dst_stride_2x, 0, 2); +- __lsx_vstelm_w(dst1, dst + dst_stride_3x, 0, 3); +- dst += dst_stride_4x; +- } ++ dst += dst_stride_4x; ++ __lsx_vstelm_w(dst1, dst, 0, 0); ++ __lsx_vstelm_w(dst1, dst + dst_stride, 0, 1); ++ __lsx_vstelm_w(dst1, dst + dst_stride_2x, 0, 2); ++ __lsx_vstelm_w(dst1, dst + dst_stride_3x, 0, 3); ++ dst += dst_stride_4x; ++ } ++ for(;res--;) { ++ reg0 = __lsx_vldrepl_w(src0_ptr, 0); ++ reg1 = __lsx_vldrepl_w(src0_ptr + src_stride, 0); ++ reg2 = __lsx_vldrepl_d(src1_ptr, 0); ++ reg3 = __lsx_vldrepl_d(src1_ptr + src2_stride, 0); ++ src0 = __lsx_vilvl_w(reg1, reg0); ++ in0 = __lsx_vilvl_d(reg3, reg2); ++ dst0 = __lsx_vsllwil_hu_bu(src0, 6); ++ dst0 = __lsx_vsadd_h(dst0, in0); ++ dst0 = __lsx_vssrarni_bu_h(dst0, dst0, 7); ++ __lsx_vstelm_w(dst0, dst, 0, 0); ++ __lsx_vstelm_w(dst0, dst + dst_stride, 0, 1); ++ src0_ptr += src_stride_2x; ++ src1_ptr += src2_stride_2x; ++ dst += dst_stride_2x; + } + } + +-static void hevc_bi_copy_6w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- int32_t height) ++static ++void hevc_bi_copy_6w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, int32_t height) + { +- uint32_t loop_cnt; +- uint64_t tp0, tp1, tp2, tp3; +- const int32_t src_stride_2x = (src_stride << 1); +- const int32_t dst_stride_2x = (dst_stride << 1); +- const int32_t src_stride_4x = (src_stride << 2); +- const int32_t dst_stride_4x = (dst_stride << 2); +- const int32_t src2_stride_2x = (src2_stride << 1); +- const int32_t src2_stride_4x = (src2_stride << 2); +- const int32_t src_stride_3x = src_stride_2x + src_stride; +- const int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ int32_t loop_cnt; ++ int32_t res = (height & 0x07) >> 1; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src2_stride_x = (src2_stride << 1); ++ int32_t src2_stride_2x = (src2_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t src2_stride_3x = src2_stride_2x + src2_stride_x; + __m128i out0, out1, out2, out3; +- __m128i zero = {0}; ++ __m128i zero = __lsx_vldi(0); + __m128i src0, src1, src2, src3; + __m128i in0, in1, in2, in3, in4, in5, in6, in7; + __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; ++ __m128i reg0, reg1, reg2, reg3; + + for (loop_cnt = (height >> 3); loop_cnt--;) { +- tp0 = *(uint64_t *)src0_ptr; +- tp1 = *(uint64_t *)(src0_ptr + src_stride); +- tp2 = *(uint64_t *)(src0_ptr + src_stride_2x); +- tp3 = *(uint64_t *)(src0_ptr + src_stride_3x); +- DUP4_ARG3(__lsx_vinsgr2vr_d, src0, tp0, 0, src0, tp1, 1, src1, tp2, 0, src1, +- tp3, 1, src0, src0, src1, src1); ++ reg0 = __lsx_vldrepl_d(src0_ptr, 0); ++ reg1 = __lsx_vldrepl_d(src0_ptr + src_stride, 0); ++ reg2 = __lsx_vldrepl_d(src0_ptr + src_stride_2x, 0); ++ reg3 = __lsx_vldrepl_d(src0_ptr + src_stride_3x, 0); ++ DUP2_ARG2(__lsx_vilvl_d, reg1, reg0, reg3, reg2, src0, src1); + src0_ptr += src_stride_4x; +- tp0 = *(uint64_t *)src0_ptr; +- tp1 = *(uint64_t *)(src0_ptr + src_stride); +- tp2 = *(uint64_t *)(src0_ptr + src_stride_2x); +- tp3 = *(uint64_t *)(src0_ptr + src_stride_3x); +- DUP4_ARG3(__lsx_vinsgr2vr_d, src2, tp0, 0, src2, tp1, 1, src3, tp2, 0, src3, +- tp3, 1, src2, src2, src3, src3); ++ reg0 = __lsx_vldrepl_d(src0_ptr, 0); ++ reg1 = __lsx_vldrepl_d(src0_ptr + src_stride, 0); ++ reg2 = __lsx_vldrepl_d(src0_ptr + src_stride_2x, 0); ++ reg3 = __lsx_vldrepl_d(src0_ptr + src_stride_3x, 0); ++ DUP2_ARG2(__lsx_vilvl_d, reg1, reg0, reg3, reg2, src2, src3); + src0_ptr += src_stride_4x; +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in0, in1, in2, in3); +- src1_ptr += src2_stride_4x; +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in4, in5, in6, in7); +- src1_ptr += src2_stride_4x; ++ in0 = __lsx_vld(src1_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src1_ptr, src2_stride_x, src1_ptr, ++ src2_stride_2x, in1, in2); ++ in3 = __lsx_vldx(src1_ptr, src2_stride_3x); ++ src1_ptr += src2_stride_2x; ++ in4 = __lsx_vld(src1_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src1_ptr, src2_stride_x, src1_ptr, ++ src2_stride_2x, in5, in6); ++ in7 = __lsx_vldx(src1_ptr, src2_stride_3x); ++ src1_ptr += src2_stride_2x; + DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, + dst0, dst2, dst4, dst6); + DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, + dst1, dst3, dst5, dst7); + DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst5, 6, dst7, 6, dst1, dst3, + dst5, dst7); +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, +- &dst0, &dst1, &dst2, &dst3); +- __lsx_hevc_bi_rnd_clip4(in4, in5, in6, in7, dst4, dst5, dst6, dst7, +- &dst4, &dst5, &dst6, &dst7); +- DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); +- DUP2_ARG2(__lsx_vpickev_b, dst5, dst4, dst7, dst6, out2, out3); ++ out0 = hevc_bi_rnd_clip(in0, dst0, in1, dst1); ++ out1 = hevc_bi_rnd_clip(in2, dst2, in3, dst3); ++ out2 = hevc_bi_rnd_clip(in4, dst4, in5, dst5); ++ out3 = hevc_bi_rnd_clip(in6, dst6, in7, dst7); + __lsx_vstelm_w(out0, dst, 0, 0); + __lsx_vstelm_w(out0, dst + dst_stride, 0, 2); + __lsx_vstelm_h(out0, dst, 4, 2); +@@ -242,196 +201,158 @@ static void hevc_bi_copy_6w_lsx(uint8_t *src0_ptr, + __lsx_vstelm_h(out3, dst + dst_stride_3x, 4, 6); + dst += dst_stride_4x; + } ++ for (;res--;) { ++ reg0 = __lsx_vldrepl_d(src0_ptr, 0); ++ reg1 = __lsx_vldrepl_d(src0_ptr + src_stride, 0); ++ src0 = __lsx_vilvl_d(reg1, reg0); ++ src0_ptr += src_stride_2x; ++ in0 = __lsx_vld(src1_ptr, 0); ++ in1 = __lsx_vldx(src1_ptr, src2_stride_x); ++ src1_ptr += src2_stride_x; ++ dst0 = __lsx_vsllwil_hu_bu(src0, 6); ++ dst1 = __lsx_vilvh_b(zero, src0); ++ dst1 = __lsx_vslli_h(dst1, 6); ++ out0 = hevc_bi_rnd_clip(in0, dst0, in1, dst1); ++ __lsx_vstelm_w(out0, dst, 0, 0); ++ __lsx_vstelm_h(out0, dst, 4, 2); ++ dst += dst_stride; ++ __lsx_vstelm_w(out0, dst, 0, 2); ++ __lsx_vstelm_h(out0, dst, 4, 6); ++ dst += dst_stride; ++ } + } + +-static void hevc_bi_copy_8w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- int32_t height) ++static ++void hevc_bi_copy_8w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, int32_t height) + { +- uint64_t tp0, tp1, tp2, tp3; +- const int32_t src_stride_2x = (src_stride << 1); +- const int32_t dst_stride_2x = (dst_stride << 1); +- const int32_t src_stride_4x = (src_stride << 2); +- const int32_t dst_stride_4x = (dst_stride << 2); +- const int32_t src2_stride_2x = (src2_stride << 1); +- const int32_t src2_stride_4x = (src2_stride << 2); +- const int32_t src_stride_3x = src_stride_2x + src_stride; +- const int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ int32_t loop_cnt = height >> 3; ++ int32_t res = (height & 7) >> 1; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src2_stride_x = (src2_stride << 1); ++ int32_t src2_stride_2x = (src2_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t src2_stride_3x = src2_stride_2x + src2_stride_x; + __m128i out0, out1, out2, out3; + __m128i src0, src1, src2, src3; +- __m128i zero = {0}; ++ __m128i zero = __lsx_vldi(0); + __m128i in0, in1, in2, in3, in4, in5, in6, in7; + __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; ++ __m128i reg0, reg1, reg2, reg3; + +- if (2 == height) { +- tp0 = *(uint64_t *)src0_ptr; +- tp1 = *(uint64_t *)(src0_ptr + src_stride); +- DUP2_ARG3(__lsx_vinsgr2vr_d, src0, tp0, 0, src0, tp1, 1, src0, src0); +- DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); +- dst0 = __lsx_vsllwil_hu_bu(src0, 6); +- dst1 = __lsx_vilvh_b(zero, src0); +- dst1 = __lsx_vslli_h(dst1, 6); +- __lsx_hevc_bi_rnd_clip2(in0, in1, dst0, dst1, &dst0, &dst1); +- out0 = __lsx_vpickev_b(dst1, dst0); +- __lsx_vstelm_d(out0, dst, 0, 0); +- __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); +- } else if (4 == height) { +- tp0 = *(uint64_t *)src0_ptr; +- tp1 = *(uint64_t *)(src0_ptr + src_stride); +- tp2 = *(uint64_t *)(src0_ptr + src_stride_2x); +- tp3 = *(uint64_t *)(src0_ptr + src_stride_3x); +- DUP4_ARG3(__lsx_vinsgr2vr_d, src0, tp0, 0, src0, tp1, 1, src1, tp2, 0, src1, +- tp3, 1, src0, src0, src1, src1); +- DUP2_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, dst0, dst2); +- DUP2_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, dst1, dst3); +- DUP2_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst1, dst3); +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, in0, +- in1, in2, in3); +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, +- &dst0, &dst1, &dst2, &dst3); +- DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); ++ for (loop_cnt = (height >> 3); loop_cnt--;) { ++ reg0 = __lsx_vldrepl_d(src0_ptr, 0); ++ reg1 = __lsx_vldrepl_d(src0_ptr + src_stride, 0); ++ reg2 = __lsx_vldrepl_d(src0_ptr + src_stride_2x, 0); ++ reg3 = __lsx_vldrepl_d(src0_ptr + src_stride_3x, 0); ++ DUP2_ARG2(__lsx_vilvl_d, reg1, reg0, reg3, reg2, src0, src1); ++ src0_ptr += src_stride_4x; ++ reg0 = __lsx_vldrepl_d(src0_ptr, 0); ++ reg1 = __lsx_vldrepl_d(src0_ptr + src_stride, 0); ++ reg2 = __lsx_vldrepl_d(src0_ptr + src_stride_2x, 0); ++ reg3 = __lsx_vldrepl_d(src0_ptr + src_stride_3x, 0); ++ DUP2_ARG2(__lsx_vilvl_d, reg1, reg0, reg3, reg2, src2, src3); ++ src0_ptr += src_stride_4x; ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, ++ dst0, dst2, dst4, dst6); ++ DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, ++ src3, dst1, dst3, dst5, dst7); ++ DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst5, 6, dst7, 6, dst1, ++ dst3, dst5, dst7); ++ in0 = __lsx_vld(src1_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src1_ptr, src2_stride_x, src1_ptr, ++ src2_stride_2x, in1, in2); ++ in3 = __lsx_vldx(src1_ptr, src2_stride_3x); ++ src1_ptr += src2_stride_2x; ++ in4 = __lsx_vld(src1_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src1_ptr, src2_stride_x, src1_ptr, ++ src2_stride_2x, in5, in6); ++ in7 = __lsx_vldx(src1_ptr, src2_stride_3x); ++ src1_ptr += src2_stride_2x; ++ out0 = hevc_bi_rnd_clip(in0, dst0, in1, dst1); ++ out1 = hevc_bi_rnd_clip(in2, dst2, in3, dst3); ++ out2 = hevc_bi_rnd_clip(in4, dst4, in5, dst5); ++ out3 = hevc_bi_rnd_clip(in6, dst6, in7, dst7); + __lsx_vstelm_d(out0, dst, 0, 0); + __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); + __lsx_vstelm_d(out1, dst + dst_stride_2x, 0, 0); + __lsx_vstelm_d(out1, dst + dst_stride_3x, 0, 1); +- } else if (6 == height) { +- tp0 = *(uint64_t *)src0_ptr; +- tp1 = *(uint64_t *)(src0_ptr + src_stride); +- tp2 = *(uint64_t *)(src0_ptr + src_stride_2x); +- tp3 = *(uint64_t *)(src0_ptr + src_stride_3x); +- DUP4_ARG3(__lsx_vinsgr2vr_d, src0, tp0, 0, src0, tp1, 1, src1, tp2, 0, src1, +- tp3, 1, src0, src0, src1, src1); +- src0_ptr += src_stride_4x; +- tp0 = *(uint64_t *)src0_ptr; +- tp1 = *(uint64_t *)(src0_ptr + src_stride); +- DUP2_ARG3(__lsx_vinsgr2vr_d, src2, tp0, 0, src2, tp1, 1, src2, src2); +- +- DUP2_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, dst0, dst2); +- DUP2_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, dst1, dst3); +- DUP2_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst1, dst3); +- dst4 = __lsx_vsllwil_hu_bu(src2, 6); +- dst5 = __lsx_vilvh_b(zero, src2); +- dst5 = __lsx_vslli_h(dst5, 6); +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in0, in1, in2, in3); +- src1_ptr += src2_stride_4x; +- DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in4, in5); +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, +- &dst0, &dst1, &dst2, &dst3); +- __lsx_hevc_bi_rnd_clip2(in4, in5, dst4, dst5, &dst4, &dst5); +- DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); +- out2 = __lsx_vpickev_b(dst5, dst4); ++ dst += dst_stride_4x; ++ __lsx_vstelm_d(out2, dst, 0, 0); ++ __lsx_vstelm_d(out2, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(out3, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(out3, dst + dst_stride_3x, 0, 1); ++ dst += dst_stride_4x; ++ } ++ for (;res--;) { ++ reg0 = __lsx_vldrepl_d(src0_ptr, 0); ++ reg1 = __lsx_vldrepl_d(src0_ptr + src_stride, 0); ++ src0 = __lsx_vilvl_d(reg1, reg0); ++ in0 = __lsx_vld(src1_ptr, 0); ++ in1 = __lsx_vldx(src1_ptr, src2_stride_x); ++ dst0 = __lsx_vsllwil_hu_bu(src0, 6); ++ dst1 = __lsx_vilvh_b(zero, src0); ++ dst1 = __lsx_vslli_h(dst1, 6); ++ out0 = hevc_bi_rnd_clip(in0, dst0, in1, dst1); + __lsx_vstelm_d(out0, dst, 0, 0); + __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); +- __lsx_vstelm_d(out1, dst + dst_stride_2x, 0, 0); +- __lsx_vstelm_d(out1, dst + dst_stride_3x, 0, 1); +- __lsx_vstelm_d(out2, dst + dst_stride_4x, 0, 0); +- __lsx_vstelm_d(out2, dst + dst_stride_4x + dst_stride, 0, 1); +- } else if (0 == (height & 0x07)) { +- uint32_t loop_cnt; +- +- for (loop_cnt = (height >> 3); loop_cnt--;) { +- tp0 = *(uint64_t *)src0_ptr; +- tp1 = *(uint64_t *)(src0_ptr + src_stride); +- tp2 = *(uint64_t *)(src0_ptr + src_stride_2x); +- tp3 = *(uint64_t *)(src0_ptr + src_stride_3x); +- DUP4_ARG3(__lsx_vinsgr2vr_d, src0, tp0, 0, src0, tp1, 1, src1, tp2, 0, +- src1, tp3, 1, src0, src0, src1, src1); +- src0_ptr += src_stride_4x; +- tp0 = *(uint64_t *)src0_ptr; +- tp1 = *(uint64_t *)(src0_ptr + src_stride); +- tp2 = *(uint64_t *)(src0_ptr + src_stride_2x); +- tp3 = *(uint64_t *)(src0_ptr + src_stride_3x); +- DUP4_ARG3(__lsx_vinsgr2vr_d, src2, tp0, 0, src2, tp1, 1, src3, tp2, 0, +- src3, tp3, 1, src2, src2, src3, src3); +- src0_ptr += src_stride_4x; +- DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, dst0, +- dst2, dst4, dst6); +- DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, +- dst1, dst3, dst5, dst7); +- DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst5, 6, dst7, 6, dst1, +- dst3, dst5, dst7); +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in0, in1, in2, in3); +- src1_ptr += src2_stride_4x; +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in4, in5, in6, in7); +- src1_ptr += src2_stride_4x; +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, +- dst3, &dst0, &dst1, &dst2, &dst3); +- __lsx_hevc_bi_rnd_clip4(in4, in5, in6, in7, dst4, dst5, dst6, +- dst7, &dst4, &dst5, &dst6, &dst7); +- DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); +- DUP2_ARG2(__lsx_vpickev_b, dst5, dst4, dst7, dst6, out2, out3); +- __lsx_vstelm_d(out0, dst, 0, 0); +- __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); +- __lsx_vstelm_d(out1, dst + dst_stride_2x, 0, 0); +- __lsx_vstelm_d(out1, dst + dst_stride_3x, 0, 1); +- dst += dst_stride_4x; +- __lsx_vstelm_d(out2, dst, 0, 0); +- __lsx_vstelm_d(out2, dst + dst_stride, 0, 1); +- __lsx_vstelm_d(out3, dst + dst_stride_2x, 0, 0); +- __lsx_vstelm_d(out3, dst + dst_stride_3x, 0, 1); +- dst += dst_stride_4x; +- } ++ src0_ptr += src_stride_2x; ++ src1_ptr += src2_stride_x; ++ dst += dst_stride_2x; + } + } + +-static void hevc_bi_copy_12w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- int32_t height) ++static ++void hevc_bi_copy_12w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, int32_t height) + { + uint32_t loop_cnt; +- const int32_t src_stride_2x = (src_stride << 1); +- const int32_t dst_stride_2x = (dst_stride << 1); +- const int32_t src_stride_4x = (src_stride << 2); +- const int32_t dst_stride_4x = (dst_stride << 2); +- const int32_t src2_stride_2x = (src2_stride << 1); +- const int32_t src2_stride_4x = (src2_stride << 2); +- const int32_t src_stride_3x = src_stride_2x + src_stride; +- const int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src2_stride_x = (src2_stride << 1); ++ int32_t src2_stride_2x = (src2_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t src2_stride_3x = src2_stride_2x + src2_stride_x; ++ int16_t* _src1 = src1_ptr + 8; + __m128i out0, out1, out2; + __m128i src0, src1, src2, src3; + __m128i in0, in1, in2, in3, in4, in5, in6, in7; + __m128i dst0, dst1, dst2, dst3, dst4, dst5; + + for (loop_cnt = 4; loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, +- src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, +- src0, src1, src2, src3); ++ src0 = __lsx_vld(src0_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src0_ptr, src_stride, src0_ptr, src_stride_2x, ++ src1, src2); ++ src3 = __lsx_vldx(src0_ptr, src_stride_3x); + src0_ptr += src_stride_4x; +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in0, in1, in2, in3); +- DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, +- src1_ptr + src2_stride_2x, 16, src1_ptr + src2_stride_3x, 16, +- in4, in5, in6, in7); ++ in0 = __lsx_vld(src1_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src1_ptr, src2_stride_x, src1_ptr, ++ src2_stride_2x, in1, in2); ++ in3 = __lsx_vldx(src1_ptr, src2_stride_3x); ++ src1_ptr += src2_stride_2x; ++ in4 = __lsx_vld(_src1, 0); ++ DUP2_ARG2(__lsx_vldx, _src1, src2_stride_x, _src1, src2_stride_2x, ++ in5, in6); ++ in7 = __lsx_vldx(_src1, src2_stride_3x); ++ _src1 += src2_stride_2x; + +- src1_ptr += src2_stride_4x; + DUP2_ARG2(__lsx_vilvl_d, in5, in4, in7, in6, in4, in5); + DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, + dst0, dst1, dst2, dst3) + DUP2_ARG2(__lsx_vilvh_w, src1, src0, src3, src2, src0, src1); + DUP2_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, dst4, dst5) +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, +- &dst0, &dst1, &dst2, &dst3); +- __lsx_hevc_bi_rnd_clip2(in4, in5, dst4, dst5, &dst4, &dst5); +- DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); +- out2 = __lsx_vpickev_b(dst5, dst4); ++ out0 = hevc_bi_rnd_clip(in0, dst0, in1, dst1); ++ out1 = hevc_bi_rnd_clip(in2, dst2, in3, dst3); ++ out2 = hevc_bi_rnd_clip(in4, dst4, in5, dst5); + __lsx_vstelm_d(out0, dst, 0, 0); + __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); + __lsx_vstelm_d(out1, dst + dst_stride_2x, 0, 0); +@@ -444,24 +365,22 @@ static void hevc_bi_copy_12w_lsx(uint8_t *src0_ptr, + } + } + +-static void hevc_bi_copy_16w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- int32_t height) ++static ++void hevc_bi_copy_16w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, int32_t height) + { + uint32_t loop_cnt; +- const int32_t src_stride_2x = (src_stride << 1); +- const int32_t dst_stride_2x = (dst_stride << 1); +- const int32_t src_stride_4x = (src_stride << 2); +- const int32_t dst_stride_4x = (dst_stride << 2); +- const int32_t src2_stride_2x = (src2_stride << 1); +- const int32_t src2_stride_4x = (src2_stride << 2); +- const int32_t src_stride_3x = src_stride_2x + src_stride; +- const int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src2_stride_x = (src2_stride << 1); ++ int32_t src2_stride_2x = (src2_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t src2_stride_3x = src2_stride_2x + src2_stride_x; ++ int16_t *_src1 = src1_ptr + 8; + __m128i out0, out1, out2, out3; + __m128i src0, src1, src2, src3; + __m128i in0, in1, in2, in3, in4, in5, in6, in7; +@@ -469,30 +388,32 @@ static void hevc_bi_copy_16w_lsx(uint8_t *src0_ptr, + __m128i zero = {0}; + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, +- src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, +- src0, src1, src2, src3); ++ src0 = __lsx_vld(src0_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src0_ptr, src_stride, src0_ptr, src_stride_2x, ++ src1, src2); ++ src3 = __lsx_vldx(src0_ptr, src_stride_3x); + src0_ptr += src_stride_4x; +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in0, in1, in2, in3); +- DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, +- src1_ptr + src2_stride_2x, 16, src1_ptr + src2_stride_3x, 16, +- in4, in5, in6, in7); +- src1_ptr += src2_stride_4x; ++ in0 = __lsx_vld(src1_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src1_ptr, src2_stride_x, src1_ptr, ++ src2_stride_2x, in1, in2); ++ in3 = __lsx_vldx(src1_ptr, src2_stride_3x); ++ src1_ptr += src2_stride_2x; ++ in4 = __lsx_vld(_src1, 0); ++ DUP2_ARG2(__lsx_vldx, _src1, src2_stride_x, _src1, src2_stride_2x, ++ in5, in6); ++ in7 = __lsx_vldx(_src1, src2_stride_3x); ++ _src1 += src2_stride_2x; + DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, + dst0_r, dst1_r, dst2_r, dst3_r) + DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, + dst0_l, dst1_l, dst2_l, dst3_l); +- DUP4_ARG2(__lsx_vslli_h, dst0_l, 6, dst1_l, 6, dst2_l, 6, dst3_l, 6, dst0_l, +- dst1_l, dst2_l, dst3_l); +- +- __lsx_hevc_bi_rnd_clip4(in0, in1, in4, in5, dst0_r, dst1_r, dst0_l, +- dst1_l, &dst0_r, &dst1_r, &dst0_l, &dst1_l); +- __lsx_hevc_bi_rnd_clip4(in2, in3, in6, in7, dst2_r, dst3_r, dst2_l, +- dst3_l, &dst2_r, &dst3_r, &dst2_l, &dst3_l); +- DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, out0, out1); +- DUP2_ARG2(__lsx_vpickev_b, dst2_l, dst2_r, dst3_l, dst3_r, out2, out3); ++ DUP4_ARG2(__lsx_vslli_h, dst0_l, 6, dst1_l, 6, dst2_l, 6, dst3_l, 6, ++ dst0_l, dst1_l, dst2_l, dst3_l); ++ ++ out0 = hevc_bi_rnd_clip(in0, dst0_r, in4, dst0_l); ++ out1 = hevc_bi_rnd_clip(in1, dst1_r, in5, dst1_l); ++ out2 = hevc_bi_rnd_clip(in2, dst2_r, in6, dst2_l); ++ out3 = hevc_bi_rnd_clip(in3, dst3_r, in7, dst3_l); + __lsx_vst(out0, dst, 0); + __lsx_vstx(out1, dst, dst_stride); + __lsx_vstx(out2, dst, dst_stride_2x); +@@ -501,245 +422,54 @@ static void hevc_bi_copy_16w_lsx(uint8_t *src0_ptr, + } + } + +-static void hevc_bi_copy_24w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- int32_t height) ++static ++void hevc_bi_copy_24w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, int32_t height) + { +- uint32_t loop_cnt; +- const int32_t src_stride_2x = (src_stride << 1); +- const int32_t dst_stride_2x = (dst_stride << 1); +- const int32_t src_stride_4x = (src_stride << 2); +- const int32_t dst_stride_4x = (dst_stride << 2); +- const int32_t src2_stride_2x = (src2_stride << 1); +- const int32_t src2_stride_4x = (src2_stride << 2); +- const int32_t src_stride_3x = src_stride_2x + src_stride; +- const int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- const int32_t src2_stride_3x = src2_stride_2x + src2_stride; +- __m128i out0, out1, out2, out3, out4, out5; +- __m128i zero = {0}; +- __m128i in0, in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11; +- __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, dst8, dst9, dst10, dst11; +- +- for (loop_cnt = 8; loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, +- src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, +- in0, in1, in4, in5); +- DUP4_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, +- src0_ptr + src_stride_2x, 16, src0_ptr + src_stride_3x, 16, +- in2, in3, in6, in7); +- DUP4_ARG2(__lsx_vsllwil_hu_bu, in0, 6, in1, 6, in2, 6, in3, 6, +- dst0, dst2, dst4, dst5) +- +- DUP4_ARG2(__lsx_vilvh_b, zero, in0, zero, in1, zero, in4, zero, in5, +- dst1, dst3, dst7, dst9); +- DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst7, 6, dst9, 6, +- dst1, dst3, dst7, dst9); +- DUP4_ARG2(__lsx_vsllwil_hu_bu, in4, 6, in5, 6, in6, 6, in7, 6, +- dst6, dst8, dst10, dst11) +- +- src0_ptr += src_stride_4x; +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in0, in1, in2, in3); +- DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, +- src1_ptr + src2_stride_2x, 16, src1_ptr + src2_stride_3x, 16, +- in4, in5, in6, in7); +- DUP4_ARG2(__lsx_vld, src1_ptr, 32, src1_ptr + src2_stride, 32, +- src1_ptr + src2_stride_2x, 32, src1_ptr + src2_stride_3x, 32, +- in8, in9, in10, in11); +- src1_ptr += src2_stride_4x; +- +- __lsx_hevc_bi_rnd_clip4(in0, in4, in1, in5, dst0, dst1, dst2, dst3, +- &dst0, &dst1, &dst2, &dst3); +- __lsx_hevc_bi_rnd_clip4(in8, in9, in2, in6, dst4, dst5, dst6, dst7, +- &dst4, &dst5, &dst6, &dst7); +- __lsx_hevc_bi_rnd_clip4(in3, in7, in10, in11, dst8, dst9, dst10, dst11, +- &dst8, &dst9, &dst10, &dst11); +- DUP4_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, +- out0, out1, out2, out3); +- DUP2_ARG2(__lsx_vpickev_b, dst9, dst8, dst11, dst10, out4, out5); +- __lsx_vst(out0, dst, 0); +- __lsx_vstelm_d(out2, dst, 16, 0); +- __lsx_vstx(out1, dst, dst_stride); +- __lsx_vstelm_d(out2, dst + dst_stride, 16, 1); +- __lsx_vstx(out3, dst, dst_stride_2x); +- __lsx_vstelm_d(out5, dst + dst_stride_2x, 16, 0); +- __lsx_vstx(out4, dst, dst_stride_3x); +- __lsx_vstelm_d(out5, dst + dst_stride_3x, 16, 1); +- dst += dst_stride_4x; +- } ++ hevc_bi_copy_16w_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, height); ++ hevc_bi_copy_8w_lsx(src0_ptr + 16, src_stride, src1_ptr + 16, src2_stride, ++ dst + 16, dst_stride, height); + } + +-static void hevc_bi_copy_32w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- int32_t height) ++static ++void hevc_bi_copy_32w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, int32_t height) + { +- uint32_t loop_cnt; +- __m128i out0, out1, out2, out3; +- __m128i src0, src1, src2, src3; +- __m128i zero = {0}; +- __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; +- __m128i in0, in1, in2, in3, in4, in5, in6, in7; +- +- for (loop_cnt = (height >> 1); loop_cnt--;) { +- DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); +- src0_ptr += src_stride; +- DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src2, src3); +- src0_ptr += src_stride; +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, 48, +- in0, in1, in2, in3); +- src1_ptr += src2_stride; +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, 48, +- in4, in5, in6, in7); +- src1_ptr += src2_stride; +- +- DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, +- dst0, dst2, dst4, dst6) +- DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, +- dst1, dst3, dst5, dst7); +- DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst5, 6, dst7, 6, dst1, dst3, +- dst5, dst7); +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, +- &dst0, &dst1, &dst2, &dst3); +- __lsx_hevc_bi_rnd_clip4(in4, in5, in6, in7, dst4, dst5, dst6, dst7, +- &dst4, &dst5, &dst6, &dst7); +- DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); +- DUP2_ARG2(__lsx_vpickev_b, dst5, dst4, dst7, dst6, out2, out3); +- __lsx_vst(out0, dst, 0); +- __lsx_vst(out1, dst, 16); +- dst += dst_stride; +- __lsx_vst(out2, dst, 0); +- __lsx_vst(out3, dst, 16); +- dst += dst_stride; +- } ++ hevc_bi_copy_16w_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, height); ++ hevc_bi_copy_16w_lsx(src0_ptr + 16, src_stride, src1_ptr + 16, src2_stride, ++ dst + 16, dst_stride, height); + } + +-static void hevc_bi_copy_48w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- int32_t height) ++static ++void hevc_bi_copy_48w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, int32_t height) + { +- uint32_t loop_cnt; +- __m128i out0, out1, out2, out3, out4, out5; +- __m128i src0, src1, src2, src3, src4, src5; +- __m128i zero = {0}; +- __m128i in0, in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11; +- __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, dst8, dst9, dst10, dst11; +- +- for (loop_cnt = (height >> 1); loop_cnt--;) { +- DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); +- src2 = __lsx_vld(src0_ptr, 32); +- src0_ptr += src_stride; +- DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src3, src4); +- src5 = __lsx_vld(src0_ptr, 32); +- src0_ptr += src_stride; +- +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, 48, +- in0, in1, in2, in3); +- DUP2_ARG2(__lsx_vld, src1_ptr, 64, src1_ptr, 80, in4, in5); +- src1_ptr += src2_stride; +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, 48, +- in6, in7, in8, in9); +- DUP2_ARG2(__lsx_vld, src1_ptr, 64, src1_ptr, 80, in10, in11); +- src1_ptr += src2_stride; +- +- DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, +- dst0, dst2, dst4, dst6); +- DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, +- dst1, dst3, dst5, dst7); +- DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst5, 6, dst7, 6, dst1, dst3, +- dst5, dst7); +- DUP2_ARG2(__lsx_vsllwil_hu_bu, src4, 6, src5, 6, dst8, dst10); +- DUP2_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, dst9, dst11); +- DUP2_ARG2(__lsx_vslli_h, dst9, 6, dst11, 6, dst9, dst11); +- +- +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, +- &dst0, &dst1, &dst2, &dst3); +- __lsx_hevc_bi_rnd_clip4(in4, in5, in6, in7, dst4, dst5, dst6, dst7, +- &dst4, &dst5, &dst6, &dst7); +- __lsx_hevc_bi_rnd_clip4(in8, in9, in10, in11, dst8, dst9, dst10, dst11, +- &dst8, &dst9, &dst10, &dst11); +- DUP4_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, +- out0, out1, out2, out3); +- DUP2_ARG2(__lsx_vpickev_b, dst9, dst8, dst11, dst10, out4, out5); +- __lsx_vst(out0, dst, 0); +- __lsx_vst(out1, dst, 16); +- __lsx_vst(out2, dst, 32); +- dst += dst_stride; +- __lsx_vst(out3, dst, 0); +- __lsx_vst(out4, dst, 16); +- __lsx_vst(out5, dst, 32); +- dst += dst_stride; +- } ++ hevc_bi_copy_16w_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, height); ++ hevc_bi_copy_32w_lsx(src0_ptr + 16, src_stride, src1_ptr + 16, src2_stride, ++ dst + 16, dst_stride, height); + } + +-static void hevc_bi_copy_64w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- int32_t height) ++static ++void hevc_bi_copy_64w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, int32_t height) + { +- uint32_t loop_cnt; +- __m128i out0, out1, out2, out3; +- __m128i src0, src1, src2, src3; +- __m128i zero = {0}; +- __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; +- __m128i in0, in1, in2, in3, in4, in5, in6, in7; +- +- for (loop_cnt = height; loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0_ptr, 32, src0_ptr, 48, +- src0, src1, src2, src3); +- src0_ptr += src_stride; +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, 48, +- in0, in1, in2, in3); +- DUP4_ARG2(__lsx_vld, src1_ptr, 64, src1_ptr, 80, src1_ptr, 96, src1_ptr, 112, +- in4, in5, in6, in7); +- src1_ptr += src2_stride; +- +- DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, +- dst0, dst2, dst4, dst6); +- DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, +- dst1, dst3, dst5, dst7); +- DUP4_ARG2(__lsx_vslli_h, dst1, 6, dst3, 6, dst5, 6, dst7, 6, dst1, dst3, +- dst5, dst7); +- +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, +- &dst0, &dst1, &dst2, &dst3); +- __lsx_hevc_bi_rnd_clip4(in4, in5, in6, in7, dst4, dst5, dst6, dst7, +- &dst4, &dst5, &dst6, &dst7); +- DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, out0, out1); +- DUP2_ARG2(__lsx_vpickev_b, dst5, dst4, dst7, dst6, out2, out3); +- +- __lsx_vst(out0, dst, 0); +- __lsx_vst(out1, dst, 16); +- __lsx_vst(out2, dst, 32); +- __lsx_vst(out3, dst, 48); +- dst += dst_stride; +- } ++ hevc_bi_copy_32w_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, height); ++ hevc_bi_copy_32w_lsx(src0_ptr + 32, src_stride, src1_ptr + 32, src2_stride, ++ dst + 32, dst_stride, height); + } + +-static void hevc_hz_bi_8t_16w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter, +- int32_t height) ++static void hevc_hz_8t_16w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) + { + uint32_t loop_cnt; + const int32_t dst_stride_2x = (dst_stride << 1); +@@ -749,13 +479,11 @@ static void hevc_hz_bi_8t_16w_lsx(uint8_t *src0_ptr, + __m128i vec0, vec1, vec2, vec3; + __m128i dst0, dst1, dst2, dst3; + __m128i in0, in1, in2, in3; +- __m128i const_vec; + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + + src0_ptr -= 3; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filt0, filt1, filt2, filt3); + + DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); +@@ -769,43 +497,44 @@ static void hevc_hz_bi_8t_16w_lsx(uint8_t *src0_ptr, + src1_ptr += src2_stride; + DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, in2, in3); + src1_ptr += src2_stride; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, +- vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, +- vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); +- +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, &dst0, &dst1, +- &dst2, &dst3); +- DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); ++ ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, ++ vec2, vec3); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec1, filt0, vec2, filt0, ++ vec3, filt0, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, ++ vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec0, filt1, dst1, vec1, filt1, ++ dst2, vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, ++ vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec0, filt2, dst1, vec1, filt2, ++ dst2, vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, ++ vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec0, filt3, dst1, vec1, filt3, ++ dst2, vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ ++ dst0 = hevc_bi_rnd_clip(in0, dst0, in1, dst1); ++ dst1 = hevc_bi_rnd_clip(in2, dst2, in3, dst3); + __lsx_vst(dst0, dst, 0); + __lsx_vstx(dst1, dst, dst_stride); + dst += dst_stride_2x; + } + } + +-static void hevc_hz_bi_8t_24w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter, +- int32_t height) ++static void hevc_hz_8t_24w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) + { + uint32_t loop_cnt; + __m128i src0, src1, tmp0, tmp1; +@@ -814,16 +543,14 @@ static void hevc_hz_bi_8t_24w_lsx(uint8_t *src0_ptr, + __m128i vec0, vec1, vec2, vec3; + __m128i dst0, dst1, dst2; + __m128i in0, in1, in2; +- __m128i const_vec; + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + + src0_ptr -= 3; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filt0, filt1, filt2, filt3); + +- DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, +- mask3, mask4); ++ DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, ++ mask2, mask3, mask4); + DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); + mask7 = __lsx_vaddi_bu(mask0, 14); + +@@ -833,26 +560,24 @@ static void hevc_hz_bi_8t_24w_lsx(uint8_t *src0_ptr, + DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, in0, in1); + in2 = __lsx_vld(src1_ptr, 32); + src1_ptr += src2_stride; +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, src1, src1, +- mask0, src0, src0, mask1, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, dst0, vec3, filt1, dst0, dst1, dst2, dst0); +- DUP4_ARG3(__lsx_vshuf_b, src1, src0, mask5, src1, src1, mask1, src0, src0, +- mask2, src1, src0, mask6, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst1, vec0, filt1, dst2, vec1, filt1, dst0, vec2, +- filt2, dst1, vec3, filt2, dst1, dst2, dst0, dst1); ++ ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, src1, ++ src1, mask0, src0, src0, mask1, vec0, vec1, vec2, vec3); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec1, filt0, dst0, dst1); ++ dst2 = __lsx_vdp2_h_bu_b(vec2, filt0); ++ dst0 = __lsx_vdp2add_h_bu_b(dst0, vec3, filt1); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src0, mask5, src1, src1, mask1, src0, ++ src0, mask2, src1, src0, mask6, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst1, vec0, filt1, dst2, vec1, filt1, ++ dst0, vec2, filt2, dst1, vec3, filt2, dst1, dst2, dst0, dst1); + DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask2, src0, src0, mask3, src1, src0, + mask7, src1, src1, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst2, vec0, filt2, dst0, vec1, filt3, dst1, +- vec2, filt3, dst2, vec3, filt3, dst2, dst0, dst1, dst2); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst2, vec0, filt2, dst0, vec1, filt3, ++ dst1, vec2, filt3, dst2, vec3, filt3, dst2, dst0, dst1, dst2); + +- __lsx_hevc_bi_rnd_clip2(in0, in1, dst0, dst1, &dst0, &dst1); +- tmp0 = __lsx_vpickev_b(dst1, dst0); ++ tmp0 = hevc_bi_rnd_clip(in0, dst0, in1, dst1); + dst2 = __lsx_vsadd_h(dst2, in2); +- dst2 = __lsx_vmaxi_h(dst2, 0); +- tmp1 = __lsx_vssrlrni_bu_h(dst2, dst2, 7); ++ tmp1 = __lsx_vssrarni_bu_h(dst2, dst2, 7); + + __lsx_vst(tmp0, dst, 0); + __lsx_vstelm_d(tmp1, dst, 16, 0); +@@ -860,273 +585,54 @@ static void hevc_hz_bi_8t_24w_lsx(uint8_t *src0_ptr, + } + } + +-static void hevc_hz_bi_8t_32w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter, +- int32_t height) ++static void hevc_hz_8t_32w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) + { +- uint32_t loop_cnt; +- __m128i src0, src1, src2, tmp0, tmp1; +- __m128i filt0, filt1, filt2, filt3; +- __m128i mask1, mask2, mask3, mask4, mask5, mask6, mask7; +- __m128i vec0, vec1, vec2, vec3; +- __m128i dst0, dst1, dst2, dst3; +- __m128i in0, in1, in2, in3; +- __m128i const_vec; +- __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); +- +- src0_ptr -= 3; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- +- DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); +- +- DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, +- mask3, mask4); +- DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); +- mask7 = __lsx_vaddi_bu(mask0, 14); +- +- for (loop_cnt = height; loop_cnt--;) { +- DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); +- src2 = __lsx_vld(src0_ptr, 24); +- src0_ptr += src_stride; +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, +- 48, in0, in1, in2, in3); +- src1_ptr += src2_stride; +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- src2 = __lsx_vxori_b(src2, 128); +- +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src2, src2, mask0, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask1, src2, src2, mask1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask2, src2, src2, mask2, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, vec2, +- filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask3, src2, src2, mask3, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, vec2, +- filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); +- +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, +- &dst0, &dst1, &dst2, &dst3); +- +- DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, tmp0, tmp1); +- __lsx_vst(tmp0, dst, 0); +- __lsx_vst(tmp1, dst, 16); +- dst += dst_stride; +- } ++ hevc_hz_8t_16w_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter, height); ++ hevc_hz_8t_16w_lsx(src0_ptr + 16, src_stride, src1_ptr + 16, src2_stride, ++ dst + 16, dst_stride, filter, height); + } + +-static void hevc_hz_bi_8t_48w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter, +- int32_t height) ++static void hevc_hz_8t_48w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) + { +- uint32_t loop_cnt; +- __m128i src0, src1, src2, src3; +- __m128i tmp0, tmp1, tmp2; +- __m128i filt0, filt1, filt2, filt3; +- __m128i mask1, mask2, mask3, mask4, mask5, mask6, mask7; +- __m128i vec0, vec1, vec2, vec3; +- __m128i dst0, dst1, dst2, dst3, dst4, dst5; +- __m128i in0, in1, in2, in3, in4, in5; +- __m128i const_vec; +- __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); +- +- src0_ptr -= 3; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); +- +- DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, +- mask3, mask4); +- DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); +- mask7 = __lsx_vaddi_bu(mask0, 14); +- +- for (loop_cnt = 64; loop_cnt--;) { +- DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); +- DUP2_ARG2(__lsx_vld, src0_ptr, 32, src0_ptr, 40, src2, src3); +- src0_ptr += src_stride; +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, +- 48, in0, in1, in2, in3); +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); +- +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, src1, src1, +- mask0, src2, src1, mask4, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, dst3); +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, src1, src1, +- mask1, src2, src1, mask5, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, src1, src1, +- mask2, src2, src1, mask6, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, +- vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, src1, src1, +- mask3, src2, src1, mask7, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, +- vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); +- __lsx_hevc_bi_rnd_clip2(in0, in1, dst0, dst1, &dst0, &dst1); +- __lsx_hevc_bi_rnd_clip2(in2, in3, dst2, dst3, &dst2, &dst3); +- DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, tmp0, tmp1); +- __lsx_vst(tmp0, dst, 0); +- __lsx_vst(tmp1, dst, 16); +- +- DUP2_ARG2(__lsx_vld, src1_ptr, 64, src1_ptr, 80, in4, in5); +- src1_ptr += src2_stride; +- DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, src2, src2, +- mask1, src3, src3, mask1, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- dst4, vec2, filt1, dst5, vec3, filt1, dst4, dst5, dst4, dst5); +- DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, src2, src2, +- mask3, src3, src3, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst4, vec0, filt2, dst5, vec1, filt2, dst4, +- vec2, filt3, dst5, vec3, filt3, dst4, dst5, dst4, dst5); +- +- __lsx_hevc_bi_rnd_clip2(in4, in5, dst4, dst5, &dst4, &dst5); +- tmp2 = __lsx_vpickev_b(dst5, dst4); +- __lsx_vst(tmp2, dst, 32); +- dst += dst_stride; +- } ++ hevc_hz_8t_16w_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter, height); ++ hevc_hz_8t_32w_lsx(src0_ptr + 16, src_stride, src1_ptr + 16, src2_stride, ++ dst + 16, dst_stride, filter, height); + } + +-static void hevc_hz_bi_8t_64w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter, +- int32_t height) ++static void hevc_hz_8t_64w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) + { +- uint32_t loop_cnt; +- __m128i src0, src1, src2, src3, src4, src5, tmp0, tmp1; +- __m128i filt0, filt1, filt2, filt3; +- __m128i mask1, mask2, mask3, mask4, mask5, mask6, mask7; +- __m128i vec0, vec1, vec2, vec3; +- __m128i dst0, dst1, dst2, dst3; +- __m128i in0, in1, in2, in3; +- __m128i const_vec; +- __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); +- +- src0_ptr -= 3; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- +- DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); +- +- DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, +- mask3, mask4); +- DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); +- mask7 = __lsx_vaddi_bu(mask0, 14); +- +- for (loop_cnt = height; loop_cnt--;) { +- DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); +- src2 = __lsx_vld(src0_ptr, 24); +- DUP2_ARG2(__lsx_vld, src0_ptr, 32, src0_ptr, 48, src3, src4); +- src5 = __lsx_vld(src0_ptr, 56); +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, +- 48, in0, in1, in2, in3); +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- src2 = __lsx_vxori_b(src2, 128); +- +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src2, src2, mask0, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask1, src2, src2, mask1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask2, src2, src2, mask2, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, +- vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask3, src2, src2, mask3, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, +- vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); +- +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, +- &dst0, &dst1, &dst2, &dst3); +- +- DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, tmp0, tmp1); +- __lsx_vst(tmp0, dst, 0); +- __lsx_vst(tmp1, dst, 16); +- +- src0 = src3; +- src1 = src4; +- src2 = src5; +- +- DUP4_ARG2(__lsx_vld, src1_ptr, 64, src1_ptr, 80, src1_ptr, 96, src1_ptr, +- 112, in0, in1, in2, in3); +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- src2 = __lsx_vxori_b(src2, 128); +- +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src2, src2, mask0, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask1, src2, src2, mask1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask2, src2, src2, mask2, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, +- vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask3, src2, src2, mask3, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, +- vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, +- &dst0, &dst1, &dst2, &dst3); +- +- DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, tmp0, tmp1); +- __lsx_vst(tmp0, dst, 32); +- __lsx_vst(tmp1, dst, 48); +- src1_ptr += src2_stride; +- src0_ptr += src_stride; +- dst += dst_stride; +- } ++ hevc_hz_8t_32w_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter, height); ++ hevc_hz_8t_32w_lsx(src0_ptr + 32, src_stride, src1_ptr + 32, src2_stride, ++ dst + 32, dst_stride, filter, height); + } + + static av_always_inline +-void hevc_vt_bi_8t_8w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter, +- int32_t height) ++void hevc_vt_8t_8w_lsx(uint8_t *src0_ptr, int32_t src_stride, int16_t *src1_ptr, ++ int32_t src2_stride, uint8_t *dst, int32_t dst_stride,\ ++ const int8_t *filter, int32_t height) + { + int32_t loop_cnt; +- const int32_t src_stride_2x = (src_stride << 1); +- const int32_t dst_stride_2x = (dst_stride << 1); +- const int32_t src_stride_4x = (src_stride << 2); +- const int32_t dst_stride_4x = (dst_stride << 2); +- const int32_t src2_stride_2x = (src2_stride << 1); +- const int32_t src2_stride_4x = (src2_stride << 2); +- const int32_t src_stride_3x = src_stride_2x + src_stride; +- const int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src2_stride_x = (src2_stride << 1); ++ int32_t src2_stride_2x = (src2_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t src2_stride_3x = src2_stride_2x + src2_stride_x; + __m128i src0, src1, src2, src3, src4, src5; + __m128i src6, src7, src8, src9, src10; + __m128i in0, in1, in2, in3; +@@ -1134,59 +640,53 @@ void hevc_vt_bi_8t_8w_lsx(uint8_t *src0_ptr, + __m128i src21_r, src43_r, src65_r, src87_r, src109_r; + __m128i dst0_r, dst1_r, dst2_r, dst3_r; + __m128i filt0, filt1, filt2, filt3; +- __m128i const_vec; + + src0_ptr -= src_stride_3x; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, + filt0, filt1, filt2, filt3); + +- DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0_ptr + src_stride_2x, +- 0, src0_ptr + src_stride_3x, 0, src0, src1, src2, src3); ++ src0 = __lsx_vld(src0_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src0_ptr, src_stride, src0_ptr, src_stride_2x, ++ src1, src2); ++ src3 = __lsx_vldx(src0_ptr, src_stride_3x); + src0_ptr += src_stride_4x; +- DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src4, src5); +- src6 = __lsx_vld(src0_ptr + src_stride_2x, 0); ++ src4 = __lsx_vld(src0_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src0_ptr, src_stride, src0_ptr, src_stride_2x, ++ src5, src6); + src0_ptr += src_stride_3x; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, +- src2, src3); +- DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); +- src6 = __lsx_vxori_b(src6, 128); + DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, + src10_r, src32_r, src54_r, src21_r); + DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, +- src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, +- src7, src8, src9, src10); ++ src7 = __lsx_vld(src0_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src0_ptr, src_stride, src0_ptr, src_stride_2x, ++ src8, src9); ++ src10 = __lsx_vldx(src0_ptr, src_stride_3x); + src0_ptr += src_stride_4x; +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in0, in1, in2, in3); +- src1_ptr += src2_stride_4x; +- DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, +- src8, src9, src10); ++ in0 = __lsx_vld(src1_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src1_ptr, src2_stride_x, src1_ptr, src2_stride_2x, ++ in1, in2); ++ in3 = __lsx_vldx(src1_ptr, src2_stride_3x); ++ src1_ptr += src2_stride_2x; + DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, + src76_r, src87_r, src98_r, src109_r); + +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, dst0_r, src54_r, filt2, dst0_r, src76_r, filt3, dst0_r, +- dst0_r, dst0_r, dst0_r); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, +- filt1, dst1_r, src65_r, filt2, dst1_r, src87_r, filt3, dst1_r, +- dst1_r, dst1_r, dst1_r); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src32_r, filt0, dst2_r, src54_r, +- filt1, dst2_r, src76_r, filt2, dst2_r, src98_r, filt3, dst2_r, +- dst2_r, dst2_r, dst2_r); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src43_r, filt0, dst3_r, src65_r, +- filt1, dst3_r, src87_r, filt2, dst3_r, src109_r, filt3, dst3_r, +- dst3_r, dst3_r, dst3_r); +- +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst2_r, dst3_r, +- &dst0_r, &dst1_r, &dst2_r, &dst3_r); +- +- DUP2_ARG2(__lsx_vpickev_b, dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst1_r); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, src10_r, filt0, src21_r, filt0, src32_r, ++ filt0, src43_r, filt0, dst0_r, dst1_r, dst2_r, dst3_r); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0_r, src32_r, filt1, dst1_r, src43_r, ++ filt1, dst2_r, src54_r, filt1, dst3_r, src65_r, filt1, ++ dst0_r, dst1_r, dst2_r, dst3_r); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0_r, src54_r, filt2, dst1_r, src65_r, ++ filt2, dst2_r, src76_r, filt2, dst3_r, src87_r, filt2, ++ dst0_r, dst1_r, dst2_r, dst3_r); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0_r, src76_r, filt3, dst1_r, src87_r, ++ filt3, dst2_r, src98_r, filt3, dst3_r, src109_r, filt3, ++ dst0_r, dst1_r, dst2_r, dst3_r); ++ ++ dst0_r = hevc_bi_rnd_clip(in0, dst0_r, in1, dst1_r); ++ dst1_r = hevc_bi_rnd_clip(in2, dst2_r, in3, dst3_r); + __lsx_vstelm_d(dst0_r, dst, 0, 0); + __lsx_vstelm_d(dst0_r, dst + dst_stride, 0, 1); + __lsx_vstelm_d(dst1_r, dst + dst_stride_2x, 0, 0); +@@ -1205,26 +705,21 @@ void hevc_vt_bi_8t_8w_lsx(uint8_t *src0_ptr, + } + + static av_always_inline +-void hevc_vt_bi_8t_16multx2mult_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter, +- int32_t height, +- int32_t width) ++void hevc_vt_8t_16multx2mult_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height, ++ int32_t width) + { + uint8_t *src0_ptr_tmp; + int16_t *src1_ptr_tmp; + uint8_t *dst_tmp; + uint32_t loop_cnt; + uint32_t cnt; +- const int32_t src_stride_2x = (src_stride << 1); +- const int32_t dst_stride_2x = (dst_stride << 1); +- const int32_t src_stride_4x = (src_stride << 2); +- const int32_t src2_stride_2x = (src2_stride << 1); +- const int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; + __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8; + __m128i in0, in1, in2, in3; + __m128i src10_r, src32_r, src54_r, src76_r; +@@ -1234,10 +729,8 @@ void hevc_vt_bi_8t_16multx2mult_lsx(uint8_t *src0_ptr, + __m128i src21_l, src43_l, src65_l, src87_l; + __m128i dst0_l, dst1_l; + __m128i filt0, filt1, filt2, filt3; +- __m128i const_vec; + + src0_ptr -= src_stride_3x; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, + filt0, filt1, filt2, filt3); +@@ -1247,17 +740,15 @@ void hevc_vt_bi_8t_16multx2mult_lsx(uint8_t *src0_ptr, + src1_ptr_tmp = src1_ptr; + dst_tmp = dst; + +- DUP4_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, +- src0_ptr_tmp + src_stride_2x, 0, src0_ptr_tmp + src_stride_3x, +- 0, src0, src1, src2, src3); ++ src0 = __lsx_vld(src0_ptr_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src0_ptr_tmp, src_stride, src0_ptr_tmp, ++ src_stride_2x, src1, src2); ++ src3 = __lsx_vldx(src0_ptr_tmp, src_stride_3x); + src0_ptr_tmp += src_stride_4x; +- DUP2_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, src4, src5); +- src6 = __lsx_vld(src0_ptr_tmp + src_stride_2x, 0); ++ src4 = __lsx_vld(src0_ptr_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src0_ptr_tmp, src_stride, src0_ptr_tmp, ++ src_stride_2x, src5, src6); + src0_ptr_tmp += src_stride_3x; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); +- DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); +- src6 = __lsx_vxori_b(src6, 128); + + DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, + src10_r, src32_r, src54_r, src21_r); +@@ -1267,39 +758,33 @@ void hevc_vt_bi_8t_16multx2mult_lsx(uint8_t *src0_ptr, + DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, src43_l, src65_l); + + for (loop_cnt = (height >> 1); loop_cnt--;) { +- DUP2_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, +- src7, src8); ++ src7 = __lsx_vld(src0_ptr_tmp, 0); ++ src8 = __lsx_vldx(src0_ptr_tmp, src_stride); + src0_ptr_tmp += src_stride_2x; +- DUP2_ARG2(__lsx_vld, src1_ptr_tmp, 0, src1_ptr_tmp + src2_stride, 0, +- in0, in1); +- DUP2_ARG2(__lsx_vld, src1_ptr_tmp, 16, src1_ptr_tmp + src2_stride, +- 16, in2, in3); +- src1_ptr_tmp += src2_stride_2x; +- DUP2_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src7, src8); ++ DUP2_ARG2(__lsx_vld, src1_ptr_tmp, 0, src1_ptr_tmp, 16, in0, in2); ++ src1_ptr_tmp += src2_stride; ++ DUP2_ARG2(__lsx_vld, src1_ptr_tmp, 0, src1_ptr_tmp, 16, in1, in3); ++ src1_ptr_tmp += src2_stride; + + DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); + DUP2_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src76_l, src87_l); + +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, dst0_r, src54_r, filt2, dst0_r, src76_r, filt3, dst0_r, +- dst0_r, dst0_r, dst0_r); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, +- filt1, dst1_r, src65_r, filt2, dst1_r, src87_r, filt3, dst1_r, +- dst1_r, dst1_r, dst1_r); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, +- filt1, dst0_l, src54_l, filt2, dst0_l, src76_l, filt3, dst0_l, +- dst0_l, dst0_l, dst0_l); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, +- filt1, dst1_l, src65_l, filt2, dst1_l, src87_l, filt3, dst1_l, +- dst1_l, dst1_l, dst1_l); +- +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst0_l, dst1_l, +- &dst0_r, &dst1_r, &dst0_l, &dst1_l); +- +- DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, src10_r, filt0, src21_r, filt0, src10_l, ++ filt0, src21_l, filt0, dst0_r, dst1_r, dst0_l, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0_r, src32_r, filt1, dst1_r, ++ src43_r, filt1, dst0_l, src32_l, filt1, dst1_l, src43_l, ++ filt1, dst0_r, dst1_r, dst0_l, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0_r, src54_r, filt2, dst1_r, ++ src65_r, filt2, dst0_l, src54_l, filt2, dst1_l, src65_l, ++ filt2, dst0_r, dst1_r, dst0_l, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0_r, src76_r, filt3, dst1_r, ++ src87_r, filt3, dst0_l, src76_l, filt3, dst1_l, src87_l, ++ filt3, dst0_r, dst1_r, dst0_l, dst1_l); ++ dst0_r = hevc_bi_rnd_clip(in0, dst0_r, in2, dst0_l); ++ dst1_r = hevc_bi_rnd_clip(in1, dst1_r, in3, dst1_l); + + __lsx_vst(dst0_r, dst_tmp, 0); +- __lsx_vst(dst1_r, dst_tmp + dst_stride, 0); ++ __lsx_vstx(dst1_r, dst_tmp, dst_stride); + dst_tmp += dst_stride_2x; + + src10_r = src32_r; +@@ -1323,93 +808,68 @@ void hevc_vt_bi_8t_16multx2mult_lsx(uint8_t *src0_ptr, + } + } + +-static void hevc_vt_bi_8t_16w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter, +- int32_t height) ++static void hevc_vt_8t_16w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) + { +- hevc_vt_bi_8t_16multx2mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, +- dst, dst_stride, filter, height, 16); ++ hevc_vt_8t_16multx2mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter, height, 16); + } + +-static void hevc_vt_bi_8t_24w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter, +- int32_t height) ++static void hevc_vt_8t_24w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) + { +- hevc_vt_bi_8t_16multx2mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, +- dst, dst_stride, filter, height, 16); +- hevc_vt_bi_8t_8w_lsx(src0_ptr + 16, src_stride, src1_ptr + 16, src2_stride, +- dst + 16, dst_stride, filter, height); ++ hevc_vt_8t_16multx2mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter, height, 16); ++ hevc_vt_8t_8w_lsx(src0_ptr + 16, src_stride, src1_ptr + 16, src2_stride, ++ dst + 16, dst_stride, filter, height); + } + +-static void hevc_vt_bi_8t_32w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter, +- int32_t height) ++static void hevc_vt_8t_32w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) + { +- hevc_vt_bi_8t_16multx2mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, +- dst, dst_stride, filter, height, 32); ++ hevc_vt_8t_16multx2mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter, height, 32); + } + +-static void hevc_vt_bi_8t_48w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter, +- int32_t height) ++static void hevc_vt_8t_48w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) + { +- hevc_vt_bi_8t_16multx2mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, +- dst, dst_stride, filter, height, 48); ++ hevc_vt_8t_16multx2mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter, height, 48); + } + +-static void hevc_vt_bi_8t_64w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter, +- int32_t height) ++static void hevc_vt_8t_64w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) + { +- hevc_vt_bi_8t_16multx2mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, +- dst, dst_stride, filter, height, 64); ++ hevc_vt_8t_16multx2mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter, height, 64); + } + + static av_always_inline +-void hevc_hv_bi_8t_8multx1mult_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height, +- int32_t width) ++void hevc_hv_8t_8multx1mult_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y, ++ int32_t height, int32_t width) + { + uint32_t loop_cnt; + uint32_t cnt; + uint8_t *src0_ptr_tmp; + int16_t *src1_ptr_tmp; + uint8_t *dst_tmp; +- const int32_t src_stride_2x = (src_stride << 1); +- const int32_t src_stride_4x = (src_stride << 2); +- const int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; + __m128i out; + __m128i src0, src1, src2, src3, src4, src5, src6, src7; + __m128i in0, tmp; +@@ -1417,7 +877,6 @@ void hevc_hv_bi_8t_8multx1mult_lsx(uint8_t *src0_ptr, + __m128i filt_h0, filt_h1, filt_h2, filt_h3; + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + __m128i mask1, mask2, mask3; +- __m128i const_vec; + __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; + __m128i vec8, vec9, vec10, vec11, vec12, vec13, vec14, vec15; + __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; +@@ -1426,10 +885,9 @@ void hevc_hv_bi_8t_8multx1mult_lsx(uint8_t *src0_ptr, + __m128i dst10_l, dst32_l, dst54_l, dst76_l; + + src0_ptr -= src_stride_3x + 3; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, filter_x, 6, +- filt0, filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, filter_x, ++ 6, filt0, filt1, filt2, filt3); + filt_h3 = __lsx_vld(filter_y, 0); + filt_h3 = __lsx_vsllwil_h_b(filt_h3, 0); + +@@ -1444,52 +902,50 @@ void hevc_hv_bi_8t_8multx1mult_lsx(uint8_t *src0_ptr, + dst_tmp = dst; + src1_ptr_tmp = src1_ptr; + +- DUP4_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, +- src0_ptr_tmp + src_stride_2x, 0, src0_ptr_tmp + src_stride_3x, 0, +- src0, src1, src2, src3); ++ src0 = __lsx_vld(src0_ptr_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src0_ptr_tmp, src_stride, src0_ptr_tmp, ++ src_stride_2x, src1, src2); ++ src3 = __lsx_vldx(src0_ptr_tmp, src_stride_3x); + src0_ptr_tmp += src_stride_4x; +- DUP2_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, src4, src5); +- src6 = __lsx_vld(src0_ptr_tmp + src_stride_2x, 0); ++ src4 = __lsx_vld(src0_ptr_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src0_ptr_tmp, src_stride, src0_ptr_tmp, ++ src_stride_2x, src5, src6); + src0_ptr_tmp += src_stride_3x; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); +- DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); +- src6 = __lsx_vxori_b(src6, 128); + + /* row 0 row 1 row 2 row 3 */ +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, +- mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, +- mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); +- DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, +- mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); +- DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, +- mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); +- dst0 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, filt2, +- filt3); +- dst1 = __lsx_hevc_filt_8tap_h(vec4, vec5, vec6, vec7, filt0, filt1, filt2, +- filt3); +- dst2 = __lsx_hevc_filt_8tap_h(vec8, vec9, vec10, vec11, filt0, filt1, filt2, +- filt3); +- dst3 = __lsx_hevc_filt_8tap_h(vec12, vec13, vec14, vec15, filt0, filt1, +- filt2, filt3); +- +- DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, +- mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, src5, +- mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); +- DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, src6, +- mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); +- dst4 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, filt2, +- filt3); +- dst5 = __lsx_hevc_filt_8tap_h(vec4, vec5, vec6, vec7, filt0, filt1, filt2, +- filt3); +- dst6 = __lsx_hevc_filt_8tap_h(vec8, vec9, vec10, vec11, filt0, filt1, filt2, +- filt3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, ++ src0, mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, ++ src1, mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, ++ src2, mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); ++ DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, ++ src3, mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec4, filt0, vec8, filt0, ++ vec12, filt0, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst1, vec5, filt1, ++ dst2, vec9, filt1, dst3, vec13, filt1, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec2, filt2, dst1, vec6, filt2, ++ dst2, vec10, filt2, dst3, vec14, filt2, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec3, filt3, dst1, vec7, filt3, ++ dst2, vec11, filt3, dst3, vec15, filt3, dst0, dst1, dst2, dst3); ++ ++ DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, ++ src4, mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, ++ src5, mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, ++ src6, mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec4, filt0, dst4, dst5); ++ dst6 = __lsx_vdp2_h_bu_b(vec8, filt0); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst4, vec1, filt1, dst5, vec5, filt1, ++ dst6, vec9, filt1, dst4, vec2, filt2, dst4, dst5, dst6, dst4); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst5, vec6, filt2, dst6, vec10, filt2, ++ dst4, vec3, filt3, dst5, vec7, filt3, dst5, dst6, dst4, dst5); ++ dst6 = __lsx_vdp2add_h_bu_b(dst6, vec11, filt3); + + for (loop_cnt = height; loop_cnt--;) { + src7 = __lsx_vld(src0_ptr_tmp, 0); +- src7 = __lsx_vxori_b(src7, 128); + src0_ptr_tmp += src_stride; + + in0 = __lsx_vld(src1_ptr_tmp, 0); +@@ -1497,22 +953,27 @@ void hevc_hv_bi_8t_8multx1mult_lsx(uint8_t *src0_ptr, + + DUP4_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, src7, + src7, mask2, src7, src7, mask3, vec0, vec1, vec2, vec3); +- dst7 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, +- filt2, filt3); +- DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, +- dst10_r, dst32_r, dst54_r, dst76_r); +- DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, +- dst10_l, dst32_l, dst54_l, dst76_l); +- +- dst0_r = __lsx_hevc_filt_8tap_w(dst10_r, dst32_r, dst54_r, dst76_r, +- filt_h0, filt_h1, filt_h2, filt_h3); +- dst0_l = __lsx_hevc_filt_8tap_w(dst10_l, dst32_l, dst54_l, dst76_l, +- filt_h0, filt_h1, filt_h2, filt_h3); ++ dst7 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst7, vec1, filt1, dst7, vec2, ++ filt2, dst7, dst7); ++ dst7 = __lsx_vdp2add_h_bu_b(dst7, vec3, filt3); ++ DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, ++ dst6, dst10_r, dst32_r, dst54_r, dst76_r); ++ DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, ++ dst6, dst10_l, dst32_l, dst54_l, dst76_l); ++ ++ DUP2_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst10_l, filt_h0, ++ dst0_r, dst0_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst32_r, filt_h1, dst0_l, ++ dst32_l, filt_h1, dst0_r, dst54_r, filt_h2, dst0_l, ++ dst54_l, filt_h2, dst0_r, dst0_l, dst0_r, dst0_l); ++ DUP2_ARG3(__lsx_vdp2add_w_h, dst0_r, dst76_r, filt_h3, dst0_l, ++ dst76_l, filt_h3, dst0_r, dst0_l); + dst0_r = __lsx_vsrli_w(dst0_r, 6); + dst0_l = __lsx_vsrli_w(dst0_l, 6); + + tmp = __lsx_vpickev_h(dst0_l, dst0_r); +- DUP2_ARG2(__lsx_vsadd_h, tmp, in0, tmp, const_vec, tmp, tmp); ++ tmp = __lsx_vsadd_h(tmp, in0); + tmp = __lsx_vmaxi_h(tmp, 0); + out = __lsx_vssrlrni_bu_h(tmp, tmp, 7); + __lsx_vstelm_d(out, dst_tmp, 0, 0); +@@ -1533,117 +994,80 @@ void hevc_hv_bi_8t_8multx1mult_lsx(uint8_t *src0_ptr, + } + } + +-static void hevc_hv_bi_8t_8w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height) ++static void hevc_hv_8t_8w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y, ++ int32_t height) + { +- hevc_hv_bi_8t_8multx1mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, +- dst, dst_stride, filter_x, filter_y, +- height, 8); ++ hevc_hv_8t_8multx1mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y, height, 8); + } + +-static void hevc_hv_bi_8t_16w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height) ++static void hevc_hv_8t_16w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y, ++ int32_t height) + { +- hevc_hv_bi_8t_8multx1mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, +- dst, dst_stride, filter_x, filter_y, +- height, 16); ++ hevc_hv_8t_8multx1mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y, height, 16); + } + +-static void hevc_hv_bi_8t_24w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height) ++static void hevc_hv_8t_24w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y, ++ int32_t height) + { +- hevc_hv_bi_8t_8multx1mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, +- dst, dst_stride, filter_x, filter_y, +- height, 24); ++ hevc_hv_8t_8multx1mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y, height, 24); + } + +-static void hevc_hv_bi_8t_32w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height) ++static void hevc_hv_8t_32w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y, ++ int32_t height) + { +- hevc_hv_bi_8t_8multx1mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, +- dst, dst_stride, filter_x, filter_y, +- height, 32); ++ hevc_hv_8t_8multx1mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y, height, 32); + } + +-static void hevc_hv_bi_8t_48w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height) ++static void hevc_hv_8t_48w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y, ++ int32_t height) + { +- hevc_hv_bi_8t_8multx1mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, +- dst, dst_stride, filter_x, filter_y, +- height, 48); ++ hevc_hv_8t_8multx1mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y, height, 48); + } + +-static void hevc_hv_bi_8t_64w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height) ++static void hevc_hv_8t_64w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y, ++ int32_t height) + { +- hevc_hv_bi_8t_8multx1mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, +- dst, dst_stride, filter_x, filter_y, +- height, 64); ++ hevc_hv_8t_8multx1mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y, height, 64); + } + +-static void hevc_hz_bi_4t_24w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter, +- int32_t height) ++static void hevc_hz_4t_24w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) + { + int16_t *src1_ptr_tmp; + uint8_t *dst_tmp; + uint32_t loop_cnt; +- const int32_t src_stride_2x = (src_stride << 1); +- const int32_t dst_stride_2x = (dst_stride << 1); +- const int32_t src_stride_4x = (src_stride << 2); +- const int32_t dst_stride_4x = (dst_stride << 2); +- const int32_t src2_stride_2x = (src2_stride << 1); +- const int32_t src2_stride_4x = (src2_stride << 2); +- const int32_t src_stride_3x = src_stride_2x + src_stride; +- const int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t src2_stride_x = src2_stride << 1; ++ int32_t src2_stride_2x = src2_stride << 2; ++ int32_t src2_stride_3x = src2_stride_2x + src2_stride_x; + + __m128i src0, src1, src2, src3, src4, src5, src6, src7; + __m128i in0, in1, in2, in3, in4, in5, in6, in7; +@@ -1652,10 +1076,8 @@ static void hevc_hz_bi_4t_24w_lsx(uint8_t *src0_ptr, + __m128i mask1, mask2, mask3; + __m128i vec0, vec1, vec2, vec3; + __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; +- __m128i const_vec; + + src0_ptr -= 1; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); + + DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 8, mask1, mask2); +@@ -1665,73 +1087,68 @@ static void hevc_hz_bi_4t_24w_lsx(uint8_t *src0_ptr, + src1_ptr_tmp = src1_ptr + 16; + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, +- src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, +- src0, src2, src4, src6); +- DUP4_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, +- src0_ptr + src_stride_2x, 16, src0_ptr + src_stride_3x, 16, +- src1, src3, src5, src7); +- src0_ptr += src_stride_4x; +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in0, in2, in4, in6); +- DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, +- src1_ptr + src2_stride_2x, 16, src1_ptr + src2_stride_3x, 16, +- in1, in3, in5, in7); +- src1_ptr += src2_stride_4x; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- DUP4_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src6, 128, src7, 128, src4, +- src5, src6, src7); +- +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask2, src2, src2, +- mask0, src3, src2, mask2, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, dst3); +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask3, src2, src2, +- mask1, src3, src2, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); +- +- DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src5, src4, mask2, src6, src6, +- mask0, src7, src6, mask2, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst4, dst5, dst6, dst7); +- DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask1, src5, src4, mask3, src6, src6, +- mask1, src7, src6, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst4, vec0, filt1, dst5, vec1, filt1, dst6, +- vec2, filt1, dst7, vec3, filt1, dst4, dst5, dst6, dst7); +- +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, +- &dst0, &dst1, &dst2, &dst3); +- __lsx_hevc_bi_rnd_clip4(in4, in5, in6, in7, dst4, dst5, dst6, dst7, +- &dst4, &dst5, &dst6, &dst7); +- +- DUP4_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, +- dst0, dst1, dst2, dst3); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); ++ src0_ptr += src_stride; ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src2, src3); ++ src0_ptr += src_stride; ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src4, src5); ++ src0_ptr += src_stride; ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src6, src7); ++ src0_ptr += src_stride; ++ ++ DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, in0, in1); ++ src1_ptr += src2_stride; ++ DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, in2, in3); ++ src1_ptr += src2_stride; ++ DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, in4, in5); ++ src1_ptr += src2_stride; ++ DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, in6, in7); ++ src1_ptr += src2_stride; ++ ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask2, src2, ++ src2, mask0, src3, src2, mask2, vec0, vec1, vec2, vec3); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec1, filt0, vec2, filt0, ++ vec3, filt0, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask3, src2, ++ src2, mask1, src3, src2, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec0, filt1, dst1, vec1, filt1, ++ dst2, vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ ++ DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src5, src4, mask2, src6, ++ src6, mask0, src7, src6, mask2, vec0, vec1, vec2, vec3); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec1, filt0, vec2, filt0, ++ vec3, filt0, dst4, dst5, dst6, dst7); ++ DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask1, src5, src4, mask3, src6, ++ src6, mask1, src7, src6, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst4, vec0, filt1, dst5, vec1, filt1, ++ dst6, vec2, filt1, dst7, vec3, filt1, dst4, dst5, dst6, dst7); ++ ++ dst0 = hevc_bi_rnd_clip(in0, dst0, in1, dst1); ++ dst1 = hevc_bi_rnd_clip(in2, dst2, in3, dst3); ++ dst2 = hevc_bi_rnd_clip(in4, dst4, in5, dst5); ++ dst3 = hevc_bi_rnd_clip(in6, dst6, in7, dst7); + __lsx_vst(dst0, dst, 0); + __lsx_vstx(dst1, dst, dst_stride); + __lsx_vstx(dst2, dst, dst_stride_2x); + __lsx_vstx(dst3, dst, dst_stride_3x); + dst += dst_stride_4x; + +- DUP4_ARG2(__lsx_vld, src1_ptr_tmp, 0, src1_ptr_tmp + src2_stride, 0, +- src1_ptr_tmp + src2_stride_2x, 0, src1_ptr_tmp + src2_stride_3x, 0, +- in0, in1, in2, in3); +- src1_ptr_tmp += src2_stride_4x; +- +- DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src3, src3, mask0, src5, src5, +- mask0, src7, src7, mask0, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, dst3); +- DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask1, src3, src3, mask1, src5, src5, +- mask1, src7, src7, mask1, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, +- &dst0, &dst1, &dst2, &dst3); +- +- DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); ++ in0 = __lsx_vld(src1_ptr_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src1_ptr_tmp, src2_stride_x, src1_ptr_tmp, ++ src2_stride_2x, in1, in2); ++ in3 = __lsx_vldx(src1_ptr_tmp, src2_stride_3x); ++ src1_ptr_tmp += src2_stride_2x; ++ ++ DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src3, src3, mask0, src5, ++ src5, mask0, src7, src7, mask0, vec0, vec1, vec2, vec3); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec1, filt0, vec2, filt0, ++ vec3, filt0, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask1, src3, src3, mask1, src5, ++ src5, mask1, src7, src7, mask1, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec0, filt1, dst1, vec1, filt1, ++ dst2, vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ dst0 = hevc_bi_rnd_clip(in0, dst0, in1, dst1); ++ dst1 = hevc_bi_rnd_clip(in2, dst2, in3, dst3); + __lsx_vstelm_d(dst0, dst_tmp, 0, 0); + __lsx_vstelm_d(dst0, dst_tmp + dst_stride, 0, 1); + __lsx_vstelm_d(dst1, dst_tmp + dst_stride_2x, 0, 0); +@@ -1740,14 +1157,10 @@ static void hevc_hz_bi_4t_24w_lsx(uint8_t *src0_ptr, + } + } + +-static void hevc_hz_bi_4t_32w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter, +- int32_t height) ++static void hevc_hz_4t_32w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) + { + uint32_t loop_cnt; + __m128i src0, src1, src2; +@@ -1757,11 +1170,9 @@ static void hevc_hz_bi_4t_32w_lsx(uint8_t *src0_ptr, + __m128i mask1, mask2, mask3; + __m128i dst0, dst1, dst2, dst3; + __m128i vec0, vec1, vec2, vec3; +- __m128i const_vec; + + src0_ptr -= 1; + +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); + + DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 8, mask1, mask2); +@@ -1771,47 +1182,41 @@ static void hevc_hz_bi_4t_32w_lsx(uint8_t *src0_ptr, + DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src1); + src2 = __lsx_vld(src0_ptr, 24); + src0_ptr += src_stride; +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, src1_ptr, +- 48, in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, src1_ptr, 32, ++ src1_ptr, 48, in0, in1, in2, in3); + src1_ptr += src2_stride; +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- src2 = __lsx_vxori_b(src2, 128); +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask2, src1, src1, +- mask0, src2, src2, mask0, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, dst3); +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask3, src1, src1, +- mask1, src2, src2, mask1, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, vec2, +- filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0, dst1, dst2, dst3, +- &dst0, &dst1, &dst2, &dst3); +- +- DUP2_ARG2(__lsx_vpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask2, src1, ++ src1, mask0, src2, src2, mask0, vec0, vec1, vec2, vec3); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec1, filt0, vec2, filt0, ++ vec3, filt0, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask3, src1, ++ src1, mask1, src2, src2, mask1, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec0, filt1, dst1, vec1, filt1, ++ dst2, vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ dst0 = hevc_bi_rnd_clip(in0, dst0, in1, dst1); ++ dst1 = hevc_bi_rnd_clip(in2, dst2, in3, dst3); + __lsx_vst(dst0, dst, 0); + __lsx_vst(dst1, dst, 16); + dst += dst_stride; + } + } + +-static void hevc_vt_bi_4t_12w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter, +- int32_t height) ++static void hevc_vt_4t_12w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) + { + int32_t loop_cnt; +- const int32_t src_stride_2x = (src_stride << 1); +- const int32_t dst_stride_2x = (dst_stride << 1); +- const int32_t dst_stride_4x = (dst_stride << 2); +- const int32_t src2_stride_2x = (src2_stride << 1); +- const int32_t src2_stride_4x = (src2_stride << 2); +- const int32_t src_stride_3x = src_stride_2x + src_stride; +- const int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t src2_stride_x = (src2_stride << 1); ++ int32_t src2_stride_2x = (src2_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t src2_stride_3x = src2_stride_2x + src2_stride_x; ++ int16_t *_src1 = src1_ptr + 8; + __m128i src0, src1, src2, src3, src4, src5, src6; + __m128i in0, in1, in2, in3, in4, in5, in6, in7; + __m128i src10_r, src32_r, src21_r, src43_r, src54_r, src65_r; +@@ -1819,36 +1224,35 @@ static void hevc_vt_bi_4t_12w_lsx(uint8_t *src0_ptr, + __m128i src10_l, src32_l, src54_l, src21_l, src43_l, src65_l; + __m128i src2110, src4332, src6554; + __m128i dst0_l, dst1_l, filt0, filt1; +- __m128i const_vec; + + src0_ptr -= src_stride; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); + +- DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0, src1); +- src2 = __lsx_vld(src0_ptr + src_stride_2x, 0); ++ src0 = __lsx_vld(src0_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src0_ptr, src_stride, src0_ptr, src_stride_2x, ++ src1, src2); + src0_ptr += src_stride_3x; +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- src2 = __lsx_vxori_b(src2, 128); + DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); + DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); + src2110 = __lsx_vilvl_d(src21_l, src10_l); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src3, src4); +- src0_ptr += src_stride_2x; +- DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src5, src6); +- src0_ptr += src_stride_2x; +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in0, in1, in2, in3); +- DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, +- src1_ptr + src2_stride_2x, 16, src1_ptr + src2_stride_3x, 16, +- in4, in5, in6, in7); +- src1_ptr += src2_stride_4x; ++ src3 = __lsx_vld(src0_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src0_ptr, src_stride, src0_ptr, src_stride_2x, ++ src4, src5); ++ src6 = __lsx_vldx(src0_ptr, src_stride_3x); ++ src0_ptr += src_stride_4x; ++ in0 = __lsx_vld(src1_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src1_ptr, src2_stride_x, src1_ptr, ++ src2_stride_2x, in1, in2); ++ in3 = __lsx_vldx(src1_ptr, src2_stride_3x); ++ src1_ptr += src2_stride_2x; ++ in4 = __lsx_vld(_src1, 0); ++ DUP2_ARG2(__lsx_vldx, _src1, src2_stride_x, _src1, src2_stride_2x, ++ in5, in6); ++ in7 = __lsx_vldx(_src1, src2_stride_3x); ++ _src1 += src2_stride_2x; + DUP2_ARG2(__lsx_vilvl_d, in5, in4, in7, in6, in4, in5); +- DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, +- src4, src5, src6); + + DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); + DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); +@@ -1857,21 +1261,18 @@ static void hevc_vt_bi_4t_12w_lsx(uint8_t *src0_ptr, + DUP2_ARG2(__lsx_vilvh_b, src5, src4, src6, src5, src54_l, src65_l); + src6554 = __lsx_vilvl_d(src65_l, src54_l); + +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, const_vec, src21_r, filt0, dst1_r, src43_r, filt1, dst0_r, +- dst0_r, dst1_r, dst1_r ); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src2110, filt0, dst0_l, src4332, +- filt1, const_vec, src32_r, filt0, dst2_r, src54_r, filt1, dst0_l, +- dst0_l, dst2_r, dst2_r); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src43_r, filt0, dst3_r, src65_r, +- filt1, const_vec, src4332, filt0, dst1_l, src6554, filt1, dst3_r, +- dst3_r, dst1_l, dst1_l); +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst2_r, dst3_r, +- &dst0_r, &dst1_r, &dst2_r, &dst3_r); +- __lsx_hevc_bi_rnd_clip2(in4, in5, dst0_l, dst1_l, &dst0_l, &dst1_l); +- +- DUP2_ARG2(__lsx_vpickev_b, dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst1_r); +- dst0_l = __lsx_vpickev_b(dst1_l, dst0_l); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, src10_r, filt0, src21_r, filt0, src2110, ++ filt0, src32_r, filt0, dst0_r, dst1_r, dst0_l, dst2_r); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, src43_r, filt0, src4332, filt0, ++ dst3_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0_r, src32_r, filt1, dst1_r, ++ src43_r, filt1, dst0_l, src4332, filt1, dst2_r, src54_r, ++ filt1, dst0_r, dst1_r, dst0_l, dst2_r); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst3_r, src65_r, filt1, dst1_l, ++ src6554, filt1, dst3_r, dst1_l); ++ dst0_r = hevc_bi_rnd_clip(in0, dst0_r, in1, dst1_r); ++ dst1_r = hevc_bi_rnd_clip(in2, dst2_r, in3, dst3_r); ++ dst0_l = hevc_bi_rnd_clip(in4, dst0_l, in5, dst1_l); + __lsx_vstelm_d(dst0_r, dst, 0, 0); + __lsx_vstelm_d(dst0_r, dst + dst_stride, 0, 1); + __lsx_vstelm_d(dst1_r, dst + dst_stride_2x, 0, 0); +@@ -1889,19 +1290,14 @@ static void hevc_vt_bi_4t_12w_lsx(uint8_t *src0_ptr, + } + } + +-static void hevc_vt_bi_4t_16w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter, +- int32_t height) ++static void hevc_vt_4t_16w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) + { + int32_t loop_cnt; + const int32_t src_stride_2x = (src_stride << 1); + const int32_t dst_stride_2x = (dst_stride << 1); +- const int32_t src2_stride_2x = (src2_stride << 1); + const int32_t src_stride_3x = src_stride_2x + src_stride; + __m128i src0, src1, src2, src3, src4, src5; + __m128i in0, in1, in2, in3; +@@ -1909,87 +1305,70 @@ static void hevc_vt_bi_4t_16w_lsx(uint8_t *src0_ptr, + __m128i src10_l, src32_l, src21_l, src43_l; + __m128i dst0_r, dst1_r, dst0_l, dst1_l; + __m128i filt0, filt1; +- __m128i const_vec; + + src0_ptr -= src_stride; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); + +- DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0, src1); +- src2 = __lsx_vld(src0_ptr + src_stride_2x, 0); ++ src0 = __lsx_vld(src0_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src0_ptr, src_stride, src0_ptr, src_stride_2x, ++ src1, src2); + src0_ptr += src_stride_3x; +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- src2 = __lsx_vxori_b(src2, 128); + DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); + DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src3, src4); ++ src3 = __lsx_vld(src0_ptr, 0); ++ src4 = __lsx_vldx(src0_ptr, src_stride); + src0_ptr += src_stride_2x; +- DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); +- DUP2_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, in2, in3); +- src1_ptr += src2_stride_2x; +- DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, in0, in2); ++ src1_ptr += src2_stride; ++ DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, in1, in3); ++ src1_ptr += src2_stride; + DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); + DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); + +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, dst0_r, dst0_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, +- filt1, dst1_r, dst1_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, +- filt1, dst0_l, dst0_l); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, +- filt1, dst1_l, dst1_l); +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst0_l, dst1_l, +- &dst0_r, &dst1_r, &dst0_l, &dst1_l); +- +- DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, src10_r, filt0, src21_r, filt0, src10_l, ++ filt0, src21_l, filt0, dst0_r, dst1_r, dst0_l, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0_r, src32_r, filt1, dst1_r, src43_r, ++ filt1, dst0_l, src32_l, filt1, dst1_l, src43_l, filt1, ++ dst0_r, dst1_r, dst0_l, dst1_l); ++ ++ dst0_r = hevc_bi_rnd_clip(in0, dst0_r, in2, dst0_l); ++ dst1_r = hevc_bi_rnd_clip(in1, dst1_r, in3, dst1_l); + __lsx_vst(dst0_r, dst, 0); +- __lsx_vst(dst1_r, dst + dst_stride, 0); ++ __lsx_vstx(dst1_r, dst, dst_stride); + dst += dst_stride_2x; + +- DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src5, src2); ++ src5 = __lsx_vld(src0_ptr, 0); ++ src2 = __lsx_vldx(src0_ptr, src_stride); + src0_ptr += src_stride_2x; +- DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); +- DUP2_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, in2, in3); +- src1_ptr += src2_stride_2x; +- DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); ++ DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, in0, in2); ++ src1_ptr += src2_stride; ++ DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, in1, in3); ++ src1_ptr += src2_stride; + DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); + DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); + +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src32_r, filt0, dst0_r, src10_r, +- filt1, dst0_r, dst0_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src32_l, filt0, dst0_l, src10_l, +- filt1, dst0_l, dst0_l); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src43_r, filt0, dst1_r, src21_r, +- filt1, dst1_r, dst1_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src43_l, filt0, dst1_l, src21_l, +- filt1, dst1_l, dst1_l); +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst0_l, dst1_l, +- &dst0_r, &dst1_r, &dst0_l, &dst1_l); +- +- DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, src32_r, filt0, src32_l, filt0, src43_r, ++ filt0, src43_l, filt0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0_r, src10_r, filt1, dst0_l, ++ src10_l, filt1, dst1_r, src21_r, filt1, dst1_l, src21_l, ++ filt1, dst0_r, dst0_l, dst1_r, dst1_l); ++ dst0_r = hevc_bi_rnd_clip(in0, dst0_r, in2, dst0_l); ++ dst1_r = hevc_bi_rnd_clip(in1, dst1_r, in3, dst1_l); + __lsx_vst(dst0_r, dst, 0); + __lsx_vstx(dst1_r, dst, dst_stride); + dst += dst_stride_2x; + } + } + +-static void hevc_vt_bi_4t_24w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter, +- int32_t height) ++static void hevc_vt_4t_24w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) + { + uint32_t loop_cnt; +- const int32_t src_stride_2x = (src_stride << 1); +- const int32_t dst_stride_2x = (dst_stride << 1); +- const int32_t src2_stride_2x = (src2_stride << 1); +- const int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_2x = dst_stride << 1; + __m128i src0, src1, src2, src3, src4, src5; + __m128i src6, src7, src8, src9, src10, src11; + __m128i in0, in1, in2, in3, in4, in5; +@@ -1999,60 +1378,53 @@ static void hevc_vt_bi_4t_24w_lsx(uint8_t *src0_ptr, + __m128i dst0_r, dst1_r, dst2_r, dst3_r; + __m128i dst0_l, dst1_l; + __m128i filt0, filt1; +- __m128i const_vec; + + src0_ptr -= src_stride; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); + + /* 16width */ +- DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0, src1); +- src2 = __lsx_vld(src0_ptr + src_stride_2x, 0); +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- src2 = __lsx_vxori_b(src2, 128); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src0, src6); ++ src0_ptr += src_stride; ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src1, src7); ++ src0_ptr += src_stride; ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src2, src8); ++ src0_ptr += src_stride; + DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); + DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); + /* 8width */ +- DUP2_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, src6, src7); +- src8 = __lsx_vld(src0_ptr + src_stride_2x, 16); +- src0_ptr += src_stride_3x; +- DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); +- src8 = __lsx_vxori_b(src8, 128); + DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); + + for (loop_cnt = (height >> 2); loop_cnt--;) { + /* 16width */ +- DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src1_ptr, 0, +- src1_ptr + src2_stride, 0, src3, src4, in0, in1); +- DUP4_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, src1_ptr, +- 32, src1_ptr + src2_stride, 32, in2, in3, in4, in5); +- src1_ptr += src2_stride_2x; +- DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src3, src9); ++ src0_ptr += src_stride; ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src4, src10); ++ src0_ptr += src_stride; ++ DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, in0, in2); ++ in4 = __lsx_vld(src1_ptr, 32); ++ src1_ptr += src2_stride; ++ DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr, 16, in1, in3); ++ in5 = __lsx_vld(src1_ptr, 32); ++ src1_ptr += src2_stride; + DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); + DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); + /* 8width */ +- DUP2_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, src9, src10); +- src0_ptr += src_stride_2x; +- DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); + DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); + /* 16width */ +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, const_vec, src10_l, filt0, dst0_l, src32_l, filt1, dst0_r, +- dst0_r, dst0_l, dst0_l); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, +- filt1, const_vec, src21_l, filt0, dst1_l, src43_l, filt1, dst1_r, +- dst1_r, dst1_l, dst1_l); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, src10_r, filt0, src10_l, filt0, src21_r, ++ filt0, src21_l, filt0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0_r, src32_r, filt1, dst0_l, ++ src32_l, filt1, dst1_r, src43_r, filt1, dst1_l, src43_l, filt1, ++ dst0_r, dst0_l, dst1_r, dst1_l); + /* 8width */ +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src76_r, filt0, dst2_r, src98_r, +- filt1, const_vec, src87_r, filt0, dst3_r, src109_r, filt1, dst2_r, +- dst2_r, dst3_r, dst3_r); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, src76_r, filt0, src87_r, filt0, ++ dst2_r, dst3_r); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst2_r, src98_r, filt1, dst3_r, ++ src109_r, filt1, dst2_r, dst3_r); + /* 16width */ +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst0_l, dst1_l, +- &dst0_r, &dst1_r, &dst0_l, &dst1_l); +- __lsx_hevc_bi_rnd_clip2(in4, in5, dst2_r, dst3_r, &dst2_r, &dst3_r); +- +- DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); +- dst2_r = __lsx_vpickev_b(dst3_r, dst2_r); ++ dst0_r = hevc_bi_rnd_clip(in0, dst0_r, in2, dst0_l); ++ dst1_r = hevc_bi_rnd_clip(in1, dst1_r, in3, dst1_l); ++ dst2_r = hevc_bi_rnd_clip(in4, dst2_r, in5, dst3_r); + __lsx_vst(dst0_r, dst, 0); + __lsx_vstx(dst1_r, dst, dst_stride); + __lsx_vstelm_d(dst2_r, dst, 16, 0); +@@ -2060,37 +1432,35 @@ static void hevc_vt_bi_4t_24w_lsx(uint8_t *src0_ptr, + dst += dst_stride_2x; + + /* 16width */ +- DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src5, src2); +- DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); +- DUP2_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, in2, in3); +- DUP2_ARG2(__lsx_vld, src1_ptr, 32, src1_ptr + src2_stride, 32, in4, in5); +- src1_ptr += src2_stride_2x; +- DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); ++ DUP4_ARG2(__lsx_vld, src0_ptr, 0, src1_ptr, 0, src1_ptr, 16, src1_ptr, ++ 32, src5, in0, in2, in4); ++ src1_ptr += src2_stride; ++ DUP4_ARG2(__lsx_vld, src0_ptr, 16, src1_ptr, 0, src1_ptr, 16, src1_ptr, ++ 32, src11, in1, in3, in5); ++ src1_ptr += src2_stride; ++ src0_ptr += src_stride; ++ DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr, 16, src2, src8); ++ src0_ptr += src_stride; + DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); + DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); + /* 8width */ +- DUP2_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, src11, src8); +- src0_ptr += src_stride_2x; +- DUP2_ARG2(__lsx_vxori_b, src11, 128, src8, 128, src11, src8); + DUP2_ARG2(__lsx_vilvl_b, src11, src10, src8, src11, src76_r, src87_r); + /* 16width */ +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src32_r, filt0, dst0_r, src10_r, +- filt1, const_vec, src32_l, filt0, dst0_l, src10_l, filt1, dst0_r, +- dst0_r, dst0_l, dst0_l); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src43_r, filt0, dst1_r, src21_r, +- filt1, const_vec, src43_l, filt0, dst1_l, src21_l, filt1, dst1_r, +- dst1_r, dst1_l, dst1_l); +- /* 8width */ +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src98_r, filt0, dst2_r, src76_r, +- filt1, const_vec, src109_r, filt0, dst3_r, src87_r, filt1, dst2_r, +- dst2_r, dst3_r, dst3_r); +- +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst0_l, dst1_l, +- &dst0_r, &dst1_r, &dst0_l, &dst1_l); +- __lsx_hevc_bi_rnd_clip2(in4, in5, dst2_r, dst3_r, &dst2_r, &dst3_r); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, src32_r, filt0, src32_l, filt0, src43_r, ++ filt0, src43_l, filt0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0_r, src10_r, filt1, dst0_l, ++ src10_l, filt1, dst1_r, src21_r, filt1, dst1_l, src21_l, ++ filt1, dst0_r, dst0_l, dst1_r, dst1_l); + +- DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); +- dst2_r = __lsx_vpickev_b(dst3_r, dst2_r); ++ /* 8width */ ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, src98_r, filt0, src109_r, filt0, ++ dst2_r, dst3_r); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst2_r, src76_r, filt1, dst3_r, ++ src87_r, filt1, dst2_r, dst3_r); ++ ++ dst0_r = hevc_bi_rnd_clip(in0, dst0_r, in2, dst0_l); ++ dst1_r = hevc_bi_rnd_clip(in1, dst1_r, in3, dst1_l); ++ dst2_r = hevc_bi_rnd_clip(in4, dst2_r, in5, dst3_r); + __lsx_vst(dst0_r, dst, 0); + __lsx_vstx(dst1_r, dst, dst_stride); + __lsx_vstelm_d(dst2_r, dst, 16, 0); +@@ -2099,152 +1469,42 @@ static void hevc_vt_bi_4t_24w_lsx(uint8_t *src0_ptr, + } + } + +-static void hevc_vt_bi_4t_32w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter, +- int32_t height) ++static void hevc_vt_4t_32w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter, int32_t height) + { +- uint32_t loop_cnt; +- uint8_t *dst_tmp = dst + 16; +- const int32_t src_stride_2x = (src_stride << 1); +- const int32_t dst_stride_2x = (dst_stride << 1); +- const int32_t src2_stride_2x = (src2_stride << 1); +- const int32_t src_stride_3x = src_stride_2x + src_stride; +- __m128i src0, src1, src2, src3, src4, src6, src7, src8, src9, src10; +- __m128i in0, in1, in2, in3, in4, in5, in6, in7; +- __m128i src10_r, src32_r, src76_r, src98_r; +- __m128i src21_r, src43_r, src87_r, src109_r; +- __m128i dst0_r, dst1_r, dst2_r, dst3_r; +- __m128i src10_l, src32_l, src76_l, src98_l; +- __m128i src21_l, src43_l, src87_l, src109_l; +- __m128i dst0_l, dst1_l, dst2_l, dst3_l; +- __m128i filt0, filt1; +- __m128i const_vec; +- +- src0_ptr -= src_stride; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- +- DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); +- +- /* 16width */ +- DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0, src1); +- src2 = __lsx_vld(src0_ptr + src_stride_2x, 0); +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- src2 = __lsx_vxori_b(src2, 128); +- DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); +- DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); +- +- /* next 16width */ +- DUP2_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, src6, src7); +- src8 = __lsx_vld(src0_ptr + src_stride_2x, 16); +- src0_ptr += src_stride_3x; +- DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); +- src8 = __lsx_vxori_b(src8, 128); +- DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); +- DUP2_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src76_l, src87_l); +- +- for (loop_cnt = (height >> 1); loop_cnt--;) { +- /* 16width */ +- DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src3, src4); +- DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); +- DUP2_ARG2(__lsx_vld, src1_ptr, 16, src1_ptr + src2_stride, 16, in2, in3); +- DUP2_ARG2(__lsx_vld, src1_ptr, 32, src1_ptr + src2_stride, 32, in4, in5); +- DUP2_ARG2(__lsx_vld, src1_ptr, 48, src1_ptr + src2_stride, 48, in6, in7); +- src1_ptr += src2_stride_2x; +- DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); +- DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); +- DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); +- /* 16width */ +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, dst0_r, dst0_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, +- filt1, dst0_l, dst0_l); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, +- filt1, dst1_r, dst1_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, +- filt1, dst1_l, dst1_l); +- /* 16width */ +- __lsx_hevc_bi_rnd_clip4(in0, in1, in2, in3, dst0_r, dst1_r, dst0_l, dst1_l, +- &dst0_r, &dst1_r, &dst0_l, &dst1_l); +- +- src10_r = src32_r; +- src21_r = src43_r; +- src10_l = src32_l; +- src21_l = src43_l; +- src2 = src4; +- +- DUP2_ARG2(__lsx_vpickev_b, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); +- __lsx_vst(dst0_r, dst, 0); +- __lsx_vst(dst1_r, dst + dst_stride, 0); +- dst += dst_stride_2x; +- +- /* next 16width */ +- DUP2_ARG2(__lsx_vld, src0_ptr, 16, src0_ptr + src_stride, 16, src9, src10); +- src0_ptr += src_stride_2x; +- DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); +- DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); +- DUP2_ARG2(__lsx_vilvh_b, src9, src8, src10, src9, src98_l, src109_l); +- /* next 16width */ +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src76_r, filt0, dst2_r, src98_r, +- filt1, dst2_r, dst2_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src76_l, filt0, dst2_l, src98_l, +- filt1, dst2_l, dst2_l); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src87_r, filt0, dst3_r, src109_r, +- filt1, dst3_r, dst3_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src87_l, filt0, dst3_l, src109_l, +- filt1, dst3_l, dst3_l); +- /* next 16width */ +- __lsx_hevc_bi_rnd_clip4(in4, in5, in6, in7, dst2_r, dst3_r, dst2_l, dst3_l, +- &dst2_r, &dst3_r, &dst2_l, &dst3_l); +- +- DUP2_ARG2(__lsx_vpickev_b, dst2_l, dst2_r, dst3_l, dst3_r, dst2_r, dst3_r); +- __lsx_vst(dst2_r, dst_tmp, 0); +- __lsx_vstx(dst3_r, dst_tmp, dst_stride); +- dst_tmp += dst_stride_2x; +- +- src76_r = src98_r; +- src87_r = src109_r; +- src76_l = src98_l; +- src87_l = src109_l; +- src8 = src10; +- } ++ hevc_vt_4t_16w_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter, height); ++ hevc_vt_4t_16w_lsx(src0_ptr + 16, src_stride, src1_ptr + 16, src2_stride, ++ dst + 16, dst_stride, filter, height); + } + +-static void hevc_hv_bi_4t_6w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height) ++static void hevc_hv_4t_6w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y, ++ int32_t height) + { +- uint32_t tpw0, tpw1, tpw2, tpw3; +- uint64_t tp0, tp1; +- const int32_t src_stride_2x = (src_stride << 1); +- const int32_t dst_stride_2x = (dst_stride << 1); +- const int32_t src_stride_4x = (src_stride << 2); +- const int32_t dst_stride_4x = (dst_stride << 2); +- const int32_t src2_stride_2x = (src2_stride << 1); +- const int32_t src2_stride_4x = (src2_stride << 2); +- const int32_t src_stride_3x = src_stride_2x + src_stride; +- const int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src2_stride_2x = (src2_stride << 1); ++ int32_t src2_stride_4x = (src2_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t src2_stride_3x = src2_stride_2x + src2_stride; + __m128i out0, out1; + __m128i src0, src1, src2, src3, src4, src5, src6; + __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7, mask1; +- __m128i filt0, filt1, filt_h0, filt_h1, const_vec; ++ __m128i filt0, filt1, filt_h0, filt_h1; + __m128i dsth0, dsth1, dsth2, dsth3, dsth4, dsth5; + __m128i dsth6, dsth7, dsth8, dsth9, dsth10; + __m128i dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l; + __m128i dst4_r, dst5_r, dst6_r, dst7_r; + __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8; +- __m128i zero ={0}; ++ __m128i reg0, reg1, reg2, reg3; + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + + src0_ptr -= (src_stride + 1); +@@ -2255,110 +1515,114 @@ static void hevc_hv_bi_4t_6w_lsx(uint8_t *src0_ptr, + DUP2_ARG2(__lsx_vreplvei_w, filt_h1, 0, filt_h1, 1, filt_h0, filt_h1); + + mask1 = __lsx_vaddi_bu(mask0, 2); +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0, src1); +- src2 = __lsx_vld(src0_ptr + src_stride_2x, 0); ++ src0 = __lsx_vld(src0_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src0_ptr, src_stride, src0_ptr, src_stride_2x, ++ src1, src2); + src0_ptr += src_stride_3x; +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- src2 = __lsx_vxori_b(src2, 128); + + DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); + DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); + DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); + +- dsth0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); +- dsth1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +- dsth2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, dsth0, dsth1); ++ dsth2 = __lsx_vdp2_h_bu_b(vec4, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dsth0, vec1, filt1, dsth1, vec3, filt1, ++ dsth0, dsth1); ++ dsth2 = __lsx_vdp2add_h_bu_b(dsth2, vec5, filt1); + + DUP2_ARG2(__lsx_vilvl_h, dsth1, dsth0, dsth2, dsth1, tmp0, tmp2); + DUP2_ARG2(__lsx_vilvh_h, dsth1, dsth0, dsth2, dsth1, tmp1, tmp3); + +- DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0_ptr + src_stride_2x, +- 0, src0_ptr + src_stride_3x, 0, src3, src4, src5, src6); +- DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, src4, +- src5, src6); ++ src3 = __lsx_vld(src0_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src0_ptr, src_stride, src0_ptr, src_stride_2x, ++ src4, src5); ++ src6 = __lsx_vldx(src0_ptr, src_stride_3x); ++ src0_ptr += src_stride_4x; + DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); + DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); + DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); + DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); + +- dsth3 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); +- dsth4 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +- dsth5 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); +- dsth6 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, vec4, filt0, vec6, ++ filt0, dsth3, dsth4, dsth5, dsth6); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dsth3, vec1, filt1, dsth4, vec3, filt1, dsth5, ++ vec5, filt1, dsth6, vec7, filt1, dsth3, dsth4, dsth5, dsth6); + +- src0_ptr += src_stride_4x; +- DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0_ptr + src_stride_2x, +- 0, src0_ptr + src_stride_3x, 0, src3, src4, src5, src6); +- DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, src4, +- src5, src6); ++ src3 = __lsx_vld(src0_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src0_ptr, src_stride, src0_ptr, src_stride_2x, ++ src4, src5); ++ src6 = __lsx_vldx(src0_ptr, src_stride_3x); + + DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); + DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); + DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); + DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); + +- dsth7 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); +- dsth8 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +- dsth9 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); +- dsth10 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, vec4, filt0, vec6, ++ filt0, dsth7, dsth8, dsth9, dsth10); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dsth7, vec1, filt1, dsth8, vec3, filt1, dsth9, ++ vec5, filt1, dsth10, vec7, filt1, dsth7, dsth8, dsth9, dsth10); + + DUP2_ARG2(__lsx_vilvl_h, dsth3, dsth2, dsth4, dsth3, tmp4, tmp6); + DUP2_ARG2(__lsx_vilvh_h, dsth3, dsth2, dsth4, dsth3, tmp5, tmp7); + DUP2_ARG2(__lsx_vilvl_h, dsth5, dsth4, dsth6, dsth5, dsth0, dsth2); + DUP2_ARG2(__lsx_vilvh_h, dsth5, dsth4, dsth6, dsth5, dsth1, dsth3); +- dst0_r = __lsx_hevc_filt_4tap_w(tmp0, tmp4, filt_h0, filt_h1); +- dst1_r = __lsx_hevc_filt_4tap_w(tmp2, tmp6, filt_h0, filt_h1); +- dst2_r = __lsx_hevc_filt_4tap_w(tmp4, dsth0, filt_h0, filt_h1); +- dst3_r = __lsx_hevc_filt_4tap_w(tmp6, dsth2, filt_h0, filt_h1); ++ DUP4_ARG2(__lsx_vdp2_w_h, tmp0, filt_h0, tmp2, filt_h0, tmp4, filt_h0, ++ tmp6, filt_h0, dst0_r, dst1_r, dst2_r, dst3_r); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, tmp4, filt_h1, dst1_r, tmp6, ++ filt_h1, dst2_r, dsth0, filt_h1, dst3_r, dsth2, filt_h1, ++ dst0_r, dst1_r, dst2_r, dst3_r); + DUP2_ARG2(__lsx_vpickev_d, tmp3, tmp1, tmp7, tmp5, tmp0, tmp8); +- dst0_l = __lsx_hevc_filt_4tap_w(tmp0, tmp8, filt_h0, filt_h1); ++ dst0_l = __lsx_vdp2_w_h(tmp0, filt_h0); ++ dst0_l = __lsx_vdp2add_w_h(dst0_l, tmp8, filt_h1); + + DUP2_ARG2(__lsx_vilvl_h, dsth7, dsth6, dsth8, dsth7, tmp0, tmp2); + DUP2_ARG2(__lsx_vilvh_h, dsth7, dsth6, dsth8, dsth7, tmp1, tmp3); + DUP2_ARG2(__lsx_vilvl_h, dsth9, dsth8, dsth10, dsth9, tmp4, tmp6); + DUP2_ARG2(__lsx_vilvh_h, dsth9, dsth8, dsth10, dsth9, tmp5, tmp7); +- dst4_r = __lsx_hevc_filt_4tap_w(dsth0, tmp0, filt_h0, filt_h1); +- dst5_r = __lsx_hevc_filt_4tap_w(dsth2, tmp2, filt_h0, filt_h1); +- dst6_r = __lsx_hevc_filt_4tap_w(tmp0, tmp4, filt_h0, filt_h1); +- dst7_r = __lsx_hevc_filt_4tap_w(tmp2, tmp6, filt_h0, filt_h1); ++ DUP4_ARG2(__lsx_vdp2_w_h, dsth0, filt_h0, dsth2, filt_h0, tmp0, filt_h0, ++ tmp2, filt_h0, dst4_r, dst5_r, dst6_r, dst7_r); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst4_r, tmp0, filt_h1, dst5_r, tmp2, ++ filt_h1, dst6_r, tmp4, filt_h1, dst7_r, tmp6, filt_h1, ++ dst4_r, dst5_r, dst6_r, dst7_r); + DUP2_ARG2(__lsx_vpickev_d, dsth3, dsth1, tmp3, tmp1, tmp0, tmp1); + tmp2 = __lsx_vpickev_d(tmp7, tmp5); + +- dst1_l = __lsx_hevc_filt_4tap_w(tmp8, tmp0, filt_h0, filt_h1); +- dst2_l = __lsx_hevc_filt_4tap_w(tmp0, tmp1, filt_h0, filt_h1); +- dst3_l = __lsx_hevc_filt_4tap_w(tmp1, tmp2, filt_h0, filt_h1); +- +- DUP4_ARG2(__lsx_vsrai_d, dst0_r, 6, dst1_r, 6, dst2_r, 6, dst3_r, 6, dst0_r, +- dst1_r, dst2_r, dst3_r); +- DUP4_ARG2(__lsx_vsrai_d, dst4_r, 6, dst5_r, 6, dst6_r, 6, dst7_r, 6, dst4_r, +- dst5_r, dst6_r, dst7_r); +- DUP4_ARG2(__lsx_vsrai_d, dst0_l, 6, dst1_l, 6, dst2_l, 6, dst3_l, 6, dst0_l, +- dst1_l, dst2_l, dst3_l); ++ DUP2_ARG2(__lsx_vdp2_w_h, tmp8, filt_h0, tmp0, filt_h0, dst1_l, dst2_l); ++ dst3_l = __lsx_vdp2_w_h(tmp1, filt_h0); ++ DUP2_ARG3(__lsx_vdp2add_w_h, dst1_l, tmp0, filt_h1, dst2_l, tmp1, filt_h1, ++ dst1_l, dst2_l); ++ dst3_l = __lsx_vdp2add_w_h(dst3_l, tmp2, filt_h1); ++ ++ DUP4_ARG2(__lsx_vsrai_d, dst0_r, 6, dst1_r, 6, dst2_r, 6, dst3_r, 6, ++ dst0_r, dst1_r, dst2_r, dst3_r); ++ DUP4_ARG2(__lsx_vsrai_d, dst4_r, 6, dst5_r, 6, dst6_r, 6, dst7_r, 6, ++ dst4_r, dst5_r, dst6_r, dst7_r); ++ DUP4_ARG2(__lsx_vsrai_d, dst0_l, 6, dst1_l, 6, dst2_l, 6, dst3_l, 6, ++ dst0_l, dst1_l, dst2_l, dst3_l); + DUP2_ARG2(__lsx_vpickev_h, dst1_r, dst0_r, dst3_r, dst2_r, tmp0, tmp1); + DUP2_ARG2(__lsx_vpickev_h, dst5_r, dst4_r, dst7_r, dst6_r, tmp2, tmp3); + DUP2_ARG2(__lsx_vpickev_h, dst1_l, dst0_l, dst3_l, dst2_l, tmp4, tmp5); + +- tp0 = *(uint64_t *)src1_ptr; +- tp1 = *(uint64_t *)(src1_ptr + src2_stride); +- DUP2_ARG3(__lsx_vinsgr2vr_d, zero, tp0, 0, dsth0, tp1, 1, dsth0, dsth0); +- tp0 = *(uint64_t *)(src1_ptr + src2_stride_2x); +- tp1 = *(uint64_t *)(src1_ptr + src2_stride_3x); +- DUP2_ARG3(__lsx_vinsgr2vr_d, zero, tp0, 0, dsth1, tp1, 1, dsth1, dsth1); ++ reg0 = __lsx_vldrepl_d(src1_ptr, 0); ++ reg1 = __lsx_vldrepl_d(src1_ptr + src2_stride, 0); ++ dsth0 = __lsx_vilvl_d(reg1, reg0); ++ reg0 = __lsx_vldrepl_d(src1_ptr + src2_stride_2x, 0); ++ reg1 = __lsx_vldrepl_d(src1_ptr + src2_stride_3x, 0); ++ dsth1 = __lsx_vilvl_d(reg1, reg0); + src1_ptr += src2_stride_4x; +- tp0 = *(uint64_t *)src1_ptr; +- tp1 = *(uint64_t *)(src1_ptr + src2_stride); +- DUP2_ARG3(__lsx_vinsgr2vr_d, zero, tp0, 0, dsth2, tp1, 1, dsth2, dsth2); +- tp0 = *(uint64_t *)(src1_ptr + src2_stride_2x); +- tp1 = *(uint64_t *)(src1_ptr + src2_stride_3x); +- DUP2_ARG3(__lsx_vinsgr2vr_d, zero, tp0, 0, dsth3, tp1, 1, dsth3, dsth3); +- +- DUP4_ARG2(__lsx_vsadd_h, dsth0, const_vec, dsth1, const_vec, dsth2, const_vec, +- dsth3, const_vec, dsth0, dsth1, dsth2, dsth3); +- DUP4_ARG2(__lsx_vsadd_h, dsth0, tmp0, dsth1, tmp1, dsth2, tmp2, dsth3, tmp3, ++ reg0 = __lsx_vldrepl_d(src1_ptr, 0); ++ reg1 = __lsx_vldrepl_d(src1_ptr + src2_stride, 0); ++ dsth2 = __lsx_vilvl_d(reg1, reg0); ++ reg0 = __lsx_vldrepl_d(src1_ptr + src2_stride_2x, 0); ++ reg1 = __lsx_vldrepl_d(src1_ptr + src2_stride_3x, 0); ++ dsth3 = __lsx_vilvl_d(reg1, reg0); ++ ++ DUP4_ARG2(__lsx_vsadd_h, dsth0, tmp0, dsth1, tmp1, dsth2, tmp2, dsth3, ++ tmp3, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vmaxi_h, tmp0, 0, tmp1, 0, tmp2, 0, tmp3, 0, + tmp0, tmp1, tmp2, tmp3); +- DUP4_ARG2(__lsx_vmaxi_h, tmp0, 0, tmp1, 0, tmp2, 0, tmp3, 0, tmp0, tmp1, tmp2, tmp3); + DUP2_ARG3(__lsx_vssrlrni_bu_h, tmp1, tmp0, 7, tmp3, tmp2, 7, out0, out1); + + __lsx_vstelm_w(out0, dst, 0, 0); +@@ -2373,20 +1637,21 @@ static void hevc_hv_bi_4t_6w_lsx(uint8_t *src0_ptr, + dst -= dst_stride_4x; + + src1_ptr -= src2_stride_4x; +- tpw0 = *(uint32_t *)(src1_ptr + 4); +- tpw1 = *(uint32_t *)(src1_ptr + 4 + src2_stride); +- tpw2 = *(uint32_t *)(src1_ptr + 4 + src2_stride_2x); +- tpw3 = *(uint32_t *)(src1_ptr + 4 + src2_stride_3x); +- DUP4_ARG3(__lsx_vinsgr2vr_w, zero, tpw0, 0, dsth4, tpw1, 1, dsth4, tpw2, 2, +- dsth4, tpw3, 3, dsth4, dsth4, dsth4, dsth4); ++ ++ reg0 = __lsx_vldrepl_w(src1_ptr, 8); ++ reg1 = __lsx_vldrepl_w(src1_ptr + src2_stride, 8); ++ reg2 = __lsx_vldrepl_w(src1_ptr + src2_stride_2x, 8); ++ reg3 = __lsx_vldrepl_w(src1_ptr + src2_stride_3x, 8); ++ DUP2_ARG2(__lsx_vilvl_w, reg1, reg0, reg3, reg2, tmp0, tmp1); ++ dsth4 = __lsx_vilvl_d(tmp1, tmp0); + src1_ptr += src2_stride_4x; +- tpw0 = *(uint32_t *)(src1_ptr + 4); +- tpw1 = *(uint32_t *)(src1_ptr + 4 + src2_stride); +- tpw2 = *(uint32_t *)(src1_ptr + 4 + src2_stride_2x); +- tpw3 = *(uint32_t *)(src1_ptr + 4 + src2_stride_3x); +- DUP4_ARG3(__lsx_vinsgr2vr_w, zero, tpw0, 0, dsth5, tpw1, 1, dsth5, tpw2, 2, +- dsth5, tpw3, 3, dsth5, dsth5, dsth5, dsth5); +- DUP2_ARG2(__lsx_vsadd_h, dsth4, const_vec, dsth5, const_vec, dsth4, dsth5); ++ ++ reg0 = __lsx_vldrepl_w(src1_ptr, 8); ++ reg1 = __lsx_vldrepl_w(src1_ptr + src2_stride, 8); ++ reg2 = __lsx_vldrepl_w(src1_ptr + src2_stride_2x, 8); ++ reg3 = __lsx_vldrepl_w(src1_ptr + src2_stride_3x, 8); ++ DUP2_ARG2(__lsx_vilvl_w, reg1, reg0, reg3, reg2, tmp0, tmp1); ++ dsth5 = __lsx_vilvl_d(tmp1, tmp0); + DUP2_ARG2(__lsx_vsadd_h, dsth4, tmp4, dsth5, tmp5, tmp4, tmp5); + DUP2_ARG2(__lsx_vmaxi_h, tmp4, 0, tmp5, 7, tmp4, tmp5); + out0 = __lsx_vssrlrni_bu_h(tmp5, tmp4, 7); +@@ -2403,26 +1668,20 @@ static void hevc_hv_bi_4t_6w_lsx(uint8_t *src0_ptr, + } + + static av_always_inline +-void hevc_hv_bi_4t_8x2_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y) ++void hevc_hv_4t_8x2_lsx(uint8_t *src0_ptr, int32_t src_stride, int16_t *src1_ptr, ++ int32_t src2_stride, uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y) + { +- const int32_t src_stride_2x = (src_stride << 1); +- const int32_t src_stride_4x = (src_stride << 2); +- const int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; + + __m128i out; + __m128i src0, src1, src2, src3, src4; + __m128i filt0, filt1; + __m128i filt_h0, filt_h1; + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); +- __m128i mask1; +- __m128i filter_vec, const_vec; ++ __m128i mask1, filter_vec; + __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7, vec8, vec9; + __m128i dst0, dst1, dst2, dst3, dst4; + __m128i dst0_r, dst0_l, dst1_r, dst1_l; +@@ -2439,17 +1698,13 @@ void hevc_hv_bi_4t_8x2_lsx(uint8_t *src0_ptr, + DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); + + mask1 = __lsx_vaddi_bu(mask0, 2); +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0_ptr + src_stride_2x, +- 0, src0_ptr + src_stride_3x, 0, src0, src1, src2, src3); +- src4 = __lsx_vld(src0_ptr + src_stride_4x, 0); +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, +- src2, src3); +- src4 = __lsx_vxori_b(src4, 128); ++ src0 = __lsx_vld(src0_ptr, 0); ++ DUP4_ARG2(__lsx_vldx, src0_ptr, src_stride, src0_ptr, src_stride_2x, ++ src0_ptr, src_stride_3x, src0_ptr, src_stride_4x, ++ src1, src2, src3, src4); + + DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in0, in1); +- DUP2_ARG2(__lsx_vsadd_h, in0, const_vec, in1, const_vec, in0, in1); + + DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); + DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); +@@ -2457,22 +1712,24 @@ void hevc_hv_bi_4t_8x2_lsx(uint8_t *src0_ptr, + DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec6, vec7); + DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec8, vec9); + +- dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); +- dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +- dst2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); +- dst3 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); +- dst4 = __lsx_hevc_filt_4tap_h(vec8, vec9, filt0, filt1); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, vec4, filt0, vec6, ++ filt0, dst0, dst1, dst2, dst3); ++ dst4 = __lsx_vdp2_h_bu_b(vec8, filt0); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst1, vec3, filt1, dst2, ++ vec5, filt1, dst3, vec7, filt1, dst0, dst1, dst2, dst3); ++ dst4 = __lsx_vdp2add_h_bu_b(dst4, vec9, filt1); + + DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); + DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); + DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); + DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); +- dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); +- dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +- dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); +- dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); +- DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, dst0_r, +- dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst10_l, filt_h0, dst21_r, ++ filt_h0, dst21_l, filt_h0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst32_r, filt_h1, dst0_l, dst32_l, ++ filt_h1, dst1_r, dst43_r, filt_h1, dst1_l, dst43_l, filt_h1, ++ dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, ++ dst0_r, dst0_l, dst1_r, dst1_l); + DUP2_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, tmp0, tmp1); + DUP2_ARG2(__lsx_vsadd_h, in0, tmp0, in1, tmp1, tmp0, tmp1); + DUP2_ARG2(__lsx_vmaxi_h, tmp0, 0, tmp1, 0, tmp0, tmp1); +@@ -2482,29 +1739,26 @@ void hevc_hv_bi_4t_8x2_lsx(uint8_t *src0_ptr, + } + + static av_always_inline +-void hevc_hv_bi_4t_8multx4_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t width8mult) ++void hevc_hv_4t_8multx4_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y, ++ int32_t width8mult) + { + uint32_t cnt; +- const int32_t src_stride_2x = (src_stride << 1); +- const int32_t dst_stride_2x = (dst_stride << 1); +- const int32_t src_stride_4x = (src_stride << 2); +- const int32_t src2_stride_2x = (src2_stride << 1); +- const int32_t src_stride_3x = src_stride_2x + src_stride; +- const int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t src2_stride_x = (src2_stride << 1); ++ int32_t src2_stride_2x = (src2_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t src2_stride_3x = src2_stride_2x + src2_stride_x; + + __m128i out0, out1; + __m128i src0, src1, src2, src3, src4, src5, src6, mask0, mask1; + __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; +- __m128i filt0, filt1, filt_h0, filt_h1, filter_vec, const_vec; ++ __m128i filt0, filt1, filt_h0, filt_h1, filter_vec; + __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, tmp0, tmp1, tmp2, tmp3; + __m128i in0, in1, in2, in3; + __m128i dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l; +@@ -2520,73 +1774,80 @@ void hevc_hv_bi_4t_8multx4_lsx(uint8_t *src0_ptr, + + mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + mask1 = __lsx_vaddi_bu(mask0, 2); +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + for (cnt = width8mult; cnt--;) { +- DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, +- src0_ptr + src_stride_2x, 0, src0_ptr + src_stride_3x, 0, src0, +- src1, src2, src3); ++ src0 = __lsx_vld(src0_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src0_ptr, src_stride, src0_ptr, src_stride_2x, ++ src1, src2); ++ src3 = __lsx_vldx(src0_ptr, src_stride_3x); + src0_ptr += src_stride_4x; +- DUP2_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src4, src5); +- src6 = __lsx_vld(src0_ptr + src_stride_2x, 0); ++ src4 = __lsx_vld(src0_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src0_ptr, src_stride, src0_ptr, src_stride_2x, ++ src5, src6); + src0_ptr += (8 - src_stride_4x); +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); +- src6 = __lsx_vxori_b(src6, 128); +- +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, +- in0, in1, in2, in3); ++ ++ in0 = __lsx_vld(src1_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src1_ptr, src2_stride_x, src1_ptr, ++ src2_stride_2x, in1, in2); ++ in3 = __lsx_vldx(src1_ptr, src2_stride_3x); + src1_ptr += 8; +- DUP4_ARG2(__lsx_vsadd_h, in0, const_vec, in1, const_vec, in2, const_vec, +- in3, const_vec, in0, in1, in2, in3); + +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, ++ vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, ++ vec4, vec5); + +- dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); +- dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +- dst2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, dst0, dst1); ++ dst2 = __lsx_vdp2_h_bu_b(vec4, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst1, vec3, filt1, ++ dst0, dst1); ++ dst2 = __lsx_vdp2add_h_bu_b(dst2, vec5, filt1); + + DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); + DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); + +- DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); +- DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); +- DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); ++ DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, ++ vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, ++ vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, ++ vec6, vec7); + +- dst3 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); +- dst4 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +- dst5 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); +- dst6 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, vec4, filt0, ++ vec6, filt0, dst3, dst4, dst5, dst6); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst3, vec1, filt1, dst4, vec3, filt1, ++ dst5, vec5, filt1, dst6, vec7, filt1, dst3, dst4, dst5, dst6); + + DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); + DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); + DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst54_r, dst65_r); + DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst54_l, dst65_l); + +- dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); +- dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +- dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); +- dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); +- dst2_r = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); +- dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); +- dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); +- dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst10_l, filt_h0, dst21_r, ++ filt_h0, dst21_l, filt_h0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst32_r, filt_h0, dst32_l, filt_h0, dst43_r, ++ filt_h0, dst43_l, filt_h0, dst2_r, dst2_l, dst3_r, dst3_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst32_r, filt_h1, dst0_l, dst32_l, ++ filt_h1, dst1_r, dst43_r, filt_h1, dst1_l, dst43_l, filt_h1, ++ dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst2_r, dst54_r, filt_h1, dst2_l, dst54_l, ++ filt_h1, dst3_r, dst65_r, filt_h1, dst3_l, dst65_l, filt_h1, ++ dst2_r, dst2_l, dst3_r, dst3_l); + + DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, + dst0_r, dst0_l, dst1_r, dst1_l); + DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, + dst2_r, dst2_l, dst3_r, dst3_l); +- DUP4_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, dst2_r, +- dst3_l, dst3_r, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, ++ dst2_r, dst3_l, dst3_r, tmp0, tmp1, tmp2, tmp3); + DUP4_ARG2(__lsx_vsadd_h, in0, tmp0, in1, tmp1, in2, tmp2, in3, tmp3, + tmp0, tmp1, tmp2, tmp3); +- DUP4_ARG2(__lsx_vmaxi_h, tmp0, 0, tmp1, 0, tmp2, 0, tmp3, 0, tmp0, tmp1, +- tmp2, tmp3); ++ DUP4_ARG2(__lsx_vmaxi_h, tmp0, 0, tmp1, 0, tmp2, 0, tmp3, 0, ++ tmp0, tmp1, tmp2, tmp3); + DUP2_ARG3(__lsx_vssrlrni_bu_h, tmp1, tmp0, 7, tmp3, tmp2, 7, out0, out1); + __lsx_vstelm_d(out0, dst, 0, 0); + __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); +@@ -2597,24 +1858,19 @@ void hevc_hv_bi_4t_8multx4_lsx(uint8_t *src0_ptr, + } + + static av_always_inline +-void hevc_hv_bi_4t_8x6_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y) ++void hevc_hv_4t_8x6_lsx(uint8_t *src0_ptr, int32_t src_stride, int16_t *src1_ptr, ++ int32_t src2_stride, uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y) + { +- const int32_t src_stride_2x = (src_stride << 1); +- const int32_t dst_stride_2x = (dst_stride << 1); +- const int32_t src_stride_4x = (src_stride << 2); +- const int32_t dst_stride_4x = (dst_stride << 2); +- const int32_t src2_stride_2x = (src2_stride << 1); +- const int32_t src2_stride_4x = (src2_stride << 2); +- const int32_t src_stride_3x = src_stride_2x + src_stride; +- const int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src2_stride_x = (src2_stride << 1); ++ int32_t src2_stride_2x = (src2_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t src2_stride_3x = src2_stride_2x + src2_stride_x; + + __m128i out0, out1, out2; + __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8; +@@ -2622,8 +1878,7 @@ void hevc_hv_bi_4t_8x6_lsx(uint8_t *src0_ptr, + __m128i filt0, filt1; + __m128i filt_h0, filt_h1; + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); +- __m128i mask1; +- __m128i filter_vec, const_vec; ++ __m128i mask1, filter_vec; + __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7, vec8, vec9; + __m128i vec10, vec11, vec12, vec13, vec14, vec15, vec16, vec17; + __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; +@@ -2643,29 +1898,24 @@ void hevc_hv_bi_4t_8x6_lsx(uint8_t *src0_ptr, + DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); + + mask1 = __lsx_vaddi_bu(mask0, 2); +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0_ptr + src_stride_2x, +- 0, src0_ptr + src_stride_3x, 0, src0, src1, src2, src3); ++ src0 = __lsx_vld(src0_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src0_ptr, src_stride, src0_ptr, src_stride_2x, ++ src1, src2); ++ src3 = __lsx_vldx(src0_ptr, src_stride_3x); + src0_ptr += src_stride_4x; +- DUP4_ARG2(__lsx_vld, src0_ptr, 0, src0_ptr + src_stride, 0, src0_ptr + src_stride_2x, +- 0, src0_ptr + src_stride_3x, 0, src4, src5, src6, src7); +- src8 = __lsx_vld(src0_ptr + src_stride_4x, 0); +- +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, +- src2, src3); +- DUP4_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src6, 128, src7, 128, src4, src5, +- src6, src7) +- src8 = __lsx_vxori_b(src8, 128); +- +- DUP4_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, +- src1_ptr + src2_stride_2x, 0, src1_ptr + src2_stride_3x, 0, in0, in1, +- in2, in3); +- src1_ptr += src2_stride_4x; +- DUP2_ARG2(__lsx_vld, src1_ptr, 0, src1_ptr + src2_stride, 0, in4, in5); +- DUP4_ARG2(__lsx_vsadd_h, in0, const_vec, in1, const_vec, in2, const_vec, in3, +- const_vec, in0, in1, in2, in3); +- DUP2_ARG2(__lsx_vsadd_h, in4, const_vec, in5, const_vec, in4, in5); ++ src4 = __lsx_vld(src0_ptr, 0); ++ DUP4_ARG2(__lsx_vldx, src0_ptr, src_stride, src0_ptr, src_stride_2x, ++ src0_ptr, src_stride_3x, src0_ptr, src_stride_4x, ++ src5, src6, src7, src8); ++ ++ in0 = __lsx_vld(src1_ptr, 0); ++ DUP2_ARG2(__lsx_vldx, src1_ptr, src2_stride_x, src1_ptr, src2_stride_2x, ++ in1, in2); ++ in3 = __lsx_vldx(src1_ptr, src2_stride_3x); ++ src1_ptr += src2_stride_2x; ++ in4 = __lsx_vld(src1_ptr, 0); ++ in5 = __lsx_vldx(src1_ptr, src2_stride_x); + + DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); + DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); +@@ -2677,15 +1927,16 @@ void hevc_hv_bi_4t_8x6_lsx(uint8_t *src0_ptr, + DUP2_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, vec14, vec15); + DUP2_ARG3(__lsx_vshuf_b, src8, src8, mask0, src8, src8, mask1, vec16, vec17); + +- dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); +- dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +- dst2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); +- dst3 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); +- dst4 = __lsx_hevc_filt_4tap_h(vec8, vec9, filt0, filt1); +- dst5 = __lsx_hevc_filt_4tap_h(vec10, vec11, filt0, filt1); +- dst6 = __lsx_hevc_filt_4tap_h(vec12, vec13, filt0, filt1); +- dst7 = __lsx_hevc_filt_4tap_h(vec14, vec15, filt0, filt1); +- dst8 = __lsx_hevc_filt_4tap_h(vec16, vec17, filt0, filt1); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, vec4, filt0, vec6, ++ filt0, dst0, dst1, dst2, dst3); ++ dst4 = __lsx_vdp2_h_bu_b(vec8, filt0); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec10, filt0, vec12, filt0, vec14, filt0, ++ vec16, filt0, dst5, dst6, dst7, dst8); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst1, vec3, filt1, dst2, ++ vec5, filt1, dst3, vec7, filt1, dst0, dst1, dst2, dst3); ++ dst4 = __lsx_vdp2add_h_bu_b(dst4, vec9, filt1); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst5, vec11, filt1, dst6, vec13, filt1, ++ dst7, vec15, filt1, dst8, vec17, filt1, dst5, dst6, dst7, dst8); + + DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, + dst10_r, dst21_r, dst32_r, dst43_r); +@@ -2696,32 +1947,36 @@ void hevc_hv_bi_4t_8x6_lsx(uint8_t *src0_ptr, + DUP4_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst7, dst6, dst8, dst7, + dst54_l, dst65_l, dst76_l, dst87_l); + +- dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); +- dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +- dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); +- dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); +- dst2_r = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); +- dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); +- dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); +- dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); +- dst4_r = __lsx_hevc_filt_4tap_w(dst54_r, dst76_r, filt_h0, filt_h1); +- dst4_l = __lsx_hevc_filt_4tap_w(dst54_l, dst76_l, filt_h0, filt_h1); +- dst5_r = __lsx_hevc_filt_4tap_w(dst65_r, dst87_r, filt_h0, filt_h1); +- dst5_l = __lsx_hevc_filt_4tap_w(dst65_l, dst87_l, filt_h0, filt_h1); +- +- DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, dst0_r, +- dst0_l, dst1_r, dst1_l); +- DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, dst2_r, +- dst2_l, dst3_r, dst3_l); +- DUP4_ARG2(__lsx_vsrai_w, dst4_r, 6, dst4_l, 6, dst5_r, 6, dst5_l, 6, dst4_r, +- dst4_l, dst5_r, dst5_l); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst10_l, filt_h0, dst21_r, ++ filt_h0, dst21_l, filt_h0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst32_r, filt_h0, dst32_l, filt_h0, dst43_r, ++ filt_h0, dst43_l, filt_h0, dst2_r, dst2_l, dst3_r, dst3_l); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst54_r, filt_h0, dst54_l, filt_h0, dst65_r, ++ filt_h0, dst65_l, filt_h0, dst4_r, dst4_l, dst5_r, dst5_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst32_r, filt_h1, dst0_l, dst32_l, ++ filt_h1, dst1_r, dst43_r, filt_h1, dst1_l, dst43_l, filt_h1, ++ dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst2_r, dst54_r, filt_h1, dst2_l, dst54_l, ++ filt_h1, dst3_r, dst65_r, filt_h1, dst3_l, dst65_l, filt_h1, ++ dst2_r, dst2_l, dst3_r, dst3_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst4_r, dst76_r, filt_h1, dst4_l, dst76_l, ++ filt_h1, dst5_r, dst87_r, filt_h1, dst5_l, dst87_l, filt_h1, ++ dst4_r, dst4_l, dst5_r, dst5_l); ++ ++ DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, ++ dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, ++ dst2_r, dst2_l, dst3_r, dst3_l); ++ DUP4_ARG2(__lsx_vsrai_w, dst4_r, 6, dst4_l, 6, dst5_r, 6, dst5_l, 6, ++ dst4_r, dst4_l, dst5_r, dst5_l); + DUP4_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, dst2_r, + dst3_l, dst3_r, tmp0, tmp1, tmp2, tmp3); + DUP2_ARG2(__lsx_vpickev_h, dst4_l, dst4_r, dst5_l, dst5_r, tmp4, tmp5); +- DUP4_ARG2(__lsx_vsadd_h, in0, tmp0, in1, tmp1, in2, tmp2, in3, tmp3, tmp0, tmp1, +- tmp2, tmp3); ++ DUP4_ARG2(__lsx_vsadd_h, in0, tmp0, in1, tmp1, in2, tmp2, in3, tmp3, ++ tmp0, tmp1, tmp2, tmp3); + DUP2_ARG2(__lsx_vsadd_h, in4, tmp4, in5, tmp5, tmp4, tmp5); +- DUP4_ARG2(__lsx_vmaxi_h, tmp0, 0, tmp1, 0, tmp2, 0, tmp3, 0, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vmaxi_h, tmp0, 0, tmp1, 0, tmp2, 0, tmp3, 0, ++ tmp0, tmp1, tmp2, tmp3); + DUP2_ARG2(__lsx_vmaxi_h, tmp4, 0, tmp5, 0, tmp4, tmp5); + DUP2_ARG3(__lsx_vssrlrni_bu_h, tmp1, tmp0, 7, tmp3, tmp2, 7, out0, out1); + out2 = __lsx_vssrlrni_bu_h(tmp5, tmp4, 7); +@@ -2735,16 +1990,11 @@ void hevc_hv_bi_4t_8x6_lsx(uint8_t *src0_ptr, + } + + static av_always_inline +-void hevc_hv_bi_4t_8multx4mult_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height, +- int32_t width) ++void hevc_hv_4t_8multx4mult_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y, ++ int32_t height, int32_t width) + { + uint32_t loop_cnt, cnt; + uint8_t *src0_ptr_tmp; +@@ -2754,19 +2004,18 @@ void hevc_hv_bi_4t_8multx4mult_lsx(uint8_t *src0_ptr, + const int32_t dst_stride_2x = (dst_stride << 1); + const int32_t src_stride_4x = (src_stride << 2); + const int32_t dst_stride_4x = (dst_stride << 2); +- const int32_t src2_stride_2x = (src2_stride << 1); +- const int32_t src2_stride_4x = (src2_stride << 2); ++ const int32_t src2_stride_x = (src2_stride << 1); ++ const int32_t src2_stride_2x = (src2_stride << 2); + const int32_t src_stride_3x = src_stride_2x + src_stride; + const int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- const int32_t src2_stride_3x = src2_stride_2x + src2_stride; ++ const int32_t src2_stride_3x = src2_stride_2x + src2_stride_x; + __m128i out0, out1; + __m128i src0, src1, src2, src3, src4, src5, src6; + __m128i in0, in1, in2, in3; + __m128i filt0, filt1; + __m128i filt_h0, filt_h1; + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); +- __m128i mask1; +- __m128i filter_vec, const_vec; ++ __m128i mask1, filter_vec; + __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; + __m128i dst0, dst1, dst2, dst3, dst4, dst5; + __m128i dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l; +@@ -2785,68 +2034,71 @@ void hevc_hv_bi_4t_8multx4mult_lsx(uint8_t *src0_ptr, + DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); + + mask1 = __lsx_vaddi_bu(mask0, 2); +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + for (cnt = width >> 3; cnt--;) { + src0_ptr_tmp = src0_ptr; + dst_tmp = dst; + src1_ptr_tmp = src1_ptr; + +- DUP2_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, src0, src1); +- src2 = __lsx_vld(src0_ptr_tmp + src_stride_2x, 0); ++ src0 = __lsx_vld(src0_ptr_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src0_ptr_tmp, src_stride, src0_ptr_tmp, ++ src_stride_2x, src1, src2); + src0_ptr_tmp += src_stride_3x; +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- src2 = __lsx_vxori_b(src2, 128); + +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, ++ vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, ++ vec4, vec5); + +- dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); +- dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +- dst2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, dst0, dst1); ++ dst2 = __lsx_vdp2_h_bu_b(vec4, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst1, vec3, filt1, ++ dst0, dst1); ++ dst2 = __lsx_vdp2add_h_bu_b(dst2, vec5, filt1); + + DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); + DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); + + for (loop_cnt = height >> 2; loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src0_ptr_tmp, 0, src0_ptr_tmp + src_stride, 0, +- src0_ptr_tmp + src_stride_2x, 0, src0_ptr_tmp + src_stride_3x, +- 0, src3, src4, src5, src6); ++ src3 = __lsx_vld(src0_ptr_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src0_ptr_tmp, src_stride, src0_ptr_tmp, ++ src_stride_2x, src4, src5); ++ src6 = __lsx_vldx(src0_ptr_tmp, src_stride_3x); + src0_ptr_tmp += src_stride_4x; +- DUP4_ARG2(__lsx_vld, src1_ptr_tmp, 0, src1_ptr_tmp + src2_stride, 0, +- src1_ptr_tmp + src2_stride_2x, 0, src1_ptr_tmp + src2_stride_3x, +- 0, in0, in1, in2, in3); +- src1_ptr_tmp += src2_stride_4x; +- DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, +- src3, src4, src5, src6); +- +- DUP4_ARG2(__lsx_vsadd_h, in0, const_vec, in1, const_vec, in2, +- const_vec, in3, const_vec, in0, in1, in2, in3); ++ in0 = __lsx_vld(src1_ptr_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src1_ptr_tmp, src2_stride_x, src1_ptr_tmp, ++ src2_stride_2x, in1, in2); ++ in3 = __lsx_vldx(src1_ptr_tmp, src2_stride_3x); ++ src1_ptr_tmp += src2_stride_2x; + + DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src4, + src4, mask0, src4, src4, mask1, vec0, vec1, vec2, vec3); + DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src6, + src6, mask0, src6, src6, mask1, vec4, vec5, vec6, vec7); + +- dst3 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); +- dst4 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +- dst5 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); +- dst6 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, vec4, filt0, ++ vec6, filt0, dst3, dst4, dst5, dst6); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst3, vec1, filt1, dst4, vec3, ++ filt1, dst5, vec5, filt1, dst6, vec7, filt1, ++ dst3, dst4, dst5, dst6); + + DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); + DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); + DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst54_r, dst65_r); + DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst54_l, dst65_l); + +- dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); +- dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +- dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); +- dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); +- dst2_r = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); +- dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); +- dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); +- dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst10_l, filt_h0, dst21_r, ++ filt_h0, dst21_l, filt_h0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst32_r, filt_h0, dst32_l, filt_h0, dst43_r, ++ filt_h0, dst43_l, filt_h0, dst2_r, dst2_l, dst3_r, dst3_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst32_r, filt_h1, dst0_l, ++ dst32_l, filt_h1, dst1_r, dst43_r, filt_h1, dst1_l, ++ dst43_l, filt_h1, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst2_r, dst54_r, filt_h1, dst2_l, ++ dst54_l, filt_h1, dst3_r, dst65_r, filt_h1, dst3_l, ++ dst65_l, filt_h1, dst2_r, dst2_l, dst3_r, dst3_l); + + DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, + dst0_r, dst0_l, dst1_r, dst1_l); +@@ -2878,81 +2130,60 @@ void hevc_hv_bi_4t_8multx4mult_lsx(uint8_t *src0_ptr, + } + } + +-static void hevc_hv_bi_4t_8w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height) ++static void hevc_hv_4t_8w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y, ++ int32_t height) + { + if (2 == height) { +- hevc_hv_bi_4t_8x2_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, +- dst, dst_stride, filter_x, filter_y); ++ hevc_hv_4t_8x2_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y); + } else if (4 == height) { +- hevc_hv_bi_4t_8multx4_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, +- dst, dst_stride, filter_x, filter_y, 1); ++ hevc_hv_4t_8multx4_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y, 1); + } else if (6 == height) { +- hevc_hv_bi_4t_8x6_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, +- dst, dst_stride, filter_x, filter_y); ++ hevc_hv_4t_8x6_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y); + } else { +- hevc_hv_bi_4t_8multx4mult_lsx(src0_ptr, src_stride, +- src1_ptr, src2_stride, +- dst, dst_stride, +- filter_x, filter_y, height, 8); ++ hevc_hv_4t_8multx4mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y, height, 8); + } + } + +-static void hevc_hv_bi_4t_16w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height) ++static void hevc_hv_4t_16w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y, ++ int32_t height) + { + if (4 == height) { +- hevc_hv_bi_4t_8multx4_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, +- dst, dst_stride, filter_x, filter_y, 2); ++ hevc_hv_4t_8multx4_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y, 2); + } else { +- hevc_hv_bi_4t_8multx4mult_lsx(src0_ptr, src_stride, src1_ptr, +- src2_stride, dst, dst_stride, filter_x, +- filter_y, height, 16); ++ hevc_hv_4t_8multx4mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y, height, 16); + } + } + +-static void hevc_hv_bi_4t_24w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height) ++static void hevc_hv_4t_24w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y, ++ int32_t height) + { +- hevc_hv_bi_4t_8multx4mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, +- dst, dst_stride, filter_x, filter_y, +- height, 24); ++ hevc_hv_4t_8multx4mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y, height, 24); + } + +-static void hevc_hv_bi_4t_32w_lsx(uint8_t *src0_ptr, +- int32_t src_stride, +- int16_t *src1_ptr, +- int32_t src2_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height) ++static void hevc_hv_4t_32w_lsx(uint8_t *src0_ptr, int32_t src_stride, ++ int16_t *src1_ptr, int32_t src2_stride, ++ uint8_t *dst, int32_t dst_stride, ++ const int8_t *filter_x, const int8_t *filter_y, ++ int32_t height) + { +- hevc_hv_bi_4t_8multx4mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, +- dst, dst_stride, filter_x, filter_y, +- height, 32); ++ hevc_hv_4t_8multx4mult_lsx(src0_ptr, src_stride, src1_ptr, src2_stride, ++ dst, dst_stride, filter_x, filter_y, height, 32); + } + + #define BI_MC_COPY(WIDTH) \ +@@ -2995,9 +2226,9 @@ void ff_hevc_put_hevc_bi_##PEL##_##DIR##WIDTH##_8_lsx(uint8_t *dst, \ + { \ + const int8_t *filter = ff_hevc_##PEL##_filters[FILT_DIR - 1]; \ + \ +- hevc_##DIR1##_bi_##TAP##t_##WIDTH##w_lsx(src, src_stride, src_16bit, \ +- MAX_PB_SIZE, dst, dst_stride, \ +- filter, height); \ ++ hevc_##DIR1##_##TAP##t_##WIDTH##w_lsx(src, src_stride, src_16bit, \ ++ MAX_PB_SIZE, dst, dst_stride, \ ++ filter, height); \ + } + + BI_MC(qpel, h, 16, 8, hz, mx); +@@ -3037,9 +2268,9 @@ void ff_hevc_put_hevc_bi_##PEL##_hv##WIDTH##_8_lsx(uint8_t *dst, \ + const int8_t *filter_x = ff_hevc_##PEL##_filters[mx - 1]; \ + const int8_t *filter_y = ff_hevc_##PEL##_filters[my - 1]; \ + \ +- hevc_hv_bi_##TAP##t_##WIDTH##w_lsx(src, src_stride, src_16bit, \ +- MAX_PB_SIZE, dst, dst_stride, \ +- filter_x, filter_y, height); \ ++ hevc_hv_##TAP##t_##WIDTH##w_lsx(src, src_stride, src_16bit, \ ++ MAX_PB_SIZE, dst, dst_stride, \ ++ filter_x, filter_y, height); \ + } + + BI_MC_HV(qpel, 8, 8); +diff --git a/libavcodec/loongarch/hevc_mc_uni_lsx.c b/libavcodec/loongarch/hevc_mc_uni_lsx.c +index 9976502f18..a15c86268f 100644 +--- a/libavcodec/loongarch/hevc_mc_uni_lsx.c ++++ b/libavcodec/loongarch/hevc_mc_uni_lsx.c +@@ -1,6 +1,7 @@ + /* +- * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Copyright (c) 2022 Loongson Technology Corporation Limited + * Contributed by Lu Wang ++ * Hao Chen + * + * This file is part of FFmpeg. + * +@@ -21,7 +22,6 @@ + + #include "libavutil/loongarch/loongson_intrinsics.h" + #include "hevcdsp_lsx.h" +-#include "hevc_macros_lsx.h" + + static const uint8_t ff_hevc_mask_arr[16 * 3] __attribute__((aligned(0x40))) = { + /* 8 width cases */ +@@ -38,7 +38,7 @@ void common_hz_8t_64w_lsx(uint8_t *src, int32_t src_stride, + const int8_t *filter, int32_t height) + { + int32_t loop_cnt; +- __m128i mask0, mask1, mask2, mask3, out; ++ __m128i mask0, mask1, mask2, mask3, out1, out2; + __m128i src0, src1, src2, src3, src4, src5, src6, src7; + __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; + __m128i filt0, filt1, filt2, filt3; +@@ -48,73 +48,78 @@ void common_hz_8t_64w_lsx(uint8_t *src, int32_t src_stride, + src -= 3; + + /* rearranging filter */ +- DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filt0, filt1, filt2, filt3); + + DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + + for (loop_cnt = height; loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src, 8, src, 16, src, 24, src0, src1, src2, src3); +- DUP4_ARG2(__lsx_vld, src, 32, src, 40, src, 48, src, 56, src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 8, src, 16, src, 24, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 32, src, 40, src, 48, src, 56, ++ src4, src5, src6, src7); + src += src_stride; + +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- DUP4_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src6, 128, src7, 128, src4, +- src5, src6, src7); +- +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, vec2, vec3); +- DUP4_ARG2(__lsx_vdp2_h_b, vec0, filt0, vec1, filt0, vec2, filt0, vec3, filt0, +- res0, res1, res2, res3); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, res0, vec0, filt2, res1, vec1, filt2, res2, +- vec2, filt2, res3, vec3, filt2, res0, res1, res2, res3); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, vec4, vec5); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, vec6, vec7); +- DUP4_ARG3(__lsx_vdp2add_h_b, res0, vec4, filt1, res1, vec5, filt1, res2, +- vec6, filt1, res3, vec7, filt1, res0, res1, res2, res3); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, vec4, vec5); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, vec6, vec7); +- DUP4_ARG3(__lsx_vdp2add_h_b, res0, vec4, filt3, res1, vec5, filt3, res2, +- vec6, filt3, res3, vec7, filt3, res0, res1, res2, res3); +- +- out = __lsx_vssrarni_b_h(res1, res0, 6); +- out = __lsx_vxori_b(out, 128); +- __lsx_vst(out, dst, 0); +- out = __lsx_vssrarni_b_h(res3, res2, 6); +- out = __lsx_vxori_b(out, 128); +- __lsx_vst(out, dst, 16); +- +- DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src5, src5, mask0, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src7, src7, mask0, vec2, vec3); +- DUP4_ARG2(__lsx_vdp2_h_b, vec0, filt0, vec1, filt0, vec2, filt0, vec3, +- filt0, res0, res1, res2, res3); +- DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask2, src5, src5, mask2, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask2, src7, src7, mask2, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, res0, vec0, filt2, res1, vec1, filt2, res2, +- vec2, filt2, res3, vec3, filt2, res0, res1, res2, res3); +- DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask1, src5, src5, mask1, vec4, vec5); +- DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask1, src7, src7, mask1, vec6, vec7); +- DUP4_ARG3(__lsx_vdp2add_h_b, res0, vec4, filt1, res1, vec5, filt1, res2, +- vec6, filt1, res3, vec7, filt1, res0, res1, res2, res3); +- DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask3, src5, src5, mask3, vec4, vec5); +- DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask3, src7, src7, mask3, vec6, vec7); +- DUP4_ARG3(__lsx_vdp2add_h_b, res0, vec4, filt3, res1, vec5, filt3, res2, +- vec6, filt3, res3, vec7, filt3, res0, res1, res2, res3); +- +- DUP4_ARG2(__lsx_vsrari_h, res0, 6, res1, 6, res2, 6, res3, 6, res0, res1, +- res2, res3); +- DUP4_ARG2(__lsx_vsat_h, res0, 7, res1, 7, res2, 7, res3, 7, res0, res1, +- res2, res3); +- out = __lsx_vpickev_b(res1, res0); +- out = __lsx_vxori_b(out, 128); +- __lsx_vst(out, dst, 32); +- out = __lsx_vpickev_b(res3, res2); +- out = __lsx_vxori_b(out, 128); +- __lsx_vst(out, dst, 48); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, ++ vec2, vec3); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec1, filt0, vec2, filt0, ++ vec3, filt0, res0, res1, res2, res3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, ++ vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, res0, vec0, filt2, res1, vec1, filt2, ++ res2, vec2, filt2, res3, vec3, filt2, res0, res1, res2, res3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, ++ vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, ++ vec6, vec7); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, res0, vec4, filt1, res1, vec5, filt1, ++ res2, vec6, filt1, res3, vec7, filt1, res0, res1, res2, res3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, ++ vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, ++ vec6, vec7); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, res0, vec4, filt3, res1, vec5, filt3, ++ res2, vec6, filt3, res3, vec7, filt3, res0, res1, res2, res3); ++ ++ DUP2_ARG3(__lsx_vssrarni_bu_h, res1, res0, 6, res3, res2, 6, ++ out1, out2); ++ __lsx_vst(out1, dst, 0); ++ __lsx_vst(out2, dst, 16); ++ ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src5, src5, mask0, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src7, src7, mask0, ++ vec2, vec3); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec1, filt0, vec2, filt0, ++ vec3, filt0, res0, res1, res2, res3); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask2, src5, src5, mask2, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask2, src7, src7, mask2, ++ vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, res0, vec0, filt2, res1, vec1, filt2, ++ res2, vec2, filt2, res3, vec3, filt2, res0, res1, res2, res3); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask1, src5, src5, mask1, ++ vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask1, src7, src7, mask1, ++ vec6, vec7); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, res0, vec4, filt1, res1, vec5, filt1, ++ res2, vec6, filt1, res3, vec7, filt1, res0, res1, res2, res3); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask3, src5, src5, mask3, ++ vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask3, src7, src7, mask3, ++ vec6, vec7); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, res0, vec4, filt3, res1, vec5, filt3, ++ res2, vec6, filt3, res3, vec7, filt3, res0, res1, res2, res3); ++ ++ DUP2_ARG3(__lsx_vssrarni_bu_h, res1, res0, 6, res3, res2, 6, ++ out1, out2); ++ __lsx_vst(out1, dst, 32); ++ __lsx_vst(out2, dst, 48); + dst += dst_stride; + } + } +@@ -125,12 +130,12 @@ void common_vt_8t_8w_lsx(uint8_t *src, int32_t src_stride, + const int8_t *filter, int32_t height) + { + uint32_t loop_cnt; +- const int32_t src_stride_2x = (src_stride << 1); +- const int32_t dst_stride_2x = (dst_stride << 1); +- const int32_t src_stride_4x = (src_stride << 2); +- const int32_t dst_stride_4x = (dst_stride << 2); +- const int32_t src_stride_3x = src_stride_2x + src_stride; +- const int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride; + + __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; + __m128i src10_r, src32_r, src54_r, src76_r, src98_r, src21_r, src43_r; +@@ -139,48 +144,42 @@ void common_vt_8t_8w_lsx(uint8_t *src, int32_t src_stride, + __m128i out0_r, out1_r, out2_r, out3_r; + + src -= src_stride_3x; +- DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filt0, filt1, filt2, filt3); + +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src1, src2); ++ src3 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); +- src6 = __lsx_vld(src + src_stride_2x, 0); +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, +- src2, src3); +- DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); +- src6 = __lsx_vxori_b(src6, 128); ++ src4 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src5, src6); + src += src_stride_3x; +- DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, src10_r, +- src32_r, src54_r, src21_r); ++ DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ src10_r, src32_r, src54_r, src21_r); + DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src7, src8, src9, src10); +- DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, +- src8, src9, src10); ++ src7 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src8, src9); ++ src10 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; + +- DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src76_r, src87_r, src98_r, src109_r); +- DUP4_ARG2(__lsx_vdp2_h_b, src10_r, filt0, src21_r, filt0, src32_r, filt0, +- src43_r, filt0, out0_r, out1_r, out2_r, out3_r); +- DUP4_ARG3(__lsx_vdp2add_h_b, out0_r, src32_r, filt1, out1_r, src43_r, filt1, +- out2_r, src54_r, filt1, out3_r, src65_r, filt1, out0_r, out1_r, +- out2_r, out3_r); +- DUP4_ARG3(__lsx_vdp2add_h_b, out0_r, src54_r, filt2, out1_r, src65_r, filt2, +- out2_r, src76_r, filt2, out3_r, src87_r, filt2, out0_r, out1_r, +- out2_r, out3_r); +- DUP4_ARG3(__lsx_vdp2add_h_b, out0_r, src76_r, filt3, out1_r, src87_r, filt3, +- out2_r, src98_r, filt3, out3_r, src109_r, filt3, out0_r, out1_r, +- out2_r, out3_r); +- +- tmp0 = __lsx_vssrarni_b_h(out1_r, out0_r, 6); +- tmp0 = __lsx_vxori_b(tmp0, 128); +- tmp1 = __lsx_vssrarni_b_h(out3_r, out2_r, 6); +- tmp1 = __lsx_vxori_b(tmp1, 128); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, ++ src9, src76_r, src87_r, src98_r, src109_r); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, src10_r, filt0, src21_r, filt0, src32_r, ++ filt0, src43_r, filt0, out0_r, out1_r, out2_r, out3_r); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, out0_r, src32_r, filt1, out1_r, ++ src43_r, filt1, out2_r, src54_r, filt1, out3_r, src65_r, ++ filt1, out0_r, out1_r, out2_r, out3_r); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, out0_r, src54_r, filt2, out1_r, ++ src65_r, filt2, out2_r, src76_r, filt2, out3_r, src87_r, ++ filt2, out0_r, out1_r, out2_r, out3_r); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, out0_r, src76_r, filt3, out1_r, ++ src87_r, filt3, out2_r, src98_r, filt3, out3_r, src109_r, ++ filt3, out0_r, out1_r, out2_r, out3_r); ++ ++ DUP2_ARG3(__lsx_vssrarni_bu_h, out1_r, out0_r, 6, out3_r, out2_r, 6, ++ tmp0, tmp1) + __lsx_vstelm_d(tmp0, dst, 0, 0); + __lsx_vstelm_d(tmp0, dst + dst_stride, 0, 1); + __lsx_vstelm_d(tmp1, dst + dst_stride_2x, 0, 0); +@@ -198,10 +197,9 @@ void common_vt_8t_8w_lsx(uint8_t *src, int32_t src_stride, + } + + static av_always_inline +-void common_vt_8t_16w_mult_lsx(uint8_t *src, int32_t src_stride, +- uint8_t *dst, int32_t dst_stride, +- const int8_t *filter, int32_t height, +- int32_t width) ++void common_vt_8t_16w_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter, ++ int32_t height, int32_t width) + { + uint8_t *src_tmp; + uint8_t *dst_tmp; +@@ -229,16 +227,14 @@ void common_vt_8t_16w_mult_lsx(uint8_t *src, int32_t src_stride, + src_tmp = src; + dst_tmp = dst; + +- DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, +- src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, src0, +- src1, src2, src3); ++ src0 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride_2x, ++ src1, src2); ++ src3 = __lsx_vldx(src_tmp, src_stride_3x); + src_tmp += src_stride_4x; +- DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); +- src6 = __lsx_vld(src_tmp + src_stride_2x, 0); +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); +- src6 = __lsx_vxori_b(src6, 128); ++ src4 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride_2x, ++ src5, src6); + src_tmp += src_stride_3x; + DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, + src10_r, src32_r, src54_r, src21_r); +@@ -248,35 +244,39 @@ void common_vt_8t_16w_mult_lsx(uint8_t *src, int32_t src_stride, + DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, src43_l, src65_l); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, +- src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, src7, +- src8, src9, src10); +- DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, +- src7, src8, src9, src10); ++ src7 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride_2x, ++ src8, src9); ++ src10 = __lsx_vldx(src_tmp, src_stride_3x); + src_tmp += src_stride_4x; + DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, + src9, src76_r, src87_r, src98_r, src109_r); + DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, + src9, src76_l, src87_l, src98_l, src109_l); +- out0_r = __lsx_hevc_filt_8tap_h(src10_r, src32_r, src54_r, src76_r, +- filt0, filt1, filt2, filt3); +- out1_r = __lsx_hevc_filt_8tap_h(src21_r, src43_r, src65_r, src87_r, +- filt0, filt1, filt2, filt3); +- out2_r = __lsx_hevc_filt_8tap_h(src32_r, src54_r, src76_r, src98_r, +- filt0, filt1, filt2, filt3); +- out3_r = __lsx_hevc_filt_8tap_h(src43_r, src65_r, src87_r, src109_r, +- filt0, filt1, filt2, filt3); +- out0_l = __lsx_hevc_filt_8tap_h(src10_l, src32_l, src54_l, src76_l, +- filt0, filt1, filt2, filt3); +- out1_l = __lsx_hevc_filt_8tap_h(src21_l, src43_l, src65_l, src87_l, +- filt0, filt1, filt2, filt3); +- out2_l = __lsx_hevc_filt_8tap_h(src32_l, src54_l, src76_l, src98_l, +- filt0, filt1, filt2, filt3); +- out3_l = __lsx_hevc_filt_8tap_h(src43_l, src65_l, src87_l, src109_l, +- filt0, filt1, filt2, filt3); +- DUP4_ARG3(__lsx_vssrarni_b_h, out0_l, out0_r, 6, out1_l, out1_r, 6, +- out2_l, out2_r, 6, out3_l, out3_r, 6, tmp0, tmp1, tmp2, tmp3); +- DUP4_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp2, 128, tmp3, 128, ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, src10_r, filt0, src21_r, filt0, src32_r, ++ filt0, src43_r, filt0, out0_r, out1_r, out2_r, out3_r); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, out0_r, src32_r, filt1, out1_r, ++ src43_r, filt1, out2_r, src54_r, filt1, out3_r, src65_r, ++ filt1, out0_r, out1_r, out2_r, out3_r); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, out0_r, src54_r, filt2, out1_r, ++ src65_r, filt2, out2_r, src76_r, filt2, out3_r, src87_r, ++ filt2, out0_r, out1_r, out2_r, out3_r); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, out0_r, src76_r, filt3, out1_r, ++ src87_r, filt3, out2_r, src98_r, filt3, out3_r, src109_r, ++ filt3, out0_r, out1_r, out2_r, out3_r); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, src10_l, filt0, src21_l, filt0, src32_l, ++ filt0, src43_l, filt0, out0_l, out1_l, out2_l, out3_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, out0_l, src32_l, filt1, out1_l, ++ src43_l, filt1, out2_l, src54_l, filt1, out3_l, src65_l, ++ filt1, out0_l, out1_l, out2_l, out3_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, out0_l, src54_l, filt2, out1_l, ++ src65_l, filt2, out2_l, src76_l, filt2, out3_l, src87_l, ++ filt2, out0_l, out1_l, out2_l, out3_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, out0_l, src76_l, filt3, out1_l, ++ src87_l, filt3, out2_l, src98_l, filt3, out3_l, src109_l, ++ filt3, out0_l, out1_l, out2_l, out3_l); ++ DUP4_ARG3(__lsx_vssrarni_bu_h, out0_l, out0_r, 6, out1_l, out1_r, ++ 6, out2_l, out2_r, 6, out3_l, out3_r, 6, + tmp0, tmp1, tmp2, tmp3); + __lsx_vst(tmp0, dst_tmp, 0); + __lsx_vstx(tmp1, dst_tmp, dst_stride); +@@ -308,8 +308,7 @@ static void common_vt_8t_24w_lsx(uint8_t *src, int32_t src_stride, + uint8_t *dst, int32_t dst_stride, + const int8_t *filter, int32_t height) + { +- common_vt_8t_16w_mult_lsx(src, src_stride, dst, dst_stride, filter, height, +- 16); ++ common_vt_8t_16w_lsx(src, src_stride, dst, dst_stride, filter, height, 16); + common_vt_8t_8w_lsx(src + 16, src_stride, dst + 16, dst_stride, filter, + height); + } +@@ -318,34 +317,27 @@ static void common_vt_8t_32w_lsx(uint8_t *src, int32_t src_stride, + uint8_t *dst, int32_t dst_stride, + const int8_t *filter, int32_t height) + { +- common_vt_8t_16w_mult_lsx(src, src_stride, dst, dst_stride, filter, height, +- 32); ++ common_vt_8t_16w_lsx(src, src_stride, dst, dst_stride, filter, height, 32); + } + + static void common_vt_8t_48w_lsx(uint8_t *src, int32_t src_stride, + uint8_t *dst, int32_t dst_stride, + const int8_t *filter, int32_t height) + { +- common_vt_8t_16w_mult_lsx(src, src_stride, dst, dst_stride, filter, height, +- 48); ++ common_vt_8t_16w_lsx(src, src_stride, dst, dst_stride, filter, height, 48); + } + + static void common_vt_8t_64w_lsx(uint8_t *src, int32_t src_stride, + uint8_t *dst, int32_t dst_stride, + const int8_t *filter, int32_t height) + { +- common_vt_8t_16w_mult_lsx(src, src_stride, dst, dst_stride, filter, height, +- 64); ++ common_vt_8t_16w_lsx(src, src_stride, dst, dst_stride, filter, height, 64); + } + + static av_always_inline +-void hevc_hv_uni_8t_8multx2mult_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height, int32_t width) ++void hevc_hv_8t_8x2_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y, int32_t height, int32_t width) + { + uint32_t loop_cnt, cnt; + uint8_t *src_tmp; +@@ -372,8 +364,8 @@ void hevc_hv_uni_8t_8multx2mult_lsx(uint8_t *src, + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + + src -= (src_stride_3x + 3); +- DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, filter_x, 6, +- filt0, filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, ++ filter_x, 6, filt0, filt1, filt2, filt3); + + filter_vec = __lsx_vld(filter_y, 0); + filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); +@@ -387,170 +379,169 @@ void hevc_hv_uni_8t_8multx2mult_lsx(uint8_t *src, + src_tmp = src; + dst_tmp = dst; + +- DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, +- src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, src0, +- src1, src2, src3); ++ src0 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride_2x, ++ src1, src2); ++ src3 = __lsx_vldx(src_tmp, src_stride_3x); + src_tmp += src_stride_4x; +- DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); +- src6 = __lsx_vld(src_tmp + src_stride_2x, 0); ++ src4 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride_2x, ++ src5, src6); + src_tmp += src_stride_3x; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); +- src6 = __lsx_vxori_b(src6, 128); + + /* row 0 row 1 row 2 row 3 */ +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, +- mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, +- mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); +- DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, +- mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); +- DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, +- mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); +- dst0 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3); +- dst1 = __lsx_hevc_filt_8tap_h(vec4, vec5, vec6, vec7, filt0, filt1, filt2, filt3); +- dst2 = __lsx_hevc_filt_8tap_h(vec8, vec9, vec10, vec11, filt0, filt1, filt2, filt3); +- dst3 = __lsx_hevc_filt_8tap_h(vec12, vec13, vec14, vec15, filt0, filt1, filt2, filt3); +- +- DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, +- mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, src5, +- mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); +- DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, src6, +- mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); +- dst4 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3); +- dst5 = __lsx_hevc_filt_8tap_h(vec4, vec5, vec6, vec7, filt0, filt1, filt2, filt3); +- dst6 = __lsx_hevc_filt_8tap_h(vec8, vec9, vec10, vec11, filt0, filt1, filt2, filt3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, ++ src0, mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, ++ src1, mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, ++ src2, mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); ++ DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, ++ src3, mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec4, filt0, vec8, filt0, ++ vec12, filt0, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst1, vec5, filt1, ++ dst2, vec9, filt1, dst3, vec13, filt1, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec2, filt2, dst1, vec6, filt2, ++ dst2, vec10, filt2, dst3, vec14, filt2, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec3, filt3, dst1, vec7, filt3, ++ dst2, vec11, filt3, dst3, vec15, filt3, dst0, dst1, dst2, dst3); ++ ++ DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, ++ src4, mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, ++ src5, mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, ++ src6, mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec4, filt0, dst4, dst5); ++ dst6 = __lsx_vdp2_h_bu_b(vec8, filt0); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst4, vec1, filt1, dst5, vec5, filt1, ++ dst6, vec9, filt1, dst4, vec2, filt2, dst4, dst5, dst6, dst4); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst5, vec6, filt2, dst6, vec10, filt2, ++ dst4, vec3, filt3, dst5, vec7, filt3, dst5, dst6, dst4, dst5); ++ dst6 = __lsx_vdp2add_h_bu_b(dst6, vec11, filt3); ++ DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst2, ++ dst1, dst10_r, dst32_r, dst54_r, dst21_r); ++ DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst2, ++ dst1, dst10_l, dst32_l, dst54_l, dst21_l); ++ DUP2_ARG2(__lsx_vilvl_h, dst4, dst3, dst6, dst5, dst43_r, dst65_r); ++ DUP2_ARG2(__lsx_vilvh_h, dst4, dst3, dst6, dst5, dst43_l, dst65_l); + + for (loop_cnt = height >> 1; loop_cnt--;) { +- DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src7, src8); +- DUP2_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src7, src8); ++ src7 = __lsx_vld(src_tmp, 0); ++ src8 = __lsx_vldx(src_tmp, src_stride); + src_tmp += src_stride_2x; + +- DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst2, dst1, +- dst10_r, dst32_r, dst54_r, dst21_r); +- DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst2, dst1, +- dst10_l, dst32_l, dst54_l, dst21_l); +- DUP2_ARG2(__lsx_vilvl_h, dst4, dst3, dst6, dst5, dst43_r, dst65_r); +- DUP2_ARG2(__lsx_vilvh_h, dst4, dst3, dst6, dst5, dst43_l, dst65_l); +- + DUP4_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, src7, + src7, mask2, src7, src7, mask3, vec0, vec1, vec2, vec3); +- dst7 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3); +- ++ dst7 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst7, vec1, filt1, dst7, vec2, ++ filt2, dst7, dst7); ++ dst7 = __lsx_vdp2add_h_bu_b(dst7, vec3, filt3); + dst76_r = __lsx_vilvl_h(dst7, dst6); + dst76_l = __lsx_vilvh_h(dst7, dst6); +- dst0_r = __lsx_hevc_filt_8tap_w(dst10_r, dst32_r, dst54_r, dst76_r, filt_h0, +- filt_h1, filt_h2, filt_h3); +- dst0_l = __lsx_hevc_filt_8tap_w(dst10_l, dst32_l, dst54_l, dst76_l, filt_h0, +- filt_h1, filt_h2, filt_h3); ++ DUP2_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst10_l, filt_h0, ++ dst0_r, dst0_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst32_r, filt_h1, dst0_l, ++ dst32_l, filt_h1, dst0_r, dst54_r, filt_h2, dst0_l, ++ dst54_l, filt_h2, dst0_r, dst0_l, dst0_r, dst0_l); ++ DUP2_ARG3(__lsx_vdp2add_w_h, dst0_r, dst76_r, filt_h3, dst0_l, ++ dst76_l, filt_h3, dst0_r, dst0_l); + DUP2_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst0_r, dst0_l); + + DUP4_ARG3(__lsx_vshuf_b, src8, src8, mask0, src8, src8, mask1, src8, + src8, mask2, src8, src8, mask3, vec0, vec1, vec2, vec3); +- dst8 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, +- filt2, filt3); ++ dst8 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst8, vec1, filt1, dst8, vec2, ++ filt2, dst8, dst8); ++ dst8 = __lsx_vdp2add_h_bu_b(dst8, vec3, filt3); + + dst87_r = __lsx_vilvl_h(dst8, dst7); + dst87_l = __lsx_vilvh_h(dst8, dst7); +- dst1_r = __lsx_hevc_filt_8tap_w(dst21_r, dst43_r, dst65_r, dst87_r, +- filt_h0, filt_h1, filt_h2, filt_h3); +- dst1_l = __lsx_hevc_filt_8tap_w(dst21_l, dst43_l, dst65_l, dst87_l, +- filt_h0, filt_h1, filt_h2, filt_h3); ++ DUP2_ARG2(__lsx_vdp2_w_h, dst21_r, filt_h0, dst21_l, filt_h0, ++ dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst1_r, dst43_r, filt_h1, dst1_l, ++ dst43_l, filt_h1, dst1_r, dst65_r, filt_h2, dst1_l, ++ dst65_l, filt_h2, dst1_r, dst1_l, dst1_r, dst1_l); ++ DUP2_ARG3(__lsx_vdp2add_w_h, dst1_r, dst87_r, filt_h3, dst1_l, ++ dst87_l, filt_h3, dst1_r, dst1_l); + DUP2_ARG2(__lsx_vsrai_w, dst1_r, 6, dst1_l, 6, dst1_r, dst1_l); +- DUP2_ARG3(__lsx_vssrarni_b_h, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, ++ DUP4_ARG2(__lsx_vsrari_w, dst0_r, 6, dst0_l, 6,dst1_r, 6, dst1_l, ++ 6, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG1(__lsx_vclip255_w, dst0_l, dst0_r, dst1_l, dst1_r, ++ dst0_l, dst0_r, dst1_l, dst1_r); ++ DUP2_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, + dst0, dst1); + out = __lsx_vpickev_b(dst1, dst0); +- out = __lsx_vxori_b(out, 128); + __lsx_vstelm_d(out, dst_tmp, 0, 0); + __lsx_vstelm_d(out, dst_tmp + dst_stride, 0, 1); + dst_tmp += dst_stride_2x; + +- dst0 = dst2; +- dst1 = dst3; +- dst2 = dst4; +- dst3 = dst5; +- dst4 = dst6; +- dst5 = dst7; ++ dst10_r = dst32_r; ++ dst32_r = dst54_r; ++ dst54_r = dst76_r; ++ dst10_l = dst32_l; ++ dst32_l = dst54_l; ++ dst54_l = dst76_l; ++ dst21_r = dst43_r; ++ dst43_r = dst65_r; ++ dst65_r = dst87_r; ++ dst21_l = dst43_l; ++ dst43_l = dst65_l; ++ dst65_l = dst87_l; + dst6 = dst8; + } +- + src += 8; + dst += 8; + } + } + +-static void hevc_hv_uni_8t_8w_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height) ++static void hevc_hv_8t_8w_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y, int32_t height) + { +- hevc_hv_uni_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, +- filter_x, filter_y, height, 8); ++ hevc_hv_8t_8x2_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 8); + } + +-static void hevc_hv_uni_8t_16w_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height) ++static void hevc_hv_8t_16w_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y, int32_t height) + { +- hevc_hv_uni_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, +- filter_x, filter_y, height, 16); ++ hevc_hv_8t_8x2_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 16); + } + +-static void hevc_hv_uni_8t_24w_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height) ++static void hevc_hv_8t_24w_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y, int32_t height) + { +- hevc_hv_uni_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, +- filter_x, filter_y, height, 24); ++ hevc_hv_8t_8x2_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 24); + } + +-static void hevc_hv_uni_8t_32w_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height) ++static void hevc_hv_8t_32w_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y, int32_t height) + { +- hevc_hv_uni_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, +- filter_x, filter_y, height, 32); ++ hevc_hv_8t_8x2_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 32); + } + +-static void hevc_hv_uni_8t_48w_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height) ++static void hevc_hv_8t_48w_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y, int32_t height) + { +- hevc_hv_uni_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, +- filter_x, filter_y, height, 48); ++ hevc_hv_8t_8x2_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 48); + } + +-static void hevc_hv_uni_8t_64w_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height) ++static void hevc_hv_8t_64w_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y, int32_t height) + { +- hevc_hv_uni_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, +- filter_x, filter_y, height, 64); ++ hevc_hv_8t_8x2_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 64); + } + + static av_always_inline +@@ -559,109 +550,102 @@ void common_vt_4t_24w_lsx(uint8_t *src, int32_t src_stride, + const int8_t *filter, int32_t height) + { + uint32_t loop_cnt; +- const int32_t src_stride_2x = (src_stride << 1); +- const int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ uint8_t *_src; + + __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; + __m128i src11, filt0, filt1; + __m128i src10_r, src32_r, src76_r, src98_r, src21_r, src43_r, src87_r; + __m128i src109_r, src10_l, src32_l, src21_l, src43_l; +- __m128i out, out0_r, out1_r, out2_r, out3_r, out0_l, out1_l; ++ __m128i out0_r, out1_r, out2_r, out3_r, out0_l, out1_l; ++ __m128i out1, out2, out3, out4; + + src -= src_stride; + DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ _src = src + 16; + + /* 16 width */ +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); +- src2 = __lsx_vld(src + src_stride_2x, 0); +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- src2 = __lsx_vxori_b(src2, 128); ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src1, src2); + DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); + DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); + + /* 8 width */ +- DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src6, src7); +- src8 = __lsx_vld(src + src_stride_2x, 16); ++ src6 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride_2x, src7, src8); + src += src_stride_3x; +- DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); +- src8 = __lsx_vxori_b(src8, 128); ++ _src += src_stride_3x; + DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); + + for (loop_cnt = 8; loop_cnt--;) { + /* 16 width */ +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src3, src4); +- DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); ++ DUP2_ARG2(__lsx_vld, src, 0, _src, 0, src3, src9); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, _src, src_stride, src4, src10); + DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); + DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); + + /* 8 width */ +- DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src9, src10); + src += src_stride_2x; +- DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); ++ _src += src_stride_2x; + DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); + + /* 16 width */ +- out0_r = __lsx_hevc_filt_4tap_h(src10_r, src32_r, filt0, filt1); +- out0_l = __lsx_hevc_filt_4tap_h(src10_l, src32_l, filt0, filt1); +- out1_r = __lsx_hevc_filt_4tap_h(src21_r, src43_r, filt0, filt1); +- out1_l = __lsx_hevc_filt_4tap_h(src21_l, src43_l, filt0, filt1); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, src10_r, filt0, src10_l, filt0, src21_r, ++ filt0, src21_l, filt0, out0_r, out0_l, out1_r, out1_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, out0_r, src32_r, filt1, out0_l, src32_l, ++ filt1, out1_r, src43_r, filt1, out1_l, src43_l, filt1, ++ out0_r, out0_l, out1_r, out1_l); + + /* 8 width */ +- out2_r = __lsx_hevc_filt_4tap_h(src76_r, src98_r, filt0, filt1); +- out3_r = __lsx_hevc_filt_4tap_h(src87_r, src109_r, filt0, filt1); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, src76_r, filt0, src87_r, filt0, ++ out2_r, out3_r); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, out2_r, src98_r, filt1, out3_r, ++ src109_r, filt1, out2_r, out3_r); + + /* 16 + 8 width */ +- out = __lsx_vssrarni_b_h(out0_l, out0_r, 6); +- out = __lsx_vxori_b(out, 128); +- __lsx_vst(out, dst, 0); +- DUP2_ARG3(__lsx_vssrarni_b_h, out2_r, out2_r, 6, out3_r, out3_r, 6, +- out2_r, out3_r); +- DUP2_ARG2(__lsx_vxori_b, out2_r, 128, out3_r, 128, out2_r, out3_r); +- __lsx_vstelm_d(out2_r, dst, 16, 0); ++ DUP4_ARG3(__lsx_vssrarni_bu_h, out0_l, out0_r, 6, out2_r, out2_r, 6, ++ out3_r, out3_r, 6, out1_l, out1_r, 6, out1, out2, out3, out4); ++ __lsx_vst(out1, dst, 0); ++ __lsx_vstelm_d(out2, dst, 16, 0); + dst += dst_stride; +- out = __lsx_vssrarni_b_h(out1_l, out1_r, 6); +- out = __lsx_vxori_b(out, 128); +- __lsx_vst(out, dst, 0); +- __lsx_vstelm_d(out3_r, dst, 16, 0); ++ __lsx_vst(out4, dst, 0); ++ __lsx_vstelm_d(out3, dst, 16, 0); + dst += dst_stride; + + /* 16 width */ +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src5, src2); +- DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); ++ DUP2_ARG2(__lsx_vld, src, 0, _src, 0, src5, src11); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, _src, src_stride, src2, src8); + DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); + DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); + + /* 8 width */ +- DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src11, src8); + src += src_stride_2x; +- DUP2_ARG2(__lsx_vxori_b, src11, 128, src8, 128, src11, src8); ++ _src += src_stride_2x; + DUP2_ARG2(__lsx_vilvl_b, src11, src10, src8, src11, src76_r, src87_r); + + /* 16 width */ +- out0_r = __lsx_hevc_filt_4tap_h(src32_r, src10_r, filt0, filt1); +- out0_l = __lsx_hevc_filt_4tap_h(src32_l, src10_l, filt0, filt1); +- out1_r = __lsx_hevc_filt_4tap_h(src43_r, src21_r, filt0, filt1); +- out1_l = __lsx_hevc_filt_4tap_h(src43_l, src21_l, filt0, filt1); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, src32_r, filt0, src32_l, filt0, src43_r, ++ filt0, src43_l, filt0, out0_r, out0_l, out1_r, out1_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, out0_r, src10_r, filt1, out0_l, src10_l, ++ filt1, out1_r, src21_r, filt1, out1_l, src21_l, filt1, ++ out0_r, out0_l, out1_r, out1_l); + + /* 8 width */ +- out2_r = __lsx_hevc_filt_4tap_h(src98_r, src76_r, filt0, filt1); +- out3_r = __lsx_hevc_filt_4tap_h(src109_r, src87_r, filt0, filt1); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, src98_r, filt0, src109_r, filt0, ++ out2_r, out3_r); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, out2_r, src76_r, filt1, out3_r, ++ src87_r, filt1, out2_r, out3_r); + + /* 16 + 8 width */ +- out = __lsx_vssrarni_b_h(out0_l, out0_r, 6); +- out = __lsx_vxori_b(out, 128); +- __lsx_vst(out, dst, 0); +- out = __lsx_vssrarni_b_h(out2_r, out2_r, 6); +- out = __lsx_vxori_b(out, 128); +- __lsx_vstelm_d(out, dst, 16, 0); +- dst += dst_stride; ++ DUP4_ARG3(__lsx_vssrarni_bu_h, out0_l, out0_r, 6, out2_r, out2_r, 6, ++ out1_l, out1_r, 6, out3_r, out3_r, 6, out1, out2, out3, out4); + +- out = __lsx_vssrarni_b_h(out1_l, out1_r, 6); +- out = __lsx_vxori_b(out, 128); +- __lsx_vst(out, dst, 0); +- out = __lsx_vssrarni_b_h(out3_r, out3_r, 6); +- out = __lsx_vxori_b(out, 128); +- __lsx_vstelm_d(out, dst, 16, 0); ++ __lsx_vst(out1, dst, 0); ++ __lsx_vstelm_d(out2, dst, 16, 0); ++ dst += dst_stride; ++ __lsx_vst(out3, dst, 0); ++ __lsx_vstelm_d(out4, dst, 16, 0); + dst += dst_stride; + } + } +@@ -672,9 +656,10 @@ void common_vt_4t_32w_lsx(uint8_t *src, int32_t src_stride, + const int8_t *filter, int32_t height) + { + uint32_t loop_cnt; +- const int32_t src_stride_2x = (src_stride << 1); +- const int32_t dst_stride_2x = (dst_stride << 1); +- const int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t src_stride_2x = (src_stride << 1); ++ int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ uint8_t *_src; + + __m128i src0, src1, src2, src3, src4, src6, src7, src8, src9, src10; + __m128i src10_r, src32_r, src76_r, src98_r; +@@ -683,50 +668,46 @@ void common_vt_4t_32w_lsx(uint8_t *src, int32_t src_stride, + __m128i src10_l, src32_l, src76_l, src98_l; + __m128i src21_l, src43_l, src87_l, src109_l; + __m128i filt0, filt1; +- __m128i out; ++ __m128i out1, out2; + + src -= src_stride; + DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); ++ _src = src + 16; + + /* 16 width */ +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); +- src2 = __lsx_vld(src + src_stride_2x, 0); +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- src2 = __lsx_vxori_b(src2, 128); ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src1, src2); + + DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); + DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); + + /* next 16 width */ +- DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src6, src7); +- src8 = __lsx_vld(src + src_stride_2x, 16); ++ src6 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride_2x, src7, src8); + src += src_stride_3x; ++ _src += src_stride_3x; + +- DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); +- src8 = __lsx_vxori_b(src8, 128); + DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); + DUP2_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src76_l, src87_l); + + for (loop_cnt = (height >> 1); loop_cnt--;) { + /* 16 width */ +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src3, src4); +- DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); ++ DUP2_ARG2(__lsx_vld, src, 0, _src, 0, src3, src9); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, _src, src_stride, src4, src10); + DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); + DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); + + /* 16 width */ +- out0_r = __lsx_hevc_filt_4tap_h(src10_r, src32_r, filt0, filt1); +- out0_l = __lsx_hevc_filt_4tap_h(src10_l, src32_l, filt0, filt1); +- out1_r = __lsx_hevc_filt_4tap_h(src21_r, src43_r, filt0, filt1); +- out1_l = __lsx_hevc_filt_4tap_h(src21_l, src43_l, filt0, filt1); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, src10_r, filt0, src10_l, filt0, src21_r, ++ filt0, src21_l, filt0, out0_r, out0_l, out1_r, out1_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, out0_r, src32_r, filt1, out0_l, src32_l, ++ filt1, out1_r, src43_r, filt1, out1_l, src43_l, filt1, ++ out0_r, out0_l, out1_r, out1_l); + +- /* 16 width */ +- out = __lsx_vssrarni_b_h(out0_l, out0_r, 6); +- out = __lsx_vxori_b(out, 128); +- __lsx_vst(out, dst, 0); +- out = __lsx_vssrarni_b_h(out1_l, out1_r, 6); +- out = __lsx_vxori_b(out, 128); +- __lsx_vstx(out, dst, dst_stride); ++ DUP2_ARG3(__lsx_vssrarni_bu_h, out0_l, out0_r, 6, out1_l, out1_r, 6, ++ out1, out2); ++ __lsx_vst(out1, dst, 0); ++ __lsx_vstx(out2, dst, dst_stride); + + src10_r = src32_r; + src21_r = src43_r; +@@ -735,25 +716,23 @@ void common_vt_4t_32w_lsx(uint8_t *src, int32_t src_stride, + src2 = src4; + + /* next 16 width */ +- DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src9, src10); + src += src_stride_2x; +- DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); ++ _src += src_stride_2x; + DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); + DUP2_ARG2(__lsx_vilvh_b, src9, src8, src10, src9, src98_l, src109_l); + + /* next 16 width */ +- out2_r = __lsx_hevc_filt_4tap_h(src76_r, src98_r, filt0, filt1); +- out2_l = __lsx_hevc_filt_4tap_h(src76_l, src98_l, filt0, filt1); +- out3_r = __lsx_hevc_filt_4tap_h(src87_r, src109_r, filt0, filt1); +- out3_l = __lsx_hevc_filt_4tap_h(src87_l, src109_l, filt0, filt1); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, src76_r, filt0, src76_l, filt0, src87_r, ++ filt0, src87_l, filt0, out2_r, out2_l, out3_r, out3_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, out2_r, src98_r, filt1, out2_l, src98_l, ++ filt1, out3_r, src109_r, filt1, out3_l, src109_l, filt1, ++ out2_r, out2_l, out3_r, out3_l); + + /* next 16 width */ +- out = __lsx_vssrarni_b_h(out2_l, out2_r, 6); +- out = __lsx_vxori_b(out, 128); +- __lsx_vst(out, dst, 16); +- out = __lsx_vssrarni_b_h(out3_l, out3_r, 6); +- out = __lsx_vxori_b(out, 128); +- __lsx_vst(out, dst + dst_stride, 16); ++ DUP2_ARG3(__lsx_vssrarni_bu_h, out2_l, out2_r, 6, out3_l, out3_r, 6, ++ out1, out2); ++ __lsx_vst(out1, dst, 16); ++ __lsx_vst(out2, dst + dst_stride, 16); + + dst += dst_stride_2x; + +@@ -766,12 +745,9 @@ void common_vt_4t_32w_lsx(uint8_t *src, int32_t src_stride, + } + + static av_always_inline +-void hevc_hv_uni_4t_8x2_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y) ++void hevc_hv_4t_8x2_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y) + { + const int32_t src_stride_2x = (src_stride << 1); + const int32_t src_stride_4x = (src_stride << 2); +@@ -797,12 +773,9 @@ void hevc_hv_uni_4t_8x2_lsx(uint8_t *src, + DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); + + mask1 = __lsx_vaddi_bu(mask0, 2); +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); +- src4 = __lsx_vld(src + src_stride_4x, 0); +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- src4 = __lsx_vxori_b(src4, 128); ++ src0 = __lsx_vld(src, 0); ++ DUP4_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src, ++ src_stride_3x, src, src_stride_4x, src1, src2, src3, src4); + + DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src1, src1, + mask0, src1, src1, mask1, vec0, vec1, vec2, vec3); +@@ -810,34 +783,32 @@ void hevc_hv_uni_4t_8x2_lsx(uint8_t *src, + mask0, src3, src3, mask1, vec4, vec5, vec6, vec7); + DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec8, vec9); + +- dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); +- dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +- dst2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); +- dst3 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); +- dst4 = __lsx_hevc_filt_4tap_h(vec8, vec9, filt0, filt1); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, vec4, filt0, vec6, ++ filt0, dst0, dst1, dst2, dst3); ++ dst4 = __lsx_vdp2_h_bu_b(vec8, filt0); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst1, vec3, filt1, dst2, ++ vec5, filt1, dst3, vec7, filt1, dst0, dst1, dst2, dst3); ++ dst4 = __lsx_vdp2add_h_bu_b(dst4, vec9, filt1); + DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, + dst10_r, dst21_r, dst32_r, dst43_r); + DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, + dst10_l, dst21_l, dst32_l, dst43_l); +- dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); +- dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +- dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); +- dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); +- DUP2_ARG3(__lsx_vsrani_h_w, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, out0_r, out1_r); +- out = __lsx_vssrarni_b_h(out1_r, out0_r, 6); +- out = __lsx_vxori_b(out, 128); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst10_l, filt_h0, dst21_r, ++ filt_h0, dst21_l, filt_h0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst32_r, filt_h1, dst0_l, dst32_l, ++ filt_h1, dst1_r, dst43_r, filt_h1, dst1_l, dst43_l, filt_h1, ++ dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP2_ARG3(__lsx_vsrani_h_w, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, ++ out0_r, out1_r); ++ out = __lsx_vssrarni_bu_h(out1_r, out0_r, 6); + __lsx_vstelm_d(out, dst, 0, 0); + __lsx_vstelm_d(out, dst + dst_stride, 0, 1); + } + + static av_always_inline +-void hevc_hv_uni_4t_8multx4_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t width8mult) ++void hevc_hv_4t_8multx4_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y, int32_t width8mult) + { + uint32_t cnt; + const int32_t src_stride_2x = (src_stride << 1); +@@ -866,55 +837,62 @@ void hevc_hv_uni_4t_8multx4_lsx(uint8_t *src, + mask1 = __lsx_vaddi_bu(mask0, 2); + + for (cnt = width8mult; cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src1, src2); ++ src3 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); +- src6 = __lsx_vld(src + src_stride_2x, 0); ++ src4 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src5, src6); + src += (8 - src_stride_4x); +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); +- src6 = __lsx_vxori_b(src6, 128); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); +- +- dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); +- dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +- dst2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, ++ vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, ++ vec4, vec5); ++ ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, dst0, dst1); ++ dst2 = __lsx_vdp2_h_bu_b(vec4, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst1, vec3, filt1, ++ dst0, dst1); ++ dst2 = __lsx_vdp2add_h_bu_b(dst2, vec5, filt1); + + DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); + DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); + +- DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); +- DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); +- DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); +- +- dst3 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); +- dst4 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +- dst5 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); +- dst6 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); +- +- DUP4_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst5, dst4, dst6, dst5, +- dst32_r, dst43_r, dst54_r, dst65_r); +- DUP4_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst5, dst4, dst6, dst5, +- dst32_l, dst43_l, dst54_l, dst65_l); +- +- dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); +- dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +- dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); +- dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); +- dst2_r = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); +- dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); +- dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); +- dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); +- +- DUP4_ARG3(__lsx_vsrani_h_w, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, dst2_l, +- dst2_r, 6, dst3_l, dst3_r, 6, tmp0, tmp1, tmp2, tmp3); +- DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 6, tmp3, tmp2, 6, out0, out1); +- DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, ++ vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, ++ vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, ++ vec6, vec7); ++ ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, vec4, filt0, ++ vec6, filt0, dst3, dst4, dst5, dst6); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst3, vec1, filt1, dst4, vec3, filt1, ++ dst5, vec5, filt1, dst6, vec7, filt1, dst3, dst4, dst5, dst6); ++ ++ DUP4_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst5, dst4, dst6, ++ dst5, dst32_r, dst43_r, dst54_r, dst65_r); ++ DUP4_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst5, dst4, dst6, ++ dst5, dst32_l, dst43_l, dst54_l, dst65_l); ++ ++ DUP4_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst10_l, filt_h0, dst21_r, ++ filt_h0, dst21_l, filt_h0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst32_r, filt_h0, dst32_l, filt_h0, dst43_r, ++ filt_h0, dst43_l, filt_h0, dst2_r, dst2_l, dst3_r, dst3_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst32_r, filt_h1, dst0_l, dst32_l, ++ filt_h1, dst1_r, dst43_r, filt_h1, dst1_l, dst43_l, filt_h1, ++ dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst2_r, dst54_r, filt_h1, dst2_l, dst54_l, ++ filt_h1, dst3_r, dst65_r, filt_h1, dst3_l, dst65_l, filt_h1, ++ dst2_r, dst2_l, dst3_r, dst3_l); ++ ++ DUP4_ARG3(__lsx_vsrani_h_w, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, ++ dst2_l, dst2_r, 6, dst3_l, dst3_r, 6, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG3(__lsx_vssrarni_bu_h, tmp1, tmp0, 6, tmp3, tmp2, 6, out0, out1); + __lsx_vstelm_d(out0, dst, 0, 0); + __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); + __lsx_vstelm_d(out1, dst + dst_stride_2x, 0, 0); +@@ -924,12 +902,9 @@ void hevc_hv_uni_4t_8multx4_lsx(uint8_t *src, + } + + static av_always_inline +-void hevc_hv_uni_4t_8x6_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y) ++void hevc_hv_4t_8x6_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y) + { + const int32_t src_stride_2x = (src_stride << 1); + const int32_t dst_stride_2x = (dst_stride << 1); +@@ -962,17 +937,13 @@ void hevc_hv_uni_4t_8x6_lsx(uint8_t *src, + DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); + + mask1 = __lsx_vaddi_bu(mask0, 2); +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); +- src4 = __lsx_vld(src + src_stride_4x, 0); +- src += (src_stride_4x + src_stride); +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src5, src6, src7, src8); +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, +- src2, src3) +- src4 = __lsx_vxori_b(src4, 128); +- DUP4_ARG2(__lsx_vxori_b, src5, 128, src6, 128, src7, 128, src8, 128, src5, src6, +- src7, src8); ++ ++ src0 = __lsx_vld(src, 0); ++ DUP4_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x,src, ++ src_stride_3x, src, src_stride_4x, src1, src2, src3, src4); ++ src += src_stride_4x; ++ DUP4_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x,src, ++ src_stride_3x, src, src_stride_4x, src5, src6, src7, src8); + + DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src1, src1, + mask0, src1, src1, mask1, vec0, vec1, vec2, vec3); +@@ -984,15 +955,16 @@ void hevc_hv_uni_4t_8x6_lsx(uint8_t *src, + mask0, src7, src7, mask1, vec12, vec13, vec14, vec15); + DUP2_ARG3(__lsx_vshuf_b, src8, src8, mask0, src8, src8, mask1, vec16, vec17); + +- dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); +- dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +- dst2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); +- dst3 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); +- dst4 = __lsx_hevc_filt_4tap_h(vec8, vec9, filt0, filt1); +- dst5 = __lsx_hevc_filt_4tap_h(vec10, vec11, filt0, filt1); +- dst6 = __lsx_hevc_filt_4tap_h(vec12, vec13, filt0, filt1); +- dst7 = __lsx_hevc_filt_4tap_h(vec14, vec15, filt0, filt1); +- dst8 = __lsx_hevc_filt_4tap_h(vec16, vec17, filt0, filt1); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, vec4, filt0, vec6, ++ filt0, dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec8, filt0, vec10, filt0, vec12, filt0, vec14, ++ filt0, dst4, dst5, dst6, dst7); ++ dst8 = __lsx_vdp2_h_bu_b(vec16, filt0); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst1, vec3, filt1, dst2, ++ vec5, filt1, dst3, vec7, filt1, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst4, vec9, filt1, dst5, vec11, filt1, dst6, ++ vec13, filt1, dst7, vec15, filt1, dst4, dst5, dst6, dst7); ++ dst8 = __lsx_vdp2add_h_bu_b(dst8, vec17, filt1); + + DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, + dst10_r, dst21_r, dst32_r, dst43_r); +@@ -1003,26 +975,29 @@ void hevc_hv_uni_4t_8x6_lsx(uint8_t *src, + DUP4_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst7, dst6, dst8, dst7, + dst54_l, dst65_l, dst76_l, dst87_l); + +- dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); +- dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +- dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); +- dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); +- dst2_r = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); +- dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); +- dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); +- dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); +- dst4_r = __lsx_hevc_filt_4tap_w(dst54_r, dst76_r, filt_h0, filt_h1); +- dst4_l = __lsx_hevc_filt_4tap_w(dst54_l, dst76_l, filt_h0, filt_h1); +- dst5_r = __lsx_hevc_filt_4tap_w(dst65_r, dst87_r, filt_h0, filt_h1); +- dst5_l = __lsx_hevc_filt_4tap_w(dst65_l, dst87_l, filt_h0, filt_h1); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst10_l, filt_h0, dst21_r, ++ filt_h0, dst21_l, filt_h0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst32_r, filt_h0, dst32_l, filt_h0, dst43_r, ++ filt_h0, dst43_l, filt_h0, dst2_r, dst2_l, dst3_r, dst3_l); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst54_r, filt_h0, dst54_l, filt_h0, dst65_r, ++ filt_h0, dst65_l, filt_h0, dst4_r, dst4_l, dst5_r, dst5_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst32_r, filt_h1, dst0_l, dst32_l, ++ filt_h1, dst1_r, dst43_r, filt_h1, dst1_l, dst43_l, filt_h1, ++ dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst2_r, dst54_r, filt_h1, dst2_l, dst54_l, ++ filt_h1, dst3_r, dst65_r, filt_h1, dst3_l, dst65_l, filt_h1, ++ dst2_r, dst2_l, dst3_r, dst3_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst4_r, dst76_r, filt_h1, dst4_l, dst76_l, ++ filt_h1, dst5_r, dst87_r, filt_h1, dst5_l, dst87_l, filt_h1, ++ dst4_r, dst4_l, dst5_r, dst5_l); + + DUP4_ARG3(__lsx_vsrani_h_w, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, dst2_l, + dst2_r, 6, dst3_l, dst3_r, 6, out0_r, out1_r, out2_r, out3_r); +- DUP2_ARG3(__lsx_vsrani_h_w, dst4_l, dst4_r, 6, dst5_l, dst5_r, 6, out4_r, out5_r); +- DUP2_ARG3(__lsx_vssrarni_b_h, out1_r, out0_r, 6, out3_r, out2_r, 6, out0, out1); +- DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1) +- out2 = __lsx_vssrarni_b_h(out5_r, out4_r, 6); +- out2 = __lsx_vxori_b(out2, 128); ++ DUP2_ARG3(__lsx_vsrani_h_w, dst4_l, dst4_r, 6, dst5_l, dst5_r, 6, ++ out4_r, out5_r); ++ DUP2_ARG3(__lsx_vssrarni_bu_h, out1_r, out0_r, 6, out3_r, out2_r, 6, ++ out0, out1); ++ out2 = __lsx_vssrarni_bu_h(out5_r, out4_r, 6); + + __lsx_vstelm_d(out0, dst, 0, 0); + __lsx_vstelm_d(out0, dst + dst_stride, 0, 1); +@@ -1034,14 +1009,10 @@ void hevc_hv_uni_4t_8x6_lsx(uint8_t *src, + } + + static av_always_inline +-void hevc_hv_uni_4t_8multx4mult_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height, +- int32_t width8mult) ++void hevc_hv_4t_8multx4mult_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y, int32_t height, ++ int32_t width8mult) + { + uint32_t loop_cnt, cnt; + uint8_t *src_tmp; +@@ -1079,63 +1050,66 @@ void hevc_hv_uni_4t_8multx4mult_lsx(uint8_t *src, + src_tmp = src; + dst_tmp = dst; + +- DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src0, src1); +- src2 = __lsx_vld(src_tmp + src_stride_2x, 0); ++ src0 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride_2x, ++ src1, src2); + src_tmp += src_stride_3x; + +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- src2 = __lsx_vxori_b(src2, 128); +- +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, ++ vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, ++ vec4, vec5); + +- dst0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); +- dst1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +- dst2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, dst0, dst1); ++ dst2 = __lsx_vdp2_h_bu_b(vec4, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst1, vec3, filt1, ++ dst0, dst1); ++ dst2 = __lsx_vdp2add_h_bu_b(dst2, vec5, filt1); + + DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); + DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, +- src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, +- src3, src4, src5, src6); ++ src3 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride_2x, ++ src4, src5); ++ src6 = __lsx_vldx(src_tmp, src_stride_3x); + src_tmp += src_stride_4x; + +- DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, +- src3, src4, src5, src6); +- + DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src4, + src4, mask0, src4, src4, mask1, vec0, vec1, vec2, vec3); + DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src6, + src6, mask0, src6, src6, mask1, vec4, vec5, vec6, vec7); + +- dst3 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); +- dst4 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +- dst5 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); +- dst6 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); +- +- DUP4_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst5, dst4, dst6, dst5, +- dst32_r, dst43_r, dst54_r, dst65_r); +- DUP4_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst5, dst4, dst6, dst5, +- dst32_l, dst43_l, dst54_l, dst65_l); +- +- dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); +- dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +- dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); +- dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); +- dst2_r = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); +- dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); +- dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); +- dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, vec4, filt0, ++ vec6, filt0, dst3, dst4, dst5, dst6); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst3, vec1, filt1, dst4, vec3, ++ filt1, dst5, vec5, filt1, dst6, vec7, filt1, ++ dst3, dst4, dst5, dst6); ++ ++ DUP4_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst5, dst4, ++ dst6, dst5, dst32_r, dst43_r, dst54_r, dst65_r); ++ DUP4_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst5, dst4, ++ dst6, dst5, dst32_l, dst43_l, dst54_l, dst65_l); ++ ++ DUP4_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst10_l, filt_h0, dst21_r, ++ filt_h0, dst21_l, filt_h0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst32_r, filt_h0, dst32_l, filt_h0, dst43_r, ++ filt_h0, dst43_l, filt_h0, dst2_r, dst2_l, dst3_r, dst3_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst32_r, filt_h1, dst0_l, ++ dst32_l, filt_h1, dst1_r, dst43_r, filt_h1, dst1_l, ++ dst43_l, filt_h1, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst2_r, dst54_r, filt_h1, dst2_l, ++ dst54_l, filt_h1, dst3_r, dst65_r, filt_h1, dst3_l, ++ dst65_l, filt_h1, dst2_r, dst2_l, dst3_r, dst3_l); + + DUP4_ARG3(__lsx_vsrani_h_w, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, + dst2_l, dst2_r, 6, dst3_l, dst3_r, 6, out0_r, out1_r, + out2_r, out3_r); +- DUP2_ARG3(__lsx_vssrarni_b_h, out1_r, out0_r, 6, out3_r, out2_r, 6, +- out0, out1); +- DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ DUP2_ARG3(__lsx_vssrarni_bu_h, out1_r, out0_r, 6, out3_r, out2_r, ++ 6, out0, out1); + __lsx_vstelm_d(out0, dst_tmp, 0, 0); + __lsx_vstelm_d(out0, dst_tmp + dst_stride, 0, 1); + __lsx_vstelm_d(out1, dst_tmp + dst_stride_2x, 0, 0); +@@ -1148,43 +1122,33 @@ void hevc_hv_uni_4t_8multx4mult_lsx(uint8_t *src, + dst21_l = dst65_l; + dst2 = dst6; + } +- + src += 8; + dst += 8; + } + } + +-static void hevc_hv_uni_4t_8w_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height) ++static ++void hevc_hv_4t_8w_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y, int32_t height) + { + if (2 == height) { +- hevc_hv_uni_4t_8x2_lsx(src, src_stride, dst, dst_stride, +- filter_x, filter_y); ++ hevc_hv_4t_8x2_lsx(src, src_stride, dst, dst_stride, filter_x, filter_y); + } else if (4 == height) { +- hevc_hv_uni_4t_8multx4_lsx(src, src_stride, dst, dst_stride, +- filter_x, filter_y, 1); ++ hevc_hv_4t_8multx4_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, 1); + } else if (6 == height) { +- hevc_hv_uni_4t_8x6_lsx(src, src_stride, dst, dst_stride, +- filter_x, filter_y); ++ hevc_hv_4t_8x6_lsx(src, src_stride, dst, dst_stride, filter_x, filter_y); + } else if (0 == (height & 0x03)) { +- hevc_hv_uni_4t_8multx4mult_lsx(src, src_stride, dst, dst_stride, +- filter_x, filter_y, height, 1); ++ hevc_hv_4t_8multx4mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 1); + } + } + + static av_always_inline +-void hevc_hv_uni_4t_12w_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height) ++void hevc_hv_4t_12w_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y, int32_t height) + { + uint32_t loop_cnt; + uint8_t *src_tmp, *dst_tmp; +@@ -1220,60 +1184,61 @@ void hevc_hv_uni_4t_12w_lsx(uint8_t *src, + src_tmp = src; + dst_tmp = dst; + +- DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src0, src1); +- src2 = __lsx_vld(src_tmp + src_stride_2x, 0); ++ src0 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride_2x, ++ src1, src2); + src_tmp += src_stride_3x; + +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- src2 = __lsx_vxori_b(src2, 128); +- + DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); + DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); + DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); + +- dsth0 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); +- dsth1 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +- dsth2 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, dsth0, dsth1); ++ dsth2 = __lsx_vdp2_h_bu_b(vec4, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dsth0, vec1, filt1, dsth1, vec3, filt1, ++ dsth0, dsth1); ++ dsth2 = __lsx_vdp2add_h_bu_b(dsth2, vec5, filt1); + + DUP2_ARG2(__lsx_vilvl_h, dsth1, dsth0, dsth2, dsth1, dst10_r, dst21_r); + DUP2_ARG2(__lsx_vilvh_h, dsth1, dsth0, dsth2, dsth1, dst10_l, dst21_l); + + for (loop_cnt = 4; loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, +- src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, +- src3, src4, src5, src6); ++ src3 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride_2x, ++ src4, src5); ++ src6 = __lsx_vldx(src_tmp, src_stride_3x); + src_tmp += src_stride_4x; +- DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, +- src3, src4, src5, src6); +- +- DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src4, src4, +- mask0, src4, src4, mask1, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src6, src6, +- mask0, src6, src6, mask1, vec4, vec5, vec6, vec7); +- +- dsth3 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); +- dsth4 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +- dsth5 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); +- dsth6 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); +- +- DUP4_ARG2(__lsx_vilvl_h, dsth3, dsth2, dsth4, dsth3, dsth5, dsth4, dsth6, +- dsth5, dst32_r, dst43_r, dst54_r, dst65_r); +- DUP4_ARG2(__lsx_vilvh_h, dsth3, dsth2, dsth4, dsth3, dsth5, dsth4, dsth6, +- dsth5, dst32_l, dst43_l, dst54_l, dst65_l); +- +- dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); +- dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +- dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); +- dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); +- dst2_r = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); +- dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); +- dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); +- dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); ++ ++ DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src4, ++ src4, mask0, src4, src4, mask1, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src6, ++ src6, mask0, src6, src6, mask1, vec4, vec5, vec6, vec7); ++ ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, vec4, filt0, ++ vec6, filt0, dsth3, dsth4, dsth5, dsth6); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dsth3, vec1, filt1, dsth4, ++ vec3, filt1, dsth5, vec5, filt1, dsth6, vec7, filt1, ++ dsth3, dsth4, dsth5, dsth6); ++ ++ DUP4_ARG2(__lsx_vilvl_h, dsth3, dsth2, dsth4, dsth3, dsth5, dsth4, ++ dsth6, dsth5, dst32_r, dst43_r, dst54_r, dst65_r); ++ DUP4_ARG2(__lsx_vilvh_h, dsth3, dsth2, dsth4, dsth3, dsth5, dsth4, ++ dsth6, dsth5, dst32_l, dst43_l, dst54_l, dst65_l); ++ ++ DUP4_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst10_l, filt_h0, dst21_r, ++ filt_h0, dst21_l, filt_h0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst32_r, filt_h0, dst32_l, filt_h0, dst43_r, ++ filt_h0, dst43_l, filt_h0, dst2_r, dst2_l, dst3_r, dst3_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst32_r, filt_h1, dst0_l, dst32_l, ++ filt_h1, dst1_r, dst43_r, filt_h1, dst1_l, dst43_l, filt_h1, ++ dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst2_r, dst54_r, filt_h1, dst2_l, dst54_l, ++ filt_h1, dst3_r, dst65_r, filt_h1, dst3_l, dst65_l, filt_h1, ++ dst2_r, dst2_l, dst3_r, dst3_l); + + DUP4_ARG3(__lsx_vsrani_h_w, dst0_l, dst0_r, 6, dst1_l, dst1_r, 6, dst2_l, + dst2_r, 6, dst3_l, dst3_r, 6, tmp0, tmp1, tmp2, tmp3); +- DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 6, tmp3, tmp2, 6, out0, out1); +- DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ DUP2_ARG3(__lsx_vssrarni_bu_h, tmp1, tmp0, 6, tmp3, tmp2, 6, out0, out1); + + __lsx_vstelm_d(out0, dst_tmp, 0, 0); + __lsx_vstelm_d(out0, dst_tmp + dst_stride, 0, 1); +@@ -1294,41 +1259,39 @@ void hevc_hv_uni_4t_12w_lsx(uint8_t *src, + mask2 = __lsx_vld(ff_hevc_mask_arr, 16); + mask3 = __lsx_vaddi_bu(mask2, 2); + +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); +- src2 = __lsx_vld(src + src_stride_2x, 0); ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src1, src2); + src += src_stride_3x; +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- src2 = __lsx_vxori_b(src2, 128); + DUP2_ARG3(__lsx_vshuf_b, src1, src0, mask2, src1, src0, mask3, vec0, vec1); + DUP2_ARG3(__lsx_vshuf_b, src2, src1, mask2, src2, src1, mask3, vec2, vec3); + +- dst10 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); +- dst21 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, dst10, dst21); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst10, vec1, filt1, dst21, vec3, filt1, ++ dst10, dst21); + + dst10_r = __lsx_vilvl_h(dst21, dst10); + dst21_r = __lsx_vilvh_h(dst21, dst10); + dst22 = __lsx_vreplvei_d(dst21, 1); + + for (loop_cnt = 2; loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src3, src4, src5, src6); ++ src3 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src4, src5); ++ src6 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src7, src8, src9, src10); ++ src7 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src8, src9); ++ src10 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, +- src4, src5, src6) +- DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, +- src8, src9, src10) +- DUP4_ARG3(__lsx_vshuf_b, src7, src3, mask2, src7, src3, mask3, src8, src4, +- mask2, src8, src4, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vshuf_b, src9, src5, mask2, src9, src5, mask3, src10, src6, +- mask2, src10, src6, mask3, vec4, vec5, vec6, vec7); +- +- dst73 = __lsx_hevc_filt_4tap_h(vec0, vec1, filt0, filt1); +- dst84 = __lsx_hevc_filt_4tap_h(vec2, vec3, filt0, filt1); +- dst95 = __lsx_hevc_filt_4tap_h(vec4, vec5, filt0, filt1); +- dst106 = __lsx_hevc_filt_4tap_h(vec6, vec7, filt0, filt1); ++ DUP4_ARG3(__lsx_vshuf_b, src7, src3, mask2, src7, src3, mask3, src8, ++ src4, mask2, src8, src4, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src9, src5, mask2, src9, src5, mask3, src10, ++ src6, mask2, src10, src6, mask3, vec4, vec5, vec6, vec7); ++ ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, vec4, filt0, ++ vec6, filt0, dst73, dst84, dst95, dst106); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst73, vec1, filt1, dst84, vec3, ++ filt1, dst95, vec5, filt1, dst106, vec7, filt1, ++ dst73, dst84, dst95, dst106); + + dst32_r = __lsx_vilvl_h(dst73, dst22); + DUP2_ARG2(__lsx_vilvl_h, dst84, dst73, dst95, dst84, dst43_r, dst54_r); +@@ -1338,19 +1301,20 @@ void hevc_hv_uni_4t_12w_lsx(uint8_t *src, + dst22 = __lsx_vreplvei_d(dst73, 1); + dst76_r = __lsx_vilvl_h(dst22, dst106); + +- dst0 = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); +- dst1 = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); +- dst2 = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); +- dst3 = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); +- dst4 = __lsx_hevc_filt_4tap_w(dst54_r, dst76_r, filt_h0, filt_h1); +- dst5 = __lsx_hevc_filt_4tap_w(dst65_r, dst87_r, filt_h0, filt_h1); +- dst6 = __lsx_hevc_filt_4tap_w(dst76_r, dst98_r, filt_h0, filt_h1); +- dst7 = __lsx_hevc_filt_4tap_w(dst87_r, dst109_r, filt_h0, filt_h1); +- +- DUP4_ARG3(__lsx_vsrani_h_w, dst1, dst0, 6, dst3, dst2, 6, dst5, dst4, 6, +- dst7, dst6, 6, tmp0, tmp1, tmp2, tmp3); +- DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 6, tmp3, tmp2, 6, out0, out1); +- DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst21_r, filt_h0, dst32_r, ++ filt_h0, dst43_r, filt_h0, dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst54_r, filt_h0, dst65_r, filt_h0, dst76_r, ++ filt_h0, dst87_r, filt_h0, dst4, dst5, dst6, dst7); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0, dst32_r, filt_h1, dst1, dst43_r, ++ filt_h1, dst2, dst54_r, filt_h1, dst3, dst65_r, filt_h1, ++ dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst4, dst76_r, filt_h1, dst5, dst87_r, ++ filt_h1, dst6, dst98_r, filt_h1, dst7, dst109_r, filt_h1, ++ dst4, dst5, dst6, dst7); ++ ++ DUP4_ARG3(__lsx_vsrani_h_w, dst1, dst0, 6, dst3, dst2, 6, dst5, dst4, ++ 6, dst7, dst6, 6, tmp0, tmp1, tmp2, tmp3); ++ DUP2_ARG3(__lsx_vssrarni_bu_h, tmp1, tmp0, 6, tmp3, tmp2, 6, out0, out1); + + __lsx_vstelm_w(out0, dst, 0, 0); + __lsx_vstelm_w(out0, dst + dst_stride, 0, 1); +@@ -1369,45 +1333,33 @@ void hevc_hv_uni_4t_12w_lsx(uint8_t *src, + } + } + +-static void hevc_hv_uni_4t_16w_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height) ++static void hevc_hv_4t_16w_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y, int32_t height) + { + if (4 == height) { +- hevc_hv_uni_4t_8multx4_lsx(src, src_stride, dst, dst_stride, filter_x, +- filter_y, 2); ++ hevc_hv_4t_8multx4_lsx(src, src_stride, dst, dst_stride, filter_x, ++ filter_y, 2); + } else { +- hevc_hv_uni_4t_8multx4mult_lsx(src, src_stride, dst, dst_stride, +- filter_x, filter_y, height, 2); ++ hevc_hv_4t_8multx4mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 2); + } + } + +-static void hevc_hv_uni_4t_24w_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height) ++static void hevc_hv_4t_24w_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y, int32_t height) + { +- hevc_hv_uni_4t_8multx4mult_lsx(src, src_stride, dst, dst_stride, +- filter_x, filter_y, height, 3); ++ hevc_hv_4t_8multx4mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 3); + } + +-static void hevc_hv_uni_4t_32w_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height) ++static void hevc_hv_4t_32w_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y, int32_t height) + { +- hevc_hv_uni_4t_8multx4mult_lsx(src, src_stride, dst, dst_stride, +- filter_x, filter_y, height, 4); ++ hevc_hv_4t_8multx4mult_lsx(src, src_stride, dst, dst_stride, ++ filter_x, filter_y, height, 4); + } + + #define UNI_MC(PEL, DIR, WIDTH, TAP, DIR1, FILT_DIR) \ +@@ -1451,8 +1403,8 @@ void ff_hevc_put_hevc_uni_##PEL##_hv##WIDTH##_8_lsx(uint8_t *dst, \ + const int8_t *filter_x = ff_hevc_##PEL##_filters[mx - 1]; \ + const int8_t *filter_y = ff_hevc_##PEL##_filters[my - 1]; \ + \ +- hevc_hv_uni_##TAP##t_##WIDTH##w_lsx(src, src_stride, dst, dst_stride, \ +- filter_x, filter_y, height); \ ++ hevc_hv_##TAP##t_##WIDTH##w_lsx(src, src_stride, dst, dst_stride, \ ++ filter_x, filter_y, height); \ + } + + UNI_MC_HV(qpel, 8, 8); +diff --git a/libavcodec/loongarch/hevc_mc_uniw_lsx.c b/libavcodec/loongarch/hevc_mc_uniw_lsx.c +index 541d814438..118f5b820e 100644 +--- a/libavcodec/loongarch/hevc_mc_uniw_lsx.c ++++ b/libavcodec/loongarch/hevc_mc_uniw_lsx.c +@@ -1,6 +1,7 @@ + /* +- * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Copyright (c) 2022 Loongson Technology Corporation Limited + * Contributed by Lu Wang ++ * Hao Chen + * + * This file is part of FFmpeg. + * +@@ -21,7 +22,6 @@ + + #include "libavutil/loongarch/loongson_intrinsics.h" + #include "hevcdsp_lsx.h" +-#include "hevc_macros_lsx.h" + + static const uint8_t ff_hevc_mask_arr[16 * 2] __attribute__((aligned(0x40))) = { + /* 8 width cases */ +@@ -31,17 +31,10 @@ static const uint8_t ff_hevc_mask_arr[16 * 2] __attribute__((aligned(0x40))) = { + }; + + static av_always_inline +-void hevc_hv_uniwgt_8t_8multx2mult_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height, +- int32_t weight, +- int32_t offset, +- int32_t rnd_val, +- int32_t width) ++void hevc_hv_8t_8x2_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y, int32_t height, int32_t weight, ++ int32_t offset, int32_t rnd_val, int32_t width) + { + uint32_t loop_cnt, cnt; + uint8_t *src_tmp; +@@ -64,22 +57,16 @@ void hevc_hv_uniwgt_8t_8multx2mult_lsx(uint8_t *src, + __m128i dst10_l, dst32_l, dst54_l, dst76_l; + __m128i dst21_r, dst43_r, dst65_r, dst87_r; + __m128i dst21_l, dst43_l, dst65_l, dst87_l; +- __m128i weight_vec, offset_vec, rnd_vec, const_128, denom_vec; ++ __m128i weight_vec, offset_vec, rnd_vec; + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + + src -= (src_stride_3x + 3); + weight_vec = __lsx_vreplgr2vr_w(weight); + offset_vec = __lsx_vreplgr2vr_w(offset); + rnd_vec = __lsx_vreplgr2vr_w(rnd_val); +- denom_vec = __lsx_vsubi_wu(rnd_vec, 6); + +- const_128 = __lsx_vldi(0x880); +- const_128 = __lsx_vmul_w(weight_vec, const_128); +- denom_vec = __lsx_vsrar_w(const_128, denom_vec); +- offset_vec = __lsx_vadd_w(denom_vec, offset_vec); +- +- DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, filter_x, 6, +- filt0, filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter_x, 0, filter_x, 2, filter_x, 4, ++ filter_x, 6, filt0, filt1, filt2, filt3); + filter_vec = __lsx_vld(filter_y, 0); + filter_vec = __lsx_vsllwil_h_b(filter_vec, 0); + DUP4_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filter_vec, 2, +@@ -91,93 +78,108 @@ void hevc_hv_uniwgt_8t_8multx2mult_lsx(uint8_t *src, + src_tmp = src; + dst_tmp = dst; + +- DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src_tmp + src_stride_2x, +- 0, src_tmp + src_stride_3x, 0, src0, src1, src2, src3); ++ src0 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride_2x, ++ src1, src2); ++ src3 = __lsx_vldx(src_tmp, src_stride_3x); + src_tmp += src_stride_4x; +- DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); +- src6 = __lsx_vld(src_tmp + src_stride_2x, 0); ++ src4 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride_2x, ++ src5, src6); + src_tmp += src_stride_3x; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); +- src6 = __lsx_vxori_b(src6, 128); + +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, +- mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, +- mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); +- DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, +- mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); +- DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, +- mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); +- dst0 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, filt2, +- filt3); +- dst1 = __lsx_hevc_filt_8tap_h(vec4, vec5, vec6, vec7, filt0, filt1, filt2, +- filt3); +- dst2 = __lsx_hevc_filt_8tap_h(vec8, vec9, vec10, vec11, filt0, filt1, filt2, +- filt3); +- dst3 = __lsx_hevc_filt_8tap_h(vec12, vec13, vec14, vec15, filt0, filt1, +- filt2, filt3); +- DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, +- mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, src5, +- mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); +- DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, src6, +- mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); +- dst4 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, filt2, +- filt3); +- dst5 = __lsx_hevc_filt_8tap_h(vec4, vec5, vec6, vec7, filt0, filt1, filt2, +- filt3); +- dst6 = __lsx_hevc_filt_8tap_h(vec8, vec9, vec10, vec11, filt0, filt1, filt2, +- filt3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, ++ src0, mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, ++ src1, mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, ++ src2, mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); ++ DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, ++ src3, mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec4, filt0, vec8, filt0, ++ vec12, filt0, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst1, vec5, filt1, ++ dst2, vec9, filt1, dst3, vec13, filt1, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec2, filt2, dst1, vec6, filt2, ++ dst2, vec10, filt2, dst3, vec14, filt2, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec3, filt3, dst1, vec7, filt3, ++ dst2, vec11, filt3, dst3, vec15, filt3, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, ++ src4, mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, ++ src5, mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, ++ src6, mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec4, filt0, dst4, dst5); ++ dst6 = __lsx_vdp2_h_bu_b(vec8, filt0); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst4, vec1, filt1, dst5, vec5, filt1, ++ dst6, vec9, filt1, dst4, vec2, filt2, dst4, dst5, dst6, dst4); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst5, vec6, filt2, dst6, vec10, filt2, ++ dst4, vec3, filt3, dst5, vec7, filt3, dst5, dst6, dst4, dst5); ++ dst6 = __lsx_vdp2add_h_bu_b(dst6, vec11, filt3); + +- DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst2, dst1, +- dst10_r, dst32_r, dst54_r, dst21_r); ++ DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst2, ++ dst1, dst10_r, dst32_r, dst54_r, dst21_r); + DUP2_ARG2(__lsx_vilvl_h, dst4, dst3, dst6, dst5, dst43_r, dst65_r); +- DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst2, dst1, +- dst10_l, dst32_l, dst54_l, dst21_l); ++ DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst2, ++ dst1, dst10_l, dst32_l, dst54_l, dst21_l); + DUP2_ARG2(__lsx_vilvh_h, dst4, dst3, dst6, dst5, dst43_l, dst65_l); + + for (loop_cnt = height >> 1; loop_cnt--;) { +- DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src7, src8); ++ src7 = __lsx_vld(src_tmp, 0); ++ src8 = __lsx_vldx(src_tmp, src_stride); + src_tmp += src_stride_2x; +- DUP2_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src7, src8); + DUP4_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, src7, + src7, mask2, src7, src7, mask3, vec0, vec1, vec2, vec3); +- dst7 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, +- filt2, filt3); ++ dst7 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst7, vec1, filt1, dst7, vec2, ++ filt2, dst7, dst7); ++ dst7 = __lsx_vdp2add_h_bu_b(dst7, vec3, filt3); + dst76_r = __lsx_vilvl_h(dst7, dst6); + dst76_l = __lsx_vilvh_h(dst7, dst6); +- dst0_r = __lsx_hevc_filt_8tap_w(dst10_r, dst32_r, dst54_r, dst76_r, +- filt_h0, filt_h1, filt_h2, filt_h3); +- dst0_l = __lsx_hevc_filt_8tap_w(dst10_l, dst32_l, dst54_l, dst76_l, +- filt_h0, filt_h1, filt_h2, filt_h3); ++ DUP2_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst10_l, filt_h0, ++ dst0_r, dst0_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst32_r, filt_h1, dst0_l, ++ dst32_l, filt_h1, dst0_r, dst54_r, filt_h2, dst0_l, ++ dst54_l, filt_h2, dst0_r, dst0_l, dst0_r, dst0_l); ++ DUP2_ARG3(__lsx_vdp2add_w_h, dst0_r, dst76_r, filt_h3, dst0_l, ++ dst76_l, filt_h3, dst0_r, dst0_l); + DUP2_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst0_r, dst0_l); + + /* row 8 */ + DUP4_ARG3(__lsx_vshuf_b, src8, src8, mask0, src8, src8, mask1, src8, + src8, mask2, src8, src8, mask3, vec0, vec1, vec2, vec3); +- dst8 = __lsx_hevc_filt_8tap_h(vec0, vec1, vec2, vec3, filt0, filt1, +- filt2, filt3); ++ dst8 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst8, vec1, filt1, dst8, vec2, ++ filt2, dst8, dst8); ++ dst8 = __lsx_vdp2add_h_bu_b(dst8, vec3, filt3); + + dst87_r = __lsx_vilvl_h(dst8, dst7); + dst87_l = __lsx_vilvh_h(dst8, dst7); +- dst1_r = __lsx_hevc_filt_8tap_w(dst21_r, dst43_r, dst65_r, dst87_r, +- filt_h0, filt_h1, filt_h2, filt_h3); +- dst1_l = __lsx_hevc_filt_8tap_w(dst21_l, dst43_l, dst65_l, dst87_l, +- filt_h0, filt_h1, filt_h2, filt_h3); ++ DUP2_ARG2(__lsx_vdp2_w_h, dst21_r, filt_h0, dst21_l, filt_h0, ++ dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst1_r, dst43_r, filt_h1, dst1_l, ++ dst43_l, filt_h1, dst1_r, dst65_r, filt_h2, dst1_l, ++ dst65_l, filt_h2, dst1_r, dst1_l, dst1_r, dst1_l); ++ DUP2_ARG3(__lsx_vdp2add_w_h, dst1_r, dst87_r, filt_h3, dst1_l, ++ dst87_l, filt_h3, dst1_r, dst1_l); + DUP2_ARG2(__lsx_vsrai_w, dst1_r, 6, dst1_l, 6, dst1_r, dst1_l); + +- DUP2_ARG2(__lsx_vmul_w, dst0_r, weight_vec, dst0_l, weight_vec, dst0_r, dst0_l); +- DUP2_ARG2(__lsx_vmul_w, dst1_r, weight_vec, dst1_l, weight_vec, dst1_r, dst1_l); ++ DUP2_ARG2(__lsx_vmul_w, dst0_r, weight_vec, dst0_l, weight_vec, ++ dst0_r, dst0_l); ++ DUP2_ARG2(__lsx_vmul_w, dst1_r, weight_vec, dst1_l, weight_vec, ++ dst1_r, dst1_l); + DUP4_ARG2(__lsx_vsrar_w, dst0_r, rnd_vec, dst1_r, rnd_vec, dst0_l, +- rnd_vec, dst1_l, rnd_vec, dst0_r, dst1_r, dst0_l, dst1_l); ++ rnd_vec, dst1_l, rnd_vec, dst0_r, dst1_r, dst0_l, dst1_l); + +- DUP2_ARG2(__lsx_vadd_w, dst0_r, offset_vec, dst0_l, offset_vec, dst0_r, dst0_l); +- DUP2_ARG2(__lsx_vadd_w, dst1_r, offset_vec, dst1_l, offset_vec, dst1_r, dst1_l); ++ DUP2_ARG2(__lsx_vadd_w, dst0_r, offset_vec, dst0_l, offset_vec, ++ dst0_r, dst0_l); ++ DUP2_ARG2(__lsx_vadd_w, dst1_r, offset_vec, dst1_l, offset_vec, ++ dst1_r, dst1_l); + DUP4_ARG1(__lsx_vclip255_w, dst0_r, dst1_r, dst0_l, dst1_l, dst0_r, + dst1_r, dst0_l, dst1_l); +- DUP2_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); ++ DUP2_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, ++ dst0_r, dst1_r); + dst0_r = __lsx_vpickev_b(dst1_r, dst0_r); + + __lsx_vstelm_d(dst0_r, dst_tmp, 0, 0); +@@ -204,123 +206,86 @@ void hevc_hv_uniwgt_8t_8multx2mult_lsx(uint8_t *src, + } + } + +-static void hevc_hv_uniwgt_8t_8w_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height, +- int32_t weight, +- int32_t offset, +- int32_t rnd_val) ++static ++void hevc_hv_8t_8w_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y, int32_t height, int32_t weight, ++ int32_t offset, int32_t rnd_val) + { +- hevc_hv_uniwgt_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, +- filter_x, filter_y, height, weight, +- offset, rnd_val, 8); ++ hevc_hv_8t_8x2_lsx(src, src_stride, dst, dst_stride, filter_x, ++ filter_y, height, weight, offset, rnd_val, 8); + } + +-static void hevc_hv_uniwgt_8t_16w_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height, +- int32_t weight, +- int32_t offset, +- int32_t rnd_val) ++static ++void hevc_hv_8t_16w_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y, int32_t height, int32_t weight, ++ int32_t offset, int32_t rnd_val) + { +- hevc_hv_uniwgt_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, +- filter_x, filter_y, height, weight, +- offset, rnd_val, 16); ++ hevc_hv_8t_8x2_lsx(src, src_stride, dst, dst_stride, filter_x, ++ filter_y, height, weight, offset, rnd_val, 16); + } + +-static void hevc_hv_uniwgt_8t_24w_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height, +- int32_t weight, +- int32_t offset, +- int32_t rnd_val) ++static ++void hevc_hv_8t_24w_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y, int32_t height, int32_t weight, ++ int32_t offset, int32_t rnd_val) + { +- hevc_hv_uniwgt_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, +- filter_x, filter_y, height, weight, +- offset, rnd_val, 24); ++ hevc_hv_8t_8x2_lsx(src, src_stride, dst, dst_stride, filter_x, ++ filter_y, height, weight, offset, rnd_val, 24); + } + +-static void hevc_hv_uniwgt_8t_32w_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height, +- int32_t weight, +- int32_t offset, +- int32_t rnd_val) ++static ++void hevc_hv_8t_32w_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y, int32_t height, int32_t weight, ++ int32_t offset, int32_t rnd_val) + { +- hevc_hv_uniwgt_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, +- filter_x, filter_y, height, weight, +- offset, rnd_val, 32); ++ hevc_hv_8t_8x2_lsx(src, src_stride, dst, dst_stride, filter_x, ++ filter_y, height, weight, offset, rnd_val, 32); + } + +-static void hevc_hv_uniwgt_8t_48w_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height, +- int32_t weight, +- int32_t offset, +- int32_t rnd_val) ++static ++void hevc_hv_8t_48w_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y, int32_t height, int32_t weight, ++ int32_t offset, int32_t rnd_val) + { +- hevc_hv_uniwgt_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, +- filter_x, filter_y, height, weight, +- offset, rnd_val, 48); ++ hevc_hv_8t_8x2_lsx(src, src_stride, dst, dst_stride, filter_x, ++ filter_y, height, weight, offset, rnd_val, 48); + } + +-static void hevc_hv_uniwgt_8t_64w_lsx(uint8_t *src, +- int32_t src_stride, +- uint8_t *dst, +- int32_t dst_stride, +- const int8_t *filter_x, +- const int8_t *filter_y, +- int32_t height, +- int32_t weight, +- int32_t offset, +- int32_t rnd_val) ++static ++void hevc_hv_8t_64w_lsx(uint8_t *src, int32_t src_stride, uint8_t *dst, ++ int32_t dst_stride, const int8_t *filter_x, ++ const int8_t *filter_y, int32_t height, int32_t weight, ++ int32_t offset, int32_t rnd_val) + { +- hevc_hv_uniwgt_8t_8multx2mult_lsx(src, src_stride, dst, dst_stride, +- filter_x, filter_y, height, weight, +- offset, rnd_val, 64); ++ hevc_hv_8t_8x2_lsx(src, src_stride, dst, dst_stride, filter_x, ++ filter_y, height, weight, offset, rnd_val, 64); + } + + +-#define UNI_W_MC_HV(PEL, WIDTH, TAP) \ +-void ff_hevc_put_hevc_uni_w_##PEL##_hv##WIDTH##_8_lsx(uint8_t *dst, \ +- ptrdiff_t dst_stride, \ +- uint8_t *src, \ +- ptrdiff_t src_stride, \ +- int height, \ +- int denom, \ +- int weight, \ +- int offset, \ +- intptr_t mx, \ +- intptr_t my, \ +- int width) \ +-{ \ +- const int8_t *filter_x = ff_hevc_##PEL##_filters[mx - 1]; \ +- const int8_t *filter_y = ff_hevc_##PEL##_filters[my - 1]; \ +- int shift = denom + 14 - 8; \ +- \ +- hevc_hv_uniwgt_##TAP##t_##WIDTH##w_lsx(src, src_stride, dst, dst_stride, \ +- filter_x, filter_y, height, \ +- weight, offset, shift); \ ++#define UNI_W_MC_HV(PEL, WIDTH, TAP) \ ++void ff_hevc_put_hevc_uni_w_##PEL##_hv##WIDTH##_8_lsx(uint8_t *dst, \ ++ ptrdiff_t dst_stride, \ ++ uint8_t *src, \ ++ ptrdiff_t src_stride, \ ++ int height, \ ++ int denom, \ ++ int weight, \ ++ int offset, \ ++ intptr_t mx, \ ++ intptr_t my, \ ++ int width) \ ++{ \ ++ const int8_t *filter_x = ff_hevc_##PEL##_filters[mx - 1]; \ ++ const int8_t *filter_y = ff_hevc_##PEL##_filters[my - 1]; \ ++ int shift = denom + 14 - 8; \ ++ \ ++ hevc_hv_##TAP##t_##WIDTH##w_lsx(src, src_stride, dst, dst_stride, filter_x,\ ++ filter_y, height, weight, offset, shift); \ + } + + UNI_W_MC_HV(qpel, 8, 8); +diff --git a/libavcodec/loongarch/hevcdsp_init_loongarch.c b/libavcodec/loongarch/hevcdsp_init_loongarch.c +index 94e650d997..22739c6f5b 100644 +--- a/libavcodec/loongarch/hevcdsp_init_loongarch.c ++++ b/libavcodec/loongarch/hevcdsp_init_loongarch.c +@@ -1,6 +1,7 @@ + /* +- * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Copyright (c) 2022 Loongson Technology Corporation Limited + * Contributed by Lu Wang ++ * Hao Chen + * + * This file is part of FFmpeg. + * +@@ -20,7 +21,7 @@ + */ + + #include "libavutil/loongarch/cpu.h" +-#include "libavcodec/loongarch/hevcdsp_lsx.h" ++#include "hevcdsp_lsx.h" + + void ff_hevc_dsp_init_loongarch(HEVCDSPContext *c, const int bit_depth) + { +@@ -85,36 +86,6 @@ void ff_hevc_dsp_init_loongarch(HEVCDSPContext *c, const int bit_depth) + c->put_hevc_epel[6][1][1] = ff_hevc_put_hevc_epel_hv24_8_lsx; + c->put_hevc_epel[7][1][1] = ff_hevc_put_hevc_epel_hv32_8_lsx; + +- c->put_hevc_qpel_uni[9][0][1] = ff_hevc_put_hevc_uni_qpel_h64_8_lsx; +- +- c->put_hevc_qpel_uni[6][1][0] = ff_hevc_put_hevc_uni_qpel_v24_8_lsx; +- c->put_hevc_qpel_uni[7][1][0] = ff_hevc_put_hevc_uni_qpel_v32_8_lsx; +- c->put_hevc_qpel_uni[8][1][0] = ff_hevc_put_hevc_uni_qpel_v48_8_lsx; +- c->put_hevc_qpel_uni[9][1][0] = ff_hevc_put_hevc_uni_qpel_v64_8_lsx; +- +- c->put_hevc_qpel_uni[3][1][1] = ff_hevc_put_hevc_uni_qpel_hv8_8_lsx; +- c->put_hevc_qpel_uni[5][1][1] = ff_hevc_put_hevc_uni_qpel_hv16_8_lsx; +- c->put_hevc_qpel_uni[6][1][1] = ff_hevc_put_hevc_uni_qpel_hv24_8_lsx; +- c->put_hevc_qpel_uni[7][1][1] = ff_hevc_put_hevc_uni_qpel_hv32_8_lsx; +- c->put_hevc_qpel_uni[8][1][1] = ff_hevc_put_hevc_uni_qpel_hv48_8_lsx; +- c->put_hevc_qpel_uni[9][1][1] = ff_hevc_put_hevc_uni_qpel_hv64_8_lsx; +- +- c->put_hevc_epel_uni[6][1][0] = ff_hevc_put_hevc_uni_epel_v24_8_lsx; +- c->put_hevc_epel_uni[7][1][0] = ff_hevc_put_hevc_uni_epel_v32_8_lsx; +- +- c->put_hevc_epel_uni[3][1][1] = ff_hevc_put_hevc_uni_epel_hv8_8_lsx; +- c->put_hevc_epel_uni[4][1][1] = ff_hevc_put_hevc_uni_epel_hv12_8_lsx; +- c->put_hevc_epel_uni[5][1][1] = ff_hevc_put_hevc_uni_epel_hv16_8_lsx; +- c->put_hevc_epel_uni[6][1][1] = ff_hevc_put_hevc_uni_epel_hv24_8_lsx; +- c->put_hevc_epel_uni[7][1][1] = ff_hevc_put_hevc_uni_epel_hv32_8_lsx; +- +- c->put_hevc_qpel_uni_w[3][1][1] = ff_hevc_put_hevc_uni_w_qpel_hv8_8_lsx; +- c->put_hevc_qpel_uni_w[5][1][1] = ff_hevc_put_hevc_uni_w_qpel_hv16_8_lsx; +- c->put_hevc_qpel_uni_w[6][1][1] = ff_hevc_put_hevc_uni_w_qpel_hv24_8_lsx; +- c->put_hevc_qpel_uni_w[7][1][1] = ff_hevc_put_hevc_uni_w_qpel_hv32_8_lsx; +- c->put_hevc_qpel_uni_w[8][1][1] = ff_hevc_put_hevc_uni_w_qpel_hv48_8_lsx; +- c->put_hevc_qpel_uni_w[9][1][1] = ff_hevc_put_hevc_uni_w_qpel_hv64_8_lsx; +- + c->put_hevc_qpel_bi[1][0][0] = ff_hevc_put_hevc_bi_pel_pixels4_8_lsx; + c->put_hevc_qpel_bi[3][0][0] = ff_hevc_put_hevc_bi_pel_pixels8_8_lsx; + c->put_hevc_qpel_bi[4][0][0] = ff_hevc_put_hevc_bi_pel_pixels12_8_lsx; +@@ -166,6 +137,36 @@ void ff_hevc_dsp_init_loongarch(HEVCDSPContext *c, const int bit_depth) + c->put_hevc_epel_bi[6][1][1] = ff_hevc_put_hevc_bi_epel_hv24_8_lsx; + c->put_hevc_epel_bi[7][1][1] = ff_hevc_put_hevc_bi_epel_hv32_8_lsx; + ++ c->put_hevc_qpel_uni[9][0][1] = ff_hevc_put_hevc_uni_qpel_h64_8_lsx; ++ ++ c->put_hevc_qpel_uni[6][1][0] = ff_hevc_put_hevc_uni_qpel_v24_8_lsx; ++ c->put_hevc_qpel_uni[7][1][0] = ff_hevc_put_hevc_uni_qpel_v32_8_lsx; ++ c->put_hevc_qpel_uni[8][1][0] = ff_hevc_put_hevc_uni_qpel_v48_8_lsx; ++ c->put_hevc_qpel_uni[9][1][0] = ff_hevc_put_hevc_uni_qpel_v64_8_lsx; ++ ++ c->put_hevc_qpel_uni[3][1][1] = ff_hevc_put_hevc_uni_qpel_hv8_8_lsx; ++ c->put_hevc_qpel_uni[5][1][1] = ff_hevc_put_hevc_uni_qpel_hv16_8_lsx; ++ c->put_hevc_qpel_uni[6][1][1] = ff_hevc_put_hevc_uni_qpel_hv24_8_lsx; ++ c->put_hevc_qpel_uni[7][1][1] = ff_hevc_put_hevc_uni_qpel_hv32_8_lsx; ++ c->put_hevc_qpel_uni[8][1][1] = ff_hevc_put_hevc_uni_qpel_hv48_8_lsx; ++ c->put_hevc_qpel_uni[9][1][1] = ff_hevc_put_hevc_uni_qpel_hv64_8_lsx; ++ ++ c->put_hevc_epel_uni[6][1][0] = ff_hevc_put_hevc_uni_epel_v24_8_lsx; ++ c->put_hevc_epel_uni[7][1][0] = ff_hevc_put_hevc_uni_epel_v32_8_lsx; ++ ++ c->put_hevc_epel_uni[3][1][1] = ff_hevc_put_hevc_uni_epel_hv8_8_lsx; ++ c->put_hevc_epel_uni[4][1][1] = ff_hevc_put_hevc_uni_epel_hv12_8_lsx; ++ c->put_hevc_epel_uni[5][1][1] = ff_hevc_put_hevc_uni_epel_hv16_8_lsx; ++ c->put_hevc_epel_uni[6][1][1] = ff_hevc_put_hevc_uni_epel_hv24_8_lsx; ++ c->put_hevc_epel_uni[7][1][1] = ff_hevc_put_hevc_uni_epel_hv32_8_lsx; ++ ++ c->put_hevc_qpel_uni_w[3][1][1] = ff_hevc_put_hevc_uni_w_qpel_hv8_8_lsx; ++ c->put_hevc_qpel_uni_w[5][1][1] = ff_hevc_put_hevc_uni_w_qpel_hv16_8_lsx; ++ c->put_hevc_qpel_uni_w[6][1][1] = ff_hevc_put_hevc_uni_w_qpel_hv24_8_lsx; ++ c->put_hevc_qpel_uni_w[7][1][1] = ff_hevc_put_hevc_uni_w_qpel_hv32_8_lsx; ++ c->put_hevc_qpel_uni_w[8][1][1] = ff_hevc_put_hevc_uni_w_qpel_hv48_8_lsx; ++ c->put_hevc_qpel_uni_w[9][1][1] = ff_hevc_put_hevc_uni_w_qpel_hv64_8_lsx; ++ + c->sao_edge_filter[4] = ff_hevc_sao_edge_filter_8_lsx; + + c->hevc_h_loop_filter_luma = ff_hevc_loop_filter_luma_h_8_lsx; +diff --git a/libavcodec/loongarch/hevcdsp_lsx.c b/libavcodec/loongarch/hevcdsp_lsx.c +index e4779c77a6..a520f02bd1 100644 +--- a/libavcodec/loongarch/hevcdsp_lsx.c ++++ b/libavcodec/loongarch/hevcdsp_lsx.c +@@ -1,6 +1,7 @@ + /* +- * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Copyright (c) 2022 Loongson Technology Corporation Limited + * Contributed by Lu Wang ++ * Hao Chen + * + * This file is part of FFmpeg. + * +@@ -21,7 +22,6 @@ + + #include "libavutil/loongarch/loongson_intrinsics.h" + #include "hevcdsp_lsx.h" +-#include "hevc_macros_lsx.h" + + static const uint8_t ff_hevc_mask_arr[16 * 2] __attribute__((aligned(0x40))) = { + /* 8 width cases */ +@@ -30,70 +30,56 @@ static const uint8_t ff_hevc_mask_arr[16 * 2] __attribute__((aligned(0x40))) = { + 0, 1, 1, 2, 2, 3, 3, 4, 16, 17, 17, 18, 18, 19, 19, 20 + }; + ++/* hevc_copy: dst = src << 6 */ + static void hevc_copy_4w_lsx(uint8_t *src, int32_t src_stride, + int16_t *dst, int32_t dst_stride, + int32_t height) + { +- __m128i zero = {0}; + int32_t src_stride_2x = (src_stride << 1); + int32_t dst_stride_2x = (dst_stride << 1); + int32_t src_stride_4x = (src_stride << 2); + int32_t dst_stride_4x = (dst_stride << 2); + int32_t src_stride_3x = src_stride_2x + src_stride; + int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t loop_cnt = height >> 3; ++ int32_t res = height & 0x07; + +- if (2 == height) { +- __m128i src0, src1; +- __m128i in0; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i in0, in1, in2, in3; ++ for (; loop_cnt--;) { ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, ++ src1, src2); ++ src3 = __lsx_vldx(src, src_stride_3x); ++ src += src_stride_4x; ++ src4 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, ++ src5, src6); ++ src7 = __lsx_vldx(src, src_stride_3x); ++ src += src_stride_4x; ++ ++ DUP4_ARG2(__lsx_vilvl_w, src1, src0, src3, src2, src5, src4, src7, src6, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, ++ in0, in1, in2, in3); + +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); +- src0 = __lsx_vilvl_w(src1, src0); +- in0 = __lsx_vilvl_b(zero, src0); +- in0 = __lsx_vslli_h(in0, 6); +- __lsx_vstelm_d(in0, dst, 0, 0); +- __lsx_vstelm_d(in0, dst + dst_stride, 0, 1); +- } else if (4 == height) { +- __m128i src0, src1, src2, src3; +- __m128i in0, in1; +- +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- DUP2_ARG2(__lsx_vilvl_w, src1, src0, src3, src2, src0, src1); +- DUP2_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, in0, in1); +- DUP2_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in0, in1); + __lsx_vstelm_d(in0, dst, 0, 0); + __lsx_vstelm_d(in0, dst + dst_stride, 0, 1); + __lsx_vstelm_d(in1, dst + dst_stride_2x, 0, 0); + __lsx_vstelm_d(in1, dst + dst_stride_3x, 0, 1); +- } else if (0 == (height & 0x07)) { +- __m128i src0, src1, src2, src3, src4, src5, src6, src7; +- __m128i in0, in1, in2, in3; +- uint32_t loop_cnt; +- for (loop_cnt = (height >> 3); loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- src += src_stride_4x; +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0,src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); +- src += src_stride_4x; +- +- DUP4_ARG2(__lsx_vilvl_w, src1, src0, src3, src2, src5, src4, src7, src6, +- src0, src1, src2, src3); +- DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0, in1, in2, in3); +- DUP4_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in2, 6, in3, 6, in0, in1, in2, in3); +- +- __lsx_vstelm_d(in0, dst, 0, 0); +- __lsx_vstelm_d(in0, dst + dst_stride, 0, 1); +- __lsx_vstelm_d(in1, dst + dst_stride_2x, 0, 0); +- __lsx_vstelm_d(in1, dst + dst_stride_3x, 0, 1); +- dst += dst_stride_4x; +- __lsx_vstelm_d(in2, dst, 0, 0); +- __lsx_vstelm_d(in2, dst + dst_stride, 0, 1); +- __lsx_vstelm_d(in3, dst + dst_stride_2x, 0, 0); +- __lsx_vstelm_d(in3, dst + dst_stride_3x, 0, 1); +- dst += dst_stride_4x; +- } ++ dst += dst_stride_4x; ++ __lsx_vstelm_d(in2, dst, 0, 0); ++ __lsx_vstelm_d(in2, dst + dst_stride, 0, 1); ++ __lsx_vstelm_d(in3, dst + dst_stride_2x, 0, 0); ++ __lsx_vstelm_d(in3, dst + dst_stride_3x, 0, 1); ++ dst += dst_stride_4x; ++ } ++ for (;res--;) { ++ src0 = __lsx_vld(src, 0); ++ in0 = __lsx_vsllwil_hu_bu(src0, 6); ++ __lsx_vstelm_d(in0, dst, 0, 0); ++ src += src_stride; ++ dst += dst_stride; + } + } + +@@ -101,67 +87,61 @@ static void hevc_copy_6w_lsx(uint8_t *src, int32_t src_stride, + int16_t *dst, int32_t dst_stride, + int32_t height) + { +- uint32_t loop_cnt; +- uint64_t out0_m, out1_m, out2_m, out3_m; +- uint64_t out4_m, out5_m, out6_m, out7_m; +- uint32_t out8_m, out9_m, out10_m, out11_m; +- uint32_t out12_m, out13_m, out14_m, out15_m; ++ int32_t loop_cnt = (height >> 3); ++ int32_t res = height & 0x07; + int32_t src_stride_2x = (src_stride << 1); + int32_t src_stride_4x = (src_stride << 2); + int32_t src_stride_3x = src_stride_2x + src_stride; + +- __m128i zero = {0}; + __m128i src0, src1, src2, src3, src4, src5, src6, src7; + __m128i in0, in1, in2, in3, in4, in5, in6, in7; + + for (loop_cnt = (height >> 3); loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src1, src2); ++ src3 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src4 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src5, src6); ++ src7 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; + +- DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, + in0, in1, in2, in3); +- DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src4, 6, src5, 6, src6, 6, src7, 6, + in4, in5, in6, in7); +- DUP4_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in2, 6, in3, 6, in0, in1, in2, in3); +- DUP4_ARG2(__lsx_vslli_h, in4, 6, in5, 6, in6, 6, in7, 6, in4, in5, in6, in7); +- +- DUP4_ARG2(__lsx_vpickve2gr_du, in0, 0, in1, 0, in2, 0, in3, 0, out0_m, +- out1_m, out2_m, out3_m); +- DUP4_ARG2(__lsx_vpickve2gr_du, in4, 0, in5, 0, in6, 0, in7, 0, out4_m, +- out5_m, out6_m, out7_m); + +- DUP4_ARG2(__lsx_vpickve2gr_wu, in0, 2, in1, 2, in2, 2, in3, 2, out8_m, +- out9_m, out10_m, out11_m); +- DUP4_ARG2(__lsx_vpickve2gr_wu, in4, 2, in5, 2, in6, 2, in7, 2, out12_m, +- out13_m, out14_m, out15_m); +- +- *(uint64_t *)dst = out0_m; +- *(uint32_t *)(dst + 4) = out8_m; ++ __lsx_vstelm_d(in0, dst, 0, 0); ++ __lsx_vstelm_w(in0, dst, 8, 2); ++ dst += dst_stride; ++ __lsx_vstelm_d(in1, dst, 0, 0); ++ __lsx_vstelm_w(in1, dst, 8, 2); + dst += dst_stride; +- *(uint64_t *)dst = out1_m; +- *(uint32_t *)(dst + 4) = out9_m; ++ __lsx_vstelm_d(in2, dst, 0, 0); ++ __lsx_vstelm_w(in2, dst, 8, 2); + dst += dst_stride; +- *(uint64_t *)dst = out2_m; +- *(uint32_t *)(dst + 4) = out10_m; ++ __lsx_vstelm_d(in3, dst, 0, 0); ++ __lsx_vstelm_w(in3, dst, 8, 2); + dst += dst_stride; +- *(uint64_t *)dst = out3_m; +- *(uint32_t *)(dst + 4) = out11_m; ++ __lsx_vstelm_d(in4, dst, 0, 0); ++ __lsx_vstelm_w(in4, dst, 8, 2); + dst += dst_stride; +- *(uint64_t *)dst = out4_m; +- *(uint32_t *)(dst + 4) = out12_m; ++ __lsx_vstelm_d(in5, dst, 0, 0); ++ __lsx_vstelm_w(in5, dst, 8, 2); + dst += dst_stride; +- *(uint64_t *)dst = out5_m; +- *(uint32_t *)(dst + 4) = out13_m; ++ __lsx_vstelm_d(in6, dst, 0, 0); ++ __lsx_vstelm_w(in6, dst, 8, 2); + dst += dst_stride; +- *(uint64_t *)dst = out6_m; +- *(uint32_t *)(dst + 4) = out14_m; ++ __lsx_vstelm_d(in7, dst, 0, 0); ++ __lsx_vstelm_w(in7, dst, 8, 2); + dst += dst_stride; +- *(uint64_t *)dst = out7_m; +- *(uint32_t *)(dst + 4) = out15_m; ++ } ++ for (;res--;) { ++ src0 = __lsx_vld(src, 0); ++ in0 = __lsx_vsllwil_hu_bu(src0, 6); ++ src += src_stride; ++ __lsx_vstelm_d(in0, dst, 0, 0); ++ __lsx_vstelm_w(in0, dst, 8, 2); + dst += dst_stride; + } + } +@@ -170,85 +150,50 @@ static void hevc_copy_8w_lsx(uint8_t *src, int32_t src_stride, + int16_t *dst, int32_t dst_stride, + int32_t height) + { +- __m128i zero = {0}; + int32_t src_stride_2x = (src_stride << 1); +- int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t dst_stride_x = (dst_stride << 1); + int32_t src_stride_4x = (src_stride << 2); +- int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t dst_stride_2x = (dst_stride_x << 1); + int32_t src_stride_3x = src_stride_2x + src_stride; +- int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- +- if (2 == height) { +- __m128i src0, src1; +- __m128i in0, in1; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride_x; ++ int32_t loop_cnt = height >> 3; ++ int32_t res = height & 0x07; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i in0, in1, in2, in3, in4, in5, in6, in7; + +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); +- DUP2_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, in0, in1); +- DUP2_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in0, in1); +- __lsx_vst(in0, dst, 0); +- __lsx_vst(in1, dst + dst_stride, 0); +- } else if (4 == height) { +- __m128i src0, src1, src2, src3; +- __m128i in0, in1, in2, in3; ++ for (loop_cnt = (height >> 3); loop_cnt--;) { ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, ++ src1, src2); ++ src3 = __lsx_vldx(src, src_stride_3x); ++ src += src_stride_4x; ++ src4 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, ++ src5, src6); ++ src7 = __lsx_vldx(src, src_stride_3x); ++ src += src_stride_4x; + +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, + in0, in1, in2, in3); +- DUP4_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in2, 6, in3, 6, in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src4, 6, src5, 6, src6, 6, src7, 6, ++ in4, in5, in6, in7); + __lsx_vst(in0, dst, 0); +- __lsx_vst(in1, dst + dst_stride, 0); +- __lsx_vst(in2, dst + dst_stride_2x, 0); +- __lsx_vst(in3, dst + dst_stride_3x, 0); +- } else if (6 == height) { +- __m128i src0, src1, src2, src3, src4, src5; +- __m128i in0, in1, in2, in3, in4, in5; +- +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- src += src_stride_4x; +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); +- DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, in0, +- in1, in2, in3); +- DUP2_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, in4, in5); +- DUP4_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in2, 6, in3, 6, in0, in1, in2, in3); +- DUP2_ARG2(__lsx_vslli_h, in4, 6, in5, 6, in4, in5); ++ __lsx_vstx(in1, dst, dst_stride_x); ++ __lsx_vstx(in2, dst, dst_stride_2x); ++ __lsx_vstx(in3, dst, dst_stride_3x); ++ dst += dst_stride_2x; ++ __lsx_vst(in4, dst, 0); ++ __lsx_vstx(in5, dst, dst_stride_x); ++ __lsx_vstx(in6, dst, dst_stride_2x); ++ __lsx_vstx(in7, dst, dst_stride_3x); ++ dst += dst_stride_2x; ++ } ++ for (;res--;) { ++ src0 = __lsx_vld(src, 0); ++ in0 = __lsx_vsllwil_hu_bu(src0, 6); + __lsx_vst(in0, dst, 0); +- __lsx_vst(in1, dst + dst_stride, 0); +- __lsx_vst(in2, dst + dst_stride_2x, 0); +- __lsx_vst(in3, dst + dst_stride_3x, 0); +- __lsx_vst(in4, dst + dst_stride_4x, 0); +- __lsx_vst(in5, dst + dst_stride_4x + dst_stride, 0); +- } else if (0 == (height & 0x07)) { +- uint32_t loop_cnt; +- __m128i src0, src1, src2, src3, src4, src5, src6, src7; +- __m128i in0, in1, in2, in3, in4, in5, in6, in7; +- +- for (loop_cnt = (height >> 3); loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- src += src_stride_4x; +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); +- src += src_stride_4x; +- +- DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0, in1, in2, in3); +- DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, +- in4, in5, in6, in7); +- DUP4_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in2, 6, in3, 6, in0, in1, in2, in3); +- DUP4_ARG2(__lsx_vslli_h, in4, 6, in5, 6, in6, 6, in7, 6, in4, in5, in6, in7); +- __lsx_vst(in0, dst, 0); +- __lsx_vst(in1, dst + dst_stride, 0); +- __lsx_vst(in2, dst + dst_stride_2x, 0); +- __lsx_vst(in3, dst + dst_stride_3x, 0); +- dst += dst_stride_4x; +- __lsx_vst(in4, dst, 0); +- __lsx_vst(in5, dst + dst_stride, 0); +- __lsx_vst(in6, dst + dst_stride_2x, 0); +- __lsx_vst(in7, dst + dst_stride_3x, 0); +- dst += dst_stride_4x; +- } ++ src += src_stride; ++ dst += dst_stride; + } + } + +@@ -257,57 +202,70 @@ static void hevc_copy_12w_lsx(uint8_t *src, int32_t src_stride, + int32_t height) + { + uint32_t loop_cnt; ++ uint32_t res = height & 0x07; + int32_t src_stride_2x = (src_stride << 1); +- int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t dst_stride_x = (dst_stride << 1); + int32_t src_stride_4x = (src_stride << 2); +- int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t dst_stride_2x = (dst_stride_x << 1); + int32_t src_stride_3x = src_stride_2x + src_stride; +- int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- __m128i zero = {0}; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride_x; ++ __m128i zero = __lsx_vldi(0); + __m128i src0, src1, src2, src3, src4, src5, src6, src7; + __m128i in0, in1, in0_r, in1_r, in2_r, in3_r; + + for (loop_cnt = (height >> 3); loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src1, src2); ++ src3 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src4 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src5, src6); ++ src7 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; + +- DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, + in0_r, in1_r, in2_r, in3_r); +- DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); + DUP2_ARG2(__lsx_vilvh_w, src1, src0, src3, src2, src0, src1); +- DUP2_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, in0, in1); +- DUP2_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in0, in1); ++ DUP2_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, in0, in1); + __lsx_vst(in0_r, dst, 0); +- __lsx_vst(in1_r, dst + dst_stride, 0); +- __lsx_vst(in2_r, dst + dst_stride_2x, 0); +- __lsx_vst(in3_r, dst + dst_stride_3x, 0); ++ __lsx_vstx(in1_r, dst, dst_stride_x); ++ __lsx_vstx(in2_r, dst, dst_stride_2x); ++ __lsx_vstx(in3_r, dst, dst_stride_3x); + __lsx_vstelm_d(in0, dst, 16, 0); +- __lsx_vstelm_d(in0, dst + dst_stride, 16, 1); +- __lsx_vstelm_d(in1, dst + dst_stride_2x, 16, 0); +- __lsx_vstelm_d(in1, dst + dst_stride_3x, 16, 1); +- dst += dst_stride_4x; ++ dst += dst_stride; ++ __lsx_vstelm_d(in0, dst, 16, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(in1, dst, 16, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(in1, dst, 16, 1); ++ dst += dst_stride; + +- DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src4, 6, src5, 6, src6, 6, src7, 6, + in0_r, in1_r, in2_r, in3_r); +- DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); + DUP2_ARG2(__lsx_vilvh_w, src5, src4, src7, src6, src0, src1); +- DUP2_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, in0, in1); +- DUP2_ARG2(__lsx_vslli_h, in0, 6, in1, 6, in0, in1); ++ DUP2_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, in0, in1); + __lsx_vst(in0_r, dst, 0); +- __lsx_vst(in1_r, dst + dst_stride, 0); +- __lsx_vst(in2_r, dst + dst_stride_2x, 0); +- __lsx_vst(in3_r, dst + dst_stride_3x, 0); ++ __lsx_vstx(in1_r, dst, dst_stride_x); ++ __lsx_vstx(in2_r, dst, dst_stride_2x); ++ __lsx_vstx(in3_r, dst, dst_stride_3x); + __lsx_vstelm_d(in0, dst, 16, 0); +- __lsx_vstelm_d(in0, dst + dst_stride, 16, 1); +- __lsx_vstelm_d(in1, dst + dst_stride_2x, 16, 0); +- __lsx_vstelm_d(in1, dst + dst_stride_3x, 16, 1); +- dst += dst_stride_4x; ++ dst += dst_stride; ++ __lsx_vstelm_d(in0, dst, 16, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(in1, dst, 16, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(in1, dst, 16, 1); ++ dst += dst_stride; ++ } ++ for (;res--;) { ++ src0 = __lsx_vld(src, 0); ++ in0 = __lsx_vsllwil_hu_bu(src0, 6); ++ src1 = __lsx_vilvh_b(zero, src0); ++ in1 = __lsx_vslli_h(src1, 6); ++ __lsx_vst(in0, dst, 0); ++ __lsx_vstelm_d(in1, dst, 16, 0); ++ src += src_stride; ++ dst += dst_stride; + } + } + +@@ -315,153 +273,84 @@ static void hevc_copy_16w_lsx(uint8_t *src, int32_t src_stride, + int16_t *dst, int32_t dst_stride, + int32_t height) + { +- __m128i zero = {0}; ++ __m128i zero = __lsx_vldi(0); + int32_t src_stride_2x = (src_stride << 1); +- int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t dst_stride_x = (dst_stride << 1); + int32_t src_stride_4x = (src_stride << 2); +- int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t dst_stride_2x = (dst_stride << 2); + int32_t src_stride_3x = src_stride_2x + src_stride; +- int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- +- if (4 == height) { +- __m128i src0, src1, src2, src3; +- __m128i in0_r, in1_r, in2_r, in3_r; +- __m128i in0_l, in1_l, in2_l, in3_l; +- +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride_x; ++ int32_t loop_cnt = height >> 3; ++ int32_t res = height & 0x07; ++ int16_t* dst1 = dst + 8; ++ __m128i src0, src1, src2, src3, src4, src5, src6, src7; ++ __m128i in0_r, in1_r, in2_r, in3_r, in0_l, in1_l, in2_l, in3_l; + +- DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0_r, in1_r, in2_r, in3_r); +- DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0_l, in1_l, in2_l, in3_l); +- DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); +- DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, +- in1_l, in2_l, in3_l); +- __lsx_vst(in0_r, dst, 0); +- __lsx_vst(in1_r, dst + dst_stride, 0); +- __lsx_vst(in2_r, dst + dst_stride_2x, 0); +- __lsx_vst(in3_r, dst + dst_stride_3x, 0); +- __lsx_vst(in0_l, dst, 16); +- __lsx_vst(in1_l, dst + dst_stride, 16); +- __lsx_vst(in2_l, dst + dst_stride_2x, 16); +- __lsx_vst(in3_l, dst + dst_stride_3x, 16); +- } else if (12 == height) { +- __m128i src0, src1, src2, src3, src4, src5, src6, src7; +- __m128i src8, src9, src10, src11; +- __m128i in0_r, in1_r, in2_r, in3_r; +- __m128i in0_l, in1_l, in2_l, in3_l; +- +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ for (loop_cnt = (height >> 3); loop_cnt--;) { ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, ++ src1, src2); ++ src3 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src4 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, ++ src5, src6); ++ src7 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src8, src9, src10, src11); +- +- DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0_r, in1_r, in2_r, in3_r); + DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, + in0_l, in1_l, in2_l, in3_l); +- DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, ++ in0_r, in1_r, in2_r, in3_r); + DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, + in1_l, in2_l, in3_l); + __lsx_vst(in0_r, dst, 0); +- __lsx_vst(in1_r, dst + dst_stride, 0); +- __lsx_vst(in2_r, dst + dst_stride_2x, 0); +- __lsx_vst(in3_r, dst + dst_stride_3x, 0); +- __lsx_vst(in0_l, dst, 16); +- __lsx_vst(in1_l, dst + dst_stride, 16); +- __lsx_vst(in2_l, dst + dst_stride_2x, 16); +- __lsx_vst(in3_l, dst + dst_stride_3x, 16); +- dst += dst_stride_4x; ++ __lsx_vstx(in1_r, dst, dst_stride_x); ++ __lsx_vstx(in2_r, dst, dst_stride_2x); ++ __lsx_vstx(in3_r, dst, dst_stride_3x); ++ __lsx_vst(in0_l, dst1, 0); ++ __lsx_vstx(in1_l, dst1, dst_stride_x); ++ __lsx_vstx(in2_l, dst1, dst_stride_2x); ++ __lsx_vstx(in3_l, dst1, dst_stride_3x); ++ dst += dst_stride_2x; ++ dst1 += dst_stride_2x; + +- DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, +- in0_r, in1_r, in2_r, in3_r); + DUP4_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, zero, src6, zero, src7, + in0_l, in1_l, in2_l, in3_l); +- DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src4, 6, src5, 6, src6, 6, src7, 6, ++ in0_r, in1_r, in2_r, in3_r); + DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, + in1_l, in2_l, in3_l); + __lsx_vst(in0_r, dst, 0); +- __lsx_vst(in1_r, dst + dst_stride, 0); +- __lsx_vst(in2_r, dst + dst_stride_2x, 0); +- __lsx_vst(in3_r, dst + dst_stride_3x, 0); +- __lsx_vst(in0_l, dst, 16); +- __lsx_vst(in1_l, dst + dst_stride, 16); +- __lsx_vst(in2_l, dst + dst_stride_2x, 16); +- __lsx_vst(in3_l, dst + dst_stride_3x, 16); +- dst += dst_stride_4x; ++ __lsx_vstx(in1_r, dst, dst_stride_x); ++ __lsx_vstx(in2_r, dst, dst_stride_2x); ++ __lsx_vstx(in3_r, dst, dst_stride_3x); ++ __lsx_vst(in0_l, dst1, 0); ++ __lsx_vstx(in1_l, dst1, dst_stride_x); ++ __lsx_vstx(in2_l, dst1, dst_stride_2x); ++ __lsx_vstx(in3_l, dst1, dst_stride_3x); ++ dst += dst_stride_2x; ++ dst1 += dst_stride_2x; ++ } ++ if (res) { ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src1, src2); ++ src3 = __lsx_vldx(src, src_stride_3x); + +- DUP4_ARG2(__lsx_vilvl_b, zero, src8, zero, src9, zero, src10, zero, src11, +- in0_r, in1_r, in2_r, in3_r); +- DUP4_ARG2(__lsx_vilvh_b, zero, src8, zero, src9, zero, src10, zero, src11, ++ DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, + in0_l, in1_l, in2_l, in3_l); +- DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, ++ in0_r, in1_r, in2_r, in3_r); + DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, + in1_l, in2_l, in3_l); + __lsx_vst(in0_r, dst, 0); +- __lsx_vst(in1_r, dst + dst_stride, 0); +- __lsx_vst(in2_r, dst + dst_stride_2x, 0); +- __lsx_vst(in3_r, dst + dst_stride_3x, 0); +- __lsx_vst(in0_l, dst, 16); +- __lsx_vst(in1_l, dst + dst_stride, 16); +- __lsx_vst(in2_l, dst + dst_stride_2x, 16); +- __lsx_vst(in3_l, dst + dst_stride_3x, 16); +- } else if (0 == (height & 0x07)) { +- uint32_t loop_cnt; +- __m128i src0, src1, src2, src3, src4, src5, src6, src7; +- __m128i in0_r, in1_r, in2_r, in3_r, in0_l, in1_l, in2_l, in3_l; +- +- for (loop_cnt = (height >> 3); loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); +- src += src_stride_4x; +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src4, src5, src6, src7); +- src += src_stride_4x; +- DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0_r, in1_r, in2_r, in3_r); +- DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0_l, in1_l, in2_l, in3_l); +- DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); +- DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, +- in1_l, in2_l, in3_l); +- __lsx_vst(in0_r, dst, 0); +- __lsx_vst(in1_r, dst + dst_stride, 0); +- __lsx_vst(in2_r, dst + dst_stride_2x, 0); +- __lsx_vst(in3_r, dst + dst_stride_3x, 0); +- __lsx_vst(in0_l, dst, 16); +- __lsx_vst(in1_l, dst + dst_stride, 16); +- __lsx_vst(in2_l, dst + dst_stride_2x, 16); +- __lsx_vst(in3_l, dst + dst_stride_3x, 16); +- dst += dst_stride_4x; +- +- DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, +- in0_r, in1_r, in2_r, in3_r); +- DUP4_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, zero, src6, zero, src7, +- in0_l, in1_l, in2_l, in3_l); +- DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); +- DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, +- in1_l, in2_l, in3_l); +- __lsx_vst(in0_r, dst, 0); +- __lsx_vst(in1_r, dst + dst_stride, 0); +- __lsx_vst(in2_r, dst + dst_stride_2x, 0); +- __lsx_vst(in3_r, dst + dst_stride_3x, 0); +- __lsx_vst(in0_l, dst, 16); +- __lsx_vst(in1_l, dst + dst_stride, 16); +- __lsx_vst(in2_l, dst + dst_stride_2x, 16); +- __lsx_vst(in3_l, dst + dst_stride_3x, 16); +- dst += dst_stride_4x; +- } ++ __lsx_vstx(in1_r, dst, dst_stride_x); ++ __lsx_vstx(in2_r, dst, dst_stride_2x); ++ __lsx_vstx(in3_r, dst, dst_stride_3x); ++ dst += 8; ++ __lsx_vst(in0_l, dst, 0); ++ __lsx_vstx(in1_l, dst, dst_stride_x); ++ __lsx_vstx(in2_l, dst, dst_stride_2x); ++ __lsx_vstx(in3_l, dst, dst_stride_3x); + } + } + +@@ -471,46 +360,51 @@ static void hevc_copy_24w_lsx(uint8_t *src, int32_t src_stride, + { + uint32_t loop_cnt; + int32_t src_stride_2x = (src_stride << 1); +- int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t dst_stride_x = (dst_stride << 1); + int32_t src_stride_4x = (src_stride << 2); +- int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t dst_stride_2x = (dst_stride << 2); + int32_t src_stride_3x = src_stride_2x + src_stride; +- int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- __m128i zero = {0}; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride_x; ++ uint8_t *_src = src + 16; ++ int16_t *dst1 = dst; ++ __m128i zero = __lsx_vldi(0); + __m128i src0, src1, src2, src3, src4, src5, src6, src7; + __m128i in0_r, in1_r, in2_r, in3_r, in0_l, in1_l, in2_l, in3_l; + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- DUP4_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src + src_stride_2x, +- 16, src + src_stride_3x, 16, src4, src5, src6, src7); ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src1, src2); ++ src3 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ src4 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride_2x, ++ src5, src6); ++ src7 = __lsx_vldx(_src, src_stride_3x); ++ _src += src_stride_4x; ++ ++ DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, ++ src3, in0_l, in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, + in0_r, in1_r, in2_r, in3_r); +- DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, + in0_l, in1_l, in2_l, in3_l); +- DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); +- DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, +- in1_l, in2_l, in3_l); + __lsx_vst(in0_r, dst, 0); +- __lsx_vst(in1_r, dst + dst_stride, 0); +- __lsx_vst(in2_r, dst + dst_stride_2x, 0); +- __lsx_vst(in3_r, dst + dst_stride_3x, 0); +- __lsx_vst(in0_l, dst, 16); +- __lsx_vst(in1_l, dst + dst_stride, 16); +- __lsx_vst(in2_l, dst + dst_stride_2x, 16); +- __lsx_vst(in3_l, dst + dst_stride_3x, 16); +- DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ __lsx_vstx(in1_r, dst, dst_stride_x); ++ __lsx_vstx(in2_r, dst, dst_stride_2x); ++ __lsx_vstx(in3_r, dst, dst_stride_3x); ++ dst1 = dst + 8; ++ __lsx_vst(in0_l, dst1, 0); ++ __lsx_vstx(in1_l, dst1, dst_stride_x); ++ __lsx_vstx(in2_l, dst1, dst_stride_2x); ++ __lsx_vstx(in3_l, dst1, dst_stride_3x); ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src4, 6, src5, 6, src6, 6, src7, 6, + in0_r, in1_r, in2_r, in3_r); +- DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); +- __lsx_vst(in0_r, dst, 32); +- __lsx_vst(in1_r, dst + dst_stride, 32); +- __lsx_vst(in2_r, dst + dst_stride_2x, 32); +- __lsx_vst(in3_r, dst + dst_stride_3x, 32); +- dst += dst_stride_4x; ++ dst1 = dst1 + 8; ++ __lsx_vst(in0_r, dst1, 0); ++ __lsx_vstx(in1_r, dst1, dst_stride_x); ++ __lsx_vstx(in2_r, dst1, dst_stride_2x); ++ __lsx_vstx(in3_r, dst1, dst_stride_3x); ++ dst += dst_stride_2x; + } + } + +@@ -522,25 +416,28 @@ static void hevc_copy_32w_lsx(uint8_t *src, int32_t src_stride, + int32_t src_stride_2x = (src_stride << 1); + int32_t src_stride_4x = (src_stride << 2); + int32_t src_stride_3x = src_stride_2x + src_stride; ++ uint8_t *_src = src + 16; + __m128i zero = {0}; + __m128i src0, src1, src2, src3, src4, src5, src6, src7; + __m128i in0_r, in1_r, in2_r, in3_r, in0_l, in1_l, in2_l, in3_l; + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src2, src4, src6); +- DUP4_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src + src_stride_2x, +- 16, src + src_stride_3x, 16, src1, src3, src5, src7); ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src2, src4); ++ src6 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- +- DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ src1 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride_2x, ++ src3, src5); ++ src7 = __lsx_vldx(_src, src_stride_3x); ++ _src += src_stride_4x; ++ ++ DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, ++ src3, in0_l, in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, + in0_r, in1_r, in2_r, in3_r); +- DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, ++ DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, + in0_l, in1_l, in2_l, in3_l); +- DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); +- DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, +- in1_l, in2_l, in3_l); + __lsx_vst(in0_r, dst, 0); + __lsx_vst(in0_l, dst, 16); + __lsx_vst(in1_r, dst, 32); +@@ -552,12 +449,10 @@ static void hevc_copy_32w_lsx(uint8_t *src, int32_t src_stride, + __lsx_vst(in3_l, dst, 48); + dst += dst_stride; + +- DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, +- in0_r, in1_r, in2_r, in3_r); + DUP4_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, zero, src6, zero, src7, + in0_l, in1_l, in2_l, in3_l); +- DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src4, 6, src5, 6, src6, 6, src7, 6, ++ in0_r, in1_r, in2_r, in3_r); + DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, + in1_l, in2_l, in3_l); + __lsx_vst(in0_r, dst, 0); +@@ -598,18 +493,15 @@ static void hevc_copy_48w_lsx(uint8_t *src, int32_t src_stride, + src11 = __lsx_vld(src, 32); + src += src_stride; + +- DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0_r, in1_r, in2_r, in3_r); +- DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0_l, in1_l, in2_l, in3_l); +- DUP2_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, in4_r, in5_r); ++ DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, ++ src3, in0_l, in1_l, in2_l, in3_l); + DUP2_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, in4_l, in5_l); +- DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, ++ in0_r, in1_r, in2_r, in3_r); + DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, + in1_l, in2_l, in3_l); +- DUP4_ARG2(__lsx_vslli_h, in4_r, 6, in5_r, 6, in4_l, 6, in5_l, 6, in4_r, +- in5_r, in4_l, in5_l); ++ DUP2_ARG2(__lsx_vsllwil_hu_bu, src4, 6, src5, 6, in4_r, in5_r); ++ DUP2_ARG2(__lsx_vslli_h, in4_l, 6, in5_l, 6, in4_l, in5_l); + __lsx_vst(in0_r, dst, 0); + __lsx_vst(in0_l, dst, 16); + __lsx_vst(in1_r, dst, 32); +@@ -625,18 +517,15 @@ static void hevc_copy_48w_lsx(uint8_t *src, int32_t src_stride, + __lsx_vst(in5_l, dst, 80); + dst += dst_stride; + +- DUP4_ARG2(__lsx_vilvl_b, zero, src6, zero, src7, zero, src8, zero, src9, +- in0_r, in1_r, in2_r, in3_r); + DUP4_ARG2(__lsx_vilvh_b, zero, src6, zero, src7, zero, src8, zero, src9, + in0_l, in1_l, in2_l, in3_l); +- DUP2_ARG2(__lsx_vilvl_b, zero, src10, zero, src11, in4_r, in5_r); + DUP2_ARG2(__lsx_vilvh_b, zero, src10, zero, src11, in4_l, in5_l); +- DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src6, 6, src7, 6, src8, 6, src9, 6, ++ in0_r, in1_r, in2_r, in3_r); + DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, + in1_l, in2_l, in3_l); +- DUP4_ARG2(__lsx_vslli_h, in4_r, 6, in5_r, 6, in4_l, 6, in5_l, 6, in4_r, +- in5_r, in4_l, in5_l); ++ DUP2_ARG2(__lsx_vsllwil_hu_bu, src10, 6, src11, 6, in4_r, in5_r); ++ DUP2_ARG2(__lsx_vslli_h, in4_l, 6, in5_l, 6, in4_l, in5_l); + __lsx_vst(in0_r, dst, 0); + __lsx_vst(in0_l, dst, 16); + __lsx_vst(in1_r, dst, 32); +@@ -665,19 +554,19 @@ static void hevc_copy_64w_lsx(uint8_t *src, int32_t src_stride, + + + for (loop_cnt = (height >> 1); loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, ++ src0, src1, src2, src3); + src += src_stride; +- DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, ++ src4, src5, src6, src7); + src += src_stride; + +- DUP4_ARG2(__lsx_vilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0_r, in1_r, in2_r, in3_r); +- DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, +- in0_l, in1_l, in2_l, in3_l); +- DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); +- DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, +- in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vilvh_b, zero, src0, zero, src1, zero, src2, zero, ++ src3, in0_l, in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src0, 6, src1, 6, src2, 6, src3, 6, ++ in0_r, in1_r, in2_r, in3_r); ++ DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, ++ in0_l, in1_l, in2_l, in3_l); + __lsx_vst(in0_r, dst, 0); + __lsx_vst(in0_l, dst, 16); + __lsx_vst(in1_r, dst, 32); +@@ -688,12 +577,10 @@ static void hevc_copy_64w_lsx(uint8_t *src, int32_t src_stride, + __lsx_vst(in3_l, dst, 112); + dst += dst_stride; + +- DUP4_ARG2(__lsx_vilvl_b, zero, src4, zero, src5, zero, src6, zero, src7, ++ DUP4_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, zero, src6, zero, ++ src7, in0_l, in1_l, in2_l, in3_l); ++ DUP4_ARG2(__lsx_vsllwil_hu_bu, src4, 6, src5, 6, src6, 6, src7, 6, + in0_r, in1_r, in2_r, in3_r); +- DUP4_ARG2(__lsx_vilvh_b, zero, src4, zero, src5, zero, src6, zero, src7, +- in0_l, in1_l, in2_l, in3_l); +- DUP4_ARG2(__lsx_vslli_h, in0_r, 6, in1_r, 6, in2_r, 6, in3_r, 6, in0_r, +- in1_r, in2_r, in3_r); + DUP4_ARG2(__lsx_vslli_h, in0_l, 6, in1_l, 6, in2_l, 6, in3_l, 6, in0_l, + in1_l, in2_l, in3_l); + __lsx_vst(in0_r, dst, 0); +@@ -712,7 +599,8 @@ static void hevc_hz_8t_4w_lsx(uint8_t *src, int32_t src_stride, + int16_t *dst, int32_t dst_stride, + const int8_t *filter, int32_t height) + { +- uint32_t loop_cnt; ++ uint32_t loop_cnt = height >> 3; ++ uint32_t res = (height & 0x7) >> 1; + int32_t src_stride_2x = (src_stride << 1); + int32_t dst_stride_2x = (dst_stride << 1); + int32_t src_stride_4x = (src_stride << 2); +@@ -724,44 +612,48 @@ static void hevc_hz_8t_4w_lsx(uint8_t *src, int32_t src_stride, + __m128i mask1, mask2, mask3; + __m128i vec0, vec1, vec2, vec3; + __m128i dst0, dst1, dst2, dst3; +- __m128i const_vec; + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 16); + + src -= 3; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filt0, filt1, filt2, filt3); + + DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + +- for (loop_cnt = (height >> 3); loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); ++ for (;loop_cnt--;) { ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src1, src2); ++ src3 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ src4 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src5, src6); ++ src7 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); +- DUP4_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src6, 128, src7, 128, +- src4, src5, src6, src7); +- DUP4_ARG3(__lsx_vshuf_b, src1, src0, mask0, src1, src0, mask1, src1, src0, +- mask2, src1, src0, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, +- vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); +- DUP4_ARG3(__lsx_vshuf_b, src3, src2, mask0, src3, src2, mask1, src3, src2, +- mask2, src3, src2, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst1, vec1, filt1, dst1, +- vec2, filt2, dst1, vec3, filt3, dst1, dst1, dst1, dst1); +- DUP4_ARG3(__lsx_vshuf_b, src5, src4, mask0, src5, src4, mask1, src5, src4, +- mask2, src5, src4, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst2, vec1, filt1, dst2, +- vec2, filt2, dst2, vec3, filt3, dst2, dst2, dst2, dst2); +- DUP4_ARG3(__lsx_vshuf_b, src7, src6, mask0, src7, src6, mask1, src7, src6, +- mask2, src7, src6, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, dst3, +- vec2, filt2, dst3, vec3, filt3, dst3, dst3, dst3, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src0, mask0, src1, src0, mask1, src1, ++ src0, mask2, src1, src0, mask3, vec0, vec1, vec2, vec3); ++ dst0 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst0, vec2, filt2, ++ dst0, dst0); ++ dst0 = __lsx_vdp2add_h_bu_b(dst0, vec3, filt3); ++ DUP4_ARG3(__lsx_vshuf_b, src3, src2, mask0, src3, src2, mask1, src3, ++ src2, mask2, src3, src2, mask3, vec0, vec1, vec2, vec3); ++ dst1 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst1, vec1, filt1, dst1, vec2, filt2, ++ dst1, dst1); ++ dst1 = __lsx_vdp2add_h_bu_b(dst1, vec3, filt3); ++ DUP4_ARG3(__lsx_vshuf_b, src5, src4, mask0, src5, src4, mask1, src5, ++ src4, mask2, src5, src4, mask3, vec0, vec1, vec2, vec3); ++ dst2 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst2, vec1, filt1, dst2, vec2, filt2, ++ dst2, dst2); ++ dst2 = __lsx_vdp2add_h_bu_b(dst2, vec3, filt3); ++ DUP4_ARG3(__lsx_vshuf_b, src7, src6, mask0, src7, src6, mask1, src7, ++ src6, mask2, src7, src6, mask3, vec0, vec1, vec2, vec3); ++ dst3 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst3, vec1, filt1, dst3, vec2, filt2, ++ dst3, dst3); ++ dst3 = __lsx_vdp2add_h_bu_b(dst3, vec3, filt3); + + __lsx_vstelm_d(dst0, dst, 0, 0); + __lsx_vstelm_d(dst0, dst + dst_stride, 0, 1); +@@ -774,6 +666,20 @@ static void hevc_hz_8t_4w_lsx(uint8_t *src, int32_t src_stride, + __lsx_vstelm_d(dst3, dst + dst_stride_3x, 0, 1); + dst += dst_stride_4x; + } ++ for (;res--;) { ++ src0 = __lsx_vld(src, 0); ++ src1 = __lsx_vldx(src, src_stride); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src0, mask0, src1, src0, mask1, src1, ++ src0, mask2, src1, src0, mask3, vec0, vec1, vec2, vec3); ++ dst0 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst0, vec2, filt2, ++ dst0, dst0); ++ dst0 = __lsx_vdp2add_h_bu_b(dst0, vec3, filt3); ++ __lsx_vstelm_d(dst0, dst, 0, 0); ++ __lsx_vstelm_d(dst0, dst + dst_stride, 0, 1); ++ src += src_stride_2x; ++ dst += dst_stride_2x; ++ } + } + + static void hevc_hz_8t_8w_lsx(uint8_t *src, int32_t src_stride, +@@ -782,56 +688,61 @@ static void hevc_hz_8t_8w_lsx(uint8_t *src, int32_t src_stride, + { + uint32_t loop_cnt; + int32_t src_stride_2x = (src_stride << 1); +- int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t dst_stride_x = (dst_stride << 1); + int32_t src_stride_4x = (src_stride << 2); +- int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t dst_stride_2x = (dst_stride << 2); + int32_t src_stride_3x = src_stride_2x + src_stride; +- int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride_x; + __m128i src0, src1, src2, src3; + __m128i filt0, filt1, filt2, filt3; + __m128i mask1, mask2, mask3; + __m128i vec0, vec1, vec2, vec3; + __m128i dst0, dst1, dst2, dst3; +- __m128i const_vec; + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + + src -= 3; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filt0, filt1, filt2, filt3); + + DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src1, src2); ++ src3 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); + +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, +- mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, +- vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); +- DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, +- mask2, src1, src1, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst1, vec1, filt1, dst1, +- vec2, filt2, dst1, vec3, filt3, dst1, dst1, dst1, dst1); +- DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, +- mask2, src2, src2, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst2, vec1, filt1, dst2, +- vec2, filt2, dst2, vec3, filt3, dst2, dst2, dst2, dst2); +- DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, +- mask2, src3, src3, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, dst3, +- vec2, filt2, dst3, vec3, filt3, dst3, dst3, dst3, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, ++ src0, mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ dst0 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst0, vec2, filt2, ++ dst0, dst0); ++ dst0 = __lsx_vdp2add_h_bu_b(dst0, vec3, filt3); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, ++ src1, mask2, src1, src1, mask3, vec0, vec1, vec2, vec3); ++ dst1 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst1, vec1, filt1, dst1, vec2, filt2, ++ dst1, dst1); ++ dst1 = __lsx_vdp2add_h_bu_b(dst1, vec3, filt3); ++ DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, ++ src2, mask2, src2, src2, mask3, vec0, vec1, vec2, vec3); ++ dst2 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst2, vec1, filt1, dst2, vec2, filt2, ++ dst2, dst2); ++ dst2 = __lsx_vdp2add_h_bu_b(dst2, vec3, filt3); ++ DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, ++ src3, mask2, src3, src3, mask3, vec0, vec1, vec2, vec3); ++ dst3 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst3, vec1, filt1, dst3, vec2, filt2, ++ dst3, dst3); ++ dst3 = __lsx_vdp2add_h_bu_b(dst3, vec3, filt3); + + __lsx_vst(dst0, dst, 0); +- __lsx_vst(dst1, dst + dst_stride, 0); +- __lsx_vst(dst2, dst + dst_stride_2x, 0); +- __lsx_vst(dst3, dst + dst_stride_3x, 0); +- dst += dst_stride_4x; ++ __lsx_vstx(dst1, dst, dst_stride_x); ++ __lsx_vstx(dst2, dst, dst_stride_2x); ++ __lsx_vstx(dst3, dst, dst_stride_3x); ++ dst += dst_stride_2x; + } + } + +@@ -841,21 +752,18 @@ static void hevc_hz_8t_12w_lsx(uint8_t *src, int32_t src_stride, + { + uint32_t loop_cnt; + int32_t src_stride_2x = (src_stride << 1); +- int32_t dst_stride_2x = (dst_stride << 1); + int32_t src_stride_4x = (src_stride << 2); +- int32_t dst_stride_4x = (dst_stride << 2); + int32_t src_stride_3x = src_stride_2x + src_stride; +- int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ uint8_t *_src; + __m128i src0, src1, src2, src3, src4, src5, src6, src7; + __m128i mask0, mask1, mask2, mask3, mask4, mask5, mask6, mask7; + __m128i vec0, vec1, vec2, vec3, vec4, vec5; + __m128i filt0, filt1, filt2, filt3, dst0, dst1, dst2, dst3, dst4, dst5; +- __m128i const_vec; + + src -= 3; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ _src = src + 8; ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filt0, filt1, filt2, filt3); + + mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); +@@ -865,55 +773,69 @@ static void hevc_hz_8t_12w_lsx(uint8_t *src, int32_t src_stride, + mask7 = __lsx_vaddi_bu(mask4, 6); + + for (loop_cnt = 4; loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); +- DUP4_ARG2(__lsx_vld, src, 8, src + src_stride, 8, src + src_stride_2x, 8, +- src + src_stride_3x, 8, src4, src5, src6, src7); ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src1, src2); ++ src3 = __lsx_vldx(src, src_stride_3x); ++ src4 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride_2x, ++ src5, src6); ++ src7 = __lsx_vldx(_src, src_stride_3x); + src += src_stride_4x; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- DUP4_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src6, 128, src7, 128, src4, +- src5, src6, src7); +- +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, vec2, vec3); +- DUP2_ARG3(__lsx_vshuf_b, src5, src4, mask4, src7, src6, mask4, vec4, vec5); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, +- dst3); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, const_vec, vec5, filt0, ++ _src += src_stride_4x; ++ ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, ++ vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src5, src4, mask4, src7, src6, mask4, ++ vec4, vec5); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec1, filt0, vec2, filt0, ++ vec3, filt0, dst0, dst1, dst2, dst3); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, vec4, filt0, vec5, filt0, dst4, dst5); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, ++ vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src5, src4, mask5, src7, src6, mask5, ++ vec4, vec5); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec0, filt1, dst1, vec1, filt1, ++ dst2, vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst4, vec4, filt1, dst5, vec5, filt1, ++ dst4, dst5); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, ++ vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src5, src4, mask6, src7, src6, mask6, ++ vec4, vec5); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec0, filt2, dst1, vec1, filt2, ++ dst2, vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst4, vec4, filt2, dst5, vec5, filt2, ++ dst4, dst5); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, ++ vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src5, src4, mask7, src7, src6, mask7, ++ vec4, vec5); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec0, filt3, dst1, vec1, filt3, ++ dst2, vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst4, vec4, filt3, dst5, vec5, filt3, + dst4, dst5); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, vec2, vec3); +- DUP2_ARG3(__lsx_vshuf_b, src5, src4, mask5, src7, src6, mask5, vec4, vec5); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vdp2add_h_b, dst4, vec4, filt1, dst5, vec5, filt1, dst4, dst5); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, vec2, vec3); +- DUP2_ARG3(__lsx_vshuf_b, src5, src4, mask6, src7, src6, mask6, vec4, vec5); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, +- vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vdp2add_h_b, dst4, vec4, filt2, dst5, vec5, filt2, dst4, dst5); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, vec2, vec3); +- DUP2_ARG3(__lsx_vshuf_b, src5, src4, mask7, src7, src6, mask7, vec4, vec5); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, +- vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vdp2add_h_b, dst4, vec4, filt3, dst5, vec5, filt3, dst4, dst5); + + __lsx_vst(dst0, dst, 0); +- __lsx_vst(dst1, dst + dst_stride, 0); +- __lsx_vst(dst2, dst + dst_stride_2x, 0); +- __lsx_vst(dst3, dst + dst_stride_3x, 0); +- + __lsx_vstelm_d(dst4, dst, 16, 0); +- __lsx_vstelm_d(dst4, dst + dst_stride, 16, 1); +- __lsx_vstelm_d(dst5, dst + dst_stride_2x, 16, 0); +- __lsx_vstelm_d(dst5, dst + dst_stride_3x, 16, 1); +- dst += dst_stride_4x; ++ dst += dst_stride; ++ __lsx_vst(dst1, dst, 0); ++ __lsx_vstelm_d(dst4, dst, 16, 1); ++ dst += dst_stride; ++ __lsx_vst(dst2, dst, 0); ++ __lsx_vstelm_d(dst5, dst, 16, 0); ++ dst += dst_stride; ++ __lsx_vst(dst3, dst, 0); ++ __lsx_vstelm_d(dst5, dst, 16, 1); ++ dst += dst_stride; + } +- + } + + static void hevc_hz_8t_16w_lsx(uint8_t *src, int32_t src_stride, +@@ -921,18 +843,14 @@ static void hevc_hz_8t_16w_lsx(uint8_t *src, int32_t src_stride, + const int8_t *filter, int32_t height) + { + uint32_t loop_cnt; +- int32_t src_stride_2x = (src_stride << 1); +- int32_t dst_stride_2x = (dst_stride << 1); + __m128i src0, src1, src2, src3; + __m128i filt0, filt1, filt2, filt3; + __m128i mask1, mask2, mask3; + __m128i vec0, vec1, vec2, vec3; + __m128i dst0, dst1, dst2, dst3; +- __m128i const_vec; + __m128i mask0; + + src -= 3; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, + filt0, filt1, filt2, filt3); +@@ -941,35 +859,42 @@ static void hevc_hz_8t_16w_lsx(uint8_t *src, int32_t src_stride, + mask3 = __lsx_vaddi_bu(mask0, 6); + + for (loop_cnt = (height >> 1); loop_cnt--;) { +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src2); +- DUP2_ARG2(__lsx_vld, src, 8, src + src_stride, 8, src1, src3); +- src += src_stride_2x; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, +- dst3); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, +- vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, +- vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ DUP2_ARG2(__lsx_vld, src, 0, src, 8, src0, src1); ++ src += src_stride; ++ DUP2_ARG2(__lsx_vld, src, 0, src, 8, src2, src3); ++ src += src_stride; ++ ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, ++ vec2, vec3); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec1, filt0, vec2, filt0, ++ vec3, filt0, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, ++ vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec0, filt1, dst1, vec1, filt1, ++ dst2, vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, ++ vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec0, filt2, dst1, vec1, filt2, ++ dst2, vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, ++ vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec0, filt3, dst1, vec1, filt3, ++ dst2, vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); + + __lsx_vst(dst0, dst, 0); +- __lsx_vst(dst2, dst + dst_stride, 0); + __lsx_vst(dst1, dst, 16); +- __lsx_vst(dst3, dst + dst_stride, 16); +- dst += dst_stride_2x; ++ dst += dst_stride; ++ __lsx_vst(dst2, dst, 0); ++ __lsx_vst(dst3, dst, 16); ++ dst += dst_stride; + } + } + +@@ -983,52 +908,54 @@ static void hevc_hz_8t_24w_lsx(uint8_t *src, int32_t src_stride, + __m128i mask1, mask2, mask3, mask4, mask5, mask6, mask7; + __m128i vec0, vec1, vec2, vec3, vec4, vec5; + __m128i dst0, dst1, dst2, dst3, dst4, dst5; +- __m128i const_vec; + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + + src -= 3; +- DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filt0, filt1, filt2, filt3); + +- DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, +- mask3, mask4); ++ DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, ++ mask2, mask3, mask4); + DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); + mask7 = __lsx_vaddi_bu(mask0, 14); +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + for (loop_cnt = (height >> 1); loop_cnt--;) { + DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src1); + src += src_stride; + DUP2_ARG2(__lsx_vld, src, 0, src, 16, src2, src3); + src += src_stride; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); + +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, src1, src1, +- mask0, src2, src2, mask0, vec0, vec1, vec2, vec3); +- DUP2_ARG3(__lsx_vshuf_b, src3, src2, mask4, src3, src3, mask0, vec4, vec5); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, const_vec, vec5, filt0, ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, src1, ++ src1, mask0, src2, src2, mask0, vec0, vec1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src3, src2, mask4, src3, src3, mask0, ++ vec4, vec5); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec1, filt0, vec2, filt0, ++ vec3, filt0, dst0, dst1, dst2, dst3); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, vec4, filt0, vec5, filt0, dst4, dst5); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, src1, ++ src1, mask1, src2, src2, mask1, vec0, vec1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src3, src2, mask5, src3, src3, mask1, ++ vec4, vec5); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec0, filt1, dst1, vec1, filt1, ++ dst2, vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst4, vec4, filt1, dst5, vec5, filt1, ++ dst4, dst5); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, src1, ++ src1, mask2, src2, src2, mask2, vec0, vec1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src3, src2, mask6, src3, src3, mask2, ++ vec4, vec5); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec0, filt2, dst1, vec1, filt2, ++ dst2, vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst4, vec4, filt2, dst5, vec5, filt2, ++ dst4, dst5); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, src1, ++ src1, mask3, src2, src2, mask3, vec0, vec1, vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src3, src2, mask7, src3, src3, mask3, ++ vec4, vec5); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec0, filt3, dst1, vec1, filt3, ++ dst2, vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst4, vec4, filt3, dst5, vec5, filt3, + dst4, dst5); +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, src1, src1, +- mask1, src2, src2, mask1, vec0, vec1, vec2, vec3); +- DUP2_ARG3(__lsx_vshuf_b, src3, src2, mask5, src3, src3, mask1, vec4, vec5); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vdp2add_h_b, dst4, vec4, filt1, dst5, vec5, filt1, dst4, dst5); +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, src1, src1, +- mask2, src2, src2, mask2, vec0, vec1, vec2, vec3); +- DUP2_ARG3(__lsx_vshuf_b, src3, src2, mask6, src3, src3, mask2, vec4, vec5); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, +- vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vdp2add_h_b, dst4, vec4, filt2, dst5, vec5, filt2, dst4, dst5); +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, src1, src1, +- mask3, src2, src2, mask3, vec0, vec1, vec2, vec3); +- DUP2_ARG3(__lsx_vshuf_b, src3, src2, mask7, src3, src3, mask3, vec4, vec5); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, +- vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); +- DUP2_ARG3(__lsx_vdp2add_h_b, dst4, vec4, filt3, dst5, vec5, filt3, dst4, dst5); + + __lsx_vst(dst0, dst, 0); + __lsx_vst(dst1, dst, 16); +@@ -1051,43 +978,47 @@ static void hevc_hz_8t_32w_lsx(uint8_t *src, int32_t src_stride, + __m128i mask1, mask2, mask3, mask4, mask5, mask6, mask7; + __m128i vec0, vec1, vec2, vec3; + __m128i dst0, dst1, dst2, dst3; +- __m128i const_vec; + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + + src -= 3; +- DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filt0, filt1, filt2, filt3); + +- DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, +- mask3, mask4); ++ DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, ++ mask1, mask2, mask3, mask4); + DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); + mask7 = __lsx_vaddi_bu(mask0, 14); +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + for (loop_cnt = height; loop_cnt--;) { + DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src1); + src2 = __lsx_vld(src, 24); + src += src_stride; +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- src2 = __lsx_vxori_b(src2, 128); +- +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, +- mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, +- vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); +- +- DUP4_ARG3(__lsx_vshuf_b, src1, src0, mask4, src1, src0, mask5, src1, src0, +- mask6, src1, src0, mask7, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst1, vec1, filt1, dst1, +- vec2, filt2, dst1, vec3, filt3, dst1, dst1, dst1, dst1); ++ ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, ++ src0, mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ dst0 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst0, vec2, filt2, ++ dst0, dst0); ++ dst0 = __lsx_vdp2add_h_bu_b(dst0, vec3, filt3); ++ ++ DUP4_ARG3(__lsx_vshuf_b, src1, src0, mask4, src1, src0, mask5, src1, ++ src0, mask6, src1, src0, mask7, vec0, vec1, vec2, vec3); ++ dst1 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst1, vec1, filt1, dst1, vec2, filt2, ++ dst1, dst1); ++ dst1 = __lsx_vdp2add_h_bu_b(dst1, vec3, filt3); + DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, + mask2, src1, src1, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst2, vec1, filt1, dst2, +- vec2, filt2, dst2, vec3, filt3, dst2, dst2, dst2, dst2); ++ dst2 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst2, vec1, filt1, dst2, vec2, filt2, ++ dst2, dst2); ++ dst2 = __lsx_vdp2add_h_bu_b(dst2, vec3, filt3); + DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, + mask2, src2, src2, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, dst3, +- vec2, filt2, dst3, vec3, filt3, dst3, dst3, dst3, dst3); ++ dst3 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst3, vec1, filt1, dst3, vec2, filt2, ++ dst3, dst3); ++ dst3 = __lsx_vdp2add_h_bu_b(dst3, vec3, filt3); + + __lsx_vst(dst0, dst, 0); + __lsx_vst(dst1, dst, 16); +@@ -1107,58 +1038,59 @@ static void hevc_hz_8t_48w_lsx(uint8_t *src, int32_t src_stride, + __m128i mask1, mask2, mask3, mask4, mask5, mask6, mask7; + __m128i vec0, vec1, vec2, vec3, vec4, vec5; + __m128i dst0, dst1, dst2, dst3, dst4, dst5; +- __m128i const_vec; + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + + src -= 3; +- DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filt0, filt1, filt2, filt3); + +- DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, +- mask3, mask4); ++ DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, ++ mask2, mask3, mask4); + DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6); + mask7 = __lsx_vaddi_bu(mask0, 14); +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + for (loop_cnt = height; loop_cnt--;) { + DUP2_ARG2(__lsx_vld, src, 0, src, 16, src0, src1); + src2 = __lsx_vld(src, 32); + src3 = __lsx_vld(src, 40); + src += src_stride; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); + + DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask4, src1, src1, + mask0, src2, src1, mask4, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, +- dst3); +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, src1, src1, +- mask1, src2, src1, mask5, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, src1, src1, +- mask2, src2, src1, mask6, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt2, dst1, vec1, filt2, dst2, +- vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, src1, src1, +- mask3, src2, src1, mask7, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt3, dst1, vec1, filt3, dst2, +- vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec1, filt0, vec2, filt0, ++ vec3, filt0, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask5, src1, ++ src1, mask1, src2, src1, mask5, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec0, filt1, dst1, vec1, filt1, ++ dst2, vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src0, mask6, src1, ++ src1, mask2, src2, src1, mask6, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec0, filt2, dst1, vec1, filt2, ++ dst2, vec2, filt2, dst3, vec3, filt2, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src0, mask7, src1, ++ src1, mask3, src2, src1, mask7, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec0, filt3, dst1, vec1, filt3, ++ dst2, vec2, filt3, dst3, vec3, filt3, dst0, dst1, dst2, dst3); + __lsx_vst(dst0, dst, 0); + __lsx_vst(dst1, dst, 16); + __lsx_vst(dst2, dst, 32); + __lsx_vst(dst3, dst, 48); + +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, vec4, vec5); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, const_vec, vec5, filt0, ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src3, src3, mask0, ++ vec4, vec5); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, vec4, filt0, vec5, filt0, dst4, dst5); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, ++ vec4, vec5); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst4, vec4, filt1, dst5, vec5, filt1, ++ dst4, dst5); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, ++ vec4, vec5); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst4, vec4, filt2, dst5, vec5, filt2, ++ dst4, dst5); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, ++ vec4, vec5); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst4, vec4, filt3, dst5, vec5, filt3, + dst4, dst5); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask1, src3, src3, mask1, vec4, vec5); +- DUP2_ARG3(__lsx_vdp2add_h_b, dst4, vec4, filt1, dst5, vec5, filt1, dst4, dst5); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask2, src3, src3, mask2, vec4, vec5); +- DUP2_ARG3(__lsx_vdp2add_h_b, dst4, vec4, filt2, dst5, vec5, filt2, dst4, dst5); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask3, src3, src3, mask3, vec4, vec5); +- DUP2_ARG3(__lsx_vdp2add_h_b, dst4, vec4, filt3, dst5, vec5, filt3, dst4, dst5); + __lsx_vst(dst4, dst, 64); + __lsx_vst(dst5, dst, 80); + dst += dst_stride; +@@ -1175,73 +1107,85 @@ static void hevc_hz_8t_64w_lsx(uint8_t *src, int32_t src_stride, + __m128i mask1, mask2, mask3, mask4, mask5, mask6, mask7; + __m128i vec0, vec1, vec2, vec3; + __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; +- __m128i const_vec; + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + + src -= 3; +- DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filt0, filt1, filt2, filt3); + +- DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, mask2, +- mask3, mask4); ++ DUP4_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask0, 6, mask0, 8, mask1, ++ mask2, mask3, mask4); + DUP2_ARG2(__lsx_vaddi_bu, mask0, 10, mask0, 12, mask5, mask6) + mask7 = __lsx_vaddi_bu(mask0, 14); +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + for (loop_cnt = height; loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, ++ src0, src1, src2, src3); + src4 = __lsx_vld(src, 56); + src += src_stride; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- src4 = __lsx_vxori_b(src4, 128); +- +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, +- mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, +- vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); ++ ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, ++ src0, mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ dst0 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst0, vec2, filt2, ++ dst0, dst0); ++ dst0 = __lsx_vdp2add_h_bu_b(dst0, vec3, filt3); + __lsx_vst(dst0, dst, 0); + +- DUP4_ARG3(__lsx_vshuf_b, src1, src0, mask4, src1, src0, mask5, src1, src0, +- mask6, src1, src0, mask7, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst1, vec1, filt1, dst1, +- vec2, filt2, dst1, vec3, filt3, dst1, dst1, dst1, dst1); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src0, mask4, src1, src0, mask5, src1, ++ src0, mask6, src1, src0, mask7, vec0, vec1, vec2, vec3); ++ dst1 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst1, vec1, filt1, dst1, vec2, filt2, ++ dst1, dst1); ++ dst1 = __lsx_vdp2add_h_bu_b(dst1, vec3, filt3); + __lsx_vst(dst1, dst, 16); + +- DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, +- mask2, src1, src1, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst2, vec1, filt1, dst2, +- vec2, filt2, dst2, vec3, filt3, dst2, dst2, dst2, dst2); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, ++ src1, mask2, src1, src1, mask3, vec0, vec1, vec2, vec3); ++ dst2 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst2, vec1, filt1, dst2, vec2, filt2, ++ dst2, dst2); ++ dst2 = __lsx_vdp2add_h_bu_b(dst2, vec3, filt3); + __lsx_vst(dst2, dst, 32); + +- DUP4_ARG3(__lsx_vshuf_b, src2, src1, mask4, src2, src1, mask5, src2, src1, +- mask6, src2, src1, mask7, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, dst3, +- vec2, filt2, dst3, vec3, filt3, dst3, dst3, dst3, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src2, src1, mask4, src2, src1, mask5, src2, ++ src1, mask6, src2, src1, mask7, vec0, vec1, vec2, vec3); ++ dst3 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst3, vec1, filt1, dst3, vec2, filt2, ++ dst3, dst3); ++ dst3 = __lsx_vdp2add_h_bu_b(dst3, vec3, filt3); + __lsx_vst(dst3, dst, 48); + +- DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, +- mask2, src2, src2, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst4, vec1, filt1, dst4, +- vec2, filt2, dst4, vec3, filt3, dst4, dst4, dst4, dst4); ++ DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, ++ src2, mask2, src2, src2, mask3, vec0, vec1, vec2, vec3); ++ dst4 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst4, vec1, filt1, dst4, vec2, filt2, ++ dst4, dst4); ++ dst4 = __lsx_vdp2add_h_bu_b(dst4, vec3, filt3); + __lsx_vst(dst4, dst, 64); + +- DUP4_ARG3(__lsx_vshuf_b, src3, src2, mask4, src3, src2, mask5, src3, src2, +- mask6, src3, src2, mask7, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst5, vec1, filt1, dst5, +- vec2, filt2, dst5, vec3, filt3, dst5, dst5, dst5, dst5); ++ DUP4_ARG3(__lsx_vshuf_b, src3, src2, mask4, src3, src2, mask5, src3, ++ src2, mask6, src3, src2, mask7, vec0, vec1, vec2, vec3); ++ dst5 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst5, vec1, filt1, dst5, vec2, filt2, ++ dst5, dst5); ++ dst5 = __lsx_vdp2add_h_bu_b(dst5, vec3, filt3); + __lsx_vst(dst5, dst, 80); + +- DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, +- mask2, src3, src3, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst6, vec1, filt1, dst6, +- vec2, filt2, dst6, vec3, filt3, dst6, dst6, dst6, dst6); ++ DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, ++ src3, mask2, src3, src3, mask3, vec0, vec1, vec2, vec3); ++ dst6 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst6, vec1, filt1, dst6, vec2, filt2, ++ dst6, dst6); ++ dst6 = __lsx_vdp2add_h_bu_b(dst6, vec3, filt3); + __lsx_vst(dst6, dst, 96); + +- DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, +- mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst7, vec1, filt1, dst7, +- vec2, filt2, dst7, vec3, filt3, dst7, dst7, dst7, dst7); ++ DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, ++ src4, mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); ++ dst7 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst7, vec1, filt1, dst7, vec2, filt2, ++ dst7, dst7); ++ dst7 = __lsx_vdp2add_h_bu_b(dst7, vec3, filt3); + __lsx_vst(dst7, dst, 112); + dst += dst_stride; + } +@@ -1252,12 +1196,10 @@ static void hevc_vt_8t_4w_lsx(uint8_t *src, int32_t src_stride, + const int8_t *filter, int32_t height) + { + int32_t loop_cnt; ++ int32_t res = (height & 0x07) >> 1; + int32_t src_stride_2x = (src_stride << 1); +- int32_t dst_stride_2x = (dst_stride << 1); + int32_t src_stride_4x = (src_stride << 2); +- int32_t dst_stride_4x = (dst_stride << 2); +- int32_t src_stride_3x = (src_stride << 1) + src_stride; +- int32_t dst_stride_3x = (dst_stride << 1) + dst_stride; ++ int32_t src_stride_3x = src_stride_2x + src_stride; + __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8; + __m128i src9, src10, src11, src12, src13, src14; + __m128i src10_r, src32_r, src54_r, src76_r, src98_r; +@@ -1267,34 +1209,35 @@ static void hevc_vt_8t_4w_lsx(uint8_t *src, int32_t src_stride, + __m128i src12111110, src14131312; + __m128i dst10, dst32, dst54, dst76; + __m128i filt0, filt1, filt2, filt3; +- __m128i const_vec; + + src -= src_stride_3x; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filt0, filt1, filt2, filt3); + +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src1, src2); ++ src3 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); +- src6 = __lsx_vld(src + src_stride_2x, 0); ++ src4 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src5, src6); + src += src_stride_3x; + DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, + src10_r, src32_r, src54_r, src21_r); + DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); +- DUP2_ARG2(__lsx_vilvl_d, src21_r, src10_r, src43_r, src32_r, src2110, src4332); ++ DUP2_ARG2(__lsx_vilvl_d, src21_r, src10_r, src43_r, src32_r, ++ src2110, src4332); + src6554 = __lsx_vilvl_d(src65_r, src54_r); +- DUP2_ARG2(__lsx_vxori_b, src2110, 128, src4332, 128, src2110, src4332); +- src6554 = __lsx_vxori_b(src6554, 128); + + for (loop_cnt = (height >> 3); loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src7, src8, src9, src10); ++ src7 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src8, src9); ++ src10 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src11, src12, src13, src14); ++ src11 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, ++ src12, src13); ++ src14 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; + + DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, +@@ -1302,40 +1245,70 @@ static void hevc_vt_8t_4w_lsx(uint8_t *src, int32_t src_stride, + DUP4_ARG2(__lsx_vilvl_b, src11, src10, src12, src11, src13, src12, src14, + src13, src1110_r, src1211_r, src1312_r, src1413_r); + DUP4_ARG2(__lsx_vilvl_d, src87_r, src76_r, src109_r, src98_r, src1211_r, +- src1110_r, src1413_r, src1312_r, src8776, src10998, src12111110, +- src14131312); +- DUP4_ARG2(__lsx_vxori_b, src8776, 128, src10998, 128, src12111110, 128, +- src14131312, 128, src8776, src10998, src12111110, src14131312); +- +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src2110, filt0, dst10, src4332, filt1, +- dst10, src6554, filt2, dst10, src8776, filt3, dst10, dst10, dst10, +- dst10); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src4332, filt0, dst32, src6554, filt1, +- dst32, src8776, filt2, dst32, src10998, filt3, dst32, dst32, +- dst32, dst32); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src6554, filt0, dst54, src8776, filt1, +- dst54, src10998, filt2, dst54, src12111110, filt3, dst54, dst54, +- dst54, dst54); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src8776, filt0, dst76, src10998, +- filt1, dst76, src12111110, filt2, dst76, src14131312, filt3, dst76, +- dst76, dst76, dst76); ++ src1110_r, src1413_r, src1312_r, src8776, src10998, ++ src12111110, src14131312); ++ ++ dst10 = __lsx_vdp2_h_bu_b(src2110, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst10, src4332, filt1, dst10, src6554, ++ filt2, dst10, dst10); ++ dst10 = __lsx_vdp2add_h_bu_b(dst10, src8776, filt3); ++ dst32 = __lsx_vdp2_h_bu_b(src4332, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst32, src6554, filt1, dst32, src8776, ++ filt2, dst32, dst32); ++ dst32 = __lsx_vdp2add_h_bu_b(dst32, src10998, filt3); ++ dst54 = __lsx_vdp2_h_bu_b(src6554, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst54, src8776, filt1, ++ dst54, src10998, filt2, dst54, dst54); ++ dst54 = __lsx_vdp2add_h_bu_b(dst54, src12111110, filt3); ++ dst76 = __lsx_vdp2_h_bu_b(src8776, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst76, src10998, filt1, dst76, ++ src12111110, filt2, dst76, dst76); ++ dst76 = __lsx_vdp2add_h_bu_b(dst76, src14131312, filt3); + + __lsx_vstelm_d(dst10, dst, 0, 0); +- __lsx_vstelm_d(dst10, dst + dst_stride, 0, 1); +- __lsx_vstelm_d(dst32, dst + dst_stride_2x, 0, 0); +- __lsx_vstelm_d(dst32, dst + dst_stride_3x, 0, 1); +- dst += dst_stride_4x; ++ dst += dst_stride; ++ __lsx_vstelm_d(dst10, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(dst32, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(dst32, dst, 0, 1); ++ dst += dst_stride; + __lsx_vstelm_d(dst54, dst, 0, 0); +- __lsx_vstelm_d(dst54, dst + dst_stride, 0, 1); +- __lsx_vstelm_d(dst76, dst + dst_stride_2x, 0, 0); +- __lsx_vstelm_d(dst76, dst + dst_stride_3x, 0, 1); +- dst += dst_stride_4x; ++ dst += dst_stride; ++ __lsx_vstelm_d(dst54, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(dst76, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(dst76, dst, 0, 1); ++ dst += dst_stride; + + src2110 = src10998; + src4332 = src12111110; + src6554 = src14131312; + src6 = src14; + } ++ for (;res--;) { ++ src7 = __lsx_vld(src, 0); ++ src8 = __lsx_vldx(src, src_stride); ++ DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); ++ src += src_stride_2x; ++ src8776 = __lsx_vilvl_d(src87_r, src76_r); ++ ++ dst10 = __lsx_vdp2_h_bu_b(src2110, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst10, src4332, filt1, dst10, src6554, ++ filt2, dst10, dst10); ++ dst10 = __lsx_vdp2add_h_bu_b(dst10, src8776, filt3); ++ ++ __lsx_vstelm_d(dst10, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(dst10, dst, 0, 1); ++ dst += dst_stride; ++ ++ src2110 = src4332; ++ src4332 = src6554; ++ src6554 = src8776; ++ src6 = src8; ++ } + } + + static void hevc_vt_8t_8w_lsx(uint8_t *src, int32_t src_stride, +@@ -1344,65 +1317,63 @@ static void hevc_vt_8t_8w_lsx(uint8_t *src, int32_t src_stride, + { + int32_t loop_cnt; + int32_t src_stride_2x = (src_stride << 1); +- int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t dst_stride_x = (dst_stride << 1); + int32_t src_stride_4x = (src_stride << 2); +- int32_t dst_stride_4x = (dst_stride << 2); +- int32_t src_stride_3x = (src_stride << 1) + src_stride; +- int32_t dst_stride_3x = (dst_stride << 1) + dst_stride; ++ int32_t dst_stride_2x = (dst_stride << 2); ++ int32_t src_stride_3x = src_stride_2x + src_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride_x; + __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; + __m128i src10_r, src32_r, src54_r, src76_r, src98_r; + __m128i src21_r, src43_r, src65_r, src87_r, src109_r; + __m128i dst0_r, dst1_r, dst2_r, dst3_r; +- __m128i const_vec; + __m128i filt0, filt1, filt2, filt3; + + src -= src_stride_3x; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, + filt0, filt1, filt2, filt3); + +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src1, src2); ++ src3 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); +- src6 = __lsx_vld(src + src_stride_2x, 0); ++ src4 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src5, src6); + src += src_stride_3x; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); +- src6 = __lsx_vxori_b(src6, 128); + DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, + src10_r, src32_r, src54_r, src21_r); + DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src7, src8, src9, src10); ++ src7 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src8, src9); ++ src10 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, +- src7, src8, src9, src10); +- DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src76_r, src87_r, src98_r, src109_r); +- +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, dst0_r, src54_r, filt2, dst0_r, src76_r, filt3, dst0_r, +- dst0_r, dst0_r, dst0_r); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, +- filt1, dst1_r, src65_r, filt2, dst1_r, src87_r, filt3, dst1_r, +- dst1_r, dst1_r, dst1_r); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src32_r, filt0, dst2_r, src54_r, +- filt1, dst2_r, src76_r, filt2, dst2_r, src98_r, filt3, dst2_r, +- dst2_r, dst2_r, dst2_r); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src43_r, filt0, dst3_r, src65_r, +- filt1, dst3_r, src87_r, filt2, dst3_r, src109_r, filt3, dst3_r, +- dst3_r, dst3_r, dst3_r); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, ++ src9, src76_r, src87_r, src98_r, src109_r); ++ ++ dst0_r = __lsx_vdp2_h_bu_b(src10_r, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst0_r, src32_r, filt1, dst0_r, ++ src54_r, filt2, dst0_r, dst0_r); ++ dst0_r = __lsx_vdp2add_h_bu_b(dst0_r, src76_r, filt3); ++ dst1_r = __lsx_vdp2_h_bu_b(src21_r, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst1_r, src43_r, filt1, dst1_r, ++ src65_r, filt2, dst1_r, dst1_r); ++ dst1_r = __lsx_vdp2add_h_bu_b(dst1_r, src87_r, filt3); ++ dst2_r = __lsx_vdp2_h_bu_b(src32_r, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst2_r, src54_r, filt1, dst2_r, ++ src76_r, filt2, dst2_r, dst2_r); ++ dst2_r = __lsx_vdp2add_h_bu_b(dst2_r, src98_r, filt3); ++ dst3_r = __lsx_vdp2_h_bu_b(src43_r, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst3_r, src65_r, filt1, dst3_r, ++ src87_r, filt2, dst3_r, dst3_r); ++ dst3_r = __lsx_vdp2add_h_bu_b(dst3_r, src109_r, filt3); + + __lsx_vst(dst0_r, dst, 0); +- __lsx_vst(dst1_r, dst + dst_stride, 0); +- __lsx_vst(dst2_r, dst + dst_stride_2x, 0); +- __lsx_vst(dst3_r, dst + dst_stride_3x, 0); +- dst += dst_stride_4x; ++ __lsx_vstx(dst1_r, dst, dst_stride_x); ++ __lsx_vstx(dst2_r, dst, dst_stride_2x); ++ __lsx_vstx(dst3_r, dst, dst_stride_3x); ++ dst += dst_stride_2x; + + src10_r = src54_r; + src32_r = src76_r; +@@ -1420,11 +1391,8 @@ static void hevc_vt_8t_12w_lsx(uint8_t *src, int32_t src_stride, + { + int32_t loop_cnt; + int32_t src_stride_2x = (src_stride << 1); +- int32_t dst_stride_2x = (dst_stride << 1); + int32_t src_stride_4x = (src_stride << 2); +- int32_t dst_stride_4x = (dst_stride << 2); +- int32_t src_stride_3x = (src_stride << 1) + src_stride; +- int32_t dst_stride_3x = (dst_stride << 1) + dst_stride; ++ int32_t src_stride_3x = src_stride_2x + src_stride; + __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; + __m128i src10_r, src32_r, src54_r, src76_r, src98_r; + __m128i src21_r, src43_r, src65_r, src87_r, src109_r; +@@ -1433,73 +1401,78 @@ static void hevc_vt_8t_12w_lsx(uint8_t *src, int32_t src_stride, + __m128i src21_l, src43_l, src65_l, src87_l, src109_l; + __m128i src2110, src4332, src6554, src8776, src10998; + __m128i dst0_l, dst1_l; +- __m128i const_vec; + __m128i filt0, filt1, filt2, filt3; + + src -= src_stride_3x; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filt0, filt1, filt2, filt3); ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src1, src2); ++ src3 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); +- src6 = __lsx_vld(src + src_stride_2x, 0); ++ src4 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src5, src6); + src += src_stride_3x; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); +- src6 = __lsx_vxori_b(src6, 128); + DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, + src10_r, src32_r, src54_r, src21_r); + DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); + DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, + src10_l, src32_l, src54_l, src21_l); + DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, src43_l, src65_l); +- DUP2_ARG2(__lsx_vilvl_d, src21_l, src10_l, src43_l, src32_l, src2110, src4332); ++ DUP2_ARG2(__lsx_vilvl_d, src21_l, src10_l, src43_l, src32_l, ++ src2110, src4332); + src6554 = __lsx_vilvl_d(src65_l, src54_l); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src+ src_stride_2x, 0, +- src + src_stride_3x, 0, src7, src8, src9, src10); ++ src7 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src8, src9); ++ src10 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, +- src8, src9, src10); +- DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src76_r, src87_r, src98_r, src109_r); +- DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src76_l, src87_l, src98_l, src109_l); +- DUP2_ARG2(__lsx_vilvl_d, src87_l, src76_l, src109_l, src98_l, src8776, src10998); +- +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, dst0_r, src54_r, filt2, dst0_r, src76_r, filt3, dst0_r, +- dst0_r, dst0_r, dst0_r); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, +- filt1, dst1_r, src65_r, filt2, dst1_r, src87_r, filt3, dst1_r, +- dst1_r, dst1_r, dst1_r); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src32_r, filt0, dst2_r, src54_r, +- filt1, dst2_r, src76_r, filt2, dst2_r, src98_r, filt3, dst2_r, +- dst2_r, dst2_r, dst2_r); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src43_r, filt0, dst3_r, src65_r, +- filt1, dst3_r, src87_r, filt2, dst3_r, src109_r, filt3, dst3_r, +- dst3_r, dst3_r, dst3_r); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src2110, filt0, dst0_l, src4332, +- filt1, dst0_l, src6554, filt2, dst0_l, src8776, filt3, dst0_l, +- dst0_l, dst0_l, dst0_l); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src4332, filt0, dst1_l, src6554, +- filt1, dst1_l, src8776, filt2, dst1_l, src10998, filt3, dst1_l, +- dst1_l, dst1_l, dst1_l); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, ++ src9, src76_r, src87_r, src98_r, src109_r); ++ DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, ++ src9, src76_l, src87_l, src98_l, src109_l); ++ DUP2_ARG2(__lsx_vilvl_d, src87_l, src76_l, src109_l, src98_l, ++ src8776, src10998); ++ ++ dst0_r = __lsx_vdp2_h_bu_b(src10_r, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst0_r, src32_r, filt1, dst0_r, ++ src54_r, filt2, dst0_r, dst0_r); ++ dst0_r = __lsx_vdp2add_h_bu_b(dst0_r, src76_r, filt3); ++ dst1_r = __lsx_vdp2_h_bu_b(src21_r, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst1_r, src43_r, filt1, dst1_r, ++ src65_r, filt2, dst1_r, dst1_r); ++ dst1_r = __lsx_vdp2add_h_bu_b(dst1_r, src87_r, filt3); ++ dst2_r = __lsx_vdp2_h_bu_b(src32_r, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst2_r, src54_r, filt1, dst2_r, ++ src76_r, filt2, dst2_r, dst2_r); ++ dst2_r = __lsx_vdp2add_h_bu_b(dst2_r, src98_r, filt3); ++ dst3_r = __lsx_vdp2_h_bu_b(src43_r, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst3_r, src65_r, filt1, dst3_r, ++ src87_r, filt2, dst3_r, dst3_r); ++ dst3_r = __lsx_vdp2add_h_bu_b(dst3_r, src109_r, filt3); ++ dst0_l = __lsx_vdp2_h_bu_b(src2110, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst0_l, src4332, filt1, dst0_l, ++ src6554, filt2, dst0_l, dst0_l); ++ dst0_l = __lsx_vdp2add_h_bu_b(dst0_l, src8776, filt3); ++ dst1_l = __lsx_vdp2_h_bu_b(src4332, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst1_l, src6554, filt1, dst1_l, ++ src8776, filt2, dst1_l, dst1_l); ++ dst1_l = __lsx_vdp2add_h_bu_b(dst1_l, src10998, filt3); + + __lsx_vst(dst0_r, dst, 0); +- __lsx_vst(dst1_r, dst + dst_stride, 0); +- __lsx_vst(dst2_r, dst + dst_stride_2x, 0); +- __lsx_vst(dst3_r, dst + dst_stride_3x, 0); + __lsx_vstelm_d(dst0_l, dst, 16, 0); +- __lsx_vstelm_d(dst0_l, dst + dst_stride, 16, 1); +- __lsx_vstelm_d(dst1_l, dst + dst_stride_2x, 16, 0); +- __lsx_vstelm_d(dst1_l, dst + dst_stride_3x, 16, 1); +- dst += dst_stride_4x; ++ dst += dst_stride; ++ __lsx_vst(dst1_r, dst, 0); ++ __lsx_vstelm_d(dst0_l, dst, 16, 1); ++ dst += dst_stride; ++ __lsx_vst(dst2_r, dst, 0); ++ __lsx_vstelm_d(dst1_l, dst, 16, 0); ++ dst += dst_stride; ++ __lsx_vst(dst3_r, dst, 0); ++ __lsx_vstelm_d(dst1_l, dst, 16, 1); ++ dst += dst_stride; + + src10_r = src54_r; + src32_r = src76_r; +@@ -1526,11 +1499,8 @@ static void hevc_vt_8t_16multx4mult_lsx(uint8_t *src, + int16_t *dst_tmp; + int32_t loop_cnt, cnt; + int32_t src_stride_2x = (src_stride << 1); +- int32_t dst_stride_2x = (dst_stride << 1); + int32_t src_stride_4x = (src_stride << 2); +- int32_t dst_stride_4x = (dst_stride << 2); +- int32_t src_stride_3x = (src_stride << 1) + src_stride; +- int32_t dst_stride_3x = (dst_stride << 1) + dst_stride; ++ int32_t src_stride_3x = src_stride_2x + src_stride; + __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; + __m128i src10_r, src32_r, src54_r, src76_r, src98_r; + __m128i src21_r, src43_r, src65_r, src87_r, src109_r; +@@ -1538,29 +1508,26 @@ static void hevc_vt_8t_16multx4mult_lsx(uint8_t *src, + __m128i src10_l, src32_l, src54_l, src76_l, src98_l; + __m128i src21_l, src43_l, src65_l, src87_l, src109_l; + __m128i dst0_l, dst1_l, dst2_l, dst3_l; +- __m128i const_vec; + __m128i filt0, filt1, filt2, filt3; + + src -= src_stride_3x; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, filt0, +- filt1, filt2, filt3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, ++ filt0, filt1, filt2, filt3); + + for (cnt = width >> 4; cnt--;) { + src_tmp = src; + dst_tmp = dst; + +- DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src_tmp + src_stride_2x, +- 0, src_tmp + src_stride_3x, 0, src0, src1, src2, src3); ++ src0 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride_2x, ++ src1, src2); ++ src3 = __lsx_vldx(src_tmp, src_stride_3x); + src_tmp += src_stride_4x; +- DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); +- src6 = __lsx_vld(src_tmp + src_stride_2x, 0); ++ src4 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride_2x, ++ src5, src6); + src_tmp += src_stride_3x; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); +- src6 = __lsx_vxori_b(src6, 128); + DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, + src10_r, src32_r, src54_r, src21_r); + DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, src43_r, src65_r); +@@ -1569,51 +1536,61 @@ static void hevc_vt_8t_16multx4mult_lsx(uint8_t *src, + DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, src43_l, src65_l); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, +- src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, +- src7, src8, src9, src10); ++ src7 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride_2x, ++ src8, src9); ++ src10 = __lsx_vldx(src_tmp, src_stride_3x); + src_tmp += src_stride_4x; +- DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, +- src7, src8, src9, src10); +- DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src76_r, src87_r, src98_r, src109_r); +- DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src76_l, src87_l, src98_l, src109_l); +- +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, dst0_r, src54_r, filt2, dst0_r, src76_r, filt3, +- dst0_r, dst0_r, dst0_r, dst0_r); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, +- filt1, dst1_r, src65_r, filt2, dst1_r, src87_r, filt3, +- dst1_r, dst1_r, dst1_r, dst1_r); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src32_r, filt0, dst2_r, src54_r, +- filt1, dst2_r, src76_r, filt2, dst2_r, src98_r, filt3, +- dst2_r, dst2_r, dst2_r, dst2_r); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src43_r, filt0, dst3_r, src65_r, +- filt1, dst3_r, src87_r, filt2, dst3_r, src109_r, filt3, +- dst3_r, dst3_r, dst3_r, dst3_r); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, +- filt1, dst0_l, src54_l, filt2, dst0_l, src76_l, filt3, +- dst0_l, dst0_l, dst0_l, dst0_l); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, +- filt1, dst1_l, src65_l, filt2, dst1_l, src87_l, filt3, +- dst1_l, dst1_l, dst1_l, dst1_l); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src32_l, filt0, dst2_l, src54_l, +- filt1, dst2_l, src76_l, filt2, dst2_l, src98_l, filt3, +- dst2_l, dst2_l, dst2_l, dst2_l); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, src43_l, filt0, dst3_l, src65_l, +- filt1, dst3_l, src87_l, filt2, dst3_l, src109_l, filt3, +- dst3_l, dst3_l, dst3_l, dst3_l); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, ++ src10, src9, src76_r, src87_r, src98_r, src109_r); ++ DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, ++ src10, src9, src76_l, src87_l, src98_l, src109_l); ++ ++ dst0_r = __lsx_vdp2_h_bu_b(src10_r, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst0_r, src32_r, filt1, dst0_r, ++ src54_r, filt2, dst0_r, dst0_r); ++ dst0_r = __lsx_vdp2add_h_bu_b(dst0_r, src76_r, filt3); ++ dst1_r = __lsx_vdp2_h_bu_b(src21_r, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst1_r, src43_r, filt1, dst1_r, ++ src65_r, filt2, dst1_r, dst1_r); ++ dst1_r = __lsx_vdp2add_h_bu_b(dst1_r, src87_r, filt3); ++ dst2_r = __lsx_vdp2_h_bu_b(src32_r, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst2_r, src54_r, filt1, dst2_r, ++ src76_r, filt2, dst2_r, dst2_r); ++ dst2_r = __lsx_vdp2add_h_bu_b(dst2_r, src98_r, filt3); ++ dst3_r = __lsx_vdp2_h_bu_b(src43_r, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst3_r, src65_r, filt1, dst3_r, ++ src87_r, filt2, dst3_r, dst3_r); ++ dst3_r = __lsx_vdp2add_h_bu_b(dst3_r, src109_r, filt3); ++ dst0_l = __lsx_vdp2_h_bu_b(src10_l, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst0_l, src32_l, filt1, dst0_l, ++ src54_l, filt2, dst0_l, dst0_l); ++ dst0_l = __lsx_vdp2add_h_bu_b(dst0_l, src76_l, filt3); ++ dst1_l = __lsx_vdp2_h_bu_b(src21_l, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst1_l, src43_l, filt1, dst1_l, ++ src65_l, filt2, dst1_l, dst1_l); ++ dst1_l = __lsx_vdp2add_h_bu_b(dst1_l, src87_l, filt3); ++ dst2_l = __lsx_vdp2_h_bu_b(src32_l, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst2_l, src54_l, filt1, dst2_l, ++ src76_l, filt2, dst2_l, dst2_l); ++ dst2_l = __lsx_vdp2add_h_bu_b(dst2_l, src98_l, filt3); ++ dst3_l = __lsx_vdp2_h_bu_b(src43_l, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst3_l, src65_l, filt1, dst3_l, ++ src87_l, filt2, dst3_l, dst3_l); ++ dst3_l = __lsx_vdp2add_h_bu_b(dst3_l, src109_l, filt3); + + __lsx_vst(dst0_r, dst_tmp, 0); +- __lsx_vst(dst1_r, dst_tmp + dst_stride, 0); +- __lsx_vst(dst2_r, dst_tmp + dst_stride_2x, 0); +- __lsx_vst(dst3_r, dst_tmp + dst_stride_3x, 0); + __lsx_vst(dst0_l, dst_tmp, 16); +- __lsx_vst(dst1_l, dst_tmp + dst_stride, 16); +- __lsx_vst(dst2_l, dst_tmp + dst_stride_2x, 16); +- __lsx_vst(dst3_l, dst_tmp + dst_stride_3x, 16); +- dst_tmp += dst_stride_4x; ++ dst_tmp += dst_stride; ++ __lsx_vst(dst1_r, dst_tmp, 0); ++ __lsx_vst(dst1_l, dst_tmp, 16); ++ dst_tmp += dst_stride; ++ __lsx_vst(dst2_r, dst_tmp, 0); ++ __lsx_vst(dst2_l, dst_tmp, 16); ++ dst_tmp += dst_stride; ++ __lsx_vst(dst3_r, dst_tmp, 0); ++ __lsx_vst(dst3_l, dst_tmp, 16); ++ dst_tmp += dst_stride; + + src10_r = src54_r; + src32_r = src76_r; +@@ -1683,16 +1660,13 @@ static void hevc_hv_8t_4w_lsx(uint8_t *src, int32_t src_stride, + { + uint32_t loop_cnt; + int32_t src_stride_2x = (src_stride << 1); +- int32_t dst_stride_2x = (dst_stride << 1); + int32_t src_stride_4x = (src_stride << 2); +- int32_t dst_stride_4x = (dst_stride << 2); + int32_t src_stride_3x = src_stride_2x + src_stride; +- int32_t dst_stride_3x = dst_stride_2x + dst_stride; + __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; + __m128i filt0, filt1, filt2, filt3; + __m128i filt_h0, filt_h1, filt_h2, filt_h3; + __m128i mask1, mask2, mask3; +- __m128i filter_vec, const_vec; ++ __m128i filter_vec; + __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; + __m128i vec8, vec9, vec10, vec11, vec12, vec13, vec14, vec15; + __m128i dst30, dst41, dst52, dst63, dst66, dst97, dst108; +@@ -1713,18 +1687,14 @@ static void hevc_hv_8t_4w_lsx(uint8_t *src, int32_t src_stride, + filter_vec, 3, filt_h0, filt_h1, filt_h2, filt_h3); + DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src1, src2); ++ src3 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); +- src6 = __lsx_vld(src + src_stride_2x, 0); ++ src4 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src5, src6); + src += src_stride_3x; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, +- src2, src3); +- DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); +- src6 = __lsx_vxori_b(src6, 128); + + DUP4_ARG3(__lsx_vshuf_b, src3, src0, mask0, src3, src0, mask1, src3, src0, + mask2, src3, src0, mask3, vec0, vec1, vec2, vec3); +@@ -1734,14 +1704,22 @@ static void hevc_hv_8t_4w_lsx(uint8_t *src, int32_t src_stride, + mask2, src5, src2, mask3, vec8, vec9, vec10, vec11); + DUP4_ARG3(__lsx_vshuf_b, src6, src3, mask0, src6, src3, mask1, src6, src3, + mask2, src6, src3, mask3, vec12, vec13, vec14, vec15); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst30, vec1, filt1, dst30, +- vec2, filt2, dst30, vec3, filt3, dst30, dst30, dst30, dst30); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst41, vec5, filt1, dst41, +- vec6, filt2, dst41, vec7, filt3, dst41, dst41, dst41, dst41); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec8, filt0, dst52, vec9, filt1, dst52, +- vec10, filt2, dst52, vec11, filt3, dst52, dst52, dst52, dst52); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec12, filt0, dst63, vec13, filt1, dst63, +- vec14, filt2, dst63, vec15, filt3, dst63, dst63, dst63, dst63); ++ dst30 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst30, vec1, filt1, dst30, vec2, filt2, ++ dst30, dst30); ++ dst30 = __lsx_vdp2add_h_bu_b(dst30, vec3, filt3); ++ dst41 = __lsx_vdp2_h_bu_b(vec4, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst41, vec5, filt1, dst41, vec6, filt2, ++ dst41, dst41); ++ dst41 = __lsx_vdp2add_h_bu_b(dst41, vec7, filt3); ++ dst52 = __lsx_vdp2_h_bu_b(vec8, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst52, vec9, filt1, dst52, vec10, filt2, ++ dst52, dst52); ++ dst52 = __lsx_vdp2add_h_bu_b(dst52, vec11, filt3); ++ dst63 = __lsx_vdp2_h_bu_b(vec12, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst63, vec13, filt1, dst63, vec14, filt2, ++ dst63, dst63); ++ dst63 = __lsx_vdp2add_h_bu_b(dst63, vec15, filt3); + + DUP2_ARG2(__lsx_vilvl_h, dst41, dst30, dst52, dst41, dst10_r, dst21_r); + DUP2_ARG2(__lsx_vilvh_h, dst41, dst30, dst52, dst41, dst43_r, dst54_r); +@@ -1750,43 +1728,52 @@ static void hevc_hv_8t_4w_lsx(uint8_t *src, int32_t src_stride, + dst66 = __lsx_vreplvei_d(dst63, 1); + + for (loop_cnt = height >> 2; loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src7, src8, src9, src10); ++ src7 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src8, src9); ++ src10 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, +- src7, src8, src9, src10); + + DUP4_ARG3(__lsx_vshuf_b, src9, src7, mask0, src9, src7, mask1, src9, src7, + mask2, src9, src7, mask3, vec0, vec1, vec2, vec3); + DUP4_ARG3(__lsx_vshuf_b, src10, src8, mask0, src10, src8, mask1, src10, src8, + mask2, src10, src8, mask3, vec4, vec5, vec6, vec7); + +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst97, vec1, filt1, +- dst97, vec2, filt2, dst97, vec3, filt3, dst97, dst97, dst97, dst97); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst108, vec5, filt1, +- dst108, vec6, filt2, dst108, vec7, filt3, dst108, dst108, dst108, dst108); ++ dst97 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst97, vec1, filt1, dst97, vec2, filt2, ++ dst97, dst97); ++ dst97 = __lsx_vdp2add_h_bu_b(dst97, vec3, filt3); ++ dst108 = __lsx_vdp2_h_bu_b(vec4, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst108, vec5, filt1, dst108, vec6, ++ filt2, dst108, dst108); ++ dst108 = __lsx_vdp2add_h_bu_b(dst108, vec7, filt3); + + DUP2_ARG2(__lsx_vilvl_h, dst97, dst66, dst108, dst97, dst76_r, dst87_r); + dst109_r = __lsx_vilvh_h(dst108, dst97); + dst66 = __lsx_vreplvei_d(dst97, 1); + dst98_r = __lsx_vilvl_h(dst66, dst108); + +- dst0_r = __lsx_hevc_filt_8tap_w(dst10_r, dst32_r, dst54_r, dst76_r, +- filt_h0, filt_h1, filt_h2, filt_h3); +- dst1_r = __lsx_hevc_filt_8tap_w(dst21_r, dst43_r, dst65_r, dst87_r, +- filt_h0, filt_h1, filt_h2, filt_h3); +- dst2_r = __lsx_hevc_filt_8tap_w(dst32_r, dst54_r, dst76_r, dst98_r, +- filt_h0, filt_h1, filt_h2, filt_h3); +- dst3_r = __lsx_hevc_filt_8tap_w(dst43_r, dst65_r, dst87_r, dst109_r, +- filt_h0, filt_h1, filt_h2, filt_h3); +- DUP4_ARG2(__lsx_vsrli_w, dst0_r, 6, dst1_r, 6, dst2_r, 6, dst3_r, 6, ++ DUP4_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst21_r, filt_h0, dst32_r, ++ filt_h0, dst43_r, filt_h0, dst0_r, dst1_r, dst2_r, dst3_r); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst32_r, filt_h1, dst1_r, dst43_r, ++ filt_h1, dst2_r, dst54_r, filt_h1, dst3_r, dst65_r, filt_h1, ++ dst0_r, dst1_r, dst2_r, dst3_r); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst54_r, filt_h2, dst1_r, dst65_r, ++ filt_h2, dst2_r, dst76_r, filt_h2, dst3_r, dst87_r, filt_h2, ++ dst0_r, dst1_r, dst2_r, dst3_r); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst76_r, filt_h3, dst1_r, dst87_r, ++ filt_h3, dst2_r, dst98_r, filt_h3, dst3_r, dst109_r, filt_h3, ++ dst0_r, dst1_r, dst2_r, dst3_r); ++ DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst1_r, 6, dst2_r, 6, dst3_r, 6, + dst0_r, dst1_r, dst2_r, dst3_r); + DUP2_ARG2(__lsx_vpickev_h, dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst2_r); + __lsx_vstelm_d(dst0_r, dst, 0, 0); +- __lsx_vstelm_d(dst0_r, dst + dst_stride, 0, 1); +- __lsx_vstelm_d(dst2_r, dst + dst_stride_2x, 0, 0); +- __lsx_vstelm_d(dst2_r, dst + dst_stride_3x, 0, 1); +- dst += dst_stride_4x; ++ dst += dst_stride; ++ __lsx_vstelm_d(dst0_r, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(dst2_r, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(dst2_r, dst, 0, 1); ++ dst += dst_stride; + + dst10_r = dst54_r; + dst32_r = dst76_r; +@@ -1817,7 +1804,7 @@ static void hevc_hv_8t_8multx1mult_lsx(uint8_t *src, + __m128i filt0, filt1, filt2, filt3; + __m128i filt_h0, filt_h1, filt_h2, filt_h3; + __m128i mask1, mask2, mask3; +- __m128i filter_vec, const_vec; ++ __m128i filter_vec; + __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; + __m128i vec8, vec9, vec10, vec11, vec12, vec13, vec14, vec15; + __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; +@@ -1838,75 +1825,91 @@ static void hevc_hv_8t_8multx1mult_lsx(uint8_t *src, + + DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + for (cnt = width >> 3; cnt--;) { + src_tmp = src; + dst_tmp = dst; +- DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src_tmp + src_stride_2x, +- 0, src_tmp + src_stride_3x, 0, src0, src1, src2, src3); ++ src0 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride_2x, ++ src1, src2); ++ src3 = __lsx_vldx(src_tmp, src_stride_3x); + src_tmp += src_stride_4x; +- DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); +- src6 = __lsx_vld(src_tmp + src_stride_2x, 0); ++ src4 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride_2x, ++ src5, src6); + src_tmp += src_stride_3x; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); +- src6 = __lsx_vxori_b(src6, 128); + + /* row 0 row 1 row 2 row 3 */ +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, +- mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, src1, +- mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); +- DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, src2, +- mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); +- DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, +- mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, +- vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst1, vec5, filt1, dst1, +- vec6, filt2, dst1, vec7, filt3, dst1, dst1, dst1, dst1); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec8, filt0, dst2, vec9, filt1, dst2, +- vec10, filt2, dst2, vec11, filt3, dst2, dst2, dst2, dst2); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec12, filt0, dst3, vec13, filt1, +- dst3, vec14, filt2, dst3, vec15, filt3, dst3, dst3, dst3, dst3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, ++ src0, mask2, src0, src0, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, src1, ++ src1, mask2, src1, src1, mask3, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, src2, ++ src2, mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); ++ DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, ++ src3, mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); ++ dst0 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst0, vec2, filt2, ++ dst0, dst0); ++ dst0 = __lsx_vdp2add_h_bu_b(dst0, vec3, filt3); ++ dst1 = __lsx_vdp2_h_bu_b(vec4, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst1, vec5, filt1, dst1, vec6, filt2, ++ dst1, dst1); ++ dst1 = __lsx_vdp2add_h_bu_b(dst1, vec7, filt3); ++ dst2 = __lsx_vdp2_h_bu_b(vec8, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst2, vec9, filt1, dst2, vec10, filt2, ++ dst2, dst2); ++ dst2 = __lsx_vdp2add_h_bu_b(dst2, vec11, filt3); ++ dst3 = __lsx_vdp2_h_bu_b(vec12, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst3, vec13, filt1, dst3, vec14, filt2, ++ dst3, dst3); ++ dst3 = __lsx_vdp2add_h_bu_b(dst3, vec15, filt3); + + /* row 4 row 5 row 6 */ +- DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, +- mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, src5, +- mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); +- DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, src6, +- mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst4, filt1, vec1, dst4, +- vec2, filt2, dst4, vec3, filt3, dst4, dst4, dst4, dst4); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst5, vec5, filt1, dst5, +- vec6, filt2, dst5, vec7, filt3, dst5, dst5, dst5, dst5); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec8, filt0, dst6, vec9, filt1, dst6, +- vec10, filt2, dst6, vec11, filt3, dst6, dst6, dst6, dst6); ++ DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, ++ src4, mask2, src4, src4, mask3, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, src5, ++ src5, mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); ++ DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, ++ src6, mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); ++ dst4 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst4, vec1, filt1, dst4, vec2, filt2, ++ dst4, dst4); ++ dst4 = __lsx_vdp2add_h_bu_b(dst4, vec3, filt3); ++ dst5 = __lsx_vdp2_h_bu_b(vec4, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst5, vec5, filt1, dst5, vec6, filt2, ++ dst5, dst5); ++ dst5 = __lsx_vdp2add_h_bu_b(dst5, vec7, filt3); ++ dst6 = __lsx_vdp2_h_bu_b(vec8, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst6, vec9, filt1, dst6, vec10, filt2, ++ dst6, dst6); ++ dst6 = __lsx_vdp2add_h_bu_b(dst6, vec11, filt3); + + for (loop_cnt = height; loop_cnt--;) { + src7 = __lsx_vld(src_tmp, 0); +- src7 = __lsx_vxori_b(src7, 128); + src_tmp += src_stride; + + DUP4_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, src7, + src7, mask2, src7, src7, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst7, vec1, filt1, +- dst7, vec2, filt2, dst7, vec3, filt3, dst7, dst7, dst7, dst7); +- +- DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, +- dst10_r, dst32_r, dst54_r, dst76_r); +- DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, +- dst10_l, dst32_l, dst54_l, dst76_l); +- +- dst0_r = __lsx_hevc_filt_8tap_w(dst10_r, dst32_r, dst54_r, dst76_r, +- filt_h0, filt_h1, filt_h2, filt_h3); +- dst0_l = __lsx_hevc_filt_8tap_w(dst10_l, dst32_l, dst54_l, dst76_l, +- filt_h0, filt_h1, filt_h2, filt_h3); +- dst0_r = __lsx_vsrli_w(dst0_r, 6); +- dst0_l = __lsx_vsrli_w(dst0_l, 6); ++ dst7 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst7, vec1, filt1, dst7, vec2, ++ filt2, dst7, dst7); ++ dst7 = __lsx_vdp2add_h_bu_b(dst7, vec3, filt3); ++ ++ DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, ++ dst6, dst10_r, dst32_r, dst54_r, dst76_r); ++ DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, ++ dst6, dst10_l, dst32_l, dst54_l, dst76_l); ++ ++ DUP2_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst10_l, filt_h0, ++ dst0_r, dst0_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst32_r, filt_h1, dst0_l, ++ dst32_l, filt_h1, dst0_r, dst54_r, filt_h2, dst0_l, ++ dst54_l, filt_h2, dst0_r, dst0_l, dst0_r, dst0_l); ++ DUP2_ARG3(__lsx_vdp2add_w_h, dst0_r, dst76_r, filt_h3, dst0_l, ++ dst76_l, filt_h3, dst0_r, dst0_l); ++ dst0_r = __lsx_vsrai_w(dst0_r, 6); ++ dst0_l = __lsx_vsrai_w(dst0_l, 6); + + dst0_r = __lsx_vpickev_h(dst0_l, dst0_r); + __lsx_vst(dst0_r, dst_tmp, 0); +@@ -1943,17 +1946,14 @@ static void hevc_hv_8t_12w_lsx(uint8_t *src, int32_t src_stride, + uint8_t *src_tmp; + int16_t *dst_tmp; + int32_t src_stride_2x = (src_stride << 1); +- int32_t dst_stride_2x = (dst_stride << 1); + int32_t src_stride_4x = (src_stride << 2); +- int32_t dst_stride_4x = (dst_stride << 2); + int32_t src_stride_3x = src_stride_2x + src_stride; +- int32_t dst_stride_3x = dst_stride_2x + dst_stride; + __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; + __m128i mask0, mask1, mask2, mask3, mask4, mask5, mask6, mask7; + __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; + __m128i vec8, vec9, vec10, vec11, vec12, vec13, vec14, vec15; + __m128i filt0, filt1, filt2, filt3, filt_h0, filt_h1, filt_h2, filt_h3; +- __m128i filter_vec, const_vec; ++ __m128i filter_vec; + __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; + __m128i dst30, dst41, dst52, dst63, dst66, dst97, dst108; + __m128i dst10_r, dst32_r, dst54_r, dst76_r, dst98_r, dst21_r, dst43_r; +@@ -1973,22 +1973,19 @@ static void hevc_hv_8t_12w_lsx(uint8_t *src, int32_t src_stride, + mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + src_tmp = src; + dst_tmp = dst; + +- DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, +- src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, +- src0, src1, src2, src3); ++ src0 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride_2x, ++ src1, src2); ++ src3 = __lsx_vldx(src_tmp, src_stride_3x); + src_tmp += src_stride_4x; +- DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src4, src5); +- src6 = __lsx_vld(src_tmp + src_stride_2x, 0); ++ src4 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride_2x, ++ src5, src6); + src_tmp += src_stride_3x; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, +- src2, src3); +- DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); +- src6 = __lsx_vxori_b(src6, 128); + + /* row 0 row 1 row 2 row 3 */ + DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src0, src0, +@@ -1999,14 +1996,22 @@ static void hevc_hv_8t_12w_lsx(uint8_t *src, int32_t src_stride, + mask2, src2, src2, mask3, vec8, vec9, vec10, vec11); + DUP4_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, src3, src3, + mask2, src3, src3, mask3, vec12, vec13, vec14, vec15); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, +- vec2, filt2, dst0, vec3, filt3, dst0, dst0, dst0, dst0); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst1, vec5, filt1, dst1, +- vec6, filt2, dst1, vec7, filt3, dst1, dst1, dst1, dst1); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec8, filt0, dst2, vec9, filt1, dst2, +- vec10, filt2, dst2, vec11, filt3, dst2, dst2, dst2, dst2); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec12, filt0, dst3, vec13, filt1, dst3, +- vec14, filt2, dst3, vec15, filt3, dst3, dst3, dst3, dst3); ++ dst0 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst0, vec2, filt2, ++ dst0, dst0); ++ dst0 = __lsx_vdp2add_h_bu_b(dst0, vec3, filt3); ++ dst1 = __lsx_vdp2_h_bu_b(vec4, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst1, vec5, filt1, dst1, vec6, filt2, ++ dst1, dst1); ++ dst1 = __lsx_vdp2add_h_bu_b(dst1, vec7, filt3); ++ dst2 = __lsx_vdp2_h_bu_b(vec8, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst2, vec9, filt1, dst2, vec10, filt2, ++ dst2, dst2); ++ dst2 = __lsx_vdp2add_h_bu_b(dst2, vec11, filt3); ++ dst3 = __lsx_vdp2_h_bu_b(vec12, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst3, vec13, filt1, dst3, vec14, filt2, ++ dst3, dst3); ++ dst3 = __lsx_vdp2add_h_bu_b(dst3, vec15, filt3); + + /* row 4 row 5 row 6 */ + DUP4_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, src4, src4, +@@ -2015,33 +2020,42 @@ static void hevc_hv_8t_12w_lsx(uint8_t *src, int32_t src_stride, + mask2, src5, src5, mask3, vec4, vec5, vec6, vec7); + DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src6, src6, + mask2, src6, src6, mask3, vec8, vec9, vec10, vec11); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst4, vec1, filt1, dst4, +- vec2, filt2, dst4, vec3, filt3, dst4, dst4, dst4, dst4); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst5, vec5, filt1, dst5, +- vec6, filt2, dst5, vec7, filt3, dst5, dst5, dst5, dst5); +- dst6 = const_vec; +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec8, filt0, dst6, vec9, filt1, dst6, +- vec10, filt2, dst6, vec11, filt3, dst6, dst6, dst6, dst6); ++ dst4 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst4, vec1, filt1, dst4, vec2, filt2, ++ dst4, dst4); ++ dst4 = __lsx_vdp2add_h_bu_b(dst4, vec3, filt3); ++ dst5 = __lsx_vdp2_h_bu_b(vec4, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst5, vec5, filt1, dst5, vec6, filt2, ++ dst5, dst5); ++ dst5 = __lsx_vdp2add_h_bu_b(dst5, vec7, filt3); ++ dst6 = __lsx_vdp2_h_bu_b(vec8, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst6, vec9, filt1, dst6, vec10, filt2, ++ dst6, dst6); ++ dst6 = __lsx_vdp2add_h_bu_b(dst6, vec11, filt3); + + for (loop_cnt = height; loop_cnt--;) { + src7 = __lsx_vld(src_tmp, 0); +- src7 = __lsx_vxori_b(src7, 128); + src_tmp += src_stride; + +- DUP4_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, src7, src7, +- mask2, src7, src7, mask3, vec0, vec1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst7, vec1, filt1, dst7, +- vec2, filt2, dst7, vec3, filt3, dst7, dst7, dst7, dst7); ++ DUP4_ARG3(__lsx_vshuf_b, src7, src7, mask0, src7, src7, mask1, src7, ++ src7, mask2, src7, src7, mask3, vec0, vec1, vec2, vec3); ++ dst7 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst7, vec1, filt1, dst7, vec2, filt2, ++ dst7, dst7); ++ dst7 = __lsx_vdp2add_h_bu_b(dst7, vec3, filt3); + DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, + dst10_r, dst32_r, dst54_r, dst76_r); + DUP4_ARG2(__lsx_vilvh_h, dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, + dst10_l, dst32_l, dst54_l, dst76_l); +- dst0_r = __lsx_hevc_filt_8tap_w(dst10_r, dst32_r, dst54_r, dst76_r, filt_h0, +- filt_h1, filt_h2, filt_h3); +- dst0_l = __lsx_hevc_filt_8tap_w(dst10_l, dst32_l, dst54_l, dst76_l, filt_h0, +- filt_h1, filt_h2, filt_h3); +- dst0_r = __lsx_vsrli_w(dst0_r, 6); +- dst0_l = __lsx_vsrli_w(dst0_l, 6); ++ DUP2_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst10_l, filt_h0, ++ dst0_r, dst0_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst32_r, filt_h1, dst0_l, dst32_l, ++ filt_h1, dst0_r, dst54_r, filt_h2, dst0_l, dst54_l, filt_h2, ++ dst0_r, dst0_l, dst0_r, dst0_l); ++ DUP2_ARG3(__lsx_vdp2add_w_h, dst0_r, dst76_r, filt_h3, dst0_l, dst76_l, ++ filt_h3, dst0_r, dst0_l) ++ dst0_r = __lsx_vsrai_w(dst0_r, 6); ++ dst0_l = __lsx_vsrai_w(dst0_l, 6); + + dst0_r = __lsx_vpickev_h(dst0_l, dst0_r); + __lsx_vst(dst0_r, dst_tmp, 0); +@@ -2062,16 +2076,13 @@ static void hevc_hv_8t_12w_lsx(uint8_t *src, int32_t src_stride, + DUP2_ARG2(__lsx_vaddi_bu, mask4, 2, mask4, 4, mask5, mask6); + mask7 = __lsx_vaddi_bu(mask4, 6); + +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src1, src2); ++ src3 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); +- src6 = __lsx_vld(src + src_stride_2x, 0); ++ src4 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src5, src6); + src += src_stride_3x; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3) +- DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); +- src6 = __lsx_vxori_b(src6, 128); + + DUP4_ARG3(__lsx_vshuf_b, src3, src0, mask4, src3, src0, mask5, src3, src0, + mask6, src3, src0, mask7, vec0, vec1, vec2, vec3); +@@ -2081,14 +2092,22 @@ static void hevc_hv_8t_12w_lsx(uint8_t *src, int32_t src_stride, + mask6, src5, src2, mask7, vec8, vec9, vec10, vec11); + DUP4_ARG3(__lsx_vshuf_b, src6, src3, mask4, src6, src3, mask5, src6, src3, + mask6, src6, src3, mask7, vec12, vec13, vec14, vec15); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst30, vec1, filt1, dst30, +- vec2, filt2, dst30, vec3, filt3, dst30, dst30, dst30, dst30); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst41, vec5, filt1, dst41, +- vec6, filt2, dst41, vec7, filt3, dst41, dst41, dst41, dst41); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec8, filt0, dst52, vec9, filt1, dst52, +- vec10, filt2, dst52, vec11, filt3, dst52, dst52, dst52, dst52); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec12, filt0, dst63, vec13, filt1, dst63, +- vec14, filt2, dst63, vec15, filt3, dst63, dst63, dst63, dst63); ++ dst30 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst30, vec1, filt1, dst30, vec2, filt2, ++ dst30, dst30); ++ dst30 = __lsx_vdp2add_h_bu_b(dst30, vec3, filt3); ++ dst41 = __lsx_vdp2_h_bu_b(vec4, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst41, vec5, filt1, dst41, vec6, filt2, ++ dst41, dst41); ++ dst41 = __lsx_vdp2add_h_bu_b(dst41, vec7, filt3); ++ dst52 = __lsx_vdp2_h_bu_b(vec8, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst52, vec9, filt1, dst52, vec10, filt2, ++ dst52, dst52); ++ dst52 = __lsx_vdp2add_h_bu_b(dst52, vec11, filt3); ++ dst63 = __lsx_vdp2_h_bu_b(vec12, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst63, vec13, filt1, dst63, vec14, filt2, ++ dst63, dst63); ++ dst63 = __lsx_vdp2add_h_bu_b(dst63, vec15, filt3); + + DUP2_ARG2(__lsx_vilvl_h, dst41, dst30, dst52, dst41, dst10_r, dst21_r); + DUP2_ARG2(__lsx_vilvh_h, dst41, dst30, dst52, dst41, dst43_r, dst54_r); +@@ -2098,42 +2117,52 @@ static void hevc_hv_8t_12w_lsx(uint8_t *src, int32_t src_stride, + dst66 = __lsx_vreplvei_d(dst63, 1); + + for (loop_cnt = height >> 2; loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src7, src8, src9, src10); ++ src7 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src8, src9); ++ src10 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, +- src8, src9, src10); + +- DUP4_ARG3(__lsx_vshuf_b, src9, src7, mask4, src9, src7, mask5, src9, src7, +- mask6, src9, src7, mask7, vec0, vec1, vec2, vec3); ++ DUP4_ARG3(__lsx_vshuf_b, src9, src7, mask4, src9, src7, mask5, src9, ++ src7, mask6, src9, src7, mask7, vec0, vec1, vec2, vec3); + DUP4_ARG3(__lsx_vshuf_b, src10, src8, mask4, src10, src8, mask5, src10, + src8, mask6, src10, src8, mask7, vec4, vec5, vec6, vec7); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst97, vec1, filt1, +- dst97, vec2, filt2, dst97, vec3, filt3, dst97, dst97, dst97, dst97); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst108, vec5, filt1, dst108, +- vec6, filt2, dst108, vec7, filt3, dst108, dst108, dst108, dst108); ++ dst97 = __lsx_vdp2_h_bu_b(vec0, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst97, vec1, filt1, dst97, vec2, filt2, ++ dst97, dst97); ++ dst97 = __lsx_vdp2add_h_bu_b(dst97, vec3, filt3); ++ dst108 = __lsx_vdp2_h_bu_b(vec4, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst108, vec5, filt1, dst108, vec6, ++ filt2, dst108, dst108); ++ dst108 = __lsx_vdp2add_h_bu_b(dst108, vec7, filt3); + + DUP2_ARG2(__lsx_vilvl_h, dst97, dst66, dst108, dst97, dst76_r, dst87_r); + dst109_r = __lsx_vilvh_h(dst108, dst97); + dst66 = __lsx_vreplvei_d(dst97, 1); + dst98_r = __lsx_vilvl_h(dst66, dst108); + +- dst0_r = __lsx_hevc_filt_8tap_w(dst10_r, dst32_r, dst54_r, dst76_r, filt_h0, +- filt_h1, filt_h2, filt_h3); +- dst1_r = __lsx_hevc_filt_8tap_w(dst21_r, dst43_r, dst65_r, dst87_r, filt_h0, +- filt_h1, filt_h2, filt_h3); +- dst2_r = __lsx_hevc_filt_8tap_w(dst32_r, dst54_r, dst76_r, dst98_r, filt_h0, +- filt_h1, filt_h2, filt_h3); +- dst3_r = __lsx_hevc_filt_8tap_w(dst43_r, dst65_r, dst87_r, dst109_r, filt_h0, +- filt_h1, filt_h2, filt_h3); +- DUP4_ARG2(__lsx_vsrli_w, dst0_r, 6, dst1_r, 6, dst2_r, 6, dst3_r, 6, ++ DUP4_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst21_r, filt_h0, dst32_r, ++ filt_h0, dst43_r, filt_h0, dst0_r, dst1_r, dst2_r, dst3_r); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst32_r, filt_h1, dst1_r, dst43_r, ++ filt_h1, dst2_r, dst54_r, filt_h1, dst3_r, dst65_r, filt_h1, + dst0_r, dst1_r, dst2_r, dst3_r); +- DUP2_ARG2(__lsx_vpickev_h, dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst2_r); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst54_r, filt_h2, dst1_r, dst65_r, ++ filt_h2, dst2_r, dst76_r, filt_h2, dst3_r, dst87_r, filt_h2, ++ dst0_r, dst1_r, dst2_r, dst3_r); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst76_r, filt_h3, dst1_r, dst87_r, ++ filt_h3, dst2_r, dst98_r, filt_h3, dst3_r, dst109_r, filt_h3, ++ dst0_r, dst1_r, dst2_r, dst3_r); ++ DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst1_r, 6, dst2_r, 6, dst3_r, 6, ++ dst0_r, dst1_r, dst2_r, dst3_r); ++ DUP2_ARG2(__lsx_vpickev_h, dst1_r, dst0_r, dst3_r, dst2_r, ++ dst0_r, dst2_r); + __lsx_vstelm_d(dst0_r, dst, 0, 0); +- __lsx_vstelm_d(dst0_r, dst + dst_stride, 0, 1); +- __lsx_vstelm_d(dst2_r, dst + dst_stride_2x, 0, 0); +- __lsx_vstelm_d(dst2_r, dst + dst_stride_3x, 0, 1); +- dst += dst_stride_4x; ++ dst += dst_stride; ++ __lsx_vstelm_d(dst0_r, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(dst2_r, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(dst2_r, dst, 0, 1); ++ dst += dst_stride; + + dst10_r = dst54_r; + dst32_r = dst76_r; +@@ -2204,11 +2233,9 @@ static void hevc_hz_4t_32w_lsx(uint8_t *src, + __m128i mask1, mask2, mask3; + __m128i dst0, dst1, dst2, dst3; + __m128i vec0, vec1, vec2, vec3; +- __m128i const_vec; + + src -= 1; + DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 8, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 10); +@@ -2218,18 +2245,18 @@ static void hevc_hz_4t_32w_lsx(uint8_t *src, + src2 = __lsx_vld(src, 24); + src += src_stride; + +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- src2 = __lsx_vxori_b(src2, 128); +- +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask2, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src2, src2, mask0, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, const_vec, vec1, filt0, +- const_vec, vec2, filt0, const_vec, vec3, filt0, dst0, dst1, dst2, +- dst3); +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask3, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask1, src2, src2, mask1, vec2, vec3); +- DUP4_ARG3(__lsx_vdp2add_h_b, dst0, vec0, filt1, dst1, vec1, filt1, dst2, +- vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src0, mask2, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src2, src2, mask0, ++ vec2, vec3); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec1, filt0, vec2, filt0, ++ vec3, filt0, dst0, dst1, dst2, dst3); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src0, mask3, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask1, src2, src2, mask1, ++ vec2, vec3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec0, filt1, dst1, vec1, filt1, ++ dst2, vec2, filt1, dst3, vec3, filt1, dst0, dst1, dst2, dst3); + __lsx_vst(dst0, dst, 0); + __lsx_vst(dst1, dst, 16); + __lsx_vst(dst2, dst, 32); +@@ -2253,34 +2280,27 @@ static void hevc_vt_4t_16w_lsx(uint8_t *src, + __m128i src10_l, src32_l, src21_l, src43_l; + __m128i dst0_r, dst1_r, dst0_l, dst1_l; + __m128i filt0, filt1; +- __m128i const_vec; + + src -= src_stride; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); + +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); +- src2 = __lsx_vld(src + src_stride_2x, 0); ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src1, src2); + src += src_stride_3x; +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- src2 = __lsx_vxori_b(src2, 128); + DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); + DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src3, src4); ++ src3 = __lsx_vld(src, 0); ++ src4 = __lsx_vldx(src, src_stride); + src += src_stride_2x; +- DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); + DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); + DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, dst0_r, dst0_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, +- filt1, dst0_l, dst0_l); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, +- filt1, dst1_r, dst1_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, +- filt1, dst1_l, dst1_l); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, src10_r, filt0, src10_l, filt0, src21_r, ++ filt0, src21_l, filt0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0_r, src32_r, filt1, dst0_l, ++ src32_l, filt1, dst1_r, src43_r, filt1, dst1_l, src43_l, ++ filt1, dst0_r, dst0_l, dst1_r, dst1_l); + __lsx_vst(dst0_r, dst, 0); + __lsx_vst(dst0_l, dst, 16); + dst += dst_stride; +@@ -2288,19 +2308,16 @@ static void hevc_vt_4t_16w_lsx(uint8_t *src, + __lsx_vst(dst1_l, dst, 16); + dst += dst_stride; + +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src5, src2); ++ src5 = __lsx_vld(src, 0); ++ src2 = __lsx_vldx(src, src_stride); + src += src_stride_2x; +- DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); + DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); + DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src32_r, filt0, dst0_r, src10_r, +- filt1, dst0_r, dst0_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src32_l, filt0, dst0_l, src10_l, +- filt1, dst0_l, dst0_l); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src43_r, filt0, dst1_r, src21_r, +- filt1, dst1_r, dst1_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src43_l, filt0, dst1_l, src21_l, +- filt1, dst1_l, dst1_l); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, src32_r, filt0, src32_l, filt0, src43_r, ++ filt0, src43_l, filt0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0_r, src10_r, filt1, dst0_l, ++ src10_l, filt1, dst1_r, src21_r, filt1, dst1_l, src21_l, ++ filt1, dst0_r, dst0_l, dst1_r, dst1_l); + __lsx_vst(dst0_r, dst, 0); + __lsx_vst(dst0_l, dst, 16); + dst += dst_stride; +@@ -2320,6 +2337,7 @@ static void hevc_vt_4t_24w_lsx(uint8_t *src, + int32_t loop_cnt; + int32_t src_stride_2x = (src_stride << 1); + int32_t src_stride_3x = src_stride_2x + src_stride; ++ uint8_t *_src; + + __m128i src0, src1, src2, src3, src4, src5; + __m128i src6, src7, src8, src9, src10, src11; +@@ -2329,49 +2347,40 @@ static void hevc_vt_4t_24w_lsx(uint8_t *src, + __m128i src10_l, src32_l, src21_l, src43_l; + __m128i dst0_l, dst1_l; + __m128i filt0, filt1; +- __m128i const_vec; + + src -= src_stride; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ _src = src + 16; + DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); + +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); +- src2 = __lsx_vld(src + src_stride_2x, 0); +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- src2 = __lsx_vxori_b(src2, 128); ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src1, src2); + DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); + DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); + +- DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src6, src7); +- src8 = __lsx_vld(src + src_stride_2x, 16); +- src += src_stride_3x; +- DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); +- src8 = __lsx_vxori_b(src8, 128); ++ src6 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride_2x, src7, src8); ++ src += src_stride_3x; ++ _src += src_stride_3x; + DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src3, src4); +- DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); ++ DUP2_ARG2(__lsx_vld, src, 0, _src, 0, src3, src9); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, _src, src_stride, src4, src10); ++ src += src_stride_2x; ++ _src += src_stride_2x; + DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); + DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); + +- DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src9, src10); +- src += src_stride_2x; +- DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); + DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); +- +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, dst0_r, dst0_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, +- filt1, dst0_l, dst0_l); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, +- filt1, dst1_r, dst1_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src21_l, filt0, dst1_l, src43_l, +- filt1, dst1_l, dst1_l); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src76_r, filt0, dst2_r, src98_r, +- filt1, dst2_r, dst2_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src87_r, filt0, dst3_r, src109_r, +- filt1, dst3_r, dst3_r); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, src10_r, filt0, src10_l, filt0, src21_r, ++ filt0, src21_l, filt0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0_r, src32_r, filt1, dst0_l, ++ src32_l, filt1, dst1_r, src43_r, filt1, dst1_l, src43_l, ++ filt1, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, src76_r, filt0, src87_r, filt0, ++ dst2_r, dst3_r); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst2_r, src98_r, filt1, dst3_r, ++ src109_r, filt1, dst2_r, dst3_r); + + __lsx_vst(dst0_r, dst, 0); + __lsx_vst(dst0_l, dst, 16); +@@ -2382,28 +2391,24 @@ static void hevc_vt_4t_24w_lsx(uint8_t *src, + __lsx_vst(dst3_r, dst, 32); + dst += dst_stride; + +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src5, src2); +- DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); ++ DUP2_ARG2(__lsx_vld, src, 0, _src, 0, src5, src11); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, _src, src_stride, src2, src8); ++ src += src_stride_2x; ++ _src += src_stride_2x; + DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); + DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); + +- DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src11, src8); +- src += src_stride_2x; +- DUP2_ARG2(__lsx_vxori_b, src11, 128, src8, 128, src11, src8); + DUP2_ARG2(__lsx_vilvl_b, src11, src10, src8, src11, src76_r, src87_r); + +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src32_r, filt0, dst0_r, src10_r, +- filt1, dst0_r, dst0_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src32_l, filt0, dst0_l, src10_l, +- filt1, dst0_l, dst0_l); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src43_r, filt0, dst1_r, src21_r, +- filt1, dst1_r, dst1_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src43_l, filt0, dst1_l, src21_l, +- filt1, dst1_l, dst1_l); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src98_r, filt0, dst2_r, src76_r, +- filt1, dst2_r, dst2_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src109_r, filt0, dst3_r, src87_r, +- filt1, dst3_r, dst3_r); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, src32_r, filt0, src32_l, filt0, src43_r, ++ filt0, src43_l, filt0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0_r, src10_r, filt1, dst0_l, src10_l, ++ filt1, dst1_r, src21_r, filt1, dst1_l, src21_l, filt1, ++ dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, src98_r, filt0, src109_r, filt0, ++ dst2_r, dst3_r); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst2_r, src76_r, filt1, dst3_r, src87_r, ++ filt1, dst2_r, dst3_r); + + __lsx_vst(dst0_r, dst, 0); + __lsx_vst(dst0_l, dst, 16); +@@ -2426,6 +2431,7 @@ static void hevc_vt_4t_32w_lsx(uint8_t *src, + int32_t loop_cnt; + int32_t src_stride_2x = (src_stride << 1); + int32_t src_stride_3x = src_stride_2x + src_stride; ++ uint8_t *_src; + + __m128i src0, src1, src2, src3, src4, src5; + __m128i src6, src7, src8, src9, src10, src11; +@@ -2436,55 +2442,44 @@ static void hevc_vt_4t_32w_lsx(uint8_t *src, + __m128i src21_l, src43_l, src87_l, src109_l; + __m128i dst0_l, dst1_l, dst2_l, dst3_l; + __m128i filt0, filt1; +- __m128i const_vec; + + src -= src_stride; +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 ++ _src = src + 16; + DUP2_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filt0, filt1); + +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); +- src2 = __lsx_vld(src + src_stride_2x, 0); +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1) +- src2 = __lsx_vxori_b(src2, 128); ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src1, src2); + DUP2_ARG2(__lsx_vilvl_b, src1, src0, src2, src1, src10_r, src21_r); + DUP2_ARG2(__lsx_vilvh_b, src1, src0, src2, src1, src10_l, src21_l); + +- DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src6, src7); +- src8 = __lsx_vld(src + src_stride_2x, 16); +- src += src_stride_3x; +- DUP2_ARG2(__lsx_vxori_b, src6, 128, src7, 128, src6, src7); +- src8 = __lsx_vxori_b(src8, 128); ++ src6 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride_2x, src7, src8); ++ src += src_stride_3x; ++ _src += src_stride_3x; + DUP2_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src76_r, src87_r); + DUP2_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src76_l, src87_l); + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src3, src4); +- DUP2_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src3, src4); ++ DUP2_ARG2(__lsx_vld, src, 0, _src, 0, src3, src9); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, _src, src_stride, src4, src10); ++ src += src_stride_2x; ++ _src += src_stride_2x; + DUP2_ARG2(__lsx_vilvl_b, src3, src2, src4, src3, src32_r, src43_r); + DUP2_ARG2(__lsx_vilvh_b, src3, src2, src4, src3, src32_l, src43_l); + +- DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src9, src10); +- src += src_stride_2x; +- DUP2_ARG2(__lsx_vxori_b, src9, 128, src10, 128, src9, src10); + DUP2_ARG2(__lsx_vilvl_b, src9, src8, src10, src9, src98_r, src109_r); + DUP2_ARG2(__lsx_vilvh_b, src9, src8, src10, src9, src98_l, src109_l); + +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src10_r, filt0, dst0_r, src32_r, +- filt1, dst0_r, dst0_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src10_l, filt0, dst0_l, src32_l, +- filt1, dst0_l, dst0_l); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src21_r, filt0, dst1_r, src43_r, +- filt1, dst1_r, dst1_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src21_l, filt0, dst1_l,src43_l, +- filt1, dst1_l, dst1_l); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src76_r, filt0, dst2_r, src98_r, +- filt1, dst2_r, dst2_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src76_l, filt0, dst2_l, src98_l, +- filt1, dst2_l, dst2_l); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src87_r, filt0, dst3_r, src109_r, +- filt1, dst3_r, dst3_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src87_l, filt0, dst3_l, src109_l, +- filt1, dst3_l, dst3_l); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, src10_r, filt0, src10_l, filt0, src21_r, ++ filt0, src21_l, filt0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0_r, src32_r, filt1, dst0_l, ++ src32_l, filt1, dst1_r, src43_r, filt1, dst1_l,src43_l, ++ filt1, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, src76_r, filt0, src76_l, filt0, src87_r, ++ filt0, src87_l, filt0, dst2_r, dst2_l, dst3_r, dst3_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst2_r, src98_r, filt1, dst2_l, src98_l, ++ filt1, dst3_r, src109_r, filt1, dst3_l, src109_l, filt1, ++ dst2_r, dst2_l, dst3_r, dst3_l); + + __lsx_vst(dst0_r, dst, 0); + __lsx_vst(dst0_l, dst, 16); +@@ -2497,33 +2492,27 @@ static void hevc_vt_4t_32w_lsx(uint8_t *src, + __lsx_vst(dst3_l, dst, 48); + dst += dst_stride; + +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src5, src2); +- DUP2_ARG2(__lsx_vxori_b, src5, 128, src2, 128, src5, src2); ++ DUP2_ARG2(__lsx_vld, src, 0, _src, 0, src5, src11); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, _src, src_stride, src2, src8); ++ src += src_stride_2x; ++ _src += src_stride_2x; + DUP2_ARG2(__lsx_vilvl_b, src5, src4, src2, src5, src10_r, src21_r); + DUP2_ARG2(__lsx_vilvh_b, src5, src4, src2, src5, src10_l, src21_l); + +- DUP2_ARG2(__lsx_vld, src, 16, src + src_stride, 16, src11, src8); +- src += src_stride_2x; +- DUP2_ARG2(__lsx_vxori_b, src11, 128, src8, 128, src11, src8); + DUP2_ARG2(__lsx_vilvl_b, src11, src10, src8, src11, src76_r, src87_r); + DUP2_ARG2(__lsx_vilvh_b, src11, src10, src8, src11, src76_l, src87_l); + +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src32_r, filt0, dst0_r, src10_r, +- filt1, dst0_r, dst0_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src32_l, filt0, dst0_l, src10_l, +- filt1, dst0_l, dst0_l); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src43_r, filt0, dst1_r, src21_r, +- filt1, dst1_r, dst1_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src43_l, filt0, dst1_l, src21_l, +- filt1, dst1_l, dst1_l); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src98_r, filt0, dst2_r, src76_r, +- filt1, dst2_r, dst2_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src98_l, filt0, dst2_l, src76_l, +- filt1, dst2_l, dst2_l); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src109_r, filt0, dst3_r, src87_r, +- filt1, dst3_r, dst3_r); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, src109_l, filt0, dst3_l, src87_l, +- filt1, dst3_l, dst3_l); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, src32_r, filt0, src32_l, filt0, src43_r, ++ filt0, src43_l, filt0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0_r, src10_r, filt1, dst0_l, ++ src10_l, filt1, dst1_r, src21_r, filt1, dst1_l, src21_l, ++ filt1, dst0_r, dst0_l, dst1_r, dst1_l); ++ ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, src98_r, filt0, src98_l, filt0, src109_r, ++ filt0, src109_l, filt0, dst2_r, dst2_l, dst3_r, dst3_l); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst2_r, src76_r, filt1, dst2_l, src76_l, ++ filt1, dst3_r, src87_r, filt1, dst3_l, src87_l, filt1, ++ dst2_r, dst2_l, dst3_r, dst3_l); + + __lsx_vst(dst0_r, dst, 0); + __lsx_vst(dst0_l, dst, 16); +@@ -2554,7 +2543,7 @@ static void hevc_hv_4t_8x2_lsx(uint8_t *src, + __m128i filt_h0, filt_h1; + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + __m128i mask1; +- __m128i filter_vec, const_vec; ++ __m128i filter_vec; + __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7, vec8, vec9; + __m128i dst0, dst1, dst2, dst3, dst4; + __m128i dst0_r, dst0_l, dst1_r, dst1_l; +@@ -2569,14 +2558,11 @@ static void hevc_hv_4t_8x2_lsx(uint8_t *src, + DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); + + mask1 = __lsx_vaddi_bu(mask0, 2); +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); +- src4 = __lsx_vld(src + src_stride_4x, 0); +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- src4 = __lsx_vxori_b(src4, 128); ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src1, src2); ++ src3 = __lsx_vldx(src, src_stride_3x); ++ src4 = __lsx_vldx(src, src_stride_4x); + + DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); + DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); +@@ -2584,28 +2570,25 @@ static void hevc_hv_4t_8x2_lsx(uint8_t *src, + DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec6, vec7); + DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec8, vec9); + +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, +- dst0, dst0); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec2, filt0, dst1, vec3, filt1, +- dst1, dst1); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst2, vec5, filt1, +- dst2, dst2); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec6, filt0, dst3, vec7, filt1, +- dst3, dst3); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec8, filt0, dst4, vec9, filt1, +- dst4, dst4); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, vec4, filt0, ++ vec6, filt0, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst1, vec3, filt1, ++ dst2, vec5, filt1, dst3, vec7, filt1, dst0, dst1, dst2, dst3); ++ dst4 = __lsx_vdp2_h_bu_b(vec8, filt0); ++ dst4 = __lsx_vdp2add_h_bu_b(dst4, vec9, filt1); + + DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); + DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); + DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); + DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); + +- dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); +- dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +- dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); +- dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); +- DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, dst0_r, +- dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst10_l, filt_h0, dst21_r, ++ filt_h0, dst21_l, filt_h0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst32_r, filt_h1, dst0_l, dst32_l, ++ filt_h1, dst1_r, dst43_r, filt_h1, dst1_l, dst43_l, filt_h1, ++ dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, ++ dst0_r, dst0_l, dst1_r, dst1_l); + DUP2_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); + __lsx_vst(dst0_r, dst, 0); + __lsx_vst(dst1_r, dst + dst_stride, 0); +@@ -2618,14 +2601,15 @@ static void hevc_hv_4t_8multx4_lsx(uint8_t *src, int32_t src_stride, + { + int32_t cnt; + int32_t src_stride_2x = (src_stride << 1); +- int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t dst_stride_x = (dst_stride << 1); + int32_t src_stride_4x = (src_stride << 2); ++ int32_t dst_stride_2x = (dst_stride << 2); + int32_t src_stride_3x = src_stride_2x + src_stride; +- int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride_x; + + __m128i src0, src1, src2, src3, src4, src5, src6, mask0, mask1; + __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; +- __m128i filt0, filt1, filt_h0, filt_h1, filter_vec, const_vec; ++ __m128i filt0, filt1, filt_h0, filt_h1, filter_vec; + __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6; + __m128i dst10_r, dst32_r, dst54_r, dst21_r, dst43_r, dst65_r; + __m128i dst10_l, dst32_l, dst54_l, dst21_l, dst43_l, dst65_l; +@@ -2640,64 +2624,72 @@ static void hevc_hv_4t_8multx4_lsx(uint8_t *src, int32_t src_stride, + + mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + mask1 = __lsx_vaddi_bu(mask0, 2); +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + for (cnt = width8mult; cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); ++ src0 = __lsx_vld(src, 0); ++ DUP4_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src, ++ src_stride_3x, src, src_stride_4x, src1, src2, src3, src4); + src += src_stride_4x; +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src4, src5); +- src6 = __lsx_vld(src + src_stride_2x, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src5, src6); + src += (8 - src_stride_4x); +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3) +- DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); +- src6 = __lsx_vxori_b(src6, 128); + +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, ++ vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, ++ vec4, vec5); + +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, dst0); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec2, filt0, dst1, vec3, filt1, dst1, dst1); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst2, vec5, filt1, dst2, dst2); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, dst0, dst1); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst1, vec3, filt1, ++ dst0, dst1); ++ dst2 = __lsx_vdp2_h_bu_b(vec4, filt0); ++ dst2 = __lsx_vdp2add_h_bu_b(dst2, vec5, filt1); + + DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); + DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); + +- DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); +- DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); +- DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, dst3, dst3); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec2, filt0, dst4, vec3, filt1, dst4, dst4); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst5, vec5, filt1, dst5, dst5); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec6, filt0, dst6, vec7, filt1, dst6, dst6); ++ DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, ++ vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, ++ vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, ++ vec6, vec7); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, vec4, filt0, ++ vec6, filt0, dst3, dst4, dst5, dst6); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst3, vec1, filt1, dst4, vec3, filt1, ++ dst5, vec5, filt1, dst6, vec7, filt1, dst3, dst4, dst5, dst6); + DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); + DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); + DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst54_r, dst65_r); + DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst54_l, dst65_l); + +- dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); +- dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +- dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); +- dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst10_l, filt_h0, dst21_r, ++ filt_h0, dst21_l, filt_h0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst32_r, filt_h1, dst0_l, dst32_l, ++ filt_h1, dst1_r, dst43_r, filt_h1, dst1_l, dst43_l, filt_h1, ++ dst0_r, dst0_l, dst1_r, dst1_l); + +- dst2_r = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); +- dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); +- dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); +- dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst32_r, filt_h0, dst32_l, filt_h0, dst43_r, ++ filt_h0, dst43_l, filt_h0, dst2_r, dst2_l, dst3_r, dst3_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst2_r, dst54_r, filt_h1, dst2_l, dst54_l, ++ filt_h1, dst3_r, dst65_r, filt_h1, dst3_l, dst65_l, filt_h1, ++ dst2_r, dst2_l, dst3_r, dst3_l); + DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, + dst0_r, dst0_l, dst1_r, dst1_l); + DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, + dst2_r, dst2_l, dst3_r, dst3_l); +- DUP2_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r); +- DUP2_ARG2(__lsx_vpickev_h, dst2_l, dst2_r, dst3_l, dst3_r, dst2_r, dst3_r); ++ DUP2_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, ++ dst0_r, dst1_r); ++ DUP2_ARG2(__lsx_vpickev_h, dst2_l, dst2_r, dst3_l, dst3_r, ++ dst2_r, dst3_r); + + __lsx_vst(dst0_r, dst, 0); +- __lsx_vst(dst1_r, dst + dst_stride, 0); +- __lsx_vst(dst2_r, dst + dst_stride_2x, 0); +- __lsx_vst(dst3_r, dst + dst_stride_3x, 0); ++ __lsx_vstx(dst1_r, dst, dst_stride_x); ++ __lsx_vstx(dst2_r, dst, dst_stride_2x); ++ __lsx_vstx(dst3_r, dst, dst_stride_3x); + dst += 8; + } + } +@@ -2717,8 +2709,7 @@ static void hevc_hv_4t_8x6_lsx(uint8_t *src, + __m128i filt0, filt1; + __m128i filt_h0, filt_h1; + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); +- __m128i mask1; +- __m128i filter_vec, const_vec; ++ __m128i mask1, filter_vec; + __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7, vec8, vec9; + __m128i vec10, vec11, vec12, vec13, vec14, vec15, vec16, vec17; + __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, dst8; +@@ -2737,20 +2728,13 @@ static void hevc_hv_4t_8x6_lsx(uint8_t *src, + DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); + + mask1 = __lsx_vaddi_bu(mask0, 2); +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 +- +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src0, src1, src2, src3); +- src4 = __lsx_vld(src + src_stride_4x, 0); +- src += (src_stride_4x + src_stride); +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src5, src6, src7, src8); + +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); +- src4 = __lsx_vxori_b(src4, 128); +- DUP4_ARG2(__lsx_vxori_b, src5, 128, src6, 128, src7, 128, src8, 128, src5, +- src6, src7, src8); ++ src0 = __lsx_vld(src, 0); ++ DUP4_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src, ++ src_stride_3x, src, src_stride_4x, src1, src2, src3, src4); ++ src += src_stride_4x; ++ DUP4_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src, ++ src_stride_3x, src, src_stride_4x, src5, src6, src7, src8); + + DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, src1, src1, + mask0, src1, src1, mask1, vec0, vec1, vec2, vec3); +@@ -2760,17 +2744,19 @@ static void hevc_hv_4t_8x6_lsx(uint8_t *src, + mask0, src5, src5, mask1, vec8, vec9, vec10, vec11); + DUP4_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, src7, src7, + mask0, src7, src7, mask1, vec12, vec13, vec14, vec15); +- DUP2_ARG3(__lsx_vshuf_b, src8, src8, mask0, src8, src8, mask1, vec16, vec17); +- +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, +- const_vec, vec2, filt0, dst1, vec3, filt1, dst0, dst0, dst1, dst1); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst2, vec5, filt1, +- const_vec, vec6, filt0, dst3, vec7, filt1, dst2, dst2, dst3, dst3); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec8, filt0, dst4, vec9, filt1, +- const_vec, vec10, filt0, dst5, vec11, filt1, dst4, dst4, dst5, dst5); +- DUP4_ARG3(__lsx_vdp2add_h_b, const_vec, vec12, filt0, dst6, vec13, filt1, +- const_vec, vec14, filt0, dst7, vec15, filt1, dst6, dst6, dst7, dst7); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec16, filt0, dst8, vec17, filt1, dst8, dst8); ++ DUP2_ARG3(__lsx_vshuf_b, src8, src8, mask0, src8, src8, mask1, ++ vec16, vec17); ++ ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, vec4, filt0, vec6, ++ filt0, dst0, dst1, dst2, dst3); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst1, vec3, filt1, ++ dst2, vec5, filt1, dst3, vec7, filt1, dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec8, filt0, vec10, filt0, vec12, filt0, ++ vec14, filt0, dst4, dst5, dst6, dst7); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst4, vec9, filt1, dst5, vec11, filt1, dst6, ++ vec13, filt1, dst7, vec15, filt1, dst4, dst5, dst6, dst7); ++ dst8 = __lsx_vdp2_h_bu_b(vec16, filt0); ++ dst8 = __lsx_vdp2add_h_bu_b(dst8, vec17, filt1); + + DUP4_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst3, dst2, dst4, dst3, + dst10_r, dst21_r, dst32_r, dst43_r); +@@ -2781,19 +2767,21 @@ static void hevc_hv_4t_8x6_lsx(uint8_t *src, + DUP4_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst7, dst6, dst8, dst7, + dst54_l, dst65_l, dst76_l, dst87_l); + +- dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); +- dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +- dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); +- dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); +- dst2_r = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); +- dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); +- dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); +- dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); +- dst4_r = __lsx_hevc_filt_4tap_w(dst54_r, dst76_r, filt_h0, filt_h1); +- dst4_l = __lsx_hevc_filt_4tap_w(dst54_l, dst76_l, filt_h0, filt_h1); +- dst5_r = __lsx_hevc_filt_4tap_w(dst65_r, dst87_r, filt_h0, filt_h1); +- dst5_l = __lsx_hevc_filt_4tap_w(dst65_l, dst87_l, filt_h0, filt_h1); +- ++ DUP4_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst10_l, filt_h0, dst21_r, ++ filt_h0, dst21_l, filt_h0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst32_r, filt_h0, dst32_l, filt_h0, dst43_r, ++ filt_h0, dst43_l, filt_h0, dst2_r, dst2_l, dst3_r, dst3_l); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst54_r, filt_h0, dst54_l, filt_h0, dst65_r, ++ filt_h0, dst65_l, filt_h0, dst4_r, dst4_l, dst5_r, dst5_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst32_r, filt_h1, dst0_l, dst32_l, ++ filt_h1, dst1_r, dst43_r, filt_h1, dst1_l, dst43_l, filt_h1, ++ dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst2_r, dst54_r, filt_h1, dst2_l, dst54_l, ++ filt_h1, dst3_r, dst65_r, filt_h1, dst3_l, dst65_l, filt_h1, ++ dst2_r, dst2_l, dst3_r, dst3_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst4_r, dst76_r, filt_h1, dst4_l, dst76_l, ++ filt_h1, dst5_r, dst87_r, filt_h1, dst5_l, dst87_l, filt_h1, ++ dst4_r, dst4_l, dst5_r, dst5_l); + DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, dst0_r, + dst0_l, dst1_r, dst1_l); + DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, dst2_r, +@@ -2806,13 +2794,13 @@ static void hevc_hv_4t_8x6_lsx(uint8_t *src, + DUP2_ARG2(__lsx_vpickev_h, dst4_l, dst4_r, dst5_l, dst5_r, dst4_r, dst5_r); + + __lsx_vst(dst0_r, dst, 0); +- __lsx_vst(dst1_r, dst + dst_stride, 0); ++ __lsx_vstx(dst1_r, dst, dst_stride_2x); + dst += dst_stride_2x; + __lsx_vst(dst2_r, dst, 0); +- __lsx_vst(dst3_r, dst + dst_stride, 0); ++ __lsx_vstx(dst3_r, dst, dst_stride_2x); + dst += dst_stride_2x; + __lsx_vst(dst4_r, dst, 0); +- __lsx_vst(dst5_r, dst + dst_stride, 0); ++ __lsx_vstx(dst5_r, dst, dst_stride_2x); + } + + static void hevc_hv_4t_8multx4mult_lsx(uint8_t *src, +@@ -2828,18 +2816,17 @@ static void hevc_hv_4t_8multx4mult_lsx(uint8_t *src, + uint8_t *src_tmp; + int16_t *dst_tmp; + int32_t src_stride_2x = (src_stride << 1); +- int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t dst_stride_x = (dst_stride << 1); + int32_t src_stride_4x = (src_stride << 2); +- int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t dst_stride_2x = (dst_stride << 2); + int32_t src_stride_3x = src_stride_2x + src_stride; +- int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride_x; + + __m128i src0, src1, src2, src3, src4, src5, src6; + __m128i filt0, filt1; + __m128i filt_h0, filt_h1; + __m128i mask0 = __lsx_vld(ff_hevc_mask_arr, 0); +- __m128i mask1; +- __m128i filter_vec, const_vec; ++ __m128i mask1, filter_vec; + __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; + __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6; + __m128i dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l; +@@ -2854,65 +2841,69 @@ static void hevc_hv_4t_8multx4mult_lsx(uint8_t *src, + DUP2_ARG2(__lsx_vreplvei_w, filter_vec, 0, filter_vec, 1, filt_h0, filt_h1); + + mask1 = __lsx_vaddi_bu(mask0, 2); +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + for (cnt = width8mult; cnt--;) { + src_tmp = src; + dst_tmp = dst; + +- DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src0, src1); +- src2 = __lsx_vld(src_tmp + src_stride_2x, 0); ++ src0 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride_2x, ++ src1, src2); + src_tmp += src_stride_3x; + +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- src2 = __lsx_vxori_b(src2, 128); ++ DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, ++ vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, ++ vec4, vec5); + +- DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); +- DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); +- +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, dst0); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec2, filt0, dst1, vec3, filt1, dst1, dst1); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst2, vec5, filt1, dst2, dst2); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, dst0, dst1); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst1, vec3, filt1, ++ dst0, dst1); ++ dst2 = __lsx_vdp2_h_bu_b(vec4, filt0); ++ dst2 = __lsx_vdp2add_h_bu_b(dst2, vec5, filt1); + + DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); + DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); + + for (loop_cnt = height >> 2; loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, +- src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, +- src3, src4, src5, src6); ++ src3 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride_2x, ++ src4, src5); ++ src6 = __lsx_vldx(src_tmp, src_stride_3x); + src_tmp += src_stride_4x; +- DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, +- src3, src4, src5, src6); +- +- DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); +- DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); +- DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); +- +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, +- dst3, dst3); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec2, filt0, dst4, vec3, filt1, +- dst4, dst4); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst5, vec5, filt1, +- dst5, dst5); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec6, filt0, dst6, vec7, filt1, +- dst6, dst6); ++ ++ DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, ++ vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, ++ vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, ++ vec6, vec7); ++ ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, vec4, filt0, ++ vec6, filt0, dst3, dst4, dst5, dst6); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst3, vec1, filt1, dst4, vec3, ++ filt1, dst5, vec5, filt1, dst6, vec7, filt1, dst3, ++ dst4, dst5, dst6); + + DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); + DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); + DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst54_r, dst65_r); + DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst54_l, dst65_l); + +- dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); +- dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +- dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); +- dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); +- dst2_r = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); +- dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); +- dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); +- dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst10_l, filt_h0, dst21_r, ++ filt_h0, dst21_l, filt_h0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst32_r, filt_h0, dst32_l, filt_h0, dst43_r, ++ filt_h0, dst43_l, filt_h0, dst2_r, dst2_l, dst3_r, dst3_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst32_r, filt_h1, dst0_l, ++ dst32_l, filt_h1, dst1_r, dst43_r, filt_h1, dst1_l, ++ dst43_l, filt_h1, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst2_r, dst54_r, filt_h1, dst2_l, ++ dst54_l, filt_h1, dst3_r, dst65_r, filt_h1, dst3_l, ++ dst65_l, filt_h1, dst2_r, dst2_l, dst3_r, dst3_l); + + DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, + dst0_r, dst0_l, dst1_r, dst1_l); +@@ -2923,10 +2914,10 @@ static void hevc_hv_4t_8multx4mult_lsx(uint8_t *src, + dst2_r, dst3_l, dst3_r, dst0_r, dst1_r, dst2_r, dst3_r); + + __lsx_vst(dst0_r, dst_tmp, 0); +- __lsx_vst(dst1_r, dst_tmp + dst_stride, 0); +- __lsx_vst(dst2_r, dst_tmp + dst_stride_2x, 0); +- __lsx_vst(dst3_r, dst_tmp + dst_stride_3x, 0); +- dst_tmp += dst_stride_4x; ++ __lsx_vstx(dst1_r, dst_tmp, dst_stride_x); ++ __lsx_vstx(dst2_r, dst_tmp, dst_stride_2x); ++ __lsx_vstx(dst3_r, dst_tmp, dst_stride_3x); ++ dst_tmp += dst_stride_2x; + + dst10_r = dst54_r; + dst10_l = dst54_l; +@@ -2975,17 +2966,17 @@ static void hevc_hv_4t_12w_lsx(uint8_t *src, + uint8_t *src_tmp; + int16_t *dst_tmp; + int32_t src_stride_2x = (src_stride << 1); +- int32_t dst_stride_2x = (dst_stride << 1); ++ int32_t dst_stride_x = (dst_stride << 1); + int32_t src_stride_4x = (src_stride << 2); +- int32_t dst_stride_4x = (dst_stride << 2); ++ int32_t dst_stride_2x = (dst_stride << 2); + int32_t src_stride_3x = src_stride_2x + src_stride; +- int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ int32_t dst_stride_3x = dst_stride_2x + dst_stride_x; + + __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; + __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; + __m128i mask0, mask1, mask2, mask3; +- __m128i filt0, filt1, filt_h0, filt_h1, filter_vec, const_vec; +- __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst10, dst21, dst22, dst73; ++ __m128i filt0, filt1, filt_h0, filt_h1, filter_vec, dst0; ++ __m128i dst1, dst2, dst3, dst4, dst5, dst6, dst10, dst21, dst22, dst73; + __m128i dst84, dst95, dst106, dst76_r, dst98_r, dst87_r, dst109_r; + __m128i dst10_r, dst32_r, dst54_r, dst21_r, dst43_r, dst65_r; + __m128i dst10_l, dst32_l, dst54_l, dst21_l, dst43_l, dst65_l; +@@ -3001,61 +2992,65 @@ static void hevc_hv_4t_12w_lsx(uint8_t *src, + + mask0 = __lsx_vld(ff_hevc_mask_arr, 0); + mask1 = __lsx_vaddi_bu(mask0, 2); +- const_vec = __lsx_vreplgr2vr_h(8192); // 128 << 6 + + src_tmp = src; + dst_tmp = dst; + +- DUP2_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, src0, src1); +- src2 = __lsx_vld(src_tmp + src_stride_2x, 0); ++ src0 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride_2x, ++ src1, src2); + src_tmp += src_stride_3x; + +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- src2 = __lsx_vxori_b(src2, 128); +- + DUP2_ARG3(__lsx_vshuf_b, src0, src0, mask0, src0, src0, mask1, vec0, vec1); + DUP2_ARG3(__lsx_vshuf_b, src1, src1, mask0, src1, src1, mask1, vec2, vec3); + DUP2_ARG3(__lsx_vshuf_b, src2, src2, mask0, src2, src2, mask1, vec4, vec5); + +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst0, vec1, filt1, dst0, dst0); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec2, filt0, dst1, vec3, filt1, dst1, dst1); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst2, vec5, filt1, dst2, dst2); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, dst0, dst1); ++ dst2 = __lsx_vdp2_h_bu_b(vec4, filt0); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst0, vec1, filt1, dst1, vec3, filt1, ++ dst0, dst1); ++ dst2 = __lsx_vdp2add_h_bu_b(dst2, vec5, filt1); + + DUP2_ARG2(__lsx_vilvl_h, dst1, dst0, dst2, dst1, dst10_r, dst21_r); + DUP2_ARG2(__lsx_vilvh_h, dst1, dst0, dst2, dst1, dst10_l, dst21_l); + + for (loop_cnt = 4; loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src_tmp, 0, src_tmp + src_stride, 0, +- src_tmp + src_stride_2x, 0, src_tmp + src_stride_3x, 0, src3, +- src4, src5, src6); ++ src3 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride_2x, ++ src4, src5); ++ src6 = __lsx_vldx(src_tmp, src_stride_3x); + src_tmp += src_stride_4x; +- DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, +- src4, src5, src6); + +- DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, vec2, vec3); +- DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, vec4, vec5); +- DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, vec6, vec7); +- +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst3, vec1, filt1, dst3, dst3); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec2, filt0, dst4, vec3, filt1, dst4, dst4); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst5, vec5, filt1, dst5, dst5); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec6, filt0, dst6, vec7, filt1, dst6, dst6); ++ DUP2_ARG3(__lsx_vshuf_b, src3, src3, mask0, src3, src3, mask1, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src4, src4, mask0, src4, src4, mask1, ++ vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src5, src5, mask0, src5, src5, mask1, ++ vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src6, src6, mask0, src6, src6, mask1, ++ vec6, vec7); ++ ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, vec4, filt0, ++ vec6, filt0, dst3, dst4, dst5, dst6); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst3, vec1, filt1, dst4, vec3, ++ filt1, dst5, vec5, filt1, dst6, vec7, filt1, dst3, ++ dst4, dst5, dst6); + + DUP2_ARG2(__lsx_vilvl_h, dst3, dst2, dst4, dst3, dst32_r, dst43_r); + DUP2_ARG2(__lsx_vilvh_h, dst3, dst2, dst4, dst3, dst32_l, dst43_l); + DUP2_ARG2(__lsx_vilvl_h, dst5, dst4, dst6, dst5, dst54_r, dst65_r); + DUP2_ARG2(__lsx_vilvh_h, dst5, dst4, dst6, dst5, dst54_l, dst65_l); + +- dst0_r = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); +- dst0_l = __lsx_hevc_filt_4tap_w(dst10_l, dst32_l, filt_h0, filt_h1); +- dst1_r = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); +- dst1_l = __lsx_hevc_filt_4tap_w(dst21_l, dst43_l, filt_h0, filt_h1); +- dst2_r = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); +- dst2_l = __lsx_hevc_filt_4tap_w(dst32_l, dst54_l, filt_h0, filt_h1); +- dst3_r = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); +- dst3_l = __lsx_hevc_filt_4tap_w(dst43_l, dst65_l, filt_h0, filt_h1); +- ++ DUP4_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst10_l, filt_h0, dst21_r, ++ filt_h0, dst21_l, filt_h0, dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst32_r, filt_h0, dst32_l, filt_h0, dst43_r, ++ filt_h0, dst43_l, filt_h0, dst2_r, dst2_l, dst3_r, dst3_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst0_r, dst32_r, filt_h1, dst0_l, dst32_l, ++ filt_h1, dst1_r, dst43_r, filt_h1, dst1_l, dst43_l, filt_h1, ++ dst0_r, dst0_l, dst1_r, dst1_l); ++ DUP4_ARG3(__lsx_vdp2add_w_h, dst2_r, dst54_r, filt_h1, dst2_l, dst54_l, ++ filt_h1, dst3_r, dst65_r, filt_h1, dst3_l, dst65_l, filt_h1, ++ dst2_r, dst2_l, dst3_r, dst3_l); + DUP4_ARG2(__lsx_vsrai_w, dst0_r, 6, dst0_l, 6, dst1_r, 6, dst1_l, 6, + dst0_r, dst0_l, dst1_r, dst1_l); + DUP4_ARG2(__lsx_vsrai_w, dst2_r, 6, dst2_l, 6, dst3_r, 6, dst3_l, 6, +@@ -3063,10 +3058,10 @@ static void hevc_hv_4t_12w_lsx(uint8_t *src, + DUP4_ARG2(__lsx_vpickev_h, dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, dst2_r, + dst3_l, dst3_r, dst0_r, dst1_r, dst2_r, dst3_r); + __lsx_vst(dst0_r, dst_tmp, 0); +- __lsx_vst(dst1_r, dst_tmp + dst_stride, 0); +- __lsx_vst(dst2_r, dst_tmp + dst_stride_2x, 0); +- __lsx_vst(dst3_r, dst_tmp + dst_stride_3x, 0); +- dst_tmp += dst_stride_4x; ++ __lsx_vstx(dst1_r, dst_tmp, dst_stride_x); ++ __lsx_vstx(dst2_r, dst_tmp, dst_stride_2x); ++ __lsx_vstx(dst3_r, dst_tmp, dst_stride_3x); ++ dst_tmp += dst_stride_2x; + + dst10_r = dst54_r; + dst10_l = dst54_l; +@@ -3081,43 +3076,41 @@ static void hevc_hv_4t_12w_lsx(uint8_t *src, + mask2 = __lsx_vld(ff_hevc_mask_arr, 16); + mask3 = __lsx_vaddi_bu(mask2, 2); + +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); +- src2 = __lsx_vld(src + src_stride_2x, 0); ++ src0 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src1, src2); + src += src_stride_3x; +- DUP2_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src0, src1); +- src2 = __lsx_vxori_b(src2, 128); + DUP2_ARG3(__lsx_vshuf_b, src1, src0, mask2, src1, src0, mask3, vec0, vec1); + DUP2_ARG3(__lsx_vshuf_b, src2, src1, mask2, src2, src1, mask3, vec2, vec3); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst10, vec1, filt1, dst10, dst10); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec2, filt0, dst21, vec3, filt1, dst21, dst21); ++ DUP2_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, dst10, dst21); ++ DUP2_ARG3(__lsx_vdp2add_h_bu_b, dst10, vec1, filt1, dst21, vec3, filt1, ++ dst10, dst21); + dst10_r = __lsx_vilvl_h(dst21, dst10); + dst21_r = __lsx_vilvh_h(dst21, dst10); + dst22 = __lsx_vreplvei_d(dst21, 1); + + for (loop_cnt = 2; loop_cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src3, src4, src5, src6); ++ src3 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src4, src5); ++ src6 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP4_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src + src_stride_2x, 0, +- src + src_stride_3x, 0, src7, src8, src9, src10); ++ src7 = __lsx_vld(src, 0); ++ DUP2_ARG2(__lsx_vldx, src, src_stride, src, src_stride_2x, src8, src9); ++ src10 = __lsx_vldx(src, src_stride_3x); + src += src_stride_4x; +- DUP4_ARG2(__lsx_vxori_b, src3, 128, src4, 128, src5, 128, src6, 128, src3, +- src4, src5, src6); +- DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, src7, +- src8, src9, src10); +- DUP2_ARG3(__lsx_vshuf_b, src7, src3, mask2, src7, src3, mask3, vec0, vec1); +- DUP2_ARG3(__lsx_vshuf_b, src8, src4, mask2, src8, src4, mask3, vec2, vec3); +- DUP2_ARG3(__lsx_vshuf_b, src9, src5, mask2, src9, src5, mask3, vec4, vec5); +- DUP2_ARG3(__lsx_vshuf_b, src10, src6, mask2, src10, src6, mask3, vec6, vec7); +- +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec0, filt0, dst73, vec1, filt1, +- dst73, dst73); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec2, filt0, dst84, vec3, filt1, +- dst84, dst84); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec4, filt0, dst95, vec5, filt1, +- dst95, dst95); +- DUP2_ARG3(__lsx_vdp2add_h_b, const_vec, vec6, filt0, dst106, vec7, filt1, +- dst106, dst106); ++ DUP2_ARG3(__lsx_vshuf_b, src7, src3, mask2, src7, src3, mask3, ++ vec0, vec1); ++ DUP2_ARG3(__lsx_vshuf_b, src8, src4, mask2, src8, src4, mask3, ++ vec2, vec3); ++ DUP2_ARG3(__lsx_vshuf_b, src9, src5, mask2, src9, src5, mask3, ++ vec4, vec5); ++ DUP2_ARG3(__lsx_vshuf_b, src10, src6, mask2, src10, src6, mask3, ++ vec6, vec7); ++ ++ DUP4_ARG2(__lsx_vdp2_h_bu_b, vec0, filt0, vec2, filt0, vec4, filt0, ++ vec6, filt0, dst73, dst84, dst95, dst106); ++ DUP4_ARG3(__lsx_vdp2add_h_bu_b, dst73, vec1, filt1, dst84, vec3, ++ filt1, dst95, vec5, filt1, dst106, vec7, filt1, dst73, ++ dst84, dst95, dst106); + + DUP2_ARG2(__lsx_vilvl_h, dst73, dst22, dst84, dst73, dst32_r, dst43_r); + DUP2_ARG2(__lsx_vilvh_h, dst84, dst73, dst95, dst84, dst87_r, dst98_r); +@@ -3126,30 +3119,39 @@ static void hevc_hv_4t_12w_lsx(uint8_t *src, + dst22 = __lsx_vreplvei_d(dst73, 1); + dst76_r = __lsx_vilvl_h(dst22, dst106); + +- tmp0 = __lsx_hevc_filt_4tap_w(dst10_r, dst32_r, filt_h0, filt_h1); +- tmp1 = __lsx_hevc_filt_4tap_w(dst21_r, dst43_r, filt_h0, filt_h1); +- tmp2 = __lsx_hevc_filt_4tap_w(dst32_r, dst54_r, filt_h0, filt_h1); +- tmp3 = __lsx_hevc_filt_4tap_w(dst43_r, dst65_r, filt_h0, filt_h1); +- tmp4 = __lsx_hevc_filt_4tap_w(dst54_r, dst76_r, filt_h0, filt_h1); +- tmp5 = __lsx_hevc_filt_4tap_w(dst65_r, dst87_r, filt_h0, filt_h1); +- tmp6 = __lsx_hevc_filt_4tap_w(dst76_r, dst98_r, filt_h0, filt_h1); +- tmp7 = __lsx_hevc_filt_4tap_w(dst87_r, dst109_r, filt_h0, filt_h1); +- +- DUP4_ARG2(__lsx_vsrai_w, tmp0, 6, tmp1, 6, tmp2, 6, tmp3, 6, tmp0, tmp1, tmp2, tmp3); +- DUP4_ARG2(__lsx_vsrai_w, tmp4, 6, tmp5, 6, tmp6, 6, tmp7, 6, tmp4, tmp5, tmp6, tmp7); +- DUP4_ARG2(__lsx_vpickev_h, tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, ++ DUP4_ARG2(__lsx_vdp2_w_h, dst10_r, filt_h0, dst21_r, filt_h0, dst32_r, ++ filt_h0, dst43_r, filt_h0, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vdp2_w_h, dst54_r, filt_h0, dst65_r, filt_h0, dst76_r, ++ filt_h0, dst87_r, filt_h0, tmp4, tmp5, tmp6, tmp7); ++ DUP4_ARG3(__lsx_vdp2add_w_h, tmp0, dst32_r, filt_h1, tmp1, dst43_r, ++ filt_h1, tmp2, dst54_r, filt_h1, tmp3, dst65_r, filt_h1, ++ tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG3(__lsx_vdp2add_w_h, tmp4, dst76_r, filt_h1, tmp5, dst87_r, ++ filt_h1, tmp6, dst98_r, filt_h1, tmp7, dst109_r, filt_h1, ++ tmp4, tmp5, tmp6, tmp7); ++ DUP4_ARG2(__lsx_vsrai_w, tmp0, 6, tmp1, 6, tmp2, 6, tmp3, 6, + tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vsrai_w, tmp4, 6, tmp5, 6, tmp6, 6, tmp7, 6, ++ tmp4, tmp5, tmp6, tmp7); ++ DUP4_ARG2(__lsx_vpickev_h, tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, ++ tmp7, tmp6, tmp0, tmp1, tmp2, tmp3); + + __lsx_vstelm_d(tmp0, dst, 0, 0); +- __lsx_vstelm_d(tmp0, dst + dst_stride, 0, 1); +- __lsx_vstelm_d(tmp1, dst + dst_stride_2x, 0, 0); +- __lsx_vstelm_d(tmp1, dst + dst_stride_3x, 0, 1); +- dst += dst_stride_4x; ++ dst += dst_stride; ++ __lsx_vstelm_d(tmp0, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(tmp1, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(tmp1, dst, 0, 1); ++ dst += dst_stride; + __lsx_vstelm_d(tmp2, dst, 0, 0); +- __lsx_vstelm_d(tmp2, dst + dst_stride, 0, 1); +- __lsx_vstelm_d(tmp3, dst + dst_stride_2x, 0, 0); +- __lsx_vstelm_d(tmp3, dst + dst_stride_3x, 0, 1); +- dst += dst_stride_4x; ++ dst += dst_stride; ++ __lsx_vstelm_d(tmp2, dst, 0, 1); ++ dst += dst_stride; ++ __lsx_vstelm_d(tmp3, dst, 0, 0); ++ dst += dst_stride; ++ __lsx_vstelm_d(tmp3, dst, 0, 1); ++ dst += dst_stride; + + dst10_r = dst98_r; + dst21_r = dst109_r; +diff --git a/libavcodec/loongarch/hevcdsp_lsx.h b/libavcodec/loongarch/hevcdsp_lsx.h +index 609cfa081b..0c517af887 100644 +--- a/libavcodec/loongarch/hevcdsp_lsx.h ++++ b/libavcodec/loongarch/hevcdsp_lsx.h +@@ -1,6 +1,7 @@ + /* +- * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Copyright (c) 2022 Loongson Technology Corporation Limited + * Contributed by Lu Wang ++ * Hao Chen + * + * This file is part of FFmpeg. + * +@@ -84,6 +85,63 @@ MC(epel, hv, 32); + + #undef MC + ++#define BI_MC(PEL, DIR, WIDTH) \ ++void ff_hevc_put_hevc_bi_##PEL##_##DIR##WIDTH##_8_lsx(uint8_t *dst, \ ++ ptrdiff_t dst_stride, \ ++ uint8_t *src, \ ++ ptrdiff_t src_stride, \ ++ int16_t *src_16bit, \ ++ int height, \ ++ intptr_t mx, \ ++ intptr_t my, \ ++ int width) ++ ++BI_MC(pel, pixels, 4); ++BI_MC(pel, pixels, 6); ++BI_MC(pel, pixels, 8); ++BI_MC(pel, pixels, 12); ++BI_MC(pel, pixels, 16); ++BI_MC(pel, pixels, 24); ++BI_MC(pel, pixels, 32); ++BI_MC(pel, pixels, 48); ++BI_MC(pel, pixels, 64); ++ ++BI_MC(qpel, h, 16); ++BI_MC(qpel, h, 24); ++BI_MC(qpel, h, 32); ++BI_MC(qpel, h, 48); ++BI_MC(qpel, h, 64); ++ ++BI_MC(qpel, v, 8); ++BI_MC(qpel, v, 16); ++BI_MC(qpel, v, 24); ++BI_MC(qpel, v, 32); ++BI_MC(qpel, v, 48); ++BI_MC(qpel, v, 64); ++ ++BI_MC(qpel, hv, 8); ++BI_MC(qpel, hv, 16); ++BI_MC(qpel, hv, 24); ++BI_MC(qpel, hv, 32); ++BI_MC(qpel, hv, 48); ++BI_MC(qpel, hv, 64); ++ ++BI_MC(epel, h, 24); ++BI_MC(epel, h, 32); ++ ++BI_MC(epel, v, 12); ++BI_MC(epel, v, 16); ++BI_MC(epel, v, 24); ++BI_MC(epel, v, 32); ++ ++BI_MC(epel, hv, 6); ++BI_MC(epel, hv, 8); ++BI_MC(epel, hv, 16); ++BI_MC(epel, hv, 24); ++BI_MC(epel, hv, 32); ++ ++#undef BI_MC ++ + #define UNI_MC(PEL, DIR, WIDTH) \ + void ff_hevc_put_hevc_uni_##PEL##_##DIR##WIDTH##_8_lsx(uint8_t *dst, \ + ptrdiff_t dst_stride, \ +@@ -143,82 +201,21 @@ UNI_W_MC(qpel, hv, 64); + + #undef UNI_W_MC + +-#define BI_MC(PEL, DIR, WIDTH) \ +-void ff_hevc_put_hevc_bi_##PEL##_##DIR##WIDTH##_8_lsx(uint8_t *dst, \ +- ptrdiff_t dst_stride, \ +- uint8_t *src, \ +- ptrdiff_t src_stride, \ +- int16_t *src_16bit, \ +- int height, \ +- intptr_t mx, \ +- intptr_t my, \ +- int width) +- +-BI_MC(pel, pixels, 4); +-BI_MC(pel, pixels, 6); +-BI_MC(pel, pixels, 8); +-BI_MC(pel, pixels, 12); +-BI_MC(pel, pixels, 16); +-BI_MC(pel, pixels, 24); +-BI_MC(pel, pixels, 32); +-BI_MC(pel, pixels, 48); +-BI_MC(pel, pixels, 64); +- +-BI_MC(qpel, h, 16); +-BI_MC(qpel, h, 24); +-BI_MC(qpel, h, 32); +-BI_MC(qpel, h, 48); +-BI_MC(qpel, h, 64); +- +-BI_MC(qpel, v, 8); +-BI_MC(qpel, v, 16); +-BI_MC(qpel, v, 24); +-BI_MC(qpel, v, 32); +-BI_MC(qpel, v, 48); +-BI_MC(qpel, v, 64); +- +-BI_MC(qpel, hv, 8); +-BI_MC(qpel, hv, 16); +-BI_MC(qpel, hv, 24); +-BI_MC(qpel, hv, 32); +-BI_MC(qpel, hv, 48); +-BI_MC(qpel, hv, 64); +- +-BI_MC(epel, h, 24); +-BI_MC(epel, h, 32); +- +-BI_MC(epel, v, 12); +-BI_MC(epel, v, 16); +-BI_MC(epel, v, 24); +-BI_MC(epel, v, 32); +- +-BI_MC(epel, hv, 6); +-BI_MC(epel, hv, 8); +-BI_MC(epel, hv, 16); +-BI_MC(epel, hv, 24); +-BI_MC(epel, hv, 32); +- +-#undef BI_MC +- +-void ff_hevc_loop_filter_luma_h_8_lsx(uint8_t *src, +- ptrdiff_t src_stride, ++void ff_hevc_loop_filter_luma_h_8_lsx(uint8_t *src, ptrdiff_t stride, + int32_t beta, int32_t *tc, +- uint8_t *no_p, uint8_t *no_q); ++ uint8_t *p_is_pcm, uint8_t *q_is_pcm); + +-void ff_hevc_loop_filter_luma_v_8_lsx(uint8_t *src, +- ptrdiff_t src_stride, ++void ff_hevc_loop_filter_luma_v_8_lsx(uint8_t *src, ptrdiff_t stride, + int32_t beta, int32_t *tc, +- uint8_t *no_p, uint8_t *no_q); ++ uint8_t *p_is_pcm, uint8_t *q_is_pcm); + +-void ff_hevc_loop_filter_chroma_h_8_lsx(uint8_t *src, +- ptrdiff_t src_stride, +- int32_t *tc, uint8_t *no_p, +- uint8_t *no_q); ++void ff_hevc_loop_filter_chroma_h_8_lsx(uint8_t *src, ptrdiff_t stride, ++ int32_t *tc, uint8_t *p_is_pcm, ++ uint8_t *q_is_pcm); + +-void ff_hevc_loop_filter_chroma_v_8_lsx(uint8_t *src, +- ptrdiff_t src_stride, +- int32_t *tc, uint8_t *no_p, +- uint8_t *no_q); ++void ff_hevc_loop_filter_chroma_v_8_lsx(uint8_t *src, ptrdiff_t stride, ++ int32_t *tc, uint8_t *p_is_pcm, ++ uint8_t *q_is_pcm); + + void ff_hevc_sao_edge_filter_8_lsx(uint8_t *dst, uint8_t *src, + ptrdiff_t stride_dst, +diff --git a/libavcodec/loongarch/hpeldsp_init_loongarch.c b/libavcodec/loongarch/hpeldsp_init_loongarch.c +index 924ccd0f40..1690be5438 100644 +--- a/libavcodec/loongarch/hpeldsp_init_loongarch.c ++++ b/libavcodec/loongarch/hpeldsp_init_loongarch.c +@@ -20,7 +20,7 @@ + */ + + #include "libavutil/loongarch/cpu.h" +-#include "../hpeldsp.h" ++#include "libavcodec/hpeldsp.h" + #include "libavcodec/loongarch/hpeldsp_lasx.h" + + void ff_hpeldsp_init_loongarch(HpelDSPContext *c, int flags) +@@ -37,12 +37,6 @@ void ff_hpeldsp_init_loongarch(HpelDSPContext *c, int flags) + c->put_pixels_tab[1][1] = ff_put_pixels8_x2_8_lasx; + c->put_pixels_tab[1][2] = ff_put_pixels8_y2_8_lasx; + c->put_pixels_tab[1][3] = ff_put_pixels8_xy2_8_lasx; +-// +-// c->put_pixels_tab[2][0] = ff_put_pixels4_8_lasx; +-// c->put_pixels_tab[2][1] = ff_put_pixels4_x2_8_lasx; +-// c->put_pixels_tab[2][2] = ff_put_pixels4_y2_8_lasx; +-// c->put_pixels_tab[2][3] = ff_put_pixels4_xy2_8_lasx; +-// + c->put_no_rnd_pixels_tab[0][0] = ff_put_pixels16_8_lsx; + c->put_no_rnd_pixels_tab[0][1] = ff_put_no_rnd_pixels16_x2_8_lasx; + c->put_no_rnd_pixels_tab[0][2] = ff_put_no_rnd_pixels16_y2_8_lasx; +@@ -52,20 +46,5 @@ void ff_hpeldsp_init_loongarch(HpelDSPContext *c, int flags) + c->put_no_rnd_pixels_tab[1][1] = ff_put_no_rnd_pixels8_x2_8_lasx; + c->put_no_rnd_pixels_tab[1][2] = ff_put_no_rnd_pixels8_y2_8_lasx; + c->put_no_rnd_pixels_tab[1][3] = ff_put_no_rnd_pixels8_xy2_8_lasx; +- +-// c->avg_pixels_tab[0][0] = ff_avg_pixels16_8_lasx; +-// c->avg_pixels_tab[0][1] = ff_avg_pixels16_x2_8_lasx; +-// c->avg_pixels_tab[0][2] = ff_avg_pixels16_y2_8_lasx; +-// c->avg_pixels_tab[0][3] = ff_avg_pixels16_xy2_8_lasx; +-// +-// c->avg_pixels_tab[1][0] = ff_avg_pixels8_8_lasx; +-// c->avg_pixels_tab[1][1] = ff_avg_pixels8_x2_8_lasx; +-// c->avg_pixels_tab[1][2] = ff_avg_pixels8_y2_8_lasx; +-// c->avg_pixels_tab[1][3] = ff_avg_pixels8_xy2_8_lasx; +-// +-// c->avg_pixels_tab[2][0] = ff_avg_pixels4_8_lasx; +-// c->avg_pixels_tab[2][1] = ff_avg_pixels4_x2_8_lasx; +-// c->avg_pixels_tab[2][2] = ff_avg_pixels4_y2_8_lasx; +-// c->avg_pixels_tab[2][3] = ff_avg_pixels4_xy2_8_lasx; + } + } +diff --git a/libavcodec/loongarch/hpeldsp_lasx.c b/libavcodec/loongarch/hpeldsp_lasx.c +index 256c6e79d8..dd2ae173da 100644 +--- a/libavcodec/loongarch/hpeldsp_lasx.c ++++ b/libavcodec/loongarch/hpeldsp_lasx.c +@@ -22,96 +22,108 @@ + #include "libavutil/loongarch/loongson_intrinsics.h" + #include "hpeldsp_lasx.h" + +-static inline void ++static av_always_inline void + put_pixels8_l2_8_lsx(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, + int dst_stride, int src_stride1, int src_stride2, int h) + { ++ int stride1_2, stride1_3, stride1_4; ++ int stride2_2, stride2_3, stride2_4; + __asm__ volatile ( +- "1: \n\t" +- "vld $vr0, %[src1], 0 \n\t" +- "add.d %[src1], %[src1], %[srcStride1] \n\t" +- "vld $vr1, %[src1], 0 \n\t" +- "add.d %[src1], %[src1], %[srcStride1] \n\t" +- "vld $vr2, %[src1], 0 \n\t" +- "add.d %[src1], %[src1], %[srcStride1] \n\t" +- "vld $vr3, %[src1], 0 \n\t" +- "add.d %[src1], %[src1], %[srcStride1] \n\t" +- +- "vld $vr4, %[src2], 0 \n\t" +- "add.d %[src2], %[src2], %[srcStride2] \n\t" +- "vld $vr5, %[src2], 0 \n\t" +- "add.d %[src2], %[src2], %[srcStride2] \n\t" +- "vld $vr6, %[src2], 0 \n\t" +- "add.d %[src2], %[src2], %[srcStride2] \n\t" +- "vld $vr7, %[src2], 0 \n\t" +- "add.d %[src2], %[src2], %[srcStride2] \n\t" +- +- "addi.d %[h], %[h], -4 \n\t" +- +- "vavgr.bu $vr0, $vr4, $vr0 \n\t" +- "vavgr.bu $vr1, $vr5, $vr1 \n\t" +- "vavgr.bu $vr2, $vr6, $vr2 \n\t" +- "vavgr.bu $vr3, $vr7, $vr3 \n\t" +- "vstelm.d $vr0, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vstelm.d $vr1, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vstelm.d $vr2, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vstelm.d $vr3, %[dst], 0, 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "bnez %[h], 1b \n\t" ++ "slli.d %[stride1_2], %[srcStride1], 1 \n\t" ++ "slli.d %[stride2_2], %[srcStride2], 1 \n\t" ++ "add.d %[stride1_3], %[stride1_2], %[srcStride1] \n\t" ++ "add.d %[stride2_3], %[stride2_2], %[srcStride2] \n\t" ++ "slli.d %[stride1_4], %[stride1_2], 1 \n\t" ++ "slli.d %[stride2_4], %[stride2_2], 1 \n\t" ++ "1: \n\t" ++ "vld $vr0, %[src1], 0 \n\t" ++ "vldx $vr1, %[src1], %[srcStride1] \n\t" ++ "vldx $vr2, %[src1], %[stride1_2] \n\t" ++ "vldx $vr3, %[src1], %[stride1_3] \n\t" ++ "add.d %[src1], %[src1], %[stride1_4] \n\t" ++ ++ "vld $vr4, %[src2], 0 \n\t" ++ "vldx $vr5, %[src2], %[srcStride2] \n\t" ++ "vldx $vr6, %[src2], %[stride2_2] \n\t" ++ "vldx $vr7, %[src2], %[stride2_3] \n\t" ++ "add.d %[src2], %[src2], %[stride2_4] \n\t" ++ ++ "addi.d %[h], %[h], -4 \n\t" ++ ++ "vavgr.bu $vr0, $vr4, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr5, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr6, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr7, $vr3 \n\t" ++ "vstelm.d $vr0, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr1, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr2, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "vstelm.d $vr3, %[dst], 0, 0 \n\t" ++ "add.d %[dst], %[dst], %[dstStride] \n\t" ++ "bnez %[h], 1b \n\t" + + : [dst]"+&r"(dst), [src2]"+&r"(src2), [src1]"+&r"(src1), +- [h]"+&r"(h) ++ [h]"+&r"(h), [stride1_2]"=&r"(stride1_2), ++ [stride1_3]"=&r"(stride1_3), [stride1_4]"=&r"(stride1_4), ++ [stride2_2]"=&r"(stride2_2), [stride2_3]"=&r"(stride2_3), ++ [stride2_4]"=&r"(stride2_4) + : [dstStride]"r"(dst_stride), [srcStride1]"r"(src_stride1), + [srcStride2]"r"(src_stride2) + : "memory" + ); + } + +-static inline void ++static av_always_inline void + put_pixels16_l2_8_lsx(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, + int dst_stride, int src_stride1, int src_stride2, int h) + { ++ int stride1_2, stride1_3, stride1_4; ++ int stride2_2, stride2_3, stride2_4; ++ int dststride2, dststride3, dststride4; + __asm__ volatile ( +- "1: \n\t" +- "vld $vr0, %[src1], 0 \n\t" +- "add.d %[src1], %[src1], %[srcStride1] \n\t" +- "vld $vr1, %[src1], 0 \n\t" +- "add.d %[src1], %[src1], %[srcStride1] \n\t" +- "vld $vr2, %[src1], 0 \n\t" +- "add.d %[src1], %[src1], %[srcStride1] \n\t" +- "vld $vr3, %[src1], 0 \n\t" +- "add.d %[src1], %[src1], %[srcStride1] \n\t" +- +- "vld $vr4, %[src2], 0 \n\t" +- "add.d %[src2], %[src2], %[srcStride2] \n\t" +- "vld $vr5, %[src2], 0 \n\t" +- "add.d %[src2], %[src2], %[srcStride2] \n\t" +- "vld $vr6, %[src2], 0 \n\t" +- "add.d %[src2], %[src2], %[srcStride2] \n\t" +- "vld $vr7, %[src2], 0 \n\t" +- "add.d %[src2], %[src2], %[srcStride2] \n\t" +- +- "addi.d %[h], %[h], -4 \n\t" +- +- "vavgr.bu $vr0, $vr4, $vr0 \n\t" +- "vavgr.bu $vr1, $vr5, $vr1 \n\t" +- "vavgr.bu $vr2, $vr6, $vr2 \n\t" +- "vavgr.bu $vr3, $vr7, $vr3 \n\t" +- "vst $vr0, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr1, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr2, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "vst $vr3, %[dst], 0 \n\t" +- "add.d %[dst], %[dst], %[dstStride] \n\t" +- "bnez %[h], 1b \n\t" ++ "slli.d %[stride1_2], %[srcStride1], 1 \n\t" ++ "slli.d %[stride2_2], %[srcStride2], 1 \n\t" ++ "slli.d %[dststride2], %[dstStride], 1 \n\t" ++ "add.d %[stride1_3], %[stride1_2], %[srcStride1] \n\t" ++ "add.d %[stride2_3], %[stride2_2], %[srcStride2] \n\t" ++ "add.d %[dststride3], %[dststride2], %[dstStride] \n\t" ++ "slli.d %[stride1_4], %[stride1_2], 1 \n\t" ++ "slli.d %[stride2_4], %[stride2_2], 1 \n\t" ++ "slli.d %[dststride4], %[dststride2], 1 \n\t" ++ "1: \n\t" ++ "vld $vr0, %[src1], 0 \n\t" ++ "vldx $vr1, %[src1], %[srcStride1] \n\t" ++ "vldx $vr2, %[src1], %[stride1_2] \n\t" ++ "vldx $vr3, %[src1], %[stride1_3] \n\t" ++ "add.d %[src1], %[src1], %[stride1_4] \n\t" ++ ++ "vld $vr4, %[src2], 0 \n\t" ++ "vldx $vr5, %[src2], %[srcStride2] \n\t" ++ "vldx $vr6, %[src2], %[stride2_2] \n\t" ++ "vldx $vr7, %[src2], %[stride2_3] \n\t" ++ "add.d %[src2], %[src2], %[stride2_4] \n\t" ++ ++ "addi.d %[h], %[h], -4 \n\t" ++ ++ "vavgr.bu $vr0, $vr4, $vr0 \n\t" ++ "vavgr.bu $vr1, $vr5, $vr1 \n\t" ++ "vavgr.bu $vr2, $vr6, $vr2 \n\t" ++ "vavgr.bu $vr3, $vr7, $vr3 \n\t" ++ "vst $vr0, %[dst], 0 \n\t" ++ "vstx $vr1, %[dst], %[dstStride] \n\t" ++ "vstx $vr2, %[dst], %[dststride2] \n\t" ++ "vstx $vr3, %[dst], %[dststride3] \n\t" ++ "add.d %[dst], %[dst], %[dststride4] \n\t" ++ "bnez %[h], 1b \n\t" + + : [dst]"+&r"(dst), [src2]"+&r"(src2), [src1]"+&r"(src1), +- [h]"+&r"(h) ++ [h]"+&r"(h), [stride1_2]"=&r"(stride1_2), ++ [stride1_3]"=&r"(stride1_3), [stride1_4]"=&r"(stride1_4), ++ [stride2_2]"=&r"(stride2_2), [stride2_3]"=&r"(stride2_3), ++ [stride2_4]"=&r"(stride2_4), [dststride2]"=&r"(dststride2), ++ [dststride3]"=&r"(dststride3), [dststride4]"=&r"(dststride4) + : [dstStride]"r"(dst_stride), [srcStride1]"r"(src_stride1), + [srcStride2]"r"(src_stride2) + : "memory" +@@ -124,63 +136,57 @@ void ff_put_pixels8_8_lasx(uint8_t *block, const uint8_t *pixels, + uint64_t tmp[8]; + int h_8 = h >> 3; + int res = h & 7; ++ ptrdiff_t stride2, stride3, stride4; + + __asm__ volatile ( +- "beqz %[h_8], 2f \n\t" +- "1: \n\t" +- "ld.d %[tmp0], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp1], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp2], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp3], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp4], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp5], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp6], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "ld.d %[tmp7], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- +- "addi.d %[h_8], %[h_8], -1 \n\t" +- +- "st.d %[tmp0], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp1], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp2], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp3], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp4], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp5], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp6], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "st.d %[tmp7], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "bnez %[h_8], 1b \n\t" +- +- "2: \n\t" +- "beqz %[res], 4f \n\t" +- "3: \n\t" +- "ld.d %[tmp0], %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "addi.d %[res], %[res], -1 \n\t" +- "st.d %[tmp0], %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "bnez %[res], 3b \n\t" +- "4: \n\t" ++ "beqz %[h_8], 2f \n\t" ++ "slli.d %[stride2], %[stride], 1 \n\t" ++ "add.d %[stride3], %[stride2], %[stride] \n\t" ++ "slli.d %[stride4], %[stride2], 1 \n\t" ++ "1: \n\t" ++ "ld.d %[tmp0], %[src], 0x0 \n\t" ++ "ldx.d %[tmp1], %[src], %[stride] \n\t" ++ "ldx.d %[tmp2], %[src], %[stride2] \n\t" ++ "ldx.d %[tmp3], %[src], %[stride3] \n\t" ++ "add.d %[src], %[src], %[stride4] \n\t" ++ "ld.d %[tmp4], %[src], 0x0 \n\t" ++ "ldx.d %[tmp5], %[src], %[stride] \n\t" ++ "ldx.d %[tmp6], %[src], %[stride2] \n\t" ++ "ldx.d %[tmp7], %[src], %[stride3] \n\t" ++ "add.d %[src], %[src], %[stride4] \n\t" ++ ++ "addi.d %[h_8], %[h_8], -1 \n\t" ++ ++ "st.d %[tmp0], %[dst], 0x0 \n\t" ++ "stx.d %[tmp1], %[dst], %[stride] \n\t" ++ "stx.d %[tmp2], %[dst], %[stride2] \n\t" ++ "stx.d %[tmp3], %[dst], %[stride3] \n\t" ++ "add.d %[dst], %[dst], %[stride4] \n\t" ++ "st.d %[tmp4], %[dst], 0x0 \n\t" ++ "stx.d %[tmp5], %[dst], %[stride] \n\t" ++ "stx.d %[tmp6], %[dst], %[stride2] \n\t" ++ "stx.d %[tmp7], %[dst], %[stride3] \n\t" ++ "add.d %[dst], %[dst], %[stride4] \n\t" ++ "bnez %[h_8], 1b \n\t" ++ ++ "2: \n\t" ++ "beqz %[res], 4f \n\t" ++ "3: \n\t" ++ "ld.d %[tmp0], %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "addi.d %[res], %[res], -1 \n\t" ++ "st.d %[tmp0], %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "bnez %[res], 3b \n\t" ++ "4: \n\t" + : [tmp0]"=&r"(tmp[0]), [tmp1]"=&r"(tmp[1]), + [tmp2]"=&r"(tmp[2]), [tmp3]"=&r"(tmp[3]), + [tmp4]"=&r"(tmp[4]), [tmp5]"=&r"(tmp[5]), + [tmp6]"=&r"(tmp[6]), [tmp7]"=&r"(tmp[7]), + [dst]"+&r"(block), [src]"+&r"(pixels), +- [h_8]"+&r"(h_8), [res]"+&r"(res) ++ [h_8]"+&r"(h_8), [res]"+&r"(res), ++ [stride2]"=&r"(stride2), [stride3]"=&r"(stride3), ++ [stride4]"=&r"(stride4) + : [stride]"r"(line_size) + : "memory" + ); +@@ -191,59 +197,53 @@ void ff_put_pixels16_8_lsx(uint8_t *block, const uint8_t *pixels, + { + int h_8 = h >> 3; + int res = h & 7; ++ ptrdiff_t stride2, stride3, stride4; + + __asm__ volatile ( +- "beqz %[h_8], 2f \n\t" +- "1: \n\t" +- "vld $vr0, %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr1, %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr2, %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr3, %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr4, %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr5, %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr6, %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "vld $vr7, %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- +- "addi.d %[h_8], %[h_8], -1 \n\t" +- +- "vst $vr0, %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr1, %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr2, %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr3, %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr4, %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr5, %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr6, %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "vst $vr7, %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "bnez %[h_8], 1b \n\t" +- +- "2: \n\t" +- "beqz %[res], 4f \n\t" +- "3: \n\t" +- "vld $vr0, %[src], 0x0 \n\t" +- "add.d %[src], %[src], %[stride] \n\t" +- "addi.d %[res], %[res], -1 \n\t" +- "vst $vr0, %[dst], 0x0 \n\t" +- "add.d %[dst], %[dst], %[stride] \n\t" +- "bnez %[res], 3b \n\t" +- "4: \n\t" ++ "beqz %[h_8], 2f \n\t" ++ "slli.d %[stride2], %[stride], 1 \n\t" ++ "add.d %[stride3], %[stride2], %[stride] \n\t" ++ "slli.d %[stride4], %[stride2], 1 \n\t" ++ "1: \n\t" ++ "vld $vr0, %[src], 0x0 \n\t" ++ "vldx $vr1, %[src], %[stride] \n\t" ++ "vldx $vr2, %[src], %[stride2] \n\t" ++ "vldx $vr3, %[src], %[stride3] \n\t" ++ "add.d %[src], %[src], %[stride4] \n\t" ++ "vld $vr4, %[src], 0x0 \n\t" ++ "vldx $vr5, %[src], %[stride] \n\t" ++ "vldx $vr6, %[src], %[stride2] \n\t" ++ "vldx $vr7, %[src], %[stride3] \n\t" ++ "add.d %[src], %[src], %[stride4] \n\t" ++ ++ "addi.d %[h_8], %[h_8], -1 \n\t" ++ ++ "vst $vr0, %[dst], 0x0 \n\t" ++ "vstx $vr1, %[dst], %[stride] \n\t" ++ "vstx $vr2, %[dst], %[stride2] \n\t" ++ "vstx $vr3, %[dst], %[stride3] \n\t" ++ "add.d %[dst], %[dst], %[stride4] \n\t" ++ "vst $vr4, %[dst], 0x0 \n\t" ++ "vstx $vr5, %[dst], %[stride] \n\t" ++ "vstx $vr6, %[dst], %[stride2] \n\t" ++ "vstx $vr7, %[dst], %[stride3] \n\t" ++ "add.d %[dst], %[dst], %[stride4] \n\t" ++ "bnez %[h_8], 1b \n\t" ++ ++ "2: \n\t" ++ "beqz %[res], 4f \n\t" ++ "3: \n\t" ++ "vld $vr0, %[src], 0x0 \n\t" ++ "add.d %[src], %[src], %[stride] \n\t" ++ "addi.d %[res], %[res], -1 \n\t" ++ "vst $vr0, %[dst], 0x0 \n\t" ++ "add.d %[dst], %[dst], %[stride] \n\t" ++ "bnez %[res], 3b \n\t" ++ "4: \n\t" + : [dst]"+&r"(block), [src]"+&r"(pixels), +- [h_8]"+&r"(h_8), [res]"+&r"(res) ++ [h_8]"+&r"(h_8), [res]"+&r"(res), ++ [stride2]"=&r"(stride2), [stride3]"=&r"(stride3), ++ [stride4]"=&r"(stride4) + : [stride]"r"(line_size) + : "memory" + ); +@@ -285,15 +285,18 @@ static void common_hz_bil_no_rnd_16x16_lasx(const uint8_t *src, + int32_t src_stride_2x = src_stride << 1; + int32_t src_stride_4x = src_stride << 2; + int32_t src_stride_3x = src_stride_2x + src_stride; +- +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- src += 1; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); +- src += (src_stride_4x -1); +- DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src5, src4, 0x20, +- src7, src6, 0x20, src0, src1, src2, src3); ++ uint8_t *_src = (uint8_t*)src; ++ ++ src0 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src1, src2); ++ src3 = __lasx_xvldx(_src, src_stride_3x); ++ _src += 1; ++ src4 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6); ++ src7 = __lasx_xvldx(_src, src_stride_3x); ++ _src += (src_stride_4x -1); ++ DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src5, ++ src4, 0x20, src7, src6, 0x20, src0, src1, src2, src3); + src0 = __lasx_xvavg_bu(src0, src2); + src1 = __lasx_xvavg_bu(src1, src3); + __lasx_xvstelm_d(src0, dst, 0, 0); +@@ -309,12 +312,14 @@ static void common_hz_bil_no_rnd_16x16_lasx(const uint8_t *src, + __lasx_xvstelm_d(src1, dst, 8, 3); + dst += dst_stride; + +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- src += 1; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); +- src += (src_stride_4x - 1); ++ src0 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src1, src2); ++ src3 = __lasx_xvldx(_src, src_stride_3x); ++ _src += 1; ++ src4 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6); ++ src7 = __lasx_xvldx(_src, src_stride_3x); ++ _src += (src_stride_4x - 1); + DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src5, src4, + 0x20, src7, src6, 0x20, src0, src1, src2, src3); + src0 = __lasx_xvavg_bu(src0, src2); +@@ -332,12 +337,14 @@ static void common_hz_bil_no_rnd_16x16_lasx(const uint8_t *src, + __lasx_xvstelm_d(src1, dst, 8, 3); + dst += dst_stride; + +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- src += 1; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); +- src += (src_stride_4x - 1); ++ src0 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src1, src2); ++ src3 = __lasx_xvldx(_src, src_stride_3x); ++ _src += 1; ++ src4 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6); ++ src7 = __lasx_xvldx(_src, src_stride_3x); ++ _src += (src_stride_4x - 1); + DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src5, src4, + 0x20, src7, src6, 0x20, src0, src1, src2, src3); + src0 = __lasx_xvavg_bu(src0, src2); +@@ -355,12 +362,13 @@ static void common_hz_bil_no_rnd_16x16_lasx(const uint8_t *src, + __lasx_xvstelm_d(src1, dst, 8, 3); + dst += dst_stride; + +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- src += 1; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); +- src += (src_stride_4x - 1); ++ src0 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src1, src2); ++ src3 = __lasx_xvldx(_src, src_stride_3x); ++ _src += 1; ++ src4 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6); ++ src7 = __lasx_xvldx(_src, src_stride_3x); + DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src5, src4, + 0x20, src7, src6, 0x20, src0, src1, src2, src3); + src0 = __lasx_xvavg_bu(src0, src2); +@@ -386,13 +394,16 @@ static void common_hz_bil_no_rnd_8x16_lasx(const uint8_t *src, + int32_t src_stride_2x = src_stride << 1; + int32_t src_stride_4x = src_stride << 2; + int32_t src_stride_3x = src_stride_2x + src_stride; +- +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- src += 1; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); +- src += (src_stride_4x -1); ++ uint8_t* _src = (uint8_t*)src; ++ ++ src0 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src1, src2); ++ src3 = __lasx_xvldx(_src, src_stride_3x); ++ _src += 1; ++ src4 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6); ++ src7 = __lasx_xvldx(_src, src_stride_3x); ++ _src += (src_stride_4x - 1); + DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src5, src4, + 0x20, src7, src6, 0x20, src0, src1, src2, src3); + src0 = __lasx_xvavg_bu(src0, src2); +@@ -410,12 +421,13 @@ static void common_hz_bil_no_rnd_8x16_lasx(const uint8_t *src, + __lasx_xvstelm_d(src1, dst, 8, 3); + dst += dst_stride; + +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- src += 1; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); +- src += (src_stride_4x - 1); ++ src0 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src1, src2); ++ src3 = __lasx_xvldx(_src, src_stride_3x); ++ _src += 1; ++ src4 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6); ++ src7 = __lasx_xvldx(_src, src_stride_3x); + DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src5, src4, + 0x20, src7, src6, 0x20, src0, src1, src2, src3); + src0 = __lasx_xvavg_bu(src0, src2); +@@ -452,37 +464,39 @@ static void common_vt_bil_no_rnd_16x16_lasx(const uint8_t *src, + int32_t src_stride_2x = src_stride << 1; + int32_t src_stride_4x = src_stride << 2; + int32_t src_stride_3x = src_stride_2x + src_stride; +- +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- src += src_stride_4x; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); +- src += src_stride_4x; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src8, src9, src10, src11); +- src += src_stride_4x; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src12, src13, src14, src15); +- src += src_stride_4x; +- src16 = __lasx_xvld(src, 0); ++ uint8_t* _src = (uint8_t*)src; ++ ++ src0 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src1, src2); ++ src3 = __lasx_xvldx(_src, src_stride_3x); ++ _src += src_stride_4x; ++ src4 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6); ++ src7 = __lasx_xvldx(_src, src_stride_3x); ++ _src += src_stride_4x; ++ src8 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src9, src10); ++ src11 = __lasx_xvldx(_src, src_stride_3x); ++ _src += src_stride_4x; ++ src12 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, ++ src13, src14); ++ src15 = __lasx_xvldx(_src, src_stride_3x); ++ _src += src_stride_4x; ++ src16 = __lasx_xvld(_src, 0); + + DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src2, src1, 0x20, src3, src2, + 0x20, src4, src3, 0x20, src0, src1, src2, src3); + DUP4_ARG3(__lasx_xvpermi_q, src5, src4, 0x20, src6, src5, 0x20, src7, src6, + 0x20, src8, src7, 0x20, src4, src5, src6, src7); +- DUP4_ARG3(__lasx_xvpermi_q, src9, src8, 0x20, src10, src9, 0x20, src11, src10, +- 0x20, src12, src11, 0x20, src8, src9, src10, src11); +- DUP4_ARG3(__lasx_xvpermi_q, src13, src12, 0x20, src14, src13, 0x20, src15, src14, +- 0x20, src16, src15, 0x20, src12, src13, src14, src15); +- src0 = __lasx_xvavg_bu(src0, src1); +- src2 = __lasx_xvavg_bu(src2, src3); +- src4 = __lasx_xvavg_bu(src4, src5); +- src6 = __lasx_xvavg_bu(src6, src7); +- src8 = __lasx_xvavg_bu(src8, src9); +- src10 = __lasx_xvavg_bu(src10, src11); +- src12 = __lasx_xvavg_bu(src12, src13); +- src14 = __lasx_xvavg_bu(src14, src15); ++ DUP4_ARG3(__lasx_xvpermi_q, src9, src8, 0x20, src10, src9, 0x20, src11, ++ src10, 0x20, src12, src11, 0x20, src8, src9, src10, src11); ++ DUP4_ARG3(__lasx_xvpermi_q, src13, src12, 0x20, src14, src13, 0x20, src15, ++ src14, 0x20, src16, src15, 0x20, src12, src13, src14, src15); ++ DUP4_ARG2(__lasx_xvavg_bu, src0, src1, src2, src3, src4, src5, src6, src7, ++ src0, src2, src4, src6); ++ DUP4_ARG2(__lasx_xvavg_bu, src8, src9, src10, src11, src12, src13, src14, ++ src15, src8, src10, src12, src14); + + __lasx_xvstelm_d(src0, dst, 0, 0); + __lasx_xvstelm_d(src0, dst, 8, 1); +@@ -541,23 +555,24 @@ static void common_vt_bil_no_rnd_8x16_lasx(const uint8_t *src, + int32_t src_stride_2x = src_stride << 1; + int32_t src_stride_4x = src_stride << 2; + int32_t src_stride_3x = src_stride_2x + src_stride; +- +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- src += src_stride_4x; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); +- src += src_stride_4x; +- src8 = __lasx_xvld(src, 0); ++ uint8_t* _src = (uint8_t*)src; ++ ++ src0 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src1, src2); ++ src3 = __lasx_xvldx(_src, src_stride_3x); ++ _src += src_stride_4x; ++ src4 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6); ++ src7 = __lasx_xvldx(_src, src_stride_3x); ++ _src += src_stride_4x; ++ src8 = __lasx_xvld(_src, 0); + + DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src2, src1, 0x20, src3, src2, + 0x20, src4, src3, 0x20, src0, src1, src2, src3); + DUP4_ARG3(__lasx_xvpermi_q, src5, src4, 0x20, src6, src5, 0x20, src7, src6, + 0x20, src8, src7, 0x20, src4, src5, src6, src7); +- src0 = __lasx_xvavg_bu(src0, src1); +- src2 = __lasx_xvavg_bu(src2, src3); +- src4 = __lasx_xvavg_bu(src4, src5); +- src6 = __lasx_xvavg_bu(src6, src7); ++ DUP4_ARG2(__lasx_xvavg_bu, src0, src1, src2, src3, src4, src5, src6, src7, ++ src0, src2, src4, src6); + + __lasx_xvstelm_d(src0, dst, 0, 0); + __lasx_xvstelm_d(src0, dst, 8, 1); +@@ -604,27 +619,34 @@ static void common_hv_bil_no_rnd_16x16_lasx(const uint8_t *src, + int32_t src_stride_2x = src_stride << 1; + int32_t src_stride_4x = src_stride << 2; + int32_t src_stride_3x = src_stride_2x + src_stride; +- +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- src += src_stride_4x; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); +- src += (1 - src_stride_4x); +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src9, src10, src11, src12); +- src += src_stride_4x; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src13, src14, src15, src16); +- src += (src_stride_4x - 1); +- DUP2_ARG2(__lasx_xvld, src, 0, src, 1, src8, src17); +- +- DUP4_ARG3(__lasx_xvpermi_q, src0, src4, 0x02, src1, src5, 0x02, src2, src6, 0x02, +- src3, src7, 0x02, src0, src1, src2, src3); +- DUP4_ARG3(__lasx_xvpermi_q, src4, src8, 0x02, src9, src13, 0x02, src10, src14, 0x02, +- src11, src15, 0x02, src4, src5, src6, src7); +- DUP2_ARG3(__lasx_xvpermi_q, src12, src16, 0x02, src13, src17, 0x02, src8, src9); +- ++ uint8_t* _src = (uint8_t*)src; ++ ++ src0 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src1, src2); ++ src3 = __lasx_xvldx(_src, src_stride_3x); ++ _src += src_stride_4x; ++ src4 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6); ++ src7 = __lasx_xvldx(_src, src_stride_3x); ++ _src += (1 - src_stride_4x); ++ src9 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, ++ src10, src11); ++ src12 = __lasx_xvldx(_src, src_stride_3x); ++ _src += src_stride_4x; ++ src13 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, ++ src14, src15); ++ src16 = __lasx_xvldx(_src, src_stride_3x); ++ _src += (src_stride_4x - 1); ++ DUP2_ARG2(__lasx_xvld, _src, 0, _src, 1, src8, src17); ++ ++ DUP4_ARG3(__lasx_xvpermi_q, src0, src4, 0x02, src1, src5, 0x02, src2, ++ src6, 0x02, src3, src7, 0x02, src0, src1, src2, src3); ++ DUP4_ARG3(__lasx_xvpermi_q, src4, src8, 0x02, src9, src13, 0x02, src10, ++ src14, 0x02, src11, src15, 0x02, src4, src5, src6, src7); ++ DUP2_ARG3(__lasx_xvpermi_q, src12, src16, 0x02, src13, src17, 0x02, ++ src8, src9); + DUP4_ARG2(__lasx_xvilvl_h, src5, src0, src6, src1, src7, src2, src8, src3, + sum0, sum2, sum4, sum6); + DUP4_ARG2(__lasx_xvilvh_h, src5, src0, src6, src1, src7, src2, src8, src3, +@@ -642,24 +664,12 @@ static void common_hv_bil_no_rnd_16x16_lasx(const uint8_t *src, + sum0, sum1, sum2, sum3); + DUP4_ARG2(__lasx_xvadd_h, src4, src6, src5, src7, src6, src8, src7, src9, + sum4, sum5, sum6, sum7); +- sum0 = __lasx_xvaddi_hu(sum0, 1); +- sum1 = __lasx_xvaddi_hu(sum1, 1); +- sum2 = __lasx_xvaddi_hu(sum2, 1); +- sum3 = __lasx_xvaddi_hu(sum3, 1); +- sum4 = __lasx_xvaddi_hu(sum4, 1); +- sum5 = __lasx_xvaddi_hu(sum5, 1); +- sum6 = __lasx_xvaddi_hu(sum6, 1); +- sum7 = __lasx_xvaddi_hu(sum7, 1); +- sum0 = __lasx_xvsrai_h(sum0, 2); +- sum1 = __lasx_xvsrai_h(sum1, 2); +- sum2 = __lasx_xvsrai_h(sum2, 2); +- sum3 = __lasx_xvsrai_h(sum3, 2); +- sum4 = __lasx_xvsrai_h(sum4, 2); +- sum5 = __lasx_xvsrai_h(sum5, 2); +- sum6 = __lasx_xvsrai_h(sum6, 2); +- sum7 = __lasx_xvsrai_h(sum7, 2); +- DUP4_ARG2(__lasx_xvpickev_b, sum1, sum0, sum3, sum2, sum5, sum4, sum7, sum6, ++ DUP4_ARG2(__lasx_xvaddi_hu, sum0, 1, sum1, 1, sum2, 1, sum3, 1, + sum0, sum1, sum2, sum3); ++ DUP4_ARG2(__lasx_xvaddi_hu, sum4, 1, sum5, 1, sum6, 1, sum7, 1, ++ sum4, sum5, sum6, sum7); ++ DUP4_ARG3(__lasx_xvsrani_b_h, sum1, sum0, 2, sum3, sum2, 2, sum5, sum4, 2, ++ sum7, sum6, 2, sum0, sum1, sum2, sum3); + __lasx_xvstelm_d(sum0, dst, 0, 0); + __lasx_xvstelm_d(sum0, dst, 8, 1); + dst += dst_stride; +@@ -685,19 +695,25 @@ static void common_hv_bil_no_rnd_16x16_lasx(const uint8_t *src, + __lasx_xvstelm_d(sum3, dst, 8, 3); + dst += dst_stride; + +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- src += src_stride_4x; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); +- src += (1 - src_stride_4x); +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src9, src10, src11, src12); +- src += src_stride_4x; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src13, src14, src15, src16); +- src += (src_stride_4x - 1); +- DUP2_ARG2(__lasx_xvld, src, 0, src, 1, src8, src17); ++ src0 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src1, src2); ++ src3 = __lasx_xvldx(_src, src_stride_3x); ++ _src += src_stride_4x; ++ src4 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6); ++ src7 = __lasx_xvldx(_src, src_stride_3x); ++ _src += (1 - src_stride_4x); ++ src9 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, ++ src10, src11); ++ src12 = __lasx_xvldx(_src, src_stride_3x); ++ _src += src_stride_4x; ++ src13 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, ++ src14, src15); ++ src16 = __lasx_xvldx(_src, src_stride_3x); ++ _src += (src_stride_4x - 1); ++ DUP2_ARG2(__lasx_xvld, _src, 0, _src, 1, src8, src17); + + DUP4_ARG3(__lasx_xvpermi_q, src0, src4, 0x02, src1, src5, 0x02, src2, src6, 0x02, + src3, src7, 0x02, src0, src1, src2, src3); +@@ -722,24 +738,12 @@ static void common_hv_bil_no_rnd_16x16_lasx(const uint8_t *src, + sum0, sum1, sum2, sum3); + DUP4_ARG2(__lasx_xvadd_h, src4, src6, src5, src7, src6, src8, src7, src9, + sum4, sum5, sum6, sum7); +- sum0 = __lasx_xvaddi_hu(sum0, 1); +- sum1 = __lasx_xvaddi_hu(sum1, 1); +- sum2 = __lasx_xvaddi_hu(sum2, 1); +- sum3 = __lasx_xvaddi_hu(sum3, 1); +- sum4 = __lasx_xvaddi_hu(sum4, 1); +- sum5 = __lasx_xvaddi_hu(sum5, 1); +- sum6 = __lasx_xvaddi_hu(sum6, 1); +- sum7 = __lasx_xvaddi_hu(sum7, 1); +- sum0 = __lasx_xvsrai_h(sum0, 2); +- sum1 = __lasx_xvsrai_h(sum1, 2); +- sum2 = __lasx_xvsrai_h(sum2, 2); +- sum3 = __lasx_xvsrai_h(sum3, 2); +- sum4 = __lasx_xvsrai_h(sum4, 2); +- sum5 = __lasx_xvsrai_h(sum5, 2); +- sum6 = __lasx_xvsrai_h(sum6, 2); +- sum7 = __lasx_xvsrai_h(sum7, 2); +- DUP4_ARG2(__lasx_xvpickev_b, sum1, sum0, sum3, sum2, sum5, sum4, sum7, sum6, ++ DUP4_ARG2(__lasx_xvaddi_hu, sum0, 1, sum1, 1, sum2, 1, sum3, 1, + sum0, sum1, sum2, sum3); ++ DUP4_ARG2(__lasx_xvaddi_hu, sum4, 1, sum5, 1, sum6, 1, sum7, 1, ++ sum4, sum5, sum6, sum7); ++ DUP4_ARG3(__lasx_xvsrani_b_h, sum1, sum0, 2, sum3, sum2, 2, sum5, sum4, 2, ++ sum7, sum6, 2, sum0, sum1, sum2, sum3); + __lasx_xvstelm_d(sum0, dst, 0, 0); + __lasx_xvstelm_d(sum0, dst, 8, 1); + dst += dst_stride; +@@ -763,7 +767,6 @@ static void common_hv_bil_no_rnd_16x16_lasx(const uint8_t *src, + dst += dst_stride; + __lasx_xvstelm_d(sum3, dst, 0, 2); + __lasx_xvstelm_d(sum3, dst, 8, 3); +- dst += dst_stride; + } + + static void common_hv_bil_no_rnd_8x16_lasx(const uint8_t *src, +@@ -776,25 +779,32 @@ static void common_hv_bil_no_rnd_8x16_lasx(const uint8_t *src, + int32_t src_stride_2x = src_stride << 1; + int32_t src_stride_4x = src_stride << 2; + int32_t src_stride_3x = src_stride_2x + src_stride; +- +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- src += src_stride_4x; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); +- src += (1 - src_stride_4x); +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src9, src10, src11, src12); +- src += src_stride_4x; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src13, src14, src15, src16); +- src += (src_stride_4x - 1); +- DUP2_ARG2(__lasx_xvld, src, 0, src, 1, src8, src17); +- +- DUP4_ARG3(__lasx_xvpermi_q, src0, src4, 0x02, src1, src5, 0x02, src2, src6, 0x02, +- src3, src7, 0x02, src0, src1, src2, src3); +- DUP4_ARG3(__lasx_xvpermi_q, src4, src8, 0x02, src9, src13, 0x02, src10, src14, 0x02, +- src11, src15, 0x02, src4, src5, src6, src7); ++ uint8_t* _src = (uint8_t*)src; ++ ++ src0 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src1, src2); ++ src3 = __lasx_xvldx(_src, src_stride_3x); ++ _src += src_stride_4x; ++ src4 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6); ++ src7 = __lasx_xvldx(_src, src_stride_3x); ++ _src += (1 - src_stride_4x); ++ src9 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, ++ src10, src11); ++ src12 = __lasx_xvldx(_src, src_stride_3x); ++ _src += src_stride_4x; ++ src13 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, ++ src14, src15); ++ src16 = __lasx_xvldx(_src, src_stride_3x); ++ _src += (src_stride_4x - 1); ++ DUP2_ARG2(__lasx_xvld, _src, 0, _src, 1, src8, src17); ++ ++ DUP4_ARG3(__lasx_xvpermi_q, src0, src4, 0x02, src1, src5, 0x02, src2, ++ src6, 0x02, src3, src7, 0x02, src0, src1, src2, src3); ++ DUP4_ARG3(__lasx_xvpermi_q, src4, src8, 0x02, src9, src13, 0x02, src10, ++ src14, 0x02, src11, src15, 0x02, src4, src5, src6, src7); + DUP2_ARG3(__lasx_xvpermi_q, src12, src16, 0x02, src13, src17, 0x02, src8, src9); + + DUP4_ARG2(__lasx_xvilvl_h, src5, src0, src6, src1, src7, src2, src8, src3, +@@ -814,24 +824,12 @@ static void common_hv_bil_no_rnd_8x16_lasx(const uint8_t *src, + sum0, sum1, sum2, sum3); + DUP4_ARG2(__lasx_xvadd_h, src4, src6, src5, src7, src6, src8, src7, src9, + sum4, sum5, sum6, sum7); +- sum0 = __lasx_xvaddi_hu(sum0, 1); +- sum1 = __lasx_xvaddi_hu(sum1, 1); +- sum2 = __lasx_xvaddi_hu(sum2, 1); +- sum3 = __lasx_xvaddi_hu(sum3, 1); +- sum4 = __lasx_xvaddi_hu(sum4, 1); +- sum5 = __lasx_xvaddi_hu(sum5, 1); +- sum6 = __lasx_xvaddi_hu(sum6, 1); +- sum7 = __lasx_xvaddi_hu(sum7, 1); +- sum0 = __lasx_xvsrai_h(sum0, 2); +- sum1 = __lasx_xvsrai_h(sum1, 2); +- sum2 = __lasx_xvsrai_h(sum2, 2); +- sum3 = __lasx_xvsrai_h(sum3, 2); +- sum4 = __lasx_xvsrai_h(sum4, 2); +- sum5 = __lasx_xvsrai_h(sum5, 2); +- sum6 = __lasx_xvsrai_h(sum6, 2); +- sum7 = __lasx_xvsrai_h(sum7, 2); +- DUP4_ARG2(__lasx_xvpickev_b, sum1, sum0, sum3, sum2, sum5, sum4, sum7, sum6, ++ DUP4_ARG2(__lasx_xvaddi_hu, sum0, 1, sum1, 1, sum2, 1, sum3, 1, + sum0, sum1, sum2, sum3); ++ DUP4_ARG2(__lasx_xvaddi_hu, sum4, 1, sum5, 1, sum6, 1, sum7, 1, ++ sum4, sum5, sum6, sum7); ++ DUP4_ARG3(__lasx_xvsrani_b_h, sum1, sum0, 2, sum3, sum2, 2, sum5, sum4, 2, ++ sum7, sum6, 2, sum0, sum1, sum2, sum3); + __lasx_xvstelm_d(sum0, dst, 0, 0); + __lasx_xvstelm_d(sum0, dst, 8, 1); + dst += dst_stride; +@@ -855,7 +853,6 @@ static void common_hv_bil_no_rnd_8x16_lasx(const uint8_t *src, + dst += dst_stride; + __lasx_xvstelm_d(sum3, dst, 0, 2); + __lasx_xvstelm_d(sum3, dst, 8, 3); +- dst += dst_stride; + } + + void ff_put_no_rnd_pixels16_xy2_8_lasx(uint8_t *block, +@@ -869,7 +866,8 @@ void ff_put_no_rnd_pixels16_xy2_8_lasx(uint8_t *block, + } + } + +-static void common_hz_bil_no_rnd_8x8_lasx(const uint8_t *src, int32_t src_stride, ++static void common_hz_bil_no_rnd_8x8_lasx(const uint8_t *src, ++ int32_t src_stride, + uint8_t *dst, int32_t dst_stride) + { + __m256i src0, src1, src2, src3, src4, src5, src6, src7; +@@ -880,21 +878,27 @@ static void common_hz_bil_no_rnd_8x8_lasx(const uint8_t *src, int32_t src_stride + int32_t dst_stride_4x = dst_stride << 2; + int32_t dst_stride_3x = dst_stride_2x + dst_stride; + int32_t src_stride_3x = src_stride_2x + src_stride; +- +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- src += src_stride_4x; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); +- src += (1 - src_stride_4x); +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src8, src9, src10, src11); +- src += src_stride_4x; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src12, src13, src14, src15); +- +- DUP4_ARG2(__lasx_xvpickev_d, src1, src0, src3, src2, src5, src4, src7, src6, +- src0, src1, src2, src3); ++ uint8_t* _src = (uint8_t*)src; ++ ++ src0 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src1, src2); ++ src3 = __lasx_xvldx(_src, src_stride_3x); ++ _src += src_stride_4x; ++ src4 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6); ++ src7 = __lasx_xvldx(_src, src_stride_3x); ++ _src += (1 - src_stride_4x); ++ src8 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src9, src10); ++ src11 = __lasx_xvldx(_src, src_stride_3x); ++ _src += src_stride_4x; ++ src12 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, ++ src13, src14); ++ src15 = __lasx_xvldx(_src, src_stride_3x); ++ ++ DUP4_ARG2(__lasx_xvpickev_d, src1, src0, src3, src2, src5, src4, src7, ++ src6, src0, src1, src2, src3); + DUP4_ARG2(__lasx_xvpickev_d, src9, src8, src11, src10, src13, src12, src15, + src14, src4, src5, src6, src7); + DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src5, src4, +@@ -912,7 +916,8 @@ static void common_hz_bil_no_rnd_8x8_lasx(const uint8_t *src, int32_t src_stride + __lasx_xvstelm_d(src1, dst + dst_stride_3x, 0, 3); + } + +-static void common_hz_bil_no_rnd_4x8_lasx(const uint8_t *src, int32_t src_stride, ++static void common_hz_bil_no_rnd_4x8_lasx(const uint8_t *src, ++ int32_t src_stride, + uint8_t *dst, int32_t dst_stride) + { + __m256i src0, src1, src2, src3, src4, src5, src6, src7; +@@ -920,12 +925,15 @@ static void common_hz_bil_no_rnd_4x8_lasx(const uint8_t *src, int32_t src_stride + int32_t src_stride_3x = src_stride_2x + src_stride; + int32_t dst_stride_2x = dst_stride << 1; + int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- src += 1; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); ++ uint8_t *_src = (uint8_t*)src; ++ ++ src0 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src1, src2); ++ src3 = __lasx_xvldx(_src, src_stride_3x); ++ _src += 1; ++ src4 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6); ++ src7 = __lasx_xvldx(_src, src_stride_3x); + DUP4_ARG2(__lasx_xvpickev_d, src1, src0, src3, src2, src5, src4, src7, src6, + src0, src1, src2, src3); + DUP2_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src0, src1); +@@ -956,14 +964,17 @@ static void common_vt_bil_no_rnd_8x8_lasx(const uint8_t *src, int32_t src_stride + int32_t dst_stride_4x = dst_stride << 2; + int32_t dst_stride_3x = dst_stride_2x + dst_stride; + int32_t src_stride_3x = src_stride_2x + src_stride; +- +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- src += src_stride_4x; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); +- src += src_stride_4x; +- src8 = __lasx_xvld(src, 0); ++ uint8_t* _src = (uint8_t*)src; ++ ++ src0 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src1, src2); ++ src3 = __lasx_xvldx(_src, src_stride_3x); ++ _src += src_stride_4x; ++ src4 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6); ++ src7 = __lasx_xvldx(_src, src_stride_3x); ++ _src += src_stride_4x; ++ src8 = __lasx_xvld(_src, 0); + + DUP4_ARG2(__lasx_xvpickev_d, src1, src0, src2, src1, src3, src2, src4, src3, + src0, src1, src2, src3); +@@ -993,11 +1004,11 @@ static void common_vt_bil_no_rnd_4x8_lasx(const uint8_t *src, int32_t src_stride + int32_t dst_stride_2x = dst_stride << 1; + int32_t dst_stride_3x = dst_stride_2x + dst_stride; + int32_t src_stride_3x = src_stride_2x + src_stride; ++ uint8_t* _src = (uint8_t*)src; + +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- src += src_stride_4x; +- src4 = __lasx_xvld(src, 0); ++ src0 = __lasx_xvld(_src, 0); ++ DUP4_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, _src, ++ src_stride_3x, _src, src_stride_4x, src1, src2, src3, src4); + DUP4_ARG2(__lasx_xvpickev_d, src1, src0, src2, src1, src3, src2, src4, src3, + src0, src1, src2, src3); + DUP2_ARG3(__lasx_xvpermi_q, src2, src0, 0x20, src3, src1, 0x20, src0, src1); +@@ -1030,20 +1041,27 @@ static void common_hv_bil_no_rnd_8x8_lasx(const uint8_t *src, int32_t src_stride + int32_t dst_stride_4x = dst_stride << 2; + int32_t dst_stride_3x = dst_stride_2x + dst_stride; + int32_t src_stride_3x = src_stride_2x + src_stride; +- +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- src += src_stride_4x; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); +- src += (1 - src_stride_4x); +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src9, src10, src11, src12); +- src += src_stride_4x; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src13, src14, src15, src16); +- src += (src_stride_4x - 1); +- DUP2_ARG2(__lasx_xvld, src, 0, src, 1, src8, src17); ++ uint8_t* _src = (uint8_t*)src; ++ ++ src0 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src1, src2); ++ src3 = __lasx_xvldx(_src, src_stride_3x); ++ _src += src_stride_4x; ++ src4 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6); ++ src7 = __lasx_xvldx(_src, src_stride_3x); ++ _src += (1 - src_stride_4x); ++ src9 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, ++ src10, src11); ++ src12 = __lasx_xvldx(_src, src_stride_3x); ++ _src += src_stride_4x; ++ src13 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, ++ src14, src15); ++ src16 = __lasx_xvldx(_src, src_stride_3x); ++ _src += (src_stride_4x - 1); ++ DUP2_ARG2(__lasx_xvld, _src, 0, _src, 1, src8, src17); + + DUP4_ARG2(__lasx_xvilvl_b, src9, src0, src10, src1, src11, src2, src12, src3, + src0, src1, src2, src3); +@@ -1054,25 +1072,15 @@ static void common_hv_bil_no_rnd_8x8_lasx(const uint8_t *src, int32_t src_stride + 0x20, src4, src3, 0x20, src0, src1, src2, src3); + DUP4_ARG3(__lasx_xvpermi_q, src5, src4, 0x20, src6, src5, 0x20, src7, src6, + 0x20, src8, src7, 0x20, src4, src5, src6, src7); +- src0 = __lasx_xvhaddw_hu_bu(src0, src0); +- src1 = __lasx_xvhaddw_hu_bu(src1, src1); +- src2 = __lasx_xvhaddw_hu_bu(src2, src2); +- src3 = __lasx_xvhaddw_hu_bu(src3, src3); +- src4 = __lasx_xvhaddw_hu_bu(src4, src4); +- src5 = __lasx_xvhaddw_hu_bu(src5, src5); +- src6 = __lasx_xvhaddw_hu_bu(src6, src6); +- src7 = __lasx_xvhaddw_hu_bu(src7, src7); ++ DUP4_ARG2(__lasx_xvhaddw_hu_bu, src0, src0, src1, src1, src2, src2, ++ src3, src3, src0, src1, src2, src3); ++ DUP4_ARG2(__lasx_xvhaddw_hu_bu, src4, src4, src5, src5, src6, src6, ++ src7, src7, src4, src5, src6, src7); + DUP4_ARG2(__lasx_xvadd_h, src0, src1, src2, src3, src4, src5, src6, src7, + sum0, sum1, sum2, sum3); +- sum0 = __lasx_xvaddi_hu(sum0, 1); +- sum1 = __lasx_xvaddi_hu(sum1, 1); +- sum2 = __lasx_xvaddi_hu(sum2, 1); +- sum3 = __lasx_xvaddi_hu(sum3, 1); +- sum0 = __lasx_xvsrai_h(sum0, 2); +- sum1 = __lasx_xvsrai_h(sum1, 2); +- sum2 = __lasx_xvsrai_h(sum2, 2); +- sum3 = __lasx_xvsrai_h(sum3, 2); +- DUP2_ARG2(__lasx_xvpickev_b, sum1, sum0, sum3, sum2, sum0, sum1); ++ DUP4_ARG2(__lasx_xvaddi_hu, sum0, 1, sum1, 1, sum2, 1, sum3, 1, ++ sum0, sum1, sum2, sum3); ++ DUP2_ARG3(__lasx_xvsrani_b_h, sum1, sum0, 2, sum3, sum2, 2, sum0, sum1); + __lasx_xvstelm_d(sum0, dst, 0, 0); + __lasx_xvstelm_d(sum0, dst + dst_stride, 0, 2); + __lasx_xvstelm_d(sum0, dst + dst_stride_2x, 0, 1); +@@ -1094,30 +1102,29 @@ static void common_hv_bil_no_rnd_4x8_lasx(const uint8_t *src, int32_t src_stride + int32_t dst_stride_2x = dst_stride << 1; + int32_t dst_stride_3x = dst_stride_2x + dst_stride; + int32_t src_stride_3x = src_stride_2x + src_stride; +- +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- src += 1; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src5, src6, src7, src8); +- src += (src_stride_4x - 1); +- DUP2_ARG2(__lasx_xvld, src, 0, src, 1, src4, src9); ++ uint8_t *_src = (uint8_t*)src; ++ ++ src0 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src1, src2); ++ src3 = __lasx_xvldx(_src, src_stride_3x); ++ _src += 1; ++ src5 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src6, src7); ++ src8 = __lasx_xvldx(_src, src_stride_3x); ++ _src += (src_stride_4x - 1); ++ DUP2_ARG2(__lasx_xvld, _src, 0, _src, 1, src4, src9); + + DUP4_ARG2(__lasx_xvilvl_b, src5, src0, src6, src1, src7, src2, src8, src3, + src0, src1, src2, src3); + src4 = __lasx_xvilvl_b(src9, src4); + DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src2, src1, 0x20, src3, src2, + 0x20, src4, src3, 0x20, src0, src1, src2, src3); +- src0 = __lasx_xvhaddw_hu_bu(src0, src0); +- src1 = __lasx_xvhaddw_hu_bu(src1, src1); +- src2 = __lasx_xvhaddw_hu_bu(src2, src2); +- src3 = __lasx_xvhaddw_hu_bu(src3, src3); ++ DUP4_ARG2(__lasx_xvhaddw_hu_bu, src0, src0, src1, src1, src2, src2, ++ src3, src3, src0, src1, src2, src3); + DUP2_ARG2(__lasx_xvadd_h, src0, src1, src2, src3, sum0, sum1); + sum0 = __lasx_xvaddi_hu(sum0, 1); + sum1 = __lasx_xvaddi_hu(sum1, 1); +- sum0 = __lasx_xvsrai_h(sum0, 2); +- sum1 = __lasx_xvsrai_h(sum1, 2); +- sum0 = __lasx_xvpickev_b(sum1, sum0); ++ sum0 = __lasx_xvsrani_b_h(sum1, sum0, 2); + __lasx_xvstelm_d(sum0, dst, 0, 0); + __lasx_xvstelm_d(sum0, dst + dst_stride, 0, 2); + __lasx_xvstelm_d(sum0, dst + dst_stride_2x, 0, 1); +@@ -1145,32 +1152,40 @@ static void common_hv_bil_16w_lasx(const uint8_t *src, int32_t src_stride, + int32_t src_stride_2x = src_stride << 1; + int32_t src_stride_4x = src_stride << 2; + int32_t src_stride_3x = src_stride_2x + src_stride; ++ uint8_t* _src = (uint8_t*)src; + + for (loop_cnt = (height >> 3); loop_cnt--;) { +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src0, src1, src2, src3); +- src += src_stride_4x; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src4, src5, src6, src7); +- src += (1 - src_stride_4x); +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src9, src10, src11, src12); +- src += src_stride_4x; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src13, src14, src15, src16); +- src += (src_stride_4x - 1); +- DUP2_ARG2(__lasx_xvld, src, 0, src, 1, src8, src17); +- +- DUP4_ARG3(__lasx_xvpermi_q, src0, src4, 0x02, src1, src5, 0x02, src2, src6, 0x02, +- src3, src7, 0x02, src0, src1, src2, src3); +- DUP4_ARG3(__lasx_xvpermi_q, src4, src8, 0x02, src9, src13, 0x02, src10, src14, +- 0x02, src11, src15, 0x02, src4, src5, src6, src7); +- DUP2_ARG3(__lasx_xvpermi_q, src12, src16, 0x02, src13, src17, 0x02, src8, src9); +- +- DUP4_ARG2(__lasx_xvilvl_h, src5, src0, src6, src1, src7, src2, src8, src3, +- sum0, sum2, sum4, sum6); +- DUP4_ARG2(__lasx_xvilvh_h, src5, src0, src6, src1, src7, src2, src8, src3, +- sum1, sum3, sum5, sum7); ++ src0 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src1, src2); ++ src3 = __lasx_xvldx(_src, src_stride_3x); ++ _src += src_stride_4x; ++ src4 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src5, src6); ++ src7 = __lasx_xvldx(_src, src_stride_3x); ++ _src += (1 - src_stride_4x); ++ src9 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, ++ src10, src11); ++ src12 = __lasx_xvldx(_src, src_stride_3x); ++ _src += src_stride_4x; ++ src13 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, ++ src14, src15); ++ src16 = __lasx_xvldx(_src, src_stride_3x); ++ _src += (src_stride_4x - 1); ++ DUP2_ARG2(__lasx_xvld, _src, 0, _src, 1, src8, src17); ++ ++ DUP4_ARG3(__lasx_xvpermi_q, src0, src4, 0x02, src1, src5, 0x02, src2, ++ src6, 0x02, src3, src7, 0x02, src0, src1, src2, src3); ++ DUP4_ARG3(__lasx_xvpermi_q, src4, src8, 0x02, src9, src13, 0x02, src10, ++ src14, 0x02, src11, src15, 0x02, src4, src5, src6, src7); ++ DUP2_ARG3(__lasx_xvpermi_q, src12, src16, 0x02, src13, src17, 0x02, ++ src8, src9); ++ ++ DUP4_ARG2(__lasx_xvilvl_h, src5, src0, src6, src1, src7, src2, src8, ++ src3, sum0, sum2, sum4, sum6); ++ DUP4_ARG2(__lasx_xvilvh_h, src5, src0, src6, src1, src7, src2, src8, ++ src3, sum1, sum3, sum5, sum7); + src8 = __lasx_xvilvl_h(src9, src4); + src9 = __lasx_xvilvh_h(src9, src4); + +@@ -1180,16 +1195,12 @@ static void common_hv_bil_16w_lasx(const uint8_t *src, int32_t src_stride, + sum7, sum7, src4, src5, src6, src7); + DUP2_ARG2(__lasx_xvhaddw_hu_bu, src8, src8, src9, src9, src8, src9); + +- DUP4_ARG2(__lasx_xvadd_h, src0, src2, src1, src3, src2, src4, src3, src5, +- sum0, sum1, sum2, sum3); +- DUP4_ARG2(__lasx_xvadd_h, src4, src6, src5, src7, src6, src8, src7, src9, +- sum4, sum5, sum6, sum7); +- DUP4_ARG2(__lasx_xvsrari_h, sum0, 2, sum1, 2, sum2, 2, sum3, 2, sum0, sum1, +- sum2, sum3); +- DUP4_ARG2(__lasx_xvsrari_h, sum4, 2, sum5, 2, sum6, 2, sum7, 2, sum4, sum5, +- sum6, sum7); +- DUP4_ARG2(__lasx_xvpickev_b, sum1, sum0, sum3, sum2, sum5, sum4, sum7, sum6, +- sum0, sum1, sum2, sum3); ++ DUP4_ARG2(__lasx_xvadd_h, src0, src2, src1, src3, src2, src4, src3, ++ src5, sum0, sum1, sum2, sum3); ++ DUP4_ARG2(__lasx_xvadd_h, src4, src6, src5, src7, src6, src8, src7, ++ src9, sum4, sum5, sum6, sum7); ++ DUP4_ARG3(__lasx_xvsrarni_b_h, sum1, sum0, 2, sum3, sum2, 2, sum5, ++ sum4, 2, sum7, sum6, 2, sum0, sum1, sum2, sum3); + __lasx_xvstelm_d(sum0, dst, 0, 0); + __lasx_xvstelm_d(sum0, dst, 8, 1); + dst += dst_stride; +@@ -1236,29 +1247,29 @@ static void common_hv_bil_8w_lasx(const uint8_t *src, int32_t src_stride, + int32_t dst_stride_4x = dst_stride << 2; + int32_t dst_stride_3x = dst_stride_2x + dst_stride; + int32_t src_stride_3x = src_stride_2x + src_stride; ++ uint8_t* _src = (uint8_t*)src; + +- DUP2_ARG2(__lasx_xvld, src, 0, src, 1, src0, src5); +- src += src_stride; ++ DUP2_ARG2(__lasx_xvld, _src, 0, _src, 1, src0, src5); ++ _src += src_stride; + + for (loop_cnt = (height >> 2); loop_cnt--;) { +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src1, src2, src3, src4); +- src += 1; +- DUP4_ARG2(__lasx_xvld, src, 0, src + src_stride, 0, src + src_stride_2x, +- 0, src + src_stride_3x, 0, src6, src7, src8, src9); +- src += (src_stride_4x - 1); ++ src1 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src2, src3); ++ src4 = __lasx_xvldx(_src, src_stride_3x); ++ _src += 1; ++ src6 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, src_stride, _src, src_stride_2x, src7, src8); ++ src9 = __lasx_xvldx(_src, src_stride_3x); ++ _src += (src_stride_4x - 1); + DUP4_ARG2(__lasx_xvilvl_b, src5, src0, src6, src1, src7, src2, src8, src3, + src0, src1, src2, src3); + src5 = __lasx_xvilvl_b(src9, src4); + DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src2, src1, 0x20, src3, src2, + 0x20, src5, src3, 0x20, src0, src1, src2, src3); +- src0 = __lasx_xvhaddw_hu_bu(src0, src0); +- src1 = __lasx_xvhaddw_hu_bu(src1, src1); +- src2 = __lasx_xvhaddw_hu_bu(src2, src2); +- src3 = __lasx_xvhaddw_hu_bu(src3, src3); ++ DUP4_ARG2(__lasx_xvhaddw_hu_bu, src0, src0, src1, src1, src2, src2, ++ src3, src3, src0, src1, src2, src3); + DUP2_ARG2(__lasx_xvadd_h, src0, src1, src2, src3, sum0, sum1); +- DUP2_ARG2(__lasx_xvsrari_h, sum0, 2, sum1, 2, sum0, sum1); +- sum0 = __lasx_xvpickev_b(sum1, sum0); ++ sum0 = __lasx_xvsrarni_b_h(sum1, sum0, 2); + __lasx_xvstelm_d(sum0, dst, 0, 0); + __lasx_xvstelm_d(sum0, dst + dst_stride, 0, 2); + __lasx_xvstelm_d(sum0, dst + dst_stride_2x, 0, 1); +diff --git a/libavcodec/loongarch/idctdsp_lasx.c b/libavcodec/loongarch/idctdsp_lasx.c +index dfcb9b1a4f..1cfab0e028 100644 +--- a/libavcodec/loongarch/idctdsp_lasx.c ++++ b/libavcodec/loongarch/idctdsp_lasx.c +@@ -22,16 +22,18 @@ + #include "idctdsp_loongarch.h" + #include "libavutil/loongarch/loongson_intrinsics.h" + +-static void put_pixels_clamped_lasx(const int16_t *block, uint8_t *pixels, +- int32_t stride) ++void ff_put_pixels_clamped_lasx(const int16_t *block, ++ uint8_t *av_restrict pixels, ++ ptrdiff_t stride) + { + __m256i b0, b1, b2, b3; + __m256i temp0, temp1; +- int32_t stride_2x = stride << 1; +- int32_t stride_4x = stride << 2; +- int32_t stride_3x = stride_2x + stride; ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_4x = stride << 2; ++ ptrdiff_t stride_3x = stride_2x + stride; + +- DUP4_ARG2(__lasx_xvld, block, 0, block, 32, block, 64, block, 96, b0, b1, b2, b3); ++ DUP4_ARG2(__lasx_xvld, block, 0, block, 32, block, 64, block, 96, ++ b0, b1, b2, b3); + DUP4_ARG1(__lasx_xvclip255_h, b0, b1, b2, b3, b0, b1, b2, b3); + DUP2_ARG2(__lasx_xvpickev_b, b1, b0, b3, b2, temp0, temp1); + __lasx_xvstelm_d(temp0, pixels, 0, 0); +@@ -45,21 +47,22 @@ static void put_pixels_clamped_lasx(const int16_t *block, uint8_t *pixels, + __lasx_xvstelm_d(temp1, pixels + stride_3x, 0, 3); + } + +-static void put_signed_pixels_clamped_lasx(const int16_t *block, uint8_t *pixels, +- int32_t stride) ++void ff_put_signed_pixels_clamped_lasx(const int16_t *block, ++ uint8_t *av_restrict pixels, ++ ptrdiff_t stride) + { + __m256i b0, b1, b2, b3; + __m256i temp0, temp1; +- __m256i const_128 = {0x0080008000800080, 0x0080008000800080, 0x0080008000800080, 0x0080008000800080}; +- int32_t stride_2x = stride << 1; +- int32_t stride_4x = stride << 2; +- int32_t stride_3x = stride_2x + stride; ++ __m256i const_128 = {0x0080008000800080, 0x0080008000800080, ++ 0x0080008000800080, 0x0080008000800080}; ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_4x = stride << 2; ++ ptrdiff_t stride_3x = stride_2x + stride; + +- DUP4_ARG2(__lasx_xvld, block, 0, block, 32, block, 64, block, 96, b0, b1, b2, b3); +- b0 = __lasx_xvadd_h(b0, const_128); +- b1 = __lasx_xvadd_h(b1, const_128); +- b2 = __lasx_xvadd_h(b2, const_128); +- b3 = __lasx_xvadd_h(b3, const_128); ++ DUP4_ARG2(__lasx_xvld, block, 0, block, 32, block, 64, block, 96, ++ b0, b1, b2, b3); ++ DUP4_ARG2(__lasx_xvadd_h, b0, const_128, b1, const_128, b2, const_128, ++ b3, const_128, b0, b1, b2, b3); + DUP4_ARG1(__lasx_xvclip255_h, b0, b1, b2, b3, b0, b1, b2, b3); + DUP2_ARG2(__lasx_xvpickev_b, b1, b0, b3, b2, temp0, temp1); + __lasx_xvstelm_d(temp0, pixels, 0, 0); +@@ -73,18 +76,20 @@ static void put_signed_pixels_clamped_lasx(const int16_t *block, uint8_t *pixels + __lasx_xvstelm_d(temp1, pixels + stride_3x, 0, 3); + } + +-static void add_pixels_clamped_lasx(const int16_t *block, uint8_t *pixels, +- int32_t stride) ++void ff_add_pixels_clamped_lasx(const int16_t *block, ++ uint8_t *av_restrict pixels, ++ ptrdiff_t stride) + { + __m256i b0, b1, b2, b3; + __m256i p0, p1, p2, p3, p4, p5, p6, p7; + __m256i temp0, temp1, temp2, temp3; + uint8_t *pix = pixels; +- int32_t stride_2x = stride << 1; +- int32_t stride_4x = stride << 2; +- int32_t stride_3x = stride_2x + stride; ++ ptrdiff_t stride_2x = stride << 1; ++ ptrdiff_t stride_4x = stride << 2; ++ ptrdiff_t stride_3x = stride_2x + stride; + +- DUP4_ARG2(__lasx_xvld, block, 0, block, 32, block, 64, block, 96, b0, b1, b2, b3); ++ DUP4_ARG2(__lasx_xvld, block, 0, block, 32, block, 64, block, 96, ++ b0, b1, b2, b3); + p0 = __lasx_xvldrepl_d(pix, 0); + pix += stride; + p1 = __lasx_xvldrepl_d(pix, 0); +@@ -100,13 +105,12 @@ static void add_pixels_clamped_lasx(const int16_t *block, uint8_t *pixels, + p6 = __lasx_xvldrepl_d(pix, 0); + pix += stride; + p7 = __lasx_xvldrepl_d(pix, 0); +- temp0 = __lasx_xvpermi_q(p1, p0, 0x20); +- temp1 = __lasx_xvpermi_q(p3, p2, 0x20); +- temp2 = __lasx_xvpermi_q(p5, p4, 0x20); +- temp3 = __lasx_xvpermi_q(p7, p6, 0x20); ++ DUP4_ARG3(__lasx_xvpermi_q, p1, p0, 0x20, p3, p2, 0x20, p5, p4, 0x20, ++ p7, p6, 0x20, temp0, temp1, temp2, temp3); + DUP4_ARG2(__lasx_xvaddw_h_h_bu, b0, temp0, b1, temp1, b2, temp2, b3, temp3, + temp0, temp1, temp2, temp3); +- DUP4_ARG1(__lasx_xvclip255_h, temp0, temp1, temp2, temp3, temp0, temp1, temp2, temp3); ++ DUP4_ARG1(__lasx_xvclip255_h, temp0, temp1, temp2, temp3, ++ temp0, temp1, temp2, temp3); + DUP2_ARG2(__lasx_xvpickev_b, temp1, temp0, temp3, temp2, temp0, temp1); + __lasx_xvstelm_d(temp0, pixels, 0, 0); + __lasx_xvstelm_d(temp0, pixels + stride, 0, 2); +@@ -118,24 +122,3 @@ static void add_pixels_clamped_lasx(const int16_t *block, uint8_t *pixels, + __lasx_xvstelm_d(temp1, pixels + stride_2x, 0, 1); + __lasx_xvstelm_d(temp1, pixels + stride_3x, 0, 3); + } +- +-void ff_put_pixels_clamped_lasx(const int16_t *block, +- uint8_t *av_restrict pixels, +- ptrdiff_t line_size) +-{ +- put_pixels_clamped_lasx(block, pixels, line_size); +-} +- +-void ff_put_signed_pixels_clamped_lasx(const int16_t *block, +- uint8_t *av_restrict pixels, +- ptrdiff_t line_size) +-{ +- put_signed_pixels_clamped_lasx(block, pixels, line_size); +-} +- +-void ff_add_pixels_clamped_lasx(const int16_t *block, +- uint8_t *av_restrict pixels, +- ptrdiff_t line_size) +-{ +- add_pixels_clamped_lasx(block, pixels, line_size); +-} +diff --git a/libavcodec/loongarch/idctdsp_loongarch.h b/libavcodec/loongarch/idctdsp_loongarch.h +index f36e0f334a..cae8e7af58 100644 +--- a/libavcodec/loongarch/idctdsp_loongarch.h ++++ b/libavcodec/loongarch/idctdsp_loongarch.h +@@ -23,8 +23,7 @@ + #define AVCODEC_LOONGARCH_IDCTDSP_LOONGARCH_H + + #include +-#include +-#include "../mpegvideo.h" ++#include "libavcodec/mpegvideo.h" + + void ff_simple_idct_lasx(int16_t *block); + void ff_simple_idct_put_lasx(uint8_t *dest, ptrdiff_t stride_dst, int16_t *block); +diff --git a/libavcodec/loongarch/simple_idct_lasx.c b/libavcodec/loongarch/simple_idct_lasx.c +index 3caf83d846..a0d936b666 100644 +--- a/libavcodec/loongarch/simple_idct_lasx.c ++++ b/libavcodec/loongarch/simple_idct_lasx.c +@@ -22,189 +22,163 @@ + #include "libavutil/loongarch/loongson_intrinsics.h" + #include "idctdsp_loongarch.h" + +-#define LASX_TRANSPOSE4x16(in_0, in_1, in_2, in_3, out_0, out_1, out_2, out_3) \ +-{ \ +- __m256i temp_0, temp_1, temp_2, temp_3; \ +- __m256i temp_4, temp_5, temp_6, temp_7; \ +- temp_0 = __lasx_xvpermi_q(in_2, in_0, 0x20); \ +- temp_1 = __lasx_xvpermi_q(in_2, in_0, 0x31); \ +- temp_2 = __lasx_xvpermi_q(in_3, in_1, 0x20); \ +- temp_3 = __lasx_xvpermi_q(in_3, in_1, 0x31); \ +- DUP2_ARG2(__lasx_xvilvl_h, temp_1, temp_0, temp_3, temp_2, temp_4, temp_6); \ +- DUP2_ARG2(__lasx_xvilvh_h, temp_1, temp_0, temp_3, temp_2, temp_5, temp_7); \ +- DUP2_ARG2(__lasx_xvilvl_w, temp_6, temp_4, temp_7, temp_5, out_0, out_2); \ +- DUP2_ARG2(__lasx_xvilvh_w, temp_6, temp_4, temp_7, temp_5, out_1, out_3); \ ++#define LASX_TRANSPOSE4x16(in_0, in_1, in_2, in_3, out_0, out_1, out_2, out_3) \ ++{ \ ++ __m256i temp_0, temp_1, temp_2, temp_3; \ ++ __m256i temp_4, temp_5, temp_6, temp_7; \ ++ DUP4_ARG3(__lasx_xvpermi_q, in_2, in_0, 0x20, in_2, in_0, 0x31, in_3, in_1,\ ++ 0x20, in_3, in_1, 0x31, temp_0, temp_1, temp_2, temp_3); \ ++ DUP2_ARG2(__lasx_xvilvl_h, temp_1, temp_0, temp_3, temp_2, temp_4, temp_6);\ ++ DUP2_ARG2(__lasx_xvilvh_h, temp_1, temp_0, temp_3, temp_2, temp_5, temp_7);\ ++ DUP2_ARG2(__lasx_xvilvl_w, temp_6, temp_4, temp_7, temp_5, out_0, out_2); \ ++ DUP2_ARG2(__lasx_xvilvh_w, temp_6, temp_4, temp_7, temp_5, out_1, out_3); \ + } + +-#define LASX_IDCTROWCONDDC \ +- const_val = 16383 * ((1 << 19) / 16383); \ +- const_val1 = __lasx_xvinsgr2vr_w(const_val0, const_val, 0); \ +- const_val1 = __lasx_xvreplve0_w(const_val1); \ +- DUP4_ARG2(__lasx_xvld, block, 0, block + 16, 0, block + 32, 0, block + 48, \ +- 0, in0, in1, in2, in3); \ +- LASX_TRANSPOSE4x16(in0, in1, in2, in3, in0, in1, in2, in3); \ +- a0 = __lasx_xvpermi_d(in0, 0xD8); \ +- a0 = __lasx_vext2xv_w_h(a0); \ +- temp = __lasx_xvslli_w(a0, 3); \ +- a1 = __lasx_xvpermi_d(in0, 0x8D); \ +- a1 = __lasx_vext2xv_w_h(a1); \ +- a2 = __lasx_xvpermi_d(in1, 0xD8); \ +- a2 = __lasx_vext2xv_w_h(a2); \ +- a3 = __lasx_xvpermi_d(in1, 0x8D); \ +- a3 = __lasx_vext2xv_w_h(a3); \ +- b0 = __lasx_xvpermi_d(in2, 0xD8); \ +- b0 = __lasx_vext2xv_w_h(b0); \ +- b1 = __lasx_xvpermi_d(in2, 0x8D); \ +- b1 = __lasx_vext2xv_w_h(b1); \ +- b2 = __lasx_xvpermi_d(in3, 0xD8); \ +- b2 = __lasx_vext2xv_w_h(b2); \ +- b3 = __lasx_xvpermi_d(in3, 0x8D); \ +- b3 = __lasx_vext2xv_w_h(b3); \ +- select_vec = a0 | a1 | a2 | a3 | b0 | b1 | b2 | b3; \ +- select_vec = __lasx_xvslti_wu(select_vec, 1); \ +- \ +- w2 = __lasx_xvrepl128vei_h(w1, 2); \ +- w3 = __lasx_xvrepl128vei_h(w1, 3); \ +- w4 = __lasx_xvrepl128vei_h(w1, 4); \ +- w5 = __lasx_xvrepl128vei_h(w1, 5); \ +- w6 = __lasx_xvrepl128vei_h(w1, 6); \ +- w7 = __lasx_xvrepl128vei_h(w1, 7); \ +- w1 = __lasx_xvrepl128vei_h(w1, 1); \ +- \ +- /* part of FUNC6(idctRowCondDC) */ \ +- temp0 = __lasx_xvmaddwl_w_h(const_val0, in0, w4); \ +- DUP2_ARG2(__lasx_xvmulwl_w_h, in1, w2, in1, w6, temp1, temp2); \ +- a0 = __lasx_xvadd_w(temp0, temp1); \ +- a1 = __lasx_xvadd_w(temp0, temp2); \ +- a2 = __lasx_xvsub_w(temp0, temp2); \ +- a3 = __lasx_xvsub_w(temp0, temp1); \ +- \ +- DUP2_ARG2(__lasx_xvilvh_h, in1, in0, w3, w1, temp0, temp1); \ +- b0 = __lasx_xvdp2_w_h(temp0, temp1); \ +- temp1 = __lasx_xvneg_h(w7); \ +- temp2 = __lasx_xvilvl_h(temp1, w3); \ +- b1 = __lasx_xvdp2_w_h(temp0, temp2); \ +- temp1 = __lasx_xvneg_h(w1); \ +- temp2 = __lasx_xvilvl_h(temp1, w5); \ +- b2 = __lasx_xvdp2_w_h(temp0, temp2); \ +- temp1 = __lasx_xvneg_h(w5); \ +- temp2 = __lasx_xvilvl_h(temp1, w7); \ +- b3 = __lasx_xvdp2_w_h(temp0, temp2); \ +- \ +- /* if (AV_RAN64A(row + 4)) */ \ +- DUP2_ARG2(__lasx_xvilvl_h, in3, in2, w6, w4, temp0, temp1); \ +- a0 = __lasx_xvdp2add_w_h(a0, temp0, temp1); \ +- temp1 = __lasx_xvilvl_h(w2, w4); \ +- a1 = __lasx_xvdp2sub_w_h(a1, temp0, temp1); \ +- temp1 = __lasx_xvneg_h(w4); \ +- temp2 = __lasx_xvilvl_h(w2, temp1); \ +- a2 = __lasx_xvdp2add_w_h(a2, temp0, temp2); \ +- temp1 = __lasx_xvneg_h(w6); \ +- temp2 = __lasx_xvilvl_h(temp1, w4); \ +- a3 = __lasx_xvdp2add_w_h(a3, temp0, temp2); \ +- \ +- DUP2_ARG2(__lasx_xvilvh_h, in3, in2, w7, w5, temp0, temp1); \ +- b0 = __lasx_xvdp2add_w_h(b0, temp0, temp1); \ +- DUP2_ARG2(__lasx_xvilvl_h, w5, w1, w3, w7, temp1, temp2); \ +- b1 = __lasx_xvdp2sub_w_h(b1, temp0, temp1); \ +- b2 = __lasx_xvdp2add_w_h(b2, temp0, temp2); \ +- temp1 = __lasx_xvneg_h(w1); \ +- temp2 = __lasx_xvilvl_h(temp1, w3); \ +- b3 = __lasx_xvdp2add_w_h(b3, temp0, temp2); \ +- \ +- temp0 = __lasx_xvadd_w(a0, b0); \ +- temp1 = __lasx_xvadd_w(a1, b1); \ +- temp2 = __lasx_xvadd_w(a2, b2); \ +- temp3 = __lasx_xvadd_w(a3, b3); \ +- a0 = __lasx_xvsub_w(a0, b0); \ +- a1 = __lasx_xvsub_w(a1, b1); \ +- a2 = __lasx_xvsub_w(a2, b2); \ +- a3 = __lasx_xvsub_w(a3, b3); \ +- DUP4_ARG2(__lasx_xvsrai_w, temp0, 11, temp1, 11, temp2, 11, temp3, 11, \ +- temp0, temp1, temp2, temp3); \ +- DUP4_ARG2(__lasx_xvsrai_w, a0, 11, a1, 11, a2, 11, a3, 11, a0, a1, a2, a3); \ +- in0 = __lasx_xvbitsel_v(temp0, temp, select_vec); \ +- in1 = __lasx_xvbitsel_v(temp1, temp, select_vec); \ +- in2 = __lasx_xvbitsel_v(temp2, temp, select_vec); \ +- in3 = __lasx_xvbitsel_v(temp3, temp, select_vec); \ +- a0 = __lasx_xvbitsel_v(a0, temp, select_vec); \ +- a1 = __lasx_xvbitsel_v(a1, temp, select_vec); \ +- a2 = __lasx_xvbitsel_v(a2, temp, select_vec); \ +- a3 = __lasx_xvbitsel_v(a3, temp, select_vec); \ +- in0 = __lasx_xvpickev_h(in1, in0); \ +- in1 = __lasx_xvpickev_h(in3, in2); \ +- in2 = __lasx_xvpickev_h(a2, a3); \ +- in3 = __lasx_xvpickev_h(a0, a1); \ +- in0 = __lasx_xvpermi_d(in0, 0xD8); \ +- in1 = __lasx_xvpermi_d(in1, 0xD8); \ +- in2 = __lasx_xvpermi_d(in2, 0xD8); \ +- in3 = __lasx_xvpermi_d(in3, 0xD8); \ ++#define LASX_IDCTROWCONDDC \ ++ const_val = 16383 * ((1 << 19) / 16383); \ ++ const_val1 = __lasx_xvreplgr2vr_w(const_val); \ ++ DUP4_ARG2(__lasx_xvld, block, 0, block, 32, block, 64, block, 96, \ ++ in0, in1, in2, in3); \ ++ LASX_TRANSPOSE4x16(in0, in1, in2, in3, in0, in1, in2, in3); \ ++ a0 = __lasx_xvpermi_d(in0, 0xD8); \ ++ a0 = __lasx_vext2xv_w_h(a0); \ ++ temp = __lasx_xvslli_w(a0, 3); \ ++ a1 = __lasx_xvpermi_d(in0, 0x8D); \ ++ a1 = __lasx_vext2xv_w_h(a1); \ ++ a2 = __lasx_xvpermi_d(in1, 0xD8); \ ++ a2 = __lasx_vext2xv_w_h(a2); \ ++ a3 = __lasx_xvpermi_d(in1, 0x8D); \ ++ a3 = __lasx_vext2xv_w_h(a3); \ ++ b0 = __lasx_xvpermi_d(in2, 0xD8); \ ++ b0 = __lasx_vext2xv_w_h(b0); \ ++ b1 = __lasx_xvpermi_d(in2, 0x8D); \ ++ b1 = __lasx_vext2xv_w_h(b1); \ ++ b2 = __lasx_xvpermi_d(in3, 0xD8); \ ++ b2 = __lasx_vext2xv_w_h(b2); \ ++ b3 = __lasx_xvpermi_d(in3, 0x8D); \ ++ b3 = __lasx_vext2xv_w_h(b3); \ ++ select_vec = a0 | a1 | a2 | a3 | b0 | b1 | b2 | b3; \ ++ select_vec = __lasx_xvslti_wu(select_vec, 1); \ ++ \ ++ DUP4_ARG2(__lasx_xvrepl128vei_h, w1, 2, w1, 3, w1, 4, w1, 5, \ ++ w2, w3, w4, w5); \ ++ DUP2_ARG2(__lasx_xvrepl128vei_h, w1, 6, w1, 7, w6, w7); \ ++ w1 = __lasx_xvrepl128vei_h(w1, 1); \ ++ \ ++ /* part of FUNC6(idctRowCondDC) */ \ ++ temp0 = __lasx_xvmaddwl_w_h(const_val0, in0, w4); \ ++ DUP2_ARG2(__lasx_xvmulwl_w_h, in1, w2, in1, w6, temp1, temp2); \ ++ a0 = __lasx_xvadd_w(temp0, temp1); \ ++ a1 = __lasx_xvadd_w(temp0, temp2); \ ++ a2 = __lasx_xvsub_w(temp0, temp2); \ ++ a3 = __lasx_xvsub_w(temp0, temp1); \ ++ \ ++ DUP2_ARG2(__lasx_xvilvh_h, in1, in0, w3, w1, temp0, temp1); \ ++ b0 = __lasx_xvdp2_w_h(temp0, temp1); \ ++ temp1 = __lasx_xvneg_h(w7); \ ++ temp2 = __lasx_xvilvl_h(temp1, w3); \ ++ b1 = __lasx_xvdp2_w_h(temp0, temp2); \ ++ temp1 = __lasx_xvneg_h(w1); \ ++ temp2 = __lasx_xvilvl_h(temp1, w5); \ ++ b2 = __lasx_xvdp2_w_h(temp0, temp2); \ ++ temp1 = __lasx_xvneg_h(w5); \ ++ temp2 = __lasx_xvilvl_h(temp1, w7); \ ++ b3 = __lasx_xvdp2_w_h(temp0, temp2); \ ++ \ ++ /* if (AV_RAN64A(row + 4)) */ \ ++ DUP2_ARG2(__lasx_xvilvl_h, in3, in2, w6, w4, temp0, temp1); \ ++ a0 = __lasx_xvdp2add_w_h(a0, temp0, temp1); \ ++ temp1 = __lasx_xvilvl_h(w2, w4); \ ++ a1 = __lasx_xvdp2sub_w_h(a1, temp0, temp1); \ ++ temp1 = __lasx_xvneg_h(w4); \ ++ temp2 = __lasx_xvilvl_h(w2, temp1); \ ++ a2 = __lasx_xvdp2add_w_h(a2, temp0, temp2); \ ++ temp1 = __lasx_xvneg_h(w6); \ ++ temp2 = __lasx_xvilvl_h(temp1, w4); \ ++ a3 = __lasx_xvdp2add_w_h(a3, temp0, temp2); \ ++ \ ++ DUP2_ARG2(__lasx_xvilvh_h, in3, in2, w7, w5, temp0, temp1); \ ++ b0 = __lasx_xvdp2add_w_h(b0, temp0, temp1); \ ++ DUP2_ARG2(__lasx_xvilvl_h, w5, w1, w3, w7, temp1, temp2); \ ++ b1 = __lasx_xvdp2sub_w_h(b1, temp0, temp1); \ ++ b2 = __lasx_xvdp2add_w_h(b2, temp0, temp2); \ ++ temp1 = __lasx_xvneg_h(w1); \ ++ temp2 = __lasx_xvilvl_h(temp1, w3); \ ++ b3 = __lasx_xvdp2add_w_h(b3, temp0, temp2); \ ++ \ ++ DUP4_ARG2(__lasx_xvadd_w, a0, b0, a1, b1, a2, b2, a3, b3, \ ++ temp0, temp1, temp2, temp3); \ ++ DUP4_ARG2(__lasx_xvsub_w, a0, b0, a1, b1, a2, b2, a3, b3, \ ++ a0, a1, a2, a3); \ ++ DUP4_ARG2(__lasx_xvsrai_w, temp0, 11, temp1, 11, temp2, 11, temp3, 11, \ ++ temp0, temp1, temp2, temp3); \ ++ DUP4_ARG2(__lasx_xvsrai_w, a0, 11, a1, 11, a2, 11, a3, 11, a0, a1, a2, a3);\ ++ DUP4_ARG3(__lasx_xvbitsel_v, temp0, temp, select_vec, temp1, temp, \ ++ select_vec, temp2, temp, select_vec, temp3, temp, select_vec, \ ++ in0, in1, in2, in3); \ ++ DUP4_ARG3(__lasx_xvbitsel_v, a0, temp, select_vec, a1, temp, \ ++ select_vec, a2, temp, select_vec, a3, temp, select_vec, \ ++ a0, a1, a2, a3); \ ++ DUP4_ARG2(__lasx_xvpickev_h, in1, in0, in3, in2, a2, a3, a0, a1, \ ++ in0, in1, in2, in3); \ ++ DUP4_ARG2(__lasx_xvpermi_d, in0, 0xD8, in1, 0xD8, in2, 0xD8, in3, 0xD8, \ ++ in0, in1, in2, in3); \ + ++#define LASX_IDCTCOLS \ ++ /* part of FUNC6(idctSparaseCol) */ \ ++ LASX_TRANSPOSE4x16(in0, in1, in2, in3, in0, in1, in2, in3); \ ++ temp0 = __lasx_xvmaddwl_w_h(const_val1, in0, w4); \ ++ DUP2_ARG2(__lasx_xvmulwl_w_h, in1, w2, in1, w6, temp1, temp2); \ ++ a0 = __lasx_xvadd_w(temp0, temp1); \ ++ a1 = __lasx_xvadd_w(temp0, temp2); \ ++ a2 = __lasx_xvsub_w(temp0, temp2); \ ++ a3 = __lasx_xvsub_w(temp0, temp1); \ ++ \ ++ DUP2_ARG2(__lasx_xvilvh_h, in1, in0, w3, w1, temp0, temp1); \ ++ b0 = __lasx_xvdp2_w_h(temp0, temp1); \ ++ temp1 = __lasx_xvneg_h(w7); \ ++ temp2 = __lasx_xvilvl_h(temp1, w3); \ ++ b1 = __lasx_xvdp2_w_h(temp0, temp2); \ ++ temp1 = __lasx_xvneg_h(w1); \ ++ temp2 = __lasx_xvilvl_h(temp1, w5); \ ++ b2 = __lasx_xvdp2_w_h(temp0, temp2); \ ++ temp1 = __lasx_xvneg_h(w5); \ ++ temp2 = __lasx_xvilvl_h(temp1, w7); \ ++ b3 = __lasx_xvdp2_w_h(temp0, temp2); \ ++ \ ++ /* if (AV_RAN64A(row + 4)) */ \ ++ DUP2_ARG2(__lasx_xvilvl_h, in3, in2, w6, w4, temp0, temp1); \ ++ a0 = __lasx_xvdp2add_w_h(a0, temp0, temp1); \ ++ temp1 = __lasx_xvilvl_h(w2, w4); \ ++ a1 = __lasx_xvdp2sub_w_h(a1, temp0, temp1); \ ++ temp1 = __lasx_xvneg_h(w4); \ ++ temp2 = __lasx_xvilvl_h(w2, temp1); \ ++ a2 = __lasx_xvdp2add_w_h(a2, temp0, temp2); \ ++ temp1 = __lasx_xvneg_h(w6); \ ++ temp2 = __lasx_xvilvl_h(temp1, w4); \ ++ a3 = __lasx_xvdp2add_w_h(a3, temp0, temp2); \ ++ \ ++ DUP2_ARG2(__lasx_xvilvh_h, in3, in2, w7, w5, temp0, temp1); \ ++ b0 = __lasx_xvdp2add_w_h(b0, temp0, temp1); \ ++ DUP2_ARG2(__lasx_xvilvl_h, w5, w1, w3, w7, temp1, temp2); \ ++ b1 = __lasx_xvdp2sub_w_h(b1, temp0, temp1); \ ++ b2 = __lasx_xvdp2add_w_h(b2, temp0, temp2); \ ++ temp1 = __lasx_xvneg_h(w1); \ ++ temp2 = __lasx_xvilvl_h(temp1, w3); \ ++ b3 = __lasx_xvdp2add_w_h(b3, temp0, temp2); \ ++ \ ++ DUP4_ARG2(__lasx_xvadd_w, a0, b0, a1, b1, a2, b2, a3, b3, \ ++ temp0, temp1, temp2, temp3); \ ++ DUP4_ARG2(__lasx_xvsub_w, a3, b3, a2, b2, a1, b1, a0, b0, \ ++ a3, a2, a1, a0); \ ++ DUP4_ARG3(__lasx_xvsrani_h_w, temp1, temp0, 20, temp3, temp2, 20, a2, a3, \ ++ 20, a0, a1, 20, in0, in1, in2, in3); \ + +-#define LASX_IDCTCOLS \ +- /* part of FUNC6(idctSparaseCol) */ \ +- LASX_TRANSPOSE4x16(in0, in1, in2, in3, in0, in1, in2, in3); \ +- temp0 = __lasx_xvmaddwl_w_h(const_val1, in0, w4); \ +- DUP2_ARG2(__lasx_xvmulwl_w_h, in1, w2, in1, w6, temp1, temp2); \ +- a0 = __lasx_xvadd_w(temp0, temp1); \ +- a1 = __lasx_xvadd_w(temp0, temp2); \ +- a2 = __lasx_xvsub_w(temp0, temp2); \ +- a3 = __lasx_xvsub_w(temp0, temp1); \ +- \ +- DUP2_ARG2(__lasx_xvilvh_h, in1, in0, w3, w1, temp0, temp1); \ +- b0 = __lasx_xvdp2_w_h(temp0, temp1); \ +- temp1 = __lasx_xvneg_h(w7); \ +- temp2 = __lasx_xvilvl_h(temp1, w3); \ +- b1 = __lasx_xvdp2_w_h(temp0, temp2); \ +- temp1 = __lasx_xvneg_h(w1); \ +- temp2 = __lasx_xvilvl_h(temp1, w5); \ +- b2 = __lasx_xvdp2_w_h(temp0, temp2); \ +- temp1 = __lasx_xvneg_h(w5); \ +- temp2 = __lasx_xvilvl_h(temp1, w7); \ +- b3 = __lasx_xvdp2_w_h(temp0, temp2); \ +- \ +- /* if (AV_RAN64A(row + 4)) */ \ +- DUP2_ARG2(__lasx_xvilvl_h, in3, in2, w6, w4, temp0, temp1); \ +- a0 = __lasx_xvdp2add_w_h(a0, temp0, temp1); \ +- temp1 = __lasx_xvilvl_h(w2, w4); \ +- a1 = __lasx_xvdp2sub_w_h(a1, temp0, temp1); \ +- temp1 = __lasx_xvneg_h(w4); \ +- temp2 = __lasx_xvilvl_h(w2, temp1); \ +- a2 = __lasx_xvdp2add_w_h(a2, temp0, temp2); \ +- temp1 = __lasx_xvneg_h(w6); \ +- temp2 = __lasx_xvilvl_h(temp1, w4); \ +- a3 = __lasx_xvdp2add_w_h(a3, temp0, temp2); \ +- \ +- DUP2_ARG2(__lasx_xvilvh_h, in3, in2, w7, w5, temp0, temp1); \ +- b0 = __lasx_xvdp2add_w_h(b0, temp0, temp1); \ +- DUP2_ARG2(__lasx_xvilvl_h, w5, w1, w3, w7, temp1, temp2); \ +- b1 = __lasx_xvdp2sub_w_h(b1, temp0, temp1); \ +- b2 = __lasx_xvdp2add_w_h(b2, temp0, temp2); \ +- temp1 = __lasx_xvneg_h(w1); \ +- temp2 = __lasx_xvilvl_h(temp1, w3); \ +- b3 = __lasx_xvdp2add_w_h(b3, temp0, temp2); \ +- \ +- temp0 = __lasx_xvadd_w(a0, b0); \ +- temp1 = __lasx_xvadd_w(a1, b1); \ +- temp2 = __lasx_xvadd_w(a2, b2); \ +- temp3 = __lasx_xvadd_w(a3, b3); \ +- a3 = __lasx_xvsub_w(a3, b3); \ +- a2 = __lasx_xvsub_w(a2, b2); \ +- a1 = __lasx_xvsub_w(a1, b1); \ +- a0 = __lasx_xvsub_w(a0, b0); \ +- DUP4_ARG2(__lasx_xvsrai_w, temp0, 20, temp1, 20, temp2, 20, temp3, 20, \ +- temp0, temp1, temp2, temp3); \ +- DUP4_ARG2(__lasx_xvsrai_w, a0, 20, a1, 20, a2, 20, a3, 20, a0, a1, a2, a3); \ +- in0 = __lasx_xvpickev_h(temp1, temp0); \ +- in1 = __lasx_xvpickev_h(temp3, temp2); \ +- in2 = __lasx_xvpickev_h(a2, a3); \ +- in3 = __lasx_xvpickev_h(a0, a1); \ +- +- +-static void simple_idct_lasx(int16_t *block) ++void ff_simple_idct_lasx(int16_t *block) + { + int32_t const_val = 1 << 10; +- __m256i w1 = {0x4B42539F58C50000, 0x11A822A332493FFF, 0x4B42539F58C50000, 0x11A822A332493FFF}; ++ __m256i w1 = {0x4B42539F58C50000, 0x11A822A332493FFF, ++ 0x4B42539F58C50000, 0x11A822A332493FFF}; + __m256i in0, in1, in2, in3; + __m256i w2, w3, w4, w5, w6, w7; + __m256i a0, a1, a2, a3; +@@ -215,24 +189,23 @@ static void simple_idct_lasx(int16_t *block) + + LASX_IDCTROWCONDDC + LASX_IDCTCOLS +- in0 = __lasx_xvpermi_d(in0, 0xD8); +- in1 = __lasx_xvpermi_d(in1, 0xD8); +- in2 = __lasx_xvpermi_d(in2, 0xD8); +- in3 = __lasx_xvpermi_d(in3, 0xD8); ++ DUP4_ARG2(__lasx_xvpermi_d, in0, 0xD8, in1, 0xD8, in2, 0xD8, in3, 0xD8, ++ in0, in1, in2, in3); + __lasx_xvst(in0, block, 0); + __lasx_xvst(in1, block, 32); + __lasx_xvst(in2, block, 64); + __lasx_xvst(in3, block, 96); + } + +-static void simple_idct_put_lasx(uint8_t *dst, int32_t dst_stride, +- int16_t *block) ++void ff_simple_idct_put_lasx(uint8_t *dst, ptrdiff_t dst_stride, ++ int16_t *block) + { + int32_t const_val = 1 << 10; +- int32_t dst_stride_2x = dst_stride << 1; +- int32_t dst_stride_4x = dst_stride << 2; +- int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- __m256i w1 = {0x4B42539F58C50000, 0x11A822A332493FFF, 0x4B42539F58C50000, 0x11A822A332493FFF}; ++ ptrdiff_t dst_stride_2x = dst_stride << 1; ++ ptrdiff_t dst_stride_4x = dst_stride << 2; ++ ptrdiff_t dst_stride_3x = dst_stride_2x + dst_stride; ++ __m256i w1 = {0x4B42539F58C50000, 0x11A822A332493FFF, ++ 0x4B42539F58C50000, 0x11A822A332493FFF}; + __m256i in0, in1, in2, in3; + __m256i w2, w3, w4, w5, w6, w7; + __m256i a0, a1, a2, a3; +@@ -243,10 +216,8 @@ static void simple_idct_put_lasx(uint8_t *dst, int32_t dst_stride, + + LASX_IDCTROWCONDDC + LASX_IDCTCOLS +- in0 = __lasx_xvpermi_d(in0, 0xD8); +- in1 = __lasx_xvpermi_d(in1, 0xD8); +- in2 = __lasx_xvpermi_d(in2, 0xD8); +- in3 = __lasx_xvpermi_d(in3, 0xD8); ++ DUP4_ARG2(__lasx_xvpermi_d, in0, 0xD8, in1, 0xD8, in2, 0xD8, in3, 0xD8, ++ in0, in1, in2, in3); + DUP4_ARG1(__lasx_xvclip255_h, in0, in1, in2, in3, in0, in1, in2, in3); + DUP2_ARG2(__lasx_xvpickev_b, in1, in0, in3, in2, in0, in1); + __lasx_xvstelm_d(in0, dst, 0, 0); +@@ -260,17 +231,19 @@ static void simple_idct_put_lasx(uint8_t *dst, int32_t dst_stride, + __lasx_xvstelm_d(in1, dst + dst_stride_3x, 0, 3); + } + +-static void simple_idct_add_lasx(uint8_t *dst, int32_t dst_stride, +- int16_t *block) ++void ff_simple_idct_add_lasx(uint8_t *dst, ptrdiff_t dst_stride, ++ int16_t *block) + { + int32_t const_val = 1 << 10; + uint8_t *dst1 = dst; +- int32_t dst_stride_2x = dst_stride << 1; +- int32_t dst_stride_4x = dst_stride << 2; +- int32_t dst_stride_3x = dst_stride_2x + dst_stride; ++ ptrdiff_t dst_stride_2x = dst_stride << 1; ++ ptrdiff_t dst_stride_4x = dst_stride << 2; ++ ptrdiff_t dst_stride_3x = dst_stride_2x + dst_stride; + +- __m256i w1 = {0x4B42539F58C50000, 0x11A822A332493FFF, 0x4B42539F58C50000, 0x11A822A332493FFF}; +- __m256i sh = {0x0003000200010000, 0x000B000A00090008, 0x0007000600050004, 0x000F000E000D000C}; ++ __m256i w1 = {0x4B42539F58C50000, 0x11A822A332493FFF, ++ 0x4B42539F58C50000, 0x11A822A332493FFF}; ++ __m256i sh = {0x0003000200010000, 0x000B000A00090008, ++ 0x0007000600050004, 0x000F000E000D000C}; + __m256i in0, in1, in2, in3; + __m256i w2, w3, w4, w5, w6, w7; + __m256i a0, a1, a2, a3; +@@ -304,18 +277,12 @@ static void simple_idct_add_lasx(uint8_t *dst, int32_t dst_stride, + dst1 += dst_stride; + b3 = __lasx_xvldrepl_d(dst1, 0); + b3 = __lasx_vext2xv_hu_bu(b3); +- temp0 = __lasx_xvshuf_h(sh, a1, a0); +- temp1 = __lasx_xvshuf_h(sh, a3, a2); +- temp2 = __lasx_xvshuf_h(sh, b1, b0); +- temp3 = __lasx_xvshuf_h(sh, b3, b2); +- in0 = __lasx_xvadd_h(temp0, in0); +- in1 = __lasx_xvadd_h(temp1, in1); +- in2 = __lasx_xvadd_h(temp2, in2); +- in3 = __lasx_xvadd_h(temp3, in3); +- in0 = __lasx_xvpermi_d(in0, 0xD8); +- in1 = __lasx_xvpermi_d(in1, 0xD8); +- in2 = __lasx_xvpermi_d(in2, 0xD8); +- in3 = __lasx_xvpermi_d(in3, 0xD8); ++ DUP4_ARG3(__lasx_xvshuf_h, sh, a1, a0, sh, a3, a2, sh, b1, b0, sh, b3, b2, ++ temp0, temp1, temp2, temp3); ++ DUP4_ARG2(__lasx_xvadd_h, temp0, in0, temp1, in1, temp2, in2, temp3, in3, ++ in0, in1, in2, in3); ++ DUP4_ARG2(__lasx_xvpermi_d, in0, 0xD8, in1, 0xD8, in2, 0xD8, in3, 0xD8, ++ in0, in1, in2, in3); + DUP4_ARG1(__lasx_xvclip255_h, in0, in1, in2, in3, in0, in1, in2, in3); + DUP2_ARG2(__lasx_xvpickev_b, in1, in0, in3, in2, in0, in1); + __lasx_xvstelm_d(in0, dst, 0, 0); +@@ -328,18 +295,3 @@ static void simple_idct_add_lasx(uint8_t *dst, int32_t dst_stride, + __lasx_xvstelm_d(in1, dst + dst_stride_2x, 0, 1); + __lasx_xvstelm_d(in1, dst + dst_stride_3x, 0, 3); + } +- +-void ff_simple_idct_lasx(int16_t *block) +-{ +- simple_idct_lasx(block); +-} +- +-void ff_simple_idct_put_lasx(uint8_t *dst, ptrdiff_t dst_stride, int16_t *block) +-{ +- simple_idct_put_lasx(dst, dst_stride, block); +-} +- +-void ff_simple_idct_add_lasx(uint8_t *dst, ptrdiff_t dst_stride, int16_t *block) +-{ +- simple_idct_add_lasx(dst, dst_stride, block); +-} +diff --git a/libavcodec/loongarch/vc1dsp_lasx.c b/libavcodec/loongarch/vc1dsp_lasx.c +index 4f4088fa1d..40b8668f2b 100644 +--- a/libavcodec/loongarch/vc1dsp_lasx.c ++++ b/libavcodec/loongarch/vc1dsp_lasx.c +@@ -28,28 +28,40 @@ void ff_vc1_inv_trans_8x8_lasx(int16_t block[64]) + int32_t con_64 = 64; + __m256i in0, in1, in2, in3; + __m256i temp0, temp1, temp2, temp3, t1, t2, t3, t4, t5, t6, t7, t8; +- __m256i const_1 = {0x000c000c000c000c, 0x000c000c000c000c, 0x000c000c000c000c, 0x000c000c000c000c}; +- __m256i const_2 = {0xfff4000cfff4000c, 0xfff4000cfff4000c, 0xfff4000cfff4000c, 0xfff4000cfff4000c}; +- __m256i const_3 = {0x0006001000060010, 0x0006001000060010, 0x0006001000060010, 0x0006001000060010}; +- __m256i const_4 = {0xfff00006fff00006, 0xfff00006fff00006, 0xfff00006fff00006, 0xfff00006fff00006}; +- __m256i const_5 = {0x000f0010000f0010, 0x000f0010000f0010, 0x000f0010000f0010, 0x000f0010000f0010}; +- __m256i const_6 = {0x0004000900040009, 0x0004000900040009, 0x0004000900040009, 0x0004000900040009}; +- __m256i const_7 = {0xfffc000ffffc000f, 0xfffc000ffffc000f, 0xfffc000ffffc000f, 0xfffc000ffffc000f}; +- __m256i const_8 = {0xfff7fff0fff7fff0, 0xfff7fff0fff7fff0, 0xfff7fff0fff7fff0, 0xfff7fff0fff7fff0}; +- __m256i const_9 = {0xfff00009fff00009, 0xfff00009fff00009, 0xfff00009fff00009, 0xfff00009fff00009}; +- __m256i const_10 = {0x000f0004000f0004, 0x000f0004000f0004, 0x000f0004000f0004, 0x000f0004000f0004}; +- __m256i const_11 = {0xfff70004fff70004, 0xfff70004fff70004, 0xfff70004fff70004, 0xfff70004fff70004}; +- __m256i const_12 = {0xfff0000ffff0000f, 0xfff0000ffff0000f, 0xfff0000ffff0000f, 0xfff0000ffff0000f}; +- +- DUP4_ARG2(__lasx_xvld, block, 0, block, 32, block, 64, block, 96, in0, in1, in2, in3); +- in0 = __lasx_xvpermi_d(in0, 0xD8); +- in1 = __lasx_xvpermi_d(in1, 0xD8); +- in2 = __lasx_xvpermi_d(in2, 0xD8); +- in3 = __lasx_xvpermi_d(in3, 0xD8); ++ __m256i const_1 = {0x000c000c000c000c, 0x000c000c000c000c, ++ 0x000c000c000c000c, 0x000c000c000c000c}; ++ __m256i const_2 = {0xfff4000cfff4000c, 0xfff4000cfff4000c, ++ 0xfff4000cfff4000c, 0xfff4000cfff4000c}; ++ __m256i const_3 = {0x0006001000060010, 0x0006001000060010, ++ 0x0006001000060010, 0x0006001000060010}; ++ __m256i const_4 = {0xfff00006fff00006, 0xfff00006fff00006, ++ 0xfff00006fff00006, 0xfff00006fff00006}; ++ __m256i const_5 = {0x000f0010000f0010, 0x000f0010000f0010, ++ 0x000f0010000f0010, 0x000f0010000f0010}; ++ __m256i const_6 = {0x0004000900040009, 0x0004000900040009, ++ 0x0004000900040009, 0x0004000900040009}; ++ __m256i const_7 = {0xfffc000ffffc000f, 0xfffc000ffffc000f, ++ 0xfffc000ffffc000f, 0xfffc000ffffc000f}; ++ __m256i const_8 = {0xfff7fff0fff7fff0, 0xfff7fff0fff7fff0, ++ 0xfff7fff0fff7fff0, 0xfff7fff0fff7fff0}; ++ __m256i const_9 = {0xfff00009fff00009, 0xfff00009fff00009, ++ 0xfff00009fff00009, 0xfff00009fff00009}; ++ __m256i const_10 = {0x000f0004000f0004, 0x000f0004000f0004, ++ 0x000f0004000f0004, 0x000f0004000f0004}; ++ __m256i const_11 = {0xfff70004fff70004, 0xfff70004fff70004, ++ 0xfff70004fff70004, 0xfff70004fff70004}; ++ __m256i const_12 = {0xfff0000ffff0000f, 0xfff0000ffff0000f, ++ 0xfff0000ffff0000f, 0xfff0000ffff0000f}; ++ ++ DUP4_ARG2(__lasx_xvld, block, 0, block, 32, block, 64, block, 96, ++ in0, in1, in2, in3); ++ DUP4_ARG2(__lasx_xvpermi_d, in0, 0xD8, in1, 0xD8, in2, 0xD8, in3, 0xD8, ++ in0, in1, in2, in3); + /* first loops */ + DUP2_ARG2(__lasx_xvilvl_h, in2, in0, in3, in1, temp0, temp1); + t2 = __lasx_xvreplgr2vr_w(con_4); +- DUP2_ARG3(__lasx_xvdp2add_w_h, t2, temp0, const_1, t2, temp0, const_2, t1, t2); ++ DUP2_ARG3(__lasx_xvdp2add_w_h, t2, temp0, const_1, t2, temp0, ++ const_2, t1, t2); + DUP2_ARG2(__lasx_xvdp2_w_h, temp1, const_3, temp1, const_4, t3, t4); + + t5 = __lasx_xvadd_w(t1, t3); +@@ -67,32 +79,26 @@ void ff_vc1_inv_trans_8x8_lasx(int16_t block[64]) + temp2 = __lasx_xvdp2_w_h(const_11, temp0); + t4 = __lasx_xvdp2add_w_h(temp2, temp1, const_12); + +- temp0 = __lasx_xvadd_w(t1, t5); +- temp1 = __lasx_xvadd_w(t6, t2); +- temp2 = __lasx_xvadd_w(t7, t3); +- temp3 = __lasx_xvadd_w(t8, t4); +- in0 = __lasx_xvsub_w(t8, t4); +- in1 = __lasx_xvsub_w(t7, t3); +- in2 = __lasx_xvsub_w(t6, t2); +- in3 = __lasx_xvsub_w(t5, t1); ++ DUP4_ARG2(__lasx_xvadd_w, t1, t5, t6, t2, t7, t3, t8, t4, ++ temp0, temp1, temp2, temp3); ++ DUP4_ARG2(__lasx_xvsub_w, t8, t4, t7, t3, t6, t2, t5, t1, ++ in0, in1, in2, in3); + DUP4_ARG2(__lasx_xvsrai_w, temp0, 3, temp1, 3, temp2, 3, temp3, 3, + temp0, temp1, temp2, temp3); +- DUP4_ARG2(__lasx_xvsrai_w, in0, 3, in1, 3, in2, 3, in3, 3, in0, in1, in2, in3); ++ DUP4_ARG2(__lasx_xvsrai_w, in0, 3, in1, 3, in2, 3, in3, 3, ++ in0, in1, in2, in3); + + /* second loops */ +- temp0 = __lasx_xvpackev_h(temp1, temp0); +- temp1 = __lasx_xvpackev_h(temp3, temp2); +- temp2 = __lasx_xvpackev_h(in1, in0); +- temp3 = __lasx_xvpackev_h(in3, in2); ++ DUP4_ARG2(__lasx_xvpackev_h, temp1, temp0, temp3, temp2, in1, in0, ++ in3, in2, temp0, temp1, temp2, temp3); + DUP2_ARG2(__lasx_xvilvl_w, temp1, temp0, temp3, temp2, t1, t3); + DUP2_ARG2(__lasx_xvilvh_w, temp1, temp0, temp3, temp2, t2, t4); +- in0 = __lasx_xvpermi_q(t3, t1, 0x20); +- in1 = __lasx_xvpermi_q(t3, t1, 0x31); +- in2 = __lasx_xvpermi_q(t4, t2, 0x20); +- in3 = __lasx_xvpermi_q(t4, t2, 0x31); ++ DUP4_ARG3(__lasx_xvpermi_q, t3, t1, 0x20, t3, t1, 0x31, t4, t2, 0x20, ++ t4, t2, 0x31, in0, in1, in2, in3); + DUP2_ARG2(__lasx_xvilvl_h, in1, in0, in3, in2, temp0, temp1); + t3 = __lasx_xvreplgr2vr_w(con_64); +- DUP2_ARG3(__lasx_xvdp2add_w_h, t3, temp0, const_1, t3, temp0, const_2, t1, t2); ++ DUP2_ARG3(__lasx_xvdp2add_w_h, t3, temp0, const_1, t3, temp0, ++ const_2, t1, t2); + DUP2_ARG2(__lasx_xvdp2_w_h, temp1, const_3, temp1, const_4, t3, t4); + + t5 = __lasx_xvadd_w(t1, t3); +@@ -110,108 +116,91 @@ void ff_vc1_inv_trans_8x8_lasx(int16_t block[64]) + temp2 = __lasx_xvdp2_w_h(const_11, temp0); + t4 = __lasx_xvdp2add_w_h(temp2, temp1, const_12); + +- temp0 = __lasx_xvadd_w(t5, t1); +- temp1 = __lasx_xvadd_w(t6, t2); +- temp2 = __lasx_xvadd_w(t7, t3); +- temp3 = __lasx_xvadd_w(t8, t4); +- in0 = __lasx_xvsub_w(t8, t4); +- in1 = __lasx_xvsub_w(t7, t3); +- in2 = __lasx_xvsub_w(t6, t2); +- in3 = __lasx_xvsub_w(t5, t1); +- in0 = __lasx_xvaddi_wu(in0, 1); +- in1 = __lasx_xvaddi_wu(in1, 1); +- in2 = __lasx_xvaddi_wu(in2, 1); +- in3 = __lasx_xvaddi_wu(in3, 1); +- DUP4_ARG2(__lasx_xvsrai_w, temp0, 7, temp1, 7, temp2, 7, temp3, 7, ++ DUP4_ARG2(__lasx_xvadd_w, t5, t1, t6, t2, t7, t3, t8, t4, + temp0, temp1, temp2, temp3); +- DUP4_ARG2(__lasx_xvsrai_w, in0, 7, in1, 7, in2, 7, in3, 7, in0, in1, in2, in3); +- t1 = __lasx_xvpickev_h(temp1, temp0); +- t2 = __lasx_xvpickev_h(temp3, temp2); +- t3 = __lasx_xvpickev_h(in1, in0); +- t4 = __lasx_xvpickev_h(in3, in2); +- in0 = __lasx_xvpermi_d(t1, 0xD8); +- in1 = __lasx_xvpermi_d(t2, 0xD8); +- in2 = __lasx_xvpermi_d(t3, 0xD8); +- in3 = __lasx_xvpermi_d(t4, 0xD8); ++ DUP4_ARG2(__lasx_xvsub_w, t8, t4, t7, t3, t6, t2, t5, t1, ++ in0, in1, in2, in3); ++ DUP4_ARG2(__lasx_xvaddi_wu, in0, 1, in1, 1, in2, 1, in3, 1, ++ in0, in1, in2, in3); ++ DUP4_ARG3(__lasx_xvsrani_h_w, temp1, temp0, 7, temp3, temp2, 7, ++ in1, in0, 7, in3, in2, 7, t1, t2, t3, t4); ++ DUP4_ARG2(__lasx_xvpermi_d, t1, 0xD8, t2, 0xD8, t3, 0xD8, t4, 0xD8, ++ in0, in1, in2, in3); + __lasx_xvst(in0, block, 0); + __lasx_xvst(in1, block, 32); + __lasx_xvst(in2, block, 64); + __lasx_xvst(in3, block, 96); + } + +-void ff_vc1_inv_trans_8x8_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) ++void ff_vc1_inv_trans_8x8_dc_lasx(uint8_t *dest, ptrdiff_t stride, ++ int16_t *block) + { + int dc = block[0]; +- uint8_t *dst = dest + stride; +- __m256i in0, in1, const_dc, temp0; +- __m256i zero = {0}; ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ uint8_t *dst = dest + (stride2 << 1); ++ __m256i in0, in1, in2, in3, in4, in5, in6, in7; ++ __m256i const_dc, temp0, temp1, temp2, temp3; ++ __m256i reg0, reg1, reg2, reg3; + + dc = (3 * dc + 1) >> 1; + dc = (3 * dc + 16) >> 5; + + const_dc = __lasx_xvreplgr2vr_h(dc); +- in0 = __lasx_xvldrepl_d(dest, 0); +- in1 = __lasx_xvldrepl_d(dst, 0); +- in0 = __lasx_xvpermi_q(in1, in0, 0x20); +- temp0 = __lasx_xvilvl_b(zero, in0); +- temp0 = __lasx_xvadd_h(temp0, const_dc); +- in0 = __lasx_xvclip255_h(temp0); +- temp0 = __lasx_xvpickev_b(in0, in0); +- __lasx_xvstelm_d(temp0, dest, 0, 0); +- __lasx_xvstelm_d(temp0, dst, 0, 2); +- dest = dst + stride; +- dst = dest + stride; +- in0 = __lasx_xvldrepl_d(dest, 0); +- in1 = __lasx_xvldrepl_d(dst, 0); +- in0 = __lasx_xvpermi_q(in1, in0, 0x20); +- temp0 = __lasx_xvilvl_b(zero, in0); +- temp0 = __lasx_xvadd_h(temp0, const_dc); +- in0 = __lasx_xvclip255_h(temp0); +- temp0 = __lasx_xvpickev_b(in0, in0); +- __lasx_xvstelm_d(temp0, dest, 0, 0); +- __lasx_xvstelm_d(temp0, dst, 0, 2); +- dest = dst + stride; +- dst = dest + stride; +- in0 = __lasx_xvldrepl_d(dest, 0); +- in1 = __lasx_xvldrepl_d(dst, 0); +- in0 = __lasx_xvpermi_q(in1, in0, 0x20); +- temp0 = __lasx_xvilvl_b(zero, in0); +- temp0 = __lasx_xvadd_h(temp0, const_dc); +- in0 = __lasx_xvclip255_h(temp0); +- temp0 = __lasx_xvpickev_b(in0, in0); +- __lasx_xvstelm_d(temp0, dest, 0, 0); +- __lasx_xvstelm_d(temp0, dst, 0, 2); +- dest = dst + stride; +- dst = dest + stride; +- in0 = __lasx_xvldrepl_d(dest, 0); +- in1 = __lasx_xvldrepl_d(dst, 0); +- in0 = __lasx_xvpermi_q(in1, in0, 0x20); +- temp0 = __lasx_xvilvl_b(zero, in0); +- temp0 = __lasx_xvadd_h(temp0, const_dc); +- in0 = __lasx_xvclip255_h(temp0); +- temp0 = __lasx_xvpickev_b(in0, in0); ++ DUP4_ARG2(__lasx_xvldrepl_d, dest, 0, dest + stride, 0, dest + stride2, ++ 0, dest + stride3, 0, in0, in1, in2, in3); ++ DUP4_ARG2(__lasx_xvldrepl_d, dst, 0, dst + stride, 0, dst + stride2, ++ 0, dst + stride3, 0, in4, in5, in6, in7); ++ ++ DUP4_ARG2(__lasx_xvilvl_d, in1, in0, in3, in2, in5, in4, in7, in6, ++ temp0, temp1, temp2, temp3); ++ DUP4_ARG1(__lasx_vext2xv_hu_bu, temp0, temp1, temp2, temp3, ++ temp0, temp1, temp2, temp3); ++ ++ DUP4_ARG2(__lasx_xvadd_h, temp0, const_dc, temp1, const_dc, temp2, ++ const_dc, temp3, const_dc, reg0, reg1, reg2, reg3); ++ DUP2_ARG3(__lasx_xvssrarni_bu_h, reg1, reg0, 0, reg3, reg2, 0, ++ temp0, temp1); + __lasx_xvstelm_d(temp0, dest, 0, 0); +- __lasx_xvstelm_d(temp0, dst, 0, 2); ++ __lasx_xvstelm_d(temp0, dest + stride, 0, 2); ++ __lasx_xvstelm_d(temp0, dest + stride2, 0, 1); ++ __lasx_xvstelm_d(temp0, dest + stride3, 0, 3); ++ __lasx_xvstelm_d(temp1, dst, 0, 0); ++ __lasx_xvstelm_d(temp1, dst + stride, 0, 2); ++ __lasx_xvstelm_d(temp1, dst + stride2, 0, 1); ++ __lasx_xvstelm_d(temp1, dst + stride3, 0, 3); + } + + void ff_vc1_inv_trans_8x4_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + { +- uint8_t *dst = dest; +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_3x = stride_2x + stride; +- __m256i shift = {0x0000000400000000, 0x0000000500000001, 0x0000000600000002, 0x0000000700000003}; +- __m256i const_64 = {0x0000004000000040, 0x0000004000000040, 0x0000004000000040, 0x0000004000000040}; +- __m256i const_1 = {0x00060010000C000C, 0x00060010000C000C, 0x00060010000C000C, 0x00060010000C000C}; +- __m256i const_2 = {0xFFF00006FFF4000C, 0xFFF00006FFF4000C, 0xFFF00006FFF4000C, 0xFFF00006FFF4000C}; +- __m256i const_3 = {0x0004000F00090010, 0x0004000F00090010, 0x0004000F00090010, 0x0004000F00090010}; +- __m256i const_4 = {0xFFF7FFFCFFF0000F, 0xFFF7FFFCFFF0000F, 0xFFF7FFFCFFF0000F, 0xFFF7FFFCFFF0000F}; +- __m256i const_5 = {0x000FFFF000040009, 0x000FFFF000040009, 0x000FFFF000040009, 0x000FFFF000040009}; +- __m256i const_6 = {0xFFF0FFF7000F0004, 0xFFF0FFF7000F0004, 0xFFF0FFF7000F0004, 0xFFF0FFF7000F0004}; +- __m256i const_7 = {0x0000000000000004, 0x0000000000000004, 0x0000000000000004, 0x0000000000000004}; +- __m256i const_8 = {0x0011001100110011, 0x0011001100110011, 0x0011001100110011, 0x0011001100110011}; +- __m256i const_9 = {0xFFEF0011FFEF0011, 0xFFEF0011FFEF0011, 0xFFEF0011FFEF0011, 0xFFEF0011FFEF0011}; +- __m256i const_10 = {0x000A0016000A0016, 0x000A0016000A0016, 0x000A0016000A0016, 0x000A0016000A0016}; +- __m256i const_11 = {0x0016FFF60016FFF6, 0x0016FFF60016FFF6, 0x0016FFF60016FFF6, 0x0016FFF60016FFF6}; ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ __m256i shift = {0x0000000400000000, 0x0000000500000001, ++ 0x0000000600000002, 0x0000000700000003}; ++ __m256i const_64 = {0x0000004000000040, 0x0000004000000040, ++ 0x0000004000000040, 0x0000004000000040}; ++ __m256i const_1 = {0x00060010000C000C, 0x00060010000C000C, ++ 0x00060010000C000C, 0x00060010000C000C}; ++ __m256i const_2 = {0xFFF00006FFF4000C, 0xFFF00006FFF4000C, ++ 0xFFF00006FFF4000C, 0xFFF00006FFF4000C}; ++ __m256i const_3 = {0x0004000F00090010, 0x0004000F00090010, ++ 0x0004000F00090010, 0x0004000F00090010}; ++ __m256i const_4 = {0xFFF7FFFCFFF0000F, 0xFFF7FFFCFFF0000F, ++ 0xFFF7FFFCFFF0000F, 0xFFF7FFFCFFF0000F}; ++ __m256i const_5 = {0x000FFFF000040009, 0x000FFFF000040009, ++ 0x000FFFF000040009, 0x000FFFF000040009}; ++ __m256i const_6 = {0xFFF0FFF7000F0004, 0xFFF0FFF7000F0004, ++ 0xFFF0FFF7000F0004, 0xFFF0FFF7000F0004}; ++ __m256i const_7 = {0x0000000000000004, 0x0000000000000004, ++ 0x0000000000000004, 0x0000000000000004}; ++ __m256i const_8 = {0x0011001100110011, 0x0011001100110011, ++ 0x0011001100110011, 0x0011001100110011}; ++ __m256i const_9 = {0xFFEF0011FFEF0011, 0xFFEF0011FFEF0011, ++ 0xFFEF0011FFEF0011, 0xFFEF0011FFEF0011}; ++ __m256i const_10 = {0x000A0016000A0016, 0x000A0016000A0016, ++ 0x000A0016000A0016, 0x000A0016000A0016}; ++ __m256i const_11 = {0x0016FFF60016FFF6, 0x0016FFF60016FFF6, ++ 0x0016FFF60016FFF6, 0x0016FFF60016FFF6}; + __m256i in0, in1; + __m256i temp0, temp1, temp2, temp3, t1, t2, t3, t4; + +@@ -232,8 +221,8 @@ void ff_vc1_inv_trans_8x4_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + t4 = __lasx_xvsub_w(temp0, temp1); + t4 = __lasx_xvpermi_d(t4, 0xB1); + +- DUP4_ARG2(__lasx_xvdp4_d_h, temp3, const_3, temp3, const_4, temp3, const_5, temp3, +- const_6, t1, t2, temp0, temp1); ++ DUP4_ARG2(__lasx_xvdp4_d_h, temp3, const_3, temp3, const_4, temp3, ++ const_5, temp3, const_6, t1, t2, temp0, temp1); + temp2 = __lasx_xvpickev_w(t2, t1); + temp3 = __lasx_xvpickev_w(temp1, temp0); + +@@ -241,10 +230,8 @@ void ff_vc1_inv_trans_8x4_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + t2 = __lasx_xvadd_w(temp3, t4); + temp0 = __lasx_xvsub_w(t4, temp3); + temp1 = __lasx_xvsub_w(t3, temp2); +- DUP4_ARG2(__lasx_xvsrai_w, t1, 3, t2, 3, temp0, 3, temp1, 3, t1, t2, t3, t4); + /* second loops */ +- temp2 = __lasx_xvpickev_h(t2, t1); +- temp3 = __lasx_xvpickev_h(t4, t3); ++ DUP2_ARG3(__lasx_xvsrani_h_w, t2, t1, 3, temp1, temp0, 3, temp2, temp3); + temp3 = __lasx_xvshuf4i_h(temp3, 0x4E); + temp0 = __lasx_xvpermi_q(temp3, temp2, 0x20); + temp1 = __lasx_xvpermi_q(temp3, temp2, 0x31); +@@ -255,141 +242,124 @@ void ff_vc1_inv_trans_8x4_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + temp1 = __lasx_xvsub_w(t2, t4); + temp2 = __lasx_xvadd_w(t2, t4); + temp3 = __lasx_xvsub_w(t1, t3); +- DUP4_ARG2(__lasx_xvsrai_w, temp0, 7, temp1, 7, temp2, 7, temp3, 7, t1, t2, t3, t4); +- +- temp0 = __lasx_xvldrepl_d(dst, 0); +- temp0 = __lasx_vext2xv_wu_bu(temp0); +- dst += stride; +- temp1 = __lasx_xvldrepl_d(dst, 0); +- temp1 = __lasx_vext2xv_wu_bu(temp1); +- dst += stride; +- temp2 = __lasx_xvldrepl_d(dst, 0); +- temp2 = __lasx_vext2xv_wu_bu(temp2); +- dst += stride; +- temp3 = __lasx_xvldrepl_d(dst, 0); +- temp3 = __lasx_vext2xv_wu_bu(temp3); +- t1 = __lasx_xvadd_w(temp0, t1); +- t2 = __lasx_xvadd_w(temp1, t2); +- t3 = __lasx_xvadd_w(temp2, t3); +- t4 = __lasx_xvadd_w(temp3, t4); ++ DUP4_ARG2(__lasx_xvsrai_w, temp0, 7, temp1, 7, temp2, 7, temp3, 7, ++ t1, t2, t3, t4); ++ ++ temp0 = __lasx_xvldrepl_d(dest, 0); ++ DUP4_ARG2(__lasx_xvldrepl_d, dest, 0, dest + stride, 0, dest + stride2, 0, ++ dest + stride3, 0, temp0, temp1, temp2, temp3); ++ DUP4_ARG1(__lasx_vext2xv_wu_bu, temp0, temp1, temp2, temp3, ++ temp0, temp1, temp2, temp3); ++ DUP4_ARG2(__lasx_xvadd_w, temp0, t1, temp1, t2, temp2, t3, temp3, t4, ++ t1, t2, t3, t4); + DUP4_ARG1(__lasx_xvclip255_w, t1, t2, t3, t4, t1, t2, t3, t4); + DUP2_ARG2(__lasx_xvpickev_h, t2, t1, t4, t3, temp0, temp1); + temp2 = __lasx_xvpickev_b(temp1, temp0); + temp0 = __lasx_xvperm_w(temp2, shift); + __lasx_xvstelm_d(temp0, dest, 0, 0); + __lasx_xvstelm_d(temp0, dest + stride, 0, 1); +- __lasx_xvstelm_d(temp0, dest + stride_2x, 0, 2); +- __lasx_xvstelm_d(temp0, dest + stride_3x, 0, 3); ++ __lasx_xvstelm_d(temp0, dest + stride2, 0, 2); ++ __lasx_xvstelm_d(temp0, dest + stride3, 0, 3); + } + +-void ff_vc1_inv_trans_8x4_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) ++void ff_vc1_inv_trans_8x4_dc_lasx(uint8_t *dest, ptrdiff_t stride, ++ int16_t *block) + { + int dc = block[0]; +- uint8_t *dst = dest + stride; +- __m256i in0, in1, const_dc, temp0; +- __m256i zero = {0}; ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ __m256i in0, in1, in2, in3; ++ __m256i const_dc, temp0, temp1, reg0, reg1; + + dc = (3 * dc + 1) >> 1; + dc = (17 * dc + 64) >> 7; + const_dc = __lasx_xvreplgr2vr_h(dc); + +- in0 = __lasx_xvldrepl_d(dest, 0); +- in1 = __lasx_xvldrepl_d(dst, 0); +- in0 = __lasx_xvpermi_q(in1, in0, 0x20); +- temp0 = __lasx_xvilvl_b(zero, in0); +- temp0 = __lasx_xvadd_h(temp0, const_dc); +- in0 = __lasx_xvclip255_h(temp0); +- temp0 = __lasx_xvpickev_b(in0, in0); ++ DUP4_ARG2(__lasx_xvldrepl_d, dest, 0, dest + stride, 0, dest + stride2, ++ 0, dest + stride3, 0, in0, in1, in2, in3); ++ DUP2_ARG2(__lasx_xvilvl_d, in1, in0, in3, in2, temp0, temp1); ++ DUP2_ARG1(__lasx_vext2xv_hu_bu, temp0, temp1, temp0, temp1); ++ DUP2_ARG2(__lasx_xvadd_h, temp0, const_dc, temp1, const_dc, reg0, reg1); ++ temp0 = __lasx_xvssrarni_bu_h(reg1, reg0, 0); + __lasx_xvstelm_d(temp0, dest, 0, 0); +- __lasx_xvstelm_d(temp0, dst, 0, 2); +- dest = dst + stride; +- dst = dest + stride; +- in0 = __lasx_xvldrepl_d(dest, 0); +- in1 = __lasx_xvldrepl_d(dst, 0); +- in0 = __lasx_xvpermi_q(in1, in0, 0x20); +- temp0 = __lasx_xvilvl_b(zero, in0); +- temp0 = __lasx_xvadd_h(temp0, const_dc); +- in0 = __lasx_xvclip255_h(temp0); +- temp0 = __lasx_xvpickev_b(in0, in0); +- __lasx_xvstelm_d(temp0, dest, 0, 0); +- __lasx_xvstelm_d(temp0, dst, 0, 2); ++ __lasx_xvstelm_d(temp0, dest + stride, 0, 2); ++ __lasx_xvstelm_d(temp0, dest + stride2, 0, 1); ++ __lasx_xvstelm_d(temp0, dest + stride3, 0, 3); + } + +-void ff_vc1_inv_trans_4x8_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) ++void ff_vc1_inv_trans_4x8_dc_lasx(uint8_t *dest, ptrdiff_t stride, ++ int16_t *block) + { + int dc = block[0]; +- uint8_t *dst1 = dest + stride; +- uint8_t *dst2 = dst1 + stride; +- uint8_t *dst3 = dst2 + stride; +- __m256i in0, in1, in2, in3, const_dc, temp0, temp1; +- __m256i zero = {0}; ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ uint8_t *dst = dest + (stride2 << 1); ++ __m256i in0, in1, in2, in3, in4, in5, in6, in7; ++ __m256i const_dc, temp0, temp1, temp2, temp3, reg0, reg1; + + dc = (17 * dc + 4) >> 3; + dc = (12 * dc + 64) >> 7; + const_dc = __lasx_xvreplgr2vr_h(dc); + +- in0 = __lasx_xvldrepl_w(dest, 0); +- in1 = __lasx_xvldrepl_w(dst1, 0); +- in2 = __lasx_xvldrepl_w(dst2, 0); +- in3 = __lasx_xvldrepl_w(dst3, 0); +- DUP2_ARG2(__lasx_xvilvl_w, in1, in0, in3, in2, temp0, temp1); +- in0 = __lasx_xvpermi_q(temp1, temp0, 0x20); +- temp0 = __lasx_xvilvl_b(zero, in0); +- temp0 = __lasx_xvadd_h(temp0, const_dc); +- in0 = __lasx_xvclip255_h(temp0); +- temp0 = __lasx_xvpickev_b(in0, in0); +- __lasx_xvstelm_w(temp0, dest, 0, 0); +- __lasx_xvstelm_w(temp0, dst1, 0, 1); +- __lasx_xvstelm_w(temp0, dst2, 0, 4); +- __lasx_xvstelm_w(temp0, dst3, 0, 5); +- +- dest = dst3 + stride; +- dst1 = dest + stride; +- dst2 = dst1 + stride; +- dst3 = dst2 + stride; ++ DUP4_ARG2(__lasx_xvldrepl_w, dest, 0, dest + stride, 0, dest + stride2, ++ 0, dest + stride3, 0, in0, in1, in2, in3); ++ DUP4_ARG2(__lasx_xvldrepl_w, dst, 0, dst + stride, 0, dst + stride2, ++ 0, dst + stride3, 0, in4, in5, in6, in7); + +- in0 = __lasx_xvldrepl_w(dest, 0); +- in1 = __lasx_xvldrepl_w(dst1, 0); +- in2 = __lasx_xvldrepl_w(dst2, 0); +- in3 = __lasx_xvldrepl_w(dst3, 0); +- DUP2_ARG2(__lasx_xvilvl_w, in1, in0, in3, in2, temp0, temp1); +- in0 = __lasx_xvpermi_q(temp1, temp0, 0x20); +- temp0 = __lasx_xvilvl_b(zero, in0); +- temp0 = __lasx_xvadd_h(temp0, const_dc); +- in0 = __lasx_xvclip255_h(temp0); +- temp0 = __lasx_xvpickev_b(in0, in0); ++ DUP4_ARG2(__lasx_xvilvl_w, in1, in0, in3, in2, in5, in4, in7, in6, ++ temp0, temp1, temp2, temp3); ++ DUP2_ARG2(__lasx_xvilvl_d, temp1, temp0, temp3, temp2, reg0, reg1); ++ DUP2_ARG1(__lasx_vext2xv_hu_bu, reg0, reg1, temp0, temp1); ++ DUP2_ARG2(__lasx_xvadd_h, temp0, const_dc, temp1, const_dc, reg0, reg1); ++ temp0 = __lasx_xvssrarni_bu_h(reg1, reg0, 0); + __lasx_xvstelm_w(temp0, dest, 0, 0); +- __lasx_xvstelm_w(temp0, dst1, 0, 1); +- __lasx_xvstelm_w(temp0, dst2, 0, 4); +- __lasx_xvstelm_w(temp0, dst3, 0, 5); +- ++ __lasx_xvstelm_w(temp0, dest + stride, 0, 1); ++ __lasx_xvstelm_w(temp0, dest + stride2, 0, 4); ++ __lasx_xvstelm_w(temp0, dest + stride3, 0, 5); ++ __lasx_xvstelm_w(temp0, dst, 0, 2); ++ __lasx_xvstelm_w(temp0, dst + stride, 0, 3); ++ __lasx_xvstelm_w(temp0, dst + stride2, 0, 6); ++ __lasx_xvstelm_w(temp0, dst + stride3, 0, 7); + } + + void ff_vc1_inv_trans_4x8_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + { +- uint8_t *dst = dest; +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_4x = stride << 2; +- ptrdiff_t stride_3x = stride_2x + stride; ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride3 = stride2 + stride; ++ uint8_t *dst = dest + (stride2 << 1); + __m256i in0, in1, in2, in3; + __m256i temp0, temp1, temp2, temp3, t1, t2, t3, t4; + +- __m256i const_1 = {0x0011001100110011, 0x0011001100110011, 0x0011001100110011, 0x0011001100110011}; +- __m256i const_2 = {0xFFEF0011FFEF0011, 0xFFEF0011FFEF0011, 0xFFEF0011FFEF0011, 0xFFEF0011FFEF0011}; +- __m256i const_3 = {0x000A0016000A0016, 0x000A0016000A0016, 0x000A0016000A0016, 0x000A0016000A0016}; +- __m256i const_4 = {0x0016FFF60016FFF6, 0x0016FFF60016FFF6, 0x0016FFF60016FFF6, 0x0016FFF60016FFF6}; +- __m256i const_5 = {0x0000000400000004, 0x0000000400000004, 0x0000000400000004, 0x0000000400000004}; +- __m256i const_6 = {0x0000004000000040, 0x0000004000000040, 0x0000004000000040, 0x0000004000000040}; +- __m256i const_7 = {0x000C000C000C000C, 0X000C000C000C000C, 0xFFF4000CFFF4000C, 0xFFF4000CFFF4000C}; +- __m256i const_8 = {0x0006001000060010, 0x0006001000060010, 0xFFF00006FFF00006, 0xFFF00006FFF00006}; +- __m256i const_9 = {0x0009001000090010, 0x0009001000090010, 0x0004000F0004000F, 0x0004000F0004000F}; +- __m256i const_10 = {0xFFF0000FFFF0000F, 0xFFF0000FFFF0000F, 0xFFF7FFFCFFF7FFFC, 0xFFF7FFFCFFF7FFFC}; +- __m256i const_11 = {0x0004000900040009, 0x0004000900040009, 0x000FFFF0000FFFF0, 0x000FFFF0000FFFF0}; +- __m256i const_12 = {0x000F0004000F0004, 0x000F0004000F0004, 0xFFF0FFF7FFF0FFF7, 0xFFF0FFF7FFF0FFF7}; +- __m256i shift = {0x0000000400000000, 0x0000000600000002, 0x0000000500000001, 0x0000000700000003}; ++ __m256i const_1 = {0x0011001100110011, 0x0011001100110011, ++ 0x0011001100110011, 0x0011001100110011}; ++ __m256i const_2 = {0xFFEF0011FFEF0011, 0xFFEF0011FFEF0011, ++ 0xFFEF0011FFEF0011, 0xFFEF0011FFEF0011}; ++ __m256i const_3 = {0x000A0016000A0016, 0x000A0016000A0016, ++ 0x000A0016000A0016, 0x000A0016000A0016}; ++ __m256i const_4 = {0x0016FFF60016FFF6, 0x0016FFF60016FFF6, ++ 0x0016FFF60016FFF6, 0x0016FFF60016FFF6}; ++ __m256i const_5 = {0x0000000400000004, 0x0000000400000004, ++ 0x0000000400000004, 0x0000000400000004}; ++ __m256i const_6 = {0x0000004000000040, 0x0000004000000040, ++ 0x0000004000000040, 0x0000004000000040}; ++ __m256i const_7 = {0x000C000C000C000C, 0X000C000C000C000C, ++ 0xFFF4000CFFF4000C, 0xFFF4000CFFF4000C}; ++ __m256i const_8 = {0x0006001000060010, 0x0006001000060010, ++ 0xFFF00006FFF00006, 0xFFF00006FFF00006}; ++ __m256i const_9 = {0x0009001000090010, 0x0009001000090010, ++ 0x0004000F0004000F, 0x0004000F0004000F}; ++ __m256i const_10 = {0xFFF0000FFFF0000F, 0xFFF0000FFFF0000F, ++ 0xFFF7FFFCFFF7FFFC, 0xFFF7FFFCFFF7FFFC}; ++ __m256i const_11 = {0x0004000900040009, 0x0004000900040009, ++ 0x000FFFF0000FFFF0, 0x000FFFF0000FFFF0}; ++ __m256i const_12 = {0x000F0004000F0004, 0x000F0004000F0004, ++ 0xFFF0FFF7FFF0FFF7, 0xFFF0FFF7FFF0FFF7}; ++ __m256i shift = {0x0000000400000000, 0x0000000600000002, ++ 0x0000000500000001, 0x0000000700000003}; + + /* first loops */ +- DUP4_ARG2(__lasx_xvld, block, 0, block, 32, block, 64, block, 96, in0, in1, in2, in3); ++ DUP4_ARG2(__lasx_xvld, block, 0, block, 32, block, 64, block, 96, ++ in0, in1, in2, in3); + in0 = __lasx_xvilvl_d(in1, in0); + in1 = __lasx_xvilvl_d(in3, in2); + temp0 = __lasx_xvpickev_h(in1, in0); +@@ -423,8 +393,8 @@ void ff_vc1_inv_trans_4x8_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + t4 = __lasx_xvsub_w(t1, t2); + t4 = __lasx_xvpermi_d(t4, 0x4E); + +- DUP4_ARG2(__lasx_xvdp2_w_h, temp1, const_9, temp1, const_10, temp1, const_11, +- temp1, const_12, t1, t2, temp2, temp3); ++ DUP4_ARG2(__lasx_xvdp2_w_h, temp1, const_9, temp1, const_10, temp1, ++ const_11, temp1, const_12, t1, t2, temp2, temp3); + + temp0 = __lasx_xvpermi_q(t2, t1, 0x20); + temp1 = __lasx_xvpermi_q(t2, t1, 0x31); +@@ -441,48 +411,33 @@ void ff_vc1_inv_trans_4x8_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + DUP4_ARG2(__lasx_xvsrai_w, temp0, 7, temp1, 7, temp2, 7, temp3, 7, + temp0, temp1, temp2, temp3); + +- const_1 = __lasx_xvldrepl_w(dst, 0); +- dst += stride; +- const_2 = __lasx_xvldrepl_w(dst, 0); +- dst += stride; +- const_3 = __lasx_xvldrepl_w(dst, 0); +- dst += stride; +- const_4 = __lasx_xvldrepl_w(dst, 0); +- dst += stride; +- const_5 = __lasx_xvldrepl_w(dst, 0); +- dst += stride; +- const_6 = __lasx_xvldrepl_w(dst, 0); +- dst += stride; +- const_7 = __lasx_xvldrepl_w(dst, 0); +- dst += stride; +- const_8 = __lasx_xvldrepl_w(dst, 0); +- +- DUP4_ARG2(__lasx_xvilvl_w, const_2, const_1, const_4, const_3, const_5, const_6, +- const_7, const_8, const_1, const_2, const_3, const_4); +- const_1 = __lasx_vext2xv_wu_bu(const_1); +- const_2 = __lasx_vext2xv_wu_bu(const_2); +- const_3 = __lasx_vext2xv_wu_bu(const_3); +- const_4 = __lasx_vext2xv_wu_bu(const_4); +- +- temp0 = __lasx_xvadd_w(temp0, const_1); +- temp1 = __lasx_xvadd_w(temp1, const_2); +- temp2 = __lasx_xvadd_w(temp2, const_3); +- temp3 = __lasx_xvadd_w(temp3, const_4); +- DUP4_ARG1(__lasx_xvclip255_w, temp0, temp1, temp2, temp3, temp0, temp1, temp2, temp3); ++ DUP4_ARG2(__lasx_xvldrepl_w, dest, 0, dest + stride, 0, dest + stride2, 0, ++ dest + stride3, 0, const_1, const_2, const_3, const_4); ++ DUP4_ARG2(__lasx_xvldrepl_w, dst, 0, dst + stride, 0, dst + stride2, 0, ++ dst + stride3, 0, const_5, const_6, const_7, const_8); ++ ++ DUP4_ARG2(__lasx_xvilvl_w, const_2, const_1, const_4, const_3, const_5, ++ const_6, const_7, const_8, const_1, const_2, const_3, const_4); ++ DUP4_ARG1(__lasx_vext2xv_wu_bu, const_1, const_2, const_3, const_4, ++ const_1, const_2, const_3, const_4); ++ DUP4_ARG2(__lasx_xvadd_w, temp0, const_1, temp1, const_2, temp2, const_3, ++ temp3, const_4, temp0, temp1, temp2, temp3); ++ DUP4_ARG1(__lasx_xvclip255_w, temp0, temp1, temp2, temp3, ++ temp0, temp1, temp2, temp3); + DUP2_ARG2(__lasx_xvpickev_h, temp1, temp0, temp3, temp2, temp0, temp1); + temp0 = __lasx_xvpickev_b(temp1, temp0); + __lasx_xvstelm_w(temp0, dest, 0, 0); + __lasx_xvstelm_w(temp0, dest + stride, 0, 4); +- __lasx_xvstelm_w(temp0, dest + stride_2x, 0, 1); +- __lasx_xvstelm_w(temp0, dest + stride_3x, 0, 5); +- dest += stride_4x; +- __lasx_xvstelm_w(temp0, dest, 0, 6); +- __lasx_xvstelm_w(temp0, dest + stride, 0, 2); +- __lasx_xvstelm_w(temp0, dest + stride_2x, 0, 7); +- __lasx_xvstelm_w(temp0, dest + stride_3x, 0, 3); ++ __lasx_xvstelm_w(temp0, dest + stride2, 0, 1); ++ __lasx_xvstelm_w(temp0, dest + stride3, 0, 5); ++ __lasx_xvstelm_w(temp0, dst, 0, 6); ++ __lasx_xvstelm_w(temp0, dst + stride, 0, 2); ++ __lasx_xvstelm_w(temp0, dst + stride2, 0, 7); ++ __lasx_xvstelm_w(temp0, dst + stride3, 0, 3); + } + +-void ff_vc1_inv_trans_4x4_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) ++void ff_vc1_inv_trans_4x4_dc_lasx(uint8_t *dest, ptrdiff_t stride, ++ int16_t *block) + { + int dc = block[0]; + uint8_t *dst1 = dest + stride; +@@ -495,16 +450,13 @@ void ff_vc1_inv_trans_4x4_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *bloc + dc = (17 * dc + 64) >> 7; + const_dc = __lasx_xvreplgr2vr_h(dc); + +- in0 = __lasx_xvldrepl_w(dest, 0); +- in1 = __lasx_xvldrepl_w(dst1, 0); +- in2 = __lasx_xvldrepl_w(dst2, 0); +- in3 = __lasx_xvldrepl_w(dst3, 0); ++ DUP4_ARG2(__lasx_xvldrepl_w, dest, 0, dst1, 0, dst2, 0, dst3, 0, ++ in0, in1, in2, in3); + DUP2_ARG2(__lasx_xvilvl_w, in1, in0, in3, in2, temp0, temp1); + in0 = __lasx_xvpermi_q(temp1, temp0, 0x20); + temp0 = __lasx_xvilvl_b(zero, in0); +- temp0 = __lasx_xvadd_h(temp0, const_dc); +- in0 = __lasx_xvclip255_h(temp0); +- temp0 = __lasx_xvpickev_b(in0, in0); ++ in0 = __lasx_xvadd_h(temp0, const_dc); ++ temp0 = __lasx_xvssrarni_bu_h(in0, in0, 0); + __lasx_xvstelm_w(temp0, dest, 0, 0); + __lasx_xvstelm_w(temp0, dst1, 0, 1); + __lasx_xvstelm_w(temp0, dst2, 0, 4); +@@ -513,15 +465,18 @@ void ff_vc1_inv_trans_4x4_dc_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *bloc + + void ff_vc1_inv_trans_4x4_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + { +- uint8_t *dst = dest + stride; +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_3x = stride_2x + stride; ++ uint8_t *dst1 = dest + stride; ++ uint8_t *dst2 = dst1 + stride; ++ uint8_t *dst3 = dst2 + stride; + __m256i in0, in1, in2, in3; + __m256i temp0, temp1, temp2, temp3, t1, t2; + +- __m256i const_1 = {0x0011001100110011, 0xFFEF0011FFEF0011, 0x0011001100110011, 0xFFEF0011FFEF0011}; +- __m256i const_2 = {0x000A0016000A0016, 0x0016FFF60016FFF6, 0x000A0016000A0016, 0x0016FFF60016FFF6}; +- __m256i const_64 = {0x0000004000000040, 0x0000004000000040, 0x0000004000000040, 0x0000004000000040}; ++ __m256i const_1 = {0x0011001100110011, 0xFFEF0011FFEF0011, ++ 0x0011001100110011, 0xFFEF0011FFEF0011}; ++ __m256i const_2 = {0x000A0016000A0016, 0x0016FFF60016FFF6, ++ 0x000A0016000A0016, 0x0016FFF60016FFF6}; ++ __m256i const_64 = {0x0000004000000040, 0x0000004000000040, ++ 0x0000004000000040, 0x0000004000000040}; + + DUP2_ARG2(__lasx_xvld, block, 0, block, 32, in0, in1); + /* first loops */ +@@ -547,12 +502,8 @@ void ff_vc1_inv_trans_4x4_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + temp0 = __lasx_xvshuf4i_w(in0, 0x9C); + temp1 = __lasx_xvshuf4i_w(in1, 0x9C); + +- in0 = __lasx_xvldrepl_w(dest, 0); +- in1 = __lasx_xvldrepl_w(dst, 0); +- dst += stride; +- in2 = __lasx_xvldrepl_w(dst, 0); +- dst += stride; +- in3 = __lasx_xvldrepl_w(dst, 0); ++ DUP4_ARG2(__lasx_xvldrepl_w, dest, 0, dst1, 0, dst2, 0, dst3, 0, ++ in0, in1, in2, in3); + temp2 = __lasx_xvilvl_w(in2, in0); + temp2 = __lasx_vext2xv_wu_bu(temp2); + temp3 = __lasx_xvilvl_w(in1, in3); +@@ -563,9 +514,9 @@ void ff_vc1_inv_trans_4x4_lasx(uint8_t *dest, ptrdiff_t stride, int16_t *block) + temp1 = __lasx_xvpickev_h(temp1, temp0); + temp0 = __lasx_xvpickev_b(temp1, temp1); + __lasx_xvstelm_w(temp0, dest, 0, 0); +- __lasx_xvstelm_w(temp0, dest + stride, 0, 5); +- __lasx_xvstelm_w(temp0, dest + stride_2x, 0, 4); +- __lasx_xvstelm_w(temp0, dest + stride_3x, 0, 1); ++ __lasx_xvstelm_w(temp0, dst1, 0, 5); ++ __lasx_xvstelm_w(temp0, dst2, 0, 4); ++ __lasx_xvstelm_w(temp0, dst3, 0, 1); + } + + static void put_vc1_mspel_mc_h_v_lasx(uint8_t *dst, const uint8_t *src, +@@ -576,7 +527,8 @@ static void put_vc1_mspel_mc_h_v_lasx(uint8_t *dst, const uint8_t *src, + __m256i t0, t1, t2, t3, t4, t5, t6, t7; + __m256i temp0, temp1, const_para1_2, const_para0_3; + __m256i const_r, const_sh; +- __m256i sh = {0x0000000400000000, 0x0000000500000001, 0x0000000600000002, 0x0000000700000003}; ++ __m256i sh = {0x0000000400000000, 0x0000000500000001, ++ 0x0000000600000002, 0x0000000700000003}; + static const uint8_t para_value[][4] = {{4, 3, 53, 18}, + {1, 1, 9, 9}, + {3, 4, 18, 53}}; +@@ -584,25 +536,23 @@ static void put_vc1_mspel_mc_h_v_lasx(uint8_t *dst, const uint8_t *src, + int shift = (shift_value[hmode] + shift_value[vmode]) >> 1; + int r = (1 << (shift - 1)) + rnd - 1; + const uint8_t *para_v = para_value[vmode - 1]; +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_4x = stride << 2; +- ptrdiff_t stride_3x = stride_2x + stride; ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride4 = stride << 2; ++ ptrdiff_t stride3 = stride2 + stride; + + const_r = __lasx_xvreplgr2vr_h(r); + const_sh = __lasx_xvreplgr2vr_h(shift); + src -= 1, src -= stride; + const_para0_3 = __lasx_xvldrepl_h(para_v, 0); + const_para1_2 = __lasx_xvldrepl_h(para_v, 2); +- DUP4_ARG2(__lasx_xvld, src, 0, src + stride, 0, src + stride_2x, 0, src + stride_3x, +- 0, in0, in1, in2, in3); +- in0 = __lasx_xvpermi_d(in0, 0xD8); +- in1 = __lasx_xvpermi_d(in1, 0xD8); +- in2 = __lasx_xvpermi_d(in2, 0xD8); +- in3 = __lasx_xvpermi_d(in3, 0xD8); ++ DUP4_ARG2(__lasx_xvld, src, 0, src + stride, 0, src + stride2, 0, ++ src + stride3, 0, in0, in1, in2, in3); ++ DUP4_ARG2(__lasx_xvpermi_d, in0, 0xD8, in1, 0xD8, in2, 0xD8, in3, 0xD8, ++ in0, in1, in2, in3); + DUP2_ARG2(__lasx_xvilvl_b, in2, in1, in3, in0, temp0, temp1); + t0 = __lasx_xvdp2_h_bu(temp0, const_para1_2); + t0 = __lasx_xvdp2sub_h_bu(t0, temp1, const_para0_3); +- src += (stride << 2); ++ src += stride4; + in0 = __lasx_xvld(src, 0); + in0 = __lasx_xvpermi_d(in0, 0xD8); + DUP2_ARG2(__lasx_xvilvl_b, in3, in2, in0, in1, temp0, temp1); +@@ -644,19 +594,16 @@ static void put_vc1_mspel_mc_h_v_lasx(uint8_t *dst, const uint8_t *src, + DUP2_ARG2(__lasx_xvilvl_b, in1, in0, in2, in3, temp0, temp1); + t7 = __lasx_xvdp2_h_bu(temp0, const_para1_2); + t7 = __lasx_xvdp2sub_h_bu(t7, temp1, const_para0_3); +- DUP4_ARG2(__lasx_xvadd_h, t0, const_r, t1, const_r, t2, const_r, t3, const_r, +- t0, t1, t2, t3); +- DUP4_ARG2(__lasx_xvadd_h, t4, const_r, t5, const_r, t6, const_r, t7, const_r, +- t4, t5, t6, t7); +- t0 = __lasx_xvsra_h(t0, const_sh); +- t1 = __lasx_xvsra_h(t1, const_sh); +- t2 = __lasx_xvsra_h(t2, const_sh); +- t3 = __lasx_xvsra_h(t3, const_sh); +- t4 = __lasx_xvsra_h(t4, const_sh); +- t5 = __lasx_xvsra_h(t5, const_sh); +- t6 = __lasx_xvsra_h(t6, const_sh); +- t7 = __lasx_xvsra_h(t7, const_sh); +- LASX_TRANSPOSE8x8_H(t0, t1, t2, t3, t4, t5, t6, t7, t0, t1, t2, t3, t4, t5, t6, t7); ++ DUP4_ARG2(__lasx_xvadd_h, t0, const_r, t1, const_r, t2, const_r, t3, ++ const_r, t0, t1, t2, t3); ++ DUP4_ARG2(__lasx_xvadd_h, t4, const_r, t5, const_r, t6, const_r, t7, ++ const_r, t4, t5, t6, t7); ++ DUP4_ARG2(__lasx_xvsra_h, t0, const_sh, t1, const_sh, t2, const_sh, ++ t3, const_sh, t0, t1, t2, t3); ++ DUP4_ARG2(__lasx_xvsra_h, t4, const_sh, t5, const_sh, t6, const_sh, ++ t7, const_sh, t4, t5, t6, t7); ++ LASX_TRANSPOSE8x8_H(t0, t1, t2, t3, t4, t5, t6, t7, t0, ++ t1, t2, t3, t4, t5, t6, t7); + para_v = para_value[hmode - 1]; + const_para0_3 = __lasx_xvldrepl_h(para_v, 0); + const_para1_2 = __lasx_xvldrepl_h(para_v, 2); +@@ -664,16 +611,11 @@ static void put_vc1_mspel_mc_h_v_lasx(uint8_t *dst, const uint8_t *src, + const_para1_2 = __lasx_vext2xv_h_b(const_para1_2); + r = 64 - rnd; + const_r = __lasx_xvreplgr2vr_w(r); +- in0 = __lasx_xvpermi_d(t0, 0x72); +- in1 = __lasx_xvpermi_d(t1, 0x72); +- in2 = __lasx_xvpermi_d(t2, 0x72); +- t0 = __lasx_xvpermi_d(t0, 0xD8); +- t1 = __lasx_xvpermi_d(t1, 0xD8); +- t2 = __lasx_xvpermi_d(t2, 0xD8); +- t3 = __lasx_xvpermi_d(t3, 0xD8); +- t4 = __lasx_xvpermi_d(t4, 0xD8); +- t5 = __lasx_xvpermi_d(t5, 0xD8); +- t6 = __lasx_xvpermi_d(t6, 0xD8); ++ DUP4_ARG2(__lasx_xvpermi_d, t0, 0x72, t1, 0x72, t2, 0x72, t0, 0xD8, ++ in0, in1, in2, t0); ++ DUP4_ARG2(__lasx_xvpermi_d, t1, 0xD8, t2, 0xD8, t3, 0xD8, t4, 0xD8, ++ t1, t2, t3, t4); ++ DUP2_ARG2(__lasx_xvpermi_d, t5, 0xD8, t6, 0xD8, t5, t6); + t7 = __lasx_xvpermi_d(t7, 0xD8); + DUP2_ARG2(__lasx_xvilvl_h, t2, t1, t3, t0, temp0, temp1); + t0 = __lasx_xvdp2_w_h(temp0, const_para1_2); +@@ -699,33 +641,30 @@ static void put_vc1_mspel_mc_h_v_lasx(uint8_t *dst, const uint8_t *src, + DUP2_ARG2(__lasx_xvilvl_h, in1, in0, in2, t7, temp0, temp1); + t7 = __lasx_xvdp2_w_h(temp0, const_para1_2); + t7 = __lasx_xvdp2sub_w_h(t7, temp1, const_para0_3); +- t0 = __lasx_xvadd_w(t0, const_r); +- t1 = __lasx_xvadd_w(t1, const_r); +- t2 = __lasx_xvadd_w(t2, const_r); +- t3 = __lasx_xvadd_w(t3, const_r); +- t4 = __lasx_xvadd_w(t4, const_r); +- t5 = __lasx_xvadd_w(t5, const_r); +- t6 = __lasx_xvadd_w(t6, const_r); +- t7 = __lasx_xvadd_w(t7, const_r); ++ DUP4_ARG2(__lasx_xvadd_w, t0, const_r, t1, const_r, t2, const_r, ++ t3, const_r, t0, t1, t2, t3); ++ DUP4_ARG2(__lasx_xvadd_w, t4, const_r, t5, const_r, t6, const_r, ++ t7, const_r, t4, t5, t6, t7); + DUP4_ARG2(__lasx_xvsrai_w, t0, 7, t1, 7, t2, 7, t3, 7, t0, t1, t2, t3); + DUP4_ARG2(__lasx_xvsrai_w, t4, 7, t5, 7, t6, 7, t7, 7, t4, t5, t6, t7); + LASX_TRANSPOSE8x8_W(t0, t1, t2, t3, t4, t5, t6, t7, + t0, t1, t2, t3, t4, t5, t6, t7); + DUP4_ARG1(__lasx_xvclip255_w, t0, t1, t2, t3, t0, t1, t2, t3); + DUP4_ARG1(__lasx_xvclip255_w, t4, t5, t6, t7, t4, t5, t6, t7); +- DUP4_ARG2(__lasx_xvpickev_h, t1, t0, t3, t2, t5, t4, t7, t6, t0, t1, t2, t3); ++ DUP4_ARG2(__lasx_xvpickev_h, t1, t0, t3, t2, t5, t4, t7, t6, ++ t0, t1, t2, t3); + DUP2_ARG2(__lasx_xvpickev_b, t1, t0, t3, t2, t0, t1); + t0 = __lasx_xvperm_w(t0, sh); + t1 = __lasx_xvperm_w(t1, sh); + __lasx_xvstelm_d(t0, dst, 0, 0); + __lasx_xvstelm_d(t0, dst + stride, 0, 1); +- __lasx_xvstelm_d(t0, dst + stride_2x, 0, 2); +- __lasx_xvstelm_d(t0, dst + stride_3x, 0, 3); +- dst += stride_4x; ++ __lasx_xvstelm_d(t0, dst + stride2, 0, 2); ++ __lasx_xvstelm_d(t0, dst + stride3, 0, 3); ++ dst += stride4; + __lasx_xvstelm_d(t1, dst, 0, 0); + __lasx_xvstelm_d(t1, dst + stride, 0, 1); +- __lasx_xvstelm_d(t1, dst + stride_2x, 0, 2); +- __lasx_xvstelm_d(t1, dst + stride_3x, 0, 3); ++ __lasx_xvstelm_d(t1, dst + stride2, 0, 2); ++ __lasx_xvstelm_d(t1, dst + stride3, 0, 3); + } + + #define PUT_VC1_MSPEL_MC_LASX(hmode, vmode) \ +@@ -783,10 +722,8 @@ void ff_put_no_rnd_vc1_chroma_mc8_lasx(uint8_t *dst /* align 8 */, + + DUP4_ARG1(__lasx_vext2xv_hu_bu, src00, src01, src10, src11, + src00, src01, src10, src11); +- src00 = __lasx_xvmul_h(src00, A); +- src01 = __lasx_xvmul_h(src01, B); +- src10 = __lasx_xvmul_h(src10, C); +- src11 = __lasx_xvmul_h(src11, D); ++ DUP4_ARG2(__lasx_xvmul_h, src00, A, src01, B, src10, C, src11, D, ++ src00, src01, src10, src11); + src00 = __lasx_xvadd_h(src00, src01); + src10 = __lasx_xvadd_h(src10, src11); + src00 = __lasx_xvadd_h(src00, src10); +@@ -876,35 +813,38 @@ static void put_vc1_mspel_mc_h_lasx(uint8_t *dst, const uint8_t *src, + __m256i tmp0_m, tmp1_m, tmp2_m, tmp3_m; + __m256i tmp4_m, tmp5_m, tmp6_m, tmp7_m; + __m256i t0, t1, t2, t3, t4, t5, t6, t7; +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_4x = stride << 2; +- ptrdiff_t stride_3x = stride_2x + stride; ++ ptrdiff_t stride2 = stride << 1; ++ ptrdiff_t stride4 = stride << 2; ++ ptrdiff_t stride3 = stride2 + stride; + static const uint16_t para_value[][2] = {{0x0304, 0x1235}, + {0x0101, 0x0909}, + {0x0403, 0x3512}}; + const uint16_t *para_v = para_value[hmode - 1]; + static const int shift_value[] = {0, 6, 4, 6}; + static int add_value[3]; ++ uint8_t *_src = (uint8_t*)src - 1; + add_value[2] = add_value[0] = 32 - rnd, add_value[1] = 8 - rnd; + + const_r = __lasx_xvreplgr2vr_h(add_value[hmode - 1]); + const_sh = __lasx_xvreplgr2vr_h(shift_value[hmode]); + const_para0_3 = __lasx_xvreplgr2vr_h(*para_v); + const_para1_2 = __lasx_xvreplgr2vr_h(*(para_v + 1)); +- src -= 1; +- +- DUP4_ARG2(__lasx_xvld, src, 0, src + stride, 0, src + stride_2x, 0, +- src + stride_3x, 0, in0, in1, in2, in3); +- src += stride_4x; +- DUP4_ARG2(__lasx_xvld, src, 0, src + stride, 0, src + stride_2x, 0, +- src + stride_3x, 0, in4, in5, in6, in7); +- src += stride_4x; +- DUP4_ARG2(__lasx_xvld, src, 0, src + stride, 0, src + stride_2x, 0, +- src + stride_3x, 0, in8, in9, in10, in11); +- src += stride_4x; +- DUP4_ARG2(__lasx_xvld, src, 0, src + stride, 0, src + stride_2x, 0, +- src + stride_3x, 0, in12, in13, in14, in15); +- src -= stride_4x; ++ ++ in0 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, stride, _src, stride2, in1, in2); ++ in3 = __lasx_xvldx(_src, stride3); ++ _src += stride4; ++ in4 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, stride, _src, stride2, in5, in6); ++ in7 = __lasx_xvldx(_src, stride3); ++ _src += stride4; ++ in8 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, stride, _src, stride2, in9, in10); ++ in11 = __lasx_xvldx(_src, stride3); ++ _src += stride4; ++ in12 = __lasx_xvld(_src, 0); ++ DUP2_ARG2(__lasx_xvldx, _src, stride, _src, stride2, in13, in14); ++ in15 = __lasx_xvldx(_src, stride3); + DUP4_ARG2(__lasx_xvilvl_b, in2, in0, in3, in1, in6, in4, in7, in5, + tmp0_m, tmp1_m, tmp2_m, tmp3_m); + DUP4_ARG2(__lasx_xvilvl_b, in10, in8, in11, in9, in14, in12, in15, in13, +@@ -941,22 +881,14 @@ static void put_vc1_mspel_mc_h_lasx(uint8_t *dst, const uint8_t *src, + DUP2_ARG3(__lasx_xvpermi_q, out0, out0, 0x31, out1, out1, 0x31, out16, out17); + out18 = __lasx_xvpermi_q(out2, out2, 0x31); + +- out0 = __lasx_xvpermi_d(out0, 0xD8); +- out1 = __lasx_xvpermi_d(out1, 0xD8); +- out2 = __lasx_xvpermi_d(out2, 0xD8); +- out3 = __lasx_xvpermi_d(out3, 0xD8); +- out4 = __lasx_xvpermi_d(out4, 0xD8); +- out5 = __lasx_xvpermi_d(out5, 0xD8); +- out6 = __lasx_xvpermi_d(out6, 0xD8); +- out7 = __lasx_xvpermi_d(out7, 0xD8); +- out8 = __lasx_xvpermi_d(out8, 0xD8); +- out9 = __lasx_xvpermi_d(out9, 0xD8); +- out10 = __lasx_xvpermi_d(out10, 0xD8); +- out11 = __lasx_xvpermi_d(out11, 0xD8); +- out12 = __lasx_xvpermi_d(out12, 0xD8); +- out13 = __lasx_xvpermi_d(out13, 0xD8); +- out14 = __lasx_xvpermi_d(out14, 0xD8); +- out15 = __lasx_xvpermi_d(out15, 0xD8); ++ DUP4_ARG2(__lasx_xvpermi_d, out0, 0xD8, out1, 0xD8, out2, 0xD8, out3, 0xD8, ++ out0, out1, out2, out3); ++ DUP4_ARG2(__lasx_xvpermi_d, out4, 0xD8, out5, 0xD8, out6, 0xD8, out7, 0xD8, ++ out4, out5, out6, out7); ++ DUP4_ARG2(__lasx_xvpermi_d, out8, 0xD8, out9, 0xD8, out10, 0xD8, out11, ++ 0xD8, out8, out9, out10, out11); ++ DUP4_ARG2(__lasx_xvpermi_d, out12, 0xD8, out13, 0xD8, out14, 0xD8, out15, ++ 0xD8, out12, out13, out14, out15); + out16 = __lasx_xvpermi_d(out16, 0xD8); + out17 = __lasx_xvpermi_d(out17, 0xD8); + out18 = __lasx_xvpermi_d(out18, 0xD8); +diff --git a/libavcodec/loongarch/videodsp_init.c b/libavcodec/loongarch/videodsp_init.c +index bfe35ad90f..6cbb7763ff 100644 +--- a/libavcodec/loongarch/videodsp_init.c ++++ b/libavcodec/loongarch/videodsp_init.c +@@ -19,9 +19,8 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "config.h" +-#include "libavutil/attributes.h" + #include "libavcodec/videodsp.h" ++#include "libavutil/attributes.h" + + static void prefetch_loongarch(uint8_t *mem, ptrdiff_t stride, int h) + { +diff --git a/libavcodec/loongarch/vp8dsp_init_loongarch.c b/libavcodec/loongarch/vp8dsp_init_loongarch.c +index 7f36fb90c1..63da15b198 100644 +--- a/libavcodec/loongarch/vp8dsp_init_loongarch.c ++++ b/libavcodec/loongarch/vp8dsp_init_loongarch.c +@@ -26,6 +26,7 @@ + + #include "libavutil/loongarch/cpu.h" + #include "libavcodec/vp8dsp.h" ++#include "libavutil/attributes.h" + #include "vp8dsp_loongarch.h" + + #define VP8_MC_LOONGARCH_FUNC(IDX, SIZE) \ +diff --git a/libavcodec/loongarch/vp9_idct_lsx.c b/libavcodec/loongarch/vp9_idct_lsx.c +index b977687237..88805814c6 100644 +--- a/libavcodec/loongarch/vp9_idct_lsx.c ++++ b/libavcodec/loongarch/vp9_idct_lsx.c +@@ -28,42 +28,42 @@ + #define ALLOC_ALIGNED(align) __attribute__ ((aligned(align))) + #define ROUND_POWER_OF_TWO(value, n) (((value) + (1 << ((n) - 1))) >> (n)) + +-static const int32_t cospi_1_64 = 16364; +-static const int32_t cospi_2_64 = 16305; +-static const int32_t cospi_3_64 = 16207; +-static const int32_t cospi_4_64 = 16069; +-static const int32_t cospi_5_64 = 15893; +-static const int32_t cospi_6_64 = 15679; +-static const int32_t cospi_7_64 = 15426; +-static const int32_t cospi_8_64 = 15137; +-static const int32_t cospi_9_64 = 14811; +-static const int32_t cospi_10_64 = 14449; +-static const int32_t cospi_11_64 = 14053; +-static const int32_t cospi_12_64 = 13623; +-static const int32_t cospi_13_64 = 13160; +-static const int32_t cospi_14_64 = 12665; +-static const int32_t cospi_15_64 = 12140; +-static const int32_t cospi_16_64 = 11585; +-static const int32_t cospi_17_64 = 11003; +-static const int32_t cospi_18_64 = 10394; +-static const int32_t cospi_19_64 = 9760; +-static const int32_t cospi_20_64 = 9102; +-static const int32_t cospi_21_64 = 8423; +-static const int32_t cospi_22_64 = 7723; +-static const int32_t cospi_23_64 = 7005; +-static const int32_t cospi_24_64 = 6270; +-static const int32_t cospi_25_64 = 5520; +-static const int32_t cospi_26_64 = 4756; +-static const int32_t cospi_27_64 = 3981; +-static const int32_t cospi_28_64 = 3196; +-static const int32_t cospi_29_64 = 2404; +-static const int32_t cospi_30_64 = 1606; +-static const int32_t cospi_31_64 = 804; +- +-static const int32_t sinpi_1_9 = 5283; +-static const int32_t sinpi_2_9 = 9929; +-static const int32_t sinpi_3_9 = 13377; +-static const int32_t sinpi_4_9 = 15212; ++const int32_t cospi_1_64 = 16364; ++const int32_t cospi_2_64 = 16305; ++const int32_t cospi_3_64 = 16207; ++const int32_t cospi_4_64 = 16069; ++const int32_t cospi_5_64 = 15893; ++const int32_t cospi_6_64 = 15679; ++const int32_t cospi_7_64 = 15426; ++const int32_t cospi_8_64 = 15137; ++const int32_t cospi_9_64 = 14811; ++const int32_t cospi_10_64 = 14449; ++const int32_t cospi_11_64 = 14053; ++const int32_t cospi_12_64 = 13623; ++const int32_t cospi_13_64 = 13160; ++const int32_t cospi_14_64 = 12665; ++const int32_t cospi_15_64 = 12140; ++const int32_t cospi_16_64 = 11585; ++const int32_t cospi_17_64 = 11003; ++const int32_t cospi_18_64 = 10394; ++const int32_t cospi_19_64 = 9760; ++const int32_t cospi_20_64 = 9102; ++const int32_t cospi_21_64 = 8423; ++const int32_t cospi_22_64 = 7723; ++const int32_t cospi_23_64 = 7005; ++const int32_t cospi_24_64 = 6270; ++const int32_t cospi_25_64 = 5520; ++const int32_t cospi_26_64 = 4756; ++const int32_t cospi_27_64 = 3981; ++const int32_t cospi_28_64 = 3196; ++const int32_t cospi_29_64 = 2404; ++const int32_t cospi_30_64 = 1606; ++const int32_t cospi_31_64 = 804; ++ ++const int32_t sinpi_1_9 = 5283; ++const int32_t sinpi_2_9 = 9929; ++const int32_t sinpi_3_9 = 13377; ++const int32_t sinpi_4_9 = 15212; + + #define VP9_DOTP_CONST_PAIR(reg0, reg1, cnst0, cnst1, out0, out1) \ + { \ +@@ -155,28 +155,29 @@ static const int32_t sinpi_4_9 = 15212; + } + + /* multiply and add macro */ +-#define VP9_MADD(inp0, inp1, inp2, inp3, cst0, cst1, cst2, cst3, \ +- out0, out1, out2, out3) \ +-{ \ +- __m128i madd_s0_m, madd_s1_m, madd_s2_m, madd_s3_m; \ +- __m128i tmp0_m, tmp1_m, tmp2_m, tmp3_m; \ +- \ +- madd_s1_m = __lsx_vilvl_h(inp1, inp0); \ +- madd_s0_m = __lsx_vilvh_h(inp1, inp0); \ +- madd_s3_m = __lsx_vilvl_h(inp3, inp2); \ +- madd_s2_m = __lsx_vilvh_h(inp3, inp2); \ +- DUP4_ARG2(__lsx_vdp2_w_h, madd_s1_m, cst0, madd_s0_m, cst0, \ +- madd_s1_m, cst1, madd_s0_m, cst1, tmp0_m, tmp1_m, tmp2_m, tmp3_m);\ +- DUP4_ARG2(__lsx_vsrari_w, tmp0_m, VP9_DCT_CONST_BITS, \ +- tmp1_m, VP9_DCT_CONST_BITS, tmp2_m, VP9_DCT_CONST_BITS, \ +- tmp3_m, VP9_DCT_CONST_BITS, tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ +- DUP2_ARG2(__lsx_vpickev_h, tmp1_m, tmp0_m, tmp3_m, tmp2_m, out0, out1); \ +- DUP4_ARG2(__lsx_vdp2_w_h, madd_s3_m, cst2, madd_s2_m, cst2, \ +- madd_s3_m, cst3, madd_s2_m, cst3, tmp0_m, tmp1_m, tmp2_m, tmp3_m);\ +- DUP4_ARG2(__lsx_vsrari_w, tmp0_m, VP9_DCT_CONST_BITS, \ +- tmp1_m, VP9_DCT_CONST_BITS, tmp2_m, VP9_DCT_CONST_BITS, \ +- tmp3_m, VP9_DCT_CONST_BITS, tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ +- DUP2_ARG2(__lsx_vpickev_h, tmp1_m, tmp0_m, tmp3_m, tmp2_m, out2, out3); \ ++#define VP9_MADD(inp0, inp1, inp2, inp3, cst0, cst1, cst2, cst3, \ ++ out0, out1, out2, out3) \ ++{ \ ++ __m128i madd_s0_m, madd_s1_m, madd_s2_m, madd_s3_m; \ ++ __m128i tmp0_m, tmp1_m, tmp2_m, tmp3_m; \ ++ \ ++ madd_s1_m = __lsx_vilvl_h(inp1, inp0); \ ++ madd_s0_m = __lsx_vilvh_h(inp1, inp0); \ ++ madd_s3_m = __lsx_vilvl_h(inp3, inp2); \ ++ madd_s2_m = __lsx_vilvh_h(inp3, inp2); \ ++ DUP4_ARG2(__lsx_vdp2_w_h, madd_s1_m, cst0, madd_s0_m, cst0, \ ++ madd_s1_m, cst1, madd_s0_m, cst1, tmp0_m, tmp1_m, \ ++ tmp2_m, tmp3_m); \ ++ DUP4_ARG2(__lsx_vsrari_w, tmp0_m, VP9_DCT_CONST_BITS, tmp1_m, \ ++ VP9_DCT_CONST_BITS, tmp2_m, VP9_DCT_CONST_BITS, tmp3_m, \ ++ VP9_DCT_CONST_BITS, tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ ++ DUP2_ARG2(__lsx_vpickev_h, tmp1_m, tmp0_m, tmp3_m, tmp2_m, out0, out1); \ ++ DUP4_ARG2(__lsx_vdp2_w_h, madd_s3_m, cst2, madd_s2_m, cst2, madd_s3_m, \ ++ cst3, madd_s2_m, cst3, tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ ++ DUP4_ARG2(__lsx_vsrari_w, tmp0_m, VP9_DCT_CONST_BITS, \ ++ tmp1_m, VP9_DCT_CONST_BITS, tmp2_m, VP9_DCT_CONST_BITS, \ ++ tmp3_m, VP9_DCT_CONST_BITS, tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ ++ DUP2_ARG2(__lsx_vpickev_h, tmp1_m, tmp0_m, tmp3_m, tmp2_m, out2, out3); \ + } + + #define VP9_SET_CONST_PAIR(mask_h, idx1_h, idx2_h) \ +@@ -255,8 +256,10 @@ static void vp9_idct8x8_12_colcol_addblk_lsx(int16_t *input, uint8_t *dst, + __m128i zero = __lsx_vldi(0); + + /* load vector elements of 8x8 block */ +- DUP4_ARG2(__lsx_vld, input, 0, input, 16, input, 32, input, 48, in0, in1, in2, in3); +- DUP4_ARG2(__lsx_vld, input, 64, input, 80, input, 96, input, 112, in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vld, input, 0, input, 16, input, 32, input, 48, ++ in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vld, input, 64, input, 80, input, 96, input, 112, ++ in4, in5, in6, in7); + __lsx_vst(zero, input, 0); + __lsx_vst(zero, input, 16); + __lsx_vst(zero, input, 32); +@@ -265,7 +268,8 @@ static void vp9_idct8x8_12_colcol_addblk_lsx(int16_t *input, uint8_t *dst, + __lsx_vst(zero, input, 80); + __lsx_vst(zero, input, 96); + __lsx_vst(zero, input, 112); +- DUP4_ARG2(__lsx_vilvl_d,in1, in0, in3, in2, in5, in4, in7, in6, in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vilvl_d,in1, in0, in3, in2, in5, in4, in7, ++ in6, in0, in1, in2, in3); + + /* stage1 */ + DUP2_ARG2(__lsx_vilvh_h, in3, in0, in2, in1, s0, s1); +@@ -273,9 +277,11 @@ static void vp9_idct8x8_12_colcol_addblk_lsx(int16_t *input, uint8_t *dst, + k1 = VP9_SET_COSPI_PAIR(cospi_4_64, cospi_28_64); + k2 = VP9_SET_COSPI_PAIR(-cospi_20_64, cospi_12_64); + k3 = VP9_SET_COSPI_PAIR(cospi_12_64, cospi_20_64); +- DUP4_ARG2(__lsx_vdp2_w_h, s0, k0, s0, k1, s1, k2, s1, k3, tmp0, tmp1, tmp2, tmp3); +- DUP4_ARG2(__lsx_vsrari_w, tmp0, VP9_DCT_CONST_BITS, tmp1, VP9_DCT_CONST_BITS, +- tmp2, VP9_DCT_CONST_BITS, tmp3, VP9_DCT_CONST_BITS, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vdp2_w_h, s0, k0, s0, k1, s1, k2, s1, k3, ++ tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vsrari_w, tmp0, VP9_DCT_CONST_BITS, tmp1, ++ VP9_DCT_CONST_BITS, tmp2, VP9_DCT_CONST_BITS, tmp3, ++ VP9_DCT_CONST_BITS, tmp0, tmp1, tmp2, tmp3); + DUP4_ARG2(__lsx_vpickev_h, zero, tmp0, zero, tmp1, zero, tmp2, zero, tmp3, + s0, s1, s2, s3); + LSX_BUTTERFLY_4_H(s0, s1, s3, s2, s4, s7, s6, s5); +@@ -288,8 +294,9 @@ static void vp9_idct8x8_12_colcol_addblk_lsx(int16_t *input, uint8_t *dst, + k3 = VP9_SET_COSPI_PAIR(cospi_8_64, cospi_24_64); + DUP4_ARG2(__lsx_vdp2_w_h, s0, k0, s0, k1, s1, k2, s1, k3, + tmp0, tmp1, tmp2, tmp3); +- DUP4_ARG2(__lsx_vsrari_w, tmp0, VP9_DCT_CONST_BITS, tmp1, VP9_DCT_CONST_BITS, +- tmp2, VP9_DCT_CONST_BITS, tmp3, VP9_DCT_CONST_BITS, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vsrari_w, tmp0, VP9_DCT_CONST_BITS, tmp1, ++ VP9_DCT_CONST_BITS, tmp2, VP9_DCT_CONST_BITS, tmp3, ++ VP9_DCT_CONST_BITS, tmp0, tmp1, tmp2, tmp3); + DUP4_ARG2(__lsx_vpickev_h, zero, tmp0, zero, tmp1, zero, tmp2, zero, tmp3, + s0, s1, s2, s3); + LSX_BUTTERFLY_4_H(s0, s1, s2, s3, m0, m1, m2, m3); +@@ -312,8 +319,10 @@ static void vp9_idct8x8_12_colcol_addblk_lsx(int16_t *input, uint8_t *dst, + in0, in1, in2, in3, in4, in5, in6, in7); + + /* final rounding (add 2^4, divide by 2^5) and shift */ +- DUP4_ARG2(__lsx_vsrari_h, in0 , 5, in1, 5, in2, 5, in3, 5, in0, in1, in2, in3); +- DUP4_ARG2(__lsx_vsrari_h, in4 , 5, in5, 5, in6, 5, in7, 5, in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vsrari_h, in0 , 5, in1, 5, in2, 5, in3, 5, ++ in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vsrari_h, in4 , 5, in5, 5, in6, 5, in7, 5, ++ in4, in5, in6, in7); + + /* add block and store 8x8 */ + VP9_ADDBLK_ST8x4_UB(dst, dst_stride, in0, in1, in2, in3); +@@ -350,8 +359,10 @@ static void vp9_idct8x8_colcol_addblk_lsx(int16_t *input, uint8_t *dst, + VP9_IDCT8x8_1D(in0, in1, in2, in3, in4, in5, in6, in7, + in0, in1, in2, in3, in4, in5, in6, in7); + /* final rounding (add 2^4, divide by 2^5) and shift */ +- DUP4_ARG2(__lsx_vsrari_h, in0, 5, in1, 5, in2, 5, in3, 5, in0, in1, in2, in3); +- DUP4_ARG2(__lsx_vsrari_h, in4, 5, in5, 5, in6, 5, in7, 5, in4, in5, in6, in7); ++ DUP4_ARG2(__lsx_vsrari_h, in0, 5, in1, 5, in2, 5, in3, 5, ++ in0, in1, in2, in3); ++ DUP4_ARG2(__lsx_vsrari_h, in4, 5, in5, 5, in6, 5, in7, 5, ++ in4, in5, in6, in7); + /* add block and store 8x8 */ + VP9_ADDBLK_ST8x4_UB(dst, dst_stride, in0, in1, in2, in3); + dst += (4 * dst_stride); +@@ -374,8 +385,8 @@ static void vp9_idct16_1d_columns_addblk_lsx(int16_t *input, uint8_t *dst, + reg4, reg5, reg6, reg7); + DUP4_ARG2(__lsx_vld, input, 32*8, input, 32*9, input, 32*10, input, 32*11, + reg8, reg9, reg10, reg11); +- DUP4_ARG2(__lsx_vld, input, 32*12, input, 32*13, input, 32*14, input, 32*15, +- reg12, reg13, reg14, reg15); ++ DUP4_ARG2(__lsx_vld, input, 32*12, input, 32*13, input, 32*14, input, ++ 32*15, reg12, reg13, reg14, reg15); + + __lsx_vst(zero, input, 32*0); + __lsx_vst(zero, input, 32*1); +@@ -499,8 +510,8 @@ static void vp9_idct16_1d_columns_lsx(int16_t *input, int16_t *output) + reg4, reg5, reg6, reg7); + DUP4_ARG2(__lsx_vld, input, 32*8, input, 32*9, input, 32*10, input, 32*11, + reg8, reg9, reg10, reg11); +- DUP4_ARG2(__lsx_vld, input, 32*12, input, 32*13, input, 32*14, input, 32*15, +- reg12, reg13, reg14, reg15); ++ DUP4_ARG2(__lsx_vld, input, 32*12, input, 32*13, input, 32*14, input, ++ 32*15, reg12, reg13, reg14, reg15); + + __lsx_vst(zero, input, 32*0); + __lsx_vst(zero, input, 32*1); +@@ -630,6 +641,9 @@ static void vp9_idct16x16_1_add_lsx(int16_t *input, uint8_t *dst, + int16_t out; + __m128i vec, res0, res1, res2, res3, res4, res5, res6, res7; + __m128i dst0, dst1, dst2, dst3, tmp0, tmp1, tmp2, tmp3; ++ int32_t stride2 = dst_stride << 1; ++ int32_t stride3 = stride2 + dst_stride; ++ int32_t stride4 = stride2 << 1; + + out = ROUND_POWER_OF_TWO((input[0] * cospi_16_64), VP9_DCT_CONST_BITS); + out = ROUND_POWER_OF_TWO((out * cospi_16_64), VP9_DCT_CONST_BITS); +@@ -638,8 +652,9 @@ static void vp9_idct16x16_1_add_lsx(int16_t *input, uint8_t *dst, + vec = __lsx_vreplgr2vr_h(out); + + for (i = 4; i--;) { +- DUP4_ARG2(__lsx_vld, dst, 0, dst + dst_stride, 0, dst + dst_stride * 2, 0, +- dst + dst_stride * 3, 0, dst0, dst1, dst2, dst3); ++ dst0 = __lsx_vld(dst, 0); ++ DUP2_ARG2(__lsx_vldx, dst, dst_stride, dst, stride2, dst1, dst2); ++ dst3 = __lsx_vldx(dst, stride3); + VP9_UNPCK_UB_SH(dst0, res4, res0); + VP9_UNPCK_UB_SH(dst1, res5, res1); + VP9_UNPCK_UB_SH(dst2, res6, res2); +@@ -648,15 +663,17 @@ static void vp9_idct16x16_1_add_lsx(int16_t *input, uint8_t *dst, + res0, res1, res2, res3); + DUP4_ARG2(__lsx_vadd_h, res4, vec, res5, vec, res6, vec, res7, vec, + res4, res5, res6, res7); +- DUP4_ARG1(__lsx_vclip255_h, res0, res1, res2, res3, res0, res1, res2, res3); +- DUP4_ARG1(__lsx_vclip255_h, res4, res5, res6, res7, res4, res5, res6, res7); +- DUP4_ARG2(__lsx_vpickev_b, res4, res0, res5, res1, res6, res2, res7, res3, +- tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG1(__lsx_vclip255_h, res0, res1, res2, res3, ++ res0, res1, res2, res3); ++ DUP4_ARG1(__lsx_vclip255_h, res4, res5, res6, res7, ++ res4, res5, res6, res7); ++ DUP4_ARG2(__lsx_vpickev_b, res4, res0, res5, res1, res6, ++ res2, res7, res3, tmp0, tmp1, tmp2, tmp3); + __lsx_vst(tmp0, dst, 0); +- __lsx_vst(tmp1, dst + dst_stride, 0); +- __lsx_vst(tmp2, dst + dst_stride * 2, 0); +- __lsx_vst(tmp3, dst + dst_stride * 3, 0); +- dst += dst_stride << 2; ++ __lsx_vstx(tmp1, dst, dst_stride); ++ __lsx_vstx(tmp2, dst, stride2); ++ __lsx_vstx(tmp3, dst, stride3); ++ dst += stride4; + } + } + +@@ -1087,7 +1104,8 @@ static void vp9_idct8x32_column_odd_process_store(int16_t *tmp_buf, + DUP4_ARG2(__lsx_vld, tmp_odd_buf, 0, tmp_odd_buf, 16, + tmp_odd_buf, 32, tmp_odd_buf, 48, reg0, reg1, reg2, reg3); + DUP4_ARG2(__lsx_vld, tmp_odd_buf, 8 * 16, tmp_odd_buf, 8 * 16 + 16, +- tmp_odd_buf, 8 * 16 + 32, tmp_odd_buf, 8 * 16 + 48, reg4, reg5, reg6, reg7); ++ tmp_odd_buf, 8 * 16 + 32, tmp_odd_buf, 8 * 16 + 48, ++ reg4, reg5, reg6, reg7); + + DUP4_ARG2(__lsx_vadd_h, reg0, reg4, reg1, reg5, reg2, reg6, reg3, reg7, + loc0, loc1, loc2, loc3); +@@ -1107,9 +1125,11 @@ static void vp9_idct8x32_column_odd_process_store(int16_t *tmp_buf, + + /* Load 8 & Store 8 */ + DUP4_ARG2(__lsx_vld, tmp_odd_buf, 4 * 16, tmp_odd_buf, 4 * 16 + 16, +- tmp_odd_buf, 4 * 16 + 32, tmp_odd_buf, 4 * 16 + 48, reg1, reg2, reg0, reg3); ++ tmp_odd_buf, 4 * 16 + 32, tmp_odd_buf, 4 * 16 + 48, ++ reg1, reg2, reg0, reg3); + DUP4_ARG2(__lsx_vld, tmp_odd_buf, 12 * 16, tmp_odd_buf, 12 * 16 + 16, +- tmp_odd_buf, 12 * 16 + 32, tmp_odd_buf, 12 * 16 + 48, reg4, reg5, reg6, reg7); ++ tmp_odd_buf, 12 * 16 + 32, tmp_odd_buf, 12 * 16 + 48, ++ reg4, reg5, reg6, reg7); + + DUP4_ARG2(__lsx_vadd_h, reg0, reg4, reg1, reg5, reg2, reg6, reg3, reg7, + loc0, loc1, loc2, loc3); +@@ -1252,6 +1272,7 @@ static void vp9_idct32x32_1_add_lsx(int16_t *input, uint8_t *dst, + { + int32_t i; + int16_t out; ++ uint8_t *dst_tmp = dst + dst_stride; + __m128i zero = __lsx_vldi(0); + __m128i dst0, dst1, dst2, dst3, tmp0, tmp1, tmp2, tmp3; + __m128i res0, res1, res2, res3, res4, res5, res6, res7, vec; +@@ -1265,7 +1286,7 @@ static void vp9_idct32x32_1_add_lsx(int16_t *input, uint8_t *dst, + + for (i = 16; i--;) { + DUP2_ARG2(__lsx_vld, dst, 0, dst, 16, dst0, dst1); +- DUP2_ARG2(__lsx_vld, dst + dst_stride, 0, dst + dst_stride, 16, dst2, dst3); ++ DUP2_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp, 16, dst2, dst3); + + DUP4_ARG2(__lsx_vilvl_b, zero, dst0, zero, dst1, zero, dst2, zero, dst3, + res0, res1, res2, res3); +@@ -1282,10 +1303,10 @@ static void vp9_idct32x32_1_add_lsx(int16_t *input, uint8_t *dst, + + __lsx_vst(tmp0, dst, 0); + __lsx_vst(tmp1, dst, 16); +- dst += dst_stride; +- __lsx_vst(tmp2, dst, 0); +- __lsx_vst(tmp3, dst, 16); +- dst += dst_stride; ++ __lsx_vst(tmp2, dst_tmp, 0); ++ __lsx_vst(tmp3, dst_tmp, 16); ++ dst = dst_tmp + dst_stride; ++ dst_tmp = dst + dst_stride; + } + } + +@@ -1388,4 +1409,3 @@ void ff_idct_idct_32x32_add_lsx(uint8_t *dst, ptrdiff_t stride, + vp9_idct32x32_colcol_addblk_lsx(block, dst, stride); + } + } +- +diff --git a/libavcodec/loongarch/vp9_intra_lsx.c b/libavcodec/loongarch/vp9_intra_lsx.c +index b3d4f88158..d3f32646f3 100644 +--- a/libavcodec/loongarch/vp9_intra_lsx.c ++++ b/libavcodec/loongarch/vp9_intra_lsx.c +@@ -24,28 +24,22 @@ + #include "vp9dsp_loongarch.h" + + #define LSX_ST_8(_dst0, _dst1, _dst2, _dst3, _dst4, \ +- _dst5, _dst6, _dst7, _dst, _stride) \ ++ _dst5, _dst6, _dst7, _dst, _stride, \ ++ _stride2, _stride3, _stride4) \ + { \ + __lsx_vst(_dst0, _dst, 0); \ +- _dst += _stride; \ +- __lsx_vst(_dst1, _dst, 0); \ +- _dst += _stride; \ +- __lsx_vst(_dst2, _dst, 0); \ +- _dst += _stride; \ +- __lsx_vst(_dst3, _dst, 0); \ +- _dst += _stride; \ ++ __lsx_vstx(_dst1, _dst, _stride); \ ++ __lsx_vstx(_dst2, _dst, _stride2); \ ++ __lsx_vstx(_dst3, _dst, _stride3); \ ++ _dst += _stride4; \ + __lsx_vst(_dst4, _dst, 0); \ +- _dst += _stride; \ +- __lsx_vst(_dst5, _dst, 0); \ +- _dst += _stride; \ +- __lsx_vst(_dst6, _dst, 0); \ +- _dst += _stride; \ +- __lsx_vst(_dst7, _dst, 0); \ +- _dst += _stride; \ ++ __lsx_vstx(_dst5, _dst, _stride); \ ++ __lsx_vstx(_dst6, _dst, _stride2); \ ++ __lsx_vstx(_dst7, _dst, _stride3); \ + } + + #define LSX_ST_8X16(_dst0, _dst1, _dst2, _dst3, _dst4, \ +- _dst5, _dst6, _dst7, _dst, _stride) \ ++ _dst5, _dst6, _dst7, _dst, _stride) \ + { \ + __lsx_vst(_dst0, _dst, 0); \ + __lsx_vst(_dst0, _dst, 16); \ +@@ -77,10 +71,15 @@ void ff_vert_16x16_lsx(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *left, + const uint8_t *src) + { + __m128i src0; +- ++ ptrdiff_t stride2 = dst_stride << 1; ++ ptrdiff_t stride3 = stride2 + dst_stride; ++ ptrdiff_t stride4 = stride2 << 1; + src0 = __lsx_vld(src, 0); +- LSX_ST_8(src0, src0, src0, src0, src0, src0, src0, src0, dst, dst_stride); +- LSX_ST_8(src0, src0, src0, src0, src0, src0, src0, src0, dst, dst_stride); ++ LSX_ST_8(src0, src0, src0, src0, src0, src0, src0, src0, dst, ++ dst_stride, stride2, stride3, stride4); ++ dst += stride4; ++ LSX_ST_8(src0, src0, src0, src0, src0, src0, src0, src0, dst, ++ dst_stride, stride2, stride3, stride4); + } + + void ff_vert_32x32_lsx(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *left, +@@ -102,6 +101,9 @@ void ff_hor_16x16_lsx(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *src, + { + __m128i src0, src1, src2, src3, src4, src5, src6, src7; + __m128i src8, src9, src10, src11, src12, src13, src14, src15; ++ ptrdiff_t stride2 = dst_stride << 1; ++ ptrdiff_t stride3 = stride2 + dst_stride; ++ ptrdiff_t stride4 = stride2 << 1; + + src15 = __lsx_vldrepl_b(src, 0); + src14 = __lsx_vldrepl_b(src, 1); +@@ -119,8 +121,11 @@ void ff_hor_16x16_lsx(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *src, + src2 = __lsx_vldrepl_b(src, 13); + src1 = __lsx_vldrepl_b(src, 14); + src0 = __lsx_vldrepl_b(src, 15); +- LSX_ST_8(src0, src1, src2, src3, src4, src5, src6, src7, dst, dst_stride); +- LSX_ST_8(src8, src9, src10, src11, src12, src13, src14, src15, dst, dst_stride); ++ LSX_ST_8(src0, src1, src2, src3, src4, src5, src6, src7, dst, ++ dst_stride, stride2, stride3, stride4); ++ dst += stride4; ++ LSX_ST_8(src8, src9, src10, src11, src12, src13, src14, src15, dst, ++ dst_stride, stride2, stride3, stride4); + } + + void ff_hor_32x32_lsx(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *src, +@@ -163,10 +168,14 @@ void ff_hor_32x32_lsx(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *src, + src2 = __lsx_vldrepl_b(src, 29); + src1 = __lsx_vldrepl_b(src, 30); + src0 = __lsx_vldrepl_b(src, 31); +- LSX_ST_8X16(src0, src1, src2, src3, src4, src5, src6, src7, dst, dst_stride); +- LSX_ST_8X16(src8, src9, src10, src11, src12, src13, src14, src15, dst, dst_stride); +- LSX_ST_8X16(src16, src17, src18, src19, src20, src21, src22, src23, dst, dst_stride); +- LSX_ST_8X16(src24, src25, src26, src27, src28, src29, src30, src31, dst, dst_stride); ++ LSX_ST_8X16(src0, src1, src2, src3, src4, src5, src6, src7, ++ dst, dst_stride); ++ LSX_ST_8X16(src8, src9, src10, src11, src12, src13, src14, src15, ++ dst, dst_stride); ++ LSX_ST_8X16(src16, src17, src18, src19, src20, src21, src22, src23, ++ dst, dst_stride); ++ LSX_ST_8X16(src24, src25, src26, src27, src28, src29, src30, src31, ++ dst, dst_stride); + } + + void ff_dc_4x4_lsx(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *src_left, +@@ -282,6 +291,9 @@ void ff_dc_16x16_lsx(uint8_t *dst, ptrdiff_t dst_stride, + const uint8_t *src_left, const uint8_t *src_top) + { + __m128i tmp0, tmp1, dst0; ++ ptrdiff_t stride2 = dst_stride << 1; ++ ptrdiff_t stride3 = stride2 + dst_stride; ++ ptrdiff_t stride4 = stride2 << 1; + + tmp0 = __lsx_vld(src_top, 0); + tmp1 = __lsx_vld(src_left, 0); +@@ -292,8 +304,11 @@ void ff_dc_16x16_lsx(uint8_t *dst, ptrdiff_t dst_stride, + dst0 = __lsx_vhaddw_qu_du(dst0, dst0); + dst0 = __lsx_vsrari_w(dst0, 5); + dst0 = __lsx_vreplvei_b(dst0, 0); +- LSX_ST_8(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride); +- LSX_ST_8(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride); ++ LSX_ST_8(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, ++ dst_stride, stride2, stride3, stride4); ++ dst += stride4; ++ LSX_ST_8(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, ++ dst_stride, stride2, stride3, stride4); + } + + #define INTRA_DC_TL_16X16(dir) \ +@@ -302,6 +317,9 @@ void ff_dc_##dir##_16x16_lsx(uint8_t *dst, ptrdiff_t dst_stride, \ + const uint8_t *top) \ + { \ + __m128i tmp0, dst0; \ ++ ptrdiff_t stride2 = dst_stride << 1; \ ++ ptrdiff_t stride3 = stride2 + dst_stride; \ ++ ptrdiff_t stride4 = stride2 << 1; \ + \ + tmp0 = __lsx_vld(dir, 0); \ + dst0 = __lsx_vhaddw_hu_bu(tmp0, tmp0); \ +@@ -310,8 +328,11 @@ void ff_dc_##dir##_16x16_lsx(uint8_t *dst, ptrdiff_t dst_stride, \ + dst0 = __lsx_vhaddw_qu_du(dst0, dst0); \ + dst0 = __lsx_vsrari_w(dst0, 4); \ + dst0 = __lsx_vreplvei_b(dst0, 0); \ +- LSX_ST_8(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride);\ +- LSX_ST_8(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride);\ ++ LSX_ST_8(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, \ ++ dst_stride, stride2, stride3, stride4); \ ++ dst += stride4; \ ++ LSX_ST_8(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, \ ++ dst_stride, stride2, stride3, stride4); \ + } + + INTRA_DC_TL_16X16(top); +@@ -333,31 +354,39 @@ void ff_dc_32x32_lsx(uint8_t *dst, ptrdiff_t dst_stride, + dst0 = __lsx_vhaddw_qu_du(dst0, dst0); + dst0 = __lsx_vsrari_w(dst0, 6); + dst0 = __lsx_vreplvei_b(dst0, 0); +- LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride); +- LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride); +- LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride); +- LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride); ++ LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, ++ dst, dst_stride); ++ LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, ++ dst, dst_stride); ++ LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, ++ dst, dst_stride); ++ LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, ++ dst, dst_stride); + } + +-#define INTRA_DC_TL_32X32(dir) \ +-void ff_dc_##dir##_32x32_lsx(uint8_t *dst, ptrdiff_t dst_stride, \ +- const uint8_t *left, \ +- const uint8_t *top) \ +-{ \ +- __m128i tmp0, tmp1, dst0; \ +- \ +- DUP2_ARG2(__lsx_vld, dir, 0, dir, 16, tmp0, tmp1); \ +- DUP2_ARG2(__lsx_vhaddw_hu_bu, tmp0, tmp0, tmp1, tmp1, tmp0, tmp1); \ +- dst0 = __lsx_vadd_h(tmp0, tmp1); \ +- dst0 = __lsx_vhaddw_wu_hu(dst0, dst0); \ +- dst0 = __lsx_vhaddw_du_wu(dst0, dst0); \ +- dst0 = __lsx_vhaddw_qu_du(dst0, dst0); \ +- dst0 = __lsx_vsrari_w(dst0, 5); \ +- dst0 = __lsx_vreplvei_b(dst0, 0); \ +- LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride);\ +- LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride);\ +- LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride);\ +- LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst, dst_stride);\ ++#define INTRA_DC_TL_32X32(dir) \ ++void ff_dc_##dir##_32x32_lsx(uint8_t *dst, ptrdiff_t dst_stride, \ ++ const uint8_t *left, \ ++ const uint8_t *top) \ ++{ \ ++ __m128i tmp0, tmp1, dst0; \ ++ \ ++ DUP2_ARG2(__lsx_vld, dir, 0, dir, 16, tmp0, tmp1); \ ++ DUP2_ARG2(__lsx_vhaddw_hu_bu, tmp0, tmp0, tmp1, tmp1, tmp0, tmp1); \ ++ dst0 = __lsx_vadd_h(tmp0, tmp1); \ ++ dst0 = __lsx_vhaddw_wu_hu(dst0, dst0); \ ++ dst0 = __lsx_vhaddw_du_wu(dst0, dst0); \ ++ dst0 = __lsx_vhaddw_qu_du(dst0, dst0); \ ++ dst0 = __lsx_vsrari_w(dst0, 5); \ ++ dst0 = __lsx_vreplvei_b(dst0, 0); \ ++ LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, \ ++ dst, dst_stride); \ ++ LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, \ ++ dst, dst_stride); \ ++ LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, \ ++ dst, dst_stride); \ ++ LSX_ST_8X16(dst0, dst0, dst0, dst0, dst0, dst0, dst0, dst0, \ ++ dst, dst_stride); \ + } + + INTRA_DC_TL_32X32(top); +@@ -368,9 +397,15 @@ void ff_dc_##val##_16x16_lsx(uint8_t *dst, ptrdiff_t dst_stride, \ + const uint8_t *left, const uint8_t *top) \ + { \ + __m128i out = __lsx_vldi(val); \ ++ ptrdiff_t stride2 = dst_stride << 1; \ ++ ptrdiff_t stride3 = stride2 + dst_stride; \ ++ ptrdiff_t stride4 = stride2 << 1; \ + \ +- LSX_ST_8(out, out, out, out, out, out, out, out, dst, dst_stride); \ +- LSX_ST_8(out, out, out, out, out, out, out, out, dst, dst_stride); \ ++ LSX_ST_8(out, out, out, out, out, out, out, out, dst, \ ++ dst_stride, stride2, stride3, stride4); \ ++ dst += stride4; \ ++ LSX_ST_8(out, out, out, out, out, out, out, out, dst, \ ++ dst_stride, stride2, stride3, stride4); \ + } + + INTRA_PREDICT_VALDC_16X16_LSX(127); +@@ -449,8 +484,10 @@ void ff_tm_8x8_lsx(uint8_t *dst, ptrdiff_t dst_stride, + src0, src1, src2, src3); + DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, + src4, src5, src6, src7); +- DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, src0, src1, src2, src3); +- DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, ++ src4, src5, src6, src7); + DUP4_ARG2(__lsx_vpickev_b, src1, src0, src3, src2, src5, src4, src7, src6, + src0, src1, src2, src3); + __lsx_vstelm_d(src0, dst, 0, 0); +@@ -478,6 +515,9 @@ void ff_tm_16x16_lsx(uint8_t *dst, ptrdiff_t dst_stride, + __m128i tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15; + __m128i src0, src1, src2, src3, src4, src5, src6, src7; + __m128i reg0, reg1; ++ ptrdiff_t stride2 = dst_stride << 1; ++ ptrdiff_t stride3 = stride2 + dst_stride; ++ ptrdiff_t stride4 = stride2 << 1; + + reg0 = __lsx_vreplgr2vr_h(top_left); + reg1 = __lsx_vld(src_top_ptr, 0); +@@ -485,26 +525,28 @@ void ff_tm_16x16_lsx(uint8_t *dst, ptrdiff_t dst_stride, + 3, tmp15, tmp14, tmp13, tmp12); + DUP4_ARG2(__lsx_vldrepl_b, src_left, 4, src_left, 5, src_left, 6, src_left, + 7, tmp11, tmp10, tmp9, tmp8); +- DUP4_ARG2(__lsx_vldrepl_b, src_left, 8, src_left, 9, src_left, 10, src_left, +- 11, tmp7, tmp6, tmp5, tmp4); +- DUP4_ARG2(__lsx_vldrepl_b, src_left, 12, src_left, 13, src_left, 14, src_left, +- 15, tmp3, tmp2, tmp1, tmp0); +- DUP4_ARG2(__lsx_vaddwev_h_bu, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, reg1, +- src0, src1, src2, src3); +- DUP4_ARG2(__lsx_vaddwod_h_bu, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, reg1, +- src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vldrepl_b, src_left, 8, src_left, 9, src_left, 10, ++ src_left, 11, tmp7, tmp6, tmp5, tmp4); ++ DUP4_ARG2(__lsx_vldrepl_b, src_left, 12, src_left, 13, src_left, 14, ++ src_left, 15, tmp3, tmp2, tmp1, tmp0); ++ DUP4_ARG2(__lsx_vaddwev_h_bu, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, ++ reg1, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vaddwod_h_bu, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, ++ reg1, src4, src5, src6, src7); + DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, + src0, src1, src2, src3); + DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, + src4, src5, src6, src7); +- DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, src0, src1, src2, src3); +- DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, src4, src5, src6, src7); +- DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, src3, +- tmp0, tmp1, tmp2, tmp3); +- DUP4_ARG2(__lsx_vaddwev_h_bu, tmp4, reg1, tmp5, reg1, tmp6, reg1, tmp7, reg1, ++ DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, + src0, src1, src2, src3); +- DUP4_ARG2(__lsx_vaddwod_h_bu, tmp4, reg1, tmp5, reg1, tmp6, reg1, tmp7, reg1, ++ DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, + src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, src3, ++ tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vaddwev_h_bu, tmp4, reg1, tmp5, reg1, tmp6, reg1, tmp7, ++ reg1, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vaddwod_h_bu, tmp4, reg1, tmp5, reg1, tmp6, reg1, tmp7, ++ reg1, src4, src5, src6, src7); + DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, + src0, src1, src2, src3); + DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, +@@ -515,32 +557,39 @@ void ff_tm_16x16_lsx(uint8_t *dst, ptrdiff_t dst_stride, + src4, src5, src6, src7); + DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, src3, + tmp4, tmp5, tmp6, tmp7); +- DUP4_ARG2(__lsx_vaddwev_h_bu, tmp8, reg1, tmp9, reg1, tmp10, reg1, tmp11, reg1, +- src0, src1, src2, src3); +- DUP4_ARG2(__lsx_vaddwod_h_bu, tmp8, reg1, tmp9, reg1, tmp10, reg1, tmp11, reg1, +- src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vaddwev_h_bu, tmp8, reg1, tmp9, reg1, tmp10, reg1, tmp11, ++ reg1, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vaddwod_h_bu, tmp8, reg1, tmp9, reg1, tmp10, reg1, tmp11, ++ reg1, src4, src5, src6, src7); + DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, + src0, src1, src2, src3); + DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, + src4, src5, src6, src7); +- DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, src0, src1, src2, src3); +- DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, src4, src5, src6, src7); +- DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, src3, +- tmp8, tmp9, tmp10, tmp11); +- DUP4_ARG2(__lsx_vaddwev_h_bu, tmp12, reg1, tmp13, reg1, tmp14, reg1, tmp15, reg1, ++ DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, + src0, src1, src2, src3); +- DUP4_ARG2(__lsx_vaddwod_h_bu, tmp12, reg1, tmp13, reg1, tmp14, reg1, tmp15, reg1, ++ DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, + src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, src3, ++ tmp8, tmp9, tmp10, tmp11); ++ DUP4_ARG2(__lsx_vaddwev_h_bu, tmp12, reg1, tmp13, reg1, tmp14, reg1, ++ tmp15, reg1, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vaddwod_h_bu, tmp12, reg1, tmp13, reg1, tmp14, reg1, ++ tmp15, reg1, src4, src5, src6, src7); + DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, + src0, src1, src2, src3); + DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, + src4, src5, src6, src7); +- DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, src0, src1, src2, src3); +- DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, ++ src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, ++ src4, src5, src6, src7); + DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, src3, + tmp12, tmp13, tmp14, tmp15); +- LSX_ST_8(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, dst, dst_stride); +- LSX_ST_8(tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, dst, dst_stride); ++ LSX_ST_8(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, dst, ++ dst_stride, stride2, stride3, stride4); ++ dst += stride4; ++ LSX_ST_8(tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, dst, ++ dst_stride, stride2, stride3, stride4); + } + + void ff_tm_32x32_lsx(uint8_t *dst, ptrdiff_t dst_stride, +@@ -557,25 +606,25 @@ void ff_tm_32x32_lsx(uint8_t *dst, ptrdiff_t dst_stride, + + src_left += 28; + for (loop_cnt = 8; loop_cnt--;) { +- DUP4_ARG2(__lsx_vldrepl_b, src_left, 0, src_left, 1, src_left, 2, src_left, 3, +- tmp3, tmp2, tmp1, tmp0); ++ DUP4_ARG2(__lsx_vldrepl_b, src_left, 0, src_left, 1, src_left, 2, ++ src_left, 3, tmp3, tmp2, tmp1, tmp0); + src_left -= 4; +- DUP4_ARG2(__lsx_vaddwev_h_bu, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, reg1, +- src0, src1, src2, src3); +- DUP4_ARG2(__lsx_vaddwod_h_bu, tmp0, reg1, tmp1, reg1, tmp2, reg1, tmp3, reg1, +- src4, src5, src6, src7); +- DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, reg0, +- src0, src1, src2, src3); +- DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, reg0, +- src4, src5, src6, src7); +- DUP4_ARG2(__lsx_vaddwev_h_bu, tmp0, reg2, tmp1, reg2, tmp2, reg2, tmp3, reg2, +- dst0, dst1, dst2, dst3); +- DUP4_ARG2(__lsx_vaddwod_h_bu, tmp0, reg2, tmp1, reg2, tmp2, reg2, tmp3, reg2, +- dst4, dst5, dst6, dst7); +- DUP4_ARG2(__lsx_vssub_hu, dst0, reg0, dst1, reg0, dst2, reg0, dst3, reg0, +- dst0, dst1, dst2, dst3); +- DUP4_ARG2(__lsx_vssub_hu, dst4, reg0, dst5, reg0, dst6, reg0, dst7, reg0, +- dst4, dst5, dst6, dst7); ++ DUP4_ARG2(__lsx_vaddwev_h_bu, tmp0, reg1, tmp1, reg1, tmp2, reg1, ++ tmp3, reg1, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vaddwod_h_bu, tmp0, reg1, tmp1, reg1, tmp2, reg1, ++ tmp3, reg1, src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vssub_hu, src0, reg0, src1, reg0, src2, reg0, src3, ++ reg0, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vssub_hu, src4, reg0, src5, reg0, src6, reg0, src7, ++ reg0, src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vaddwev_h_bu, tmp0, reg2, tmp1, reg2, tmp2, reg2, ++ tmp3, reg2, dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vaddwod_h_bu, tmp0, reg2, tmp1, reg2, tmp2, reg2, ++ tmp3, reg2, dst4, dst5, dst6, dst7); ++ DUP4_ARG2(__lsx_vssub_hu, dst0, reg0, dst1, reg0, dst2, reg0, dst3, ++ reg0, dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vssub_hu, dst4, reg0, dst5, reg0, dst6, reg0, dst7, ++ reg0, dst4, dst5, dst6, dst7); + DUP4_ARG2(__lsx_vsat_hu, src0, 7, src1, 7, src2, 7, src3, 7, + src0, src1, src2, src3); + DUP4_ARG2(__lsx_vsat_hu, src4, 7, src5, 7, src6, 7, src7, 7, +@@ -584,10 +633,10 @@ void ff_tm_32x32_lsx(uint8_t *dst, ptrdiff_t dst_stride, + dst0, dst1, dst2, dst3); + DUP4_ARG2(__lsx_vsat_hu, dst4, 7, dst5, 7, dst6, 7, dst7, 7, + dst4, dst5, dst6, dst7); +- DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, src3, +- src0, src1, src2, src3); +- DUP4_ARG2(__lsx_vpackev_b, dst4, dst0, dst5, dst1, dst6, dst2, dst7, dst3, +- dst0, dst1, dst2, dst3); ++ DUP4_ARG2(__lsx_vpackev_b, src4, src0, src5, src1, src6, src2, src7, ++ src3, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vpackev_b, dst4, dst0, dst5, dst1, dst6, dst2, dst7, ++ dst3, dst0, dst1, dst2, dst3); + __lsx_vst(src0, dst, 0); + __lsx_vst(dst0, dst, 16); + dst += dst_stride; +diff --git a/libavcodec/loongarch/vp9_lpf_lsx.c b/libavcodec/loongarch/vp9_lpf_lsx.c +index 58619e6950..8e1915b888 100644 +--- a/libavcodec/loongarch/vp9_lpf_lsx.c ++++ b/libavcodec/loongarch/vp9_lpf_lsx.c +@@ -24,43 +24,32 @@ + #include "libavutil/common.h" + #include "vp9dsp_loongarch.h" + +-#define LSX_LD_8(_src, _stride, _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7) \ ++#define LSX_LD_8(_src, _stride, _stride2, _stride3, _stride4, _in0, _in1, _in2, \ ++ _in3, _in4, _in5, _in6, _in7) \ + { \ + _in0 = __lsx_vld(_src, 0); \ +- _src += _stride; \ +- _in1 = __lsx_vld(_src, 0); \ +- _src += _stride; \ +- _in2 = __lsx_vld(_src, 0); \ +- _src += _stride; \ +- _in3 = __lsx_vld(_src, 0); \ +- _src += _stride; \ ++ _in1 = __lsx_vldx(_src, _stride); \ ++ _in2 = __lsx_vldx(_src, _stride2); \ ++ _in3 = __lsx_vldx(_src, _stride3); \ ++ _src += _stride4; \ + _in4 = __lsx_vld(_src, 0); \ +- _src += _stride; \ +- _in5 = __lsx_vld(_src, 0); \ +- _src += _stride; \ +- _in6 = __lsx_vld(_src, 0); \ +- _src += _stride; \ +- _in7 = __lsx_vld(_src, 0); \ ++ _in5 = __lsx_vldx(_src, _stride); \ ++ _in6 = __lsx_vldx(_src, _stride2); \ ++ _in7 = __lsx_vldx(_src, _stride3); \ + } + +-#define LSX_ST_8(_dst0, _dst1, _dst2, _dst3, _dst4, _dst5, \ +- _dst6, _dst7, _dst, _stride) \ ++#define LSX_ST_8(_dst0, _dst1, _dst2, _dst3, _dst4, _dst5, _dst6, _dst7, \ ++ _dst, _stride, _stride2, _stride3, _stride4) \ + { \ + __lsx_vst(_dst0, _dst, 0); \ +- _dst += _stride; \ +- __lsx_vst(_dst1, _dst, 0); \ +- _dst += _stride; \ +- __lsx_vst(_dst2, _dst, 0); \ +- _dst += _stride; \ +- __lsx_vst(_dst3, _dst, 0); \ +- _dst += _stride; \ ++ __lsx_vstx(_dst1, _dst, _stride); \ ++ __lsx_vstx(_dst2, _dst, _stride2); \ ++ __lsx_vstx(_dst3, _dst, _stride3); \ ++ _dst += _stride4; \ + __lsx_vst(_dst4, _dst, 0); \ +- _dst += _stride; \ +- __lsx_vst(_dst5, _dst, 0); \ +- _dst += _stride; \ +- __lsx_vst(_dst6, _dst, 0); \ +- _dst += _stride; \ +- __lsx_vst(_dst7, _dst, 0); \ ++ __lsx_vstx(_dst5, _dst, _stride); \ ++ __lsx_vstx(_dst6, _dst, _stride2); \ ++ __lsx_vstx(_dst7, _dst, _stride3); \ + } + + #define VP9_LPF_FILTER4_4W(p1_src, p0_src, q0_src, q1_src, mask_src, hev_src, \ +@@ -248,10 +237,11 @@ void ff_loop_filter_v_4_8_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i mask, hev, flat, thresh, b_limit, limit; + __m128i p3, p2, p1, p0, q3, q2, q1, q0, p1_out, p0_out, q0_out, q1_out; + +- DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, +- dst - stride, 0, p3, p2, p1, p0); +- DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, +- dst + stride3, 0, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vldx, dst, -stride4, dst, -stride3, dst, -stride2, ++ dst, -stride, p3, p2, p1, p0); ++ q0 = __lsx_vld(dst, 0); ++ DUP2_ARG2(__lsx_vldx, dst, stride, dst, stride2, q1, q2); ++ q3 = __lsx_vldx(dst, stride3); + + thresh = __lsx_vreplgr2vr_b(thresh_ptr); + b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); +@@ -281,10 +271,11 @@ void ff_loop_filter_v_44_16_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i limit0, thresh1, b_limit1, limit1; + __m128i p3, p2, p1, p0, q3, q2, q1, q0; + +- DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, +- dst - stride, 0, p3, p2, p1, p0); +- DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, +- dst + stride3, 0, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vldx, dst, -stride4, dst, -stride3, dst, -stride2, ++ dst, -stride, p3, p2, p1, p0); ++ q0 = __lsx_vld(dst, 0); ++ DUP2_ARG2(__lsx_vldx, dst, stride, dst, stride2, q1, q2); ++ q3 = __lsx_vldx(dst, stride3); + + thresh0 = __lsx_vreplgr2vr_b(thresh_ptr); + thresh1 = __lsx_vreplgr2vr_b(thresh_ptr >> 8); +@@ -324,10 +315,11 @@ void ff_loop_filter_v_8_8_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i p3_l, p2_l, p1_l, p0_l, q3_l, q2_l, q1_l, q0_l; + __m128i zero = __lsx_vldi(0); + +- DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, +- dst - stride, 0, p3, p2, p1, p0); +- DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, +- dst + stride3, 0, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vldx, dst, -stride4, dst, -stride3, dst, -stride2, ++ dst, -stride, p3, p2, p1, p0); ++ q0 = __lsx_vld(dst, 0); ++ DUP2_ARG2(__lsx_vldx, dst, stride, dst, stride2, q1, q2); ++ q3 = __lsx_vldx(dst, stride3); + + thresh = __lsx_vreplgr2vr_b(thresh_ptr); + b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); +@@ -399,10 +391,11 @@ void ff_loop_filter_v_88_16_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i zero = __lsx_vldi(0); + + /* load vector elements */ +- DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, +- dst - stride, 0, p3, p2, p1, p0); +- DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, +- dst + stride3, 0, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vldx, dst, -stride4, dst, -stride3, dst, -stride2, ++ dst, -stride, p3, p2, p1, p0); ++ q0 = __lsx_vld(dst, 0); ++ DUP2_ARG2(__lsx_vldx, dst, stride, dst, stride2, q1, q2); ++ q3 = __lsx_vldx(dst, stride3); + + thresh = __lsx_vreplgr2vr_b(thresh_ptr); + tmp = __lsx_vreplgr2vr_b(thresh_ptr >> 8); +@@ -445,11 +438,11 @@ void ff_loop_filter_v_88_16_lsx(uint8_t *dst, ptrdiff_t stride, + p1_filt8_h, p0_filt8_h, q0_filt8_h, q1_filt8_h, q2_filt8_h); + + /* convert 16 bit output data into 8 bit */ +- DUP4_ARG2(__lsx_vpickev_b, p2_filt8_h, p2_filt8_l, p1_filt8_h, p1_filt8_l, +- p0_filt8_h, p0_filt8_l, q0_filt8_h, q0_filt8_l, p2_filt8_l, +- p1_filt8_l, p0_filt8_l, q0_filt8_l); +- DUP2_ARG2(__lsx_vpickev_b, q1_filt8_h, q1_filt8_l, q2_filt8_h, q2_filt8_l, +- q1_filt8_l, q2_filt8_l); ++ DUP4_ARG2(__lsx_vpickev_b, p2_filt8_h, p2_filt8_l, p1_filt8_h, ++ p1_filt8_l, p0_filt8_h, p0_filt8_l, q0_filt8_h, q0_filt8_l, ++ p2_filt8_l, p1_filt8_l, p0_filt8_l, q0_filt8_l); ++ DUP2_ARG2(__lsx_vpickev_b, q1_filt8_h, q1_filt8_l, q2_filt8_h, ++ q2_filt8_l, q1_filt8_l, q2_filt8_l); + + /* store pixel values */ + p2_out = __lsx_vbitsel_v(p2, p2_filt8_l, flat); +@@ -460,12 +453,12 @@ void ff_loop_filter_v_88_16_lsx(uint8_t *dst, ptrdiff_t stride, + q2_out = __lsx_vbitsel_v(q2, q2_filt8_l, flat); + + +- __lsx_vst(p2_out, dst - stride3, 0); +- __lsx_vst(p1_out, dst - stride2, 0); +- __lsx_vst(p0_out, dst - stride, 0); ++ __lsx_vstx(p2_out, dst, -stride3); ++ __lsx_vstx(p1_out, dst, -stride2); ++ __lsx_vstx(p0_out, dst, -stride); + __lsx_vst(q0_out, dst, 0); +- __lsx_vst(q1_out, dst + stride, 0); +- __lsx_vst(q2_out, dst + stride2, 0); ++ __lsx_vstx(q1_out, dst, stride); ++ __lsx_vstx(q2_out, dst, stride2); + } + } + +@@ -486,10 +479,11 @@ void ff_loop_filter_v_84_16_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i zero = __lsx_vldi(0); + + /* load vector elements */ +- DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, +- dst - stride, 0, p3, p2, p1, p0); +- DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, +- dst + stride3, 0, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vldx, dst, -stride4, dst, -stride3, dst, -stride2, ++ dst, -stride, p3, p2, p1, p0); ++ q0 = __lsx_vld(dst, 0); ++ DUP2_ARG2(__lsx_vldx, dst, stride, dst, stride2, q1, q2); ++ q3 = __lsx_vldx(dst, stride3); + + thresh = __lsx_vreplgr2vr_b(thresh_ptr); + tmp = __lsx_vreplgr2vr_b(thresh_ptr >> 8); +@@ -514,10 +508,10 @@ void ff_loop_filter_v_84_16_lsx(uint8_t *dst, ptrdiff_t stride, + + /* if flat is zero for all pixels, then no need to calculate other filter */ + if (__lsx_bz_v(flat)) { +- __lsx_vst(p1_out, dst - stride2, 0); +- __lsx_vst(p0_out, dst - stride, 0); ++ __lsx_vstx(p1_out, dst, -stride2); ++ __lsx_vstx(p0_out, dst, -stride); + __lsx_vst(q0_out, dst, 0); +- __lsx_vst(q1_out, dst + stride, 0); ++ __lsx_vstx(q1_out, dst, stride); + } else { + DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, + p3_l, p2_l, p1_l, p0_l); +@@ -527,11 +521,11 @@ void ff_loop_filter_v_84_16_lsx(uint8_t *dst, ptrdiff_t stride, + p1_filt8_l, p0_filt8_l, q0_filt8_l, q1_filt8_l, q2_filt8_l); + + /* convert 16 bit output data into 8 bit */ +- DUP4_ARG2(__lsx_vpickev_b, p2_filt8_l, p2_filt8_l, p1_filt8_l, p1_filt8_l, +- p0_filt8_l, p0_filt8_l, q0_filt8_l, q0_filt8_l, p2_filt8_l, p1_filt8_l, +- p0_filt8_l, q0_filt8_l); +- DUP2_ARG2(__lsx_vpickev_b, q1_filt8_l, q1_filt8_l, q2_filt8_l, q2_filt8_l, +- q1_filt8_l, q2_filt8_l); ++ DUP4_ARG2(__lsx_vpickev_b, p2_filt8_l, p2_filt8_l, p1_filt8_l, ++ p1_filt8_l, p0_filt8_l, p0_filt8_l, q0_filt8_l, q0_filt8_l, ++ p2_filt8_l, p1_filt8_l, p0_filt8_l, q0_filt8_l); ++ DUP2_ARG2(__lsx_vpickev_b, q1_filt8_l, q1_filt8_l, q2_filt8_l, ++ q2_filt8_l, q1_filt8_l, q2_filt8_l); + + /* store pixel values */ + p2_out = __lsx_vbitsel_v(p2, p2_filt8_l, flat); +@@ -541,12 +535,12 @@ void ff_loop_filter_v_84_16_lsx(uint8_t *dst, ptrdiff_t stride, + q1_out = __lsx_vbitsel_v(q1_out, q1_filt8_l, flat); + q2_out = __lsx_vbitsel_v(q2, q2_filt8_l, flat); + +- __lsx_vst(p2_out, dst - stride3, 0); +- __lsx_vst(p1_out, dst - stride2, 0); +- __lsx_vst(p0_out, dst - stride, 0); ++ __lsx_vstx(p2_out, dst, -stride3); ++ __lsx_vstx(p1_out, dst, -stride2); ++ __lsx_vstx(p0_out, dst, -stride); + __lsx_vst(q0_out, dst, 0); +- __lsx_vst(q1_out, dst + stride, 0); +- __lsx_vst(q2_out, dst + stride2, 0); ++ __lsx_vstx(q1_out, dst, stride); ++ __lsx_vstx(q2_out, dst, stride2); + } + } + +@@ -567,10 +561,11 @@ void ff_loop_filter_v_48_16_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i zero = { 0 }; + + /* load vector elements */ +- DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, +- dst - stride, 0, p3, p2, p1, p0); +- DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, +- dst + stride3, 0, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vldx, dst, -stride4, dst, -stride3, dst, -stride2, ++ dst, -stride, p3, p2, p1, p0); ++ q0 = __lsx_vld(dst, 0); ++ DUP2_ARG2(__lsx_vldx, dst, stride, dst, stride2, q1, q2); ++ q3 = __lsx_vldx(dst, stride3); + + thresh = __lsx_vreplgr2vr_b(thresh_ptr); + tmp = __lsx_vreplgr2vr_b(thresh_ptr >> 8); +@@ -595,10 +590,10 @@ void ff_loop_filter_v_48_16_lsx(uint8_t *dst, ptrdiff_t stride, + + /* if flat is zero for all pixels, then no need to calculate other filter */ + if (__lsx_bz_v(flat)) { +- __lsx_vst(p1_out, dst - stride2, 0); +- __lsx_vst(p0_out, dst - stride, 0); ++ __lsx_vstx(p1_out, dst, -stride2); ++ __lsx_vstx(p0_out, dst, -stride); + __lsx_vst(q0_out, dst, 0); +- __lsx_vst(q1_out, dst + stride, 0); ++ __lsx_vstx(q1_out, dst, stride); + } else { + DUP4_ARG2(__lsx_vilvh_b, zero, p3, zero, p2, zero, p1, zero, p0, + p3_h, p2_h, p1_h, p0_h); +@@ -622,12 +617,12 @@ void ff_loop_filter_v_48_16_lsx(uint8_t *dst, ptrdiff_t stride, + q1_out = __lsx_vbitsel_v(q1_out, q1_filt8_h, flat); + q2_out = __lsx_vbitsel_v(q2, q2_filt8_h, flat); + +- __lsx_vst(p2_out, dst - stride3, 0); +- __lsx_vst(p1_out, dst - stride2, 0); +- __lsx_vst(p0_out, dst - stride, 0); ++ __lsx_vstx(p2_out, dst, -stride3); ++ __lsx_vstx(p1_out, dst, -stride2); ++ __lsx_vstx(p0_out, dst, -stride); + __lsx_vst(q0_out, dst, 0); +- __lsx_vst(q1_out, dst + stride, 0); +- __lsx_vst(q2_out, dst + stride2, 0); ++ __lsx_vstx(q1_out, dst, stride); ++ __lsx_vstx(q2_out, dst, stride2); + } + } + +@@ -652,10 +647,11 @@ static int32_t vp9_hz_lpf_t4_and_t8_16w(uint8_t *dst, ptrdiff_t stride, + __m128i zero = __lsx_vldi(0); + + /* load vector elements */ +- DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, +- dst - stride, 0, p3, p2, p1, p0); +- DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, +- dst + stride3, 0, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vldx, dst, -stride4, dst, -stride3, dst, -stride2, ++ dst, -stride, p3, p2, p1, p0); ++ q0 = __lsx_vld(dst, 0); ++ DUP2_ARG2(__lsx_vldx, dst, stride, dst, stride2, q1, q2); ++ q3 = __lsx_vldx(dst, stride3); + + thresh = __lsx_vreplgr2vr_b(thresh_ptr); + b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); +@@ -670,10 +666,10 @@ static int32_t vp9_hz_lpf_t4_and_t8_16w(uint8_t *dst, ptrdiff_t stride, + + /* if flat is zero for all pixels, then no need to calculate other filter */ + if (__lsx_bz_v(flat)) { +- __lsx_vst(p1_out, dst - stride2, 0); +- __lsx_vst(p0_out, dst - stride, 0); ++ __lsx_vstx(p1_out, dst, -stride2); ++ __lsx_vstx(p0_out, dst, -stride); + __lsx_vst(q0_out, dst, 0); +- __lsx_vst(q1_out, dst + stride, 0); ++ __lsx_vstx(q1_out, dst, stride); + return 1; + } else { + DUP4_ARG2(__lsx_vilvl_b, zero, p3, zero, p2, zero, p1, zero, p0, +@@ -717,7 +713,8 @@ static int32_t vp9_hz_lpf_t4_and_t8_16w(uint8_t *dst, ptrdiff_t stride, + } + } + +-static void vp9_hz_lpf_t16_16w(uint8_t *dst, ptrdiff_t stride, uint8_t *filter48) ++static void vp9_hz_lpf_t16_16w(uint8_t *dst, ptrdiff_t stride, ++ uint8_t *filter48) + { + ptrdiff_t stride2 = stride << 1; + ptrdiff_t stride3 = stride2 + stride; +@@ -740,14 +737,19 @@ static void vp9_hz_lpf_t16_16w(uint8_t *dst, ptrdiff_t stride, uint8_t *filter48 + + flat = __lsx_vld(filter48, 96); + +- DUP4_ARG2(__lsx_vld, dst_tmp - stride4, 0, dst_tmp - stride3, 0, +- dst_tmp - stride2, 0, dst_tmp - stride, 0, p7, p6, p5, p4); +- DUP4_ARG2(__lsx_vld, dst_tmp, 0, dst_tmp + stride, 0, dst_tmp + stride2, 0, +- dst_tmp + stride3, 0, p3, p2, p1, p0); +- DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, dst + stride3, +- 0, q0, q1, q2, q3); +- DUP4_ARG2(__lsx_vld, dst_tmp1, 0, dst_tmp1 + stride, 0, dst_tmp1 + stride2, 0, +- dst_tmp1 + stride3, 0, q4, q5, q6, q7); ++ DUP4_ARG2(__lsx_vldx, dst_tmp, -stride4, dst_tmp, -stride3, dst_tmp, ++ -stride2, dst_tmp, -stride, p7, p6, p5, p4); ++ p3 = __lsx_vld(dst_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp, stride, dst_tmp, stride2, p2, p1); ++ p0 = __lsx_vldx(dst_tmp, stride3); ++ ++ q0 = __lsx_vld(dst, 0); ++ DUP2_ARG2(__lsx_vldx, dst, stride, dst, stride2, q1, q2); ++ q3 = __lsx_vldx(dst, stride3); ++ ++ q4 = __lsx_vld(dst_tmp1, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp1, stride, dst_tmp1, stride2, q5, q6); ++ q7 = __lsx_vldx(dst_tmp1, stride3); + VP9_FLAT5(p7, p6, p5, p4, p0, q0, q4, q5, q6, q7, flat, flat2); + + /* if flat2 is zero for all pixels, then no need to calculate other filter */ +@@ -756,12 +758,12 @@ static void vp9_hz_lpf_t16_16w(uint8_t *dst, ptrdiff_t stride, uint8_t *filter48 + 48, p2, p1, p0, q0); + DUP2_ARG2(__lsx_vld, filter48, 64, filter48, 80, q1, q2); + +- __lsx_vst(p2, dst - stride3, 0); +- __lsx_vst(p1, dst - stride2, 0); +- __lsx_vst(p0, dst - stride, 0); ++ __lsx_vstx(p2, dst, -stride3); ++ __lsx_vstx(p1, dst, -stride2); ++ __lsx_vstx(p0, dst, -stride); + __lsx_vst(q0, dst, 0); +- __lsx_vst(q1, dst + stride, 0); +- __lsx_vst(q2, dst + stride2, 0); ++ __lsx_vstx(q1, dst, stride); ++ __lsx_vstx(q2, dst, stride2); + } else { + dst = dst_tmp - stride3; + +@@ -1113,10 +1115,11 @@ void ff_loop_filter_v_16_8_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i tmp0, tmp1, tmp2; + + /* load vector elements */ +- DUP4_ARG2(__lsx_vld, dst - stride4, 0, dst - stride3, 0, dst - stride2, 0, +- dst - stride, 0, p3, p2, p1, p0); +- DUP4_ARG2(__lsx_vld, dst, 0, dst + stride, 0, dst + stride2, 0, +- dst + stride3, 0, q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vldx, dst, -stride4, dst, -stride3, dst, -stride2, ++ dst, -stride, p3, p2, p1, p0); ++ q0 = __lsx_vld(dst, 0); ++ DUP2_ARG2(__lsx_vldx, dst, stride, dst, stride2, q1, q2); ++ q3 = __lsx_vldx(dst, stride3); + + thresh = __lsx_vreplgr2vr_b(thresh_ptr); + b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); +@@ -1164,8 +1167,8 @@ void ff_loop_filter_v_16_8_lsx(uint8_t *dst, ptrdiff_t stride, + /* load 16 vector elements */ + DUP4_ARG2(__lsx_vld, dst_tmp - stride4, 0, dst_tmp - stride3, 0, + dst_tmp - stride2, 0, dst_tmp - stride, 0, p7, p6, p5, p4); +- DUP4_ARG2(__lsx_vld, dst_tmp1, 0, dst_tmp1 + stride, 0, dst_tmp1 + stride2, +- 0, dst_tmp1 + stride3, 0, q4, q5, q6, q7); ++ DUP4_ARG2(__lsx_vld, dst_tmp1, 0, dst_tmp1 + stride, 0, ++ dst_tmp1 + stride2, 0, dst_tmp1 + stride3, 0, q4, q5, q6, q7); + + VP9_FLAT5(p7, p6, p5, p4, p0, q0, q4, q5, q6, q7, flat, flat2); + +@@ -1352,15 +1355,18 @@ void ff_loop_filter_h_4_8_lsx(uint8_t *dst, ptrdiff_t stride, + ptrdiff_t stride2 = stride << 1; + ptrdiff_t stride3 = stride2 + stride; + ptrdiff_t stride4 = stride2 << 1; +- uint8_t *dst_tmp = dst + stride4; ++ uint8_t *dst_tmp1 = dst - 4; ++ uint8_t *dst_tmp2 = dst_tmp1 + stride4; + __m128i mask, hev, flat, limit, thresh, b_limit; + __m128i p3, p2, p1, p0, q3, q2, q1, q0; + __m128i vec0, vec1, vec2, vec3; + +- DUP4_ARG2(__lsx_vld, dst, -4, dst + stride, -4, dst + stride2, -4, +- dst + stride3, -4, p3, p2, p1, p0); +- DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, q0, q1, q2, q3); ++ p3 = __lsx_vld(dst_tmp1, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp1, stride, dst_tmp1, stride2, p2, p1); ++ p0 = __lsx_vldx(dst_tmp1, stride3); ++ q0 = __lsx_vld(dst_tmp2, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp2, stride, dst_tmp2, stride2, q1, q2); ++ q3 = __lsx_vldx(dst_tmp2, stride3); + + thresh = __lsx_vreplgr2vr_b(thresh_ptr); + b_limit = __lsx_vreplgr2vr_b(b_limit_ptr); +@@ -1395,7 +1401,7 @@ void ff_loop_filter_h_44_16_lsx(uint8_t *dst, ptrdiff_t stride, + ptrdiff_t stride2 = stride << 1; + ptrdiff_t stride3 = stride2 + stride; + ptrdiff_t stride4 = stride2 << 1; +- uint8_t *dst_tmp = dst; ++ uint8_t *dst_tmp = dst - 4; + __m128i mask, hev, flat; + __m128i thresh0, b_limit0, limit0, thresh1, b_limit1, limit1; + __m128i p3, p2, p1, p0, q3, q2, q1, q0; +@@ -1403,17 +1409,21 @@ void ff_loop_filter_h_44_16_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i row8, row9, row10, row11, row12, row13, row14, row15; + __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; + +- DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, row0, row1, row2, row3); ++ row0 = __lsx_vld(dst_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp, stride, dst_tmp, stride2, row1, row2); ++ row3 = __lsx_vldx(dst_tmp, stride3); + dst_tmp += stride4; +- DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, row4, row5, row6, row7); ++ row4 = __lsx_vld(dst_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp, stride, dst_tmp, stride2, row5, row6); ++ row7 = __lsx_vldx(dst_tmp, stride3); + dst_tmp += stride4; +- DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, row8, row9, row10, row11); ++ row8 = __lsx_vld(dst_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp, stride, dst_tmp, stride2, row9, row10); ++ row11 = __lsx_vldx(dst_tmp, stride3); + dst_tmp += stride4; +- DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, row12, row13, row14, row15); ++ row12 = __lsx_vld(dst_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp, stride, dst_tmp, stride2, row13, row14); ++ row15 = __lsx_vldx(dst_tmp, stride3); + + LSX_TRANSPOSE16x8_B(row0, row1, row2, row3, row4, row5, row6, row7, + row8, row9, row10, row11, row12, row13, row14, row15, +@@ -1471,7 +1481,7 @@ void ff_loop_filter_h_8_8_lsx(uint8_t *dst, ptrdiff_t stride, + ptrdiff_t stride2 = stride << 1; + ptrdiff_t stride3 = stride2 + stride; + ptrdiff_t stride4 = stride2 << 1; +- uint8_t *dst_tmp = dst; ++ uint8_t *dst_tmp = dst - 4; + __m128i p3, p2, p1, p0, q3, q2, q1, q0; + __m128i p1_out, p0_out, q0_out, q1_out; + __m128i flat, mask, hev, thresh, b_limit, limit; +@@ -1482,11 +1492,13 @@ void ff_loop_filter_h_8_8_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i zero = __lsx_vldi(0); + + /* load vector elements */ +- DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, p3, p2, p1, p0); ++ p3 = __lsx_vld(dst_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp, stride, dst_tmp, stride2, p2, p1); ++ p0 = __lsx_vldx(dst_tmp, stride3); + dst_tmp += stride4; +- DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, q0, q1, q2, q3); ++ q0 = __lsx_vld(dst_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp, stride, dst_tmp, stride2, q1, q2); ++ q3 = __lsx_vldx(dst_tmp, stride3); + + LSX_TRANSPOSE8x8_B(p3, p2, p1, p0, q0, q1, q2, q3, + p3, p2, p1, p0, q0, q1, q2, q3); +@@ -1587,7 +1599,7 @@ void ff_loop_filter_h_88_16_lsx(uint8_t *dst, ptrdiff_t stride, + ptrdiff_t stride2 = stride << 1; + ptrdiff_t stride3 = stride2 + stride; + ptrdiff_t stride4 = stride2 << 1; +- uint8_t *dst_tmp = dst; ++ uint8_t *dst_tmp = dst - 4; + __m128i p3, p2, p1, p0, q3, q2, q1, q0; + __m128i p1_out, p0_out, q0_out, q1_out; + __m128i flat, mask, hev, thresh, b_limit, limit; +@@ -1601,18 +1613,21 @@ void ff_loop_filter_h_88_16_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; + __m128i zero = __lsx_vldi(0); + +- +- DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, p0, p1, p2, p3); ++ p0 = __lsx_vld(dst_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp, stride, dst_tmp, stride2, p1, p2); ++ p3 = __lsx_vldx(dst_tmp, stride3); + dst_tmp += stride4; +- DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, row4, row5, row6, row7); ++ row4 = __lsx_vld(dst_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp, stride, dst_tmp, stride2, row5, row6); ++ row7 = __lsx_vldx(dst_tmp, stride3); + dst_tmp += stride4; +- DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, q3, q2, q1, q0); ++ q3 = __lsx_vld(dst_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp, stride, dst_tmp, stride2, q2, q1); ++ q0 = __lsx_vldx(dst_tmp, stride3); + dst_tmp += stride4; +- DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, row12, row13, row14, row15); ++ row12 = __lsx_vld(dst_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp, stride, dst_tmp, stride2, row13, row14); ++ row15 = __lsx_vldx(dst_tmp, stride3); + + /* transpose 16x8 matrix into 8x16 */ + LSX_TRANSPOSE16x8_B(p0, p1, p2, p3, row4, row5, row6, row7, +@@ -1687,11 +1702,11 @@ void ff_loop_filter_h_88_16_lsx(uint8_t *dst, ptrdiff_t stride, + p1_filt8_h, p0_filt8_h, q0_filt8_h, q1_filt8_h, q2_filt8_h); + + /* convert 16 bit output data into 8 bit */ +- DUP4_ARG2(__lsx_vpickev_b, p2_filt8_h, p2_filt8_l, p1_filt8_h, p1_filt8_l, +- p0_filt8_h, p0_filt8_l, q0_filt8_h, q0_filt8_l, p2_filt8_l, p1_filt8_l, +- p0_filt8_l, q0_filt8_l); +- DUP2_ARG2(__lsx_vpickev_b, q1_filt8_h, q1_filt8_l, q2_filt8_h, q2_filt8_l, +- q1_filt8_l, q2_filt8_l); ++ DUP4_ARG2(__lsx_vpickev_b, p2_filt8_h, p2_filt8_l, p1_filt8_h, ++ p1_filt8_l, p0_filt8_h, p0_filt8_l, q0_filt8_h, q0_filt8_l, ++ p2_filt8_l, p1_filt8_l, p0_filt8_l, q0_filt8_l); ++ DUP2_ARG2(__lsx_vpickev_b, q1_filt8_h, q1_filt8_l, q2_filt8_h, ++ q2_filt8_l, q1_filt8_l, q2_filt8_l); + + /* store pixel values */ + p2 = __lsx_vbitsel_v(p2, p2_filt8_l, flat); +@@ -1769,7 +1784,7 @@ void ff_loop_filter_h_84_16_lsx(uint8_t *dst, ptrdiff_t stride, + ptrdiff_t stride2 = stride << 1; + ptrdiff_t stride3 = stride2 + stride; + ptrdiff_t stride4 = stride2 << 1; +- uint8_t *dst_tmp = dst; ++ uint8_t *dst_tmp = dst - 4; + __m128i p3, p2, p1, p0, q3, q2, q1, q0; + __m128i p1_out, p0_out, q0_out, q1_out; + __m128i flat, mask, hev, thresh, b_limit, limit; +@@ -1780,17 +1795,21 @@ void ff_loop_filter_h_84_16_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; + __m128i zero = __lsx_vldi(0); + +- DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, p0, p1, p2, p3); ++ p0 = __lsx_vld(dst_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp, stride, dst_tmp, stride2, p1, p2); ++ p3 = __lsx_vldx(dst_tmp, stride3); + dst_tmp += stride4; +- DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, row4, row5, row6, row7); ++ row4 = __lsx_vld(dst_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp, stride, dst_tmp, stride2, row5, row6); ++ row7 = __lsx_vldx(dst_tmp, stride3); + dst_tmp += stride4; +- DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, q3, q2, q1, q0); ++ q3 = __lsx_vld(dst_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp, stride, dst_tmp, stride2, q2, q1); ++ q0 = __lsx_vldx(dst_tmp, stride3); + dst_tmp += stride4; +- DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, row12, row13, row14, row15); ++ row12 = __lsx_vld(dst_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp, stride, dst_tmp, stride2, row13, row14); ++ row15 = __lsx_vldx(dst_tmp, stride3); + + /* transpose 16x8 matrix into 8x16 */ + LSX_TRANSPOSE16x8_B(p0, p1, p2, p3, row4, row5, row6, row7, +@@ -1940,7 +1959,7 @@ void ff_loop_filter_h_48_16_lsx(uint8_t *dst, ptrdiff_t stride, + ptrdiff_t stride2 = stride << 1; + ptrdiff_t stride3 = stride2 + stride; + ptrdiff_t stride4 = stride2 << 1; +- uint8_t *dst_tmp = dst; ++ uint8_t *dst_tmp = dst - 4; + __m128i p3, p2, p1, p0, q3, q2, q1, q0; + __m128i p1_out, p0_out, q0_out, q1_out; + __m128i flat, mask, hev, thresh, b_limit, limit; +@@ -1951,17 +1970,21 @@ void ff_loop_filter_h_48_16_lsx(uint8_t *dst, ptrdiff_t stride, + __m128i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; + __m128i zero = __lsx_vldi(0); + +- DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, p0, p1, p2, p3); ++ p0 = __lsx_vld(dst_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp, stride, dst_tmp, stride2, p1, p2); ++ p3 = __lsx_vldx(dst_tmp, stride3); + dst_tmp += stride4; +- DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, row4, row5, row6, row7); ++ row4 = __lsx_vld(dst_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp, stride, dst_tmp, stride2, row5, row6); ++ row7 = __lsx_vldx(dst_tmp, stride3); + dst_tmp += stride4; +- DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, q3, q2, q1, q0); ++ q3 = __lsx_vld(dst_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp, stride, dst_tmp, stride2, q2, q1); ++ q0 = __lsx_vldx(dst_tmp, stride3); + dst_tmp += stride4; +- DUP4_ARG2(__lsx_vld, dst_tmp, -4, dst_tmp + stride, -4, dst_tmp + stride2, -4, +- dst_tmp + stride3, -4, row12, row13, row14, row15); ++ row12 = __lsx_vld(dst_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp, stride, dst_tmp, stride2, row13, row14); ++ row15 = __lsx_vldx(dst_tmp, stride3); + + /* transpose 16x8 matrix into 8x16 */ + LSX_TRANSPOSE16x8_B(p0, p1, p2, p3, row4, row5, row6, row7, +@@ -2104,14 +2127,17 @@ void ff_loop_filter_h_48_16_lsx(uint8_t *dst, ptrdiff_t stride, + } + } + +-static void vp9_transpose_16x8_to_8x16(uint8_t *input, int32_t in_pitch, +- uint8_t *output, int32_t out_pitch) ++static void vp9_transpose_16x8_to_8x16(uint8_t *input, ptrdiff_t in_pitch, ++ uint8_t *output) + { + __m128i p7_org, p6_org, p5_org, p4_org, p3_org, p2_org, p1_org, p0_org; + __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; + __m128i p7, p6, p5, p4, p3, p2, p1, p0, q0, q1, q2, q3, q4, q5, q6, q7; ++ ptrdiff_t in_pitch2 = in_pitch << 1; ++ ptrdiff_t in_pitch3 = in_pitch2 + in_pitch; ++ ptrdiff_t in_pitch4 = in_pitch2 << 1; + +- LSX_LD_8(input, in_pitch, ++ LSX_LD_8(input, in_pitch, in_pitch2, in_pitch3, in_pitch4, + p7_org, p6_org, p5_org, p4_org, p3_org, p2_org, p1_org, p0_org); + /* 8x8 transpose */ + LSX_TRANSPOSE8x8_B(p7_org, p6_org, p5_org, p4_org, p3_org, p2_org, p1_org, +@@ -2125,23 +2151,45 @@ static void vp9_transpose_16x8_to_8x16(uint8_t *input, int32_t in_pitch, + DUP2_ARG2(__lsx_vilvh_w, tmp6, tmp4, tmp7, tmp5, q2, q6); + DUP4_ARG2(__lsx_vbsrl_v, q0, 8, q2, 8, q4, 8, q6, 8, q1, q3, q5, q7); + +- LSX_ST_8(p7, p6, p5, p4, p3, p2, p1, p0, output, out_pitch); +- output += out_pitch; +- LSX_ST_8(q0, q1, q2, q3, q4, q5, q6, q7, output, out_pitch); ++ __lsx_vst(p7, output, 0); ++ __lsx_vst(p6, output, 16); ++ __lsx_vst(p5, output, 32); ++ __lsx_vst(p4, output, 48); ++ __lsx_vst(p3, output, 64); ++ __lsx_vst(p2, output, 80); ++ __lsx_vst(p1, output, 96); ++ __lsx_vst(p0, output, 112); ++ __lsx_vst(q0, output, 128); ++ __lsx_vst(q1, output, 144); ++ __lsx_vst(q2, output, 160); ++ __lsx_vst(q3, output, 176); ++ __lsx_vst(q4, output, 192); ++ __lsx_vst(q5, output, 208); ++ __lsx_vst(q6, output, 224); ++ __lsx_vst(q7, output, 240); + } + +-static void vp9_transpose_8x16_to_16x8(uint8_t *input, int32_t in_pitch, +- uint8_t *output, int32_t out_pitch) ++static void vp9_transpose_8x16_to_16x8(uint8_t *input, uint8_t *output, ++ ptrdiff_t out_pitch) + { + __m128i p7_o, p6_o, p5_o, p4_o, p3_o, p2_o, p1_o, p0_o; + __m128i p7, p6, p5, p4, p3, p2, p1, p0, q0, q1, q2, q3, q4, q5, q6, q7; +- +- LSX_LD_8(input, in_pitch, p7, p6, p5, p4, p3, p2, p1, p0); +- input += in_pitch; +- LSX_LD_8(input, in_pitch, q0, q1, q2, q3, q4, q5, q6, q7); ++ ptrdiff_t out_pitch2 = out_pitch << 1; ++ ptrdiff_t out_pitch3 = out_pitch2 + out_pitch; ++ ptrdiff_t out_pitch4 = out_pitch2 << 1; ++ ++ DUP4_ARG2(__lsx_vld, input, 0, input, 16, input, 32, input, 48, ++ p7, p6, p5, p4); ++ DUP4_ARG2(__lsx_vld, input, 64, input, 80, input, 96, input, 112, ++ p3, p2, p1, p0); ++ DUP4_ARG2(__lsx_vld, input, 128, input, 144, input, 160, input, 176, ++ q0, q1, q2, q3); ++ DUP4_ARG2(__lsx_vld, input, 192, input, 208, input, 224, input, 240, ++ q4, q5, q6, q7); + LSX_TRANSPOSE16x8_B(p7, p6, p5, p4, p3, p2, p1, p0, q0, q1, q2, q3, q4, q5, + q6, q7, p7_o, p6_o, p5_o, p4_o, p3_o, p2_o, p1_o, p0_o); +- LSX_ST_8(p7_o, p6_o, p5_o, p4_o, p3_o, p2_o, p1_o, p0_o, output, out_pitch); ++ LSX_ST_8(p7_o, p6_o, p5_o, p4_o, p3_o, p2_o, p1_o, p0_o, ++ output, out_pitch, out_pitch2, out_pitch3, out_pitch4); + } + + static void vp9_transpose_16x16(uint8_t *input, int32_t in_stride, +@@ -2152,10 +2200,17 @@ static void vp9_transpose_16x16(uint8_t *input, int32_t in_stride, + __m128i tmp0, tmp1, tmp4, tmp5, tmp6, tmp7; + __m128i tmp2, tmp3; + __m128i p7, p6, p5, p4, p3, p2, p1, p0, q0, q1, q2, q3, q4, q5, q6, q7; +- +- LSX_LD_8(input, in_stride, row0, row1, row2, row3, row4, row5, row6, row7); +- input += in_stride; +- LSX_LD_8(input, in_stride, ++ int32_t in_stride2 = in_stride << 1; ++ int32_t in_stride3 = in_stride2 + in_stride; ++ int32_t in_stride4 = in_stride2 << 1; ++ int32_t out_stride2 = out_stride << 1; ++ int32_t out_stride3 = out_stride2 + out_stride; ++ int32_t out_stride4 = out_stride2 << 1; ++ ++ LSX_LD_8(input, in_stride, in_stride2, in_stride3, in_stride4, ++ row0, row1, row2, row3, row4, row5, row6, row7); ++ input += in_stride4; ++ LSX_LD_8(input, in_stride, in_stride2, in_stride3, in_stride4, + row8, row9, row10, row11, row12, row13, row14, row15); + + LSX_TRANSPOSE16x8_B(row0, row1, row2, row3, row4, row5, row6, row7, +@@ -2197,9 +2252,11 @@ static void vp9_transpose_16x16(uint8_t *input, int32_t in_stride, + q3 = __lsx_vpackev_w(tmp3, tmp2); + q7 = __lsx_vpackod_w(tmp3, tmp2); + +- LSX_ST_8(p7, p6, p5, p4, p3, p2, p1, p0, output, out_stride); +- output += out_stride; +- LSX_ST_8(q0, q1, q2, q3, q4, q5, q6, q7, output, out_stride); ++ LSX_ST_8(p7, p6, p5, p4, p3, p2, p1, p0, output, out_stride, ++ out_stride2, out_stride3, out_stride4); ++ output += out_stride4; ++ LSX_ST_8(q0, q1, q2, q3, q4, q5, q6, q7, output, out_stride, ++ out_stride2, out_stride3, out_stride4); + } + + static int32_t vp9_vt_lpf_t4_and_t8_8w(uint8_t *src, uint8_t *filter48, +@@ -2218,7 +2275,8 @@ static int32_t vp9_vt_lpf_t4_and_t8_8w(uint8_t *src, uint8_t *filter48, + __m128i zero = __lsx_vldi(0); + + /* load vector elements */ +- DUP4_ARG2(__lsx_vld, src, -64, src, -48, src, -32, src, -16, p3, p2, p1, p0); ++ DUP4_ARG2(__lsx_vld, src, -64, src, -48, src, -32, src, -16, ++ p3, p2, p1, p0); + DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, q0, q1, q2, q3); + + thresh = __lsx_vreplgr2vr_b(thresh_ptr); +@@ -2560,7 +2618,7 @@ void ff_loop_filter_h_16_8_lsx(uint8_t *dst, ptrdiff_t stride, + uint8_t transposed_input[16 * 24] __attribute__ ((aligned(16))); + uint8_t *filter48 = &transposed_input[16 * 16]; + +- vp9_transpose_16x8_to_8x16(dst - 8, stride, transposed_input, 16); ++ vp9_transpose_16x8_to_8x16(dst - 8, stride, transposed_input); + + early_exit = vp9_vt_lpf_t4_and_t8_8w((transposed_input + 16 * 8), + &filter48[0], dst, stride, +@@ -2571,7 +2629,7 @@ void ff_loop_filter_h_16_8_lsx(uint8_t *dst, ptrdiff_t stride, + &filter48[0]); + + if (0 == early_exit) { +- vp9_transpose_8x16_to_16x8(transposed_input, 16, dst - 8, stride); ++ vp9_transpose_8x16_to_16x8(transposed_input, dst - 8, stride); + } + } + } +@@ -2598,7 +2656,8 @@ static int32_t vp9_vt_lpf_t4_and_t8_16w(uint8_t *dst, uint8_t *filter48, + __m128i zero = __lsx_vldi(0); + + /* load vector elements */ +- DUP4_ARG2(__lsx_vld, dst, -64, dst, -48, dst, -32, dst, -16, p3, p2, p1, p0); ++ DUP4_ARG2(__lsx_vld, dst, -64, dst, -48, dst, -32, dst, -16, ++ p3, p2, p1, p0); + DUP4_ARG2(__lsx_vld, dst, 0, dst, 16, dst, 32, dst, 48, q0, q1, q2, q3); + + thresh = __lsx_vreplgr2vr_b(thresh_ptr); +@@ -3072,12 +3131,11 @@ void ff_loop_filter_h_16_16_lsx(uint8_t *dst, ptrdiff_t stride, + b_limit_ptr, limit_ptr, thresh_ptr); + + if (0 == early_exit) { +- early_exit = vp9_vt_lpf_t16_16w((transposed_input + 16 * 8), dst, stride, +- &filter48[0]); ++ early_exit = vp9_vt_lpf_t16_16w((transposed_input + 16 * 8), dst, ++ stride, &filter48[0]); + + if (0 == early_exit) { + vp9_transpose_16x16(transposed_input, 16, (dst - 8), stride); + } + } + } +- +diff --git a/libavcodec/loongarch/vp9_mc_lsx.c b/libavcodec/loongarch/vp9_mc_lsx.c +index 9d91675781..c6746fd87f 100644 +--- a/libavcodec/loongarch/vp9_mc_lsx.c ++++ b/libavcodec/loongarch/vp9_mc_lsx.c +@@ -33,86 +33,89 @@ static const uint8_t mc_filt_mask_arr[16 * 3] = { + }; + + +-#define HORIZ_8TAP_4WID_4VECS_FILT(_src0, _src1, _src2, _src3, \ +- _mask0, _mask1, _mask2, _mask3, \ +- _filter0, _filter1, _filter2, _filter3, \ +- _out0, _out1) \ +-{ \ +- __m128i _tmp0, _tmp1, _tmp2, _tmp3, _tmp4, _tmp5, _tmp6, _tmp7; \ +- __m128i _reg0, _reg1, _reg2, _reg3; \ +- \ +- DUP2_ARG3(__lsx_vshuf_b, _src1, _src0, _mask0, _src3, _src2, _mask0, \ +- _tmp0, _tmp1); \ +- DUP2_ARG2(__lsx_vdp2_h_b, _tmp0, _filter0, _tmp1, _filter0, _reg0, _reg1); \ +- DUP2_ARG3(__lsx_vshuf_b, _src1, _src0, _mask1, _src3, _src2, _mask1, _tmp2, _tmp3);\ +- DUP2_ARG3(__lsx_vdp2add_h_b, _reg0, _tmp2, _filter1, _reg1, _tmp3, _filter1, \ +- _reg0, _reg1); \ +- DUP2_ARG3(__lsx_vshuf_b, _src1, _src0, _mask2, _src3, _src2, _mask2, _tmp4, _tmp5);\ +- DUP2_ARG2(__lsx_vdp2_h_b, _tmp4, _filter2, _tmp5, _filter2, _reg2, _reg3); \ +- DUP2_ARG3(__lsx_vshuf_b, _src1, _src0, _mask3, _src3, _src2, _mask3, _tmp6, _tmp7);\ +- DUP2_ARG3(__lsx_vdp2add_h_b, _reg2, _tmp6, _filter3, _reg3, _tmp7, _filter3, \ +- _reg2, _reg3); \ +- DUP2_ARG2(__lsx_vsadd_h, _reg0, _reg2, _reg1, _reg3, _out0, _out1); \ ++#define HORIZ_8TAP_4WID_4VECS_FILT(_src0, _src1, _src2, _src3, \ ++ _mask0, _mask1, _mask2, _mask3, \ ++ _filter0, _filter1, _filter2, _filter3, \ ++ _out0, _out1) \ ++{ \ ++ __m128i _tmp0, _tmp1, _tmp2, _tmp3, _tmp4, _tmp5, _tmp6, _tmp7; \ ++ __m128i _reg0, _reg1, _reg2, _reg3; \ ++ \ ++ DUP2_ARG3(__lsx_vshuf_b, _src1, _src0, _mask0, _src3, _src2, _mask0, \ ++ _tmp0, _tmp1); \ ++ DUP2_ARG2(__lsx_vdp2_h_b, _tmp0, _filter0, _tmp1, _filter0, _reg0, _reg1); \ ++ DUP2_ARG3(__lsx_vshuf_b, _src1, _src0, _mask1, _src3, _src2, _mask1, \ ++ _tmp2, _tmp3); \ ++ DUP2_ARG3(__lsx_vdp2add_h_b, _reg0, _tmp2, _filter1, _reg1, _tmp3, \ ++ _filter1, _reg0, _reg1); \ ++ DUP2_ARG3(__lsx_vshuf_b, _src1, _src0, _mask2, _src3, _src2, _mask2, \ ++ _tmp4, _tmp5); \ ++ DUP2_ARG2(__lsx_vdp2_h_b, _tmp4, _filter2, _tmp5, _filter2, _reg2, _reg3); \ ++ DUP2_ARG3(__lsx_vshuf_b, _src1, _src0, _mask3, _src3, _src2, _mask3, \ ++ _tmp6, _tmp7); \ ++ DUP2_ARG3(__lsx_vdp2add_h_b, _reg2, _tmp6, _filter3, _reg3, _tmp7, \ ++ _filter3, _reg2, _reg3); \ ++ DUP2_ARG2(__lsx_vsadd_h, _reg0, _reg2, _reg1, _reg3, _out0, _out1); \ + } + +-#define HORIZ_8TAP_8WID_4VECS_FILT(_src0, _src1, _src2, _src3, \ +- _mask0, _mask1, _mask2, _mask3, \ +- _filter0, _filter1, _filter2, _filter3, \ +- _out0, _out1, _out2, _out3) \ +-{ \ +- __m128i _tmp0, _tmp1, _tmp2, _tmp3, _tmp4, _tmp5, _tmp6, _tmp7; \ +- __m128i _reg0, _reg1, _reg2, _reg3, _reg4, _reg5, _reg6, _reg7; \ +- \ +- DUP4_ARG3(__lsx_vshuf_b, _src0, _src0, _mask0, _src1, _src1, _mask0, _src2, \ +- _src2, _mask0, _src3, _src3, _mask0, _tmp0, _tmp1, _tmp2, _tmp3); \ +- DUP4_ARG2(__lsx_vdp2_h_b, _tmp0, _filter0, _tmp1, _filter0, _tmp2, _filter0, \ +- _tmp3, _filter0, _reg0, _reg1, _reg2, _reg3); \ +- DUP4_ARG3(__lsx_vshuf_b, _src0, _src0, _mask2, _src1, _src1, _mask2, _src2, \ +- _src2, _mask2, _src3, _src3, _mask2, _tmp0, _tmp1, _tmp2, _tmp3); \ +- DUP4_ARG2(__lsx_vdp2_h_b, _tmp0, _filter2, _tmp1, _filter2, _tmp2, _filter2, \ +- _tmp3, _filter2, _reg4, _reg5, _reg6, _reg7); \ +- DUP4_ARG3(__lsx_vshuf_b, _src0, _src0, _mask1, _src1, _src1, _mask1, _src2, \ +- _src2, _mask1, _src3, _src3, _mask1, _tmp4, _tmp5, _tmp6, _tmp7); \ +- DUP4_ARG3(__lsx_vdp2add_h_b, _reg0, _tmp4, _filter1, _reg1, _tmp5, _filter1, \ +- _reg2, _tmp6, _filter1, _reg3, _tmp7, _filter1, _reg0, _reg1, _reg2, \ +- _reg3); \ +- DUP4_ARG3(__lsx_vshuf_b, _src0, _src0, _mask3, _src1, _src1, _mask3, _src2, \ +- _src2, _mask3, _src3, _src3, _mask3, _tmp4, _tmp5, _tmp6, _tmp7); \ +- DUP4_ARG3(__lsx_vdp2add_h_b, _reg4, _tmp4, _filter3, _reg5, _tmp5, _filter3, \ +- _reg6, _tmp6, _filter3, _reg7, _tmp7, _filter3, _reg4, _reg5, _reg6, \ +- _reg7); \ +- DUP4_ARG2(__lsx_vsadd_h, _reg0, _reg4, _reg1, _reg5, _reg2, _reg6, _reg3, _reg7, \ +- _out0, _out1, _out2, _out3); \ ++#define HORIZ_8TAP_8WID_4VECS_FILT(_src0, _src1, _src2, _src3, \ ++ _mask0, _mask1, _mask2, _mask3, \ ++ _filter0, _filter1, _filter2, _filter3, \ ++ _out0, _out1, _out2, _out3) \ ++{ \ ++ __m128i _tmp0, _tmp1, _tmp2, _tmp3, _tmp4, _tmp5, _tmp6, _tmp7; \ ++ __m128i _reg0, _reg1, _reg2, _reg3, _reg4, _reg5, _reg6, _reg7; \ ++ \ ++ DUP4_ARG3(__lsx_vshuf_b, _src0, _src0, _mask0, _src1, _src1, _mask0, _src2,\ ++ _src2, _mask0, _src3, _src3, _mask0, _tmp0, _tmp1, _tmp2, _tmp3);\ ++ DUP4_ARG2(__lsx_vdp2_h_b, _tmp0, _filter0, _tmp1, _filter0, _tmp2, \ ++ _filter0, _tmp3, _filter0, _reg0, _reg1, _reg2, _reg3); \ ++ DUP4_ARG3(__lsx_vshuf_b, _src0, _src0, _mask2, _src1, _src1, _mask2, _src2,\ ++ _src2, _mask2, _src3, _src3, _mask2, _tmp0, _tmp1, _tmp2, _tmp3);\ ++ DUP4_ARG2(__lsx_vdp2_h_b, _tmp0, _filter2, _tmp1, _filter2, _tmp2, \ ++ _filter2, _tmp3, _filter2, _reg4, _reg5, _reg6, _reg7); \ ++ DUP4_ARG3(__lsx_vshuf_b, _src0, _src0, _mask1, _src1, _src1, _mask1, _src2,\ ++ _src2, _mask1, _src3, _src3, _mask1, _tmp4, _tmp5, _tmp6, _tmp7);\ ++ DUP4_ARG3(__lsx_vdp2add_h_b, _reg0, _tmp4, _filter1, _reg1, _tmp5, \ ++ _filter1, _reg2, _tmp6, _filter1, _reg3, _tmp7, _filter1, _reg0, \ ++ _reg1, _reg2, _reg3); \ ++ DUP4_ARG3(__lsx_vshuf_b, _src0, _src0, _mask3, _src1, _src1, _mask3, _src2,\ ++ _src2, _mask3, _src3, _src3, _mask3, _tmp4, _tmp5, _tmp6, _tmp7);\ ++ DUP4_ARG3(__lsx_vdp2add_h_b, _reg4, _tmp4, _filter3, _reg5, _tmp5, \ ++ _filter3, _reg6, _tmp6, _filter3, _reg7, _tmp7, _filter3, _reg4, \ ++ _reg5, _reg6, _reg7); \ ++ DUP4_ARG2(__lsx_vsadd_h, _reg0, _reg4, _reg1, _reg5, _reg2, _reg6, _reg3, \ ++ _reg7, _out0, _out1, _out2, _out3); \ + } + +-#define FILT_8TAP_DPADD_S_H(_reg0, _reg1, _reg2, _reg3, \ +- _filter0, _filter1, _filter2, _filter3) \ +-( { \ +- __m128i _vec0, _vec1; \ +- \ +- _vec0 = __lsx_vdp2_h_b(_reg0, _filter0); \ +- _vec0 = __lsx_vdp2add_h_b(_vec0, _reg1, _filter1); \ +- _vec1 = __lsx_vdp2_h_b(_reg2, _filter2); \ +- _vec1 = __lsx_vdp2add_h_b(_vec1, _reg3, _filter3); \ +- _vec0 = __lsx_vsadd_h(_vec0, _vec1); \ +- \ +- _vec0; \ ++#define FILT_8TAP_DPADD_S_H(_reg0, _reg1, _reg2, _reg3, \ ++ _filter0, _filter1, _filter2, _filter3) \ ++( { \ ++ __m128i _vec0, _vec1; \ ++ \ ++ _vec0 = __lsx_vdp2_h_b(_reg0, _filter0); \ ++ _vec0 = __lsx_vdp2add_h_b(_vec0, _reg1, _filter1); \ ++ _vec1 = __lsx_vdp2_h_b(_reg2, _filter2); \ ++ _vec1 = __lsx_vdp2add_h_b(_vec1, _reg3, _filter3); \ ++ _vec0 = __lsx_vsadd_h(_vec0, _vec1); \ ++ \ ++ _vec0; \ + } ) + +-#define HORIZ_8TAP_FILT(_src0, _src1, _mask0, _mask1, _mask2, _mask3, \ +- _filt_h0, _filt_h1, _filt_h2, _filt_h3) \ +-( { \ +- __m128i _tmp0, _tmp1, _tmp2, _tmp3; \ +- __m128i _out; \ +- \ +- DUP4_ARG3(__lsx_vshuf_b, _src1, _src0, _mask0, _src1, _src0, _mask1, _src1, \ +- _src0, _mask2, _src1, _src0, _mask3, _tmp0, _tmp1, _tmp2, _tmp3); \ +- _out = FILT_8TAP_DPADD_S_H(_tmp0, _tmp1, _tmp2, _tmp3, _filt_h0, _filt_h1, \ +- _filt_h2, _filt_h3); \ +- _out = __lsx_vsrari_h(_out, 7); \ +- _out = __lsx_vsat_h(_out, 7); \ +- \ +- _out; \ ++#define HORIZ_8TAP_FILT(_src0, _src1, _mask0, _mask1, _mask2, _mask3, \ ++ _filt_h0, _filt_h1, _filt_h2, _filt_h3) \ ++( { \ ++ __m128i _tmp0, _tmp1, _tmp2, _tmp3; \ ++ __m128i _out; \ ++ \ ++ DUP4_ARG3(__lsx_vshuf_b, _src1, _src0, _mask0, _src1, _src0, _mask1, _src1,\ ++ _src0, _mask2, _src1, _src0, _mask3, _tmp0, _tmp1, _tmp2, _tmp3);\ ++ _out = FILT_8TAP_DPADD_S_H(_tmp0, _tmp1, _tmp2, _tmp3, _filt_h0, _filt_h1, \ ++ _filt_h2, _filt_h3); \ ++ _out = __lsx_vsrari_h(_out, 7); \ ++ _out = __lsx_vsat_h(_out, 7); \ ++ \ ++ _out; \ + } ) + + #define LSX_LD_4(_src, _stride, _src0, _src1, _src2, _src3) \ +@@ -126,39 +129,6 @@ static const uint8_t mc_filt_mask_arr[16 * 3] = { + _src3 = __lsx_vld(_src, 0); \ + } + +-#define LSX_ST_4(_dst0, _dst1, _dst2, _dst3, _dst, _stride) \ +-{ \ +- __lsx_vst(_dst0, _dst, 0); \ +- _dst += _stride; \ +- __lsx_vst(_dst1, _dst, 0); \ +- _dst += _stride; \ +- __lsx_vst(_dst2, _dst, 0); \ +- _dst += _stride; \ +- __lsx_vst(_dst3, _dst, 0); \ +-} +- +-#define LSX_LD_4_16(_src, _stride, _src0, _src1, _src2, _src3) \ +-{ \ +- _src0 = __lsx_vld(_src, 16); \ +- _src += _stride; \ +- _src1 = __lsx_vld(_src, 16); \ +- _src += _stride; \ +- _src2 = __lsx_vld(_src, 16); \ +- _src += _stride; \ +- _src3 = __lsx_vld(_src, 16); \ +-} +- +-#define LSX_ST_4_16(_dst0, _dst1, _dst2, _dst3, _dst, _stride) \ +-{ \ +- __lsx_vst(_dst0, _dst, 16); \ +- _dst += _stride; \ +- __lsx_vst(_dst1, _dst, 16); \ +- _dst += _stride; \ +- __lsx_vst(_dst2, _dst, 16); \ +- _dst += _stride; \ +- __lsx_vst(_dst3, _dst, 16); \ +-} +- + static void common_hz_8t_4x4_lsx(const uint8_t *src, int32_t src_stride, + uint8_t *dst, int32_t dst_stride, + const int8_t *filter) +@@ -178,8 +148,8 @@ static void common_hz_8t_4x4_lsx(const uint8_t *src, int32_t src_stride, + LSX_LD_4(src, src_stride, src0, src1, src2, src3); + DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, + src0, src1, src2, src3); +- HORIZ_8TAP_4WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, +- filter0, filter1, filter2, filter3, out0, out1); ++ HORIZ_8TAP_4WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, ++ mask3, filter0, filter1, filter2, filter3, out0, out1); + out = __lsx_vssrarni_b_h(out1, out0, 7); + out = __lsx_vxori_b(out, 128); + __lsx_vstelm_w(out, dst, 0, 0); +@@ -195,34 +165,36 @@ static void common_hz_8t_4x8_lsx(const uint8_t *src, int32_t src_stride, + uint8_t *dst, int32_t dst_stride, + const int8_t *filter) + { +- int32_t stride = src_stride << 1; ++ int32_t src_stride2 = src_stride << 1; ++ int32_t src_stride3 = src_stride + src_stride2; ++ int32_t src_stride4 = src_stride2 << 1; + __m128i src0, src1, src2, src3; + __m128i filter0, filter1, filter2, filter3; + __m128i mask0, mask1, mask2, mask3; + __m128i out0, out1, out2, out3; ++ uint8_t *_src = (uint8_t*)src - 3; + + mask0 = __lsx_vld(mc_filt_mask_arr, 16); +- src -= 3; + DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, + filter0, filter1, filter2, filter3); + +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); +- src += stride; +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src2, src3); ++ src0 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src1, src2); ++ src3 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; + DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, + src0, src1, src2, src3); +- HORIZ_8TAP_4WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, +- filter0, filter1, filter2, filter3, out0, out1); +- src += stride; +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); +- src += stride; +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src2, src3); ++ HORIZ_8TAP_4WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, ++ mask3, filter0, filter1, filter2, filter3, out0, out1); ++ src0 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src1, src2); ++ src3 = __lsx_vldx(_src, src_stride3); + DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, + src0, src1, src2, src3); +- HORIZ_8TAP_4WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, +- filter0, filter1, filter2, filter3, out2, out3); ++ HORIZ_8TAP_4WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, ++ mask3, filter0, filter1, filter2, filter3, out2, out3); + DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); + DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + __lsx_vstelm_w(out0, dst, 0, 0); +@@ -272,8 +244,8 @@ static void common_hz_8t_8x4_lsx(const uint8_t *src, int32_t src_stride, + LSX_LD_4(src, src_stride, src0, src1, src2, src3); + DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, + src0, src1, src2, src3); +- HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, +- filter0, filter1, filter2, filter3, out0, out1, out2, out3); ++ HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, ++ mask3, filter0, filter1, filter2, filter3, out0, out1, out2, out3); + DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); + DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + __lsx_vstelm_d(out0, dst, 0, 0); +@@ -290,27 +262,30 @@ static void common_hz_8t_8x8mult_lsx(const uint8_t *src, int32_t src_stride, + const int8_t *filter, int32_t height) + { + uint32_t loop_cnt = height >> 2; +- int32_t stride = src_stride << 1; ++ int32_t src_stride2 = src_stride << 1; ++ int32_t src_stride3 = src_stride + src_stride2; ++ int32_t src_stride4 = src_stride2 << 1; + __m128i src0, src1, src2, src3; + __m128i filter0, filter1, filter2, filter3; + __m128i mask0, mask1, mask2, mask3; + __m128i out0, out1, out2, out3; ++ uint8_t* _src = (uint8_t*)src - 3; + + mask0 = __lsx_vld(mc_filt_mask_arr, 0); +- src -= 3; + DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, + filter0, filter1, filter2, filter3); + + for (; loop_cnt--;) { +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src1); +- src += stride; +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src2, src3); ++ src0 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src1, src2); ++ src3 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; + DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, + src0, src1, src2, src3); +- HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, +- filter0, filter1, filter2, filter3, out0, out1, out2, out3); ++ HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, ++ mask3, filter0, filter1, filter2, filter3, out0, out1, out2, out3); + DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); + DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + __lsx_vstelm_d(out0, dst, 0, 0); +@@ -321,7 +296,6 @@ static void common_hz_8t_8x8mult_lsx(const uint8_t *src, int32_t src_stride, + dst += dst_stride; + __lsx_vstelm_d(out1, dst, 0, 1); + dst += dst_stride; +- src += stride; + } + } + +@@ -332,7 +306,8 @@ static void common_hz_8t_8w_lsx(const uint8_t *src, int32_t src_stride, + if (height == 4) { + common_hz_8t_8x4_lsx(src, src_stride, dst, dst_stride, filter); + } else { +- common_hz_8t_8x8mult_lsx(src, src_stride, dst, dst_stride, filter, height); ++ common_hz_8t_8x8mult_lsx(src, src_stride, dst, dst_stride, ++ filter, height); + } + } + +@@ -355,12 +330,13 @@ static void common_hz_8t_16w_lsx(const uint8_t *src, int32_t src_stride, + filter0, filter1, filter2, filter3); + + for (; loop_cnt--;) { +- DUP2_ARG2(__lsx_vld, src, 0, src + src_stride, 0, src0, src2); +- DUP2_ARG2(__lsx_vld, src, 8, src + src_stride, 8, src1, src3); ++ const uint8_t* _src = src + src_stride; ++ DUP2_ARG2(__lsx_vld, src, 0, _src, 0, src0, src2); ++ DUP2_ARG2(__lsx_vld, src, 8, _src, 8, src1, src3); + DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, + src0, src1, src2, src3); +- HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, +- filter0, filter1, filter2, filter3, out0, out1, out2, out3); ++ HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, ++ mask3, filter0, filter1, filter2, filter3, out0, out1, out2, out3); + DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); + DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + __lsx_vst(out0, dst, 0); +@@ -396,8 +372,8 @@ static void common_hz_8t_32w_lsx(const uint8_t *src, int32_t src_stride, + src += src_stride; + DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, + src0, src1, src2, src3); +- HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, +- filter0, filter1, filter2, filter3, out0, out1, out2, out3); ++ HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, ++ mask3, filter0, filter1, filter2, filter3, out0, out1, out2, out3); + DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); + DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + __lsx_vst(out0, dst, 0); +@@ -411,8 +387,8 @@ static void common_hz_8t_32w_lsx(const uint8_t *src, int32_t src_stride, + dst += dst_stride; + DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, + src0, src1, src2, src3); +- HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, +- filter0, filter1, filter2, filter3, out0, out1, out2, out3); ++ HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, ++ mask3, filter0, filter1, filter2, filter3, out0, out1, out2, out3); + DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); + DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + __lsx_vst(out0, dst, 0); +@@ -445,8 +421,8 @@ static void common_hz_8t_64w_lsx(const uint8_t *src, int32_t src_stride, + src1 = __lsx_vshuf_b(src2, src0, shuff); + DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, + src0, src1, src2, src3); +- HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, +- filter0, filter1, filter2, filter3, out0, out1, out2, out3); ++ HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, ++ mask3, filter0, filter1, filter2, filter3, out0, out1, out2, out3); + DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); + DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + __lsx_vst(out0, dst, 0); +@@ -457,8 +433,8 @@ static void common_hz_8t_64w_lsx(const uint8_t *src, int32_t src_stride, + src1 = __lsx_vshuf_b(src2, src0, shuff); + DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, + src0, src1, src2, src3); +- HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, +- filter0, filter1, filter2, filter3, out0, out1, out2, out3); ++ HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, ++ mask3, filter0, filter1, filter2, filter3, out0, out1, out2, out3); + DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); + DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + __lsx_vst(out0, dst, 32); +@@ -473,23 +449,25 @@ static void common_vt_8t_4w_lsx(const uint8_t *src, int32_t src_stride, + const int8_t *filter, int32_t height) + { + uint32_t loop_cnt = height >> 2; ++ int32_t src_stride2 = src_stride << 1; ++ int32_t src_stride3 = src_stride + src_stride2; ++ int32_t src_stride4 = src_stride2 << 1; + __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; + __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; + __m128i reg0, reg1, reg2, reg3, reg4; + __m128i filter0, filter1, filter2, filter3; + __m128i out0, out1; ++ uint8_t* _src = (uint8_t*)src - src_stride3; + +- src -= (3 * src_stride); + DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, + filter0, filter1, filter2, filter3); +- LSX_LD_4(src, src_stride, src0, src1, src2, src3); +- src += src_stride; +- src4 = __lsx_vld(src, 0); +- src += src_stride; +- src5 = __lsx_vld(src, 0); +- src += src_stride; +- src6 = __lsx_vld(src, 0); +- src += src_stride; ++ src0 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src1, src2); ++ src3 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; ++ src4 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src5, src6); ++ _src += src_stride3; + DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, tmp0, + tmp1, tmp2, tmp3); + DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, tmp4, tmp5); +@@ -499,14 +477,18 @@ static void common_vt_8t_4w_lsx(const uint8_t *src, int32_t src_stride, + reg2 = __lsx_vxori_b(reg2, 128); + + for (;loop_cnt--;) { +- LSX_LD_4(src, src_stride, src7, src8, src9, src10); +- src += src_stride; +- DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, tmp0, +- tmp1, tmp2, tmp3); ++ src7 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src8, src9); ++ src10 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, ++ src9, tmp0, tmp1, tmp2, tmp3); + DUP2_ARG2(__lsx_vilvl_d, tmp1, tmp0, tmp3, tmp2, reg3, reg4); + DUP2_ARG2(__lsx_vxori_b, reg3, 128, reg4, 128, reg3, reg4); +- out0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, reg3, filter0, filter1, filter2, filter3); +- out1 = FILT_8TAP_DPADD_S_H(reg1, reg2, reg3, reg4, filter0, filter1, filter2, filter3); ++ out0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, reg3, filter0, filter1, ++ filter2, filter3); ++ out1 = FILT_8TAP_DPADD_S_H(reg1, reg2, reg3, reg4, filter0, filter1, ++ filter2, filter3); + out0 = __lsx_vssrarni_b_h(out1, out0, 7); + out0 = __lsx_vxori_b(out0, 128); + __lsx_vstelm_w(out0, dst, 0, 0); +@@ -535,36 +517,47 @@ static void common_vt_8t_8w_lsx(const uint8_t *src, int32_t src_stride, + __m128i reg0, reg1, reg2, reg3, reg4, reg5; + __m128i filter0, filter1, filter2, filter3; + __m128i out0, out1, out2, out3; ++ int32_t src_stride2 = src_stride << 1; ++ int32_t src_stride3 = src_stride + src_stride2; ++ int32_t src_stride4 = src_stride2 << 1; ++ uint8_t* _src = (uint8_t*)src - src_stride3; + +- src -= (3 * src_stride); + DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, + filter0, filter1, filter2, filter3); + +- LSX_LD_4(src, src_stride, src0, src1, src2, src3); +- src += src_stride; +- src4 = __lsx_vld(src, 0); +- src += src_stride; +- src5 = __lsx_vld(src, 0); +- src += src_stride; +- src6 = __lsx_vld(src, 0); +- src += src_stride; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); ++ src0 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src1, src2); ++ src3 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; ++ src4 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src5, src6); ++ _src += src_stride3; ++ ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); +- DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, reg0, reg1, reg2, reg3); ++ DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ reg0, reg1, reg2, reg3); + DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, reg4, reg5); + + for (;loop_cnt--;) { +- LSX_LD_4(src, src_stride, src7, src8, src9, src10); +- src += src_stride; ++ src7 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src8, src9); ++ src10 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; + DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, + src7, src8, src9, src10); +- DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, +- tmp0, tmp1, tmp2, tmp3); +- out0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, tmp0, filter0, filter1, filter2, filter3); +- out1 = FILT_8TAP_DPADD_S_H(reg3, reg4, reg5, tmp1, filter0, filter1, filter2, filter3); +- out2 = FILT_8TAP_DPADD_S_H(reg1, reg2, tmp0, tmp2, filter0, filter1, filter2, filter3); +- out3 = FILT_8TAP_DPADD_S_H(reg4, reg5, tmp1, tmp3, filter0, filter1, filter2, filter3); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, ++ src9, tmp0, tmp1, tmp2, tmp3); ++ out0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, tmp0, filter0, filter1, ++ filter2, filter3); ++ out1 = FILT_8TAP_DPADD_S_H(reg3, reg4, reg5, tmp1, filter0, filter1, ++ filter2, filter3); ++ out2 = FILT_8TAP_DPADD_S_H(reg1, reg2, tmp0, tmp2, filter0, filter1, ++ filter2, filter3); ++ out3 = FILT_8TAP_DPADD_S_H(reg4, reg5, tmp1, tmp3, filter0, filter1, ++ filter2, filter3); + DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); + DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + __lsx_vstelm_d(out0, dst, 0, 0); +@@ -596,52 +589,64 @@ static void common_vt_8t_16w_lsx(const uint8_t *src, int32_t src_stride, + __m128i reg0, reg1, reg2, reg3, reg4, reg5; + __m128i reg6, reg7, reg8, reg9, reg10, reg11; + __m128i tmp0, tmp1, tmp2, tmp3; ++ int32_t src_stride2 = src_stride << 1; ++ int32_t src_stride3 = src_stride + src_stride2; ++ int32_t src_stride4 = src_stride2 << 1; ++ uint8_t* _src = (uint8_t*)src - src_stride3; + +- src -= (3 * src_stride); + DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, + filter0, filter1, filter2, filter3); +- LSX_LD_4(src, src_stride, src0, src1, src2, src3); +- src += src_stride; +- src4 = __lsx_vld(src, 0); +- src += src_stride; +- src5 = __lsx_vld(src, 0); +- src += src_stride; +- src6 = __lsx_vld(src, 0); +- src += src_stride; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, +- src2, src3); ++ src0 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src1, src2); ++ src3 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; ++ src4 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src5, src6); ++ _src += src_stride3; ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); +- DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, reg0, reg1, +- reg2, reg3); ++ DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ reg0, reg1, reg2, reg3); + DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, reg4, reg5); +- DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, reg6, reg7, +- reg8, reg9); ++ DUP4_ARG2(__lsx_vilvh_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ reg6, reg7, reg8, reg9); + DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, reg10, reg11); + + for (;loop_cnt--;) { +- LSX_LD_4(src, src_stride, src7, src8, src9, src10); +- src += src_stride; ++ src7 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src8, src9); ++ src10 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; + DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, + src7, src8, src9, src10); + DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, + src0, src1, src2, src3); + DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, src9, + src4, src5, src7, src8); +- tmp0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, src0, filter0, filter1, filter2, filter3); +- tmp1 = FILT_8TAP_DPADD_S_H(reg3, reg4, reg5, src1, filter0, filter1, filter2, filter3); +- tmp2 = FILT_8TAP_DPADD_S_H(reg6, reg7, reg8, src4, filter0, filter1, filter2, filter3); +- tmp3 = FILT_8TAP_DPADD_S_H(reg9, reg10, reg11, src5, filter0, filter1, filter2, filter3); ++ tmp0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, src0, filter0, filter1, ++ filter2, filter3); ++ tmp1 = FILT_8TAP_DPADD_S_H(reg3, reg4, reg5, src1, filter0, filter1, ++ filter2, filter3); ++ tmp2 = FILT_8TAP_DPADD_S_H(reg6, reg7, reg8, src4, filter0, filter1, ++ filter2, filter3); ++ tmp3 = FILT_8TAP_DPADD_S_H(reg9, reg10, reg11, src5, filter0, filter1, ++ filter2, filter3); + DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); + DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); + __lsx_vst(tmp0, dst, 0); + dst += dst_stride; + __lsx_vst(tmp1, dst, 0); + dst += dst_stride; +- tmp0 = FILT_8TAP_DPADD_S_H(reg1, reg2, src0, src2, filter0, filter1, filter2, filter3); +- tmp1 = FILT_8TAP_DPADD_S_H(reg4, reg5, src1, src3, filter0, filter1, filter2, filter3); +- tmp2 = FILT_8TAP_DPADD_S_H(reg7, reg8, src4, src7, filter0, filter1, filter2, filter3); +- tmp3 = FILT_8TAP_DPADD_S_H(reg10, reg11, src5, src8, filter0, filter1, filter2, filter3); ++ tmp0 = FILT_8TAP_DPADD_S_H(reg1, reg2, src0, src2, filter0, filter1, ++ filter2, filter3); ++ tmp1 = FILT_8TAP_DPADD_S_H(reg4, reg5, src1, src3, filter0, filter1, ++ filter2, filter3); ++ tmp2 = FILT_8TAP_DPADD_S_H(reg7, reg8, src4, src7, filter0, filter1, ++ filter2, filter3); ++ tmp3 = FILT_8TAP_DPADD_S_H(reg10, reg11, src5, src8, filter0, filter1, ++ filter2, filter3); + DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); + DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); + __lsx_vst(tmp0, dst, 0); +@@ -670,7 +675,7 @@ static void common_vt_8t_16w_mult_lsx(const uint8_t *src, int32_t src_stride, + const int8_t *filter, int32_t height, + int32_t width) + { +- const uint8_t *src_tmp; ++ uint8_t *src_tmp; + uint8_t *dst_tmp; + uint32_t cnt = width >> 4; + __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; +@@ -678,26 +683,34 @@ static void common_vt_8t_16w_mult_lsx(const uint8_t *src, int32_t src_stride, + __m128i reg0, reg1, reg2, reg3, reg4, reg5; + __m128i reg6, reg7, reg8, reg9, reg10, reg11; + __m128i tmp0, tmp1, tmp2, tmp3; ++ int32_t src_stride2 = src_stride << 1; ++ int32_t src_stride3 = src_stride + src_stride2; ++ int32_t src_stride4 = src_stride2 << 1; ++ int32_t dst_stride2 = dst_stride << 1; ++ int32_t dst_stride3 = dst_stride2 + dst_stride; ++ int32_t dst_stride4 = dst_stride2 << 1; ++ uint8_t* _src = (uint8_t*)src - src_stride3; + +- src -= (3 * src_stride); + DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, + filter0, filter1, filter2, filter3); + for (;cnt--;) { + uint32_t loop_cnt = height >> 2; + +- src_tmp = src; ++ src_tmp = _src; + dst_tmp = dst; + +- LSX_LD_4(src_tmp, src_stride, src0, src1, src2, src3); +- src_tmp += src_stride; ++ src0 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride2, ++ src1, src2); ++ src3 = __lsx_vldx(src_tmp, src_stride3); ++ src_tmp += src_stride4; + src4 = __lsx_vld(src_tmp, 0); +- src_tmp += src_stride; +- src5 = __lsx_vld(src_tmp, 0); +- src_tmp += src_stride; +- src6 = __lsx_vld(src_tmp, 0); +- src_tmp += src_stride; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, +- src1, src2, src3); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride2, ++ src5, src6); ++ src_tmp += src_stride3; ++ ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); + DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, +@@ -708,34 +721,44 @@ static void common_vt_8t_16w_mult_lsx(const uint8_t *src, int32_t src_stride, + DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, reg10, reg11); + + for (;loop_cnt--;) { +- LSX_LD_4(src_tmp, src_stride, src7, src8, src9, src10); +- src_tmp += src_stride; +- DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, +- src7, src8, src9, src10); +- DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src0, src1, src2, src3); +- DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src4, src5, src7, src8); +- tmp0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, src0, filter0, filter1, filter2, filter3); +- tmp1 = FILT_8TAP_DPADD_S_H(reg3, reg4, reg5, src1, filter0, filter1, filter2, filter3); +- tmp2 = FILT_8TAP_DPADD_S_H(reg6, reg7, reg8, src4, filter0, filter1, filter2, filter3); +- tmp3 = FILT_8TAP_DPADD_S_H(reg9, reg10, reg11, src5, filter0, filter1, filter2, filter3); +- DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); ++ src7 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride2, ++ src8, src9); ++ src10 = __lsx_vldx(src_tmp, src_stride3); ++ src_tmp += src_stride4; ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, ++ 128, src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, ++ src10, src9, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, ++ src10, src9, src4, src5, src7, src8); ++ tmp0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, src0, filter0, ++ filter1, filter2, filter3); ++ tmp1 = FILT_8TAP_DPADD_S_H(reg3, reg4, reg5, src1, filter0, ++ filter1, filter2, filter3); ++ tmp2 = FILT_8TAP_DPADD_S_H(reg6, reg7, reg8, src4, filter0, ++ filter1, filter2, filter3); ++ tmp3 = FILT_8TAP_DPADD_S_H(reg9, reg10, reg11, src5, filter0, ++ filter1, filter2, filter3); ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, ++ tmp0, tmp1); + DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); + __lsx_vst(tmp0, dst_tmp, 0); +- dst_tmp += dst_stride; +- __lsx_vst(tmp1, dst_tmp, 0); +- dst_tmp += dst_stride; +- tmp0 = FILT_8TAP_DPADD_S_H(reg1, reg2, src0, src2, filter0, filter1, filter2, filter3); +- tmp1 = FILT_8TAP_DPADD_S_H(reg4, reg5, src1, src3, filter0, filter1, filter2, filter3); +- tmp2 = FILT_8TAP_DPADD_S_H(reg7, reg8, src4, src7, filter0, filter1, filter2, filter3); +- tmp3 = FILT_8TAP_DPADD_S_H(reg10, reg11, src5, src8, filter0, filter1, filter2, filter3); +- DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); ++ __lsx_vstx(tmp1, dst_tmp, dst_stride); ++ tmp0 = FILT_8TAP_DPADD_S_H(reg1, reg2, src0, src2, filter0, ++ filter1, filter2, filter3); ++ tmp1 = FILT_8TAP_DPADD_S_H(reg4, reg5, src1, src3, filter0, ++ filter1, filter2, filter3); ++ tmp2 = FILT_8TAP_DPADD_S_H(reg7, reg8, src4, src7, filter0, ++ filter1, filter2, filter3); ++ tmp3 = FILT_8TAP_DPADD_S_H(reg10, reg11, src5, src8, filter0, ++ filter1, filter2, filter3); ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, ++ tmp0, tmp1); + DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); +- __lsx_vst(tmp0, dst_tmp, 0); +- dst_tmp += dst_stride; +- __lsx_vst(tmp1, dst_tmp, 0); +- dst_tmp += dst_stride; ++ __lsx_vstx(tmp0, dst_tmp, dst_stride2); ++ __lsx_vstx(tmp1, dst_tmp, dst_stride3); ++ dst_tmp += dst_stride4; + + reg0 = reg2; + reg1 = src0; +@@ -751,8 +774,8 @@ static void common_vt_8t_16w_mult_lsx(const uint8_t *src, int32_t src_stride, + reg11 = src8; + src6 = src10; + } +- src += 16; +- dst += 16; ++ _src += 16; ++ dst += 16; + } + } + +@@ -767,7 +790,8 @@ static void common_vt_8t_64w_lsx(const uint8_t *src, int32_t src_stride, + uint8_t *dst, int32_t dst_stride, + const int8_t *filter, int32_t height) + { +- common_vt_8t_16w_mult_lsx(src, src_stride, dst, dst_stride, filter, height, 64); ++ common_vt_8t_16w_mult_lsx(src, src_stride, dst, dst_stride, ++ filter, height, 64); + } + + static void common_hv_8ht_8vt_4w_lsx(const uint8_t *src, int32_t src_stride, +@@ -784,23 +808,26 @@ static void common_hv_8ht_8vt_4w_lsx(const uint8_t *src, int32_t src_stride, + __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; + __m128i out0, out1; + __m128i shuff = {0x0F0E0D0C0B0A0908, 0x1716151413121110}; ++ int32_t src_stride2 = src_stride << 1; ++ int32_t src_stride3 = src_stride + src_stride2; ++ int32_t src_stride4 = src_stride2 << 1; ++ uint8_t* _src = (uint8_t*)src - src_stride3 - 3; + + mask0 = __lsx_vld(mc_filt_mask_arr, 16); +- src -= (3 + 3 * src_stride); + DUP4_ARG2(__lsx_vldrepl_h, filter_horiz, 0, filter_horiz, 2, filter_horiz, 4, + filter_horiz, 6, filt_hz0, filt_hz1, filt_hz2, filt_hz3); + DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + +- LSX_LD_4(src, src_stride, src0, src1, src2, src3); +- src += src_stride; +- src4 = __lsx_vld(src, 0); +- src += src_stride; +- src5 = __lsx_vld(src, 0); +- src += src_stride; +- src6 = __lsx_vld(src, 0); +- src += src_stride; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); ++ src0 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src1, src2); ++ src3 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; ++ src4 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src5, src6); ++ _src += src_stride3; ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); + +@@ -819,8 +846,10 @@ static void common_hv_8ht_8vt_4w_lsx(const uint8_t *src, int32_t src_stride, + tmp2 = __lsx_vpackev_b(tmp5, tmp4); + + for (;loop_cnt--;) { +- LSX_LD_4(src, src_stride, src7, src8, src9, src10); +- src += src_stride; ++ src7 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src8, src9); ++ src10 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; + DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, + src7, src8, src9, src10); + tmp3 = HORIZ_8TAP_FILT(src7, src8, mask0, mask1, mask2, mask3, filt_hz0, +@@ -829,8 +858,8 @@ static void common_hv_8ht_8vt_4w_lsx(const uint8_t *src, int32_t src_stride, + tmp4 = __lsx_vpackev_b(tmp3, tmp4); + out0 = FILT_8TAP_DPADD_S_H(tmp0, tmp1, tmp2, tmp4, filt_vt0, filt_vt1, + filt_vt2, filt_vt3); +- src1 = HORIZ_8TAP_FILT(src9, src10, mask0, mask1, mask2, mask3, filt_hz0, +- filt_hz1, filt_hz2, filt_hz3); ++ src1 = HORIZ_8TAP_FILT(src9, src10, mask0, mask1, mask2, mask3, ++ filt_hz0, filt_hz1, filt_hz2, filt_hz3); + src0 = __lsx_vshuf_b(src1, tmp3, shuff); + src0 = __lsx_vpackev_b(src1, src0); + out1 = FILT_8TAP_DPADD_S_H(tmp1, tmp2, tmp4, src0, filt_vt0, filt_vt1, +@@ -866,24 +895,26 @@ static void common_hv_8ht_8vt_8w_lsx(const uint8_t *src, int32_t src_stride, + __m128i mask0, mask1, mask2, mask3; + __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6; + __m128i out0, out1; ++ int32_t src_stride2 = src_stride << 1; ++ int32_t src_stride3 = src_stride + src_stride2; ++ int32_t src_stride4 = src_stride2 << 1; ++ uint8_t* _src = (uint8_t*)src - src_stride3 - 3; + + mask0 = __lsx_vld(mc_filt_mask_arr, 0); +- src -= (3 + 3 * src_stride); +- DUP4_ARG2(__lsx_vldrepl_h, filter_horiz, 0, filter_horiz, 2, filter_horiz, 4, +- filter_horiz, 6, filt_hz0, filt_hz1, filt_hz2, filt_hz3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter_horiz, 0, filter_horiz, 2, filter_horiz, ++ 4, filter_horiz, 6, filt_hz0, filt_hz1, filt_hz2, filt_hz3); + DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + +- LSX_LD_4(src, src_stride, src0, src1, src2, src3); +- src += src_stride; +- src4 = __lsx_vld(src, 0); +- src += src_stride; +- src5 = __lsx_vld(src, 0); +- src += src_stride; +- src6 = __lsx_vld(src, 0); +- src += src_stride; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, +- src2, src3); ++ src0 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src1, src2); ++ src3 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; ++ src4 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src5, src6); ++ _src += src_stride3; ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); + +@@ -909,8 +940,11 @@ static void common_hv_8ht_8vt_8w_lsx(const uint8_t *src, int32_t src_stride, + DUP2_ARG2(__lsx_vpackev_b, src4, src3, src6, src5, tmp5, tmp6); + + for (;loop_cnt--;) { +- LSX_LD_4(src, src_stride, src7, src8, src9, src10); +- src += src_stride; ++ src7 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src8, src9); ++ src10 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; ++ + DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, + src7, src8, src9, src10); + src7 = HORIZ_8TAP_FILT(src7, src7, mask0, mask1, mask2, mask3, filt_hz0, +@@ -928,8 +962,8 @@ static void common_hv_8ht_8vt_8w_lsx(const uint8_t *src, int32_t src_stride, + src1 = __lsx_vpackev_b(src9, src8); + src3 = FILT_8TAP_DPADD_S_H(tmp1, tmp2, tmp3, src1, filt_vt0, filt_vt1, + filt_vt2, filt_vt3); +- src10 = HORIZ_8TAP_FILT(src10, src10, mask0, mask1, mask2, mask3, filt_hz0, +- filt_hz1, filt_hz2, filt_hz3); ++ src10 = HORIZ_8TAP_FILT(src10, src10, mask0, mask1, mask2, mask3, ++ filt_hz0, filt_hz1, filt_hz2, filt_hz3); + src2 = __lsx_vpackev_b(src10, src9); + src4 = FILT_8TAP_DPADD_S_H(tmp5, tmp6, src0, src2, filt_vt0, filt_vt1, + filt_vt2, filt_vt3); +@@ -1035,12 +1069,24 @@ static void copy_width16_lsx(const uint8_t *src, int32_t src_stride, + { + int32_t cnt = height >> 2; + __m128i src0, src1, src2, src3; ++ int32_t src_stride2 = src_stride << 1; ++ int32_t src_stride3 = src_stride + src_stride2; ++ int32_t src_stride4 = src_stride2 << 1; ++ int32_t dst_stride2 = dst_stride << 1; ++ int32_t dst_stride3 = dst_stride2 + dst_stride; ++ int32_t dst_stride4 = dst_stride2 << 1; ++ uint8_t *_src = (uint8_t*)src; + + for (;cnt--;) { +- LSX_LD_4(src, src_stride, src0, src1, src2, src3); +- src += src_stride; +- LSX_ST_4(src0, src1, src2, src3, dst, dst_stride); +- dst += dst_stride; ++ src0 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src1, src2); ++ src3 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; ++ __lsx_vst(src0, dst, 0); ++ __lsx_vstx(src1, dst, dst_stride); ++ __lsx_vstx(src2, dst, dst_stride2); ++ __lsx_vstx(src3, dst, dst_stride3); ++ dst += dst_stride4; + } + } + +@@ -1049,20 +1095,41 @@ static void copy_width32_lsx(const uint8_t *src, int32_t src_stride, + int32_t height) + { + int32_t cnt = height >> 2; +- const uint8_t *src_tmp = src; +- uint8_t *dst_tmp = dst; ++ uint8_t *src_tmp1 = (uint8_t*)src; ++ uint8_t *dst_tmp1 = dst; ++ uint8_t *src_tmp2 = src_tmp1 + 16; ++ uint8_t *dst_tmp2 = dst_tmp1 + 16; ++ int32_t src_stride2 = src_stride << 1; ++ int32_t src_stride3 = src_stride + src_stride2; ++ int32_t src_stride4 = src_stride2 << 1; ++ int32_t dst_stride2 = dst_stride << 1; ++ int32_t dst_stride3 = dst_stride2 + dst_stride; ++ int32_t dst_stride4 = dst_stride2 << 1; + __m128i src0, src1, src2, src3, src4, src5, src6, src7; + + for (;cnt--;) { +- LSX_LD_4(src_tmp, src_stride, src0, src1, src2, src3); +- src_tmp += src_stride; +- +- LSX_LD_4_16(src, src_stride, src4, src5, src6, src7); +- src += src_stride; +- LSX_ST_4(src0, src1, src2, src3, dst_tmp, dst_stride); +- dst_tmp += dst_stride; +- LSX_ST_4_16(src4, src5, src6, src7, dst, dst_stride); +- dst += dst_stride; ++ src0 = __lsx_vld(src_tmp1, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp1, src_stride, src_tmp1, src_stride2, ++ src1, src2); ++ src3 = __lsx_vldx(src_tmp1, src_stride3); ++ src_tmp1 += src_stride4; ++ ++ src4 = __lsx_vld(src_tmp2, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp2, src_stride, src_tmp2, src_stride2, ++ src5, src6); ++ src7 = __lsx_vldx(src_tmp2, src_stride3); ++ src_tmp2 += src_stride4; ++ ++ __lsx_vst(src0, dst_tmp1, 0); ++ __lsx_vstx(src1, dst_tmp1, dst_stride); ++ __lsx_vstx(src2, dst_tmp1, dst_stride2); ++ __lsx_vstx(src3, dst_tmp1, dst_stride3); ++ dst_tmp1 += dst_stride4; ++ __lsx_vst(src4, dst_tmp2, 0); ++ __lsx_vstx(src5, dst_tmp2, dst_stride); ++ __lsx_vstx(src6, dst_tmp2, dst_stride2); ++ __lsx_vstx(src7, dst_tmp2, dst_stride3); ++ dst_tmp2 += dst_stride4; + } + } + +@@ -1075,13 +1142,17 @@ static void copy_width64_lsx(const uint8_t *src, int32_t src_stride, + __m128i src8, src9, src10, src11, src12, src13, src14, src15; + + for (;cnt--;) { +- DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, ++ src0, src1, src2, src3); + src += src_stride; +- DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src4, src5, src6, src7); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, ++ src4, src5, src6, src7); + src += src_stride; +- DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src8, src9, src10, src11); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, ++ src8, src9, src10, src11); + src += src_stride; +- DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, src12, src13, src14, src15); ++ DUP4_ARG2(__lsx_vld, src, 0, src, 16, src, 32, src, 48, ++ src12, src13, src14, src15); + src += src_stride; + __lsx_vst(src0, dst, 0); + __lsx_vst(src1, dst, 16); +@@ -1248,21 +1319,26 @@ static void common_hz_8t_and_aver_dst_8w_lsx(const uint8_t *src, + __m128i mask0, mask1, mask2, mask3; + __m128i tmp0, tmp1, tmp2, tmp3; + __m128i dst0, dst1, dst2, dst3; ++ int32_t src_stride2 = src_stride << 1; ++ int32_t src_stride3 = src_stride2 + src_stride; ++ int32_t src_stride4 = src_stride2 << 1; ++ uint8_t *_src = (uint8_t*)src - 3; + + mask0 = __lsx_vld(mc_filt_mask_arr, 0); +- src -= 3; + DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, + filter0, filter1, filter2, filter3); + + for (;loop_cnt--;) { +- LSX_LD_4(src, src_stride, src0, src1, src2, src3); +- src += src_stride; ++ src0 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src1, src2); ++ src3 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; + DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, + src0, src1, src2, src3); +- HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, +- filter0, filter1, filter2, filter3, tmp0, tmp1, tmp2, tmp3); ++ HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, ++ mask3,filter0, filter1, filter2, filter3, tmp0, tmp1, tmp2, tmp3); + dst0 = __lsx_vldrepl_d(dst_tmp, 0); + dst_tmp += dst_stride; + dst1 = __lsx_vldrepl_d(dst_tmp, 0); +@@ -1293,6 +1369,7 @@ static void common_hz_8t_and_aver_dst_16w_lsx(const uint8_t *src, + int32_t height) + { + int32_t loop_cnt = height >> 1; ++ int32_t dst_stride2 = dst_stride << 1; + uint8_t *dst_tmp = dst; + __m128i src0, src1, src2, src3, filter0, filter1, filter2, filter3; + __m128i mask0, mask1, mask2, mask3, dst0, dst1, dst2, dst3; +@@ -1312,9 +1389,8 @@ static void common_hz_8t_and_aver_dst_16w_lsx(const uint8_t *src, + DUP2_ARG2(__lsx_vld, src, 0, src, 8, src2, src3); + src += src_stride; + dst0 = __lsx_vld(dst_tmp, 0); +- dst_tmp += dst_stride; +- dst1 = __lsx_vld(dst_tmp, 0); +- dst_tmp += dst_stride; ++ dst1 = __lsx_vldx(dst_tmp, dst_stride); ++ dst_tmp += dst_stride2; + DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, + src0, src1, src2, src3); + DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, src2, src2, +@@ -1339,9 +1415,8 @@ static void common_hz_8t_and_aver_dst_16w_lsx(const uint8_t *src, + DUP2_ARG2(__lsx_vxori_b, dst2, 128, dst3, 128, dst2, dst3); + DUP2_ARG2(__lsx_vavgr_bu, dst0, dst2, dst1, dst3, dst0, dst1); + __lsx_vst(dst0, dst, 0); +- dst += dst_stride; +- __lsx_vst(dst1, dst, 0); +- dst += dst_stride; ++ __lsx_vstx(dst1, dst, dst_stride); ++ dst += dst_stride2; + } + } + +@@ -1375,22 +1450,22 @@ static void common_hz_8t_and_aver_dst_32w_lsx(const uint8_t *src, + dst_tmp += dst_stride; + DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, + src0, src1, src2, src3); +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, src2, src2, +- mask0, src3, src3, mask0, tmp0, tmp1, tmp2, tmp3); +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, src2, src2, +- mask1, src3, src3, mask1, tmp4, tmp5, tmp6, tmp7); +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, src2, src2, +- mask2, src3, src3, mask2, tmp8, tmp9, tmp10, tmp11); +- DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, src2, src2, +- mask3, src3, src3, mask3, tmp12, tmp13, tmp14, tmp15); +- DUP4_ARG2(__lsx_vdp2_h_b, tmp0, filter0, tmp1, filter0, tmp2, filter0, tmp3, +- filter0, tmp0, tmp1, tmp2, tmp3); +- DUP4_ARG2(__lsx_vdp2_h_b, tmp8, filter2, tmp9, filter2, tmp10, filter2, tmp11, +- filter2, tmp8, tmp9, tmp10, tmp11); +- DUP4_ARG3(__lsx_vdp2add_h_b, tmp0, tmp4, filter1, tmp1, tmp5, filter1, tmp2, +- tmp6, filter1, tmp3, tmp7, filter1, tmp0, tmp1, tmp2, tmp3); +- DUP4_ARG3(__lsx_vdp2add_h_b, tmp8, tmp12, filter3, tmp9, tmp13, filter3, tmp10, +- tmp14, filter3, tmp11, tmp15, filter3, tmp4, tmp5, tmp6, tmp7); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask0, src1, src1, mask0, src2, ++ src2, mask0, src3, src3, mask0, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask1, src1, src1, mask1, src2, ++ src2, mask1, src3, src3, mask1, tmp4, tmp5, tmp6, tmp7); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask2, src1, src1, mask2, src2, ++ src2, mask2, src3, src3, mask2, tmp8, tmp9, tmp10, tmp11); ++ DUP4_ARG3(__lsx_vshuf_b, src0, src0, mask3, src1, src1, mask3, src2, ++ src2, mask3, src3, src3, mask3, tmp12, tmp13, tmp14, tmp15); ++ DUP4_ARG2(__lsx_vdp2_h_b, tmp0, filter0, tmp1, filter0, tmp2, filter0, ++ tmp3, filter0, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vdp2_h_b, tmp8, filter2, tmp9, filter2, tmp10, filter2, ++ tmp11, filter2, tmp8, tmp9, tmp10, tmp11); ++ DUP4_ARG3(__lsx_vdp2add_h_b, tmp0, tmp4, filter1, tmp1, tmp5, filter1, ++ tmp2, tmp6, filter1, tmp3, tmp7, filter1, tmp0, tmp1, tmp2, tmp3); ++ DUP4_ARG3(__lsx_vdp2add_h_b, tmp8, tmp12, filter3, tmp9, tmp13, filter3, ++ tmp10, tmp14, filter3, tmp11, tmp15, filter3, tmp4, tmp5, tmp6, tmp7); + DUP4_ARG2(__lsx_vsadd_h, tmp0, tmp4, tmp1, tmp5, tmp2, tmp6, tmp3, tmp7, + tmp0, tmp1, tmp2, tmp3); + DUP2_ARG3(__lsx_vssrarni_b_h, tmp1, tmp0, 7, tmp3, tmp2, 7, tmp0, tmp1); +@@ -1429,8 +1504,8 @@ static void common_hz_8t_and_aver_dst_64w_lsx(const uint8_t *src, + DUP2_ARG2(__lsx_vld, dst, 0, dst, 16, dst0, dst1); + DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, + src0, src1, src2, src3); +- HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, +- filter0, filter1, filter2, filter3, out0, out1, out2, out3); ++ HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, ++ mask3, filter0, filter1, filter2, filter3, out0, out1, out2, out3); + DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); + DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + DUP2_ARG2(__lsx_vavgr_bu, out0, dst0, out1, dst1, out0, out1); +@@ -1443,8 +1518,8 @@ static void common_hz_8t_and_aver_dst_64w_lsx(const uint8_t *src, + DUP2_ARG2(__lsx_vld, dst, 32, dst, 48, dst0, dst1); + DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, + src0, src1, src2, src3); +- HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, mask3, +- filter0, filter1, filter2, filter3, out0, out1, out2, out3); ++ HORIZ_8TAP_8WID_4VECS_FILT(src0, src1, src2, src3, mask0, mask1, mask2, ++ mask3, filter0, filter1, filter2, filter3, out0, out1, out2, out3); + DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); + DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + DUP2_ARG2(__lsx_vavgr_bu, out0, dst0, out1, dst1, out0, out1); +@@ -1468,20 +1543,22 @@ static void common_vt_8t_and_aver_dst_4w_lsx(const uint8_t *src, + __m128i reg0, reg1, reg2, reg3, reg4; + __m128i filter0, filter1, filter2, filter3; + __m128i out0, out1; ++ int32_t src_stride2 = src_stride << 1; ++ int32_t src_stride3 = src_stride + src_stride2; ++ int32_t src_stride4 = src_stride2 << 1; ++ uint8_t* _src = (uint8_t*)src - src_stride3; + +- src -= (3 * src_stride); + DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, + filter0, filter1, filter2, filter3); +- LSX_LD_4(src, src_stride, src0, src1, src2, src3); +- src += src_stride; +- src4 = __lsx_vld(src, 0); +- src += src_stride; +- src5 = __lsx_vld(src, 0); +- src += src_stride; +- src6 = __lsx_vld(src, 0); +- src += src_stride; +- DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, tmp0, tmp1, +- tmp2, tmp3); ++ src0 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src1, src2); ++ src3 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; ++ src4 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src5, src6); ++ _src += src_stride3; ++ DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, ++ tmp0, tmp1, tmp2, tmp3); + DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, tmp4, tmp5); + DUP2_ARG2(__lsx_vilvl_d, tmp3, tmp0, tmp4, tmp1, reg0, reg1); + reg2 = __lsx_vilvl_d(tmp5, tmp2); +@@ -1489,8 +1566,10 @@ static void common_vt_8t_and_aver_dst_4w_lsx(const uint8_t *src, + reg2 = __lsx_vxori_b(reg2, 128); + + for (;loop_cnt--;) { +- LSX_LD_4(src, src_stride, src7, src8, src9, src10); +- src += src_stride; ++ src7 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src8, src9); ++ src10 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; + src0 = __lsx_vldrepl_w(dst_tmp, 0); + dst_tmp += dst_stride; + src1 = __lsx_vldrepl_w(dst_tmp, 0); +@@ -1501,12 +1580,14 @@ static void common_vt_8t_and_aver_dst_4w_lsx(const uint8_t *src, + dst_tmp += dst_stride; + DUP2_ARG2(__lsx_vilvl_w, src1, src0, src3, src2, src0, src1); + src0 = __lsx_vilvl_d(src1, src0); +- DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, tmp0, +- tmp1, tmp2, tmp3); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, ++ src9, tmp0, tmp1, tmp2, tmp3); + DUP2_ARG2(__lsx_vilvl_d, tmp1, tmp0, tmp3, tmp2, reg3, reg4); + DUP2_ARG2(__lsx_vxori_b, reg3, 128, reg4, 128, reg3, reg4); +- out0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, reg3, filter0, filter1, filter2, filter3); +- out1 = FILT_8TAP_DPADD_S_H(reg1, reg2, reg3, reg4, filter0, filter1, filter2, filter3); ++ out0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, reg3, filter0, ++ filter1, filter2, filter3); ++ out1 = FILT_8TAP_DPADD_S_H(reg1, reg2, reg3, reg4, filter0, ++ filter1, filter2, filter3); + out0 = __lsx_vssrarni_b_h(out1, out0, 7); + out0 = __lsx_vxori_b(out0, 128); + out0 = __lsx_vavgr_bu(out0, src0); +@@ -1538,28 +1619,34 @@ static void common_vt_8t_and_aver_dst_8w_lsx(const uint8_t *src, + __m128i reg0, reg1, reg2, reg3, reg4, reg5; + __m128i filter0, filter1, filter2, filter3; + __m128i out0, out1, out2, out3; ++ int32_t src_stride2 = src_stride << 1; ++ int32_t src_stride3 = src_stride + src_stride2; ++ int32_t src_stride4 = src_stride2 << 1; ++ uint8_t* _src = (uint8_t*)src - src_stride3; + +- src -= (3 * src_stride); + DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, + filter0, filter1, filter2, filter3); + +- LSX_LD_4(src, src_stride, src0, src1, src2, src3); +- src += src_stride; +- src4 = __lsx_vld(src, 0); +- src += src_stride; +- src5 = __lsx_vld(src, 0); +- src += src_stride; +- src6 = __lsx_vld(src, 0); +- src += src_stride; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); ++ src0 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src1, src2); ++ src3 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; ++ src4 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src5, src6); ++ _src += src_stride3; ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); +- DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, reg0, reg1, reg2, reg3); ++ DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, ++ src1, reg0, reg1, reg2, reg3); + DUP2_ARG2(__lsx_vilvl_b, src4, src3, src6, src5, reg4, reg5); + + for (;loop_cnt--;) { +- LSX_LD_4(src, src_stride, src7, src8, src9, src10); +- src += src_stride; ++ src7 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src8, src9); ++ src10 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; + src0 = __lsx_vldrepl_d(dst_tmp, 0); + dst_tmp += dst_stride; + src1 = __lsx_vldrepl_d(dst_tmp, 0); +@@ -1571,12 +1658,16 @@ static void common_vt_8t_and_aver_dst_8w_lsx(const uint8_t *src, + DUP2_ARG2(__lsx_vilvl_d, src1, src0, src3, src2, src0, src1); + DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, + src7, src8, src9, src10); +- DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, +- tmp0, tmp1, tmp2, tmp3); +- out0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, tmp0, filter0, filter1, filter2, filter3); +- out1 = FILT_8TAP_DPADD_S_H(reg3, reg4, reg5, tmp1, filter0, filter1, filter2, filter3); +- out2 = FILT_8TAP_DPADD_S_H(reg1, reg2, tmp0, tmp2, filter0, filter1, filter2, filter3); +- out3 = FILT_8TAP_DPADD_S_H(reg4, reg5, tmp1, tmp3, filter0, filter1, filter2, filter3); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, ++ src9, tmp0, tmp1, tmp2, tmp3); ++ out0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, tmp0, filter0, ++ filter1, filter2, filter3); ++ out1 = FILT_8TAP_DPADD_S_H(reg3, reg4, reg5, tmp1, filter0, ++ filter1, filter2, filter3); ++ out2 = FILT_8TAP_DPADD_S_H(reg1, reg2, tmp0, tmp2, filter0, ++ filter1, filter2, filter3); ++ out3 = FILT_8TAP_DPADD_S_H(reg4, reg5, tmp1, tmp3, filter0, ++ filter1, filter2, filter3); + DUP2_ARG3(__lsx_vssrarni_b_h, out1, out0, 7, out3, out2, 7, out0, out1); + DUP2_ARG2(__lsx_vxori_b, out0, 128, out1, 128, out0, out1); + DUP2_ARG2(__lsx_vavgr_bu, out0, src0, out1, src1, out0, out1); +@@ -1607,34 +1698,39 @@ static void common_vt_8t_and_aver_dst_16w_mult_lsx(const uint8_t *src, + int32_t height, + int32_t width) + { +- const uint8_t *src_tmp; +- uint8_t *dst_tmp; ++ uint8_t *src_tmp; + uint32_t cnt = width >> 4; + __m128i src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10; + __m128i filter0, filter1, filter2, filter3; + __m128i reg0, reg1, reg2, reg3, reg4, reg5; + __m128i reg6, reg7, reg8, reg9, reg10, reg11; + __m128i tmp0, tmp1, tmp2, tmp3; ++ int32_t src_stride2 = src_stride << 1; ++ int32_t src_stride3 = src_stride + src_stride2; ++ int32_t src_stride4 = src_stride2 << 1; ++ int32_t dst_stride2 = dst_stride << 1; ++ int32_t dst_stride3 = dst_stride2 + dst_stride; ++ int32_t dst_stride4 = dst_stride2 << 1; ++ uint8_t *_src = (uint8_t*)src - src_stride3; + +- src -= (3 * src_stride); + DUP4_ARG2(__lsx_vldrepl_h, filter, 0, filter, 2, filter, 4, filter, 6, + filter0, filter1, filter2, filter3); + for (;cnt--;) { + uint32_t loop_cnt = height >> 2; + uint8_t *dst_reg = dst; + +- src_tmp = src; +- dst_tmp = dst; +- +- LSX_LD_4(src_tmp, src_stride, src0, src1, src2, src3); +- src_tmp += src_stride; ++ src_tmp = _src; ++ src0 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride2, ++ src1, src2); ++ src3 = __lsx_vldx(src_tmp, src_stride3); ++ src_tmp += src_stride4; + src4 = __lsx_vld(src_tmp, 0); +- src_tmp += src_stride; +- src5 = __lsx_vld(src_tmp, 0); +- src_tmp += src_stride; +- src6 = __lsx_vld(src_tmp, 0); +- src_tmp += src_stride; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride2, ++ src5, src6); ++ src_tmp += src_stride3; ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); + DUP4_ARG2(__lsx_vilvl_b, src1, src0, src3, src2, src5, src4, src2, src1, +@@ -1645,44 +1741,50 @@ static void common_vt_8t_and_aver_dst_16w_mult_lsx(const uint8_t *src, + DUP2_ARG2(__lsx_vilvh_b, src4, src3, src6, src5, reg10, reg11); + + for (;loop_cnt--;) { +- LSX_LD_4(src_tmp, src_stride, src7, src8, src9, src10); +- src_tmp += src_stride; +- DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, +- src7, src8, src9, src10); +- DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src0, src1, src2, src3); +- DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, src10, src9, +- src4, src5, src7, src8); +- tmp0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, src0, filter0, filter1, filter2, filter3); +- tmp1 = FILT_8TAP_DPADD_S_H(reg3, reg4, reg5, src1, filter0, filter1, filter2, filter3); +- tmp2 = FILT_8TAP_DPADD_S_H(reg6, reg7, reg8, src4, filter0, filter1, filter2, filter3); +- tmp3 = FILT_8TAP_DPADD_S_H(reg9, reg10, reg11, src5, filter0, filter1, filter2, filter3); +- DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); ++ src7 = __lsx_vld(src_tmp, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp, src_stride, src_tmp, src_stride2, ++ src8, src9); ++ src10 = __lsx_vldx(src_tmp, src_stride3); ++ src_tmp += src_stride4; ++ DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, ++ 128, src7, src8, src9, src10); ++ DUP4_ARG2(__lsx_vilvl_b, src7, src6, src8, src7, src9, src8, ++ src10, src9, src0, src1, src2, src3); ++ DUP4_ARG2(__lsx_vilvh_b, src7, src6, src8, src7, src9, src8, ++ src10, src9, src4, src5, src7, src8); ++ tmp0 = FILT_8TAP_DPADD_S_H(reg0, reg1, reg2, src0, filter0, ++ filter1, filter2, filter3); ++ tmp1 = FILT_8TAP_DPADD_S_H(reg3, reg4, reg5, src1, filter0, ++ filter1, filter2, filter3); ++ tmp2 = FILT_8TAP_DPADD_S_H(reg6, reg7, reg8, src4, filter0, ++ filter1, filter2, filter3); ++ tmp3 = FILT_8TAP_DPADD_S_H(reg9, reg10, reg11, src5, filter0, ++ filter1, filter2, filter3); ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, ++ tmp0, tmp1); + DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); + tmp2 = __lsx_vld(dst_reg, 0); +- dst_reg += dst_stride; +- tmp3 = __lsx_vld(dst_reg, 0); +- dst_reg += dst_stride; ++ tmp3 = __lsx_vldx(dst_reg, dst_stride); + DUP2_ARG2(__lsx_vavgr_bu, tmp0, tmp2, tmp1, tmp3, tmp0, tmp1); +- __lsx_vst(tmp0, dst_tmp, 0); +- dst_tmp += dst_stride; +- __lsx_vst(tmp1, dst_tmp, 0); +- dst_tmp += dst_stride; +- tmp0 = FILT_8TAP_DPADD_S_H(reg1, reg2, src0, src2, filter0, filter1, filter2, filter3); +- tmp1 = FILT_8TAP_DPADD_S_H(reg4, reg5, src1, src3, filter0, filter1, filter2, filter3); +- tmp2 = FILT_8TAP_DPADD_S_H(reg7, reg8, src4, src7, filter0, filter1, filter2, filter3); +- tmp3 = FILT_8TAP_DPADD_S_H(reg10, reg11, src5, src8, filter0, filter1, filter2, filter3); +- DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, tmp0, tmp1); ++ __lsx_vst(tmp0, dst_reg, 0); ++ __lsx_vstx(tmp1, dst_reg, dst_stride); ++ tmp0 = FILT_8TAP_DPADD_S_H(reg1, reg2, src0, src2, filter0, ++ filter1, filter2, filter3); ++ tmp1 = FILT_8TAP_DPADD_S_H(reg4, reg5, src1, src3, filter0, ++ filter1, filter2, filter3); ++ tmp2 = FILT_8TAP_DPADD_S_H(reg7, reg8, src4, src7, filter0, ++ filter1, filter2, filter3); ++ tmp3 = FILT_8TAP_DPADD_S_H(reg10, reg11, src5, src8, filter0, ++ filter1, filter2, filter3); ++ DUP2_ARG3(__lsx_vssrarni_b_h, tmp2, tmp0, 7, tmp3, tmp1, 7, ++ tmp0, tmp1); + DUP2_ARG2(__lsx_vxori_b, tmp0, 128, tmp1, 128, tmp0, tmp1); +- tmp2 = __lsx_vld(dst_reg, 0); +- dst_reg += dst_stride; +- tmp3 = __lsx_vld(dst_reg, 0); +- dst_reg += dst_stride; ++ tmp2 = __lsx_vldx(dst_reg, dst_stride2); ++ tmp3 = __lsx_vldx(dst_reg, dst_stride3); + DUP2_ARG2(__lsx_vavgr_bu, tmp0, tmp2, tmp1, tmp3, tmp0, tmp1); +- __lsx_vst(tmp0, dst_tmp, 0); +- dst_tmp += dst_stride; +- __lsx_vst(tmp1, dst_tmp, 0); +- dst_tmp += dst_stride; ++ __lsx_vstx(tmp0, dst_reg, dst_stride2); ++ __lsx_vstx(tmp1, dst_reg, dst_stride3); ++ dst_reg += dst_stride4; + + reg0 = reg2; + reg1 = src0; +@@ -1698,8 +1800,8 @@ static void common_vt_8t_and_aver_dst_16w_mult_lsx(const uint8_t *src, + reg11 = src8; + src6 = src10; + } +- src += 16; +- dst += 16; ++ _src += 16; ++ dst += 16; + } + } + +@@ -1750,23 +1852,27 @@ static void common_hv_8ht_8vt_and_aver_dst_4w_lsx(const uint8_t *src, + __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; + __m128i out0, out1; + __m128i shuff = {0x0F0E0D0C0B0A0908, 0x1716151413121110}; ++ int32_t src_stride2 = src_stride << 1; ++ int32_t src_stride3 = src_stride + src_stride2; ++ int32_t src_stride4 = src_stride2 << 1; ++ uint8_t* _src = (uint8_t*)src - 3 - src_stride3; + + mask0 = __lsx_vld(mc_filt_mask_arr, 16); +- src -= (3 + 3 * src_stride); +- DUP4_ARG2(__lsx_vldrepl_h, filter_horiz, 0, filter_horiz, 2, filter_horiz, 4, +- filter_horiz, 6, filt_hz0, filt_hz1, filt_hz2, filt_hz3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter_horiz, 0, filter_horiz, 2, filter_horiz, ++ 4, filter_horiz, 6, filt_hz0, filt_hz1, filt_hz2, filt_hz3); + DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + +- LSX_LD_4(src, src_stride, src0, src1, src2, src3); +- src += src_stride; +- src4 = __lsx_vld(src, 0); +- src += src_stride; +- src5 = __lsx_vld(src, 0); +- src += src_stride; +- src6 = __lsx_vld(src, 0); +- src += src_stride; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); ++ src0 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src1, src2); ++ src3 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; ++ src4 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src5, src6); ++ _src += src_stride3; ++ ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); + +@@ -1785,8 +1891,10 @@ static void common_hv_8ht_8vt_and_aver_dst_4w_lsx(const uint8_t *src, + tmp2 = __lsx_vpackev_b(tmp5, tmp4); + + for (;loop_cnt--;) { +- LSX_LD_4(src, src_stride, src7, src8, src9, src10); +- src += src_stride; ++ src7 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src8, src9); ++ src10 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; + src2 = __lsx_vldrepl_w(dst_tmp, 0); + dst_tmp += dst_stride; + src3 = __lsx_vldrepl_w(dst_tmp, 0); +@@ -1805,8 +1913,8 @@ static void common_hv_8ht_8vt_and_aver_dst_4w_lsx(const uint8_t *src, + tmp4 = __lsx_vpackev_b(tmp3, tmp4); + out0 = FILT_8TAP_DPADD_S_H(tmp0, tmp1, tmp2, tmp4, filt_vt0, filt_vt1, + filt_vt2, filt_vt3); +- src1 = HORIZ_8TAP_FILT(src9, src10, mask0, mask1, mask2, mask3, filt_hz0, +- filt_hz1, filt_hz2, filt_hz3); ++ src1 = HORIZ_8TAP_FILT(src9, src10, mask0, mask1, mask2, mask3, ++ filt_hz0, filt_hz1, filt_hz2, filt_hz3); + src0 = __lsx_vshuf_b(src1, tmp3, shuff); + src0 = __lsx_vpackev_b(src1, src0); + out1 = FILT_8TAP_DPADD_S_H(tmp1, tmp2, tmp4, src0, filt_vt0, filt_vt1, +@@ -1846,23 +1954,26 @@ static void common_hv_8ht_8vt_and_aver_dst_8w_lsx(const uint8_t *src, + __m128i mask0, mask1, mask2, mask3; + __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6; + __m128i out0, out1; ++ int32_t src_stride2 = src_stride << 1; ++ int32_t src_stride3 = src_stride + src_stride2; ++ int32_t src_stride4 = src_stride2 << 1; ++ uint8_t* _src = (uint8_t*)src - 3 - src_stride3; + + mask0 = __lsx_vld(mc_filt_mask_arr, 0); +- src -= (3 + 3 * src_stride); +- DUP4_ARG2(__lsx_vldrepl_h, filter_horiz, 0, filter_horiz, 2, filter_horiz, 4, +- filter_horiz, 6, filt_hz0, filt_hz1, filt_hz2, filt_hz3); ++ DUP4_ARG2(__lsx_vldrepl_h, filter_horiz, 0, filter_horiz, 2, filter_horiz, ++ 4, filter_horiz, 6, filt_hz0, filt_hz1, filt_hz2, filt_hz3); + DUP2_ARG2(__lsx_vaddi_bu, mask0, 2, mask0, 4, mask1, mask2); + mask3 = __lsx_vaddi_bu(mask0, 6); + +- LSX_LD_4(src, src_stride, src0, src1, src2, src3); +- src += src_stride; +- src4 = __lsx_vld(src, 0); +- src += src_stride; +- src5 = __lsx_vld(src, 0); +- src += src_stride; +- src6 = __lsx_vld(src, 0); +- src += src_stride; +- DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, src0, src1, src2, src3); ++ src0 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src1, src2); ++ src3 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; ++ src4 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src5, src6); ++ _src += src_stride3; ++ DUP4_ARG2(__lsx_vxori_b, src0, 128, src1, 128, src2, 128, src3, 128, ++ src0, src1, src2, src3); + DUP2_ARG2(__lsx_vxori_b, src4, 128, src5, 128, src4, src5); + src6 = __lsx_vxori_b(src6, 128); + +@@ -1888,8 +1999,10 @@ static void common_hv_8ht_8vt_and_aver_dst_8w_lsx(const uint8_t *src, + DUP2_ARG2(__lsx_vpackev_b, src4, src3, src6, src5, tmp5, tmp6); + + for (;loop_cnt--;) { +- LSX_LD_4(src, src_stride, src7, src8, src9, src10); +- src += src_stride; ++ src7 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src8, src9); ++ src10 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; + + DUP4_ARG2(__lsx_vxori_b, src7, 128, src8, 128, src9, 128, src10, 128, + src7, src8, src9, src10); +@@ -2049,19 +2162,33 @@ static void avg_width16_lsx(const uint8_t *src, int32_t src_stride, + int32_t height) + { + int32_t cnt = height >> 2; +- uint8_t *dst_tmp = dst; + __m128i src0, src1, src2, src3; + __m128i dst0, dst1, dst2, dst3; ++ int32_t src_stride2 = src_stride << 1; ++ int32_t src_stride3 = src_stride + src_stride2; ++ int32_t src_stride4 = src_stride2 << 1; ++ int32_t dst_stride2 = dst_stride << 1; ++ int32_t dst_stride3 = dst_stride2 + dst_stride; ++ int32_t dst_stride4 = dst_stride2 << 1; ++ uint8_t* _src = (uint8_t*)src; + + for (;cnt--;) { +- LSX_LD_4(src, src_stride, src0, src1, src2, src3); +- src += src_stride; +- LSX_LD_4(dst_tmp, dst_stride, dst0, dst1, dst2, dst3); +- dst_tmp += dst_stride; ++ src0 = __lsx_vld(_src, 0); ++ DUP2_ARG2(__lsx_vldx, _src, src_stride, _src, src_stride2, src1, src2); ++ src3 = __lsx_vldx(_src, src_stride3); ++ _src += src_stride4; ++ ++ dst0 = __lsx_vld(dst, 0); ++ DUP2_ARG2(__lsx_vldx, dst, dst_stride, dst, dst_stride2, ++ dst1, dst2); ++ dst3 = __lsx_vldx(dst, dst_stride3); + DUP4_ARG2(__lsx_vavgr_bu, src0, dst0, src1, dst1, + src2, dst2, src3, dst3, dst0, dst1, dst2, dst3); +- LSX_ST_4(dst0, dst1, dst2, dst3, dst, dst_stride); +- dst += dst_stride; ++ __lsx_vst(dst0, dst, 0); ++ __lsx_vstx(dst1, dst, dst_stride); ++ __lsx_vstx(dst2, dst, dst_stride2); ++ __lsx_vstx(dst3, dst, dst_stride3); ++ dst += dst_stride4; + } + } + +@@ -2070,29 +2197,56 @@ static void avg_width32_lsx(const uint8_t *src, int32_t src_stride, + int32_t height) + { + int32_t cnt = height >> 2; +- const uint8_t *src_tmp = src; +- uint8_t *dst_tmp, *dst_tmp1, *dst_tmp2; ++ uint8_t *src_tmp1 = (uint8_t*)src; ++ uint8_t *src_tmp2 = src_tmp1 + 16; ++ uint8_t *dst_tmp1, *dst_tmp2; + __m128i src0, src1, src2, src3, src4, src5, src6, src7; + __m128i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; +- +- dst_tmp = dst_tmp1 = dst_tmp2 = dst; ++ int32_t src_stride2 = src_stride << 1; ++ int32_t src_stride3 = src_stride + src_stride2; ++ int32_t src_stride4 = src_stride2 << 1; ++ int32_t dst_stride2 = dst_stride << 1; ++ int32_t dst_stride3 = dst_stride2 + dst_stride; ++ int32_t dst_stride4 = dst_stride2 << 1; ++ ++ dst_tmp1 = dst; ++ dst_tmp2 = dst + 16; + for (;cnt--;) { +- LSX_LD_4(src, src_stride, src0, src2, src4, src6); +- src += src_stride; +- LSX_LD_4_16(src_tmp, src_stride, src1, src3, src5, src7); +- src_tmp += src_stride; +- LSX_LD_4(dst_tmp1, dst_stride, dst0, dst2, dst4, dst6); +- dst_tmp1 += dst_stride; +- LSX_LD_4_16(dst_tmp2, dst_stride, dst1, dst3, dst5, dst7); +- dst_tmp2 += dst_stride; ++ src0 = __lsx_vld(src_tmp1, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp1, src_stride, src_tmp1, src_stride2, ++ src2, src4); ++ src6 = __lsx_vldx(src_tmp1, src_stride3); ++ src_tmp1 += src_stride4; ++ ++ src1 = __lsx_vld(src_tmp2, 0); ++ DUP2_ARG2(__lsx_vldx, src_tmp2, src_stride, src_tmp2, src_stride2, ++ src3, src5); ++ src7 = __lsx_vldx(src_tmp2, src_stride3); ++ src_tmp2 += src_stride4; ++ ++ dst0 = __lsx_vld(dst_tmp1, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp1, dst_stride, dst_tmp1, dst_stride2, ++ dst2, dst4); ++ dst6 = __lsx_vldx(dst_tmp1, dst_stride3); ++ dst1 = __lsx_vld(dst_tmp2, 0); ++ DUP2_ARG2(__lsx_vldx, dst_tmp2, dst_stride, dst_tmp2, dst_stride2, ++ dst3, dst5); ++ dst7 = __lsx_vldx(dst_tmp2, dst_stride3); ++ + DUP4_ARG2(__lsx_vavgr_bu, src0, dst0, src1, dst1, + src2, dst2, src3, dst3, dst0, dst1, dst2, dst3); + DUP4_ARG2(__lsx_vavgr_bu, src4, dst4, src5, dst5, + src6, dst6, src7, dst7, dst4, dst5, dst6, dst7); +- LSX_ST_4(dst0, dst2, dst4, dst6, dst_tmp, dst_stride); +- dst_tmp += dst_stride; +- LSX_ST_4_16(dst1, dst3, dst5, dst7, dst, dst_stride); +- dst += dst_stride; ++ __lsx_vst(dst0, dst_tmp1, 0); ++ __lsx_vstx(dst2, dst_tmp1, dst_stride); ++ __lsx_vstx(dst4, dst_tmp1, dst_stride2); ++ __lsx_vstx(dst6, dst_tmp1, dst_stride3); ++ dst_tmp1 += dst_stride4; ++ __lsx_vst(dst1, dst_tmp2, 0); ++ __lsx_vstx(dst3, dst_tmp2, dst_stride); ++ __lsx_vstx(dst5, dst_tmp2, dst_stride2); ++ __lsx_vstx(dst7, dst_tmp2, dst_stride3); ++ dst_tmp2 += dst_stride4; + } + } + +diff --git a/libavcodec/loongarch/vp9dsp_init_loongarch.c b/libavcodec/loongarch/vp9dsp_init_loongarch.c +index f85abde11d..e49625ad5f 100644 +--- a/libavcodec/loongarch/vp9dsp_init_loongarch.c ++++ b/libavcodec/loongarch/vp9dsp_init_loongarch.c +@@ -37,10 +37,10 @@ + init_subpel1(1, idx, idxh, idxv, 32, dir, type); \ + init_subpel1(2, idx, idxh, idxv, 16, dir, type); \ + init_subpel1(3, idx, idxh, idxv, 8, dir, type); \ +- init_subpel1(4, idx, idxh, idxv, 4, dir, type) ++ init_subpel1(4, idx, idxh, idxv, 4, dir, type); + + #define init_subpel3(idx, type) \ +- init_subpel2(idx, 1, 0, h, type) \ ++ init_subpel2(idx, 1, 0, h, type); \ + init_subpel2(idx, 0, 1, v, type); \ + init_subpel2(idx, 1, 1, hv, type); + +@@ -48,32 +48,11 @@ + dsp->mc[idx1][FILTER_8TAP_SMOOTH ][idx2][0][0] = ff_##type##sz##_lsx; \ + dsp->mc[idx1][FILTER_8TAP_REGULAR][idx2][0][0] = ff_##type##sz##_lsx; \ + dsp->mc[idx1][FILTER_8TAP_SHARP ][idx2][0][0] = ff_##type##sz##_lsx; \ +- dsp->mc[idx1][FILTER_BILINEAR ][idx2][0][0] = ff_##type##sz##_lsx ++ dsp->mc[idx1][FILTER_BILINEAR ][idx2][0][0] = ff_##type##sz##_lsx; + + #define init_copy(idx, sz) \ + init_fpel(idx, 0, sz, copy); \ +- init_fpel(idx, 1, sz, avg) +- +-static av_cold void vp9dsp_mc_init_lsx(VP9DSPContext *dsp, int bpp) +-{ +- int cpu_flags = av_get_cpu_flags(); +- if (have_lsx(cpu_flags)) { +- if (bpp == 8) { +- init_subpel3(0, put); +- init_subpel3(1, avg); +- init_copy(0, 64); +- init_copy(1, 32); +- init_copy(2, 16); +- init_copy(3, 8); +- } +- } +-} +- +-#undef init_subpel1 +-#undef init_subpel2 +-#undef init_subpel3 +-#undef init_copy +-#undef init_fpel ++ init_fpel(idx, 1, sz, avg); + + #define init_intra_pred1_lsx(tx, sz) \ + dsp->intra_pred[tx][VERT_PRED] = ff_vert_##sz##_lsx; \ +@@ -92,51 +71,33 @@ static av_cold void vp9dsp_mc_init_lsx(VP9DSPContext *dsp, int bpp) + dsp->intra_pred[tx][TOP_DC_PRED] = ff_dc_top_##sz##_lsx; \ + dsp->intra_pred[tx][TM_VP8_PRED] = ff_tm_##sz##_lsx; \ + +-static av_cold void vp9dsp_intrapred_init_lsx(VP9DSPContext *dsp, int bpp) +-{ +- int cpu_flags = av_get_cpu_flags(); +- if (have_lsx(cpu_flags)) { +- if (bpp == 8) { +- init_intra_pred1_lsx(TX_16X16, 16x16); +- init_intra_pred1_lsx(TX_32X32, 32x32); +- init_intra_pred2_lsx(TX_4X4, 4x4); +- init_intra_pred2_lsx(TX_8X8, 8x8); +- } +- } +-} +- +-#undef init_intra_pred_lsx +-#undef init_intra_pred_lsx +- + #define init_idct(tx, nm) \ + dsp->itxfm_add[tx][DCT_DCT] = \ + dsp->itxfm_add[tx][ADST_DCT] = \ + dsp->itxfm_add[tx][DCT_ADST] = \ +- dsp->itxfm_add[tx][ADST_ADST] = nm##_add_lsx ++ dsp->itxfm_add[tx][ADST_ADST] = nm##_add_lsx; + + #define init_itxfm(tx, sz) \ +- dsp->itxfm_add[tx][DCT_DCT] = ff_idct_idct_##sz##_add_lsx ++ dsp->itxfm_add[tx][DCT_DCT] = ff_idct_idct_##sz##_add_lsx; + +-static av_cold void vp9dsp_itxfm_init_lsx(VP9DSPContext *dsp, int bpp) ++av_cold void ff_vp9dsp_init_loongarch(VP9DSPContext *dsp, int bpp) + { + int cpu_flags = av_get_cpu_flags(); +- if (have_lsx(cpu_flags)) { ++ if (have_lsx(cpu_flags)) + if (bpp == 8) { ++ init_subpel3(0, put); ++ init_subpel3(1, avg); ++ init_copy(0, 64); ++ init_copy(1, 32); ++ init_copy(2, 16); ++ init_copy(3, 8); ++ init_intra_pred1_lsx(TX_16X16, 16x16); ++ init_intra_pred1_lsx(TX_32X32, 32x32); ++ init_intra_pred2_lsx(TX_4X4, 4x4); ++ init_intra_pred2_lsx(TX_8X8, 8x8); + init_itxfm(TX_8X8, 8x8); + init_itxfm(TX_16X16, 16x16); + init_idct(TX_32X32, ff_idct_idct_32x32); +- } +- } +-} +- +-#undef init_idct +-#undef init_itxfm +- +-static av_cold void vp9dsp_loopfilter_init_lsx(VP9DSPContext *dsp, int bpp) +-{ +- int cpu_flags = av_get_cpu_flags(); +- if (have_lsx(cpu_flags)) { +- if (bpp == 8) { + dsp->loop_filter_8[0][0] = ff_loop_filter_h_4_8_lsx; + dsp->loop_filter_8[0][1] = ff_loop_filter_v_4_8_lsx; + dsp->loop_filter_8[1][0] = ff_loop_filter_h_8_8_lsx; +@@ -156,23 +117,14 @@ static av_cold void vp9dsp_loopfilter_init_lsx(VP9DSPContext *dsp, int bpp) + dsp->loop_filter_mix2[1][1][0] = ff_loop_filter_h_88_16_lsx; + dsp->loop_filter_mix2[1][1][1] = ff_loop_filter_v_88_16_lsx; + } +- } + } + +-static av_cold void vp9dsp_init_lsx(VP9DSPContext *dsp, int bpp) +-{ +- int cpu_flags = av_get_cpu_flags(); +- if (have_lsx(cpu_flags)) { +- vp9dsp_mc_init_lsx(dsp, bpp); +- vp9dsp_intrapred_init_lsx(dsp, bpp); +- vp9dsp_loopfilter_init_lsx(dsp, bpp); +- vp9dsp_itxfm_init_lsx(dsp, bpp); +- } +-} +- +-av_cold void ff_vp9dsp_init_loongarch(VP9DSPContext *dsp, int bpp) +-{ +- int cpu_flags = av_get_cpu_flags(); +- if (have_lsx(cpu_flags)) +- vp9dsp_init_lsx(dsp, bpp); +-} ++#undef init_subpel1 ++#undef init_subpel2 ++#undef init_subpel3 ++#undef init_copy ++#undef init_fpel ++#undef init_intra_pred1_lsx ++#undef init_intra_pred2_lsx ++#undef init_idct ++#undef init_itxfm +diff --git a/libavutil/loongarch/loongson_intrinsics.h b/libavutil/loongarch/loongson_intrinsics.h +index 865d6ae9bd..eb256863c8 100644 +--- a/libavutil/loongarch/loongson_intrinsics.h ++++ b/libavutil/loongarch/loongson_intrinsics.h +@@ -33,8 +33,7 @@ + * Xiwei Gu + * Lu Wang + * +- * This file is maintained in LSOM project, don't change it directly. +- * You can get the latest version of this header from: *** ++ * This file is a header file for loongarch builtin extension. + * + */ + +@@ -43,71 +42,50 @@ + + /** + * MAJOR version: Macro usage changes. +- * MINOR version: Add new functions, or bug fix. ++ * MINOR version: Add new functions, or bug fixes. + * MICRO version: Comment changes or implementation changes. + */ + #define LSOM_VERSION_MAJOR 1 +-#define LSOM_VERSION_MINOR 0 ++#define LSOM_VERSION_MINOR 1 + #define LSOM_VERSION_MICRO 0 + + #define DUP2_ARG1(_INS, _IN0, _IN1, _OUT0, _OUT1) \ +-{ \ +- _OUT0 = _INS(_IN0); \ +- _OUT1 = _INS(_IN1); \ +-} ++ { \ ++ _OUT0 = _INS(_IN0); \ ++ _OUT1 = _INS(_IN1); \ ++ } + + #define DUP2_ARG2(_INS, _IN0, _IN1, _IN2, _IN3, _OUT0, _OUT1) \ +-{ \ +- _OUT0 = _INS(_IN0, _IN1); \ +- _OUT1 = _INS(_IN2, _IN3); \ +-} ++ { \ ++ _OUT0 = _INS(_IN0, _IN1); \ ++ _OUT1 = _INS(_IN2, _IN3); \ ++ } + + #define DUP2_ARG3(_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _OUT0, _OUT1) \ +-{ \ +- _OUT0 = _INS(_IN0, _IN1, _IN2); \ +- _OUT1 = _INS(_IN3, _IN4, _IN5); \ +-} ++ { \ ++ _OUT0 = _INS(_IN0, _IN1, _IN2); \ ++ _OUT1 = _INS(_IN3, _IN4, _IN5); \ ++ } + + #define DUP4_ARG1(_INS, _IN0, _IN1, _IN2, _IN3, _OUT0, _OUT1, _OUT2, _OUT3) \ +-{ \ +- DUP2_ARG1(_INS, _IN0, _IN1, _OUT0, _OUT1); \ +- DUP2_ARG1(_INS, _IN2, _IN3, _OUT2, _OUT3); \ +-} +- +-#define DUP4_ARG2(_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _IN6, _IN7, \ +- _OUT0, _OUT1, _OUT2, _OUT3) \ +-{ \ +- DUP2_ARG2(_INS, _IN0, _IN1, _IN2, _IN3, _OUT0, _OUT1); \ +- DUP2_ARG2(_INS, _IN4, _IN5, _IN6, _IN7, _OUT2, _OUT3); \ +-} +- +-#define DUP4_ARG3(_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _IN6, _IN7, \ +- _IN8, _IN9, _IN10, _IN11, _OUT0, _OUT1, _OUT2, _OUT3) \ +-{ \ +- DUP2_ARG3(_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _OUT0, _OUT1); \ +- DUP2_ARG3(_INS, _IN6, _IN7, _IN8, _IN9, _IN10, _IN11, _OUT2, _OUT3); \ +-} +- +-/* +- * ============================================================================= +- * Description : Print out elements in vector. +- * Arguments : Inputs - RTYPE, _element_num, _in0, _enter +- * Outputs - +- * Details : Print out '_element_num' elements in 'RTYPE' vector '_in0', if +- * '_enter' is TRUE, prefix "\nVP:" will be added first. +- * Example : VECT_PRINT(v4i32,4,in0,1); // in0: 1,2,3,4 +- * VP:1,2,3,4, +- * ============================================================================= +- */ +-#define VECT_PRINT(RTYPE, element_num, in0, enter) \ +-{ \ +- RTYPE _tmp0 = (RTYPE)in0; \ +- int _i = 0; \ +- if (enter) \ +- printf("\nVP:"); \ +- for(_i = 0; _i < element_num; _i++) \ +- printf("%d,",_tmp0[_i]); \ +-} ++ { \ ++ DUP2_ARG1(_INS, _IN0, _IN1, _OUT0, _OUT1); \ ++ DUP2_ARG1(_INS, _IN2, _IN3, _OUT2, _OUT3); \ ++ } ++ ++#define DUP4_ARG2(_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _IN6, _IN7, _OUT0, \ ++ _OUT1, _OUT2, _OUT3) \ ++ { \ ++ DUP2_ARG2(_INS, _IN0, _IN1, _IN2, _IN3, _OUT0, _OUT1); \ ++ DUP2_ARG2(_INS, _IN4, _IN5, _IN6, _IN7, _OUT2, _OUT3); \ ++ } ++ ++#define DUP4_ARG3(_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _IN6, _IN7, _IN8, \ ++ _IN9, _IN10, _IN11, _OUT0, _OUT1, _OUT2, _OUT3) \ ++ { \ ++ DUP2_ARG3(_INS, _IN0, _IN1, _IN2, _IN3, _IN4, _IN5, _OUT0, _OUT1); \ ++ DUP2_ARG3(_INS, _IN6, _IN7, _IN8, _IN9, _IN10, _IN11, _OUT2, _OUT3); \ ++ } + + #ifdef __loongarch_sx + #include +@@ -116,11 +94,11 @@ + * Description : Dot product & addition of byte vector elements + * Arguments : Inputs - in_c, in_h, in_l + * Outputs - out +- * Retrun Type - halfword ++ * Return Type - halfword + * Details : Signed byte elements from in_h are multiplied by + * signed byte elements from in_l, and then added adjacent to + * each other to get results with the twice size of input. +- * Then the results plus to signed half word elements from in_c. ++ * Then the results plus to signed half-word elements from in_c. + * Example : out = __lsx_vdp2add_h_b(in_c, in_h, in_l) + * in_c : 1,2,3,4, 1,2,3,4 + * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 +@@ -128,13 +106,13 @@ + * out : 23,40,41,26, 23,40,41,26 + * ============================================================================= + */ +-static inline __m128i __lsx_vdp2add_h_b(__m128i in_c, __m128i in_h, __m128i in_l) +-{ +- __m128i out; ++static inline __m128i __lsx_vdp2add_h_b(__m128i in_c, __m128i in_h, ++ __m128i in_l) { ++ __m128i out; + +- out = __lsx_vmaddwev_h_b(in_c, in_h, in_l); +- out = __lsx_vmaddwod_h_b(out, in_h, in_l); +- return out; ++ out = __lsx_vmaddwev_h_b(in_c, in_h, in_l); ++ out = __lsx_vmaddwod_h_b(out, in_h, in_l); ++ return out; + } + + /* +@@ -142,35 +120,61 @@ static inline __m128i __lsx_vdp2add_h_b(__m128i in_c, __m128i in_h, __m128i in_l + * Description : Dot product & addition of byte vector elements + * Arguments : Inputs - in_c, in_h, in_l + * Outputs - out +- * Retrun Type - halfword ++ * Return Type - halfword + * Details : Unsigned byte elements from in_h are multiplied by + * unsigned byte elements from in_l, and then added adjacent to + * each other to get results with the twice size of input. +- * The results plus to signed half word elements from in_c. +- * Example : out = __lsx_vdp2add_h_b(in_c, in_h, in_l) ++ * The results plus to signed half-word elements from in_c. ++ * Example : out = __lsx_vdp2add_h_bu(in_c, in_h, in_l) + * in_c : 1,2,3,4, 1,2,3,4 + * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 + * in_l : 8,7,6,5, 4,3,2,1, 8,7,6,5, 4,3,2,1 + * out : 23,40,41,26, 23,40,41,26 + * ============================================================================= + */ +-static inline __m128i __lsx_vdp2add_h_bu(__m128i in_c, __m128i in_h, __m128i in_l) +-{ +- __m128i out; ++static inline __m128i __lsx_vdp2add_h_bu(__m128i in_c, __m128i in_h, ++ __m128i in_l) { ++ __m128i out; ++ ++ out = __lsx_vmaddwev_h_bu(in_c, in_h, in_l); ++ out = __lsx_vmaddwod_h_bu(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product & addition of byte vector elements ++ * Arguments : Inputs - in_c, in_h, in_l ++ * Outputs - out ++ * Return Type - halfword ++ * Details : Unsigned byte elements from in_h are multiplied by ++ * signed byte elements from in_l, and then added adjacent to ++ * each other to get results with the twice size of input. ++ * The results plus to signed half-word elements from in_c. ++ * Example : out = __lsx_vdp2add_h_bu_b(in_c, in_h, in_l) ++ * in_c : 1,1,1,1, 1,1,1,1 ++ * in_h : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 ++ * in_l : -1,-2,-3,-4, -5,-6,-7,-8, 1,2,3,4, 5,6,7,8 ++ * out : -4,-24,-60,-112, 6,26,62,114 ++ * ============================================================================= ++ */ ++static inline __m128i __lsx_vdp2add_h_bu_b(__m128i in_c, __m128i in_h, ++ __m128i in_l) { ++ __m128i out; + +- out = __lsx_vmaddwev_h_bu(in_c, in_h, in_l); +- out = __lsx_vmaddwod_h_bu(out, in_h, in_l); +- return out; ++ out = __lsx_vmaddwev_h_bu_b(in_c, in_h, in_l); ++ out = __lsx_vmaddwod_h_bu_b(out, in_h, in_l); ++ return out; + } + + /* + * ============================================================================= +- * Description : Dot product & addition of half word vector elements ++ * Description : Dot product & addition of half-word vector elements + * Arguments : Inputs - in_c, in_h, in_l + * Outputs - out +- * Retrun Type - __m128i +- * Details : Signed half word elements from in_h are multiplied by +- * signed half word elements from in_l, and then added adjacent to ++ * Return Type - __m128i ++ * Details : Signed half-word elements from in_h are multiplied by ++ * signed half-word elements from in_l, and then added adjacent to + * each other to get results with the twice size of input. + * Then the results plus to signed word elements from in_c. + * Example : out = __lsx_vdp2add_h_b(in_c, in_h, in_l) +@@ -180,13 +184,13 @@ static inline __m128i __lsx_vdp2add_h_bu(__m128i in_c, __m128i in_h, __m128i in_ + * out : 23,40,41,26 + * ============================================================================= + */ +-static inline __m128i __lsx_vdp2add_w_h(__m128i in_c, __m128i in_h, __m128i in_l) +-{ +- __m128i out; ++static inline __m128i __lsx_vdp2add_w_h(__m128i in_c, __m128i in_h, ++ __m128i in_l) { ++ __m128i out; + +- out = __lsx_vmaddwev_w_h(in_c, in_h, in_l); +- out = __lsx_vmaddwod_w_h(out, in_h, in_l); +- return out; ++ out = __lsx_vmaddwev_w_h(in_c, in_h, in_l); ++ out = __lsx_vmaddwod_w_h(out, in_h, in_l); ++ return out; + } + + /* +@@ -194,7 +198,7 @@ static inline __m128i __lsx_vdp2add_w_h(__m128i in_c, __m128i in_h, __m128i in_l + * Description : Dot product of byte vector elements + * Arguments : Inputs - in_h, in_l + * Outputs - out +- * Retrun Type - halfword ++ * Return Type - halfword + * Details : Signed byte elements from in_h are multiplied by + * signed byte elements from in_l, and then added adjacent to + * each other to get results with the twice size of input. +@@ -204,13 +208,12 @@ static inline __m128i __lsx_vdp2add_w_h(__m128i in_c, __m128i in_h, __m128i in_l + * out : 22,38,38,22, 22,38,38,22 + * ============================================================================= + */ +-static inline __m128i __lsx_vdp2_h_b(__m128i in_h, __m128i in_l) +-{ +- __m128i out; ++static inline __m128i __lsx_vdp2_h_b(__m128i in_h, __m128i in_l) { ++ __m128i out; + +- out = __lsx_vmulwev_h_b(in_h, in_l); +- out = __lsx_vmaddwod_h_b(out, in_h, in_l); +- return out; ++ out = __lsx_vmulwev_h_b(in_h, in_l); ++ out = __lsx_vmaddwod_h_b(out, in_h, in_l); ++ return out; + } + + /* +@@ -218,7 +221,7 @@ static inline __m128i __lsx_vdp2_h_b(__m128i in_h, __m128i in_l) + * Description : Dot product of byte vector elements + * Arguments : Inputs - in_h, in_l + * Outputs - out +- * Retrun Type - halfword ++ * Return Type - halfword + * Details : Unsigned byte elements from in_h are multiplied by + * unsigned byte elements from in_l, and then added adjacent to + * each other to get results with the twice size of input. +@@ -228,13 +231,12 @@ static inline __m128i __lsx_vdp2_h_b(__m128i in_h, __m128i in_l) + * out : 22,38,38,22, 22,38,38,22 + * ============================================================================= + */ +-static inline __m128i __lsx_vdp2_h_bu(__m128i in_h, __m128i in_l) +-{ +- __m128i out; ++static inline __m128i __lsx_vdp2_h_bu(__m128i in_h, __m128i in_l) { ++ __m128i out; + +- out = __lsx_vmulwev_h_bu(in_h, in_l); +- out = __lsx_vmaddwod_h_bu(out, in_h, in_l); +- return out; ++ out = __lsx_vmulwev_h_bu(in_h, in_l); ++ out = __lsx_vmaddwod_h_bu(out, in_h, in_l); ++ return out; + } + + /* +@@ -242,7 +244,7 @@ static inline __m128i __lsx_vdp2_h_bu(__m128i in_h, __m128i in_l) + * Description : Dot product of byte vector elements + * Arguments : Inputs - in_h, in_l + * Outputs - out +- * Retrun Type - halfword ++ * Return Type - halfword + * Details : Unsigned byte elements from in_h are multiplied by + * signed byte elements from in_l, and then added adjacent to + * each other to get results with the twice size of input. +@@ -252,13 +254,12 @@ static inline __m128i __lsx_vdp2_h_bu(__m128i in_h, __m128i in_l) + * out : 22,38,38,22, 22,38,38,6 + * ============================================================================= + */ +-static inline __m128i __lsx_vdp2_h_bu_b(__m128i in_h, __m128i in_l) +-{ +- __m128i out; ++static inline __m128i __lsx_vdp2_h_bu_b(__m128i in_h, __m128i in_l) { ++ __m128i out; + +- out = __lsx_vmulwev_h_bu_b(in_h, in_l); +- out = __lsx_vmaddwod_h_bu_b(out, in_h, in_l); +- return out; ++ out = __lsx_vmulwev_h_bu_b(in_h, in_l); ++ out = __lsx_vmaddwod_h_bu_b(out, in_h, in_l); ++ return out; + } + + /* +@@ -266,7 +267,7 @@ static inline __m128i __lsx_vdp2_h_bu_b(__m128i in_h, __m128i in_l) + * Description : Dot product of byte vector elements + * Arguments : Inputs - in_h, in_l + * Outputs - out +- * Retrun Type - halfword ++ * Return Type - halfword + * Details : Signed byte elements from in_h are multiplied by + * signed byte elements from in_l, and then added adjacent to + * each other to get results with the twice size of input. +@@ -276,19 +277,19 @@ static inline __m128i __lsx_vdp2_h_bu_b(__m128i in_h, __m128i in_l) + * out : 22,38,38,22 + * ============================================================================= + */ +-static inline __m128i __lsx_vdp2_w_h(__m128i in_h, __m128i in_l) +-{ +- __m128i out; ++static inline __m128i __lsx_vdp2_w_h(__m128i in_h, __m128i in_l) { ++ __m128i out; + +- out = __lsx_vmulwev_w_h(in_h, in_l); +- out = __lsx_vmaddwod_w_h(out, in_h, in_l); +- return out; ++ out = __lsx_vmulwev_w_h(in_h, in_l); ++ out = __lsx_vmaddwod_w_h(out, in_h, in_l); ++ return out; + } + + /* + * ============================================================================= + * Description : Clip all halfword elements of input vector between min & max +- * out = ((_in) < (min)) ? (min) : (((_in) > (max)) ? (max) : (_in)) ++ * out = ((_in) < (min)) ? (min) : (((_in) > (max)) ? (max) : ++ * (_in)) + * Arguments : Inputs - _in (input vector) + * - min (min threshold) + * - max (max threshold) +@@ -301,13 +302,12 @@ static inline __m128i __lsx_vdp2_w_h(__m128i in_h, __m128i in_l) + * out : 1,2,9,9, 1,9,9,9 + * ============================================================================= + */ +-static inline __m128i __lsx_vclip_h(__m128i _in, __m128i min, __m128i max) +-{ +- __m128i out; ++static inline __m128i __lsx_vclip_h(__m128i _in, __m128i min, __m128i max) { ++ __m128i out; + +- out = __lsx_vmax_h(min, _in); +- out = __lsx_vmin_h(max, out); +- return out; ++ out = __lsx_vmax_h(min, _in); ++ out = __lsx_vmin_h(max, out); ++ return out; + } + + /* +@@ -315,20 +315,19 @@ static inline __m128i __lsx_vclip_h(__m128i _in, __m128i min, __m128i max) + * Description : Set each element of vector between 0 and 255 + * Arguments : Inputs - _in + * Outputs - out +- * Retrun Type - halfword ++ * Return Type - halfword + * Details : Signed byte elements from _in are clamped between 0 and 255. + * Example : out = __lsx_vclip255_h(_in) + * _in : -8,255,280,249, -8,255,280,249 + * out : 0,255,255,249, 0,255,255,249 + * ============================================================================= + */ +-static inline __m128i __lsx_vclip255_h(__m128i _in) +-{ +- __m128i out; ++static inline __m128i __lsx_vclip255_h(__m128i _in) { ++ __m128i out; + +- out = __lsx_vmaxi_h(_in, 0); +- out = __lsx_vsat_hu(out, 7); +- return out; ++ out = __lsx_vmaxi_h(_in, 0); ++ out = __lsx_vsat_hu(out, 7); ++ return out; + } + + /* +@@ -336,20 +335,19 @@ static inline __m128i __lsx_vclip255_h(__m128i _in) + * Description : Set each element of vector between 0 and 255 + * Arguments : Inputs - _in + * Outputs - out +- * Retrun Type - word ++ * Return Type - word + * Details : Signed byte elements from _in are clamped between 0 and 255. + * Example : out = __lsx_vclip255_w(_in) + * _in : -8,255,280,249 + * out : 0,255,255,249 + * ============================================================================= + */ +-static inline __m128i __lsx_vclip255_w(__m128i _in) +-{ +- __m128i out; ++static inline __m128i __lsx_vclip255_w(__m128i _in) { ++ __m128i out; + +- out = __lsx_vmaxi_w(_in, 0); +- out = __lsx_vsat_wu(out, 7); +- return out; ++ out = __lsx_vmaxi_w(_in, 0); ++ out = __lsx_vsat_wu(out, 7); ++ return out; + } + + /* +@@ -365,12 +363,12 @@ static inline __m128i __lsx_vclip255_w(__m128i _in) + * _in1(out) : 1,2,3,4 + * ============================================================================= + */ +-#define LSX_SWAP(_in0, _in1) \ +-{ \ +- _in0 = __lsx_vxor_v(_in0, _in1); \ +- _in1 = __lsx_vxor_v(_in0, _in1); \ +- _in0 = __lsx_vxor_v(_in0, _in1); \ +-} \ ++#define LSX_SWAP(_in0, _in1) \ ++ { \ ++ _in0 = __lsx_vxor_v(_in0, _in1); \ ++ _in1 = __lsx_vxor_v(_in0, _in1); \ ++ _in0 = __lsx_vxor_v(_in0, _in1); \ ++ } + + /* + * ============================================================================= +@@ -386,25 +384,27 @@ static inline __m128i __lsx_vclip255_w(__m128i _in) + * ============================================================================= + */ + #define LSX_TRANSPOSE4x4_W(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ +-{ \ ++ { \ + __m128i _t0, _t1, _t2, _t3; \ + \ +- _t0 = __lsx_vilvl_w(_in1, _in0); \ +- _t1 = __lsx_vilvh_w(_in1, _in0); \ +- _t2 = __lsx_vilvl_w(_in3, _in2); \ +- _t3 = __lsx_vilvh_w(_in3, _in2); \ ++ _t0 = __lsx_vilvl_w(_in1, _in0); \ ++ _t1 = __lsx_vilvh_w(_in1, _in0); \ ++ _t2 = __lsx_vilvl_w(_in3, _in2); \ ++ _t3 = __lsx_vilvh_w(_in3, _in2); \ + _out0 = __lsx_vilvl_d(_t2, _t0); \ + _out1 = __lsx_vilvh_d(_t2, _t0); \ + _out2 = __lsx_vilvl_d(_t3, _t1); \ + _out3 = __lsx_vilvh_d(_t3, _t1); \ +-} ++ } + + /* + * ============================================================================= + * Description : Transpose 8x8 block with byte elements in vectors + * Arguments : Inputs - _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7 +- * Outputs - _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7 +- * Details : The rows of the matrix become columns, and the columns become rows. ++ * Outputs - _out0, _out1, _out2, _out3, _out4, _out5, _out6, ++ * _out7 ++ * Details : The rows of the matrix become columns, and the columns ++ * become rows. + * Example : LSX_TRANSPOSE8x8_B + * _in0 : 00,01,02,03,04,05,06,07, 00,00,00,00,00,00,00,00 + * _in1 : 10,11,12,13,14,15,16,17, 00,00,00,00,00,00,00,00 +@@ -425,34 +425,35 @@ static inline __m128i __lsx_vclip255_w(__m128i _in) + * _ out7 : 07,17,27,37,47,57,67,77, 00,00,00,00,00,00,00,00 + * ============================================================================= + */ +-#define LSX_TRANSPOSE8x8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ +- _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7)\ +-{ \ +- __m128i zero = {0}; \ +- __m128i shuf8 = {0x0F0E0D0C0B0A0908, 0x1716151413121110}; \ +- __m128i _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ +- \ +- _t0 = __lsx_vilvl_b(_in2, _in0); \ +- _t1 = __lsx_vilvl_b(_in3, _in1); \ +- _t2 = __lsx_vilvl_b(_in6, _in4); \ +- _t3 = __lsx_vilvl_b(_in7, _in5); \ +- _t4 = __lsx_vilvl_b(_t1, _t0); \ +- _t5 = __lsx_vilvh_b(_t1, _t0); \ +- _t6 = __lsx_vilvl_b(_t3, _t2); \ +- _t7 = __lsx_vilvh_b(_t3, _t2); \ +- _out0 = __lsx_vilvl_w(_t6, _t4); \ +- _out2 = __lsx_vilvh_w(_t6, _t4); \ +- _out4 = __lsx_vilvl_w(_t7, _t5); \ +- _out6 = __lsx_vilvh_w(_t7, _t5); \ +- _out1 = __lsx_vshuf_b(zero, _out0, shuf8); \ +- _out3 = __lsx_vshuf_b(zero, _out2, shuf8); \ +- _out5 = __lsx_vshuf_b(zero, _out4, shuf8); \ +- _out7 = __lsx_vshuf_b(zero, _out6, shuf8); \ +-} ++#define LSX_TRANSPOSE8x8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, \ ++ _out7) \ ++ { \ ++ __m128i zero = { 0 }; \ ++ __m128i shuf8 = { 0x0F0E0D0C0B0A0908, 0x1716151413121110 }; \ ++ __m128i _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ ++ \ ++ _t0 = __lsx_vilvl_b(_in2, _in0); \ ++ _t1 = __lsx_vilvl_b(_in3, _in1); \ ++ _t2 = __lsx_vilvl_b(_in6, _in4); \ ++ _t3 = __lsx_vilvl_b(_in7, _in5); \ ++ _t4 = __lsx_vilvl_b(_t1, _t0); \ ++ _t5 = __lsx_vilvh_b(_t1, _t0); \ ++ _t6 = __lsx_vilvl_b(_t3, _t2); \ ++ _t7 = __lsx_vilvh_b(_t3, _t2); \ ++ _out0 = __lsx_vilvl_w(_t6, _t4); \ ++ _out2 = __lsx_vilvh_w(_t6, _t4); \ ++ _out4 = __lsx_vilvl_w(_t7, _t5); \ ++ _out6 = __lsx_vilvh_w(_t7, _t5); \ ++ _out1 = __lsx_vshuf_b(zero, _out0, shuf8); \ ++ _out3 = __lsx_vshuf_b(zero, _out2, shuf8); \ ++ _out5 = __lsx_vshuf_b(zero, _out4, shuf8); \ ++ _out7 = __lsx_vshuf_b(zero, _out6, shuf8); \ ++ } + + /* + * ============================================================================= +- * Description : Transpose 8x8 block with half word elements in vectors ++ * Description : Transpose 8x8 block with half-word elements in vectors + * Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7 + * Outputs - out0, out1, out2, out3, out4, out5, out6, out7 + * Details : +@@ -467,37 +468,38 @@ static inline __m128i __lsx_vclip255_w(__m128i _in) + * 70,71,72,73,74,75,76,77 07,17,27,37,47,57,67,77 + * ============================================================================= + */ +-#define LSX_TRANSPOSE8x8_H(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ +- _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7)\ +-{ \ +- __m128i _s0, _s1, _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ +- \ +- _s0 = __lsx_vilvl_h(_in6, _in4); \ +- _s1 = __lsx_vilvl_h(_in7, _in5); \ +- _t0 = __lsx_vilvl_h(_s1, _s0); \ +- _t1 = __lsx_vilvh_h(_s1, _s0); \ +- _s0 = __lsx_vilvh_h(_in6, _in4); \ +- _s1 = __lsx_vilvh_h(_in7, _in5); \ +- _t2 = __lsx_vilvl_h(_s1, _s0); \ +- _t3 = __lsx_vilvh_h(_s1, _s0); \ +- _s0 = __lsx_vilvl_h(_in2, _in0); \ +- _s1 = __lsx_vilvl_h(_in3, _in1); \ +- _t4 = __lsx_vilvl_h(_s1, _s0); \ +- _t5 = __lsx_vilvh_h(_s1, _s0); \ +- _s0 = __lsx_vilvh_h(_in2, _in0); \ +- _s1 = __lsx_vilvh_h(_in3, _in1); \ +- _t6 = __lsx_vilvl_h(_s1, _s0); \ +- _t7 = __lsx_vilvh_h(_s1, _s0); \ +- \ +- _out0 = __lsx_vpickev_d(_t0, _t4); \ +- _out2 = __lsx_vpickev_d(_t1, _t5); \ +- _out4 = __lsx_vpickev_d(_t2, _t6); \ +- _out6 = __lsx_vpickev_d(_t3, _t7); \ +- _out1 = __lsx_vpickod_d(_t0, _t4); \ +- _out3 = __lsx_vpickod_d(_t1, _t5); \ +- _out5 = __lsx_vpickod_d(_t2, _t6); \ +- _out7 = __lsx_vpickod_d(_t3, _t7); \ +-} ++#define LSX_TRANSPOSE8x8_H(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, \ ++ _out7) \ ++ { \ ++ __m128i _s0, _s1, _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ ++ \ ++ _s0 = __lsx_vilvl_h(_in6, _in4); \ ++ _s1 = __lsx_vilvl_h(_in7, _in5); \ ++ _t0 = __lsx_vilvl_h(_s1, _s0); \ ++ _t1 = __lsx_vilvh_h(_s1, _s0); \ ++ _s0 = __lsx_vilvh_h(_in6, _in4); \ ++ _s1 = __lsx_vilvh_h(_in7, _in5); \ ++ _t2 = __lsx_vilvl_h(_s1, _s0); \ ++ _t3 = __lsx_vilvh_h(_s1, _s0); \ ++ _s0 = __lsx_vilvl_h(_in2, _in0); \ ++ _s1 = __lsx_vilvl_h(_in3, _in1); \ ++ _t4 = __lsx_vilvl_h(_s1, _s0); \ ++ _t5 = __lsx_vilvh_h(_s1, _s0); \ ++ _s0 = __lsx_vilvh_h(_in2, _in0); \ ++ _s1 = __lsx_vilvh_h(_in3, _in1); \ ++ _t6 = __lsx_vilvl_h(_s1, _s0); \ ++ _t7 = __lsx_vilvh_h(_s1, _s0); \ ++ \ ++ _out0 = __lsx_vpickev_d(_t0, _t4); \ ++ _out2 = __lsx_vpickev_d(_t1, _t5); \ ++ _out4 = __lsx_vpickev_d(_t2, _t6); \ ++ _out6 = __lsx_vpickev_d(_t3, _t7); \ ++ _out1 = __lsx_vpickod_d(_t0, _t4); \ ++ _out3 = __lsx_vpickod_d(_t1, _t5); \ ++ _out5 = __lsx_vpickod_d(_t2, _t6); \ ++ _out7 = __lsx_vpickod_d(_t3, _t7); \ ++ } + + /* + * ============================================================================= +@@ -505,7 +507,8 @@ static inline __m128i __lsx_vclip255_w(__m128i _in) + * Arguments : Inputs - _in0, _in1, _in2, _in3 (input 8x4 byte block) + * Outputs - _out0, _out1, _out2, _out3 (output 4x8 byte block) + * Return Type - as per RTYPE +- * Details : The rows of the matrix become columns, and the columns become rows. ++ * Details : The rows of the matrix become columns, and the columns become ++ * rows. + * Example : LSX_TRANSPOSE8x4_B + * _in0 : 00,01,02,03,00,00,00,00, 00,00,00,00,00,00,00,00 + * _in1 : 10,11,12,13,00,00,00,00, 00,00,00,00,00,00,00,00 +@@ -522,26 +525,26 @@ static inline __m128i __lsx_vclip255_w(__m128i _in) + * _out3 : 03,13,23,33,43,53,63,73, 00,00,00,00,00,00,00,00 + * ============================================================================= + */ +-#define LSX_TRANSPOSE8x4_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ +- _out0, _out1, _out2, _out3) \ +-{ \ +- __m128i _tmp0_m, _tmp1_m, _tmp2_m, _tmp3_m; \ +- \ +- _tmp0_m = __lsx_vpackev_w(_in4, _in0); \ +- _tmp1_m = __lsx_vpackev_w(_in5, _in1); \ +- _tmp2_m = __lsx_vilvl_b(_tmp1_m, _tmp0_m); \ +- _tmp0_m = __lsx_vpackev_w(_in6, _in2); \ +- _tmp1_m = __lsx_vpackev_w(_in7, _in3); \ +- \ +- _tmp3_m = __lsx_vilvl_b(_tmp1_m, _tmp0_m); \ +- _tmp0_m = __lsx_vilvl_h(_tmp3_m, _tmp2_m); \ +- _tmp1_m = __lsx_vilvh_h(_tmp3_m, _tmp2_m); \ +- \ +- _out0 = __lsx_vilvl_w(_tmp1_m, _tmp0_m); \ +- _out2 = __lsx_vilvh_w(_tmp1_m, _tmp0_m); \ +- _out1 = __lsx_vilvh_d(_out2, _out0); \ +- _out3 = __lsx_vilvh_d(_out0, _out2); \ +-} ++#define LSX_TRANSPOSE8x4_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3) \ ++ { \ ++ __m128i _tmp0_m, _tmp1_m, _tmp2_m, _tmp3_m; \ ++ \ ++ _tmp0_m = __lsx_vpackev_w(_in4, _in0); \ ++ _tmp1_m = __lsx_vpackev_w(_in5, _in1); \ ++ _tmp2_m = __lsx_vilvl_b(_tmp1_m, _tmp0_m); \ ++ _tmp0_m = __lsx_vpackev_w(_in6, _in2); \ ++ _tmp1_m = __lsx_vpackev_w(_in7, _in3); \ ++ \ ++ _tmp3_m = __lsx_vilvl_b(_tmp1_m, _tmp0_m); \ ++ _tmp0_m = __lsx_vilvl_h(_tmp3_m, _tmp2_m); \ ++ _tmp1_m = __lsx_vilvh_h(_tmp3_m, _tmp2_m); \ ++ \ ++ _out0 = __lsx_vilvl_w(_tmp1_m, _tmp0_m); \ ++ _out2 = __lsx_vilvh_w(_tmp1_m, _tmp0_m); \ ++ _out1 = __lsx_vilvh_d(_out2, _out0); \ ++ _out3 = __lsx_vilvh_d(_out0, _out2); \ ++ } + + /* + * ============================================================================= +@@ -569,29 +572,30 @@ static inline __m128i __lsx_vclip255_w(__m128i _in) + * 120,121,122,123,124,125,126,127 + * ============================================================================= + */ +-#define LSX_TRANSPOSE16x8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, _in8, \ +- _in9, _in10, _in11, _in12, _in13, _in14, _in15, _out0, \ +- _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ +-{ \ +- __m128i _tmp0, _tmp1, _tmp2, _tmp3, _tmp4, _tmp5, _tmp6, _tmp7; \ +- __m128i _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ +- DUP4_ARG2(__lsx_vilvl_b, _in2, _in0, _in3, _in1, _in6, _in4, _in7, _in5, \ +- _tmp0, _tmp1, _tmp2, _tmp3); \ +- DUP4_ARG2(__lsx_vilvl_b, _in10, _in8, _in11, _in9, _in14, _in12, _in15, \ +- _in13, _tmp4, _tmp5, _tmp6, _tmp7); \ +- DUP2_ARG2(__lsx_vilvl_b, _tmp1, _tmp0, _tmp3, _tmp2, _t0, _t2); \ +- DUP2_ARG2(__lsx_vilvh_b, _tmp1, _tmp0, _tmp3, _tmp2, _t1, _t3); \ +- DUP2_ARG2(__lsx_vilvl_b, _tmp5, _tmp4, _tmp7, _tmp6, _t4, _t6); \ +- DUP2_ARG2(__lsx_vilvh_b, _tmp5, _tmp4, _tmp7, _tmp6, _t5, _t7); \ +- DUP2_ARG2(__lsx_vilvl_w, _t2, _t0, _t3, _t1, _tmp0, _tmp4); \ +- DUP2_ARG2(__lsx_vilvh_w, _t2, _t0, _t3, _t1, _tmp2, _tmp6); \ +- DUP2_ARG2(__lsx_vilvl_w, _t6, _t4, _t7, _t5, _tmp1, _tmp5); \ +- DUP2_ARG2(__lsx_vilvh_w, _t6, _t4, _t7, _t5, _tmp3, _tmp7); \ +- DUP2_ARG2(__lsx_vilvl_d, _tmp1, _tmp0, _tmp3, _tmp2, _out0, _out2); \ +- DUP2_ARG2(__lsx_vilvh_d, _tmp1, _tmp0, _tmp3, _tmp2, _out1, _out3); \ +- DUP2_ARG2(__lsx_vilvl_d, _tmp5, _tmp4, _tmp7, _tmp6, _out4, _out6); \ +- DUP2_ARG2(__lsx_vilvh_d, _tmp5, _tmp4, _tmp7, _tmp6, _out5, _out7); \ +-} ++#define LSX_TRANSPOSE16x8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _in8, _in9, _in10, _in11, _in12, _in13, _in14, \ ++ _in15, _out0, _out1, _out2, _out3, _out4, _out5, \ ++ _out6, _out7) \ ++ { \ ++ __m128i _tmp0, _tmp1, _tmp2, _tmp3, _tmp4, _tmp5, _tmp6, _tmp7; \ ++ __m128i _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ ++ DUP4_ARG2(__lsx_vilvl_b, _in2, _in0, _in3, _in1, _in6, _in4, _in7, _in5, \ ++ _tmp0, _tmp1, _tmp2, _tmp3); \ ++ DUP4_ARG2(__lsx_vilvl_b, _in10, _in8, _in11, _in9, _in14, _in12, _in15, \ ++ _in13, _tmp4, _tmp5, _tmp6, _tmp7); \ ++ DUP2_ARG2(__lsx_vilvl_b, _tmp1, _tmp0, _tmp3, _tmp2, _t0, _t2); \ ++ DUP2_ARG2(__lsx_vilvh_b, _tmp1, _tmp0, _tmp3, _tmp2, _t1, _t3); \ ++ DUP2_ARG2(__lsx_vilvl_b, _tmp5, _tmp4, _tmp7, _tmp6, _t4, _t6); \ ++ DUP2_ARG2(__lsx_vilvh_b, _tmp5, _tmp4, _tmp7, _tmp6, _t5, _t7); \ ++ DUP2_ARG2(__lsx_vilvl_w, _t2, _t0, _t3, _t1, _tmp0, _tmp4); \ ++ DUP2_ARG2(__lsx_vilvh_w, _t2, _t0, _t3, _t1, _tmp2, _tmp6); \ ++ DUP2_ARG2(__lsx_vilvl_w, _t6, _t4, _t7, _t5, _tmp1, _tmp5); \ ++ DUP2_ARG2(__lsx_vilvh_w, _t6, _t4, _t7, _t5, _tmp3, _tmp7); \ ++ DUP2_ARG2(__lsx_vilvl_d, _tmp1, _tmp0, _tmp3, _tmp2, _out0, _out2); \ ++ DUP2_ARG2(__lsx_vilvh_d, _tmp1, _tmp0, _tmp3, _tmp2, _out1, _out3); \ ++ DUP2_ARG2(__lsx_vilvl_d, _tmp5, _tmp4, _tmp7, _tmp6, _out4, _out6); \ ++ DUP2_ARG2(__lsx_vilvh_d, _tmp5, _tmp4, _tmp7, _tmp6, _out5, _out7); \ ++ } + + /* + * ============================================================================= +@@ -607,33 +611,33 @@ static inline __m128i __lsx_vclip255_w(__m128i _in) + * ============================================================================= + */ + #define LSX_BUTTERFLY_4_B(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ +-{ \ ++ { \ + _out0 = __lsx_vadd_b(_in0, _in3); \ + _out1 = __lsx_vadd_b(_in1, _in2); \ + _out2 = __lsx_vsub_b(_in1, _in2); \ + _out3 = __lsx_vsub_b(_in0, _in3); \ +-} ++ } + #define LSX_BUTTERFLY_4_H(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ +-{ \ ++ { \ + _out0 = __lsx_vadd_h(_in0, _in3); \ + _out1 = __lsx_vadd_h(_in1, _in2); \ + _out2 = __lsx_vsub_h(_in1, _in2); \ + _out3 = __lsx_vsub_h(_in0, _in3); \ +-} ++ } + #define LSX_BUTTERFLY_4_W(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ +-{ \ ++ { \ + _out0 = __lsx_vadd_w(_in0, _in3); \ + _out1 = __lsx_vadd_w(_in1, _in2); \ + _out2 = __lsx_vsub_w(_in1, _in2); \ + _out3 = __lsx_vsub_w(_in0, _in3); \ +-} ++ } + #define LSX_BUTTERFLY_4_D(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ +-{ \ ++ { \ + _out0 = __lsx_vadd_d(_in0, _in3); \ + _out1 = __lsx_vadd_d(_in1, _in2); \ + _out2 = __lsx_vsub_d(_in1, _in2); \ + _out3 = __lsx_vsub_d(_in0, _in3); \ +-} ++ } + + /* + * ============================================================================= +@@ -652,59 +656,63 @@ static inline __m128i __lsx_vclip255_w(__m128i _in) + * _out7 = _in0 - _in7; + * ============================================================================= + */ +-#define LSX_BUTTERFLY_8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ +- _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7)\ +-{ \ +- _out0 = __lsx_vadd_b(_in0, _in7); \ +- _out1 = __lsx_vadd_b(_in1, _in6); \ +- _out2 = __lsx_vadd_b(_in2, _in5); \ +- _out3 = __lsx_vadd_b(_in3, _in4); \ +- _out4 = __lsx_vsub_b(_in3, _in4); \ +- _out5 = __lsx_vsub_b(_in2, _in5); \ +- _out6 = __lsx_vsub_b(_in1, _in6); \ +- _out7 = __lsx_vsub_b(_in0, _in7); \ +-} +- +-#define LSX_BUTTERFLY_8_H(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ +- _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7)\ +-{ \ +- _out0 = __lsx_vadd_h(_in0, _in7); \ +- _out1 = __lsx_vadd_h(_in1, _in6); \ +- _out2 = __lsx_vadd_h(_in2, _in5); \ +- _out3 = __lsx_vadd_h(_in3, _in4); \ +- _out4 = __lsx_vsub_h(_in3, _in4); \ +- _out5 = __lsx_vsub_h(_in2, _in5); \ +- _out6 = __lsx_vsub_h(_in1, _in6); \ +- _out7 = __lsx_vsub_h(_in0, _in7); \ +-} +- +-#define LSX_BUTTERFLY_8_W(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ +- _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7)\ +-{ \ +- _out0 = __lsx_vadd_w(_in0, _in7); \ +- _out1 = __lsx_vadd_w(_in1, _in6); \ +- _out2 = __lsx_vadd_w(_in2, _in5); \ +- _out3 = __lsx_vadd_w(_in3, _in4); \ +- _out4 = __lsx_vsub_w(_in3, _in4); \ +- _out5 = __lsx_vsub_w(_in2, _in5); \ +- _out6 = __lsx_vsub_w(_in1, _in6); \ +- _out7 = __lsx_vsub_w(_in0, _in7); \ +-} +- +-#define LSX_BUTTERFLY_8_D(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ +- _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7)\ +-{ \ +- _out0 = __lsx_vadd_d(_in0, _in7); \ +- _out1 = __lsx_vadd_d(_in1, _in6); \ +- _out2 = __lsx_vadd_d(_in2, _in5); \ +- _out3 = __lsx_vadd_d(_in3, _in4); \ +- _out4 = __lsx_vsub_d(_in3, _in4); \ +- _out5 = __lsx_vsub_d(_in2, _in5); \ +- _out6 = __lsx_vsub_d(_in1, _in6); \ +- _out7 = __lsx_vsub_d(_in0, _in7); \ +-} +- +-#endif //LSX ++#define LSX_BUTTERFLY_8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, \ ++ _out7) \ ++ { \ ++ _out0 = __lsx_vadd_b(_in0, _in7); \ ++ _out1 = __lsx_vadd_b(_in1, _in6); \ ++ _out2 = __lsx_vadd_b(_in2, _in5); \ ++ _out3 = __lsx_vadd_b(_in3, _in4); \ ++ _out4 = __lsx_vsub_b(_in3, _in4); \ ++ _out5 = __lsx_vsub_b(_in2, _in5); \ ++ _out6 = __lsx_vsub_b(_in1, _in6); \ ++ _out7 = __lsx_vsub_b(_in0, _in7); \ ++ } ++ ++#define LSX_BUTTERFLY_8_H(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, \ ++ _out7) \ ++ { \ ++ _out0 = __lsx_vadd_h(_in0, _in7); \ ++ _out1 = __lsx_vadd_h(_in1, _in6); \ ++ _out2 = __lsx_vadd_h(_in2, _in5); \ ++ _out3 = __lsx_vadd_h(_in3, _in4); \ ++ _out4 = __lsx_vsub_h(_in3, _in4); \ ++ _out5 = __lsx_vsub_h(_in2, _in5); \ ++ _out6 = __lsx_vsub_h(_in1, _in6); \ ++ _out7 = __lsx_vsub_h(_in0, _in7); \ ++ } ++ ++#define LSX_BUTTERFLY_8_W(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, \ ++ _out7) \ ++ { \ ++ _out0 = __lsx_vadd_w(_in0, _in7); \ ++ _out1 = __lsx_vadd_w(_in1, _in6); \ ++ _out2 = __lsx_vadd_w(_in2, _in5); \ ++ _out3 = __lsx_vadd_w(_in3, _in4); \ ++ _out4 = __lsx_vsub_w(_in3, _in4); \ ++ _out5 = __lsx_vsub_w(_in2, _in5); \ ++ _out6 = __lsx_vsub_w(_in1, _in6); \ ++ _out7 = __lsx_vsub_w(_in0, _in7); \ ++ } ++ ++#define LSX_BUTTERFLY_8_D(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, \ ++ _out7) \ ++ { \ ++ _out0 = __lsx_vadd_d(_in0, _in7); \ ++ _out1 = __lsx_vadd_d(_in1, _in6); \ ++ _out2 = __lsx_vadd_d(_in2, _in5); \ ++ _out3 = __lsx_vadd_d(_in3, _in4); \ ++ _out4 = __lsx_vsub_d(_in3, _in4); \ ++ _out5 = __lsx_vsub_d(_in2, _in5); \ ++ _out6 = __lsx_vsub_d(_in1, _in6); \ ++ _out7 = __lsx_vsub_d(_in0, _in7); \ ++ } ++ ++#endif // LSX + + #ifdef __loongarch_asx + #include +@@ -722,13 +730,12 @@ static inline __m128i __lsx_vclip255_w(__m128i _in) + * Example : See out = __lasx_xvdp2_w_h(in_h, in_l) + * ============================================================================= + */ +-static inline __m256i __lasx_xvdp2_h_bu(__m256i in_h, __m256i in_l) +-{ +- __m256i out; ++static inline __m256i __lasx_xvdp2_h_bu(__m256i in_h, __m256i in_l) { ++ __m256i out; + +- out = __lasx_xvmulwev_h_bu(in_h, in_l); +- out = __lasx_xvmaddwod_h_bu(out, in_h, in_l); +- return out; ++ out = __lasx_xvmulwev_h_bu(in_h, in_l); ++ out = __lasx_xvmaddwod_h_bu(out, in_h, in_l); ++ return out; + } + + /* +@@ -740,18 +747,17 @@ static inline __m256i __lasx_xvdp2_h_bu(__m256i in_h, __m256i in_l) + * Details : Signed byte elements from in_h are multiplied with + * signed byte elements from in_l producing a result + * twice the size of input i.e. signed halfword. +- * Then this iniplication results of adjacent odd-even elements ++ * Then this multiplication results of adjacent odd-even elements + * are added to the out vector + * Example : See out = __lasx_xvdp2_w_h(in_h, in_l) + * ============================================================================= + */ +-static inline __m256i __lasx_xvdp2_h_b(__m256i in_h, __m256i in_l) +-{ +- __m256i out; ++static inline __m256i __lasx_xvdp2_h_b(__m256i in_h, __m256i in_l) { ++ __m256i out; + +- out = __lasx_xvmulwev_h_b(in_h, in_l); +- out = __lasx_xvmaddwod_h_b(out, in_h, in_l); +- return out; ++ out = __lasx_xvmulwev_h_b(in_h, in_l); ++ out = __lasx_xvmaddwod_h_b(out, in_h, in_l); ++ return out; + } + + /* +@@ -771,13 +777,12 @@ static inline __m256i __lasx_xvdp2_h_b(__m256i in_h, __m256i in_l) + * out : 22,38,38,22, 22,38,38,22 + * ============================================================================= + */ +-static inline __m256i __lasx_xvdp2_w_h(__m256i in_h, __m256i in_l) +-{ +- __m256i out; ++static inline __m256i __lasx_xvdp2_w_h(__m256i in_h, __m256i in_l) { ++ __m256i out; + +- out = __lasx_xvmulwev_w_h(in_h, in_l); +- out = __lasx_xvmaddwod_w_h(out, in_h, in_l); +- return out; ++ out = __lasx_xvmulwev_w_h(in_h, in_l); ++ out = __lasx_xvmaddwod_w_h(out, in_h, in_l); ++ return out; + } + + /* +@@ -785,22 +790,21 @@ static inline __m256i __lasx_xvdp2_w_h(__m256i in_h, __m256i in_l) + * Description : Dot product of word vector elements + * Arguments : Inputs - in_h, in_l + * Output - out +- * Retrun Type - signed double ++ * Return Type - signed double + * Details : Signed word elements from in_h are multiplied with + * signed word elements from in_l producing a result +- * twice the size of input i.e. signed double word. ++ * twice the size of input i.e. signed double-word. + * Then this multiplied results of adjacent odd-even elements + * are added to the out vector. + * Example : See out = __lasx_xvdp2_w_h(in_h, in_l) + * ============================================================================= + */ +-static inline __m256i __lasx_xvdp2_d_w(__m256i in_h, __m256i in_l) +-{ +- __m256i out; ++static inline __m256i __lasx_xvdp2_d_w(__m256i in_h, __m256i in_l) { ++ __m256i out; + +- out = __lasx_xvmulwev_d_w(in_h, in_l); +- out = __lasx_xvmaddwod_d_w(out, in_h, in_l); +- return out; ++ out = __lasx_xvmulwev_d_w(in_h, in_l); ++ out = __lasx_xvmaddwod_d_w(out, in_h, in_l); ++ return out; + } + + /* +@@ -817,13 +821,12 @@ static inline __m256i __lasx_xvdp2_d_w(__m256i in_h, __m256i in_l) + * Example : See out = __lasx_xvdp2_w_h(in_h, in_l) + * ============================================================================= + */ +-static inline __m256i __lasx_xvdp2_w_hu_h(__m256i in_h, __m256i in_l) +-{ +- __m256i out; ++static inline __m256i __lasx_xvdp2_w_hu_h(__m256i in_h, __m256i in_l) { ++ __m256i out; + +- out = __lasx_xvmulwev_w_hu_h(in_h, in_l); +- out = __lasx_xvmaddwod_w_hu_h(out, in_h, in_l); +- return out; ++ out = __lasx_xvmulwev_w_hu_h(in_h, in_l); ++ out = __lasx_xvmaddwod_w_hu_h(out, in_h, in_l); ++ return out; + } + + /* +@@ -831,7 +834,7 @@ static inline __m256i __lasx_xvdp2_w_hu_h(__m256i in_h, __m256i in_l) + * Description : Dot product & addition of byte vector elements + * Arguments : Inputs - in_h, in_l + * Output - out +- * Retrun Type - halfword ++ * Return Type - halfword + * Details : Signed byte elements from in_h are multiplied with + * signed byte elements from in_l producing a result + * twice the size of input i.e. signed halfword. +@@ -840,13 +843,59 @@ static inline __m256i __lasx_xvdp2_w_hu_h(__m256i in_h, __m256i in_l) + * Example : See out = __lasx_xvdp2add_w_h(in_c, in_h, in_l) + * ============================================================================= + */ +-static inline __m256i __lasx_xvdp2add_h_b(__m256i in_c,__m256i in_h, __m256i in_l) +-{ +- __m256i out; ++static inline __m256i __lasx_xvdp2add_h_b(__m256i in_c, __m256i in_h, ++ __m256i in_l) { ++ __m256i out; + +- out = __lasx_xvmaddwev_h_b(in_c, in_h, in_l); +- out = __lasx_xvmaddwod_h_b(out, in_h, in_l); +- return out; ++ out = __lasx_xvmaddwev_h_b(in_c, in_h, in_l); ++ out = __lasx_xvmaddwod_h_b(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product & addition of byte vector elements ++ * Arguments : Inputs - in_h, in_l ++ * Output - out ++ * Return Type - halfword ++ * Details : Unsigned byte elements from in_h are multiplied with ++ * unsigned byte elements from in_l producing a result ++ * twice the size of input i.e. signed halfword. ++ * Then this multiplied results of adjacent odd-even elements ++ * are added to the in_c vector. ++ * Example : See out = __lasx_xvdp2add_w_h(in_c, in_h, in_l) ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvdp2add_h_bu(__m256i in_c, __m256i in_h, ++ __m256i in_l) { ++ __m256i out; ++ ++ out = __lasx_xvmaddwev_h_bu(in_c, in_h, in_l); ++ out = __lasx_xvmaddwod_h_bu(out, in_h, in_l); ++ return out; ++} ++ ++/* ++ * ============================================================================= ++ * Description : Dot product & addition of byte vector elements ++ * Arguments : Inputs - in_h, in_l ++ * Output - out ++ * Return Type - halfword ++ * Details : Unsigned byte elements from in_h are multiplied with ++ * signed byte elements from in_l producing a result ++ * twice the size of input i.e. signed halfword. ++ * Then this multiplied results of adjacent odd-even elements ++ * are added to the in_c vector. ++ * Example : See out = __lasx_xvdp2add_w_h(in_c, in_h, in_l) ++ * ============================================================================= ++ */ ++static inline __m256i __lasx_xvdp2add_h_bu_b(__m256i in_c, __m256i in_h, ++ __m256i in_l) { ++ __m256i out; ++ ++ out = __lasx_xvmaddwev_h_bu_b(in_c, in_h, in_l); ++ out = __lasx_xvmaddwod_h_bu_b(out, in_h, in_l); ++ return out; + } + + /* +@@ -867,13 +916,13 @@ static inline __m256i __lasx_xvdp2add_h_b(__m256i in_c,__m256i in_h, __m256i in_ + * out : 23,40,41,26, 23,40,41,26 + * ============================================================================= + */ +-static inline __m256i __lasx_xvdp2add_w_h(__m256i in_c, __m256i in_h, __m256i in_l) +-{ +- __m256i out; ++static inline __m256i __lasx_xvdp2add_w_h(__m256i in_c, __m256i in_h, ++ __m256i in_l) { ++ __m256i out; + +- out = __lasx_xvmaddwev_w_h(in_c, in_h, in_l); +- out = __lasx_xvmaddwod_w_h(out, in_h, in_l); +- return out; ++ out = __lasx_xvmaddwev_w_h(in_c, in_h, in_l); ++ out = __lasx_xvmaddwod_w_h(out, in_h, in_l); ++ return out; + } + + /* +@@ -890,13 +939,13 @@ static inline __m256i __lasx_xvdp2add_w_h(__m256i in_c, __m256i in_h, __m256i in + * Example : See out = __lasx_xvdp2add_w_h(in_c, in_h, in_l) + * ============================================================================= + */ +-static inline __m256i __lasx_xvdp2add_w_hu(__m256i in_c, __m256i in_h, __m256i in_l) +-{ +- __m256i out; ++static inline __m256i __lasx_xvdp2add_w_hu(__m256i in_c, __m256i in_h, ++ __m256i in_l) { ++ __m256i out; + +- out = __lasx_xvmaddwev_w_hu(in_c, in_h, in_l); +- out = __lasx_xvmaddwod_w_hu(out, in_h, in_l); +- return out; ++ out = __lasx_xvmaddwev_w_hu(in_c, in_h, in_l); ++ out = __lasx_xvmaddwod_w_hu(out, in_h, in_l); ++ return out; + } + + /* +@@ -913,13 +962,13 @@ static inline __m256i __lasx_xvdp2add_w_hu(__m256i in_c, __m256i in_h, __m256i i + * Example : See out = __lasx_xvdp2add_w_h(in_c, in_h, in_l) + * ============================================================================= + */ +-static inline __m256i __lasx_xvdp2add_w_hu_h(__m256i in_c, __m256i in_h, __m256i in_l) +-{ +- __m256i out; ++static inline __m256i __lasx_xvdp2add_w_hu_h(__m256i in_c, __m256i in_h, ++ __m256i in_l) { ++ __m256i out; + +- out = __lasx_xvmaddwev_w_hu_h(in_c, in_h, in_l); +- out = __lasx_xvmaddwod_w_hu_h(out, in_h, in_l); +- return out; ++ out = __lasx_xvmaddwev_w_hu_h(in_c, in_h, in_l); ++ out = __lasx_xvmaddwod_w_hu_h(out, in_h, in_l); ++ return out; + } + + /* +@@ -937,14 +986,14 @@ static inline __m256i __lasx_xvdp2add_w_hu_h(__m256i in_c, __m256i in_h, __m256i + * Example : See out = __lasx_xvdp2sub_w_h(in_c, in_h, in_l) + * ============================================================================= + */ +-static inline __m256i __lasx_xvdp2sub_h_bu(__m256i in_c, __m256i in_h, __m256i in_l) +-{ +- __m256i out; +- +- out = __lasx_xvmulwev_h_bu(in_h, in_l); +- out = __lasx_xvmaddwod_h_bu(out, in_h, in_l); +- out = __lasx_xvsub_h(in_c, out); +- return out; ++static inline __m256i __lasx_xvdp2sub_h_bu(__m256i in_c, __m256i in_h, ++ __m256i in_l) { ++ __m256i out; ++ ++ out = __lasx_xvmulwev_h_bu(in_h, in_l); ++ out = __lasx_xvmaddwod_h_bu(out, in_h, in_l); ++ out = __lasx_xvsub_h(in_c, out); ++ return out; + } + + /* +@@ -966,14 +1015,14 @@ static inline __m256i __lasx_xvdp2sub_h_bu(__m256i in_c, __m256i in_h, __m256i i + * out : -7,-3,0,0, 0,-1,0,-1 + * ============================================================================= + */ +-static inline __m256i __lasx_xvdp2sub_w_h(__m256i in_c, __m256i in_h, __m256i in_l) +-{ +- __m256i out; +- +- out = __lasx_xvmulwev_w_h(in_h, in_l); +- out = __lasx_xvmaddwod_w_h(out, in_h, in_l); +- out = __lasx_xvsub_w(in_c, out); +- return out; ++static inline __m256i __lasx_xvdp2sub_w_h(__m256i in_c, __m256i in_h, ++ __m256i in_l) { ++ __m256i out; ++ ++ out = __lasx_xvmulwev_w_h(in_h, in_l); ++ out = __lasx_xvmaddwod_w_h(out, in_h, in_l); ++ out = __lasx_xvsub_w(in_c, out); ++ return out; + } + + /* +@@ -982,10 +1031,10 @@ static inline __m256i __lasx_xvdp2sub_w_h(__m256i in_c, __m256i in_h, __m256i in + * Arguments : Inputs - in_h, in_l + * Output - out + * Return Type - signed word +- * Details : Signed halfword elements from in_h are iniplied with ++ * Details : Signed halfword elements from in_h are multiplied with + * signed halfword elements from in_l producing a result + * four times the size of input i.e. signed doubleword. +- * Then this iniplication results of four adjacent elements ++ * Then this multiplication results of four adjacent elements + * are added together and stored to the out vector. + * Example : out = __lasx_xvdp4_d_h(in_h, in_l) + * in_h : 3,1,3,0, 0,0,0,1, 0,0,1,-1, 0,0,0,1 +@@ -993,14 +1042,13 @@ static inline __m256i __lasx_xvdp2sub_w_h(__m256i in_c, __m256i in_h, __m256i in + * out : -2,0,1,1 + * ============================================================================= + */ +-static inline __m256i __lasx_xvdp4_d_h(__m256i in_h, __m256i in_l) +-{ +- __m256i out; +- +- out = __lasx_xvmulwev_w_h(in_h, in_l); +- out = __lasx_xvmaddwod_w_h(out, in_h, in_l); +- out = __lasx_xvhaddw_d_w(out, out); +- return out; ++static inline __m256i __lasx_xvdp4_d_h(__m256i in_h, __m256i in_l) { ++ __m256i out; ++ ++ out = __lasx_xvmulwev_w_h(in_h, in_l); ++ out = __lasx_xvmaddwod_w_h(out, in_h, in_l); ++ out = __lasx_xvhaddw_d_w(out, out); ++ return out; + } + + /* +@@ -1015,13 +1063,12 @@ static inline __m256i __lasx_xvdp4_d_h(__m256i in_h, __m256i in_l) + * Example : See out = __lasx_xvaddwh_w_h(in_h, in_l) + * ============================================================================= + */ +-static inline __m256i __lasx_xvaddwh_h_b(__m256i in_h, __m256i in_l) +-{ +- __m256i out; ++static inline __m256i __lasx_xvaddwh_h_b(__m256i in_h, __m256i in_l) { ++ __m256i out; + +- out = __lasx_xvilvh_b(in_h, in_l); +- out = __lasx_xvhaddw_h_b(out, out); +- return out; ++ out = __lasx_xvilvh_b(in_h, in_l); ++ out = __lasx_xvhaddw_h_b(out, out); ++ return out; + } + + /* +@@ -1039,13 +1086,12 @@ static inline __m256i __lasx_xvaddwh_h_b(__m256i in_h, __m256i in_l) + * out : 1,0,0,-1, 1,0,0, 2 + * ============================================================================= + */ +- static inline __m256i __lasx_xvaddwh_w_h(__m256i in_h, __m256i in_l) +-{ +- __m256i out; ++static inline __m256i __lasx_xvaddwh_w_h(__m256i in_h, __m256i in_l) { ++ __m256i out; + +- out = __lasx_xvilvh_h(in_h, in_l); +- out = __lasx_xvhaddw_w_h(out, out); +- return out; ++ out = __lasx_xvilvh_h(in_h, in_l); ++ out = __lasx_xvhaddw_w_h(out, out); ++ return out; + } + + /* +@@ -1060,13 +1106,12 @@ static inline __m256i __lasx_xvaddwh_h_b(__m256i in_h, __m256i in_l) + * Example : See out = __lasx_xvaddwl_w_h(in_h, in_l) + * ============================================================================= + */ +-static inline __m256i __lasx_xvaddwl_h_b(__m256i in_h, __m256i in_l) +-{ +- __m256i out; ++static inline __m256i __lasx_xvaddwl_h_b(__m256i in_h, __m256i in_l) { ++ __m256i out; + +- out = __lasx_xvilvl_b(in_h, in_l); +- out = __lasx_xvhaddw_h_b(out, out); +- return out; ++ out = __lasx_xvilvl_b(in_h, in_l); ++ out = __lasx_xvhaddw_h_b(out, out); ++ return out; + } + + /* +@@ -1084,13 +1129,12 @@ static inline __m256i __lasx_xvaddwl_h_b(__m256i in_h, __m256i in_l) + * out : 5,-1,4,2, 1,0,2,-1 + * ============================================================================= + */ +-static inline __m256i __lasx_xvaddwl_w_h(__m256i in_h, __m256i in_l) +-{ +- __m256i out; ++static inline __m256i __lasx_xvaddwl_w_h(__m256i in_h, __m256i in_l) { ++ __m256i out; + +- out = __lasx_xvilvl_h(in_h, in_l); +- out = __lasx_xvhaddw_w_h(out, out); +- return out; ++ out = __lasx_xvilvl_h(in_h, in_l); ++ out = __lasx_xvhaddw_w_h(out, out); ++ return out; + } + + /* +@@ -1105,13 +1149,12 @@ static inline __m256i __lasx_xvaddwl_w_h(__m256i in_h, __m256i in_l) + * Example : See out = __lasx_xvaddwl_w_h(in_h, in_l) + * ============================================================================= + */ +-static inline __m256i __lasx_xvaddwl_h_bu(__m256i in_h, __m256i in_l) +-{ +- __m256i out; ++static inline __m256i __lasx_xvaddwl_h_bu(__m256i in_h, __m256i in_l) { ++ __m256i out; + +- out = __lasx_xvilvl_b(in_h, in_l); +- out = __lasx_xvhaddw_hu_bu(out, out); +- return out; ++ out = __lasx_xvilvl_b(in_h, in_l); ++ out = __lasx_xvhaddw_hu_bu(out, out); ++ return out; + } + + /* +@@ -1125,13 +1168,12 @@ static inline __m256i __lasx_xvaddwl_h_bu(__m256i in_h, __m256i in_l) + * Example : See out = __lasx_xvaddw_w_w_h(in_h, in_l) + * ============================================================================= + */ +-static inline __m256i __lasx_xvaddw_h_h_bu(__m256i in_h, __m256i in_l) +-{ +- __m256i out; ++static inline __m256i __lasx_xvaddw_h_h_bu(__m256i in_h, __m256i in_l) { ++ __m256i out; + +- out = __lasx_xvsllwil_hu_bu(in_l, 0); +- out = __lasx_xvadd_h(in_h, out); +- return out; ++ out = __lasx_xvsllwil_hu_bu(in_l, 0); ++ out = __lasx_xvadd_h(in_h, out); ++ return out; + } + + /* +@@ -1148,13 +1190,12 @@ static inline __m256i __lasx_xvaddw_h_h_bu(__m256i in_h, __m256i in_l) + * out : 2, 0,1,2, -1,0,1,1, + * ============================================================================= + */ +-static inline __m256i __lasx_xvaddw_w_w_h(__m256i in_h, __m256i in_l) +-{ +- __m256i out; ++static inline __m256i __lasx_xvaddw_w_w_h(__m256i in_h, __m256i in_l) { ++ __m256i out; + +- out = __lasx_xvsllwil_w_h(in_l, 0); +- out = __lasx_xvadd_w(in_h, out); +- return out; ++ out = __lasx_xvsllwil_w_h(in_l, 0); ++ out = __lasx_xvadd_w(in_h, out); ++ return out; + } + + /* +@@ -1175,15 +1216,15 @@ static inline __m256i __lasx_xvaddw_w_w_h(__m256i in_h, __m256i in_l) + * out : 201, 602,1203,2004, -995, -1794,-2793,-3992 + * ============================================================================= + */ +-static inline __m256i __lasx_xvmaddwl_w_h(__m256i in_c, __m256i in_h, __m256i in_l) +-{ +- __m256i tmp0, tmp1, out; +- +- tmp0 = __lasx_xvsllwil_w_h(in_h, 0); +- tmp1 = __lasx_xvsllwil_w_h(in_l, 0); +- tmp0 = __lasx_xvmul_w(tmp0, tmp1); +- out = __lasx_xvadd_w(tmp0, in_c); +- return out; ++static inline __m256i __lasx_xvmaddwl_w_h(__m256i in_c, __m256i in_h, ++ __m256i in_l) { ++ __m256i tmp0, tmp1, out; ++ ++ tmp0 = __lasx_xvsllwil_w_h(in_h, 0); ++ tmp1 = __lasx_xvsllwil_w_h(in_l, 0); ++ tmp0 = __lasx_xvmul_w(tmp0, tmp1); ++ out = __lasx_xvadd_w(tmp0, in_c); ++ return out; + } + + /* +@@ -1199,15 +1240,15 @@ static inline __m256i __lasx_xvmaddwl_w_h(__m256i in_c, __m256i in_h, __m256i in + * Example : See out = __lasx_xvmaddwl_w_h(in_c, in_h, in_l) + * ============================================================================= + */ +-static inline __m256i __lasx_xvmaddwh_w_h(__m256i in_c, __m256i in_h, __m256i in_l) +-{ +- __m256i tmp0, tmp1, out; +- +- tmp0 = __lasx_xvilvh_h(in_h, in_h); +- tmp1 = __lasx_xvilvh_h(in_l, in_l); +- tmp0 = __lasx_xvmulwev_w_h(tmp0, tmp1); +- out = __lasx_xvadd_w(tmp0, in_c); +- return out; ++static inline __m256i __lasx_xvmaddwh_w_h(__m256i in_c, __m256i in_h, ++ __m256i in_l) { ++ __m256i tmp0, tmp1, out; ++ ++ tmp0 = __lasx_xvilvh_h(in_h, in_h); ++ tmp1 = __lasx_xvilvh_h(in_l, in_l); ++ tmp0 = __lasx_xvmulwev_w_h(tmp0, tmp1); ++ out = __lasx_xvadd_w(tmp0, in_c); ++ return out; + } + + /* +@@ -1225,14 +1266,13 @@ static inline __m256i __lasx_xvmaddwh_w_h(__m256i in_c, __m256i in_h, __m256i in + * out : 6,1,3,0, 0,0,1,0 + * ============================================================================= + */ +-static inline __m256i __lasx_xvmulwl_w_h(__m256i in_h, __m256i in_l) +-{ +- __m256i tmp0, tmp1, out; +- +- tmp0 = __lasx_xvsllwil_w_h(in_h, 0); +- tmp1 = __lasx_xvsllwil_w_h(in_l, 0); +- out = __lasx_xvmul_w(tmp0, tmp1); +- return out; ++static inline __m256i __lasx_xvmulwl_w_h(__m256i in_h, __m256i in_l) { ++ __m256i tmp0, tmp1, out; ++ ++ tmp0 = __lasx_xvsllwil_w_h(in_h, 0); ++ tmp1 = __lasx_xvsllwil_w_h(in_l, 0); ++ out = __lasx_xvmul_w(tmp0, tmp1); ++ return out; + } + + /* +@@ -1250,39 +1290,39 @@ static inline __m256i __lasx_xvmulwl_w_h(__m256i in_h, __m256i in_l) + * out : 0,0,0,0, 0,0,0,1 + * ============================================================================= + */ +-static inline __m256i __lasx_xvmulwh_w_h(__m256i in_h, __m256i in_l) +-{ +- __m256i tmp0, tmp1, out; +- +- tmp0 = __lasx_xvilvh_h(in_h, in_h); +- tmp1 = __lasx_xvilvh_h(in_l, in_l); +- out = __lasx_xvmulwev_w_h(tmp0, tmp1); +- return out; ++static inline __m256i __lasx_xvmulwh_w_h(__m256i in_h, __m256i in_l) { ++ __m256i tmp0, tmp1, out; ++ ++ tmp0 = __lasx_xvilvh_h(in_h, in_h); ++ tmp1 = __lasx_xvilvh_h(in_l, in_l); ++ out = __lasx_xvmulwev_w_h(tmp0, tmp1); ++ return out; + } + + /* + * ============================================================================= +- * Description : The low half of the vector elements are expanded and +- * added saturately after being doubled. ++ * Description : The low half of the vector elements are added to the high half ++ * after being doubled, then saturated. + * Arguments : Inputs - in_h, in_l + * Output - out +- * Details : The in_h vector adds the in_l vector saturately after the lower +- * half of the two-fold zero extension (unsigned byte to unsigned +- * halfword) and the results are stored to the out vector. ++ * Details : The in_h vector adds the in_l vector after the lower half of ++ * the two-fold zero extension (unsigned byte to unsigned ++ * halfword) and then saturated. The results are stored to the out ++ * vector. + * Example : out = __lasx_xvsaddw_hu_hu_bu(in_h, in_l) + * in_h : 2,65532,1,2, 1,0,0,0, 0,0,1,0, 1,0,0,1 +- * in_l : 3,6,3,0, 0,0,0,1, 0,0,1,1, 0,0,0,1, 3,18,3,0, 0,0,0,1, 0,0,1,1, 0,0,0,1 +- * out : 5,65535,4,2, 1,0,0,1, 3,18,4,0, 1,0,0,2, ++ * in_l : 3,6,3,0, 0,0,0,1, 0,0,1,1, 0,0,0,1, 3,18,3,0, 0,0,0,1, 0,0,1,1, ++ * 0,0,0,1 ++ * out : 5,65535,4,2, 1,0,0,1, 3,18,4,0, 1,0,0,2, + * ============================================================================= + */ +-static inline __m256i __lasx_xvsaddw_hu_hu_bu(__m256i in_h, __m256i in_l) +-{ +- __m256i tmp1, out; +- __m256i zero = {0}; +- +- tmp1 = __lasx_xvilvl_b(zero, in_l); +- out = __lasx_xvsadd_hu(in_h, tmp1); +- return out; ++static inline __m256i __lasx_xvsaddw_hu_hu_bu(__m256i in_h, __m256i in_l) { ++ __m256i tmp1, out; ++ __m256i zero = { 0 }; ++ ++ tmp1 = __lasx_xvilvl_b(zero, in_l); ++ out = __lasx_xvsadd_hu(in_h, tmp1); ++ return out; + } + + /* +@@ -1301,13 +1341,12 @@ static inline __m256i __lasx_xvsaddw_hu_hu_bu(__m256i in_h, __m256i in_l) + * out : 1,2,9,9, 1,9,9,9, 4,4,4,4, 5,5,5,5 + * ============================================================================= + */ +-static inline __m256i __lasx_xvclip_h(__m256i in, __m256i min, __m256i max) +-{ +- __m256i out; ++static inline __m256i __lasx_xvclip_h(__m256i in, __m256i min, __m256i max) { ++ __m256i out; + +- out = __lasx_xvmax_h(min, in); +- out = __lasx_xvmin_h(max, out); +- return out; ++ out = __lasx_xvmax_h(min, in); ++ out = __lasx_xvmin_h(max, out); ++ return out; + } + + /* +@@ -1317,16 +1356,15 @@ static inline __m256i __lasx_xvclip_h(__m256i in, __m256i min, __m256i max) + * Arguments : Inputs - in (input vector) + * Outputs - out (output vector with clipped elements) + * Return Type - signed halfword +- * Example : See out = __lasx_xvclamp255_w(in) ++ * Example : See out = __lasx_xvclip255_w(in) + * ============================================================================= + */ +-static inline __m256i __lasx_xvclip255_h(__m256i in) +-{ +- __m256i out; ++static inline __m256i __lasx_xvclip255_h(__m256i in) { ++ __m256i out; + +- out = __lasx_xvmaxi_h(in, 0); +- out = __lasx_xvsat_hu(out, 7); +- return out; ++ out = __lasx_xvmaxi_h(in, 0); ++ out = __lasx_xvsat_hu(out, 7); ++ return out; + } + + /* +@@ -1336,25 +1374,24 @@ static inline __m256i __lasx_xvclip255_h(__m256i in) + * Arguments : Inputs - in (input vector) + * Output - out (output vector with clipped elements) + * Return Type - signed word +- * Example : out = __lasx_xvclamp255_w(in) ++ * Example : out = __lasx_xvclip255_w(in) + * in : -8,255,280,249, -8,255,280,249 + * out : 0,255,255,249, 0,255,255,249 + * ============================================================================= + */ +-static inline __m256i __lasx_xvclip255_w(__m256i in) +-{ +- __m256i out; ++static inline __m256i __lasx_xvclip255_w(__m256i in) { ++ __m256i out; + +- out = __lasx_xvmaxi_w(in, 0); +- out = __lasx_xvsat_wu(out, 7); +- return out; ++ out = __lasx_xvmaxi_w(in, 0); ++ out = __lasx_xvsat_wu(out, 7); ++ return out; + } + + /* + * ============================================================================= + * Description : Indexed halfword element values are replicated to all +- * elements in output vector. If 'indx < 8' use xvsplati_l_*, +- * if 'indx >= 8' use xvsplati_h_*. ++ * elements in output vector. If 'idx < 8' use xvsplati_l_*, ++ * if 'idx >= 8' use xvsplati_h_*. + * Arguments : Inputs - in, idx + * Output - out + * Details : Idx element value from in vector is replicated to all +@@ -1366,20 +1403,19 @@ static inline __m256i __lasx_xvclip255_w(__m256i in) + * out : 11,11,11,11, 11,11,11,11, 11,11,11,11, 11,11,11,11 + * ============================================================================= + */ +-static inline __m256i __lasx_xvsplati_l_h(__m256i in, int idx) +-{ +- __m256i out; ++static inline __m256i __lasx_xvsplati_l_h(__m256i in, int idx) { ++ __m256i out; + +- out = __lasx_xvpermi_q(in, in, 0x02); +- out = __lasx_xvreplve_h(out, idx); +- return out; ++ out = __lasx_xvpermi_q(in, in, 0x02); ++ out = __lasx_xvreplve_h(out, idx); ++ return out; + } + + /* + * ============================================================================= + * Description : Indexed halfword element values are replicated to all +- * elements in output vector. If 'indx < 8' use xvsplati_l_*, +- * if 'indx >= 8' use xvsplati_h_*. ++ * elements in output vector. If 'idx < 8' use xvsplati_l_*, ++ * if 'idx >= 8' use xvsplati_h_*. + * Arguments : Inputs - in, idx + * Output - out + * Details : Idx element value from in vector is replicated to all +@@ -1391,103 +1427,104 @@ static inline __m256i __lasx_xvsplati_l_h(__m256i in, int idx) + * out : 2,2,2,2, 2,2,2,2, 2,2,2,2, 2,2,2,2 + * ============================================================================= + */ ++static inline __m256i __lasx_xvsplati_h_h(__m256i in, int idx) { ++ __m256i out; + +-static inline __m256i __lasx_xvsplati_h_h(__m256i in, int idx) +-{ +- __m256i out; +- +- out = __lasx_xvpermi_q(in, in, 0x13); +- out = __lasx_xvreplve_h(out, idx); +- return out; ++ out = __lasx_xvpermi_q(in, in, 0x13); ++ out = __lasx_xvreplve_h(out, idx); ++ return out; + } + + /* + * ============================================================================= +- * Description : Transpose 4x4 block with double word elements in vectors ++ * Description : Transpose 4x4 block with double-word elements in vectors + * Arguments : Inputs - _in0, _in1, _in2, _in3 + * Outputs - _out0, _out1, _out2, _out3 + * Example : LASX_TRANSPOSE4x4_D +- * _in0 : 1,2,3,4 +- * _in1 : 1,2,3,4 +- * _in2 : 1,2,3,4 +- * _in3 : 1,2,3,4 ++ * _in0 : 1,2,3,4 ++ * _in1 : 1,2,3,4 ++ * _in2 : 1,2,3,4 ++ * _in3 : 1,2,3,4 + * +- * _out0 : 1,1,1,1 +- * _out1 : 2,2,2,2 +- * _out2 : 3,3,3,3 +- * _out3 : 4,4,4,4 ++ * _out0 : 1,1,1,1 ++ * _out1 : 2,2,2,2 ++ * _out2 : 3,3,3,3 ++ * _out3 : 4,4,4,4 + * ============================================================================= + */ +-#define LASX_TRANSPOSE4x4_D(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ +-{ \ +- __m256i _tmp0, _tmp1, _tmp2, _tmp3; \ +- _tmp0 = __lasx_xvilvl_d(_in1, _in0); \ +- _tmp1 = __lasx_xvilvh_d(_in1, _in0); \ +- _tmp2 = __lasx_xvilvl_d(_in3, _in2); \ +- _tmp3 = __lasx_xvilvh_d(_in3, _in2); \ +- _out0 = __lasx_xvpermi_q(_tmp2, _tmp0, 0x20); \ +- _out2 = __lasx_xvpermi_q(_tmp2, _tmp0, 0x31); \ +- _out1 = __lasx_xvpermi_q(_tmp3, _tmp1, 0x20); \ +- _out3 = __lasx_xvpermi_q(_tmp3, _tmp1, 0x31); \ +-} ++#define LASX_TRANSPOSE4x4_D(_in0, _in1, _in2, _in3, _out0, _out1, _out2, \ ++ _out3) \ ++ { \ ++ __m256i _tmp0, _tmp1, _tmp2, _tmp3; \ ++ _tmp0 = __lasx_xvilvl_d(_in1, _in0); \ ++ _tmp1 = __lasx_xvilvh_d(_in1, _in0); \ ++ _tmp2 = __lasx_xvilvl_d(_in3, _in2); \ ++ _tmp3 = __lasx_xvilvh_d(_in3, _in2); \ ++ _out0 = __lasx_xvpermi_q(_tmp2, _tmp0, 0x20); \ ++ _out2 = __lasx_xvpermi_q(_tmp2, _tmp0, 0x31); \ ++ _out1 = __lasx_xvpermi_q(_tmp3, _tmp1, 0x20); \ ++ _out3 = __lasx_xvpermi_q(_tmp3, _tmp1, 0x31); \ ++ } + + /* + * ============================================================================= + * Description : Transpose 8x8 block with word elements in vectors + * Arguments : Inputs - _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7 +- * Outputs - _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7 ++ * Outputs - _out0, _out1, _out2, _out3, _out4, _out5, _out6, ++ * _out7 + * Example : LASX_TRANSPOSE8x8_W +- * _in0 : 1,2,3,4,5,6,7,8 +- * _in1 : 2,2,3,4,5,6,7,8 +- * _in2 : 3,2,3,4,5,6,7,8 +- * _in3 : 4,2,3,4,5,6,7,8 +- * _in4 : 5,2,3,4,5,6,7,8 +- * _in5 : 6,2,3,4,5,6,7,8 +- * _in6 : 7,2,3,4,5,6,7,8 +- * _in7 : 8,2,3,4,5,6,7,8 ++ * _in0 : 1,2,3,4,5,6,7,8 ++ * _in1 : 2,2,3,4,5,6,7,8 ++ * _in2 : 3,2,3,4,5,6,7,8 ++ * _in3 : 4,2,3,4,5,6,7,8 ++ * _in4 : 5,2,3,4,5,6,7,8 ++ * _in5 : 6,2,3,4,5,6,7,8 ++ * _in6 : 7,2,3,4,5,6,7,8 ++ * _in7 : 8,2,3,4,5,6,7,8 + * +- * _out0 : 1,2,3,4,5,6,7,8 +- * _out1 : 2,2,2,2,2,2,2,2 +- * _out2 : 3,3,3,3,3,3,3,3 +- * _out3 : 4,4,4,4,4,4,4,4 +- * _out4 : 5,5,5,5,5,5,5,5 +- * _out5 : 6,6,6,6,6,6,6,6 +- * _out6 : 7,7,7,7,7,7,7,7 +- * _out7 : 8,8,8,8,8,8,8,8 ++ * _out0 : 1,2,3,4,5,6,7,8 ++ * _out1 : 2,2,2,2,2,2,2,2 ++ * _out2 : 3,3,3,3,3,3,3,3 ++ * _out3 : 4,4,4,4,4,4,4,4 ++ * _out4 : 5,5,5,5,5,5,5,5 ++ * _out5 : 6,6,6,6,6,6,6,6 ++ * _out6 : 7,7,7,7,7,7,7,7 ++ * _out7 : 8,8,8,8,8,8,8,8 + * ============================================================================= + */ +-#define LASX_TRANSPOSE8x8_W(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ +- _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ +-{ \ +- __m256i _s0_m, _s1_m; \ +- __m256i _tmp0_m, _tmp1_m, _tmp2_m, _tmp3_m; \ +- __m256i _tmp4_m, _tmp5_m, _tmp6_m, _tmp7_m; \ +- \ +- _s0_m = __lasx_xvilvl_w(_in2, _in0); \ +- _s1_m = __lasx_xvilvl_w(_in3, _in1); \ +- _tmp0_m = __lasx_xvilvl_w(_s1_m, _s0_m); \ +- _tmp1_m = __lasx_xvilvh_w(_s1_m, _s0_m); \ +- _s0_m = __lasx_xvilvh_w(_in2, _in0); \ +- _s1_m = __lasx_xvilvh_w(_in3, _in1); \ +- _tmp2_m = __lasx_xvilvl_w(_s1_m, _s0_m); \ +- _tmp3_m = __lasx_xvilvh_w(_s1_m, _s0_m); \ +- _s0_m = __lasx_xvilvl_w(_in6, _in4); \ +- _s1_m = __lasx_xvilvl_w(_in7, _in5); \ +- _tmp4_m = __lasx_xvilvl_w(_s1_m, _s0_m); \ +- _tmp5_m = __lasx_xvilvh_w(_s1_m, _s0_m); \ +- _s0_m = __lasx_xvilvh_w(_in6, _in4); \ +- _s1_m = __lasx_xvilvh_w(_in7, _in5); \ +- _tmp6_m = __lasx_xvilvl_w(_s1_m, _s0_m); \ +- _tmp7_m = __lasx_xvilvh_w(_s1_m, _s0_m); \ +- _out0 = __lasx_xvpermi_q(_tmp4_m, _tmp0_m, 0x20); \ +- _out1 = __lasx_xvpermi_q(_tmp5_m, _tmp1_m, 0x20); \ +- _out2 = __lasx_xvpermi_q(_tmp6_m, _tmp2_m, 0x20); \ +- _out3 = __lasx_xvpermi_q(_tmp7_m, _tmp3_m, 0x20); \ +- _out4 = __lasx_xvpermi_q(_tmp4_m, _tmp0_m, 0x31); \ +- _out5 = __lasx_xvpermi_q(_tmp5_m, _tmp1_m, 0x31); \ +- _out6 = __lasx_xvpermi_q(_tmp6_m, _tmp2_m, 0x31); \ +- _out7 = __lasx_xvpermi_q(_tmp7_m, _tmp3_m, 0x31); \ +-} ++#define LASX_TRANSPOSE8x8_W(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, \ ++ _out7) \ ++ { \ ++ __m256i _s0_m, _s1_m; \ ++ __m256i _tmp0_m, _tmp1_m, _tmp2_m, _tmp3_m; \ ++ __m256i _tmp4_m, _tmp5_m, _tmp6_m, _tmp7_m; \ ++ \ ++ _s0_m = __lasx_xvilvl_w(_in2, _in0); \ ++ _s1_m = __lasx_xvilvl_w(_in3, _in1); \ ++ _tmp0_m = __lasx_xvilvl_w(_s1_m, _s0_m); \ ++ _tmp1_m = __lasx_xvilvh_w(_s1_m, _s0_m); \ ++ _s0_m = __lasx_xvilvh_w(_in2, _in0); \ ++ _s1_m = __lasx_xvilvh_w(_in3, _in1); \ ++ _tmp2_m = __lasx_xvilvl_w(_s1_m, _s0_m); \ ++ _tmp3_m = __lasx_xvilvh_w(_s1_m, _s0_m); \ ++ _s0_m = __lasx_xvilvl_w(_in6, _in4); \ ++ _s1_m = __lasx_xvilvl_w(_in7, _in5); \ ++ _tmp4_m = __lasx_xvilvl_w(_s1_m, _s0_m); \ ++ _tmp5_m = __lasx_xvilvh_w(_s1_m, _s0_m); \ ++ _s0_m = __lasx_xvilvh_w(_in6, _in4); \ ++ _s1_m = __lasx_xvilvh_w(_in7, _in5); \ ++ _tmp6_m = __lasx_xvilvl_w(_s1_m, _s0_m); \ ++ _tmp7_m = __lasx_xvilvh_w(_s1_m, _s0_m); \ ++ _out0 = __lasx_xvpermi_q(_tmp4_m, _tmp0_m, 0x20); \ ++ _out1 = __lasx_xvpermi_q(_tmp5_m, _tmp1_m, 0x20); \ ++ _out2 = __lasx_xvpermi_q(_tmp6_m, _tmp2_m, 0x20); \ ++ _out3 = __lasx_xvpermi_q(_tmp7_m, _tmp3_m, 0x20); \ ++ _out4 = __lasx_xvpermi_q(_tmp4_m, _tmp0_m, 0x31); \ ++ _out5 = __lasx_xvpermi_q(_tmp5_m, _tmp1_m, 0x31); \ ++ _out6 = __lasx_xvpermi_q(_tmp6_m, _tmp2_m, 0x31); \ ++ _out7 = __lasx_xvpermi_q(_tmp7_m, _tmp3_m, 0x31); \ ++ } + + /* + * ============================================================================= +@@ -1495,53 +1532,54 @@ static inline __m256i __lasx_xvsplati_h_h(__m256i in, int idx) + * Arguments : Inputs - _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, + * _in8, _in9, _in10, _in11, _in12, _in13, _in14, _in15 + * (input 16x8 byte block) +- * Outputs - _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7 +- * (output 8x16 byte block) +- * Details : The rows of the matrix become columns, and the columns become rows. ++ * Outputs - _out0, _out1, _out2, _out3, _out4, _out5, _out6, ++ * _out7 (output 8x16 byte block) ++ * Details : The rows of the matrix become columns, and the columns become ++ * rows. + * Example : See LASX_TRANSPOSE16x8_H + * ============================================================================= + */ +-#define LASX_TRANSPOSE16x8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ +- _in8, _in9, _in10, _in11, _in12, _in13, _in14, _in15, \ +- _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ +-{ \ +- __m256i _tmp0_m, _tmp1_m, _tmp2_m, _tmp3_m; \ +- __m256i _tmp4_m, _tmp5_m, _tmp6_m, _tmp7_m; \ +- __m256i _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ +- \ +- _tmp0_m = __lasx_xvilvl_b(_in2, _in0); \ +- _tmp1_m = __lasx_xvilvl_b(_in3, _in1); \ +- _tmp2_m = __lasx_xvilvl_b(_in6, _in4); \ +- _tmp3_m = __lasx_xvilvl_b(_in7, _in5); \ +- _tmp4_m = __lasx_xvilvl_b(_in10, _in8); \ +- _tmp5_m = __lasx_xvilvl_b(_in11, _in9); \ +- _tmp6_m = __lasx_xvilvl_b(_in14, _in12); \ +- _tmp7_m = __lasx_xvilvl_b(_in15, _in13); \ +- _t0 = __lasx_xvilvl_b(_tmp1_m, _tmp0_m); \ +- _t1 = __lasx_xvilvh_b(_tmp1_m, _tmp0_m); \ +- _t2 = __lasx_xvilvl_b(_tmp3_m, _tmp2_m); \ +- _t3 = __lasx_xvilvh_b(_tmp3_m, _tmp2_m); \ +- _t4 = __lasx_xvilvl_b(_tmp5_m, _tmp4_m); \ +- _t5 = __lasx_xvilvh_b(_tmp5_m, _tmp4_m); \ +- _t6 = __lasx_xvilvl_b(_tmp7_m, _tmp6_m); \ +- _t7 = __lasx_xvilvh_b(_tmp7_m, _tmp6_m); \ +- _tmp0_m = __lasx_xvilvl_w(_t2, _t0); \ +- _tmp2_m = __lasx_xvilvh_w(_t2, _t0); \ +- _tmp4_m = __lasx_xvilvl_w(_t3, _t1); \ +- _tmp6_m = __lasx_xvilvh_w(_t3, _t1); \ +- _tmp1_m = __lasx_xvilvl_w(_t6, _t4); \ +- _tmp3_m = __lasx_xvilvh_w(_t6, _t4); \ +- _tmp5_m = __lasx_xvilvl_w(_t7, _t5); \ +- _tmp7_m = __lasx_xvilvh_w(_t7, _t5); \ +- _out0 = __lasx_xvilvl_d(_tmp1_m, _tmp0_m); \ +- _out1 = __lasx_xvilvh_d(_tmp1_m, _tmp0_m); \ +- _out2 = __lasx_xvilvl_d(_tmp3_m, _tmp2_m); \ +- _out3 = __lasx_xvilvh_d(_tmp3_m, _tmp2_m); \ +- _out4 = __lasx_xvilvl_d(_tmp5_m, _tmp4_m); \ +- _out5 = __lasx_xvilvh_d(_tmp5_m, _tmp4_m); \ +- _out6 = __lasx_xvilvl_d(_tmp7_m, _tmp6_m); \ +- _out7 = __lasx_xvilvh_d(_tmp7_m, _tmp6_m); \ +-} ++#define LASX_TRANSPOSE16x8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _in8, _in9, _in10, _in11, _in12, _in13, _in14, \ ++ _in15, _out0, _out1, _out2, _out3, _out4, _out5, \ ++ _out6, _out7) \ ++ { \ ++ __m256i _tmp0_m, _tmp1_m, _tmp2_m, _tmp3_m; \ ++ __m256i _tmp4_m, _tmp5_m, _tmp6_m, _tmp7_m; \ ++ \ ++ _tmp0_m = __lasx_xvilvl_b(_in2, _in0); \ ++ _tmp1_m = __lasx_xvilvl_b(_in3, _in1); \ ++ _tmp2_m = __lasx_xvilvl_b(_in6, _in4); \ ++ _tmp3_m = __lasx_xvilvl_b(_in7, _in5); \ ++ _tmp4_m = __lasx_xvilvl_b(_in10, _in8); \ ++ _tmp5_m = __lasx_xvilvl_b(_in11, _in9); \ ++ _tmp6_m = __lasx_xvilvl_b(_in14, _in12); \ ++ _tmp7_m = __lasx_xvilvl_b(_in15, _in13); \ ++ _out0 = __lasx_xvilvl_b(_tmp1_m, _tmp0_m); \ ++ _out1 = __lasx_xvilvh_b(_tmp1_m, _tmp0_m); \ ++ _out2 = __lasx_xvilvl_b(_tmp3_m, _tmp2_m); \ ++ _out3 = __lasx_xvilvh_b(_tmp3_m, _tmp2_m); \ ++ _out4 = __lasx_xvilvl_b(_tmp5_m, _tmp4_m); \ ++ _out5 = __lasx_xvilvh_b(_tmp5_m, _tmp4_m); \ ++ _out6 = __lasx_xvilvl_b(_tmp7_m, _tmp6_m); \ ++ _out7 = __lasx_xvilvh_b(_tmp7_m, _tmp6_m); \ ++ _tmp0_m = __lasx_xvilvl_w(_out2, _out0); \ ++ _tmp2_m = __lasx_xvilvh_w(_out2, _out0); \ ++ _tmp4_m = __lasx_xvilvl_w(_out3, _out1); \ ++ _tmp6_m = __lasx_xvilvh_w(_out3, _out1); \ ++ _tmp1_m = __lasx_xvilvl_w(_out6, _out4); \ ++ _tmp3_m = __lasx_xvilvh_w(_out6, _out4); \ ++ _tmp5_m = __lasx_xvilvl_w(_out7, _out5); \ ++ _tmp7_m = __lasx_xvilvh_w(_out7, _out5); \ ++ _out0 = __lasx_xvilvl_d(_tmp1_m, _tmp0_m); \ ++ _out1 = __lasx_xvilvh_d(_tmp1_m, _tmp0_m); \ ++ _out2 = __lasx_xvilvl_d(_tmp3_m, _tmp2_m); \ ++ _out3 = __lasx_xvilvh_d(_tmp3_m, _tmp2_m); \ ++ _out4 = __lasx_xvilvl_d(_tmp5_m, _tmp4_m); \ ++ _out5 = __lasx_xvilvh_d(_tmp5_m, _tmp4_m); \ ++ _out6 = __lasx_xvilvl_d(_tmp7_m, _tmp6_m); \ ++ _out7 = __lasx_xvilvh_d(_tmp7_m, _tmp6_m); \ ++ } + + /* + * ============================================================================= +@@ -1549,9 +1587,10 @@ static inline __m256i __lasx_xvsplati_h_h(__m256i in, int idx) + * Arguments : Inputs - _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, + * _in8, _in9, _in10, _in11, _in12, _in13, _in14, _in15 + * (input 16x8 byte block) +- * Outputs - _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7 +- * (output 8x16 byte block) +- * Details : The rows of the matrix become columns, and the columns become rows. ++ * Outputs - _out0, _out1, _out2, _out3, _out4, _out5, _out6, ++ * _out7 (output 8x16 byte block) ++ * Details : The rows of the matrix become columns, and the columns become ++ * rows. + * Example : LASX_TRANSPOSE16x8_H + * _in0 : 1,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 + * _in1 : 2,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0 +@@ -1580,72 +1619,73 @@ static inline __m256i __lasx_xvsplati_h_h(__m256i in, int idx) + * _out7 : 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 + * ============================================================================= + */ +-#define LASX_TRANSPOSE16x8_H(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ +- _in8, _in9, _in10, _in11, _in12, _in13, _in14, _in15, \ +- _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ +- { \ +- __m256i _tmp0_m, _tmp1_m, _tmp2_m, _tmp3_m; \ +- __m256i _tmp4_m, _tmp5_m, _tmp6_m, _tmp7_m; \ +- __m256i _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ +- \ +- _tmp0_m = __lasx_xvilvl_h(_in2, _in0); \ +- _tmp1_m = __lasx_xvilvl_h(_in3, _in1); \ +- _tmp2_m = __lasx_xvilvl_h(_in6, _in4); \ +- _tmp3_m = __lasx_xvilvl_h(_in7, _in5); \ +- _tmp4_m = __lasx_xvilvl_h(_in10, _in8); \ +- _tmp5_m = __lasx_xvilvl_h(_in11, _in9); \ +- _tmp6_m = __lasx_xvilvl_h(_in14, _in12); \ +- _tmp7_m = __lasx_xvilvl_h(_in15, _in13); \ +- _t0 = __lasx_xvilvl_h(_tmp1_m, _tmp0_m); \ +- _t1 = __lasx_xvilvh_h(_tmp1_m, _tmp0_m); \ +- _t2 = __lasx_xvilvl_h(_tmp3_m, _tmp2_m); \ +- _t3 = __lasx_xvilvh_h(_tmp3_m, _tmp2_m); \ +- _t4 = __lasx_xvilvl_h(_tmp5_m, _tmp4_m); \ +- _t5 = __lasx_xvilvh_h(_tmp5_m, _tmp4_m); \ +- _t6 = __lasx_xvilvl_h(_tmp7_m, _tmp6_m); \ +- _t7 = __lasx_xvilvh_h(_tmp7_m, _tmp6_m); \ +- _tmp0_m = __lasx_xvilvl_d(_t2, _t0); \ +- _tmp2_m = __lasx_xvilvh_d(_t2, _t0); \ +- _tmp4_m = __lasx_xvilvl_d(_t3, _t1); \ +- _tmp6_m = __lasx_xvilvh_d(_t3, _t1); \ +- _tmp1_m = __lasx_xvilvl_d(_t6, _t4); \ +- _tmp3_m = __lasx_xvilvh_d(_t6, _t4); \ +- _tmp5_m = __lasx_xvilvl_d(_t7, _t5); \ +- _tmp7_m = __lasx_xvilvh_d(_t7, _t5); \ +- _out0 = __lasx_xvpermi_q(_tmp1_m, _tmp0_m, 0x20); \ +- _out1 = __lasx_xvpermi_q(_tmp3_m, _tmp2_m, 0x20); \ +- _out2 = __lasx_xvpermi_q(_tmp5_m, _tmp4_m, 0x20); \ +- _out3 = __lasx_xvpermi_q(_tmp7_m, _tmp6_m, 0x20); \ +- \ +- _tmp0_m = __lasx_xvilvh_h(_in2, _in0); \ +- _tmp1_m = __lasx_xvilvh_h(_in3, _in1); \ +- _tmp2_m = __lasx_xvilvh_h(_in6, _in4); \ +- _tmp3_m = __lasx_xvilvh_h(_in7, _in5); \ +- _tmp4_m = __lasx_xvilvh_h(_in10, _in8); \ +- _tmp5_m = __lasx_xvilvh_h(_in11, _in9); \ +- _tmp6_m = __lasx_xvilvh_h(_in14, _in12); \ +- _tmp7_m = __lasx_xvilvh_h(_in15, _in13); \ +- _t0 = __lasx_xvilvl_h(_tmp1_m, _tmp0_m); \ +- _t1 = __lasx_xvilvh_h(_tmp1_m, _tmp0_m); \ +- _t2 = __lasx_xvilvl_h(_tmp3_m, _tmp2_m); \ +- _t3 = __lasx_xvilvh_h(_tmp3_m, _tmp2_m); \ +- _t4 = __lasx_xvilvl_h(_tmp5_m, _tmp4_m); \ +- _t5 = __lasx_xvilvh_h(_tmp5_m, _tmp4_m); \ +- _t6 = __lasx_xvilvl_h(_tmp7_m, _tmp6_m); \ +- _t7 = __lasx_xvilvh_h(_tmp7_m, _tmp6_m); \ +- _tmp0_m = __lasx_xvilvl_d(_t2, _t0); \ +- _tmp2_m = __lasx_xvilvh_d(_t2, _t0); \ +- _tmp4_m = __lasx_xvilvl_d(_t3, _t1); \ +- _tmp6_m = __lasx_xvilvh_d(_t3, _t1); \ +- _tmp1_m = __lasx_xvilvl_d(_t6, _t4); \ +- _tmp3_m = __lasx_xvilvh_d(_t6, _t4); \ +- _tmp5_m = __lasx_xvilvl_d(_t7, _t5); \ +- _tmp7_m = __lasx_xvilvh_d(_t7, _t5); \ +- _out4 = __lasx_xvpermi_q(_tmp1_m, _tmp0_m, 0x20); \ +- _out5 = __lasx_xvpermi_q(_tmp3_m, _tmp2_m, 0x20); \ +- _out6 = __lasx_xvpermi_q(_tmp5_m, _tmp4_m, 0x20); \ +- _out7 = __lasx_xvpermi_q(_tmp7_m, _tmp6_m, 0x20); \ +-} ++#define LASX_TRANSPOSE16x8_H(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _in8, _in9, _in10, _in11, _in12, _in13, _in14, \ ++ _in15, _out0, _out1, _out2, _out3, _out4, _out5, \ ++ _out6, _out7) \ ++ { \ ++ __m256i _tmp0_m, _tmp1_m, _tmp2_m, _tmp3_m; \ ++ __m256i _tmp4_m, _tmp5_m, _tmp6_m, _tmp7_m; \ ++ __m256i _t0, _t1, _t2, _t3, _t4, _t5, _t6, _t7; \ ++ \ ++ _tmp0_m = __lasx_xvilvl_h(_in2, _in0); \ ++ _tmp1_m = __lasx_xvilvl_h(_in3, _in1); \ ++ _tmp2_m = __lasx_xvilvl_h(_in6, _in4); \ ++ _tmp3_m = __lasx_xvilvl_h(_in7, _in5); \ ++ _tmp4_m = __lasx_xvilvl_h(_in10, _in8); \ ++ _tmp5_m = __lasx_xvilvl_h(_in11, _in9); \ ++ _tmp6_m = __lasx_xvilvl_h(_in14, _in12); \ ++ _tmp7_m = __lasx_xvilvl_h(_in15, _in13); \ ++ _t0 = __lasx_xvilvl_h(_tmp1_m, _tmp0_m); \ ++ _t1 = __lasx_xvilvh_h(_tmp1_m, _tmp0_m); \ ++ _t2 = __lasx_xvilvl_h(_tmp3_m, _tmp2_m); \ ++ _t3 = __lasx_xvilvh_h(_tmp3_m, _tmp2_m); \ ++ _t4 = __lasx_xvilvl_h(_tmp5_m, _tmp4_m); \ ++ _t5 = __lasx_xvilvh_h(_tmp5_m, _tmp4_m); \ ++ _t6 = __lasx_xvilvl_h(_tmp7_m, _tmp6_m); \ ++ _t7 = __lasx_xvilvh_h(_tmp7_m, _tmp6_m); \ ++ _tmp0_m = __lasx_xvilvl_d(_t2, _t0); \ ++ _tmp2_m = __lasx_xvilvh_d(_t2, _t0); \ ++ _tmp4_m = __lasx_xvilvl_d(_t3, _t1); \ ++ _tmp6_m = __lasx_xvilvh_d(_t3, _t1); \ ++ _tmp1_m = __lasx_xvilvl_d(_t6, _t4); \ ++ _tmp3_m = __lasx_xvilvh_d(_t6, _t4); \ ++ _tmp5_m = __lasx_xvilvl_d(_t7, _t5); \ ++ _tmp7_m = __lasx_xvilvh_d(_t7, _t5); \ ++ _out0 = __lasx_xvpermi_q(_tmp1_m, _tmp0_m, 0x20); \ ++ _out1 = __lasx_xvpermi_q(_tmp3_m, _tmp2_m, 0x20); \ ++ _out2 = __lasx_xvpermi_q(_tmp5_m, _tmp4_m, 0x20); \ ++ _out3 = __lasx_xvpermi_q(_tmp7_m, _tmp6_m, 0x20); \ ++ \ ++ _tmp0_m = __lasx_xvilvh_h(_in2, _in0); \ ++ _tmp1_m = __lasx_xvilvh_h(_in3, _in1); \ ++ _tmp2_m = __lasx_xvilvh_h(_in6, _in4); \ ++ _tmp3_m = __lasx_xvilvh_h(_in7, _in5); \ ++ _tmp4_m = __lasx_xvilvh_h(_in10, _in8); \ ++ _tmp5_m = __lasx_xvilvh_h(_in11, _in9); \ ++ _tmp6_m = __lasx_xvilvh_h(_in14, _in12); \ ++ _tmp7_m = __lasx_xvilvh_h(_in15, _in13); \ ++ _t0 = __lasx_xvilvl_h(_tmp1_m, _tmp0_m); \ ++ _t1 = __lasx_xvilvh_h(_tmp1_m, _tmp0_m); \ ++ _t2 = __lasx_xvilvl_h(_tmp3_m, _tmp2_m); \ ++ _t3 = __lasx_xvilvh_h(_tmp3_m, _tmp2_m); \ ++ _t4 = __lasx_xvilvl_h(_tmp5_m, _tmp4_m); \ ++ _t5 = __lasx_xvilvh_h(_tmp5_m, _tmp4_m); \ ++ _t6 = __lasx_xvilvl_h(_tmp7_m, _tmp6_m); \ ++ _t7 = __lasx_xvilvh_h(_tmp7_m, _tmp6_m); \ ++ _tmp0_m = __lasx_xvilvl_d(_t2, _t0); \ ++ _tmp2_m = __lasx_xvilvh_d(_t2, _t0); \ ++ _tmp4_m = __lasx_xvilvl_d(_t3, _t1); \ ++ _tmp6_m = __lasx_xvilvh_d(_t3, _t1); \ ++ _tmp1_m = __lasx_xvilvl_d(_t6, _t4); \ ++ _tmp3_m = __lasx_xvilvh_d(_t6, _t4); \ ++ _tmp5_m = __lasx_xvilvl_d(_t7, _t5); \ ++ _tmp7_m = __lasx_xvilvh_d(_t7, _t5); \ ++ _out4 = __lasx_xvpermi_q(_tmp1_m, _tmp0_m, 0x20); \ ++ _out5 = __lasx_xvpermi_q(_tmp3_m, _tmp2_m, 0x20); \ ++ _out6 = __lasx_xvpermi_q(_tmp5_m, _tmp4_m, 0x20); \ ++ _out7 = __lasx_xvpermi_q(_tmp7_m, _tmp6_m, 0x20); \ ++ } + + /* + * ============================================================================= +@@ -1653,61 +1693,65 @@ static inline __m256i __lasx_xvsplati_h_h(__m256i in, int idx) + * Arguments : Inputs - _in0, _in1, _in2, _in3 + * Outputs - _out0, _out1, _out2, _out3 + * Return Type - signed halfword +- * Details : The rows of the matrix become columns, and the columns become rows. ++ * Details : The rows of the matrix become columns, and the columns become ++ * rows. + * Example : See LASX_TRANSPOSE8x8_H + * ============================================================================= + */ +-#define LASX_TRANSPOSE4x4_H(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ +-{ \ +- __m256i _s0_m, _s1_m; \ +- \ +- _s0_m = __lasx_xvilvl_h(_in1, _in0); \ +- _s1_m = __lasx_xvilvl_h(_in3, _in2); \ +- _out0 = __lasx_xvilvl_w(_s1_m, _s0_m); \ +- _out2 = __lasx_xvilvh_w(_s1_m, _s0_m); \ +- _out1 = __lasx_xvilvh_d(_out0, _out0); \ +- _out3 = __lasx_xvilvh_d(_out2, _out2); \ +-} ++#define LASX_TRANSPOSE4x4_H(_in0, _in1, _in2, _in3, _out0, _out1, _out2, \ ++ _out3) \ ++ { \ ++ __m256i _s0_m, _s1_m; \ ++ \ ++ _s0_m = __lasx_xvilvl_h(_in1, _in0); \ ++ _s1_m = __lasx_xvilvl_h(_in3, _in2); \ ++ _out0 = __lasx_xvilvl_w(_s1_m, _s0_m); \ ++ _out2 = __lasx_xvilvh_w(_s1_m, _s0_m); \ ++ _out1 = __lasx_xvilvh_d(_out0, _out0); \ ++ _out3 = __lasx_xvilvh_d(_out2, _out2); \ ++ } + + /* + * ============================================================================= + * Description : Transpose input 8x8 byte block + * Arguments : Inputs - _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7 + * (input 8x8 byte block) +- * Outputs - _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7 +- * (output 8x8 byte block) ++ * Outputs - _out0, _out1, _out2, _out3, _out4, _out5, _out6, ++ * _out7 (output 8x8 byte block) + * Example : See LASX_TRANSPOSE8x8_H + * ============================================================================= + */ +-#define LASX_TRANSPOSE8x8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, _out0, \ +- _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ +-{ \ +- __m256i _tmp0_m, _tmp1_m, _tmp2_m, _tmp3_m; \ +- __m256i _tmp4_m, _tmp5_m, _tmp6_m, _tmp7_m; \ +- _tmp0_m = __lasx_xvilvl_b(_in2, _in0); \ +- _tmp1_m = __lasx_xvilvl_b(_in3, _in1); \ +- _tmp2_m = __lasx_xvilvl_b(_in6, _in4); \ +- _tmp3_m = __lasx_xvilvl_b(_in7, _in5); \ +- _tmp4_m = __lasx_xvilvl_b(_tmp1_m, _tmp0_m); \ +- _tmp5_m = __lasx_xvilvh_b(_tmp1_m, _tmp0_m); \ +- _tmp6_m = __lasx_xvilvl_b(_tmp3_m, _tmp2_m); \ +- _tmp7_m = __lasx_xvilvh_b(_tmp3_m, _tmp2_m); \ +- _out0 = __lasx_xvilvl_w(_tmp6_m, _tmp4_m); \ +- _out2 = __lasx_xvilvh_w(_tmp6_m, _tmp4_m); \ +- _out4 = __lasx_xvilvl_w(_tmp7_m, _tmp5_m); \ +- _out6 = __lasx_xvilvh_w(_tmp7_m, _tmp5_m); \ +- _out1 = __lasx_xvbsrl_v(_out0, 8); \ +- _out3 = __lasx_xvbsrl_v(_out2, 8); \ +- _out5 = __lasx_xvbsrl_v(_out4, 8); \ +- _out7 = __lasx_xvbsrl_v(_out6, 8); \ +-} ++#define LASX_TRANSPOSE8x8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, \ ++ _out7) \ ++ { \ ++ __m256i _tmp0_m, _tmp1_m, _tmp2_m, _tmp3_m; \ ++ __m256i _tmp4_m, _tmp5_m, _tmp6_m, _tmp7_m; \ ++ _tmp0_m = __lasx_xvilvl_b(_in2, _in0); \ ++ _tmp1_m = __lasx_xvilvl_b(_in3, _in1); \ ++ _tmp2_m = __lasx_xvilvl_b(_in6, _in4); \ ++ _tmp3_m = __lasx_xvilvl_b(_in7, _in5); \ ++ _tmp4_m = __lasx_xvilvl_b(_tmp1_m, _tmp0_m); \ ++ _tmp5_m = __lasx_xvilvh_b(_tmp1_m, _tmp0_m); \ ++ _tmp6_m = __lasx_xvilvl_b(_tmp3_m, _tmp2_m); \ ++ _tmp7_m = __lasx_xvilvh_b(_tmp3_m, _tmp2_m); \ ++ _out0 = __lasx_xvilvl_w(_tmp6_m, _tmp4_m); \ ++ _out2 = __lasx_xvilvh_w(_tmp6_m, _tmp4_m); \ ++ _out4 = __lasx_xvilvl_w(_tmp7_m, _tmp5_m); \ ++ _out6 = __lasx_xvilvh_w(_tmp7_m, _tmp5_m); \ ++ _out1 = __lasx_xvbsrl_v(_out0, 8); \ ++ _out3 = __lasx_xvbsrl_v(_out2, 8); \ ++ _out5 = __lasx_xvbsrl_v(_out4, 8); \ ++ _out7 = __lasx_xvbsrl_v(_out6, 8); \ ++ } + + /* + * ============================================================================= + * Description : Transpose 8x8 block with halfword elements in vectors. + * Arguments : Inputs - _in0, _in1, ~ + * Outputs - _out0, _out1, ~ +- * Details : The rows of the matrix become columns, and the columns become rows. ++ * Details : The rows of the matrix become columns, and the columns become ++ * rows. + * Example : LASX_TRANSPOSE8x8_H + * _in0 : 1,2,3,4, 5,6,7,8, 1,2,3,4, 5,6,7,8 + * _in1 : 8,2,3,4, 5,6,7,8, 8,2,3,4, 5,6,7,8 +@@ -1728,40 +1772,41 @@ static inline __m256i __lasx_xvsplati_h_h(__m256i in, int idx) + * _out7 : 8,8,8,8, 8,8,8,8, 8,8,8,8, 8,8,8,8 + * ============================================================================= + */ +-#define LASX_TRANSPOSE8x8_H(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, _out0, \ +- _out1, _out2, _out3, _out4, _out5, _out6, _out7) \ +-{ \ +- __m256i _s0_m, _s1_m; \ +- __m256i _tmp0_m, _tmp1_m, _tmp2_m, _tmp3_m; \ +- __m256i _tmp4_m, _tmp5_m, _tmp6_m, _tmp7_m; \ +- \ +- _s0_m = __lasx_xvilvl_h(_in6, _in4); \ +- _s1_m = __lasx_xvilvl_h(_in7, _in5); \ +- _tmp0_m = __lasx_xvilvl_h(_s1_m, _s0_m); \ +- _tmp1_m = __lasx_xvilvh_h(_s1_m, _s0_m); \ +- _s0_m = __lasx_xvilvh_h(_in6, _in4); \ +- _s1_m = __lasx_xvilvh_h(_in7, _in5); \ +- _tmp2_m = __lasx_xvilvl_h(_s1_m, _s0_m); \ +- _tmp3_m = __lasx_xvilvh_h(_s1_m, _s0_m); \ +- \ +- _s0_m = __lasx_xvilvl_h(_in2, _in0); \ +- _s1_m = __lasx_xvilvl_h(_in3, _in1); \ +- _tmp4_m = __lasx_xvilvl_h(_s1_m, _s0_m); \ +- _tmp5_m = __lasx_xvilvh_h(_s1_m, _s0_m); \ +- _s0_m = __lasx_xvilvh_h(_in2, _in0); \ +- _s1_m = __lasx_xvilvh_h(_in3, _in1); \ +- _tmp6_m = __lasx_xvilvl_h(_s1_m, _s0_m); \ +- _tmp7_m = __lasx_xvilvh_h(_s1_m, _s0_m); \ +- \ +- _out0 = __lasx_xvpickev_d(_tmp0_m, _tmp4_m); \ +- _out2 = __lasx_xvpickev_d(_tmp1_m, _tmp5_m); \ +- _out4 = __lasx_xvpickev_d(_tmp2_m, _tmp6_m); \ +- _out6 = __lasx_xvpickev_d(_tmp3_m, _tmp7_m); \ +- _out1 = __lasx_xvpickod_d(_tmp0_m, _tmp4_m); \ +- _out3 = __lasx_xvpickod_d(_tmp1_m, _tmp5_m); \ +- _out5 = __lasx_xvpickod_d(_tmp2_m, _tmp6_m); \ +- _out7 = __lasx_xvpickod_d(_tmp3_m, _tmp7_m); \ +-} ++#define LASX_TRANSPOSE8x8_H(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, \ ++ _out7) \ ++ { \ ++ __m256i _s0_m, _s1_m; \ ++ __m256i _tmp0_m, _tmp1_m, _tmp2_m, _tmp3_m; \ ++ __m256i _tmp4_m, _tmp5_m, _tmp6_m, _tmp7_m; \ ++ \ ++ _s0_m = __lasx_xvilvl_h(_in6, _in4); \ ++ _s1_m = __lasx_xvilvl_h(_in7, _in5); \ ++ _tmp0_m = __lasx_xvilvl_h(_s1_m, _s0_m); \ ++ _tmp1_m = __lasx_xvilvh_h(_s1_m, _s0_m); \ ++ _s0_m = __lasx_xvilvh_h(_in6, _in4); \ ++ _s1_m = __lasx_xvilvh_h(_in7, _in5); \ ++ _tmp2_m = __lasx_xvilvl_h(_s1_m, _s0_m); \ ++ _tmp3_m = __lasx_xvilvh_h(_s1_m, _s0_m); \ ++ \ ++ _s0_m = __lasx_xvilvl_h(_in2, _in0); \ ++ _s1_m = __lasx_xvilvl_h(_in3, _in1); \ ++ _tmp4_m = __lasx_xvilvl_h(_s1_m, _s0_m); \ ++ _tmp5_m = __lasx_xvilvh_h(_s1_m, _s0_m); \ ++ _s0_m = __lasx_xvilvh_h(_in2, _in0); \ ++ _s1_m = __lasx_xvilvh_h(_in3, _in1); \ ++ _tmp6_m = __lasx_xvilvl_h(_s1_m, _s0_m); \ ++ _tmp7_m = __lasx_xvilvh_h(_s1_m, _s0_m); \ ++ \ ++ _out0 = __lasx_xvpickev_d(_tmp0_m, _tmp4_m); \ ++ _out2 = __lasx_xvpickev_d(_tmp1_m, _tmp5_m); \ ++ _out4 = __lasx_xvpickev_d(_tmp2_m, _tmp6_m); \ ++ _out6 = __lasx_xvpickev_d(_tmp3_m, _tmp7_m); \ ++ _out1 = __lasx_xvpickod_d(_tmp0_m, _tmp4_m); \ ++ _out3 = __lasx_xvpickod_d(_tmp1_m, _tmp5_m); \ ++ _out5 = __lasx_xvpickod_d(_tmp2_m, _tmp6_m); \ ++ _out7 = __lasx_xvpickod_d(_tmp3_m, _tmp7_m); \ ++ } + + /* + * ============================================================================= +@@ -1776,34 +1821,34 @@ static inline __m256i __lasx_xvsplati_h_h(__m256i in, int idx) + * _out3 = _in0 - _in3; + * ============================================================================= + */ +-#define LASX_BUTTERFLY_4_B(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ +-{ \ +- _out0 = __lasx_xvadd_b(_in0, _in3); \ +- _out1 = __lasx_xvadd_b(_in1, _in2); \ +- _out2 = __lasx_xvsub_b(_in1, _in2); \ +- _out3 = __lasx_xvsub_b(_in0, _in3); \ +-} +-#define LASX_BUTTERFLY_4_H(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ +-{ \ +- _out0 = __lasx_xvadd_h(_in0, _in3); \ +- _out1 = __lasx_xvadd_h(_in1, _in2); \ +- _out2 = __lasx_xvsub_h(_in1, _in2); \ +- _out3 = __lasx_xvsub_h(_in0, _in3); \ +-} +-#define LASX_BUTTERFLY_4_W(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ +-{ \ +- _out0 = __lasx_xvadd_w(_in0, _in3); \ +- _out1 = __lasx_xvadd_w(_in1, _in2); \ +- _out2 = __lasx_xvsub_w(_in1, _in2); \ +- _out3 = __lasx_xvsub_w(_in0, _in3); \ +-} +-#define LASX_BUTTERFLY_4_D(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ +-{ \ +- _out0 = __lasx_xvadd_d(_in0, _in3); \ +- _out1 = __lasx_xvadd_d(_in1, _in2); \ +- _out2 = __lasx_xvsub_d(_in1, _in2); \ +- _out3 = __lasx_xvsub_d(_in0, _in3); \ +-} ++#define LASX_BUTTERFLY_4_B(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++ { \ ++ _out0 = __lasx_xvadd_b(_in0, _in3); \ ++ _out1 = __lasx_xvadd_b(_in1, _in2); \ ++ _out2 = __lasx_xvsub_b(_in1, _in2); \ ++ _out3 = __lasx_xvsub_b(_in0, _in3); \ ++ } ++#define LASX_BUTTERFLY_4_H(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++ { \ ++ _out0 = __lasx_xvadd_h(_in0, _in3); \ ++ _out1 = __lasx_xvadd_h(_in1, _in2); \ ++ _out2 = __lasx_xvsub_h(_in1, _in2); \ ++ _out3 = __lasx_xvsub_h(_in0, _in3); \ ++ } ++#define LASX_BUTTERFLY_4_W(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++ { \ ++ _out0 = __lasx_xvadd_w(_in0, _in3); \ ++ _out1 = __lasx_xvadd_w(_in1, _in2); \ ++ _out2 = __lasx_xvsub_w(_in1, _in2); \ ++ _out3 = __lasx_xvsub_w(_in0, _in3); \ ++ } ++#define LASX_BUTTERFLY_4_D(_in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3) \ ++ { \ ++ _out0 = __lasx_xvadd_d(_in0, _in3); \ ++ _out1 = __lasx_xvadd_d(_in1, _in2); \ ++ _out2 = __lasx_xvsub_d(_in1, _in2); \ ++ _out3 = __lasx_xvsub_d(_in0, _in3); \ ++ } + + /* + * ============================================================================= +@@ -1822,60 +1867,82 @@ static inline __m256i __lasx_xvsplati_h_h(__m256i in, int idx) + * _out7 = _in0 - _in7; + * ============================================================================= + */ +-#define LASX_BUTTERFLY_8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ +- _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7)\ +-{ \ +- _out0 = __lasx_xvadd_b(_in0, _in7); \ +- _out1 = __lasx_xvadd_b(_in1, _in6); \ +- _out2 = __lasx_xvadd_b(_in2, _in5); \ +- _out3 = __lasx_xvadd_b(_in3, _in4); \ +- _out4 = __lasx_xvsub_b(_in3, _in4); \ +- _out5 = __lasx_xvsub_b(_in2, _in5); \ +- _out6 = __lasx_xvsub_b(_in1, _in6); \ +- _out7 = __lasx_xvsub_b(_in0, _in7); \ +-} +- +-#define LASX_BUTTERFLY_8_H(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ +- _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7)\ +-{ \ +- _out0 = __lasx_xvadd_h(_in0, _in7); \ +- _out1 = __lasx_xvadd_h(_in1, _in6); \ +- _out2 = __lasx_xvadd_h(_in2, _in5); \ +- _out3 = __lasx_xvadd_h(_in3, _in4); \ +- _out4 = __lasx_xvsub_h(_in3, _in4); \ +- _out5 = __lasx_xvsub_h(_in2, _in5); \ +- _out6 = __lasx_xvsub_h(_in1, _in6); \ +- _out7 = __lasx_xvsub_h(_in0, _in7); \ +-} ++#define LASX_BUTTERFLY_8_B(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, \ ++ _out7) \ ++ { \ ++ _out0 = __lasx_xvadd_b(_in0, _in7); \ ++ _out1 = __lasx_xvadd_b(_in1, _in6); \ ++ _out2 = __lasx_xvadd_b(_in2, _in5); \ ++ _out3 = __lasx_xvadd_b(_in3, _in4); \ ++ _out4 = __lasx_xvsub_b(_in3, _in4); \ ++ _out5 = __lasx_xvsub_b(_in2, _in5); \ ++ _out6 = __lasx_xvsub_b(_in1, _in6); \ ++ _out7 = __lasx_xvsub_b(_in0, _in7); \ ++ } ++ ++#define LASX_BUTTERFLY_8_H(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, \ ++ _out7) \ ++ { \ ++ _out0 = __lasx_xvadd_h(_in0, _in7); \ ++ _out1 = __lasx_xvadd_h(_in1, _in6); \ ++ _out2 = __lasx_xvadd_h(_in2, _in5); \ ++ _out3 = __lasx_xvadd_h(_in3, _in4); \ ++ _out4 = __lasx_xvsub_h(_in3, _in4); \ ++ _out5 = __lasx_xvsub_h(_in2, _in5); \ ++ _out6 = __lasx_xvsub_h(_in1, _in6); \ ++ _out7 = __lasx_xvsub_h(_in0, _in7); \ ++ } ++ ++#define LASX_BUTTERFLY_8_W(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, \ ++ _out7) \ ++ { \ ++ _out0 = __lasx_xvadd_w(_in0, _in7); \ ++ _out1 = __lasx_xvadd_w(_in1, _in6); \ ++ _out2 = __lasx_xvadd_w(_in2, _in5); \ ++ _out3 = __lasx_xvadd_w(_in3, _in4); \ ++ _out4 = __lasx_xvsub_w(_in3, _in4); \ ++ _out5 = __lasx_xvsub_w(_in2, _in5); \ ++ _out6 = __lasx_xvsub_w(_in1, _in6); \ ++ _out7 = __lasx_xvsub_w(_in0, _in7); \ ++ } ++ ++#define LASX_BUTTERFLY_8_D(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, \ ++ _out7) \ ++ { \ ++ _out0 = __lasx_xvadd_d(_in0, _in7); \ ++ _out1 = __lasx_xvadd_d(_in1, _in6); \ ++ _out2 = __lasx_xvadd_d(_in2, _in5); \ ++ _out3 = __lasx_xvadd_d(_in3, _in4); \ ++ _out4 = __lasx_xvsub_d(_in3, _in4); \ ++ _out5 = __lasx_xvsub_d(_in2, _in5); \ ++ _out6 = __lasx_xvsub_d(_in1, _in6); \ ++ _out7 = __lasx_xvsub_d(_in0, _in7); \ ++ } ++ ++#endif // LASX + +-#define LASX_BUTTERFLY_8_W(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ +- _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7)\ +-{ \ +- _out0 = __lasx_xvadd_w(_in0, _in7); \ +- _out1 = __lasx_xvadd_w(_in1, _in6); \ +- _out2 = __lasx_xvadd_w(_in2, _in5); \ +- _out3 = __lasx_xvadd_w(_in3, _in4); \ +- _out4 = __lasx_xvsub_w(_in3, _in4); \ +- _out5 = __lasx_xvsub_w(_in2, _in5); \ +- _out6 = __lasx_xvsub_w(_in1, _in6); \ +- _out7 = __lasx_xvsub_w(_in0, _in7); \ +-} +- +-#define LASX_BUTTERFLY_8_D(_in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ +- _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7)\ +-{ \ +- _out0 = __lasx_xvadd_d(_in0, _in7); \ +- _out1 = __lasx_xvadd_d(_in1, _in6); \ +- _out2 = __lasx_xvadd_d(_in2, _in5); \ +- _out3 = __lasx_xvadd_d(_in3, _in4); \ +- _out4 = __lasx_xvsub_d(_in3, _in4); \ +- _out5 = __lasx_xvsub_d(_in2, _in5); \ +- _out6 = __lasx_xvsub_d(_in1, _in6); \ +- _out7 = __lasx_xvsub_d(_in0, _in7); \ +-} +- +-#endif //LASX ++/* ++ * ============================================================================= ++ * Description : Print out elements in vector. ++ * Arguments : Inputs - RTYPE, _element_num, _in0, _enter ++ * Outputs - ++ * Details : Print out '_element_num' elements in 'RTYPE' vector '_in0', if ++ * '_enter' is TRUE, prefix "\nVP:" will be added first. ++ * Example : VECT_PRINT(v4i32,4,in0,1); // in0: 1,2,3,4 ++ * VP:1,2,3,4, ++ * ============================================================================= ++ */ ++#define VECT_PRINT(RTYPE, element_num, in0, enter) \ ++ { \ ++ RTYPE _tmp0 = (RTYPE)in0; \ ++ int _i = 0; \ ++ if (enter) printf("\nVP:"); \ ++ for (_i = 0; _i < element_num; _i++) printf("%d,", _tmp0[_i]); \ ++ } + + #endif /* LOONGSON_INTRINSICS_H */ + #endif /* AVUTIL_LOONGARCH_LOONGSON_INTRINSICS_H */ +- +diff --git a/libswscale/loongarch/yuv2rgb_lasx.c b/libswscale/loongarch/yuv2rgb_lasx.c +index c1f805e7a1..4fd7873aea 100644 +--- a/libswscale/loongarch/yuv2rgb_lasx.c ++++ b/libswscale/loongarch/yuv2rgb_lasx.c +@@ -36,11 +36,13 @@ + __m256i vr_coeff = __lasx_xvreplgr2vr_d(c->vrCoeff); \ + + #define LOAD_YUV_16 \ +- m_y = __lasx_xvld(py + (w << 4), 0); \ +- m_u = __lasx_xvldrepl_d(pu + (w << 3), 0); \ +- m_v = __lasx_xvldrepl_d(pv + (w << 3), 0); \ +- m_y = __lasx_vext2xv_hu_bu(m_y); \ +- DUP2_ARG1(__lasx_vext2xv_hu_bu, m_u, m_v, m_u, m_v); \ ++ m_y1 = __lasx_xvld(py_1, 0); \ ++ m_y2 = __lasx_xvld(py_2, 0); \ ++ m_u = __lasx_xvldrepl_d(pu, 0); \ ++ m_v = __lasx_xvldrepl_d(pv, 0); \ ++ DUP2_ARG2(__lasx_xvilvl_b, m_u, m_u, m_v, m_v, m_u, m_v);\ ++ DUP4_ARG1(__lasx_vext2xv_hu_bu, m_y1, m_y2, m_u, m_v, \ ++ m_y1, m_y2, m_u, m_v); \ + + /* YUV2RGB method + * The conversion method is as follows: +@@ -53,60 +55,62 @@ + */ + + #define YUV2RGB \ +- m_y = __lasx_xvslli_h(m_y, 3); \ +- m_u = __lasx_xvslli_h(m_u, 3); \ +- m_v = __lasx_xvslli_h(m_v, 3); \ +- m_y = __lasx_xvsub_h(m_y, y_offset); \ +- m_u = __lasx_xvsub_h(m_u, u_offset); \ +- m_v = __lasx_xvsub_h(m_v, v_offset); \ +- m_u = __lasx_xvshuf_h(shuf1, m_u, m_u); \ +- m_v = __lasx_xvshuf_h(shuf1, m_v, m_v); \ +- y_1 = __lasx_xvmuh_h(m_y, y_coeff); \ +- u2g = __lasx_xvmuh_h(m_u, ug_coeff); \ +- u2b = __lasx_xvmuh_h(m_u, ub_coeff); \ +- v2r = __lasx_xvmuh_h(m_v, vr_coeff); \ +- v2g = __lasx_xvmuh_h(m_v, vg_coeff); \ +- r = __lasx_xvsadd_h(y_1, v2r); \ +- v2g = __lasx_xvsadd_h(v2g, u2g); \ +- g = __lasx_xvsadd_h(v2g, y_1); \ +- b = __lasx_xvsadd_h(y_1, u2b); \ +- DUP2_ARG1(__lasx_xvclip255_h, r, g, r, g); \ +- b = __lasx_xvclip255_h(b); \ +- +-#define RGB_PACK_16(r, g, b, rgb_l, rgb_h) \ ++ m_y1 = __lasx_xvslli_h(m_y1, 3); \ ++ m_y2 = __lasx_xvslli_h(m_y2, 3); \ ++ m_u = __lasx_xvslli_h(m_u, 3); \ ++ m_v = __lasx_xvslli_h(m_v, 3); \ ++ m_y1 = __lasx_xvsub_h(m_y1, y_offset); \ ++ m_y2 = __lasx_xvsub_h(m_y2, y_offset); \ ++ m_u = __lasx_xvsub_h(m_u, u_offset); \ ++ m_v = __lasx_xvsub_h(m_v, v_offset); \ ++ y_1 = __lasx_xvmuh_h(m_y1, y_coeff); \ ++ y_2 = __lasx_xvmuh_h(m_y2, y_coeff); \ ++ u2g = __lasx_xvmuh_h(m_u, ug_coeff); \ ++ u2b = __lasx_xvmuh_h(m_u, ub_coeff); \ ++ v2r = __lasx_xvmuh_h(m_v, vr_coeff); \ ++ v2g = __lasx_xvmuh_h(m_v, vg_coeff); \ ++ r1 = __lasx_xvsadd_h(y_1, v2r); \ ++ v2g = __lasx_xvsadd_h(v2g, u2g); \ ++ g1 = __lasx_xvsadd_h(y_1, v2g); \ ++ b1 = __lasx_xvsadd_h(y_1, u2b); \ ++ r2 = __lasx_xvsadd_h(y_2, v2r); \ ++ g2 = __lasx_xvsadd_h(y_2, v2g); \ ++ b2 = __lasx_xvsadd_h(y_2, u2b); \ ++ DUP4_ARG1(__lasx_xvclip255_h, r1, g1, b1, r2, r1, g1, b1, r2); \ ++ DUP2_ARG1(__lasx_xvclip255_h, g2, b2, g2, b2); \ ++ ++#define RGB_PACK(r, g, b, rgb_l, rgb_h) \ + { \ + __m256i rg; \ + rg = __lasx_xvpackev_b(g, r); \ + DUP2_ARG3(__lasx_xvshuf_b, b, rg, shuf2, b, rg, shuf3, rgb_l, rgb_h); \ + } + +-#define RGB_PACK_32(r, g, b, a, rgb_l, rgb_h) \ ++#define RGB32_PACK(a, r, g, b, rgb_l, rgb_h) \ + { \ +- __m256i rg, ba; \ +- rgb_l = __lasx_xvpackev_b(g, r); \ +- rgb_h = __lasx_xvpackev_b(a, b); \ +- rg = __lasx_xvilvl_h(rgb_h, rgb_l); \ +- ba = __lasx_xvilvh_h(rgb_h, rgb_l); \ +- rgb_l = __lasx_xvpermi_q(ba, rg, 0x20); \ +- rgb_h = __lasx_xvpermi_q(ba, rg, 0x31); \ ++ __m256i ra, bg, tmp0, tmp1; \ ++ ra = __lasx_xvpackev_b(r, a); \ ++ bg = __lasx_xvpackev_b(b, g); \ ++ tmp0 = __lasx_xvilvl_h(bg, ra); \ ++ tmp1 = __lasx_xvilvh_h(bg, ra); \ ++ rgb_l = __lasx_xvpermi_q(tmp1, tmp0, 0x20); \ ++ rgb_h = __lasx_xvpermi_q(tmp1, tmp0, 0x31); \ + } + +-#define RGB_STORE_32(rgb_l, rgb_h, iamge, w) \ +-{ \ +- uint8_t *index = image + (w * 64); \ +- __lasx_xvst(rgb_l, index, 0); \ +- __lasx_xvst(rgb_h, index + 32, 0); \ ++#define RGB_STORE(rgb_l, rgb_h, image) \ ++{ \ ++ __lasx_xvstelm_d(rgb_l, image, 0, 0); \ ++ __lasx_xvstelm_d(rgb_l, image, 8, 1); \ ++ __lasx_xvstelm_d(rgb_h, image, 16, 0); \ ++ __lasx_xvstelm_d(rgb_l, image, 24, 2); \ ++ __lasx_xvstelm_d(rgb_l, image, 32, 3); \ ++ __lasx_xvstelm_d(rgb_h, image, 40, 2); \ + } + +-#define RGB_STORE(rgb_l, rgb_h, image, w) \ +-{ \ +- uint8_t *index = image + (w * 48); \ +- __lasx_xvstelm_d(rgb_l, (index), 0, 0); \ +- __lasx_xvstelm_d(rgb_l, (index), 8, 1); \ +- __lasx_xvstelm_d(rgb_h, (index), 16, 0); \ +- __lasx_xvstelm_d(rgb_l, (index), 24, 2); \ +- __lasx_xvstelm_d(rgb_l, (index), 32, 3); \ +- __lasx_xvstelm_d(rgb_h, (index), 40, 2); \ ++#define RGB32_STORE(rgb_l, rgb_h, image) \ ++{ \ ++ __lasx_xvst(rgb_l, image, 0); \ ++ __lasx_xvst(rgb_h, image, 32); \ + } + + #define YUV2RGBFUNC(func_name, dst_type, alpha) \ +@@ -114,97 +118,213 @@ + int srcStride[], int srcSliceY, int srcSliceH, \ + uint8_t *dst[], int dstStride[]) \ + { \ +- int w, y, h_size, vshift; \ +- __m256i m_y, m_u, m_v; \ +- __m256i y_1, u2g, v2g, u2b, v2r, rgb_l, rgb_h; \ +- __m256i r, g, b; \ ++ int x, y, h_size, vshift, res; \ ++ __m256i m_y1, m_y2, m_u, m_v; \ ++ __m256i y_1, y_2, u2g, v2g, u2b, v2r, rgb1_l, rgb1_h; \ ++ __m256i rgb2_l, rgb2_h, r1, g1, b1, r2, g2, b2; \ + __m256i shuf2 = {0x0504120302100100, 0x0A18090816070614, \ + 0x0504120302100100, 0x0A18090816070614}; \ + __m256i shuf3 = {0x1E0F0E1C0D0C1A0B, 0x0101010101010101, \ + 0x1E0F0E1C0D0C1A0B, 0x0101010101010101}; \ +- __m256i shuf1 = {0x0001000100000000, 0x0003000300020002, \ +- 0x0005000500040004, 0x0007000700060006}; \ + YUV2RGB_LOAD_COE \ + \ + h_size = c->dstW >> 4; \ ++ res = (c->dstW & 15) >> 1; \ + vshift = c->srcFormat != AV_PIX_FMT_YUV422P; \ +- for (y = 0; y < srcSliceH; y++) { \ +- dst_type *image = dst[0] + (y + srcSliceY) * dstStride[0]; \ +- const uint8_t *py = src[0] + y * srcStride[0]; \ +- const uint8_t *pu = src[1] + (y >> vshift) * srcStride[1]; \ +- const uint8_t *pv = src[2] + (y >> vshift) * srcStride[2]; \ +- for (w = 0; w < h_size; w ++) { \ +- +- +-#define END_FUNC() \ +- } \ +- } \ +- return srcSliceH; \ +-} +- ++ for (y = 0; y < srcSliceH; y += 2) { \ ++ dst_type av_unused *r, *g, *b; \ ++ dst_type *image1 = (dst_type *)(dst[0] + (y + srcSliceY) * dstStride[0]);\ ++ dst_type *image2 = (dst_type *)(image1 + dstStride[0]);\ ++ const uint8_t *py_1 = src[0] + y * srcStride[0]; \ ++ const uint8_t *py_2 = py_1 + srcStride[0]; \ ++ const uint8_t *pu = src[1] + (y >> vshift) * srcStride[1]; \ ++ const uint8_t *pv = src[2] + (y >> vshift) * srcStride[2]; \ ++ for(x = 0; x < h_size; x++) { \ + +-#define YUV2RGBFUNC_32(func_name, dst_type, alpha) \ ++#define YUV2RGBFUNC32(func_name, dst_type, alpha) \ + int func_name(SwsContext *c, const uint8_t *src[], \ + int srcStride[], int srcSliceY, int srcSliceH, \ + uint8_t *dst[], int dstStride[]) \ + { \ +- int w, y, h_size, vshift, a = -1; \ +- __m256i m_y, m_u, m_v; \ +- __m256i y_1, u2g, v2g, u2b, v2r, rgb_l, rgb_h; \ +- __m256i r, g, b; \ +- __m256i alp = __lasx_xvreplgr2vr_w(a); \ +- __m256i shuf1 = {0x0001000100000000, 0x0003000300020002, \ +- 0x0005000500040004, 0x0007000700060006}; \ ++ int x, y, h_size, vshift, res; \ ++ __m256i m_y1, m_y2, m_u, m_v; \ ++ __m256i y_1, y_2, u2g, v2g, u2b, v2r, rgb1_l, rgb1_h; \ ++ __m256i rgb2_l, rgb2_h, r1, g1, b1, r2, g2, b2; \ ++ __m256i a = __lasx_xvldi(0xFF); \ ++ \ + YUV2RGB_LOAD_COE \ + \ + h_size = c->dstW >> 4; \ ++ res = (c->dstW & 15) >> 1; \ + vshift = c->srcFormat != AV_PIX_FMT_YUV422P; \ +- for (y = 0; y < srcSliceH; y++) { \ +- dst_type *image = dst[0] + (y + srcSliceY) * dstStride[0]; \ +- const uint8_t *py = src[0] + y * srcStride[0]; \ +- const uint8_t *pu = src[1] + (y >> vshift) * srcStride[1]; \ +- const uint8_t *pv = src[2] + (y >> vshift) * srcStride[2]; \ +- for (w = 0; w < h_size; w ++) { \ ++ for (y = 0; y < srcSliceH; y += 2) { \ ++ int yd = y + srcSliceY; \ ++ dst_type av_unused *r, *g, *b; \ ++ dst_type *image1 = (dst_type *)(dst[0] + (yd) * dstStride[0]); \ ++ dst_type *image2 = (dst_type *)(dst[0] + (yd + 1) * dstStride[0]); \ ++ const uint8_t *py_1 = src[0] + y * srcStride[0]; \ ++ const uint8_t *py_2 = py_1 + srcStride[0]; \ ++ const uint8_t *pu = src[1] + (y >> vshift) * srcStride[1]; \ ++ const uint8_t *pv = src[2] + (y >> vshift) * srcStride[2]; \ ++ for(x = 0; x < h_size; x++) { \ ++ ++#define DEALYUV2RGBREMAIN \ ++ py_1 += 16; \ ++ py_2 += 16; \ ++ pu += 8; \ ++ pv += 8; \ ++ image1 += 48; \ ++ image2 += 48; \ ++ } \ ++ for (x = 0; x < res; x++) { \ ++ int av_unused U, V, Y; \ ++ U = pu[0]; \ ++ V = pv[0]; \ ++ r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM]; \ ++ g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] \ ++ + c->table_gV[V+YUVRGB_TABLE_HEADROOM]); \ ++ b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM]; \ + ++#define DEALYUV2RGBREMAIN32 \ ++ py_1 += 16; \ ++ py_2 += 16; \ ++ pu += 8; \ ++ pv += 8; \ ++ image1 += 16; \ ++ image2 += 16; \ ++ } \ ++ for (x = 0; x < res; x++) { \ ++ int av_unused U, V, Y; \ ++ U = pu[0]; \ ++ V = pv[0]; \ ++ r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM]; \ ++ g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] \ ++ + c->table_gV[V+YUVRGB_TABLE_HEADROOM]); \ ++ b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM]; \ ++ ++ ++#define PUTRGB24(dst, src) \ ++ Y = src[0]; \ ++ dst[0] = r[Y]; \ ++ dst[1] = g[Y]; \ ++ dst[2] = b[Y]; \ ++ Y = src[1]; \ ++ dst[3] = r[Y]; \ ++ dst[4] = g[Y]; \ ++ dst[5] = b[Y]; ++ ++#define PUTBGR24(dst, src) \ ++ Y = src[0]; \ ++ dst[0] = b[Y]; \ ++ dst[1] = g[Y]; \ ++ dst[2] = r[Y]; \ ++ Y = src[1]; \ ++ dst[3] = b[Y]; \ ++ dst[4] = g[Y]; \ ++ dst[5] = r[Y]; ++ ++#define PUTRGB(dst, src) \ ++ Y = src[0]; \ ++ dst[0] = r[Y] + g[Y] + b[Y]; \ ++ Y = src[1]; \ ++ dst[1] = r[Y] + g[Y] + b[Y]; \ ++ ++#define ENDRES \ ++ pu += 1; \ ++ pv += 1; \ ++ py_1 += 2; \ ++ py_2 += 2; \ ++ image1 += 6; \ ++ image2 += 6; \ ++ ++#define ENDRES32 \ ++ pu += 1; \ ++ pv += 1; \ ++ py_1 += 2; \ ++ py_2 += 2; \ ++ image1 += 2; \ ++ image2 += 2; \ ++ ++#define END_FUNC() \ ++ } \ ++ } \ ++ return srcSliceH; \ ++} + + YUV2RGBFUNC(yuv420_rgb24_lasx, uint8_t, 0) + LOAD_YUV_16 + YUV2RGB +- RGB_PACK_16(r, g, b, rgb_l, rgb_h); +- RGB_STORE(rgb_l, rgb_h, image, w); ++ RGB_PACK(r1, g1, b1, rgb1_l, rgb1_h); ++ RGB_PACK(r2, g2, b2, rgb2_l, rgb2_h); ++ RGB_STORE(rgb1_l, rgb1_h, image1); ++ RGB_STORE(rgb2_l, rgb2_h, image2); ++ DEALYUV2RGBREMAIN ++ PUTRGB24(image1, py_1); ++ PUTRGB24(image2, py_2); ++ ENDRES + END_FUNC() + + YUV2RGBFUNC(yuv420_bgr24_lasx, uint8_t, 0) + LOAD_YUV_16 + YUV2RGB +- RGB_PACK_16(b, g, r, rgb_l, rgb_h); +- RGB_STORE(rgb_l, rgb_h, image, w); ++ RGB_PACK(b1, g1, r1, rgb1_l, rgb1_h); ++ RGB_PACK(b2, g2, r2, rgb2_l, rgb2_h); ++ RGB_STORE(rgb1_l, rgb1_h, image1); ++ RGB_STORE(rgb2_l, rgb2_h, image2); ++ DEALYUV2RGBREMAIN ++ PUTBGR24(image1, py_1); ++ PUTBGR24(image2, py_2); ++ ENDRES + END_FUNC() + +-YUV2RGBFUNC_32(yuv420_rgba32_lasx, uint8_t, 0) ++YUV2RGBFUNC32(yuv420_rgba32_lasx, uint32_t, 0) + LOAD_YUV_16 + YUV2RGB +- RGB_PACK_32(r, g, b, alp, rgb_l, rgb_h); +- RGB_STORE_32(rgb_l, rgb_h, image, w); ++ RGB32_PACK(r1, g1, b1, a, rgb1_l, rgb1_h); ++ RGB32_PACK(r2, g2, b2, a, rgb2_l, rgb2_h); ++ RGB32_STORE(rgb1_l, rgb1_h, image1); ++ RGB32_STORE(rgb2_l, rgb2_h, image2); ++ DEALYUV2RGBREMAIN32 ++ PUTRGB(image1, py_1); ++ PUTRGB(image2, py_2); ++ ENDRES32 + END_FUNC() + +-YUV2RGBFUNC_32(yuv420_bgra32_lasx, uint8_t, 0) ++YUV2RGBFUNC32(yuv420_bgra32_lasx, uint32_t, 0) + LOAD_YUV_16 + YUV2RGB +- RGB_PACK_32(b, g, r, alp, rgb_l, rgb_h); +- RGB_STORE_32(rgb_l, rgb_h, image, w); ++ RGB32_PACK(b1, g1, r1, a, rgb1_l, rgb1_h); ++ RGB32_PACK(b2, g2, r2, a, rgb2_l, rgb2_h); ++ RGB32_STORE(rgb1_l, rgb1_h, image1); ++ RGB32_STORE(rgb2_l, rgb2_h, image2); ++ DEALYUV2RGBREMAIN32 ++ PUTRGB(image1, py_1); ++ PUTRGB(image2, py_2); ++ ENDRES32 + END_FUNC() + +-YUV2RGBFUNC_32(yuv420_argb32_lasx, uint8_t, 0) ++YUV2RGBFUNC32(yuv420_argb32_lasx, uint32_t, 0) + LOAD_YUV_16 + YUV2RGB +- RGB_PACK_32(alp, r, g, b, rgb_l, rgb_h); +- RGB_STORE_32(rgb_l, rgb_h, image, w); ++ RGB32_PACK(a, r1, g1, b1, rgb1_l, rgb1_h); ++ RGB32_PACK(a, r2, g2, b2, rgb2_l, rgb2_h); ++ RGB32_STORE(rgb1_l, rgb1_h, image1); ++ RGB32_STORE(rgb2_l, rgb2_h, image2); ++ DEALYUV2RGBREMAIN32 ++ PUTRGB(image1, py_1); ++ PUTRGB(image2, py_2); ++ ENDRES32 + END_FUNC() + +-YUV2RGBFUNC_32(yuv420_abgr32_lasx, uint8_t, 0) ++YUV2RGBFUNC32(yuv420_abgr32_lasx, uint32_t, 0) + LOAD_YUV_16 + YUV2RGB +- RGB_PACK_32(alp, b, g, r, rgb_l, rgb_h); +- RGB_STORE_32(rgb_l, rgb_h, image, w); ++ RGB32_PACK(a, b1, g1, r1, rgb1_l, rgb1_h); ++ RGB32_PACK(a, b2, g2, r2, rgb2_l, rgb2_h); ++ RGB32_STORE(rgb1_l, rgb1_h, image1); ++ RGB32_STORE(rgb2_l, rgb2_h, image2); ++ DEALYUV2RGBREMAIN32 ++ PUTRGB(image1, py_1); ++ PUTRGB(image2, py_2); ++ ENDRES32 + END_FUNC() diff --git a/package/ffmpeg/0006-pkg_lnd10_4.1.6-1.lnd.9.patch b/package/ffmpeg/0006-pkg_lnd10_4.1.6-1.lnd.9.patch new file mode 100644 index 00000000..43aa18da --- /dev/null +++ b/package/ffmpeg/0006-pkg_lnd10_4.1.6-1.lnd.9.patch @@ -0,0 +1,15954 @@ +diff --git a/libavcodec/loongarch/Makefile b/libavcodec/loongarch/Makefile +index c1b5de5c44..4af72bc0a2 100644 +--- a/libavcodec/loongarch/Makefile ++++ b/libavcodec/loongarch/Makefile +@@ -9,12 +9,9 @@ OBJS-$(CONFIG_HPELDSP) += loongarch/hpeldsp_init_loongarch.o + OBJS-$(CONFIG_IDCTDSP) += loongarch/idctdsp_init_loongarch.o + OBJS-$(CONFIG_VIDEODSP) += loongarch/videodsp_init.o + OBJS-$(CONFIG_HEVC_DECODER) += loongarch/hevcdsp_init_loongarch.o +-LASX-OBJS-$(CONFIG_H264CHROMA) += loongarch/h264chroma_lasx.o + LASX-OBJS-$(CONFIG_H264QPEL) += loongarch/h264qpel_lasx.o + LASX-OBJS-$(CONFIG_H264DSP) += loongarch/h264dsp_lasx.o \ +- loongarch/h264idct_lasx.o \ + loongarch/h264_deblock_lasx.o +-LASX-OBJS-$(CONFIG_H264PRED) += loongarch/h264_intrapred_lasx.o + LASX-OBJS-$(CONFIG_VC1_DECODER) += loongarch/vc1dsp_lasx.o + LASX-OBJS-$(CONFIG_HPELDSP) += loongarch/hpeldsp_lasx.o + LASX-OBJS-$(CONFIG_IDCTDSP) += loongarch/simple_idct_lasx.o \ +@@ -31,3 +28,10 @@ LSX-OBJS-$(CONFIG_HEVC_DECODER) += loongarch/hevcdsp_lsx.o \ + loongarch/hevc_mc_bi_lsx.o \ + loongarch/hevc_mc_uni_lsx.o \ + loongarch/hevc_mc_uniw_lsx.o ++LSX-OBJS-$(CONFIG_H264DSP) += loongarch/h264idct.o \ ++ loongarch/h264idct_c.o \ ++ loongarch/h264dsp.o ++LSX-OBJS-$(CONFIG_H264QPEL) += loongarch/h264qpel.o \ ++ loongarch/h264qpel_lsx.o ++LSX-OBJS-$(CONFIG_H264CHROMA) += loongarch/h264chroma.o ++LSX-OBJS-$(CONFIG_H264PRED) += loongarch/h264intrapred.o +diff --git a/libavcodec/loongarch/h264_intrapred_init_loongarch.c b/libavcodec/loongarch/h264_intrapred_init_loongarch.c +index 12620bd842..e12ba66da3 100644 +--- a/libavcodec/loongarch/h264_intrapred_init_loongarch.c ++++ b/libavcodec/loongarch/h264_intrapred_init_loongarch.c +@@ -30,6 +30,22 @@ av_cold void ff_h264_pred_init_loongarch(H264PredContext *h, int codec_id, + int cpu_flags = av_get_cpu_flags(); + + if (bit_depth == 8) { ++ if (have_lsx(cpu_flags)) { ++ if (chroma_format_idc <= 1) { ++ } ++ if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8) { ++ } else { ++ if (chroma_format_idc <= 1) { ++ } ++ if (codec_id == AV_CODEC_ID_SVQ3) { ++ h->pred16x16[PLANE_PRED8x8] = ff_h264_pred16x16_plane_svq3_8_lsx; ++ } else if (codec_id == AV_CODEC_ID_RV40) { ++ h->pred16x16[PLANE_PRED8x8] = ff_h264_pred16x16_plane_rv40_8_lsx; ++ } else { ++ h->pred16x16[PLANE_PRED8x8] = ff_h264_pred16x16_plane_h264_8_lsx; ++ } ++ } ++ } + if (have_lasx(cpu_flags)) { + if (chroma_format_idc <= 1) { + } +diff --git a/libavcodec/loongarch/h264_intrapred_lasx.c b/libavcodec/loongarch/h264_intrapred_lasx.c +deleted file mode 100644 +index c38cd611b8..0000000000 +--- a/libavcodec/loongarch/h264_intrapred_lasx.c ++++ /dev/null +@@ -1,121 +0,0 @@ +-/* +- * Copyright (c) 2021 Loongson Technology Corporation Limited +- * Contributed by Hao Chen +- * +- * This file is part of FFmpeg. +- * +- * FFmpeg is free software; you can redistribute it and/or +- * modify it under the terms of the GNU Lesser General Public +- * License as published by the Free Software Foundation; either +- * version 2.1 of the License, or (at your option) any later version. +- * +- * FFmpeg 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 +- * Lesser General Public License for more details. +- * +- * You should have received a copy of the GNU Lesser General Public +- * License along with FFmpeg; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +- */ +- +-#include "libavutil/loongarch/loongson_intrinsics.h" +-#include "h264_intrapred_lasx.h" +- +-#define PRED16X16_PLANE \ +- ptrdiff_t stride_1, stride_2, stride_3, stride_4, stride_5, stride_6; \ +- ptrdiff_t stride_8, stride_15; \ +- int32_t res0, res1, res2, res3, cnt; \ +- uint8_t *src0, *src1; \ +- __m256i reg0, reg1, reg2, reg3, reg4; \ +- __m256i tmp0, tmp1, tmp2, tmp3; \ +- __m256i shuff = {0x0B040A0509060807, 0x0F000E010D020C03, 0, 0}; \ +- __m256i mult = {0x0004000300020001, 0x0008000700060005, 0, 0}; \ +- __m256i int_mult1 = {0x0000000100000000, 0x0000000300000002, \ +- 0x0000000500000004, 0x0000000700000006}; \ +- \ +- stride_1 = -stride; \ +- stride_2 = stride << 1; \ +- stride_3 = stride_2 + stride; \ +- stride_4 = stride_2 << 1; \ +- stride_5 = stride_4 + stride; \ +- stride_6 = stride_3 << 1; \ +- stride_8 = stride_4 << 1; \ +- stride_15 = (stride_8 << 1) - stride; \ +- src0 = src - 1; \ +- src1 = src0 + stride_8; \ +- \ +- reg0 = __lasx_xvldx(src0, -stride); \ +- reg1 = __lasx_xvldx(src, (8 - stride)); \ +- reg0 = __lasx_xvilvl_d(reg1, reg0); \ +- reg0 = __lasx_xvshuf_b(reg0, reg0, shuff); \ +- reg0 = __lasx_xvhsubw_hu_bu(reg0, reg0); \ +- reg0 = __lasx_xvmul_h(reg0, mult); \ +- res1 = (src1[0] - src0[stride_6]) + \ +- 2 * (src1[stride] - src0[stride_5]) + \ +- 3 * (src1[stride_2] - src0[stride_4]) + \ +- 4 * (src1[stride_3] - src0[stride_3]) + \ +- 5 * (src1[stride_4] - src0[stride_2]) + \ +- 6 * (src1[stride_5] - src0[stride]) + \ +- 7 * (src1[stride_6] - src0[0]) + \ +- 8 * (src0[stride_15] - src0[stride_1]); \ +- reg0 = __lasx_xvhaddw_w_h(reg0, reg0); \ +- reg0 = __lasx_xvhaddw_d_w(reg0, reg0); \ +- reg0 = __lasx_xvhaddw_q_d(reg0, reg0); \ +- res0 = __lasx_xvpickve2gr_w(reg0, 0); \ +- +-#define PRED16X16_PLANE_END \ +- res2 = (src0[stride_15] + src[15 - stride] + 1) << 4; \ +- res3 = 7 * (res0 + res1); \ +- res2 -= res3; \ +- reg0 = __lasx_xvreplgr2vr_w(res0); \ +- reg1 = __lasx_xvreplgr2vr_w(res1); \ +- reg2 = __lasx_xvreplgr2vr_w(res2); \ +- reg3 = __lasx_xvmul_w(reg0, int_mult1); \ +- reg4 = __lasx_xvslli_w(reg0, 3); \ +- reg4 = __lasx_xvadd_w(reg4, reg3); \ +- for (cnt = 8; cnt--;) { \ +- tmp0 = __lasx_xvadd_w(reg2, reg3); \ +- tmp1 = __lasx_xvadd_w(reg2, reg4); \ +- tmp0 = __lasx_xvssrani_hu_w(tmp1, tmp0, 5); \ +- tmp0 = __lasx_xvpermi_d(tmp0, 0xD8); \ +- reg2 = __lasx_xvadd_w(reg2, reg1); \ +- tmp2 = __lasx_xvadd_w(reg2, reg3); \ +- tmp3 = __lasx_xvadd_w(reg2, reg4); \ +- tmp1 = __lasx_xvssrani_hu_w(tmp3, tmp2, 5); \ +- tmp1 = __lasx_xvpermi_d(tmp1, 0xD8); \ +- tmp0 = __lasx_xvssrani_bu_h(tmp1, tmp0, 0); \ +- reg2 = __lasx_xvadd_w(reg2, reg1); \ +- __lasx_xvstelm_d(tmp0, src, 0, 0); \ +- __lasx_xvstelm_d(tmp0, src, 8, 2); \ +- src += stride; \ +- __lasx_xvstelm_d(tmp0, src, 0, 1); \ +- __lasx_xvstelm_d(tmp0, src, 8, 3); \ +- src += stride; \ +- } +- +- +-void ff_h264_pred16x16_plane_h264_8_lasx(uint8_t *src, ptrdiff_t stride) +-{ +- PRED16X16_PLANE +- res0 = (5 * res0 + 32) >> 6; +- res1 = (5 * res1 + 32) >> 6; +- PRED16X16_PLANE_END +-} +- +-void ff_h264_pred16x16_plane_rv40_8_lasx(uint8_t *src, ptrdiff_t stride) +-{ +- PRED16X16_PLANE +- res0 = (res0 + (res0 >> 2)) >> 4; +- res1 = (res1 + (res1 >> 2)) >> 4; +- PRED16X16_PLANE_END +-} +- +-void ff_h264_pred16x16_plane_svq3_8_lasx(uint8_t *src, ptrdiff_t stride) +-{ +- PRED16X16_PLANE +- cnt = (5 * (res0/4)) / 16; +- res0 = (5 * (res1/4)) / 16; +- res1 = cnt; +- PRED16X16_PLANE_END +-} +diff --git a/libavcodec/loongarch/h264_intrapred_lasx.h b/libavcodec/loongarch/h264_intrapred_lasx.h +index 0c2653300c..6aff9d63bb 100644 +--- a/libavcodec/loongarch/h264_intrapred_lasx.h ++++ b/libavcodec/loongarch/h264_intrapred_lasx.h +@@ -24,6 +24,10 @@ + + #include "libavcodec/avcodec.h" + ++void ff_h264_pred16x16_plane_h264_8_lsx(uint8_t *src, ptrdiff_t stride); ++void ff_h264_pred16x16_plane_rv40_8_lsx(uint8_t *src, ptrdiff_t stride); ++void ff_h264_pred16x16_plane_svq3_8_lsx(uint8_t *src, ptrdiff_t stride); ++ + void ff_h264_pred16x16_plane_h264_8_lasx(uint8_t *src, ptrdiff_t stride); + void ff_h264_pred16x16_plane_rv40_8_lasx(uint8_t *src, ptrdiff_t stride); + void ff_h264_pred16x16_plane_svq3_8_lasx(uint8_t *src, ptrdiff_t stride); +diff --git a/libavcodec/loongarch/h264chroma.S b/libavcodec/loongarch/h264chroma.S +new file mode 100644 +index 0000000000..81916c4cec +--- /dev/null ++++ b/libavcodec/loongarch/h264chroma.S +@@ -0,0 +1,966 @@ ++/* ++ * Loongson LSX optimized h264chroma ++ * ++ * Copyright (c) 2022 Loongson Technology Corporation Limited ++ * Contributed by Lu Wang ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "loongson_asm.S" ++ ++/* void ff_put_h264_chroma_mc8_lsx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++ int h, int x, int y) */ ++function ff_put_h264_chroma_mc8_lsx ++ li.d t8, 8 ++ sub.d t1, t8, a4 // 8-x ++ sub.d t2, t8, a5 // 8-y ++ mul.d t3, t1, t2 // A ++ mul.d t4, a4, t2 // B ++ mul.d t5, t1, a5 // C ++ mul.d t6, a4, a5 // D ++ add.d t0, t4, t5 // E ++ vreplgr2vr.b vr0, t3 ++ vreplgr2vr.b vr1, t4 ++ vreplgr2vr.b vr2, t5 ++ vreplgr2vr.b vr3, t6 ++ vreplgr2vr.b vr4, t0 ++ slli.d t2, a2, 1 ++ add.d t3, t2, a2 ++ slli.d t4, a2, 2 ++ ++ bge zero, t6, .ENDLOOP_D ++ move t1, a3 ++ vilvl.b vr9, vr1, vr0 ++ vilvl.b vr10, vr3, vr2 ++.LOOP_D: ++ vld vr5, a1, 0 ++ vld vr6, a1, 1 ++ add.d a1, a1, a2 ++ vld vr7, a1, 0 ++ vld vr8, a1, 1 ++ vilvl.b vr11, vr6, vr5 ++ vilvl.b vr12, vr8, vr7 ++ vmulwev.h.bu vr13, vr9, vr11 ++ vmaddwod.h.bu vr13, vr9, vr11 ++ vmulwev.h.bu vr14, vr10, vr12 ++ vmaddwod.h.bu vr14, vr10, vr12 ++ vadd.h vr13, vr13, vr14 ++ vsrarni.b.h vr13, vr13, 6 ++ vstelm.d vr13, a0, 0, 0 ++ add.d a0, a0, a2 ++ add.d a1, a1, a2 ++ vld vr5, a1, 0 ++ vld vr6, a1, 1 ++ vilvl.b vr11, vr8, vr7 ++ vilvl.b vr12, vr6, vr5 ++ vmulwev.h.bu vr13, vr9, vr11 ++ vmaddwod.h.bu vr13, vr9, vr11 ++ vmulwev.h.bu vr14, vr10, vr12 ++ vmaddwod.h.bu vr14, vr10, vr12 ++ vadd.h vr13, vr13, vr14 ++ vsrarni.b.h vr13, vr13, 6 ++ vstelm.d vr13, a0, 0, 0 ++ add.d a0, a0, a2 ++ add.d a1, a1, a2 ++ vld vr7, a1, 0 ++ vld vr8, a1, 1 ++ vilvl.b vr11, vr6, vr5 ++ vilvl.b vr12, vr8, vr7 ++ vmulwev.h.bu vr13, vr9, vr11 ++ vmaddwod.h.bu vr13, vr9, vr11 ++ vmulwev.h.bu vr14, vr10, vr12 ++ vmaddwod.h.bu vr14, vr10, vr12 ++ vadd.h vr13, vr13, vr14 ++ vsrarni.b.h vr13, vr13, 6 ++ vstelm.d vr13, a0, 0, 0 ++ add.d a0, a0, a2 ++ add.d a1, a1, a2 ++ vld vr5, a1, 0 ++ vld vr6, a1, 1 ++ vilvl.b vr11, vr8, vr7 ++ vilvl.b vr12, vr6, vr5 ++ vmulwev.h.bu vr13, vr9, vr11 ++ vmaddwod.h.bu vr13, vr9, vr11 ++ vmulwev.h.bu vr14, vr10, vr12 ++ vmaddwod.h.bu vr14, vr10, vr12 ++ vadd.h vr13, vr13, vr14 ++ vsrarni.b.h vr13, vr13, 6 ++ vstelm.d vr13, a0, 0, 0 ++ add.d a0, a0, a2 ++ ++ addi.d t1, t1, -4 ++ blt zero, t1, .LOOP_D ++ b .ENDLOOP ++.ENDLOOP_D: ++ ++ bge zero, t0, .ENDLOOP_E ++ move t1, a3 ++ li.d t7, 1 ++ slt t8, zero, t5 ++ maskeqz t5, a2, t8 ++ masknez t7, t7, t8 ++ or t7, t7, t5 ++ vilvl.b vr7, vr4, vr0 ++.LOOP_E: ++ vld vr5, a1, 0 ++ vldx vr6, a1, t7 ++ vilvl.b vr5, vr6, vr5 ++ vmulwev.h.bu vr6, vr7, vr5 ++ vmaddwod.h.bu vr6, vr7, vr5 ++ vsrarni.b.h vr6, vr6, 6 ++ vstelm.d vr6, a0, 0, 0 ++ add.d a0, a0, a2 ++ add.d a1, a1, a2 ++ vld vr5, a1, 0 ++ vldx vr6, a1, t7 ++ vilvl.b vr5, vr6, vr5 ++ vmulwev.h.bu vr6, vr7, vr5 ++ vmaddwod.h.bu vr6, vr7, vr5 ++ vsrarni.b.h vr6, vr6, 6 ++ vstelm.d vr6, a0, 0, 0 ++ add.d a0, a0, a2 ++ add.d a1, a1, a2 ++ vld vr5, a1, 0 ++ vldx vr6, a1, t7 ++ vilvl.b vr5, vr6, vr5 ++ vmulwev.h.bu vr6, vr7, vr5 ++ vmaddwod.h.bu vr6, vr7, vr5 ++ vsrarni.b.h vr6, vr6, 6 ++ vstelm.d vr6, a0, 0, 0 ++ add.d a0, a0, a2 ++ add.d a1, a1, a2 ++ vld vr5, a1, 0 ++ vldx vr6, a1, t7 ++ vilvl.b vr5, vr6, vr5 ++ vmulwev.h.bu vr6, vr7, vr5 ++ vmaddwod.h.bu vr6, vr7, vr5 ++ vsrarni.b.h vr6, vr6, 6 ++ vstelm.d vr6, a0, 0, 0 ++ add.d a0, a0, a2 ++ add.d a1, a1, a2 ++ ++ addi.d t1, t1, -4 ++ blt zero, t1, .LOOP_E ++ b .ENDLOOP ++.ENDLOOP_E: ++ ++ move t1, a3 ++.LOOP: ++ vld vr5, a1, 0 ++ vmulwev.h.bu vr6, vr0, vr5 ++ vmulwod.h.bu vr7, vr0, vr5 ++ vsrarni.b.h vr6, vr6, 6 ++ vsrarni.b.h vr7, vr7, 6 ++ vilvl.b vr6, vr7, vr6 ++ vstelm.d vr6, a0, 0, 0 ++ add.d a0, a0, a2 ++ vldx vr5, a1, a2 ++ vmulwev.h.bu vr6, vr0, vr5 ++ vmulwod.h.bu vr7, vr0, vr5 ++ vsrarni.b.h vr6, vr6, 6 ++ vsrarni.b.h vr7, vr7, 6 ++ vilvl.b vr6, vr7, vr6 ++ vstelm.d vr6, a0, 0, 0 ++ add.d a0, a0, a2 ++ vldx vr5, a1, t2 ++ vmulwev.h.bu vr6, vr0, vr5 ++ vmulwod.h.bu vr7, vr0, vr5 ++ vsrarni.b.h vr6, vr6, 6 ++ vsrarni.b.h vr7, vr7, 6 ++ vilvl.b vr6, vr7, vr6 ++ vstelm.d vr6, a0, 0, 0 ++ add.d a0, a0, a2 ++ vldx vr5, a1, t3 ++ vmulwev.h.bu vr6, vr0, vr5 ++ vmulwod.h.bu vr7, vr0, vr5 ++ vsrarni.b.h vr6, vr6, 6 ++ vsrarni.b.h vr7, vr7, 6 ++ vilvl.b vr6, vr7, vr6 ++ vstelm.d vr6, a0, 0, 0 ++ add.d a0, a0, a2 ++ add.d a1, a1, t4 ++ ++ addi.d t1, t1, -4 ++ blt zero, t1, .LOOP ++.ENDLOOP: ++endfunc ++ ++/* void ff_avg_h264_chroma_mc8_lsx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++ int h, int x, int y) */ ++function ff_avg_h264_chroma_mc8_lsx ++ li.d t8, 8 ++ sub.d t1, t8, a4 // 8-x ++ sub.d t2, t8, a5 // 8-y ++ mul.d t3, t1, t2 // A ++ mul.d t4, a4, t2 // B ++ mul.d t5, t1, a5 // C ++ mul.d t6, a4, a5 // D ++ add.d t0, t4, t5 // E ++ vreplgr2vr.b vr0, t3 ++ vreplgr2vr.b vr1, t4 ++ vreplgr2vr.b vr2, t5 ++ vreplgr2vr.b vr3, t6 ++ vreplgr2vr.b vr4, t0 ++ slli.d t2, a2, 1 ++ add.d t3, t2, a2 ++ slli.d t4, a2, 2 ++ ++ bge zero, t6, .ENDLOOPD ++ move t1, a3 ++ vilvl.b vr9, vr1, vr0 ++ vilvl.b vr10, vr3, vr2 ++.LOOPD: ++ vld vr5, a1, 0 ++ vld vr6, a1, 1 ++ add.d a1, a1, a2 ++ vld vr7, a1, 0 ++ vld vr8, a1, 1 ++ vld vr11, a0, 0 ++ vilvl.b vr12, vr6, vr5 ++ vilvl.b vr13, vr8, vr7 ++ vmulwev.h.bu vr14, vr9, vr12 ++ vmaddwod.h.bu vr14, vr9, vr12 ++ vmulwev.h.bu vr15, vr10, vr13 ++ vmaddwod.h.bu vr15, vr10, vr13 ++ vadd.h vr14, vr14, vr15 ++ vsrari.h vr14, vr14, 6 ++ vsllwil.hu.bu vr11, vr11, 0 ++ vadd.h vr11, vr14, vr11 ++ vsrarni.b.h vr11, vr11, 1 ++ vstelm.d vr11, a0, 0, 0 ++ add.d a0, a0, a2 ++ add.d a1, a1, a2 ++ vld vr5, a1, 0 ++ vld vr6, a1, 1 ++ vld vr11, a0, 0 ++ vilvl.b vr12, vr8, vr7 ++ vilvl.b vr13, vr6, vr5 ++ vmulwev.h.bu vr14, vr9, vr12 ++ vmaddwod.h.bu vr14, vr9, vr12 ++ vmulwev.h.bu vr15, vr10, vr13 ++ vmaddwod.h.bu vr15, vr10, vr13 ++ vadd.h vr14, vr14, vr15 ++ vsrari.h vr14, vr14, 6 ++ vsllwil.hu.bu vr11, vr11, 0 ++ vadd.h vr11, vr14, vr11 ++ vsrarni.b.h vr11, vr11, 1 ++ vstelm.d vr11, a0, 0, 0 ++ add.d a0, a0, a2 ++ add.d a1, a1, a2 ++ vld vr7, a1, 0 ++ vld vr8, a1, 1 ++ vld vr11, a0, 0 ++ vilvl.b vr12, vr6, vr5 ++ vilvl.b vr13, vr8, vr7 ++ vmulwev.h.bu vr14, vr9, vr12 ++ vmaddwod.h.bu vr14, vr9, vr12 ++ vmulwev.h.bu vr15, vr10, vr13 ++ vmaddwod.h.bu vr15, vr10, vr13 ++ vadd.h vr14, vr14, vr15 ++ vsrari.h vr14, vr14, 6 ++ vsllwil.hu.bu vr11, vr11, 0 ++ vadd.h vr11, vr14, vr11 ++ vsrarni.b.h vr11, vr11, 1 ++ vstelm.d vr11, a0, 0, 0 ++ add.d a0, a0, a2 ++ add.d a1, a1, a2 ++ vld vr5, a1, 0 ++ vld vr6, a1, 1 ++ vld vr11, a0, 0 ++ vilvl.b vr12, vr8, vr7 ++ vilvl.b vr13, vr6, vr5 ++ vmulwev.h.bu vr14, vr9, vr12 ++ vmaddwod.h.bu vr14, vr9, vr12 ++ vmulwev.h.bu vr15, vr10, vr13 ++ vmaddwod.h.bu vr15, vr10, vr13 ++ vadd.h vr14, vr14, vr15 ++ vsrari.h vr14, vr14, 6 ++ vsllwil.hu.bu vr11, vr11, 0 ++ vadd.h vr11, vr14, vr11 ++ vsrarni.b.h vr11, vr11, 1 ++ vstelm.d vr11, a0, 0, 0 ++ add.d a0, a0, a2 ++ ++ addi.d t1, t1, -4 ++ blt zero, t1, .LOOPD ++ b .ENDLOOPELSE ++.ENDLOOPD: ++ ++ bge zero, t0, .ENDLOOPE ++ move t1, a3 ++ li.d t7, 1 ++ slt t8, zero, t5 ++ maskeqz t5, a2, t8 ++ masknez t7, t7, t8 ++ or t7, t7, t5 ++ vilvl.b vr7, vr4, vr0 ++.LOOPE: ++ vld vr5, a1, 0 ++ vldx vr6, a1, t7 ++ vld vr8, a0, 0 ++ vilvl.b vr5, vr6, vr5 ++ vmulwev.h.bu vr6, vr7, vr5 ++ vmaddwod.h.bu vr6, vr7, vr5 ++ vsrari.h vr6, vr6, 6 ++ vsllwil.hu.bu vr8, vr8, 0 ++ vadd.h vr8, vr6, vr8 ++ vsrarni.b.h vr8, vr8, 1 ++ vstelm.d vr8, a0, 0, 0 ++ add.d a0, a0, a2 ++ add.d a1, a1, a2 ++ vld vr5, a1, 0 ++ vldx vr6, a1, t7 ++ vld vr8, a0, 0 ++ vilvl.b vr5, vr6, vr5 ++ vmulwev.h.bu vr6, vr7, vr5 ++ vmaddwod.h.bu vr6, vr7, vr5 ++ vsrari.h vr6, vr6, 6 ++ vsllwil.hu.bu vr8, vr8, 0 ++ vadd.h vr8, vr6, vr8 ++ vsrarni.b.h vr8, vr8, 1 ++ vstelm.d vr8, a0, 0, 0 ++ add.d a0, a0, a2 ++ add.d a1, a1, a2 ++ vld vr5, a1, 0 ++ vldx vr6, a1, t7 ++ vld vr8, a0, 0 ++ vilvl.b vr5, vr6, vr5 ++ vmulwev.h.bu vr6, vr7, vr5 ++ vmaddwod.h.bu vr6, vr7, vr5 ++ vsrari.h vr6, vr6, 6 ++ vsllwil.hu.bu vr8, vr8, 0 ++ vadd.h vr8, vr6, vr8 ++ vsrarni.b.h vr8, vr8, 1 ++ vstelm.d vr8, a0, 0, 0 ++ add.d a0, a0, a2 ++ add.d a1, a1, a2 ++ vld vr5, a1, 0 ++ vldx vr6, a1, t7 ++ vld vr8, a0, 0 ++ vilvl.b vr5, vr6, vr5 ++ vmulwev.h.bu vr6, vr7, vr5 ++ vmaddwod.h.bu vr6, vr7, vr5 ++ vsrari.h vr6, vr6, 6 ++ vsllwil.hu.bu vr8, vr8, 0 ++ vadd.h vr8, vr6, vr8 ++ vsrarni.b.h vr8, vr8, 1 ++ vstelm.d vr8, a0, 0, 0 ++ add.d a0, a0, a2 ++ add.d a1, a1, a2 ++ ++ addi.d t1, t1, -4 ++ blt zero, t1, .LOOPE ++ b .ENDLOOPELSE ++.ENDLOOPE: ++ ++ move t1, a3 ++.LOOPELSE: ++ vld vr5, a1, 0 ++ vld vr8, a0, 0 ++ vmulwev.h.bu vr6, vr0, vr5 ++ vmulwod.h.bu vr7, vr0, vr5 ++ vilvl.h vr6, vr7, vr6 ++ vsrari.h vr6, vr6, 6 ++ vsllwil.hu.bu vr8, vr8, 0 ++ vadd.h vr8, vr6, vr8 ++ vsrarni.b.h vr8, vr8, 1 ++ vstelm.d vr8, a0, 0, 0 ++ add.d a0, a0, a2 ++ vldx vr5, a1, a2 ++ vld vr8, a0, 0 ++ vmulwev.h.bu vr6, vr0, vr5 ++ vmulwod.h.bu vr7, vr0, vr5 ++ vilvl.h vr6, vr7, vr6 ++ vsrari.h vr6, vr6, 6 ++ vsllwil.hu.bu vr8, vr8, 0 ++ vadd.h vr8, vr6, vr8 ++ vsrarni.b.h vr8, vr8, 1 ++ vstelm.d vr8, a0, 0, 0 ++ add.d a0, a0, a2 ++ vldx vr5, a1, t2 ++ vld vr8, a0, 0 ++ vmulwev.h.bu vr6, vr0, vr5 ++ vmulwod.h.bu vr7, vr0, vr5 ++ vilvl.h vr6, vr7, vr6 ++ vsrari.h vr6, vr6, 6 ++ vsllwil.hu.bu vr8, vr8, 0 ++ vadd.h vr8, vr6, vr8 ++ vsrarni.b.h vr8, vr8, 1 ++ vstelm.d vr8, a0, 0, 0 ++ add.d a0, a0, a2 ++ vldx vr5, a1, t3 ++ vld vr8, a0, 0 ++ vmulwev.h.bu vr6, vr0, vr5 ++ vmulwod.h.bu vr7, vr0, vr5 ++ vilvl.h vr6, vr7, vr6 ++ vsrari.h vr6, vr6, 6 ++ vsllwil.hu.bu vr8, vr8, 0 ++ vadd.h vr8, vr6, vr8 ++ vsrarni.b.h vr8, vr8, 1 ++ vstelm.d vr8, a0, 0, 0 ++ add.d a0, a0, a2 ++ add.d a1, a1, t4 ++ ++ addi.d t1, t1, -4 ++ blt zero, t1, .LOOPELSE ++.ENDLOOPELSE: ++endfunc ++ ++/* void ff_put_h264_chroma_mc4_lsx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++ int h, int x, int y) */ ++function ff_put_h264_chroma_mc4_lsx ++ li.d t8, 8 ++ sub.d t1, t8, a4 // 8-x ++ sub.d t2, t8, a5 // 8-y ++ mul.d t3, t1, t2 // A ++ mul.d t4, a4, t2 // B ++ mul.d t5, t1, a5 // C ++ mul.d t6, a4, a5 // D ++ add.d t0, t4, t5 // E ++ slli.d t8, a2, 1 ++ vreplgr2vr.b vr0, t3 ++ vreplgr2vr.b vr1, t4 ++ vreplgr2vr.b vr2, t5 ++ vreplgr2vr.b vr3, t6 ++ vreplgr2vr.b vr4, t0 ++ ++ bge zero, t6, .ENDPUT_D ++ move t1, a3 ++ vilvl.b vr9, vr1, vr0 ++ vilvl.b vr10, vr3, vr2 ++.PUT_D: ++ vld vr5, a1, 0 ++ vld vr6, a1, 1 ++ add.d a1, a1, a2 ++ vld vr7, a1, 0 ++ vld vr8, a1, 1 ++ add.d a1, a1, a2 ++ vld vr11, a1, 0 ++ vld vr12, a1, 1 ++ vilvl.b vr5, vr6, vr5 ++ vilvl.b vr7, vr8, vr7 ++ vilvl.b vr13, vr12, vr11 ++ vilvl.d vr5, vr7, vr5 ++ vilvl.d vr13, vr13, vr7 ++ vmulwev.h.bu vr14, vr9, vr5 ++ vmaddwod.h.bu vr14, vr9, vr5 ++ vmulwev.h.bu vr15, vr10, vr13 ++ vmaddwod.h.bu vr15, vr10, vr13 ++ vadd.h vr14, vr14, vr15 ++ vsrarni.b.h vr14, vr14, 6 ++ vstelm.w vr14, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.w vr14, a0, 0, 1 ++ add.d a0, a0, a2 ++ addi.d t1, t1, -2 ++ blt zero, t1, .PUT_D ++ b .ENDPUT ++.ENDPUT_D: ++ ++ bge zero, t0, .ENDPUT_E ++ move t1, a3 ++ li.d t7, 1 ++ slt t8, zero, t5 ++ maskeqz t5, a2, t8 ++ masknez t7, t7, t8 ++ or t7, t7, t5 ++ vilvl.b vr7, vr4, vr0 ++.PUT_E: ++ vld vr5, a1, 0 ++ vldx vr6, a1, t7 ++ vilvl.b vr5, vr6, vr5 ++ add.d a1, a1, a2 ++ vld vr8, a1, 0 ++ vldx vr9, a1, t7 ++ vilvl.b vr8, vr9, vr8 ++ vilvl.d vr5, vr8, vr5 ++ vmulwev.h.bu vr6, vr7, vr5 ++ vmaddwod.h.bu vr6, vr7, vr5 ++ vsrarni.b.h vr6, vr6, 6 ++ vstelm.w vr6, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.w vr6, a0, 0, 1 ++ add.d a0, a0, a2 ++ add.d a1, a1, a2 ++ addi.d t1, t1, -2 ++ blt zero, t1, .PUT_E ++ b .ENDPUT ++.ENDPUT_E: ++ ++ move t1, a3 ++.PUT: ++ vld vr5, a1, 0 ++ vldx vr8, a1, a2 ++ vilvl.w vr5, vr8, vr5 ++ vmulwev.h.bu vr6, vr0, vr5 ++ vmulwod.h.bu vr7, vr0, vr5 ++ vsrarni.b.h vr6, vr6, 6 ++ vsrarni.b.h vr7, vr7, 6 ++ vilvl.b vr6, vr7, vr6 ++ vstelm.w vr6, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.w vr6, a0, 0, 1 ++ add.d a0, a0, a2 ++ add.d a1, a1, t8 ++ addi.d t1, t1, -2 ++ blt zero, t1, .PUT ++.ENDPUT: ++endfunc ++ ++/* void ff_put_h264_chroma_mc8_lasx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++ int h, int x, int y) */ ++function ff_put_h264_chroma_mc8_lasx ++ li.d t8, 8 ++ sub.d t1, t8, a4 // 8-x ++ sub.d t2, t8, a5 // 8-y ++ mul.d t3, t1, t2 // A ++ mul.d t4, a4, t2 // B ++ mul.d t5, t1, a5 // C ++ mul.d t6, a4, a5 // D ++ add.d t0, t4, t5 // E ++ xvreplgr2vr.b xr0, t3 ++ xvreplgr2vr.b xr1, t4 ++ xvreplgr2vr.b xr2, t5 ++ xvreplgr2vr.b xr3, t6 ++ xvreplgr2vr.b xr4, t0 ++ slli.d t2, a2, 1 ++ add.d t3, t2, a2 ++ slli.d t4, a2, 2 ++ ++ bge zero, t6, .ENDLOOP_DA ++ move t1, a3 ++ xvilvl.b xr9, xr1, xr0 ++ xvilvl.b xr10, xr3, xr2 ++.LOOP_DA: ++ fld.d f5, a1, 0 ++ fld.d f6, a1, 1 ++ add.d a1, a1, a2 ++ fld.d f7, a1, 0 ++ fld.d f8, a1, 1 ++ add.d a1, a1, a2 ++ fld.d f13, a1, 0 ++ fld.d f14, a1, 1 ++ add.d a1, a1, a2 ++ fld.d f15, a1, 0 ++ fld.d f16, a1, 1 ++ add.d a1, a1, a2 ++ fld.d f17, a1, 0 ++ fld.d f18, a1, 1 ++ vilvl.b vr11, vr6, vr5 ++ vilvl.b vr12, vr8, vr7 ++ vilvl.b vr14, vr14, vr13 ++ vilvl.b vr15, vr16, vr15 ++ vilvl.b vr16, vr18, vr17 ++ xvpermi.q xr11, xr12, 0x02 ++ xvpermi.q xr12, xr14, 0x02 ++ xvpermi.q xr14, xr15, 0x02 ++ xvpermi.q xr15, xr16, 0x02 ++ ++ xvmulwev.h.bu xr19, xr9, xr11 ++ xvmaddwod.h.bu xr19, xr9, xr11 ++ xvmulwev.h.bu xr20, xr10, xr12 ++ xvmaddwod.h.bu xr20, xr10, xr12 ++ xvadd.h xr21, xr19, xr20 ++ xvsrarni.b.h xr21, xr21, 6 ++ vstelm.d vr21, a0, 0, 0 ++ add.d a0, a0, a2 ++ xvstelm.d xr21, a0, 0, 2 ++ add.d a0, a0, a2 ++ xvmulwev.h.bu xr13, xr9, xr14 ++ xvmaddwod.h.bu xr13, xr9, xr14 ++ xvmulwev.h.bu xr14, xr10, xr15 ++ xvmaddwod.h.bu xr14, xr10, xr15 ++ xvadd.h xr13, xr13, xr14 ++ xvsrarni.b.h xr13, xr13, 6 ++ vstelm.d vr13, a0, 0, 0 ++ add.d a0, a0, a2 ++ xvstelm.d xr13, a0, 0, 2 ++ add.d a0, a0, a2 ++ ++ addi.d t1, t1, -4 ++ blt zero, t1, .LOOP_DA ++ b .ENDLOOPA ++.ENDLOOP_DA: ++ ++ bge zero, t0, .ENDLOOP_EA ++ move t1, a3 ++ li.d t7, 1 ++ slt t8, zero, t5 ++ maskeqz t5, a2, t8 ++ masknez t7, t7, t8 ++ or t7, t7, t5 ++ xvilvl.b xr7, xr4, xr0 ++.LOOP_EA: ++ fld.d f5, a1, 0 ++ fldx.d f6, a1, t7 ++ add.d a1, a1, a2 ++ fld.d f9, a1, 0 ++ fldx.d f10, a1, t7 ++ add.d a1, a1, a2 ++ fld.d f11, a1, 0 ++ fldx.d f12, a1, t7 ++ add.d a1, a1, a2 ++ fld.d f13, a1, 0 ++ fldx.d f14, a1, t7 ++ vilvl.b vr5, vr6, vr5 ++ vilvl.b vr9, vr10, vr9 ++ vilvl.b vr11, vr12, vr11 ++ vilvl.b vr13, vr14, vr13 ++ xvpermi.q xr5, xr9, 0x02 ++ xvpermi.q xr11, xr13, 0x02 ++ ++ xvmulwev.h.bu xr8, xr7, xr5 ++ xvmaddwod.h.bu xr8, xr7, xr5 ++ xvmulwev.h.bu xr6, xr7, xr11 ++ xvmaddwod.h.bu xr6, xr7, xr11 ++ xvsrarni.b.h xr8, xr8, 6 ++ vstelm.d vr8, a0, 0, 0 ++ add.d a0, a0, a2 ++ xvstelm.d xr8, a0, 0, 2 ++ add.d a0, a0, a2 ++ xvsrarni.b.h xr6, xr6, 6 ++ vstelm.d vr6, a0, 0, 0 ++ add.d a0, a0, a2 ++ xvstelm.d xr6, a0, 0, 2 ++ add.d a0, a0, a2 ++ add.d a1, a1, a2 ++ ++ addi.d t1, t1, -4 ++ blt zero, t1, .LOOP_EA ++ b .ENDLOOPA ++.ENDLOOP_EA: ++ ++ move t1, a3 ++.LOOPA: ++ fld.d f5, a1, 0 ++ fldx.d f6, a1, a2 ++ fldx.d f7, a1, t2 ++ fldx.d f8, a1, t3 ++ vilvl.d vr5, vr6, vr5 ++ vilvl.d vr7, vr8, vr7 ++ xvpermi.q xr5, xr7, 0x02 ++ xvmulwev.h.bu xr6, xr0, xr5 ++ xvmulwod.h.bu xr7, xr0, xr5 ++ xvilvl.h xr8, xr7, xr6 ++ xvilvh.h xr9, xr7, xr6 ++ xvsrarni.b.h xr9, xr8, 6 ++ vstelm.d vr9, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr9, a0, 0, 1 ++ add.d a0, a0, a2 ++ xvstelm.d xr9, a0, 0, 2 ++ add.d a0, a0, a2 ++ xvstelm.d xr9, a0, 0, 3 ++ add.d a0, a0, a2 ++ add.d a1, a1, t4 ++ ++ addi.d t1, t1, -4 ++ blt zero, t1, .LOOPA ++.ENDLOOPA: ++endfunc ++ ++/* void ff_avg_h264_chroma_mc8_lasx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++ int h, int x, int y) */ ++function ff_avg_h264_chroma_mc8_lasx ++ li.d t8, 8 ++ sub.d t1, t8, a4 // 8-x ++ sub.d t2, t8, a5 // 8-y ++ mul.d t3, t1, t2 // A ++ mul.d t4, a4, t2 // B ++ mul.d t5, t1, a5 // C ++ mul.d t6, a4, a5 // D ++ add.d t0, t4, t5 // E ++ xvreplgr2vr.b xr0, t3 ++ xvreplgr2vr.b xr1, t4 ++ xvreplgr2vr.b xr2, t5 ++ xvreplgr2vr.b xr3, t6 ++ xvreplgr2vr.b xr4, t0 ++ slli.d t2, a2, 1 ++ add.d t3, t2, a2 ++ slli.d t4, a2, 2 ++ ++ bge zero, t6, .ENDLOOPDA ++ move t1, a3 ++ xvilvl.b xr9, xr1, xr0 ++ xvilvl.b xr10, xr3, xr2 ++.LOOPDA: ++ fld.d f5, a1, 0 ++ fld.d f6, a1, 1 ++ add.d a1, a1, a2 ++ fld.d f7, a1, 0 ++ fld.d f8, a1, 1 ++ add.d a1, a1, a2 ++ fld.d f11, a1, 0 ++ fld.d f12, a1, 1 ++ add.d a1, a1, a2 ++ fld.d f13, a1, 0 ++ fld.d f14, a1, 1 ++ add.d a1, a1, a2 ++ fld.d f15, a1, 0 ++ fld.d f16, a1, 1 ++ fld.d f17, a0, 0 ++ fldx.d f18, a0, a2 ++ fldx.d f19, a0, t2 ++ fldx.d f20, a0, t3 ++ vilvl.b vr5, vr6, vr5 ++ vilvl.b vr7, vr8, vr7 ++ vilvl.b vr11, vr12, vr11 ++ vilvl.b vr13, vr14, vr13 ++ vilvl.b vr16, vr16, vr15 ++ xvpermi.q xr5, xr7, 0x02 ++ xvpermi.q xr7, xr11, 0x02 ++ xvpermi.q xr11, xr13, 0x02 ++ xvpermi.q xr13, xr16, 0x02 ++ xvpermi.q xr17, xr18, 0x02 ++ xvpermi.q xr19, xr20, 0x02 ++ ++ xvmulwev.h.bu xr14, xr9, xr5 ++ xvmaddwod.h.bu xr14, xr9, xr5 ++ xvmulwev.h.bu xr15, xr10, xr7 ++ xvmaddwod.h.bu xr15, xr10, xr7 ++ xvadd.h xr14, xr14, xr15 ++ xvsrari.h xr14, xr14, 6 ++ xvsllwil.hu.bu xr17, xr17, 0 ++ xvadd.h xr20, xr14, xr17 ++ xvsrarni.b.h xr20, xr20, 1 ++ xvstelm.d xr20, a0, 0, 0 ++ add.d a0, a0, a2 ++ xvstelm.d xr20, a0, 0, 2 ++ add.d a0, a0, a2 ++ xvmulwev.h.bu xr14, xr9, xr11 ++ xvmaddwod.h.bu xr14, xr9, xr11 ++ xvmulwev.h.bu xr15, xr10, xr13 ++ xvmaddwod.h.bu xr15, xr10, xr13 ++ xvadd.h xr14, xr14, xr15 ++ xvsrari.h xr14, xr14, 6 ++ xvsllwil.hu.bu xr19, xr19, 0 ++ xvadd.h xr21, xr14, xr19 ++ xvsrarni.b.h xr21, xr21, 1 ++ xvstelm.d xr21, a0, 0, 0 ++ add.d a0, a0, a2 ++ xvstelm.d xr21, a0, 0, 2 ++ add.d a0, a0, a2 ++ ++ addi.d t1, t1, -4 ++ blt zero, t1, .LOOPDA ++ b .ENDLOOPELSEA ++.ENDLOOPDA: ++ ++ bge zero, t0, .ENDLOOPEA ++ move t1, a3 ++ li.d t7, 1 ++ slt t8, zero, t5 ++ maskeqz t5, a2, t8 ++ masknez t7, t7, t8 ++ or t7, t7, t5 ++ xvilvl.b xr7, xr4, xr0 ++.LOOPEA: ++ fld.d f5, a1, 0 ++ fldx.d f6, a1, t7 ++ add.d a1, a1, a2 ++ fld.d f8, a1, 0 ++ fldx.d f9, a1, t7 ++ add.d a1, a1, a2 ++ fld.d f10, a1, 0 ++ fldx.d f11, a1, t7 ++ add.d a1, a1, a2 ++ fld.d f12, a1, 0 ++ fldx.d f13, a1, t7 ++ add.d a1, a1, a2 ++ fld.d f14, a0, 0 ++ fldx.d f15, a0, a2 ++ fldx.d f16, a0, t2 ++ fldx.d f17, a0, t3 ++ vilvl.b vr5, vr6, vr5 ++ vilvl.b vr8, vr9, vr8 ++ vilvl.b vr10, vr11, vr10 ++ vilvl.b vr12, vr13, vr12 ++ xvpermi.q xr5, xr8, 0x02 ++ xvpermi.q xr10, xr12, 0x02 ++ xvpermi.q xr14, xr15, 0x02 ++ xvpermi.q xr16, xr17, 0x02 ++ ++ xvmulwev.h.bu xr6, xr7, xr5 ++ xvmaddwod.h.bu xr6, xr7, xr5 ++ xvsrari.h xr6, xr6, 6 ++ xvsllwil.hu.bu xr14, xr14, 0 ++ xvadd.h xr8, xr6, xr14 ++ xvsrarni.b.h xr8, xr8, 1 ++ xvstelm.d xr8, a0, 0, 0 ++ add.d a0, a0, a2 ++ xvstelm.d xr8, a0, 0, 2 ++ add.d a0, a0, a2 ++ xvmulwev.h.bu xr6, xr7, xr10 ++ xvmaddwod.h.bu xr6, xr7, xr10 ++ xvsrari.h xr6, xr6, 6 ++ xvsllwil.hu.bu xr16, xr16, 0 ++ xvadd.h xr8, xr6, xr16 ++ xvsrarni.b.h xr8, xr8, 1 ++ xvstelm.d xr8, a0, 0, 0 ++ add.d a0, a0, a2 ++ xvstelm.d xr8, a0, 0, 2 ++ add.d a0, a0, a2 ++ ++ addi.d t1, t1, -4 ++ blt zero, t1, .LOOPEA ++ b .ENDLOOPELSEA ++.ENDLOOPEA: ++ ++ move t1, a3 ++.LOOPELSEA: ++ fld.d f5, a1, 0 ++ fldx.d f6, a1, a2 ++ fldx.d f7, a1, t2 ++ fldx.d f8, a1, t3 ++ fld.d f9, a0, 0 ++ fldx.d f10, a0, a2 ++ fldx.d f11, a0, t2 ++ fldx.d f12, a0, t3 ++ xvpermi.q xr5, xr6, 0x02 ++ xvpermi.q xr7, xr8, 0x02 ++ xvpermi.q xr9, xr10, 0x02 ++ xvpermi.q xr11, xr12, 0x02 ++ ++ xvmulwev.h.bu xr12, xr0, xr5 ++ xvmulwod.h.bu xr13, xr0, xr5 ++ xvilvl.h xr12, xr13, xr12 ++ xvsrari.h xr12, xr12, 6 ++ xvsllwil.hu.bu xr9, xr9, 0 ++ xvadd.h xr9, xr12, xr9 ++ xvsrarni.b.h xr9, xr9, 1 ++ xvstelm.d xr9, a0, 0, 0 ++ add.d a0, a0, a2 ++ xvstelm.d xr9, a0, 0, 2 ++ add.d a0, a0, a2 ++ xvmulwev.h.bu xr12, xr0, xr7 ++ xvmulwod.h.bu xr13, xr0, xr7 ++ xvilvl.h xr12, xr13, xr12 ++ xvsrari.h xr12, xr12, 6 ++ xvsllwil.hu.bu xr11, xr11, 0 ++ xvadd.h xr13, xr12, xr11 ++ xvsrarni.b.h xr13, xr13, 1 ++ xvstelm.d xr13, a0, 0, 0 ++ add.d a0, a0, a2 ++ xvstelm.d xr13, a0, 0, 2 ++ add.d a0, a0, a2 ++ add.d a1, a1, t4 ++ ++ addi.d t1, t1, -4 ++ blt zero, t1, .LOOPELSEA ++.ENDLOOPELSEA: ++endfunc ++ ++/* void ff_put_h264_chroma_mc4_lasx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++ int h, int x, int y) */ ++function ff_put_h264_chroma_mc4_lasx ++ li.d t8, 8 ++ sub.d t1, t8, a4 // 8-x ++ sub.d t2, t8, a5 // 8-y ++ mul.d t3, t1, t2 // A ++ mul.d t4, a4, t2 // B ++ mul.d t5, t1, a5 // C ++ mul.d t6, a4, a5 // D ++ add.d t0, t4, t5 // E ++ slli.d t8, a2, 1 ++ vreplgr2vr.b vr0, t3 ++ vreplgr2vr.b vr1, t4 ++ vreplgr2vr.b vr2, t5 ++ vreplgr2vr.b vr3, t6 ++ vreplgr2vr.b vr4, t0 ++ ++ bge zero, t6, .ENDPUT_DA ++ move t1, a3 ++ vilvl.b vr9, vr1, vr0 ++ vilvl.b vr10, vr3, vr2 ++.PUT_DA: ++ fld.d f5, a1, 0 ++ fld.d f6, a1, 1 ++ add.d a1, a1, a2 ++ fld.d f7, a1, 0 ++ fld.d f8, a1, 1 ++ add.d a1, a1, a2 ++ fld.d f11, a1, 0 ++ fld.d f12, a1, 1 ++ vilvl.b vr5, vr6, vr5 ++ vilvl.b vr7, vr8, vr7 ++ vilvl.b vr13, vr12, vr11 ++ vilvl.d vr5, vr7, vr5 ++ vilvl.d vr13, vr13, vr7 ++ vmulwev.h.bu vr14, vr9, vr5 ++ vmaddwod.h.bu vr14, vr9, vr5 ++ vmulwev.h.bu vr15, vr10, vr13 ++ vmaddwod.h.bu vr15, vr10, vr13 ++ xvadd.h xr14, xr14, xr15 ++ vsrarni.b.h vr16, vr14, 6 ++ vstelm.w vr16, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.w vr16, a0, 0, 1 ++ add.d a0, a0, a2 ++ addi.d t1, t1, -2 ++ blt zero, t1, .PUT_DA ++ b .ENDPUTA ++.ENDPUT_DA: ++ ++ bge zero, t0, .ENDPUT_EA ++ move t1, a3 ++ li.d t7, 1 ++ slt t8, zero, t5 ++ maskeqz t5, a2, t8 ++ masknez t7, t7, t8 ++ or t7, t7, t5 ++ vilvl.b vr7, vr4, vr0 ++.PUT_EA: ++ fld.d f5, a1, 0 ++ fldx.d f6, a1, t7 ++ vilvl.b vr5, vr6, vr5 ++ add.d a1, a1, a2 ++ fld.d f8, a1, 0 ++ fldx.d f9, a1, t7 ++ vilvl.b vr8, vr9, vr8 ++ vilvl.d vr5, vr8, vr5 ++ vmulwev.h.bu vr6, vr7, vr5 ++ vmaddwod.h.bu vr6, vr7, vr5 ++ vsrarni.b.h vr6, vr6, 6 ++ vstelm.w vr6, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.w vr6, a0, 0, 1 ++ add.d a0, a0, a2 ++ add.d a1, a1, a2 ++ addi.d t1, t1, -2 ++ blt zero, t1, .PUT_EA ++ b .ENDPUTA ++.ENDPUT_EA: ++ ++ move t1, a3 ++.PUTA: ++ fld.d f5, a1, 0 ++ fldx.d f8, a1, a2 ++ vilvl.w vr5, vr8, vr5 ++ vmulwev.h.bu vr6, vr0, vr5 ++ vmulwod.h.bu vr7, vr0, vr5 ++ vilvl.h vr6, vr7, vr6 ++ vsrarni.b.h vr6, vr6, 6 ++ vstelm.w vr6, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.w vr6, a0, 0, 1 ++ add.d a0, a0, a2 ++ add.d a1, a1, t8 ++ addi.d t1, t1, -2 ++ blt zero, t1, .PUTA ++.ENDPUTA: ++endfunc +diff --git a/libavcodec/loongarch/h264chroma_init_loongarch.c b/libavcodec/loongarch/h264chroma_init_loongarch.c +index 0ca24ecc47..9388a35da4 100644 +--- a/libavcodec/loongarch/h264chroma_init_loongarch.c ++++ b/libavcodec/loongarch/h264chroma_init_loongarch.c +@@ -27,6 +27,14 @@ + av_cold void ff_h264chroma_init_loongarch(H264ChromaContext *c, int bit_depth) + { + int cpu_flags = av_get_cpu_flags(); ++ if (have_lsx(cpu_flags)) { ++ if (bit_depth <= 8) { ++ c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_lsx; ++ c->avg_h264_chroma_pixels_tab[0] = ff_avg_h264_chroma_mc8_lsx; ++ c->put_h264_chroma_pixels_tab[1] = ff_put_h264_chroma_mc4_lsx; ++ } ++ } ++ + if (have_lasx(cpu_flags)) { + if (bit_depth <= 8) { + c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_lasx; +diff --git a/libavcodec/loongarch/h264chroma_lasx.c b/libavcodec/loongarch/h264chroma_lasx.c +deleted file mode 100644 +index 824a78dfc8..0000000000 +--- a/libavcodec/loongarch/h264chroma_lasx.c ++++ /dev/null +@@ -1,1280 +0,0 @@ +-/* +- * Loongson LASX optimized h264chroma +- * +- * Copyright (c) 2020 Loongson Technology Corporation Limited +- * Contributed by Shiyou Yin +- * +- * This file is part of FFmpeg. +- * +- * FFmpeg is free software; you can redistribute it and/or +- * modify it under the terms of the GNU Lesser General Public +- * License as published by the Free Software Foundation; either +- * version 2.1 of the License, or (at your option) any later version. +- * +- * FFmpeg 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 +- * Lesser General Public License for more details. +- * +- * You should have received a copy of the GNU Lesser General Public +- * License along with FFmpeg; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +- */ +- +-#include "h264chroma_lasx.h" +-#include "libavutil/attributes.h" +-#include "libavutil/avassert.h" +-#include "libavutil/loongarch/loongson_intrinsics.h" +- +-static const uint8_t chroma_mask_arr[64] = { +- 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, +- 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, +- 0, 1, 1, 2, 2, 3, 3, 4, 16, 17, 17, 18, 18, 19, 19, 20, +- 0, 1, 1, 2, 2, 3, 3, 4, 16, 17, 17, 18, 18, 19, 19, 20 +-}; +- +-static av_always_inline void avc_chroma_hv_8x4_lasx(uint8_t *src, uint8_t *dst, +- ptrdiff_t stride, uint32_t coef_hor0, +- uint32_t coef_hor1, uint32_t coef_ver0, +- uint32_t coef_ver1) +-{ +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_3x = stride_2x + stride; +- ptrdiff_t stride_4x = stride_2x << 1; +- __m256i src0, src1, src2, src3, src4, out; +- __m256i res_hz0, res_hz1, res_hz2, res_vt0, res_vt1; +- __m256i mask; +- __m256i coeff_hz_vec0 = __lasx_xvreplgr2vr_b(coef_hor0); +- __m256i coeff_hz_vec1 = __lasx_xvreplgr2vr_b(coef_hor1); +- __m256i coeff_hz_vec = __lasx_xvilvl_b(coeff_hz_vec0, coeff_hz_vec1); +- __m256i coeff_vt_vec0 = __lasx_xvreplgr2vr_h(coef_ver0); +- __m256i coeff_vt_vec1 = __lasx_xvreplgr2vr_h(coef_ver1); +- +- DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 0, src, 0, mask, src0); +- DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2x, src, stride_3x, src, stride_4x, +- src1, src2, src3, src4); +- DUP2_ARG3(__lasx_xvpermi_q, src2, src1, 0x20, src4, src3, 0x20, src1, src3); +- src0 = __lasx_xvshuf_b(src0, src0, mask); +- DUP2_ARG3(__lasx_xvshuf_b, src1, src1, mask, src3, src3, mask, src1, src3); +- DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_hz_vec, src1, coeff_hz_vec, res_hz0, res_hz1); +- res_hz2 = __lasx_xvdp2_h_bu(src3, coeff_hz_vec); +- res_vt0 = __lasx_xvmul_h(res_hz1, coeff_vt_vec0); +- res_vt1 = __lasx_xvmul_h(res_hz2, coeff_vt_vec0); +- res_hz0 = __lasx_xvpermi_q(res_hz1, res_hz0, 0x20); +- res_hz1 = __lasx_xvpermi_q(res_hz1, res_hz2, 0x3); +- res_vt0 = __lasx_xvmadd_h(res_vt0, res_hz0, coeff_vt_vec1); +- res_vt1 = __lasx_xvmadd_h(res_vt1, res_hz1, coeff_vt_vec1); +- out = __lasx_xvssrarni_bu_h(res_vt1, res_vt0, 6); +- __lasx_xvstelm_d(out, dst, 0, 0); +- __lasx_xvstelm_d(out, dst + stride, 0, 2); +- __lasx_xvstelm_d(out, dst + stride_2x, 0, 1); +- __lasx_xvstelm_d(out, dst + stride_3x, 0, 3); +-} +- +-static av_always_inline void avc_chroma_hv_8x8_lasx(uint8_t *src, uint8_t *dst, +- ptrdiff_t stride, uint32_t coef_hor0, +- uint32_t coef_hor1, uint32_t coef_ver0, +- uint32_t coef_ver1) +-{ +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_3x = stride_2x + stride; +- ptrdiff_t stride_4x = stride << 2; +- __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8; +- __m256i out0, out1; +- __m256i res_hz0, res_hz1, res_hz2, res_hz3, res_hz4; +- __m256i res_vt0, res_vt1, res_vt2, res_vt3; +- __m256i mask; +- __m256i coeff_hz_vec0 = __lasx_xvreplgr2vr_b(coef_hor0); +- __m256i coeff_hz_vec1 = __lasx_xvreplgr2vr_b(coef_hor1); +- __m256i coeff_hz_vec = __lasx_xvilvl_b(coeff_hz_vec0, coeff_hz_vec1); +- __m256i coeff_vt_vec0 = __lasx_xvreplgr2vr_h(coef_ver0); +- __m256i coeff_vt_vec1 = __lasx_xvreplgr2vr_h(coef_ver1); +- +- DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 0, src, 0, mask, src0); +- DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2x, src, stride_3x, src, stride_4x, +- src1, src2, src3, src4); +- src += stride_4x; +- DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2x, src, stride_3x, src, stride_4x, +- src5, src6, src7, src8); +- DUP4_ARG3(__lasx_xvpermi_q, src2, src1, 0x20, src4, src3, 0x20, src6, src5, 0x20, +- src8, src7, 0x20, src1, src3, src5, src7); +- src0 = __lasx_xvshuf_b(src0, src0, mask); +- DUP4_ARG3(__lasx_xvshuf_b, src1, src1, mask, src3, src3, mask, src5, src5, mask, src7, +- src7, mask, src1, src3, src5, src7); +- DUP4_ARG2(__lasx_xvdp2_h_bu, src0, coeff_hz_vec, src1, coeff_hz_vec, src3, +- coeff_hz_vec, src5, coeff_hz_vec, res_hz0, res_hz1, res_hz2, res_hz3); +- res_hz4 = __lasx_xvdp2_h_bu(src7, coeff_hz_vec); +- res_vt0 = __lasx_xvmul_h(res_hz1, coeff_vt_vec0); +- res_vt1 = __lasx_xvmul_h(res_hz2, coeff_vt_vec0); +- res_vt2 = __lasx_xvmul_h(res_hz3, coeff_vt_vec0); +- res_vt3 = __lasx_xvmul_h(res_hz4, coeff_vt_vec0); +- res_hz0 = __lasx_xvpermi_q(res_hz1, res_hz0, 0x20); +- res_hz1 = __lasx_xvpermi_q(res_hz1, res_hz2, 0x3); +- res_hz2 = __lasx_xvpermi_q(res_hz2, res_hz3, 0x3); +- res_hz3 = __lasx_xvpermi_q(res_hz3, res_hz4, 0x3); +- DUP4_ARG3(__lasx_xvmadd_h, res_vt0, res_hz0, coeff_vt_vec1, res_vt1, res_hz1, coeff_vt_vec1, +- res_vt2, res_hz2, coeff_vt_vec1, res_vt3, res_hz3, coeff_vt_vec1, +- res_vt0, res_vt1, res_vt2, res_vt3); +- DUP2_ARG3(__lasx_xvssrarni_bu_h, res_vt1, res_vt0, 6, res_vt3, res_vt2, 6, out0, out1); +- __lasx_xvstelm_d(out0, dst, 0, 0); +- __lasx_xvstelm_d(out0, dst + stride, 0, 2); +- __lasx_xvstelm_d(out0, dst + stride_2x, 0, 1); +- __lasx_xvstelm_d(out0, dst + stride_3x, 0, 3); +- dst += stride_4x; +- __lasx_xvstelm_d(out1, dst, 0, 0); +- __lasx_xvstelm_d(out1, dst + stride, 0, 2); +- __lasx_xvstelm_d(out1, dst + stride_2x, 0, 1); +- __lasx_xvstelm_d(out1, dst + stride_3x, 0, 3); +-} +- +-static av_always_inline void avc_chroma_hz_8x4_lasx(uint8_t *src, uint8_t *dst, +- ptrdiff_t stride, uint32_t coeff0, uint32_t coeff1) +-{ +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_3x = stride_2x + stride; +- __m256i src0, src1, src2, src3, out; +- __m256i res0, res1; +- __m256i mask; +- __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); +- __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); +- __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); +- +- coeff_vec = __lasx_xvslli_b(coeff_vec, 3); +- DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 0, src, 0, mask, src0); +- DUP2_ARG2(__lasx_xvldx, src, stride, src, stride_2x, src1, src2); +- src3 = __lasx_xvldx(src, stride_3x); +- DUP2_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src0, src2); +- DUP2_ARG3(__lasx_xvshuf_b, src0, src0, mask, src2, src2, mask, src0, src2); +- DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, res0, res1); +- out = __lasx_xvssrarni_bu_h(res1, res0, 6); +- __lasx_xvstelm_d(out, dst, 0, 0); +- __lasx_xvstelm_d(out, dst + stride, 0, 2); +- __lasx_xvstelm_d(out, dst + stride_2x, 0, 1); +- __lasx_xvstelm_d(out, dst + stride_3x, 0, 3); +- +-} +- +-static av_always_inline void avc_chroma_hz_8x8_lasx(uint8_t *src, uint8_t *dst, +- ptrdiff_t stride, uint32_t coeff0, uint32_t coeff1) +-{ +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_3x = stride_2x + stride; +- ptrdiff_t stride_4x = stride << 2; +- __m256i src0, src1, src2, src3, src4, src5, src6, src7; +- __m256i out0, out1; +- __m256i res0, res1, res2, res3; +- __m256i mask; +- __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); +- __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); +- __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); +- +- coeff_vec = __lasx_xvslli_b(coeff_vec, 3); +- DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 0, src, 0, mask, src0); +- DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2x, src, stride_3x, src, stride_4x, +- src1, src2, src3, src4); +- src += stride_4x; +- DUP2_ARG2(__lasx_xvldx, src, stride, src, stride_2x, src5, src6); +- src7 = __lasx_xvldx(src, stride_3x); +- DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src5, src4, 0x20, +- src7, src6, 0x20, src0, src2, src4, src6); +- DUP4_ARG3(__lasx_xvshuf_b, src0, src0, mask, src2, src2, mask, src4, src4, mask, +- src6, src6, mask, src0, src2, src4, src6); +- DUP4_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, src4, coeff_vec, src6, +- coeff_vec, res0, res1, res2, res3); +- DUP2_ARG3(__lasx_xvssrarni_bu_h, res1, res0, 6, res3, res2, 6, out0, out1); +- __lasx_xvstelm_d(out0, dst, 0, 0); +- __lasx_xvstelm_d(out0, dst + stride, 0, 2); +- __lasx_xvstelm_d(out0, dst + stride_2x, 0, 1); +- __lasx_xvstelm_d(out0, dst + stride_3x, 0, 3); +- dst += stride_4x; +- __lasx_xvstelm_d(out1, dst, 0, 0); +- __lasx_xvstelm_d(out1, dst + stride, 0, 2); +- __lasx_xvstelm_d(out1, dst + stride_2x, 0, 1); +- __lasx_xvstelm_d(out1, dst + stride_3x, 0, 3); +-} +- +-static av_always_inline void avc_chroma_hz_nonmult_lasx(uint8_t *src, +- uint8_t *dst, ptrdiff_t stride, uint32_t coeff0, +- uint32_t coeff1, int32_t height) +-{ +- uint32_t row; +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_3x = stride_2x + stride; +- ptrdiff_t stride_4x = stride << 2; +- __m256i src0, src1, src2, src3, out; +- __m256i res0, res1; +- __m256i mask; +- __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); +- __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); +- __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); +- +- mask = __lasx_xvld(chroma_mask_arr, 0); +- coeff_vec = __lasx_xvslli_b(coeff_vec, 3); +- +- for (row = height >> 2; row--;) { +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, +- src0, src1, src2, src3); +- src += stride_4x; +- DUP2_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src0, src2); +- DUP2_ARG3(__lasx_xvshuf_b, src0, src0, mask, src2, src2, mask, src0, src2); +- DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, res0, res1); +- out = __lasx_xvssrarni_bu_h(res1, res0, 6); +- __lasx_xvstelm_d(out, dst, 0, 0); +- __lasx_xvstelm_d(out, dst + stride, 0, 2); +- __lasx_xvstelm_d(out, dst + stride_2x, 0, 1); +- __lasx_xvstelm_d(out, dst + stride_3x, 0, 3); +- dst += stride_4x; +- } +- +- if ((height & 3)) { +- src0 = __lasx_xvld(src, 0); +- src1 = __lasx_xvldx(src, stride); +- src1 = __lasx_xvpermi_q(src1, src0, 0x20); +- src0 = __lasx_xvshuf_b(src1, src1, mask); +- res0 = __lasx_xvdp2_h_bu(src0, coeff_vec); +- out = __lasx_xvssrarni_bu_h(res0, res0, 6); +- __lasx_xvstelm_d(out, dst, 0, 0); +- dst += stride; +- __lasx_xvstelm_d(out, dst, 0, 2); +- } +-} +- +-static av_always_inline void avc_chroma_vt_8x4_lasx(uint8_t *src, uint8_t *dst, +- ptrdiff_t stride, uint32_t coeff0, uint32_t coeff1) +-{ +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_3x = stride_2x + stride; +- __m256i src0, src1, src2, src3, src4, out; +- __m256i res0, res1; +- __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); +- __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); +- __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); +- +- coeff_vec = __lasx_xvslli_b(coeff_vec, 3); +- src0 = __lasx_xvld(src, 0); +- src += stride; +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, +- src1, src2, src3, src4); +- DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src2, src1, 0x20, src3, src2, 0x20, +- src4, src3, 0x20, src0, src1, src2, src3); +- DUP2_ARG2(__lasx_xvilvl_b, src1, src0, src3, src2, src0, src2); +- DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, res0, res1); +- out = __lasx_xvssrarni_bu_h(res1, res0, 6); +- __lasx_xvstelm_d(out, dst, 0, 0); +- __lasx_xvstelm_d(out, dst + stride, 0, 2); +- __lasx_xvstelm_d(out, dst + stride_2x, 0, 1); +- __lasx_xvstelm_d(out, dst + stride_3x, 0, 3); +-} +- +-static av_always_inline void avc_chroma_vt_8x8_lasx(uint8_t *src, uint8_t *dst, +- ptrdiff_t stride, uint32_t coeff0, uint32_t coeff1) +-{ +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_3x = stride_2x + stride; +- ptrdiff_t stride_4x = stride << 2; +- __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8; +- __m256i out0, out1; +- __m256i res0, res1, res2, res3; +- __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); +- __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); +- __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); +- +- coeff_vec = __lasx_xvslli_b(coeff_vec, 3); +- src0 = __lasx_xvld(src, 0); +- src += stride; +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, +- src1, src2, src3, src4); +- src += stride_4x; +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, +- src5, src6, src7, src8); +- DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src2, src1, 0x20, src3, src2, 0x20, +- src4, src3, 0x20, src0, src1, src2, src3); +- DUP4_ARG3(__lasx_xvpermi_q, src5, src4, 0x20, src6, src5, 0x20, src7, src6, 0x20, +- src8, src7, 0x20, src4, src5, src6, src7); +- DUP4_ARG2(__lasx_xvilvl_b, src1, src0, src3, src2, src5, src4, src7, src6, +- src0, src2, src4, src6); +- DUP4_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, src4, coeff_vec, +- src6, coeff_vec, res0, res1, res2, res3); +- DUP2_ARG3(__lasx_xvssrarni_bu_h, res1, res0, 6, res3, res2, 6, out0, out1); +- __lasx_xvstelm_d(out0, dst, 0, 0); +- __lasx_xvstelm_d(out0, dst + stride, 0, 2); +- __lasx_xvstelm_d(out0, dst + stride_2x, 0, 1); +- __lasx_xvstelm_d(out0, dst + stride_3x, 0, 3); +- dst += stride_4x; +- __lasx_xvstelm_d(out1, dst, 0, 0); +- __lasx_xvstelm_d(out1, dst + stride, 0, 2); +- __lasx_xvstelm_d(out1, dst + stride_2x, 0, 1); +- __lasx_xvstelm_d(out1, dst + stride_3x, 0, 3); +-} +- +-static av_always_inline void copy_width8x8_lasx(uint8_t *src, uint8_t *dst, +- ptrdiff_t stride) +-{ +- uint64_t tmp[8]; +- ptrdiff_t stride_2, stride_3, stride_4; +- __asm__ volatile ( +- "slli.d %[stride_2], %[stride], 1 \n\t" +- "add.d %[stride_3], %[stride_2], %[stride] \n\t" +- "slli.d %[stride_4], %[stride_2], 1 \n\t" +- "ld.d %[tmp0], %[src], 0x0 \n\t" +- "ldx.d %[tmp1], %[src], %[stride] \n\t" +- "ldx.d %[tmp2], %[src], %[stride_2] \n\t" +- "ldx.d %[tmp3], %[src], %[stride_3] \n\t" +- "add.d %[src], %[src], %[stride_4] \n\t" +- "ld.d %[tmp4], %[src], 0x0 \n\t" +- "ldx.d %[tmp5], %[src], %[stride] \n\t" +- "ldx.d %[tmp6], %[src], %[stride_2] \n\t" +- "ldx.d %[tmp7], %[src], %[stride_3] \n\t" +- +- "st.d %[tmp0], %[dst], 0x0 \n\t" +- "stx.d %[tmp1], %[dst], %[stride] \n\t" +- "stx.d %[tmp2], %[dst], %[stride_2] \n\t" +- "stx.d %[tmp3], %[dst], %[stride_3] \n\t" +- "add.d %[dst], %[dst], %[stride_4] \n\t" +- "st.d %[tmp4], %[dst], 0x0 \n\t" +- "stx.d %[tmp5], %[dst], %[stride] \n\t" +- "stx.d %[tmp6], %[dst], %[stride_2] \n\t" +- "stx.d %[tmp7], %[dst], %[stride_3] \n\t" +- : [tmp0]"=&r"(tmp[0]), [tmp1]"=&r"(tmp[1]), +- [tmp2]"=&r"(tmp[2]), [tmp3]"=&r"(tmp[3]), +- [tmp4]"=&r"(tmp[4]), [tmp5]"=&r"(tmp[5]), +- [tmp6]"=&r"(tmp[6]), [tmp7]"=&r"(tmp[7]), +- [dst]"+&r"(dst), [src]"+&r"(src), +- [stride_2]"=&r"(stride_2), [stride_3]"=&r"(stride_3), +- [stride_4]"=&r"(stride_4) +- : [stride]"r"(stride) +- : "memory" +- ); +-} +- +-static av_always_inline void copy_width8x4_lasx(uint8_t *src, uint8_t *dst, +- ptrdiff_t stride) +-{ +- uint64_t tmp[4]; +- ptrdiff_t stride_2, stride_3; +- __asm__ volatile ( +- "slli.d %[stride_2], %[stride], 1 \n\t" +- "add.d %[stride_3], %[stride_2], %[stride] \n\t" +- "ld.d %[tmp0], %[src], 0x0 \n\t" +- "ldx.d %[tmp1], %[src], %[stride] \n\t" +- "ldx.d %[tmp2], %[src], %[stride_2] \n\t" +- "ldx.d %[tmp3], %[src], %[stride_3] \n\t" +- +- "st.d %[tmp0], %[dst], 0x0 \n\t" +- "stx.d %[tmp1], %[dst], %[stride] \n\t" +- "stx.d %[tmp2], %[dst], %[stride_2] \n\t" +- "stx.d %[tmp3], %[dst], %[stride_3] \n\t" +- : [tmp0]"=&r"(tmp[0]), [tmp1]"=&r"(tmp[1]), +- [tmp2]"=&r"(tmp[2]), [tmp3]"=&r"(tmp[3]), +- [stride_2]"=&r"(stride_2), [stride_3]"=&r"(stride_3) +- : [stride]"r"(stride), [dst]"r"(dst), [src]"r"(src) +- : "memory" +- ); +-} +- +-static void avc_chroma_hv_8w_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- uint32_t coef_hor0, uint32_t coef_hor1, +- uint32_t coef_ver0, uint32_t coef_ver1, +- int32_t height) +-{ +- if (4 == height) { +- avc_chroma_hv_8x4_lasx(src, dst, stride, coef_hor0, coef_hor1, coef_ver0, +- coef_ver1); +- } else if (8 == height) { +- avc_chroma_hv_8x8_lasx(src, dst, stride, coef_hor0, coef_hor1, coef_ver0, +- coef_ver1); +- } +-} +- +-static void avc_chroma_hv_4x2_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- uint32_t coef_hor0, uint32_t coef_hor1, +- uint32_t coef_ver0, uint32_t coef_ver1) +-{ +- ptrdiff_t stride_2 = stride << 1; +- __m256i src0, src1, src2; +- __m256i res_hz, res_vt; +- __m256i mask; +- __m256i coeff_hz_vec0 = __lasx_xvreplgr2vr_b(coef_hor0); +- __m256i coeff_hz_vec1 = __lasx_xvreplgr2vr_b(coef_hor1); +- __m256i coeff_hz_vec = __lasx_xvilvl_b(coeff_hz_vec0, coeff_hz_vec1); +- __m256i coeff_vt_vec0 = __lasx_xvreplgr2vr_h(coef_ver0); +- __m256i coeff_vt_vec1 = __lasx_xvreplgr2vr_h(coef_ver1); +- __m256i coeff_vt_vec = __lasx_xvpermi_q(coeff_vt_vec1, coeff_vt_vec0, 0x02); +- +- DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 32, src, 0, mask, src0); +- DUP2_ARG2(__lasx_xvldx, src, stride, src, stride_2, src1, src2); +- DUP2_ARG3(__lasx_xvshuf_b, src1, src0, mask, src2, src1, mask, src0, src1); +- src0 = __lasx_xvpermi_q(src0, src1, 0x02); +- res_hz = __lasx_xvdp2_h_bu(src0, coeff_hz_vec); +- res_vt = __lasx_xvmul_h(res_hz, coeff_vt_vec); +- res_hz = __lasx_xvpermi_q(res_hz, res_vt, 0x01); +- res_vt = __lasx_xvadd_h(res_hz, res_vt); +- res_vt = __lasx_xvssrarni_bu_h(res_vt, res_vt, 6); +- __lasx_xvstelm_w(res_vt, dst, 0, 0); +- __lasx_xvstelm_w(res_vt, dst + stride, 0, 1); +-} +- +-static void avc_chroma_hv_4x4_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- uint32_t coef_hor0, uint32_t coef_hor1, +- uint32_t coef_ver0, uint32_t coef_ver1) +-{ +- ptrdiff_t stride_2 = stride << 1; +- ptrdiff_t stride_3 = stride_2 + stride; +- ptrdiff_t stride_4 = stride_2 << 1; +- __m256i src0, src1, src2, src3, src4; +- __m256i res_hz0, res_hz1, res_vt0, res_vt1; +- __m256i mask; +- __m256i coeff_hz_vec0 = __lasx_xvreplgr2vr_b(coef_hor0); +- __m256i coeff_hz_vec1 = __lasx_xvreplgr2vr_b(coef_hor1); +- __m256i coeff_hz_vec = __lasx_xvilvl_b(coeff_hz_vec0, coeff_hz_vec1); +- __m256i coeff_vt_vec0 = __lasx_xvreplgr2vr_h(coef_ver0); +- __m256i coeff_vt_vec1 = __lasx_xvreplgr2vr_h(coef_ver1); +- +- DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 32, src, 0, mask, src0); +- DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2, src, stride_3, +- src, stride_4, src1, src2, src3, src4); +- DUP4_ARG3(__lasx_xvshuf_b, src1, src0, mask, src2, src1, mask, src3, src2, mask, +- src4, src3, mask, src0, src1, src2, src3); +- DUP2_ARG3(__lasx_xvpermi_q, src0, src2, 0x02, src1, src3, 0x02, src0, src1); +- DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_hz_vec, src1, coeff_hz_vec, res_hz0, res_hz1); +- DUP2_ARG2(__lasx_xvmul_h, res_hz0, coeff_vt_vec1, res_hz1, coeff_vt_vec0, res_vt0, res_vt1); +- res_hz0 = __lasx_xvadd_h(res_vt0, res_vt1); +- res_hz0 = __lasx_xvssrarni_bu_h(res_hz0, res_hz0, 6); +- __lasx_xvstelm_w(res_hz0, dst, 0, 0); +- __lasx_xvstelm_w(res_hz0, dst + stride, 0, 1); +- __lasx_xvstelm_w(res_hz0, dst + stride_2, 0, 4); +- __lasx_xvstelm_w(res_hz0, dst + stride_3, 0, 5); +-} +- +-static void avc_chroma_hv_4x8_lasx(uint8_t *src, uint8_t * dst, ptrdiff_t stride, +- uint32_t coef_hor0, uint32_t coef_hor1, +- uint32_t coef_ver0, uint32_t coef_ver1) +-{ +- ptrdiff_t stride_2 = stride << 1; +- ptrdiff_t stride_3 = stride_2 + stride; +- ptrdiff_t stride_4 = stride_2 << 1; +- __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8; +- __m256i res_hz0, res_hz1, res_hz2, res_hz3; +- __m256i res_vt0, res_vt1, res_vt2, res_vt3; +- __m256i mask; +- __m256i coeff_hz_vec0 = __lasx_xvreplgr2vr_b(coef_hor0); +- __m256i coeff_hz_vec1 = __lasx_xvreplgr2vr_b(coef_hor1); +- __m256i coeff_hz_vec = __lasx_xvilvl_b(coeff_hz_vec0, coeff_hz_vec1); +- __m256i coeff_vt_vec0 = __lasx_xvreplgr2vr_h(coef_ver0); +- __m256i coeff_vt_vec1 = __lasx_xvreplgr2vr_h(coef_ver1); +- +- DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 32, src, 0, mask, src0); +- DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2, src, stride_3, +- src, stride_4, src1, src2, src3, src4); +- src += stride_4; +- DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2, src, stride_3, +- src, stride_4, src5, src6, src7, src8); +- DUP4_ARG3(__lasx_xvshuf_b, src1, src0, mask, src2, src1, mask, src3, src2, mask, +- src4, src3, mask, src0, src1, src2, src3); +- DUP4_ARG3(__lasx_xvshuf_b, src5, src4, mask, src6, src5, mask, src7, src6, mask, +- src8, src7, mask, src4, src5, src6, src7); +- DUP4_ARG3(__lasx_xvpermi_q, src0, src2, 0x02, src1, src3, 0x02, src4, src6, 0x02, +- src5, src7, 0x02, src0, src1, src4, src5); +- DUP4_ARG2(__lasx_xvdp2_h_bu, src0, coeff_hz_vec, src1, coeff_hz_vec, src4, coeff_hz_vec, +- src5, coeff_hz_vec, res_hz0, res_hz1, res_hz2, res_hz3); +- DUP4_ARG2(__lasx_xvmul_h, res_hz0, coeff_vt_vec1, res_hz1, coeff_vt_vec0, res_hz2, +- coeff_vt_vec1, res_hz3, coeff_vt_vec0, res_vt0, res_vt1, res_vt2, res_vt3); +- DUP2_ARG2(__lasx_xvadd_h, res_vt0, res_vt1, res_vt2, res_vt3, res_vt0, res_vt2); +- res_hz0 = __lasx_xvssrarni_bu_h(res_vt2, res_vt0, 6); +- __lasx_xvstelm_w(res_hz0, dst, 0, 0); +- __lasx_xvstelm_w(res_hz0, dst + stride, 0, 1); +- __lasx_xvstelm_w(res_hz0, dst + stride_2, 0, 4); +- __lasx_xvstelm_w(res_hz0, dst + stride_3, 0, 5); +- dst += stride_4; +- __lasx_xvstelm_w(res_hz0, dst, 0, 2); +- __lasx_xvstelm_w(res_hz0, dst + stride, 0, 3); +- __lasx_xvstelm_w(res_hz0, dst + stride_2, 0, 6); +- __lasx_xvstelm_w(res_hz0, dst + stride_3, 0, 7); +-} +- +-static void avc_chroma_hv_4w_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- uint32_t coef_hor0, uint32_t coef_hor1, +- uint32_t coef_ver0, uint32_t coef_ver1, +- int32_t height) +-{ +- if (8 == height) { +- avc_chroma_hv_4x8_lasx(src, dst, stride, coef_hor0, coef_hor1, coef_ver0, +- coef_ver1); +- } else if (4 == height) { +- avc_chroma_hv_4x4_lasx(src, dst, stride, coef_hor0, coef_hor1, coef_ver0, +- coef_ver1); +- } else if (2 == height) { +- avc_chroma_hv_4x2_lasx(src, dst, stride, coef_hor0, coef_hor1, coef_ver0, +- coef_ver1); +- } +-} +- +-static void avc_chroma_hz_4x2_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- uint32_t coeff0, uint32_t coeff1) +-{ +- __m256i src0, src1; +- __m256i res, mask; +- __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); +- __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); +- __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); +- +- DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 32, src, 0, mask, src0); +- src1 = __lasx_xvldx(src, stride); +- src0 = __lasx_xvshuf_b(src1, src0, mask); +- res = __lasx_xvdp2_h_bu(src0, coeff_vec); +- res = __lasx_xvslli_h(res, 3); +- res = __lasx_xvssrarni_bu_h(res, res, 6); +- __lasx_xvstelm_w(res, dst, 0, 0); +- __lasx_xvstelm_w(res, dst + stride, 0, 1); +-} +- +-static void avc_chroma_hz_4x4_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- uint32_t coeff0, uint32_t coeff1) +-{ +- ptrdiff_t stride_2 = stride << 1; +- ptrdiff_t stride_3 = stride_2 + stride; +- __m256i src0, src1, src2, src3; +- __m256i res, mask; +- __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); +- __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); +- __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); +- +- DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 32, src, 0, mask, src0); +- DUP2_ARG2(__lasx_xvldx, src, stride, src, stride_2, src1, src2); +- src3 = __lasx_xvldx(src, stride_3); +- DUP2_ARG3(__lasx_xvshuf_b, src1, src0, mask, src3, src2, mask, src0, src2); +- src0 = __lasx_xvpermi_q(src0, src2, 0x02); +- res = __lasx_xvdp2_h_bu(src0, coeff_vec); +- res = __lasx_xvslli_h(res, 3); +- res = __lasx_xvssrarni_bu_h(res, res, 6); +- __lasx_xvstelm_w(res, dst, 0, 0); +- __lasx_xvstelm_w(res, dst + stride, 0, 1); +- __lasx_xvstelm_w(res, dst + stride_2, 0, 4); +- __lasx_xvstelm_w(res, dst + stride_3, 0, 5); +-} +- +-static void avc_chroma_hz_4x8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- uint32_t coeff0, uint32_t coeff1) +-{ +- ptrdiff_t stride_2 = stride << 1; +- ptrdiff_t stride_3 = stride_2 + stride; +- ptrdiff_t stride_4 = stride_2 << 1; +- __m256i src0, src1, src2, src3, src4, src5, src6, src7; +- __m256i res0, res1, mask; +- __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); +- __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); +- __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); +- +- coeff_vec = __lasx_xvslli_b(coeff_vec, 3); +- DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 32, src, 0, mask, src0); +- DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2, src, stride_3, +- src, stride_4, src1, src2, src3, src4); +- src += stride_4; +- DUP2_ARG2(__lasx_xvldx, src, stride, src, stride_2, src5, src6); +- src7 = __lasx_xvldx(src, stride_3); +- DUP4_ARG3(__lasx_xvshuf_b, src1, src0, mask, src3, src2, mask, src5, src4, mask, +- src7, src6, mask, src0, src2, src4, src6); +- DUP2_ARG3(__lasx_xvpermi_q, src0, src2, 0x02, src4, src6, 0x02, src0, src4); +- DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src4, coeff_vec, res0, res1); +- res0 = __lasx_xvssrarni_bu_h(res1, res0, 6); +- __lasx_xvstelm_w(res0, dst, 0, 0); +- __lasx_xvstelm_w(res0, dst + stride, 0, 1); +- __lasx_xvstelm_w(res0, dst + stride_2, 0, 4); +- __lasx_xvstelm_w(res0, dst + stride_3, 0, 5); +- dst += stride_4; +- __lasx_xvstelm_w(res0, dst, 0, 2); +- __lasx_xvstelm_w(res0, dst + stride, 0, 3); +- __lasx_xvstelm_w(res0, dst + stride_2, 0, 6); +- __lasx_xvstelm_w(res0, dst + stride_3, 0, 7); +-} +- +-static void avc_chroma_hz_4w_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- uint32_t coeff0, uint32_t coeff1, +- int32_t height) +-{ +- if (8 == height) { +- avc_chroma_hz_4x8_lasx(src, dst, stride, coeff0, coeff1); +- } else if (4 == height) { +- avc_chroma_hz_4x4_lasx(src, dst, stride, coeff0, coeff1); +- } else if (2 == height) { +- avc_chroma_hz_4x2_lasx(src, dst, stride, coeff0, coeff1); +- } +-} +- +-static void avc_chroma_hz_8w_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- uint32_t coeff0, uint32_t coeff1, +- int32_t height) +-{ +- if (4 == height) { +- avc_chroma_hz_8x4_lasx(src, dst, stride, coeff0, coeff1); +- } else if (8 == height) { +- avc_chroma_hz_8x8_lasx(src, dst, stride, coeff0, coeff1); +- } else { +- avc_chroma_hz_nonmult_lasx(src, dst, stride, coeff0, coeff1, height); +- } +-} +- +-static void avc_chroma_vt_4x2_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- uint32_t coeff0, uint32_t coeff1) +-{ +- __m256i src0, src1, src2; +- __m256i tmp0, tmp1; +- __m256i res; +- __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); +- __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); +- __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); +- +- src0 = __lasx_xvld(src, 0); +- DUP2_ARG2(__lasx_xvldx, src, stride, src, stride << 1, src1, src2); +- DUP2_ARG2(__lasx_xvilvl_b, src1, src0, src2, src1, tmp0, tmp1); +- tmp0 = __lasx_xvilvl_d(tmp1, tmp0); +- res = __lasx_xvdp2_h_bu(tmp0, coeff_vec); +- res = __lasx_xvslli_h(res, 3); +- res = __lasx_xvssrarni_bu_h(res, res, 6); +- __lasx_xvstelm_w(res, dst, 0, 0); +- __lasx_xvstelm_w(res, dst + stride, 0, 1); +-} +- +-static void avc_chroma_vt_4x4_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- uint32_t coeff0, uint32_t coeff1) +-{ +- ptrdiff_t stride_2 = stride << 1; +- ptrdiff_t stride_3 = stride_2 + stride; +- ptrdiff_t stride_4 = stride_2 << 1; +- __m256i src0, src1, src2, src3, src4; +- __m256i tmp0, tmp1, tmp2, tmp3; +- __m256i res; +- __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); +- __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); +- __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); +- +- src0 = __lasx_xvld(src, 0); +- DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2, src, stride_3, +- src, stride_4, src1, src2, src3, src4); +- DUP4_ARG2(__lasx_xvilvl_b, src1, src0, src2, src1, src3, src2, src4, src3, +- tmp0, tmp1, tmp2, tmp3); +- DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp2); +- tmp0 = __lasx_xvpermi_q(tmp0, tmp2, 0x02); +- res = __lasx_xvdp2_h_bu(tmp0, coeff_vec); +- res = __lasx_xvslli_h(res, 3); +- res = __lasx_xvssrarni_bu_h(res, res, 6); +- __lasx_xvstelm_w(res, dst, 0, 0); +- __lasx_xvstelm_w(res, dst + stride, 0, 1); +- __lasx_xvstelm_w(res, dst + stride_2, 0, 4); +- __lasx_xvstelm_w(res, dst + stride_3, 0, 5); +-} +- +-static void avc_chroma_vt_4x8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- uint32_t coeff0, uint32_t coeff1) +-{ +- ptrdiff_t stride_2 = stride << 1; +- ptrdiff_t stride_3 = stride_2 + stride; +- ptrdiff_t stride_4 = stride_2 << 1; +- __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8; +- __m256i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; +- __m256i res0, res1; +- __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); +- __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); +- __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); +- +- coeff_vec = __lasx_xvslli_b(coeff_vec, 3); +- src0 = __lasx_xvld(src, 0); +- DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2, src, stride_3, +- src, stride_4, src1, src2, src3, src4); +- src += stride_4; +- DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2, src, stride_3, +- src, stride_4, src5, src6, src7, src8); +- DUP4_ARG2(__lasx_xvilvl_b, src1, src0, src2, src1, src3, src2, src4, src3, +- tmp0, tmp1, tmp2, tmp3); +- DUP4_ARG2(__lasx_xvilvl_b, src5, src4, src6, src5, src7, src6, src8, src7, +- tmp4, tmp5, tmp6, tmp7); +- DUP4_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, +- tmp0, tmp2, tmp4, tmp6); +- tmp0 = __lasx_xvpermi_q(tmp0, tmp2, 0x02); +- tmp4 = __lasx_xvpermi_q(tmp4, tmp6, 0x02); +- DUP2_ARG2(__lasx_xvdp2_h_bu, tmp0, coeff_vec, tmp4, coeff_vec, res0, res1); +- res0 = __lasx_xvssrarni_bu_h(res1, res0, 6); +- __lasx_xvstelm_w(res0, dst, 0, 0); +- __lasx_xvstelm_w(res0, dst + stride, 0, 1); +- __lasx_xvstelm_w(res0, dst + stride_2, 0, 4); +- __lasx_xvstelm_w(res0, dst + stride_3, 0, 5); +- dst += stride_4; +- __lasx_xvstelm_w(res0, dst, 0, 2); +- __lasx_xvstelm_w(res0, dst + stride, 0, 3); +- __lasx_xvstelm_w(res0, dst + stride_2, 0, 6); +- __lasx_xvstelm_w(res0, dst + stride_3, 0, 7); +-} +- +-static void avc_chroma_vt_4w_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- uint32_t coeff0, uint32_t coeff1, +- int32_t height) +-{ +- if (8 == height) { +- avc_chroma_vt_4x8_lasx(src, dst, stride, coeff0, coeff1); +- } else if (4 == height) { +- avc_chroma_vt_4x4_lasx(src, dst, stride, coeff0, coeff1); +- } else if (2 == height) { +- avc_chroma_vt_4x2_lasx(src, dst, stride, coeff0, coeff1); +- } +-} +- +-static void avc_chroma_vt_8w_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- uint32_t coeff0, uint32_t coeff1, +- int32_t height) +-{ +- if (4 == height) { +- avc_chroma_vt_8x4_lasx(src, dst, stride, coeff0, coeff1); +- } else if (8 == height) { +- avc_chroma_vt_8x8_lasx(src, dst, stride, coeff0, coeff1); +- } +-} +- +-static void copy_width4_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- int32_t height) +-{ +- uint32_t tp0, tp1, tp2, tp3, tp4, tp5, tp6, tp7; +- +- if (8 == height) { +- ptrdiff_t stride_2, stride_3, stride_4; +- +- __asm__ volatile ( +- "slli.d %[stride_2], %[stride], 1 \n\t" +- "add.d %[stride_3], %[stride_2], %[stride] \n\t" +- "slli.d %[stride_4], %[stride_2], 1 \n\t" +- "ld.wu %[tp0], %[src], 0 \n\t" +- "ldx.wu %[tp1], %[src], %[stride] \n\t" +- "ldx.wu %[tp2], %[src], %[stride_2] \n\t" +- "ldx.wu %[tp3], %[src], %[stride_3] \n\t" +- "add.d %[src], %[src], %[stride_4] \n\t" +- "ld.wu %[tp4], %[src], 0 \n\t" +- "ldx.wu %[tp5], %[src], %[stride] \n\t" +- "ldx.wu %[tp6], %[src], %[stride_2] \n\t" +- "ldx.wu %[tp7], %[src], %[stride_3] \n\t" +- "st.w %[tp0], %[dst], 0 \n\t" +- "stx.w %[tp1], %[dst], %[stride] \n\t" +- "stx.w %[tp2], %[dst], %[stride_2] \n\t" +- "stx.w %[tp3], %[dst], %[stride_3] \n\t" +- "add.d %[dst], %[dst], %[stride_4] \n\t" +- "st.w %[tp4], %[dst], 0 \n\t" +- "stx.w %[tp5], %[dst], %[stride] \n\t" +- "stx.w %[tp6], %[dst], %[stride_2] \n\t" +- "stx.w %[tp7], %[dst], %[stride_3] \n\t" +- : [stride_2]"+&r"(stride_2), [stride_3]"+&r"(stride_3), [stride_4]"+&r"(stride_4), +- [src]"+&r"(src), [dst]"+&r"(dst), [tp0]"+&r"(tp0), [tp1]"+&r"(tp1), +- [tp2]"+&r"(tp2), [tp3]"+&r"(tp3), [tp4]"+&r"(tp4), [tp5]"+&r"(tp5), +- [tp6]"+&r"(tp6), [tp7]"+&r"(tp7) +- : [stride]"r"(stride) +- : "memory" +- ); +- } else if (4 == height) { +- ptrdiff_t stride_2, stride_3; +- +- __asm__ volatile ( +- "slli.d %[stride_2], %[stride], 1 \n\t" +- "add.d %[stride_3], %[stride_2], %[stride] \n\t" +- "ld.wu %[tp0], %[src], 0 \n\t" +- "ldx.wu %[tp1], %[src], %[stride] \n\t" +- "ldx.wu %[tp2], %[src], %[stride_2] \n\t" +- "ldx.wu %[tp3], %[src], %[stride_3] \n\t" +- "st.w %[tp0], %[dst], 0 \n\t" +- "stx.w %[tp1], %[dst], %[stride] \n\t" +- "stx.w %[tp2], %[dst], %[stride_2] \n\t" +- "stx.w %[tp3], %[dst], %[stride_3] \n\t" +- : [stride_2]"+&r"(stride_2), [stride_3]"+&r"(stride_3), +- [src]"+&r"(src), [dst]"+&r"(dst), [tp0]"+&r"(tp0), [tp1]"+&r"(tp1), +- [tp2]"+&r"(tp2), [tp3]"+&r"(tp3) +- : [stride]"r"(stride) +- : "memory" +- ); +- } else if (2 == height) { +- __asm__ volatile ( +- "ld.wu %[tp0], %[src], 0 \n\t" +- "ldx.wu %[tp1], %[src], %[stride] \n\t" +- "st.w %[tp0], %[dst], 0 \n\t" +- "stx.w %[tp1], %[dst], %[stride] \n\t" +- : [tp0]"+&r"(tp0), [tp1]"+&r"(tp1) +- : [src]"r"(src), [dst]"r"(dst), [stride]"r"(stride) +- : "memory" +- ); +- } +-} +- +-static void copy_width8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- int32_t height) +-{ +- if (8 == height) { +- copy_width8x8_lasx(src, dst, stride); +- } else if (4 == height) { +- copy_width8x4_lasx(src, dst, stride); +- } +-} +- +-void ff_put_h264_chroma_mc4_lasx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, +- int height, int x, int y) +-{ +- av_assert2(x < 8 && y < 8 && x >= 0 && y >= 0); +- +- if(x && y) { +- avc_chroma_hv_4w_lasx(src, dst, stride, x, (8 - x), y, (8 - y), height); +- } else if (x) { +- avc_chroma_hz_4w_lasx(src, dst, stride, x, (8 - x), height); +- } else if (y) { +- avc_chroma_vt_4w_lasx(src, dst, stride, y, (8 - y), height); +- } else { +- copy_width4_lasx(src, dst, stride, height); +- } +-} +- +-void ff_put_h264_chroma_mc8_lasx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, +- int height, int x, int y) +-{ +- av_assert2(x < 8 && y < 8 && x >= 0 && y >= 0); +- +- if (!(x || y)) { +- copy_width8_lasx(src, dst, stride, height); +- } else if (x && y) { +- avc_chroma_hv_8w_lasx(src, dst, stride, x, (8 - x), y, (8 - y), height); +- } else if (x) { +- avc_chroma_hz_8w_lasx(src, dst, stride, x, (8 - x), height); +- } else { +- avc_chroma_vt_8w_lasx(src, dst, stride, y, (8 - y), height); +- } +-} +- +-static av_always_inline void avc_chroma_hv_and_aver_dst_8x4_lasx(uint8_t *src, +- uint8_t *dst, ptrdiff_t stride, uint32_t coef_hor0, +- uint32_t coef_hor1, uint32_t coef_ver0, +- uint32_t coef_ver1) +-{ +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_3x = stride_2x + stride; +- ptrdiff_t stride_4x = stride << 2; +- __m256i tp0, tp1, tp2, tp3; +- __m256i src0, src1, src2, src3, src4, out; +- __m256i res_hz0, res_hz1, res_hz2, res_vt0, res_vt1; +- __m256i mask; +- __m256i coeff_hz_vec0 = __lasx_xvreplgr2vr_b(coef_hor0); +- __m256i coeff_hz_vec1 = __lasx_xvreplgr2vr_b(coef_hor1); +- __m256i coeff_hz_vec = __lasx_xvilvl_b(coeff_hz_vec0, coeff_hz_vec1); +- __m256i coeff_vt_vec0 = __lasx_xvreplgr2vr_h(coef_ver0); +- __m256i coeff_vt_vec1 = __lasx_xvreplgr2vr_h(coef_ver1); +- +- DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 0, src, 0, mask, src0); +- DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2x, src, stride_3x, src, stride_4x, +- src1, src2, src3, src4); +- DUP2_ARG3(__lasx_xvpermi_q, src2, src1, 0x20, src4, src3, 0x20, src1, src3); +- src0 = __lasx_xvshuf_b(src0, src0, mask); +- DUP2_ARG3(__lasx_xvshuf_b, src1, src1, mask, src3, src3, mask, src1, src3); +- DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_hz_vec, src1, coeff_hz_vec, res_hz0, res_hz1); +- res_hz2 = __lasx_xvdp2_h_bu(src3, coeff_hz_vec); +- res_vt0 = __lasx_xvmul_h(res_hz1, coeff_vt_vec0); +- res_vt1 = __lasx_xvmul_h(res_hz2, coeff_vt_vec0); +- res_hz0 = __lasx_xvpermi_q(res_hz1, res_hz0, 0x20); +- res_hz1 = __lasx_xvpermi_q(res_hz1, res_hz2, 0x3); +- res_vt0 = __lasx_xvmadd_h(res_vt0, res_hz0, coeff_vt_vec1); +- res_vt1 = __lasx_xvmadd_h(res_vt1, res_hz1, coeff_vt_vec1); +- out = __lasx_xvssrarni_bu_h(res_vt1, res_vt0, 6); +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, +- tp0, tp1, tp2, tp3); +- DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); +- tp0 = __lasx_xvpermi_q(tp2, tp0, 0x20); +- out = __lasx_xvavgr_bu(out, tp0); +- __lasx_xvstelm_d(out, dst, 0, 0); +- __lasx_xvstelm_d(out, dst + stride, 0, 2); +- __lasx_xvstelm_d(out, dst + stride_2x, 0, 1); +- __lasx_xvstelm_d(out, dst + stride_3x, 0, 3); +-} +- +-static av_always_inline void avc_chroma_hv_and_aver_dst_8x8_lasx(uint8_t *src, +- uint8_t *dst, ptrdiff_t stride, uint32_t coef_hor0, +- uint32_t coef_hor1, uint32_t coef_ver0, +- uint32_t coef_ver1) +-{ +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_3x = stride_2x + stride; +- ptrdiff_t stride_4x = stride << 2; +- __m256i tp0, tp1, tp2, tp3, dst0, dst1; +- __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8; +- __m256i out0, out1; +- __m256i res_hz0, res_hz1, res_hz2, res_hz3, res_hz4; +- __m256i res_vt0, res_vt1, res_vt2, res_vt3; +- __m256i mask; +- __m256i coeff_hz_vec0 = __lasx_xvreplgr2vr_b(coef_hor0); +- __m256i coeff_hz_vec1 = __lasx_xvreplgr2vr_b(coef_hor1); +- __m256i coeff_vt_vec0 = __lasx_xvreplgr2vr_h(coef_ver0); +- __m256i coeff_vt_vec1 = __lasx_xvreplgr2vr_h(coef_ver1); +- __m256i coeff_hz_vec = __lasx_xvilvl_b(coeff_hz_vec0, coeff_hz_vec1); +- +- DUP2_ARG2(__lasx_xvld, chroma_mask_arr, 0, src, 0, mask, src0); +- src += stride; +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, +- src1, src2, src3, src4); +- src += stride_4x; +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, +- src5, src6, src7, src8); +- DUP4_ARG3(__lasx_xvpermi_q, src2, src1, 0x20, src4, src3, 0x20, src6, src5, 0x20, +- src8, src7, 0x20, src1, src3, src5, src7); +- src0 = __lasx_xvshuf_b(src0, src0, mask); +- DUP4_ARG3(__lasx_xvshuf_b, src1, src1, mask, src3, src3, mask, src5, src5, mask, src7, +- src7, mask, src1, src3, src5, src7); +- DUP4_ARG2(__lasx_xvdp2_h_bu, src0, coeff_hz_vec, src1, coeff_hz_vec, src3, +- coeff_hz_vec, src5, coeff_hz_vec, res_hz0, res_hz1, res_hz2, res_hz3); +- res_hz4 = __lasx_xvdp2_h_bu(src7, coeff_hz_vec); +- res_vt0 = __lasx_xvmul_h(res_hz1, coeff_vt_vec0); +- res_vt1 = __lasx_xvmul_h(res_hz2, coeff_vt_vec0); +- res_vt2 = __lasx_xvmul_h(res_hz3, coeff_vt_vec0); +- res_vt3 = __lasx_xvmul_h(res_hz4, coeff_vt_vec0); +- res_hz0 = __lasx_xvpermi_q(res_hz1, res_hz0, 0x20); +- res_hz1 = __lasx_xvpermi_q(res_hz1, res_hz2, 0x3); +- res_hz2 = __lasx_xvpermi_q(res_hz2, res_hz3, 0x3); +- res_hz3 = __lasx_xvpermi_q(res_hz3, res_hz4, 0x3); +- res_vt0 = __lasx_xvmadd_h(res_vt0, res_hz0, coeff_vt_vec1); +- res_vt1 = __lasx_xvmadd_h(res_vt1, res_hz1, coeff_vt_vec1); +- res_vt2 = __lasx_xvmadd_h(res_vt2, res_hz2, coeff_vt_vec1); +- res_vt3 = __lasx_xvmadd_h(res_vt3, res_hz3, coeff_vt_vec1); +- DUP2_ARG3(__lasx_xvssrarni_bu_h, res_vt1, res_vt0, 6, res_vt3, res_vt2, 6, +- out0, out1); +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, +- tp0, tp1, tp2, tp3); +- DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); +- dst0 = __lasx_xvpermi_q(tp2, tp0, 0x20); +- dst += stride_4x; +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, +- tp0, tp1, tp2, tp3); +- dst -= stride_4x; +- DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); +- dst1 = __lasx_xvpermi_q(tp2, tp0, 0x20); +- out0 = __lasx_xvavgr_bu(out0, dst0); +- out1 = __lasx_xvavgr_bu(out1, dst1); +- __lasx_xvstelm_d(out0, dst, 0, 0); +- __lasx_xvstelm_d(out0, dst + stride, 0, 2); +- __lasx_xvstelm_d(out0, dst + stride_2x, 0, 1); +- __lasx_xvstelm_d(out0, dst + stride_3x, 0, 3); +- dst += stride_4x; +- __lasx_xvstelm_d(out1, dst, 0, 0); +- __lasx_xvstelm_d(out1, dst + stride, 0, 2); +- __lasx_xvstelm_d(out1, dst + stride_2x, 0, 1); +- __lasx_xvstelm_d(out1, dst + stride_3x, 0, 3); +-} +- +-static av_always_inline void avc_chroma_hz_and_aver_dst_8x4_lasx(uint8_t *src, +- uint8_t *dst, ptrdiff_t stride, uint32_t coeff0, +- uint32_t coeff1) +-{ +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_3x = stride_2x + stride; +- __m256i tp0, tp1, tp2, tp3; +- __m256i src0, src1, src2, src3, out; +- __m256i res0, res1; +- __m256i mask; +- __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); +- __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); +- __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); +- +- coeff_vec = __lasx_xvslli_b(coeff_vec, 3); +- mask = __lasx_xvld(chroma_mask_arr, 0); +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, +- src0, src1, src2, src3); +- DUP2_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src0, src2); +- DUP2_ARG3(__lasx_xvshuf_b, src0, src0, mask, src2, src2, mask, src0, src2); +- DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, res0, res1); +- out = __lasx_xvssrarni_bu_h(res1, res0, 6); +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, +- tp0, tp1, tp2, tp3); +- DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); +- tp0 = __lasx_xvpermi_q(tp2, tp0, 0x20); +- out = __lasx_xvavgr_bu(out, tp0); +- __lasx_xvstelm_d(out, dst, 0, 0); +- __lasx_xvstelm_d(out, dst + stride, 0, 2); +- __lasx_xvstelm_d(out, dst + stride_2x, 0, 1); +- __lasx_xvstelm_d(out, dst + stride_3x, 0, 3); +-} +- +-static av_always_inline void avc_chroma_hz_and_aver_dst_8x8_lasx(uint8_t *src, +- uint8_t *dst, ptrdiff_t stride, uint32_t coeff0, +- uint32_t coeff1) +-{ +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_3x = stride_2x + stride; +- ptrdiff_t stride_4x = stride << 2; +- __m256i tp0, tp1, tp2, tp3, dst0, dst1; +- __m256i src0, src1, src2, src3, src4, src5, src6, src7; +- __m256i out0, out1; +- __m256i res0, res1, res2, res3; +- __m256i mask; +- __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); +- __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); +- __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); +- +- coeff_vec = __lasx_xvslli_b(coeff_vec, 3); +- mask = __lasx_xvld(chroma_mask_arr, 0); +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, +- src0, src1, src2, src3); +- src += stride_4x; +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, +- src4, src5, src6, src7); +- DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src3, src2, 0x20, src5, src4, 0x20, +- src7, src6, 0x20, src0, src2, src4, src6); +- DUP4_ARG3(__lasx_xvshuf_b, src0, src0, mask, src2, src2, mask, src4, src4, +- mask, src6, src6, mask, src0, src2, src4, src6); +- DUP4_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, src4, coeff_vec, src6, +- coeff_vec, res0, res1, res2, res3); +- DUP2_ARG3(__lasx_xvssrarni_bu_h, res1, res0, 6, res3, res2, 6, out0, out1); +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, +- tp0, tp1, tp2, tp3); +- DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); +- dst0 = __lasx_xvpermi_q(tp2, tp0, 0x20); +- dst += stride_4x; +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, +- tp0, tp1, tp2, tp3); +- dst -= stride_4x; +- DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); +- dst1 = __lasx_xvpermi_q(tp2, tp0, 0x20); +- out0 = __lasx_xvavgr_bu(out0, dst0); +- out1 = __lasx_xvavgr_bu(out1, dst1); +- __lasx_xvstelm_d(out0, dst, 0, 0); +- __lasx_xvstelm_d(out0, dst + stride, 0, 2); +- __lasx_xvstelm_d(out0, dst + stride_2x, 0, 1); +- __lasx_xvstelm_d(out0, dst + stride_3x, 0, 3); +- dst += stride_4x; +- __lasx_xvstelm_d(out1, dst, 0, 0); +- __lasx_xvstelm_d(out1, dst + stride, 0, 2); +- __lasx_xvstelm_d(out1, dst + stride_2x, 0, 1); +- __lasx_xvstelm_d(out1, dst + stride_3x, 0, 3); +-} +- +-static av_always_inline void avc_chroma_vt_and_aver_dst_8x4_lasx(uint8_t *src, +- uint8_t *dst, ptrdiff_t stride, uint32_t coeff0, +- uint32_t coeff1) +-{ +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_3x = stride_2x + stride; +- ptrdiff_t stride_4x = stride << 2; +- __m256i tp0, tp1, tp2, tp3; +- __m256i src0, src1, src2, src3, src4, out; +- __m256i res0, res1; +- __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); +- __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); +- __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); +- +- coeff_vec = __lasx_xvslli_b(coeff_vec, 3); +- src0 = __lasx_xvld(src, 0); +- DUP4_ARG2(__lasx_xvldx, src, stride, src, stride_2x, src, stride_3x, src, stride_4x, +- src1, src2, src3, src4); +- DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src2, src1, 0x20, src3, src2, 0x20, +- src4, src3, 0x20, src0, src1, src2, src3); +- DUP2_ARG2(__lasx_xvilvl_b, src1, src0, src3, src2, src0, src2); +- DUP2_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, res0, res1); +- out = __lasx_xvssrarni_bu_h(res1, res0, 6); +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, +- tp0, tp1, tp2, tp3); +- DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); +- tp0 = __lasx_xvpermi_q(tp2, tp0, 0x20); +- out = __lasx_xvavgr_bu(out, tp0); +- __lasx_xvstelm_d(out, dst, 0, 0); +- __lasx_xvstelm_d(out, dst + stride, 0, 2); +- __lasx_xvstelm_d(out, dst + stride_2x, 0, 1); +- __lasx_xvstelm_d(out, dst + stride_3x, 0, 3); +-} +- +-static av_always_inline void avc_chroma_vt_and_aver_dst_8x8_lasx(uint8_t *src, +- uint8_t *dst, ptrdiff_t stride, uint32_t coeff0, +- uint32_t coeff1) +-{ +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_3x = stride_2x + stride; +- ptrdiff_t stride_4x = stride << 2; +- __m256i tp0, tp1, tp2, tp3, dst0, dst1; +- __m256i src0, src1, src2, src3, src4, src5, src6, src7, src8; +- __m256i out0, out1; +- __m256i res0, res1, res2, res3; +- __m256i coeff_vec0 = __lasx_xvreplgr2vr_b(coeff0); +- __m256i coeff_vec1 = __lasx_xvreplgr2vr_b(coeff1); +- __m256i coeff_vec = __lasx_xvilvl_b(coeff_vec0, coeff_vec1); +- +- coeff_vec = __lasx_xvslli_b(coeff_vec, 3); +- src0 = __lasx_xvld(src, 0); +- src += stride; +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, +- src1, src2, src3, src4); +- src += stride_4x; +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, src, stride_3x, +- src5, src6, src7, src8); +- DUP4_ARG3(__lasx_xvpermi_q, src1, src0, 0x20, src2, src1, 0x20, src3, src2, 0x20, +- src4, src3, 0x20, src0, src1, src2, src3); +- DUP4_ARG3(__lasx_xvpermi_q, src5, src4, 0x20, src6, src5, 0x20, src7, src6, 0x20, +- src8, src7, 0x20, src4, src5, src6, src7); +- DUP4_ARG2(__lasx_xvilvl_b, src1, src0, src3, src2, src5, src4, src7, src6, +- src0, src2, src4, src6); +- DUP4_ARG2(__lasx_xvdp2_h_bu, src0, coeff_vec, src2, coeff_vec, src4, coeff_vec, src6, +- coeff_vec, res0, res1, res2, res3); +- DUP2_ARG3(__lasx_xvssrarni_bu_h, res1, res0, 6, res3, res2, 6, out0, out1); +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, +- tp0, tp1, tp2, tp3); +- DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); +- dst0 = __lasx_xvpermi_q(tp2, tp0, 0x20); +- dst += stride_4x; +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, dst, stride_3x, +- tp0, tp1, tp2, tp3); +- dst -= stride_4x; +- DUP2_ARG2(__lasx_xvilvl_d, tp2, tp0, tp3, tp1, tp0, tp2); +- dst1 = __lasx_xvpermi_q(tp2, tp0, 0x20); +- out0 = __lasx_xvavgr_bu(out0, dst0); +- out1 = __lasx_xvavgr_bu(out1, dst1); +- __lasx_xvstelm_d(out0, dst, 0, 0); +- __lasx_xvstelm_d(out0, dst + stride, 0, 2); +- __lasx_xvstelm_d(out0, dst + stride_2x, 0, 1); +- __lasx_xvstelm_d(out0, dst + stride_3x, 0, 3); +- dst += stride_4x; +- __lasx_xvstelm_d(out1, dst, 0, 0); +- __lasx_xvstelm_d(out1, dst + stride, 0, 2); +- __lasx_xvstelm_d(out1, dst + stride_2x, 0, 1); +- __lasx_xvstelm_d(out1, dst + stride_3x, 0, 3); +-} +- +-static av_always_inline void avg_width8x8_lasx(uint8_t *src, uint8_t *dst, +- ptrdiff_t stride) +-{ +- __m256i src0, src1, src2, src3; +- __m256i dst0, dst1, dst2, dst3; +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_3x = stride_2x + stride; +- ptrdiff_t stride_4x = stride << 2; +- +- src0 = __lasx_xvldrepl_d(src, 0); +- src1 = __lasx_xvldrepl_d(src + stride, 0); +- src2 = __lasx_xvldrepl_d(src + stride_2x, 0); +- src3 = __lasx_xvldrepl_d(src + stride_3x, 0); +- dst0 = __lasx_xvldrepl_d(dst, 0); +- dst1 = __lasx_xvldrepl_d(dst + stride, 0); +- dst2 = __lasx_xvldrepl_d(dst + stride_2x, 0); +- dst3 = __lasx_xvldrepl_d(dst + stride_3x, 0); +- src0 = __lasx_xvpackev_d(src1,src0); +- src2 = __lasx_xvpackev_d(src3,src2); +- src0 = __lasx_xvpermi_q(src0, src2, 0x02); +- dst0 = __lasx_xvpackev_d(dst1,dst0); +- dst2 = __lasx_xvpackev_d(dst3,dst2); +- dst0 = __lasx_xvpermi_q(dst0, dst2, 0x02); +- dst0 = __lasx_xvavgr_bu(src0, dst0); +- __lasx_xvstelm_d(dst0, dst, 0, 0); +- __lasx_xvstelm_d(dst0, dst + stride, 0, 1); +- __lasx_xvstelm_d(dst0, dst + stride_2x, 0, 2); +- __lasx_xvstelm_d(dst0, dst + stride_3x, 0, 3); +- +- src += stride_4x; +- dst += stride_4x; +- src0 = __lasx_xvldrepl_d(src, 0); +- src1 = __lasx_xvldrepl_d(src + stride, 0); +- src2 = __lasx_xvldrepl_d(src + stride_2x, 0); +- src3 = __lasx_xvldrepl_d(src + stride_3x, 0); +- dst0 = __lasx_xvldrepl_d(dst, 0); +- dst1 = __lasx_xvldrepl_d(dst + stride, 0); +- dst2 = __lasx_xvldrepl_d(dst + stride_2x, 0); +- dst3 = __lasx_xvldrepl_d(dst + stride_3x, 0); +- src0 = __lasx_xvpackev_d(src1,src0); +- src2 = __lasx_xvpackev_d(src3,src2); +- src0 = __lasx_xvpermi_q(src0, src2, 0x02); +- dst0 = __lasx_xvpackev_d(dst1,dst0); +- dst2 = __lasx_xvpackev_d(dst3,dst2); +- dst0 = __lasx_xvpermi_q(dst0, dst2, 0x02); +- dst0 = __lasx_xvavgr_bu(src0, dst0); +- __lasx_xvstelm_d(dst0, dst, 0, 0); +- __lasx_xvstelm_d(dst0, dst + stride, 0, 1); +- __lasx_xvstelm_d(dst0, dst + stride_2x, 0, 2); +- __lasx_xvstelm_d(dst0, dst + stride_3x, 0, 3); +-} +- +-static av_always_inline void avg_width8x4_lasx(uint8_t *src, uint8_t *dst, +- ptrdiff_t stride) +-{ +- __m256i src0, src1, src2, src3; +- __m256i dst0, dst1, dst2, dst3; +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_3x = stride_2x + stride; +- +- src0 = __lasx_xvldrepl_d(src, 0); +- src1 = __lasx_xvldrepl_d(src + stride, 0); +- src2 = __lasx_xvldrepl_d(src + stride_2x, 0); +- src3 = __lasx_xvldrepl_d(src + stride_3x, 0); +- dst0 = __lasx_xvldrepl_d(dst, 0); +- dst1 = __lasx_xvldrepl_d(dst + stride, 0); +- dst2 = __lasx_xvldrepl_d(dst + stride_2x, 0); +- dst3 = __lasx_xvldrepl_d(dst + stride_3x, 0); +- src0 = __lasx_xvpackev_d(src1,src0); +- src2 = __lasx_xvpackev_d(src3,src2); +- src0 = __lasx_xvpermi_q(src0, src2, 0x02); +- dst0 = __lasx_xvpackev_d(dst1,dst0); +- dst2 = __lasx_xvpackev_d(dst3,dst2); +- dst0 = __lasx_xvpermi_q(dst0, dst2, 0x02); +- dst0 = __lasx_xvavgr_bu(src0, dst0); +- __lasx_xvstelm_d(dst0, dst, 0, 0); +- __lasx_xvstelm_d(dst0, dst + stride, 0, 1); +- __lasx_xvstelm_d(dst0, dst + stride_2x, 0, 2); +- __lasx_xvstelm_d(dst0, dst + stride_3x, 0, 3); +-} +- +-static void avc_chroma_hv_and_aver_dst_8w_lasx(uint8_t *src, uint8_t *dst, +- ptrdiff_t stride, +- uint32_t coef_hor0, +- uint32_t coef_hor1, +- uint32_t coef_ver0, +- uint32_t coef_ver1, +- int32_t height) +-{ +- if (4 == height) { +- avc_chroma_hv_and_aver_dst_8x4_lasx(src, dst, stride, coef_hor0, +- coef_hor1, coef_ver0, coef_ver1); +- } else if (8 == height) { +- avc_chroma_hv_and_aver_dst_8x8_lasx(src, dst, stride, coef_hor0, +- coef_hor1, coef_ver0, coef_ver1); +- } +-} +- +-static void avc_chroma_hz_and_aver_dst_8w_lasx(uint8_t *src, uint8_t *dst, +- ptrdiff_t stride, uint32_t coeff0, +- uint32_t coeff1, int32_t height) +-{ +- if (4 == height) { +- avc_chroma_hz_and_aver_dst_8x4_lasx(src, dst, stride, coeff0, coeff1); +- } else if (8 == height) { +- avc_chroma_hz_and_aver_dst_8x8_lasx(src, dst, stride, coeff0, coeff1); +- } +-} +- +-static void avc_chroma_vt_and_aver_dst_8w_lasx(uint8_t *src, uint8_t *dst, +- ptrdiff_t stride, uint32_t coeff0, +- uint32_t coeff1, int32_t height) +-{ +- if (4 == height) { +- avc_chroma_vt_and_aver_dst_8x4_lasx(src, dst, stride, coeff0, coeff1); +- } else if (8 == height) { +- avc_chroma_vt_and_aver_dst_8x8_lasx(src, dst, stride, coeff0, coeff1); +- } +-} +- +-static void avg_width8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- int32_t height) +-{ +- if (8 == height) { +- avg_width8x8_lasx(src, dst, stride); +- } else if (4 == height) { +- avg_width8x4_lasx(src, dst, stride); +- } +-} +- +-void ff_avg_h264_chroma_mc8_lasx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, +- int height, int x, int y) +-{ +- av_assert2(x < 8 && y < 8 && x >= 0 && y >= 0); +- +- if (!(x || y)) { +- avg_width8_lasx(src, dst, stride, height); +- } else if (x && y) { +- avc_chroma_hv_and_aver_dst_8w_lasx(src, dst, stride, x, (8 - x), y, +- (8 - y), height); +- } else if (x) { +- avc_chroma_hz_and_aver_dst_8w_lasx(src, dst, stride, x, (8 - x), height); +- } else { +- avc_chroma_vt_and_aver_dst_8w_lasx(src, dst, stride, y, (8 - y), height); +- } +-} +diff --git a/libavcodec/loongarch/h264chroma_lasx.h b/libavcodec/loongarch/h264chroma_lasx.h +index 4aac8db8cb..608c14d590 100644 +--- a/libavcodec/loongarch/h264chroma_lasx.h ++++ b/libavcodec/loongarch/h264chroma_lasx.h +@@ -26,6 +26,13 @@ + #include + #include "libavcodec/h264.h" + ++void ff_put_h264_chroma_mc8_lsx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++ int h, int x, int y); ++void ff_avg_h264_chroma_mc8_lsx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++ int h, int x, int y); ++void ff_put_h264_chroma_mc4_lsx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++ int h, int x, int y); ++ + void ff_put_h264_chroma_mc4_lasx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + int h, int x, int y); + void ff_put_h264_chroma_mc8_lasx(uint8_t *dst, uint8_t *src, ptrdiff_t stride, +diff --git a/libavcodec/loongarch/h264dsp.S b/libavcodec/loongarch/h264dsp.S +new file mode 100644 +index 0000000000..1c40c4e5bf +--- /dev/null ++++ b/libavcodec/loongarch/h264dsp.S +@@ -0,0 +1,2842 @@ ++/* ++ * Loongson LASX/LSX optimized h264dsp ++ * ++ * Copyright (c) 2022 Loongson Technology Corporation Limited ++ * Contributed by Hao Chen ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "loongson_asm.S" ++ ++const vec_shuf ++.rept 2 ++.byte 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3 ++.endr ++endconst ++ ++.macro AVC_LPF_P1_OR_Q1 _in0, _in1, _in2, _in3, _in4, _in5, _out, _tmp0, _tmp1 ++ vavgr.hu \_tmp0, \_in0, \_in1 ++ vslli.h \_tmp1, \_in2, 1 ++ vsub.h \_tmp0, \_tmp0, \_tmp1 ++ vavg.h \_tmp0, \_in3, \_tmp0 ++ vclip.h \_tmp0, \_tmp0, \_in4, \_in5 ++ vadd.h \_out, \_in2, \_tmp0 ++.endm ++ ++.macro AVC_LPF_P0Q0 _in0, _in1, _in2, _in3, _in4, _in5, _out0, \ ++ _out1, _tmp0, _tmp1 ++ vsub.h \_tmp0, \_in0, \_in1 ++ vsub.h \_tmp1, \_in2, \_in3 ++ vslli.h \_tmp0, \_tmp0, 2 ++ vaddi.hu \_tmp1, \_tmp1, 4 ++ vadd.h \_tmp0, \_tmp0, \_tmp1 ++ vsrai.h \_tmp0, \_tmp0, 3 ++ vclip.h \_tmp0, \_tmp0, \_in4, \_in5 ++ vadd.h \_out0, \_in1, \_tmp0 ++ vsub.h \_out1, \_in0, \_tmp0 ++ vclip255.h \_out0, \_out0 ++ vclip255.h \_out1, \_out1 ++.endm ++ ++function ff_h264_h_lpf_luma_8_lsx ++ slli.d t0, a1, 1 //img_width_2x ++ slli.d t1, a1, 2 //img_width_4x ++ slli.d t2, a1, 3 //img_width_8x ++ addi.d sp, sp, -64 ++ fst.d f24, sp, 0 ++ fst.d f25, sp, 8 ++ fst.d f26, sp, 16 ++ fst.d f27, sp, 24 ++ fst.d f28, sp, 32 ++ fst.d f29, sp, 40 ++ fst.d f30, sp, 48 ++ fst.d f31, sp, 56 ++ la.local t4, vec_shuf ++ add.d t3, t0, a1 //img_width_3x ++ vldrepl.w vr0, a4, 0 //tmp_vec0 ++ vld vr1, t4, 0 //tc_vec ++ vshuf.b vr1, vr0, vr0, vr1 //tc_vec ++ vslti.b vr2, vr1, 0 ++ vxori.b vr2, vr2, 255 ++ vandi.b vr2, vr2, 1 //bs_vec ++ vsetnez.v $fcc0, vr2 ++ bceqz $fcc0, .END_LUMA_8 ++ vldi vr0, 0 //zero ++ addi.d t4, a0, -4 //src ++ vslt.bu vr3, vr0, vr2 //is_bs_greater_than0 ++ add.d t5, t4, t2 //src_tmp ++ vld vr4, t4, 0 //row0 ++ vldx vr5, t4, a1 //row1 ++ vldx vr6, t4, t0 //row2 ++ vldx vr7, t4, t3 //row3 ++ add.d t6, t4, t1 // src += img_width_4x ++ vld vr8, t6, 0 //row4 ++ vldx vr9, t6, a1 //row5 ++ vldx vr10, t6, t0 //row6 ++ vldx vr11, t6, t3 //row7 ++ vld vr12, t5, 0 //row8 ++ vldx vr13, t5, a1 //row9 ++ vldx vr14, t5, t0 //row10 ++ vldx vr15, t5, t3 //row11 ++ add.d t6, t5, t1 // src_tmp += img_width_4x ++ vld vr16, t6, 0 //row12 ++ vldx vr17, t6, a1 //row13 ++ vldx vr18, t6, t0 //row14 ++ vldx vr19, t6, t3 //row15 ++ LSX_TRANSPOSE16X8_B vr4, vr5, vr6, vr7, vr8, vr9, vr10, vr11, \ ++ vr12, vr13, vr14, vr15, vr16, vr17, vr18, vr19, \ ++ vr10, vr11, vr12, vr13, vr14, vr15, vr16, vr17, \ ++ vr20, vr21, vr22, vr23, vr24, vr25, vr26, vr27 ++ //vr10: p3_org, vr11: p2_org, vr12: p1_org, vr13: p0_org ++ //vr14: q0_org, vr15: q1_org, vr16: q2_org, vr17: q3_org ++ vabsd.bu vr20, vr13, vr14 //p0_asub_q0 ++ vabsd.bu vr21, vr12, vr13 //p1_asub_p0 ++ vabsd.bu vr22, vr15, vr14 //q1_asub_q0 ++ ++ vreplgr2vr.b vr4, a2 //alpha ++ vreplgr2vr.b vr5, a3 //beta ++ ++ vslt.bu vr6, vr20, vr4 //is_less_than_alpha ++ vslt.bu vr7, vr21, vr5 //is_less_than_beta ++ vand.v vr8, vr6, vr7 //is_less_than ++ vslt.bu vr7, vr22, vr5 //is_less_than_beta ++ vand.v vr8, vr7, vr8 //is_less_than ++ vand.v vr8, vr8, vr3 //is_less_than ++ vsetnez.v $fcc0, vr8 ++ bceqz $fcc0, .END_LUMA_8 ++ vneg.b vr9, vr1 //neg_tc_h ++ vsllwil.hu.bu vr18, vr1, 0 //tc_h.0 ++ vexth.hu.bu vr19, vr1 //tc_h.1 ++ vexth.h.b vr2, vr9 //neg_tc_h.1 ++ vsllwil.h.b vr9, vr9, 0 //neg_tc_h.0 ++ ++ vsllwil.hu.bu vr23, vr12, 0 //p1_org_h.0 ++ vexth.hu.bu vr3, vr12 //p1_org_h.1 ++ vsllwil.hu.bu vr24, vr13, 0 //p0_org_h.0 ++ vexth.hu.bu vr4, vr13 //p0_org_h.1 ++ vsllwil.hu.bu vr25, vr14, 0 //q0_org_h.0 ++ vexth.hu.bu vr6, vr14 //q0_org_h.1 ++ ++ vabsd.bu vr0, vr11, vr13 //p2_asub_p0 ++ vslt.bu vr7, vr0, vr5 ++ vand.v vr7, vr8, vr7 //is_less_than_beta ++ vsetnez.v $fcc0, vr7 ++ bceqz $fcc0, .END_LUMA_BETA ++ vsllwil.hu.bu vr26, vr11, 0 //p2_org_h.0 ++ vexth.hu.bu vr0, vr11 //p2_org_h.1 ++ AVC_LPF_P1_OR_Q1 vr24, vr25, vr23, vr26, vr9, vr18, vr27, vr28, vr29 //vr27: p1_h.0 ++ AVC_LPF_P1_OR_Q1 vr4, vr6, vr3, vr0, vr2, vr19, vr28, vr29, vr30 //vr28: p1_h.1 ++ vpickev.b vr27, vr28, vr27 ++ vbitsel.v vr12, vr12, vr27, vr7 ++ vandi.b vr7, vr7, 1 ++ vadd.b vr1, vr1, vr7 ++.END_LUMA_BETA: ++ vabsd.bu vr26, vr16, vr14 //q2_asub_q0 ++ vslt.bu vr7, vr26, vr5 ++ vand.v vr7, vr7, vr8 ++ vsllwil.hu.bu vr27, vr15, 0 //q1_org_h.0 ++ vexth.hu.bu vr26, vr15 //q1_org_h.1 ++ vsetnez.v $fcc0, vr7 ++ bceqz $fcc0, .END_LUMA_BETA_SEC ++ vsllwil.hu.bu vr28, vr16, 0 //q2_org_h.0 ++ vexth.hu.bu vr0, vr16 //q2_org_h.1 ++ AVC_LPF_P1_OR_Q1 vr24, vr25, vr27, vr28, vr9, vr18, vr29, vr30, vr31 //vr29: q1_h.0 ++ AVC_LPF_P1_OR_Q1 vr4, vr6, vr26, vr0, vr2, vr19, vr22, vr30, vr31 //vr22:q1_h.1 ++ vpickev.b vr29, vr22, vr29 ++ vbitsel.v vr15, vr15, vr29, vr7 ++ vandi.b vr7, vr7, 1 ++ vadd.b vr1, vr1, vr7 ++.END_LUMA_BETA_SEC: ++ vneg.b vr22, vr1 //neg_thresh_h ++ vsllwil.h.b vr28, vr22, 0 //neg_thresh_h.0 ++ vexth.h.b vr29, vr22 //neg_thresh_h.1 ++ vsllwil.hu.bu vr18, vr1, 0 //tc_h.0 ++ vexth.hu.bu vr1, vr1 //tc_h.1 ++ AVC_LPF_P0Q0 vr25, vr24, vr23, vr27, vr28, vr18, vr30, vr31, vr0, vr2 ++ AVC_LPF_P0Q0 vr6, vr4, vr3, vr26, vr29, vr1, vr20, vr21, vr0, vr2 ++ vpickev.b vr30, vr20, vr30 //p0_h ++ vpickev.b vr31, vr21, vr31 //q0_h ++ vbitsel.v vr13, vr13, vr30, vr8 //p0_org ++ vbitsel.v vr14, vr14, vr31, vr8 //q0_org ++ //vr10: p3_org, vr11: p2_org, vr12: p1_org, vr13: p0_org ++ //vr14: q0_org, vr15: q1_org, vr16: q2_org, vr17: q3_org ++ ++ vilvl.b vr4, vr12, vr10 // row0.0 ++ vilvl.b vr5, vr16, vr14 // row0.1 ++ vilvl.b vr6, vr13, vr11 // row2.0 ++ vilvl.b vr7, vr17, vr15 // row2.1 ++ ++ vilvh.b vr8, vr12, vr10 // row1.0 ++ vilvh.b vr9, vr16, vr14 // row1.1 ++ vilvh.b vr10, vr13, vr11 // row3.0 ++ vilvh.b vr11, vr17, vr15 // row3.1 ++ ++ vilvl.b vr12, vr6, vr4 // row4.0 ++ vilvl.b vr13, vr7, vr5 // row4.1 ++ vilvl.b vr14, vr10, vr8 // row6.0 ++ vilvl.b vr15, vr11, vr9 // row6.1 ++ ++ vilvh.b vr16, vr6, vr4 // row5.0 ++ vilvh.b vr17, vr7, vr5 // row5.1 ++ vilvh.b vr18, vr10, vr8 // row7.0 ++ vilvh.b vr19, vr11, vr9 // row7.1 ++ ++ vilvl.w vr4, vr13, vr12 // row4: 0, 4, 1, 5 ++ vilvh.w vr5, vr13, vr12 // row4: 2, 6, 3, 7 ++ vilvl.w vr6, vr17, vr16 // row5: 0, 4, 1, 5 ++ vilvh.w vr7, vr17, vr16 // row5: 2, 6, 3, 7 ++ ++ vilvl.w vr8, vr15, vr14 // row6: 0, 4, 1, 5 ++ vilvh.w vr9, vr15, vr14 // row6: 2, 6, 3, 7 ++ vilvl.w vr10, vr19, vr18 // row7: 0, 4, 1, 5 ++ vilvh.w vr11, vr19, vr18 // row7: 2, 6, 3, 7 ++ ++ vbsrl.v vr20, vr4, 8 ++ vbsrl.v vr21, vr5, 8 ++ vbsrl.v vr22, vr6, 8 ++ vbsrl.v vr23, vr7, 8 ++ ++ vbsrl.v vr24, vr8, 8 ++ vbsrl.v vr25, vr9, 8 ++ vbsrl.v vr26, vr10, 8 ++ vbsrl.v vr27, vr11, 8 ++ ++ fst.d f4, t4, 0 ++ fstx.d f20, t4, a1 ++ fstx.d f5, t4, t0 ++ fstx.d f21, t4, t3 ++ add.d t4, t4, t1 ++ fst.d f6, t4, 0 ++ fstx.d f22, t4, a1 ++ fstx.d f7, t4, t0 ++ fstx.d f23, t4, t3 ++ add.d t4, t4, t1 ++ fst.d f8, t4, 0 ++ fstx.d f24, t4, a1 ++ fstx.d f9, t4, t0 ++ fstx.d f25, t4, t3 ++ add.d t4, t4, t1 ++ fst.d f10, t4, 0 ++ fstx.d f26, t4, a1 ++ fstx.d f11, t4, t0 ++ fstx.d f27, t4, t3 ++ ++.END_LUMA_8: ++ fld.d f24, sp, 0 ++ fld.d f25, sp, 8 ++ fld.d f26, sp, 16 ++ fld.d f27, sp, 24 ++ fld.d f28, sp, 32 ++ fld.d f29, sp, 40 ++ fld.d f30, sp, 48 ++ fld.d f31, sp, 56 ++ addi.d sp, sp, 64 ++endfunc ++ ++function ff_h264_v_lpf_luma_8_lsx ++ slli.d t0, a1, 1 //img_width_2x ++ la.local t4, vec_shuf ++ vldrepl.w vr0, a4, 0 //tmp_vec0 ++ vld vr1, t4, 0 //tc_vec ++ add.d t1, t0, a1 //img_width_3x ++ vshuf.b vr1, vr0, vr0, vr1 //tc_vec ++ addi.d sp, sp, -24 ++ fst.d f24, sp, 0 ++ fst.d f25, sp, 8 ++ fst.d f26, sp, 16 ++ vslti.b vr2, vr1, 0 ++ vxori.b vr2, vr2, 255 ++ vandi.b vr2, vr2, 1 //bs_vec ++ vsetnez.v $fcc0, vr2 ++ bceqz $fcc0, .END_V_LUMA_8 ++ sub.d t2, a0, t1 //data - img_width_3x ++ vreplgr2vr.b vr4, a2 //alpha ++ vreplgr2vr.b vr5, a3 //beta ++ vldi vr0, 0 //zero ++ vld vr10, t2, 0 //p2_org ++ vldx vr11, t2, a1 //p1_org ++ vldx vr12, t2, t0 //p0_org ++ vld vr13, a0, 0 //q0_org ++ vldx vr14, a0, a1 //q1_org ++ ++ vslt.bu vr0, vr0, vr2 //is_bs_greater_than0 ++ vabsd.bu vr16, vr11, vr12 //p1_asub_p0 ++ vabsd.bu vr15, vr12, vr13 //p0_asub_q0 ++ vabsd.bu vr17, vr14, vr13 //q1_asub_q0 ++ ++ vslt.bu vr6, vr15, vr4 //is_less_than_alpha ++ vslt.bu vr7, vr16, vr5 //is_less_than_beta ++ vand.v vr8, vr6, vr7 //is_less_than ++ vslt.bu vr7, vr17, vr5 //is_less_than_beta ++ vand.v vr8, vr7, vr8 ++ vand.v vr8, vr8, vr0 //is_less_than ++ ++ vsetnez.v $fcc0, vr8 ++ bceqz $fcc0, .END_V_LUMA_8 ++ vldx vr15, a0, t0 //q2_org ++ vneg.b vr0, vr1 //neg_tc_h ++ vsllwil.h.b vr18, vr1, 0 //tc_h.0 ++ vexth.h.b vr19, vr1 //tc_h.1 ++ vsllwil.h.b vr9, vr0, 0 //neg_tc_h.0 ++ vexth.h.b vr2, vr0 //neg_tc_h.1 ++ ++ vsllwil.hu.bu vr16, vr11, 0 //p1_org_h.0 ++ vexth.hu.bu vr17, vr11 //p1_org_h.1 ++ vsllwil.hu.bu vr20, vr12, 0 //p0_org_h.0 ++ vexth.hu.bu vr21, vr12 //p0_org_h.1 ++ vsllwil.hu.bu vr22, vr13, 0 //q0_org_h.0 ++ vexth.hu.bu vr23, vr13 //q0_org_h.1 ++ ++ vabsd.bu vr0, vr10, vr12 //p2_asub_p0 ++ vslt.bu vr7, vr0, vr5 //is_less_than_beta ++ vand.v vr7, vr7, vr8 //is_less_than_beta ++ ++ vsetnez.v $fcc0, vr8 ++ bceqz $fcc0, .END_V_LESS_BETA ++ vsllwil.hu.bu vr3, vr10, 0 //p2_org_h.0 ++ vexth.hu.bu vr4, vr10 //p2_org_h.1 ++ AVC_LPF_P1_OR_Q1 vr20, vr22, vr16, vr3, vr9, vr18, vr24, vr0, vr26 ++ AVC_LPF_P1_OR_Q1 vr21, vr23, vr17, vr4, vr2, vr19, vr25, vr0, vr26 ++ vpickev.b vr24, vr25, vr24 ++ vbitsel.v vr24, vr11, vr24, vr7 ++ addi.d t3, t2, 16 ++ vstx vr24, t2, a1 ++ vandi.b vr7, vr7, 1 ++ vadd.b vr1, vr7, vr1 ++.END_V_LESS_BETA: ++ vabsd.bu vr0, vr15, vr13 //q2_asub_q0 ++ vslt.bu vr7, vr0, vr5 //is_less_than_beta ++ vand.v vr7, vr7, vr8 //is_less_than_beta ++ vsllwil.hu.bu vr3, vr14, 0 //q1_org_h.0 ++ vexth.hu.bu vr4, vr14 //q1_org_h.1 ++ ++ vsetnez.v $fcc0, vr7 ++ bceqz $fcc0, .END_V_LESS_BETA_SEC ++ vsllwil.hu.bu vr11, vr15, 0 //q2_org_h.0 ++ vexth.hu.bu vr15, vr15 //q2_org_h.1 ++ AVC_LPF_P1_OR_Q1 vr20, vr22, vr3, vr11, vr9, vr18, vr24, vr0, vr26 ++ AVC_LPF_P1_OR_Q1 vr21, vr23, vr4, vr15, vr2, vr19, vr25, vr0, vr26 ++ vpickev.b vr24, vr25, vr24 ++ vbitsel.v vr24, vr14, vr24, vr7 ++ vstx vr24, a0, a1 ++ vandi.b vr7, vr7, 1 ++ vadd.b vr1, vr1, vr7 ++.END_V_LESS_BETA_SEC: ++ vneg.b vr0, vr1 ++ vsllwil.h.b vr9, vr0, 0 //neg_thresh_h.0 ++ vexth.h.b vr2, vr0 //neg_thresh_h.1 ++ vsllwil.hu.bu vr18, vr1, 0 //tc_h.0 ++ vexth.hu.bu vr19, vr1 //tc_h.1 ++ AVC_LPF_P0Q0 vr22, vr20, vr16, vr3, vr9, vr18, vr11, vr15, vr0, vr26 ++ AVC_LPF_P0Q0 vr23, vr21, vr17, vr4, vr2, vr19, vr10, vr14, vr0, vr26 ++ vpickev.b vr11, vr10, vr11 //p0_h ++ vpickev.b vr15, vr14, vr15 //q0_h ++ vbitsel.v vr11, vr12, vr11, vr8 //p0_h ++ vbitsel.v vr15, vr13, vr15, vr8 //q0_h ++ vstx vr11, t2, t0 ++ vst vr15, a0, 0 ++.END_V_LUMA_8: ++ fld.d f24, sp, 0 ++ fld.d f25, sp, 8 ++ fld.d f26, sp, 16 ++ addi.d sp, sp, 24 ++endfunc ++ ++const chroma_shuf ++.byte 0, 0, 1, 1, 2, 2, 3, 3, 0, 0, 1, 1, 2, 2, 3, 3 ++endconst ++ ++function ff_h264_h_lpf_chroma_8_lsx ++ slli.d t0, a1, 1 //img_width_2x ++ slli.d t1, a1, 2 //img_width_4x ++ la.local t4, chroma_shuf ++ add.d t2, t0, a1 //img_width_3x ++ vldrepl.w vr0, a4, 0 //tmp_vec0 ++ vld vr1, t4, 0 //tc_vec ++ vshuf.b vr1, vr0, vr0, vr1 //tc_vec ++ vslti.b vr2, vr1, 0 ++ vxori.b vr2, vr2, 255 ++ vandi.b vr2, vr2, 1 //bs_vec ++ vsetnez.v $fcc0, vr2 ++ bceqz $fcc0, .END_CHROMA_8 ++ vldi vr0, 0 ++ addi.d t4, a0, -2 ++ vslt.bu vr3, vr0, vr2 //is_bs_greater_than0 ++ add.d t5, t4, t1 ++ vld vr4, t4, 0 //row0 ++ vldx vr5, t4, a1 //row1 ++ vldx vr6, t4, t0 //row2 ++ vldx vr7, t4, t2 //row3 ++ vld vr8, t5, 0 //row4 ++ vldx vr9, t5, a1 //row5 ++ vldx vr10, t5, t0 //row6 ++ vldx vr11, t5, t2 //row7 ++ vilvl.b vr12, vr6, vr4 //p1_org ++ vilvl.b vr13, vr7, vr5 //p0_org ++ vilvl.b vr14, vr10, vr8 //q0_org ++ vilvl.b vr15, vr11, vr9 //q1_org ++ vilvl.b vr4, vr13, vr12 //row0 ++ vilvl.b vr5, vr15, vr14 //row1 ++ vilvl.w vr6, vr5, vr4 //row2 ++ vilvh.w vr7, vr5, vr4 //row3 ++ vilvl.d vr12, vr6, vr6 //p1_org ++ vilvh.d vr13, vr6, vr6 //p0_org ++ vilvl.d vr14, vr7, vr7 //q0_org ++ vilvh.d vr15, vr7, vr7 //q1_org ++ ++ vabsd.bu vr20, vr13, vr14 //p0_asub_q0 ++ vabsd.bu vr21, vr12, vr13 //p1_asub_p0 ++ vabsd.bu vr22, vr15, vr14 //q1_asub_q0 ++ ++ vreplgr2vr.b vr4, a2 //alpha ++ vreplgr2vr.b vr5, a3 //beta ++ ++ vslt.bu vr6, vr20, vr4 //is_less_than_alpha ++ vslt.bu vr7, vr21, vr5 //is_less_than_beta ++ vand.v vr8, vr6, vr7 //is_less_than ++ vslt.bu vr7, vr22, vr5 //is_less_than_beta ++ vand.v vr8, vr7, vr8 //is_less_than ++ vand.v vr8, vr8, vr3 //is_less_than ++ vsetnez.v $fcc0, vr8 ++ bceqz $fcc0, .END_CHROMA_8 ++ ++ vneg.b vr9, vr1 //neg_tc_h ++ vexth.hu.bu vr3, vr12 //p1_org_h ++ vexth.hu.bu vr4, vr13 //p0_org_h.1 ++ vexth.hu.bu vr5, vr14 //q0_org_h.1 ++ vexth.hu.bu vr6, vr15 //q1_org_h.1 ++ ++ vexth.hu.bu vr18, vr1 //tc_h.1 ++ vexth.h.b vr2, vr9 //neg_tc_h.1 ++ ++ AVC_LPF_P0Q0 vr5, vr4, vr3, vr6, vr2, vr18, vr10, vr11, vr16, vr17 ++ vpickev.b vr10, vr10, vr10 //p0_h ++ vpickev.b vr11, vr11, vr11 //q0_h ++ vbitsel.v vr13, vr13, vr10, vr8 ++ vbitsel.v vr14, vr14, vr11, vr8 ++ vilvl.b vr15, vr14, vr13 ++ addi.d t4, t4, 1 ++ add.d t5, t4, a1 ++ add.d t6, t4, t0 ++ add.d t7, t4, t2 ++ vstelm.h vr15, t4, 0, 0 ++ vstelm.h vr15, t5, 0, 1 ++ vstelm.h vr15, t6, 0, 2 ++ vstelm.h vr15, t7, 0, 3 ++ add.d t4, t4, t1 ++ add.d t5, t4, a1 ++ add.d t6, t4, t0 ++ add.d t7, t4, t2 ++ vstelm.h vr15, t4, 0, 4 ++ vstelm.h vr15, t5, 0, 5 ++ vstelm.h vr15, t6, 0, 6 ++ vstelm.h vr15, t7, 0, 7 ++.END_CHROMA_8: ++endfunc ++ ++function ff_h264_v_lpf_chroma_8_lsx ++ slli.d t0, a1, 1 //img_width_2x ++ la.local t4, chroma_shuf ++ vldrepl.w vr0, a4, 0 //tmp_vec0 ++ vld vr1, t4, 0 //tc_vec ++ vshuf.b vr1, vr0, vr0, vr1 //tc_vec ++ vslti.b vr2, vr1, 0 ++ vxori.b vr2, vr2, 255 ++ vandi.b vr2, vr2, 1 //bs_vec ++ vsetnez.v $fcc0, vr2 ++ bceqz $fcc0, .END_CHROMA_V_8 ++ vldi vr0, 0 ++ sub.d t4, a0, t0 ++ vslt.bu vr3, vr0, vr2 //is_bs_greater_than0 ++ vld vr12, t4, 0 //p1_org ++ vldx vr13, t4, a1 //p0_org ++ vld vr14, a0, 0 //q0_org ++ vldx vr15, a0, a1 //q1_org ++ ++ vabsd.bu vr20, vr13, vr14 //p0_asub_q0 ++ vabsd.bu vr21, vr12, vr13 //p1_asub_p0 ++ vabsd.bu vr22, vr15, vr14 //q1_asub_q0 ++ ++ vreplgr2vr.b vr4, a2 //alpha ++ vreplgr2vr.b vr5, a3 //beta ++ ++ vslt.bu vr6, vr20, vr4 //is_less_than_alpha ++ vslt.bu vr7, vr21, vr5 //is_less_than_beta ++ vand.v vr8, vr6, vr7 //is_less_than ++ vslt.bu vr7, vr22, vr5 //is_less_than_beta ++ vand.v vr8, vr7, vr8 //is_less_than ++ vand.v vr8, vr8, vr3 //is_less_than ++ vsetnez.v $fcc0, vr8 ++ bceqz $fcc0, .END_CHROMA_V_8 ++ ++ vneg.b vr9, vr1 //neg_tc_h ++ vsllwil.hu.bu vr3, vr12, 0 //p1_org_h ++ vsllwil.hu.bu vr4, vr13, 0 //p0_org_h.1 ++ vsllwil.hu.bu vr5, vr14, 0 //q0_org_h.1 ++ vsllwil.hu.bu vr6, vr15, 0 //q1_org_h.1 ++ ++ vexth.hu.bu vr18, vr1 //tc_h.1 ++ vexth.h.b vr2, vr9 //neg_tc_h.1 ++ ++ AVC_LPF_P0Q0 vr5, vr4, vr3, vr6, vr2, vr18, vr10, vr11, vr16, vr17 ++ vpickev.b vr10, vr10, vr10 //p0_h ++ vpickev.b vr11, vr11, vr11 //q0_h ++ vbitsel.v vr10, vr13, vr10, vr8 ++ vbitsel.v vr11, vr14, vr11, vr8 ++ fstx.d f10, t4, a1 ++ fst.d f11, a0, 0 ++.END_CHROMA_V_8: ++endfunc ++ ++.macro AVC_LPF_P0P1P2_OR_Q0Q1Q2 _in0, _in1, _in2, _in3, _in4, _in5 \ ++ _out0, _out1, _out2, _tmp0, _const3 ++ vadd.h \_tmp0, \_in1, \_in2 ++ vadd.h \_tmp0, \_tmp0, \_in3 ++ vslli.h \_out2, \_in0, 1 ++ vslli.h \_out0, \_tmp0, 1 ++ vadd.h \_out0, \_out0, \_in4 ++ vadd.h \_out1, \_in4, \_tmp0 ++ vadd.h \_out0, \_out0, \_in5 ++ vmadd.h \_out2, \_in4, \_const3 ++ vsrar.h \_out0, \_out0, \_const3 ++ vadd.h \_out2, \_out2, \_tmp0 ++ vsrari.h \_out1, \_out1, 2 ++ vsrar.h \_out2, \_out2, \_const3 ++.endm ++ ++.macro AVC_LPF_P0_OR_Q0 _in0, _in1, _in2, _out0, _tmp0 ++ vslli.h \_tmp0, \_in2, 1 ++ vadd.h \_out0, \_in0, \_in1 ++ vadd.h \_out0, \_out0, \_tmp0 ++ vsrari.h \_out0, \_out0, 2 ++.endm ++ ++////LSX optimization is enough for this function. ++function ff_h264_h_lpf_luma_intra_8_lsx ++ slli.d t0, a1, 1 //img_width_2x ++ slli.d t1, a1, 2 //img_width_4x ++ addi.d t4, a0, -4 //src ++ addi.d sp, sp, -64 ++ fst.d f24, sp, 0 ++ fst.d f25, sp, 8 ++ fst.d f26, sp, 16 ++ fst.d f27, sp, 24 ++ fst.d f28, sp, 32 ++ fst.d f29, sp, 40 ++ fst.d f30, sp, 48 ++ fst.d f31, sp, 56 ++ add.d t2, t0, a1 //img_width_3x ++ add.d t5, t4, t1 ++ vld vr0, t4, 0 //row0 ++ vldx vr1, t4, a1 //row1 ++ vldx vr2, t4, t0 //row2 ++ vldx vr3, t4, t2 //row3 ++ add.d t6, t5, t1 ++ vld vr4, t5, 0 //row4 ++ vldx vr5, t5, a1 //row5 ++ vldx vr6, t5, t0 //row6 ++ vldx vr7, t5, t2 //row7 ++ add.d t7, t6, t1 ++ vld vr8, t6, 0 //row8 ++ vldx vr9, t6, a1 //row9 ++ vldx vr10, t6, t0 //row10 ++ vldx vr11, t6, t2 //row11 ++ vld vr12, t7, 0 //row12 ++ vldx vr13, t7, a1 //row13 ++ vldx vr14, t7, t0 //row14 ++ vldx vr15, t7, t2 //row15 ++ LSX_TRANSPOSE16X8_B vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ ++ vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, \ ++ vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ ++ vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 ++ // vr0: p3_org, vr1: p2_org, vr2: p1_org, vr3: p0_org ++ // vr4: q0_org, vr5: q1_org, vr6: q2_org, vr7: q3_org ++ ++ vreplgr2vr.b vr16, a2 //alpha_in ++ vreplgr2vr.b vr17, a3 //beta_in ++ vabsd.bu vr10, vr3, vr4 //p0_asub_q0 ++ vabsd.bu vr11, vr2, vr3 //p1_asub_p0 ++ vabsd.bu vr12, vr5, vr4 //q1_asub_q0 ++ ++ vslt.bu vr8, vr10, vr16 //is_less_than_alpha ++ vslt.bu vr9, vr11, vr17 //is_less_than_beta ++ vand.v vr18, vr8, vr9 //is_less_than ++ vslt.bu vr9, vr12, vr17 //is_less_than_beta ++ vand.v vr18, vr18, vr9 //is_less_than ++ ++ vsetnez.v $fcc0, vr18 ++ bceqz $fcc0, .END_H_INTRA_8 ++ vsrli.b vr16, vr16, 2 //less_alpha_shift2_add2 ++ vaddi.bu vr16, vr16, 2 ++ vslt.bu vr16, vr10, vr16 ++ vsllwil.hu.bu vr10, vr2, 0 //p1_org_h.0 ++ vexth.hu.bu vr11, vr2 //p1_org_h.1 ++ vsllwil.hu.bu vr12, vr3, 0 //p0_org_h.0 ++ vexth.hu.bu vr13, vr3 //p0_org_h.1 ++ ++ vsllwil.hu.bu vr14, vr4, 0 //q0_org_h.0 ++ vexth.hu.bu vr15, vr4 //q0_org_h.1 ++ vsllwil.hu.bu vr19, vr5, 0 //q1_org_h.0 ++ vexth.hu.bu vr20, vr5 //q1_org_h.1 ++ ++ vabsd.bu vr21, vr1, vr3 //p2_asub_p0 ++ vslt.bu vr9, vr21, vr17 //is_less_than_beta ++ vand.v vr9, vr9, vr16 ++ vxori.b vr22, vr9, 0xff //negate_is_less_than_beta ++ vand.v vr9, vr9, vr18 ++ vand.v vr22, vr22, vr18 ++ ++ vsetnez.v $fcc0, vr9 ++ bceqz $fcc0, .END_H_INTRA_LESS_BETA ++ vsllwil.hu.bu vr23, vr1, 0 //p2_org_h.0 ++ vexth.hu.bu vr24, vr1 //p2_org_h.1 ++ vsllwil.hu.bu vr25, vr0, 0 //p3_org_h.0 ++ vexth.hu.bu vr26, vr0 //p3_org_h.1 ++ vldi vr27, 0x403 ++ ++ AVC_LPF_P0P1P2_OR_Q0Q1Q2 vr25, vr12, vr14, vr10, vr23, vr19, vr28, vr29, vr30, vr31, vr27 ++ //vr28: p0_h.0 vr29: p1_h.0 vr30: p2_h.0 ++ AVC_LPF_P0P1P2_OR_Q0Q1Q2 vr26, vr13, vr15, vr11, vr24, vr20, vr23, vr25, vr21, vr31, vr27 ++ //vr23: p0_h.1 vr25: p1_h.1 vr21: p2_h.1 ++ vpickev.b vr28, vr23, vr28 //p0_h ++ vpickev.b vr29, vr25, vr29 //p1_h ++ vpickev.b vr30, vr21, vr30 //p2_h ++ vbitsel.v vr3, vr3, vr28, vr9 ++ vbitsel.v vr2, vr2, vr29, vr9 ++ vbitsel.v vr1, vr1, vr30, vr9 ++.END_H_INTRA_LESS_BETA: ++ AVC_LPF_P0_OR_Q0 vr12, vr19, vr10, vr23, vr25 ++ AVC_LPF_P0_OR_Q0 vr13, vr20, vr11, vr24, vr25 ++ //vr23: p0_h.0 vr24: p0_h.1 ++ vpickev.b vr23, vr24, vr23 ++ vbitsel.v vr3, vr3, vr23, vr22 ++ ++ vabsd.bu vr21, vr6, vr4 //q2_asub_q0 ++ vslt.bu vr9, vr21, vr17 //is_less_than_beta ++ vand.v vr9, vr9, vr16 ++ vxori.b vr22, vr9, 0xff //negate_is_less_than_beta ++ vand.v vr9, vr9, vr18 ++ vand.v vr22, vr22, vr18 ++ ++ vsetnez.v $fcc0, vr9 ++ bceqz $fcc0, .END_H_INTRA_LESS_BETA_SEC ++ vsllwil.hu.bu vr23, vr6, 0 //q2_org_h.0 ++ vexth.hu.bu vr24, vr6 //q2_org_h.1 ++ vsllwil.hu.bu vr25, vr7, 0 //q3_org_h.0 ++ vexth.hu.bu vr26, vr7 //q3_org_h.1 ++ vldi vr27, 0x403 ++ ++ AVC_LPF_P0P1P2_OR_Q0Q1Q2 vr25, vr14, vr12, vr19, vr23, vr10, vr28, vr29, vr30, vr31, vr27 ++ AVC_LPF_P0P1P2_OR_Q0Q1Q2 vr26, vr15, vr13, vr20, vr24, vr11, vr23, vr25, vr21, vr31, vr27 ++ vpickev.b vr28, vr23, vr28 //q0_h ++ vpickev.b vr29, vr25, vr29 //q1_h ++ vpickev.b vr30, vr21, vr30 //q2_h ++ vbitsel.v vr4, vr4, vr28, vr9 ++ vbitsel.v vr5, vr5, vr29, vr9 ++ vbitsel.v vr6, vr6, vr30, vr9 ++.END_H_INTRA_LESS_BETA_SEC: ++ AVC_LPF_P0_OR_Q0 vr14, vr10, vr19, vr23, vr25 ++ AVC_LPF_P0_OR_Q0 vr15, vr11, vr20, vr24, vr25 ++ vpickev.b vr23, vr24, vr23 ++ vbitsel.v vr4, vr4, vr23, vr22 ++ ++ vilvl.b vr14, vr2, vr0 // row0.0 ++ vilvl.b vr15, vr6, vr4 // row0.1 ++ vilvl.b vr16, vr3, vr1 // row2.0 ++ vilvl.b vr17, vr7, vr5 // row2.1 ++ ++ vilvh.b vr18, vr2, vr0 // row1.0 ++ vilvh.b vr19, vr6, vr4 // row1.1 ++ vilvh.b vr20, vr3, vr1 // row3.0 ++ vilvh.b vr21, vr7, vr5 // row3.1 ++ ++ vilvl.b vr2, vr16, vr14 // row4.0 ++ vilvl.b vr3, vr17, vr15 // row4.1 ++ vilvl.b vr4, vr20, vr18 // row6.0 ++ vilvl.b vr5, vr21, vr19 // row6.1 ++ ++ vilvh.b vr6, vr16, vr14 // row5.0 ++ vilvh.b vr7, vr17, vr15 // row5.1 ++ vilvh.b vr8, vr20, vr18 // row7.0 ++ vilvh.b vr9, vr21, vr19 // row7.1 ++ ++ vilvl.w vr14, vr3, vr2 // row4: 0, 4, 1, 5 ++ vilvh.w vr15, vr3, vr2 // row4: 2, 6, 3, 7 ++ vilvl.w vr16, vr7, vr6 // row5: 0, 4, 1, 5 ++ vilvh.w vr17, vr7, vr6 // row5: 2, 6, 3, 7 ++ ++ vilvl.w vr18, vr5, vr4 // row6: 0, 4, 1, 5 ++ vilvh.w vr19, vr5, vr4 // row6: 2, 6, 3, 7 ++ vilvl.w vr20, vr9, vr8 // row7: 0, 4, 1, 5 ++ vilvh.w vr21, vr9, vr8 // row7: 2, 6, 3, 7 ++ ++ vbsrl.v vr0, vr14, 8 ++ vbsrl.v vr1, vr15, 8 ++ vbsrl.v vr2, vr16, 8 ++ vbsrl.v vr3, vr17, 8 ++ ++ vbsrl.v vr4, vr18, 8 ++ vbsrl.v vr5, vr19, 8 ++ vbsrl.v vr6, vr20, 8 ++ vbsrl.v vr7, vr21, 8 ++ ++ fst.d f14, t4, 0 ++ fstx.d f0, t4, a1 ++ fstx.d f15, t4, t0 ++ fstx.d f1, t4, t2 ++ fst.d f16, t5, 0 ++ fstx.d f2, t5, a1 ++ fstx.d f17, t5, t0 ++ fstx.d f3, t5, t2 ++ fst.d f18, t6, 0 ++ fstx.d f4, t6, a1 ++ fstx.d f19, t6, t0 ++ fstx.d f5, t6, t2 ++ fst.d f20, t7, 0 ++ fstx.d f6, t7, a1 ++ fstx.d f21, t7, t0 ++ fstx.d f7, t7, t2 ++.END_H_INTRA_8: ++ fld.d f24, sp, 0 ++ fld.d f25, sp, 8 ++ fld.d f26, sp, 16 ++ fld.d f27, sp, 24 ++ fld.d f28, sp, 32 ++ fld.d f29, sp, 40 ++ fld.d f30, sp, 48 ++ fld.d f31, sp, 56 ++ addi.d sp, sp, 64 ++endfunc ++ ++//LSX optimization is enough for this function. ++function ff_h264_v_lpf_luma_intra_8_lsx ++ slli.d t0, a1, 1 //img_width_2x ++ add.d t1, t0, a1 //img_width_3x ++ addi.d sp, sp, -64 ++ fst.d f24, sp, 0 ++ fst.d f25, sp, 8 ++ fst.d f26, sp, 16 ++ fst.d f27, sp, 24 ++ fst.d f28, sp, 32 ++ fst.d f29, sp, 40 ++ fst.d f30, sp, 48 ++ fst.d f31, sp, 56 ++ sub.d t4, a0, t1 //src - img_width_3x ++ ++ vld vr0, a0, 0 //q0_org ++ vldx vr1, a0, a1 //q1_org ++ vldx vr2, t4, a1 //p1_org ++ vldx vr3, t4, t0 //p0_org ++ ++ vreplgr2vr.b vr4, a2 //alpha ++ vreplgr2vr.b vr5, a3 //beta ++ ++ vabsd.bu vr6, vr3, vr0 //p0_asub_q0 ++ vabsd.bu vr7, vr2, vr3 //p1_asub_p0 ++ vabsd.bu vr8, vr1, vr0 //q1_asub_q0 ++ ++ vslt.bu vr9, vr6, vr4 //is_less_than_alpha ++ vslt.bu vr10, vr7, vr5 //is_less_than_beta ++ vand.v vr11, vr9, vr10 //is_less_than ++ vslt.bu vr10, vr8, vr5 ++ vand.v vr11, vr10, vr11 ++ ++ vsetnez.v $fcc0, vr11 ++ bceqz $fcc0, .END_V_INTRA_8 ++ ++ vld vr12, t4, 0 //p2_org ++ vldx vr13, a0, t0 //q2_org ++ vsrli.b vr14, vr4, 2 //is_alpha_shift2_add2 ++ vsllwil.hu.bu vr15, vr2, 0 //p1_org_h.0 ++ vexth.hu.bu vr16, vr2 //p1_org_h.1 ++ vaddi.bu vr14, vr14, 2 ++ vsllwil.hu.bu vr17, vr3, 0 //p0_org_h.0 ++ vexth.hu.bu vr18, vr3 //p0_org_h.1 ++ vslt.bu vr14, vr6, vr14 ++ vsllwil.hu.bu vr19, vr0, 0 //q0_org_h.0 ++ vexth.hu.bu vr20, vr0 //q0_org_h.1 ++ vsllwil.hu.bu vr21, vr1, 0 //q1_org_h.0 ++ vexth.hu.bu vr22, vr1 //q1_org_h.1 ++ ++ vabsd.bu vr23, vr12, vr3 //p2_asub_p0 ++ vslt.bu vr10, vr23, vr5 //is_less_than_beta ++ vand.v vr10, vr10, vr14 ++ vxori.b vr23, vr10, 0xff //negate_is_less_than_beta ++ vand.v vr10, vr10, vr11 ++ vand.v vr23, vr23, vr11 ++ ++ vsetnez.v $fcc0, vr10 ++ bceqz $fcc0, .END_V_INTRA_LESS_BETA ++ sub.d t5, t4, a1 ++ vld vr24, t5, 0 //p3_org ++ vsllwil.hu.bu vr26, vr12, 0 //p2_org_h.0 ++ vexth.hu.bu vr27, vr12 //p2_org_h.1 ++ vsllwil.hu.bu vr28, vr24, 0 //p3_org_h.0 ++ vexth.hu.bu vr29, vr24 //p3_org_h.1 ++ vldi vr4, 0x403 ++ ++ AVC_LPF_P0P1P2_OR_Q0Q1Q2 vr28, vr17, vr19, vr15, vr26, vr21, vr25, vr30, vr31, vr24, vr4 ++ AVC_LPF_P0P1P2_OR_Q0Q1Q2 vr29, vr18, vr20, vr16, vr27, vr22, vr6, vr7, vr8, vr24, vr4 ++ ++ vpickev.b vr25, vr6, vr25 //p0_h ++ vpickev.b vr30, vr7, vr30 //p1_h ++ vpickev.b vr31, vr8, vr31 //p2_h ++ ++ vbitsel.v vr3, vr3, vr25, vr10 ++ vbitsel.v vr2, vr2, vr30, vr10 ++ vbitsel.v vr12, vr12, vr31, vr10 ++ ++ vstx vr2, t4, a1 ++ vst vr12, t4, 0 ++.END_V_INTRA_LESS_BETA: ++ AVC_LPF_P0_OR_Q0 vr17, vr21, vr15, vr24, vr30 ++ AVC_LPF_P0_OR_Q0 vr18, vr22, vr16, vr25, vr30 ++ vpickev.b vr24, vr25, vr24 ++ vbitsel.v vr3, vr3, vr24, vr23 ++ vstx vr3, t4, t0 ++ ++ vabsd.bu vr23, vr13, vr0 //q2_asub_q0 ++ vslt.bu vr10, vr23, vr5 //is_less_than_beta ++ vand.v vr10, vr10, vr14 ++ vxori.b vr23, vr10, 0xff //negate_is_less_than_beta ++ vand.v vr10, vr10, vr11 ++ vand.v vr23, vr23, vr11 ++ ++ vsetnez.v $fcc0, vr10 ++ bceqz $fcc0, .END_V_INTRA_LESS_BETA_SEC ++ vldx vr24, a0, t1 //q3_org ++ ++ vsllwil.hu.bu vr26, vr13, 0 //q2_org_h.0 ++ vexth.hu.bu vr27, vr13 //q2_org_h.1 ++ vsllwil.hu.bu vr28, vr24, 0 //q3_org_h.0 ++ vexth.hu.bu vr29, vr24 //q3_org_h.1 ++ vldi vr4, 0x403 ++ ++ AVC_LPF_P0P1P2_OR_Q0Q1Q2 vr28, vr19, vr17, vr21, vr26, vr15, vr25, vr30, vr31, vr24, vr4 ++ AVC_LPF_P0P1P2_OR_Q0Q1Q2 vr29, vr20, vr18, vr22, vr27, vr16, vr6, vr7, vr8, vr24, vr4 ++ ++ vpickev.b vr25, vr6, vr25 ++ vpickev.b vr30, vr7, vr30 ++ vpickev.b vr31, vr8, vr31 ++ ++ vbitsel.v vr0, vr0, vr25, vr10 ++ vbitsel.v vr1, vr1, vr30, vr10 ++ vbitsel.v vr13, vr13, vr31, vr10 ++ vstx vr1, a0, a1 ++ vstx vr13, a0, t0 ++.END_V_INTRA_LESS_BETA_SEC: ++ AVC_LPF_P0_OR_Q0 vr19, vr15, vr21, vr24, vr30 ++ AVC_LPF_P0_OR_Q0 vr20, vr16, vr22, vr25, vr30 ++ vpickev.b vr24, vr25, vr24 ++ vbitsel.v vr0, vr0, vr24, vr23 ++ vst vr0, a0, 0 ++.END_V_INTRA_8: ++ fld.d f24, sp, 0 ++ fld.d f25, sp, 8 ++ fld.d f26, sp, 16 ++ fld.d f27, sp, 24 ++ fld.d f28, sp, 32 ++ fld.d f29, sp, 40 ++ fld.d f30, sp, 48 ++ fld.d f31, sp, 56 ++ addi.d sp, sp, 64 ++endfunc ++ ++function ff_h264_h_lpf_chroma_intra_8_lsx ++ addi.d t4, a0, -2 ++ slli.d t0, a1, 1 //img_2x ++ slli.d t2, a1, 2 //img_4x ++ add.d t1, t0, a1 //img_3x ++ ++ add.d t5, t4, t2 ++ fld.s f0, t4, 0 //row0 ++ fldx.s f1, t4, a1 //row1 ++ fldx.s f2, t4, t0 //row2 ++ fldx.s f3, t4, t1 //row3 ++ fld.s f4, t5, 0 //row4 ++ fldx.s f5, t5, a1 //row5 ++ fldx.s f6, t5, t0 //row6 ++ fldx.s f7, t5, t1 //row7 ++ ++ vilvl.b vr8, vr2, vr0 //p1_org ++ vilvl.b vr9, vr3, vr1 //p0_org ++ vilvl.b vr10, vr6, vr4 //q0_org ++ vilvl.b vr11, vr7, vr5 //q1_org ++ ++ vilvl.b vr0, vr9, vr8 ++ vilvl.b vr1, vr11, vr10 ++ vilvl.w vr2, vr1, vr0 ++ vilvh.w vr3, vr1, vr0 ++ ++ vilvl.d vr8, vr2, vr2 //p1_org ++ vilvh.d vr9, vr2, vr2 //p0_org ++ vilvl.d vr10, vr3, vr3 //q0_org ++ vilvh.d vr11, vr3, vr3 //q1_org ++ ++ vreplgr2vr.b vr0, a2 //alpha ++ vreplgr2vr.b vr1, a3 //beta ++ ++ vabsd.bu vr2, vr9, vr10 //p0_asub_q0 ++ vabsd.bu vr3, vr8, vr9 //p1_asub_p0 ++ vabsd.bu vr4, vr11, vr10 //q1_asub_q0 ++ ++ vslt.bu vr5, vr2, vr0 //is_less_than_alpha ++ vslt.bu vr6, vr3, vr1 //is_less_than_beta ++ vand.v vr7, vr5, vr6 //is_less_than ++ vslt.bu vr6, vr4, vr1 ++ vand.v vr7, vr7, vr6 ++ ++ vsetnez.v $fcc0, vr7 ++ bceqz $fcc0, .END_H_CHROMA_INTRA_8 ++ ++ vexth.hu.bu vr12, vr8 //p1_org_h ++ vexth.hu.bu vr13, vr9 //p0_org_h ++ vexth.hu.bu vr14, vr10 //q0_org_h ++ vexth.hu.bu vr15, vr11 //q1_org_h ++ ++ AVC_LPF_P0_OR_Q0 vr13, vr15, vr12, vr16, vr18 ++ AVC_LPF_P0_OR_Q0 vr14, vr12, vr15, vr17, vr18 ++ ++ vpickev.b vr18, vr16, vr16 ++ vpickev.b vr19, vr17, vr17 ++ vbitsel.v vr9, vr9, vr18, vr7 ++ vbitsel.v vr10, vr10, vr19, vr7 ++.END_H_CHROMA_INTRA_8: ++ vilvl.b vr11, vr10, vr9 ++ addi.d t4, t4, 1 ++ vstelm.h vr11, t4, 0, 0 ++ add.d t4, t4, a1 ++ vstelm.h vr11, t4, 0, 1 ++ add.d t4, t4, a1 ++ vstelm.h vr11, t4, 0, 2 ++ add.d t4, t4, a1 ++ vstelm.h vr11, t4, 0, 3 ++ add.d t4, t4, a1 ++ vstelm.h vr11, t4, 0, 4 ++ add.d t4, t4, a1 ++ vstelm.h vr11, t4, 0, 5 ++ add.d t4, t4, a1 ++ vstelm.h vr11, t4, 0, 6 ++ add.d t4, t4, a1 ++ vstelm.h vr11, t4, 0, 7 ++endfunc ++ ++function ff_h264_v_lpf_chroma_intra_8_lsx ++ slli.d t0, a1, 1 //img_width_2x ++ sub.d t2, a0, a1 ++ sub.d t1, a0, t0 //data - img_width_2x ++ ++ vreplgr2vr.b vr0, a2 ++ vreplgr2vr.b vr1, a3 ++ ++ vld vr2, t1, 0 //p1_org ++ vldx vr3, t1, a1 //p0_org ++ vld vr4, a0, 0 //q0_org ++ vldx vr5, a0, a1 //q1_org ++ ++ vabsd.bu vr6, vr3, vr4 //p0_asub_q0 ++ vabsd.bu vr7, vr2, vr3 //p1_asub_p0 ++ vabsd.bu vr8, vr5, vr4 //q1_asub_q0 ++ ++ vslt.bu vr9, vr6, vr0 //is_less_than_alpha ++ vslt.bu vr10, vr7, vr1 //is_less_than_beta ++ vand.v vr11, vr9, vr10 //is_less_than ++ vslt.bu vr10, vr8, vr1 ++ vand.v vr11, vr10, vr11 ++ ++ vsetnez.v $fcc0, vr11 ++ bceqz $fcc0, .END_V_CHROMA_INTRA_8 ++ ++ vsllwil.hu.bu vr6, vr2, 0 //p1_org_h.0 ++ vsllwil.hu.bu vr8, vr3, 0 //p0_org_h.0 ++ vsllwil.hu.bu vr13, vr4, 0 //q0_org_h.0 ++ vsllwil.hu.bu vr15, vr5, 0 //q1_org_h.0 ++ ++ AVC_LPF_P0_OR_Q0 vr8, vr15, vr6, vr17, vr23 ++ AVC_LPF_P0_OR_Q0 vr13, vr6, vr15, vr18, vr23 ++ ++ vpickev.b vr19, vr17, vr17 ++ vpickev.b vr20, vr18, vr18 ++ vbitsel.v vr3, vr3, vr19, vr11 ++ vbitsel.v vr4, vr4, vr20, vr11 ++ ++ vstelm.d vr3, t2, 0, 0 ++ vstelm.d vr4, a0, 0, 0 ++.END_V_CHROMA_INTRA_8: ++endfunc ++ ++function ff_biweight_h264_pixels16_8_lsx ++ slli.d t0, a2, 1 ++ slli.d t2, a2, 2 ++ add.d t1, t0, a2 ++ addi.d a7, a7, 1 ++ ori a7, a7, 1 ++ sll.d a7, a7, a4 ++ addi.d a4, a4, 1 ++ ++ vreplgr2vr.b vr0, a6 //tmp0 ++ vreplgr2vr.b vr1, a5 //tmp1 ++ vreplgr2vr.h vr8, a7 //offset ++ vreplgr2vr.h vr9, a4 //denom ++ vilvh.b vr20, vr1, vr0 //wgt ++ ++ add.d t4, a1, t2 ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ vldx vr2, a1, t0 ++ vldx vr3, a1, t1 ++ vld vr4, t4, 0 ++ vldx vr5, t4, a2 ++ vldx vr6, t4, t0 ++ vldx vr7, t4, t1 ++ ++ add.d t5, a0, t2 ++ vld vr10, a0, 0 ++ vldx vr11, a0, a2 ++ vldx vr12, a0, t0 ++ vldx vr13, a0, t1 ++ vld vr14, t5, 0 ++ vldx vr15, t5, a2 ++ vldx vr16, t5, t0 ++ vldx vr17, t5, t1 ++ ++ vilvl.b vr18, vr10, vr0 ++ vilvl.b vr19, vr11, vr1 ++ vilvl.b vr21, vr12, vr2 ++ vilvl.b vr22, vr13, vr3 ++ vilvh.b vr0, vr10, vr0 ++ vilvh.b vr1, vr11, vr1 ++ vilvh.b vr2, vr12, vr2 ++ vilvh.b vr3, vr13, vr3 ++ ++ vilvl.b vr10, vr14, vr4 ++ vilvl.b vr11, vr15, vr5 ++ vilvl.b vr12, vr16, vr6 ++ vilvl.b vr13, vr17, vr7 ++ vilvh.b vr14, vr14, vr4 ++ vilvh.b vr15, vr15, vr5 ++ vilvh.b vr16, vr16, vr6 ++ vilvh.b vr17, vr17, vr7 ++ ++ vmov vr4, vr8 ++ vmov vr5, vr8 ++ vmov vr6, vr8 ++ vmov vr7, vr8 ++ vmaddwev.h.bu.b vr4, vr18, vr20 ++ vmaddwev.h.bu.b vr5, vr19, vr20 ++ vmaddwev.h.bu.b vr6, vr21, vr20 ++ vmaddwev.h.bu.b vr7, vr22, vr20 ++ vmaddwod.h.bu.b vr4, vr18, vr20 ++ vmaddwod.h.bu.b vr5, vr19, vr20 ++ vmaddwod.h.bu.b vr6, vr21, vr20 ++ vmaddwod.h.bu.b vr7, vr22, vr20 ++ vmov vr18, vr8 ++ vmov vr19, vr8 ++ vmov vr21, vr8 ++ vmov vr22, vr8 ++ vmaddwev.h.bu.b vr18, vr0, vr20 ++ vmaddwev.h.bu.b vr19, vr1, vr20 ++ vmaddwev.h.bu.b vr21, vr2, vr20 ++ vmaddwev.h.bu.b vr22, vr3, vr20 ++ vmaddwod.h.bu.b vr18, vr0, vr20 ++ vmaddwod.h.bu.b vr19, vr1, vr20 ++ vmaddwod.h.bu.b vr21, vr2, vr20 ++ vmaddwod.h.bu.b vr22, vr3, vr20 ++ vmov vr0, vr8 ++ vmov vr1, vr8 ++ vmov vr2, vr8 ++ vmov vr3, vr8 ++ vmaddwev.h.bu.b vr0, vr10, vr20 ++ vmaddwev.h.bu.b vr1, vr11, vr20 ++ vmaddwev.h.bu.b vr2, vr12, vr20 ++ vmaddwev.h.bu.b vr3, vr13, vr20 ++ vmaddwod.h.bu.b vr0, vr10, vr20 ++ vmaddwod.h.bu.b vr1, vr11, vr20 ++ vmaddwod.h.bu.b vr2, vr12, vr20 ++ vmaddwod.h.bu.b vr3, vr13, vr20 ++ vmov vr10, vr8 ++ vmov vr11, vr8 ++ vmov vr12, vr8 ++ vmov vr13, vr8 ++ vmaddwev.h.bu.b vr10, vr14, vr20 ++ vmaddwev.h.bu.b vr11, vr15, vr20 ++ vmaddwev.h.bu.b vr12, vr16, vr20 ++ vmaddwev.h.bu.b vr13, vr17, vr20 ++ vmaddwod.h.bu.b vr10, vr14, vr20 ++ vmaddwod.h.bu.b vr11, vr15, vr20 ++ vmaddwod.h.bu.b vr12, vr16, vr20 ++ vmaddwod.h.bu.b vr13, vr17, vr20 ++ ++ vssran.bu.h vr4, vr4, vr9 ++ vssran.bu.h vr5, vr5, vr9 ++ vssran.bu.h vr6, vr6, vr9 ++ vssran.bu.h vr7, vr7, vr9 ++ vssran.bu.h vr18, vr18, vr9 ++ vssran.bu.h vr19, vr19, vr9 ++ vssran.bu.h vr21, vr21, vr9 ++ vssran.bu.h vr22, vr22, vr9 ++ vssran.bu.h vr0, vr0, vr9 ++ vssran.bu.h vr1, vr1, vr9 ++ vssran.bu.h vr2, vr2, vr9 ++ vssran.bu.h vr3, vr3, vr9 ++ vssran.bu.h vr10, vr10, vr9 ++ vssran.bu.h vr11, vr11, vr9 ++ vssran.bu.h vr12, vr12, vr9 ++ vssran.bu.h vr13, vr13, vr9 ++ ++ vilvl.d vr4, vr18, vr4 ++ vilvl.d vr5, vr19, vr5 ++ vilvl.d vr6, vr21, vr6 ++ vilvl.d vr7, vr22, vr7 ++ vilvl.d vr0, vr10, vr0 ++ vilvl.d vr1, vr11, vr1 ++ vilvl.d vr2, vr12, vr2 ++ vilvl.d vr3, vr13, vr3 ++ ++ vst vr4, a0, 0 ++ vstx vr5, a0, a2 ++ vstx vr6, a0, t0 ++ vstx vr7, a0, t1 ++ vst vr0, t5, 0 ++ vstx vr1, t5, a2 ++ vstx vr2, t5, t0 ++ vstx vr3, t5, t1 ++ ++ addi.d t6, zero, 16 ++ bne a3, t6, .END_BIWEIGHT_PIXELS16 ++ add.d t4, t4, t2 ++ add.d t5, t5, t2 ++ vld vr0, t4, 0 ++ vldx vr1, t4, a2 ++ vldx vr2, t4, t0 ++ vldx vr3, t4, t1 ++ add.d t6, t4, t2 ++ add.d t7, t5, t2 ++ vld vr4, t6, 0 ++ vldx vr5, t6, a2 ++ vldx vr6, t6, t0 ++ vldx vr7, t6, t1 ++ ++ vld vr10, t5, 0 ++ vldx vr11, t5, a2 ++ vldx vr12, t5, t0 ++ vldx vr13, t5, t1 ++ vld vr14, t7, 0 ++ vldx vr15, t7, a2 ++ vldx vr16, t7, t0 ++ vldx vr17, t7, t1 ++ ++ vilvl.b vr18, vr10, vr0 ++ vilvl.b vr19, vr11, vr1 ++ vilvl.b vr21, vr12, vr2 ++ vilvl.b vr22, vr13, vr3 ++ vilvh.b vr0, vr10, vr0 ++ vilvh.b vr1, vr11, vr1 ++ vilvh.b vr2, vr12, vr2 ++ vilvh.b vr3, vr13, vr3 ++ ++ vilvl.b vr10, vr14, vr4 ++ vilvl.b vr11, vr15, vr5 ++ vilvl.b vr12, vr16, vr6 ++ vilvl.b vr13, vr17, vr7 ++ vilvh.b vr14, vr14, vr4 ++ vilvh.b vr15, vr15, vr5 ++ vilvh.b vr16, vr16, vr6 ++ vilvh.b vr17, vr17, vr7 ++ ++ vmov vr4, vr8 ++ vmov vr5, vr8 ++ vmov vr6, vr8 ++ vmov vr7, vr8 ++ vmaddwev.h.bu.b vr4, vr18, vr20 ++ vmaddwev.h.bu.b vr5, vr19, vr20 ++ vmaddwev.h.bu.b vr6, vr21, vr20 ++ vmaddwev.h.bu.b vr7, vr22, vr20 ++ vmaddwod.h.bu.b vr4, vr18, vr20 ++ vmaddwod.h.bu.b vr5, vr19, vr20 ++ vmaddwod.h.bu.b vr6, vr21, vr20 ++ vmaddwod.h.bu.b vr7, vr22, vr20 ++ vmov vr18, vr8 ++ vmov vr19, vr8 ++ vmov vr21, vr8 ++ vmov vr22, vr8 ++ vmaddwev.h.bu.b vr18, vr0, vr20 ++ vmaddwev.h.bu.b vr19, vr1, vr20 ++ vmaddwev.h.bu.b vr21, vr2, vr20 ++ vmaddwev.h.bu.b vr22, vr3, vr20 ++ vmaddwod.h.bu.b vr18, vr0, vr20 ++ vmaddwod.h.bu.b vr19, vr1, vr20 ++ vmaddwod.h.bu.b vr21, vr2, vr20 ++ vmaddwod.h.bu.b vr22, vr3, vr20 ++ vmov vr0, vr8 ++ vmov vr1, vr8 ++ vmov vr2, vr8 ++ vmov vr3, vr8 ++ vmaddwev.h.bu.b vr0, vr10, vr20 ++ vmaddwev.h.bu.b vr1, vr11, vr20 ++ vmaddwev.h.bu.b vr2, vr12, vr20 ++ vmaddwev.h.bu.b vr3, vr13, vr20 ++ vmaddwod.h.bu.b vr0, vr10, vr20 ++ vmaddwod.h.bu.b vr1, vr11, vr20 ++ vmaddwod.h.bu.b vr2, vr12, vr20 ++ vmaddwod.h.bu.b vr3, vr13, vr20 ++ vmov vr10, vr8 ++ vmov vr11, vr8 ++ vmov vr12, vr8 ++ vmov vr13, vr8 ++ vmaddwev.h.bu.b vr10, vr14, vr20 ++ vmaddwev.h.bu.b vr11, vr15, vr20 ++ vmaddwev.h.bu.b vr12, vr16, vr20 ++ vmaddwev.h.bu.b vr13, vr17, vr20 ++ vmaddwod.h.bu.b vr10, vr14, vr20 ++ vmaddwod.h.bu.b vr11, vr15, vr20 ++ vmaddwod.h.bu.b vr12, vr16, vr20 ++ vmaddwod.h.bu.b vr13, vr17, vr20 ++ ++ vssran.bu.h vr4, vr4, vr9 ++ vssran.bu.h vr5, vr5, vr9 ++ vssran.bu.h vr6, vr6, vr9 ++ vssran.bu.h vr7, vr7, vr9 ++ vssran.bu.h vr18, vr18, vr9 ++ vssran.bu.h vr19, vr19, vr9 ++ vssran.bu.h vr21, vr21, vr9 ++ vssran.bu.h vr22, vr22, vr9 ++ vssran.bu.h vr0, vr0, vr9 ++ vssran.bu.h vr1, vr1, vr9 ++ vssran.bu.h vr2, vr2, vr9 ++ vssran.bu.h vr3, vr3, vr9 ++ vssran.bu.h vr10, vr10, vr9 ++ vssran.bu.h vr11, vr11, vr9 ++ vssran.bu.h vr12, vr12, vr9 ++ vssran.bu.h vr13, vr13, vr9 ++ ++ vilvl.d vr4, vr18, vr4 ++ vilvl.d vr5, vr19, vr5 ++ vilvl.d vr6, vr21, vr6 ++ vilvl.d vr7, vr22, vr7 ++ vilvl.d vr0, vr10, vr0 ++ vilvl.d vr1, vr11, vr1 ++ vilvl.d vr2, vr12, vr2 ++ vilvl.d vr3, vr13, vr3 ++ ++ vst vr4, t5, 0 ++ vstx vr5, t5, a2 ++ vstx vr6, t5, t0 ++ vstx vr7, t5, t1 ++ vst vr0, t7, 0 ++ vstx vr1, t7, a2 ++ vstx vr2, t7, t0 ++ vstx vr3, t7, t1 ++.END_BIWEIGHT_PIXELS16: ++endfunc ++ ++function ff_biweight_h264_pixels16_8_lasx ++ slli.d t0, a2, 1 ++ slli.d t2, a2, 2 ++ add.d t1, t0, a2 ++ addi.d a7, a7, 1 ++ ori a7, a7, 1 ++ sll.d a7, a7, a4 ++ addi.d a4, a4, 1 ++ ++ xvreplgr2vr.b xr0, a6 //tmp0 ++ xvreplgr2vr.b xr1, a5 //tmp1 ++ xvreplgr2vr.h xr8, a7 //offset ++ xvreplgr2vr.h xr9, a4 //denom ++ xvilvh.b xr20, xr1, xr0 //wgt ++ ++ add.d t4, a1, t2 ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ vldx vr2, a1, t0 ++ vldx vr3, a1, t1 ++ vld vr4, t4, 0 ++ vldx vr5, t4, a2 ++ vldx vr6, t4, t0 ++ vldx vr7, t4, t1 ++ ++ add.d t5, a0, t2 ++ vld vr10, a0, 0 ++ vldx vr11, a0, a2 ++ vldx vr12, a0, t0 ++ vldx vr13, a0, t1 ++ vld vr14, t5, 0 ++ vldx vr15, t5, a2 ++ vldx vr16, t5, t0 ++ vldx vr17, t5, t1 ++ ++ xvpermi.q xr1, xr0, 0x20 ++ xvpermi.q xr3, xr2, 0x20 ++ xvpermi.q xr5, xr4, 0x20 ++ xvpermi.q xr7, xr6, 0x20 ++ ++ xvpermi.q xr11, xr10, 0x20 ++ xvpermi.q xr13, xr12, 0x20 ++ xvpermi.q xr15, xr14, 0x20 ++ xvpermi.q xr17, xr16, 0x20 ++ ++ xvilvl.b xr0, xr11, xr1 //vec0 ++ xvilvl.b xr2, xr13, xr3 //vec2 ++ xvilvl.b xr4, xr15, xr5 //vec4 ++ xvilvl.b xr6, xr17, xr7 //vec6 ++ ++ xvilvh.b xr10, xr11, xr1 //vec1 ++ xvilvh.b xr12, xr13, xr3 //vec2 ++ xvilvh.b xr14, xr15, xr5 //vec5 ++ xvilvh.b xr16, xr17, xr7 //vec7 ++ ++ xmov xr1, xr8 ++ xmov xr3, xr8 ++ xmov xr5, xr8 ++ xmov xr7, xr8 ++ xvmaddwev.h.bu.b xr1, xr0, xr20 ++ xvmaddwev.h.bu.b xr3, xr2, xr20 ++ xvmaddwev.h.bu.b xr5, xr4, xr20 ++ xvmaddwev.h.bu.b xr7, xr6, xr20 ++ xvmaddwod.h.bu.b xr1, xr0, xr20 ++ xvmaddwod.h.bu.b xr3, xr2, xr20 ++ xvmaddwod.h.bu.b xr5, xr4, xr20 ++ xvmaddwod.h.bu.b xr7, xr6, xr20 ++ xmov xr11, xr8 ++ xmov xr13, xr8 ++ xmov xr15, xr8 ++ xmov xr17, xr8 ++ xvmaddwev.h.bu.b xr11, xr10, xr20 ++ xvmaddwev.h.bu.b xr13, xr12, xr20 ++ xvmaddwev.h.bu.b xr15, xr14, xr20 ++ xvmaddwev.h.bu.b xr17, xr16, xr20 ++ xvmaddwod.h.bu.b xr11, xr10, xr20 ++ xvmaddwod.h.bu.b xr13, xr12, xr20 ++ xvmaddwod.h.bu.b xr15, xr14, xr20 ++ xvmaddwod.h.bu.b xr17, xr16, xr20 ++ ++ xvssran.bu.h xr1, xr1, xr9 //vec0 ++ xvssran.bu.h xr3, xr3, xr9 //vec2 ++ xvssran.bu.h xr5, xr5, xr9 //vec4 ++ xvssran.bu.h xr7, xr7, xr9 //vec6 ++ xvssran.bu.h xr11, xr11, xr9 //vec1 ++ xvssran.bu.h xr13, xr13, xr9 //vec3 ++ xvssran.bu.h xr15, xr15, xr9 //vec5 ++ xvssran.bu.h xr17, xr17, xr9 //vec7 ++ ++ xvilvl.d xr0, xr11, xr1 ++ xvilvl.d xr2, xr13, xr3 ++ xvilvl.d xr4, xr15, xr5 ++ xvilvl.d xr6, xr17, xr7 ++ ++ xvpermi.d xr1, xr0, 0x4E ++ xvpermi.d xr3, xr2, 0x4E ++ xvpermi.d xr5, xr4, 0x4E ++ xvpermi.d xr7, xr6, 0x4E ++ vst vr0, a0, 0 ++ vstx vr1, a0, a2 ++ vstx vr2, a0, t0 ++ vstx vr3, a0, t1 ++ vst vr4, t5, 0 ++ vstx vr5, t5, a2 ++ vstx vr6, t5, t0 ++ vstx vr7, t5, t1 ++ ++ addi.d t6, zero, 16 ++ bne a3, t6, .END_BIWEIGHT_PIXELS16_LASX ++ add.d t4, t4, t2 ++ add.d t5, t5, t2 ++ vld vr0, t4, 0 ++ vldx vr1, t4, a2 ++ vldx vr2, t4, t0 ++ vldx vr3, t4, t1 ++ add.d t6, t4, t2 ++ add.d t7, t5, t2 ++ vld vr4, t6, 0 ++ vldx vr5, t6, a2 ++ vldx vr6, t6, t0 ++ vldx vr7, t6, t1 ++ ++ vld vr10, t5, 0 ++ vldx vr11, t5, a2 ++ vldx vr12, t5, t0 ++ vldx vr13, t5, t1 ++ vld vr14, t7, 0 ++ vldx vr15, t7, a2 ++ vldx vr16, t7, t0 ++ vldx vr17, t7, t1 ++ ++ xvpermi.q xr1, xr0, 0x20 ++ xvpermi.q xr3, xr2, 0x20 ++ xvpermi.q xr5, xr4, 0x20 ++ xvpermi.q xr7, xr6, 0x20 ++ ++ xvpermi.q xr11, xr10, 0x20 ++ xvpermi.q xr13, xr12, 0x20 ++ xvpermi.q xr15, xr14, 0x20 ++ xvpermi.q xr17, xr16, 0x20 ++ ++ xvilvl.b xr0, xr11, xr1 //vec0 ++ xvilvl.b xr2, xr13, xr3 //vec2 ++ xvilvl.b xr4, xr15, xr5 //vec4 ++ xvilvl.b xr6, xr17, xr7 //vec6 ++ ++ xvilvh.b xr10, xr11, xr1 //vec1 ++ xvilvh.b xr12, xr13, xr3 //vec2 ++ xvilvh.b xr14, xr15, xr5 //vec5 ++ xvilvh.b xr16, xr17, xr7 //vec7 ++ ++ xmov xr1, xr8 ++ xmov xr3, xr8 ++ xmov xr5, xr8 ++ xmov xr7, xr8 ++ xvmaddwev.h.bu.b xr1, xr0, xr20 ++ xvmaddwev.h.bu.b xr3, xr2, xr20 ++ xvmaddwev.h.bu.b xr5, xr4, xr20 ++ xvmaddwev.h.bu.b xr7, xr6, xr20 ++ xvmaddwod.h.bu.b xr1, xr0, xr20 ++ xvmaddwod.h.bu.b xr3, xr2, xr20 ++ xvmaddwod.h.bu.b xr5, xr4, xr20 ++ xvmaddwod.h.bu.b xr7, xr6, xr20 ++ xmov xr11, xr8 ++ xmov xr13, xr8 ++ xmov xr15, xr8 ++ xmov xr17, xr8 ++ xvmaddwev.h.bu.b xr11, xr10, xr20 ++ xvmaddwev.h.bu.b xr13, xr12, xr20 ++ xvmaddwev.h.bu.b xr15, xr14, xr20 ++ xvmaddwev.h.bu.b xr17, xr16, xr20 ++ xvmaddwod.h.bu.b xr11, xr10, xr20 ++ xvmaddwod.h.bu.b xr13, xr12, xr20 ++ xvmaddwod.h.bu.b xr15, xr14, xr20 ++ xvmaddwod.h.bu.b xr17, xr16, xr20 ++ ++ xvssran.bu.h xr1, xr1, xr9 //vec0 ++ xvssran.bu.h xr3, xr3, xr9 //vec2 ++ xvssran.bu.h xr5, xr5, xr9 //vec4 ++ xvssran.bu.h xr7, xr7, xr9 //vec6 ++ xvssran.bu.h xr11, xr11, xr9 //vec1 ++ xvssran.bu.h xr13, xr13, xr9 //vec3 ++ xvssran.bu.h xr15, xr15, xr9 //vec5 ++ xvssran.bu.h xr17, xr17, xr9 //vec7 ++ ++ xvilvl.d xr0, xr11, xr1 ++ xvilvl.d xr2, xr13, xr3 ++ xvilvl.d xr4, xr15, xr5 ++ xvilvl.d xr6, xr17, xr7 ++ ++ xvpermi.d xr1, xr0, 0x4E ++ xvpermi.d xr3, xr2, 0x4E ++ xvpermi.d xr5, xr4, 0x4E ++ xvpermi.d xr7, xr6, 0x4E ++ ++ vst vr0, t5, 0 ++ vstx vr1, t5, a2 ++ vstx vr2, t5, t0 ++ vstx vr3, t5, t1 ++ vst vr4, t7, 0 ++ vstx vr5, t7, a2 ++ vstx vr6, t7, t0 ++ vstx vr7, t7, t1 ++.END_BIWEIGHT_PIXELS16_LASX: ++endfunc ++ ++function ff_biweight_h264_pixels8_8_lsx ++ slli.d t0, a2, 1 ++ slli.d t2, a2, 2 ++ add.d t1, t0, a2 ++ addi.d a7, a7, 1 ++ ori a7, a7, 1 ++ sll.d a7, a7, a4 ++ addi.d a4, a4, 1 ++ addi.d t3, zero, 8 ++ ++ vreplgr2vr.b vr0, a6 //tmp0 ++ vreplgr2vr.b vr1, a5 //tmp1 ++ vreplgr2vr.h vr8, a7 //offset ++ vreplgr2vr.h vr9, a4 //denom ++ vilvh.b vr20, vr1, vr0 //wgt ++ ++ fld.d f0, a1, 0 //src0 ++ fldx.d f1, a1, a2 //src1 ++ fldx.d f2, a1, t0 //src2 ++ fldx.d f3, a1, t1 //src3 ++ fld.d f10, a0, 0 //src10 ++ fldx.d f11, a0, a2 //src11 ++ fldx.d f12, a0, t0 //src12 ++ fldx.d f13, a0, t1 //src13 ++ ++ vilvl.d vr4, vr1, vr0 //src0 ++ vilvl.d vr5, vr3, vr2 //src2 ++ vilvl.d vr6, vr11, vr10 //dst0 ++ vilvl.d vr7, vr13, vr12 //dst2 ++ ++ vilvl.b vr0, vr6, vr4 //vec0.0 ++ vilvh.b vr1, vr6, vr4 //vec0.1 ++ vilvl.b vr2, vr7, vr5 //vec1.0 ++ vilvh.b vr3, vr7, vr5 //vec1.1 ++ ++ vmov vr4, vr8 ++ vmov vr5, vr8 ++ vmov vr6, vr8 ++ vmov vr7, vr8 ++ vmaddwev.h.bu.b vr4, vr0, vr20 ++ vmaddwev.h.bu.b vr5, vr1, vr20 ++ vmaddwev.h.bu.b vr6, vr2, vr20 ++ vmaddwev.h.bu.b vr7, vr3, vr20 ++ vmaddwod.h.bu.b vr4, vr0, vr20 ++ vmaddwod.h.bu.b vr5, vr1, vr20 ++ vmaddwod.h.bu.b vr6, vr2, vr20 ++ vmaddwod.h.bu.b vr7, vr3, vr20 ++ ++ vssran.bu.h vr0, vr4, vr9 //vec0 ++ vssran.bu.h vr1, vr5, vr9 //vec0 ++ vssran.bu.h vr2, vr6, vr9 //vec1 ++ vssran.bu.h vr3, vr7, vr9 //vec1 ++ ++ vilvl.d vr4, vr1, vr0 ++ vilvl.d vr6, vr3, vr2 ++ ++ vbsrl.v vr5, vr4, 8 ++ vbsrl.v vr7, vr6, 8 ++ ++ fst.d f4, a0, 0 ++ fstx.d f5, a0, a2 ++ fstx.d f6, a0, t0 ++ fstx.d f7, a0, t1 ++ ++ blt a3, t3, .END_BIWEIGHT_H264_PIXELS8 ++ addi.d t3, zero, 16 ++ add.d a1, a1, t2 ++ add.d a0, a0, t2 ++ ++ fld.d f0, a1, 0 //src0 ++ fldx.d f1, a1, a2 //src1 ++ fldx.d f2, a1, t0 //src2 ++ fldx.d f3, a1, t1 //src3 ++ fld.d f10, a0, 0 //src10 ++ fldx.d f11, a0, a2 //src11 ++ fldx.d f12, a0, t0 //src12 ++ fldx.d f13, a0, t1 //src13 ++ ++ vilvl.d vr4, vr1, vr0 //src0 ++ vilvl.d vr5, vr3, vr2 //src2 ++ vilvl.d vr6, vr11, vr10 //dst0 ++ vilvl.d vr7, vr13, vr12 //dst2 ++ ++ vilvl.b vr0, vr6, vr4 //vec0.0 ++ vilvh.b vr1, vr6, vr4 //vec0.1 ++ vilvl.b vr2, vr7, vr5 //vec1.0 ++ vilvh.b vr3, vr7, vr5 //vec1.1 ++ ++ vmov vr4, vr8 ++ vmov vr5, vr8 ++ vmov vr6, vr8 ++ vmov vr7, vr8 ++ vmaddwev.h.bu.b vr4, vr0, vr20 ++ vmaddwev.h.bu.b vr5, vr1, vr20 ++ vmaddwev.h.bu.b vr6, vr2, vr20 ++ vmaddwev.h.bu.b vr7, vr3, vr20 ++ vmaddwod.h.bu.b vr4, vr0, vr20 ++ vmaddwod.h.bu.b vr5, vr1, vr20 ++ vmaddwod.h.bu.b vr6, vr2, vr20 ++ vmaddwod.h.bu.b vr7, vr3, vr20 ++ ++ vssran.bu.h vr0, vr4, vr9 //vec0 ++ vssran.bu.h vr1, vr5, vr9 //vec0 ++ vssran.bu.h vr2, vr6, vr9 //vec1 ++ vssran.bu.h vr3, vr7, vr9 //vec1 ++ ++ vilvl.d vr4, vr1, vr0 ++ vilvl.d vr6, vr3, vr2 ++ ++ vbsrl.v vr5, vr4, 8 ++ vbsrl.v vr7, vr6, 8 ++ ++ fst.d f4, a0, 0 ++ fstx.d f5, a0, a2 ++ fstx.d f6, a0, t0 ++ fstx.d f7, a0, t1 ++ blt a3, t3, .END_BIWEIGHT_H264_PIXELS8 ++ add.d a1, a1, t2 ++ add.d a0, a0, t2 ++ add.d t4, a1, t2 ++ add.d t5, a0, t2 ++ ++ fld.d f0, a1, 0 //src0 ++ fldx.d f1, a1, a2 //src1 ++ fldx.d f2, a1, t0 //src2 ++ fldx.d f3, a1, t1 //src3 ++ fld.d f4, t4, 0 //src4 ++ fldx.d f5, t4, a2 //src5 ++ fldx.d f6, t4, t0 //src6 ++ fldx.d f7, t4, t1 //src7 ++ fld.d f10, a0, 0 //src10 ++ fldx.d f11, a0, a2 //src11 ++ fldx.d f12, a0, t0 //src12 ++ fldx.d f13, a0, t1 //src13 ++ fld.d f14, t5, 0 //src10 ++ fldx.d f15, t5, a2 //src11 ++ fldx.d f16, t5, t0 //src12 ++ fldx.d f17, t5, t1 //src13 ++ ++ vilvl.d vr0, vr1, vr0 //src0 ++ vilvl.d vr2, vr3, vr2 //src2 ++ vilvl.d vr4, vr5, vr4 //src4 ++ vilvl.d vr6, vr7, vr6 //src6 ++ vilvl.d vr10, vr11, vr10 //dst0 ++ vilvl.d vr12, vr13, vr12 //dst2 ++ vilvl.d vr14, vr15, vr14 //dst4 ++ vilvl.d vr16, vr17, vr16 //dst6 ++ ++ vilvl.b vr1, vr10, vr0 //vec0.0 ++ vilvh.b vr3, vr10, vr0 //vec0.1 ++ vilvl.b vr5, vr12, vr2 //vec2.0 ++ vilvh.b vr7, vr12, vr2 //vec2.1 ++ vilvl.b vr11, vr14, vr4 //vec4.0 ++ vilvh.b vr13, vr14, vr4 //vec4.1 ++ vilvl.b vr15, vr16, vr6 //vec6.0 ++ vilvh.b vr17, vr16, vr6 //vec6.1 ++ ++ vmov vr0, vr8 ++ vmov vr2, vr8 ++ vmov vr4, vr8 ++ vmov vr6, vr8 ++ vmaddwev.h.bu.b vr0, vr1, vr20 ++ vmaddwev.h.bu.b vr2, vr3, vr20 ++ vmaddwev.h.bu.b vr4, vr5, vr20 ++ vmaddwev.h.bu.b vr6, vr7, vr20 ++ vmaddwod.h.bu.b vr0, vr1, vr20 ++ vmaddwod.h.bu.b vr2, vr3, vr20 ++ vmaddwod.h.bu.b vr4, vr5, vr20 ++ vmaddwod.h.bu.b vr6, vr7, vr20 ++ ++ vmov vr10, vr8 ++ vmov vr12, vr8 ++ vmov vr14, vr8 ++ vmov vr16, vr8 ++ ++ vmaddwev.h.bu.b vr10, vr11, vr20 ++ vmaddwev.h.bu.b vr12, vr13, vr20 ++ vmaddwev.h.bu.b vr14, vr15, vr20 ++ vmaddwev.h.bu.b vr16, vr17, vr20 ++ vmaddwod.h.bu.b vr10, vr11, vr20 ++ vmaddwod.h.bu.b vr12, vr13, vr20 ++ vmaddwod.h.bu.b vr14, vr15, vr20 ++ vmaddwod.h.bu.b vr16, vr17, vr20 ++ ++ vssran.bu.h vr1, vr0, vr9 //vec0 ++ vssran.bu.h vr3, vr2, vr9 //vec0 ++ vssran.bu.h vr5, vr4, vr9 //vec2 ++ vssran.bu.h vr7, vr6, vr9 //vec2 ++ ++ vssran.bu.h vr11, vr10, vr9 //vec4 ++ vssran.bu.h vr13, vr12, vr9 //vec4 ++ vssran.bu.h vr15, vr14, vr9 //vec6 ++ vssran.bu.h vr17, vr16, vr9 //vec6 ++ ++ vilvl.d vr0, vr3, vr1 ++ vilvl.d vr2, vr7, vr5 ++ vilvl.d vr10, vr13, vr11 ++ vilvl.d vr12, vr17, vr15 ++ ++ vbsrl.v vr1, vr0, 8 ++ vbsrl.v vr3, vr2, 8 ++ vbsrl.v vr11, vr10, 8 ++ vbsrl.v vr13, vr12, 8 ++ ++ fst.d f0, a0, 0 ++ fstx.d f1, a0, a2 ++ fstx.d f2, a0, t0 ++ fstx.d f3, a0, t1 ++ fst.d f10, t5, 0 ++ fstx.d f11, t5, a2 ++ fstx.d f12, t5, t0 ++ fstx.d f13, t5, t1 ++.END_BIWEIGHT_H264_PIXELS8: ++endfunc ++ ++function ff_biweight_h264_pixels8_8_lasx ++ slli.d t0, a2, 1 ++ slli.d t2, a2, 2 ++ add.d t1, t0, a2 ++ addi.d a7, a7, 1 ++ ori a7, a7, 1 ++ sll.d a7, a7, a4 ++ addi.d a4, a4, 1 ++ addi.d t3, zero, 8 ++ ++ xvreplgr2vr.b xr0, a6 //tmp0 ++ xvreplgr2vr.b xr1, a5 //tmp1 ++ xvreplgr2vr.h xr8, a7 //offset ++ xvreplgr2vr.h xr9, a4 //denom ++ xvilvh.b xr20, xr1, xr0 //wgt ++ ++ fld.d f0, a1, 0 //src0 ++ fldx.d f1, a1, a2 //src1 ++ fldx.d f2, a1, t0 //src2 ++ fldx.d f3, a1, t1 //src3 ++ fld.d f10, a0, 0 //src10 ++ fldx.d f11, a0, a2 //src11 ++ fldx.d f12, a0, t0 //src12 ++ fldx.d f13, a0, t1 //src13 ++ ++ vilvl.d vr4, vr1, vr0 //src0 ++ vilvl.d vr5, vr3, vr2 //src2 ++ vilvl.d vr6, vr11, vr10 //dst0 ++ vilvl.d vr7, vr13, vr12 //dst2 ++ ++ xvpermi.q xr5, xr4, 0x20 ++ xvpermi.q xr7, xr6, 0x20 ++ ++ xvilvl.b xr0, xr7, xr5 ++ xvilvh.b xr1, xr7, xr5 ++ ++ xmov xr2, xr8 ++ xmov xr3, xr8 ++ xvmaddwev.h.bu.b xr2, xr0, xr20 ++ xvmaddwev.h.bu.b xr3, xr1, xr20 ++ xvmaddwod.h.bu.b xr2, xr0, xr20 ++ xvmaddwod.h.bu.b xr3, xr1, xr20 ++ ++ xvssran.bu.h xr4, xr2, xr9 //vec0 ++ xvssran.bu.h xr5, xr3, xr9 //vec2 ++ ++ xvilvl.d xr0, xr5, xr4 ++ xvpermi.d xr2, xr0, 0x4E ++ vbsrl.v vr1, vr0, 8 ++ vbsrl.v vr3, vr2, 8 ++ ++ fst.d f0, a0, 0 ++ fstx.d f1, a0, a2 ++ fstx.d f2, a0, t0 ++ fstx.d f3, a0, t1 ++ ++ blt a3, t3, .END_BIWEIGHT_H264_PIXELS8_LASX ++ addi.d t3, zero, 16 ++ add.d a1, a1, t2 ++ add.d a0, a0, t2 ++ ++ fld.d f0, a1, 0 //src0 ++ fldx.d f1, a1, a2 //src1 ++ fldx.d f2, a1, t0 //src2 ++ fldx.d f3, a1, t1 //src3 ++ fld.d f10, a0, 0 //src10 ++ fldx.d f11, a0, a2 //src11 ++ fldx.d f12, a0, t0 //src12 ++ fldx.d f13, a0, t1 //src13 ++ ++ vilvl.d vr4, vr1, vr0 //src0 ++ vilvl.d vr5, vr3, vr2 //src2 ++ vilvl.d vr6, vr11, vr10 //dst0 ++ vilvl.d vr7, vr13, vr12 //dst2 ++ ++ xvpermi.q xr5, xr4, 0x20 ++ xvpermi.q xr7, xr6, 0x20 ++ ++ xvilvl.b xr0, xr7, xr5 ++ xvilvh.b xr1, xr7, xr5 ++ ++ xmov xr2, xr8 ++ xmov xr3, xr8 ++ xvmaddwev.h.bu.b xr2, xr0, xr20 ++ xvmaddwev.h.bu.b xr3, xr1, xr20 ++ xvmaddwod.h.bu.b xr2, xr0, xr20 ++ xvmaddwod.h.bu.b xr3, xr1, xr20 ++ ++ xvssran.bu.h xr4, xr2, xr9 //vec0 ++ xvssran.bu.h xr5, xr3, xr9 //vec2 ++ ++ xvilvl.d xr0, xr5, xr4 ++ xvpermi.d xr2, xr0, 0x4E ++ vbsrl.v vr1, vr0, 8 ++ vbsrl.v vr3, vr2, 8 ++ ++ fst.d f0, a0, 0 ++ fstx.d f1, a0, a2 ++ fstx.d f2, a0, t0 ++ fstx.d f3, a0, t1 ++ blt a3, t3, .END_BIWEIGHT_H264_PIXELS8_LASX ++ add.d a1, a1, t2 ++ add.d a0, a0, t2 ++ add.d t4, a1, t2 ++ add.d t5, a0, t2 ++ ++ fld.d f0, a1, 0 //src0 ++ fldx.d f1, a1, a2 //src1 ++ fldx.d f2, a1, t0 //src2 ++ fldx.d f3, a1, t1 //src3 ++ fld.d f4, t4, 0 //src4 ++ fldx.d f5, t4, a2 //src5 ++ fldx.d f6, t4, t0 //src6 ++ fldx.d f7, t4, t1 //src7 ++ fld.d f10, a0, 0 //dst0 ++ fldx.d f11, a0, a2 //dst1 ++ fldx.d f12, a0, t0 //dst2 ++ fldx.d f13, a0, t1 //dst3 ++ fld.d f14, t5, 0 //dst4 ++ fldx.d f15, t5, a2 //dst5 ++ fldx.d f16, t5, t0 //dst6 ++ fldx.d f17, t5, t1 //dst7 ++ ++ vilvl.d vr0, vr1, vr0 //src0 ++ vilvl.d vr2, vr3, vr2 //src2 ++ vilvl.d vr4, vr5, vr4 //src4 ++ vilvl.d vr6, vr7, vr6 //src6 ++ vilvl.d vr10, vr11, vr10 //dst0 ++ vilvl.d vr12, vr13, vr12 //dst2 ++ vilvl.d vr14, vr15, vr14 //dst4 ++ vilvl.d vr16, vr17, vr16 //dst6 ++ ++ xvpermi.q xr2, xr0, 0x20 ++ xvpermi.q xr6, xr4, 0x20 ++ xvpermi.q xr12, xr10, 0x20 ++ xvpermi.q xr16, xr14, 0x20 ++ ++ xvilvl.b xr0, xr12, xr2 ++ xvilvh.b xr1, xr12, xr2 ++ xvilvl.b xr10, xr16, xr6 ++ xvilvh.b xr11, xr16, xr6 ++ ++ xmov xr2, xr8 ++ xmov xr3, xr8 ++ xmov xr12, xr8 ++ xmov xr13, xr8 ++ xvmaddwev.h.bu.b xr2, xr0, xr20 ++ xvmaddwev.h.bu.b xr3, xr1, xr20 ++ xvmaddwev.h.bu.b xr12, xr10, xr20 ++ xvmaddwev.h.bu.b xr13, xr11, xr20 ++ xvmaddwod.h.bu.b xr2, xr0, xr20 ++ xvmaddwod.h.bu.b xr3, xr1, xr20 ++ xvmaddwod.h.bu.b xr12, xr10, xr20 ++ xvmaddwod.h.bu.b xr13, xr11, xr20 ++ ++ xvssran.bu.h xr4, xr2, xr9 //vec0 ++ xvssran.bu.h xr5, xr3, xr9 //vec2 ++ xvssran.bu.h xr14, xr12, xr9 //vec0 ++ xvssran.bu.h xr15, xr13, xr9 //vec2 ++ ++ xvilvl.d xr0, xr5, xr4 ++ xvilvl.d xr10, xr15, xr14 ++ xvpermi.d xr2, xr0, 0x4E ++ xvpermi.d xr12, xr10, 0x4E ++ vbsrl.v vr1, vr0, 8 ++ vbsrl.v vr3, vr2, 8 ++ vbsrl.v vr11, vr10, 8 ++ vbsrl.v vr13, vr12, 8 ++ ++ fst.d f0, a0, 0 ++ fstx.d f1, a0, a2 ++ fstx.d f2, a0, t0 ++ fstx.d f3, a0, t1 ++ fst.d f10, t5, 0 ++ fstx.d f11, t5, a2 ++ fstx.d f12, t5, t0 ++ fstx.d f13, t5, t1 ++.END_BIWEIGHT_H264_PIXELS8_LASX: ++endfunc ++ ++//LSX optimization is enough for this function. ++function ff_biweight_h264_pixels4_8_lsx ++ slli.d t0, a2, 1 ++ slli.d t2, a2, 2 ++ add.d t1, t0, a2 ++ addi.d a7, a7, 1 ++ ori a7, a7, 1 ++ sll.d a7, a7, a4 ++ addi.d a4, a4, 1 ++ addi.d t3, zero, 4 ++ ++ vreplgr2vr.b vr0, a6 //tmp0 ++ vreplgr2vr.b vr1, a5 //tmp1 ++ vreplgr2vr.h vr8, a7 //offset ++ vreplgr2vr.h vr9, a4 //denom ++ vilvh.b vr20, vr1, vr0 //wgt ++ ++ fld.s f0, a1, 0 ++ fldx.s f1, a1, a2 ++ fld.s f10, a0, 0 ++ fldx.s f11, a0, a2 ++ vilvl.w vr2, vr1, vr0 ++ vilvl.w vr12, vr11, vr10 ++ vilvl.b vr0, vr12, vr2 ++ ++ vmov vr1, vr8 ++ vmaddwev.h.bu.b vr1, vr0, vr20 ++ vmaddwod.h.bu.b vr1, vr0, vr20 ++ ++ vssran.bu.h vr1, vr1, vr9 //vec0 ++ vbsrl.v vr2, vr1, 4 ++ fst.s f1, a0, 0 ++ fstx.s f2, a0, a2 ++ ++ blt a3, t3, .END_BIWEIGHT_H264_PIXELS4 ++ addi.d t3, zero, 8 ++ fldx.s f0, a1, t0 ++ fldx.s f1, a1, t1 ++ fldx.s f10, a0, t0 ++ fldx.s f11, a0, t1 ++ vilvl.w vr2, vr1, vr0 ++ vilvl.w vr12, vr11, vr10 ++ vilvl.b vr0, vr12, vr2 ++ ++ vmov vr1, vr8 ++ vmaddwev.h.bu.b vr1, vr0, vr20 ++ vmaddwod.h.bu.b vr1, vr0, vr20 ++ ++ vssran.bu.h vr1, vr1, vr9 //vec0 ++ vbsrl.v vr2, vr1, 4 ++ fstx.s f1, a0, t0 ++ fstx.s f2, a0, t1 ++ ++ blt a3, t3, .END_BIWEIGHT_H264_PIXELS4 ++ add.d a1, a1, t2 ++ add.d a0, a0, t2 ++ fld.s f0, a1, 0 ++ fldx.s f1, a1, a2 ++ fldx.s f2, a1, t0 ++ fldx.s f3, a1, t1 ++ fld.s f10, a0, 0 ++ fldx.s f11, a0, a2 ++ fldx.s f12, a0, t0 ++ fldx.s f13, a0, t1 ++ vilvl.w vr4, vr1, vr0 ++ vilvl.w vr5, vr3, vr2 ++ vilvl.w vr14, vr11, vr10 ++ vilvl.w vr15, vr13, vr12 ++ ++ vilvl.b vr0, vr14, vr4 ++ vilvl.b vr10, vr15, vr5 ++ ++ vmov vr1, vr8 ++ vmov vr11, vr8 ++ vmaddwev.h.bu.b vr1, vr0, vr20 ++ vmaddwev.h.bu.b vr11, vr10, vr20 ++ vmaddwod.h.bu.b vr1, vr0, vr20 ++ vmaddwod.h.bu.b vr11, vr10, vr20 ++ ++ vssran.bu.h vr0, vr1, vr9 //vec0 ++ vssran.bu.h vr10, vr11, vr9 //vec0 ++ vbsrl.v vr2, vr0, 4 ++ vbsrl.v vr12, vr10, 4 ++ ++ fst.s f0, a0, 0 ++ fstx.s f2, a0, a2 ++ fstx.s f10, a0, t0 ++ fstx.s f12, a0, t1 ++.END_BIWEIGHT_H264_PIXELS4: ++endfunc ++ ++function ff_weight_h264_pixels16_8_lsx ++ slli.d t0, a1, 1 ++ slli.d t2, a1, 2 ++ add.d t1, t0, a1 ++ addi.d t3, zero, 16 ++ ++ sll.d a5, a5, a3 ++ vreplgr2vr.b vr20, a4 //weight ++ vreplgr2vr.h vr8, a5 //offset ++ vreplgr2vr.h vr9, a3 //log2_denom ++ ++ add.d t4, a0, t2 ++ vld vr0, a0, 0 ++ vldx vr1, a0, a1 ++ vldx vr2, a0, t0 ++ vldx vr3, a0, t1 ++ vld vr4, t4, 0 ++ vldx vr5, t4, a1 ++ vldx vr6, t4, t0 ++ vldx vr7, t4, t1 ++ ++ vmulwev.h.bu.b vr10, vr0, vr20 ++ vmulwev.h.bu.b vr11, vr1, vr20 ++ vmulwev.h.bu.b vr12, vr2, vr20 ++ vmulwev.h.bu.b vr13, vr3, vr20 ++ vmulwev.h.bu.b vr14, vr4, vr20 ++ vmulwev.h.bu.b vr15, vr5, vr20 ++ vmulwev.h.bu.b vr16, vr6, vr20 ++ vmulwev.h.bu.b vr17, vr7, vr20 ++ vsadd.h vr10, vr8, vr10 ++ vsadd.h vr11, vr8, vr11 ++ vsadd.h vr12, vr8, vr12 ++ vsadd.h vr13, vr8, vr13 ++ vsadd.h vr14, vr8, vr14 ++ vsadd.h vr15, vr8, vr15 ++ vsadd.h vr16, vr8, vr16 ++ vsadd.h vr17, vr8, vr17 ++ ++ vmulwod.h.bu.b vr18, vr0, vr20 ++ vmulwod.h.bu.b vr19, vr1, vr20 ++ vmulwod.h.bu.b vr21, vr2, vr20 ++ vmulwod.h.bu.b vr22, vr3, vr20 ++ vmulwod.h.bu.b vr0, vr4, vr20 ++ vmulwod.h.bu.b vr1, vr5, vr20 ++ vmulwod.h.bu.b vr2, vr6, vr20 ++ vmulwod.h.bu.b vr3, vr7, vr20 ++ vsadd.h vr18, vr8, vr18 ++ vsadd.h vr19, vr8, vr19 ++ vsadd.h vr21, vr8, vr21 ++ vsadd.h vr22, vr8, vr22 ++ vsadd.h vr0, vr8, vr0 ++ vsadd.h vr1, vr8, vr1 ++ vsadd.h vr2, vr8, vr2 ++ vsadd.h vr3, vr8, vr3 ++ ++ vssrarn.bu.h vr10, vr10, vr9 ++ vssrarn.bu.h vr11, vr11, vr9 ++ vssrarn.bu.h vr12, vr12, vr9 ++ vssrarn.bu.h vr13, vr13, vr9 ++ vssrarn.bu.h vr14, vr14, vr9 ++ vssrarn.bu.h vr15, vr15, vr9 ++ vssrarn.bu.h vr16, vr16, vr9 ++ vssrarn.bu.h vr17, vr17, vr9 ++ vssrarn.bu.h vr4, vr18, vr9 ++ vssrarn.bu.h vr5, vr19, vr9 ++ vssrarn.bu.h vr6, vr21, vr9 ++ vssrarn.bu.h vr7, vr22, vr9 ++ vssrarn.bu.h vr0, vr0, vr9 ++ vssrarn.bu.h vr1, vr1, vr9 ++ vssrarn.bu.h vr2, vr2, vr9 ++ vssrarn.bu.h vr3, vr3, vr9 ++ ++ vilvl.b vr10, vr4, vr10 ++ vilvl.b vr11, vr5, vr11 ++ vilvl.b vr12, vr6, vr12 ++ vilvl.b vr13, vr7, vr13 ++ vilvl.b vr14, vr0, vr14 ++ vilvl.b vr15, vr1, vr15 ++ vilvl.b vr16, vr2, vr16 ++ vilvl.b vr17, vr3, vr17 ++ ++ vst vr10, a0, 0 ++ vstx vr11, a0, a1 ++ vstx vr12, a0, t0 ++ vstx vr13, a0, t1 ++ vst vr14, t4, 0 ++ vstx vr15, t4, a1 ++ vstx vr16, t4, t0 ++ vstx vr17, t4, t1 ++ ++ bne a2, t3, .END_WEIGHT_H264_PIXELS16_8 ++ add.d a0, t4, t2 ++ add.d t4, a0, t2 ++ vld vr0, a0, 0 ++ vldx vr1, a0, a1 ++ vldx vr2, a0, t0 ++ vldx vr3, a0, t1 ++ vld vr4, t4, 0 ++ vldx vr5, t4, a1 ++ vldx vr6, t4, t0 ++ vldx vr7, t4, t1 ++ ++ vmulwev.h.bu.b vr10, vr0, vr20 ++ vmulwev.h.bu.b vr11, vr1, vr20 ++ vmulwev.h.bu.b vr12, vr2, vr20 ++ vmulwev.h.bu.b vr13, vr3, vr20 ++ vmulwev.h.bu.b vr14, vr4, vr20 ++ vmulwev.h.bu.b vr15, vr5, vr20 ++ vmulwev.h.bu.b vr16, vr6, vr20 ++ vmulwev.h.bu.b vr17, vr7, vr20 ++ vsadd.h vr10, vr8, vr10 ++ vsadd.h vr11, vr8, vr11 ++ vsadd.h vr12, vr8, vr12 ++ vsadd.h vr13, vr8, vr13 ++ vsadd.h vr14, vr8, vr14 ++ vsadd.h vr15, vr8, vr15 ++ vsadd.h vr16, vr8, vr16 ++ vsadd.h vr17, vr8, vr17 ++ ++ vmulwod.h.bu.b vr18, vr0, vr20 ++ vmulwod.h.bu.b vr19, vr1, vr20 ++ vmulwod.h.bu.b vr21, vr2, vr20 ++ vmulwod.h.bu.b vr22, vr3, vr20 ++ vmulwod.h.bu.b vr0, vr4, vr20 ++ vmulwod.h.bu.b vr1, vr5, vr20 ++ vmulwod.h.bu.b vr2, vr6, vr20 ++ vmulwod.h.bu.b vr3, vr7, vr20 ++ vsadd.h vr18, vr8, vr18 ++ vsadd.h vr19, vr8, vr19 ++ vsadd.h vr21, vr8, vr21 ++ vsadd.h vr22, vr8, vr22 ++ vsadd.h vr0, vr8, vr0 ++ vsadd.h vr1, vr8, vr1 ++ vsadd.h vr2, vr8, vr2 ++ vsadd.h vr3, vr8, vr3 ++ ++ vssrarn.bu.h vr10, vr10, vr9 ++ vssrarn.bu.h vr11, vr11, vr9 ++ vssrarn.bu.h vr12, vr12, vr9 ++ vssrarn.bu.h vr13, vr13, vr9 ++ vssrarn.bu.h vr14, vr14, vr9 ++ vssrarn.bu.h vr15, vr15, vr9 ++ vssrarn.bu.h vr16, vr16, vr9 ++ vssrarn.bu.h vr17, vr17, vr9 ++ vssrarn.bu.h vr4, vr18, vr9 ++ vssrarn.bu.h vr5, vr19, vr9 ++ vssrarn.bu.h vr6, vr21, vr9 ++ vssrarn.bu.h vr7, vr22, vr9 ++ vssrarn.bu.h vr0, vr0, vr9 ++ vssrarn.bu.h vr1, vr1, vr9 ++ vssrarn.bu.h vr2, vr2, vr9 ++ vssrarn.bu.h vr3, vr3, vr9 ++ ++ vilvl.b vr10, vr4, vr10 ++ vilvl.b vr11, vr5, vr11 ++ vilvl.b vr12, vr6, vr12 ++ vilvl.b vr13, vr7, vr13 ++ vilvl.b vr14, vr0, vr14 ++ vilvl.b vr15, vr1, vr15 ++ vilvl.b vr16, vr2, vr16 ++ vilvl.b vr17, vr3, vr17 ++ ++ vst vr10, a0, 0 ++ vstx vr11, a0, a1 ++ vstx vr12, a0, t0 ++ vstx vr13, a0, t1 ++ vst vr14, t4, 0 ++ vstx vr15, t4, a1 ++ vstx vr16, t4, t0 ++ vstx vr17, t4, t1 ++.END_WEIGHT_H264_PIXELS16_8: ++endfunc ++ ++function ff_weight_h264_pixels16_8_lasx ++ slli.d t0, a1, 1 ++ slli.d t2, a1, 2 ++ add.d t1, t0, a1 ++ addi.d t3, zero, 16 ++ ++ sll.d a5, a5, a3 ++ xvreplgr2vr.b xr20, a4 //weight ++ xvreplgr2vr.h xr8, a5 //offset ++ xvreplgr2vr.h xr9, a3 //log2_denom ++ ++ add.d t4, a0, t2 ++ vld vr0, a0, 0 ++ vldx vr1, a0, a1 ++ vldx vr2, a0, t0 ++ vldx vr3, a0, t1 ++ vld vr4, t4, 0 ++ vldx vr5, t4, a1 ++ vldx vr6, t4, t0 ++ vldx vr7, t4, t1 ++ ++ xvpermi.q xr1, xr0, 0x20 ++ xvpermi.q xr3, xr2, 0x20 ++ xvpermi.q xr5, xr4, 0x20 ++ xvpermi.q xr7, xr6, 0x20 ++ xvmulwev.h.bu.b xr10, xr1, xr20 ++ xvmulwev.h.bu.b xr11, xr3, xr20 ++ xvmulwev.h.bu.b xr12, xr5, xr20 ++ xvmulwev.h.bu.b xr13, xr7, xr20 ++ xvmulwod.h.bu.b xr14, xr1, xr20 ++ xvmulwod.h.bu.b xr15, xr3, xr20 ++ xvmulwod.h.bu.b xr16, xr5, xr20 ++ xvmulwod.h.bu.b xr17, xr7, xr20 ++ xvsadd.h xr10, xr8, xr10 ++ xvsadd.h xr11, xr8, xr11 ++ xvsadd.h xr12, xr8, xr12 ++ xvsadd.h xr13, xr8, xr13 ++ xvsadd.h xr14, xr8, xr14 ++ xvsadd.h xr15, xr8, xr15 ++ xvsadd.h xr16, xr8, xr16 ++ xvsadd.h xr17, xr8, xr17 ++ ++ xvssrarn.bu.h xr10, xr10, xr9 ++ xvssrarn.bu.h xr11, xr11, xr9 ++ xvssrarn.bu.h xr12, xr12, xr9 ++ xvssrarn.bu.h xr13, xr13, xr9 ++ xvssrarn.bu.h xr14, xr14, xr9 ++ xvssrarn.bu.h xr15, xr15, xr9 ++ xvssrarn.bu.h xr16, xr16, xr9 ++ xvssrarn.bu.h xr17, xr17, xr9 ++ ++ xvilvl.b xr0, xr14, xr10 ++ xvilvl.b xr1, xr15, xr11 ++ xvilvl.b xr2, xr16, xr12 ++ xvilvl.b xr3, xr17, xr13 ++ xvpermi.d xr4, xr0, 0x4E ++ xvpermi.d xr5, xr1, 0x4E ++ xvpermi.d xr6, xr2, 0x4E ++ xvpermi.d xr7, xr3, 0x4E ++ ++ vst vr0, a0, 0 ++ vstx vr4, a0, a1 ++ vstx vr1, a0, t0 ++ vstx vr5, a0, t1 ++ vst vr2, t4, 0 ++ vstx vr6, t4, a1 ++ vstx vr3, t4, t0 ++ vstx vr7, t4, t1 ++ ++ bne a2, t3, .END_WEIGHT_H264_PIXELS16_8_LASX ++ add.d a0, t4, t2 ++ add.d t4, a0, t2 ++ vld vr0, a0, 0 ++ vldx vr1, a0, a1 ++ vldx vr2, a0, t0 ++ vldx vr3, a0, t1 ++ vld vr4, t4, 0 ++ vldx vr5, t4, a1 ++ vldx vr6, t4, t0 ++ vldx vr7, t4, t1 ++ ++ xvpermi.q xr1, xr0, 0x20 ++ xvpermi.q xr3, xr2, 0x20 ++ xvpermi.q xr5, xr4, 0x20 ++ xvpermi.q xr7, xr6, 0x20 ++ xvmulwev.h.bu.b xr10, xr1, xr20 ++ xvmulwev.h.bu.b xr11, xr3, xr20 ++ xvmulwev.h.bu.b xr12, xr5, xr20 ++ xvmulwev.h.bu.b xr13, xr7, xr20 ++ xvmulwod.h.bu.b xr14, xr1, xr20 ++ xvmulwod.h.bu.b xr15, xr3, xr20 ++ xvmulwod.h.bu.b xr16, xr5, xr20 ++ xvmulwod.h.bu.b xr17, xr7, xr20 ++ xvsadd.h xr10, xr8, xr10 ++ xvsadd.h xr11, xr8, xr11 ++ xvsadd.h xr12, xr8, xr12 ++ xvsadd.h xr13, xr8, xr13 ++ xvsadd.h xr14, xr8, xr14 ++ xvsadd.h xr15, xr8, xr15 ++ xvsadd.h xr16, xr8, xr16 ++ xvsadd.h xr17, xr8, xr17 ++ ++ xvssrarn.bu.h xr10, xr10, xr9 ++ xvssrarn.bu.h xr11, xr11, xr9 ++ xvssrarn.bu.h xr12, xr12, xr9 ++ xvssrarn.bu.h xr13, xr13, xr9 ++ xvssrarn.bu.h xr14, xr14, xr9 ++ xvssrarn.bu.h xr15, xr15, xr9 ++ xvssrarn.bu.h xr16, xr16, xr9 ++ xvssrarn.bu.h xr17, xr17, xr9 ++ ++ xvilvl.b xr0, xr14, xr10 ++ xvilvl.b xr1, xr15, xr11 ++ xvilvl.b xr2, xr16, xr12 ++ xvilvl.b xr3, xr17, xr13 ++ xvpermi.d xr4, xr0, 0x4E ++ xvpermi.d xr5, xr1, 0x4E ++ xvpermi.d xr6, xr2, 0x4E ++ xvpermi.d xr7, xr3, 0x4E ++ ++ vst vr0, a0, 0 ++ vstx vr4, a0, a1 ++ vstx vr1, a0, t0 ++ vstx vr5, a0, t1 ++ vst vr2, t4, 0 ++ vstx vr6, t4, a1 ++ vstx vr3, t4, t0 ++ vstx vr7, t4, t1 ++.END_WEIGHT_H264_PIXELS16_8_LASX: ++endfunc ++ ++function ff_weight_h264_pixels8_8_lsx ++ slli.d t0, a1, 1 ++ slli.d t2, a1, 2 ++ add.d t1, t0, a1 ++ addi.d t3, zero, 8 ++ ++ sll.d a5, a5, a3 ++ vreplgr2vr.b vr20, a4 //weight ++ vreplgr2vr.h vr8, a5 //offset ++ vreplgr2vr.h vr9, a3 //log2_denom ++ ++ fld.d f0, a0, 0 ++ fldx.d f1, a0, a1 ++ fldx.d f2, a0, t0 ++ fldx.d f3, a0, t1 ++ vilvl.d vr4, vr1, vr0 ++ vilvl.d vr5, vr3, vr2 ++ ++ vmulwev.h.bu.b vr10, vr4, vr20 ++ vmulwev.h.bu.b vr11, vr5, vr20 ++ vmulwod.h.bu.b vr12, vr4, vr20 ++ vmulwod.h.bu.b vr13, vr5, vr20 ++ vsadd.h vr0, vr8, vr10 ++ vsadd.h vr1, vr8, vr11 ++ vsadd.h vr2, vr8, vr12 ++ vsadd.h vr3, vr8, vr13 ++ ++ vssrarn.bu.h vr0, vr0, vr9 ++ vssrarn.bu.h vr1, vr1, vr9 ++ vssrarn.bu.h vr2, vr2, vr9 ++ vssrarn.bu.h vr3, vr3, vr9 ++ ++ vilvl.b vr4, vr2, vr0 ++ vilvl.b vr5, vr3, vr1 ++ vbsrl.v vr0, vr4, 8 ++ vbsrl.v vr1, vr5, 8 ++ ++ fst.d f4, a0, 0 ++ fstx.d f0, a0, a1 ++ fstx.d f5, a0, t0 ++ fstx.d f1, a0, t1 ++ ++ blt a2, t3, .END_WEIGHT_H264_PIXELS8 ++ add.d a0, a0, t2 ++ addi.d t3, zero, 16 ++ fld.d f0, a0, 0 ++ fldx.d f1, a0, a1 ++ fldx.d f2, a0, t0 ++ fldx.d f3, a0, t1 ++ vilvl.d vr4, vr1, vr0 ++ vilvl.d vr5, vr3, vr2 ++ ++ vmulwev.h.bu.b vr10, vr4, vr20 ++ vmulwev.h.bu.b vr11, vr5, vr20 ++ vmulwod.h.bu.b vr12, vr4, vr20 ++ vmulwod.h.bu.b vr13, vr5, vr20 ++ vsadd.h vr0, vr8, vr10 ++ vsadd.h vr1, vr8, vr11 ++ vsadd.h vr2, vr8, vr12 ++ vsadd.h vr3, vr8, vr13 ++ ++ vssrarn.bu.h vr0, vr0, vr9 ++ vssrarn.bu.h vr1, vr1, vr9 ++ vssrarn.bu.h vr2, vr2, vr9 ++ vssrarn.bu.h vr3, vr3, vr9 ++ ++ vilvl.b vr4, vr2, vr0 ++ vilvl.b vr5, vr3, vr1 ++ vbsrl.v vr0, vr4, 8 ++ vbsrl.v vr1, vr5, 8 ++ ++ fst.d f4, a0, 0 ++ fstx.d f0, a0, a1 ++ fstx.d f5, a0, t0 ++ fstx.d f1, a0, t1 ++ blt a2, t3, .END_WEIGHT_H264_PIXELS8 ++ add.d a0, a0, t2 ++ add.d t4, a0, t2 ++ ++ fld.d f0, a0, 0 ++ fldx.d f1, a0, a1 ++ fldx.d f2, a0, t0 ++ fldx.d f3, a0, t1 ++ fld.d f4, t4, 0 ++ fldx.d f5, t4, a1 ++ fldx.d f6, t4, t0 ++ fldx.d f7, t4, t1 ++ ++ vilvl.d vr10, vr1, vr0 ++ vilvl.d vr11, vr3, vr2 ++ vilvl.d vr12, vr5, vr4 ++ vilvl.d vr13, vr7, vr6 ++ ++ vmulwev.h.bu.b vr0, vr10, vr20 ++ vmulwev.h.bu.b vr1, vr11, vr20 ++ vmulwev.h.bu.b vr2, vr12, vr20 ++ vmulwev.h.bu.b vr3, vr13, vr20 ++ vmulwod.h.bu.b vr4, vr10, vr20 ++ vmulwod.h.bu.b vr5, vr11, vr20 ++ vmulwod.h.bu.b vr6, vr12, vr20 ++ vmulwod.h.bu.b vr7, vr13, vr20 ++ ++ vsadd.h vr0, vr8, vr0 ++ vsadd.h vr1, vr8, vr1 ++ vsadd.h vr2, vr8, vr2 ++ vsadd.h vr3, vr8, vr3 ++ vsadd.h vr4, vr8, vr4 ++ vsadd.h vr5, vr8, vr5 ++ vsadd.h vr6, vr8, vr6 ++ vsadd.h vr7, vr8, vr7 ++ ++ vssrarn.bu.h vr10, vr0, vr9 ++ vssrarn.bu.h vr11, vr1, vr9 ++ vssrarn.bu.h vr12, vr2, vr9 ++ vssrarn.bu.h vr13, vr3, vr9 ++ vssrarn.bu.h vr14, vr4, vr9 ++ vssrarn.bu.h vr15, vr5, vr9 ++ vssrarn.bu.h vr16, vr6, vr9 ++ vssrarn.bu.h vr17, vr7, vr9 ++ ++ vilvl.b vr0, vr14, vr10 ++ vilvl.b vr2, vr15, vr11 ++ vilvl.b vr4, vr16, vr12 ++ vilvl.b vr6, vr17, vr13 ++ ++ vbsrl.v vr1, vr0, 8 ++ vbsrl.v vr3, vr2, 8 ++ vbsrl.v vr5, vr4, 8 ++ vbsrl.v vr7, vr6, 8 ++ ++ fst.d f0, a0, 0 ++ fstx.d f1, a0, a1 ++ fstx.d f2, a0, t0 ++ fstx.d f3, a0, t1 ++ fst.d f4, t4, 0 ++ fstx.d f5, t4, a1 ++ fstx.d f6, t4, t0 ++ fstx.d f7, t4, t1 ++.END_WEIGHT_H264_PIXELS8: ++endfunc ++ ++function ff_weight_h264_pixels8_8_lasx ++ slli.d t0, a1, 1 ++ slli.d t2, a1, 2 ++ add.d t1, t0, a1 ++ addi.d t3, zero, 8 ++ ++ sll.d a5, a5, a3 ++ xvreplgr2vr.b xr20, a4 //weight ++ xvreplgr2vr.h xr8, a5 //offset ++ xvreplgr2vr.h xr9, a3 //log2_denom ++ ++ fld.d f0, a0, 0 ++ fldx.d f1, a0, a1 ++ fldx.d f2, a0, t0 ++ fldx.d f3, a0, t1 ++ vilvl.d vr4, vr1, vr0 ++ vilvl.d vr5, vr3, vr2 ++ xvpermi.q xr5, xr4, 0x20 ++ ++ xvmulwev.h.bu.b xr11, xr5, xr20 ++ xvmulwod.h.bu.b xr13, xr5, xr20 ++ xvsadd.h xr1, xr8, xr11 ++ xvsadd.h xr3, xr8, xr13 ++ ++ xvssrarn.bu.h xr1, xr1, xr9 ++ xvssrarn.bu.h xr3, xr3, xr9 ++ xvilvl.b xr4, xr3, xr1 ++ xvpermi.d xr5, xr4, 0x4E ++ vbsrl.v vr0, vr4, 8 ++ vbsrl.v vr1, vr5, 8 ++ ++ fst.d f4, a0, 0 ++ fstx.d f0, a0, a1 ++ fstx.d f5, a0, t0 ++ fstx.d f1, a0, t1 ++ ++ blt a2, t3, .END_WEIGHT_H264_PIXELS8_LASX ++ add.d a0, a0, t2 ++ addi.d t3, zero, 16 ++ fld.d f0, a0, 0 ++ fldx.d f1, a0, a1 ++ fldx.d f2, a0, t0 ++ fldx.d f3, a0, t1 ++ vilvl.d vr4, vr1, vr0 ++ vilvl.d vr5, vr3, vr2 ++ xvpermi.q xr5, xr4, 0x20 ++ ++ xvmulwev.h.bu.b xr11, xr5, xr20 ++ xvmulwod.h.bu.b xr13, xr5, xr20 ++ xvsadd.h xr1, xr8, xr11 ++ xvsadd.h xr3, xr8, xr13 ++ ++ xvssrarn.bu.h xr1, xr1, xr9 ++ xvssrarn.bu.h xr3, xr3, xr9 ++ xvilvl.b xr4, xr3, xr1 ++ xvpermi.d xr5, xr4, 0x4E ++ vbsrl.v vr0, vr4, 8 ++ vbsrl.v vr1, vr5, 8 ++ ++ fst.d f4, a0, 0 ++ fstx.d f0, a0, a1 ++ fstx.d f5, a0, t0 ++ fstx.d f1, a0, t1 ++ ++ blt a2, t3, .END_WEIGHT_H264_PIXELS8_LASX ++ add.d a0, a0, t2 ++ add.d t4, a0, t2 ++ ++ fld.d f0, a0, 0 ++ fldx.d f1, a0, a1 ++ fldx.d f2, a0, t0 ++ fldx.d f3, a0, t1 ++ fld.d f4, t4, 0 ++ fldx.d f5, t4, a1 ++ fldx.d f6, t4, t0 ++ fldx.d f7, t4, t1 ++ ++ vilvl.d vr10, vr1, vr0 ++ vilvl.d vr11, vr3, vr2 ++ vilvl.d vr12, vr5, vr4 ++ vilvl.d vr13, vr7, vr6 ++ xvpermi.q xr11, xr10, 0x20 ++ xvpermi.q xr13, xr12, 0x20 ++ ++ xvmulwev.h.bu.b xr1, xr11, xr20 ++ xvmulwev.h.bu.b xr3, xr13, xr20 ++ xvmulwod.h.bu.b xr5, xr11, xr20 ++ xvmulwod.h.bu.b xr7, xr13, xr20 ++ ++ xvsadd.h xr1, xr8, xr1 ++ xvsadd.h xr3, xr8, xr3 ++ xvsadd.h xr5, xr8, xr5 ++ xvsadd.h xr7, xr8, xr7 ++ ++ xvssrarn.bu.h xr11, xr1, xr9 ++ xvssrarn.bu.h xr13, xr3, xr9 ++ xvssrarn.bu.h xr15, xr5, xr9 ++ xvssrarn.bu.h xr17, xr7, xr9 ++ ++ xvilvl.b xr0, xr15, xr11 ++ xvilvl.b xr4, xr17, xr13 ++ xvpermi.d xr2, xr0, 0x4E ++ xvpermi.d xr6, xr4, 0x4E ++ vbsrl.v vr1, vr0, 8 ++ vbsrl.v vr3, vr2, 8 ++ vbsrl.v vr5, vr4, 8 ++ vbsrl.v vr7, vr6, 8 ++ ++ fst.d f0, a0, 0 ++ fstx.d f1, a0, a1 ++ fstx.d f2, a0, t0 ++ fstx.d f3, a0, t1 ++ fst.d f4, t4, 0 ++ fstx.d f5, t4, a1 ++ fstx.d f6, t4, t0 ++ fstx.d f7, t4, t1 ++.END_WEIGHT_H264_PIXELS8_LASX: ++endfunc ++ ++//LSX optimization is enough for this function. ++function ff_weight_h264_pixels4_8_lsx ++ slli.d t0, a1, 1 ++ slli.d t2, a1, 2 ++ add.d t1, t0, a1 ++ addi.d t3, zero, 4 ++ ++ sll.d a5, a5, a3 ++ vreplgr2vr.b vr20, a4 //weight ++ vreplgr2vr.h vr8, a5 //offset ++ vreplgr2vr.h vr9, a3 //log2_denom ++ ++ fld.s f0, a0, 0 ++ fldx.s f1, a0, a1 ++ vilvl.w vr4, vr1, vr0 ++ vilvl.b vr5, vr4, vr4 ++ vmulwev.h.bu.b vr10, vr5, vr20 ++ vsadd.h vr0, vr8, vr10 ++ vssrarn.bu.h vr0, vr0, vr9 ++ vbsrl.v vr1, vr0, 4 ++ ++ fst.s f0, a0, 0 ++ fstx.s f1, a0, a1 ++ blt a2, t3, .END_WEIGHT_H264_PIXELS4 ++ addi.d t3, zero, 8 ++ fldx.s f0, a0, t0 ++ fldx.s f1, a0, t1 ++ vilvl.w vr4, vr1, vr0 ++ vilvl.b vr5, vr4, vr4 ++ ++ vmulwev.h.bu.b vr10, vr5, vr20 ++ vsadd.h vr0, vr8, vr10 ++ vssrarn.bu.h vr0, vr0, vr9 ++ vbsrl.v vr1, vr0, 4 ++ fstx.s f0, a0, t0 ++ fstx.s f1, a0, t1 ++ blt a2, t3, .END_WEIGHT_H264_PIXELS4 ++ add.d a0, a0, t2 ++ ++ fld.s f0, a0, 0 ++ fldx.s f1, a0, a1 ++ fldx.s f2, a0, t0 ++ fldx.s f3, a0, t1 ++ ++ vilvl.w vr4, vr1, vr0 ++ vilvl.w vr5, vr3, vr2 ++ vilvl.b vr6, vr5, vr4 ++ ++ vmulwev.h.bu.b vr10, vr6, vr20 ++ vmulwod.h.bu.b vr11, vr6, vr20 ++ vsadd.h vr0, vr8, vr10 ++ vsadd.h vr1, vr8, vr11 ++ vssrarn.bu.h vr10, vr0, vr9 ++ vssrarn.bu.h vr11, vr1, vr9 ++ vbsrl.v vr12, vr10, 4 ++ vbsrl.v vr13, vr11, 4 ++ ++ fst.s f10, a0, 0 ++ fstx.s f12, a0, a1 ++ fstx.s f11, a0, t0 ++ fstx.s f13, a0, t1 ++.END_WEIGHT_H264_PIXELS4: ++endfunc ++ ++function ff_h264_add_pixels4_8_lsx ++ slli.d t0, a2, 1 ++ add.d t1, t0, a2 ++ vld vr0, a1, 0 ++ vld vr1, a1, 16 ++ vldi vr2, 0 ++ fld.s f3, a0, 0 ++ fldx.s f4, a0, a2 ++ fldx.s f5, a0, t0 ++ fldx.s f6, a0, t1 ++ vilvl.w vr7, vr4, vr3 ++ vilvl.w vr8, vr6, vr5 ++ vilvl.b vr9, vr2, vr7 ++ vilvl.b vr10, vr2, vr8 ++ vadd.h vr11, vr0, vr9 ++ vadd.h vr12, vr1, vr10 ++ vpickev.b vr0, vr12, vr11 ++ vbsrl.v vr3, vr0, 4 ++ vbsrl.v vr4, vr0, 8 ++ vbsrl.v vr5, vr0, 12 ++ fst.s f0, a0, 0 ++ fstx.s f3, a0, a2 ++ fstx.s f4, a0, t0 ++ fstx.s f5, a0, t1 ++ vst vr2, a1, 0 ++ vst vr2, a1, 16 ++endfunc ++ ++function ff_h264_add_pixels8_8_lsx ++ slli.d t0, a2, 1 ++ slli.d t2, a2, 2 ++ add.d t1, t0, a2 ++ add.d t3, a0, t2 ++ vldi vr0, 0 ++ vld vr1, a1, 0 ++ vld vr2, a1, 16 ++ vld vr3, a1, 32 ++ vld vr4, a1, 48 ++ vld vr5, a1, 64 ++ vld vr6, a1, 80 ++ vld vr7, a1, 96 ++ vld vr8, a1, 112 ++ fld.d f10, a0, 0 ++ fldx.d f11, a0, a2 ++ fldx.d f12, a0, t0 ++ fldx.d f13, a0, t1 ++ fld.d f14, t3, 0 ++ fldx.d f15, t3, a2 ++ fldx.d f16, t3, t0 ++ fldx.d f17, t3, t1 ++ vilvl.b vr10, vr0, vr10 ++ vilvl.b vr11, vr0, vr11 ++ vilvl.b vr12, vr0, vr12 ++ vilvl.b vr13, vr0, vr13 ++ vilvl.b vr14, vr0, vr14 ++ vilvl.b vr15, vr0, vr15 ++ vilvl.b vr16, vr0, vr16 ++ vilvl.b vr17, vr0, vr17 ++ vadd.h vr1, vr1, vr10 ++ vadd.h vr2, vr2, vr11 ++ vadd.h vr3, vr3, vr12 ++ vadd.h vr4, vr4, vr13 ++ vadd.h vr5, vr5, vr14 ++ vadd.h vr6, vr6, vr15 ++ vadd.h vr7, vr7, vr16 ++ vadd.h vr8, vr8, vr17 ++ vpickev.b vr10, vr2, vr1 ++ vpickev.b vr12, vr4, vr3 ++ vpickev.b vr14, vr6, vr5 ++ vpickev.b vr16, vr8, vr7 ++ vbsrl.v vr11, vr10, 8 ++ vbsrl.v vr13, vr12, 8 ++ vbsrl.v vr15, vr14, 8 ++ vbsrl.v vr17, vr16, 8 ++ vst vr0, a1, 0 ++ vst vr0, a1, 16 ++ vst vr0, a1, 32 ++ vst vr0, a1, 48 ++ vst vr0, a1, 64 ++ vst vr0, a1, 80 ++ vst vr0, a1, 96 ++ vst vr0, a1, 112 ++ fst.d f10, a0, 0 ++ fstx.d f11, a0, a2 ++ fstx.d f12, a0, t0 ++ fstx.d f13, a0, t1 ++ fst.d f14, t3, 0 ++ fstx.d f15, t3, a2 ++ fstx.d f16, t3, t0 ++ fstx.d f17, t3, t1 ++endfunc ++ ++const cnst_value ++.byte 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2 ++.byte 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1 ++endconst ++ ++function ff_h264_loop_filter_strength_lsx ++ vldi vr0, 0 ++ ldptr.w t0, sp, 0 //mask_mv1 ++ ldptr.w t1, sp, 8 //field ++ beqz t1, .FIELD ++ la.local t2, cnst_value ++ vld vr1, t2, 0 ++ vld vr2, t2, 16 ++ b .END_FIELD ++.FIELD: ++ vldi vr1, 0x06 ++ vldi vr2, 0x03 ++.END_FIELD: ++ vldi vr3, 0x01 ++ slli.d a6, a6, 3 //step <<= 3 ++ slli.d a5, a5, 3 //edges <<= 3 ++ move t3, zero ++ slli.d t4, a6, 2 ++ move t5, a2 ++ move t6, a3 ++ move t7, a1 ++ move t8, a0 ++ slli.d t0, t0, 3 ++.ITERATION_FIR: ++ bge t3, a5, .END_ITERATION_FIR ++ vand.v vr20, vr20, vr0 ++ and t2, t0, t3 ++ bnez t2, .MASK_MV_FIR ++ beqz a4, .BIDIR_FIR ++ vld vr4, t5, 4 ++ vld vr5, t5, 44 ++ vld vr6, t5, 12 ++ vld vr7, t5, 52 ++ vilvl.w vr4, vr5, vr4 ++ vilvl.w vr6, vr6, vr6 ++ vilvl.w vr7, vr7, vr7 ++ vshuf4i.h vr5, vr4, 0x4e ++ vsub.b vr6, vr6, vr4 ++ vsub.b vr7, vr7, vr5 ++ vor.v vr6, vr6, vr7 ++ vld vr10, t6, 16 ++ vld vr11, t6, 48 ++ vld vr12, t6, 208 ++ vld vr8, t6, 176 ++ vsub.h vr13, vr10, vr11 ++ vsub.h vr14, vr10, vr12 ++ vsub.h vr15, vr8, vr11 ++ vsub.h vr16, vr8, vr12 ++ vssrarni.b.h vr14, vr13, 0 ++ vssrarni.b.h vr16, vr15, 0 ++ vadd.b vr14, vr2, vr14 ++ vadd.b vr16, vr2, vr16 ++ vssub.bu vr14, vr14, vr1 ++ vssub.bu vr16, vr16, vr1 ++ vssrarni.b.h vr14, vr14, 0 ++ vssrarni.b.h vr16, vr16, 0 ++ vor.v vr20, vr6, vr14 ++ vshuf4i.h vr16, vr16, 0x4e ++ vor.v vr20, vr20, vr16 ++ vshuf4i.h vr21, vr20, 0x4e ++ vmin.bu vr20, vr20, vr21 ++ b .MASK_MV_FIR ++.BIDIR_FIR: ++ vld vr4, t5, 4 ++ vld vr5, t5, 12 ++ vld vr10, t6, 16 ++ vld vr11, t6, 48 ++ vsub.h vr12, vr11, vr10 ++ vssrarni.b.h vr12, vr12, 0 ++ vadd.b vr13, vr12, vr2 ++ vssub.bu vr14, vr13, vr1 ++ vsat.h vr15, vr14, 7 ++ vpickev.b vr20, vr15, vr15 ++ vsub.b vr6, vr5, vr4 ++ vor.v vr20, vr20, vr6 ++.MASK_MV_FIR: ++ vld vr4, t7, 12 ++ vld vr5, t7, 4 ++ vor.v vr6, vr4, vr5 ++ vmin.bu vr6, vr6, vr3 ++ vmin.bu vr20, vr20, vr3 ++ vslli.h vr6, vr6, 1 ++ vmax.bu vr6, vr20, vr6 ++ vilvl.b vr7, vr0, vr6 ++ add.d t3, t3, a6 ++ fst.d f7, t8, 32 ++ add.d t5, t5, a6 ++ add.d t6, t6, t4 ++ add.d t7, t7, a6 ++ add.d t8, t8, a6 ++ b .ITERATION_FIR ++.END_ITERATION_FIR: ++ move t3, zero ++ addi.d a5, zero, 32 ++ vldi vr21, 0xff ++ move t5, a2 ++ move t6, a3 ++ move t7, a1 ++ move t8, a0 ++ slli.d a7, a7, 3 ++.ITERATION_SEC: ++ bge t3, a5, .END_ITERATION_SEC ++ vand.v vr20, vr20, vr21 ++ and t2, a7, t3 ++ bnez t2, .MASK_MV_SEC ++ beqz a4, .BIDIR_SEC ++ vld vr4, t5, 11 ++ vld vr5, t5, 51 ++ vld vr6, t5, 12 ++ vld vr7, t5, 52 ++ vilvl.w vr4, vr5, vr4 ++ vilvl.w vr6, vr6, vr6 ++ vilvl.w vr7, vr7, vr7 ++ vshuf4i.h vr5, vr4, 0x4e ++ vsub.b vr6, vr6, vr4 ++ vsub.b vr7, vr7, vr5 ++ vor.v vr6, vr6, vr7 ++ vld vr10, t6, 44 ++ vld vr11, t6, 48 ++ vld vr12, t6, 208 ++ vld vr8, t6, 204 ++ vsub.h vr13, vr10, vr11 ++ vsub.h vr14, vr10, vr12 ++ vsub.h vr15, vr8, vr11 ++ vsub.h vr16, vr8, vr12 ++ vssrarni.b.h vr14, vr13, 0 ++ vssrarni.b.h vr16, vr15, 0 ++ vadd.b vr14, vr2, vr14 ++ vadd.b vr16, vr2, vr16 ++ vssub.bu vr14, vr14, vr1 ++ vssub.bu vr16, vr16, vr1 ++ vssrarni.b.h vr14, vr14, 0 ++ vssrarni.b.h vr16, vr16, 0 ++ vor.v vr20, vr6, vr14 ++ vshuf4i.h vr16, vr16, 0x4e ++ vor.v vr20, vr20, vr16 ++ vshuf4i.h vr22, vr20, 0x4e ++ vmin.bu vr20, vr20, vr22 ++ b .MASK_MV_SEC ++.BIDIR_SEC: ++ vld vr4, t5, 11 ++ vld vr5, t5, 12 ++ vld vr10, t6, 44 ++ vld vr11, t6, 48 ++ vsub.h vr12, vr11, vr10 ++ vssrarni.b.h vr12, vr12, 0 ++ vadd.b vr13, vr12, vr2 ++ vssub.bu vr14, vr13, vr1 ++ vssrarni.b.h vr14, vr14, 0 ++ vsub.b vr6, vr5, vr4 ++ vor.v vr20, vr14, vr6 ++.MASK_MV_SEC: ++ vld vr4, t7, 12 ++ vld vr5, t7, 11 ++ vor.v vr6, vr4, vr5 ++ vmin.bu vr6, vr6, vr3 ++ vmin.bu vr20, vr20, vr3 ++ vslli.h vr6, vr6, 1 ++ vmax.bu vr6, vr20, vr6 ++ vilvl.b vr7, vr0, vr6 ++ addi.d t3, t3, 8 ++ fst.d f7, t8, 0 ++ addi.d t5, t5, 8 ++ addi.d t6, t6, 32 ++ addi.d t7, t7, 8 ++ addi.d t8, t8, 8 ++ b .ITERATION_SEC ++.END_ITERATION_SEC: ++ vld vr4, a0, 0 ++ vld vr5, a0, 16 ++ vilvh.d vr6, vr4, vr4 ++ vilvh.d vr7, vr5, vr5 ++ LSX_TRANSPOSE4x4_H vr4, vr6, vr5, vr7, vr6, vr7, vr8, vr9, vr10, vr11 ++ vilvl.d vr4, vr7, vr6 ++ vilvl.d vr5, vr9, vr8 ++ vst vr4, a0, 0 ++ vst vr5, a0, 16 ++endfunc +diff --git a/libavcodec/loongarch/h264dsp_init_loongarch.c b/libavcodec/loongarch/h264dsp_init_loongarch.c +index 37633c3e51..90d07db48b 100644 +--- a/libavcodec/loongarch/h264dsp_init_loongarch.c ++++ b/libavcodec/loongarch/h264dsp_init_loongarch.c +@@ -28,6 +28,47 @@ av_cold void ff_h264dsp_init_loongarch(H264DSPContext *c, const int bit_depth, + { + int cpu_flags = av_get_cpu_flags(); + ++ if (have_lsx(cpu_flags)) { ++ if (chroma_format_idc <= 1) ++ c->h264_loop_filter_strength = ff_h264_loop_filter_strength_lsx; ++ if (bit_depth == 8) { ++ c->h264_idct_add = ff_h264_idct_add_8_lsx; ++ c->h264_idct8_add = ff_h264_idct8_add_8_lsx; ++ c->h264_idct_dc_add = ff_h264_idct_dc_add_8_lsx; ++ c->h264_idct8_dc_add = ff_h264_idct8_dc_add_8_lsx; ++ ++ if (chroma_format_idc <= 1) { ++ c->h264_idct_add8 = ff_h264_idct_add8_8_lsx; ++ c->h264_h_loop_filter_chroma = ff_h264_h_lpf_chroma_8_lsx; ++ c->h264_h_loop_filter_chroma_intra = ff_h264_h_lpf_chroma_intra_8_lsx; ++ } else ++ c->h264_idct_add8 = ff_h264_idct_add8_422_8_lsx; ++ ++ c->h264_idct_add16 = ff_h264_idct_add16_8_lsx; ++ c->h264_idct8_add4 = ff_h264_idct8_add4_8_lsx; ++ c->h264_luma_dc_dequant_idct = ff_h264_luma_dc_dequant_idct_8_lsx; ++ c->h264_idct_add16intra = ff_h264_idct_add16_intra_8_lsx; ++ ++ c->h264_add_pixels4_clear = ff_h264_add_pixels4_8_lsx; ++ c->h264_add_pixels8_clear = ff_h264_add_pixels8_8_lsx; ++ c->h264_v_loop_filter_luma = ff_h264_v_lpf_luma_8_lsx; ++ c->h264_h_loop_filter_luma = ff_h264_h_lpf_luma_8_lsx; ++ c->h264_v_loop_filter_luma_intra = ff_h264_v_lpf_luma_intra_8_lsx; ++ c->h264_h_loop_filter_luma_intra = ff_h264_h_lpf_luma_intra_8_lsx; ++ c->h264_v_loop_filter_chroma = ff_h264_v_lpf_chroma_8_lsx; ++ ++ c->h264_v_loop_filter_chroma_intra = ff_h264_v_lpf_chroma_intra_8_lsx; ++ ++ c->biweight_h264_pixels_tab[0] = ff_biweight_h264_pixels16_8_lsx; ++ c->biweight_h264_pixels_tab[1] = ff_biweight_h264_pixels8_8_lsx; ++ c->biweight_h264_pixels_tab[2] = ff_biweight_h264_pixels4_8_lsx; ++ c->weight_h264_pixels_tab[0] = ff_weight_h264_pixels16_8_lsx; ++ c->weight_h264_pixels_tab[1] = ff_weight_h264_pixels8_8_lsx; ++ c->weight_h264_pixels_tab[2] = ff_weight_h264_pixels4_8_lsx; ++ c->h264_idct8_add = ff_h264_idct8_add_8_lsx; ++ c->h264_idct8_dc_add = ff_h264_idct8_dc_add_8_lsx; ++ } ++ } + if (have_lasx(cpu_flags)) { + if (chroma_format_idc <= 1) + c->h264_loop_filter_strength = ff_h264_loop_filter_strength_lasx; +@@ -38,38 +79,16 @@ av_cold void ff_h264dsp_init_loongarch(H264DSPContext *c, const int bit_depth, + c->h264_h_loop_filter_luma = ff_h264_h_lpf_luma_8_lasx; + c->h264_v_loop_filter_luma_intra = ff_h264_v_lpf_luma_intra_8_lasx; + c->h264_h_loop_filter_luma_intra = ff_h264_h_lpf_luma_intra_8_lasx; +- c->h264_v_loop_filter_chroma = ff_h264_v_lpf_chroma_8_lasx; +- +- if (chroma_format_idc <= 1) +- c->h264_h_loop_filter_chroma = ff_h264_h_lpf_chroma_8_lasx; +- c->h264_v_loop_filter_chroma_intra = ff_h264_v_lpf_chroma_intra_8_lasx; +- +- if (chroma_format_idc <= 1) +- c->h264_h_loop_filter_chroma_intra = ff_h264_h_lpf_chroma_intra_8_lasx; + + /* Weighted MC */ + c->weight_h264_pixels_tab[0] = ff_weight_h264_pixels16_8_lasx; + c->weight_h264_pixels_tab[1] = ff_weight_h264_pixels8_8_lasx; +- c->weight_h264_pixels_tab[2] = ff_weight_h264_pixels4_8_lasx; + + c->biweight_h264_pixels_tab[0] = ff_biweight_h264_pixels16_8_lasx; + c->biweight_h264_pixels_tab[1] = ff_biweight_h264_pixels8_8_lasx; +- c->biweight_h264_pixels_tab[2] = ff_biweight_h264_pixels4_8_lasx; +- +- c->h264_idct_add = ff_h264_idct_add_lasx; +- c->h264_idct8_add = ff_h264_idct8_addblk_lasx; +- c->h264_idct_dc_add = ff_h264_idct4x4_addblk_dc_lasx; +- c->h264_idct8_dc_add = ff_h264_idct8_dc_addblk_lasx; +- c->h264_idct_add16 = ff_h264_idct_add16_lasx; +- c->h264_idct8_add4 = ff_h264_idct8_add4_lasx; +- +- if (chroma_format_idc <= 1) +- c->h264_idct_add8 = ff_h264_idct_add8_lasx; +- else +- c->h264_idct_add8 = ff_h264_idct_add8_422_lasx; + +- c->h264_idct_add16intra = ff_h264_idct_add16_intra_lasx; +- c->h264_luma_dc_dequant_idct = ff_h264_deq_idct_luma_dc_lasx; ++ c->h264_idct8_add = ff_h264_idct8_add_8_lasx; ++ c->h264_idct8_dc_add = ff_h264_idct8_dc_add_8_lasx; + } + } + } +diff --git a/libavcodec/loongarch/h264dsp_lasx.c b/libavcodec/loongarch/h264dsp_lasx.c +index 7fd4cedf7e..7b0200cac7 100644 +--- a/libavcodec/loongarch/h264dsp_lasx.c ++++ b/libavcodec/loongarch/h264dsp_lasx.c +@@ -64,13 +64,13 @@ + q0_or_p0_out = __lasx_xvclip255_h(q0_or_p0_out); \ + } + +-void ff_h264_h_lpf_luma_8_lasx(uint8_t *data, ptrdiff_t img_width, ++void ff_h264_h_lpf_luma_8_lasx(uint8_t *data, int img_width, + int alpha_in, int beta_in, int8_t *tc) + { +- ptrdiff_t img_width_2x = img_width << 1; +- ptrdiff_t img_width_4x = img_width << 2; +- ptrdiff_t img_width_8x = img_width << 3; +- ptrdiff_t img_width_3x = img_width_2x + img_width; ++ int img_width_2x = img_width << 1; ++ int img_width_4x = img_width << 2; ++ int img_width_8x = img_width << 3; ++ int img_width_3x = img_width_2x + img_width; + __m256i tmp_vec0, bs_vec; + __m256i tc_vec = {0x0101010100000000, 0x0303030302020202, + 0x0101010100000000, 0x0303030302020202}; +@@ -241,11 +241,11 @@ void ff_h264_h_lpf_luma_8_lasx(uint8_t *data, ptrdiff_t img_width, + } + } + +-void ff_h264_v_lpf_luma_8_lasx(uint8_t *data, ptrdiff_t img_width, ++void ff_h264_v_lpf_luma_8_lasx(uint8_t *data, int img_width, + int alpha_in, int beta_in, int8_t *tc) + { +- ptrdiff_t img_width_2x = img_width << 1; +- ptrdiff_t img_width_3x = img_width + img_width_2x; ++ int img_width_2x = img_width << 1; ++ int img_width_3x = img_width + img_width_2x; + __m256i tmp_vec0, bs_vec; + __m256i tc_vec = {0x0101010100000000, 0x0303030302020202, + 0x0101010100000000, 0x0303030302020202}; +@@ -363,184 +363,6 @@ void ff_h264_v_lpf_luma_8_lasx(uint8_t *data, ptrdiff_t img_width, + } + } + +-void ff_h264_h_lpf_chroma_8_lasx(uint8_t *data, ptrdiff_t img_width, +- int alpha_in, int beta_in, int8_t *tc) +-{ +- __m256i tmp_vec0, bs_vec; +- __m256i tc_vec = {0x0303020201010000, 0x0303020201010000, 0x0, 0x0}; +- __m256i zero = __lasx_xvldi(0); +- ptrdiff_t img_width_2x = img_width << 1; +- ptrdiff_t img_width_4x = img_width << 2; +- ptrdiff_t img_width_3x = img_width_2x + img_width; +- +- tmp_vec0 = __lasx_xvldrepl_w((uint32_t*)tc, 0); +- tc_vec = __lasx_xvshuf_b(tmp_vec0, tmp_vec0, tc_vec); +- bs_vec = __lasx_xvslti_b(tc_vec, 0); +- bs_vec = __lasx_xvxori_b(bs_vec, 255); +- bs_vec = __lasx_xvandi_b(bs_vec, 1); +- bs_vec = __lasx_xvpermi_q(zero, bs_vec, 0x30); +- +- if (__lasx_xbnz_v(bs_vec)) { +- uint8_t *src = data - 2; +- __m256i p1_org, p0_org, q0_org, q1_org; +- __m256i p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha, beta; +- __m256i is_less_than, is_less_than_beta, is_less_than_alpha; +- __m256i is_bs_greater_than0; +- +- is_bs_greater_than0 = __lasx_xvslt_bu(zero, bs_vec); +- +- { +- __m256i row0, row1, row2, row3, row4, row5, row6, row7; +- +- DUP4_ARG2(__lasx_xvldx, src, 0, src, img_width, src, img_width_2x, +- src, img_width_3x, row0, row1, row2, row3); +- src += img_width_4x; +- DUP4_ARG2(__lasx_xvldx, src, 0, src, img_width, src, img_width_2x, +- src, img_width_3x, row4, row5, row6, row7); +- src -= img_width_4x; +- /* LASX_TRANSPOSE8x4_B */ +- DUP4_ARG2(__lasx_xvilvl_b, row2, row0, row3, row1, row6, row4, +- row7, row5, p1_org, p0_org, q0_org, q1_org); +- row0 = __lasx_xvilvl_b(p0_org, p1_org); +- row1 = __lasx_xvilvl_b(q1_org, q0_org); +- row3 = __lasx_xvilvh_w(row1, row0); +- row2 = __lasx_xvilvl_w(row1, row0); +- p1_org = __lasx_xvpermi_d(row2, 0x00); +- p0_org = __lasx_xvpermi_d(row2, 0x55); +- q0_org = __lasx_xvpermi_d(row3, 0x00); +- q1_org = __lasx_xvpermi_d(row3, 0x55); +- } +- +- p0_asub_q0 = __lasx_xvabsd_bu(p0_org, q0_org); +- p1_asub_p0 = __lasx_xvabsd_bu(p1_org, p0_org); +- q1_asub_q0 = __lasx_xvabsd_bu(q1_org, q0_org); +- +- alpha = __lasx_xvreplgr2vr_b(alpha_in); +- beta = __lasx_xvreplgr2vr_b(beta_in); +- +- is_less_than_alpha = __lasx_xvslt_bu(p0_asub_q0, alpha); +- is_less_than_beta = __lasx_xvslt_bu(p1_asub_p0, beta); +- is_less_than = is_less_than_alpha & is_less_than_beta; +- is_less_than_beta = __lasx_xvslt_bu(q1_asub_q0, beta); +- is_less_than = is_less_than_beta & is_less_than; +- is_less_than = is_less_than & is_bs_greater_than0; +- +- if (__lasx_xbnz_v(is_less_than)) { +- __m256i p1_org_h, p0_org_h, q0_org_h, q1_org_h; +- +- p1_org_h = __lasx_vext2xv_hu_bu(p1_org); +- p0_org_h = __lasx_vext2xv_hu_bu(p0_org); +- q0_org_h = __lasx_vext2xv_hu_bu(q0_org); +- q1_org_h = __lasx_vext2xv_hu_bu(q1_org); +- +- { +- __m256i tc_h, neg_thresh_h, p0_h, q0_h; +- +- neg_thresh_h = __lasx_xvneg_b(tc_vec); +- neg_thresh_h = __lasx_vext2xv_h_b(neg_thresh_h); +- tc_h = __lasx_vext2xv_hu_bu(tc_vec); +- +- AVC_LPF_P0Q0(q0_org_h, p0_org_h, p1_org_h, q1_org_h, +- neg_thresh_h, tc_h, p0_h, q0_h); +- DUP2_ARG2(__lasx_xvpickev_b, p0_h, p0_h, q0_h, q0_h, +- p0_h, q0_h); +- DUP2_ARG2(__lasx_xvpermi_d, p0_h, 0xd8, q0_h, 0xd8, +- p0_h, q0_h); +- p0_org = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than); +- q0_org = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than); +- } +- +- p0_org = __lasx_xvilvl_b(q0_org, p0_org); +- src = data - 1; +- __lasx_xvstelm_h(p0_org, src, 0, 0); +- src += img_width; +- __lasx_xvstelm_h(p0_org, src, 0, 1); +- src += img_width; +- __lasx_xvstelm_h(p0_org, src, 0, 2); +- src += img_width; +- __lasx_xvstelm_h(p0_org, src, 0, 3); +- src += img_width; +- __lasx_xvstelm_h(p0_org, src, 0, 4); +- src += img_width; +- __lasx_xvstelm_h(p0_org, src, 0, 5); +- src += img_width; +- __lasx_xvstelm_h(p0_org, src, 0, 6); +- src += img_width; +- __lasx_xvstelm_h(p0_org, src, 0, 7); +- } +- } +-} +- +-void ff_h264_v_lpf_chroma_8_lasx(uint8_t *data, ptrdiff_t img_width, +- int alpha_in, int beta_in, int8_t *tc) +-{ +- int img_width_2x = img_width << 1; +- __m256i tmp_vec0, bs_vec; +- __m256i tc_vec = {0x0303020201010000, 0x0303020201010000, 0x0, 0x0}; +- __m256i zero = __lasx_xvldi(0); +- +- tmp_vec0 = __lasx_xvldrepl_w((uint32_t*)tc, 0); +- tc_vec = __lasx_xvshuf_b(tmp_vec0, tmp_vec0, tc_vec); +- bs_vec = __lasx_xvslti_b(tc_vec, 0); +- bs_vec = __lasx_xvxori_b(bs_vec, 255); +- bs_vec = __lasx_xvandi_b(bs_vec, 1); +- bs_vec = __lasx_xvpermi_q(zero, bs_vec, 0x30); +- +- if (__lasx_xbnz_v(bs_vec)) { +- __m256i p1_org, p0_org, q0_org, q1_org; +- __m256i p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha, beta; +- __m256i is_less_than, is_less_than_beta, is_less_than_alpha; +- __m256i is_bs_greater_than0; +- +- alpha = __lasx_xvreplgr2vr_b(alpha_in); +- beta = __lasx_xvreplgr2vr_b(beta_in); +- +- DUP2_ARG2(__lasx_xvldx, data, -img_width_2x, data, -img_width, +- p1_org, p0_org); +- DUP2_ARG2(__lasx_xvldx, data, 0, data, img_width, q0_org, q1_org); +- +- is_bs_greater_than0 = __lasx_xvslt_bu(zero, bs_vec); +- p0_asub_q0 = __lasx_xvabsd_bu(p0_org, q0_org); +- p1_asub_p0 = __lasx_xvabsd_bu(p1_org, p0_org); +- q1_asub_q0 = __lasx_xvabsd_bu(q1_org, q0_org); +- +- is_less_than_alpha = __lasx_xvslt_bu(p0_asub_q0, alpha); +- is_less_than_beta = __lasx_xvslt_bu(p1_asub_p0, beta); +- is_less_than = is_less_than_alpha & is_less_than_beta; +- is_less_than_beta = __lasx_xvslt_bu(q1_asub_q0, beta); +- is_less_than = is_less_than_beta & is_less_than; +- is_less_than = is_less_than & is_bs_greater_than0; +- +- if (__lasx_xbnz_v(is_less_than)) { +- __m256i p1_org_h, p0_org_h, q0_org_h, q1_org_h; +- +- p1_org_h = __lasx_vext2xv_hu_bu(p1_org); +- p0_org_h = __lasx_vext2xv_hu_bu(p0_org); +- q0_org_h = __lasx_vext2xv_hu_bu(q0_org); +- q1_org_h = __lasx_vext2xv_hu_bu(q1_org); +- +- { +- __m256i neg_thresh_h, tc_h, p0_h, q0_h; +- +- neg_thresh_h = __lasx_xvneg_b(tc_vec); +- neg_thresh_h = __lasx_vext2xv_h_b(neg_thresh_h); +- tc_h = __lasx_vext2xv_hu_bu(tc_vec); +- +- AVC_LPF_P0Q0(q0_org_h, p0_org_h, p1_org_h, q1_org_h, +- neg_thresh_h, tc_h, p0_h, q0_h); +- DUP2_ARG2(__lasx_xvpickev_b, p0_h, p0_h, q0_h, q0_h, +- p0_h, q0_h); +- DUP2_ARG2(__lasx_xvpermi_d, p0_h, 0xd8, q0_h, 0xd8, +- p0_h, q0_h); +- p0_h = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than); +- q0_h = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than); +- __lasx_xvstelm_d(p0_h, data - img_width, 0, 0); +- __lasx_xvstelm_d(q0_h, data, 0, 0); +- } +- } +- } +-} +- + #define AVC_LPF_P0P1P2_OR_Q0Q1Q2(p3_or_q3_org_in, p0_or_q0_org_in, \ + q3_or_p3_org_in, p1_or_q1_org_in, \ + p2_or_q2_org_in, q1_or_p1_org_in, \ +@@ -581,12 +403,12 @@ void ff_h264_v_lpf_chroma_8_lasx(uint8_t *data, ptrdiff_t img_width, + p0_or_q0_out = __lasx_xvsrar_h(p0_or_q0_out, const2); \ + } + +-void ff_h264_h_lpf_luma_intra_8_lasx(uint8_t *data, ptrdiff_t img_width, ++void ff_h264_h_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, + int alpha_in, int beta_in) + { +- ptrdiff_t img_width_2x = img_width << 1; +- ptrdiff_t img_width_4x = img_width << 2; +- ptrdiff_t img_width_3x = img_width_2x + img_width; ++ int img_width_2x = img_width << 1; ++ int img_width_4x = img_width << 2; ++ int img_width_3x = img_width_2x + img_width; + uint8_t *src = data - 4; + __m256i p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha, beta; + __m256i is_less_than, is_less_than_beta, is_less_than_alpha; +@@ -757,11 +579,11 @@ void ff_h264_h_lpf_luma_intra_8_lasx(uint8_t *data, ptrdiff_t img_width, + } + } + +-void ff_h264_v_lpf_luma_intra_8_lasx(uint8_t *data, ptrdiff_t img_width, ++void ff_h264_v_lpf_luma_intra_8_lasx(uint8_t *data, int img_width, + int alpha_in, int beta_in) + { +- ptrdiff_t img_width_2x = img_width << 1; +- ptrdiff_t img_width_3x = img_width_2x + img_width; ++ int img_width_2x = img_width << 1; ++ int img_width_3x = img_width_2x + img_width; + uint8_t *src = data - img_width_2x; + __m256i p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha, beta; + __m256i is_less_than, is_less_than_beta, is_less_than_alpha; +@@ -877,1160 +699,6 @@ void ff_h264_v_lpf_luma_intra_8_lasx(uint8_t *data, ptrdiff_t img_width, + } + } + +-void ff_h264_h_lpf_chroma_intra_8_lasx(uint8_t *data, ptrdiff_t img_width, +- int alpha_in, int beta_in) +-{ +- uint8_t *src = data - 2; +- ptrdiff_t img_width_2x = img_width << 1; +- ptrdiff_t img_width_4x = img_width << 2; +- ptrdiff_t img_width_3x = img_width_2x + img_width; +- __m256i p1_org, p0_org, q0_org, q1_org; +- __m256i p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha, beta; +- __m256i is_less_than, is_less_than_beta, is_less_than_alpha; +- +- { +- __m256i row0, row1, row2, row3, row4, row5, row6, row7; +- +- DUP4_ARG2(__lasx_xvldx, src, 0, src, img_width, src, img_width_2x, src, +- img_width_3x, row0, row1, row2, row3); +- src += img_width_4x; +- DUP4_ARG2(__lasx_xvldx, src, 0, src, img_width, src, img_width_2x, src, +- img_width_3x, row4, row5, row6, row7); +- +- /* LASX_TRANSPOSE8x4_B */ +- DUP4_ARG2(__lasx_xvilvl_b, row2, row0, row3, row1, row6, row4, row7, row5, +- p1_org, p0_org, q0_org, q1_org); +- row0 = __lasx_xvilvl_b(p0_org, p1_org); +- row1 = __lasx_xvilvl_b(q1_org, q0_org); +- row3 = __lasx_xvilvh_w(row1, row0); +- row2 = __lasx_xvilvl_w(row1, row0); +- p1_org = __lasx_xvpermi_d(row2, 0x00); +- p0_org = __lasx_xvpermi_d(row2, 0x55); +- q0_org = __lasx_xvpermi_d(row3, 0x00); +- q1_org = __lasx_xvpermi_d(row3, 0x55); +- } +- +- alpha = __lasx_xvreplgr2vr_b(alpha_in); +- beta = __lasx_xvreplgr2vr_b(beta_in); +- +- p0_asub_q0 = __lasx_xvabsd_bu(p0_org, q0_org); +- p1_asub_p0 = __lasx_xvabsd_bu(p1_org, p0_org); +- q1_asub_q0 = __lasx_xvabsd_bu(q1_org, q0_org); +- +- is_less_than_alpha = __lasx_xvslt_bu(p0_asub_q0, alpha); +- is_less_than_beta = __lasx_xvslt_bu(p1_asub_p0, beta); +- is_less_than = is_less_than_alpha & is_less_than_beta; +- is_less_than_beta = __lasx_xvslt_bu(q1_asub_q0, beta); +- is_less_than = is_less_than_beta & is_less_than; +- +- if (__lasx_xbnz_v(is_less_than)) { +- __m256i p0_h, q0_h, p1_org_h, p0_org_h, q0_org_h, q1_org_h; +- +- p1_org_h = __lasx_vext2xv_hu_bu(p1_org); +- p0_org_h = __lasx_vext2xv_hu_bu(p0_org); +- q0_org_h = __lasx_vext2xv_hu_bu(q0_org); +- q1_org_h = __lasx_vext2xv_hu_bu(q1_org); +- +- AVC_LPF_P0_OR_Q0(p0_org_h, q1_org_h, p1_org_h, p0_h); +- AVC_LPF_P0_OR_Q0(q0_org_h, p1_org_h, q1_org_h, q0_h); +- DUP2_ARG2(__lasx_xvpickev_b, p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); +- DUP2_ARG2(__lasx_xvpermi_d, p0_h, 0xd8, q0_h, 0xd8, p0_h, q0_h); +- p0_org = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than); +- q0_org = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than); +- } +- p0_org = __lasx_xvilvl_b(q0_org, p0_org); +- src = data - 1; +- __lasx_xvstelm_h(p0_org, src, 0, 0); +- src += img_width; +- __lasx_xvstelm_h(p0_org, src, 0, 1); +- src += img_width; +- __lasx_xvstelm_h(p0_org, src, 0, 2); +- src += img_width; +- __lasx_xvstelm_h(p0_org, src, 0, 3); +- src += img_width; +- __lasx_xvstelm_h(p0_org, src, 0, 4); +- src += img_width; +- __lasx_xvstelm_h(p0_org, src, 0, 5); +- src += img_width; +- __lasx_xvstelm_h(p0_org, src, 0, 6); +- src += img_width; +- __lasx_xvstelm_h(p0_org, src, 0, 7); +-} +- +-void ff_h264_v_lpf_chroma_intra_8_lasx(uint8_t *data, ptrdiff_t img_width, +- int alpha_in, int beta_in) +-{ +- ptrdiff_t img_width_2x = img_width << 1; +- __m256i p1_org, p0_org, q0_org, q1_org; +- __m256i p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha, beta; +- __m256i is_less_than, is_less_than_beta, is_less_than_alpha; +- +- alpha = __lasx_xvreplgr2vr_b(alpha_in); +- beta = __lasx_xvreplgr2vr_b(beta_in); +- +- p1_org = __lasx_xvldx(data, -img_width_2x); +- p0_org = __lasx_xvldx(data, -img_width); +- DUP2_ARG2(__lasx_xvldx, data, 0, data, img_width, q0_org, q1_org); +- +- p0_asub_q0 = __lasx_xvabsd_bu(p0_org, q0_org); +- p1_asub_p0 = __lasx_xvabsd_bu(p1_org, p0_org); +- q1_asub_q0 = __lasx_xvabsd_bu(q1_org, q0_org); +- +- is_less_than_alpha = __lasx_xvslt_bu(p0_asub_q0, alpha); +- is_less_than_beta = __lasx_xvslt_bu(p1_asub_p0, beta); +- is_less_than = is_less_than_alpha & is_less_than_beta; +- is_less_than_beta = __lasx_xvslt_bu(q1_asub_q0, beta); +- is_less_than = is_less_than_beta & is_less_than; +- +- if (__lasx_xbnz_v(is_less_than)) { +- __m256i p0_h, q0_h, p1_org_h, p0_org_h, q0_org_h, q1_org_h; +- +- p1_org_h = __lasx_vext2xv_hu_bu(p1_org); +- p0_org_h = __lasx_vext2xv_hu_bu(p0_org); +- q0_org_h = __lasx_vext2xv_hu_bu(q0_org); +- q1_org_h = __lasx_vext2xv_hu_bu(q1_org); +- +- AVC_LPF_P0_OR_Q0(p0_org_h, q1_org_h, p1_org_h, p0_h); +- AVC_LPF_P0_OR_Q0(q0_org_h, p1_org_h, q1_org_h, q0_h); +- DUP2_ARG2(__lasx_xvpickev_b, p0_h, p0_h, q0_h, q0_h, p0_h, q0_h); +- DUP2_ARG2(__lasx_xvpermi_d, p0_h, 0xd8, q0_h, 0xd8, p0_h, q0_h); +- p0_h = __lasx_xvbitsel_v(p0_org, p0_h, is_less_than); +- q0_h = __lasx_xvbitsel_v(q0_org, q0_h, is_less_than); +- __lasx_xvstelm_d(p0_h, data - img_width, 0, 0); +- __lasx_xvstelm_d(q0_h, data, 0, 0); +- } +-} +- +-void ff_biweight_h264_pixels16_8_lasx(uint8_t *dst, uint8_t *src, +- ptrdiff_t stride, int height, +- int log2_denom, int weight_dst, +- int weight_src, int offset_in) +-{ +- __m256i wgt; +- __m256i src0, src1, src2, src3; +- __m256i dst0, dst1, dst2, dst3; +- __m256i vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; +- __m256i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; +- __m256i denom, offset; +- int stride_2x = stride << 1; +- int stride_4x = stride << 2; +- int stride_3x = stride_2x + stride; +- +- offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom; +- offset_in += ((weight_src + weight_dst) << 7); +- log2_denom += 1; +- +- tmp0 = __lasx_xvreplgr2vr_b(weight_src); +- tmp1 = __lasx_xvreplgr2vr_b(weight_dst); +- wgt = __lasx_xvilvh_b(tmp1, tmp0); +- offset = __lasx_xvreplgr2vr_h(offset_in); +- denom = __lasx_xvreplgr2vr_h(log2_denom); +- +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, +- src, stride_3x, tmp0, tmp1, tmp2, tmp3); +- src += stride_4x; +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, +- src, stride_3x, tmp4, tmp5, tmp6, tmp7); +- src += stride_4x; +- DUP4_ARG3(__lasx_xvpermi_q, tmp1, tmp0, 0x20, tmp3, tmp2, 0x20, tmp5, tmp4, +- 0x20, tmp7, tmp6, 0x20, src0, src1, src2, src3); +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, +- dst, stride_3x, tmp0, tmp1, tmp2, tmp3); +- dst += stride_4x; +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, +- dst, stride_3x, tmp4, tmp5, tmp6, tmp7); +- dst -= stride_4x; +- DUP4_ARG3(__lasx_xvpermi_q, tmp1, tmp0, 0x20, tmp3, tmp2, 0x20, tmp5, tmp4, +- 0x20, tmp7, tmp6, 0x20, dst0, dst1, dst2, dst3); +- +- DUP4_ARG2(__lasx_xvxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); +- DUP4_ARG2(__lasx_xvxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, 128, +- dst0, dst1, dst2, dst3); +- DUP4_ARG2(__lasx_xvilvl_b, dst0, src0, dst1, src1, dst2, src2, +- dst3, src3, vec0, vec2, vec4, vec6); +- DUP4_ARG2(__lasx_xvilvh_b, dst0, src0, dst1, src1, dst2, src2, +- dst3, src3, vec1, vec3, vec5, vec7); +- +- DUP4_ARG3(__lasx_xvdp2add_h_b, offset, wgt, vec0, offset, wgt, vec1, +- offset, wgt, vec2, offset, wgt, vec3, tmp0, tmp1, tmp2, tmp3); +- DUP4_ARG3(__lasx_xvdp2add_h_b, offset, wgt, vec4, offset, wgt, vec5, +- offset, wgt, vec6, offset, wgt, vec7, tmp4, tmp5, tmp6, tmp7); +- +- tmp0 = __lasx_xvsra_h(tmp0, denom); +- tmp1 = __lasx_xvsra_h(tmp1, denom); +- tmp2 = __lasx_xvsra_h(tmp2, denom); +- tmp3 = __lasx_xvsra_h(tmp3, denom); +- tmp4 = __lasx_xvsra_h(tmp4, denom); +- tmp5 = __lasx_xvsra_h(tmp5, denom); +- tmp6 = __lasx_xvsra_h(tmp6, denom); +- tmp7 = __lasx_xvsra_h(tmp7, denom); +- +- DUP4_ARG1(__lasx_xvclip255_h, tmp0, tmp1, tmp2, tmp3, +- tmp0, tmp1, tmp2, tmp3); +- DUP4_ARG1(__lasx_xvclip255_h, tmp4, tmp5, tmp6, tmp7, +- tmp4, tmp5, tmp6, tmp7); +- DUP4_ARG2(__lasx_xvpickev_b, tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, +- dst0, dst1, dst2, dst3); +- __lasx_xvstelm_d(dst0, dst, 0, 0); +- __lasx_xvstelm_d(dst0, dst, 8, 1); +- dst += stride; +- __lasx_xvstelm_d(dst0, dst, 0, 2); +- __lasx_xvstelm_d(dst0, dst, 8, 3); +- dst += stride; +- __lasx_xvstelm_d(dst1, dst, 0, 0); +- __lasx_xvstelm_d(dst1, dst, 8, 1); +- dst += stride; +- __lasx_xvstelm_d(dst1, dst, 0, 2); +- __lasx_xvstelm_d(dst1, dst, 8, 3); +- dst += stride; +- __lasx_xvstelm_d(dst2, dst, 0, 0); +- __lasx_xvstelm_d(dst2, dst, 8, 1); +- dst += stride; +- __lasx_xvstelm_d(dst2, dst, 0, 2); +- __lasx_xvstelm_d(dst2, dst, 8, 3); +- dst += stride; +- __lasx_xvstelm_d(dst3, dst, 0, 0); +- __lasx_xvstelm_d(dst3, dst, 8, 1); +- dst += stride; +- __lasx_xvstelm_d(dst3, dst, 0, 2); +- __lasx_xvstelm_d(dst3, dst, 8, 3); +- dst += stride; +- +- if (16 == height) { +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, +- src, stride_3x, tmp0, tmp1, tmp2, tmp3); +- src += stride_4x; +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, +- src, stride_3x, tmp4, tmp5, tmp6, tmp7); +- src += stride_4x; +- DUP4_ARG3(__lasx_xvpermi_q, tmp1, tmp0, 0x20, tmp3, tmp2, 0x20, tmp5, +- tmp4, 0x20, tmp7, tmp6, 0x20, src0, src1, src2, src3); +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, +- dst, stride_3x, tmp0, tmp1, tmp2, tmp3); +- dst += stride_4x; +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, +- dst, stride_3x, tmp4, tmp5, tmp6, tmp7); +- dst -= stride_4x; +- DUP4_ARG3(__lasx_xvpermi_q, tmp1, tmp0, 0x20, tmp3, tmp2, 0x20, tmp5, +- tmp4, 0x20, tmp7, tmp6, 0x20, dst0, dst1, dst2, dst3); +- +- DUP4_ARG2(__lasx_xvxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); +- DUP4_ARG2(__lasx_xvxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, 128, +- dst0, dst1, dst2, dst3); +- DUP4_ARG2(__lasx_xvilvl_b, dst0, src0, dst1, src1, dst2, src2, +- dst3, src3, vec0, vec2, vec4, vec6); +- DUP4_ARG2(__lasx_xvilvh_b, dst0, src0, dst1, src1, dst2, src2, +- dst3, src3, vec1, vec3, vec5, vec7); +- +- DUP4_ARG3(__lasx_xvdp2add_h_b, offset, wgt, vec0, offset, wgt, vec1, +- offset, wgt, vec2, offset, wgt, vec3, tmp0, tmp1, tmp2, tmp3); +- DUP4_ARG3(__lasx_xvdp2add_h_b, offset, wgt, vec4, offset, wgt, vec5, +- offset, wgt, vec6, offset, wgt, vec7, tmp4, tmp5, tmp6, tmp7); +- +- tmp0 = __lasx_xvsra_h(tmp0, denom); +- tmp1 = __lasx_xvsra_h(tmp1, denom); +- tmp2 = __lasx_xvsra_h(tmp2, denom); +- tmp3 = __lasx_xvsra_h(tmp3, denom); +- tmp4 = __lasx_xvsra_h(tmp4, denom); +- tmp5 = __lasx_xvsra_h(tmp5, denom); +- tmp6 = __lasx_xvsra_h(tmp6, denom); +- tmp7 = __lasx_xvsra_h(tmp7, denom); +- +- DUP4_ARG1(__lasx_xvclip255_h, tmp0, tmp1, tmp2, tmp3, +- tmp0, tmp1, tmp2, tmp3); +- DUP4_ARG1(__lasx_xvclip255_h, tmp4, tmp5, tmp6, tmp7, +- tmp4, tmp5, tmp6, tmp7); +- DUP4_ARG2(__lasx_xvpickev_b, tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, +- tmp6, dst0, dst1, dst2, dst3); +- __lasx_xvstelm_d(dst0, dst, 0, 0); +- __lasx_xvstelm_d(dst0, dst, 8, 1); +- dst += stride; +- __lasx_xvstelm_d(dst0, dst, 0, 2); +- __lasx_xvstelm_d(dst0, dst, 8, 3); +- dst += stride; +- __lasx_xvstelm_d(dst1, dst, 0, 0); +- __lasx_xvstelm_d(dst1, dst, 8, 1); +- dst += stride; +- __lasx_xvstelm_d(dst1, dst, 0, 2); +- __lasx_xvstelm_d(dst1, dst, 8, 3); +- dst += stride; +- __lasx_xvstelm_d(dst2, dst, 0, 0); +- __lasx_xvstelm_d(dst2, dst, 8, 1); +- dst += stride; +- __lasx_xvstelm_d(dst2, dst, 0, 2); +- __lasx_xvstelm_d(dst2, dst, 8, 3); +- dst += stride; +- __lasx_xvstelm_d(dst3, dst, 0, 0); +- __lasx_xvstelm_d(dst3, dst, 8, 1); +- dst += stride; +- __lasx_xvstelm_d(dst3, dst, 0, 2); +- __lasx_xvstelm_d(dst3, dst, 8, 3); +- } +-} +- +-static void avc_biwgt_8x4_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- int32_t log2_denom, int32_t weight_src, +- int32_t weight_dst, int32_t offset_in) +-{ +- __m256i wgt, vec0, vec1; +- __m256i src0, dst0; +- __m256i tmp0, tmp1, tmp2, tmp3, denom, offset; +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_3x = stride_2x + stride; +- +- offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom; +- offset_in += ((weight_src + weight_dst) << 7); +- log2_denom += 1; +- +- tmp0 = __lasx_xvreplgr2vr_b(weight_src); +- tmp1 = __lasx_xvreplgr2vr_b(weight_dst); +- wgt = __lasx_xvilvh_b(tmp1, tmp0); +- offset = __lasx_xvreplgr2vr_h(offset_in); +- denom = __lasx_xvreplgr2vr_h(log2_denom); +- +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, +- src, stride_3x, tmp0, tmp1, tmp2, tmp3); +- DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- src0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, +- dst, stride_3x, tmp0, tmp1, tmp2, tmp3); +- DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- dst0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- DUP2_ARG2(__lasx_xvxori_b, src0, 128, dst0, 128, src0, dst0); +- vec0 = __lasx_xvilvl_b(dst0, src0); +- vec1 = __lasx_xvilvh_b(dst0, src0); +- DUP2_ARG3(__lasx_xvdp2add_h_b, offset, wgt, vec0, offset, wgt, vec1, +- tmp0, tmp1); +- tmp0 = __lasx_xvsra_h(tmp0, denom); +- tmp1 = __lasx_xvsra_h(tmp1, denom); +- DUP2_ARG1(__lasx_xvclip255_h, tmp0, tmp1, tmp0, tmp1); +- dst0 = __lasx_xvpickev_b(tmp1, tmp0); +- __lasx_xvstelm_d(dst0, dst, 0, 0); +- __lasx_xvstelm_d(dst0, dst + stride, 0, 1); +- __lasx_xvstelm_d(dst0, dst + stride_2x, 0, 2); +- __lasx_xvstelm_d(dst0, dst + stride_3x, 0, 3); +-} +- +-static void avc_biwgt_8x8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- int32_t log2_denom, int32_t weight_src, +- int32_t weight_dst, int32_t offset_in) +-{ +- __m256i wgt, vec0, vec1, vec2, vec3; +- __m256i src0, src1, dst0, dst1; +- __m256i tmp0, tmp1, tmp2, tmp3, denom, offset; +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_4x = stride << 2; +- ptrdiff_t stride_3x = stride_2x + stride; +- uint8_t* dst_tmp = dst; +- +- offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom; +- offset_in += ((weight_src + weight_dst) << 7); +- log2_denom += 1; +- +- tmp0 = __lasx_xvreplgr2vr_b(weight_src); +- tmp1 = __lasx_xvreplgr2vr_b(weight_dst); +- wgt = __lasx_xvilvh_b(tmp1, tmp0); +- offset = __lasx_xvreplgr2vr_h(offset_in); +- denom = __lasx_xvreplgr2vr_h(log2_denom); +- +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, +- src, stride_3x, tmp0, tmp1, tmp2, tmp3); +- src += stride_4x; +- DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- src0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, +- src, stride_3x, tmp0, tmp1, tmp2, tmp3); +- DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- src1 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- tmp0 = __lasx_xvld(dst_tmp, 0); +- DUP2_ARG2(__lasx_xvldx, dst_tmp, stride, dst_tmp, stride_2x, tmp1, tmp2); +- tmp3 = __lasx_xvldx(dst_tmp, stride_3x); +- dst_tmp += stride_4x; +- DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- dst0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- DUP4_ARG2(__lasx_xvldx, dst_tmp, 0, dst_tmp, stride, dst_tmp, stride_2x, +- dst_tmp, stride_3x, tmp0, tmp1, tmp2, tmp3); +- DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- dst1 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- +- DUP4_ARG2(__lasx_xvxori_b, src0, 128, src1, 128, dst0, 128, dst1, 128, +- src0, src1, dst0, dst1); +- DUP2_ARG2(__lasx_xvilvl_b, dst0, src0, dst1, src1, vec0, vec2); +- DUP2_ARG2(__lasx_xvilvh_b, dst0, src0, dst1, src1, vec1, vec3); +- DUP4_ARG3(__lasx_xvdp2add_h_b, offset, wgt, vec0, offset, wgt, vec1, +- offset, wgt, vec2, offset, wgt, vec3, tmp0, tmp1, tmp2, tmp3); +- tmp0 = __lasx_xvsra_h(tmp0, denom); +- tmp1 = __lasx_xvsra_h(tmp1, denom); +- tmp2 = __lasx_xvsra_h(tmp2, denom); +- tmp3 = __lasx_xvsra_h(tmp3, denom); +- DUP4_ARG1(__lasx_xvclip255_h, tmp0, tmp1, tmp2, tmp3, +- tmp0, tmp1, tmp2, tmp3); +- DUP2_ARG2(__lasx_xvpickev_b, tmp1, tmp0, tmp3, tmp2, dst0, dst1); +- __lasx_xvstelm_d(dst0, dst, 0, 0); +- __lasx_xvstelm_d(dst0, dst + stride, 0, 1); +- __lasx_xvstelm_d(dst0, dst + stride_2x, 0, 2); +- __lasx_xvstelm_d(dst0, dst + stride_3x, 0, 3); +- dst += stride_4x; +- __lasx_xvstelm_d(dst1, dst, 0, 0); +- __lasx_xvstelm_d(dst1, dst + stride, 0, 1); +- __lasx_xvstelm_d(dst1, dst + stride_2x, 0, 2); +- __lasx_xvstelm_d(dst1, dst + stride_3x, 0, 3); +-} +- +-static void avc_biwgt_8x16_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- int32_t log2_denom, int32_t weight_src, +- int32_t weight_dst, int32_t offset_in) +-{ +- __m256i wgt, vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; +- __m256i src0, src1, src2, src3, dst0, dst1, dst2, dst3; +- __m256i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, denom, offset; +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_4x = stride << 2; +- ptrdiff_t stride_3x = stride_2x + stride; +- uint8_t* dst_tmp = dst; +- +- offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom; +- offset_in += ((weight_src + weight_dst) << 7); +- log2_denom += 1; +- +- tmp0 = __lasx_xvreplgr2vr_b(weight_src); +- tmp1 = __lasx_xvreplgr2vr_b(weight_dst); +- wgt = __lasx_xvilvh_b(tmp1, tmp0); +- offset = __lasx_xvreplgr2vr_h(offset_in); +- denom = __lasx_xvreplgr2vr_h(log2_denom); +- +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, +- src, stride_3x, tmp0, tmp1, tmp2, tmp3); +- src += stride_4x; +- DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- src0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, +- src, stride_3x, tmp0, tmp1, tmp2, tmp3); +- src += stride_4x; +- DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- src1 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, +- src, stride_3x, tmp0, tmp1, tmp2, tmp3); +- src += stride_4x; +- DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- src2 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, +- src, stride_3x, tmp0, tmp1, tmp2, tmp3); +- DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- src3 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- +- DUP4_ARG2(__lasx_xvldx, dst_tmp, 0, dst_tmp, stride, dst_tmp, stride_2x, +- dst_tmp, stride_3x, tmp0, tmp1, tmp2, tmp3); +- dst_tmp += stride_4x; +- DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- dst0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- DUP4_ARG2(__lasx_xvldx, dst_tmp, 0, dst_tmp, stride, dst_tmp, stride_2x, +- dst_tmp, stride_3x, tmp0, tmp1, tmp2, tmp3); +- dst_tmp += stride_4x; +- DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- dst1 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- DUP4_ARG2(__lasx_xvldx, dst_tmp, 0, dst_tmp, stride, dst_tmp, stride_2x, +- dst_tmp, stride_3x, tmp0, tmp1, tmp2, tmp3); +- dst_tmp += stride_4x; +- DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- dst2 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- DUP4_ARG2(__lasx_xvldx, dst_tmp, 0, dst_tmp, stride, dst_tmp, stride_2x, +- dst_tmp, stride_3x, tmp0, tmp1, tmp2, tmp3); +- DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- dst3 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- +- DUP4_ARG2(__lasx_xvxori_b, src0, 128, src1, 128, src2, 128, src3, 128, +- src0, src1, src2, src3); +- DUP4_ARG2(__lasx_xvxori_b, dst0, 128, dst1, 128, dst2, 128, dst3, 128, +- dst0, dst1, dst2, dst3); +- DUP4_ARG2(__lasx_xvilvl_b, dst0, src0, dst1, src1, dst2, src2, +- dst3, src3, vec0, vec2, vec4, vec6); +- DUP4_ARG2(__lasx_xvilvh_b, dst0, src0, dst1, src1, dst2, src2, +- dst3, src3, vec1, vec3, vec5, vec7); +- DUP4_ARG3(__lasx_xvdp2add_h_b, offset, wgt, vec0, offset, wgt, vec1, +- offset, wgt, vec2, offset, wgt, vec3, tmp0, tmp1, tmp2, tmp3); +- DUP4_ARG3(__lasx_xvdp2add_h_b,offset, wgt, vec4, offset, wgt, vec5, +- offset, wgt, vec6, offset, wgt, vec7, tmp4, tmp5, tmp6, tmp7); +- tmp0 = __lasx_xvsra_h(tmp0, denom); +- tmp1 = __lasx_xvsra_h(tmp1, denom); +- tmp2 = __lasx_xvsra_h(tmp2, denom); +- tmp3 = __lasx_xvsra_h(tmp3, denom); +- tmp4 = __lasx_xvsra_h(tmp4, denom); +- tmp5 = __lasx_xvsra_h(tmp5, denom); +- tmp6 = __lasx_xvsra_h(tmp6, denom); +- tmp7 = __lasx_xvsra_h(tmp7, denom); +- DUP4_ARG1(__lasx_xvclip255_h, tmp0, tmp1, tmp2, tmp3, +- tmp0, tmp1, tmp2, tmp3); +- DUP4_ARG1(__lasx_xvclip255_h, tmp4, tmp5, tmp6, tmp7, +- tmp4, tmp5, tmp6, tmp7); +- DUP4_ARG2(__lasx_xvpickev_b, tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, +- dst0, dst1, dst2, dst3) +- __lasx_xvstelm_d(dst0, dst, 0, 0); +- __lasx_xvstelm_d(dst0, dst + stride, 0, 1); +- __lasx_xvstelm_d(dst0, dst + stride_2x, 0, 2); +- __lasx_xvstelm_d(dst0, dst + stride_3x, 0, 3); +- dst += stride_4x; +- __lasx_xvstelm_d(dst1, dst, 0, 0); +- __lasx_xvstelm_d(dst1, dst + stride, 0, 1); +- __lasx_xvstelm_d(dst1, dst + stride_2x, 0, 2); +- __lasx_xvstelm_d(dst1, dst + stride_3x, 0, 3); +- dst += stride_4x; +- __lasx_xvstelm_d(dst2, dst, 0, 0); +- __lasx_xvstelm_d(dst2, dst + stride, 0, 1); +- __lasx_xvstelm_d(dst2, dst + stride_2x, 0, 2); +- __lasx_xvstelm_d(dst2, dst + stride_3x, 0, 3); +- dst += stride_4x; +- __lasx_xvstelm_d(dst3, dst, 0, 0); +- __lasx_xvstelm_d(dst3, dst + stride, 0, 1); +- __lasx_xvstelm_d(dst3, dst + stride_2x, 0, 2); +- __lasx_xvstelm_d(dst3, dst + stride_3x, 0, 3); +-} +- +-void ff_biweight_h264_pixels8_8_lasx(uint8_t *dst, uint8_t *src, +- ptrdiff_t stride, int height, +- int log2_denom, int weight_dst, +- int weight_src, int offset) +-{ +- if (4 == height) { +- avc_biwgt_8x4_lasx(src, dst, stride, log2_denom, weight_src, weight_dst, +- offset); +- } else if (8 == height) { +- avc_biwgt_8x8_lasx(src, dst, stride, log2_denom, weight_src, weight_dst, +- offset); +- } else { +- avc_biwgt_8x16_lasx(src, dst, stride, log2_denom, weight_src, weight_dst, +- offset); +- } +-} +- +-static void avc_biwgt_4x2_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- int32_t log2_denom, int32_t weight_src, +- int32_t weight_dst, int32_t offset_in) +-{ +- __m256i wgt, vec0; +- __m256i src0, dst0; +- __m256i tmp0, tmp1, denom, offset; +- +- offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom; +- offset_in += ((weight_src + weight_dst) << 7); +- log2_denom += 1; +- +- tmp0 = __lasx_xvreplgr2vr_b(weight_src); +- tmp1 = __lasx_xvreplgr2vr_b(weight_dst); +- wgt = __lasx_xvilvh_b(tmp1, tmp0); +- offset = __lasx_xvreplgr2vr_h(offset_in); +- denom = __lasx_xvreplgr2vr_h(log2_denom); +- +- DUP2_ARG2(__lasx_xvldx, src, 0, src, stride, tmp0, tmp1); +- src0 = __lasx_xvilvl_w(tmp1, tmp0); +- DUP2_ARG2(__lasx_xvldx, dst, 0, dst, stride, tmp0, tmp1); +- dst0 = __lasx_xvilvl_w(tmp1, tmp0); +- DUP2_ARG2(__lasx_xvxori_b, src0, 128, dst0, 128, src0, dst0); +- vec0 = __lasx_xvilvl_b(dst0, src0); +- tmp0 = __lasx_xvdp2add_h_b(offset, wgt, vec0); +- tmp0 = __lasx_xvsra_h(tmp0, denom); +- tmp0 = __lasx_xvclip255_h(tmp0); +- tmp0 = __lasx_xvpickev_b(tmp0, tmp0); +- __lasx_xvstelm_w(tmp0, dst, 0, 0); +- __lasx_xvstelm_w(tmp0, dst + stride, 0, 1); +-} +- +-static void avc_biwgt_4x4_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- int32_t log2_denom, int32_t weight_src, +- int32_t weight_dst, int32_t offset_in) +-{ +- __m256i wgt, vec0; +- __m256i src0, dst0; +- __m256i tmp0, tmp1, tmp2, tmp3, denom, offset; +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_3x = stride_2x + stride; +- +- offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom; +- offset_in += ((weight_src + weight_dst) << 7); +- log2_denom += 1; +- +- tmp0 = __lasx_xvreplgr2vr_b(weight_src); +- tmp1 = __lasx_xvreplgr2vr_b(weight_dst); +- wgt = __lasx_xvilvh_b(tmp1, tmp0); +- offset = __lasx_xvreplgr2vr_h(offset_in); +- denom = __lasx_xvreplgr2vr_h(log2_denom); +- +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, +- src, stride_3x, tmp0, tmp1, tmp2, tmp3); +- DUP2_ARG2(__lasx_xvilvl_w, tmp2, tmp0, tmp3, tmp1, tmp0, tmp1); +- src0 = __lasx_xvilvl_w(tmp1, tmp0); +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, +- dst, stride_3x, tmp0, tmp1, tmp2, tmp3); +- DUP2_ARG2(__lasx_xvilvl_w, tmp2, tmp0, tmp3, tmp1, tmp0, tmp1); +- dst0 = __lasx_xvilvl_w(tmp1, tmp0); +- DUP2_ARG2(__lasx_xvxori_b, src0, 128, dst0, 128, src0, dst0); +- vec0 = __lasx_xvilvl_b(dst0, src0); +- dst0 = __lasx_xvilvh_b(dst0, src0); +- vec0 = __lasx_xvpermi_q(vec0, dst0, 0x02); +- tmp0 = __lasx_xvdp2add_h_b(offset, wgt, vec0); +- tmp0 = __lasx_xvsra_h(tmp0, denom); +- tmp0 = __lasx_xvclip255_h(tmp0); +- tmp0 = __lasx_xvpickev_b(tmp0, tmp0); +- __lasx_xvstelm_w(tmp0, dst, 0, 0); +- __lasx_xvstelm_w(tmp0, dst + stride, 0, 1); +- __lasx_xvstelm_w(tmp0, dst + stride_2x, 0, 4); +- __lasx_xvstelm_w(tmp0, dst + stride_3x, 0, 5); +-} +- +-static void avc_biwgt_4x8_lasx(uint8_t *src, uint8_t *dst, ptrdiff_t stride, +- int32_t log2_denom, int32_t weight_src, +- int32_t weight_dst, int32_t offset_in) +-{ +- __m256i wgt, vec0, vec1; +- __m256i src0, dst0; +- __m256i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, denom, offset; +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_4x = stride << 2; +- ptrdiff_t stride_3x = stride_2x + stride; +- +- offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom; +- offset_in += ((weight_src + weight_dst) << 7); +- log2_denom += 1; +- +- tmp0 = __lasx_xvreplgr2vr_b(weight_src); +- tmp1 = __lasx_xvreplgr2vr_b(weight_dst); +- wgt = __lasx_xvilvh_b(tmp1, tmp0); +- offset = __lasx_xvreplgr2vr_h(offset_in); +- denom = __lasx_xvreplgr2vr_h(log2_denom); +- +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, +- src, stride_3x, tmp0, tmp1, tmp2, tmp3); +- src += stride_4x; +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, +- src, stride_3x, tmp4, tmp5, tmp6, tmp7); +- DUP4_ARG2(__lasx_xvilvl_w, tmp2, tmp0, tmp3, tmp1, tmp6, tmp4, tmp7, tmp5, +- tmp0, tmp1, tmp2, tmp3); +- DUP2_ARG2(__lasx_xvilvl_w, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- src0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, +- dst, stride_3x, tmp0, tmp1, tmp2, tmp3); +- dst += stride_4x; +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, stride, dst, stride_2x, +- dst, stride_3x, tmp4, tmp5, tmp6, tmp7); +- dst -= stride_4x; +- DUP4_ARG2(__lasx_xvilvl_w, tmp2, tmp0, tmp3, tmp1, tmp6, tmp4, tmp7, tmp5, +- tmp0, tmp1, tmp2, tmp3); +- DUP2_ARG2(__lasx_xvilvl_w, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- dst0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- DUP2_ARG2(__lasx_xvxori_b, src0, 128, dst0, 128, src0, dst0); +- vec0 = __lasx_xvilvl_b(dst0, src0); +- vec1 = __lasx_xvilvh_b(dst0, src0); +- DUP2_ARG3(__lasx_xvdp2add_h_b, offset, wgt, vec0, offset, wgt, vec1, +- tmp0, tmp1); +- tmp0 = __lasx_xvsra_h(tmp0, denom); +- tmp1 = __lasx_xvsra_h(tmp1, denom); +- DUP2_ARG1(__lasx_xvclip255_h, tmp0, tmp1, tmp0, tmp1); +- tmp0 = __lasx_xvpickev_b(tmp1, tmp0); +- __lasx_xvstelm_w(tmp0, dst, 0, 0); +- __lasx_xvstelm_w(tmp0, dst + stride, 0, 1); +- __lasx_xvstelm_w(tmp0, dst + stride_2x, 0, 2); +- __lasx_xvstelm_w(tmp0, dst + stride_3x, 0, 3); +- dst += stride_4x; +- __lasx_xvstelm_w(tmp0, dst, 0, 4); +- __lasx_xvstelm_w(tmp0, dst + stride, 0, 5); +- __lasx_xvstelm_w(tmp0, dst + stride_2x, 0, 6); +- __lasx_xvstelm_w(tmp0, dst + stride_3x, 0, 7); +-} +- +-void ff_biweight_h264_pixels4_8_lasx(uint8_t *dst, uint8_t *src, +- ptrdiff_t stride, int height, +- int log2_denom, int weight_dst, +- int weight_src, int offset) +-{ +- if (2 == height) { +- avc_biwgt_4x2_lasx(src, dst, stride, log2_denom, weight_src, +- weight_dst, offset); +- } else if (4 == height) { +- avc_biwgt_4x4_lasx(src, dst, stride, log2_denom, weight_src, +- weight_dst, offset); +- } else { +- avc_biwgt_4x8_lasx(src, dst, stride, log2_denom, weight_src, +- weight_dst, offset); +- } +-} +- +-void ff_weight_h264_pixels16_8_lasx(uint8_t *src, ptrdiff_t stride, +- int height, int log2_denom, +- int weight_src, int offset_in) +-{ +- uint32_t offset_val; +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_4x = stride << 2; +- ptrdiff_t stride_3x = stride_2x + stride; +- __m256i zero = __lasx_xvldi(0); +- __m256i src0, src1, src2, src3; +- __m256i src0_l, src1_l, src2_l, src3_l, src0_h, src1_h, src2_h, src3_h; +- __m256i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; +- __m256i wgt, denom, offset; +- +- offset_val = (unsigned) offset_in << log2_denom; +- +- wgt = __lasx_xvreplgr2vr_h(weight_src); +- offset = __lasx_xvreplgr2vr_h(offset_val); +- denom = __lasx_xvreplgr2vr_h(log2_denom); +- +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, +- src, stride_3x, tmp0, tmp1, tmp2, tmp3); +- src += stride_4x; +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, +- src, stride_3x, tmp4, tmp5, tmp6, tmp7); +- src -= stride_4x; +- DUP4_ARG3(__lasx_xvpermi_q, tmp1, tmp0, 0x20, tmp3, tmp2, 0x20, tmp5, tmp4, +- 0x20, tmp7, tmp6, 0x20, src0, src1, src2, src3); +- DUP4_ARG2(__lasx_xvilvl_b, zero, src0, zero, src1, zero, src2, +- zero, src3, src0_l, src1_l, src2_l, src3_l); +- DUP4_ARG2(__lasx_xvilvh_b, zero, src0, zero, src1, zero, src2, +- zero, src3, src0_h, src1_h, src2_h, src3_h); +- src0_l = __lasx_xvmul_h(wgt, src0_l); +- src0_h = __lasx_xvmul_h(wgt, src0_h); +- src1_l = __lasx_xvmul_h(wgt, src1_l); +- src1_h = __lasx_xvmul_h(wgt, src1_h); +- src2_l = __lasx_xvmul_h(wgt, src2_l); +- src2_h = __lasx_xvmul_h(wgt, src2_h); +- src3_l = __lasx_xvmul_h(wgt, src3_l); +- src3_h = __lasx_xvmul_h(wgt, src3_h); +- DUP4_ARG2(__lasx_xvsadd_h, src0_l, offset, src0_h, offset, src1_l, offset, +- src1_h, offset, src0_l, src0_h, src1_l, src1_h); +- DUP4_ARG2(__lasx_xvsadd_h, src2_l, offset, src2_h, offset, src3_l, offset, +- src3_h, offset, src2_l, src2_h, src3_l, src3_h); +- src0_l = __lasx_xvmaxi_h(src0_l, 0); +- src0_h = __lasx_xvmaxi_h(src0_h, 0); +- src1_l = __lasx_xvmaxi_h(src1_l, 0); +- src1_h = __lasx_xvmaxi_h(src1_h, 0); +- src2_l = __lasx_xvmaxi_h(src2_l, 0); +- src2_h = __lasx_xvmaxi_h(src2_h, 0); +- src3_l = __lasx_xvmaxi_h(src3_l, 0); +- src3_h = __lasx_xvmaxi_h(src3_h, 0); +- src0_l = __lasx_xvssrlrn_bu_h(src0_l, denom); +- src0_h = __lasx_xvssrlrn_bu_h(src0_h, denom); +- src1_l = __lasx_xvssrlrn_bu_h(src1_l, denom); +- src1_h = __lasx_xvssrlrn_bu_h(src1_h, denom); +- src2_l = __lasx_xvssrlrn_bu_h(src2_l, denom); +- src2_h = __lasx_xvssrlrn_bu_h(src2_h, denom); +- src3_l = __lasx_xvssrlrn_bu_h(src3_l, denom); +- src3_h = __lasx_xvssrlrn_bu_h(src3_h, denom); +- __lasx_xvstelm_d(src0_l, src, 0, 0); +- __lasx_xvstelm_d(src0_h, src, 8, 0); +- src += stride; +- __lasx_xvstelm_d(src0_l, src, 0, 2); +- __lasx_xvstelm_d(src0_h, src, 8, 2); +- src += stride; +- __lasx_xvstelm_d(src1_l, src, 0, 0); +- __lasx_xvstelm_d(src1_h, src, 8, 0); +- src += stride; +- __lasx_xvstelm_d(src1_l, src, 0, 2); +- __lasx_xvstelm_d(src1_h, src, 8, 2); +- src += stride; +- __lasx_xvstelm_d(src2_l, src, 0, 0); +- __lasx_xvstelm_d(src2_h, src, 8, 0); +- src += stride; +- __lasx_xvstelm_d(src2_l, src, 0, 2); +- __lasx_xvstelm_d(src2_h, src, 8, 2); +- src += stride; +- __lasx_xvstelm_d(src3_l, src, 0, 0); +- __lasx_xvstelm_d(src3_h, src, 8, 0); +- src += stride; +- __lasx_xvstelm_d(src3_l, src, 0, 2); +- __lasx_xvstelm_d(src3_h, src, 8, 2); +- src += stride; +- +- if (16 == height) { +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, +- src, stride_3x, tmp0, tmp1, tmp2, tmp3); +- src += stride_4x; +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, +- src, stride_3x, tmp4, tmp5, tmp6, tmp7); +- src -= stride_4x; +- DUP4_ARG3(__lasx_xvpermi_q, tmp1, tmp0, 0x20, tmp3, tmp2, 0x20, tmp5, +- tmp4, 0x20, tmp7, tmp6, 0x20, src0, src1, src2, src3); +- DUP4_ARG2(__lasx_xvilvl_b, zero, src0, zero, src1, zero, src2, +- zero, src3, src0_l, src1_l, src2_l, src3_l); +- DUP4_ARG2(__lasx_xvilvh_b, zero, src0, zero, src1, zero, src2, +- zero, src3, src0_h, src1_h, src2_h, src3_h); +- src0_l = __lasx_xvmul_h(wgt, src0_l); +- src0_h = __lasx_xvmul_h(wgt, src0_h); +- src1_l = __lasx_xvmul_h(wgt, src1_l); +- src1_h = __lasx_xvmul_h(wgt, src1_h); +- src2_l = __lasx_xvmul_h(wgt, src2_l); +- src2_h = __lasx_xvmul_h(wgt, src2_h); +- src3_l = __lasx_xvmul_h(wgt, src3_l); +- src3_h = __lasx_xvmul_h(wgt, src3_h); +- DUP4_ARG2(__lasx_xvsadd_h, src0_l, offset, src0_h, offset, src1_l, +- offset, src1_h, offset, src0_l, src0_h, src1_l, src1_h); +- DUP4_ARG2(__lasx_xvsadd_h, src2_l, offset, src2_h, offset, src3_l, +- offset, src3_h, offset, src2_l, src2_h, src3_l, src3_h); +- src0_l = __lasx_xvmaxi_h(src0_l, 0); +- src0_h = __lasx_xvmaxi_h(src0_h, 0); +- src1_l = __lasx_xvmaxi_h(src1_l, 0); +- src1_h = __lasx_xvmaxi_h(src1_h, 0); +- src2_l = __lasx_xvmaxi_h(src2_l, 0); +- src2_h = __lasx_xvmaxi_h(src2_h, 0); +- src3_l = __lasx_xvmaxi_h(src3_l, 0); +- src3_h = __lasx_xvmaxi_h(src3_h, 0); +- src0_l = __lasx_xvssrlrn_bu_h(src0_l, denom); +- src0_h = __lasx_xvssrlrn_bu_h(src0_h, denom); +- src1_l = __lasx_xvssrlrn_bu_h(src1_l, denom); +- src1_h = __lasx_xvssrlrn_bu_h(src1_h, denom); +- src2_l = __lasx_xvssrlrn_bu_h(src2_l, denom); +- src2_h = __lasx_xvssrlrn_bu_h(src2_h, denom); +- src3_l = __lasx_xvssrlrn_bu_h(src3_l, denom); +- src3_h = __lasx_xvssrlrn_bu_h(src3_h, denom); +- __lasx_xvstelm_d(src0_l, src, 0, 0); +- __lasx_xvstelm_d(src0_h, src, 8, 0); +- src += stride; +- __lasx_xvstelm_d(src0_l, src, 0, 2); +- __lasx_xvstelm_d(src0_h, src, 8, 2); +- src += stride; +- __lasx_xvstelm_d(src1_l, src, 0, 0); +- __lasx_xvstelm_d(src1_h, src, 8, 0); +- src += stride; +- __lasx_xvstelm_d(src1_l, src, 0, 2); +- __lasx_xvstelm_d(src1_h, src, 8, 2); +- src += stride; +- __lasx_xvstelm_d(src2_l, src, 0, 0); +- __lasx_xvstelm_d(src2_h, src, 8, 0); +- src += stride; +- __lasx_xvstelm_d(src2_l, src, 0, 2); +- __lasx_xvstelm_d(src2_h, src, 8, 2); +- src += stride; +- __lasx_xvstelm_d(src3_l, src, 0, 0); +- __lasx_xvstelm_d(src3_h, src, 8, 0); +- src += stride; +- __lasx_xvstelm_d(src3_l, src, 0, 2); +- __lasx_xvstelm_d(src3_h, src, 8, 2); +- } +-} +- +-static void avc_wgt_8x4_lasx(uint8_t *src, ptrdiff_t stride, +- int32_t log2_denom, int32_t weight_src, +- int32_t offset_in) +-{ +- uint32_t offset_val; +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_3x = stride_2x + stride; +- __m256i wgt, zero = __lasx_xvldi(0); +- __m256i src0, src0_h, src0_l; +- __m256i tmp0, tmp1, tmp2, tmp3, denom, offset; +- +- offset_val = (unsigned) offset_in << log2_denom; +- +- wgt = __lasx_xvreplgr2vr_h(weight_src); +- offset = __lasx_xvreplgr2vr_h(offset_val); +- denom = __lasx_xvreplgr2vr_h(log2_denom); +- +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, +- src, stride_3x, tmp0, tmp1, tmp2, tmp3); +- DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- src0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- src0_l = __lasx_xvilvl_b(zero, src0); +- src0_h = __lasx_xvilvh_b(zero, src0); +- src0_l = __lasx_xvmul_h(wgt, src0_l); +- src0_h = __lasx_xvmul_h(wgt, src0_h); +- src0_l = __lasx_xvsadd_h(src0_l, offset); +- src0_h = __lasx_xvsadd_h(src0_h, offset); +- src0_l = __lasx_xvmaxi_h(src0_l, 0); +- src0_h = __lasx_xvmaxi_h(src0_h, 0); +- src0_l = __lasx_xvssrlrn_bu_h(src0_l, denom); +- src0_h = __lasx_xvssrlrn_bu_h(src0_h, denom); +- +- src0 = __lasx_xvpickev_d(src0_h, src0_l); +- __lasx_xvstelm_d(src0, src, 0, 0); +- __lasx_xvstelm_d(src0, src + stride, 0, 1); +- __lasx_xvstelm_d(src0, src + stride_2x, 0, 2); +- __lasx_xvstelm_d(src0, src + stride_3x, 0, 3); +-} +- +-static void avc_wgt_8x8_lasx(uint8_t *src, ptrdiff_t stride, int32_t log2_denom, +- int32_t src_weight, int32_t offset_in) +-{ +- __m256i src0, src1, src0_h, src0_l, src1_h, src1_l, zero = __lasx_xvldi(0); +- __m256i tmp0, tmp1, tmp2, tmp3, denom, offset, wgt; +- uint32_t offset_val; +- uint8_t* src_tmp = src; +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_4x = stride << 2; +- ptrdiff_t stride_3x = stride_2x + stride; +- +- offset_val = (unsigned) offset_in << log2_denom; +- +- wgt = __lasx_xvreplgr2vr_h(src_weight); +- offset = __lasx_xvreplgr2vr_h(offset_val); +- denom = __lasx_xvreplgr2vr_h(log2_denom); +- +- DUP4_ARG2(__lasx_xvldx, src_tmp, 0, src_tmp, stride, src_tmp, stride_2x, +- src_tmp, stride_3x, tmp0, tmp1, tmp2, tmp3); +- src_tmp += stride_4x; +- DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- src0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- DUP4_ARG2(__lasx_xvldx, src_tmp, 0, src_tmp, stride, src_tmp, stride_2x, +- src_tmp, stride_3x, tmp0, tmp1, tmp2, tmp3); +- DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- src1 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- DUP2_ARG2(__lasx_xvilvl_b, zero, src0, zero, src1, src0_l, src1_l); +- DUP2_ARG2(__lasx_xvilvh_b, zero, src0, zero, src1, src0_h, src1_h); +- src0_l = __lasx_xvmul_h(wgt, src0_l); +- src0_h = __lasx_xvmul_h(wgt, src0_h); +- src1_l = __lasx_xvmul_h(wgt, src1_l); +- src1_h = __lasx_xvmul_h(wgt, src1_h); +- DUP4_ARG2(__lasx_xvsadd_h, src0_l, offset, src0_h, offset, src1_l, offset, +- src1_h, offset, src0_l, src0_h, src1_l, src1_h); +- src0_l = __lasx_xvmaxi_h(src0_l, 0); +- src0_h = __lasx_xvmaxi_h(src0_h, 0); +- src1_l = __lasx_xvmaxi_h(src1_l, 0); +- src1_h = __lasx_xvmaxi_h(src1_h, 0); +- src0_l = __lasx_xvssrlrn_bu_h(src0_l, denom); +- src0_h = __lasx_xvssrlrn_bu_h(src0_h, denom); +- src1_l = __lasx_xvssrlrn_bu_h(src1_l, denom); +- src1_h = __lasx_xvssrlrn_bu_h(src1_h, denom); +- +- DUP2_ARG2(__lasx_xvpickev_d, src0_h, src0_l, src1_h, src1_l, src0, src1); +- __lasx_xvstelm_d(src0, src, 0, 0); +- __lasx_xvstelm_d(src0, src + stride, 0, 1); +- __lasx_xvstelm_d(src0, src + stride_2x, 0, 2); +- __lasx_xvstelm_d(src0, src + stride_3x, 0, 3); +- src += stride_4x; +- __lasx_xvstelm_d(src1, src, 0, 0); +- __lasx_xvstelm_d(src1, src + stride, 0, 1); +- __lasx_xvstelm_d(src1, src + stride_2x, 0, 2); +- __lasx_xvstelm_d(src1, src + stride_3x, 0, 3); +-} +- +-static void avc_wgt_8x16_lasx(uint8_t *src, ptrdiff_t stride, +- int32_t log2_denom, int32_t src_weight, +- int32_t offset_in) +-{ +- __m256i src0, src1, src2, src3; +- __m256i src0_h, src0_l, src1_h, src1_l, src2_h, src2_l, src3_h, src3_l; +- __m256i tmp0, tmp1, tmp2, tmp3, denom, offset, wgt; +- __m256i zero = __lasx_xvldi(0); +- uint32_t offset_val; +- uint8_t* src_tmp = src; +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_4x = stride << 2; +- ptrdiff_t stride_3x = stride_2x + stride; +- +- offset_val = (unsigned) offset_in << log2_denom; +- +- wgt = __lasx_xvreplgr2vr_h(src_weight); +- offset = __lasx_xvreplgr2vr_h(offset_val); +- denom = __lasx_xvreplgr2vr_h(log2_denom); +- +- DUP4_ARG2(__lasx_xvldx, src_tmp, 0, src_tmp, stride, src_tmp, stride_2x, +- src_tmp, stride_3x, tmp0, tmp1, tmp2, tmp3); +- src_tmp += stride_4x; +- DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- src0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- DUP4_ARG2(__lasx_xvldx, src_tmp, 0, src_tmp, stride, src_tmp, stride_2x, +- src_tmp, stride_3x, tmp0, tmp1, tmp2, tmp3); +- src_tmp += stride_4x; +- DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- src1 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- DUP4_ARG2(__lasx_xvldx, src_tmp, 0, src_tmp, stride, src_tmp, stride_2x, +- src_tmp, stride_3x, tmp0, tmp1, tmp2, tmp3); +- src_tmp += stride_4x; +- DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- src2 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- DUP4_ARG2(__lasx_xvldx, src_tmp, 0, src_tmp, stride, src_tmp, stride_2x, +- src_tmp, stride_3x, tmp0, tmp1, tmp2, tmp3); +- DUP2_ARG2(__lasx_xvilvl_d, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- src3 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- +- DUP4_ARG2(__lasx_xvilvl_b, zero, src0, zero, src1, zero, src2, zero, src3, +- src0_l, src1_l, src2_l, src3_l); +- DUP4_ARG2(__lasx_xvilvh_b, zero, src0, zero, src1, zero, src2, zero, src3, +- src0_h, src1_h, src2_h, src3_h); +- src0_l = __lasx_xvmul_h(wgt, src0_l); +- src0_h = __lasx_xvmul_h(wgt, src0_h); +- src1_l = __lasx_xvmul_h(wgt, src1_l); +- src1_h = __lasx_xvmul_h(wgt, src1_h); +- src2_l = __lasx_xvmul_h(wgt, src2_l); +- src2_h = __lasx_xvmul_h(wgt, src2_h); +- src3_l = __lasx_xvmul_h(wgt, src3_l); +- src3_h = __lasx_xvmul_h(wgt, src3_h); +- +- DUP4_ARG2(__lasx_xvsadd_h, src0_l, offset, src0_h, offset, src1_l, offset, +- src1_h, offset, src0_l, src0_h, src1_l, src1_h); +- DUP4_ARG2(__lasx_xvsadd_h, src2_l, offset, src2_h, offset, src3_l, offset, +- src3_h, offset, src2_l, src2_h, src3_l, src3_h); +- +- src0_l = __lasx_xvmaxi_h(src0_l, 0); +- src0_h = __lasx_xvmaxi_h(src0_h, 0); +- src1_l = __lasx_xvmaxi_h(src1_l, 0); +- src1_h = __lasx_xvmaxi_h(src1_h, 0); +- src2_l = __lasx_xvmaxi_h(src2_l, 0); +- src2_h = __lasx_xvmaxi_h(src2_h, 0); +- src3_l = __lasx_xvmaxi_h(src3_l, 0); +- src3_h = __lasx_xvmaxi_h(src3_h, 0); +- src0_l = __lasx_xvssrlrn_bu_h(src0_l, denom); +- src0_h = __lasx_xvssrlrn_bu_h(src0_h, denom); +- src1_l = __lasx_xvssrlrn_bu_h(src1_l, denom); +- src1_h = __lasx_xvssrlrn_bu_h(src1_h, denom); +- src2_l = __lasx_xvssrlrn_bu_h(src2_l, denom); +- src2_h = __lasx_xvssrlrn_bu_h(src2_h, denom); +- src3_l = __lasx_xvssrlrn_bu_h(src3_l, denom); +- src3_h = __lasx_xvssrlrn_bu_h(src3_h, denom); +- DUP4_ARG2(__lasx_xvpickev_d, src0_h, src0_l, src1_h, src1_l, src2_h, src2_l, +- src3_h, src3_l, src0, src1, src2, src3); +- +- __lasx_xvstelm_d(src0, src, 0, 0); +- __lasx_xvstelm_d(src0, src + stride, 0, 1); +- __lasx_xvstelm_d(src0, src + stride_2x, 0, 2); +- __lasx_xvstelm_d(src0, src + stride_3x, 0, 3); +- src += stride_4x; +- __lasx_xvstelm_d(src1, src, 0, 0); +- __lasx_xvstelm_d(src1, src + stride, 0, 1); +- __lasx_xvstelm_d(src1, src + stride_2x, 0, 2); +- __lasx_xvstelm_d(src1, src + stride_3x, 0, 3); +- src += stride_4x; +- __lasx_xvstelm_d(src2, src, 0, 0); +- __lasx_xvstelm_d(src2, src + stride, 0, 1); +- __lasx_xvstelm_d(src2, src + stride_2x, 0, 2); +- __lasx_xvstelm_d(src2, src + stride_3x, 0, 3); +- src += stride_4x; +- __lasx_xvstelm_d(src3, src, 0, 0); +- __lasx_xvstelm_d(src3, src + stride, 0, 1); +- __lasx_xvstelm_d(src3, src + stride_2x, 0, 2); +- __lasx_xvstelm_d(src3, src + stride_3x, 0, 3); +-} +- +-void ff_weight_h264_pixels8_8_lasx(uint8_t *src, ptrdiff_t stride, +- int height, int log2_denom, +- int weight_src, int offset) +-{ +- if (4 == height) { +- avc_wgt_8x4_lasx(src, stride, log2_denom, weight_src, offset); +- } else if (8 == height) { +- avc_wgt_8x8_lasx(src, stride, log2_denom, weight_src, offset); +- } else { +- avc_wgt_8x16_lasx(src, stride, log2_denom, weight_src, offset); +- } +-} +- +-static void avc_wgt_4x2_lasx(uint8_t *src, ptrdiff_t stride, +- int32_t log2_denom, int32_t weight_src, +- int32_t offset_in) +-{ +- uint32_t offset_val; +- __m256i wgt, zero = __lasx_xvldi(0); +- __m256i src0, tmp0, tmp1, denom, offset; +- +- offset_val = (unsigned) offset_in << log2_denom; +- +- wgt = __lasx_xvreplgr2vr_h(weight_src); +- offset = __lasx_xvreplgr2vr_h(offset_val); +- denom = __lasx_xvreplgr2vr_h(log2_denom); +- +- DUP2_ARG2(__lasx_xvldx, src, 0, src, stride, tmp0, tmp1); +- src0 = __lasx_xvilvl_w(tmp1, tmp0); +- src0 = __lasx_xvilvl_b(zero, src0); +- src0 = __lasx_xvmul_h(wgt, src0); +- src0 = __lasx_xvsadd_h(src0, offset); +- src0 = __lasx_xvmaxi_h(src0, 0); +- src0 = __lasx_xvssrlrn_bu_h(src0, denom); +- __lasx_xvstelm_w(src0, src, 0, 0); +- __lasx_xvstelm_w(src0, src + stride, 0, 1); +-} +- +-static void avc_wgt_4x4_lasx(uint8_t *src, ptrdiff_t stride, +- int32_t log2_denom, int32_t weight_src, +- int32_t offset_in) +-{ +- __m256i wgt; +- __m256i src0, tmp0, tmp1, tmp2, tmp3, denom, offset; +- uint32_t offset_val; +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_3x = stride_2x + stride; +- +- offset_val = (unsigned) offset_in << log2_denom; +- +- wgt = __lasx_xvreplgr2vr_h(weight_src); +- offset = __lasx_xvreplgr2vr_h(offset_val); +- denom = __lasx_xvreplgr2vr_h(log2_denom); +- +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, +- src, stride_3x, tmp0, tmp1, tmp2, tmp3); +- DUP2_ARG2(__lasx_xvilvl_w, tmp2, tmp0, tmp3, tmp1, tmp0, tmp1); +- src0 = __lasx_xvilvl_w(tmp1, tmp0); +- src0 = __lasx_vext2xv_hu_bu(src0); +- src0 = __lasx_xvmul_h(wgt, src0); +- src0 = __lasx_xvsadd_h(src0, offset); +- src0 = __lasx_xvmaxi_h(src0, 0); +- src0 = __lasx_xvssrlrn_bu_h(src0, denom); +- __lasx_xvstelm_w(src0, src, 0, 0); +- __lasx_xvstelm_w(src0, src + stride, 0, 1); +- __lasx_xvstelm_w(src0, src + stride_2x, 0, 4); +- __lasx_xvstelm_w(src0, src + stride_3x, 0, 5); +-} +- +-static void avc_wgt_4x8_lasx(uint8_t *src, ptrdiff_t stride, +- int32_t log2_denom, int32_t weight_src, +- int32_t offset_in) +-{ +- __m256i src0, src0_h, src0_l; +- __m256i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, denom, offset; +- __m256i wgt, zero = __lasx_xvldi(0); +- uint32_t offset_val; +- ptrdiff_t stride_2x = stride << 1; +- ptrdiff_t stride_4x = stride << 2; +- ptrdiff_t stride_3x = stride_2x + stride; +- +- offset_val = (unsigned) offset_in << log2_denom; +- +- wgt = __lasx_xvreplgr2vr_h(weight_src); +- offset = __lasx_xvreplgr2vr_h(offset_val); +- denom = __lasx_xvreplgr2vr_h(log2_denom); +- +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, +- src, stride_3x, tmp0, tmp1, tmp2, tmp3); +- src += stride_4x; +- DUP4_ARG2(__lasx_xvldx, src, 0, src, stride, src, stride_2x, +- src, stride_3x, tmp4, tmp5, tmp6, tmp7); +- src -= stride_4x; +- DUP4_ARG2(__lasx_xvilvl_w, tmp2, tmp0, tmp3, tmp1, tmp6, tmp4, tmp7, +- tmp5, tmp0, tmp1, tmp2, tmp3); +- DUP2_ARG2(__lasx_xvilvl_w, tmp1, tmp0, tmp3, tmp2, tmp0, tmp1); +- src0 = __lasx_xvpermi_q(tmp1, tmp0, 0x20); +- src0_l = __lasx_xvilvl_b(zero, src0); +- src0_h = __lasx_xvilvh_b(zero, src0); +- src0_l = __lasx_xvmul_h(wgt, src0_l); +- src0_h = __lasx_xvmul_h(wgt, src0_h); +- src0_l = __lasx_xvsadd_h(src0_l, offset); +- src0_h = __lasx_xvsadd_h(src0_h, offset); +- src0_l = __lasx_xvmaxi_h(src0_l, 0); +- src0_h = __lasx_xvmaxi_h(src0_h, 0); +- src0_l = __lasx_xvssrlrn_bu_h(src0_l, denom); +- src0_h = __lasx_xvssrlrn_bu_h(src0_h, denom); +- __lasx_xvstelm_w(src0_l, src, 0, 0); +- __lasx_xvstelm_w(src0_l, src + stride, 0, 1); +- __lasx_xvstelm_w(src0_h, src + stride_2x, 0, 0); +- __lasx_xvstelm_w(src0_h, src + stride_3x, 0, 1); +- src += stride_4x; +- __lasx_xvstelm_w(src0_l, src, 0, 4); +- __lasx_xvstelm_w(src0_l, src + stride, 0, 5); +- __lasx_xvstelm_w(src0_h, src + stride_2x, 0, 4); +- __lasx_xvstelm_w(src0_h, src + stride_3x, 0, 5); +-} +- +-void ff_weight_h264_pixels4_8_lasx(uint8_t *src, ptrdiff_t stride, +- int height, int log2_denom, +- int weight_src, int offset) +-{ +- if (2 == height) { +- avc_wgt_4x2_lasx(src, stride, log2_denom, weight_src, offset); +- } else if (4 == height) { +- avc_wgt_4x4_lasx(src, stride, log2_denom, weight_src, offset); +- } else { +- avc_wgt_4x8_lasx(src, stride, log2_denom, weight_src, offset); +- } +-} +- + void ff_h264_add_pixels4_8_lasx(uint8_t *_dst, int16_t *_src, int stride) + { + __m256i src0, dst0, dst1, dst2, dst3, zero; +diff --git a/libavcodec/loongarch/h264dsp_lasx.h b/libavcodec/loongarch/h264dsp_lasx.h +index 4cf813750b..3a506b09df 100644 +--- a/libavcodec/loongarch/h264dsp_lasx.h ++++ b/libavcodec/loongarch/h264dsp_lasx.h +@@ -25,22 +25,79 @@ + + #include "libavcodec/h264dec.h" + +-void ff_h264_h_lpf_luma_8_lasx(uint8_t *src, ptrdiff_t stride, ++void ff_h264_idct_add_8_lsx(uint8_t *dst, int16_t *src, int dst_stride); ++void ff_h264_idct8_add_8_lsx(uint8_t *dst, int16_t *src, int dst_stride); ++void ff_h264_idct_dc_add_8_lsx(uint8_t *dst, int16_t *src, int dst_stride); ++void ff_h264_idct8_dc_add_8_lsx(uint8_t *dst, int16_t *src, int dst_stride); ++void ff_h264_luma_dc_dequant_idct_8_lsx(int16_t *_output, int16_t *_input, int qmul); ++void ff_h264_idct_add16_8_lsx(uint8_t *dst, const int32_t *blk_offset, ++ int16_t *block, int32_t dst_stride, ++ const uint8_t nzc[15 * 8]); ++void ff_h264_idct8_add4_8_lsx(uint8_t *dst, const int32_t *blk_offset, ++ int16_t *block, int32_t dst_stride, ++ const uint8_t nzc[15 * 8]); ++void ff_h264_idct_add8_8_lsx(uint8_t **dst, const int32_t *blk_offset, ++ int16_t *block, int32_t dst_stride, ++ const uint8_t nzc[15 * 8]); ++void ff_h264_idct_add8_422_8_lsx(uint8_t **dst, const int32_t *blk_offset, ++ int16_t *block, int32_t dst_stride, ++ const uint8_t nzc[15 * 8]); ++void ff_h264_idct_add16_intra_8_lsx(uint8_t *dst, const int32_t *blk_offset, ++ int16_t *block, int32_t dst_stride, ++ const uint8_t nzc[15 * 8]); ++ ++void ff_h264_h_lpf_luma_8_lsx(uint8_t *src, int stride, ++ int alpha, int beta, int8_t *tc0); ++void ff_h264_v_lpf_luma_8_lsx(uint8_t *src, int stride, ++ int alpha, int beta, int8_t *tc0); ++void ff_h264_h_lpf_luma_intra_8_lsx(uint8_t *src, int stride, ++ int alpha, int beta); ++void ff_h264_v_lpf_luma_intra_8_lsx(uint8_t *src, int stride, ++ int alpha, int beta); ++void ff_h264_h_lpf_chroma_8_lsx(uint8_t *src, int stride, ++ int alpha, int beta, int8_t *tc0); ++void ff_h264_v_lpf_chroma_8_lsx(uint8_t *src, int stride, ++ int alpha, int beta, int8_t *tc0); ++void ff_h264_h_lpf_chroma_intra_8_lsx(uint8_t *src, int stride, ++ int alpha, int beta); ++void ff_h264_v_lpf_chroma_intra_8_lsx(uint8_t *src, int stride, ++ int alpha, int beta); ++void ff_biweight_h264_pixels16_8_lsx(uint8_t *dst, uint8_t *src, ++ ptrdiff_t stride, int height, ++ int log2_denom, int weight_dst, ++ int weight_src, int offset_in); ++void ff_biweight_h264_pixels8_8_lsx(uint8_t *dst, uint8_t *src, ++ ptrdiff_t stride, int height, ++ int log2_denom, int weight_dst, ++ int weight_src, int offset); ++void ff_biweight_h264_pixels4_8_lsx(uint8_t *dst, uint8_t *src, ++ ptrdiff_t stride, int height, ++ int log2_denom, int weight_dst, ++ int weight_src, int offset); ++void ff_weight_h264_pixels16_8_lsx(uint8_t *src, ptrdiff_t stride, ++ int height, int log2_denom, ++ int weight_src, int offset_in); ++void ff_weight_h264_pixels8_8_lsx(uint8_t *src, ptrdiff_t stride, ++ int height, int log2_denom, ++ int weight_src, int offset); ++void ff_weight_h264_pixels4_8_lsx(uint8_t *src, ptrdiff_t stride, ++ int height, int log2_denom, ++ int weight_src, int offset); ++void ff_h264_add_pixels4_8_lsx(uint8_t *_dst, int16_t *_src, int stride); ++void ff_h264_add_pixels8_8_lsx(uint8_t *_dst, int16_t *_src, int stride); ++void ff_h264_loop_filter_strength_lsx(int16_t bS[2][4][4], uint8_t nnz[40], ++ int8_t ref[2][40], int16_t mv[2][40][2], ++ int bidir, int edges, int step, ++ int mask_mv0, int mask_mv1, int field); ++ ++void ff_h264_h_lpf_luma_8_lasx(uint8_t *src, int stride, + int alpha, int beta, int8_t *tc0); +-void ff_h264_v_lpf_luma_8_lasx(uint8_t *src, ptrdiff_t stride, ++void ff_h264_v_lpf_luma_8_lasx(uint8_t *src, int stride, + int alpha, int beta, int8_t *tc0); +-void ff_h264_h_lpf_luma_intra_8_lasx(uint8_t *src, ptrdiff_t stride, ++void ff_h264_h_lpf_luma_intra_8_lasx(uint8_t *src, int stride, + int alpha, int beta); +-void ff_h264_v_lpf_luma_intra_8_lasx(uint8_t *src, ptrdiff_t stride, ++void ff_h264_v_lpf_luma_intra_8_lasx(uint8_t *src, int stride, + int alpha, int beta); +-void ff_h264_h_lpf_chroma_8_lasx(uint8_t *src, ptrdiff_t stride, +- int alpha, int beta, int8_t *tc0); +-void ff_h264_v_lpf_chroma_8_lasx(uint8_t *src, ptrdiff_t stride, +- int alpha, int beta, int8_t *tc0); +-void ff_h264_h_lpf_chroma_intra_8_lasx(uint8_t *src, ptrdiff_t stride, +- int alpha, int beta); +-void ff_h264_v_lpf_chroma_intra_8_lasx(uint8_t *src, ptrdiff_t stride, +- int alpha, int beta); + void ff_biweight_h264_pixels16_8_lasx(uint8_t *dst, uint8_t *src, + ptrdiff_t stride, int height, + int log2_denom, int weight_dst, +@@ -49,46 +106,21 @@ void ff_biweight_h264_pixels8_8_lasx(uint8_t *dst, uint8_t *src, + ptrdiff_t stride, int height, + int log2_denom, int weight_dst, + int weight_src, int offset); +-void ff_biweight_h264_pixels4_8_lasx(uint8_t *dst, uint8_t *src, +- ptrdiff_t stride, int height, +- int log2_denom, int weight_dst, +- int weight_src, int offset); + void ff_weight_h264_pixels16_8_lasx(uint8_t *src, ptrdiff_t stride, + int height, int log2_denom, + int weight_src, int offset_in); + void ff_weight_h264_pixels8_8_lasx(uint8_t *src, ptrdiff_t stride, + int height, int log2_denom, + int weight_src, int offset); +-void ff_weight_h264_pixels4_8_lasx(uint8_t *src, ptrdiff_t stride, +- int height, int log2_denom, +- int weight_src, int offset); + void ff_h264_add_pixels4_8_lasx(uint8_t *_dst, int16_t *_src, int stride); + + void ff_h264_add_pixels8_8_lasx(uint8_t *_dst, int16_t *_src, int stride); +-void ff_h264_idct_add_lasx(uint8_t *dst, int16_t *src, int32_t dst_stride); +-void ff_h264_idct8_addblk_lasx(uint8_t *dst, int16_t *src, int32_t dst_stride); +-void ff_h264_idct4x4_addblk_dc_lasx(uint8_t *dst, int16_t *src, +- int32_t dst_stride); +-void ff_h264_idct8_dc_addblk_lasx(uint8_t *dst, int16_t *src, ++void ff_h264_idct8_add_8_lasx(uint8_t *dst, int16_t *src, int32_t dst_stride); ++void ff_h264_idct8_dc_add_8_lasx(uint8_t *dst, int16_t *src, + int32_t dst_stride); +-void ff_h264_idct_add16_lasx(uint8_t *dst, const int32_t *blk_offset, +- int16_t *block, int32_t dst_stride, +- const uint8_t nzc[15 * 8]); +-void ff_h264_idct8_add4_lasx(uint8_t *dst, const int32_t *blk_offset, +- int16_t *block, int32_t dst_stride, +- const uint8_t nzc[15 * 8]); +-void ff_h264_idct_add8_lasx(uint8_t **dst, const int32_t *blk_offset, +- int16_t *block, int32_t dst_stride, +- const uint8_t nzc[15 * 8]); +-void ff_h264_idct_add8_422_lasx(uint8_t **dst, const int32_t *blk_offset, +- int16_t *block, int32_t dst_stride, +- const uint8_t nzc[15 * 8]); +-void ff_h264_idct_add16_intra_lasx(uint8_t *dst, const int32_t *blk_offset, +- int16_t *block, int32_t dst_stride, +- const uint8_t nzc[15 * 8]); +-void ff_h264_deq_idct_luma_dc_lasx(int16_t *dst, int16_t *src, +- int32_t de_qval); +- ++void ff_h264_idct8_add4_8_lasx(uint8_t *dst, const int32_t *blk_offset, ++ int16_t *block, int32_t dst_stride, ++ const uint8_t nzc[15 * 8]); + void ff_h264_loop_filter_strength_lasx(int16_t bS[2][4][4], uint8_t nnz[40], + int8_t ref[2][40], int16_t mv[2][40][2], + int bidir, int edges, int step, +diff --git a/libavcodec/loongarch/h264idct.S b/libavcodec/loongarch/h264idct.S +new file mode 100644 +index 0000000000..4507187802 +--- /dev/null ++++ b/libavcodec/loongarch/h264idct.S +@@ -0,0 +1,659 @@ ++/* ++ * Loongson LASX optimized h264idct ++ * ++ * Copyright (c) 2022 Loongson Technology Corporation Limited ++ * Contributed by Shiyou Yin ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "loongson_asm.S" ++ ++/* ++ * #define FUNC2(a, b, c) FUNC3(a, b, c) ++ * #define FUNCC(a) FUNC2(a, BIT_DEPTH, _c) ++ * void FUNCC(ff_h264_idct_add)(uint8_t *_dst, int16_t *_block, int stride) ++ * LSX optimization is enough for this function. ++ */ ++function ff_h264_idct_add_8_lsx ++ fld.d f0, a1, 0 ++ fld.d f1, a1, 8 ++ fld.d f2, a1, 16 ++ fld.d f3, a1, 24 ++ vxor.v vr7, vr7, vr7 ++ add.d t2, a2, a2 ++ add.d t3, t2, a2 ++ vst vr7, a1, 0 ++ vst vr7, a1, 16 ++ ++ vadd.h vr4, vr0, vr2 ++ vsub.h vr5, vr0, vr2 ++ vsrai.h vr6, vr1, 1 ++ vsrai.h vr7, vr3, 1 ++ vsub.h vr6, vr6, vr3 ++ vadd.h vr7, vr1, vr7 ++ LSX_BUTTERFLY_4_H vr4, vr5, vr6, vr7, vr0, vr1, vr2, vr3 ++ LSX_TRANSPOSE4x4_H vr0, vr1, vr2, vr3, vr0, vr1, vr2, vr3, vr4, vr5 ++ vadd.h vr4, vr0, vr2 ++ vsub.h vr5, vr0, vr2 ++ vsrai.h vr6, vr1, 1 ++ vsrai.h vr7, vr3, 1 ++ vsub.h vr6, vr6, vr3 ++ vadd.h vr7, vr1, vr7 ++ LSX_BUTTERFLY_4_H vr4, vr5, vr6, vr7, vr0, vr1, vr2, vr3 ++ ++ fld.s f4, a0, 0 ++ fldx.s f5, a0, a2 ++ fldx.s f6, a0, t2 ++ fldx.s f7, a0, t3 ++ ++ vsrari.h vr0, vr0, 6 ++ vsrari.h vr1, vr1, 6 ++ vsrari.h vr2, vr2, 6 ++ vsrari.h vr3, vr3, 6 ++ ++ vsllwil.hu.bu vr4, vr4, 0 ++ vsllwil.hu.bu vr5, vr5, 0 ++ vsllwil.hu.bu vr6, vr6, 0 ++ vsllwil.hu.bu vr7, vr7, 0 ++ vadd.h vr0, vr0, vr4 ++ vadd.h vr1, vr1, vr5 ++ vadd.h vr2, vr2, vr6 ++ vadd.h vr3, vr3, vr7 ++ vssrarni.bu.h vr1, vr0, 0 ++ vssrarni.bu.h vr3, vr2, 0 ++ ++ vbsrl.v vr0, vr1, 8 ++ vbsrl.v vr2, vr3, 8 ++ fst.s f1, a0, 0 ++ fstx.s f0, a0, a2 ++ fstx.s f3, a0, t2 ++ fstx.s f2, a0, t3 ++endfunc ++ ++/* ++ * #define FUNC2(a, b, c) FUNC3(a, b, c) ++ * #define FUNCC(a) FUNC2(a, BIT_DEPTH, _c) ++ * void FUNCC(ff_h264_idct8_add)(uint8_t *_dst, int16_t *_block, int stride) ++ */ ++function ff_h264_idct8_add_8_lsx ++ ld.h t0, a1, 0 ++ add.d t2, a2, a2 ++ add.d t3, t2, a2 ++ add.d t4, t3, a2 ++ add.d t5, t4, a2 ++ add.d t6, t5, a2 ++ add.d t7, t6, a2 ++ addi.w t0, t0, 32 ++ st.h t0, a1, 0 ++ ++ vld vr0, a1, 0 ++ vld vr1, a1, 16 ++ vld vr2, a1, 32 ++ vld vr3, a1, 48 ++ vld vr4, a1, 64 ++ vld vr5, a1, 80 ++ vld vr6, a1, 96 ++ vld vr7, a1, 112 ++ vxor.v vr8, vr8, vr8 ++ vst vr8, a1, 0 ++ vst vr8, a1, 16 ++ vst vr8, a1, 32 ++ vst vr8, a1, 48 ++ vst vr8, a1, 64 ++ vst vr8, a1, 80 ++ vst vr8, a1, 96 ++ vst vr8, a1, 112 ++ ++ vadd.h vr18, vr0, vr4 ++ vsub.h vr19, vr0, vr4 ++ vsrai.h vr20, vr2, 1 ++ vsrai.h vr21, vr6, 1 ++ vsub.h vr20, vr20, vr6 ++ vadd.h vr21, vr21, vr2 ++ LSX_BUTTERFLY_4_H vr18, vr19, vr20, vr21, vr10, vr12, vr14, vr16 ++ vsrai.h vr11, vr7, 1 ++ vsrai.h vr13, vr3, 1 ++ vsrai.h vr15, vr5, 1 ++ vsrai.h vr17, vr1, 1 ++ vsub.h vr11, vr5, vr11 ++ vsub.h vr13, vr7, vr13 ++ vadd.h vr15, vr7, vr15 ++ vadd.h vr17, vr5, vr17 ++ vsub.h vr11, vr11, vr7 ++ vsub.h vr13, vr13, vr3 ++ vadd.h vr15, vr15, vr5 ++ vadd.h vr17, vr17, vr1 ++ vsub.h vr11, vr11, vr3 ++ vadd.h vr13, vr13, vr1 ++ vsub.h vr15, vr15, vr1 ++ vadd.h vr17, vr17, vr3 ++ vsrai.h vr18, vr11, 2 ++ vsrai.h vr19, vr13, 2 ++ vsrai.h vr20, vr15, 2 ++ vsrai.h vr21, vr17, 2 ++ vadd.h vr11, vr11, vr21 ++ vadd.h vr13, vr13, vr20 ++ vsub.h vr15, vr19, vr15 ++ vsub.h vr17, vr17, vr18 ++ LSX_BUTTERFLY_8_H vr10, vr16, vr12, vr14, vr13, vr15, vr11, vr17, \ ++ vr0, vr3, vr1, vr2, vr5, vr6, vr4, vr7 ++ ++ LSX_TRANSPOSE8x8_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ ++ vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ ++ vr10, vr11, vr12, vr13, vr14, vr15, vr16, vr17 ++ vexth.w.h vr20, vr0 ++ vexth.w.h vr21, vr1 ++ vexth.w.h vr22, vr2 ++ vexth.w.h vr23, vr3 ++ vexth.w.h vr8, vr4 ++ vexth.w.h vr9, vr5 ++ vexth.w.h vr18, vr6 ++ vexth.w.h vr19, vr7 ++ vsllwil.w.h vr0, vr0, 0 ++ vsllwil.w.h vr1, vr1, 0 ++ vsllwil.w.h vr2, vr2, 0 ++ vsllwil.w.h vr3, vr3, 0 ++ vsllwil.w.h vr4, vr4, 0 ++ vsllwil.w.h vr5, vr5, 0 ++ vsllwil.w.h vr6, vr6, 0 ++ vsllwil.w.h vr7, vr7, 0 ++ ++ vadd.w vr11, vr0, vr4 ++ vsub.w vr13, vr0, vr4 ++ vsrai.w vr15, vr2, 1 ++ vsrai.w vr17, vr6, 1 ++ vsub.w vr15, vr15, vr6 ++ vadd.w vr17, vr17, vr2 ++ LSX_BUTTERFLY_4_W vr11, vr13, vr15, vr17, vr10, vr12, vr14, vr16 ++ vsrai.w vr11, vr7, 1 ++ vsrai.w vr13, vr3, 1 ++ vsrai.w vr15, vr5, 1 ++ vsrai.w vr17, vr1, 1 ++ vsub.w vr11, vr5, vr11 ++ vsub.w vr13, vr7, vr13 ++ vadd.w vr15, vr7, vr15 ++ vadd.w vr17, vr5, vr17 ++ vsub.w vr11, vr11, vr7 ++ vsub.w vr13, vr13, vr3 ++ vadd.w vr15, vr15, vr5 ++ vadd.w vr17, vr17, vr1 ++ vsub.w vr11, vr11, vr3 ++ vadd.w vr13, vr13, vr1 ++ vsub.w vr15, vr15, vr1 ++ vadd.w vr17, vr17, vr3 ++ vsrai.w vr0, vr11, 2 ++ vsrai.w vr1, vr13, 2 ++ vsrai.w vr2, vr15, 2 ++ vsrai.w vr3, vr17, 2 ++ vadd.w vr11, vr11, vr3 ++ vadd.w vr13, vr13, vr2 ++ vsub.w vr15, vr1, vr15 ++ vsub.w vr17, vr17, vr0 ++ LSX_BUTTERFLY_8_W vr10, vr12, vr14, vr16, vr11, vr13, vr15, vr17, \ ++ vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 ++ ++ vadd.w vr11, vr20, vr8 ++ vsub.w vr13, vr20, vr8 ++ vsrai.w vr15, vr22, 1 ++ vsrai.w vr17, vr18, 1 ++ vsub.w vr15, vr15, vr18 ++ vadd.w vr17, vr17, vr22 ++ LSX_BUTTERFLY_4_W vr11, vr13, vr15, vr17, vr10, vr12, vr14, vr16 ++ vsrai.w vr11, vr19, 1 ++ vsrai.w vr13, vr23, 1 ++ vsrai.w vr15, vr9, 1 ++ vsrai.w vr17, vr21, 1 ++ vsub.w vr11, vr9, vr11 ++ vsub.w vr13, vr19, vr13 ++ vadd.w vr15, vr19, vr15 ++ vadd.w vr17, vr9, vr17 ++ vsub.w vr11, vr11, vr19 ++ vsub.w vr13, vr13, vr23 ++ vadd.w vr15, vr15, vr9 ++ vadd.w vr17, vr17, vr21 ++ vsub.w vr11, vr11, vr23 ++ vadd.w vr13, vr13, vr21 ++ vsub.w vr15, vr15, vr21 ++ vadd.w vr17, vr17, vr23 ++ vsrai.w vr20, vr11, 2 ++ vsrai.w vr21, vr13, 2 ++ vsrai.w vr22, vr15, 2 ++ vsrai.w vr23, vr17, 2 ++ vadd.w vr11, vr11, vr23 ++ vadd.w vr13, vr13, vr22 ++ vsub.w vr15, vr21, vr15 ++ vsub.w vr17, vr17, vr20 ++ LSX_BUTTERFLY_8_W vr10, vr12, vr14, vr16, vr11, vr13, vr15, vr17, \ ++ vr20, vr21, vr22, vr23, vr8, vr9, vr18, vr19 ++ ++ vld vr10, a0, 0 ++ vldx vr11, a0, a2 ++ vldx vr12, a0, t2 ++ vldx vr13, a0, t3 ++ vldx vr14, a0, t4 ++ vldx vr15, a0, t5 ++ vldx vr16, a0, t6 ++ vldx vr17, a0, t7 ++ vsrani.h.w vr20, vr0, 6 ++ vsrani.h.w vr21, vr1, 6 ++ vsrani.h.w vr22, vr2, 6 ++ vsrani.h.w vr23, vr3, 6 ++ vsrani.h.w vr8, vr4, 6 ++ vsrani.h.w vr9, vr5, 6 ++ vsrani.h.w vr18, vr6, 6 ++ vsrani.h.w vr19, vr7, 6 ++ vsllwil.hu.bu vr10, vr10, 0 ++ vsllwil.hu.bu vr11, vr11, 0 ++ vsllwil.hu.bu vr12, vr12, 0 ++ vsllwil.hu.bu vr13, vr13, 0 ++ vsllwil.hu.bu vr14, vr14, 0 ++ vsllwil.hu.bu vr15, vr15, 0 ++ vsllwil.hu.bu vr16, vr16, 0 ++ vsllwil.hu.bu vr17, vr17, 0 ++ ++ vadd.h vr0, vr20, vr10 ++ vadd.h vr1, vr21, vr11 ++ vadd.h vr2, vr22, vr12 ++ vadd.h vr3, vr23, vr13 ++ vadd.h vr4, vr8, vr14 ++ vadd.h vr5, vr9, vr15 ++ vadd.h vr6, vr18, vr16 ++ vadd.h vr7, vr19, vr17 ++ vssrarni.bu.h vr1, vr0, 0 ++ vssrarni.bu.h vr3, vr2, 0 ++ vssrarni.bu.h vr5, vr4, 0 ++ vssrarni.bu.h vr7, vr6, 0 ++ vbsrl.v vr0, vr1, 8 ++ vbsrl.v vr2, vr3, 8 ++ vbsrl.v vr4, vr5, 8 ++ vbsrl.v vr6, vr7, 8 ++ fst.d f1, a0, 0 ++ fstx.d f0, a0, a2 ++ fstx.d f3, a0, t2 ++ fstx.d f2, a0, t3 ++ fstx.d f5, a0, t4 ++ fstx.d f4, a0, t5 ++ fstx.d f7, a0, t6 ++ fstx.d f6, a0, t7 ++endfunc ++ ++/* ++ * #define FUNC2(a, b, c) FUNC3(a, b, c) ++ * #define FUNCC(a) FUNC2(a, BIT_DEPTH, _c) ++ * void FUNCC(ff_h264_idct8_add)(uint8_t *_dst, int16_t *_block, int stride) ++ */ ++function ff_h264_idct8_add_8_lasx ++ ld.h t0, a1, 0 ++ add.d t2, a2, a2 ++ add.d t3, t2, a2 ++ add.d t4, t3, a2 ++ add.d t5, t4, a2 ++ add.d t6, t5, a2 ++ add.d t7, t6, a2 ++ addi.w t0, t0, 32 ++ st.h t0, a1, 0 ++ ++ vld vr0, a1, 0 ++ vld vr1, a1, 16 ++ vld vr2, a1, 32 ++ vld vr3, a1, 48 ++ vld vr4, a1, 64 ++ vld vr5, a1, 80 ++ vld vr6, a1, 96 ++ vld vr7, a1, 112 ++ xvxor.v xr8, xr8, xr8 ++ xvst xr8, a1, 0 ++ xvst xr8, a1, 32 ++ xvst xr8, a1, 64 ++ xvst xr8, a1, 96 ++ ++ vadd.h vr18, vr0, vr4 ++ vsub.h vr19, vr0, vr4 ++ vsrai.h vr20, vr2, 1 ++ vsrai.h vr21, vr6, 1 ++ vsub.h vr20, vr20, vr6 ++ vadd.h vr21, vr21, vr2 ++ LSX_BUTTERFLY_4_H vr18, vr19, vr20, vr21, vr10, vr12, vr14, vr16 ++ vsrai.h vr11, vr7, 1 ++ vsrai.h vr13, vr3, 1 ++ vsrai.h vr15, vr5, 1 ++ vsrai.h vr17, vr1, 1 ++ vsub.h vr11, vr5, vr11 ++ vsub.h vr13, vr7, vr13 ++ vadd.h vr15, vr7, vr15 ++ vadd.h vr17, vr5, vr17 ++ vsub.h vr11, vr11, vr7 ++ vsub.h vr13, vr13, vr3 ++ vadd.h vr15, vr15, vr5 ++ vadd.h vr17, vr17, vr1 ++ vsub.h vr11, vr11, vr3 ++ vadd.h vr13, vr13, vr1 ++ vsub.h vr15, vr15, vr1 ++ vadd.h vr17, vr17, vr3 ++ vsrai.h vr18, vr11, 2 ++ vsrai.h vr19, vr13, 2 ++ vsrai.h vr20, vr15, 2 ++ vsrai.h vr21, vr17, 2 ++ vadd.h vr11, vr11, vr21 ++ vadd.h vr13, vr13, vr20 ++ vsub.h vr15, vr19, vr15 ++ vsub.h vr17, vr17, vr18 ++ LSX_BUTTERFLY_8_H vr10, vr16, vr12, vr14, vr13, vr15, vr11, vr17, \ ++ vr0, vr3, vr1, vr2, vr5, vr6, vr4, vr7 ++ ++ LSX_TRANSPOSE8x8_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ ++ vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ ++ vr10, vr11, vr12, vr13, vr14, vr15, vr16, vr17 ++ vext2xv.w.h xr0, xr0 ++ vext2xv.w.h xr1, xr1 ++ vext2xv.w.h xr2, xr2 ++ vext2xv.w.h xr3, xr3 ++ vext2xv.w.h xr4, xr4 ++ vext2xv.w.h xr5, xr5 ++ vext2xv.w.h xr6, xr6 ++ vext2xv.w.h xr7, xr7 ++ ++ xvadd.w xr11, xr0, xr4 ++ xvsub.w xr13, xr0, xr4 ++ xvsrai.w xr15, xr2, 1 ++ xvsrai.w xr17, xr6, 1 ++ xvsub.w xr15, xr15, xr6 ++ xvadd.w xr17, xr17, xr2 ++ LASX_BUTTERFLY_4_W xr11, xr13, xr15, xr17, xr10, xr12, xr14, xr16 ++ xvsrai.w xr11, xr7, 1 ++ xvsrai.w xr13, xr3, 1 ++ xvsrai.w xr15, xr5, 1 ++ xvsrai.w xr17, xr1, 1 ++ xvsub.w xr11, xr5, xr11 ++ xvsub.w xr13, xr7, xr13 ++ xvadd.w xr15, xr7, xr15 ++ xvadd.w xr17, xr5, xr17 ++ xvsub.w xr11, xr11, xr7 ++ xvsub.w xr13, xr13, xr3 ++ xvadd.w xr15, xr15, xr5 ++ xvadd.w xr17, xr17, xr1 ++ xvsub.w xr11, xr11, xr3 ++ xvadd.w xr13, xr13, xr1 ++ xvsub.w xr15, xr15, xr1 ++ xvadd.w xr17, xr17, xr3 ++ xvsrai.w xr0, xr11, 2 ++ xvsrai.w xr1, xr13, 2 ++ xvsrai.w xr2, xr15, 2 ++ xvsrai.w xr3, xr17, 2 ++ xvadd.w xr11, xr11, xr3 ++ xvadd.w xr13, xr13, xr2 ++ xvsub.w xr15, xr1, xr15 ++ xvsub.w xr17, xr17, xr0 ++ LASX_BUTTERFLY_8_W xr10, xr12, xr14, xr16, xr11, xr13, xr15, xr17, \ ++ xr0, xr1, xr2, xr3, xr4, xr5, xr6, xr7 ++ ++ vld vr10, a0, 0 ++ vldx vr11, a0, a2 ++ vldx vr12, a0, t2 ++ vldx vr13, a0, t3 ++ vldx vr14, a0, t4 ++ vldx vr15, a0, t5 ++ vldx vr16, a0, t6 ++ vldx vr17, a0, t7 ++ xvldi xr8, 0x806 //"xvldi.w xr8 6" ++ xvsran.h.w xr0, xr0, xr8 ++ xvsran.h.w xr1, xr1, xr8 ++ xvsran.h.w xr2, xr2, xr8 ++ xvsran.h.w xr3, xr3, xr8 ++ xvsran.h.w xr4, xr4, xr8 ++ xvsran.h.w xr5, xr5, xr8 ++ xvsran.h.w xr6, xr6, xr8 ++ xvsran.h.w xr7, xr7, xr8 ++ xvpermi.d xr0, xr0, 0x08 ++ xvpermi.d xr1, xr1, 0x08 ++ xvpermi.d xr2, xr2, 0x08 ++ xvpermi.d xr3, xr3, 0x08 ++ xvpermi.d xr4, xr4, 0x08 ++ xvpermi.d xr5, xr5, 0x08 ++ xvpermi.d xr6, xr6, 0x08 ++ xvpermi.d xr7, xr7, 0x08 ++ ++ vsllwil.hu.bu vr10, vr10, 0 ++ vsllwil.hu.bu vr11, vr11, 0 ++ vsllwil.hu.bu vr12, vr12, 0 ++ vsllwil.hu.bu vr13, vr13, 0 ++ vsllwil.hu.bu vr14, vr14, 0 ++ vsllwil.hu.bu vr15, vr15, 0 ++ vsllwil.hu.bu vr16, vr16, 0 ++ vsllwil.hu.bu vr17, vr17, 0 ++ ++ vadd.h vr0, vr0, vr10 ++ vadd.h vr1, vr1, vr11 ++ vadd.h vr2, vr2, vr12 ++ vadd.h vr3, vr3, vr13 ++ vadd.h vr4, vr4, vr14 ++ vadd.h vr5, vr5, vr15 ++ vadd.h vr6, vr6, vr16 ++ vadd.h vr7, vr7, vr17 ++ vssrarni.bu.h vr1, vr0, 0 ++ vssrarni.bu.h vr3, vr2, 0 ++ vssrarni.bu.h vr5, vr4, 0 ++ vssrarni.bu.h vr7, vr6, 0 ++ vbsrl.v vr0, vr1, 8 ++ vbsrl.v vr2, vr3, 8 ++ vbsrl.v vr4, vr5, 8 ++ vbsrl.v vr6, vr7, 8 ++ fst.d f1, a0, 0 ++ fstx.d f0, a0, a2 ++ fstx.d f3, a0, t2 ++ fstx.d f2, a0, t3 ++ fstx.d f5, a0, t4 ++ fstx.d f4, a0, t5 ++ fstx.d f7, a0, t6 ++ fstx.d f6, a0, t7 ++endfunc ++ ++/* ++ * #define FUNC2(a, b, c) FUNC3(a, b, c) ++ * #define FUNCC(a) FUNC2(a, BIT_DEPTH, _c) ++ * void FUNCC(ff_h264_idct_dc_add)(uint8_t *_dst, int16_t *_block, int stride) ++ * LSX optimization is enough for this function. ++ */ ++function ff_h264_idct_dc_add_8_lsx ++ vldrepl.h vr4, a1, 0 ++ add.d t2, a2, a2 ++ add.d t3, t2, a2 ++ fld.s f0, a0, 0 ++ fldx.s f1, a0, a2 ++ fldx.s f2, a0, t2 ++ fldx.s f3, a0, t3 ++ st.h zero, a1, 0 ++ ++ vsrari.h vr4, vr4, 6 ++ vilvl.w vr0, vr1, vr0 ++ vilvl.w vr1, vr3, vr2 ++ vsllwil.hu.bu vr0, vr0, 0 ++ vsllwil.hu.bu vr1, vr1, 0 ++ vadd.h vr0, vr0, vr4 ++ vadd.h vr1, vr1, vr4 ++ vssrarni.bu.h vr1, vr0, 0 ++ ++ vbsrl.v vr2, vr1, 4 ++ vbsrl.v vr3, vr1, 8 ++ vbsrl.v vr4, vr1, 12 ++ fst.s f1, a0, 0 ++ fstx.s f2, a0, a2 ++ fstx.s f3, a0, t2 ++ fstx.s f4, a0, t3 ++endfunc ++ ++/* ++ * #define FUNC2(a, b, c) FUNC3(a, b, c) ++ * #define FUNCC(a) FUNC2(a, BIT_DEPTH, _c) ++ * void FUNCC(ff_h264_idct8_dc_add)(uint8_t *_dst, int16_t *_block, int stride) ++ */ ++function ff_h264_idct8_dc_add_8_lsx ++ vldrepl.h vr8, a1, 0 ++ add.d t2, a2, a2 ++ add.d t3, t2, a2 ++ add.d t4, t3, a2 ++ add.d t5, t4, a2 ++ add.d t6, t5, a2 ++ add.d t7, t6, a2 ++ ++ fld.d f0, a0, 0 ++ fldx.d f1, a0, a2 ++ fldx.d f2, a0, t2 ++ fldx.d f3, a0, t3 ++ fldx.d f4, a0, t4 ++ fldx.d f5, a0, t5 ++ fldx.d f6, a0, t6 ++ fldx.d f7, a0, t7 ++ st.h zero, a1, 0 ++ ++ vsrari.h vr8, vr8, 6 ++ vsllwil.hu.bu vr0, vr0, 0 ++ vsllwil.hu.bu vr1, vr1, 0 ++ vsllwil.hu.bu vr2, vr2, 0 ++ vsllwil.hu.bu vr3, vr3, 0 ++ vsllwil.hu.bu vr4, vr4, 0 ++ vsllwil.hu.bu vr5, vr5, 0 ++ vsllwil.hu.bu vr6, vr6, 0 ++ vsllwil.hu.bu vr7, vr7, 0 ++ vadd.h vr0, vr0, vr8 ++ vadd.h vr1, vr1, vr8 ++ vadd.h vr2, vr2, vr8 ++ vadd.h vr3, vr3, vr8 ++ vadd.h vr4, vr4, vr8 ++ vadd.h vr5, vr5, vr8 ++ vadd.h vr6, vr6, vr8 ++ vadd.h vr7, vr7, vr8 ++ vssrarni.bu.h vr1, vr0, 0 ++ vssrarni.bu.h vr3, vr2, 0 ++ vssrarni.bu.h vr5, vr4, 0 ++ vssrarni.bu.h vr7, vr6, 0 ++ ++ vbsrl.v vr0, vr1, 8 ++ vbsrl.v vr2, vr3, 8 ++ vbsrl.v vr4, vr5, 8 ++ vbsrl.v vr6, vr7, 8 ++ fst.d f1, a0, 0 ++ fstx.d f0, a0, a2 ++ fstx.d f3, a0, t2 ++ fstx.d f2, a0, t3 ++ fstx.d f5, a0, t4 ++ fstx.d f4, a0, t5 ++ fstx.d f7, a0, t6 ++ fstx.d f6, a0, t7 ++endfunc ++function ff_h264_idct8_dc_add_8_lasx ++ xvldrepl.h xr8, a1, 0 ++ add.d t2, a2, a2 ++ add.d t3, t2, a2 ++ add.d t4, t3, a2 ++ add.d t5, t4, a2 ++ add.d t6, t5, a2 ++ add.d t7, t6, a2 ++ ++ fld.d f0, a0, 0 ++ fldx.d f1, a0, a2 ++ fldx.d f2, a0, t2 ++ fldx.d f3, a0, t3 ++ fldx.d f4, a0, t4 ++ fldx.d f5, a0, t5 ++ fldx.d f6, a0, t6 ++ fldx.d f7, a0, t7 ++ st.h zero, a1, 0 ++ ++ xvsrari.h xr8, xr8, 6 ++ xvpermi.q xr1, xr0, 0x20 ++ xvpermi.q xr3, xr2, 0x20 ++ xvpermi.q xr5, xr4, 0x20 ++ xvpermi.q xr7, xr6, 0x20 ++ xvsllwil.hu.bu xr1, xr1, 0 ++ xvsllwil.hu.bu xr3, xr3, 0 ++ xvsllwil.hu.bu xr5, xr5, 0 ++ xvsllwil.hu.bu xr7, xr7, 0 ++ xvadd.h xr1, xr1, xr8 ++ xvadd.h xr3, xr3, xr8 ++ xvadd.h xr5, xr5, xr8 ++ xvadd.h xr7, xr7, xr8 ++ ++ xvssrarni.bu.h xr3, xr1, 0 ++ xvssrarni.bu.h xr7, xr5, 0 ++ ++ xvpermi.q xr1, xr3, 0x11 ++ xvpermi.q xr5, xr7, 0x11 ++ xvbsrl.v xr0, xr1, 8 ++ xvbsrl.v xr2, xr3, 8 ++ xvbsrl.v xr4, xr5, 8 ++ xvbsrl.v xr6, xr7, 8 ++ ++ fst.d f3, a0, 0 ++ fstx.d f1, a0, a2 ++ fstx.d f2, a0, t2 ++ fstx.d f0, a0, t3 ++ fstx.d f7, a0, t4 ++ fstx.d f5, a0, t5 ++ fstx.d f6, a0, t6 ++ fstx.d f4, a0, t7 ++endfunc ++ ++/** ++ * IDCT transforms the 16 dc values and dequantizes them. ++ * @param qmul quantization parameter ++ * void FUNCC(ff_h264_luma_dc_dequant_idct)(int16_t *_output, int16_t *_input, int qmul){ ++ * LSX optimization is enough for this function. ++ */ ++function ff_h264_luma_dc_dequant_idct_8_lsx ++ vld vr0, a1, 0 ++ vld vr1, a1, 8 ++ vld vr2, a1, 16 ++ vld vr3, a1, 24 ++ vreplgr2vr.w vr8, a2 ++ LSX_TRANSPOSE4x4_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, vr9, vr10 ++ LSX_BUTTERFLY_4_H vr4, vr6, vr7, vr5, vr0, vr3, vr2, vr1 ++ LSX_BUTTERFLY_4_H vr0, vr1, vr2, vr3, vr4, vr7, vr6, vr5 ++ LSX_TRANSPOSE4x4_H vr4, vr5, vr6, vr7, vr0, vr1, vr2, vr3, vr9, vr10 ++ LSX_BUTTERFLY_4_H vr0, vr1, vr3, vr2, vr4, vr7, vr6, vr5 ++ LSX_BUTTERFLY_4_H vr4, vr5, vr6, vr7, vr0, vr1, vr2, vr3 ++ vsllwil.w.h vr0, vr0, 0 ++ vsllwil.w.h vr1, vr1, 0 ++ vsllwil.w.h vr2, vr2, 0 ++ vsllwil.w.h vr3, vr3, 0 ++ vmul.w vr0, vr0, vr8 ++ vmul.w vr1, vr1, vr8 ++ vmul.w vr2, vr2, vr8 ++ vmul.w vr3, vr3, vr8 ++ vsrarni.h.w vr1, vr0, 8 ++ vsrarni.h.w vr3, vr2, 8 ++ ++ vstelm.h vr1, a0, 0, 0 ++ vstelm.h vr1, a0, 32, 4 ++ vstelm.h vr1, a0, 64, 1 ++ vstelm.h vr1, a0, 96, 5 ++ vstelm.h vr3, a0, 128, 0 ++ vstelm.h vr3, a0, 160, 4 ++ vstelm.h vr3, a0, 192, 1 ++ vstelm.h vr3, a0, 224, 5 ++ addi.d a0, a0, 256 ++ vstelm.h vr1, a0, 0, 2 ++ vstelm.h vr1, a0, 32, 6 ++ vstelm.h vr1, a0, 64, 3 ++ vstelm.h vr1, a0, 96, 7 ++ vstelm.h vr3, a0, 128, 2 ++ vstelm.h vr3, a0, 160, 6 ++ vstelm.h vr3, a0, 192, 3 ++ vstelm.h vr3, a0, 224, 7 ++endfunc ++ +diff --git a/libavcodec/loongarch/h264idct_c.c b/libavcodec/loongarch/h264idct_c.c +new file mode 100644 +index 0000000000..f6c934521e +--- /dev/null ++++ b/libavcodec/loongarch/h264idct_c.c +@@ -0,0 +1,183 @@ ++/* ++ * Loongson LASX optimized h264idct ++ * ++ * Copyright (c) 2021 Loongson Technology Corporation Limited ++ * Contributed by Shiyou Yin ++ * Xiwei Gu ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "h264dsp_lasx.h" ++#include "libavcodec/bit_depth_template.c" ++ ++void ff_h264_idct_add16_8_lsx(uint8_t *dst, const int32_t *blk_offset, ++ int16_t *block, int32_t dst_stride, ++ const uint8_t nzc[15 * 8]) ++{ ++ int32_t i; ++ ++ for (i = 0; i < 16; i++) { ++ int32_t nnz = nzc[scan8[i]]; ++ ++ if (nnz == 1 && ((dctcoef *) block)[i * 16]) { ++ ff_h264_idct_dc_add_8_lsx(dst + blk_offset[i], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ } else if (nnz) { ++ ff_h264_idct_add_8_lsx(dst + blk_offset[i], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ } ++ } ++} ++ ++void ff_h264_idct8_add4_8_lsx(uint8_t *dst, const int32_t *blk_offset, ++ int16_t *block, int32_t dst_stride, ++ const uint8_t nzc[15 * 8]) ++{ ++ int32_t cnt; ++ ++ for (cnt = 0; cnt < 16; cnt += 4) { ++ int32_t nnz = nzc[scan8[cnt]]; ++ ++ if (nnz == 1 && ((dctcoef *) block)[cnt * 16]) { ++ ff_h264_idct8_dc_add_8_lsx(dst + blk_offset[cnt], ++ block + cnt * 16 * sizeof(pixel), ++ dst_stride); ++ } else if (nnz) { ++ ff_h264_idct8_add_8_lsx(dst + blk_offset[cnt], ++ block + cnt * 16 * sizeof(pixel), ++ dst_stride); ++ } ++ } ++} ++ ++void ff_h264_idct8_add4_8_lasx(uint8_t *dst, const int32_t *blk_offset, ++ int16_t *block, int32_t dst_stride, ++ const uint8_t nzc[15 * 8]) ++{ ++ int32_t cnt; ++ ++ for (cnt = 0; cnt < 16; cnt += 4) { ++ int32_t nnz = nzc[scan8[cnt]]; ++ ++ if (nnz == 1 && ((dctcoef *) block)[cnt * 16]) { ++ ff_h264_idct8_dc_add_8_lasx(dst + blk_offset[cnt], ++ block + cnt * 16 * sizeof(pixel), ++ dst_stride); ++ } else if (nnz) { ++ ff_h264_idct8_add_8_lasx(dst + blk_offset[cnt], ++ block + cnt * 16 * sizeof(pixel), ++ dst_stride); ++ } ++ } ++} ++ ++void ff_h264_idct_add8_8_lsx(uint8_t **dst, const int32_t *blk_offset, ++ int16_t *block, int32_t dst_stride, ++ const uint8_t nzc[15 * 8]) ++{ ++ int32_t i; ++ ++ for (i = 16; i < 20; i++) { ++ if (nzc[scan8[i]]) ++ ff_h264_idct_add_8_lsx(dst[0] + blk_offset[i], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ else if (((dctcoef *) block)[i * 16]) ++ ff_h264_idct_dc_add_8_lsx(dst[0] + blk_offset[i], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ } ++ for (i = 32; i < 36; i++) { ++ if (nzc[scan8[i]]) ++ ff_h264_idct_add_8_lsx(dst[1] + blk_offset[i], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ else if (((dctcoef *) block)[i * 16]) ++ ff_h264_idct_dc_add_8_lsx(dst[1] + blk_offset[i], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ } ++} ++ ++void ff_h264_idct_add8_422_8_lsx(uint8_t **dst, const int32_t *blk_offset, ++ int16_t *block, int32_t dst_stride, ++ const uint8_t nzc[15 * 8]) ++{ ++ int32_t i; ++ ++ for (i = 16; i < 20; i++) { ++ if (nzc[scan8[i]]) ++ ff_h264_idct_add_8_lsx(dst[0] + blk_offset[i], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ else if (((dctcoef *) block)[i * 16]) ++ ff_h264_idct_dc_add_8_lsx(dst[0] + blk_offset[i], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ } ++ for (i = 20; i < 24; i++) { ++ if (nzc[scan8[i + 4]]) ++ ff_h264_idct_add_8_lsx(dst[0] + blk_offset[i + 4], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ else if (((dctcoef *) block)[i * 16]) ++ ff_h264_idct_dc_add_8_lsx(dst[0] + blk_offset[i + 4], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ } ++ for (i = 32; i < 36; i++) { ++ if (nzc[scan8[i]]) ++ ff_h264_idct_add_8_lsx(dst[1] + blk_offset[i], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ else if (((dctcoef *) block)[i * 16]) ++ ff_h264_idct_dc_add_8_lsx(dst[1] + blk_offset[i], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ } ++ for (i = 36; i < 40; i++) { ++ if (nzc[scan8[i + 4]]) ++ ff_h264_idct_add_8_lsx(dst[1] + blk_offset[i + 4], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ else if (((dctcoef *) block)[i * 16]) ++ ff_h264_idct_dc_add_8_lsx(dst[1] + blk_offset[i + 4], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ } ++} ++ ++void ff_h264_idct_add16_intra_8_lsx(uint8_t *dst, const int32_t *blk_offset, ++ int16_t *block, int32_t dst_stride, ++ const uint8_t nzc[15 * 8]) ++{ ++ int32_t i; ++ ++ for (i = 0; i < 16; i++) { ++ if (nzc[scan8[i]]) ++ ff_h264_idct_add_8_lsx(dst + blk_offset[i], ++ block + i * 16 * sizeof(pixel), dst_stride); ++ else if (((dctcoef *) block)[i * 16]) ++ ff_h264_idct_dc_add_8_lsx(dst + blk_offset[i], ++ block + i * 16 * sizeof(pixel), ++ dst_stride); ++ } ++} ++ +diff --git a/libavcodec/loongarch/h264idct_lasx.c b/libavcodec/loongarch/h264idct_lasx.c +deleted file mode 100644 +index 46bd3b74d5..0000000000 +--- a/libavcodec/loongarch/h264idct_lasx.c ++++ /dev/null +@@ -1,498 +0,0 @@ +-/* +- * Loongson LASX optimized h264dsp +- * +- * Copyright (c) 2021 Loongson Technology Corporation Limited +- * Contributed by Shiyou Yin +- * Xiwei Gu +- * +- * This file is part of FFmpeg. +- * +- * FFmpeg is free software; you can redistribute it and/or +- * modify it under the terms of the GNU Lesser General Public +- * License as published by the Free Software Foundation; either +- * version 2.1 of the License, or (at your option) any later version. +- * +- * FFmpeg 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 +- * Lesser General Public License for more details. +- * +- * You should have received a copy of the GNU Lesser General Public +- * License along with FFmpeg; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +- */ +- +-#include "libavutil/loongarch/loongson_intrinsics.h" +-#include "h264dsp_lasx.h" +-#include "libavcodec/bit_depth_template.c" +- +-#define AVC_ITRANS_H(in0, in1, in2, in3, out0, out1, out2, out3) \ +-{ \ +- __m256i tmp0_m, tmp1_m, tmp2_m, tmp3_m; \ +- \ +- tmp0_m = __lasx_xvadd_h(in0, in2); \ +- tmp1_m = __lasx_xvsub_h(in0, in2); \ +- tmp2_m = __lasx_xvsrai_h(in1, 1); \ +- tmp2_m = __lasx_xvsub_h(tmp2_m, in3); \ +- tmp3_m = __lasx_xvsrai_h(in3, 1); \ +- tmp3_m = __lasx_xvadd_h(in1, tmp3_m); \ +- \ +- LASX_BUTTERFLY_4_H(tmp0_m, tmp1_m, tmp2_m, tmp3_m, \ +- out0, out1, out2, out3); \ +-} +- +-void ff_h264_idct_add_lasx(uint8_t *dst, int16_t *src, int32_t dst_stride) +-{ +- __m256i src0_m, src1_m, src2_m, src3_m; +- __m256i dst0_m, dst1_m; +- __m256i hres0, hres1, hres2, hres3, vres0, vres1, vres2, vres3; +- __m256i inp0_m, inp1_m, res0_m, src1, src3; +- __m256i src0 = __lasx_xvld(src, 0); +- __m256i src2 = __lasx_xvld(src, 16); +- __m256i zero = __lasx_xvldi(0); +- int32_t dst_stride_2x = dst_stride << 1; +- int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- +- __lasx_xvst(zero, src, 0); +- DUP2_ARG2(__lasx_xvilvh_d, src0, src0, src2, src2, src1, src3); +- AVC_ITRANS_H(src0, src1, src2, src3, hres0, hres1, hres2, hres3); +- LASX_TRANSPOSE4x4_H(hres0, hres1, hres2, hres3, hres0, hres1, hres2, hres3); +- AVC_ITRANS_H(hres0, hres1, hres2, hres3, vres0, vres1, vres2, vres3); +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dst_stride, dst, dst_stride_2x, +- dst, dst_stride_3x, src0_m, src1_m, src2_m, src3_m); +- DUP4_ARG2(__lasx_xvld, dst, 0, dst + dst_stride, 0, dst + dst_stride_2x, +- 0, dst + dst_stride_3x, 0, src0_m, src1_m, src2_m, src3_m); +- DUP2_ARG2(__lasx_xvilvl_d, vres1, vres0, vres3, vres2, inp0_m, inp1_m); +- inp0_m = __lasx_xvpermi_q(inp1_m, inp0_m, 0x20); +- inp0_m = __lasx_xvsrari_h(inp0_m, 6); +- DUP2_ARG2(__lasx_xvilvl_w, src1_m, src0_m, src3_m, src2_m, dst0_m, dst1_m); +- dst0_m = __lasx_xvilvl_d(dst1_m, dst0_m); +- res0_m = __lasx_vext2xv_hu_bu(dst0_m); +- res0_m = __lasx_xvadd_h(res0_m, inp0_m); +- res0_m = __lasx_xvclip255_h(res0_m); +- dst0_m = __lasx_xvpickev_b(res0_m, res0_m); +- __lasx_xvstelm_w(dst0_m, dst, 0, 0); +- __lasx_xvstelm_w(dst0_m, dst + dst_stride, 0, 1); +- __lasx_xvstelm_w(dst0_m, dst + dst_stride_2x, 0, 4); +- __lasx_xvstelm_w(dst0_m, dst + dst_stride_3x, 0, 5); +-} +- +-void ff_h264_idct8_addblk_lasx(uint8_t *dst, int16_t *src, +- int32_t dst_stride) +-{ +- __m256i src0, src1, src2, src3, src4, src5, src6, src7; +- __m256i vec0, vec1, vec2, vec3; +- __m256i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; +- __m256i res0, res1, res2, res3, res4, res5, res6, res7; +- __m256i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; +- __m256i zero = __lasx_xvldi(0); +- int32_t dst_stride_2x = dst_stride << 1; +- int32_t dst_stride_4x = dst_stride << 2; +- int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- +- src[0] += 32; +- DUP4_ARG2(__lasx_xvld, src, 0, src, 16, src, 32, src, 48, +- src0, src1, src2, src3); +- DUP4_ARG2(__lasx_xvld, src, 64, src, 80, src, 96, src, 112, +- src4, src5, src6, src7); +- __lasx_xvst(zero, src, 0); +- __lasx_xvst(zero, src, 32); +- __lasx_xvst(zero, src, 64); +- __lasx_xvst(zero, src, 96); +- +- vec0 = __lasx_xvadd_h(src0, src4); +- vec1 = __lasx_xvsub_h(src0, src4); +- vec2 = __lasx_xvsrai_h(src2, 1); +- vec2 = __lasx_xvsub_h(vec2, src6); +- vec3 = __lasx_xvsrai_h(src6, 1); +- vec3 = __lasx_xvadd_h(src2, vec3); +- +- LASX_BUTTERFLY_4_H(vec0, vec1, vec2, vec3, tmp0, tmp1, tmp2, tmp3); +- +- vec0 = __lasx_xvsrai_h(src7, 1); +- vec0 = __lasx_xvsub_h(src5, vec0); +- vec0 = __lasx_xvsub_h(vec0, src3); +- vec0 = __lasx_xvsub_h(vec0, src7); +- +- vec1 = __lasx_xvsrai_h(src3, 1); +- vec1 = __lasx_xvsub_h(src1, vec1); +- vec1 = __lasx_xvadd_h(vec1, src7); +- vec1 = __lasx_xvsub_h(vec1, src3); +- +- vec2 = __lasx_xvsrai_h(src5, 1); +- vec2 = __lasx_xvsub_h(vec2, src1); +- vec2 = __lasx_xvadd_h(vec2, src7); +- vec2 = __lasx_xvadd_h(vec2, src5); +- +- vec3 = __lasx_xvsrai_h(src1, 1); +- vec3 = __lasx_xvadd_h(src3, vec3); +- vec3 = __lasx_xvadd_h(vec3, src5); +- vec3 = __lasx_xvadd_h(vec3, src1); +- +- tmp4 = __lasx_xvsrai_h(vec3, 2); +- tmp4 = __lasx_xvadd_h(tmp4, vec0); +- tmp5 = __lasx_xvsrai_h(vec2, 2); +- tmp5 = __lasx_xvadd_h(tmp5, vec1); +- tmp6 = __lasx_xvsrai_h(vec1, 2); +- tmp6 = __lasx_xvsub_h(tmp6, vec2); +- tmp7 = __lasx_xvsrai_h(vec0, 2); +- tmp7 = __lasx_xvsub_h(vec3, tmp7); +- +- LASX_BUTTERFLY_8_H(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, +- res0, res1, res2, res3, res4, res5, res6, res7); +- LASX_TRANSPOSE8x8_H(res0, res1, res2, res3, res4, res5, res6, res7, +- res0, res1, res2, res3, res4, res5, res6, res7); +- +- DUP4_ARG1(__lasx_vext2xv_w_h, res0, res1, res2, res3, +- tmp0, tmp1, tmp2, tmp3); +- DUP4_ARG1(__lasx_vext2xv_w_h, res4, res5, res6, res7, +- tmp4, tmp5, tmp6, tmp7); +- vec0 = __lasx_xvadd_w(tmp0, tmp4); +- vec1 = __lasx_xvsub_w(tmp0, tmp4); +- +- vec2 = __lasx_xvsrai_w(tmp2, 1); +- vec2 = __lasx_xvsub_w(vec2, tmp6); +- vec3 = __lasx_xvsrai_w(tmp6, 1); +- vec3 = __lasx_xvadd_w(vec3, tmp2); +- +- tmp0 = __lasx_xvadd_w(vec0, vec3); +- tmp2 = __lasx_xvadd_w(vec1, vec2); +- tmp4 = __lasx_xvsub_w(vec1, vec2); +- tmp6 = __lasx_xvsub_w(vec0, vec3); +- +- vec0 = __lasx_xvsrai_w(tmp7, 1); +- vec0 = __lasx_xvsub_w(tmp5, vec0); +- vec0 = __lasx_xvsub_w(vec0, tmp3); +- vec0 = __lasx_xvsub_w(vec0, tmp7); +- +- vec1 = __lasx_xvsrai_w(tmp3, 1); +- vec1 = __lasx_xvsub_w(tmp1, vec1); +- vec1 = __lasx_xvadd_w(vec1, tmp7); +- vec1 = __lasx_xvsub_w(vec1, tmp3); +- +- vec2 = __lasx_xvsrai_w(tmp5, 1); +- vec2 = __lasx_xvsub_w(vec2, tmp1); +- vec2 = __lasx_xvadd_w(vec2, tmp7); +- vec2 = __lasx_xvadd_w(vec2, tmp5); +- +- vec3 = __lasx_xvsrai_w(tmp1, 1); +- vec3 = __lasx_xvadd_w(tmp3, vec3); +- vec3 = __lasx_xvadd_w(vec3, tmp5); +- vec3 = __lasx_xvadd_w(vec3, tmp1); +- +- tmp1 = __lasx_xvsrai_w(vec3, 2); +- tmp1 = __lasx_xvadd_w(tmp1, vec0); +- tmp3 = __lasx_xvsrai_w(vec2, 2); +- tmp3 = __lasx_xvadd_w(tmp3, vec1); +- tmp5 = __lasx_xvsrai_w(vec1, 2); +- tmp5 = __lasx_xvsub_w(tmp5, vec2); +- tmp7 = __lasx_xvsrai_w(vec0, 2); +- tmp7 = __lasx_xvsub_w(vec3, tmp7); +- +- LASX_BUTTERFLY_4_W(tmp0, tmp2, tmp5, tmp7, res0, res1, res6, res7); +- LASX_BUTTERFLY_4_W(tmp4, tmp6, tmp1, tmp3, res2, res3, res4, res5); +- +- DUP4_ARG2(__lasx_xvsrai_w, res0, 6, res1, 6, res2, 6, res3, 6, +- res0, res1, res2, res3); +- DUP4_ARG2(__lasx_xvsrai_w, res4, 6, res5, 6, res6, 6, res7, 6, +- res4, res5, res6, res7); +- DUP4_ARG2(__lasx_xvpickev_h, res1, res0, res3, res2, res5, res4, res7, +- res6, res0, res1, res2, res3); +- DUP4_ARG2(__lasx_xvpermi_d, res0, 0xd8, res1, 0xd8, res2, 0xd8, res3, 0xd8, +- res0, res1, res2, res3); +- +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dst_stride, dst, dst_stride_2x, +- dst, dst_stride_3x, dst0, dst1, dst2, dst3); +- dst += dst_stride_4x; +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dst_stride, dst, dst_stride_2x, +- dst, dst_stride_3x, dst4, dst5, dst6, dst7); +- dst -= dst_stride_4x; +- DUP4_ARG2(__lasx_xvilvl_b, zero, dst0, zero, dst1, zero, dst2, zero, dst3, +- dst0, dst1, dst2, dst3); +- DUP4_ARG2(__lasx_xvilvl_b, zero, dst4, zero, dst5, zero, dst6, zero, dst7, +- dst4, dst5, dst6, dst7); +- DUP4_ARG3(__lasx_xvpermi_q, dst1, dst0, 0x20, dst3, dst2, 0x20, dst5, +- dst4, 0x20, dst7, dst6, 0x20, dst0, dst1, dst2, dst3); +- res0 = __lasx_xvadd_h(res0, dst0); +- res1 = __lasx_xvadd_h(res1, dst1); +- res2 = __lasx_xvadd_h(res2, dst2); +- res3 = __lasx_xvadd_h(res3, dst3); +- DUP4_ARG1(__lasx_xvclip255_h, res0, res1, res2, res3, res0, res1, +- res2, res3); +- DUP2_ARG2(__lasx_xvpickev_b, res1, res0, res3, res2, res0, res1); +- __lasx_xvstelm_d(res0, dst, 0, 0); +- __lasx_xvstelm_d(res0, dst + dst_stride, 0, 2); +- __lasx_xvstelm_d(res0, dst + dst_stride_2x, 0, 1); +- __lasx_xvstelm_d(res0, dst + dst_stride_3x, 0, 3); +- dst += dst_stride_4x; +- __lasx_xvstelm_d(res1, dst, 0, 0); +- __lasx_xvstelm_d(res1, dst + dst_stride, 0, 2); +- __lasx_xvstelm_d(res1, dst + dst_stride_2x, 0, 1); +- __lasx_xvstelm_d(res1, dst + dst_stride_3x, 0, 3); +-} +- +-void ff_h264_idct4x4_addblk_dc_lasx(uint8_t *dst, int16_t *src, +- int32_t dst_stride) +-{ +- const int16_t dc = (src[0] + 32) >> 6; +- int32_t dst_stride_2x = dst_stride << 1; +- int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- __m256i pred, out; +- __m256i src0, src1, src2, src3; +- __m256i input_dc = __lasx_xvreplgr2vr_h(dc); +- +- src[0] = 0; +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dst_stride, dst, dst_stride_2x, +- dst, dst_stride_3x, src0, src1, src2, src3); +- DUP2_ARG2(__lasx_xvilvl_w, src1, src0, src3, src2, src0, src1); +- +- pred = __lasx_xvpermi_q(src0, src1, 0x02); +- pred = __lasx_xvaddw_h_h_bu(input_dc, pred); +- pred = __lasx_xvclip255_h(pred); +- out = __lasx_xvpickev_b(pred, pred); +- __lasx_xvstelm_w(out, dst, 0, 0); +- __lasx_xvstelm_w(out, dst + dst_stride, 0, 1); +- __lasx_xvstelm_w(out, dst + dst_stride_2x, 0, 4); +- __lasx_xvstelm_w(out, dst + dst_stride_3x, 0, 5); +-} +- +-void ff_h264_idct8_dc_addblk_lasx(uint8_t *dst, int16_t *src, +- int32_t dst_stride) +-{ +- int32_t dc_val; +- int32_t dst_stride_2x = dst_stride << 1; +- int32_t dst_stride_4x = dst_stride << 2; +- int32_t dst_stride_3x = dst_stride_2x + dst_stride; +- __m256i dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; +- __m256i dc; +- +- dc_val = (src[0] + 32) >> 6; +- dc = __lasx_xvreplgr2vr_h(dc_val); +- +- src[0] = 0; +- +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dst_stride, dst, dst_stride_2x, +- dst, dst_stride_3x, dst0, dst1, dst2, dst3); +- dst += dst_stride_4x; +- DUP4_ARG2(__lasx_xvldx, dst, 0, dst, dst_stride, dst, dst_stride_2x, +- dst, dst_stride_3x, dst4, dst5, dst6, dst7); +- dst -= dst_stride_4x; +- DUP4_ARG1(__lasx_vext2xv_hu_bu, dst0, dst1, dst2, dst3, +- dst0, dst1, dst2, dst3); +- DUP4_ARG1(__lasx_vext2xv_hu_bu, dst4, dst5, dst6, dst7, +- dst4, dst5, dst6, dst7); +- DUP4_ARG3(__lasx_xvpermi_q, dst1, dst0, 0x20, dst3, dst2, 0x20, dst5, +- dst4, 0x20, dst7, dst6, 0x20, dst0, dst1, dst2, dst3); +- dst0 = __lasx_xvadd_h(dst0, dc); +- dst1 = __lasx_xvadd_h(dst1, dc); +- dst2 = __lasx_xvadd_h(dst2, dc); +- dst3 = __lasx_xvadd_h(dst3, dc); +- DUP4_ARG1(__lasx_xvclip255_h, dst0, dst1, dst2, dst3, +- dst0, dst1, dst2, dst3); +- DUP2_ARG2(__lasx_xvpickev_b, dst1, dst0, dst3, dst2, dst0, dst1); +- __lasx_xvstelm_d(dst0, dst, 0, 0); +- __lasx_xvstelm_d(dst0, dst + dst_stride, 0, 2); +- __lasx_xvstelm_d(dst0, dst + dst_stride_2x, 0, 1); +- __lasx_xvstelm_d(dst0, dst + dst_stride_3x, 0, 3); +- dst += dst_stride_4x; +- __lasx_xvstelm_d(dst1, dst, 0, 0); +- __lasx_xvstelm_d(dst1, dst + dst_stride, 0, 2); +- __lasx_xvstelm_d(dst1, dst + dst_stride_2x, 0, 1); +- __lasx_xvstelm_d(dst1, dst + dst_stride_3x, 0, 3); +-} +- +-void ff_h264_idct_add16_lasx(uint8_t *dst, +- const int32_t *blk_offset, +- int16_t *block, int32_t dst_stride, +- const uint8_t nzc[15 * 8]) +-{ +- int32_t i; +- +- for (i = 0; i < 16; i++) { +- int32_t nnz = nzc[scan8[i]]; +- +- if (nnz) { +- if (nnz == 1 && ((dctcoef *) block)[i * 16]) +- ff_h264_idct4x4_addblk_dc_lasx(dst + blk_offset[i], +- block + i * 16 * sizeof(pixel), +- dst_stride); +- else +- ff_h264_idct_add_lasx(dst + blk_offset[i], +- block + i * 16 * sizeof(pixel), +- dst_stride); +- } +- } +-} +- +-void ff_h264_idct8_add4_lasx(uint8_t *dst, const int32_t *blk_offset, +- int16_t *block, int32_t dst_stride, +- const uint8_t nzc[15 * 8]) +-{ +- int32_t cnt; +- +- for (cnt = 0; cnt < 16; cnt += 4) { +- int32_t nnz = nzc[scan8[cnt]]; +- +- if (nnz) { +- if (nnz == 1 && ((dctcoef *) block)[cnt * 16]) +- ff_h264_idct8_dc_addblk_lasx(dst + blk_offset[cnt], +- block + cnt * 16 * sizeof(pixel), +- dst_stride); +- else +- ff_h264_idct8_addblk_lasx(dst + blk_offset[cnt], +- block + cnt * 16 * sizeof(pixel), +- dst_stride); +- } +- } +-} +- +- +-void ff_h264_idct_add8_lasx(uint8_t **dst, +- const int32_t *blk_offset, +- int16_t *block, int32_t dst_stride, +- const uint8_t nzc[15 * 8]) +-{ +- int32_t i; +- +- for (i = 16; i < 20; i++) { +- if (nzc[scan8[i]]) +- ff_h264_idct_add_lasx(dst[0] + blk_offset[i], +- block + i * 16 * sizeof(pixel), +- dst_stride); +- else if (((dctcoef *) block)[i * 16]) +- ff_h264_idct4x4_addblk_dc_lasx(dst[0] + blk_offset[i], +- block + i * 16 * sizeof(pixel), +- dst_stride); +- } +- for (i = 32; i < 36; i++) { +- if (nzc[scan8[i]]) +- ff_h264_idct_add_lasx(dst[1] + blk_offset[i], +- block + i * 16 * sizeof(pixel), +- dst_stride); +- else if (((dctcoef *) block)[i * 16]) +- ff_h264_idct4x4_addblk_dc_lasx(dst[1] + blk_offset[i], +- block + i * 16 * sizeof(pixel), +- dst_stride); +- } +-} +- +-void ff_h264_idct_add8_422_lasx(uint8_t **dst, +- const int32_t *blk_offset, +- int16_t *block, int32_t dst_stride, +- const uint8_t nzc[15 * 8]) +-{ +- int32_t i; +- +- for (i = 16; i < 20; i++) { +- if (nzc[scan8[i]]) +- ff_h264_idct_add_lasx(dst[0] + blk_offset[i], +- block + i * 16 * sizeof(pixel), +- dst_stride); +- else if (((dctcoef *) block)[i * 16]) +- ff_h264_idct4x4_addblk_dc_lasx(dst[0] + blk_offset[i], +- block + i * 16 * sizeof(pixel), +- dst_stride); +- } +- for (i = 32; i < 36; i++) { +- if (nzc[scan8[i]]) +- ff_h264_idct_add_lasx(dst[1] + blk_offset[i], +- block + i * 16 * sizeof(pixel), +- dst_stride); +- else if (((dctcoef *) block)[i * 16]) +- ff_h264_idct4x4_addblk_dc_lasx(dst[1] + blk_offset[i], +- block + i * 16 * sizeof(pixel), +- dst_stride); +- } +- for (i = 20; i < 24; i++) { +- if (nzc[scan8[i + 4]]) +- ff_h264_idct_add_lasx(dst[0] + blk_offset[i + 4], +- block + i * 16 * sizeof(pixel), +- dst_stride); +- else if (((dctcoef *) block)[i * 16]) +- ff_h264_idct4x4_addblk_dc_lasx(dst[0] + blk_offset[i + 4], +- block + i * 16 * sizeof(pixel), +- dst_stride); +- } +- for (i = 36; i < 40; i++) { +- if (nzc[scan8[i + 4]]) +- ff_h264_idct_add_lasx(dst[1] + blk_offset[i + 4], +- block + i * 16 * sizeof(pixel), +- dst_stride); +- else if (((dctcoef *) block)[i * 16]) +- ff_h264_idct4x4_addblk_dc_lasx(dst[1] + blk_offset[i + 4], +- block + i * 16 * sizeof(pixel), +- dst_stride); +- } +-} +- +-void ff_h264_idct_add16_intra_lasx(uint8_t *dst, +- const int32_t *blk_offset, +- int16_t *block, +- int32_t dst_stride, +- const uint8_t nzc[15 * 8]) +-{ +- int32_t i; +- +- for (i = 0; i < 16; i++) { +- if (nzc[scan8[i]]) +- ff_h264_idct_add_lasx(dst + blk_offset[i], +- block + i * 16 * sizeof(pixel), dst_stride); +- else if (((dctcoef *) block)[i * 16]) +- ff_h264_idct4x4_addblk_dc_lasx(dst + blk_offset[i], +- block + i * 16 * sizeof(pixel), +- dst_stride); +- } +-} +- +-void ff_h264_deq_idct_luma_dc_lasx(int16_t *dst, int16_t *src, +- int32_t de_qval) +-{ +-#define DC_DEST_STRIDE 16 +- +- __m256i src0, src1, src2, src3; +- __m256i vec0, vec1, vec2, vec3; +- __m256i tmp0, tmp1, tmp2, tmp3; +- __m256i hres0, hres1, hres2, hres3; +- __m256i vres0, vres1, vres2, vres3; +- __m256i de_q_vec = __lasx_xvreplgr2vr_w(de_qval); +- +- DUP4_ARG2(__lasx_xvld, src, 0, src, 8, src, 16, src, 24, +- src0, src1, src2, src3); +- LASX_TRANSPOSE4x4_H(src0, src1, src2, src3, tmp0, tmp1, tmp2, tmp3); +- LASX_BUTTERFLY_4_H(tmp0, tmp2, tmp3, tmp1, vec0, vec3, vec2, vec1); +- LASX_BUTTERFLY_4_H(vec0, vec1, vec2, vec3, hres0, hres3, hres2, hres1); +- LASX_TRANSPOSE4x4_H(hres0, hres1, hres2, hres3, +- hres0, hres1, hres2, hres3); +- LASX_BUTTERFLY_4_H(hres0, hres1, hres3, hres2, vec0, vec3, vec2, vec1); +- LASX_BUTTERFLY_4_H(vec0, vec1, vec2, vec3, vres0, vres1, vres2, vres3); +- DUP4_ARG1(__lasx_vext2xv_w_h, vres0, vres1, vres2, vres3, +- vres0, vres1, vres2, vres3); +- DUP2_ARG3(__lasx_xvpermi_q, vres1, vres0, 0x20, vres3, vres2, 0x20, +- vres0, vres1); +- +- vres0 = __lasx_xvmul_w(vres0, de_q_vec); +- vres1 = __lasx_xvmul_w(vres1, de_q_vec); +- +- vres0 = __lasx_xvsrari_w(vres0, 8); +- vres1 = __lasx_xvsrari_w(vres1, 8); +- vec0 = __lasx_xvpickev_h(vres1, vres0); +- vec0 = __lasx_xvpermi_d(vec0, 0xd8); +- __lasx_xvstelm_h(vec0, dst + 0 * DC_DEST_STRIDE, 0, 0); +- __lasx_xvstelm_h(vec0, dst + 2 * DC_DEST_STRIDE, 0, 1); +- __lasx_xvstelm_h(vec0, dst + 8 * DC_DEST_STRIDE, 0, 2); +- __lasx_xvstelm_h(vec0, dst + 10 * DC_DEST_STRIDE, 0, 3); +- __lasx_xvstelm_h(vec0, dst + 1 * DC_DEST_STRIDE, 0, 4); +- __lasx_xvstelm_h(vec0, dst + 3 * DC_DEST_STRIDE, 0, 5); +- __lasx_xvstelm_h(vec0, dst + 9 * DC_DEST_STRIDE, 0, 6); +- __lasx_xvstelm_h(vec0, dst + 11 * DC_DEST_STRIDE, 0, 7); +- __lasx_xvstelm_h(vec0, dst + 4 * DC_DEST_STRIDE, 0, 8); +- __lasx_xvstelm_h(vec0, dst + 6 * DC_DEST_STRIDE, 0, 9); +- __lasx_xvstelm_h(vec0, dst + 12 * DC_DEST_STRIDE, 0, 10); +- __lasx_xvstelm_h(vec0, dst + 14 * DC_DEST_STRIDE, 0, 11); +- __lasx_xvstelm_h(vec0, dst + 5 * DC_DEST_STRIDE, 0, 12); +- __lasx_xvstelm_h(vec0, dst + 7 * DC_DEST_STRIDE, 0, 13); +- __lasx_xvstelm_h(vec0, dst + 13 * DC_DEST_STRIDE, 0, 14); +- __lasx_xvstelm_h(vec0, dst + 15 * DC_DEST_STRIDE, 0, 15); +- +-#undef DC_DEST_STRIDE +-} +diff --git a/libavcodec/loongarch/h264intrapred.S b/libavcodec/loongarch/h264intrapred.S +new file mode 100644 +index 0000000000..4b0de26965 +--- /dev/null ++++ b/libavcodec/loongarch/h264intrapred.S +@@ -0,0 +1,299 @@ ++/* ++ * Loongson LSX optimized h264intrapred ++ * ++ * Copyright (c) 2022 Loongson Technology Corporation Limited ++ * Contributed by Lu Wang ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "loongson_asm.S" ++ ++const shufa ++.byte 6, 5, 4, 3, 2, 1, 0 ++endconst ++ ++const mulk ++.byte 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0 ++endconst ++ ++const mulh ++.byte 0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0 ++.byte 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 13, 0, 14, 0, 15, 0 ++endconst ++ ++.macro PRED16X16_PLANE ++ slli.d t6, a1, 1 ++ slli.d t4, a1, 3 ++ addi.d t0, a0, 7 ++ sub.d t0, t0, a1 ++ add.d t1, a0, t4 ++ addi.d t1, t1, -1 ++ sub.d t2, t1, t6 ++ ++ ld.bu t3, t0, 1 ++ ld.bu t4, t0, -1 ++ ld.bu t5, t1, 0 ++ ld.bu t7, t2, 0 ++ sub.d t3, t3, t4 ++ sub.d t4, t5, t7 ++ ++ la.local t5, mulk ++ vld vr0, t5, 0 ++ fld.d f1, t0, 2 ++ fld.d f2, t0, -8 ++ la.local t5, shufa ++ fld.d f3, t5, 0 ++ vshuf.b vr2, vr2, vr2, vr3 ++ vilvl.b vr1, vr1, vr2 ++ vhsubw.hu.bu vr1, vr1, vr1 ++ vmul.h vr0, vr0, vr1 ++ vhaddw.w.h vr1, vr0, vr0 ++ vhaddw.d.w vr0, vr1, vr1 ++ vhaddw.q.d vr1, vr0, vr0 ++ vpickve2gr.w t5, vr1, 0 ++ add.d t3, t3, t5 ++//2 ++ sub.d t2, t2, a1 ++ ld.bu t8, t2, 0 ++ ldx.bu t7, t1, a1 ++ sub.d t5, t7, t8 ++ slli.d t5, t5, 1 ++ ++//3&4 ++ add.d t1, t1, t6 ++ sub.d t2, t2, a1 ++ ld.bu t8, t2, 0 ++ ld.bu t7, t1, 0 ++ sub.d t7, t7, t8 ++ slli.d t8, t7, 1 ++ add.d t7, t7, t8 ++ add.d t5, t5, t7 ++ sub.d t2, t2, a1 ++ ld.bu t8, t2, 0 ++ ldx.bu t7, t1, a1 ++ sub.d t7, t7, t8 ++ slli.d t7, t7, 2 ++ add.d t5, t5, t7 ++ ++//5&6 ++ add.d t1, t1, t6 ++ sub.d t2, t2, a1 ++ ld.bu t8, t2, 0 ++ ld.bu t7, t1, 0 ++ sub.d t7, t7, t8 ++ slli.d t8, t7, 2 ++ add.d t7, t7, t8 ++ add.d t5, t5, t7 ++ sub.d t2, t2, a1 ++ ld.bu t8, t2, 0 ++ ldx.bu t7, t1, a1 ++ sub.d t7, t7, t8 ++ slli.d t8, t7, 1 ++ slli.d t7, t7, 2 ++ add.d t7, t7, t8 ++ add.d t5, t5, t7 ++ ++//7&8 ++ add.d t1, t1, t6 ++ sub.d t2, t2, a1 ++ ld.bu t8, t2, 0 ++ ld.bu t7, t1, 0 ++ sub.d t7, t7, t8 ++ slli.d t8, t7, 3 ++ sub.d t7, t8, t7 ++ add.d t5, t5, t7 ++ sub.d t2, t2, a1 ++ ld.bu t8, t2, 0 ++ ldx.bu t7, t1, a1 ++ sub.d t7, t7, t8 ++ slli.d t7, t7, 3 ++ add.d t5, t5, t7 ++ add.d t4, t4, t5 ++ add.d t1, t1, a1 ++.endm ++ ++.macro PRED16X16_PLANE_END ++ ld.bu t7, t1, 0 ++ ld.bu t8, t2, 16 ++ add.d t5, t7, t8 ++ addi.d t5, t5, 1 ++ slli.d t5, t5, 4 ++ add.d t7, t3, t4 ++ slli.d t8, t7, 3 ++ sub.d t7, t8, t7 ++ sub.d t5, t5, t7 ++ ++ la.local t8, mulh ++ vld vr3, t8, 0 ++ slli.d t8, t3, 3 ++ vreplgr2vr.h vr4, t3 ++ vreplgr2vr.h vr9, t8 ++ vmul.h vr5, vr3, vr4 ++ ++.rept 16 ++ move t7, t5 ++ add.d t5, t5, t4 ++ vreplgr2vr.h vr6, t7 ++ vadd.h vr7, vr6, vr5 ++ vadd.h vr8, vr9, vr7 ++ vssrani.bu.h vr8, vr7, 5 ++ vst vr8, a0, 0 ++ add.d a0, a0, a1 ++.endr ++.endm ++ ++.macro PRED16X16_PLANE_END_LASX ++ ld.bu t7, t1, 0 ++ ld.bu t8, t2, 16 ++ add.d t5, t7, t8 ++ addi.d t5, t5, 1 ++ slli.d t5, t5, 4 ++ add.d t7, t3, t4 ++ slli.d t8, t7, 3 ++ sub.d t7, t8, t7 ++ sub.d t5, t5, t7 ++ ++ la.local t8, mulh ++ xvld xr3, t8, 0 ++ xvreplgr2vr.h xr4, t3 ++ xvmul.h xr5, xr3, xr4 ++ ++.rept 8 ++ move t7, t5 ++ add.d t5, t5, t4 ++ xvreplgr2vr.h xr6, t7 ++ xvreplgr2vr.h xr8, t5 ++ add.d t5, t5, t4 ++ xvadd.h xr7, xr6, xr5 ++ xvadd.h xr9, xr8, xr5 ++ ++ xvssrani.bu.h xr9, xr7, 5 ++ vstelm.d vr9, a0, 0, 0 ++ xvstelm.d xr9, a0, 8, 2 ++ add.d a0, a0, a1 ++ vstelm.d vr9, a0, 0, 1 ++ xvstelm.d xr9, a0, 8, 3 ++ add.d a0, a0, a1 ++.endr ++.endm ++ ++/* void ff_h264_pred16x16_plane_h264_8_lsx(uint8_t *src, ptrdiff_t stride) ++ */ ++function ff_h264_pred16x16_plane_h264_8_lsx ++ PRED16X16_PLANE ++ ++ slli.d t7, t3, 2 ++ add.d t3, t3, t7 ++ addi.d t3, t3, 32 ++ srai.d t3, t3, 6 ++ slli.d t7, t4, 2 ++ add.d t4, t4, t7 ++ addi.d t4, t4, 32 ++ srai.d t4, t4, 6 ++ ++ PRED16X16_PLANE_END ++endfunc ++ ++/* void ff_h264_pred16x16_plane_rv40_8_lsx(uint8_t *src, ptrdiff_t stride) ++ */ ++function ff_h264_pred16x16_plane_rv40_8_lsx ++ PRED16X16_PLANE ++ ++ srai.d t7, t3, 2 ++ add.d t3, t3, t7 ++ srai.d t3, t3, 4 ++ srai.d t7, t4, 2 ++ add.d t4, t4, t7 ++ srai.d t4, t4, 4 ++ ++ PRED16X16_PLANE_END ++endfunc ++ ++/* void ff_h264_pred16x16_plane_svq3_8_lsx(uint8_t *src, ptrdiff_t stride) ++ */ ++function ff_h264_pred16x16_plane_svq3_8_lsx ++ PRED16X16_PLANE ++ ++ li.d t6, 4 ++ li.d t7, 5 ++ li.d t8, 16 ++ div.d t3, t3, t6 ++ mul.d t3, t3, t7 ++ div.d t3, t3, t8 ++ div.d t4, t4, t6 ++ mul.d t4, t4, t7 ++ div.d t4, t4, t8 ++ move t7, t3 ++ move t3, t4 ++ move t4, t7 ++ ++ PRED16X16_PLANE_END ++endfunc ++ ++/* void ff_h264_pred16x16_plane_h264_8_lasx(uint8_t *src, ptrdiff_t stride) ++ */ ++function ff_h264_pred16x16_plane_h264_8_lasx ++ PRED16X16_PLANE ++ ++ slli.d t7, t3, 2 ++ add.d t3, t3, t7 ++ addi.d t3, t3, 32 ++ srai.d t3, t3, 6 ++ slli.d t7, t4, 2 ++ add.d t4, t4, t7 ++ addi.d t4, t4, 32 ++ srai.d t4, t4, 6 ++ ++ PRED16X16_PLANE_END_LASX ++endfunc ++ ++/* void ff_h264_pred16x16_plane_rv40_8_lasx(uint8_t *src, ptrdiff_t stride) ++ */ ++function ff_h264_pred16x16_plane_rv40_8_lasx ++ PRED16X16_PLANE ++ ++ srai.d t7, t3, 2 ++ add.d t3, t3, t7 ++ srai.d t3, t3, 4 ++ srai.d t7, t4, 2 ++ add.d t4, t4, t7 ++ srai.d t4, t4, 4 ++ ++ PRED16X16_PLANE_END_LASX ++endfunc ++ ++/* void ff_h264_pred16x16_plane_svq3_8_lasx(uint8_t *src, ptrdiff_t stride) ++ */ ++function ff_h264_pred16x16_plane_svq3_8_lasx ++ PRED16X16_PLANE ++ ++ li.d t5, 4 ++ li.d t7, 5 ++ li.d t8, 16 ++ div.d t3, t3, t5 ++ mul.d t3, t3, t7 ++ div.d t3, t3, t8 ++ div.d t4, t4, t5 ++ mul.d t4, t4, t7 ++ div.d t4, t4, t8 ++ move t7, t3 ++ move t3, t4 ++ move t4, t7 ++ ++ PRED16X16_PLANE_END_LASX ++endfunc +diff --git a/libavcodec/loongarch/h264qpel.S b/libavcodec/loongarch/h264qpel.S +new file mode 100644 +index 0000000000..3a0947e898 +--- /dev/null ++++ b/libavcodec/loongarch/h264qpel.S +@@ -0,0 +1,3635 @@ ++/* ++ * Loongson LSX optimized h264qpel ++ * ++ * Copyright (c) 2022 Loongson Technology Corporation Limited ++ * Contributed by Hecai Yuan ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "loongson_asm.S" ++ ++/* ++ * void put_h264_qpel16_mc00(uint8_t *dst, const uint8_t *src, ++ * ptrdiff_t stride) ++ */ ++function ff_put_h264_qpel16_mc00_lsx ++ slli.d t0, a2, 1 ++ add.d t1, t0, a2 ++ slli.d t2, t0, 1 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ vldx vr2, a1, t0 ++ vldx vr3, a1, t1 ++ add.d a1, a1, t2 ++ vld vr4, a1, 0 ++ vldx vr5, a1, a2 ++ vldx vr6, a1, t0 ++ vldx vr7, a1, t1 ++ add.d a1, a1, t2 ++ ++ vst vr0, a0, 0 ++ vstx vr1, a0, a2 ++ vstx vr2, a0, t0 ++ vstx vr3, a0, t1 ++ add.d a0, a0, t2 ++ vst vr4, a0, 0 ++ vstx vr5, a0, a2 ++ vstx vr6, a0, t0 ++ vstx vr7, a0, t1 ++ add.d a0, a0, t2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ vldx vr2, a1, t0 ++ vldx vr3, a1, t1 ++ add.d a1, a1, t2 ++ vld vr4, a1, 0 ++ vldx vr5, a1, a2 ++ vldx vr6, a1, t0 ++ vldx vr7, a1, t1 ++ ++ vst vr0, a0, 0 ++ vstx vr1, a0, a2 ++ vstx vr2, a0, t0 ++ vstx vr3, a0, t1 ++ add.d a0, a0, t2 ++ vst vr4, a0, 0 ++ vstx vr5, a0, a2 ++ vstx vr6, a0, t0 ++ vstx vr7, a0, t1 ++endfunc ++ ++.macro LSX_QPEL8_H_LOWPASS out0, out1 ++ vbsrl.v vr2, vr0, 1 ++ vbsrl.v vr3, vr1, 1 ++ vbsrl.v vr4, vr0, 2 ++ vbsrl.v vr5, vr1, 2 ++ vbsrl.v vr6, vr0, 3 ++ vbsrl.v vr7, vr1, 3 ++ vbsrl.v vr8, vr0, 4 ++ vbsrl.v vr9, vr1, 4 ++ vbsrl.v vr10, vr0, 5 ++ vbsrl.v vr11, vr1, 5 ++ ++ vilvl.b vr6, vr4, vr6 ++ vilvl.b vr7, vr5, vr7 ++ vilvl.b vr8, vr2, vr8 ++ vilvl.b vr9, vr3, vr9 ++ vilvl.b vr10, vr0, vr10 ++ vilvl.b vr11, vr1, vr11 ++ ++ vhaddw.hu.bu vr6, vr6, vr6 ++ vhaddw.hu.bu vr7, vr7, vr7 ++ vhaddw.hu.bu vr8, vr8, vr8 ++ vhaddw.hu.bu vr9, vr9, vr9 ++ vhaddw.hu.bu vr10, vr10, vr10 ++ vhaddw.hu.bu vr11, vr11, vr11 ++ ++ vmul.h vr2, vr6, vr20 ++ vmul.h vr3, vr7, vr20 ++ vmul.h vr4, vr8, vr21 ++ vmul.h vr5, vr9, vr21 ++ vssub.h vr2, vr2, vr4 ++ vssub.h vr3, vr3, vr5 ++ vsadd.h vr2, vr2, vr10 ++ vsadd.h vr3, vr3, vr11 ++ vsadd.h \out0, vr2, vr22 ++ vsadd.h \out1, vr3, vr22 ++.endm ++ ++/* ++ * void put_h264_qpel16_mc10(uint8_t *dst, const uint8_t *src, ++ * ptrdiff_t stride) ++ */ ++function ff_put_h264_qpel16_mc10_lsx ++ addi.d t8, a1, 0 ++ vldi vr20, 0x414 ++ vldi vr21, 0x405 ++ vldi vr22, 0x410 ++ ++ slli.d t1, a2, 1 ++ add.d t2, t1, a2 ++ addi.d t0, a1, -2 // t0 = src - 2 ++ addi.d a1, t0, 8 // a1 = t0 + 8 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr14, vr15 ++ ++ alsl.d t0, a2, t0, 2 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr16, vr17 ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr18, vr19 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vssrani.bu.h vr2, vr12, 5 ++ vssrani.bu.h vr3, vr13, 5 ++ vld vr10, t8, 0 ++ vldx vr11, t8, a2 ++ vavgr.bu vr0, vr2, vr10 ++ vavgr.bu vr1, vr3, vr11 ++ vst vr0, a0, 0 ++ vstx vr1, a0, a2 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr4, vr5 ++ vssrani.bu.h vr4, vr14, 5 ++ vssrani.bu.h vr5, vr15, 5 ++ vldx vr12, t8, t1 ++ vldx vr13, t8, t2 ++ vavgr.bu vr2, vr4, vr12 ++ vavgr.bu vr3, vr5, vr13 ++ vstx vr2, a0, t1 ++ vstx vr3, a0, t2 ++ ++ alsl.d a0, a2, a0, 2 ++ alsl.d t8, a2, t8, 2 ++ alsl.d a1, a2, a1, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr6, vr7 ++ vssrani.bu.h vr6, vr16, 5 ++ vssrani.bu.h vr7, vr17, 5 ++ vld vr14, t8, 0 ++ vldx vr15, t8, a2 ++ vavgr.bu vr4, vr6, vr14 ++ vavgr.bu vr5, vr7, vr15 ++ vst vr4, a0, 0 ++ vstx vr5, a0, a2 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr8, vr9 ++ vssrani.bu.h vr8, vr18, 5 ++ vssrani.bu.h vr9, vr19, 5 ++ vldx vr16, t8, t1 ++ vldx vr17, t8, t2 ++ vavgr.bu vr6, vr8, vr16 ++ vavgr.bu vr7, vr9, vr17 ++ vstx vr6, a0, t1 ++ vstx vr7, a0, t2 ++ ++ alsl.d t0, a2, t0, 2 ++ alsl.d t8, a2, t8, 2 ++ alsl.d a0, a2, a0, 2 ++ alsl.d a1, a2, a1, 2 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr14, vr15 ++ ++ alsl.d t0, a2, t0, 2 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr16, vr17 ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr18, vr19 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vssrani.bu.h vr2, vr12, 5 ++ vssrani.bu.h vr3, vr13, 5 ++ vld vr10, t8, 0 ++ vldx vr11, t8, a2 ++ vavgr.bu vr0, vr2, vr10 ++ vavgr.bu vr1, vr3, vr11 ++ vst vr0, a0, 0 ++ vstx vr1, a0, a2 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr4, vr5 ++ vssrani.bu.h vr4, vr14, 5 ++ vssrani.bu.h vr5, vr15, 5 ++ vldx vr12, t8, t1 ++ vldx vr13, t8, t2 ++ vavgr.bu vr2, vr4, vr12 ++ vavgr.bu vr3, vr5, vr13 ++ vstx vr2, a0, t1 ++ vstx vr3, a0, t2 ++ ++ alsl.d a0, a2, a0, 2 ++ alsl.d t8, a2, t8, 2 ++ alsl.d a1, a2, a1, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr6, vr7 ++ vssrani.bu.h vr6, vr16, 5 ++ vssrani.bu.h vr7, vr17, 5 ++ vld vr14, t8, 0 ++ vldx vr15, t8, a2 ++ vavgr.bu vr4, vr6, vr14 ++ vavgr.bu vr5, vr7, vr15 ++ vst vr4, a0, 0 ++ vstx vr5, a0, a2 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr8, vr9 ++ vssrani.bu.h vr8, vr18, 5 ++ vssrani.bu.h vr9, vr19, 5 ++ vldx vr16, t8, t1 ++ vldx vr17, t8, t2 ++ vavgr.bu vr6, vr8, vr16 ++ vavgr.bu vr7, vr9, vr17 ++ vstx vr6, a0, t1 ++ vstx vr7, a0, t2 ++endfunc ++ ++/* ++ * void put_h264_qpel16_mc20(uint8_t *dst, const uint8_t *src, ++ * ptrdiff_t stride) ++ */ ++function ff_put_h264_qpel16_mc20_lsx ++ vldi vr20, 0x414 ++ vldi vr21, 0x405 ++ vldi vr22, 0x410 ++ ++ slli.d t1, a2, 1 ++ add.d t2, t1, a2 ++ addi.d t0, a1, -2 // t0 = src - 2 ++ addi.d a1, t0, 8 // a1 = t0 + 8 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr14, vr15 ++ ++ alsl.d t0, a2, t0, 2 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr16, vr17 ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr18, vr19 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vssrani.bu.h vr2, vr12, 5 ++ vssrani.bu.h vr3, vr13, 5 ++ vst vr2, a0, 0 ++ vstx vr3, a0, a2 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr4, vr5 ++ vssrani.bu.h vr4, vr14, 5 ++ vssrani.bu.h vr5, vr15, 5 ++ vstx vr4, a0, t1 ++ vstx vr5, a0, t2 ++ ++ alsl.d a0, a2, a0, 2 ++ alsl.d a1, a2, a1, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr6, vr7 ++ vssrani.bu.h vr6, vr16, 5 ++ vssrani.bu.h vr7, vr17, 5 ++ vst vr6, a0, 0 ++ vstx vr7, a0, a2 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr8, vr9 ++ vssrani.bu.h vr8, vr18, 5 ++ vssrani.bu.h vr9, vr19, 5 ++ vstx vr8, a0, t1 ++ vstx vr9, a0, t2 ++ ++ alsl.d t0, a2, t0, 2 ++ alsl.d a0, a2, a0, 2 ++ alsl.d a1, a2, a1, 2 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr14, vr15 ++ ++ alsl.d t0, a2, t0, 2 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr16, vr17 ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr18, vr19 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vssrani.bu.h vr2, vr12, 5 ++ vssrani.bu.h vr3, vr13, 5 ++ vst vr2, a0, 0 ++ vstx vr3, a0, a2 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr4, vr5 ++ vssrani.bu.h vr4, vr14, 5 ++ vssrani.bu.h vr5, vr15, 5 ++ vstx vr4, a0, t1 ++ vstx vr5, a0, t2 ++ ++ alsl.d a1, a2, a1, 2 ++ alsl.d a0, a2, a0, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr6, vr7 ++ vssrani.bu.h vr6, vr16, 5 ++ vssrani.bu.h vr7, vr17, 5 ++ vst vr6, a0, 0 ++ vstx vr7, a0, a2 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr8, vr9 ++ vssrani.bu.h vr8, vr18, 5 ++ vssrani.bu.h vr9, vr19, 5 ++ vstx vr8, a0, t1 ++ vstx vr9, a0, t2 ++endfunc ++ ++/* ++ * void put_h264_qpel16_mc30(uint8_t *dst, const uint8_t *src, ++ * ptrdiff_t stride) ++ */ ++function ff_put_h264_qpel16_mc30_lsx ++ vldi vr20, 0x414 ++ vldi vr21, 0x405 ++ vldi vr22, 0x410 ++ ++ slli.d t1, a2, 1 ++ add.d t2, t1, a2 ++ addi.d t0, a1, -2 // t0 = src - 2 ++ addi.d t8, a1, 1 // t8 = src + 1 ++ addi.d a1, t0, 8 // a1 = t0 + 8 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr14, vr15 ++ ++ alsl.d t0, a2, t0, 2 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr16, vr17 ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr18, vr19 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vssrani.bu.h vr2, vr12, 5 ++ vssrani.bu.h vr3, vr13, 5 ++ vld vr10, t8, 0 ++ vldx vr11, t8, a2 ++ vavgr.bu vr0, vr2, vr10 ++ vavgr.bu vr1, vr3, vr11 ++ vst vr0, a0, 0 ++ vstx vr1, a0, a2 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr4, vr5 ++ vssrani.bu.h vr4, vr14, 5 ++ vssrani.bu.h vr5, vr15, 5 ++ vldx vr12, t8, t1 ++ vldx vr13, t8, t2 ++ vavgr.bu vr2, vr4, vr12 ++ vavgr.bu vr3, vr5, vr13 ++ vstx vr2, a0, t1 ++ vstx vr3, a0, t2 ++ ++ alsl.d a1, a2, a1, 2 ++ alsl.d t8, a2, t8, 2 ++ alsl.d a0, a2, a0, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr6, vr7 ++ vssrani.bu.h vr6, vr16, 5 ++ vssrani.bu.h vr7, vr17, 5 ++ vld vr14, t8, 0 ++ vldx vr15, t8, a2 ++ vavgr.bu vr4, vr6, vr14 ++ vavgr.bu vr5, vr7, vr15 ++ vst vr4, a0, 0 ++ vstx vr5, a0, a2 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr8, vr9 ++ vssrani.bu.h vr8, vr18, 5 ++ vssrani.bu.h vr9, vr19, 5 ++ vldx vr16, t8, t1 ++ vldx vr17, t8, t2 ++ vavgr.bu vr6, vr8, vr16 ++ vavgr.bu vr7, vr9, vr17 ++ vstx vr6, a0, t1 ++ vstx vr7, a0, t2 ++ ++ alsl.d t0, a2, t0, 2 ++ alsl.d a0, a2, a0, 2 ++ alsl.d t8, a2, t8, 2 ++ alsl.d a1, a2, a1, 2 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr14, vr15 ++ ++ alsl.d t0, a2, t0, 2 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr16, vr17 ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr18, vr19 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vssrani.bu.h vr2, vr12, 5 ++ vssrani.bu.h vr3, vr13, 5 ++ vld vr10, t8, 0 ++ vldx vr11, t8, a2 ++ vavgr.bu vr0, vr2, vr10 ++ vavgr.bu vr1, vr3, vr11 ++ vst vr0, a0, 0 ++ vstx vr1, a0, a2 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr4, vr5 ++ vssrani.bu.h vr4, vr14, 5 ++ vssrani.bu.h vr5, vr15, 5 ++ vldx vr12, t8, t1 ++ vldx vr13, t8, t2 ++ vavgr.bu vr2, vr4, vr12 ++ vavgr.bu vr3, vr5, vr13 ++ vstx vr2, a0, t1 ++ vstx vr3, a0, t2 ++ ++ alsl.d a1, a2, a1, 2 ++ alsl.d a0, a2, a0, 2 ++ alsl.d t8, a2, t8, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr6, vr7 ++ vssrani.bu.h vr6, vr16, 5 ++ vssrani.bu.h vr7, vr17, 5 ++ vld vr14, t8, 0 ++ vldx vr15, t8, a2 ++ vavgr.bu vr4, vr6, vr14 ++ vavgr.bu vr5, vr7, vr15 ++ vst vr4, a0, 0 ++ vstx vr5, a0, a2 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr8, vr9 ++ vssrani.bu.h vr8, vr18, 5 ++ vssrani.bu.h vr9, vr19, 5 ++ vldx vr16, t8, t1 ++ vldx vr17, t8, t2 ++ vavgr.bu vr6, vr8, vr16 ++ vavgr.bu vr7, vr9, vr17 ++ vstx vr6, a0, t1 ++ vstx vr7, a0, t2 ++endfunc ++ ++.macro LSX_QPEL8_V_LOWPASS in0, in1, in2, in3, in4, in5, in6 ++ vilvl.b vr7, \in3, \in2 ++ vilvl.b vr8, \in4, \in3 ++ vilvl.b vr9, \in4, \in1 ++ vilvl.b vr10, \in5, \in2 ++ vilvl.b vr11, \in5, \in0 ++ vilvl.b vr12, \in6, \in1 ++ ++ vhaddw.hu.bu vr7, vr7, vr7 ++ vhaddw.hu.bu vr8, vr8, vr8 ++ vhaddw.hu.bu vr9, vr9, vr9 ++ vhaddw.hu.bu vr10, vr10, vr10 ++ vhaddw.hu.bu vr11, vr11, vr11 ++ vhaddw.hu.bu vr12, vr12, vr12 ++ ++ vmul.h vr7, vr7, vr20 ++ vmul.h vr8, vr8, vr20 ++ vmul.h vr9, vr9, vr21 ++ vmul.h vr10, vr10, vr21 ++ ++ vssub.h vr7, vr7, vr9 ++ vssub.h vr8, vr8, vr10 ++ vsadd.h vr7, vr7, vr11 ++ vsadd.h vr8, vr8, vr12 ++ vsadd.h vr7, vr7, vr22 ++ vsadd.h vr8, vr8, vr22 ++ ++ vilvh.b vr13, \in3, \in2 ++ vilvh.b vr14, \in4, \in3 ++ vilvh.b vr15, \in4, \in1 ++ vilvh.b vr16, \in5, \in2 ++ vilvh.b vr17, \in5, \in0 ++ vilvh.b vr18, \in6, \in1 ++ ++ vhaddw.hu.bu vr13, vr13, vr13 ++ vhaddw.hu.bu vr14, vr14, vr14 ++ vhaddw.hu.bu vr15, vr15, vr15 ++ vhaddw.hu.bu vr16, vr16, vr16 ++ vhaddw.hu.bu vr17, vr17, vr17 ++ vhaddw.hu.bu vr18, vr18, vr18 ++ ++ vmul.h vr13, vr13, vr20 ++ vmul.h vr14, vr14, vr20 ++ vmul.h vr15, vr15, vr21 ++ vmul.h vr16, vr16, vr21 ++ ++ vssub.h vr13, vr13, vr15 ++ vssub.h vr14, vr14, vr16 ++ vsadd.h vr13, vr13, vr17 ++ vsadd.h vr14, vr14, vr18 ++ vsadd.h vr13, vr13, vr22 ++ vsadd.h vr14, vr14, vr22 ++ ++ vssrani.bu.h vr13, vr7, 5 ++ vssrani.bu.h vr14, vr8, 5 ++.endm ++ ++/* ++ * void put_h264_qpel16_mc01(uint8_t *dst, const uint8_t *src, ++ * ptrdiff_t stride) ++ */ ++function ff_put_h264_qpel16_mc01_lsx ++ slli.d t0, a2, 1 ++ add.d t1, t0, a2 ++ sub.d t2, a1, t0 // t2 = src - 2 * stride ++ vldi vr20, 0x414 ++ vldi vr21, 0x405 ++ vldi vr22, 0x410 ++ ++ vld vr0, t2, 0 ++ vldx vr1, t2, a2 ++ vldx vr2, t2, t0 ++ vldx vr3, t2, t1 ++ alsl.d t2, a2, t2, 2 // t2 = t2 + 4 * stride ++ vld vr4, t2, 0 ++ vldx vr5, t2, a2 ++ vldx vr6, t2, t0 ++ LSX_QPEL8_V_LOWPASS vr0, vr1, vr2, vr3, vr4, vr5, vr6 ++ vavgr.bu vr13, vr2, vr13 ++ vavgr.bu vr14, vr3, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr0, t2, t1 ++ alsl.d t2, a2, t2, 2 // t2 = t2 + 4 *stride ++ vld vr1, t2, 0 ++ LSX_QPEL8_V_LOWPASS vr2, vr3, vr4, vr5, vr6, vr0, vr1 ++ vavgr.bu vr13, vr4, vr13 ++ vavgr.bu vr14, vr5, vr14 ++ vstx vr13, a0, t0 ++ vstx vr14, a0, t1 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 * stride ++ ++ vldx vr2, t2, a2 ++ vldx vr3, t2, t0 ++ LSX_QPEL8_V_LOWPASS vr4, vr5, vr6, vr0, vr1, vr2, vr3 ++ vavgr.bu vr13, vr6, vr13 ++ vavgr.bu vr14, vr0, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr4, t2, t1 ++ alsl.d t2, a2, t2, 2 // t2 = t2 + 4 * stride ++ vld vr5, t2, 0 ++ LSX_QPEL8_V_LOWPASS vr6, vr0, vr1, vr2, vr3, vr4, vr5 ++ vavgr.bu vr13, vr1, vr13 ++ vavgr.bu vr14, vr2, vr14 ++ vstx vr13, a0, t0 ++ vstx vr14, a0, t1 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 * stride ++ ++ vldx vr6, t2, a2 ++ vldx vr0, t2, t0 ++ LSX_QPEL8_V_LOWPASS vr1, vr2, vr3, vr4, vr5, vr6, vr0 ++ vavgr.bu vr13, vr3, vr13 ++ vavgr.bu vr14, vr4, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr1, t2, t1 ++ alsl.d t2, a2, t2, 2 // t2 = t2 + 4 * stride ++ vld vr2, t2, 0 ++ LSX_QPEL8_V_LOWPASS vr3, vr4, vr5, vr6, vr0, vr1, vr2 ++ vavgr.bu vr13, vr5, vr13 ++ vavgr.bu vr14, vr6, vr14 ++ vstx vr13, a0, t0 ++ vstx vr14, a0, t1 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 * stride ++ ++ vldx vr3, t2, a2 ++ vldx vr4, t2, t0 ++ LSX_QPEL8_V_LOWPASS vr5, vr6, vr0, vr1, vr2, vr3, vr4 ++ vavgr.bu vr13, vr0, vr13 ++ vavgr.bu vr14, vr1, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr5, t2, t1 ++ alsl.d t2, a2, t2, 2 // t2 = t2 + 4 * stride ++ vld vr6, t2, 0 ++ LSX_QPEL8_V_LOWPASS vr0, vr1, vr2, vr3, vr4, vr5, vr6 ++ vavgr.bu vr13, vr2, vr13 ++ vavgr.bu vr14, vr3, vr14 ++ vstx vr13, a0, t0 ++ vstx vr14, a0, t1 ++endfunc ++ ++/* ++ * void put_h264_qpel16_mc11(uint8_t *dst, const uint8_t *src, ++ * ptrdiff_t stride) ++ */ ++function ff_put_h264_qpel16_mc11_lsx ++ slli.d t1, a2, 1 ++ add.d t2, t1, a2 ++ vldi vr20, 0x414 ++ vldi vr21, 0x405 ++ vldi vr22, 0x410 ++ ++ addi.d sp, sp, -64 ++ fst.d f24, sp, 0 ++ fst.d f25, sp, 8 ++ fst.d f26, sp, 16 ++ fst.d f27, sp, 24 ++ fst.d f28, sp, 32 ++ fst.d f29, sp, 40 ++ fst.d f30, sp, 48 ++ fst.d f31, sp, 56 ++ ++ sub.d t4, a1, t1 // t4 = src - 2 * stride ++ addi.d t0, a1, -2 // t0 = src - 2 ++ addi.d a1, t0, 8 // a1 = t0 + 8 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr14, vr15 ++ ++ alsl.d t0, a2, t0, 2 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr16, vr17 ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr18, vr19 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr23, vr24 ++ vssrani.bu.h vr23, vr12, 5 ++ vssrani.bu.h vr24, vr13, 5 ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr25, vr26 ++ vssrani.bu.h vr25, vr14, 5 ++ vssrani.bu.h vr26, vr15, 5 ++ ++ alsl.d a1, a2, a1, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr27, vr28 ++ vssrani.bu.h vr27, vr16, 5 ++ vssrani.bu.h vr28, vr17, 5 ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr29, vr30 ++ vssrani.bu.h vr29, vr18, 5 ++ vssrani.bu.h vr30, vr19, 5 ++ ++ vld vr0, t4, 0 // t4 = src - 2 * stride ++ vldx vr1, t4, a2 ++ vldx vr2, t4, t1 ++ vldx vr3, t4, t2 ++ alsl.d t4, a2, t4, 2 ++ vld vr4, t4, 0 ++ vldx vr5, t4, a2 ++ vldx vr6, t4, t1 ++ LSX_QPEL8_V_LOWPASS vr0, vr1, vr2, vr3, vr4, vr5, vr6 ++ vavgr.bu vr13, vr23, vr13 ++ vavgr.bu vr14, vr24, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr0, t4, t2 ++ alsl.d t4, a2, t4, 2 ++ vld vr1, t4, 0 ++ LSX_QPEL8_V_LOWPASS vr2, vr3, vr4, vr5, vr6, vr0, vr1 ++ vavgr.bu vr13, vr25, vr13 ++ vavgr.bu vr14, vr26, vr14 ++ vstx vr13, a0, t1 ++ vstx vr14, a0, t2 ++ ++ add.d t6, t4, zero // t6 = src + 6 * stride ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 * stride ++ ++ vldx vr2, t4, a2 ++ vldx vr3, t4, t1 ++ LSX_QPEL8_V_LOWPASS vr4, vr5, vr6, vr0, vr1, vr2, vr3 ++ vavgr.bu vr13, vr27, vr13 ++ vavgr.bu vr14, vr28, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr4, t4, t2 ++ alsl.d t4, a2, t4, 2 ++ vld vr5, t4, 0 ++ LSX_QPEL8_V_LOWPASS vr6, vr0, vr1, vr2, vr3, vr4, vr5 ++ vavgr.bu vr13, vr29, vr13 ++ vavgr.bu vr14, vr30, vr14 ++ vstx vr13, a0, t1 ++ vstx vr14, a0, t2 ++ ++ alsl.d t0, a2, t0, 2 ++ alsl.d a1, a2, a1, 2 // a1 = src + 8 * stride ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr14, vr15 ++ ++ alsl.d t0, a2, t0, 2 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr16, vr17 ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr18, vr19 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr23, vr24 ++ vssrani.bu.h vr23, vr12, 5 ++ vssrani.bu.h vr24, vr13, 5 ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr25, vr26 ++ vssrani.bu.h vr25, vr14, 5 ++ vssrani.bu.h vr26, vr15, 5 ++ ++ alsl.d a1, a2, a1, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr27, vr28 ++ vssrani.bu.h vr27, vr16, 5 ++ vssrani.bu.h vr28, vr17, 5 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr29, vr30 ++ vssrani.bu.h vr29, vr18, 5 ++ vssrani.bu.h vr30, vr19, 5 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 * stride ++ ++ // t6 = src + 6 * stride ++ vld vr0, t6, 0 ++ vldx vr1, t6, a2 ++ vldx vr2, t6, t1 ++ vldx vr3, t6, t2 ++ alsl.d t6, a2, t6, 2 ++ vld vr4, t6, 0 ++ vldx vr5, t6, a2 ++ vldx vr6, t6, t1 ++ ++ LSX_QPEL8_V_LOWPASS vr0, vr1, vr2, vr3, vr4, vr5, vr6 ++ vavgr.bu vr13, vr23, vr13 ++ vavgr.bu vr14, vr24, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr0, t6, t2 ++ alsl.d t6, a2, t6, 2 ++ vld vr1, t6, 0 ++ LSX_QPEL8_V_LOWPASS vr2, vr3, vr4, vr5, vr6, vr0, vr1 ++ vavgr.bu vr13, vr25, vr13 ++ vavgr.bu vr14, vr26, vr14 ++ vstx vr13, a0, t1 ++ vstx vr14, a0, t2 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 *stride ++ ++ vldx vr2, t6, a2 ++ vldx vr3, t6, t1 ++ LSX_QPEL8_V_LOWPASS vr4, vr5, vr6, vr0, vr1, vr2, vr3 ++ vavgr.bu vr13, vr27, vr13 ++ vavgr.bu vr14, vr28, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr4, t6, t2 ++ alsl.d t6, a2, t6, 2 ++ vld vr5, t6, 0 ++ LSX_QPEL8_V_LOWPASS vr6, vr0, vr1, vr2, vr3, vr4, vr5 ++ vavgr.bu vr13, vr29, vr13 ++ vavgr.bu vr14, vr30, vr14 ++ vstx vr13, a0, t1 ++ vstx vr14, a0, t2 ++ ++ fld.d f24, sp, 0 ++ fld.d f25, sp, 8 ++ fld.d f26, sp, 16 ++ fld.d f27, sp, 24 ++ fld.d f28, sp, 32 ++ fld.d f29, sp, 40 ++ fld.d f30, sp, 48 ++ fld.d f31, sp, 56 ++ addi.d sp, sp, 64 ++endfunc ++ ++/* ++ * void avg_h264_qpel16_mc00(uint8_t *dst, const uint8_t *src, ++ * ptrdiff_t stride) ++ */ ++function ff_avg_h264_qpel16_mc00_lsx ++ slli.d t0, a2, 1 ++ add.d t1, t0, a2 ++ slli.d t2, t0, 1 ++ addi.d t3, a0, 0 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ vldx vr2, a1, t0 ++ vldx vr3, a1, t1 ++ add.d a1, a1, t2 ++ vld vr4, a1, 0 ++ vldx vr5, a1, a2 ++ vldx vr6, a1, t0 ++ vldx vr7, a1, t1 ++ add.d a1, a1, t2 ++ ++ vld vr8, t3, 0 ++ vldx vr9, t3, a2 ++ vldx vr10, t3, t0 ++ vldx vr11, t3, t1 ++ add.d t3, t3, t2 ++ vld vr12, t3, 0 ++ vldx vr13, t3, a2 ++ vldx vr14, t3, t0 ++ vldx vr15, t3, t1 ++ add.d t3, t3, t2 ++ ++ vavgr.bu vr0, vr8, vr0 ++ vavgr.bu vr1, vr9, vr1 ++ vavgr.bu vr2, vr10, vr2 ++ vavgr.bu vr3, vr11, vr3 ++ vavgr.bu vr4, vr12, vr4 ++ vavgr.bu vr5, vr13, vr5 ++ vavgr.bu vr6, vr14, vr6 ++ vavgr.bu vr7, vr15, vr7 ++ ++ vst vr0, a0, 0 ++ vstx vr1, a0, a2 ++ vstx vr2, a0, t0 ++ vstx vr3, a0, t1 ++ add.d a0, a0, t2 ++ vst vr4, a0, 0 ++ vstx vr5, a0, a2 ++ vstx vr6, a0, t0 ++ vstx vr7, a0, t1 ++ ++ add.d a0, a0, t2 ++ ++ /* h8~h15 */ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ vldx vr2, a1, t0 ++ vldx vr3, a1, t1 ++ add.d a1, a1, t2 ++ vld vr4, a1, 0 ++ vldx vr5, a1, a2 ++ vldx vr6, a1, t0 ++ vldx vr7, a1, t1 ++ ++ vld vr8, t3, 0 ++ vldx vr9, t3, a2 ++ vldx vr10, t3, t0 ++ vldx vr11, t3, t1 ++ add.d t3, t3, t2 ++ vld vr12, t3, 0 ++ vldx vr13, t3, a2 ++ vldx vr14, t3, t0 ++ vldx vr15, t3, t1 ++ ++ vavgr.bu vr0, vr8, vr0 ++ vavgr.bu vr1, vr9, vr1 ++ vavgr.bu vr2, vr10, vr2 ++ vavgr.bu vr3, vr11, vr3 ++ vavgr.bu vr4, vr12, vr4 ++ vavgr.bu vr5, vr13, vr5 ++ vavgr.bu vr6, vr14, vr6 ++ vavgr.bu vr7, vr15, vr7 ++ ++ vst vr0, a0, 0 ++ vstx vr1, a0, a2 ++ vstx vr2, a0, t0 ++ vstx vr3, a0, t1 ++ add.d a0, a0, t2 ++ vst vr4, a0, 0 ++ vstx vr5, a0, a2 ++ vstx vr6, a0, t0 ++ vstx vr7, a0, t1 ++endfunc ++ ++/* ++ * void put_h264_qpel16_mc31(uint8_t *dst, const uint8_t *src, ++ * ptrdiff_t stride) ++ */ ++function ff_put_h264_qpel16_mc31_lsx ++ slli.d t1, a2, 1 ++ add.d t2, t1, a2 ++ vldi vr20, 0x414 ++ vldi vr21, 0x405 ++ vldi vr22, 0x410 ++ ++ addi.d sp, sp, -64 ++ fst.d f24, sp, 0 ++ fst.d f25, sp, 8 ++ fst.d f26, sp, 16 ++ fst.d f27, sp, 24 ++ fst.d f28, sp, 32 ++ fst.d f29, sp, 40 ++ fst.d f30, sp, 48 ++ fst.d f31, sp, 56 ++ ++ addi.d t0, a1, -2 // t0 = src - 2 ++ add.d t3, a1, zero // t3 = src ++ sub.d t4, a1, t1 // t4 = src - 2 * stride ++ addi.d t4, t4, 1 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr14, vr15 ++ ++ alsl.d a1, a2, t0, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr16, vr17 ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr18, vr19 ++ ++ addi.d a1, t0, 8 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr23, vr24 ++ vssrani.bu.h vr23, vr12, 5 ++ vssrani.bu.h vr24, vr13, 5 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr25, vr26 ++ vssrani.bu.h vr25, vr14, 5 ++ vssrani.bu.h vr26, vr15, 5 ++ ++ alsl.d a1, a2, a1, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr27, vr28 ++ vssrani.bu.h vr27, vr16, 5 ++ vssrani.bu.h vr28, vr17, 5 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr29, vr30 ++ vssrani.bu.h vr29, vr18, 5 ++ vssrani.bu.h vr30, vr19, 5 ++ ++ vld vr0, t4, 0 // t4 = src - 2 * stride + 1 ++ vldx vr1, t4, a2 ++ vldx vr2, t4, t1 ++ vldx vr3, t4, t2 ++ alsl.d t4, a2, t4, 2 ++ vld vr4, t4, 0 ++ vldx vr5, t4, a2 ++ vldx vr6, t4, t1 ++ LSX_QPEL8_V_LOWPASS vr0, vr1, vr2, vr3, vr4, vr5, vr6 ++ vavgr.bu vr13, vr23, vr13 ++ vavgr.bu vr14, vr24, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr0, t4, t2 ++ alsl.d t4, a2, t4, 2 ++ vld vr1, t4, 0 ++ LSX_QPEL8_V_LOWPASS vr2, vr3, vr4, vr5, vr6, vr0, vr1 ++ vavgr.bu vr13, vr25, vr13 ++ vavgr.bu vr14, vr26, vr14 ++ add.d t6, t4, zero // t6 = src + 6 * stride ++ vstx vr13, a0, t1 ++ vstx vr14, a0, t2 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 * stride ++ ++ vldx vr2, t4, a2 ++ vldx vr3, t4, t1 ++ LSX_QPEL8_V_LOWPASS vr4, vr5, vr6, vr0, vr1, vr2, vr3 ++ vavgr.bu vr13, vr27, vr13 ++ vavgr.bu vr14, vr28, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr4, t4, t2 ++ alsl.d t4, a2, t4, 2 ++ vld vr5, t4, 0 ++ LSX_QPEL8_V_LOWPASS vr6, vr0, vr1, vr2, vr3, vr4, vr5 ++ vavgr.bu vr13, vr29, vr13 ++ vavgr.bu vr14, vr30, vr14 ++ vstx vr13, a0, t1 ++ vstx vr14, a0, t2 ++ ++ alsl.d a1, a2, t0, 3 // a1 = src + 8 * stride ++ addi.d t5, a1, 8 // a1 = src + 8 * stride + 8 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr14, vr15 ++ ++ alsl.d a1, a2, a1, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr16, vr17 ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr18, vr19 ++ ++ vld vr0, t5, 0 ++ vldx vr1, t5, a2 ++ LSX_QPEL8_H_LOWPASS vr23, vr24 ++ vssrani.bu.h vr23, vr12, 5 ++ vssrani.bu.h vr24, vr13, 5 ++ vldx vr0, t5, t1 ++ vldx vr1, t5, t2 ++ LSX_QPEL8_H_LOWPASS vr25, vr26 ++ vssrani.bu.h vr25, vr14, 5 ++ vssrani.bu.h vr26, vr15, 5 ++ ++ alsl.d t5, a2, t5, 2 ++ ++ vld vr0, t5, 0 ++ vldx vr1, t5, a2 ++ LSX_QPEL8_H_LOWPASS vr27, vr28 ++ vssrani.bu.h vr27, vr16, 5 ++ vssrani.bu.h vr28, vr17, 5 ++ vldx vr0, t5, t1 ++ vldx vr1, t5, t2 ++ LSX_QPEL8_H_LOWPASS vr29, vr30 ++ vssrani.bu.h vr29, vr18, 5 ++ vssrani.bu.h vr30, vr19, 5 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 * stride ++ ++ // t6 = src + 6 * stride + 1 ++ vld vr0, t6, 0 ++ vldx vr1, t6, a2 ++ vldx vr2, t6, t1 ++ vldx vr3, t6, t2 ++ alsl.d t6, a2, t6, 2 ++ vld vr4, t6, 0 ++ vldx vr5, t6, a2 ++ vldx vr6, t6, t1 ++ ++ LSX_QPEL8_V_LOWPASS vr0, vr1, vr2, vr3, vr4, vr5, vr6 ++ vavgr.bu vr13, vr23, vr13 ++ vavgr.bu vr14, vr24, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr0, t6, t2 ++ alsl.d t6, a2, t6, 2 ++ vld vr1, t6, 0 ++ LSX_QPEL8_V_LOWPASS vr2, vr3, vr4, vr5, vr6, vr0, vr1 ++ vavgr.bu vr13, vr25, vr13 ++ vavgr.bu vr14, vr26, vr14 ++ vstx vr13, a0, t1 ++ vstx vr14, a0, t2 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 *stride ++ ++ vldx vr2, t6, a2 ++ vldx vr3, t6, t1 ++ LSX_QPEL8_V_LOWPASS vr4, vr5, vr6, vr0, vr1, vr2, vr3 ++ vavgr.bu vr13, vr27, vr13 ++ vavgr.bu vr14, vr28, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr4, t6, t2 ++ alsl.d t6, a2, t6, 2 ++ vld vr5, t6, 0 ++ LSX_QPEL8_V_LOWPASS vr6, vr0, vr1, vr2, vr3, vr4, vr5 ++ vavgr.bu vr13, vr29, vr13 ++ vavgr.bu vr14, vr30, vr14 ++ vstx vr13, a0, t1 ++ vstx vr14, a0, t2 ++ ++ fld.d f24, sp, 0 ++ fld.d f25, sp, 8 ++ fld.d f26, sp, 16 ++ fld.d f27, sp, 24 ++ fld.d f28, sp, 32 ++ fld.d f29, sp, 40 ++ fld.d f30, sp, 48 ++ fld.d f31, sp, 56 ++ addi.d sp, sp, 64 ++endfunc ++ ++/* ++ * void put_h264_qpel16_mc33(uint8_t *dst, const uint8_t *src, ++ * ptrdiff_t stride) ++ */ ++function ff_put_h264_qpel16_mc33_lsx ++ slli.d t1, a2, 1 ++ add.d t2, t1, a2 ++ vldi vr20, 0x414 ++ vldi vr21, 0x405 ++ vldi vr22, 0x410 ++ ++ addi.d sp, sp, -64 ++ fst.d f24, sp, 0 ++ fst.d f25, sp, 8 ++ fst.d f26, sp, 16 ++ fst.d f27, sp, 24 ++ fst.d f28, sp, 32 ++ fst.d f29, sp, 40 ++ fst.d f30, sp, 48 ++ fst.d f31, sp, 56 ++ ++ addi.d t0, a1, -2 // t0 = src - 2 ++ add.d t0, t0, a2 ++ add.d t3, a1, zero // t3 = src ++ sub.d t4, a1, t1 // t4 = src - 2 * stride ++ addi.d t4, t4, 1 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr14, vr15 ++ ++ alsl.d a1, a2, t0, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr16, vr17 ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr18, vr19 ++ ++ addi.d a1, t0, 8 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr23, vr24 ++ vssrani.bu.h vr23, vr12, 5 ++ vssrani.bu.h vr24, vr13, 5 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr25, vr26 ++ vssrani.bu.h vr25, vr14, 5 ++ vssrani.bu.h vr26, vr15, 5 ++ ++ alsl.d a1, a2, a1, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr27, vr28 ++ vssrani.bu.h vr27, vr16, 5 ++ vssrani.bu.h vr28, vr17, 5 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr29, vr30 ++ vssrani.bu.h vr29, vr18, 5 ++ vssrani.bu.h vr30, vr19, 5 ++ ++ vld vr0, t4, 0 // t4 = src - 2 * stride + 1 ++ vldx vr1, t4, a2 ++ vldx vr2, t4, t1 ++ vldx vr3, t4, t2 ++ alsl.d t4, a2, t4, 2 ++ vld vr4, t4, 0 ++ vldx vr5, t4, a2 ++ vldx vr6, t4, t1 ++ LSX_QPEL8_V_LOWPASS vr0, vr1, vr2, vr3, vr4, vr5, vr6 ++ vavgr.bu vr13, vr23, vr13 ++ vavgr.bu vr14, vr24, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr0, t4, t2 ++ alsl.d t4, a2, t4, 2 ++ vld vr1, t4, 0 ++ LSX_QPEL8_V_LOWPASS vr2, vr3, vr4, vr5, vr6, vr0, vr1 ++ vavgr.bu vr13, vr25, vr13 ++ vavgr.bu vr14, vr26, vr14 ++ add.d t6, t4, zero // t6 = src + 6 * stride ++ ++ vstx vr13, a0, t1 ++ vstx vr14, a0, t2 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 * stride ++ ++ vldx vr2, t4, a2 ++ vldx vr3, t4, t1 ++ LSX_QPEL8_V_LOWPASS vr4, vr5, vr6, vr0, vr1, vr2, vr3 ++ vavgr.bu vr13, vr27, vr13 ++ vavgr.bu vr14, vr28, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr4, t4, t2 ++ alsl.d t4, a2, t4, 2 ++ vld vr5, t4, 0 ++ LSX_QPEL8_V_LOWPASS vr6, vr0, vr1, vr2, vr3, vr4, vr5 ++ vavgr.bu vr13, vr29, vr13 ++ vavgr.bu vr14, vr30, vr14 ++ vstx vr13, a0, t1 ++ vstx vr14, a0, t2 ++ ++ alsl.d a1, a2, t0, 3 // a1 = src + 8 * stride ++ addi.d t5, a1, 8 // a1 = src + 8 * stride + 8 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr14, vr15 ++ ++ alsl.d a1, a2, a1, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr16, vr17 ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr18, vr19 ++ ++ vld vr0, t5, 0 ++ vldx vr1, t5, a2 ++ LSX_QPEL8_H_LOWPASS vr23, vr24 ++ vssrani.bu.h vr23, vr12, 5 ++ vssrani.bu.h vr24, vr13, 5 ++ vldx vr0, t5, t1 ++ vldx vr1, t5, t2 ++ LSX_QPEL8_H_LOWPASS vr25, vr26 ++ vssrani.bu.h vr25, vr14, 5 ++ vssrani.bu.h vr26, vr15, 5 ++ ++ alsl.d t5, a2, t5, 2 ++ ++ vld vr0, t5, 0 ++ vldx vr1, t5, a2 ++ LSX_QPEL8_H_LOWPASS vr27, vr28 ++ vssrani.bu.h vr27, vr16, 5 ++ vssrani.bu.h vr28, vr17, 5 ++ vldx vr0, t5, t1 ++ vldx vr1, t5, t2 ++ LSX_QPEL8_H_LOWPASS vr29, vr30 ++ vssrani.bu.h vr29, vr18, 5 ++ vssrani.bu.h vr30, vr19, 5 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 * stride ++ ++ // t6 = src + 6 * stride + 1 ++ vld vr0, t6, 0 ++ vldx vr1, t6, a2 ++ vldx vr2, t6, t1 ++ vldx vr3, t6, t2 ++ alsl.d t6, a2, t6, 2 ++ vld vr4, t6, 0 ++ vldx vr5, t6, a2 ++ vldx vr6, t6, t1 ++ ++ LSX_QPEL8_V_LOWPASS vr0, vr1, vr2, vr3, vr4, vr5, vr6 ++ vavgr.bu vr13, vr23, vr13 ++ vavgr.bu vr14, vr24, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr0, t6, t2 ++ alsl.d t6, a2, t6, 2 ++ vld vr1, t6, 0 ++ LSX_QPEL8_V_LOWPASS vr2, vr3, vr4, vr5, vr6, vr0, vr1 ++ vavgr.bu vr13, vr25, vr13 ++ vavgr.bu vr14, vr26, vr14 ++ vstx vr13, a0, t1 ++ vstx vr14, a0, t2 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 *stride ++ ++ vldx vr2, t6, a2 ++ vldx vr3, t6, t1 ++ LSX_QPEL8_V_LOWPASS vr4, vr5, vr6, vr0, vr1, vr2, vr3 ++ vavgr.bu vr13, vr27, vr13 ++ vavgr.bu vr14, vr28, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr4, t6, t2 ++ alsl.d t6, a2, t6, 2 ++ vld vr5, t6, 0 ++ LSX_QPEL8_V_LOWPASS vr6, vr0, vr1, vr2, vr3, vr4, vr5 ++ vavgr.bu vr13, vr29, vr13 ++ vavgr.bu vr14, vr30, vr14 ++ vstx vr13, a0, t1 ++ vstx vr14, a0, t2 ++ ++ fld.d f24, sp, 0 ++ fld.d f25, sp, 8 ++ fld.d f26, sp, 16 ++ fld.d f27, sp, 24 ++ fld.d f28, sp, 32 ++ fld.d f29, sp, 40 ++ fld.d f30, sp, 48 ++ fld.d f31, sp, 56 ++ addi.d sp, sp, 64 ++endfunc ++ ++/* ++ * void put_h264_qpel16_mc13(uint8_t *dst, const uint8_t *src, ++ * ptrdiff_t stride) ++ */ ++function ff_put_h264_qpel16_mc13_lsx ++ slli.d t1, a2, 1 ++ add.d t2, t1, a2 ++ vldi vr20, 0x414 ++ vldi vr21, 0x405 ++ vldi vr22, 0x410 ++ ++ addi.d sp, sp, -64 ++ fst.d f24, sp, 0 ++ fst.d f25, sp, 8 ++ fst.d f26, sp, 16 ++ fst.d f27, sp, 24 ++ fst.d f28, sp, 32 ++ fst.d f29, sp, 40 ++ fst.d f30, sp, 48 ++ fst.d f31, sp, 56 ++ ++ addi.d t0, a1, -2 // t0 = src - 2 ++ add.d t0, t0, a2 ++ add.d t3, a1, zero // t3 = src ++ sub.d t4, a1, t1 // t4 = src - 2 * stride ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr14, vr15 ++ ++ alsl.d a1, a2, t0, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr16, vr17 ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr18, vr19 ++ ++ addi.d a1, t0, 8 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr23, vr24 ++ vssrani.bu.h vr23, vr12, 5 ++ vssrani.bu.h vr24, vr13, 5 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr25, vr26 ++ vssrani.bu.h vr25, vr14, 5 ++ vssrani.bu.h vr26, vr15, 5 ++ ++ alsl.d a1, a2, a1, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr27, vr28 ++ vssrani.bu.h vr27, vr16, 5 ++ vssrani.bu.h vr28, vr17, 5 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr29, vr30 ++ vssrani.bu.h vr29, vr18, 5 ++ vssrani.bu.h vr30, vr19, 5 ++ ++ vld vr0, t4, 0 // t4 = src - 2 * stride + 1 ++ vldx vr1, t4, a2 ++ vldx vr2, t4, t1 ++ vldx vr3, t4, t2 ++ alsl.d t4, a2, t4, 2 ++ vld vr4, t4, 0 ++ vldx vr5, t4, a2 ++ vldx vr6, t4, t1 ++ LSX_QPEL8_V_LOWPASS vr0, vr1, vr2, vr3, vr4, vr5, vr6 ++ vavgr.bu vr13, vr23, vr13 ++ vavgr.bu vr14, vr24, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr0, t4, t2 ++ alsl.d t4, a2, t4, 2 ++ vld vr1, t4, 0 ++ LSX_QPEL8_V_LOWPASS vr2, vr3, vr4, vr5, vr6, vr0, vr1 ++ vavgr.bu vr13, vr25, vr13 ++ vavgr.bu vr14, vr26, vr14 ++ add.d t6, t4, zero // t6 = src + 6 * stride ++ ++ vstx vr13, a0, t1 ++ vstx vr14, a0, t2 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 * stride ++ ++ vldx vr2, t4, a2 ++ vldx vr3, t4, t1 ++ LSX_QPEL8_V_LOWPASS vr4, vr5, vr6, vr0, vr1, vr2, vr3 ++ vavgr.bu vr13, vr27, vr13 ++ vavgr.bu vr14, vr28, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr4, t4, t2 ++ alsl.d t4, a2, t4, 2 ++ vld vr5, t4, 0 ++ LSX_QPEL8_V_LOWPASS vr6, vr0, vr1, vr2, vr3, vr4, vr5 ++ vavgr.bu vr13, vr29, vr13 ++ vavgr.bu vr14, vr30, vr14 ++ vstx vr13, a0, t1 ++ vstx vr14, a0, t2 ++ ++ alsl.d a1, a2, t0, 3 // a1 = src + 8 * stride ++ addi.d t5, a1, 8 // a1 = src + 8 * stride + 8 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr14, vr15 ++ ++ alsl.d a1, a2, a1, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr16, vr17 ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr18, vr19 ++ ++ vld vr0, t5, 0 ++ vldx vr1, t5, a2 ++ LSX_QPEL8_H_LOWPASS vr23, vr24 ++ vssrani.bu.h vr23, vr12, 5 ++ vssrani.bu.h vr24, vr13, 5 ++ vldx vr0, t5, t1 ++ vldx vr1, t5, t2 ++ LSX_QPEL8_H_LOWPASS vr25, vr26 ++ vssrani.bu.h vr25, vr14, 5 ++ vssrani.bu.h vr26, vr15, 5 ++ ++ alsl.d t5, a2, t5, 2 ++ ++ vld vr0, t5, 0 ++ vldx vr1, t5, a2 ++ LSX_QPEL8_H_LOWPASS vr27, vr28 ++ vssrani.bu.h vr27, vr16, 5 ++ vssrani.bu.h vr28, vr17, 5 ++ vldx vr0, t5, t1 ++ vldx vr1, t5, t2 ++ LSX_QPEL8_H_LOWPASS vr29, vr30 ++ vssrani.bu.h vr29, vr18, 5 ++ vssrani.bu.h vr30, vr19, 5 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 * stride ++ ++ // t6 = src + 6 * stride + 1 ++ vld vr0, t6, 0 ++ vldx vr1, t6, a2 ++ vldx vr2, t6, t1 ++ vldx vr3, t6, t2 ++ alsl.d t6, a2, t6, 2 ++ vld vr4, t6, 0 ++ vldx vr5, t6, a2 ++ vldx vr6, t6, t1 ++ ++ LSX_QPEL8_V_LOWPASS vr0, vr1, vr2, vr3, vr4, vr5, vr6 ++ vavgr.bu vr13, vr23, vr13 ++ vavgr.bu vr14, vr24, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr0, t6, t2 ++ alsl.d t6, a2, t6, 2 ++ vld vr1, t6, 0 ++ LSX_QPEL8_V_LOWPASS vr2, vr3, vr4, vr5, vr6, vr0, vr1 ++ vavgr.bu vr13, vr25, vr13 ++ vavgr.bu vr14, vr26, vr14 ++ vstx vr13, a0, t1 ++ vstx vr14, a0, t2 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 *stride ++ ++ vldx vr2, t6, a2 ++ vldx vr3, t6, t1 ++ LSX_QPEL8_V_LOWPASS vr4, vr5, vr6, vr0, vr1, vr2, vr3 ++ vavgr.bu vr13, vr27, vr13 ++ vavgr.bu vr14, vr28, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr4, t6, t2 ++ alsl.d t6, a2, t6, 2 ++ vld vr5, t6, 0 ++ LSX_QPEL8_V_LOWPASS vr6, vr0, vr1, vr2, vr3, vr4, vr5 ++ vavgr.bu vr13, vr29, vr13 ++ vavgr.bu vr14, vr30, vr14 ++ vstx vr13, a0, t1 ++ vstx vr14, a0, t2 ++ ++ fld.d f24, sp, 0 ++ fld.d f25, sp, 8 ++ fld.d f26, sp, 16 ++ fld.d f27, sp, 24 ++ fld.d f28, sp, 32 ++ fld.d f29, sp, 40 ++ fld.d f30, sp, 48 ++ fld.d f31, sp, 56 ++ addi.d sp, sp, 64 ++endfunc ++ ++/* ++ * void put_h264_qpel16_mc03(uint8_t *dst, const uint8_t *src, ++ * ptrdiff_t stride) ++ */ ++function ff_put_h264_qpel16_mc03_lsx ++ slli.d t0, a2, 1 ++ add.d t1, t0, a2 ++ sub.d t2, a1, t0 // t2 = src - 2 * stride ++ vldi vr20, 0x414 ++ vldi vr21, 0x405 ++ vldi vr22, 0x410 ++ ++ vld vr0, t2, 0 ++ vldx vr1, t2, a2 ++ vldx vr2, t2, t0 ++ vldx vr3, t2, t1 ++ alsl.d t2, a2, t2, 2 // t2 = t2 + 4 * stride ++ vld vr4, t2, 0 ++ vldx vr5, t2, a2 ++ vldx vr6, t2, t0 ++ LSX_QPEL8_V_LOWPASS vr0, vr1, vr2, vr3, vr4, vr5, vr6 ++ vavgr.bu vr13, vr3, vr13 ++ vavgr.bu vr14, vr4, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr0, t2, t1 ++ alsl.d t2, a2, t2, 2 // t2 = t2 + 4 *stride ++ vld vr1, t2, 0 ++ LSX_QPEL8_V_LOWPASS vr2, vr3, vr4, vr5, vr6, vr0, vr1 ++ vavgr.bu vr13, vr5, vr13 ++ vavgr.bu vr14, vr6, vr14 ++ vstx vr13, a0, t0 ++ vstx vr14, a0, t1 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 * stride ++ ++ vldx vr2, t2, a2 ++ vldx vr3, t2, t0 ++ LSX_QPEL8_V_LOWPASS vr4, vr5, vr6, vr0, vr1, vr2, vr3 ++ vavgr.bu vr13, vr0, vr13 ++ vavgr.bu vr14, vr1, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr4, t2, t1 ++ alsl.d t2, a2, t2, 2 // t2 = t2 + 4 *stride ++ vld vr5, t2, 0 ++ LSX_QPEL8_V_LOWPASS vr6, vr0, vr1, vr2, vr3, vr4, vr5 ++ vavgr.bu vr13, vr2, vr13 ++ vavgr.bu vr14, vr3, vr14 ++ vstx vr13, a0, t0 ++ vstx vr14, a0, t1 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 * stride ++ ++ vldx vr6, t2, a2 ++ vldx vr0, t2, t0 ++ LSX_QPEL8_V_LOWPASS vr1, vr2, vr3, vr4, vr5, vr6, vr0 ++ vavgr.bu vr13, vr4, vr13 ++ vavgr.bu vr14, vr5, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr1, t2, t1 ++ alsl.d t2, a2, t2, 2 // t2 = t2 + 4 * stride ++ vld vr2, t2, 0 ++ LSX_QPEL8_V_LOWPASS vr3, vr4, vr5, vr6, vr0, vr1, vr2 ++ vavgr.bu vr13, vr6, vr13 ++ vavgr.bu vr14, vr0, vr14 ++ vstx vr13, a0, t0 ++ vstx vr14, a0, t1 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 * stride ++ ++ vldx vr3, t2, a2 ++ vldx vr4, t2, t0 ++ LSX_QPEL8_V_LOWPASS vr5, vr6, vr0, vr1, vr2, vr3, vr4 ++ vavgr.bu vr13, vr1, vr13 ++ vavgr.bu vr14, vr2, vr14 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr5, t2, t1 ++ alsl.d t2, a2, t2, 2 // t2 = t2 + 4 * stride ++ vld vr6, t2, 0 ++ LSX_QPEL8_V_LOWPASS vr0, vr1, vr2, vr3, vr4, vr5, vr6 ++ vavgr.bu vr13, vr3, vr13 ++ vavgr.bu vr14, vr4, vr14 ++ vstx vr13, a0, t0 ++ vstx vr14, a0, t1 ++endfunc ++ ++/* ++ * void avg_h264_qpel16_mc10(uint8_t *dst, const uint8_t *src, ++ * ptrdiff_t stride) ++ */ ++function ff_avg_h264_qpel16_mc10_lsx ++ addi.d t0, a0, 0 // t0 = dst ++ addi.d t1, a1, -2 // t1 = src - 2 ++ addi.d t4, t1, 8 ++ ++ slli.d t2, a2, 1 ++ add.d t3, a2, t2 ++ ++ vldi vr20, 0x414 ++ vldi vr21, 0x405 ++ vldi vr22, 0x410 ++ ++ vld vr0, t1, 0 ++ vldx vr1, t1, a2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vldx vr0, t1, t2 ++ vldx vr1, t1, t3 ++ LSX_QPEL8_H_LOWPASS vr14, vr15 ++ ++ alsl.d t1, a2, t1, 2 ++ ++ vld vr0, t1, 0 ++ vldx vr1, t1, a2 ++ LSX_QPEL8_H_LOWPASS vr16, vr17 ++ vldx vr0, t1, t2 ++ vldx vr1, t1, t3 ++ LSX_QPEL8_H_LOWPASS vr18, vr19 ++ ++ vld vr0, t4, 0 ++ vldx vr1, t4, a2 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vssrani.bu.h vr2, vr12, 5 ++ vssrani.bu.h vr3, vr13, 5 ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ vld vr12, t0, 0 ++ vldx vr13, t0, a2 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vavgr.bu vr0, vr0, vr12 ++ vavgr.bu vr1, vr1, vr13 ++ vst vr0, a0, 0 ++ vstx vr1, a0, a2 ++ ++ vldx vr0, t4, t2 ++ vldx vr1, t4, t3 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vssrani.bu.h vr2, vr14, 5 ++ vssrani.bu.h vr3, vr15, 5 ++ vldx vr0, a1, t2 ++ vldx vr1, a1, t3 ++ vldx vr12, t0, t2 ++ vldx vr13, t0, t3 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vavgr.bu vr0, vr0, vr12 ++ vavgr.bu vr1, vr1, vr13 ++ vstx vr0, a0, t2 ++ vstx vr1, a0, t3 ++ ++ alsl.d t4, a2, t4, 2 ++ alsl.d a1, a2, a1, 2 ++ alsl.d t0, a2, t0, 2 ++ alsl.d a0, a2, a0, 2 ++ ++ vld vr0, t4, 0 ++ vldx vr1, t4, a2 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vssrani.bu.h vr2, vr16, 5 ++ vssrani.bu.h vr3, vr17, 5 ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ vld vr12, t0, 0 ++ vldx vr13, t0, a2 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vavgr.bu vr0, vr0, vr12 ++ vavgr.bu vr1, vr1, vr13 ++ vst vr0, a0, 0 ++ vstx vr1, a0, a2 ++ ++ vldx vr0, t4, t2 ++ vldx vr1, t4, t3 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vssrani.bu.h vr2, vr18, 5 ++ vssrani.bu.h vr3, vr19, 5 ++ vldx vr0, a1, t2 ++ vldx vr1, a1, t3 ++ vldx vr12, t0, t2 ++ vldx vr13, t0, t3 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vavgr.bu vr0, vr0, vr12 ++ vavgr.bu vr1, vr1, vr13 ++ vstx vr0, a0, t2 ++ vstx vr1, a0, t3 ++ ++ alsl.d t4, a2, t4, 2 ++ alsl.d a1, a2, a1, 2 ++ alsl.d t0, a2, t0, 2 ++ alsl.d a0, a2, a0, 2 ++ alsl.d t1, a2, t1, 2 // t1 = src + 8 * stride -2 ++ ++ vld vr0, t1, 0 ++ vldx vr1, t1, a2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vldx vr0, t1, t2 ++ vldx vr1, t1, t3 ++ LSX_QPEL8_H_LOWPASS vr14, vr15 ++ ++ alsl.d t1, a2, t1, 2 ++ ++ vld vr0, t1, 0 ++ vldx vr1, t1, a2 ++ LSX_QPEL8_H_LOWPASS vr16, vr17 ++ vldx vr0, t1, t2 ++ vldx vr1, t1, t3 ++ LSX_QPEL8_H_LOWPASS vr18, vr19 ++ ++ vld vr0, t4, 0 ++ vldx vr1, t4, a2 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vssrani.bu.h vr2, vr12, 5 ++ vssrani.bu.h vr3, vr13, 5 ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ vld vr12, t0, 0 ++ vldx vr13, t0, a2 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vavgr.bu vr0, vr0, vr12 ++ vavgr.bu vr1, vr1, vr13 ++ vst vr0, a0, 0 ++ vstx vr1, a0, a2 ++ ++ vldx vr0, t4, t2 ++ vldx vr1, t4, t3 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vssrani.bu.h vr2, vr14, 5 ++ vssrani.bu.h vr3, vr15, 5 ++ vldx vr0, a1, t2 ++ vldx vr1, a1, t3 ++ vldx vr12, t0, t2 ++ vldx vr13, t0, t3 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vavgr.bu vr0, vr0, vr12 ++ vavgr.bu vr1, vr1, vr13 ++ vstx vr0, a0, t2 ++ vstx vr1, a0, t3 ++ ++ alsl.d t4, a2, t4, 2 ++ alsl.d a1, a2, a1, 2 ++ alsl.d t0, a2, t0, 2 ++ alsl.d a0, a2, a0, 2 ++ ++ vld vr0, t4, 0 ++ vldx vr1, t4, a2 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vssrani.bu.h vr2, vr16, 5 ++ vssrani.bu.h vr3, vr17, 5 ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ vld vr12, t0, 0 ++ vldx vr13, t0, a2 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vavgr.bu vr0, vr0, vr12 ++ vavgr.bu vr1, vr1, vr13 ++ vst vr0, a0, 0 ++ vstx vr1, a0, a2 ++ ++ vldx vr0, t4, t2 ++ vldx vr1, t4, t3 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vssrani.bu.h vr2, vr18, 5 ++ vssrani.bu.h vr3, vr19, 5 ++ vldx vr0, a1, t2 ++ vldx vr1, a1, t3 ++ vldx vr12, t0, t2 ++ vldx vr13, t0, t3 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vavgr.bu vr0, vr0, vr12 ++ vavgr.bu vr1, vr1, vr13 ++ vstx vr0, a0, t2 ++ vstx vr1, a0, t3 ++endfunc ++ ++/* ++ * void avg_h264_qpel16_mc30(uint8_t *dst, const uint8_t *src, ++ * ptrdiff_t stride) ++ */ ++function ff_avg_h264_qpel16_mc30_lsx ++ addi.d t0, a0, 0 // t0 = dst ++ addi.d t1, a1, -2 // t1 = src - 2 ++ addi.d t4, t1, 8 ++ addi.d a1, a1, 1 // a1 = a1 + 1 ++ ++ slli.d t2, a2, 1 ++ add.d t3, a2, t2 ++ ++ vldi vr20, 0x414 ++ vldi vr21, 0x405 ++ vldi vr22, 0x410 ++ ++ vld vr0, t1, 0 ++ vldx vr1, t1, a2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vldx vr0, t1, t2 ++ vldx vr1, t1, t3 ++ LSX_QPEL8_H_LOWPASS vr14, vr15 ++ ++ alsl.d t1, a2, t1, 2 ++ ++ vld vr0, t1, 0 ++ vldx vr1, t1, a2 ++ LSX_QPEL8_H_LOWPASS vr16, vr17 ++ vldx vr0, t1, t2 ++ vldx vr1, t1, t3 ++ LSX_QPEL8_H_LOWPASS vr18, vr19 ++ ++ vld vr0, t4, 0 ++ vldx vr1, t4, a2 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vssrani.bu.h vr2, vr12, 5 ++ vssrani.bu.h vr3, vr13, 5 ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ vld vr12, t0, 0 ++ vldx vr13, t0, a2 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vavgr.bu vr0, vr0, vr12 ++ vavgr.bu vr1, vr1, vr13 ++ vst vr0, a0, 0 ++ vstx vr1, a0, a2 ++ ++ vldx vr0, t4, t2 ++ vldx vr1, t4, t3 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vssrani.bu.h vr2, vr14, 5 ++ vssrani.bu.h vr3, vr15, 5 ++ vldx vr0, a1, t2 ++ vldx vr1, a1, t3 ++ vldx vr12, t0, t2 ++ vldx vr13, t0, t3 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vavgr.bu vr0, vr0, vr12 ++ vavgr.bu vr1, vr1, vr13 ++ vstx vr0, a0, t2 ++ vstx vr1, a0, t3 ++ ++ alsl.d t4, a2, t4, 2 ++ alsl.d a1, a2, a1, 2 ++ alsl.d t0, a2, t0, 2 ++ alsl.d a0, a2, a0, 2 ++ ++ vld vr0, t4, 0 ++ vldx vr1, t4, a2 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vssrani.bu.h vr2, vr16, 5 ++ vssrani.bu.h vr3, vr17, 5 ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ vld vr12, t0, 0 ++ vldx vr13, t0, a2 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vavgr.bu vr0, vr0, vr12 ++ vavgr.bu vr1, vr1, vr13 ++ vst vr0, a0, 0 ++ vstx vr1, a0, a2 ++ ++ vldx vr0, t4, t2 ++ vldx vr1, t4, t3 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vssrani.bu.h vr2, vr18, 5 ++ vssrani.bu.h vr3, vr19, 5 ++ vldx vr0, a1, t2 ++ vldx vr1, a1, t3 ++ vldx vr12, t0, t2 ++ vldx vr13, t0, t3 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vavgr.bu vr0, vr0, vr12 ++ vavgr.bu vr1, vr1, vr13 ++ vstx vr0, a0, t2 ++ vstx vr1, a0, t3 ++ ++ alsl.d t4, a2, t4, 2 ++ alsl.d a1, a2, a1, 2 ++ alsl.d t0, a2, t0, 2 ++ alsl.d a0, a2, a0, 2 ++ alsl.d t1, a2, t1, 2 // t1 = src + 8 * stride -2 ++ ++ vld vr0, t1, 0 ++ vldx vr1, t1, a2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vldx vr0, t1, t2 ++ vldx vr1, t1, t3 ++ LSX_QPEL8_H_LOWPASS vr14, vr15 ++ ++ alsl.d t1, a2, t1, 2 ++ ++ vld vr0, t1, 0 ++ vldx vr1, t1, a2 ++ LSX_QPEL8_H_LOWPASS vr16, vr17 ++ vldx vr0, t1, t2 ++ vldx vr1, t1, t3 ++ LSX_QPEL8_H_LOWPASS vr18, vr19 ++ ++ vld vr0, t4, 0 ++ vldx vr1, t4, a2 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vssrani.bu.h vr2, vr12, 5 ++ vssrani.bu.h vr3, vr13, 5 ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ vld vr12, t0, 0 ++ vldx vr13, t0, a2 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vavgr.bu vr0, vr0, vr12 ++ vavgr.bu vr1, vr1, vr13 ++ vst vr0, a0, 0 ++ vstx vr1, a0, a2 ++ ++ vldx vr0, t4, t2 ++ vldx vr1, t4, t3 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vssrani.bu.h vr2, vr14, 5 ++ vssrani.bu.h vr3, vr15, 5 ++ vldx vr0, a1, t2 ++ vldx vr1, a1, t3 ++ vldx vr12, t0, t2 ++ vldx vr13, t0, t3 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vavgr.bu vr0, vr0, vr12 ++ vavgr.bu vr1, vr1, vr13 ++ vstx vr0, a0, t2 ++ vstx vr1, a0, t3 ++ ++ alsl.d t4, a2, t4, 2 ++ alsl.d a1, a2, a1, 2 ++ alsl.d t0, a2, t0, 2 ++ alsl.d a0, a2, a0, 2 ++ ++ vld vr0, t4, 0 ++ vldx vr1, t4, a2 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vssrani.bu.h vr2, vr16, 5 ++ vssrani.bu.h vr3, vr17, 5 ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ vld vr12, t0, 0 ++ vldx vr13, t0, a2 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vavgr.bu vr0, vr0, vr12 ++ vavgr.bu vr1, vr1, vr13 ++ vst vr0, a0, 0 ++ vstx vr1, a0, a2 ++ ++ vldx vr0, t4, t2 ++ vldx vr1, t4, t3 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vssrani.bu.h vr2, vr18, 5 ++ vssrani.bu.h vr3, vr19, 5 ++ vldx vr0, a1, t2 ++ vldx vr1, a1, t3 ++ vldx vr12, t0, t2 ++ vldx vr13, t0, t3 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vavgr.bu vr0, vr0, vr12 ++ vavgr.bu vr1, vr1, vr13 ++ vstx vr0, a0, t2 ++ vstx vr1, a0, t3 ++endfunc ++ ++/* ++ * void put_h264_qpel16_mc02(uint8_t *dst, const uint8_t *src, ++ * ptrdiff_t stride) ++ */ ++function ff_put_h264_qpel16_mc02_lsx ++ slli.d t0, a2, 1 ++ add.d t1, t0, a2 ++ sub.d t2, a1, t0 // t2 = src - 2 * stride ++ vldi vr20, 0x414 ++ vldi vr21, 0x405 ++ vldi vr22, 0x410 ++ ++ vld vr0, t2, 0 ++ vldx vr1, t2, a2 ++ vldx vr2, t2, t0 ++ vldx vr3, t2, t1 ++ alsl.d t2, a2, t2, 2 // t2 = t2 + 4 * stride ++ vld vr4, t2, 0 ++ vldx vr5, t2, a2 ++ vldx vr6, t2, t0 ++ LSX_QPEL8_V_LOWPASS vr0, vr1, vr2, vr3, vr4, vr5, vr6 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr0, t2, t1 ++ alsl.d t2, a2, t2, 2 // t2 = t2 + 4 *stride ++ vld vr1, t2, 0 ++ LSX_QPEL8_V_LOWPASS vr2, vr3, vr4, vr5, vr6, vr0, vr1 ++ vstx vr13, a0, t0 ++ vstx vr14, a0, t1 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 * stride ++ ++ vldx vr2, t2, a2 ++ vldx vr3, t2, t0 ++ LSX_QPEL8_V_LOWPASS vr4, vr5, vr6, vr0, vr1, vr2, vr3 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr4, t2, t1 ++ alsl.d t2, a2, t2, 2 // t2 = t2 + 4 * stride ++ vld vr5, t2, 0 ++ LSX_QPEL8_V_LOWPASS vr6, vr0, vr1, vr2, vr3, vr4, vr5 ++ vstx vr13, a0, t0 ++ vstx vr14, a0, t1 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 * stride ++ ++ vldx vr6, t2, a2 ++ vldx vr0, t2, t0 ++ LSX_QPEL8_V_LOWPASS vr1, vr2, vr3, vr4, vr5, vr6, vr0 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr1, t2, t1 ++ alsl.d t2, a2, t2, 2 // t2 = t2 + 4 * stride ++ vld vr2, t2, 0 ++ LSX_QPEL8_V_LOWPASS vr3, vr4, vr5, vr6, vr0, vr1, vr2 ++ vstx vr13, a0, t0 ++ vstx vr14, a0, t1 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 * stride ++ ++ vldx vr3, t2, a2 ++ vldx vr4, t2, t0 ++ LSX_QPEL8_V_LOWPASS vr5, vr6, vr0, vr1, vr2, vr3, vr4 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr5, t2, t1 ++ alsl.d t2, a2, t2, 2 // t2 = t2 + 4 * stride ++ vld vr6, t2, 0 ++ LSX_QPEL8_V_LOWPASS vr0, vr1, vr2, vr3, vr4, vr5, vr6 ++ vstx vr13, a0, t0 ++ vstx vr14, a0, t1 ++endfunc ++ ++.macro lsx_avc_luma_hv_qrt_and_aver_dst_16x16 ++ vldi vr20, 0x414 ++ vldi vr21, 0x405 ++ vldi vr22, 0x410 ++ ++ addi.d sp, sp, -64 ++ fst.d f24, sp, 0 ++ fst.d f25, sp, 8 ++ fst.d f26, sp, 16 ++ fst.d f27, sp, 24 ++ fst.d f28, sp, 32 ++ fst.d f29, sp, 40 ++ fst.d f30, sp, 48 ++ fst.d f31, sp, 56 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr14, vr15 ++ ++ alsl.d a1, a2, t0, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr16, vr17 ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr18, vr19 ++ ++ addi.d a1, t0, 8 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr23, vr24 ++ vssrani.bu.h vr23, vr12, 5 ++ vssrani.bu.h vr24, vr13, 5 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr25, vr26 ++ vssrani.bu.h vr25, vr14, 5 ++ vssrani.bu.h vr26, vr15, 5 ++ ++ alsl.d a1, a2, a1, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr27, vr28 ++ vssrani.bu.h vr27, vr16, 5 ++ vssrani.bu.h vr28, vr17, 5 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr29, vr30 ++ vssrani.bu.h vr29, vr18, 5 ++ vssrani.bu.h vr30, vr19, 5 ++ ++ vld vr0, t4, 0 // t4 = src - 2 * stride + 1 ++ vldx vr1, t4, a2 ++ vldx vr2, t4, t1 ++ vldx vr3, t4, t2 ++ alsl.d t4, a2, t4, 2 ++ vld vr4, t4, 0 ++ vldx vr5, t4, a2 ++ vldx vr6, t4, t1 ++ LSX_QPEL8_V_LOWPASS vr0, vr1, vr2, vr3, vr4, vr5, vr6 ++ vld vr0, t8, 0 ++ vldx vr1, t8, a2 ++ vavgr.bu vr13, vr23, vr13 ++ vavgr.bu vr14, vr24, vr14 ++ vavgr.bu vr13, vr13, vr0 ++ vavgr.bu vr14, vr14, vr1 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr0, t4, t2 ++ alsl.d t4, a2, t4, 2 ++ vld vr1, t4, 0 ++ LSX_QPEL8_V_LOWPASS vr2, vr3, vr4, vr5, vr6, vr0, vr1 ++ vldx vr2, t8, t1 ++ vldx vr3, t8, t2 ++ vavgr.bu vr13, vr25, vr13 ++ vavgr.bu vr14, vr26, vr14 ++ vavgr.bu vr13, vr13, vr2 ++ vavgr.bu vr14, vr14, vr3 ++ add.d t6, t4, zero // t6 = src + 6 * stride ++ vstx vr13, a0, t1 ++ vstx vr14, a0, t2 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 * stride ++ alsl.d t8, a2, t8, 2 ++ ++ vldx vr2, t4, a2 ++ vldx vr3, t4, t1 ++ LSX_QPEL8_V_LOWPASS vr4, vr5, vr6, vr0, vr1, vr2, vr3 ++ vld vr4, t8, 0 ++ vldx vr5, t8, a2 ++ vavgr.bu vr13, vr27, vr13 ++ vavgr.bu vr14, vr28, vr14 ++ vavgr.bu vr13, vr13, vr4 ++ vavgr.bu vr14, vr14, vr5 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr4, t4, t2 ++ alsl.d t4, a2, t4, 2 ++ vld vr5, t4, 0 ++ LSX_QPEL8_V_LOWPASS vr6, vr0, vr1, vr2, vr3, vr4, vr5 ++ vldx vr6, t8, t1 ++ vldx vr0, t8, t2 ++ vavgr.bu vr13, vr29, vr13 ++ vavgr.bu vr14, vr30, vr14 ++ vavgr.bu vr13, vr13, vr6 ++ vavgr.bu vr14, vr14, vr0 ++ vstx vr13, a0, t1 ++ vstx vr14, a0, t2 ++ ++ alsl.d a1, a2, t0, 3 // a1 = src + 8 * stride ++ addi.d t5, a1, 8 // a1 = src + 8 * stride + 8 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr14, vr15 ++ ++ alsl.d a1, a2, a1, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr16, vr17 ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr18, vr19 ++ ++ vld vr0, t5, 0 ++ vldx vr1, t5, a2 ++ LSX_QPEL8_H_LOWPASS vr23, vr24 ++ vssrani.bu.h vr23, vr12, 5 ++ vssrani.bu.h vr24, vr13, 5 ++ vldx vr0, t5, t1 ++ vldx vr1, t5, t2 ++ LSX_QPEL8_H_LOWPASS vr25, vr26 ++ vssrani.bu.h vr25, vr14, 5 ++ vssrani.bu.h vr26, vr15, 5 ++ ++ alsl.d t5, a2, t5, 2 ++ ++ vld vr0, t5, 0 ++ vldx vr1, t5, a2 ++ LSX_QPEL8_H_LOWPASS vr27, vr28 ++ vssrani.bu.h vr27, vr16, 5 ++ vssrani.bu.h vr28, vr17, 5 ++ vldx vr0, t5, t1 ++ vldx vr1, t5, t2 ++ LSX_QPEL8_H_LOWPASS vr29, vr30 ++ vssrani.bu.h vr29, vr18, 5 ++ vssrani.bu.h vr30, vr19, 5 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 * stride ++ alsl.d t8, a2, t8, 2 ++ // t6 = src + 6 * stride + 1 ++ vld vr0, t6, 0 ++ vldx vr1, t6, a2 ++ vldx vr2, t6, t1 ++ vldx vr3, t6, t2 ++ alsl.d t6, a2, t6, 2 ++ vld vr4, t6, 0 ++ vldx vr5, t6, a2 ++ vldx vr6, t6, t1 ++ ++ LSX_QPEL8_V_LOWPASS vr0, vr1, vr2, vr3, vr4, vr5, vr6 ++ vld vr0, t8, 0 ++ vldx vr1, t8, a2 ++ vavgr.bu vr13, vr23, vr13 ++ vavgr.bu vr14, vr24, vr14 ++ vavgr.bu vr13, vr13, vr0 ++ vavgr.bu vr14, vr14, vr1 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr0, t6, t2 ++ alsl.d t6, a2, t6, 2 ++ vld vr1, t6, 0 ++ LSX_QPEL8_V_LOWPASS vr2, vr3, vr4, vr5, vr6, vr0, vr1 ++ vldx vr2, t8, t1 ++ vldx vr3, t8, t2 ++ vavgr.bu vr13, vr25, vr13 ++ vavgr.bu vr14, vr26, vr14 ++ vavgr.bu vr13, vr13, vr2 ++ vavgr.bu vr14, vr14, vr3 ++ vstx vr13, a0, t1 ++ vstx vr14, a0, t2 ++ ++ alsl.d a0, a2, a0, 2 // dst = dst + 4 *stride ++ alsl.d t8, a2, t8, 2 ++ ++ vldx vr2, t6, a2 ++ vldx vr3, t6, t1 ++ LSX_QPEL8_V_LOWPASS vr4, vr5, vr6, vr0, vr1, vr2, vr3 ++ vld vr4, t8, 0 ++ vldx vr5, t8, a2 ++ vavgr.bu vr13, vr27, vr13 ++ vavgr.bu vr14, vr28, vr14 ++ vavgr.bu vr13, vr13, vr4 ++ vavgr.bu vr14, vr14, vr5 ++ vst vr13, a0, 0 ++ vstx vr14, a0, a2 ++ ++ vldx vr4, t6, t2 ++ alsl.d t6, a2, t6, 2 ++ vld vr5, t6, 0 ++ LSX_QPEL8_V_LOWPASS vr6, vr0, vr1, vr2, vr3, vr4, vr5 ++ vldx vr6, t8, t1 ++ vldx vr0, t8, t2 ++ vavgr.bu vr13, vr29, vr13 ++ vavgr.bu vr14, vr30, vr14 ++ vavgr.bu vr13, vr13, vr6 ++ vavgr.bu vr14, vr14, vr0 ++ vstx vr13, a0, t1 ++ vstx vr14, a0, t2 ++ ++ fld.d f24, sp, 0 ++ fld.d f25, sp, 8 ++ fld.d f26, sp, 16 ++ fld.d f27, sp, 24 ++ fld.d f28, sp, 32 ++ fld.d f29, sp, 40 ++ fld.d f30, sp, 48 ++ fld.d f31, sp, 56 ++ addi.d sp, sp, 64 ++.endm ++ ++/* ++ * void avg_h264_qpel16_mc33(uint8_t *dst, const uint8_t *src, ++ * ptrdiff_t stride) ++ */ ++function ff_avg_h264_qpel16_mc33_lsx ++ slli.d t1, a2, 1 ++ add.d t2, t1, a2 ++ ++ addi.d t0, a1, -2 // t0 = src - 2 ++ add.d t0, t0, a2 // t0 = src + stride - 2 ++ add.d t3, a1, zero // t3 = src ++ sub.d t4, a1, t1 // t4 = src - 2 * stride ++ addi.d t4, t4, 1 ++ addi.d t8, a0, 0 ++ ++ lsx_avc_luma_hv_qrt_and_aver_dst_16x16 ++endfunc ++ ++/* ++ * void avg_h264_qpel16_mc11(uint8_t *dst, const uint8_t *src, ++ * ptrdiff_t stride) ++ */ ++function ff_avg_h264_qpel16_mc11_lsx ++ slli.d t1, a2, 1 ++ add.d t2, t1, a2 ++ ++ addi.d t0, a1, -2 // t0 = src - 2 ++ add.d t3, a1, zero // t3 = src ++ sub.d t4, a1, t1 // t4 = src - 2 * stride ++ addi.d t8, a0, 0 ++ ++ lsx_avc_luma_hv_qrt_and_aver_dst_16x16 ++endfunc ++ ++/* ++ * void avg_h264_qpel16_mc31(uint8_t *dst, const uint8_t *src, ++ * ptrdiff_t stride) ++ */ ++function ff_avg_h264_qpel16_mc31_lsx ++ slli.d t1, a2, 1 ++ add.d t2, t1, a2 ++ ++ addi.d t0, a1, -2 // t0 = src - 2 ++ add.d t3, a1, zero // t3 = src ++ sub.d t4, a1, t1 // t4 = src - 2 * stride ++ addi.d t4, t4, 1 ++ addi.d t8, a0, 0 ++ ++ lsx_avc_luma_hv_qrt_and_aver_dst_16x16 ++endfunc ++ ++/* ++ * void avg_h264_qpel16_mc13(uint8_t *dst, const uint8_t *src, ++ * ptrdiff_t stride) ++ */ ++function ff_avg_h264_qpel16_mc13_lsx ++ slli.d t1, a2, 1 ++ add.d t2, t1, a2 ++ ++ addi.d t0, a1, -2 // t0 = src - 2 ++ add.d t0, t0, a2 ++ add.d t3, a1, zero // t3 = src ++ sub.d t4, a1, t1 // t4 = src - 2 * stride ++ addi.d t8, a0, 0 ++ ++ lsx_avc_luma_hv_qrt_and_aver_dst_16x16 ++endfunc ++ ++/* ++ * void avg_h264_qpel16_mc20(uint8_t *dst, const uint8_t *src, ++ * ptrdiff_t stride) ++ */ ++function ff_avg_h264_qpel16_mc20_lsx ++ slli.d t1, a2, 1 ++ add.d t2, t1, a2 ++ vldi vr20, 0x414 ++ vldi vr21, 0x405 ++ vldi vr22, 0x410 ++ ++ addi.d t0, a1, -2 // t0 = src - 2 ++ addi.d t5, a0, 0 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr14, vr15 ++ ++ alsl.d a1, a2, t0, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr16, vr17 ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr18, vr19 ++ ++ addi.d t0, t0, 8 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vld vr0, t5, 0 ++ vldx vr1, t5, a2 ++ vssrani.bu.h vr2, vr12, 5 ++ vssrani.bu.h vr3, vr13, 5 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vst vr0, a0, 0 ++ vstx vr1, a0, a2 ++ ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vldx vr0, t5, t1 ++ vldx vr1, t5, t2 ++ vssrani.bu.h vr2, vr14, 5 ++ vssrani.bu.h vr3, vr15, 5 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vstx vr0, a0, t1 ++ vstx vr1, a0, t2 ++ ++ alsl.d t0, a2, t0, 2 ++ alsl.d t5, a2, t5, 2 ++ alsl.d a0, a2, a0, 2 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vld vr0, t5, 0 ++ vldx vr1, t5, a2 ++ vssrani.bu.h vr2, vr16, 5 ++ vssrani.bu.h vr3, vr17, 5 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vst vr0, a0, 0 ++ vstx vr1, a0, a2 ++ ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vldx vr0, t5, t1 ++ vldx vr1, t5, t2 ++ vssrani.bu.h vr2, vr18, 5 ++ vssrani.bu.h vr3, vr19, 5 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vstx vr0, a0, t1 ++ vstx vr1, a0, t2 ++ ++ alsl.d a1, a2, a1, 2 ++ alsl.d t0, a2, t0, 2 ++ alsl.d t5, a2, t5, 2 ++ alsl.d a0, a2, a0, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr14, vr15 ++ ++ alsl.d a1, a2, a1, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ LSX_QPEL8_H_LOWPASS vr16, vr17 ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr18, vr19 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vld vr0, t5, 0 ++ vldx vr1, t5, a2 ++ vssrani.bu.h vr2, vr12, 5 ++ vssrani.bu.h vr3, vr13, 5 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vst vr0, a0, 0 ++ vstx vr1, a0, a2 ++ ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vldx vr0, t5, t1 ++ vldx vr1, t5, t2 ++ vssrani.bu.h vr2, vr14, 5 ++ vssrani.bu.h vr3, vr15, 5 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vstx vr0, a0, t1 ++ vstx vr1, a0, t2 ++ ++ alsl.d t0, a2, t0, 2 ++ alsl.d t5, a2, t5, 2 ++ alsl.d a0, a2, a0, 2 ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a2 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vld vr0, t5, 0 ++ vldx vr1, t5, a2 ++ vssrani.bu.h vr2, vr16, 5 ++ vssrani.bu.h vr3, vr17, 5 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vst vr0, a0, 0 ++ vstx vr1, a0, a2 ++ ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr2, vr3 ++ vldx vr0, t5, t1 ++ vldx vr1, t5, t2 ++ vssrani.bu.h vr2, vr18, 5 ++ vssrani.bu.h vr3, vr19, 5 ++ vavgr.bu vr0, vr0, vr2 ++ vavgr.bu vr1, vr1, vr3 ++ vstx vr0, a0, t1 ++ vstx vr1, a0, t2 ++endfunc ++ ++.macro LSX_QPEL8_HV_LOWPASS_H out0, out1 ++ vbsrl.v vr2, vr0, 1 ++ vbsrl.v vr3, vr1, 1 ++ vbsrl.v vr4, vr0, 2 ++ vbsrl.v vr5, vr1, 2 ++ vbsrl.v vr6, vr0, 3 ++ vbsrl.v vr7, vr1, 3 ++ vbsrl.v vr8, vr0, 4 ++ vbsrl.v vr9, vr1, 4 ++ vbsrl.v vr10, vr0, 5 ++ vbsrl.v vr11, vr1, 5 ++ ++ vilvl.b vr6, vr4, vr6 ++ vilvl.b vr7, vr5, vr7 ++ vilvl.b vr8, vr2, vr8 ++ vilvl.b vr9, vr3, vr9 ++ vilvl.b vr10, vr0, vr10 ++ vilvl.b vr11, vr1, vr11 ++ ++ vhaddw.hu.bu vr6, vr6, vr6 ++ vhaddw.hu.bu vr7, vr7, vr7 ++ vhaddw.hu.bu vr8, vr8, vr8 ++ vhaddw.hu.bu vr9, vr9, vr9 ++ vhaddw.hu.bu vr10, vr10, vr10 ++ vhaddw.hu.bu vr11, vr11, vr11 ++ ++ vmul.h vr2, vr6, vr20 ++ vmul.h vr3, vr7, vr20 ++ vmul.h vr4, vr8, vr21 ++ vmul.h vr5, vr9, vr21 ++ vssub.h vr2, vr2, vr4 ++ vssub.h vr3, vr3, vr5 ++ vsadd.h \out0, vr2, vr10 ++ vsadd.h \out1, vr3, vr11 ++.endm ++ ++.macro LSX_QPEL8_HV_LOWPASS_V in0, in1, in2, in3, in4, in5, in6, out0, out1, out2, out3 ++ vilvl.h vr0, \in2, \in3 ++ vilvl.h vr1, \in3, \in4 // tmp0 ++ vilvl.h vr2, \in1, \in4 ++ vilvl.h vr3, \in2, \in5 // tmp2 ++ vilvl.h vr4, \in0, \in5 ++ vilvl.h vr5, \in1, \in6 // tmp4 ++ vhaddw.w.h vr0, vr0, vr0 ++ vhaddw.w.h vr1, vr1, vr1 ++ vhaddw.w.h vr2, vr2, vr2 ++ vhaddw.w.h vr3, vr3, vr3 ++ vhaddw.w.h vr4, vr4, vr4 ++ vhaddw.w.h vr5, vr5, vr5 ++ vmul.w vr0, vr0, vr22 ++ vmul.w vr1, vr1, vr22 ++ vmul.w vr2, vr2, vr23 ++ vmul.w vr3, vr3, vr23 ++ vssub.w vr0, vr0, vr2 ++ vssub.w vr1, vr1, vr3 ++ vsadd.w vr0, vr0, vr4 ++ vsadd.w vr1, vr1, vr5 ++ vsadd.w \out0, vr0, vr24 ++ vsadd.w \out1, vr1, vr24 ++ ++ vilvh.h vr0, \in2, \in3 ++ vilvh.h vr1, \in3, \in4 // tmp0 ++ vilvh.h vr2, \in1, \in4 ++ vilvh.h vr3, \in2, \in5 // tmp2 ++ vilvh.h vr4, \in0, \in5 ++ vilvh.h vr5, \in1, \in6 // tmp4 ++ vhaddw.w.h vr0, vr0, vr0 ++ vhaddw.w.h vr1, vr1, vr1 ++ vhaddw.w.h vr2, vr2, vr2 ++ vhaddw.w.h vr3, vr3, vr3 ++ vhaddw.w.h vr4, vr4, vr4 ++ vhaddw.w.h vr5, vr5, vr5 ++ vmul.w vr0, vr0, vr22 ++ vmul.w vr1, vr1, vr22 ++ vmul.w vr2, vr2, vr23 ++ vmul.w vr3, vr3, vr23 ++ vssub.w vr0, vr0, vr2 ++ vssub.w vr1, vr1, vr3 ++ vsadd.w vr0, vr0, vr4 ++ vsadd.w vr1, vr1, vr5 ++ vsadd.w \out2, vr0, vr24 ++ vsadd.w \out3, vr1, vr24 ++ ++ vssrani.hu.w \out2, \out0, 10 ++ vssrani.hu.w \out3, \out1, 10 ++ vssrani.bu.h \out3, \out2, 0 ++.endm ++ ++.macro put_h264_qpel8_hv_lowpass_core_lsx in0, in1 ++ vld vr0, \in0, 0 ++ vldx vr1, \in0, a3 ++ LSX_QPEL8_HV_LOWPASS_H vr12, vr13 // a b$ ++ vldx vr0, \in0, t1 ++ vldx vr1, \in0, t2 ++ LSX_QPEL8_HV_LOWPASS_H vr14, vr15 // c d$ ++ ++ alsl.d \in0, a3, \in0, 2 ++ ++ vld vr0, \in0, 0 ++ vldx vr1, \in0, a3 ++ LSX_QPEL8_HV_LOWPASS_H vr16, vr17 // e f$ ++ vldx vr0, \in0, t1 ++ vldx vr1, \in0, t2 ++ LSX_QPEL8_HV_LOWPASS_H vr18, vr19 // g h$ ++ ++ LSX_QPEL8_HV_LOWPASS_V vr12, vr13, vr14, vr15, vr16, vr17, vr18, vr6, vr7, vr0, vr1 ++ vstelm.d vr1, \in1, 0, 0 ++ add.d \in1, \in1, a2 ++ vstelm.d vr1, \in1, 0, 1 ++ ++ alsl.d \in0, a3, \in0, 2 ++ ++ // tmp8 ++ vld vr0, \in0, 0 ++ vldx vr1, \in0, a3 ++ LSX_QPEL8_HV_LOWPASS_H vr12, vr13 ++ LSX_QPEL8_HV_LOWPASS_V vr14, vr15, vr16, vr17, vr18, vr19, vr12, vr6, vr7, vr0, vr1 ++ add.d \in1, \in1, a2 ++ vstelm.d vr1, \in1, 0, 0 ++ add.d \in1, \in1, a2 ++ vstelm.d vr1, \in1, 0, 1 ++ ++ // tmp10 ++ vldx vr0, \in0, t1 ++ vldx vr1, \in0, t2 ++ LSX_QPEL8_HV_LOWPASS_H vr14, vr15 ++ LSX_QPEL8_HV_LOWPASS_V vr16, vr17, vr18, vr19, vr12, vr13, vr14, vr6, vr7, vr0, vr1 ++ add.d \in1, \in1, a2 ++ vstelm.d vr1, \in1, 0, 0 ++ add.d \in1, \in1, a2 ++ vstelm.d vr1, \in1, 0, 1 ++ ++ // tmp12 ++ alsl.d \in0, a3, \in0, 2 ++ ++ vld vr0, \in0, 0 ++ vldx vr1, \in0, a3 ++ LSX_QPEL8_HV_LOWPASS_H vr16, vr17 ++ LSX_QPEL8_HV_LOWPASS_V vr18, vr19, vr12, vr13, vr14, vr15, vr16, vr6, vr7, vr0, vr1 ++ add.d \in1, \in1, a2 ++ vstelm.d vr1, \in1, 0, 0 ++ add.d \in1, \in1, a2 ++ vstelm.d vr1, \in1, 0, 1 ++.endm ++ ++function put_h264_qpel8_hv_lowpass_lsx ++ slli.d t1, a3, 1 ++ add.d t2, t1, a3 ++ ++ addi.d sp, sp, -8 ++ fst.d f24, sp, 0 ++ ++ vldi vr20, 0x414 // h_20 ++ vldi vr21, 0x405 // h_5 ++ vldi vr22, 0x814 // w_20 ++ vldi vr23, 0x805 // w_5 ++ addi.d t4, zero, 512 ++ vreplgr2vr.w vr24, t4 // w_512 ++ ++ addi.d t0, a1, -2 // t0 = src - 2 ++ sub.d t0, t0, t1 // t0 = t0 - 2 * stride ++ ++ put_h264_qpel8_hv_lowpass_core_lsx t0, a0 ++ ++ fld.d f24, sp, 0 ++ addi.d sp, sp, 8 ++endfunc ++ ++/* ++ * void put_h264_qpel16_h_lowpass_lsx(uint8_t *dst, const uint8_t *src, ++ * ptrdiff_t dstStride, ptrdiff_t srcStride) ++ */ ++function put_h264_qpel8_h_lowpass_lsx ++ slli.d t1, a3, 1 ++ add.d t2, t1, a3 ++ vldi vr20, 0x414 ++ vldi vr21, 0x405 ++ vldi vr22, 0x410 ++ ++ addi.d t0, a1, -2 // t0 = src - 2 ++ add.d t3, a1, zero // t3 = src ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a3 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vssrani.bu.h vr13, vr12, 5 ++ vstelm.d vr13, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr13, a0, 0, 1 ++ add.d a0, a0, a2 ++ ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vssrani.bu.h vr13, vr12, 5 ++ vstelm.d vr13, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr13, a0, 0, 1 ++ add.d a0, a0, a2 ++ ++ alsl.d a1, a3, t0, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a3 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vssrani.bu.h vr13, vr12, 5 ++ vstelm.d vr13, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr13, a0, 0, 1 ++ add.d a0, a0, a2 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vssrani.bu.h vr13, vr12, 5 ++ vstelm.d vr13, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr13, a0, 0, 1 ++ add.d a0, a0, a2 ++endfunc ++ ++/* ++ * void put_pixels16_l2_8_lsx(uint8_t *dst, const uint8_t *src, uint8_t *half, ++ * ptrdiff_t dstStride, ptrdiff_t srcStride) ++ */ ++function put_pixels16_l2_8_lsx ++ slli.d t0, a4, 1 ++ add.d t1, t0, a4 ++ slli.d t2, t0, 1 ++ slli.d t3, a3, 1 ++ add.d t4, t3, a3 ++ slli.d t5, t3, 1 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a4 ++ vldx vr2, a1, t0 ++ vldx vr3, a1, t1 ++ add.d a1, a1, t2 ++ vld vr4, a1, 0 ++ vldx vr5, a1, a4 ++ vldx vr6, a1, t0 ++ vldx vr7, a1, t1 ++ add.d a1, a1, t2 ++ ++ vld vr8, a2, 0x00 ++ vld vr9, a2, 0x10 ++ vld vr10, a2, 0x20 ++ vld vr11, a2, 0x30 ++ vld vr12, a2, 0x40 ++ vld vr13, a2, 0x50 ++ vld vr14, a2, 0x60 ++ vld vr15, a2, 0x70 ++ ++ vavgr.bu vr0, vr8, vr0 ++ vavgr.bu vr1, vr9, vr1 ++ vavgr.bu vr2, vr10, vr2 ++ vavgr.bu vr3, vr11, vr3 ++ vavgr.bu vr4, vr12, vr4 ++ vavgr.bu vr5, vr13, vr5 ++ vavgr.bu vr6, vr14, vr6 ++ vavgr.bu vr7, vr15, vr7 ++ ++ vst vr0, a0, 0 ++ vstx vr1, a0, a3 ++ vstx vr2, a0, t3 ++ vstx vr3, a0, t4 ++ add.d a0, a0, t5 ++ vst vr4, a0, 0 ++ vstx vr5, a0, a3 ++ vstx vr6, a0, t3 ++ vstx vr7, a0, t4 ++ add.d a0, a0, t5 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a4 ++ vldx vr2, a1, t0 ++ vldx vr3, a1, t1 ++ add.d a1, a1, t2 ++ vld vr4, a1, 0 ++ vldx vr5, a1, a4 ++ vldx vr6, a1, t0 ++ vldx vr7, a1, t1 ++ ++ vld vr8, a2, 0x80 ++ vld vr9, a2, 0x90 ++ vld vr10, a2, 0xa0 ++ vld vr11, a2, 0xb0 ++ vld vr12, a2, 0xc0 ++ vld vr13, a2, 0xd0 ++ vld vr14, a2, 0xe0 ++ vld vr15, a2, 0xf0 ++ ++ vavgr.bu vr0, vr8, vr0 ++ vavgr.bu vr1, vr9, vr1 ++ vavgr.bu vr2, vr10, vr2 ++ vavgr.bu vr3, vr11, vr3 ++ vavgr.bu vr4, vr12, vr4 ++ vavgr.bu vr5, vr13, vr5 ++ vavgr.bu vr6, vr14, vr6 ++ vavgr.bu vr7, vr15, vr7 ++ ++ vst vr0, a0, 0 ++ vstx vr1, a0, a3 ++ vstx vr2, a0, t3 ++ vstx vr3, a0, t4 ++ add.d a0, a0, t5 ++ vst vr4, a0, 0 ++ vstx vr5, a0, a3 ++ vstx vr6, a0, t3 ++ vstx vr7, a0, t4 ++endfunc ++ ++.macro LSX_QPEL8_V_LOWPASS_1 in0, in1, in2, in3, in4, in5, in6 ++ vilvl.b vr7, \in3, \in2 ++ vilvl.b vr8, \in4, \in3 ++ vilvl.b vr9, \in4, \in1 ++ vilvl.b vr10, \in5, \in2 ++ vilvl.b vr11, \in5, \in0 ++ vilvl.b vr12, \in6, \in1 ++ ++ vhaddw.hu.bu vr7, vr7, vr7 ++ vhaddw.hu.bu vr8, vr8, vr8 ++ vhaddw.hu.bu vr9, vr9, vr9 ++ vhaddw.hu.bu vr10, vr10, vr10 ++ vhaddw.hu.bu vr11, vr11, vr11 ++ vhaddw.hu.bu vr12, vr12, vr12 ++ ++ vmul.h vr7, vr7, vr20 ++ vmul.h vr8, vr8, vr20 ++ vmul.h vr9, vr9, vr21 ++ vmul.h vr10, vr10, vr21 ++ ++ vssub.h vr7, vr7, vr9 ++ vssub.h vr8, vr8, vr10 ++ vsadd.h vr7, vr7, vr11 ++ vsadd.h vr8, vr8, vr12 ++ vsadd.h vr7, vr7, vr22 ++ vsadd.h vr8, vr8, vr22 ++ ++ vssrani.bu.h vr8, vr7, 5 ++.endm ++ ++/* ++ * void put_h264_qpel8_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, ++ * int srcStride) ++ */ ++function put_h264_qpel8_v_lowpass_lsx ++ slli.d t0, a3, 1 ++ add.d t1, t0, a3 ++ sub.d t2, a1, t0 // t2 = src - 2 * stride ++ vldi vr20, 0x414 ++ vldi vr21, 0x405 ++ vldi vr22, 0x410 ++ ++ fld.d f0, t2, 0 ++ fldx.d f1, t2, a3 ++ fldx.d f2, t2, t0 ++ fldx.d f3, t2, t1 ++ alsl.d t2, a3, t2, 2 // t2 = t2 + 4 * stride ++ fld.d f4, t2, 0 ++ fldx.d f5, t2, a3 ++ fldx.d f6, t2, t0 ++ LSX_QPEL8_V_LOWPASS_1 vr0, vr1, vr2, vr3, vr4, vr5, vr6 ++ vstelm.d vr8, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr8, a0, 0, 1 ++ add.d a0, a0, a2 ++ ++ fldx.d f0, t2, t1 ++ alsl.d t2, a3, t2, 2 // t2 = t2 + 4 *stride ++ fld.d f1, t2, 0 ++ LSX_QPEL8_V_LOWPASS_1 vr2, vr3, vr4, vr5, vr6, vr0, vr1 ++ vstelm.d vr8, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr8, a0, 0, 1 ++ add.d a0, a0, a2 ++ ++ fldx.d f2, t2, a3 ++ fldx.d f3, t2, t0 ++ LSX_QPEL8_V_LOWPASS_1 vr4, vr5, vr6, vr0, vr1, vr2, vr3 ++ vstelm.d vr8, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr8, a0, 0, 1 ++ add.d a0, a0, a2 ++ ++ fldx.d f4, t2, t1 ++ alsl.d t2, a3, t2, 2 // t2 = t2 + 4 * stride ++ fld.d f5, t2, 0 ++ LSX_QPEL8_V_LOWPASS_1 vr6, vr0, vr1, vr2, vr3, vr4, vr5 ++ vstelm.d vr8, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr8, a0, 0, 1 ++endfunc ++ ++/* ++ * void avg_h264_qpel8_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, ++ * int srcStride) ++ */ ++function avg_h264_qpel8_v_lowpass_lsx ++ slli.d t0, a3, 1 ++ add.d t1, t0, a3 ++ sub.d t2, a1, t0 // t2 = src - 2 * stride ++ addi.d t3, a0, 0 ++ slli.d t4, a2, 1 ++ add.d t5, t4, a2 ++ vldi vr20, 0x414 ++ vldi vr21, 0x405 ++ vldi vr22, 0x410 ++ ++ fld.d f0, t2, 0 ++ fldx.d f1, t2, a3 ++ fldx.d f2, t2, t0 ++ fldx.d f3, t2, t1 ++ alsl.d t2, a3, t2, 2 // t2 = t2 + 4 * stride ++ fld.d f4, t2, 0 ++ fldx.d f5, t2, a3 ++ fldx.d f6, t2, t0 ++ LSX_QPEL8_V_LOWPASS_1 vr0, vr1, vr2, vr3, vr4, vr5, vr6 ++ fld.d f0, t3, 0 ++ fldx.d f1, t3, a2 ++ vilvl.d vr0, vr1, vr0 ++ vavgr.bu vr8, vr8, vr0 ++ vstelm.d vr8, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr8, a0, 0, 1 ++ add.d a0, a0, a2 ++ ++ fldx.d f0, t2, t1 ++ alsl.d t2, a3, t2, 2 // t2 = t2 + 4 *stride ++ fld.d f1, t2, 0 ++ LSX_QPEL8_V_LOWPASS_1 vr2, vr3, vr4, vr5, vr6, vr0, vr1 ++ fldx.d f2, t3, t4 ++ fldx.d f3, t3, t5 ++ vilvl.d vr2, vr3, vr2 ++ vavgr.bu vr8, vr8, vr2 ++ vstelm.d vr8, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr8, a0, 0, 1 ++ add.d a0, a0, a2 ++ ++ alsl.d t3, a2, t3, 2 ++ ++ fldx.d f2, t2, a3 ++ fldx.d f3, t2, t0 ++ LSX_QPEL8_V_LOWPASS_1 vr4, vr5, vr6, vr0, vr1, vr2, vr3 ++ fld.d f4, t3, 0 ++ fldx.d f5, t3, a2 ++ vilvl.d vr4, vr5, vr4 ++ vavgr.bu vr8, vr8, vr4 ++ vstelm.d vr8, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr8, a0, 0, 1 ++ add.d a0, a0, a2 ++ ++ fldx.d f4, t2, t1 ++ alsl.d t2, a3, t2, 2 // t2 = t2 + 4 * stride ++ fld.d f5, t2, 0 ++ LSX_QPEL8_V_LOWPASS_1 vr6, vr0, vr1, vr2, vr3, vr4, vr5 ++ fldx.d f6, t3, t4 ++ fldx.d f0, t3, t5 ++ vilvl.d vr6, vr0, vr6 ++ vavgr.bu vr8, vr8, vr6 ++ vstelm.d vr8, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr8, a0, 0, 1 ++endfunc ++ ++/* ++ * void avg_pixels16_l2_8(uint8_t *dst, const uint8_t *src, uint8_t *half, ++ * ptrdiff_t dstStride, ptrdiff_t srcStride) ++ */ ++function avg_pixels16_l2_8_lsx ++ slli.d t0, a4, 1 ++ add.d t1, t0, a4 ++ slli.d t2, t0, 1 ++ slli.d t3, a3, 1 ++ add.d t4, t3, a3 ++ slli.d t5, t3, 1 ++ addi.d t6, a0, 0 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a4 ++ vldx vr2, a1, t0 ++ vldx vr3, a1, t1 ++ add.d a1, a1, t2 ++ vld vr4, a1, 0 ++ vldx vr5, a1, a4 ++ vldx vr6, a1, t0 ++ vldx vr7, a1, t1 ++ add.d a1, a1, t2 ++ ++ vld vr8, a2, 0x00 ++ vld vr9, a2, 0x10 ++ vld vr10, a2, 0x20 ++ vld vr11, a2, 0x30 ++ vld vr12, a2, 0x40 ++ vld vr13, a2, 0x50 ++ vld vr14, a2, 0x60 ++ vld vr15, a2, 0x70 ++ ++ vavgr.bu vr0, vr8, vr0 ++ vavgr.bu vr1, vr9, vr1 ++ vavgr.bu vr2, vr10, vr2 ++ vavgr.bu vr3, vr11, vr3 ++ vavgr.bu vr4, vr12, vr4 ++ vavgr.bu vr5, vr13, vr5 ++ vavgr.bu vr6, vr14, vr6 ++ vavgr.bu vr7, vr15, vr7 ++ ++ vld vr8, t6, 0 ++ vldx vr9, t6, a3 ++ vldx vr10, t6, t3 ++ vldx vr11, t6, t4 ++ add.d t6, t6, t5 ++ vld vr12, t6, 0 ++ vldx vr13, t6, a3 ++ vldx vr14, t6, t3 ++ vldx vr15, t6, t4 ++ add.d t6, t6, t5 ++ ++ vavgr.bu vr0, vr8, vr0 ++ vavgr.bu vr1, vr9, vr1 ++ vavgr.bu vr2, vr10, vr2 ++ vavgr.bu vr3, vr11, vr3 ++ vavgr.bu vr4, vr12, vr4 ++ vavgr.bu vr5, vr13, vr5 ++ vavgr.bu vr6, vr14, vr6 ++ vavgr.bu vr7, vr15, vr7 ++ vst vr0, a0, 0 ++ vstx vr1, a0, a3 ++ vstx vr2, a0, t3 ++ vstx vr3, a0, t4 ++ add.d a0, a0, t5 ++ vst vr4, a0, 0 ++ vstx vr5, a0, a3 ++ vstx vr6, a0, t3 ++ vstx vr7, a0, t4 ++ add.d a0, a0, t5 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a4 ++ vldx vr2, a1, t0 ++ vldx vr3, a1, t1 ++ add.d a1, a1, t2 ++ vld vr4, a1, 0 ++ vldx vr5, a1, a4 ++ vldx vr6, a1, t0 ++ vldx vr7, a1, t1 ++ ++ vld vr8, a2, 0x80 ++ vld vr9, a2, 0x90 ++ vld vr10, a2, 0xa0 ++ vld vr11, a2, 0xb0 ++ vld vr12, a2, 0xc0 ++ vld vr13, a2, 0xd0 ++ vld vr14, a2, 0xe0 ++ vld vr15, a2, 0xf0 ++ ++ vavgr.bu vr0, vr8, vr0 ++ vavgr.bu vr1, vr9, vr1 ++ vavgr.bu vr2, vr10, vr2 ++ vavgr.bu vr3, vr11, vr3 ++ vavgr.bu vr4, vr12, vr4 ++ vavgr.bu vr5, vr13, vr5 ++ vavgr.bu vr6, vr14, vr6 ++ vavgr.bu vr7, vr15, vr7 ++ ++ vld vr8, t6, 0 ++ vldx vr9, t6, a3 ++ vldx vr10, t6, t3 ++ vldx vr11, t6, t4 ++ add.d t6, t6, t5 ++ vld vr12, t6, 0 ++ vldx vr13, t6, a3 ++ vldx vr14, t6, t3 ++ vldx vr15, t6, t4 ++ ++ vavgr.bu vr0, vr8, vr0 ++ vavgr.bu vr1, vr9, vr1 ++ vavgr.bu vr2, vr10, vr2 ++ vavgr.bu vr3, vr11, vr3 ++ vavgr.bu vr4, vr12, vr4 ++ vavgr.bu vr5, vr13, vr5 ++ vavgr.bu vr6, vr14, vr6 ++ vavgr.bu vr7, vr15, vr7 ++ ++ vst vr0, a0, 0 ++ vstx vr1, a0, a3 ++ vstx vr2, a0, t3 ++ vstx vr3, a0, t4 ++ add.d a0, a0, t5 ++ vst vr4, a0, 0 ++ vstx vr5, a0, a3 ++ vstx vr6, a0, t3 ++ vstx vr7, a0, t4 ++endfunc ++ ++.macro avg_h264_qpel8_hv_lowpass_core_lsx in0, in1, in2 ++ vld vr0, \in0, 0 ++ vldx vr1, \in0, a3 ++ LSX_QPEL8_HV_LOWPASS_H vr12, vr13 // a b ++ vldx vr0, \in0, t1 ++ vldx vr1, \in0, t2 ++ LSX_QPEL8_HV_LOWPASS_H vr14, vr15 // c d ++ ++ alsl.d \in0, a3, \in0, 2 ++ ++ vld vr0, \in0, 0 ++ vldx vr1, \in0, a3 ++ LSX_QPEL8_HV_LOWPASS_H vr16, vr17 // e f ++ vldx vr0, \in0, t1 ++ vldx vr1, \in0, t2 ++ LSX_QPEL8_HV_LOWPASS_H vr18, vr19 // g h ++ ++ LSX_QPEL8_HV_LOWPASS_V vr12, vr13, vr14, vr15, vr16, vr17, vr18, vr6, vr7, vr0, vr1 ++ fld.d f2, \in2, 0 ++ fldx.d f3, \in2, a2 ++ vilvl.d vr2, vr3, vr2 ++ vavgr.bu vr1, vr2, vr1 ++ vstelm.d vr1, \in1, 0, 0 ++ add.d \in1, \in1, a2 ++ vstelm.d vr1, \in1, 0, 1 ++ ++ alsl.d \in0, a3, \in0, 2 ++ ++ // tmp8 ++ vld vr0, \in0, 0 ++ vldx vr1, \in0, a3 ++ LSX_QPEL8_HV_LOWPASS_H vr12, vr13 ++ LSX_QPEL8_HV_LOWPASS_V vr14, vr15, vr16, vr17, vr18, vr19, vr12, vr6, vr7, vr0, vr1 ++ fldx.d f2, \in2, t5 ++ fldx.d f3, \in2, t6 ++ vilvl.d vr2, vr3, vr2 ++ vavgr.bu vr1, vr2, vr1 ++ add.d \in1, \in1, a2 ++ vstelm.d vr1, \in1, 0, 0 ++ add.d \in1, \in1, a2 ++ vstelm.d vr1, \in1, 0, 1 ++ ++ alsl.d \in2, a2, \in2, 2 ++ ++ // tmp10 ++ vldx vr0, \in0, t1 ++ vldx vr1, \in0, t2 ++ LSX_QPEL8_HV_LOWPASS_H vr14, vr15 ++ LSX_QPEL8_HV_LOWPASS_V vr16, vr17, vr18, vr19, vr12, vr13, vr14, vr6, vr7, vr0, vr1 ++ fld.d f2, \in2, 0 ++ fldx.d f3, \in2, a2 ++ vilvl.d vr2, vr3, vr2 ++ vavgr.bu vr1, vr2, vr1 ++ add.d \in1, \in1, a2 ++ vstelm.d vr1, \in1, 0, 0 ++ add.d \in1, \in1, a2 ++ vstelm.d vr1, \in1, 0, 1 ++ ++ // tmp12 ++ alsl.d \in0, a3, \in0, 2 ++ ++ vld vr0, \in0, 0 ++ vldx vr1, \in0, a3 ++ LSX_QPEL8_HV_LOWPASS_H vr16, vr17 ++ LSX_QPEL8_HV_LOWPASS_V vr18, vr19, vr12, vr13, vr14, vr15, vr16, vr6, vr7, vr0, vr1 ++ fldx.d f2, \in2, t5 ++ fldx.d f3, \in2, t6 ++ vilvl.d vr2, vr3, vr2 ++ vavgr.bu vr1, vr2, vr1 ++ add.d \in1, \in1, a2 ++ vstelm.d vr1, \in1, 0, 0 ++ add.d \in1, \in1, a2 ++ vstelm.d vr1, \in1, 0, 1 ++.endm ++ ++function avg_h264_qpel8_hv_lowpass_lsx ++ slli.d t1, a3, 1 ++ add.d t2, t1, a3 ++ slli.d t5, a2, 1 ++ add.d t6, a2, t5 ++ ++ addi.d sp, sp, -8 ++ fst.d f24, sp, 0 ++ ++ vldi vr20, 0x414 // h_20 ++ vldi vr21, 0x405 // h_5 ++ vldi vr22, 0x814 // w_20 ++ vldi vr23, 0x805 // w_5 ++ addi.d t4, zero, 512 ++ vreplgr2vr.w vr24, t4 // w_512 ++ ++ addi.d t0, a1, -2 // t0 = src - 2 ++ sub.d t0, t0, t1 // t0 = t0 - 2 * stride ++ addi.d t3, a0, 0 // t3 = dst ++ ++ avg_h264_qpel8_hv_lowpass_core_lsx t0, a0, t3 ++ ++ fld.d f24, sp, 0 ++ addi.d sp, sp, 8 ++endfunc ++ ++function put_pixels8_l2_8_lsx ++ slli.d t0, a4, 1 ++ add.d t1, t0, a4 ++ slli.d t2, t0, 1 ++ vld vr0, a1, 0 ++ vldx vr1, a1, a4 ++ vldx vr2, a1, t0 ++ vldx vr3, a1, t1 ++ add.d a1, a1, t2 ++ vld vr4, a1, 0 ++ vldx vr5, a1, a4 ++ vldx vr6, a1, t0 ++ vldx vr7, a1, t1 ++ ++ vld vr8, a2, 0x00 ++ vld vr9, a2, 0x08 ++ vld vr10, a2, 0x10 ++ vld vr11, a2, 0x18 ++ vld vr12, a2, 0x20 ++ vld vr13, a2, 0x28 ++ vld vr14, a2, 0x30 ++ vld vr15, a2, 0x38 ++ ++ vavgr.bu vr0, vr8, vr0 ++ vavgr.bu vr1, vr9, vr1 ++ vavgr.bu vr2, vr10, vr2 ++ vavgr.bu vr3, vr11, vr3 ++ vavgr.bu vr4, vr12, vr4 ++ vavgr.bu vr5, vr13, vr5 ++ vavgr.bu vr6, vr14, vr6 ++ vavgr.bu vr7, vr15, vr7 ++ ++ vstelm.d vr0, a0, 0, 0 ++ add.d a0, a0, a3 ++ vstelm.d vr1, a0, 0, 0 ++ add.d a0, a0, a3 ++ vstelm.d vr2, a0, 0, 0 ++ add.d a0, a0, a3 ++ vstelm.d vr3, a0, 0, 0 ++ add.d a0, a0, a3 ++ vstelm.d vr4, a0, 0, 0 ++ add.d a0, a0, a3 ++ vstelm.d vr5, a0, 0, 0 ++ add.d a0, a0, a3 ++ vstelm.d vr6, a0, 0, 0 ++ add.d a0, a0, a3 ++ vstelm.d vr7, a0, 0, 0 ++endfunc ++ ++/* ++ * void ff_put_h264_qpel8_mc00(uint8_t *dst, const uint8_t *src, ++ * ptrdiff_t stride) ++ */ ++function ff_put_h264_qpel8_mc00_lsx ++ slli.d t0, a2, 1 ++ add.d t1, t0, a2 ++ slli.d t2, t0, 1 ++ ld.d t3, a1, 0x0 ++ ldx.d t4, a1, a2 ++ ldx.d t5, a1, t0 ++ ldx.d t6, a1, t1 ++ st.d t3, a0, 0x0 ++ stx.d t4, a0, a2 ++ stx.d t5, a0, t0 ++ stx.d t6, a0, t1 ++ ++ add.d a1, a1, t2 ++ add.d a0, a0, t2 ++ ++ ld.d t3, a1, 0x0 ++ ldx.d t4, a1, a2 ++ ldx.d t5, a1, t0 ++ ldx.d t6, a1, t1 ++ st.d t3, a0, 0x0 ++ stx.d t4, a0, a2 ++ stx.d t5, a0, t0 ++ stx.d t6, a0, t1 ++endfunc ++ ++/* ++ * void ff_avg_h264_qpel8_mc00(uint8_t *dst, const uint8_t *src, ++ * ptrdiff_t stride) ++ */ ++function ff_avg_h264_qpel8_mc00_lsx ++ slli.d t0, a2, 1 ++ add.d t1, t0, a2 ++ slli.d t2, t0, 1 ++ addi.d t3, a0, 0 ++ vld vr0, a1, 0 ++ vldx vr1, a1, a2 ++ vldx vr2, a1, t0 ++ vldx vr3, a1, t1 ++ add.d a1, a1, t2 ++ vld vr4, a1, 0 ++ vldx vr5, a1, a2 ++ vldx vr6, a1, t0 ++ vldx vr7, a1, t1 ++ ++ vld vr8, t3, 0 ++ vldx vr9, t3, a2 ++ vldx vr10, t3, t0 ++ vldx vr11, t3, t1 ++ add.d t3, t3, t2 ++ vld vr12, t3, 0 ++ vldx vr13, t3, a2 ++ vldx vr14, t3, t0 ++ vldx vr15, t3, t1 ++ ++ vavgr.bu vr0, vr8, vr0 ++ vavgr.bu vr1, vr9, vr1 ++ vavgr.bu vr2, vr10, vr2 ++ vavgr.bu vr3, vr11, vr3 ++ vavgr.bu vr4, vr12, vr4 ++ vavgr.bu vr5, vr13, vr5 ++ vavgr.bu vr6, vr14, vr6 ++ vavgr.bu vr7, vr15, vr7 ++ ++ vstelm.d vr0, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr1, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr2, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr3, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr4, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr5, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr6, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr7, a0, 0, 0 ++endfunc ++ ++function avg_pixels8_l2_8_lsx ++ slli.d t0, a4, 1 ++ add.d t1, t0, a4 ++ slli.d t2, t0, 1 ++ addi.d t3, a0, 0 ++ vld vr0, a1, 0 ++ vldx vr1, a1, a4 ++ vldx vr2, a1, t0 ++ vldx vr3, a1, t1 ++ add.d a1, a1, t2 ++ vld vr4, a1, 0 ++ vldx vr5, a1, a4 ++ vldx vr6, a1, t0 ++ vldx vr7, a1, t1 ++ ++ vld vr8, a2, 0x00 ++ vld vr9, a2, 0x08 ++ vld vr10, a2, 0x10 ++ vld vr11, a2, 0x18 ++ vld vr12, a2, 0x20 ++ vld vr13, a2, 0x28 ++ vld vr14, a2, 0x30 ++ vld vr15, a2, 0x38 ++ ++ vavgr.bu vr0, vr8, vr0 ++ vavgr.bu vr1, vr9, vr1 ++ vavgr.bu vr2, vr10, vr2 ++ vavgr.bu vr3, vr11, vr3 ++ vavgr.bu vr4, vr12, vr4 ++ vavgr.bu vr5, vr13, vr5 ++ vavgr.bu vr6, vr14, vr6 ++ vavgr.bu vr7, vr15, vr7 ++ ++ slli.d t0, a3, 1 ++ add.d t1, t0, a3 ++ slli.d t2, t0, 1 ++ vld vr8, t3, 0 ++ vldx vr9, t3, a3 ++ vldx vr10, t3, t0 ++ vldx vr11, t3, t1 ++ add.d t3, t3, t2 ++ vld vr12, t3, 0 ++ vldx vr13, t3, a3 ++ vldx vr14, t3, t0 ++ vldx vr15, t3, t1 ++ ++ vavgr.bu vr0, vr8, vr0 ++ vavgr.bu vr1, vr9, vr1 ++ vavgr.bu vr2, vr10, vr2 ++ vavgr.bu vr3, vr11, vr3 ++ vavgr.bu vr4, vr12, vr4 ++ vavgr.bu vr5, vr13, vr5 ++ vavgr.bu vr6, vr14, vr6 ++ vavgr.bu vr7, vr15, vr7 ++ ++ vstelm.d vr0, a0, 0, 0 ++ add.d a0, a0, a3 ++ vstelm.d vr1, a0, 0, 0 ++ add.d a0, a0, a3 ++ vstelm.d vr2, a0, 0, 0 ++ add.d a0, a0, a3 ++ vstelm.d vr3, a0, 0, 0 ++ add.d a0, a0, a3 ++ vstelm.d vr4, a0, 0, 0 ++ add.d a0, a0, a3 ++ vstelm.d vr5, a0, 0, 0 ++ add.d a0, a0, a3 ++ vstelm.d vr6, a0, 0, 0 ++ add.d a0, a0, a3 ++ vstelm.d vr7, a0, 0, 0 ++endfunc ++ ++function avg_h264_qpel8_h_lowpass_lsx ++ slli.d t1, a3, 1 ++ add.d t2, t1, a3 ++ slli.d t5, a2, 1 ++ add.d t6, t5, a2 ++ vldi vr20, 0x414 ++ vldi vr21, 0x405 ++ vldi vr22, 0x410 ++ ++ addi.d t0, a1, -2 // t0 = src - 2 ++ add.d t3, a1, zero // t3 = src ++ addi.d t4, a0, 0 // t4 = dst ++ ++ vld vr0, t0, 0 ++ vldx vr1, t0, a3 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vssrani.bu.h vr13, vr12, 5 ++ fld.d f0, t4, 0 ++ fldx.d f1, t4, a2 ++ vilvl.d vr0, vr1, vr0 ++ vavgr.bu vr13, vr13, vr0 ++ vstelm.d vr13, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr13, a0, 0, 1 ++ add.d a0, a0, a2 ++ ++ vldx vr0, t0, t1 ++ vldx vr1, t0, t2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vssrani.bu.h vr13, vr12, 5 ++ fldx.d f0, t4, t5 ++ fldx.d f1, t4, t6 ++ vilvl.d vr0, vr1, vr0 ++ vavgr.bu vr13, vr13, vr0 ++ vstelm.d vr13, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr13, a0, 0, 1 ++ add.d a0, a0, a2 ++ ++ alsl.d a1, a3, t0, 2 ++ alsl.d t4, a2, t4, 2 ++ ++ vld vr0, a1, 0 ++ vldx vr1, a1, a3 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vssrani.bu.h vr13, vr12, 5 ++ fld.d f0, t4, 0 ++ fldx.d f1, t4, a2 ++ vilvl.d vr0, vr1, vr0 ++ vavgr.bu vr13, vr13, vr0 ++ vstelm.d vr13, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr13, a0, 0, 1 ++ add.d a0, a0, a2 ++ ++ vldx vr0, a1, t1 ++ vldx vr1, a1, t2 ++ LSX_QPEL8_H_LOWPASS vr12, vr13 ++ vssrani.bu.h vr13, vr12, 5 ++ fldx.d f0, t4, t5 ++ fldx.d f1, t4, t6 ++ vilvl.d vr0, vr1, vr0 ++ vavgr.bu vr13, vr13, vr0 ++ vstelm.d vr13, a0, 0, 0 ++ add.d a0, a0, a2 ++ vstelm.d vr13, a0, 0, 1 ++endfunc +diff --git a/libavcodec/loongarch/h264qpel_init_loongarch.c b/libavcodec/loongarch/h264qpel_init_loongarch.c +index 969c9c376c..aac983ce40 100644 +--- a/libavcodec/loongarch/h264qpel_init_loongarch.c ++++ b/libavcodec/loongarch/h264qpel_init_loongarch.c +@@ -19,6 +19,7 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "h264qpel_lsx.h" + #include "h264qpel_lasx.h" + #include "libavutil/attributes.h" + #include "libavutil/loongarch/cpu.h" +@@ -27,6 +28,76 @@ + av_cold void ff_h264qpel_init_loongarch(H264QpelContext *c, int bit_depth) + { + int cpu_flags = av_get_cpu_flags(); ++ ++ if (have_lsx(cpu_flags)) { ++ if (8 == bit_depth) { ++ c->put_h264_qpel_pixels_tab[0][0] = ff_put_h264_qpel16_mc00_lsx; ++ c->put_h264_qpel_pixels_tab[0][1] = ff_put_h264_qpel16_mc10_lsx; ++ c->put_h264_qpel_pixels_tab[0][2] = ff_put_h264_qpel16_mc20_lsx; ++ c->put_h264_qpel_pixels_tab[0][3] = ff_put_h264_qpel16_mc30_lsx; ++ c->put_h264_qpel_pixels_tab[0][4] = ff_put_h264_qpel16_mc01_lsx; ++ c->put_h264_qpel_pixels_tab[0][5] = ff_put_h264_qpel16_mc11_lsx; ++ c->put_h264_qpel_pixels_tab[0][6] = ff_put_h264_qpel16_mc21_lsx; ++ c->put_h264_qpel_pixels_tab[0][7] = ff_put_h264_qpel16_mc31_lsx; ++ c->put_h264_qpel_pixels_tab[0][8] = ff_put_h264_qpel16_mc02_lsx; ++ c->put_h264_qpel_pixels_tab[0][9] = ff_put_h264_qpel16_mc12_lsx; ++ c->put_h264_qpel_pixels_tab[0][10] = ff_put_h264_qpel16_mc22_lsx; ++ c->put_h264_qpel_pixels_tab[0][11] = ff_put_h264_qpel16_mc32_lsx; ++ c->put_h264_qpel_pixels_tab[0][12] = ff_put_h264_qpel16_mc03_lsx; ++ c->put_h264_qpel_pixels_tab[0][13] = ff_put_h264_qpel16_mc13_lsx; ++ c->put_h264_qpel_pixels_tab[0][14] = ff_put_h264_qpel16_mc23_lsx; ++ c->put_h264_qpel_pixels_tab[0][15] = ff_put_h264_qpel16_mc33_lsx; ++ ++ c->avg_h264_qpel_pixels_tab[0][0] = ff_avg_h264_qpel16_mc00_lsx; ++ c->avg_h264_qpel_pixels_tab[0][1] = ff_avg_h264_qpel16_mc10_lsx; ++ c->avg_h264_qpel_pixels_tab[0][2] = ff_avg_h264_qpel16_mc20_lsx; ++ c->avg_h264_qpel_pixels_tab[0][3] = ff_avg_h264_qpel16_mc30_lsx; ++ c->avg_h264_qpel_pixels_tab[0][4] = ff_avg_h264_qpel16_mc01_lsx; ++ c->avg_h264_qpel_pixels_tab[0][5] = ff_avg_h264_qpel16_mc11_lsx; ++ c->avg_h264_qpel_pixels_tab[0][6] = ff_avg_h264_qpel16_mc21_lsx; ++ c->avg_h264_qpel_pixels_tab[0][7] = ff_avg_h264_qpel16_mc31_lsx; ++ c->avg_h264_qpel_pixels_tab[0][8] = ff_avg_h264_qpel16_mc02_lsx; ++ c->avg_h264_qpel_pixels_tab[0][9] = ff_avg_h264_qpel16_mc12_lsx; ++ c->avg_h264_qpel_pixels_tab[0][10] = ff_avg_h264_qpel16_mc22_lsx; ++ c->avg_h264_qpel_pixels_tab[0][11] = ff_avg_h264_qpel16_mc32_lsx; ++ c->avg_h264_qpel_pixels_tab[0][12] = ff_avg_h264_qpel16_mc03_lsx; ++ c->avg_h264_qpel_pixels_tab[0][13] = ff_avg_h264_qpel16_mc13_lsx; ++ c->avg_h264_qpel_pixels_tab[0][14] = ff_avg_h264_qpel16_mc23_lsx; ++ c->avg_h264_qpel_pixels_tab[0][15] = ff_avg_h264_qpel16_mc33_lsx; ++ ++ c->put_h264_qpel_pixels_tab[1][0] = ff_put_h264_qpel8_mc00_lsx; ++ c->put_h264_qpel_pixels_tab[1][1] = ff_put_h264_qpel8_mc10_lsx; ++ c->put_h264_qpel_pixels_tab[1][2] = ff_put_h264_qpel8_mc20_lsx; ++ c->put_h264_qpel_pixels_tab[1][3] = ff_put_h264_qpel8_mc30_lsx; ++ c->put_h264_qpel_pixels_tab[1][4] = ff_put_h264_qpel8_mc01_lsx; ++ c->put_h264_qpel_pixels_tab[1][5] = ff_put_h264_qpel8_mc11_lsx; ++ c->put_h264_qpel_pixels_tab[1][6] = ff_put_h264_qpel8_mc21_lsx; ++ c->put_h264_qpel_pixels_tab[1][7] = ff_put_h264_qpel8_mc31_lsx; ++ c->put_h264_qpel_pixels_tab[1][8] = ff_put_h264_qpel8_mc02_lsx; ++ c->put_h264_qpel_pixels_tab[1][9] = ff_put_h264_qpel8_mc12_lsx; ++ c->put_h264_qpel_pixels_tab[1][10] = ff_put_h264_qpel8_mc22_lsx; ++ c->put_h264_qpel_pixels_tab[1][11] = ff_put_h264_qpel8_mc32_lsx; ++ c->put_h264_qpel_pixels_tab[1][12] = ff_put_h264_qpel8_mc03_lsx; ++ c->put_h264_qpel_pixels_tab[1][13] = ff_put_h264_qpel8_mc13_lsx; ++ c->put_h264_qpel_pixels_tab[1][14] = ff_put_h264_qpel8_mc23_lsx; ++ c->put_h264_qpel_pixels_tab[1][15] = ff_put_h264_qpel8_mc33_lsx; ++ ++ c->avg_h264_qpel_pixels_tab[1][0] = ff_avg_h264_qpel8_mc00_lsx; ++ c->avg_h264_qpel_pixels_tab[1][1] = ff_avg_h264_qpel8_mc10_lsx; ++ c->avg_h264_qpel_pixels_tab[1][2] = ff_avg_h264_qpel8_mc20_lsx; ++ c->avg_h264_qpel_pixels_tab[1][3] = ff_avg_h264_qpel8_mc30_lsx; ++ c->avg_h264_qpel_pixels_tab[1][5] = ff_avg_h264_qpel8_mc11_lsx; ++ c->avg_h264_qpel_pixels_tab[1][6] = ff_avg_h264_qpel8_mc21_lsx; ++ c->avg_h264_qpel_pixels_tab[1][7] = ff_avg_h264_qpel8_mc31_lsx; ++ c->avg_h264_qpel_pixels_tab[1][8] = ff_avg_h264_qpel8_mc02_lsx; ++ c->avg_h264_qpel_pixels_tab[1][9] = ff_avg_h264_qpel8_mc12_lsx; ++ c->avg_h264_qpel_pixels_tab[1][10] = ff_avg_h264_qpel8_mc22_lsx; ++ c->avg_h264_qpel_pixels_tab[1][11] = ff_avg_h264_qpel8_mc32_lsx; ++ c->avg_h264_qpel_pixels_tab[1][13] = ff_avg_h264_qpel8_mc13_lsx; ++ c->avg_h264_qpel_pixels_tab[1][14] = ff_avg_h264_qpel8_mc23_lsx; ++ c->avg_h264_qpel_pixels_tab[1][15] = ff_avg_h264_qpel8_mc33_lsx; ++ } ++ } + if (have_lasx(cpu_flags)) { + if (8 == bit_depth) { + c->put_h264_qpel_pixels_tab[0][0] = ff_put_h264_qpel16_mc00_lasx; +diff --git a/libavcodec/loongarch/h264qpel_lasx.h b/libavcodec/loongarch/h264qpel_lasx.h +index 32b6b50917..c5f23eb649 100644 +--- a/libavcodec/loongarch/h264qpel_lasx.h ++++ b/libavcodec/loongarch/h264qpel_lasx.h +@@ -155,4 +155,5 @@ void ff_avg_h264_qpel8_mc23_lasx(uint8_t *dst, const uint8_t *src, + ptrdiff_t dst_stride); + void ff_avg_h264_qpel8_mc33_lasx(uint8_t *dst, const uint8_t *src, + ptrdiff_t dst_stride); ++ + #endif // #ifndef AVCODEC_LOONGARCH_H264QPEL_LASX_H +diff --git a/libavcodec/loongarch/h264qpel_lsx.c b/libavcodec/loongarch/h264qpel_lsx.c +new file mode 100644 +index 0000000000..c44b09e044 +--- /dev/null ++++ b/libavcodec/loongarch/h264qpel_lsx.c +@@ -0,0 +1,488 @@ ++/* ++ * Loongson LSX optimized h264qpel ++ * ++ * Copyright (c) 2022 Loongson Technology Corporation Limited ++ * Contributed by Hecai Yuan ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "h264qpel_lsx.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" ++#include "libavutil/attributes.h" ++ ++static void put_h264_qpel16_hv_lowpass_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dstStride, ptrdiff_t srcStride) ++{ ++ put_h264_qpel8_hv_lowpass_lsx(dst, src, dstStride, srcStride); ++ put_h264_qpel8_hv_lowpass_lsx(dst + 8, src + 8, dstStride, srcStride); ++ src += srcStride << 3; ++ dst += dstStride << 3; ++ put_h264_qpel8_hv_lowpass_lsx(dst, src, dstStride, srcStride); ++ put_h264_qpel8_hv_lowpass_lsx(dst + 8, src + 8, dstStride, srcStride); ++} ++ ++void ff_put_h264_qpel16_mc22_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ put_h264_qpel16_hv_lowpass_lsx(dst, src, stride, stride); ++} ++ ++static void put_h264_qpel16_h_lowpass_lsx(uint8_t *dst, const uint8_t *src, ++ int dstStride, int srcStride) ++{ ++ put_h264_qpel8_h_lowpass_lsx(dst, src, dstStride, srcStride); ++ put_h264_qpel8_h_lowpass_lsx(dst+8, src+8, dstStride, srcStride); ++ src += srcStride << 3; ++ dst += dstStride << 3; ++ put_h264_qpel8_h_lowpass_lsx(dst, src, dstStride, srcStride); ++ put_h264_qpel8_h_lowpass_lsx(dst+8, src+8, dstStride, srcStride); ++} ++ ++static void put_h264_qpel16_v_lowpass_lsx(uint8_t *dst, const uint8_t *src, ++ int dstStride, int srcStride) ++{ ++ put_h264_qpel8_v_lowpass_lsx(dst, (uint8_t*)src, dstStride, srcStride); ++ put_h264_qpel8_v_lowpass_lsx(dst+8, (uint8_t*)src+8, dstStride, srcStride); ++ src += 8*srcStride; ++ dst += 8*dstStride; ++ put_h264_qpel8_v_lowpass_lsx(dst, (uint8_t*)src, dstStride, srcStride); ++ put_h264_qpel8_v_lowpass_lsx(dst+8, (uint8_t*)src+8, dstStride, srcStride); ++} ++ ++void ff_put_h264_qpel16_mc21_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[512]; ++ uint8_t *const halfH = temp; ++ uint8_t *const halfHV = temp + 256; ++ ++ put_h264_qpel16_h_lowpass_lsx(halfH, src, 16, stride); ++ put_h264_qpel16_hv_lowpass_lsx(halfHV, src, 16, stride); ++ put_pixels16_l2_8_lsx(dst, halfH, halfHV, stride, 16); ++} ++ ++void ff_put_h264_qpel16_mc12_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[512]; ++ uint8_t *const halfHV = temp; ++ uint8_t *const halfH = temp + 256; ++ ++ put_h264_qpel16_hv_lowpass_lsx(halfHV, src, 16, stride); ++ put_h264_qpel16_v_lowpass_lsx(halfH, src, 16, stride); ++ put_pixels16_l2_8_lsx(dst, halfH, halfHV, stride, 16); ++} ++ ++void ff_put_h264_qpel16_mc32_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[512]; ++ uint8_t *const halfHV = temp; ++ uint8_t *const halfH = temp + 256; ++ ++ put_h264_qpel16_hv_lowpass_lsx(halfHV, src, 16, stride); ++ put_h264_qpel16_v_lowpass_lsx(halfH, src + 1, 16, stride); ++ put_pixels16_l2_8_lsx(dst, halfH, halfHV, stride, 16); ++} ++ ++void ff_put_h264_qpel16_mc23_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[512]; ++ uint8_t *const halfH = temp; ++ uint8_t *const halfHV = temp + 256; ++ ++ put_h264_qpel16_h_lowpass_lsx(halfH, src + stride, 16, stride); ++ put_h264_qpel16_hv_lowpass_lsx(halfHV, src, 16, stride); ++ put_pixels16_l2_8_lsx(dst, halfH, halfHV, stride, 16); ++} ++ ++static void avg_h264_qpel16_v_lowpass_lsx(uint8_t *dst, const uint8_t *src, ++ int dstStride, int srcStride) ++{ ++ avg_h264_qpel8_v_lowpass_lsx(dst, (uint8_t*)src, dstStride, srcStride); ++ avg_h264_qpel8_v_lowpass_lsx(dst+8, (uint8_t*)src+8, dstStride, srcStride); ++ src += 8*srcStride; ++ dst += 8*dstStride; ++ avg_h264_qpel8_v_lowpass_lsx(dst, (uint8_t*)src, dstStride, srcStride); ++ avg_h264_qpel8_v_lowpass_lsx(dst+8, (uint8_t*)src+8, dstStride, srcStride); ++} ++ ++void ff_avg_h264_qpel16_mc02_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ avg_h264_qpel16_v_lowpass_lsx(dst, src, stride, stride); ++} ++ ++void ff_avg_h264_qpel16_mc03_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t half[256]; ++ ++ put_h264_qpel16_v_lowpass_lsx(half, src, 16, stride); ++ avg_pixels16_l2_8_lsx(dst, src + stride, half, stride, stride); ++} ++ ++void ff_avg_h264_qpel16_mc23_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[512]; ++ uint8_t *const halfH = temp; ++ uint8_t *const halfHV = temp + 256; ++ ++ put_h264_qpel16_h_lowpass_lsx(halfH, src + stride, 16, stride); ++ put_h264_qpel16_hv_lowpass_lsx(halfHV, src, 16, stride); ++ avg_pixels16_l2_8_lsx(dst, halfH, halfHV, stride, 16); ++} ++ ++void ff_avg_h264_qpel16_mc21_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[512]; ++ uint8_t *const halfH = temp; ++ uint8_t *const halfHV = temp + 256; ++ ++ put_h264_qpel16_h_lowpass_lsx(halfH, src, 16, stride); ++ put_h264_qpel16_hv_lowpass_lsx(halfHV, src, 16, stride); ++ avg_pixels16_l2_8_lsx(dst, halfH, halfHV, stride, 16); ++} ++ ++void ff_avg_h264_qpel16_mc01_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t half[256]; ++ ++ put_h264_qpel16_v_lowpass_lsx(half, src, 16, stride); ++ avg_pixels16_l2_8_lsx(dst, src, half, stride, stride); ++} ++ ++void ff_avg_h264_qpel16_mc32_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[512]; ++ uint8_t *const halfHV = temp; ++ uint8_t *const halfH = temp + 256; ++ ++ put_h264_qpel16_hv_lowpass_lsx(halfHV, src, 16, stride); ++ put_h264_qpel16_v_lowpass_lsx(halfH, src + 1, 16, stride); ++ avg_pixels16_l2_8_lsx(dst, halfH, halfHV, stride, 16); ++} ++ ++void ff_avg_h264_qpel16_mc12_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[512]; ++ uint8_t *const halfHV = temp; ++ uint8_t *const halfH = temp + 256; ++ ++ put_h264_qpel16_hv_lowpass_lsx(halfHV, src, 16, stride); ++ put_h264_qpel16_v_lowpass_lsx(halfH, src, 16, stride); ++ avg_pixels16_l2_8_lsx(dst, halfH, halfHV, stride, 16); ++} ++ ++static void avg_h264_qpel16_hv_lowpass_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dstStride, ptrdiff_t srcStride) ++{ ++ avg_h264_qpel8_hv_lowpass_lsx(dst, src, dstStride, srcStride); ++ avg_h264_qpel8_hv_lowpass_lsx(dst + 8, src + 8, dstStride, srcStride); ++ src += srcStride << 3; ++ dst += dstStride << 3; ++ avg_h264_qpel8_hv_lowpass_lsx(dst, src, dstStride, srcStride); ++ avg_h264_qpel8_hv_lowpass_lsx(dst + 8, src + 8, dstStride, srcStride); ++} ++ ++void ff_avg_h264_qpel16_mc22_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ avg_h264_qpel16_hv_lowpass_lsx(dst, src, stride, stride); ++} ++ ++void ff_put_h264_qpel8_mc03_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t half[64]; ++ ++ put_h264_qpel8_v_lowpass_lsx(half, (uint8_t*)src, 8, stride); ++ put_pixels8_l2_8_lsx(dst, src + stride, half, stride, stride); ++} ++ ++void ff_put_h264_qpel8_mc01_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t half[64]; ++ ++ put_h264_qpel8_v_lowpass_lsx(half, (uint8_t*)src, 8, stride); ++ put_pixels8_l2_8_lsx(dst, src, half, stride, stride); ++} ++ ++void ff_put_h264_qpel8_mc30_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t half[64]; ++ ++ put_h264_qpel8_h_lowpass_lsx(half, src, 8, stride); ++ put_pixels8_l2_8_lsx(dst, src+1, half, stride, stride); ++} ++ ++void ff_put_h264_qpel8_mc10_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t half[64]; ++ ++ put_h264_qpel8_h_lowpass_lsx(half, src, 8, stride); ++ put_pixels8_l2_8_lsx(dst, src, half, stride, stride); ++} ++ ++void ff_put_h264_qpel8_mc33_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t halfH[64]; ++ uint8_t halfV[64]; ++ ++ put_h264_qpel8_h_lowpass_lsx(halfH, src + stride, 8, stride); ++ put_h264_qpel8_v_lowpass_lsx(halfV, (uint8_t*)src + 1, 8, stride); ++ put_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); ++} ++ ++void ff_put_h264_qpel8_mc13_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t halfH[64]; ++ uint8_t halfV[64]; ++ ++ put_h264_qpel8_h_lowpass_lsx(halfH, src + stride, 8, stride); ++ put_h264_qpel8_v_lowpass_lsx(halfV, (uint8_t*)src, 8, stride); ++ put_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); ++} ++ ++void ff_put_h264_qpel8_mc31_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t halfH[64]; ++ uint8_t halfV[64]; ++ ++ put_h264_qpel8_h_lowpass_lsx(halfH, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lsx(halfV, (uint8_t*)src + 1, 8, stride); ++ put_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); ++} ++ ++void ff_put_h264_qpel8_mc11_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t halfH[64]; ++ uint8_t halfV[64]; ++ ++ put_h264_qpel8_h_lowpass_lsx(halfH, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lsx(halfV, (uint8_t*)src, 8, stride); ++ put_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); ++} ++ ++void ff_put_h264_qpel8_mc32_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[128]; ++ uint8_t *const halfHV = temp; ++ uint8_t *const halfH = temp + 64; ++ ++ put_h264_qpel8_hv_lowpass_lsx(halfHV, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lsx(halfH, (uint8_t*)src + 1, 8, stride); ++ put_pixels8_l2_8_lsx(dst, halfH, halfHV, stride, 8); ++} ++ ++void ff_put_h264_qpel8_mc21_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[128]; ++ uint8_t *const halfH = temp; ++ uint8_t *const halfHV = temp + 64; ++ ++ put_h264_qpel8_h_lowpass_lsx(halfH, src, 8, stride); ++ put_h264_qpel8_hv_lowpass_lsx(halfHV, src, 8, stride); ++ put_pixels8_l2_8_lsx(dst, halfH, halfHV, stride, 8); ++} ++ ++void ff_put_h264_qpel8_mc23_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[128]; ++ uint8_t *const halfH = temp; ++ uint8_t *const halfHV = temp + 64; ++ ++ put_h264_qpel8_h_lowpass_lsx(halfH, src + stride, 8, stride); ++ put_h264_qpel8_hv_lowpass_lsx(halfHV, src, 8, stride); ++ put_pixels8_l2_8_lsx(dst, halfH, halfHV, stride, 8); ++} ++ ++void ff_put_h264_qpel8_mc12_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[128]; ++ uint8_t *const halfHV = temp; ++ uint8_t *const halfH = temp + 64; ++ ++ put_h264_qpel8_hv_lowpass_lsx(halfHV, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lsx(halfH, (uint8_t*)src, 8, stride); ++ put_pixels8_l2_8_lsx(dst, halfH, halfHV, stride, 8); ++} ++ ++void ff_put_h264_qpel8_mc02_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ put_h264_qpel8_v_lowpass_lsx(dst, (uint8_t*)src, stride, stride); ++} ++ ++void ff_put_h264_qpel8_mc22_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ put_h264_qpel8_hv_lowpass_lsx(dst, src, stride, stride); ++} ++ ++void ff_put_h264_qpel8_mc20_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ put_h264_qpel8_h_lowpass_lsx(dst, src, stride, stride); ++} ++ ++void ff_avg_h264_qpel8_mc10_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t half[64]; ++ ++ put_h264_qpel8_h_lowpass_lsx(half, src, 8, stride); ++ avg_pixels8_l2_8_lsx(dst, src, half, stride, stride); ++} ++ ++void ff_avg_h264_qpel8_mc20_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ avg_h264_qpel8_h_lowpass_lsx(dst, src, stride, stride); ++} ++ ++void ff_avg_h264_qpel8_mc30_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t half[64]; ++ ++ put_h264_qpel8_h_lowpass_lsx(half, src, 8, stride); ++ avg_pixels8_l2_8_lsx(dst, src+1, half, stride, stride); ++} ++ ++void ff_avg_h264_qpel8_mc11_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t halfH[64]; ++ uint8_t halfV[64]; ++ ++ put_h264_qpel8_h_lowpass_lsx(halfH, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lsx(halfV, (uint8_t*)src, 8, stride); ++ avg_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); ++} ++ ++void ff_avg_h264_qpel8_mc21_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[128]; ++ uint8_t *const halfH = temp; ++ uint8_t *const halfHV = temp + 64; ++ ++ put_h264_qpel8_h_lowpass_lsx(halfH, src, 8, stride); ++ put_h264_qpel8_hv_lowpass_lsx(halfHV, src, 8, stride); ++ avg_pixels8_l2_8_lsx(dst, halfH, halfHV, stride, 8); ++} ++ ++void ff_avg_h264_qpel8_mc31_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t halfH[64]; ++ uint8_t halfV[64]; ++ ++ put_h264_qpel8_h_lowpass_lsx(halfH, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lsx(halfV, (uint8_t*)src + 1, 8, stride); ++ avg_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); ++} ++ ++void ff_avg_h264_qpel8_mc02_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ avg_h264_qpel8_v_lowpass_lsx(dst, (uint8_t*)src, stride, stride); ++} ++ ++void ff_avg_h264_qpel8_mc12_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[128]; ++ uint8_t *const halfHV = temp; ++ uint8_t *const halfH = temp + 64; ++ ++ put_h264_qpel8_hv_lowpass_lsx(halfHV, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lsx(halfH, (uint8_t*)src, 8, stride); ++ avg_pixels8_l2_8_lsx(dst, halfH, halfHV, stride, 8); ++} ++ ++void ff_avg_h264_qpel8_mc22_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ avg_h264_qpel8_hv_lowpass_lsx(dst, src, stride, stride); ++} ++ ++void ff_avg_h264_qpel8_mc32_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[128]; ++ uint8_t *const halfHV = temp; ++ uint8_t *const halfH = temp + 64; ++ ++ put_h264_qpel8_hv_lowpass_lsx(halfHV, src, 8, stride); ++ put_h264_qpel8_v_lowpass_lsx(halfH, (uint8_t*)src + 1, 8, stride); ++ avg_pixels8_l2_8_lsx(dst, halfH, halfHV, stride, 8); ++} ++ ++void ff_avg_h264_qpel8_mc13_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t halfH[64]; ++ uint8_t halfV[64]; ++ ++ put_h264_qpel8_h_lowpass_lsx(halfH, src + stride, 8, stride); ++ put_h264_qpel8_v_lowpass_lsx(halfV, (uint8_t*)src, 8, stride); ++ avg_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); ++} ++ ++void ff_avg_h264_qpel8_mc23_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t temp[128]; ++ uint8_t *const halfH = temp; ++ uint8_t *const halfHV = temp + 64; ++ ++ put_h264_qpel8_h_lowpass_lsx(halfH, src + stride, 8, stride); ++ put_h264_qpel8_hv_lowpass_lsx(halfHV, src, 8, stride); ++ avg_pixels8_l2_8_lsx(dst, halfH, halfHV, stride, 8); ++} ++ ++void ff_avg_h264_qpel8_mc33_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride) ++{ ++ uint8_t halfH[64]; ++ uint8_t halfV[64]; ++ ++ put_h264_qpel8_h_lowpass_lsx(halfH, src + stride, 8, stride); ++ put_h264_qpel8_v_lowpass_lsx(halfV, (uint8_t*)src + 1, 8, stride); ++ avg_pixels8_l2_8_lsx(dst, halfH, halfV, stride, 8); ++} ++ +diff --git a/libavcodec/loongarch/h264qpel_lsx.h b/libavcodec/loongarch/h264qpel_lsx.h +new file mode 100644 +index 0000000000..34056f0e76 +--- /dev/null ++++ b/libavcodec/loongarch/h264qpel_lsx.h +@@ -0,0 +1,178 @@ ++/* ++ * Copyright (c) 2022 Loongson Technology Corporation Limited ++ * Contributed by Hecai Yuan ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef AVCODEC_LOONGARCH_H264QPEL_LSX_H ++#define AVCODEC_LOONGARCH_H264QPEL_LSX_H ++ ++#include ++#include ++#include "libavcodec/h264.h" ++ ++void put_h264_qpel8_hv_lowpass_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dstStride, ptrdiff_t srcStride); ++void put_h264_qpel8_h_lowpass_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dstStride, ptrdiff_t srcStride); ++void put_h264_qpel8_v_lowpass_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dstStride, ptrdiff_t srcStride); ++void put_pixels16_l2_8_lsx(uint8_t *dst, const uint8_t *src, uint8_t *half, ++ ptrdiff_t dstStride, ptrdiff_t srcStride); ++void put_pixels8_l2_8_lsx(uint8_t *dst, const uint8_t *src, const uint8_t *half, ++ ptrdiff_t dstStride, ptrdiff_t srcStride); ++ ++void avg_h264_qpel8_h_lowpass_lsx(uint8_t *dst, const uint8_t *src, int dstStride, ++ int srcStride); ++void avg_h264_qpel8_v_lowpass_lsx(uint8_t *dst, uint8_t *src, int dstStride, ++ int srcStride); ++void avg_pixels16_l2_8_lsx(uint8_t *dst, const uint8_t *src, uint8_t *half, ++ ptrdiff_t dstStride, ptrdiff_t srcStride); ++void avg_h264_qpel8_hv_lowpass_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dstStride, ptrdiff_t srcStride); ++void avg_pixels8_l2_8_lsx(uint8_t *dst, const uint8_t *src, const uint8_t *half, ++ ptrdiff_t dstStride, ptrdiff_t srcStride); ++ ++void ff_put_h264_qpel16_mc00_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc10_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc20_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc30_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc01_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc11_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc13_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc31_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc33_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc03_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc02_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc22_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_put_h264_qpel16_mc21_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel16_mc12_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel16_mc32_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel16_mc23_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++ ++void ff_avg_h264_qpel16_mc00_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc10_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc30_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc33_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc11_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc31_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc13_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc20_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t dst_stride); ++void ff_avg_h264_qpel16_mc02_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_avg_h264_qpel16_mc03_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_avg_h264_qpel16_mc23_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_avg_h264_qpel16_mc21_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_avg_h264_qpel16_mc01_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_avg_h264_qpel16_mc32_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_avg_h264_qpel16_mc12_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_avg_h264_qpel16_mc22_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++ ++void ff_put_h264_qpel8_mc03_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc00_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc01_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc30_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc10_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc33_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc13_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc31_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc11_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc32_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc21_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc23_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc12_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc02_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc22_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_put_h264_qpel8_mc20_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++ ++void ff_avg_h264_qpel8_mc00_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_avg_h264_qpel8_mc10_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_avg_h264_qpel8_mc20_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_avg_h264_qpel8_mc30_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_avg_h264_qpel8_mc11_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_avg_h264_qpel8_mc21_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_avg_h264_qpel8_mc31_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_avg_h264_qpel8_mc02_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_avg_h264_qpel8_mc12_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_avg_h264_qpel8_mc22_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_avg_h264_qpel8_mc32_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_avg_h264_qpel8_mc13_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_avg_h264_qpel8_mc23_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++void ff_avg_h264_qpel8_mc33_lsx(uint8_t *dst, const uint8_t *src, ++ ptrdiff_t stride); ++#endif // #ifndef AVCODEC_LOONGARCH_H264QPEL_LSX_H +diff --git a/libavcodec/loongarch/loongson_asm.S b/libavcodec/loongarch/loongson_asm.S +new file mode 100644 +index 0000000000..767c7c0bb7 +--- /dev/null ++++ b/libavcodec/loongarch/loongson_asm.S +@@ -0,0 +1,946 @@ ++/* ++ * Loongson asm helper. ++ * ++ * Copyright (c) 2022 Loongson Technology Corporation Limited ++ * Contributed by Gu Xiwei(guxiwei-hf@loongson.cn) ++ * Shiyou Yin(yinshiyou-hf@loongson.cn) ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++/** ++ * MAJOR version: Macro usage changes. ++ * MINOR version: Add new functions, or bug fixes. ++ * MICRO version: Comment changes or implementation changes. ++ */ ++#define LML_VERSION_MAJOR 0 ++#define LML_VERSION_MINOR 2 ++#define LML_VERSION_MICRO 0 ++ ++/* ++ *============================================================================ ++ * macros for specific projetc, set them as needed. ++ * Following LoongML macros for your reference. ++ *============================================================================ ++ */ ++#define ASM_PREF ++#define DEFAULT_ALIGN 5 ++ ++.macro function name, align=DEFAULT_ALIGN ++.macro endfunc ++ jirl $r0, $r1, 0x0 ++ .size ASM_PREF\name, . - ASM_PREF\name ++ .purgem endfunc ++.endm ++.text ; ++.align \align ; ++.globl ASM_PREF\name ; ++.type ASM_PREF\name, @function ; ++ASM_PREF\name: ; ++.endm ++ ++/** ++ * Attention: If align is not zero, the macro will use ++ * t7 until the end of function ++ */ ++.macro alloc_stack size, align=0 ++.if \align ++ .macro clean_stack ++ add.d sp, sp, t7 ++ .endm ++ addi.d sp, sp, - \size ++ andi.d t7, sp, \align - 1 ++ sub.d sp, sp, t7 ++ addi.d t7, t7, \size ++.else ++ .macro clean_stack ++ addi.d sp, sp, \size ++ .endm ++ addi.d sp, sp, - \size ++.endif ++.endm ++ ++.macro const name, align=DEFAULT_ALIGN ++ .macro endconst ++ .size \name, . - \name ++ .purgem endconst ++ .endm ++.section .rodata ++.align \align ++\name: ++.endm ++ ++/* ++ *============================================================================ ++ * LoongArch register alias ++ *============================================================================ ++ */ ++ ++#define a0 $a0 ++#define a1 $a1 ++#define a2 $a2 ++#define a3 $a3 ++#define a4 $a4 ++#define a5 $a5 ++#define a6 $a6 ++#define a7 $a7 ++ ++#define t0 $t0 ++#define t1 $t1 ++#define t2 $t2 ++#define t3 $t3 ++#define t4 $t4 ++#define t5 $t5 ++#define t6 $t6 ++#define t7 $t7 ++#define t8 $t8 ++ ++#define s0 $s0 ++#define s1 $s1 ++#define s2 $s2 ++#define s3 $s3 ++#define s4 $s4 ++#define s5 $s5 ++#define s6 $s6 ++#define s7 $s7 ++#define s8 $s8 ++ ++#define zero $zero ++#define sp $sp ++#define ra $ra ++ ++#define f0 $f0 ++#define f1 $f1 ++#define f2 $f2 ++#define f3 $f3 ++#define f4 $f4 ++#define f5 $f5 ++#define f6 $f6 ++#define f7 $f7 ++#define f8 $f8 ++#define f9 $f9 ++#define f10 $f10 ++#define f11 $f11 ++#define f12 $f12 ++#define f13 $f13 ++#define f14 $f14 ++#define f15 $f15 ++#define f16 $f16 ++#define f17 $f17 ++#define f18 $f18 ++#define f19 $f19 ++#define f20 $f20 ++#define f21 $f21 ++#define f22 $f22 ++#define f23 $f23 ++#define f24 $f24 ++#define f25 $f25 ++#define f26 $f26 ++#define f27 $f27 ++#define f28 $f28 ++#define f29 $f29 ++#define f30 $f30 ++#define f31 $f31 ++ ++#define vr0 $vr0 ++#define vr1 $vr1 ++#define vr2 $vr2 ++#define vr3 $vr3 ++#define vr4 $vr4 ++#define vr5 $vr5 ++#define vr6 $vr6 ++#define vr7 $vr7 ++#define vr8 $vr8 ++#define vr9 $vr9 ++#define vr10 $vr10 ++#define vr11 $vr11 ++#define vr12 $vr12 ++#define vr13 $vr13 ++#define vr14 $vr14 ++#define vr15 $vr15 ++#define vr16 $vr16 ++#define vr17 $vr17 ++#define vr18 $vr18 ++#define vr19 $vr19 ++#define vr20 $vr20 ++#define vr21 $vr21 ++#define vr22 $vr22 ++#define vr23 $vr23 ++#define vr24 $vr24 ++#define vr25 $vr25 ++#define vr26 $vr26 ++#define vr27 $vr27 ++#define vr28 $vr28 ++#define vr29 $vr29 ++#define vr30 $vr30 ++#define vr31 $vr31 ++ ++#define xr0 $xr0 ++#define xr1 $xr1 ++#define xr2 $xr2 ++#define xr3 $xr3 ++#define xr4 $xr4 ++#define xr5 $xr5 ++#define xr6 $xr6 ++#define xr7 $xr7 ++#define xr8 $xr8 ++#define xr9 $xr9 ++#define xr10 $xr10 ++#define xr11 $xr11 ++#define xr12 $xr12 ++#define xr13 $xr13 ++#define xr14 $xr14 ++#define xr15 $xr15 ++#define xr16 $xr16 ++#define xr17 $xr17 ++#define xr18 $xr18 ++#define xr19 $xr19 ++#define xr20 $xr20 ++#define xr21 $xr21 ++#define xr22 $xr22 ++#define xr23 $xr23 ++#define xr24 $xr24 ++#define xr25 $xr25 ++#define xr26 $xr26 ++#define xr27 $xr27 ++#define xr28 $xr28 ++#define xr29 $xr29 ++#define xr30 $xr30 ++#define xr31 $xr31 ++ ++/* ++ *============================================================================ ++ * LSX/LASX synthesize instructions ++ *============================================================================ ++ */ ++ ++/* ++ * Description : Dot product of byte vector elements ++ * Arguments : Inputs - vj, vk ++ * Outputs - vd ++ * Return Type - halfword ++ */ ++.macro vdp2.h.bu vd, vj, vk ++ vmulwev.h.bu \vd, \vj, \vk ++ vmaddwod.h.bu \vd, \vj, \vk ++.endm ++ ++.macro vdp2.h.bu.b vd, vj, vk ++ vmulwev.h.bu.b \vd, \vj, \vk ++ vmaddwod.h.bu.b \vd, \vj, \vk ++.endm ++ ++.macro vdp2.w.h vd, vj, vk ++ vmulwev.w.h \vd, \vj, \vk ++ vmaddwod.w.h \vd, \vj, \vk ++.endm ++ ++.macro xvdp2.h.bu xd, xj, xk ++ xvmulwev.h.bu \xd, \xj, \xk ++ xvmaddwod.h.bu \xd, \xj, \xk ++.endm ++ ++.macro xvdp2.h.bu.b xd, xj, xk ++ xvmulwev.h.bu.b \xd, \xj, \xk ++ xvmaddwod.h.bu.b \xd, \xj, \xk ++.endm ++ ++.macro xvdp2.w.h xd, xj, xk ++ xvmulwev.w.h \xd, \xj, \xk ++ xvmaddwod.w.h \xd, \xj, \xk ++.endm ++ ++/* ++ * Description : Dot product & addition of halfword vector elements ++ * Arguments : Inputs - vj, vk ++ * Outputs - vd ++ * Return Type - twice size of input ++ */ ++.macro vdp2add.h.bu vd, vj, vk ++ vmaddwev.h.bu \vd, \vj, \vk ++ vmaddwod.h.bu \vd, \vj, \vk ++.endm ++ ++.macro vdp2add.h.bu.b vd, vj, vk ++ vmaddwev.h.bu.b \vd, \vj, \vk ++ vmaddwod.h.bu.b \vd, \vj, \vk ++.endm ++ ++.macro vdp2add.w.h vd, vj, vk ++ vmaddwev.w.h \vd, \vj, \vk ++ vmaddwod.w.h \vd, \vj, \vk ++.endm ++ ++.macro xvdp2add.h.bu.b xd, xj, xk ++ xvmaddwev.h.bu.b \xd, \xj, \xk ++ xvmaddwod.h.bu.b \xd, \xj, \xk ++.endm ++ ++.macro xvdp2add.w.h xd, xj, xk ++ xvmaddwev.w.h \xd, \xj, \xk ++ xvmaddwod.w.h \xd, \xj, \xk ++.endm ++ ++/* ++ * Description : Range each element of vector ++ * clip: vj > vk ? vj : vk && vj < va ? vj : va ++ * clip255: vj < 255 ? vj : 255 && vj > 0 ? vj : 0 ++ */ ++.macro vclip.h vd, vj, vk, va ++ vmax.h \vd, \vj, \vk ++ vmin.h \vd, \vd, \va ++.endm ++ ++.macro vclip255.w vd, vj ++ vmaxi.w \vd, \vj, 0 ++ vsat.wu \vd, \vd, 7 ++.endm ++ ++.macro vclip255.h vd, vj ++ vmaxi.h \vd, \vj, 0 ++ vsat.hu \vd, \vd, 7 ++.endm ++ ++.macro xvclip.h xd, xj, xk, xa ++ xvmax.h \xd, \xj, \xk ++ xvmin.h \xd, \xd, \xa ++.endm ++ ++.macro xvclip255.h xd, xj ++ xvmaxi.h \xd, \xj, 0 ++ xvsat.hu \xd, \xd, 7 ++.endm ++ ++.macro xvclip255.w xd, xj ++ xvmaxi.w \xd, \xj, 0 ++ xvsat.wu \xd, \xd, 7 ++.endm ++ ++/* ++ * Description : Store elements of vector ++ * vd : Data vector to be stroed ++ * rk : Address of data storage ++ * ra : Offset of address ++ * si : Index of data in vd ++ */ ++.macro vstelmx.b vd, rk, ra, si ++ add.d \rk, \rk, \ra ++ vstelm.b \vd, \rk, 0, \si ++.endm ++ ++.macro vstelmx.h vd, rk, ra, si ++ add.d \rk, \rk, \ra ++ vstelm.h \vd, \rk, 0, \si ++.endm ++ ++.macro vstelmx.w vd, rk, ra, si ++ add.d \rk, \rk, \ra ++ vstelm.w \vd, \rk, 0, \si ++.endm ++ ++.macro vstelmx.d vd, rk, ra, si ++ add.d \rk, \rk, \ra ++ vstelm.d \vd, \rk, 0, \si ++.endm ++ ++.macro vmov xd, xj ++ vor.v \xd, \xj, \xj ++.endm ++ ++.macro xmov xd, xj ++ xvor.v \xd, \xj, \xj ++.endm ++ ++.macro xvstelmx.d xd, rk, ra, si ++ add.d \rk, \rk, \ra ++ xvstelm.d \xd, \rk, 0, \si ++.endm ++ ++/* ++ *============================================================================ ++ * LSX/LASX custom macros ++ *============================================================================ ++ */ ++ ++/* ++ * Load 4 float, double, V128, v256 elements with stride. ++ */ ++.macro FLDS_LOADX_4 src, stride, stride2, stride3, out0, out1, out2, out3 ++ fld.s \out0, \src, 0 ++ fldx.s \out1, \src, \stride ++ fldx.s \out2, \src, \stride2 ++ fldx.s \out3, \src, \stride3 ++.endm ++ ++.macro FLDD_LOADX_4 src, stride, stride2, stride3, out0, out1, out2, out3 ++ fld.d \out0, \src, 0 ++ fldx.d \out1, \src, \stride ++ fldx.d \out2, \src, \stride2 ++ fldx.d \out3, \src, \stride3 ++.endm ++ ++.macro LSX_LOADX_4 src, stride, stride2, stride3, out0, out1, out2, out3 ++ vld \out0, \src, 0 ++ vldx \out1, \src, \stride ++ vldx \out2, \src, \stride2 ++ vldx \out3, \src, \stride3 ++.endm ++ ++.macro LASX_LOADX_4 src, stride, stride2, stride3, out0, out1, out2, out3 ++ xvld \out0, \src, 0 ++ xvldx \out1, \src, \stride ++ xvldx \out2, \src, \stride2 ++ xvldx \out3, \src, \stride3 ++.endm ++ ++/* ++ * Description : Transpose 4x4 block with half-word elements in vectors ++ * Arguments : Inputs - in0, in1, in2, in3 ++ * Outputs - out0, out1, out2, out3 ++ */ ++.macro LSX_TRANSPOSE4x4_H in0, in1, in2, in3, out0, out1, out2, out3, \ ++ tmp0, tmp1 ++ vilvl.h \tmp0, \in1, \in0 ++ vilvl.h \tmp1, \in3, \in2 ++ vilvl.w \out0, \tmp1, \tmp0 ++ vilvh.w \out2, \tmp1, \tmp0 ++ vilvh.d \out1, \out0, \out0 ++ vilvh.d \out3, \out0, \out2 ++.endm ++ ++/* ++ * Description : Transpose 4x4 block with word elements in vectors ++ * Arguments : Inputs - in0, in1, in2, in3 ++ * Outputs - out0, out1, out2, out3 ++ * Details : ++ * Example : ++ * 1, 2, 3, 4 1, 5, 9,13 ++ * 5, 6, 7, 8 to 2, 6,10,14 ++ * 9,10,11,12 =====> 3, 7,11,15 ++ * 13,14,15,16 4, 8,12,16 ++ */ ++.macro LSX_TRANSPOSE4x4_W _in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3, \ ++ _tmp0, _tmp1 ++ ++ vilvl.w \_tmp0, \_in1, \_in0 ++ vilvh.w \_out1, \_in1, \_in0 ++ vilvl.w \_tmp1, \_in3, \_in2 ++ vilvh.w \_out3, \_in3, \_in2 ++ ++ vilvl.d \_out0, \_tmp1, \_tmp0 ++ vilvl.d \_out2, \_out3, \_out1 ++ vilvh.d \_out3, \_out3, \_out1 ++ vilvh.d \_out1, \_tmp1, \_tmp0 ++.endm ++ ++/* ++ * Description : Transpose 8x8 block with half-word elements in vectors ++ * Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7 ++ * Outputs - out0, out1, out2, out3, out4, out5, out6, out7 ++ */ ++.macro LSX_TRANSPOSE8x8_H in0, in1, in2, in3, in4, in5, in6, in7, out0, out1, \ ++ out2, out3, out4, out5, out6, out7, tmp0, tmp1, tmp2, \ ++ tmp3, tmp4, tmp5, tmp6, tmp7 ++ vilvl.h \tmp0, \in6, \in4 ++ vilvl.h \tmp1, \in7, \in5 ++ vilvl.h \tmp2, \in2, \in0 ++ vilvl.h \tmp3, \in3, \in1 ++ ++ vilvl.h \tmp4, \tmp1, \tmp0 ++ vilvh.h \tmp5, \tmp1, \tmp0 ++ vilvl.h \tmp6, \tmp3, \tmp2 ++ vilvh.h \tmp7, \tmp3, \tmp2 ++ ++ vilvh.h \tmp0, \in6, \in4 ++ vilvh.h \tmp1, \in7, \in5 ++ vilvh.h \tmp2, \in2, \in0 ++ vilvh.h \tmp3, \in3, \in1 ++ ++ vpickev.d \out0, \tmp4, \tmp6 ++ vpickod.d \out1, \tmp4, \tmp6 ++ vpickev.d \out2, \tmp5, \tmp7 ++ vpickod.d \out3, \tmp5, \tmp7 ++ ++ vilvl.h \tmp4, \tmp1, \tmp0 ++ vilvh.h \tmp5, \tmp1, \tmp0 ++ vilvl.h \tmp6, \tmp3, \tmp2 ++ vilvh.h \tmp7, \tmp3, \tmp2 ++ ++ vpickev.d \out4, \tmp4, \tmp6 ++ vpickod.d \out5, \tmp4, \tmp6 ++ vpickev.d \out6, \tmp5, \tmp7 ++ vpickod.d \out7, \tmp5, \tmp7 ++.endm ++ ++/* ++ * Description : Transpose 16x8 block with byte elements in vectors ++ * Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7 ++ * Outputs - out0, out1, out2, out3, out4, out5, out6, out7 ++ */ ++.macro LASX_TRANSPOSE16X8_B in0, in1, in2, in3, in4, in5, in6, in7, \ ++ in8, in9, in10, in11, in12, in13, in14, in15, \ ++ out0, out1, out2, out3, out4, out5, out6, out7,\ ++ tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7 ++ xvilvl.b \tmp0, \in2, \in0 ++ xvilvl.b \tmp1, \in3, \in1 ++ xvilvl.b \tmp2, \in6, \in4 ++ xvilvl.b \tmp3, \in7, \in5 ++ xvilvl.b \tmp4, \in10, \in8 ++ xvilvl.b \tmp5, \in11, \in9 ++ xvilvl.b \tmp6, \in14, \in12 ++ xvilvl.b \tmp7, \in15, \in13 ++ xvilvl.b \out0, \tmp1, \tmp0 ++ xvilvh.b \out1, \tmp1, \tmp0 ++ xvilvl.b \out2, \tmp3, \tmp2 ++ xvilvh.b \out3, \tmp3, \tmp2 ++ xvilvl.b \out4, \tmp5, \tmp4 ++ xvilvh.b \out5, \tmp5, \tmp4 ++ xvilvl.b \out6, \tmp7, \tmp6 ++ xvilvh.b \out7, \tmp7, \tmp6 ++ xvilvl.w \tmp0, \out2, \out0 ++ xvilvh.w \tmp2, \out2, \out0 ++ xvilvl.w \tmp4, \out3, \out1 ++ xvilvh.w \tmp6, \out3, \out1 ++ xvilvl.w \tmp1, \out6, \out4 ++ xvilvh.w \tmp3, \out6, \out4 ++ xvilvl.w \tmp5, \out7, \out5 ++ xvilvh.w \tmp7, \out7, \out5 ++ xvilvl.d \out0, \tmp1, \tmp0 ++ xvilvh.d \out1, \tmp1, \tmp0 ++ xvilvl.d \out2, \tmp3, \tmp2 ++ xvilvh.d \out3, \tmp3, \tmp2 ++ xvilvl.d \out4, \tmp5, \tmp4 ++ xvilvh.d \out5, \tmp5, \tmp4 ++ xvilvl.d \out6, \tmp7, \tmp6 ++ xvilvh.d \out7, \tmp7, \tmp6 ++.endm ++ ++/* ++ * Description : Transpose 16x8 block with byte elements in vectors ++ * Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7 ++ * Outputs - out0, out1, out2, out3, out4, out5, out6, out7 ++ */ ++.macro LSX_TRANSPOSE16X8_B in0, in1, in2, in3, in4, in5, in6, in7, \ ++ in8, in9, in10, in11, in12, in13, in14, in15, \ ++ out0, out1, out2, out3, out4, out5, out6, out7,\ ++ tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7 ++ vilvl.b \tmp0, \in2, \in0 ++ vilvl.b \tmp1, \in3, \in1 ++ vilvl.b \tmp2, \in6, \in4 ++ vilvl.b \tmp3, \in7, \in5 ++ vilvl.b \tmp4, \in10, \in8 ++ vilvl.b \tmp5, \in11, \in9 ++ vilvl.b \tmp6, \in14, \in12 ++ vilvl.b \tmp7, \in15, \in13 ++ ++ vilvl.b \out0, \tmp1, \tmp0 ++ vilvh.b \out1, \tmp1, \tmp0 ++ vilvl.b \out2, \tmp3, \tmp2 ++ vilvh.b \out3, \tmp3, \tmp2 ++ vilvl.b \out4, \tmp5, \tmp4 ++ vilvh.b \out5, \tmp5, \tmp4 ++ vilvl.b \out6, \tmp7, \tmp6 ++ vilvh.b \out7, \tmp7, \tmp6 ++ vilvl.w \tmp0, \out2, \out0 ++ vilvh.w \tmp2, \out2, \out0 ++ vilvl.w \tmp4, \out3, \out1 ++ vilvh.w \tmp6, \out3, \out1 ++ vilvl.w \tmp1, \out6, \out4 ++ vilvh.w \tmp3, \out6, \out4 ++ vilvl.w \tmp5, \out7, \out5 ++ vilvh.w \tmp7, \out7, \out5 ++ vilvl.d \out0, \tmp1, \tmp0 ++ vilvh.d \out1, \tmp1, \tmp0 ++ vilvl.d \out2, \tmp3, \tmp2 ++ vilvh.d \out3, \tmp3, \tmp2 ++ vilvl.d \out4, \tmp5, \tmp4 ++ vilvh.d \out5, \tmp5, \tmp4 ++ vilvl.d \out6, \tmp7, \tmp6 ++ vilvh.d \out7, \tmp7, \tmp6 ++.endm ++ ++/* ++ * Description : Transpose 4x4 block with half-word elements in vectors ++ * Arguments : Inputs - in0, in1, in2, in3 ++ * Outputs - out0, out1, out2, out3 ++ */ ++.macro LASX_TRANSPOSE4x4_H in0, in1, in2, in3, out0, out1, out2, out3, \ ++ tmp0, tmp1 ++ xvilvl.h \tmp0, \in1, \in0 ++ xvilvl.h \tmp1, \in3, \in2 ++ xvilvl.w \out0, \tmp1, \tmp0 ++ xvilvh.w \out2, \tmp1, \tmp0 ++ xvilvh.d \out1, \out0, \out0 ++ xvilvh.d \out3, \out0, \out2 ++.endm ++ ++/* ++ * Description : Transpose 4x8 block with half-word elements in vectors ++ * Arguments : Inputs - in0, in1, in2, in3 ++ * Outputs - out0, out1, out2, out3 ++ */ ++.macro LASX_TRANSPOSE4x8_H in0, in1, in2, in3, out0, out1, out2, out3, \ ++ tmp0, tmp1 ++ xvilvl.h \tmp0, \in2, \in0 ++ xvilvl.h \tmp1, \in3, \in1 ++ xvilvl.h \out2, \tmp1, \tmp0 ++ xvilvh.h \out3, \tmp1, \tmp0 ++ ++ xvilvl.d \out0, \out2, \out2 ++ xvilvh.d \out1, \out2, \out2 ++ xvilvl.d \out2, \out3, \out3 ++ xvilvh.d \out3, \out3, \out3 ++.endm ++ ++/* ++ * Description : Transpose 8x8 block with half-word elements in vectors ++ * Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7 ++ * Outputs - out0, out1, out2, out3, out4, out5, out6, out7 ++ */ ++.macro LASX_TRANSPOSE8x8_H in0, in1, in2, in3, in4, in5, in6, in7, \ ++ out0, out1, out2, out3, out4, out5, out6, out7, \ ++ tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7 ++ xvilvl.h \tmp0, \in6, \in4 ++ xvilvl.h \tmp1, \in7, \in5 ++ xvilvl.h \tmp2, \in2, \in0 ++ xvilvl.h \tmp3, \in3, \in1 ++ ++ xvilvl.h \tmp4, \tmp1, \tmp0 ++ xvilvh.h \tmp5, \tmp1, \tmp0 ++ xvilvl.h \tmp6, \tmp3, \tmp2 ++ xvilvh.h \tmp7, \tmp3, \tmp2 ++ ++ xvilvh.h \tmp0, \in6, \in4 ++ xvilvh.h \tmp1, \in7, \in5 ++ xvilvh.h \tmp2, \in2, \in0 ++ xvilvh.h \tmp3, \in3, \in1 ++ ++ xvpickev.d \out0, \tmp4, \tmp6 ++ xvpickod.d \out1, \tmp4, \tmp6 ++ xvpickev.d \out2, \tmp5, \tmp7 ++ xvpickod.d \out3, \tmp5, \tmp7 ++ ++ xvilvl.h \tmp4, \tmp1, \tmp0 ++ xvilvh.h \tmp5, \tmp1, \tmp0 ++ xvilvl.h \tmp6, \tmp3, \tmp2 ++ xvilvh.h \tmp7, \tmp3, \tmp2 ++ ++ xvpickev.d \out4, \tmp4, \tmp6 ++ xvpickod.d \out5, \tmp4, \tmp6 ++ xvpickev.d \out6, \tmp5, \tmp7 ++ xvpickod.d \out7, \tmp5, \tmp7 ++.endm ++ ++/* ++ * Description : Transpose 2x4x4 block with half-word elements in vectors ++ * Arguments : Inputs - in0, in1, in2, in3 ++ * Outputs - out0, out1, out2, out3 ++ */ ++.macro LASX_TRANSPOSE2x4x4_H in0, in1, in2, in3, out0, out1, out2, out3, \ ++ tmp0, tmp1, tmp2 ++ xvilvh.h \tmp1, \in0, \in1 ++ xvilvl.h \out1, \in0, \in1 ++ xvilvh.h \tmp0, \in2, \in3 ++ xvilvl.h \out3, \in2, \in3 ++ ++ xvilvh.w \tmp2, \out3, \out1 ++ xvilvl.w \out3, \out3, \out1 ++ ++ xvilvl.w \out2, \tmp0, \tmp1 ++ xvilvh.w \tmp1, \tmp0, \tmp1 ++ ++ xvilvh.d \out0, \out2, \out3 ++ xvilvl.d \out2, \out2, \out3 ++ xvilvh.d \out1, \tmp1, \tmp2 ++ xvilvl.d \out3, \tmp1, \tmp2 ++.endm ++ ++/* ++ * Description : Transpose 4x4 block with word elements in vectors ++ * Arguments : Inputs - in0, in1, in2, in3 ++ * Outputs - out0, out1, out2, out3 ++ * Details : ++ * Example : ++ * 1, 2, 3, 4, 1, 2, 3, 4 1,5, 9,13, 1,5, 9,13 ++ * 5, 6, 7, 8, 5, 6, 7, 8 to 2,6,10,14, 2,6,10,14 ++ * 9,10,11,12, 9,10,11,12 =====> 3,7,11,15, 3,7,11,15 ++ * 13,14,15,16, 13,14,15,16 4,8,12,16, 4,8,12,16 ++ */ ++.macro LASX_TRANSPOSE4x4_W _in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3, \ ++ _tmp0, _tmp1 ++ ++ xvilvl.w \_tmp0, \_in1, \_in0 ++ xvilvh.w \_out1, \_in1, \_in0 ++ xvilvl.w \_tmp1, \_in3, \_in2 ++ xvilvh.w \_out3, \_in3, \_in2 ++ ++ xvilvl.d \_out0, \_tmp1, \_tmp0 ++ xvilvl.d \_out2, \_out3, \_out1 ++ xvilvh.d \_out3, \_out3, \_out1 ++ xvilvh.d \_out1, \_tmp1, \_tmp0 ++.endm ++ ++/* ++ * Description : Transpose 8x8 block with word elements in vectors ++ * Arguments : Inputs - _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7 ++ * Outputs - _out0, _out1, _out2, _out3, _out4, _out5, _out6, ++ * _out7 ++ * Example : LASX_TRANSPOSE8x8_W ++ * _in0 : 1,2,3,4,5,6,7,8 ++ * _in1 : 2,2,3,4,5,6,7,8 ++ * _in2 : 3,2,3,4,5,6,7,8 ++ * _in3 : 4,2,3,4,5,6,7,8 ++ * _in4 : 5,2,3,4,5,6,7,8 ++ * _in5 : 6,2,3,4,5,6,7,8 ++ * _in6 : 7,2,3,4,5,6,7,8 ++ * _in7 : 8,2,3,4,5,6,7,8 ++ * ++ * _out0 : 1,2,3,4,5,6,7,8 ++ * _out1 : 2,2,2,2,2,2,2,2 ++ * _out2 : 3,3,3,3,3,3,3,3 ++ * _out3 : 4,4,4,4,4,4,4,4 ++ * _out4 : 5,5,5,5,5,5,5,5 ++ * _out5 : 6,6,6,6,6,6,6,6 ++ * _out6 : 7,7,7,7,7,7,7,7 ++ * _out7 : 8,8,8,8,8,8,8,8 ++ */ ++.macro LASX_TRANSPOSE8x8_W _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7,\ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7,\ ++ _tmp0, _tmp1, _tmp2, _tmp3 ++ xvilvl.w \_tmp0, \_in2, \_in0 ++ xvilvl.w \_tmp1, \_in3, \_in1 ++ xvilvh.w \_tmp2, \_in2, \_in0 ++ xvilvh.w \_tmp3, \_in3, \_in1 ++ xvilvl.w \_out0, \_tmp1, \_tmp0 ++ xvilvh.w \_out1, \_tmp1, \_tmp0 ++ xvilvl.w \_out2, \_tmp3, \_tmp2 ++ xvilvh.w \_out3, \_tmp3, \_tmp2 ++ ++ xvilvl.w \_tmp0, \_in6, \_in4 ++ xvilvl.w \_tmp1, \_in7, \_in5 ++ xvilvh.w \_tmp2, \_in6, \_in4 ++ xvilvh.w \_tmp3, \_in7, \_in5 ++ xvilvl.w \_out4, \_tmp1, \_tmp0 ++ xvilvh.w \_out5, \_tmp1, \_tmp0 ++ xvilvl.w \_out6, \_tmp3, \_tmp2 ++ xvilvh.w \_out7, \_tmp3, \_tmp2 ++ ++ xmov \_tmp0, \_out0 ++ xmov \_tmp1, \_out1 ++ xmov \_tmp2, \_out2 ++ xmov \_tmp3, \_out3 ++ xvpermi.q \_out0, \_out4, 0x02 ++ xvpermi.q \_out1, \_out5, 0x02 ++ xvpermi.q \_out2, \_out6, 0x02 ++ xvpermi.q \_out3, \_out7, 0x02 ++ xvpermi.q \_out4, \_tmp0, 0x31 ++ xvpermi.q \_out5, \_tmp1, 0x31 ++ xvpermi.q \_out6, \_tmp2, 0x31 ++ xvpermi.q \_out7, \_tmp3, 0x31 ++.endm ++ ++/* ++ * Description : Transpose 4x4 block with double-word elements in vectors ++ * Arguments : Inputs - _in0, _in1, _in2, _in3 ++ * Outputs - _out0, _out1, _out2, _out3 ++ * Example : LASX_TRANSPOSE4x4_D ++ * _in0 : 1,2,3,4 ++ * _in1 : 1,2,3,4 ++ * _in2 : 1,2,3,4 ++ * _in3 : 1,2,3,4 ++ * ++ * _out0 : 1,1,1,1 ++ * _out1 : 2,2,2,2 ++ * _out2 : 3,3,3,3 ++ * _out3 : 4,4,4,4 ++ */ ++.macro LASX_TRANSPOSE4x4_D _in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3, \ ++ _tmp0, _tmp1 ++ xvilvl.d \_tmp0, \_in1, \_in0 ++ xvilvh.d \_out1, \_in1, \_in0 ++ xvilvh.d \_tmp1, \_in3, \_in2 ++ xvilvl.d \_out2, \_in3, \_in2 ++ ++ xvor.v \_out0, \_tmp0, \_tmp0 ++ xvor.v \_out3, \_tmp1, \_tmp1 ++ ++ xvpermi.q \_out0, \_out2, 0x02 ++ xvpermi.q \_out2, \_tmp0, 0x31 ++ xvpermi.q \_out3, \_out1, 0x31 ++ xvpermi.q \_out1, \_tmp1, 0x02 ++.endm ++ ++/* ++ * Description : Butterfly of 4 input vectors ++ * Arguments : Inputs - _in0, _in1, _in2, _in3 ++ * Outputs - _out0, _out1, _out2, _out3 ++ * Details : Butterfly operation ++ * Example : LSX_BUTTERFLY_4 ++ * _out0 = _in0 + _in3; ++ * _out1 = _in1 + _in2; ++ * _out2 = _in1 - _in2; ++ * _out3 = _in0 - _in3; ++ */ ++.macro LSX_BUTTERFLY_4_B _in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3 ++ vadd.b \_out0, \_in0, \_in3 ++ vadd.b \_out1, \_in1, \_in2 ++ vsub.b \_out2, \_in1, \_in2 ++ vsub.b \_out3, \_in0, \_in3 ++.endm ++.macro LSX_BUTTERFLY_4_H _in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3 ++ vadd.h \_out0, \_in0, \_in3 ++ vadd.h \_out1, \_in1, \_in2 ++ vsub.h \_out2, \_in1, \_in2 ++ vsub.h \_out3, \_in0, \_in3 ++.endm ++.macro LSX_BUTTERFLY_4_W _in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3 ++ vadd.w \_out0, \_in0, \_in3 ++ vadd.w \_out1, \_in1, \_in2 ++ vsub.w \_out2, \_in1, \_in2 ++ vsub.w \_out3, \_in0, \_in3 ++.endm ++.macro LSX_BUTTERFLY_4_D _in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3 ++ vadd.d \_out0, \_in0, \_in3 ++ vadd.d \_out1, \_in1, \_in2 ++ vsub.d \_out2, \_in1, \_in2 ++ vsub.d \_out3, \_in0, \_in3 ++.endm ++ ++.macro LASX_BUTTERFLY_4_B _in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3 ++ xvadd.b \_out0, \_in0, \_in3 ++ xvadd.b \_out1, \_in1, \_in2 ++ xvsub.b \_out2, \_in1, \_in2 ++ xvsub.b \_out3, \_in0, \_in3 ++.endm ++.macro LASX_BUTTERFLY_4_H _in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3 ++ xvadd.h \_out0, \_in0, \_in3 ++ xvadd.h \_out1, \_in1, \_in2 ++ xvsub.h \_out2, \_in1, \_in2 ++ xvsub.h \_out3, \_in0, \_in3 ++.endm ++.macro LASX_BUTTERFLY_4_W _in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3 ++ xvadd.w \_out0, \_in0, \_in3 ++ xvadd.w \_out1, \_in1, \_in2 ++ xvsub.w \_out2, \_in1, \_in2 ++ xvsub.w \_out3, \_in0, \_in3 ++.endm ++.macro LASX_BUTTERFLY_4_D _in0, _in1, _in2, _in3, _out0, _out1, _out2, _out3 ++ xvadd.d \_out0, \_in0, \_in3 ++ xvadd.d \_out1, \_in1, \_in2 ++ xvsub.d \_out2, \_in1, \_in2 ++ xvsub.d \_out3, \_in0, \_in3 ++.endm ++ ++/* ++ * Description : Butterfly of 8 input vectors ++ * Arguments : Inputs - _in0, _in1, _in2, _in3, ~ ++ * Outputs - _out0, _out1, _out2, _out3, ~ ++ * Details : Butterfly operation ++ * Example : LASX_BUTTERFLY_8 ++ * _out0 = _in0 + _in7; ++ * _out1 = _in1 + _in6; ++ * _out2 = _in2 + _in5; ++ * _out3 = _in3 + _in4; ++ * _out4 = _in3 - _in4; ++ * _out5 = _in2 - _in5; ++ * _out6 = _in1 - _in6; ++ * _out7 = _in0 - _in7; ++ */ ++.macro LSX_BUTTERFLY_8_B _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7 ++ vadd.b \_out0, \_in0, \_in7 ++ vadd.b \_out1, \_in1, \_in6 ++ vadd.b \_out2, \_in2, \_in5 ++ vadd.b \_out3, \_in3, \_in4 ++ vsub.b \_out4, \_in3, \_in4 ++ vsub.b \_out5, \_in2, \_in5 ++ vsub.b \_out6, \_in1, \_in6 ++ vsub.b \_out7, \_in0, \_in7 ++.endm ++ ++.macro LSX_BUTTERFLY_8_H _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7 ++ vadd.h \_out0, \_in0, \_in7 ++ vadd.h \_out1, \_in1, \_in6 ++ vadd.h \_out2, \_in2, \_in5 ++ vadd.h \_out3, \_in3, \_in4 ++ vsub.h \_out4, \_in3, \_in4 ++ vsub.h \_out5, \_in2, \_in5 ++ vsub.h \_out6, \_in1, \_in6 ++ vsub.h \_out7, \_in0, \_in7 ++.endm ++ ++.macro LSX_BUTTERFLY_8_W _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7 ++ vadd.w \_out0, \_in0, \_in7 ++ vadd.w \_out1, \_in1, \_in6 ++ vadd.w \_out2, \_in2, \_in5 ++ vadd.w \_out3, \_in3, \_in4 ++ vsub.w \_out4, \_in3, \_in4 ++ vsub.w \_out5, \_in2, \_in5 ++ vsub.w \_out6, \_in1, \_in6 ++ vsub.w \_out7, \_in0, \_in7 ++.endm ++ ++.macro LSX_BUTTERFLY_8_D _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7 ++ vadd.d \_out0, \_in0, \_in7 ++ vadd.d \_out1, \_in1, \_in6 ++ vadd.d \_out2, \_in2, \_in5 ++ vadd.d \_out3, \_in3, \_in4 ++ vsub.d \_out4, \_in3, \_in4 ++ vsub.d \_out5, \_in2, \_in5 ++ vsub.d \_out6, \_in1, \_in6 ++ vsub.d \_out7, \_in0, \_in7 ++.endm ++ ++.macro LASX_BUTTERFLY_8_B _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7 ++ xvadd.b \_out0, \_in0, \_in7 ++ xvadd.b \_out1, \_in1, \_in6 ++ xvadd.b \_out2, \_in2, \_in5 ++ xvadd.b \_out3, \_in3, \_in4 ++ xvsub.b \_out4, \_in3, \_in4 ++ xvsub.b \_out5, \_in2, \_in5 ++ xvsub.b \_out6, \_in1, \_in6 ++ xvsub.b \_out7, \_in0, \_in7 ++.endm ++ ++.macro LASX_BUTTERFLY_8_H _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7 ++ xvadd.h \_out0, \_in0, \_in7 ++ xvadd.h \_out1, \_in1, \_in6 ++ xvadd.h \_out2, \_in2, \_in5 ++ xvadd.h \_out3, \_in3, \_in4 ++ xvsub.h \_out4, \_in3, \_in4 ++ xvsub.h \_out5, \_in2, \_in5 ++ xvsub.h \_out6, \_in1, \_in6 ++ xvsub.h \_out7, \_in0, \_in7 ++.endm ++ ++.macro LASX_BUTTERFLY_8_W _in0, _in1, _in2, _in3, _in4, _in5, _in6, _in7, \ ++ _out0, _out1, _out2, _out3, _out4, _out5, _out6, _out7 ++ xvadd.w \_out0, \_in0, \_in7 ++ xvadd.w \_out1, \_in1, \_in6 ++ xvadd.w \_out2, \_in2, \_in5 ++ xvadd.w \_out3, \_in3, \_in4 ++ xvsub.w \_out4, \_in3, \_in4 ++ xvsub.w \_out5, \_in2, \_in5 ++ xvsub.w \_out6, \_in1, \_in6 ++ xvsub.w \_out7, \_in0, \_in7 ++.endm ++ +diff --git a/libswscale/loongarch/output_lasx.c b/libswscale/loongarch/output_lasx.c +index fbcf51cf0c..4d4bba60c1 100644 +--- a/libswscale/loongarch/output_lasx.c ++++ b/libswscale/loongarch/output_lasx.c +@@ -28,7 +28,8 @@ void ff_yuv2planeX_8_lasx(const int16_t *filter, int filterSize, + { + int i; + int len = dstW - 15; +- __m256i mask = {0x1C1814100C080400, 0x0101010101010101, 0x1C1814100C080400, 0x0101010101010101}; ++ __m256i mask = {0x1C0C180814041000, 0x1C1814100C080400, ++ 0x1C0C180814041000, 0x1C1814100C080400}; + __m256i val1, val2, val3; + uint8_t dither0 = dither[offset & 7]; + uint8_t dither1 = dither[(offset + 1) & 7]; +@@ -38,34 +39,37 @@ void ff_yuv2planeX_8_lasx(const int16_t *filter, int filterSize, + uint8_t dither5 = dither[(offset + 5) & 7]; + uint8_t dither6 = dither[(offset + 6) & 7]; + uint8_t dither7 = dither[(offset + 7) & 7]; +- int val_1[8] = {dither0, dither1, dither2, dither3, dither0, dither1, dither2, dither3}; +- int val_2[8] = {dither4, dither5, dither6, dither7, dither4, dither5, dither6, dither7}; +- int val_3[8] = {dither0, dither1, dither2, dither3, dither4, dither5, dither6, dither7}; ++ int val_1[8] = {dither0, dither2, dither4, dither6, ++ dither0, dither2, dither4, dither6}; ++ int val_2[8] = {dither1, dither3, dither5, dither7, ++ dither1, dither3, dither5, dither7}; ++ int val_3[8] = {dither0, dither1, dither2, dither3, ++ dither4, dither5, dither6, dither7}; + + DUP2_ARG2(__lasx_xvld, val_1, 0, val_2, 0, val1, val2); + val3 = __lasx_xvld(val_3, 0); + + for (i = 0; i < len; i += 16) { + int j; +- __m256i src0, filter0, val_lh; +- __m256i val_l, val_h; ++ __m256i src0, filter0, val; ++ __m256i val_ev, val_od; + +- val_l = __lasx_xvslli_w(val1, 12); +- val_h = __lasx_xvslli_w(val2, 12); ++ val_ev = __lasx_xvslli_w(val1, 12); ++ val_od = __lasx_xvslli_w(val2, 12); + + for (j = 0; j < filterSize; j++) { + src0 = __lasx_xvld(src[j]+ i, 0); + filter0 = __lasx_xvldrepl_h((filter + j), 0); +- val_l = __lasx_xvmaddwl_w_h(val_l, src0, filter0); +- val_h = __lasx_xvmaddwh_w_h(val_h, src0, filter0); ++ val_ev = __lasx_xvmaddwev_w_h(val_ev, src0, filter0); ++ val_od = __lasx_xvmaddwod_w_h(val_od, src0, filter0); + } +- val_l = __lasx_xvsrai_w(val_l, 19); +- val_h = __lasx_xvsrai_w(val_h, 19); +- val_l = __lasx_xvclip255_w(val_l); +- val_h = __lasx_xvclip255_w(val_h); +- val_lh = __lasx_xvshuf_b(val_h, val_l, mask); +- __lasx_xvstelm_d(val_lh, (dest + i), 0, 0); +- __lasx_xvstelm_d(val_lh, (dest + i), 8, 2); ++ val_ev = __lasx_xvsrai_w(val_ev, 19); ++ val_od = __lasx_xvsrai_w(val_od, 19); ++ val_ev = __lasx_xvclip255_w(val_ev); ++ val_od = __lasx_xvclip255_w(val_od); ++ val = __lasx_xvshuf_b(val_od, val_ev, mask); ++ __lasx_xvstelm_d(val, (dest + i), 0, 0); ++ __lasx_xvstelm_d(val, (dest + i), 8, 2); + } + if (dstW - i >= 8){ + int j; +@@ -76,15 +80,16 @@ void ff_yuv2planeX_8_lasx(const int16_t *filter, int filterSize, + + for (j = 0; j < filterSize; j++) { + src0 = __lasx_xvld(src[j] + i, 0); +- src0 = __lasx_xvpermi_d(src0, 0xD8); ++ src0 = __lasx_vext2xv_w_h(src0); + filter0 = __lasx_xvldrepl_h((filter + j), 0); +- val_l = __lasx_xvmaddwl_w_h(val_l, src0, filter0); ++ filter0 = __lasx_vext2xv_w_h(filter0); ++ val_l = __lasx_xvmadd_w(val_l, src0, filter0); + } + val_l = __lasx_xvsrai_w(val_l, 19); + val_l = __lasx_xvclip255_w(val_l); + val_h = __lasx_xvpermi_d(val_l, 0x4E); + val_l = __lasx_xvshuf_b(val_h, val_l, mask); +- __lasx_xvstelm_d(val_l, (dest + i), 0, 0); ++ __lasx_xvstelm_d(val_l, (dest + i), 0, 1); + i += 8; + } + for (; i < dstW; i++) { +@@ -207,519 +212,20 @@ yuv2rgb_write(uint8_t *_dest, int i, int Y1, int Y2, + } + } + +-#define WRITE_YUV2RGB_16(y_l, y_h, u, v, count, r, g, b, y, \ +- target, Y1, Y2, U, V) \ +-{ \ +- Y1 = __lasx_xvpickve2gr_w(y_l, 0); \ +- Y2 = __lasx_xvpickve2gr_w(y_l, 1); \ +- U = __lasx_xvpickve2gr_w(u, 0); \ +- V = __lasx_xvpickve2gr_w(v, 0); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_l, 2); \ +- Y2 = __lasx_xvpickve2gr_w(y_l, 3); \ +- U = __lasx_xvpickve2gr_w(u, 1); \ +- V = __lasx_xvpickve2gr_w(v, 1); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_h, 0); \ +- Y2 = __lasx_xvpickve2gr_w(y_h, 1); \ +- U = __lasx_xvpickve2gr_w(u, 2); \ +- V = __lasx_xvpickve2gr_w(v, 2); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_h, 2); \ +- Y2 = __lasx_xvpickve2gr_w(y_h, 3); \ +- U = __lasx_xvpickve2gr_w(u, 3); \ +- V = __lasx_xvpickve2gr_w(v, 3); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_l, 4); \ +- Y2 = __lasx_xvpickve2gr_w(y_l, 5); \ +- U = __lasx_xvpickve2gr_w(u, 4); \ +- V = __lasx_xvpickve2gr_w(v, 4); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_l, 6); \ +- Y2 = __lasx_xvpickve2gr_w(y_l, 7); \ +- U = __lasx_xvpickve2gr_w(u, 5); \ +- V = __lasx_xvpickve2gr_w(v, 5); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_h, 4); \ +- Y2 = __lasx_xvpickve2gr_w(y_h, 5); \ +- U = __lasx_xvpickve2gr_w(u, 6); \ +- V = __lasx_xvpickve2gr_w(v, 6); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_h, 6); \ +- Y2 = __lasx_xvpickve2gr_w(y_h, 7); \ +- U = __lasx_xvpickve2gr_w(u, 7); \ +- V = __lasx_xvpickve2gr_w(v, 7); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +-} +- +-#define WRITE_YUV2RGB_16_L(y_ev, y_od, u_ev, u_od, v_ev, v_od, \ +- count, r, g, b, y, target, Y1, Y2, U, V) \ +-{ \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 0); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 0); \ +- U = __lasx_xvpickve2gr_w(u_ev, 0); \ +- V = __lasx_xvpickve2gr_w(v_ev, 0); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 1); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 1); \ +- U = __lasx_xvpickve2gr_w(u_od, 0); \ +- V = __lasx_xvpickve2gr_w(v_od, 0); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 2); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 2); \ +- U = __lasx_xvpickve2gr_w(u_ev, 1); \ +- V = __lasx_xvpickve2gr_w(v_ev, 1); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 3); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 3); \ +- U = __lasx_xvpickve2gr_w(u_od, 1); \ +- V = __lasx_xvpickve2gr_w(v_od, 1); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 4); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 4); \ +- U = __lasx_xvpickve2gr_w(u_ev, 2); \ +- V = __lasx_xvpickve2gr_w(v_ev, 2); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 5); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 5); \ +- U = __lasx_xvpickve2gr_w(u_od, 2); \ +- V = __lasx_xvpickve2gr_w(v_od, 2); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 6); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 6); \ +- U = __lasx_xvpickve2gr_w(u_ev, 3); \ +- V = __lasx_xvpickve2gr_w(v_ev, 3); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 7); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 7); \ +- U = __lasx_xvpickve2gr_w(u_od, 3); \ +- V = __lasx_xvpickve2gr_w(v_od, 3); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +-} +- +-#define WRITE_YUV2RGB_16_H(y_ev, y_od, u_ev, u_od, v_ev, v_od, \ +- count, r, g, b, y, target, Y1, Y2, U, V) \ +-{ \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 0); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 0); \ +- U = __lasx_xvpickve2gr_w(u_ev, 4); \ +- V = __lasx_xvpickve2gr_w(v_ev, 4); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 1); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 1); \ +- U = __lasx_xvpickve2gr_w(u_od, 4); \ +- V = __lasx_xvpickve2gr_w(v_od, 4); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 2); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 2); \ +- U = __lasx_xvpickve2gr_w(u_ev, 5); \ +- V = __lasx_xvpickve2gr_w(v_ev, 5); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 3); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 3); \ +- U = __lasx_xvpickve2gr_w(u_od, 5); \ +- V = __lasx_xvpickve2gr_w(v_od, 5); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 4); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 4); \ +- U = __lasx_xvpickve2gr_w(u_ev, 6); \ +- V = __lasx_xvpickve2gr_w(v_ev, 6); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 5); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 5); \ +- U = __lasx_xvpickve2gr_w(u_od, 6); \ +- V = __lasx_xvpickve2gr_w(v_od, 6); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 6); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 6); \ +- U = __lasx_xvpickve2gr_w(u_ev, 7); \ +- V = __lasx_xvpickve2gr_w(v_ev, 7); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 7); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 7); \ +- U = __lasx_xvpickve2gr_w(u_od, 7); \ +- V = __lasx_xvpickve2gr_w(v_od, 7); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ ++#define WRITE_YUV2RGB(vec_y1, vec_y2, vec_u, vec_v, t1, t2, t3, t4) \ ++{ \ ++ Y1 = __lasx_xvpickve2gr_w(vec_y1, t1); \ ++ Y2 = __lasx_xvpickve2gr_w(vec_y2, t2); \ ++ U = __lasx_xvpickve2gr_w(vec_u, t3); \ ++ V = __lasx_xvpickve2gr_w(vec_v, t4); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ + } + +-#define WRITE_YUV2RGB_16_N(y_ev, y_od, u, v, count, \ +- r, g, b, y, target, Y1, Y2, U, V) \ +-{ \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 0); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 0); \ +- U = __lasx_xvpickve2gr_w(u, 0); \ +- V = __lasx_xvpickve2gr_w(v, 0); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 1); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 1); \ +- U = __lasx_xvpickve2gr_w(u, 1); \ +- V = __lasx_xvpickve2gr_w(v, 1); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 2); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 2); \ +- U = __lasx_xvpickve2gr_w(u, 2); \ +- V = __lasx_xvpickve2gr_w(v, 2); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 3); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 3); \ +- U = __lasx_xvpickve2gr_w(u, 3); \ +- V = __lasx_xvpickve2gr_w(v, 3); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 4); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 4); \ +- U = __lasx_xvpickve2gr_w(u, 4); \ +- V = __lasx_xvpickve2gr_w(v, 4); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 5); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 5); \ +- U = __lasx_xvpickve2gr_w(u, 5); \ +- V = __lasx_xvpickve2gr_w(v, 5); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 6); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 6); \ +- U = __lasx_xvpickve2gr_w(u, 6); \ +- V = __lasx_xvpickve2gr_w(v, 6); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 7); \ +- Y2 = __lasx_xvpickve2gr_w(y_od, 7); \ +- U = __lasx_xvpickve2gr_w(u, 7); \ +- V = __lasx_xvpickve2gr_w(v, 7); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +-} +- +-#define WRITE_YUV2RGB_8_N(y_ev, uv, count, r, g, b, \ +- y, target, Y1, Y2, U, V) \ +-{ \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 0); \ +- Y2 = __lasx_xvpickve2gr_w(y_ev, 1); \ +- U = __lasx_xvpickve2gr_w(uv, 0); \ +- V = __lasx_xvpickve2gr_w(uv, 4); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 2); \ +- Y2 = __lasx_xvpickve2gr_w(y_ev, 3); \ +- U = __lasx_xvpickve2gr_w(uv, 1); \ +- V = __lasx_xvpickve2gr_w(uv, 5); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 4); \ +- Y2 = __lasx_xvpickve2gr_w(y_ev, 5); \ +- U = __lasx_xvpickve2gr_w(uv, 2); \ +- V = __lasx_xvpickve2gr_w(uv, 6); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_ev, 6); \ +- Y2 = __lasx_xvpickve2gr_w(y_ev, 7); \ +- U = __lasx_xvpickve2gr_w(uv, 3); \ +- V = __lasx_xvpickve2gr_w(uv, 7); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +-} +- +-#define WRITE_YUV2RGBL_8(y_l, u, v, count, r, g, b, y, target, \ +- Y1, Y2, U, V) \ +-{ \ +- Y1 = __lasx_xvpickve2gr_w(y_l, 0); \ +- Y2 = __lasx_xvpickve2gr_w(y_l, 1); \ +- U = __lasx_xvpickve2gr_w(u, 0); \ +- V = __lasx_xvpickve2gr_w(v, 0); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_l, 2); \ +- Y2 = __lasx_xvpickve2gr_w(y_l, 3); \ +- U = __lasx_xvpickve2gr_w(u, 1); \ +- V = __lasx_xvpickve2gr_w(v, 1); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_l, 4); \ +- Y2 = __lasx_xvpickve2gr_w(y_l, 5); \ +- U = __lasx_xvpickve2gr_w(u, 2); \ +- V = __lasx_xvpickve2gr_w(v, 2); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_l, 6); \ +- Y2 = __lasx_xvpickve2gr_w(y_l, 7); \ +- U = __lasx_xvpickve2gr_w(u, 3); \ +- V = __lasx_xvpickve2gr_w(v, 3); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +-} +- +-#define WRITE_YUV2RGBH_8(y_h, u, v, count, r, g, b, y, target, \ +- Y1, Y2, U, V) \ +-{ \ +- Y1 = __lasx_xvpickve2gr_w(y_h, 0); \ +- Y2 = __lasx_xvpickve2gr_w(y_h, 1); \ +- U = __lasx_xvpickve2gr_w(u, 4); \ +- V = __lasx_xvpickve2gr_w(v, 4); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_h, 2); \ +- Y2 = __lasx_xvpickve2gr_w(y_h, 3); \ +- U = __lasx_xvpickve2gr_w(u, 5); \ +- V = __lasx_xvpickve2gr_w(v, 5); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_h, 4); \ +- Y2 = __lasx_xvpickve2gr_w(y_h, 5); \ +- U = __lasx_xvpickve2gr_w(u, 6); \ +- V = __lasx_xvpickve2gr_w(v, 6); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +- \ +- Y1 = __lasx_xvpickve2gr_w(y_h, 6); \ +- Y2 = __lasx_xvpickve2gr_w(y_h, 7); \ +- U = __lasx_xvpickve2gr_w(u, 7); \ +- V = __lasx_xvpickve2gr_w(v, 7); \ +- r = c->table_rV[V]; \ +- g = (c->table_gU[U] + c->table_gV[V]); \ +- b = c->table_bU[U]; \ +- yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ +- r, g, b, y, target, 0); \ +- count++; \ +-} +- +- + static void + yuv2rgb_X_template_lasx(SwsContext *c, const int16_t *lumFilter, + const int16_t **lumSrc, int lumFilterSize, +@@ -736,7 +242,7 @@ yuv2rgb_X_template_lasx(SwsContext *c, const int16_t *lumFilter, + int len_count = (dstW + 1) >> 1; + const void *r, *g, *b; + int head = YUVRGB_TABLE_HEADROOM; +- __m256i headroom = __lasx_xvldrepl_w(&head, 0); ++ __m256i headroom = __lasx_xvreplgr2vr_w(head); + + for (i = 0; i < len; i++) { + int Y1, Y2, U, V, count_lum = count << 1; +@@ -761,10 +267,10 @@ yuv2rgb_X_template_lasx(SwsContext *c, const int16_t *lumFilter, + u2_od = yl1_ev; + v2_od = yl1_ev; + for (j = 0; j < lumFilterSize; j++) { ++ int16_t *src_lum = lumSrc[j] + count_lum; + temp = __lasx_xvldrepl_h((lumFilter + j), 0); +- DUP4_ARG2(__lasx_xvld, lumSrc[j] + count_lum, 0, lumSrc[j] + count_lum, +- 32, lumSrc[j] + count_lum, 64, lumSrc[j] + count_lum, 96, l_src1, +- l_src2, l_src3, l_src4); ++ DUP4_ARG2(__lasx_xvld, src_lum, 0, src_lum, 32, src_lum, 64, ++ src_lum, 96, l_src1, l_src2, l_src3, l_src4); + + yl1_ev = __lasx_xvmaddwev_w_h(yl1_ev, temp, l_src1); + yl1_od = __lasx_xvmaddwod_w_h(yl1_od, temp, l_src1); +@@ -814,14 +320,38 @@ yuv2rgb_X_template_lasx(SwsContext *c, const int16_t *lumFilter, + v2_ev = __lasx_xvadd_w(v2_ev, headroom); + u2_od = __lasx_xvadd_w(u2_od, headroom); + v2_od = __lasx_xvadd_w(v2_od, headroom); +- WRITE_YUV2RGB_16_L(yl1_ev, yl1_od, u1_ev, u1_od, v1_ev, v1_od, count, +- r, g, b, y, target, Y1, Y2, U, V); +- WRITE_YUV2RGB_16_H(yh1_ev, yh1_od, u1_ev, u1_od, v1_ev, v1_od, count, +- r, g, b, y, target, Y1, Y2, U, V); +- WRITE_YUV2RGB_16_L(yl2_ev, yl2_od, u2_ev, u2_od, v2_ev, v2_od, count, +- r, g, b, y, target, Y1, Y2, U, V); +- WRITE_YUV2RGB_16_H(yh2_ev, yh2_od, u2_ev, u2_od, v2_ev, v2_od, count, +- r, g, b, y, target, Y1, Y2, U, V); ++ WRITE_YUV2RGB(yl1_ev, yl1_od, u1_ev, v1_ev, 0, 0, 0, 0); ++ WRITE_YUV2RGB(yl1_ev, yl1_od, u1_od, v1_od, 1, 1, 0, 0); ++ WRITE_YUV2RGB(yl1_ev, yl1_od, u1_ev, v1_ev, 2, 2, 1, 1); ++ WRITE_YUV2RGB(yl1_ev, yl1_od, u1_od, v1_od, 3, 3, 1, 1); ++ WRITE_YUV2RGB(yl1_ev, yl1_od, u1_ev, v1_ev, 4, 4, 2, 2); ++ WRITE_YUV2RGB(yl1_ev, yl1_od, u1_od, v1_od, 5, 5, 2, 2); ++ WRITE_YUV2RGB(yl1_ev, yl1_od, u1_ev, v1_ev, 6, 6, 3, 3); ++ WRITE_YUV2RGB(yl1_ev, yl1_od, u1_od, v1_od, 7, 7, 3, 3); ++ WRITE_YUV2RGB(yh1_ev, yh1_od, u1_ev, v1_ev, 0, 0, 4, 4); ++ WRITE_YUV2RGB(yh1_ev, yh1_od, u1_od, v1_od, 1, 1, 4, 4); ++ WRITE_YUV2RGB(yh1_ev, yh1_od, u1_ev, v1_ev, 2, 2, 5, 5); ++ WRITE_YUV2RGB(yh1_ev, yh1_od, u1_od, v1_od, 3, 3, 5, 5); ++ WRITE_YUV2RGB(yh1_ev, yh1_od, u1_ev, v1_ev, 4, 4, 6, 6); ++ WRITE_YUV2RGB(yh1_ev, yh1_od, u1_od, v1_od, 5, 5, 6, 6); ++ WRITE_YUV2RGB(yh1_ev, yh1_od, u1_ev, v1_ev, 6, 6, 7, 7); ++ WRITE_YUV2RGB(yh1_ev, yh1_od, u1_od, v1_od, 7, 7, 7, 7); ++ WRITE_YUV2RGB(yl2_ev, yl2_od, u2_ev, v2_ev, 0, 0, 0, 0); ++ WRITE_YUV2RGB(yl2_ev, yl2_od, u2_od, v2_od, 1, 1, 0, 0); ++ WRITE_YUV2RGB(yl2_ev, yl2_od, u2_ev, v2_ev, 2, 2, 1, 1); ++ WRITE_YUV2RGB(yl2_ev, yl2_od, u2_od, v2_od, 3, 3, 1, 1); ++ WRITE_YUV2RGB(yl2_ev, yl2_od, u2_ev, v2_ev, 4, 4, 2, 2); ++ WRITE_YUV2RGB(yl2_ev, yl2_od, u2_od, v2_od, 5, 5, 2, 2); ++ WRITE_YUV2RGB(yl2_ev, yl2_od, u2_ev, v2_ev, 6, 6, 3, 3); ++ WRITE_YUV2RGB(yl2_ev, yl2_od, u2_od, v2_od, 7, 7, 3, 3); ++ WRITE_YUV2RGB(yh2_ev, yh2_od, u2_ev, v2_ev, 0, 0, 4, 4); ++ WRITE_YUV2RGB(yh2_ev, yh2_od, u2_od, v2_od, 1, 1, 4, 4); ++ WRITE_YUV2RGB(yh2_ev, yh2_od, u2_ev, v2_ev, 2, 2, 5, 5); ++ WRITE_YUV2RGB(yh2_ev, yh2_od, u2_od, v2_od, 3, 3, 5, 5); ++ WRITE_YUV2RGB(yh2_ev, yh2_od, u2_ev, v2_ev, 4, 4, 6, 6); ++ WRITE_YUV2RGB(yh2_ev, yh2_od, u2_od, v2_od, 5, 5, 6, 6); ++ WRITE_YUV2RGB(yh2_ev, yh2_od, u2_ev, v2_ev, 6, 6, 7, 7); ++ WRITE_YUV2RGB(yh2_ev, yh2_od, u2_od, v2_od, 7, 7, 7, 7); + } + if (res >= 32) { + int Y1, Y2, U, V, count_lum = count << 1; +@@ -867,10 +397,22 @@ yuv2rgb_X_template_lasx(SwsContext *c, const int16_t *lumFilter, + v_ev = __lasx_xvadd_w(v_ev, headroom); + u_od = __lasx_xvadd_w(u_od, headroom); + v_od = __lasx_xvadd_w(v_od, headroom); +- WRITE_YUV2RGB_16_L(yl_ev, yl_od, u_ev, u_od, v_ev, v_od, count, +- r, g, b, y, target, Y1, Y2, U, V); +- WRITE_YUV2RGB_16_H(yh_ev, yh_od, u_ev, u_od, v_ev, v_od, count, +- r, g, b, y, target, Y1, Y2, U, V); ++ WRITE_YUV2RGB(yl_ev, yl_od, u_ev, v_ev, 0, 0, 0, 0); ++ WRITE_YUV2RGB(yl_ev, yl_od, u_od, v_od, 1, 1, 0, 0); ++ WRITE_YUV2RGB(yl_ev, yl_od, u_ev, v_ev, 2, 2, 1, 1); ++ WRITE_YUV2RGB(yl_ev, yl_od, u_od, v_od, 3, 3, 1, 1); ++ WRITE_YUV2RGB(yl_ev, yl_od, u_ev, v_ev, 4, 4, 2, 2); ++ WRITE_YUV2RGB(yl_ev, yl_od, u_od, v_od, 5, 5, 2, 2); ++ WRITE_YUV2RGB(yl_ev, yl_od, u_ev, v_ev, 6, 6, 3, 3); ++ WRITE_YUV2RGB(yl_ev, yl_od, u_od, v_od, 7, 7, 3, 3); ++ WRITE_YUV2RGB(yh_ev, yh_od, u_ev, v_ev, 0, 0, 4, 4); ++ WRITE_YUV2RGB(yh_ev, yh_od, u_od, v_od, 1, 1, 4, 4); ++ WRITE_YUV2RGB(yh_ev, yh_od, u_ev, v_ev, 2, 2, 5, 5); ++ WRITE_YUV2RGB(yh_ev, yh_od, u_od, v_od, 3, 3, 5, 5); ++ WRITE_YUV2RGB(yh_ev, yh_od, u_ev, v_ev, 4, 4, 6, 6); ++ WRITE_YUV2RGB(yh_ev, yh_od, u_od, v_od, 5, 5, 6, 6); ++ WRITE_YUV2RGB(yh_ev, yh_od, u_ev, v_ev, 6, 6, 7, 7); ++ WRITE_YUV2RGB(yh_ev, yh_od, u_od, v_od, 7, 7, 7, 7); + res -= 32; + } + if (res >= 16) { +@@ -904,7 +446,14 @@ yuv2rgb_X_template_lasx(SwsContext *c, const int16_t *lumFilter, + v = __lasx_xvsrai_w(v, 19); + u = __lasx_xvadd_w(u, headroom); + v = __lasx_xvadd_w(v, headroom); +- WRITE_YUV2RGB_16_N(y_ev, y_od, u, v, count, r, g, b, y, target, Y1, Y2, U, V); ++ WRITE_YUV2RGB(y_ev, y_od, u, v, 0, 0, 0, 0); ++ WRITE_YUV2RGB(y_ev, y_od, u, v, 1, 1, 1, 1); ++ WRITE_YUV2RGB(y_ev, y_od, u, v, 2, 2, 2, 2); ++ WRITE_YUV2RGB(y_ev, y_od, u, v, 3, 3, 3, 3); ++ WRITE_YUV2RGB(y_ev, y_od, u, v, 4, 4, 4, 4); ++ WRITE_YUV2RGB(y_ev, y_od, u, v, 5, 5, 5, 5); ++ WRITE_YUV2RGB(y_ev, y_od, u, v, 6, 6, 6, 6); ++ WRITE_YUV2RGB(y_ev, y_od, u, v, 7, 7, 7, 7); + res -= 16; + } + if (res >= 8) { +@@ -932,7 +481,10 @@ yuv2rgb_X_template_lasx(SwsContext *c, const int16_t *lumFilter, + y_ev = __lasx_xvsrai_w(y_ev, 19); + uv = __lasx_xvsrai_w(uv, 19); + uv = __lasx_xvadd_w(uv, headroom); +- WRITE_YUV2RGB_8_N(y_ev, uv, count, r, g, b, y, target, Y1, Y2, U, V); ++ WRITE_YUV2RGB(y_ev, y_ev, uv, uv, 0, 1, 0, 4); ++ WRITE_YUV2RGB(y_ev, y_ev, uv, uv, 2, 3, 1, 5); ++ WRITE_YUV2RGB(y_ev, y_ev, uv, uv, 4, 5, 2, 6); ++ WRITE_YUV2RGB(y_ev, y_ev, uv, uv, 6, 7, 3, 7); + } + for (; count < len_count; count++) { + int Y1 = 1 << 18; +@@ -987,17 +539,21 @@ yuv2rgb_2_template_lasx(SwsContext *c, const int16_t *buf[2], + + for (i = 0; i < len; i += 16) { + int Y1, Y2, U, V; ++ int i_dex = i << 1; ++ int c_dex = count << 1; + __m256i y0_h, y0_l, y0, u0, v0; + __m256i y1_h, y1_l, y1, u1, v1; + __m256i y_l, y_h, u, v; + +- DUP4_ARG2(__lasx_xvld, buf0 + i, 0, ubuf0 + count, 0, vbuf0 + count, +- 0, buf1 + i, 0, y0, u0, v0, y1); +- DUP2_ARG2(__lasx_xvld, ubuf1 + count, 0, vbuf1 + count, 0, u1, v1); +- DUP2_ARG1(__lasx_vext2xv_w_h, y0, y1, y0_l, y1_l); +- y0 = __lasx_xvpermi_d(y0, 0x4E); +- y1 = __lasx_xvpermi_d(y1, 0x4E); +- DUP2_ARG1(__lasx_vext2xv_w_h, y0, y1, y0_h, y1_h); ++ DUP4_ARG2(__lasx_xvldx, buf0, i_dex, ubuf0, c_dex, vbuf0, c_dex, ++ buf1, i_dex, y0, u0, v0, y1); ++ DUP2_ARG2(__lasx_xvldx, ubuf1, c_dex, vbuf1, c_dex, u1, v1); ++ DUP2_ARG2(__lasx_xvsllwil_w_h, y0, 0, y1, 0, y0_l, y1_l); ++ DUP2_ARG1(__lasx_xvexth_w_h, y0, y1, y0_h, y1_h); ++ //DUP2_ARG1(__lasx_vext2xv_w_h, y0, y1, y0_l, y1_l); ++ //y0 = __lasx_xvpermi_d(y0, 0x4E); ++ //y1 = __lasx_xvpermi_d(y1, 0x4E); ++ //DUP2_ARG1(__lasx_vext2xv_w_h, y0, y1, y0_h, y1_h); + DUP4_ARG1(__lasx_vext2xv_w_h, u0, u1, v0, v1, u0, u1, v0, v1); + y0_l = __lasx_xvmul_w(y0_l, v_yalpha1); + y0_h = __lasx_xvmul_w(y0_h, v_yalpha1); +@@ -1013,19 +569,26 @@ yuv2rgb_2_template_lasx(SwsContext *c, const int16_t *buf[2], + v = __lasx_xvsrai_w(v, 19); + u = __lasx_xvadd_w(u, headroom); + v = __lasx_xvadd_w(v, headroom); +- WRITE_YUV2RGBL_8(y_l, u, v, count, r, g, b, y, target, Y1, Y2, U, V); +- WRITE_YUV2RGBH_8(y_h, u, v, count, r, g, b, y, target, Y1, Y2, U, V); ++ WRITE_YUV2RGB(y_l, y_l, u, v, 0, 1, 0, 0); ++ WRITE_YUV2RGB(y_l, y_l, u, v, 2, 3, 1, 1); ++ WRITE_YUV2RGB(y_h, y_h, u, v, 0, 1, 2, 2); ++ WRITE_YUV2RGB(y_h, y_h, u, v, 2, 3, 3, 3); ++ WRITE_YUV2RGB(y_l, y_l, u, v, 4, 5, 4, 4); ++ WRITE_YUV2RGB(y_l, y_l, u, v, 6, 7, 5, 5); ++ WRITE_YUV2RGB(y_h, y_h, u, v, 4, 5, 6, 6); ++ WRITE_YUV2RGB(y_h, y_h, u, v, 6, 7, 7, 7); + } + if (dstW - i >= 8) { + int Y1, Y2, U, V; ++ int i_dex = i << 1; + __m256i y0_l, y0, u0, v0; + __m256i y1_l, y1, u1, v1; + __m256i y_l, u, v; + +- y0 = __lasx_xvld(buf0 + i, 0); ++ y0 = __lasx_xvldx(buf0, i_dex); + u0 = __lasx_xvldrepl_d((ubuf0 + count), 0); + v0 = __lasx_xvldrepl_d((vbuf0 + count), 0); +- y1 = __lasx_xvld(buf1 + i, 0); ++ y1 = __lasx_xvldx(buf1, i_dex); + u1 = __lasx_xvldrepl_d((ubuf1 + count), 0); + v1 = __lasx_xvldrepl_d((vbuf1 + count), 0); + DUP2_ARG1(__lasx_vext2xv_w_h, y0, y1, y0_l, y1_l); +@@ -1041,7 +604,10 @@ yuv2rgb_2_template_lasx(SwsContext *c, const int16_t *buf[2], + v = __lasx_xvsrai_w(v, 19); + u = __lasx_xvadd_w(u, headroom); + v = __lasx_xvadd_w(v, headroom); +- WRITE_YUV2RGBL_8(y_l, u, v, count, r, g, b, y, target, Y1, Y2, U, V); ++ WRITE_YUV2RGB(y_l, y_l, u, v, 0, 1, 0, 0); ++ WRITE_YUV2RGB(y_l, y_l, u, v, 2, 3, 1, 1); ++ WRITE_YUV2RGB(y_l, y_l, u, v, 4, 5, 2, 2); ++ WRITE_YUV2RGB(y_l, y_l, u, v, 6, 7, 3, 3); + i += 8; + } + for (; count < len_count; count++) { +@@ -1077,48 +643,53 @@ yuv2rgb_1_template_lasx(SwsContext *c, const int16_t *buf0, + + if (uvalpha < 2048) { + int count = 0; +- int16_t bias_int = 64; + int head = YUVRGB_TABLE_HEADROOM; +- __m256i headroom = __lasx_xvreplgr2vr_w(head); +- __m256i bias_64 = __lasx_xvreplgr2vr_h(bias_int); ++ __m256i headroom = __lasx_xvreplgr2vr_h(head); + + for (i = 0; i < len; i += 16) { + int Y1, Y2, U, V; ++ int i_dex = i << 1; ++ int c_dex = count << 1; + __m256i src_y, src_u, src_v; +- __m256i y_h, y_l, u, v; +- +- DUP2_ARG2(__lasx_xvld, buf0 + i, 0, ubuf0 + count, 0, src_y, src_u); +- src_v = __lasx_xvld(vbuf0 + count, 0); +- y_l = __lasx_xvaddwl_w_h(src_y, bias_64); +- y_h = __lasx_xvaddwh_w_h(src_y, bias_64); +- src_u = __lasx_xvpermi_d(src_u, 0xD8); +- src_v = __lasx_xvpermi_d(src_v, 0xD8); +- DUP2_ARG2(__lasx_xvaddwl_w_h, src_u, bias_64, src_v, bias_64, u, v); +- y_l = __lasx_xvsrai_w(y_l, 7); +- y_h = __lasx_xvsrai_w(y_h, 7); +- u = __lasx_xvsrai_w(u, 7); +- v = __lasx_xvsrai_w(v, 7); +- u = __lasx_xvadd_w(u, headroom); +- v = __lasx_xvadd_w(v, headroom); +- WRITE_YUV2RGB_16(y_l, y_h, u, v, count, r, g, b, y, target, Y1, Y2, U, V); ++ __m256i u, v, y_l, y_h; ++ ++ DUP2_ARG2(__lasx_xvldx, buf0, i_dex, ubuf0, c_dex, src_y, src_u); ++ src_v = __lasx_xvldx(vbuf0, c_dex); ++ src_u = __lasx_xvpermi_q(src_u, src_v, 0x02); ++ src_y = __lasx_xvsrari_h(src_y, 7); ++ src_u = __lasx_xvsrari_h(src_u, 7); ++ y_l = __lasx_xvsllwil_w_h(src_y, 0); ++ y_h = __lasx_xvexth_w_h(src_y); ++ u = __lasx_xvaddwev_w_h(src_u, headroom); ++ v = __lasx_xvaddwod_w_h(src_u, headroom); ++ WRITE_YUV2RGB(y_l, y_l, u, u, 0, 1, 0, 4); ++ WRITE_YUV2RGB(y_l, y_l, v, v, 2, 3, 0, 4); ++ WRITE_YUV2RGB(y_h, y_h, u, u, 0, 1, 1, 5); ++ WRITE_YUV2RGB(y_h, y_h, v, v, 2, 3, 1, 5); ++ WRITE_YUV2RGB(y_l, y_l, u, u, 4, 5, 2, 6); ++ WRITE_YUV2RGB(y_l, y_l, v, v, 6, 7, 2, 6); ++ WRITE_YUV2RGB(y_h, y_h, u, u, 4, 5, 3, 7); ++ WRITE_YUV2RGB(y_h, y_h, v, v, 6, 7, 3, 7); + } + if (dstW - i >= 8){ + int Y1, Y2, U, V; ++ int i_dex = i << 1; + __m256i src_y, src_u, src_v; +- __m256i y_l, u, v; +- +- src_y = __lasx_xvld(buf0 + i, 0); +- src_u = __lasx_xvldrepl_d((ubuf0 + count), 0); +- src_v = __lasx_xvldrepl_d((vbuf0 + count), 0); +- src_y = __lasx_xvpermi_d(src_y, 0xD8); +- DUP2_ARG2(__lasx_xvaddwl_w_h, src_y, bias_64, src_u, bias_64, y_l, u); +- v = __lasx_xvaddwl_w_h(src_v, bias_64); +- y_l = __lasx_xvsrai_w(y_l, 7); +- u = __lasx_xvsrai_w(u, 7); +- v = __lasx_xvsrai_w(v, 7); +- u = __lasx_xvadd_w(u, headroom); +- v = __lasx_xvadd_w(v, headroom); +- WRITE_YUV2RGBL_8(y_l, u, v, count, r, g, b, y, target, Y1, Y2, U, V); ++ __m256i y_l, uv; ++ ++ src_y = __lasx_xvldx(buf0, i_dex); ++ src_u = __lasx_xvldrepl_d((ubuf0 + count), 0); ++ src_v = __lasx_xvldrepl_d((vbuf0 + count), 0); ++ src_u = __lasx_xvilvl_d(src_v, src_u); ++ y_l = __lasx_xvsrari_h(src_y, 7); ++ uv = __lasx_xvsrari_h(src_u, 7); ++ y_l = __lasx_vext2xv_w_h(y_l); ++ uv = __lasx_vext2xv_w_h(uv); ++ uv = __lasx_xvaddwev_w_h(uv, headroom); ++ WRITE_YUV2RGB(y_l, y_l, uv, uv, 0, 1, 0, 4); ++ WRITE_YUV2RGB(y_l, y_l, uv, uv, 2, 3, 1, 5); ++ WRITE_YUV2RGB(y_l, y_l, uv, uv, 4, 5, 2, 6); ++ WRITE_YUV2RGB(y_l, y_l, uv, uv, 6, 7, 3, 7); + i += 8; + } + for (; count < len_count; count++) { +@@ -1138,60 +709,63 @@ yuv2rgb_1_template_lasx(SwsContext *c, const int16_t *buf0, + } else { + const int16_t *ubuf1 = ubuf[1], *vbuf1 = vbuf[1]; + int count = 0; +- int16_t bias_int_64 = 64; +- int bias_int_128 = 128; + int HEADROOM = YUVRGB_TABLE_HEADROOM; + __m256i headroom = __lasx_xvreplgr2vr_w(HEADROOM); +- __m256i bias_64 = __lasx_xvreplgr2vr_h(bias_int_64); +- __m256i bias_128 = __lasx_xvreplgr2vr_w(bias_int_128); + + for (i = 0; i < len; i += 16) { + int Y1, Y2, U, V; ++ int i_dex = i << 1; ++ int c_dex = count << 1; + __m256i src_y, src_u0, src_v0, src_u1, src_v1; +- __m256i y_h, y_l, u, v; +- +- DUP4_ARG2(__lasx_xvld, buf0 + i, 0, ubuf0 + count, 0, vbuf0 + count, +- 0, ubuf1 + count, 0, src_y, src_u0, src_v0, src_u1); +- src_v1 = __lasx_xvld(vbuf1 + count, 0); +- src_u0 = __lasx_xvpermi_d(src_u0, 0xD8); +- src_v0 = __lasx_xvpermi_d(src_v0, 0xD8); +- src_u1 = __lasx_xvpermi_d(src_u1, 0xD8); +- src_v1 = __lasx_xvpermi_d(src_v1, 0xD8); +- y_l = __lasx_xvaddwl_w_h(src_y, bias_64); +- y_h = __lasx_xvaddwh_w_h(src_y, bias_64); +- DUP2_ARG2(__lasx_xvaddwl_w_h, src_u0, src_u1, src_v0, src_v1, u, v); +- u = __lasx_xvadd_w(u, bias_128); +- v = __lasx_xvadd_w(v, bias_128); +- y_l = __lasx_xvsrai_w(y_l, 7); +- y_h = __lasx_xvsrai_w(y_h, 7); +- u = __lasx_xvsrai_w(u, 8); +- v = __lasx_xvsrai_w(v, 8); ++ __m256i y_l, y_h, u, v; ++ ++ DUP4_ARG2(__lasx_xvldx, buf0, i_dex, ubuf0, c_dex, vbuf0, c_dex, ++ ubuf1, c_dex, src_y, src_u0, src_v0, src_u1); ++ src_v1 = __lasx_xvldx(vbuf1, c_dex); ++ src_u0 = __lasx_xvpermi_q(src_u0, src_v0, 0x02); ++ src_u1 = __lasx_xvpermi_q(src_u1, src_v1, 0x02); ++ src_y = __lasx_xvsrari_h(src_y, 7); ++ u = __lasx_xvaddwev_w_h(src_u0, src_u1); ++ v = __lasx_xvaddwod_w_h(src_u0, src_u1); ++ y_l = __lasx_xvsllwil_w_h(src_y, 0); ++ y_h = __lasx_xvexth_w_h(src_y); ++ u = __lasx_xvsrari_w(u, 8); ++ v = __lasx_xvsrari_w(v, 8); + u = __lasx_xvadd_w(u, headroom); + v = __lasx_xvadd_w(v, headroom); +- WRITE_YUV2RGB_16(y_l, y_h, u, v, count, r, g, b, y, target, Y1, Y2, U, V); ++ WRITE_YUV2RGB(y_l, y_l, u, u, 0, 1, 0, 4); ++ WRITE_YUV2RGB(y_l, y_l, v, v, 2, 3, 0, 4); ++ WRITE_YUV2RGB(y_h, y_h, u, u, 0, 1, 1, 5); ++ WRITE_YUV2RGB(y_h, y_h, v, v, 2, 3, 1, 5); ++ WRITE_YUV2RGB(y_l, y_l, u, u, 4, 5, 2, 6); ++ WRITE_YUV2RGB(y_l, y_l, v, v, 6, 7, 2, 6); ++ WRITE_YUV2RGB(y_h, y_h, u, u, 4, 5, 3, 7); ++ WRITE_YUV2RGB(y_h, y_h, v, v, 6, 7, 3, 7); + } +- if (dstW - i >= 8){ ++ if (dstW - i >= 8) { + int Y1, Y2, U, V; ++ int i_dex = i << 1; + __m256i src_y, src_u0, src_v0, src_u1, src_v1; +- __m256i y_l, u, v; ++ __m256i uv; + +- src_y = __lasx_xvld(buf0 + i, 0); ++ src_y = __lasx_xvldx(buf0, i_dex); + src_u0 = __lasx_xvldrepl_d((ubuf0 + count), 0); + src_v0 = __lasx_xvldrepl_d((vbuf0 + count), 0); + src_u1 = __lasx_xvldrepl_d((ubuf1 + count), 0); + src_v1 = __lasx_xvldrepl_d((vbuf1 + count), 0); + +- src_y = __lasx_xvpermi_d(src_y, 0xD8); +- y_l = __lasx_xvaddwl_w_h(src_y, bias_64); +- DUP2_ARG2(__lasx_xvaddwl_w_h, src_u0, src_u1, src_v0, src_v1, u, v); +- u = __lasx_xvadd_w(u, bias_128); +- v = __lasx_xvadd_w(v, bias_128); +- y_l = __lasx_xvsrai_w(y_l, 7); +- u = __lasx_xvsrai_w(u, 8); +- v = __lasx_xvsrai_w(v, 8); +- u = __lasx_xvadd_w(u, headroom); +- v = __lasx_xvadd_w(v, headroom); +- WRITE_YUV2RGBL_8(y_l, u, v, count, r, g, b, y, target, Y1, Y2, U, V); ++ src_u0 = __lasx_xvilvl_h(src_u1, src_u0); ++ src_v0 = __lasx_xvilvl_h(src_v1, src_v0); ++ src_u0 = __lasx_xvpermi_q(src_u0, src_v0, 0x02); ++ src_y = __lasx_xvsrari_h(src_y, 7); ++ uv = __lasx_xvhaddw_w_h(src_u0, src_u0); ++ src_y = __lasx_vext2xv_w_h(src_y); ++ uv = __lasx_xvsrari_w(uv, 8); ++ uv = __lasx_xvadd_w(uv, headroom); ++ WRITE_YUV2RGB(src_y, src_y, uv, uv, 0, 1, 0, 4); ++ WRITE_YUV2RGB(src_y, src_y, uv, uv, 2, 3, 1, 5); ++ WRITE_YUV2RGB(src_y, src_y, uv, uv, 4, 5, 2, 6); ++ WRITE_YUV2RGB(src_y, src_y, uv, uv, 6, 7, 3, 7); + i += 8; + } + for (; count < len_count; count++) { +@@ -1423,128 +997,24 @@ static av_always_inline void yuv2rgb_write_full(SwsContext *c, + B = __lasx_xvmadd_w(y, u, u2b); \ + } + +-#define WRITE_FULL_L_A(r, g, b, a, c, dest, i, R, A, G, B, \ +- y, target, hasAlpha, err) \ +-{ \ +- R = __lasx_xvpickve2gr_w(r, 0); \ +- G = __lasx_xvpickve2gr_w(g, 0); \ +- B = __lasx_xvpickve2gr_w(b, 0); \ +- A = __lasx_xvpickve2gr_w(a, 0); \ +- if (A & 0x100) \ +- A = av_clip_uint8(A); \ +- yuv2rgb_write_full(c, dest, i, R, A, G, B, y, target, hasAlpha, err); \ +- dest += step; \ +- R = __lasx_xvpickve2gr_w(r, 1); \ +- G = __lasx_xvpickve2gr_w(g, 1); \ +- B = __lasx_xvpickve2gr_w(b, 1); \ +- A = __lasx_xvpickve2gr_w(a, 1); \ +- if (A & 0x100) \ +- A = av_clip_uint8(A); \ +- yuv2rgb_write_full(c, dest, i + 1, R, A, G, B, y, target, hasAlpha, err); \ +- dest += step; \ +- R = __lasx_xvpickve2gr_w(r, 2); \ +- G = __lasx_xvpickve2gr_w(g, 2); \ +- B = __lasx_xvpickve2gr_w(b, 2); \ +- A = __lasx_xvpickve2gr_w(a, 2); \ +- if (A & 0x100) \ +- A = av_clip_uint8(A); \ +- yuv2rgb_write_full(c, dest, i + 2, R, A, G, B, y, target, hasAlpha, err); \ +- dest += step; \ +- R = __lasx_xvpickve2gr_w(r, 3); \ +- G = __lasx_xvpickve2gr_w(g, 3); \ +- B = __lasx_xvpickve2gr_w(b, 3); \ +- A = __lasx_xvpickve2gr_w(a, 3); \ +- if (A & 0x100) \ +- A = av_clip_uint8(A); \ +- yuv2rgb_write_full(c, dest, i + 3, R, A, G, B, y, target, hasAlpha, err); \ +- dest += step; \ +-} +- +-#define WRITE_FULL_H_A(r, g, b, a, c, dest, i, R, A, G, B, \ +- y, target, hasAlpha, err) \ +-{ \ +- R = __lasx_xvpickve2gr_w(r, 4); \ +- G = __lasx_xvpickve2gr_w(g, 4); \ +- B = __lasx_xvpickve2gr_w(b, 4); \ +- A = __lasx_xvpickve2gr_w(a, 4); \ +- if (A & 0x100) \ +- A = av_clip_uint8(A); \ +- yuv2rgb_write_full(c, dest, i, R, A, G, B, y, target, hasAlpha, err); \ +- dest += step; \ +- R = __lasx_xvpickve2gr_w(r, 5); \ +- G = __lasx_xvpickve2gr_w(g, 5); \ +- B = __lasx_xvpickve2gr_w(b, 5); \ +- A = __lasx_xvpickve2gr_w(a, 5); \ +- if (A & 0x100) \ +- A = av_clip_uint8(A); \ +- yuv2rgb_write_full(c, dest, i + 1, R, A, G, B, y, target, hasAlpha, err); \ +- dest += step; \ +- R = __lasx_xvpickve2gr_w(r, 6); \ +- G = __lasx_xvpickve2gr_w(g, 6); \ +- B = __lasx_xvpickve2gr_w(b, 6); \ +- A = __lasx_xvpickve2gr_w(a, 6); \ +- if (A & 0x100) \ +- A = av_clip_uint8(A); \ +- yuv2rgb_write_full(c, dest, i + 2, R, A, G, B, y, target, hasAlpha, err); \ +- dest += step; \ +- R = __lasx_xvpickve2gr_w(r, 7); \ +- G = __lasx_xvpickve2gr_w(g, 7); \ +- B = __lasx_xvpickve2gr_w(b, 7); \ +- A = __lasx_xvpickve2gr_w(a, 7); \ +- if (A & 0x100) \ +- A = av_clip_uint8(A); \ +- yuv2rgb_write_full(c, dest, i + 3, R, A, G, B, y, target, hasAlpha, err); \ +- dest += step; \ ++#define WRITE_FULL_A(r, g, b, a, t1, s) \ ++{ \ ++ R = __lasx_xvpickve2gr_w(r, t1); \ ++ G = __lasx_xvpickve2gr_w(g, t1); \ ++ B = __lasx_xvpickve2gr_w(b, t1); \ ++ A = __lasx_xvpickve2gr_w(a, t1); \ ++ if (A & 0x100) \ ++ A = av_clip_uint8(A); \ ++ yuv2rgb_write_full(c, dest, i + s, R, A, G, B, y, target, hasAlpha, err);\ ++ dest += step; \ + } + +- +-#define WRITE_FULL_L(r, g, b, c, dest, i, R, G, B, \ +- y, target, hasAlpha, err) \ ++#define WRITE_FULL(r, g, b, t1, s) \ + { \ +- R = __lasx_xvpickve2gr_w(r, 0); \ +- G = __lasx_xvpickve2gr_w(g, 0); \ +- B = __lasx_xvpickve2gr_w(b, 0); \ +- yuv2rgb_write_full(c, dest, i, R, 0, G, B, y, target, hasAlpha, err); \ +- dest += step; \ +- R = __lasx_xvpickve2gr_w(r, 1); \ +- G = __lasx_xvpickve2gr_w(g, 1); \ +- B = __lasx_xvpickve2gr_w(b, 1); \ +- yuv2rgb_write_full(c, dest, i + 1, R, 0, G, B, y, target, hasAlpha, err); \ +- dest += step; \ +- R = __lasx_xvpickve2gr_w(r, 2); \ +- G = __lasx_xvpickve2gr_w(g, 2); \ +- B = __lasx_xvpickve2gr_w(b, 2); \ +- yuv2rgb_write_full(c, dest, i + 2, R, 0, G, B, y, target, hasAlpha, err); \ +- dest += step; \ +- R = __lasx_xvpickve2gr_w(r, 3); \ +- G = __lasx_xvpickve2gr_w(g, 3); \ +- B = __lasx_xvpickve2gr_w(b, 3); \ +- yuv2rgb_write_full(c, dest, i + 3, R, 0, G, B, y, target, hasAlpha, err); \ +- dest += step; \ +-} +- +-#define WRITE_FULL_H(r, g, b, c, dest, i, R, G, B, \ +- y, target, hasAlpha, err) \ +-{ \ +- R = __lasx_xvpickve2gr_w(r, 4); \ +- G = __lasx_xvpickve2gr_w(g, 4); \ +- B = __lasx_xvpickve2gr_w(b, 4); \ +- yuv2rgb_write_full(c, dest, i, R, 0, G, B, y, target, hasAlpha, err); \ +- dest += step; \ +- R = __lasx_xvpickve2gr_w(r, 5); \ +- G = __lasx_xvpickve2gr_w(g, 5); \ +- B = __lasx_xvpickve2gr_w(b, 5); \ +- yuv2rgb_write_full(c, dest, i + 1, R, 0, G, B, y, target, hasAlpha, err); \ +- dest += step; \ +- R = __lasx_xvpickve2gr_w(r, 6); \ +- G = __lasx_xvpickve2gr_w(g, 6); \ +- B = __lasx_xvpickve2gr_w(b, 6); \ +- yuv2rgb_write_full(c, dest, i + 2, R, 0, G, B, y, target, hasAlpha, err); \ +- dest += step; \ +- R = __lasx_xvpickve2gr_w(r, 7); \ +- G = __lasx_xvpickve2gr_w(g, 7); \ +- B = __lasx_xvpickve2gr_w(b, 7); \ +- yuv2rgb_write_full(c, dest, i + 3, R, 0, G, B, y, target, hasAlpha, err); \ ++ R = __lasx_xvpickve2gr_w(r, t1); \ ++ G = __lasx_xvpickve2gr_w(g, t1); \ ++ B = __lasx_xvpickve2gr_w(b, t1); \ ++ yuv2rgb_write_full(c, dest, i + s, R, 0, G, B, y, target, hasAlpha, err); \ + dest += step; \ + } + +@@ -1554,10 +1024,12 @@ yuv2rgb_full_X_template_lasx(SwsContext *c, const int16_t *lumFilter, + const int16_t *chrFilter, const int16_t **chrUSrc, + const int16_t **chrVSrc, int chrFilterSize, + const int16_t **alpSrc, uint8_t *dest, +- int dstW, int y, enum AVPixelFormat target, int hasAlpha) ++ int dstW, int y, enum AVPixelFormat target, ++ int hasAlpha) + { + int i, j, B, G, R, A; +- int step = (target == AV_PIX_FMT_RGB24 || target == AV_PIX_FMT_BGR24) ? 3 : 4; ++ int step = (target == AV_PIX_FMT_RGB24 || ++ target == AV_PIX_FMT_BGR24) ? 3 : 4; + int err[4] = {0}; + int a_temp = 1 << 18; + int templ = 1 << 9; +@@ -1573,111 +1045,144 @@ yuv2rgb_full_X_template_lasx(SwsContext *c, const int16_t *lumFilter, + + for (i = 0; i < len; i += 16) { + __m256i l_src, u_src, v_src; +- __m256i y_l, y_h, u_l, u_h, v_l, v_h, temp; +- __m256i R_l, R_h, G_l, G_h, B_l, B_h; ++ __m256i y_ev, y_od, u_ev, u_od, v_ev, v_od, temp; ++ __m256i R_ev, R_od, G_ev, G_od, B_ev, B_od; ++ int n = i << 1; + +- y_l = y_h = __lasx_xvreplgr2vr_w(templ); +- u_l = u_h = v_l = v_h = __lasx_xvreplgr2vr_w(tempc); ++ y_ev = y_od = __lasx_xvreplgr2vr_w(templ); ++ u_ev = u_od = v_ev = v_od = __lasx_xvreplgr2vr_w(tempc); + for (j = 0; j < lumFilterSize; j++) { + temp = __lasx_xvldrepl_h((lumFilter + j), 0); +- l_src = __lasx_xvld(lumSrc[j] + i, 0); +- y_l = __lasx_xvmaddwl_w_h(y_l, l_src, temp); +- y_h = __lasx_xvmaddwh_w_h(y_h, l_src, temp); ++ l_src = __lasx_xvldx(lumSrc[j], n); ++ y_ev = __lasx_xvmaddwev_w_h(y_ev, l_src, temp); ++ y_od = __lasx_xvmaddwod_w_h(y_od, l_src, temp); + } + for (j = 0; j < chrFilterSize; j++) { + temp = __lasx_xvldrepl_h((chrFilter + j), 0); +- DUP2_ARG2(__lasx_xvld, chrUSrc[j] + i, 0, chrVSrc[j] + i, 0, u_src, v_src); +- DUP2_ARG3(__lasx_xvmaddwl_w_h, u_l, u_src, temp, v_l, v_src, temp, u_l, v_l); +- DUP2_ARG3(__lasx_xvmaddwh_w_h, u_h, u_src, temp, v_h, v_src, temp, u_h, v_h); ++ DUP2_ARG2(__lasx_xvldx, chrUSrc[j], n, chrVSrc[j], n, ++ u_src, v_src); ++ DUP2_ARG3(__lasx_xvmaddwev_w_h, u_ev, u_src, temp, v_ev, ++ v_src, temp, u_ev, v_ev); ++ DUP2_ARG3(__lasx_xvmaddwod_w_h, u_od, u_src, temp, v_od, ++ v_src, temp, u_od, v_od); + } +- y_l = __lasx_xvsrai_w(y_l, 10); +- y_h = __lasx_xvsrai_w(y_h, 10); +- u_l = __lasx_xvsrai_w(u_l, 10); +- u_h = __lasx_xvsrai_w(u_h, 10); +- v_l = __lasx_xvsrai_w(v_l, 10); +- v_h = __lasx_xvsrai_w(v_h, 10); +- YUVTORGB(y_l, u_l, v_l, R_l, G_l, B_l, offset, coeff, ++ y_ev = __lasx_xvsrai_w(y_ev, 10); ++ y_od = __lasx_xvsrai_w(y_od, 10); ++ u_ev = __lasx_xvsrai_w(u_ev, 10); ++ u_od = __lasx_xvsrai_w(u_od, 10); ++ v_ev = __lasx_xvsrai_w(v_ev, 10); ++ v_od = __lasx_xvsrai_w(v_od, 10); ++ YUVTORGB(y_ev, u_ev, v_ev, R_ev, G_ev, B_ev, offset, coeff, + y_temp, v2r, v2g, u2g, u2b); +- YUVTORGB(y_h, u_h, v_h, R_h, G_h, B_h, offset, coeff, ++ YUVTORGB(y_od, u_od, v_od, R_od, G_od, B_od, offset, coeff, + y_temp, v2r, v2g, u2g, u2b); + + if (hasAlpha) { +- __m256i a_src, a_l, a_h; ++ __m256i a_src, a_ev, a_od; + +- a_l = a_h = __lasx_xvreplgr2vr_w(a_temp); ++ a_ev = a_od = __lasx_xvreplgr2vr_w(a_temp); + for (j = 0; j < lumFilterSize; j++) { + temp = __lasx_xvldrepl_h(lumFilter + j, 0); +- a_src = __lasx_xvld(alpSrc[j] + i, 0); +- a_l = __lasx_xvmaddwl_w_h(a_l, a_src, temp); +- a_h = __lasx_xvmaddwh_w_h(a_h, a_src, temp); ++ a_src = __lasx_xvldx(alpSrc[j], n); ++ a_ev = __lasx_xvmaddwev_w_h(a_ev, a_src, temp); ++ a_od = __lasx_xvmaddwod_w_h(a_od, a_src, temp); + } +- a_h = __lasx_xvsrai_w(a_h, 19); +- a_l = __lasx_xvsrai_w(a_l, 19); +- WRITE_FULL_L_A(R_l, G_l, B_l, a_l, c, dest, i, R, A, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_L_A(R_h, G_h, B_h, a_h, c, dest, i + 4, R, A, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H_A(R_l, G_l, B_l, a_l, c, dest, i + 8, R, A, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H_A(R_h, G_h, B_h, a_h, c, dest, i + 12, R, A, G, B, +- y, target, hasAlpha, err); ++ a_ev = __lasx_xvsrai_w(a_ev, 19); ++ a_od = __lasx_xvsrai_w(a_od, 19); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 0, 0); ++ WRITE_FULL_A(R_od, G_od, B_od, a_od, 0, 1); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 1, 2); ++ WRITE_FULL_A(R_od, G_od, B_od, a_od, 1, 3); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 2, 4); ++ WRITE_FULL_A(R_od, G_od, B_od, a_od, 2, 5); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 3, 6); ++ WRITE_FULL_A(R_od, G_od, B_od, a_od, 3, 7); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 4, 8); ++ WRITE_FULL_A(R_od, G_od, B_od, a_od, 4, 9); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 5, 10); ++ WRITE_FULL_A(R_od, G_od, B_od, a_od, 5, 11); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 6, 12); ++ WRITE_FULL_A(R_od, G_od, B_od, a_od, 6, 13); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 7, 14); ++ WRITE_FULL_A(R_od, G_od, B_od, a_od, 7, 15); + } else { +- WRITE_FULL_L(R_l, G_l, B_l, c, dest, i, R, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_L(R_h, G_h, B_h, c, dest, i + 4, R, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H(R_l, G_l, B_l, c, dest, i + 8, R, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H(R_h, G_h, B_h, c, dest, i + 12, R, G, B, +- y, target, hasAlpha, err); ++ WRITE_FULL(R_ev, G_ev, B_ev, 0, 0); ++ WRITE_FULL(R_od, G_od, B_od, 0, 1); ++ WRITE_FULL(R_ev, G_ev, B_ev, 1, 2); ++ WRITE_FULL(R_od, G_od, B_od, 1, 3); ++ WRITE_FULL(R_ev, G_ev, B_ev, 2, 4); ++ WRITE_FULL(R_od, G_od, B_od, 2, 5); ++ WRITE_FULL(R_ev, G_ev, B_ev, 3, 6); ++ WRITE_FULL(R_od, G_od, B_od, 3, 7); ++ WRITE_FULL(R_ev, G_ev, B_ev, 4, 8); ++ WRITE_FULL(R_od, G_od, B_od, 4, 9); ++ WRITE_FULL(R_ev, G_ev, B_ev, 5, 10); ++ WRITE_FULL(R_od, G_od, B_od, 5, 11); ++ WRITE_FULL(R_ev, G_ev, B_ev, 6, 12); ++ WRITE_FULL(R_od, G_od, B_od, 6, 13); ++ WRITE_FULL(R_ev, G_ev, B_ev, 7, 14); ++ WRITE_FULL(R_od, G_od, B_od, 7, 15); + } + } + if (dstW - i >= 8) { + __m256i l_src, u_src, v_src; +- __m256i y_l, u_l, v_l, temp; +- __m256i R_l, G_l, B_l; ++ __m256i y_ev, u_ev, v_ev, uv, temp; ++ __m256i R_ev, G_ev, B_ev; ++ int n = i << 1; + +- y_l = __lasx_xvreplgr2vr_w(templ); +- u_l = v_l = __lasx_xvreplgr2vr_w(tempc); ++ y_ev = __lasx_xvreplgr2vr_w(templ); ++ u_ev = v_ev = __lasx_xvreplgr2vr_w(tempc); + for (j = 0; j < lumFilterSize; j++) { + temp = __lasx_xvldrepl_h((lumFilter + j), 0); +- l_src = __lasx_xvld(lumSrc[j] + i, 0); ++ l_src = __lasx_xvldx(lumSrc[j], n); + l_src = __lasx_xvpermi_d(l_src, 0xD8); +- y_l = __lasx_xvmaddwl_w_h(y_l, l_src, temp); ++ l_src = __lasx_xvilvl_h(l_src, l_src); ++ y_ev = __lasx_xvmaddwev_w_h(y_ev, l_src, temp); + } + for (j = 0; j < chrFilterSize; j++) { + temp = __lasx_xvldrepl_h((chrFilter + j), 0); +- DUP2_ARG2(__lasx_xvld, chrUSrc[j] + i, 0, chrVSrc[j] + i, 0, u_src, v_src); ++ DUP2_ARG2(__lasx_xvldx, chrUSrc[j], n, chrVSrc[j], n, u_src, v_src); + u_src = __lasx_xvpermi_d(u_src, 0xD8); + v_src = __lasx_xvpermi_d(v_src, 0xD8); +- DUP2_ARG3(__lasx_xvmaddwl_w_h, u_l, u_src, temp, v_l, v_src, temp, u_l, v_l); ++ uv = __lasx_xvilvl_h(v_src, u_src); ++ u_ev = __lasx_xvmaddwev_w_h(u_ev, uv, temp); ++ v_ev = __lasx_xvmaddwod_w_h(v_ev, uv, temp); + } +- y_l = __lasx_xvsrai_w(y_l, 10); +- u_l = __lasx_xvsrai_w(u_l, 10); +- v_l = __lasx_xvsrai_w(v_l, 10); +- YUVTORGB(y_l, u_l, v_l, R_l, G_l, B_l, offset, coeff, ++ y_ev = __lasx_xvsrai_w(y_ev, 10); ++ u_ev = __lasx_xvsrai_w(u_ev, 10); ++ v_ev = __lasx_xvsrai_w(v_ev, 10); ++ YUVTORGB(y_ev, u_ev, v_ev, R_ev, G_ev, B_ev, offset, coeff, + y_temp, v2r, v2g, u2g, u2b); + + if (hasAlpha) { +- __m256i a_src, a_l; ++ __m256i a_src, a_ev; + +- a_l = __lasx_xvreplgr2vr_w(a_temp); ++ a_ev = __lasx_xvreplgr2vr_w(a_temp); + for (j = 0; j < lumFilterSize; j++) { + temp = __lasx_xvldrepl_h(lumFilter + j, 0); +- a_src = __lasx_xvld(alpSrc[j] + i, 0); ++ a_src = __lasx_xvldx(alpSrc[j], n); + a_src = __lasx_xvpermi_d(a_src, 0xD8); +- a_l = __lasx_xvmaddwl_w_h(a_l, a_src, temp); ++ a_src = __lasx_xvilvl_h(a_src, a_src); ++ a_ev = __lasx_xvmaddwev_w_h(a_ev, a_src, temp); + } +- a_l = __lasx_xvsrai_w(a_l, 19); +- WRITE_FULL_L_A(R_l, G_l, B_l, a_l, c, dest, i, R, A, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H_A(R_l, G_l, B_l, a_l, c, dest, i + 4, R, A, G, B, +- y, target, hasAlpha, err); ++ a_ev = __lasx_xvsrai_w(a_ev, 19); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 0, 0); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 1, 1); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 2, 2); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 3, 3); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 4, 4); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 5, 5); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 6, 6); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 7, 7); + } else { +- WRITE_FULL_L(R_l, G_l, B_l, c, dest, i, R, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H(R_l, G_l, B_l, c, dest, i + 4, R, G, B, +- y, target, hasAlpha, err); ++ WRITE_FULL(R_ev, G_ev, B_ev, 0, 0); ++ WRITE_FULL(R_ev, G_ev, B_ev, 1, 1); ++ WRITE_FULL(R_ev, G_ev, B_ev, 2, 2); ++ WRITE_FULL(R_ev, G_ev, B_ev, 3, 3); ++ WRITE_FULL(R_ev, G_ev, B_ev, 4, 4); ++ WRITE_FULL(R_ev, G_ev, B_ev, 5, 5); ++ WRITE_FULL(R_ev, G_ev, B_ev, 6, 6); ++ WRITE_FULL(R_ev, G_ev, B_ev, 7, 7); + } + i += 8; + } +@@ -1740,7 +1245,8 @@ yuv2rgb_full_2_template_lasx(SwsContext *c, const int16_t *buf[2], + int ytemp = 1 << 21; + int len = dstW - 15; + int i, R, G, B, A; +- int step = (target == AV_PIX_FMT_RGB24 || target == AV_PIX_FMT_BGR24) ? 3 : 4; ++ int step = (target == AV_PIX_FMT_RGB24 || ++ target == AV_PIX_FMT_BGR24) ? 3 : 4; + __m256i v_uvalpha1 = __lasx_xvreplgr2vr_w(uvalpha1); + __m256i v_yalpha1 = __lasx_xvreplgr2vr_w(yalpha1); + __m256i v_uvalpha = __lasx_xvreplgr2vr_w(uvalpha); +@@ -1763,20 +1269,17 @@ yuv2rgb_full_2_template_lasx(SwsContext *c, const int16_t *buf[2], + __m256i v0_l, v0_h, u1_l, u1_h, v1_l, v1_h; + __m256i y_l, y_h, v_l, v_h, u_l, u_h; + __m256i R_l, R_h, G_l, G_h, B_l, B_h; +- +- DUP4_ARG2(__lasx_xvld, buf0 + i, 0, buf1 + i, 0, ubuf0 + i, 0, ubuf1 + i, 0, +- b0, b1, ub0, ub1); +- DUP2_ARG2(__lasx_xvld, vbuf0 + i, 0, vbuf1 + i, 0, vb0 , vb1); +- DUP2_ARG1(__lasx_vext2xv_w_h, b0, b1, y0_l, y1_l); +- DUP4_ARG1(__lasx_vext2xv_w_h, ub0, ub1, vb0, vb1, u0_l, u1_l, v0_l, v1_l); +- b0 = __lasx_xvpermi_d(b0, 0x4E); +- b1 = __lasx_xvpermi_d(b1, 0x4E); +- ub0 = __lasx_xvpermi_d(ub0, 0x4E); +- ub1 = __lasx_xvpermi_d(ub1, 0x4E); +- vb0 = __lasx_xvpermi_d(vb0, 0x4E); +- vb1 = __lasx_xvpermi_d(vb1, 0x4E); +- DUP2_ARG1(__lasx_vext2xv_w_h, b0, b1, y0_h, y1_h); +- DUP4_ARG1(__lasx_vext2xv_w_h, ub0, ub1, vb0, vb1, u0_h, u1_h, v0_h, v1_h); ++ int n = i << 1; ++ ++ DUP4_ARG2(__lasx_xvldx, buf0, n, buf1, n, ubuf0, ++ n, ubuf1, n, b0, b1, ub0, ub1); ++ DUP2_ARG2(__lasx_xvldx, vbuf0, n, vbuf1, n, vb0 , vb1); ++ DUP2_ARG2(__lasx_xvsllwil_w_h, b0, 0, b1, 0, y0_l, y1_l); ++ DUP4_ARG2(__lasx_xvsllwil_w_h, ub0, 0, ub1, 0, vb0, 0, vb1, 0, ++ u0_l, u1_l, v0_l, v1_l); ++ DUP2_ARG1(__lasx_xvexth_w_h, b0, b1, y0_h, y1_h); ++ DUP4_ARG1(__lasx_xvexth_w_h, ub0, ub1, vb0, vb1, ++ u0_h, u1_h, v0_h, v1_h); + y0_l = __lasx_xvmul_w(y0_l, v_yalpha1); + y0_h = __lasx_xvmul_w(y0_h, v_yalpha1); + u0_l = __lasx_xvmul_w(u0_l, v_uvalpha1); +@@ -1808,34 +1311,48 @@ yuv2rgb_full_2_template_lasx(SwsContext *c, const int16_t *buf[2], + __m256i a0, a1, a0_l, a0_h; + __m256i a_l, a_h, a1_l, a1_h; + +- DUP2_ARG2(__lasx_xvld, abuf0 + i, 0, abuf1 + i, 0, a0, a1); +- DUP2_ARG1(__lasx_vext2xv_w_h, a0, a1, a0_l, a1_l); +- a0 = __lasx_xvpermi_d(a0, 0x4E); +- a1 = __lasx_xvpermi_d(a1, 0x4E); +- DUP2_ARG1(__lasx_vext2xv_w_h, a0, a1, a0_h, a1_h); ++ DUP2_ARG2(__lasx_xvldx, abuf0, n, abuf1, n, a0, a1); ++ DUP2_ARG2(__lasx_xvsllwil_w_h, a0, 0, a1, 0, a0_l, a1_l); ++ DUP2_ARG1(__lasx_xvexth_w_h, a0, a1, a0_h, a1_h); + a_l = __lasx_xvmadd_w(a_bias, a0_l, v_yalpha1); + a_h = __lasx_xvmadd_w(a_bias, a0_h, v_yalpha1); + a_l = __lasx_xvmadd_w(a_l, v_yalpha, a1_l); + a_h = __lasx_xvmadd_w(a_h, v_yalpha, a1_h); + a_l = __lasx_xvsrai_w(a_l, 19); + a_h = __lasx_xvsrai_w(a_h, 19); +- WRITE_FULL_L_A(R_l, G_l, B_l, a_l, c, dest, i, R, A, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H_A(R_l, G_l, B_l, a_l, c, dest, i + 4, R, A, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_L_A(R_h, G_h, B_h, a_h, c, dest, i + 8, R, A, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H_A(R_h, G_h, B_h, a_h, c, dest, i + 12, R, A, G, B, +- y, target, hasAlpha, err); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 0, 0); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 1, 1); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 2, 2); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 3, 3); ++ WRITE_FULL_A(R_h, G_h, B_h, a_h, 0, 4); ++ WRITE_FULL_A(R_h, G_h, B_h, a_h, 1, 5); ++ WRITE_FULL_A(R_h, G_h, B_h, a_h, 2, 6); ++ WRITE_FULL_A(R_h, G_h, B_h, a_h, 3, 7); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 4, 8); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 5, 9); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 6, 10); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 7, 11); ++ WRITE_FULL_A(R_h, G_h, B_h, a_h, 4, 12); ++ WRITE_FULL_A(R_h, G_h, B_h, a_h, 5, 13); ++ WRITE_FULL_A(R_h, G_h, B_h, a_h, 6, 14); ++ WRITE_FULL_A(R_h, G_h, B_h, a_h, 7, 15); + } else { +- WRITE_FULL_L(R_l, G_l, B_l, c, dest, i, R, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H(R_l, G_l, B_l, c, dest, i + 4, R, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_L(R_h, G_h, B_h, c, dest, i + 8, R, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H(R_h, G_h, B_h, c, dest, i + 12, R, G, B, +- y, target, hasAlpha, err); ++ WRITE_FULL(R_l, G_l, B_l, 0, 0); ++ WRITE_FULL(R_l, G_l, B_l, 1, 1); ++ WRITE_FULL(R_l, G_l, B_l, 2, 2); ++ WRITE_FULL(R_l, G_l, B_l, 3, 3); ++ WRITE_FULL(R_h, G_h, B_h, 0, 4); ++ WRITE_FULL(R_h, G_h, B_h, 1, 5); ++ WRITE_FULL(R_h, G_h, B_h, 2, 6); ++ WRITE_FULL(R_h, G_h, B_h, 3, 7); ++ WRITE_FULL(R_l, G_l, B_l, 4, 8); ++ WRITE_FULL(R_l, G_l, B_l, 5, 9); ++ WRITE_FULL(R_l, G_l, B_l, 6, 10); ++ WRITE_FULL(R_l, G_l, B_l, 7, 11); ++ WRITE_FULL(R_h, G_h, B_h, 4, 12); ++ WRITE_FULL(R_h, G_h, B_h, 5, 13); ++ WRITE_FULL(R_h, G_h, B_h, 6, 14); ++ WRITE_FULL(R_h, G_h, B_h, 7, 15); + } + } + if (dstW - i >= 8) { +@@ -1844,12 +1361,14 @@ yuv2rgb_full_2_template_lasx(SwsContext *c, const int16_t *buf[2], + __m256i v0_l, u1_l, v1_l; + __m256i y_l, u_l, v_l; + __m256i R_l, G_l, B_l; ++ int n = i << 1; + +- DUP4_ARG2(__lasx_xvld, buf0 + i, 0, buf1 + i, 0, ubuf0 + i, 0, ubuf1 + i, 0, +- b0, b1, ub0, ub1); +- DUP2_ARG2(__lasx_xvld, vbuf0 + i, 0, vbuf1 + i, 0, vb0, vb1); ++ DUP4_ARG2(__lasx_xvldx, buf0, n, buf1, n, ubuf0, n, ++ ubuf1, n, b0, b1, ub0, ub1); ++ DUP2_ARG2(__lasx_xvldx, vbuf0, n, vbuf1, n, vb0, vb1); + DUP2_ARG1(__lasx_vext2xv_w_h, b0, b1, y0_l, y1_l); +- DUP4_ARG1(__lasx_vext2xv_w_h, ub0, ub1, vb0, vb1, u0_l, u1_l, v0_l, v1_l); ++ DUP4_ARG1(__lasx_vext2xv_w_h, ub0, ub1, vb0, vb1, ++ u0_l, u1_l, v0_l, v1_l); + y0_l = __lasx_xvmul_w(y0_l, v_yalpha1); + u0_l = __lasx_xvmul_w(u0_l, v_uvalpha1); + v0_l = __lasx_xvmul_w(v0_l, v_uvalpha1); +@@ -1868,25 +1387,33 @@ yuv2rgb_full_2_template_lasx(SwsContext *c, const int16_t *buf[2], + __m256i a0, a1, a0_l; + __m256i a_l, a1_l; + +- DUP2_ARG2(__lasx_xvld, abuf0 + i, 0, abuf1 + i, 0, a0, a1); ++ DUP2_ARG2(__lasx_xvldx, abuf0, n, abuf1, n, a0, a1); + DUP2_ARG1(__lasx_vext2xv_w_h, a0, a1, a0_l, a1_l); + a_l = __lasx_xvmadd_w(a_bias, a0_l, v_yalpha1); + a_l = __lasx_xvmadd_w(a_l, v_yalpha, a1_l); + a_l = __lasx_xvsrai_w(a_l, 19); +- WRITE_FULL_L_A(R_l, G_l, B_l, a_l, c, dest, i, R, A, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H_A(R_l, G_l, B_l, a_l, c, dest, i + 4, R, A, G, B, +- y, target, hasAlpha, err); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 0, 0); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 1, 1); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 2, 2); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 3, 3); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 4, 4); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 5, 5); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 6, 6); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 7, 7); + } else { +- WRITE_FULL_L(R_l, G_l, B_l, c, dest, i, R, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H(R_l, G_l, B_l, c, dest, i + 4, R, G, B, +- y, target, hasAlpha, err); ++ WRITE_FULL(R_l, G_l, B_l, 0, 0); ++ WRITE_FULL(R_l, G_l, B_l, 1, 1); ++ WRITE_FULL(R_l, G_l, B_l, 2, 2); ++ WRITE_FULL(R_l, G_l, B_l, 3, 3); ++ WRITE_FULL(R_l, G_l, B_l, 4, 4); ++ WRITE_FULL(R_l, G_l, B_l, 5, 5); ++ WRITE_FULL(R_l, G_l, B_l, 6, 6); ++ WRITE_FULL(R_l, G_l, B_l, 7, 7); + } + i += 8; + } + for (; i < dstW; i++){ +- int Y = ( buf0[i] * yalpha1 + buf1[i] * yalpha ) >> 10; //FIXME rounding ++ int Y = ( buf0[i] * yalpha1 + buf1[i] * yalpha ) >> 10; + int U = (ubuf0[i] * uvalpha1 + ubuf1[i] * uvalpha- uvtemp) >> 10; + int V = (vbuf0[i] * uvalpha1 + vbuf1[i] * uvalpha- uvtemp) >> 10; + +@@ -1925,7 +1452,6 @@ yuv2rgb_full_1_template_lasx(SwsContext *c, const int16_t *buf0, + int ytemp = 1 << 21; + int bias_int = 64; + int len = dstW - 15; +- __m256i bias = __lasx_xvreplgr2vr_w(bias_int); + __m256i y_temp = __lasx_xvreplgr2vr_w(ytemp); + YUVTORGB_SETUP + +@@ -1933,24 +1459,22 @@ yuv2rgb_full_1_template_lasx(SwsContext *c, const int16_t *buf0, + || target == AV_PIX_FMT_BGR8 || target == AV_PIX_FMT_RGB8) + step = 1; + if (uvalpha < 2048) { +- int uvtemp = 128 << 7; +- __m256i uv = __lasx_xvreplgr2vr_w(uvtemp); ++ int uvtemp = 128 << 7; ++ __m256i uv = __lasx_xvreplgr2vr_w(uvtemp); ++ __m256i bias = __lasx_xvreplgr2vr_w(bias_int); + + for (i = 0; i < len; i += 16) { + __m256i b, ub, vb, ub_l, ub_h, vb_l, vb_h; + __m256i y_l, y_h, u_l, u_h, v_l, v_h; + __m256i R_l, R_h, G_l, G_h, B_l, B_h; +- +- DUP2_ARG2(__lasx_xvld, buf0 + i, 0, ubuf0 + i, 0, b, ub); +- vb = __lasx_xvld(vbuf0 + i, 0); +- y_l = __lasx_vext2xv_w_h(b); +- DUP2_ARG1(__lasx_vext2xv_w_h, ub, vb, ub_l, vb_l); +- b = __lasx_xvpermi_d(b, 0x4E); +- ub = __lasx_xvpermi_d(ub, 0x4E); +- vb = __lasx_xvpermi_d(vb, 0x4E); +- y_h = __lasx_vext2xv_w_h(b); +- DUP2_ARG1(__lasx_vext2xv_w_h, ub, vb, ub_h, vb_h); +- y_l = __lasx_xvslli_w(y_l, 2); ++ int n = i << 1; ++ ++ DUP2_ARG2(__lasx_xvldx, buf0, n, ubuf0, n, b, ub); ++ vb = __lasx_xvldx(vbuf0, n); ++ y_l = __lasx_xvsllwil_w_h(b, 2); ++ y_h = __lasx_xvexth_w_h(b); ++ DUP2_ARG2(__lasx_xvsllwil_w_h, ub, 0, vb, 0, ub_l, vb_l); ++ DUP2_ARG1(__lasx_xvexth_w_h, ub, vb, ub_h, vb_h); + y_h = __lasx_xvslli_w(y_h, 2); + u_l = __lasx_xvsub_w(ub_l, uv); + u_h = __lasx_xvsub_w(ub_h, uv); +@@ -1970,38 +1494,55 @@ yuv2rgb_full_1_template_lasx(SwsContext *c, const int16_t *buf0, + __m256i a_l, a_h; + + a_src = __lasx_xvld(abuf0 + i, 0); +- a_src = __lasx_xvpermi_d(a_src, 0xD8); +- a_l = __lasx_xvaddw_h_h_bu(bias, a_src); +- a_src = __lasx_xvpermi_d(a_src, 0xB1); +- a_h = __lasx_xvaddw_w_w_h(bias, a_src); ++ a_l = __lasx_xvsllwil_w_h(a_src, 0); ++ a_h = __lasx_xvexth_w_h(a_src); ++ a_l = __lasx_xvadd_w(a_l, bias); ++ a_h = __lasx_xvadd_w(a_h, bias); + a_l = __lasx_xvsrai_w(a_l, 7); + a_h = __lasx_xvsrai_w(a_h, 7); +- WRITE_FULL_L_A(R_l, G_l, B_l, a_l, c, dest, i, R, A, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H_A(R_l, G_l, B_l, a_l, c, dest, i + 4, R, A, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_L_A(R_h, G_h, B_h, a_h, c, dest, i + 8, R, A, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H_A(R_h, G_h, B_h, a_h, c, dest, i + 12, R, A, G, B, +- y, target, hasAlpha, err); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 0, 0); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 1, 1); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 2, 2); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 3, 3); ++ WRITE_FULL_A(R_h, G_h, B_h, a_h, 0, 4); ++ WRITE_FULL_A(R_h, G_h, B_h, a_h, 1, 5); ++ WRITE_FULL_A(R_h, G_h, B_h, a_h, 2, 6); ++ WRITE_FULL_A(R_h, G_h, B_h, a_h, 3, 7); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 4, 8); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 5, 9); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 6, 10); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 7, 11); ++ WRITE_FULL_A(R_h, G_h, B_h, a_h, 4, 12); ++ WRITE_FULL_A(R_h, G_h, B_h, a_h, 5, 13); ++ WRITE_FULL_A(R_h, G_h, B_h, a_h, 6, 14); ++ WRITE_FULL_A(R_h, G_h, B_h, a_h, 7, 15); + } else { +- WRITE_FULL_L(R_l, G_l, B_l, c, dest, i, R, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H(R_l, G_l, B_l, c, dest, i + 4, R, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_L(R_h, G_h, B_h, c, dest, i + 8, R, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H(R_h, G_h, B_h, c, dest, i + 12, R, G, B, +- y, target, hasAlpha, err); ++ WRITE_FULL(R_l, G_l, B_l, 0, 0); ++ WRITE_FULL(R_l, G_l, B_l, 1, 1); ++ WRITE_FULL(R_l, G_l, B_l, 2, 2); ++ WRITE_FULL(R_l, G_l, B_l, 3, 3); ++ WRITE_FULL(R_h, G_h, B_h, 0, 4); ++ WRITE_FULL(R_h, G_h, B_h, 1, 5); ++ WRITE_FULL(R_h, G_h, B_h, 2, 6); ++ WRITE_FULL(R_h, G_h, B_h, 3, 7); ++ WRITE_FULL(R_l, G_l, B_l, 4, 8); ++ WRITE_FULL(R_l, G_l, B_l, 5, 9); ++ WRITE_FULL(R_l, G_l, B_l, 6, 10); ++ WRITE_FULL(R_l, G_l, B_l, 7, 11); ++ WRITE_FULL(R_h, G_h, B_h, 4, 12); ++ WRITE_FULL(R_h, G_h, B_h, 5, 13); ++ WRITE_FULL(R_h, G_h, B_h, 6, 14); ++ WRITE_FULL(R_h, G_h, B_h, 7, 15); + } + } + if (dstW - i >= 8) { + __m256i b, ub, vb, ub_l, vb_l; + __m256i y_l, u_l, v_l; + __m256i R_l, G_l, B_l; ++ int n = i << 1; + +- DUP2_ARG2(__lasx_xvld, buf0 + i, 0, ubuf0 + i, 0, b, ub); +- vb = __lasx_xvld(vbuf0 + i, 0); ++ DUP2_ARG2(__lasx_xvldx, buf0, n, ubuf0, n, b, ub); ++ vb = __lasx_xvldx(vbuf0, n); + y_l = __lasx_vext2xv_w_h(b); + DUP2_ARG1(__lasx_vext2xv_w_h, ub, vb, ub_l, vb_l); + y_l = __lasx_xvslli_w(y_l, 2); +@@ -2015,19 +1556,27 @@ yuv2rgb_full_1_template_lasx(SwsContext *c, const int16_t *buf0, + if(hasAlpha) { + __m256i a_src, a_l; + +- a_src = __lasx_xvld(abuf0 + i, 0); +- a_src = __lasx_xvpermi_d(a_src, 0xD8); +- a_l = __lasx_xvaddw_w_w_h(bias, a_src); ++ a_src = __lasx_xvldx(abuf0, n); ++ a_src = __lasx_vext2xv_w_h(a_src); ++ a_l = __lasx_xvadd_w(bias, a_src); + a_l = __lasx_xvsrai_w(a_l, 7); +- WRITE_FULL_L_A(R_l, G_l, B_l, a_l, c, dest, i, R, A, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H_A(R_l, G_l, B_l, a_l, c, dest, i + 4, R, A, G, B, +- y, target, hasAlpha, err); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 0, 0); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 1, 1); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 2, 2); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 3, 3); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 4, 4); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 5, 5); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 6, 6); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 7, 7); + } else { +- WRITE_FULL_L(R_l, G_l, B_l, c, dest, i, R, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H(R_l, G_l, B_l, c, dest, i + 4, R, G, B, +- y, target, hasAlpha, err); ++ WRITE_FULL(R_l, G_l, B_l, 0, 0); ++ WRITE_FULL(R_l, G_l, B_l, 1, 1); ++ WRITE_FULL(R_l, G_l, B_l, 2, 2); ++ WRITE_FULL(R_l, G_l, B_l, 3, 3); ++ WRITE_FULL(R_l, G_l, B_l, 4, 4); ++ WRITE_FULL(R_l, G_l, B_l, 5, 5); ++ WRITE_FULL(R_l, G_l, B_l, 6, 6); ++ WRITE_FULL(R_l, G_l, B_l, 7, 7); + } + i += 8; + } +@@ -2053,87 +1602,92 @@ yuv2rgb_full_1_template_lasx(SwsContext *c, const int16_t *buf0, + } + } else { + const int16_t *ubuf1 = ubuf[1], *vbuf1 = vbuf[1]; +- int uvtemp = 128 << 8; +- __m256i uv = __lasx_xvreplgr2vr_w(uvtemp); ++ int uvtemp = 128 << 8; ++ __m256i uv = __lasx_xvreplgr2vr_w(uvtemp); ++ __m256i zero = __lasx_xvldi(0); ++ __m256i bias = __lasx_xvreplgr2vr_h(bias_int); + + for (i = 0; i < len; i += 16) { + __m256i b, ub0, ub1, vb0, vb1; +- __m256i y_l, y_h, u_l, u_h, v_l, v_h; +- __m256i R_l, R_h, G_l, G_h, B_l, B_h; +- +- DUP4_ARG2(__lasx_xvld, buf0 + i, 0, ubuf0 + i, 0, vbuf0 + i, 0, ubuf1 + i, 0, +- b, ub0, vb0, ub1); +- vb1 = __lasx_xvld(vbuf1 + i, 0); +- y_l = __lasx_vext2xv_w_h(b); +- b = __lasx_xvpermi_d(b, 0X4E); +- y_h = __lasx_vext2xv_w_h(b); +- y_l = __lasx_xvslli_w(y_l, 2); +- y_h = __lasx_xvslli_w(y_h, 2); +- ub0 = __lasx_xvpermi_d(ub0, 0xD8); +- vb0 = __lasx_xvpermi_d(vb0, 0xD8); +- ub1 = __lasx_xvpermi_d(ub1, 0xD8); +- vb1 = __lasx_xvpermi_d(vb1, 0xD8); +- +- DUP2_ARG2(__lasx_xvaddwl_w_h, ub0, ub1, vb0, vb1, u_l, v_l); +- DUP2_ARG2(__lasx_xvaddwh_w_h, ub0, ub1, vb0, vb1, u_h, v_h); +- u_l = __lasx_xvsub_w(u_l, uv); +- u_h = __lasx_xvsub_w(u_h, uv); +- v_l = __lasx_xvsub_w(v_l, uv); +- v_h = __lasx_xvsub_w(v_h, uv); +- u_l = __lasx_xvslli_w(u_l, 1); +- u_h = __lasx_xvslli_w(u_h, 1); +- v_l = __lasx_xvslli_w(v_l, 1); +- v_h = __lasx_xvslli_w(v_h, 1); +- YUVTORGB(y_l, u_l, v_l, R_l, G_l, B_l, offset, coeff, ++ __m256i y_ev, y_od, u_ev, u_od, v_ev, v_od; ++ __m256i R_ev, R_od, G_ev, G_od, B_ev, B_od; ++ int n = i << 1; ++ ++ DUP4_ARG2(__lasx_xvldx, buf0, n, ubuf0, n, vbuf0, n, ++ ubuf1, n, b, ub0, vb0, ub1); ++ vb1 = __lasx_xvldx(vbuf, n); ++ y_ev = __lasx_xvaddwev_w_h(b, zero); ++ y_od = __lasx_xvaddwod_w_h(b, zero); ++ DUP2_ARG2(__lasx_xvaddwev_w_h, ub0, vb0, ub1, vb1, u_ev, v_ev); ++ DUP2_ARG2(__lasx_xvaddwod_w_h, ub0, vb0, ub1, vb1, u_od, v_od); ++ DUP2_ARG2(__lasx_xvslli_w, y_ev, 2, y_od, 2, y_ev, y_od); ++ DUP4_ARG2(__lasx_xvsub_w, u_ev, uv, u_od, uv, v_ev, uv, v_od, uv, ++ u_ev, u_od, v_ev, v_od); ++ DUP4_ARG2(__lasx_xvslli_w, u_ev, 1, u_od, 1, v_ev, 1, v_od, 1, ++ u_ev, u_od, v_ev, v_od); ++ YUVTORGB(y_ev, u_ev, v_ev, R_ev, G_ev, B_ev, offset, coeff, + y_temp, v2r, v2g, u2g, u2b); +- YUVTORGB(y_h, u_h, v_h, R_h, G_h, B_h, offset, coeff, ++ YUVTORGB(y_od, u_od, v_od, R_od, G_od, B_od, offset, coeff, + y_temp, v2r, v2g, u2g, u2b); + + if(hasAlpha) { + __m256i a_src; +- __m256i a_l, a_h; ++ __m256i a_ev, a_od; + + a_src = __lasx_xvld(abuf0 + i, 0); +- a_src = __lasx_xvpermi_d(a_src, 0xD8); +- a_l = __lasx_xvaddw_w_w_h(bias, a_src); +- a_src = __lasx_xvpermi_d(a_src, 0xB1); +- a_h = __lasx_xvaddw_w_w_h(bias, a_src); +- a_l = __lasx_xvsrai_w(a_l, 7); +- a_h = __lasx_xvsrai_w(a_h, 7); +- WRITE_FULL_L_A(R_l, G_l, B_l, a_l, c, dest, i, R, A, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H_A(R_l, G_l, B_l, a_l, c, dest, i + 4, R, A, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_L_A(R_h, G_h, B_h, a_h, c, dest, i + 8, R, A, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H_A(R_h, G_h, B_h, a_h, c, dest, i + 12, R, A, G, B, +- y, target, hasAlpha, err); ++ a_ev = __lasx_xvaddwev_w_h(bias, a_src); ++ a_od = __lasx_xvaddwod_w_h(bias, a_src); ++ a_ev = __lasx_xvsrai_w(a_ev, 7); ++ a_od = __lasx_xvsrai_w(a_od, 7); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 0, 0); ++ WRITE_FULL_A(R_od, G_od, B_od, a_od, 0, 1); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 1, 2); ++ WRITE_FULL_A(R_od, G_od, B_od, a_od, 1, 3); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 2, 4); ++ WRITE_FULL_A(R_od, G_od, B_od, a_od, 2, 5); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 3, 6); ++ WRITE_FULL_A(R_od, G_od, B_od, a_od, 3, 7); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 4, 8); ++ WRITE_FULL_A(R_od, G_od, B_od, a_od, 4, 9); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 5, 10); ++ WRITE_FULL_A(R_od, G_od, B_od, a_od, 5, 11); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 6, 12); ++ WRITE_FULL_A(R_od, G_od, B_od, a_od, 6, 13); ++ WRITE_FULL_A(R_ev, G_ev, B_ev, a_ev, 7, 14); ++ WRITE_FULL_A(R_od, G_od, B_od, a_od, 7, 15); + } else { +- WRITE_FULL_L(R_l, G_l, B_l, c, dest, i, R, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H(R_l, G_l, B_l, c, dest, i + 4, R, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_L(R_h, G_h, B_h, c, dest, i + 8, R, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H(R_h, G_h, B_h, c, dest, i + 12, R, G, B, +- y, target, hasAlpha, err); ++ WRITE_FULL(R_ev, G_ev, B_ev, 0, 0); ++ WRITE_FULL(R_od, G_od, B_od, 0, 1); ++ WRITE_FULL(R_ev, G_ev, B_ev, 1, 2); ++ WRITE_FULL(R_od, G_od, B_od, 1, 3); ++ WRITE_FULL(R_ev, G_ev, B_ev, 2, 4); ++ WRITE_FULL(R_od, G_od, B_od, 2, 5); ++ WRITE_FULL(R_ev, G_ev, B_ev, 3, 6); ++ WRITE_FULL(R_od, G_od, B_od, 3, 7); ++ WRITE_FULL(R_ev, G_ev, B_ev, 4, 8); ++ WRITE_FULL(R_od, G_od, B_od, 4, 9); ++ WRITE_FULL(R_ev, G_ev, B_ev, 5, 10); ++ WRITE_FULL(R_od, G_od, B_od, 5, 11); ++ WRITE_FULL(R_ev, G_ev, B_ev, 6, 12); ++ WRITE_FULL(R_od, G_od, B_od, 6, 13); ++ WRITE_FULL(R_ev, G_ev, B_ev, 7, 14); ++ WRITE_FULL(R_od, G_od, B_od, 7, 15); + } + } + if (dstW - i >= 8) { + __m256i b, ub0, ub1, vb0, vb1; + __m256i y_l, u_l, v_l; + __m256i R_l, G_l, B_l; ++ int n = i << 1; + +- DUP4_ARG2(__lasx_xvld, buf0 + i, 0, ubuf0 + i, 0, vbuf0 + i, 0, ubuf1 + i, 0, +- b, ub0, vb0, ub1); +- vb1 = __lasx_xvld(vbuf1 + i, 0); ++ DUP4_ARG2(__lasx_xvldx, buf0, n, ubuf0, n, vbuf0, n, ++ ubuf1, n, b, ub0, vb0, ub1); ++ vb1 = __lasx_xvldx(vbuf1, n); + y_l = __lasx_vext2xv_w_h(b); + y_l = __lasx_xvslli_w(y_l, 2); +- ub0 = __lasx_xvpermi_d(ub0, 0xD8); +- vb0 = __lasx_xvpermi_d(vb0, 0xD8); +- ub1 = __lasx_xvpermi_d(ub1, 0xD8); +- vb1 = __lasx_xvpermi_d(vb1, 0xD8); +- DUP2_ARG2(__lasx_xvaddwl_w_h, ub0, ub1, vb0, vb1, u_l, v_l); ++ DUP4_ARG1(__lasx_vext2xv_w_h, ub0, vb0, ub1, vb1, ++ ub0, vb0, ub1, vb1); ++ DUP2_ARG2(__lasx_xvadd_w, ub0, ub1, vb0, vb1, u_l, v_l); + u_l = __lasx_xvsub_w(u_l, uv); + v_l = __lasx_xvsub_w(v_l, uv); + u_l = __lasx_xvslli_w(u_l, 1); +@@ -2145,19 +1699,28 @@ yuv2rgb_full_1_template_lasx(SwsContext *c, const int16_t *buf0, + __m256i a_src; + __m256i a_l; + +- a_src = __lasx_xvld(abuf0 + i, 0); +- a_src = __lasx_xvpermi_d(a_src, 0xD8); +- a_l = __lasx_xvaddw_w_w_h(bias, a_src); ++ a_src = __lasx_xvld(abuf0 + i, 0); ++ a_src = __lasx_xvpermi_d(a_src, 0xD8); ++ a_src = __lasx_xvilvl_h(a_src, a_src); ++ a_l = __lasx_xvaddwev_w_h(bias, a_l); + a_l = __lasx_xvsrai_w(a_l, 7); +- WRITE_FULL_L_A(R_l, G_l, B_l, a_l, c, dest, i, R, A, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H_A(R_l, G_l, B_l, a_l, c, dest, i + 4, R, A, G, B, +- y, target, hasAlpha, err); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 0, 0); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 1, 1); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 2, 2); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 3, 3); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 4, 4); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 5, 5); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 6, 6); ++ WRITE_FULL_A(R_l, G_l, B_l, a_l, 7, 7); + } else { +- WRITE_FULL_L(R_l, G_l, B_l, c, dest, i, R, G, B, +- y, target, hasAlpha, err); +- WRITE_FULL_H(R_l, G_l, B_l, c, dest, i + 4, R, G, B, +- y, target, hasAlpha, err); ++ WRITE_FULL(R_l, G_l, B_l, 0, 0); ++ WRITE_FULL(R_l, G_l, B_l, 1, 1); ++ WRITE_FULL(R_l, G_l, B_l, 2, 2); ++ WRITE_FULL(R_l, G_l, B_l, 3, 3); ++ WRITE_FULL(R_l, G_l, B_l, 4, 4); ++ WRITE_FULL(R_l, G_l, B_l, 5, 5); ++ WRITE_FULL(R_l, G_l, B_l, 6, 6); ++ WRITE_FULL(R_l, G_l, B_l, 7, 7); + } + i += 8; + } +@@ -2187,10 +1750,14 @@ yuv2rgb_full_1_template_lasx(SwsContext *c, const int16_t *buf0, + c->dither_error[2][i] = err[2]; + } + #if CONFIG_SMALL +-YUV2RGBWRAPPER(yuv2, rgb_full, bgra32_full, AV_PIX_FMT_BGRA, CONFIG_SWSCALE_ALPHA && c->needAlpha) +-YUV2RGBWRAPPER(yuv2, rgb_full, abgr32_full, AV_PIX_FMT_ABGR, CONFIG_SWSCALE_ALPHA && c->needAlpha) +-YUV2RGBWRAPPER(yuv2, rgb_full, rgba32_full, AV_PIX_FMT_RGBA, CONFIG_SWSCALE_ALPHA && c->needAlpha) +-YUV2RGBWRAPPER(yuv2, rgb_full, argb32_full, AV_PIX_FMT_ARGB, CONFIG_SWSCALE_ALPHA && c->needAlpha) ++YUV2RGBWRAPPER(yuv2, rgb_full, bgra32_full, AV_PIX_FMT_BGRA, ++ CONFIG_SWSCALE_ALPHA && c->needAlpha) ++YUV2RGBWRAPPER(yuv2, rgb_full, abgr32_full, AV_PIX_FMT_ABGR, ++ CONFIG_SWSCALE_ALPHA && c->needAlpha) ++YUV2RGBWRAPPER(yuv2, rgb_full, rgba32_full, AV_PIX_FMT_RGBA, ++ CONFIG_SWSCALE_ALPHA && c->needAlpha) ++YUV2RGBWRAPPER(yuv2, rgb_full, argb32_full, AV_PIX_FMT_ARGB, ++ CONFIG_SWSCALE_ALPHA && c->needAlpha) + #else + #if CONFIG_SWSCALE_ALPHA + YUV2RGBWRAPPER(yuv2, rgb_full, bgra32_full, AV_PIX_FMT_BGRA, 1) diff --git a/package/ffmpeg/0011-mips-refine-ff_h264_idct_add16_msa.patch b/package/ffmpeg/0011-mips-refine-ff_h264_idct_add16_msa.patch new file mode 100644 index 00000000..98041d42 --- /dev/null +++ b/package/ffmpeg/0011-mips-refine-ff_h264_idct_add16_msa.patch @@ -0,0 +1,85 @@ +From 6ce3d8fba8c93b1dcd738d2f09e3915db78f5fbc Mon Sep 17 00:00:00 2001 +From: Shiyou Yin +Date: Wed, 1 Mar 2023 16:52:55 +0800 +Subject: [PATCH 01/10] mips: refine ff_h264_idct_add16_msa. + +speed up about 1.5% when decoding yuv444p H264 video. + +Change-Id: Ie03b133a71b875c6c83c950d783ed83ae9be308f +--- + libavcodec/mips/h264idct_msa.c | 36 +++++++++++++++------------------- + 1 file changed, 16 insertions(+), 20 deletions(-) + +diff --git a/libavcodec/mips/h264idct_msa.c b/libavcodec/mips/h264idct_msa.c +index fbf7795e27..9a1a757045 100644 +--- a/libavcodec/mips/h264idct_msa.c ++++ b/libavcodec/mips/h264idct_msa.c +@@ -271,7 +271,7 @@ static void avc_idct8_dc_addblk_msa(uint8_t *dst, int16_t *src, + + void ff_h264_idct_add_msa(uint8_t *dst, int16_t *src, int32_t dst_stride) + { +- uint32_t src0_m, src1_m, src2_m, src3_m, out0_m, out1_m, out2_m, out3_m; ++ uint32_t out0_m, out1_m, out2_m, out3_m; + v16i8 dst0_m = { 0 }; + v16i8 dst1_m = { 0 }; + v8i16 hres0, hres1, hres2, hres3, vres0, vres1, vres2, vres3; +@@ -279,23 +279,23 @@ void ff_h264_idct_add_msa(uint8_t *dst, int16_t *src, int32_t dst_stride) + const v8i16 src0 = LD_SH(src); + const v8i16 src2 = LD_SH(src + 8); + const v8i16 zero = { 0 }; +- const uint8_t *dst1 = dst + dst_stride; +- const uint8_t *dst2 = dst + 2 * dst_stride; +- const uint8_t *dst3 = dst + 3 * dst_stride; ++ const uint8_t *dst1 = dst + dst_stride; ++ const uint8_t *dst2 = dst1 + dst_stride; ++ const uint8_t *dst3 = dst2 + dst_stride; + + ILVL_D2_SH(src0, src0, src2, src2, src1, src3); + ST_SH2(zero, zero, src, 8); + AVC_ITRANS_H(src0, src1, src2, src3, hres0, hres1, hres2, hres3); + TRANSPOSE4x4_SH_SH(hres0, hres1, hres2, hres3, hres0, hres1, hres2, hres3); + AVC_ITRANS_H(hres0, hres1, hres2, hres3, vres0, vres1, vres2, vres3); +- src0_m = LW(dst); +- src1_m = LW(dst1); +- SRARI_H4_SH(vres0, vres1, vres2, vres3, 6); +- src2_m = LW(dst2); +- src3_m = LW(dst3); ++ out0_m = LW(dst); ++ out1_m = LW(dst1); ++ out2_m = LW(dst2); ++ out3_m = LW(dst3); + ILVR_D2_SH(vres1, vres0, vres3, vres2, inp0_m, inp1_m); +- INSERT_W2_SB(src0_m, src1_m, dst0_m); +- INSERT_W2_SB(src2_m, src3_m, dst1_m); ++ SRARI_H2_SH(inp0_m, inp1_m, 6); ++ INSERT_W2_SB(out0_m, out1_m, dst0_m); ++ INSERT_W2_SB(out2_m, out3_m, dst1_m); + ILVR_B2_SH(zero, dst0_m, zero, dst1_m, res0_m, res1_m); + ADD2(res0_m, inp0_m, res1_m, inp1_m, res0_m, res1_m); + CLIP_SH2_0_255(res0_m, res1_m); +@@ -352,17 +352,13 @@ void ff_h264_idct_add16_msa(uint8_t *dst, + int32_t i; + + for (i = 0; i < 16; i++) { +- int32_t nnz = nzc[scan8[i]]; ++ uint8_t *dst_l = dst + blk_offset[i]; ++ uint8_t nnz = nzc[scan8[i]]; ++ int32_t i_16p = i << 4; + + if (nnz) { +- if (nnz == 1 && ((dctcoef *) block)[i * 16]) +- ff_h264_idct4x4_addblk_dc_msa(dst + blk_offset[i], +- block + i * 16 * sizeof(pixel), +- dst_stride); +- else +- ff_h264_idct_add_msa(dst + blk_offset[i], +- block + i * 16 * sizeof(pixel), +- dst_stride); ++ i_16p *= sizeof(pixel); ++ ff_h264_idct_add_msa(dst_l, block + i_16p, dst_stride); + } + } + } +-- +2.20.1 + diff --git a/package/ffmpeg/0012-avcodec-LA-Fix-bugs-in-h264dsp.S.patch b/package/ffmpeg/0012-avcodec-LA-Fix-bugs-in-h264dsp.S.patch new file mode 100644 index 00000000..4e73ab9e --- /dev/null +++ b/package/ffmpeg/0012-avcodec-LA-Fix-bugs-in-h264dsp.S.patch @@ -0,0 +1,770 @@ +From dcd0844e451c58c4969054ec09df214267f93a01 Mon Sep 17 00:00:00 2001 +From: Hao Chen +Date: Tue, 14 Mar 2023 11:06:40 +0800 +Subject: [PATCH 02/10] avcodec: [LA] Fix bugs in h264dsp.S + +This patch fixes garbled code when playing H264 video. + +Change-Id: Ic9b436ee64262cc608d32608614ae425705c8da3 +Signed-off-by: Hao Chen +--- + libavcodec/loongarch/h264dsp.S | 527 +++++++++++++++++---------------- + 1 file changed, 279 insertions(+), 248 deletions(-) + +diff --git a/libavcodec/loongarch/h264dsp.S b/libavcodec/loongarch/h264dsp.S +index 1c40c4e5bf..44cb540860 100644 +--- a/libavcodec/loongarch/h264dsp.S ++++ b/libavcodec/loongarch/h264dsp.S +@@ -1944,9 +1944,10 @@ function ff_weight_h264_pixels16_8_lsx + addi.d t3, zero, 16 + + sll.d a5, a5, a3 +- vreplgr2vr.b vr20, a4 //weight ++ vreplgr2vr.h vr20, a4 //weight + vreplgr2vr.h vr8, a5 //offset + vreplgr2vr.h vr9, a3 //log2_denom ++ vldi vr23, 0 + + add.d t4, a0, t2 + vld vr0, a0, 0 +@@ -1958,14 +1959,23 @@ function ff_weight_h264_pixels16_8_lsx + vldx vr6, t4, t0 + vldx vr7, t4, t1 + +- vmulwev.h.bu.b vr10, vr0, vr20 +- vmulwev.h.bu.b vr11, vr1, vr20 +- vmulwev.h.bu.b vr12, vr2, vr20 +- vmulwev.h.bu.b vr13, vr3, vr20 +- vmulwev.h.bu.b vr14, vr4, vr20 +- vmulwev.h.bu.b vr15, vr5, vr20 +- vmulwev.h.bu.b vr16, vr6, vr20 +- vmulwev.h.bu.b vr17, vr7, vr20 ++ vilvl.b vr10, vr23, vr0 ++ vilvl.b vr11, vr23, vr1 ++ vilvl.b vr12, vr23, vr2 ++ vilvl.b vr13, vr23, vr3 ++ vilvl.b vr14, vr23, vr4 ++ vilvl.b vr15, vr23, vr5 ++ vilvl.b vr16, vr23, vr6 ++ vilvl.b vr17, vr23, vr7 ++ ++ vmul.h vr10, vr10, vr20 ++ vmul.h vr11, vr11, vr20 ++ vmul.h vr12, vr12, vr20 ++ vmul.h vr13, vr13, vr20 ++ vmul.h vr14, vr14, vr20 ++ vmul.h vr15, vr15, vr20 ++ vmul.h vr16, vr16, vr20 ++ vmul.h vr17, vr17, vr20 + vsadd.h vr10, vr8, vr10 + vsadd.h vr11, vr8, vr11 + vsadd.h vr12, vr8, vr12 +@@ -1975,14 +1985,22 @@ function ff_weight_h264_pixels16_8_lsx + vsadd.h vr16, vr8, vr16 + vsadd.h vr17, vr8, vr17 + +- vmulwod.h.bu.b vr18, vr0, vr20 +- vmulwod.h.bu.b vr19, vr1, vr20 +- vmulwod.h.bu.b vr21, vr2, vr20 +- vmulwod.h.bu.b vr22, vr3, vr20 +- vmulwod.h.bu.b vr0, vr4, vr20 +- vmulwod.h.bu.b vr1, vr5, vr20 +- vmulwod.h.bu.b vr2, vr6, vr20 +- vmulwod.h.bu.b vr3, vr7, vr20 ++ vilvh.b vr18, vr23, vr0 ++ vilvh.b vr19, vr23, vr1 ++ vilvh.b vr21, vr23, vr2 ++ vilvh.b vr22, vr23, vr3 ++ vilvh.b vr0, vr23, vr4 ++ vilvh.b vr1, vr23, vr5 ++ vilvh.b vr2, vr23, vr6 ++ vilvh.b vr3, vr23, vr7 ++ vmul.h vr18, vr18, vr20 ++ vmul.h vr19, vr19, vr20 ++ vmul.h vr21, vr21, vr20 ++ vmul.h vr22, vr22, vr20 ++ vmul.h vr0, vr0, vr20 ++ vmul.h vr1, vr1, vr20 ++ vmul.h vr2, vr2, vr20 ++ vmul.h vr3, vr3, vr20 + vsadd.h vr18, vr8, vr18 + vsadd.h vr19, vr8, vr19 + vsadd.h vr21, vr8, vr21 +@@ -2009,14 +2027,14 @@ function ff_weight_h264_pixels16_8_lsx + vssrarn.bu.h vr2, vr2, vr9 + vssrarn.bu.h vr3, vr3, vr9 + +- vilvl.b vr10, vr4, vr10 +- vilvl.b vr11, vr5, vr11 +- vilvl.b vr12, vr6, vr12 +- vilvl.b vr13, vr7, vr13 +- vilvl.b vr14, vr0, vr14 +- vilvl.b vr15, vr1, vr15 +- vilvl.b vr16, vr2, vr16 +- vilvl.b vr17, vr3, vr17 ++ vilvl.d vr10, vr4, vr10 ++ vilvl.d vr11, vr5, vr11 ++ vilvl.d vr12, vr6, vr12 ++ vilvl.d vr13, vr7, vr13 ++ vilvl.d vr14, vr0, vr14 ++ vilvl.d vr15, vr1, vr15 ++ vilvl.d vr16, vr2, vr16 ++ vilvl.d vr17, vr3, vr17 + + vst vr10, a0, 0 + vstx vr11, a0, a1 +@@ -2039,14 +2057,23 @@ function ff_weight_h264_pixels16_8_lsx + vldx vr6, t4, t0 + vldx vr7, t4, t1 + +- vmulwev.h.bu.b vr10, vr0, vr20 +- vmulwev.h.bu.b vr11, vr1, vr20 +- vmulwev.h.bu.b vr12, vr2, vr20 +- vmulwev.h.bu.b vr13, vr3, vr20 +- vmulwev.h.bu.b vr14, vr4, vr20 +- vmulwev.h.bu.b vr15, vr5, vr20 +- vmulwev.h.bu.b vr16, vr6, vr20 +- vmulwev.h.bu.b vr17, vr7, vr20 ++ vilvl.b vr10, vr23, vr0 ++ vilvl.b vr11, vr23, vr1 ++ vilvl.b vr12, vr23, vr2 ++ vilvl.b vr13, vr23, vr3 ++ vilvl.b vr14, vr23, vr4 ++ vilvl.b vr15, vr23, vr5 ++ vilvl.b vr16, vr23, vr6 ++ vilvl.b vr17, vr23, vr7 ++ ++ vmul.h vr10, vr10, vr20 ++ vmul.h vr11, vr11, vr20 ++ vmul.h vr12, vr12, vr20 ++ vmul.h vr13, vr13, vr20 ++ vmul.h vr14, vr14, vr20 ++ vmul.h vr15, vr15, vr20 ++ vmul.h vr16, vr16, vr20 ++ vmul.h vr17, vr17, vr20 + vsadd.h vr10, vr8, vr10 + vsadd.h vr11, vr8, vr11 + vsadd.h vr12, vr8, vr12 +@@ -2056,14 +2083,22 @@ function ff_weight_h264_pixels16_8_lsx + vsadd.h vr16, vr8, vr16 + vsadd.h vr17, vr8, vr17 + +- vmulwod.h.bu.b vr18, vr0, vr20 +- vmulwod.h.bu.b vr19, vr1, vr20 +- vmulwod.h.bu.b vr21, vr2, vr20 +- vmulwod.h.bu.b vr22, vr3, vr20 +- vmulwod.h.bu.b vr0, vr4, vr20 +- vmulwod.h.bu.b vr1, vr5, vr20 +- vmulwod.h.bu.b vr2, vr6, vr20 +- vmulwod.h.bu.b vr3, vr7, vr20 ++ vilvh.b vr18, vr23, vr0 ++ vilvh.b vr19, vr23, vr1 ++ vilvh.b vr21, vr23, vr2 ++ vilvh.b vr22, vr23, vr3 ++ vilvh.b vr0, vr23, vr4 ++ vilvh.b vr1, vr23, vr5 ++ vilvh.b vr2, vr23, vr6 ++ vilvh.b vr3, vr23, vr7 ++ vmul.h vr18, vr18, vr20 ++ vmul.h vr19, vr19, vr20 ++ vmul.h vr21, vr21, vr20 ++ vmul.h vr22, vr22, vr20 ++ vmul.h vr0, vr0, vr20 ++ vmul.h vr1, vr1, vr20 ++ vmul.h vr2, vr2, vr20 ++ vmul.h vr3, vr3, vr20 + vsadd.h vr18, vr8, vr18 + vsadd.h vr19, vr8, vr19 + vsadd.h vr21, vr8, vr21 +@@ -2090,14 +2125,14 @@ function ff_weight_h264_pixels16_8_lsx + vssrarn.bu.h vr2, vr2, vr9 + vssrarn.bu.h vr3, vr3, vr9 + +- vilvl.b vr10, vr4, vr10 +- vilvl.b vr11, vr5, vr11 +- vilvl.b vr12, vr6, vr12 +- vilvl.b vr13, vr7, vr13 +- vilvl.b vr14, vr0, vr14 +- vilvl.b vr15, vr1, vr15 +- vilvl.b vr16, vr2, vr16 +- vilvl.b vr17, vr3, vr17 ++ vilvl.d vr10, vr4, vr10 ++ vilvl.d vr11, vr5, vr11 ++ vilvl.d vr12, vr6, vr12 ++ vilvl.d vr13, vr7, vr13 ++ vilvl.d vr14, vr0, vr14 ++ vilvl.d vr15, vr1, vr15 ++ vilvl.d vr16, vr2, vr16 ++ vilvl.d vr17, vr3, vr17 + + vst vr10, a0, 0 + vstx vr11, a0, a1 +@@ -2117,7 +2152,7 @@ function ff_weight_h264_pixels16_8_lasx + addi.d t3, zero, 16 + + sll.d a5, a5, a3 +- xvreplgr2vr.b xr20, a4 //weight ++ xvreplgr2vr.h xr20, a4 //weight + xvreplgr2vr.h xr8, a5 //offset + xvreplgr2vr.h xr9, a3 //log2_denom + +@@ -2131,18 +2166,22 @@ function ff_weight_h264_pixels16_8_lasx + vldx vr6, t4, t0 + vldx vr7, t4, t1 + +- xvpermi.q xr1, xr0, 0x20 +- xvpermi.q xr3, xr2, 0x20 +- xvpermi.q xr5, xr4, 0x20 +- xvpermi.q xr7, xr6, 0x20 +- xvmulwev.h.bu.b xr10, xr1, xr20 +- xvmulwev.h.bu.b xr11, xr3, xr20 +- xvmulwev.h.bu.b xr12, xr5, xr20 +- xvmulwev.h.bu.b xr13, xr7, xr20 +- xvmulwod.h.bu.b xr14, xr1, xr20 +- xvmulwod.h.bu.b xr15, xr3, xr20 +- xvmulwod.h.bu.b xr16, xr5, xr20 +- xvmulwod.h.bu.b xr17, xr7, xr20 ++ vext2xv.hu.bu xr0, xr0 ++ vext2xv.hu.bu xr1, xr1 ++ vext2xv.hu.bu xr2, xr2 ++ vext2xv.hu.bu xr3, xr3 ++ vext2xv.hu.bu xr4, xr4 ++ vext2xv.hu.bu xr5, xr5 ++ vext2xv.hu.bu xr6, xr6 ++ vext2xv.hu.bu xr7, xr7 ++ xvmul.h xr10, xr0, xr20 ++ xvmul.h xr11, xr1, xr20 ++ xvmul.h xr12, xr2, xr20 ++ xvmul.h xr13, xr3, xr20 ++ xvmul.h xr14, xr4, xr20 ++ xvmul.h xr15, xr5, xr20 ++ xvmul.h xr16, xr6, xr20 ++ xvmul.h xr17, xr7, xr20 + xvsadd.h xr10, xr8, xr10 + xvsadd.h xr11, xr8, xr11 + xvsadd.h xr12, xr8, xr12 +@@ -2161,23 +2200,23 @@ function ff_weight_h264_pixels16_8_lasx + xvssrarn.bu.h xr16, xr16, xr9 + xvssrarn.bu.h xr17, xr17, xr9 + +- xvilvl.b xr0, xr14, xr10 +- xvilvl.b xr1, xr15, xr11 +- xvilvl.b xr2, xr16, xr12 +- xvilvl.b xr3, xr17, xr13 +- xvpermi.d xr4, xr0, 0x4E +- xvpermi.d xr5, xr1, 0x4E +- xvpermi.d xr6, xr2, 0x4E +- xvpermi.d xr7, xr3, 0x4E ++ xvpermi.d xr10, xr10, 0xD8 ++ xvpermi.d xr11, xr11, 0xD8 ++ xvpermi.d xr12, xr12, 0xD8 ++ xvpermi.d xr13, xr13, 0xD8 ++ xvpermi.d xr14, xr14, 0xD8 ++ xvpermi.d xr15, xr15, 0xD8 ++ xvpermi.d xr16, xr16, 0xD8 ++ xvpermi.d xr17, xr17, 0xD8 + +- vst vr0, a0, 0 +- vstx vr4, a0, a1 +- vstx vr1, a0, t0 +- vstx vr5, a0, t1 +- vst vr2, t4, 0 +- vstx vr6, t4, a1 +- vstx vr3, t4, t0 +- vstx vr7, t4, t1 ++ vst vr10, a0, 0 ++ vstx vr11, a0, a1 ++ vstx vr12, a0, t0 ++ vstx vr13, a0, t1 ++ vst vr14, t4, 0 ++ vstx vr15, t4, a1 ++ vstx vr16, t4, t0 ++ vstx vr17, t4, t1 + + bne a2, t3, .END_WEIGHT_H264_PIXELS16_8_LASX + add.d a0, t4, t2 +@@ -2191,18 +2230,22 @@ function ff_weight_h264_pixels16_8_lasx + vldx vr6, t4, t0 + vldx vr7, t4, t1 + +- xvpermi.q xr1, xr0, 0x20 +- xvpermi.q xr3, xr2, 0x20 +- xvpermi.q xr5, xr4, 0x20 +- xvpermi.q xr7, xr6, 0x20 +- xvmulwev.h.bu.b xr10, xr1, xr20 +- xvmulwev.h.bu.b xr11, xr3, xr20 +- xvmulwev.h.bu.b xr12, xr5, xr20 +- xvmulwev.h.bu.b xr13, xr7, xr20 +- xvmulwod.h.bu.b xr14, xr1, xr20 +- xvmulwod.h.bu.b xr15, xr3, xr20 +- xvmulwod.h.bu.b xr16, xr5, xr20 +- xvmulwod.h.bu.b xr17, xr7, xr20 ++ vext2xv.hu.bu xr0, xr0 ++ vext2xv.hu.bu xr1, xr1 ++ vext2xv.hu.bu xr2, xr2 ++ vext2xv.hu.bu xr3, xr3 ++ vext2xv.hu.bu xr4, xr4 ++ vext2xv.hu.bu xr5, xr5 ++ vext2xv.hu.bu xr6, xr6 ++ vext2xv.hu.bu xr7, xr7 ++ xvmul.h xr10, xr0, xr20 ++ xvmul.h xr11, xr1, xr20 ++ xvmul.h xr12, xr2, xr20 ++ xvmul.h xr13, xr3, xr20 ++ xvmul.h xr14, xr4, xr20 ++ xvmul.h xr15, xr5, xr20 ++ xvmul.h xr16, xr6, xr20 ++ xvmul.h xr17, xr7, xr20 + xvsadd.h xr10, xr8, xr10 + xvsadd.h xr11, xr8, xr11 + xvsadd.h xr12, xr8, xr12 +@@ -2221,23 +2264,23 @@ function ff_weight_h264_pixels16_8_lasx + xvssrarn.bu.h xr16, xr16, xr9 + xvssrarn.bu.h xr17, xr17, xr9 + +- xvilvl.b xr0, xr14, xr10 +- xvilvl.b xr1, xr15, xr11 +- xvilvl.b xr2, xr16, xr12 +- xvilvl.b xr3, xr17, xr13 +- xvpermi.d xr4, xr0, 0x4E +- xvpermi.d xr5, xr1, 0x4E +- xvpermi.d xr6, xr2, 0x4E +- xvpermi.d xr7, xr3, 0x4E ++ xvpermi.d xr10, xr10, 0xD8 ++ xvpermi.d xr11, xr11, 0xD8 ++ xvpermi.d xr12, xr12, 0xD8 ++ xvpermi.d xr13, xr13, 0xD8 ++ xvpermi.d xr14, xr14, 0xD8 ++ xvpermi.d xr15, xr15, 0xD8 ++ xvpermi.d xr16, xr16, 0xD8 ++ xvpermi.d xr17, xr17, 0xD8 + +- vst vr0, a0, 0 +- vstx vr4, a0, a1 +- vstx vr1, a0, t0 +- vstx vr5, a0, t1 +- vst vr2, t4, 0 +- vstx vr6, t4, a1 +- vstx vr3, t4, t0 +- vstx vr7, t4, t1 ++ vst vr10, a0, 0 ++ vstx vr11, a0, a1 ++ vstx vr12, a0, t0 ++ vstx vr13, a0, t1 ++ vst vr14, t4, 0 ++ vstx vr15, t4, a1 ++ vstx vr16, t4, t0 ++ vstx vr17, t4, t1 + .END_WEIGHT_H264_PIXELS16_8_LASX: + endfunc + +@@ -2248,21 +2291,25 @@ function ff_weight_h264_pixels8_8_lsx + addi.d t3, zero, 8 + + sll.d a5, a5, a3 +- vreplgr2vr.b vr20, a4 //weight ++ vreplgr2vr.h vr20, a4 //weight + vreplgr2vr.h vr8, a5 //offset + vreplgr2vr.h vr9, a3 //log2_denom ++ vldi vr21, 0 + + fld.d f0, a0, 0 + fldx.d f1, a0, a1 + fldx.d f2, a0, t0 + fldx.d f3, a0, t1 +- vilvl.d vr4, vr1, vr0 +- vilvl.d vr5, vr3, vr2 + +- vmulwev.h.bu.b vr10, vr4, vr20 +- vmulwev.h.bu.b vr11, vr5, vr20 +- vmulwod.h.bu.b vr12, vr4, vr20 +- vmulwod.h.bu.b vr13, vr5, vr20 ++ vilvl.b vr10, vr21, vr0 ++ vilvl.b vr11, vr21, vr1 ++ vilvl.b vr12, vr21, vr2 ++ vilvl.b vr13, vr21, vr3 ++ ++ vmul.h vr10, vr10, vr20 ++ vmul.h vr11, vr11, vr20 ++ vmul.h vr12, vr12, vr20 ++ vmul.h vr13, vr13, vr20 + vsadd.h vr0, vr8, vr10 + vsadd.h vr1, vr8, vr11 + vsadd.h vr2, vr8, vr12 +@@ -2273,15 +2320,10 @@ function ff_weight_h264_pixels8_8_lsx + vssrarn.bu.h vr2, vr2, vr9 + vssrarn.bu.h vr3, vr3, vr9 + +- vilvl.b vr4, vr2, vr0 +- vilvl.b vr5, vr3, vr1 +- vbsrl.v vr0, vr4, 8 +- vbsrl.v vr1, vr5, 8 +- +- fst.d f4, a0, 0 +- fstx.d f0, a0, a1 +- fstx.d f5, a0, t0 +- fstx.d f1, a0, t1 ++ fst.d f0, a0, 0 ++ fstx.d f1, a0, a1 ++ fstx.d f2, a0, t0 ++ fstx.d f3, a0, t1 + + blt a2, t3, .END_WEIGHT_H264_PIXELS8 + add.d a0, a0, t2 +@@ -2290,13 +2332,16 @@ function ff_weight_h264_pixels8_8_lsx + fldx.d f1, a0, a1 + fldx.d f2, a0, t0 + fldx.d f3, a0, t1 +- vilvl.d vr4, vr1, vr0 +- vilvl.d vr5, vr3, vr2 + +- vmulwev.h.bu.b vr10, vr4, vr20 +- vmulwev.h.bu.b vr11, vr5, vr20 +- vmulwod.h.bu.b vr12, vr4, vr20 +- vmulwod.h.bu.b vr13, vr5, vr20 ++ vilvl.b vr10, vr21, vr0 ++ vilvl.b vr11, vr21, vr1 ++ vilvl.b vr12, vr21, vr2 ++ vilvl.b vr13, vr21, vr3 ++ ++ vmul.h vr10, vr10, vr20 ++ vmul.h vr11, vr11, vr20 ++ vmul.h vr12, vr12, vr20 ++ vmul.h vr13, vr13, vr20 + vsadd.h vr0, vr8, vr10 + vsadd.h vr1, vr8, vr11 + vsadd.h vr2, vr8, vr12 +@@ -2307,15 +2352,10 @@ function ff_weight_h264_pixels8_8_lsx + vssrarn.bu.h vr2, vr2, vr9 + vssrarn.bu.h vr3, vr3, vr9 + +- vilvl.b vr4, vr2, vr0 +- vilvl.b vr5, vr3, vr1 +- vbsrl.v vr0, vr4, 8 +- vbsrl.v vr1, vr5, 8 +- +- fst.d f4, a0, 0 +- fstx.d f0, a0, a1 +- fstx.d f5, a0, t0 +- fstx.d f1, a0, t1 ++ fst.d f0, a0, 0 ++ fstx.d f1, a0, a1 ++ fstx.d f2, a0, t0 ++ fstx.d f3, a0, t1 + blt a2, t3, .END_WEIGHT_H264_PIXELS8 + add.d a0, a0, t2 + add.d t4, a0, t2 +@@ -2329,19 +2369,23 @@ function ff_weight_h264_pixels8_8_lsx + fldx.d f6, t4, t0 + fldx.d f7, t4, t1 + +- vilvl.d vr10, vr1, vr0 +- vilvl.d vr11, vr3, vr2 +- vilvl.d vr12, vr5, vr4 +- vilvl.d vr13, vr7, vr6 +- +- vmulwev.h.bu.b vr0, vr10, vr20 +- vmulwev.h.bu.b vr1, vr11, vr20 +- vmulwev.h.bu.b vr2, vr12, vr20 +- vmulwev.h.bu.b vr3, vr13, vr20 +- vmulwod.h.bu.b vr4, vr10, vr20 +- vmulwod.h.bu.b vr5, vr11, vr20 +- vmulwod.h.bu.b vr6, vr12, vr20 +- vmulwod.h.bu.b vr7, vr13, vr20 ++ vilvl.b vr10, vr21, vr0 ++ vilvl.b vr11, vr21, vr1 ++ vilvl.b vr12, vr21, vr2 ++ vilvl.b vr13, vr21, vr3 ++ vilvl.b vr14, vr21, vr4 ++ vilvl.b vr15, vr21, vr5 ++ vilvl.b vr16, vr21, vr6 ++ vilvl.b vr17, vr21, vr7 ++ ++ vmul.h vr0, vr10, vr20 ++ vmul.h vr1, vr11, vr20 ++ vmul.h vr2, vr12, vr20 ++ vmul.h vr3, vr13, vr20 ++ vmul.h vr4, vr14, vr20 ++ vmul.h vr5, vr15, vr20 ++ vmul.h vr6, vr16, vr20 ++ vmul.h vr7, vr17, vr20 + + vsadd.h vr0, vr8, vr0 + vsadd.h vr1, vr8, vr1 +@@ -2361,24 +2405,14 @@ function ff_weight_h264_pixels8_8_lsx + vssrarn.bu.h vr16, vr6, vr9 + vssrarn.bu.h vr17, vr7, vr9 + +- vilvl.b vr0, vr14, vr10 +- vilvl.b vr2, vr15, vr11 +- vilvl.b vr4, vr16, vr12 +- vilvl.b vr6, vr17, vr13 +- +- vbsrl.v vr1, vr0, 8 +- vbsrl.v vr3, vr2, 8 +- vbsrl.v vr5, vr4, 8 +- vbsrl.v vr7, vr6, 8 +- +- fst.d f0, a0, 0 +- fstx.d f1, a0, a1 +- fstx.d f2, a0, t0 +- fstx.d f3, a0, t1 +- fst.d f4, t4, 0 +- fstx.d f5, t4, a1 +- fstx.d f6, t4, t0 +- fstx.d f7, t4, t1 ++ fst.d f10, a0, 0 ++ fstx.d f11, a0, a1 ++ fstx.d f12, a0, t0 ++ fstx.d f13, a0, t1 ++ fst.d f14, t4, 0 ++ fstx.d f15, t4, a1 ++ fstx.d f16, t4, t0 ++ fstx.d f17, t4, t1 + .END_WEIGHT_H264_PIXELS8: + endfunc + +@@ -2389,7 +2423,7 @@ function ff_weight_h264_pixels8_8_lasx + addi.d t3, zero, 8 + + sll.d a5, a5, a3 +- xvreplgr2vr.b xr20, a4 //weight ++ xvreplgr2vr.h xr20, a4 //weight + xvreplgr2vr.h xr8, a5 //offset + xvreplgr2vr.h xr9, a3 //log2_denom + +@@ -2399,24 +2433,23 @@ function ff_weight_h264_pixels8_8_lasx + fldx.d f3, a0, t1 + vilvl.d vr4, vr1, vr0 + vilvl.d vr5, vr3, vr2 +- xvpermi.q xr5, xr4, 0x20 ++ vext2xv.hu.bu xr6, xr4 ++ vext2xv.hu.bu xr7, xr5 + +- xvmulwev.h.bu.b xr11, xr5, xr20 +- xvmulwod.h.bu.b xr13, xr5, xr20 ++ xvmul.h xr11, xr6, xr20 ++ xvmul.h xr13, xr7, xr20 + xvsadd.h xr1, xr8, xr11 + xvsadd.h xr3, xr8, xr13 + + xvssrarn.bu.h xr1, xr1, xr9 + xvssrarn.bu.h xr3, xr3, xr9 +- xvilvl.b xr4, xr3, xr1 +- xvpermi.d xr5, xr4, 0x4E +- vbsrl.v vr0, vr4, 8 +- vbsrl.v vr1, vr5, 8 ++ xvpermi.d xr2, xr1, 0x2 ++ xvpermi.d xr4, xr3, 0x2 + +- fst.d f4, a0, 0 +- fstx.d f0, a0, a1 +- fstx.d f5, a0, t0 +- fstx.d f1, a0, t1 ++ fst.d f1, a0, 0 ++ fstx.d f2, a0, a1 ++ fstx.d f3, a0, t0 ++ fstx.d f4, a0, t1 + + blt a2, t3, .END_WEIGHT_H264_PIXELS8_LASX + add.d a0, a0, t2 +@@ -2427,24 +2460,23 @@ function ff_weight_h264_pixels8_8_lasx + fldx.d f3, a0, t1 + vilvl.d vr4, vr1, vr0 + vilvl.d vr5, vr3, vr2 +- xvpermi.q xr5, xr4, 0x20 ++ vext2xv.hu.bu xr6, xr4 ++ vext2xv.hu.bu xr7, xr5 + +- xvmulwev.h.bu.b xr11, xr5, xr20 +- xvmulwod.h.bu.b xr13, xr5, xr20 ++ xvmul.h xr11, xr6, xr20 ++ xvmul.h xr13, xr7, xr20 + xvsadd.h xr1, xr8, xr11 + xvsadd.h xr3, xr8, xr13 + + xvssrarn.bu.h xr1, xr1, xr9 + xvssrarn.bu.h xr3, xr3, xr9 +- xvilvl.b xr4, xr3, xr1 +- xvpermi.d xr5, xr4, 0x4E +- vbsrl.v vr0, vr4, 8 +- vbsrl.v vr1, vr5, 8 ++ xvpermi.d xr2, xr1, 0x2 ++ xvpermi.d xr4, xr3, 0x2 + +- fst.d f4, a0, 0 +- fstx.d f0, a0, a1 +- fstx.d f5, a0, t0 +- fstx.d f1, a0, t1 ++ fst.d f1, a0, 0 ++ fstx.d f2, a0, a1 ++ fstx.d f3, a0, t0 ++ fstx.d f4, a0, t1 + + blt a2, t3, .END_WEIGHT_H264_PIXELS8_LASX + add.d a0, a0, t2 +@@ -2463,105 +2495,104 @@ function ff_weight_h264_pixels8_8_lasx + vilvl.d vr11, vr3, vr2 + vilvl.d vr12, vr5, vr4 + vilvl.d vr13, vr7, vr6 +- xvpermi.q xr11, xr10, 0x20 +- xvpermi.q xr13, xr12, 0x20 ++ vext2xv.hu.bu xr10, xr10 ++ vext2xv.hu.bu xr11, xr11 ++ vext2xv.hu.bu xr12, xr12 ++ vext2xv.hu.bu xr13, xr13 + +- xvmulwev.h.bu.b xr1, xr11, xr20 +- xvmulwev.h.bu.b xr3, xr13, xr20 +- xvmulwod.h.bu.b xr5, xr11, xr20 +- xvmulwod.h.bu.b xr7, xr13, xr20 ++ xvmul.h xr0, xr10, xr20 ++ xvmul.h xr1, xr11, xr20 ++ xvmul.h xr2, xr12, xr20 ++ xvmul.h xr3, xr13, xr20 + ++ xvsadd.h xr0, xr8, xr0 + xvsadd.h xr1, xr8, xr1 ++ xvsadd.h xr2, xr8, xr2 + xvsadd.h xr3, xr8, xr3 +- xvsadd.h xr5, xr8, xr5 +- xvsadd.h xr7, xr8, xr7 +- +- xvssrarn.bu.h xr11, xr1, xr9 +- xvssrarn.bu.h xr13, xr3, xr9 +- xvssrarn.bu.h xr15, xr5, xr9 +- xvssrarn.bu.h xr17, xr7, xr9 +- +- xvilvl.b xr0, xr15, xr11 +- xvilvl.b xr4, xr17, xr13 +- xvpermi.d xr2, xr0, 0x4E +- xvpermi.d xr6, xr4, 0x4E +- vbsrl.v vr1, vr0, 8 +- vbsrl.v vr3, vr2, 8 +- vbsrl.v vr5, vr4, 8 +- vbsrl.v vr7, vr6, 8 + +- fst.d f0, a0, 0 +- fstx.d f1, a0, a1 +- fstx.d f2, a0, t0 +- fstx.d f3, a0, t1 +- fst.d f4, t4, 0 +- fstx.d f5, t4, a1 +- fstx.d f6, t4, t0 +- fstx.d f7, t4, t1 ++ xvssrarn.bu.h xr10, xr0, xr9 ++ xvssrarn.bu.h xr12, xr1, xr9 ++ xvssrarn.bu.h xr14, xr2, xr9 ++ xvssrarn.bu.h xr16, xr3, xr9 ++ xvpermi.d xr11, xr10, 0x2 ++ xvpermi.d xr13, xr12, 0x2 ++ xvpermi.d xr15, xr14, 0x2 ++ xvpermi.d xr17, xr16, 0x2 ++ ++ fst.d f10, a0, 0 ++ fstx.d f11, a0, a1 ++ fstx.d f12, a0, t0 ++ fstx.d f13, a0, t1 ++ fst.d f14, t4, 0 ++ fstx.d f15, t4, a1 ++ fstx.d f16, t4, t0 ++ fstx.d f17, t4, t1 + .END_WEIGHT_H264_PIXELS8_LASX: + endfunc + + //LSX optimization is enough for this function. + function ff_weight_h264_pixels4_8_lsx +- slli.d t0, a1, 1 +- slli.d t2, a1, 2 +- add.d t1, t0, a1 ++ add.d t0, a0, a1 + addi.d t3, zero, 4 + + sll.d a5, a5, a3 +- vreplgr2vr.b vr20, a4 //weight ++ vreplgr2vr.h vr20, a4 //weight + vreplgr2vr.h vr8, a5 //offset + vreplgr2vr.h vr9, a3 //log2_denom ++ vldi vr21, 0 + + fld.s f0, a0, 0 + fldx.s f1, a0, a1 + vilvl.w vr4, vr1, vr0 +- vilvl.b vr5, vr4, vr4 +- vmulwev.h.bu.b vr10, vr5, vr20 ++ vilvl.b vr5, vr21, vr4 ++ vmul.h vr10, vr5, vr20 + vsadd.h vr0, vr8, vr10 + vssrarn.bu.h vr0, vr0, vr9 +- vbsrl.v vr1, vr0, 4 + + fst.s f0, a0, 0 +- fstx.s f1, a0, a1 ++ vstelm.w vr0, t0, 0, 1 + blt a2, t3, .END_WEIGHT_H264_PIXELS4 ++ add.d a0, t0, a1 + addi.d t3, zero, 8 +- fldx.s f0, a0, t0 +- fldx.s f1, a0, t1 ++ fld.s f0, a0, 0 ++ fldx.s f1, a0, a1 ++ add.d t0, a0, a1 + vilvl.w vr4, vr1, vr0 +- vilvl.b vr5, vr4, vr4 ++ vilvl.b vr5, vr21, vr4 + +- vmulwev.h.bu.b vr10, vr5, vr20 ++ vmul.h vr10, vr5, vr20 + vsadd.h vr0, vr8, vr10 + vssrarn.bu.h vr0, vr0, vr9 +- vbsrl.v vr1, vr0, 4 +- fstx.s f0, a0, t0 +- fstx.s f1, a0, t1 ++ ++ fst.s f0, a0, 0 ++ vstelm.w vr0, t0, 0, 1 + blt a2, t3, .END_WEIGHT_H264_PIXELS4 +- add.d a0, a0, t2 ++ add.d a0, t0, a1 ++ add.d t0, a0, a1 ++ add.d t1, t0, a1 ++ add.d t2, t1, a1 + + fld.s f0, a0, 0 +- fldx.s f1, a0, a1 +- fldx.s f2, a0, t0 +- fldx.s f3, a0, t1 ++ fld.s f1, t0, 0 ++ fld.s f2, t1, 0 ++ fld.s f3, t2, 0 + + vilvl.w vr4, vr1, vr0 + vilvl.w vr5, vr3, vr2 +- vilvl.b vr6, vr5, vr4 ++ vilvl.b vr6, vr21, vr4 ++ vilvl.b vr7, vr21, vr5 + +- vmulwev.h.bu.b vr10, vr6, vr20 +- vmulwod.h.bu.b vr11, vr6, vr20 ++ vmul.h vr10, vr6, vr20 ++ vmul.h vr11, vr7, vr20 + vsadd.h vr0, vr8, vr10 + vsadd.h vr1, vr8, vr11 + vssrarn.bu.h vr10, vr0, vr9 + vssrarn.bu.h vr11, vr1, vr9 +- vbsrl.v vr12, vr10, 4 +- vbsrl.v vr13, vr11, 4 + + fst.s f10, a0, 0 +- fstx.s f12, a0, a1 +- fstx.s f11, a0, t0 +- fstx.s f13, a0, t1 ++ vstelm.w vr10, t0, 0, 1 ++ fst.s f11, t1, 0 ++ vstelm.w vr11, t2, 0, 1 + .END_WEIGHT_H264_PIXELS4: + endfunc + +-- +2.20.1 + diff --git a/package/ffmpeg/0013-swscale-LA-Add-ff_hscale_-_lsx-functions.patch b/package/ffmpeg/0013-swscale-LA-Add-ff_hscale_-_lsx-functions.patch new file mode 100644 index 00000000..7c43740e --- /dev/null +++ b/package/ffmpeg/0013-swscale-LA-Add-ff_hscale_-_lsx-functions.patch @@ -0,0 +1,2059 @@ +From b9837d361ef3e7b9c96dfddff48e7f77a6480133 Mon Sep 17 00:00:00 2001 +From: wanglu +Date: Fri, 24 Feb 2023 17:18:10 +0800 +Subject: [PATCH 03/10] swscale: [LA] Add ff_hscale_*_lsx functions. + +1. ff_hscale_8_to_15_lsx +2. ff_hscale_8_to_19_lsx +3. ff_hscale_16_to_15_lsx +4. ff_hscale_16_to_19_lsx + +Change-Id: I752b2cbd4e86a33a16e3d1d9908cbdb12acf2127 +Signed-off-by: wanglu +--- + libswscale/loongarch/Makefile | 2 + + libswscale/loongarch/swscale.S | 1868 +++++++++++++++++ + libswscale/loongarch/swscale_init_loongarch.c | 12 + + libswscale/loongarch/swscale_loongarch.h | 24 + + libswscale/loongarch/swscale_lsx.c | 57 + + libswscale/utils.c | 10 + + 6 files changed, 1973 insertions(+) + create mode 100644 libswscale/loongarch/swscale.S + create mode 100644 libswscale/loongarch/swscale_lsx.c + +diff --git a/libswscale/loongarch/Makefile b/libswscale/loongarch/Makefile +index 47dae42ff7..2729758392 100644 +--- a/libswscale/loongarch/Makefile ++++ b/libswscale/loongarch/Makefile +@@ -4,3 +4,5 @@ LASX-OBJS-$(CONFIG_SWSCALE) += loongarch/swscale_lasx.o \ + loongarch/input_lasx.o \ + loongarch/yuv2rgb_lasx.o \ + loongarch/rgb2rgb_lasx.o ++LSX-OBJS-$(CONFIG_SWSCALE) += loongarch/swscale.o \ ++ loongarch/swscale_lsx.o \ +diff --git a/libswscale/loongarch/swscale.S b/libswscale/loongarch/swscale.S +new file mode 100644 +index 0000000000..aa4c5cbe28 +--- /dev/null ++++ b/libswscale/loongarch/swscale.S +@@ -0,0 +1,1868 @@ ++/* ++ * Loongson LSX optimized swscale ++ * ++ * Copyright (c) 2023 Loongson Technology Corporation Limited ++ * Contributed by Lu Wang ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavcodec/loongarch/loongson_asm.S" ++ ++/* void ff_hscale_8_to_15_lsx(SwsContext *c, int16_t *dst, int dstW, ++ * const uint8_t *src, const int16_t *filter, ++ * const int32_t *filterPos, int filterSize) ++ */ ++function ff_hscale_8_to_15_lsx ++ addi.d sp, sp, -72 ++ st.d s0, sp, 0 ++ st.d s1, sp, 8 ++ st.d s2, sp, 16 ++ st.d s3, sp, 24 ++ st.d s4, sp, 32 ++ st.d s5, sp, 40 ++ st.d s6, sp, 48 ++ st.d s7, sp, 56 ++ st.d s8, sp, 64 ++ li.w t0, 32767 ++ li.w t8, 8 ++ li.w t7, 4 ++ vldi vr0, 0 ++ vreplgr2vr.w vr20, t0 ++ beq a6, t7, .LOOP_DSTW4 ++ beq a6, t8, .LOOP_DSTW8 ++ blt t8, a6, .LOOP_START ++ b .END_DSTW4 ++ ++.LOOP_START: ++ li.w t1, 0 ++ li.w s1, 0 ++ li.w s2, 0 ++ li.w s3, 0 ++ li.w s4, 0 ++ li.w s5, 0 ++ vldi vr22, 0 ++ addi.w s0, a6, -7 ++ slli.w s7, a6, 1 ++ slli.w s8, a6, 2 ++ add.w t6, s7, s8 ++.LOOP_DSTW: ++ ld.w t2, a5, 0 ++ ld.w t3, a5, 4 ++ ld.w t4, a5, 8 ++ ld.w t5, a5, 12 ++ fldx.d f1, a3, t2 ++ fldx.d f2, a3, t3 ++ fldx.d f3, a3, t4 ++ fldx.d f4, a3, t5 ++ vld vr9, a4, 0 ++ vldx vr10, a4, s7 ++ vldx vr11, a4, s8 ++ vldx vr12, a4, t6 ++ vilvl.b vr1, vr0, vr1 ++ vilvl.b vr2, vr0, vr2 ++ vilvl.b vr3, vr0, vr3 ++ vilvl.b vr4, vr0, vr4 ++ vdp2.w.h vr17, vr1, vr9 ++ vdp2.w.h vr18, vr2, vr10 ++ vdp2.w.h vr19, vr3, vr11 ++ vdp2.w.h vr21, vr4, vr12 ++ vhaddw.d.w vr1, vr17, vr17 ++ vhaddw.d.w vr2, vr18, vr18 ++ vhaddw.d.w vr3, vr19, vr19 ++ vhaddw.d.w vr4, vr21, vr21 ++ vhaddw.q.d vr1, vr1, vr1 ++ vhaddw.q.d vr2, vr2, vr2 ++ vhaddw.q.d vr3, vr3, vr3 ++ vhaddw.q.d vr4, vr4, vr4 ++ vilvl.w vr1, vr2, vr1 ++ vilvl.w vr3, vr4, vr3 ++ vilvl.d vr1, vr3, vr1 ++ vadd.w vr22, vr22, vr1 ++ addi.w s1, s1, 8 ++ addi.d a3, a3, 8 ++ addi.d a4, a4, 16 ++ blt s1, s0, .LOOP_DSTW ++ blt s1, a6, .DSTWA ++ b .END_FILTER ++.DSTWA: ++ ld.w t2, a5, 0 ++ li.w t3, 0 ++ move s6, s1 ++.FILTERSIZEA: ++ add.w t4, t2, t3 ++ ldx.bu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t6, t6, 1 ++ ldx.h t6, a4, t6 ++ mul.w t6, t5, t6 ++ add.w s2, s2, t6 ++ addi.w t3, t3, 1 ++ addi.w s6, s6, 1 ++ blt s6, a6, .FILTERSIZEA ++ ++ ld.w t2, a5, 4 ++ li.w t3, 0 ++ move s6, s1 ++ addi.w t1, t1, 1 ++.FILTERSIZEB: ++ add.w t4, t2, t3 ++ ldx.bu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t6, t6, 1 ++ ldx.h t6, a4, t6 ++ mul.w t6, t5, t6 ++ add.w s3, s3, t6 ++ addi.w t3, t3, 1 ++ addi.w s6, s6, 1 ++ blt s6, a6, .FILTERSIZEB ++ ld.w t2, a5, 8 ++ addi.w t1, t1, 1 ++ li.w t3, 0 ++ move s6, s1 ++.FILTERSIZEC: ++ add.w t4, t2, t3 ++ ldx.bu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t6, t6, 1 ++ ldx.h t6, a4, t6 ++ mul.w t6, t5, t6 ++ add.w s4, s4, t6 ++ addi.w t3, t3, 1 ++ addi.w s6, s6, 1 ++ blt s6, a6, .FILTERSIZEC ++ ld.w t2, a5, 12 ++ addi.w t1, t1, 1 ++ move s6, s1 ++ li.w t3, 0 ++.FILTERSIZED: ++ add.w t4, t2, t3 ++ ldx.bu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t6, t6, 1 ++ ldx.h t6, a4, t6 ++ mul.w t6, t5, t6 ++ add.w s5, s5, t6 ++ addi.w t3, t3, 1 ++ addi.w s6, s6, 1 ++ blt s6, a6, .FILTERSIZED ++.END_FILTER: ++ vpickve2gr.w t1, vr22, 0 ++ vpickve2gr.w t2, vr22, 1 ++ vpickve2gr.w t3, vr22, 2 ++ vpickve2gr.w t4, vr22, 3 ++ add.w s2, s2, t1 ++ add.w s3, s3, t2 ++ add.w s4, s4, t3 ++ add.w s5, s5, t4 ++ srai.w s2, s2, 7 ++ srai.w s3, s3, 7 ++ srai.w s4, s4, 7 ++ srai.w s5, s5, 7 ++ slt t1, s2, t0 ++ slt t2, s3, t0 ++ slt t3, s4, t0 ++ slt t4, s5, t0 ++ maskeqz s2, s2, t1 ++ maskeqz s3, s3, t2 ++ maskeqz s4, s4, t3 ++ maskeqz s5, s5, t4 ++ masknez t1, t0, t1 ++ masknez t2, t0, t2 ++ masknez t3, t0, t3 ++ masknez t4, t0, t4 ++ or s2, s2, t1 ++ or s3, s3, t2 ++ or s4, s4, t3 ++ or s5, s5, t4 ++ st.h s2, a1, 0 ++ st.h s3, a1, 2 ++ st.h s4, a1, 4 ++ st.h s5, a1, 6 ++ ++ addi.d a1, a1, 8 ++ sub.d a3, a3, s1 ++ addi.d a5, a5, 16 ++ slli.d t3, a6, 3 ++ add.d a4, a4, t3 ++ sub.d a4, a4, s1 ++ sub.d a4, a4, s1 ++ addi.d a2, a2, -4 ++ bge a2, t7, .LOOP_START ++ blt zero, a2, .RES ++ b .END_LOOP ++.RES: ++ li.w t1, 0 ++.DSTW: ++ slli.w t2, t1, 2 ++ ldx.w t2, a5, t2 ++ li.w t3, 0 ++ li.w t8, 0 ++.FILTERSIZE: ++ add.w t4, t2, t3 ++ ldx.bu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t7, t6, 1 ++ ldx.h t7, a4, t7 ++ mul.w t7, t5, t7 ++ add.w t8, t8, t7 ++ addi.w t3, t3, 1 ++ blt t3, a6, .FILTERSIZE ++ srai.w t8, t8, 7 ++ slt t5, t8, t0 ++ maskeqz t8, t8, t5 ++ masknez t5, t0, t5 ++ or t8, t8, t5 ++ slli.w t4, t1, 1 ++ stx.h t8, a1, t4 ++ addi.w t1, t1, 1 ++ blt t1, a2, .DSTW ++ b .END_LOOP ++ ++.LOOP_DSTW8: ++ ld.w t1, a5, 0 ++ ld.w t2, a5, 4 ++ ld.w t3, a5, 8 ++ ld.w t4, a5, 12 ++ fldx.d f1, a3, t1 ++ fldx.d f2, a3, t2 ++ fldx.d f3, a3, t3 ++ fldx.d f4, a3, t4 ++ ld.w t1, a5, 16 ++ ld.w t2, a5, 20 ++ ld.w t3, a5, 24 ++ ld.w t4, a5, 28 ++ fldx.d f5, a3, t1 ++ fldx.d f6, a3, t2 ++ fldx.d f7, a3, t3 ++ fldx.d f8, a3, t4 ++ vld vr9, a4, 0 ++ vld vr10, a4, 16 ++ vld vr11, a4, 32 ++ vld vr12, a4, 48 ++ vld vr13, a4, 64 ++ vld vr14, a4, 80 ++ vld vr15, a4, 96 ++ vld vr16, a4, 112 ++ vilvl.b vr1, vr0, vr1 ++ vilvl.b vr2, vr0, vr2 ++ vilvl.b vr3, vr0, vr3 ++ vilvl.b vr4, vr0, vr4 ++ vilvl.b vr5, vr0, vr5 ++ vilvl.b vr6, vr0, vr6 ++ vilvl.b vr7, vr0, vr7 ++ vilvl.b vr8, vr0, vr8 ++ ++ vdp2.w.h vr17, vr1, vr9 ++ vdp2.w.h vr18, vr2, vr10 ++ vdp2.w.h vr19, vr3, vr11 ++ vdp2.w.h vr21, vr4, vr12 ++ vdp2.w.h vr1, vr5, vr13 ++ vdp2.w.h vr2, vr6, vr14 ++ vdp2.w.h vr3, vr7, vr15 ++ vdp2.w.h vr4, vr8, vr16 ++ vhaddw.d.w vr5, vr1, vr1 ++ vhaddw.d.w vr6, vr2, vr2 ++ vhaddw.d.w vr7, vr3, vr3 ++ vhaddw.d.w vr8, vr4, vr4 ++ vhaddw.d.w vr1, vr17, vr17 ++ vhaddw.d.w vr2, vr18, vr18 ++ vhaddw.d.w vr3, vr19, vr19 ++ vhaddw.d.w vr4, vr21, vr21 ++ vhaddw.q.d vr1, vr1, vr1 ++ vhaddw.q.d vr2, vr2, vr2 ++ vhaddw.q.d vr3, vr3, vr3 ++ vhaddw.q.d vr4, vr4, vr4 ++ vhaddw.q.d vr5, vr5, vr5 ++ vhaddw.q.d vr6, vr6, vr6 ++ vhaddw.q.d vr7, vr7, vr7 ++ vhaddw.q.d vr8, vr8, vr8 ++ vilvl.w vr1, vr2, vr1 ++ vilvl.w vr3, vr4, vr3 ++ vilvl.w vr5, vr6, vr5 ++ vilvl.w vr7, vr8, vr7 ++ vilvl.d vr1, vr3, vr1 ++ vilvl.d vr5, vr7, vr5 ++ vsrai.w vr1, vr1, 7 ++ vsrai.w vr5, vr5, 7 ++ vmin.w vr1, vr1, vr20 ++ vmin.w vr5, vr5, vr20 ++ ++ vpickev.h vr1, vr5, vr1 ++ vst vr1, a1, 0 ++ addi.d a1, a1, 16 ++ addi.d a5, a5, 32 ++ addi.d a4, a4, 128 ++ addi.d a2, a2, -8 ++ bge a2, t8, .LOOP_DSTW8 ++ blt zero, a2, .RES8 ++ b .END_LOOP ++.RES8: ++ li.w t1, 0 ++.DSTW8: ++ slli.w t2, t1, 2 ++ ldx.w t2, a5, t2 ++ li.w t3, 0 ++ li.w t8, 0 ++.FILTERSIZE8: ++ add.w t4, t2, t3 ++ ldx.bu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t7, t6, 1 ++ ldx.h t7, a4, t7 ++ mul.w t7, t5, t7 ++ add.w t8, t8, t7 ++ addi.w t3, t3, 1 ++ blt t3, a6, .FILTERSIZE8 ++ srai.w t8, t8, 7 ++ slt t5, t8, t0 ++ maskeqz t8, t8, t5 ++ masknez t5, t0, t5 ++ or t8, t8, t5 ++ slli.w t4, t1, 1 ++ stx.h t8, a1, t4 ++ addi.w t1, t1, 1 ++ blt t1, a2, .DSTW8 ++ b .END_LOOP ++ ++.LOOP_DSTW4: ++ ld.w t1, a5, 0 ++ ld.w t2, a5, 4 ++ ld.w t3, a5, 8 ++ ld.w t4, a5, 12 ++ fldx.s f1, a3, t1 ++ fldx.s f2, a3, t2 ++ fldx.s f3, a3, t3 ++ fldx.s f4, a3, t4 ++ ld.w t1, a5, 16 ++ ld.w t2, a5, 20 ++ ld.w t3, a5, 24 ++ ld.w t4, a5, 28 ++ fldx.s f5, a3, t1 ++ fldx.s f6, a3, t2 ++ fldx.s f7, a3, t3 ++ fldx.s f8, a3, t4 ++ vld vr9, a4, 0 ++ vld vr10, a4, 16 ++ vld vr11, a4, 32 ++ vld vr12, a4, 48 ++ vilvl.w vr1, vr2, vr1 ++ vilvl.w vr3, vr4, vr3 ++ vilvl.w vr5, vr6, vr5 ++ vilvl.w vr7, vr8, vr7 ++ vilvl.b vr1, vr0, vr1 ++ vilvl.b vr3, vr0, vr3 ++ vilvl.b vr5, vr0, vr5 ++ vilvl.b vr7, vr0, vr7 ++ ++ vdp2.w.h vr13, vr1, vr9 ++ vdp2.w.h vr14, vr3, vr10 ++ vdp2.w.h vr15, vr5, vr11 ++ vdp2.w.h vr16, vr7, vr12 ++ vhaddw.d.w vr13, vr13, vr13 ++ vhaddw.d.w vr14, vr14, vr14 ++ vhaddw.d.w vr15, vr15, vr15 ++ vhaddw.d.w vr16, vr16, vr16 ++ vpickev.w vr13, vr14, vr13 ++ vpickev.w vr15, vr16, vr15 ++ vsrai.w vr13, vr13, 7 ++ vsrai.w vr15, vr15, 7 ++ vmin.w vr13, vr13, vr20 ++ vmin.w vr15, vr15, vr20 ++ ++ vpickev.h vr13, vr15, vr13 ++ vst vr13, a1, 0 ++ addi.d a1, a1, 16 ++ addi.d a5, a5, 32 ++ addi.d a4, a4, 64 ++ addi.d a2, a2, -8 ++ bge a2, t8, .LOOP_DSTW4 ++ blt zero, a2, .RES4 ++ b .END_LOOP ++.RES4: ++ li.w t1, 0 ++.DSTW4: ++ slli.w t2, t1, 2 ++ ldx.w t2, a5, t2 ++ li.w t3, 0 ++ li.w t8, 0 ++.FILTERSIZE4: ++ add.w t4, t2, t3 ++ ldx.bu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t7, t6, 1 ++ ldx.h t7, a4, t7 ++ mul.w t7, t5, t7 ++ add.w t8, t8, t7 ++ addi.w t3, t3, 1 ++ blt t3, a6, .FILTERSIZE4 ++ srai.w t8, t8, 7 ++ slt t5, t8, t0 ++ maskeqz t8, t8, t5 ++ masknez t5, t0, t5 ++ or t8, t8, t5 ++ slli.w t4, t1, 1 ++ stx.h t8, a1, t4 ++ addi.w t1, t1, 1 ++ blt t1, a2, .DSTW4 ++ b .END_LOOP ++.END_DSTW4: ++ ++ li.w t1, 0 ++.LOOP_DSTW1: ++ slli.w t2, t1, 2 ++ ldx.w t2, a5, t2 ++ li.w t3, 0 ++ li.w t8, 0 ++.FILTERSIZE1: ++ add.w t4, t2, t3 ++ ldx.bu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t7, t6, 1 ++ ldx.h t7, a4, t7 ++ mul.w t7, t5, t7 ++ add.w t8, t8, t7 ++ addi.w t3, t3, 1 ++ blt t3, a6, .FILTERSIZE1 ++ srai.w t8, t8, 7 ++ slt t5, t8, t0 ++ maskeqz t8, t8, t5 ++ masknez t5, t0, t5 ++ or t8, t8, t5 ++ slli.w t4, t1, 1 ++ stx.h t8, a1, t4 ++ addi.w t1, t1, 1 ++ blt t1, a2, .LOOP_DSTW1 ++ b .END_LOOP ++.END_LOOP: ++ ++ ld.d s0, sp, 0 ++ ld.d s1, sp, 8 ++ ld.d s2, sp, 16 ++ ld.d s3, sp, 24 ++ ld.d s4, sp, 32 ++ ld.d s5, sp, 40 ++ ld.d s6, sp, 48 ++ ld.d s7, sp, 56 ++ ld.d s8, sp, 64 ++ addi.d sp, sp, 72 ++endfunc ++ ++/* void ff_hscale_8_to_19_lsx(SwsContext *c, int16_t *dst, int dstW, ++ * const uint8_t *src, const int16_t *filter, ++ * const int32_t *filterPos, int filterSize) ++ */ ++function ff_hscale_8_to_19_lsx ++ addi.d sp, sp, -72 ++ st.d s0, sp, 0 ++ st.d s1, sp, 8 ++ st.d s2, sp, 16 ++ st.d s3, sp, 24 ++ st.d s4, sp, 32 ++ st.d s5, sp, 40 ++ st.d s6, sp, 48 ++ st.d s7, sp, 56 ++ st.d s8, sp, 64 ++ li.w t0, 524287 ++ li.w t8, 8 ++ li.w t7, 4 ++ vldi vr0, 0 ++ vreplgr2vr.w vr20, t0 ++ beq a6, t7, .LOOP_DST4 ++ beq a6, t8, .LOOP_DST8 ++ blt t8, a6, .LOOP ++ b .END_DST4 ++ ++.LOOP: ++ li.w t1, 0 ++ li.w s1, 0 ++ li.w s2, 0 ++ li.w s3, 0 ++ li.w s4, 0 ++ li.w s5, 0 ++ vldi vr22, 0 ++ addi.w s0, a6, -7 ++ slli.w s7, a6, 1 ++ slli.w s8, a6, 2 ++ add.w t6, s7, s8 ++.LOOP_DST: ++ ld.w t2, a5, 0 ++ ld.w t3, a5, 4 ++ ld.w t4, a5, 8 ++ ld.w t5, a5, 12 ++ fldx.d f1, a3, t2 ++ fldx.d f2, a3, t3 ++ fldx.d f3, a3, t4 ++ fldx.d f4, a3, t5 ++ vld vr9, a4, 0 ++ vldx vr10, a4, s7 ++ vldx vr11, a4, s8 ++ vldx vr12, a4, t6 ++ vilvl.b vr1, vr0, vr1 ++ vilvl.b vr2, vr0, vr2 ++ vilvl.b vr3, vr0, vr3 ++ vilvl.b vr4, vr0, vr4 ++ vdp2.w.h vr17, vr1, vr9 ++ vdp2.w.h vr18, vr2, vr10 ++ vdp2.w.h vr19, vr3, vr11 ++ vdp2.w.h vr21, vr4, vr12 ++ vhaddw.d.w vr1, vr17, vr17 ++ vhaddw.d.w vr2, vr18, vr18 ++ vhaddw.d.w vr3, vr19, vr19 ++ vhaddw.d.w vr4, vr21, vr21 ++ vhaddw.q.d vr1, vr1, vr1 ++ vhaddw.q.d vr2, vr2, vr2 ++ vhaddw.q.d vr3, vr3, vr3 ++ vhaddw.q.d vr4, vr4, vr4 ++ vilvl.w vr1, vr2, vr1 ++ vilvl.w vr3, vr4, vr3 ++ vilvl.d vr1, vr3, vr1 ++ vadd.w vr22, vr22, vr1 ++ addi.w s1, s1, 8 ++ addi.d a3, a3, 8 ++ addi.d a4, a4, 16 ++ blt s1, s0, .LOOP_DST ++ blt s1, a6, .DSTA ++ b .END_FILTERA ++.DSTA: ++ ld.w t2, a5, 0 ++ li.w t3, 0 ++ move s6, s1 ++.FILTERA: ++ add.w t4, t2, t3 ++ ldx.bu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t6, t6, 1 ++ ldx.h t6, a4, t6 ++ mul.w t6, t5, t6 ++ add.w s2, s2, t6 ++ addi.w t3, t3, 1 ++ addi.w s6, s6, 1 ++ blt s6, a6, .FILTERA ++ ++ ld.w t2, a5, 4 ++ li.w t3, 0 ++ move s6, s1 ++ addi.w t1, t1, 1 ++.FILTERB: ++ add.w t4, t2, t3 ++ ldx.bu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t6, t6, 1 ++ ldx.h t6, a4, t6 ++ mul.w t6, t5, t6 ++ add.w s3, s3, t6 ++ addi.w t3, t3, 1 ++ addi.w s6, s6, 1 ++ blt s6, a6, .FILTERB ++ ld.w t2, a5, 8 ++ addi.w t1, t1, 1 ++ li.w t3, 0 ++ move s6, s1 ++.FILTERC: ++ add.w t4, t2, t3 ++ ldx.bu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t6, t6, 1 ++ ldx.h t6, a4, t6 ++ mul.w t6, t5, t6 ++ add.w s4, s4, t6 ++ addi.w t3, t3, 1 ++ addi.w s6, s6, 1 ++ blt s6, a6, .FILTERC ++ ld.w t2, a5, 12 ++ addi.w t1, t1, 1 ++ move s6, s1 ++ li.w t3, 0 ++.FILTERD: ++ add.w t4, t2, t3 ++ ldx.bu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t6, t6, 1 ++ ldx.h t6, a4, t6 ++ mul.w t6, t5, t6 ++ add.w s5, s5, t6 ++ addi.w t3, t3, 1 ++ addi.w s6, s6, 1 ++ blt s6, a6, .FILTERD ++.END_FILTERA: ++ vpickve2gr.w t1, vr22, 0 ++ vpickve2gr.w t2, vr22, 1 ++ vpickve2gr.w t3, vr22, 2 ++ vpickve2gr.w t4, vr22, 3 ++ add.w s2, s2, t1 ++ add.w s3, s3, t2 ++ add.w s4, s4, t3 ++ add.w s5, s5, t4 ++ srai.w s2, s2, 3 ++ srai.w s3, s3, 3 ++ srai.w s4, s4, 3 ++ srai.w s5, s5, 3 ++ slt t1, s2, t0 ++ slt t2, s3, t0 ++ slt t3, s4, t0 ++ slt t4, s5, t0 ++ maskeqz s2, s2, t1 ++ maskeqz s3, s3, t2 ++ maskeqz s4, s4, t3 ++ maskeqz s5, s5, t4 ++ masknez t1, t0, t1 ++ masknez t2, t0, t2 ++ masknez t3, t0, t3 ++ masknez t4, t0, t4 ++ or s2, s2, t1 ++ or s3, s3, t2 ++ or s4, s4, t3 ++ or s5, s5, t4 ++ st.w s2, a1, 0 ++ st.w s3, a1, 4 ++ st.w s4, a1, 8 ++ st.w s5, a1, 12 ++ ++ addi.d a1, a1, 16 ++ sub.d a3, a3, s1 ++ addi.d a5, a5, 16 ++ slli.d t3, a6, 3 ++ add.d a4, a4, t3 ++ sub.d a4, a4, s1 ++ sub.d a4, a4, s1 ++ addi.d a2, a2, -4 ++ bge a2, t7, .LOOP ++ blt zero, a2, .RESA ++ b .END ++.RESA: ++ li.w t1, 0 ++.DST: ++ slli.w t2, t1, 2 ++ ldx.w t2, a5, t2 ++ li.w t3, 0 ++ li.w t8, 0 ++.FILTER: ++ add.w t4, t2, t3 ++ ldx.bu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t7, t6, 1 ++ ldx.h t7, a4, t7 ++ mul.w t7, t5, t7 ++ add.w t8, t8, t7 ++ addi.w t3, t3, 1 ++ blt t3, a6, .FILTER ++ srai.w t8, t8, 3 ++ slt t5, t8, t0 ++ maskeqz t8, t8, t5 ++ masknez t5, t0, t5 ++ or t8, t8, t5 ++ slli.w t4, t1, 2 ++ stx.w t8, a1, t4 ++ addi.w t1, t1, 1 ++ blt t1, a2, .DST ++ b .END ++ ++.LOOP_DST8: ++ ld.w t1, a5, 0 ++ ld.w t2, a5, 4 ++ ld.w t3, a5, 8 ++ ld.w t4, a5, 12 ++ fldx.d f1, a3, t1 ++ fldx.d f2, a3, t2 ++ fldx.d f3, a3, t3 ++ fldx.d f4, a3, t4 ++ ld.w t1, a5, 16 ++ ld.w t2, a5, 20 ++ ld.w t3, a5, 24 ++ ld.w t4, a5, 28 ++ fldx.d f5, a3, t1 ++ fldx.d f6, a3, t2 ++ fldx.d f7, a3, t3 ++ fldx.d f8, a3, t4 ++ vld vr9, a4, 0 ++ vld vr10, a4, 16 ++ vld vr11, a4, 32 ++ vld vr12, a4, 48 ++ vld vr13, a4, 64 ++ vld vr14, a4, 80 ++ vld vr15, a4, 96 ++ vld vr16, a4, 112 ++ vilvl.b vr1, vr0, vr1 ++ vilvl.b vr2, vr0, vr2 ++ vilvl.b vr3, vr0, vr3 ++ vilvl.b vr4, vr0, vr4 ++ vilvl.b vr5, vr0, vr5 ++ vilvl.b vr6, vr0, vr6 ++ vilvl.b vr7, vr0, vr7 ++ vilvl.b vr8, vr0, vr8 ++ ++ vdp2.w.h vr17, vr1, vr9 ++ vdp2.w.h vr18, vr2, vr10 ++ vdp2.w.h vr19, vr3, vr11 ++ vdp2.w.h vr21, vr4, vr12 ++ vdp2.w.h vr1, vr5, vr13 ++ vdp2.w.h vr2, vr6, vr14 ++ vdp2.w.h vr3, vr7, vr15 ++ vdp2.w.h vr4, vr8, vr16 ++ vhaddw.d.w vr5, vr1, vr1 ++ vhaddw.d.w vr6, vr2, vr2 ++ vhaddw.d.w vr7, vr3, vr3 ++ vhaddw.d.w vr8, vr4, vr4 ++ vhaddw.d.w vr1, vr17, vr17 ++ vhaddw.d.w vr2, vr18, vr18 ++ vhaddw.d.w vr3, vr19, vr19 ++ vhaddw.d.w vr4, vr21, vr21 ++ vhaddw.q.d vr1, vr1, vr1 ++ vhaddw.q.d vr2, vr2, vr2 ++ vhaddw.q.d vr3, vr3, vr3 ++ vhaddw.q.d vr4, vr4, vr4 ++ vhaddw.q.d vr5, vr5, vr5 ++ vhaddw.q.d vr6, vr6, vr6 ++ vhaddw.q.d vr7, vr7, vr7 ++ vhaddw.q.d vr8, vr8, vr8 ++ vilvl.w vr1, vr2, vr1 ++ vilvl.w vr3, vr4, vr3 ++ vilvl.w vr5, vr6, vr5 ++ vilvl.w vr7, vr8, vr7 ++ vilvl.d vr1, vr3, vr1 ++ vilvl.d vr5, vr7, vr5 ++ vsrai.w vr1, vr1, 3 ++ vsrai.w vr5, vr5, 3 ++ vmin.w vr1, vr1, vr20 ++ vmin.w vr5, vr5, vr20 ++ ++ vst vr1, a1, 0 ++ vst vr5, a1, 16 ++ addi.d a1, a1, 32 ++ addi.d a5, a5, 32 ++ addi.d a4, a4, 128 ++ addi.d a2, a2, -8 ++ bge a2, t8, .LOOP_DST8 ++ blt zero, a2, .REST8 ++ b .END ++.REST8: ++ li.w t1, 0 ++.DST8: ++ slli.w t2, t1, 2 ++ ldx.w t2, a5, t2 ++ li.w t3, 0 ++ li.w t8, 0 ++.FILTER8: ++ add.w t4, t2, t3 ++ ldx.bu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t7, t6, 1 ++ ldx.h t7, a4, t7 ++ mul.w t7, t5, t7 ++ add.w t8, t8, t7 ++ addi.w t3, t3, 1 ++ blt t3, a6, .FILTER8 ++ srai.w t8, t8, 3 ++ slt t5, t8, t0 ++ maskeqz t8, t8, t5 ++ masknez t5, t0, t5 ++ or t8, t8, t5 ++ slli.w t4, t1, 2 ++ stx.w t8, a1, t4 ++ addi.w t1, t1, 1 ++ blt t1, a2, .DST8 ++ b .END ++ ++.LOOP_DST4: ++ ld.w t1, a5, 0 ++ ld.w t2, a5, 4 ++ ld.w t3, a5, 8 ++ ld.w t4, a5, 12 ++ fldx.s f1, a3, t1 ++ fldx.s f2, a3, t2 ++ fldx.s f3, a3, t3 ++ fldx.s f4, a3, t4 ++ ld.w t1, a5, 16 ++ ld.w t2, a5, 20 ++ ld.w t3, a5, 24 ++ ld.w t4, a5, 28 ++ fldx.s f5, a3, t1 ++ fldx.s f6, a3, t2 ++ fldx.s f7, a3, t3 ++ fldx.s f8, a3, t4 ++ vld vr9, a4, 0 ++ vld vr10, a4, 16 ++ vld vr11, a4, 32 ++ vld vr12, a4, 48 ++ vilvl.w vr1, vr2, vr1 ++ vilvl.w vr3, vr4, vr3 ++ vilvl.w vr5, vr6, vr5 ++ vilvl.w vr7, vr8, vr7 ++ vilvl.b vr1, vr0, vr1 ++ vilvl.b vr3, vr0, vr3 ++ vilvl.b vr5, vr0, vr5 ++ vilvl.b vr7, vr0, vr7 ++ ++ vdp2.w.h vr13, vr1, vr9 ++ vdp2.w.h vr14, vr3, vr10 ++ vdp2.w.h vr15, vr5, vr11 ++ vdp2.w.h vr16, vr7, vr12 ++ vhaddw.d.w vr13, vr13, vr13 ++ vhaddw.d.w vr14, vr14, vr14 ++ vhaddw.d.w vr15, vr15, vr15 ++ vhaddw.d.w vr16, vr16, vr16 ++ vpickev.w vr13, vr14, vr13 ++ vpickev.w vr15, vr16, vr15 ++ vsrai.w vr13, vr13, 3 ++ vsrai.w vr15, vr15, 3 ++ vmin.w vr13, vr13, vr20 ++ vmin.w vr15, vr15, vr20 ++ ++ vst vr13, a1, 0 ++ vst vr15, a1, 16 ++ addi.d a1, a1, 32 ++ addi.d a5, a5, 32 ++ addi.d a4, a4, 64 ++ addi.d a2, a2, -8 ++ bge a2, t8, .LOOP_DST4 ++ blt zero, a2, .REST4 ++ b .END ++.REST4: ++ li.w t1, 0 ++.DST4: ++ slli.w t2, t1, 2 ++ ldx.w t2, a5, t2 ++ li.w t3, 0 ++ li.w t8, 0 ++.FILTER4: ++ add.w t4, t2, t3 ++ ldx.bu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t7, t6, 1 ++ ldx.h t7, a4, t7 ++ mul.w t7, t5, t7 ++ add.w t8, t8, t7 ++ addi.w t3, t3, 1 ++ blt t3, a6, .FILTER4 ++ srai.w t8, t8, 3 ++ slt t5, t8, t0 ++ maskeqz t8, t8, t5 ++ masknez t5, t0, t5 ++ or t8, t8, t5 ++ slli.w t4, t1, 2 ++ stx.w t8, a1, t4 ++ addi.w t1, t1, 1 ++ blt t1, a2, .DST4 ++ b .END ++.END_DST4: ++ ++ li.w t1, 0 ++.LOOP_DST1: ++ slli.w t2, t1, 2 ++ ldx.w t2, a5, t2 ++ li.w t3, 0 ++ li.w t8, 0 ++.FILTER1: ++ add.w t4, t2, t3 ++ ldx.bu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t7, t6, 1 ++ ldx.h t7, a4, t7 ++ mul.w t7, t5, t7 ++ add.w t8, t8, t7 ++ addi.w t3, t3, 1 ++ blt t3, a6, .FILTER1 ++ srai.w t8, t8, 3 ++ slt t5, t8, t0 ++ maskeqz t8, t8, t5 ++ masknez t5, t0, t5 ++ or t8, t8, t5 ++ slli.w t4, t1, 2 ++ stx.w t8, a1, t4 ++ addi.w t1, t1, 1 ++ blt t1, a2, .LOOP_DST1 ++ b .END ++.END: ++ ++ ld.d s0, sp, 0 ++ ld.d s1, sp, 8 ++ ld.d s2, sp, 16 ++ ld.d s3, sp, 24 ++ ld.d s4, sp, 32 ++ ld.d s5, sp, 40 ++ ld.d s6, sp, 48 ++ ld.d s7, sp, 56 ++ ld.d s8, sp, 64 ++ addi.d sp, sp, 72 ++endfunc ++ ++/* void ff_hscale_16_to_15_sub_lsx(SwsContext *c, int16_t *dst, int dstW, ++ * const uint8_t *src, const int16_t *filter, ++ * const int32_t *filterPos, int filterSize, int sh) ++ */ ++function ff_hscale_16_to_15_sub_lsx ++ addi.d sp, sp, -72 ++ st.d s0, sp, 0 ++ st.d s1, sp, 8 ++ st.d s2, sp, 16 ++ st.d s3, sp, 24 ++ st.d s4, sp, 32 ++ st.d s5, sp, 40 ++ st.d s6, sp, 48 ++ st.d s7, sp, 56 ++ st.d s8, sp, 64 ++ li.w t0, 32767 ++ li.w t8, 8 ++ li.w t7, 4 ++ vreplgr2vr.w vr20, t0 ++ vreplgr2vr.w vr0, a7 ++ beq a6, t7, .LOOP_HS15_DST4 ++ beq a6, t8, .LOOP_HS15_DST8 ++ blt t8, a6, .LOOP_HS15 ++ b .END_HS15_DST4 ++ ++.LOOP_HS15: ++ li.w t1, 0 ++ li.w s1, 0 ++ li.w s2, 0 ++ li.w s3, 0 ++ li.w s4, 0 ++ li.w s5, 0 ++ vldi vr22, 0 ++ addi.w s0, a6, -7 ++ slli.w s7, a6, 1 ++ slli.w s8, a6, 2 ++ add.w t6, s7, s8 ++.LOOP_HS15_DST: ++ ld.w t2, a5, 0 ++ ld.w t3, a5, 4 ++ ld.w t4, a5, 8 ++ ld.w t5, a5, 12 ++ slli.w t2, t2, 1 ++ slli.w t3, t3, 1 ++ slli.w t4, t4, 1 ++ slli.w t5, t5, 1 ++ vldx vr1, a3, t2 ++ vldx vr2, a3, t3 ++ vldx vr3, a3, t4 ++ vldx vr4, a3, t5 ++ vld vr9, a4, 0 ++ vldx vr10, a4, s7 ++ vldx vr11, a4, s8 ++ vldx vr12, a4, t6 ++ vmulwev.w.hu.h vr17, vr1, vr9 ++ vmulwev.w.hu.h vr18, vr2, vr10 ++ vmulwev.w.hu.h vr19, vr3, vr11 ++ vmulwev.w.hu.h vr21, vr4, vr12 ++ vmaddwod.w.hu.h vr17, vr1, vr9 ++ vmaddwod.w.hu.h vr18, vr2, vr10 ++ vmaddwod.w.hu.h vr19, vr3, vr11 ++ vmaddwod.w.hu.h vr21, vr4, vr12 ++ vhaddw.d.w vr1, vr17, vr17 ++ vhaddw.d.w vr2, vr18, vr18 ++ vhaddw.d.w vr3, vr19, vr19 ++ vhaddw.d.w vr4, vr21, vr21 ++ vhaddw.q.d vr1, vr1, vr1 ++ vhaddw.q.d vr2, vr2, vr2 ++ vhaddw.q.d vr3, vr3, vr3 ++ vhaddw.q.d vr4, vr4, vr4 ++ vilvl.w vr1, vr2, vr1 ++ vilvl.w vr3, vr4, vr3 ++ vilvl.d vr1, vr3, vr1 ++ vadd.w vr22, vr22, vr1 ++ addi.w s1, s1, 8 ++ addi.d a3, a3, 16 ++ addi.d a4, a4, 16 ++ blt s1, s0, .LOOP_HS15_DST ++ blt s1, a6, .HS15_DSTA ++ b .END_HS15_FILTERA ++.HS15_DSTA: ++ ld.w t2, a5, 0 ++ li.w t3, 0 ++ move s6, s1 ++.HS15_FILTERA: ++ add.w t4, t2, t3 ++ slli.w t4, t4, 1 ++ ldx.hu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t6, t6, 1 ++ ldx.h t6, a4, t6 ++ mul.w t6, t5, t6 ++ add.w s2, s2, t6 ++ addi.w t3, t3, 1 ++ addi.w s6, s6, 1 ++ blt s6, a6, .HS15_FILTERA ++ ++ ld.w t2, a5, 4 ++ li.w t3, 0 ++ move s6, s1 ++ addi.w t1, t1, 1 ++.HS15_FILTERB: ++ add.w t4, t2, t3 ++ slli.w t4, t4, 1 ++ ldx.hu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t6, t6, 1 ++ ldx.h t6, a4, t6 ++ mul.w t6, t5, t6 ++ add.w s3, s3, t6 ++ addi.w t3, t3, 1 ++ addi.w s6, s6, 1 ++ blt s6, a6, .HS15_FILTERB ++ ld.w t2, a5, 8 ++ addi.w t1, t1, 1 ++ li.w t3, 0 ++ move s6, s1 ++.HS15_FILTERC: ++ add.w t4, t2, t3 ++ slli.w t4, t4, 1 ++ ldx.hu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t6, t6, 1 ++ ldx.h t6, a4, t6 ++ mul.w t6, t5, t6 ++ add.w s4, s4, t6 ++ addi.w t3, t3, 1 ++ addi.w s6, s6, 1 ++ blt s6, a6, .HS15_FILTERC ++ ld.w t2, a5, 12 ++ addi.w t1, t1, 1 ++ move s6, s1 ++ li.w t3, 0 ++.HS15_FILTERD: ++ add.w t4, t2, t3 ++ slli.w t4, t4, 1 ++ ldx.hu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t6, t6, 1 ++ ldx.h t6, a4, t6 ++ mul.w t6, t5, t6 ++ add.w s5, s5, t6 ++ addi.w t3, t3, 1 ++ addi.w s6, s6, 1 ++ blt s6, a6, .HS15_FILTERD ++.END_HS15_FILTERA: ++ vpickve2gr.w t1, vr22, 0 ++ vpickve2gr.w t2, vr22, 1 ++ vpickve2gr.w t3, vr22, 2 ++ vpickve2gr.w t4, vr22, 3 ++ add.w s2, s2, t1 ++ add.w s3, s3, t2 ++ add.w s4, s4, t3 ++ add.w s5, s5, t4 ++ sra.w s2, s2, a7 ++ sra.w s3, s3, a7 ++ sra.w s4, s4, a7 ++ sra.w s5, s5, a7 ++ slt t1, s2, t0 ++ slt t2, s3, t0 ++ slt t3, s4, t0 ++ slt t4, s5, t0 ++ maskeqz s2, s2, t1 ++ maskeqz s3, s3, t2 ++ maskeqz s4, s4, t3 ++ maskeqz s5, s5, t4 ++ masknez t1, t0, t1 ++ masknez t2, t0, t2 ++ masknez t3, t0, t3 ++ masknez t4, t0, t4 ++ or s2, s2, t1 ++ or s3, s3, t2 ++ or s4, s4, t3 ++ or s5, s5, t4 ++ st.h s2, a1, 0 ++ st.h s3, a1, 2 ++ st.h s4, a1, 4 ++ st.h s5, a1, 6 ++ ++ addi.d a1, a1, 8 ++ sub.d a3, a3, s1 ++ sub.d a3, a3, s1 ++ addi.d a5, a5, 16 ++ slli.d t3, a6, 3 ++ add.d a4, a4, t3 ++ sub.d a4, a4, s1 ++ sub.d a4, a4, s1 ++ addi.d a2, a2, -4 ++ bge a2, t7, .LOOP_HS15 ++ blt zero, a2, .HS15_RESA ++ b .HS15_END ++.HS15_RESA: ++ li.w t1, 0 ++.HS15_DST: ++ slli.w t2, t1, 2 ++ ldx.w t2, a5, t2 ++ li.w t3, 0 ++ li.w t8, 0 ++.HS15_FILTER: ++ add.w t4, t2, t3 ++ slli.w t4, t4, 1 ++ ldx.hu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t7, t6, 1 ++ ldx.h t7, a4, t7 ++ mul.w t7, t5, t7 ++ add.w t8, t8, t7 ++ addi.w t3, t3, 1 ++ blt t3, a6, .HS15_FILTER ++ sra.w t8, t8, a7 ++ slt t5, t8, t0 ++ maskeqz t8, t8, t5 ++ masknez t5, t0, t5 ++ or t8, t8, t5 ++ slli.w t4, t1, 1 ++ stx.h t8, a1, t4 ++ addi.w t1, t1, 1 ++ blt t1, a2, .HS15_DST ++ b .HS15_END ++ ++.LOOP_HS15_DST8: ++ ld.w t1, a5, 0 ++ ld.w t2, a5, 4 ++ ld.w t3, a5, 8 ++ ld.w t4, a5, 12 ++ slli.w t1, t1, 1 ++ slli.w t2, t2, 1 ++ slli.w t3, t3, 1 ++ slli.w t4, t4, 1 ++ vldx vr1, a3, t1 ++ vldx vr2, a3, t2 ++ vldx vr3, a3, t3 ++ vldx vr4, a3, t4 ++ ld.w t1, a5, 16 ++ ld.w t2, a5, 20 ++ ld.w t3, a5, 24 ++ ld.w t4, a5, 28 ++ slli.w t1, t1, 1 ++ slli.w t2, t2, 1 ++ slli.w t3, t3, 1 ++ slli.w t4, t4, 1 ++ vldx vr5, a3, t1 ++ vldx vr6, a3, t2 ++ vldx vr7, a3, t3 ++ vldx vr8, a3, t4 ++ vld vr9, a4, 0 ++ vld vr10, a4, 16 ++ vld vr11, a4, 32 ++ vld vr12, a4, 48 ++ vld vr13, a4, 64 ++ vld vr14, a4, 80 ++ vld vr15, a4, 96 ++ vld vr16, a4, 112 ++ ++ vmulwev.w.hu.h vr17, vr1, vr9 ++ vmulwev.w.hu.h vr18, vr2, vr10 ++ vmulwev.w.hu.h vr19, vr3, vr11 ++ vmulwev.w.hu.h vr21, vr4, vr12 ++ vmaddwod.w.hu.h vr17, vr1, vr9 ++ vmaddwod.w.hu.h vr18, vr2, vr10 ++ vmaddwod.w.hu.h vr19, vr3, vr11 ++ vmaddwod.w.hu.h vr21, vr4, vr12 ++ vmulwev.w.hu.h vr1, vr5, vr13 ++ vmulwev.w.hu.h vr2, vr6, vr14 ++ vmulwev.w.hu.h vr3, vr7, vr15 ++ vmulwev.w.hu.h vr4, vr8, vr16 ++ vmaddwod.w.hu.h vr1, vr5, vr13 ++ vmaddwod.w.hu.h vr2, vr6, vr14 ++ vmaddwod.w.hu.h vr3, vr7, vr15 ++ vmaddwod.w.hu.h vr4, vr8, vr16 ++ vhaddw.d.w vr5, vr1, vr1 ++ vhaddw.d.w vr6, vr2, vr2 ++ vhaddw.d.w vr7, vr3, vr3 ++ vhaddw.d.w vr8, vr4, vr4 ++ vhaddw.d.w vr1, vr17, vr17 ++ vhaddw.d.w vr2, vr18, vr18 ++ vhaddw.d.w vr3, vr19, vr19 ++ vhaddw.d.w vr4, vr21, vr21 ++ vhaddw.q.d vr1, vr1, vr1 ++ vhaddw.q.d vr2, vr2, vr2 ++ vhaddw.q.d vr3, vr3, vr3 ++ vhaddw.q.d vr4, vr4, vr4 ++ vhaddw.q.d vr5, vr5, vr5 ++ vhaddw.q.d vr6, vr6, vr6 ++ vhaddw.q.d vr7, vr7, vr7 ++ vhaddw.q.d vr8, vr8, vr8 ++ vilvl.w vr1, vr2, vr1 ++ vilvl.w vr3, vr4, vr3 ++ vilvl.w vr5, vr6, vr5 ++ vilvl.w vr7, vr8, vr7 ++ vilvl.d vr1, vr3, vr1 ++ vilvl.d vr5, vr7, vr5 ++ vsra.w vr1, vr1, vr0 ++ vsra.w vr5, vr5, vr0 ++ vmin.w vr1, vr1, vr20 ++ vmin.w vr5, vr5, vr20 ++ ++ vpickev.h vr1, vr5, vr1 ++ vst vr1, a1, 0 ++ addi.d a1, a1, 16 ++ addi.d a5, a5, 32 ++ addi.d a4, a4, 128 ++ addi.d a2, a2, -8 ++ bge a2, t8, .LOOP_HS15_DST8 ++ blt zero, a2, .HS15_REST8 ++ b .HS15_END ++.HS15_REST8: ++ li.w t1, 0 ++.HS15_DST8: ++ slli.w t2, t1, 2 ++ ldx.w t2, a5, t2 ++ li.w t3, 0 ++ li.w t8, 0 ++.HS15_FILTER8: ++ add.w t4, t2, t3 ++ slli.w t4, t4, 1 ++ ldx.hu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t7, t6, 1 ++ ldx.h t7, a4, t7 ++ mul.w t7, t5, t7 ++ add.w t8, t8, t7 ++ addi.w t3, t3, 1 ++ blt t3, a6, .HS15_FILTER8 ++ sra.w t8, t8, a7 ++ slt t5, t8, t0 ++ maskeqz t8, t8, t5 ++ masknez t5, t0, t5 ++ or t8, t8, t5 ++ slli.w t4, t1, 1 ++ stx.h t8, a1, t4 ++ addi.w t1, t1, 1 ++ blt t1, a2, .HS15_DST8 ++ b .HS15_END ++ ++.LOOP_HS15_DST4: ++ ld.w t1, a5, 0 ++ ld.w t2, a5, 4 ++ ld.w t3, a5, 8 ++ ld.w t4, a5, 12 ++ slli.w t1, t1, 1 ++ slli.w t2, t2, 1 ++ slli.w t3, t3, 1 ++ slli.w t4, t4, 1 ++ fldx.d f1, a3, t1 ++ fldx.d f2, a3, t2 ++ fldx.d f3, a3, t3 ++ fldx.d f4, a3, t4 ++ ld.w t1, a5, 16 ++ ld.w t2, a5, 20 ++ ld.w t3, a5, 24 ++ ld.w t4, a5, 28 ++ slli.w t1, t1, 1 ++ slli.w t2, t2, 1 ++ slli.w t3, t3, 1 ++ slli.w t4, t4, 1 ++ fldx.d f5, a3, t1 ++ fldx.d f6, a3, t2 ++ fldx.d f7, a3, t3 ++ fldx.d f8, a3, t4 ++ vld vr9, a4, 0 ++ vld vr10, a4, 16 ++ vld vr11, a4, 32 ++ vld vr12, a4, 48 ++ vilvl.d vr1, vr2, vr1 ++ vilvl.d vr3, vr4, vr3 ++ vilvl.d vr5, vr6, vr5 ++ vilvl.d vr7, vr8, vr7 ++ vmulwev.w.hu.h vr13, vr1, vr9 ++ vmulwev.w.hu.h vr14, vr3, vr10 ++ vmulwev.w.hu.h vr15, vr5, vr11 ++ vmulwev.w.hu.h vr16, vr7, vr12 ++ vmaddwod.w.hu.h vr13, vr1, vr9 ++ vmaddwod.w.hu.h vr14, vr3, vr10 ++ vmaddwod.w.hu.h vr15, vr5, vr11 ++ vmaddwod.w.hu.h vr16, vr7, vr12 ++ vhaddw.d.w vr13, vr13, vr13 ++ vhaddw.d.w vr14, vr14, vr14 ++ vhaddw.d.w vr15, vr15, vr15 ++ vhaddw.d.w vr16, vr16, vr16 ++ vpickev.w vr13, vr14, vr13 ++ vpickev.w vr15, vr16, vr15 ++ vsra.w vr13, vr13, vr0 ++ vsra.w vr15, vr15, vr0 ++ vmin.w vr13, vr13, vr20 ++ vmin.w vr15, vr15, vr20 ++ ++ vpickev.h vr13, vr15, vr13 ++ vst vr13, a1, 0 ++ addi.d a1, a1, 16 ++ addi.d a5, a5, 32 ++ addi.d a4, a4, 64 ++ addi.d a2, a2, -8 ++ bge a2, t8, .LOOP_HS15_DST4 ++ blt zero, a2, .HS15_REST4 ++ b .HS15_END ++.HS15_REST4: ++ li.w t1, 0 ++.HS15_DST4: ++ slli.w t2, t1, 2 ++ ldx.w t2, a5, t2 ++ li.w t3, 0 ++ li.w t8, 0 ++.HS15_FILTER4: ++ add.w t4, t2, t3 ++ slli.w t4, t4, 1 ++ ldx.hu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t7, t6, 1 ++ ldx.h t7, a4, t7 ++ mul.w t7, t5, t7 ++ add.w t8, t8, t7 ++ addi.w t3, t3, 1 ++ blt t3, a6, .HS15_FILTER4 ++ sra.w t8, t8, a7 ++ slt t5, t8, t0 ++ maskeqz t8, t8, t5 ++ masknez t5, t0, t5 ++ or t8, t8, t5 ++ slli.w t4, t1, 1 ++ stx.h t8, a1, t4 ++ addi.w t1, t1, 1 ++ blt t1, a2, .HS15_DST4 ++ b .HS15_END ++.END_HS15_DST4: ++ ++ li.w t1, 0 ++.LOOP_HS15_DST1: ++ slli.w t2, t1, 2 ++ ldx.w t2, a5, t2 ++ li.w t3, 0 ++ li.w t8, 0 ++.HS15_FILTER1: ++ add.w t4, t2, t3 ++ slli.w t4, t4, 1 ++ ldx.hu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t7, t6, 1 ++ ldx.h t7, a4, t7 ++ mul.w t7, t5, t7 ++ add.w t8, t8, t7 ++ addi.w t3, t3, 1 ++ blt t3, a6, .HS15_FILTER1 ++ sra.w t8, t8, a7 ++ slt t5, t8, t0 ++ maskeqz t8, t8, t5 ++ masknez t5, t0, t5 ++ or t8, t8, t5 ++ slli.w t4, t1, 1 ++ stx.h t8, a1, t4 ++ addi.w t1, t1, 1 ++ blt t1, a2, .LOOP_HS15_DST1 ++ b .HS15_END ++.HS15_END: ++ ++ ld.d s0, sp, 0 ++ ld.d s1, sp, 8 ++ ld.d s2, sp, 16 ++ ld.d s3, sp, 24 ++ ld.d s4, sp, 32 ++ ld.d s5, sp, 40 ++ ld.d s6, sp, 48 ++ ld.d s7, sp, 56 ++ ld.d s8, sp, 64 ++ addi.d sp, sp, 72 ++endfunc ++ ++/* void ff_hscale_16_to_19_sub_lsx(SwsContext *c, int16_t *dst, int dstW, ++ * const uint8_t *src, const int16_t *filter, ++ * const int32_t *filterPos, int filterSize, int sh) ++ */ ++function ff_hscale_16_to_19_sub_lsx ++ addi.d sp, sp, -72 ++ st.d s0, sp, 0 ++ st.d s1, sp, 8 ++ st.d s2, sp, 16 ++ st.d s3, sp, 24 ++ st.d s4, sp, 32 ++ st.d s5, sp, 40 ++ st.d s6, sp, 48 ++ st.d s7, sp, 56 ++ st.d s8, sp, 64 ++ ++ li.w t0, 524287 ++ li.w t8, 8 ++ li.w t7, 4 ++ vreplgr2vr.w vr20, t0 ++ vreplgr2vr.w vr0, a7 ++ beq a6, t7, .LOOP_HS19_DST4 ++ beq a6, t8, .LOOP_HS19_DST8 ++ blt t8, a6, .LOOP_HS19 ++ b .END_HS19_DST4 ++ ++.LOOP_HS19: ++ li.w t1, 0 ++ li.w s1, 0 ++ li.w s2, 0 ++ li.w s3, 0 ++ li.w s4, 0 ++ li.w s5, 0 ++ vldi vr22, 0 ++ addi.w s0, a6, -7 ++ slli.w s7, a6, 1 ++ slli.w s8, a6, 2 ++ add.w t6, s7, s8 ++.LOOP_HS19_DST: ++ ld.w t2, a5, 0 ++ ld.w t3, a5, 4 ++ ld.w t4, a5, 8 ++ ld.w t5, a5, 12 ++ slli.w t2, t2, 1 ++ slli.w t3, t3, 1 ++ slli.w t4, t4, 1 ++ slli.w t5, t5, 1 ++ vldx vr1, a3, t2 ++ vldx vr2, a3, t3 ++ vldx vr3, a3, t4 ++ vldx vr4, a3, t5 ++ vld vr9, a4, 0 ++ vldx vr10, a4, s7 ++ vldx vr11, a4, s8 ++ vldx vr12, a4, t6 ++ vmulwev.w.hu.h vr17, vr1, vr9 ++ vmulwev.w.hu.h vr18, vr2, vr10 ++ vmulwev.w.hu.h vr19, vr3, vr11 ++ vmulwev.w.hu.h vr21, vr4, vr12 ++ vmaddwod.w.hu.h vr17, vr1, vr9 ++ vmaddwod.w.hu.h vr18, vr2, vr10 ++ vmaddwod.w.hu.h vr19, vr3, vr11 ++ vmaddwod.w.hu.h vr21, vr4, vr12 ++ vhaddw.d.w vr1, vr17, vr17 ++ vhaddw.d.w vr2, vr18, vr18 ++ vhaddw.d.w vr3, vr19, vr19 ++ vhaddw.d.w vr4, vr21, vr21 ++ vhaddw.q.d vr1, vr1, vr1 ++ vhaddw.q.d vr2, vr2, vr2 ++ vhaddw.q.d vr3, vr3, vr3 ++ vhaddw.q.d vr4, vr4, vr4 ++ vilvl.w vr1, vr2, vr1 ++ vilvl.w vr3, vr4, vr3 ++ vilvl.d vr1, vr3, vr1 ++ vadd.w vr22, vr22, vr1 ++ addi.w s1, s1, 8 ++ addi.d a3, a3, 16 ++ addi.d a4, a4, 16 ++ blt s1, s0, .LOOP_HS19_DST ++ blt s1, a6, .HS19_DSTA ++ b .END_HS19_FILTERA ++.HS19_DSTA: ++ ld.w t2, a5, 0 ++ li.w t3, 0 ++ move s6, s1 ++.HS19_FILTERA: ++ add.w t4, t2, t3 ++ slli.w t4, t4, 1 ++ ldx.hu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t6, t6, 1 ++ ldx.h t6, a4, t6 ++ mul.w t6, t5, t6 ++ add.w s2, s2, t6 ++ addi.w t3, t3, 1 ++ addi.w s6, s6, 1 ++ blt s6, a6, .HS19_FILTERA ++ ++ ld.w t2, a5, 4 ++ li.w t3, 0 ++ move s6, s1 ++ addi.w t1, t1, 1 ++.HS19_FILTERB: ++ add.w t4, t2, t3 ++ slli.w t4, t4, 1 ++ ldx.hu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t6, t6, 1 ++ ldx.h t6, a4, t6 ++ mul.w t6, t5, t6 ++ add.w s3, s3, t6 ++ addi.w t3, t3, 1 ++ addi.w s6, s6, 1 ++ blt s6, a6, .HS19_FILTERB ++ ld.w t2, a5, 8 ++ addi.w t1, t1, 1 ++ li.w t3, 0 ++ move s6, s1 ++.HS19_FILTERC: ++ add.w t4, t2, t3 ++ slli.w t4, t4, 1 ++ ldx.hu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t6, t6, 1 ++ ldx.h t6, a4, t6 ++ mul.w t6, t5, t6 ++ add.w s4, s4, t6 ++ addi.w t3, t3, 1 ++ addi.w s6, s6, 1 ++ blt s6, a6, .HS19_FILTERC ++ ld.w t2, a5, 12 ++ addi.w t1, t1, 1 ++ move s6, s1 ++ li.w t3, 0 ++.HS19_FILTERD: ++ add.w t4, t2, t3 ++ slli.w t4, t4, 1 ++ ldx.hu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t6, t6, 1 ++ ldx.h t6, a4, t6 ++ mul.w t6, t5, t6 ++ add.w s5, s5, t6 ++ addi.w t3, t3, 1 ++ addi.w s6, s6, 1 ++ blt s6, a6, .HS19_FILTERD ++.END_HS19_FILTERA: ++ vpickve2gr.w t1, vr22, 0 ++ vpickve2gr.w t2, vr22, 1 ++ vpickve2gr.w t3, vr22, 2 ++ vpickve2gr.w t4, vr22, 3 ++ add.w s2, s2, t1 ++ add.w s3, s3, t2 ++ add.w s4, s4, t3 ++ add.w s5, s5, t4 ++ sra.w s2, s2, a7 ++ sra.w s3, s3, a7 ++ sra.w s4, s4, a7 ++ sra.w s5, s5, a7 ++ slt t1, s2, t0 ++ slt t2, s3, t0 ++ slt t3, s4, t0 ++ slt t4, s5, t0 ++ maskeqz s2, s2, t1 ++ maskeqz s3, s3, t2 ++ maskeqz s4, s4, t3 ++ maskeqz s5, s5, t4 ++ masknez t1, t0, t1 ++ masknez t2, t0, t2 ++ masknez t3, t0, t3 ++ masknez t4, t0, t4 ++ or s2, s2, t1 ++ or s3, s3, t2 ++ or s4, s4, t3 ++ or s5, s5, t4 ++ st.w s2, a1, 0 ++ st.w s3, a1, 4 ++ st.w s4, a1, 8 ++ st.w s5, a1, 12 ++ ++ addi.d a1, a1, 16 ++ sub.d a3, a3, s1 ++ sub.d a3, a3, s1 ++ addi.d a5, a5, 16 ++ slli.d t3, a6, 3 ++ add.d a4, a4, t3 ++ sub.d a4, a4, s1 ++ sub.d a4, a4, s1 ++ addi.d a2, a2, -4 ++ bge a2, t7, .LOOP_HS19 ++ blt zero, a2, .HS19_RESA ++ b .HS19_END ++.HS19_RESA: ++ li.w t1, 0 ++.HS19_DST: ++ slli.w t2, t1, 2 ++ ldx.w t2, a5, t2 ++ li.w t3, 0 ++ li.w t8, 0 ++.HS19_FILTER: ++ add.w t4, t2, t3 ++ slli.w t4, t4, 1 ++ ldx.hu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t7, t6, 1 ++ ldx.h t7, a4, t7 ++ mul.w t7, t5, t7 ++ add.w t8, t8, t7 ++ addi.w t3, t3, 1 ++ blt t3, a6, .HS19_FILTER ++ sra.w t8, t8, a7 ++ slt t5, t8, t0 ++ maskeqz t8, t8, t5 ++ masknez t5, t0, t5 ++ or t8, t8, t5 ++ slli.w t4, t1, 2 ++ stx.w t8, a1, t4 ++ addi.w t1, t1, 1 ++ blt t1, a2, .HS19_DST ++ b .HS19_END ++ ++.LOOP_HS19_DST8: ++ ld.w t1, a5, 0 ++ ld.w t2, a5, 4 ++ ld.w t3, a5, 8 ++ ld.w t4, a5, 12 ++ slli.w t1, t1, 1 ++ slli.w t2, t2, 1 ++ slli.w t3, t3, 1 ++ slli.w t4, t4, 1 ++ vldx vr1, a3, t1 ++ vldx vr2, a3, t2 ++ vldx vr3, a3, t3 ++ vldx vr4, a3, t4 ++ ld.w t1, a5, 16 ++ ld.w t2, a5, 20 ++ ld.w t3, a5, 24 ++ ld.w t4, a5, 28 ++ slli.w t1, t1, 1 ++ slli.w t2, t2, 1 ++ slli.w t3, t3, 1 ++ slli.w t4, t4, 1 ++ vldx vr5, a3, t1 ++ vldx vr6, a3, t2 ++ vldx vr7, a3, t3 ++ vldx vr8, a3, t4 ++ vld vr9, a4, 0 ++ vld vr10, a4, 16 ++ vld vr11, a4, 32 ++ vld vr12, a4, 48 ++ vld vr13, a4, 64 ++ vld vr14, a4, 80 ++ vld vr15, a4, 96 ++ vld vr16, a4, 112 ++ vmulwev.w.hu.h vr17, vr1, vr9 ++ vmulwev.w.hu.h vr18, vr2, vr10 ++ vmulwev.w.hu.h vr19, vr3, vr11 ++ vmulwev.w.hu.h vr21, vr4, vr12 ++ vmaddwod.w.hu.h vr17, vr1, vr9 ++ vmaddwod.w.hu.h vr18, vr2, vr10 ++ vmaddwod.w.hu.h vr19, vr3, vr11 ++ vmaddwod.w.hu.h vr21, vr4, vr12 ++ vmulwev.w.hu.h vr1, vr5, vr13 ++ vmulwev.w.hu.h vr2, vr6, vr14 ++ vmulwev.w.hu.h vr3, vr7, vr15 ++ vmulwev.w.hu.h vr4, vr8, vr16 ++ vmaddwod.w.hu.h vr1, vr5, vr13 ++ vmaddwod.w.hu.h vr2, vr6, vr14 ++ vmaddwod.w.hu.h vr3, vr7, vr15 ++ vmaddwod.w.hu.h vr4, vr8, vr16 ++ vhaddw.d.w vr5, vr1, vr1 ++ vhaddw.d.w vr6, vr2, vr2 ++ vhaddw.d.w vr7, vr3, vr3 ++ vhaddw.d.w vr8, vr4, vr4 ++ vhaddw.d.w vr1, vr17, vr17 ++ vhaddw.d.w vr2, vr18, vr18 ++ vhaddw.d.w vr3, vr19, vr19 ++ vhaddw.d.w vr4, vr21, vr21 ++ vhaddw.q.d vr1, vr1, vr1 ++ vhaddw.q.d vr2, vr2, vr2 ++ vhaddw.q.d vr3, vr3, vr3 ++ vhaddw.q.d vr4, vr4, vr4 ++ vhaddw.q.d vr5, vr5, vr5 ++ vhaddw.q.d vr6, vr6, vr6 ++ vhaddw.q.d vr7, vr7, vr7 ++ vhaddw.q.d vr8, vr8, vr8 ++ vilvl.w vr1, vr2, vr1 ++ vilvl.w vr3, vr4, vr3 ++ vilvl.w vr5, vr6, vr5 ++ vilvl.w vr7, vr8, vr7 ++ vilvl.d vr1, vr3, vr1 ++ vilvl.d vr5, vr7, vr5 ++ vsra.w vr1, vr1, vr0 ++ vsra.w vr5, vr5, vr0 ++ vmin.w vr1, vr1, vr20 ++ vmin.w vr5, vr5, vr20 ++ ++ vst vr1, a1, 0 ++ vst vr5, a1, 16 ++ addi.d a1, a1, 32 ++ addi.d a5, a5, 32 ++ addi.d a4, a4, 128 ++ addi.d a2, a2, -8 ++ bge a2, t8, .LOOP_HS19_DST8 ++ blt zero, a2, .HS19_REST8 ++ b .HS19_END ++.HS19_REST8: ++ li.w t1, 0 ++.HS19_DST8: ++ slli.w t2, t1, 2 ++ ldx.w t2, a5, t2 ++ li.w t3, 0 ++ li.w t8, 0 ++.HS19_FILTER8: ++ add.w t4, t2, t3 ++ slli.w t4, t4, 1 ++ ldx.hu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t7, t6, 1 ++ ldx.h t7, a4, t7 ++ mul.w t7, t5, t7 ++ add.w t8, t8, t7 ++ addi.w t3, t3, 1 ++ blt t3, a6, .HS19_FILTER8 ++ sra.w t8, t8, a7 ++ slt t5, t8, t0 ++ maskeqz t8, t8, t5 ++ masknez t5, t0, t5 ++ or t8, t8, t5 ++ slli.w t4, t1, 2 ++ stx.w t8, a1, t4 ++ addi.w t1, t1, 1 ++ blt t1, a2, .HS19_DST8 ++ b .HS19_END ++ ++.LOOP_HS19_DST4: ++ ld.w t1, a5, 0 ++ ld.w t2, a5, 4 ++ ld.w t3, a5, 8 ++ ld.w t4, a5, 12 ++ slli.w t1, t1, 1 ++ slli.w t2, t2, 1 ++ slli.w t3, t3, 1 ++ slli.w t4, t4, 1 ++ fldx.d f1, a3, t1 ++ fldx.d f2, a3, t2 ++ fldx.d f3, a3, t3 ++ fldx.d f4, a3, t4 ++ ld.w t1, a5, 16 ++ ld.w t2, a5, 20 ++ ld.w t3, a5, 24 ++ ld.w t4, a5, 28 ++ slli.w t1, t1, 1 ++ slli.w t2, t2, 1 ++ slli.w t3, t3, 1 ++ slli.w t4, t4, 1 ++ fldx.d f5, a3, t1 ++ fldx.d f6, a3, t2 ++ fldx.d f7, a3, t3 ++ fldx.d f8, a3, t4 ++ vld vr9, a4, 0 ++ vld vr10, a4, 16 ++ vld vr11, a4, 32 ++ vld vr12, a4, 48 ++ vilvl.d vr1, vr2, vr1 ++ vilvl.d vr3, vr4, vr3 ++ vilvl.d vr5, vr6, vr5 ++ vilvl.d vr7, vr8, vr7 ++ vmulwev.w.hu.h vr13, vr1, vr9 ++ vmulwev.w.hu.h vr14, vr3, vr10 ++ vmulwev.w.hu.h vr15, vr5, vr11 ++ vmulwev.w.hu.h vr16, vr7, vr12 ++ vmaddwod.w.hu.h vr13, vr1, vr9 ++ vmaddwod.w.hu.h vr14, vr3, vr10 ++ vmaddwod.w.hu.h vr15, vr5, vr11 ++ vmaddwod.w.hu.h vr16, vr7, vr12 ++ vhaddw.d.w vr13, vr13, vr13 ++ vhaddw.d.w vr14, vr14, vr14 ++ vhaddw.d.w vr15, vr15, vr15 ++ vhaddw.d.w vr16, vr16, vr16 ++ vpickev.w vr13, vr14, vr13 ++ vpickev.w vr15, vr16, vr15 ++ vsra.w vr13, vr13, vr0 ++ vsra.w vr15, vr15, vr0 ++ vmin.w vr13, vr13, vr20 ++ vmin.w vr15, vr15, vr20 ++ ++ vst vr13, a1, 0 ++ vst vr15, a1, 16 ++ addi.d a1, a1, 32 ++ addi.d a5, a5, 32 ++ addi.d a4, a4, 64 ++ addi.d a2, a2, -8 ++ bge a2, t8, .LOOP_HS19_DST4 ++ blt zero, a2, .HS19_REST4 ++ b .HS19_END ++.HS19_REST4: ++ li.w t1, 0 ++.HS19_DST4: ++ slli.w t2, t1, 2 ++ ldx.w t2, a5, t2 ++ li.w t3, 0 ++ li.w t8, 0 ++.HS19_FILTER4: ++ add.w t4, t2, t3 ++ slli.w t4, t4, 1 ++ ldx.hu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t7, t6, 1 ++ ldx.h t7, a4, t7 ++ mul.w t7, t5, t7 ++ add.w t8, t8, t7 ++ addi.w t3, t3, 1 ++ blt t3, a6, .HS19_FILTER4 ++ sra.w t8, t8, a7 ++ slt t5, t8, t0 ++ maskeqz t8, t8, t5 ++ masknez t5, t0, t5 ++ or t8, t8, t5 ++ slli.w t4, t1, 2 ++ stx.w t8, a1, t4 ++ addi.w t1, t1, 1 ++ blt t1, a2, .HS19_DST4 ++ b .HS19_END ++.END_HS19_DST4: ++ ++ li.w t1, 0 ++.LOOP_HS19_DST1: ++ slli.w t2, t1, 2 ++ ldx.w t2, a5, t2 ++ li.w t3, 0 ++ li.w t8, 0 ++.HS19_FILTER1: ++ add.w t4, t2, t3 ++ slli.w t4, t4, 1 ++ ldx.hu t5, a3, t4 ++ mul.w t6, a6, t1 ++ add.w t6, t6, t3 ++ slli.w t7, t6, 1 ++ ldx.h t7, a4, t7 ++ mul.w t7, t5, t7 ++ add.w t8, t8, t7 ++ addi.w t3, t3, 1 ++ blt t3, a6, .HS19_FILTER1 ++ sra.w t8, t8, a7 ++ slt t5, t8, t0 ++ maskeqz t8, t8, t5 ++ masknez t5, t0, t5 ++ or t8, t8, t5 ++ slli.w t4, t1, 2 ++ stx.w t8, a1, t4 ++ addi.w t1, t1, 1 ++ blt t1, a2, .LOOP_HS19_DST1 ++ b .HS19_END ++.HS19_END: ++ ++ ld.d s0, sp, 0 ++ ld.d s1, sp, 8 ++ ld.d s2, sp, 16 ++ ld.d s3, sp, 24 ++ ld.d s4, sp, 32 ++ ld.d s5, sp, 40 ++ ld.d s6, sp, 48 ++ ld.d s7, sp, 56 ++ ld.d s8, sp, 64 ++ addi.d sp, sp, 72 ++endfunc +diff --git a/libswscale/loongarch/swscale_init_loongarch.c b/libswscale/loongarch/swscale_init_loongarch.c +index d4fd3c2842..38af1b3c47 100644 +--- a/libswscale/loongarch/swscale_init_loongarch.c ++++ b/libswscale/loongarch/swscale_init_loongarch.c +@@ -27,6 +27,18 @@ + av_cold void ff_sws_init_swscale_loongarch(SwsContext *c) + { + int cpu_flags = av_get_cpu_flags(); ++ if (have_lsx(cpu_flags)) { ++ if (c->srcBpc == 8) { ++ if (c->dstBpc <= 14) { ++ c->hyScale = c->hcScale = ff_hscale_8_to_15_lsx; ++ } else { ++ c->hyScale = c->hcScale = ff_hscale_8_to_19_lsx; ++ } ++ } else { ++ c->hyScale = c->hcScale = c->dstBpc > 14 ? ff_hscale_16_to_19_lsx ++ : ff_hscale_16_to_15_lsx; ++ } ++ } + if (have_lasx(cpu_flags)) { + ff_sws_init_output_loongarch(c); + if (c->srcBpc == 8) { +diff --git a/libswscale/loongarch/swscale_loongarch.h b/libswscale/loongarch/swscale_loongarch.h +index cb5e0452bc..ef3f136e70 100644 +--- a/libswscale/loongarch/swscale_loongarch.h ++++ b/libswscale/loongarch/swscale_loongarch.h +@@ -25,6 +25,30 @@ + #include "libswscale/swscale.h" + #include "libswscale/swscale_internal.h" + ++void ff_hscale_8_to_15_lsx(SwsContext *c, int16_t *dst, int dstW, ++ const uint8_t *src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize); ++ ++void ff_hscale_8_to_19_lsx(SwsContext *c, int16_t *_dst, int dstW, ++ const uint8_t *src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize); ++ ++void ff_hscale_16_to_15_lsx(SwsContext *c, int16_t *_dst, int dstW, ++ const uint8_t *_src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize); ++ ++void ff_hscale_16_to_15_sub_lsx(SwsContext *c, int16_t *_dst, int dstW, ++ const uint8_t *_src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize, int sh); ++ ++void ff_hscale_16_to_19_lsx(SwsContext *c, int16_t *_dst, int dstW, ++ const uint8_t *_src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize); ++ ++void ff_hscale_16_to_19_sub_lsx(SwsContext *c, int16_t *_dst, int dstW, ++ const uint8_t *_src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize, int sh); ++ + void ff_hscale_8_to_15_lasx(SwsContext *c, int16_t *dst, int dstW, + const uint8_t *src, const int16_t *filter, + const int32_t *filterPos, int filterSize); +diff --git a/libswscale/loongarch/swscale_lsx.c b/libswscale/loongarch/swscale_lsx.c +new file mode 100644 +index 0000000000..da8eabfca3 +--- /dev/null ++++ b/libswscale/loongarch/swscale_lsx.c +@@ -0,0 +1,57 @@ ++/* ++ * Loongson LSX optimized swscale ++ * ++ * Copyright (c) 2023 Loongson Technology Corporation Limited ++ * Contributed by Lu Wang ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "swscale_loongarch.h" ++ ++void ff_hscale_16_to_15_lsx(SwsContext *c, int16_t *_dst, int dstW, ++ const uint8_t *_src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize) ++{ ++ const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(c->srcFormat); ++ int sh = desc->comp[0].depth - 1; ++ ++ if (sh < 15) { ++ sh = isAnyRGB(c->srcFormat) || c->srcFormat==AV_PIX_FMT_PAL8 ? 13 : ++ (desc->comp[0].depth - 1); ++ } else if (desc->flags && AV_PIX_FMT_FLAG_FLOAT) { ++ sh = 15; ++ } ++ ff_hscale_16_to_15_sub_lsx(c, _dst, dstW, _src, filter, filterPos, filterSize, sh); ++} ++ ++void ff_hscale_16_to_19_lsx(SwsContext *c, int16_t *_dst, int dstW, ++ const uint8_t *_src, const int16_t *filter, ++ const int32_t *filterPos, int filterSize) ++{ ++ const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(c->srcFormat); ++ int bits = desc->comp[0].depth - 1; ++ int sh = bits - 4; ++ ++ if ((isAnyRGB(c->srcFormat) || c->srcFormat==AV_PIX_FMT_PAL8) && desc->comp[0].depth<16) { ++ ++ sh = 9; ++ } else if (desc->flags & AV_PIX_FMT_FLAG_FLOAT) { /* float input are process like uint 16bpc */ ++ sh = 16 - 1 - 4; ++ } ++ ff_hscale_16_to_19_sub_lsx(c, _dst, dstW, _src, filter, filterPos, filterSize, sh); ++} +diff --git a/libswscale/utils.c b/libswscale/utils.c +index 2bb32a1661..1ee827baa1 100644 +--- a/libswscale/utils.c ++++ b/libswscale/utils.c +@@ -600,6 +600,15 @@ static av_cold int initFilter(int16_t **outFilter, int32_t **filterPos, + filterAlign = 1; + } + ++ if (have_lsx(cpu_flags)) { ++ int reNum = minFilterSize & (0x07); ++ ++ if (minFilterSize < 5) ++ filterAlign = 4; ++ if (reNum < 3) ++ filterAlign = 1; ++ } ++ + if (have_lasx(cpu_flags)) { + int reNum = minFilterSize & (0x07); + +@@ -1686,6 +1695,7 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter, + const int filterAlign = X86_MMX(cpu_flags) ? 4 : + PPC_ALTIVEC(cpu_flags) ? 8 : + have_neon(cpu_flags) ? 8 : ++ have_lsx(cpu_flags) ? 8 : + have_lasx(cpu_flags) ? 8 : + have_msa(cpu_flags) ? 8 : 1; + +-- +2.20.1 + diff --git a/package/ffmpeg/0014-swscale-LA-Add-planar_rgb_to_y-uv_lsx.patch b/package/ffmpeg/0014-swscale-LA-Add-planar_rgb_to_y-uv_lsx.patch new file mode 100644 index 00000000..a76083cb --- /dev/null +++ b/package/ffmpeg/0014-swscale-LA-Add-planar_rgb_to_y-uv_lsx.patch @@ -0,0 +1,358 @@ +From 8c7587cb74e8451d74c5c20d320eec221a31dee7 Mon Sep 17 00:00:00 2001 +From: wanglu +Date: Thu, 23 Mar 2023 11:06:02 +0800 +Subject: [PATCH 04/10] swscale: [LA] Add planar_rgb_to_y/uv_lsx. + +1. planar_rgb_to_y_lsx +2. planar_rgb_to_uv_lsx + +Change-Id: Iec2a729e4e474388f431a28bbf2328007ed8cfcc +Signed-off-by: wanglu +--- + libswscale/loongarch/Makefile | 1 + + libswscale/loongarch/input.S | 285 ++++++++++++++++++ + libswscale/loongarch/swscale_init_loongarch.c | 9 + + libswscale/loongarch/swscale_loongarch.h | 6 + + 4 files changed, 301 insertions(+) + create mode 100644 libswscale/loongarch/input.S + +diff --git a/libswscale/loongarch/Makefile b/libswscale/loongarch/Makefile +index 2729758392..6576b55fa1 100644 +--- a/libswscale/loongarch/Makefile ++++ b/libswscale/loongarch/Makefile +@@ -6,3 +6,4 @@ LASX-OBJS-$(CONFIG_SWSCALE) += loongarch/swscale_lasx.o \ + loongarch/rgb2rgb_lasx.o + LSX-OBJS-$(CONFIG_SWSCALE) += loongarch/swscale.o \ + loongarch/swscale_lsx.o \ ++ loongarch/input.o \ +diff --git a/libswscale/loongarch/input.S b/libswscale/loongarch/input.S +new file mode 100644 +index 0000000000..d01f7384b1 +--- /dev/null ++++ b/libswscale/loongarch/input.S +@@ -0,0 +1,285 @@ ++/* ++ * Loongson LSX optimized swscale ++ * ++ * Copyright (c) 2023 Loongson Technology Corporation Limited ++ * Contributed by Lu Wang ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavcodec/loongarch/loongson_asm.S" ++ ++/* void planar_rgb_to_y_lsx(uint8_t *_dst, const uint8_t *src[4], ++ * int width, int32_t *rgb2yuv) ++ */ ++function planar_rgb_to_y_lsx ++ ld.d a5, a1, 0 ++ ld.d a6, a1, 8 ++ ld.d a7, a1, 16 ++ ++ ld.w t1, a3, 0 // ry ++ ld.w t2, a3, 4 // gy ++ ld.w t3, a3, 8 // by ++ li.w t4, 9 ++ li.w t5, 524544 ++ li.w t7, 4 ++ li.w t8, 8 ++ vldi vr7, 0 ++ vreplgr2vr.w vr1, t1 ++ vreplgr2vr.w vr2, t2 ++ vreplgr2vr.w vr3, t3 ++ vreplgr2vr.w vr4, t4 ++ vreplgr2vr.w vr5, t5 ++ bge a2, t8, .WIDTH8 ++ bge a2, t7, .WIDTH4 ++ blt zero, a2, .WIDTH ++ b .END ++ ++.WIDTH8: ++ vld vr8, a5, 0 ++ vld vr9, a6, 0 ++ vld vr10, a7, 0 ++ vilvl.b vr11, vr7, vr8 ++ vilvl.b vr12, vr7, vr9 ++ vilvl.b vr13, vr7, vr10 ++ vilvl.h vr14, vr7, vr11 ++ vilvl.h vr15, vr7, vr12 ++ vilvl.h vr16, vr7, vr13 ++ vilvh.h vr17, vr7, vr11 ++ vilvh.h vr18, vr7, vr12 ++ vilvh.h vr19, vr7, vr13 ++ vmul.w vr20, vr1, vr16 ++ vmul.w vr21, vr1, vr19 ++ vmadd.w vr20, vr2, vr14 ++ vmadd.w vr20, vr3, vr15 ++ vmadd.w vr21, vr2, vr17 ++ vmadd.w vr21, vr3, vr18 ++ vadd.w vr20, vr20, vr5 ++ vadd.w vr21, vr21, vr5 ++ vsra.w vr20, vr20, vr4 ++ vsra.w vr21, vr21, vr4 ++ vpickev.h vr20, vr21, vr20 ++ vst vr20, a0, 0 ++ addi.d a2, a2, -8 ++ addi.d a5, a5, 8 ++ addi.d a6, a6, 8 ++ addi.d a7, a7, 8 ++ addi.d a0, a0, 16 ++ bge a2, t8, .WIDTH8 ++ bge a2, t7, .WIDTH4 ++ blt zero, a2, .WIDTH ++ b .END ++ ++.WIDTH4: ++ vld vr8, a5, 0 ++ vld vr9, a6, 0 ++ vld vr10, a7, 0 ++ vilvl.b vr11, vr7, vr8 ++ vilvl.b vr12, vr7, vr9 ++ vilvl.b vr13, vr7, vr10 ++ vilvl.h vr14, vr7, vr11 ++ vilvl.h vr15, vr7, vr12 ++ vilvl.h vr16, vr7, vr13 ++ vmul.w vr17, vr1, vr16 ++ vmadd.w vr17, vr2, vr14 ++ vmadd.w vr17, vr3, vr15 ++ vadd.w vr17, vr17, vr5 ++ vsra.w vr17, vr17, vr4 ++ vpickev.h vr17, vr17, vr17 ++ vstelm.d vr17, a0, 0, 0 ++ addi.d a2, a2, -4 ++ addi.d a5, a5, 4 ++ addi.d a6, a6, 4 ++ addi.d a7, a7, 4 ++ addi.d a0, a0, 8 ++ bge a2, t7, .WIDTH4 ++ blt zero, a2, .WIDTH ++ b .END ++ ++.WIDTH: ++ ld.bu t0, a5, 0 ++ ld.bu t4, a6, 0 ++ ld.bu t6, a7, 0 ++ mul.w t8, t6, t1 ++ mul.w t7, t0, t2 ++ add.w t8, t8, t7 ++ mul.w t7, t4, t3 ++ add.w t8, t8, t7 ++ add.w t8, t8, t5 ++ srai.w t8, t8, 9 ++ st.h t8, a0, 0 ++ addi.d a2, a2, -1 ++ addi.d a5, a5, 1 ++ addi.d a6, a6, 1 ++ addi.d a7, a7, 1 ++ addi.d a0, a0, 2 ++ blt zero, a2, .WIDTH ++.END: ++endfunc ++ ++/* void planar_rgb_to_uv_lsx(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4], ++ * int width, int32_t *rgb2yuv) ++ */ ++function planar_rgb_to_uv_lsx ++ addi.d sp, sp, -24 ++ st.d s1, sp, 0 ++ st.d s2, sp, 8 ++ st.d s3, sp, 16 ++ ++ ld.d a5, a2, 0 ++ ld.d a6, a2, 8 ++ ld.d a7, a2, 16 ++ ld.w t1, a4, 12 // ru ++ ld.w t2, a4, 16 // gu ++ ld.w t3, a4, 20 // bu ++ ld.w s1, a4, 24 // rv ++ ld.w s2, a4, 28 // gv ++ ld.w s3, a4, 32 // bv ++ li.w t4, 9 ++ li.w t5, 4194560 ++ li.w t7, 4 ++ li.w t8, 8 ++ vldi vr0, 0 ++ vreplgr2vr.w vr1, t1 ++ vreplgr2vr.w vr2, t2 ++ vreplgr2vr.w vr3, t3 ++ vreplgr2vr.w vr4, s1 ++ vreplgr2vr.w vr5, s2 ++ vreplgr2vr.w vr6, s3 ++ vreplgr2vr.w vr7, t4 ++ vreplgr2vr.w vr8, t5 ++ bge a2, t8, .LOOP_WIDTH8 ++ bge a2, t7, .LOOP_WIDTH4 ++ blt zero, a2, .LOOP_WIDTH ++ b .LOOP_END ++ ++.LOOP_WIDTH8: ++ vld vr9, a5, 0 ++ vld vr10, a6, 0 ++ vld vr11, a7, 0 ++ vilvl.b vr9, vr0, vr9 ++ vilvl.b vr10, vr0, vr10 ++ vilvl.b vr11, vr0, vr11 ++ vilvl.h vr12, vr0, vr9 ++ vilvl.h vr13, vr0, vr10 ++ vilvl.h vr14, vr0, vr11 ++ vilvh.h vr15, vr0, vr9 ++ vilvh.h vr16, vr0, vr10 ++ vilvh.h vr17, vr0, vr11 ++ vmul.w vr18, vr1, vr14 ++ vmul.w vr19, vr1, vr17 ++ vmul.w vr20, vr4, vr14 ++ vmul.w vr21, vr4, vr17 ++ vmadd.w vr18, vr2, vr12 ++ vmadd.w vr18, vr3, vr13 ++ vmadd.w vr19, vr2, vr15 ++ vmadd.w vr19, vr3, vr16 ++ vmadd.w vr20, vr5, vr12 ++ vmadd.w vr20, vr6, vr13 ++ vmadd.w vr21, vr5, vr15 ++ vmadd.w vr21, vr6, vr16 ++ vadd.w vr18, vr18, vr8 ++ vadd.w vr19, vr19, vr8 ++ vadd.w vr20, vr20, vr8 ++ vadd.w vr21, vr21, vr8 ++ vsra.w vr18, vr18, vr7 ++ vsra.w vr19, vr19, vr7 ++ vsra.w vr20, vr20, vr7 ++ vsra.w vr21, vr21, vr7 ++ vpickev.h vr18, vr19, vr18 ++ vpickev.h vr20, vr21, vr20 ++ vst vr18, a0, 0 ++ vst vr20, a1, 0 ++ addi.d a3, a3, -8 ++ addi.d a5, a5, 8 ++ addi.d a6, a6, 8 ++ addi.d a7, a7, 8 ++ addi.d a0, a0, 16 ++ addi.d a1, a1, 16 ++ bge a3, t8, .LOOP_WIDTH8 ++ bge a3, t7, .LOOP_WIDTH4 ++ blt zero, a3, .LOOP_WIDTH ++ b .LOOP_END ++ ++.LOOP_WIDTH4: ++ vld vr9, a5, 0 ++ vld vr10, a6, 0 ++ vld vr11, a7, 0 ++ vilvl.b vr9, vr0, vr9 ++ vilvl.b vr10, vr0, vr10 ++ vilvl.b vr11, vr0, vr11 ++ vilvl.h vr12, vr0, vr9 ++ vilvl.h vr13, vr0, vr10 ++ vilvl.h vr14, vr0, vr11 ++ vmul.w vr18, vr1, vr14 ++ vmul.w vr19, vr4, vr14 ++ vmadd.w vr18, vr2, vr12 ++ vmadd.w vr18, vr3, vr13 ++ vmadd.w vr19, vr5, vr12 ++ vmadd.w vr19, vr6, vr13 ++ vadd.w vr18, vr18, vr8 ++ vadd.w vr19, vr19, vr8 ++ vsra.w vr18, vr18, vr7 ++ vsra.w vr19, vr19, vr7 ++ vpickev.h vr18, vr18, vr18 ++ vpickev.h vr19, vr19, vr19 ++ vstelm.d vr18, a0, 0, 0 ++ vstelm.d vr19, a1, 0, 0 ++ addi.d a3, a3, -4 ++ addi.d a5, a5, 4 ++ addi.d a6, a6, 4 ++ addi.d a7, a7, 4 ++ addi.d a0, a0, 8 ++ addi.d a1, a1, 8 ++ bge a3, t7, .LOOP_WIDTH4 ++ blt zero, a3, .LOOP_WIDTH ++ b .LOOP_END ++ ++.LOOP_WIDTH: ++ ld.bu t0, a5, 0 ++ ld.bu t4, a6, 0 ++ ld.bu t6, a7, 0 ++ mul.w t8, t6, t1 ++ mul.w t7, t0, t2 ++ add.w t8, t8, t7 ++ mul.w t7, t4, t3 ++ add.w t8, t8, t7 ++ add.w t8, t8, t5 ++ srai.w t8, t8, 9 ++ st.h t8, a0, 0 ++ mul.w t8, t6, s1 ++ mul.w t7, t0, s2 ++ add.w t8, t8, t7 ++ mul.w t7, t4, s3 ++ add.w t8, t8, t7 ++ add.w t8, t8, t5 ++ srai.w t8, t8, 9 ++ st.h t8, a1, 0 ++ addi.d a3, a3, -1 ++ addi.d a5, a5, 1 ++ addi.d a6, a6, 1 ++ addi.d a7, a7, 1 ++ addi.d a0, a0, 2 ++ addi.d a1, a1, 2 ++ blt zero, a3, .LOOP_WIDTH ++ ++.LOOP_END: ++ ld.d s1, sp, 0 ++ ld.d s2, sp, 8 ++ ld.d s3, sp, 16 ++ addi.d sp, sp, 24 ++endfunc +diff --git a/libswscale/loongarch/swscale_init_loongarch.c b/libswscale/loongarch/swscale_init_loongarch.c +index 38af1b3c47..4967849154 100644 +--- a/libswscale/loongarch/swscale_init_loongarch.c ++++ b/libswscale/loongarch/swscale_init_loongarch.c +@@ -38,6 +38,15 @@ av_cold void ff_sws_init_swscale_loongarch(SwsContext *c) + c->hyScale = c->hcScale = c->dstBpc > 14 ? ff_hscale_16_to_19_lsx + : ff_hscale_16_to_15_lsx; + } ++ switch (c->srcFormat) { ++ case AV_PIX_FMT_GBRAP: ++ case AV_PIX_FMT_GBRP: ++ { ++ c->readChrPlanar = planar_rgb_to_uv_lsx; ++ c->readLumPlanar = planar_rgb_to_y_lsx; ++ } ++ break; ++ } + } + if (have_lasx(cpu_flags)) { + ff_sws_init_output_loongarch(c); +diff --git a/libswscale/loongarch/swscale_loongarch.h b/libswscale/loongarch/swscale_loongarch.h +index ef3f136e70..e73371d085 100644 +--- a/libswscale/loongarch/swscale_loongarch.h ++++ b/libswscale/loongarch/swscale_loongarch.h +@@ -49,6 +49,12 @@ void ff_hscale_16_to_19_sub_lsx(SwsContext *c, int16_t *_dst, int dstW, + const uint8_t *_src, const int16_t *filter, + const int32_t *filterPos, int filterSize, int sh); + ++void planar_rgb_to_uv_lsx(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4], ++ int width, int32_t *rgb2yuv); ++ ++void planar_rgb_to_y_lsx(uint8_t *_dst, const uint8_t *src[4], int width, ++ int32_t *rgb2yuv); ++ + void ff_hscale_8_to_15_lasx(SwsContext *c, int16_t *dst, int dstW, + const uint8_t *src, const int16_t *filter, + const int32_t *filterPos, int filterSize); +-- +2.20.1 + diff --git a/package/ffmpeg/0015-swscale-LA-ff_yuv2planeX_8_lsx.patch b/package/ffmpeg/0015-swscale-LA-ff_yuv2planeX_8_lsx.patch new file mode 100644 index 00000000..69df8fe6 --- /dev/null +++ b/package/ffmpeg/0015-swscale-LA-ff_yuv2planeX_8_lsx.patch @@ -0,0 +1,199 @@ +From 0ebda7b0547daa666ee4a6a268058c9f72f3fbd6 Mon Sep 17 00:00:00 2001 +From: wanglu +Date: Fri, 24 Mar 2023 17:07:01 +0800 +Subject: [PATCH 05/10] swscale: [LA] ff_yuv2planeX_8_lsx. + +Change-Id: Icc3b9b0e50398d5c9542c6aeda89708cbddbf4e7 +Signed-off-by: wanglu +--- + libswscale/loongarch/Makefile | 1 + + libswscale/loongarch/output.S | 138 ++++++++++++++++++ + libswscale/loongarch/swscale_init_loongarch.c | 2 + + libswscale/loongarch/swscale_loongarch.h | 4 + + 4 files changed, 145 insertions(+) + create mode 100644 libswscale/loongarch/output.S + +diff --git a/libswscale/loongarch/Makefile b/libswscale/loongarch/Makefile +index 6576b55fa1..393af41e6a 100644 +--- a/libswscale/loongarch/Makefile ++++ b/libswscale/loongarch/Makefile +@@ -7,3 +7,4 @@ LASX-OBJS-$(CONFIG_SWSCALE) += loongarch/swscale_lasx.o \ + LSX-OBJS-$(CONFIG_SWSCALE) += loongarch/swscale.o \ + loongarch/swscale_lsx.o \ + loongarch/input.o \ ++ loongarch/output.o \ +diff --git a/libswscale/loongarch/output.S b/libswscale/loongarch/output.S +new file mode 100644 +index 0000000000..b44bac502a +--- /dev/null ++++ b/libswscale/loongarch/output.S +@@ -0,0 +1,138 @@ ++/* ++ * Loongson LSX optimized swscale ++ * ++ * Copyright (c) 2023 Loongson Technology Corporation Limited ++ * Contributed by Lu Wang ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavcodec/loongarch/loongson_asm.S" ++ ++/* static void ff_yuv2planeX_8_lsx(const int16_t *filter, int filterSize, ++ * const int16_t **src, uint8_t *dest, int dstW, ++ * const uint8_t *dither, int offset) ++ */ ++function ff_yuv2planeX_8_lsx ++ addi.w t1, a6, 1 ++ addi.w t2, a6, 2 ++ addi.w t3, a6, 3 ++ addi.w t4, a6, 4 ++ addi.w t5, a6, 5 ++ addi.w t6, a6, 6 ++ addi.w t7, a6, 7 ++ andi t0, a6, 7 ++ andi t1, t1, 7 ++ andi t2, t2, 7 ++ andi t3, t3, 7 ++ andi t4, t4, 7 ++ andi t5, t5, 7 ++ andi t6, t6, 7 ++ andi t7, t7, 7 ++ ldx.bu t0, a5, t0 ++ ldx.bu t1, a5, t1 ++ ldx.bu t2, a5, t2 ++ ldx.bu t3, a5, t3 ++ ldx.bu t4, a5, t4 ++ ldx.bu t5, a5, t5 ++ ldx.bu t6, a5, t6 ++ ldx.bu t7, a5, t7 ++ vreplgr2vr.w vr0, t0 ++ vreplgr2vr.w vr1, t1 ++ vreplgr2vr.w vr2, t2 ++ vreplgr2vr.w vr3, t3 ++ vreplgr2vr.w vr4, t4 ++ vreplgr2vr.w vr5, t5 ++ vreplgr2vr.w vr6, t6 ++ vreplgr2vr.w vr7, t7 ++ vilvl.w vr0, vr2, vr0 ++ vilvl.w vr4, vr6, vr4 ++ vilvl.w vr1, vr3, vr1 ++ vilvl.w vr5, vr7, vr5 ++ vilvl.d vr12, vr4, vr0 ++ vilvl.d vr13, vr5, vr1 ++ li.w t5, 0 ++ li.w t8, 8 ++ bge a4, t8, .WIDTH8 ++ blt zero, a4, .WIDTH ++ b .END ++ ++.WIDTH8: ++ li.d t1, 0 ++ li.d t4, 0 ++ vslli.w vr2, vr12, 12 ++ vslli.w vr3, vr13, 12 ++ move t3, a0 ++ ++.FILTERSIZE8: ++ ldx.d t2, a2, t1 ++ vldx vr4, t2, t5 ++ vldrepl.h vr5, t3, 0 ++ vmaddwev.w.h vr2, vr4, vr5 ++ vmaddwod.w.h vr3, vr4, vr5 ++ addi.d t1, t1, 8 ++ addi.d t3, t3, 2 ++ addi.d t4, t4, 1 ++ blt t4, a1, .FILTERSIZE8 ++ vsrai.w vr2, vr2, 19 ++ vsrai.w vr3, vr3, 19 ++ vclip255.w vr2, vr2 ++ vclip255.w vr3, vr3 ++ vpickev.h vr2, vr3, vr2 ++ vpickev.b vr2, vr2, vr2 ++ vbsrl.v vr3, vr2, 4 ++ vilvl.b vr2, vr3, vr2 ++ fst.d f2, a3, 0 ++ addi.d t5, t5, 16 ++ addi.d a4, a4, -8 ++ addi.d a3, a3, 8 ++ bge a4, t8, .WIDTH8 ++ blt zero, a4, .WIDTH ++ b .END ++ ++.WIDTH: ++ li.d t1, 0 ++ li.d t4, 0 ++ vslli.w vr2, vr12, 12 ++ vslli.w vr3, vr13, 12 ++.FILTERSIZE: ++ ldx.d t2, a2, t1 ++ vldx vr4, t2, t5 ++ vldrepl.h vr5, a0, 0 ++ vmaddwev.w.h vr2, vr4, vr5 ++ vmaddwod.w.h vr3, vr4, vr5 ++ addi.d t1, t1, 8 ++ addi.d a0, a0, 2 ++ addi.d t4, t4, 1 ++ blt t4, a1, .FILTERSIZE ++ vsrai.w vr2, vr2, 19 ++ vsrai.w vr3, vr3, 19 ++ vclip255.w vr2, vr2 ++ vclip255.w vr3, vr3 ++ vpickev.h vr2, vr3, vr2 ++ vpickev.b vr2, vr2, vr2 ++ vbsrl.v vr3, vr2, 4 ++ vilvl.b vr2, vr3, vr2 ++ ++.DEST: ++ vstelm.b vr2, a3, 0, 0 ++ vbsrl.v vr2, vr2, 1 ++ addi.d a4, a4, -1 ++ addi.d a3, a3, 1 ++ blt zero, a4, .DEST ++.END: ++endfunc +diff --git a/libswscale/loongarch/swscale_init_loongarch.c b/libswscale/loongarch/swscale_init_loongarch.c +index 4967849154..efa8e10d96 100644 +--- a/libswscale/loongarch/swscale_init_loongarch.c ++++ b/libswscale/loongarch/swscale_init_loongarch.c +@@ -47,6 +47,8 @@ av_cold void ff_sws_init_swscale_loongarch(SwsContext *c) + } + break; + } ++ if (c->dstBpc == 8) ++ c->yuv2planeX = ff_yuv2planeX_8_lsx; + } + if (have_lasx(cpu_flags)) { + ff_sws_init_output_loongarch(c); +diff --git a/libswscale/loongarch/swscale_loongarch.h b/libswscale/loongarch/swscale_loongarch.h +index e73371d085..4b3247431b 100644 +--- a/libswscale/loongarch/swscale_loongarch.h ++++ b/libswscale/loongarch/swscale_loongarch.h +@@ -55,6 +55,10 @@ void planar_rgb_to_uv_lsx(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4], + void planar_rgb_to_y_lsx(uint8_t *_dst, const uint8_t *src[4], int width, + int32_t *rgb2yuv); + ++void ff_yuv2planeX_8_lsx(const int16_t *filter, int filterSize, ++ const int16_t **src, uint8_t *dest, int dstW, ++ const uint8_t *dither, int offset); ++ + void ff_hscale_8_to_15_lasx(SwsContext *c, int16_t *dst, int dstW, + const uint8_t *src, const int16_t *filter, + const int32_t *filterPos, int filterSize); +-- +2.20.1 + diff --git a/package/ffmpeg/0016-swscale-LA-Add-following-builtin-optimized-functions.patch b/package/ffmpeg/0016-swscale-LA-Add-following-builtin-optimized-functions.patch new file mode 100644 index 00000000..71d4bc2e --- /dev/null +++ b/package/ffmpeg/0016-swscale-LA-Add-following-builtin-optimized-functions.patch @@ -0,0 +1,467 @@ +From e180fd29daa9fe0d510a10a09a339f283e700532 Mon Sep 17 00:00:00 2001 +From: jinbo +Date: Wed, 29 Mar 2023 11:54:42 +0800 +Subject: [PATCH 06/10] swscale: [LA] Add following builtin optimized functions + +yuv420_rgb24_lsx +yuv420_bgr24_lsx +yuv420_rgba32_lsx +yuv420_argb32_lsx +yuv420_bgra32_lsx +yuv420_abgr32_lsx + +Change-Id: I0618ca3a85ea390e263c5efecfa58a8dc5e51259 +--- + libswscale/loongarch/Makefile | 1 + + libswscale/loongarch/swscale_init_loongarch.c | 28 ++ + libswscale/loongarch/swscale_loongarch.h | 18 + + libswscale/loongarch/yuv2rgb_lsx.c | 361 ++++++++++++++++++ + 4 files changed, 408 insertions(+) + create mode 100644 libswscale/loongarch/yuv2rgb_lsx.c + +diff --git a/libswscale/loongarch/Makefile b/libswscale/loongarch/Makefile +index 393af41e6a..f52e526514 100644 +--- a/libswscale/loongarch/Makefile ++++ b/libswscale/loongarch/Makefile +@@ -8,3 +8,4 @@ LSX-OBJS-$(CONFIG_SWSCALE) += loongarch/swscale.o \ + loongarch/swscale_lsx.o \ + loongarch/input.o \ + loongarch/output.o \ ++ loongarch/yuv2rgb_lsx.o +diff --git a/libswscale/loongarch/swscale_init_loongarch.c b/libswscale/loongarch/swscale_init_loongarch.c +index efa8e10d96..a3d056812d 100644 +--- a/libswscale/loongarch/swscale_init_loongarch.c ++++ b/libswscale/loongarch/swscale_init_loongarch.c +@@ -114,5 +114,33 @@ av_cold SwsFunc ff_yuv2rgb_init_loongarch(SwsContext *c) + return yuv420_abgr32_lasx; + } + } ++ if (have_lsx(cpu_flags)) { ++ switch (c->dstFormat) { ++ case AV_PIX_FMT_RGB24: ++ return yuv420_rgb24_lsx; ++ case AV_PIX_FMT_BGR24: ++ return yuv420_bgr24_lsx; ++ case AV_PIX_FMT_RGBA: ++ if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) { ++ break; ++ } else ++ return yuv420_rgba32_lsx; ++ case AV_PIX_FMT_ARGB: ++ if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) { ++ break; ++ } else ++ return yuv420_argb32_lsx; ++ case AV_PIX_FMT_BGRA: ++ if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) { ++ break; ++ } else ++ return yuv420_bgra32_lsx; ++ case AV_PIX_FMT_ABGR: ++ if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) { ++ break; ++ } else ++ return yuv420_abgr32_lsx; ++ } ++ } + return NULL; + } +diff --git a/libswscale/loongarch/swscale_loongarch.h b/libswscale/loongarch/swscale_loongarch.h +index 4b3247431b..3d502e6ab0 100644 +--- a/libswscale/loongarch/swscale_loongarch.h ++++ b/libswscale/loongarch/swscale_loongarch.h +@@ -59,6 +59,24 @@ void ff_yuv2planeX_8_lsx(const int16_t *filter, int filterSize, + const int16_t **src, uint8_t *dest, int dstW, + const uint8_t *dither, int offset); + ++int yuv420_rgb24_lsx(SwsContext *c, const uint8_t *src[], int srcStride[], ++ int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]); ++ ++int yuv420_bgr24_lsx(SwsContext *c, const uint8_t *src[], int srcStride[], ++ int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]); ++ ++int yuv420_rgba32_lsx(SwsContext *c, const uint8_t *src[], int srcStride[], ++ int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]); ++ ++int yuv420_bgra32_lsx(SwsContext *c, const uint8_t *src[], int srcStride[], ++ int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]); ++ ++int yuv420_argb32_lsx(SwsContext *c, const uint8_t *src[], int srcStride[], ++ int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]); ++ ++int yuv420_abgr32_lsx(SwsContext *c, const uint8_t *src[], int srcStride[], ++ int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]); ++ + void ff_hscale_8_to_15_lasx(SwsContext *c, int16_t *dst, int dstW, + const uint8_t *src, const int16_t *filter, + const int32_t *filterPos, int filterSize); +diff --git a/libswscale/loongarch/yuv2rgb_lsx.c b/libswscale/loongarch/yuv2rgb_lsx.c +new file mode 100644 +index 0000000000..254d143c96 +--- /dev/null ++++ b/libswscale/loongarch/yuv2rgb_lsx.c +@@ -0,0 +1,361 @@ ++/* ++ * Copyright (C) 2021 Loongson Technology Co. Ltd. ++ * Contributed by Hao Chen(chenhao@loongson.cn) ++ * All rights reserved. ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "swscale_loongarch.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" ++ ++#define YUV2RGB_LOAD_COE \ ++ /* Load x_offset */ \ ++ __m128i y_offset = __lsx_vreplgr2vr_d(c->yOffset); \ ++ __m128i u_offset = __lsx_vreplgr2vr_d(c->uOffset); \ ++ __m128i v_offset = __lsx_vreplgr2vr_d(c->vOffset); \ ++ /* Load x_coeff */ \ ++ __m128i ug_coeff = __lsx_vreplgr2vr_d(c->ugCoeff); \ ++ __m128i vg_coeff = __lsx_vreplgr2vr_d(c->vgCoeff); \ ++ __m128i y_coeff = __lsx_vreplgr2vr_d(c->yCoeff); \ ++ __m128i ub_coeff = __lsx_vreplgr2vr_d(c->ubCoeff); \ ++ __m128i vr_coeff = __lsx_vreplgr2vr_d(c->vrCoeff); \ ++ ++#define LOAD_YUV_16 \ ++ m_y1 = __lsx_vld(py_1, 0); \ ++ m_y2 = __lsx_vld(py_2, 0); \ ++ m_u = __lsx_vldrepl_d(pu, 0); \ ++ m_v = __lsx_vldrepl_d(pv, 0); \ ++ DUP2_ARG2(__lsx_vilvl_b, m_u, m_u, m_v, m_v, m_u, m_v); \ ++ DUP2_ARG2(__lsx_vilvh_b, zero, m_u, zero, m_v, m_u_h, m_v_h); \ ++ DUP2_ARG2(__lsx_vilvl_b, zero, m_u, zero, m_v, m_u, m_v); \ ++ DUP2_ARG2(__lsx_vilvh_b, zero, m_y1, zero, m_y2, m_y1_h, m_y2_h); \ ++ DUP2_ARG2(__lsx_vilvl_b, zero, m_y1, zero, m_y2, m_y1, m_y2); \ ++ ++/* YUV2RGB method ++ * The conversion method is as follows: ++ * R = Y' * y_coeff + V' * vr_coeff ++ * G = Y' * y_coeff + V' * vg_coeff + U' * ug_coeff ++ * B = Y' * y_coeff + U' * ub_coeff ++ * ++ * where X' = X * 8 - x_offset ++ * ++ */ ++ ++#define YUV2RGB(y1, y2, u, v, r1, g1, b1, r2, g2, b2) \ ++{ \ ++ y1 = __lsx_vslli_h(y1, 3); \ ++ y2 = __lsx_vslli_h(y2, 3); \ ++ u = __lsx_vslli_h(u, 3); \ ++ v = __lsx_vslli_h(v, 3); \ ++ y1 = __lsx_vsub_h(y1, y_offset); \ ++ y2 = __lsx_vsub_h(y2, y_offset); \ ++ u = __lsx_vsub_h(u, u_offset); \ ++ v = __lsx_vsub_h(v, v_offset); \ ++ y_1 = __lsx_vmuh_h(y1, y_coeff); \ ++ y_2 = __lsx_vmuh_h(y2, y_coeff); \ ++ u2g = __lsx_vmuh_h(u, ug_coeff); \ ++ u2b = __lsx_vmuh_h(u, ub_coeff); \ ++ v2r = __lsx_vmuh_h(v, vr_coeff); \ ++ v2g = __lsx_vmuh_h(v, vg_coeff); \ ++ r1 = __lsx_vsadd_h(y_1, v2r); \ ++ v2g = __lsx_vsadd_h(v2g, u2g); \ ++ g1 = __lsx_vsadd_h(y_1, v2g); \ ++ b1 = __lsx_vsadd_h(y_1, u2b); \ ++ r2 = __lsx_vsadd_h(y_2, v2r); \ ++ g2 = __lsx_vsadd_h(y_2, v2g); \ ++ b2 = __lsx_vsadd_h(y_2, u2b); \ ++ DUP4_ARG1(__lsx_vclip255_h, r1, g1, b1, r2, r1, g1, b1, r2); \ ++ DUP2_ARG1(__lsx_vclip255_h, g2, b2, g2, b2); \ ++} ++ ++#define RGB_PACK(r, g, b, rgb_l, rgb_h) \ ++{ \ ++ __m128i rg; \ ++ rg = __lsx_vpackev_b(g, r); \ ++ DUP2_ARG3(__lsx_vshuf_b, b, rg, shuf2, b, rg, shuf3, rgb_l, rgb_h); \ ++} ++ ++#define RGB32_PACK(a, r, g, b, rgb_l, rgb_h) \ ++{ \ ++ __m128i ra, bg; \ ++ ra = __lsx_vpackev_b(r, a); \ ++ bg = __lsx_vpackev_b(b, g); \ ++ rgb_l = __lsx_vilvl_h(bg, ra); \ ++ rgb_h = __lsx_vilvh_h(bg, ra); \ ++} ++ ++#define RGB_STORE(rgb_l, rgb_h, image) \ ++{ \ ++ __lsx_vstelm_d(rgb_l, image, 0, 0); \ ++ __lsx_vstelm_d(rgb_l, image, 8, 1); \ ++ __lsx_vstelm_d(rgb_h, image, 16, 0); \ ++} ++ ++#define RGB32_STORE(rgb_l, rgb_h, image) \ ++{ \ ++ __lsx_vst(rgb_l, image, 0); \ ++ __lsx_vst(rgb_h, image, 16); \ ++} ++ ++#define YUV2RGBFUNC(func_name, dst_type, alpha) \ ++ int func_name(SwsContext *c, const uint8_t *src[], \ ++ int srcStride[], int srcSliceY, int srcSliceH, \ ++ uint8_t *dst[], int dstStride[]) \ ++{ \ ++ int x, y, h_size, vshift, res; \ ++ __m128i m_y1, m_y2, m_u, m_v; \ ++ __m128i m_y1_h, m_y2_h, m_u_h, m_v_h; \ ++ __m128i y_1, y_2, u2g, v2g, u2b, v2r, rgb1_l, rgb1_h; \ ++ __m128i rgb2_l, rgb2_h, r1, g1, b1, r2, g2, b2; \ ++ __m128i shuf2 = {0x0504120302100100, 0x0A18090816070614}; \ ++ __m128i shuf3 = {0x1E0F0E1C0D0C1A0B, 0x0101010101010101}; \ ++ __m128i zero = __lsx_vldi(0); \ ++ \ ++ YUV2RGB_LOAD_COE \ ++ \ ++ h_size = c->dstW >> 4; \ ++ res = (c->dstW & 15) >> 1; \ ++ vshift = c->srcFormat != AV_PIX_FMT_YUV422P; \ ++ for (y = 0; y < srcSliceH; y += 2) { \ ++ dst_type av_unused *r, *g, *b; \ ++ dst_type *image1 = (dst_type *)(dst[0] + (y + srcSliceY) * dstStride[0]);\ ++ dst_type *image2 = (dst_type *)(image1 + dstStride[0]);\ ++ const uint8_t *py_1 = src[0] + y * srcStride[0]; \ ++ const uint8_t *py_2 = py_1 + srcStride[0]; \ ++ const uint8_t *pu = src[1] + (y >> vshift) * srcStride[1]; \ ++ const uint8_t *pv = src[2] + (y >> vshift) * srcStride[2]; \ ++ for(x = 0; x < h_size; x++) { \ ++ ++#define YUV2RGBFUNC32(func_name, dst_type, alpha) \ ++ int func_name(SwsContext *c, const uint8_t *src[], \ ++ int srcStride[], int srcSliceY, int srcSliceH, \ ++ uint8_t *dst[], int dstStride[]) \ ++{ \ ++ int x, y, h_size, vshift, res; \ ++ __m128i m_y1, m_y2, m_u, m_v; \ ++ __m128i m_y1_h, m_y2_h, m_u_h, m_v_h; \ ++ __m128i y_1, y_2, u2g, v2g, u2b, v2r, rgb1_l, rgb1_h; \ ++ __m128i rgb2_l, rgb2_h, r1, g1, b1, r2, g2, b2; \ ++ __m128i a = __lsx_vldi(0xFF); \ ++ __m128i zero = __lsx_vldi(0); \ ++ \ ++ YUV2RGB_LOAD_COE \ ++ \ ++ h_size = c->dstW >> 4; \ ++ res = (c->dstW & 15) >> 1; \ ++ vshift = c->srcFormat != AV_PIX_FMT_YUV422P; \ ++ for (y = 0; y < srcSliceH; y += 2) { \ ++ int yd = y + srcSliceY; \ ++ dst_type av_unused *r, *g, *b; \ ++ dst_type *image1 = (dst_type *)(dst[0] + (yd) * dstStride[0]); \ ++ dst_type *image2 = (dst_type *)(dst[0] + (yd + 1) * dstStride[0]); \ ++ const uint8_t *py_1 = src[0] + y * srcStride[0]; \ ++ const uint8_t *py_2 = py_1 + srcStride[0]; \ ++ const uint8_t *pu = src[1] + (y >> vshift) * srcStride[1]; \ ++ const uint8_t *pv = src[2] + (y >> vshift) * srcStride[2]; \ ++ for(x = 0; x < h_size; x++) { \ ++ ++#define DEALYUV2RGBREMAIN \ ++ py_1 += 16; \ ++ py_2 += 16; \ ++ pu += 8; \ ++ pv += 8; \ ++ image1 += 48; \ ++ image2 += 48; \ ++ } \ ++ for (x = 0; x < res; x++) { \ ++ int av_unused U, V, Y; \ ++ U = pu[0]; \ ++ V = pv[0]; \ ++ r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM]; \ ++ g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] \ ++ + c->table_gV[V+YUVRGB_TABLE_HEADROOM]); \ ++ b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM]; ++ ++#define DEALYUV2RGBREMAIN32 \ ++ py_1 += 16; \ ++ py_2 += 16; \ ++ pu += 8; \ ++ pv += 8; \ ++ image1 += 16; \ ++ image2 += 16; \ ++ } \ ++ for (x = 0; x < res; x++) { \ ++ int av_unused U, V, Y; \ ++ U = pu[0]; \ ++ V = pv[0]; \ ++ r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM]; \ ++ g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] \ ++ + c->table_gV[V+YUVRGB_TABLE_HEADROOM]); \ ++ b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM]; \ ++ ++#define PUTRGB24(dst, src) \ ++ Y = src[0]; \ ++ dst[0] = r[Y]; \ ++ dst[1] = g[Y]; \ ++ dst[2] = b[Y]; \ ++ Y = src[1]; \ ++ dst[3] = r[Y]; \ ++ dst[4] = g[Y]; \ ++ dst[5] = b[Y]; ++ ++#define PUTBGR24(dst, src) \ ++ Y = src[0]; \ ++ dst[0] = b[Y]; \ ++ dst[1] = g[Y]; \ ++ dst[2] = r[Y]; \ ++ Y = src[1]; \ ++ dst[3] = b[Y]; \ ++ dst[4] = g[Y]; \ ++ dst[5] = r[Y]; ++ ++#define PUTRGB(dst, src) \ ++ Y = src[0]; \ ++ dst[0] = r[Y] + g[Y] + b[Y]; \ ++ Y = src[1]; \ ++ dst[1] = r[Y] + g[Y] + b[Y]; \ ++ ++#define ENDRES \ ++ pu += 1; \ ++ pv += 1; \ ++ py_1 += 2; \ ++ py_2 += 2; \ ++ image1 += 6; \ ++ image2 += 6; \ ++ ++#define ENDRES32 \ ++ pu += 1; \ ++ pv += 1; \ ++ py_1 += 2; \ ++ py_2 += 2; \ ++ image1 += 2; \ ++ image2 += 2; \ ++ ++#define END_FUNC() \ ++ } \ ++ } \ ++ return srcSliceH; \ ++} ++ ++YUV2RGBFUNC(yuv420_rgb24_lsx, uint8_t, 0) ++ LOAD_YUV_16 ++ YUV2RGB(m_y1, m_y2, m_u, m_v, r1, g1, b1, r2, g2, b2); ++ RGB_PACK(r1, g1, b1, rgb1_l, rgb1_h); ++ RGB_PACK(r2, g2, b2, rgb2_l, rgb2_h); ++ RGB_STORE(rgb1_l, rgb1_h, image1); ++ RGB_STORE(rgb2_l, rgb2_h, image2); ++ YUV2RGB(m_y1_h, m_y2_h, m_u_h, m_v_h, r1, g1, b1, r2, g2, b2); ++ RGB_PACK(r1, g1, b1, rgb1_l, rgb1_h); ++ RGB_PACK(r2, g2, b2, rgb2_l, rgb2_h); ++ RGB_STORE(rgb1_l, rgb1_h, image1 + 24); ++ RGB_STORE(rgb2_l, rgb2_h, image2 + 24); ++ DEALYUV2RGBREMAIN ++ PUTRGB24(image1, py_1); ++ PUTRGB24(image2, py_2); ++ ENDRES ++ END_FUNC() ++ ++YUV2RGBFUNC(yuv420_bgr24_lsx, uint8_t, 0) ++ LOAD_YUV_16 ++ YUV2RGB(m_y1, m_y2, m_u, m_v, r1, g1, b1, r2, g2, b2); ++ RGB_PACK(b1, g1, r1, rgb1_l, rgb1_h); ++ RGB_PACK(b2, g2, r2, rgb2_l, rgb2_h); ++ RGB_STORE(rgb1_l, rgb1_h, image1); ++ RGB_STORE(rgb2_l, rgb2_h, image2); ++ YUV2RGB(m_y1_h, m_y2_h, m_u_h, m_v_h, r1, g1, b1, r2, g2, b2); ++ RGB_PACK(b1, g1, r1, rgb1_l, rgb1_h); ++ RGB_PACK(b2, g2, r2, rgb2_l, rgb2_h); ++ RGB_STORE(rgb1_l, rgb1_h, image1 + 24); ++ RGB_STORE(rgb2_l, rgb2_h, image2 + 24); ++ DEALYUV2RGBREMAIN ++ PUTBGR24(image1, py_1); ++ PUTBGR24(image2, py_2); ++ ENDRES ++ END_FUNC() ++ ++YUV2RGBFUNC32(yuv420_rgba32_lsx, uint32_t, 0) ++ LOAD_YUV_16 ++ YUV2RGB(m_y1, m_y2, m_u, m_v, r1, g1, b1, r2, g2, b2); ++ RGB32_PACK(r1, g1, b1, a, rgb1_l, rgb1_h); ++ RGB32_PACK(r2, g2, b2, a, rgb2_l, rgb2_h); ++ RGB32_STORE(rgb1_l, rgb1_h, image1); ++ RGB32_STORE(rgb2_l, rgb2_h, image2); ++ YUV2RGB(m_y1_h, m_y2_h, m_u_h, m_v_h, r1, g1, b1, r2, g2, b2); ++ RGB32_PACK(r1, g1, b1, a, rgb1_l, rgb1_h); ++ RGB32_PACK(r2, g2, b2, a, rgb2_l, rgb2_h); ++ RGB32_STORE(rgb1_l, rgb1_h, image1 + 8); ++ RGB32_STORE(rgb2_l, rgb2_h, image2 + 8); ++ DEALYUV2RGBREMAIN32 ++ PUTRGB(image1, py_1); ++ PUTRGB(image2, py_2); ++ ENDRES32 ++ END_FUNC() ++ ++YUV2RGBFUNC32(yuv420_bgra32_lsx, uint32_t, 0) ++ LOAD_YUV_16 ++ YUV2RGB(m_y1, m_y2, m_u, m_v, r1, g1, b1, r2, g2, b2); ++ RGB32_PACK(b1, g1, r1, a, rgb1_l, rgb1_h); ++ RGB32_PACK(b2, g2, r2, a, rgb2_l, rgb2_h); ++ RGB32_STORE(rgb1_l, rgb1_h, image1); ++ RGB32_STORE(rgb2_l, rgb2_h, image2); ++ YUV2RGB(m_y1_h, m_y2_h, m_u_h, m_v_h, r1, g1, b1, r2, g2, b2); ++ RGB32_PACK(b1, g1, r1, a, rgb1_l, rgb1_h); ++ RGB32_PACK(b2, g2, r2, a, rgb2_l, rgb2_h); ++ RGB32_STORE(rgb1_l, rgb1_h, image1 + 8); ++ RGB32_STORE(rgb2_l, rgb2_h, image2 + 8); ++ DEALYUV2RGBREMAIN32 ++ PUTRGB(image1, py_1); ++ PUTRGB(image2, py_2); ++ ENDRES32 ++ END_FUNC() ++ ++YUV2RGBFUNC32(yuv420_argb32_lsx, uint32_t, 0) ++ LOAD_YUV_16 ++ YUV2RGB(m_y1, m_y2, m_u, m_v, r1, g1, b1, r2, g2, b2); ++ RGB32_PACK(a, r1, g1, b1, rgb1_l, rgb1_h); ++ RGB32_PACK(a, r2, g2, b2, rgb2_l, rgb2_h); ++ RGB32_STORE(rgb1_l, rgb1_h, image1); ++ RGB32_STORE(rgb2_l, rgb2_h, image2); ++ YUV2RGB(m_y1_h, m_y2_h, m_u_h, m_v_h, r1, g1, b1, r2, g2, b2); ++ RGB32_PACK(a, r1, g1, b1, rgb1_l, rgb1_h); ++ RGB32_PACK(a, r2, g2, b2, rgb2_l, rgb2_h); ++ RGB32_STORE(rgb1_l, rgb1_h, image1 + 8); ++ RGB32_STORE(rgb2_l, rgb2_h, image2 + 8); ++ DEALYUV2RGBREMAIN32 ++ PUTRGB(image1, py_1); ++ PUTRGB(image2, py_2); ++ ENDRES32 ++ END_FUNC() ++ ++YUV2RGBFUNC32(yuv420_abgr32_lsx, uint32_t, 0) ++ LOAD_YUV_16 ++ YUV2RGB(m_y1, m_y2, m_u, m_v, r1, g1, b1, r2, g2, b2); ++ RGB32_PACK(a, b1, g1, r1, rgb1_l, rgb1_h); ++ RGB32_PACK(a, b2, g2, r2, rgb2_l, rgb2_h); ++ RGB32_STORE(rgb1_l, rgb1_h, image1); ++ RGB32_STORE(rgb2_l, rgb2_h, image2); ++ YUV2RGB(m_y1_h, m_y2_h, m_u_h, m_v_h, r1, g1, b1, r2, g2, b2); ++ RGB32_PACK(a, b1, g1, r1, rgb1_l, rgb1_h); ++ RGB32_PACK(a, b2, g2, r2, rgb2_l, rgb2_h); ++ RGB32_STORE(rgb1_l, rgb1_h, image1 + 8); ++ RGB32_STORE(rgb2_l, rgb2_h, image2 + 8); ++ DEALYUV2RGBREMAIN32 ++ PUTRGB(image1, py_1); ++ PUTRGB(image2, py_2); ++ ENDRES32 ++ END_FUNC() +-- +2.20.1 + diff --git a/package/ffmpeg/0017-swscale-mips-Add-following-msa-optimizations.patch b/package/ffmpeg/0017-swscale-mips-Add-following-msa-optimizations.patch new file mode 100644 index 00000000..fceda44e --- /dev/null +++ b/package/ffmpeg/0017-swscale-mips-Add-following-msa-optimizations.patch @@ -0,0 +1,523 @@ +From 95a87430a309ea304f819c60bbbbf0e620d6c147 Mon Sep 17 00:00:00 2001 +From: jinbo +Date: Wed, 29 Mar 2023 14:21:23 +0800 +Subject: [PATCH 07/10] swscale [mips]: Add following msa optimizations + +yuv420_rgb24_msa +yuv420_bgr24_msa +yuv420_rgba32_msa +yuv420_argb32_msa +yuv420_bgra32_msa +yuv420_abgr32_msa + +Change-Id: I2a04879d5cf59a89aa551a1f8ca611452b9c108c +--- + libswscale/mips/Makefile | 1 + + libswscale/mips/swscale_init_mips.c | 36 +++ + libswscale/mips/swscale_mips.h | 19 ++ + libswscale/mips/yuv2rgb_msa.c | 385 ++++++++++++++++++++++++++++ + libswscale/swscale_internal.h | 1 + + libswscale/yuv2rgb.c | 2 + + 6 files changed, 444 insertions(+) + create mode 100644 libswscale/mips/yuv2rgb_msa.c + +diff --git a/libswscale/mips/Makefile b/libswscale/mips/Makefile +index 48c2425eff..8721561930 100644 +--- a/libswscale/mips/Makefile ++++ b/libswscale/mips/Makefile +@@ -2,3 +2,4 @@ OBJS += mips/swscale_init_mips.o + OBJS += mips/rgb2rgb_init_mips.o + MSA-OBJS += mips/swscale_msa.o + MSA-OBJS += mips/rgb2rgb_msa.o ++MSA-OBJS += mips/yuv2rgb_msa.o +diff --git a/libswscale/mips/swscale_init_mips.c b/libswscale/mips/swscale_init_mips.c +index 8e26486f1e..4ed8b1b172 100644 +--- a/libswscale/mips/swscale_init_mips.c ++++ b/libswscale/mips/swscale_init_mips.c +@@ -209,3 +209,39 @@ av_cold void ff_sws_init_swscale_mips(SwsContext *c) + } + #endif /* #if HAVE_MSA */ + } ++ ++av_cold SwsFunc ff_yuv2rgb_init_mips(SwsContext *c) ++{ ++ int cpu_flags = av_get_cpu_flags(); ++#if HAVE_MSA ++ if (have_msa(cpu_flags)) { ++ switch (c->dstFormat) { ++ case AV_PIX_FMT_RGB24: ++ return yuv420_rgb24_msa; ++ case AV_PIX_FMT_BGR24: ++ return yuv420_bgr24_msa; ++ case AV_PIX_FMT_RGBA: ++ if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) { ++ break; ++ } else ++ return yuv420_rgba32_msa; ++ case AV_PIX_FMT_ARGB: ++ if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) { ++ break; ++ } else ++ return yuv420_argb32_msa; ++ case AV_PIX_FMT_BGRA: ++ if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) { ++ break; ++ } else ++ return yuv420_bgra32_msa; ++ case AV_PIX_FMT_ABGR: ++ if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) { ++ break; ++ } else ++ return yuv420_abgr32_msa; ++ } ++ } ++ return NULL; ++#endif ++} +diff --git a/libswscale/mips/swscale_mips.h b/libswscale/mips/swscale_mips.h +index ff30593e0d..683b3f5c72 100644 +--- a/libswscale/mips/swscale_mips.h ++++ b/libswscale/mips/swscale_mips.h +@@ -401,4 +401,23 @@ void planar_rgb_to_uv_msa(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4], + void planar_rgb_to_y_msa(uint8_t *_dst, const uint8_t *src[4], int width, + int32_t *rgb2yuv); + ++int yuv420_rgb24_msa(SwsContext *c, const uint8_t *src[], int srcStride[], ++ int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]); ++ ++int yuv420_bgr24_msa(SwsContext *c, const uint8_t *src[], int srcStride[], ++ int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]); ++ ++int yuv420_rgba32_msa(SwsContext *c, const uint8_t *src[], int srcStride[], ++ int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]); ++ ++int yuv420_bgra32_msa(SwsContext *c, const uint8_t *src[], int srcStride[], ++ int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]); ++ ++int yuv420_argb32_msa(SwsContext *c, const uint8_t *src[], int srcStride[], ++ int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]); ++ ++int yuv420_abgr32_msa(SwsContext *c, const uint8_t *src[], int srcStride[], ++ int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]); ++ ++ + #endif /* SWSCALE_MIPS_SWSCALE_MIPS_H */ +diff --git a/libswscale/mips/yuv2rgb_msa.c b/libswscale/mips/yuv2rgb_msa.c +new file mode 100644 +index 0000000000..33e951f6ba +--- /dev/null ++++ b/libswscale/mips/yuv2rgb_msa.c +@@ -0,0 +1,385 @@ ++/* ++ * Copyright (C) 2023 Loongson Technology Co. Ltd. ++ * Contributed by jinbo(jinbo@loongson.cn) ++ * All rights reserved. ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "swscale_mips.h" ++#include "libavutil/mips/generic_macros_msa.h" ++ ++//Using ST_D1 will result in great regression, reason is not clear. ++#define SD_NEW(val, pdst) \ ++{ \ ++ uint64_t *pdst_sd_m = (uint64_t *) (pdst); \ ++ *pdst_sd_m = (val); \ ++} ++ ++#define YUV2RGB_LOAD_COE \ ++ /* Load x_offset */ \ ++ v8i16 y_offset = (v8i16)__msa_fill_d(c->yOffset); \ ++ v8i16 u_offset = (v8i16)__msa_fill_d(c->uOffset); \ ++ v8i16 v_offset = (v8i16)__msa_fill_d(c->vOffset); \ ++ /*Load x_coeff */ \ ++ v8i16 ug_coeff = (v8i16)__msa_fill_d(c->ugCoeff); \ ++ v8i16 vg_coeff = (v8i16)__msa_fill_d(c->vgCoeff); \ ++ v8i16 y_coeff = (v8i16)__msa_fill_d(c->yCoeff); \ ++ v8i16 ub_coeff = (v8i16)__msa_fill_d(c->ubCoeff); \ ++ v8i16 vr_coeff = (v8i16)__msa_fill_d(c->vrCoeff); \ ++ ++#define LOAD_YUV_16 \ ++ m_y1 = LD_SB(py_1); \ ++ m_y2 = LD_SB(py_2); \ ++ m_u = LD_SB(pu); \ ++ m_v = LD_SB(pv); \ ++ m_u = __msa_ilvr_b((v16i8)m_u, (v16i8)m_u); \ ++ m_v = __msa_ilvr_b((v16i8)m_v, (v16i8)m_v); \ ++ m_u_l = __msa_ilvl_b(zero, (v16i8)m_u); \ ++ m_u = __msa_ilvr_b(zero, (v16i8)m_u); \ ++ m_v_l = __msa_ilvl_b(zero, (v16i8)m_v); \ ++ m_v = __msa_ilvr_b(zero, (v16i8)m_v); \ ++ m_y1_l = __msa_ilvl_b(zero, (v16i8)m_y1); \ ++ m_y1 = __msa_ilvr_b(zero, (v16i8)m_y1); \ ++ m_y2_l = __msa_ilvl_b(zero, (v16i8)m_y2); \ ++ m_y2 = __msa_ilvr_b(zero, (v16i8)m_y2); \ ++ ++#define MUH_H(in0, in1, in2, in3, out0) \ ++{ \ ++ v4i32 tmp0, tmp1; \ ++ tmp0 = in0 * in1; \ ++ tmp1 = in2 * in3; \ ++ out0 = __msa_pckod_h((v8i16)tmp1, (v8i16)tmp0); \ ++} ++ ++#define YUV2RGB(y1, y2, u, v, r1, g1, b1, r2, g2, b2) \ ++{ \ ++ y1 = (v16i8)__msa_slli_h((v8i16)y1, 3); \ ++ y2 = (v16i8)__msa_slli_h((v8i16)y2, 3); \ ++ u = (v16i8)__msa_slli_h((v8i16)u, 3); \ ++ v = (v16i8)__msa_slli_h((v8i16)v, 3); \ ++ y1 = (v16i8)__msa_subv_h((v8i16)y1, y_offset); \ ++ y2 = (v16i8)__msa_subv_h((v8i16)y2, y_offset); \ ++ u = (v16i8)__msa_subv_h((v8i16)u, u_offset); \ ++ v = (v16i8)__msa_subv_h((v8i16)v, v_offset); \ ++ UNPCK_SH_SW(y_coeff, y_coeff_r, y_coeff_l); \ ++ UNPCK_SH_SW(y1, tmp_r, tmp_l); \ ++ MUH_H(tmp_r, y_coeff_r, tmp_l, y_coeff_l, y_1_r); \ ++ UNPCK_SH_SW(y2, tmp_r, tmp_l); \ ++ MUH_H(tmp_r, y_coeff_r, tmp_l, y_coeff_l, y_2_r); \ ++ UNPCK_SH_SW(ug_coeff, ug_coeff_r, ug_coeff_l); \ ++ UNPCK_SH_SW(ub_coeff, ub_coeff_r, ub_coeff_l); \ ++ UNPCK_SH_SW(u, tmp_r, tmp_l); \ ++ MUH_H(tmp_r, ug_coeff_r, tmp_l, ug_coeff_l, u2g_r); \ ++ MUH_H(tmp_r, ub_coeff_r, tmp_l, ub_coeff_l, u2b_r); \ ++ UNPCK_SH_SW(vr_coeff, vr_coeff_r, vr_coeff_l); \ ++ UNPCK_SH_SW(vg_coeff, vg_coeff_r, vg_coeff_l); \ ++ UNPCK_SH_SW(v, tmp_r, tmp_l); \ ++ MUH_H(tmp_r, vr_coeff_r, tmp_l, vr_coeff_l, v2r_r); \ ++ MUH_H(tmp_r, vg_coeff_r, tmp_l, vg_coeff_l, v2g_r); \ ++ r1 = __msa_adds_s_h(y_1_r, v2r_r); \ ++ v2g_r = __msa_adds_s_h(v2g_r, u2g_r); \ ++ g1 = __msa_adds_s_h(y_1_r, v2g_r); \ ++ b1 = __msa_adds_s_h(y_1_r, u2b_r); \ ++ r2 = __msa_adds_s_h(y_2_r, v2r_r); \ ++ g2 = __msa_adds_s_h(y_2_r, v2g_r); \ ++ b2 = __msa_adds_s_h(y_2_r, u2b_r); \ ++ CLIP_SH4_0_255(r1, g1, b1, r2); \ ++ CLIP_SH2_0_255(g2, b2); \ ++} ++ ++#define RGB_PACK(r, g, b, rgb_l, rgb_h) \ ++{ \ ++ v16i8 rg; \ ++ rg = __msa_ilvev_b((v16i8)g, (v16i8)r); \ ++ rgb_l = (v8i16)__msa_vshf_b((v16i8)shuf2, (v16i8)b, rg); \ ++ rgb_h = (v8i16)__msa_vshf_b((v16i8)shuf3, (v16i8)b, rg); \ ++} ++ ++#define RGB32_PACK(a, r, g, b, rgb_l, rgb_h) \ ++{ \ ++ v16i8 ra, bg; \ ++ ra = __msa_ilvev_b((v16i8)r, (v16i8)a); \ ++ bg = __msa_ilvev_b((v16i8)b, (v16i8)g); \ ++ rgb_l = __msa_ilvr_h((v8i16)bg, (v8i16)ra); \ ++ rgb_h = __msa_ilvl_h((v8i16)bg, (v8i16)ra); \ ++} ++ ++#define RGB_STORE(rgb_l, rgb_h, image) \ ++{ \ ++ ST_SH(rgb_l, image); \ ++ SD_NEW(__msa_copy_u_d((v2i64)rgb_h, 0), image); \ ++} ++ ++#define RGB32_STORE(rgb_l, rgb_h, image) \ ++{ \ ++ ST_SH2(rgb_l, rgb_h, image, 4); \ ++} ++ ++#define YUV2RGBFUNC(func_name, dst_type, alpha) \ ++ int func_name(SwsContext *c, const uint8_t *src[], \ ++ int srcStride[], int srcSliceY, int srcSliceH, \ ++ uint8_t *dst[], int dstStride[]) \ ++{ \ ++ int x, y, h_size, vshift, res; \ ++ v16i8 m_y1, m_y2, m_u, m_v; \ ++ v16i8 m_u_l, m_v_l, m_y1_l, m_y2_l; \ ++ v4i32 y_coeff_r, y_coeff_l, ug_coeff_r, ug_coeff_l; \ ++ v4i32 ub_coeff_r, ub_coeff_l, vr_coeff_r, vr_coeff_l; \ ++ v4i32 vg_coeff_r, vg_coeff_l, tmp_r, tmp_l; \ ++ v8i16 y_1_r, y_2_r, u2g_r, v2g_r, u2b_r, v2r_r, rgb1_l, rgb1_h; \ ++ v8i16 rgb2_l, rgb2_h, r1, g1, b1, r2, g2, b2; \ ++ v2i64 shuf2 = {0x0504120302100100, 0x0A18090816070614}; \ ++ v2i64 shuf3 = {0x1E0F0E1C0D0C1A0B, 0x0101010101010101}; \ ++ v16i8 zero = __msa_fill_b(0); \ ++ \ ++ YUV2RGB_LOAD_COE \ ++ \ ++ h_size = c->dstW >> 4; \ ++ res = (c->dstW & 15) >> 1; \ ++ vshift = c->srcFormat != AV_PIX_FMT_YUV422P; \ ++ for (y = 0; y < srcSliceH; y += 2) { \ ++ dst_type av_unused *r, *g, *b; \ ++ dst_type *image1 = (dst_type *)(dst[0] + (y + srcSliceY) * dstStride[0]);\ ++ dst_type *image2 = (dst_type *)(image1 + dstStride[0]);\ ++ const uint8_t *py_1 = src[0] + y * srcStride[0]; \ ++ const uint8_t *py_2 = py_1 + srcStride[0]; \ ++ const uint8_t *pu = src[1] + (y >> vshift) * srcStride[1]; \ ++ const uint8_t *pv = src[2] + (y >> vshift) * srcStride[2]; \ ++ for(x = 0; x < h_size; x++) { \ ++ ++#define YUV2RGBFUNC32(func_name, dst_type, alpha) \ ++ int func_name(SwsContext *c, const uint8_t *src[], \ ++ int srcStride[], int srcSliceY, int srcSliceH, \ ++ uint8_t *dst[], int dstStride[]) \ ++{ \ ++ int x, y, h_size, vshift, res; \ ++ v16i8 m_y1, m_y2, m_u, m_v; \ ++ v16i8 m_u_l, m_v_l, m_y1_l, m_y2_l; \ ++ v4i32 y_coeff_r, y_coeff_l, ug_coeff_r, ug_coeff_l; \ ++ v4i32 ub_coeff_r, ub_coeff_l, vr_coeff_r, vr_coeff_l; \ ++ v4i32 vg_coeff_r, vg_coeff_l, tmp_r, tmp_l; \ ++ v8i16 y_1_r, y_2_r, u2g_r, v2g_r, u2b_r, v2r_r, rgb1_l, rgb1_h; \ ++ v8i16 rgb2_l, rgb2_h, r1, g1, b1, r2, g2, b2; \ ++ v16u8 a = (v16u8)__msa_fill_b(0xFF); \ ++ v16i8 zero = __msa_fill_b(0); \ ++ \ ++ YUV2RGB_LOAD_COE \ ++ \ ++ h_size = c->dstW >> 4; \ ++ res = (c->dstW & 15) >> 1; \ ++ vshift = c->srcFormat != AV_PIX_FMT_YUV422P; \ ++ for (y = 0; y < srcSliceH; y += 2) { \ ++ int yd = y + srcSliceY; \ ++ dst_type av_unused *r, *g, *b; \ ++ dst_type *image1 = (dst_type *)(dst[0] + (yd) * dstStride[0]); \ ++ dst_type *image2 = (dst_type *)(dst[0] + (yd + 1) * dstStride[0]); \ ++ const uint8_t *py_1 = src[0] + y * srcStride[0]; \ ++ const uint8_t *py_2 = py_1 + srcStride[0]; \ ++ const uint8_t *pu = src[1] + (y >> vshift) * srcStride[1]; \ ++ const uint8_t *pv = src[2] + (y >> vshift) * srcStride[2]; \ ++ for(x = 0; x < h_size; x++) { \ ++ ++#define DEALYUV2RGBREMAIN \ ++ py_1 += 16; \ ++ py_2 += 16; \ ++ pu += 8; \ ++ pv += 8; \ ++ image1 += 48; \ ++ image2 += 48; \ ++ } \ ++ for (x = 0; x < res; x++) { \ ++ int av_unused U, V, Y; \ ++ U = pu[0]; \ ++ V = pv[0]; \ ++ r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM]; \ ++ g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] \ ++ + c->table_gV[V+YUVRGB_TABLE_HEADROOM]); \ ++ b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM]; ++ ++#define DEALYUV2RGBREMAIN32 \ ++ py_1 += 16; \ ++ py_2 += 16; \ ++ pu += 8; \ ++ pv += 8; \ ++ image1 += 16; \ ++ image2 += 16; \ ++ } \ ++ for (x = 0; x < res; x++) { \ ++ int av_unused U, V, Y; \ ++ U = pu[0]; \ ++ V = pv[0]; \ ++ r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM]; \ ++ g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] \ ++ + c->table_gV[V+YUVRGB_TABLE_HEADROOM]); \ ++ b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM]; \ ++ ++#define PUTRGB24(dst, src) \ ++ Y = src[0]; \ ++ dst[0] = r[Y]; \ ++ dst[1] = g[Y]; \ ++ dst[2] = b[Y]; \ ++ Y = src[1]; \ ++ dst[3] = r[Y]; \ ++ dst[4] = g[Y]; \ ++ dst[5] = b[Y]; ++ ++#define PUTBGR24(dst, src) \ ++ Y = src[0]; \ ++ dst[0] = b[Y]; \ ++ dst[1] = g[Y]; \ ++ dst[2] = r[Y]; \ ++ Y = src[1]; \ ++ dst[3] = b[Y]; \ ++ dst[4] = g[Y]; \ ++ dst[5] = r[Y]; ++ ++#define PUTRGB(dst, src) \ ++ Y = src[0]; \ ++ dst[0] = r[Y] + g[Y] + b[Y]; \ ++ Y = src[1]; \ ++ dst[1] = r[Y] + g[Y] + b[Y]; \ ++ ++#define ENDRES \ ++ pu += 1; \ ++ pv += 1; \ ++ py_1 += 2; \ ++ py_2 += 2; \ ++ image1 += 6; \ ++ image2 += 6; \ ++ ++#define ENDRES32 \ ++ pu += 1; \ ++ pv += 1; \ ++ py_1 += 2; \ ++ py_2 += 2; \ ++ image1 += 2; \ ++ image2 += 2; \ ++ ++#define END_FUNC() \ ++ } \ ++ } \ ++ return srcSliceH; \ ++} ++ ++YUV2RGBFUNC(yuv420_rgb24_msa, uint8_t, 0) ++ LOAD_YUV_16 ++ YUV2RGB(m_y1, m_y2, m_u, m_v, r1, g1, b1, r2, g2, b2); ++ RGB_PACK(r1, g1, b1, rgb1_l, rgb1_h); ++ RGB_PACK(r2, g2, b2, rgb2_l, rgb2_h); ++ RGB_STORE(rgb1_l, rgb1_h, image1); ++ RGB_STORE(rgb2_l, rgb2_h, image2); ++ YUV2RGB(m_y1_l, m_y2_l, m_u_l, m_v_l, r1, g1, b1, r2, g2, b2); ++ RGB_PACK(r1, g1, b1, rgb1_l, rgb1_h); ++ RGB_PACK(r2, g2, b2, rgb2_l, rgb2_h); ++ RGB_STORE(rgb1_l, rgb1_h, image1 + 24); ++ RGB_STORE(rgb2_l, rgb2_h, image2 + 24); ++ DEALYUV2RGBREMAIN ++ PUTRGB24(image1, py_1); ++ PUTRGB24(image2, py_2); ++ ENDRES ++ END_FUNC() ++ ++YUV2RGBFUNC(yuv420_bgr24_msa, uint8_t, 0) ++ LOAD_YUV_16 ++ YUV2RGB(m_y1, m_y2, m_u, m_v, r1, g1, b1, r2, g2, b2); ++ RGB_PACK(b1, g1, r1, rgb1_l, rgb1_h); ++ RGB_PACK(b2, g2, r2, rgb2_l, rgb2_h); ++ RGB_STORE(rgb1_l, rgb1_h, image1); ++ RGB_STORE(rgb2_l, rgb2_h, image2); ++ YUV2RGB(m_y1_l, m_y2_l, m_u_l, m_v_l, r1, g1, b1, r2, g2, b2); ++ RGB_PACK(b1, g1, r1, rgb1_l, rgb1_h); ++ RGB_PACK(b2, g2, r2, rgb2_l, rgb2_h); ++ RGB_STORE(rgb1_l, rgb1_h, image1 + 24); ++ RGB_STORE(rgb2_l, rgb2_h, image2 + 24); ++ DEALYUV2RGBREMAIN ++ PUTBGR24(image1, py_1); ++ PUTBGR24(image2, py_2); ++ ENDRES ++ END_FUNC() ++ ++YUV2RGBFUNC32(yuv420_rgba32_msa, uint32_t, 0) ++ LOAD_YUV_16 ++ YUV2RGB(m_y1, m_y2, m_u, m_v, r1, g1, b1, r2, g2, b2); ++ RGB32_PACK(r1, g1, b1, a, rgb1_l, rgb1_h); ++ RGB32_PACK(r2, g2, b2, a, rgb2_l, rgb2_h); ++ RGB32_STORE(rgb1_l, rgb1_h, image1); ++ RGB32_STORE(rgb2_l, rgb2_h, image2); ++ YUV2RGB(m_y1_l, m_y2_l, m_u_l, m_v_l, r1, g1, b1, r2, g2, b2); ++ RGB32_PACK(r1, g1, b1, a, rgb1_l, rgb1_h); ++ RGB32_PACK(r2, g2, b2, a, rgb2_l, rgb2_h); ++ RGB32_STORE(rgb1_l, rgb1_h, image1 + 8); ++ RGB32_STORE(rgb2_l, rgb2_h, image2 + 8); ++ DEALYUV2RGBREMAIN32 ++ PUTRGB(image1, py_1); ++ PUTRGB(image2, py_2); ++ ENDRES32 ++ END_FUNC() ++ ++YUV2RGBFUNC32(yuv420_bgra32_msa, uint32_t, 0) ++ LOAD_YUV_16 ++ YUV2RGB(m_y1, m_y2, m_u, m_v, r1, g1, b1, r2, g2, b2); ++ RGB32_PACK(b1, g1, r1, a, rgb1_l, rgb1_h); ++ RGB32_PACK(b2, g2, r2, a, rgb2_l, rgb2_h); ++ RGB32_STORE(rgb1_l, rgb1_h, image1); ++ RGB32_STORE(rgb2_l, rgb2_h, image2); ++ YUV2RGB(m_y1_l, m_y2_l, m_u_l, m_v_l, r1, g1, b1, r2, g2, b2); ++ RGB32_PACK(b1, g1, r1, a, rgb1_l, rgb1_h); ++ RGB32_PACK(b2, g2, r2, a, rgb2_l, rgb2_h); ++ RGB32_STORE(rgb1_l, rgb1_h, image1 + 8); ++ RGB32_STORE(rgb2_l, rgb2_h, image2 + 8); ++ DEALYUV2RGBREMAIN32 ++ PUTRGB(image1, py_1); ++ PUTRGB(image2, py_2); ++ ENDRES32 ++ END_FUNC() ++ ++YUV2RGBFUNC32(yuv420_argb32_msa, uint32_t, 0) ++ LOAD_YUV_16 ++ YUV2RGB(m_y1, m_y2, m_u, m_v, r1, g1, b1, r2, g2, b2); ++ RGB32_PACK(a, r1, g1, b1, rgb1_l, rgb1_h); ++ RGB32_PACK(a, r2, g2, b2, rgb2_l, rgb2_h); ++ RGB32_STORE(rgb1_l, rgb1_h, image1); ++ RGB32_STORE(rgb2_l, rgb2_h, image2); ++ YUV2RGB(m_y1_l, m_y2_l, m_u_l, m_v_l, r1, g1, b1, r2, g2, b2); ++ RGB32_PACK(a, r1, g1, b1, rgb1_l, rgb1_h); ++ RGB32_PACK(a, r2, g2, b2, rgb2_l, rgb2_h); ++ RGB32_STORE(rgb1_l, rgb1_h, image1 + 8); ++ RGB32_STORE(rgb2_l, rgb2_h, image2 + 8); ++ DEALYUV2RGBREMAIN32 ++ PUTRGB(image1, py_1); ++ PUTRGB(image2, py_2); ++ ENDRES32 ++ END_FUNC() ++ ++YUV2RGBFUNC32(yuv420_abgr32_msa, uint32_t, 0) ++ LOAD_YUV_16 ++ YUV2RGB(m_y1, m_y2, m_u, m_v, r1, g1, b1, r2, g2, b2); ++ RGB32_PACK(a, b1, g1, r1, rgb1_l, rgb1_h); ++ RGB32_PACK(a, b2, g2, r2, rgb2_l, rgb2_h); ++ RGB32_STORE(rgb1_l, rgb1_h, image1); ++ RGB32_STORE(rgb2_l, rgb2_h, image2); ++ YUV2RGB(m_y1_l, m_y2_l, m_u_l, m_v_l, r1, g1, b1, r2, g2, b2); ++ RGB32_PACK(a, b1, g1, r1, rgb1_l, rgb1_h); ++ RGB32_PACK(a, b2, g2, r2, rgb2_l, rgb2_h); ++ RGB32_STORE(rgb1_l, rgb1_h, image1 + 8); ++ RGB32_STORE(rgb2_l, rgb2_h, image2 + 8); ++ DEALYUV2RGBREMAIN32 ++ PUTRGB(image1, py_1); ++ PUTRGB(image2, py_2); ++ ENDRES32 ++ END_FUNC() +diff --git a/libswscale/swscale_internal.h b/libswscale/swscale_internal.h +index 1d2932dc43..4d1aeb1cf2 100644 +--- a/libswscale/swscale_internal.h ++++ b/libswscale/swscale_internal.h +@@ -643,6 +643,7 @@ av_cold void ff_sws_init_range_convert(SwsContext *c); + SwsFunc ff_yuv2rgb_init_x86(SwsContext *c); + SwsFunc ff_yuv2rgb_init_ppc(SwsContext *c); + SwsFunc ff_yuv2rgb_init_loongarch(SwsContext *c); ++SwsFunc ff_yuv2rgb_init_mips(SwsContext *c); + + static av_always_inline int is16BPS(enum AVPixelFormat pix_fmt) + { +diff --git a/libswscale/yuv2rgb.c b/libswscale/yuv2rgb.c +index f7edfd3d0c..1b36dd319e 100644 +--- a/libswscale/yuv2rgb.c ++++ b/libswscale/yuv2rgb.c +@@ -686,6 +686,8 @@ SwsFunc ff_yuv2rgb_get_func_ptr(SwsContext *c) + t = ff_yuv2rgb_init_x86(c); + if (ARCH_LOONGARCH) + t = ff_yuv2rgb_init_loongarch(c); ++ if (ARCH_MIPS) ++ t = ff_yuv2rgb_init_mips(c); + + if (t) + return t; +-- +2.20.1 + diff --git a/package/ffmpeg/0018-Remove-rgb24-bgr24-msa-optimizations.patch b/package/ffmpeg/0018-Remove-rgb24-bgr24-msa-optimizations.patch new file mode 100644 index 00000000..a8722883 --- /dev/null +++ b/package/ffmpeg/0018-Remove-rgb24-bgr24-msa-optimizations.patch @@ -0,0 +1,241 @@ +From 0b0df7a3d813b0e2046d894e843e838aa35da367 Mon Sep 17 00:00:00 2001 +From: jinbo +Date: Thu, 30 Mar 2023 09:20:27 +0800 +Subject: [PATCH 08/10] Remove rgb24 & bgr24 msa optimizations + +In RGB_STORE, we need to store 64bit into the memory image +with offset 16 but performance is not good, so remove them. + +Change-Id: Ia6b02b233df90309f99d75a8f94c0c45f477660c +--- + libswscale/mips/swscale_init_mips.c | 4 - + libswscale/mips/swscale_mips.h | 6 -- + libswscale/mips/yuv2rgb_msa.c | 134 ---------------------------- + 3 files changed, 144 deletions(-) + +diff --git a/libswscale/mips/swscale_init_mips.c b/libswscale/mips/swscale_init_mips.c +index 4ed8b1b172..8ee13bea21 100644 +--- a/libswscale/mips/swscale_init_mips.c ++++ b/libswscale/mips/swscale_init_mips.c +@@ -216,10 +216,6 @@ av_cold SwsFunc ff_yuv2rgb_init_mips(SwsContext *c) + #if HAVE_MSA + if (have_msa(cpu_flags)) { + switch (c->dstFormat) { +- case AV_PIX_FMT_RGB24: +- return yuv420_rgb24_msa; +- case AV_PIX_FMT_BGR24: +- return yuv420_bgr24_msa; + case AV_PIX_FMT_RGBA: + if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) { + break; +diff --git a/libswscale/mips/swscale_mips.h b/libswscale/mips/swscale_mips.h +index 683b3f5c72..1152f9a497 100644 +--- a/libswscale/mips/swscale_mips.h ++++ b/libswscale/mips/swscale_mips.h +@@ -401,12 +401,6 @@ void planar_rgb_to_uv_msa(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4], + void planar_rgb_to_y_msa(uint8_t *_dst, const uint8_t *src[4], int width, + int32_t *rgb2yuv); + +-int yuv420_rgb24_msa(SwsContext *c, const uint8_t *src[], int srcStride[], +- int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]); +- +-int yuv420_bgr24_msa(SwsContext *c, const uint8_t *src[], int srcStride[], +- int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]); +- + int yuv420_rgba32_msa(SwsContext *c, const uint8_t *src[], int srcStride[], + int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]); + +diff --git a/libswscale/mips/yuv2rgb_msa.c b/libswscale/mips/yuv2rgb_msa.c +index 33e951f6ba..1f9ef90804 100644 +--- a/libswscale/mips/yuv2rgb_msa.c ++++ b/libswscale/mips/yuv2rgb_msa.c +@@ -23,13 +23,6 @@ + #include "swscale_mips.h" + #include "libavutil/mips/generic_macros_msa.h" + +-//Using ST_D1 will result in great regression, reason is not clear. +-#define SD_NEW(val, pdst) \ +-{ \ +- uint64_t *pdst_sd_m = (uint64_t *) (pdst); \ +- *pdst_sd_m = (val); \ +-} +- + #define YUV2RGB_LOAD_COE \ + /* Load x_offset */ \ + v8i16 y_offset = (v8i16)__msa_fill_d(c->yOffset); \ +@@ -102,14 +95,6 @@ + CLIP_SH2_0_255(g2, b2); \ + } + +-#define RGB_PACK(r, g, b, rgb_l, rgb_h) \ +-{ \ +- v16i8 rg; \ +- rg = __msa_ilvev_b((v16i8)g, (v16i8)r); \ +- rgb_l = (v8i16)__msa_vshf_b((v16i8)shuf2, (v16i8)b, rg); \ +- rgb_h = (v8i16)__msa_vshf_b((v16i8)shuf3, (v16i8)b, rg); \ +-} +- + #define RGB32_PACK(a, r, g, b, rgb_l, rgb_h) \ + { \ + v16i8 ra, bg; \ +@@ -119,49 +104,11 @@ + rgb_h = __msa_ilvl_h((v8i16)bg, (v8i16)ra); \ + } + +-#define RGB_STORE(rgb_l, rgb_h, image) \ +-{ \ +- ST_SH(rgb_l, image); \ +- SD_NEW(__msa_copy_u_d((v2i64)rgb_h, 0), image); \ +-} +- + #define RGB32_STORE(rgb_l, rgb_h, image) \ + { \ + ST_SH2(rgb_l, rgb_h, image, 4); \ + } + +-#define YUV2RGBFUNC(func_name, dst_type, alpha) \ +- int func_name(SwsContext *c, const uint8_t *src[], \ +- int srcStride[], int srcSliceY, int srcSliceH, \ +- uint8_t *dst[], int dstStride[]) \ +-{ \ +- int x, y, h_size, vshift, res; \ +- v16i8 m_y1, m_y2, m_u, m_v; \ +- v16i8 m_u_l, m_v_l, m_y1_l, m_y2_l; \ +- v4i32 y_coeff_r, y_coeff_l, ug_coeff_r, ug_coeff_l; \ +- v4i32 ub_coeff_r, ub_coeff_l, vr_coeff_r, vr_coeff_l; \ +- v4i32 vg_coeff_r, vg_coeff_l, tmp_r, tmp_l; \ +- v8i16 y_1_r, y_2_r, u2g_r, v2g_r, u2b_r, v2r_r, rgb1_l, rgb1_h; \ +- v8i16 rgb2_l, rgb2_h, r1, g1, b1, r2, g2, b2; \ +- v2i64 shuf2 = {0x0504120302100100, 0x0A18090816070614}; \ +- v2i64 shuf3 = {0x1E0F0E1C0D0C1A0B, 0x0101010101010101}; \ +- v16i8 zero = __msa_fill_b(0); \ +- \ +- YUV2RGB_LOAD_COE \ +- \ +- h_size = c->dstW >> 4; \ +- res = (c->dstW & 15) >> 1; \ +- vshift = c->srcFormat != AV_PIX_FMT_YUV422P; \ +- for (y = 0; y < srcSliceH; y += 2) { \ +- dst_type av_unused *r, *g, *b; \ +- dst_type *image1 = (dst_type *)(dst[0] + (y + srcSliceY) * dstStride[0]);\ +- dst_type *image2 = (dst_type *)(image1 + dstStride[0]);\ +- const uint8_t *py_1 = src[0] + y * srcStride[0]; \ +- const uint8_t *py_2 = py_1 + srcStride[0]; \ +- const uint8_t *pu = src[1] + (y >> vshift) * srcStride[1]; \ +- const uint8_t *pv = src[2] + (y >> vshift) * srcStride[2]; \ +- for(x = 0; x < h_size; x++) { \ +- + #define YUV2RGBFUNC32(func_name, dst_type, alpha) \ + int func_name(SwsContext *c, const uint8_t *src[], \ + int srcStride[], int srcSliceY, int srcSliceH, \ +@@ -194,23 +141,6 @@ + const uint8_t *pv = src[2] + (y >> vshift) * srcStride[2]; \ + for(x = 0; x < h_size; x++) { \ + +-#define DEALYUV2RGBREMAIN \ +- py_1 += 16; \ +- py_2 += 16; \ +- pu += 8; \ +- pv += 8; \ +- image1 += 48; \ +- image2 += 48; \ +- } \ +- for (x = 0; x < res; x++) { \ +- int av_unused U, V, Y; \ +- U = pu[0]; \ +- V = pv[0]; \ +- r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM]; \ +- g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] \ +- + c->table_gV[V+YUVRGB_TABLE_HEADROOM]); \ +- b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM]; +- + #define DEALYUV2RGBREMAIN32 \ + py_1 += 16; \ + py_2 += 16; \ +@@ -228,40 +158,12 @@ + + c->table_gV[V+YUVRGB_TABLE_HEADROOM]); \ + b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM]; \ + +-#define PUTRGB24(dst, src) \ +- Y = src[0]; \ +- dst[0] = r[Y]; \ +- dst[1] = g[Y]; \ +- dst[2] = b[Y]; \ +- Y = src[1]; \ +- dst[3] = r[Y]; \ +- dst[4] = g[Y]; \ +- dst[5] = b[Y]; +- +-#define PUTBGR24(dst, src) \ +- Y = src[0]; \ +- dst[0] = b[Y]; \ +- dst[1] = g[Y]; \ +- dst[2] = r[Y]; \ +- Y = src[1]; \ +- dst[3] = b[Y]; \ +- dst[4] = g[Y]; \ +- dst[5] = r[Y]; +- + #define PUTRGB(dst, src) \ + Y = src[0]; \ + dst[0] = r[Y] + g[Y] + b[Y]; \ + Y = src[1]; \ + dst[1] = r[Y] + g[Y] + b[Y]; \ + +-#define ENDRES \ +- pu += 1; \ +- pv += 1; \ +- py_1 += 2; \ +- py_2 += 2; \ +- image1 += 6; \ +- image2 += 6; \ +- + #define ENDRES32 \ + pu += 1; \ + pv += 1; \ +@@ -276,42 +178,6 @@ + return srcSliceH; \ + } + +-YUV2RGBFUNC(yuv420_rgb24_msa, uint8_t, 0) +- LOAD_YUV_16 +- YUV2RGB(m_y1, m_y2, m_u, m_v, r1, g1, b1, r2, g2, b2); +- RGB_PACK(r1, g1, b1, rgb1_l, rgb1_h); +- RGB_PACK(r2, g2, b2, rgb2_l, rgb2_h); +- RGB_STORE(rgb1_l, rgb1_h, image1); +- RGB_STORE(rgb2_l, rgb2_h, image2); +- YUV2RGB(m_y1_l, m_y2_l, m_u_l, m_v_l, r1, g1, b1, r2, g2, b2); +- RGB_PACK(r1, g1, b1, rgb1_l, rgb1_h); +- RGB_PACK(r2, g2, b2, rgb2_l, rgb2_h); +- RGB_STORE(rgb1_l, rgb1_h, image1 + 24); +- RGB_STORE(rgb2_l, rgb2_h, image2 + 24); +- DEALYUV2RGBREMAIN +- PUTRGB24(image1, py_1); +- PUTRGB24(image2, py_2); +- ENDRES +- END_FUNC() +- +-YUV2RGBFUNC(yuv420_bgr24_msa, uint8_t, 0) +- LOAD_YUV_16 +- YUV2RGB(m_y1, m_y2, m_u, m_v, r1, g1, b1, r2, g2, b2); +- RGB_PACK(b1, g1, r1, rgb1_l, rgb1_h); +- RGB_PACK(b2, g2, r2, rgb2_l, rgb2_h); +- RGB_STORE(rgb1_l, rgb1_h, image1); +- RGB_STORE(rgb2_l, rgb2_h, image2); +- YUV2RGB(m_y1_l, m_y2_l, m_u_l, m_v_l, r1, g1, b1, r2, g2, b2); +- RGB_PACK(b1, g1, r1, rgb1_l, rgb1_h); +- RGB_PACK(b2, g2, r2, rgb2_l, rgb2_h); +- RGB_STORE(rgb1_l, rgb1_h, image1 + 24); +- RGB_STORE(rgb2_l, rgb2_h, image2 + 24); +- DEALYUV2RGBREMAIN +- PUTBGR24(image1, py_1); +- PUTBGR24(image2, py_2); +- ENDRES +- END_FUNC() +- + YUV2RGBFUNC32(yuv420_rgba32_msa, uint32_t, 0) + LOAD_YUV_16 + YUV2RGB(m_y1, m_y2, m_u, m_v, r1, g1, b1, r2, g2, b2); +-- +2.20.1 + diff --git a/package/ffmpeg/0019-swscale-LA-Add-yuv2rgb_X_template_lsx.patch b/package/ffmpeg/0019-swscale-LA-Add-yuv2rgb_X_template_lsx.patch new file mode 100644 index 00000000..6c6304df --- /dev/null +++ b/package/ffmpeg/0019-swscale-LA-Add-yuv2rgb_X_template_lsx.patch @@ -0,0 +1,654 @@ +From e1310e44ee7091de9fda143d4cd861b0c6340fe2 Mon Sep 17 00:00:00 2001 +From: wanglu +Date: Thu, 30 Mar 2023 16:28:21 +0800 +Subject: [PATCH 09/10] swscale: [LA] Add yuv2rgb_X_template_lsx. + +Change-Id: I71e6e56f43e5f3837cebe056c12081ea627508a2 +Signed-off-by: wanglu +--- + libswscale/loongarch/Makefile | 3 +- + libswscale/loongarch/output_lasx.c | 4 - + libswscale/loongarch/output_lsx.c | 578 ++++++++++++++++++ + libswscale/loongarch/swscale_init_loongarch.c | 1 + + libswscale/loongarch/swscale_loongarch.h | 2 + + 5 files changed, 583 insertions(+), 5 deletions(-) + create mode 100644 libswscale/loongarch/output_lsx.c + +diff --git a/libswscale/loongarch/Makefile b/libswscale/loongarch/Makefile +index f52e526514..8bb9254ca0 100644 +--- a/libswscale/loongarch/Makefile ++++ b/libswscale/loongarch/Makefile +@@ -8,4 +8,5 @@ LSX-OBJS-$(CONFIG_SWSCALE) += loongarch/swscale.o \ + loongarch/swscale_lsx.o \ + loongarch/input.o \ + loongarch/output.o \ +- loongarch/yuv2rgb_lsx.o ++ loongarch/yuv2rgb_lsx.o \ ++ loongarch/output_lsx.o +diff --git a/libswscale/loongarch/output_lasx.c b/libswscale/loongarch/output_lasx.c +index 4d4bba60c1..28ab970b1a 100644 +--- a/libswscale/loongarch/output_lasx.c ++++ b/libswscale/loongarch/output_lasx.c +@@ -550,10 +550,6 @@ yuv2rgb_2_template_lasx(SwsContext *c, const int16_t *buf[2], + DUP2_ARG2(__lasx_xvldx, ubuf1, c_dex, vbuf1, c_dex, u1, v1); + DUP2_ARG2(__lasx_xvsllwil_w_h, y0, 0, y1, 0, y0_l, y1_l); + DUP2_ARG1(__lasx_xvexth_w_h, y0, y1, y0_h, y1_h); +- //DUP2_ARG1(__lasx_vext2xv_w_h, y0, y1, y0_l, y1_l); +- //y0 = __lasx_xvpermi_d(y0, 0x4E); +- //y1 = __lasx_xvpermi_d(y1, 0x4E); +- //DUP2_ARG1(__lasx_vext2xv_w_h, y0, y1, y0_h, y1_h); + DUP4_ARG1(__lasx_vext2xv_w_h, u0, u1, v0, v1, u0, u1, v0, v1); + y0_l = __lasx_xvmul_w(y0_l, v_yalpha1); + y0_h = __lasx_xvmul_w(y0_h, v_yalpha1); +diff --git a/libswscale/loongarch/output_lsx.c b/libswscale/loongarch/output_lsx.c +new file mode 100644 +index 0000000000..5da9325c97 +--- /dev/null ++++ b/libswscale/loongarch/output_lsx.c +@@ -0,0 +1,578 @@ ++/* ++ * Copyright (C) 2023 Loongson Technology Corporation Limited ++ * Contributed by Lu Wang ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "swscale_loongarch.h" ++#include "libavutil/loongarch/loongson_intrinsics.h" ++ ++ ++/*Copy from libswscale/output.c*/ ++static av_always_inline void ++yuv2rgb_write(uint8_t *_dest, int i, int Y1, int Y2, ++ unsigned A1, unsigned A2, ++ const void *_r, const void *_g, const void *_b, int y, ++ enum AVPixelFormat target, int hasAlpha) ++{ ++ if (target == AV_PIX_FMT_ARGB || target == AV_PIX_FMT_RGBA || ++ target == AV_PIX_FMT_ABGR || target == AV_PIX_FMT_BGRA) { ++ uint32_t *dest = (uint32_t *) _dest; ++ const uint32_t *r = (const uint32_t *) _r; ++ const uint32_t *g = (const uint32_t *) _g; ++ const uint32_t *b = (const uint32_t *) _b; ++ ++#if CONFIG_SMALL ++ dest[i * 2 + 0] = r[Y1] + g[Y1] + b[Y1]; ++ dest[i * 2 + 1] = r[Y2] + g[Y2] + b[Y2]; ++#else ++#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1 ++ int sh = (target == AV_PIX_FMT_RGB32_1 || ++ target == AV_PIX_FMT_BGR32_1) ? 0 : 24; ++ av_assert2((((r[Y1] + g[Y1] + b[Y1]) >> sh) & 0xFF) == 0xFF); ++#endif ++ dest[i * 2 + 0] = r[Y1] + g[Y1] + b[Y1]; ++ dest[i * 2 + 1] = r[Y2] + g[Y2] + b[Y2]; ++#endif ++ } else if (target == AV_PIX_FMT_RGB24 || target == AV_PIX_FMT_BGR24) { ++ uint8_t *dest = (uint8_t *) _dest; ++ const uint8_t *r = (const uint8_t *) _r; ++ const uint8_t *g = (const uint8_t *) _g; ++ const uint8_t *b = (const uint8_t *) _b; ++ ++#define r_b ((target == AV_PIX_FMT_RGB24) ? r : b) ++#define b_r ((target == AV_PIX_FMT_RGB24) ? b : r) ++ ++ dest[i * 6 + 0] = r_b[Y1]; ++ dest[i * 6 + 1] = g[Y1]; ++ dest[i * 6 + 2] = b_r[Y1]; ++ dest[i * 6 + 3] = r_b[Y2]; ++ dest[i * 6 + 4] = g[Y2]; ++ dest[i * 6 + 5] = b_r[Y2]; ++#undef r_b ++#undef b_r ++ } else if (target == AV_PIX_FMT_RGB565 || target == AV_PIX_FMT_BGR565 || ++ target == AV_PIX_FMT_RGB555 || target == AV_PIX_FMT_BGR555 || ++ target == AV_PIX_FMT_RGB444 || target == AV_PIX_FMT_BGR444) { ++ uint16_t *dest = (uint16_t *) _dest; ++ const uint16_t *r = (const uint16_t *) _r; ++ const uint16_t *g = (const uint16_t *) _g; ++ const uint16_t *b = (const uint16_t *) _b; ++ int dr1, dg1, db1, dr2, dg2, db2; ++ ++ if (target == AV_PIX_FMT_RGB565 || target == AV_PIX_FMT_BGR565) { ++ dr1 = ff_dither_2x2_8[ y & 1 ][0]; ++ dg1 = ff_dither_2x2_4[ y & 1 ][0]; ++ db1 = ff_dither_2x2_8[(y & 1) ^ 1][0]; ++ dr2 = ff_dither_2x2_8[ y & 1 ][1]; ++ dg2 = ff_dither_2x2_4[ y & 1 ][1]; ++ db2 = ff_dither_2x2_8[(y & 1) ^ 1][1]; ++ } else if (target == AV_PIX_FMT_RGB555 || target == AV_PIX_FMT_BGR555) { ++ dr1 = ff_dither_2x2_8[ y & 1 ][0]; ++ dg1 = ff_dither_2x2_8[ y & 1 ][1]; ++ db1 = ff_dither_2x2_8[(y & 1) ^ 1][0]; ++ dr2 = ff_dither_2x2_8[ y & 1 ][1]; ++ dg2 = ff_dither_2x2_8[ y & 1 ][0]; ++ db2 = ff_dither_2x2_8[(y & 1) ^ 1][1]; ++ } else { ++ dr1 = ff_dither_4x4_16[ y & 3 ][0]; ++ dg1 = ff_dither_4x4_16[ y & 3 ][1]; ++ db1 = ff_dither_4x4_16[(y & 3) ^ 3][0]; ++ dr2 = ff_dither_4x4_16[ y & 3 ][1]; ++ dg2 = ff_dither_4x4_16[ y & 3 ][0]; ++ db2 = ff_dither_4x4_16[(y & 3) ^ 3][1]; ++ } ++ ++ dest[i * 2 + 0] = r[Y1 + dr1] + g[Y1 + dg1] + b[Y1 + db1]; ++ dest[i * 2 + 1] = r[Y2 + dr2] + g[Y2 + dg2] + b[Y2 + db2]; ++ } else { /* 8/4 bits */ ++ uint8_t *dest = (uint8_t *) _dest; ++ const uint8_t *r = (const uint8_t *) _r; ++ const uint8_t *g = (const uint8_t *) _g; ++ const uint8_t *b = (const uint8_t *) _b; ++ int dr1, dg1, db1, dr2, dg2, db2; ++ ++ if (target == AV_PIX_FMT_RGB8 || target == AV_PIX_FMT_BGR8) { ++ const uint8_t * const d64 = ff_dither_8x8_73[y & 7]; ++ const uint8_t * const d32 = ff_dither_8x8_32[y & 7]; ++ dr1 = dg1 = d32[(i * 2 + 0) & 7]; ++ db1 = d64[(i * 2 + 0) & 7]; ++ dr2 = dg2 = d32[(i * 2 + 1) & 7]; ++ db2 = d64[(i * 2 + 1) & 7]; ++ } else { ++ const uint8_t * const d64 = ff_dither_8x8_73 [y & 7]; ++ const uint8_t * const d128 = ff_dither_8x8_220[y & 7]; ++ dr1 = db1 = d128[(i * 2 + 0) & 7]; ++ dg1 = d64[(i * 2 + 0) & 7]; ++ dr2 = db2 = d128[(i * 2 + 1) & 7]; ++ dg2 = d64[(i * 2 + 1) & 7]; ++ } ++ ++ if (target == AV_PIX_FMT_RGB4 || target == AV_PIX_FMT_BGR4) { ++ dest[i] = r[Y1 + dr1] + g[Y1 + dg1] + b[Y1 + db1] + ++ ((r[Y2 + dr2] + g[Y2 + dg2] + b[Y2 + db2]) << 4); ++ } else { ++ dest[i * 2 + 0] = r[Y1 + dr1] + g[Y1 + dg1] + b[Y1 + db1]; ++ dest[i * 2 + 1] = r[Y2 + dr2] + g[Y2 + dg2] + b[Y2 + db2]; ++ } ++ } ++} ++ ++#define WRITE_YUV2RGB_LSX(vec_y1, vec_y2, vec_u, vec_v, t1, t2, t3, t4) \ ++{ \ ++ Y1 = __lsx_vpickve2gr_w(vec_y1, t1); \ ++ Y2 = __lsx_vpickve2gr_w(vec_y2, t2); \ ++ U = __lsx_vpickve2gr_w(vec_u, t3); \ ++ V = __lsx_vpickve2gr_w(vec_v, t4); \ ++ r = c->table_rV[V]; \ ++ g = (c->table_gU[U] + c->table_gV[V]); \ ++ b = c->table_bU[U]; \ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, \ ++ r, g, b, y, target, 0); \ ++ count++; \ ++} ++ ++static void ++yuv2rgb_X_template_lsx(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, int dstW, ++ int y, enum AVPixelFormat target, int hasAlpha) ++{ ++ int i, j; ++ int count = 0; ++ int t = 1 << 18; ++ int len = dstW >> 5; ++ int res = dstW & 31; ++ int len_count = (dstW + 1) >> 1; ++ const void *r, *g, *b; ++ int head = YUVRGB_TABLE_HEADROOM; ++ __m128i headroom = __lsx_vreplgr2vr_w(head); ++ ++ for (i = 0; i < len; i++) { ++ int Y1, Y2, U, V, count_lum = count << 1; ++ __m128i l_src1, l_src2, l_src3, l_src4, u_src1, u_src2, v_src1, v_src2; ++ __m128i yl_ev, yl_ev1, yl_ev2, yl_od1, yl_od2, yh_ev1, yh_ev2, yh_od1, yh_od2; ++ __m128i u_ev1, u_ev2, u_od1, u_od2, v_ev1, v_ev2, v_od1, v_od2, temp; ++ ++ yl_ev = __lsx_vldrepl_w(&t, 0); ++ yl_ev1 = yl_ev; ++ yl_od1 = yl_ev; ++ yh_ev1 = yl_ev; ++ yh_od1 = yl_ev; ++ u_ev1 = yl_ev; ++ v_ev1 = yl_ev; ++ u_od1 = yl_ev; ++ v_od1 = yl_ev; ++ yl_ev2 = yl_ev; ++ yl_od2 = yl_ev; ++ yh_ev2 = yl_ev; ++ yh_od2 = yl_ev; ++ u_ev2 = yl_ev; ++ v_ev2 = yl_ev; ++ u_od2 = yl_ev; ++ v_od2 = yl_ev; ++ ++ for (j = 0; j < lumFilterSize; j++) { ++ temp = __lsx_vldrepl_h((lumFilter + j), 0); ++ DUP2_ARG2(__lsx_vld, lumSrc[j] + count_lum, 0, lumSrc[j] + count_lum, ++ 16, l_src1, l_src2); ++ DUP2_ARG2(__lsx_vld, lumSrc[j] + count_lum, 32, lumSrc[j] + count_lum, ++ 48, l_src3, l_src4); ++ yl_ev1 = __lsx_vmaddwev_w_h(yl_ev1, temp, l_src1); ++ yl_od1 = __lsx_vmaddwod_w_h(yl_od1, temp, l_src1); ++ yh_ev1 = __lsx_vmaddwev_w_h(yh_ev1, temp, l_src3); ++ yh_od1 = __lsx_vmaddwod_w_h(yh_od1, temp, l_src3); ++ yl_ev2 = __lsx_vmaddwev_w_h(yl_ev2, temp, l_src2); ++ yl_od2 = __lsx_vmaddwod_w_h(yl_od2, temp, l_src2); ++ yh_ev2 = __lsx_vmaddwev_w_h(yh_ev2, temp, l_src4); ++ yh_od2 = __lsx_vmaddwod_w_h(yh_od2, temp, l_src4); ++ } ++ for (j = 0; j < chrFilterSize; j++) { ++ DUP2_ARG2(__lsx_vld, chrUSrc[j] + count, 0, chrVSrc[j] + count, 0, ++ u_src1, v_src1); ++ DUP2_ARG2(__lsx_vld, chrUSrc[j] + count, 16, chrVSrc[j] + count, 16, ++ u_src2, v_src2); ++ temp = __lsx_vldrepl_h((chrFilter + j), 0); ++ u_ev1 = __lsx_vmaddwev_w_h(u_ev1, temp, u_src1); ++ u_od1 = __lsx_vmaddwod_w_h(u_od1, temp, u_src1); ++ v_ev1 = __lsx_vmaddwev_w_h(v_ev1, temp, v_src1); ++ v_od1 = __lsx_vmaddwod_w_h(v_od1, temp, v_src1); ++ u_ev2 = __lsx_vmaddwev_w_h(u_ev2, temp, u_src2); ++ u_od2 = __lsx_vmaddwod_w_h(u_od2, temp, u_src2); ++ v_ev2 = __lsx_vmaddwev_w_h(v_ev2, temp, v_src2); ++ v_od2 = __lsx_vmaddwod_w_h(v_od2, temp, v_src2); ++ } ++ yl_ev1 = __lsx_vsrai_w(yl_ev1, 19); ++ yh_ev1 = __lsx_vsrai_w(yh_ev1, 19); ++ yl_od1 = __lsx_vsrai_w(yl_od1, 19); ++ yh_od1 = __lsx_vsrai_w(yh_od1, 19); ++ u_ev1 = __lsx_vsrai_w(u_ev1, 19); ++ v_ev1 = __lsx_vsrai_w(v_ev1, 19); ++ u_od1 = __lsx_vsrai_w(u_od1, 19); ++ v_od1 = __lsx_vsrai_w(v_od1, 19); ++ yl_ev2 = __lsx_vsrai_w(yl_ev2, 19); ++ yh_ev2 = __lsx_vsrai_w(yh_ev2, 19); ++ yl_od2 = __lsx_vsrai_w(yl_od2, 19); ++ yh_od2 = __lsx_vsrai_w(yh_od2, 19); ++ u_ev2 = __lsx_vsrai_w(u_ev2, 19); ++ v_ev2 = __lsx_vsrai_w(v_ev2, 19); ++ u_od2 = __lsx_vsrai_w(u_od2, 19); ++ v_od2 = __lsx_vsrai_w(v_od2, 19); ++ u_ev1 = __lsx_vadd_w(u_ev1, headroom); ++ v_ev1 = __lsx_vadd_w(v_ev1, headroom); ++ u_od1 = __lsx_vadd_w(u_od1, headroom); ++ v_od1 = __lsx_vadd_w(v_od1, headroom); ++ u_ev2 = __lsx_vadd_w(u_ev2, headroom); ++ v_ev2 = __lsx_vadd_w(v_ev2, headroom); ++ u_od2 = __lsx_vadd_w(u_od2, headroom); ++ v_od2 = __lsx_vadd_w(v_od2, headroom); ++ ++ WRITE_YUV2RGB_LSX(yl_ev1, yl_od1, u_ev1, v_ev1, 0, 0, 0, 0); ++ WRITE_YUV2RGB_LSX(yl_ev1, yl_od1, u_od1, v_od1, 1, 1, 0, 0); ++ WRITE_YUV2RGB_LSX(yl_ev1, yl_od1, u_ev1, v_ev1, 2, 2, 1, 1); ++ WRITE_YUV2RGB_LSX(yl_ev1, yl_od1, u_od1, v_od1, 3, 3, 1, 1); ++ WRITE_YUV2RGB_LSX(yl_ev2, yl_od2, u_ev1, v_ev1, 0, 0, 2, 2); ++ WRITE_YUV2RGB_LSX(yl_ev2, yl_od2, u_od1, v_od1, 1, 1, 2, 2); ++ WRITE_YUV2RGB_LSX(yl_ev2, yl_od2, u_ev1, v_ev1, 2, 2, 3, 3); ++ WRITE_YUV2RGB_LSX(yl_ev2, yl_od2, u_od1, v_od1, 3, 3, 3, 3); ++ WRITE_YUV2RGB_LSX(yh_ev1, yh_od1, u_ev2, v_ev2, 0, 0, 0, 0); ++ WRITE_YUV2RGB_LSX(yh_ev1, yh_od1, u_od2, v_od2, 1, 1, 0, 0); ++ WRITE_YUV2RGB_LSX(yh_ev1, yh_od1, u_ev2, v_ev2, 2, 2, 1, 1); ++ WRITE_YUV2RGB_LSX(yh_ev1, yh_od1, u_od2, v_od2, 3, 3, 1, 1); ++ WRITE_YUV2RGB_LSX(yh_ev2, yh_od2, u_ev2, v_ev2, 0, 0, 2, 2); ++ WRITE_YUV2RGB_LSX(yh_ev2, yh_od2, u_od2, v_od2, 1, 1, 2, 2); ++ WRITE_YUV2RGB_LSX(yh_ev2, yh_od2, u_ev2, v_ev2, 2, 2, 3, 3); ++ WRITE_YUV2RGB_LSX(yh_ev2, yh_od2, u_od2, v_od2, 3, 3, 3, 3); ++ } ++ ++ if (res >= 16) { ++ int Y1, Y2, U, V, count_lum = count << 1; ++ __m128i l_src1, l_src2, u_src1, v_src1; ++ __m128i yl_ev, yl_ev1, yl_ev2, yl_od1, yl_od2; ++ __m128i u_ev1, u_od1, v_ev1, v_od1, temp; ++ ++ yl_ev = __lsx_vldrepl_w(&t, 0); ++ yl_ev1 = yl_ev; ++ yl_od1 = yl_ev; ++ u_ev1 = yl_ev; ++ v_ev1 = yl_ev; ++ u_od1 = yl_ev; ++ v_od1 = yl_ev; ++ yl_ev2 = yl_ev; ++ yl_od2 = yl_ev; ++ ++ for (j = 0; j < lumFilterSize; j++) { ++ temp = __lsx_vldrepl_h((lumFilter + j), 0); ++ DUP2_ARG2(__lsx_vld, lumSrc[j] + count_lum, 0, lumSrc[j] + count_lum, ++ 16, l_src1, l_src2); ++ yl_ev1 = __lsx_vmaddwev_w_h(yl_ev1, temp, l_src1); ++ yl_od1 = __lsx_vmaddwod_w_h(yl_od1, temp, l_src1); ++ yl_ev2 = __lsx_vmaddwev_w_h(yl_ev2, temp, l_src2); ++ yl_od2 = __lsx_vmaddwod_w_h(yl_od2, temp, l_src2); ++ } ++ for (j = 0; j < chrFilterSize; j++) { ++ DUP2_ARG2(__lsx_vld, chrUSrc[j] + count, 0, chrVSrc[j] + count, 0, ++ u_src1, v_src1); ++ temp = __lsx_vldrepl_h((chrFilter + j), 0); ++ u_ev1 = __lsx_vmaddwev_w_h(u_ev1, temp, u_src1); ++ u_od1 = __lsx_vmaddwod_w_h(u_od1, temp, u_src1); ++ v_ev1 = __lsx_vmaddwev_w_h(v_ev1, temp, v_src1); ++ v_od1 = __lsx_vmaddwod_w_h(v_od1, temp, v_src1); ++ } ++ yl_ev1 = __lsx_vsrai_w(yl_ev1, 19); ++ yl_od1 = __lsx_vsrai_w(yl_od1, 19); ++ u_ev1 = __lsx_vsrai_w(u_ev1, 19); ++ v_ev1 = __lsx_vsrai_w(v_ev1, 19); ++ u_od1 = __lsx_vsrai_w(u_od1, 19); ++ v_od1 = __lsx_vsrai_w(v_od1, 19); ++ yl_ev2 = __lsx_vsrai_w(yl_ev2, 19); ++ yl_od2 = __lsx_vsrai_w(yl_od2, 19); ++ u_ev1 = __lsx_vadd_w(u_ev1, headroom); ++ v_ev1 = __lsx_vadd_w(v_ev1, headroom); ++ u_od1 = __lsx_vadd_w(u_od1, headroom); ++ v_od1 = __lsx_vadd_w(v_od1, headroom); ++ ++ WRITE_YUV2RGB_LSX(yl_ev1, yl_od1, u_ev1, v_ev1, 0, 0, 0, 0); ++ WRITE_YUV2RGB_LSX(yl_ev1, yl_od1, u_od1, v_od1, 1, 1, 0, 0); ++ WRITE_YUV2RGB_LSX(yl_ev1, yl_od1, u_ev1, v_ev1, 2, 2, 1, 1); ++ WRITE_YUV2RGB_LSX(yl_ev1, yl_od1, u_od1, v_od1, 3, 3, 1, 1); ++ WRITE_YUV2RGB_LSX(yl_ev2, yl_od2, u_ev1, v_ev1, 0, 0, 2, 2); ++ WRITE_YUV2RGB_LSX(yl_ev2, yl_od2, u_od1, v_od1, 1, 1, 2, 2); ++ WRITE_YUV2RGB_LSX(yl_ev2, yl_od2, u_ev1, v_ev1, 2, 2, 3, 3); ++ WRITE_YUV2RGB_LSX(yl_ev2, yl_od2, u_od1, v_od1, 3, 3, 3, 3); ++ res -= 16; ++ } ++ ++ if (res >= 8) { ++ int Y1, Y2, U, V, count_lum = count << 1; ++ __m128i l_src1, u_src, v_src; ++ __m128i yl_ev, yl_od; ++ __m128i u_ev, u_od, v_ev, v_od, temp; ++ ++ yl_ev = __lsx_vldrepl_w(&t, 0); ++ yl_od = yl_ev; ++ u_ev = yl_ev; ++ v_ev = yl_ev; ++ u_od = yl_ev; ++ v_od = yl_ev; ++ for (j = 0; j < lumFilterSize; j++) { ++ temp = __lsx_vldrepl_h((lumFilter + j), 0); ++ l_src1 = __lsx_vld(lumSrc[j] + count_lum, 0); ++ yl_ev = __lsx_vmaddwev_w_h(yl_ev, temp, l_src1); ++ yl_od = __lsx_vmaddwod_w_h(yl_od, temp, l_src1); ++ } ++ for (j = 0; j < chrFilterSize; j++) { ++ DUP2_ARG2(__lsx_vld, chrUSrc[j] + count, 0, chrVSrc[j] + count, 0, ++ u_src, v_src); ++ temp = __lsx_vldrepl_h((chrFilter + j), 0); ++ u_ev = __lsx_vmaddwev_w_h(u_ev, temp, u_src); ++ u_od = __lsx_vmaddwod_w_h(u_od, temp, u_src); ++ v_ev = __lsx_vmaddwev_w_h(v_ev, temp, v_src); ++ v_od = __lsx_vmaddwod_w_h(v_od, temp, v_src); ++ } ++ yl_ev = __lsx_vsrai_w(yl_ev, 19); ++ yl_od = __lsx_vsrai_w(yl_od, 19); ++ u_ev = __lsx_vsrai_w(u_ev, 19); ++ v_ev = __lsx_vsrai_w(v_ev, 19); ++ u_od = __lsx_vsrai_w(u_od, 19); ++ v_od = __lsx_vsrai_w(v_od, 19); ++ u_ev = __lsx_vadd_w(u_ev, headroom); ++ v_ev = __lsx_vadd_w(v_ev, headroom); ++ u_od = __lsx_vadd_w(u_od, headroom); ++ v_od = __lsx_vadd_w(v_od, headroom); ++ WRITE_YUV2RGB_LSX(yl_ev, yl_od, u_ev, v_ev, 0, 0, 0, 0); ++ WRITE_YUV2RGB_LSX(yl_ev, yl_od, u_od, v_od, 1, 1, 0, 0); ++ WRITE_YUV2RGB_LSX(yl_ev, yl_od, u_ev, v_ev, 2, 2, 1, 1); ++ WRITE_YUV2RGB_LSX(yl_ev, yl_od, u_od, v_od, 3, 3, 1, 1); ++ res -= 8; ++ } ++ ++ if (res >= 4) { ++ int Y1, Y2, U, V, count_lum = count << 1; ++ __m128i l_src1, u_src, v_src; ++ __m128i yl_ev, yl_od; ++ __m128i u_ev, u_od, v_ev, v_od, temp; ++ ++ yl_ev = __lsx_vldrepl_w(&t, 0); ++ yl_od = yl_ev; ++ u_ev = yl_ev; ++ v_ev = yl_ev; ++ u_od = yl_ev; ++ v_od = yl_ev; ++ for (j = 0; j < lumFilterSize; j++) { ++ temp = __lsx_vldrepl_h((lumFilter + j), 0); ++ l_src1 = __lsx_vld(lumSrc[j] + count_lum, 0); ++ yl_ev = __lsx_vmaddwev_w_h(yl_ev, temp, l_src1); ++ yl_od = __lsx_vmaddwod_w_h(yl_od, temp, l_src1); ++ } ++ for (j = 0; j < chrFilterSize; j++) { ++ DUP2_ARG2(__lsx_vld, chrUSrc[j] + count, 0, chrVSrc[j] + count, 0, ++ u_src, v_src); ++ temp = __lsx_vldrepl_h((chrFilter + j), 0); ++ u_ev = __lsx_vmaddwev_w_h(u_ev, temp, u_src); ++ u_od = __lsx_vmaddwod_w_h(u_od, temp, u_src); ++ v_ev = __lsx_vmaddwev_w_h(v_ev, temp, v_src); ++ v_od = __lsx_vmaddwod_w_h(v_od, temp, v_src); ++ } ++ yl_ev = __lsx_vsrai_w(yl_ev, 19); ++ yl_od = __lsx_vsrai_w(yl_od, 19); ++ u_ev = __lsx_vsrai_w(u_ev, 19); ++ v_ev = __lsx_vsrai_w(v_ev, 19); ++ u_od = __lsx_vsrai_w(u_od, 19); ++ v_od = __lsx_vsrai_w(v_od, 19); ++ u_ev = __lsx_vadd_w(u_ev, headroom); ++ v_ev = __lsx_vadd_w(v_ev, headroom); ++ u_od = __lsx_vadd_w(u_od, headroom); ++ v_od = __lsx_vadd_w(v_od, headroom); ++ WRITE_YUV2RGB_LSX(yl_ev, yl_od, u_ev, v_ev, 0, 0, 0, 0); ++ WRITE_YUV2RGB_LSX(yl_ev, yl_od, u_od, v_od, 1, 1, 0, 0); ++ res -= 4; ++ } ++ ++ if (res >= 2) { ++ int Y1, Y2, U, V, count_lum = count << 1; ++ __m128i l_src1, u_src, v_src; ++ __m128i yl_ev, yl_od; ++ __m128i u_ev, u_od, v_ev, v_od, temp; ++ ++ yl_ev = __lsx_vldrepl_w(&t, 0); ++ yl_od = yl_ev; ++ u_ev = yl_ev; ++ v_ev = yl_ev; ++ u_od = yl_ev; ++ v_od = yl_ev; ++ for (j = 0; j < lumFilterSize; j++) { ++ temp = __lsx_vldrepl_h((lumFilter + j), 0); ++ l_src1 = __lsx_vld(lumSrc[j] + count_lum, 0); ++ yl_ev = __lsx_vmaddwev_w_h(yl_ev, temp, l_src1); ++ yl_od = __lsx_vmaddwod_w_h(yl_od, temp, l_src1); ++ } ++ for (j = 0; j < chrFilterSize; j++) { ++ DUP2_ARG2(__lsx_vld, chrUSrc[j] + count, 0, chrVSrc[j] + count, 0, ++ u_src, v_src); ++ temp = __lsx_vldrepl_h((chrFilter + j), 0); ++ u_ev = __lsx_vmaddwev_w_h(u_ev, temp, u_src); ++ u_od = __lsx_vmaddwod_w_h(u_od, temp, u_src); ++ v_ev = __lsx_vmaddwev_w_h(v_ev, temp, v_src); ++ v_od = __lsx_vmaddwod_w_h(v_od, temp, v_src); ++ } ++ yl_ev = __lsx_vsrai_w(yl_ev, 19); ++ yl_od = __lsx_vsrai_w(yl_od, 19); ++ u_ev = __lsx_vsrai_w(u_ev, 19); ++ v_ev = __lsx_vsrai_w(v_ev, 19); ++ u_od = __lsx_vsrai_w(u_od, 19); ++ v_od = __lsx_vsrai_w(v_od, 19); ++ u_ev = __lsx_vadd_w(u_ev, headroom); ++ v_ev = __lsx_vadd_w(v_ev, headroom); ++ u_od = __lsx_vadd_w(u_od, headroom); ++ v_od = __lsx_vadd_w(v_od, headroom); ++ WRITE_YUV2RGB_LSX(yl_ev, yl_od, u_ev, v_ev, 0, 0, 0, 0); ++ res -= 2; ++ } ++ ++ for (; count < len_count; count++) { ++ int Y1 = 1 << 18; ++ int Y2 = Y1; ++ int U = Y1; ++ int V = Y1; ++ ++ for (j = 0; j < lumFilterSize; j++) { ++ Y1 += lumSrc[j][count * 2] * lumFilter[j]; ++ Y2 += lumSrc[j][count * 2 + 1] * lumFilter[j]; ++ } ++ for (j = 0; j < chrFilterSize; j++) { ++ U += chrUSrc[j][count] * chrFilter[j]; ++ V += chrVSrc[j][count] * chrFilter[j]; ++ } ++ Y1 >>= 19; ++ Y2 >>= 19; ++ U >>= 19; ++ V >>= 19; ++ r = c->table_rV[V + YUVRGB_TABLE_HEADROOM]; ++ g = (c->table_gU[U + YUVRGB_TABLE_HEADROOM] + ++ c->table_gV[V + YUVRGB_TABLE_HEADROOM]); ++ b = c->table_bU[U + YUVRGB_TABLE_HEADROOM]; ++ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, ++ r, g, b, y, target, 0); ++ } ++} ++ ++#define YUV2RGBWRAPPERX(name, base, ext, fmt, hasAlpha) \ ++static void name ## ext ## _X_lsx(SwsContext *c, const int16_t *lumFilter, \ ++ const int16_t **lumSrc, int lumFilterSize, \ ++ const int16_t *chrFilter, const int16_t **chrUSrc, \ ++ const int16_t **chrVSrc, int chrFilterSize, \ ++ const int16_t **alpSrc, uint8_t *dest, int dstW, \ ++ int y) \ ++{ \ ++ name ## base ## _X_template_lsx(c, lumFilter, lumSrc, lumFilterSize, \ ++ chrFilter, chrUSrc, chrVSrc, chrFilterSize, \ ++ alpSrc, dest, dstW, y, fmt, hasAlpha); \ ++} ++ ++ ++#if CONFIG_SMALL ++#else ++#if CONFIG_SWSCALE_ALPHA ++#endif ++YUV2RGBWRAPPERX(yuv2rgb,, x32_1, AV_PIX_FMT_RGB32_1, 0) ++YUV2RGBWRAPPERX(yuv2rgb,, x32, AV_PIX_FMT_RGB32, 0) ++#endif ++YUV2RGBWRAPPERX(yuv2, rgb, rgb24, AV_PIX_FMT_RGB24, 0) ++YUV2RGBWRAPPERX(yuv2, rgb, bgr24, AV_PIX_FMT_BGR24, 0) ++YUV2RGBWRAPPERX(yuv2rgb,, 16, AV_PIX_FMT_RGB565, 0) ++YUV2RGBWRAPPERX(yuv2rgb,, 15, AV_PIX_FMT_RGB555, 0) ++YUV2RGBWRAPPERX(yuv2rgb,, 12, AV_PIX_FMT_RGB444, 0) ++YUV2RGBWRAPPERX(yuv2rgb,, 8, AV_PIX_FMT_RGB8, 0) ++YUV2RGBWRAPPERX(yuv2rgb,, 4, AV_PIX_FMT_RGB4, 0) ++YUV2RGBWRAPPERX(yuv2rgb,, 4b, AV_PIX_FMT_RGB4_BYTE, 0) ++ ++av_cold void ff_sws_init_output_lsx(SwsContext *c) ++{ ++ ++ if(c->flags & SWS_FULL_CHR_H_INT) { ++ } else { ++ switch (c->dstFormat) { ++ case AV_PIX_FMT_RGB32: ++ case AV_PIX_FMT_BGR32: ++#if CONFIG_SMALL ++#else ++#if CONFIG_SWSCALE_ALPHA ++ if (c->needAlpha) { ++ } else ++#endif /* CONFIG_SWSCALE_ALPHA */ ++ { ++ c->yuv2packedX = yuv2rgbx32_X_lsx; ++ } ++#endif /* !CONFIG_SMALL */ ++ break; ++ case AV_PIX_FMT_RGB32_1: ++ case AV_PIX_FMT_BGR32_1: ++#if CONFIG_SMALL ++#else ++#if CONFIG_SWSCALE_ALPHA ++ if (c->needAlpha) { ++ } else ++#endif /* CONFIG_SWSCALE_ALPHA */ ++ { ++ c->yuv2packedX = yuv2rgbx32_1_X_lsx; ++ } ++#endif /* !CONFIG_SMALL */ ++ break; ++ case AV_PIX_FMT_RGB24: ++ c->yuv2packedX = yuv2rgb24_X_lsx; ++ break; ++ case AV_PIX_FMT_BGR24: ++ c->yuv2packedX = yuv2bgr24_X_lsx; ++ break; ++ case AV_PIX_FMT_RGB565LE: ++ case AV_PIX_FMT_RGB565BE: ++ case AV_PIX_FMT_BGR565LE: ++ case AV_PIX_FMT_BGR565BE: ++ c->yuv2packedX = yuv2rgb16_X_lsx; ++ break; ++ case AV_PIX_FMT_RGB555LE: ++ case AV_PIX_FMT_RGB555BE: ++ case AV_PIX_FMT_BGR555LE: ++ case AV_PIX_FMT_BGR555BE: ++ c->yuv2packedX = yuv2rgb15_X_lsx; ++ break; ++ case AV_PIX_FMT_RGB444LE: ++ case AV_PIX_FMT_RGB444BE: ++ case AV_PIX_FMT_BGR444LE: ++ case AV_PIX_FMT_BGR444BE: ++ c->yuv2packedX = yuv2rgb12_X_lsx; ++ break; ++ case AV_PIX_FMT_RGB8: ++ case AV_PIX_FMT_BGR8: ++ c->yuv2packedX = yuv2rgb8_X_lsx; ++ break; ++ case AV_PIX_FMT_RGB4: ++ case AV_PIX_FMT_BGR4: ++ c->yuv2packedX = yuv2rgb4_X_lsx; ++ break; ++ case AV_PIX_FMT_RGB4_BYTE: ++ case AV_PIX_FMT_BGR4_BYTE: ++ c->yuv2packedX = yuv2rgb4b_X_lsx; ++ break; ++ } ++ } ++} +diff --git a/libswscale/loongarch/swscale_init_loongarch.c b/libswscale/loongarch/swscale_init_loongarch.c +index a3d056812d..e08f68f7ba 100644 +--- a/libswscale/loongarch/swscale_init_loongarch.c ++++ b/libswscale/loongarch/swscale_init_loongarch.c +@@ -28,6 +28,7 @@ av_cold void ff_sws_init_swscale_loongarch(SwsContext *c) + { + int cpu_flags = av_get_cpu_flags(); + if (have_lsx(cpu_flags)) { ++ ff_sws_init_output_lsx(c); + if (c->srcBpc == 8) { + if (c->dstBpc <= 14) { + c->hyScale = c->hcScale = ff_hscale_8_to_15_lsx; +diff --git a/libswscale/loongarch/swscale_loongarch.h b/libswscale/loongarch/swscale_loongarch.h +index 3d502e6ab0..7e6cc87ddf 100644 +--- a/libswscale/loongarch/swscale_loongarch.h ++++ b/libswscale/loongarch/swscale_loongarch.h +@@ -77,6 +77,8 @@ int yuv420_argb32_lsx(SwsContext *c, const uint8_t *src[], int srcStride[], + int yuv420_abgr32_lsx(SwsContext *c, const uint8_t *src[], int srcStride[], + int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[]); + ++av_cold void ff_sws_init_output_lsx(SwsContext *c); ++ + void ff_hscale_8_to_15_lasx(SwsContext *c, int16_t *dst, int dstW, + const uint8_t *src, const int16_t *filter, + const int32_t *filterPos, int filterSize); +-- +2.20.1 + diff --git a/package/ffmpeg/0020-swscale-LA-Add-following-lsx-optimizations.patch b/package/ffmpeg/0020-swscale-LA-Add-following-lsx-optimizations.patch new file mode 100644 index 00000000..da9d5421 --- /dev/null +++ b/package/ffmpeg/0020-swscale-LA-Add-following-lsx-optimizations.patch @@ -0,0 +1,1386 @@ +From e33b99be75293b8d0fe2498a4ab21edf81824db6 Mon Sep 17 00:00:00 2001 +From: wanglu +Date: Fri, 7 Apr 2023 18:12:26 +0800 +Subject: [PATCH 10/10] swscale: [LA] Add following lsx optimizations + +1. yuv2rgb_1_template +2. yuv2rgb_2_template +3. yuv2rgb_full_X_template +4. yuv2rgb_full_2_template +5. yuv2rgb_full_1_template + +Change-Id: Iea98df889ea45bbf51c26215e64da5b2bdf9eb3a +Signed-off-by: wanglu +--- + libswscale/loongarch/output_lasx.c | 2 - + libswscale/loongarch/output_lsx.c | 1272 +++++++++++++++++++++++++++- + 2 files changed, 1261 insertions(+), 13 deletions(-) + +diff --git a/libswscale/loongarch/output_lasx.c b/libswscale/loongarch/output_lasx.c +index 28ab970b1a..cc1f25cdcb 100644 +--- a/libswscale/loongarch/output_lasx.c ++++ b/libswscale/loongarch/output_lasx.c +@@ -1773,8 +1773,6 @@ YUV2RGBWRAPPER(yuv2, rgb_full, bgr4_byte_full, AV_PIX_FMT_BGR4_BYTE, 0) + YUV2RGBWRAPPER(yuv2, rgb_full, rgb4_byte_full, AV_PIX_FMT_RGB4_BYTE, 0) + YUV2RGBWRAPPER(yuv2, rgb_full, bgr8_full, AV_PIX_FMT_BGR8, 0) + YUV2RGBWRAPPER(yuv2, rgb_full, rgb8_full, AV_PIX_FMT_RGB8, 0) +-#undef yuvTorgb +-#undef yuvTorgb_setup + + + av_cold void ff_sws_init_output_loongarch(SwsContext *c) +diff --git a/libswscale/loongarch/output_lsx.c b/libswscale/loongarch/output_lsx.c +index 5da9325c97..768cc3abc6 100644 +--- a/libswscale/loongarch/output_lsx.c ++++ b/libswscale/loongarch/output_lsx.c +@@ -475,6 +475,263 @@ yuv2rgb_X_template_lsx(SwsContext *c, const int16_t *lumFilter, + } + } + ++static void ++yuv2rgb_2_template_lsx(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y, ++ enum AVPixelFormat target, int hasAlpha) ++{ ++ const int16_t *buf0 = buf[0], *buf1 = buf[1], ++ *ubuf0 = ubuf[0], *ubuf1 = ubuf[1], ++ *vbuf0 = vbuf[0], *vbuf1 = vbuf[1]; ++ int yalpha1 = 4096 - yalpha; ++ int uvalpha1 = 4096 - uvalpha; ++ int i, count = 0; ++ int len = dstW - 7; ++ int len_count = (dstW + 1) >> 1; ++ const void *r, *g, *b; ++ int head = YUVRGB_TABLE_HEADROOM; ++ __m128i v_yalpha1 = __lsx_vreplgr2vr_w(yalpha1); ++ __m128i v_uvalpha1 = __lsx_vreplgr2vr_w(uvalpha1); ++ __m128i v_yalpha = __lsx_vreplgr2vr_w(yalpha); ++ __m128i v_uvalpha = __lsx_vreplgr2vr_w(uvalpha); ++ __m128i headroom = __lsx_vreplgr2vr_w(head); ++ __m128i zero = __lsx_vldi(0); ++ ++ for (i = 0; i < len; i += 8) { ++ int Y1, Y2, U, V; ++ int i_dex = i << 1; ++ int c_dex = count << 1; ++ __m128i y0_h, y0_l, y0, u0, v0; ++ __m128i y1_h, y1_l, y1, u1, v1; ++ __m128i y_l, y_h, u, v; ++ ++ DUP4_ARG2(__lsx_vldx, buf0, i_dex, ubuf0, c_dex, vbuf0, c_dex, ++ buf1, i_dex, y0, u0, v0, y1); ++ DUP2_ARG2(__lsx_vldx, ubuf1, c_dex, vbuf1, c_dex, u1, v1); ++ DUP2_ARG2(__lsx_vsllwil_w_h, y0, 0, y1, 0, y0_l, y1_l); ++ DUP2_ARG1(__lsx_vexth_w_h, y0, y1, y0_h, y1_h); ++ DUP4_ARG2(__lsx_vilvl_h, zero, u0, zero, u1, zero, v0, zero, v1, ++ u0, u1, v0, v1); ++ y0_l = __lsx_vmul_w(y0_l, v_yalpha1); ++ y0_h = __lsx_vmul_w(y0_h, v_yalpha1); ++ u0 = __lsx_vmul_w(u0, v_uvalpha1); ++ v0 = __lsx_vmul_w(v0, v_uvalpha1); ++ y_l = __lsx_vmadd_w(y0_l, v_yalpha, y1_l); ++ y_h = __lsx_vmadd_w(y0_h, v_yalpha, y1_h); ++ u = __lsx_vmadd_w(u0, v_uvalpha, u1); ++ v = __lsx_vmadd_w(v0, v_uvalpha, v1); ++ y_l = __lsx_vsrai_w(y_l, 19); ++ y_h = __lsx_vsrai_w(y_h, 19); ++ u = __lsx_vsrai_w(u, 19); ++ v = __lsx_vsrai_w(v, 19); ++ u = __lsx_vadd_w(u, headroom); ++ v = __lsx_vadd_w(v, headroom); ++ WRITE_YUV2RGB_LSX(y_l, y_l, u, v, 0, 1, 0, 0); ++ WRITE_YUV2RGB_LSX(y_l, y_l, u, v, 2, 3, 1, 1); ++ WRITE_YUV2RGB_LSX(y_h, y_h, u, v, 0, 1, 2, 2); ++ WRITE_YUV2RGB_LSX(y_h, y_h, u, v, 2, 3, 3, 3); ++ } ++ if (dstW - i >= 4) { ++ int Y1, Y2, U, V; ++ int i_dex = i << 1; ++ __m128i y0_l, y0, u0, v0; ++ __m128i y1_l, y1, u1, v1; ++ __m128i y_l, u, v; ++ ++ y0 = __lsx_vldx(buf0, i_dex); ++ u0 = __lsx_vldrepl_d((ubuf0 + count), 0); ++ v0 = __lsx_vldrepl_d((vbuf0 + count), 0); ++ y1 = __lsx_vldx(buf1, i_dex); ++ u1 = __lsx_vldrepl_d((ubuf1 + count), 0); ++ v1 = __lsx_vldrepl_d((vbuf1 + count), 0); ++ DUP2_ARG2(__lsx_vilvl_h, zero, y0, zero, y1, y0_l, y1_l); ++ DUP4_ARG2(__lsx_vilvl_h, zero, u0, zero, u1, zero, v0, zero, v1, ++ u0, u1, v0, v1); ++ y0_l = __lsx_vmul_w(y0_l, v_yalpha1); ++ u0 = __lsx_vmul_w(u0, v_uvalpha1); ++ v0 = __lsx_vmul_w(v0, v_uvalpha1); ++ y_l = __lsx_vmadd_w(y0_l, v_yalpha, y1_l); ++ u = __lsx_vmadd_w(u0, v_uvalpha, u1); ++ v = __lsx_vmadd_w(v0, v_uvalpha, v1); ++ y_l = __lsx_vsrai_w(y_l, 19); ++ u = __lsx_vsrai_w(u, 19); ++ v = __lsx_vsrai_w(v, 19); ++ u = __lsx_vadd_w(u, headroom); ++ v = __lsx_vadd_w(v, headroom); ++ WRITE_YUV2RGB_LSX(y_l, y_l, u, v, 0, 1, 0, 0); ++ WRITE_YUV2RGB_LSX(y_l, y_l, u, v, 2, 3, 1, 1); ++ i += 4; ++ } ++ for (; count < len_count; count++) { ++ int Y1 = (buf0[count * 2] * yalpha1 + ++ buf1[count * 2] * yalpha) >> 19; ++ int Y2 = (buf0[count * 2 + 1] * yalpha1 + ++ buf1[count * 2 + 1] * yalpha) >> 19; ++ int U = (ubuf0[count] * uvalpha1 + ubuf1[count] * uvalpha) >> 19; ++ int V = (vbuf0[count] * uvalpha1 + vbuf1[count] * uvalpha) >> 19; ++ ++ r = c->table_rV[V + YUVRGB_TABLE_HEADROOM], ++ g = (c->table_gU[U + YUVRGB_TABLE_HEADROOM] + ++ c->table_gV[V + YUVRGB_TABLE_HEADROOM]), ++ b = c->table_bU[U + YUVRGB_TABLE_HEADROOM]; ++ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, ++ r, g, b, y, target, 0); ++ } ++} ++ ++static void ++yuv2rgb_1_template_lsx(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y, enum AVPixelFormat target, ++ int hasAlpha) ++{ ++ const int16_t *ubuf0 = ubuf[0], *vbuf0 = vbuf[0]; ++ int i; ++ int len = (dstW - 7); ++ int len_count = (dstW + 1) >> 1; ++ const void *r, *g, *b; ++ ++ if (uvalpha < 2048) { ++ int count = 0; ++ int head = YUVRGB_TABLE_HEADROOM; ++ __m128i headroom = __lsx_vreplgr2vr_h(head); ++ ++ for (i = 0; i < len; i += 8) { ++ int Y1, Y2, U, V; ++ int i_dex = i << 1; ++ int c_dex = count << 1; ++ __m128i src_y, src_u, src_v; ++ __m128i u, v, uv, y_l, y_h; ++ ++ src_y = __lsx_vldx(buf0, i_dex); ++ DUP2_ARG2(__lsx_vldx, ubuf0, c_dex, vbuf0, c_dex, src_u, src_v); ++ src_y = __lsx_vsrari_h(src_y, 7); ++ src_u = __lsx_vsrari_h(src_u, 7); ++ src_v = __lsx_vsrari_h(src_v, 7); ++ y_l = __lsx_vsllwil_w_h(src_y, 0); ++ y_h = __lsx_vexth_w_h(src_y); ++ uv = __lsx_vilvl_h(src_v, src_u); ++ u = __lsx_vaddwev_w_h(uv, headroom); ++ v = __lsx_vaddwod_w_h(uv, headroom); ++ WRITE_YUV2RGB_LSX(y_l, y_l, u, v, 0, 1, 0, 0); ++ WRITE_YUV2RGB_LSX(y_l, y_l, u, v, 2, 3, 1, 1); ++ WRITE_YUV2RGB_LSX(y_h, y_h, u, v, 0, 1, 2, 2); ++ WRITE_YUV2RGB_LSX(y_h, y_h, u, v, 2, 3, 3, 3); ++ } ++ if (dstW - i >= 4){ ++ int Y1, Y2, U, V; ++ int i_dex = i << 1; ++ __m128i src_y, src_u, src_v; ++ __m128i y_l, u, v, uv; ++ ++ src_y = __lsx_vldx(buf0, i_dex); ++ src_u = __lsx_vldrepl_d((ubuf0 + count), 0); ++ src_v = __lsx_vldrepl_d((vbuf0 + count), 0); ++ y_l = __lsx_vsrari_h(src_y, 7); ++ y_l = __lsx_vsllwil_w_h(y_l, 0); ++ uv = __lsx_vilvl_h(src_v, src_u); ++ uv = __lsx_vsrari_h(uv, 7); ++ u = __lsx_vaddwev_w_h(uv, headroom); ++ v = __lsx_vaddwod_w_h(uv, headroom); ++ WRITE_YUV2RGB_LSX(y_l, y_l, u, v, 0, 1, 0, 0); ++ WRITE_YUV2RGB_LSX(y_l, y_l, u, v, 2, 3, 1, 1); ++ i += 4; ++ } ++ for (; count < len_count; count++) { ++ int Y1 = (buf0[count * 2 ] + 64) >> 7; ++ int Y2 = (buf0[count * 2 + 1] + 64) >> 7; ++ int U = (ubuf0[count] + 64) >> 7; ++ int V = (vbuf0[count] + 64) >> 7; ++ ++ r = c->table_rV[V + YUVRGB_TABLE_HEADROOM], ++ g = (c->table_gU[U + YUVRGB_TABLE_HEADROOM] + ++ c->table_gV[V + YUVRGB_TABLE_HEADROOM]), ++ b = c->table_bU[U + YUVRGB_TABLE_HEADROOM]; ++ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, ++ r, g, b, y, target, 0); ++ } ++ } else { ++ const int16_t *ubuf1 = ubuf[1], *vbuf1 = vbuf[1]; ++ int count = 0; ++ int HEADROOM = YUVRGB_TABLE_HEADROOM; ++ __m128i headroom = __lsx_vreplgr2vr_w(HEADROOM); ++ ++ for (i = 0; i < len; i += 8) { ++ int Y1, Y2, U, V; ++ int i_dex = i << 1; ++ int c_dex = count << 1; ++ __m128i src_y, src_u0, src_v0, src_u1, src_v1; ++ __m128i y_l, y_h, u1, u2, v1, v2; ++ ++ DUP4_ARG2(__lsx_vldx, buf0, i_dex, ubuf0, c_dex, vbuf0, c_dex, ++ ubuf1, c_dex, src_y, src_u0, src_v0, src_u1); ++ src_v1 = __lsx_vldx(vbuf1, c_dex); ++ src_y = __lsx_vsrari_h(src_y, 7); ++ u1 = __lsx_vaddwev_w_h(src_u0, src_u1); ++ v1 = __lsx_vaddwod_w_h(src_u0, src_u1); ++ u2 = __lsx_vaddwev_w_h(src_v0, src_v1); ++ v2 = __lsx_vaddwod_w_h(src_v0, src_v1); ++ y_l = __lsx_vsllwil_w_h(src_y, 0); ++ y_h = __lsx_vexth_w_h(src_y); ++ u1 = __lsx_vsrari_w(u1, 8); ++ v1 = __lsx_vsrari_w(v1, 8); ++ u2 = __lsx_vsrari_w(u2, 8); ++ v2 = __lsx_vsrari_w(v2, 8); ++ u1 = __lsx_vadd_w(u1, headroom); ++ v1 = __lsx_vadd_w(v1, headroom); ++ u2 = __lsx_vadd_w(u2, headroom); ++ v2 = __lsx_vadd_w(v2, headroom); ++ WRITE_YUV2RGB_LSX(y_l, y_l, u1, v1, 0, 1, 0, 0); ++ WRITE_YUV2RGB_LSX(y_l, y_l, u2, v2, 2, 3, 0, 0); ++ WRITE_YUV2RGB_LSX(y_h, y_h, u1, v1, 0, 1, 1, 1); ++ WRITE_YUV2RGB_LSX(y_h, y_h, u2, v2, 2, 3, 1, 1); ++ } ++ if (dstW - i >= 4) { ++ int Y1, Y2, U, V; ++ int i_dex = i << 1; ++ __m128i src_y, src_u0, src_v0, src_u1, src_v1; ++ __m128i uv; ++ ++ src_y = __lsx_vldx(buf0, i_dex); ++ src_u0 = __lsx_vldrepl_d((ubuf0 + count), 0); ++ src_v0 = __lsx_vldrepl_d((vbuf0 + count), 0); ++ src_u1 = __lsx_vldrepl_d((ubuf1 + count), 0); ++ src_v1 = __lsx_vldrepl_d((vbuf1 + count), 0); ++ ++ src_u0 = __lsx_vilvl_h(src_u1, src_u0); ++ src_v0 = __lsx_vilvl_h(src_v1, src_v0); ++ src_y = __lsx_vsrari_h(src_y, 7); ++ src_y = __lsx_vsllwil_w_h(src_y, 0); ++ uv = __lsx_vilvl_h(src_v0, src_u0); ++ uv = __lsx_vhaddw_w_h(uv, uv); ++ uv = __lsx_vsrari_w(uv, 8); ++ uv = __lsx_vadd_w(uv, headroom); ++ WRITE_YUV2RGB_LSX(src_y, src_y, uv, uv, 0, 1, 0, 1); ++ WRITE_YUV2RGB_LSX(src_y, src_y, uv, uv, 2, 3, 2, 3); ++ i += 4; ++ } ++ for (; count < len_count; count++) { ++ int Y1 = (buf0[count * 2 ] + 64) >> 7; ++ int Y2 = (buf0[count * 2 + 1] + 64) >> 7; ++ int U = (ubuf0[count] + ubuf1[count] + 128) >> 8; ++ int V = (vbuf0[count] + vbuf1[count] + 128) >> 8; ++ ++ r = c->table_rV[V + YUVRGB_TABLE_HEADROOM], ++ g = (c->table_gU[U + YUVRGB_TABLE_HEADROOM] + ++ c->table_gV[V + YUVRGB_TABLE_HEADROOM]), ++ b = c->table_bU[U + YUVRGB_TABLE_HEADROOM]; ++ ++ yuv2rgb_write(dest, count, Y1, Y2, 0, 0, ++ r, g, b, y, target, 0); ++ } ++ } ++} ++ + #define YUV2RGBWRAPPERX(name, base, ext, fmt, hasAlpha) \ + static void name ## ext ## _X_lsx(SwsContext *c, const int16_t *lumFilter, \ + const int16_t **lumSrc, int lumFilterSize, \ +@@ -488,27 +745,1000 @@ static void name ## ext ## _X_lsx(SwsContext *c, const int16_t *lumFilter, + alpSrc, dest, dstW, y, fmt, hasAlpha); \ + } + ++#define YUV2RGBWRAPPERX2(name, base, ext, fmt, hasAlpha) \ ++YUV2RGBWRAPPERX(name, base, ext, fmt, hasAlpha) \ ++static void name ## ext ## _2_lsx(SwsContext *c, const int16_t *buf[2], \ ++ const int16_t *ubuf[2], const int16_t *vbuf[2], \ ++ const int16_t *abuf[2], uint8_t *dest, int dstW, \ ++ int yalpha, int uvalpha, int y) \ ++{ \ ++ name ## base ## _2_template_lsx(c, buf, ubuf, vbuf, abuf, dest, \ ++ dstW, yalpha, uvalpha, y, fmt, hasAlpha); \ ++} ++ ++#define YUV2RGBWRAPPER(name, base, ext, fmt, hasAlpha) \ ++YUV2RGBWRAPPERX2(name, base, ext, fmt, hasAlpha) \ ++static void name ## ext ## _1_lsx(SwsContext *c, const int16_t *buf0, \ ++ const int16_t *ubuf[2], const int16_t *vbuf[2], \ ++ const int16_t *abuf0, uint8_t *dest, int dstW, \ ++ int uvalpha, int y) \ ++{ \ ++ name ## base ## _1_template_lsx(c, buf0, ubuf, vbuf, abuf0, dest, \ ++ dstW, uvalpha, y, fmt, hasAlpha); \ ++} + + #if CONFIG_SMALL + #else + #if CONFIG_SWSCALE_ALPHA + #endif +-YUV2RGBWRAPPERX(yuv2rgb,, x32_1, AV_PIX_FMT_RGB32_1, 0) +-YUV2RGBWRAPPERX(yuv2rgb,, x32, AV_PIX_FMT_RGB32, 0) ++YUV2RGBWRAPPER(yuv2rgb,, x32_1, AV_PIX_FMT_RGB32_1, 0) ++YUV2RGBWRAPPER(yuv2rgb,, x32, AV_PIX_FMT_RGB32, 0) + #endif +-YUV2RGBWRAPPERX(yuv2, rgb, rgb24, AV_PIX_FMT_RGB24, 0) +-YUV2RGBWRAPPERX(yuv2, rgb, bgr24, AV_PIX_FMT_BGR24, 0) +-YUV2RGBWRAPPERX(yuv2rgb,, 16, AV_PIX_FMT_RGB565, 0) +-YUV2RGBWRAPPERX(yuv2rgb,, 15, AV_PIX_FMT_RGB555, 0) +-YUV2RGBWRAPPERX(yuv2rgb,, 12, AV_PIX_FMT_RGB444, 0) +-YUV2RGBWRAPPERX(yuv2rgb,, 8, AV_PIX_FMT_RGB8, 0) +-YUV2RGBWRAPPERX(yuv2rgb,, 4, AV_PIX_FMT_RGB4, 0) +-YUV2RGBWRAPPERX(yuv2rgb,, 4b, AV_PIX_FMT_RGB4_BYTE, 0) ++YUV2RGBWRAPPER(yuv2, rgb, rgb24, AV_PIX_FMT_RGB24, 0) ++YUV2RGBWRAPPER(yuv2, rgb, bgr24, AV_PIX_FMT_BGR24, 0) ++YUV2RGBWRAPPER(yuv2rgb,, 16, AV_PIX_FMT_RGB565, 0) ++YUV2RGBWRAPPER(yuv2rgb,, 15, AV_PIX_FMT_RGB555, 0) ++YUV2RGBWRAPPER(yuv2rgb,, 12, AV_PIX_FMT_RGB444, 0) ++YUV2RGBWRAPPER(yuv2rgb,, 8, AV_PIX_FMT_RGB8, 0) ++YUV2RGBWRAPPER(yuv2rgb,, 4, AV_PIX_FMT_RGB4, 0) ++YUV2RGBWRAPPER(yuv2rgb,, 4b, AV_PIX_FMT_RGB4_BYTE, 0) + +-av_cold void ff_sws_init_output_lsx(SwsContext *c) ++// This function is copied from libswscale/output.c ++static av_always_inline void yuv2rgb_write_full(SwsContext *c, ++ uint8_t *dest, int i, int R, int A, int G, int B, ++ int y, enum AVPixelFormat target, int hasAlpha, int err[4]) ++{ ++ int isrgb8 = target == AV_PIX_FMT_BGR8 || target == AV_PIX_FMT_RGB8; ++ ++ if ((R | G | B) & 0xC0000000) { ++ R = av_clip_uintp2(R, 30); ++ G = av_clip_uintp2(G, 30); ++ B = av_clip_uintp2(B, 30); ++ } ++ ++ switch(target) { ++ case AV_PIX_FMT_ARGB: ++ dest[0] = hasAlpha ? A : 255; ++ dest[1] = R >> 22; ++ dest[2] = G >> 22; ++ dest[3] = B >> 22; ++ break; ++ case AV_PIX_FMT_RGB24: ++ dest[0] = R >> 22; ++ dest[1] = G >> 22; ++ dest[2] = B >> 22; ++ break; ++ case AV_PIX_FMT_RGBA: ++ dest[0] = R >> 22; ++ dest[1] = G >> 22; ++ dest[2] = B >> 22; ++ dest[3] = hasAlpha ? A : 255; ++ break; ++ case AV_PIX_FMT_ABGR: ++ dest[0] = hasAlpha ? A : 255; ++ dest[1] = B >> 22; ++ dest[2] = G >> 22; ++ dest[3] = R >> 22; ++ break; ++ case AV_PIX_FMT_BGR24: ++ dest[0] = B >> 22; ++ dest[1] = G >> 22; ++ dest[2] = R >> 22; ++ break; ++ case AV_PIX_FMT_BGRA: ++ dest[0] = B >> 22; ++ dest[1] = G >> 22; ++ dest[2] = R >> 22; ++ dest[3] = hasAlpha ? A : 255; ++ break; ++ case AV_PIX_FMT_BGR4_BYTE: ++ case AV_PIX_FMT_RGB4_BYTE: ++ case AV_PIX_FMT_BGR8: ++ case AV_PIX_FMT_RGB8: ++ { ++ int r,g,b; ++ ++ switch (c->dither) { ++ default: ++ case SWS_DITHER_AUTO: ++ case SWS_DITHER_ED: ++ R >>= 22; ++ G >>= 22; ++ B >>= 22; ++ R += (7*err[0] + 1*c->dither_error[0][i] + 5*c->dither_error[0][i+1] + 3*c->dither_error[0][i+2])>>4; ++ G += (7*err[1] + 1*c->dither_error[1][i] + 5*c->dither_error[1][i+1] + 3*c->dither_error[1][i+2])>>4; ++ B += (7*err[2] + 1*c->dither_error[2][i] + 5*c->dither_error[2][i+1] + 3*c->dither_error[2][i+2])>>4; ++ c->dither_error[0][i] = err[0]; ++ c->dither_error[1][i] = err[1]; ++ c->dither_error[2][i] = err[2]; ++ r = R >> (isrgb8 ? 5 : 7); ++ g = G >> (isrgb8 ? 5 : 6); ++ b = B >> (isrgb8 ? 6 : 7); ++ r = av_clip(r, 0, isrgb8 ? 7 : 1); ++ g = av_clip(g, 0, isrgb8 ? 7 : 3); ++ b = av_clip(b, 0, isrgb8 ? 3 : 1); ++ err[0] = R - r*(isrgb8 ? 36 : 255); ++ err[1] = G - g*(isrgb8 ? 36 : 85); ++ err[2] = B - b*(isrgb8 ? 85 : 255); ++ break; ++ case SWS_DITHER_A_DITHER: ++ if (isrgb8) { ++ /* see http://pippin.gimp.org/a_dither/ for details/origin */ ++#define A_DITHER(u,v) (((((u)+((v)*236))*119)&0xff)) ++ r = (((R >> 19) + A_DITHER(i,y) -96)>>8); ++ g = (((G >> 19) + A_DITHER(i + 17,y) - 96)>>8); ++ b = (((B >> 20) + A_DITHER(i + 17*2,y) -96)>>8); ++ r = av_clip_uintp2(r, 3); ++ g = av_clip_uintp2(g, 3); ++ b = av_clip_uintp2(b, 2); ++ } else { ++ r = (((R >> 21) + A_DITHER(i,y)-256)>>8); ++ g = (((G >> 19) + A_DITHER(i + 17,y)-256)>>8); ++ b = (((B >> 21) + A_DITHER(i + 17*2,y)-256)>>8); ++ r = av_clip_uintp2(r, 1); ++ g = av_clip_uintp2(g, 2); ++ b = av_clip_uintp2(b, 1); ++ } ++ break; ++ case SWS_DITHER_X_DITHER: ++ if (isrgb8) { ++ /* see http://pippin.gimp.org/a_dither/ for details/origin */ ++#define X_DITHER(u,v) (((((u)^((v)*237))*181)&0x1ff)/2) ++ r = (((R >> 19) + X_DITHER(i,y) - 96)>>8); ++ g = (((G >> 19) + X_DITHER(i + 17,y) - 96)>>8); ++ b = (((B >> 20) + X_DITHER(i + 17*2,y) - 96)>>8); ++ r = av_clip_uintp2(r, 3); ++ g = av_clip_uintp2(g, 3); ++ b = av_clip_uintp2(b, 2); ++ } else { ++ r = (((R >> 21) + X_DITHER(i,y)-256)>>8); ++ g = (((G >> 19) + X_DITHER(i + 17,y)-256)>>8); ++ b = (((B >> 21) + X_DITHER(i + 17*2,y)-256)>>8); ++ r = av_clip_uintp2(r, 1); ++ g = av_clip_uintp2(g, 2); ++ b = av_clip_uintp2(b, 1); ++ } ++ ++ break; ++ } ++ ++ if(target == AV_PIX_FMT_BGR4_BYTE) { ++ dest[0] = r + 2*g + 8*b; ++ } else if(target == AV_PIX_FMT_RGB4_BYTE) { ++ dest[0] = b + 2*g + 8*r; ++ } else if(target == AV_PIX_FMT_BGR8) { ++ dest[0] = r + 8*g + 64*b; ++ } else if(target == AV_PIX_FMT_RGB8) { ++ dest[0] = b + 4*g + 32*r; ++ } else ++ av_assert2(0); ++ break; } ++ } ++} ++ ++#define YUVTORGB_SETUP_LSX \ ++ int y_offset = c->yuv2rgb_y_offset; \ ++ int y_coeff = c->yuv2rgb_y_coeff; \ ++ int v2r_coe = c->yuv2rgb_v2r_coeff; \ ++ int v2g_coe = c->yuv2rgb_v2g_coeff; \ ++ int u2g_coe = c->yuv2rgb_u2g_coeff; \ ++ int u2b_coe = c->yuv2rgb_u2b_coeff; \ ++ __m128i offset = __lsx_vreplgr2vr_w(y_offset); \ ++ __m128i coeff = __lsx_vreplgr2vr_w(y_coeff); \ ++ __m128i v2r = __lsx_vreplgr2vr_w(v2r_coe); \ ++ __m128i v2g = __lsx_vreplgr2vr_w(v2g_coe); \ ++ __m128i u2g = __lsx_vreplgr2vr_w(u2g_coe); \ ++ __m128i u2b = __lsx_vreplgr2vr_w(u2b_coe); \ ++ ++#define YUVTORGB_LSX(y, u, v, R, G, B, offset, coeff, \ ++ y_temp, v2r, v2g, u2g, u2b) \ ++{ \ ++ y = __lsx_vsub_w(y, offset); \ ++ y = __lsx_vmul_w(y, coeff); \ ++ y = __lsx_vadd_w(y, y_temp); \ ++ R = __lsx_vmadd_w(y, v, v2r); \ ++ v = __lsx_vmadd_w(y, v, v2g); \ ++ G = __lsx_vmadd_w(v, u, u2g); \ ++ B = __lsx_vmadd_w(y, u, u2b); \ ++} ++ ++#define WRITE_FULL_A_LSX(r, g, b, a, t1, s) \ ++{ \ ++ R = __lsx_vpickve2gr_w(r, t1); \ ++ G = __lsx_vpickve2gr_w(g, t1); \ ++ B = __lsx_vpickve2gr_w(b, t1); \ ++ A = __lsx_vpickve2gr_w(a, t1); \ ++ if (A & 0x100) \ ++ A = av_clip_uint8(A); \ ++ yuv2rgb_write_full(c, dest, i + s, R, A, G, B, y, target, hasAlpha, err);\ ++ dest += step; \ ++} ++ ++#define WRITE_FULL_LSX(r, g, b, t1, s) \ ++{ \ ++ R = __lsx_vpickve2gr_w(r, t1); \ ++ G = __lsx_vpickve2gr_w(g, t1); \ ++ B = __lsx_vpickve2gr_w(b, t1); \ ++ yuv2rgb_write_full(c, dest, i + s, R, 0, G, B, y, target, hasAlpha, err); \ ++ dest += step; \ ++} ++ ++static void ++yuv2rgb_full_X_template_lsx(SwsContext *c, const int16_t *lumFilter, ++ const int16_t **lumSrc, int lumFilterSize, ++ const int16_t *chrFilter, const int16_t **chrUSrc, ++ const int16_t **chrVSrc, int chrFilterSize, ++ const int16_t **alpSrc, uint8_t *dest, ++ int dstW, int y, enum AVPixelFormat target, ++ int hasAlpha) ++{ ++ int i, j, B, G, R, A; ++ int step = (target == AV_PIX_FMT_RGB24 || ++ target == AV_PIX_FMT_BGR24) ? 3 : 4; ++ int err[4] = {0}; ++ int a_temp = 1 << 18; ++ int templ = 1 << 9; ++ int tempc = templ - (128 << 19); ++ int ytemp = 1 << 21; ++ int len = dstW - 7; ++ __m128i y_temp = __lsx_vreplgr2vr_w(ytemp); ++ YUVTORGB_SETUP_LSX ++ ++ if( target == AV_PIX_FMT_BGR4_BYTE || target == AV_PIX_FMT_RGB4_BYTE ++ || target == AV_PIX_FMT_BGR8 || target == AV_PIX_FMT_RGB8) ++ step = 1; ++ ++ for (i = 0; i < len; i += 8) { ++ __m128i l_src, u_src, v_src; ++ __m128i y_ev, y_od, u_ev, u_od, v_ev, v_od, temp; ++ __m128i R_ev, R_od, G_ev, G_od, B_ev, B_od; ++ int n = i << 1; ++ ++ y_ev = y_od = __lsx_vreplgr2vr_w(templ); ++ u_ev = u_od = v_ev = v_od = __lsx_vreplgr2vr_w(tempc); ++ for (j = 0; j < lumFilterSize; j++) { ++ temp = __lsx_vldrepl_h((lumFilter + j), 0); ++ l_src = __lsx_vldx(lumSrc[j], n); ++ y_ev = __lsx_vmaddwev_w_h(y_ev, l_src, temp); ++ y_od = __lsx_vmaddwod_w_h(y_od, l_src, temp); ++ } ++ for (j = 0; j < chrFilterSize; j++) { ++ temp = __lsx_vldrepl_h((chrFilter + j), 0); ++ DUP2_ARG2(__lsx_vldx, chrUSrc[j], n, chrVSrc[j], n, ++ u_src, v_src); ++ DUP2_ARG3(__lsx_vmaddwev_w_h, u_ev, u_src, temp, v_ev, ++ v_src, temp, u_ev, v_ev); ++ DUP2_ARG3(__lsx_vmaddwod_w_h, u_od, u_src, temp, v_od, ++ v_src, temp, u_od, v_od); ++ } ++ y_ev = __lsx_vsrai_w(y_ev, 10); ++ y_od = __lsx_vsrai_w(y_od, 10); ++ u_ev = __lsx_vsrai_w(u_ev, 10); ++ u_od = __lsx_vsrai_w(u_od, 10); ++ v_ev = __lsx_vsrai_w(v_ev, 10); ++ v_od = __lsx_vsrai_w(v_od, 10); ++ YUVTORGB_LSX(y_ev, u_ev, v_ev, R_ev, G_ev, B_ev, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ YUVTORGB_LSX(y_od, u_od, v_od, R_od, G_od, B_od, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ ++ if (hasAlpha) { ++ __m128i a_src, a_ev, a_od; ++ ++ a_ev = a_od = __lsx_vreplgr2vr_w(a_temp); ++ for (j = 0; j < lumFilterSize; j++) { ++ temp = __lsx_vldrepl_h(lumFilter + j, 0); ++ a_src = __lsx_vldx(alpSrc[j], n); ++ a_ev = __lsx_vmaddwev_w_h(a_ev, a_src, temp); ++ a_od = __lsx_vmaddwod_w_h(a_od, a_src, temp); ++ } ++ a_ev = __lsx_vsrai_w(a_ev, 19); ++ a_od = __lsx_vsrai_w(a_od, 19); ++ WRITE_FULL_A_LSX(R_ev, G_ev, B_ev, a_ev, 0, 0); ++ WRITE_FULL_A_LSX(R_od, G_od, B_od, a_od, 0, 1); ++ WRITE_FULL_A_LSX(R_ev, G_ev, B_ev, a_ev, 1, 2); ++ WRITE_FULL_A_LSX(R_od, G_od, B_od, a_od, 1, 3); ++ WRITE_FULL_A_LSX(R_ev, G_ev, B_ev, a_ev, 2, 4); ++ WRITE_FULL_A_LSX(R_od, G_od, B_od, a_od, 2, 5); ++ WRITE_FULL_A_LSX(R_ev, G_ev, B_ev, a_ev, 3, 6); ++ WRITE_FULL_A_LSX(R_od, G_od, B_od, a_od, 3, 7); ++ } else { ++ WRITE_FULL_LSX(R_ev, G_ev, B_ev, 0, 0); ++ WRITE_FULL_LSX(R_od, G_od, B_od, 0, 1); ++ WRITE_FULL_LSX(R_ev, G_ev, B_ev, 1, 2); ++ WRITE_FULL_LSX(R_od, G_od, B_od, 1, 3); ++ WRITE_FULL_LSX(R_ev, G_ev, B_ev, 2, 4); ++ WRITE_FULL_LSX(R_od, G_od, B_od, 2, 5); ++ WRITE_FULL_LSX(R_ev, G_ev, B_ev, 3, 6); ++ WRITE_FULL_LSX(R_od, G_od, B_od, 3, 7); ++ } ++ } ++ if (dstW - i >= 4) { ++ __m128i l_src, u_src, v_src; ++ __m128i y_ev, u_ev, v_ev, uv, temp; ++ __m128i R_ev, G_ev, B_ev; ++ int n = i << 1; ++ ++ y_ev = __lsx_vreplgr2vr_w(templ); ++ u_ev = v_ev = __lsx_vreplgr2vr_w(tempc); ++ for (j = 0; j < lumFilterSize; j++) { ++ temp = __lsx_vldrepl_h((lumFilter + j), 0); ++ l_src = __lsx_vldx(lumSrc[j], n); ++ l_src = __lsx_vilvl_h(l_src, l_src); ++ y_ev = __lsx_vmaddwev_w_h(y_ev, l_src, temp); ++ } ++ for (j = 0; j < chrFilterSize; j++) { ++ temp = __lsx_vldrepl_h((chrFilter + j), 0); ++ DUP2_ARG2(__lsx_vldx, chrUSrc[j], n, chrVSrc[j], n, u_src, v_src); ++ uv = __lsx_vilvl_h(v_src, u_src); ++ u_ev = __lsx_vmaddwev_w_h(u_ev, uv, temp); ++ v_ev = __lsx_vmaddwod_w_h(v_ev, uv, temp); ++ } ++ y_ev = __lsx_vsrai_w(y_ev, 10); ++ u_ev = __lsx_vsrai_w(u_ev, 10); ++ v_ev = __lsx_vsrai_w(v_ev, 10); ++ YUVTORGB_LSX(y_ev, u_ev, v_ev, R_ev, G_ev, B_ev, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ ++ if (hasAlpha) { ++ __m128i a_src, a_ev; ++ ++ a_ev = __lsx_vreplgr2vr_w(a_temp); ++ for (j = 0; j < lumFilterSize; j++) { ++ temp = __lsx_vldrepl_h(lumFilter + j, 0); ++ a_src = __lsx_vldx(alpSrc[j], n); ++ a_src = __lsx_vilvl_h(a_src, a_src); ++ a_ev = __lsx_vmaddwev_w_h(a_ev, a_src, temp); ++ } ++ a_ev = __lsx_vsrai_w(a_ev, 19); ++ WRITE_FULL_A_LSX(R_ev, G_ev, B_ev, a_ev, 0, 0); ++ WRITE_FULL_A_LSX(R_ev, G_ev, B_ev, a_ev, 1, 1); ++ WRITE_FULL_A_LSX(R_ev, G_ev, B_ev, a_ev, 2, 2); ++ WRITE_FULL_A_LSX(R_ev, G_ev, B_ev, a_ev, 3, 3); ++ } else { ++ WRITE_FULL_LSX(R_ev, G_ev, B_ev, 0, 0); ++ WRITE_FULL_LSX(R_ev, G_ev, B_ev, 1, 1); ++ WRITE_FULL_LSX(R_ev, G_ev, B_ev, 2, 2); ++ WRITE_FULL_LSX(R_ev, G_ev, B_ev, 3, 3); ++ } ++ i += 4; ++ } ++ for (; i < dstW; i++) { ++ int Y = templ; ++ int V, U = V = tempc; ++ ++ A = 0; ++ for (j = 0; j < lumFilterSize; j++) { ++ Y += lumSrc[j][i] * lumFilter[j]; ++ } ++ for (j = 0; j < chrFilterSize; j++) { ++ U += chrUSrc[j][i] * chrFilter[j]; ++ V += chrVSrc[j][i] * chrFilter[j]; ++ ++ } ++ Y >>= 10; ++ U >>= 10; ++ V >>= 10; ++ if (hasAlpha) { ++ A = 1 << 18; ++ for (j = 0; j < lumFilterSize; j++) { ++ A += alpSrc[j][i] * lumFilter[j]; ++ } ++ A >>= 19; ++ if (A & 0x100) ++ A = av_clip_uint8(A); ++ } ++ Y -= y_offset; ++ Y *= y_coeff; ++ Y += ytemp; ++ R = (unsigned)Y + V * v2r_coe; ++ G = (unsigned)Y + V * v2g_coe + U * u2g_coe; ++ B = (unsigned)Y + U * u2b_coe; ++ yuv2rgb_write_full(c, dest, i, R, A, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ c->dither_error[0][i] = err[0]; ++ c->dither_error[1][i] = err[1]; ++ c->dither_error[2][i] = err[2]; ++} ++ ++static void ++yuv2rgb_full_2_template_lsx(SwsContext *c, const int16_t *buf[2], ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf[2], uint8_t *dest, int dstW, ++ int yalpha, int uvalpha, int y, ++ enum AVPixelFormat target, int hasAlpha) ++{ ++ const int16_t *buf0 = buf[0], *buf1 = buf[1], ++ *ubuf0 = ubuf[0], *ubuf1 = ubuf[1], ++ *vbuf0 = vbuf[0], *vbuf1 = vbuf[1], ++ *abuf0 = hasAlpha ? abuf[0] : NULL, ++ *abuf1 = hasAlpha ? abuf[1] : NULL; ++ int yalpha1 = 4096 - yalpha; ++ int uvalpha1 = 4096 - uvalpha; ++ int uvtemp = 128 << 19; ++ int atemp = 1 << 18; ++ int err[4] = {0}; ++ int ytemp = 1 << 21; ++ int len = dstW - 7; ++ int i, R, G, B, A; ++ int step = (target == AV_PIX_FMT_RGB24 || ++ target == AV_PIX_FMT_BGR24) ? 3 : 4; ++ __m128i v_uvalpha1 = __lsx_vreplgr2vr_w(uvalpha1); ++ __m128i v_yalpha1 = __lsx_vreplgr2vr_w(yalpha1); ++ __m128i v_uvalpha = __lsx_vreplgr2vr_w(uvalpha); ++ __m128i v_yalpha = __lsx_vreplgr2vr_w(yalpha); ++ __m128i uv = __lsx_vreplgr2vr_w(uvtemp); ++ __m128i a_bias = __lsx_vreplgr2vr_w(atemp); ++ __m128i y_temp = __lsx_vreplgr2vr_w(ytemp); ++ YUVTORGB_SETUP_LSX ++ ++ av_assert2(yalpha <= 4096U); ++ av_assert2(uvalpha <= 4096U); ++ ++ if( target == AV_PIX_FMT_BGR4_BYTE || target == AV_PIX_FMT_RGB4_BYTE ++ || target == AV_PIX_FMT_BGR8 || target == AV_PIX_FMT_RGB8) ++ step = 1; ++ ++ for (i = 0; i < len; i += 8) { ++ __m128i b0, b1, ub0, ub1, vb0, vb1; ++ __m128i y0_l, y0_h, y1_l, y1_h, u0_l, u0_h; ++ __m128i v0_l, v0_h, u1_l, u1_h, v1_l, v1_h; ++ __m128i y_l, y_h, v_l, v_h, u_l, u_h; ++ __m128i R_l, R_h, G_l, G_h, B_l, B_h; ++ int n = i << 1; ++ ++ DUP4_ARG2(__lsx_vldx, buf0, n, buf1, n, ubuf0, ++ n, ubuf1, n, b0, b1, ub0, ub1); ++ DUP2_ARG2(__lsx_vldx, vbuf0, n, vbuf1, n, vb0 , vb1); ++ DUP2_ARG2(__lsx_vsllwil_w_h, b0, 0, b1, 0, y0_l, y1_l); ++ DUP4_ARG2(__lsx_vsllwil_w_h, ub0, 0, ub1, 0, vb0, 0, vb1, 0, ++ u0_l, u1_l, v0_l, v1_l); ++ DUP2_ARG1(__lsx_vexth_w_h, b0, b1, y0_h, y1_h); ++ DUP4_ARG1(__lsx_vexth_w_h, ub0, ub1, vb0, vb1, ++ u0_h, u1_h, v0_h, v1_h); ++ y0_l = __lsx_vmul_w(y0_l, v_yalpha1); ++ y0_h = __lsx_vmul_w(y0_h, v_yalpha1); ++ u0_l = __lsx_vmul_w(u0_l, v_uvalpha1); ++ u0_h = __lsx_vmul_w(u0_h, v_uvalpha1); ++ v0_l = __lsx_vmul_w(v0_l, v_uvalpha1); ++ v0_h = __lsx_vmul_w(v0_h, v_uvalpha1); ++ y_l = __lsx_vmadd_w(y0_l, v_yalpha, y1_l); ++ y_h = __lsx_vmadd_w(y0_h, v_yalpha, y1_h); ++ u_l = __lsx_vmadd_w(u0_l, v_uvalpha, u1_l); ++ u_h = __lsx_vmadd_w(u0_h, v_uvalpha, u1_h); ++ v_l = __lsx_vmadd_w(v0_l, v_uvalpha, v1_l); ++ v_h = __lsx_vmadd_w(v0_h, v_uvalpha, v1_h); ++ u_l = __lsx_vsub_w(u_l, uv); ++ u_h = __lsx_vsub_w(u_h, uv); ++ v_l = __lsx_vsub_w(v_l, uv); ++ v_h = __lsx_vsub_w(v_h, uv); ++ y_l = __lsx_vsrai_w(y_l, 10); ++ y_h = __lsx_vsrai_w(y_h, 10); ++ u_l = __lsx_vsrai_w(u_l, 10); ++ u_h = __lsx_vsrai_w(u_h, 10); ++ v_l = __lsx_vsrai_w(v_l, 10); ++ v_h = __lsx_vsrai_w(v_h, 10); ++ YUVTORGB_LSX(y_l, u_l, v_l, R_l, G_l, B_l, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ YUVTORGB_LSX(y_h, u_h, v_h, R_h, G_h, B_h, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ ++ if (hasAlpha) { ++ __m128i a0, a1, a0_l, a0_h; ++ __m128i a_l, a_h, a1_l, a1_h; ++ ++ DUP2_ARG2(__lsx_vldx, abuf0, n, abuf1, n, a0, a1); ++ DUP2_ARG2(__lsx_vsllwil_w_h, a0, 0, a1, 0, a0_l, a1_l); ++ DUP2_ARG1(__lsx_vexth_w_h, a0, a1, a0_h, a1_h); ++ a_l = __lsx_vmadd_w(a_bias, a0_l, v_yalpha1); ++ a_h = __lsx_vmadd_w(a_bias, a0_h, v_yalpha1); ++ a_l = __lsx_vmadd_w(a_l, v_yalpha, a1_l); ++ a_h = __lsx_vmadd_w(a_h, v_yalpha, a1_h); ++ a_l = __lsx_vsrai_w(a_l, 19); ++ a_h = __lsx_vsrai_w(a_h, 19); ++ WRITE_FULL_A_LSX(R_l, G_l, B_l, a_l, 0, 0); ++ WRITE_FULL_A_LSX(R_l, G_l, B_l, a_l, 1, 1); ++ WRITE_FULL_A_LSX(R_l, G_l, B_l, a_l, 2, 2); ++ WRITE_FULL_A_LSX(R_l, G_l, B_l, a_l, 3, 3); ++ WRITE_FULL_A_LSX(R_h, G_h, B_h, a_h, 0, 4); ++ WRITE_FULL_A_LSX(R_h, G_h, B_h, a_h, 1, 5); ++ WRITE_FULL_A_LSX(R_h, G_h, B_h, a_h, 2, 6); ++ WRITE_FULL_A_LSX(R_h, G_h, B_h, a_h, 3, 7); ++ } else { ++ WRITE_FULL_LSX(R_l, G_l, B_l, 0, 0); ++ WRITE_FULL_LSX(R_l, G_l, B_l, 1, 1); ++ WRITE_FULL_LSX(R_l, G_l, B_l, 2, 2); ++ WRITE_FULL_LSX(R_l, G_l, B_l, 3, 3); ++ WRITE_FULL_LSX(R_h, G_h, B_h, 0, 4); ++ WRITE_FULL_LSX(R_h, G_h, B_h, 1, 5); ++ WRITE_FULL_LSX(R_h, G_h, B_h, 2, 6); ++ WRITE_FULL_LSX(R_h, G_h, B_h, 3, 7); ++ } ++ } ++ if (dstW - i >= 4) { ++ __m128i b0, b1, ub0, ub1, vb0, vb1; ++ __m128i y0_l, y1_l, u0_l; ++ __m128i v0_l, u1_l, v1_l; ++ __m128i y_l, u_l, v_l; ++ __m128i R_l, G_l, B_l; ++ int n = i << 1; ++ ++ DUP4_ARG2(__lsx_vldx, buf0, n, buf1, n, ubuf0, n, ++ ubuf1, n, b0, b1, ub0, ub1); ++ DUP2_ARG2(__lsx_vldx, vbuf0, n, vbuf1, n, vb0, vb1); ++ DUP2_ARG2(__lsx_vsllwil_w_h, b0, 0, b1, 0, y0_l, y1_l); ++ DUP4_ARG2(__lsx_vsllwil_w_h, ub0, 0, ub1, 0, vb0, 0, vb1, 0, ++ u0_l, u1_l, v0_l, v1_l); ++ y0_l = __lsx_vmul_w(y0_l, v_yalpha1); ++ u0_l = __lsx_vmul_w(u0_l, v_uvalpha1); ++ v0_l = __lsx_vmul_w(v0_l, v_uvalpha1); ++ y_l = __lsx_vmadd_w(y0_l, v_yalpha, y1_l); ++ u_l = __lsx_vmadd_w(u0_l, v_uvalpha, u1_l); ++ v_l = __lsx_vmadd_w(v0_l, v_uvalpha, v1_l); ++ u_l = __lsx_vsub_w(u_l, uv); ++ v_l = __lsx_vsub_w(v_l, uv); ++ y_l = __lsx_vsrai_w(y_l, 10); ++ u_l = __lsx_vsrai_w(u_l, 10); ++ v_l = __lsx_vsrai_w(v_l, 10); ++ YUVTORGB_LSX(y_l, u_l, v_l, R_l, G_l, B_l, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ ++ if (hasAlpha) { ++ __m128i a0, a1, a0_l; ++ __m128i a_l, a1_l; ++ ++ DUP2_ARG2(__lsx_vldx, abuf0, n, abuf1, n, a0, a1); ++ DUP2_ARG2(__lsx_vsllwil_w_h, a0, 0, a1, 0, a0_l, a1_l); ++ a_l = __lsx_vmadd_w(a_bias, a0_l, v_yalpha1); ++ a_l = __lsx_vmadd_w(a_l, v_yalpha, a1_l); ++ a_l = __lsx_vsrai_w(a_l, 19); ++ WRITE_FULL_A_LSX(R_l, G_l, B_l, a_l, 0, 0); ++ WRITE_FULL_A_LSX(R_l, G_l, B_l, a_l, 1, 1); ++ WRITE_FULL_A_LSX(R_l, G_l, B_l, a_l, 2, 2); ++ WRITE_FULL_A_LSX(R_l, G_l, B_l, a_l, 3, 3); ++ } else { ++ WRITE_FULL_LSX(R_l, G_l, B_l, 0, 0); ++ WRITE_FULL_LSX(R_l, G_l, B_l, 1, 1); ++ WRITE_FULL_LSX(R_l, G_l, B_l, 2, 2); ++ WRITE_FULL_LSX(R_l, G_l, B_l, 3, 3); ++ } ++ i += 4; ++ } ++ for (; i < dstW; i++){ ++ int Y = ( buf0[i] * yalpha1 + buf1[i] * yalpha ) >> 10; ++ int U = (ubuf0[i] * uvalpha1 + ubuf1[i] * uvalpha- uvtemp) >> 10; ++ int V = (vbuf0[i] * uvalpha1 + vbuf1[i] * uvalpha- uvtemp) >> 10; ++ ++ A = 0; ++ if (hasAlpha){ ++ A = (abuf0[i] * yalpha1 + abuf1[i] * yalpha + atemp) >> 19; ++ if (A & 0x100) ++ A = av_clip_uint8(A); ++ } ++ ++ Y -= y_offset; ++ Y *= y_coeff; ++ Y += ytemp; ++ R = (unsigned)Y + V * v2r_coe; ++ G = (unsigned)Y + V * v2g_coe + U * u2g_coe; ++ B = (unsigned)Y + U * u2b_coe; ++ yuv2rgb_write_full(c, dest, i, R, A, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ c->dither_error[0][i] = err[0]; ++ c->dither_error[1][i] = err[1]; ++ c->dither_error[2][i] = err[2]; ++} ++ ++static void ++yuv2rgb_full_1_template_lsx(SwsContext *c, const int16_t *buf0, ++ const int16_t *ubuf[2], const int16_t *vbuf[2], ++ const int16_t *abuf0, uint8_t *dest, int dstW, ++ int uvalpha, int y, enum AVPixelFormat target, ++ int hasAlpha) + { ++ const int16_t *ubuf0 = ubuf[0], *vbuf0 = vbuf[0]; ++ int i, B, G, R, A; ++ int step = (target == AV_PIX_FMT_RGB24 || target == AV_PIX_FMT_BGR24) ? 3 : 4; ++ int err[4] = {0}; ++ int ytemp = 1 << 21; ++ int bias_int = 64; ++ int len = dstW - 7; ++ __m128i y_temp = __lsx_vreplgr2vr_w(ytemp); ++ YUVTORGB_SETUP_LSX ++ ++ if( target == AV_PIX_FMT_BGR4_BYTE || target == AV_PIX_FMT_RGB4_BYTE ++ || target == AV_PIX_FMT_BGR8 || target == AV_PIX_FMT_RGB8) ++ step = 1; ++ if (uvalpha < 2048) { ++ int uvtemp = 128 << 7; ++ __m128i uv = __lsx_vreplgr2vr_w(uvtemp); ++ __m128i bias = __lsx_vreplgr2vr_w(bias_int); ++ ++ for (i = 0; i < len; i += 8) { ++ __m128i b, ub, vb, ub_l, ub_h, vb_l, vb_h; ++ __m128i y_l, y_h, u_l, u_h, v_l, v_h; ++ __m128i R_l, R_h, G_l, G_h, B_l, B_h; ++ int n = i << 1; ++ ++ DUP2_ARG2(__lsx_vldx, buf0, n, ubuf0, n, b, ub); ++ vb = __lsx_vldx(vbuf0, n); ++ y_l = __lsx_vsllwil_w_h(b, 2); ++ y_h = __lsx_vexth_w_h(b); ++ DUP2_ARG2(__lsx_vsllwil_w_h, ub, 0, vb, 0, ub_l, vb_l); ++ DUP2_ARG1(__lsx_vexth_w_h, ub, vb, ub_h, vb_h); ++ y_h = __lsx_vslli_w(y_h, 2); ++ u_l = __lsx_vsub_w(ub_l, uv); ++ u_h = __lsx_vsub_w(ub_h, uv); ++ v_l = __lsx_vsub_w(vb_l, uv); ++ v_h = __lsx_vsub_w(vb_h, uv); ++ u_l = __lsx_vslli_w(u_l, 2); ++ u_h = __lsx_vslli_w(u_h, 2); ++ v_l = __lsx_vslli_w(v_l, 2); ++ v_h = __lsx_vslli_w(v_h, 2); ++ YUVTORGB_LSX(y_l, u_l, v_l, R_l, G_l, B_l, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ YUVTORGB_LSX(y_h, u_h, v_h, R_h, G_h, B_h, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ ++ if(hasAlpha) { ++ __m128i a_src; ++ __m128i a_l, a_h; ++ ++ a_src = __lsx_vld(abuf0 + i, 0); ++ a_l = __lsx_vsllwil_w_h(a_src, 0); ++ a_h = __lsx_vexth_w_h(a_src); ++ a_l = __lsx_vadd_w(a_l, bias); ++ a_h = __lsx_vadd_w(a_h, bias); ++ a_l = __lsx_vsrai_w(a_l, 7); ++ a_h = __lsx_vsrai_w(a_h, 7); ++ WRITE_FULL_A_LSX(R_l, G_l, B_l, a_l, 0, 0); ++ WRITE_FULL_A_LSX(R_l, G_l, B_l, a_l, 1, 1); ++ WRITE_FULL_A_LSX(R_l, G_l, B_l, a_l, 2, 2); ++ WRITE_FULL_A_LSX(R_l, G_l, B_l, a_l, 3, 3); ++ WRITE_FULL_A_LSX(R_h, G_h, B_h, a_h, 0, 4); ++ WRITE_FULL_A_LSX(R_h, G_h, B_h, a_h, 1, 5); ++ WRITE_FULL_A_LSX(R_h, G_h, B_h, a_h, 2, 6); ++ WRITE_FULL_A_LSX(R_h, G_h, B_h, a_h, 3, 7); ++ } else { ++ WRITE_FULL_LSX(R_l, G_l, B_l, 0, 0); ++ WRITE_FULL_LSX(R_l, G_l, B_l, 1, 1); ++ WRITE_FULL_LSX(R_l, G_l, B_l, 2, 2); ++ WRITE_FULL_LSX(R_l, G_l, B_l, 3, 3); ++ WRITE_FULL_LSX(R_h, G_h, B_h, 0, 4); ++ WRITE_FULL_LSX(R_h, G_h, B_h, 1, 5); ++ WRITE_FULL_LSX(R_h, G_h, B_h, 2, 6); ++ WRITE_FULL_LSX(R_h, G_h, B_h, 3, 7); ++ } ++ } ++ if (dstW - i >= 4) { ++ __m128i b, ub, vb, ub_l, vb_l; ++ __m128i y_l, u_l, v_l; ++ __m128i R_l, G_l, B_l; ++ int n = i << 1; ++ ++ DUP2_ARG2(__lsx_vldx, buf0, n, ubuf0, n, b, ub); ++ vb = __lsx_vldx(vbuf0, n); ++ y_l = __lsx_vsllwil_w_h(b, 0); ++ DUP2_ARG2(__lsx_vsllwil_w_h, ub, 0, vb, 0, ub_l, vb_l); ++ y_l = __lsx_vslli_w(y_l, 2); ++ u_l = __lsx_vsub_w(ub_l, uv); ++ v_l = __lsx_vsub_w(vb_l, uv); ++ u_l = __lsx_vslli_w(u_l, 2); ++ v_l = __lsx_vslli_w(v_l, 2); ++ YUVTORGB_LSX(y_l, u_l, v_l, R_l, G_l, B_l, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ ++ if(hasAlpha) { ++ __m128i a_src, a_l; ++ ++ a_src = __lsx_vldx(abuf0, n); ++ a_src = __lsx_vsllwil_w_h(a_src, 0); ++ a_l = __lsx_vadd_w(bias, a_src); ++ a_l = __lsx_vsrai_w(a_l, 7); ++ WRITE_FULL_A_LSX(R_l, G_l, B_l, a_l, 0, 0); ++ WRITE_FULL_A_LSX(R_l, G_l, B_l, a_l, 1, 1); ++ WRITE_FULL_A_LSX(R_l, G_l, B_l, a_l, 2, 2); ++ WRITE_FULL_A_LSX(R_l, G_l, B_l, a_l, 3, 3); ++ } else { ++ WRITE_FULL_LSX(R_l, G_l, B_l, 0, 0); ++ WRITE_FULL_LSX(R_l, G_l, B_l, 1, 1); ++ WRITE_FULL_LSX(R_l, G_l, B_l, 2, 2); ++ WRITE_FULL_LSX(R_l, G_l, B_l, 3, 3); ++ } ++ i += 4; ++ } ++ for (; i < dstW; i++) { ++ int Y = buf0[i] << 2; ++ int U = (ubuf0[i] - uvtemp) << 2; ++ int V = (vbuf0[i] - uvtemp) << 2; ++ ++ A = 0; ++ if(hasAlpha) { ++ A = (abuf0[i] + 64) >> 7; ++ if (A & 0x100) ++ A = av_clip_uint8(A); ++ } ++ Y -= y_offset; ++ Y *= y_coeff; ++ Y += ytemp; ++ R = (unsigned)Y + V * v2r_coe; ++ G = (unsigned)Y + V * v2g_coe + U * u2g_coe; ++ B = (unsigned)Y + U * u2b_coe; ++ yuv2rgb_write_full(c, dest, i, R, A, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ } else { ++ const int16_t *ubuf1 = ubuf[1], *vbuf1 = vbuf[1]; ++ int uvtemp = 128 << 8; ++ __m128i uv = __lsx_vreplgr2vr_w(uvtemp); ++ __m128i zero = __lsx_vldi(0); ++ __m128i bias = __lsx_vreplgr2vr_h(bias_int); ++ ++ for (i = 0; i < len; i += 8) { ++ __m128i b, ub0, ub1, vb0, vb1; ++ __m128i y_ev, y_od, u_ev, u_od, v_ev, v_od; ++ __m128i R_ev, R_od, G_ev, G_od, B_ev, B_od; ++ int n = i << 1; ++ ++ DUP4_ARG2(__lsx_vldx, buf0, n, ubuf0, n, vbuf0, n, ++ ubuf1, n, b, ub0, vb0, ub1); ++ vb1 = __lsx_vldx(vbuf, n); ++ y_ev = __lsx_vaddwev_w_h(b, zero); ++ y_od = __lsx_vaddwod_w_h(b, zero); ++ DUP2_ARG2(__lsx_vaddwev_w_h, ub0, vb0, ub1, vb1, u_ev, v_ev); ++ DUP2_ARG2(__lsx_vaddwod_w_h, ub0, vb0, ub1, vb1, u_od, v_od); ++ DUP2_ARG2(__lsx_vslli_w, y_ev, 2, y_od, 2, y_ev, y_od); ++ DUP4_ARG2(__lsx_vsub_w, u_ev, uv, u_od, uv, v_ev, uv, v_od, uv, ++ u_ev, u_od, v_ev, v_od); ++ DUP4_ARG2(__lsx_vslli_w, u_ev, 1, u_od, 1, v_ev, 1, v_od, 1, ++ u_ev, u_od, v_ev, v_od); ++ YUVTORGB_LSX(y_ev, u_ev, v_ev, R_ev, G_ev, B_ev, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ YUVTORGB_LSX(y_od, u_od, v_od, R_od, G_od, B_od, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ ++ if(hasAlpha) { ++ __m128i a_src; ++ __m128i a_ev, a_od; ++ ++ a_src = __lsx_vld(abuf0 + i, 0); ++ a_ev = __lsx_vaddwev_w_h(bias, a_src); ++ a_od = __lsx_vaddwod_w_h(bias, a_src); ++ a_ev = __lsx_vsrai_w(a_ev, 7); ++ a_od = __lsx_vsrai_w(a_od, 7); ++ WRITE_FULL_A_LSX(R_ev, G_ev, B_ev, a_ev, 0, 0); ++ WRITE_FULL_A_LSX(R_od, G_od, B_od, a_od, 0, 1); ++ WRITE_FULL_A_LSX(R_ev, G_ev, B_ev, a_ev, 1, 2); ++ WRITE_FULL_A_LSX(R_od, G_od, B_od, a_od, 1, 3); ++ WRITE_FULL_A_LSX(R_ev, G_ev, B_ev, a_ev, 2, 4); ++ WRITE_FULL_A_LSX(R_od, G_od, B_od, a_od, 2, 5); ++ WRITE_FULL_A_LSX(R_ev, G_ev, B_ev, a_ev, 3, 6); ++ WRITE_FULL_A_LSX(R_od, G_od, B_od, a_od, 3, 7); ++ } else { ++ WRITE_FULL_LSX(R_ev, G_ev, B_ev, 0, 0); ++ WRITE_FULL_LSX(R_od, G_od, B_od, 0, 1); ++ WRITE_FULL_LSX(R_ev, G_ev, B_ev, 1, 2); ++ WRITE_FULL_LSX(R_od, G_od, B_od, 1, 3); ++ WRITE_FULL_LSX(R_ev, G_ev, B_ev, 2, 4); ++ WRITE_FULL_LSX(R_od, G_od, B_od, 2, 5); ++ WRITE_FULL_LSX(R_ev, G_ev, B_ev, 3, 6); ++ WRITE_FULL_LSX(R_od, G_od, B_od, 3, 7); ++ } ++ } ++ if (dstW - i >= 4) { ++ __m128i b, ub0, ub1, vb0, vb1; ++ __m128i y_l, u_l, v_l; ++ __m128i R_l, G_l, B_l; ++ int n = i << 1; ++ ++ DUP4_ARG2(__lsx_vldx, buf0, n, ubuf0, n, vbuf0, n, ++ ubuf1, n, b, ub0, vb0, ub1); ++ vb1 = __lsx_vldx(vbuf1, n); ++ y_l = __lsx_vsllwil_w_h(b, 0); ++ y_l = __lsx_vslli_w(y_l, 2); ++ DUP4_ARG2(__lsx_vsllwil_w_h, ub0, 0, vb0, 0, ub1, 0, vb1, 0, ++ ub0, vb0, ub1, vb1); ++ DUP2_ARG2(__lsx_vadd_w, ub0, ub1, vb0, vb1, u_l, v_l); ++ u_l = __lsx_vsub_w(u_l, uv); ++ v_l = __lsx_vsub_w(v_l, uv); ++ u_l = __lsx_vslli_w(u_l, 1); ++ v_l = __lsx_vslli_w(v_l, 1); ++ YUVTORGB_LSX(y_l, u_l, v_l, R_l, G_l, B_l, offset, coeff, ++ y_temp, v2r, v2g, u2g, u2b); ++ ++ if(hasAlpha) { ++ __m128i a_src; ++ __m128i a_l; ++ ++ a_src = __lsx_vld(abuf0 + i, 0); ++ a_src = __lsx_vilvl_h(a_src, a_src); ++ a_l = __lsx_vaddwev_w_h(bias, a_l); ++ a_l = __lsx_vsrai_w(a_l, 7); ++ WRITE_FULL_A_LSX(R_l, G_l, B_l, a_l, 0, 0); ++ WRITE_FULL_A_LSX(R_l, G_l, B_l, a_l, 1, 1); ++ WRITE_FULL_A_LSX(R_l, G_l, B_l, a_l, 2, 2); ++ WRITE_FULL_A_LSX(R_l, G_l, B_l, a_l, 3, 3); ++ } else { ++ WRITE_FULL_LSX(R_l, G_l, B_l, 0, 0); ++ WRITE_FULL_LSX(R_l, G_l, B_l, 1, 1); ++ WRITE_FULL_LSX(R_l, G_l, B_l, 2, 2); ++ WRITE_FULL_LSX(R_l, G_l, B_l, 3, 3); ++ } ++ i += 4; ++ } ++ for (; i < dstW; i++) { ++ int Y = buf0[i] << 2; ++ int U = (ubuf0[i] + ubuf1[i] - uvtemp) << 1; ++ int V = (vbuf0[i] + vbuf1[i] - uvtemp) << 1; ++ ++ A = 0; ++ if(hasAlpha) { ++ A = (abuf0[i] + 64) >> 7; ++ if (A & 0x100) ++ A = av_clip_uint8(A); ++ } ++ Y -= y_offset; ++ Y *= y_coeff; ++ Y += ytemp; ++ R = (unsigned)Y + V * v2r_coe; ++ G = (unsigned)Y + V * v2g_coe + U * u2g_coe; ++ B = (unsigned)Y + U * u2b_coe; ++ yuv2rgb_write_full(c, dest, i, R, A, G, B, y, target, hasAlpha, err); ++ dest += step; ++ } ++ } ++ c->dither_error[0][i] = err[0]; ++ c->dither_error[1][i] = err[1]; ++ c->dither_error[2][i] = err[2]; ++} ++ ++#if CONFIG_SMALL ++YUV2RGBWRAPPER(yuv2, rgb_full, bgra32_full, AV_PIX_FMT_BGRA, ++ CONFIG_SWSCALE_ALPHA && c->needAlpha) ++YUV2RGBWRAPPER(yuv2, rgb_full, abgr32_full, AV_PIX_FMT_ABGR, ++ CONFIG_SWSCALE_ALPHA && c->needAlpha) ++YUV2RGBWRAPPER(yuv2, rgb_full, rgba32_full, AV_PIX_FMT_RGBA, ++ CONFIG_SWSCALE_ALPHA && c->needAlpha) ++YUV2RGBWRAPPER(yuv2, rgb_full, argb32_full, AV_PIX_FMT_ARGB, ++ CONFIG_SWSCALE_ALPHA && c->needAlpha) ++#else ++#if CONFIG_SWSCALE_ALPHA ++YUV2RGBWRAPPER(yuv2, rgb_full, bgra32_full, AV_PIX_FMT_BGRA, 1) ++YUV2RGBWRAPPER(yuv2, rgb_full, abgr32_full, AV_PIX_FMT_ABGR, 1) ++YUV2RGBWRAPPER(yuv2, rgb_full, rgba32_full, AV_PIX_FMT_RGBA, 1) ++YUV2RGBWRAPPER(yuv2, rgb_full, argb32_full, AV_PIX_FMT_ARGB, 1) ++#endif ++YUV2RGBWRAPPER(yuv2, rgb_full, bgrx32_full, AV_PIX_FMT_BGRA, 0) ++YUV2RGBWRAPPER(yuv2, rgb_full, xbgr32_full, AV_PIX_FMT_ABGR, 0) ++YUV2RGBWRAPPER(yuv2, rgb_full, rgbx32_full, AV_PIX_FMT_RGBA, 0) ++YUV2RGBWRAPPER(yuv2, rgb_full, xrgb32_full, AV_PIX_FMT_ARGB, 0) ++#endif ++YUV2RGBWRAPPER(yuv2, rgb_full, bgr24_full, AV_PIX_FMT_BGR24, 0) ++YUV2RGBWRAPPER(yuv2, rgb_full, rgb24_full, AV_PIX_FMT_RGB24, 0) + ++YUV2RGBWRAPPER(yuv2, rgb_full, bgr4_byte_full, AV_PIX_FMT_BGR4_BYTE, 0) ++YUV2RGBWRAPPER(yuv2, rgb_full, rgb4_byte_full, AV_PIX_FMT_RGB4_BYTE, 0) ++YUV2RGBWRAPPER(yuv2, rgb_full, bgr8_full, AV_PIX_FMT_BGR8, 0) ++YUV2RGBWRAPPER(yuv2, rgb_full, rgb8_full, AV_PIX_FMT_RGB8, 0) ++ ++ ++av_cold void ff_sws_init_output_lsx(SwsContext *c) ++{ + if(c->flags & SWS_FULL_CHR_H_INT) { ++ switch (c->dstFormat) { ++ case AV_PIX_FMT_RGBA: ++#if CONFIG_SMALL ++ c->yuv2packedX = yuv2rgba32_full_X_lsx; ++ c->yuv2packed2 = yuv2rgba32_full_2_lsx; ++ c->yuv2packed1 = yuv2rgba32_full_1_lsx; ++#else ++#if CONFIG_SWSCALE_ALPHA ++ if (c->needAlpha) { ++ c->yuv2packedX = yuv2rgba32_full_X_lsx; ++ c->yuv2packed2 = yuv2rgba32_full_2_lsx; ++ c->yuv2packed1 = yuv2rgba32_full_1_lsx; ++ } else ++#endif /* CONFIG_SWSCALE_ALPHA */ ++ { ++ c->yuv2packedX = yuv2rgbx32_full_X_lsx; ++ c->yuv2packed2 = yuv2rgbx32_full_2_lsx; ++ c->yuv2packed1 = yuv2rgbx32_full_1_lsx; ++ } ++#endif /* !CONFIG_SMALL */ ++ break; ++ case AV_PIX_FMT_ARGB: ++#if CONFIG_SMALL ++ c->yuv2packedX = yuv2argb32_full_X_lsx; ++ c->yuv2packed2 = yuv2argb32_full_2_lsx; ++ c->yuv2packed1 = yuv2argb32_full_1_lsx; ++#else ++#if CONFIG_SWSCALE_ALPHA ++ if (c->needAlpha) { ++ c->yuv2packedX = yuv2argb32_full_X_lsx; ++ c->yuv2packed2 = yuv2argb32_full_2_lsx; ++ c->yuv2packed1 = yuv2argb32_full_1_lsx; ++ } else ++#endif /* CONFIG_SWSCALE_ALPHA */ ++ { ++ c->yuv2packedX = yuv2xrgb32_full_X_lsx; ++ c->yuv2packed2 = yuv2xrgb32_full_2_lsx; ++ c->yuv2packed1 = yuv2xrgb32_full_1_lsx; ++ } ++#endif /* !CONFIG_SMALL */ ++ break; ++ case AV_PIX_FMT_BGRA: ++#if CONFIG_SMALL ++ c->yuv2packedX = yuv2bgra32_full_X_lsx; ++ c->yuv2packed2 = yuv2bgra32_full_2_lsx; ++ c->yuv2packed1 = yuv2bgra32_full_1_lsx; ++#else ++#if CONFIG_SWSCALE_ALPHA ++ if (c->needAlpha) { ++ c->yuv2packedX = yuv2bgra32_full_X_lsx; ++ c->yuv2packed2 = yuv2bgra32_full_2_lsx; ++ c->yuv2packed1 = yuv2bgra32_full_1_lsx; ++ } else ++#endif /* CONFIG_SWSCALE_ALPHA */ ++ { ++ c->yuv2packedX = yuv2bgrx32_full_X_lsx; ++ c->yuv2packed2 = yuv2bgrx32_full_2_lsx; ++ c->yuv2packed1 = yuv2bgrx32_full_1_lsx; ++ } ++#endif /* !CONFIG_SMALL */ ++ break; ++ case AV_PIX_FMT_ABGR: ++#if CONFIG_SMALL ++ c->yuv2packedX = yuv2abgr32_full_X_lsx; ++ c->yuv2packed2 = yuv2abgr32_full_2_lsx; ++ c->yuv2packed1 = yuv2abgr32_full_1_lsx; ++#else ++#if CONFIG_SWSCALE_ALPHA ++ if (c->needAlpha) { ++ c->yuv2packedX = yuv2abgr32_full_X_lsx; ++ c->yuv2packed2 = yuv2abgr32_full_2_lsx; ++ c->yuv2packed1 = yuv2abgr32_full_1_lsx; ++ } else ++#endif /* CONFIG_SWSCALE_ALPHA */ ++ { ++ c->yuv2packedX = yuv2xbgr32_full_X_lsx; ++ c->yuv2packed2 = yuv2xbgr32_full_2_lsx; ++ c->yuv2packed1 = yuv2xbgr32_full_1_lsx; ++ } ++#endif /* !CONFIG_SMALL */ ++ break; ++ case AV_PIX_FMT_RGB24: ++ c->yuv2packedX = yuv2rgb24_full_X_lsx; ++ c->yuv2packed2 = yuv2rgb24_full_2_lsx; ++ c->yuv2packed1 = yuv2rgb24_full_1_lsx; ++ break; ++ case AV_PIX_FMT_BGR24: ++ c->yuv2packedX = yuv2bgr24_full_X_lsx; ++ c->yuv2packed2 = yuv2bgr24_full_2_lsx; ++ c->yuv2packed1 = yuv2bgr24_full_1_lsx; ++ break; ++ case AV_PIX_FMT_BGR4_BYTE: ++ c->yuv2packedX = yuv2bgr4_byte_full_X_lsx; ++ c->yuv2packed2 = yuv2bgr4_byte_full_2_lsx; ++ c->yuv2packed1 = yuv2bgr4_byte_full_1_lsx; ++ break; ++ case AV_PIX_FMT_RGB4_BYTE: ++ c->yuv2packedX = yuv2rgb4_byte_full_X_lsx; ++ c->yuv2packed2 = yuv2rgb4_byte_full_2_lsx; ++ c->yuv2packed1 = yuv2rgb4_byte_full_1_lsx; ++ break; ++ case AV_PIX_FMT_BGR8: ++ c->yuv2packedX = yuv2bgr8_full_X_lsx; ++ c->yuv2packed2 = yuv2bgr8_full_2_lsx; ++ c->yuv2packed1 = yuv2bgr8_full_1_lsx; ++ break; ++ case AV_PIX_FMT_RGB8: ++ c->yuv2packedX = yuv2rgb8_full_X_lsx; ++ c->yuv2packed2 = yuv2rgb8_full_2_lsx; ++ c->yuv2packed1 = yuv2rgb8_full_1_lsx; ++ break; ++ } + } else { + switch (c->dstFormat) { + case AV_PIX_FMT_RGB32: +@@ -520,6 +1750,8 @@ av_cold void ff_sws_init_output_lsx(SwsContext *c) + } else + #endif /* CONFIG_SWSCALE_ALPHA */ + { ++ c->yuv2packed1 = yuv2rgbx32_1_lsx; ++ c->yuv2packed2 = yuv2rgbx32_2_lsx; + c->yuv2packedX = yuv2rgbx32_X_lsx; + } + #endif /* !CONFIG_SMALL */ +@@ -533,44 +1765,62 @@ av_cold void ff_sws_init_output_lsx(SwsContext *c) + } else + #endif /* CONFIG_SWSCALE_ALPHA */ + { ++ c->yuv2packed1 = yuv2rgbx32_1_1_lsx; ++ c->yuv2packed2 = yuv2rgbx32_1_2_lsx; + c->yuv2packedX = yuv2rgbx32_1_X_lsx; + } + #endif /* !CONFIG_SMALL */ + break; + case AV_PIX_FMT_RGB24: ++ c->yuv2packed1 = yuv2rgb24_1_lsx; ++ c->yuv2packed2 = yuv2rgb24_2_lsx; + c->yuv2packedX = yuv2rgb24_X_lsx; + break; + case AV_PIX_FMT_BGR24: ++ c->yuv2packed1 = yuv2bgr24_1_lsx; ++ c->yuv2packed2 = yuv2bgr24_2_lsx; + c->yuv2packedX = yuv2bgr24_X_lsx; + break; + case AV_PIX_FMT_RGB565LE: + case AV_PIX_FMT_RGB565BE: + case AV_PIX_FMT_BGR565LE: + case AV_PIX_FMT_BGR565BE: ++ c->yuv2packed1 = yuv2rgb16_1_lsx; ++ c->yuv2packed2 = yuv2rgb16_2_lsx; + c->yuv2packedX = yuv2rgb16_X_lsx; + break; + case AV_PIX_FMT_RGB555LE: + case AV_PIX_FMT_RGB555BE: + case AV_PIX_FMT_BGR555LE: + case AV_PIX_FMT_BGR555BE: ++ c->yuv2packed1 = yuv2rgb15_1_lsx; ++ c->yuv2packed2 = yuv2rgb15_2_lsx; + c->yuv2packedX = yuv2rgb15_X_lsx; + break; + case AV_PIX_FMT_RGB444LE: + case AV_PIX_FMT_RGB444BE: + case AV_PIX_FMT_BGR444LE: + case AV_PIX_FMT_BGR444BE: ++ c->yuv2packed1 = yuv2rgb12_1_lsx; ++ c->yuv2packed2 = yuv2rgb12_2_lsx; + c->yuv2packedX = yuv2rgb12_X_lsx; + break; + case AV_PIX_FMT_RGB8: + case AV_PIX_FMT_BGR8: ++ c->yuv2packed1 = yuv2rgb8_1_lsx; ++ c->yuv2packed2 = yuv2rgb8_2_lsx; + c->yuv2packedX = yuv2rgb8_X_lsx; + break; + case AV_PIX_FMT_RGB4: + case AV_PIX_FMT_BGR4: ++ c->yuv2packed1 = yuv2rgb4_1_lsx; ++ c->yuv2packed2 = yuv2rgb4_2_lsx; + c->yuv2packedX = yuv2rgb4_X_lsx; + break; + case AV_PIX_FMT_RGB4_BYTE: + case AV_PIX_FMT_BGR4_BYTE: ++ c->yuv2packed1 = yuv2rgb4b_1_lsx; ++ c->yuv2packed2 = yuv2rgb4b_2_lsx; + c->yuv2packedX = yuv2rgb4b_X_lsx; + break; + } +-- +2.20.1 + diff --git a/package/ffmpeg/Config.in b/package/ffmpeg/Config.in new file mode 100644 index 00000000..2efef7dd --- /dev/null +++ b/package/ffmpeg/Config.in @@ -0,0 +1,188 @@ +config BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS + bool + default y + # fenv.h lacks FE_INVALID, FE_OVERFLOW & FE_UNDERFLOW on nios2 + depends on !BR2_nios2 + # No support for ARMv7-M in the ARM assembly logic + depends on !BR2_ARM_CPU_ARMV7M + # m68k coldfire causes a build failure, because the check for + # atomics (atomic_store) succeeds, which causes ffmpeg to + # think atomic intrinsics are available, while they are + # not. See https://patchwork.ozlabs.org/patch/756664/ and + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68467 for more + # details. + depends on !BR2_m68k_cf + # assertion fail in binutils + depends on !(BR2_or1k && !BR2_TOOLCHAIN_GCC_AT_LEAST_9) + +menuconfig BR2_PACKAGE_FFMPEG + bool "ffmpeg" + depends on BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS + help + FFmpeg is a complete, cross-platform solution to record, + convert and stream audio and video. + + http://www.ffmpeg.org + +if BR2_PACKAGE_FFMPEG + +config BR2_PACKAGE_FFMPEG_GPL + bool "Enable GPL code" + help + allow use of GPL code, the resulting libs and binaries will + be under GPL + +config BR2_PACKAGE_FFMPEG_NONFREE + bool "Enable nonfree code" + help + allow use of nonfree code, the resulting libs and binaries + will be unredistributable + +config BR2_PACKAGE_FFMPEG_FFMPEG + bool "Build ffmpeg (the command line application)" + default y + help + FFmpeg is a very fast video and audio converter. + It can also grab from a live audio/video source. + + It is not needed if you want to link the FFmpeg libraries + to your application. + +config BR2_PACKAGE_FFMPEG_FFPLAY + bool "Build ffplay" + depends on !BR2_STATIC_LIBS # sdl2 + select BR2_PACKAGE_FFMPEG_SWSCALE + select BR2_PACKAGE_SDL2 + help + FFplay is a very simple and portable media player using the + FFmpeg libraries and the SDL library. + It is mostly used as a testbed for the various FFmpeg APIs. + +comment "ffplay needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +config BR2_PACKAGE_FFMPEG_FFPROBE + bool "Build ffprobe" + help + FFprobe is a utility to determine the audio and video + characteristics of a container file. + +config BR2_PACKAGE_FFMPEG_XCBGRAB + bool "Build X11 screen grabbing" + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_LIBXCB + help + X11 screen grabbing using libxcb. + +config BR2_PACKAGE_FFMPEG_AVRESAMPLE + bool "Build libavresample" + help + Avresample is a audio conversion library for compatibility. + +config BR2_PACKAGE_FFMPEG_POSTPROC + bool "Build libpostproc" + depends on BR2_PACKAGE_FFMPEG_GPL + help + Postproc is a library of video postprocessing routines. + +config BR2_PACKAGE_FFMPEG_SWSCALE + bool "Build libswscale" + help + Swscale is a library of video scaling routines. + +config BR2_PACKAGE_FFMPEG_ENCODERS + string "Enabled encoders" + default "all" + help + Space-separated list of encoders to build in FFmpeg, + or "all" to build all of them. + + Run ./configure --list-encoders in the ffmpeg sources + directory to know the available options. + +config BR2_PACKAGE_FFMPEG_DECODERS + string "Enabled decoders" + default "all" + help + Space-separated list of decoders to build in FFmpeg, + or "all" to build all of them. + + Run ./configure --list-decoders in the ffmpeg sources + directory to know the available options. + +config BR2_PACKAGE_FFMPEG_MUXERS + string "Enabled muxers" + default "all" + help + Space-separated list of muxers to build in FFmpeg, + or "all" to build all of them. + + Run ./configure --list-muxers in the ffmpeg sources + directory to know the available options. + +config BR2_PACKAGE_FFMPEG_DEMUXERS + string "Enabled demuxers" + default "all" + help + Space-separated list of demuxers to build in FFmpeg, + or "all" to build all of them. + + Run ./configure --list-demuxers in the ffmpeg sources + directory to know the available options. + +config BR2_PACKAGE_FFMPEG_PARSERS + string "Enabled parsers" + default "all" + help + Space-separated list of parsers to build in FFmpeg, + or "all" to build all of them. + + Run ./configure --list-parsers in the ffmpeg sources + directory to know the available options. + +config BR2_PACKAGE_FFMPEG_BSFS + string "Enabled bitstreams" + default "all" + help + Space-separated list of bitstream filters to build in FFmpeg, + or "all" to build all of them. + + Run ./configure --list-bsfs in the ffmpeg sources + directory to know the available options. + +config BR2_PACKAGE_FFMPEG_PROTOCOLS + string "Enabled protocols" + default "all" + help + Space-separated list of protocols to build in FFmpeg, + or "all" to build all of them. + + Run ./configure --list-protocols in the ffmpeg sources + directory to know the available options. + +config BR2_PACKAGE_FFMPEG_FILTERS + string "Enabled filters" + default "all" + help + Space-separated list of filters to build in FFmpeg, + or "all" to build all of them. + + Run ./configure --list-filters in the ffmpeg sources + directory to know the available options. + +config BR2_PACKAGE_FFMPEG_INDEVS + bool "Enable input devices" + default y + +config BR2_PACKAGE_FFMPEG_OUTDEVS + bool "Enable output devices" + default y + +config BR2_PACKAGE_FFMPEG_EXTRACONF + string "Additional parameters for ./configure" + default "" + help + Extra parameters that will be appended to FFmpeg's + ./configure commandline. + +endif diff --git a/package/ffmpeg/ffmpeg.hash b/package/ffmpeg/ffmpeg.hash new file mode 100644 index 00000000..399e90f1 --- /dev/null +++ b/package/ffmpeg/ffmpeg.hash @@ -0,0 +1,6 @@ +# Locally calculated +sha256 46e4e64f1dd0233cbc0934b9f1c0da676008cad34725113fb7f802cfa84ccddb ffmpeg-4.3.2.tar.xz +sha256 59c9dbdd4acca890be865950b0738c85ff02021beede66a215fa33938937f603 ffmpeg_4.1.6.orig.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING.GPLv2 +sha256 b634ab5640e258563c536e658cad87080553df6f34f62269a21d554844e58bfe COPYING.LGPLv2.1 +sha256 cb48bf09a11f5fb576cddb0431c8f5ed0a60157a9ec942adffc13907cbe083f2 LICENSE.md diff --git a/package/ffmpeg/ffmpeg.mk b/package/ffmpeg/ffmpeg.mk new file mode 100644 index 00000000..42495813 --- /dev/null +++ b/package/ffmpeg/ffmpeg.mk @@ -0,0 +1,586 @@ +################################################################################ +# +# ffmpeg +# +################################################################################ + +FFMPEG_VERSION = 4.1.6 +FFMPEG_SOURCE = ffmpeg_$(FFMPEG_VERSION).orig.tar.gz +#FFMPEG_SITE = http://ffmpeg.org/releases +FFMPEG_SITE = https://pkg.loongnix.cn/loongnix/pool/main/f/ffmpeg +FFMPEG_INSTALL_STAGING = YES + +FFMPEG_LICENSE = LGPL-2.1+, libjpeg license +FFMPEG_LICENSE_FILES = LICENSE.md COPYING.LGPLv2.1 +ifeq ($(BR2_PACKAGE_FFMPEG_GPL),y) +FFMPEG_LICENSE += and GPL-2.0+ +FFMPEG_LICENSE_FILES += COPYING.GPLv2 +endif + +FFMPEG_CPE_ID_VENDOR = ffmpeg + +FFMPEG_CONF_OPTS = \ + --prefix=/usr \ + --enable-avfilter \ + --disable-version3 \ + --enable-logging \ + --enable-optimizations \ + --disable-extra-warnings \ + --enable-avdevice \ + --enable-avcodec \ + --enable-avformat \ + --enable-network \ + --disable-gray \ + --enable-swscale-alpha \ + --disable-small \ + --enable-dct \ + --enable-fft \ + --enable-mdct \ + --enable-rdft \ + --disable-crystalhd \ + --disable-dxva2 \ + --enable-runtime-cpudetect \ + --disable-hardcoded-tables \ + --disable-mipsdsp \ + --disable-mipsdspr2 \ + --disable-msa \ + --enable-hwaccels \ + --disable-cuda \ + --disable-cuvid \ + --disable-nvenc \ + --disable-avisynth \ + --disable-frei0r \ + --disable-libopencore-amrnb \ + --disable-libopencore-amrwb \ + --disable-libdc1394 \ + --disable-libgsm \ + --disable-libilbc \ + --disable-libvo-amrwbenc \ + --disable-symver \ + --disable-doc + +FFMPEG_DEPENDENCIES += host-pkgconf + +ifeq ($(BR2_PACKAGE_FFMPEG_GPL),y) +FFMPEG_CONF_OPTS += --enable-gpl +else +FFMPEG_CONF_OPTS += --disable-gpl +endif + +ifeq ($(BR2_PACKAGE_FFMPEG_NONFREE),y) +FFMPEG_CONF_OPTS += --enable-nonfree +else +FFMPEG_CONF_OPTS += --disable-nonfree +endif + +ifeq ($(BR2_PACKAGE_FFMPEG_FFMPEG),y) +FFMPEG_CONF_OPTS += --enable-ffmpeg +else +FFMPEG_CONF_OPTS += --disable-ffmpeg +endif + +ifeq ($(BR2_PACKAGE_FFMPEG_FFPLAY),y) +FFMPEG_DEPENDENCIES += sdl2 +FFMPEG_CONF_OPTS += --enable-ffplay +FFMPEG_CONF_ENV += SDL_CONFIG=$(STAGING_DIR)/usr/bin/sdl2-config +else +FFMPEG_CONF_OPTS += --disable-ffplay +endif + +ifeq ($(BR2_PACKAGE_LIBV4L),y) +FFMPEG_DEPENDENCIES += libv4l +FFMPEG_CONF_OPTS += --enable-libv4l2 +else +FFMPEG_CONF_OPTS += --disable-libv4l2 +endif + +ifeq ($(BR2_PACKAGE_FFMPEG_AVRESAMPLE),y) +FFMPEG_CONF_OPTS += --enable-avresample +else +FFMPEG_CONF_OPTS += --disable-avresample +endif + +ifeq ($(BR2_PACKAGE_FFMPEG_FFPROBE),y) +FFMPEG_CONF_OPTS += --enable-ffprobe +else +FFMPEG_CONF_OPTS += --disable-ffprobe +endif + +ifeq ($(BR2_PACKAGE_FFMPEG_XCBGRAB),y) +FFMPEG_CONF_OPTS += \ + --enable-libxcb \ + --enable-libxcb-shape \ + --enable-libxcb-shm \ + --enable-libxcb-xfixes +FFMPEG_DEPENDENCIES += libxcb +else +FFMPEG_CONF_OPTS += --disable-libxcb +endif + +ifeq ($(BR2_PACKAGE_FFMPEG_POSTPROC),y) +FFMPEG_CONF_OPTS += --enable-postproc +else +FFMPEG_CONF_OPTS += --disable-postproc +endif + +ifeq ($(BR2_PACKAGE_FFMPEG_SWSCALE),y) +FFMPEG_CONF_OPTS += --enable-swscale +else +FFMPEG_CONF_OPTS += --disable-swscale +endif + +ifneq ($(call qstrip,$(BR2_PACKAGE_FFMPEG_ENCODERS)),all) +FFMPEG_CONF_OPTS += --disable-encoders \ + $(foreach x,$(call qstrip,$(BR2_PACKAGE_FFMPEG_ENCODERS)),--enable-encoder=$(x)) +endif + +ifneq ($(call qstrip,$(BR2_PACKAGE_FFMPEG_DECODERS)),all) +FFMPEG_CONF_OPTS += --disable-decoders \ + $(foreach x,$(call qstrip,$(BR2_PACKAGE_FFMPEG_DECODERS)),--enable-decoder=$(x)) +endif + +ifneq ($(call qstrip,$(BR2_PACKAGE_FFMPEG_MUXERS)),all) +FFMPEG_CONF_OPTS += --disable-muxers \ + $(foreach x,$(call qstrip,$(BR2_PACKAGE_FFMPEG_MUXERS)),--enable-muxer=$(x)) +endif + +ifneq ($(call qstrip,$(BR2_PACKAGE_FFMPEG_DEMUXERS)),all) +FFMPEG_CONF_OPTS += --disable-demuxers \ + $(foreach x,$(call qstrip,$(BR2_PACKAGE_FFMPEG_DEMUXERS)),--enable-demuxer=$(x)) +endif + +ifneq ($(call qstrip,$(BR2_PACKAGE_FFMPEG_PARSERS)),all) +FFMPEG_CONF_OPTS += --disable-parsers \ + $(foreach x,$(call qstrip,$(BR2_PACKAGE_FFMPEG_PARSERS)),--enable-parser=$(x)) +endif + +ifneq ($(call qstrip,$(BR2_PACKAGE_FFMPEG_BSFS)),all) +FFMPEG_CONF_OPTS += --disable-bsfs \ + $(foreach x,$(call qstrip,$(BR2_PACKAGE_FFMPEG_BSFS)),--enable-bsf=$(x)) +endif + +ifneq ($(call qstrip,$(BR2_PACKAGE_FFMPEG_PROTOCOLS)),all) +FFMPEG_CONF_OPTS += --disable-protocols \ + $(foreach x,$(call qstrip,$(BR2_PACKAGE_FFMPEG_PROTOCOLS)),--enable-protocol=$(x)) +endif + +ifneq ($(call qstrip,$(BR2_PACKAGE_FFMPEG_FILTERS)),all) +FFMPEG_CONF_OPTS += --disable-filters \ + $(foreach x,$(call qstrip,$(BR2_PACKAGE_FFMPEG_FILTERS)),--enable-filter=$(x)) +endif + +ifeq ($(BR2_PACKAGE_FFMPEG_INDEVS),y) +FFMPEG_CONF_OPTS += --enable-indevs +ifeq ($(BR2_PACKAGE_ALSA_LIB),y) +FFMPEG_CONF_OPTS += --enable-alsa +FFMPEG_DEPENDENCIES += alsa-lib +else +FFMPEG_CONF_OPTS += --disable-alsa +endif +else +FFMPEG_CONF_OPTS += --disable-indevs +endif + +ifeq ($(BR2_PACKAGE_FFMPEG_OUTDEVS),y) +FFMPEG_CONF_OPTS += --enable-outdevs +ifeq ($(BR2_PACKAGE_ALSA_LIB),y) +FFMPEG_DEPENDENCIES += alsa-lib +endif +else +FFMPEG_CONF_OPTS += --disable-outdevs +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +FFMPEG_CONF_OPTS += --enable-pthreads +else +FFMPEG_CONF_OPTS += --disable-pthreads +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +FFMPEG_CONF_OPTS += --enable-zlib +FFMPEG_DEPENDENCIES += zlib +else +FFMPEG_CONF_OPTS += --disable-zlib +endif + +ifeq ($(BR2_PACKAGE_BZIP2),y) +FFMPEG_CONF_OPTS += --enable-bzlib +FFMPEG_DEPENDENCIES += bzip2 +else +FFMPEG_CONF_OPTS += --disable-bzlib +endif + +ifeq ($(BR2_PACKAGE_FDK_AAC)$(BR2_PACKAGE_FFMPEG_NONFREE),yy) +FFMPEG_CONF_OPTS += --enable-libfdk-aac +FFMPEG_DEPENDENCIES += fdk-aac +else +FFMPEG_CONF_OPTS += --disable-libfdk-aac +endif + +ifeq ($(BR2_PACKAGE_FFMPEG_GPL)$(BR2_PACKAGE_LIBCDIO_PARANOIA),yy) +FFMPEG_CONF_OPTS += --enable-libcdio +FFMPEG_DEPENDENCIES += libcdio-paranoia +else +FFMPEG_CONF_OPTS += --disable-libcdio +endif + +ifeq ($(BR2_PACKAGE_GNUTLS),y) +FFMPEG_CONF_OPTS += --enable-gnutls --disable-openssl +FFMPEG_DEPENDENCIES += gnutls +else +FFMPEG_CONF_OPTS += --disable-gnutls +ifeq ($(BR2_PACKAGE_OPENSSL),y) +# openssl isn't license compatible with GPL +ifeq ($(BR2_PACKAGE_FFMPEG_GPL)x$(BR2_PACKAGE_FFMPEG_NONFREE),yx) +FFMPEG_CONF_OPTS += --disable-openssl +else +FFMPEG_CONF_OPTS += --enable-openssl +FFMPEG_DEPENDENCIES += openssl +endif +else +FFMPEG_CONF_OPTS += --disable-openssl +endif +endif + +ifeq ($(BR2_PACKAGE_FFMPEG_GPL)$(BR2_PACKAGE_LIBEBUR128),yy) +FFMPEG_DEPENDENCIES += libebur128 +endif + +ifeq ($(BR2_PACKAGE_LIBDRM),y) +FFMPEG_CONF_OPTS += --enable-libdrm +FFMPEG_DEPENDENCIES += libdrm +else +FFMPEG_CONF_OPTS += --disable-libdrm +endif + +ifeq ($(BR2_PACKAGE_LIBOPENH264),y) +FFMPEG_CONF_OPTS += --enable-libopenh264 +FFMPEG_DEPENDENCIES += libopenh264 +else +FFMPEG_CONF_OPTS += --disable-libopenh264 +endif + +ifeq ($(BR2_PACKAGE_LIBVORBIS),y) +FFMPEG_DEPENDENCIES += libvorbis +FFMPEG_CONF_OPTS += \ + --enable-libvorbis \ + --enable-muxer=ogg \ + --enable-encoder=libvorbis +endif + +ifeq ($(BR2_PACKAGE_LIBVA),y) +FFMPEG_CONF_OPTS += --enable-vaapi +FFMPEG_DEPENDENCIES += libva +else +FFMPEG_CONF_OPTS += --disable-vaapi +endif + +ifeq ($(BR2_PACKAGE_LIBVDPAU),y) +FFMPEG_CONF_OPTS += --enable-vdpau +FFMPEG_DEPENDENCIES += libvdpau +else +FFMPEG_CONF_OPTS += --disable-vdpau +endif + +ifeq ($(BR2_PACKAGE_RPI_USERLAND),y) +FFMPEG_CONF_OPTS += --enable-mmal --enable-omx --enable-omx-rpi \ + --extra-cflags=-I$(STAGING_DIR)/usr/include/IL +FFMPEG_DEPENDENCIES += rpi-userland +else +FFMPEG_CONF_OPTS += --disable-mmal --disable-omx --disable-omx-rpi +endif + +# To avoid a circular dependency only use opencv if opencv itself does +# not depend on ffmpeg. +ifeq ($(BR2_PACKAGE_OPENCV3_LIB_IMGPROC)x$(BR2_PACKAGE_OPENCV3_WITH_FFMPEG),yx) +FFMPEG_CONF_OPTS += --enable-libopencv +FFMPEG_DEPENDENCIES += opencv3 +else +FFMPEG_CONF_OPTS += --disable-libopencv +endif + +ifeq ($(BR2_PACKAGE_OPUS),y) +FFMPEG_CONF_OPTS += --enable-libopus +FFMPEG_DEPENDENCIES += opus +else +FFMPEG_CONF_OPTS += --disable-libopus +endif + +ifeq ($(BR2_PACKAGE_LIBVPX),y) +FFMPEG_CONF_OPTS += --enable-libvpx +FFMPEG_DEPENDENCIES += libvpx +else +FFMPEG_CONF_OPTS += --disable-libvpx +endif + +ifeq ($(BR2_PACKAGE_LIBASS),y) +FFMPEG_CONF_OPTS += --enable-libass +FFMPEG_DEPENDENCIES += libass +else +FFMPEG_CONF_OPTS += --disable-libass +endif + +ifeq ($(BR2_PACKAGE_LIBBLURAY),y) +FFMPEG_CONF_OPTS += --enable-libbluray +FFMPEG_DEPENDENCIES += libbluray +else +FFMPEG_CONF_OPTS += --disable-libbluray +endif + +ifeq ($(BR2_PACKAGE_INTEL_MEDIASDK),y) +FFMPEG_CONF_OPTS += --enable-libmfx +FFMPEG_DEPENDENCIES += intel-mediasdk +else +FFMPEG_CONF_OPTS += --disable-libmfx +endif + +ifeq ($(BR2_PACKAGE_RTMPDUMP),y) +FFMPEG_CONF_OPTS += --enable-librtmp +FFMPEG_DEPENDENCIES += rtmpdump +else +FFMPEG_CONF_OPTS += --disable-librtmp +endif + +ifeq ($(BR2_PACKAGE_LAME),y) +FFMPEG_CONF_OPTS += --enable-libmp3lame +FFMPEG_DEPENDENCIES += lame +else +FFMPEG_CONF_OPTS += --disable-libmp3lame +endif + +ifeq ($(BR2_PACKAGE_LIBMODPLUG),y) +FFMPEG_CONF_OPTS += --enable-libmodplug +FFMPEG_DEPENDENCIES += libmodplug +else +FFMPEG_CONF_OPTS += --disable-libmodplug +endif + +ifeq ($(BR2_PACKAGE_SPEEX),y) +FFMPEG_CONF_OPTS += --enable-libspeex +FFMPEG_DEPENDENCIES += speex +else +FFMPEG_CONF_OPTS += --disable-libspeex +endif + +ifeq ($(BR2_PACKAGE_LIBTHEORA),y) +FFMPEG_CONF_OPTS += --enable-libtheora +FFMPEG_DEPENDENCIES += libtheora +else +FFMPEG_CONF_OPTS += --disable-libtheora +endif + +ifeq ($(BR2_PACKAGE_WAVPACK),y) +FFMPEG_CONF_OPTS += --enable-libwavpack +FFMPEG_DEPENDENCIES += wavpack +else +FFMPEG_CONF_OPTS += --disable-libwavpack +endif + +ifeq ($(BR2_PACKAGE_LIBICONV),y) +FFMPEG_CONF_OPTS += --enable-iconv +FFMPEG_DEPENDENCIES += libiconv +else +FFMPEG_CONF_OPTS += --disable-iconv +endif + +# ffmpeg freetype support require fenv.h which is only +# available/working on glibc. +# The microblaze variant doesn't provide the needed exceptions +ifeq ($(BR2_PACKAGE_FREETYPE)$(BR2_TOOLCHAIN_USES_GLIBC)x$(BR2_microblaze),yyx) +FFMPEG_CONF_OPTS += --enable-libfreetype +FFMPEG_DEPENDENCIES += freetype +else +FFMPEG_CONF_OPTS += --disable-libfreetype +endif + +ifeq ($(BR2_PACKAGE_FONTCONFIG),y) +FFMPEG_CONF_OPTS += --enable-fontconfig +FFMPEG_DEPENDENCIES += fontconfig +else +FFMPEG_CONF_OPTS += --disable-fontconfig +endif + +ifeq ($(BR2_PACKAGE_OPENJPEG),y) +FFMPEG_CONF_OPTS += --enable-libopenjpeg +FFMPEG_DEPENDENCIES += openjpeg +else +FFMPEG_CONF_OPTS += --disable-libopenjpeg +endif + +ifeq ($(BR2_PACKAGE_X264)$(BR2_PACKAGE_FFMPEG_GPL),yy) +FFMPEG_CONF_OPTS += --enable-libx264 +FFMPEG_DEPENDENCIES += x264 +else +FFMPEG_CONF_OPTS += --disable-libx264 +endif + +ifeq ($(BR2_PACKAGE_X265)$(BR2_PACKAGE_FFMPEG_GPL),yy) +FFMPEG_CONF_OPTS += --enable-libx265 +FFMPEG_DEPENDENCIES += x265 +else +FFMPEG_CONF_OPTS += --disable-libx265 +endif + +#ifeq ($(BR2_PACKAGE_DAV1D),y) +#FFMPEG_CONF_OPTS += --enable-libdav1d +#FFMPEG_DEPENDENCIES += dav1d +#else +#FFMPEG_CONF_OPTS += --disable-libdav1d +#endif + +ifeq ($(BR2_X86_CPU_HAS_MMX),y) +FFMPEG_CONF_OPTS += --enable-x86asm +FFMPEG_DEPENDENCIES += host-nasm +else +FFMPEG_CONF_OPTS += --disable-x86asm +FFMPEG_CONF_OPTS += --disable-mmx +endif + +ifeq ($(BR2_X86_CPU_HAS_SSE),y) +FFMPEG_CONF_OPTS += --enable-sse +else +FFMPEG_CONF_OPTS += --disable-sse +endif + +ifeq ($(BR2_X86_CPU_HAS_SSE2),y) +FFMPEG_CONF_OPTS += --enable-sse2 +else +FFMPEG_CONF_OPTS += --disable-sse2 +endif + +ifeq ($(BR2_X86_CPU_HAS_SSE3),y) +FFMPEG_CONF_OPTS += --enable-sse3 +else +FFMPEG_CONF_OPTS += --disable-sse3 +endif + +ifeq ($(BR2_X86_CPU_HAS_SSSE3),y) +FFMPEG_CONF_OPTS += --enable-ssse3 +else +FFMPEG_CONF_OPTS += --disable-ssse3 +endif + +ifeq ($(BR2_X86_CPU_HAS_SSE4),y) +FFMPEG_CONF_OPTS += --enable-sse4 +else +FFMPEG_CONF_OPTS += --disable-sse4 +endif + +ifeq ($(BR2_X86_CPU_HAS_SSE42),y) +FFMPEG_CONF_OPTS += --enable-sse42 +else +FFMPEG_CONF_OPTS += --disable-sse42 +endif + +ifeq ($(BR2_X86_CPU_HAS_AVX),y) +FFMPEG_CONF_OPTS += --enable-avx +else +FFMPEG_CONF_OPTS += --disable-avx +endif + +ifeq ($(BR2_X86_CPU_HAS_AVX2),y) +FFMPEG_CONF_OPTS += --enable-avx2 +else +FFMPEG_CONF_OPTS += --disable-avx2 +endif + +# Explicitly disable everything that doesn't match for ARM +# FFMPEG "autodetects" by compiling an extended instruction via AS +# This works on compilers that aren't built for generic by default +ifeq ($(BR2_ARM_CPU_ARMV4),y) +FFMPEG_CONF_OPTS += --disable-armv5te +endif +ifeq ($(BR2_ARM_CPU_ARMV6)$(BR2_ARM_CPU_ARMV7A),y) +FFMPEG_CONF_OPTS += --enable-armv6 +else +FFMPEG_CONF_OPTS += --disable-armv6 --disable-armv6t2 +endif +ifeq ($(BR2_ARM_CPU_HAS_VFPV2),y) +FFMPEG_CONF_OPTS += --enable-vfp +else +FFMPEG_CONF_OPTS += --disable-vfp +endif +ifeq ($(BR2_ARM_CPU_HAS_NEON),y) +FFMPEG_CONF_OPTS += --enable-neon +else ifeq ($(BR2_aarch64),y) +FFMPEG_CONF_OPTS += --enable-neon +else +FFMPEG_CONF_OPTS += --disable-neon +endif + +ifeq ($(BR2_mips)$(BR2_mipsel)$(BR2_mips64)$(BR2_mips64el),y) +ifeq ($(BR2_MIPS_SOFT_FLOAT),y) +FFMPEG_CONF_OPTS += --disable-mipsfpu +else +FFMPEG_CONF_OPTS += --enable-mipsfpu +endif + +# Fix build failure on "addi opcode not supported" +ifeq ($(BR2_mips_32r6)$(BR2_mips_64r6),y) +FFMPEG_CONF_OPTS += --disable-asm +endif +endif # MIPS + +ifeq ($(BR2_POWERPC_CPU_HAS_ALTIVEC),y) +FFMPEG_CONF_OPTS += --enable-altivec +else +FFMPEG_CONF_OPTS += --disable-altivec +endif + +# Uses __atomic_fetch_add_4 +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +FFMPEG_CONF_OPTS += --extra-libs=-latomic +endif + +ifeq ($(BR2_STATIC_LIBS),) +FFMPEG_CONF_OPTS += --enable-pic +else +FFMPEG_CONF_OPTS += --disable-pic +endif + +# Default to --cpu=generic for MIPS architecture, in order to avoid a +# warning from ffmpeg's configure script. +ifeq ($(BR2_mips)$(BR2_mipsel)$(BR2_mips64)$(BR2_mips64el),y) +FFMPEG_CONF_OPTS += --cpu=generic +else ifneq ($(GCC_TARGET_CPU),) +FFMPEG_CONF_OPTS += --cpu="$(GCC_TARGET_CPU)" +else ifneq ($(GCC_TARGET_ARCH),) +FFMPEG_CONF_OPTS += --cpu="$(GCC_TARGET_ARCH)" +endif + +FFMPEG_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y) +FFMPEG_CONF_OPTS += --disable-optimizations +FFMPEG_CFLAGS += -O0 +endif + +FFMPEG_CONF_ENV += CFLAGS="$(FFMPEG_CFLAGS)" +FFMPEG_CONF_OPTS += $(call qstrip,$(BR2_PACKAGE_FFMPEG_EXTRACONF)) + +# Override FFMPEG_CONFIGURE_CMDS: FFmpeg does not support --target and others +define FFMPEG_CONFIGURE_CMDS + (cd $(FFMPEG_SRCDIR) && rm -rf config.cache && \ + $(TARGET_CONFIGURE_OPTS) \ + $(TARGET_CONFIGURE_ARGS) \ + $(FFMPEG_CONF_ENV) \ + ./configure \ + --enable-cross-compile \ + --cross-prefix=$(TARGET_CROSS) \ + --sysroot=$(STAGING_DIR) \ + --host-cc="$(HOSTCC)" \ + --arch=$(BR2_ARCH) \ + --target-os="linux" \ + --disable-stripping \ + --pkg-config="$(PKG_CONFIG_HOST_BINARY)" \ + $(SHARED_STATIC_LIBS_OPTS) \ + $(FFMPEG_CONF_OPTS) \ + ) +endef + +define FFMPEG_REMOVE_EXAMPLE_SRC_FILES + rm -rf $(TARGET_DIR)/usr/share/ffmpeg/examples +endef +FFMPEG_POST_INSTALL_TARGET_HOOKS += FFMPEG_REMOVE_EXAMPLE_SRC_FILES + +$(eval $(autotools-package)) diff --git a/package/fftw/Config.in b/package/fftw/Config.in new file mode 100644 index 00000000..69dc6559 --- /dev/null +++ b/package/fftw/Config.in @@ -0,0 +1,35 @@ +config BR2_PACKAGE_FFTW + bool "fftw" + select BR2_PACKAGE_FFTW_DOUBLE if !BR2_PACKAGE_FFTW_SINGLE \ + && !BR2_PACKAGE_FFTW_LONG_DOUBLE && !BR2_PACKAGE_FFTW_QUAD + help + Library for computing Fast Fourier Transforms. + + This library computes Fast Fourier Transforms (FFT) in one + or more dimensions. It is extremely fast. This package + contains the shared library version of the fftw libraries in + double precision. + + http://www.fftw.org + +if BR2_PACKAGE_FFTW + +source "package/fftw/fftw-single/Config.in" +source "package/fftw/fftw-double/Config.in" +source "package/fftw/fftw-long-double/Config.in" +source "package/fftw/fftw-quad/Config.in" + +config BR2_PACKAGE_FFTW_FAST + bool "optimise for speed over accuracy" + help + Optimise for fast math functions, at the expense of accuracy. + + Say 'y' if you need speed and can live with inaccuracies in + the results. Say 'n' (the default) if accuracy is of utmost + importance. + + This basically uses gcc's -Ofast optimisation level, which in + turn is basically using gcc's -ffast-math. See the gcc manual + for what this means. + +endif diff --git a/package/fftw/fftw-double/Config.in b/package/fftw/fftw-double/Config.in new file mode 100644 index 00000000..cfcd1ef9 --- /dev/null +++ b/package/fftw/fftw-double/Config.in @@ -0,0 +1,5 @@ +config BR2_PACKAGE_FFTW_DOUBLE + bool "fftw-double" + help + Compile fftw in double precision (the default), i.e. use + 'double' for floating point type. diff --git a/package/fftw/fftw-double/fftw-double.hash b/package/fftw/fftw-double/fftw-double.hash new file mode 120000 index 00000000..3ee7ecb3 --- /dev/null +++ b/package/fftw/fftw-double/fftw-double.hash @@ -0,0 +1 @@ +../fftw.hash \ No newline at end of file diff --git a/package/fftw/fftw-double/fftw-double.mk b/package/fftw/fftw-double/fftw-double.mk new file mode 100644 index 00000000..4bacb26e --- /dev/null +++ b/package/fftw/fftw-double/fftw-double.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# fftw-double +# +################################################################################ + +FFTW_DOUBLE_VERSION = $(FFTW_VERSION) +FFTW_DOUBLE_SOURCE = fftw-$(FFTW_VERSION).tar.gz +FFTW_DOUBLE_SITE = $(FFTW_SITE) +FFTW_DOUBLE_DL_SUBDIR = fftw +FFTW_DOUBLE_INSTALL_STAGING = $(FFTW_INSTALL_STAGING) +FFTW_DOUBLE_LICENSE = $(FFTW_LICENSE) +FFTW_DOUBLE_LICENSE_FILES = $(FFTW_LICENSE_FILES) + +FFTW_DOUBLE_CONF_ENV = $(FFTW_COMMON_CONF_ENV) + +FFTW_DOUBLE_CONF_OPTS = \ + $(FFTW_COMMON_CONF_OPTS) \ + CFLAGS="$(FFTW_COMMON_CFLAGS)" \ + $(if $(BR2_X86_CPU_HAS_SSE2),--enable,--disable)-sse2 + +$(eval $(autotools-package)) diff --git a/package/fftw/fftw-long-double/Config.in b/package/fftw/fftw-long-double/Config.in new file mode 100644 index 00000000..3ee17628 --- /dev/null +++ b/package/fftw/fftw-long-double/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_FFTW_LONG_DOUBLE + bool "fftw-long-double" + # long-double precision require long-double trigonometric routines + depends on !(BR2_TOOLCHAIN_USES_UCLIBC && \ + (BR2_arm || BR2_mips || BR2_mipsel)) + help + Compile fftw in long double precision, i.e. use 'long double' + for floating point type. diff --git a/package/fftw/fftw-long-double/fftw-long-double.hash b/package/fftw/fftw-long-double/fftw-long-double.hash new file mode 120000 index 00000000..3ee7ecb3 --- /dev/null +++ b/package/fftw/fftw-long-double/fftw-long-double.hash @@ -0,0 +1 @@ +../fftw.hash \ No newline at end of file diff --git a/package/fftw/fftw-long-double/fftw-long-double.mk b/package/fftw/fftw-long-double/fftw-long-double.mk new file mode 100644 index 00000000..17305044 --- /dev/null +++ b/package/fftw/fftw-long-double/fftw-long-double.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# fftw-long-double +# +################################################################################ + +FFTW_LONG_DOUBLE_VERSION = $(FFTW_VERSION) +FFTW_LONG_DOUBLE_SOURCE = fftw-$(FFTW_VERSION).tar.gz +FFTW_LONG_DOUBLE_SITE = $(FFTW_SITE) +FFTW_LONG_DOUBLE_DL_SUBDIR = fftw +FFTW_LONG_DOUBLE_INSTALL_STAGING = $(FFTW_INSTALL_STAGING) +FFTW_LONG_DOUBLE_LICENSE = $(FFTW_LICENSE) +FFTW_LONG_DOUBLE_LICENSE_FILES = $(FFTW_LICENSE_FILES) + +FFTW_LONG_DOUBLE_CONF_ENV = $(FFTW_COMMON_CONF_ENV) + +FFTW_LONG_DOUBLE_CONF_OPTS = \ + $(FFTW_COMMON_CONF_OPTS) \ + CFLAGS="$(FFTW_COMMON_CFLAGS)" \ + --enable-long-double + +$(eval $(autotools-package)) diff --git a/package/fftw/fftw-quad/Config.in b/package/fftw/fftw-quad/Config.in new file mode 100644 index 00000000..10d296df --- /dev/null +++ b/package/fftw/fftw-quad/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_FFTW_QUAD + bool "fftw-quad" + # quad-precision needs to have a gcc with libquadmath + depends on BR2_TOOLCHAIN_HAS_LIBQUADMATH && BR2_USE_WCHAR + help + Compile fftw in quadruple precision, i.e. use '__float128' for + floating point type. diff --git a/package/fftw/fftw-quad/fftw-quad.hash b/package/fftw/fftw-quad/fftw-quad.hash new file mode 120000 index 00000000..3ee7ecb3 --- /dev/null +++ b/package/fftw/fftw-quad/fftw-quad.hash @@ -0,0 +1 @@ +../fftw.hash \ No newline at end of file diff --git a/package/fftw/fftw-quad/fftw-quad.mk b/package/fftw/fftw-quad/fftw-quad.mk new file mode 100644 index 00000000..5ff79b1d --- /dev/null +++ b/package/fftw/fftw-quad/fftw-quad.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# fftw-quad +# +################################################################################ + +FFTW_QUAD_VERSION = $(FFTW_VERSION) +FFTW_QUAD_SOURCE = fftw-$(FFTW_VERSION).tar.gz +FFTW_QUAD_SITE = $(FFTW_SITE) +FFTW_QUAD_DL_SUBDIR = fftw +FFTW_QUAD_INSTALL_STAGING = $(FFTW_INSTALL_STAGING) +FFTW_QUAD_LICENSE = $(FFTW_LICENSE) +FFTW_QUAD_LICENSE_FILES = $(FFTW_LICENSE_FILES) + +FFTW_QUAD_CONF_ENV = $(FFTW_COMMON_CONF_ENV) + +FFTW_QUAD_CONF_OPTS = \ + $(FFTW_COMMON_CONF_OPTS) \ + CFLAGS="$(FFTW_COMMON_CFLAGS)" \ + --enable-quad-precision + +$(eval $(autotools-package)) diff --git a/package/fftw/fftw-single/Config.in b/package/fftw/fftw-single/Config.in new file mode 100644 index 00000000..ff148687 --- /dev/null +++ b/package/fftw/fftw-single/Config.in @@ -0,0 +1,5 @@ +config BR2_PACKAGE_FFTW_SINGLE + bool "fftw-single" + help + Compile fftw in single precision, i.e. use 'float' + for floating point type. diff --git a/package/fftw/fftw-single/fftw-single.hash b/package/fftw/fftw-single/fftw-single.hash new file mode 120000 index 00000000..3ee7ecb3 --- /dev/null +++ b/package/fftw/fftw-single/fftw-single.hash @@ -0,0 +1 @@ +../fftw.hash \ No newline at end of file diff --git a/package/fftw/fftw-single/fftw-single.mk b/package/fftw/fftw-single/fftw-single.mk new file mode 100644 index 00000000..1e26ff7a --- /dev/null +++ b/package/fftw/fftw-single/fftw-single.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# fftw-single +# +################################################################################ + +FFTW_SINGLE_VERSION = $(FFTW_VERSION) +FFTW_SINGLE_SOURCE = fftw-$(FFTW_VERSION).tar.gz +FFTW_SINGLE_SITE = $(FFTW_SITE) +FFTW_SINGLE_DL_SUBDIR = fftw +FFTW_SINGLE_INSTALL_STAGING = $(FFTW_INSTALL_STAGING) +FFTW_SINGLE_LICENSE = $(FFTW_LICENSE) +FFTW_SINGLE_LICENSE_FILES = $(FFTW_LICENSE_FILES) + +FFTW_SINGLE_CONF_ENV = $(FFTW_COMMON_CONF_ENV) + +FFTW_SINGLE_CONF_OPTS = \ + $(FFTW_COMMON_CONF_OPTS) \ + CFLAGS="$(FFTW_SINGLE_CFLAGS)" \ + --enable-single + +FFTW_SINGLE_CFLAGS = $(FFTW_COMMON_CFLAGS) + +# x86 optimisations +FFTW_SINGLE_CONF_OPTS += \ + $(if $(BR2_X86_CPU_HAS_SSE),--enable,--disable)-sse \ + $(if $(BR2_X86_CPU_HAS_SSE2),--enable,--disable)-sse2 + +# ARM optimisations +ifeq ($(BR2_ARM_CPU_HAS_NEON):$(BR2_ARM_SOFT_FLOAT),y:) +FFTW_SINGLE_CONF_OPTS += --enable-neon +FFTW_SINGLE_CFLAGS += -mfpu=neon +else +FFTW_SINGLE_CONF_OPTS += --disable-neon +endif + +$(eval $(autotools-package)) diff --git a/package/fftw/fftw.hash b/package/fftw/fftw.hash new file mode 100644 index 00000000..1c4a17d8 --- /dev/null +++ b/package/fftw/fftw.hash @@ -0,0 +1,5 @@ +# From http://www.fftw.org/fftw-3.3.8.tar.gz.md5sum +md5 8aac833c943d8e90d51b697b27d4384d fftw-3.3.8.tar.gz +# Locally computed +sha256 6113262f6e92c5bd474f2875fa1b01054c4ad5040f6b0da7c03c98821d9ae303 fftw-3.3.7.tar.gz +sha256 231f7edcc7352d7734a96eef0b8030f77982678c516876fcb81e25b32d68564c COPYING diff --git a/package/fftw/fftw.mk b/package/fftw/fftw.mk new file mode 100644 index 00000000..279244a5 --- /dev/null +++ b/package/fftw/fftw.mk @@ -0,0 +1,36 @@ +################################################################################ +# +# fftw +# +################################################################################ + +FFTW_VERSION = 3.3.8 +FFTW_SITE = http://www.fftw.org +FFTW_INSTALL_STAGING = YES +FFTW_LICENSE = GPL-2.0+ +FFTW_LICENSE_FILES = COPYING + +# fortran support only enables generation and installation of fortran sources +ifeq ($(BR2_TOOLCHAIN_HAS_FORTRAN),y) +FFTW_COMMON_CONF_OPTS += --enable-fortran +FFTW_COMMON_CONF_ENV += FLIBS="-lgfortran -lm" +else +FFTW_COMMON_CONF_OPTS += --disable-fortran +endif + +FFTW_COMMON_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_PACKAGE_FFTW_FAST),y) +FFTW_COMMON_CFLAGS += -O3 -ffast-math +endif + +# Generic optimisations +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +FFTW_COMMON_CONF_OPTS += --enable-threads +FFTW_COMMON_CONF_OPTS += $(if $(BR2_TOOLCHAIN_HAS_OPENMP),--without,--with)-combined-threads +else +FFTW_COMMON_CONF_OPTS += --disable-threads +endif +FFTW_COMMON_CONF_OPTS += $(if $(BR2_TOOLCHAIN_HAS_OPENMP),--enable,--disable)-openmp + +include $(sort $(wildcard package/fftw/*/*.mk)) diff --git a/package/ficl/0001-fix-Makefile.patch b/package/ficl/0001-fix-Makefile.patch new file mode 100644 index 00000000..d5a25c43 --- /dev/null +++ b/package/ficl/0001-fix-Makefile.patch @@ -0,0 +1,47 @@ +fix dependency in Makefiles + +there is no longer a sysdep.h file. + +Signed-off-by: Francois Perrad + +diff --git a/Makefile b/Makefile +index 976d00a..7f73c44 100644 +--- a/Makefile ++++ b/Makefile +@@ -29,7 +29,7 @@ libficl.so.$(MAJOR).$(MINOR): $(OBJECTS) + -o libficl.so.$(MAJOR).$(MINOR) $(OBJECTS) + ln -sf libficl.so.$(MAJOR).$(MINOR) libficl.so + +-main: main.o ficl.h sysdep.h libficl.so.$(MAJOR).$(MINOR) ++main: main.o ficl.h libficl.so.$(MAJOR).$(MINOR) + $(CC) $(CFLAGS) $(LDFLAGS) main.o -o main -L. -lficl -lm + ln -sf libficl.so.$(MAJOR).$(MINOR) libficl.so.$(MAJOR) + +diff --git a/Makefile.ansi b/Makefile.ansi +index e510fcd..170e6eb 100644 +--- a/Makefile.ansi ++++ b/Makefile.ansi +@@ -29,7 +29,7 @@ libficl.so.$(MAJOR).$(MINOR): $(OBJECTS) + -o libficl.so.$(MAJOR).$(MINOR) $(OBJECTS) + ln -sf libficl.so.$(MAJOR).$(MINOR) libficl.so + +-main: main.o ficl.h sysdep.h libficl.so.$(MAJOR).$(MINOR) ++main: main.o ficl.h libficl.so.$(MAJOR).$(MINOR) + $(CC) main.o -o main -L. -lficl -lm + ln -sf libficl.so.$(MAJOR).$(MINOR) libficl.so.$(MAJOR) + +diff --git a/Makefile.linux b/Makefile.linux +index d447e7e..7f2cdfe 100644 +--- a/Makefile.linux ++++ b/Makefile.linux +@@ -29,7 +29,7 @@ libficl.so.$(MAJOR).$(MINOR): $(OBJECTS) + -o libficl.so.$(MAJOR).$(MINOR) $(OBJECTS) + ln -sf libficl.so.$(MAJOR).$(MINOR) libficl.so + +-main: main.o ficl.h sysdep.h libficl.so.$(MAJOR).$(MINOR) ++main: main.o ficl.h libficl.so.$(MAJOR).$(MINOR) + $(CC) main.o -o main -L. -lficl -lm + ln -sf libficl.so.$(MAJOR).$(MINOR) libficl.so.$(MAJOR) + +-- + diff --git a/package/ficl/Config.in b/package/ficl/Config.in new file mode 100644 index 00000000..4d9ab4a5 --- /dev/null +++ b/package/ficl/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_FICL + bool "ficl" + help + Ficl is a programming language interpreter designed to be + embedded into other systems as a command, macro, and + development prototyping language. + Ficl is an acronym for "Forth Inspired Command Language". + + http://ficl.sourceforge.net diff --git a/package/ficl/ficl.hash b/package/ficl/ficl.hash new file mode 100644 index 00000000..df53c843 --- /dev/null +++ b/package/ficl/ficl.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 4daf74f3d3d6f8b86ea7cb47bc24931d50b4809b50ba34ca32e0ca1e972bd3a3 ficl-4.1.0.tar.gz +sha256 1d1dd1f1cde52e8b607c5ccb6a2e5de878fd1719b8c5a4d31b9cdb343c203d0d ReadMe.txt diff --git a/package/ficl/ficl.mk b/package/ficl/ficl.mk new file mode 100644 index 00000000..af900fa2 --- /dev/null +++ b/package/ficl/ficl.mk @@ -0,0 +1,59 @@ +################################################################################ +# +# ficl +# +################################################################################ + +FICL_VERSION_MAJOR = 4.1 +FICL_VERSION = $(FICL_VERSION_MAJOR).0 +FICL_SITE = http://downloads.sourceforge.net/project/ficl/ficl-all/ficl$(FICL_VERSION_MAJOR) +FICL_LICENSE = BSD-2-Clause +FICL_LICENSE_FILES = ReadMe.txt +FICL_INSTALL_STAGING = YES + +ifeq ($(BR2_STATIC_LIBS),y) +FICL_BUILD_TARGETS += ficl +define FICL_INSTALL_STATIC_BIN + $(INSTALL) -D -m 0755 $(@D)/ficl $(TARGET_DIR)/usr/bin/ficl +endef +endif + +ifeq ($(BR2_STATIC_LIBS)$(BR2_SHARED_STATIC_LIBS),y) +FICL_BUILD_TARGETS += libficl.a +define FICL_INSTALL_STATIC_LIB + $(INSTALL) -D -m 0644 $(@D)/libficl.a $(STAGING_DIR)/usr/lib/libficl.a +endef +endif + +ifeq ($(BR2_SHARED_LIBS)$(BR2_SHARED_STATIC_LIBS),y) +FICL_BUILD_TARGETS += main libficl.so.$(FICL_VERSION) +define FICL_INSTALL_SHARED_BIN + $(INSTALL) -D -m 0755 $(@D)/main $(TARGET_DIR)/usr/bin/ficl +endef +define FICL_INSTALL_SHARED_LIB + $(INSTALL) -D -m 0755 $(@D)/libficl.so.$(FICL_VERSION) $(1)/usr/lib/libficl.so.$(FICL_VERSION) + ln -sf libficl.so.$(FICL_VERSION) $(1)/usr/lib/libficl.so.4 + ln -sf libficl.so.$(FICL_VERSION) $(1)/usr/lib/libficl.so +endef +endif + +define FICL_BUILD_CMDS + $(MAKE) -C $(@D) -f Makefile.linux $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(TARGET_CFLAGS) -fgnu89-inline -fPIC -I. -Dlinux" CPPFLAGS="" $(FICL_BUILD_TARGETS) +endef + +define FICL_INSTALL_STAGING_CMDS + $(FICL_INSTALL_STATIC_LIB) + $(call FICL_INSTALL_SHARED_LIB,$(STAGING_DIR)) + $(INSTALL) -D -m 0644 $(@D)/ficl.h $(STAGING_DIR)/usr/include/ficl.h + $(INSTALL) -D -m 0644 $(@D)/ficllocal.h $(STAGING_DIR)/usr/include/ficllocal.h + $(INSTALL) -D -m 0644 $(@D)/ficlplatform/unix.h $(STAGING_DIR)/usr/include/ficlplatform/unix.h +endef + +define FICL_INSTALL_TARGET_CMDS + $(FICL_INSTALL_STATIC_BIN) + $(FICL_INSTALL_SHARED_BIN) + $(call FICL_INSTALL_SHARED_LIB,$(TARGET_DIR)) +endef + +$(eval $(generic-package)) diff --git a/package/file/0001-Add-libmagic.pc.patch b/package/file/0001-Add-libmagic.pc.patch new file mode 100644 index 00000000..b26d1622 --- /dev/null +++ b/package/file/0001-Add-libmagic.pc.patch @@ -0,0 +1,76 @@ +From d079cac1110cc2761417f0dcb0a142b217eb1eda Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Fri, 31 Jan 2020 20:26:29 +0100 +Subject: [PATCH] Add libmagic.pc + +libmagic can optionally depends on xz (for lzma) or bzip2 since version +5.38 and +https://github.com/file/file/commit/b259a07ea95827f565faa20f0316e5b2704064f7 +so add libmagic.pc so package (such as gerbera) that links with libmagic +will be able to use pkg-config to retrieve those static dependencies +For example, this will avoid the following build failure: + +[100%] Linking CXX executable gerbera +/home/br-user/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-buildroot-linux-uclibcgnueabi/8.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: /home/br-user/autobuild/run/instance-0/output-1/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libmagic.a(compress.o): in function `uncompressbuf': +compress.c:(.text+0x69c): undefined reference to `BZ2_bzDecompressInit' +/home/br-user/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-buildroot-linux-uclibcgnueabi/8.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: compress.c:(.text+0x710): undefined reference to `BZ2_bzDecompress' +/home/br-user/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-buildroot-linux-uclibcgnueabi/8.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: compress.c:(.text+0x730): undefined reference to `BZ2_bzDecompressEnd' +/home/br-user/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-buildroot-linux-uclibcgnueabi/8.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: compress.c:(.text+0x7bc): undefined reference to `lzma_auto_decoder' +/home/br-user/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-buildroot-linux-uclibcgnueabi/8.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: compress.c:(.text+0x828): undefined reference to `lzma_code' +/home/br-user/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-buildroot-linux-uclibcgnueabi/8.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: compress.c:(.text+0x848): undefined reference to `lzma_end' + +Fixes: + - http://autobuild.buildroot.org/results/37b1ef54dc41100689f311fbc31fc9300dc6ae63 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://bugs.astron.com/view.php?id=136] +--- + Makefile.am | 5 +++++ + configure.ac | 2 +- + libmagic.pc.in | 10 ++++++++++ + 3 files changed, 16 insertions(+), 1 deletion(-) + create mode 100644 libmagic.pc.in + +diff --git a/Makefile.am b/Makefile.am +index 8bd927d9..2ab67ed7 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -3,3 +3,8 @@ ACLOCAL_AMFLAGS = -I m4 + EXTRA_DIST = MAINT + + SUBDIRS = src magic tests doc python ++ ++# This variable must have 'exec' in its name, in order to be installed ++# by 'install-exec' target (instead of default 'install-data') ++pkgconfigexecdir = $(libdir)/pkgconfig ++pkgconfigexec_DATA = libmagic.pc +diff --git a/configure.ac b/configure.ac +index ac37fccd..b2e2e5b8 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -217,5 +217,5 @@ if test "$ac_cv_header_lzma_h$ac_cv_lib_lzma_lzma_stream_decoder" = "yesyes"; t + AC_DEFINE([XZLIBSUPPORT], 1, [Enable xzlib compression support]) + fi + +-AC_CONFIG_FILES([Makefile src/Makefile magic/Makefile tests/Makefile doc/Makefile python/Makefile]) ++AC_CONFIG_FILES([Makefile src/Makefile magic/Makefile tests/Makefile doc/Makefile python/Makefile libmagic.pc]) + AC_OUTPUT +diff --git a/libmagic.pc.in b/libmagic.pc.in +new file mode 100644 +index 00000000..3ad1290b +--- /dev/null ++++ b/libmagic.pc.in +@@ -0,0 +1,10 @@ ++prefix=@prefix@ ++exec_prefix=@exec_prefix@ ++libdir=@libdir@ ++includedir=@includedir@ ++ ++Name: libmagic ++Description: Magic number recognition library ++Version: @VERSION@ ++Libs: -L${libdir} -lmagic ++Libs.private: @LIBS@ +-- +2.24.1 + diff --git a/package/file/Config.in b/package/file/Config.in new file mode 100644 index 00000000..edc4d874 --- /dev/null +++ b/package/file/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_FILE + bool "file" + help + Program to identify a file's format by scanning binary data + for known patterns. + + http://www.darwinsys.com/file/ diff --git a/package/file/file.hash b/package/file/file.hash new file mode 100644 index 00000000..f8f6dfaa --- /dev/null +++ b/package/file/file.hash @@ -0,0 +1,7 @@ +# Locally calculated after verifying signature +# ftp://ftp.astron.com/pub/file/file-5.38.tar.gz.asc +# using key BE04995BA8F90ED0C0C176C471112AB16CB33B3A +sha256 ba993011036c47657f2ac8b4cf03cc77561be9521fafe7dcfa8d931c9783845b file-5.38.tar.gz +sha256 0bfa856a9930bddadbef95d1be1cf4e163c0be618e76ea3275caaf255283e274 COPYING +sha256 4ccb60d623884ef637af4a5bc16b2cb350163e2135e967655837336019a64462 src/mygetopt.h +sha256 58b5932aca6c10f2194290a3b26088ec9ba07ef6b52cc9bb2dd638cc634db6f1 src/vasprintf.c diff --git a/package/file/file.mk b/package/file/file.mk new file mode 100644 index 00000000..c41a8eb3 --- /dev/null +++ b/package/file/file.mk @@ -0,0 +1,49 @@ +################################################################################ +# +# file +# +################################################################################ + +FILE_VERSION = 5.38 +FILE_SITE = ftp://ftp.astron.com/pub/file +FILE_DEPENDENCIES = host-file +HOST_FILE_DEPENDENCIES = host-zlib +FILE_CONF_ENV = ac_cv_prog_cc_c99='-std=gnu99' +FILE_INSTALL_STAGING = YES +FILE_LICENSE = BSD-2-Clause, BSD-4-Clause (one file), BSD-3-Clause (one file) +FILE_LICENSE_FILES = COPYING src/mygetopt.h src/vasprintf.c +FILE_CPE_ID_VENDOR = file_project +# We're patching configure.ac +FILE_AUTORECONF = YES +HOST_FILE_CONF_OPTS = --disable-libseccomp + +ifeq ($(BR2_PACKAGE_BZIP2),y) +FILE_CONF_OPTS += --enable-bzlib +FILE_DEPENDENCIES += bzip2 +else +FILE_CONF_OPTS += --disable-bzlib +endif + +ifeq ($(BR2_PACKAGE_LIBSECCOMP),y) +FILE_CONF_OPTS += --enable-libseccomp +FILE_DEPENDENCIES += libseccomp +else +FILE_CONF_OPTS += --disable-libseccomp +endif + +ifeq ($(BR2_PACKAGE_XZ),y) +FILE_CONF_OPTS += --enable-xzlib +FILE_DEPENDENCIES += xz +else +FILE_CONF_OPTS += --disable-xzlib +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +FILE_CONF_OPTS += --enable-zlib +FILE_DEPENDENCIES += zlib +else +FILE_CONF_OPTS += --disable-zlib +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/filemq/Config.in b/package/filemq/Config.in new file mode 100644 index 00000000..b4720c1d --- /dev/null +++ b/package/filemq/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_FILEMQ + bool "filemq" + depends on BR2_INSTALL_LIBSTDCPP # zeromq + depends on BR2_TOOLCHAIN_HAS_THREADS # zeromq + depends on BR2_USE_MMU # czmq + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_CZMQ + select BR2_PACKAGE_ZEROMQ + help + FileMQ is a publish-subscribe file service based on 0MQ. + + http://github.com/zeromq/filemq + +comment "filemq needs a toolchain w/ C++, threads" + depends on BR2_USE_MMU + depends on !(BR2_INSTALL_LIBSTDCPP && BR2_TOOLCHAIN_HAS_THREADS) diff --git a/package/filemq/filemq.hash b/package/filemq/filemq.hash new file mode 100644 index 00000000..611d1920 --- /dev/null +++ b/package/filemq/filemq.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 f3764e1adacfbf7fd09fb9c553e796a80d8159f1ace689fb68307afbc1746d4c filemq-8940f34e0f1c8f25c1c693ed8db069f58fbc5ad0.tar.gz +sha256 60222c28c1a7f6a92c7df98e5c5f4459e624e6e285e0b9b94467af5f6ab3343d LICENSE diff --git a/package/filemq/filemq.mk b/package/filemq/filemq.mk new file mode 100644 index 00000000..75d8bd99 --- /dev/null +++ b/package/filemq/filemq.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# filemq +# +################################################################################ + +FILEMQ_VERSION = 8940f34e0f1c8f25c1c693ed8db069f58fbc5ad0 +FILEMQ_SITE = $(call github,zeromq,filemq,$(FILEMQ_VERSION)) + +FILEMQ_AUTORECONF = YES +FILEMQ_CONF_ENV = filemq_have_asciidoc=no +FILEMQ_INSTALL_STAGING = YES +FILEMQ_DEPENDENCIES = czmq openssl zeromq +FILEMQ_LICENSE = MPL-2.0 +FILEMQ_LICENSE_FILES = LICENSE + +define FILEMQ_CREATE_CONFIG_DIR + mkdir -p $(@D)/config +endef + +FILEMQ_POST_PATCH_HOOKS += FILEMQ_CREATE_CONFIG_DIR + +$(eval $(autotools-package)) diff --git a/package/findutils/Config.in b/package/findutils/Config.in new file mode 100644 index 00000000..b0eee5a6 --- /dev/null +++ b/package/findutils/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_FINDUTILS + bool "findutils" + depends on BR2_USE_WCHAR + depends on BR2_USE_MMU # fork() + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + Basic directory searching utilities. Provides the + common 'find', 'xargs', 'locate', and 'updatedb' binaries. + + http://www.gnu.org/software/findutils/findutils.html + +comment "findutils needs a toolchain w/ wchar" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS diff --git a/package/findutils/findutils.hash b/package/findutils/findutils.hash new file mode 100644 index 00000000..392c62d2 --- /dev/null +++ b/package/findutils/findutils.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +sha256 c5fefbdf9858f7e4feb86f036e1247a54c79fc2d8e4b7064d5aaa1f47dfa789a findutils-4.7.0.tar.xz + +# Hash for license file +sha256 3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986 COPYING diff --git a/package/findutils/findutils.mk b/package/findutils/findutils.mk new file mode 100644 index 00000000..a16f8271 --- /dev/null +++ b/package/findutils/findutils.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# findutils +# +################################################################################ + +FINDUTILS_VERSION = 4.7.0 +FINDUTILS_SOURCE = findutils-$(FINDUTILS_VERSION).tar.xz +FINDUTILS_SITE = $(BR2_GNU_MIRROR)/findutils +FINDUTILS_LICENSE = GPL-3.0+ +FINDUTILS_LICENSE_FILES = COPYING +FINDUTILS_CPE_ID_VENDOR = gnu +FINDUTILS_CONF_ENV = \ + gl_cv_func_stdin=yes \ + ac_cv_func_working_mktime=yes \ + gl_cv_func_wcwidth_works=yes + +$(eval $(autotools-package)) diff --git a/package/fio/0001-t-io_uring-don-t-use-rand48_r-variants.patch b/package/fio/0001-t-io_uring-don-t-use-rand48_r-variants.patch new file mode 100644 index 00000000..8d6830ac --- /dev/null +++ b/package/fio/0001-t-io_uring-don-t-use-rand48_r-variants.patch @@ -0,0 +1,49 @@ +From 5e8865c0e08861558c1253c521dc9098d0c773ee Mon Sep 17 00:00:00 2001 +From: Jens Axboe +Date: Mon, 16 Mar 2020 08:30:36 -0600 +Subject: [PATCH] t/io_uring: don't use *rand48_r() variants + +Not available on all platforms. + +Signed-off-by: Jens Axboe + +[Patch from upstream +https://github.com/axboe/fio/commit/5e8865c0e08861558c1253c521dc9098d0c773ee] +Signed-off-by: Heiko Thiery +--- + t/io_uring.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/t/io_uring.c b/t/io_uring.c +index e84a2b6b..d48db1e9 100644 +--- a/t/io_uring.c ++++ b/t/io_uring.c +@@ -63,7 +63,6 @@ struct file { + struct submitter { + pthread_t thread; + int ring_fd; +- struct drand48_data rand; + struct io_sq_ring sq_ring; + struct io_uring_sqe *sqes; + struct io_cq_ring cq_ring; +@@ -170,7 +169,7 @@ static void init_io(struct submitter *s, unsigned index) + } + f->pending_ios++; + +- lrand48_r(&s->rand, &r); ++ r = lrand48(); + offset = (r % (f->max_blocks - 1)) * BS; + + if (register_files) { +@@ -286,7 +285,7 @@ static void *submitter_fn(void *data) + + printf("submitter=%d\n", gettid()); + +- srand48_r(pthread_self(), &s->rand); ++ srand48(pthread_self()); + + prepped = 0; + do { +-- +2.20.1 + diff --git a/package/fio/0002-Makefile-fix-build-of-io_uring-on-sh4.patch b/package/fio/0002-Makefile-fix-build-of-io_uring-on-sh4.patch new file mode 100644 index 00000000..69bda93d --- /dev/null +++ b/package/fio/0002-Makefile-fix-build-of-io_uring-on-sh4.patch @@ -0,0 +1,33 @@ +From e1985f9097f37748efdc29239eb3fb6a00b12f27 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 23 May 2020 19:07:40 +0200 +Subject: [PATCH] Makefile: fix build of io_uring on sh4 + +SuperH compile currently fails with: + +/usr/lfs/hdd_v1/rc-buildroot-test/scripts/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/sh4-buildroot-linux-uclibc/8.3.0/../../../../sh4-buildroot-linux-uclibc/bin/ld: t/io_uring.o: in function `submitter_fn': +/usr/lfs/hdd_v1/rc-buildroot-test/scripts/instance-0/output-1/build/fio-3.19/t/io_uring.c:131: undefined reference to `arch_flags' +/usr/lfs/hdd_v1/rc-buildroot-test/scripts/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/sh4-buildroot-linux-uclibc/8.3.0/../../../../sh4-buildroot-linux-uclibc/bin/ld: /usr/lfs/hdd_v1/rc-buildroot-test/scripts/instance-0/output-1/build/fio-3.19/t/io_uring.c:367: undefined reference to `arch_flags' +collect2: error: ld returned 1 exit status + +Fix that by ensuring we have a stub arch.o with the necessary arch flags + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/axboe/fio/commit/e1985f9097f37748efdc29239eb3fb6a00b12f27] +--- + Makefile | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/Makefile b/Makefile +index f1e984f5f..e39621954 100644 +--- a/Makefile ++++ b/Makefile +@@ -283,6 +283,7 @@ T_PIPE_ASYNC_OBJS = t/read-to-pipe-async.o + T_PIPE_ASYNC_PROGS = t/read-to-pipe-async + + T_IOU_RING_OBJS = t/io_uring.o ++T_IOU_RING_OBJS += t/arch.o + T_IOU_RING_PROGS = t/io_uring + + T_MEMLOCK_OBJS = t/memlock.o diff --git a/package/fio/Config.in b/package/fio/Config.in new file mode 100644 index 00000000..8da227db --- /dev/null +++ b/package/fio/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_FIO + bool "fio" + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_TOOLCHAIN_HAS_THREADS + # fio uses fallocate() which becomes fallocate64() while compiling with + # largefile support, but fallocate64() is not available on nios2 + depends on !BR2_nios2 + help + fio is an I/O tool meant to be used both for benchmark + and stress/hardware verification. + + http://git.kernel.dk/?p=fio.git;a=summary + +comment "fio needs a toolchain w/ dynamic library, threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_nios2 + depends on BR2_USE_MMU diff --git a/package/fio/fio.hash b/package/fio/fio.hash new file mode 100644 index 00000000..d95deb20 --- /dev/null +++ b/package/fio/fio.hash @@ -0,0 +1,4 @@ +# Locally computed +sha256 a2f885834900f554127718716338914791f5d72800b6f9e3edf173b94b5a2e4e fio-3.19.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING +sha256 8a240c1ad13d1fe3e58588643d81d0695899be4a669fe6d8fafa76ca6a89db2c MORAL-LICENSE diff --git a/package/fio/fio.mk b/package/fio/fio.mk new file mode 100644 index 00000000..3ddd74ed --- /dev/null +++ b/package/fio/fio.mk @@ -0,0 +1,36 @@ +################################################################################ +# +# fio +# +################################################################################ + +FIO_VERSION = 3.19 +FIO_SITE = http://brick.kernel.dk/snaps +FIO_LICENSE = GPL-2.0 +FIO_LICENSE_FILES = COPYING MORAL-LICENSE + +ifeq ($(BR2_PACKAGE_LIBAIO),y) +FIO_DEPENDENCIES += libaio +endif + +ifeq ($(BR2_PACKAGE_NUMACTL),y) +FIO_DEPENDENCIES += numactl +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +FIO_DEPENDENCIES += zlib +endif + +define FIO_CONFIGURE_CMDS + (cd $(@D); $(TARGET_MAKE_ENV) ./configure --cc="$(TARGET_CC)" --extra-cflags="$(TARGET_CFLAGS)") +endef + +define FIO_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define FIO_INSTALL_TARGET_CMDS + $(INSTALL) -D $(@D)/fio $(TARGET_DIR)/usr/bin/fio +endef + +$(eval $(generic-package)) diff --git a/package/flac/0001-configure.ac-check-for-sys-auxv.h-before-defining-FL.patch b/package/flac/0001-configure.ac-check-for-sys-auxv.h-before-defining-FL.patch new file mode 100644 index 00000000..d1398d4b --- /dev/null +++ b/package/flac/0001-configure.ac-check-for-sys-auxv.h-before-defining-FL.patch @@ -0,0 +1,36 @@ +From 14a0713389fbfef59225d027ea466ebb478a8c6b Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Thu, 19 Sep 2019 21:18:04 +0200 +Subject: [PATCH] configure.ac: check for sys/auxv.h before defining FLAC__CPU_PPC + +Upstream: https://github.com/xiph/flac/pull/142 +Signed-off-by: Peter Seiderer +--- + configure.ac | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 0228a12..64cb3f2 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -144,7 +144,7 @@ case "$host_cpu" in + powerpc64|powerpc64le) + cpu_ppc64=true + cpu_ppc=true +- AC_DEFINE(FLAC__CPU_PPC) ++ AC_CHECK_HEADER(sys/auxv.h, AC_DEFINE(FLAC__CPU_PPC)) + AH_TEMPLATE(FLAC__CPU_PPC, [define if building for PowerPC]) + AC_DEFINE(FLAC__CPU_PPC64) + AH_TEMPLATE(FLAC__CPU_PPC64, [define if building for PowerPC64]) +@@ -152,7 +152,7 @@ case "$host_cpu" in + ;; + powerpc|powerpcle) + cpu_ppc=true +- AC_DEFINE(FLAC__CPU_PPC) ++ AC_CHECK_HEADER(sys/auxv.h, AC_DEFINE(FLAC__CPU_PPC)) + AH_TEMPLATE(FLAC__CPU_PPC, [define if building for PowerPC]) + asm_optimisation=$asm_opt + ;; +-- +2.23.0 + diff --git a/package/flac/Config.in b/package/flac/Config.in new file mode 100644 index 00000000..267acb7f --- /dev/null +++ b/package/flac/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_FLAC + bool "flac" + depends on BR2_USE_WCHAR + help + FLAC is an Open Source lossless audio codec. + + http://flac.sourceforge.net/ + +comment "flac needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR diff --git a/package/flac/flac.hash b/package/flac/flac.hash new file mode 100644 index 00000000..df7c2d1b --- /dev/null +++ b/package/flac/flac.hash @@ -0,0 +1,10 @@ +# From https://ftp.osuosl.org/pub/xiph/releases/flac/MD5SUMS +md5 26703ed2858c1fc9ffc05136d13daa69 flac-1.3.3.tar.xz +# From https://ftp.osuosl.org/pub/xiph/releases/flac/SHA1SUMS +sha1 6ac2e8f1dd18c9b0214c4d81bd70cdc1e943cffe flac-1.3.3.tar.xz +# From http://downloads.xiph.org/releases/flac/SHA256SUMS.txt +sha256 213e82bd716c9de6db2f98bcadbc4c24c7e2efe8c75939a1a84e28539c4e1748 flac-1.3.3.tar.xz +# Locally computed +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING.GPL +sha256 5df07007198989c622f5d41de8d703e7bef3d0e79d62e24332ee739a452af62a COPYING.LGPL +sha256 fa27cb11f13f97b0c5f3ff363b1e2610c6efe87ed175779cb2a78e44eb19d34c COPYING.Xiph diff --git a/package/flac/flac.mk b/package/flac/flac.mk new file mode 100644 index 00000000..9aa00b7f --- /dev/null +++ b/package/flac/flac.mk @@ -0,0 +1,38 @@ +################################################################################ +# +# flac +# +################################################################################ + +FLAC_VERSION = 1.3.3 +FLAC_SITE = http://downloads.xiph.org/releases/flac +FLAC_SOURCE = flac-$(FLAC_VERSION).tar.xz +FLAC_INSTALL_STAGING = YES +FLAC_DEPENDENCIES = $(if $(BR2_PACKAGE_LIBICONV),libiconv) +FLAC_LICENSE = Xiph BSD-like (libFLAC), GPL-2.0+ (tools), LGPL-2.1+ (other libraries) +FLAC_LICENSE_FILES = COPYING.Xiph COPYING.GPL COPYING.LGPL +FLAC_CPE_ID_VENDOR = flac_project + +# patch touching configure.ac +FLAC_AUTORECONF = YES + +FLAC_CONF_OPTS = \ + $(if $(BR2_INSTALL_LIBSTDCPP),--enable-cpplibs,--disable-cpplibs) \ + --disable-xmms-plugin \ + --disable-altivec + +ifeq ($(BR2_PACKAGE_LIBOGG),y) +FLAC_CONF_OPTS += --with-ogg=$(STAGING_DIR)/usr +FLAC_DEPENDENCIES += libogg +else +FLAC_CONF_OPTS += --disable-ogg +endif + +ifeq ($(BR2_X86_CPU_HAS_SSE),y) +FLAC_DEPENDENCIES += host-nasm +FLAC_CONF_OPTS += --enable-sse +else +FLAC_CONF_OPTS += --disable-sse +endif + +$(eval $(autotools-package)) diff --git a/package/flann/0001-src-cpp-fix-cmake-3.11-build.patch b/package/flann/0001-src-cpp-fix-cmake-3.11-build.patch new file mode 100644 index 00000000..b37bedcf --- /dev/null +++ b/package/flann/0001-src-cpp-fix-cmake-3.11-build.patch @@ -0,0 +1,80 @@ +From fa5ec96a94646492a3f908e12905b3e48a8e800b Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Wed, 18 Apr 2018 20:24:13 +0200 +Subject: [PATCH] src/cpp: fix cmake >= 3.11 build + +CMake < 3.11 doesn't support add_library() without any source file +(i.e add_library(foo SHARED)). But flann CMake use a trick that use +an empty string "" as source list (i.e add_library(foo SHARED "")). +This look like a bug in CMake < 3.11. + +With CMake >= 3.11, the new behaviour of add_library() break the +existing flann CMake code. + +From CMake Changelog [1]: +"add_library() and add_executable() commands can now be called without + any sources and will not complain as long as sources are added later + via the target_sources() command." + +Note: flann CMake code doesn't use target_sources() since no source file +are provided intentionally since the flann shared library is created by +linking with the flann_cpp_s static library with this line: + +target_link_libraries(flann_cpp -Wl,-whole-archive flann_cpp_s -Wl,-no-whole-archive) + +If you try to use "add_library(flann_cpp SHARED ${CPP_SOURCES})" (as it should +be normally done), the link fail due to already defined symbol. + +They are building the shared version using the static library "to speedup the +build time" [3] + +This issue is already reported upstream [2] with a proposed solution. + +Upstream status: Pending + +Fixes: +http://autobuild.buildroot.net/results/b2f/b2febfaf8c44ce477b3e4a5b9b976fd25e8d7454 + +[1] https://cmake.org/cmake/help/v3.11/release/3.11.html +[2] https://github.com/mariusmuja/flann/issues/369 +[3] https://github.com/mariusmuja/flann/commit/0fd62b43be2fbb0b8d791ee36290791224dc030c + +Signed-off-by: Romain Naour +--- + src/cpp/CMakeLists.txt | 4 ++-- + src/cpp/empty.cpp | 1 + + 2 files changed, 3 insertions(+), 2 deletions(-) + create mode 100644 src/cpp/empty.cpp + +diff --git a/src/cpp/CMakeLists.txt b/src/cpp/CMakeLists.txt +index b44a735..a816863 100644 +--- a/src/cpp/CMakeLists.txt ++++ b/src/cpp/CMakeLists.txt +@@ -29,7 +29,7 @@ if (BUILD_CUDA_LIB) + endif() + + if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_COMPILER_IS_GNUCC) +- add_library(flann_cpp SHARED "") ++ add_library(flann_cpp SHARED "empty.cpp") + set_target_properties(flann_cpp PROPERTIES LINKER_LANGUAGE CXX) + target_link_libraries(flann_cpp -Wl,-whole-archive flann_cpp_s -Wl,-no-whole-archive) + +@@ -85,7 +85,7 @@ if (BUILD_C_BINDINGS) + set_property(TARGET flann_s PROPERTY COMPILE_DEFINITIONS FLANN_STATIC) + + if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_COMPILER_IS_GNUCC) +- add_library(flann SHARED "") ++ add_library(flann SHARED "empty.cpp") + set_target_properties(flann PROPERTIES LINKER_LANGUAGE CXX) + target_link_libraries(flann -Wl,-whole-archive flann_s -Wl,-no-whole-archive) + else() +diff --git a/src/cpp/empty.cpp b/src/cpp/empty.cpp +new file mode 100644 +index 0000000..40a8c17 +--- /dev/null ++++ b/src/cpp/empty.cpp +@@ -0,0 +1 @@ ++/* empty */ +-- +2.14.3 + diff --git a/package/flann/Config.in b/package/flann/Config.in new file mode 100644 index 00000000..3725fc78 --- /dev/null +++ b/package/flann/Config.in @@ -0,0 +1,25 @@ +config BR2_PACKAGE_FLANN + bool "flann" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS + help + FLANN is a library for performing fast approximate nearest + neighbor searches in high dimensional spaces. It contains a + collection of algorithms we found to work best for nearest + neighbor search and a system for automatically choosing the + best algorithm and optimum parameters depending on the + dataset. + + http://www.cs.ubc.ca/research/flann/ + +if BR2_PACKAGE_FLANN + +config BR2_PACKAGE_FLANN_EXAMPLES + bool "flann examples" + help + Build and install flann example applications. + +endif + +comment "flann needs a toolchain w/ C++, dynamic library" + depends on !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS diff --git a/package/flann/flann.hash b/package/flann/flann.hash new file mode 100644 index 00000000..543e4b48 --- /dev/null +++ b/package/flann/flann.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 b23b5f4e71139faa3bcb39e6bbcc76967fbaf308c4ee9d4f5bfbeceaa76cc5d3 flann-1.9.1.tar.gz +sha256 3993f339cc56506c62aa1eb2fb76f240ee93b738d857832899c1e207b1dc069a COPYING diff --git a/package/flann/flann.mk b/package/flann/flann.mk new file mode 100644 index 00000000..6c2e6a9e --- /dev/null +++ b/package/flann/flann.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# flann +# +################################################################################ + +FLANN_VERSION = 1.9.1 +FLANN_SITE = $(call github,mariusmuja,flann,$(FLANN_VERSION)) +FLANN_INSTALL_STAGING = YES +FLANN_LICENSE = BSD-3-Clause +FLANN_LICENSE_FILES = COPYING +FLANN_CONF_OPTS = \ + -DBUILD_C_BINDINGS=ON \ + -DBUILD_PYTHON_BINDINGS=OFF \ + -DBUILD_MATLAB_BINDINGS=OFF \ + -DBUILD_EXAMPLES=$(if $(BR2_PACKAGE_FLANN_EXAMPLES),ON,OFF) \ + -DUSE_OPENMP=$(if $(BR2_TOOLCHAIN_HAS_OPENMP),ON,OFF) \ + -DPYTHON_EXECUTABLE=OFF \ + -DCMAKE_DISABLE_FIND_PACKAGE_HDF5=TRUE + +FLANN_CXXFLAGS = $(TARGET_CXXFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_68485),y) +FLANN_CXXFLAGS += -O0 +endif + +FLANN_CONF_OPTS += -DCMAKE_CXX_FLAGS="$(FLANN_CXXFLAGS)" + +$(eval $(cmake-package)) diff --git a/package/flannel/Config.in b/package/flannel/Config.in new file mode 100644 index 00000000..32636108 --- /dev/null +++ b/package/flannel/Config.in @@ -0,0 +1,15 @@ +comment "flannel needs a toolchain w/ threads" + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_FLANNEL + bool "flannel" + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Flannel is a virtual network that gives a subnet to each + host for use with container runtimes. + + https://github.com/coreos/flannel diff --git a/package/flannel/flannel.hash b/package/flannel/flannel.hash new file mode 100644 index 00000000..8195140f --- /dev/null +++ b/package/flannel/flannel.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 7375318b288bcff733aabfe1a1007d478cb9091cdaffe68c8253ddd93bc070ed v0.12.0.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE diff --git a/package/flannel/flannel.mk b/package/flannel/flannel.mk new file mode 100644 index 00000000..8aa960f0 --- /dev/null +++ b/package/flannel/flannel.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# flannel +# +################################################################################ + +FLANNEL_VERSION = 0.12.0 +FLANNEL_SITE = https://github.com/coreos/flannel/archive +FLANNEL_SOURCE = v$(FLANNEL_VERSION).tar.gz + +FLANNEL_LICENSE = Apache-2.0 +FLANNEL_LICENSE_FILES = LICENSE + +FLANNEL_LDFLAGS = -X github.com/coreos/flannel/version.Version=$(FLANNEL_VERSION) + +# Install flannel to its well known location. +define FLANNEL_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/bin/flannel $(TARGET_DIR)/opt/bin/flanneld + $(INSTALL) -D -m 0755 $(@D)/dist/mk-docker-opts.sh $(TARGET_DIR)/opt/bin/mk-docker-opts.sh +endef + +$(eval $(golang-package)) diff --git a/package/flare-engine/Config.in b/package/flare-engine/Config.in new file mode 100644 index 00000000..d08b740a --- /dev/null +++ b/package/flare-engine/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_FLARE_ENGINE + bool "flare-engine" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS # SDL2 + select BR2_PACKAGE_LIBPNG # SDL2_IMAGE needs libpng support + select BR2_PACKAGE_SDL2 + select BR2_PACKAGE_SDL2_IMAGE + select BR2_PACKAGE_SDL2_MIXER + select BR2_PACKAGE_SDL2_TTF + help + Flare (Free Libre Action Roleplaying Engine) is a simple game + engine built to handle a very specific kind of game: + single-player 2D action RPGs. + Flare is not a reimplementation of an existing game or engine. + It is a tribute to and exploration of the action RPG genre. + + http://flarerpg.org + +comment "flare-engine needs a toolchain w/ C++, dynamic library" + depends on !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS diff --git a/package/flare-engine/flare-engine.hash b/package/flare-engine/flare-engine.hash new file mode 100644 index 00000000..0e37a719 --- /dev/null +++ b/package/flare-engine/flare-engine.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 035ffd936d9e120dc2eb792779a0b7ff64574d4a29a1124946deaf7946d1059d flare-engine-1.11.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/flare-engine/flare-engine.mk b/package/flare-engine/flare-engine.mk new file mode 100644 index 00000000..e2f3eefa --- /dev/null +++ b/package/flare-engine/flare-engine.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# flare-engine +# +################################################################################ + +FLARE_ENGINE_VERSION = 1.11 +FLARE_ENGINE_SITE = $(call github,flareteam,flare-engine,v$(FLARE_ENGINE_VERSION)) +FLARE_ENGINE_LICENSE = GPL-3.0+ +FLARE_ENGINE_LICENSE_FILES = COPYING + +FLARE_ENGINE_DEPENDENCIES += sdl2 sdl2_image sdl2_mixer sdl2_ttf + +# Don't use /usr/games and /usr/share/games +FLARE_ENGINE_CONF_OPTS += -DBINDIR=bin -DDATADIR=share/flare + +# Don't use the default Debug type as it adds -pg (gprof) +ifeq ($(BR2_ENABLE_DEBUG),y) +FLARE_ENGINE_CONF_OPTS += -DCMAKE_BUILD_TYPE=RelWithDebInfo +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y) +# CMakeLists.txt sets CMAKE_CXX_FLAGS_ depending on +# BUILD_TYPE, and this comes after the generic CMAKE_CXX_FLAGS. +# Override CMAKE_BUILD_TYPE so no overrides are applied. +FLARE_ENGINE_CONF_OPTS += -DCMAKE_BUILD_TYPE=Buildroot +FLARE_ENGINE_CONF_OPTS += -DCMAKE_CXX_FLAGS="$(TARGET_CXXFLAGS) -O0" +endif + +$(eval $(cmake-package)) diff --git a/package/flare-game/Config.in b/package/flare-game/Config.in new file mode 100644 index 00000000..ca68d19a --- /dev/null +++ b/package/flare-game/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_FLARE_GAME + bool "flare-game" + depends on BR2_PACKAGE_FLARE_ENGINE + help + Flare is an open source, 2D action RPG licensed under the + GPL3 license. Its game play can be likened to the games in + the Diablo series. + + This package, flare-game, only contains the game data. The + game engine itself is part of a separate package, + flame-engine. + + http://flarerpg.org diff --git a/package/flare-game/flare-game.hash b/package/flare-game/flare-game.hash new file mode 100644 index 00000000..983c2320 --- /dev/null +++ b/package/flare-game/flare-game.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 c13231c7dd021252487f6cf117f7f2bb24bbda40af0a2b2902d72b5e2d4c242a flare-game-1.11.tar.gz +sha256 3f941b3b89cf7b8370ceb83cc76d2120d471b58735d8ca60238a751a48d7f72f LICENSE.txt diff --git a/package/flare-game/flare-game.mk b/package/flare-game/flare-game.mk new file mode 100644 index 00000000..4bebc795 --- /dev/null +++ b/package/flare-game/flare-game.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# flare-game +# +################################################################################ + +FLARE_GAME_VERSION = 1.11 +FLARE_GAME_SITE = $(call github,flareteam,flare-game,v$(FLARE_GAME_VERSION)) +FLARE_GAME_LICENSE = CC-BY-SA-3.0 (data files), GPL-2.0 (GNU Unifont), \ + OFL-1.1 (Liberation Sans) +FLARE_GAME_LICENSE_FILES = README + +FLARE_GAME_DEPENDENCIES = flare-engine + +# Don't use /usr/share/games +FLARE_GAME_CONF_OPTS += -DDATADIR=share/flare + +$(eval $(cmake-package)) diff --git a/package/flashbench/Config.in b/package/flashbench/Config.in new file mode 100644 index 00000000..a50f482a --- /dev/null +++ b/package/flashbench/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_FLASHBENCH + bool "flashbench" + help + Flashbench - Identify characteristics of flash media. + + This is the tool used to identify the properties of + SD cards and other media for the Linaro flash memory + survey. + + https://git.linaro.org/people/arnd.bergmann/flashbench.git diff --git a/package/flashbench/flashbench.hash b/package/flashbench/flashbench.hash new file mode 100644 index 00000000..9906af02 --- /dev/null +++ b/package/flashbench/flashbench.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 422860966ad3528a7fd1dc88e4aa0b2bd91f11fa6429523b9acd21dc5beb6a19 flashbench-2e30b1968a66147412f21002ea844122a0d5e2f0-br1.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/flashbench/flashbench.mk b/package/flashbench/flashbench.mk new file mode 100644 index 00000000..e89a250a --- /dev/null +++ b/package/flashbench/flashbench.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# flashbench +# +################################################################################ + +FLASHBENCH_VERSION = 2e30b1968a66147412f21002ea844122a0d5e2f0 +FLASHBENCH_SITE = git://git.linaro.org/people/arnd/flashbench.git +FLASHBENCH_LICENSE = GPL-2.0 +FLASHBENCH_LICENSE_FILES = COPYING + +define FLASHBENCH_BUILD_CMDS + $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(TARGET_CFLAGS)" \ + LDFLAGS="$(TARGET_LDFLAGS) -lrt" +endef + +define FLASHBENCH_INSTALL_TARGET_CMDS + $(INSTALL) -m 755 -D $(@D)/flashbench $(TARGET_DIR)/usr/bin/flashbench + $(INSTALL) -m 755 -D $(@D)/erase $(TARGET_DIR)/usr/bin/erase +endef + +$(eval $(generic-package)) diff --git a/package/flashrom/0001-Makefile-Fix-building-on-AArch64-NixOS.patch b/package/flashrom/0001-Makefile-Fix-building-on-AArch64-NixOS.patch new file mode 100644 index 00000000..f835172e --- /dev/null +++ b/package/flashrom/0001-Makefile-Fix-building-on-AArch64-NixOS.patch @@ -0,0 +1,95 @@ +From da6b3b70cb852dd8e9f9e21aef95fa83e7f7ab0d Mon Sep 17 00:00:00 2001 +From: Pyry Kontio +Date: Mon, 6 Jul 2020 12:57:35 +0900 +Subject: [PATCH] Makefile: Fix building on AArch64 NixOS + +The parsing of the output of archtest.c produced an unexpected +value on AArch64 NixOS. For example, the make variable ARCH was set to: + +``` +bit outside of fd_set selected +arm +``` + +This made the arch and OS checks fail. + +This commit simplifies the parsing, making it more robust. + +The C files archtest.c, endiantest.c and os.h used to set the +TARGET_OS, ARCH and ENDIAN variables, respectively, output +the result of the test as the final line, so just extracting +the final line and removing double quoting is enough. + +This commit also fixes a bug with debug_shell lacking escaping +single quotes, which prevented using the single quote in the +debug_shell calls. It used to work by accident before this fix; +the line in the call happened to contain a balanced pair of double +quotes and lacked other characters that needed escaping, which +didn't break the debug_shell, but this was accidental and very +brittle. + +Signed-off-by: Pyry Kontio +Change-Id: Iaa4477a71e758cf9ecad2c22f3b77bc6508a3510 +Reviewed-on: https://review.coreboot.org/c/flashrom/+/43140 +Tested-by: build bot (Jenkins) +Reviewed-by: Angel Pons + +[Retrieved from: +https://github.com/flashrom/flashrom/commit/da6b3b70cb852dd8e9f9e21aef95fa83e7f7ab0d] +Signed-off-by: Fabrice Fontaine +--- + Makefile | 16 ++++++++++------ + 1 file changed, 10 insertions(+), 6 deletions(-) + +diff --git a/Makefile b/Makefile +index f3f7717e2..e475cbdbd 100644 +--- a/Makefile ++++ b/Makefile +@@ -83,7 +83,8 @@ dummy_for_make_3_80:=$(shell printf "Build started on %s\n\n" "$$(date)" >$(BUIL + + # Provide an easy way to execute a command, print its output to stdout and capture any error message on stderr + # in the build details file together with the original stdout output. +-debug_shell = $(shell export LC_ALL=C ; { echo 'exec: export LC_ALL=C ; { $(1) ; }' >&2; { $(1) ; } | tee -a $(BUILD_DETAILS_FILE) ; echo >&2 ; } 2>>$(BUILD_DETAILS_FILE)) ++debug_shell = $(shell export LC_ALL=C ; { echo 'exec: export LC_ALL=C ; { $(subst ','\'',$(1)) ; }' >&2; \ ++ { $(1) ; } | tee -a $(BUILD_DETAILS_FILE) ; echo >&2 ; } 2>>$(BUILD_DETAILS_FILE)) + + ############################################################################### + # General OS-specific settings. +@@ -106,7 +107,8 @@ endif + # IMPORTANT: The following line must be placed before TARGET_OS is ever used + # (of course), but should come after any lines setting CC because the line + # below uses CC itself. +-override TARGET_OS := $(strip $(call debug_shell,$(CC) $(CPPFLAGS) -E os.h 2>/dev/null | grep -v '^\#' | grep '"' | cut -f 2 -d'"')) ++override TARGET_OS := $(strip $(call debug_shell,$(CC) $(CPPFLAGS) -E os.h 2>/dev/null \ ++ | tail -1 | cut -f 2 -d'"')) + + ifeq ($(TARGET_OS), Darwin) + override CPPFLAGS += -I/opt/local/include -I/usr/local/include +@@ -490,8 +492,10 @@ endif + # IMPORTANT: The following line must be placed before ARCH is ever used + # (of course), but should come after any lines setting CC because the line + # below uses CC itself. +-override ARCH := $(strip $(call debug_shell,$(CC) $(CPPFLAGS) -E archtest.c 2>/dev/null | grep -v '^\#' | grep '"' | cut -f 2 -d'"')) +-override ENDIAN := $(strip $(call debug_shell,$(CC) $(CPPFLAGS) -E endiantest.c 2>/dev/null | grep -v '^\#')) ++override ARCH := $(strip $(call debug_shell,$(CC) $(CPPFLAGS) -E archtest.c 2>/dev/null \ ++ | tail -1 | cut -f 2 -d'"')) ++override ENDIAN := $(strip $(call debug_shell,$(CC) $(CPPFLAGS) -E endiantest.c 2>/dev/null \ ++ | tail -1)) + + # Disable the internal programmer on unsupported architectures (everything but x86 and mipsel) + ifneq ($(ARCH)-little, $(filter $(ARCH),x86 mips)-$(ENDIAN)) +@@ -1299,12 +1303,12 @@ compiler: featuresavailable + @printf "Target arch is " + @# FreeBSD wc will output extraneous whitespace. + @echo $(ARCH)|wc -w|grep -q '^[[:blank:]]*1[[:blank:]]*$$' || \ +- ( echo "unknown. Aborting."; exit 1) ++ ( echo "unknown (\"$(ARCH)\"). Aborting."; exit 1) + @printf "%s\n" '$(ARCH)' + @printf "Target OS is " + @# FreeBSD wc will output extraneous whitespace. + @echo $(TARGET_OS)|wc -w|grep -q '^[[:blank:]]*1[[:blank:]]*$$' || \ +- ( echo "unknown. Aborting."; exit 1) ++ ( echo "unknown (\"$(TARGET_OS)\"). Aborting."; exit 1) + @printf "%s\n" '$(TARGET_OS)' + ifeq ($(TARGET_OS), libpayload) + @$(CC) --version 2>&1 | grep -q coreboot || \ diff --git a/package/flashrom/Config.in b/package/flashrom/Config.in new file mode 100644 index 00000000..182a3f45 --- /dev/null +++ b/package/flashrom/Config.in @@ -0,0 +1,24 @@ +config BR2_PACKAGE_FLASHROM_ARCH_SUPPORTS + bool + default y if BR2_aarch64 || BR2_aarch64_be + default y if BR2_arc + default y if BR2_arm || BR2_armeb + default y if BR2_i386 || BR2_x86_64 + default y if BR2_m68k + default y if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el + default y if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le + default y if BR2_riscv + default y if BR2_sh + default y if BR2_sparc || BR2_sparc64 + +config BR2_PACKAGE_FLASHROM + bool "flashrom" + depends on BR2_PACKAGE_FLASHROM_ARCH_SUPPORTS + help + flashrom is a utility for identifying, reading, writing, + verifying and erasing flash chips. It is designed to flash + BIOS/EFI/coreboot/firmware/optionROM images on mainboards, + network/graphics/storage controller cards, and various other + programmer devices. + + http://flashrom.org/ diff --git a/package/flashrom/flashrom.hash b/package/flashrom/flashrom.hash new file mode 100644 index 00000000..97df4fe9 --- /dev/null +++ b/package/flashrom/flashrom.hash @@ -0,0 +1,4 @@ +# Locally computed after checking pgp signature +# https://download.flashrom.org/releases/flashrom-v1.2.tar.bz2.asc +sha256 e1f8d95881f5a4365dfe58776ce821dfcee0f138f75d0f44f8a3cd032d9ea42b flashrom-v1.2.tar.bz2 +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/flashrom/flashrom.mk b/package/flashrom/flashrom.mk new file mode 100644 index 00000000..5554082b --- /dev/null +++ b/package/flashrom/flashrom.mk @@ -0,0 +1,48 @@ +################################################################################ +# +# flashrom +# +################################################################################ + +FLASHROM_VERSION = 1.2 +FLASHROM_SOURCE = flashrom-v$(FLASHROM_VERSION).tar.bz2 +FLASHROM_SITE = https://download.flashrom.org/releases +FLASHROM_LICENSE = GPL-2.0+ +FLASHROM_LICENSE_FILES = COPYING + +ifeq ($(BR2_PACKAGE_LIBFTDI),y) +FLASHROM_DEPENDENCIES += host-pkgconf libftdi +FLASHROM_MAKE_OPTS += \ + CONFIG_FT2232_SPI=yes \ + CONFIG_USBBLASTER_SPI=yes +else +FLASHROM_MAKE_OPTS += \ + CONFIG_FT2232_SPI=no \ + CONFIG_USBBLASTER_SPI=no +endif + +ifeq ($(BR2_PACKAGE_LIBUSB),y) +FLASHROM_DEPENDENCIES += host-pkgconf libusb +FLASHROM_MAKE_OPTS += CONFIG_ENABLE_LIBUSB1_PROGRAMMERS=yes +else +FLASHROM_MAKE_OPTS += CONFIG_ENABLE_LIBUSB1_PROGRAMMERS=no +endif + +ifeq ($(BR2_PACKAGE_PCIUTILS),y) +FLASHROM_DEPENDENCIES += pciutils +FLASHROM_MAKE_OPTS += CONFIG_ENABLE_LIBPCI_PROGRAMMERS=yes +else +FLASHROM_MAKE_OPTS += CONFIG_ENABLE_LIBPCI_PROGRAMMERS=no +endif + +define FLASHROM_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(TARGET_CFLAGS) -DHAVE_STRNLEN" \ + $(FLASHROM_MAKE_OPTS) -C $(@D) +endef + +define FLASHROM_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/flashrom $(TARGET_DIR)/usr/sbin/flashrom +endef + +$(eval $(generic-package)) diff --git a/package/flatbuffers/Config.in b/package/flatbuffers/Config.in new file mode 100644 index 00000000..99273828 --- /dev/null +++ b/package/flatbuffers/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_FLATBUFFERS + bool "flatbuffers" + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 # C++11 + depends on BR2_INSTALL_LIBSTDCPP + help + FlatBuffers is an efficient cross platform serialization + library for C++, C#, C, Go, Java, JavaScript, PHP, and + Python. It was originally created at Google for game + development and other performance-critical applications. + + http://google.github.io/flatbuffers/ + +comment "flatbuffers needs a toolchain w/ C++, gcc >= 4.7" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 diff --git a/package/flatbuffers/flatbuffers.hash b/package/flatbuffers/flatbuffers.hash new file mode 100644 index 00000000..82ef9427 --- /dev/null +++ b/package/flatbuffers/flatbuffers.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 62f2223fb9181d1d6338451375628975775f7522185266cd5296571ac152bc45 flatbuffers-1.12.0.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE.txt diff --git a/package/flatbuffers/flatbuffers.mk b/package/flatbuffers/flatbuffers.mk new file mode 100644 index 00000000..814751f3 --- /dev/null +++ b/package/flatbuffers/flatbuffers.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# flatbuffers +# +################################################################################ + +FLATBUFFERS_VERSION = 1.12.0 +FLATBUFFERS_SITE = $(call github,google,flatbuffers,v$(FLATBUFFERS_VERSION)) +FLATBUFFERS_LICENSE = Apache-2.0 +FLATBUFFERS_LICENSE_FILES = LICENSE.txt +FLATBUFFERS_CPE_ID_VENDOR = google +FLATBUFFERS_INSTALL_STAGING = YES + +FLATBUFFERS_CONF_OPTS += \ + -DCMAKE_CXX_FLAGS="-std=c++11" \ + -DFLATBUFFERS_BUILD_TESTS=OFF + +ifeq ($(BR2_STATIC_LIBS),y) +FLATBUFFERS_CONF_OPTS += -DFLATBUFFERS_BUILD_SHAREDLIB=OFF +else +FLATBUFFERS_CONF_OPTS += -DFLATBUFFERS_BUILD_SHAREDLIB=ON +endif + +HOST_FLATBUFFERS_CONF_OPTS += \ + -DCMAKE_CXX_FLAGS="-std=c++11" \ + -DFLATBUFFERS_BUILD_FLATLIB=OFF \ + -DFLATBUFFERS_BUILD_FLATC=ON \ + -DFLATBUFFERS_BUILD_FLATHASH=OFF \ + -DFLATBUFFERS_BUILD_GRPCTEST=OFF \ + -DFLATBUFFERS_BUILD_SHAREDLIB=OFF \ + -DFLATBUFFERS_BUILD_TESTS=OFF + +$(eval $(cmake-package)) +$(eval $(host-cmake-package)) diff --git a/package/flatcc/Config.in b/package/flatcc/Config.in new file mode 100644 index 00000000..6273f2b5 --- /dev/null +++ b/package/flatcc/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_FLATCC + bool "flatcc" + help + flatcc is C language implementation of Google Flatbuffers. It + consists of both a library for the target as well as a + flatbuffer compiler tool for the host. + + https://github.com/dvidelabs/flatcc diff --git a/package/flatcc/flatcc.hash b/package/flatcc/flatcc.hash new file mode 100644 index 00000000..11d9d980 --- /dev/null +++ b/package/flatcc/flatcc.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 a92da3566d11e19bb807a83554b1a2c644a5bd91c9d9b088514456bb56e1c666 flatcc-0.6.0.tar.gz +sha256 c8f0d9c1f92c658d87ebd854ee7447a3d3912d2c3a5c78c117787be5d5da8af3 LICENSE diff --git a/package/flatcc/flatcc.mk b/package/flatcc/flatcc.mk new file mode 100644 index 00000000..fcace691 --- /dev/null +++ b/package/flatcc/flatcc.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# FLATCC +# +################################################################################ + +FLATCC_VERSION = 0.6.0 +FLATCC_SITE = $(call github,dvidelabs,flatcc,v$(FLATCC_VERSION)) +FLATCC_LICENSE = Apache-2.0 +FLATCC_LICENSE_FILES = LICENSE +FLATCC_INSTALL_STAGING = YES +FLATCC_DEPENDENCIES = host-flatcc +FLATCC_CONF_OPTS = -DFLATCC_ALLOW_WERROR=OFF +HOST_FLATCC_CONF_OPTS = -DFLATCC_ALLOW_WERROR=OFF + +# Disable build of tests and samples +FLATCC_CONF_OPTS += -DFLATCC_TEST=OFF +HOST_FLATCC_CONF_OPTS += -DFLATCC_TEST=OFF + +# Enable install targets +FLATCC_CONF_OPTS += -DFLATCC_INSTALL=ON +HOST_FLATCC_CONF_OPTS += -DFLATCC_INSTALL=ON + +# compiler is named flatcc or flatcc_d depending on BR2_ENABLE_DEBUG value +define FLATCC_TARGET_REMOVE_FLATCC_COMPILER + rm $(TARGET_DIR)/usr/bin/flatcc* +endef + +FLATCC_POST_INSTALL_TARGET_HOOKS += FLATCC_TARGET_REMOVE_FLATCC_COMPILER + +$(eval $(cmake-package)) +$(eval $(host-cmake-package)) diff --git a/package/flex/0001-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch b/package/flex/0001-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch new file mode 100644 index 00000000..06747a36 --- /dev/null +++ b/package/flex/0001-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch @@ -0,0 +1,35 @@ +From ffa886a580929f26fd5e5a40c9c5334955c48553 Mon Sep 17 00:00:00 2001 +From: Explorer09 +Date: Mon, 4 Sep 2017 10:47:33 +0800 +Subject: [PATCH] build: AC_USE_SYSTEM_EXTENSIONS in configure.ac. + +This would, e.g. define _GNU_SOURCE in config.h, enabling the +reallocarray() prototype in glibc 2.26+ on Linux systems with that +version of glibc. + +Fixes #241. + +Backported from: 24fd0551333e7eded87b64dd36062da3df2f6380 +Signed-off-by: Adrian Perez de Castro +--- + configure.ac | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 55e774b..c879fe1 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -25,8 +25,10 @@ + # autoconf requirements and initialization + + AC_INIT([the fast lexical analyser generator],[2.6.4],[flex-help@lists.sourceforge.net],[flex]) ++AC_PREREQ([2.60]) + AC_CONFIG_SRCDIR([src/scan.l]) + AC_CONFIG_AUX_DIR([build-aux]) ++AC_USE_SYSTEM_EXTENSIONS + LT_INIT + AM_INIT_AUTOMAKE([1.11.3 -Wno-portability foreign check-news std-options dist-lzip parallel-tests subdir-objects]) + AC_CONFIG_HEADER([src/config.h]) +-- +2.14.1 + diff --git a/package/flex/0002-build-make-it-possible-to-disable-the-build-of-the-f.patch b/package/flex/0002-build-make-it-possible-to-disable-the-build-of-the-f.patch new file mode 100644 index 00000000..19f5a772 --- /dev/null +++ b/package/flex/0002-build-make-it-possible-to-disable-the-build-of-the-f.patch @@ -0,0 +1,76 @@ +From da21733178b34eea303964db5a05e8a3ee4095b4 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sat, 26 Aug 2017 15:17:06 +0200 +Subject: [PATCH] build: make it possible to disable the build of the flex + program + +The flex program uses fork(), which isn't available on noMMU +systems. However, the libfl library does not use fork(), and be used +by other programs/libraries. + +Therefore, it makes sense to provide an option to disable the build of +the flex program. + +Signed-off-by: Thomas Petazzoni +Signed-off-by: "Yann E. MORIN" + +--- +Submitted-upstream: https://github.com/westes/flex/pull/256 +Refused. We'll have to adapt when they do a new release... +--- + Makefile.am | 2 ++ + configure.ac | 6 ++++++ + doc/Makefile.am | 4 ++++ + src/Makefile.am | 3 +++ + 4 files changed, 15 insertions(+) + +diff --git a/Makefile.am b/Makefile.am +index e790e9d..8b57bc9 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -62,8 +62,10 @@ ChangeLog: $(srcdir)/tools/git2cl + indent: + cd src && $(MAKE) $(AM_MAKEFLAGS) indent + ++if ENABLE_PROGRAM + install-exec-hook: + cd $(DESTDIR)$(bindir) && \ + $(LN_S) -f flex$(EXEEXT) flex++$(EXEEXT) ++endif + + .PHONY: ChangeLog indent +diff --git a/configure.ac b/configure.ac +index 8882016..f49872b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -75,6 +75,12 @@ AC_ARG_ENABLE([libfl], + [], [enable_libfl=yes]) + AM_CONDITIONAL([ENABLE_LIBFL], [test "x$enable_libfl" = xyes]) + ++AC_ARG_ENABLE([program], ++ [AS_HELP_STRING([--disable-program], ++ [do not build the flex program, only the libfl library])], ++ [], [enable_program=yes]) ++AM_CONDITIONAL([ENABLE_PROGRAM], [test "x$enable_program" = xyes]) ++ + # --disable-bootstrap is intended only to workaround problems with bootstrap + # (e.g. when cross-compiling flex or when bootstrapping has bugs). + # Ideally we should be able to bootstrap even when cross-compiling. +diff --git a/src/Makefile.am b/src/Makefile.am +index 0d13a5a..c73bc17 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -4,7 +4,10 @@ LIBS = @LIBS@ + + m4 = @M4@ + ++if ENABLE_PROGRAM + bin_PROGRAMS = flex ++endif ++ + if ENABLE_BOOTSTRAP + noinst_PROGRAMS = stage1flex + endif +-- +2.9.4 + diff --git a/package/flex/0003-build-make-it-possible-to-disable-the-build-of-the-d.patch b/package/flex/0003-build-make-it-possible-to-disable-the-build-of-the-d.patch new file mode 100644 index 00000000..ffe30d36 --- /dev/null +++ b/package/flex/0003-build-make-it-possible-to-disable-the-build-of-the-d.patch @@ -0,0 +1,58 @@ +From b89b8475a5b2f9444c32f7d254b35968da3c8a23 Mon Sep 17 00:00:00 2001 +From: "Yann E. MORIN" +Date: Fri, 29 Sep 2017 18:03:51 +0200 +Subject: [PATCH] build: make it possible to disable the build of the + documentation + +When targetting embedded evices, the documentation is not needed. + +Building the documentation default to whether the program is built. + +Signed-off-by: "Yann E. MORIN" +Cc: Thomas Petazzoni +--- + Makefile.am | 8 +++++++- + configure.ac | 6 ++++++ + 2 files changed, 13 insertions(+), 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index fce30b2..ee75b64 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -41,9 +41,15 @@ EXTRA_DIST = \ + .indent.pro \ + autogen.sh + ++MAYBE_SUBDIRS = ++ ++if ENABLE_DOC ++MAYBE_SUBDIRS += doc ++endif ++ + SUBDIRS = \ + src \ +- doc \ ++ $(MAYBE_SUBDIRS) \ + examples \ + po \ + tests \ +diff --git a/configure.ac b/configure.ac +index c54e98f..b3ae450 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -80,6 +80,12 @@ AC_ARG_ENABLE([program], + [], [enable_program=yes]) + AM_CONDITIONAL([ENABLE_PROGRAM], [test "x$enable_program" = xyes]) + ++AC_ARG_ENABLE([doc], ++ [AS_HELP_STRING([--disable-doc], ++ [do not build the documentation])], ++ [], [enable_doc=${enable_program}]) ++AM_CONDITIONAL([ENABLE_DOC], [test "x$enable_doc" = xyes -a "x$enable_program" = xyes]) ++ + # --disable-bootstrap is intended only to workaround problems with bootstrap + # (e.g. when cross-compiling flex or when bootstrapping has bugs). + # Ideally we should be able to bootstrap even when cross-compiling. +-- +2.11.0 + diff --git a/package/flex/Config.in b/package/flex/Config.in new file mode 100644 index 00000000..0690777a --- /dev/null +++ b/package/flex/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_FLEX + bool "flex" + help + A fast lexical analyser generator. A tool for generating + programs that perform pattern-matching on text. + + Only the library is available. + + https://github.com/westes/flex/ diff --git a/package/flex/flex.hash b/package/flex/flex.hash new file mode 100644 index 00000000..ee905739 --- /dev/null +++ b/package/flex/flex.hash @@ -0,0 +1,4 @@ +# Locally computed: +sha256 e87aae032bf07c26f85ac0ed3250998c37621d95f8bd748b31f15b33c45ee995 flex-2.6.4.tar.gz +# License files, locally calculated +sha256 97fd685958d93be7f8dab939bb8161dbd6afb0718c63bfc337c24321aea44273 COPYING diff --git a/package/flex/flex.mk b/package/flex/flex.mk new file mode 100644 index 00000000..85da5dda --- /dev/null +++ b/package/flex/flex.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# flex +# +################################################################################ + +FLEX_VERSION = 2.6.4 +FLEX_SITE = https://github.com/westes/flex/files/981163 +FLEX_INSTALL_STAGING = YES +FLEX_LICENSE = FLEX +FLEX_LICENSE_FILES = COPYING +FLEX_CPE_ID_VENDOR = flex_project +# bug does not cause stack overflows in the generated code and has been +# noted upstream as a bug in the code generator +FLEX_IGNORE_CVES = CVE-2019-6293 +FLEX_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) host-m4 +HOST_FLEX_DEPENDENCIES = host-m4 + +# 0001-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch +# 0002-build-make-it-possible-to-disable-the-build-of-the-f.patch +# 0003-build-make-it-possible-to-disable-the-build-of-the-d.patch +FLEX_AUTORECONF = YES +FLEX_GETTEXTIZE = YES +FLEX_CONF_ENV = ac_cv_path_M4=/usr/bin/m4 \ + ac_cv_func_reallocarray=no + +# Don't enable programs, they are not needed on the target, and +# require MMU support. +# Don't enable the doc, it's not needed on the target and requires +# special tools (help2man) to build. +FLEX_CONF_OPTS += --disable-program --disable-doc +HOST_FLEX_CONF_OPTS = --disable-doc + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/flickcurl/Config.in b/package/flickcurl/Config.in new file mode 100644 index 00000000..426ceecb --- /dev/null +++ b/package/flickcurl/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_FLICKCURL + bool "flickcurl" + select BR2_PACKAGE_LIBCURL + select BR2_PACKAGE_LIBXML2 + # Ensure that libcurl is built with crypto support, since + # flickcurl must access https:// URLs. + select BR2_PACKAGE_OPENSSL if !(BR2_PACKAGE_GNUTLS || BR2_PACKAGE_LIBNSS) + select BR2_PACKAGE_CA_CERTIFICATES # runtime + help + Flickcurl is a C library for the Flickr API, handling + creating the requests, signing, token management, calling + the API, marshalling request parameters and decoding + responses. + + http://librdf.org/flickcurl/ + +config BR2_PACKAGE_FLICKCURL_UTILS + bool "flickcurl utilities" + depends on BR2_PACKAGE_FLICKCURL + help + Install flickcurl utilites (flickcurl + flickrdf) to target. diff --git a/package/flickcurl/flickcurl.hash b/package/flickcurl/flickcurl.hash new file mode 100644 index 00000000..92ba6836 --- /dev/null +++ b/package/flickcurl/flickcurl.hash @@ -0,0 +1,7 @@ +# Locally calculated after checking pgp signature +sha256 ff42a36c7c1c7d368246f6bc9b7d792ed298348e5f0f5d432e49f6803562f5a3 flickcurl-1.26.tar.gz +# Locally computed +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 COPYING.LIB +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE-2.0.txt +sha256 3590f30b0fb9446a1f0a7ea5bcbb5786fa66fa362800f53d2575875d74b91909 LICENSE.html diff --git a/package/flickcurl/flickcurl.mk b/package/flickcurl/flickcurl.mk new file mode 100644 index 00000000..610b81f4 --- /dev/null +++ b/package/flickcurl/flickcurl.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# flickcurl +# +################################################################################ + +FLICKCURL_VERSION = 1.26 +FLICKCURL_SITE = http://download.dajobe.org/flickcurl +FLICKCURL_LICENSE = LGPL-2.1+ or GPL-2.0+ or Apache-2.0+ +FLICKCURL_LICENSE_FILES = COPYING COPYING.LIB LICENSE-2.0.txt LICENSE.html +FLICKCURL_INSTALL_STAGING = YES +FLICKCURL_CONFIG_SCRIPTS = flickcurl-config +FLICKCURL_CONF_OPTS = --without-curl-config --without-xml2-config --without-raptor +FLICKCURL_DEPENDENCIES = libcurl libxml2 host-pkgconf + +ifeq ($(BR2_PACKAGE_FLICKCURL_UTILS),) +define FLICKCURL_REMOVE_UTILS + rm -f $(TARGET_DIR)/usr/bin/flickcurl $(TARGET_DIR)/usr/bin/flickrdf +endef +FLICKCURL_POST_INSTALL_TARGET_HOOKS += FLICKCURL_REMOVE_UTILS +endif + +$(eval $(autotools-package)) diff --git a/package/flite/0001-fix-alsa-static.patch b/package/flite/0001-fix-alsa-static.patch new file mode 100644 index 00000000..7ed4899c --- /dev/null +++ b/package/flite/0001-fix-alsa-static.patch @@ -0,0 +1,19 @@ +Use pkg-config to determine alsa link flags. This fixes static linking. + +Signed-off-by: Baruch Siach + +diff -Nuar flite-1.4-release.orig/configure.in flite-1.4-release/configure.in +--- flite-1.4-release.orig/configure.in 2009-08-14 23:46:38.000000000 +0300 ++++ flite-1.4-release/configure.in 2014-04-30 18:52:33.253297236 +0300 +@@ -275,7 +275,10 @@ + #endif], + [AUDIODRIVER="alsa" + AUDIODEFS=-DCST_AUDIO_ALSA +- AUDIOLIBS=-lasound]) ++ AUDIOLIBS=`pkg-config --libs alsa` ++ if test "$shared" = false; then ++ AUDIOLIBS=`pkg-config --libs --static alsa` ++ fi]) + AC_CHECK_HEADER(mmsystem.h, + [AUDIODRIVER="wince" + AUDIODEFS=-DCST_AUDIO_WINCE diff --git a/package/flite/Config.in b/package/flite/Config.in new file mode 100644 index 00000000..0bb15511 --- /dev/null +++ b/package/flite/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_FLITE + bool "flite" + depends on BR2_USE_WCHAR + help + Flite: a small, fast run time synthesis engine. + + Flite (festival-lite) is a small, fast run-time synthesis + engine developed at CMU and primarily designed for small + embedded machines and/or large servers. Flite is designed as + an alternative synthesis engine to Festival for voices built + using the FestVox suite of voice building tools. + + http://www.festvox.org/flite + +comment "flite needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR diff --git a/package/flite/flite.hash b/package/flite/flite.hash new file mode 100644 index 00000000..f21a21d1 --- /dev/null +++ b/package/flite/flite.hash @@ -0,0 +1,4 @@ +# locally computed hash +sha256 c73c3f6a2ea764977d6eaf0a287722d1e2066b4697088c552e342c790f3d2b85 flite-2.1-release.tar.bz2 +# License files, locally calculated +sha256 d31bceaf2823d56a8c9400f7bde3b17140e739e991eb4f203bdcf9827754ab59 COPYING diff --git a/package/flite/flite.mk b/package/flite/flite.mk new file mode 100644 index 00000000..fd5f4ec1 --- /dev/null +++ b/package/flite/flite.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# flite +# +################################################################################ + +FLITE_VERSION = 2.1 +FLITE_SOURCE = flite-$(FLITE_VERSION)-release.tar.bz2 +FLITE_SITE = http://www.festvox.org/flite/packed/flite-$(FLITE_VERSION) +FLITE_LICENSE = BSD-4-Clause +FLITE_LICENSE_FILES = COPYING + +FLITE_INSTALL_STAGING = YES +# Patching configure.in +FLITE_AUTORECONF = YES +FLITE_DEPENDENCIES = host-pkgconf + +# Sadly, Flite does not support parallel build, especially when building its +# shared libraries. +FLITE_MAKE = $(MAKE1) + +ifeq ($(BR2_PACKAGE_ALSA_LIB),y) +FLITE_DEPENDENCIES += alsa-lib +FLITE_CONF_OPTS += --with-audio=alsa +else +FLITE_CONF_OPTS += --with-audio=oss +endif + +$(eval $(autotools-package)) diff --git a/package/flot/Config.in b/package/flot/Config.in new file mode 100644 index 00000000..40448720 --- /dev/null +++ b/package/flot/Config.in @@ -0,0 +1,97 @@ +config BR2_PACKAGE_FLOT + bool "flot" + select BR2_PACKAGE_JQUERY + help + Flot is a pure Javascript plotting library for jQuery. It + produces graphical plots of arbitrary datasets on-the-fly + client-side. + + The focus is on simple usage (all settings are optional), + attractive looks and interactive features like zooming and + mouse tracking. + + The plugin works with Internet Explorer 6+, Firefox 2.x+, + Safari 3.0+, Opera 9.5+ and Konqueror 4.x+ with the HTML + canvas tag. + + http://www.flotcharts.org/ + +if BR2_PACKAGE_FLOT + +comment "flot plugins" + +config BR2_PACKAGE_FLOT_CANVAS + bool "canvas" + help + Flot plugin to render axis tick labels directly to the canvas + +config BR2_PACKAGE_FLOT_CATEGORIES + bool "categories" + help + Flot plugin for plotting textual data or categories + +config BR2_PACKAGE_FLOT_CROSSHAIR + bool "crosshair" + help + Flot plugin for showing crosshairs when the mouse hovers + over the plot + +config BR2_PACKAGE_FLOT_ERRORBARS + bool "errorbars" + help + Flot plugin for plotting error bars + +config BR2_PACKAGE_FLOT_FILLBETWEEN + bool "fillbetween" + help + Flot plugin for computing bottoms for filled line and bar + charts + +config BR2_PACKAGE_FLOT_IMAGE + bool "image" + help + Flot plugin for plotting images + +config BR2_PACKAGE_FLOT_NAVIGATE + bool "navigate" + help + Flot plugin for adding panning and zooming capabilities to a + plot + +config BR2_PACKAGE_FLOT_PIE + bool "pie" + help + Flot plugin for rendering pie charts + +config BR2_PACKAGE_FLOT_RESIZE + bool "resize" + help + Flot plugin for automatically redrawing plots when the + placeholder size changes. + +config BR2_PACKAGE_FLOT_SELECTION + bool "selection" + help + Flot plugin for selecting regions + +config BR2_PACKAGE_FLOT_STACK + bool "stack" + help + Flot plugin for stacking data sets + +config BR2_PACKAGE_FLOT_SYMBOL + bool "symbol" + help + Flot plugin that adds some extra symbols for plotting points + +config BR2_PACKAGE_FLOT_THRESHOLD + bool "threshold" + help + Flot plugin for thresholding data + +config BR2_PACKAGE_FLOT_TIME + bool "time" + help + Flot plugin for handling time axes + +endif diff --git a/package/flot/flot.hash b/package/flot/flot.hash new file mode 100644 index 00000000..c8272fc0 --- /dev/null +++ b/package/flot/flot.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 ef9a873befe3ff5ea42ebf1c3657887265a1717744ca8ed0c2bd3dd736d16b21 flot-0.8.3.tar.gz +sha256 52cb566b16d84314b92b91361ed072eaaf166e8d3dfa3d0fd3577613925f205c LICENSE.txt diff --git a/package/flot/flot.mk b/package/flot/flot.mk new file mode 100644 index 00000000..58e3ff12 --- /dev/null +++ b/package/flot/flot.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# flot +# +################################################################################ + +FLOT_VERSION = 0.8.3 +FLOT_SITE = http://www.flotcharts.org/downloads +FLOT_LICENSE = MIT +FLOT_LICENSE_FILES = LICENSE.txt +FLOT_FILES = jquery.flot $(addprefix jquery.flot.,\ + $(if $(BR2_PACKAGE_FLOT_CANVAS),canvas) \ + $(if $(BR2_PACKAGE_FLOT_CATEGORIES),categories) \ + $(if $(BR2_PACKAGE_FLOT_CROSSHAIR),crosshair) \ + $(if $(BR2_PACKAGE_FLOT_ERRORBARS),errorbars) \ + $(if $(BR2_PACKAGE_FLOT_FILLBETWEEN),fillbetween) \ + $(if $(BR2_PACKAGE_FLOT_IMAGE),image) \ + $(if $(BR2_PACKAGE_FLOT_NAVIGATE),navigate) \ + $(if $(BR2_PACKAGE_FLOT_PIE),pie) \ + $(if $(BR2_PACKAGE_FLOT_RESIZE),resize) \ + $(if $(BR2_PACKAGE_FLOT_SELECTION),selection) \ + $(if $(BR2_PACKAGE_FLOT_STACK),stack) \ + $(if $(BR2_PACKAGE_FLOT_SYMBOL),symbol) \ + $(if $(BR2_PACKAGE_FLOT_THRESHOLD),threshold) \ + $(if $(BR2_PACKAGE_FLOT_TIME),time) \ + ) + +define FLOT_INSTALL_TARGET_CMDS + for i in $(FLOT_FILES); do \ + $(INSTALL) -m 0644 -D $(@D)/$$i.min.js $(TARGET_DIR)/var/www/$$i.js || exit 1; \ + done +endef + +$(eval $(generic-package)) diff --git a/package/fltk/0001-disable-tests.patch b/package/fltk/0001-disable-tests.patch new file mode 100644 index 00000000..95714531 --- /dev/null +++ b/package/fltk/0001-disable-tests.patch @@ -0,0 +1,16 @@ +Disable tests, slower to build and would need host-fltk. + +Signed-off-by: Gustavo Zacarias + +diff -Nura fltk-1.3.2.orig/Makefile fltk-1.3.2/Makefile +--- fltk-1.3.2.orig/Makefile 2013-10-27 18:19:39.693208127 -0300 ++++ fltk-1.3.2/Makefile 2013-10-27 18:20:08.032136885 -0300 +@@ -18,7 +18,7 @@ + + include makeinclude + +-DIRS = $(IMAGEDIRS) src $(CAIRODIR) fluid test documentation ++DIRS = $(IMAGEDIRS) src $(CAIRODIR) fluid documentation + + all: makeinclude fltk-config + for dir in $(DIRS); do\ diff --git a/package/fltk/Config.in b/package/fltk/Config.in new file mode 100644 index 00000000..8e9977a1 --- /dev/null +++ b/package/fltk/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_FLTK + bool "fltk" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_XORG7 + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_JPEG + select BR2_PACKAGE_LIBPNG + select BR2_PACKAGE_XLIB_LIBXT + select BR2_PACKAGE_XLIB_LIBX11 + select BR2_PACKAGE_XLIB_LIBXEXT + help + A cross-platform C++ GUI toolkit for UNIX/Linux (X11), + Microsoft Windows, and MacOS X. + + http://www.fltk.org/ + +comment "fltk needs a toolchain w/ C++" + depends on BR2_USE_MMU && BR2_PACKAGE_XORG7 + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/fltk/fltk.hash b/package/fltk/fltk.hash new file mode 100644 index 00000000..f3430e41 --- /dev/null +++ b/package/fltk/fltk.hash @@ -0,0 +1,5 @@ +# From http://www.fltk.org/software.php?VERSION=1.3.5 +md5 e85017defd5a03ae82e634311db87bbf fltk-1.3.5-source.tar.gz +# Locally generated +sha256 8729b2a055f38c1636ba20f749de0853384c1d3e9d1a6b8d4d1305143e115702 fltk-1.3.5-source.tar.gz +sha256 57dd381e713fb309fb7dd85c3c38b274557ecb333475d0f1d65a5f06ad85c9a6 COPYING diff --git a/package/fltk/fltk.mk b/package/fltk/fltk.mk new file mode 100644 index 00000000..763ff612 --- /dev/null +++ b/package/fltk/fltk.mk @@ -0,0 +1,64 @@ +################################################################################ +# +# fltk +# +################################################################################ + +FLTK_VERSION = 1.3.5 +FLTK_SOURCE = fltk-$(FLTK_VERSION)-source.tar.gz +FLTK_SITE = http://fltk.org/pub/fltk/$(FLTK_VERSION) +FLTK_INSTALL_STAGING = YES +# We force --libdir=/usr/lib, because by default, it is set to +# ${exec_prefix}/lib, which doesn't match the condition used by the +# fltk build system to decide whether it should pass a -rpath,/usr/lib +# or not. Since this rpath breaks the build, we want the fltk build +# system to not pass it, which requires having --libdir set to +# /usr/lib. +FLTK_CONF_OPTS = --enable-threads --with-x --disable-gl \ + --disable-localjpeg --disable-localpng --disable-localzlib \ + --libdir=/usr/lib +FLTK_DEPENDENCIES = jpeg libpng xlib_libX11 xlib_libXext xlib_libXt +FLTK_CONFIG_SCRIPTS = fltk-config +FLTK_LICENSE = LGPL-2.0 with exceptions +FLTK_LICENSE_FILES = COPYING + +ifeq ($(BR2_PACKAGE_CAIRO),y) +FLTK_CONF_OPTS += --enable-cairo +FLTK_DEPENDENCIES += cairo +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXCURSOR),y) +FLTK_DEPENDENCIES += xlib_libXcursor +FLTK_CONF_OPTS += --enable-xcursor +else +FLTK_CONF_OPTS += --disable-xcursor +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXFIXES),y) +FLTK_DEPENDENCIES += xlib_libXfixes +FLTK_CONF_OPTS += --enable-xfixes +else +FLTK_CONF_OPTS += --disable-xfixes +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXFT),y) +FLTK_CONF_ENV += ac_cv_path_FTCONFIG=$(STAGING_DIR)/usr/bin/freetype-config +FLTK_DEPENDENCIES += xlib_libXft +else +FLTK_CONF_OPTS += --disable-xft +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXINERAMA),y) +FLTK_DEPENDENCIES += xlib_libXinerama +else +FLTK_CONF_OPTS += --disable-xinerama +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXRENDER),y) +FLTK_DEPENDENCIES += xlib_libXrender +FLTK_CONF_OPTS += --enable-xrender +else +FLTK_CONF_OPTS += --disable-xrender +endif + +$(eval $(autotools-package)) diff --git a/package/fluid-soundfont/Config.in b/package/fluid-soundfont/Config.in new file mode 100644 index 00000000..67f5ea11 --- /dev/null +++ b/package/fluid-soundfont/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_FLUID_SOUNDFONT + bool "fluid-soundfont" + help + FluidR3 is the third release of Frank Wen's pro-quality + GM/GS soundfont. The soundfont has lots of excellent + samples, including all the GM instruments along side with + the GS instruments that are recycled and reprogrammed + versions of the GM presets. + + This package contains Fluid General Midi (GM) soundfont in + soundfont 2.0 (.sf2) format. + + This soundfont can be used with the FluidSynth real-time + software synthesizer. + + http://www.hammersound.net diff --git a/package/fluid-soundfont/fluid-soundfont.hash b/package/fluid-soundfont/fluid-soundfont.hash new file mode 100644 index 00000000..7aaac600 --- /dev/null +++ b/package/fluid-soundfont/fluid-soundfont.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 2621acaa1c78e4abdb24bdd163230cc577e61276936d6aa6e3180582142f0343 fluid-soundfont_3.1.orig.tar.gz +sha256 8ef830b65c97a976b86e34bb5fde08d99dfb1db13c4149b5b20bc837ac6c4568 COPYING diff --git a/package/fluid-soundfont/fluid-soundfont.mk b/package/fluid-soundfont/fluid-soundfont.mk new file mode 100644 index 00000000..f8fd986c --- /dev/null +++ b/package/fluid-soundfont/fluid-soundfont.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# fluid-soundfont +# +################################################################################ + +FLUID_SOUNDFONT_VERSION = 3.1 +FLUID_SOUNDFONT_SOURCE = fluid-soundfont_$(FLUID_SOUNDFONT_VERSION).orig.tar.gz +# The http://www.hammersound.net archive site seems unreliable (show HTTP 500 +# error), and also publish the file in the sfArk format, which is inconvenient +# to be used in automated build. We use here the Debian mirror publishing the +# file in a more convenient format (inative sf2 in a tar.gz archive). +FLUID_SOUNDFONT_SITE = http://http.debian.net/debian/pool/main/f/fluid-soundfont +FLUID_SOUNDFONT_LICENSE = MIT +FLUID_SOUNDFONT_LICENSE_FILES = COPYING + +define FLUID_SOUNDFONT_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0644 $(@D)/FluidR3_GM.sf2 $(TARGET_DIR)/usr/share/soundfonts/FluidR3_GM.sf2 +endef + +$(eval $(generic-package)) diff --git a/package/fluidsynth/Config.in b/package/fluidsynth/Config.in new file mode 100644 index 00000000..5726e235 --- /dev/null +++ b/package/fluidsynth/Config.in @@ -0,0 +1,134 @@ +config BR2_PACKAGE_FLUIDSYNTH + bool "fluidsynth" + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + # the .pc file installed by fluidsynth does not mention its + # indirect dependencies in Libs.private. + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_LIBGLIB2 + help + FluidSynth is a real-time software synthesizer based on the + SoundFont 2 specifications and has reached widespread + distribution. FluidSynth itself does not have a graphical + user interface, but due to its powerful API several + applications utilize it and it has even found its way onto + embedded systems and is used in some mobile apps. + + http://www.fluidsynth.org/ + +if BR2_PACKAGE_FLUIDSYNTH + +comment "Output support" + +config BR2_PACKAGE_FLUIDSYNTH_ALSA_LIB + bool "alsa" + default y + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_ALSA_LIB + select BR2_PACKAGE_ALSA_LIB_RAWMIDI + select BR2_PACKAGE_ALSA_LIB_SEQ + help + Enable alsa support. + +comment "alsa support needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_FLUIDSYNTH_JACK2 + bool "jack2" + # See: https://sourceware.org/bugzilla/show_bug.cgi?id=19908 + depends on !BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS + depends on BR2_TOOLCHAIN_HAS_THREADS # jack2 + depends on BR2_USE_MMU # jack2 + depends on BR2_INSTALL_LIBSTDCPP # jack2 + depends on !BR2_STATIC_LIBS # jack2 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # jack2 + select BR2_PACKAGE_JACK2 + help + Enable jack support. + +comment "jack support needs a toolchain w/ dynamic library, threads, C++" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS + depends on BR2_STATIC_LIBS || !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_FLUIDSYNTH_LIBSNDFILE + bool "libsndfile" + select BR2_PACKAGE_LIBSNDFILE + help + Enable libsndfile support, for writing output to WAV files. + +config BR2_PACKAGE_FLUIDSYNTH_PORTAUDIO + bool "portaudio" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_PORTAUDIO + help + Enable portaudio support. + +comment "portaudio support needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_FLUIDSYNTH_PULSEAUDIO + bool "pulseaudio" + # See: https://sourceware.org/bugzilla/show_bug.cgi?id=19908 + depends on !BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS + depends on BR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC # pulseaudio + depends on BR2_USE_WCHAR # pulseaudio + depends on BR2_TOOLCHAIN_HAS_THREADS # pulseaudio + depends on !BR2_STATIC_LIBS # pulseaudio + depends on BR2_USE_MMU # pulseaudio + select BR2_PACKAGE_PULSEAUDIO + help + Enable PulseAudio support. + +comment "pulseaudio support needs a toolchain w/ dynamic library, wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS + depends on BR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC + depends on BR2_STATIC_LIBS || !BR2_USE_MMU || !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_FLUIDSYNTH_SDL2 + bool "sdl2" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_SDL2 + help + Enable SDL2 audio support. + +comment "SDL2 audio support needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +comment "Misc options" + +config BR2_PACKAGE_FLUIDSYNTH_DBUS + bool "dbus" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU + select BR2_PACKAGE_DBUS + help + Enable dbus support. + +comment "dbus support needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_FLUIDSYNTH_FLOATS + bool "32-bit single precision float" + help + Enable 32-bit single precision float support, instead of + 64-bit double precision floats for DSP samples. + +config BR2_PACKAGE_FLUIDSYNTH_READLINE + bool "readline" + select BR2_PACKAGE_READLINE + help + Enable readline support, for better line editing in FluidSynth + shell. + +endif # BR2_PACKAGE_FLUIDSYNTH + +comment "fluidsynth needs a toolchain w/ threads, wchar, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS diff --git a/package/fluidsynth/fluidsynth.hash b/package/fluidsynth/fluidsynth.hash new file mode 100644 index 00000000..17e37e24 --- /dev/null +++ b/package/fluidsynth/fluidsynth.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 b539b7c65a650b56f01cd60a4e83c6125c217c5a63c0c214ef6274894a677d00 fluidsynth-2.1.5.tar.gz +sha256 9b872a8a070b8ad329c4bd380fb1bf0000f564c75023ec8e1e6803f15364b9e9 LICENSE diff --git a/package/fluidsynth/fluidsynth.mk b/package/fluidsynth/fluidsynth.mk new file mode 100644 index 00000000..e3269f53 --- /dev/null +++ b/package/fluidsynth/fluidsynth.mk @@ -0,0 +1,84 @@ +################################################################################ +# +# fluidsynth +# +################################################################################ + +FLUIDSYNTH_VERSION = 2.1.5 +FLUIDSYNTH_SITE = $(call github,FluidSynth,fluidsynth,v$(FLUIDSYNTH_VERSION)) +FLUIDSYNTH_LICENSE = LGPL-2.1+ +FLUIDSYNTH_LICENSE_FILES = LICENSE +FLUIDSYNTH_CPE_ID_VENDOR = fluidsynth +FLUIDSYNTH_INSTALL_STAGING = YES +FLUIDSYNTH_DEPENDENCIES = libglib2 + +ifeq ($(BR2_PACKAGE_FLUIDSYNTH_ALSA_LIB),y) +FLUIDSYNTH_CONF_OPTS += -Denable-alsa=1 +FLUIDSYNTH_DEPENDENCIES += alsa-lib +else +FLUIDSYNTH_CONF_OPTS += -Denable-alsa=0 +endif + +ifeq ($(BR2_PACKAGE_FLUIDSYNTH_DBUS),y) +FLUIDSYNTH_CONF_OPTS += -Denable-dbus=1 +FLUIDSYNTH_DEPENDENCIES += dbus +else +FLUIDSYNTH_CONF_OPTS += -Denable-dbus=0 +endif + +ifeq ($(BR2_PACKAGE_FLUIDSYNTH_FLOATS),y) +FLUIDSYNTH_CONF_OPTS += -Denable-floats=1 +else +FLUIDSYNTH_CONF_OPTS += -Denable-floats=0 +endif + +ifeq ($(BR2_PACKAGE_FLUIDSYNTH_JACK2),y) +FLUIDSYNTH_CONF_OPTS += -Denable-jack=1 +FLUIDSYNTH_DEPENDENCIES += jack2 +else +FLUIDSYNTH_CONF_OPTS += -Denable-jack=0 +endif + +ifeq ($(BR2_PACKAGE_FLUIDSYNTH_LIBSNDFILE),y) +FLUIDSYNTH_CONF_OPTS += -Denable-libsndfile=1 +FLUIDSYNTH_DEPENDENCIES += libsndfile +else +FLUIDSYNTH_CONF_OPTS += -Denable-libsndfile=0 +endif + +ifeq ($(BR2_PACKAGE_FLUIDSYNTH_PORTAUDIO),y) +FLUIDSYNTH_CONF_OPTS += -Denable-portaudio=1 +FLUIDSYNTH_DEPENDENCIES += portaudio +else +FLUIDSYNTH_CONF_OPTS += -Denable-portaudio=0 +endif + +ifeq ($(BR2_PACKAGE_FLUIDSYNTH_PULSEAUDIO),y) +FLUIDSYNTH_CONF_OPTS += -Denable-pulseaudio=1 +FLUIDSYNTH_DEPENDENCIES += pulseaudio +else +FLUIDSYNTH_CONF_OPTS += -Denable-pulseaudio=0 +endif + +ifeq ($(BR2_PACKAGE_FLUIDSYNTH_READLINE),y) +FLUIDSYNTH_CONF_OPTS += -Denable-readline=1 +FLUIDSYNTH_DEPENDENCIES += readline +else +FLUIDSYNTH_CONF_OPTS += -Denable-readline=0 +endif + +ifeq ($(BR2_PACKAGE_FLUIDSYNTH_SDL2),y) +FLUIDSYNTH_CONF_OPTS += -Denable-sdl2=1 +FLUIDSYNTH_DEPENDENCIES += sdl2 +else +FLUIDSYNTH_CONF_OPTS += -Denable-sdl2=0 +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +FLUIDSYNTH_CONF_OPTS += -Denable-systemd=1 +FLUIDSYNTH_DEPENDENCIES += systemd +else +FLUIDSYNTH_CONF_OPTS += -Denable-systemd=0 +endif + +$(eval $(cmake-package)) diff --git a/package/fluxbox/0001-fixes-bug-1138.patch b/package/fluxbox/0001-fixes-bug-1138.patch new file mode 100644 index 00000000..9c02e933 --- /dev/null +++ b/package/fluxbox/0001-fixes-bug-1138.patch @@ -0,0 +1,25 @@ +From 22866c4d30f5b289c429c5ca88d800200db4fc4f Mon Sep 17 00:00:00 2001 +From: John Sennesael +Date: Mon, 2 Nov 2015 15:14:32 -0600 +Subject: [PATCH] fixes bug #1138 + +[Retrieved from: +https://github.com/fluxbox/fluxbox/commit/22866c4d30f5b289c429c5ca88d800200db4fc4f] +Signed-off-by: Fabrice Fontaine +--- + util/fluxbox-remote.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/util/fluxbox-remote.cc b/util/fluxbox-remote.cc +index 59852e6a..504015b5 100644 +--- a/util/fluxbox-remote.cc ++++ b/util/fluxbox-remote.cc +@@ -73,7 +73,7 @@ int main(int argc, char **argv) { + if (strcmp(cmd, "result") == 0) { + XTextProperty text_prop; + if (XGetTextProperty(disp, root, &text_prop, atom_result) != 0 +- && text_prop.value > 0 ++ && text_prop.value != 0 + && text_prop.nitems > 0) { + + printf("%s", text_prop.value); diff --git a/package/fluxbox/Config.in b/package/fluxbox/Config.in new file mode 100644 index 00000000..ab479a9f --- /dev/null +++ b/package/fluxbox/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_FLUXBOX + bool "fluxbox" + depends on BR2_PACKAGE_XORG7 + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_XLIB_LIBX11 + # Runtime dependency, needed by startup script + select BR2_PACKAGE_XAPP_XMODMAP + help + The Fluxbox lightweight window manager for X + + http://fluxbox.org + +comment "fluxbox needs a toolchain w/ C++" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_XORG7 && !BR2_INSTALL_LIBSTDCPP diff --git a/package/fluxbox/fluxbox.hash b/package/fluxbox/fluxbox.hash new file mode 100644 index 00000000..f59423c3 --- /dev/null +++ b/package/fluxbox/fluxbox.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 fc8c75fe94c54ed5a5dd3fd4a752109f8949d6df67a48e5b11a261403c382ec0 fluxbox-1.3.7.tar.xz +sha256 d445b8c8b3cedd8b9ebb7f450524cf658d4a199b3a89a9f2af4255cc589c6253 COPYING diff --git a/package/fluxbox/fluxbox.mk b/package/fluxbox/fluxbox.mk new file mode 100644 index 00000000..305dd9ab --- /dev/null +++ b/package/fluxbox/fluxbox.mk @@ -0,0 +1,88 @@ +################################################################################ +# +# fluxbox +# +################################################################################ + +FLUXBOX_VERSION = 1.3.7 +FLUXBOX_SOURCE = fluxbox-$(FLUXBOX_VERSION).tar.xz +FLUXBOX_SITE = http://downloads.sourceforge.net/project/fluxbox/fluxbox/$(FLUXBOX_VERSION) +FLUXBOX_LICENSE = MIT +FLUXBOX_LICENSE_FILES = COPYING + +FLUXBOX_CONF_OPTS = \ + --x-includes=$(STAGING_DIR)/usr/include/X11 \ + --x-libraries=$(STAGING_DIR)/usr/lib +FLUXBOX_DEPENDENCIES = xlib_libX11 $(if $(BR2_PACKAGE_LIBICONV),libiconv) + +ifeq ($(BR2_PACKAGE_FREETYPE),y) +FLUXBOX_CONF_OPTS += --enable-freetype2 +FLUXBOX_DEPENDENCIES += freetype +else +FLUXBOX_CONF_OPTS += --disable-freetype2 +endif + +ifeq ($(BR2_PACKAGE_IMLIB2_X),y) +FLUXBOX_CONF_OPTS += --enable-imlib2 +FLUXBOX_DEPENDENCIES += imlib2 +else +FLUXBOX_CONF_OPTS += --disable-imlib2 +endif + +ifeq ($(BR2_PACKAGE_LIBFRIBIDI),y) +FLUXBOX_CONF_OPTS += --enable-fribidi +FLUXBOX_DEPENDENCIES += libfribidi +else +FLUXBOX_CONF_OPTS += --disable-fribidi +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXFT),y) +FLUXBOX_CONF_OPTS += --enable-xft +FLUXBOX_DEPENDENCIES += xlib_libXft +else +FLUXBOX_CONF_OPTS += --disable-xft +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXRENDER),y) +FLUXBOX_CONF_OPTS += --enable-xrender +FLUXBOX_DEPENDENCIES += xlib_libXrender +else +FLUXBOX_CONF_OPTS += --disable-xrender +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXPM),y) +FLUXBOX_CONF_OPTS += --enable-xpm +FLUXBOX_DEPENDENCIES += xlib_libXpm +else +FLUXBOX_CONF_OPTS += --disable-xpm +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXINERAMA),y) +FLUXBOX_CONF_OPTS += --enable-xinerama +FLUXBOX_DEPENDENCIES += xlib_libXinerama +else +FLUXBOX_CONF_OPTS += --disable-xinerama +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXEXT),y) +FLUXBOX_CONF_OPTS += --enable-xext +FLUXBOX_DEPENDENCIES += xlib_libXext +else +FLUXBOX_CONF_OPTS += --disable-xext +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXRANDR),y) +FLUXBOX_CONF_OPTS += --enable-xrandr +FLUXBOX_DEPENDENCIES += xlib_libXrandr +else +FLUXBOX_CONF_OPTS += --disable-xrandr +endif + +define FLUXBOX_INSTALL_XSESSION_FILE + $(INSTALL) -m 0755 -D package/fluxbox/xsession \ + $(TARGET_DIR)/root/.xsession +endef + +FLUXBOX_POST_INSTALL_TARGET_HOOKS += FLUXBOX_INSTALL_XSESSION_FILE + +$(eval $(autotools-package)) diff --git a/package/fluxbox/xsession b/package/fluxbox/xsession new file mode 100644 index 00000000..b51acff4 --- /dev/null +++ b/package/fluxbox/xsession @@ -0,0 +1,2 @@ +#!/bin/sh +exec startfluxbox diff --git a/package/fmc/Config.in b/package/fmc/Config.in new file mode 100644 index 00000000..4399aa2c --- /dev/null +++ b/package/fmc/Config.in @@ -0,0 +1,25 @@ +comment "fmc needs a toolchain w/ C++" + depends on BR2_powerpc_e500mc || BR2_powerpc_e6500 + depends on !BR2_INSTALL_LIBSTDCPP + +comment "fmc needs a Linux kernel to be built" + depends on BR2_powerpc_e500mc || BR2_powerpc_e6500 + depends on !BR2_LINUX_KERNEL + +config BR2_PACKAGE_FMC + bool "fmc" + depends on BR2_powerpc_e500mc || BR2_powerpc_e6500 + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_LINUX_KERNEL # fmlib + select BR2_PACKAGE_TCLAP + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_FMLIB + help + The Frame Manager Configuration tool is Freescale PowerPC + platform software package whose primary purpose is converting + Parse-Classify-Police-Distribute (PCD) descriptions of network + packets flow into hardware configuration. The tool provides an + abstraction layer between the end customer's vision of the PCD + task definition and real hardware implementation. + + http://cache.freescale.com/files/32bit/doc/app_note/AN4760.pdf diff --git a/package/fmc/fmc.hash b/package/fmc/fmc.hash new file mode 100644 index 00000000..fed33091 --- /dev/null +++ b/package/fmc/fmc.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 cb896ec1fac2fe9a3a9bb8be2221b79acf5f9b75841609a681db0d9e7bec02a0 fmc-fsl-sdk-v2.0-br1.tar.gz +sha256 f92862ceb95db5492f50a59d7c799c9395b714db88db92d11891dc0233e2ac42 COPYING diff --git a/package/fmc/fmc.mk b/package/fmc/fmc.mk new file mode 100644 index 00000000..b3857301 --- /dev/null +++ b/package/fmc/fmc.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# fmc +# +################################################################################ + +FMC_VERSION = fsl-sdk-v2.0 +FMC_SITE = https://source.codeaurora.org/external/qoriq/qoriq-yocto-sdk/fmc +FMC_SITE_METHOD = git +FMC_LICENSE = MIT +FMC_LICENSE_FILES = COPYING +FMC_DEPENDENCIES = libxml2 tclap fmlib + +FMC_MAKE_OPTS = \ + CC="$(TARGET_CC)" \ + CXX="$(TARGET_CXX)" \ + FMD_USPACE_HEADER_PATH="$(STAGING_DIR)/usr/include/fmd" \ + FMD_USPACE_LIB_PATH="$(STAGING_DIR)/usr/lib" \ + LIBXML2_HEADER_PATH="$(STAGING_DIR)/usr/include/libxml2" \ + TCLAP_HEADER_PATH="$(STAGING_DIR)/usr/include" + +ifeq ($(BR2_powerpc64),y) +FMC_MAKE_OPTS += M64BIT=1 +endif + +# fmc's platform is the same as fmlib's. +FMC_PLATFORM = $(call qstrip,$(BR2_PACKAGE_FMLIB_PLATFORM)) + +define FMC_BUILD_CMDS + $(SED) "s:P4080:$(FMC_PLATFORM):g" $(@D)/source/Makefile + # The linking step has dependency issues so using MAKE1 + $(TARGET_MAKE_ENV) $(MAKE1) $(FMC_MAKE_OPTS) -C $(@D)/source +endef + +define FMC_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/source/fmc $(TARGET_DIR)/usr/sbin/fmc + cp -dpfr $(@D)/etc/fmc $(TARGET_DIR)/etc/ +endef + +$(eval $(generic-package)) diff --git a/package/fmlib/Config.in b/package/fmlib/Config.in new file mode 100644 index 00000000..df4ae440 --- /dev/null +++ b/package/fmlib/Config.in @@ -0,0 +1,50 @@ +comment "fmlib needs a Linux kernel to be built" + depends on BR2_powerpc_e500mc || BR2_powerpc_e6500 + depends on !BR2_LINUX_KERNEL + +config BR2_PACKAGE_FMLIB + bool "fmlib" + depends on BR2_powerpc_e500mc || BR2_powerpc_e6500 + depends on BR2_LINUX_KERNEL + help + The Frame Manager library provides Freescale PowerPC platforms + an API on top of the Frame Manager driver ioctl calls, that + provides a user space application with a simple way to + configure driver parameters and PCD (parse - classify - + distribute) rules. + + http://git.freescale.com/git/cgit.cgi/ppc/sdk/fmlib.git/tree/README + +if BR2_PACKAGE_FMLIB +choice + prompt "QorIQ Target Family" + help + Select the family of QorIQ processor. + +config BR2_FMLIB_QORIQ_FAMILY_P4080 + bool "p40xx" + depends on BR2_powerpc_e500mc + +config BR2_FMLIB_QORIQ_FAMILY_T4240 + bool "t42xx" + depends on BR2_powerpc_e500mc + +config BR2_FMLIB_QORIQ_FAMILY_T2080 + bool "t208x" + depends on BR2_powerpc_e6500 + +endchoice + +config BR2_PACKAGE_FMLIB_ARCHTYPE + string + default "e500mc" if BR2_powerpc_e500mc + default "ppc64e6500" if BR2_powerpc_e6500 && BR2_powerpc64 + default "ppc32e6500" if BR2_powerpc_e6500 && BR2_powerpc + +config BR2_PACKAGE_FMLIB_PLATFORM + string + default "P4080" if BR2_FMLIB_QORIQ_FAMILY_P4080 + default "T4240" if BR2_FMLIB_QORIQ_FAMILY_T4240 + default "FMAN_V3H" if BR2_FMLIB_QORIQ_FAMILY_T2080 + +endif diff --git a/package/fmlib/fmlib.hash b/package/fmlib/fmlib.hash new file mode 100644 index 00000000..47460d09 --- /dev/null +++ b/package/fmlib/fmlib.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 59415d346af1d22f510f2785be4c7e3606dc3181476a666e832270550f7d44a6 fmlib-fsl-sdk-v2.0-br1.tar.gz +sha256 837559e20d83910a005e7883b876cc5c42805fe4abcf7e5c5b3c8d036b7f61c8 COPYING diff --git a/package/fmlib/fmlib.mk b/package/fmlib/fmlib.mk new file mode 100644 index 00000000..8cb77920 --- /dev/null +++ b/package/fmlib/fmlib.mk @@ -0,0 +1,38 @@ +################################################################################ +# +# fmlib +# +################################################################################ + +FMLIB_VERSION = fsl-sdk-v2.0 +FMLIB_SITE = https://source.codeaurora.org/external/qoriq/qoriq-yocto-sdk/fmlib +FMLIB_SITE_METHOD = git +FMLIB_LICENSE = BSD-3-Clause, GPL-2.0+ +FMLIB_LICENSE_FILES = COPYING +FMLIB_DEPENDENCIES = linux +FMLIB_INSTALL_STAGING = YES + +# This package installs a static library only, so there's +# nothing to install to the target +FMLIB_INSTALL_TARGET = NO + +FMLIB_MAKE_OPTS = \ + CC="$(TARGET_CC)" \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + KERNEL_SRC="$(LINUX_DIR)" \ + PREFIX="$(STAGING_DIR)/usr" + +FMLIB_ARCHTYPE = $(call qstrip,$(BR2_PACKAGE_FMLIB_ARCHTYPE)) +FMLIB_PLATFORM = $(call qstrip,$(BR2_PACKAGE_FMLIB_PLATFORM)) + +define FMLIB_BUILD_CMDS + $(SED) "s:P4080:$(FMLIB_PLATFORM):g" $(@D)/Makefile + $(TARGET_MAKE_ENV) $(MAKE) $(FMLIB_MAKE_OPTS) -C $(@D) libfm-$(FMLIB_ARCHTYPE).a +endef + +define FMLIB_INSTALL_STAGING_CMDS + $(RM) $(STAGING_DIR)/usr/lib/libfm.a + $(TARGET_MAKE_ENV) $(MAKE) $(FMLIB_MAKE_OPTS) -C $(@D) install-libfm-$(FMLIB_ARCHTYPE) +endef + +$(eval $(generic-package)) diff --git a/package/fmt/Config.in b/package/fmt/Config.in new file mode 100644 index 00000000..8643c9b5 --- /dev/null +++ b/package/fmt/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_FMT + bool "fmt" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + help + fmt is an open-source formatting library for C++. It can be + used as a safe alternative to printf or as a fast alternative + to IOStreams. + + https://fmt.dev + +comment "fmt needs a toolchain w/ C++, wchar" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR diff --git a/package/fmt/fmt.hash b/package/fmt/fmt.hash new file mode 100644 index 00000000..7947a174 --- /dev/null +++ b/package/fmt/fmt.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 5d98c504d0205f912e22449ecdea776b78ce0bb096927334f80781e720084c9f fmt-7.1.3.zip +sha256 825c9324e70f8c839c8ba910543dd4a7daee243b86ef960594c11381a19980b8 LICENSE.rst diff --git a/package/fmt/fmt.mk b/package/fmt/fmt.mk new file mode 100644 index 00000000..33295798 --- /dev/null +++ b/package/fmt/fmt.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# fmt +# +################################################################################ + +FMT_VERSION = 7.1.3 +FMT_SITE = https://github.com/fmtlib/fmt/releases/download/$(FMT_VERSION) +FMT_SOURCE = fmt-$(FMT_VERSION).zip +FMT_LICENSE = MIT with exception +FMT_LICENSE_FILES = LICENSE.rst +FMT_CPE_ID_VENDOR = fmt +FMT_INSTALL_STAGING = YES + +FMT_CONF_OPTS = \ + -DFMT_INSTALL=ON \ + -DFMT_TEST=OFF + +define FMT_EXTRACT_CMDS + $(UNZIP) -d $(BUILD_DIR) $(FMT_DL_DIR)/$(FMT_SOURCE) +endef + +$(eval $(cmake-package)) diff --git a/package/fmtools/Config.in b/package/fmtools/Config.in new file mode 100644 index 00000000..182b5179 --- /dev/null +++ b/package/fmtools/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_FMTOOLS + bool "fmtools" + help + fmtools is a pair of simple command-line utilities for + "video4linux2" radio tuner cards under Linux. It includes + fm for power control, tuning, and volume and fmscan for + scanning for stations. + + http://benpfaff.org/fmtools/ diff --git a/package/fmtools/fmtools.hash b/package/fmtools/fmtools.hash new file mode 100644 index 00000000..48f88be5 --- /dev/null +++ b/package/fmtools/fmtools.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 75174e07d8cde6d4a8a5d7bbaa3a3b0760a850e7f6840cb7c6246227b18f5a39 fmtools-2.0.7.tar.gz +# locally computed +sha256 204d8eff92f95aac4df6c8122bc1505f468f3a901e5a4cc08940e0ede1938994 COPYING diff --git a/package/fmtools/fmtools.mk b/package/fmtools/fmtools.mk new file mode 100644 index 00000000..890fae1d --- /dev/null +++ b/package/fmtools/fmtools.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# fmtools +# +################################################################################ + +FMTOOLS_VERSION = 2.0.7 +FMTOOLS_SITE = http://benpfaff.org/fmtools +FMTOOLS_LICENSE = GPL-2.0+ +FMTOOLS_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/font-awesome/Config.in b/package/font-awesome/Config.in new file mode 100644 index 00000000..694d74e5 --- /dev/null +++ b/package/font-awesome/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_FONT_AWESOME + bool "font-awesome" + help + Font Awesome is a full suite of 605 pictographic icons for + easy scalable vector graphics on websites. + + https://github.com/FortAwesome/Font-Awesome diff --git a/package/font-awesome/font-awesome.hash b/package/font-awesome/font-awesome.hash new file mode 100644 index 00000000..2ea11d5f --- /dev/null +++ b/package/font-awesome/font-awesome.hash @@ -0,0 +1,2 @@ +# Locally computed +sha256 de512ba0e1dead382bbfce372cde74b3f18971d876fffb635ee9333f0db05d43 font-awesome-4.7.0.tar.gz diff --git a/package/font-awesome/font-awesome.mk b/package/font-awesome/font-awesome.mk new file mode 100644 index 00000000..666346be --- /dev/null +++ b/package/font-awesome/font-awesome.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# font-awesome +# +################################################################################ + +FONT_AWESOME_VERSION = 4.7.0 +FONT_AWESOME_SITE = $(call github,FortAwesome,Font-Awesome,v$(FONT_AWESOME_VERSION)) +FONT_AWESOME_LICENSE = OFL-1.1 (font), MIT (CSS, LESS and Sass files) +FONT_AWESOME_DIRECTORIES_LIST = css fonts less scss + +define FONT_AWESOME_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/usr/share/font-awesome/ + $(foreach d,$(FONT_AWESOME_DIRECTORIES_LIST),\ + cp -dpfr $(@D)/$(d) $(TARGET_DIR)/usr/share/font-awesome$(sep)) +endef + +$(eval $(generic-package)) diff --git a/package/fontconfig/0001-Fix-the-build-issue-with-enable-static.patch b/package/fontconfig/0001-Fix-the-build-issue-with-enable-static.patch new file mode 100644 index 00000000..bf04bd95 --- /dev/null +++ b/package/fontconfig/0001-Fix-the-build-issue-with-enable-static.patch @@ -0,0 +1,133 @@ +From 8208f99fa1676c42bfd8d74de3e9dac5366c150c Mon Sep 17 00:00:00 2001 +From: Akira TAGOH +Date: Mon, 3 Sep 2018 04:56:16 +0000 +Subject: [PATCH] Fix the build issue with --enable-static + +Fixes https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/109 +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://gitlab.freedesktop.org/fontconfig/fontconfig/commit/8208f99fa1676c42bfd8d74de3e9dac5366c150c] +--- + doc/fcstring.fncs | 12 ++++++++++++ + fontconfig/fontconfig.h | 4 ++++ + src/fcint.h | 4 ---- + test/test-bz106632.c | 35 ++++++++++++----------------------- + 4 files changed, 28 insertions(+), 27 deletions(-) + +diff --git a/doc/fcstring.fncs b/doc/fcstring.fncs +index 0412bbd..d5ec043 100644 +--- a/doc/fcstring.fncs ++++ b/doc/fcstring.fncs +@@ -223,6 +223,18 @@ This is just a wrapper around free(3) which helps track memory usage of + strings within the fontconfig library. + @@ + ++@RET@ FcChar8 * ++@FUNC@ FcStrBuildFilename ++@TYPE1@ const FcChar8 * @ARG1@ path ++@TYPE2@ ... ++@PURPOSE@ Concatenate strings as a file path ++@DESC@ ++Creates a filename from the given elements of strings as file paths ++and concatenate them with the appropriate file separator. ++Arguments must be null-terminated. ++This returns a newly-allocated memory which should be freed when no longer needed. ++@@ ++ + @RET@ FcChar8 * + @FUNC@ FcStrDirname + @TYPE1@ const FcChar8 * @ARG1@ file +diff --git a/fontconfig/fontconfig.h b/fontconfig/fontconfig.h +index bac1dda..af870d0 100644 +--- a/fontconfig/fontconfig.h ++++ b/fontconfig/fontconfig.h +@@ -1076,6 +1076,10 @@ FcUtf16Len (const FcChar8 *string, + int *nchar, + int *wchar); + ++FcPublic FcChar8 * ++FcStrBuildFilename (const FcChar8 *path, ++ ...); ++ + FcPublic FcChar8 * + FcStrDirname (const FcChar8 *file); + +diff --git a/src/fcint.h b/src/fcint.h +index de78cd8..a9d075a 100644 +--- a/src/fcint.h ++++ b/src/fcint.h +@@ -1282,10 +1282,6 @@ FcStrUsesHome (const FcChar8 *s); + FcPrivate FcBool + FcStrIsAbsoluteFilename (const FcChar8 *s); + +-FcPrivate FcChar8 * +-FcStrBuildFilename (const FcChar8 *path, +- ...); +- + FcPrivate FcChar8 * + FcStrLastSlash (const FcChar8 *path); + +diff --git a/test/test-bz106632.c b/test/test-bz106632.c +index daa0c1e..2d67c2e 100644 +--- a/test/test-bz106632.c ++++ b/test/test-bz106632.c +@@ -25,25 +25,26 @@ + #ifdef HAVE_CONFIG_H + #include "config.h" + #endif ++#include + #include ++#include + #include ++#include ++#include + #ifndef HAVE_STRUCT_DIRENT_D_TYPE + #include + #include +-#include + #endif +-#include "fcstr.c" +-#undef FcConfigBuildFonts +-#undef FcConfigCreate +-#undef FcConfigGetCurrent +-#undef FcConfigParseAndLoadFromMemory +-#undef FcConfigUptoDate +-#undef FcFontList +-#undef FcInitReinitialize +-#undef FcPatternCreate +-#undef FcPatternDestroy + #include + ++#ifdef _WIN32 ++# define FC_DIR_SEPARATOR '\\' ++# define FC_DIR_SEPARATOR_S "\\" ++#else ++# define FC_DIR_SEPARATOR '/' ++# define FC_DIR_SEPARATOR_S "/" ++#endif ++ + #ifdef HAVE_MKDTEMP + #define fc_mkdtemp mkdtemp + #else +@@ -154,18 +155,6 @@ unlink_dirs (const char *dir) + return ret; + } + +-FcChar8 * +-FcLangNormalize (const FcChar8 *lang) +-{ +- return NULL; +-} +- +-FcChar8 * +-FcConfigHome (void) +-{ +- return NULL; +-} +- + int + main (void) + { +-- +2.18.1 + diff --git a/package/fontconfig/0002-add-pthread-as-a-dependency-of-a-static-lib.patch b/package/fontconfig/0002-add-pthread-as-a-dependency-of-a-static-lib.patch new file mode 100644 index 00000000..eed9dba0 --- /dev/null +++ b/package/fontconfig/0002-add-pthread-as-a-dependency-of-a-static-lib.patch @@ -0,0 +1,44 @@ +From 40ec04a8bf36dd8d0aa3da98b167792ce2dcd114 Mon Sep 17 00:00:00 2001 +From: Silvan Scherrer +Date: Sun, 20 Sep 2020 12:52:08 +0200 +Subject: [PATCH] add pthread as a dependency of a static lib + +Downloaded from https://trac.netlabs.org/ports/changeset/2220 + +Patch sent upstream: +https://gitlab.freedesktop.org/fontconfig/fontconfig/-/merge_requests/121 + +Signed-off-by: Bernd Kuhls +--- + configure.ac | 2 ++ + fontconfig.pc.in | 4 ++-- + 2 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/configure.ac b/configure.ac +index f3189a7..594d6fd 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -690,6 +690,8 @@ fi + have_pthread=false + if test "$os_win32" = no; then + AX_PTHREAD([have_pthread=true]) ++ AC_SUBST(PTHREAD_CFLAGS) ++ AC_SUBST(PTHREAD_LIBS) + fi + if $have_pthread; then + LIBS="$PTHREAD_LIBS $LIBS" +diff --git a/fontconfig.pc.in b/fontconfig.pc.in +index 61b35fb..f823bac 100644 +--- a/fontconfig.pc.in ++++ b/fontconfig.pc.in +@@ -14,5 +14,5 @@ Version: @VERSION@ + Requires: @PKGCONFIG_REQUIRES@ + Requires.private: @PKGCONFIG_REQUIRES_PRIVATELY@ + Libs: -L${libdir} -lfontconfig +-Libs.private: @ICONV_LIBS@ @PKG_EXPAT_LIBS@ +-Cflags: -I${includedir} @ICONV_CFLAGS@ @PKG_EXPAT_CFLAGS@ ++Libs.private: @ICONV_LIBS@ @PKG_EXPAT_LIBS@ @PTHREAD_LIBS@ ++Cflags: -I${includedir} @ICONV_CFLAGS@ @PKG_EXPAT_CFLAGS@ @PTHREAD_CFLAGS@ +-- +2.27.0 + diff --git a/package/fontconfig/Config.in b/package/fontconfig/Config.in new file mode 100644 index 00000000..d274b063 --- /dev/null +++ b/package/fontconfig/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_FONTCONFIG + bool "fontconfig" + select BR2_PACKAGE_FREETYPE + select BR2_PACKAGE_EXPAT + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + help + Fontconfig is a library for configuring and customizing font + access. + + http://www.fontconfig.org/ diff --git a/package/fontconfig/fontconfig.hash b/package/fontconfig/fontconfig.hash new file mode 100644 index 00000000..153f00c3 --- /dev/null +++ b/package/fontconfig/fontconfig.hash @@ -0,0 +1,5 @@ +# From https://lists.freedesktop.org/archives/fontconfig/2018-August/006324.html +sha256 f655dd2a986d7aa97e052261b36aa67b0a64989496361eca8d604e6414006741 fontconfig-2.13.1.tar.bz2 + +# Locally calculated +sha256 fa4cd9ab005185e10cd8f7504518856c7dd36c01e766c2bac87f4fc638e9f886 COPYING diff --git a/package/fontconfig/fontconfig.mk b/package/fontconfig/fontconfig.mk new file mode 100644 index 00000000..33218ed6 --- /dev/null +++ b/package/fontconfig/fontconfig.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# fontconfig +# +################################################################################ + +FONTCONFIG_VERSION = 2.13.1 +FONTCONFIG_SITE = http://fontconfig.org/release +FONTCONFIG_SOURCE = fontconfig-$(FONTCONFIG_VERSION).tar.bz2 +# 0002-add-pthread-as-a-dependency-of-a-static-lib.patch +FONTCONFIG_AUTORECONF = YES +FONTCONFIG_INSTALL_STAGING = YES +FONTCONFIG_DEPENDENCIES = freetype expat host-pkgconf host-gperf util-linux +HOST_FONTCONFIG_DEPENDENCIES = \ + host-freetype host-expat host-pkgconf host-gperf host-util-linux +FONTCONFIG_LICENSE = fontconfig license +FONTCONFIG_LICENSE_FILES = COPYING +FONTCONFIG_CPE_ID_VENDOR = fontconfig_project + +FONTCONFIG_CONF_OPTS = \ + --with-arch=$(GNU_TARGET_NAME) \ + --with-cache-dir=/var/cache/fontconfig \ + --disable-docs + +HOST_FONTCONFIG_CONF_OPTS = \ + --disable-static + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/fping/Config.in b/package/fping/Config.in new file mode 100644 index 00000000..686102a4 --- /dev/null +++ b/package/fping/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_FPING + bool "fping" + help + fping is a program to send ICMP echo probes to network hosts, + similar to ping, but much better performing when pinging + multiple hosts. + + http://fping.org/ diff --git a/package/fping/fping.hash b/package/fping/fping.hash new file mode 100644 index 00000000..0b2233f3 --- /dev/null +++ b/package/fping/fping.hash @@ -0,0 +1,5 @@ +# Locally calculated +sha256 ed38c0b9b64686a05d1b3bc1d66066114a492e04e44eef1821d43b1263cd57b8 fping-5.0.tar.gz + +# Hash for license file +sha256 6051b27e4b4a648f7bc8b329024da53a6e95ce88fcf0ccc259c371a74b741757 COPYING diff --git a/package/fping/fping.mk b/package/fping/fping.mk new file mode 100644 index 00000000..0a03c1df --- /dev/null +++ b/package/fping/fping.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# fping +# +################################################################################ + +FPING_VERSION = 5.0 +FPING_SITE = http://fping.org/dist +FPING_LICENSE = BSD-like +FPING_LICENSE_FILES = COPYING +FPING_SELINUX_MODULES = netutils + +$(eval $(autotools-package)) diff --git a/package/freeradius-client/0001-fix-for-nettle.patch b/package/freeradius-client/0001-fix-for-nettle.patch new file mode 100644 index 00000000..a862c749 --- /dev/null +++ b/package/freeradius-client/0001-fix-for-nettle.patch @@ -0,0 +1,20 @@ +lib/rc-md5: fix build when nettle is enabled + +rc-md5 uses size_t, which is defined in string.h. This include is +missing when built against nettle. + +Just add it. + +Signed-off-by: "Yann E. MORIN" + +diff -durN freeradius-client-1.1.7.orig/lib/rc-md5.h freeradius-client-1.1.7/lib/rc-md5.h +--- freeradius-client-1.1.7.orig/lib/rc-md5.h 2015-01-19 17:18:26.000000000 +0100 ++++ freeradius-client-1.1.7/lib/rc-md5.h 2015-01-25 22:56:07.815626476 +0100 +@@ -13,6 +13,7 @@ + + #ifdef HAVE_NETTLE + ++#include /* size_t */ + #include + + #else diff --git a/package/freeradius-client/Config.in b/package/freeradius-client/Config.in new file mode 100644 index 00000000..773adb8a --- /dev/null +++ b/package/freeradius-client/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_FREERADIUS_CLIENT + bool "freeradius-client" + help + FreeRADIUS Client is a framework and library for + writing RADIUS Clients. + + http://wiki.freeradius.org/project/Radiusclient diff --git a/package/freeradius-client/freeradius-client.hash b/package/freeradius-client/freeradius-client.hash new file mode 100644 index 00000000..e343b3a4 --- /dev/null +++ b/package/freeradius-client/freeradius-client.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 eada2861b8f4928e3ac6b5bbfe11e92cd6cdcacfce40cae1085e77c1b6add0e9 freeradius-client-1.1.7.tar.gz +sha256 e579878de7971b2224ae2263bbc61f6c465fe40e884a9068d5fa9d17fbfd2ebe COPYRIGHT diff --git a/package/freeradius-client/freeradius-client.mk b/package/freeradius-client/freeradius-client.mk new file mode 100644 index 00000000..981ed163 --- /dev/null +++ b/package/freeradius-client/freeradius-client.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# freeradius-client +# +################################################################################ + +FREERADIUS_CLIENT_VERSION = 1.1.7 +FREERADIUS_CLIENT_SITE = ftp://ftp.freeradius.org/pub/freeradius +FREERADIUS_CLIENT_LICENSE = BSD-2-Clause +FREERADIUS_CLIENT_LICENSE_FILES = COPYRIGHT +FREERADIUS_CLIENT_INSTALL_STAGING = YES + +FREERADIUS_CLIENT_DEPENDENCIES = host-pkgconf + +ifeq ($(BR2_PACKAGE_NETTLE),y) +FREERADIUS_CLIENT_DEPENDENCIES += nettle +FREERADIUS_CLIENT_CONF_OPTS += --with-nettle=yes +else +FREERADIUS_CLIENT_CONF_OPTS += --with-nettle=no +endif + +$(eval $(autotools-package)) diff --git a/package/freerdp/Config.in b/package/freerdp/Config.in new file mode 100644 index 00000000..5705ce0e --- /dev/null +++ b/package/freerdp/Config.in @@ -0,0 +1,73 @@ +config BR2_PACKAGE_FREERDP + bool "freerdp" + # FreeRDP does not have a single C++ source file, however it + # insists on having a C++ compiler. Removing that requirement + # is a bit too much involving, so we just depend on it... + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + depends on !BR2_STATIC_LIBS # uses dlfcn.h + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # libglib2 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_LIBGLIB2 + help + FreeRDP is a free implementation of the Remote Desktop + Protocol (RDP), released under the Apache license + + This only installs the freerdp libraries. + + http://www.freerdp.com/ + + Note: this also installs a key and certificate in + /etc/freerdp/keys/ . These are publicly-known, as they + are present in FreeRDP's source tree. It is strongly + suggested that you overwrite them with your own set, + either in an overlay rootfs or in a post-build script. + +if BR2_PACKAGE_FREERDP + +config BR2_PACKAGE_FREERDP_GSTREAMER1 + bool "gstreamer support" + depends on BR2_PACKAGE_GSTREAMER1 + depends on BR2_PACKAGE_XORG7 # xlib-libxrandr + # gstreamer-1.x dependencies already dependencies of FreeRDP + select BR2_PACKAGE_GST1_PLUGINS_BASE + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_APP + select BR2_PACKAGE_XLIB_LIBXRANDR + +comment "gstreamer support needs X.Org" + depends on !BR2_PACKAGE_XORG7 + depends on BR2_PACKAGE_GSTREAMER1 + +config BR2_PACKAGE_FREERDP_SERVER + bool "server" + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBX11 + select BR2_PACKAGE_XLIB_LIBXDAMAGE + select BR2_PACKAGE_XLIB_LIBXEXT + select BR2_PACKAGE_XLIB_LIBXFIXES + +config BR2_PACKAGE_FREERDP_CLIENT_X11 + bool "X11 client" + default y + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBX11 + select BR2_PACKAGE_XLIB_LIBXEXT + +comment "server and X11 client need X.Org" + depends on !BR2_PACKAGE_XORG7 + +config BR2_PACKAGE_FREERDP_CLIENT_WL + bool "wayland client" + default y + depends on BR2_PACKAGE_WAYLAND + select BR2_PACKAGE_LIBXKBCOMMON + +endif + +comment "freerdp needs a toolchain w/ wchar, dynamic library, threads, C++" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_USE_WCHAR || BR2_STATIC_LIBS \ + || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP diff --git a/package/freerdp/freerdp.hash b/package/freerdp/freerdp.hash new file mode 100644 index 00000000..8217a210 --- /dev/null +++ b/package/freerdp/freerdp.hash @@ -0,0 +1,5 @@ +# From https://pub.freerdp.com/releases/freerdp-2.2.0.tar.gz.sha256 +sha256 19b30759e324ce7a9767af880116a4c571761e9ad9c5d6c98c5b302ff8c24c6c freerdp-2.2.0.tar.gz + +# Locally calculated +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE diff --git a/package/freerdp/freerdp.mk b/package/freerdp/freerdp.mk new file mode 100644 index 00000000..16d58b5a --- /dev/null +++ b/package/freerdp/freerdp.mk @@ -0,0 +1,267 @@ +################################################################################ +# +# freerdp +# +################################################################################ + +FREERDP_VERSION = 2.2.0 +FREERDP_SITE = https://pub.freerdp.com/releases +FREERDP_DEPENDENCIES = libglib2 openssl zlib +FREERDP_LICENSE = Apache-2.0 +FREERDP_LICENSE_FILES = LICENSE +FREERDP_CPE_ID_VENDOR = freerdp + +FREERDP_INSTALL_STAGING = YES + +FREERDP_CONF_OPTS = -DWITH_MANPAGES=OFF -Wno-dev -DWITH_GSTREAMER_0_10=OFF + +ifeq ($(BR2_PACKAGE_FREERDP_GSTREAMER1),y) +FREERDP_CONF_OPTS += -DWITH_GSTREAMER_1_0=ON +FREERDP_DEPENDENCIES += gstreamer1 gst1-plugins-base +else +FREERDP_CONF_OPTS += -DWITH_GSTREAMER_1_0=OFF +endif + +ifeq ($(BR2_PACKAGE_CUPS),y) +FREERDP_CONF_OPTS += -DWITH_CUPS=ON +FREERDP_DEPENDENCIES += cups +else +FREERDP_CONF_OPTS += -DWITH_CUPS=OFF +endif + +ifeq ($(BR2_PACKAGE_FFMPEG),y) +FREERDP_CONF_OPTS += -DWITH_FFMPEG=ON +FREERDP_DEPENDENCIES += ffmpeg +else +FREERDP_CONF_OPTS += -DWITH_FFMPEG=OFF +endif + +ifeq ($(BR2_PACKAGE_ALSA_LIB_MIXER),y) +FREERDP_CONF_OPTS += -DWITH_ALSA=ON +FREERDP_DEPENDENCIES += alsa-lib +else +FREERDP_CONF_OPTS += -DWITH_ALSA=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBUSB),y) +FREERDP_CONF_OPTS += -DCHANNEL_URBDRC=ON +FREERDP_DEPENDENCIES += libusb +else +FREERDP_CONF_OPTS += -DCHANNEL_URBDRC=OFF +endif + +ifeq ($(BR2_PACKAGE_PULSEAUDIO),y) +FREERDP_CONF_OPTS += -DWITH_PULSE=ON +FREERDP_DEPENDENCIES += pulseaudio +else +FREERDP_CONF_OPTS += -DWITH_PULSE=OFF +endif + +# For the systemd journal +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +FREERDP_CONF_OPTS += -DWITH_LIBSYSTEMD=ON +FREERDP_DEPENDENCIES += systemd +else +FREERDP_CONF_OPTS += -DWITH_LIBSYSTEMD=OFF +endif + +ifeq ($(BR2_ARM_CPU_HAS_NEON),y) +FREERDP_CONF_OPTS += -DWITH_NEON=ON +else +FREERDP_CONF_OPTS += -DWITH_NEON=OFF +endif + +ifeq ($(BR2_X86_CPU_HAS_SSE2),y) +FREERDP_CONF_OPTS += -DWITH_SSE2=ON +else +FREERDP_CONF_OPTS += -DWITH_SSE2=OFF +endif + +ifeq ($(BR2_arm)$(BR2_armeb),y) +FREERDP_CONF_OPTS += -DARM_FP_ABI=$(GCC_TARGET_FLOAT_ABI) +endif + +#--------------------------------------- +# Enabling server and/or client + +# Clients and server interface must always be enabled to build the +# corresponding libraries. +FREERDP_CONF_OPTS += -DWITH_SERVER_INTERFACE=ON +FREERDP_CONF_OPTS += -DWITH_CLIENT_INTERFACE=ON + +ifeq ($(BR2_PACKAGE_FREERDP_SERVER),y) +FREERDP_CONF_OPTS += -DWITH_SERVER=ON +endif + +ifneq ($(BR2_PACKAGE_FREERDP_CLIENT_X11)$(BR2_PACKAGE_FREERDP_CLIENT_WL),) +FREERDP_CONF_OPTS += -DWITH_CLIENT=ON +endif + +#--------------------------------------- +# Libraries for client and/or server + +# The FreeRDP buildsystem uses non-orthogonal options. For example it +# is not possible to build the server and the wayland client without +# also building the X client. That's because the dependencies of the +# server (the X libraries) are a superset of those of the X client. +# So, as soon as FreeRDP is configured for the server and the wayland +# client, it will believe it also has to build the X client, because +# the libraries it needs are enabled. +# +# Furthermore, the shadow server is always built, even if there's nothing +# it can serve (i.e. the X libs are disabled). +# +# So, we do not care whether we build too much; we remove, as +# post-install hooks, whatever we do not want. + +# If Xorg is enabled, and the server or the X client are, then libX11 +# and libXext are forcibly enabled at the Kconfig level. However, if +# Xorg is enabled but neither the server nor the X client are, then +# there's nothing that guarantees those two libs are enabled. So we +# really must check for them. +ifeq ($(BR2_PACKAGE_XLIB_LIBX11)$(BR2_PACKAGE_XLIB_LIBXEXT),yy) +FREERDP_DEPENDENCIES += xlib_libX11 xlib_libXext +FREERDP_CONF_OPTS += -DWITH_X11=ON +else +FREERDP_CONF_OPTS += -DWITH_X11=OFF +endif + +# The following libs are either optional or mandatory only for either +# the server or the client. A mandatory library for either one is +# selected from Kconfig, so we can make it conditional here +ifeq ($(BR2_PACKAGE_XLIB_LIBXCURSOR),y) +FREERDP_CONF_OPTS += -DWITH_XCURSOR=ON +FREERDP_DEPENDENCIES += xlib_libXcursor +else +FREERDP_CONF_OPTS += -DWITH_XCURSOR=OFF +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXDAMAGE),y) +FREERDP_CONF_OPTS += -DWITH_XDAMAGE=ON +FREERDP_DEPENDENCIES += xlib_libXdamage +else +FREERDP_CONF_OPTS += -DWITH_XDAMAGE=OFF +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXFIXES),y) +FREERDP_CONF_OPTS += -DWITH_XFIXES=ON +FREERDP_DEPENDENCIES += xlib_libXfixes +else +FREERDP_CONF_OPTS += -DWITH_XFIXES=OFF +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXI),y) +FREERDP_CONF_OPTS += -DWITH_XI=ON +FREERDP_DEPENDENCIES += xlib_libXi +else +FREERDP_CONF_OPTS += -DWITH_XI=OFF +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXINERAMA),y) +FREERDP_CONF_OPTS += -DWITH_XINERAMA=ON +FREERDP_DEPENDENCIES += xlib_libXinerama +else +FREERDP_CONF_OPTS += -DWITH_XINERAMA=OFF +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXKBFILE),y) +FREERDP_CONF_OPTS += -DWITH_XKBFILE=ON +FREERDP_DEPENDENCIES += xlib_libxkbfile +else +FREERDP_CONF_OPTS += -DWITH_XKBFILE=OFF +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXRANDR),y) +FREERDP_CONF_OPTS += -DWITH_XRANDR=ON +FREERDP_DEPENDENCIES += xlib_libXrandr +else +FREERDP_CONF_OPTS += -DWITH_XRANDR=OFF +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXRENDER),y) +FREERDP_CONF_OPTS += -DWITH_XRENDER=ON +FREERDP_DEPENDENCIES += xlib_libXrender +else +FREERDP_CONF_OPTS += -DWITH_XRENDER=OFF +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXTST),y) +FREERDP_CONF_OPTS += -DWITH_XTEST=ON +FREERDP_DEPENDENCIES += xlib_libXtst +else +FREERDP_CONF_OPTS += -DWITH_XTEST=OFF +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXV),y) +FREERDP_CONF_OPTS += -DWITH_XV=ON +FREERDP_DEPENDENCIES += xlib_libXv +else +FREERDP_CONF_OPTS += -DWITH_XV=OFF +endif + +ifeq ($(BR2_PACKAGE_FREERDP_CLIENT_WL),y) +FREERDP_DEPENDENCIES += wayland libxkbcommon +FREERDP_CONF_OPTS += \ + -DWITH_WAYLAND=ON \ + -DWAYLAND_SCANNER=$(HOST_DIR)/bin/wayland-scanner +else +FREERDP_CONF_OPTS += -DWITH_WAYLAND=OFF +endif + +#--------------------------------------- +# Post-install hooks to cleanup and install missing stuff + +# Shadow server is always installed, no matter what, so we manually +# remove it if the user does not want the server. +ifeq ($(BR2_PACKAGE_FREERDP_SERVER),) +define FREERDP_RM_SHADOW_SERVER + rm -f $(TARGET_DIR)/usr/bin/freerdp-shadow +endef +FREERDP_POST_INSTALL_TARGET_HOOKS += FREERDP_RM_SHADOW_SERVER +endif # ! server + +# X client is always built as soon as a client is enabled and the +# necessary libs are enabled (e.g. because of the server), so manually +# remove it if the user does not want it. +ifeq ($(BR2_PACKAGE_FREERDP_CLIENT_X11),) +define FREERDP_RM_CLIENT_X11 + rm -f $(TARGET_DIR)/usr/bin/xfreerdp + rm -f $(TARGET_DIR)/usr/lib/libxfreerdp-client* +endef +FREERDP_POST_INSTALL_TARGET_HOOKS += FREERDP_RM_CLIENT_X11 +define FREERDP_RM_CLIENT_X11_LIB + rm -f $(STAGING_DIR)/usr/lib/libxfreerdp-client* +endef +FREERDP_POST_INSTALL_STAGING_HOOKS += FREERDP_RM_CLIENT_X11_LIB +endif # ! X client + +# Wayland client is always built as soon as wayland is enabled, so +# manually remove it if the user does not want it. +ifeq ($(BR2_PACKAGE_FREERDP_CLIENT_WL),) +define FREERDP_RM_CLIENT_WL + rm -f $(TARGET_DIR)/usr/bin/wlfreerdp +endef +FREERDP_POST_INSTALL_TARGET_HOOKS += FREERDP_RM_CLIENT_WL +endif + +# Remove static libraries in unusual dir +define FREERDP_CLEANUP + rm -rf $(TARGET_DIR)/usr/lib/freerdp +endef +FREERDP_POST_INSTALL_TARGET_HOOKS += FREERDP_CLEANUP + +# Install the server key and certificate, so that a client can connect. +# A user can override them with its own in a post-build script, if needed. +# We install them even if the server is not enabled, since another server +# can be built and linked with libfreerdp (e.g. weston with the RDP +# backend). Key and cert are installed world-readable, so non-root users +# can start a server. +define FREERDP_INSTALL_KEYS + $(INSTALL) -m 0644 -D $(@D)/server/Sample/server.key \ + $(TARGET_DIR)/etc/freerdp/keys/server.key + $(INSTALL) -m 0644 -D $(@D)/server/Sample/server.crt \ + $(TARGET_DIR)/etc/freerdp/keys/server.crt +endef +FREERDP_POST_INSTALL_TARGET_HOOKS += FREERDP_INSTALL_KEYS + +$(eval $(cmake-package)) diff --git a/package/freescale-imx/Config.in b/package/freescale-imx/Config.in new file mode 100644 index 00000000..b0c7de84 --- /dev/null +++ b/package/freescale-imx/Config.in @@ -0,0 +1,122 @@ +menuconfig BR2_PACKAGE_FREESCALE_IMX + bool "Freescale i.MX libraries" + depends on BR2_arm || BR2_aarch64 + help + Those packages provide hardware acceleration for GPU or VPU, + hardware optimization or some hardware tools for Freescale + i.MX platforms. + +if BR2_PACKAGE_FREESCALE_IMX +choice + prompt "i.MX platform" + +config BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX25_3STACK + bool "imx25-3stack" + +config BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX27ADS + bool "imx27ads" + +config BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX37_3STACK + bool "imx37-3stack" + +config BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX50 + bool "imx50" + +config BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX51 + bool "imx51" + +config BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX53 + bool "imx53" + +config BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6Q + bool "imx6q/imx6dl" + +config BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6S + bool "imx6sl/imx6sx" + +config BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6UL + bool "imx6ul/imx6ull" + +config BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX7 + bool "imx7d/imx7ulp" + +config BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8 + bool "imx8" + +config BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M + bool "imx8m" + +config BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MM + bool "imx8mm" + +config BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MN + bool "imx8mn" + +config BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8X + bool "imx8x" +endchoice + +config BR2_PACKAGE_FREESCALE_IMX_PLATFORM + string + default "IMX25_3STACK" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX25_3STACK + default "IMX27ADS" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX27ADS + default "IMX37_3STACK" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX37_3STACK + default "IMX50" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX50 + default "IMX51" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX51 + default "IMX53" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX53 + default "IMX6Q" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6Q + default "IMX6S" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6S + default "IMX6UL" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6UL + default "IMX7" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX7 + default "IMX8" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8 + default "IMX8MQ" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M + default "IMX8MM" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MM + default "IMX8MN" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MN + +config BR2_PACKAGE_FREESCALE_IMX_HAS_VPU + bool + default y if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX27ADS || \ + BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX51 || \ + BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX53 || \ + BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6Q + +config BR2_PACKAGE_FREESCALE_IMX_HAS_VPU_HANTRO + bool + default y if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M || \ + BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MM + +config BR2_PACKAGE_FREESCALE_IMX_HAS_VIV_GPU + bool + default y if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6Q || \ + BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6S || \ + BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX7 || \ + BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8 || \ + BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M || \ + BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MM || \ + BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MN || \ + BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8X + +source "package/freescale-imx/imx-alsa-plugins/Config.in" +source "package/freescale-imx/imx-codec/Config.in" +source "package/freescale-imx/imx-kobs/Config.in" +source "package/freescale-imx/imx-lib/Config.in" +source "package/freescale-imx/imx-m4fwloader/Config.in" +source "package/freescale-imx/imx-parser/Config.in" +source "package/freescale-imx/imx-uuc/Config.in" +source "package/freescale-imx/imx-vpu/Config.in" +source "package/freescale-imx/imx-vpu-hantro/Config.in" +source "package/freescale-imx/imx-vpuwrap/Config.in" +source "package/freescale-imx/firmware-imx/Config.in" +source "package/freescale-imx/imx-sc-firmware/Config.in" +source "package/freescale-imx/imx-seco/Config.in" +if (BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX51 || BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX53) +source "package/freescale-imx/gpu-amd-bin-mx51/Config.in" +source "package/freescale-imx/libz160/Config.in" +endif +if BR2_PACKAGE_FREESCALE_IMX_HAS_VIV_GPU +source "package/freescale-imx/imx-gpu-g2d/Config.in" +source "package/freescale-imx/imx-gpu-viv/Config.in" +source "package/freescale-imx/kernel-module-imx-gpu-viv/Config.in" +endif + +endif diff --git a/package/freescale-imx/firmware-imx/Config.in b/package/freescale-imx/firmware-imx/Config.in new file mode 100644 index 00000000..88107797 --- /dev/null +++ b/package/freescale-imx/firmware-imx/Config.in @@ -0,0 +1,88 @@ +config BR2_PACKAGE_FIRMWARE_IMX + bool "firmware-imx" + depends on BR2_arm || BR2_aarch64 # Only relevant for i.MX + help + Firmware blobs for the Freescale i.MX SoCs. + + It contains blobs for SDMA, VPU, HDMI, EDPC, and DDR + training. + + This library is provided by Freescale as-is and doesn't have + an upstream. + +if BR2_PACKAGE_FIRMWARE_IMX + +config BR2_PACKAGE_FIRMWARE_IMX_SDMA_FW_NAME + string + default "imx25" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX25_3STACK + default "imx51" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX51 + default "imx53" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX53 + default "imx6q" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6Q + default "imx6q" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6S + default "imx6q" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6UL + default "imx7d" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX7 + default "imx7d" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M + default "imx7d" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MM + default "imx7d" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MN + +config BR2_PACKAGE_FIRMWARE_IMX_VPU_FW_NAME + string + default "imx27" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX27ADS + default "imx51" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX51 + default "imx53" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX53 + default "imx6" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6Q + default "imx8" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8 + default "imx8" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8X + +config BR2_PACKAGE_FIRMWARE_IMX_NEEDS_HDMI_FW + bool + default y if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M + +config BR2_PACKAGE_FIRMWARE_IMX_NEEDS_EPDC_FW + bool + default y if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6Q + default y if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6S + +config BR2_PACKAGE_FIRMWARE_IMX_NEEDS_DDR_FW + bool + default y if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M + default y if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MM + default y if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MN + +if BR2_PACKAGE_FIRMWARE_IMX_NEEDS_DDR_FW + +choice + bool "DDR training binaries" + default BR2_PACKAGE_FIRMWARE_IMX_LPDDR4 + help + Choose the DDR training binaries to be used depending on the + kind of memory that is available on the target board (DDR4, + LPDDR4, etc...). + +config BR2_PACKAGE_FIRMWARE_IMX_LPDDR4 + bool "lpddr4" + help + Use LPDDR4 binaries (i.e.: lpddr4_pmu_train_*.bin) + +config BR2_PACKAGE_FIRMWARE_IMX_DDR4 + bool "DDR4" + help + Use DDR4 binaries (i.e.: ddr4_*_201810.bin). + +endchoice # DDR training FW + +config BR2_PACKAGE_FIRMWARE_IMX_IMEM_LEN + hex "(LP)DDR IMEM padding length" + default 0x8000 + help + The IMEM firmware will be padded to this length + +config BR2_PACKAGE_FIRMWARE_IMX_DMEM_LEN + hex "(LP)DDR DMEM padding length" + default 0x4000 + help + The DMEM firmware will be padded to this length + +endif # BR2_PACKAGE_FIRMWARE_IMX_NEEDS_DDR_FW + +endif # BR2_PACKAGE_FIRMWARE_IMX diff --git a/package/freescale-imx/firmware-imx/firmware-imx.hash b/package/freescale-imx/firmware-imx/firmware-imx.hash new file mode 100644 index 00000000..0a717d40 --- /dev/null +++ b/package/freescale-imx/firmware-imx/firmware-imx.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 2b70f169d4065b2a7ac7a676afe24636128bd2dacc9f5230346758c3b146b2be firmware-imx-8.10.bin +sha256 72edc2072c86d93aa1993d15d4d19d96270af3749b0108995ad50c81d1461f52 EULA +sha256 9c16421e7c702f56756650b8ac954d34556327e598a8666e6e8f4eb3a1aa95f1 COPYING diff --git a/package/freescale-imx/firmware-imx/firmware-imx.mk b/package/freescale-imx/firmware-imx/firmware-imx.mk new file mode 100644 index 00000000..6d82ea20 --- /dev/null +++ b/package/freescale-imx/firmware-imx/firmware-imx.mk @@ -0,0 +1,138 @@ +################################################################################ +# +# firmware-imx +# +################################################################################ + +FIRMWARE_IMX_VERSION = 8.10 +FIRMWARE_IMX_SITE = $(FREESCALE_IMX_SITE) +FIRMWARE_IMX_SOURCE = firmware-imx-$(FIRMWARE_IMX_VERSION).bin + +FIRMWARE_IMX_LICENSE = NXP Semiconductor Software License Agreement +FIRMWARE_IMX_LICENSE_FILES = EULA COPYING +FIRMWARE_IMX_REDISTRIBUTE = NO + +FIRMWARE_IMX_INSTALL_IMAGES = YES + +define FIRMWARE_IMX_EXTRACT_CMDS + $(call FREESCALE_IMX_EXTRACT_HELPER,$(FIRMWARE_IMX_DL_DIR)/$(FIRMWARE_IMX_SOURCE)) +endef + +# +# DDR firmware +# + +define FIRMWARE_IMX_PREPARE_DDR_FW + $(TARGET_OBJCOPY) -I binary -O binary \ + --pad-to $(BR2_PACKAGE_FIRMWARE_IMX_IMEM_LEN) --gap-fill=0x0 \ + $(FIRMWARE_IMX_DDRFW_DIR)/$(strip $(1)).bin \ + $(FIRMWARE_IMX_DDRFW_DIR)/$(strip $(1))_pad.bin + $(TARGET_OBJCOPY) -I binary -O binary \ + --pad-to $(BR2_PACKAGE_FIRMWARE_IMX_DMEM_LEN) --gap-fill=0x0 \ + $(FIRMWARE_IMX_DDRFW_DIR)/$(strip $(2)).bin \ + $(FIRMWARE_IMX_DDRFW_DIR)/$(strip $(2))_pad.bin + cat $(FIRMWARE_IMX_DDRFW_DIR)/$(strip $(1))_pad.bin \ + $(FIRMWARE_IMX_DDRFW_DIR)/$(strip $(2))_pad.bin > \ + $(FIRMWARE_IMX_DDRFW_DIR)/$(strip $(3)).bin +endef + +ifeq ($(BR2_PACKAGE_FIRMWARE_IMX_LPDDR4),y) +FIRMWARE_IMX_DDRFW_DIR = $(@D)/firmware/ddr/synopsys + +define FIRMWARE_IMX_INSTALL_IMAGE_DDR_FW + # Create padded versions of lpddr4_pmu_* and generate lpddr4_pmu_train_fw.bin. + # lpddr4_pmu_train_fw.bin is needed when generating imx8-boot-sd.bin + # which is done in post-image script. + $(call FIRMWARE_IMX_PREPARE_DDR_FW, \ + lpddr4_pmu_train_1d_imem,lpddr4_pmu_train_1d_dmem,lpddr4_pmu_train_1d_fw) + $(call FIRMWARE_IMX_PREPARE_DDR_FW, \ + lpddr4_pmu_train_2d_imem,lpddr4_pmu_train_2d_dmem,lpddr4_pmu_train_2d_fw) + cat $(FIRMWARE_IMX_DDRFW_DIR)/lpddr4_pmu_train_1d_fw.bin \ + $(FIRMWARE_IMX_DDRFW_DIR)/lpddr4_pmu_train_2d_fw.bin > \ + $(BINARIES_DIR)/lpddr4_pmu_train_fw.bin + ln -sf $(BINARIES_DIR)/lpddr4_pmu_train_fw.bin $(BINARIES_DIR)/ddr_fw.bin +endef +endif + +ifeq ($(BR2_PACKAGE_FIRMWARE_IMX_DDR4),y) +FIRMWARE_IMX_DDRFW_DIR = $(@D)/firmware/ddr/synopsys + +define FIRMWARE_IMX_INSTALL_IMAGE_DDR_FW + # Create padded versions of ddr4_* and generate ddr4_fw.bin. + # ddr4_fw.bin is needed when generating imx8-boot-sd.bin + # which is done in post-image script. + $(call FIRMWARE_IMX_PREPARE_DDR_FW, \ + ddr4_imem_1d_201810,ddr4_dmem_1d_201810,ddr4_1d_201810_fw) + $(call FIRMWARE_IMX_PREPARE_DDR_FW, \ + ddr4_imem_2d_201810,ddr4_dmem_2d_201810,ddr4_2d_201810_fw) + cat $(FIRMWARE_IMX_DDRFW_DIR)/ddr4_1d_201810_fw.bin \ + $(FIRMWARE_IMX_DDRFW_DIR)/ddr4_2d_201810_fw.bin > \ + $(BINARIES_DIR)/ddr4_201810_fw.bin + ln -sf $(BINARIES_DIR)/ddr4_201810_fw.bin $(BINARIES_DIR)/ddr_fw.bin +endef +endif + +# +# HDMI firmware +# + +ifeq ($(BR2_PACKAGE_FIRMWARE_IMX_NEEDS_HDMI_FW),y) +define FIRMWARE_IMX_INSTALL_IMAGE_HDMI_FW + cp $(@D)/firmware/hdmi/cadence/signed_hdmi_imx8m.bin \ + $(BINARIES_DIR)/signed_hdmi_imx8m.bin +endef +endif + +# +# EPDC firmware +# + +ifeq ($(BR2_PACKAGE_FIRMWARE_IMX_NEEDS_EPDC_FW),y) +define FIRMWARE_IMX_INSTALL_TARGET_EPDC_FW + mkdir -p $(TARGET_DIR)/lib/firmware/imx + cp -r $(@D)/firmware/epdc $(TARGET_DIR)/lib/firmware/imx + mv $(TARGET_DIR)/lib/firmware/imx/epdc/epdc_ED060XH2C1.fw.nonrestricted \ + $(TARGET_DIR)/lib/firmware/imx/epdc/epdc_ED060XH2C1.fw +endef +endif + +# +# SDMA firmware +# + +FIRMWARE_IMX_SDMA_FW_NAME = $(call qstrip,$(BR2_PACKAGE_FIRMWARE_IMX_SDMA_FW_NAME)) +ifneq ($(FIRMWARE_IMX_SDMA_FW_NAME),) +define FIRMWARE_IMX_INSTALL_TARGET_SDMA_FW + mkdir -p $(TARGET_DIR)/lib/firmware/imx/sdma + cp -r $(@D)/firmware/sdma/sdma-$(FIRMWARE_IMX_SDMA_FW_NAME)*.bin \ + $(TARGET_DIR)/lib/firmware/imx/sdma/ +endef +endif + +# +# VPU firmware +# + +FIRMWARE_IMX_VPU_FW_NAME = $(call qstrip,$(BR2_PACKAGE_FIRMWARE_IMX_VPU_FW_NAME)) +ifneq ($(FIRMWARE_IMX_VPU_FW_NAME),) +define FIRMWARE_IMX_INSTALL_TARGET_VPU_FW + mkdir -p $(TARGET_DIR)/lib/firmware/vpu + for i in $$(find $(@D)/firmware/vpu/vpu_fw_$(FIRMWARE_IMX_VPU_FW_NAME)*.bin); do \ + cp $$i $(TARGET_DIR)/lib/firmware/vpu/ ; \ + ln -sf vpu/$$(basename $$i) $(TARGET_DIR)/lib/firmware/$$(basename $$i) ; \ + done +endef +endif + +define FIRMWARE_IMX_INSTALL_IMAGES_CMDS + $(FIRMWARE_IMX_INSTALL_IMAGE_DDR_FW) + $(FIRMWARE_IMX_INSTALL_IMAGE_HDMI_FW) +endef + +define FIRMWARE_IMX_INSTALL_TARGET_CMDS + $(FIRMWARE_IMX_INSTALL_TARGET_EPDC_FW) + $(FIRMWARE_IMX_INSTALL_TARGET_SDMA_FW) + $(FIRMWARE_IMX_INSTALL_TARGET_VPU_FW) +endef + +$(eval $(generic-package)) diff --git a/package/freescale-imx/freescale-imx.mk b/package/freescale-imx/freescale-imx.mk new file mode 100644 index 00000000..84a1725c --- /dev/null +++ b/package/freescale-imx/freescale-imx.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# freescale-imx +# +################################################################################ + +FREESCALE_IMX_SITE = http://www.nxp.com/lgfiles/NMG/MAD/YOCTO + +# Helper for self-extracting binaries distributed by Freescale. +# +# The --force option makes sure it doesn't fail if the source +# directory already exists. The --auto-accept skips the license check, +# as it is not needed in Buildroot because we have legal-info. Since +# there's a EULA in the binary file, we extract it in this macro, and +# it should therefore be added to the LICENSE_FILES variable of +# packages using this macro. Also, remember to set REDISTRIBUTE to +# "NO". Indeed, this is a legal minefield: the EULA specifies that the +# Board Support Package includes software and hardware (sic!) for +# which a separate license is needed... +# +# $(1): full path to the archive file +# +define FREESCALE_IMX_EXTRACT_HELPER + awk 'BEGIN { start = 0; } \ + /^EOEULA/ { start = 0; } \ + { if (start) print; } \ + /< $(@D)/EULA + cd $(@D) && sh $(1) --force --auto-accept + find $(@D)/$(basename $(notdir $(1))) -mindepth 1 -maxdepth 1 -exec mv {} $(@D) \; + rmdir $(@D)/$(basename $(notdir $(1))) +endef + +include $(sort $(wildcard package/freescale-imx/*/*.mk)) diff --git a/package/freescale-imx/gpu-amd-bin-mx51/Config.in b/package/freescale-imx/gpu-amd-bin-mx51/Config.in new file mode 100644 index 00000000..cd66c737 --- /dev/null +++ b/package/freescale-imx/gpu-amd-bin-mx51/Config.in @@ -0,0 +1,60 @@ +comment "gpu-amd-bin-mx51 needs a glibc EABI toolchain w/ C++" + depends on BR2_arm + depends on !BR2_ARM_EABI || !BR2_TOOLCHAIN_USES_GLIBC || \ + !BR2_INSTALL_LIBSTDCPP + +config BR2_PACKAGE_GPU_AMD_BIN_MX51 + bool "gpu-amd-bin-mx51 (also imx53)" + depends on BR2_ARM_EABI + depends on BR2_TOOLCHAIN_USES_GLIBC + depends on BR2_INSTALL_LIBSTDCPP + select BR2_PACKAGE_HAS_LIBEGL + select BR2_PACKAGE_HAS_LIBGLES + select BR2_PACKAGE_HAS_LIBOPENVG + help + Freescale libraries, headers and executables for the + AMD GPU on i.MX5x, containing OpenGL/ES, OpenVG + and EGL support. + +if BR2_PACKAGE_GPU_AMD_BIN_MX51 + +choice + prompt "Output option" + help + There are two versions of this library: one for + direct framebuffer access, one for X11 rendering. + Choose here which version to install. + +config BR2_PACKAGE_GPU_AMD_BIN_MX51_OUTPUT_X11 + bool "X11" + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_LIBXCB + select BR2_PACKAGE_XLIB_LIBX11 + select BR2_PACKAGE_XLIB_LIBXEXT + select BR2_PACKAGE_XLIB_LIBXRENDER + select BR2_PACKAGE_XLIB_LIBXDMCP + select BR2_PACKAGE_XLIB_LIBXAU + +comment "X11 backend needs X.org enabled" + depends on !BR2_PACKAGE_XORG7 + +config BR2_PACKAGE_GPU_AMD_BIN_MX51_OUTPUT_FB + bool "Framebuffer" + +endchoice + +config BR2_PACKAGE_PROVIDES_LIBEGL + default "gpu-amd-bin-mx51" + +config BR2_PACKAGE_PROVIDES_LIBGLES + default "gpu-amd-bin-mx51" + +config BR2_PACKAGE_PROVIDES_LIBOPENVG + default "gpu-amd-bin-mx51" + +config BR2_PACKAGE_GPU_AMD_BIN_MX51_EXAMPLES + bool "install examples" + help + Copy the examples to the target. + +endif diff --git a/package/freescale-imx/gpu-amd-bin-mx51/egl.pc b/package/freescale-imx/gpu-amd-bin-mx51/egl.pc new file mode 100644 index 00000000..b0ff229f --- /dev/null +++ b/package/freescale-imx/gpu-amd-bin-mx51/egl.pc @@ -0,0 +1,10 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: egl +Description: Freescale amd-gpu-bin-mx51 implementation of EGL +Version: 7.11.0 +Libs: -L${libdir} -lEGL +Cflags: -I${includedir} diff --git a/package/freescale-imx/gpu-amd-bin-mx51/glesv2.pc b/package/freescale-imx/gpu-amd-bin-mx51/glesv2.pc new file mode 100644 index 00000000..6f9b7fc8 --- /dev/null +++ b/package/freescale-imx/gpu-amd-bin-mx51/glesv2.pc @@ -0,0 +1,10 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: glesv2 +Description: Freescale amd-gpu-bin-mx51 implementation of OpenGL ESv2 +Version: 7.11.0 +Libs: -L${libdir} -lGLESv2 +Cflags: -I${includedir} diff --git a/package/freescale-imx/gpu-amd-bin-mx51/gpu-amd-bin-mx51.hash b/package/freescale-imx/gpu-amd-bin-mx51/gpu-amd-bin-mx51.hash new file mode 100644 index 00000000..9c08e4aa --- /dev/null +++ b/package/freescale-imx/gpu-amd-bin-mx51/gpu-amd-bin-mx51.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 c7a6fa03b7aa2a375556c59908876554ba720c1e744baba2debb84a408f790db amd-gpu-x11-bin-mx51-11.09.01.bin +sha256 f0db68a764b5fb199729e7435f606b8d12b61ca97990336c647b7e81f4a584d9 amd-gpu-bin-mx51-11.09.01.bin diff --git a/package/freescale-imx/gpu-amd-bin-mx51/gpu-amd-bin-mx51.mk b/package/freescale-imx/gpu-amd-bin-mx51/gpu-amd-bin-mx51.mk new file mode 100644 index 00000000..55860737 --- /dev/null +++ b/package/freescale-imx/gpu-amd-bin-mx51/gpu-amd-bin-mx51.mk @@ -0,0 +1,67 @@ +################################################################################ +# +# gpu-amd-bin-mx51 +# +################################################################################ + +GPU_AMD_BIN_MX51_SITE = $(FREESCALE_IMX_SITE) +GPU_AMD_BIN_MX51_BASE_VERSION = 11.09.01 +ifeq ($(BR2_PACKAGE_GPU_AMD_BIN_MX51_OUTPUT_FB),y) +GPU_AMD_BIN_MX51_VERSION = $(GPU_AMD_BIN_MX51_BASE_VERSION)-fb +GPU_AMD_BIN_MX51_SOURCE = amd-gpu-bin-mx51-$(GPU_AMD_BIN_MX51_BASE_VERSION).bin +else +GPU_AMD_BIN_MX51_VERSION = $(GPU_AMD_BIN_MX51_BASE_VERSION)-x11 +GPU_AMD_BIN_MX51_SOURCE = amd-gpu-x11-bin-mx51-$(GPU_AMD_BIN_MX51_BASE_VERSION).bin +GPU_AMD_BIN_MX51_DEPENDENCIES = libxcb xlib_libX11 xlib_libXext \ + xlib_libXrender xlib_libXau xlib_libXdmcp +endif +GPU_AMD_BIN_MX51_PROVIDES = libegl libgles libopenvg +GPU_AMD_BIN_MX51_INSTALL_STAGING = YES + +GPU_AMD_BIN_MX51_LICENSE = Freescale Semiconductor Software License Agreement +GPU_AMD_BIN_MX51_LICENSE_FILES = EULA +GPU_AMD_BIN_MX51_REDISTRIBUTE = NO + +define GPU_AMD_BIN_MX51_EXTRACT_CMDS + $(call FREESCALE_IMX_EXTRACT_HELPER,$(GPU_AMD_BIN_MX51_DL_DIR)/$(GPU_AMD_BIN_MX51_SOURCE)) +endef + +# Upstream headers need to be compiled with -D_LINUX. It is more convenient +# to rely on __linux__ which is defined in compiler itself +define GPU_AMD_BIN_MX51_FIXUP_HEADERS + $(SED) 's/_LINUX/__linux__/g' $(@D)/usr/include/*/*.h +endef +GPU_AMD_BIN_MX51_POST_PATCH_HOOKS += GPU_AMD_BIN_MX51_FIXUP_HEADERS + +# eglplatform_1.4.h contains X11 compatible headers +ifeq ($(BR2_PACKAGE_GPU_AMD_BIN_MX51_OUTPUT_X11),y) +define GPU_AMD_BIN_MX51_FIXUP_EGL_HEADERS + mv $(STAGING_DIR)/usr/include/EGL/eglplatform_1.4.h $(STAGING_DIR)/usr/include/EGL/eglplatform.h +endef +endif + +define GPU_AMD_BIN_MX51_INSTALL_STAGING_CMDS + $(INSTALL) -d $(STAGING_DIR)/usr/lib/pkgconfig + $(INSTALL) -m 644 package/freescale-imx/gpu-amd-bin-mx51/*.pc $(STAGING_DIR)/usr/lib/pkgconfig/ + $(INSTALL) -m 755 $(@D)/usr/lib/lib* $(STAGING_DIR)/usr/lib/ + cp -r $(@D)/usr/include/* $(STAGING_DIR)/usr/include + $(GPU_AMD_BIN_MX51_FIXUP_EGL_HEADERS) +endef + +ifeq ($(BR2_PACKAGE_GPU_AMD_BIN_MX51_EXAMPLES),y) +define GPU_AMD_BIN_MX51_INSTALL_EXAMPLES + $(INSTALL) -d $(TARGET_DIR)/usr/share/examples/gpu_amd_samples + $(INSTALL) -m 755 $(@D)/usr/bin/* $(TARGET_DIR)/usr/share/examples/gpu_amd_samples +endef +endif + +define GPU_AMD_BIN_MX51_INSTALL_TARGET_CMDS + $(INSTALL) -m 755 $(@D)/usr/lib/lib*so* $(TARGET_DIR)/usr/lib/ + $(GPU_AMD_BIN_MX51_INSTALL_EXAMPLES) +endef + +define GPU_AMD_BIN_MX51_DEVICES + /dev/gsl_kmod c 640 0 0 249 0 1 4 +endef + +$(eval $(generic-package)) diff --git a/package/freescale-imx/gpu-amd-bin-mx51/vg.pc b/package/freescale-imx/gpu-amd-bin-mx51/vg.pc new file mode 100644 index 00000000..8fe956e1 --- /dev/null +++ b/package/freescale-imx/gpu-amd-bin-mx51/vg.pc @@ -0,0 +1,10 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: vg +Description: Freescale amd-gpu-bin-mx51 implementation of OpenVG +Version: 1.1 +Libs: -L${libdir} -lOpenVG +Cflags: -I${includedir}/ diff --git a/package/freescale-imx/imx-alsa-plugins/Config.in b/package/freescale-imx/imx-alsa-plugins/Config.in new file mode 100644 index 00000000..ec9b5b19 --- /dev/null +++ b/package/freescale-imx/imx-alsa-plugins/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_IMX_ALSA_PLUGINS + bool "imx-alsa-plugins" + depends on BR2_arm # Only relevant for i.MX + depends on BR2_LINUX_KERNEL + depends on BR2_TOOLCHAIN_HAS_THREADS # alsa-lib + select BR2_PACKAGE_ALSA_LIB + help + ALSA plugins specific for the Freescale i.MX platform. It + requires a kernel that includes the i.MX specific headers + to be built. + + The following plugins are provided so far: + * Rate Converter Plugin Using Freescale ASRC Hardware + Resampler (i.MX53 and most i.MX6) + +comment "imx-alsa-libs needs an imx-specific Linux kernel to be built" + depends on BR2_arm + depends on !BR2_LINUX_KERNEL + +comment "imx-alsa-libs needs a toolchain w/ threads" + depends on BR2_arm + depends on BR2_LINUX_KERNEL && !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/freescale-imx/imx-alsa-plugins/imx-alsa-plugins.hash b/package/freescale-imx/imx-alsa-plugins/imx-alsa-plugins.hash new file mode 100644 index 00000000..bb7beede --- /dev/null +++ b/package/freescale-imx/imx-alsa-plugins/imx-alsa-plugins.hash @@ -0,0 +1,3 @@ +# Locally calculated: +sha256 a9a5ef408a7329c2c5fa2a084ae7824afbfbebed68612bd72509488ccb0b94b3 imx-alsa-plugins-rel_imx_4.9.x_1.0.0_ga-br1.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING.GPL diff --git a/package/freescale-imx/imx-alsa-plugins/imx-alsa-plugins.mk b/package/freescale-imx/imx-alsa-plugins/imx-alsa-plugins.mk new file mode 100644 index 00000000..9c81ff0d --- /dev/null +++ b/package/freescale-imx/imx-alsa-plugins/imx-alsa-plugins.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# imx-alsa-plugins +# +################################################################################ + +IMX_ALSA_PLUGINS_VERSION = rel_imx_4.9.x_1.0.0_ga +IMX_ALSA_PLUGINS_SITE = https://source.codeaurora.org/external/imx/imx-alsa-plugins +IMX_ALSA_PLUGINS_SITE_METHOD = git +IMX_ALSA_PLUGINS_LICENSE = GPL-2.0+ +IMX_ALSA_PLUGINS_LICENSE_FILES = COPYING.GPL +IMX_ALSA_PLUGINS_DEPENDENCIES = host-pkgconf alsa-lib + +# git, no configure +IMX_ALSA_PLUGINS_AUTORECONF = YES + +# needs access to imx-specific kernel headers +IMX_ALSA_PLUGINS_DEPENDENCIES += linux +IMX_ALSA_PLUGINS_CONF_ENV += CPPFLAGS="$(TARGET_CPPFLAGS) -idirafter $(LINUX_DIR)/include/uapi" + +$(eval $(autotools-package)) diff --git a/package/freescale-imx/imx-codec/Config.in b/package/freescale-imx/imx-codec/Config.in new file mode 100644 index 00000000..0ecb92bf --- /dev/null +++ b/package/freescale-imx/imx-codec/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_IMX_CODEC + bool "imx-codec" + depends on BR2_arm || BR2_aarch64 # Only relevant for i.MX + depends on BR2_TOOLCHAIN_USES_GLIBC # prebuilt binaries + help + Binary codec libraries for the NXP i.MX SoCs. + + This library is provided by NXP as-is and doesn't have + an upstream. + +comment "imx-codec needs a glibc toolchain" + depends on BR2_arm || BR2_aarch64 + depends on !BR2_TOOLCHAIN_USES_GLIBC diff --git a/package/freescale-imx/imx-codec/imx-codec.hash b/package/freescale-imx/imx-codec/imx-codec.hash new file mode 100644 index 00000000..8dab5a5c --- /dev/null +++ b/package/freescale-imx/imx-codec/imx-codec.hash @@ -0,0 +1,4 @@ +# locally computed +sha256 6bb54f91c3ca18567e14d95d3858022dc9be00dc86e9edfdb544d1240a3b2b04 imx-codec-4.3.5.bin +sha256 78696664f7afe7f2b081c99af60082d6403fab935b1b10056ed41aec123ff7fa COPYING +sha256 fc93f26e4197b9240c327ce26ae6e02123f022423d4704c7b0448a37372cf2a2 EULA diff --git a/package/freescale-imx/imx-codec/imx-codec.mk b/package/freescale-imx/imx-codec/imx-codec.mk new file mode 100644 index 00000000..1ec701d2 --- /dev/null +++ b/package/freescale-imx/imx-codec/imx-codec.mk @@ -0,0 +1,44 @@ +################################################################################ +# +# imx-codec +# +################################################################################ + +IMX_CODEC_VERSION = 4.3.5 +IMX_CODEC_SITE = $(FREESCALE_IMX_SITE) +IMX_CODEC_SOURCE = imx-codec-$(IMX_CODEC_VERSION).bin +IMX_CODEC_INSTALL_STAGING = YES + +IMX_CODEC_LICENSE = NXP Semiconductor Software License Agreement, BSD-3-Clause (flac, ogg headers) +IMX_CODEC_LICENSE_FILES = EULA COPYING +IMX_CODEC_REDISTRIBUTE = NO + +ifeq ($(BR2_aarch64),y) +IMX_CODEC_CONF_OPTS += --enable-armv8 +endif + +ifeq ($(BR2_ARM_EABIHF),y) +IMX_CODEC_CONF_OPTS += --enable-fhw +endif + +ifeq ($(BR2_PACKAGE_IMX_VPU),y) +IMX_CODEC_CONF_OPTS += --enable-vpu +endif + +define IMX_CODEC_EXTRACT_CMDS + $(call FREESCALE_IMX_EXTRACT_HELPER,$(IMX_CODEC_DL_DIR)/$(IMX_CODEC_SOURCE)) +endef + +# FIXME The Makefile installs both the arm9 and arm11 versions of the +# libraries, but we only need one of them. + +# Upstream installs libraries into usr/lib/imx-mm, but the dynamic +# loader only looks in usr/lib, so move the libraries there +define IMX_CODEC_FIXUP_TARGET_PATH + find $(TARGET_DIR)/usr/lib/imx-mm -not -type d \ + -exec mv {} $(TARGET_DIR)/usr/lib \; + rm -rf $(TARGET_DIR)/usr/lib/imx-mm +endef +IMX_CODEC_POST_INSTALL_TARGET_HOOKS += IMX_CODEC_FIXUP_TARGET_PATH + +$(eval $(autotools-package)) diff --git a/package/freescale-imx/imx-gpu-g2d/Config.in b/package/freescale-imx/imx-gpu-g2d/Config.in new file mode 100644 index 00000000..aeca087f --- /dev/null +++ b/package/freescale-imx/imx-gpu-g2d/Config.in @@ -0,0 +1,29 @@ +comment "imx-gpu-g2d needs a glibc toolchain with armhf enabled" + depends on BR2_arm + depends on !BR2_TOOLCHAIN_USES_GLIBC || !BR2_ARM_EABIHF + +comment "imx-gpu-g2d needs a glibc toolchain" + depends on BR2_aarch64 + depends on !BR2_TOOLCHAIN_USES_GLIBC + +config BR2_PACKAGE_IMX_GPU_G2D + bool "imx-gpu-g2d" + # Pre-built binaries only available for ARM EABIhf + depends on (BR2_arm && BR2_ARM_EABIHF) || BR2_aarch64 + # Library binaries are linked against libc.so.6 + depends on BR2_TOOLCHAIN_USES_GLIBC + select BR2_PACKAGE_IMX_GPU_VIV + help + Userspace 2D libraries for Vivante GPU on i.MX platforms. + + This library is provided by NXP as-is and doesn't have an + upstream. + +if BR2_PACKAGE_IMX_GPU_G2D + +config BR2_PACKAGE_IMX_GPU_G2D_EXAMPLES + bool "install examples" + help + Copy the Vivante G2D examples to the target. + +endif diff --git a/package/freescale-imx/imx-gpu-g2d/imx-gpu-g2d.hash b/package/freescale-imx/imx-gpu-g2d/imx-gpu-g2d.hash new file mode 100644 index 00000000..8bfd302b --- /dev/null +++ b/package/freescale-imx/imx-gpu-g2d/imx-gpu-g2d.hash @@ -0,0 +1,5 @@ +# Locally calculated +sha256 8d3b024151d4bdcc4f68cdbba9c4e5d126d55c9258de5821c43b393ae3f840b4 imx-gpu-g2d-6.4.3.p1.0-arm.bin +sha256 47a39b171d83bced378b1b4f408be6304850fe2f25bf4577dd1ea78e22473f3d imx-gpu-g2d-6.4.3.p1.0-aarch64.bin +sha256 9c16421e7c702f56756650b8ac954d34556327e598a8666e6e8f4eb3a1aa95f1 COPYING +sha256 72edc2072c86d93aa1993d15d4d19d96270af3749b0108995ad50c81d1461f52 EULA diff --git a/package/freescale-imx/imx-gpu-g2d/imx-gpu-g2d.mk b/package/freescale-imx/imx-gpu-g2d/imx-gpu-g2d.mk new file mode 100644 index 00000000..3e6c3fc1 --- /dev/null +++ b/package/freescale-imx/imx-gpu-g2d/imx-gpu-g2d.mk @@ -0,0 +1,41 @@ +################################################################################ +# +# imx-gpu-g2d +# +################################################################################ + +ifeq ($(BR2_aarch64),y) +IMX_GPU_G2D_VERSION = 6.4.3.p1.0-aarch64 +else +IMX_GPU_G2D_VERSION = 6.4.3.p1.0-arm +endif +IMX_GPU_G2D_SITE = $(FREESCALE_IMX_SITE) +IMX_GPU_G2D_SOURCE = imx-gpu-g2d-$(IMX_GPU_G2D_VERSION).bin +IMX_GPU_G2D_DEPENDENCIES = imx-gpu-viv +IMX_GPU_G2D_INSTALL_STAGING = YES + +IMX_GPU_G2D_LICENSE = NXP Semiconductor Software License Agreement +IMX_GPU_G2D_LICENSE_FILES = EULA COPYING +IMX_GPU_G2D_REDISTRIBUTE = NO + +define IMX_GPU_G2D_EXTRACT_CMDS + $(call FREESCALE_IMX_EXTRACT_HELPER,$(IMX_GPU_G2D_DL_DIR)/$(IMX_GPU_G2D_SOURCE)) +endef + +define IMX_GPU_G2D_INSTALL_STAGING_CMDS + cp -a $(@D)/g2d/usr/* $(STAGING_DIR)/usr +endef + +ifeq ($(BR2_PACKAGE_IMX_GPU_G2D_EXAMPLES),y) +define IMX_GPU_G2D_INSTALL_EXAMPLES + mkdir -p $(TARGET_DIR)/usr/share/examples/ + cp -a $(@D)/gpu-demos/opt/* $(TARGET_DIR)/usr/share/examples/ +endef +endif + +define IMX_GPU_G2D_INSTALL_TARGET_CMDS + $(IMX_GPU_G2D_INSTALL_EXAMPLES) + cp -a $(@D)/g2d/usr/lib $(TARGET_DIR)/usr +endef + +$(eval $(generic-package)) diff --git a/package/freescale-imx/imx-gpu-viv/Config.in b/package/freescale-imx/imx-gpu-viv/Config.in new file mode 100644 index 00000000..232e70a8 --- /dev/null +++ b/package/freescale-imx/imx-gpu-viv/Config.in @@ -0,0 +1,102 @@ +comment "imx-gpu-viv needs a glibc toolchain with armhf enabled" + depends on BR2_arm + depends on !BR2_TOOLCHAIN_USES_GLIBC || !BR2_ARM_EABIHF + +comment "imx-gpu-viv needs a glibc toolchain" + depends on BR2_aarch64 + depends on !BR2_TOOLCHAIN_USES_GLIBC + +config BR2_PACKAGE_IMX_GPU_VIV + bool "imx-gpu-viv" + # Pre-built binaries only available for ARM EABIhf + depends on (BR2_arm && BR2_ARM_EABIHF) || BR2_aarch64 + # Library binaries are linked against libc.so.6 + depends on BR2_TOOLCHAIN_USES_GLIBC + select BR2_PACKAGE_HAS_LIBEGL + select BR2_PACKAGE_HAS_LIBGLES + select BR2_PACKAGE_HAS_LIBOPENCL + select BR2_PACKAGE_HAS_LIBOPENVG + help + Userspace libraries for Vivante GPU on i.MX platforms + + It contains libraries and headers for GLES, OpenCL, and + OpenVG. It also contains a DRI plugin for X11. It also + contains a plugin for DirectFB-1.4.0, but that doesn't work + together with buildroot's DirectFB version. + + This library is provided by Freescale as-is and doesn't have + an upstream. + +if BR2_PACKAGE_IMX_GPU_VIV + +choice + prompt "Output option" + help + There are two versions of this library: one for + direct framebuffer access, one for X11 rendering. + Choose here which version to install. + +config BR2_PACKAGE_IMX_GPU_VIV_OUTPUT_X11 + bool "X11" + depends on BR2_PACKAGE_XORG7 + # The i.MX8 blob doesn't support X11 output + depends on !BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M + select BR2_PACKAGE_XLIB_LIBXDAMAGE + select BR2_PACKAGE_XLIB_LIBXEXT + select BR2_PACKAGE_XLIB_LIBXFIXES + +comment "X11 backend needs Xorg package" + depends on !BR2_PACKAGE_XORG7 + depends on !BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M + +config BR2_PACKAGE_IMX_GPU_VIV_OUTPUT_FB + bool "Framebuffer" + # The i.MX8 blob doesn't support FB output + depends on !BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M + +config BR2_PACKAGE_IMX_GPU_VIV_OUTPUT_WL + bool "Wayland" + # libdrm needed by gbm_viv.so + select BR2_PACKAGE_LIBDRM + select BR2_PACKAGE_WAYLAND + select BR2_PACKAGE_HAS_LIBEGL_WAYLAND + +endchoice + +config BR2_PACKAGE_IMX_GPU_VIV_OUTPUT + string + default "x11" if BR2_PACKAGE_IMX_GPU_VIV_OUTPUT_X11 + default "fb" if BR2_PACKAGE_IMX_GPU_VIV_OUTPUT_FB + default "wayland" if BR2_PACKAGE_IMX_GPU_VIV_OUTPUT_WL + +config BR2_PACKAGE_PROVIDES_LIBEGL + default "imx-gpu-viv" + +config BR2_PACKAGE_PROVIDES_LIBGLES + default "imx-gpu-viv" + +config BR2_PACKAGE_PROVIDES_LIBOPENCL + default "imx-gpu-viv" + +config BR2_PACKAGE_PROVIDES_LIBOPENVG + default "imx-gpu-viv" + +config BR2_PACKAGE_IMX_GPU_VIV_EXAMPLES + bool "install examples" + # example binaries are linked against libstdc++.so.6 + depends on BR2_INSTALL_LIBSTDCPP + help + Copy the Vivante examples to the target. + + Warning: examples take approximately 150 MB of disk space. + +comment "imx-gpu-viv-examples need a toolchain w/ C++ support" + depends on !BR2_INSTALL_LIBSTDCPP + +config BR2_PACKAGE_IMX_GPU_VIV_GMEM_INFO + bool "install gmem_info tool" + help + Copy the gmem_info tool to the target which provides + information about GPU memory consumption. + +endif diff --git a/package/freescale-imx/imx-gpu-viv/imx-gpu-viv.hash b/package/freescale-imx/imx-gpu-viv/imx-gpu-viv.hash new file mode 100644 index 00000000..9c181039 --- /dev/null +++ b/package/freescale-imx/imx-gpu-viv/imx-gpu-viv.hash @@ -0,0 +1,5 @@ +# Locally calculated +sha256 9960fadbc1ea919f8b1b5c1e2e38a52b7293b70c906518d7fff2ada4140c59ea imx-gpu-viv-6.4.3.p1.0-aarch32.bin +sha256 0505620c3851a980d2e08fee4b4fcd06eff92efac02d1646924bea86e4384ad4 imx-gpu-viv-6.4.3.p1.0-aarch64.bin +sha256 9c16421e7c702f56756650b8ac954d34556327e598a8666e6e8f4eb3a1aa95f1 COPYING +sha256 72edc2072c86d93aa1993d15d4d19d96270af3749b0108995ad50c81d1461f52 EULA diff --git a/package/freescale-imx/imx-gpu-viv/imx-gpu-viv.mk b/package/freescale-imx/imx-gpu-viv/imx-gpu-viv.mk new file mode 100644 index 00000000..6ae9aa7a --- /dev/null +++ b/package/freescale-imx/imx-gpu-viv/imx-gpu-viv.mk @@ -0,0 +1,100 @@ +################################################################################ +# +# imx-gpu-viv +# +################################################################################ + +ifeq ($(BR2_aarch64),y) +IMX_GPU_VIV_VERSION = 6.4.3.p1.0-aarch64 +else +IMX_GPU_VIV_VERSION = 6.4.3.p1.0-aarch32 +endif +IMX_GPU_VIV_SITE = $(FREESCALE_IMX_SITE) +IMX_GPU_VIV_SOURCE = imx-gpu-viv-$(IMX_GPU_VIV_VERSION).bin + +IMX_GPU_VIV_INSTALL_STAGING = YES + +IMX_GPU_VIV_LICENSE = NXP Semiconductor Software License Agreement +IMX_GPU_VIV_LICENSE_FILES = EULA COPYING +IMX_GPU_VIV_REDISTRIBUTE = NO + +IMX_GPU_VIV_PROVIDES = libegl libgles libopencl libopenvg +IMX_GPU_VIV_LIB_TARGET = $(call qstrip,$(BR2_PACKAGE_IMX_GPU_VIV_OUTPUT)) + +ifeq ($(IMX_GPU_VIV_LIB_TARGET),x11) +# The libGAL.so library provided by imx-gpu-viv uses X functions. Packages +# may want to link against libGAL.so (QT5 Base with OpenGL and X support +# does so). For this to work we need build dependencies to libXdamage, +# libXext and libXfixes so that X functions used in libGAL.so are referenced. +IMX_GPU_VIV_DEPENDENCIES += xlib_libXdamage xlib_libXext xlib_libXfixes +endif + +ifeq ($(IMX_GPU_VIV_LIB_TARGET),wayland) +IMX_GPU_VIV_DEPENDENCIES += libdrm wayland +endif + +define IMX_GPU_VIV_EXTRACT_CMDS + $(call FREESCALE_IMX_EXTRACT_HELPER,$(IMX_GPU_VIV_DL_DIR)/$(IMX_GPU_VIV_SOURCE)) +endef + +# Instead of building, we fix up the inconsistencies that exist +# in the upstream archive here. We also remove unused backend files. +# Make sure these commands are idempotent. +define IMX_GPU_VIV_BUILD_CMDS + cp -dpfr $(@D)/gpu-core/usr/lib/$(IMX_GPU_VIV_LIB_TARGET)/* $(@D)/gpu-core/usr/lib/ + for backend in fb x11 wayland; do \ + $(RM) -r $(@D)/gpu-core/usr/lib/$$backend ; \ + done +endef + +ifeq ($(IMX_GPU_VIV_LIB_TARGET),fb) +define IMX_GPU_VIV_FIXUP_PKGCONFIG + ln -sf egl_linuxfb.pc $(@D)/gpu-core/usr/lib/pkgconfig/egl.pc +endef +endif + +ifeq ($(IMX_GPU_VIV_LIB_TARGET),wayland) +define IMX_GPU_VIV_FIXUP_PKGCONFIG + ln -sf egl_wayland.pc $(@D)/gpu-core/usr/lib/pkgconfig/egl.pc +endef +endif + +ifeq ($(IMX_GPU_VIV_LIB_TARGET),x11) +define IMX_GPU_VIV_FIXUP_PKGCONFIG + for lib in egl gbm glesv1_cm glesv2 vg; do \ + ln -sf $${lib}_x11.pc $(@D)/gpu-core/usr/lib/pkgconfig/$${lib}.pc || exit 1; \ + done +endef +endif + +define IMX_GPU_VIV_INSTALL_STAGING_CMDS + cp -r $(@D)/gpu-core/usr/* $(STAGING_DIR)/usr + $(IMX_GPU_VIV_FIXUP_PKGCONFIG) + for lib in egl gbm glesv1_cm glesv2 vg; do \ + $(INSTALL) -m 0644 -D \ + $(@D)/gpu-core/usr/lib/pkgconfig/$${lib}.pc \ + $(STAGING_DIR)/usr/lib/pkgconfig/$${lib}.pc; \ + done +endef + +ifeq ($(BR2_PACKAGE_IMX_GPU_VIV_EXAMPLES),y) +define IMX_GPU_VIV_INSTALL_EXAMPLES + mkdir -p $(TARGET_DIR)/usr/share/examples/ + cp -r $(@D)/gpu-demos/opt/* $(TARGET_DIR)/usr/share/examples/ +endef +endif + +ifeq ($(BR2_PACKAGE_IMX_GPU_VIV_GMEM_INFO),y) +define IMX_GPU_VIV_INSTALL_GMEM_INFO + cp -dpfr $(@D)/gpu-tools/gmem-info/usr/bin/* $(TARGET_DIR)/usr/bin/ +endef +endif + +define IMX_GPU_VIV_INSTALL_TARGET_CMDS + $(IMX_GPU_VIV_INSTALL_EXAMPLES) + $(IMX_GPU_VIV_INSTALL_GMEM_INFO) + cp -a $(@D)/gpu-core/usr/lib $(TARGET_DIR)/usr + $(INSTALL) -D -m 0644 $(@D)/gpu-core/etc/Vivante.icd $(TARGET_DIR)/etc/OpenCL/vendors/Vivante.icd +endef + +$(eval $(generic-package)) diff --git a/package/freescale-imx/imx-kobs/0001-Fix-musl-build.patch b/package/freescale-imx/imx-kobs/0001-Fix-musl-build.patch new file mode 100644 index 00000000..ce123de9 --- /dev/null +++ b/package/freescale-imx/imx-kobs/0001-Fix-musl-build.patch @@ -0,0 +1,39 @@ +[PATCH] Fix musl build + +Signed-off-by: Gary Bisson +--- + src/mtd.c | 1 + + src/mtd.h | 5 +++++ + 2 files changed, 6 insertions(+) + +diff --git a/src/mtd.c b/src/mtd.c +index 1edc441..6d2264c 100644 +--- a/src/mtd.c ++++ b/src/mtd.c +@@ -31,6 +31,7 @@ + #include + #include + #include ++#include + #include + #include + +diff --git a/src/mtd.h b/src/mtd.h +index bd21add..debfc84 100644 +--- a/src/mtd.h ++++ b/src/mtd.h +@@ -31,6 +31,11 @@ + #include "BootControlBlocks.h" + #include "rom_nand_hamming_code_ecc.h" + ++// musl library doesn't define loff_t ++#if !defined(__GLIBC__) && !defined(__UCLIBC__) ++#define loff_t off_t ++#endif ++ + //------------------------------------------------------------------------------ + // Re-definitions of true and false, because the standard ones aren't good + // enough? +-- +2.5.1 + diff --git a/package/freescale-imx/imx-kobs/0002-Fix-build-for-recent-toolchains.patch b/package/freescale-imx/imx-kobs/0002-Fix-build-for-recent-toolchains.patch new file mode 100644 index 00000000..c5cfb802 --- /dev/null +++ b/package/freescale-imx/imx-kobs/0002-Fix-build-for-recent-toolchains.patch @@ -0,0 +1,26 @@ +[PATCH] Fix build for recent toolchains + +Starting with Linux 4.4 headers, mtd-user.h isn't including stdint.h +anymore which breaks the build. + +Signed-off-by: Gary Bisson +--- + src/BootControlBlocks.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/BootControlBlocks.h b/src/BootControlBlocks.h +index 192eb61..aacdb64 100644 +--- a/src/BootControlBlocks.h ++++ b/src/BootControlBlocks.h +@@ -20,6 +20,8 @@ + #ifndef BOOTCONTROLBLOCKS_H_ + #define BOOTCONTROLBLOCKS_H_ + ++#include ++ + #define NCB_FINGERPRINT1 0x504d5453 //!< 'STMP' + #define NCB_FINGERPRINT2 0x2042434e //!< 'NCB' - NAND Control Block + #define NCB_FINGERPRINT3 0x4e494252 //!< 'RBIN' - ROM Boot Image Block - N +-- +2.6.4 + diff --git a/package/freescale-imx/imx-kobs/Config.in b/package/freescale-imx/imx-kobs/Config.in new file mode 100644 index 00000000..61be9f26 --- /dev/null +++ b/package/freescale-imx/imx-kobs/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_IMX_KOBS + bool "imx-kobs" + depends on BR2_arm # Only relevant for i.MX + help + The imx-kobs tool is used for writing images to NAND on i.MX + platforms. + + This library is provided by Freescale as-is and doesn't have + an upstream. diff --git a/package/freescale-imx/imx-kobs/imx-kobs.hash b/package/freescale-imx/imx-kobs/imx-kobs.hash new file mode 100644 index 00000000..39f02ea0 --- /dev/null +++ b/package/freescale-imx/imx-kobs/imx-kobs.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 5855c8964f908ad30e5d4500180ee57c51af68186289ef1bdf8553ee60d3b1f5 imx-kobs-a0e9adce2fb7fcd57e794d7f9a5deba0f94f521b.tar.gz +sha256 204d8eff92f95aac4df6c8122bc1505f468f3a901e5a4cc08940e0ede1938994 COPYING diff --git a/package/freescale-imx/imx-kobs/imx-kobs.mk b/package/freescale-imx/imx-kobs/imx-kobs.mk new file mode 100644 index 00000000..d6a250cf --- /dev/null +++ b/package/freescale-imx/imx-kobs/imx-kobs.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# imx-kobs +# +################################################################################ + +IMX_KOBS_VERSION = a0e9adce2fb7fcd57e794d7f9a5deba0f94f521b +IMX_KOBS_SITE = $(call github,codeauroraforum,imx-kobs,$(IMX_KOBS_VERSION)) +IMX_KOBS_LICENSE = GPL-2.0+ +IMX_KOBS_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/freescale-imx/imx-lib/Config.in b/package/freescale-imx/imx-lib/Config.in new file mode 100644 index 00000000..746788e4 --- /dev/null +++ b/package/freescale-imx/imx-lib/Config.in @@ -0,0 +1,15 @@ +comment "imx-lib needs an imx-specific Linux kernel to be built" + depends on BR2_arm && !BR2_LINUX_KERNEL + +config BR2_PACKAGE_IMX_LIB + bool "imx-lib" + depends on BR2_LINUX_KERNEL + depends on BR2_arm # Only relevant for i.MX + help + Library of userspace helpers specific for the Freescale i.MX + platform. It wraps the kernel interfaces for some i.MX + platform specific drivers. It requires a kernel that + includes the i.MX specific headers to be built. + + This library is provided by Freescale as-is and doesn't have + an upstream. diff --git a/package/freescale-imx/imx-lib/imx-lib.hash b/package/freescale-imx/imx-lib/imx-lib.hash new file mode 100644 index 00000000..f7d907b9 --- /dev/null +++ b/package/freescale-imx/imx-lib/imx-lib.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 cad7823568cbd367ed8525e01c8c11a2393fc2dc481425273cb7919385367c61 imx-lib-3f777974c0c146817e2ff5cb0340ca66a1f99e57-br1.tar.gz +sha256 5df07007198989c622f5d41de8d703e7bef3d0e79d62e24332ee739a452af62a COPYING-LGPL-2.1 diff --git a/package/freescale-imx/imx-lib/imx-lib.mk b/package/freescale-imx/imx-lib/imx-lib.mk new file mode 100644 index 00000000..721c20e5 --- /dev/null +++ b/package/freescale-imx/imx-lib/imx-lib.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# imx-lib +# +################################################################################ + +IMX_LIB_VERSION = 3f777974c0c146817e2ff5cb0340ca66a1f99e57 +IMX_LIB_SITE = https://source.codeaurora.org/external/imx/imx-lib +IMX_LIB_SITE_METHOD = git +IMX_LIB_LICENSE = LGPL-2.1+ +IMX_LIB_LICENSE_FILES = COPYING-LGPL-2.1 + +IMX_LIB_INSTALL_STAGING = YES + +# imx-lib needs access to imx-specific kernel headers +IMX_LIB_DEPENDENCIES += linux +IMX_LIB_INCLUDE = \ + -idirafter $(LINUX_DIR)/include/uapi + +IMX_LIB_MAKE_ENV = \ + $(TARGET_MAKE_ENV) \ + $(TARGET_CONFIGURE_OPTS) \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + PLATFORM=$(BR2_PACKAGE_FREESCALE_IMX_PLATFORM) \ + INCLUDE="$(IMX_LIB_INCLUDE)" + +define IMX_LIB_BUILD_CMDS + $(IMX_LIB_MAKE_ENV) $(MAKE1) -C $(@D) +endef + +define IMX_LIB_INSTALL_STAGING_CMDS + $(IMX_LIB_MAKE_ENV) $(MAKE1) -C $(@D) DEST_DIR=$(STAGING_DIR) install +endef + +define IMX_LIB_INSTALL_TARGET_CMDS + $(IMX_LIB_MAKE_ENV) $(MAKE1) -C $(@D) DEST_DIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/freescale-imx/imx-m4fwloader/Config.in b/package/freescale-imx/imx-m4fwloader/Config.in new file mode 100644 index 00000000..937f82f9 --- /dev/null +++ b/package/freescale-imx/imx-m4fwloader/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_IMX_M4FWLOADER + bool "imx-m4fwloader" + depends on BR2_arm # Only relevant for i.MX + help + This package provides a tool to load a firmware to the + Cortex-M4 core available in some i.MX processors. + + https://github.com/codeauroraforum/imx-m4fwloader diff --git a/package/freescale-imx/imx-m4fwloader/imx-m4fwloader.hash b/package/freescale-imx/imx-m4fwloader/imx-m4fwloader.hash new file mode 100644 index 00000000..2bf3f15d --- /dev/null +++ b/package/freescale-imx/imx-m4fwloader/imx-m4fwloader.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 fb6334900972fe389e808845417dd9045fb0f7eb47952fc22a00f4cdaf94af1a imx-m4fwloader-8cf4d17a09ba23250d43381b49ba00d92406fad9.tar.gz +sha256 c03cea027b4b40e4402fabd08557736727ec3d5bc54ad64ab6472de432198cad LICENSE diff --git a/package/freescale-imx/imx-m4fwloader/imx-m4fwloader.mk b/package/freescale-imx/imx-m4fwloader/imx-m4fwloader.mk new file mode 100644 index 00000000..cc484933 --- /dev/null +++ b/package/freescale-imx/imx-m4fwloader/imx-m4fwloader.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# imx-m4fwloader +# +################################################################################ + +IMX_M4FWLOADER_VERSION = 8cf4d17a09ba23250d43381b49ba00d92406fad9 +IMX_M4FWLOADER_SITE = $(call github,codeauroraforum,imx-m4fwloader,$(IMX_M4FWLOADER_VERSION)) +IMX_M4FWLOADER_LICENSE = GPL-2.0+ +IMX_M4FWLOADER_LICENSE_FILES = LICENSE + +define IMX_M4FWLOADER_BUILD_CMDS + $(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_LDFLAGS) -o $(@D)/imx-m4fwloader \ + $(@D)/m4fwloader.c +endef + +define IMX_M4FWLOADER_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 755 $(@D)/imx-m4fwloader \ + $(TARGET_DIR)/usr/sbin/imx-m4fwloader +endef + +$(eval $(generic-package)) diff --git a/package/freescale-imx/imx-parser/Config.in b/package/freescale-imx/imx-parser/Config.in new file mode 100644 index 00000000..028b2bf6 --- /dev/null +++ b/package/freescale-imx/imx-parser/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_IMX_PARSER + bool "imx-parser" + depends on BR2_arm || BR2_aarch64 # Only relevant for i.MX + help + Binary parser libraries for the NXP i.MX SoCs. + + This library is provided by NXP as-is and doesn't have + an upstream. diff --git a/package/freescale-imx/imx-parser/imx-parser.hash b/package/freescale-imx/imx-parser/imx-parser.hash new file mode 100644 index 00000000..017d2c2f --- /dev/null +++ b/package/freescale-imx/imx-parser/imx-parser.hash @@ -0,0 +1,4 @@ +# locally computed +sha256 9cd8c49a0bb1050afcfbcc7a677a348443fda4ecacb621cc6e38897619e27c67 imx-parser-4.3.5.bin +sha256 78696664f7afe7f2b081c99af60082d6403fab935b1b10056ed41aec123ff7fa COPYING +sha256 fc93f26e4197b9240c327ce26ae6e02123f022423d4704c7b0448a37372cf2a2 EULA diff --git a/package/freescale-imx/imx-parser/imx-parser.mk b/package/freescale-imx/imx-parser/imx-parser.mk new file mode 100644 index 00000000..fc4376f0 --- /dev/null +++ b/package/freescale-imx/imx-parser/imx-parser.mk @@ -0,0 +1,42 @@ +################################################################################ +# +# imx-parser +# +################################################################################ + +IMX_PARSER_VERSION = 4.3.5 +IMX_PARSER_SITE = $(FREESCALE_IMX_SITE) +IMX_PARSER_SOURCE = imx-parser-$(IMX_PARSER_VERSION).bin +IMX_PARSER_INSTALL_STAGING = YES + +IMX_PARSER_LICENSE = NXP Semiconductor Software License Agreement +IMX_PARSER_LICENSE_FILES = EULA COPYING +IMX_PARSER_REDISTRIBUTE = NO + +ifeq ($(BR2_aarch64),y) +IMX_PARSER_CONF_OPTS += --enable-armv8 +endif + +ifeq ($(BR2_ARM_EABIHF),y) +IMX_PARSER_CONF_OPTS += --enable-fhw +else +IMX_PARSER_CONF_OPTS += --enable-fsw +endif + +define IMX_PARSER_EXTRACT_CMDS + $(call FREESCALE_IMX_EXTRACT_HELPER,$(IMX_PARSER_DL_DIR)/$(IMX_PARSER_SOURCE)) +endef + +# The Makefile installs several versions of the libraries, but we only +# need one of them, depending on the platform. + +# Upstream installs libraries into usr/lib/imx-mm, but the dynamic +# loader only looks in usr/lib, so move the libraries there +define IMX_PARSER_FIXUP_TARGET_PATH + find $(TARGET_DIR)/usr/lib/imx-mm -not -type d \ + -exec mv {} $(TARGET_DIR)/usr/lib \; + rm -rf $(TARGET_DIR)/usr/lib/imx-mm +endef +IMX_PARSER_POST_INSTALL_TARGET_HOOKS += IMX_PARSER_FIXUP_TARGET_PATH + +$(eval $(autotools-package)) diff --git a/package/freescale-imx/imx-sc-firmware/Config.in b/package/freescale-imx/imx-sc-firmware/Config.in new file mode 100644 index 00000000..4932e62d --- /dev/null +++ b/package/freescale-imx/imx-sc-firmware/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_IMX_SC_FIRMWARE + bool "imx-sc-firmware" + depends on BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8 || \ + BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8X + help + System Control Unit Firmware blobs for the Freescale i.MX8 + SoCs. + + This library is provided by Freescale as-is and doesn't have + an upstream. diff --git a/package/freescale-imx/imx-sc-firmware/imx-sc-firmware.hash b/package/freescale-imx/imx-sc-firmware/imx-sc-firmware.hash new file mode 100644 index 00000000..661a77de --- /dev/null +++ b/package/freescale-imx/imx-sc-firmware/imx-sc-firmware.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 db4c414d405aea6f013946d109db198798f40f71bf0810b9b50c027ca252b4b7 imx-sc-firmware-1.7.0.bin +sha256 72edc2072c86d93aa1993d15d4d19d96270af3749b0108995ad50c81d1461f52 EULA +sha256 9c16421e7c702f56756650b8ac954d34556327e598a8666e6e8f4eb3a1aa95f1 COPYING diff --git a/package/freescale-imx/imx-sc-firmware/imx-sc-firmware.mk b/package/freescale-imx/imx-sc-firmware/imx-sc-firmware.mk new file mode 100644 index 00000000..b05ca3c7 --- /dev/null +++ b/package/freescale-imx/imx-sc-firmware/imx-sc-firmware.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# imx-sc-firmware +# +################################################################################ + +IMX_SC_FIRMWARE_VERSION = 1.7.0 +IMX_SC_FIRMWARE_SITE = $(FREESCALE_IMX_SITE) +IMX_SC_FIRMWARE_SOURCE = imx-sc-firmware-$(IMX_SC_FIRMWARE_VERSION).bin + +IMX_SC_FIRMWARE_LICENSE = NXP Semiconductor Software License Agreement +IMX_SC_FIRMWARE_LICENSE_FILES = EULA COPYING +IMX_SC_FIRMWARE_REDISTRIBUTE = NO + +define IMX_SC_FIRMWARE_EXTRACT_CMDS + $(call FREESCALE_IMX_EXTRACT_HELPER,$(IMX_SC_FIRMWARE_DL_DIR)/$(IMX_SC_FIRMWARE_SOURCE)) +endef + +IMX_SC_FIRMWARE_INSTALL_IMAGES = YES + +# SCFW firmware is needed when generating imx8-boot-sd.bin which is +# done in post-image script. +ifeq ($(BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8X),y) +define IMX_SC_FIRMWARE_INSTALL_IMAGES_CMDS + cp $(@D)/mx8qx-mek-scfw-tcm.bin $(BINARIES_DIR)/mx8qx-mek-scfw-tcm.bin + cp $(@D)/mx8qx-val-scfw-tcm.bin $(BINARIES_DIR)/mx8qx-val-scfw-tcm.bin +endef +else ifeq ($(BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8),y) +define IMX_SC_FIRMWARE_INSTALL_IMAGES_CMDS + cp $(@D)/mx8qm-*-scfw-tcm.bin $(BINARIES_DIR)/ +endef +endif + +$(eval $(generic-package)) diff --git a/package/freescale-imx/imx-seco/Config.in b/package/freescale-imx/imx-seco/Config.in new file mode 100644 index 00000000..1877664a --- /dev/null +++ b/package/freescale-imx/imx-seco/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_IMX_SECO + bool "imx-seco" + depends on BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8 || \ + BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8X + help + Firmware file for the i.MX8 and i.MX8X Security Controller. + + This library is provided by Freescale as-is and doesn't have + an upstream. diff --git a/package/freescale-imx/imx-seco/imx-seco.hash b/package/freescale-imx/imx-seco/imx-seco.hash new file mode 100644 index 00000000..2e111c64 --- /dev/null +++ b/package/freescale-imx/imx-seco/imx-seco.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 2ed8177e48c8e33f742b3a642805be56a5ef56df78b1b29e10518552154da2bc imx-seco-3.7.4.bin +sha256 72edc2072c86d93aa1993d15d4d19d96270af3749b0108995ad50c81d1461f52 EULA +sha256 9c16421e7c702f56756650b8ac954d34556327e598a8666e6e8f4eb3a1aa95f1 COPYING diff --git a/package/freescale-imx/imx-seco/imx-seco.mk b/package/freescale-imx/imx-seco/imx-seco.mk new file mode 100644 index 00000000..f7aaca7e --- /dev/null +++ b/package/freescale-imx/imx-seco/imx-seco.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# imx-seco +# +################################################################################ + +IMX_SECO_VERSION = 3.7.4 +IMX_SECO_SITE = $(FREESCALE_IMX_SITE) +IMX_SECO_SOURCE = imx-seco-$(IMX_SECO_VERSION).bin + +IMX_SECO_LICENSE = NXP Semiconductor Software License Agreement +IMX_SECO_LICENSE_FILES = EULA COPYING +IMX_SECO_REDISTRIBUTE = NO + +define IMX_SECO_EXTRACT_CMDS + $(call FREESCALE_IMX_EXTRACT_HELPER,$(IMX_SECO_DL_DIR)/$(IMX_SECO_SOURCE)) +endef + +IMX_SECO_INSTALL_IMAGES = YES + +# SECO firmware is needed when generating imx8-boot-sd.bin which +# is done in post-image script. +ifeq ($(BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8X),y) +define IMX_SECO_INSTALL_IMAGES_CMDS + cp $(@D)/firmware/seco/mx8qxb0-ahab-container.img \ + $(BINARIES_DIR)/ahab-container.img +endef +else ifeq ($(BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8),y) +define IMX_SECO_INSTALL_IMAGES_CMDS + cp $(@D)/firmware/seco/mx8qmb0-ahab-container.img \ + $(BINARIES_DIR)/ahab-container.img +endef +endif + +$(eval $(generic-package)) diff --git a/package/freescale-imx/imx-uuc/Config.in b/package/freescale-imx/imx-uuc/Config.in new file mode 100644 index 00000000..0e257bde --- /dev/null +++ b/package/freescale-imx/imx-uuc/Config.in @@ -0,0 +1,23 @@ +config BR2_PACKAGE_IMX_UUC + bool "imx-uuc" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_arm # Only relevant for i.MX + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18 # usb_functionfs_descs_head_v2 + select BR2_PACKAGE_HOST_DOSFSTOOLS + help + This package provides the Universal Adapter user-space + utility that is used to receive commands from the + Manufacturing Tool using the Freescale UTP Protocol. + + It requires a Freescale/NXP kernel whose configuration + contains the CONFIG_FSL_UTP option. + + This package is provided by Freescale/NXP as-is and doesn't + have an upstream. + +comment "imx-uuc needs a toolchain w/ threads, headers >= 3.18" + depends on BR2_arm + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18 diff --git a/package/freescale-imx/imx-uuc/S80imx-uuc b/package/freescale-imx/imx-uuc/S80imx-uuc new file mode 100644 index 00000000..9a92c983 --- /dev/null +++ b/package/freescale-imx/imx-uuc/S80imx-uuc @@ -0,0 +1,27 @@ +#!/bin/sh + +NAME=uuc +DAEMON=/usr/bin/$NAME + +case "$1" in + start) + printf "Starting $NAME: " + start-stop-daemon -S -q -b -m -p /var/run/${NAME}.pid -x $DAEMON + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + stop) + printf "Stopping $NAME: " + start-stop-daemon -K -q -p /var/run/${NAME}.pid + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + restart|reload) + $0 stop + sleep 1 + $0 start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/freescale-imx/imx-uuc/imx-uuc.hash b/package/freescale-imx/imx-uuc/imx-uuc.hash new file mode 100644 index 00000000..57a50985 --- /dev/null +++ b/package/freescale-imx/imx-uuc/imx-uuc.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 2784e0826074335893fdad20e9a4faaedced2f206565c383043fbd169e9273a4 imx-uuc-fc48b497fe961d601b4bcced807f562090854ec9.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/freescale-imx/imx-uuc/imx-uuc.mk b/package/freescale-imx/imx-uuc/imx-uuc.mk new file mode 100644 index 00000000..2ed910cb --- /dev/null +++ b/package/freescale-imx/imx-uuc/imx-uuc.mk @@ -0,0 +1,38 @@ +################################################################################ +# +# imx-uuc +# +################################################################################ + +IMX_UUC_VERSION = fc48b497fe961d601b4bcced807f562090854ec9 +IMX_UUC_SITE = $(call github,NXPmicro,imx-uuc,$(IMX_UUC_VERSION)) +IMX_UUC_LICENSE = GPL-2.0+ +IMX_UUC_LICENSE_FILES = COPYING + +# mkfs.vfat is needed to create a FAT partition used by g_mass_storage +# so Windows do not offer to format the device when connected to the PC. +IMX_UUC_DEPENDENCIES = host-dosfstools + +define IMX_UUC_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) +endef + +define IMX_UUC_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 755 $(@D)/uuc $(TARGET_DIR)/usr/bin/uuc + $(INSTALL) -D -m 755 $(@D)/sdimage $(TARGET_DIR)/usr/bin/sdimage + $(INSTALL) -D -m 755 $(@D)/ufb $(TARGET_DIR)/usr/bin/ufb + dd if=/dev/zero of=$(TARGET_DIR)/fat bs=1M count=1 + $(HOST_DIR)/sbin/mkfs.vfat $(TARGET_DIR)/fat +endef + +define IMX_UUC_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/freescale-imx/imx-uuc/S80imx-uuc \ + $(TARGET_DIR)/etc/init.d/S80imx-uuc +endef + +define IMX_UUC_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0644 package/freescale-imx/imx-uuc/imx-uuc.service \ + $(TARGET_DIR)/usr/lib/systemd/system/imx-uuc.service +endef + +$(eval $(generic-package)) diff --git a/package/freescale-imx/imx-uuc/imx-uuc.service b/package/freescale-imx/imx-uuc/imx-uuc.service new file mode 100644 index 00000000..fae7fc64 --- /dev/null +++ b/package/freescale-imx/imx-uuc/imx-uuc.service @@ -0,0 +1,11 @@ +[Unit] +Description=i.MX Universal UTP Communication Service +After=systemd-modules-load.service + +[Service] +Type=simple +ExecStart=/usr/bin/uuc + +[Install] +WantedBy=multi-user.target + diff --git a/package/freescale-imx/imx-vpu-hantro/0001-Fix-ion.h-header-inclusion-to-be-standard.patch b/package/freescale-imx/imx-vpu-hantro/0001-Fix-ion.h-header-inclusion-to-be-standard.patch new file mode 100644 index 00000000..f5a67cd5 --- /dev/null +++ b/package/freescale-imx/imx-vpu-hantro/0001-Fix-ion.h-header-inclusion-to-be-standard.patch @@ -0,0 +1,76 @@ +From e776e7360f80da9ac03f81a5df27d8b7fabc7ac7 Mon Sep 17 00:00:00 2001 +From: Gary Bisson +Date: Thu, 26 Mar 2020 16:00:33 +0100 +Subject: [PATCH] Fix ion.h header inclusion to be standard + +NXP "solution" was to manually copy the header to include/linux. +Let's point the Makefile to the proper (mainline) location instead: +https://elixir.bootlin.com/linux/v4.17/source/drivers/staging/android/uapi/ion.h + +Signed-off-by: Gary Bisson +--- + Makefile_G1G2 | 4 ++-- + Makefile_H1 | 4 ++-- + decoder_sw/software/linux/dwl/dwl_linux.c | 2 +- + h1_encoder/software/linux_reference/ewl/ewl_x280_common.c | 2 +- + 4 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/Makefile_G1G2 b/Makefile_G1G2 +index 8280cce..4c9fc34 100755 +--- a/Makefile_G1G2 ++++ b/Makefile_G1G2 +@@ -10,8 +10,8 @@ INCLUDE_HEADERS = -I./decoder_sw -I$(SOURCE_ROOT)/source/inc -I$(SOURCE_ROOT)/so + + INCLUDE_HEADERS += -I$(SOURCE_ROOT)/linux/memalloc + #INCLUDE_HEADERS += -I$(SOURCE_ROOT)/linux/ldriver +-#INCLUDE_HEADERS += -I$(LINUX_KERNEL_ROOT)/include/uapi -I$(LINUX_KERNEL_ROOT)/include +-INCLUDE_HEADERS += -I$(SDKTARGETSYSROOT)/usr/include/imx ++INCLUDE_HEADERS += -I$(LINUX_KERNEL_ROOT)/include/uapi -I$(LINUX_KERNEL_ROOT)/include ++INCLUDE_HEADERS += -I$(LINUX_KERNEL_ROOT)/drivers/staging/android/uapi + + CFLAGS += -DDEC_MODULE_PATH=\"/dev/mxc_hantro\" -DUSE_FAKE_RFC_TABLE -DFIFO_DATATYPE=void* -DNDEBUG -DDOWN_SCALER \ + -DUSE_EXTERNAL_BUFFER -DUSE_FAST_EC -DUSE_VP9_EC -DGET_FREE_BUFFER_NON_BLOCK \ +diff --git a/Makefile_H1 b/Makefile_H1 +index 9ab62e1..8d366e3 100755 +--- a/Makefile_H1 ++++ b/Makefile_H1 +@@ -17,8 +17,8 @@ ENV += -DMEMALLOC_MODULE_PATH=\\\"/dev/ion\\\" + #ENV += -DSDRAM_LM_BASE=0x00000000 + ENV += -DEWL_NO_HW_TIMEOUT + ENV += -DUSE_ION +-#ENV += -I$(LINUX_KERNEL_ROOT)/include/uapi -I$(LINUX_KERNEL_ROOT)/include +-ENV += -I$(SDKTARGETSYSROOT)/usr/include/imx ++ENV += -I$(LINUX_KERNEL_ROOT)/include/uapi -I$(LINUX_KERNEL_ROOT)/include ++ENV += -I$(LINUX_KERNEL_ROOT)/drivers/staging/android/uapi + + LIBENCNAME = libcodec_enc + LIBSENC = -L./ -lhantro_h1 -lpthread +diff --git a/decoder_sw/software/linux/dwl/dwl_linux.c b/decoder_sw/software/linux/dwl/dwl_linux.c +index 9b057f0..43225f6 100755 +--- a/decoder_sw/software/linux/dwl/dwl_linux.c ++++ b/decoder_sw/software/linux/dwl/dwl_linux.c +@@ -41,7 +41,7 @@ + #include "dwl.h" + #include + #ifdef USE_ION +-#include ++#include + #include + #include + #ifdef ANDROID +diff --git a/h1_encoder/software/linux_reference/ewl/ewl_x280_common.c b/h1_encoder/software/linux_reference/ewl/ewl_x280_common.c +index fef1307..20b6f95 100755 +--- a/h1_encoder/software/linux_reference/ewl/ewl_x280_common.c ++++ b/h1_encoder/software/linux_reference/ewl/ewl_x280_common.c +@@ -49,7 +49,7 @@ + + #include "linux/hx280enc.h" + #ifdef USE_ION +-#include ++#include + #include + #include + #ifdef ANDROID +-- +2.25.1 + diff --git a/package/freescale-imx/imx-vpu-hantro/0002-Fix-build-with-uclibc-toolchain.patch b/package/freescale-imx/imx-vpu-hantro/0002-Fix-build-with-uclibc-toolchain.patch new file mode 100644 index 00000000..eb18043c --- /dev/null +++ b/package/freescale-imx/imx-vpu-hantro/0002-Fix-build-with-uclibc-toolchain.patch @@ -0,0 +1,51 @@ +From 4f51b0a6b9a36cc56fa06eb0f76596d8e387f980 Mon Sep 17 00:00:00 2001 +From: Gary Bisson +Date: Fri, 27 Mar 2020 23:17:30 +0100 +Subject: [PATCH] Fix build with uclibc toolchain + +From: Laurent Gauthier (OSS) + +By default, backtrace support is disabled in uclibc. In that case the +execinfo.h header file is missing, producing a build error. + +Signed-off-by: Laurent Gauthier (OSS) +Signed-off-by: Gary Bisson +--- + openmax_il/source/dbgmacros.h | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +diff --git a/openmax_il/source/dbgmacros.h b/openmax_il/source/dbgmacros.h +index 3771c91..37ae09f 100755 +--- a/openmax_il/source/dbgmacros.h ++++ b/openmax_il/source/dbgmacros.h +@@ -50,13 +50,6 @@ + # define __USE_GNU + #endif + +-#ifndef ANDROID +-#include +-#include +-#endif +-#include +-#include +- + /***************** + ** DEBUG FLAGS ** + *****************/ +@@ -76,6 +69,13 @@ + #define TRACE_FILE "trace.log" + #endif + ++#ifndef ANDROID ++#include ++#include ++#endif ++#include ++#include ++ + #ifdef LOG_IN_FILE + #define TRACE(...) \ + { \ +-- +2.25.1 + diff --git a/package/freescale-imx/imx-vpu-hantro/Config.in b/package/freescale-imx/imx-vpu-hantro/Config.in new file mode 100644 index 00000000..25ce50ff --- /dev/null +++ b/package/freescale-imx/imx-vpu-hantro/Config.in @@ -0,0 +1,20 @@ +comment "imx-vpu-hantro needs an i.MX-specific Linux kernel to be built" + depends on !BR2_LINUX_KERNEL + +comment "imx-vpu-hantro needs an i.MX platform with Hantro VPU" + depends on BR2_LINUX_KERNEL + depends on !BR2_PACKAGE_FREESCALE_IMX_HAS_VPU_HANTRO + +config BR2_PACKAGE_IMX_VPU_HANTRO + bool "imx-vpu-hantro" + depends on BR2_LINUX_KERNEL + depends on BR2_PACKAGE_FREESCALE_IMX_HAS_VPU_HANTRO + help + Library of userspace helpers specific for the NXP i.MX SoC + integrating a Hantro Video Processing Unit (VPU) such as the + i.MX8MQ/i.MX8MM. + It requires a kernel that includes the i.MX specific headers + to be built. + + This library is provided by NXP as-is and doesn't have an + upstream. diff --git a/package/freescale-imx/imx-vpu-hantro/imx-vpu-hantro.hash b/package/freescale-imx/imx-vpu-hantro/imx-vpu-hantro.hash new file mode 100644 index 00000000..df9916e4 --- /dev/null +++ b/package/freescale-imx/imx-vpu-hantro/imx-vpu-hantro.hash @@ -0,0 +1,3 @@ +sha256 261cab83954bd66e95b1650a737cb36261a2098597d904e517da638097ed4fd2 imx-vpu-hantro-1.19.0.bin +sha256 69cbb76b3f10ac5a8c36f34df7bbdf50825815560c00a946fff2922365ef01a2 COPYING +sha256 a39da2e94bd8b99eaac4325633854620ea3a55145259c3a7748c610a80714cfc EULA diff --git a/package/freescale-imx/imx-vpu-hantro/imx-vpu-hantro.mk b/package/freescale-imx/imx-vpu-hantro/imx-vpu-hantro.mk new file mode 100644 index 00000000..1d21449c --- /dev/null +++ b/package/freescale-imx/imx-vpu-hantro/imx-vpu-hantro.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# imx-vpu-hantro +# +################################################################################ + +IMX_VPU_HANTRO_VERSION = 1.19.0 +IMX_VPU_HANTRO_SITE = $(FREESCALE_IMX_SITE) +IMX_VPU_HANTRO_SOURCE = imx-vpu-hantro-$(IMX_VPU_HANTRO_VERSION).bin +IMX_VPU_HANTRO_DEPENDENCIES = linux +IMX_VPU_HANTRO_INSTALL_STAGING = YES + +IMX_VPU_HANTRO_MAKE_ENV = \ + $(TARGET_MAKE_ENV) \ + $(TARGET_CONFIGURE_OPTS) \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + SDKTARGETSYSROOT=$(STAGING_DIR) \ + LINUX_KERNEL_ROOT=$(LINUX_DIR) \ + PLATFORM=$(BR2_PACKAGE_FREESCALE_IMX_PLATFORM) + +IMX_VPU_HANTRO_LICENSE = NXP Semiconductor Software License Agreement +IMX_VPU_HANTRO_LICENSE_FILES = EULA COPYING +IMX_VPU_HANTRO_REDISTRIBUTE = NO + +define IMX_VPU_HANTRO_EXTRACT_CMDS + $(call FREESCALE_IMX_EXTRACT_HELPER,$(IMX_VPU_HANTRO_DL_DIR)/$(IMX_VPU_HANTRO_SOURCE)) +endef + +define IMX_VPU_HANTRO_BUILD_CMDS + $(IMX_VPU_HANTRO_MAKE_ENV) $(MAKE1) -C $(@D) +endef + +define IMX_VPU_HANTRO_INSTALL_STAGING_CMDS + $(IMX_VPU_HANTRO_MAKE_ENV) $(MAKE1) -C $(@D) \ + DEST_DIR=$(STAGING_DIR) libdir=/usr/lib install +endef + +define IMX_VPU_HANTRO_INSTALL_TARGET_CMDS + $(IMX_VPU_HANTRO_MAKE_ENV) $(MAKE1) -C $(@D) \ + DEST_DIR=$(TARGET_DIR) libdir=/usr/lib install +endef + +$(eval $(generic-package)) diff --git a/package/freescale-imx/imx-vpu/Config.in b/package/freescale-imx/imx-vpu/Config.in new file mode 100644 index 00000000..dd3507eb --- /dev/null +++ b/package/freescale-imx/imx-vpu/Config.in @@ -0,0 +1,14 @@ +comment "imx-vpu needs an i.MX platform with VPU support" + depends on !BR2_PACKAGE_FREESCALE_IMX_HAS_VPU + +config BR2_PACKAGE_IMX_VPU + bool "imx-vpu" + depends on BR2_PACKAGE_FREESCALE_IMX_HAS_VPU + select BR2_PACKAGE_FIRMWARE_IMX + help + Library of userspace helpers specific for the NXP i.MX SoC + integrating a Chips&Media CODA Video Processing Unit (VPU) + such as the i.MX27/i.MX5x/i.MX6x. + + This library is provided by NXP as-is and doesn't have an + upstream. diff --git a/package/freescale-imx/imx-vpu/imx-vpu.hash b/package/freescale-imx/imx-vpu/imx-vpu.hash new file mode 100644 index 00000000..e3a53e3f --- /dev/null +++ b/package/freescale-imx/imx-vpu/imx-vpu.hash @@ -0,0 +1,4 @@ +# Locally computed +sha256 87cb799a57df654db29403cb74a75ca5185a1517022d3a4a16b8d69056c36127 imx-vpu-5.4.39.3.bin +sha256 2ceab29de5ea533b86f570bcc4e9ddbfb5fe85a1da4978a8613ff3fd9bed781d COPYING +sha256 7ffad92e72e5f6b23027e7cf93a770a4acef00a92dcf79f22701ed401c5478c0 EULA diff --git a/package/freescale-imx/imx-vpu/imx-vpu.mk b/package/freescale-imx/imx-vpu/imx-vpu.mk new file mode 100644 index 00000000..14a1a7a9 --- /dev/null +++ b/package/freescale-imx/imx-vpu/imx-vpu.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# imx-vpu +# +################################################################################ + +IMX_VPU_VERSION = 5.4.39.3 +IMX_VPU_SITE = $(FREESCALE_IMX_SITE) +IMX_VPU_SOURCE = imx-vpu-$(IMX_VPU_VERSION).bin + +IMX_VPU_INSTALL_STAGING = YES + +IMX_VPU_MAKE_ENV = \ + $(TARGET_MAKE_ENV) \ + $(TARGET_CONFIGURE_OPTS) \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + PLATFORM=$(BR2_PACKAGE_FREESCALE_IMX_PLATFORM) + +IMX_VPU_LICENSE = NXP Semiconductor Software License Agreement +IMX_VPU_LICENSE_FILES = EULA COPYING +IMX_VPU_REDISTRIBUTE = NO + +define IMX_VPU_EXTRACT_CMDS + $(call FREESCALE_IMX_EXTRACT_HELPER,$(IMX_VPU_DL_DIR)/$(IMX_VPU_SOURCE)) +endef + +define IMX_VPU_BUILD_CMDS + $(IMX_VPU_MAKE_ENV) $(MAKE1) -C $(@D) +endef + +define IMX_VPU_INSTALL_STAGING_CMDS + $(IMX_VPU_MAKE_ENV) $(MAKE1) -C $(@D) DEST_DIR=$(STAGING_DIR) install +endef + +define IMX_VPU_INSTALL_TARGET_CMDS + $(IMX_VPU_MAKE_ENV) $(MAKE1) -C $(@D) DEST_DIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/freescale-imx/imx-vpuwrap/Config.in b/package/freescale-imx/imx-vpuwrap/Config.in new file mode 100644 index 00000000..8a9bf0e3 --- /dev/null +++ b/package/freescale-imx/imx-vpuwrap/Config.in @@ -0,0 +1,19 @@ +comment "imx-vpuwrap needs an imx-specific Linux kernel to be built" + depends on !BR2_LINUX_KERNEL + +comment "imx-vpuwrap needs an i.MX platform with VPU support" + depends on BR2_LINUX_KERNEL + depends on !BR2_PACKAGE_FREESCALE_IMX_HAS_VPU && !BR2_PACKAGE_FREESCALE_IMX_HAS_VPU_HANTRO + +config BR2_PACKAGE_IMX_VPUWRAP + bool "imx-vpuwrap" + depends on BR2_LINUX_KERNEL + depends on BR2_PACKAGE_FREESCALE_IMX_HAS_VPU || BR2_PACKAGE_FREESCALE_IMX_HAS_VPU_HANTRO + select BR2_PACKAGE_IMX_VPU if BR2_PACKAGE_FREESCALE_IMX_HAS_VPU + select BR2_PACKAGE_IMX_VPU_HANTRO if BR2_PACKAGE_FREESCALE_IMX_HAS_VPU_HANTRO + help + Wrapper library for the vpu library, giving it a different + API. + + This library is provided by NXP as-is and doesn't have + an upstream. diff --git a/package/freescale-imx/imx-vpuwrap/imx-vpuwrap.hash b/package/freescale-imx/imx-vpuwrap/imx-vpuwrap.hash new file mode 100644 index 00000000..7a640374 --- /dev/null +++ b/package/freescale-imx/imx-vpuwrap/imx-vpuwrap.hash @@ -0,0 +1,4 @@ +# locally computed +sha256 5c08b4b7c771404c998779f0e27a75564b57958d463e2df152c910d76cca9e44 imx-vpuwrap-4.3.5.bin +sha256 78696664f7afe7f2b081c99af60082d6403fab935b1b10056ed41aec123ff7fa COPYING +sha256 fc93f26e4197b9240c327ce26ae6e02123f022423d4704c7b0448a37372cf2a2 EULA diff --git a/package/freescale-imx/imx-vpuwrap/imx-vpuwrap.mk b/package/freescale-imx/imx-vpuwrap/imx-vpuwrap.mk new file mode 100644 index 00000000..fdad3a5f --- /dev/null +++ b/package/freescale-imx/imx-vpuwrap/imx-vpuwrap.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# imx-vpuwrap +# +################################################################################ + +IMX_VPUWRAP_VERSION = 4.3.5 +IMX_VPUWRAP_SITE = $(FREESCALE_IMX_SITE) +IMX_VPUWRAP_SOURCE = imx-vpuwrap-$(IMX_VPUWRAP_VERSION).bin +IMX_VPUWRAP_INSTALL_STAGING = YES + +ifeq ($(BR2_PACKAGE_IMX_VPU),y) +IMX_VPUWRAP_DEPENDENCIES = imx-vpu +endif + +ifeq ($(BR2_PACKAGE_IMX_VPU_HANTRO),y) +IMX_VPUWRAP_DEPENDENCIES = imx-vpu-hantro +endif + +IMX_VPUWRAP_LICENSE = NXP Semiconductor Software License Agreement +IMX_VPUWRAP_LICENSE_FILES = EULA COPYING +IMX_VPUWRAP_REDISTRIBUTE = NO + +define IMX_VPUWRAP_EXTRACT_CMDS + $(call FREESCALE_IMX_EXTRACT_HELPER,$(IMX_VPUWRAP_DL_DIR)/$(IMX_VPUWRAP_SOURCE)) +endef + +$(eval $(autotools-package)) diff --git a/package/freescale-imx/kernel-module-imx-gpu-viv/Config.in b/package/freescale-imx/kernel-module-imx-gpu-viv/Config.in new file mode 100644 index 00000000..4cea37a4 --- /dev/null +++ b/package/freescale-imx/kernel-module-imx-gpu-viv/Config.in @@ -0,0 +1,16 @@ +comment "kernel-module-imx-gpu-viv needs a Linux kernel to be built" + depends on !BR2_LINUX_KERNEL + +config BR2_PACKAGE_KERNEL_MODULE_IMX_GPU_VIV + bool "kernel-module-imx-gpu-viv" + depends on BR2_LINUX_KERNEL + help + Kernel loadable module for Vivante GPU. + + This package uses an exact copy of the GPU kernel driver + source code of the same version as base and include fixes + and improvements developed by FSL Community. + + This module is only meant for NXP-based kernel. + + https://github.com/Freescale/kernel-module-imx-gpu-viv diff --git a/package/freescale-imx/kernel-module-imx-gpu-viv/kernel-module-imx-gpu-viv.hash b/package/freescale-imx/kernel-module-imx-gpu-viv/kernel-module-imx-gpu-viv.hash new file mode 100644 index 00000000..0fd8e04f --- /dev/null +++ b/package/freescale-imx/kernel-module-imx-gpu-viv/kernel-module-imx-gpu-viv.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 ee9227d8b3f6da84a4b0be59cdc9a4c67db5c941c719ab44a29e09fe73019cac kernel-module-imx-gpu-viv-5c8eb7b0576dc2348fb206945ce13e41d0837cf1.tar.gz +sha256 b499eddebda05a8859e32b820a64577d91f1de2b52efa2a1575a2cb4000bc259 COPYING diff --git a/package/freescale-imx/kernel-module-imx-gpu-viv/kernel-module-imx-gpu-viv.mk b/package/freescale-imx/kernel-module-imx-gpu-viv/kernel-module-imx-gpu-viv.mk new file mode 100644 index 00000000..4a2fb303 --- /dev/null +++ b/package/freescale-imx/kernel-module-imx-gpu-viv/kernel-module-imx-gpu-viv.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# kernel-module-imx-gpu-viv +# +################################################################################ + +KERNEL_MODULE_IMX_GPU_VIV_VERSION = 5c8eb7b0576dc2348fb206945ce13e41d0837cf1 +KERNEL_MODULE_IMX_GPU_VIV_SITE = \ + $(call github,Freescale,kernel-module-imx-gpu-viv,$(KERNEL_MODULE_IMX_GPU_VIV_VERSION)) +KERNEL_MODULE_IMX_GPU_VIV_LICENSE = GPL-2.0 +KERNEL_MODULE_IMX_GPU_VIV_LICENSE_FILES = COPYING + +KERNEL_MODULE_IMX_GPU_VIV_MODULE_MAKE_OPTS = \ + AQROOT=$(@D)/kernel-module-imx-gpu-viv-src \ + KERNEL_DIR=$(LINUX_DIR) + +KERNEL_MODULE_IMX_GPU_VIV_MODULE_SUBDIRS = kernel-module-imx-gpu-viv-src + +define KERNEL_MODULE_IMX_GPU_VIV_LINUX_CONFIG_FIXUPS + $(call KCONFIG_DISABLE_OPT,CONFIG_MXC_GPU_VIV) +endef + +$(eval $(kernel-module)) +$(eval $(generic-package)) diff --git a/package/freescale-imx/libz160/Config.in b/package/freescale-imx/libz160/Config.in new file mode 100644 index 00000000..a40ecdc7 --- /dev/null +++ b/package/freescale-imx/libz160/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBZ160 + bool "libz160" + depends on BR2_ARM_EABI + depends on BR2_TOOLCHAIN_USES_GLIBC + help + An API for user space programs to perform 2D accelerated + graphics operations on AMD GPU (included for examples in + iMX5x chipsets) + +comment "libz160 needs an EABI toolchain w/ glibc" + depends on !BR2_ARM_EABI || !BR2_TOOLCHAIN_USES_GLIBC diff --git a/package/freescale-imx/libz160/libz160.hash b/package/freescale-imx/libz160/libz160.hash new file mode 100644 index 00000000..75f266e3 --- /dev/null +++ b/package/freescale-imx/libz160/libz160.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 08767eb269a0a30ca0aa3d3b5aa9a53a2d17ed1c24651b7e8cefc7704b883f19 libz160-bin-11.09.01.bin +sha256 6d7a2fefc2f7ce888f9eb74919b852aed5a1087b2e84345be90cadbebe1b6578 EULA diff --git a/package/freescale-imx/libz160/libz160.mk b/package/freescale-imx/libz160/libz160.mk new file mode 100644 index 00000000..5b1feeb4 --- /dev/null +++ b/package/freescale-imx/libz160/libz160.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# libz160 +# +################################################################################ + +LIBZ160_VERSION = 11.09.01 +LIBZ160_SOURCE = libz160-bin-$(LIBZ160_VERSION).bin +LIBZ160_SITE = $(FREESCALE_IMX_SITE) +LIBZ160_INSTALL_STAGING = YES + +# See freescale-imx +LIBZ160_LICENSE = Freescale Semiconductor Software License Agreement +LIBZ160_LICENSE_FILES = EULA +LIBZ160_REDISTRIBUTE = NO + +define LIBZ160_EXTRACT_CMDS + $(call FREESCALE_IMX_EXTRACT_HELPER,$(LIBZ160_DL_DIR)/$(LIBZ160_SOURCE)) +endef + +define LIBZ160_INSTALL_STAGING_CMDS + $(INSTALL) -D -m 755 $(@D)/usr/lib/libz160.so $(STAGING_DIR)/usr/lib/libz160.so + $(INSTALL) -D -m 644 $(@D)/usr/include/z160.h $(STAGING_DIR)/usr/include/z160.h +endef + +define LIBZ160_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 755 $(@D)/usr/lib/libz160.so $(TARGET_DIR)/usr/lib/libz160.so +endef + +$(eval $(generic-package)) diff --git a/package/freeswitch-mod-bcg729/Config.in b/package/freeswitch-mod-bcg729/Config.in new file mode 100644 index 00000000..e75e2acb --- /dev/null +++ b/package/freeswitch-mod-bcg729/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_FREESWITCH_MOD_BCG729 + bool "freeswitch-mod-bcg729" + depends on BR2_PACKAGE_FREESWITCH + depends on !BR2_STATIC_LIBS # freeswitch + select BR2_PACKAGE_BCG729 + help + FreeSWITCH G.729A module using the opensource bcg729 + implementation by Belledonne Communications. + + https://github.com/xadhoom/mod_bcg729 diff --git a/package/freeswitch-mod-bcg729/freeswitch-mod-bcg729.hash b/package/freeswitch-mod-bcg729/freeswitch-mod-bcg729.hash new file mode 100644 index 00000000..d7fb58fb --- /dev/null +++ b/package/freeswitch-mod-bcg729/freeswitch-mod-bcg729.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 ada0640094b5b3b4a767ec360213bfed624e698c9932b2f9ceb76eb1c0f5a246 freeswitch-mod-bcg729-1.0.5.tar.gz +sha256 bb4680b13c3190429464a8308a07d7d891e6454349fb7be856e02405b25b1195 LICENSE diff --git a/package/freeswitch-mod-bcg729/freeswitch-mod-bcg729.mk b/package/freeswitch-mod-bcg729/freeswitch-mod-bcg729.mk new file mode 100644 index 00000000..d820756c --- /dev/null +++ b/package/freeswitch-mod-bcg729/freeswitch-mod-bcg729.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# freeswitch-mod-bcg729 +# +################################################################################ + +FREESWITCH_MOD_BCG729_VERSION = 1.0.5 +FREESWITCH_MOD_BCG729_SITE = $(call github,xadhoom,mod_bcg729,v$(FREESWITCH_MOD_BCG729_VERSION)) +FREESWITCH_MOD_BCG729_LICENSE = MPL-1.1 +FREESWITCH_MOD_BCG729_LICENSE_FILES = LICENSE +FREESWITCH_MOD_BCG729_DEPENDENCIES = freeswitch bcg729 + +# instead of patching the not cross-compile friendly Makefile from +# upstream we issue the necessary build commands ourselves +define FREESWITCH_MOD_BCG729_BUILD_CMDS + $(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_LDFLAGS) \ + -I$(STAGING_DIR)/usr/include/freeswitch \ + -fPIC -fomit-frame-pointer -fno-exceptions \ + -c $(@D)/mod_bcg729.c -o $(@D)/mod_bcg729.o + $(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_LDFLAGS) \ + -fPIC -fomit-frame-pointer -fno-exceptions \ + -shared -Xlinker -x -lm -lbcg729 -Wl,-Bdynamic \ + -o $(@D)/mod_bcg729.so $(@D)/mod_bcg729.o +endef + +define FREESWITCH_MOD_BCG729_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 $(@D)/mod_bcg729.so $(TARGET_DIR)/usr/lib/freeswitch/mod/mod_bcg729.so +endef + +$(eval $(generic-package)) diff --git a/package/freeswitch/0001-src-mod-applications-mod_cv-mod_cv.cpp-fix-build-wit.patch b/package/freeswitch/0001-src-mod-applications-mod_cv-mod_cv.cpp-fix-build-wit.patch new file mode 100644 index 00000000..cd0a3ab4 --- /dev/null +++ b/package/freeswitch/0001-src-mod-applications-mod_cv-mod_cv.cpp-fix-build-wit.patch @@ -0,0 +1,44 @@ +From 575409a14e62f73e83309daf8ff6642a235f250c Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Fri, 16 Oct 2020 23:06:36 +0200 +Subject: [PATCH] src/mod/applications/mod_cv/mod_cv.cpp: fix build with opencv + 3.4.9 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Use cvScalar instead of CV_RGB to avoid the following build failure with +opencv 3.4.9: + +mod_cv.cpp:693:24: error: conversion from ‘cv::Scalar {aka cv::Scalar_}’ to non-scalar type ‘CvScalar’ requested + CvScalar col = CV_RGB((float)255 * object_neighbors / max_neighbors, 0, 0); + ^ + +Indeed, CV_RGB is defined as cv::Scalar instead of cvScalar since +version 3.4.2 and +https://github.com/opencv/opencv/commit/7f9253ea0a9fe2635926379420002dbf0c3fce0f + +It should be noted that CV_RGB(r,g,b) = cvScalar(b,g,r,0) + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/signalwire/freeswitch/pull/914] +--- + src/mod/applications/mod_cv/mod_cv.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/mod/applications/mod_cv/mod_cv.cpp b/src/mod/applications/mod_cv/mod_cv.cpp +index 582f925abf..bbec755e91 100644 +--- a/src/mod/applications/mod_cv/mod_cv.cpp ++++ b/src/mod/applications/mod_cv/mod_cv.cpp +@@ -690,7 +690,7 @@ void detectAndDraw(cv_context_t *context) + //printf("WTF %d\n", object_neighbors); + //cout << "Detected " << object_neighbors << " object neighbors" << endl; + const int rect_height = cvRound((float)img.rows * object_neighbors / max_neighbors); +- CvScalar col = CV_RGB((float)255 * object_neighbors / max_neighbors, 0, 0); ++ CvScalar col = cvScalar(0, 0, (float)255 * object_neighbors / max_neighbors, 0); + rectangle(img, cvPoint(0, img.rows), cvPoint(img.cols/10, img.rows - rect_height), col, -1); + + parse_stats(&context->nestDetected, nestedObjects.size(), context->skip); +-- +2.28.0 + diff --git a/package/freeswitch/Config.in b/package/freeswitch/Config.in new file mode 100644 index 00000000..bad10148 --- /dev/null +++ b/package/freeswitch/Config.in @@ -0,0 +1,39 @@ +config BR2_PACKAGE_FREESWITCH + bool "freeswitch" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS # apr, included in freeswitch source + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # apr, included in freeswitch source + depends on BR2_USE_WCHAR # uses wchar_t + select BR2_PACKAGE_FFMPEG_AVRESAMPLE if BR2_PACKAGE_FFMPEG + select BR2_PACKAGE_FFMPEG_SWSCALE if BR2_PACKAGE_FFMPEG + select BR2_PACKAGE_LIBCURL + select BR2_PACKAGE_JPEG + # src/mod/applications/mod_cv/mod_cv.cpp includes + # highgui.h, imgproc.hpp & objdetect.hpp + select BR2_PACKAGE_OPENCV3_LIB_HIGHGUI if BR2_PACKAGE_OPENCV3 + select BR2_PACKAGE_OPENCV3_LIB_IMGPROC if BR2_PACKAGE_OPENCV3 + select BR2_PACKAGE_OPENCV3_LIB_OBJDETECT if BR2_PACKAGE_OPENCV3 + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_PCRE + select BR2_PACKAGE_SOFIA_SIP + select BR2_PACKAGE_SPANDSP + select BR2_PACKAGE_SPEEX + select BR2_PACKAGE_SPEEXDSP + select BR2_PACKAGE_SQLITE + select BR2_PACKAGE_TIFF + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + select BR2_PACKAGE_ZLIB + help + FreeSWITCH is a scalable open source cross-platform + telephony platform designed to route and interconnect + popular communication protocols using audio, video, text or + any other form of media. + + https://www.freeswitch.org + +comment "freeswitch needs a toolchain w/ C++, dynamic library, threads, wchar" + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS \ + || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR diff --git a/package/freeswitch/freeswitch.hash b/package/freeswitch/freeswitch.hash new file mode 100644 index 00000000..d95e05c0 --- /dev/null +++ b/package/freeswitch/freeswitch.hash @@ -0,0 +1,12 @@ +# From https://files.freeswitch.org/freeswitch-releases/freeswitch-1.10.5.-release.tar.xz.sha256 +sha256 3e26600767a82946eca94af2c8f14712783aa83db5fb1cc57585f544aecce327 freeswitch-1.10.5.-release.tar.xz +# Locally computed +sha256 75c933202f40939cdc3827fce20a1efdaa38291e2b5a65d234eb16e2cffda66a COPYING +sha256 c3e3388768dae8bf4edcc4108f95be815b8a05c0b0aef6e4c3d8df81affdfa34 docs/OPENH264_BINARY_LICENSE.txt +sha256 e8e26b16da14aa3e6ed5c22c705fdc1f45d6225fca461ea9f7314bcdfdc414c4 libs/apr/LICENSE +sha256 1eefb2ea1db0af7729a9d8a27d7c65d8a37ab185393f935b029aac6828ce315a libs/apr-util/LICENSE +sha256 8267348d5af1262c11d1a08de2f5afc77457755f1ac658627dd9acf71011d615 libs/libvpx/LICENSE +sha256 2b2cc1180c7e6988328ad2033b04b80117419db9c4c584918bbb3cfec7e9364f libs/libyuv/LICENSE +sha256 7d72a8aee2c4b1a084200487992a5d86f5df6b535727a14c1874918e99d24600 libs/libzrtp/src/zrtp_legal.c +sha256 8e19d42a1eec9561f3f347253ddf2e385c55f392f025bb0fd41b88dbf38db5ae libs/srtp/LICENSE +sha256 ab00a482b6a3902e40211b43c5d0441962ea99b6cc7c25c0f243fa270b78d482 src/mod/codecs/mod_isac/LICENSE diff --git a/package/freeswitch/freeswitch.mk b/package/freeswitch/freeswitch.mk new file mode 100644 index 00000000..72198805 --- /dev/null +++ b/package/freeswitch/freeswitch.mk @@ -0,0 +1,346 @@ +################################################################################ +# +# freeswitch +# +################################################################################ + +FREESWITCH_VERSION = 1.10.5 +FREESWITCH_SOURCE = freeswitch-$(FREESWITCH_VERSION).-release.tar.xz +FREESWITCH_SITE = https://files.freeswitch.org/freeswitch-releases +# External modules need headers/libs from staging +FREESWITCH_INSTALL_STAGING = YES +FREESWITCH_LICENSE = MPL-1.1, \ + GPL-3.0+ with font exception (fonts), \ + Apache-2.0 (apr, apr-util), \ + BSD-3-Clause (libsrtp) + +FREESWITCH_LICENSE_FILES = \ + COPYING \ + libs/apr/LICENSE \ + libs/apr-util/LICENSE \ + libs/srtp/LICENSE + +# required dependencies +FREESWITCH_DEPENDENCIES = \ + host-pkgconf \ + jpeg \ + libcurl \ + openssl \ + pcre \ + spandsp \ + sofia-sip \ + speex \ + sqlite \ + tiff \ + util-linux \ + zlib + +# disable display of ClueCon banner in fs_cli +FREESWITCH_CONF_ENV += \ + disable_cc=yes + +# we neither need host-perl nor host-php +FREESWITCH_CONF_ENV += \ + ac_cv_prog_PERL=false \ + ac_cv_have_perl=no \ + ac_cv_prog_PHP=false \ + ac_cv_have_php=no \ + ac_cv_prog_PHP_CONFIG=false \ + ac_cv_have_php_config=no + +# copied from freeswitch/configure.ac, line 258+ +FREESWITCH_CONF_ENV += \ + ac_cv_file__dev_ptmx=yes \ + ac_cv_va_copy=yes \ + ac_cv_file__dev_urandom=yes \ + ac_cv_func_realloc_0_nonnull=yes \ + ac_cv_func_malloc_0_nonnull=yes \ + ac_cv_func_setpgrp_void=yes \ + ac_cv_file__dev_zero=yes \ + apr_cv_tcp_nodelay_with_cork=yes \ + ac_cv_file_dbd_apr_dbd_mysql_c=no \ + ac_cv_sizeof_ssize_t=4 \ + apr_cv_mutex_recursive=yes \ + ac_cv_func_pthread_rwlock_init=yes \ + apr_cv_type_rwlock_t=yes \ + apr_cv_process_shared_works=yes \ + apr_cv_mutex_robust_shared=yes + +# build breaks with -Werror enabled +FREESWITCH_CONF_ENV += \ + ac_cv_gcc_supports_w_no_unused_result=no + +FREESWITCH_CONF_OPTS = \ + --without-erlang \ + --enable-fhs \ + --without-python \ + --disable-system-xmlrpc-c + +# zrtp supports a limited set of archs, sparc support is also broken due +# to a broken ld call by gcc, see libs/libzrtp/include/zrtp_config.h +ifeq ($(BR2_i386)$(BR2_arm)$(BR2_armeb)$(BR2_aarch64)$(BR2_aarch64_be)$(BR2_mips)$(BR2_mipsel)$(BR2_mips64)$(BR2_mips64el)$(BR2_powerpc)$(BR2_powerpc64)$(BR2_powerpcle)$(BR2_x86_64),y) +FREESWITCH_LICENSE_FILES += libs/libzrtp/src/zrtp_legal.c +FREESWITCH_CONF_OPTS += --enable-zrtp +else +FREESWITCH_CONF_OPTS += --disable-zrtp +endif + +# Enable optional modules +FREESWITCH_ENABLED_MODULES += \ + applications/mod_avmd \ + applications/mod_blacklist \ + applications/mod_callcenter \ + applications/mod_commands \ + applications/mod_conference \ + applications/mod_curl \ + applications/mod_db \ + applications/mod_directory \ + applications/mod_dptools \ + applications/mod_easyroute \ + applications/mod_esf \ + applications/mod_esl \ + applications/mod_expr \ + applications/mod_fifo \ + applications/mod_fsk \ + applications/mod_hash \ + applications/mod_httapi \ + applications/mod_lcr \ + applications/mod_sms \ + applications/mod_snom \ + applications/mod_spandsp \ + applications/mod_spy \ + applications/mod_valet_parking \ + applications/mod_voicemail \ + codecs/mod_g723_1 \ + dialplans/mod_dialplan_asterisk \ + dialplans/mod_dialplan_xml \ + endpoints/mod_loopback \ + endpoints/mod_rtc \ + endpoints/mod_rtmp \ + endpoints/mod_sofia \ + endpoints/mod_verto \ + event_handlers/mod_cdr_csv \ + event_handlers/mod_cdr_sqlite \ + event_handlers/mod_event_socket \ + formats/mod_local_stream \ + formats/mod_native_file \ + formats/mod_tone_stream \ + loggers/mod_console \ + loggers/mod_logfile \ + loggers/mod_syslog \ + say/mod_say_de \ + say/mod_say_en \ + say/mod_say_es \ + say/mod_say_es_ar \ + say/mod_say_fa \ + say/mod_say_fr \ + say/mod_say_he \ + say/mod_say_hr \ + say/mod_say_hu \ + say/mod_say_it \ + say/mod_say_ja \ + say/mod_say_nl \ + say/mod_say_pl \ + say/mod_say_pt \ + say/mod_say_ru \ + say/mod_say_sv \ + say/mod_say_th \ + say/mod_say_zh \ + timers/mod_timerfd \ + xml_int/mod_xml_cdr \ + xml_int/mod_xml_rpc \ + xml_int/mod_xml_scgi + +define FREESWITCH_ENABLE_MODULES + $(Q)echo $(FREESWITCH_ENABLED_MODULES) \ + | tr ' ' '\n' \ + > $(@D)/modules.conf +endef +FREESWITCH_PRE_CONFIGURE_HOOKS += FREESWITCH_ENABLE_MODULES + +# mod_isac supports a limited set of archs +# src/mod/codecs/mod_isac/typedefs.h +ifeq ($(BR2_i386)$(BR2_mips)$(BR2_mipsel)$(BR2_mips64)$(BR2_mips64el)$(BR2_x86_64),y) +FREESWITCH_LICENSE += , BSD-3-Clause (mod_isac) +FREESWITCH_LICENSE_FILES += src/mod/codecs/mod_isac/LICENSE +FREESWITCH_ENABLED_MODULES += codecs/mod_isac +endif + +ifeq ($(BR2_PACKAGE_ALSA_LIB),y) +FREESWITCH_DEPENDENCIES += alsa-lib +FREESWITCH_ENABLED_MODULES += endpoints/mod_alsa +endif + +# Use the pass-through g729 module provided by freeswitch instead of +# the external mod_bcg729 provided by freeswitch-mod-bcg729. +ifeq ($(BR2_PACKAGE_FREESWITCH_MOD_BCG729),) +FREESWITCH_ENABLED_MODULES += codecs/mod_g729 +endif + +ifeq ($(BR2_PACKAGE_FREETYPE),y) +FREESWITCH_DEPENDENCIES += freetype +endif + +ifeq ($(BR2_PACKAGE_LIBBROADVOICE),y) +FREESWITCH_DEPENDENCIES += libbroadvoice +FREESWITCH_ENABLED_MODULES += codecs/mod_bv +endif + +ifeq ($(BR2_PACKAGE_LIBCODEC2),y) +FREESWITCH_DEPENDENCIES += libcodec2 +FREESWITCH_ENABLED_MODULES += codecs/mod_codec2 +endif + +ifeq ($(BR2_PACKAGE_LIBEDIT),y) +FREESWITCH_DEPENDENCIES += libedit +FREESWITCH_CONF_OPTS += --enable-core-libedit-support +else +FREESWITCH_CONF_OPTS += --disable-core-libedit-support +endif + +ifeq ($(BR2_PACKAGE_LIBG7221),y) +FREESWITCH_DEPENDENCIES += libg7221 +endif + +ifeq ($(BR2_PACKAGE_LIBILBC),y) +FREESWITCH_DEPENDENCIES += libilbc +FREESWITCH_ENABLED_MODULES += codecs/mod_ilbc +endif + +ifeq ($(BR2_PACKAGE_LIBLDNS),y) +FREESWITCH_DEPENDENCIES += libldns +FREESWITCH_ENABLED_MODULES += applications/mod_enum +endif + +ifeq ($(BR2_PACKAGE_LIBMEMCACHED),y) +FREESWITCH_DEPENDENCIES += libmemcached +FREESWITCH_ENABLED_MODULES += applications/mod_memcache +endif + +ifeq ($(BR2_PACKAGE_LIBOPENH264),y) +FREESWITCH_LICENSE += , BSD-2-Clause (libopenh264) +FREESWITCH_LICENSE_FILES += docs/OPENH264_BINARY_LICENSE.txt +FREESWITCH_DEPENDENCIES += libopenh264 +FREESWITCH_ENABLED_MODULES += codecs/mod_openh264 +endif + +ifeq ($(BR2_PACKAGE_LIBPNG),y) +FREESWITCH_DEPENDENCIES += libpng +FREESWITCH_ENABLED_MODULES += formats/mod_png +endif + +ifeq ($(BR2_PACKAGE_LIBYAML),y) +FREESWITCH_DEPENDENCIES += libyaml +FREESWITCH_ENABLED_MODULES += languages/mod_yaml +endif + +ifeq ($(BR2_PACKAGE_LUA),y) +FREESWITCH_DEPENDENCIES += lua +FREESWITCH_ENABLED_MODULES += languages/mod_lua +endif + +ifeq ($(BR2_PACKAGE_OPENLDAP),y) +FREESWITCH_DEPENDENCIES += openldap +FREESWITCH_ENABLED_MODULES += directories/mod_ldap xml_int/mod_xml_ldap +endif + +ifeq ($(BR2_PACKAGE_OPUS),y) +FREESWITCH_DEPENDENCIES += opus +FREESWITCH_ENABLED_MODULES += codecs/mod_opus +endif + +ifeq ($(BR2_PACKAGE_PORTAUDIO),y) +FREESWITCH_DEPENDENCIES += portaudio +FREESWITCH_ENABLED_MODULES += endpoints/mod_portaudio +endif + +ifeq ($(BR2_PACKAGE_LAME)$(BR2_PACKAGE_LIBSHOUT)$(BR2_PACKAGE_MPG123),yyy) +FREESWITCH_DEPENDENCIES += lame libshout mpg123 +FREESWITCH_ENABLED_MODULES += formats/mod_shout +endif + +ifeq ($(BR2_PACKAGE_LIBSILK),y) +FREESWITCH_DEPENDENCIES += libsilk +FREESWITCH_ENABLED_MODULES += codecs/mod_silk +endif + +ifeq ($(BR2_PACKAGE_LIBSNDFILE),y) +FREESWITCH_DEPENDENCIES += libsndfile +FREESWITCH_ENABLED_MODULES += formats/mod_sndfile +endif + +ifeq ($(BR2_PACKAGE_LIBSOUNDTOUCH),y) +FREESWITCH_DEPENDENCIES += libsoundtouch +FREESWITCH_ENABLED_MODULES += applications/mod_soundtouch +endif + +ifeq ($(BR2_PACKAGE_OPENCV3),y) +FREESWITCH_DEPENDENCIES += opencv3 +FREESWITCH_ENABLED_MODULES += applications/mod_cv +endif + +ifeq ($(BR2_PACKAGE_POSTGRESQL),y) +FREESWITCH_CONF_ENV += \ + ac_cv_path_PG_CONFIG=$(STAGING_DIR)/usr/bin/pg_config +FREESWITCH_DEPENDENCIES += postgresql +FREESWITCH_ENABLED_MODULES += databases/mod_pgsql +endif + +ifeq ($(BR2_PACKAGE_UNIXODBC),y) +FREESWITCH_DEPENDENCIES += unixodbc +FREESWITCH_CONF_OPTS += \ + --enable-core-odbc-support \ + --with-odbc=$(STAGING_DIR)/usr +else +FREESWITCH_CONF_OPTS += --disable-core-odbc-support +endif + +ifeq ($(BR2_PACKAGE_XZ),y) +FREESWITCH_DEPENDENCIES += xz +endif + +ifeq ($(BR2_TOOLCHAIN_GCC_AT_LEAST_4_8)$(BR2_PACKAGE_FFMPEG),yy) +FREESWITCH_LICENSE += , BSD-3-Clause (libvpx, libyuv) +FREESWITCH_LICENSE_FILES += libs/libvpx/LICENSE libs/libyuv/LICENSE +FREESWITCH_CONF_OPTS += --enable-libvpx --enable-libyuv +FREESWITCH_DEPENDENCIES += host-yasm ffmpeg +FREESWITCH_ENABLED_MODULES += applications/mod_av applications/mod_fsv +FREESWITCH_MAKE_ENV += CROSS=$(TARGET_CROSS) + +# Freeswitch's buildsystem forgets to pass important environment +# variables and config options when it configures libvpx, so +# pre-build libvpx manually, so Freeswitch does not attempt to run +# its flawed commands... +# Freeswitch only ever uses the static libtrary, that's hard-coded, +# we can't do anything about that... +# From package/libvpx/libvpx.mk: +# - this is not a true autotools package. It is based on the ffmpeg +# build system. +# - ld is being used with cc options. therefore, pretend ld is cc. +define FREESWITCH_BUILD_LIBVPX + cd $(@D)/libs/libvpx && \ + $(TARGET_CONFIGURE_OPTS) \ + $(TARGET_CONFIGURE_ARGS) \ + LD="$(TARGET_CC)" \ + CROSS=$(GNU_TARGET_NAME) \ + ./configure \ + --target=generic-gnu \ + --enable-pic \ + --prefix=/usr \ + --disable-shared --enable-static \ + --disable-examples \ + --disable-docs \ + --disable-unit-tests && \ + $(TARGET_MAKE_ENV) \ + $(LIBVPX_MAKE_ENV) \ + $(MAKE) \ + -C $(@D)/libs/libvpx \ + all +endef +FREESWITCH_PRE_BUILD_HOOKS += FREESWITCH_BUILD_LIBVPX + +else +FREESWITCH_CONF_OPTS += --disable-libvpx --disable-libyuv +endif + +$(eval $(autotools-package)) diff --git a/package/freetype/Config.in b/package/freetype/Config.in new file mode 100644 index 00000000..06c6a854 --- /dev/null +++ b/package/freetype/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_FREETYPE + bool "freetype" + help + a free, high-quality and portable font engine. + + https://www.freetype.org/ diff --git a/package/freetype/freetype.hash b/package/freetype/freetype.hash new file mode 100644 index 00000000..36571b51 --- /dev/null +++ b/package/freetype/freetype.hash @@ -0,0 +1,8 @@ +# From https://sourceforge.net/projects/freetype/files/freetype2/2.10.4/ +sha1 0181862673f7216ad2b5074f95fc131209e30b27 freetype-2.10.4.tar.xz + +# Locally calculated +sha256 86a854d8905b19698bbc8f23b860bc104246ce4854dcea8e3b0fb21284f75784 freetype-2.10.4.tar.xz +sha256 fd056de4196903a676208ef58cfddafc7d583d1f28fa2e44c309cf84a59e62fb docs/LICENSE.TXT +sha256 08c135755dd589039470f1fdbb400daaabaaa50d0b366d19cebff4d22986baa1 docs/FTL.TXT +sha256 c4120c6752c910c299e3bd9cb3a46ff262c268303ca2069b61f92f10a5656c18 docs/GPLv2.TXT diff --git a/package/freetype/freetype.mk b/package/freetype/freetype.mk new file mode 100644 index 00000000..59d6dc0e --- /dev/null +++ b/package/freetype/freetype.mk @@ -0,0 +1,71 @@ +################################################################################ +# +# freetype +# +################################################################################ + +FREETYPE_VERSION = 2.10.4 +FREETYPE_SOURCE = freetype-$(FREETYPE_VERSION).tar.xz +FREETYPE_SITE = http://download.savannah.gnu.org/releases/freetype +FREETYPE_INSTALL_STAGING = YES +FREETYPE_MAKE_OPTS = CCexe="$(HOSTCC)" +FREETYPE_LICENSE = Dual FTL/GPL-2.0+ +FREETYPE_LICENSE_FILES = docs/LICENSE.TXT docs/FTL.TXT docs/GPLv2.TXT +FREETYPE_CPE_ID_VENDOR = freetype +FREETYPE_DEPENDENCIES = host-pkgconf +FREETYPE_CONFIG_SCRIPTS = freetype-config + +# harfbuzz already depends on freetype so disable harfbuzz in freetype to avoid +# a circular dependency +FREETYPE_CONF_OPTS = --without-harfbuzz + +HOST_FREETYPE_DEPENDENCIES = host-pkgconf +HOST_FREETYPE_CONF_OPTS = \ + --without-brotli \ + --without-bzip2 \ + --without-harfbuzz \ + --without-png \ + --without-zlib + +# since 2.9.1 needed for freetype-config install +FREETYPE_CONF_OPTS += --enable-freetype-config +HOST_FREETYPE_CONF_OPTS += --enable-freetype-config + +ifeq ($(BR2_PACKAGE_ZLIB),y) +FREETYPE_DEPENDENCIES += zlib +FREETYPE_CONF_OPTS += --with-zlib +else +FREETYPE_CONF_OPTS += --without-zlib +endif + +ifeq ($(BR2_PACKAGE_BROTLI),y) +FREETYPE_DEPENDENCIES += brotli +FREETYPE_CONF_OPTS += --with-brotli +else +FREETYPE_CONF_OPTS += --without-brotli +endif + +ifeq ($(BR2_PACKAGE_BZIP2),y) +FREETYPE_DEPENDENCIES += bzip2 +FREETYPE_CONF_OPTS += --with-bzip2 +else +FREETYPE_CONF_OPTS += --without-bzip2 +endif + +ifeq ($(BR2_PACKAGE_LIBPNG),y) +FREETYPE_DEPENDENCIES += libpng +FREETYPE_CONF_OPTS += --with-png +else +FREETYPE_CONF_OPTS += --without-png +endif + +# Extra fixing since includedir and libdir are expanded from configure values +define FREETYPE_FIX_CONFIG_FILE + $(SED) 's:^includedir=.*:includedir="$${prefix}/include":' \ + -e 's:^libdir=.*:libdir="$${exec_prefix}/lib":' \ + $(STAGING_DIR)/usr/bin/freetype-config +endef +FREETYPE_POST_INSTALL_STAGING_HOOKS += FREETYPE_FIX_CONFIG_FILE + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/frotz/Config.in b/package/frotz/Config.in new file mode 100644 index 00000000..b73beea3 --- /dev/null +++ b/package/frotz/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_FROTZ + bool "frotz" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_NCURSES + help + Frotz is an interpreter for old Infocom adventure games and + other Z-code games. Note that frotz can not be run as root. + You must add a normal user to your buildroot configuration to + be able to use it. + + https://661.org/proj/if/frotz/ + +comment "frotz needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/frotz/frotz.hash b/package/frotz/frotz.hash new file mode 100644 index 00000000..14f1a7fb --- /dev/null +++ b/package/frotz/frotz.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 7e488140791259a1a8c9e16a0c467ca69b694b918c28ffe3d83c654bcb253cca frotz-2.51.tar.bz2 +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/frotz/frotz.mk b/package/frotz/frotz.mk new file mode 100644 index 00000000..2a2865af --- /dev/null +++ b/package/frotz/frotz.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# Frotz +# +################################################################################ + +FROTZ_VERSION = 2.51 +FROTZ_SOURCE = frotz-$(FROTZ_VERSION).tar.bz2 +FROTZ_SITE = $(call gitlab,DavidGriffith,frotz,$(FROTZ_VERSION)) +FROTZ_DEPENDENCIES = host-pkgconf ncurses +FROTZ_LICENSE = GPL-2.0+ +FROTZ_LICENSE_FILES = COPYING + +ifeq ($(BR2_PACKAGE_NCURSES_WCHAR),y) +FROTZ_CURSES=ncursesw +FROTZ_UTF8=yes +else +FROTZ_CURSES=ncurses +endif + +define FROTZ_BUILD_CMDS + $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) PREFIX=/usr CONFIG_DIR=/etc \ + SOUND_TYPE=none CURSES="$(FROTZ_CURSES)" USE_UTF8=$(FROTZ_UTF8) \ + CFLAGS="$(TARGET_CFLAGS) -std=c99" +endef + +define FROTZ_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/frotz $(TARGET_DIR)/usr/bin/frotz +endef + +$(eval $(generic-package)) diff --git a/package/frr/Config.in b/package/frr/Config.in new file mode 100644 index 00000000..91191329 --- /dev/null +++ b/package/frr/Config.in @@ -0,0 +1,25 @@ +config BR2_PACKAGE_FRR + bool "frr" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS # libyang + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # json-c + select BR2_PACKAGE_BASH + select BR2_PACKAGE_BUSYBOX_SHOW_OTHERS # bash + select BR2_PACKAGE_C_ARES + select BR2_PACKAGE_LIBYANG + select BR2_PACKAGE_LIBNL + select BR2_PACKAGE_READLINE + select BR2_PACKAGE_JSON_C + help + The FRRouting Protocol Suite. + + FRR is free software that implements and manages various + IPv4 and IPv6 routing protocols. + + https://frrouting.org + +comment "frr needs a toolchain w/ threads, dynamic library" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/frr/S50frr b/package/frr/S50frr new file mode 100644 index 00000000..0c128353 --- /dev/null +++ b/package/frr/S50frr @@ -0,0 +1,46 @@ +#!/bin/sh + +DAEMON="frr" + +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON" + +start() { + install -m 755 -o frr -g frr -d /var/run/frr + install -m 755 -o frr -g frr -d /var/log/frr + + printf 'Starting %s: ' "$DAEMON" + /usr/sbin/frrinit.sh start + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + /usr/sbin/frrinit.sh stop + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +case "$1" in + start|stop|restart) + "$1";; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac diff --git a/package/frr/frr.hash b/package/frr/frr.hash new file mode 100644 index 00000000..3a044d4c --- /dev/null +++ b/package/frr/frr.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 030d4e66f577726dfea13bd3a9c669fd41d8fd89b25953a36b5b0966d406ff28 frr-7.5.1.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/frr/frr.mk b/package/frr/frr.mk new file mode 100644 index 00000000..d1ca6e0b --- /dev/null +++ b/package/frr/frr.mk @@ -0,0 +1,72 @@ +################################################################################ +# +# frr +# +################################################################################ + +FRR_VERSION = 7.5.1 +FRR_SITE = $(call github,FRRouting,frr,frr-$(FRR_VERSION)) +FRR_LICENSE = GPL-2.0 +FRR_LICENSE_FILES = COPYING +FRR_CPE_ID_VENDOR = linuxfoundation +FRR_CPE_ID_PRODUCT = free_range_routing +FRR_AUTORECONF = YES + +FRR_DEPENDENCIES = host-frr readline json-c \ + libyang libnl c-ares + +HOST_FRR_DEPENDENCIES = host-flex host-bison host-python3 + +FRR_CONF_OPTS = --with-clippy=$(HOST_DIR)/bin/clippy \ + --sysconfdir=/etc/frr \ + --localstatedir=/var/run/frr \ + --with-moduledir=/usr/lib/frr/modules \ + --enable-configfile-mask=0640 \ + --enable-logfile-mask=0640 \ + --enable-multipath=256 \ + --disable-ospfclient \ + --enable-shell-access \ + --enable-user=frr \ + --enable-group=frr \ + --enable-vty-group=frrvty \ + --disable-capabilities \ + --enable-fpm + +HOST_FRR_CONF_OPTS = --enable-clippy-only + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +FRR_CONF_ENV += LIBS=-latomic +endif + +define HOST_FRR_INSTALL_CMDS + $(INSTALL) -D -m 0755 $(@D)/lib/clippy $(HOST_DIR)/bin/clippy +endef + +define FRR_INSTALL_CONFIG_FILES + $(foreach f,daemons daemons.conf frr.conf vtysh.conf support_bundle_commands.conf,\ + $(INSTALL) -D -m 0640 $(@D)/tools/etc/frr/$(f) \ + $(TARGET_DIR)/etc/frr/$(f) + ) + $(RM) $(TARGET_DIR)/etc/frr/*.sample +endef +FRR_POST_INSTALL_TARGET_HOOKS += FRR_INSTALL_CONFIG_FILES + +define FRR_PERMISSIONS + /etc/frr/daemons f 640 frr frr - - - - - + /etc/frr/daemons.conf f 640 frr frr - - - - - + /etc/frr/frr.conf f 640 frr frr - - - - - + /etc/frr/vtysh.conf f 640 frr frrvty - - - - - + /etc/frr/support_bundle_commands.conf f 640 frr frr +endef + +define FRR_USERS + frr -1 frr -1 * /var/run/frr - frrvty FRR user priv +endef + +define FRR_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 $(FRR_PKGDIR)/S50frr \ + $(TARGET_DIR)/etc/init.d/S50frr +endef + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/fscryptctl/Config.in b/package/fscryptctl/Config.in new file mode 100644 index 00000000..91b9ba8e --- /dev/null +++ b/package/fscryptctl/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_FSCRYPTCTL + bool "fscryptctl" + help + fscryptctl is a low-level tool written in C that handles raw + keys and manages policies for Linux filesystem encryption. + + Notice: Fscrypt support on EXT4 requires a kernel with + CONFIG_EXT4_ENCRYPTION=y and a file system with the + encryption option and block size equal to CPU page size + (BR2_TARGET_ROOTFS_EXT2_MKFS_OPTIONS="-O encrypt -b 4096") + + https://github.com/google/fscryptctl diff --git a/package/fscryptctl/fscryptctl.hash b/package/fscryptctl/fscryptctl.hash new file mode 100644 index 00000000..b06b96c1 --- /dev/null +++ b/package/fscryptctl/fscryptctl.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 970a8febbcbf315313711d8a7ee3d954dea593d8087744d3cba65f6cb4bebcc1 fscryptctl-f037dcf4354ce8f25d0f371b58dfe7a7ac27576f.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE diff --git a/package/fscryptctl/fscryptctl.mk b/package/fscryptctl/fscryptctl.mk new file mode 100644 index 00000000..4275bf2b --- /dev/null +++ b/package/fscryptctl/fscryptctl.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# fscryptctl +# +################################################################################ + +FSCRYPTCTL_VERSION = f037dcf4354ce8f25d0f371b58dfe7a7ac27576f +FSCRYPTCTL_SITE = $(call github,google,fscryptctl,$(FSCRYPTCTL_VERSION)) +FSCRYPTCTL_LICENSE = Apache-2.0 +FSCRYPTCTL_LICENSE_FILES = LICENSE + +define FSCRYPTCTL_BUILD_CMDS + $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) fscryptctl +endef + +define FSCRYPTCTL_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/fscryptctl $(TARGET_DIR)/usr/bin/fscryptctl +endef + +$(eval $(generic-package)) diff --git a/package/fstrcmp/0001-disable-rpath.patch b/package/fstrcmp/0001-disable-rpath.patch new file mode 100644 index 00000000..cec57e7e --- /dev/null +++ b/package/fstrcmp/0001-disable-rpath.patch @@ -0,0 +1,25 @@ +Remove rpath from linking command + +Fixes build error: + +lib/.libs/libfstrcmp.so: undefined reference to `__ctype_b_loc@GLIBC_2.3' +lib/.libs/libfstrcmp.so: undefined reference to `mbstowcs@GLIBC_2.2.5' +lib/.libs/libfstrcmp.so: undefined reference to `printf@GLIBC_2.2.5' +lib/.libs/libfstrcmp.so: undefined reference to `readlink@GLIBC_2.2.5' +lib/.libs/libfstrcmp.so: undefined reference to `malloc@GLIBC_2.2.5' +lib/.libs/libfstrcmp.so: undefined reference to `memcmp@GLIBC_2.2.5' +lib/.libs/libfstrcmp.so: undefined reference to `wcslen@GLIBC_2.2.5' + +Signed-off-by: Bernd Kuhls + +--- fstrcmp-0.7.D001/Makefile.in.orig 2014-03-05 01:13:45.000000000 +0100 ++++ fstrcmp-0.7.D001/Makefile.in 2019-04-07 13:55:07.817689231 +0200 +@@ -507,7 +507,7 @@ + lib/libfstrcmp.la: $(lib_obj) + rm -f $@ + $(LIBTOOL) --mode=link --tag=CC $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) \ +- -o $@ $(lib_obj) $(LIBS) -rpath $(libdir) -version-info 6:0:6 ++ -o $@ $(lib_obj) $(LIBS) -version-info 6:0:6 + + # + # The install of the *.la file automatically causes "$(LIBTOOL) --mode=install" diff --git a/package/fstrcmp/Config.in b/package/fstrcmp/Config.in new file mode 100644 index 00000000..04f11b0f --- /dev/null +++ b/package/fstrcmp/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_FSTRCMP + bool "fstrcmp" + depends on BR2_USE_WCHAR + help + The fstrcmp project provides a library that is used to make + fuzzy comparisons of strings and byte arrays, including multi- + byte character strings. + + http://fstrcmp.sourceforge.net/ + +comment "fstrcmp needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR diff --git a/package/fstrcmp/fstrcmp.hash b/package/fstrcmp/fstrcmp.hash new file mode 100644 index 00000000..9a43c59c --- /dev/null +++ b/package/fstrcmp/fstrcmp.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/fstrcmp/files/fstrcmp/0.7/ +md5 9c440bbdfcad9fd22e38f2388715b0cc fstrcmp-0.7.D001.tar.gz +sha1 bb848118fb157dc624ae9fac0566a64cc85f2ef2 fstrcmp-0.7.D001.tar.gz +# Locally computed +sha256 e4018e850f80700acee8da296e56e15b1eef711ab15157e542e7d7e1237c3476 fstrcmp-0.7.D001.tar.gz +sha256 5352e426b563eda9252d76be92337b49f7b5cfdd1302a1e8d99389840c0e46be LICENSE diff --git a/package/fstrcmp/fstrcmp.mk b/package/fstrcmp/fstrcmp.mk new file mode 100644 index 00000000..9c42159a --- /dev/null +++ b/package/fstrcmp/fstrcmp.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# fstrcmp +# +################################################################################ + +FSTRCMP_VERSION_MAJOR = 0.7 +FSTRCMP_VERSION = $(FSTRCMP_VERSION_MAJOR).D001 +FSTRCMP_SITE = https://sourceforge.net/projects/fstrcmp/files/fstrcmp/$(FSTRCMP_VERSION_MAJOR) +FSTRCMP_LICENSE = GPL-3.0+ +FSTRCMP_LICENSE_FILES = LICENSE +FSTRCMP_INSTALL_STAGING = YES +FSTRCMP_DEPENDENCIES = host-libtool +FSTRCMP_CONF_ENV = LIBTOOL="$(HOST_DIR)/bin/libtool" + +FSTRCMP_MAKE_OPTS = all-bin libdir/pkgconfig/fstrcmp.pc + +# We need to install the package files ourselves due to upstream trying +# to install a .lai file which is missing because of rpath removal +define FSTRCMP_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install-include + $(INSTALL) -D -m 755 $(@D)/lib/.libs/libfstrcmp.a $(STAGING_DIR)/usr/lib/libfstrcmp.a + $(INSTALL) -D -m 755 $(@D)/lib/libfstrcmp.la $(STAGING_DIR)/usr/lib/libfstrcmp.la + $(INSTALL) -D -m 755 $(@D)/libdir/pkgconfig/fstrcmp.pc $(STAGING_DIR)/usr/lib/pkgconfig/fstrcmp.pc +endef + +define FSTRCMP_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 755 $(@D)/bin/fstrcmp $(TARGET_DIR)/usr/bin/fstrcmp +endef + +$(eval $(autotools-package)) diff --git a/package/fswebcam/Config.in b/package/fswebcam/Config.in new file mode 100644 index 00000000..fbd077bc --- /dev/null +++ b/package/fswebcam/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_FSWEBCAM + bool "fswebcam" + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_GD + select BR2_PACKAGE_FREETYPE + select BR2_PACKAGE_JPEG + select BR2_PACKAGE_LIBPNG + help + fswebcam is a neat and simple webcam app. It captures images + from a V4L1/V4L2 compatible device or file, averages them to + reduce noise and draws a caption using the GD Graphics + Library which also handles compressing the image to PNG or + JPEG. The resulting image is saved to a file or sent to + stdio where it can be piped to something like ncftpput or + scp. + + https://www.sanslogic.co.uk/fswebcam/ + +comment "fswebcam needs a toolchain w/ dynamic library" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS diff --git a/package/fswebcam/fswebcam.hash b/package/fswebcam/fswebcam.hash new file mode 100644 index 00000000..bac16267 --- /dev/null +++ b/package/fswebcam/fswebcam.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 5702771cee6e3fa0f2bbbb72ecf3e5a253ff458c1f648f7e7c0d477e39f0ec80 fswebcam-e9f8094b6a3d1a49f99b2abec4e6ab4df33e2e33.tar.gz +sha256 204d8eff92f95aac4df6c8122bc1505f468f3a901e5a4cc08940e0ede1938994 LICENSE diff --git a/package/fswebcam/fswebcam.mk b/package/fswebcam/fswebcam.mk new file mode 100644 index 00000000..3a5b8c9e --- /dev/null +++ b/package/fswebcam/fswebcam.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# fswebcam +# +################################################################################ + +FSWEBCAM_VERSION = e9f8094b6a3d1a49f99b2abec4e6ab4df33e2e33 +FSWEBCAM_SITE = $(call github,fsphil,fswebcam,$(FSWEBCAM_VERSION)) +FSWEBCAM_LICENSE = GPL-2.0 +FSWEBCAM_LICENSE_FILES = LICENSE + +FSWEBCAM_DEPENDENCIES += freetype jpeg libpng gd + +$(eval $(autotools-package)) diff --git a/package/ftop/0001-overflow.patch b/package/ftop/0001-overflow.patch new file mode 100644 index 00000000..a3a27c37 --- /dev/null +++ b/package/ftop/0001-overflow.patch @@ -0,0 +1,17 @@ +Set tmp_buf and rate_buf to something ridiculously high to fix a buffer +overflow when COLUMNS is large. - JeR + +(Taken from gentoo portage) +Signed-off-by: Gustavo Zacarias + +--- a/src/ftop.c 2009-02-16 07:00:00.000000000 +0100 ++++ b/src/ftop.c 2013-09-06 14:42:41.788852952 +0200 +@@ -736,7 +736,7 @@ + { + size_t i, j, bytes, bar_total; + char more_procs_ch, more_files_ch, expanded_ch; +- char tmp_buf[80], rate_buf[80]; ++ char tmp_buf[2048], rate_buf[2048]; + char *tmp_str; + snapshot *s, *s_prev; + file_info *tmp_file; diff --git a/package/ftop/Config.in b/package/ftop/Config.in new file mode 100644 index 00000000..bee70bfd --- /dev/null +++ b/package/ftop/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_FTOP + bool "ftop" + select BR2_PACKAGE_NCURSES + help + Ftop is to files what top is to processes. + The progress of all open files and file systems can be + monitored. + + https://sourceforge.net/projects/ftop/ diff --git a/package/ftop/ftop.hash b/package/ftop/ftop.hash new file mode 100644 index 00000000..cf0d99db --- /dev/null +++ b/package/ftop/ftop.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/ftop/files/ftop/1.0/ +md5 57c68b6e7431f4219d9eddaebcb395da ftop-1.0.tar.bz2 +sha1 d3ef1b74825f50c7c442d299b29d23c2478f199b ftop-1.0.tar.bz2 +# Locally computed +sha256 3a705f4f291384344cd32c3dd5f5f6a7cd7cea7624c83cb7e923966dbcd47f82 ftop-1.0.tar.bz2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/ftop/ftop.mk b/package/ftop/ftop.mk new file mode 100644 index 00000000..5498fb52 --- /dev/null +++ b/package/ftop/ftop.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# ftop +# +################################################################################ + +FTOP_VERSION = 1.0 +FTOP_SOURCE = ftop-$(FTOP_VERSION).tar.bz2 +FTOP_SITE = https://sourceforge.net/projects/ftop/files/ftop/$(FTOP_VERSION) +FTOP_DEPENDENCIES = ncurses +FTOP_LICENSE = GPL-3.0+ +FTOP_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/fuse-overlayfs/Config.in b/package/fuse-overlayfs/Config.in new file mode 100644 index 00000000..30a3372c --- /dev/null +++ b/package/fuse-overlayfs/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_FUSE_OVERLAYFS + bool "fuse-overlayfs" + depends on BR2_USE_MMU # libfuse3 + depends on !BR2_STATIC_LIBS # libfuse3 + depends on BR2_TOOLCHAIN_HAS_THREADS # libfuse3 + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15 + select BR2_PACKAGE_LIBFUSE3 + help + FUSE-overlayfs is an implementation of overlay+shiftfs in + FUSE, intended to be used for rootless containers. + + http://github.com/containers/fuse-overlayfs + +comment "fuse-overlayfs needs a toolchain w/ threads, dynamic library, headers >= 3.15" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS || \ + !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15 diff --git a/package/fuse-overlayfs/fuse-overlayfs.hash b/package/fuse-overlayfs/fuse-overlayfs.hash new file mode 100644 index 00000000..9770ee0d --- /dev/null +++ b/package/fuse-overlayfs/fuse-overlayfs.hash @@ -0,0 +1,4 @@ +# Locally computed +sha256 7e5666aef4f2047e6a5202d6438b08c2d314dba5b40e431014e7dbb8168d9018 fuse-overlayfs-1.4.0.tar.gz +# Locally computed +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/fuse-overlayfs/fuse-overlayfs.mk b/package/fuse-overlayfs/fuse-overlayfs.mk new file mode 100644 index 00000000..707cacce --- /dev/null +++ b/package/fuse-overlayfs/fuse-overlayfs.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# fuse-overlayfs +# +################################################################################ + +FUSE_OVERLAYFS_VERSION = 1.4.0 +FUSE_OVERLAYFS_SITE = $(call github,containers,fuse-overlayfs,v$(FUSE_OVERLAYFS_VERSION)) +FUSE_OVERLAYFS_LICENSE = GPL-3.0 +FUSE_OVERLAYFS_LICENSE_FILES = COPYING + +FUSE_OVERLAYFS_AUTORECONF = YES +FUSE_OVERLAYFS_DEPENDENCIES = libfuse3 host-pkgconf + +$(eval $(autotools-package)) diff --git a/package/fwts/0001-build-do-not-use-Werror.patch b/package/fwts/0001-build-do-not-use-Werror.patch new file mode 100644 index 00000000..07f64b35 --- /dev/null +++ b/package/fwts/0001-build-do-not-use-Werror.patch @@ -0,0 +1,74 @@ +From 4c202c0fd7e5bd3264c720d715f05573047d9cf5 Mon Sep 17 00:00:00 2001 +From: Erico Nunes +Date: Fri, 12 Aug 2016 23:11:56 +0200 +Subject: [PATCH] fwts: do not use -Werror + +Warnings come and go with various compiler versions, so using -Werror is +prone to cause build failures with various compiler versions, especially +newer versions that introduce new warnings. + +Remove use of -Werror. + +Signed-off-by: Erico Nunes +[Fabrice: updated for 20.08.00] +Signed-off-by: Fabrice Fontaine +--- + configure.ac | 2 +- + src/Makefile.am | 2 +- + src/lib/src/Makefile.am | 2 +- + src/utilities/Makefile.am | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 0109d644..3ca599e1 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1,5 +1,5 @@ + AC_INIT([fwts],[0.1],[fwts-devel@lists.ubuntu.com]) +- AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects]) ++ AM_INIT_AUTOMAKE([-Wall foreign subdir-objects]) + m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) + AC_CANONICAL_HOST + AC_CONFIG_MACRO_DIR([m4]) +diff --git a/src/Makefile.am b/src/Makefile.am +index 52c637dd..d9d73f1c 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -14,7 +14,7 @@ AM_CPPFLAGS = \ + `pkg-config --silence-errors --cflags json` \ + `pkg-config --silence-errors --cflags json-c` \ + -pthread `pkg-config --cflags glib-2.0 gio-2.0` \ +- -Wall -Werror -Wextra \ ++ -Wall -Wextra \ + -Wno-address-of-packed-member \ + -Wfloat-equal -Wmissing-declarations \ + -Wno-long-long -Wredundant-decls -Wshadow \ +diff --git a/src/lib/src/Makefile.am b/src/lib/src/Makefile.am +index 54de7f44..e129ed16 100644 +--- a/src/lib/src/Makefile.am ++++ b/src/lib/src/Makefile.am +@@ -24,7 +24,7 @@ AM_CPPFLAGS = \ + `pkg-config --silence-errors --cflags json-c` \ + `pkg-config --cflags glib-2.0 gio-2.0` \ + -DDATAROOTDIR=\"$(datarootdir)\" \ +- -Wall -Werror -Wextra \ ++ -Wall -Wextra \ + -Wno-address-of-packed-member + + pkglib_LTLIBRARIES = libfwts.la +diff --git a/src/utilities/Makefile.am b/src/utilities/Makefile.am +index aa37de55..4d5297cc 100644 +--- a/src/utilities/Makefile.am ++++ b/src/utilities/Makefile.am +@@ -16,7 +16,7 @@ + # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + # + +-AM_CPPFLAGS = -Wall -Werror -Wextra -DDATAROOTDIR=\"$(datarootdir)\" \ ++AM_CPPFLAGS = -Wall -Wextra -DDATAROOTDIR=\"$(datarootdir)\" \ + `pkg-config --silence-errors --cflags json` \ + `pkg-config --silence-errors --cflags json-c` + +-- +2.17.1 + diff --git a/package/fwts/Config.in b/package/fwts/Config.in new file mode 100644 index 00000000..ac9a2e39 --- /dev/null +++ b/package/fwts/Config.in @@ -0,0 +1,40 @@ +config BR2_PACKAGE_FWTS + bool "fwts" + depends on BR2_i386 || BR2_x86_64 || BR2_aarch64 + depends on BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS # libbsd + depends on BR2_USE_MMU # libglib2 + depends on BR2_USE_WCHAR # libglib2, libbsd + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2, libbsd + depends on !BR2_STATIC_LIBS # libbsd + depends on BR2_TOOLCHAIN_USES_GLIBC # execinfo.h + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBBSD + help + Firmware Test Suite (FWTS) is a test suite that performs + sanity checks on firmware. It is intended to identify BIOS and + ACPI errors and if appropriate it will try to explain the + errors and give advice to help workaround or fix firmware + bugs. + + dtc (libfdt) is an optional dependency for fdt related tests. + + https://wiki.ubuntu.com/FirmwareTestSuite + +if BR2_PACKAGE_FWTS +config BR2_PACKAGE_FWTS_EFI_RUNTIME_MODULE + bool "efi_runtime module" + depends on BR2_LINUX_KERNEL + help + Firmware Test Suite (FWTS) provides a EFI runtime kernel + module required to run UEFI tests. + +comment "efi_runtime module needs a Linux kernel to be built" + depends on !BR2_LINUX_KERNEL +endif + +comment "fwts needs a glibc toolchain w/ wchar, threads, dynamic library" + depends on BR2_i386 || BR2_x86_64 || BR2_aarch64 + depends on BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS # libbsd + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_USES_GLIBC || BR2_STATIC_LIBS diff --git a/package/fwts/fwts.hash b/package/fwts/fwts.hash new file mode 100644 index 00000000..9b056731 --- /dev/null +++ b/package/fwts/fwts.hash @@ -0,0 +1,5 @@ +# Hash from: http://fwts.ubuntu.com/release/SHA256SUMS +sha256 bfe7993f1dd328b96a90ecfe92df67063df21afe4b4a103e498da6625c7c71b7 fwts-V20.08.00.tar.gz + +# Hash for license file +sha256 379eab3c1071a6f5b8acd3632586577ec9c47ef10601b10467e890b8ff8b3842 debian/copyright diff --git a/package/fwts/fwts.mk b/package/fwts/fwts.mk new file mode 100644 index 00000000..e4e9defe --- /dev/null +++ b/package/fwts/fwts.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# fwts +# +################################################################################ + +FWTS_VERSION = 20.08.00 +FWTS_SOURCE = fwts-V$(FWTS_VERSION).tar.gz +FWTS_SITE = http://fwts.ubuntu.com/release +FWTS_STRIP_COMPONENTS = 0 +FWTS_LICENSE = GPL-2.0, LGPL-2.1, Custom +FWTS_LICENSE_FILES = debian/copyright +FWTS_AUTORECONF = YES +FWTS_DEPENDENCIES = host-bison host-flex host-pkgconf libglib2 libbsd \ + $(if $(BR2_PACKAGE_BASH_COMPLETION),bash-completion) \ + $(if $(BR2_PACKAGE_DTC),dtc) + +ifdef BR2_PACKAGE_FWTS_EFI_RUNTIME_MODULE +FWTS_MODULE_SUBDIRS = efi_runtime +$(eval $(kernel-module)) +endif + +$(eval $(autotools-package)) diff --git a/package/fwup/Config.in b/package/fwup/Config.in new file mode 100644 index 00000000..0e3c57d3 --- /dev/null +++ b/package/fwup/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_FWUP + bool "fwup" + depends on BR2_USE_MMU + depends on BR2_USE_WCHAR + select BR2_PACKAGE_LIBARCHIVE + # required by libarchive to include zip compression + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_LIBCONFUSE + help + Fwup is a scriptable embedded Linux firmware update creator + and runner. + + https://github.com/fhunleth/fwup + +comment "fwup needs a toolchain w/ wchar" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR diff --git a/package/fwup/Config.in.host b/package/fwup/Config.in.host new file mode 100644 index 00000000..4e21c7db --- /dev/null +++ b/package/fwup/Config.in.host @@ -0,0 +1,7 @@ +config BR2_PACKAGE_HOST_FWUP + bool "host fwup" + help + Fwup is a scriptable embedded Linux firmware update creator + and runner. + + https://github.com/fhunleth/fwup diff --git a/package/fwup/fwup.hash b/package/fwup/fwup.hash new file mode 100644 index 00000000..87263192 --- /dev/null +++ b/package/fwup/fwup.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 9890f0328796f4315e6c1188df5c103855c530fbc14fbc8c12f4b24066c975f1 fwup-1.8.0.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE diff --git a/package/fwup/fwup.mk b/package/fwup/fwup.mk new file mode 100644 index 00000000..77eaa528 --- /dev/null +++ b/package/fwup/fwup.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# fwup +# +################################################################################ + +FWUP_VERSION = 1.8.0 +FWUP_SITE = $(call github,fhunleth,fwup,v$(FWUP_VERSION)) +FWUP_LICENSE = Apache-2.0 +FWUP_LICENSE_FILES = LICENSE +FWUP_DEPENDENCIES = host-pkgconf libconfuse libarchive +HOST_FWUP_DEPENDENCIES = host-pkgconf host-libconfuse host-libarchive +FWUP_AUTORECONF = YES +FWUP_CONF_ENV = ac_cv_path_HELP2MAN="" + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/fxload/Config.in b/package/fxload/Config.in new file mode 100644 index 00000000..f4d6ef54 --- /dev/null +++ b/package/fxload/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_FXLOAD + bool "fxload" + help + This program is conveniently able to download firmware into + FX, FX2, and FX2LP EZ-USB devices, as well as the original + AnchorChips EZ-USB. + It is intended to be invoked by hotplug scripts when the + unprogrammed device appears on the bus. + + http://sourceforge.net/projects/linux-hotplug/ diff --git a/package/fxload/fxload.hash b/package/fxload/fxload.hash new file mode 100644 index 00000000..68a6ba84 --- /dev/null +++ b/package/fxload/fxload.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 0cc8bfd2a7cbba2f68e0c5767477634922287943c91dd9fcf029fc8b9d577858 fxload-2008_10_13.tar.gz +sha256 dcc100d4161cc0b7177545ab6e47216f84857cda3843847c792a25289852dcaa COPYING diff --git a/package/fxload/fxload.mk b/package/fxload/fxload.mk new file mode 100644 index 00000000..d3d654a4 --- /dev/null +++ b/package/fxload/fxload.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# fxload +# +################################################################################ + +FXLOAD_VERSION = 2008_10_13 +FXLOAD_SITE = http://downloads.sourceforge.net/project/linux-hotplug/fxload/$(FXLOAD_VERSION) +FXLOAD_LICENSE = GPL-2.0+ +FXLOAD_LICENSE_FILES = COPYING + +FXLOAD_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_63261),y) +FXLOAD_CFLAGS += -O0 +endif + +define FXLOAD_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(FXLOAD_CFLAGS)" -C $(@D) all +endef + +define FXLOAD_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) prefix=$(TARGET_DIR) -C $(@D) install +endef + +$(eval $(generic-package)) diff --git a/package/gamin/0001-no-abstract-sockets.patch b/package/gamin/0001-no-abstract-sockets.patch new file mode 100644 index 00000000..3d659015 --- /dev/null +++ b/package/gamin/0001-no-abstract-sockets.patch @@ -0,0 +1,61 @@ +[PATCH]: Remove abstract socket namespace check breaking cross compilation + +Taken from openembedded: + +http://git.openembedded.org/cgit.cgi/openembedded/tree/recipes/gamin/files/no-abstract-sockets.patch + +Signed-off-by: Peter Korsgaard +--- /tmp/configure.in 2007-04-30 13:08:49.000000000 +0200 ++++ gamin-0.1.8/configure.in 2007-04-30 13:10:53.285251000 +0200 +@@ -354,51 +354,6 @@ + AC_DEFINE(HAVE_CMSGCRED,1,[Have cmsgcred structure]) + fi + +-#### Abstract sockets +- +-AC_MSG_CHECKING(abstract socket namespace) +-AC_LANG_PUSH(C) +-AC_RUN_IFELSE([AC_LANG_PROGRAM( +-[[ +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-]], +-[[ +- int listen_fd; +- struct sockaddr_un addr; +- +- listen_fd = socket (PF_UNIX, SOCK_STREAM, 0); +- +- if (listen_fd < 0) +- { +- fprintf (stderr, "socket() failed: %s\n", strerror (errno)); +- exit (1); +- } +- +- memset (&addr, '\0', sizeof (addr)); +- addr.sun_family = AF_UNIX; +- strcpy (addr.sun_path, "X/tmp/dbus-fake-socket-path-used-in-configure-test"); +- addr.sun_path[0] = '\0'; /* this is what makes it abstract */ +- +- if (bind (listen_fd, (struct sockaddr*) &addr, SUN_LEN (&addr)) < 0) +- { +- fprintf (stderr, "Abstract socket namespace bind() failed: %s\n", +- strerror (errno)); +- exit (1); +- } +- else +- exit (0); +-]])], +- [have_abstract_sockets=yes], +- [have_abstract_sockets=no]) +-AC_LANG_POP(C) +-AC_MSG_RESULT($have_abstract_sockets) +- + if test x$enable_abstract_sockets = xyes; then + if test x$have_abstract_sockets = xno; then + AC_MSG_ERROR([Abstract sockets explicitly required, and support not detected.]) diff --git a/package/gamin/0002-no-const-return.patch b/package/gamin/0002-no-const-return.patch new file mode 100644 index 00000000..3e6e9052 --- /dev/null +++ b/package/gamin/0002-no-const-return.patch @@ -0,0 +1,57 @@ +G_CONST_RETURN is deprecated in glib 2.30 so remove to to avoid +build failures. + +Upstream-Status: Pending + +Index: gamin-0.1.10/server/gam_node.c +=================================================================== +--- gamin-0.1.10.orig/server/gam_node.c 2011-10-12 15:25:45.217178314 +0100 ++++ gamin-0.1.10/server/gam_node.c 2011-10-12 15:26:17.807178293 +0100 +@@ -122,7 +122,7 @@ + * it has finished with the string. If it must keep it longer, it + * should makes its own copy. The returned string must not be freed. + */ +-G_CONST_RETURN char * ++const char * + gam_node_get_path(GamNode * node) + { + g_assert(node); +Index: gamin-0.1.10/server/gam_node.h +=================================================================== +--- gamin-0.1.10.orig/server/gam_node.h 2011-10-12 15:25:46.857178269 +0100 ++++ gamin-0.1.10/server/gam_node.h 2011-10-12 15:26:28.637178297 +0100 +@@ -58,7 +58,7 @@ + void gam_node_set_is_dir (GamNode *node, + gboolean is_dir); + +-G_CONST_RETURN char *gam_node_get_path (GamNode *node); ++const char *gam_node_get_path (GamNode *node); + + GList *gam_node_get_subscriptions (GamNode *node); + +Index: gamin-0.1.10/server/gam_subscription.c +=================================================================== +--- gamin-0.1.10.orig/server/gam_subscription.c 2011-10-12 15:25:40.497177525 +0100 ++++ gamin-0.1.10/server/gam_subscription.c 2011-10-12 15:26:39.867178304 +0100 +@@ -141,7 +141,7 @@ + * @param sub the GamSubscription + * @returns The path being monitored. It should not be freed. + */ +-G_CONST_RETURN char * ++const char * + gam_subscription_get_path(GamSubscription * sub) + { + if (sub == NULL) +Index: gamin-0.1.10/server/gam_subscription.h +=================================================================== +--- gamin-0.1.10.orig/server/gam_subscription.h 2011-10-12 15:25:28.507178266 +0100 ++++ gamin-0.1.10/server/gam_subscription.h 2011-10-12 15:25:58.817178285 +0100 +@@ -21,7 +21,7 @@ + + int gam_subscription_get_reqno (GamSubscription *sub); + +-G_CONST_RETURN char *gam_subscription_get_path (GamSubscription *sub); ++const char *gam_subscription_get_path (GamSubscription *sub); + + GamListener *gam_subscription_get_listener (GamSubscription *sub); + diff --git a/package/gamin/0003-fix-missing-PTHREAD_MUTEX_RECURSIVE_NP.patch b/package/gamin/0003-fix-missing-PTHREAD_MUTEX_RECURSIVE_NP.patch new file mode 100644 index 00000000..b5f2e6c5 --- /dev/null +++ b/package/gamin/0003-fix-missing-PTHREAD_MUTEX_RECURSIVE_NP.patch @@ -0,0 +1,39 @@ +Fix missing PTHREAD_MUTEX_RECURSIVE_NP + +The musl C library does not provide the non portable +PTHREAD_MUTEX_RECURSIVE_NP. In addition, uClibc does not define it as +a #define, but as an enum value, so doing a #if defined() check +doesn't work properly. Instead, add a AC_CHECK_DECL() autoconf check. + +Signed-off-by: Baruch Siach +[Thomas: switch to an autoconf check.] +Signed-off-by: Thomas Petazzoni + +Index: b/configure.in +=================================================================== +--- a/configure.in ++++ b/configure.in +@@ -294,6 +294,10 @@ + AC_DEFINE([HAVE_LIBPTHREAD], [], [Define if pthread library is there (-lpthread)]) + AC_DEFINE([HAVE_PTHREAD_H], [], [Define if is there]) + WITH_THREADS="1"])) ++ ++ AC_CHECK_DECL([PTHREAD_MUTEX_RECURSIVE_NP], ++ [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE_NP], [], [whether HAVE_PTHREAD_MUTEX_RECURSIVE_NP is defined])], ++ [], [#include ]) + fi + + dnl Use weak symbols on linux/gcc to avoid imposing libpthreads to apps +Index: b/libgamin/gam_data.c +=================================================================== +--- a/libgamin/gam_data.c ++++ b/libgamin/gam_data.c +@@ -470,7 +470,7 @@ + } + if (is_threaded > 0) { + pthread_mutexattr_init(&attr); +-#if defined(linux) || defined(PTHREAD_MUTEX_RECURSIVE_NP) ++#if defined(HAVE_PTHREAD_MUTEX_RECURSIVE_NP) + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP); + #else + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); diff --git a/package/gamin/Config.in b/package/gamin/Config.in new file mode 100644 index 00000000..55e037a4 --- /dev/null +++ b/package/gamin/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_GAMIN + bool "gamin" + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # glib2 + select BR2_PACKAGE_LIBGLIB2 + help + the File Alteration Monitor + + http://www.gnome.org/~veillard/gamin/sources + +comment "gamin needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/gamin/gamin.hash b/package/gamin/gamin.hash new file mode 100644 index 00000000..e28660dd --- /dev/null +++ b/package/gamin/gamin.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 28085f0ae8be10eab582ff186af4fb0be92cc6c62b5cc19cd09b295c7c2899a1 gamin-0.1.10.tar.gz +sha256 7f9ffc38883325f011f331a9d6074ffd0175fbcecd57f69c577fb3845f333876 COPYING diff --git a/package/gamin/gamin.mk b/package/gamin/gamin.mk new file mode 100644 index 00000000..4621b164 --- /dev/null +++ b/package/gamin/gamin.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# gamin +# +################################################################################ + +GAMIN_VERSION = 0.1.10 +GAMIN_SITE = http://www.gnome.org/~veillard/gamin/sources +GAMIN_AUTORECONF = YES +GAMIN_INSTALL_STAGING = YES +GAMIN_LICENSE = LGPL-2.0+ +GAMIN_LICENSE_FILES = COPYING + +# python support broken +GAMIN_CONF_OPTS += --without-python + +GAMIN_CONF_ENV = have_abstract_sockets=no + +GAMIN_DEPENDENCIES = libglib2 + +$(eval $(autotools-package)) diff --git a/package/gauche/Config.in b/package/gauche/Config.in new file mode 100644 index 00000000..c5f2a519 --- /dev/null +++ b/package/gauche/Config.in @@ -0,0 +1,28 @@ +# Architecture dependency from the bundled bdwgc. +config BR2_PACKAGE_GAUCHE_ARCH_SUPPORTS + bool + default y if BR2_arm || BR2_armeb || BR2_i386 || BR2_m68k || \ + BR2_mips || BR2_mipsel || BR2_mips64 || \ + BR2_mips64el || BR2_powerpc || BR2_powerpc64 || \ + BR2_powerpc64le || BR2_sh || BR2_x86_64 + +config BR2_PACKAGE_GAUCHE + bool "gauche" + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_USE_MMU # fork() + depends on BR2_PACKAGE_GAUCHE_ARCH_SUPPORTS + depends on !BR2_STATIC_LIBS + help + Gauche is an R7RS Scheme implementation developed to be a + handy script interpreter, which allows programmers and + system administrators to write small to large scripts for + their daily chores. Quick startup, built-in system + interface, native multilingual support are some of its + goals. + + http://practical-scheme.net/gauche/ + +comment "gauche needs a toolchain w/ NPTL, dynamic library" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_GAUCHE_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIBS diff --git a/package/gauche/gauche.hash b/package/gauche/gauche.hash new file mode 100644 index 00000000..dea23c1e --- /dev/null +++ b/package/gauche/gauche.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/gauche/files/Gauche/ +sha1 ad5e15021764b733ec913cca8b77c9a53d4ee997 Gauche-0.9.9.tgz +md5 20d8ed835ae0bc97cceed78a71f9857b Gauche-0.9.9.tgz +# Locally calculated +sha256 4ca9325322a7efadb9680d156eb7b53521321c9ca4955c4cbe738bc2e1d7f7fb Gauche-0.9.9.tgz +sha256 13cb582677dbcdc5b34313c59b4a014e74ef2f5fd80e514a0bd98fd8a4e45bed COPYING diff --git a/package/gauche/gauche.mk b/package/gauche/gauche.mk new file mode 100644 index 00000000..25203793 --- /dev/null +++ b/package/gauche/gauche.mk @@ -0,0 +1,45 @@ +################################################################################ +# +# gauche +# +################################################################################ + +GAUCHE_VERSION = 0.9.9 +GAUCHE_SOURCE = Gauche-$(GAUCHE_VERSION).tgz +GAUCHE_SITE = http://downloads.sourceforge.net/project/gauche/Gauche +GAUCHE_LICENSE = BSD-3-Clause, Boehm-gc, SRFI (srfi-11.scm), reload (reload.scm) +GAUCHE_LICENSE_FILES = COPYING +GAUCHE_DEPENDENCIES = host-gauche +# We're patching configure.ac +GAUCHE_AUTORECONF = YES + +HOST_GAUCHE_CONF_OPTS = --without-zlib +GAUCHE_CONF_OPTS = --without-libatomic-ops + +# Enable embedded axTLS +GAUCHE_TLS_LIBS = axtls + +ifeq ($(BR2_PACKAGE_MBEDTLS),y) +GAUCHE_TLS_LIBS += mbedtls +GAUCHE_DEPENDENCIES += mbedtls +endif + +GAUCHE_CONF_OPTS += --with-tls="$(GAUCHE_TLS_LIBS)" + +ifeq ($(BR2_PACKAGE_ZLIB),y) +GAUCHE_CONF_OPTS += --with-zlib=$(STAGING_DIR) +GAUCHE_DEPENDENCIES += zlib +else +GAUCHE_CONF_OPTS += --without-zlib +endif + +# Detection of c99 support in configure fails without WCHAR. To enable +# automatic detection of c99 support by configure, we need to enable +# WCHAR in toolchain. But actually we do not need WCHAR at gauche +# runtime. So reuesting WCHAR in toolchain just for automatic detection +# will be overkill. To solve this, explicitly -std=gnu99 is specified +# here. +GAUCHE_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -std=gnu99" + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/gawk/0001-no-versioned.patch b/package/gawk/0001-no-versioned.patch new file mode 100644 index 00000000..c5bbddde --- /dev/null +++ b/package/gawk/0001-no-versioned.patch @@ -0,0 +1,16 @@ +Disabled versioned installation of binaries to save space. + +Signed-off-by: Gustavo Zacarias +[Gustavo: update for 4.1.2] + +diff -Nura gawk-4.1.2.orig/Makefile.in gawk-4.1.2/Makefile.in +--- gawk-4.1.2.orig/Makefile.in 2015-04-29 16:11:09.367925925 -0300 ++++ gawk-4.1.2/Makefile.in 2015-04-29 16:11:25.308466495 -0300 +@@ -1173,6 +1173,7 @@ + # (This is done universally, which may not always be right, but + # there's no easy way to distinguish GNU from non-GNU systems.) + install-exec-hook: ++foo: + (cd $(DESTDIR)$(bindir); \ + $(LN) gawk$(EXEEXT) gawk-$(VERSION)$(EXEEXT) 2>/dev/null ; \ + if [ ! -f awk$(EXEEXT) ]; \ diff --git a/package/gawk/Config.in b/package/gawk/Config.in new file mode 100644 index 00000000..e9cf4c5f --- /dev/null +++ b/package/gawk/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_GAWK + bool "gawk" + depends on BR2_USE_WCHAR + depends on BR2_USE_MMU # fork() + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + A special-purpose programming language which is data driven + rather than procedural. Allows for simple data-reformatting + jobs with just a few lines of code. + + http://www.gnu.org/software/gawk/ + +comment "gawk needs a toolchain w/ wchar" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS diff --git a/package/gawk/gawk.hash b/package/gawk/gawk.hash new file mode 100644 index 00000000..91e50660 --- /dev/null +++ b/package/gawk/gawk.hash @@ -0,0 +1,6 @@ +# Locally calculated after checking pgp signature +# https://ftp.gnu.org/gnu/gawk/gawk-5.1.0.tar.xz.sig +# Primary key fingerprint: D196 7C63 7887 1317 7D86 1ED7 DF59 7815 937E C0D2 +sha256 cf5fea4ac5665fd5171af4716baab2effc76306a9572988d5ba1078f196382bd gawk-5.1.0.tar.xz +# Locally calculated +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/gawk/gawk.mk b/package/gawk/gawk.mk new file mode 100644 index 00000000..ae2bbe54 --- /dev/null +++ b/package/gawk/gawk.mk @@ -0,0 +1,49 @@ +################################################################################ +# +# gawk +# +################################################################################ + +GAWK_VERSION = 5.1.0 +GAWK_SOURCE = gawk-$(GAWK_VERSION).tar.xz +GAWK_SITE = $(BR2_GNU_MIRROR)/gawk +GAWK_DEPENDENCIES = host-gawk +GAWK_LICENSE = GPL-3.0+ +GAWK_LICENSE_FILES = COPYING + +ifeq ($(BR2_PACKAGE_LIBSIGSEGV),y) +GAWK_DEPENDENCIES += libsigsegv +endif + +# --with-mpfr requires an argument so just let +# configure find it automatically +ifeq ($(BR2_PACKAGE_MPFR),y) +GAWK_DEPENDENCIES += mpfr +else +GAWK_CONF_OPTS += --without-mpfr +endif + +# --with-readline requires an argument so just let +# configure find it automatically +ifeq ($(BR2_PACKAGE_READLINE),y) +GAWK_DEPENDENCIES += readline +else +GAWK_CONF_OPTS += --without-readline +endif + +HOST_GAWK_CONF_OPTS = --without-readline --without-mpfr + +define GAWK_CREATE_SYMLINK + ln -sf gawk $(TARGET_DIR)/usr/bin/awk +endef + +GAWK_POST_INSTALL_TARGET_HOOKS += GAWK_CREATE_SYMLINK + +define HOST_GAWK_CREATE_SYMLINK + ln -sf gawk $(HOST_DIR)/usr/bin/awk +endef + +HOST_GAWK_POST_INSTALL_HOOKS += HOST_GAWK_CREATE_SYMLINK + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/gcc/10.3.0/0001-Revert-re-PR-target-92095-internal-error-with-O1-mcp.patch b/package/gcc/10.3.0/0001-Revert-re-PR-target-92095-internal-error-with-O1-mcp.patch new file mode 100644 index 00000000..af0d2d7d --- /dev/null +++ b/package/gcc/10.3.0/0001-Revert-re-PR-target-92095-internal-error-with-O1-mcp.patch @@ -0,0 +1,328 @@ +From 0824d6819857f306583592bce96315893f91bd84 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Wed, 20 Jan 2021 23:26:29 +0100 +Subject: [PATCH] Revert "re PR target/92095 (internal error with -O1 + -mcpu=niagara2 -fPIE)" + +This reverts commit 0a83f1a441d7aaadecb368c237b6ee70bd7b91d6. + +Building the Buildroot defconfig qemu_sparc_ss10_defconfig using +gcc 8.4, 9.3 and 10 produce a broken rootfs that trigger illegal +instruction messages. + +gcc 8.3, 9.2 are the latest working gcc version. +git bisect between gcc 8.4 and 8.4 allowed to identify +the commit that introcuce the regression. + +Reverting this patch allowed to produce a working rootfs. + +Reported to gcc: +https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98784 + +Signed-off-by: Romain Naour +Cc: Eric Botcazou +--- + gcc/config/sparc/sparc-protos.h | 1 - + gcc/config/sparc/sparc.c | 121 +++++++----------- + gcc/config/sparc/sparc.md | 5 +- + .../gcc.c-torture/compile/20191108-1.c | 14 -- + gcc/testsuite/gcc.target/sparc/overflow-3.c | 2 +- + gcc/testsuite/gcc.target/sparc/overflow-4.c | 2 +- + gcc/testsuite/gcc.target/sparc/overflow-5.c | 2 +- + 7 files changed, 53 insertions(+), 94 deletions(-) + delete mode 100644 gcc/testsuite/gcc.c-torture/compile/20191108-1.c + +diff --git a/gcc/config/sparc/sparc-protos.h b/gcc/config/sparc/sparc-protos.h +index 5f9999a669c..37452b06415 100644 +--- a/gcc/config/sparc/sparc-protos.h ++++ b/gcc/config/sparc/sparc-protos.h +@@ -69,7 +69,6 @@ extern void sparc_split_reg_mem (rtx, rtx, machine_mode); + extern void sparc_split_mem_reg (rtx, rtx, machine_mode); + extern int sparc_split_reg_reg_legitimate (rtx, rtx); + extern void sparc_split_reg_reg (rtx, rtx, machine_mode); +-extern const char *output_load_pcrel_sym (rtx *); + extern const char *output_ubranch (rtx, rtx_insn *); + extern const char *output_cbranch (rtx, rtx, int, int, int, rtx_insn *); + extern const char *output_return (rtx_insn *); +diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c +index d0843102148..14d112d8ca8 100644 +--- a/gcc/config/sparc/sparc.c ++++ b/gcc/config/sparc/sparc.c +@@ -4157,6 +4157,13 @@ eligible_for_sibcall_delay (rtx_insn *trial) + static bool + sparc_cannot_force_const_mem (machine_mode mode, rtx x) + { ++ /* After IRA has run in PIC mode, it is too late to put anything into the ++ constant pool if the PIC register hasn't already been initialized. */ ++ if ((lra_in_progress || reload_in_progress) ++ && flag_pic ++ && !crtl->uses_pic_offset_table) ++ return true; ++ + switch (GET_CODE (x)) + { + case CONST_INT: +@@ -4192,11 +4199,9 @@ sparc_cannot_force_const_mem (machine_mode mode, rtx x) + } + + /* Global Offset Table support. */ +-static GTY(()) rtx got_symbol_rtx = NULL_RTX; +-static GTY(()) rtx got_register_rtx = NULL_RTX; + static GTY(()) rtx got_helper_rtx = NULL_RTX; +- +-static GTY(()) bool got_helper_needed = false; ++static GTY(()) rtx got_register_rtx = NULL_RTX; ++static GTY(()) rtx got_symbol_rtx = NULL_RTX; + + /* Return the SYMBOL_REF for the Global Offset Table. */ + +@@ -4209,6 +4214,27 @@ sparc_got (void) + return got_symbol_rtx; + } + ++#ifdef HAVE_GAS_HIDDEN ++# define USE_HIDDEN_LINKONCE 1 ++#else ++# define USE_HIDDEN_LINKONCE 0 ++#endif ++ ++static void ++get_pc_thunk_name (char name[32], unsigned int regno) ++{ ++ const char *reg_name = reg_names[regno]; ++ ++ /* Skip the leading '%' as that cannot be used in a ++ symbol name. */ ++ reg_name += 1; ++ ++ if (USE_HIDDEN_LINKONCE) ++ sprintf (name, "__sparc_get_pc_thunk.%s", reg_name); ++ else ++ ASM_GENERATE_INTERNAL_LABEL (name, "LADDPC", regno); ++} ++ + /* Wrapper around the load_pcrel_sym{si,di} patterns. */ + + static rtx +@@ -4228,78 +4254,30 @@ gen_load_pcrel_sym (rtx op0, rtx op1, rtx op2) + return insn; + } + +-/* Output the load_pcrel_sym{si,di} patterns. */ +- +-const char * +-output_load_pcrel_sym (rtx *operands) +-{ +- if (flag_delayed_branch) +- { +- output_asm_insn ("sethi\t%%hi(%a1-4), %0", operands); +- output_asm_insn ("call\t%a2", operands); +- output_asm_insn (" add\t%0, %%lo(%a1+4), %0", operands); +- } +- else +- { +- output_asm_insn ("sethi\t%%hi(%a1-8), %0", operands); +- output_asm_insn ("add\t%0, %%lo(%a1-4), %0", operands); +- output_asm_insn ("call\t%a2", operands); +- output_asm_insn (" nop", NULL); +- } +- +- if (operands[2] == got_helper_rtx) +- got_helper_needed = true; +- +- return ""; +-} +- +-#ifdef HAVE_GAS_HIDDEN +-# define USE_HIDDEN_LINKONCE 1 +-#else +-# define USE_HIDDEN_LINKONCE 0 +-#endif +- + /* Emit code to load the GOT register. */ + + void + load_got_register (void) + { +- rtx insn; ++ if (!got_register_rtx) ++ got_register_rtx = gen_rtx_REG (Pmode, GLOBAL_OFFSET_TABLE_REGNUM); + + if (TARGET_VXWORKS_RTP) +- { +- if (!got_register_rtx) +- got_register_rtx = pic_offset_table_rtx; +- +- insn = gen_vxworks_load_got (); +- } ++ emit_insn (gen_vxworks_load_got ()); + else + { +- if (!got_register_rtx) +- got_register_rtx = gen_rtx_REG (Pmode, GLOBAL_OFFSET_TABLE_REGNUM); +- + /* The GOT symbol is subject to a PC-relative relocation so we need a + helper function to add the PC value and thus get the final value. */ + if (!got_helper_rtx) + { + char name[32]; +- +- /* Skip the leading '%' as that cannot be used in a symbol name. */ +- if (USE_HIDDEN_LINKONCE) +- sprintf (name, "__sparc_get_pc_thunk.%s", +- reg_names[REGNO (got_register_rtx)] + 1); +- else +- ASM_GENERATE_INTERNAL_LABEL (name, "LADDPC", +- REGNO (got_register_rtx)); +- ++ get_pc_thunk_name (name, GLOBAL_OFFSET_TABLE_REGNUM); + got_helper_rtx = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (name)); + } + +- insn +- = gen_load_pcrel_sym (got_register_rtx, sparc_got (), got_helper_rtx); ++ emit_insn (gen_load_pcrel_sym (got_register_rtx, sparc_got (), ++ got_helper_rtx)); + } +- +- emit_insn (insn); + } + + /* Ensure that we are not using patterns that are not OK with PIC. */ +@@ -5464,7 +5442,7 @@ save_local_or_in_reg_p (unsigned int regno, int leaf_function) + return true; + + /* GOT register (%l7) if needed. */ +- if (got_register_rtx && regno == REGNO (got_register_rtx)) ++ if (regno == GLOBAL_OFFSET_TABLE_REGNUM && got_register_rtx) + return true; + + /* If the function accesses prior frames, the frame pointer and the return +@@ -12507,9 +12485,10 @@ static void + sparc_file_end (void) + { + /* If we need to emit the special GOT helper function, do so now. */ +- if (got_helper_needed) ++ if (got_helper_rtx) + { + const char *name = XSTR (got_helper_rtx, 0); ++ const char *reg_name = reg_names[GLOBAL_OFFSET_TABLE_REGNUM]; + #ifdef DWARF2_UNWIND_INFO + bool do_cfi; + #endif +@@ -12546,22 +12525,17 @@ sparc_file_end (void) + #ifdef DWARF2_UNWIND_INFO + do_cfi = dwarf2out_do_cfi_asm (); + if (do_cfi) +- output_asm_insn (".cfi_startproc", NULL); ++ fprintf (asm_out_file, "\t.cfi_startproc\n"); + #endif + if (flag_delayed_branch) +- { +- output_asm_insn ("jmp\t%%o7+8", NULL); +- output_asm_insn (" add\t%%o7, %0, %0", &got_register_rtx); +- } ++ fprintf (asm_out_file, "\tjmp\t%%o7+8\n\t add\t%%o7, %s, %s\n", ++ reg_name, reg_name); + else +- { +- output_asm_insn ("add\t%%o7, %0, %0", &got_register_rtx); +- output_asm_insn ("jmp\t%%o7+8", NULL); +- output_asm_insn (" nop", NULL); +- } ++ fprintf (asm_out_file, "\tadd\t%%o7, %s, %s\n\tjmp\t%%o7+8\n\t nop\n", ++ reg_name, reg_name); + #ifdef DWARF2_UNWIND_INFO + if (do_cfi) +- output_asm_insn (".cfi_endproc", NULL); ++ fprintf (asm_out_file, "\t.cfi_endproc\n"); + #endif + } + +@@ -13056,10 +13030,7 @@ sparc_init_pic_reg (void) + edge entry_edge; + rtx_insn *seq; + +- /* In PIC mode, we need to always initialize the PIC register if optimization +- is enabled, because we are called from IRA and LRA may later force things +- to the constant pool for optimization purposes. */ +- if (!flag_pic || (!crtl->uses_pic_offset_table && !optimize)) ++ if (!crtl->uses_pic_offset_table) + return; + + start_sequence (); +diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md +index 6e9ccb4ecfd..8fb0fa11aed 100644 +--- a/gcc/config/sparc/sparc.md ++++ b/gcc/config/sparc/sparc.md +@@ -1601,7 +1601,10 @@ + (clobber (reg:P O7_REG))] + "REGNO (operands[0]) == INTVAL (operands[3])" + { +- return output_load_pcrel_sym (operands); ++ if (flag_delayed_branch) ++ return "sethi\t%%hi(%a1-4), %0\n\tcall\t%a2\n\t add\t%0, %%lo(%a1+4), %0"; ++ else ++ return "sethi\t%%hi(%a1-8), %0\n\tadd\t%0, %%lo(%a1-4), %0\n\tcall\t%a2\n\t nop"; + } + [(set (attr "type") (const_string "multi")) + (set (attr "length") +diff --git a/gcc/testsuite/gcc.c-torture/compile/20191108-1.c b/gcc/testsuite/gcc.c-torture/compile/20191108-1.c +deleted file mode 100644 +index 7929751bb06..00000000000 +--- a/gcc/testsuite/gcc.c-torture/compile/20191108-1.c ++++ /dev/null +@@ -1,14 +0,0 @@ +-/* PR target/92095 */ +-/* Testcase by Sergei Trofimovich */ +- +-typedef union { +- double a; +- int b[2]; +-} c; +- +-double d(int e) +-{ +- c f; +- (&f)->b[0] = 15728640; +- return e ? -(&f)->a : (&f)->a; +-} +diff --git a/gcc/testsuite/gcc.target/sparc/overflow-3.c b/gcc/testsuite/gcc.target/sparc/overflow-3.c +index 52d6ab2b688..86dddfb09e6 100644 +--- a/gcc/testsuite/gcc.target/sparc/overflow-3.c ++++ b/gcc/testsuite/gcc.target/sparc/overflow-3.c +@@ -1,6 +1,6 @@ + /* { dg-do compile } */ + /* { dg-require-effective-target lp64 } */ +-/* { dg-options "-O -fno-pie" } */ ++/* { dg-options "-O" } */ + + #include + #include +diff --git a/gcc/testsuite/gcc.target/sparc/overflow-4.c b/gcc/testsuite/gcc.target/sparc/overflow-4.c +index c6121b958c3..019feee335c 100644 +--- a/gcc/testsuite/gcc.target/sparc/overflow-4.c ++++ b/gcc/testsuite/gcc.target/sparc/overflow-4.c +@@ -1,6 +1,6 @@ + /* { dg-do compile } */ + /* { dg-require-effective-target lp64 } */ +-/* { dg-options "-O -fno-pie -mno-vis3 -mno-vis4" } */ ++/* { dg-options "-O -mno-vis3 -mno-vis4" } */ + + #include + #include +diff --git a/gcc/testsuite/gcc.target/sparc/overflow-5.c b/gcc/testsuite/gcc.target/sparc/overflow-5.c +index f00283f6e7b..67d4ac38095 100644 +--- a/gcc/testsuite/gcc.target/sparc/overflow-5.c ++++ b/gcc/testsuite/gcc.target/sparc/overflow-5.c +@@ -1,6 +1,6 @@ + /* { dg-do compile } */ + /* { dg-require-effective-target lp64 } */ +-/* { dg-options "-O -fno-pie -mvis3" } */ ++/* { dg-options "-O -mvis3" } */ + + #include + #include +-- +2.30.2 + diff --git a/package/gcc/8.4.0/0001-xtensa-fix-PR-target-91880.patch b/package/gcc/8.4.0/0001-xtensa-fix-PR-target-91880.patch new file mode 100644 index 00000000..119826b5 --- /dev/null +++ b/package/gcc/8.4.0/0001-xtensa-fix-PR-target-91880.patch @@ -0,0 +1,51 @@ +From 28623c81b50663e946790649352cb1b3ed23954d Mon Sep 17 00:00:00 2001 +From: Max Filippov +Date: Tue, 24 Sep 2019 04:15:17 -0700 +Subject: [PATCH] xtensa: fix PR target/91880 + +Xtensa hwloop_optimize segfaults when zero overhead loop is about to be +inserted as the first instruction of the function. +Insert zero overhead loop instruction into new basic block before the +loop when basic block that precedes the loop is empty. + +2019-09-26 Max Filippov +gcc/ + * config/xtensa/xtensa.c (hwloop_optimize): Insert zero overhead + loop instruction into new basic block before the loop when basic + block that precedes the loop is empty. + +Signed-off-by: Max Filippov +[Romain: rebase on gcc 8.4.0] +Signed-off-by: Romain Naour +--- +Backported from: r276166 + + gcc/config/xtensa/xtensa.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c +index 08f9f7c7a8f..de206527810 100644 +--- a/gcc/config/xtensa/xtensa.c ++++ b/gcc/config/xtensa/xtensa.c +@@ -4232,7 +4232,9 @@ hwloop_optimize (hwloop_info loop) + + seq = get_insns (); + +- if (!single_succ_p (entry_bb) || vec_safe_length (loop->incoming) > 1) ++ entry_after = BB_END (entry_bb); ++ if (!single_succ_p (entry_bb) || vec_safe_length (loop->incoming) > 1 ++ || !entry_after) + { + basic_block new_bb; + edge e; +@@ -4253,7 +4255,6 @@ hwloop_optimize (hwloop_info loop) + } + else + { +- entry_after = BB_END (entry_bb); + while (DEBUG_INSN_P (entry_after) + || (NOTE_P (entry_after) + && NOTE_KIND (entry_after) != NOTE_INSN_BASIC_BLOCK)) +-- +2.24.1 + diff --git a/package/gcc/8.4.0/0002-Revert-re-PR-target-92095-internal-error-with-O1-mcp.patch b/package/gcc/8.4.0/0002-Revert-re-PR-target-92095-internal-error-with-O1-mcp.patch new file mode 100644 index 00000000..ec2bf883 --- /dev/null +++ b/package/gcc/8.4.0/0002-Revert-re-PR-target-92095-internal-error-with-O1-mcp.patch @@ -0,0 +1,322 @@ +From bb9b71752267444b4360442b89129bfc0ae938d3 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Wed, 20 Jan 2021 23:06:07 +0100 +Subject: [PATCH] Revert "re PR target/92095 (internal error with -O1 + -mcpu=niagara2 -fPIE)" + +This reverts commit 3fcce773f0f914c0499b130c6e9efa0e45ee54a0. + +Building the Buildroot defconfig qemu_sparc_ss10_defconfig using +gcc 8.4, 9.3 and 10 produce a broken rootfs that trigger illegal +instruction messages. + +gcc 8.3, 9.2 are the latest working gcc version. +git bisect between gcc 8.4 and 8.4 allowed to identify +the commit that introcuce the regression. + +Reverting this patch allowed to produce a working rootfs. + +Signed-off-by: Romain Naour +Cc: Eric Botcazou +--- + gcc/config/sparc/sparc-protos.h | 1 - + gcc/config/sparc/sparc.c | 121 +++++++----------- + gcc/config/sparc/sparc.md | 5 +- + .../gcc.c-torture/compile/20191108-1.c | 14 -- + gcc/testsuite/gcc.target/sparc/overflow-3.c | 2 +- + gcc/testsuite/gcc.target/sparc/overflow-4.c | 2 +- + gcc/testsuite/gcc.target/sparc/overflow-5.c | 2 +- + 7 files changed, 53 insertions(+), 94 deletions(-) + delete mode 100644 gcc/testsuite/gcc.c-torture/compile/20191108-1.c + +diff --git a/gcc/config/sparc/sparc-protos.h b/gcc/config/sparc/sparc-protos.h +index b3f73c2f2bf..71a067e871c 100644 +--- a/gcc/config/sparc/sparc-protos.h ++++ b/gcc/config/sparc/sparc-protos.h +@@ -69,7 +69,6 @@ extern void sparc_split_reg_mem (rtx, rtx, machine_mode); + extern void sparc_split_mem_reg (rtx, rtx, machine_mode); + extern int sparc_split_reg_reg_legitimate (rtx, rtx); + extern void sparc_split_reg_reg (rtx, rtx, machine_mode); +-extern const char *output_load_pcrel_sym (rtx *); + extern const char *output_ubranch (rtx, rtx_insn *); + extern const char *output_cbranch (rtx, rtx, int, int, int, rtx_insn *); + extern const char *output_return (rtx_insn *); +diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c +index 73032d33596..db1b428db90 100644 +--- a/gcc/config/sparc/sparc.c ++++ b/gcc/config/sparc/sparc.c +@@ -4200,6 +4200,13 @@ eligible_for_sibcall_delay (rtx_insn *trial) + static bool + sparc_cannot_force_const_mem (machine_mode mode, rtx x) + { ++ /* After IRA has run in PIC mode, it is too late to put anything into the ++ constant pool if the PIC register hasn't already been initialized. */ ++ if ((lra_in_progress || reload_in_progress) ++ && flag_pic ++ && !crtl->uses_pic_offset_table) ++ return true; ++ + switch (GET_CODE (x)) + { + case CONST_INT: +@@ -4235,11 +4242,9 @@ sparc_cannot_force_const_mem (machine_mode mode, rtx x) + } + + /* Global Offset Table support. */ +-static GTY(()) rtx got_symbol_rtx = NULL_RTX; +-static GTY(()) rtx got_register_rtx = NULL_RTX; + static GTY(()) rtx got_helper_rtx = NULL_RTX; +- +-static GTY(()) bool got_helper_needed = false; ++static GTY(()) rtx got_register_rtx = NULL_RTX; ++static GTY(()) rtx got_symbol_rtx = NULL_RTX; + + /* Return the SYMBOL_REF for the Global Offset Table. */ + +@@ -4252,6 +4257,27 @@ sparc_got (void) + return got_symbol_rtx; + } + ++#ifdef HAVE_GAS_HIDDEN ++# define USE_HIDDEN_LINKONCE 1 ++#else ++# define USE_HIDDEN_LINKONCE 0 ++#endif ++ ++static void ++get_pc_thunk_name (char name[32], unsigned int regno) ++{ ++ const char *reg_name = reg_names[regno]; ++ ++ /* Skip the leading '%' as that cannot be used in a ++ symbol name. */ ++ reg_name += 1; ++ ++ if (USE_HIDDEN_LINKONCE) ++ sprintf (name, "__sparc_get_pc_thunk.%s", reg_name); ++ else ++ ASM_GENERATE_INTERNAL_LABEL (name, "LADDPC", regno); ++} ++ + /* Wrapper around the load_pcrel_sym{si,di} patterns. */ + + static rtx +@@ -4271,78 +4297,30 @@ gen_load_pcrel_sym (rtx op0, rtx op1, rtx op2) + return insn; + } + +-/* Output the load_pcrel_sym{si,di} patterns. */ +- +-const char * +-output_load_pcrel_sym (rtx *operands) +-{ +- if (flag_delayed_branch) +- { +- output_asm_insn ("sethi\t%%hi(%a1-4), %0", operands); +- output_asm_insn ("call\t%a2", operands); +- output_asm_insn (" add\t%0, %%lo(%a1+4), %0", operands); +- } +- else +- { +- output_asm_insn ("sethi\t%%hi(%a1-8), %0", operands); +- output_asm_insn ("add\t%0, %%lo(%a1-4), %0", operands); +- output_asm_insn ("call\t%a2", operands); +- output_asm_insn (" nop", NULL); +- } +- +- if (operands[2] == got_helper_rtx) +- got_helper_needed = true; +- +- return ""; +-} +- +-#ifdef HAVE_GAS_HIDDEN +-# define USE_HIDDEN_LINKONCE 1 +-#else +-# define USE_HIDDEN_LINKONCE 0 +-#endif +- + /* Emit code to load the GOT register. */ + + void + load_got_register (void) + { +- rtx insn; ++ if (!got_register_rtx) ++ got_register_rtx = gen_rtx_REG (Pmode, GLOBAL_OFFSET_TABLE_REGNUM); + + if (TARGET_VXWORKS_RTP) +- { +- if (!got_register_rtx) +- got_register_rtx = pic_offset_table_rtx; +- +- insn = gen_vxworks_load_got (); +- } ++ emit_insn (gen_vxworks_load_got ()); + else + { +- if (!got_register_rtx) +- got_register_rtx = gen_rtx_REG (Pmode, GLOBAL_OFFSET_TABLE_REGNUM); +- + /* The GOT symbol is subject to a PC-relative relocation so we need a + helper function to add the PC value and thus get the final value. */ + if (!got_helper_rtx) + { + char name[32]; +- +- /* Skip the leading '%' as that cannot be used in a symbol name. */ +- if (USE_HIDDEN_LINKONCE) +- sprintf (name, "__sparc_get_pc_thunk.%s", +- reg_names[REGNO (got_register_rtx)] + 1); +- else +- ASM_GENERATE_INTERNAL_LABEL (name, "LADDPC", +- REGNO (got_register_rtx)); +- ++ get_pc_thunk_name (name, GLOBAL_OFFSET_TABLE_REGNUM); + got_helper_rtx = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (name)); + } + +- insn +- = gen_load_pcrel_sym (got_register_rtx, sparc_got (), got_helper_rtx); ++ emit_insn (gen_load_pcrel_sym (got_register_rtx, sparc_got (), ++ got_helper_rtx)); + } +- +- emit_insn (insn); + } + + /* Ensure that we are not using patterns that are not OK with PIC. */ +@@ -5494,7 +5472,7 @@ save_local_or_in_reg_p (unsigned int regno, int leaf_function) + return true; + + /* GOT register (%l7) if needed. */ +- if (got_register_rtx && regno == REGNO (got_register_rtx)) ++ if (regno == GLOBAL_OFFSET_TABLE_REGNUM && got_register_rtx) + return true; + + /* If the function accesses prior frames, the frame pointer and the return +@@ -12475,9 +12453,10 @@ static void + sparc_file_end (void) + { + /* If we need to emit the special GOT helper function, do so now. */ +- if (got_helper_needed) ++ if (got_helper_rtx) + { + const char *name = XSTR (got_helper_rtx, 0); ++ const char *reg_name = reg_names[GLOBAL_OFFSET_TABLE_REGNUM]; + #ifdef DWARF2_UNWIND_INFO + bool do_cfi; + #endif +@@ -12514,22 +12493,17 @@ sparc_file_end (void) + #ifdef DWARF2_UNWIND_INFO + do_cfi = dwarf2out_do_cfi_asm (); + if (do_cfi) +- output_asm_insn (".cfi_startproc", NULL); ++ fprintf (asm_out_file, "\t.cfi_startproc\n"); + #endif + if (flag_delayed_branch) +- { +- output_asm_insn ("jmp\t%%o7+8", NULL); +- output_asm_insn (" add\t%%o7, %0, %0", &got_register_rtx); +- } ++ fprintf (asm_out_file, "\tjmp\t%%o7+8\n\t add\t%%o7, %s, %s\n", ++ reg_name, reg_name); + else +- { +- output_asm_insn ("add\t%%o7, %0, %0", &got_register_rtx); +- output_asm_insn ("jmp\t%%o7+8", NULL); +- output_asm_insn (" nop", NULL); +- } ++ fprintf (asm_out_file, "\tadd\t%%o7, %s, %s\n\tjmp\t%%o7+8\n\t nop\n", ++ reg_name, reg_name); + #ifdef DWARF2_UNWIND_INFO + if (do_cfi) +- output_asm_insn (".cfi_endproc", NULL); ++ fprintf (asm_out_file, "\t.cfi_endproc\n"); + #endif + } + +@@ -13035,10 +13009,7 @@ sparc_init_pic_reg (void) + edge entry_edge; + rtx_insn *seq; + +- /* In PIC mode, we need to always initialize the PIC register if optimization +- is enabled, because we are called from IRA and LRA may later force things +- to the constant pool for optimization purposes. */ +- if (!flag_pic || (!crtl->uses_pic_offset_table && !optimize)) ++ if (!crtl->uses_pic_offset_table) + return; + + start_sequence (); +diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md +index 468e2cc5d3b..25134bd1148 100644 +--- a/gcc/config/sparc/sparc.md ++++ b/gcc/config/sparc/sparc.md +@@ -1601,7 +1601,10 @@ + (clobber (reg:P O7_REG))] + "REGNO (operands[0]) == INTVAL (operands[3])" + { +- return output_load_pcrel_sym (operands); ++ if (flag_delayed_branch) ++ return "sethi\t%%hi(%a1-4), %0\n\tcall\t%a2\n\t add\t%0, %%lo(%a1+4), %0"; ++ else ++ return "sethi\t%%hi(%a1-8), %0\n\tadd\t%0, %%lo(%a1-4), %0\n\tcall\t%a2\n\t nop"; + } + [(set (attr "type") (const_string "multi")) + (set (attr "length") +diff --git a/gcc/testsuite/gcc.c-torture/compile/20191108-1.c b/gcc/testsuite/gcc.c-torture/compile/20191108-1.c +deleted file mode 100644 +index 7929751bb06..00000000000 +--- a/gcc/testsuite/gcc.c-torture/compile/20191108-1.c ++++ /dev/null +@@ -1,14 +0,0 @@ +-/* PR target/92095 */ +-/* Testcase by Sergei Trofimovich */ +- +-typedef union { +- double a; +- int b[2]; +-} c; +- +-double d(int e) +-{ +- c f; +- (&f)->b[0] = 15728640; +- return e ? -(&f)->a : (&f)->a; +-} +diff --git a/gcc/testsuite/gcc.target/sparc/overflow-3.c b/gcc/testsuite/gcc.target/sparc/overflow-3.c +index 18253bb6e5e..8cb24f52f7b 100644 +--- a/gcc/testsuite/gcc.target/sparc/overflow-3.c ++++ b/gcc/testsuite/gcc.target/sparc/overflow-3.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O -fno-pie" } */ ++/* { dg-options "-O" } */ + /* { dg-require-effective-target lp64 } */ + + #include +diff --git a/gcc/testsuite/gcc.target/sparc/overflow-4.c b/gcc/testsuite/gcc.target/sparc/overflow-4.c +index fb30877efb9..868edea2b9e 100644 +--- a/gcc/testsuite/gcc.target/sparc/overflow-4.c ++++ b/gcc/testsuite/gcc.target/sparc/overflow-4.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O -fno-pie -mno-vis3" } */ ++/* { dg-options "-O -mno-vis3" } */ + /* { dg-require-effective-target lp64 } */ + + #include +diff --git a/gcc/testsuite/gcc.target/sparc/overflow-5.c b/gcc/testsuite/gcc.target/sparc/overflow-5.c +index 509d957715d..501ce04f7a1 100644 +--- a/gcc/testsuite/gcc.target/sparc/overflow-5.c ++++ b/gcc/testsuite/gcc.target/sparc/overflow-5.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O -fno-pie -mvis3" } */ ++/* { dg-options "-O -mvis3" } */ + /* { dg-require-effective-target lp64 } */ + + #include +-- +2.25.4 + diff --git a/package/gcc/9.4.0/0001-or1k-Fix-issue-with-set_got-clobbering-LR-r9.patch b/package/gcc/9.4.0/0001-or1k-Fix-issue-with-set_got-clobbering-LR-r9.patch new file mode 100644 index 00000000..185e16c1 --- /dev/null +++ b/package/gcc/9.4.0/0001-or1k-Fix-issue-with-set_got-clobbering-LR-r9.patch @@ -0,0 +1,105 @@ +From 014db5e5febec94e35c13ce89ee6b389328873a1 Mon Sep 17 00:00:00 2001 +From: shorne +Date: Sat, 31 Aug 2019 06:00:56 +0000 +Subject: [PATCH] or1k: Fix issue with set_got clobbering LR (r9) + +When compiling glibc we found that the GOT register was being allocated +r9 when the instruction was still set_got_tmp. That is a problem +because r9 is the Link Register (LR) in OpenRISC which is used/clobbered +in set_got. We cannot use r9 as the GOT register. Also, we cannot +simply say set_got_tmp clobbers r9 as this is the reason for having the +temporary set_got_tmp. + +Fix by using a register class constraint that does not allow r9 during +register allocation. + +gcc/ChangeLog: + + * config/or1k/constraints.md (t): New constraint. + * config/or1k/or1k.h (GOT_REGS): New register class. + * config/or1k/or1k.md (set_got_tmp, set_got): Use t contraint. + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@275242 138bc75d-0d04-0410-961f-82ee72b054a4 +(cherry picked from commit 5b9471ffca25d39635680516ba2ff85295480fc3) +Signed-off-by: Romain Naour +--- + gcc/config/or1k/constraints.md | 4 ++++ + gcc/config/or1k/or1k.h | 3 +++ + gcc/config/or1k/or1k.md | 4 ++-- + 3 files changed, 9 insertions(+), 2 deletions(-) + +diff --git a/gcc/config/or1k/constraints.md b/gcc/config/or1k/constraints.md +index 93da8c058c6..a16b749008f 100644 +--- a/gcc/config/or1k/constraints.md ++++ b/gcc/config/or1k/constraints.md +@@ -24,6 +24,7 @@ + + ; We use: + ; c - sibcall registers ++; t - got address registers (excludes LR (r9) which is clobbered by set_got) + ; I - constant signed 16-bit + ; K - constant unsigned 16-bit + ; M - constant signed 16-bit shifted left 16-bits (l.movhi) +@@ -32,6 +33,9 @@ + (define_register_constraint "c" "SIBCALL_REGS" + "Registers which can hold a sibling call address") + ++(define_register_constraint "t" "GOT_REGS" ++ "Registers which can be used to store the Global Offset Table (GOT) address.") ++ + ;; Immediates + (define_constraint "I" + "A signed 16-bit immediate in the range -32768 to 32767." +diff --git a/gcc/config/or1k/or1k.h b/gcc/config/or1k/or1k.h +index 6dda230f217..feee702d89c 100644 +--- a/gcc/config/or1k/or1k.h ++++ b/gcc/config/or1k/or1k.h +@@ -189,6 +189,7 @@ enum reg_class + { + NO_REGS, + SIBCALL_REGS, ++ GOT_REGS, + GENERAL_REGS, + FLAG_REGS, + ALL_REGS, +@@ -200,6 +201,7 @@ enum reg_class + #define REG_CLASS_NAMES { \ + "NO_REGS", \ + "SIBCALL_REGS", \ ++ "GOT_REGS", \ + "GENERAL_REGS", \ + "FLAG_REGS", \ + "ALL_REGS" } +@@ -212,6 +214,7 @@ enum reg_class + #define REG_CLASS_CONTENTS \ + { { 0x00000000, 0x00000000 }, \ + { SIBCALL_REGS_MASK, 0 }, \ ++ { 0xfffffdff, 0x00000000 }, \ + { 0xffffffff, 0x00000003 }, \ + { 0x00000000, 0x00000004 }, \ + { 0xffffffff, 0x00000007 } \ +diff --git a/gcc/config/or1k/or1k.md b/gcc/config/or1k/or1k.md +index 2dad51cd46b..88f3f02630f 100644 +--- a/gcc/config/or1k/or1k.md ++++ b/gcc/config/or1k/or1k.md +@@ -595,7 +595,7 @@ + ;; set_got pattern below. This works because the set_got_tmp insn is the + ;; first insn in the stream and that it isn't moved during RA. + (define_insn "set_got_tmp" +- [(set (match_operand:SI 0 "register_operand" "=r") ++ [(set (match_operand:SI 0 "register_operand" "=t") + (unspec_volatile:SI [(const_int 0)] UNSPECV_SET_GOT))] + "" + { +@@ -604,7 +604,7 @@ + + ;; The insn to initialize the GOT. + (define_insn "set_got" +- [(set (match_operand:SI 0 "register_operand" "=r") ++ [(set (match_operand:SI 0 "register_operand" "=t") + (unspec:SI [(const_int 0)] UNSPEC_SET_GOT)) + (clobber (reg:SI LR_REGNUM))] + "" +-- +2.31.1 + diff --git a/package/gcc/9.4.0/0002-gcc-define-_REENTRANT-for-OpenRISC-when-pthread-is-p.patch b/package/gcc/9.4.0/0002-gcc-define-_REENTRANT-for-OpenRISC-when-pthread-is-p.patch new file mode 100644 index 00000000..5ac03d7c --- /dev/null +++ b/package/gcc/9.4.0/0002-gcc-define-_REENTRANT-for-OpenRISC-when-pthread-is-p.patch @@ -0,0 +1,31 @@ +From f80e9941739fb3973b61fc6a5abddef5ad2faf73 Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Fri, 27 Mar 2020 21:23:53 +0100 +Subject: [PATCH] gcc: define _REENTRANT for OpenRISC when -pthread is passed + +The detection of pthread support fails on OpenRISC unless _REENTRANT +is defined. Added the CPP_SPEC definition to correct this. + +Patch sent upstream: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94372 + +Signed-off-by: Bernd Kuhls +--- + gcc/config/or1k/linux.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/gcc/config/or1k/linux.h b/gcc/config/or1k/linux.h +index cbdc781418f..36303af892c 100644 +--- a/gcc/config/or1k/linux.h ++++ b/gcc/config/or1k/linux.h +@@ -32,6 +32,8 @@ + #undef MUSL_DYNAMIC_LINKER + #define MUSL_DYNAMIC_LINKER "/lib/ld-musl-or1k.so.1" + ++#define CPP_SPEC "%{pthread:-D_REENTRANT}" ++ + #undef LINK_SPEC + #define LINK_SPEC "%{h*} \ + %{static:-Bstatic} \ +-- +2.31.1 + diff --git a/package/gcc/9.4.0/0003-Revert-re-PR-target-92095-internal-error-with-O1-mcp.patch b/package/gcc/9.4.0/0003-Revert-re-PR-target-92095-internal-error-with-O1-mcp.patch new file mode 100644 index 00000000..0c69de93 --- /dev/null +++ b/package/gcc/9.4.0/0003-Revert-re-PR-target-92095-internal-error-with-O1-mcp.patch @@ -0,0 +1,325 @@ +From 1107ecc3e8af31adc7bbd4e08c0614836bd1cebd Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Wed, 20 Jan 2021 23:22:16 +0100 +Subject: [PATCH] Revert "re PR target/92095 (internal error with -O1 + -mcpu=niagara2 -fPIE)" + +This reverts commit 6bf2990842388101897b6f465524cbc295ee8cf9. + +Building the Buildroot defconfig qemu_sparc_ss10_defconfig using +gcc 8.4, 9.3 and 10 produce a broken rootfs that trigger illegal +instruction messages. + +gcc 8.3, 9.2 are the latest working gcc version. +git bisect between gcc 8.4 and 8.4 allowed to identify +the commit that introcuce the regression. + +Reverting this patch allowed to produce a working rootfs. + +Signed-off-by: Romain Naour +Cc: Eric Botcazou +--- + gcc/config/sparc/sparc-protos.h | 1 - + gcc/config/sparc/sparc.c | 121 +++++++----------- + gcc/config/sparc/sparc.md | 5 +- + .../gcc.c-torture/compile/20191108-1.c | 14 -- + gcc/testsuite/gcc.target/sparc/overflow-3.c | 2 +- + gcc/testsuite/gcc.target/sparc/overflow-4.c | 2 +- + gcc/testsuite/gcc.target/sparc/overflow-5.c | 2 +- + 7 files changed, 53 insertions(+), 94 deletions(-) + delete mode 100644 gcc/testsuite/gcc.c-torture/compile/20191108-1.c + +diff --git a/gcc/config/sparc/sparc-protos.h b/gcc/config/sparc/sparc-protos.h +index f1c120c4860..f4b6f00a7b1 100644 +--- a/gcc/config/sparc/sparc-protos.h ++++ b/gcc/config/sparc/sparc-protos.h +@@ -69,7 +69,6 @@ extern void sparc_split_reg_mem (rtx, rtx, machine_mode); + extern void sparc_split_mem_reg (rtx, rtx, machine_mode); + extern int sparc_split_reg_reg_legitimate (rtx, rtx); + extern void sparc_split_reg_reg (rtx, rtx, machine_mode); +-extern const char *output_load_pcrel_sym (rtx *); + extern const char *output_ubranch (rtx, rtx_insn *); + extern const char *output_cbranch (rtx, rtx, int, int, int, rtx_insn *); + extern const char *output_return (rtx_insn *); +diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c +index 0553dc501e6..516dcf96d7b 100644 +--- a/gcc/config/sparc/sparc.c ++++ b/gcc/config/sparc/sparc.c +@@ -4170,6 +4170,13 @@ eligible_for_sibcall_delay (rtx_insn *trial) + static bool + sparc_cannot_force_const_mem (machine_mode mode, rtx x) + { ++ /* After IRA has run in PIC mode, it is too late to put anything into the ++ constant pool if the PIC register hasn't already been initialized. */ ++ if ((lra_in_progress || reload_in_progress) ++ && flag_pic ++ && !crtl->uses_pic_offset_table) ++ return true; ++ + switch (GET_CODE (x)) + { + case CONST_INT: +@@ -4205,11 +4212,9 @@ sparc_cannot_force_const_mem (machine_mode mode, rtx x) + } + + /* Global Offset Table support. */ +-static GTY(()) rtx got_symbol_rtx = NULL_RTX; +-static GTY(()) rtx got_register_rtx = NULL_RTX; + static GTY(()) rtx got_helper_rtx = NULL_RTX; +- +-static GTY(()) bool got_helper_needed = false; ++static GTY(()) rtx got_register_rtx = NULL_RTX; ++static GTY(()) rtx got_symbol_rtx = NULL_RTX; + + /* Return the SYMBOL_REF for the Global Offset Table. */ + +@@ -4222,6 +4227,27 @@ sparc_got (void) + return got_symbol_rtx; + } + ++#ifdef HAVE_GAS_HIDDEN ++# define USE_HIDDEN_LINKONCE 1 ++#else ++# define USE_HIDDEN_LINKONCE 0 ++#endif ++ ++static void ++get_pc_thunk_name (char name[32], unsigned int regno) ++{ ++ const char *reg_name = reg_names[regno]; ++ ++ /* Skip the leading '%' as that cannot be used in a ++ symbol name. */ ++ reg_name += 1; ++ ++ if (USE_HIDDEN_LINKONCE) ++ sprintf (name, "__sparc_get_pc_thunk.%s", reg_name); ++ else ++ ASM_GENERATE_INTERNAL_LABEL (name, "LADDPC", regno); ++} ++ + /* Wrapper around the load_pcrel_sym{si,di} patterns. */ + + static rtx +@@ -4241,78 +4267,30 @@ gen_load_pcrel_sym (rtx op0, rtx op1, rtx op2) + return insn; + } + +-/* Output the load_pcrel_sym{si,di} patterns. */ +- +-const char * +-output_load_pcrel_sym (rtx *operands) +-{ +- if (flag_delayed_branch) +- { +- output_asm_insn ("sethi\t%%hi(%a1-4), %0", operands); +- output_asm_insn ("call\t%a2", operands); +- output_asm_insn (" add\t%0, %%lo(%a1+4), %0", operands); +- } +- else +- { +- output_asm_insn ("sethi\t%%hi(%a1-8), %0", operands); +- output_asm_insn ("add\t%0, %%lo(%a1-4), %0", operands); +- output_asm_insn ("call\t%a2", operands); +- output_asm_insn (" nop", NULL); +- } +- +- if (operands[2] == got_helper_rtx) +- got_helper_needed = true; +- +- return ""; +-} +- +-#ifdef HAVE_GAS_HIDDEN +-# define USE_HIDDEN_LINKONCE 1 +-#else +-# define USE_HIDDEN_LINKONCE 0 +-#endif +- + /* Emit code to load the GOT register. */ + + void + load_got_register (void) + { +- rtx insn; ++ if (!got_register_rtx) ++ got_register_rtx = gen_rtx_REG (Pmode, GLOBAL_OFFSET_TABLE_REGNUM); + + if (TARGET_VXWORKS_RTP) +- { +- if (!got_register_rtx) +- got_register_rtx = pic_offset_table_rtx; +- +- insn = gen_vxworks_load_got (); +- } ++ emit_insn (gen_vxworks_load_got ()); + else + { +- if (!got_register_rtx) +- got_register_rtx = gen_rtx_REG (Pmode, GLOBAL_OFFSET_TABLE_REGNUM); +- + /* The GOT symbol is subject to a PC-relative relocation so we need a + helper function to add the PC value and thus get the final value. */ + if (!got_helper_rtx) + { + char name[32]; +- +- /* Skip the leading '%' as that cannot be used in a symbol name. */ +- if (USE_HIDDEN_LINKONCE) +- sprintf (name, "__sparc_get_pc_thunk.%s", +- reg_names[REGNO (got_register_rtx)] + 1); +- else +- ASM_GENERATE_INTERNAL_LABEL (name, "LADDPC", +- REGNO (got_register_rtx)); +- ++ get_pc_thunk_name (name, GLOBAL_OFFSET_TABLE_REGNUM); + got_helper_rtx = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (name)); + } + +- insn +- = gen_load_pcrel_sym (got_register_rtx, sparc_got (), got_helper_rtx); ++ emit_insn (gen_load_pcrel_sym (got_register_rtx, sparc_got (), ++ got_helper_rtx)); + } +- +- emit_insn (insn); + } + + /* Ensure that we are not using patterns that are not OK with PIC. */ +@@ -5477,7 +5455,7 @@ save_local_or_in_reg_p (unsigned int regno, int leaf_function) + return true; + + /* GOT register (%l7) if needed. */ +- if (got_register_rtx && regno == REGNO (got_register_rtx)) ++ if (regno == GLOBAL_OFFSET_TABLE_REGNUM && got_register_rtx) + return true; + + /* If the function accesses prior frames, the frame pointer and the return +@@ -12520,9 +12498,10 @@ static void + sparc_file_end (void) + { + /* If we need to emit the special GOT helper function, do so now. */ +- if (got_helper_needed) ++ if (got_helper_rtx) + { + const char *name = XSTR (got_helper_rtx, 0); ++ const char *reg_name = reg_names[GLOBAL_OFFSET_TABLE_REGNUM]; + #ifdef DWARF2_UNWIND_INFO + bool do_cfi; + #endif +@@ -12559,22 +12538,17 @@ sparc_file_end (void) + #ifdef DWARF2_UNWIND_INFO + do_cfi = dwarf2out_do_cfi_asm (); + if (do_cfi) +- output_asm_insn (".cfi_startproc", NULL); ++ fprintf (asm_out_file, "\t.cfi_startproc\n"); + #endif + if (flag_delayed_branch) +- { +- output_asm_insn ("jmp\t%%o7+8", NULL); +- output_asm_insn (" add\t%%o7, %0, %0", &got_register_rtx); +- } ++ fprintf (asm_out_file, "\tjmp\t%%o7+8\n\t add\t%%o7, %s, %s\n", ++ reg_name, reg_name); + else +- { +- output_asm_insn ("add\t%%o7, %0, %0", &got_register_rtx); +- output_asm_insn ("jmp\t%%o7+8", NULL); +- output_asm_insn (" nop", NULL); +- } ++ fprintf (asm_out_file, "\tadd\t%%o7, %s, %s\n\tjmp\t%%o7+8\n\t nop\n", ++ reg_name, reg_name); + #ifdef DWARF2_UNWIND_INFO + if (do_cfi) +- output_asm_insn (".cfi_endproc", NULL); ++ fprintf (asm_out_file, "\t.cfi_endproc\n"); + #endif + } + +@@ -13080,10 +13054,7 @@ sparc_init_pic_reg (void) + edge entry_edge; + rtx_insn *seq; + +- /* In PIC mode, we need to always initialize the PIC register if optimization +- is enabled, because we are called from IRA and LRA may later force things +- to the constant pool for optimization purposes. */ +- if (!flag_pic || (!crtl->uses_pic_offset_table && !optimize)) ++ if (!crtl->uses_pic_offset_table) + return; + + start_sequence (); +diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md +index d9ef79c13cc..6dbd054f1c7 100644 +--- a/gcc/config/sparc/sparc.md ++++ b/gcc/config/sparc/sparc.md +@@ -1601,7 +1601,10 @@ + (clobber (reg:P O7_REG))] + "REGNO (operands[0]) == INTVAL (operands[3])" + { +- return output_load_pcrel_sym (operands); ++ if (flag_delayed_branch) ++ return "sethi\t%%hi(%a1-4), %0\n\tcall\t%a2\n\t add\t%0, %%lo(%a1+4), %0"; ++ else ++ return "sethi\t%%hi(%a1-8), %0\n\tadd\t%0, %%lo(%a1-4), %0\n\tcall\t%a2\n\t nop"; + } + [(set (attr "type") (const_string "multi")) + (set (attr "length") +diff --git a/gcc/testsuite/gcc.c-torture/compile/20191108-1.c b/gcc/testsuite/gcc.c-torture/compile/20191108-1.c +deleted file mode 100644 +index 7929751bb06..00000000000 +--- a/gcc/testsuite/gcc.c-torture/compile/20191108-1.c ++++ /dev/null +@@ -1,14 +0,0 @@ +-/* PR target/92095 */ +-/* Testcase by Sergei Trofimovich */ +- +-typedef union { +- double a; +- int b[2]; +-} c; +- +-double d(int e) +-{ +- c f; +- (&f)->b[0] = 15728640; +- return e ? -(&f)->a : (&f)->a; +-} +diff --git a/gcc/testsuite/gcc.target/sparc/overflow-3.c b/gcc/testsuite/gcc.target/sparc/overflow-3.c +index 52d6ab2b688..86dddfb09e6 100644 +--- a/gcc/testsuite/gcc.target/sparc/overflow-3.c ++++ b/gcc/testsuite/gcc.target/sparc/overflow-3.c +@@ -1,6 +1,6 @@ + /* { dg-do compile } */ + /* { dg-require-effective-target lp64 } */ +-/* { dg-options "-O -fno-pie" } */ ++/* { dg-options "-O" } */ + + #include + #include +diff --git a/gcc/testsuite/gcc.target/sparc/overflow-4.c b/gcc/testsuite/gcc.target/sparc/overflow-4.c +index c6121b958c3..019feee335c 100644 +--- a/gcc/testsuite/gcc.target/sparc/overflow-4.c ++++ b/gcc/testsuite/gcc.target/sparc/overflow-4.c +@@ -1,6 +1,6 @@ + /* { dg-do compile } */ + /* { dg-require-effective-target lp64 } */ +-/* { dg-options "-O -fno-pie -mno-vis3 -mno-vis4" } */ ++/* { dg-options "-O -mno-vis3 -mno-vis4" } */ + + #include + #include +diff --git a/gcc/testsuite/gcc.target/sparc/overflow-5.c b/gcc/testsuite/gcc.target/sparc/overflow-5.c +index f00283f6e7b..67d4ac38095 100644 +--- a/gcc/testsuite/gcc.target/sparc/overflow-5.c ++++ b/gcc/testsuite/gcc.target/sparc/overflow-5.c +@@ -1,6 +1,6 @@ + /* { dg-do compile } */ + /* { dg-require-effective-target lp64 } */ +-/* { dg-options "-O -fno-pie -mvis3" } */ ++/* { dg-options "-O -mvis3" } */ + + #include + #include +-- +2.31.1 + diff --git a/package/gcc/Config.in.host b/package/gcc/Config.in.host new file mode 100644 index 00000000..a68bdc1b --- /dev/null +++ b/package/gcc/Config.in.host @@ -0,0 +1,143 @@ +comment "GCC Options" + +choice + prompt "GCC compiler Version" + default BR2_GCC_VERSION_ARC if BR2_arc + default BR2_GCC_VERSION_CSKY if BR2_csky + default BR2_GCC_VERSION_9_X + help + Select the version of gcc you wish to use. + +config BR2_GCC_VERSION_ARC + bool "gcc arc (10.x)" + # Only supported architecture + depends on BR2_arc + select BR2_TOOLCHAIN_GCC_AT_LEAST_9 + +config BR2_GCC_VERSION_CSKY + bool "gcc csky" + # Only supported architecture + depends on BR2_csky + select BR2_TOOLCHAIN_GCC_AT_LEAST_6 + +config BR2_GCC_VERSION_8_X + bool "gcc 8.x" + depends on !BR2_ARCH_NEEDS_GCC_AT_LEAST_9 + # Broken or unsupported architectures + depends on !BR2_or1k + select BR2_TOOLCHAIN_GCC_AT_LEAST_8 + +config BR2_GCC_VERSION_9_X + bool "gcc 9.x" + depends on !BR2_ARCH_NEEDS_GCC_AT_LEAST_10 + # powerpc spe support has been deprecated since gcc 8.x. + # https://gcc.gnu.org/ml/gcc/2018-04/msg00102.html + depends on !BR2_powerpc_SPE + # C-SKY sk610 needs abiv1, which is not supported in + # upstream gcc. C-SKY gcc upstream support not tested + # with upstream binutils and glibc. + depends on !BR2_csky + select BR2_TOOLCHAIN_GCC_AT_LEAST_9 + +config BR2_GCC_VERSION_10_X + bool "gcc 10.x" + # powerpc spe support has been deprecated since gcc 8.x. + # https://gcc.gnu.org/ml/gcc/2018-04/msg00102.html + depends on !BR2_powerpc_SPE + # C-SKY sk610 needs abiv1, which is not supported in + # upstream gcc. C-SKY gcc upstream support not tested + # with upstream binutils and glibc. + depends on !BR2_csky + select BR2_TOOLCHAIN_GCC_AT_LEAST_10 + +endchoice + +# libcilkrts was introduced in gcc 4.9 and removed in gcc 8.x +config BR2_GCC_SUPPORTS_LIBCILKRTS + bool + default y if !BR2_TOOLCHAIN_GCC_AT_LEAST_8 + +config BR2_GCC_SUPPORTS_DLANG + bool + default y if BR2_aarch64 + default y if BR2_arm + default y if BR2_i386 + default y if BR2_mips || BR2_mipsel + default y if BR2_mips64 || BR2_mips64el + default y if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le + default y if BR2_x86_64 + default y if BR2_riscv && !BR2_RISCV_64 + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_9 + depends on BR2_TOOLCHAIN_USES_GLIBC + +config BR2_GCC_VERSION + string + default "8.4.0" if BR2_GCC_VERSION_8_X + default "9.4.0" if BR2_GCC_VERSION_9_X + default "10.3.0" if BR2_GCC_VERSION_10_X + default "arc-2020.09-release" if BR2_GCC_VERSION_ARC + default "48152afb96c59733d5bc79e3399bb7b3d4b44266" if BR2_GCC_VERSION_CSKY + +config BR2_EXTRA_GCC_CONFIG_OPTIONS + string "Additional gcc options" + default "" + help + Any additional gcc configure options you may want to + include. Those options are applied for all of the gcc + initial, gcc intermediate and gcc final passes. + +config BR2_TOOLCHAIN_BUILDROOT_CXX + bool "Enable C++ support" + select BR2_INSTALL_LIBSTDCPP + help + Enable this option if you want your toolchain to support the + C++ language and you want C++ libraries to be installed on + your target system. + +comment "Fortran support needs a toolchain w/ wchar" + depends on BR2_TOOLCHAIN_HAS_LIBQUADMATH + depends on !BR2_USE_WCHAR # libquadmath + +config BR2_TOOLCHAIN_BUILDROOT_FORTRAN + bool "Enable Fortran support" + # on architecture building libquadmath, wchar is required + depends on !BR2_TOOLCHAIN_HAS_LIBQUADMATH || \ + (BR2_TOOLCHAIN_HAS_LIBQUADMATH && BR2_USE_WCHAR) + select BR2_TOOLCHAIN_HAS_FORTRAN + help + Enable this option if you want your toolchain to support the + Fortran language and you want Fortran libraries to be + installed on your target system. + +config BR2_TOOLCHAIN_BUILDROOT_DLANG + bool "Enable D language support" + depends on BR2_GCC_SUPPORTS_DLANG + select BR2_TOOLCHAIN_HAS_DLANG + help + Enable this option if you want your toolchain to support the + D language and you want D libraries to be installed on your + target system. + +config BR2_GCC_ENABLE_LTO + bool "Enable compiler link-time-optimization support" + select BR2_BINUTILS_ENABLE_LTO + help + This option enables link-time optimization (LTO) support in + gcc. + +config BR2_GCC_ENABLE_OPENMP + bool "Enable compiler OpenMP support" + depends on !BR2_PTHREADS_NONE && !BR2_arc && !BR2_microblaze + select BR2_TOOLCHAIN_HAS_OPENMP + help + Enable OpenMP support for the compiler + +config BR2_GCC_ENABLE_GRAPHITE + bool "Enable graphite support" + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5 + help + This option enables the graphite optimizations in the + compiler. + +comment "graphite support needs gcc >= 5.x" + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_5 diff --git a/package/gcc/arc-2020.09-release/0001-arc-Refurbish-adc-sbc-patterns.patch b/package/gcc/arc-2020.09-release/0001-arc-Refurbish-adc-sbc-patterns.patch new file mode 100644 index 00000000..3292b26a --- /dev/null +++ b/package/gcc/arc-2020.09-release/0001-arc-Refurbish-adc-sbc-patterns.patch @@ -0,0 +1,243 @@ +From b92c22b144d063c4436a6693045ceb57d344c495 Mon Sep 17 00:00:00 2001 +From: Claudiu Zissulescu +Date: Wed, 11 Nov 2020 12:31:10 +0200 +Subject: [PATCH] arc: Refurbish adc/sbc patterns + +The adc/sbc patterns were unecessary spliting, remove that and +associated functions. + +gcc/ChangeLog: + +2020-10-11 Claudiu Zissulescu + + * config/arc/arc-protos.h (arc_scheduling_not_expected): Remove + it. + (arc_sets_cc_p): Likewise. + (arc_need_delay): Likewise. + * config/arc/arc.c (arc_sets_cc_p): Likewise. + (arc_need_delay): Likewise. + (arc_scheduling_not_expected): Likewise. + * config/arc/arc.md: Convert adc/sbc patterns to simple + instruction definitions. + +Signed-off-by: Claudiu Zissulescu + +Downloaded from upstream commit +https://github.com/foss-for-synopsys-dwc-arc-processors/gcc/commit/b92c22b144d063c4436a6693045ceb57d344c495 + +Signed-off-by: Bernd Kuhls +--- + gcc/config/arc/arc-protos.h | 3 -- + gcc/config/arc/arc.c | 53 --------------------- + gcc/config/arc/arc.md | 95 +++++++++++-------------------------- + 3 files changed, 29 insertions(+), 122 deletions(-) + +diff --git a/gcc/config/arc/arc-protos.h b/gcc/config/arc/arc-protos.h +index c72d78e3b9e..de4cf47c818 100644 +--- a/gcc/config/arc/arc-protos.h ++++ b/gcc/config/arc/arc-protos.h +@@ -90,10 +90,7 @@ extern void split_subsi (rtx *); + extern void arc_split_move (rtx *); + extern const char *arc_short_long (rtx_insn *insn, const char *, const char *); + extern rtx arc_regno_use_in (unsigned int, rtx); +-extern bool arc_scheduling_not_expected (void); +-extern bool arc_sets_cc_p (rtx_insn *insn); + extern int arc_label_align (rtx_insn *label); +-extern bool arc_need_delay (rtx_insn *insn); + extern bool arc_text_label (rtx_insn *insn); + + extern bool arc_short_comparison_p (rtx, int); +diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c +index 5a7b0cb6696..c3ee9181f93 100644 +--- a/gcc/config/arc/arc.c ++++ b/gcc/config/arc/arc.c +@@ -10341,59 +10341,6 @@ arc_attr_type (rtx_insn *insn) + return get_attr_type (insn); + } + +-/* Return true if insn sets the condition codes. */ +- +-bool +-arc_sets_cc_p (rtx_insn *insn) +-{ +- if (NONJUMP_INSN_P (insn)) +- if (rtx_sequence *seq = dyn_cast (PATTERN (insn))) +- insn = seq->insn (seq->len () - 1); +- return arc_attr_type (insn) == TYPE_COMPARE; +-} +- +-/* Return true if INSN is an instruction with a delay slot we may want +- to fill. */ +- +-bool +-arc_need_delay (rtx_insn *insn) +-{ +- rtx_insn *next; +- +- if (!flag_delayed_branch) +- return false; +- /* The return at the end of a function needs a delay slot. */ +- if (NONJUMP_INSN_P (insn) && GET_CODE (PATTERN (insn)) == USE +- && (!(next = next_active_insn (insn)) +- || ((!NONJUMP_INSN_P (next) || GET_CODE (PATTERN (next)) != SEQUENCE) +- && arc_attr_type (next) == TYPE_RETURN)) +- && (!TARGET_PAD_RETURN +- || (prev_active_insn (insn) +- && prev_active_insn (prev_active_insn (insn)) +- && prev_active_insn (prev_active_insn (prev_active_insn (insn)))))) +- return true; +- if (NONJUMP_INSN_P (insn) +- ? (GET_CODE (PATTERN (insn)) == USE +- || GET_CODE (PATTERN (insn)) == CLOBBER +- || GET_CODE (PATTERN (insn)) == SEQUENCE) +- : JUMP_P (insn) +- ? (GET_CODE (PATTERN (insn)) == ADDR_VEC +- || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC) +- : !CALL_P (insn)) +- return false; +- return num_delay_slots (insn) != 0; +-} +- +-/* Return true if the scheduling pass(es) has/have already run, +- i.e. where possible, we should try to mitigate high latencies +- by different instruction selection. */ +- +-bool +-arc_scheduling_not_expected (void) +-{ +- return cfun->machine->arc_reorg_started; +-} +- + /* Code has a minimum p2 alignment of 1, which we must restore after + an ADDR_DIFF_VEC. */ + +diff --git a/gcc/config/arc/arc.md b/gcc/config/arc/arc.md +index f91adbc0d94..c635b69ddd5 100644 +--- a/gcc/config/arc/arc.md ++++ b/gcc/config/arc/arc.md +@@ -2847,43 +2847,25 @@ archs4x, archs4xd" + (set_attr "type" "compare") + (set_attr "length" "4,4,8")]) + +-; w/c/c comes first (rather than w/0/C_0) to prevent the middle-end +-; needlessly prioritizing the matching constraint. +-; Rcw/0/C_0 comes before w/c/L so that the lower latency conditional +-; execution is used where possible. +-(define_insn_and_split "adc" +- [(set (match_operand:SI 0 "dest_reg_operand" "=w,Rcw,w,Rcw,w") +- (plus:SI (plus:SI (ltu:SI (reg:CC_C CC_REG) (const_int 0)) +- (match_operand:SI 1 "nonmemory_operand" +- "%c,0,c,0,cCal")) +- (match_operand:SI 2 "nonmemory_operand" "c,C_0,L,I,cCal")))] ++(define_insn "adc" ++ [(set (match_operand:SI 0 "register_operand" "=r, r,r,r, r,r") ++ (plus:SI ++ (plus:SI ++ (ltu:SI (reg:CC_C CC_REG) (const_int 0)) ++ (match_operand:SI 1 "nonmemory_operand" "%r, 0,r,0,Cal,r")) ++ (match_operand:SI 2 "nonmemory_operand" "r,C_0,L,I, r,Cal")))] + "register_operand (operands[1], SImode) + || register_operand (operands[2], SImode)" + "@ +- adc %0,%1,%2 +- add.cs %0,%1,1 +- adc %0,%1,%2 +- adc %0,%1,%2 +- adc %0,%1,%2" +- ; if we have a bad schedule after sched2, split. +- "reload_completed +- && !optimize_size && (!TARGET_ARC600_FAMILY) +- && arc_scheduling_not_expected () +- && arc_sets_cc_p (prev_nonnote_insn (insn)) +- /* If next comes a return or other insn that needs a delay slot, +- expect the adc to get into the delay slot. */ +- && next_nonnote_insn (insn) +- && !arc_need_delay (next_nonnote_insn (insn)) +- /* Restore operands before emitting. */ +- && (extract_insn_cached (insn), 1)" +- [(set (match_dup 0) (match_dup 3)) +- (cond_exec +- (ltu (reg:CC_C CC_REG) (const_int 0)) +- (set (match_dup 0) (plus:SI (match_dup 0) (const_int 1))))] +- "operands[3] = simplify_gen_binary (PLUS, SImode, operands[1], operands[2]);" ++ adc\\t%0,%1,%2 ++ add.cs\\t%0,%1,1 ++ adc\\t%0,%1,%2 ++ adc\\t%0,%1,%2 ++ adc\\t%0,%1,%2 ++ adc\\t%0,%1,%2" + [(set_attr "cond" "use") + (set_attr "type" "cc_arith") +- (set_attr "length" "4,4,4,4,8")]) ++ (set_attr "length" "4,4,4,4,8,8")]) + + ; combiner-splitter cmp / scc -> cmp / adc + (define_split +@@ -3015,7 +2997,7 @@ archs4x, archs4xd" + DONE; + } + emit_insn (gen_sub_f (l0, l1, l2)); +- emit_insn (gen_sbc (h0, h1, h2, gen_rtx_REG (CCmode, CC_REG))); ++ emit_insn (gen_sbc (h0, h1, h2)); + DONE; + ") + +@@ -3030,44 +3012,25 @@ archs4x, archs4xd" + (set_attr "type" "cc_arith") + (set_attr "length" "4")]) + +-; w/c/c comes first (rather than Rcw/0/C_0) to prevent the middle-end +-; needlessly prioritizing the matching constraint. +-; Rcw/0/C_0 comes before w/c/L so that the lower latency conditional execution +-; is used where possible. +-(define_insn_and_split "sbc" +- [(set (match_operand:SI 0 "dest_reg_operand" "=w,Rcw,w,Rcw,w") +- (minus:SI (minus:SI (match_operand:SI 1 "nonmemory_operand" +- "c,0,c,0,cCal") +- (ltu:SI (match_operand:CC_C 3 "cc_use_register") +- (const_int 0))) +- (match_operand:SI 2 "nonmemory_operand" "c,C_0,L,I,cCal")))] ++(define_insn "sbc" ++ [(set (match_operand:SI 0 "dest_reg_operand" "=r,r,r,r,r,r") ++ (minus:SI ++ (minus:SI ++ (match_operand:SI 1 "nonmemory_operand" "r, 0,r,0, r,Cal") ++ (ltu:SI (reg:CC_C CC_REG) (const_int 0))) ++ (match_operand:SI 2 "nonmemory_operand" "r,C_0,L,I,Cal,r")))] + "register_operand (operands[1], SImode) + || register_operand (operands[2], SImode)" + "@ +- sbc %0,%1,%2 +- sub.cs %0,%1,1 +- sbc %0,%1,%2 +- sbc %0,%1,%2 +- sbc %0,%1,%2" +- ; if we have a bad schedule after sched2, split. +- "reload_completed +- && !optimize_size && (!TARGET_ARC600_FAMILY) +- && arc_scheduling_not_expected () +- && arc_sets_cc_p (prev_nonnote_insn (insn)) +- /* If next comes a return or other insn that needs a delay slot, +- expect the adc to get into the delay slot. */ +- && next_nonnote_insn (insn) +- && !arc_need_delay (next_nonnote_insn (insn)) +- /* Restore operands before emitting. */ +- && (extract_insn_cached (insn), 1)" +- [(set (match_dup 0) (match_dup 4)) +- (cond_exec +- (ltu (reg:CC_C CC_REG) (const_int 0)) +- (set (match_dup 0) (plus:SI (match_dup 0) (const_int -1))))] +- "operands[4] = simplify_gen_binary (MINUS, SImode, operands[1], operands[2]);" ++ sbc\\t%0,%1,%2 ++ sub.cs\\t%0,%1,1 ++ sbc\\t%0,%1,%2 ++ sbc\\t%0,%1,%2 ++ sbc\\t%0,%1,%2 ++ sbc\\t%0,%1,%2" + [(set_attr "cond" "use") + (set_attr "type" "cc_arith") +- (set_attr "length" "4,4,4,4,8")]) ++ (set_attr "length" "4,4,4,4,8,8")]) + + (define_insn "sub_f" + [(set (reg:CC CC_REG) diff --git a/package/gcc/arc-2020.09-release/0100-uclibc-conf.patch b/package/gcc/arc-2020.09-release/0100-uclibc-conf.patch new file mode 100644 index 00000000..d354baf8 --- /dev/null +++ b/package/gcc/arc-2020.09-release/0100-uclibc-conf.patch @@ -0,0 +1,29 @@ +From 326b880b20e5f8187dbda736b4c4c662cbfb00ca Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Tue, 2 May 2017 22:36:15 +0200 +Subject: [PATCH] uclibc-conf + +[Romain: convert to git patch] +Signed-off-by: Romain Naour +--- + contrib/regression/objs-gcc.sh | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/contrib/regression/objs-gcc.sh b/contrib/regression/objs-gcc.sh +index 60b0497..6dc7ead 100755 +--- a/contrib/regression/objs-gcc.sh ++++ b/contrib/regression/objs-gcc.sh +@@ -106,6 +106,10 @@ if [ $H_REAL_TARGET = $H_REAL_HOST -a $H_REAL_TARGET = i686-pc-linux-gnu ] + then + make all-gdb all-dejagnu all-ld || exit 1 + make install-gdb install-dejagnu install-ld || exit 1 ++elif [ $H_REAL_TARGET = $H_REAL_HOST -a $H_REAL_TARGET = i686-pc-linux-uclibc ] ++ then ++ make all-gdb all-dejagnu all-ld || exit 1 ++ make install-gdb install-dejagnu install-ld || exit 1 + elif [ $H_REAL_TARGET = $H_REAL_HOST ] ; then + make bootstrap || exit 1 + make install || exit 1 +-- +2.9.3 + diff --git a/package/gcc/gcc-final/gcc-final.hash b/package/gcc/gcc-final/gcc-final.hash new file mode 120000 index 00000000..7ac9361a --- /dev/null +++ b/package/gcc/gcc-final/gcc-final.hash @@ -0,0 +1 @@ +../gcc.hash \ No newline at end of file diff --git a/package/gcc/gcc-final/gcc-final.mk b/package/gcc/gcc-final/gcc-final.mk new file mode 100644 index 00000000..24d034b7 --- /dev/null +++ b/package/gcc/gcc-final/gcc-final.mk @@ -0,0 +1,219 @@ +################################################################################ +# +# gcc-final +# +################################################################################ + +GCC_FINAL_VERSION = $(GCC_VERSION) +GCC_FINAL_SITE = $(GCC_SITE) +GCC_FINAL_SOURCE = $(GCC_SOURCE) + +HOST_GCC_FINAL_DL_SUBDIR = gcc + +HOST_GCC_FINAL_DEPENDENCIES = \ + $(HOST_GCC_COMMON_DEPENDENCIES) \ + $(BR_LIBC) + +HOST_GCC_FINAL_EXCLUDES = $(HOST_GCC_EXCLUDES) + +ifneq ($(ARCH_XTENSA_OVERLAY_FILE),) +HOST_GCC_FINAL_POST_EXTRACT_HOOKS += HOST_GCC_XTENSA_OVERLAY_EXTRACT +HOST_GCC_FINAL_EXTRA_DOWNLOADS += $(ARCH_XTENSA_OVERLAY_URL) +endif + +HOST_GCC_FINAL_POST_PATCH_HOOKS += HOST_GCC_APPLY_PATCHES + +# gcc doesn't support in-tree build, so we create a 'build' +# subdirectory in the gcc sources, and build from there. +HOST_GCC_FINAL_SUBDIR = build + +HOST_GCC_FINAL_PRE_CONFIGURE_HOOKS += HOST_GCC_CONFIGURE_SYMLINK + +# We want to always build the static variants of all the gcc libraries, +# of which libstdc++, libgomp, libmudflap... +# To do so, we can not just pass --enable-static to override the generic +# --disable-static flag, otherwise gcc fails to build some of those +# libraries, see; +# http://lists.busybox.net/pipermail/buildroot/2013-October/080412.html +# +# So we must completely override the generic commands and provide our own. +# +define HOST_GCC_FINAL_CONFIGURE_CMDS + (cd $(HOST_GCC_FINAL_SRCDIR) && rm -rf config.cache; \ + $(HOST_CONFIGURE_OPTS) \ + CFLAGS="$(HOST_CFLAGS)" \ + LDFLAGS="$(HOST_LDFLAGS)" \ + $(HOST_GCC_FINAL_CONF_ENV) \ + ./configure \ + --prefix="$(HOST_DIR)" \ + --sysconfdir="$(HOST_DIR)/etc" \ + --enable-static \ + $(QUIET) $(HOST_GCC_FINAL_CONF_OPTS) \ + ) +endef + +# Languages supported by the cross-compiler +GCC_FINAL_CROSS_LANGUAGES-y = c +GCC_FINAL_CROSS_LANGUAGES-$(BR2_INSTALL_LIBSTDCPP) += c++ +GCC_FINAL_CROSS_LANGUAGES-$(BR2_TOOLCHAIN_BUILDROOT_DLANG) += d +GCC_FINAL_CROSS_LANGUAGES-$(BR2_TOOLCHAIN_BUILDROOT_FORTRAN) += fortran +GCC_FINAL_CROSS_LANGUAGES = $(subst $(space),$(comma),$(GCC_FINAL_CROSS_LANGUAGES-y)) + +HOST_GCC_FINAL_CONF_OPTS = \ + $(HOST_GCC_COMMON_CONF_OPTS) \ + --enable-languages=$(GCC_FINAL_CROSS_LANGUAGES) \ + --with-build-time-tools=$(HOST_DIR)/$(GNU_TARGET_NAME)/bin + +# The kernel wants to use the -m4-nofpu option to make sure that it +# doesn't use floating point operations. +ifeq ($(BR2_sh4)$(BR2_sh4eb),y) +HOST_GCC_FINAL_CONF_OPTS += "--with-multilib-list=m4,m4-nofpu" +HOST_GCC_FINAL_GCC_LIB_DIR = $(HOST_DIR)/$(GNU_TARGET_NAME)/lib/!m4* +else ifeq ($(BR2_sh4a)$(BR2_sh4aeb),y) +HOST_GCC_FINAL_CONF_OPTS += "--with-multilib-list=m4a,m4a-nofpu" +HOST_GCC_FINAL_GCC_LIB_DIR = $(HOST_DIR)/$(GNU_TARGET_NAME)/lib/!m4* +else +HOST_GCC_FINAL_GCC_LIB_DIR = $(HOST_DIR)/$(GNU_TARGET_NAME)/lib* +endif + +ifeq ($(BR2_GCC_SUPPORTS_LIBCILKRTS),y) + +# libcilkrts does not support v8 +ifeq ($(BR2_sparc),y) +HOST_GCC_FINAL_CONF_OPTS += --disable-libcilkrts +endif + +# Pthreads are required to build libcilkrts +ifeq ($(BR2_PTHREADS_NONE),y) +HOST_GCC_FINAL_CONF_OPTS += --disable-libcilkrts +endif + +ifeq ($(BR2_STATIC_LIBS),y) +# disable libcilkrts as there is no static version +HOST_GCC_FINAL_CONF_OPTS += --disable-libcilkrts +endif + +endif # BR2_GCC_SUPPORTS_LIBCILKRTS + +# Disable shared libs like libstdc++ if we do static since it confuses linking +ifeq ($(BR2_STATIC_LIBS),y) +HOST_GCC_FINAL_CONF_OPTS += --disable-shared +else +HOST_GCC_FINAL_CONF_OPTS += --enable-shared +endif + +ifeq ($(BR2_GCC_ENABLE_OPENMP),y) +HOST_GCC_FINAL_CONF_OPTS += --enable-libgomp +else +HOST_GCC_FINAL_CONF_OPTS += --disable-libgomp +endif + +# End with user-provided options, so that they can override previously +# defined options. +HOST_GCC_FINAL_CONF_OPTS += \ + $(call qstrip,$(BR2_EXTRA_GCC_CONFIG_OPTIONS)) + +HOST_GCC_FINAL_CONF_ENV = \ + $(HOST_GCC_COMMON_CONF_ENV) + +HOST_GCC_FINAL_MAKE_OPTS += $(HOST_GCC_COMMON_MAKE_OPTS) + +# Make sure we have 'cc' +define HOST_GCC_FINAL_CREATE_CC_SYMLINKS + if [ ! -e $(HOST_DIR)/bin/$(GNU_TARGET_NAME)-cc ]; then \ + ln -f $(HOST_DIR)/bin/$(GNU_TARGET_NAME)-gcc \ + $(HOST_DIR)/bin/$(GNU_TARGET_NAME)-cc; \ + fi +endef + +HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_CREATE_CC_SYMLINKS + +HOST_GCC_FINAL_TOOLCHAIN_WRAPPER_ARGS += $(HOST_GCC_COMMON_TOOLCHAIN_WRAPPER_ARGS) +HOST_GCC_FINAL_POST_BUILD_HOOKS += TOOLCHAIN_WRAPPER_BUILD +HOST_GCC_FINAL_POST_INSTALL_HOOKS += TOOLCHAIN_WRAPPER_INSTALL +# Note: this must be done after CREATE_CC_SYMLINKS, otherwise the +# -cc symlink to the wrapper is not created. +HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_INSTALL_WRAPPER_AND_SIMPLE_SYMLINKS + +# coldfire is not working without removing these object files from libgcc.a +ifeq ($(BR2_m68k_cf),y) +define HOST_GCC_FINAL_M68K_LIBGCC_FIXUP + find $(STAGING_DIR) -name libgcc.a -print | \ + while read t; do $(GNU_TARGET_NAME)-ar dv "$t" _ctors.o; done +endef +HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_M68K_LIBGCC_FIXUP +endif + +# Cannot use the HOST_GCC_FINAL_USR_LIBS mechanism below, because we want +# libgcc_s to be installed in /lib and not /usr/lib. +define HOST_GCC_FINAL_INSTALL_LIBGCC + -cp -dpf $(HOST_GCC_FINAL_GCC_LIB_DIR)/libgcc_s* \ + $(STAGING_DIR)/lib/ + -cp -dpf $(HOST_GCC_FINAL_GCC_LIB_DIR)/libgcc_s* \ + $(TARGET_DIR)/lib/ +endef + +HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_INSTALL_LIBGCC + +define HOST_GCC_FINAL_INSTALL_LIBATOMIC + -cp -dpf $(HOST_GCC_FINAL_GCC_LIB_DIR)/libatomic* \ + $(STAGING_DIR)/lib/ + -cp -dpf $(HOST_GCC_FINAL_GCC_LIB_DIR)/libatomic* \ + $(TARGET_DIR)/lib/ +endef + +HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_INSTALL_LIBATOMIC + +# Handle the installation of libraries in /usr/lib +HOST_GCC_FINAL_USR_LIBS = + +ifeq ($(BR2_INSTALL_LIBSTDCPP),y) +HOST_GCC_FINAL_USR_LIBS += libstdc++ +endif + +ifeq ($(BR2_TOOLCHAIN_BUILDROOT_DLANG),y) +HOST_GCC_FINAL_USR_LIBS += libgdruntime libgphobos +endif + +ifeq ($(BR2_TOOLCHAIN_BUILDROOT_FORTRAN),y) +HOST_GCC_FINAL_USR_LIBS += libgfortran +# fortran needs quadmath on x86 and x86_64 +ifeq ($(BR2_TOOLCHAIN_HAS_LIBQUADMATH),y) +HOST_GCC_FINAL_USR_LIBS += libquadmath +endif +endif + +ifeq ($(BR2_GCC_ENABLE_OPENMP),y) +HOST_GCC_FINAL_USR_LIBS += libgomp +endif + +HOST_GCC_FINAL_USR_LIBS += $(call qstrip,$(BR2_TOOLCHAIN_EXTRA_LIBS)) + +ifneq ($(HOST_GCC_FINAL_USR_LIBS),) +define HOST_GCC_FINAL_INSTALL_STATIC_LIBS + for i in $(HOST_GCC_FINAL_USR_LIBS) ; do \ + cp -dpf $(HOST_GCC_FINAL_GCC_LIB_DIR)/$${i}.a \ + $(STAGING_DIR)/usr/lib/ ; \ + done +endef + +ifeq ($(BR2_STATIC_LIBS),) +define HOST_GCC_FINAL_INSTALL_SHARED_LIBS + for i in $(HOST_GCC_FINAL_USR_LIBS) ; do \ + cp -dpf $(HOST_GCC_FINAL_GCC_LIB_DIR)/$${i}.so* \ + $(STAGING_DIR)/usr/lib/ ; \ + cp -dpf $(HOST_GCC_FINAL_GCC_LIB_DIR)/$${i}.so* \ + $(TARGET_DIR)/usr/lib/ ; \ + done +endef +endif + +define HOST_GCC_FINAL_INSTALL_USR_LIBS + mkdir -p $(TARGET_DIR)/usr/lib + $(HOST_GCC_FINAL_INSTALL_STATIC_LIBS) + $(HOST_GCC_FINAL_INSTALL_SHARED_LIBS) +endef +HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_INSTALL_USR_LIBS +endif + +$(eval $(host-autotools-package)) diff --git a/package/gcc/gcc-initial/gcc-initial.hash b/package/gcc/gcc-initial/gcc-initial.hash new file mode 120000 index 00000000..7ac9361a --- /dev/null +++ b/package/gcc/gcc-initial/gcc-initial.hash @@ -0,0 +1 @@ +../gcc.hash \ No newline at end of file diff --git a/package/gcc/gcc-initial/gcc-initial.mk b/package/gcc/gcc-initial/gcc-initial.mk new file mode 100644 index 00000000..f5bc6c5b --- /dev/null +++ b/package/gcc/gcc-initial/gcc-initial.mk @@ -0,0 +1,54 @@ +################################################################################ +# +# gcc-initial +# +################################################################################ + +GCC_INITIAL_VERSION = $(GCC_VERSION) +GCC_INITIAL_SITE = $(GCC_SITE) +GCC_INITIAL_SOURCE = $(GCC_SOURCE) + +# We do not have a 'gcc' package per-se; we only have two incarnations, +# gcc-initial and gcc-final. gcc-initial is just am internal step that +# users should not care about, while gcc-final is the one they shall see. +HOST_GCC_INITIAL_DL_SUBDIR = gcc + +HOST_GCC_INITIAL_DEPENDENCIES = $(HOST_GCC_COMMON_DEPENDENCIES) + +HOST_GCC_INITIAL_EXCLUDES = $(HOST_GCC_EXCLUDES) + +ifneq ($(ARCH_XTENSA_OVERLAY_FILE),) +HOST_GCC_INITIAL_POST_EXTRACT_HOOKS += HOST_GCC_XTENSA_OVERLAY_EXTRACT +HOST_GCC_INITIAL_EXTRA_DOWNLOADS += $(ARCH_XTENSA_OVERLAY_URL) +endif + +HOST_GCC_INITIAL_POST_PATCH_HOOKS += HOST_GCC_APPLY_PATCHES + +# gcc doesn't support in-tree build, so we create a 'build' +# subdirectory in the gcc sources, and build from there. +HOST_GCC_INITIAL_SUBDIR = build + +HOST_GCC_INITIAL_PRE_CONFIGURE_HOOKS += HOST_GCC_CONFIGURE_SYMLINK + +HOST_GCC_INITIAL_CONF_OPTS = \ + $(HOST_GCC_COMMON_CONF_OPTS) \ + --enable-languages=c \ + --disable-shared \ + --without-headers \ + --disable-threads \ + --with-newlib \ + --disable-largefile \ + $(call qstrip,$(BR2_EXTRA_GCC_CONFIG_OPTIONS)) + +HOST_GCC_INITIAL_CONF_ENV = \ + $(HOST_GCC_COMMON_CONF_ENV) + +HOST_GCC_INITIAL_MAKE_OPTS = $(HOST_GCC_COMMON_MAKE_OPTS) all-gcc all-target-libgcc +HOST_GCC_INITIAL_INSTALL_OPTS = install-gcc install-target-libgcc + +HOST_GCC_INITIAL_TOOLCHAIN_WRAPPER_ARGS += $(HOST_GCC_COMMON_TOOLCHAIN_WRAPPER_ARGS) +HOST_GCC_INITIAL_POST_BUILD_HOOKS += TOOLCHAIN_WRAPPER_BUILD +HOST_GCC_INITIAL_POST_INSTALL_HOOKS += TOOLCHAIN_WRAPPER_INSTALL +HOST_GCC_INITIAL_POST_INSTALL_HOOKS += HOST_GCC_INSTALL_WRAPPER_AND_SIMPLE_SYMLINKS + +$(eval $(host-autotools-package)) diff --git a/package/gcc/gcc.hash b/package/gcc/gcc.hash new file mode 100644 index 00000000..668f4b9f --- /dev/null +++ b/package/gcc/gcc.hash @@ -0,0 +1,13 @@ +# From ftp://gcc.gnu.org/pub/gcc/releases/gcc-8.4.0/sha512.sum +sha512 6de904f552a02de33b11ef52312bb664396efd7e1ce3bbe37bfad5ef617f133095b3767b4804bc7fe78df335cb53bc83f1ac055baed40979ce4c2c3e46b70280 gcc-8.4.0.tar.xz +# From ftp://gcc.gnu.org/pub/gcc/releases/gcc-9.4.0/sha512.sum +sha512 dfd3500bf21784b8351a522d53463cf362ede66b0bc302edf350bb44e94418497a8b4b797b6af8ca9b2eeb746b3b115d9c3698381b989546e9151b4496415624 gcc-9.4.0.tar.xz +# From ftp://gcc.gnu.org/pub/gcc/releases/gcc-10.3.0/sha512.sum +sha512 2b2dd7453d48a398c29eaebd1422b70341001b8c90a62aee51e83344e7fdd8a8e45f82a4a9165bd7edc76dada912c932f4b6632c5636760fec4c5d7e402b3f86 gcc-10.3.0.tar.xz + +# Locally calculated (fetched from Github) +sha512 b0853e2b1c5998044392023fa653e399e74118c46e616504ac59e1a2cf27620f94434767ce06b6cf4ca3dfb57f81d6eda92752befaf095ea5e564a9181b4659c gcc-arc-2020.09-release.tar.gz +# Locally calculated (fetched from Github) +sha512 2de7cf47333a4092b02d3bb98f4206f14966f1d139a724d09cf3b22f8a43ae0c704f33e6477d6367a03c29b265480dc900169e9d417006c5d46f0ae446b8c6f1 gcc-or1k-musl-5.4.0-20170218.tar.gz +# Locally calculated (fetched from https://github.com/c-sky/gcc) +sha512 1c3564fd6573dce13451a73015e7d88fecbb214dc1df96607976255b1d8b9e60318405333f4f218eea8d07e3675a802b66eff6df3921d505c4036481512792c2 gcc-48152afb96c59733d5bc79e3399bb7b3d4b44266.tar.gz diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk new file mode 100644 index 00000000..5e419f7e --- /dev/null +++ b/package/gcc/gcc.mk @@ -0,0 +1,336 @@ +################################################################################ +# +# Common variables for the gcc-initial and gcc-final packages. +# +################################################################################ + +# +# Version, site and source +# + +GCC_VERSION = $(call qstrip,$(BR2_GCC_VERSION)) + +ifeq ($(BR2_GCC_VERSION_ARC),y) +GCC_SITE = $(call github,foss-for-synopsys-dwc-arc-processors,gcc,$(GCC_VERSION)) +GCC_SOURCE = gcc-$(GCC_VERSION).tar.gz +else ifeq ($(BR2_GCC_VERSION_CSKY),y) +GCC_SITE = $(call github,c-sky,gcc,$(GCC_VERSION)) +GCC_SOURCE = gcc-$(GCC_VERSION).tar.gz +else +GCC_SITE = $(BR2_GNU_MIRROR:/=)/gcc/gcc-$(GCC_VERSION) +GCC_SOURCE = gcc-$(GCC_VERSION).tar.xz +endif + +# +# Xtensa special hook +# +define HOST_GCC_XTENSA_OVERLAY_EXTRACT + $(call arch-xtensa-overlay-extract,$(@D),gcc) +endef + +# +# Apply patches +# + +# gcc is a special package, not named gcc, but gcc-initial and +# gcc-final, but patches are nonetheless stored in package/gcc in the +# tree, and potentially in BR2_GLOBAL_PATCH_DIR directories as well. +define HOST_GCC_APPLY_PATCHES + for patchdir in \ + package/gcc/$(GCC_VERSION) \ + $(addsuffix /gcc/$(GCC_VERSION),$(call qstrip,$(BR2_GLOBAL_PATCH_DIR))) \ + $(addsuffix /gcc,$(call qstrip,$(BR2_GLOBAL_PATCH_DIR))) ; do \ + if test -d $${patchdir}; then \ + $(APPLY_PATCHES) $(@D) $${patchdir} \*.patch || exit 1; \ + fi; \ + done + $(HOST_GCC_APPLY_POWERPC_PATCH) +endef + +HOST_GCC_EXCLUDES = \ + libjava/* libgo/* + +# +# Create 'build' directory and configure symlink +# + +define HOST_GCC_CONFIGURE_SYMLINK + mkdir -p $(@D)/build + ln -sf ../configure $(@D)/build/configure +endef + +# +# Common configuration options +# + +HOST_GCC_COMMON_DEPENDENCIES = \ + host-binutils \ + host-gmp \ + host-mpc \ + host-mpfr \ + $(if $(BR2_BINFMT_FLAT),host-elf2flt) + +HOST_GCC_COMMON_CONF_OPTS = \ + --target=$(GNU_TARGET_NAME) \ + --with-sysroot=$(STAGING_DIR) \ + --enable-__cxa_atexit \ + --with-gnu-ld \ + --disable-libssp \ + --disable-multilib \ + --disable-decimal-float \ + --with-gmp=$(HOST_DIR) \ + --with-mpc=$(HOST_DIR) \ + --with-mpfr=$(HOST_DIR) \ + --with-pkgversion="Buildroot $(BR2_VERSION_FULL)" \ + --with-bugurl="http://bugs.buildroot.net/" \ + --without-zstd + +# Don't build documentation. It takes up extra space / build time, +# and sometimes needs specific makeinfo versions to work +HOST_GCC_COMMON_CONF_ENV = \ + MAKEINFO=missing + +GCC_COMMON_TARGET_CFLAGS = $(TARGET_CFLAGS) +GCC_COMMON_TARGET_CXXFLAGS = $(TARGET_CXXFLAGS) + +# used to fix ../../../../libsanitizer/libbacktrace/../../libbacktrace/elf.c:772:21: error: 'st.st_mode' may be used uninitialized in this function [-Werror=maybe-uninitialized] +ifeq ($(BR2_ENABLE_DEBUG),y) +GCC_COMMON_TARGET_CFLAGS += -Wno-error +endif + +# Make sure libgcc & libstdc++ always get built with -matomic on ARC700 +ifeq ($(GCC_TARGET_CPU):$(BR2_ARC_ATOMIC_EXT),arc700:y) +GCC_COMMON_TARGET_CFLAGS += -matomic +GCC_COMMON_TARGET_CXXFLAGS += -matomic +endif + +# Propagate options used for target software building to GCC target libs +HOST_GCC_COMMON_CONF_ENV += CFLAGS_FOR_TARGET="$(GCC_COMMON_TARGET_CFLAGS)" +HOST_GCC_COMMON_CONF_ENV += CXXFLAGS_FOR_TARGET="$(GCC_COMMON_TARGET_CXXFLAGS)" + +# libitm needs sparc V9+ +ifeq ($(BR2_sparc_v8)$(BR2_sparc_leon3),y) +HOST_GCC_COMMON_CONF_OPTS += --disable-libitm +endif + +# libmpx uses secure_getenv and struct _libc_fpstate not present in musl +ifeq ($(BR2_TOOLCHAIN_BUILDROOT_MUSL)$(BR2_TOOLCHAIN_GCC_AT_LEAST_6),yy) +HOST_GCC_COMMON_CONF_OPTS += --disable-libmpx +endif + +# quadmath support requires wchar +ifeq ($(BR2_USE_WCHAR)$(BR2_TOOLCHAIN_HAS_LIBQUADMATH),yy) +HOST_GCC_COMMON_CONF_OPTS += --enable-libquadmath +else +HOST_GCC_COMMON_CONF_OPTS += --disable-libquadmath --disable-libquadmath-support +endif + +# libsanitizer requires wordexp, not in default uClibc config. Also +# doesn't build properly with musl. +ifeq ($(BR2_TOOLCHAIN_BUILDROOT_UCLIBC)$(BR2_TOOLCHAIN_BUILDROOT_MUSL),y) +HOST_GCC_COMMON_CONF_OPTS += --disable-libsanitizer +endif + +# libsanitizer is broken for SPARC +# https://bugs.busybox.net/show_bug.cgi?id=7951 +ifeq ($(BR2_sparc)$(BR2_sparc64),y) +HOST_GCC_COMMON_CONF_OPTS += --disable-libsanitizer +endif + +# The logic in libbacktrace/configure.ac to detect if __sync builtins +# are available assumes they are as soon as target_subdir is not +# empty, i.e when cross-compiling. However, some platforms do not have +# __sync builtins, so help the configure script a bit. +ifeq ($(BR2_TOOLCHAIN_HAS_SYNC_4),) +HOST_GCC_COMMON_CONF_ENV += target_configargs="libbacktrace_cv_sys_sync=no" +endif + +# TLS support is not needed on uClibc/no-thread and +# uClibc/linux-threads, otherwise, for all other situations (glibc, +# musl and uClibc/NPTL), we need it. +ifeq ($(BR2_TOOLCHAIN_BUILDROOT_UCLIBC)$(BR2_PTHREADS)$(BR2_PTHREADS_NONE),yy) +HOST_GCC_COMMON_CONF_OPTS += --disable-tls +else +HOST_GCC_COMMON_CONF_OPTS += --enable-tls +endif + +ifeq ($(BR2_GCC_ENABLE_LTO),y) +HOST_GCC_COMMON_CONF_OPTS += --enable-plugins --enable-lto +endif + +ifeq ($(BR2_PTHREADS_NONE),y) +HOST_GCC_COMMON_CONF_OPTS += \ + --disable-threads \ + --disable-libitm \ + --disable-libatomic +else +HOST_GCC_COMMON_CONF_OPTS += --enable-threads +endif + +# gcc 5 doesn't need cloog any more, see +# https://gcc.gnu.org/gcc-5/changes.html and we don't support graphite +# on GCC 4.9.x, so only isl is needed. +ifeq ($(BR2_GCC_ENABLE_GRAPHITE),y) +HOST_GCC_COMMON_DEPENDENCIES += host-isl +HOST_GCC_COMMON_CONF_OPTS += --with-isl=$(HOST_DIR) +else +HOST_GCC_COMMON_CONF_OPTS += --without-isl --without-cloog +endif + +ifeq ($(BR2_arc),y) +HOST_GCC_COMMON_DEPENDENCIES += host-flex host-bison +endif + +ifeq ($(BR2_SOFT_FLOAT),y) +# only mips*-*-*, arm*-*-* and sparc*-*-* accept --with-float +# powerpc seems to be needing it as well +ifeq ($(BR2_arm)$(BR2_armeb)$(BR2_mips)$(BR2_mipsel)$(BR2_mips64)$(BR2_mips64el)$(BR2_powerpc)$(BR2_sparc),y) +HOST_GCC_COMMON_CONF_OPTS += --with-float=soft +endif +endif + +# Determine arch/tune/abi/cpu options +ifneq ($(GCC_TARGET_ARCH),) +HOST_GCC_COMMON_CONF_OPTS += --with-arch="$(GCC_TARGET_ARCH)" +endif +ifneq ($(GCC_TARGET_ABI),) +HOST_GCC_COMMON_CONF_OPTS += --with-abi="$(GCC_TARGET_ABI)" +endif +ifeq ($(BR2_TOOLCHAIN_HAS_MNAN_OPTION),y) +ifneq ($(GCC_TARGET_NAN),) +HOST_GCC_COMMON_CONF_OPTS += --with-nan="$(GCC_TARGET_NAN)" +endif +endif +ifneq ($(GCC_TARGET_FP32_MODE),) +HOST_GCC_COMMON_CONF_OPTS += --with-fp-32="$(GCC_TARGET_FP32_MODE)" +endif +ifneq ($(GCC_TARGET_CPU),) +HOST_GCC_COMMON_CONF_OPTS += --with-cpu=$(GCC_TARGET_CPU) +endif + +ifneq ($(GCC_TARGET_FPU),) +HOST_GCC_COMMON_CONF_OPTS += --with-fpu=$(GCC_TARGET_FPU) +endif + +ifneq ($(GCC_TARGET_FLOAT_ABI),) +HOST_GCC_COMMON_CONF_OPTS += --with-float=$(GCC_TARGET_FLOAT_ABI) +endif + +ifneq ($(GCC_TARGET_MODE),) +HOST_GCC_COMMON_CONF_OPTS += --with-mode=$(GCC_TARGET_MODE) +endif + +# Enable proper double/long double for SPE ABI +ifeq ($(BR2_powerpc_SPE),y) +HOST_GCC_COMMON_CONF_OPTS += \ + --enable-obsolete \ + --enable-e500_double \ + --with-long-double-128 +endif + +# Set default to Secure-PLT to prevent run-time +# generation of PLT stubs (supports RELRO and +# SELinux non-exemem capabilities) +ifeq ($(BR2_powerpc),y) +HOST_GCC_COMMON_CONF_OPTS += --enable-secureplt +endif + +# PowerPC64 big endian by default uses the elfv1 ABI, and PowerPC 64 +# little endian by default uses the elfv2 ABI. However, musl has +# decided to use the elfv2 ABI for both, so we force the elfv2 ABI for +# Power64 big endian when the selected C library is musl. +ifeq ($(BR2_TOOLCHAIN_USES_MUSL)$(BR2_powerpc64),yy) +HOST_GCC_COMMON_CONF_OPTS += \ + --with-abi=elfv2 \ + --without-long-double-128 +endif + +# Since glibc >= 2.26, poerpc64le requires double/long double which +# requires at least gcc 6.2. +# See sysdeps/powerpc/powerpc64le/configure.ac +ifeq ($(BR2_TOOLCHAIN_USES_GLIBC)$(BR2_TOOLCHAIN_GCC_AT_LEAST_6)$(BR2_powerpc64le),yyy) +HOST_GCC_COMMON_CONF_OPTS += \ + --with-long-double-128 +endif + +ifeq ($(BR2_s390x),y) +HOST_GCC_COMMON_CONF_OPTS += \ + --with-long-double-128 +endif + +HOST_GCC_COMMON_TOOLCHAIN_WRAPPER_ARGS += -DBR_CROSS_PATH_SUFFIX='".br_real"' + +# For gcc-initial, we need to tell gcc that the C library will be +# providing the ssp support, as it can't guess it since the C library +# hasn't been built yet. +# +# For gcc-final, the gcc logic to detect whether SSP support is +# available or not in the C library is not working properly for +# uClibc, so let's be explicit as well. +HOST_GCC_COMMON_MAKE_OPTS = \ + gcc_cv_libc_provides_ssp=$(if $(BR2_TOOLCHAIN_HAS_SSP),yes,no) + +ifeq ($(BR2_CCACHE),y) +HOST_GCC_COMMON_CCACHE_HASH_FILES += $(GCC_DL_DIR)/$(GCC_SOURCE) + +# Cfr. PATCH_BASE_DIRS in .stamp_patched, but we catch both versioned +# and unversioned patches unconditionally. Moreover, to facilitate the +# addition of gcc patches in BR2_GLOBAL_PATCH_DIR, we allow them to be +# stored in a sub-directory called 'gcc' even if it's not technically +# the name of the package. +HOST_GCC_COMMON_CCACHE_HASH_FILES += \ + $(sort $(wildcard \ + package/gcc/$(GCC_VERSION)/*.patch \ + $(addsuffix /$($(PKG)_RAWNAME)/$(GCC_VERSION)/*.patch,$(call qstrip,$(BR2_GLOBAL_PATCH_DIR))) \ + $(addsuffix /$($(PKG)_RAWNAME)/*.patch,$(call qstrip,$(BR2_GLOBAL_PATCH_DIR))) \ + $(addsuffix /gcc/$(GCC_VERSION)/*.patch,$(call qstrip,$(BR2_GLOBAL_PATCH_DIR))) \ + $(addsuffix /gcc/*.patch,$(call qstrip,$(BR2_GLOBAL_PATCH_DIR))))) +ifeq ($(BR2_xtensa),y) +HOST_GCC_COMMON_CCACHE_HASH_FILES += $(ARCH_XTENSA_OVERLAY_TAR) +endif + +# _CONF_OPTS contains some references to the absolute path of $(HOST_DIR) +# and a reference to the Buildroot git revision (BR2_VERSION_FULL), +# so substitute those away. +HOST_GCC_COMMON_TOOLCHAIN_WRAPPER_ARGS += -DBR_CCACHE_HASH=\"`\ + printf '%s\n' $(subst $(HOST_DIR),@HOST_DIR@,\ + $(subst --with-pkgversion="Buildroot $(BR2_VERSION_FULL)",,$($(PKG)_CONF_OPTS))) \ + | sha256sum - $(HOST_GCC_COMMON_CCACHE_HASH_FILES) \ + | cut -c -64 | tr -d '\n'`\" +endif # BR2_CCACHE + +# The LTO support in gcc creates wrappers for ar, ranlib and nm which load +# the lto plugin. These wrappers are called *-gcc-ar, *-gcc-ranlib, and +# *-gcc-nm and should be used instead of the real programs when -flto is +# used. However, we should not add the toolchain wrapper for them, and they +# match the *cc-* pattern. Therefore, an additional case is added for *-ar, +# *-ranlib and *-nm. +# According to gfortran manpage, it supports all options supported by gcc, so +# add gfortran to the list of the program called via the Buildroot wrapper. +# Avoid that a .br_real is symlinked a second time. +# Also create -linux- symlinks. +define HOST_GCC_INSTALL_WRAPPER_AND_SIMPLE_SYMLINKS + $(Q)cd $(HOST_DIR)/bin; \ + for i in $(GNU_TARGET_NAME)-*; do \ + case "$$i" in \ + *.br_real) \ + ;; \ + *-ar|*-ranlib|*-nm) \ + ln -snf $$i $(ARCH)-linux$${i##$(GNU_TARGET_NAME)}; \ + ;; \ + *cc|*cc-*|*++|*++-*|*cpp|*-gfortran|*-gdc) \ + rm -f $$i.br_real; \ + mv $$i $$i.br_real; \ + ln -sf toolchain-wrapper $$i; \ + ln -sf toolchain-wrapper $(ARCH)-linux$${i##$(GNU_TARGET_NAME)}; \ + ln -snf $$i.br_real $(ARCH)-linux$${i##$(GNU_TARGET_NAME)}.br_real; \ + ;; \ + *) \ + ln -snf $$i $(ARCH)-linux$${i##$(GNU_TARGET_NAME)}; \ + ;; \ + esac; \ + done + +endef + +include $(sort $(wildcard package/gcc/*/*.mk)) diff --git a/package/gcnano-binaries/Config.in b/package/gcnano-binaries/Config.in new file mode 100644 index 00000000..01e1aacf --- /dev/null +++ b/package/gcnano-binaries/Config.in @@ -0,0 +1,33 @@ +comment "gcnano-binaries needs a Linux kernel to be built" + depends on BR2_arm + depends on !BR2_LINUX_KERNEL + +comment "gcnano-binaries needs a glibc toolchain w/ threads, dynamic library" + depends on BR2_arm + depends on !BR2_TOOLCHAIN_USES_GLIBC || !BR2_TOOLCHAIN_HAS_THREADS \ + || BR2_STATIC_LIBS + +config BR2_PACKAGE_GCNANO_BINARIES + bool "gcnano-binaries" + depends on BR2_arm + depends on BR2_LINUX_KERNEL + depends on BR2_TOOLCHAIN_USES_GLIBC + depends on BR2_TOOLCHAIN_HAS_THREADS # libdrm, wayland + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_HAS_LIBEGL + select BR2_PACKAGE_HAS_LIBGLES + select BR2_PACKAGE_LIBDRM + select BR2_PACKAGE_WAYLAND + help + Driver and libaries for stm vivante gcnano gpu. + https://github.com/STMicroelectronics/gcnano-binaries/ + +if BR2_PACKAGE_GCNANO_BINARIES + +config BR2_PACKAGE_PROVIDES_LIBEGL + default "gcnano-binaries" + +config BR2_PACKAGE_PROVIDES_LIBGLES + default "gcnano-binaries" + +endif diff --git a/package/gcnano-binaries/gcnano-binaries.hash b/package/gcnano-binaries/gcnano-binaries.hash new file mode 100644 index 00000000..e753f944 --- /dev/null +++ b/package/gcnano-binaries/gcnano-binaries.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 255db9c58627f5f54fd15263647cc97a55927363fec42e7c8d7486170a65d84d gcnano-binaries-c01642ed5e18cf09ecd905af193e935cb3be95ed.tar.gz +sha256 7d209718473d18f69f75adb7caf9cb5d4b0a31da068756aa011bea617de3dc57 EULA diff --git a/package/gcnano-binaries/gcnano-binaries.mk b/package/gcnano-binaries/gcnano-binaries.mk new file mode 100644 index 00000000..b27571a0 --- /dev/null +++ b/package/gcnano-binaries/gcnano-binaries.mk @@ -0,0 +1,76 @@ +################################################################################ +# +# gcnano-binaries +# +################################################################################ + +GCNANO_BINARIES_LIB_VERSION = 6.2.4 +GCNANO_BINARIES_DRIVER_VERSION = $(GCNANO_BINARIES_LIB_VERSION).p4 +GCNANO_BINARIES_USERLAND_VERSION = $(GCNANO_BINARIES_LIB_VERSION).p4-20190626 +GCNANO_BINARIES_VERSION = c01642ed5e18cf09ecd905af193e935cb3be95ed +GCNANO_BINARIES_SITE = $(call github,STMicroelectronics,gcnano-binaries,$(GCNANO_BINARIES_VERSION)) + +GCNANO_BINARIES_LICENSE = MIT, Vivante End User Software License Terms +GCNANO_BINARIES_LICENSE_FILES = EULA +GCNANO_BINARIES_REDISTRIBUTE = NO + +GCNANO_BINARIES_DEPENDENCIES = linux wayland libdrm + +GCNANO_BINARIES_INSTALL_STAGING = YES + +GCNANO_BINARIES_PROVIDES = libegl libgles + +# The Github repository doesn't contain the source code as-is: it +# contains a tarball with the kernel driver source code, and a +# self-extractible binary for the user-space parts. So we extract both +# below, and also extract the EULA text from the self-extractible binary +define GCNANO_BINARIES_EXTRACT_HELPER + tar --strip-components=1 -xJf $(@D)/gcnano-driver-$(GCNANO_BINARIES_DRIVER_VERSION).tar.xz -C $(@D) + awk 'BEGIN { start = 0; } \ + /^EOEULA/ { start = 0; } \ + { if (start) print; } \ + /< $(@D)/EULA + cd $(@D) && sh gcnano-userland-multi-$(GCNANO_BINARIES_USERLAND_VERSION).bin --auto-accept +endef + +GCNANO_BINARIES_POST_EXTRACT_HOOKS += GCNANO_BINARIES_EXTRACT_HELPER + +GCNANO_BINARIES_MODULE_MAKE_OPTS = \ + KERNEL_DIR=$(LINUX_DIR) \ + SOC_PLATFORM=st-st \ + AQROOT=$(@D) \ + DEBUG=0 + +GCNANO_BINARIES_LIBRARIES = \ + gbm_viv libEGL libGAL libgbm libGLESv1_CM \ + libGLESv2 libGLSLC libOpenVG libVSC + +GCNANO_BINARIES_USERLAND_SUBDIR = gcnano-userland-multi-$(GCNANO_BINARIES_USERLAND_VERSION) + +GCNANO_BINARIES_PKG_CONFIGS = egl gbm glesv1_cm glesv2 vg + +define GCNANO_BINARIES_INSTALL + $(foreach lib,$(GCNANO_BINARIES_LIBRARIES), \ + $(INSTALL) -D -m 0755 $(@D)/$(GCNANO_BINARIES_USERLAND_SUBDIR)/usr/lib/$(lib).$(GCNANO_BINARIES_LIB_VERSION).multi.release.so \ + $(1)/usr/lib/$(lib).$(GCNANO_BINARIES_LIB_VERSION).multi.release.so ; \ + cp -a $(@D)/$(GCNANO_BINARIES_USERLAND_SUBDIR)/usr/lib/$(lib).so* $(1)/usr/lib + ) + mkdir -p $(1)/usr/include + cp -a $(@D)/$(GCNANO_BINARIES_USERLAND_SUBDIR)/usr/include/* $(1)/usr/include/ + $(foreach pkgconfig,$(GCNANO_BINARIES_PKG_CONFIGS), \ + $(INSTALL) -D -m 0644 $(@D)/$(GCNANO_BINARIES_USERLAND_SUBDIR)/usr/lib/pkgconfig/$(pkgconfig).pc \ + $(1)/usr/lib/pkgconfig/$(pkgconfig).pc + ) +endef + +define GCNANO_BINARIES_INSTALL_TARGET_CMDS + $(call GCNANO_BINARIES_INSTALL,$(TARGET_DIR)) +endef + +define GCNANO_BINARIES_INSTALL_STAGING_CMDS + $(call GCNANO_BINARIES_INSTALL,$(STAGING_DIR)) +endef + +$(eval $(kernel-module)) +$(eval $(generic-package)) diff --git a/package/gconf/Config.in b/package/gconf/Config.in new file mode 100644 index 00000000..a2371b3f --- /dev/null +++ b/package/gconf/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_GCONF + bool "gconf" + depends on BR2_TOOLCHAIN_HAS_THREADS # dbus, libglib2 + depends on BR2_USE_MMU # dbus, libglib2 + depends on BR2_USE_WCHAR # libglib2 + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_DBUS + select BR2_PACKAGE_DBUS_GLIB + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBXML2 + help + GConf was a system used by the GNOME desktop environment for + storing configuration settings for the desktop and + applications. It is similar to the Windows Registry. + + https://projects.gnome.org/gconf/ + +comment "gconf needs a toolchain w/ threads, wchar, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR \ + || BR2_STATIC_LIBS diff --git a/package/gconf/gconf.hash b/package/gconf/gconf.hash new file mode 100644 index 00000000..24d0cf9b --- /dev/null +++ b/package/gconf/gconf.hash @@ -0,0 +1,4 @@ +# http://ftp.acc.umu.se/pub/gnome/sources/GConf/3.2/GConf-3.2.6.sha256sum +sha256 1912b91803ab09a5eed34d364bf09fe3a2a9c96751fde03a4e0cfa51a04d784c GConf-3.2.6.tar.xz +# License files, locally calculated +sha256 94b03f1a60a7fd5007149530626a895a6ef5a8b9342abfd56860c5f3956f5d23 COPYING diff --git a/package/gconf/gconf.mk b/package/gconf/gconf.mk new file mode 100644 index 00000000..c468d143 --- /dev/null +++ b/package/gconf/gconf.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# gconf +# +################################################################################ + +GCONF_VERSION = 3.2.6 +GCONF_SOURCE = GConf-$(GCONF_VERSION).tar.xz +GCONF_SITE = http://ftp.gnome.org/pub/gnome/sources/GConf/3.2 +GCONF_CONF_OPTS = --disable-orbit +GCONF_DEPENDENCIES = dbus dbus-glib libglib2 libxml2 \ + host-intltool $(TARGET_NLS_DEPENDENCIES) +GCONF_LICENSE = LGPL-2.0+ +GCONF_LICENSE_FILES = COPYING + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +GCONF_CONF_OPTS += --enable-introspection +GCONF_DEPENDENCIES += gobject-introspection +else +GCONF_CONF_OPTS += --disable-introspection +endif + +$(eval $(autotools-package)) diff --git a/package/gcr/Config.in b/package/gcr/Config.in new file mode 100644 index 00000000..e233fffe --- /dev/null +++ b/package/gcr/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_GCR + bool "gcr" + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # gnupg2 + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + depends on !BR2_STATIC_LIBS # p11-kit + select BR2_PACKAGE_GNUPG2 # runtime + select BR2_PACKAGE_LIBGCRYPT + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_P11_KIT + help + Library for cryptographic UIs and accessing PKCS#11 modules. + + https://developer.gnome.org/gcr/ + +comment "gcr needs a toolchain w/ wchar, threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS diff --git a/package/gcr/gcr.hash b/package/gcr/gcr.hash new file mode 100644 index 00000000..7d5786db --- /dev/null +++ b/package/gcr/gcr.hash @@ -0,0 +1,3 @@ +# From http://ftp.acc.umu.se/pub/gnome/sources/gcr/3.34/gcr-3.34.0.sha256sum +sha256 29df50974a90987af694c0fb8926a6b366e68cacd8abd813817cfe1eb5d54524 gcr-3.34.0.tar.xz +sha256 94b03f1a60a7fd5007149530626a895a6ef5a8b9342abfd56860c5f3956f5d23 COPYING diff --git a/package/gcr/gcr.mk b/package/gcr/gcr.mk new file mode 100644 index 00000000..7f71614b --- /dev/null +++ b/package/gcr/gcr.mk @@ -0,0 +1,41 @@ +################################################################################ +# +# gcr +# +################################################################################ + +GCR_VERSION_MAJOR = 3.34 +GCR_VERSION = $(GCR_VERSION_MAJOR).0 +GCR_SITE = http://ftp.acc.umu.se/pub/gnome/sources/gcr/$(GCR_VERSION_MAJOR) +GCR_SOURCE = gcr-$(GCR_VERSION).tar.xz +GCR_DEPENDENCIES = \ + host-pkgconf \ + libgcrypt \ + libglib2 \ + p11-kit \ + $(TARGET_NLS_DEPENDENCIES) +GCR_INSTALL_STAGING = YES +GCR_CONF_ENV = ac_cv_path_GNUPG=/usr/bin/gpg2 +GCR_CONF_OPTS = \ + --disable-gtk-doc \ + --with-libgcrypt-prefix=$(STAGING_DIR)/usr +# Even though COPYING is v2 the code states v2.1+ +GCR_LICENSE = LGPL-2.1+ +GCR_LICENSE_FILES = COPYING + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +GCR_DEPENDENCIES += gobject-introspection host-libxslt +GCR_CONF_OPTS += --enable-introspection +else +GCR_CONF_OPTS += --disable-introspection +endif + +# Only the X11 backend is supported for the simple GUI +ifeq ($(BR2_PACKAGE_LIBGTK3_X11),y) +GCR_DEPENDENCIES += libgtk3 +GCR_CONF_OPTS += --with-gtk +else +GCR_CONF_OPTS += --without-gtk +endif + +$(eval $(autotools-package)) diff --git a/package/gd/Config.in b/package/gd/Config.in new file mode 100644 index 00000000..861cef88 --- /dev/null +++ b/package/gd/Config.in @@ -0,0 +1,58 @@ +menuconfig BR2_PACKAGE_GD + bool "gd" + help + GD is a graphics library. It allows your code to quickly + draw images complete with lines, arcs, text, multiple + colours, cut and paste from other images, flood fills, and + write out the result as a PNG file. This is particularly + useful in World Wide Web applications, where PNG is one of + the formats accepted for inline images by most browsers. + + https://libgd.github.io/ + +if BR2_PACKAGE_GD + +config BR2_PACKAGE_GD_ANNOTATE + bool "annotate" + +config BR2_PACKAGE_GD_BDFTOGD + bool "bdftogd" + depends on BR2_PACKAGE_PERL + +config BR2_PACKAGE_GD_GD2COPYPAL + bool "gd2copypal" + +config BR2_PACKAGE_GD_GD2TOGIF + bool "gd2togif" + +config BR2_PACKAGE_GD_GD2TOPNG + bool "gd2topng" + select BR2_PACKAGE_LIBPNG + +config BR2_PACKAGE_GD_GDCMPGIF + bool "gdcmpgif" + +config BR2_PACKAGE_GD_GDPARTTOPNG + bool "gdparttopng" + select BR2_PACKAGE_LIBPNG + +config BR2_PACKAGE_GD_GDTOPNG + bool "gdtopng" + select BR2_PACKAGE_LIBPNG + +config BR2_PACKAGE_GD_GIFTOGD2 + bool "giftogd2" + +config BR2_PACKAGE_GD_PNGTOGD + bool "pngtogd" + select BR2_PACKAGE_LIBPNG + +config BR2_PACKAGE_GD_PNGTOGD2 + bool "pngtogd2" + select BR2_PACKAGE_LIBPNG + +config BR2_PACKAGE_GD_WEBPNG + bool "webpng" + select BR2_PACKAGE_LIBPNG + +endif diff --git a/package/gd/gd.hash b/package/gd/gd.hash new file mode 100644 index 00000000..5aec317f --- /dev/null +++ b/package/gd/gd.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 ecd9155b9a417fb3f837f29e5966323796de247789163761dd72dbf83bfcac58 libgd-2.3.0.tar.xz +sha256 4d80b4af6c38d7a65128c881623dee2a5daee6b3a6ccab74a5cdfa0dfda96da7 COPYING diff --git a/package/gd/gd.mk b/package/gd/gd.mk new file mode 100644 index 00000000..c7037f8d --- /dev/null +++ b/package/gd/gd.mk @@ -0,0 +1,96 @@ +################################################################################ +# +# gd +# +################################################################################ + +GD_VERSION = 2.3.0 +GD_SOURCE = libgd-$(GD_VERSION).tar.xz +GD_SITE = https://github.com/libgd/libgd/releases/download/gd-$(GD_VERSION) +GD_INSTALL_STAGING = YES +GD_LICENSE = GD license +GD_LICENSE_FILES = COPYING +GD_CPE_ID_VENDOR = libgd +GD_CPE_ID_PRODUCT = libgd +GD_CONF_OPTS = --without-x --disable-rpath --disable-werror +GD_DEPENDENCIES = host-pkgconf + +# gd forgets to link utilities with -pthread even though it uses +# pthreads, causing linking errors with static linking +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +GD_CONF_ENV += LDFLAGS="$(TARGET_LDFLAGS) -pthread" +endif + +ifeq ($(BR2_PACKAGE_FONTCONFIG),y) +GD_DEPENDENCIES += fontconfig +GD_CONF_OPTS += --with-fontconfig +endif + +ifeq ($(BR2_PACKAGE_FREETYPE),y) +GD_DEPENDENCIES += freetype +GD_CONF_OPTS += --with-freetype=$(STAGING_DIR)/usr +else +GD_CONF_OPTS += --without-freetype +endif + +ifeq ($(BR2_PACKAGE_LIBICONV),y) +GD_DEPENDENCIES += libiconv +# not strictly needed for gd, but ensures -liconv ends up in gdlib.pc +GD_CONF_ENV += LIBS="-liconv" +endif + +ifeq ($(BR2_PACKAGE_JPEG),y) +GD_DEPENDENCIES += jpeg +GD_CONF_OPTS += --with-jpeg +endif + +ifeq ($(BR2_PACKAGE_LIBPNG),y) +GD_DEPENDENCIES += libpng +GD_CONF_OPTS += --with-png +else +GD_CONF_OPTS += --without-png +endif + +ifeq ($(BR2_PACKAGE_WEBP),y) +GD_DEPENDENCIES += webp +GD_CONF_OPTS += --with-webp +else +GD_CONF_OPTS += --without-webp +endif + +ifeq ($(BR2_PACKAGE_TIFF),y) +GD_DEPENDENCIES += tiff +GD_CONF_OPTS += --with-tiff +else +GD_CONF_OPTS += --without-tiff +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXPM),y) +GD_DEPENDENCIES += xlib_libXpm +GD_CONF_OPTS += --with-xpm +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +GD_DEPENDENCIES += zlib +endif + +GD_TOOLS_$(BR2_PACKAGE_GD_ANNOTATE) += annotate +GD_TOOLS_$(BR2_PACKAGE_GD_BDFTOGD) += bdftogd +GD_TOOLS_$(BR2_PACKAGE_GD_GD2COPYPAL) += gd2copypal +GD_TOOLS_$(BR2_PACKAGE_GD_GD2TOGIF) += gd2togif +GD_TOOLS_$(BR2_PACKAGE_GD_GD2TOPNG) += gd2topng +GD_TOOLS_$(BR2_PACKAGE_GD_GDCMPGIF) += gdcmpgif +GD_TOOLS_$(BR2_PACKAGE_GD_GDPARTTOPNG) += gdparttopng +GD_TOOLS_$(BR2_PACKAGE_GD_GDTOPNG) += gdtopng +GD_TOOLS_$(BR2_PACKAGE_GD_GIFTOGD2) += giftogd2 +GD_TOOLS_$(BR2_PACKAGE_GD_PNGTOGD) += pngtogd +GD_TOOLS_$(BR2_PACKAGE_GD_PNGTOGD2) += pngtogd2 +GD_TOOLS_$(BR2_PACKAGE_GD_WEBPNG) += webpng + +define GD_REMOVE_TOOLS + rm -f $(addprefix $(TARGET_DIR)/usr/bin/,$(GD_TOOLS_)) +endef + +GD_POST_INSTALL_TARGET_HOOKS += GD_REMOVE_TOOLS + +$(eval $(autotools-package)) diff --git a/package/gdb/10.1/0001-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch b/package/gdb/10.1/0001-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch new file mode 100644 index 00000000..9369a14d --- /dev/null +++ b/package/gdb/10.1/0001-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch @@ -0,0 +1,55 @@ +From 64b8ab56118d2fea027adfb7ebbc01668b29528e Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sat, 6 Aug 2016 17:32:50 -0700 +Subject: [PATCH] ppc/ptrace: Define pt_regs uapi_pt_regs on !GLIBC systems + +Upstream-Status: Pending + +Signed-off-by: Khem Raj +Signed-off-by: Thomas Petazzoni +[Rebase on gdb 8.3] +Signed-off-by: Romain Naour +--- + gdb/nat/ppc-linux.h | 6 ++++++ + gdbserver/linux-ppc-low.cc | 6 ++++++ + 2 files changed, 12 insertions(+) + +diff --git a/gdb/nat/ppc-linux.h b/gdb/nat/ppc-linux.h +index d937a65b69c..1fd54b4a0e0 100644 +--- a/gdb/nat/ppc-linux.h ++++ b/gdb/nat/ppc-linux.h +@@ -18,7 +18,13 @@ + #ifndef NAT_PPC_LINUX_H + #define NAT_PPC_LINUX_H + ++#if !defined(__GLIBC__) ++# define pt_regs uapi_pt_regs ++#endif + #include ++#if !defined(__GLIBC__) ++# undef pt_regs ++#endif + #include + + /* This sometimes isn't defined. */ +diff --git a/gdbserver/linux-ppc-low.cc b/gdbserver/linux-ppc-low.cc +index 337d555aee7..5d518f37268 100644 +--- a/gdbserver/linux-ppc-low.cc ++++ b/gdbserver/linux-ppc-low.cc +@@ -23,7 +23,13 @@ + #include "elf/common.h" + #include + #include ++#if !defined(__GLIBC__) ++# define pt_regs uapi_pt_regs ++#endif + #include ++#if !defined(__GLIBC__) ++# undef pt_regs ++#endif + + #include "arch/ppc-linux-common.h" + #include "arch/ppc-linux-tdesc.h" +-- +2.29.2 + diff --git a/package/gdb/10.1/0002-sh-ptrace-Define-pt_-dsp-regs-uapi_pt_-dsp-regs-on-G.patch b/package/gdb/10.1/0002-sh-ptrace-Define-pt_-dsp-regs-uapi_pt_-dsp-regs-on-G.patch new file mode 100644 index 00000000..2f96d298 --- /dev/null +++ b/package/gdb/10.1/0002-sh-ptrace-Define-pt_-dsp-regs-uapi_pt_-dsp-regs-on-G.patch @@ -0,0 +1,43 @@ +From d205f398e1e36f9673f50f368a3f29fd1dfaa794 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sat, 3 Jun 2017 21:23:52 +0200 +Subject: [PATCH] sh/ptrace: Define pt_{dsp,}regs uapi_pt_{dsp,}regs on !GLIBC + systems + +Fixes a pt_{dsp,}regs redefinition when building with the musl C library +on SuperH. + +Inspired by +http://git.yoctoproject.org/clean/cgit.cgi/poky/plain/meta/recipes-devtools/gdb/gdb/0004-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch, +adapted for SuperH. + +Signed-off-by: Thomas Petazzoni +[Rebase on gdb 8.0] +Signed-off-by: Romain Naour +--- + gdbserver/linux-sh-low.cc | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/gdbserver/linux-sh-low.cc b/gdbserver/linux-sh-low.cc +index a6d3fc60047..b83cce6b9fe 100644 +--- a/gdbserver/linux-sh-low.cc ++++ b/gdbserver/linux-sh-low.cc +@@ -76,7 +76,15 @@ extern const struct target_desc *tdesc_sh; + #include + #endif + ++#if !defined(__GLIBC__) ++# define pt_regs uapi_pt_regs ++# define pt_dspregs uapi_pt_dspregs ++#endif + #include ++#if !defined(__GLIBC__) ++# undef pt_regs ++# undef pt_dspregs ++#endif + + #define sh_num_regs 41 + +-- +2.29.2 + diff --git a/package/gdb/10.1/0003-use-asm-sgidefs.h.patch b/package/gdb/10.1/0003-use-asm-sgidefs.h.patch new file mode 100644 index 00000000..e04ebd1d --- /dev/null +++ b/package/gdb/10.1/0003-use-asm-sgidefs.h.patch @@ -0,0 +1,40 @@ +From 65acc8800dba7e10da882871d4648241805c47ce Mon Sep 17 00:00:00 2001 +From: Andre McCurdy +Date: Sat, 30 Apr 2016 15:29:06 -0700 +Subject: [PATCH] use + +Build fix for MIPS with musl libc + +The MIPS specific header is provided by glibc and uclibc +but not by musl. Regardless of the libc, the kernel headers provide + which provides the same definitions, so use that +instead. + +Upstream-Status: Pending + +[Vincent: +Taken from: https://sourceware.org/bugzilla/show_bug.cgi?id=21070] + +Signed-off-by: Andre McCurdy +Signed-off-by: Khem Raj +Signed-off-by: Vicente Olivert Riera +--- + gdb/mips-linux-nat.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/gdb/mips-linux-nat.c b/gdb/mips-linux-nat.c +index 38ff461a35b..b6cf194b2bf 100644 +--- a/gdb/mips-linux-nat.c ++++ b/gdb/mips-linux-nat.c +@@ -31,7 +31,7 @@ + #include "gdb_proc_service.h" + #include "gregset.h" + +-#include ++#include + #include "nat/gdb_ptrace.h" + #include + #include "inf-ptrace.h" +-- +2.29.2 + diff --git a/package/gdb/10.1/0004-gdbserver-fix-build-for-m68k.patch b/package/gdb/10.1/0004-gdbserver-fix-build-for-m68k.patch new file mode 100644 index 00000000..846f7ed2 --- /dev/null +++ b/package/gdb/10.1/0004-gdbserver-fix-build-for-m68k.patch @@ -0,0 +1,63 @@ +From 90ebe548922538b854de52e8b687384f44360984 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Fri, 22 Jun 2018 22:40:26 +0200 +Subject: [PATCH] gdbserver: fix build for m68k +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +As for strace [1], when is included after , +the build fails on m68k with the following diagnostics: + +In file included from ./../nat/linux-ptrace.h:28:0, + from linux-low.h:27, + from linux-m68k-low.c:20: +[...]/usr/include/sys/reg.h:26:3: error: expected identifier before numeric constant + PT_D1 = 0, + ^ +[...]usr/include/sys/reg.h:26:3: error: expected « } » before numeric constant +[...]usr/include/sys/reg.h:26:3: error: expected unqualified-id before numeric constant +In file included from linux-m68k-low.c:27:0: +[...]usr/include/sys/reg.h:99:1: error: expected declaration before « } » token + }; + ^ + +Fix this by moving on top of "linux-low.h". + +[1] https://github.com/strace/strace/commit/6ebf6c4f9e5ebca123a5b5f24afe67cf0473cf92 + +Signed-off-by: Romain Naour +--- + gdbserver/linux-m68k-low.cc | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/gdbserver/linux-m68k-low.cc b/gdbserver/linux-m68k-low.cc +index 838ba353b0b..36679682b9a 100644 +--- a/gdbserver/linux-m68k-low.cc ++++ b/gdbserver/linux-m68k-low.cc +@@ -17,6 +17,11 @@ + along with this program. If not, see . */ + + #include "server.h" ++ ++#ifdef HAVE_SYS_REG_H ++#include ++#endif ++ + #include "linux-low.h" + + /* Linux target op definitions for the m68k architecture. */ +@@ -80,10 +85,6 @@ m68k_target::low_decr_pc_after_break () + void init_registers_m68k (void); + extern const struct target_desc *tdesc_m68k; + +-#ifdef HAVE_SYS_REG_H +-#include +-#endif +- + #define m68k_num_regs 29 + #define m68k_num_gregs 18 + +-- +2.29.2 + diff --git a/package/gdb/10.1/0005-nat-fork-inferior-include-linux-ptrace.h.patch b/package/gdb/10.1/0005-nat-fork-inferior-include-linux-ptrace.h.patch new file mode 100644 index 00000000..33dce4d9 --- /dev/null +++ b/package/gdb/10.1/0005-nat-fork-inferior-include-linux-ptrace.h.patch @@ -0,0 +1,53 @@ +From c8454711eca2e79437e17ed1e1e68b48b4c8d927 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sun, 24 Jun 2018 23:33:55 +0200 +Subject: [PATCH] nat/fork-inferior: include linux-ptrace.h + +To decide whether fork() or vfork() should be used, fork-inferior.c +uses the following test: + + #if !(defined(__UCLIBC__) && defined(HAS_NOMMU)) + +However, HAS_NOMMU is never defined, because it gets defined in +linux-ptrace.h, which is not included by fork-inferior.c. Due to this, +gdbserver fails to build on noMMU architectures. This commit fixes +that by simply including linux-ptrace.h. + +This bug was introduced by commit +2090129c36c7e582943b7d300968d19b46160d84 ("Share fork_inferior et al +with gdbserver"). Indeed, the same fork()/vfork() selection was done, +but in another file where linux-ptrace.h was included. + +Fixes the following build issue: + +../nat/fork-inferior.c: In function 'pid_t fork_inferior(const char*, const string&, char**, void (*)(), void (*)(int), void (*)(), const char*, void (*)(const char*, char* const*, char* const*))': +../nat/fork-inferior.c:376:11: error: 'fork' was not declared in this scope + pid = fork (); + ^~~~ +../nat/fork-inferior.c:376:11: note: suggested alternative: 'vfork' + pid = fork (); + ^~~~ + vfork + +Signed-off-by: Thomas Petazzoni +[Romain: rebase on gdb 8.3] +Signed-off-by: Romain Naour +--- + gdb/nat/fork-inferior.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/gdb/nat/fork-inferior.c b/gdb/nat/fork-inferior.c +index 7ba0126871d..53e1ec72f09 100644 +--- a/gdb/nat/fork-inferior.c ++++ b/gdb/nat/fork-inferior.c +@@ -27,6 +27,7 @@ + #include "gdbsupport/pathstuff.h" + #include "gdbsupport/signals-state-save-restore.h" + #include "gdbsupport/gdb_tilde_expand.h" ++#include "linux-ptrace.h" + #include + + extern char **environ; +-- +2.29.2 + diff --git a/package/gdb/4ecb98fbc2f94dbe01b69384afbc515107de73df/0001-Fix-Python3.9-related-runtime-problems.patch b/package/gdb/4ecb98fbc2f94dbe01b69384afbc515107de73df/0001-Fix-Python3.9-related-runtime-problems.patch new file mode 100644 index 00000000..8c2a9d3d --- /dev/null +++ b/package/gdb/4ecb98fbc2f94dbe01b69384afbc515107de73df/0001-Fix-Python3.9-related-runtime-problems.patch @@ -0,0 +1,193 @@ +From 8342feee01e4e8d38affcf35e47ad900567f42e0 Mon Sep 17 00:00:00 2001 +From: Kevin Buettner +Date: Wed, 27 May 2020 20:05:40 -0700 +Subject: [PATCH] Fix Python3.9 related runtime problems + +Python3.9b1 is now available on Rawhide. GDB w/ Python 3.9 support +can be built using the configure switch -with-python=/usr/bin/python3.9. + +Attempting to run gdb/Python3.9 segfaults on startup: + + #0 0x00007ffff7b0582c in PyEval_ReleaseLock () from /lib64/libpython3.9.so.1.0 + #1 0x000000000069ccbf in do_start_initialization () + at worktree-test1/gdb/python/python.c:1789 + #2 _initialize_python () + at worktree-test1/gdb/python/python.c:1877 + #3 0x00000000007afb0a in initialize_all_files () at init.c:237 + ... + +Consulting the the documentation... + +https://docs.python.org/3/c-api/init.html + +...we find that PyEval_ReleaseLock() has been deprecated since version +3.2. It recommends using PyEval_SaveThread or PyEval_ReleaseThread() +instead. In do_start_initialization, in gdb/python/python.c, we +can replace the calls to PyThreadState_Swap() and PyEval_ReleaseLock() +with a single call to PyEval_SaveThread. (Thanks to Keith Seitz +for working this out.) + +With that in place, GDB gets a little bit further. It still dies +on startup, but the backtrace is different: + + #0 0x00007ffff7b04306 in PyOS_InterruptOccurred () + from /lib64/libpython3.9.so.1.0 + #1 0x0000000000576e86 in check_quit_flag () + at worktree-test1/gdb/extension.c:776 + #2 0x0000000000576f8a in set_active_ext_lang (now_active=now_active@entry=0x983c00 ) + at worktree-test1/gdb/extension.c:705 + #3 0x000000000069d399 in gdbpy_enter::gdbpy_enter (this=0x7fffffffd2d0, + gdbarch=0x0, language=0x0) + at worktree-test1/gdb/python/python.c:211 + #4 0x0000000000686e00 in python_new_inferior (inf=0xddeb10) + at worktree-test1/gdb/python/py-inferior.c:251 + #5 0x00000000005d9fb9 in std::function::operator()(inferior*) const (__args#0=, this=0xccad20) + at /usr/include/c++/10/bits/std_function.h:617 + #6 gdb::observers::observable::notify (args#0=0xddeb10, + this=) + at worktree-test1/gdb/../gdbsupport/observable.h:106 + #7 add_inferior_silent (pid=0) + at worktree-test1/gdb/inferior.c:113 + #8 0x00000000005dbcb8 in initialize_inferiors () + at worktree-test1/gdb/inferior.c:947 + ... + +We checked with some Python Developers and were told that we should +acquire the GIL prior to calling any Python C API function. We +definitely don't have the GIL for calls of PyOS_InterruptOccurred(). + +I moved class_gdbpy_gil earlier in the file and use it in +gdbpy_check_quit_flag() to acquire (and automatically release) the +GIL. + +With those changes in place, I was able to run to a GDB prompt. But, +when trying to quit, it segfaulted again due to due to some other +problems with gdbpy_check_quit_flag(): + + Thread 1 "gdb" received signal SIGSEGV, Segmentation fault. + 0x00007ffff7bbab0c in new_threadstate () from /lib64/libpython3.9.so.1.0 + (top-gdb) bt 8 + #0 0x00007ffff7bbab0c in new_threadstate () from /lib64/libpython3.9.so.1.0 + #1 0x00007ffff7afa5ea in PyGILState_Ensure.cold () + from /lib64/libpython3.9.so.1.0 + #2 0x000000000069b58c in gdbpy_gil::gdbpy_gil (this=) + at worktree-test1/gdb/python/python.c:278 + #3 gdbpy_check_quit_flag (extlang=) + at worktree-test1/gdb/python/python.c:278 + #4 0x0000000000576e96 in check_quit_flag () + at worktree-test1/gdb/extension.c:776 + #5 0x000000000057700c in restore_active_ext_lang (previous=0xe9c050) + at worktree-test1/gdb/extension.c:729 + #6 0x000000000088913a in do_my_cleanups ( + pmy_chain=0xc31870 , + old_chain=0xae5720 ) + at worktree-test1/gdbsupport/cleanups.cc:131 + #7 do_final_cleanups () + at worktree-test1/gdbsupport/cleanups.cc:143 + +In this case, we're trying to call a Python C API function after +Py_Finalize() has been called from finalize_python(). I made +finalize_python set gdb_python_initialized to false and then cause +check_quit_flag() to return early when it's false. + +With these changes in place, GDB seems to be working again with +Python3.9b1. I think it likely that there are other problems lurking. +I wouldn't be surprised to find that there are other calls into Python +where we don't first make sure that we have the GIL. Further changes +may well be needed. + +I see no regressions testing on Rawhide using a GDB built with the +default Python version (3.8.3) versus one built using Python 3.9b1. + +I've also tested on Fedora 28, 29, 30, 31, and 32 (all x86_64) using +the default (though updated) system installed versions of Python on +those OSes. This means that I've tested against Python versions +2.7.15, 2.7.17, 2.7.18, 3.7.7, 3.8.2, and 3.8.3. In each case GDB +still builds without problem and shows no regressions after applying +this patch. + +gdb/ChangeLog: + +2020-MM-DD Kevin Buettner + Keith Seitz + + * python/python.c (do_start_initialization): For Python 3.9 and + later, call PyEval_SaveThread instead of PyEval_ReleaseLock. + (class gdbpy_gil): Move to earlier in file. + (finalize_python): Set gdb_python_initialized. + (gdbpy_check_quit_flag): Acquire GIL via gdbpy_gil. Return early + when not initialized. + +[import into Buildroot, removing ChangeLog change to avoid conflict] +Signed-off-by: Thomas De Schampheleire +--- + gdb/python/python.c | 32 ++++++++++++++++++++++++++++++-- + 1 file changed, 30 insertions(+), 2 deletions(-) + +diff --git a/gdb/python/python.c b/gdb/python/python.c +index b00b70be85b..0eee3f0397c 100644 +--- a/gdb/python/python.c ++++ b/gdb/python/python.c +@@ -268,6 +268,30 @@ ensure_python_env (struct gdbarch *gdbarch, + return make_cleanup (restore_python_env, env); + } + ++/* A helper class to save and restore the GIL, but without touching ++ the other globals that are handled by gdbpy_enter. */ ++ ++class gdbpy_gil ++{ ++public: ++ ++ gdbpy_gil () ++ : m_state (PyGILState_Ensure ()) ++ { ++ } ++ ++ ~gdbpy_gil () ++ { ++ PyGILState_Release (m_state); ++ } ++ ++ DISABLE_COPY_AND_ASSIGN (gdbpy_gil); ++ ++private: ++ ++ PyGILState_STATE m_state; ++}; ++ + /* Set the quit flag. */ + + static void +@@ -281,6 +305,10 @@ gdbpy_set_quit_flag (const struct extension_language_defn *extlang) + static int + gdbpy_check_quit_flag (const struct extension_language_defn *extlang) + { ++ if (!gdb_python_initialized) ++ return 0; ++ ++ gdbpy_gil gil; + return PyOS_InterruptOccurred (); + } + +@@ -1620,6 +1648,7 @@ finalize_python (void *ignore) + + Py_Finalize (); + ++ gdb_python_initialized = false; + restore_active_ext_lang (previous_active); + } + #endif +@@ -1854,8 +1883,7 @@ message == an error message without a stack will be printed."), + goto fail; + + /* Release the GIL while gdb runs. */ +- PyThreadState_Swap (NULL); +- PyEval_ReleaseLock (); ++ PyEval_SaveThread (); + + make_final_cleanup (finalize_python, NULL); + +-- +2.31.1 + diff --git a/package/gdb/8.3.1/0001-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch b/package/gdb/8.3.1/0001-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch new file mode 100644 index 00000000..ab8dc626 --- /dev/null +++ b/package/gdb/8.3.1/0001-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch @@ -0,0 +1,55 @@ +From 72ee19f54fd35595465b2e35eccf1f3d65fe21c6 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sat, 6 Aug 2016 17:32:50 -0700 +Subject: [PATCH] ppc/ptrace: Define pt_regs uapi_pt_regs on !GLIBC systems + +Upstream-Status: Pending + +Signed-off-by: Khem Raj +Signed-off-by: Thomas Petazzoni +[Rebase on gdb 8.3] +Signed-off-by: Romain Naour +--- + gdb/gdbserver/linux-ppc-low.c | 6 ++++++ + gdb/nat/ppc-linux.h | 6 ++++++ + 2 files changed, 12 insertions(+) + +diff --git a/gdb/gdbserver/linux-ppc-low.c b/gdb/gdbserver/linux-ppc-low.c +index 1b695e53fe9..1978347c02c 100644 +--- a/gdb/gdbserver/linux-ppc-low.c ++++ b/gdb/gdbserver/linux-ppc-low.c +@@ -23,7 +23,13 @@ + #include "elf/common.h" + #include + #include ++#if !defined(__GLIBC__) ++# define pt_regs uapi_pt_regs ++#endif + #include ++#if !defined(__GLIBC__) ++# undef pt_regs ++#endif + + #include "arch/ppc-linux-common.h" + #include "arch/ppc-linux-tdesc.h" +diff --git a/gdb/nat/ppc-linux.h b/gdb/nat/ppc-linux.h +index f1561b3b357..40399361c09 100644 +--- a/gdb/nat/ppc-linux.h ++++ b/gdb/nat/ppc-linux.h +@@ -18,7 +18,13 @@ + #ifndef NAT_PPC_LINUX_H + #define NAT_PPC_LINUX_H + ++#if !defined(__GLIBC__) ++# define pt_regs uapi_pt_regs ++#endif + #include ++#if !defined(__GLIBC__) ++# undef pt_regs ++#endif + #include + + /* This sometimes isn't defined. */ +-- +2.21.0 + diff --git a/package/gdb/8.3.1/0002-sh-ptrace-Define-pt_-dsp-regs-uapi_pt_-dsp-regs-on-G.patch b/package/gdb/8.3.1/0002-sh-ptrace-Define-pt_-dsp-regs-uapi_pt_-dsp-regs-on-G.patch new file mode 100644 index 00000000..9d508fbf --- /dev/null +++ b/package/gdb/8.3.1/0002-sh-ptrace-Define-pt_-dsp-regs-uapi_pt_-dsp-regs-on-G.patch @@ -0,0 +1,43 @@ +From ef630288fdc2d4d22651702672f9d5c9cd767e5b Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sat, 3 Jun 2017 21:23:52 +0200 +Subject: [PATCH] sh/ptrace: Define pt_{dsp,}regs uapi_pt_{dsp,}regs on !GLIBC + systems + +Fixes a pt_{dsp,}regs redefinition when building with the musl C library +on SuperH. + +Inspired by +http://git.yoctoproject.org/clean/cgit.cgi/poky/plain/meta/recipes-devtools/gdb/gdb/0004-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch, +adapted for SuperH. + +Signed-off-by: Thomas Petazzoni +[Rebase on gdb 8.0] +Signed-off-by: Romain Naour +--- + gdb/gdbserver/linux-sh-low.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/gdb/gdbserver/linux-sh-low.c b/gdb/gdbserver/linux-sh-low.c +index 0953721a190..c331c1382f7 100644 +--- a/gdb/gdbserver/linux-sh-low.c ++++ b/gdb/gdbserver/linux-sh-low.c +@@ -27,7 +27,15 @@ extern const struct target_desc *tdesc_sh; + #include + #endif + ++#if !defined(__GLIBC__) ++# define pt_regs uapi_pt_regs ++# define pt_dspregs uapi_pt_dspregs ++#endif + #include ++#if !defined(__GLIBC__) ++# undef pt_regs ++# undef pt_dspregs ++#endif + + #define sh_num_regs 41 + +-- +2.21.0 + diff --git a/package/gdb/8.3.1/0003-use-asm-sgidefs.h.patch b/package/gdb/8.3.1/0003-use-asm-sgidefs.h.patch new file mode 100644 index 00000000..2909f62c --- /dev/null +++ b/package/gdb/8.3.1/0003-use-asm-sgidefs.h.patch @@ -0,0 +1,40 @@ +From 19a0f664809b6858e69aa98188eb739415de044c Mon Sep 17 00:00:00 2001 +From: Andre McCurdy +Date: Sat, 30 Apr 2016 15:29:06 -0700 +Subject: [PATCH] use + +Build fix for MIPS with musl libc + +The MIPS specific header is provided by glibc and uclibc +but not by musl. Regardless of the libc, the kernel headers provide + which provides the same definitions, so use that +instead. + +Upstream-Status: Pending + +[Vincent: +Taken from: https://sourceware.org/bugzilla/show_bug.cgi?id=21070] + +Signed-off-by: Andre McCurdy +Signed-off-by: Khem Raj +Signed-off-by: Vicente Olivert Riera +--- + gdb/mips-linux-nat.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/gdb/mips-linux-nat.c b/gdb/mips-linux-nat.c +index e68ed1e4da9..bc42aa59685 100644 +--- a/gdb/mips-linux-nat.c ++++ b/gdb/mips-linux-nat.c +@@ -31,7 +31,7 @@ + #include "gdb_proc_service.h" + #include "gregset.h" + +-#include ++#include + #include "nat/gdb_ptrace.h" + #include + #include "inf-ptrace.h" +-- +2.21.0 + diff --git a/package/gdb/8.3.1/0004-gdbserver-fix-build-for-m68k.patch b/package/gdb/8.3.1/0004-gdbserver-fix-build-for-m68k.patch new file mode 100644 index 00000000..d7182938 --- /dev/null +++ b/package/gdb/8.3.1/0004-gdbserver-fix-build-for-m68k.patch @@ -0,0 +1,62 @@ +From 448e481aab86c823d908530038e20a14213db0a2 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Fri, 22 Jun 2018 22:40:26 +0200 +Subject: [PATCH] gdbserver: fix build for m68k +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +As for strace [1], when is included after , +the build fails on m68k with the following diagnostics: + +In file included from ./../nat/linux-ptrace.h:28:0, + from linux-low.h:27, + from linux-m68k-low.c:20: +[...]/usr/include/sys/reg.h:26:3: error: expected identifier before numeric constant + PT_D1 = 0, + ^ +[...]usr/include/sys/reg.h:26:3: error: expected « } » before numeric constant +[...]usr/include/sys/reg.h:26:3: error: expected unqualified-id before numeric constant +In file included from linux-m68k-low.c:27:0: +[...]usr/include/sys/reg.h:99:1: error: expected declaration before « } » token + }; + ^ + +Fix this by moving on top of "linux-low.h". + +[1] https://github.com/strace/strace/commit/6ebf6c4f9e5ebca123a5b5f24afe67cf0473cf92 + +Signed-off-by: Romain Naour +--- + gdb/gdbserver/linux-m68k-low.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/gdb/gdbserver/linux-m68k-low.c b/gdb/gdbserver/linux-m68k-low.c +index 16f639d02fc..969d9973737 100644 +--- a/gdb/gdbserver/linux-m68k-low.c ++++ b/gdb/gdbserver/linux-m68k-low.c +@@ -17,16 +17,17 @@ + along with this program. If not, see . */ + + #include "server.h" ++ ++#ifdef HAVE_SYS_REG_H ++#include ++#endif ++ + #include "linux-low.h" + + /* Defined in auto-generated file reg-m68k.c. */ + void init_registers_m68k (void); + extern const struct target_desc *tdesc_m68k; + +-#ifdef HAVE_SYS_REG_H +-#include +-#endif +- + #define m68k_num_regs 29 + #define m68k_num_gregs 18 + +-- +2.21.0 + diff --git a/package/gdb/8.3.1/0005-nat-fork-inferior-include-linux-ptrace.h.patch b/package/gdb/8.3.1/0005-nat-fork-inferior-include-linux-ptrace.h.patch new file mode 100644 index 00000000..394e7a2c --- /dev/null +++ b/package/gdb/8.3.1/0005-nat-fork-inferior-include-linux-ptrace.h.patch @@ -0,0 +1,53 @@ +From d84ecfa3a8c8fbade89229ac66c09f2a97ab00fb Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sun, 24 Jun 2018 23:33:55 +0200 +Subject: [PATCH] nat/fork-inferior: include linux-ptrace.h + +To decide whether fork() or vfork() should be used, fork-inferior.c +uses the following test: + + #if !(defined(__UCLIBC__) && defined(HAS_NOMMU)) + +However, HAS_NOMMU is never defined, because it gets defined in +linux-ptrace.h, which is not included by fork-inferior.c. Due to this, +gdbserver fails to build on noMMU architectures. This commit fixes +that by simply including linux-ptrace.h. + +This bug was introduced by commit +2090129c36c7e582943b7d300968d19b46160d84 ("Share fork_inferior et al +with gdbserver"). Indeed, the same fork()/vfork() selection was done, +but in another file where linux-ptrace.h was included. + +Fixes the following build issue: + +../nat/fork-inferior.c: In function 'pid_t fork_inferior(const char*, const string&, char**, void (*)(), void (*)(int), void (*)(), const char*, void (*)(const char*, char* const*, char* const*))': +../nat/fork-inferior.c:376:11: error: 'fork' was not declared in this scope + pid = fork (); + ^~~~ +../nat/fork-inferior.c:376:11: note: suggested alternative: 'vfork' + pid = fork (); + ^~~~ + vfork + +Signed-off-by: Thomas Petazzoni +[Romain: rebase on gdb 8.3] +Signed-off-by: Romain Naour +--- + gdb/nat/fork-inferior.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/gdb/nat/fork-inferior.c b/gdb/nat/fork-inferior.c +index fe9360a5039..626fe7c1fbf 100644 +--- a/gdb/nat/fork-inferior.c ++++ b/gdb/nat/fork-inferior.c +@@ -27,6 +27,7 @@ + #include "common/pathstuff.h" + #include "common/signals-state-save-restore.h" + #include "common/gdb_tilde_expand.h" ++#include "linux-ptrace.h" + #include + + extern char **environ; +-- +2.21.0 + diff --git a/package/gdb/8.3.1/0006-Fix-incorrect-use-of-is-operator-for-comparison-in-p.patch b/package/gdb/8.3.1/0006-Fix-incorrect-use-of-is-operator-for-comparison-in-p.patch new file mode 100644 index 00000000..989a5b13 --- /dev/null +++ b/package/gdb/8.3.1/0006-Fix-incorrect-use-of-is-operator-for-comparison-in-p.patch @@ -0,0 +1,42 @@ +From e00c211d51bec301cf04719b77076a8783ef44b5 Mon Sep 17 00:00:00 2001 +From: Raul Tambre +Date: Sat, 4 May 2019 15:48:17 -0400 +Subject: [PATCH] Fix incorrect use of 'is' operator for comparison in + python/lib/gdb/command/prompt.py + +The 'is' operator is not meant to be used for comparisons. It currently working +is an implementation detail of CPython. CPython 3.8 has added a SyntaxWarning +for this. + +(cherry picked from commit b6484282f85bf7f11451b2441599c241d302ad9d) +[Romain: backport to gdb 8.x] +Signed-off-by: Romain Naour +--- + gdb/python/lib/gdb/command/prompt.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/gdb/python/lib/gdb/command/prompt.py b/gdb/python/lib/gdb/command/prompt.py +index 3d662a7d3f..04b9e49c22 100644 +--- a/gdb/python/lib/gdb/command/prompt.py ++++ b/gdb/python/lib/gdb/command/prompt.py +@@ -45,7 +45,7 @@ The currently defined substitutions are: + self.hook_set = False + + def get_show_string (self, pvalue): +- if self.value is not '': ++ if self.value: + return "The extended prompt is: " + self.value + else: + return "The extended prompt is not set." +@@ -57,7 +57,7 @@ The currently defined substitutions are: + return "" + + def before_prompt_hook(self, current): +- if self.value is not '': ++ if self.value: + return gdb.prompt.substitute_prompt(self.value) + else: + return None +-- +2.25.4 + diff --git a/package/gdb/8.3.1/0007-Fix-Python3.9-related-runtime-problems.patch b/package/gdb/8.3.1/0007-Fix-Python3.9-related-runtime-problems.patch new file mode 100644 index 00000000..63cfa1bd --- /dev/null +++ b/package/gdb/8.3.1/0007-Fix-Python3.9-related-runtime-problems.patch @@ -0,0 +1,193 @@ +From 51ef4f6ec819259d4a57fa4155ee78700918f8ff Mon Sep 17 00:00:00 2001 +From: Kevin Buettner +Date: Wed, 27 May 2020 20:05:40 -0700 +Subject: [PATCH] Fix Python3.9 related runtime problems + +Python3.9b1 is now available on Rawhide. GDB w/ Python 3.9 support +can be built using the configure switch -with-python=/usr/bin/python3.9. + +Attempting to run gdb/Python3.9 segfaults on startup: + + #0 0x00007ffff7b0582c in PyEval_ReleaseLock () from /lib64/libpython3.9.so.1.0 + #1 0x000000000069ccbf in do_start_initialization () + at worktree-test1/gdb/python/python.c:1789 + #2 _initialize_python () + at worktree-test1/gdb/python/python.c:1877 + #3 0x00000000007afb0a in initialize_all_files () at init.c:237 + ... + +Consulting the the documentation... + +https://docs.python.org/3/c-api/init.html + +...we find that PyEval_ReleaseLock() has been deprecated since version +3.2. It recommends using PyEval_SaveThread or PyEval_ReleaseThread() +instead. In do_start_initialization, in gdb/python/python.c, we +can replace the calls to PyThreadState_Swap() and PyEval_ReleaseLock() +with a single call to PyEval_SaveThread. (Thanks to Keith Seitz +for working this out.) + +With that in place, GDB gets a little bit further. It still dies +on startup, but the backtrace is different: + + #0 0x00007ffff7b04306 in PyOS_InterruptOccurred () + from /lib64/libpython3.9.so.1.0 + #1 0x0000000000576e86 in check_quit_flag () + at worktree-test1/gdb/extension.c:776 + #2 0x0000000000576f8a in set_active_ext_lang (now_active=now_active@entry=0x983c00 ) + at worktree-test1/gdb/extension.c:705 + #3 0x000000000069d399 in gdbpy_enter::gdbpy_enter (this=0x7fffffffd2d0, + gdbarch=0x0, language=0x0) + at worktree-test1/gdb/python/python.c:211 + #4 0x0000000000686e00 in python_new_inferior (inf=0xddeb10) + at worktree-test1/gdb/python/py-inferior.c:251 + #5 0x00000000005d9fb9 in std::function::operator()(inferior*) const (__args#0=, this=0xccad20) + at /usr/include/c++/10/bits/std_function.h:617 + #6 gdb::observers::observable::notify (args#0=0xddeb10, + this=) + at worktree-test1/gdb/../gdbsupport/observable.h:106 + #7 add_inferior_silent (pid=0) + at worktree-test1/gdb/inferior.c:113 + #8 0x00000000005dbcb8 in initialize_inferiors () + at worktree-test1/gdb/inferior.c:947 + ... + +We checked with some Python Developers and were told that we should +acquire the GIL prior to calling any Python C API function. We +definitely don't have the GIL for calls of PyOS_InterruptOccurred(). + +I moved class_gdbpy_gil earlier in the file and use it in +gdbpy_check_quit_flag() to acquire (and automatically release) the +GIL. + +With those changes in place, I was able to run to a GDB prompt. But, +when trying to quit, it segfaulted again due to due to some other +problems with gdbpy_check_quit_flag(): + + Thread 1 "gdb" received signal SIGSEGV, Segmentation fault. + 0x00007ffff7bbab0c in new_threadstate () from /lib64/libpython3.9.so.1.0 + (top-gdb) bt 8 + #0 0x00007ffff7bbab0c in new_threadstate () from /lib64/libpython3.9.so.1.0 + #1 0x00007ffff7afa5ea in PyGILState_Ensure.cold () + from /lib64/libpython3.9.so.1.0 + #2 0x000000000069b58c in gdbpy_gil::gdbpy_gil (this=) + at worktree-test1/gdb/python/python.c:278 + #3 gdbpy_check_quit_flag (extlang=) + at worktree-test1/gdb/python/python.c:278 + #4 0x0000000000576e96 in check_quit_flag () + at worktree-test1/gdb/extension.c:776 + #5 0x000000000057700c in restore_active_ext_lang (previous=0xe9c050) + at worktree-test1/gdb/extension.c:729 + #6 0x000000000088913a in do_my_cleanups ( + pmy_chain=0xc31870 , + old_chain=0xae5720 ) + at worktree-test1/gdbsupport/cleanups.cc:131 + #7 do_final_cleanups () + at worktree-test1/gdbsupport/cleanups.cc:143 + +In this case, we're trying to call a Python C API function after +Py_Finalize() has been called from finalize_python(). I made +finalize_python set gdb_python_initialized to false and then cause +check_quit_flag() to return early when it's false. + +With these changes in place, GDB seems to be working again with +Python3.9b1. I think it likely that there are other problems lurking. +I wouldn't be surprised to find that there are other calls into Python +where we don't first make sure that we have the GIL. Further changes +may well be needed. + +I see no regressions testing on Rawhide using a GDB built with the +default Python version (3.8.3) versus one built using Python 3.9b1. + +I've also tested on Fedora 28, 29, 30, 31, and 32 (all x86_64) using +the default (though updated) system installed versions of Python on +those OSes. This means that I've tested against Python versions +2.7.15, 2.7.17, 2.7.18, 3.7.7, 3.8.2, and 3.8.3. In each case GDB +still builds without problem and shows no regressions after applying +this patch. + +gdb/ChangeLog: + +2020-MM-DD Kevin Buettner + Keith Seitz + + * python/python.c (do_start_initialization): For Python 3.9 and + later, call PyEval_SaveThread instead of PyEval_ReleaseLock. + (class gdbpy_gil): Move to earlier in file. + (finalize_python): Set gdb_python_initialized. + (gdbpy_check_quit_flag): Acquire GIL via gdbpy_gil. Return early + when not initialized. + +[import into Buildroot, removing ChangeLog change to avoid conflict] +Signed-off-by: Thomas De Schampheleire +--- + gdb/python/python.c | 32 ++++++++++++++++++++++++++++++-- + 1 file changed, 30 insertions(+), 2 deletions(-) + +diff --git a/gdb/python/python.c b/gdb/python/python.c +index c23db2c1261..0b77354630e 100644 +--- a/gdb/python/python.c ++++ b/gdb/python/python.c +@@ -235,6 +235,30 @@ gdbpy_enter::~gdbpy_enter () + restore_active_ext_lang (m_previous_active); + } + ++/* A helper class to save and restore the GIL, but without touching ++ the other globals that are handled by gdbpy_enter. */ ++ ++class gdbpy_gil ++{ ++public: ++ ++ gdbpy_gil () ++ : m_state (PyGILState_Ensure ()) ++ { ++ } ++ ++ ~gdbpy_gil () ++ { ++ PyGILState_Release (m_state); ++ } ++ ++ DISABLE_COPY_AND_ASSIGN (gdbpy_gil); ++ ++private: ++ ++ PyGILState_STATE m_state; ++}; ++ + /* Set the quit flag. */ + + static void +@@ -248,6 +272,10 @@ gdbpy_set_quit_flag (const struct extension_language_defn *extlang) + static int + gdbpy_check_quit_flag (const struct extension_language_defn *extlang) + { ++ if (!gdb_python_initialized) ++ return 0; ++ ++ gdbpy_gil gil; + return PyOS_InterruptOccurred (); + } + +@@ -1573,6 +1601,7 @@ finalize_python (void *ignore) + + Py_Finalize (); + ++ gdb_python_initialized = false; + restore_active_ext_lang (previous_active); + } + +@@ -1736,8 +1765,7 @@ do_start_initialization () + return false; + + /* Release the GIL while gdb runs. */ +- PyThreadState_Swap (NULL); +- PyEval_ReleaseLock (); ++ PyEval_SaveThread (); + + make_final_cleanup (finalize_python, NULL); + +-- +2.31.1 + diff --git a/package/gdb/9.2/0001-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch b/package/gdb/9.2/0001-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch new file mode 100644 index 00000000..ab8dc626 --- /dev/null +++ b/package/gdb/9.2/0001-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch @@ -0,0 +1,55 @@ +From 72ee19f54fd35595465b2e35eccf1f3d65fe21c6 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sat, 6 Aug 2016 17:32:50 -0700 +Subject: [PATCH] ppc/ptrace: Define pt_regs uapi_pt_regs on !GLIBC systems + +Upstream-Status: Pending + +Signed-off-by: Khem Raj +Signed-off-by: Thomas Petazzoni +[Rebase on gdb 8.3] +Signed-off-by: Romain Naour +--- + gdb/gdbserver/linux-ppc-low.c | 6 ++++++ + gdb/nat/ppc-linux.h | 6 ++++++ + 2 files changed, 12 insertions(+) + +diff --git a/gdb/gdbserver/linux-ppc-low.c b/gdb/gdbserver/linux-ppc-low.c +index 1b695e53fe9..1978347c02c 100644 +--- a/gdb/gdbserver/linux-ppc-low.c ++++ b/gdb/gdbserver/linux-ppc-low.c +@@ -23,7 +23,13 @@ + #include "elf/common.h" + #include + #include ++#if !defined(__GLIBC__) ++# define pt_regs uapi_pt_regs ++#endif + #include ++#if !defined(__GLIBC__) ++# undef pt_regs ++#endif + + #include "arch/ppc-linux-common.h" + #include "arch/ppc-linux-tdesc.h" +diff --git a/gdb/nat/ppc-linux.h b/gdb/nat/ppc-linux.h +index f1561b3b357..40399361c09 100644 +--- a/gdb/nat/ppc-linux.h ++++ b/gdb/nat/ppc-linux.h +@@ -18,7 +18,13 @@ + #ifndef NAT_PPC_LINUX_H + #define NAT_PPC_LINUX_H + ++#if !defined(__GLIBC__) ++# define pt_regs uapi_pt_regs ++#endif + #include ++#if !defined(__GLIBC__) ++# undef pt_regs ++#endif + #include + + /* This sometimes isn't defined. */ +-- +2.21.0 + diff --git a/package/gdb/9.2/0002-sh-ptrace-Define-pt_-dsp-regs-uapi_pt_-dsp-regs-on-G.patch b/package/gdb/9.2/0002-sh-ptrace-Define-pt_-dsp-regs-uapi_pt_-dsp-regs-on-G.patch new file mode 100644 index 00000000..9d508fbf --- /dev/null +++ b/package/gdb/9.2/0002-sh-ptrace-Define-pt_-dsp-regs-uapi_pt_-dsp-regs-on-G.patch @@ -0,0 +1,43 @@ +From ef630288fdc2d4d22651702672f9d5c9cd767e5b Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sat, 3 Jun 2017 21:23:52 +0200 +Subject: [PATCH] sh/ptrace: Define pt_{dsp,}regs uapi_pt_{dsp,}regs on !GLIBC + systems + +Fixes a pt_{dsp,}regs redefinition when building with the musl C library +on SuperH. + +Inspired by +http://git.yoctoproject.org/clean/cgit.cgi/poky/plain/meta/recipes-devtools/gdb/gdb/0004-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch, +adapted for SuperH. + +Signed-off-by: Thomas Petazzoni +[Rebase on gdb 8.0] +Signed-off-by: Romain Naour +--- + gdb/gdbserver/linux-sh-low.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/gdb/gdbserver/linux-sh-low.c b/gdb/gdbserver/linux-sh-low.c +index 0953721a190..c331c1382f7 100644 +--- a/gdb/gdbserver/linux-sh-low.c ++++ b/gdb/gdbserver/linux-sh-low.c +@@ -27,7 +27,15 @@ extern const struct target_desc *tdesc_sh; + #include + #endif + ++#if !defined(__GLIBC__) ++# define pt_regs uapi_pt_regs ++# define pt_dspregs uapi_pt_dspregs ++#endif + #include ++#if !defined(__GLIBC__) ++# undef pt_regs ++# undef pt_dspregs ++#endif + + #define sh_num_regs 41 + +-- +2.21.0 + diff --git a/package/gdb/9.2/0003-use-asm-sgidefs.h.patch b/package/gdb/9.2/0003-use-asm-sgidefs.h.patch new file mode 100644 index 00000000..2909f62c --- /dev/null +++ b/package/gdb/9.2/0003-use-asm-sgidefs.h.patch @@ -0,0 +1,40 @@ +From 19a0f664809b6858e69aa98188eb739415de044c Mon Sep 17 00:00:00 2001 +From: Andre McCurdy +Date: Sat, 30 Apr 2016 15:29:06 -0700 +Subject: [PATCH] use + +Build fix for MIPS with musl libc + +The MIPS specific header is provided by glibc and uclibc +but not by musl. Regardless of the libc, the kernel headers provide + which provides the same definitions, so use that +instead. + +Upstream-Status: Pending + +[Vincent: +Taken from: https://sourceware.org/bugzilla/show_bug.cgi?id=21070] + +Signed-off-by: Andre McCurdy +Signed-off-by: Khem Raj +Signed-off-by: Vicente Olivert Riera +--- + gdb/mips-linux-nat.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/gdb/mips-linux-nat.c b/gdb/mips-linux-nat.c +index e68ed1e4da9..bc42aa59685 100644 +--- a/gdb/mips-linux-nat.c ++++ b/gdb/mips-linux-nat.c +@@ -31,7 +31,7 @@ + #include "gdb_proc_service.h" + #include "gregset.h" + +-#include ++#include + #include "nat/gdb_ptrace.h" + #include + #include "inf-ptrace.h" +-- +2.21.0 + diff --git a/package/gdb/9.2/0004-gdbserver-fix-build-for-m68k.patch b/package/gdb/9.2/0004-gdbserver-fix-build-for-m68k.patch new file mode 100644 index 00000000..d7182938 --- /dev/null +++ b/package/gdb/9.2/0004-gdbserver-fix-build-for-m68k.patch @@ -0,0 +1,62 @@ +From 448e481aab86c823d908530038e20a14213db0a2 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Fri, 22 Jun 2018 22:40:26 +0200 +Subject: [PATCH] gdbserver: fix build for m68k +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +As for strace [1], when is included after , +the build fails on m68k with the following diagnostics: + +In file included from ./../nat/linux-ptrace.h:28:0, + from linux-low.h:27, + from linux-m68k-low.c:20: +[...]/usr/include/sys/reg.h:26:3: error: expected identifier before numeric constant + PT_D1 = 0, + ^ +[...]usr/include/sys/reg.h:26:3: error: expected « } » before numeric constant +[...]usr/include/sys/reg.h:26:3: error: expected unqualified-id before numeric constant +In file included from linux-m68k-low.c:27:0: +[...]usr/include/sys/reg.h:99:1: error: expected declaration before « } » token + }; + ^ + +Fix this by moving on top of "linux-low.h". + +[1] https://github.com/strace/strace/commit/6ebf6c4f9e5ebca123a5b5f24afe67cf0473cf92 + +Signed-off-by: Romain Naour +--- + gdb/gdbserver/linux-m68k-low.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/gdb/gdbserver/linux-m68k-low.c b/gdb/gdbserver/linux-m68k-low.c +index 16f639d02fc..969d9973737 100644 +--- a/gdb/gdbserver/linux-m68k-low.c ++++ b/gdb/gdbserver/linux-m68k-low.c +@@ -17,16 +17,17 @@ + along with this program. If not, see . */ + + #include "server.h" ++ ++#ifdef HAVE_SYS_REG_H ++#include ++#endif ++ + #include "linux-low.h" + + /* Defined in auto-generated file reg-m68k.c. */ + void init_registers_m68k (void); + extern const struct target_desc *tdesc_m68k; + +-#ifdef HAVE_SYS_REG_H +-#include +-#endif +- + #define m68k_num_regs 29 + #define m68k_num_gregs 18 + +-- +2.21.0 + diff --git a/package/gdb/9.2/0005-nat-fork-inferior-include-linux-ptrace.h.patch b/package/gdb/9.2/0005-nat-fork-inferior-include-linux-ptrace.h.patch new file mode 100644 index 00000000..1df54526 --- /dev/null +++ b/package/gdb/9.2/0005-nat-fork-inferior-include-linux-ptrace.h.patch @@ -0,0 +1,53 @@ +From d84ecfa3a8c8fbade89229ac66c09f2a97ab00fb Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sun, 24 Jun 2018 23:33:55 +0200 +Subject: [PATCH] nat/fork-inferior: include linux-ptrace.h + +To decide whether fork() or vfork() should be used, fork-inferior.c +uses the following test: + + #if !(defined(__UCLIBC__) && defined(HAS_NOMMU)) + +However, HAS_NOMMU is never defined, because it gets defined in +linux-ptrace.h, which is not included by fork-inferior.c. Due to this, +gdbserver fails to build on noMMU architectures. This commit fixes +that by simply including linux-ptrace.h. + +This bug was introduced by commit +2090129c36c7e582943b7d300968d19b46160d84 ("Share fork_inferior et al +with gdbserver"). Indeed, the same fork()/vfork() selection was done, +but in another file where linux-ptrace.h was included. + +Fixes the following build issue: + +../nat/fork-inferior.c: In function 'pid_t fork_inferior(const char*, const string&, char**, void (*)(), void (*)(int), void (*)(), const char*, void (*)(const char*, char* const*, char* const*))': +../nat/fork-inferior.c:376:11: error: 'fork' was not declared in this scope + pid = fork (); + ^~~~ +../nat/fork-inferior.c:376:11: note: suggested alternative: 'vfork' + pid = fork (); + ^~~~ + vfork + +Signed-off-by: Thomas Petazzoni +[Romain: rebase on gdb 8.3] +Signed-off-by: Romain Naour +--- + gdb/nat/fork-inferior.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/gdb/nat/fork-inferior.c b/gdb/nat/fork-inferior.c +index fe9360a5039..626fe7c1fbf 100644 +--- a/gdb/nat/fork-inferior.c ++++ b/gdb/nat/fork-inferior.c +@@ -27,6 +27,7 @@ + #include "gdbsupport/pathstuff.h" + #include "gdbsupport/signals-state-save-restore.h" + #include "gdbsupport/gdb_tilde_expand.h" ++#include "linux-ptrace.h" + #include + + extern char **environ; +-- +2.21.0 + diff --git a/package/gdb/9.2/0006-sim-ppc-Fix-linker-error-with-fno-common.patch b/package/gdb/9.2/0006-sim-ppc-Fix-linker-error-with-fno-common.patch new file mode 100644 index 00000000..813a1054 --- /dev/null +++ b/package/gdb/9.2/0006-sim-ppc-Fix-linker-error-with-fno-common.patch @@ -0,0 +1,101 @@ +From ad8464f799a4c96c7ab8bdfec3f95846cf54f9b0 Mon Sep 17 00:00:00 2001 +From: Sebastian Huber +Date: Wed, 1 Jul 2020 19:29:55 +0200 +Subject: [PATCH] sim/ppc: Fix linker error with -fno-common + +GCC 10 enables -fno-common by default. This resulted in a multiple +definition linker error since global variables were declared and defined +in a header file: + + ld: ld-insn.o:sim/ppc/ld-insn.h:221: multiple definition of + `max_model_fields_len'; igen.o:sim/ppc/ld-insn.h:221: first defined here + +sim/ppc + + * ld-insn.h (last_model, last_model_data, last_model_function, + last_model_internal, last_model_macro, last_model_static): + Delete. + (max_model_fields_len, model_data, model_functions, + model_internal, model_macros, model_static, models): Declare, but do not + define. + * ld-insn.c (last_model, last_model_data, last_model_function, + last_model_internal, last_model_macro, last_model_static, + max_model_fields_len, model_data, model_functions, + model_internal, model_macros, model_static, models): Define. + +Signed-off-by: Maxim Kochetkov +Fetch from: https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=ad8464f799a4c96c7ab8bdfec3f95846cf54f9b0 +--- + sim/ppc/ld-insn.c | 18 ++++++++++++++++++ + sim/ppc/ld-insn.h | 24 +++++++----------------- + 2 files changed, 25 insertions(+), 17 deletions(-) + +diff --git a/sim/ppc/ld-insn.c b/sim/ppc/ld-insn.c +index e39131ca133..585071a861f 100644 +--- a/sim/ppc/ld-insn.c ++++ b/sim/ppc/ld-insn.c +@@ -28,6 +28,24 @@ + + #include "igen.h" + ++static model *last_model; ++ ++static insn *last_model_macro; ++static insn *last_model_function; ++static insn *last_model_internal; ++static insn *last_model_static; ++static insn *last_model_data; ++ ++model *models; ++ ++insn *model_macros; ++insn *model_functions; ++insn *model_internal; ++insn *model_static; ++insn *model_data; ++ ++int max_model_fields_len; ++ + static void + update_depth(insn_table *entry, + lf *file, +diff --git a/sim/ppc/ld-insn.h b/sim/ppc/ld-insn.h +index 88318ffa2b3..52baeaa2d84 100644 +--- a/sim/ppc/ld-insn.h ++++ b/sim/ppc/ld-insn.h +@@ -200,25 +200,15 @@ extern insn_table *load_insn_table + table_include *includes, + cache_table **cache_rules); + +-model *models; +-model *last_model; ++extern model *models; + +-insn *model_macros; +-insn *last_model_macro; ++extern insn *model_macros; ++extern insn *model_functions; ++extern insn *model_internal; ++extern insn *model_static; ++extern insn *model_data; + +-insn *model_functions; +-insn *last_model_function; +- +-insn *model_internal; +-insn *last_model_internal; +- +-insn *model_static; +-insn *last_model_static; +- +-insn *model_data; +-insn *last_model_data; +- +-int max_model_fields_len; ++extern int max_model_fields_len; + + extern void insn_table_insert_insn + (insn_table *table, +-- +2.18.4 + diff --git a/package/gdb/9.2/0007-Fix-Python3.9-related-runtime-problems.patch b/package/gdb/9.2/0007-Fix-Python3.9-related-runtime-problems.patch new file mode 100644 index 00000000..89b0cdc4 --- /dev/null +++ b/package/gdb/9.2/0007-Fix-Python3.9-related-runtime-problems.patch @@ -0,0 +1,227 @@ +From c47bae859a5af0d95224d90000df0e529f7c5aa0 Mon Sep 17 00:00:00 2001 +From: Kevin Buettner +Date: Wed, 27 May 2020 20:05:40 -0700 +Subject: [PATCH] Fix Python3.9 related runtime problems + +Python3.9b1 is now available on Rawhide. GDB w/ Python 3.9 support +can be built using the configure switch -with-python=/usr/bin/python3.9. + +Attempting to run gdb/Python3.9 segfaults on startup: + + #0 0x00007ffff7b0582c in PyEval_ReleaseLock () from /lib64/libpython3.9.so.1.0 + #1 0x000000000069ccbf in do_start_initialization () + at worktree-test1/gdb/python/python.c:1789 + #2 _initialize_python () + at worktree-test1/gdb/python/python.c:1877 + #3 0x00000000007afb0a in initialize_all_files () at init.c:237 + ... + +Consulting the the documentation... + +https://docs.python.org/3/c-api/init.html + +...we find that PyEval_ReleaseLock() has been deprecated since version +3.2. It recommends using PyEval_SaveThread or PyEval_ReleaseThread() +instead. In do_start_initialization, in gdb/python/python.c, we +can replace the calls to PyThreadState_Swap() and PyEval_ReleaseLock() +with a single call to PyEval_SaveThread. (Thanks to Keith Seitz +for working this out.) + +With that in place, GDB gets a little bit further. It still dies +on startup, but the backtrace is different: + + #0 0x00007ffff7b04306 in PyOS_InterruptOccurred () + from /lib64/libpython3.9.so.1.0 + #1 0x0000000000576e86 in check_quit_flag () + at worktree-test1/gdb/extension.c:776 + #2 0x0000000000576f8a in set_active_ext_lang (now_active=now_active@entry=0x983c00 ) + at worktree-test1/gdb/extension.c:705 + #3 0x000000000069d399 in gdbpy_enter::gdbpy_enter (this=0x7fffffffd2d0, + gdbarch=0x0, language=0x0) + at worktree-test1/gdb/python/python.c:211 + #4 0x0000000000686e00 in python_new_inferior (inf=0xddeb10) + at worktree-test1/gdb/python/py-inferior.c:251 + #5 0x00000000005d9fb9 in std::function::operator()(inferior*) const (__args#0=, this=0xccad20) + at /usr/include/c++/10/bits/std_function.h:617 + #6 gdb::observers::observable::notify (args#0=0xddeb10, + this=) + at worktree-test1/gdb/../gdbsupport/observable.h:106 + #7 add_inferior_silent (pid=0) + at worktree-test1/gdb/inferior.c:113 + #8 0x00000000005dbcb8 in initialize_inferiors () + at worktree-test1/gdb/inferior.c:947 + ... + +We checked with some Python Developers and were told that we should +acquire the GIL prior to calling any Python C API function. We +definitely don't have the GIL for calls of PyOS_InterruptOccurred(). + +I moved class_gdbpy_gil earlier in the file and use it in +gdbpy_check_quit_flag() to acquire (and automatically release) the +GIL. + +With those changes in place, I was able to run to a GDB prompt. But, +when trying to quit, it segfaulted again due to due to some other +problems with gdbpy_check_quit_flag(): + + Thread 1 "gdb" received signal SIGSEGV, Segmentation fault. + 0x00007ffff7bbab0c in new_threadstate () from /lib64/libpython3.9.so.1.0 + (top-gdb) bt 8 + #0 0x00007ffff7bbab0c in new_threadstate () from /lib64/libpython3.9.so.1.0 + #1 0x00007ffff7afa5ea in PyGILState_Ensure.cold () + from /lib64/libpython3.9.so.1.0 + #2 0x000000000069b58c in gdbpy_gil::gdbpy_gil (this=) + at worktree-test1/gdb/python/python.c:278 + #3 gdbpy_check_quit_flag (extlang=) + at worktree-test1/gdb/python/python.c:278 + #4 0x0000000000576e96 in check_quit_flag () + at worktree-test1/gdb/extension.c:776 + #5 0x000000000057700c in restore_active_ext_lang (previous=0xe9c050) + at worktree-test1/gdb/extension.c:729 + #6 0x000000000088913a in do_my_cleanups ( + pmy_chain=0xc31870 , + old_chain=0xae5720 ) + at worktree-test1/gdbsupport/cleanups.cc:131 + #7 do_final_cleanups () + at worktree-test1/gdbsupport/cleanups.cc:143 + +In this case, we're trying to call a Python C API function after +Py_Finalize() has been called from finalize_python(). I made +finalize_python set gdb_python_initialized to false and then cause +check_quit_flag() to return early when it's false. + +With these changes in place, GDB seems to be working again with +Python3.9b1. I think it likely that there are other problems lurking. +I wouldn't be surprised to find that there are other calls into Python +where we don't first make sure that we have the GIL. Further changes +may well be needed. + +I see no regressions testing on Rawhide using a GDB built with the +default Python version (3.8.3) versus one built using Python 3.9b1. + +I've also tested on Fedora 28, 29, 30, 31, and 32 (all x86_64) using +the default (though updated) system installed versions of Python on +those OSes. This means that I've tested against Python versions +2.7.15, 2.7.17, 2.7.18, 3.7.7, 3.8.2, and 3.8.3. In each case GDB +still builds without problem and shows no regressions after applying +this patch. + +gdb/ChangeLog: + +2020-MM-DD Kevin Buettner + Keith Seitz + + * python/python.c (do_start_initialization): For Python 3.9 and + later, call PyEval_SaveThread instead of PyEval_ReleaseLock. + (class gdbpy_gil): Move to earlier in file. + (finalize_python): Set gdb_python_initialized. + (gdbpy_check_quit_flag): Acquire GIL via gdbpy_gil. Return early + when not initialized. + + +[import into Buildroot, removing ChangeLog change to avoid conflict] +Signed-off-by: Thomas De Schampheleire + +--- + gdb/ChangeLog | 10 ++++++++ + gdb/python/python.c | 56 ++++++++++++++++++++++++--------------------- + 2 files changed, 40 insertions(+), 26 deletions(-) + +diff --git a/gdb/python/python.c b/gdb/python/python.c +index 67f362b852d..4bdd2201abc 100644 +--- a/gdb/python/python.c ++++ b/gdb/python/python.c +@@ -238,6 +238,30 @@ gdbpy_enter::~gdbpy_enter () + PyGILState_Release (m_state); + } + ++/* A helper class to save and restore the GIL, but without touching ++ the other globals that are handled by gdbpy_enter. */ ++ ++class gdbpy_gil ++{ ++public: ++ ++ gdbpy_gil () ++ : m_state (PyGILState_Ensure ()) ++ { ++ } ++ ++ ~gdbpy_gil () ++ { ++ PyGILState_Release (m_state); ++ } ++ ++ DISABLE_COPY_AND_ASSIGN (gdbpy_gil); ++ ++private: ++ ++ PyGILState_STATE m_state; ++}; ++ + /* Set the quit flag. */ + + static void +@@ -251,6 +275,10 @@ gdbpy_set_quit_flag (const struct extension_language_defn *extlang) + static int + gdbpy_check_quit_flag (const struct extension_language_defn *extlang) + { ++ if (!gdb_python_initialized) ++ return 0; ++ ++ gdbpy_gil gil; + return PyOS_InterruptOccurred (); + } + +@@ -943,30 +971,6 @@ gdbpy_source_script (const struct extension_language_defn *extlang, + + /* Posting and handling events. */ + +-/* A helper class to save and restore the GIL, but without touching +- the other globals that are handled by gdbpy_enter. */ +- +-class gdbpy_gil +-{ +-public: +- +- gdbpy_gil () +- : m_state (PyGILState_Ensure ()) +- { +- } +- +- ~gdbpy_gil () +- { +- PyGILState_Release (m_state); +- } +- +- DISABLE_COPY_AND_ASSIGN (gdbpy_gil); +- +-private: +- +- PyGILState_STATE m_state; +-}; +- + /* A single event. */ + struct gdbpy_event + { +@@ -1616,6 +1620,7 @@ finalize_python (void *ignore) + + Py_Finalize (); + ++ gdb_python_initialized = false; + restore_active_ext_lang (previous_active); + } + +@@ -1785,8 +1790,7 @@ do_start_initialization () + return false; + + /* Release the GIL while gdb runs. */ +- PyThreadState_Swap (NULL); +- PyEval_ReleaseLock (); ++ PyEval_SaveThread (); + + make_final_cleanup (finalize_python, NULL); + +-- +2.26.3 + diff --git a/package/gdb/9.2/0007-gdb-configure.tgt-build-gdbserver-with-m68k-and-ucli.patch b/package/gdb/9.2/0007-gdb-configure.tgt-build-gdbserver-with-m68k-and-ucli.patch new file mode 100644 index 00000000..5cdafae7 --- /dev/null +++ b/package/gdb/9.2/0007-gdb-configure.tgt-build-gdbserver-with-m68k-and-ucli.patch @@ -0,0 +1,41 @@ +From 808601f075fe3dd8ca101e31c9121a4e87f0bfc7 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Thu, 6 May 2021 07:45:00 +0200 +Subject: [PATCH] gdb/configure.tgt: build gdbserver with m68k and + uclibc + +Allow to build gdbserver with m68k and uclibc: + +checking whether gdbserver is supported on this host... no +configure: error: Automatic gdbserver build is not supported for this configuration + +Fixes: + - http://autobuild.buildroot.org/results/f4d6d9d8418c0da48a3db4ad5a82e19bd16eae34 + +Signed-off-by: Fabrice Fontaine +--- + gdb/configure.tgt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/gdb/configure.tgt b/gdb/configure.tgt +index caa42be1c01..8666bc5d0bf 100644 +--- a/gdb/configure.tgt ++++ b/gdb/configure.tgt +@@ -372,12 +372,12 @@ m68hc11*-*-*|m6811*-*-*) + gdb_sim=../sim/m68hc11/libsim.a + ;; + +-m68*-*-aout* | m68*-*-coff* | m68*-*-elf* | m68*-*-rtems* | m68*-*-uclinux* | \ ++m68*-*-aout* | m68*-*-coff* | m68*-*-elf* | m68*-*-rtems* | \ + fido-*-elf*) + # Target: Motorola m68k embedded + gdb_target_obs="m68k-tdep.o" + ;; +-m68*-*-linux*) ++m68*-*-*linux*) + # Target: Motorola m68k with a.out and ELF + gdb_target_obs="m68k-tdep.o m68k-linux-tdep.o solib-svr4.o \ + linux-tdep.o glibc-tdep.o symfile-mem.o" +-- +2.30.2 + diff --git a/package/gdb/Config.in b/package/gdb/Config.in new file mode 100644 index 00000000..262740fc --- /dev/null +++ b/package/gdb/Config.in @@ -0,0 +1,88 @@ +config BR2_PACKAGE_GDB_ARCH_SUPPORTS + bool + default y + depends on !((BR2_arm || BR2_armeb) && BR2_BINFMT_FLAT) + depends on !BR2_microblaze + depends on !BR2_or1k + depends on !BR2_nds32 + +comment "gdb/gdbserver needs a toolchain w/ threads, threads debug" + depends on BR2_PACKAGE_GDB_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_TOOLCHAIN_HAS_THREADS_DEBUG + +comment "gdb/gdbserver >= 8.x needs a toolchain w/ C++, gcc >= 4.8" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + +config BR2_PACKAGE_GDB + bool "gdb" + depends on BR2_TOOLCHAIN_HAS_THREADS && BR2_TOOLCHAIN_HAS_THREADS_DEBUG + depends on BR2_PACKAGE_GDB_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + depends on BR2_INSTALL_LIBSTDCPP + # no gdbserver on riscv + select BR2_PACKAGE_GDB_DEBUGGER if BR2_riscv + # When the external toolchain gdbserver is copied to the + # target, we don't allow building a separate gdbserver. The + # one from the external toolchain should be used. + select BR2_PACKAGE_GDB_SERVER if \ + (!BR2_PACKAGE_GDB_DEBUGGER && !BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY) + help + GDB, the GNU Project debugger, allows you to see what is + going on `inside' another program while it executes -- or + what another program was doing at the moment it crashed. + + This option allows to build gdbserver and/or the gdb + debugger for the target. + + For embedded development, the most common solution is to + build only 'gdbserver' for the target, and use a cross-gdb + on the host. See BR2_PACKAGE_HOST_GDB in the Toolchain menu + to enable one. Notice that external toolchains often provide + their own pre-built cross-gdb and gdbserver binaries. + + http://www.gnu.org/software/gdb/ + +if BR2_PACKAGE_GDB + +config BR2_PACKAGE_GDB_SERVER + bool "gdbserver" + depends on !BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY + depends on !BR2_riscv + help + Build the gdbserver stub to run on the target. + A full gdb is needed to debug the progam. + +config BR2_PACKAGE_GDB_DEBUGGER + bool "full debugger" + depends on BR2_USE_WCHAR + depends on !BR2_sh + depends on !BR2_csky + select BR2_PACKAGE_NCURSES + +comment "full gdb on target needs a toolchain w/ wchar" + depends on !BR2_sh + depends on !BR2_USE_WCHAR + +if BR2_PACKAGE_GDB_DEBUGGER + +config BR2_PACKAGE_GDB_TUI + bool "TUI support" + help + This option enables terminal user interface (TUI) for gdb + + "The GDB Text User Interface (TUI) is a terminal interface + which uses the curses library to show the source file, the + assembly output, the program registers and GDB commands in + separate text windows." + + https://sourceware.org/gdb/current/onlinedocs/gdb/TUI.html + +config BR2_PACKAGE_GDB_PYTHON + bool "Python support" + depends on BR2_PACKAGE_PYTHON || BR2_PACKAGE_PYTHON3 + help + This option enables Python support in the target gdb. + +endif + +endif diff --git a/package/gdb/Config.in.host b/package/gdb/Config.in.host new file mode 100644 index 00000000..5cc5bf41 --- /dev/null +++ b/package/gdb/Config.in.host @@ -0,0 +1,96 @@ +config BR2_PACKAGE_HOST_GDB_ARCH_SUPPORTS + bool + default y + depends on !((BR2_arm || BR2_armeb) && BR2_BINFMT_FLAT) + depends on !BR2_microblaze + depends on !BR2_or1k + depends on !BR2_riscv + depends on !BR2_nds32 + +comment "Host GDB Options" + depends on !BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY + depends on BR2_PACKAGE_HOST_GDB_ARCH_SUPPORTS + +config BR2_PACKAGE_HOST_GDB + bool "Build cross gdb for the host" + # When the external toolchain gdbserver is used, we shouldn't + # allow to build a cross-gdb, as the one of the external + # toolchain should be used. + depends on !BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY + depends on BR2_PACKAGE_HOST_GDB_ARCH_SUPPORTS + help + Build a cross gdb that runs on the host machine and debugs + programs running on the target. It requires 'gdbserver' + installed on the target, see BR2_PACKAGE_GDB_SERVER to + enable it. + +if BR2_PACKAGE_HOST_GDB + +config BR2_PACKAGE_HOST_GDB_TUI + bool "TUI support" + help + This option enables terminal user interface (TUI) for gdb + +choice + prompt "Python support" + default BR2_PACKAGE_HOST_GDB_NOPYTHON + help + Select the version of Python you wish to use + +config BR2_PACKAGE_HOST_GDB_NOPYTHON + bool "None" + help + This option disables Python support in the cross gdb. + +config BR2_PACKAGE_HOST_GDB_PYTHON + bool "Python 2" + help + This option enables the Python 2 support in the cross gdb. + +config BR2_PACKAGE_HOST_GDB_PYTHON3 + bool "Python 3" + help + This option enables the Python 3 support in the cross gdb. + +endchoice + +config BR2_PACKAGE_HOST_GDB_SIM + bool "Simulator support" + depends on !BR2_arc + help + This option enables the simulator support in the cross gdb. + +choice + prompt "GDB debugger Version" + default BR2_GDB_VERSION_9_2 + depends on !BR2_arc + depends on !BR2_csky + help + Select the version of gdb you wish to use. + +config BR2_GDB_VERSION_8_3 + bool "gdb 8.3.x" + +config BR2_GDB_VERSION_9_2 + bool "gdb 9.2.x" + +config BR2_GDB_VERSION_10 + bool "gdb 10.x" + +config BR2_GDB_VERSION_12 + bool "gdb 12.x" + +endchoice + +endif + +# If cross-gdb is not enabled, the latest stable version is chosen. +config BR2_GDB_VERSION + string + default "arc-2020.09-release-gdb" if BR2_arc + default "4ecb98fbc2f94dbe01b69384afbc515107de73df" if BR2_csky + default "8.3.1" if BR2_GDB_VERSION_8_3 + default "9.2" if BR2_GDB_VERSION_9_2 + default "10.1" if BR2_GDB_VERSION_10 + default "12.1" if BR2_GDB_VERSION_12 || !BR2_PACKAGE_HOST_GDB + depends on BR2_PACKAGE_GDB || BR2_PACKAGE_HOST_GDB diff --git a/package/gdb/gdb-python-config b/package/gdb/gdb-python-config new file mode 100755 index 00000000..640c3583 --- /dev/null +++ b/package/gdb/gdb-python-config @@ -0,0 +1,41 @@ +#!/bin/sh + +# This shell script is used to fake Python. Gdb wants to be passed a +# Python interpreter, to run its own python-config.py program, which +# uses sysconfig. However, when cross-compiling, this doesn't work +# well since we would have to use the host Python, whose sysconfig +# module would return host values. +# +# As recommended at +# https://sourceware.org/gdb/wiki/CrossCompilingWithPythonSupport, +# this wrapper shell script can be used as a replacement. It ignores +# the python-config.py script passed as first arguments, and +# "emulates" its behavior. + +if [ $# -ne 2 ] ; then + echo "Bad # args." >&2 + exit 1 +fi + +if [ -z "${BR_PYTHON_VERSION}" ]; then + echo "Environment variable BR_PYTHON_VERSION not set." >&2 + exit 1 +fi + +# The first argument is the path to python-config.py, ignore it. + +case "$2" in + --includes) + echo "-I${STAGING_DIR}/usr/include/python${BR_PYTHON_VERSION}" + ;; + --ldflags) + echo "-lpthread -ldl -lutil -lm -lpython${BR_PYTHON_VERSION}" + ;; + --exec-prefix) + echo "/usr" + ;; + *) + echo "Bad arg $2." >&2 + exit 1 + ;; +esac diff --git a/package/gdb/gdb.hash b/package/gdb/gdb.hash new file mode 100644 index 00000000..7a2b3382 --- /dev/null +++ b/package/gdb/gdb.hash @@ -0,0 +1,10 @@ +# From ftp://gcc.gnu.org/pub/gdb/releases/sha512.sum +sha512 9053a2dc6b9eb921907afbc4cecc75d635aa76df5e8c4f0e5824ccf57cb206b299c19b127fff000b65c334826ff8304a54ff6098428365a8e997cca886c39e9a gdb-8.3.1.tar.xz +sha512 73635f00f343117aa5e2436f1e1597099e2bfb31ef7bb162b273fa1ea282c3fa9b0f52762e70bfc7ad0334addb8d159e9ac7cbe5998ca4f755ea8cf90714d274 gdb-9.2.tar.xz +sha512 0dc54380435c6853db60f1e388b94836d294dfa9ad7f518385a27db4edd03cb970f8717d5f1e9c9a0d4a33d7fcf91bc2e5d6c9cf9e4b561dcc74e65b806c1537 gdb-10.1.tar.xz +sha512 425568d2e84672177d0fb87b1ad7daafdde097648d605e30cf0656970f66adc6a82ca2d83375ea4be583e9683a340e5bfdf5819668ddf66728200141ae50ff2d gdb-12.1.tar.xz +# Locally calculated (fetched from Github) +sha512 5a2acf2fd33ab2ff589e1037ca40abda54328997dcff26b2b49b874bd3be980be5a63342962254f3c3bda98e32ce7a33af704d37353352833dee193135600458 gdb-arc-2020.09-release-gdb.tar.gz + +# Locally calculated (fetched from https://github.com/c-sky/binutils-gdb) +sha512 c421e1f3c0d6cfb3c04544573c0c4b0075c8d8e3d563c6c234fcc1e4c2167ab203d1e57aec3b58abd348dc46f8cf9b47b753d3a43dba3ea970c9c9a6bd78c07b gdb-4ecb98fbc2f94dbe01b69384afbc515107de73df.tar.gz diff --git a/package/gdb/gdb.mk b/package/gdb/gdb.mk new file mode 100644 index 00000000..17e10e8b --- /dev/null +++ b/package/gdb/gdb.mk @@ -0,0 +1,322 @@ +################################################################################ +# +# gdb +# +################################################################################ + +GDB_VERSION = $(call qstrip,$(BR2_GDB_VERSION)) +GDB_SITE = $(BR2_GNU_MIRROR)/gdb +GDB_SOURCE = gdb-$(GDB_VERSION).tar.xz + +# recent gdb versions (>= 10) have gdbserver moved at the top-level, +# which requires a different build logic. +ifeq ($(BR2_GDB_VERSION_10),y) +GDB_GDBSERVER_TOPLEVEL = y +endif + +ifeq ($(BR2_arc),y) +GDB_SITE = $(call github,foss-for-synopsys-dwc-arc-processors,binutils-gdb,$(GDB_VERSION)) +GDB_SOURCE = gdb-$(GDB_VERSION).tar.gz +GDB_FROM_GIT = y +# recent gdb versions (>= 10) have gdbserver moved at the top-level, +# which requires a different build logic. +GDB_GDBSERVER_TOPLEVEL = y +endif + +ifeq ($(BR2_csky),y) +GDB_SITE = $(call github,c-sky,binutils-gdb,$(GDB_VERSION)) +GDB_SOURCE = gdb-$(GDB_VERSION).tar.gz +GDB_FROM_GIT = y +endif + +GDB_LICENSE = GPL-2.0+, LGPL-2.0+, GPL-3.0+, LGPL-3.0+ +GDB_LICENSE_FILES = COPYING COPYING.LIB COPYING3 COPYING3.LIB +GDB_CPE_ID_VENDOR = gnu + +# On gdb < 10, if you want to build only gdbserver, you need to +# configure only gdb/gdbserver. +ifeq ($(BR2_PACKAGE_GDB_DEBUGGER)$(GDB_GDBSERVER_TOPLEVEL),) +GDB_SUBDIR = gdb/gdbserver + +# When we want to build the full gdb, or for very recent versions of +# gdb with gdbserver at the top-level, out of tree build is mandatory, +# so we create a 'build' subdirectory in the gdb sources, and build +# from there. +else +GDB_SUBDIR = build +define GDB_CONFIGURE_SYMLINK + mkdir -p $(@D)/$(GDB_SUBDIR) + ln -sf ../configure $(@D)/$(GDB_SUBDIR)/configure +endef +GDB_PRE_CONFIGURE_HOOKS += GDB_CONFIGURE_SYMLINK +endif + +# For the host variant, we really want to build with XML support, +# which is needed to read XML descriptions of target architectures. We +# also need ncurses. +# As for libiberty, gdb may use a system-installed one if present, so +# we must ensure ours is installed first. +HOST_GDB_DEPENDENCIES = host-expat host-libiberty host-ncurses + +# Disable building documentation +GDB_MAKE_OPTS += MAKEINFO=true +GDB_INSTALL_TARGET_OPTS += MAKEINFO=true DESTDIR=$(TARGET_DIR) install +HOST_GDB_MAKE_OPTS += MAKEINFO=true +HOST_GDB_INSTALL_OPTS += MAKEINFO=true install + +# Apply the Xtensa specific patches +ifneq ($(ARCH_XTENSA_OVERLAY_FILE),) +define GDB_XTENSA_OVERLAY_EXTRACT + $(call arch-xtensa-overlay-extract,$(@D),gdb) +endef +GDB_POST_EXTRACT_HOOKS += GDB_XTENSA_OVERLAY_EXTRACT +GDB_EXTRA_DOWNLOADS += $(ARCH_XTENSA_OVERLAY_URL) +HOST_GDB_POST_EXTRACT_HOOKS += GDB_XTENSA_OVERLAY_EXTRACT +HOST_GDB_EXTRA_DOWNLOADS += $(ARCH_XTENSA_OVERLAY_URL) +endif + +ifeq ($(GDB_FROM_GIT),y) +GDB_DEPENDENCIES += host-flex host-bison +HOST_GDB_DEPENDENCIES += host-flex host-bison +endif + +# When gdb sources are fetched from the binutils-gdb repository, they +# also contain the binutils sources, but binutils shouldn't be built, +# so we disable it (additionally the option --disable-install-libbfd +# prevents the un-wanted installation of libobcodes.so and libbfd.so). +GDB_DISABLE_BINUTILS_CONF_OPTS = \ + --disable-binutils \ + --disable-install-libbfd \ + --disable-ld \ + --disable-gas \ + --disable-gprof + +GDB_CONF_ENV = \ + ac_cv_type_uintptr_t=yes \ + gt_cv_func_gettext_libintl=yes \ + ac_cv_func_dcgettext=yes \ + gdb_cv_func_sigsetjmp=yes \ + bash_cv_func_strcoll_broken=no \ + bash_cv_must_reinstall_sighandlers=no \ + bash_cv_func_sigsetjmp=present \ + bash_cv_have_mbstate_t=yes \ + gdb_cv_func_sigsetjmp=yes + +# Starting with gdb 7.11, the bundled gnulib tries to use +# rpl_gettimeofday (gettimeofday replacement) due to the code being +# unable to determine if the replacement function should be used or +# not when cross-compiling with uClibc or musl as C libraries. So use +# gl_cv_func_gettimeofday_clobber=no to not use rpl_gettimeofday, +# assuming musl and uClibc have a properly working gettimeofday +# implementation. It needs to be passed to GDB_CONF_ENV to build +# gdbserver only but also to GDB_MAKE_ENV, because otherwise it does +# not get passed to the configure script of nested packages while +# building gdbserver with full debugger. +GDB_CONF_ENV += gl_cv_func_gettimeofday_clobber=no +GDB_MAKE_ENV += gl_cv_func_gettimeofday_clobber=no + +# Similarly, starting with gdb 8.1, the bundled gnulib tries to use +# rpl_strerror. Let's tell gnulib the C library implementation works +# well enough. +GDB_CONF_ENV += \ + gl_cv_func_working_strerror=yes \ + gl_cv_func_strerror_0_works=yes +GDB_MAKE_ENV += \ + gl_cv_func_working_strerror=yes \ + gl_cv_func_strerror_0_works=yes + +# Starting with glibc 2.25, the proc_service.h header has been copied +# from gdb to glibc so other tools can use it. However, that makes it +# necessary to make sure that declaration of prfpregset_t declaration +# is consistent between gdb and glibc. In gdb, however, there is a +# workaround for a broken prfpregset_t declaration in glibc 2.3 which +# uses AC_TRY_RUN to detect if it's needed, which doesn't work in +# cross-compilation. So pass the cache option to configure. +# It needs to be passed to GDB_CONF_ENV to build gdbserver only but +# also to GDB_MAKE_ENV, because otherwise it does not get passed to the +# configure script of nested packages while building gdbserver with full +# debugger. +GDB_CONF_ENV += gdb_cv_prfpregset_t_broken=no +GDB_MAKE_ENV += gdb_cv_prfpregset_t_broken=no + +# The shared only build is not supported by gdb, so enable static build for +# build-in libraries with --enable-static. +GDB_CONF_OPTS = \ + --without-uiout \ + --disable-gdbtk \ + --without-x \ + --disable-sim \ + $(GDB_DISABLE_BINUTILS_CONF_OPTS) \ + --without-included-gettext \ + --disable-werror \ + --enable-static \ + --without-mpfr + +ifeq ($(BR2_PACKAGE_GDB_DEBUGGER),y) +GDB_CONF_OPTS += \ + --enable-gdb \ + --with-curses +GDB_DEPENDENCIES = ncurses \ + $(if $(BR2_PACKAGE_LIBICONV),libiconv) +else +GDB_CONF_OPTS += \ + --disable-gdb \ + --without-curses +endif + +ifeq ($(BR2_PACKAGE_GDB_SERVER),y) +GDB_CONF_OPTS += --enable-gdbserver +else +GDB_CONF_OPTS += --disable-gdbserver +endif + +# When gdb is built as C++ application for ARC it segfaults at runtime +# So we pass --disable-build-with-cxx config option to force gdb not to +# be built as C++ app. +ifeq ($(BR2_arc),y) +GDB_CONF_OPTS += --disable-build-with-cxx +endif + +# gdb 7.12+ by default builds with a C++ compiler, which doesn't work +# when we don't have C++ support in the toolchain +ifneq ($(BR2_INSTALL_LIBSTDCPP),y) +GDB_CONF_OPTS += --disable-build-with-cxx +endif + +# inprocess-agent can't be built statically +ifeq ($(BR2_STATIC_LIBS),y) +GDB_CONF_OPTS += --disable-inprocess-agent +endif + +ifeq ($(BR2_PACKAGE_GDB_TUI),y) +GDB_CONF_OPTS += --enable-tui +else +GDB_CONF_OPTS += --disable-tui +endif + +ifeq ($(BR2_PACKAGE_GDB_PYTHON),y) +ifeq ($(BR2_PACKAGE_PYTHON3),y) +# CONF_ENV: for top-level configure; MAKE_ENV: for sub-projects' configure. +GDB_CONF_ENV += BR_PYTHON_VERSION=$(PYTHON3_VERSION_MAJOR) +GDB_MAKE_ENV += BR_PYTHON_VERSION=$(PYTHON3_VERSION_MAJOR) +GDB_DEPENDENCIES += python3 +else +# CONF_ENV: for top-level configure; MAKE_ENV: for sub-projects' configure. +GDB_CONF_ENV += BR_PYTHON_VERSION=$(PYTHON_VERSION_MAJOR) +GDB_MAKE_ENV += BR_PYTHON_VERSION=$(PYTHON_VERSION_MAJOR) +GDB_DEPENDENCIES += python +endif +GDB_CONF_OPTS += --with-python=$(TOPDIR)/package/gdb/gdb-python-config +else +GDB_CONF_OPTS += --without-python +endif + +ifeq ($(BR2_PACKAGE_EXPAT),y) +GDB_CONF_OPTS += --with-expat +GDB_CONF_OPTS += --with-libexpat-prefix=$(STAGING_DIR)/usr +GDB_DEPENDENCIES += expat +else +GDB_CONF_OPTS += --without-expat +endif + +ifeq ($(BR2_PACKAGE_XZ),y) +GDB_CONF_OPTS += --with-lzma +GDB_CONF_OPTS += --with-liblzma-prefix=$(STAGING_DIR)/usr +GDB_DEPENDENCIES += xz +else +GDB_CONF_OPTS += --without-lzma +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +GDB_CONF_OPTS += --with-zlib +GDB_DEPENDENCIES += zlib +else +GDB_CONF_OPTS += --without-zlib +endif + +ifeq ($(BR2_PACKAGE_GDB_PYTHON),) +# This removes some unneeded Python scripts and XML target description +# files that are not useful for a normal usage of the debugger. +define GDB_REMOVE_UNNEEDED_FILES + $(RM) -rf $(TARGET_DIR)/usr/share/gdb +endef + +GDB_POST_INSTALL_TARGET_HOOKS += GDB_REMOVE_UNNEEDED_FILES +endif + +# This installs the gdbserver somewhere into the $(HOST_DIR) so that +# it becomes an integral part of the SDK, if the toolchain generated +# by Buildroot is later used as an external toolchain. We install it +# in debug-root/usr/bin/gdbserver so that it matches what Crosstool-NG +# does. +define GDB_SDK_INSTALL_GDBSERVER + $(INSTALL) -D -m 0755 $(TARGET_DIR)/usr/bin/gdbserver \ + $(HOST_DIR)/$(GNU_TARGET_NAME)/debug-root/usr/bin/gdbserver +endef + +ifeq ($(BR2_PACKAGE_GDB_SERVER),y) +GDB_POST_INSTALL_TARGET_HOOKS += GDB_SDK_INSTALL_GDBSERVER +endif + +# A few notes: +# * --target, because we're doing a cross build rather than a real +# host build. +# * --enable-static because gdb really wants to use libbfd.a +HOST_GDB_CONF_OPTS = \ + --target=$(GNU_TARGET_NAME) \ + --enable-static \ + --without-uiout \ + --disable-gdbtk \ + --without-x \ + --enable-threads \ + --disable-werror \ + --without-included-gettext \ + --with-curses \ + --without-mpfr \ + $(GDB_DISABLE_BINUTILS_CONF_OPTS) + +ifeq ($(BR2_PACKAGE_HOST_GDB_TUI),y) +HOST_GDB_CONF_OPTS += --enable-tui +else +HOST_GDB_CONF_OPTS += --disable-tui +endif + +ifeq ($(BR2_PACKAGE_HOST_GDB_PYTHON),y) +HOST_GDB_CONF_OPTS += --with-python=$(HOST_DIR)/bin/python2 +HOST_GDB_DEPENDENCIES += host-python +else ifeq ($(BR2_PACKAGE_HOST_GDB_PYTHON3),y) +HOST_GDB_CONF_OPTS += --with-python=$(HOST_DIR)/bin/python3 +HOST_GDB_DEPENDENCIES += host-python3 +else +HOST_GDB_CONF_OPTS += --without-python +endif + +ifeq ($(BR2_PACKAGE_HOST_GDB_SIM),y) +HOST_GDB_CONF_OPTS += --enable-sim +else +HOST_GDB_CONF_OPTS += --disable-sim +endif + +# Since gdb 9, in-tree builds for GDB are not allowed anymore, +# so we create a 'build' subdirectory in the gdb sources, and +# build from there. +HOST_GDB_SUBDIR = build + +define HOST_GDB_CONFIGURE_SYMLINK + mkdir -p $(@D)/build + ln -sf ../configure $(@D)/build/configure +endef +HOST_GDB_PRE_CONFIGURE_HOOKS += HOST_GDB_CONFIGURE_SYMLINK + +# legacy $arch-linux-gdb symlink +define HOST_GDB_ADD_SYMLINK + cd $(HOST_DIR)/bin && \ + ln -snf $(GNU_TARGET_NAME)-gdb $(ARCH)-linux-gdb +endef + +HOST_GDB_POST_INSTALL_HOOKS += HOST_GDB_ADD_SYMLINK + +HOST_GDB_POST_INSTALL_HOOKS += gen_gdbinit_file + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/gdbm/0001-fix-build-with-gcc-10.patch b/package/gdbm/0001-fix-build-with-gcc-10.patch new file mode 100644 index 00000000..cd1417c8 --- /dev/null +++ b/package/gdbm/0001-fix-build-with-gcc-10.patch @@ -0,0 +1,96 @@ +From 9fecb6ce056f25837dffac95260d5a80b9f468c0 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Wed, 19 Aug 2020 10:37:07 +0200 +Subject: [PATCH] fix build with gcc 10 + +Move initialisation of global variables to main functions to fix the +following build failure with gcc 10: + +/tmp/instance-1/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: ./libgdbmapp.a(parseopt.o):(.bss+0x2c): multiple definition of `parseopt_program_args'; gdbm_dump.o:(.data.rel.local+0x28): first defined here +/tmp/instance-1/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: ./libgdbmapp.a(parseopt.o):(.bss+0x30): multiple definition of `parseopt_program_doc'; gdbm_dump.o:(.data.rel.local+0x2c): first defined here +/tmp/instance-1/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: ./libgdbmapp.a(parseopt.o):(.bss+0x2c): multiple definition of `parseopt_program_args'; gdbm_load.o:(.data.rel.local+0xa0): first defined here +/tmp/instance-1/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: ./libgdbmapp.a(parseopt.o):(.bss+0x30): multiple definition of `parseopt_program_doc'; gdbm_load.o:(.data.rel.local+0xa4): first defined here + +Fixes: + - http://autobuild.buildroot.org/results/d09b5368bb624df629296359a5abcdd37ba61e9e + +Signed-off-by: Fabrice Fontaine +[Upstream status: sent to Sergey Poznyakoff ] +--- + src/gdbm_dump.c | 5 +++-- + src/gdbm_load.c | 5 +++-- + src/gdbmtool.c | 5 +++-- + 3 files changed, 9 insertions(+), 6 deletions(-) + +diff --git a/src/gdbm_dump.c b/src/gdbm_dump.c +index 82fb5af..67574ac 100644 +--- a/src/gdbm_dump.c ++++ b/src/gdbm_dump.c +@@ -19,8 +19,6 @@ + # include "gdbmapp.h" + # include "gdbmdefs.h" + +-char *parseopt_program_doc = "dump a GDBM database to a file"; +-char *parseopt_program_args = "DB_FILE [FILE]"; + struct gdbm_option optab[] = { + { 'H', "format", "binary|ascii|0|1", N_("select dump format") }, + { 0 } +@@ -36,6 +34,9 @@ main (int argc, char **argv) + char *dbname, *filename; + FILE *fp; + ++ parseopt_program_doc = "dump a GDBM database to a file"; ++ parseopt_program_args = "DB_FILE [FILE]"; ++ + #ifdef HAVE_SETLOCALE + setlocale (LC_ALL, ""); + #endif +diff --git a/src/gdbm_load.c b/src/gdbm_load.c +index 2d96ada..1b2739c 100644 +--- a/src/gdbm_load.c ++++ b/src/gdbm_load.c +@@ -29,8 +29,6 @@ int mode; + uid_t owner_uid; + gid_t owner_gid; + +-char *parseopt_program_doc = "load a GDBM database from a file"; +-char *parseopt_program_args = "FILE [DB_FILE]"; + struct gdbm_option optab[] = { + { 'r', "replace", NULL, N_("replace records in the existing database") }, + { 'm', "mode", N_("MODE"), N_("set file mode") }, +@@ -100,6 +98,9 @@ main (int argc, char **argv) + int cache_size = 0; + int block_size = 0; + ++ parseopt_program_doc = "load a GDBM database from a file"; ++ parseopt_program_args = "FILE [DB_FILE]"; ++ + #ifdef HAVE_SETLOCALE + setlocale (LC_ALL, ""); + #endif +diff --git a/src/gdbmtool.c b/src/gdbmtool.c +index bbadbae..69bc3b1 100644 +--- a/src/gdbmtool.c ++++ b/src/gdbmtool.c +@@ -1535,8 +1535,6 @@ command_lookup (const char *str, struct locus *loc, struct command **pcmd) + return found->tok; + } + +-char *parseopt_program_doc = N_("examine and/or modify a GDBM database"); +-char *parseopt_program_args = N_("DBFILE [COMMAND [ARG ...]]"); + + enum { + OPT_LEX_TRACE = 256, +@@ -2053,6 +2051,9 @@ main (int argc, char *argv[]) + char *source = NULL; + instream_t input = NULL; + ++ parseopt_program_doc = N_("examine and/or modify a GDBM database"); ++ parseopt_program_args = N_("DBFILE [COMMAND [ARG ...]]"); ++ + set_progname (argv[0]); + #if GDBM_DEBUG_ENABLE + gdbm_debug_printer = debug_printer; +-- +2.27.0 + diff --git a/package/gdbm/Config.in b/package/gdbm/Config.in new file mode 100644 index 00000000..3646bd05 --- /dev/null +++ b/package/gdbm/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_GDBM + bool "gdbm" + help + GNU dbm is a set of database routines that use extensible + hashing. It works similar to the standard UNIX dbm routines. + + http://www.gnu.org/software/gdbm/gdbm.html diff --git a/package/gdbm/gdbm.hash b/package/gdbm/gdbm.hash new file mode 100644 index 00000000..8de9f636 --- /dev/null +++ b/package/gdbm/gdbm.hash @@ -0,0 +1,6 @@ +# From https://lists.gnu.org/archive/html/info-gnu/2018-10/msg00006.html +md5 988dc82182121c7570e0cb8b4fcd5415 gdbm-1.18.1.tar.gz +sha1 4a923ebfac06bb05c1c7699b206719e06a938f0d gdbm-1.18.1.tar.gz +# Locally computed +sha256 86e613527e5dba544e73208f42b78b7c022d4fa5a6d5498bf18c8d6f745b91dc gdbm-1.18.1.tar.gz +sha256 690d762f2e8e149ab1e2d6a409a3853b6151a2533b2382fae549a176d6bedecf COPYING diff --git a/package/gdbm/gdbm.mk b/package/gdbm/gdbm.mk new file mode 100644 index 00000000..084a7769 --- /dev/null +++ b/package/gdbm/gdbm.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# gdbm +# +################################################################################ + +GDBM_VERSION = 1.18.1 +GDBM_SITE = $(BR2_GNU_MIRROR)/gdbm +GDBM_LICENSE = GPL-3.0+ +GDBM_LICENSE_FILES = COPYING +GDBM_INSTALL_STAGING = YES +GDBM_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) + +ifeq ($(BR2_PACKAGE_READLINE),y) +GDBM_CONF_OPTS += --with-readline +GDBM_DEPENDENCIES += readline +else +GDBM_CONF_OPTS += --without-readline +endif + +$(eval $(autotools-package)) diff --git a/package/gdk-pixbuf/Config.in b/package/gdk-pixbuf/Config.in new file mode 100644 index 00000000..0ba6dda8 --- /dev/null +++ b/package/gdk-pixbuf/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_GDK_PIXBUF + bool "gdk-pixbuf" + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + Gdk-Pixbuf is an image loader and scaler. It uses GObject + and the GLib, to integrate well with GNOME applications. + + https://www.gtk.org/ + +comment "gdk-pixbuf needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/gdk-pixbuf/gdk-pixbuf.hash b/package/gdk-pixbuf/gdk-pixbuf.hash new file mode 100644 index 00000000..5e7dc7e0 --- /dev/null +++ b/package/gdk-pixbuf/gdk-pixbuf.hash @@ -0,0 +1,3 @@ +# From https://ftp.gnome.org/pub/gnome/sources/gdk-pixbuf/2.42/gdk-pixbuf-2.42.4.sha256sum +sha256 fe9c5dd88f486194ea2bc09b8814c1ed895bb6c530f37cbbf259757c4e482e4d gdk-pixbuf-2.42.4.tar.xz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/gdk-pixbuf/gdk-pixbuf.mk b/package/gdk-pixbuf/gdk-pixbuf.mk new file mode 100644 index 00000000..cd30d450 --- /dev/null +++ b/package/gdk-pixbuf/gdk-pixbuf.mk @@ -0,0 +1,95 @@ +################################################################################ +# +# gdk-pixbuf +# +################################################################################ + +GDK_PIXBUF_VERSION_MAJOR = 2.42 +GDK_PIXBUF_VERSION = $(GDK_PIXBUF_VERSION_MAJOR).4 +GDK_PIXBUF_SOURCE = gdk-pixbuf-$(GDK_PIXBUF_VERSION).tar.xz +GDK_PIXBUF_SITE = http://ftp.gnome.org/pub/gnome/sources/gdk-pixbuf/$(GDK_PIXBUF_VERSION_MAJOR) +GDK_PIXBUF_LICENSE = LGPL-2.1+ +GDK_PIXBUF_LICENSE_FILES = COPYING +GDK_PIXBUF_CPE_ID_VENDOR = gnome +GDK_PIXBUF_INSTALL_STAGING = YES +GDK_PIXBUF_DEPENDENCIES = \ + host-gdk-pixbuf host-libglib2 host-pkgconf \ + libglib2 $(if $(BR2_ENABLE_LOCALE),,libiconv) +HOST_GDK_PIXBUF_DEPENDENCIES = host-libpng host-pkgconf host-libglib2 + +GDK_PIXBUF_CONF_OPTS = \ + -Dgio_sniffing=false \ + -Dinstalled_tests=false \ + -Dman=false + +HOST_GDK_PIXBUF_CONF_OPTS = \ + -Dgio_sniffing=false \ + -Dinstalled_tests=false \ + -Dintrospection=disabled \ + -Dman=false + +ifeq ($(BR2_STATIC_LIBS),y) +GDK_PIXBUF_CONF_OPTS += -Dbuiltin_loaders=all +endif + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +GDK_PIXBUF_CONF_OPTS += -Dintrospection=enabled +GDK_PIXBUF_DEPENDENCIES += gobject-introspection +else +GDK_PIXBUF_CONF_OPTS += -Dintrospection=disabled +endif + +ifeq ($(BR2_PACKAGE_LIBPNG),y) +GDK_PIXBUF_CONF_OPTS += -Dpng=true +GDK_PIXBUF_DEPENDENCIES += libpng +else +GDK_PIXBUF_CONF_OPTS += -Dpng=false +endif + +ifeq ($(BR2_PACKAGE_JPEG),y) +GDK_PIXBUF_CONF_OPTS += -Djpeg=true +HOST_GDK_PIXBUF_CONF_OPTS += -Djpeg=true +GDK_PIXBUF_DEPENDENCIES += jpeg +HOST_GDK_PIXBUF_DEPENDENCIES += host-libjpeg +else +GDK_PIXBUF_CONF_OPTS += -Djpeg=false +HOST_GDK_PIXBUF_CONF_OPTS += -Djpeg=false +endif + +ifeq ($(BR2_PACKAGE_TIFF),y) +GDK_PIXBUF_CONF_OPTS += -Dtiff=true +HOST_GDK_PIXBUF_CONF_OPTS += -Dtiff=true +GDK_PIXBUF_DEPENDENCIES += tiff +HOST_GDK_PIXBUF_DEPENDENCIES += host-tiff +else +GDK_PIXBUF_CONF_OPTS += -Dtiff=false +HOST_GDK_PIXBUF_CONF_OPTS += -Dtiff=false +endif + +# gdk-pixbuf requires the loaders.cache file populated to work properly +# Rather than doing so at runtime, since the fs can be read-only, do so +# here after building and installing to target. +# And since the cache file will contain absolute host directory names we +# need to sanitize (strip) them. +ifeq ($(BR2_STATIC_LIBS),) +define GDK_PIXBUF_UPDATE_CACHE + GDK_PIXBUF_MODULEDIR=$(HOST_DIR)/lib/gdk-pixbuf-2.0/2.10.0/loaders \ + $(HOST_DIR)/bin/gdk-pixbuf-query-loaders \ + > $(TARGET_DIR)/usr/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache + $(SED) "s,$(HOST_DIR)/lib,/usr/lib,g" \ + $(TARGET_DIR)/usr/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache +endef +GDK_PIXBUF_POST_INSTALL_TARGET_HOOKS += GDK_PIXBUF_UPDATE_CACHE +endif + +# Target gdk-pixbuf needs loaders.cache populated to build for the +# thumbnailer. Use the host-built since it matches the target options +# regarding mime types (which is the used information). +define GDK_PIXBUF_COPY_LOADERS_CACHE + cp -f $(HOST_DIR)/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache \ + $(@D)/gdk-pixbuf +endef +GDK_PIXBUF_PRE_BUILD_HOOKS += GDK_PIXBUF_COPY_LOADERS_CACHE + +$(eval $(meson-package)) +$(eval $(host-meson-package)) diff --git a/package/genext2fs/0001-update-genext2fs.c-to-rev-1.118.patch b/package/genext2fs/0001-update-genext2fs.c-to-rev-1.118.patch new file mode 100644 index 00000000..755ee9de --- /dev/null +++ b/package/genext2fs/0001-update-genext2fs.c-to-rev-1.118.patch @@ -0,0 +1,2971 @@ +[PATCH] update genext2fs.c to CVS rev 1.118 + +See http://genext2fs.cvs.sourceforge.net/viewvc/genext2fs/genext2fs/genext2fs.c?view=log +for details. + +Numerous bugfixes, large file and filesystem support, rev 1 filesystems, +volume id support, block size, .. + +Signed-off-by: Peter Korsgaard +--- + cache.h | 128 ++++ + genext2fs.c | 1870 ++++++++++++++++++++++++++++++++++++++++++------------------ + list.h | 78 ++ + 3 files changed, 1527 insertions(+), 549 deletions(-) + +Index: genext2fs-1.4.1/genext2fs.c +=================================================================== +--- genext2fs-1.4.1.orig/genext2fs.c ++++ genext2fs-1.4.1/genext2fs.c +@@ -53,6 +53,12 @@ + // along with -q, -P, -U + + ++/* ++ * Allow fseeko/off_t to be 64-bit offsets to allow filesystems and ++ * individual files >2GB. ++ */ ++#define _FILE_OFFSET_BITS 64 ++ + #include + #include + +@@ -107,10 +113,8 @@ + + #if HAVE_DIRENT_H + # include +-# define NAMLEN(dirent) strlen((dirent)->d_name) + #else + # define dirent direct +-# define NAMLEN(dirent) (dirent)->d_namlen + # if HAVE_SYS_NDIR_H + # include + # endif +@@ -144,6 +148,8 @@ + # include + #endif + ++#include "cache.h" ++ + struct stats { + unsigned long nblocks; + unsigned long ninodes; +@@ -151,13 +157,42 @@ + + // block size + +-#define BLOCKSIZE 1024 ++static int blocksize = 1024; ++ ++#define SUPERBLOCK_OFFSET 1024 ++#define SUPERBLOCK_SIZE 1024 ++ ++#define BLOCKSIZE blocksize + #define BLOCKS_PER_GROUP 8192 + #define INODES_PER_GROUP 8192 + /* Percentage of blocks that are reserved.*/ + #define RESERVED_BLOCKS 5/100 + #define MAX_RESERVED_BLOCKS 25/100 + ++/* The default value for s_creator_os. */ ++#if defined(__linux__) && defined(EXT2_OS_LINUX) ++#define CREATOR_OS EXT2_OS_LINUX ++#define CREATOR_OS_NAME "linux" ++#else ++#if defined(__GNU__) && defined(EXT2_OS_HURD) ++#define CREATOR_OS EXT2_OS_HURD ++#define CREATOR_OS_NAME "hurd" ++#else ++#if defined(__FreeBSD__) && defined(EXT2_OS_FREEBSD) ++#define CREATOR_OS EXT2_OS_FREEBSD ++#define CREATOR_OS_NAME "freebsd" ++#else ++#if defined(LITES) && defined(EXT2_OS_LITES) ++#define CREATOR_OS EXT2_OS_LITES ++#define CREATOR_OS_NAME "lites" ++#else ++#define CREATOR_OS EXT2_OS_LINUX /* by default */ ++#define CREATOR_OS_NAME "linux" ++#endif /* defined(LITES) && defined(EXT2_OS_LITES) */ ++#endif /* defined(__FreeBSD__) && defined(EXT2_OS_FREEBSD) */ ++#endif /* defined(__GNU__) && defined(EXT2_OS_HURD) */ ++#endif /* defined(__linux__) && defined(EXT2_OS_LINUX) */ ++ + + // inode block size (why is it != BLOCKSIZE ?!?) + /* The field i_blocks in the ext2 inode stores the number of data blocks +@@ -190,6 +225,14 @@ + #define EXT2_TIND_BLOCK 14 // triple indirect block + #define EXT2_INIT_BLOCK 0xFFFFFFFF // just initialized (not really a block address) + ++// codes for operating systems ++ ++#define EXT2_OS_LINUX 0 ++#define EXT2_OS_HURD 1 ++#define EXT2_OS_MASIX 2 ++#define EXT2_OS_FREEBSD 3 ++#define EXT2_OS_LITES 4 ++ + // end of a block walk + + #define WALK_END 0xFFFFFFFE +@@ -227,44 +270,46 @@ + #define FM_IWOTH 0000002 // write + #define FM_IXOTH 0000001 // execute + +-// options +- +-#define OP_HOLES 0x01 // make files with holes +- + /* Defines for accessing group details */ + + // Number of groups in the filesystem + #define GRP_NBGROUPS(fs) \ +- (((fs)->sb.s_blocks_count - fs->sb.s_first_data_block + \ +- (fs)->sb.s_blocks_per_group - 1) / (fs)->sb.s_blocks_per_group) ++ (((fs)->sb->s_blocks_count - fs->sb->s_first_data_block + \ ++ (fs)->sb->s_blocks_per_group - 1) / (fs)->sb->s_blocks_per_group) + + // Get group block bitmap (bbm) given the group number +-#define GRP_GET_GROUP_BBM(fs,grp) ( get_blk((fs),(fs)->gd[(grp)].bg_block_bitmap) ) ++#define GRP_GET_GROUP_BBM(fs,grp,bi) (get_blk((fs),(grp)->bg_block_bitmap,(bi))) ++#define GRP_PUT_GROUP_BBM(bi) ( put_blk((bi)) ) + + // Get group inode bitmap (ibm) given the group number +-#define GRP_GET_GROUP_IBM(fs,grp) ( get_blk((fs),(fs)->gd[(grp)].bg_inode_bitmap) ) +- ++#define GRP_GET_GROUP_IBM(fs,grp,bi) (get_blk((fs), (grp)->bg_inode_bitmap,(bi))) ++#define GRP_PUT_GROUP_IBM(bi) ( put_blk((bi)) ) ++ + // Given an inode number find the group it belongs to +-#define GRP_GROUP_OF_INODE(fs,nod) ( ((nod)-1) / (fs)->sb.s_inodes_per_group) ++#define GRP_GROUP_OF_INODE(fs,nod) ( ((nod)-1) / (fs)->sb->s_inodes_per_group) + + //Given an inode number get the inode bitmap that covers it +-#define GRP_GET_INODE_BITMAP(fs,nod) \ +- ( GRP_GET_GROUP_IBM((fs),GRP_GROUP_OF_INODE((fs),(nod))) ) ++#define GRP_GET_INODE_BITMAP(fs,nod,bi,gi) \ ++ ( GRP_GET_GROUP_IBM((fs),get_gd(fs,GRP_GROUP_OF_INODE((fs),(nod)),gi),bi) ) ++#define GRP_PUT_INODE_BITMAP(bi,gi) \ ++ ( GRP_PUT_GROUP_IBM((bi)),put_gd((gi)) ) + + //Given an inode number find its offset within the inode bitmap that covers it + #define GRP_IBM_OFFSET(fs,nod) \ +- ( (nod) - GRP_GROUP_OF_INODE((fs),(nod))*(fs)->sb.s_inodes_per_group ) ++ ( (nod) - GRP_GROUP_OF_INODE((fs),(nod))*(fs)->sb->s_inodes_per_group ) + + // Given a block number find the group it belongs to +-#define GRP_GROUP_OF_BLOCK(fs,blk) ( ((blk)-1) / (fs)->sb.s_blocks_per_group) ++#define GRP_GROUP_OF_BLOCK(fs,blk) ( ((blk)-1) / (fs)->sb->s_blocks_per_group) + +-//Given a block number get the block bitmap that covers it +-#define GRP_GET_BLOCK_BITMAP(fs,blk) \ +- ( GRP_GET_GROUP_BBM((fs),GRP_GROUP_OF_BLOCK((fs),(blk))) ) ++//Given a block number get/put the block bitmap that covers it ++#define GRP_GET_BLOCK_BITMAP(fs,blk,bi,gi) \ ++ ( GRP_GET_GROUP_BBM((fs),get_gd(fs,GRP_GROUP_OF_BLOCK((fs),(blk)),(gi)),(bi)) ) ++#define GRP_PUT_BLOCK_BITMAP(bi,gi) \ ++ ( GRP_PUT_GROUP_BBM((bi)),put_gd((gi)) ) + + //Given a block number find its offset within the block bitmap that covers it + #define GRP_BBM_OFFSET(fs,blk) \ +- ( (blk) - GRP_GROUP_OF_BLOCK((fs),(blk))*(fs)->sb.s_blocks_per_group ) ++ ( (blk) - GRP_GROUP_OF_BLOCK((fs),(blk))*(fs)->sb->s_blocks_per_group ) + + + // used types +@@ -286,7 +331,9 @@ + // older solaris. Note that this is still not very portable, in that + // the return value cannot be trusted. + +-#if SCANF_CAN_MALLOC ++#if 0 // SCANF_CAN_MALLOC ++// C99 define "a" for floating point, so you can have runtime surprise ++// according the library versions + # define SCANF_PREFIX "a" + # define SCANF_STRING(s) (&s) + #else +@@ -430,6 +477,17 @@ + ((val<<8)&0xFF0000) | (val<<24)); + } + ++static inline int ++is_blk_empty(uint8 *b) ++{ ++ uint32 i; ++ uint32 *v = (uint32 *) b; ++ ++ for(i = 0; i < BLOCKSIZE / 4; i++) ++ if (*v++) ++ return 0; ++ return 1; ++} + + // on-disk structures + // this trick makes me declare things only once +@@ -460,7 +518,22 @@ + udecl32(s_creator_os) /* Indicator of which OS created the filesystem */ \ + udecl32(s_rev_level) /* The revision level of the filesystem */ \ + udecl16(s_def_resuid) /* The default uid for reserved blocks */ \ +- udecl16(s_def_resgid) /* The default gid for reserved blocks */ ++ udecl16(s_def_resgid) /* The default gid for reserved blocks */ \ ++ /* rev 1 version fields start here */ \ ++ udecl32(s_first_ino) /* First non-reserved inode */ \ ++ udecl16(s_inode_size) /* size of inode structure */ \ ++ udecl16(s_block_group_nr) /* block group # of this superblock */ \ ++ udecl32(s_feature_compat) /* compatible feature set */ \ ++ udecl32(s_feature_incompat) /* incompatible feature set */ \ ++ udecl32(s_feature_ro_compat) /* readonly-compatible feature set */ \ ++ utdecl8(s_uuid,16) /* 128-bit uuid for volume */ \ ++ utdecl8(s_volume_name,16) /* volume name */ \ ++ utdecl8(s_last_mounted,64) /* directory where last mounted */ \ ++ udecl32(s_algorithm_usage_bitmap) /* For compression */ ++ ++#define EXT2_GOOD_OLD_FIRST_INO 11 ++#define EXT2_GOOD_OLD_INODE_SIZE 128 ++#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002 + + #define groupdescriptor_decl \ + udecl32(bg_block_bitmap) /* Block number of the block bitmap */ \ +@@ -500,6 +573,7 @@ + + #define decl8(x) int8 x; + #define udecl8(x) uint8 x; ++#define utdecl8(x,n) uint8 x[n]; + #define decl16(x) int16 x; + #define udecl16(x) uint16 x; + #define decl32(x) int32 x; +@@ -509,7 +583,7 @@ + typedef struct + { + superblock_decl +- uint32 s_reserved[235]; // Reserved ++ uint32 s_reserved[205]; // Reserved + } superblock; + + typedef struct +@@ -527,10 +601,9 @@ + typedef struct + { + directory_decl +- char d_name[0]; + } directory; + +-typedef uint8 block[BLOCKSIZE]; ++typedef uint8 *block; + + /* blockwalker fields: + The blockwalker is used to access all the blocks of a file (including +@@ -567,23 +640,41 @@ + uint32 bptind; + } blockwalker; + ++#define HDLINK_CNT 16 ++struct hdlink_s ++{ ++ uint32 src_inode; ++ uint32 dst_nod; ++}; ++ ++struct hdlinks_s ++{ ++ int32 count; ++ struct hdlink_s *hdl; ++}; + + /* Filesystem structure that support groups */ +-#if BLOCKSIZE == 1024 + typedef struct + { +- block zero; // The famous block 0 +- superblock sb; // The superblock +- groupdescriptor gd[0]; // The group descriptors ++ FILE *f; ++ superblock *sb; ++ int swapit; ++ int32 hdlink_cnt; ++ struct hdlinks_s hdlinks; ++ ++ int holes; ++ ++ listcache blks; ++ listcache gds; ++ listcache inodes; ++ listcache blkmaps; + } filesystem; +-#else +-#error UNHANDLED BLOCKSIZE +-#endif + + // now the endianness swap + + #undef decl8 + #undef udecl8 ++#undef utdecl8 + #undef decl16 + #undef udecl16 + #undef decl32 +@@ -592,28 +683,13 @@ + + #define decl8(x) + #define udecl8(x) ++#define utdecl8(x,n) + #define decl16(x) this->x = swab16(this->x); + #define udecl16(x) this->x = swab16(this->x); + #define decl32(x) this->x = swab32(this->x); + #define udecl32(x) this->x = swab32(this->x); + #define utdecl32(x,n) { int i; for(i=0; ix[i] = swab32(this->x[i]); } + +-#define HDLINK_CNT 16 +-static int32 hdlink_cnt = HDLINK_CNT; +-struct hdlink_s +-{ +- uint32 src_inode; +- uint32 dst_nod; +-}; +- +-struct hdlinks_s +-{ +- int32 count; +- struct hdlink_s *hdl; +-}; +- +-static struct hdlinks_s hdlinks; +- + static void + swap_sb(superblock *sb) + { +@@ -633,9 +709,24 @@ + static void + swap_nod(inode *nod) + { ++ uint32 nblk; ++ + #define this nod + inode_decl + #undef this ++ ++ // block and character inodes store the major and minor in the ++ // i_block, so we need to unswap to get those. Also, if it's ++ // zero iblocks, put the data back like it belongs. ++ nblk = nod->i_blocks / INOBLK; ++ if ((nod->i_size && !nblk) ++ || ((nod->i_mode & FM_IFBLK) == FM_IFBLK) ++ || ((nod->i_mode & FM_IFCHR) == FM_IFCHR)) ++ { ++ int i; ++ for(i = 0; i <= EXT2_TIND_BLOCK; i++) ++ nod->i_block[i] = swab32(nod->i_block[i]); ++ } + } + + static void +@@ -657,6 +748,7 @@ + + #undef decl8 + #undef udecl8 ++#undef utdecl8 + #undef decl16 + #undef udecl16 + #undef decl32 +@@ -770,15 +862,15 @@ + } + + int +-is_hardlink(ino_t inode) ++is_hardlink(filesystem *fs, ino_t inode) + { + int i; + +- for(i = 0; i < hdlinks.count; i++) { +- if(hdlinks.hdl[i].src_inode == inode) ++ for(i = 0; i < fs->hdlinks.count; i++) { ++ if(fs->hdlinks.hdl[i].src_inode == inode) + return i; + } +- return -1; ++ return -1; + } + + // printf helper macro +@@ -789,6 +881,8 @@ + get_workblk(void) + { + unsigned char* b=calloc(1,BLOCKSIZE); ++ if (!b) ++ error_msg_and_die("get_workblk() failed, out of memory"); + return b; + } + static inline void +@@ -811,24 +905,464 @@ + return b[(item-1) / 8] & (1 << ((item-1) % 8)); + } + +-// return a given block from a filesystem ++// Used by get_blk/put_blk to hold information about a block owned ++// by the user. ++typedef struct ++{ ++ cache_link link; ++ ++ filesystem *fs; ++ uint32 blk; ++ uint8 *b; ++ uint32 usecount; ++} blk_info; ++ ++#define MAX_FREE_CACHE_BLOCKS 100 ++ ++static uint32 ++blk_elem_val(cache_link *elem) ++{ ++ blk_info *bi = container_of(elem, blk_info, link); ++ return bi->blk; ++} ++ ++static void ++blk_freed(cache_link *elem) ++{ ++ blk_info *bi = container_of(elem, blk_info, link); ++ ++ if (fseeko(bi->fs->f, ((off_t) bi->blk) * BLOCKSIZE, SEEK_SET)) ++ perror_msg_and_die("fseek"); ++ if (fwrite(bi->b, BLOCKSIZE, 1, bi->fs->f) != 1) ++ perror_msg_and_die("get_blk: write"); ++ free(bi->b); ++ free(bi); ++} ++ ++// Return a given block from a filesystem. Make sure to call ++// put_blk when you are done with it. + static inline uint8 * +-get_blk(filesystem *fs, uint32 blk) ++get_blk(filesystem *fs, uint32 blk, blk_info **rbi) + { +- return (uint8*)fs + blk*BLOCKSIZE; ++ cache_link *curr; ++ blk_info *bi; ++ ++ if (blk >= fs->sb->s_blocks_count) ++ error_msg_and_die("Internal error, block out of range"); ++ ++ curr = cache_find(&fs->blks, blk); ++ if (curr) { ++ bi = container_of(curr, blk_info, link); ++ bi->usecount++; ++ goto out; ++ } ++ ++ bi = malloc(sizeof(*bi)); ++ if (!bi) ++ error_msg_and_die("get_blk: out of memory"); ++ bi->fs = fs; ++ bi->blk = blk; ++ bi->usecount = 1; ++ bi->b = malloc(BLOCKSIZE); ++ if (!bi->b) ++ error_msg_and_die("get_blk: out of memory"); ++ cache_add(&fs->blks, &bi->link); ++ if (fseeko(fs->f, ((off_t) blk) * BLOCKSIZE, SEEK_SET)) ++ perror_msg_and_die("fseek"); ++ if (fread(bi->b, BLOCKSIZE, 1, fs->f) != 1) { ++ if (ferror(fs->f)) ++ perror_msg_and_die("fread"); ++ memset(bi->b, 0, BLOCKSIZE); ++ } ++ ++out: ++ *rbi = bi; ++ return bi->b; + } + + // return a given inode from a filesystem +-static inline inode * +-get_nod(filesystem *fs, uint32 nod) ++static inline void ++put_blk(blk_info *bi) ++{ ++ if (bi->usecount == 0) ++ error_msg_and_die("Internal error: put_blk usecount zero"); ++ bi->usecount--; ++ if (bi->usecount == 0) ++ /* Free happens in the cache code */ ++ cache_item_set_unused(&bi->fs->blks, &bi->link); ++} ++ ++typedef struct + { +- int grp,offset; ++ cache_link link; ++ ++ filesystem *fs; ++ int gds; ++ blk_info *bi; ++ groupdescriptor *gd; ++ uint32 usecount; ++} gd_info; ++ ++#define MAX_FREE_CACHE_GDS 100 ++ ++static uint32 ++gd_elem_val(cache_link *elem) ++{ ++ gd_info *gi = container_of(elem, gd_info, link); ++ return gi->gds; ++} ++ ++static void ++gd_freed(cache_link *elem) ++{ ++ gd_info *gi = container_of(elem, gd_info, link); ++ ++ if (gi->fs->swapit) ++ swap_gd(gi->gd); ++ put_blk(gi->bi); ++ free(gi); ++} ++ ++#define GDS_START ((SUPERBLOCK_OFFSET + SUPERBLOCK_SIZE + BLOCKSIZE - 1) / BLOCKSIZE) ++#define GDS_PER_BLOCK (BLOCKSIZE / sizeof(groupdescriptor)) ++// the group descriptors are aligned on the block size ++static inline groupdescriptor * ++get_gd(filesystem *fs, uint32 no, gd_info **rgi) ++{ ++ uint32 gdblk; ++ uint32 offset; ++ gd_info *gi; ++ cache_link *curr; ++ ++ curr = cache_find(&fs->gds, no); ++ if (curr) { ++ gi = container_of(curr, gd_info, link); ++ gi->usecount++; ++ goto out; ++ } ++ ++ gi = malloc(sizeof(*gi)); ++ if (!gi) ++ error_msg_and_die("get_gd: out of memory"); ++ gi->fs = fs; ++ gi->gds = no; ++ gi->usecount = 1; ++ gdblk = GDS_START + (no / GDS_PER_BLOCK); ++ offset = no % GDS_PER_BLOCK; ++ gi->gd = ((groupdescriptor *) get_blk(fs, gdblk, &gi->bi)) + offset; ++ cache_add(&fs->gds, &gi->link); ++ if (fs->swapit) ++ swap_gd(gi->gd); ++ out: ++ *rgi = gi; ++ ++ return gi->gd; ++} ++ ++static inline void ++put_gd(gd_info *gi) ++{ ++ if (gi->usecount == 0) ++ error_msg_and_die("Internal error: put_gd usecount zero"); ++ ++ gi->usecount--; ++ if (gi->usecount == 0) ++ /* Free happens in the cache code */ ++ cache_item_set_unused(&gi->fs->gds, &gi->link); ++} ++ ++// Used by get_blkmap/put_blkmap to hold information about an block map ++// owned by the user. ++typedef struct ++{ ++ cache_link link; ++ ++ filesystem *fs; ++ uint32 blk; ++ uint8 *b; ++ blk_info *bi; ++ uint32 usecount; ++} blkmap_info; ++ ++#define MAX_FREE_CACHE_BLOCKMAPS 100 ++ ++static uint32 ++blkmap_elem_val(cache_link *elem) ++{ ++ blkmap_info *bmi = container_of(elem, blkmap_info, link); ++ return bmi->blk; ++} ++ ++static void ++blkmap_freed(cache_link *elem) ++{ ++ blkmap_info *bmi = container_of(elem, blkmap_info, link); ++ ++ if (bmi->fs->swapit) ++ swap_block(bmi->b); ++ put_blk(bmi->bi); ++ free(bmi); ++} ++ ++// Return a given block map from a filesystem. Make sure to call ++// put_blkmap when you are done with it. ++static inline uint32 * ++get_blkmap(filesystem *fs, uint32 blk, blkmap_info **rbmi) ++{ ++ blkmap_info *bmi; ++ cache_link *curr; ++ ++ curr = cache_find(&fs->blkmaps, blk); ++ if (curr) { ++ bmi = container_of(curr, blkmap_info, link); ++ bmi->usecount++; ++ goto out; ++ } ++ ++ bmi = malloc(sizeof(*bmi)); ++ if (!bmi) ++ error_msg_and_die("get_blkmap: out of memory"); ++ bmi->fs = fs; ++ bmi->blk = blk; ++ bmi->b = get_blk(fs, blk, &bmi->bi); ++ bmi->usecount = 1; ++ cache_add(&fs->blkmaps, &bmi->link); ++ ++ if (fs->swapit) ++ swap_block(bmi->b); ++ out: ++ *rbmi = bmi; ++ return (uint32 *) bmi->b; ++} ++ ++static inline void ++put_blkmap(blkmap_info *bmi) ++{ ++ if (bmi->usecount == 0) ++ error_msg_and_die("Internal error: put_blkmap usecount zero"); ++ ++ bmi->usecount--; ++ if (bmi->usecount == 0) ++ /* Free happens in the cache code */ ++ cache_item_set_unused(&bmi->fs->blkmaps, &bmi->link); ++} ++ ++// Used by get_nod/put_nod to hold information about an inode owned ++// by the user. ++typedef struct ++{ ++ cache_link link; ++ ++ filesystem *fs; ++ uint32 nod; ++ uint8 *b; ++ blk_info *bi; + inode *itab; ++ uint32 usecount; ++} nod_info; ++ ++#define MAX_FREE_CACHE_INODES 100 ++ ++static uint32 ++inode_elem_val(cache_link *elem) ++{ ++ nod_info *ni = container_of(elem, nod_info, link); ++ return ni->nod; ++} ++ ++static void ++inode_freed(cache_link *elem) ++{ ++ nod_info *ni = container_of(elem, nod_info, link); ++ ++ if (ni->fs->swapit) ++ swap_nod(ni->itab); ++ put_blk(ni->bi); ++ free(ni); ++} ++ ++#define INODES_PER_BLOCK (BLOCKSIZE / sizeof(inode)) + +- offset = GRP_IBM_OFFSET(fs,nod); ++// return a given inode from a filesystem ++static inline inode * ++get_nod(filesystem *fs, uint32 nod, nod_info **rni) ++{ ++ uint32 grp, boffset, offset; ++ cache_link *curr; ++ groupdescriptor *gd; ++ gd_info *gi; ++ nod_info *ni; ++ ++ curr = cache_find(&fs->inodes, nod); ++ if (curr) { ++ ni = container_of(curr, nod_info, link); ++ ni->usecount++; ++ goto out; ++ } ++ ++ ni = malloc(sizeof(*ni)); ++ if (!ni) ++ error_msg_and_die("get_nod: out of memory"); ++ ni->fs = fs; ++ ni->nod = nod; ++ ni->usecount = 1; ++ cache_add(&fs->inodes, &ni->link); ++ ++ offset = GRP_IBM_OFFSET(fs,nod) - 1; ++ boffset = offset / INODES_PER_BLOCK; ++ offset %= INODES_PER_BLOCK; + grp = GRP_GROUP_OF_INODE(fs,nod); +- itab = (inode *)get_blk(fs, fs->gd[grp].bg_inode_table); +- return itab+offset-1; ++ gd = get_gd(fs, grp, &gi); ++ ni->b = get_blk(fs, gd->bg_inode_table + boffset, &ni->bi); ++ ni->itab = ((inode *) ni->b) + offset; ++ if (fs->swapit) ++ swap_nod(ni->itab); ++ put_gd(gi); ++ out: ++ *rni = ni; ++ return ni->itab; ++} ++ ++static inline void ++put_nod(nod_info *ni) ++{ ++ if (ni->usecount == 0) ++ error_msg_and_die("Internal error: put_nod usecount zero"); ++ ++ ni->usecount--; ++ if (ni->usecount == 0) ++ /* Free happens in the cache code */ ++ cache_item_set_unused(&ni->fs->inodes, &ni->link); ++} ++ ++// Used to hold state information while walking a directory inode. ++typedef struct ++{ ++ directory d; ++ filesystem *fs; ++ uint32 nod; ++ directory *last_d; ++ uint8 *b; ++ blk_info *bi; ++} dirwalker; ++ ++// Start a directory walk on the given inode. You must pass in a ++// dirwalker structure, then use that dirwalker for future operations. ++// Call put_dir when you are done walking the directory. ++static inline directory * ++get_dir(filesystem *fs, uint32 nod, dirwalker *dw) ++{ ++ dw->fs = fs; ++ dw->b = get_blk(fs, nod, &dw->bi); ++ dw->nod = nod; ++ dw->last_d = (directory *) dw->b; ++ ++ memcpy(&dw->d, dw->last_d, sizeof(directory)); ++ if (fs->swapit) ++ swap_dir(&dw->d); ++ return &dw->d; ++} ++ ++// Move to the next directory. ++static inline directory * ++next_dir(dirwalker *dw) ++{ ++ directory *next_d = (directory *)((int8*)dw->last_d + dw->d.d_rec_len); ++ ++ if (dw->fs->swapit) ++ swap_dir(&dw->d); ++ memcpy(dw->last_d, &dw->d, sizeof(directory)); ++ ++ if (((int8 *) next_d) >= ((int8 *) dw->b + BLOCKSIZE)) ++ return NULL; ++ ++ dw->last_d = next_d; ++ memcpy(&dw->d, next_d, sizeof(directory)); ++ if (dw->fs->swapit) ++ swap_dir(&dw->d); ++ return &dw->d; ++} ++ ++// Call then when you are done with the directory walk. ++static inline void ++put_dir(dirwalker *dw) ++{ ++ if (dw->fs->swapit) ++ swap_dir(&dw->d); ++ memcpy(dw->last_d, &dw->d, sizeof(directory)); ++ ++ if (dw->nod == 0) ++ free_workblk(dw->b); ++ else ++ put_blk(dw->bi); ++} ++ ++// Create a new directory block with the given inode as it's destination ++// and append it to the current dirwalker. ++static directory * ++new_dir(filesystem *fs, uint32 dnod, const char *name, int nlen, dirwalker *dw) ++{ ++ directory *d; ++ ++ dw->fs = fs; ++ dw->b = get_workblk(); ++ dw->nod = 0; ++ dw->last_d = (directory *) dw->b; ++ d = &dw->d; ++ d->d_inode = dnod; ++ d->d_rec_len = BLOCKSIZE; ++ d->d_name_len = nlen; ++ strncpy(((char *) dw->last_d) + sizeof(directory), name, nlen); ++ return d; ++} ++ ++// Shrink the current directory entry, make a new one with the free ++// space, and return the new directory entry (making it current). ++static inline directory * ++shrink_dir(dirwalker *dw, uint32 nod, const char *name, int nlen) ++{ ++ int reclen, preclen; ++ directory *d = &dw->d; ++ ++ reclen = d->d_rec_len; ++ d->d_rec_len = sizeof(directory) + rndup(d->d_name_len, 4); ++ preclen = d->d_rec_len; ++ reclen -= preclen; ++ if (dw->fs->swapit) ++ swap_dir(&dw->d); ++ memcpy(dw->last_d, &dw->d, sizeof(directory)); ++ ++ dw->last_d = (directory *) (((int8 *) dw->last_d) + preclen); ++ d->d_rec_len = reclen; ++ d->d_inode = nod; ++ d->d_name_len = nlen; ++ strncpy(((char *) dw->last_d) + sizeof(directory), name, nlen); ++ ++ return d; ++} ++ ++// Return the current block the directory is walking ++static inline uint8 * ++dir_data(dirwalker *dw) ++{ ++ return dw->b; ++} ++ ++// Return the pointer to the name for the current directory ++static inline char * ++dir_name(dirwalker *dw) ++{ ++ return ((char *) dw->last_d) + sizeof(directory); ++} ++ ++// Set the name for the current directory. Note that this doesn't ++// verify that there is space for the directory name, you must do ++// that yourself. ++static void ++dir_set_name(dirwalker *dw, const char *name, int nlen) ++{ ++ dw->d.d_name_len = nlen; ++ strncpy(((char *) dw->last_d) + sizeof(directory), name, nlen); + } + + // allocate a given block/inode in the bitmap +@@ -870,21 +1404,34 @@ + { + uint32 bk=0; + uint32 grp,nbgroups; ++ blk_info *bi; ++ groupdescriptor *gd; ++ gd_info *gi; + + grp = GRP_GROUP_OF_INODE(fs,nod); + nbgroups = GRP_NBGROUPS(fs); +- if(!(bk = allocate(get_blk(fs,fs->gd[grp].bg_block_bitmap), 0))) { +- for(grp=0;grpgd[grp].bg_block_bitmap),0); ++ gd = get_gd(fs, grp, &gi); ++ bk = allocate(GRP_GET_GROUP_BBM(fs, gd, &bi), 0); ++ GRP_PUT_GROUP_BBM(bi); ++ put_gd(gi); ++ if (!bk) { ++ for (grp=0; grpgd[grp].bg_free_blocks_count--)) ++ gd = get_gd(fs, grp, &gi); ++ if(!(gd->bg_free_blocks_count--)) + error_msg_and_die("group descr %d. free blocks count == 0 (corrupted fs?)",grp); +- if(!(fs->sb.s_free_blocks_count--)) ++ put_gd(gi); ++ if(!(fs->sb->s_free_blocks_count--)) + error_msg_and_die("superblock free blocks count == 0 (corrupted fs?)"); +- return fs->sb.s_blocks_per_group*grp + bk; ++ return fs->sb->s_first_data_block + fs->sb->s_blocks_per_group*grp + (bk-1); + } + + // free a block +@@ -892,12 +1439,18 @@ + free_blk(filesystem *fs, uint32 bk) + { + uint32 grp; +- +- grp = bk / fs->sb.s_blocks_per_group; +- bk %= fs->sb.s_blocks_per_group; +- deallocate(get_blk(fs,fs->gd[grp].bg_block_bitmap), bk); +- fs->gd[grp].bg_free_blocks_count++; +- fs->sb.s_free_blocks_count++; ++ blk_info *bi; ++ gd_info *gi; ++ groupdescriptor *gd; ++ ++ grp = bk / fs->sb->s_blocks_per_group; ++ bk %= fs->sb->s_blocks_per_group; ++ gd = get_gd(fs, grp, &gi); ++ deallocate(GRP_GET_GROUP_BBM(fs, gd, &bi), bk); ++ GRP_PUT_GROUP_BBM(bi); ++ gd->bg_free_blocks_count++; ++ put_gd(gi); ++ fs->sb->s_free_blocks_count++; + } + + // allocate an inode +@@ -906,6 +1459,9 @@ + { + uint32 nod,best_group=0; + uint32 grp,nbgroups,avefreei; ++ blk_info *bi; ++ gd_info *gi, *bestgi; ++ groupdescriptor *gd, *bestgd; + + nbgroups = GRP_NBGROUPS(fs); + +@@ -914,22 +1470,32 @@ + /* find the one with the most free blocks and allocate node there */ + /* Idea from find_group_dir in fs/ext2/ialloc.c in 2.4.19 kernel */ + /* We do it for all inodes. */ +- avefreei = fs->sb.s_free_inodes_count / nbgroups; ++ avefreei = fs->sb->s_free_inodes_count / nbgroups; ++ bestgd = get_gd(fs, best_group, &bestgi); + for(grp=0; grpgd[grp].bg_free_inodes_count < avefreei || +- fs->gd[grp].bg_free_inodes_count == 0) ++ gd = get_gd(fs, grp, &gi); ++ if (gd->bg_free_inodes_count < avefreei || ++ gd->bg_free_inodes_count == 0) { ++ put_gd(gi); + continue; +- if (!best_group || +- fs->gd[grp].bg_free_blocks_count > fs->gd[best_group].bg_free_blocks_count) ++ } ++ if (!best_group || gd->bg_free_blocks_count > bestgd->bg_free_blocks_count) { ++ put_gd(bestgi); + best_group = grp; ++ bestgd = gd; ++ bestgi = gi; ++ } else ++ put_gd(gi); + } +- if (!(nod = allocate(get_blk(fs,fs->gd[best_group].bg_inode_bitmap),0))) ++ if (!(nod = allocate(GRP_GET_GROUP_IBM(fs, bestgd, &bi), 0))) + error_msg_and_die("couldn't allocate an inode (no free inode)"); +- if(!(fs->gd[best_group].bg_free_inodes_count--)) ++ GRP_PUT_GROUP_IBM(bi); ++ if(!(bestgd->bg_free_inodes_count--)) + error_msg_and_die("group descr. free blocks count == 0 (corrupted fs?)"); +- if(!(fs->sb.s_free_inodes_count--)) ++ put_gd(bestgi); ++ if(!(fs->sb->s_free_inodes_count--)) + error_msg_and_die("superblock free blocks count == 0 (corrupted fs?)"); +- return fs->sb.s_inodes_per_group*best_group+nod; ++ return fs->sb->s_inodes_per_group*best_group+nod; + } + + // print a bitmap allocation +@@ -962,30 +1528,40 @@ + // used after being freed, so once you start + // freeing blocks don't stop until the end of + // the file. moreover, i_blocks isn't updated. +-// in fact, don't do that, just use extend_blk + // if hole!=0, create a hole in the file + static uint32 + walk_bw(filesystem *fs, uint32 nod, blockwalker *bw, int32 *create, uint32 hole) + { + uint32 *bkref = 0; ++ uint32 bk = 0; ++ blkmap_info *bmi1 = NULL, *bmi2 = NULL, *bmi3 = NULL; + uint32 *b; + int extend = 0, reduce = 0; ++ inode *inod; ++ nod_info *ni; ++ uint32 *iblk; ++ + if(create && (*create) < 0) + reduce = 1; +- if(bw->bnum >= get_nod(fs, nod)->i_blocks / INOBLK) ++ inod = get_nod(fs, nod, &ni); ++ if(bw->bnum >= inod->i_blocks / INOBLK) + { + if(create && (*create) > 0) + { + (*create)--; + extend = 1; + } +- else ++ else ++ { ++ put_nod(ni); + return WALK_END; ++ } + } ++ iblk = inod->i_block; + // first direct block + if(bw->bpdir == EXT2_INIT_BLOCK) + { +- bkref = &get_nod(fs, nod)->i_block[bw->bpdir = 0]; ++ bkref = &iblk[bw->bpdir = 0]; + if(extend) // allocate first block + *bkref = hole ? 0 : alloc_blk(fs,nod); + if(reduce) // free first block +@@ -994,7 +1570,7 @@ + // direct block + else if(bw->bpdir < EXT2_NDIR_BLOCKS) + { +- bkref = &get_nod(fs, nod)->i_block[++bw->bpdir]; ++ bkref = &iblk[++bw->bpdir]; + if(extend) // allocate block + *bkref = hole ? 0 : alloc_blk(fs,nod); + if(reduce) // free block +@@ -1007,10 +1583,10 @@ + bw->bpdir = EXT2_IND_BLOCK; + bw->bpind = 0; + if(extend) // allocate indirect block +- get_nod(fs, nod)->i_block[bw->bpdir] = alloc_blk(fs,nod); ++ iblk[bw->bpdir] = alloc_blk(fs,nod); + if(reduce) // free indirect block +- free_blk(fs, get_nod(fs, nod)->i_block[bw->bpdir]); +- b = (uint32*)get_blk(fs, get_nod(fs, nod)->i_block[bw->bpdir]); ++ free_blk(fs, iblk[bw->bpdir]); ++ b = get_blkmap(fs, iblk[bw->bpdir], &bmi1); + bkref = &b[bw->bpind]; + if(extend) // allocate first block + *bkref = hole ? 0 : alloc_blk(fs,nod); +@@ -1021,7 +1597,7 @@ + else if((bw->bpdir == EXT2_IND_BLOCK) && (bw->bpind < BLOCKSIZE/4 - 1)) + { + bw->bpind++; +- b = (uint32*)get_blk(fs, get_nod(fs, nod)->i_block[bw->bpdir]); ++ b = get_blkmap(fs, iblk[bw->bpdir], &bmi1); + bkref = &b[bw->bpind]; + if(extend) // allocate block + *bkref = hole ? 0 : alloc_blk(fs,nod); +@@ -1036,15 +1612,15 @@ + bw->bpind = 0; + bw->bpdind = 0; + if(extend) // allocate double indirect block +- get_nod(fs, nod)->i_block[bw->bpdir] = alloc_blk(fs,nod); ++ iblk[bw->bpdir] = alloc_blk(fs,nod); + if(reduce) // free double indirect block +- free_blk(fs, get_nod(fs, nod)->i_block[bw->bpdir]); +- b = (uint32*)get_blk(fs, get_nod(fs, nod)->i_block[bw->bpdir]); ++ free_blk(fs, iblk[bw->bpdir]); ++ b = get_blkmap(fs, iblk[bw->bpdir], &bmi1); + if(extend) // allocate first indirect block + b[bw->bpind] = alloc_blk(fs,nod); + if(reduce) // free firstindirect block + free_blk(fs, b[bw->bpind]); +- b = (uint32*)get_blk(fs, b[bw->bpind]); ++ b = get_blkmap(fs, b[bw->bpind], &bmi2); + bkref = &b[bw->bpdind]; + if(extend) // allocate first block + *bkref = hole ? 0 : alloc_blk(fs,nod); +@@ -1055,8 +1631,8 @@ + else if((bw->bpdir == EXT2_DIND_BLOCK) && (bw->bpdind < BLOCKSIZE/4 - 1)) + { + bw->bpdind++; +- b = (uint32*)get_blk(fs, get_nod(fs, nod)->i_block[bw->bpdir]); +- b = (uint32*)get_blk(fs, b[bw->bpind]); ++ b = get_blkmap(fs, iblk[bw->bpdir], &bmi1); ++ b = get_blkmap(fs, b[bw->bpind], &bmi2); + bkref = &b[bw->bpdind]; + if(extend) // allocate block + *bkref = hole ? 0 : alloc_blk(fs,nod); +@@ -1069,12 +1645,12 @@ + bw->bnum++; + bw->bpdind = 0; + bw->bpind++; +- b = (uint32*)get_blk(fs, get_nod(fs, nod)->i_block[bw->bpdir]); ++ b = get_blkmap(fs, iblk[bw->bpdir], &bmi1); + if(extend) // allocate indirect block + b[bw->bpind] = alloc_blk(fs,nod); + if(reduce) // free indirect block + free_blk(fs, b[bw->bpind]); +- b = (uint32*)get_blk(fs, b[bw->bpind]); ++ b = get_blkmap(fs, b[bw->bpind], &bmi2); + bkref = &b[bw->bpdind]; + if(extend) // allocate first block + *bkref = hole ? 0 : alloc_blk(fs,nod); +@@ -1094,20 +1670,20 @@ + bw->bpdind = 0; + bw->bptind = 0; + if(extend) // allocate triple indirect block +- get_nod(fs, nod)->i_block[bw->bpdir] = alloc_blk(fs,nod); ++ iblk[bw->bpdir] = alloc_blk(fs,nod); + if(reduce) // free triple indirect block +- free_blk(fs, get_nod(fs, nod)->i_block[bw->bpdir]); +- b = (uint32*)get_blk(fs, get_nod(fs, nod)->i_block[bw->bpdir]); ++ free_blk(fs, iblk[bw->bpdir]); ++ b = get_blkmap(fs, iblk[bw->bpdir], &bmi1); + if(extend) // allocate first double indirect block + b[bw->bpind] = alloc_blk(fs,nod); + if(reduce) // free first double indirect block + free_blk(fs, b[bw->bpind]); +- b = (uint32*)get_blk(fs, b[bw->bpind]); ++ b = get_blkmap(fs, b[bw->bpind], &bmi2); + if(extend) // allocate first indirect block + b[bw->bpdind] = alloc_blk(fs,nod); + if(reduce) // free first indirect block + free_blk(fs, b[bw->bpind]); +- b = (uint32*)get_blk(fs, b[bw->bpdind]); ++ b = get_blkmap(fs, b[bw->bpdind], &bmi3); + bkref = &b[bw->bptind]; + if(extend) // allocate first data block + *bkref = hole ? 0 : alloc_blk(fs,nod); +@@ -1121,9 +1697,9 @@ + (bw->bptind < BLOCKSIZE/4 -1) ) + { + bw->bptind++; +- b = (uint32*)get_blk(fs, get_nod(fs, nod)->i_block[bw->bpdir]); +- b = (uint32*)get_blk(fs, b[bw->bpind]); +- b = (uint32*)get_blk(fs, b[bw->bpdind]); ++ b = get_blkmap(fs, iblk[bw->bpdir], &bmi1); ++ b = get_blkmap(fs, b[bw->bpind], &bmi2); ++ b = get_blkmap(fs, b[bw->bpdind], &bmi3); + bkref = &b[bw->bptind]; + if(extend) // allocate data block + *bkref = hole ? 0 : alloc_blk(fs,nod); +@@ -1140,13 +1716,13 @@ + bw->bnum++; + bw->bptind = 0; + bw->bpdind++; +- b = (uint32*)get_blk(fs, get_nod(fs, nod)->i_block[bw->bpdir]); +- b = (uint32*)get_blk(fs, b[bw->bpind]); ++ b = get_blkmap(fs, iblk[bw->bpdir], &bmi1); ++ b = get_blkmap(fs, b[bw->bpind], &bmi2); + if(extend) // allocate single indirect block + b[bw->bpdind] = alloc_blk(fs,nod); + if(reduce) // free indirect block + free_blk(fs, b[bw->bpind]); +- b = (uint32*)get_blk(fs, b[bw->bpdind]); ++ b = get_blkmap(fs, b[bw->bpdind], &bmi3); + bkref = &b[bw->bptind]; + if(extend) // allocate first data block + *bkref = hole ? 0 : alloc_blk(fs,nod); +@@ -1163,17 +1739,17 @@ + bw->bpdind = 0; + bw->bptind = 0; + bw->bpind++; +- b = (uint32*)get_blk(fs, get_nod(fs, nod)->i_block[bw->bpdir]); ++ b = get_blkmap(fs, iblk[bw->bpdir], &bmi1); + if(extend) // allocate double indirect block + b[bw->bpind] = alloc_blk(fs,nod); + if(reduce) // free double indirect block + free_blk(fs, b[bw->bpind]); +- b = (uint32*)get_blk(fs, b[bw->bpind]); ++ b = get_blkmap(fs, b[bw->bpind], &bmi2); + if(extend) // allocate single indirect block + b[bw->bpdind] = alloc_blk(fs,nod); + if(reduce) // free indirect block + free_blk(fs, b[bw->bpind]); +- b = (uint32*)get_blk(fs, b[bw->bpdind]); ++ b = get_blkmap(fs, b[bw->bpdind], &bmi3); + bkref = &b[bw->bptind]; + if(extend) // allocate first block + *bkref = hole ? 0 : alloc_blk(fs,nod); +@@ -1184,56 +1760,105 @@ + error_msg_and_die("file too big !"); + /* End change for walking triple indirection */ + +- if(*bkref) +- { ++ bk = *bkref; ++ if (bmi3) ++ put_blkmap(bmi3); ++ if (bmi2) ++ put_blkmap(bmi2); ++ if (bmi1) ++ put_blkmap(bmi1); ++ ++ if(bk) ++ { ++ blk_info *bi; ++ gd_info *gi; ++ uint8 *block; + bw->bnum++; +- if(!reduce && !allocated(GRP_GET_BLOCK_BITMAP(fs,*bkref), GRP_BBM_OFFSET(fs,*bkref))) +- error_msg_and_die("[block %d of inode %d is unallocated !]", *bkref, nod); ++ block = GRP_GET_BLOCK_BITMAP(fs,bk,&bi,&gi); ++ if(!reduce && !allocated(block, GRP_BBM_OFFSET(fs,bk))) ++ error_msg_and_die("[block %d of inode %d is unallocated !]", bk, nod); ++ GRP_PUT_BLOCK_BITMAP(bi, gi); + } + if(extend) +- get_nod(fs, nod)->i_blocks = bw->bnum * INOBLK; +- return *bkref; ++ inod->i_blocks = bw->bnum * INOBLK; ++ put_nod(ni); ++ return bk; + } + +-// add blocks to an inode (file/dir/etc...) +-static void +-extend_blk(filesystem *fs, uint32 nod, block b, int amount) ++typedef struct + { +- int create = amount; +- blockwalker bw, lbw; +- uint32 bk; +- init_bw(&bw); +- if(amount < 0) +- { +- uint32 i; +- for(i = 0; i < get_nod(fs, nod)->i_blocks / INOBLK + amount; i++) +- walk_bw(fs, nod, &bw, 0, 0); +- while(walk_bw(fs, nod, &bw, &create, 0) != WALK_END) ++ blockwalker bw; ++ uint32 nod; ++ nod_info *ni; ++ inode *inod; ++} inode_pos; ++#define INODE_POS_TRUNCATE 0 ++#define INODE_POS_EXTEND 1 ++ ++// Call this to set up an ipos structure for future use with ++// extend_inode_blk to append blocks to the given inode. If ++// op is INODE_POS_TRUNCATE, the inode is truncated to zero size. ++// If op is INODE_POS_EXTEND, the position is moved to the end ++// of the inode's data blocks. ++// Call inode_pos_finish when done with the inode_pos structure. ++static void ++inode_pos_init(filesystem *fs, inode_pos *ipos, uint32 nod, int op, ++ blockwalker *endbw) ++{ ++ blockwalker lbw; ++ ++ init_bw(&ipos->bw); ++ ipos->nod = nod; ++ ipos->inod = get_nod(fs, nod, &ipos->ni); ++ if (op == INODE_POS_TRUNCATE) { ++ int32 create = -1; ++ while(walk_bw(fs, nod, &ipos->bw, &create, 0) != WALK_END) + /*nop*/; +- get_nod(fs, nod)->i_blocks += amount * INOBLK; ++ ipos->inod->i_blocks = 0; + } +- else ++ ++ if (endbw) ++ ipos->bw = *endbw; ++ else { ++ /* Seek to the end */ ++ init_bw(&ipos->bw); ++ lbw = ipos->bw; ++ while(walk_bw(fs, nod, &ipos->bw, 0, 0) != WALK_END) ++ lbw = ipos->bw; ++ ipos->bw = lbw; ++ } ++} ++ ++// Clean up the inode_pos structure. ++static void ++inode_pos_finish(filesystem *fs, inode_pos *ipos) ++{ ++ put_nod(ipos->ni); ++} ++ ++// add blocks to an inode (file/dir/etc...) at the given position. ++// This will only work when appending to the end of an inode. ++static void ++extend_inode_blk(filesystem *fs, inode_pos *ipos, block b, int amount) ++{ ++ uint32 bk; ++ uint32 pos; ++ ++ if (amount < 0) ++ error_msg_and_die("extend_inode_blk: Got negative amount"); ++ ++ for (pos = 0; amount; pos += BLOCKSIZE) + { +- lbw = bw; +- while((bk = walk_bw(fs, nod, &bw, 0, 0)) != WALK_END) +- lbw = bw; +- bw = lbw; +- while(create) +- { +- int i, copyb = 0; +- if(!(fs->sb.s_reserved[200] & OP_HOLES)) +- copyb = 1; +- else +- for(i = 0; i < BLOCKSIZE / 4; i++) +- if(((int32*)(b + BLOCKSIZE * (amount - create)))[i]) +- { +- copyb = 1; +- break; +- } +- if((bk = walk_bw(fs, nod, &bw, &create, !copyb)) == WALK_END) +- break; +- if(copyb) +- memcpy(get_blk(fs, bk), b + BLOCKSIZE * (amount - create - 1), BLOCKSIZE); ++ int hole = (fs->holes && is_blk_empty(b + pos)); ++ ++ bk = walk_bw(fs, ipos->nod, &ipos->bw, &amount, hole); ++ if (bk == WALK_END) ++ error_msg_and_die("extend_inode_blk: extend failed"); ++ if (!hole) { ++ blk_info *bi; ++ uint8 *block = get_blk(fs, bk, &bi); ++ memcpy(block, b + pos, BLOCKSIZE); ++ put_blk(bi); + } + } + } +@@ -1242,15 +1867,17 @@ + static void + add2dir(filesystem *fs, uint32 dnod, uint32 nod, const char* name) + { +- blockwalker bw; ++ blockwalker bw, lbw; + uint32 bk; +- uint8 *b; + directory *d; ++ dirwalker dw; + int reclen, nlen; + inode *node; + inode *pnode; ++ nod_info *dni, *ni; ++ inode_pos ipos; + +- pnode = get_nod(fs, dnod); ++ pnode = get_nod(fs, dnod, &dni); + if((pnode->i_mode & FM_IFMT) != FM_IFDIR) + error_msg_and_die("can't add '%s' to a non-directory", name); + if(!*name) +@@ -1262,52 +1889,52 @@ + if(reclen > BLOCKSIZE) + error_msg_and_die("bad name '%s' (too long)", name); + init_bw(&bw); ++ lbw = bw; + while((bk = walk_bw(fs, dnod, &bw, 0, 0)) != WALK_END) // for all blocks in dir + { +- b = get_blk(fs, bk); + // for all dir entries in block +- for(d = (directory*)b; (int8*)d + sizeof(*d) < (int8*)b + BLOCKSIZE; d = (directory*)((int8*)d + d->d_rec_len)) ++ for(d = get_dir(fs, bk, &dw); d; d = next_dir(&dw)) + { + // if empty dir entry, large enough, use it + if((!d->d_inode) && (d->d_rec_len >= reclen)) + { + d->d_inode = nod; +- node = get_nod(fs, nod); ++ node = get_nod(fs, nod, &ni); ++ dir_set_name(&dw, name, nlen); ++ put_dir(&dw); + node->i_links_count++; +- d->d_name_len = nlen; +- strncpy(d->d_name, name, nlen); +- return; ++ put_nod(ni); ++ goto out; + } + // if entry with enough room (last one?), shrink it & use it + if(d->d_rec_len >= (sizeof(directory) + rndup(d->d_name_len, 4) + reclen)) + { +- reclen = d->d_rec_len; +- d->d_rec_len = sizeof(directory) + rndup(d->d_name_len, 4); +- reclen -= d->d_rec_len; +- d = (directory*) (((int8*)d) + d->d_rec_len); +- d->d_rec_len = reclen; +- d->d_inode = nod; +- node = get_nod(fs, nod); ++ d = shrink_dir(&dw, nod, name, nlen); ++ put_dir(&dw); ++ node = get_nod(fs, nod, &ni); + node->i_links_count++; +- d->d_name_len = nlen; +- strncpy(d->d_name, name, nlen); +- return; ++ put_nod(ni); ++ goto out; + } + } ++ put_dir(&dw); ++ lbw = bw; + } + // we found no free entry in the directory, so we add a block +- if(!(b = get_workblk())) +- error_msg_and_die("get_workblk() failed."); +- d = (directory*)b; +- d->d_inode = nod; +- node = get_nod(fs, nod); ++ node = get_nod(fs, nod, &ni); ++ d = new_dir(fs, nod, name, nlen, &dw); + node->i_links_count++; +- d->d_rec_len = BLOCKSIZE; +- d->d_name_len = nlen; +- strncpy(d->d_name, name, nlen); +- extend_blk(fs, dnod, b, 1); +- get_nod(fs, dnod)->i_size += BLOCKSIZE; +- free_workblk(b); ++ put_nod(ni); ++ next_dir(&dw); // Force the data into the buffer ++ ++ inode_pos_init(fs, &ipos, dnod, INODE_POS_EXTEND, &lbw); ++ extend_inode_blk(fs, &ipos, dir_data(&dw), 1); ++ inode_pos_finish(fs, &ipos); ++ ++ put_dir(&dw); ++ pnode->i_size += BLOCKSIZE; ++out: ++ put_nod(dni); + } + + // find an entry in a directory +@@ -1321,11 +1948,13 @@ + while((bk = walk_bw(fs, nod, &bw, 0, 0)) != WALK_END) + { + directory *d; +- uint8 *b; +- b = get_blk(fs, bk); +- for(d = (directory*)b; (int8*)d + sizeof(*d) < (int8*)b + BLOCKSIZE; d = (directory*)((int8*)d + d->d_rec_len)) +- if(d->d_inode && (nlen == d->d_name_len) && !strncmp(d->d_name, name, nlen)) ++ dirwalker dw; ++ for (d = get_dir(fs, bk, &dw); d; d=next_dir(&dw)) ++ if(d->d_inode && (nlen == d->d_name_len) && !strncmp(dir_name(&dw), name, nlen)) { ++ put_dir(&dw); + return d->d_inode; ++ } ++ put_dir(&dw); + } + return 0; + } +@@ -1356,47 +1985,55 @@ + return nod; + } + ++// chmod an inode ++void ++chmod_fs(filesystem *fs, uint32 nod, uint16 mode, uint16 uid, uint16 gid) ++{ ++ inode *node; ++ nod_info *ni; ++ node = get_nod(fs, nod, &ni); ++ node->i_mode = (node->i_mode & ~FM_IMASK) | (mode & FM_IMASK); ++ node->i_uid = uid; ++ node->i_gid = gid; ++ put_nod(ni); ++} ++ + // create a simple inode + static uint32 + mknod_fs(filesystem *fs, uint32 parent_nod, const char *name, uint16 mode, uint16 uid, uint16 gid, uint8 major, uint8 minor, uint32 ctime, uint32 mtime) + { + uint32 nod; + inode *node; +- if((nod = find_dir(fs, parent_nod, name))) +- { +- node = get_nod(fs, nod); +- if((node->i_mode & FM_IFMT) != (mode & FM_IFMT)) +- error_msg_and_die("node '%s' already exists and isn't of the same type", name); +- node->i_mode = mode; +- } +- else ++ nod_info *ni; ++ gd_info *gi; ++ ++ nod = alloc_nod(fs); ++ node = get_nod(fs, nod, &ni); ++ node->i_mode = mode; ++ add2dir(fs, parent_nod, nod, name); ++ switch(mode & FM_IFMT) + { +- nod = alloc_nod(fs); +- node = get_nod(fs, nod); +- node->i_mode = mode; +- add2dir(fs, parent_nod, nod, name); +- switch(mode & FM_IFMT) +- { +- case FM_IFLNK: +- mode = FM_IFLNK | FM_IRWXU | FM_IRWXG | FM_IRWXO; +- break; +- case FM_IFBLK: +- case FM_IFCHR: +- ((uint8*)get_nod(fs, nod)->i_block)[0] = minor; +- ((uint8*)get_nod(fs, nod)->i_block)[1] = major; +- break; +- case FM_IFDIR: +- add2dir(fs, nod, nod, "."); +- add2dir(fs, nod, parent_nod, ".."); +- fs->gd[GRP_GROUP_OF_INODE(fs,nod)].bg_used_dirs_count++; +- break; +- } ++ case FM_IFLNK: ++ mode = FM_IFLNK | FM_IRWXU | FM_IRWXG | FM_IRWXO; ++ break; ++ case FM_IFBLK: ++ case FM_IFCHR: ++ ((uint8*)node->i_block)[0] = minor; ++ ((uint8*)node->i_block)[1] = major; ++ break; ++ case FM_IFDIR: ++ add2dir(fs, nod, nod, "."); ++ add2dir(fs, nod, parent_nod, ".."); ++ get_gd(fs,GRP_GROUP_OF_INODE(fs,nod),&gi)->bg_used_dirs_count++; ++ put_gd(gi); ++ break; + } + node->i_uid = uid; + node->i_gid = gid; + node->i_atime = mtime; + node->i_ctime = ctime; + node->i_mtime = mtime; ++ put_nod(ni); + return nod; + } + +@@ -1413,33 +2050,73 @@ + mklink_fs(filesystem *fs, uint32 parent_nod, const char *name, size_t size, uint8 *b, uid_t uid, gid_t gid, uint32 ctime, uint32 mtime) + { + uint32 nod = mknod_fs(fs, parent_nod, name, FM_IFLNK | FM_IRWXU | FM_IRWXG | FM_IRWXO, uid, gid, 0, 0, ctime, mtime); +- extend_blk(fs, nod, 0, - (int)get_nod(fs, nod)->i_blocks / INOBLK); +- get_nod(fs, nod)->i_size = size; +- if(size <= 4 * (EXT2_TIND_BLOCK+1)) +- { +- strncpy((char*)get_nod(fs, nod)->i_block, (char*)b, size); ++ nod_info *ni; ++ inode *node = get_nod(fs, nod, &ni); ++ inode_pos ipos; ++ ++ inode_pos_init(fs, &ipos, nod, INODE_POS_TRUNCATE, NULL); ++ node->i_size = size; ++ if(size < 4 * (EXT2_TIND_BLOCK+1)) ++ { ++ strncpy((char*)node->i_block, (char*)b, size); ++ ((char*)node->i_block)[size+1] = '\0'; ++ inode_pos_finish(fs, &ipos); ++ put_nod(ni); + return nod; + } +- extend_blk(fs, nod, b, rndup(size, BLOCKSIZE) / BLOCKSIZE); ++ extend_inode_blk(fs, &ipos, b, rndup(size, BLOCKSIZE) / BLOCKSIZE); ++ inode_pos_finish(fs, &ipos); ++ put_nod(ni); + return nod; + } + ++static void ++fs_upgrade_rev1_largefile(filesystem *fs) ++{ ++ fs->sb->s_rev_level = 1; ++ fs->sb->s_first_ino = EXT2_GOOD_OLD_FIRST_INO; ++ fs->sb->s_inode_size = EXT2_GOOD_OLD_INODE_SIZE; ++} ++ ++#define COPY_BLOCKS 16 ++#define CB_SIZE (COPY_BLOCKS * BLOCKSIZE) ++ + // make a file from a FILE* + static uint32 +-mkfile_fs(filesystem *fs, uint32 parent_nod, const char *name, uint32 mode, size_t size, FILE *f, uid_t uid, gid_t gid, uint32 ctime, uint32 mtime) ++mkfile_fs(filesystem *fs, uint32 parent_nod, const char *name, uint32 mode, FILE *f, uid_t uid, gid_t gid, uint32 ctime, uint32 mtime) + { + uint8 * b; + uint32 nod = mknod_fs(fs, parent_nod, name, mode|FM_IFREG, uid, gid, 0, 0, ctime, mtime); +- extend_blk(fs, nod, 0, - (int)get_nod(fs, nod)->i_blocks / INOBLK); +- get_nod(fs, nod)->i_size = size; +- if (size) { +- if(!(b = (uint8*)calloc(rndup(size, BLOCKSIZE), 1))) +- error_msg_and_die("not enough mem to read file '%s'", name); +- if(f) +- fread(b, size, 1, f); // FIXME: ugly. use mmap() ... +- extend_blk(fs, nod, b, rndup(size, BLOCKSIZE) / BLOCKSIZE); +- free(b); +- } ++ nod_info *ni; ++ inode *node = get_nod(fs, nod, &ni); ++ off_t size = 0; ++ size_t readbytes; ++ inode_pos ipos; ++ int fullsize; ++ ++ b = malloc(CB_SIZE); ++ if (!b) ++ error_msg_and_die("mkfile_fs: out of memory"); ++ inode_pos_init(fs, &ipos, nod, INODE_POS_TRUNCATE, NULL); ++ readbytes = fread(b, 1, CB_SIZE, f); ++ while (readbytes) { ++ fullsize = rndup(readbytes, BLOCKSIZE); ++ // Fill to end of block with zeros. ++ memset(b + readbytes, 0, fullsize - readbytes); ++ extend_inode_blk(fs, &ipos, b, fullsize / BLOCKSIZE); ++ size += readbytes; ++ readbytes = fread(b, 1, CB_SIZE, f); ++ } ++ if (size > 0x7fffffff) { ++ if (fs->sb->s_rev_level < 1) ++ fs_upgrade_rev1_largefile(fs); ++ fs->sb->s_feature_ro_compat |= EXT2_FEATURE_RO_COMPAT_LARGE_FILE; ++ } ++ node->i_dir_acl = size >> 32; ++ node->i_size = size; ++ inode_pos_finish(fs, &ipos); ++ put_nod(ni); ++ free(b); + return nod; + } + +@@ -1591,13 +2268,24 @@ + dname = malloc(len + 1); + for(i = start; i < count; i++) + { ++ uint32 oldnod; + SNPRINTF(dname, len, "%s%lu", name, i); +- mknod_fs(fs, nod, dname, mode, uid, gid, major, minor + (i * increment - start), ctime, mtime); ++ oldnod = find_dir(fs, nod, dname); ++ if(oldnod) ++ chmod_fs(fs, oldnod, mode, uid, gid); ++ else ++ mknod_fs(fs, nod, dname, mode, uid, gid, major, minor + (i * increment - start), ctime, mtime); + } + free(dname); + } + else +- mknod_fs(fs, nod, name, mode, uid, gid, major, minor, ctime, mtime); ++ { ++ uint32 oldnod = find_dir(fs, nod, name); ++ if(oldnod) ++ chmod_fs(fs, oldnod, mode, uid, gid); ++ else ++ mknod_fs(fs, nod, name, mode, uid, gid, major, minor, ctime, mtime); ++ } + } + } + if (line) +@@ -1643,6 +2331,10 @@ + switch(st.st_mode & S_IFMT) + { + case S_IFLNK: ++ if((st.st_mode & S_IFMT) == S_IFREG || st.st_size >= 4 * (EXT2_TIND_BLOCK+1)) ++ stats->nblocks += (st.st_size + BLOCKSIZE - 1) / BLOCKSIZE; ++ stats->ninodes++; ++ break; + case S_IFREG: + if((st.st_mode & S_IFMT) == S_IFREG || st.st_size > 4 * (EXT2_TIND_BLOCK+1)) + stats->nblocks += (st.st_size + BLOCKSIZE - 1) / BLOCKSIZE; +@@ -1657,19 +2349,33 @@ + if(chdir(dent->d_name) < 0) + perror_msg_and_die(dent->d_name); + add2fs_from_dir(fs, this_nod, squash_uids, squash_perms, fs_timestamp, stats); +- chdir(".."); ++ if (chdir("..") == -1) ++ perror_msg_and_die(".."); ++ + break; + default: + break; + } + else + { ++ if((nod = find_dir(fs, this_nod, name))) ++ { ++ error_msg("ignoring duplicate entry %s", name); ++ if(S_ISDIR(st.st_mode)) { ++ if(chdir(dent->d_name) < 0) ++ perror_msg_and_die(name); ++ add2fs_from_dir(fs, nod, squash_uids, squash_perms, fs_timestamp, stats); ++ if (chdir("..") == -1) ++ perror_msg_and_die(".."); ++ } ++ continue; ++ } + save_nod = 0; + /* Check for hardlinks */ + if (!S_ISDIR(st.st_mode) && !S_ISLNK(st.st_mode) && st.st_nlink > 1) { +- int32 hdlink = is_hardlink(st.st_ino); ++ int32 hdlink = is_hardlink(fs, st.st_ino); + if (hdlink >= 0) { +- add2dir(fs, this_nod, hdlinks.hdl[hdlink].dst_nod, name); ++ add2dir(fs, this_nod, fs->hdlinks.hdl[hdlink].dst_nod, name); + continue; + } else { + save_nod = 1; +@@ -1697,8 +2403,12 @@ + free(lnk); + break; + case S_IFREG: +- fh = xfopen(dent->d_name, "rb"); +- nod = mkfile_fs(fs, this_nod, name, mode, st.st_size, fh, uid, gid, ctime, mtime); ++ fh = fopen(dent->d_name, "rb"); ++ if (!fh) { ++ error_msg("Unable to open file %s", dent->d_name); ++ break; ++ } ++ nod = mkfile_fs(fs, this_nod, name, mode, fh, uid, gid, ctime, mtime); + fclose(fh); + break; + case S_IFDIR: +@@ -1706,199 +2416,128 @@ + if(chdir(dent->d_name) < 0) + perror_msg_and_die(name); + add2fs_from_dir(fs, nod, squash_uids, squash_perms, fs_timestamp, stats); +- chdir(".."); ++ if (chdir("..") == -1) ++ perror_msg_and_die(".."); + break; + default: + error_msg("ignoring entry %s", name); + } + if (save_nod) { +- if (hdlinks.count == hdlink_cnt) { +- if ((hdlinks.hdl = +- realloc (hdlinks.hdl, (hdlink_cnt + HDLINK_CNT) * ++ if (fs->hdlinks.count == fs->hdlink_cnt) { ++ if ((fs->hdlinks.hdl = ++ realloc (fs->hdlinks.hdl, (fs->hdlink_cnt + HDLINK_CNT) * + sizeof (struct hdlink_s))) == NULL) { + error_msg_and_die("Not enough memory"); + } +- hdlink_cnt += HDLINK_CNT; ++ fs->hdlink_cnt += HDLINK_CNT; + } +- hdlinks.hdl[hdlinks.count].src_inode = st.st_ino; +- hdlinks.hdl[hdlinks.count].dst_nod = nod; +- hdlinks.count++; ++ fs->hdlinks.hdl[fs->hdlinks.count].src_inode = st.st_ino; ++ fs->hdlinks.hdl[fs->hdlinks.count].dst_nod = nod; ++ fs->hdlinks.count++; + } + } + } + closedir(dh); + } + +-// endianness swap of x-indirect blocks ++// Copy size blocks from src to dst, putting holes in the output ++// file (if possible) if the input block is all zeros. ++// Copy size blocks from src to dst, putting holes in the output ++// file (if possible) if the input block is all zeros. + static void +-swap_goodblocks(filesystem *fs, inode *nod) ++copy_file(filesystem *fs, FILE *dst, FILE *src, size_t size) + { +- uint32 i,j; +- int done=0; +- uint32 *b,*b2; ++ uint8 *b; + +- uint32 nblk = nod->i_blocks / INOBLK; +- if((nod->i_size && !nblk) || ((nod->i_mode & FM_IFBLK) == FM_IFBLK) || ((nod->i_mode & FM_IFCHR) == FM_IFCHR)) +- for(i = 0; i <= EXT2_TIND_BLOCK; i++) +- nod->i_block[i] = swab32(nod->i_block[i]); +- if(nblk <= EXT2_IND_BLOCK) +- return; +- swap_block(get_blk(fs, nod->i_block[EXT2_IND_BLOCK])); +- if(nblk <= EXT2_DIND_BLOCK + BLOCKSIZE/4) +- return; +- /* Currently this will fail b'cos the number of blocks as stored +- in i_blocks also includes the indirection blocks (see +- walk_bw). But this function assumes that i_blocks only +- stores the count of data blocks ( Actually according to +- "Understanding the Linux Kernel" (Table 17-3 p502 1st Ed) +- i_blocks IS supposed to store the count of data blocks). so +- with a file of size 268K nblk would be 269.The above check +- will be false even though double indirection hasn't been +- started.This is benign as 0 means block 0 which has been +- zeroed out and therefore points back to itself from any offset +- */ +- // FIXME: I have fixed that, but I have the feeling the rest of +- // ths function needs to be fixed for the same reasons - Xav +- assert(nod->i_block[EXT2_DIND_BLOCK] != 0); +- for(i = 0; i < BLOCKSIZE/4; i++) +- if(nblk > EXT2_IND_BLOCK + BLOCKSIZE/4 + (BLOCKSIZE/4)*i ) +- swap_block(get_blk(fs, ((uint32*)get_blk(fs, nod->i_block[EXT2_DIND_BLOCK]))[i])); +- swap_block(get_blk(fs, nod->i_block[EXT2_DIND_BLOCK])); +- if(nblk <= EXT2_IND_BLOCK + BLOCKSIZE/4 + BLOCKSIZE/4 * BLOCKSIZE/4) +- return; +- /* Adding support for triple indirection */ +- b = (uint32*)get_blk(fs,nod->i_block[EXT2_TIND_BLOCK]); +- for(i=0;i < BLOCKSIZE/4 && !done ; i++) { +- b2 = (uint32*)get_blk(fs,b[i]); +- for(j=0; j ( EXT2_IND_BLOCK + BLOCKSIZE/4 + +- (BLOCKSIZE/4)*(BLOCKSIZE/4) + +- i*(BLOCKSIZE/4)*(BLOCKSIZE/4) + +- j*(BLOCKSIZE/4)) ) +- swap_block(get_blk(fs,b2[j])); +- else { +- done = 1; +- break; +- } ++ b = malloc(BLOCKSIZE); ++ if (!b) ++ error_msg_and_die("copy_file: out of memory"); ++ if (fseek(src, 0, SEEK_SET)) ++ perror_msg_and_die("fseek"); ++ if (ftruncate(fileno(dst), 0)) ++ perror_msg_and_die("copy_file: ftruncate"); ++ while (size > 0) { ++ if (fread(b, BLOCKSIZE, 1, src) != 1) ++ perror_msg_and_die("copy failed on read"); ++ if ((dst != stdout) && fs->holes && is_blk_empty(b)) { ++ /* Empty block, just skip it */ ++ if (fseek(dst, BLOCKSIZE, SEEK_CUR)) ++ perror_msg_and_die("fseek"); ++ } else { ++ if (fwrite(b, BLOCKSIZE, 1, dst) != 1) ++ perror_msg_and_die("copy failed on write"); + } +- swap_block((uint8 *)b2); ++ size--; + } +- swap_block((uint8 *)b); +- return; ++ free(b); + } + +-static void +-swap_badblocks(filesystem *fs, inode *nod) ++// Allocate a new filesystem structure, allocate internal memory, ++// and initialize the contents. ++static filesystem * ++alloc_fs(int swapit, char *fname, uint32 nbblocks, FILE *srcfile) + { +- uint32 i,j; +- int done=0; +- uint32 *b,*b2; ++ filesystem *fs; ++ struct stat srcstat, dststat; + +- uint32 nblk = nod->i_blocks / INOBLK; +- if((nod->i_size && !nblk) || ((nod->i_mode & FM_IFBLK) == FM_IFBLK) || ((nod->i_mode & FM_IFCHR) == FM_IFCHR)) +- for(i = 0; i <= EXT2_TIND_BLOCK; i++) +- nod->i_block[i] = swab32(nod->i_block[i]); +- if(nblk <= EXT2_IND_BLOCK) +- return; +- swap_block(get_blk(fs, nod->i_block[EXT2_IND_BLOCK])); +- if(nblk <= EXT2_DIND_BLOCK + BLOCKSIZE/4) +- return; +- /* See comment in swap_goodblocks */ +- assert(nod->i_block[EXT2_DIND_BLOCK] != 0); +- swap_block(get_blk(fs, nod->i_block[EXT2_DIND_BLOCK])); +- for(i = 0; i < BLOCKSIZE/4; i++) +- if(nblk > EXT2_IND_BLOCK + BLOCKSIZE/4 + (BLOCKSIZE/4)*i ) +- swap_block(get_blk(fs, ((uint32*)get_blk(fs, nod->i_block[EXT2_DIND_BLOCK]))[i])); +- if(nblk <= EXT2_IND_BLOCK + BLOCKSIZE/4 + BLOCKSIZE/4 * BLOCKSIZE/4) +- return; +- /* Adding support for triple indirection */ +- b = (uint32*)get_blk(fs,nod->i_block[EXT2_TIND_BLOCK]); +- swap_block((uint8 *)b); +- for(i=0;i < BLOCKSIZE/4 && !done ; i++) { +- b2 = (uint32*)get_blk(fs,b[i]); +- swap_block((uint8 *)b2); +- for(j=0; j ( EXT2_IND_BLOCK + BLOCKSIZE/4 + +- (BLOCKSIZE/4)*(BLOCKSIZE/4) + +- i*(BLOCKSIZE/4)*(BLOCKSIZE/4) + +- j*(BLOCKSIZE/4)) ) +- swap_block(get_blk(fs,b2[j])); +- else { +- done = 1; +- break; +- } +- } +- } +- return; +-} ++ fs = malloc(sizeof(*fs)); ++ if (!fs) ++ error_msg_and_die("not enough memory for filesystem"); ++ memset(fs, 0, sizeof(*fs)); ++ fs->swapit = swapit; ++ cache_init(&fs->blks, MAX_FREE_CACHE_BLOCKS, blk_elem_val, blk_freed); ++ cache_init(&fs->gds, MAX_FREE_CACHE_GDS, gd_elem_val, gd_freed); ++ cache_init(&fs->blkmaps, MAX_FREE_CACHE_BLOCKMAPS, ++ blkmap_elem_val, blkmap_freed); ++ cache_init(&fs->inodes, MAX_FREE_CACHE_INODES, ++ inode_elem_val, inode_freed); ++ fs->hdlink_cnt = HDLINK_CNT; ++ fs->hdlinks.hdl = calloc(sizeof(struct hdlink_s), fs->hdlink_cnt); ++ if (!fs->hdlinks.hdl) ++ error_msg_and_die("Not enough memory"); ++ fs->hdlinks.count = 0 ; + +-// endianness swap of the whole filesystem +-static void +-swap_goodfs(filesystem *fs) +-{ +- uint32 i; +- for(i = 1; i < fs->sb.s_inodes_count; i++) +- { +- inode *nod = get_nod(fs, i); +- if(nod->i_mode & FM_IFDIR) +- { +- blockwalker bw; +- uint32 bk; +- init_bw(&bw); +- while((bk = walk_bw(fs, i, &bw, 0, 0)) != WALK_END) +- { +- directory *d; +- uint8 *b; +- b = get_blk(fs, bk); +- for(d = (directory*)b; (int8*)d + sizeof(*d) < (int8*)b + BLOCKSIZE; d = (directory*)((int8*)d + swab16(d->d_rec_len))) +- swap_dir(d); +- } +- } +- swap_goodblocks(fs, nod); +- swap_nod(nod); +- } +- for(i=0;igd[i])); +- swap_sb(&fs->sb); ++ if (strcmp(fname, "-") == 0) ++ fs->f = tmpfile(); ++ else if (srcfile) { ++ if (fstat(fileno(srcfile), &srcstat)) ++ perror_msg_and_die("fstat srcfile"); ++ if (stat(fname, &dststat) == 0 ++ && srcstat.st_ino == dststat.st_ino ++ && srcstat.st_dev == dststat.st_dev) ++ { ++ // source and destination are the same file, don't ++ // truncate or copy, just use the file. ++ fs->f = fopen(fname, "r+b"); ++ } else { ++ fs->f = fopen(fname, "w+b"); ++ if (fs->f) ++ copy_file(fs, fs->f, srcfile, nbblocks); ++ } ++ } else ++ fs->f = fopen(fname, "w+b"); ++ if (!fs->f) ++ perror_msg_and_die("opening %s", fname); ++ return fs; + } + ++/* Make sure the output file is the right size */ + static void +-swap_badfs(filesystem *fs) ++set_file_size(filesystem *fs) + { +- uint32 i; +- swap_sb(&fs->sb); +- for(i=0;igd[i])); +- for(i = 1; i < fs->sb.s_inodes_count; i++) +- { +- inode *nod = get_nod(fs, i); +- swap_nod(nod); +- swap_badblocks(fs, nod); +- if(nod->i_mode & FM_IFDIR) +- { +- blockwalker bw; +- uint32 bk; +- init_bw(&bw); +- while((bk = walk_bw(fs, i, &bw, 0, 0)) != WALK_END) +- { +- directory *d; +- uint8 *b; +- b = get_blk(fs, bk); +- for(d = (directory*)b; (int8*)d + sizeof(*d) < (int8*)b + BLOCKSIZE; d = (directory*)((int8*)d + d->d_rec_len)) +- swap_dir(d); +- } +- } +- } ++ if (ftruncate(fileno(fs->f), ++ ((off_t) fs->sb->s_blocks_count) * BLOCKSIZE)) ++ perror_msg_and_die("set_file_size: ftruncate"); + } + + // initialize an empty filesystem + static filesystem * +-init_fs(int nbblocks, int nbinodes, int nbresrvd, int holes, uint32 fs_timestamp) ++init_fs(int nbblocks, int nbinodes, int nbresrvd, int holes, ++ uint32 fs_timestamp, uint32 creator_os, int swapit, char *fname) + { + uint32 i; + filesystem *fs; +- directory *d; +- uint8 * b; ++ dirwalker dw; + uint32 nod, first_block; + uint32 nbgroups,nbinodes_per_group,overhead_per_group,free_blocks, + free_blocks_per_group,nbblocks_per_group,min_nbgroups; +@@ -1906,6 +2545,11 @@ + uint32 j; + uint8 *bbm,*ibm; + inode *itab0; ++ blk_info *bi; ++ nod_info *ni; ++ groupdescriptor *gd; ++ gd_info *gi; ++ inode_pos ipos; + + if(nbresrvd < 0) + error_msg_and_die("reserved blocks value is invalid. Note: options have changed, see --help or the man page."); +@@ -1919,10 +2563,14 @@ + */ + min_nbgroups = (nbinodes + INODES_PER_GROUP - 1) / INODES_PER_GROUP; + ++ /* On filesystems with 1k block size, the bootloader area uses a full ++ * block. For 2048 and up, the superblock can be fitted into block 0. ++ */ ++ first_block = (BLOCKSIZE == 1024); ++ + /* nbblocks is the total number of blocks in the filesystem. + * a block group can have no more than 8192 blocks. + */ +- first_block = (BLOCKSIZE == 1024); + nbgroups = (nbblocks - first_block + BLOCKS_PER_GROUP - 1) / BLOCKS_PER_GROUP; + if(nbgroups < min_nbgroups) nbgroups = min_nbgroups; + nbblocks_per_group = rndup((nbblocks - first_block + nbgroups - 1)/nbgroups, 8); +@@ -1934,51 +2582,59 @@ + gdsz = rndup(nbgroups*sizeof(groupdescriptor),BLOCKSIZE)/BLOCKSIZE; + itblsz = nbinodes_per_group * sizeof(inode)/BLOCKSIZE; + overhead_per_group = 3 /*sb,bbm,ibm*/ + gdsz + itblsz; +- if((uint32)nbblocks - 1 < overhead_per_group * nbgroups) +- error_msg_and_die("too much overhead, try fewer inodes or more blocks. Note: options have changed, see --help or the man page."); +- free_blocks = nbblocks - overhead_per_group*nbgroups - 1 /*boot block*/; ++ free_blocks = nbblocks - overhead_per_group*nbgroups - first_block; + free_blocks_per_group = nbblocks_per_group - overhead_per_group; ++ if(free_blocks < 0) ++ error_msg_and_die("too much overhead, try fewer inodes or more blocks. Note: options have changed, see --help or the man page."); + +- if(!(fs = (filesystem*)calloc(nbblocks, BLOCKSIZE))) +- error_msg_and_die("not enough memory for filesystem"); ++ fs = alloc_fs(swapit, fname, nbblocks, NULL); ++ fs->sb = calloc(1, SUPERBLOCK_SIZE); ++ if (!fs->sb) ++ error_msg_and_die("error allocating header memory"); + + // create the superblock for an empty filesystem +- fs->sb.s_inodes_count = nbinodes_per_group * nbgroups; +- fs->sb.s_blocks_count = nbblocks; +- fs->sb.s_r_blocks_count = nbresrvd; +- fs->sb.s_free_blocks_count = free_blocks; +- fs->sb.s_free_inodes_count = fs->sb.s_inodes_count - EXT2_FIRST_INO + 1; +- fs->sb.s_first_data_block = first_block; +- fs->sb.s_log_block_size = BLOCKSIZE >> 11; +- fs->sb.s_log_frag_size = BLOCKSIZE >> 11; +- fs->sb.s_blocks_per_group = nbblocks_per_group; +- fs->sb.s_frags_per_group = nbblocks_per_group; +- fs->sb.s_inodes_per_group = nbinodes_per_group; +- fs->sb.s_wtime = fs_timestamp; +- fs->sb.s_magic = EXT2_MAGIC_NUMBER; +- fs->sb.s_lastcheck = fs_timestamp; ++ fs->sb->s_inodes_count = nbinodes_per_group * nbgroups; ++ fs->sb->s_blocks_count = nbblocks; ++ fs->sb->s_r_blocks_count = nbresrvd; ++ fs->sb->s_free_blocks_count = free_blocks; ++ fs->sb->s_free_inodes_count = fs->sb->s_inodes_count - EXT2_FIRST_INO + 1; ++ fs->sb->s_first_data_block = first_block; ++ fs->sb->s_log_block_size = BLOCKSIZE >> 11; ++ fs->sb->s_log_frag_size = BLOCKSIZE >> 11; ++ fs->sb->s_blocks_per_group = nbblocks_per_group; ++ fs->sb->s_frags_per_group = nbblocks_per_group; ++ fs->sb->s_inodes_per_group = nbinodes_per_group; ++ fs->sb->s_wtime = fs_timestamp; ++ fs->sb->s_magic = EXT2_MAGIC_NUMBER; ++ fs->sb->s_lastcheck = fs_timestamp; ++ fs->sb->s_creator_os = creator_os; ++ ++ set_file_size(fs); + + // set up groupdescriptors +- for(i=0, bbmpos=gdsz+2, ibmpos=bbmpos+1, itblpos=ibmpos+1; ++ for(i=0, bbmpos=first_block+1+gdsz, ibmpos=bbmpos+1, itblpos=ibmpos+1; + i free_blocks_per_group) { +- fs->gd[i].bg_free_blocks_count = free_blocks_per_group; ++ gd->bg_free_blocks_count = free_blocks_per_group; + free_blocks -= free_blocks_per_group; + } else { +- fs->gd[i].bg_free_blocks_count = free_blocks; ++ gd->bg_free_blocks_count = free_blocks; + free_blocks = 0; // this is the last block group + } + if(i) +- fs->gd[i].bg_free_inodes_count = nbinodes_per_group; ++ gd->bg_free_inodes_count = nbinodes_per_group; + else +- fs->gd[i].bg_free_inodes_count = nbinodes_per_group - ++ gd->bg_free_inodes_count = nbinodes_per_group - + EXT2_FIRST_INO + 2; +- fs->gd[i].bg_used_dirs_count = 0; +- fs->gd[i].bg_block_bitmap = bbmpos; +- fs->gd[i].bg_inode_bitmap = ibmpos; +- fs->gd[i].bg_inode_table = itblpos; ++ gd->bg_used_dirs_count = 0; ++ gd->bg_block_bitmap = bbmpos; ++ gd->bg_inode_bitmap = ibmpos; ++ gd->bg_inode_table = itblpos; ++ put_gd(gi); + } + + /* Mark non-filesystem blocks and inodes as allocated */ +@@ -1984,110 +2640,143 @@ + /* Mark non-filesystem blocks and inodes as allocated */ + /* Mark system blocks and inodes as allocated */ + for(i = 0; igd[i].bg_block_bitmap); ++ gd = get_gd(fs, i, &gi); ++ bbm = GRP_GET_GROUP_BBM(fs, gd, &bi); + //non-filesystem blocks +- for(j = fs->gd[i].bg_free_blocks_count ++ for(j = gd->bg_free_blocks_count + + overhead_per_group + 1; j <= BLOCKSIZE * 8; j++) + allocate(bbm, j); + //system blocks + for(j = 1; j <= overhead_per_group; j++) + allocate(bbm, j); +- ++ GRP_PUT_GROUP_BBM(bi); ++ + /* Inode bitmap */ +- ibm = get_blk(fs,fs->gd[i].bg_inode_bitmap); ++ ibm = GRP_GET_GROUP_IBM(fs, gd, &bi); + //non-filesystem inodes +- for(j = fs->sb.s_inodes_per_group+1; j <= BLOCKSIZE * 8; j++) ++ for(j = fs->sb->s_inodes_per_group+1; j <= BLOCKSIZE * 8; j++) + allocate(ibm, j); + + //system inodes + if(i == 0) + for(j = 1; j < EXT2_FIRST_INO; j++) + allocate(ibm, j); ++ GRP_PUT_GROUP_IBM(bi); ++ put_gd(gi); + } + + // make root inode and directory + /* We have groups now. Add the root filesystem in group 0 */ + /* Also increment the directory count for group 0 */ +- fs->gd[0].bg_free_inodes_count--; +- fs->gd[0].bg_used_dirs_count = 1; +- itab0 = (inode *)get_blk(fs,fs->gd[0].bg_inode_table); +- itab0[EXT2_ROOT_INO-1].i_mode = FM_IFDIR | FM_IRWXU | FM_IRGRP | FM_IROTH | FM_IXGRP | FM_IXOTH; +- itab0[EXT2_ROOT_INO-1].i_ctime = fs_timestamp; +- itab0[EXT2_ROOT_INO-1].i_mtime = fs_timestamp; +- itab0[EXT2_ROOT_INO-1].i_atime = fs_timestamp; +- itab0[EXT2_ROOT_INO-1].i_size = BLOCKSIZE; +- itab0[EXT2_ROOT_INO-1].i_links_count = 2; +- +- if(!(b = get_workblk())) +- error_msg_and_die("get_workblk() failed."); +- d = (directory*)b; +- d->d_inode = EXT2_ROOT_INO; +- d->d_rec_len = sizeof(directory)+4; +- d->d_name_len = 1; +- strcpy(d->d_name, "."); +- d = (directory*)(b + d->d_rec_len); +- d->d_inode = EXT2_ROOT_INO; +- d->d_rec_len = BLOCKSIZE - (sizeof(directory)+4); +- d->d_name_len = 2; +- strcpy(d->d_name, ".."); +- extend_blk(fs, EXT2_ROOT_INO, b, 1); ++ gd = get_gd(fs, 0, &gi); ++ gd->bg_free_inodes_count--; ++ gd->bg_used_dirs_count = 1; ++ put_gd(gi); ++ itab0 = get_nod(fs, EXT2_ROOT_INO, &ni); ++ itab0->i_mode = FM_IFDIR | FM_IRWXU | FM_IRGRP | FM_IROTH | FM_IXGRP | FM_IXOTH; ++ itab0->i_ctime = fs_timestamp; ++ itab0->i_mtime = fs_timestamp; ++ itab0->i_atime = fs_timestamp; ++ itab0->i_size = BLOCKSIZE; ++ itab0->i_links_count = 2; ++ put_nod(ni); ++ ++ new_dir(fs, EXT2_ROOT_INO, ".", 1, &dw); ++ shrink_dir(&dw, EXT2_ROOT_INO, "..", 2); ++ next_dir(&dw); // Force the data into the buffer ++ inode_pos_init(fs, &ipos, EXT2_ROOT_INO, INODE_POS_EXTEND, NULL); ++ extend_inode_blk(fs, &ipos, dir_data(&dw), 1); ++ inode_pos_finish(fs, &ipos); ++ put_dir(&dw); + +- // make lost+found directory and reserve blocks +- if(fs->sb.s_r_blocks_count) ++ // make lost+found directory ++ if(fs->sb->s_r_blocks_count) + { +- nod = mkdir_fs(fs, EXT2_ROOT_INO, "lost+found", FM_IRWXU, 0, 0, fs_timestamp, fs_timestamp); ++ inode *node; ++ uint8 *b; ++ ++ nod = mkdir_fs(fs, EXT2_ROOT_INO, "lost+found", FM_IRWXU, ++ 0, 0, fs_timestamp, fs_timestamp); ++ b = get_workblk(); + memset(b, 0, BLOCKSIZE); + ((directory*)b)->d_rec_len = BLOCKSIZE; +- /* We run into problems with e2fsck if directory lost+found grows +- * bigger than this. Need to find out why this happens - sundar +- */ +- if (fs->sb.s_r_blocks_count > fs->sb.s_blocks_count * MAX_RESERVED_BLOCKS ) +- fs->sb.s_r_blocks_count = fs->sb.s_blocks_count * MAX_RESERVED_BLOCKS; +- for(i = 1; i < fs->sb.s_r_blocks_count; i++) +- extend_blk(fs, nod, b, 1); +- get_nod(fs, nod)->i_size = fs->sb.s_r_blocks_count * BLOCKSIZE; ++ inode_pos_init(fs, &ipos, nod, INODE_POS_EXTEND, NULL); ++ // It is always 16 blocks to start out with ++ for(i = 1; i < 16; i++) ++ extend_inode_blk(fs, &ipos, b, 1); ++ inode_pos_finish(fs, &ipos); ++ free_workblk(b); ++ node = get_nod(fs, nod, &ni); ++ node->i_size = 16 * BLOCKSIZE; ++ put_nod(ni); + } +- free_workblk(b); + + // administrative info +- fs->sb.s_state = 1; +- fs->sb.s_max_mnt_count = 20; ++ fs->sb->s_state = 1; ++ fs->sb->s_max_mnt_count = 20; + + // options for me +- if(holes) +- fs->sb.s_reserved[200] |= OP_HOLES; ++ fs->holes = holes; + + return fs; + } + + // loads a filesystem from disk + static filesystem * +-load_fs(FILE * fh, int swapit) ++load_fs(FILE *fh, int swapit, char *fname) + { +- size_t fssize; ++ off_t fssize; + filesystem *fs; +- if((fseek(fh, 0, SEEK_END) < 0) || ((ssize_t)(fssize = ftell(fh)) == -1)) ++ ++ if((fseek(fh, 0, SEEK_END) < 0) || ((fssize = ftello(fh)) == -1)) + perror_msg_and_die("input filesystem image"); + rewind(fh); +- fssize = (fssize + BLOCKSIZE - 1) / BLOCKSIZE; ++ if ((fssize % BLOCKSIZE) != 0) ++ error_msg_and_die("Input file not a multiple of block size"); ++ fssize /= BLOCKSIZE; + if(fssize < 16) // totally arbitrary + error_msg_and_die("too small filesystem"); +- if(!(fs = (filesystem*)calloc(fssize, BLOCKSIZE))) +- error_msg_and_die("not enough memory for filesystem"); +- if(fread(fs, BLOCKSIZE, fssize, fh) != fssize) +- perror_msg_and_die("input filesystem image"); ++ fs = alloc_fs(swapit, fname, fssize, fh); ++ ++ /* Read and check the superblock, then read the superblock ++ * and all the group descriptors */ ++ fs->sb = malloc(SUPERBLOCK_SIZE); ++ if (!fs->sb) ++ error_msg_and_die("error allocating header memory"); ++ if (fseek(fs->f, SUPERBLOCK_OFFSET, SEEK_SET)) ++ perror_msg_and_die("fseek"); ++ if (fread(fs->sb, SUPERBLOCK_SIZE, 1, fs->f) != 1) ++ perror_msg_and_die("fread filesystem image superblock"); + if(swapit) +- swap_badfs(fs); +- if(fs->sb.s_rev_level || (fs->sb.s_magic != EXT2_MAGIC_NUMBER)) ++ swap_sb(fs->sb); ++ ++ if((fs->sb->s_rev_level > 1) || (fs->sb->s_magic != EXT2_MAGIC_NUMBER)) + error_msg_and_die("not a suitable ext2 filesystem"); ++ if (fs->sb->s_rev_level > 0) { ++ if (fs->sb->s_first_ino != EXT2_GOOD_OLD_FIRST_INO) ++ error_msg_and_die("First inode incompatible"); ++ if (fs->sb->s_inode_size != EXT2_GOOD_OLD_INODE_SIZE) ++ error_msg_and_die("inode size incompatible"); ++ if (fs->sb->s_feature_compat) ++ error_msg_and_die("Unsupported compat features"); ++ if (fs->sb->s_feature_incompat) ++ error_msg_and_die("Unsupported incompat features"); ++ if (fs->sb->s_feature_ro_compat ++ & ~EXT2_FEATURE_RO_COMPAT_LARGE_FILE) ++ error_msg_and_die("Unsupported ro compat features"); ++ } ++ ++ set_file_size(fs); + return fs; + } + + static void + free_fs(filesystem *fs) + { ++ free(fs->hdlinks.hdl); ++ fclose(fs->f); ++ free(fs->sb); + free(fs); + } + +@@ -2123,16 +2812,23 @@ + { + blockwalker bw; + uint32 bk; +- int32 fsize = get_nod(fs, nod)->i_size; ++ nod_info *ni; ++ inode *node = get_nod(fs, nod, &ni); ++ int32 fsize = node->i_size; ++ blk_info *bi; ++ + init_bw(&bw); + while((bk = walk_bw(fs, nod, &bw, 0, 0)) != WALK_END) + { + if(fsize <= 0) + error_msg_and_die("wrong size while saving inode %d", nod); +- if(fwrite(get_blk(fs, bk), (fsize > BLOCKSIZE) ? BLOCKSIZE : fsize, 1, f) != 1) ++ if(fwrite(get_blk(fs, bk, &bi), ++ (fsize > BLOCKSIZE) ? BLOCKSIZE : fsize, 1, f) != 1) + error_msg_and_die("error while saving inode %d", nod); ++ put_blk(bi); + fsize -= BLOCKSIZE; + } ++ put_nod(ni); + } + + +@@ -2141,8 +2837,11 @@ + print_dev(filesystem *fs, uint32 nod) + { + int minor, major; +- minor = ((uint8*)get_nod(fs, nod)->i_block)[0]; +- major = ((uint8*)get_nod(fs, nod)->i_block)[1]; ++ nod_info *ni; ++ inode *node = get_nod(fs, nod, &ni); ++ minor = ((uint8*)node->i_block)[0]; ++ major = ((uint8*)node->i_block)[1]; ++ put_nod(ni); + printf("major: %d, minor: %d\n", major, minor); + } + +@@ -2157,17 +2856,15 @@ + while((bk = walk_bw(fs, nod, &bw, 0, 0)) != WALK_END) + { + directory *d; +- uint8 *b; +- b = get_blk(fs, bk); +- for(d = (directory*)b; (int8*)d + sizeof(*d) < (int8*)b + BLOCKSIZE; d = (directory*)((int8*)d + d->d_rec_len)) ++ dirwalker dw; ++ for (d = get_dir(fs, bk, &dw); d; d = next_dir(&dw)) + if(d->d_inode) + { +- int i; + printf("entry '"); +- for(i = 0; i < d->d_name_len; i++) +- putchar(d->d_name[i]); ++ fwrite(dir_name(&dw), 1, d->d_name_len, stdout); + printf("' (inode %d): rec_len: %d (name_len: %d)\n", d->d_inode, d->d_rec_len, d->d_name_len); + } ++ put_dir(&dw); + } + } + +@@ -2175,14 +2872,18 @@ + static void + print_link(filesystem *fs, uint32 nod) + { +- if(!get_nod(fs, nod)->i_blocks) +- printf("links to '%s'\n", (char*)get_nod(fs, nod)->i_block); ++ nod_info *ni; ++ inode *node = get_nod(fs, nod, &ni); ++ ++ if(!node->i_blocks) ++ printf("links to '%s'\n", (char*)node->i_block); + else + { + printf("links to '"); + write_blocks(fs, nod, stdout); + printf("'\n"); + } ++ put_nod(ni); + } + + // make a ls-like printout of permissions +@@ -2251,8 +2952,13 @@ + { + char *s; + char perms[11]; +- if(!get_nod(fs, nod)->i_mode) +- return; ++ nod_info *ni; ++ inode *node = get_nod(fs, nod, &ni); ++ blk_info *bi; ++ gd_info *gi; ++ ++ if(!node->i_mode) ++ goto out; + switch(nod) + { + case EXT2_BAD_INO: +@@ -2274,15 +2980,18 @@ + default: + s = (nod >= EXT2_FIRST_INO) ? "normal" : "unknown reserved"; + } +- printf("inode %d (%s, %d links): ", nod, s, get_nod(fs, nod)->i_links_count); +- if(!allocated(GRP_GET_INODE_BITMAP(fs,nod), GRP_IBM_OFFSET(fs,nod))) ++ printf("inode %d (%s, %d links): ", nod, s, node->i_links_count); ++ if(!allocated(GRP_GET_INODE_BITMAP(fs,nod,&bi,&gi), GRP_IBM_OFFSET(fs,nod))) + { ++ GRP_PUT_INODE_BITMAP(bi,gi); + printf("unallocated\n"); +- return; ++ goto out; + } +- make_perms(get_nod(fs, nod)->i_mode, perms); +- printf("%s, size: %d byte%s (%d block%s)\n", perms, plural(get_nod(fs, nod)->i_size), plural(get_nod(fs, nod)->i_blocks / INOBLK)); +- switch(get_nod(fs, nod)->i_mode & FM_IFMT) ++ GRP_PUT_INODE_BITMAP(bi,gi); ++ make_perms(node->i_mode, perms); ++ printf("%s, size: %d byte%s (%d block%s)\n", perms, ++ plural(node->i_size), plural(node->i_blocks / INOBLK)); ++ switch(node->i_mode & FM_IFMT) + { + case FM_IFSOCK: + list_blocks(fs, nod); +@@ -2310,6 +3019,8 @@ + list_blocks(fs, nod); + } + printf("Done with inode %d\n",nod); ++out: ++ put_nod(ni); + } + + // describes various fields in a filesystem +@@ -2317,49 +3028,65 @@ + print_fs(filesystem *fs) + { + uint32 i; ++ blk_info *bi; ++ groupdescriptor *gd; ++ gd_info *gi; + uint8 *ibm; + + printf("%d blocks (%d free, %d reserved), first data block: %d\n", +- fs->sb.s_blocks_count, fs->sb.s_free_blocks_count, +- fs->sb.s_r_blocks_count, fs->sb.s_first_data_block); +- printf("%d inodes (%d free)\n", fs->sb.s_inodes_count, +- fs->sb.s_free_inodes_count); ++ fs->sb->s_blocks_count, fs->sb->s_free_blocks_count, ++ fs->sb->s_r_blocks_count, fs->sb->s_first_data_block); ++ printf("%d inodes (%d free)\n", fs->sb->s_inodes_count, ++ fs->sb->s_free_inodes_count); + printf("block size = %d, frag size = %d\n", +- fs->sb.s_log_block_size ? (fs->sb.s_log_block_size << 11) : 1024, +- fs->sb.s_log_frag_size ? (fs->sb.s_log_frag_size << 11) : 1024); ++ fs->sb->s_log_block_size ? (fs->sb->s_log_block_size << 11) : 1024, ++ fs->sb->s_log_frag_size ? (fs->sb->s_log_frag_size << 11) : 1024); + printf("number of groups: %d\n",GRP_NBGROUPS(fs)); + printf("%d blocks per group,%d frags per group,%d inodes per group\n", +- fs->sb.s_blocks_per_group, fs->sb.s_frags_per_group, +- fs->sb.s_inodes_per_group); ++ fs->sb->s_blocks_per_group, fs->sb->s_frags_per_group, ++ fs->sb->s_inodes_per_group); + printf("Size of inode table: %d blocks\n", +- (int)(fs->sb.s_inodes_per_group * sizeof(inode) / BLOCKSIZE)); ++ (int)(fs->sb->s_inodes_per_group * sizeof(inode) / BLOCKSIZE)); + for (i = 0; i < GRP_NBGROUPS(fs); i++) { + printf("Group No: %d\n", i+1); ++ gd = get_gd(fs, i, &gi); + printf("block bitmap: block %d,inode bitmap: block %d, inode table: block %d\n", +- fs->gd[i].bg_block_bitmap, fs->gd[i].bg_inode_bitmap, +- fs->gd[i].bg_inode_table); ++ gd->bg_block_bitmap, ++ gd->bg_inode_bitmap, ++ gd->bg_inode_table); + printf("block bitmap allocation:\n"); +- print_bm(GRP_GET_GROUP_BBM(fs, i),fs->sb.s_blocks_per_group); ++ print_bm(GRP_GET_GROUP_BBM(fs, gd, &bi),fs->sb->s_blocks_per_group); ++ GRP_PUT_GROUP_BBM(bi); + printf("inode bitmap allocation:\n"); +- ibm = GRP_GET_GROUP_IBM(fs, i); +- print_bm(ibm, fs->sb.s_inodes_per_group); +- for (i = 1; i <= fs->sb.s_inodes_per_group; i++) ++ ibm = GRP_GET_GROUP_IBM(fs, gd, &bi); ++ print_bm(ibm, fs->sb->s_inodes_per_group); ++ for (i = 1; i <= fs->sb->s_inodes_per_group; i++) + if (allocated(ibm, i)) + print_inode(fs, i); ++ GRP_PUT_GROUP_IBM(bi); ++ put_gd(gi); + } + } + + static void +-dump_fs(filesystem *fs, FILE * fh, int swapit) ++finish_fs(filesystem *fs) + { +- uint32 nbblocks = fs->sb.s_blocks_count; +- fs->sb.s_reserved[200] = 0; +- if(swapit) +- swap_goodfs(fs); +- if(fwrite(fs, BLOCKSIZE, nbblocks, fh) < nbblocks) +- perror_msg_and_die("output filesystem image"); +- if(swapit) +- swap_badfs(fs); ++ if (cache_flush(&fs->inodes)) ++ error_msg_and_die("entry mismatch on inode cache flush"); ++ if (cache_flush(&fs->blkmaps)) ++ error_msg_and_die("entry mismatch on blockmap cache flush"); ++ if (cache_flush(&fs->gds)) ++ error_msg_and_die("entry mismatch on gd cache flush"); ++ if (cache_flush(&fs->blks)) ++ error_msg_and_die("entry mismatch on block cache flush"); ++ if(fs->swapit) ++ swap_sb(fs->sb); ++ if (fseek(fs->f, SUPERBLOCK_OFFSET, SEEK_SET)) ++ perror_msg_and_die("fseek"); ++ if(fwrite(fs->sb, SUPERBLOCK_SIZE, 1, fs->f) != 1) ++ perror_msg_and_die("output filesystem superblock"); ++ if(fs->swapit) ++ swap_sb(fs->sb); + } + + static void +@@ -2419,10 +3146,12 @@ + " -x, --starting-image \n" + " -d, --root \n" + " -D, --devtable \n" ++ " -B, --block-size \n" + " -b, --size-in-blocks \n" + " -i, --bytes-per-inode \n" + " -N, --number-of-inodes \n" + " -m, --reserved-percentage \n" ++ " -o, --creator-os 'linux' (default), 'hurd', 'freebsd' or number.\n" + " -g, --block-map Generate a block map file for this path.\n" + " -e, --fill-value Fill unallocated blocks with value.\n" + " -z, --allow-holes Allow files with holes.\n" +@@ -2444,15 +3173,34 @@ + extern char* optarg; + extern int optind, opterr, optopt; + ++// parse the value for -o ++int ++lookup_creator_os(const char *name) ++{ ++ if (isdigit (*name)) ++ return atoi(name); ++ else if (strcasecmp(name, "linux") == 0) ++ return EXT2_OS_LINUX; ++ else if (strcasecmp(name, "GNU") == 0 || strcasecmp(name, "hurd") == 0) ++ return EXT2_OS_HURD; ++ else if (strcasecmp(name, "freebsd") == 0) ++ return EXT2_OS_FREEBSD; ++ else if (strcasecmp(name, "lites") == 0) ++ return EXT2_OS_LITES; ++ else ++ return EXT2_OS_LINUX; ++} ++ + int + main(int argc, char **argv) + { +- int nbblocks = -1; ++ long long nbblocks = -1; + int nbinodes = -1; + int nbresrvd = -1; + float bytes_per_inode = -1; + float reserved_frac = -1; + int fs_timestamp = -1; ++ int creator_os = CREATOR_OS; + char * fsout = "-"; + char * fsin = 0; + char * dopt[MAX_DOPT]; +@@ -2466,6 +3214,7 @@ + int squash_perms = 0; + uint16 endian = 1; + int bigendian = !*(char*)&endian; ++ char *volumelabel = NULL; + filesystem *fs; + int i; + int c; +@@ -2476,13 +3225,16 @@ + { "starting-image", required_argument, NULL, 'x' }, + { "root", required_argument, NULL, 'd' }, + { "devtable", required_argument, NULL, 'D' }, ++ { "block-size", required_argument, NULL, 'B' }, + { "size-in-blocks", required_argument, NULL, 'b' }, + { "bytes-per-inode", required_argument, NULL, 'i' }, + { "number-of-inodes", required_argument, NULL, 'N' }, ++ { "volume-label", required_argument, NULL, 'L' }, + { "reserved-percentage", required_argument, NULL, 'm' }, ++ { "creator-os", required_argument, NULL, 'o' }, + { "block-map", required_argument, NULL, 'g' }, + { "fill-value", required_argument, NULL, 'e' }, +- { "allow-holes", no_argument, NULL, 'z' }, ++ { "allow-holes", no_argument, NULL, 'z' }, + { "faketime", no_argument, NULL, 'f' }, + { "squash", no_argument, NULL, 'q' }, + { "squash-uids", no_argument, NULL, 'U' }, +@@ -2495,11 +3247,11 @@ + + app_name = argv[0]; + +- while((c = getopt_long(argc, argv, "x:d:D:b:i:N:m:g:e:zfqUPhVv", longopts, NULL)) != EOF) { ++ while((c = getopt_long(argc, argv, "x:d:D:B:b:i:N:L:m:o:g:e:zfqUPhVv", longopts, NULL)) != EOF) { + #else + app_name = argv[0]; + +- while((c = getopt(argc, argv, "x:d:D:b:i:N:m:g:e:zfqUPhVv")) != EOF) { ++ while((c = getopt(argc, argv, "x:d:D:B:b:i:N:L:m:o:g:e:zfqUPhVv")) != EOF) { + #endif /* HAVE_GETOPT_LONG */ + switch(c) + { +@@ -2510,6 +3262,9 @@ + case 'D': + dopt[didx++] = optarg; + break; ++ case 'B': ++ blocksize = SI_atof(optarg); ++ break; + case 'b': + nbblocks = SI_atof(optarg); + break; +@@ -2519,9 +3274,15 @@ + case 'N': + nbinodes = SI_atof(optarg); + break; ++ case 'L': ++ volumelabel = optarg; ++ break; + case 'm': + reserved_frac = SI_atof(optarg) / 100; + break; ++ case 'o': ++ creator_os = lookup_creator_os(optarg); ++ break; + case 'g': + gopt[gidx++] = optarg; + break; +@@ -2565,21 +3326,21 @@ + error_msg_and_die("Not enough arguments. Try --help or else see the man page."); + fsout = argv[optind]; + +- hdlinks.hdl = (struct hdlink_s *)malloc(hdlink_cnt * sizeof(struct hdlink_s)); +- if (!hdlinks.hdl) +- error_msg_and_die("Not enough memory"); +- hdlinks.count = 0 ; ++ if(blocksize != 1024 && blocksize != 2048 && blocksize != 4096) ++ error_msg_and_die("Valid block sizes: 1024, 2048 or 4096."); ++ if(creator_os < 0) ++ error_msg_and_die("Creator OS unknown."); + + if(fsin) + { + if(strcmp(fsin, "-")) + { + FILE * fh = xfopen(fsin, "rb"); +- fs = load_fs(fh, bigendian); ++ fs = load_fs(fh, bigendian, fsout); + fclose(fh); + } + else +- fs = load_fs(stdin, bigendian); ++ fs = load_fs(stdin, bigendian, fsout); + } + else + { +@@ -2609,16 +3370,29 @@ + } + if(fs_timestamp == -1) + fs_timestamp = time(NULL); +- fs = init_fs(nbblocks, nbinodes, nbresrvd, holes, fs_timestamp); ++ fs = init_fs(nbblocks, nbinodes, nbresrvd, holes, ++ fs_timestamp, creator_os, bigendian, fsout); + } ++ if (volumelabel != NULL) ++ strncpy((char *)fs->sb->s_volume_name, volumelabel, ++ sizeof(fs->sb->s_volume_name)); + + populate_fs(fs, dopt, didx, squash_uids, squash_perms, fs_timestamp, NULL); + + if(emptyval) { + uint32 b; +- for(b = 1; b < fs->sb.s_blocks_count; b++) +- if(!allocated(GRP_GET_BLOCK_BITMAP(fs,b),GRP_BBM_OFFSET(fs,b))) +- memset(get_blk(fs, b), emptyval, BLOCKSIZE); ++ for(b = 1; b < fs->sb->s_blocks_count; b++) { ++ blk_info *bi; ++ gd_info *gi; ++ if(!allocated(GRP_GET_BLOCK_BITMAP(fs,b,&bi,&gi), ++ GRP_BBM_OFFSET(fs,b))) { ++ blk_info *bi2; ++ memset(get_blk(fs, b, &bi2), emptyval, ++ BLOCKSIZE); ++ put_blk(bi2); ++ } ++ GRP_PUT_BLOCK_BITMAP(bi,gi); ++ } + } + if(verbose) + print_fs(fs); +@@ -2628,24 +3402,22 @@ + char fname[MAX_FILENAME]; + char *p; + FILE *fh; ++ nod_info *ni; + if(!(nod = find_path(fs, EXT2_ROOT_INO, gopt[i]))) + error_msg_and_die("path %s not found in filesystem", gopt[i]); + while((p = strchr(gopt[i], '/'))) + *p = '_'; + SNPRINTF(fname, MAX_FILENAME-1, "%s.blk", gopt[i]); + fh = xfopen(fname, "wb"); +- fprintf(fh, "%d:", get_nod(fs, nod)->i_size); ++ fprintf(fh, "%d:", get_nod(fs, nod, &ni)->i_size); ++ put_nod(ni); + flist_blocks(fs, nod, fh); + fclose(fh); + } +- if(strcmp(fsout, "-")) +- { +- FILE * fh = xfopen(fsout, "wb"); +- dump_fs(fs, fh, bigendian); +- fclose(fh); +- } +- else +- dump_fs(fs, stdout, bigendian); ++ finish_fs(fs); ++ if(strcmp(fsout, "-") == 0) ++ copy_file(fs, stdout, fs->f, fs->sb->s_blocks_count); ++ + free_fs(fs); + return 0; + } +Index: genext2fs-1.4.1/cache.h +=================================================================== +--- /dev/null ++++ genext2fs-1.4.1/cache.h +@@ -0,0 +1,128 @@ ++#ifndef __CACHE_H__ ++#define __CACHE_H__ ++ ++#include "list.h" ++ ++#define CACHE_LISTS 256 ++ ++typedef struct ++{ ++ list_elem link; ++ list_elem lru_link; ++} cache_link; ++ ++typedef struct ++{ ++ /* LRU list holds unused items */ ++ unsigned int lru_entries; ++ list_elem lru_list; ++ unsigned int max_free_entries; ++ ++ unsigned int entries; ++ list_elem lists[CACHE_LISTS]; ++ unsigned int (*elem_val)(cache_link *elem); ++ void (*freed)(cache_link *elem); ++} listcache; ++ ++static inline void ++cache_add(listcache *c, cache_link *elem) ++{ ++ unsigned int hash = c->elem_val(elem) % CACHE_LISTS; ++ int delcount = c->lru_entries - c->max_free_entries; ++ ++ if (delcount > 0) { ++ /* Delete some unused items. */ ++ list_elem *lru, *next; ++ cache_link *l; ++ list_for_each_elem_safe(&c->lru_list, lru, next) { ++ l = container_of(lru, cache_link, lru_link); ++ list_del(lru); ++ list_del(&l->link); ++ c->entries--; ++ c->lru_entries--; ++ c->freed(l); ++ delcount--; ++ if (delcount <= 0) ++ break; ++ } ++ } ++ ++ c->entries++; ++ list_item_init(&elem->lru_link); /* Mark it not in the LRU list */ ++ list_add_after(&c->lists[hash], &elem->link); ++} ++ ++static inline void ++cache_item_set_unused(listcache *c, cache_link *elem) ++{ ++ list_add_before(&c->lru_list, &elem->lru_link); ++ c->lru_entries++; ++} ++ ++static inline cache_link * ++cache_find(listcache *c, unsigned int val) ++{ ++ unsigned int hash = val % CACHE_LISTS; ++ list_elem *elem; ++ ++ list_for_each_elem(&c->lists[hash], elem) { ++ cache_link *l = container_of(elem, cache_link, link); ++ if (c->elem_val(l) == val) { ++ if (!list_empty(&l->lru_link)) { ++ /* It's in the unused list, remove it. */ ++ list_del(&l->lru_link); ++ list_item_init(&l->lru_link); ++ c->lru_entries--; ++ } ++ return l; ++ } ++ } ++ return NULL; ++} ++ ++static inline int ++cache_flush(listcache *c) ++{ ++ list_elem *elem, *next; ++ cache_link *l; ++ int i; ++ ++ list_for_each_elem_safe(&c->lru_list, elem, next) { ++ l = container_of(elem, cache_link, lru_link); ++ list_del(elem); ++ list_del(&l->link); ++ c->entries--; ++ c->lru_entries--; ++ c->freed(l); ++ } ++ ++ for (i = 0; i < CACHE_LISTS; i++) { ++ list_for_each_elem_safe(&c->lists[i], elem, next) { ++ l = container_of(elem, cache_link, link); ++ list_del(&l->link); ++ c->entries--; ++ c->freed(l); ++ } ++ } ++ ++ return c->entries || c->lru_entries; ++} ++ ++static inline void ++cache_init(listcache *c, unsigned int max_free_entries, ++ unsigned int (*elem_val)(cache_link *elem), ++ void (*freed)(cache_link *elem)) ++{ ++ int i; ++ ++ c->entries = 0; ++ c->lru_entries = 0; ++ c->max_free_entries = max_free_entries; ++ list_init(&c->lru_list); ++ for (i = 0; i < CACHE_LISTS; i++) ++ list_init(&c->lists[i]); ++ c->elem_val = elem_val; ++ c->freed = freed; ++} ++ ++#endif /* __CACHE_H__ */ +Index: genext2fs-1.4.1/list.h +=================================================================== +--- /dev/null ++++ genext2fs-1.4.1/list.h +@@ -0,0 +1,78 @@ ++#ifndef __LIST_H__ ++#define __LIST_H__ ++ ++#if STDC_HEADERS ++# include ++# include ++#else ++# if HAVE_STDLIB_H ++# include ++# endif ++# if HAVE_STDDEF_H ++# include ++# endif ++#endif ++ ++#ifndef offsetof ++#define offsetof(st, m) \ ++ ((size_t) ( (char *)&((st *)(0))->m - (char *)0 )) ++#endif ++ ++#define container_of(ptr, type, member) ({ \ ++ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ++ (type *)( (char *)__mptr - offsetof(type,member) );}) ++ ++typedef struct list_elem ++{ ++ struct list_elem *next; ++ struct list_elem *prev; ++} list_elem; ++ ++static inline void list_init(list_elem *list) ++{ ++ list->next = list; ++ list->prev = list; ++} ++ ++static inline void list_add_after(list_elem *pos, list_elem *elem) ++{ ++ elem->next = pos->next; ++ elem->prev = pos; ++ pos->next->prev = elem; ++ pos->next = elem; ++} ++ ++static inline void list_add_before(list_elem *pos, list_elem *elem) ++{ ++ elem->prev = pos->prev; ++ elem->next = pos; ++ pos->prev->next = elem; ++ pos->prev = elem; ++} ++ ++static inline void list_del(list_elem *elem) ++{ ++ elem->next->prev = elem->prev; ++ elem->prev->next = elem->next; ++} ++ ++static inline void list_item_init(list_elem *elem) ++{ ++ elem->next = elem; ++ elem->prev = elem; ++} ++ ++static inline int list_empty(list_elem *elem) ++{ ++ return elem->next == elem; ++} ++ ++#define list_for_each_elem(list, curr) \ ++ for ((curr) = (list)->next; (curr) != (list); (curr) = (curr)->next) ++ ++#define list_for_each_elem_safe(list, curr, next) \ ++ for ((curr) = (list)->next, (next) = (curr)->next; \ ++ (curr) != (list); \ ++ (curr) = (next), (next) = (curr)->next) ++ ++#endif /* __LIST_H__ */ diff --git a/package/genext2fs/0002-allow-changing-ownership-and-permission-of-the-root-.patch b/package/genext2fs/0002-allow-changing-ownership-and-permission-of-the-root-.patch new file mode 100644 index 00000000..f0ac2425 --- /dev/null +++ b/package/genext2fs/0002-allow-changing-ownership-and-permission-of-the-root-.patch @@ -0,0 +1,36 @@ +From 8e4b9ae6f051454953a80b8e64443bcea6c9cc46 Mon Sep 17 00:00:00 2001 +From: Johannes 'josch' Schauer +Date: Mon, 23 Mar 2020 11:59:25 +0100 +Subject: [PATCH] allow changing ownership and permission of the root node + +Signed-off-by: Peter Korsgaard +--- + genext2fs.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/genext2fs.c b/genext2fs.c +index db936e4..af6f519 100644 +--- a/genext2fs.c ++++ b/genext2fs.c +@@ -2193,6 +2193,18 @@ add2fs_from_file(filesystem *fs, uint32 this_nod, FILE * fh, uint32 fs_timestamp + continue; + } + mode &= FM_IMASK; ++ if (fs && strcmp(path, "/") == 0) { ++ // if the entry modifies the root node, don't call ++ // basename and dirname but chmod the root node ++ // directly ++ if (type != 'd') { ++ error_msg("device table line %d skipped: root node must be directory", lineno); ++ continue; ++ } ++ mode |= FM_IFDIR; ++ chmod_fs(fs, this_nod, mode, uid, gid); ++ continue; ++ } + path2 = strdup(path); + name = basename(path); + dir = dirname(path2); +-- +2.20.1 + diff --git a/package/genext2fs/Config.in b/package/genext2fs/Config.in new file mode 100644 index 00000000..2251684d --- /dev/null +++ b/package/genext2fs/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_GENEXT2FS + bool "genext2fs" + help + genext2fs generates an ext2 filesystem as a normal (non-root) + user. It does not require you to mount the image file to + copy files on it, nor does it require that you become the + superuser to make device nodes. + + http://genext2fs.sourceforge.net/ diff --git a/package/genext2fs/Config.in.host b/package/genext2fs/Config.in.host new file mode 100644 index 00000000..a03e16b2 --- /dev/null +++ b/package/genext2fs/Config.in.host @@ -0,0 +1,9 @@ +config BR2_PACKAGE_HOST_GENEXT2FS + bool "host genext2fs" + help + genext2fs generates an ext2 filesystem as a normal (non-root) + user. It does not require you to mount the image file to + copy files on it, nor does it require that you become the + superuser to make device nodes. + + http://genext2fs.sourceforge.net/ diff --git a/package/genext2fs/genext2fs.hash b/package/genext2fs/genext2fs.hash new file mode 100644 index 00000000..add44c4c --- /dev/null +++ b/package/genext2fs/genext2fs.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 404dbbfa7a86a6c3de8225c8da254d026b17fd288e05cec4df2cc7e1f4feecfc genext2fs-1.4.1.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/genext2fs/genext2fs.mk b/package/genext2fs/genext2fs.mk new file mode 100644 index 00000000..dd907c8b --- /dev/null +++ b/package/genext2fs/genext2fs.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# genext2fs +# +################################################################################ + +GENEXT2FS_VERSION = 1.4.1 +GENEXT2FS_SITE = http://downloads.sourceforge.net/project/genext2fs/genext2fs/$(GENEXT2FS_VERSION) +GENEXT2FS_LICENSE = GPL-2.0 +GENEXT2FS_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/gengetopt/0001-configure.ac-add-disable-doc-option.patch b/package/gengetopt/0001-configure.ac-add-disable-doc-option.patch new file mode 100644 index 00000000..d43714a3 --- /dev/null +++ b/package/gengetopt/0001-configure.ac-add-disable-doc-option.patch @@ -0,0 +1,51 @@ +From 250bee9e02546846d70dbe88ac36bb83c6a7ebdf Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 22 Sep 2019 09:27:24 +0200 +Subject: [PATCH] configure.ac: add --disable-doc option + +Add --disable-doc option to allow the user to disable documentation + +Signed-off-by: Fabrice Fontaine +[Sent upstream: https://savannah.gnu.org/bugs/index.php?56931] +--- + Makefile.am | 6 +++++- + configure.ac | 7 +++++++ + 2 files changed, 12 insertions(+), 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index dbb5719..2db307a 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -18,6 +18,10 @@ + ACLOCAL_AMFLAGS = -I m4 -I gl/m4 + + EXTRA_DIST = configure TODO LICENSE gl/m4/gnulib-cache.m4 +-SUBDIRS = gl src doc tests ++SUBDIRS = gl src tests ++ ++if ENABLE_DOC ++SUBDIRS += doc ++endif + + gengetoptdoc_DATA = ChangeLog COPYING NEWS THANKS INSTALL README LICENSE +diff --git a/configure.ac b/configure.ac +index 0ee89db..915706c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -61,6 +61,13 @@ AC_ARG_ENABLE( + AC_COMPILE_WARNINGS + ) + ++AC_ARG_ENABLE( ++ [doc], ++ [--enable-doc enable documentation], ++ [enable_doc=$enableval], ++ [enable_doc=yes]) ++AM_CONDITIONAL(ENABLE_DOC, test x"$enable_doc" = xyes) ++ + AC_ARG_WITH( + [gengen], + [ --with-gengen=mygengen gengen to use], +-- +2.23.0 + diff --git a/package/gengetopt/gengetopt.hash b/package/gengetopt/gengetopt.hash new file mode 100644 index 00000000..35c214fc --- /dev/null +++ b/package/gengetopt/gengetopt.hash @@ -0,0 +1,4 @@ +# Locally computed +sha256 b941aec9011864978dd7fdeb052b1943535824169d2aa2b0e7eae9ab807584ac gengetopt-2.23.tar.xz +sha256 afab96ff35204960631dc05506034f9efc01e6d696f0ac93718d6bd43512cda7 COPYING +sha256 72a43351233d6a581f891cdfff78b7b7d5f2a12522523929c5f7e8f674c2f6fc LICENSE diff --git a/package/gengetopt/gengetopt.mk b/package/gengetopt/gengetopt.mk new file mode 100644 index 00000000..5ecd44bc --- /dev/null +++ b/package/gengetopt/gengetopt.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# gengetopt +# +################################################################################ + +GENGETOPT_VERSION = 2.23 +GENGETOPT_SOURCE = gengetopt-$(GENGETOPT_VERSION).tar.xz +GENGETOPT_SITE = $(BR2_GNU_MIRROR)/gengetopt +GENGETOPT_LICENSE = GPL-3.0+ +GENGETOPT_LICENSE_FILES = COPYING LICENSE +# We're patching configure.ac +HOST_GENGETOPT_AUTORECONF = YES + +$(eval $(host-autotools-package)) diff --git a/package/genimage/0001-util-add-fiemap-fallback-for-errno-ENOTTY.patch b/package/genimage/0001-util-add-fiemap-fallback-for-errno-ENOTTY.patch new file mode 100644 index 00000000..4ce91ed1 --- /dev/null +++ b/package/genimage/0001-util-add-fiemap-fallback-for-errno-ENOTTY.patch @@ -0,0 +1,37 @@ +From 6b61b55807fdce5d09ea470e7b5c8ca1e40f724f Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Wed, 12 Aug 2020 21:10:36 +0200 +Subject: [PATCH] util: add fiemap fallback for errno ENOTTY + +On WSL-1, genimage fails with (see [1] for details): + + ERROR: hdimage(sdcard.img): fiemap .../boot.vfat: 25 Inappropriate ioctl for device + +This is because WSL-1 is a limited Linux emulation layer, where the fiemap +ioctl incorrectly returns ENOTTY instead of the expected EOPNOTSUPP. + +[1] https://bugs.busybox.net/show_bug.cgi?id=13146 + +Signed-off-by: Peter Seiderer +[From https://github.com/pengutronix/genimage/commit/4c2b02df0861e06ca9320d80ad60994d4a239ad6.patch] +Signed-off-by: Peter Seiderer +--- + util.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/util.c b/util.c +index 381c5d9..2dcf396 100644 +--- a/util.c ++++ b/util.c +@@ -387,7 +387,7 @@ err_out: + free(fiemap); + + /* If failure is due to no filesystem support, return a single extent */ +- if (ret == -EOPNOTSUPP) ++ if (ret == -EOPNOTSUPP || ret == -ENOTTY) + return whole_file_exent(size, extents, extent_count); + + image_error(image, "fiemap %s: %d %s\n", filename, errno, strerror(errno)); +-- +2.30.1 + diff --git a/package/genimage/Config.in.host b/package/genimage/Config.in.host new file mode 100644 index 00000000..cf831a14 --- /dev/null +++ b/package/genimage/Config.in.host @@ -0,0 +1,13 @@ +config BR2_PACKAGE_HOST_GENIMAGE + bool "host genimage" + help + genimage is a tool to generate multiple filesystem and flash + images from a given root filesystem tree. genimage is + intended to be run in a fakeroot environment. + + Configuration is done in a config file parsed by + libconfuse. Options like the path to tools can be given in + environment variables, the config file or commandline + switches. + + https://github.com/pengutronix/genimage diff --git a/package/genimage/genimage.hash b/package/genimage/genimage.hash new file mode 100644 index 00000000..fbec5ce5 --- /dev/null +++ b/package/genimage/genimage.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 4206e253226a384386c01591251f2ed1ea3485ef63f1e696db03600e1213db79 genimage-13.tar.xz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/genimage/genimage.mk b/package/genimage/genimage.mk new file mode 100644 index 00000000..dde8f8b9 --- /dev/null +++ b/package/genimage/genimage.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# genimage +# +################################################################################ + +GENIMAGE_VERSION = 13 +GENIMAGE_SOURCE = genimage-$(GENIMAGE_VERSION).tar.xz +GENIMAGE_SITE = https://github.com/pengutronix/genimage/releases/download/v$(GENIMAGE_VERSION) +HOST_GENIMAGE_DEPENDENCIES = host-pkgconf host-libconfuse +GENIMAGE_LICENSE = GPL-2.0 +GENIMAGE_LICENSE_FILES = COPYING + +$(eval $(host-autotools-package)) diff --git a/package/genpart/0001-fix-return-code.patch b/package/genpart/0001-fix-return-code.patch new file mode 100644 index 00000000..ec18c82f --- /dev/null +++ b/package/genpart/0001-fix-return-code.patch @@ -0,0 +1,25 @@ +genpart: return 0 if partition writen OK, with no do_magic + +If do_magic is false, we don't won't write the 0xaa55 magic. +However, if we succesfully wrote the partition entry, we still +want to return 0 to indicate success. + +Signed-off-by: "Yann E. MORIN" +Cc: Robert Schwebel + +-- +Patch sent upstream, but no mailing list. +Status: accepted upstream, not yet released. + +diff -durN host-genpart-1.0.2.orig/src/genpart.c host-genpart-1.0.2/src/genpart.c +--- host-genpart-1.0.2.orig/src/genpart.c 2009-12-20 21:54:56.000000000 +0100 ++++ host-genpart-1.0.2/src/genpart.c 2013-01-22 23:13:24.109752579 +0100 +@@ -92,6 +92,8 @@ + if (do_magic) { + if (fwrite(&magic, 2, 1, stdout) > 0) + rc=0; ++ } else { ++ rc=0; + } + } + return rc; diff --git a/package/genpart/Config.in b/package/genpart/Config.in new file mode 100644 index 00000000..64288452 --- /dev/null +++ b/package/genpart/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_GENPART + bool "genpart" + help + Generate a 16 byte partition table entry defined by command + line arguments and dump it to stdout. No CHS magic is done, + only lba entries are filled out. + + http://www.pengutronix.de/software/genpart/index_en.html diff --git a/package/genpart/Config.in.host b/package/genpart/Config.in.host new file mode 100644 index 00000000..d8b9eb61 --- /dev/null +++ b/package/genpart/Config.in.host @@ -0,0 +1,8 @@ +config BR2_PACKAGE_HOST_GENPART + bool "host genpart" + help + Generate a 16 byte partition table entry defined by command + line arguments and dump it to stdout. No CHS magic is done, + only lba entries are filled out. + + http://www.pengutronix.de/software/genpart/index_en.html diff --git a/package/genpart/genpart.hash b/package/genpart/genpart.hash new file mode 100644 index 00000000..b741dbda --- /dev/null +++ b/package/genpart/genpart.hash @@ -0,0 +1,2 @@ +# Locally calculated +sha256 bfb39434f31d10f1b8c7b6bc6ec612309838c2819022561541c4d2d5a424e3f2 genpart-1.0.2.tar.bz2 diff --git a/package/genpart/genpart.mk b/package/genpart/genpart.mk new file mode 100644 index 00000000..2aa2c710 --- /dev/null +++ b/package/genpart/genpart.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# genpart +# +################################################################################ + +GENPART_VERSION = 1.0.2 +GENPART_SOURCE = genpart-$(GENPART_VERSION).tar.bz2 +GENPART_SITE = http://www.pengutronix.de/software/genpart/download +# genpart has no license embedded in its source release. +# However, their project page mentions: +# > This community portal offers an overview about our own OSS +# > projects and projects Pengutronix is or was involved with. +# We can thus assume genpart is under a FLOSS license. +# So, until the authors have clarified the licensing terms: +GENPART_LICENSE = Unknown (clarification has been asked to the authors) + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/genromfs/0001-build-system.patch b/package/genromfs/0001-build-system.patch new file mode 100644 index 00000000..827fe75b --- /dev/null +++ b/package/genromfs/0001-build-system.patch @@ -0,0 +1,26 @@ +--- + Makefile | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +Index: genromfs-0.5.2/Makefile +=================================================================== +--- genromfs-0.5.2.orig/Makefile ++++ genromfs-0.5.2/Makefile +@@ -6,8 +6,6 @@ + PACKAGE = genromfs + VERSION = 0.5.2 + CC = gcc +-CFLAGS = -O2 -Wall -DVERSION=\"$(VERSION)\"#-g# +-LDFLAGS = -s#-g + + DISTDIR = $(PACKAGE)-$(VERSION) + +@@ -24,7 +22,7 @@ + $(CC) $(LDFLAGS) genromfs.o -o genromfs + + .c.o: +- $(CC) $(CFLAGS) $< -c -o $@ ++ $(CC) $(CFLAGS) -DVERSION=\"$(VERSION)\" $< -c -o $@ + + clean: + rm -f genromfs *.o diff --git a/package/genromfs/Config.in b/package/genromfs/Config.in new file mode 100644 index 00000000..e4eba9f1 --- /dev/null +++ b/package/genromfs/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_GENROMFS + bool "genromfs" + help + Tool to generate a ROMFS filesystem. + + http://romfs.sourceforge.net/ diff --git a/package/genromfs/genromfs.hash b/package/genromfs/genromfs.hash new file mode 100644 index 00000000..0be88ee1 --- /dev/null +++ b/package/genromfs/genromfs.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 30f37fc734572c1dbaa2504585bc23ba6b8fd7df767ae7155995b2ca0ebed960 genromfs-0.5.2.tar.gz +sha256 cc2a6651c315b233ebc110b49ea3c6452eff9a28f8bc051ffd2bb92a8dcfa3d2 COPYING diff --git a/package/genromfs/genromfs.mk b/package/genromfs/genromfs.mk new file mode 100644 index 00000000..fd696b45 --- /dev/null +++ b/package/genromfs/genromfs.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# genromfs +# +################################################################################ + +GENROMFS_VERSION = 0.5.2 +GENROMFS_SITE = http://downloads.sourceforge.net/project/romfs/genromfs/$(GENROMFS_VERSION) +GENROMFS_LICENSE = GPL-2.0+ +GENROMFS_LICENSE_FILES = COPYING + +define GENROMFS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + CC="$(TARGET_CC)" \ + CFLAGS="$(TARGET_CFLAGS)" \ + LDFLAGS="$(TARGET_LDFLAGS)" +endef + +# "PREFIX" is the equivalent of DESTDIR in autotools, "prefix" is the +# traditional prefix. "prefix" defaults to /usr so no need to set it. +define GENROMFS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) PREFIX=$(TARGET_DIR) install +endef + +define HOST_GENROMFS_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define HOST_GENROMFS_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) prefix=$(HOST_DIR) install +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/gensio/Config.in b/package/gensio/Config.in new file mode 100644 index 00000000..f874d1a4 --- /dev/null +++ b/package/gensio/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_GENSIO + bool "gensio" + depends on BR2_USE_MMU # fork() + help + A library to abstract stream I/O like serial port, TCP, + telnet, UDP, SSL, IPMI SOL, etc. + + https://github.com/cminyard/gensio diff --git a/package/gensio/gensio.hash b/package/gensio/gensio.hash new file mode 100644 index 00000000..77963abe --- /dev/null +++ b/package/gensio/gensio.hash @@ -0,0 +1,7 @@ +# From https://sourceforge.net/projects/ser2net/files/ser2net/ +md5 3feb9b586f41cdda4025eeac11000127 gensio-2.2.3.tar.gz +sha1 85eb2f063e906868672e08c8f7e282272904631c gensio-2.2.3.tar.gz +# Locally computed: +sha256 ffc849be3349ba15cd6f92d109a54c7608c15d33d210a262c02ddcf00ea76262 gensio-2.2.3.tar.gz +sha256 501f3108e6c03e5a0a5585ebaaa369171aead5319cd0a7a4dc1f66211c1f09f1 COPYING +sha256 dcac7d447dd81ab96d28dce00a07a6486e623f7ded94e2a2a8e83312405cdf89 COPYING.LIB diff --git a/package/gensio/gensio.mk b/package/gensio/gensio.mk new file mode 100644 index 00000000..e68e75e2 --- /dev/null +++ b/package/gensio/gensio.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# gensio +# +################################################################################ + +GENSIO_VERSION = 2.2.3 +GENSIO_SITE = http://downloads.sourceforge.net/project/ser2net/ser2net +GENSIO_LICENSE = LGPL-2.1+ (library), GPL-2.0+ (tools) +GENSIO_LICENSE_FILES = COPYING.LIB COPYING +GENSIO_INSTALL_STAGING = YES +GENSIO_CONF_OPTS = \ + --without-openipmi \ + --without-swig \ + --without-python + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +GENSIO_DEPENDENCIES += host-pkgconf openssl +GENSIO_CONF_OPTS += --with-openssl +else +GENSIO_CONF_OPTS += --without-openssl +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +GENSIO_CONF_OPTS += --with-pthreads +else +GENSIO_CONF_OPTS += --without-pthreads +endif + +$(eval $(autotools-package)) diff --git a/package/geoip/Config.in b/package/geoip/Config.in new file mode 100644 index 00000000..739a8da0 --- /dev/null +++ b/package/geoip/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_GEOIP + bool "geoip" + help + GeoIP is a C library that enables the user to find + geographical and network information of an IP address. + + To use this library, you need to download MaxMind's free + GeoLite or commercial GeoIP binary databases into the + target's /usr/share/GeoIP directory in uncompressed form. + + Note that GeoIP2 / GeoLite2 are not supported by this + library. + + https://github.com/maxmind/geoip-api-c diff --git a/package/geoip/geoip.hash b/package/geoip/geoip.hash new file mode 100644 index 00000000..c2ddf390 --- /dev/null +++ b/package/geoip/geoip.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 1dfb748003c5e4b7fd56ba8c4cd786633d5d6f409547584f6910398389636f80 GeoIP-1.6.12.tar.gz +sha256 36b6d3fa47916943fd5fec313c584784946047ec1337a78b440e5992cb595f89 COPYING diff --git a/package/geoip/geoip.mk b/package/geoip/geoip.mk new file mode 100644 index 00000000..cbd42823 --- /dev/null +++ b/package/geoip/geoip.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# geoip +# +################################################################################ + +GEOIP_VERSION = 1.6.12 +GEOIP_SOURCE = GeoIP-$(GEOIP_VERSION).tar.gz +GEOIP_SITE = https://github.com/maxmind/geoip-api-c/releases/download/v$(GEOIP_VERSION) +GEOIP_INSTALL_STAGING = YES +GEOIP_LICENSE = LGPL-2.1+ +GEOIP_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/gerbera/Config.in b/package/gerbera/Config.in new file mode 100644 index 00000000..b734de95 --- /dev/null +++ b/package/gerbera/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_GERBERA + bool "gerbera" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_ATOMIC + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_8 # C++17 filesystem + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR # fmt + select BR2_PACKAGE_FMT + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + select BR2_PACKAGE_LIBUPNP if !BR2_PACKAGE_LIBNPUPNP + select BR2_PACKAGE_PUGIXML + select BR2_PACKAGE_PUGIXML_XPATH_SUPPORT + select BR2_PACKAGE_SPDLOG + select BR2_PACKAGE_SQLITE + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + select BR2_PACKAGE_ZLIB + help + A free media server. + Stream your media to devices on your home network. + + https://gerbera.io + +comment "gerbera needs a toolchain w/ C++, threads, wchar, gcc >= 8" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_ATOMIC + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_USE_WCHAR || !BR2_TOOLCHAIN_GCC_AT_LEAST_8 diff --git a/package/gerbera/S99gerbera b/package/gerbera/S99gerbera new file mode 100644 index 00000000..d1c74c88 --- /dev/null +++ b/package/gerbera/S99gerbera @@ -0,0 +1,52 @@ +#!/bin/sh + +DAEMON="gerbera" +PIDFILE="/var/run/$DAEMON.pid" + +GERBERA_ARGS="-c /etc/gerbera/config.xml -l /var/log/gerbera.log" + +# shellcheck source=/dev/null +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON" + +start() { + printf 'Starting %s: ' "$DAEMON" + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon -S -q -m -b -p "$PIDFILE" -x "/usr/bin/$DAEMON" \ + -- $GERBERA_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + rm -f "$PIDFILE" + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + start +} + +case "$1" in + start|stop|restart) + "$1";; + reload) + # Restart, since there is no true "reload" feature. + restart;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/gerbera/config.xml b/package/gerbera/config.xml new file mode 100644 index 00000000..ddaaa7f1 --- /dev/null +++ b/package/gerbera/config.xml @@ -0,0 +1,143 @@ + + + + + + + + + Gerbera + uuid:ac20d9b6-5c82-48e6-80de-436965fbe1d7 + /var/lib/gerbera + /usr/share/gerbera/web + + 1800 + + + gerbera.db + + + + + + + + + + * + + video + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + audio/L16 + no + yes + no + + + + + video/mpeg + yes + yes + yes + + + + + + diff --git a/package/gerbera/gerbera.hash b/package/gerbera/gerbera.hash new file mode 100644 index 00000000..e584db13 --- /dev/null +++ b/package/gerbera/gerbera.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 cbe7ea78977db8c02fcca1759ed149f199a590afaf4a6d21ffcca8623d1a0cc5 gerbera-1.6.4.tar.gz +sha256 cae4138373be41fd2be75faf41ce7efbcf49fb17d0e05ad1c51cc01ac335b9b6 LICENSE.md diff --git a/package/gerbera/gerbera.mk b/package/gerbera/gerbera.mk new file mode 100644 index 00000000..abb4f352 --- /dev/null +++ b/package/gerbera/gerbera.mk @@ -0,0 +1,124 @@ +################################################################################ +# +# gerbera +# +################################################################################ + +GERBERA_VERSION = 1.6.4 +GERBERA_SITE = $(call github,gerbera,gerbera,v$(GERBERA_VERSION)) +GERBERA_LICENSE = GPL-2.0 +GERBERA_LICENSE_FILES = LICENSE.md +GERBERA_DEPENDENCIES = \ + fmt \ + host-pkgconf \ + pugixml \ + spdlog \ + sqlite \ + util-linux \ + zlib +GERBERA_CONF_OPTS = \ + -DWITH_DEBUG=OFF \ + -DWITH_JS=OFF + +# Uses __atomic_fetch_add_4 +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +GERBERA_CONF_OPTS += -DCMAKE_EXE_LINKER_FLAGS=-latomic +endif + +ifeq ($(BR2_PACKAGE_EXIV2),y) +GERBERA_DEPENDENCIES += exiv2 +GERBERA_CONF_OPTS += -DWITH_EXIV2=ON +else +GERBERA_CONF_OPTS += -DWITH_EXIV2=OFF +endif + +ifeq ($(BR2_PACKAGE_FFMPEG),y) +GERBERA_DEPENDENCIES += ffmpeg +GERBERA_CONF_OPTS += -DWITH_AVCODEC=ON +else +GERBERA_CONF_OPTS += -DWITH_AVCODEC=OFF +endif + +ifeq ($(BR2_PACKAGE_FILE),y) +GERBERA_DEPENDENCIES += file +GERBERA_CONF_OPTS += -DWITH_MAGIC=ON +else +GERBERA_CONF_OPTS += -DWITH_MAGIC=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBCURL),y) +GERBERA_DEPENDENCIES += libcurl +GERBERA_CONF_OPTS += -DWITH_CURL=ON +else +GERBERA_CONF_OPTS += -DWITH_CURL=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBEXIF),y) +GERBERA_DEPENDENCIES += libexif +GERBERA_CONF_OPTS += -DWITH_EXIF=ON +else +GERBERA_CONF_OPTS += -DWITH_EXIF=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBICONV),y) +GERBERA_DEPENDENCIES += libiconv +endif + +ifeq ($(BR2_PACKAGE_LIBMATROSKA),y) +GERBERA_DEPENDENCIES += libmatroska +GERBERA_CONF_OPTS += -DWITH_MATROSKA=ON +else +GERBERA_CONF_OPTS += -DWITH_MATROSKA=OFF +endif + +# Either libupnp or libnpupnp are guranteed to be enabled +ifeq ($(BR2_PACKAGE_LIBNPUPNP),y) +GERBERA_DEPENDENCIES += libnpupnp +GERBERA_CONF_OPTS += -DWITH_NPUPNP=ON +else +GERBERA_DEPENDENCIES += libupnp +GERBERA_CONF_OPTS += -DWITH_NPUPNP=OFF +endif + +ifeq ($(BR2_PACKAGE_MYSQL),y) +GERBERA_DEPENDENCIES += mysql +GERBERA_CONF_OPTS += -DWITH_MYSQL=ON +else +GERBERA_CONF_OPTS += -DWITH_MYSQL=OFF +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +GERBERA_DEPENDENCIES += systemd +GERBERA_CONF_OPTS += -DWITH_SYSTEMD=ON +else +GERBERA_CONF_OPTS += -DWITH_SYSTEMD=OFF +endif + +ifeq ($(BR2_PACKAGE_TAGLIB),y) +GERBERA_DEPENDENCIES += taglib +GERBERA_CONF_OPTS += -DWITH_TAGLIB=ON +else +GERBERA_CONF_OPTS += -DWITH_TAGLIB=OFF +endif + +# gerbera does not provide a default configuration file, it can be +# created during run time through --create-config: +# http://docs.gerbera.io/en/latest/config-overview.html#generating-configuration +# However, to have a correct home directory and UDN, install it ourself +define GERBERA_INSTALL_CONFIGURATION + $(INSTALL) -D -m 0644 package/gerbera/config.xml \ + $(TARGET_DIR)/etc/gerbera/config.xml +endef + +GERBERA_POST_INSTALL_TARGET_HOOKS += GERBERA_INSTALL_CONFIGURATION + +define GERBERA_USERS + gerbera -1 gerbera -1 * /var/lib/gerbera - - Gerbera user +endef + +define GERBERA_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/gerbera/S99gerbera \ + $(TARGET_DIR)/etc/init.d/S99gerbera +endef + +$(eval $(cmake-package)) diff --git a/package/gesftpserver/0001-Change-order-of-v3-attributes-according-to-draft-iet.patch b/package/gesftpserver/0001-Change-order-of-v3-attributes-according-to-draft-iet.patch new file mode 100644 index 00000000..3697d0e5 --- /dev/null +++ b/package/gesftpserver/0001-Change-order-of-v3-attributes-according-to-draft-iet.patch @@ -0,0 +1,30 @@ +From 4b5c7eb63894bd2b1fedeb2a8e9bd16bf3c8c555 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Bernd=20Holzm=C3=BCller?= + +Date: Mon, 11 Feb 2019 23:57:01 +0100 +Subject: [PATCH] Change order of v3-attributes according to + draft-ietf-secsh-filexfer-00/02 + +[yann.morin.1998@free.fr: backport from upstream] +Signed-off-by: "Yann E. MORIN" +--- + v3.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/v3.c b/v3.c +index 57cc31e..1fd86ad 100644 +--- a/v3.c ++++ b/v3.c +@@ -121,8 +121,8 @@ static void v3_sendattrs(struct sftpjob *job, const struct sftpattr *attrs) { + fatal("sending out-of-range mtime"); + if(a != attrs->atime.seconds) + fatal("sending out-of-range mtime"); +- sftp_send_uint32(job->worker, m); + sftp_send_uint32(job->worker, a); ++ sftp_send_uint32(job->worker, m); + } + /* Note that we just discard unknown bits rather than reporting errors. */ + } +-- +2.14.1 + diff --git a/package/gesftpserver/Config.in b/package/gesftpserver/Config.in new file mode 100644 index 00000000..bce47700 --- /dev/null +++ b/package/gesftpserver/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_GESFTPSERVER + bool "gesftpserver" + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + Green End SFTP Server + + This is an SFTP server supporting up to protocol version 6. + It is possible to use it as a drop-in replacement for the + OpenSSH server, or to provide sftp support for Dropbear. + + http://www.greenend.org.uk/rjk/sftpserver/ + +comment "gesftpserver needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/gesftpserver/gesftpserver.hash b/package/gesftpserver/gesftpserver.hash new file mode 100644 index 00000000..790cbe97 --- /dev/null +++ b/package/gesftpserver/gesftpserver.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 4963b85787de3485085a5356c671c58b8b33125f528ff1b2fe8b534ed8a0c1bd sftpserver-1.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/gesftpserver/gesftpserver.mk b/package/gesftpserver/gesftpserver.mk new file mode 100644 index 00000000..20ad92d2 --- /dev/null +++ b/package/gesftpserver/gesftpserver.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# gesftpserver +# +################################################################################ + +GESFTPSERVER_VERSION = 1 +GESFTPSERVER_SOURCE = sftpserver-$(GESFTPSERVER_VERSION).tar.gz +GESFTPSERVER_SITE = http://www.greenend.org.uk/rjk/sftpserver +GESFTPSERVER_LICENSE = GPL-2.0+ +GESFTPSERVER_LICENSE_FILES = COPYING + +# "Missing prototype" warning treated as error +GESFTPSERVER_CONF_OPTS = --disable-warnings-as-errors +GESFTPSERVER_CPE_ID_VENDOR = green_end +GESFTPSERVER_CPE_ID_PRODUCT = sftpserver + +# forgets to link against pthread when cross compiling +GESFTPSERVER_CONF_ENV = LIBS=-lpthread + +# overwrite openssh version if enabled +GESFTPSERVER_DEPENDENCIES += \ + $(if $(BR2_ENABLE_LOCALE),,libiconv) \ + $(if $(BR2_PACKAGE_OPENSSH),openssh) + +# Python on the host is only used for tests, which we don't use in +# Buildroot +GESFTPSERVER_CONF_ENV += rjk_cv_python24=false + +# openssh/dropbear looks here +define GESFTPSERVER_ADD_SYMLINK + ln -sf gesftpserver $(TARGET_DIR)/usr/libexec/sftp-server +endef + +GESFTPSERVER_POST_INSTALL_TARGET_HOOKS += GESFTPSERVER_ADD_SYMLINK + +$(eval $(autotools-package)) diff --git a/package/getent/Config.in b/package/getent/Config.in new file mode 100644 index 00000000..a7303cb9 --- /dev/null +++ b/package/getent/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_GETENT + bool "getent" + help + This package installs the 'getent' utility, which allows to + get entries from Name Service Switch libraries. For glibc + toolchains, it's the real getent program from the C library + that gets installed, which is NSS-capable. For uclibc and + musl toolchains, it's a simple wrapper script that emulates + getent's behavior, since there is no NSS support in uclibc + and musl. diff --git a/package/getent/getent b/package/getent/getent new file mode 100644 index 00000000..fdda7936 --- /dev/null +++ b/package/getent/getent @@ -0,0 +1,45 @@ +#!/bin/sh +# $Header: /var/cvs/uClibc/extra/scripts/getent,v 1.2 2005/02/02 14:18:01 solar Exp $ +# +# Closely (not perfectly) emulate the behavior of glibc's getent utility +# +#passwd|shadow|group|aliases|hosts|networks|ethers|netgroup|protocols|services|rpc +# only returns the first match (by design) +# dns based search is not supported (hosts,networks) +# case-insensitive matches not supported (ethers; others?) +# may return false-positives (hosts,protocols,rpc,services,ethers) +# +# Taken from uClibc 0.9.33. + +export PATH="${PATH}:/bin:/usr/bin" + +file="/etc/$1" +case $1 in + passwd|group) + match="^$2:\|^[^:]*:[^:]*:$2:" ;; + shadow) + match="^$2:" ;; + networks|netgroup) + match="^[[:space:]]*$2\>" ;; + hosts|protocols|rpc|services|ethers) + match="\<$2\>" ;; + aliases) + match="^[[:space:]]*$2[[:space:]]*:" ;; + ""|-h|--help) + echo "USAGE: $0 database [key]" + exit 0 ;; + *) + echo "$0: Unknown database: $1" 1>&2 + exit 1 ;; +esac + +if [ ! -f "$file" ] ; then + echo "$0: Could not find database file for $1" 1>&2 + exit 1 +fi + +if [ $# -eq 1 ] ; then + exec cat "$file" +else + sed "s/#.*//; /$match/q; d" "$file" | grep . || exit 2 +fi diff --git a/package/getent/getent.mk b/package/getent/getent.mk new file mode 100644 index 00000000..4e3eaea0 --- /dev/null +++ b/package/getent/getent.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# getent +# +################################################################################ + +GETENT_LICENSE = LGPL-2.1+ + +# For glibc toolchains, we use the getent program built/installed by +# the C library. For other toolchains, we use the wrapper script +# included in this package. +ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),y) +# Sourcery toolchains install it in sysroot/usr/lib/bin +# Buildroot toolchains install it in sysroot/usr/bin +GETENT_LOCATION = $(firstword $(wildcard \ + $(STAGING_DIR)/usr/bin/getent \ + $(STAGING_DIR)/usr/lib/bin/getent)) +else +GETENT_LOCATION = package/getent/getent +endif + +define GETENT_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(GETENT_LOCATION) $(TARGET_DIR)/usr/bin/getent +endef + +$(eval $(generic-package)) diff --git a/package/gettext-gnu/0001-error_print_progname.patch b/package/gettext-gnu/0001-error_print_progname.patch new file mode 100644 index 00000000..7e1d3c55 --- /dev/null +++ b/package/gettext-gnu/0001-error_print_progname.patch @@ -0,0 +1,20 @@ +[Updated to apply cleanly with 0.20.1] +Signed-off-by: Adam Duskett +--- +diff --git a/gettext-tools/gnulib-lib/error.h b/gettext-tools/gnulib-lib/error.h +index 61771cc..4221684 100644 +--- a/gettext-tools/gnulib-lib/error.h ++++ b/gettext-tools/gnulib-lib/error.h +@@ -68,7 +68,10 @@ extern void error_at_line (int __status, int __errnum, const char *__fname, + /* If NULL, error will flush stdout, then print on stderr the program + name, a colon and a space. Otherwise, error will call this + function without parameters instead. */ +-extern DLL_VARIABLE void (*error_print_progname) (void); ++#ifndef __UCLIBC__ ++extern DLL_VARIABLE ++#endif ++void (*error_print_progname) (void); + + /* This variable is incremented each time 'error' is called. */ + extern DLL_VARIABLE unsigned int error_message_count; +-- diff --git a/package/gettext-gnu/0002-restore-the-ability-to-buld-gettext-tools-seperately-part1.patch b/package/gettext-gnu/0002-restore-the-ability-to-buld-gettext-tools-seperately-part1.patch new file mode 100644 index 00000000..5334a36b --- /dev/null +++ b/package/gettext-gnu/0002-restore-the-ability-to-buld-gettext-tools-seperately-part1.patch @@ -0,0 +1,142 @@ +From e4b3a3f56fa6fc2a51769e286545f0631bb4837c Mon Sep 17 00:00:00 2001 +From: Bruno Haible +Date: Sat, 18 May 2019 23:33:06 +0200 +Subject: [PATCH] build: Restore the ability to build gettext-tools separately, part 1. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Reported by Hanspeter Niederstrasser +in . + +Code based on patch by Miguel Ángel Arruga Vivas . + +* autogen.sh: Copy libtextstyle.m4 for use by gettext-tools. +* gettext-tools/configure.ac: New option --with-installed-libtextstyle. +(USE_INSTALLED_LIBTEXTSTYLE): New conditional. +* gettext-tools/src/Makefile.am (textstyle.h): Disable rule if +USE_INSTALLED_LIBTEXTSTYLE is true. +(LT_LIBTEXTSTYLE): New variable. +(libgettextsrc_la_LDFLAGS): Use it instead of hardcoding a relative filename of +libtextstyle.la. +* configure.ac: Filter out --with-installed-libtextstyle from inherited --help +output. +* Makefile.am (distcheck-hook): Compare different copies of libtextstyle.m4. +* PACKAGING: Document that gettext-tools's configure needs to be invoked with +--with-installed-libtextstyle. + +Upstream-status: committed. +https://git.savannah.gnu.org/gitweb/?p=gettext.git;a=commitdiff;h=e4b3a3f56fa6fc2a51769e286545f0631bb4837c + +Signed-off-by: Bruno Haible +[Backported to 0.20.1] +Signed-off-by: Adam Duskett +--- + PACKAGING | 2 +- + autogen.sh | 1 + + configure.ac | 2 +- + gettext-tools/configure.ac | 16 ++++++++++++++++ + gettext-tools/src/Makefile.am | 8 +++++++- + 5 files changed, 26 insertions(+), 3 deletions(-) + +diff --git a/PACKAGING b/PACKAGING +index a8ce979..52b80ac 100644 +--- a/PACKAGING ++++ b/PACKAGING +@@ -42,7 +42,7 @@ The 'libtextstyle' binary package can be installed by doing + The 'gettext-tools' binary package can be installed by doing + + cd gettext-tools +- ./configure ++ ./configure --with-installed-libtextstyle + make + make install + +diff --git a/autogen.sh b/autogen.sh +index 5c28b6f..2ccf373 100755 +--- a/autogen.sh ++++ b/autogen.sh +@@ -268,6 +268,7 @@ if ! $skip_gnulib; then + $GNULIB_TOOL --dir=gettext-tools --lib=libgettextlib --source-base=gnulib-lib --m4-base=gnulib-m4 --tests-base=gnulib-tests --makefile-name=Makefile.gnulib --libtool --with-tests --local-dir=gnulib-local --local-symlink \ + --import --avoid=array-list-tests --avoid=linkedhash-list-tests --avoid=hash-tests --avoid=fdutimensat-tests --avoid=futimens-tests --avoid=utime-tests --avoid=utimens-tests --avoid=utimensat-tests \ + `for m in $GNULIB_MODULES_TOOLS_LIBUNISTRING_TESTS; do echo --avoid=$m; done` $GNULIB_MODULES_TOOLS_FOR_SRC $GNULIB_MODULES_TOOLS_FOR_SRC_COMMON_DEPENDENCIES $GNULIB_MODULES_TOOLS_OTHER || exit $? ++ $GNULIB_TOOL --copy-file m4/libtextstyle.m4 gettext-tools/gnulib-m4/libtextstyle.m4 || exit $? + # In gettext-tools/libgrep: + GNULIB_MODULES_TOOLS_FOR_LIBGREP=' + mbrlen +diff --git a/configure.ac b/configure.ac +index 38db6fd..0c84bdd 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -49,7 +49,7 @@ AC_CANONICAL_HOST + dnl Optional Features: AC_ARG_ENABLE calls + dnl Optional Packages: AC_ARG_WITH calls + dnl Some influential environment variables: AC_ARG_VAR calls +-esyscmd([{ cd gettext-runtime && autoconf --trace=AC_ARG_ENABLE:'$n([$1],[$2])' --trace=AC_ARG_WITH:'$n([$1],[$2])' --trace=AC_ARG_VAR:'$n($@)' && cd ..; cd libtextstyle && autoconf --trace=AC_ARG_ENABLE:'$n([$1],[$2])' --trace=AC_ARG_WITH:'$n([$1],[$2])' --trace=AC_ARG_VAR:'$n($@)' && cd ..; cd gettext-tools && autoconf --trace=AC_ARG_ENABLE:'$n([$1],[$2])' --trace=AC_ARG_WITH:'$n([$1],[$2])' --trace=AC_ARG_VAR:'$n($@)' && cd ..; } | sed -f build-aux/ac-help.sed ]) ++esyscmd([{ cd gettext-runtime && autoconf --trace=AC_ARG_ENABLE:'$n([$1],[$2])' --trace=AC_ARG_WITH:'$n([$1],[$2])' --trace=AC_ARG_VAR:'$n($@)' && cd ..; cd libtextstyle && autoconf --trace=AC_ARG_ENABLE:'$n([$1],[$2])' --trace=AC_ARG_WITH:'$n([$1],[$2])' --trace=AC_ARG_VAR:'$n($@)' && cd ..; { cd gettext-tools && autoconf --trace=AC_ARG_ENABLE:'$n([$1],[$2])' --trace=AC_ARG_WITH:'$n([$1],[$2])' --trace=AC_ARG_VAR:'$n($@)' && cd ..; } | grep -v installed.libtextstyle; } | sed -f build-aux/ac-help.sed ]) + + AC_CONFIG_FILES([Makefile]) + +diff --git a/gettext-tools/configure.ac b/gettext-tools/configure.ac +index cf1dd73..a6816b8 100644 +--- a/gettext-tools/configure.ac ++++ b/gettext-tools/configure.ac +@@ -121,6 +121,22 @@ AM_CONDITIONAL([PACKAGE_IS_GETTEXT_TOOLS], [true]) + AM_CONDITIONAL([PRELOADABLE_LIBINTL], + [test $USE_INCLUDED_LIBINTL = no && test $GLIBC2 = yes]) + ++dnl This option allows to build gettext-tools without (re)building libtextstyle. ++AC_ARG_WITH([installed-libtextstyle], ++ [AS_HELP_STRING([--with-installed-libtextstyle], ++ [Use an already installed libtextstyle.])], ++ [gt_use_installed_libtextstyle=$withval], ++ [gt_use_installed_libtextstyle=no]) ++if test "$gt_use_installed_libtextstyle" != no; then ++ gl_LIBTEXTSTYLE ++else ++ test -f ../libtextstyle/Makefile || { ++ AC_MSG_ERROR([When building the gettext-tools package without building the entire gettext package, you need to pass the --with-installed-libtextstyle option to configure.]) ++ } ++fi ++AM_CONDITIONAL([USE_INSTALLED_LIBTEXTSTYLE], ++ [test "$gt_use_installed_libtextstyle" != no]) ++ + dnl This line internationalizes the bison generated parsers. + BISON_I18N + +diff --git a/gettext-tools/src/Makefile.am b/gettext-tools/src/Makefile.am +index b98b7ab..af3dcee 100644 +--- a/gettext-tools/src/Makefile.am ++++ b/gettext-tools/src/Makefile.am +@@ -250,6 +250,9 @@ cldr_plurals_SOURCES = cldr-plural.y cldr-plural-exp.c cldr-plurals.c + cldr_plurals_CFLAGS = $(AM_CFLAGS) $(INCXML) + cldr_plurals_LDADD = libgettextsrc.la $(LDADD) + ++if USE_INSTALLED_LIBTEXTSTYLE ++LT_LIBTEXTSTYLE = @LTLIBTEXTSTYLE@ ++else + # How to get the include files of libtextstyle. + textstyle.h textstyle/stdbool.h textstyle/version.h textstyle/woe32dll.h: + here=`pwd`; \ +@@ -257,6 +260,9 @@ textstyle.h textstyle/stdbool.h textstyle/version.h textstyle/woe32dll.h: + $(MAKE) install-nobase_includeHEADERS install-nobase_nodist_includeHEADERS includedir="$$here" + BUILT_SOURCES += textstyle.h textstyle/stdbool.h textstyle/version.h textstyle/woe32dll.h + MOSTLYCLEANFILES += textstyle.h textstyle/stdbool.h textstyle/version.h textstyle/woe32dll.h ++# Where to find the built libtextstyle library. ++LT_LIBTEXTSTYLE = ../../libtextstyle/lib/libtextstyle.la ++endif + + # How to build libgettextsrc.la. + # Need ../gnulib-lib/libgettextlib.la. +@@ -268,7 +274,7 @@ MOSTLYCLEANFILES += textstyle.h textstyle/stdbool.h textstyle/version.h textstyl + # use iconv(). + libgettextsrc_la_LDFLAGS = \ + -release @VERSION@ \ +- ../gnulib-lib/libgettextlib.la $(LTLIBUNISTRING) ../../libtextstyle/lib/libtextstyle.la @LTLIBINTL@ @LTLIBICONV@ -lc -no-undefined ++ ../gnulib-lib/libgettextlib.la $(LTLIBUNISTRING) $(LT_LIBTEXTSTYLE) @LTLIBINTL@ @LTLIBICONV@ -lc -no-undefined + + # OS/2 does not support a DLL name longer than 8 characters. + if OS2 +-- +2.24.1 + diff --git a/package/gettext-gnu/Config.in b/package/gettext-gnu/Config.in new file mode 100644 index 00000000..27e7a3da --- /dev/null +++ b/package/gettext-gnu/Config.in @@ -0,0 +1,24 @@ +config BR2_PACKAGE_GETTEXT_GNU + bool + depends on BR2_USE_WCHAR + select BR2_PACKAGE_HAS_GETTEXT + help + The GNU `gettext' utilities are a set of tools that provide a + framework to help other GNU packages produce multi-lingual + messages. + + Only the libintl library will be installed in the + target. The full gettext suite, including tools, will be + installed in the staging directory. + + http://www.gnu.org/software/gettext/ + +if BR2_PACKAGE_GETTEXT_GNU + +config BR2_PACKAGE_PROVIDES_GETTEXT + default "gettext-gnu" + +endif + +config BR2_PACKAGE_PROVIDES_HOST_GETTEXT + default "host-gettext-gnu" if BR2_SYSTEM_ENABLE_NLS diff --git a/package/gettext-gnu/gettext-gnu.hash b/package/gettext-gnu/gettext-gnu.hash new file mode 100644 index 00000000..4c17fb3e --- /dev/null +++ b/package/gettext-gnu/gettext-gnu.hash @@ -0,0 +1,7 @@ +# From https://lists.gnu.org/archive/html/info-gnu/2019-05/msg00011.html +sha1 62f4a6a2fd5f80bfd0e66c497a04094fa3e07b90 gettext-0.20.1.tar.xz + +# Locally calculated +sha256 53f02fbbec9e798b0faaf7c73272f83608e835c6288dd58be6c9bb54624a3800 gettext-0.20.1.tar.xz +sha256 e79e9c8a0c85d735ff98185918ec94ed7d175efc377012787aebcf3b80f0d90b COPYING +sha256 3fe5361f24b7c49ba12911c08f5a33f9cb18871d95d9fb881f5b8a4793e04288 gettext-runtime/intl/COPYING.LIB diff --git a/package/gettext-gnu/gettext-gnu.mk b/package/gettext-gnu/gettext-gnu.mk new file mode 100644 index 00000000..9a1eabd0 --- /dev/null +++ b/package/gettext-gnu/gettext-gnu.mk @@ -0,0 +1,103 @@ +################################################################################ +# +# gettext-gnu +# +################################################################################ + +# Please keep in sync with package/libtextstyle/libtextstyle.mk +GETTEXT_GNU_VERSION = 0.20.1 +GETTEXT_GNU_SITE = $(BR2_GNU_MIRROR)/gettext +GETTEXT_GNU_SOURCE = gettext-$(GETTEXT_GNU_VERSION).tar.xz +GETTEXT_GNU_INSTALL_STAGING = YES +GETTEXT_GNU_LICENSE = LGPL-2.1+ (libintl), GPL-3.0+ (the rest) +GETTEXT_GNU_LICENSE_FILES = COPYING gettext-runtime/intl/COPYING.LIB +GETTEXT_GNU_CPE_ID_VENDOR = gnu +GETTEXT_GNU_CPE_ID_PRODUCT = gettext +# 0002-restore-the-ability-to-buld-gettext-tools-seperately-part1.patch +GETTEXT_GNU_AUTORECONF = YES +GETTEXT_GNU_PROVIDES = gettext +GETTEXT_GNU_DEPENDENCIES = $(if $(BR2_PACKAGE_LIBICONV),libiconv) + +# Avoid using the bundled subset of libxml2 +HOST_GETTEXT_GNU_DEPENDENCIES = host-libxml2 host-libtextstyle + +GETTEXT_GNU_CONF_OPTS += \ + --disable-libasprintf \ + --disable-acl \ + --disable-openmp \ + --disable-rpath \ + --disable-java \ + --disable-native-java \ + --disable-csharp \ + --disable-relocatable \ + --without-emacs + +HOST_GETTEXT_GNU_CONF_OPTS = \ + --disable-libasprintf \ + --disable-acl \ + --disable-openmp \ + --disable-rpath \ + --disable-java \ + --disable-native-java \ + --disable-csharp \ + --disable-relocatable \ + --without-emacs \ + --with-installed-libtextstyle + +# Force the build of libintl, even if the C library provides a stub +# gettext implementation +ifeq ($(BR2_PACKAGE_GETTEXT_PROVIDES_LIBINTL),y) +GETTEXT_GNU_CONF_OPTS += --with-included-gettext +else +GETTEXT_GNU_CONF_OPTS += --without-included-gettext +endif + +# For the target version, we only need the runtime, and for the host +# version, we only need the tools. +GETTEXT_GNU_SUBDIR = gettext-runtime +HOST_GETTEXT_GNU_SUBDIR = gettext-tools + +# Disable the build of documentation and examples of gettext-tools, +# and the build of documentation and tests of gettext-runtime. +define HOST_GETTEXT_GNU_DISABLE_UNNEEDED + $(SED) '/^SUBDIRS/s/ doc //;/^SUBDIRS/s/examples$$//' $(@D)/gettext-tools/Makefile.in + $(SED) '/^SUBDIRS/s/ doc //;/^SUBDIRS/s/tests$$//' $(@D)/gettext-runtime/Makefile.in +endef + +GETTEXT_GNU_POST_PATCH_HOOKS += HOST_GETTEXT_GNU_DISABLE_UNNEEDED +HOST_GETTEXT_GNU_POST_PATCH_HOOKS += HOST_GETTEXT_GNU_DISABLE_UNNEEDED + +define GETTEXT_GNU_REMOVE_UNNEEDED + $(RM) -rf $(TARGET_DIR)/usr/share/gettext/ABOUT-NLS + rmdir --ignore-fail-on-non-empty $(TARGET_DIR)/usr/share/gettext +endef + +GETTEXT_GNU_POST_INSTALL_TARGET_HOOKS += GETTEXT_GNU_REMOVE_UNNEEDED + +# Force build with NLS support, otherwise libintl is not built +# This is needed because some packages (eg. libglib2) requires +# locales, but do not properly depend on BR2_ENABLE_LOCALE, and +# instead select BR2_PACKAGE_GETTEXT_GNU. Those packages need to be +# fixed before we can remove the following 3 lines... :-( +ifeq ($(BR2_ENABLE_LOCALE),) +GETTEXT_GNU_CONF_OPTS += --enable-nls +endif + +# Disable interactive confirmation in host gettextize for package fixups +define HOST_GETTEXT_GNU_GETTEXTIZE_CONFIRMATION + $(SED) '/read dummy/d' $(HOST_DIR)/bin/gettextize +endef +HOST_GETTEXT_GNU_POST_INSTALL_HOOKS += HOST_GETTEXT_GNU_GETTEXTIZE_CONFIRMATION + +# autoreconf expects gettextize to install ABOUT-NLS, but it only gets +# installed by gettext-runtime which we don't build/install for the +# host, so do it manually +define HOST_GETTEXT_GNU_ADD_ABOUT_NLS + $(INSTALL) -m 0644 $(@D)/$(HOST_GETTEXT_GNU_SUBDIR)/ABOUT-NLS \ + $(HOST_DIR)/share/gettext/ABOUT-NLS +endef + +HOST_GETTEXT_GNU_POST_INSTALL_HOOKS += HOST_GETTEXT_GNU_ADD_ABOUT_NLS + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/gettext-tiny/Config.in b/package/gettext-tiny/Config.in new file mode 100644 index 00000000..6f91a00b --- /dev/null +++ b/package/gettext-tiny/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_GETTEXT_TINY + bool + select BR2_PACKAGE_HAS_GETTEXT + help + Stub and/or lightweight replacements of the gnu gettext + suite; because the GNU one takes ages to compile. + + https://github.com/sabotage-linux/gettext-tiny + +if BR2_PACKAGE_GETTEXT_TINY + +config BR2_PACKAGE_PROVIDES_GETTEXT + default "gettext-tiny" + +endif + +config BR2_PACKAGE_PROVIDES_HOST_GETTEXT + default "host-gettext-tiny" if !BR2_SYSTEM_ENABLE_NLS diff --git a/package/gettext-tiny/gettext-tiny.hash b/package/gettext-tiny/gettext-tiny.hash new file mode 100644 index 00000000..5155b419 --- /dev/null +++ b/package/gettext-tiny/gettext-tiny.hash @@ -0,0 +1,6 @@ +# Locally Computed: +sha256 29cc165e27e83d2bb3760118c2368eadab550830d962d758e51bd36eb860f383 gettext-tiny-0.3.2.tar.gz +sha256 4c938aa3d8fa3c184bba5e87a8a2febc89560627c9d0567536879e3eca1a7b4f LICENSE +sha256 e79e9c8a0c85d735ff98185918ec94ed7d175efc377012787aebcf3b80f0d90b extra/COPYING +# From https://lists.gnu.org/archive/html/info-gnu/2019-05/msg00011.html +sha1 62f4a6a2fd5f80bfd0e66c497a04094fa3e07b90 gettext-0.20.1.tar.xz diff --git a/package/gettext-tiny/gettext-tiny.mk b/package/gettext-tiny/gettext-tiny.mk new file mode 100644 index 00000000..c297cb1f --- /dev/null +++ b/package/gettext-tiny/gettext-tiny.mk @@ -0,0 +1,107 @@ +################################################################################ +# +# gettext-tiny +# +################################################################################ + +GETTEXT_TINY_VERSION = 0.3.2 +GETTEXT_TINY_SITE = $(call github,sabotage-linux,gettext-tiny,v$(GETTEXT_TINY_VERSION)) +GETTEXT_TINY_LICENSE = MIT, GPL-3.0+ (extra gettext) +GETTEXT_TINY_INSTALL_STAGING = YES +GETTEXT_TINY_LICENSE_FILES = LICENSE +HOST_GETTEXT_TINY_LICENSE_FILES = LICENSE extra/COPYING + +GETTEXT_TINY_PROVIDES = gettext + +# needed for gettextize +GETTEXT_TINY_ARCHIVE_VERSION = 0.20.1 + +GETTEXT_TINY_EXTRA_GETTEXT_FILES = \ + gettext-tools/misc/gettextize.in \ + gettext-tools/po/Makevars.template \ + gettext-runtime/po/boldquot.sed \ + gettext-runtime/po/en@boldquot.header \ + gettext-runtime/po/en@quot.header \ + gettext-runtime/po/insert-header.sin \ + gettext-runtime/po/quot.sed \ + gettext-runtime/po/remove-potcdate.sin \ + gettext-runtime/po/Rules-quot \ + gettext-runtime/po/Makefile.in.in \ + COPYING + +HOST_GETTEXT_TINY_EXTRA_DOWNLOADS = $(GETTEXT_GNU_SITE)/$(GETTEXT_GNU_SOURCE) + +define HOST_GETTEXT_TINY_EXTRACT_GNU_GETTEXT + mkdir -p $(@D)/gettext-gnu + $(call suitable-extractor,$(GETTEXT_GNU_SOURCE)) \ + $(GETTEXT_TINY_DL_DIR)/$(GETTEXT_GNU_SOURCE) | \ + $(TAR) --strip-components=1 -C $(@D)/gettext-gnu $(TAR_OPTIONS) - +endef +HOST_GETTEXT_TINY_POST_EXTRACT_HOOKS += HOST_GETTEXT_TINY_EXTRACT_GNU_GETTEXT + +define HOST_GETTEXT_TINY_COPY_EXTRA_FILES + $(foreach f,$(GETTEXT_TINY_EXTRA_GETTEXT_FILES),\ + $(INSTALL) -D -m 0644 $(@D)/gettext-gnu/$(f) $(@D)/extra/$(notdir $(f)) + ) + $(INSTALL) -D -m 0755 $(@D)/gettext-gnu/build-aux/config.rpath \ + $(@D)/build-aux/config.rpath +endef +HOST_GETTEXT_TINY_POST_PATCH_HOOKS += HOST_GETTEXT_TINY_COPY_EXTRA_FILES + +define HOST_GETTEXT_TINY_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) \ + $(HOST_CONFIGURE_OPTS) \ + prefix=$(HOST_DIR) \ + CFLAGS="$(HOST_CFLAGS) -fPIC" \ + LIBINTL=NONE + + cp $(@D)/extra/gettextize.in $(@D)/gettextize + + $(SED) 's,@PACKAGE@,gettext-tools,g;' $(@D)/gettextize + $(SED) 's,@VERSION@,$(GETTEXT_GNU_VERSION),g;' $(@D)/gettextize + $(SED) 's,@ARCHIVE_VERSION@,$(GETTEXT_TINY_ARCHIVE_VERSION),' $(@D)/gettextize + $(SED) 's,@prefix@,$(HOST_DIR),g;' $(@D)/gettextize + $(SED) 's,@datarootdir@,$${prefix}/share,g;' $(@D)/gettextize + $(SED) 's,@datadir@,$${prefix}/share,g;' $(@D)/gettextize + $(SED) 's,@PATH_SEPARATOR@,:,g;' $(@D)/gettextize + $(SED) 's,@RELOCATABLE@,no,g;' $(@D)/gettextize + $(SED) 's,@exec_prefix@,$${prefix},g;' $(@D)/gettextize + $(SED) 's,@bindir@,$${exec_prefix}/bin,g;' $(@D)/gettextize +endef + +define HOST_GETTEXT_TINY_INSTALL_CMDS + $(Q)mkdir -p $(HOST_DIR)/share/gettext-tiny/po + $(Q)mkdir -p $(HOST_DIR)/share/gettext-tiny/m4 + + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) \ + $(HOST_CONFIGURE_OPTS) \ + prefix=$(HOST_DIR) \ + LIBINTL=NONE install + + $(SED) '/read dummy/d' $(@D)/gettextize + + $(INSTALL) -m 0755 -D $(@D)/gettextize $(HOST_DIR)/bin/gettextize + $(INSTALL) -m 0644 -D $(@D)/build-aux/config.rpath $(HOST_DIR)/share/gettext-tiny/config.rpath + $(INSTALL) -m 0644 -D $(@D)/extra/Makefile.in.in $(HOST_DIR)/share/gettext-tiny/po/Makefile.in.in + $(INSTALL) -m 0644 -D $(@D)/extra/boldquot.sed $(HOST_DIR)/share/gettext-tiny/po/boldquot.sed + $(INSTALL) -m 0644 -D $(@D)/extra/en@boldquot.header $(HOST_DIR)/share/gettext-tiny/po/en@boldquot.header + $(INSTALL) -m 0644 -D $(@D)/extra/en@quot.header $(HOST_DIR)/share/gettext-tiny/po/en@quot.header + $(INSTALL) -m 0644 -D $(@D)/extra/insert-header.sin $(HOST_DIR)/share/gettext-tiny/po/insert-header.sin + $(INSTALL) -m 0644 -D $(@D)/extra/quot.sed $(HOST_DIR)/share/gettext-tiny/po/quot.sed + $(INSTALL) -m 0644 -D $(@D)/extra/remove-potcdate.sin $(HOST_DIR)/share/gettext-tiny/po/remove-potcdate.sin + $(INSTALL) -m 0644 -D $(@D)/extra/Rules-quot $(HOST_DIR)/share/gettext-tiny/po/Rules-quot + $(INSTALL) -m 0644 -D $(@D)/extra/Makevars.template $(HOST_DIR)/share/gettext-tiny/po/Makevars.template + + $(Q)touch $(HOST_DIR)/share/gettext-tiny/ABOUT-NLS + + # for gettextize + ln -sf $(HOST_DIR)/usr/share/gettext-tiny $(HOST_DIR)/usr/share/gettext +endef + +# Install simple echo wrapper for gettext tool +define GETTEXT_TINY_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(GETTEXT_TINY_PKGDIR)/gettext-wrapper $(TARGET_DIR)/usr/bin/gettext +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/gettext-tiny/gettext-wrapper b/package/gettext-tiny/gettext-wrapper new file mode 100644 index 00000000..11424824 --- /dev/null +++ b/package/gettext-tiny/gettext-wrapper @@ -0,0 +1,24 @@ +#!/bin/sh +# +# Thanks to "Yann E. MORIN" +# for this gettext replacement. + +while [ ${#} -ne 0 ]; do + case "${1}" in + (-h) printf "no help\n"; return 0;; + (-V) printf "0.0.0\n"; return 0;; + (-d|--domain) shift 2;; + (-d*|--domain=*) shift 1;; + (-e|-E|-n) shift 1;; + (-s) shift 1;; # Ignore? + (-*) printf "invalid option '%s'\n" "${1}" >&2; return 1;; + (*) break;; + esac +done + +case ${#} in + (0) printf "missing arguments\n" >&2; return 1;; + (1) printf "%s" "${1}";; + (2) printf "%s" "${2}";; + (*) printf "too many arguments\n" >&2; return 1;; +esac diff --git a/package/gettext/Config.in b/package/gettext/Config.in new file mode 100644 index 00000000..6d83388c --- /dev/null +++ b/package/gettext/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_GETTEXT + bool "gettext" + select BR2_PACKAGE_GETTEXT_GNU if BR2_SYSTEM_ENABLE_NLS + select BR2_PACKAGE_GETTEXT_TINY if !BR2_SYSTEM_ENABLE_NLS + +config BR2_PACKAGE_GETTEXT_PROVIDES_LIBINTL + bool + default y if BR2_SYSTEM_ENABLE_NLS + depends on !BR2_TOOLCHAIN_HAS_FULL_GETTEXT + +config BR2_PACKAGE_HAS_GETTEXT + bool + +config BR2_PACKAGE_PROVIDES_GETTEXT + string + +config BR2_PACKAGE_PROVIDES_HOST_GETTEXT + string diff --git a/package/gettext/gettext.mk b/package/gettext/gettext.mk new file mode 100644 index 00000000..146d40e1 --- /dev/null +++ b/package/gettext/gettext.mk @@ -0,0 +1,10 @@ +################################################################################ +# +# gettext +# +################################################################################ + +GETTEXTIZE = $(HOST_CONFIGURE_OPTS) AUTOM4TE=$(HOST_DIR)/bin/autom4te $(HOST_DIR)/bin/gettextize -f + +$(eval $(virtual-package)) +$(eval $(host-virtual-package)) diff --git a/package/gflags/Config.in b/package/gflags/Config.in new file mode 100644 index 00000000..ed059445 --- /dev/null +++ b/package/gflags/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_GFLAGS + bool "gflags" + depends on BR2_INSTALL_LIBSTDCPP + help + The gflags package contains a C++ library that implements + commandline flags processing. It includes built-in support for + standard types such as string and the ability to define flags + in the source file in which they are used. + + https://github.com/gflags/gflags + +comment "gflags needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/gflags/gflags.hash b/package/gflags/gflags.hash new file mode 100644 index 00000000..1f7fe603 --- /dev/null +++ b/package/gflags/gflags.hash @@ -0,0 +1,5 @@ +# Locally computed +sha256 34af2f15cf7367513b352bdcd2493ab14ce43692d2dcd9dfc499492966c64dcf gflags-2.2.2.tar.gz + +# Hash for license file: +sha256 90d1f3701813c3cd65eee2dc736746fe46b465918f3f7d6d31463a2018b33fa5 COPYING.txt diff --git a/package/gflags/gflags.mk b/package/gflags/gflags.mk new file mode 100644 index 00000000..f32869f7 --- /dev/null +++ b/package/gflags/gflags.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# gflags +# +################################################################################ + +GFLAGS_VERSION = 2.2.2 +GFLAGS_SITE = $(call github,gflags,gflags,v$(GFLAGS_VERSION)) +GFLAGS_INSTALL_STAGING = YES +GFLAGS_LICENSE = BSD-3-Clause +GFLAGS_LICENSE_FILES = COPYING.txt + +# Force Release otherwise libraries will be suffixed by _debug which will raise +# unexpected build failures with packages that use gflags (e.g. rocksdb) +GFLAGS_CONF_OPTS = -DCMAKE_BUILD_TYPE=Release + +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),) +GFLAGS_CONF_OPTS += -DBUILD_gflags_LIB=OFF \ + -DCMAKE_CXX_FLAGS="$(TARGET_CXXFLAGS) -DNO_THREADS" +endif + +$(eval $(cmake-package)) diff --git a/package/ghostscript-fonts/Config.in b/package/ghostscript-fonts/Config.in new file mode 100644 index 00000000..9b9b8d0c --- /dev/null +++ b/package/ghostscript-fonts/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_GHOSTSCRIPT_FONTS + bool "ghostscript-fonts" + help + Fonts and font metrics customarily distributed with + Ghostscript. Currently includes the 35 standard PostScript + fonts and a grab-bag of others. + + http://sourceforge.net/projects/gs-fonts diff --git a/package/ghostscript-fonts/ghostscript-fonts.hash b/package/ghostscript-fonts/ghostscript-fonts.hash new file mode 100644 index 00000000..d6df0e74 --- /dev/null +++ b/package/ghostscript-fonts/ghostscript-fonts.hash @@ -0,0 +1,5 @@ +# From http://sourceforge.net/projects/gs-fonts/files/gs-fonts/8.11%20%28base%2035%2C%20GPL%29/ +sha1 2a7198e8178b2e7dba87cb5794da515200b568f5 ghostscript-fonts-std-8.11.tar.gz +# Locally computed +sha256 0eb6f356119f2e49b2563210852e17f57f9dcc5755f350a69a46a0d641a0c401 ghostscript-fonts-std-8.11.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/ghostscript-fonts/ghostscript-fonts.mk b/package/ghostscript-fonts/ghostscript-fonts.mk new file mode 100644 index 00000000..156eb4c3 --- /dev/null +++ b/package/ghostscript-fonts/ghostscript-fonts.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# ghostscript-fonts +# +################################################################################ + +GHOSTSCRIPT_FONTS_VERSION = 8.11 +GHOSTSCRIPT_FONTS_SITE = http://downloads.sourceforge.net/project/gs-fonts/gs-fonts/8.11%20%28base%2035%2C%20GPL%29 +GHOSTSCRIPT_FONTS_SOURCE = ghostscript-fonts-std-$(GHOSTSCRIPT_FONTS_VERSION).tar.gz +GHOSTSCRIPT_FONTS_LICENSE = GPL-2.0 +GHOSTSCRIPT_FONTS_LICENSE_FILES = COPYING + +GHOSTSCRIPT_FONTS_TARGET_DIR = $(TARGET_DIR)/usr/share/fonts/gs + +define GHOSTSCRIPT_FONTS_INSTALL_TARGET_CMDS + mkdir -p $(GHOSTSCRIPT_FONTS_TARGET_DIR) + $(INSTALL) -m 644 $(@D)/*.afm $(GHOSTSCRIPT_FONTS_TARGET_DIR) + $(INSTALL) -m 644 $(@D)/*.pfb $(GHOSTSCRIPT_FONTS_TARGET_DIR) +endef + +$(eval $(generic-package)) diff --git a/package/ghostscript/0001-bug-702985-drop-use-of-FT_CALLBACK_DEF.patch b/package/ghostscript/0001-bug-702985-drop-use-of-FT_CALLBACK_DEF.patch new file mode 100644 index 00000000..044dcc72 --- /dev/null +++ b/package/ghostscript/0001-bug-702985-drop-use-of-FT_CALLBACK_DEF.patch @@ -0,0 +1,55 @@ +From 41ef9a0bc36b9db7115fbe9623f989bfb47bbade Mon Sep 17 00:00:00 2001 +From: Chris Liddell +Date: Tue, 20 Oct 2020 09:49:45 +0100 +Subject: [PATCH] Bug 702985: drop use of FT_CALLBACK_DEF() def + +From 2.10.3, Freetype disappeared the FT_CALLBACK_DEF() macro, which is what +we used when defining our callbacks from Freetype. + +No guidance forthcoming from the Freetype developer who made those changes, +so change to explicitly declaring the callbacks file static. + +Should fix the reported build failures. + +Downloaded from upstream commit: +https://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=41ef9a0bc36b + +Signed-off-by: Bernd Kuhls +--- + base/fapi_ft.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/base/fapi_ft.c b/base/fapi_ft.c +index 65fa6dcf4..21aef2f06 100644 +--- a/base/fapi_ft.c ++++ b/base/fapi_ft.c +@@ -125,7 +125,7 @@ static void + delete_inc_int_info(gs_fapi_server * a_server, + FT_IncrementalRec * a_inc_int_info); + +-FT_CALLBACK_DEF(void *) ++static void * + FF_alloc(FT_Memory memory, long size) + { + gs_memory_t *mem = (gs_memory_t *) memory->user; +@@ -133,7 +133,7 @@ FF_alloc(FT_Memory memory, long size) + return (gs_malloc(mem, size, 1, "FF_alloc")); + } + +-FT_CALLBACK_DEF(void *) ++static void * + FF_realloc(FT_Memory memory, long cur_size, long new_size, void *block) + { + gs_memory_t *mem = (gs_memory_t *) memory->user; +@@ -153,7 +153,7 @@ FT_CALLBACK_DEF(void *) + return (tmp); + } + +-FT_CALLBACK_DEF(void) ++static void + FF_free(FT_Memory memory, void *block) + { + gs_memory_t *mem = (gs_memory_t *) memory->user; +-- +2.17.1 + diff --git a/package/ghostscript/Config.in b/package/ghostscript/Config.in new file mode 100644 index 00000000..023ef5f2 --- /dev/null +++ b/package/ghostscript/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_GHOSTSCRIPT + bool "ghostscript" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_FONTCONFIG + select BR2_PACKAGE_GHOSTSCRIPT_FONTS + select BR2_PACKAGE_JPEG + select BR2_PACKAGE_LCMS2 + select BR2_PACKAGE_LIBPNG + select BR2_PACKAGE_TIFF + help + Ghostscript is an interpreter for PostScript and Portable + Document Format (PDF) files. + + http://ghostscript.com diff --git a/package/ghostscript/ghostscript.hash b/package/ghostscript/ghostscript.hash new file mode 100644 index 00000000..f6cedc61 --- /dev/null +++ b/package/ghostscript/ghostscript.hash @@ -0,0 +1,5 @@ +# From https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs9533/SHA512SUMS +sha512 c142ef9d83896aa8fd18c8e412220fe8f4950614be00d327d27ab051fe85e16524bf2ee00f46c2aca7a352ce47bc3acf2c4de0f7bbea7e4c55474b8af6cdc0a6 ghostscript-9.53.3.tar.gz + +# Hash for license file: +sha256 6f852249f975287b3efd43a5883875e47fa9f3125e2f1b18b5c09517ac30ecf2 LICENSE diff --git a/package/ghostscript/ghostscript.mk b/package/ghostscript/ghostscript.mk new file mode 100644 index 00000000..5b50c944 --- /dev/null +++ b/package/ghostscript/ghostscript.mk @@ -0,0 +1,85 @@ +################################################################################ +# +# ghostscript +# +################################################################################ + +GHOSTSCRIPT_VERSION = 9.53.3 +GHOSTSCRIPT_SITE = https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs$(subst .,,$(GHOSTSCRIPT_VERSION)) +GHOSTSCRIPT_LICENSE = AGPL-3.0 +GHOSTSCRIPT_LICENSE_FILES = LICENSE +GHOSTSCRIPT_CPE_ID_VENDOR = artifex +GHOSTSCRIPT_DEPENDENCIES = \ + host-lcms2 \ + host-libjpeg \ + host-pkgconf \ + host-zlib \ + fontconfig \ + ghostscript-fonts \ + jpeg \ + lcms2 \ + libpng \ + tiff + +# Ghostscript includes (old) copies of several libraries, delete them. +# Inspired by linuxfromscratch: +# http://www.linuxfromscratch.org/blfs/view/svn/pst/gs.html +define GHOSTSCRIPT_REMOVE_LIBS + rm -rf $(@D)/freetype $(@D)/ijs $(@D)/jbig2dec $(@D)/jpeg \ + $(@D)/lcms2mt $(@D)/libpng $(@D)/openjpeg $(@D)/tiff \ + $(@D)/zlib +endef +GHOSTSCRIPT_POST_PATCH_HOOKS += GHOSTSCRIPT_REMOVE_LIBS + +GHOSTSCRIPT_CONF_ENV = \ + CCAUX="$(HOSTCC)" \ + CFLAGSAUX="$(HOST_CFLAGS) $(HOST_LDFLAGS)" \ + PKGCONFIG="$(PKG_CONFIG_HOST_BINARY)" + +GHOSTSCRIPT_CONF_OPTS = \ + --disable-compile-inits \ + --enable-fontconfig \ + --with-fontpath=/usr/share/fonts \ + --enable-freetype \ + --disable-gtk \ + --without-libpaper \ + --with-system-libtiff + +ifeq ($(BR2_PACKAGE_JBIG2DEC),y) +GHOSTSCRIPT_DEPENDENCIES += jbig2dec +GHOSTSCRIPT_CONF_OPTS += --with-jbig2dec +else +GHOSTSCRIPT_CONF_OPTS += --without-jbig2dec +endif + +ifeq ($(BR2_PACKAGE_LIBIDN),y) +GHOSTSCRIPT_DEPENDENCIES += libidn +GHOSTSCRIPT_CONF_OPTS += --with-libidn +else +GHOSTSCRIPT_CONF_OPTS += --without-libidn +endif + +ifeq ($(BR2_PACKAGE_OPENJPEG),y) +GHOSTSCRIPT_DEPENDENCIES += openjpeg +GHOSTSCRIPT_CONF_OPTS += --enable-openjpeg +else +GHOSTSCRIPT_CONF_OPTS += --disable-openjpeg +endif + +ifeq ($(BR2_PACKAGE_CUPS),y) +GHOSTSCRIPT_DEPENDENCIES += cups +GHOSTSCRIPT_CONF_OPTS += \ + CUPSCONFIG=$(STAGING_DIR)/usr/bin/cups-config \ + --enable-cups +else +GHOSTSCRIPT_CONF_OPTS += --disable-cups +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBX11),y) +GHOSTSCRIPT_DEPENDENCIES += xlib_libX11 +GHOSTSCRIPT_CONF_OPTS += --with-x +else +GHOSTSCRIPT_CONF_OPTS += --without-x +endif + +$(eval $(autotools-package)) diff --git a/package/giblib/0001-fix-imlib2-detection.patch b/package/giblib/0001-fix-imlib2-detection.patch new file mode 100644 index 00000000..23231079 --- /dev/null +++ b/package/giblib/0001-fix-imlib2-detection.patch @@ -0,0 +1,127 @@ +configure.ac + Makefile.am: fix the imlib2 detection + +Although imlib2 is correctly checked for, the variables used to get +the CFLAGS and LIBS are wrong (perhaps a remnant of the pre-imlib2 +era, when giblib was using imlib). + +Signed-off-by: "Yann E. MORIN" + +diff --git a/configure.ac b/configure.ac +index 6807d86..c8874f0 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -18,16 +18,10 @@ AM_MAINTAINER_MODE + AM_WITH_DMALLOC + + AC_PATH_GENERIC(imlib2, 1.0.0, [ +- AC_SUBST(IMLIB_LIBS) +- AC_SUBST(IMLIB_CFLAGS) ], ++ AC_SUBST(IMLIB2_LIBS) ++ AC_SUBST(IMLIB2_CFLAGS) ], + AC_MSG_ERROR(Cannot find imlib2: Is imlib2-config in the path?) ) + +-dnl the above doesn't work for some reason :/ +-IMLIB_LIBS=`imlib2-config --libs` +-IMLIB_CFLAGS=`imlib2-config --cflags` +-AC_SUBST(IMLIB_LIBS) +-AC_SUBST(IMLIB_CFLAGS) +- + LIBS="$LIBS -lm" + CFLAGS="$CFLAGS -Wall" + +@@ -48,7 +42,7 @@ $PACKAGE $VERSION + Configuration: + -------------- + +-Imlib2 libs: $IMLIB_LIBS +-Imlib2 cflags: $IMLIB_CFLAGS ++Imlib2 libs: $IMLIB2_LIBS ++Imlib2 cflags: $IMLIB2_CFLAGS + CFLAGS: $CFLAGS + " +diff --git a/configure.in b/configure.in +index 432cb16..6999095 100644 +--- a/configure.in ++++ b/configure.in +@@ -17,16 +17,10 @@ AM_MAINTAINER_MODE + AM_WITH_DMALLOC + + AC_PATH_GENERIC(imlib2, 1.0.0, [ +- AC_SUBST(IMLIB_LIBS) +- AC_SUBST(IMLIB_CFLAGS) ], ++ AC_SUBST(IMLIB2_LIBS) ++ AC_SUBST(IMLIB2_CFLAGS) ], + AC_MSG_ERROR(Cannot find imlib2: Is imlib2-config in the path?) ) + +-dnl the above doesn't work for some reason :/ +-IMLIB_LIBS=`imlib2-config --libs` +-IMLIB_CFLAGS=`imlib2-config --cflags` +-AC_SUBST(IMLIB_LIBS) +-AC_SUBST(IMLIB_CFLAGS) +- + LIBS="$LIBS -lm" + CFLAGS="$CFLAGS -Wall" + +@@ -45,7 +39,7 @@ $PACKAGE $VERSION + Configuration: + -------------- + +-Imlib2 libs: $IMLIB_LIBS +-Imlib2 cflags: $IMLIB_CFLAGS ++Imlib2 libs: $IMLIB2_LIBS ++Imlib2 cflags: $IMLIB2_CFLAGS + CFLAGS: $CFLAGS + " +diff --git a/giblib-config.in b/giblib-config.in +index f3a7db6..cef1620 100644 +--- a/giblib-config.in ++++ b/giblib-config.in +@@ -42,11 +42,11 @@ while test $# -gt 0; do + if test @includedir@ != /usr/include ; then + includes=-I@includedir@ + fi +- echo $includes -I$prefix/include/giblib @IMLIB_CFLAGS@ ++ echo $includes -I$prefix/include/giblib @IMLIB2_CFLAGS@ + ;; + --libs) + libdirs=-L@libdir@ +- echo $libdirs -lgiblib @LDFLAGS@ @IMLIB_LIBS@ ++ echo $libdirs -lgiblib @LDFLAGS@ @IMLIB2_LIBS@ + ;; + *) + echo "${usage}" 1>&2 +diff --git a/giblib.pc.in b/giblib.pc.in +index df520ae..783e6e1 100644 +--- a/giblib.pc.in ++++ b/giblib.pc.in +@@ -6,6 +6,6 @@ includedir=@includedir@ + Name: giblib + Description: wrapper library for imlib2, and other stuff + Version: @VERSION@ +-Libs: -L${libdir} -lgiblib @LDFLAGS@ @IMLIB_LIBS@ +-Cflags: -I${includedir} -I${includedir}/giblib @IMLIB_CFLAGS@ ++Libs: -L${libdir} -lgiblib @LDFLAGS@ @IMLIB2_LIBS@ ++Cflags: -I${includedir} -I${includedir}/giblib @IMLIB2_CFLAGS@ + +diff --git a/giblib/Makefile.am b/giblib/Makefile.am +index d1edc09..49d8ac4 100644 +--- a/giblib/Makefile.am ++++ b/giblib/Makefile.am +@@ -3,7 +3,7 @@ MAINTAINERCLEANFILES = Makefile.in + + INCLUDES = \ + -I. -I$(top_srcdir) \ +--DPREFIX=\""$(prefix)"\" @IMLIB_CFLAGS@ ++-DPREFIX=\""$(prefix)"\" @IMLIB2_CFLAGS@ + + lib_LTLIBRARIES = libgiblib.la + +@@ -24,7 +24,7 @@ libgiblib_la_SOURCES = \ + gib_utils.c gib_utils.h \ + gib_queue.c gib_queue.h + +-libgiblib_la_LIBADD = @IMLIB_LIBS@ ++libgiblib_la_LIBADD = @IMLIB2_LIBS@ + libgiblib_la_DEPENDENCIES = giblib_config.h + libgiblib_la_LDFLAGS = -version-info 1:6:0 + diff --git a/package/giblib/Config.in b/package/giblib/Config.in new file mode 100644 index 00000000..f50271ac --- /dev/null +++ b/package/giblib/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_GIBLIB + bool "giblib" + depends on BR2_PACKAGE_XORG7 + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_IMLIB2 + select BR2_PACKAGE_IMLIB2_X + help + Giblib is a simple library which wraps imlib2. + + http://linuxbrit.co.uk/giblib/ + +comment "giblib support needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/giblib/giblib.hash b/package/giblib/giblib.hash new file mode 100644 index 00000000..0c83a554 --- /dev/null +++ b/package/giblib/giblib.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 176611c4d88d742ea4013991ad54c2f9d2feefbc97a28434c0f48922ebaa8bac giblib-1.2.4.tar.gz +sha256 8601e2dacede853fe325f7fd3a11f93b1753d576db60426f1b0ff4e68f41ff07 COPYING diff --git a/package/giblib/giblib.mk b/package/giblib/giblib.mk new file mode 100644 index 00000000..b0a96200 --- /dev/null +++ b/package/giblib/giblib.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# giblib +# +################################################################################ + +GIBLIB_VERSION = 1.2.4 +GIBLIB_SITE = http://linuxbrit.co.uk/downloads +GIBLIB_INSTALL_STAGING = YES +GIBLIB_DEPENDENCIES = imlib2 +GIBLIB_AUTORECONF = YES +GIBLIB_CONF_OPTS = \ + --with-imlib2-prefix=$(STAGING_DIR)/usr \ + --with-imlib2-exec-prefix=$(STAGING_DIR)/usr +GIBLIB_CONFIG_SCRIPTS = giblib-config +GIBLIB_LICENSE = MIT +GIBLIB_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/giflib/0001-Makefile-add-targets-to-manage-static-building.patch b/package/giflib/0001-Makefile-add-targets-to-manage-static-building.patch new file mode 100644 index 00000000..384457d0 --- /dev/null +++ b/package/giflib/0001-Makefile-add-targets-to-manage-static-building.patch @@ -0,0 +1,69 @@ +From 487407d722714f13e8a06d1a9d89f48a5738191e Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Fri, 12 Jul 2019 12:20:38 +0200 +Subject: [PATCH] Makefile: add targets to manage static building + +Add static-lib, shared-lib, install-static-lib and install-shared-lib +targets to allow the user to build giflib when dynamic library support +is not available or enable on the toolchain + +Signed-off-by: Fabrice Fontaine +[Upstream status: +https://sourceforge.net/p/giflib/code/merge-requests/7] +--- + Makefile | 18 ++++++++++++++---- + 1 file changed, 14 insertions(+), 4 deletions(-) + +diff --git a/Makefile b/Makefile +index b2bf6de..111f52f 100644 +--- a/Makefile ++++ b/Makefile +@@ -61,10 +61,17 @@ UTILS = $(INSTALLABLE) \ + + LDLIBS=libgif.a -lm + +-all: libgif.so libgif.a libutil.so libutil.a $(UTILS) ++SHARED_LIBS = libgif.so libutil.so ++STATIC_LIBS = libgif.a libutil.a ++ ++all: shared-lib static-lib $(UTILS) + $(MAKE) -C doc + +-$(UTILS):: libgif.a libutil.a ++$(UTILS):: $(STATIC_LIBS) ++ ++shared-lib: $(SHARED_LIBS) ++ ++static-lib: $(STATIC_LIBS) + + libgif.so: $(OBJECTS) $(HEADERS) + $(CC) $(CFLAGS) -shared $(LDFLAGS) -Wl,-soname -Wl,libgif.so.$(LIBMAJOR) -o libgif.so $(OBJECTS) +@@ -79,7 +86,7 @@ libutil.a: $(UOBJECTS) $(UHEADERS) + $(AR) rcs libutil.a $(UOBJECTS) + + clean: +- rm -f $(UTILS) $(TARGET) libgetarg.a libgif.a libgif.so libutil.a libutil.so *.o ++ rm -f $(UTILS) $(TARGET) libgetarg.a $(SHARED_LIBS) $(STATIC_LIBS) *.o + rm -f libgif.so.$(LIBMAJOR).$(LIBMINOR).$(LIBPOINT) + rm -f libgif.so.$(LIBMAJOR) + rm -fr doc/*.1 *.html doc/staging +@@ -96,12 +103,15 @@ install-bin: $(INSTALLABLE) + install-include: + $(INSTALL) -d "$(DESTDIR)$(INCDIR)" + $(INSTALL) -m 644 gif_lib.h "$(DESTDIR)$(INCDIR)" +-install-lib: ++install-static-lib: + $(INSTALL) -d "$(DESTDIR)$(LIBDIR)" + $(INSTALL) -m 644 libgif.a "$(DESTDIR)$(LIBDIR)/libgif.a" ++install-shared-lib: ++ $(INSTALL) -d "$(DESTDIR)$(LIBDIR)" + $(INSTALL) -m 755 libgif.so "$(DESTDIR)$(LIBDIR)/libgif.so.$(LIBVER)" + ln -sf libgif.so.$(LIBVER) "$(DESTDIR)$(LIBDIR)/libgif.so.$(LIBMAJOR)" + ln -sf libgif.so.$(LIBMAJOR) "$(DESTDIR)$(LIBDIR)/libgif.so" ++install-lib: install-static-lib install-shared-lib + install-man: + $(INSTALL) -d "$(DESTDIR)$(MANDIR)/man1" + $(INSTALL) -m 644 doc/*.1 "$(DESTDIR)$(MANDIR)/man1" +-- +2.20.1 + diff --git a/package/giflib/Config.in b/package/giflib/Config.in new file mode 100644 index 00000000..fc1f85d0 --- /dev/null +++ b/package/giflib/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_GIFLIB + bool "giflib" + help + giflib is a library for reading and writing gif images. + + http://sourceforge.net/projects/giflib diff --git a/package/giflib/giflib.hash b/package/giflib/giflib.hash new file mode 100644 index 00000000..f7db1626 --- /dev/null +++ b/package/giflib/giflib.hash @@ -0,0 +1,5 @@ +# From http://sourceforge.net/projects/giflib/files +md5 6f03aee4ebe54ac2cc1ab3e4b0a049e5 giflib-5.2.1.tar.gz +sha1 c3f774dcbdf26afded7788979c8081d33c6426dc giflib-5.2.1.tar.gz +# Locally computed +sha256 0c9b7990ecdca88b676db232c226548ac408b279f550d424d996f0d83591dd8e COPYING diff --git a/package/giflib/giflib.mk b/package/giflib/giflib.mk new file mode 100644 index 00000000..d47edfaa --- /dev/null +++ b/package/giflib/giflib.mk @@ -0,0 +1,49 @@ +################################################################################ +# +# giflib +# +################################################################################ + +GIFLIB_VERSION = 5.2.1 +GIFLIB_SITE = http://downloads.sourceforge.net/project/giflib +GIFLIB_INSTALL_STAGING = YES +GIFLIB_LICENSE = MIT +GIFLIB_LICENSE_FILES = COPYING +GIFLIB_CPE_ID_VENDOR = giflib_project + +ifeq ($(BR2_STATIC_LIBS),y) +GIFLIB_BUILD_LIBS = static-lib +GIFLIB_INSTALL_LIBS = install-static-lib +else ifeq ($(BR2_SHARED_LIBS),y) +GIFLIB_BUILD_LIBS = shared-lib +GIFLIB_INSTALL_LIBS = install-shared-lib +else +GIFLIB_BUILD_LIBS = static-lib shared-lib +GIFLIB_INSTALL_LIBS = install-lib +endif + +define GIFLIB_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) $(GIFLIB_BUILD_LIBS) +endef + +define HOST_GIFLIB_BUILD_CMDS + $(HOST_CONFIGURE_OPTS) $(MAKE) -C $(@D) +endef + +define GIFLIB_INSTALL_STAGING_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) \ + PREFIX=/usr install-include $(GIFLIB_INSTALL_LIBS) +endef + +define GIFLIB_INSTALL_TARGET_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) \ + PREFIX=/usr install-include $(GIFLIB_INSTALL_LIBS) +endef + +define HOST_GIFLIB_INSTALL_CMDS + $(HOST_CONFIGURE_OPTS) $(MAKE) -C $(@D) DESTDIR=$(HOST_DIR) \ + PREFIX=/usr install +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/git-crypt/Config.in b/package/git-crypt/Config.in new file mode 100644 index 00000000..9a270b8f --- /dev/null +++ b/package/git-crypt/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_GIT_CRYPT + bool "git-crypt" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C++11 + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # exception_ptr + depends on BR2_USE_MMU # git + select BR2_PACKAGE_GIT # runtime + select BR2_PACKAGE_OPENSSL + help + git-crypt enables transparent encryption and decryption of + files in a git repository. + + https://www.agwa.name/projects/git-crypt/ + +comment "git-crypt needs a toolchain w/ C++, gcc >= 4.9" + depends on !BR2_INSTALL_LIBSTDCPP \ + || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + depends on BR2_USE_MMU + +comment "git-crypt needs a toolchain not affected by GCC bug 64735" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 diff --git a/package/git-crypt/git-crypt.hash b/package/git-crypt/git-crypt.hash new file mode 100644 index 00000000..973432d7 --- /dev/null +++ b/package/git-crypt/git-crypt.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +sha256 6d30fcd99442d50f4b3c8d554067ff1d980cdf9f3120ee774131172dba98fd6f git-crypt-0.6.0.tar.gz +# Locally calculated +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING +sha256 506657e7a381165550e6c33e35b3b03bbef3e1feb68ba5529e264bd75ed2dc64 parse_options.hpp diff --git a/package/git-crypt/git-crypt.mk b/package/git-crypt/git-crypt.mk new file mode 100644 index 00000000..37e3d885 --- /dev/null +++ b/package/git-crypt/git-crypt.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# git-crypt +# +################################################################################ + +GIT_CRYPT_VERSION = 0.6.0 +GIT_CRYPT_SITE = https://www.agwa.name/projects/git-crypt/downloads +GIT_CRYPT_DEPENDENCIES = host-pkgconf openssl +GIT_CRYPT_LICENSE = GPL-3.0+, MIT +GIT_CRYPT_LICENSE_FILES = COPYING parse_options.hpp + +GIT_CRYPT_LIBS = `$(PKG_CONFIG_HOST_BINARY) --libs openssl` + +define GIT_CRYPT_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) \ + LDFLAGS="$(TARGET_LDFLAGS) $(GIT_CRYPT_LIBS)" \ + CXXFLAGS="$(TARGET_CXXFLAGS) -std=c++11" PREFIX=/usr +endef + +define GIT_CRYPT_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) \ + PREFIX=/usr install +endef + +$(eval $(generic-package)) diff --git a/package/git/0001-Fix-build-without-threads.patch b/package/git/0001-Fix-build-without-threads.patch new file mode 100644 index 00000000..7ce85ffa --- /dev/null +++ b/package/git/0001-Fix-build-without-threads.patch @@ -0,0 +1,100 @@ +From 07d66af3b0800764087c4151d4f6562d4f8cce05 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 14 Dec 2020 23:00:33 +0100 +Subject: [PATCH] Fix build without threads + +Build without threads is broken since version 2.29.0 and +https://github.com/git/git/commit/15b52a44e0c92a0658e891194a5b0610d1f53afc: + +In file included from cache.h:4, + from blame.c:1: +git-compat-util.h:1238:20: error: static declaration of 'flockfile' follows non-static declaration + static inline void flockfile(FILE *fh) + ^~~~~~~~~ +In file included from git-compat-util.h:168, + from cache.h:4, + from blame.c:1: +/nvme/rc-buildroot-test/scripts/instance-0/output-1/host/arm-buildroot-linux-uclibcgnueabihf/sysroot/usr/include/stdio.h:806:13: note: previous declaration of 'flockfile' was here + extern void flockfile (FILE *__stream) __THROW; + ^~~~~~~~~ +In file included from cache.h:4, + from blame.c:1: +git-compat-util.h:1242:20: error: static declaration of 'funlockfile' follows non-static declaration + static inline void funlockfile(FILE *fh) + ^~~~~~~~~~~ +In file included from git-compat-util.h:168, + from cache.h:4, + from blame.c:1: +/nvme/rc-buildroot-test/scripts/instance-0/output-1/host/arm-buildroot-linux-uclibcgnueabihf/sysroot/usr/include/stdio.h:813:13: note: previous declaration of 'funlockfile' was here + extern void funlockfile (FILE *__stream) __THROW; + ^~~~~~~~~~~ + +To avoid this build failure, check if flockfile is available before +defining flockfile, funlockfile and getc_unlocked + +Fixes: + - http://autobuild.buildroot.org/results/d41638d1ad8e78dd6f654367c905996b838ee649 + +Signed-off-by: Fabrice Fontaine +--- + Makefile | 5 +++++ + configure.ac | 6 ++++++ + git-compat-util.h | 2 +- + 3 files changed, 12 insertions(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index 6fb86c5862..58d0893a12 100644 +--- a/Makefile ++++ b/Makefile +@@ -232,6 +232,8 @@ all:: + # Define NO_STRUCT_ITIMERVAL if you don't have struct itimerval + # This also implies NO_SETITIMER + # ++# Define NO_FLOCKFILE if you don't have flockfile() ++# + # Define NO_FAST_WORKING_DIRECTORY if accessing objects in pack files is + # generally faster on your platform than accessing the working directory. + # +@@ -1638,6 +1640,9 @@ endif + ifdef NO_SETITIMER + COMPAT_CFLAGS += -DNO_SETITIMER + endif ++ifdef NO_FLOCKFILE ++ COMPAT_CFLAGS += -DNO_FLOCKFILE ++endif + ifdef NO_PREAD + COMPAT_CFLAGS += -DNO_PREAD + COMPAT_OBJS += compat/pread.o +diff --git a/configure.ac b/configure.ac +index 66aedb9288..d4295b5c69 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1132,6 +1132,12 @@ GIT_CHECK_FUNC(setitimer, + [NO_SETITIMER=YesPlease]) + GIT_CONF_SUBST([NO_SETITIMER]) + # ++# Define NO_FLOCKFILE if you don't have flockfile. ++GIT_CHECK_FUNC(flockfile, ++[NO_FLOCKFILE=], ++[NO_FLOCKFILE=YesPlease]) ++GIT_CONF_SUBST([NO_FLOCKFILE]) ++# + # Define NO_STRCASESTR if you don't have strcasestr. + GIT_CHECK_FUNC(strcasestr, + [NO_STRCASESTR=], +diff --git a/git-compat-util.h b/git-compat-util.h +index 7d509c5022..279cdd941e 100644 +--- a/git-compat-util.h ++++ b/git-compat-util.h +@@ -1236,7 +1236,7 @@ int warn_on_fopen_errors(const char *path); + # define SHELL_PATH "/bin/sh" + #endif + +-#ifndef _POSIX_THREAD_SAFE_FUNCTIONS ++#if !defined(_POSIX_THREAD_SAFE_FUNCTIONS) && defined(NO_FLOCKFILE) + static inline void flockfile(FILE *fh) + { + ; /* nothing */ +-- +2.29.2 + diff --git a/package/git/Config.in b/package/git/Config.in new file mode 100644 index 00000000..d53921d7 --- /dev/null +++ b/package/git/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_GIT + bool "git" + depends on BR2_USE_MMU # uses fork() + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + Git is a free and open source distributed version control + system designed to handle everything from small to very large + projects. + + http://git-scm.com diff --git a/package/git/git.hash b/package/git/git.hash new file mode 100644 index 00000000..c1960b97 --- /dev/null +++ b/package/git/git.hash @@ -0,0 +1,5 @@ +# From: https://www.kernel.org/pub/software/scm/git/sha256sums.asc +sha256 41f7d90c71f9476cd387673fcb10ce09ccbed67332436a4cc58d7af32c355faa git-2.30.2.tar.xz +# Locally calculated +sha256 5b2198d1645f767585e8a88ac0499b04472164c0d2da22e75ecf97ef443ab32e COPYING +sha256 1922f45d2c49e390032c9c0ba6d7cac904087f7cec51af30c2b2ad022ce0e76a LGPL-2.1 diff --git a/package/git/git.mk b/package/git/git.mk new file mode 100644 index 00000000..910dcf5f --- /dev/null +++ b/package/git/git.mk @@ -0,0 +1,87 @@ +################################################################################ +# +# git +# +################################################################################ + +GIT_VERSION = 2.30.2 +GIT_SOURCE = git-$(GIT_VERSION).tar.xz +GIT_SITE = $(BR2_KERNEL_MIRROR)/software/scm/git +GIT_LICENSE = GPL-2.0, LGPL-2.1+ +GIT_LICENSE_FILES = COPYING LGPL-2.1 +GIT_CPE_ID_VENDOR = git-scm +GIT_DEPENDENCIES = zlib $(TARGET_NLS_DEPENDENCIES) +# We're patching configure.ac +GIT_AUTORECONF = YES + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +GIT_DEPENDENCIES += host-pkgconf openssl +GIT_CONF_OPTS += --with-openssl +GIT_MAKE_OPTS += LIB_4_CRYPTO="`$(PKG_CONFIG_HOST_BINARY) --libs libssl libcrypto`" +else +GIT_CONF_OPTS += --without-openssl +endif + +ifeq ($(BR2_PACKAGE_PCRE2),y) +GIT_DEPENDENCIES += pcre2 +GIT_CONF_OPTS += --with-libpcre2 +else ifeq ($(BR2_PACKAGE_PCRE),y) +GIT_DEPENDENCIES += pcre +GIT_CONF_OPTS += --with-libpcre1 +GIT_MAKE_OPTS += NO_LIBPCRE1_JIT=1 +else +GIT_CONF_OPTS += --without-libpcre +endif + +ifeq ($(BR2_PACKAGE_LIBCURL),y) +GIT_DEPENDENCIES += libcurl +GIT_CONF_OPTS += --with-curl +GIT_CONF_ENV += \ + ac_cv_prog_CURL_CONFIG=$(STAGING_DIR)/usr/bin/$(LIBCURL_CONFIG_SCRIPTS) +else +GIT_CONF_OPTS += --without-curl +endif + +ifeq ($(BR2_PACKAGE_EXPAT),y) +GIT_DEPENDENCIES += expat +GIT_CONF_OPTS += --with-expat +else +GIT_CONF_OPTS += --without-expat +endif + +ifeq ($(BR2_PACKAGE_LIBICONV),y) +GIT_DEPENDENCIES += libiconv +GIT_CONF_ENV_LIBS += -liconv +GIT_CONF_OPTS += --with-iconv=/usr/lib +else +GIT_CONF_OPTS += --without-iconv +endif + +ifeq ($(BR2_PACKAGE_TCL),y) +GIT_DEPENDENCIES += tcl +GIT_CONF_OPTS += --with-tcltk +else +GIT_CONF_OPTS += --without-tcltk +endif + +ifeq ($(BR2_SYSTEM_ENABLE_NLS),) +GIT_MAKE_OPTS += NO_GETTEXT=1 +endif + +GIT_CFLAGS = $(TARGET_CFLAGS) + +ifneq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180)$(BR2_TOOLCHAIN_HAS_GCC_BUG_93847),) +GIT_CFLAGS += -O0 +endif + +GIT_CONF_OPTS += CFLAGS="$(GIT_CFLAGS)" + +GIT_INSTALL_TARGET_OPTS = $(GIT_MAKE_OPTS) DESTDIR=$(TARGET_DIR) install + +# assume yes for these tests, configure will bail out otherwise +# saying error: cannot run test program while cross compiling +GIT_CONF_ENV += \ + ac_cv_fread_reads_directories=yes \ + ac_cv_snprintf_returns_bogus=yes LIBS='$(GIT_CONF_ENV_LIBS)' + +$(eval $(autotools-package)) diff --git a/package/git_info_lsgd/Config.in b/package/git_info_lsgd/Config.in new file mode 100644 index 00000000..9ae7452d --- /dev/null +++ b/package/git_info_lsgd/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_GIT_INFO_LSGD + bool "generate git info in rootfs" + default y + help + this is a function about loongson-gd + if select this function + it will generate a file which name is git_info_ls + this file will record git info last commit + content is git commit id time and message + and you can use + fs_git_info_lsgd + command when rootfs run + and you can see this file content + file save in /etc in rootfs diff --git a/package/git_info_lsgd/git_info_lsgd.mk b/package/git_info_lsgd/git_info_lsgd.mk new file mode 100644 index 00000000..cab793e1 --- /dev/null +++ b/package/git_info_lsgd/git_info_lsgd.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# git_info_lsgd +# +################################################################################ + +GIT_INFO_LSGD_SITE=$(TOPDIR)/dl/git_info_lsgd/git_info_lsgd.tar.gz +GIT_INFO_LSGD_SITE_METHOD=file + +define GIT_INFO_LSGD_EXTRACT_CMDS + tar -zxf $(GIT_INFO_LSGD_SITE) -C $(@D) +endef + +define GIT_INFO_LSGD_BUILD_CMDS + cd $(@D) && chmod a+x git-info-get.sh && ./git-info-get.sh + cd $(@D) && chmod a+x fs_git_info_lsgd +endef + +define GIT_INFO_LSGD_INSTALL_TARGET_CMDS + cd $(@D) && cp git_info_ls $(TARGET_DIR)/etc + cd $(@D) && cp fs_git_info_lsgd $(TARGET_DIR)/usr/bin +endef + +$(eval $(generic-package)) diff --git a/package/gkrellm/Config.in b/package/gkrellm/Config.in new file mode 100644 index 00000000..e957c058 --- /dev/null +++ b/package/gkrellm/Config.in @@ -0,0 +1,43 @@ +config BR2_PACKAGE_GKRELLM + bool "gkrellm" + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + select BR2_PACKAGE_GKRELLM_SERVER if !BR2_PACKAGE_GKRELLM_CLIENT + select BR2_PACKAGE_LIBGLIB2 + help + GKrellM is a single process stack of system monitors which + supports applying themes to match its appearance to your + window manager, Gtk, or any other theme. + + http://gkrellm.srcbox.net/ + +if BR2_PACKAGE_GKRELLM + +config BR2_PACKAGE_GKRELLM_SERVER + bool "server" + help + Enable gkrellm server. + +config BR2_PACKAGE_GKRELLM_CLIENT + bool "client" + depends on BR2_PACKAGE_XORG7 # libgtk2 + depends on BR2_INSTALL_LIBSTDCPP # libgtk2 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # libgtk2 + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # libgtk2 + select BR2_PACKAGE_LIBGTK2 + select BR2_PACKAGE_XLIB_LIBSM + help + Enable gkrellm client. + +comment "client needs a toolchain w/ C++, gcc >= 4.8" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_PACKAGE_XORG7 + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + +endif # BR2_PACKAGE_GKRELLM + +comment "gkrellm needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/gkrellm/gkrellm.hash b/package/gkrellm/gkrellm.hash new file mode 100644 index 00000000..88624c33 --- /dev/null +++ b/package/gkrellm/gkrellm.hash @@ -0,0 +1,4 @@ +# Locally computed +sha256 1ee0643ed9ed99f88c1504c89d9ccb20780cf29319c904b68e80a8e7c8678c06 gkrellm-2.3.11.tar.bz2 +sha256 691de85c3c6eeda5b6982c751548575344739ce4b4418d78905e599359f6c435 COPYING +sha256 b81e0c0c3fb2a58f25377388484a1f729abb367f5f2b43e335a6ed3272ce8536 COPYRIGHT diff --git a/package/gkrellm/gkrellm.mk b/package/gkrellm/gkrellm.mk new file mode 100644 index 00000000..2a687226 --- /dev/null +++ b/package/gkrellm/gkrellm.mk @@ -0,0 +1,54 @@ +################################################################################ +# +# gkrellm +# +################################################################################ + +GKRELLM_VERSION = 2.3.11 +GKRELLM_SITE = http://gkrellm.srcbox.net/releases +GKRELLM_SOURCE = gkrellm-$(GKRELLM_VERSION).tar.bz2 +GKRELLM_LICENSE = GPL-3.0+ +GKRELLM_LICENSE_FILES = COPYING COPYRIGHT +GKRELLM_DEPENDENCIES = host-pkgconf libglib2 $(TARGET_NLS_DEPENDENCIES) +GKRELLM_BUILD_OPTS = \ + STRIP="" \ + SYS_LIBS=$(TARGET_NLS_LIBS) + +ifeq ($(BR2_PACKAGE_LM_SENSORS),y) +GKRELLM_DEPENDENCIES += lm-sensors +else +GKRELLM_BUILD_OPTS += without-libsensors=yes +endif + +ifeq ($(BR2_SYSTEM_ENABLE_NLS),y) +GKRELLM_BUILD_OPTS += enable_nls=1 +else +GKRELLM_BUILD_OPTS += enable_nls=0 +endif + +ifeq ($(BR2_PACKAGE_GKRELLM_SERVER)$(BR2_PACKAGE_GKRELLM_CLIENT),yy) +GKRELLM_BUILD_DIR = $(@D) +else ifeq ($(BR2_PACKAGE_GKRELLM_SERVER),y) +GKRELLM_BUILD_DIR = $(@D)/server +else +GKRELLM_BUILD_DIR = $(@D)/src +endif + +ifeq ($(BR2_PACKAGE_GKRELLM_CLIENT),y) +GKRELLM_DEPENDENCIES += libgtk2 xlib_libSM +GKRELLM_BUILD_OPTS += X11_LIBS="-lX11 -lSM -lICE" +GKRELLM_LICENSE += GPL (base64.c), Public Domain (md5.h, md5c.c) +endif + +define GKRELLM_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(TARGET_MAKE_ENV) $(MAKE) \ + -C $(GKRELLM_BUILD_DIR) $(GKRELLM_BUILD_OPTS) +endef + +define GKRELLM_INSTALL_TARGET_CMDS + $(TARGET_CONFIGURE_OPTS) $(TARGET_MAKE_ENV) $(MAKE) \ + -C $(GKRELLM_BUILD_DIR) $(GKRELLM_BUILD_OPTS) \ + INSTALLROOT=$(TARGET_DIR)/usr install +endef + +$(eval $(generic-package)) diff --git a/package/gli/Config.in b/package/gli/Config.in new file mode 100644 index 00000000..da7ce28b --- /dev/null +++ b/package/gli/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_GLI + bool "gli" + depends on BR2_INSTALL_LIBSTDCPP + help + OpenGL Image (GLI) + + http://gli.g-truc.net + +comment "gli needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/gli/gli.hash b/package/gli/gli.hash new file mode 100644 index 00000000..177358a7 --- /dev/null +++ b/package/gli/gli.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 9374f3cf6441dac0154f7e5ae9ad9ae99f4c4a36f8eb6de23f54a1996b9f2769 gli-559cbe1ec38878e182507d331e0780fbae5baf15.tar.gz +sha256 e26459f62353e631d18379668c82b85f9fd2fd993f2818277e4fce21e957f87a manual.md diff --git a/package/gli/gli.mk b/package/gli/gli.mk new file mode 100644 index 00000000..6a332d0e --- /dev/null +++ b/package/gli/gli.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# gli +# +################################################################################ + +GLI_VERSION = 559cbe1ec38878e182507d331e0780fbae5baf15 +GLI_SITE = $(call github,g-truc,gli,$(GLI_VERSION)) +GLI_LICENSE = MIT +GLI_LICENSE_FILES = manual.md + +# GLI is a header-only library, it only makes sense +# to have it installed into the staging directory. +GLI_INSTALL_STAGING = YES +GLI_INSTALL_TARGET = NO + +$(eval $(cmake-package)) diff --git a/package/glib-networking/Config.in b/package/glib-networking/Config.in new file mode 100644 index 00000000..22331255 --- /dev/null +++ b/package/glib-networking/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_GLIB_NETWORKING + bool "glib-networking" + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_OPENSSL if !BR2_PACKAGE_GNUTLS + help + Network-related GIO modules for glib. + + https://gitlab.gnome.org/GNOME/glib-networking + +comment "glib-networking needs a toolchain w/ wchar, threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS diff --git a/package/glib-networking/glib-networking.hash b/package/glib-networking/glib-networking.hash new file mode 100644 index 00000000..976a19f2 --- /dev/null +++ b/package/glib-networking/glib-networking.hash @@ -0,0 +1,3 @@ +# From http://ftp.gnome.org/pub/gnome/sources/glib-networking/2.66/glib-networking-2.66.0.sha256sum +sha256 c5d7be2437fdd196eebfb70c4517b96d3ba7ec13bd496318b8f02dea383e0099 glib-networking-2.66.0.tar.xz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/glib-networking/glib-networking.mk b/package/glib-networking/glib-networking.mk new file mode 100644 index 00000000..65630c7f --- /dev/null +++ b/package/glib-networking/glib-networking.mk @@ -0,0 +1,41 @@ +################################################################################ +# +# glib-networking +# +################################################################################ + +GLIB_NETWORKING_VERSION_MAJOR = 2.66 +GLIB_NETWORKING_VERSION = $(GLIB_NETWORKING_VERSION_MAJOR).0 +GLIB_NETWORKING_SITE = http://ftp.gnome.org/pub/gnome/sources/glib-networking/$(GLIB_NETWORKING_VERSION_MAJOR) +GLIB_NETWORKING_SOURCE = glib-networking-$(GLIB_NETWORKING_VERSION).tar.xz +GLIB_NETWORKING_INSTALL_STAGING = YES +GLIB_NETWORKING_DEPENDENCIES = \ + $(TARGET_NLS_DEPENDENCIES) \ + host-pkgconf \ + libglib2 + +GLIB_NETWORKING_CONF_OPTS = \ + -Dlibproxy=disabled \ + -Dgnome_proxy=disabled + +GLIB_NETWORKING_LICENSE = LGPL-2.0+ +GLIB_NETWORKING_LICENSE_FILES = COPYING +GLIB_NETWORKING_CPE_ID_VENDOR = gnome +GLIB_NETWORKING_INSTALL_TARGET_OPTS = DESTDIR=$(TARGET_DIR) \ + GIO_MODULE_DIR=/usr/lib/gio/modules install + +ifeq ($(BR2_PACKAGE_GNUTLS),y) +GLIB_NETWORKING_DEPENDENCIES += gnutls +GLIB_NETWORKING_CONF_OPTS += -Dgnutls=enabled +else +GLIB_NETWORKING_CONF_OPTS += -Dgnutls=disabled +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +GLIB_NETWORKING_DEPENDENCIES += openssl +GLIB_NETWORKING_CONF_OPTS += -Dopenssl=enabled +else +GLIB_NETWORKING_CONF_OPTS += -Dopenssl=disabled +endif + +$(eval $(meson-package)) diff --git a/package/glibc/2.32-50-g737efa27fca5c97f566a2005687fda7d6659cd2e/glibc.hash b/package/glibc/2.32-50-g737efa27fca5c97f566a2005687fda7d6659cd2e/glibc.hash new file mode 100644 index 00000000..5e00ef7c --- /dev/null +++ b/package/glibc/2.32-50-g737efa27fca5c97f566a2005687fda7d6659cd2e/glibc.hash @@ -0,0 +1,7 @@ +# Locally calculated (fetched from Github) +sha256 b634d38ace90752eeecb93246d71c0673bab0db8dfbd69333479ae7b10d63410 glibc-2.32-50-g737efa27fca5c97f566a2005687fda7d6659cd2e.tar.gz + +# Hashes for license files +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LIB +sha256 b33d0bd9f685b46853548814893a6135e74430d12f6d94ab3eba42fc591f83bc LICENSES diff --git a/package/glibc/2.32.9000-69-gbd394d131c10c9ec22c6424197b79410042eed99/glibc.hash b/package/glibc/2.32.9000-69-gbd394d131c10c9ec22c6424197b79410042eed99/glibc.hash new file mode 100644 index 00000000..55859152 --- /dev/null +++ b/package/glibc/2.32.9000-69-gbd394d131c10c9ec22c6424197b79410042eed99/glibc.hash @@ -0,0 +1,7 @@ +# Locally calculated (fetched from Github) +sha256 c3828224d69a42f5b6982cbec8ae01cf494fe975ce9023e36ff2c10a2fb93e42 glibc-2.32.9000-69-gbd394d131c10c9ec22c6424197b79410042eed99.tar.gz + +# Hashes for license files +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LIB +sha256 b33d0bd9f685b46853548814893a6135e74430d12f6d94ab3eba42fc591f83bc LICENSES diff --git a/package/glibc/7630ed2fa60caea98f500e4a7a51b88f9bf1e176/glibc.hash b/package/glibc/7630ed2fa60caea98f500e4a7a51b88f9bf1e176/glibc.hash new file mode 100644 index 00000000..a61bd65f --- /dev/null +++ b/package/glibc/7630ed2fa60caea98f500e4a7a51b88f9bf1e176/glibc.hash @@ -0,0 +1,2 @@ +# Locally calculated (fetched from https://github.com/c-sky/glibc) +sha512 9deb2deceefe347d72de13510a5baa3de00f94c684f3b25e136ca3660f61e65a69f2115abb488c2ab0fa93cda8535853ce1e13e186efcc8434ecc4049efd82b5 glibc-7630ed2fa60caea98f500e4a7a51b88f9bf1e176.tar.gz diff --git a/package/glibc/Config.in b/package/glibc/Config.in new file mode 100644 index 00000000..5ecd0581 --- /dev/null +++ b/package/glibc/Config.in @@ -0,0 +1,19 @@ +if BR2_TOOLCHAIN_BUILDROOT_GLIBC + +comment "Glibc Options" + +config BR2_PACKAGE_GLIBC + bool + default y + select BR2_PACKAGE_LINUX_HEADERS + select BR2_TOOLCHAIN_HAS_SSP if BR2_PACKAGE_HOST_BINUTILS_SUPPORTS_CFI + help + https://www.gnu.org/software/libc/ + +config BR2_PACKAGE_GLIBC_UTILS + bool "Install glibc utilities" + help + Enabling this option will compile and install the getconf, + ldconfig, ldd and locale glibc utilities for the target. + +endif # BR2_TOOLCHAIN_BUILDROOT_GLIBC diff --git a/package/glibc/glibc.hash b/package/glibc/glibc.hash new file mode 100644 index 00000000..5316f03b --- /dev/null +++ b/package/glibc/glibc.hash @@ -0,0 +1,2 @@ +# This hash file is not used; instead, update the +# hash files in the per-version sub-directories. diff --git a/package/glibc/glibc.mk b/package/glibc/glibc.mk new file mode 100644 index 00000000..14c3f035 --- /dev/null +++ b/package/glibc/glibc.mk @@ -0,0 +1,176 @@ +################################################################################ +# +# glibc +# +################################################################################ + +ifeq ($(BR2_csky),y) +GLIBC_VERSION = 7630ed2fa60caea98f500e4a7a51b88f9bf1e176 +GLIBC_SITE = $(call github,c-sky,glibc,$(GLIBC_VERSION)) +else +# Generate version string using: +# git describe --match 'glibc-*' --abbrev=40 origin/release/MAJOR.MINOR/master | cut -d '-' -f 2- +# When updating the version, please also update localedef +ifeq ($(BR2_RISCV_32),y) +# RISC-V 32-bit (RV32) requires glibc 2.33 or newer +# Until 2.33 is released, just use master +GLIBC_VERSION = 2.32.9000-69-gbd394d131c10c9ec22c6424197b79410042eed99 +else +GLIBC_VERSION = 2.32-50-g737efa27fca5c97f566a2005687fda7d6659cd2e +endif +# Upstream doesn't officially provide an https download link. +# There is one (https://sourceware.org/git/glibc.git) but it's not reliable, +# sometimes the connection times out. So use an unofficial github mirror. +# When updating the version, check it on the official repository; +# *NEVER* decide on a version string by looking at the mirror. +# Then check that the mirror has been synced already (happens once a day.) +GLIBC_SITE = $(call github,bminor,glibc,$(GLIBC_VERSION)) +endif + +GLIBC_LICENSE = GPL-2.0+ (programs), LGPL-2.1+, BSD-3-Clause, MIT (library) +GLIBC_LICENSE_FILES = COPYING COPYING.LIB LICENSES +GLIBC_CPE_ID_VENDOR = gnu + +# glibc is part of the toolchain so disable the toolchain dependency +GLIBC_ADD_TOOLCHAIN_DEPENDENCY = NO + +# Before glibc is configured, we must have the first stage +# cross-compiler and the kernel headers +GLIBC_DEPENDENCIES = host-gcc-initial linux-headers host-bison host-gawk \ + $(BR2_MAKE_HOST_DEPENDENCY) $(BR2_PYTHON3_HOST_DEPENDENCY) + +GLIBC_SUBDIR = build + +GLIBC_INSTALL_STAGING = YES + +GLIBC_INSTALL_STAGING_OPTS = install_root=$(STAGING_DIR) install + +# Thumb build is broken, build in ARM mode +ifeq ($(BR2_ARM_INSTRUCTIONS_THUMB),y) +GLIBC_EXTRA_CFLAGS += -marm +endif + +# MIPS64 defaults to n32 so pass the correct -mabi if +# we are using a different ABI. OABI32 is also used +# in MIPS so we pass -mabi=32 in this case as well +# even though it's not strictly necessary. +ifeq ($(BR2_MIPS_NABI64),y) +GLIBC_EXTRA_CFLAGS += -mabi=64 +else ifeq ($(BR2_MIPS_OABI32),y) +GLIBC_EXTRA_CFLAGS += -mabi=32 +endif + +ifeq ($(BR2_ENABLE_DEBUG),y) +GLIBC_EXTRA_CFLAGS += -g +endif + +# The stubs.h header is not installed by install-headers, but is +# needed for the gcc build. An empty stubs.h will work, as explained +# in http://gcc.gnu.org/ml/gcc/2002-01/msg00900.html. The same trick +# is used by Crosstool-NG. +ifeq ($(BR2_TOOLCHAIN_BUILDROOT_GLIBC),y) +define GLIBC_ADD_MISSING_STUB_H + mkdir -p $(STAGING_DIR)/usr/include/gnu + touch $(STAGING_DIR)/usr/include/gnu/stubs.h +endef +endif + +GLIBC_CONF_ENV = \ + ac_cv_path_BASH_SHELL=/bin/$(if $(BR2_PACKAGE_BASH),bash,sh) \ + libc_cv_forced_unwind=yes \ + libc_cv_ssp=no + +# POSIX shell does not support localization, so remove the corresponding +# syntax from ldd if bash is not selected. +ifeq ($(BR2_PACKAGE_BASH),) +define GLIBC_LDD_NO_BASH + $(SED) 's/$$"/"/g' $(@D)/elf/ldd.bash.in +endef +GLIBC_POST_PATCH_HOOKS += GLIBC_LDD_NO_BASH +endif + +# Override the default library locations of /lib64/ and +# /usr/lib64// for RISC-V. +ifeq ($(BR2_riscv),y) +ifeq ($(BR2_RISCV_64),y) +GLIBC_CONF_ENV += libc_cv_slibdir=/lib64 libc_cv_rtlddir=/lib +else +GLIBC_CONF_ENV += libc_cv_slibdir=/lib32 libc_cv_rtlddir=/lib +endif +endif + +# glibc requires make >= 4.0 since 2.28 release. +# https://www.sourceware.org/ml/libc-alpha/2018-08/msg00003.html +GLIBC_MAKE = $(BR2_MAKE) +GLIBC_CONF_ENV += ac_cv_prog_MAKE="$(BR2_MAKE)" + +# Even though we use the autotools-package infrastructure, we have to +# override the default configure commands for several reasons: +# +# 1. We have to build out-of-tree, but we can't use the same +# 'symbolic link to configure' used with the gcc packages. +# +# 2. We have to execute the configure script with bash and not sh. +# +# Note that as mentionned in +# http://patches.openembedded.org/patch/38849/, glibc must be +# built with -O2, so we pass our own CFLAGS and CXXFLAGS below. +define GLIBC_CONFIGURE_CMDS + mkdir -p $(@D)/build + # Do the configuration + (cd $(@D)/build; \ + $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="-O2 $(GLIBC_EXTRA_CFLAGS)" CPPFLAGS="" \ + CXXFLAGS="-O2 $(GLIBC_EXTRA_CFLAGS)" \ + $(GLIBC_CONF_ENV) \ + $(SHELL) $(@D)/configure \ + --target=$(GNU_TARGET_NAME) \ + --host=$(GNU_TARGET_NAME) \ + --build=$(GNU_HOST_NAME) \ + --prefix=/usr \ + --enable-shared \ + $(if $(BR2_x86_64),--enable-lock-elision) \ + --with-pkgversion="Buildroot" \ + --disable-profile \ + --disable-werror \ + --without-gd \ + --enable-kernel=$(call qstrip,$(BR2_TOOLCHAIN_HEADERS_AT_LEAST)) \ + --with-headers=$(STAGING_DIR)/usr/include) + $(GLIBC_ADD_MISSING_STUB_H) +endef + +# +# We also override the install to target commands since we only want +# to install the libraries, and nothing more. +# + +GLIBC_LIBS_LIB = \ + ld*.so.* libanl.so.* libc.so.* libcrypt.so.* libdl.so.* libgcc_s.so.* \ + libm.so.* libpthread.so.* libresolv.so.* librt.so.* \ + libutil.so.* libnss_files.so.* libnss_dns.so.* libmvec.so.* + +ifeq ($(BR2_PACKAGE_GDB),y) +GLIBC_LIBS_LIB += libthread_db.so.* +endif + +ifeq ($(BR2_PACKAGE_GLIBC_UTILS),y) +GLIBC_TARGET_UTILS_USR_BIN = posix/getconf elf/ldd +GLIBC_TARGET_UTILS_SBIN = elf/ldconfig +ifeq ($(BR2_SYSTEM_ENABLE_NLS),y) +GLIBC_TARGET_UTILS_USR_BIN += locale/locale +endif +endif + +define GLIBC_INSTALL_TARGET_CMDS + for libpattern in $(GLIBC_LIBS_LIB); do \ + $(call copy_toolchain_lib_root,$$libpattern) ; \ + done + $(foreach util,$(GLIBC_TARGET_UTILS_USR_BIN), \ + $(INSTALL) -D -m 0755 $(@D)/build/$(util) $(TARGET_DIR)/usr/bin/$(notdir $(util)) + ) + $(foreach util,$(GLIBC_TARGET_UTILS_SBIN), \ + $(INSTALL) -D -m 0755 $(@D)/build/$(util) $(TARGET_DIR)/sbin/$(notdir $(util)) + ) +endef + +$(eval $(autotools-package)) diff --git a/package/glibc/nsswitch.conf b/package/glibc/nsswitch.conf new file mode 100644 index 00000000..5c384918 --- /dev/null +++ b/package/glibc/nsswitch.conf @@ -0,0 +1,13 @@ +# /etc/nsswitch.conf + +passwd: files +group: files +shadow: files + +hosts: files dns +networks: files dns + +protocols: files +services: files +ethers: files +rpc: files diff --git a/package/glibmm/Config.in b/package/glibmm/Config.in new file mode 100644 index 00000000..c7b4082e --- /dev/null +++ b/package/glibmm/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_GLIBMM + bool "glibmm" + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # regex_replace + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBSIGC + help + The GLibmm package is a set of C++ bindings for GLib. + + http://www.gtkmm.org/ + +comment "glibmm needs a toolchain w/ C++, wchar, threads, gcc >= 4.9" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || !BR2_USE_WCHAR \ + || !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/glibmm/glibmm.hash b/package/glibmm/glibmm.hash new file mode 100644 index 00000000..021b77ef --- /dev/null +++ b/package/glibmm/glibmm.hash @@ -0,0 +1,5 @@ +# From http://ftp.gnome.org/pub/gnome/sources/glibmm/2.62/glibmm-2.62.0.sha256sum +sha256 36659f13cc73282392d1305858f3bbca46fbd1ce2f078cc9db8b9f79b2e93cfe glibmm-2.62.0.tar.xz +# License files, locally calculated +sha256 3ea7fa7c5d9a3a113e950eca9cfb85107f096270d8e4dd99daa9d8abdebc60e7 COPYING +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING.tools diff --git a/package/glibmm/glibmm.mk b/package/glibmm/glibmm.mk new file mode 100644 index 00000000..c31c794c --- /dev/null +++ b/package/glibmm/glibmm.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# glibmm +# +################################################################################ + +GLIBMM_VERSION_MAJOR = 2.62 +GLIBMM_VERSION = $(GLIBMM_VERSION_MAJOR).0 +GLIBMM_LICENSE = LGPL-2.1+ (library), GPL-2.0+ (tools) +GLIBMM_LICENSE_FILES = COPYING COPYING.tools +GLIBMM_SOURCE = glibmm-$(GLIBMM_VERSION).tar.xz +GLIBMM_SITE = http://ftp.gnome.org/pub/gnome/sources/glibmm/$(GLIBMM_VERSION_MAJOR) +GLIBMM_INSTALL_STAGING = YES +GLIBMM_DEPENDENCIES = libglib2 libsigc host-pkgconf + +GLIBMM_CXXFLAGS = $(TARGET_CXXFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y) +GLIBMM_CXXFLAGS += -O0 +endif + +GLIBMM_CONF_ENV += CXXFLAGS="$(GLIBMM_CXXFLAGS)" + +$(eval $(autotools-package)) diff --git a/package/glm/Config.in b/package/glm/Config.in new file mode 100644 index 00000000..41b36083 --- /dev/null +++ b/package/glm/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_GLM + bool "glm" + depends on BR2_INSTALL_LIBSTDCPP + help + OpenGL Mathematics (GLM) + + http://glm.g-truc.net + +comment "glm needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/glm/glm.hash b/package/glm/glm.hash new file mode 100644 index 00000000..2073d6bf --- /dev/null +++ b/package/glm/glm.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 5e33b6131cea6a904339734b015110d4342b7dc02d995164fdb86332d28a5aa4 glm-0.9.9.5.tar.gz +sha256 337130631a714eeae017556cad101d5324c2961214120b6214741d3d43667086 manual.md diff --git a/package/glm/glm.mk b/package/glm/glm.mk new file mode 100644 index 00000000..3ef106a9 --- /dev/null +++ b/package/glm/glm.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# glm +# +################################################################################ + +GLM_VERSION = 0.9.9.5 +GLM_SITE = $(call github,g-truc,glm,$(GLM_VERSION)) +GLM_LICENSE = MIT +GLM_LICENSE_FILES = manual.md + +# GLM is a header-only library, it only makes sense +# to have it installed into the staging directory. +GLM_INSTALL_STAGING = YES +GLM_INSTALL_TARGET = NO + +# Don't build libraries as GLM is header-only +GLM_CONF_OPTS = \ + -DGLM_TEST_ENABLE=OFF \ + -DBUILD_SHARED_LIBS=OFF \ + -DBUILD_STATIC_LIBS=OFF + +$(eval $(cmake-package)) diff --git a/package/glmark2/0001-wscript-use-find_program-to-find-wayland-scanner.patch b/package/glmark2/0001-wscript-use-find_program-to-find-wayland-scanner.patch new file mode 100644 index 00000000..681f0c67 --- /dev/null +++ b/package/glmark2/0001-wscript-use-find_program-to-find-wayland-scanner.patch @@ -0,0 +1,50 @@ +From 303d5c4fef1760ede5786bc62c7012dd7ae93722 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 8 Nov 2020 23:46:49 +0100 +Subject: [PATCH] wscript: use find_program to find wayland-scanner + +Use find_program instead of check_cfg to find wayland-scanner. This will +fix the following build failure when cross-compiling: + +[ 3/73] Compiling doc/glmark2.1.in +/bin/sh: 1: /usr/bin/wayland-scanner: not found + +Fixes: + - http://autobuild.buildroot.org/results//361dc40e558e2646cb93f405c7b1f621d400fea3 + +Signed-off-by: Fabrice Fontaine +--- + src/wscript_build | 2 +- + wscript | 3 +-- + 2 files changed, 2 insertions(+), 3 deletions(-) + +diff --git a/src/wscript_build b/src/wscript_build +index bbe7a77..ed3e8d6 100644 +--- a/src/wscript_build ++++ b/src/wscript_build +@@ -51,7 +51,7 @@ else: + + if 'WAYLAND_SCANNER_wayland_scanner' in bld.env.keys(): + def wayland_scanner_cmd(arg, src): +- return '%s %s < %s > ${TGT}' % (bld.env['WAYLAND_SCANNER_wayland_scanner'], arg, src) ++ return '%s %s < %s > ${TGT}' % (bld.env['WAYLAND_SCANNER_wayland_scanner'][0], arg, src) + + def wayland_proto_src_path(proto, ver): + wp_dir = bld.env['WAYLAND_PROTOCOLS_pkgdatadir'] +diff --git a/wscript b/wscript +index e09fa78..fe2494f 100644 +--- a/wscript ++++ b/wscript +@@ -227,8 +227,7 @@ def configure_linux(ctx): + # wayland-protocols >= 1.12 required for xdg-shell stable + ctx.check_cfg(package = 'wayland-protocols', atleast_version = '1.12', + variables = ['pkgdatadir'], uselib_store = 'WAYLAND_PROTOCOLS') +- ctx.check_cfg(package = 'wayland-scanner', variables = ['wayland_scanner'], +- uselib_store = 'WAYLAND_SCANNER') ++ ctx.find_program('wayland-scanner', var = 'WAYLAND_SCANNER_wayland_scanner') + + # Prepend CXX flags so that they can be overriden by the + # CXXFLAGS environment variable +-- +2.28.0 + diff --git a/package/glmark2/Config.in b/package/glmark2/Config.in new file mode 100644 index 00000000..40d0adcc --- /dev/null +++ b/package/glmark2/Config.in @@ -0,0 +1,70 @@ +config BR2_PACKAGE_GLMARK2_FLAVOR_ANY + bool + +config BR2_PACKAGE_GLMARK2_FLAVOR_DRM_GLESV2 + bool + default y + depends on BR2_PACKAGE_HAS_LIBEGL + depends on BR2_PACKAGE_HAS_LIBGLES + depends on BR2_PACKAGE_HAS_UDEV + select BR2_PACKAGE_GLMARK2_FLAVOR_ANY + +config BR2_PACKAGE_GLMARK2_FLAVOR_DRM_GL + bool + default y + depends on BR2_PACKAGE_HAS_LIBEGL + depends on BR2_PACKAGE_HAS_LIBGL + depends on BR2_PACKAGE_HAS_UDEV + select BR2_PACKAGE_GLMARK2_FLAVOR_ANY + +config BR2_PACKAGE_GLMARK2_FLAVOR_WAYLAND_GLESV2 + bool + default y + depends on BR2_PACKAGE_HAS_LIBEGL + depends on BR2_PACKAGE_HAS_LIBGLES + depends on BR2_PACKAGE_WAYLAND + select BR2_PACKAGE_GLMARK2_FLAVOR_ANY + select BR2_PACKAGE_WAYLAND_PROTOCOLS + +config BR2_PACKAGE_GLMARK2_FLAVOR_WAYLAND_GL + bool + default y + depends on BR2_PACKAGE_HAS_LIBEGL + depends on BR2_PACKAGE_HAS_LIBGL + depends on BR2_PACKAGE_WAYLAND + select BR2_PACKAGE_GLMARK2_FLAVOR_ANY + select BR2_PACKAGE_WAYLAND_PROTOCOLS + +config BR2_PACKAGE_GLMARK2_FLAVOR_X11_GLESV2 + bool + default y + depends on BR2_PACKAGE_HAS_LIBEGL + depends on BR2_PACKAGE_HAS_LIBGLES + depends on BR2_PACKAGE_XLIB_LIBX11 + select BR2_PACKAGE_GLMARK2_FLAVOR_ANY + +config BR2_PACKAGE_GLMARK2_FLAVOR_X11_GL + bool + default y + depends on BR2_PACKAGE_HAS_LIBGL + depends on BR2_PACKAGE_XLIB_LIBX11 + select BR2_PACKAGE_GLMARK2_FLAVOR_ANY + +comment "glmark2 needs a toolchain w/ C++, gcc >= 4.9" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + +comment "glmark2 needs an OpenGL or an openGL ES and EGL backend" + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 && BR2_INSTALL_LIBSTDCPP + depends on !BR2_PACKAGE_GLMARK2_FLAVOR_ANY + +config BR2_PACKAGE_GLMARK2 + bool "glmark2" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C++14 + depends on BR2_PACKAGE_GLMARK2_FLAVOR_ANY + select BR2_PACKAGE_JPEG + select BR2_PACKAGE_LIBPNG + help + glmark2 is an OpenGL 2.0 and ES 2.0 benchmark. + + https://github.com/glmark2/glmark2 diff --git a/package/glmark2/glmark2.hash b/package/glmark2/glmark2.hash new file mode 100644 index 00000000..33a99de1 --- /dev/null +++ b/package/glmark2/glmark2.hash @@ -0,0 +1,4 @@ +# Locally computed +sha256 9ad57e4eec0049c47a367b57f5f8d3e31e4c488b1d5d6673a75f1b2282e40888 glmark2-c493520253fbfe3676c8b34b6f91a7c9a838fc8e.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING +sha256 16fbc228292bd774b263b212ae422c524cbf3b2078bcf21b22f8bdd4373be617 COPYING.SGI diff --git a/package/glmark2/glmark2.mk b/package/glmark2/glmark2.mk new file mode 100644 index 00000000..9e47b426 --- /dev/null +++ b/package/glmark2/glmark2.mk @@ -0,0 +1,47 @@ +################################################################################ +# +# glmark2 +# +################################################################################ + +GLMARK2_VERSION = c493520253fbfe3676c8b34b6f91a7c9a838fc8e +GLMARK2_SITE = $(call github,glmark2,glmark2,$(GLMARK2_VERSION)) +GLMARK2_LICENSE = GPL-3.0+, SGIv1 +GLMARK2_LICENSE_FILES = COPYING COPYING.SGI +GLMARK2_DEPENDENCIES = host-pkgconf jpeg libegl libpng + +ifeq ($(BR2_PACKAGE_GLMARK2_FLAVOR_DRM_GLESV2),y) +GLMARK2_DEPENDENCIES += libgles udev +GLMARK2_FLAVORS += drm-glesv2 +endif + +ifeq ($(BR2_PACKAGE_GLMARK2_FLAVOR_DRM_GL),y) +GLMARK2_DEPENDENCIES += libgl udev +GLMARK2_FLAVORS += drm-gl +endif + +ifeq ($(BR2_PACKAGE_GLMARK2_FLAVOR_X11_GLESV2),y) +GLMARK2_DEPENDENCIES += libgles xlib_libX11 +GLMARK2_FLAVORS += x11-glesv2 +endif + +ifeq ($(BR2_PACKAGE_GLMARK2_FLAVOR_X11_GL),y) +GLMARK2_DEPENDENCIES += libgl xlib_libX11 +GLMARK2_FLAVORS += x11-gl +endif + +ifeq ($(BR2_PACKAGE_GLMARK2_FLAVOR_WAYLAND_GLESV2),y) +GLMARK2_DEPENDENCIES += libgles wayland wayland-protocols +GLMARK2_FLAVORS += wayland-glesv2 +endif + +ifeq ($(BR2_PACKAGE_GLMARK2_FLAVOR_WAYLAND_GL),y) +GLMARK2_DEPENDENCIES += libgl wayland wayland-protocols +GLMARK2_FLAVORS += wayland-gl +endif + +GLMARK2_CONF_OPTS += \ + --prefix=/usr \ + --with-flavors=$(subst $(space),$(comma),$(GLMARK2_FLAVORS)) + +$(eval $(waf-package)) diff --git a/package/glog/0001-src-symbolize.cc-fix-build-without-dlfcn.h.patch b/package/glog/0001-src-symbolize.cc-fix-build-without-dlfcn.h.patch new file mode 100644 index 00000000..73c6e670 --- /dev/null +++ b/package/glog/0001-src-symbolize.cc-fix-build-without-dlfcn.h.patch @@ -0,0 +1,37 @@ +From f71e0899439aaa0e6172243a0862bf8a72a241fc Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 28 Oct 2019 18:21:55 +0100 +Subject: [PATCH] src/symbolize.cc: fix build without dlfcn.h + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/google/glog/pull/475] +--- + src/symbolize.cc | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/symbolize.cc b/src/symbolize.cc +index 1ffc607..ff027f2 100644 +--- a/src/symbolize.cc ++++ b/src/symbolize.cc +@@ -110,7 +110,9 @@ _END_GOOGLE_NAMESPACE_ + + #if defined(__ELF__) + ++#if defined(HAVE_DLFCN_H) + #include ++#endif + #if defined(OS_OPENBSD) + #include + #else +@@ -832,7 +834,7 @@ static ATTRIBUTE_NOINLINE bool SymbolizeAndDemangle(void *pc, char *out, + + _END_GOOGLE_NAMESPACE_ + +-#elif defined(OS_MACOSX) && defined(HAVE_DLADDR) ++#elif defined(OS_MACOSX) && defined(HAVE_DLADDR) && defined(HAVE_DLFCN_H) + + #include + #include +-- +2.23.0 + diff --git a/package/glog/0002-src-utilities-fix-build-without-pthread.patch b/package/glog/0002-src-utilities-fix-build-without-pthread.patch new file mode 100644 index 00000000..503f57a6 --- /dev/null +++ b/package/glog/0002-src-utilities-fix-build-without-pthread.patch @@ -0,0 +1,83 @@ +From 9630e0e848da22e27b346c38d9b05f0a16cbf7b3 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Thu, 31 Oct 2019 19:27:16 +0100 +Subject: [PATCH] src/utilities: fix build without pthread + +- Remove is_default_thread function which is an internal and not used + function +- Remove g_main_thread_id as it was used only by is_default_thread + +Fixes: + - http://autobuild.buildroot.net/results/5320bbe1205e782e3516d9bead8d1ed825bcbaad + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/google/glog/commit/9630e0e848da22e27b346c38d9b05f0a16cbf7b3] +--- + src/utilities.cc | 16 +++------------- + src/utilities.h | 2 -- + 2 files changed, 3 insertions(+), 15 deletions(-) + +diff --git a/src/utilities.cc b/src/utilities.cc +index d463b33b..9a1e35d0 100644 +--- a/src/utilities.cc ++++ b/src/utilities.cc +@@ -61,7 +61,6 @@ using std::string; + _START_GOOGLE_NAMESPACE_ + + static const char* g_program_invocation_short_name = NULL; +-static pthread_t g_main_thread_id; + + _END_GOOGLE_NAMESPACE_ + +@@ -181,16 +180,6 @@ bool IsGoogleLoggingInitialized() { + return g_program_invocation_short_name != NULL; + } + +-bool is_default_thread() { +- if (g_program_invocation_short_name == NULL) { +- // InitGoogleLogging() not yet called, so unlikely to be in a different +- // thread +- return true; +- } else { +- return pthread_equal(pthread_self(), g_main_thread_id); +- } +-} +- + #ifdef OS_WINDOWS + struct timeval { + long tv_sec, tv_usec; +@@ -276,9 +265,11 @@ pid_t GetTID() { + return getpid(); // Linux: getpid returns thread ID when gettid is absent + #elif defined OS_WINDOWS && !defined OS_CYGWIN + return GetCurrentThreadId(); +-#else ++#elif defined(HAVE_PTHREAD) + // If none of the techniques above worked, we use pthread_self(). + return (pid_t)(uintptr_t)pthread_self(); ++#else ++ return -1; + #endif + } + +@@ -350,7 +341,6 @@ void InitGoogleLoggingUtilities(const char* argv0) { + if (!slash) slash = strrchr(argv0, '\\'); + #endif + g_program_invocation_short_name = slash ? slash + 1 : argv0; +- g_main_thread_id = pthread_self(); + + #ifdef HAVE_STACKTRACE + InstallFailureFunction(&DumpStackTraceAndExit); +diff --git a/src/utilities.h b/src/utilities.h +index ca21cfb3..c66f9146 100644 +--- a/src/utilities.h ++++ b/src/utilities.h +@@ -163,8 +163,6 @@ const char* ProgramInvocationShortName(); + + bool IsGoogleLoggingInitialized(); + +-bool is_default_thread(); +- + int64 CycleClock_Now(); + + int64 UsecToCycles(int64 usec); diff --git a/package/glog/Config.in b/package/glog/Config.in new file mode 100644 index 00000000..33763230 --- /dev/null +++ b/package/glog/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_GLOG + bool "glog" + # __ELF__ not defined on Microblaze + depends on !BR2_microblaze + depends on BR2_INSTALL_LIBSTDCPP + help + C++ implementation of the Google logging module + + https://github.com/google/glog + +comment "glog needs a toolchain w/ C++" + depends on !BR2_microblaze + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/glog/glog.hash b/package/glog/glog.hash new file mode 100644 index 00000000..b9ba6654 --- /dev/null +++ b/package/glog/glog.hash @@ -0,0 +1,5 @@ +# Locally computed +sha256 f28359aeba12f30d73d9e4711ef356dc842886968112162bc73002645139c39c glog-0.4.0.tar.gz + +# Hash for License file: +sha256 0fc497129c5c69ff6f22da6933c7e4aaef082fde8437fd57680c2780100772a4 COPYING diff --git a/package/glog/glog.mk b/package/glog/glog.mk new file mode 100644 index 00000000..9d31732a --- /dev/null +++ b/package/glog/glog.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# glog +# +################################################################################ + +GLOG_VERSION = 0.4.0 +GLOG_SITE = $(call github,google,glog,v$(GLOG_VERSION)) +GLOG_INSTALL_STAGING = YES +GLOG_LICENSE = BSD-3-Clause +GLOG_LICENSE_FILES = COPYING +GLOG_CONF_OPTS = \ + $(if $(BR2_TOOLCHAIN_HAS_THREADS),-DWITH_THREADS=ON, -DWITH_THREADS=OFF) + +ifeq ($(BR2_PACKAGE_GFLAGS),y) +GLOG_DEPENDENCIES = gflags +GLOG_CONF_OPTS += -DWITH_GFLAGS=ON +else +GLOG_CONF_OPTS += -DWITH_GFLAGS=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/gloox/0001-src-connectiontcpserver-cpp-fix-musl.patch b/package/gloox/0001-src-connectiontcpserver-cpp-fix-musl.patch new file mode 100644 index 00000000..56a2d498 --- /dev/null +++ b/package/gloox/0001-src-connectiontcpserver-cpp-fix-musl.patch @@ -0,0 +1,25 @@ +src/connectiontcpserver.cpp: fix musl build + +Build on musl fails on: + +connectiontcpserver.cpp:131:13: error: 'strerror' was not declared in this scope + + strerror( err ) + " (errno: " + util::int2string( err ) + ")"; + ^~~~~~~~ + +Fixes: + - http://autobuild.buildroot.org/results/a61a91bb6e1156eff5fb756f9dccfc2bb6c0f277 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://bugs.camaya.net/ticket/?id=291] + +diff -Nuar gloox-1.0.23-orig/src/connectiontcpserver.cpp gloox-1.0.23/src/connectiontcpserver.cpp +--- gloox-1.0.23-orig/src/connectiontcpserver.cpp 2020-06-05 23:22:59.624018949 +0200 ++++ gloox-1.0.23/src/connectiontcpserver.cpp 2020-06-05 23:26:20.708027221 +0200 +@@ -36,6 +36,7 @@ + # include + # include + # include ++# include + # include + # include + # include diff --git a/package/gloox/Config.in b/package/gloox/Config.in new file mode 100644 index 00000000..91e9f06e --- /dev/null +++ b/package/gloox/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_GLOOX + bool "gloox" + depends on BR2_INSTALL_LIBSTDCPP + select BR2_PACKAGE_MPC + help + gloox is a portable high-level Jabber/XMPP library for C++. It + is fully compliant with the XMPP RFCs, supports all of the + XMPP features (including SRV lookups, TLS, SASL, roster + management, and privacy lists), and implements several XEPs + that make it ideal for writing any kind of Jabber/XMPP client + or component. + + https://camaya.net/gloox/ + +comment "gloox needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/gloox/gloox.hash b/package/gloox/gloox.hash new file mode 100644 index 00000000..6419db90 --- /dev/null +++ b/package/gloox/gloox.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 ae1462be2a2eb8fe5cd054825143617c53c2c9c7195606cb5a5ba68c0f68f9c9 gloox-1.0.24.tar.bz2 +sha256 40a20c41c8dabb8ba61bea983fa8f2f6989e67fac56bb62c2249053807fd26af LICENSE diff --git a/package/gloox/gloox.mk b/package/gloox/gloox.mk new file mode 100644 index 00000000..b741d5eb --- /dev/null +++ b/package/gloox/gloox.mk @@ -0,0 +1,47 @@ +################################################################################ +# +# gloox +# +################################################################################ + +GLOOX_VERSION = 1.0.24 +GLOOX_SOURCE = gloox-$(GLOOX_VERSION).tar.bz2 +GLOOX_SITE = https://camaya.net/download +GLOOX_LICENSE = GPL-3.0 with OpenSSL exception +GLOOX_LICENSE_FILES = LICENSE +GLOOX_INSTALL_STAGING = YES +GLOOX_DEPENDENCIES = mpc +GLOOX_CONF_OPTS = \ + --without-libidn \ + --enable-getaddrinfo \ + --without-examples \ + --without-tests + +GLOOX_CXXFLAGS = $(TARGET_CXXFLAGS) +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y) +GLOOX_CXXFLAGS += -O0 +endif +GLOOX_CONF_ENV += CXXFLAGS="$(GLOOX_CXXFLAGS)" + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +GLOOX_CONF_ENV += LIBS=-latomic +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +GLOOX_CONF_OPTS += --with-zlib +GLOOX_DEPENDENCIES += zlib +else +GLOOX_CONF_OPTS += --without-zlib +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +GLOOX_CONF_OPTS += --with-openssl --without-gnutls +GLOOX_DEPENDENCIES += openssl +else ifeq ($(BR2_PACKAGE_GNUTLS),y) +GLOOX_CONF_OPTS += --with-gnutls --without-openssl +GLOOX_DEPENDENCIES += gnutls +else +GLOOX_CONF_OPTS += --without-gnutls --without-openssl +endif + +$(eval $(autotools-package)) diff --git a/package/glorytun/Config.in b/package/glorytun/Config.in new file mode 100644 index 00000000..82d248f7 --- /dev/null +++ b/package/glorytun/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_GLORYTUN + bool "glorytun" + select BR2_PACKAGE_LIBSODIUM + help + A small, simple and secure VPN. + + https://github.com/angt/glorytun diff --git a/package/glorytun/glorytun.hash b/package/glorytun/glorytun.hash new file mode 100644 index 00000000..9d1b7977 --- /dev/null +++ b/package/glorytun/glorytun.hash @@ -0,0 +1,2 @@ +sha256 137d9c525a05bb605163df0465367d36e943715ca773ce43d5ea66f0597600a3 glorytun-0.3.4.tar.gz +sha256 3d9ddddb8807c305287d9dbab58473e5307e9c91651c43c654a0828855d2b373 LICENSE diff --git a/package/glorytun/glorytun.mk b/package/glorytun/glorytun.mk new file mode 100644 index 00000000..d128ae83 --- /dev/null +++ b/package/glorytun/glorytun.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# glorytun +# +################################################################################ + +GLORYTUN_VERSION = 0.3.4 +GLORYTUN_SITE = https://github.com/angt/glorytun/releases/download/v$(GLORYTUN_VERSION) +GLORYTUN_DEPENDENCIES = libsodium host-pkgconf +GLORYTUN_LICENSE = BSD-2-clause +GLORYTUN_LICENSE_FILES = LICENSE + +$(eval $(autotools-package)) diff --git a/package/glslsandbox-player/Config.in b/package/glslsandbox-player/Config.in new file mode 100644 index 00000000..dc0d2c07 --- /dev/null +++ b/package/glslsandbox-player/Config.in @@ -0,0 +1,112 @@ +config BR2_PACKAGE_GLSLSANDBOX_PLAYER + bool "glslsandbox-player" + depends on BR2_PACKAGE_HAS_LIBEGL + depends on BR2_PACKAGE_HAS_LIBGLES + # Doesn't really depend on threads, but this makes sure we have at least + # one native windowing system available, and is good enough in practice. + depends on BR2_TOOLCHAIN_HAS_THREADS + help + GLSL Sandbox standalone player allow one to run and render + (most of) nice shaders available online on the + http://glslsandbox.com/ website, but without the need of an + Internet connection, a web browser or any of its + dependencies. Instead, the only requirement of + glslsandbox-player is a working EGL and GLESv2 libraries. + + This package is useful for stressing and testing GLES shader + compiler in GPU drivers. + + https://github.com/jolivain/glslsandbox-player + +if BR2_PACKAGE_GLSLSANDBOX_PLAYER + +config BR2_PACKAGE_GLSLSANDBOX_PLAYER_PNG + bool "Enable PNG support" + select BR2_PACKAGE_LIBPNG + help + Enable PNG texture loading support + +config BR2_PACKAGE_GLSLSANDBOX_PLAYER_TESTING + bool "Enable testing" + help + Generate and install test suite on target + +config BR2_PACKAGE_GLSLSANDBOX_PLAYER_SCRIPTS + bool "Install scripts" + depends on !BR2_PACKAGE_PYTHON # python3 + depends on !BR2_STATIC_LIBS # python3 + depends on BR2_TOOLCHAIN_HAS_THREADS # python3 + depends on BR2_USE_MMU # bash, python3 + depends on BR2_USE_WCHAR # python3 + select BR2_PACKAGE_BASH # runtime + select BR2_PACKAGE_BUSYBOX_SHOW_OTHERS if BR2_PACKAGE_BUSYBOX # bash + select BR2_PACKAGE_COREUTILS # runtime (timeout) + select BR2_PACKAGE_LIBCURL_CURL # runtime + select BR2_PACKAGE_IMAGEMAGICK # runtime + select BR2_PACKAGE_JPEG # runtime + select BR2_PACKAGE_LIBCURL # runtime + select BR2_PACKAGE_LIBOPENSSL_BIN if BR2_PACKAGE_LIBOPENSSL # runtime + select BR2_PACKAGE_LIBRESSL_BIN if BR2_PACKAGE_LIBRESSL # runtime + select BR2_PACKAGE_MAKE # runtime + select BR2_PACKAGE_OPENSSL # runtime + select BR2_PACKAGE_PYTHON3 # runtime + help + Install additional helper scripts + +choice + prompt "Native windowing system" + default BR2_PACKAGE_GLSLSANDBOX_PLAYER_MALI if BR2_PACKAGE_SUNXI_MALI_MAINLINE + default BR2_PACKAGE_GLSLSANDBOX_PLAYER_RPI if BR2_PACKAGE_RPI_USERLAND + default BR2_PACKAGE_GLSLSANDBOX_PLAYER_SDL2 if BR2_PACKAGE_SDL2_OPENGLES + default BR2_PACKAGE_GLSLSANDBOX_PLAYER_TISGX if BR2_PACKAGE_TI_SGX_UM + default BR2_PACKAGE_GLSLSANDBOX_PLAYER_WL if BR2_PACKAGE_WAYLAND + default BR2_PACKAGE_GLSLSANDBOX_PLAYER_X11 if BR2_PACKAGE_XORG7 + help + Select the native windowing system you wish to use. + +config BR2_PACKAGE_GLSLSANDBOX_PLAYER_KMS + bool "KMS/DRM/GBM" + depends on BR2_TOOLCHAIN_HAS_THREADS # libdrm + select BR2_PACKAGE_LIBDRM + +config BR2_PACKAGE_GLSLSANDBOX_PLAYER_MALI + bool "Allwinner ARM/Mali Frame Buffer" + depends on BR2_PACKAGE_SUNXI_MALI_MAINLINE + +config BR2_PACKAGE_GLSLSANDBOX_PLAYER_RPI + bool "RaspberryPI Frame Buffer" + depends on BR2_PACKAGE_RPI_USERLAND + +config BR2_PACKAGE_GLSLSANDBOX_PLAYER_SDL2 + bool "SDL2" + depends on BR2_PACKAGE_SDL2_OPENGLES + +config BR2_PACKAGE_GLSLSANDBOX_PLAYER_TISGX + bool "TI/SGX Frame Buffer" + depends on BR2_PACKAGE_TI_SGX_UM + +config BR2_PACKAGE_GLSLSANDBOX_PLAYER_VIVFB + bool "Vivante Frame Buffer" + depends on BR2_PACKAGE_IMX_GPU_VIV + +config BR2_PACKAGE_GLSLSANDBOX_PLAYER_WL + bool "Wayland" + depends on BR2_PACKAGE_WAYLAND + +config BR2_PACKAGE_GLSLSANDBOX_PLAYER_X11 + bool "X11" + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBX11 + +endchoice + +if BR2_PACKAGE_GLSLSANDBOX_PLAYER_WL +config BR2_PACKAGE_GLSLSANDBOX_PLAYER_WL_IVI + bool "Wayland IVI shell support" +endif + +endif + +comment "glslsandbox-player needs a toolchain w/ threads and an openGL ES and EGL driver" + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_PACKAGE_HAS_LIBEGL || !BR2_PACKAGE_HAS_LIBGLES diff --git a/package/glslsandbox-player/glslsandbox-player.hash b/package/glslsandbox-player/glslsandbox-player.hash new file mode 100644 index 00000000..66dac935 --- /dev/null +++ b/package/glslsandbox-player/glslsandbox-player.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 3458294a50c3d2fd54f806e46dd7bfba5f1e6aedadd6c396c76d70793419432b glslsandbox-player-2019.08.23.tar.gz +sha256 06a79395e8f3a4cc7ad068c6b59dfbe12c0efa4d27791e532345ceb1f41aea8a LICENSE diff --git a/package/glslsandbox-player/glslsandbox-player.mk b/package/glslsandbox-player/glslsandbox-player.mk new file mode 100644 index 00000000..5ace69d7 --- /dev/null +++ b/package/glslsandbox-player/glslsandbox-player.mk @@ -0,0 +1,72 @@ +################################################################################ +# +# glslsandbox-player +# +################################################################################ + +GLSLSANDBOX_PLAYER_VERSION = 2019.08.23 +GLSLSANDBOX_PLAYER_SITE = $(call github,jolivain,glslsandbox-player,v$(GLSLSANDBOX_PLAYER_VERSION)) +GLSLSANDBOX_PLAYER_AUTORECONF = YES +GLSLSANDBOX_PLAYER_DEPENDENCIES = libegl libgles host-pkgconf + +GLSLSANDBOX_PLAYER_LICENSE = BSD-2-Clause +GLSLSANDBOX_PLAYER_LICENSE_FILES = LICENSE + +ifeq ($(BR2_PACKAGE_GLSLSANDBOX_PLAYER_PNG),y) +GLSLSANDBOX_PLAYER_DEPENDENCIES += libpng +GLSLSANDBOX_PLAYER_CONF_OPTS += --with-libpng +else +GLSLSANDBOX_PLAYER_CONF_OPTS += --without-libpng +endif + +ifeq ($(BR2_PACKAGE_GLSLSANDBOX_PLAYER_TESTING),y) +GLSLSANDBOX_PLAYER_CONF_OPTS += \ + --with-shader-list=shader-tests.list \ + --enable-testing \ + --enable-install-testsuite +else +GLSLSANDBOX_PLAYER_CONF_OPTS += \ + --with-shader-list=shader-local.list \ + --disable-testing +endif + +ifeq ($(BR2_PACKAGE_GLSLSANDBOX_PLAYER_SCRIPTS),y) +GLSLSANDBOX_PLAYER_CONF_OPTS += --enable-install-scripts +else +GLSLSANDBOX_PLAYER_CONF_OPTS += --disable-install-scripts +endif + +ifeq ($(BR2_PACKAGE_GLSLSANDBOX_PLAYER_KMS),y) +# gbm dependency is not needed, as it is normally packaged with +# libegl/libgles drivers. +GLSLSANDBOX_PLAYER_DEPENDENCIES += libdrm +GLSLSANDBOX_PLAYER_CONF_OPTS += --with-native-gfx=kms +else ifeq ($(BR2_PACKAGE_GLSLSANDBOX_PLAYER_MALI),y) +GLSLSANDBOX_PLAYER_DEPENDENCIES += sunxi-mali-mainline +GLSLSANDBOX_PLAYER_CONF_OPTS += --with-native-gfx=mali +else ifeq ($(BR2_PACKAGE_GLSLSANDBOX_PLAYER_RPI),y) +GLSLSANDBOX_PLAYER_DEPENDENCIES += rpi-userland +GLSLSANDBOX_PLAYER_CONF_OPTS += --with-native-gfx=rpi +else ifeq ($(BR2_PACKAGE_GLSLSANDBOX_PLAYER_SDL2),y) +GLSLSANDBOX_PLAYER_DEPENDENCIES += sdl2 +GLSLSANDBOX_PLAYER_CONF_OPTS += --with-native-gfx=sdl2 +else ifeq ($(BR2_PACKAGE_GLSLSANDBOX_PLAYER_TISGX),y) +GLSLSANDBOX_PLAYER_DEPENDENCIES += ti-sgx-um +GLSLSANDBOX_PLAYER_CONF_OPTS += --with-native-gfx=tisgx +else ifeq ($(BR2_PACKAGE_GLSLSANDBOX_PLAYER_VIVFB),y) +GLSLSANDBOX_PLAYER_DEPENDENCIES += imx-gpu-viv +GLSLSANDBOX_PLAYER_CONF_OPTS += --with-native-gfx=vivfb +else ifeq ($(BR2_PACKAGE_GLSLSANDBOX_PLAYER_WL),y) +GLSLSANDBOX_PLAYER_DEPENDENCIES += wayland +GLSLSANDBOX_PLAYER_CONF_OPTS += --with-native-gfx=wl +ifeq ($(BR2_PACKAGE_GLSLSANDBOX_PLAYER_WL_IVI),y) +GLSLSANDBOX_PLAYER_CONF_OPTS += --enable-ivi +else +GLSLSANDBOX_PLAYER_CONF_OPTS += --disable-ivi +endif +else ifeq ($(BR2_PACKAGE_GLSLSANDBOX_PLAYER_X11),y) +GLSLSANDBOX_PLAYER_DEPENDENCIES += xlib_libX11 +GLSLSANDBOX_PLAYER_CONF_OPTS += --with-native-gfx=x11 +endif + +$(eval $(autotools-package)) diff --git a/package/gmp/Config.in b/package/gmp/Config.in new file mode 100644 index 00000000..226e0887 --- /dev/null +++ b/package/gmp/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_GMP + bool "gmp" + help + GNU Multiple Precision Arithmetic Library. + + http://gmplib.org/ diff --git a/package/gmp/gmp.hash b/package/gmp/gmp.hash new file mode 100644 index 00000000..d55e312b --- /dev/null +++ b/package/gmp/gmp.hash @@ -0,0 +1,6 @@ +# Locally calculated after checking pgp signature +sha256 fd4829912cddd12f84181c3451cc752be224643e87fac497b69edddadc49b4f2 gmp-6.2.1.tar.xz + +# Locally calculated +sha256 a853c2ffec17057872340eee242ae4d96cbf2b520ae27d903e1b2fef1a5f9d1c COPYING.LESSERv3 +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYINGv2 diff --git a/package/gmp/gmp.mk b/package/gmp/gmp.mk new file mode 100644 index 00000000..5e16ef19 --- /dev/null +++ b/package/gmp/gmp.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# gmp +# +################################################################################ + +GMP_VERSION = 6.2.1 +GMP_SITE = $(BR2_GNU_MIRROR)/gmp +GMP_SOURCE = gmp-$(GMP_VERSION).tar.xz +GMP_INSTALL_STAGING = YES +GMP_LICENSE = LGPL-3.0+ or GPL-2.0+ +GMP_LICENSE_FILES = COPYING.LESSERv3 COPYINGv2 +GMP_CPE_ID_VENDOR = gmplib +GMP_DEPENDENCIES = host-m4 +HOST_GMP_DEPENDENCIES = host-m4 + +# GMP doesn't support assembly for coldfire or mips r6 ISA yet +# Disable for ARM v7m since it has different asm constraints +ifeq ($(BR2_m68k_cf)$(BR2_MIPS_CPU_MIPS32R6)$(BR2_MIPS_CPU_MIPS64R6)$(BR2_ARM_CPU_ARMV7M),y) +GMP_CONF_OPTS += --disable-assembly +endif + +ifeq ($(BR2_INSTALL_LIBSTDCPP),y) +GMP_CONF_OPTS += --enable-cxx +else +GMP_CONF_OPTS += --disable-cxx +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/gmpc/Config.in b/package/gmpc/Config.in new file mode 100644 index 00000000..1aa74251 --- /dev/null +++ b/package/gmpc/Config.in @@ -0,0 +1,26 @@ +config BR2_PACKAGE_GMPC + bool "gmpc" + depends on BR2_PACKAGE_LIBGTK2 + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + select BR2_PACKAGE_LIBMPD + select BR2_PACKAGE_LIBSOUP + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_SQLITE + select BR2_PACKAGE_XLIB_LIBICE + select BR2_PACKAGE_XLIB_LIBSM + select BR2_PACKAGE_XLIB_LIBX11 + help + Gnome Music Player Client is a GNOME/GTK2.2 client for + Music Player Daemon. + + http://gmpcwiki.sarine.nl/index.php?title=GMPC + +comment "gmpc needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_XORG7 && BR2_PACKAGE_LIBGTK2 + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/gmpc/gmpc.hash b/package/gmpc/gmpc.hash new file mode 100644 index 00000000..66de8b62 --- /dev/null +++ b/package/gmpc/gmpc.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 a69414f35396846733632ca9619921d7acda537ffd6d49bd84b444945cb76b2c gmpc-11.8.16.tar.gz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/gmpc/gmpc.mk b/package/gmpc/gmpc.mk new file mode 100644 index 00000000..40b77eb1 --- /dev/null +++ b/package/gmpc/gmpc.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# gmpc +# +################################################################################ + +GMPC_VERSION = 11.8.16 +GMPC_SITE = http://download.sarine.nl/Programs/gmpc/$(GMPC_VERSION) +GMPC_CONF_ENV = ac_cv_path_GOB2=$(GOB2_HOST_BINARY) +GMPC_CONF_OPTS = --disable-mmkeys --disable-unique +GMPC_LICENSE = GPL-2.0+ +GMPC_LICENSE_FILES = COPYING +GMPC_DEPENDENCIES = host-gob2 host-intltool host-pkgconf host-vala \ + libglib2 libgtk2 libmpd libsoup sqlite \ + xlib_libICE xlib_libSM xlib_libX11 \ + $(TARGET_NLS_DEPENDENCIES) + +$(eval $(autotools-package)) diff --git a/package/gmrender-resurrect/0001-Drop-UpnpInit.patch b/package/gmrender-resurrect/0001-Drop-UpnpInit.patch new file mode 100644 index 00000000..18ec7bb5 --- /dev/null +++ b/package/gmrender-resurrect/0001-Drop-UpnpInit.patch @@ -0,0 +1,175 @@ +From dc8c4d4dc234311b3099e7f1efadf5d9733c81e9 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Fri, 21 Aug 2020 21:29:00 +0200 +Subject: [PATCH] Drop UpnpInit + +UpnpInit has been dropped from libupnp 1.14.x as it can't be fixed +against CallStranger a.k.a. CVE-2020-12695 so replace it by UpnpInit2 +which is available since version 1.6.7 and +https://github.com/pupnp/pupnp/commit/2bcbdffd89a70364147d345ec5e70a3fce5cbc29 + +Signed-off-by: Fabrice Fontaine +[Upstream status: +https://github.com/hzeller/gmrender-resurrect/pull/214] +--- + dist-scripts/centos7/README.md | 2 +- + dist-scripts/debian/gmediarender.1 | 8 ++------ + dist-scripts/fedora/README.md | 2 +- + src/main.c | 13 ++++--------- + src/upnp_device.c | 18 +++++++++--------- + src/upnp_device.h | 2 +- + 6 files changed, 18 insertions(+), 27 deletions(-) + +diff --git a/dist-scripts/centos7/README.md b/dist-scripts/centos7/README.md +index 278d777..ed82fb6 100644 +--- a/dist-scripts/centos7/README.md ++++ b/dist-scripts/centos7/README.md +@@ -45,7 +45,7 @@ Additional configuration is also recommended, sice there's no configuration file + # vi /etc/systemd/system/gmediarender.service.d/customize.conf # or nano, or emacs, or whatever editor you like + [Service] + ExecStart= +- ExecStart=/usr/bin/gmediarender --port=49494 --ip-address= -f "DLNA Renderer GMediaRender" ++ ExecStart=/usr/bin/gmediarender --port=49494 --interface-name= -f "DLNA Renderer GMediaRender" + + # systemctl daemon-reload + # systemctl start gmediarender.service +diff --git a/dist-scripts/debian/gmediarender.1 b/dist-scripts/debian/gmediarender.1 +index 96123ff..b2b1359 100644 +--- a/dist-scripts/debian/gmediarender.1 ++++ b/dist-scripts/debian/gmediarender.1 +@@ -50,12 +50,8 @@ Usually, it is desirable for the renderer + to show up on controllers under a recognisable and unique name. This is + the option to set that name. + .TP +-.B \-I, \-\-ip\-address \fI\\fP +-The local IP address the service is running and advertised on. +- +-This can +-only be a single address, and must be explicitly specified (i.e. not +-0.0.0.0). ++.B \-I, \-\-interface\-name \fI\\fP ++The local interface name the service is running and advertised on. + .TP + .B \-p, \-\-port \fI\\fP + Port to listen to. [49152..65535]. +diff --git a/dist-scripts/fedora/README.md b/dist-scripts/fedora/README.md +index 7b9ea4b..45aa536 100644 +--- a/dist-scripts/fedora/README.md ++++ b/dist-scripts/fedora/README.md +@@ -43,7 +43,7 @@ Additional configuration is also recommended, sice there's no configuration file + # vi /etc/systemd/system/gmediarender.service.d/customize.conf # or nano, or emacs, or whatever editor you like + [Service] + ExecStart= +- ExecStart=/usr/bin/gmediarender --port=49494 --ip-address= -f "DLNA Renderer GMediaRender" ++ ExecStart=/usr/bin/gmediarender --port=49494 --interface-name= -f "DLNA Renderer GMediaRender" + + # systemctl daemon-reload + # systemctl start gmediarender.service +diff --git a/src/main.c b/src/main.c +index ef720e3..2030c49 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -69,11 +69,7 @@ static gboolean show_transport_scpd = FALSE; + static gboolean show_outputs = FALSE; + static gboolean daemon_mode = FALSE; + +-// IP-address seems strange in libupnp: they actually don't bind to +-// that address, but to INADDR_ANY (miniserver.c in upnp library). +-// Apparently they just use this for the advertisement ? Anyway, 0.0.0.0 would +-// not work. +-static const gchar *ip_address = NULL; ++static const gchar *interface_name = NULL; + static int listen_port = 49494; + + #ifdef GMRENDER_UUID +@@ -92,9 +88,8 @@ static const gchar *mime_filter = NULL; + static GOptionEntry option_entries[] = { + { "version", 0, 0, G_OPTION_ARG_NONE, &show_version, + "Output version information and exit", NULL }, +- { "ip-address", 'I', 0, G_OPTION_ARG_STRING, &ip_address, +- "The local IP address the service is running and advertised " +- "(only one, 0.0.0.0 won't work)", NULL }, ++ { "interface-name", 'I', 0, G_OPTION_ARG_STRING, &interface_name, ++ "The local interface name the service is running and advertised", NULL }, + // The following is not very reliable, as libupnp does not set + // SO_REUSEADDR by default, so it might increment (sending patch). + { "port", 'p', 0, G_OPTION_ARG_INT, &listen_port, +@@ -302,7 +297,7 @@ int main(int argc, char **argv) + listen_port); + return EXIT_FAILURE; + } +- device = upnp_device_init(upnp_renderer, ip_address, listen_port); ++ device = upnp_device_init(upnp_renderer, interface_name, listen_port); + if (device == NULL) { + Log_error("main", "ERROR: Failed to initialize UPnP device"); + return EXIT_FAILURE; +diff --git a/src/upnp_device.c b/src/upnp_device.c +index db65e4f..3151238 100644 +--- a/src/upnp_device.c ++++ b/src/upnp_device.c +@@ -416,13 +416,13 @@ static UPNP_CALLBACK(event_handler, EventType, event, userdata) + + static gboolean initialize_device(struct upnp_device_descriptor *device_def, + struct upnp_device *result_device, +- const char *ip_address, ++ const char *interface_name, + unsigned short port) + { + int rc; + char *buf; + +- rc = UpnpInit(ip_address, port); ++ rc = UpnpInit2(interface_name, port); + /* There have been situations reported in which UPNP had issues + * initializing right after network came up. #129 + */ +@@ -430,13 +430,13 @@ static gboolean initialize_device(struct upnp_device_descriptor *device_def, + static const int kRetryTimeMs = 1000; + while (rc != UPNP_E_SUCCESS && retries_left--) { + usleep(kRetryTimeMs * 1000); +- Log_error("upnp", "UpnpInit(ip=%s, port=%d) Error: %s (%d). Retrying... (%ds)", +- ip_address, port, UpnpGetErrorMessage(rc), rc, retries_left); +- rc = UpnpInit(ip_address, port); ++ Log_error("upnp", "UpnpInit2(interface=%s, port=%d) Error: %s (%d). Retrying... (%ds)", ++ interface_name, port, UpnpGetErrorMessage(rc), rc, retries_left); ++ rc = UpnpInit2(interface_name, port); + } + if (UPNP_E_SUCCESS != rc) { +- Log_error("upnp", "UpnpInit(ip=%s, port=%d) Error: %s (%d). Giving up.", +- ip_address, port, UpnpGetErrorMessage(rc), rc); ++ Log_error("upnp", "UpnpInit2(interface=%s, port=%d) Error: %s (%d). Giving up.", ++ interface_name, port, UpnpGetErrorMessage(rc), rc); + return FALSE; + } + Log_info("upnp", "Registered IP=%s port=%d\n", +@@ -483,7 +483,7 @@ static gboolean initialize_device(struct upnp_device_descriptor *device_def, + } + + struct upnp_device *upnp_device_init(struct upnp_device_descriptor *device_def, +- const char *ip_address, ++ const char *interface_name, + unsigned short port) + { + int rc; +@@ -516,7 +516,7 @@ struct upnp_device *upnp_device_init(struct upnp_device_descriptor *device_def, + webserver_register_buf(srv->scpd_url, buf, "text/xml"); + } + +- if (!initialize_device(device_def, result_device, ip_address, port)) { ++ if (!initialize_device(device_def, result_device, interface_name, port)) { + UpnpFinish(); + free(result_device); + return NULL; +diff --git a/src/upnp_device.h b/src/upnp_device.h +index 3e635e1..8c8e783 100644 +--- a/src/upnp_device.h ++++ b/src/upnp_device.h +@@ -49,7 +49,7 @@ struct upnp_device; + struct action_event; + + struct upnp_device *upnp_device_init(struct upnp_device_descriptor *device_def, +- const char *ip_address, ++ const char *interface_name, + unsigned short port); + + void upnp_device_shutdown(struct upnp_device *device); diff --git a/package/gmrender-resurrect/Config.in b/package/gmrender-resurrect/Config.in new file mode 100644 index 00000000..db655ad7 --- /dev/null +++ b/package/gmrender-resurrect/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_GMRENDER_RESURRECT + bool "gmrender-resurrect" + depends on BR2_USE_WCHAR # gstreamer1 -> libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # gstreamer1 -> libglib2, libupnp + depends on BR2_USE_MMU # gstreamer1 + select BR2_PACKAGE_GSTREAMER1 + select BR2_PACKAGE_GST1_PLUGINS_BASE # run-time only + select BR2_PACKAGE_LIBUPNP + help + UPnP (DLNA) media renderer based on gstreamer + + https://github.com/hzeller/gmrender-resurrect + +comment "gmrender-resurrect needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/gmrender-resurrect/gmrender-resurrect.hash b/package/gmrender-resurrect/gmrender-resurrect.hash new file mode 100644 index 00000000..dc474be6 --- /dev/null +++ b/package/gmrender-resurrect/gmrender-resurrect.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 1f0cef76e4543879c9cd31cad73d6c4f778b965884c586405efcf63f2bdbb06f gmrender-resurrect-0.0.8.tar.gz +sha256 c38aee9e3c8c4d5d594ff548a1be05453023016d6286931f6512db215ec1fd42 COPYING diff --git a/package/gmrender-resurrect/gmrender-resurrect.mk b/package/gmrender-resurrect/gmrender-resurrect.mk new file mode 100644 index 00000000..3500ab37 --- /dev/null +++ b/package/gmrender-resurrect/gmrender-resurrect.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# gmrender-resurrect +# +################################################################################ + +GMRENDER_RESURRECT_VERSION = 0.0.8 +GMRENDER_RESURRECT_SITE = $(call github,hzeller,gmrender-resurrect,v$(GMRENDER_RESURRECT_VERSION)) +# Original distribution does not have default configure, +# so we need to autoreconf: +GMRENDER_RESURRECT_AUTORECONF = YES +GMRENDER_RESURRECT_LICENSE = GPL-2.0+ +GMRENDER_RESURRECT_LICENSE_FILES = COPYING +GMRENDER_RESURRECT_DEPENDENCIES = \ + gstreamer1 \ + libupnp + +$(eval $(autotools-package)) diff --git a/package/gnu-efi/0001-Make.defaults-don-t-override-ARCH-when-cross-compili.patch b/package/gnu-efi/0001-Make.defaults-don-t-override-ARCH-when-cross-compili.patch new file mode 100644 index 00000000..c2565417 --- /dev/null +++ b/package/gnu-efi/0001-Make.defaults-don-t-override-ARCH-when-cross-compili.patch @@ -0,0 +1,32 @@ +From 3452721eafae90749f4af63264c412f398460b15 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 20 Jan 2019 21:07:11 +0100 +Subject: [PATCH] Make.defaults: don't override ARCH when cross-compiling + +Don't override the user-provided ARCH when cross-compiling otherwise +ARCH won't be correct for armv5, aarch64 and x86_64 + +Fixes: + - http://autobuild.buildroot.org/results/2dfc0e10da25a8382a43557420d7dc3444c02dbb + +Signed-off-by: Fabrice Fontaine +--- + Make.defaults | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Make.defaults b/Make.defaults +index ba743f1..a0e5632 100755 +--- a/Make.defaults ++++ b/Make.defaults +@@ -67,7 +67,7 @@ ARCH ?= $(shell $(HOSTCC) -dumpmachine | cut -f1 -d- | sed -e s,i[345678 + + # Get ARCH from the compiler if cross compiling + ifneq ($(CROSS_COMPILE),) +- override ARCH := $(shell $(CC) -dumpmachine | cut -f1 -d-| sed -e s,i[3456789]86,ia32, -e 's,armv7.*,arm,' ) ++ ARCH := $(shell $(CC) -dumpmachine | cut -f1 -d-| sed -e s,i[3456789]86,ia32, -e 's,armv7.*,arm,' ) + endif + + # FreeBSD (and possibly others) reports amd64 instead of x86_64 +-- +2.14.1 + diff --git a/package/gnu-efi/0002-Revert-efilink-fix-build-with-gcc-4.8.patch b/package/gnu-efi/0002-Revert-efilink-fix-build-with-gcc-4.8.patch new file mode 100644 index 00000000..5a08c242 --- /dev/null +++ b/package/gnu-efi/0002-Revert-efilink-fix-build-with-gcc-4.8.patch @@ -0,0 +1,38 @@ +From 1f7b2e5bd6603b30202a66b6317a41e2be85742b Mon Sep 17 00:00:00 2001 +From: Esben Haabendal +Date: Tue, 26 Mar 2019 13:37:02 +0100 +Subject: [PATCH] Revert "efilink: fix build with gcc 4.8" + +This reverts commit 6335e5c697c57d8b5854b8202de3733bcb151ca6, as it breaks +gcc builds with '-nostdinc' flag. + +The fix in 1a53d8f88a452847b25f9689f9a08dbcf82c86e4 +(Fix for problem with undeclared intptr_t type), which is also merged +fixes the same problem, without causing breakage. + +Signed-off-by: Esben Haabendal +Signed-off-by: James Hilliard +[Upstream status: +https://sourceforge.net/p/gnu-efi/code/merge-requests/6/] +--- + inc/efilink.h | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/inc/efilink.h b/inc/efilink.h +index b69a6fd..cc5aa2d 100644 +--- a/inc/efilink.h ++++ b/inc/efilink.h +@@ -1,10 +1,6 @@ + #ifndef _EFI_LINK_H + #define _EFI_LINK_H + +-#if defined(__GNUC__) +-#include +-#endif +- + /*++ + + Copyright (c) 1998 Intel Corporation +-- +2.20.1 + diff --git a/package/gnu-efi/Config.in b/package/gnu-efi/Config.in new file mode 100644 index 00000000..d456a238 --- /dev/null +++ b/package/gnu-efi/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_GNU_EFI_ARCH_SUPPORTS + bool + default y if BR2_ARM_CPU_HAS_ARM + default y if BR2_aarch64 + default y if BR2_aarch64_be + default y if BR2_i386 + default y if BR2_x86_64 + +config BR2_PACKAGE_GNU_EFI + bool "gnu-efi" + depends on BR2_PACKAGE_GNU_EFI_ARCH_SUPPORTS + help + Develop EFI applications for ARM-64, ARM-32, x86_64, IA-64 + (IPF), IA-32 (x86), and MIPS platforms using the GNU toolchain + and the EFI development environment. + + http://gnu-efi.sourceforge.net/ diff --git a/package/gnu-efi/gnu-efi.hash b/package/gnu-efi/gnu-efi.hash new file mode 100644 index 00000000..bf9792b2 --- /dev/null +++ b/package/gnu-efi/gnu-efi.hash @@ -0,0 +1,6 @@ +# From http://sourceforge.net/projects/gnu-efi/files +md5 960a8379b6f95ee73d7778b70bf2a089 gnu-efi-3.0.10.tar.bz2 +sha1 a51b81eda97c0acbf3ac86123f298d3c0e396ce5 gnu-efi-3.0.10.tar.bz2 +# Locally computed +sha256 f12082a3a5f0c3e38c67262a9f34245d139ac2cdfc0a0bdcf03c9b1f56fa4fed gnu-efi-3.0.10.tar.bz2 +sha256 42d352e9c28dd446fd0209cd6f75588c8e41f0934540bb382bbd61c752360265 README.efilib diff --git a/package/gnu-efi/gnu-efi.mk b/package/gnu-efi/gnu-efi.mk new file mode 100644 index 00000000..69618029 --- /dev/null +++ b/package/gnu-efi/gnu-efi.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# gnu-efi +# +################################################################################ + +GNU_EFI_VERSION = 3.0.10 +GNU_EFI_SOURCE = gnu-efi-$(GNU_EFI_VERSION).tar.bz2 +GNU_EFI_SITE = http://downloads.sourceforge.net/project/gnu-efi +GNU_EFI_INSTALL_STAGING = YES +GNU_EFI_LICENSE = BSD-3-Clause and/or GPL-2.0+ (gnuefi), BSD-3-Clause (efilib) +GNU_EFI_LICENSE_FILES = README.efilib + +# gnu-efi is a set of library and header files used to build +# standalone EFI applications such as bootloaders. There is no point +# in installing these libraries to the target. +GNU_EFI_INSTALL_TARGET = NO + +ifeq ($(BR2_i386),y) +GNU_EFI_PLATFORM = ia32 +else ifeq ($(BR2_x86_64),y) +GNU_EFI_PLATFORM = x86_64 +else ifeq ($(BR2_arm)$(BR2_armeb),y) +GNU_EFI_PLATFORM = arm +else ifeq ($(BR2_aarch64)$(BR2_aarch64_be),y) +GNU_EFI_PLATFORM = aarch64 +endif + +GNU_EFI_MAKE_OPTS = \ + ARCH=$(GNU_EFI_PLATFORM) \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + PREFIX=/usr + +define GNU_EFI_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) $(GNU_EFI_MAKE_OPTS) +endef + +define GNU_EFI_INSTALL_STAGING_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) $(GNU_EFI_MAKE_OPTS) \ + INSTALLROOT=$(STAGING_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/gnuchess/Config.in b/package/gnuchess/Config.in new file mode 100644 index 00000000..0ddd2882 --- /dev/null +++ b/package/gnuchess/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_GNUCHESS + bool "gnuchess" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_FLEX + help + GNU Chess lets most modern computers play a full game of + chess. + + http://ftp.gnu.org/pub/gnu/chess + +comment "gnuchess needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/gnuchess/gnuchess.hash b/package/gnuchess/gnuchess.hash new file mode 100644 index 00000000..1641a7d8 --- /dev/null +++ b/package/gnuchess/gnuchess.hash @@ -0,0 +1,3 @@ +# sha256 locally computed +sha256 e536675a61abe82e61b919f6b786755441d9fcd4c21e1c82fb9e5340dd229846 gnuchess-6.2.7.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/gnuchess/gnuchess.mk b/package/gnuchess/gnuchess.mk new file mode 100644 index 00000000..60327dfe --- /dev/null +++ b/package/gnuchess/gnuchess.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# gnuchess +# +################################################################################ + +GNUCHESS_VERSION = 6.2.7 +GNUCHESS_SITE = $(BR2_GNU_MIRROR)/chess +GNUCHESS_LICENSE = GPL-3.0+ +GNUCHESS_LICENSE_FILES = COPYING +GNUCHESS_CPE_ID_VENDOR = gnu +GNUCHESS_CPE_ID_PRODUCT = chess + +GNUCHESS_DEPENDENCIES = host-flex flex +GNUCHESS_DEPENDENCIES += $(if $(BR2_PACKAGE_READLINE),readline) \ + $(TARGET_NLS_DEPENDENCIES) + +$(eval $(autotools-package)) diff --git a/package/gnupg/0001-build-Always-use-EXTERN_UNLESS_MAIN_MODULE-pattern.patch b/package/gnupg/0001-build-Always-use-EXTERN_UNLESS_MAIN_MODULE-pattern.patch new file mode 100644 index 00000000..9f0ba1b0 --- /dev/null +++ b/package/gnupg/0001-build-Always-use-EXTERN_UNLESS_MAIN_MODULE-pattern.patch @@ -0,0 +1,156 @@ +From 45ef4455a60929932d1499cf718c1c9f59af9f26 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 26 May 2020 22:57:05 +0200 +Subject: [PATCH] build: Always use EXTERN_UNLESS_MAIN_MODULE pattern + +This patch is loosely based on upstream commit +6aff8a132815a84bab69401c1e7de96ec549fbf2 ("build: Always use +EXTERN_UNLESS_MAIN_MODULE pattern."). However, this upstream commit +applies to gnupg2, and the code base has changed quite significantly +compared to gnupg 1.x, so upstream's patch cannot be applied +as-is. The goal of the patch is to make sure each variable is only +defined once, ass gcc 10 now default to -fno-common. + +Essentially, this patch mainly fixes the EXTERN_UNLESS_MAIN_MODULE +define so that it really expands to "extern" when +INCLUDED_BY_MAIN_MODULE is not defined, even on non-RiscOS +systems. Contrary to upstream's patch we however do not factorize the +multiple EXTERN_UNLESS_MAIN_MODULE definitions into a single place as +it requires too many changes: instead we simply fix the few +definitions of this macro. + +Once the macro is fixed, two places need to define +INCLUDED_BY_MAIN_MODULE: tools/bftest.c and tools/mpicalc.c so that +when they include the common headers, their variables are at least +defined once. + +The iobuf.{c,h} case is handled differently: iobuf.h gains an +unconditional "extern", with the variable being added to iobuf.c. This +is identical to what upstream's +6aff8a132815a84bab69401c1e7de96ec549fbf2 is doing. + +Signed-off-by: Thomas Petazzoni +--- + g10/options.h | 3 +-- + include/cipher.h | 2 +- + include/iobuf.h | 9 +-------- + include/memory.h | 2 +- + include/mpi.h | 2 +- + tools/bftest.c | 1 + + tools/mpicalc.c | 1 + + util/iobuf.c | 2 ++ + 8 files changed, 9 insertions(+), 13 deletions(-) + +diff --git a/g10/options.h b/g10/options.h +index 0ac6e7755..bae19e9e3 100644 +--- a/g10/options.h ++++ b/g10/options.h +@@ -26,8 +26,7 @@ + #include "packet.h" + + #ifndef EXTERN_UNLESS_MAIN_MODULE +-/* Norcraft can't cope with common symbols */ +-#if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE) ++#if !defined (INCLUDED_BY_MAIN_MODULE) + #define EXTERN_UNLESS_MAIN_MODULE extern + #else + #define EXTERN_UNLESS_MAIN_MODULE +diff --git a/include/cipher.h b/include/cipher.h +index dd4af18cb..6ef6e6829 100644 +--- a/include/cipher.h ++++ b/include/cipher.h +@@ -115,7 +115,7 @@ struct gcry_md_context { + typedef struct gcry_md_context *MD_HANDLE; + + #ifndef EXTERN_UNLESS_MAIN_MODULE +-#if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE) ++#if !defined (INCLUDED_BY_MAIN_MODULE) + #define EXTERN_UNLESS_MAIN_MODULE extern + #else + #define EXTERN_UNLESS_MAIN_MODULE +diff --git a/include/iobuf.h b/include/iobuf.h +index 030f8c8e9..b4d26b7e1 100644 +--- a/include/iobuf.h ++++ b/include/iobuf.h +@@ -69,14 +69,7 @@ struct iobuf_struct { + } unget; + }; + +-#ifndef EXTERN_UNLESS_MAIN_MODULE +-#if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE) +-#define EXTERN_UNLESS_MAIN_MODULE extern +-#else +-#define EXTERN_UNLESS_MAIN_MODULE +-#endif +-#endif +-EXTERN_UNLESS_MAIN_MODULE int iobuf_debug_mode; ++extern int iobuf_debug_mode; + + void iobuf_enable_special_filenames ( int yes ); + int iobuf_is_pipe_filename (const char *fname); +diff --git a/include/memory.h b/include/memory.h +index d414a9b2e..6698337e3 100644 +--- a/include/memory.h ++++ b/include/memory.h +@@ -91,7 +91,7 @@ unsigned secmem_get_flags(void); + #define DBG_MEMSTAT memory_stat_debug_mode + + #ifndef EXTERN_UNLESS_MAIN_MODULE +-#if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE) ++#if !defined (INCLUDED_BY_MAIN_MODULE) + #define EXTERN_UNLESS_MAIN_MODULE extern + #else + #define EXTERN_UNLESS_MAIN_MODULE +diff --git a/include/mpi.h b/include/mpi.h +index a4c16f5af..7a45ff805 100644 +--- a/include/mpi.h ++++ b/include/mpi.h +@@ -36,7 +36,7 @@ + #include "memory.h" + + #ifndef EXTERN_UNLESS_MAIN_MODULE +-#if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE) ++#if !defined (INCLUDED_BY_MAIN_MODULE) + #define EXTERN_UNLESS_MAIN_MODULE extern + #else + #define EXTERN_UNLESS_MAIN_MODULE +diff --git a/tools/bftest.c b/tools/bftest.c +index 8a1572c2b..5afd7e125 100644 +--- a/tools/bftest.c ++++ b/tools/bftest.c +@@ -26,6 +26,7 @@ + #include + #endif + ++#define INCLUDED_BY_MAIN_MODULE + #include "util.h" + #include "cipher.h" + #include "i18n.h" +diff --git a/tools/mpicalc.c b/tools/mpicalc.c +index 46e5fc824..31acd82a4 100644 +--- a/tools/mpicalc.c ++++ b/tools/mpicalc.c +@@ -31,6 +31,7 @@ + #include + #include + ++#define INCLUDED_BY_MAIN_MODULE + #include "util.h" + #include "mpi.h" + #include "i18n.h" +diff --git a/util/iobuf.c b/util/iobuf.c +index c8442929a..0d9ee4cec 100644 +--- a/util/iobuf.c ++++ b/util/iobuf.c +@@ -113,6 +113,8 @@ typedef struct { + static CLOSE_CACHE close_cache; + #endif + ++int iobuf_debug_mode; ++ + #ifdef _WIN32 + typedef struct { + int sock; +-- +2.26.2 + diff --git a/package/gnupg/Config.in b/package/gnupg/Config.in new file mode 100644 index 00000000..2db46318 --- /dev/null +++ b/package/gnupg/Config.in @@ -0,0 +1,45 @@ +config BR2_PACKAGE_GNUPG + bool "gnupg" + depends on !BR2_PACKAGE_GNUPG2 + select BR2_PACKAGE_ZLIB + help + GnuPG is the GNU project's complete and free implementation + of the OpenPGP standard as defined by RFC4880. GnuPG allows + to encrypt and sign your data and communication, features a + versatile key management system as well as access modules + for all kinds of public key directories. GnuPG, also known + as GPG, is a command line tool with features for easy + integration with other applications. + + http://gnupg.org/ + +if BR2_PACKAGE_GNUPG + +config BR2_PACKAGE_GNUPG_AES + bool "AES support" + help + Support for the AES cipher + +config BR2_PACKAGE_GNUPG_RSA + bool "RSA support" + help + Support for RSA public key algorithm + +config BR2_PACKAGE_GNUPG_GPGV + bool "gpgv" + help + gpgv is an OpenPGP signature verification tool. + + This program is actually a stripped-down version of gpg + which is only able to check signatures. It is somewhat + smaller than the fully-blown gpg and uses a different (and + simpler) way to check that the public keys used to make the + signature are valid. There are no configuration files and + only a few options are implemented. + +config BR2_PACKAGE_GNUPG_GPGSPLIT + bool "gpgsplit" + help + gpgsplit splits an OpenPGP message into packets. + +endif diff --git a/package/gnupg/Config.in.host b/package/gnupg/Config.in.host new file mode 100644 index 00000000..36864157 --- /dev/null +++ b/package/gnupg/Config.in.host @@ -0,0 +1,12 @@ +config BR2_PACKAGE_HOST_GNUPG + bool "host gnupg" + help + GnuPG is the GNU project's complete and free implementation + of the OpenPGP standard as defined by RFC4880. GnuPG allows + to encrypt and sign your data and communication, features a + versatile key management system as well as access modules + for all kinds of public key directories. GnuPG, also known + as GPG, is a command line tool with features for easy + integration with other applications. + + http://gnupg.org/ diff --git a/package/gnupg/gnupg.hash b/package/gnupg/gnupg.hash new file mode 100644 index 00000000..f4b33bda --- /dev/null +++ b/package/gnupg/gnupg.hash @@ -0,0 +1,5 @@ +# Locally computed based on signature +# https://gnupg.org/ftp/gcrypt/gnupg/gnupg-1.4.23.tar.bz2.sig +sha256 c9462f17e651b6507848c08c430c791287cd75491f8b5a8b50c6ed46b12678ba gnupg-1.4.23.tar.bz2 +# locally computed +sha256 fc82ca8b6fdb18d4e3e85cfd8ab58d1bcd3f1b29abe782895abd91d64763f8e7 COPYING diff --git a/package/gnupg/gnupg.mk b/package/gnupg/gnupg.mk new file mode 100644 index 00000000..9729441b --- /dev/null +++ b/package/gnupg/gnupg.mk @@ -0,0 +1,90 @@ +################################################################################ +# +# gnupg +# +################################################################################ + +GNUPG_VERSION = 1.4.23 +GNUPG_SOURCE = gnupg-$(GNUPG_VERSION).tar.bz2 +GNUPG_SITE = https://gnupg.org/ftp/gcrypt/gnupg +GNUPG_LICENSE = GPL-3.0+ +GNUPG_LICENSE_FILES = COPYING +GNUPG_DEPENDENCIES = zlib $(if $(BR2_PACKAGE_LIBICONV),libiconv) +GNUPG_CPE_ID_VENDOR = gnupg +GNUPG_CONF_ENV = ac_cv_sys_symbol_underscore=no +GNUPG_CONF_OPTS = \ + --disable-rpath \ + --enable-minimal \ + --disable-regex \ + --enable-sha256 \ + --enable-sha512 + +HOST_GNUPG_DEPENDENCIES = host-zlib +HOST_GNUPG_CONF_OPTS = \ + --disable-rpath \ + --enable-minimal \ + --disable-regex \ + --enable-sha256 \ + --enable-sha512 \ + --enable-aes \ + --enable-rsa \ + --without-libcurl \ + --without-readline + +# gnupg doesn't support assembly for coldfire +ifeq ($(BR2_m68k_cf),y) +GNUPG_CONF_OPTS += --disable-asm +endif + +ifeq ($(BR2_PACKAGE_BZIP2),y) +GNUPG_CONF_OPTS += --enable-bzip2 +GNUPG_DEPENDENCIES += bzip2 +endif + +ifeq ($(BR2_PACKAGE_LIBCURL),y) +GNUPG_CONF_ENV += ac_cv_path__libcurl_config=$(STAGING_DIR)/usr/bin/curl-config +GNUPG_DEPENDENCIES += libcurl +else +GNUPG_CONF_OPTS += --without-libcurl +endif + +ifeq ($(BR2_PACKAGE_READLINE),y) +GNUPG_DEPENDENCIES += readline +else +GNUPG_CONF_OPTS += --without-readline +endif + +ifeq ($(BR2_PACKAGE_GNUPG_AES),y) +GNUPG_CONF_OPTS += --enable-aes +else +GNUPG_CONF_OPTS += --disable-aes +endif + +ifeq ($(BR2_PACKAGE_GNUPG_RSA),y) +GNUPG_CONF_OPTS += --enable-rsa +else +GNUPG_CONF_OPTS += --disable-rsa +endif + +ifneq ($(BR2_PACKAGE_GNUPG_GPGV),y) +define GNUPG_REMOVE_GPGV + rm -f $(TARGET_DIR)/usr/bin/gpgv +endef +GNUPG_POST_INSTALL_TARGET_HOOKS += GNUPG_REMOVE_GPGV +endif + +ifneq ($(BR2_PACKAGE_GNUPG_GPGSPLIT),y) +define GNUPG_REMOVE_GPGSPLIT + rm -f $(TARGET_DIR)/usr/bin/gpgsplit +endef +GNUPG_POST_INSTALL_TARGET_HOOKS += GNUPG_REMOVE_GPGSPLIT +endif + +define GNUPG_FIXUP_GPG_ZIP + test -f $(TARGET_DIR)/usr/bin/gpg-zip && \ + $(SED) 's%^TAR=.*%TAR=/bin/tar%' $(TARGET_DIR)/usr/bin/gpg-zip +endef +GNUPG_POST_INSTALL_TARGET_HOOKS += GNUPG_FIXUP_GPG_ZIP + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/gnupg2/Config.in b/package/gnupg2/Config.in new file mode 100644 index 00000000..ef1817ef --- /dev/null +++ b/package/gnupg2/Config.in @@ -0,0 +1,43 @@ +comment "gnupg2 needs a toolchain w/ threads and dynamic library support" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_GNUPG2 + bool "gnupg2" + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgpg-error + depends on BR2_TOOLCHAIN_HAS_THREADS # libnpth + depends on BR2_USE_MMU # libassuan, libnpth + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_LIBGPG_ERROR + select BR2_PACKAGE_LIBGCRYPT + select BR2_PACKAGE_LIBASSUAN + select BR2_PACKAGE_LIBKSBA + select BR2_PACKAGE_LIBNPTH + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + GnuPG is the GNU project's complete and free implementation + of the OpenPGP standard as defined by RFC4880. GnuPG allows + to encrypt and sign your data and communication, features a + versatile key management system as well as access modules + for all kinds of public key directories. GnuPG, also known + as GPG, is a command line tool with features for easy + integration with other applications. + + http://gnupg.org/ + +if BR2_PACKAGE_GNUPG2 + +config BR2_PACKAGE_GNUPG2_GPGV + bool "gpgv" + help + gpgv is an OpenPGP signature verification tool. + + This program is actually a stripped-down version of gpg + which is only able to check signatures. It is somewhat + smaller than the fully-blown gpg and uses a different (and + simpler) way to check that the public keys used to make the + signature are valid. There are no configuration files and + only a few options are implemented. + +endif diff --git a/package/gnupg2/gnupg2.hash b/package/gnupg2/gnupg2.hash new file mode 100644 index 00000000..2b376ea0 --- /dev/null +++ b/package/gnupg2/gnupg2.hash @@ -0,0 +1,7 @@ +# From https://lists.gnupg.org/pipermail/gnupg-announce/2020q4/000450.html +sha1 074b21dd07419575fa31c0c5d3116596d5544cbd gnupg-2.2.25.tar.bz2 +# Calculated based on the hash above and signature +# https://gnupg.org/ftp/gcrypt/gnupg/gnupg-2.2.25.tar.bz2.sig +# using key D8692123C4065DEA5E0F3AB5249B39D24F25E3B6 +sha256 c55307b247af4b6f44d2916a25ffd1fb64ce2e509c3c3d028dbe7fbf309dc30a gnupg-2.2.25.tar.bz2 +sha256 bc2d6664f6276fa0a72d57633b3ae68dc7dcb677b71018bf08c8e93e509f1357 COPYING diff --git a/package/gnupg2/gnupg2.mk b/package/gnupg2/gnupg2.mk new file mode 100644 index 00000000..2f62890d --- /dev/null +++ b/package/gnupg2/gnupg2.mk @@ -0,0 +1,68 @@ +################################################################################ +# +# gnupg2 +# +################################################################################ + +GNUPG2_VERSION = 2.2.25 +GNUPG2_SOURCE = gnupg-$(GNUPG2_VERSION).tar.bz2 +GNUPG2_SITE = https://gnupg.org/ftp/gcrypt/gnupg +GNUPG2_LICENSE = GPL-3.0+ +GNUPG2_LICENSE_FILES = COPYING +GNUPG2_CPE_ID_VENDOR = gnupg +GNUPG2_CPE_ID_PRODUCT = gnupg +GNUPG2_DEPENDENCIES = zlib libgpg-error libgcrypt libassuan libksba libnpth \ + $(if $(BR2_PACKAGE_LIBICONV),libiconv) host-pkgconf + +GNUPG2_CONF_OPTS = \ + --disable-rpath --disable-regex \ + --with-libgpg-error-prefix=$(STAGING_DIR)/usr \ + --with-libgcrypt-prefix=$(STAGING_DIR)/usr \ + --with-libassuan-prefix=$(STAGING_DIR)/usr \ + --with-ksba-prefix=$(STAGING_DIR)/usr \ + --with-npth-prefix=$(STAGING_DIR)/usr + +ifneq ($(BR2_PACKAGE_GNUPG2_GPGV),y) +define GNUPG2_REMOVE_GPGV + rm -f $(TARGET_DIR)/usr/bin/gpgv +endef +GNUPG2_POST_INSTALL_TARGET_HOOKS += GNUPG2_REMOVE_GPGV +endif + +ifeq ($(BR2_PACKAGE_BZIP2),y) +GNUPG2_CONF_OPTS += --enable-bzip2 --with-bzip2=$(STAGING_DIR) +GNUPG2_DEPENDENCIES += bzip2 +else +GNUPG2_CONF_OPTS += --disable-bzip2 +endif + +ifeq ($(BR2_PACKAGE_GNUTLS),y) +GNUPG2_CONF_OPTS += --enable-gnutls +GNUPG2_DEPENDENCIES += gnutls +else +GNUPG2_CONF_OPTS += --disable-gnutls +endif + +ifeq ($(BR2_PACKAGE_LIBUSB),y) +GNUPG2_CONF_ENV += CPPFLAGS="$(TARGET_CPPFLAGS) -I$(STAGING_DIR)/usr/include/libusb-1.0" +GNUPG2_CONF_OPTS += --enable-ccid-driver +GNUPG2_DEPENDENCIES += libusb +else +GNUPG2_CONF_OPTS += --disable-ccid-driver +endif + +ifeq ($(BR2_PACKAGE_READLINE),y) +GNUPG2_CONF_OPTS += --with-readline=$(STAGING_DIR) +GNUPG2_DEPENDENCIES += readline +else +GNUPG2_CONF_OPTS += --without-readline +endif + +ifeq ($(BR2_PACKAGE_SQLITE),y) +GNUPG2_CONF_OPTS += --enable-sqlite +GNUPG2_DEPENDENCIES += sqlite +else +GNUPG2_CONF_OPTS += --disable-sqlite +endif + +$(eval $(autotools-package)) diff --git a/package/gnuplot/0001-configure-add-without-demo-option.patch b/package/gnuplot/0001-configure-add-without-demo-option.patch new file mode 100644 index 00000000..a557e279 --- /dev/null +++ b/package/gnuplot/0001-configure-add-without-demo-option.patch @@ -0,0 +1,69 @@ +Add options to enable/disable docs and demos + +Originally written by Anthony Viallard +. + +Signed-off-by: Thomas Petazzoni +[Vincent: adapt patch to 5.0.5 version] +Signed-off-by: Vicente Olivert Riera +[Michael: adapt patch to 5.4.0 version] +Signed-off-by: Michael Fischer + +diff -Naur a/configure.ac b/configure.ac +--- a/configure.ac 2020-07-12 02:29:47.000000000 +0200 ++++ b/configure.ac 2020-08-06 14:21:17.918756893 +0200 +@@ -713,6 +713,17 @@ + [ Define if you want to read .gnuplot from current directory (SECURITY RISK!).]) + fi + ++dnl Whether we want to build the doc files ++dnl Does nothing here, is passed on to the doc subdir ++AC_ARG_ENABLE(doc,dnl ++[ --disable-doc do not build doc files]) ++ ++dnl Whether we want to build the demo files ++dnl Does nothing here, is passed on to the demo subdir ++AC_ARG_ENABLE(demo,dnl ++[ --disable-demo do not build demo files]) ++ ++ + dnl Sort help/subtopic tables by row or column + AC_ARG_WITH(row-help,dnl + [ --with-row-help format help and subtopic tables by row (default) +@@ -1095,6 +1106,24 @@ + AC_DEFINE_UNQUOTED([DIST_CONTACT],["$DIST_CONTACT"],[Contact address for modified and binary distributed gnuplot versions]) + fi + ++dnl build doc files ++if test "$enable_doc" != no; then ++ AC_CONFIG_SUBDIRS(docs) ++ DOCSUBDIR=docs ++else ++ DOCSUBDIR= ++fi ++AC_SUBST(DOCSUBDIR) ++ ++dnl build demo files ++if test "$enable_demo" != no; then ++ AC_CONFIG_SUBDIRS(demo) ++ DEMOSUBDIR=demo ++else ++ DEMOSUBDIR= ++fi ++AC_SUBST(DEMOSUBDIR) ++ + dnl Substitute variables + AC_SUBST(PACKAGE) + AC_SUBST(VERSION_MAJOR) +diff -Naur a/Makefile.am b/Makefile.am +--- a/Makefile.am 2020-03-31 19:28:16.000000000 +0200 ++++ b/Makefile.am 2020-08-06 14:34:12.995097799 +0200 +@@ -1,7 +1,7 @@ + ## Process this file with automake to produce Makefile.in -*-Makefile-*- + AUTOMAKE_OPTIONS = foreign + +-SUBDIRS = config m4 term src docs man demo share ++SUBDIRS = config m4 term src $(DOCSUBDIR) man $(DEMOSUBDIR) share + + EXTRA_DIST = BUGS Copyright FAQ.pdf INSTALL INSTALL.gnu \ + PATCHLEVEL PGPKEYS README RELEASE_NOTES \ diff --git a/package/gnuplot/Config.in b/package/gnuplot/Config.in new file mode 100644 index 00000000..603c194f --- /dev/null +++ b/package/gnuplot/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_GNUPLOT + bool "gnuplot" + help + A portable command-line driven graphing utility. + + http://www.gnuplot.info/ diff --git a/package/gnuplot/gnuplot.hash b/package/gnuplot/gnuplot.hash new file mode 100644 index 00000000..9770185c --- /dev/null +++ b/package/gnuplot/gnuplot.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/gnuplot/files/gnuplot/5.4.1/ +md5 80f75b684f1175d36cd6908ff1ceb588 gnuplot-5.4.1.tar.gz +sha1 bb1cd34f8ec0357eccef70122f0fd531ced5dd29 gnuplot-5.4.1.tar.gz +# Locally computed +sha256 6b690485567eaeb938c26936e5e0681cf70c856d273cc2c45fabf64d8bc6590e gnuplot-5.4.1.tar.gz +sha256 895928ec0735cca1c8cec42656c7e314a065d0242813bb8693c0c1bf61fd4e4d Copyright diff --git a/package/gnuplot/gnuplot.mk b/package/gnuplot/gnuplot.mk new file mode 100644 index 00000000..9a72a471 --- /dev/null +++ b/package/gnuplot/gnuplot.mk @@ -0,0 +1,54 @@ +################################################################################ +# +# gnuplot +# +################################################################################ + +GNUPLOT_VERSION = 5.4.1 +GNUPLOT_SITE = http://downloads.sourceforge.net/project/gnuplot/gnuplot/$(GNUPLOT_VERSION) +GNUPLOT_LICENSE = gnuplot license (open source) +GNUPLOT_LICENSE_FILES = Copyright +GNUPLOT_CPE_ID_VENDOR = gnuplot_project + +GNUPLOT_AUTORECONF = YES + +GNUPLOT_CONF_OPTS = \ + --without-x \ + --disable-raise-console \ + --disable-mouse \ + --without-tutorial \ + --disable-demo \ + --without-row-help \ + --disable-history-file \ + --disable-wxwidgets \ + --without-lua \ + --without-latex \ + --without-cairo + +# relocation truncated to fit: R_68K_GOT16O +ifeq ($(BR2_m68k_cf),y) +GNUPLOT_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) -mxgot" +endif + +ifeq ($(BR2_PACKAGE_GD)$(BR2_PACKAGE_LIBPNG),yy) +GNUPLOT_CONF_OPTS += --with-gd +GNUPLOT_DEPENDENCIES += host-pkgconf gd +else +GNUPLOT_CONF_OPTS += --without-gd +endif + +ifeq ($(BR2_PACKAGE_READLINE),y) +GNUPLOT_CONF_OPTS += --with-readline=gnu +GNUPLOT_DEPENDENCIES += readline +else +GNUPLOT_CONF_OPTS += --without-readline +endif + +# Remove Javascript scripts, lua scripts, PostScript files +define GNUPLOT_REMOVE_UNNEEDED_FILES + $(RM) -rf $(TARGET_DIR)/usr/share/gnuplot +endef + +GNUPLOT_POST_INSTALL_TARGET_HOOKS += GNUPLOT_REMOVE_UNNEEDED_FILES + +$(eval $(autotools-package)) diff --git a/package/gnuradio/0001-gr-digital-glfsr.h-drop-boost-cstdint.hpp-and-use-cs.patch b/package/gnuradio/0001-gr-digital-glfsr.h-drop-boost-cstdint.hpp-and-use-cs.patch new file mode 100644 index 00000000..532bebcf --- /dev/null +++ b/package/gnuradio/0001-gr-digital-glfsr.h-drop-boost-cstdint.hpp-and-use-cs.patch @@ -0,0 +1,39 @@ +From f643bc12100c67288adda3699a9e61d6a66fb529 Mon Sep 17 00:00:00 2001 +From: Gwenhael Goavec-Merou +Date: Fri, 7 Feb 2020 16:49:30 +0100 +Subject: [PATCH] gr-digital:glfsr.h: drop boost/cstdint.hpp and use cstdint + +gr-digital/glfsr.h include boost/cstdint.hpp to have uintxx_t. +These types are in boost namespace but nor using namespace xxx, nor boost:: are used. +The result is : +In file included from /home/buildroot/autobuild/instance-0/output-1/build/gnuradio-3.8.0.0/gr-digital/lib/glfsr.cc:23: +/home/buildroot/autobuild/instance-0/output-1/build/gnuradio-3.8.0.0/gr-digital/lib/../include/gnuradio/digital/glfsr.h:42:5: error: 'uint32_t' does not name a type; did you mean 'u_int32_t'? +uint32_t d_shift_register; +^~~~~~~~ +u_int32_t + +Since Gnuradio policy is Less boost == better and C++11 is used, use cstdint +instead of boost/cstdint.hpp. + +[backported from 475e4a156b516c089175afb998acdc80b740b437] +Signed-off-by: Gwenhael Goavec-Merou +--- + gr-digital/include/gnuradio/digital/glfsr.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/gr-digital/include/gnuradio/digital/glfsr.h b/gr-digital/include/gnuradio/digital/glfsr.h +index 0b5141f1f..1003bcd01 100644 +--- a/gr-digital/include/gnuradio/digital/glfsr.h ++++ b/gr-digital/include/gnuradio/digital/glfsr.h +@@ -24,7 +24,7 @@ + #define INCLUDED_DIGITAL_GLFSR_H + + #include +-#include ++#include + + namespace gr { + namespace digital { +-- +2.24.1 + diff --git a/package/gnuradio/0002-boost_qualify_placeholders_with_their_full_namespace.patch b/package/gnuradio/0002-boost_qualify_placeholders_with_their_full_namespace.patch new file mode 100644 index 00000000..4f3d8921 --- /dev/null +++ b/package/gnuradio/0002-boost_qualify_placeholders_with_their_full_namespace.patch @@ -0,0 +1,1025 @@ +From 5752be31d17be80203d9fc44a73661712542bfe1 Mon Sep 17 00:00:00 2001 +From: ponce +Date: Sun, 17 May 2020 14:02:57 +0200 +Subject: [PATCH] boost: qualify placeholders with their full namespace. + +This is needed with boost >= 1.73.0. + +[Upstream status: https://github.com/gnuradio/gnuradio/pull/3566] + +Signed-off-by: ponce +Signed-off-by: Gwenhael Goavec-Merou +--- + .../(exported from wiki) Message Passing.txt | 8 +++--- + gnuradio-runtime/lib/block.cc | 3 ++- + gr-analog/lib/sig_source_impl.cc | 4 ++- + gr-blocks/lib/copy_impl.cc | 4 ++- + gr-blocks/lib/message_debug_impl.cc | 13 +++++++--- + gr-blocks/lib/message_strobe_impl.cc | 5 ++-- + gr-blocks/lib/message_strobe_random_impl.cc | 5 ++-- + gr-blocks/lib/multiply_matrix_impl.cc | 11 +++++--- + gr-blocks/lib/mute_impl.cc | 5 ++-- + gr-blocks/lib/nop_impl.cc | 5 ++-- + gr-blocks/lib/pdu_filter_impl.cc | 5 ++-- + gr-blocks/lib/pdu_remove_impl.cc | 5 ++-- + gr-blocks/lib/pdu_set_impl.cc | 4 ++- + gr-blocks/lib/random_pdu_impl.cc | 5 ++-- + gr-blocks/lib/repeat_impl.cc | 5 ++-- + gr-blocks/lib/socket_pdu_impl.cc | 18 ++++++++----- + .../lib/tagged_stream_multiply_length_impl.cc | 7 +++--- + gr-blocks/lib/tuntap_pdu_impl.cc | 3 ++- + gr-digital/lib/chunks_to_symbols_impl.cc | 5 ++-- + .../lib/constellation_receiver_cb_impl.cc | 14 ++++++----- + gr-digital/lib/costas_loop_cc_impl.cc | 4 ++- + gr-digital/lib/crc32_async_bb_impl.cc | 8 ++++-- + gr-digital/lib/header_payload_demux_impl.cc | 7 +++--- + .../lib/protocol_formatter_async_impl.cc | 4 ++- + gr-fec/lib/async_decoder_impl.cc | 8 ++++-- + gr-fec/lib/async_encoder_impl.cc | 8 ++++-- + gr-fec/lib/depuncture_bb_impl.cc | 4 ++- + gr-fec/lib/puncture_bb_impl.cc | 4 ++- + gr-fec/lib/puncture_ff_impl.cc | 4 ++- + gr-filter/lib/freq_xlating_fir_filter_impl.cc | 2 +- + gr-filter/lib/mmse_resampler_cc_impl.cc | 5 ++-- + gr-filter/lib/mmse_resampler_ff_impl.cc | 5 ++-- + gr-qtgui/lib/const_sink_c_impl.cc | 5 ++-- + gr-qtgui/lib/edit_box_msg_impl.cc | 4 ++- + gr-qtgui/lib/freq_sink_c_impl.cc | 12 ++++++--- + gr-qtgui/lib/freq_sink_f_impl.cc | 12 ++++++--- + gr-qtgui/lib/histogram_sink_f_impl.cc | 5 ++-- + gr-qtgui/lib/sink_c_impl.cc | 4 ++- + gr-qtgui/lib/sink_f_impl.cc | 4 ++- + gr-qtgui/lib/time_raster_sink_b_impl.cc | 4 ++- + gr-qtgui/lib/time_raster_sink_f_impl.cc | 4 ++- + gr-qtgui/lib/time_sink_c_impl.cc | 4 ++- + gr-qtgui/lib/time_sink_f_impl.cc | 4 ++- + gr-qtgui/lib/waterfall_sink_c_impl.cc | 13 +++++++--- + gr-qtgui/lib/waterfall_sink_f_impl.cc | 13 +++++++--- + gr-uhd/lib/usrp_block_impl.cc | 25 ++++++++++++------- + gr-uhd/lib/usrp_source_impl.cc | 5 ++-- + gr-zeromq/lib/pub_msg_sink_impl.cc | 4 ++- + gr-zeromq/lib/push_msg_sink_impl.cc | 4 ++- + 49 files changed, 216 insertions(+), 107 deletions(-) + +diff --git a/docs/usage-manual/(exported from wiki) Message Passing.txt b/docs/usage-manual/(exported from wiki) Message Passing.txt +index 4654bd5dac..551e710228 100644 +--- a/docs/usage-manual/(exported from wiki) Message Passing.txt ++++ b/docs/usage-manual/(exported from wiki) Message Passing.txt +@@ -94,7 +94,7 @@ must then bind this port to the message handler. For this, we use + Boost's 'bind' function: + + set_msg_handler(pmt::pmt_t port_id, +- boost::bind(&block_class::message_handler_function, this, _1)); ++ boost::bind(&block_class::message_handler_function, this, boost::placeholders::_1)); + + In Python: + +@@ -241,15 +241,15 @@ The constructor of this block looks like this: + { + message_port_register_in(pmt::mp("print")); + set_msg_handler(pmt::mp("print"), +- boost::bind(&message_debug_impl::print, this, _1)); ++ boost::bind(&message_debug_impl::print, this, boost::placeholders::_1)); + + message_port_register_in(pmt::mp("store")); + set_msg_handler(pmt::mp("store"), +- boost::bind(&message_debug_impl::store, this, _1)); ++ boost::bind(&message_debug_impl::store, this, boost::placeholders::_1)); + + message_port_register_in(pmt::mp("print_pdu")); + set_msg_handler(pmt::mp("print_pdu"), +- boost::bind(&message_debug_impl::print_pdu, this, _1)); ++ boost::bind(&message_debug_impl::print_pdu, this, boost::placeholders::_1)); + } + + +diff --git a/gnuradio-runtime/lib/block.cc b/gnuradio-runtime/lib/block.cc +index 5914283908..fca4cab97e 100644 +--- a/gnuradio-runtime/lib/block.cc ++++ b/gnuradio-runtime/lib/block.cc +@@ -61,7 +61,8 @@ block::block(const std::string& name, + { + global_block_registry.register_primitive(alias(), this); + message_port_register_in(d_system_port); +- set_msg_handler(d_system_port, boost::bind(&block::system_handler, this, _1)); ++ set_msg_handler(d_system_port, ++ boost::bind(&block::system_handler, this, boost::placeholders::_1)); + + configure_default_loggers(d_logger, d_debug_logger, symbol_name()); + } +diff --git a/gr-analog/lib/sig_source_impl.cc b/gr-analog/lib/sig_source_impl.cc +index b73b32982d..01c5fbfdb0 100644 +--- a/gr-analog/lib/sig_source_impl.cc ++++ b/gr-analog/lib/sig_source_impl.cc +@@ -67,7 +67,9 @@ sig_source_impl::sig_source_impl(double sampling_freq, + this->set_phase(phase); + this->message_port_register_in(pmt::mp("freq")); + this->set_msg_handler(pmt::mp("freq"), +- boost::bind(&sig_source_impl::set_frequency_msg, this, _1)); ++ boost::bind(&sig_source_impl::set_frequency_msg, ++ this, ++ boost::placeholders::_1)); + } + + template +diff --git a/gr-blocks/lib/copy_impl.cc b/gr-blocks/lib/copy_impl.cc +index c377e57b1e..b55196c24b 100644 +--- a/gr-blocks/lib/copy_impl.cc ++++ b/gr-blocks/lib/copy_impl.cc +@@ -44,7 +44,9 @@ copy_impl::copy_impl(size_t itemsize) + d_enabled(true) + { + message_port_register_in(pmt::mp("en")); +- set_msg_handler(pmt::mp("en"), boost::bind(©_impl::handle_enable, this, _1)); ++ set_msg_handler( ++ pmt::mp("en"), ++ boost::bind(©_impl::handle_enable, this, boost::placeholders::_1)); + } + + copy_impl::~copy_impl() {} +diff --git a/gr-blocks/lib/message_debug_impl.cc b/gr-blocks/lib/message_debug_impl.cc +index a8c84aa509..916f97ca3d 100644 +--- a/gr-blocks/lib/message_debug_impl.cc ++++ b/gr-blocks/lib/message_debug_impl.cc +@@ -90,14 +90,19 @@ message_debug_impl::message_debug_impl() + : block("message_debug", io_signature::make(0, 0, 0), io_signature::make(0, 0, 0)) + { + message_port_register_in(pmt::mp("print")); +- set_msg_handler(pmt::mp("print"), boost::bind(&message_debug_impl::print, this, _1)); ++ set_msg_handler( ++ pmt::mp("print"), ++ boost::bind(&message_debug_impl::print, this, boost::placeholders::_1)); + + message_port_register_in(pmt::mp("store")); +- set_msg_handler(pmt::mp("store"), boost::bind(&message_debug_impl::store, this, _1)); ++ set_msg_handler( ++ pmt::mp("store"), ++ boost::bind(&message_debug_impl::store, this, boost::placeholders::_1)); + + message_port_register_in(pmt::mp("print_pdu")); +- set_msg_handler(pmt::mp("print_pdu"), +- boost::bind(&message_debug_impl::print_pdu, this, _1)); ++ set_msg_handler( ++ pmt::mp("print_pdu"), ++ boost::bind(&message_debug_impl::print_pdu, this, boost::placeholders::_1)); + } + + message_debug_impl::~message_debug_impl() {} +diff --git a/gr-blocks/lib/message_strobe_impl.cc b/gr-blocks/lib/message_strobe_impl.cc +index 038eeae5a1..d131b81662 100644 +--- a/gr-blocks/lib/message_strobe_impl.cc ++++ b/gr-blocks/lib/message_strobe_impl.cc +@@ -53,8 +53,9 @@ message_strobe_impl::message_strobe_impl(pmt::pmt_t msg, long period_ms) + message_port_register_out(d_port); + + message_port_register_in(pmt::mp("set_msg")); +- set_msg_handler(pmt::mp("set_msg"), +- boost::bind(&message_strobe_impl::set_msg, this, _1)); ++ set_msg_handler( ++ pmt::mp("set_msg"), ++ boost::bind(&message_strobe_impl::set_msg, this, boost::placeholders::_1)); + } + + message_strobe_impl::~message_strobe_impl() {} +diff --git a/gr-blocks/lib/message_strobe_random_impl.cc b/gr-blocks/lib/message_strobe_random_impl.cc +index 0ab5d6adc7..53e641fba4 100644 +--- a/gr-blocks/lib/message_strobe_random_impl.cc ++++ b/gr-blocks/lib/message_strobe_random_impl.cc +@@ -74,8 +74,9 @@ message_strobe_random_impl::message_strobe_random_impl( + new gr::thread::thread(boost::bind(&message_strobe_random_impl::run, this))); + + message_port_register_in(pmt::mp("set_msg")); +- set_msg_handler(pmt::mp("set_msg"), +- boost::bind(&message_strobe_random_impl::set_msg, this, _1)); ++ set_msg_handler( ++ pmt::mp("set_msg"), ++ boost::bind(&message_strobe_random_impl::set_msg, this, boost::placeholders::_1)); + } + + long message_strobe_random_impl::next_delay() +diff --git a/gr-blocks/lib/multiply_matrix_impl.cc b/gr-blocks/lib/multiply_matrix_impl.cc +index e1b9c746c6..e38953baba 100644 +--- a/gr-blocks/lib/multiply_matrix_impl.cc ++++ b/gr-blocks/lib/multiply_matrix_impl.cc +@@ -235,9 +235,10 @@ multiply_matrix_impl::multiply_matrix_impl( + + pmt::pmt_t port_name = pmt::string_to_symbol("set_A"); + message_port_register_in(port_name); +- set_msg_handler( +- port_name, +- boost::bind(&multiply_matrix_impl::msg_handler_A, this, _1)); ++ set_msg_handler(port_name, ++ boost::bind(&multiply_matrix_impl::msg_handler_A, ++ this, ++ boost::placeholders::_1)); + } + + template <> +@@ -257,7 +258,9 @@ multiply_matrix_impl::multiply_matrix_impl( + pmt::pmt_t port_name = pmt::string_to_symbol("set_A"); + message_port_register_in(port_name); + set_msg_handler(port_name, +- boost::bind(&multiply_matrix_impl::msg_handler_A, this, _1)); ++ boost::bind(&multiply_matrix_impl::msg_handler_A, ++ this, ++ boost::placeholders::_1)); + } + + +diff --git a/gr-blocks/lib/mute_impl.cc b/gr-blocks/lib/mute_impl.cc +index bd65ce2075..5c732f8f4f 100644 +--- a/gr-blocks/lib/mute_impl.cc ++++ b/gr-blocks/lib/mute_impl.cc +@@ -47,8 +47,9 @@ mute_impl::mute_impl(bool mute) + d_mute(mute) + { + this->message_port_register_in(pmt::intern("set_mute")); +- this->set_msg_handler(pmt::intern("set_mute"), +- boost::bind(&mute_impl::set_mute_pmt, this, _1)); ++ this->set_msg_handler( ++ pmt::intern("set_mute"), ++ boost::bind(&mute_impl::set_mute_pmt, this, boost::placeholders::_1)); + } + + template +diff --git a/gr-blocks/lib/nop_impl.cc b/gr-blocks/lib/nop_impl.cc +index db216d97a4..e9baee5878 100644 +--- a/gr-blocks/lib/nop_impl.cc ++++ b/gr-blocks/lib/nop_impl.cc +@@ -44,8 +44,9 @@ nop_impl::nop_impl(size_t sizeof_stream_item) + { + // Arrange to have count_received_msgs called when messages are received. + message_port_register_in(pmt::mp("port")); +- set_msg_handler(pmt::mp("port"), +- boost::bind(&nop_impl::count_received_msgs, this, _1)); ++ set_msg_handler( ++ pmt::mp("port"), ++ boost::bind(&nop_impl::count_received_msgs, this, boost::placeholders::_1)); + } + + nop_impl::~nop_impl() {} +diff --git a/gr-blocks/lib/pdu_filter_impl.cc b/gr-blocks/lib/pdu_filter_impl.cc +index b0748eec02..63cfe47e4c 100644 +--- a/gr-blocks/lib/pdu_filter_impl.cc ++++ b/gr-blocks/lib/pdu_filter_impl.cc +@@ -44,8 +44,9 @@ pdu_filter_impl::pdu_filter_impl(pmt::pmt_t k, pmt::pmt_t v, bool invert) + { + message_port_register_out(pdu::pdu_port_id()); + message_port_register_in(pdu::pdu_port_id()); +- set_msg_handler(pdu::pdu_port_id(), +- boost::bind(&pdu_filter_impl::handle_msg, this, _1)); ++ set_msg_handler( ++ pdu::pdu_port_id(), ++ boost::bind(&pdu_filter_impl::handle_msg, this, boost::placeholders::_1)); + } + + void pdu_filter_impl::handle_msg(pmt::pmt_t pdu) +diff --git a/gr-blocks/lib/pdu_remove_impl.cc b/gr-blocks/lib/pdu_remove_impl.cc +index 19cc4dc76a..2b97f827b2 100644 +--- a/gr-blocks/lib/pdu_remove_impl.cc ++++ b/gr-blocks/lib/pdu_remove_impl.cc +@@ -42,8 +42,9 @@ pdu_remove_impl::pdu_remove_impl(pmt::pmt_t k) + { + message_port_register_out(pdu::pdu_port_id()); + message_port_register_in(pdu::pdu_port_id()); +- set_msg_handler(pdu::pdu_port_id(), +- boost::bind(&pdu_remove_impl::handle_msg, this, _1)); ++ set_msg_handler( ++ pdu::pdu_port_id(), ++ boost::bind(&pdu_remove_impl::handle_msg, this, boost::placeholders::_1)); + } + + void pdu_remove_impl::handle_msg(pmt::pmt_t pdu) +diff --git a/gr-blocks/lib/pdu_set_impl.cc b/gr-blocks/lib/pdu_set_impl.cc +index 40fbc3cd83..af59ef70f3 100644 +--- a/gr-blocks/lib/pdu_set_impl.cc ++++ b/gr-blocks/lib/pdu_set_impl.cc +@@ -43,7 +43,9 @@ pdu_set_impl::pdu_set_impl(pmt::pmt_t k, pmt::pmt_t v) + { + message_port_register_out(pdu::pdu_port_id()); + message_port_register_in(pdu::pdu_port_id()); +- set_msg_handler(pdu::pdu_port_id(), boost::bind(&pdu_set_impl::handle_msg, this, _1)); ++ set_msg_handler( ++ pdu::pdu_port_id(), ++ boost::bind(&pdu_set_impl::handle_msg, this, boost::placeholders::_1)); + } + + void pdu_set_impl::handle_msg(pmt::pmt_t pdu) +diff --git a/gr-blocks/lib/random_pdu_impl.cc b/gr-blocks/lib/random_pdu_impl.cc +index 75d825aefa..6c142c3531 100644 +--- a/gr-blocks/lib/random_pdu_impl.cc ++++ b/gr-blocks/lib/random_pdu_impl.cc +@@ -52,8 +52,9 @@ random_pdu_impl::random_pdu_impl(int min_items, + { + message_port_register_out(pdu::pdu_port_id()); + message_port_register_in(pmt::mp("generate")); +- set_msg_handler(pmt::mp("generate"), +- boost::bind(&random_pdu_impl::generate_pdu, this, _1)); ++ set_msg_handler( ++ pmt::mp("generate"), ++ boost::bind(&random_pdu_impl::generate_pdu, this, boost::placeholders::_1)); + if (length_modulo < 1) + throw std::runtime_error("length_module must be >= 1"); + if (max_items < length_modulo) +diff --git a/gr-blocks/lib/repeat_impl.cc b/gr-blocks/lib/repeat_impl.cc +index 189fbc8948..d6569625da 100644 +--- a/gr-blocks/lib/repeat_impl.cc ++++ b/gr-blocks/lib/repeat_impl.cc +@@ -44,8 +44,9 @@ repeat_impl::repeat_impl(size_t itemsize, int interp) + d_interp(interp) + { + message_port_register_in(pmt::mp("interpolation")); +- set_msg_handler(pmt::mp("interpolation"), +- boost::bind(&repeat_impl::msg_set_interpolation, this, _1)); ++ set_msg_handler( ++ pmt::mp("interpolation"), ++ boost::bind(&repeat_impl::msg_set_interpolation, this, boost::placeholders::_1)); + } + + void repeat_impl::msg_set_interpolation(pmt::pmt_t msg) +diff --git a/gr-blocks/lib/socket_pdu_impl.cc b/gr-blocks/lib/socket_pdu_impl.cc +index df69f07ad2..163eec3a68 100644 +--- a/gr-blocks/lib/socket_pdu_impl.cc ++++ b/gr-blocks/lib/socket_pdu_impl.cc +@@ -101,7 +101,9 @@ socket_pdu_impl::socket_pdu_impl(std::string type, + start_tcp_accept(); + + set_msg_handler(pdu::pdu_port_id(), +- boost::bind(&socket_pdu_impl::tcp_server_send, this, _1)); ++ boost::bind(&socket_pdu_impl::tcp_server_send, ++ this, ++ boost::placeholders::_1)); + } else if (type == "TCP_CLIENT") { + boost::system::error_code error = boost::asio::error::host_not_found; + d_tcp_socket.reset(new boost::asio::ip::tcp::socket(d_io_service)); +@@ -111,7 +113,9 @@ socket_pdu_impl::socket_pdu_impl(std::string type, + d_tcp_socket->set_option(boost::asio::ip::tcp::no_delay(d_tcp_no_delay)); + + set_msg_handler(pdu::pdu_port_id(), +- boost::bind(&socket_pdu_impl::tcp_client_send, this, _1)); ++ boost::bind(&socket_pdu_impl::tcp_client_send, ++ this, ++ boost::placeholders::_1)); + + d_tcp_socket->async_read_some( + boost::asio::buffer(d_rxbuf), +@@ -130,8 +134,9 @@ socket_pdu_impl::socket_pdu_impl(std::string type, + boost::asio::placeholders::error, + boost::asio::placeholders::bytes_transferred)); + +- set_msg_handler(pdu::pdu_port_id(), +- boost::bind(&socket_pdu_impl::udp_send, this, _1)); ++ set_msg_handler( ++ pdu::pdu_port_id(), ++ boost::bind(&socket_pdu_impl::udp_send, this, boost::placeholders::_1)); + } else if (type == "UDP_CLIENT") { + d_udp_socket.reset( + new boost::asio::ip::udp::socket(d_io_service, d_udp_endpoint)); +@@ -143,8 +148,9 @@ socket_pdu_impl::socket_pdu_impl(std::string type, + boost::asio::placeholders::error, + boost::asio::placeholders::bytes_transferred)); + +- set_msg_handler(pdu::pdu_port_id(), +- boost::bind(&socket_pdu_impl::udp_send, this, _1)); ++ set_msg_handler( ++ pdu::pdu_port_id(), ++ boost::bind(&socket_pdu_impl::udp_send, this, boost::placeholders::_1)); + } else + throw std::runtime_error("gr::blocks:socket_pdu: unknown socket type"); + +diff --git a/gr-blocks/lib/tagged_stream_multiply_length_impl.cc b/gr-blocks/lib/tagged_stream_multiply_length_impl.cc +index 30f4c46dc6..34b95d647d 100644 +--- a/gr-blocks/lib/tagged_stream_multiply_length_impl.cc ++++ b/gr-blocks/lib/tagged_stream_multiply_length_impl.cc +@@ -49,9 +49,10 @@ tagged_stream_multiply_length_impl::tagged_stream_multiply_length_impl( + set_tag_propagation_policy(TPP_DONT); + set_relative_rate(1, 1); + message_port_register_in(pmt::intern("set_scalar")); +- set_msg_handler( +- pmt::intern("set_scalar"), +- boost::bind(&tagged_stream_multiply_length_impl::set_scalar_pmt, this, _1)); ++ set_msg_handler(pmt::intern("set_scalar"), ++ boost::bind(&tagged_stream_multiply_length_impl::set_scalar_pmt, ++ this, ++ boost::placeholders::_1)); + } + + tagged_stream_multiply_length_impl::~tagged_stream_multiply_length_impl() {} +diff --git a/gr-blocks/lib/tuntap_pdu_impl.cc b/gr-blocks/lib/tuntap_pdu_impl.cc +index 4343ae1dc3..0d9d7e28c7 100644 +--- a/gr-blocks/lib/tuntap_pdu_impl.cc ++++ b/gr-blocks/lib/tuntap_pdu_impl.cc +@@ -96,7 +96,8 @@ tuntap_pdu_impl::tuntap_pdu_impl(std::string dev, int MTU, bool istunflag) + + // set up input message port + message_port_register_in(pdu::pdu_port_id()); +- set_msg_handler(pdu::pdu_port_id(), boost::bind(&tuntap_pdu_impl::send, this, _1)); ++ set_msg_handler(pdu::pdu_port_id(), ++ boost::bind(&tuntap_pdu_impl::send, this, boost::placeholders::_1)); + } + + int tuntap_pdu_impl::tun_alloc(char* dev, int flags) +diff --git a/gr-digital/lib/chunks_to_symbols_impl.cc b/gr-digital/lib/chunks_to_symbols_impl.cc +index 26d590a66e..a6810a69eb 100644 +--- a/gr-digital/lib/chunks_to_symbols_impl.cc ++++ b/gr-digital/lib/chunks_to_symbols_impl.cc +@@ -53,8 +53,9 @@ chunks_to_symbols_impl::chunks_to_symbols_impl( + this->message_port_register_in(pmt::mp("set_symbol_table")); + this->set_msg_handler( + pmt::mp("set_symbol_table"), +- boost::bind( +- &chunks_to_symbols_impl::handle_set_symbol_table, this, _1)); ++ boost::bind(&chunks_to_symbols_impl::handle_set_symbol_table, ++ this, ++ boost::placeholders::_1)); + } + + template +diff --git a/gr-digital/lib/constellation_receiver_cb_impl.cc b/gr-digital/lib/constellation_receiver_cb_impl.cc +index 7fb7559d5e..7e216ece56 100644 +--- a/gr-digital/lib/constellation_receiver_cb_impl.cc ++++ b/gr-digital/lib/constellation_receiver_cb_impl.cc +@@ -61,14 +61,16 @@ constellation_receiver_cb_impl::constellation_receiver_cb_impl( + "This receiver only works with constellations of dimension 1."); + + message_port_register_in(pmt::mp("set_constellation")); +- set_msg_handler( +- pmt::mp("set_constellation"), +- boost::bind(&constellation_receiver_cb_impl::handle_set_constellation, this, _1)); ++ set_msg_handler(pmt::mp("set_constellation"), ++ boost::bind(&constellation_receiver_cb_impl::handle_set_constellation, ++ this, ++ boost::placeholders::_1)); + + message_port_register_in(pmt::mp("rotate_phase")); +- set_msg_handler( +- pmt::mp("rotate_phase"), +- boost::bind(&constellation_receiver_cb_impl::handle_rotate_phase, this, _1)); ++ set_msg_handler(pmt::mp("rotate_phase"), ++ boost::bind(&constellation_receiver_cb_impl::handle_rotate_phase, ++ this, ++ boost::placeholders::_1)); + } + + constellation_receiver_cb_impl::~constellation_receiver_cb_impl() {} +diff --git a/gr-digital/lib/costas_loop_cc_impl.cc b/gr-digital/lib/costas_loop_cc_impl.cc +index c3b30834eb..e1229e6f4a 100644 +--- a/gr-digital/lib/costas_loop_cc_impl.cc ++++ b/gr-digital/lib/costas_loop_cc_impl.cc +@@ -82,7 +82,9 @@ costas_loop_cc_impl::costas_loop_cc_impl(float loop_bw, int order, bool use_snr) + + message_port_register_in(pmt::mp("noise")); + set_msg_handler(pmt::mp("noise"), +- boost::bind(&costas_loop_cc_impl::handle_set_noise, this, _1)); ++ boost::bind(&costas_loop_cc_impl::handle_set_noise, ++ this, ++ boost::placeholders::_1)); + } + + costas_loop_cc_impl::~costas_loop_cc_impl() {} +diff --git a/gr-digital/lib/crc32_async_bb_impl.cc b/gr-digital/lib/crc32_async_bb_impl.cc +index bffbb2a737..66143866c0 100644 +--- a/gr-digital/lib/crc32_async_bb_impl.cc ++++ b/gr-digital/lib/crc32_async_bb_impl.cc +@@ -48,9 +48,13 @@ crc32_async_bb_impl::crc32_async_bb_impl(bool check) + message_port_register_out(d_out_port); + + if (check) +- set_msg_handler(d_in_port, boost::bind(&crc32_async_bb_impl::check, this, _1)); ++ set_msg_handler( ++ d_in_port, ++ boost::bind(&crc32_async_bb_impl::check, this, boost::placeholders::_1)); + else +- set_msg_handler(d_in_port, boost::bind(&crc32_async_bb_impl::calc, this, _1)); ++ set_msg_handler( ++ d_in_port, ++ boost::bind(&crc32_async_bb_impl::calc, this, boost::placeholders::_1)); + } + + crc32_async_bb_impl::~crc32_async_bb_impl() {} +diff --git a/gr-digital/lib/header_payload_demux_impl.cc b/gr-digital/lib/header_payload_demux_impl.cc +index 98c805fb20..7cc1e0a4ed 100644 +--- a/gr-digital/lib/header_payload_demux_impl.cc ++++ b/gr-digital/lib/header_payload_demux_impl.cc +@@ -150,9 +150,10 @@ header_payload_demux_impl::header_payload_demux_impl( + } + set_tag_propagation_policy(TPP_DONT); + message_port_register_in(msg_port_id()); +- set_msg_handler( +- msg_port_id(), +- boost::bind(&header_payload_demux_impl::parse_header_data_msg, this, _1)); ++ set_msg_handler(msg_port_id(), ++ boost::bind(&header_payload_demux_impl::parse_header_data_msg, ++ this, ++ boost::placeholders::_1)); + for (size_t i = 0; i < special_tags.size(); i++) { + d_special_tags.push_back(pmt::string_to_symbol(special_tags[i])); + d_special_tags_last_value.push_back(pmt::PMT_NIL); +diff --git a/gr-digital/lib/protocol_formatter_async_impl.cc b/gr-digital/lib/protocol_formatter_async_impl.cc +index 84b693745d..c08bbb9aeb 100644 +--- a/gr-digital/lib/protocol_formatter_async_impl.cc ++++ b/gr-digital/lib/protocol_formatter_async_impl.cc +@@ -55,7 +55,9 @@ protocol_formatter_async_impl::protocol_formatter_async_impl( + message_port_register_out(d_pld_port); + + set_msg_handler(d_in_port, +- boost::bind(&protocol_formatter_async_impl::append, this, _1)); ++ boost::bind(&protocol_formatter_async_impl::append, ++ this, ++ boost::placeholders::_1)); + } + + protocol_formatter_async_impl::~protocol_formatter_async_impl() {} +diff --git a/gr-fec/lib/async_decoder_impl.cc b/gr-fec/lib/async_decoder_impl.cc +index e7a668c832..5d68d13ae7 100644 +--- a/gr-fec/lib/async_decoder_impl.cc ++++ b/gr-fec/lib/async_decoder_impl.cc +@@ -65,10 +65,14 @@ async_decoder_impl::async_decoder_impl(generic_decoder::sptr my_decoder, + if (d_packed) { + d_pack = new blocks::kernel::pack_k_bits(8); + set_msg_handler(d_in_port, +- boost::bind(&async_decoder_impl::decode_packed, this, _1)); ++ boost::bind(&async_decoder_impl::decode_packed, ++ this, ++ boost::placeholders::_1)); + } else { + set_msg_handler(d_in_port, +- boost::bind(&async_decoder_impl::decode_unpacked, this, _1)); ++ boost::bind(&async_decoder_impl::decode_unpacked, ++ this, ++ boost::placeholders::_1)); + } + + // The maximum frame size is set by the initial frame size of the decoder. +diff --git a/gr-fec/lib/async_encoder_impl.cc b/gr-fec/lib/async_encoder_impl.cc +index 811d55601f..506ae5c7e9 100644 +--- a/gr-fec/lib/async_encoder_impl.cc ++++ b/gr-fec/lib/async_encoder_impl.cc +@@ -64,7 +64,9 @@ async_encoder_impl::async_encoder_impl(generic_encoder::sptr my_encoder, + + if (d_packed) { + set_msg_handler(d_in_port, +- boost::bind(&async_encoder_impl::encode_packed, this, _1)); ++ boost::bind(&async_encoder_impl::encode_packed, ++ this, ++ boost::placeholders::_1)); + + d_unpack = new blocks::kernel::unpack_k_bits(8); + +@@ -74,7 +76,9 @@ async_encoder_impl::async_encoder_impl(generic_encoder::sptr my_encoder, + + } else { + set_msg_handler(d_in_port, +- boost::bind(&async_encoder_impl::encode_unpacked, this, _1)); ++ boost::bind(&async_encoder_impl::encode_unpacked, ++ this, ++ boost::placeholders::_1)); + } + + if (d_packed || (strncmp(d_encoder->get_input_conversion(), "pack", 4) == 0)) { +diff --git a/gr-fec/lib/depuncture_bb_impl.cc b/gr-fec/lib/depuncture_bb_impl.cc +index 27d00bb5bb..f64dad45fc 100644 +--- a/gr-fec/lib/depuncture_bb_impl.cc ++++ b/gr-fec/lib/depuncture_bb_impl.cc +@@ -74,7 +74,9 @@ depuncture_bb_impl::depuncture_bb_impl(int puncsize, int puncpat, int delay, cha + set_fixed_rate(true); + set_relative_rate((uint64_t)d_puncsize, (uint64_t)(d_puncsize - d_puncholes)); + set_output_multiple(d_puncsize); +- // set_msg_handler(boost::bind(&depuncture_bb_impl::catch_msg, this, _1)); ++ // set_msg_handler(boost::bind(&depuncture_bb_impl::catch_msg, ++ // this, ++ // boost::placeholders::_1)); + } + + depuncture_bb_impl::~depuncture_bb_impl() {} +diff --git a/gr-fec/lib/puncture_bb_impl.cc b/gr-fec/lib/puncture_bb_impl.cc +index a365d6a69f..f2078d8c57 100644 +--- a/gr-fec/lib/puncture_bb_impl.cc ++++ b/gr-fec/lib/puncture_bb_impl.cc +@@ -72,7 +72,9 @@ puncture_bb_impl::puncture_bb_impl(int puncsize, int puncpat, int delay) + set_fixed_rate(true); + set_relative_rate((uint64_t)(d_puncsize - d_puncholes), (uint64_t)d_puncsize); + set_output_multiple(d_puncsize - d_puncholes); +- // set_msg_handler(boost::bind(&puncture_bb_impl::catch_msg, this, _1)); ++ // set_msg_handler(boost::bind(&puncture_bb_impl::catch_msg, ++ // this, ++ // boost::placeholders::_1)); + } + + puncture_bb_impl::~puncture_bb_impl() {} +diff --git a/gr-fec/lib/puncture_ff_impl.cc b/gr-fec/lib/puncture_ff_impl.cc +index c95288d691..95fb649a8b 100644 +--- a/gr-fec/lib/puncture_ff_impl.cc ++++ b/gr-fec/lib/puncture_ff_impl.cc +@@ -72,7 +72,9 @@ puncture_ff_impl::puncture_ff_impl(int puncsize, int puncpat, int delay) + set_fixed_rate(true); + set_relative_rate((uint64_t)(d_puncsize - d_puncholes), (uint64_t)d_puncsize); + set_output_multiple(d_puncsize - d_puncholes); +- // set_msg_handler(boost::bind(&puncture_ff_impl::catch_msg, this, _1)); ++ // set_msg_handler(boost::bind(&puncture_ff_impl::catch_msg, ++ // this, ++ // boost::placeholders::_1)); + } + + puncture_ff_impl::~puncture_ff_impl() {} +diff --git a/gr-filter/lib/freq_xlating_fir_filter_impl.cc b/gr-filter/lib/freq_xlating_fir_filter_impl.cc +index 8ddc967ba1..50ec589472 100644 +--- a/gr-filter/lib/freq_xlating_fir_filter_impl.cc ++++ b/gr-filter/lib/freq_xlating_fir_filter_impl.cc +@@ -72,7 +72,7 @@ freq_xlating_fir_filter_impl::freq_xlating_fir_filter_impl( + boost::bind( + &freq_xlating_fir_filter_impl::handle_set_center_freq, + this, +- _1)); ++ boost::placeholders::_1)); + } + + template +diff --git a/gr-filter/lib/mmse_resampler_cc_impl.cc b/gr-filter/lib/mmse_resampler_cc_impl.cc +index 59f9eacfab..bdce51716a 100644 +--- a/gr-filter/lib/mmse_resampler_cc_impl.cc ++++ b/gr-filter/lib/mmse_resampler_cc_impl.cc +@@ -52,8 +52,9 @@ mmse_resampler_cc_impl::mmse_resampler_cc_impl(float phase_shift, float resamp_r + + set_inverse_relative_rate(d_mu_inc); + message_port_register_in(pmt::intern("msg_in")); +- set_msg_handler(pmt::intern("msg_in"), +- boost::bind(&mmse_resampler_cc_impl::handle_msg, this, _1)); ++ set_msg_handler( ++ pmt::intern("msg_in"), ++ boost::bind(&mmse_resampler_cc_impl::handle_msg, this, boost::placeholders::_1)); + } + + mmse_resampler_cc_impl::~mmse_resampler_cc_impl() { delete d_resamp; } +diff --git a/gr-filter/lib/mmse_resampler_ff_impl.cc b/gr-filter/lib/mmse_resampler_ff_impl.cc +index 342d9f7678..3d72727114 100644 +--- a/gr-filter/lib/mmse_resampler_ff_impl.cc ++++ b/gr-filter/lib/mmse_resampler_ff_impl.cc +@@ -53,8 +53,9 @@ mmse_resampler_ff_impl::mmse_resampler_ff_impl(float phase_shift, float resamp_r + set_inverse_relative_rate(d_mu_inc); + + message_port_register_in(pmt::intern("msg_in")); +- set_msg_handler(pmt::intern("msg_in"), +- boost::bind(&mmse_resampler_ff_impl::handle_msg, this, _1)); ++ set_msg_handler( ++ pmt::intern("msg_in"), ++ boost::bind(&mmse_resampler_ff_impl::handle_msg, this, boost::placeholders::_1)); + } + + mmse_resampler_ff_impl::~mmse_resampler_ff_impl() { delete d_resamp; } +diff --git a/gr-qtgui/lib/const_sink_c_impl.cc b/gr-qtgui/lib/const_sink_c_impl.cc +index 852f6ee109..04d421d037 100644 +--- a/gr-qtgui/lib/const_sink_c_impl.cc ++++ b/gr-qtgui/lib/const_sink_c_impl.cc +@@ -69,8 +69,9 @@ const_sink_c_impl::const_sink_c_impl(int size, + + // setup PDU handling input port + message_port_register_in(pmt::mp("in")); +- set_msg_handler(pmt::mp("in"), +- boost::bind(&const_sink_c_impl::handle_pdus, this, _1)); ++ set_msg_handler( ++ pmt::mp("in"), ++ boost::bind(&const_sink_c_impl::handle_pdus, this, boost::placeholders::_1)); + + for (int i = 0; i < d_nconnections; i++) { + d_residbufs_real.push_back( +diff --git a/gr-qtgui/lib/edit_box_msg_impl.cc b/gr-qtgui/lib/edit_box_msg_impl.cc +index 8713aa820e..39546cbf3a 100644 +--- a/gr-qtgui/lib/edit_box_msg_impl.cc ++++ b/gr-qtgui/lib/edit_box_msg_impl.cc +@@ -158,7 +158,9 @@ edit_box_msg_impl::edit_box_msg_impl(data_type_t type, + message_port_register_out(d_port); + message_port_register_in(pmt::mp("val")); + +- set_msg_handler(pmt::mp("val"), boost::bind(&edit_box_msg_impl::set_value, this, _1)); ++ set_msg_handler( ++ pmt::mp("val"), ++ boost::bind(&edit_box_msg_impl::set_value, this, boost::placeholders::_1)); + } + + edit_box_msg_impl::~edit_box_msg_impl() +diff --git a/gr-qtgui/lib/freq_sink_c_impl.cc b/gr-qtgui/lib/freq_sink_c_impl.cc +index 3a34df6ec6..fe231699fd 100644 +--- a/gr-qtgui/lib/freq_sink_c_impl.cc ++++ b/gr-qtgui/lib/freq_sink_c_impl.cc +@@ -82,17 +82,23 @@ freq_sink_c_impl::freq_sink_c_impl(int fftsize, + + // setup bw input port + message_port_register_in(d_port_bw); +- set_msg_handler(d_port_bw, boost::bind(&freq_sink_c_impl::handle_set_bw, this, _1)); ++ set_msg_handler( ++ d_port_bw, ++ boost::bind(&freq_sink_c_impl::handle_set_bw, this, boost::placeholders::_1)); + + // setup output message port to post frequency when display is + // double-clicked + message_port_register_out(d_port); + message_port_register_in(d_port); +- set_msg_handler(d_port, boost::bind(&freq_sink_c_impl::handle_set_freq, this, _1)); ++ set_msg_handler( ++ d_port, ++ boost::bind(&freq_sink_c_impl::handle_set_freq, this, boost::placeholders::_1)); + + // setup PDU handling input port + message_port_register_in(pmt::mp("in")); +- set_msg_handler(pmt::mp("in"), boost::bind(&freq_sink_c_impl::handle_pdus, this, _1)); ++ set_msg_handler( ++ pmt::mp("in"), ++ boost::bind(&freq_sink_c_impl::handle_pdus, this, boost::placeholders::_1)); + + d_main_gui = NULL; + +diff --git a/gr-qtgui/lib/freq_sink_f_impl.cc b/gr-qtgui/lib/freq_sink_f_impl.cc +index c14bfc31fd..7090d8699e 100644 +--- a/gr-qtgui/lib/freq_sink_f_impl.cc ++++ b/gr-qtgui/lib/freq_sink_f_impl.cc +@@ -82,17 +82,23 @@ freq_sink_f_impl::freq_sink_f_impl(int fftsize, + + // setup bw input port + message_port_register_in(d_port_bw); +- set_msg_handler(d_port_bw, boost::bind(&freq_sink_f_impl::handle_set_bw, this, _1)); ++ set_msg_handler( ++ d_port_bw, ++ boost::bind(&freq_sink_f_impl::handle_set_bw, this, boost::placeholders::_1)); + + // setup output message port to post frequency when display is + // double-clicked + message_port_register_out(d_port); + message_port_register_in(d_port); +- set_msg_handler(d_port, boost::bind(&freq_sink_f_impl::handle_set_freq, this, _1)); ++ set_msg_handler( ++ d_port, ++ boost::bind(&freq_sink_f_impl::handle_set_freq, this, boost::placeholders::_1)); + + // setup PDU handling input port + message_port_register_in(pmt::mp("in")); +- set_msg_handler(pmt::mp("in"), boost::bind(&freq_sink_f_impl::handle_pdus, this, _1)); ++ set_msg_handler( ++ pmt::mp("in"), ++ boost::bind(&freq_sink_f_impl::handle_pdus, this, boost::placeholders::_1)); + + d_main_gui = NULL; + +diff --git a/gr-qtgui/lib/histogram_sink_f_impl.cc b/gr-qtgui/lib/histogram_sink_f_impl.cc +index d16de932ca..1602d18968 100644 +--- a/gr-qtgui/lib/histogram_sink_f_impl.cc ++++ b/gr-qtgui/lib/histogram_sink_f_impl.cc +@@ -81,8 +81,9 @@ histogram_sink_f_impl::histogram_sink_f_impl(int size, + + // setup PDU handling input port + message_port_register_in(pmt::mp("in")); +- set_msg_handler(pmt::mp("in"), +- boost::bind(&histogram_sink_f_impl::handle_pdus, this, _1)); ++ set_msg_handler( ++ pmt::mp("in"), ++ boost::bind(&histogram_sink_f_impl::handle_pdus, this, boost::placeholders::_1)); + + // +1 for the PDU buffer + for (int i = 0; i < d_nconnections + 1; i++) { +diff --git a/gr-qtgui/lib/sink_c_impl.cc b/gr-qtgui/lib/sink_c_impl.cc +index d3feb9d16c..73136e789e 100644 +--- a/gr-qtgui/lib/sink_c_impl.cc ++++ b/gr-qtgui/lib/sink_c_impl.cc +@@ -96,7 +96,9 @@ sink_c_impl::sink_c_impl(int fftsize, + // double-clicked + message_port_register_out(d_port); + message_port_register_in(d_port); +- set_msg_handler(d_port, boost::bind(&sink_c_impl::handle_set_freq, this, _1)); ++ set_msg_handler( ++ d_port, ++ boost::bind(&sink_c_impl::handle_set_freq, this, boost::placeholders::_1)); + + d_main_gui = NULL; + +diff --git a/gr-qtgui/lib/sink_f_impl.cc b/gr-qtgui/lib/sink_f_impl.cc +index 418b630b78..d31023a51d 100644 +--- a/gr-qtgui/lib/sink_f_impl.cc ++++ b/gr-qtgui/lib/sink_f_impl.cc +@@ -95,7 +95,9 @@ sink_f_impl::sink_f_impl(int fftsize, + // double-clicked + message_port_register_out(d_port); + message_port_register_in(d_port); +- set_msg_handler(d_port, boost::bind(&sink_f_impl::handle_set_freq, this, _1)); ++ set_msg_handler( ++ d_port, ++ boost::bind(&sink_f_impl::handle_set_freq, this, boost::placeholders::_1)); + + d_main_gui = NULL; + +diff --git a/gr-qtgui/lib/time_raster_sink_b_impl.cc b/gr-qtgui/lib/time_raster_sink_b_impl.cc +index 045c216b00..3aa503ccfc 100644 +--- a/gr-qtgui/lib/time_raster_sink_b_impl.cc ++++ b/gr-qtgui/lib/time_raster_sink_b_impl.cc +@@ -84,7 +84,9 @@ time_raster_sink_b_impl::time_raster_sink_b_impl(double samp_rate, + // setup PDU handling input port + message_port_register_in(pmt::mp("in")); + set_msg_handler(pmt::mp("in"), +- boost::bind(&time_raster_sink_b_impl::handle_pdus, this, _1)); ++ boost::bind(&time_raster_sink_b_impl::handle_pdus, ++ this, ++ boost::placeholders::_1)); + + d_scale = 1.0f; + +diff --git a/gr-qtgui/lib/time_raster_sink_f_impl.cc b/gr-qtgui/lib/time_raster_sink_f_impl.cc +index d186f319da..b3516e5be9 100644 +--- a/gr-qtgui/lib/time_raster_sink_f_impl.cc ++++ b/gr-qtgui/lib/time_raster_sink_f_impl.cc +@@ -84,7 +84,9 @@ time_raster_sink_f_impl::time_raster_sink_f_impl(double samp_rate, + // setup PDU handling input port + message_port_register_in(pmt::mp("in")); + set_msg_handler(pmt::mp("in"), +- boost::bind(&time_raster_sink_f_impl::handle_pdus, this, _1)); ++ boost::bind(&time_raster_sink_f_impl::handle_pdus, ++ this, ++ boost::placeholders::_1)); + + d_icols = static_cast(ceil(d_cols)); + d_tmpflt = (float*)volk_malloc(d_icols * sizeof(float), volk_get_alignment()); +diff --git a/gr-qtgui/lib/time_sink_c_impl.cc b/gr-qtgui/lib/time_sink_c_impl.cc +index b73a1c1ad3..83fbda298a 100644 +--- a/gr-qtgui/lib/time_sink_c_impl.cc ++++ b/gr-qtgui/lib/time_sink_c_impl.cc +@@ -80,7 +80,9 @@ time_sink_c_impl::time_sink_c_impl(int size, + + // setup PDU handling input port + message_port_register_in(pmt::mp("in")); +- set_msg_handler(pmt::mp("in"), boost::bind(&time_sink_c_impl::handle_pdus, this, _1)); ++ set_msg_handler( ++ pmt::mp("in"), ++ boost::bind(&time_sink_c_impl::handle_pdus, this, boost::placeholders::_1)); + + // +2 for the PDU message buffers + for (unsigned int n = 0; n < d_nconnections + 2; n++) { +diff --git a/gr-qtgui/lib/time_sink_f_impl.cc b/gr-qtgui/lib/time_sink_f_impl.cc +index df13998d75..dd5ed12c8b 100644 +--- a/gr-qtgui/lib/time_sink_f_impl.cc ++++ b/gr-qtgui/lib/time_sink_f_impl.cc +@@ -80,7 +80,9 @@ time_sink_f_impl::time_sink_f_impl(int size, + + // setup PDU handling input port + message_port_register_in(pmt::mp("in")); +- set_msg_handler(pmt::mp("in"), boost::bind(&time_sink_f_impl::handle_pdus, this, _1)); ++ set_msg_handler( ++ pmt::mp("in"), ++ boost::bind(&time_sink_f_impl::handle_pdus, this, boost::placeholders::_1)); + + // +1 for the PDU buffer + for (unsigned int n = 0; n < d_nconnections + 1; n++) { +diff --git a/gr-qtgui/lib/waterfall_sink_c_impl.cc b/gr-qtgui/lib/waterfall_sink_c_impl.cc +index fcf2ed98bc..da38d32baa 100644 +--- a/gr-qtgui/lib/waterfall_sink_c_impl.cc ++++ b/gr-qtgui/lib/waterfall_sink_c_impl.cc +@@ -118,19 +118,24 @@ waterfall_sink_c_impl::waterfall_sink_c_impl(int fftsize, + // setup bw input port + message_port_register_in(d_port_bw); + set_msg_handler(d_port_bw, +- boost::bind(&waterfall_sink_c_impl::handle_set_bw, this, _1)); ++ boost::bind(&waterfall_sink_c_impl::handle_set_bw, ++ this, ++ boost::placeholders::_1)); + + // setup output message port to post frequency when display is + // double-clicked + message_port_register_out(d_port); + message_port_register_in(d_port); + set_msg_handler(d_port, +- boost::bind(&waterfall_sink_c_impl::handle_set_freq, this, _1)); ++ boost::bind(&waterfall_sink_c_impl::handle_set_freq, ++ this, ++ boost::placeholders::_1)); + + // setup PDU handling input port + message_port_register_in(pmt::mp("in")); +- set_msg_handler(pmt::mp("in"), +- boost::bind(&waterfall_sink_c_impl::handle_pdus, this, _1)); ++ set_msg_handler( ++ pmt::mp("in"), ++ boost::bind(&waterfall_sink_c_impl::handle_pdus, this, boost::placeholders::_1)); + } + + waterfall_sink_c_impl::~waterfall_sink_c_impl() +diff --git a/gr-qtgui/lib/waterfall_sink_f_impl.cc b/gr-qtgui/lib/waterfall_sink_f_impl.cc +index aa1037a472..d4231a564c 100644 +--- a/gr-qtgui/lib/waterfall_sink_f_impl.cc ++++ b/gr-qtgui/lib/waterfall_sink_f_impl.cc +@@ -116,19 +116,24 @@ waterfall_sink_f_impl::waterfall_sink_f_impl(int fftsize, + // setup bw input port + message_port_register_in(d_port_bw); + set_msg_handler(d_port_bw, +- boost::bind(&waterfall_sink_f_impl::handle_set_bw, this, _1)); ++ boost::bind(&waterfall_sink_f_impl::handle_set_bw, ++ this, ++ boost::placeholders::_1)); + + // setup output message port to post frequency when display is + // double-clicked + message_port_register_out(d_port); + message_port_register_in(d_port); + set_msg_handler(d_port, +- boost::bind(&waterfall_sink_f_impl::handle_set_freq, this, _1)); ++ boost::bind(&waterfall_sink_f_impl::handle_set_freq, ++ this, ++ boost::placeholders::_1)); + + // setup PDU handling input port + message_port_register_in(pmt::mp("in")); +- set_msg_handler(pmt::mp("in"), +- boost::bind(&waterfall_sink_f_impl::handle_pdus, this, _1)); ++ set_msg_handler( ++ pmt::mp("in"), ++ boost::bind(&waterfall_sink_f_impl::handle_pdus, this, boost::placeholders::_1)); + } + + waterfall_sink_f_impl::~waterfall_sink_f_impl() +diff --git a/gr-uhd/lib/usrp_block_impl.cc b/gr-uhd/lib/usrp_block_impl.cc +index 4f030159ff..697d633c1b 100644 +--- a/gr-uhd/lib/usrp_block_impl.cc ++++ b/gr-uhd/lib/usrp_block_impl.cc +@@ -137,12 +137,18 @@ usrp_block_impl::usrp_block_impl(const ::uhd::device_addr_t& device_addr, + // Set up message ports: + message_port_register_in(pmt::mp("command")); + set_msg_handler(pmt::mp("command"), +- boost::bind(&usrp_block_impl::msg_handler_command, this, _1)); ++ boost::bind(&usrp_block_impl::msg_handler_command, ++ this, ++ boost::placeholders::_1)); + + // cuz we lazy: +-#define REGISTER_CMD_HANDLER(key, _handler) \ +- register_msg_cmd_handler(key, \ +- boost::bind(&usrp_block_impl::_handler, this, _1, _2, _3)) ++#define REGISTER_CMD_HANDLER(key, _handler) \ ++ register_msg_cmd_handler(key, \ ++ boost::bind(&usrp_block_impl::_handler, \ ++ this, \ ++ boost::placeholders::_1, \ ++ boost::placeholders::_2, \ ++ boost::placeholders::_3)) + // Register default command handlers: + REGISTER_CMD_HANDLER(cmd_freq_key(), _cmd_handler_freq); + REGISTER_CMD_HANDLER(cmd_gain_key(), _cmd_handler_gain); +@@ -257,11 +263,12 @@ bool usrp_block_impl::_check_mboard_sensors_locked() + } else if (_dev->get_clock_source(mboard_index) == "mimo") { + sensor_name = "mimo_locked"; + } +- if (not _wait_for_locked_sensor( +- get_mboard_sensor_names(mboard_index), +- sensor_name, +- boost::bind( +- &usrp_block_impl::get_mboard_sensor, this, _1, mboard_index))) { ++ if (not _wait_for_locked_sensor(get_mboard_sensor_names(mboard_index), ++ sensor_name, ++ boost::bind(&usrp_block_impl::get_mboard_sensor, ++ this, ++ boost::placeholders::_1, ++ mboard_index))) { + GR_LOG_WARN( + d_logger, + boost::format( +diff --git a/gr-uhd/lib/usrp_source_impl.cc b/gr-uhd/lib/usrp_source_impl.cc +index a2ff0821bd..5e6bd43285 100644 +--- a/gr-uhd/lib/usrp_source_impl.cc ++++ b/gr-uhd/lib/usrp_source_impl.cc +@@ -57,8 +57,9 @@ usrp_source_impl::usrp_source_impl(const ::uhd::device_addr_t& device_addr, + + _samp_rate = this->get_samp_rate(); + _samps_per_packet = 1; +- register_msg_cmd_handler(cmd_tag_key(), +- boost::bind(&usrp_source_impl::_cmd_handler_tag, this, _1)); ++ register_msg_cmd_handler( ++ cmd_tag_key(), ++ boost::bind(&usrp_source_impl::_cmd_handler_tag, this, boost::placeholders::_1)); + } + + usrp_source_impl::~usrp_source_impl() {} +diff --git a/gr-zeromq/lib/pub_msg_sink_impl.cc b/gr-zeromq/lib/pub_msg_sink_impl.cc +index b5da7421ef..957cfa411d 100644 +--- a/gr-zeromq/lib/pub_msg_sink_impl.cc ++++ b/gr-zeromq/lib/pub_msg_sink_impl.cc +@@ -62,7 +62,9 @@ pub_msg_sink_impl::pub_msg_sink_impl(char* address, int timeout, bool bind) + } + + message_port_register_in(pmt::mp("in")); +- set_msg_handler(pmt::mp("in"), boost::bind(&pub_msg_sink_impl::handler, this, _1)); ++ set_msg_handler( ++ pmt::mp("in"), ++ boost::bind(&pub_msg_sink_impl::handler, this, boost::placeholders::_1)); + } + + pub_msg_sink_impl::~pub_msg_sink_impl() +diff --git a/gr-zeromq/lib/push_msg_sink_impl.cc b/gr-zeromq/lib/push_msg_sink_impl.cc +index 4140781ab9..7d07d3a30e 100644 +--- a/gr-zeromq/lib/push_msg_sink_impl.cc ++++ b/gr-zeromq/lib/push_msg_sink_impl.cc +@@ -62,7 +62,9 @@ push_msg_sink_impl::push_msg_sink_impl(char* address, int timeout, bool bind) + } + + message_port_register_in(pmt::mp("in")); +- set_msg_handler(pmt::mp("in"), boost::bind(&push_msg_sink_impl::handler, this, _1)); ++ set_msg_handler( ++ pmt::mp("in"), ++ boost::bind(&push_msg_sink_impl::handler, this, boost::placeholders::_1)); + } + + push_msg_sink_impl::~push_msg_sink_impl() diff --git a/package/gnuradio/0003-gnuradio-runtime_pmt-dont-hardcode-INTERFACE_INCLUDE_DIRECTORIES.patch b/package/gnuradio/0003-gnuradio-runtime_pmt-dont-hardcode-INTERFACE_INCLUDE_DIRECTORIES.patch new file mode 100644 index 00000000..6b8987fa --- /dev/null +++ b/package/gnuradio/0003-gnuradio-runtime_pmt-dont-hardcode-INTERFACE_INCLUDE_DIRECTORIES.patch @@ -0,0 +1,57 @@ +From 84dea8284c521f08508bb2dcbc99db3b5d3438fd Mon Sep 17 00:00:00 2001 +From: Gwenhael Goavec-Merou +Date: Thu, 27 Aug 2020 17:32:09 +0200 +Subject: [PATCH] gnuradio-runtime_pmt: dont hardcode + INTERFACE_INCLUDE_DIRECTORIES + +gnuradio-runtimeTargets.cmake and gnuradio-pmtTargets.cmake are filled +using CMAKE_INSTALL_PREFIX for INSTALL_INTERFACE. + +Since CMAKE_INSTALL_PREFIX, in buildroot, is set to /usr, these files contains +path to host system. + +With BR2_COMPILER_PARANOID_UNSAFE_PATH package using gnuradio fails with: +arm-linux-gnueabihf-g++: ERROR: unsafe header/library path used in cross-compilation: '-isystem' '/usr/include' + +By simply providing 'include', produced .cmake contains: +INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" +instead of +INTERFACE_INCLUDE_DIRECTORIES "/usr/include" + +[Upstream status: https://github.com/gnuradio/gnuradio/pull/3737] + +Signed-off-by: Gwenhael Goavec-Merou +--- + gnuradio-runtime/lib/CMakeLists.txt | 2 +- + gnuradio-runtime/lib/pmt/CMakeLists.txt | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/gnuradio-runtime/lib/CMakeLists.txt b/gnuradio-runtime/lib/CMakeLists.txt +index 5aa90a5e1..fc32f473b 100644 +--- a/gnuradio-runtime/lib/CMakeLists.txt ++++ b/gnuradio-runtime/lib/CMakeLists.txt +@@ -214,7 +214,7 @@ target_link_libraries(gnuradio-runtime PUBLIC + + target_include_directories(gnuradio-runtime + PUBLIC +- $ ++ $ + $ + $ + PRIVATE +diff --git a/gnuradio-runtime/lib/pmt/CMakeLists.txt b/gnuradio-runtime/lib/pmt/CMakeLists.txt +index 9fb98d0fc..6dfcd945c 100644 +--- a/gnuradio-runtime/lib/pmt/CMakeLists.txt ++++ b/gnuradio-runtime/lib/pmt/CMakeLists.txt +@@ -33,7 +33,7 @@ target_link_libraries(gnuradio-pmt + + target_include_directories(gnuradio-pmt + PUBLIC +- $ ++ $ + $ + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ + ) +-- +2.26.2 + diff --git a/package/gnuradio/0004-gr-qtgui-dont-t-add-examples-c-subdirectory-when-gr-.patch b/package/gnuradio/0004-gr-qtgui-dont-t-add-examples-c-subdirectory-when-gr-.patch new file mode 100644 index 00000000..034c10c5 --- /dev/null +++ b/package/gnuradio/0004-gr-qtgui-dont-t-add-examples-c-subdirectory-when-gr-.patch @@ -0,0 +1,55 @@ +From 268b1a599304f58bd56c86ff09041b5912c24a0c Mon Sep 17 00:00:00 2001 +From: Gwenhael Goavec-Merou +Date: Sun, 1 Nov 2020 17:24:36 +0100 +Subject: [PATCH] gr-qtgui: dont't add examples/c++ subdirectory when gr-analog + is disabled + +gr-qtgui examples needs to have gr-analog enabled, without this dependency +compile crash with: + +In file included from +/x/output/build/gnuradio-3.8.1.0/gr-qtgui/examples/c++/display_qt.cc:22: +/x/output/build/gnuradio-3.8.1.0/gr-qtgui/examples/c++/display_qt.h:24:10: +fatal error: gnuradio/analog/noise_source.h: No such file or directory +24 | #include +| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +compilation terminated. +make[3]: *** [gr-qtgui/examples/c++/CMakeFiles/display_qt.dir/build.make:67: +gr-qtgui/examples/c++/CMakeFiles/display_qt.dir/display_qt.cc.o] Error 1 +make[3]: *** Waiting for unfinished jobs.... +In file included from +/somewhere/gnuradio/build/gr-qtgui/examples/c++/moc_display_qt.cpp:10: +/somewhere/gnuradio/build/gr-qtgui/examples/c++/../../../../gr-qtgui/examples/c++/display_qt.h:24:10: +fatal error: gnuradio/analog/noise_source.h: No such file or directory +24 | #include +| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +compilation terminated. + +GR_ANALOG is not an explicit dependency of GR_QTGUI, so disable c++ examples if +user has not selected this option. + +[backported from 7470a7a3771dd90defb826b464dfe62977cb1eb6] + +Signed-off-by: Gwenhael Goavec-Merou +--- + gr-qtgui/CMakeLists.txt | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/gr-qtgui/CMakeLists.txt b/gr-qtgui/CMakeLists.txt +index 8831f3ad9..561186fbd 100644 +--- a/gr-qtgui/CMakeLists.txt ++++ b/gr-qtgui/CMakeLists.txt +@@ -68,7 +68,9 @@ if(ENABLE_GR_QTGUI) + add_subdirectory(include/gnuradio/qtgui) + add_subdirectory(lib) + add_subdirectory(docs) +-add_subdirectory(examples/c++) ++if (ENABLE_GR_ANALOG) ++ add_subdirectory(examples/c++) ++endif(ENABLE_GR_ANALOG) + if(ENABLE_PYTHON) + add_subdirectory(swig) + add_subdirectory(python/qtgui) +-- +2.26.2 + diff --git a/package/gnuradio/Config.in b/package/gnuradio/Config.in new file mode 100644 index 00000000..73808880 --- /dev/null +++ b/package/gnuradio/Config.in @@ -0,0 +1,168 @@ +comment "gnuradio needs a toolchain w/ C++, NPTL, wchar, dynamic library" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIBS + +comment "gnuradio needs a toolchain not affected by GCC bug 64735" + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 + +config BR2_PACKAGE_GNURADIO + bool "gnuradio" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_USE_MMU # use fork() + depends on BR2_USE_WCHAR # boost + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS # boost-atomic + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # boost-thread + select BR2_PACKAGE_BOOST + select BR2_PACKAGE_BOOST_ATOMIC + select BR2_PACKAGE_BOOST_DATE_TIME + select BR2_PACKAGE_BOOST_FILESYSTEM + select BR2_PACKAGE_BOOST_PROGRAM_OPTIONS + select BR2_PACKAGE_BOOST_REGEX + select BR2_PACKAGE_BOOST_SYSTEM + select BR2_PACKAGE_BOOST_THREAD + select BR2_PACKAGE_LOG4CPP + select BR2_PACKAGE_GMP + help + GNU Radio is a free & open-source software development + toolkit that provides signal processing blocks to implement + software radios. It can be used with readily-available + low-cost external RF hardware to create software-defined + radios, or without hardware in a simulation-like + environment. It is widely used in hobbyist, academic and + commercial environments to support both wireless + communications research and real-world radio systems. + + http://gnuradio.org/ + +if BR2_PACKAGE_GNURADIO + +config BR2_PACKAGE_GNURADIO_AUDIO + bool "gr-audio" + select BR2_PACKAGE_ALSA_LIB if !BR2_PACKAGE_PORTAUDIO + help + Add audio source/sink to GNU Radio + +config BR2_PACKAGE_GNURADIO_BLOCKS + bool "blocks support" + help + GNU Radio basic block library + +config BR2_PACKAGE_GNURADIO_CTRLPORT + bool "ctrlport support" + help + GNU Radio ctrlport block + +config BR2_PACKAGE_GNURADIO_DTV + bool "gr-dtv support" + select BR2_PACKAGE_GNURADIO_ANALOG + select BR2_PACKAGE_GNURADIO_FEC + select BR2_PACKAGE_GNURADIO_FILTER + help + various digital television standards blocks + +config BR2_PACKAGE_GNURADIO_FEC + bool "gr-fec support" + select BR2_PACKAGE_GNURADIO_BLOCKS + select BR2_PACKAGE_GSL + help + FEC signal processing blocks + +config BR2_PACKAGE_GNURADIO_PYTHON + bool "python support" + depends on BR2_PACKAGE_PYTHON3 + depends on BR2_PACKAGE_PYTHON_NUMPY_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_MUSL # python-numpy + select BR2_PACKAGE_BOOST_PYTHON + select BR2_PACKAGE_PYTHON_NUMPY # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + help + Enable python component + +comment "python support needs glibc or musl" + depends on !(BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_MUSL) + +config BR2_PACKAGE_GNURADIO_UTILS + bool "gr-utils support" + depends on BR2_PACKAGE_GNURADIO_PYTHON + help + Misc python utilities + +config BR2_PACKAGE_GNURADIO_ZEROMQ + bool "gr-zeromq support" + select BR2_PACKAGE_CPPZMQ + select BR2_PACKAGE_PYTHON_PYZMQ if BR2_PACKAGE_GNURADIO_PYTHON + help + zeromq communication support + +config BR2_PACKAGE_GNURADIO_ANALOG + bool "gr-analog support" + select BR2_PACKAGE_GNURADIO_FILTER + help + Analog communications blocks + +config BR2_PACKAGE_GNURADIO_CHANNELS + bool "gr-channels support" + select BR2_PACKAGE_GNURADIO_ANALOG + help + Channel model blocks + +config BR2_PACKAGE_GNURADIO_DIGITAL + bool "gr-digital support" + select BR2_PACKAGE_GNURADIO_ANALOG + help + Digital communications blocks + +config BR2_PACKAGE_GNURADIO_FFT + bool "gr-fft support" + select BR2_PACKAGE_FFTW + select BR2_PACKAGE_FFTW_SINGLE + select BR2_PACKAGE_GNURADIO_BLOCKS + help + FFT signal processing blocks + +config BR2_PACKAGE_GNURADIO_FILTER + bool "gr-filter support" + select BR2_PACKAGE_GNURADIO_FFT + help + Filter signal processing blocks + +config BR2_PACKAGE_GNURADIO_PAGER + bool "gr-flex support" + select BR2_PACKAGE_GNURADIO_ANALOG + help + FLEX pager decoder implementation blocks + +config BR2_PACKAGE_GNURADIO_QTGUI + bool "gr-qtgui" + depends on BR2_PACKAGE_GNURADIO_PYTHON + depends on BR2_PACKAGE_QT5 + select BR2_PACKAGE_GNURADIO_FFT + select BR2_PACKAGE_GNURADIO_FILTER + select BR2_PACKAGE_PYTHON_PYQT5 + select BR2_PACKAGE_QT5BASE_FONTCONFIG # runtime + select BR2_PACKAGE_QT5BASE_GUI # runtime + select BR2_PACKAGE_QT5BASE_WIDGETS # runtime + select BR2_PACKAGE_QWT + help + GNU Radio Qt scopes + +config BR2_PACKAGE_GNURADIO_TRELLIS + bool "gr-trellis support" + select BR2_PACKAGE_GNURADIO_DIGITAL + help + Trellis coded modulation blocks + +config BR2_PACKAGE_GNURADIO_UHD + bool "gr-uhd support" + select BR2_PACKAGE_UHD + select BR2_PACKAGE_GNURADIO_ANALOG + select BR2_PACKAGE_GNURADIO_BLOCKS + select BR2_PACKAGE_GNURADIO_FILTER + help + UHD support + +endif diff --git a/package/gnuradio/gnuradio.hash b/package/gnuradio/gnuradio.hash new file mode 100644 index 00000000..2f147761 --- /dev/null +++ b/package/gnuradio/gnuradio.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 e15311e7da9fe2bb790cc36321d7eb2d93b9dfa0c1552fa5d534dd99d22873be gnuradio-3.8.1.0.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/gnuradio/gnuradio.mk b/package/gnuradio/gnuradio.mk new file mode 100644 index 00000000..1f4458db --- /dev/null +++ b/package/gnuradio/gnuradio.mk @@ -0,0 +1,175 @@ +################################################################################ +# +# gnuradio +# +################################################################################ + +GNURADIO_VERSION = 3.8.1.0 +GNURADIO_SITE = https://github.com/gnuradio/gnuradio/releases/download/v$(GNURADIO_VERSION) +GNURADIO_LICENSE = GPL-3.0+ +GNURADIO_LICENSE_FILES = COPYING + +GNURADIO_SUPPORTS_IN_SOURCE_BUILD = NO + +# needed to determine site-packages path +ifeq ($(BR2_PACKAGE_PYTHON),y) +GNURADIO_PYVER = $(PYTHON_VERSION_MAJOR) +else ifeq ($(BR2_PACKAGE_PYTHON3),y) +GNURADIO_PYVER = $(PYTHON3_VERSION_MAJOR) +endif + +# host-python-mako and host-python-six are needed for volk to compile +GNURADIO_DEPENDENCIES = \ + $(if $(BR2_PACKAGE_PYTHON3),host-python3,host-python) \ + host-python-mako \ + host-python-six \ + host-swig \ + boost \ + log4cpp \ + gmp + +GNURADIO_CONF_OPTS = \ + -DPYTHON_EXECUTABLE=$(HOST_DIR)/bin/python \ + -DENABLE_DEFAULT=OFF \ + -DENABLE_VOLK=ON \ + -DENABLE_GNURADIO_RUNTIME=ON \ + -DENABLE_TESTING=OFF \ + -DXMLTO_EXECUTABLE=NOTFOUND + +# For third-party blocks, the gnuradio libraries are mandatory at +# compile time. +GNURADIO_INSTALL_STAGING = YES + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +GNURADIO_CONF_OPTS += -DCMAKE_EXE_LINKER_FLAGS=-latomic +endif + +ifeq ($(BR2_PACKAGE_ORC),y) +GNURADIO_DEPENDENCIES += orc +GNURADIO_CONF_OPTS += -DENABLE_ORC=ON +else +GNURADIO_CONF_OPTS += -DENABLE_ORC=OFF +endif + +ifeq ($(BR2_PACKAGE_GNURADIO_ANALOG),y) +GNURADIO_CONF_OPTS += -DENABLE_GR_ANALOG=ON +else +GNURADIO_CONF_OPTS += -DENABLE_GR_ANALOG=OFF +endif + +ifeq ($(BR2_PACKAGE_GNURADIO_AUDIO),y) +ifeq ($(BR2_PACKAGE_ALSA_LIB),y) +GNURADIO_DEPENDENCIES += alsa-lib +endif +ifeq ($(BR2_PACKAGE_PORTAUDIO),y) +GNURADIO_DEPENDENCIES += portaudio +endif +GNURADIO_CONF_OPTS += -DENABLE_GR_AUDIO=ON +else +GNURADIO_CONF_OPTS += -DENABLE_GR_AUDIO=OFF +endif + +ifeq ($(BR2_PACKAGE_GNURADIO_BLOCKS),y) +GNURADIO_CONF_OPTS += -DENABLE_GR_BLOCKS=ON +else +GNURADIO_CONF_OPTS += -DENABLE_GR_BLOCKS=OFF +endif + +ifeq ($(BR2_PACKAGE_GNURADIO_CHANNELS),y) +GNURADIO_CONF_OPTS += -DENABLE_GR_CHANNELS=ON +else +GNURADIO_CONF_OPTS += -DENABLE_GR_CHANNELS=OFF +endif + +ifeq ($(BR2_PACKAGE_GNURADIO_CTRLPORT),y) +GNURADIO_CONF_OPTS += -DENABLE_GR_CTRLPORT=ON +else +GNURADIO_CONF_OPTS += -DENABLE_GR_CTRLPORT=OFF +endif + +ifeq ($(BR2_PACKAGE_GNURADIO_DIGITAL),y) +GNURADIO_CONF_OPTS += -DENABLE_GR_DIGITAL=ON +else +GNURADIO_CONF_OPTS += -DENABLE_GR_DIGITAL=OFF +endif + +ifeq ($(BR2_PACKAGE_GNURADIO_DTV),y) +GNURADIO_CONF_OPTS += -DENABLE_GR_DTV=ON +else +GNURADIO_CONF_OPTS += -DENABLE_GR_DTV=OFF +endif + +ifeq ($(BR2_PACKAGE_GNURADIO_FEC),y) +GNURADIO_DEPENDENCIES += gsl +GNURADIO_CONF_OPTS += -DENABLE_GR_FEC=ON +else +GNURADIO_CONF_OPTS += -DENABLE_GR_FEC=OFF +endif + +ifeq ($(BR2_PACKAGE_GNURADIO_FFT),y) +GNURADIO_DEPENDENCIES += fftw-single +GNURADIO_CONF_OPTS += -DENABLE_GR_FFT=ON +else +GNURADIO_CONF_OPTS += -DENABLE_GR_FFT=OFF +endif + +ifeq ($(BR2_PACKAGE_GNURADIO_FILTER),y) +GNURADIO_CONF_OPTS += -DENABLE_GR_FILTER=ON +else +GNURADIO_CONF_OPTS += -DENABLE_GR_FILTER=OFF +endif + +ifeq ($(BR2_PACKAGE_GNURADIO_PYTHON),y) +GNURADIO_DEPENDENCIES += python3 +GNURADIO_CONF_OPTS += -DENABLE_PYTHON=ON +# mandatory to install python modules in site-packages and to use +# correct path for python libraries +GNURADIO_CONF_OPTS += -DGR_PYTHON_RELATIVE=ON \ + -DGR_PYTHON_DIR=lib/python$(GNURADIO_PYVER)/site-packages +else +GNURADIO_CONF_OPTS += -DENABLE_PYTHON=OFF +endif + +ifeq ($(BR2_PACKAGE_GNURADIO_PAGER),y) +GNURADIO_CONF_OPTS += -DENABLE_GR_PAGER=ON +else +GNURADIO_CONF_OPTS += -DENABLE_GR_PAGER=OFF +endif + +ifeq ($(BR2_PACKAGE_GNURADIO_QTGUI),y) +GNURADIO_DEPENDENCIES += qt5base python-pyqt5 qwt +GNURADIO_CONF_OPTS += -DENABLE_GR_QTGUI=ON +else +GNURADIO_CONF_OPTS += -DENABLE_GR_QTGUI=OFF +endif + +ifeq ($(BR2_PACKAGE_GNURADIO_TRELLIS),y) +GNURADIO_CONF_OPTS += -DENABLE_GR_TRELLIS=ON +else +GNURADIO_CONF_OPTS += -DENABLE_GR_TRELLIS=OFF +endif + +ifeq ($(BR2_PACKAGE_GNURADIO_UHD),y) +GNURADIO_DEPENDENCIES += uhd +GNURADIO_CONF_OPTS += -DENABLE_GR_UHD=ON +else +GNURADIO_CONF_OPTS += -DENABLE_GR_UHD=OFF +endif + +ifeq ($(BR2_PACKAGE_GNURADIO_UTILS),y) +GNURADIO_CONF_OPTS += -DENABLE_GR_UTILS=ON +else +GNURADIO_CONF_OPTS += -DENABLE_GR_UTILS=OFF +endif + +ifeq ($(BR2_PACKAGE_GNURADIO_ZEROMQ),y) +GNURADIO_DEPENDENCIES += cppzmq +ifeq ($(BR2_PACKAGE_GNURADIO_PYTHON),y) +GNURADIO_DEPENDENCIES += python-pyzmq +endif +GNURADIO_CONF_OPTS += -DENABLE_GR_ZEROMQ=ON +else +GNURADIO_CONF_OPTS += -DENABLE_GR_ZEROMQ=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/gnutls/Config.in b/package/gnutls/Config.in new file mode 100644 index 00000000..cd853d1e --- /dev/null +++ b/package/gnutls/Config.in @@ -0,0 +1,33 @@ +config BR2_PACKAGE_GNUTLS + bool "gnutls" + # https://gitlab.com/gnutls/gnutls/issues/203 + depends on !BR2_STATIC_LIBS + # gnulib requires a library that implements wctomb(). + # This is noticed only when linking with libgnutls.so. + depends on BR2_USE_WCHAR + select BR2_PACKAGE_LIBTASN1 + select BR2_PACKAGE_NETTLE + select BR2_PACKAGE_PCRE + help + GnuTLS is a secure communications library implementing the SSL + and TLS protocols and technologies around them. + + http://www.gnutls.org + +if BR2_PACKAGE_GNUTLS + +config BR2_PACKAGE_GNUTLS_OPENSSL + bool "OpenSSL compatibility library" + help + Install OpenSSL compatibility library. + +config BR2_PACKAGE_GNUTLS_TOOLS + bool "install tools" + help + Install GnuTLS command line tools for various cryptographic + tasks. + +endif + +comment "gnutls needs a toolchain w/ wchar, dynamic library" + depends on !BR2_USE_WCHAR || BR2_STATIC_LIBS diff --git a/package/gnutls/gnutls.hash b/package/gnutls/gnutls.hash new file mode 100644 index 00000000..0788a7a6 --- /dev/null +++ b/package/gnutls/gnutls.hash @@ -0,0 +1,6 @@ +# Locally calculated after checking pgp signature +# https://www.gnupg.org/ftp/gcrypt/gnutls/v3.7/gnutls-3.7.1.tar.xz.sig +sha256 3777d7963eca5e06eb315686163b7b3f5045e2baac5e54e038ace9835e5cac6f gnutls-3.7.1.tar.xz +# Locally calculated +sha256 e79e9c8a0c85d735ff98185918ec94ed7d175efc377012787aebcf3b80f0d90b doc/COPYING +sha256 6095e9ffa777dd22839f7801aa845b31c9ed07f3d6bf8a26dc5d2dec8ccc0ef3 doc/COPYING.LESSER diff --git a/package/gnutls/gnutls.mk b/package/gnutls/gnutls.mk new file mode 100644 index 00000000..14855bce --- /dev/null +++ b/package/gnutls/gnutls.mk @@ -0,0 +1,89 @@ +################################################################################ +# +# gnutls +# +################################################################################ + +GNUTLS_VERSION_MAJOR = 3.7 +GNUTLS_VERSION = $(GNUTLS_VERSION_MAJOR).1 +GNUTLS_SOURCE = gnutls-$(GNUTLS_VERSION).tar.xz +GNUTLS_SITE = https://www.gnupg.org/ftp/gcrypt/gnutls/v$(GNUTLS_VERSION_MAJOR) +GNUTLS_LICENSE = LGPL-2.1+ (core library) +GNUTLS_LICENSE_FILES = doc/COPYING.LESSER + +ifeq ($(BR2_PACKAGE_GNUTLS_OPENSSL),y) +GNUTLS_LICENSE += , GPL-3.0+ (gnutls-openssl library) +GNUTLS_LICENSE_FILES += doc/COPYING +endif + +GNUTLS_DEPENDENCIES = host-pkgconf libtasn1 nettle pcre +GNUTLS_CPE_ID_VENDOR = gnu +GNUTLS_CONF_OPTS = \ + --disable-doc \ + --disable-guile \ + --disable-libdane \ + --disable-rpath \ + --enable-local-libopts \ + --enable-openssl-compatibility \ + --with-librt-prefix=$(STAGING_DIR) \ + --without-tpm \ + $(if $(BR2_PACKAGE_GNUTLS_OPENSSL),--enable,--disable)-openssl-compatibility \ + $(if $(BR2_PACKAGE_GNUTLS_TOOLS),--enable-tools,--disable-tools) +GNUTLS_CONF_ENV = gl_cv_socket_ipv6=yes \ + ac_cv_header_wchar_h=$(if $(BR2_USE_WCHAR),yes,no) \ + gt_cv_c_wchar_t=$(if $(BR2_USE_WCHAR),yes,no) \ + gt_cv_c_wint_t=$(if $(BR2_USE_WCHAR),yes,no) \ + gl_cv_func_gettimeofday_clobber=no +GNUTLS_INSTALL_STAGING = YES + +# libpthread autodetection poison the linkpath +GNUTLS_CONF_OPTS += $(if $(BR2_TOOLCHAIN_HAS_THREADS),--with-libpthread-prefix=$(STAGING_DIR)/usr) + +# gnutls needs libregex, but pcre can be used too +# The check isn't cross-compile friendly +GNUTLS_CONF_ENV += libopts_cv_with_libregex=yes +GNUTLS_CONF_OPTS += \ + --with-regex-header=pcreposix.h \ + --with-libregex-cflags="`$(PKG_CONFIG_HOST_BINARY) libpcreposix --cflags`" \ + --with-libregex-libs="`$(PKG_CONFIG_HOST_BINARY) libpcreposix --libs`" + +ifeq ($(BR2_PACKAGE_CRYPTODEV_LINUX),y) +GNUTLS_CONF_OPTS += --enable-cryptodev +GNUTLS_DEPENDENCIES += cryptodev-linux +endif + +ifeq ($(BR2_PACKAGE_LIBIDN2),y) +GNUTLS_CONF_OPTS += --with-idn +GNUTLS_DEPENDENCIES += libidn2 +else +GNUTLS_CONF_OPTS += --without-idn +endif + +ifeq ($(BR2_PACKAGE_P11_KIT),y) +GNUTLS_CONF_OPTS += --with-p11-kit +GNUTLS_DEPENDENCIES += p11-kit +else +GNUTLS_CONF_OPTS += --without-p11-kit +endif + +ifeq ($(BR2_PACKAGE_LIBUNISTRING),y) +GNUTLS_CONF_OPTS += --with-libunistring-prefix=$(STAGING_DIR)/usr +GNUTLS_DEPENDENCIES += libunistring +else +GNUTLS_CONF_OPTS += --with-included-unistring +endif + +# Provide a default CA cert location +ifeq ($(BR2_PACKAGE_P11_KIT),y) +GNUTLS_CONF_OPTS += --with-default-trust-store-pkcs11=pkcs11:model=p11-kit-trust +else ifeq ($(BR2_PACKAGE_CA_CERTIFICATES),y) +GNUTLS_CONF_OPTS += --with-default-trust-store-file=/etc/ssl/certs/ca-certificates.crt +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +GNUTLS_LIBS += -latomic +endif + +GNUTLS_CONF_ENV += LIBS="$(GNUTLS_LIBS)" + +$(eval $(autotools-package)) diff --git a/package/go-bootstrap/Config.in.host b/package/go-bootstrap/Config.in.host new file mode 100644 index 00000000..fab80d24 --- /dev/null +++ b/package/go-bootstrap/Config.in.host @@ -0,0 +1,7 @@ +config BR2_PACKAGE_HOST_GO_BOOTSTRAP_ARCH_SUPPORTS + bool + # See src/cmd/dist/unix.c for the list of support + # architectures + default y if BR2_HOSTARCH = "x86" + default y if BR2_HOSTARCH = "x86_64" + default y if BR2_HOSTARCH = "arm" diff --git a/package/go-bootstrap/go-bootstrap.hash b/package/go-bootstrap/go-bootstrap.hash new file mode 100644 index 00000000..691373c5 --- /dev/null +++ b/package/go-bootstrap/go-bootstrap.hash @@ -0,0 +1,4 @@ +# Locally computed: +sha256 9947fc705b0b841b5938c48b22dc33e9647ec0752bae66e50278df4f23f64959 go1.4.3.src.tar.gz +sha256 fbe7f09b96aca3db6faeaf180da8bb632868ec049731e355ff61695197c0e3ea go1.18.9.src.tar.gz +sha256 dd26a7abddd02e2d0aba97805b31f248ef7835d9e10da289b22e3b8ab78b324d LICENSE diff --git a/package/go-bootstrap/go-bootstrap.mk b/package/go-bootstrap/go-bootstrap.mk new file mode 100644 index 00000000..0c313422 --- /dev/null +++ b/package/go-bootstrap/go-bootstrap.mk @@ -0,0 +1,48 @@ +################################################################################ +# +# go-bootstrap +# +################################################################################ + +GO_BOOTSTRAP_VERSION = 1.18.9 +GO_BOOTSTRAP_SITE = https://storage.googleapis.com/golang +GO_BOOTSTRAP_SOURCE = go$(GO_BOOTSTRAP_VERSION).src.tar.gz + +GO_BOOTSTRAP_LICENSE = BSD-3-Clause +GO_BOOTSTRAP_LICENSE_FILES = LICENSE + +# To build programs that need cgo support the toolchain needs to be +# available, so the toolchain is not needed to build host-go-bootstrap +# itself, but needed by other packages that depend on +# host-go-bootstrap. +HOST_GO_BOOTSTRAP_DEPENDENCIES = toolchain + +HOST_GO_BOOTSTRAP_ROOT = $(HOST_DIR)/lib/go-$(GO_BOOTSTRAP_VERSION) + +# The go build system is not compatable with ccache, so use HOSTCC_NOCCACHE +# here. See https://github.com/golang/go/issues/11685. +HOST_GO_BOOTSTRAP_MAKE_ENV = \ + GOOS=linux \ + GOROOT_FINAL="$(HOST_GO_BOOTSTRAP_ROOT)" \ + GOROOT="$(@D)" \ + GOBIN="$(@D)/bin" \ + CC=$(HOSTCC_NOCCACHE) \ + CGO_ENABLED=0 + +define HOST_GO_BOOTSTRAP_BUILD_CMDS + cd $(@D)/src && $(HOST_GO_BOOTSTRAP_MAKE_ENV) ./make.bash +endef + +define HOST_GO_BOOTSTRAP_INSTALL_CMDS + $(INSTALL) -D -m 0755 $(@D)/bin/go $(HOST_GO_BOOTSTRAP_ROOT)/bin/go + $(INSTALL) -D -m 0755 $(@D)/bin/gofmt $(HOST_GO_BOOTSTRAP_ROOT)/bin/gofmt + + cp -a $(@D)/lib $(HOST_GO_BOOTSTRAP_ROOT)/ + cp -a $(@D)/pkg $(HOST_GO_BOOTSTRAP_ROOT)/ + + # There is a known issue which requires the go sources to be installed + # https://golang.org/issue/2775 + cp -a $(@D)/src $(HOST_GO_BOOTSTRAP_ROOT)/ +endef + +$(eval $(host-generic-package)) diff --git a/package/go/0001-build.go-explicit-option-for-crosscompilation.patch b/package/go/0001-build.go-explicit-option-for-crosscompilation.patch new file mode 100644 index 00000000..f76c5b1d --- /dev/null +++ b/package/go/0001-build.go-explicit-option-for-crosscompilation.patch @@ -0,0 +1,40 @@ +From e1382a731a726293e30901038c6870fa77ef6095 Mon Sep 17 00:00:00 2001 +From: Angelo Compagnucci +Date: Tue, 8 May 2018 16:08:44 +0200 +Subject: [PATCH] build.go: explicit option for crosscompilation + +Actually if GOHOSTOS == GOOS || GOHOSTARCH == GOARCH the go build system +assume it's not cross compiling and uses the same toolchain also for the +bootstrap. This is a problem in case the cross compilation mandates a +different toolchain for bootstrap and target. This patch adds +GO_ASSUME_CROSSCOMPILING varible to assure that in case of cross +compilation CC_FOR_TARGET can be different from CC. + +Signed-off-by: Angelo Compagnucci +Signed-off-by: Anisse Astier +--- + src/cmd/dist/build.go | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/cmd/dist/build.go b/src/cmd/dist/build.go +index 99d1db5..eb4097f 100644 +--- a/src/cmd/dist/build.go ++++ b/src/cmd/dist/build.go +@@ -252,12 +252,13 @@ func xinit() { + // $CC_FOR_goos_goarch, if set, applies only to goos/goarch. + func compilerEnv(envName, def string) map[string]string { + m := map[string]string{"": def} ++ crosscompiling := os.Getenv("GO_ASSUME_CROSSCOMPILING") + + if env := os.Getenv(envName); env != "" { + m[""] = env + } + if env := os.Getenv(envName + "_FOR_TARGET"); env != "" { +- if gohostos != goos || gohostarch != goarch { ++ if gohostos != goos || gohostarch != goarch || crosscompiling == "1" { + m[gohostos+"/"+gohostarch] = m[""] + } + m[""] = env +-- +2.7.4 + diff --git a/package/go/Config.in.host b/package/go/Config.in.host new file mode 100644 index 00000000..1dcfb762 --- /dev/null +++ b/package/go/Config.in.host @@ -0,0 +1,25 @@ +# Target go packages should depend on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS +config BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + bool + default y + depends on BR2_PACKAGE_HOST_GO_BOOTSTRAP_ARCH_SUPPORTS + depends on (BR2_arm && BR2_TOOLCHAIN_SUPPORTS_PIE) || BR2_aarch64 \ + || BR2_i386 || BR2_x86_64 || BR2_powerpc64le \ + || BR2_mips64 || BR2_mips64el || BR2_s390x || BR2_loongarch64 + depends on !BR2_ARM_CPU_ARMV4 + # MIPS R6 support in Go has not yet been developed. + depends on !BR2_MIPS_CPU_MIPS64R6 + +config BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + bool + default y + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + # Go doesn't support CGO linking on MIPS64x platforms + # See: https://github.com/karalabe/xgo/issues/46 + depends on !BR2_mips64 && !BR2_mips64el + +# Host go packages should depend on BR2_PACKAGE_HOST_GO_HOST_ARCH_SUPPORTS +config BR2_PACKAGE_HOST_GO_HOST_ARCH_SUPPORTS + bool + default y + depends on BR2_PACKAGE_HOST_GO_BOOTSTRAP_ARCH_SUPPORTS diff --git a/package/go/go.hash b/package/go/go.hash new file mode 100644 index 00000000..4674cccf --- /dev/null +++ b/package/go/go.hash @@ -0,0 +1,6 @@ +# From https://golang.org/dl/ +sha256 e22dd56aac797e1f877ece46d230dcf6d9174564c9874b4bcb6d453a62837f77 go-release-branch.go1.20.tar.gz +sha256 6bd438b3b7a26743f7f268cadbfad73b657338ba1a08ffa0487ee0bfdc0477c9 golang-1.20_1.20.2.orig.tar.gz +sha256 0662ae3813330280d5f1a97a2ee23bbdbe3a5a7cfa6001b24a9873a19a0dc7ec go1.15.15.src.tar.gz +sha256 ea417f806daffd29a7469434d7600acabcc5daa90e805160c6a23ba6439060e7 golang-1.15_1.15.6.orig.tar.gz +sha256 2d36597f7117c38b006835ae7f537487207d8ec407aa9d9980794b2030cbc067 LICENSE diff --git a/package/go/go.mk b/package/go/go.mk new file mode 100644 index 00000000..3afd999e --- /dev/null +++ b/package/go/go.mk @@ -0,0 +1,156 @@ +################################################################################ +# +# go +# +################################################################################ + +GO_SOURCE = golang-1.20_1.20.2.orig.tar.gz +GO_SITE = http://pkg.loongnix.cn/loongnix/pool/main/g/golang-1.20 + +GO_LICENSE = BSD-3-Clause +GO_LICENSE_FILES = LICENSE +GO_CPE_ID_VENDOR = golang + +HOST_GO_DEPENDENCIES = host-go-bootstrap +HOST_GO_GOPATH = $(HOST_DIR)/usr/share/go-path +HOST_GO_HOST_CACHE = $(HOST_DIR)/usr/share/host-go-cache +HOST_GO_ROOT = $(HOST_DIR)/lib/go +HOST_GO_TARGET_CACHE = $(HOST_DIR)/usr/share/go-cache + +# We pass an empty GOBIN, otherwise "go install: cannot install +# cross-compiled binaries when GOBIN is set" +HOST_GO_COMMON_ENV = \ + GO111MODULE=on \ + GOFLAGS=-mod=vendor \ + GOROOT="$(HOST_GO_ROOT)" \ + GOPATH="$(HOST_GO_GOPATH)" \ + GOPROXY=off \ + PATH=$(BR_PATH) \ + GOBIN= \ + CGO_ENABLED=$(HOST_GO_CGO_ENABLED) + +ifeq ($(BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS),y) + +ifeq ($(BR2_arm),y) +GO_GOARCH = arm +ifeq ($(BR2_ARM_CPU_ARMV5),y) +GO_GOARM = 5 +else ifeq ($(BR2_ARM_CPU_ARMV6),y) +GO_GOARM = 6 +else ifeq ($(BR2_ARM_CPU_ARMV7A),y) +GO_GOARM = 7 +else ifeq ($(BR2_ARM_CPU_ARMV8A),y) +# Go doesn't support 32-bit GOARM=8 (https://github.com/golang/go/issues/29373) +# but can still benefit from armv7 optimisations +GO_GOARM = 7 +endif +else ifeq ($(BR2_aarch64),y) +GO_GOARCH = arm64 +else ifeq ($(BR2_i386),y) +GO_GOARCH = 386 +else ifeq ($(BR2_x86_64),y) +GO_GOARCH = amd64 +else ifeq ($(BR2_powerpc64),y) +GO_GOARCH = ppc64 +else ifeq ($(BR2_powerpc64le),y) +GO_GOARCH = ppc64le +else ifeq ($(BR2_mips64),y) +GO_GOARCH = mips64 +else ifeq ($(BR2_mips64el),y) +GO_GOARCH = mips64le +else ifeq ($(BR2_s390x),y) +GO_GOARCH = s390x +else ifeq ($(BR2_loongarch64),y) +GO_GOARCH = loong64 +endif + +# For the convienience of target packages. +HOST_GO_TOOLDIR = $(HOST_GO_ROOT)/pkg/tool/linux_$(GO_GOARCH) +HOST_GO_TARGET_ENV = \ + $(HOST_GO_COMMON_ENV) \ + GOARCH=$(GO_GOARCH) \ + GOCACHE="$(HOST_GO_TARGET_CACHE)" \ + CC="$(TARGET_CC)" \ + CXX="$(TARGET_CXX)" \ + CGO_CFLAGS="$(TARGET_CFLAGS)" \ + CGO_CXXFLAGS="$(TARGET_CXXFLAGS)" \ + CGO_LDFLAGS="$(TARGET_LDFLAGS)" \ + GOTOOLDIR="$(HOST_GO_TOOLDIR)" + +# The go compiler's cgo support uses threads. If BR2_TOOLCHAIN_HAS_THREADS is +# set, build in cgo support for any go programs that may need it. Note that +# any target package needing cgo support must include +# 'depends on BR2_TOOLCHAIN_HAS_THREADS' in its config file. +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +HOST_GO_CGO_ENABLED = 1 +else +HOST_GO_CGO_ENABLED = 0 +endif + +HOST_GO_CROSS_ENV = \ + CC_FOR_TARGET="$(TARGET_CC)" \ + CXX_FOR_TARGET="$(TARGET_CXX)" \ + GOARCH=$(GO_GOARCH) \ + $(if $(GO_GOARM),GOARM=$(GO_GOARM)) \ + GO_ASSUME_CROSSCOMPILING=1 + +else # !BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS +# host-go can still be used to build packages for the host. No need to set all +# the arch stuff since we will not be cross-compiling. +HOST_GO_CGO_ENABLED = 1 +endif # BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + +# For the convenience of host golang packages +HOST_GO_HOST_ENV = \ + $(HOST_GO_COMMON_ENV) \ + GOARCH="" \ + GOCACHE="$(HOST_GO_HOST_CACHE)" \ + CC="$(HOSTCC_NOCCACHE)" \ + CXX="$(HOSTCXX_NOCCACHE)" \ + CGO_CFLAGS="$(HOST_CFLAGS)" \ + CGO_CXXFLAGS="$(HOST_CXXFLAGS)" \ + CGO_LDFLAGS="$(HOST_LDFLAGS)" + +# The go build system is not compatible with ccache, so use +# HOSTCC_NOCCACHE. See https://github.com/golang/go/issues/11685. +HOST_GO_MAKE_ENV = \ + GO111MODULE=off \ + GOCACHE=$(HOST_GO_HOST_CACHE) \ + GOROOT_BOOTSTRAP=$(HOST_GO_BOOTSTRAP_ROOT) \ + GOROOT_FINAL=$(HOST_GO_ROOT) \ + GOROOT="$(@D)" \ + GOBIN="$(@D)/bin" \ + GOOS=linux \ + CC=$(HOSTCC_NOCCACHE) \ + CXX=$(HOSTCXX_NOCCACHE) \ + CGO_ENABLED=$(HOST_GO_CGO_ENABLED) \ + $(HOST_GO_CROSS_ENV) + +define HOST_GO_BUILD_CMDS + cd $(@D)/src && \ + $(HOST_GO_MAKE_ENV) ./make.bash $(if $(VERBOSE),-v) +endef + +define HOST_GO_INSTALL_CMDS + $(INSTALL) -D -m 0755 $(@D)/bin/go $(HOST_GO_ROOT)/bin/go + $(INSTALL) -D -m 0755 $(@D)/bin/gofmt $(HOST_GO_ROOT)/bin/gofmt + + ln -sf ../lib/go/bin/go $(HOST_DIR)/bin/ + ln -sf ../lib/go/bin/gofmt $(HOST_DIR)/bin/ + + cp -a $(@D)/lib $(HOST_GO_ROOT)/ + + mkdir -p $(HOST_GO_ROOT)/pkg + cp -a $(@D)/pkg/include $(@D)/pkg/linux_* $(HOST_GO_ROOT)/pkg/ + cp -a $(@D)/pkg/tool $(HOST_GO_ROOT)/pkg/ + + # There is a known issue which requires the go sources to be installed + # https://golang.org/issue/2775 + cp -a $(@D)/src $(HOST_GO_ROOT)/ + + # Set all file timestamps to prevent the go compiler from rebuilding any + # built in packages when programs are built. + find $(HOST_GO_ROOT) -type f -exec touch -r $(@D)/bin/go {} \; +endef + +$(eval $(host-generic-package)) diff --git a/package/gob2/0001-dont-include-from-prefix.patch b/package/gob2/0001-dont-include-from-prefix.patch new file mode 100644 index 00000000..1b603d75 --- /dev/null +++ b/package/gob2/0001-dont-include-from-prefix.patch @@ -0,0 +1,40 @@ +[PATCH] Don't search $prefix/include for header files + +Don't add $prefix/include to the header file search path, as that breaks +cross compilation (build $prefix/include isn't the same as target +$prefix/include). + +Signed-off-by: Peter Korsgaard +--- + src/Makefile.am | 3 +-- + src/Makefile.in | 3 +-- + 2 files changed, 2 insertions(+), 4 deletions(-) + +Index: gob2-2.0.15/src/Makefile.am +=================================================================== +--- gob2-2.0.15.orig/src/Makefile.am ++++ gob2-2.0.15/src/Makefile.am +@@ -17,8 +17,7 @@ INCLUDES = \ + -I$(top_builddir) \ + -I$(top_builddir)/src \ + -I$(top_srcdir) \ +- -I$(top_srcdir)/src \ +- -I$(includedir) ++ -I$(top_srcdir)/src + + if NOINSTGOB + noinst_PROGRAMS = @NOINSTGOB@ +Index: gob2-2.0.15/src/Makefile.in +=================================================================== +--- gob2-2.0.15.orig/src/Makefile.in ++++ gob2-2.0.15/src/Makefile.in +@@ -193,8 +193,7 @@ INCLUDES = \ + -I$(top_builddir) \ + -I$(top_builddir)/src \ + -I$(top_srcdir) \ +- -I$(top_srcdir)/src \ +- -I$(includedir) ++ -I$(top_srcdir)/src + + @NOINSTGOB_TRUE@noinst_PROGRAMS = @NOINSTGOB@ + @NOINSTGOB_FALSE@bin_PROGRAMS = @INSTGOB@ diff --git a/package/gob2/gob2.hash b/package/gob2/gob2.hash new file mode 100644 index 00000000..7edf518f --- /dev/null +++ b/package/gob2/gob2.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 f7ee84c07ca88ae96e5a60461957cc4dd0aa69d61804433d1c85de3d50be8026 gob2-2.0.20.tar.xz +sha256 b8a2f73f743dc1a51aff23f1aacbca4b868564db52496fa3c0caba755bfd1eaf COPYING +sha256 7222386392eecf784e2f0c406f412f238cb6d25865a8447ae0947b32bb569889 COPYING.generated-code diff --git a/package/gob2/gob2.mk b/package/gob2/gob2.mk new file mode 100644 index 00000000..d0cce8fb --- /dev/null +++ b/package/gob2/gob2.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# gob2 +# +################################################################################ + +GOB2_VERSION = 2.0.20 +GOB2_SOURCE = gob2-$(GOB2_VERSION).tar.xz +GOB2_SITE = http://ftp.5z.com/pub/gob +GOB2_LICENSE = GPL-2.0+ +GOB2_LICENSE_FILES = COPYING COPYING.generated-code +HOST_GOB2_DEPENDENCIES = host-bison host-flex host-libglib2 + +$(eval $(host-autotools-package)) + +# gob2 for the host +GOB2_HOST_BINARY = $(HOST_DIR)/bin/gob2 diff --git a/package/gobject-introspection/0001-disable-tests.patch b/package/gobject-introspection/0001-disable-tests.patch new file mode 100644 index 00000000..c75c7512 --- /dev/null +++ b/package/gobject-introspection/0001-disable-tests.patch @@ -0,0 +1,34 @@ +From 473b4288d8f4e891d0d21f7b60ef8053c5cd7af9 Mon Sep 17 00:00:00 2001 +From: Adam Duskett +Date: Mon, 3 Feb 2020 10:07:15 -0800 +Subject: [PATCH] disable tests + +If introspection data on the host is not built, meson throws the error: +"Unknown variable "typelibs". Because tests are not required, removing +the subdir tests alltogether fixes this issue. + +Signed-off-by: Adam Duskett +--- + meson.build | 6 ------ + 1 file changed, 6 deletions(-) + +diff --git a/meson.build b/meson.build +index eed4d6b..5058664 100644 +--- a/meson.build ++++ b/meson.build +@@ -214,12 +214,6 @@ if get_option('build_introspection_data') == true + endif + subdir('docs') + +-# The tests will also run, which is not possible if they +-# were built for a different architecture. +-if not meson.is_cross_build() +- subdir('tests') +-endif +- + install_data('Makefile.introspection', install_dir: join_paths(get_option('datadir'), 'gobject-introspection-1.0')) + install_data('m4/introspection.m4', install_dir: join_paths(get_option('datadir'), 'aclocal')) + +-- +2.24.1 + diff --git a/package/gobject-introspection/0002-Add-rpath-links-to-ccompiler.patch b/package/gobject-introspection/0002-Add-rpath-links-to-ccompiler.patch new file mode 100644 index 00000000..08835d3e --- /dev/null +++ b/package/gobject-introspection/0002-Add-rpath-links-to-ccompiler.patch @@ -0,0 +1,29 @@ +From 72a427bc50daee8f1ded0e9221e53dbbf2a80f08 Mon Sep 17 00:00:00 2001 +From: Adam Duskett +Date: Wed, 14 Mar 2018 12:07:10 -0400 +Subject: [PATCH] Add rpath links to ccompiler + +This patch allows gobject-introspection to process extra paths passed to the +compiler via the GIR_EXTRA_LIBS_PATH variable. + +Signed-off-by: Adam Duskett +--- + giscanner/ccompiler.py | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/giscanner/ccompiler.py b/giscanner/ccompiler.py +index a8bd5b1..51bb9bc 100644 +--- a/giscanner/ccompiler.py ++++ b/giscanner/ccompiler.py +@@ -229,6 +229,8 @@ class CCompiler(object): + + for envvar in runtime_path_envvar: + if envvar in os.environ: ++ for envvar_path in os.environ[envvar].split(':'): ++ args.append("-Wl,-rpath-link," + envvar_path) + os.environ[envvar] = \ + os.pathsep.join(runtime_paths + [os.environ[envvar]]) + else: +-- +2.14.3 + diff --git a/package/gobject-introspection/0003-ignore-error-return-codes-from-ldd-wrapper.patch b/package/gobject-introspection/0003-ignore-error-return-codes-from-ldd-wrapper.patch new file mode 100644 index 00000000..d43dc139 --- /dev/null +++ b/package/gobject-introspection/0003-ignore-error-return-codes-from-ldd-wrapper.patch @@ -0,0 +1,28 @@ +From f742da8b3913f4818d3f419117076afe62f4dbf4 Mon Sep 17 00:00:00 2001 +From: Alexander Kanavin +Date: Wed, 5 Sep 2018 16:46:52 +0200 +Subject: [PATCH] giscanner: ignore error return codes from ldd-wrapper + +prelink-rtld, which we use instead of ldd returns 127 when it can't find a library. +It is not an error per se, but it breaks subprocess.check_output(). + +Upstream-Status: Inappropriate [oe-core specific] +Signed-off-by: Alexander Kanavin +Signed-off-by: Adam Duskett +--- + giscanner/shlibs.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/giscanner/shlibs.py b/giscanner/shlibs.py +index d67df95..80352a6 100644 +--- a/giscanner/shlibs.py ++++ b/giscanner/shlibs.py +@@ -103,7 +103,7 @@ def _resolve_non_libtool(options, binary, libraries): + args.extend(['otool', '-L', binary.args[0]]) + else: + args.extend(['ldd', binary.args[0]]) +- output = subprocess.check_output(args) ++ output = subprocess.run(args, check=False, stdout=subprocess.PIPE).stdout + if isinstance(output, bytes): + output = output.decode("utf-8", "replace") + diff --git a/package/gobject-introspection/Config.in b/package/gobject-introspection/Config.in new file mode 100644 index 00000000..57c56970 --- /dev/null +++ b/package/gobject-introspection/Config.in @@ -0,0 +1,49 @@ +config BR2_PACKAGE_GOBJECT_INTROSPECTION_ARCH_SUPPORTS + bool + default y + depends on BR2_PACKAGE_HOST_QEMU_ARCH_SUPPORTS + depends on !BR2_RISCV_32 # qemu-riscv32 segfaults in qemu-5.0.0 + +config BR2_PACKAGE_GOBJECT_INTROSPECTION + bool "gobject-introspection" + depends on BR2_USE_MMU # python3, libglib2 + depends on BR2_PACKAGE_GOBJECT_INTROSPECTION_ARCH_SUPPORTS + # While gcc 4.8 might be compatible with gobject-introspection, + # The autobuilders use some toolchains from codesourcery which + # have gcc 4.8 and a very old version of glibc, which will cause + # compile errors with locale.c. As such, require 4.9 until this + # can be verified. + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + depends on BR2_TOOLCHAIN_USES_GLIBC + # gobject-introspection does not require python3 to run on the + # target; however, because the tools run in a qemu wrapper, a + # cross-compiled python3 must be installed to staging. As there + # is no current mechanism to tell Buildroot only to install + # python to staging, then python must also be installed + # unconditionally to the target when building + # gobject-introspection. + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_HOST_QEMU + select BR2_PACKAGE_HOST_QEMU_LINUX_USER_MODE + select BR2_PACKAGE_LIBFFI + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_ZLIB + help + GObject introspection is a middleware layer between C + libraries (using GObject) and language bindings. The C library + can be scanned at compile time and generate a metadata file, + in addition to the actual native C library. Then at runtime, + language bindings can read this metadata and automatically + provide bindings to call into the C library. + + https://wiki.gnome.org/action/show/Projects/GObjectIntrospection + +comment "gobject-introspection needs python3" + depends on !BR2_PACKAGE_PYTHON3 + depends on BR2_PACKAGE_GOBJECT_INTROSPECTION_ARCH_SUPPORTS + +comment "gobject-introspection needs a glibc toolchain, gcc >= 4.9" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_GOBJECT_INTROSPECTION_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_USES_GLIBC || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/gobject-introspection/g-ir-compiler.in b/package/gobject-introspection/g-ir-compiler.in new file mode 100644 index 00000000..3313cc50 --- /dev/null +++ b/package/gobject-introspection/g-ir-compiler.in @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +$(dirname $0)/g-ir-scanner-qemuwrapper $(dirname $0)/g-ir-compiler.real "$@" diff --git a/package/gobject-introspection/g-ir-scanner-lddwrapper.in b/package/gobject-introspection/g-ir-scanner-lddwrapper.in new file mode 100644 index 00000000..c1931456 --- /dev/null +++ b/package/gobject-introspection/g-ir-scanner-lddwrapper.in @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +${HOST_DIR}/sbin/prelink-rtld --root=$(dirname $0)/../../ "$@" diff --git a/package/gobject-introspection/g-ir-scanner-qemuwrapper.in b/package/gobject-introspection/g-ir-scanner-qemuwrapper.in new file mode 100644 index 00000000..cad7ef87 --- /dev/null +++ b/package/gobject-introspection/g-ir-scanner-qemuwrapper.in @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +# Pass -r to qemu-user as to trick glibc into not errorings out if the host kernel +# is older than the target kernel. +# Use a modules directory which does not exist so we don't load random things +# which may then get deleted (or their dependencies) and potentially segfault +GIO_MODULE_DIR=$(dirname $0)/../lib/gio/modules-dummy \ +@QEMU_USER@ -r @TOOLCHAIN_HEADERS_VERSION@ \ +-L $(dirname $0)/../../ \ +-E LD_LIBRARY_PATH=${GIR_EXTRA_LIBS_PATH}:.libs:$(dirname $0)/../lib:$(dirname $0)/../../lib \ +"$@" + +if [[ $? -ne 0 ]]; then + echo "If the above error message is about missing .so libraries, then setting up GIR_EXTRA_LIBS_PATH in the .mk file should help." + echo 'Typically like this: PKG_MAKE_ENV += GIR_EXTRA_LIBS_PATH="$(@D)/.libs"' + exit 1 +fi diff --git a/package/gobject-introspection/g-ir-scanner.in b/package/gobject-introspection/g-ir-scanner.in new file mode 100644 index 00000000..22df7be3 --- /dev/null +++ b/package/gobject-introspection/g-ir-scanner.in @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +# These environment variables are empty by default, and as such ccompiler.py +# defaults to either using the system tools (CC, CXX, and CPP) or leaving +# the variables blank (LDFLAGS, CFLAGS, and CPPFLAGS.) +# Export these variables to ensure all build systems can generate .gir and +# .typelib files properly. +export CPP="${CPP:-${HOST_DIR}/bin/@BASENAME_TARGET_CPP@}" +export CC="${CC:-${HOST_DIR}/bin/@BASENAME_TARGET_CC@}" +export CXX="${CXX:-${HOST_DIR}/bin/@BASENAME_TARGET_CXX@}" +export CPPFLAGS="${CPPFLAGS:-@TARGET_CPPFLAGS@}" +export CFLAGS="${CFLAGS:-@TARGET_CFLAGS@}" +export CXXFLAGS="${CXXFLAGS:-@TARGET_CXXFLAGS@}" +export LDFLAGS="${LDFLAGS:-@TARGET_LDFLAGS@}" + +export GI_SCANNER_DISABLE_CACHE=1 + +${HOST_DIR}/bin/g-ir-scanner \ +--lib-dirs-envvar=GIR_EXTRA_LIBS_PATH \ +--use-binary-wrapper=$(dirname $0)/g-ir-scanner-qemuwrapper \ +--use-ldd-wrapper=$(dirname $0)/g-ir-scanner-lddwrapper \ +--add-include-path=$(dirname $0)/../share/gir-1.0 "$@" diff --git a/package/gobject-introspection/gobject-introspection.hash b/package/gobject-introspection/gobject-introspection.hash new file mode 100644 index 00000000..68bf63e0 --- /dev/null +++ b/package/gobject-introspection/gobject-introspection.hash @@ -0,0 +1,4 @@ +#From http://ftp.gnome.org/pub/GNOME/sources/gobject-introspection/1.64/gobject-introspection-1.64.1.sha256sum +sha256 80beae6728c134521926affff9b2e97125749b38d38744dc901f4010ee3e7fa7 gobject-introspection-1.64.1.tar.xz +sha256 d245807f90032872d1438d741ed21e2490e1175dc8aa3afa5ddb6c8e529b58e5 COPYING.LGPL +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING.GPL diff --git a/package/gobject-introspection/gobject-introspection.mk b/package/gobject-introspection/gobject-introspection.mk new file mode 100644 index 00000000..eefb2c83 --- /dev/null +++ b/package/gobject-introspection/gobject-introspection.mk @@ -0,0 +1,146 @@ +################################################################################ +# +# gobject-introspection +# +################################################################################ + +GOBJECT_INTROSPECTION_VERSION_MAJOR = 1.64 +GOBJECT_INTROSPECTION_VERSION = $(GOBJECT_INTROSPECTION_VERSION_MAJOR).1 +GOBJECT_INTROSPECTION_SITE = http://ftp.gnome.org/pub/GNOME/sources/gobject-introspection/$(GOBJECT_INTROSPECTION_VERSION_MAJOR) +GOBJECT_INTROSPECTION_SOURCE = gobject-introspection-$(GOBJECT_INTROSPECTION_VERSION).tar.xz +GOBJECT_INTROSPECTION_INSTALL_STAGING = YES +GOBJECT_INTROSPECTION_AUTORECONF = YES +GOBJECT_INTROSPECTION_LICENSE = LGPL-2.0+, GPL-2.0+, BSD-2-Clause +GOBJECT_INTROSPECTION_LICENSE_FILES = COPYING.LGPL COPYING.GPL giscanner/scannerlexer.l + +GOBJECT_INTROSPECTION_DEPENDENCIES = \ + host-autoconf-archive \ + host-gobject-introspection \ + host-prelink-cross \ + host-qemu \ + libffi \ + libglib2 \ + python3 \ + zlib + +HOST_GOBJECT_INTROSPECTION_DEPENDENCIES = \ + host-bison \ + host-flex \ + host-libglib2 \ + host-python3 + +# g-ir-scanner will default to /usr/bin/ld for linking if this is not set. +GOBJECT_INTROSPECTION_NINJA_ENV += \ + CC="$(TARGET_CC)" + +# When building, gobject-introspection uses tools/g-ir-scanner to build several +# .gir and .typelib files. g-ir-scanner does not use LDFLAGS, and by default, +# links to the system-installed libglib2 path. To remedy this issue, defining +# LD_LIBRARY_PATH forces g-ir-scanner to use our host installed libglib2 files. +HOST_GOBJECT_INTROSPECTION_NINJA_ENV += \ + LD_LIBRARY_PATH="$(if $(LD_LIBRARY_PATH),$(LD_LIBRARY_PATH):)$(HOST_DIR)/lib" + +# Use the host gi-scanner to prevent the scanner from generating incorrect +# elf classes. +GOBJECT_INTROSPECTION_CONF_OPTS = \ + -Dgi_cross_use_host_gi=true \ + -Dgi_cross_binary_wrapper="$(STAGING_DIR)/usr/bin/g-ir-scanner-qemuwrapper" \ + -Dgi_cross_ldd_wrapper="$(STAGING_DIR)/usr/bin/g-ir-scanner-lddwrapper" \ + -Dbuild_introspection_data=true \ + -Ddoctool=disabled + +ifeq ($(BR2_PACKAGE_CAIRO),y) +GOBJECT_INTROSPECTION_DEPENDENCIES += cairo +GOBJECT_INTROSPECTION_CONF_OPTS += -Dcairo=enabled +else +GOBJECT_INTROSPECTION_CONF_OPTS += -Dcairo=disabled +endif + +# GI_SCANNER_DISABLE_CACHE=1 prevents g-ir-scanner from writing cache data to ${HOME} +GOBJECT_INTROSPECTION_CONF_ENV = \ + GI_SCANNER_DISABLE_CACHE=1 + +HOST_GOBJECT_INTROSPECTION_CONF_ENV = \ + GI_SCANNER_DISABLE_CACHE=1 + +# Make sure g-ir-tool-template uses the host python. +define GOBJECT_INTROSPECTION_FIX_TOOLTEMPLATE_PYTHON_PATH + $(SED) '1s%#!.*%#!$(HOST_DIR)/bin/python%' $(@D)/tools/g-ir-tool-template.in +endef +HOST_GOBJECT_INTROSPECTION_PRE_CONFIGURE_HOOKS += GOBJECT_INTROSPECTION_FIX_TOOLTEMPLATE_PYTHON_PATH + +# Perform the following: +# - Just as above, Ensure that g-ir-tool-template.in uses the host python. +# - Install all of the wrappers needed to build gobject-introspection. +# - Create a safe modules directory which does not exist so we don't load random things +# which may then get deleted (or their dependencies) and potentially segfault +define GOBJECT_INTROSPECTION_INSTALL_PRE_WRAPPERS + $(SED) '1s%#!.*%#!$(HOST_DIR)/bin/python%' $(@D)/tools/g-ir-tool-template.in + + $(INSTALL) -D -m 755 $(GOBJECT_INTROSPECTION_PKGDIR)/g-ir-scanner-lddwrapper.in \ + $(STAGING_DIR)/usr/bin/g-ir-scanner-lddwrapper + + $(INSTALL) -D -m 755 $(GOBJECT_INTROSPECTION_PKGDIR)/g-ir-scanner-qemuwrapper.in \ + $(STAGING_DIR)/usr/bin/g-ir-scanner-qemuwrapper + $(SED) "s%@QEMU_USER@%$(QEMU_USER)%g" \ + $(STAGING_DIR)/usr/bin/g-ir-scanner-qemuwrapper + $(SED) "s%@TOOLCHAIN_HEADERS_VERSION@%$(BR2_TOOLCHAIN_HEADERS_AT_LEAST)%g" \ + $(STAGING_DIR)/usr/bin/g-ir-scanner-qemuwrapper + + # Use a modules directory which does not exist so we don't load random things + # which may then get deleted (or their dependencies) and potentially segfault + mkdir -p $(STAGING_DIR)/usr/lib/gio/modules-dummy +endef +GOBJECT_INTROSPECTION_PRE_CONFIGURE_HOOKS += GOBJECT_INTROSPECTION_INSTALL_PRE_WRAPPERS + +# Move the real compiler and scanner to .real, and replace them with the wrappers. +# Using .real has the following advantages: +# - There is no need to change the logic for other packages. +# - The wrappers call the .real files using qemu. +define GOBJECT_INTROSPECTION_INSTALL_WRAPPERS + # Move the real binaries to their names.real, then replace them with + # the wrappers. + $(foreach w,g-ir-compiler g-ir-scanner, + mv $(STAGING_DIR)/usr/bin/$(w) $(STAGING_DIR)/usr/bin/$(w).real + $(INSTALL) -D -m 755 \ + $(GOBJECT_INTROSPECTION_PKGDIR)/$(w).in $(STAGING_DIR)/usr/bin/$(w) + ) + $(SED) "s%@BASENAME_TARGET_CPP@%$(notdir $(TARGET_CPP))%g" \ + -e "s%@BASENAME_TARGET_CC@%$(notdir $(TARGET_CC))%g" \ + -e "s%@BASENAME_TARGET_CXX@%$(notdir $(TARGET_CXX))%g" \ + -e "s%@TARGET_CPPFLAGS@%$(TARGET_CPPFLAGS)%g" \ + -e "s%@TARGET_CFLAGS@%$(TARGET_CFLAGS)%g" \ + -e "s%@TARGET_CXXFLAGS@%$(TARGET_CXXFLAGS)%g" \ + -e "s%@TARGET_LDFLAGS@%$(TARGET_LDFLAGS)%g" \ + $(STAGING_DIR)/usr/bin/g-ir-scanner + + # Gobject-introspection installs Makefile.introspection in + # $(STAGING_DIR)/usr/share which is needed for autotools-based programs to + # build .gir and .typelib files. Unfortuantly, gobject-introspection-1.0.pc + # uses $(prefix)/share as the directory, which + # causes the host /usr/share being used instead of $(STAGING_DIR)/usr/share. + # Change datarootdir to $(libdir)/../share which will prefix $(STAGING_DIR) + # to the correct location. + $(SED) "s%datarootdir=.*%datarootdir=\$${libdir}/../share%g" \ + $(STAGING_DIR)/usr/lib/pkgconfig/gobject-introspection-1.0.pc + + # By default, girdir and typelibdir use datadir and libdir as their prefix, + # of which pkg-config appends the sysroot directory. This results in files + # being installed in $(STAGING_DIR)/$(STAGING_DIR)/path/to/files. + # Changing the prefix to exec_prefix prevents this error. + $(SED) "s%girdir=.*%girdir=\$${exec_prefix}/share/gir-1.0%g" \ + $(STAGING_DIR)/usr/lib/pkgconfig/gobject-introspection-1.0.pc + + $(SED) "s%typelibdir=.*%typelibdir=\$${exec_prefix}/lib/girepository-1.0%g" \ + $(STAGING_DIR)/usr/lib/pkgconfig/gobject-introspection-1.0.pc +endef +GOBJECT_INTROSPECTION_POST_INSTALL_STAGING_HOOKS += GOBJECT_INTROSPECTION_INSTALL_WRAPPERS + +# Only .typelib files are needed to run. +define GOBJECT_INTROSPECTION_REMOVE_DEVELOPMENT_FILES + find $(TARGET_DIR)/usr/share \( -iname "*.gir" -o -iname \*.rnc \) -delete +endef +GOBJECT_INTROSPECTION_TARGET_FINALIZE_HOOKS += GOBJECT_INTROSPECTION_REMOVE_DEVELOPMENT_FILES + +$(eval $(meson-package)) +$(eval $(host-meson-package)) diff --git a/package/google-breakpad/0001-add-missing-asm-ptrace-include.patch b/package/google-breakpad/0001-add-missing-asm-ptrace-include.patch new file mode 100644 index 00000000..281c7a04 --- /dev/null +++ b/package/google-breakpad/0001-add-missing-asm-ptrace-include.patch @@ -0,0 +1,31 @@ +Include to get necessary definitions on AArch64 + +In glibc commit +https://sourceware.org/git/?p=glibc.git;a=commit;h=7d05a8168b45c0580e1f9a79c2dd26c8f0d31fca, +including from on AArch64 has been +removed. So the Google Breakpad code, which used to build fine on +glibc 2.18 (CodeSourcery toolchain for example), no longer builds with +glibc 2.19 (Linaro toolchain for example). + +To fix this, this patch adds the missing include (for +AArch64 only, to be conservative). + +This patch has not been submitted upstream, since more recent versions +of Google Breakpad have completely changed this part of the code. + +Signed-off-by: Thomas Petazzoni + +Index: b/src/client/linux/minidump_writer/linux_dumper.h +=================================================================== +--- a/src/client/linux/minidump_writer/linux_dumper.h ++++ b/src/client/linux/minidump_writer/linux_dumper.h +@@ -43,6 +43,9 @@ + #include + #include + #include ++#if defined(__aarch64__) ++#include ++#endif + + #include "common/memory.h" + #include "google_breakpad/common/minidump_format.h" diff --git a/package/google-breakpad/0002-Replace-remaining-references-to-struct-ucontext-with.patch b/package/google-breakpad/0002-Replace-remaining-references-to-struct-ucontext-with.patch new file mode 100644 index 00000000..e02ae268 --- /dev/null +++ b/package/google-breakpad/0002-Replace-remaining-references-to-struct-ucontext-with.patch @@ -0,0 +1,257 @@ +From 7975a962e1d6dbad5a46792a54e647abd7caf5f1 Mon Sep 17 00:00:00 2001 +From: Mark Mentovai +Date: Tue, 19 Sep 2017 22:48:30 -0400 +Subject: [PATCH] Replace remaining references to 'struct ucontext' with + 'ucontext_t' + +This relands +https://chromium.googlesource.com/breakpad/breakpad/src/+/e3035bc406cee8a4d765e59ad46eb828705f17f4, +which was accidentally committed to breakpad/breakpad/src, the read-only +mirror of src in breakpad/breakpad. (Well, it should have been +read-only.) See https://crbug.com/766164. + +This fixes issues with glibc-2.26. + +See https://bugs.gentoo.org/show_bug.cgi?id=628782 , +https://sourceware.org/git/?p=glibc.git;h=251287734e89a52da3db682a8241eb6bccc050c9 , and +https://sourceware.org/ml/libc-alpha/2017-08/msg00010.html for context. +Change-Id: Id66f474d636dd2afa450bab925c5514a800fdd6f +Reviewed-on: https://chromium-review.googlesource.com/674304 +Reviewed-by: Mark Mentovai + +(cherry picked from commit bddcc58860f522a0d4cbaa7e9d04058caee0db9d) +[Romain: backport from upstream] +Signed-off-by: Romain Naour +--- + .../linux/dump_writer_common/ucontext_reader.cc | 32 +++++++++++----------- + .../linux/dump_writer_common/ucontext_reader.h | 14 +++++----- + src/client/linux/handler/exception_handler.cc | 10 +++---- + src/client/linux/handler/exception_handler.h | 6 ++-- + .../linux/microdump_writer/microdump_writer.cc | 2 +- + .../linux/minidump_writer/minidump_writer.cc | 2 +- + 6 files changed, 33 insertions(+), 33 deletions(-) + +diff --git a/src/client/linux/dump_writer_common/ucontext_reader.cc b/src/client/linux/dump_writer_common/ucontext_reader.cc +index c80724d..052ce37 100644 +--- a/src/client/linux/dump_writer_common/ucontext_reader.cc ++++ b/src/client/linux/dump_writer_common/ucontext_reader.cc +@@ -36,19 +36,19 @@ namespace google_breakpad { + + // Minidump defines register structures which are different from the raw + // structures which we get from the kernel. These are platform specific +-// functions to juggle the ucontext and user structures into minidump format. ++// functions to juggle the ucontext_t and user structures into minidump format. + + #if defined(__i386__) + +-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { + return uc->uc_mcontext.gregs[REG_ESP]; + } + +-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { + return uc->uc_mcontext.gregs[REG_EIP]; + } + +-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, ++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc, + const struct _libc_fpstate* fp) { + const greg_t* regs = uc->uc_mcontext.gregs; + +@@ -88,15 +88,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, + + #elif defined(__x86_64) + +-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { + return uc->uc_mcontext.gregs[REG_RSP]; + } + +-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { + return uc->uc_mcontext.gregs[REG_RIP]; + } + +-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, ++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc, + const struct _libc_fpstate* fpregs) { + const greg_t* regs = uc->uc_mcontext.gregs; + +@@ -145,15 +145,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, + + #elif defined(__ARM_EABI__) + +-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { + return uc->uc_mcontext.arm_sp; + } + +-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { + return uc->uc_mcontext.arm_pc; + } + +-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) { ++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc) { + out->context_flags = MD_CONTEXT_ARM_FULL; + + out->iregs[0] = uc->uc_mcontext.arm_r0; +@@ -184,15 +184,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) { + + #elif defined(__aarch64__) + +-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { + return uc->uc_mcontext.sp; + } + +-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { + return uc->uc_mcontext.pc; + } + +-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, ++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc, + const struct fpsimd_context* fpregs) { + out->context_flags = MD_CONTEXT_ARM64_FULL; + +@@ -210,15 +210,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, + + #elif defined(__mips__) + +-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { + return uc->uc_mcontext.gregs[MD_CONTEXT_MIPS_REG_SP]; + } + +-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { + return uc->uc_mcontext.pc; + } + +-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) { ++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc) { + #if _MIPS_SIM == _ABI64 + out->context_flags = MD_CONTEXT_MIPS64_FULL; + #elif _MIPS_SIM == _ABIO32 +diff --git a/src/client/linux/dump_writer_common/ucontext_reader.h b/src/client/linux/dump_writer_common/ucontext_reader.h +index b6e77b4..2de80b7 100644 +--- a/src/client/linux/dump_writer_common/ucontext_reader.h ++++ b/src/client/linux/dump_writer_common/ucontext_reader.h +@@ -39,23 +39,23 @@ + + namespace google_breakpad { + +-// Wraps platform-dependent implementations of accessors to ucontext structs. ++// Wraps platform-dependent implementations of accessors to ucontext_t structs. + struct UContextReader { +- static uintptr_t GetStackPointer(const struct ucontext* uc); ++ static uintptr_t GetStackPointer(const ucontext_t* uc); + +- static uintptr_t GetInstructionPointer(const struct ucontext* uc); ++ static uintptr_t GetInstructionPointer(const ucontext_t* uc); + +- // Juggle a arch-specific ucontext into a minidump format ++ // Juggle a arch-specific ucontext_t into a minidump format + // out: the minidump structure + // info: the collection of register structures. + #if defined(__i386__) || defined(__x86_64) +- static void FillCPUContext(RawContextCPU *out, const ucontext *uc, ++ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc, + const struct _libc_fpstate* fp); + #elif defined(__aarch64__) +- static void FillCPUContext(RawContextCPU *out, const ucontext *uc, ++ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc, + const struct fpsimd_context* fpregs); + #else +- static void FillCPUContext(RawContextCPU *out, const ucontext *uc); ++ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc); + #endif + }; + +diff --git a/src/client/linux/handler/exception_handler.cc b/src/client/linux/handler/exception_handler.cc +index b63f973..3d809b8 100644 +--- a/src/client/linux/handler/exception_handler.cc ++++ b/src/client/linux/handler/exception_handler.cc +@@ -439,9 +439,9 @@ bool ExceptionHandler::HandleSignal(int sig, siginfo_t* info, void* uc) { + // Fill in all the holes in the struct to make Valgrind happy. + memset(&g_crash_context_, 0, sizeof(g_crash_context_)); + memcpy(&g_crash_context_.siginfo, info, sizeof(siginfo_t)); +- memcpy(&g_crash_context_.context, uc, sizeof(struct ucontext)); ++ memcpy(&g_crash_context_.context, uc, sizeof(ucontext_t)); + #if defined(__aarch64__) +- struct ucontext* uc_ptr = (struct ucontext*)uc; ++ ucontext_t* uc_ptr = (ucontext_t*)uc; + struct fpsimd_context* fp_ptr = + (struct fpsimd_context*)&uc_ptr->uc_mcontext.__reserved; + if (fp_ptr->head.magic == FPSIMD_MAGIC) { +@@ -450,9 +450,9 @@ bool ExceptionHandler::HandleSignal(int sig, siginfo_t* info, void* uc) { + } + #elif !defined(__ARM_EABI__) && !defined(__mips__) + // FP state is not part of user ABI on ARM Linux. +- // In case of MIPS Linux FP state is already part of struct ucontext ++ // In case of MIPS Linux FP state is already part of ucontext_t + // and 'float_state' is not a member of CrashContext. +- struct ucontext* uc_ptr = (struct ucontext*)uc; ++ ucontext_t* uc_ptr = (ucontext_t*)uc; + if (uc_ptr->uc_mcontext.fpregs) { + memcpy(&g_crash_context_.float_state, uc_ptr->uc_mcontext.fpregs, + sizeof(g_crash_context_.float_state)); +@@ -476,7 +476,7 @@ bool ExceptionHandler::SimulateSignalDelivery(int sig) { + // ExceptionHandler::HandleSignal(). + siginfo.si_code = SI_USER; + siginfo.si_pid = getpid(); +- struct ucontext context; ++ ucontext_t context; + getcontext(&context); + return HandleSignal(sig, &siginfo, &context); + } +diff --git a/src/client/linux/handler/exception_handler.h b/src/client/linux/handler/exception_handler.h +index 591c310..42f4055 100644 +--- a/src/client/linux/handler/exception_handler.h ++++ b/src/client/linux/handler/exception_handler.h +@@ -191,11 +191,11 @@ class ExceptionHandler { + struct CrashContext { + siginfo_t siginfo; + pid_t tid; // the crashing thread. +- struct ucontext context; ++ ucontext_t context; + #if !defined(__ARM_EABI__) && !defined(__mips__) + // #ifdef this out because FP state is not part of user ABI for Linux ARM. +- // In case of MIPS Linux FP state is already part of struct +- // ucontext so 'float_state' is not required. ++ // In case of MIPS Linux FP state is already part of ucontext_t so ++ // 'float_state' is not required. + fpstate_t float_state; + #endif + }; +diff --git a/src/client/linux/microdump_writer/microdump_writer.cc b/src/client/linux/microdump_writer/microdump_writer.cc +index 6f5b435..a508667 100644 +--- a/src/client/linux/microdump_writer/microdump_writer.cc ++++ b/src/client/linux/microdump_writer/microdump_writer.cc +@@ -571,7 +571,7 @@ class MicrodumpWriter { + + void* Alloc(unsigned bytes) { return dumper_->allocator()->Alloc(bytes); } + +- const struct ucontext* const ucontext_; ++ const ucontext_t* const ucontext_; + #if !defined(__ARM_EABI__) && !defined(__mips__) + const google_breakpad::fpstate_t* const float_state_; + #endif +diff --git a/src/client/linux/minidump_writer/minidump_writer.cc b/src/client/linux/minidump_writer/minidump_writer.cc +index 86009b9..f2aec73 100644 +--- a/src/client/linux/minidump_writer/minidump_writer.cc ++++ b/src/client/linux/minidump_writer/minidump_writer.cc +@@ -1248,7 +1248,7 @@ class MinidumpWriter { + const int fd_; // File descriptor where the minidum should be written. + const char* path_; // Path to the file where the minidum should be written. + +- const struct ucontext* const ucontext_; // also from the signal handler ++ const ucontext_t* const ucontext_; // also from the signal handler + #if !defined(__ARM_EABI__) && !defined(__mips__) + const google_breakpad::fpstate_t* const float_state_; // ditto + #endif +-- +2.9.5 + diff --git a/package/google-breakpad/0003-src-client-linux-handler-exception_handler.cc-rename.patch b/package/google-breakpad/0003-src-client-linux-handler-exception_handler.cc-rename.patch new file mode 100644 index 00000000..579e7f34 --- /dev/null +++ b/package/google-breakpad/0003-src-client-linux-handler-exception_handler.cc-rename.patch @@ -0,0 +1,59 @@ +From 2fa414c8655c421e7eb0bb1719928babb0ecf7c6 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Thu, 26 Dec 2019 22:21:33 +0100 +Subject: [PATCH] src/client/linux/handler/exception_handler.cc: rename tgkill + to BreakpadTgkill() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Since glibc 2.30, a tgkill() function was added in the C library, and +its definition obviously conflicts with the internal definition of +google-breakpad, causing build failures: + +src/client/linux/handler/exception_handler.cc:109:12: error: ‘int tgkill(pid_t, pid_t, int)’ was declared ‘extern’ and later ‘static’ [-fpermissive] + 109 | static int tgkill(pid_t tgid, pid_t tid, int sig) { + | ^~~~~~ +In file included from /usr/include/signal.h:374, + from ./src/client/linux/handler/exception_handler.h:33, + from src/client/linux/handler/exception_handler.cc:66: +/usr/include/bits/signal_ext.h:29:12: note: previous declaration of ‘int tgkill(__pid_t, __pid_t, int)’ + 29 | extern int tgkill (__pid_t __tgid, __pid_t __tid, int __signal); + | ^~~~~~ + +Upstream google-breakpad simply dropped the use of the internal +tgkill() in commit +https://chromium.googlesource.com/breakpad/breakpad/+/7e3c165000d44fa153a3270870ed500bc8bbb461. However, +this is not realistic for Buildroot, since we do support old systems +where the system C library will not necessarily provide tgkill(). + +Signed-off-by: Thomas Petazzoni +--- + src/client/linux/handler/exception_handler.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/client/linux/handler/exception_handler.cc b/src/client/linux/handler/exception_handler.cc +index b63f973b..b4c279b8 100644 +--- a/src/client/linux/handler/exception_handler.cc ++++ b/src/client/linux/handler/exception_handler.cc +@@ -106,7 +106,7 @@ + #endif + + // A wrapper for the tgkill syscall: send a signal to a specific thread. +-static int tgkill(pid_t tgid, pid_t tid, int sig) { ++static int BreakpadTgkill(pid_t tgid, pid_t tid, int sig) { + return syscall(__NR_tgkill, tgid, tid, sig); + return 0; + } +@@ -387,7 +387,7 @@ void ExceptionHandler::SignalHandler(int sig, siginfo_t* info, void* uc) { + // In order to retrigger it, we have to queue a new signal by calling + // kill() ourselves. The special case (si_pid == 0 && sig == SIGABRT) is + // due to the kernel sending a SIGABRT from a user request via SysRQ. +- if (tgkill(getpid(), syscall(__NR_gettid), sig) < 0) { ++ if (BreakpadTgkill(getpid(), syscall(__NR_gettid), sig) < 0) { + // If we failed to kill ourselves (e.g. because a sandbox disallows us + // to do so), we instead resort to terminating our process. This will + // result in an incorrect exit code. +-- +2.24.1 + diff --git a/package/google-breakpad/Config.in b/package/google-breakpad/Config.in new file mode 100644 index 00000000..07c49996 --- /dev/null +++ b/package/google-breakpad/Config.in @@ -0,0 +1,43 @@ +config BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS + bool + default y if BR2_i386 || BR2_x86_64 || BR2_arm || BR2_aarch64 || \ + BR2_mips || BR2_mipsel + +config BR2_PACKAGE_GOOGLE_BREAKPAD + bool "google-breakpad" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11 + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on (BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_UCLIBC) + depends on BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GOOGLE_BREAKPAD_ARCH_SUPPORTS + select BR2_PACKAGE_LINUX_SYSCALL_SUPPORT + help + Google-Breakpad is a library and tool suite that allows you + to distribute an application to users with compiler-provided + debugging information removed, record crashes in compact + "minidump" files, send them back to your server, and produce + C and C++ stack traces from these minidumps. Breakpad can + also write minidumps on request for programs that have not + crashed. + + You may want to set BR2_ENABLE_DEBUG, in order to get useful + results. + + This target package installs a static library named + libbreakpad_client.a which should be linked into programs + willing to use Google Breakpad. A host variant of this + package is also available, and provides the different tools + needed to extract the debugging symbols from target + binaries. + + https://chromium.googlesource.com/breakpad/breakpad + +comment "google-breakpad requires a glibc or uClibc toolchain w/ wchar, thread, C++, gcc >= 4.8" + depends on BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GOOGLE_BREAKPAD_ARCH_SUPPORTS + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_HAS_THREADS || \ + !(BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_UCLIBC) || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 diff --git a/package/google-breakpad/Config.in.host b/package/google-breakpad/Config.in.host new file mode 100644 index 00000000..28d30476 --- /dev/null +++ b/package/google-breakpad/Config.in.host @@ -0,0 +1,8 @@ +config BR2_PACKAGE_HOST_GOOGLE_BREAKPAD_ARCH_SUPPORTS + bool + default y if BR2_HOSTARCH = "x86_64" + default y if BR2_HOSTARCH = "x86" + default y if BR2_HOSTARCH = "arm" + default y if BR2_HOSTARCH = "aarch64" + default y if BR2_HOSTARCH = "mips" + default y if BR2_HOSTARCH = "mipsel" diff --git a/package/google-breakpad/gen-syms.sh b/package/google-breakpad/gen-syms.sh new file mode 100755 index 00000000..2bc0afaf --- /dev/null +++ b/package/google-breakpad/gen-syms.sh @@ -0,0 +1,34 @@ +#!/bin/sh +NAME="${0##*/}" +STAGING_DIR="${1}" +TARGET_DIR="${2}" +shift 2 + +SYMBOLS_DIR="${STAGING_DIR}/usr/share/google-breakpad-symbols" +rm -rf "${SYMBOLS_DIR}" +mkdir -p "${SYMBOLS_DIR}" + +error() { + fmt="${1}"; shift + printf "%s: ${fmt}" "${NAME}" "${@}" >&2 + exit 1 +} + +for FILE in ${@}; do + f="${TARGET_DIR}${FILE}" + if [ ! -e "${f}" ]; then + error "%s: No such file or directory\n" "${FILE}" + fi + if [ -d "${f}" ]; then + error "%s: Is a directory\n" "${FILE}" + fi + if dump_syms "${f}" > "${SYMBOLS_DIR}/tmp.sym" 2>/dev/null; then + hash=$(head -n1 "${SYMBOLS_DIR}/tmp.sym" | cut -d ' ' -f 4); + filename=$(basename "${FILE}"); + mkdir -p "${SYMBOLS_DIR}/${filename}/${hash}" + mv "${SYMBOLS_DIR}/tmp.sym" "${SYMBOLS_DIR}/${filename}/${hash}/${filename}.sym"; + else + error "Error dumping symbols for: '%s'\n" "${FILE}" + fi +done +rm -rf "${SYMBOLS_DIR}/tmp" diff --git a/package/google-breakpad/google-breakpad.hash b/package/google-breakpad/google-breakpad.hash new file mode 100644 index 00000000..09f9a0cf --- /dev/null +++ b/package/google-breakpad/google-breakpad.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 3504639ee5d7536e7f7939b80520dfcb98863e9b50673dd577d0ab2a07105acb google-breakpad-7515ab13768c7edc09f0f2ec2354dc6c928239a6-br1.tar.gz +sha256 f9752a0a4ac5215eaa3a4f0ec29cd52563c883de5d7870525cc0bc3a21cb8e15 LICENSE diff --git a/package/google-breakpad/google-breakpad.mk b/package/google-breakpad/google-breakpad.mk new file mode 100644 index 00000000..8ae5f99b --- /dev/null +++ b/package/google-breakpad/google-breakpad.mk @@ -0,0 +1,42 @@ +################################################################################ +# +# google-breakpad +# +################################################################################ + +GOOGLE_BREAKPAD_VERSION = 7515ab13768c7edc09f0f2ec2354dc6c928239a6 +GOOGLE_BREAKPAD_SITE = https://chromium.googlesource.com/breakpad/breakpad +GOOGLE_BREAKPAD_SITE_METHOD = git +GOOGLE_BREAKPAD_CONF_OPTS = --disable-processor --disable-tools +# Only a static library is installed +GOOGLE_BREAKPAD_INSTALL_TARGET = NO +GOOGLE_BREAKPAD_INSTALL_STAGING = YES +GOOGLE_BREAKPAD_LICENSE = BSD-3-Clause +GOOGLE_BREAKPAD_LICENSE_FILES = LICENSE +GOOGLE_BREAKPAD_DEPENDENCIES = host-google-breakpad linux-syscall-support + +HOST_GOOGLE_BREAKPAD_DEPENDENCIES = host-linux-syscall-support + +# Avoid using depot-tools to download this file. +define HOST_GOOGLE_BREAKPAD_LSS + $(INSTALL) -D -m 0644 \ + $(HOST_DIR)/include/linux_syscall_support.h \ + $(@D)/src/third_party/lss/linux_syscall_support.h +endef +HOST_GOOGLE_BREAKPAD_PRE_CONFIGURE_HOOKS += HOST_GOOGLE_BREAKPAD_LSS + +define GOOGLE_BREAKPAD_LSS + $(INSTALL) -D -m 0644 \ + $(STAGING_DIR)/usr/include/linux_syscall_support.h \ + $(@D)/src/third_party/lss/linux_syscall_support.h +endef +GOOGLE_BREAKPAD_PRE_CONFIGURE_HOOKS += GOOGLE_BREAKPAD_LSS + +define GOOGLE_BREAKPAD_EXTRACT_SYMBOLS + $(EXTRA_ENV) package/google-breakpad/gen-syms.sh $(STAGING_DIR) \ + $(TARGET_DIR) $(call qstrip,$(BR2_GOOGLE_BREAKPAD_INCLUDE_FILES)) +endef +GOOGLE_BREAKPAD_TARGET_FINALIZE_HOOKS += GOOGLE_BREAKPAD_EXTRACT_SYMBOLS + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/google-material-design-icons/Config.in b/package/google-material-design-icons/Config.in new file mode 100644 index 00000000..775f258f --- /dev/null +++ b/package/google-material-design-icons/Config.in @@ -0,0 +1,40 @@ +config BR2_PACKAGE_GOOGLE_MATERIAL_DESIGN_ICONS + bool "google-material-design-icons" + help + Material design icons are the official icon set from Google + that are designed under the material design guidelines. + + https://github.com/google/material-design-icons + +if BR2_PACKAGE_GOOGLE_MATERIAL_DESIGN_ICONS + +config BR2_PACKAGE_GOOGLE_MATERIAL_DESIGN_ICONS_TYPE_PNG + bool "Install PNG icons" + help + Use PNG icon types. + + The default. Traditional format; simplicity and compatibility. + +config BR2_PACKAGE_GOOGLE_MATERIAL_DESIGN_ICONS_TYPE_SVG + bool "Install SVG icons" + help + Use SVG icon types. + + Vector format that is limitlessly scalable. + +config BR2_PACKAGE_GOOGLE_MATERIAL_DESIGN_ICONS_FONT + bool "Install TrueType font" + help + Install the Material TrueType font (ttf) on the target system. + +config BR2_PACKAGE_GOOGLE_MATERIAL_DESIGN_ICONS_SPRITES_CSS + bool "Install CSS sprites" + help + Install CSS (PNG) spritesheets. + +config BR2_PACKAGE_GOOGLE_MATERIAL_DESIGN_ICONS_SPRITES_SVG + bool "Install SVG sprites" + help + Install SVG spritesheets. + +endif diff --git a/package/google-material-design-icons/google-material-design-icons.hash b/package/google-material-design-icons/google-material-design-icons.hash new file mode 100644 index 00000000..535eca81 --- /dev/null +++ b/package/google-material-design-icons/google-material-design-icons.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 769547061a51f81623bf5174767c08fc587fd6946339592fbd6cd0dd45f56b4c 2.2.3.tar.gz +sha256 8ae9438818c26e4873b91d8c6ad620526c011e27e125677f13031eda903f007c LICENSE diff --git a/package/google-material-design-icons/google-material-design-icons.mk b/package/google-material-design-icons/google-material-design-icons.mk new file mode 100644 index 00000000..d410a45e --- /dev/null +++ b/package/google-material-design-icons/google-material-design-icons.mk @@ -0,0 +1,61 @@ +################################################################################ +# +# google-material-design-icons +# +################################################################################ + +GOOGLE_MATERIAL_DESIGN_ICONS_VERSION = 2.2.3 +GOOGLE_MATERIAL_DESIGN_ICONS_SOURCE = \ + $(GOOGLE_MATERIAL_DESIGN_ICONS_VERSION).tar.gz +GOOGLE_MATERIAL_DESIGN_ICONS_SITE = \ + https://github.com/google/material-design-icons/archive +GOOGLE_MATERIAL_DESIGN_ICONS_LICENSE = CC-BY-4.0 +GOOGLE_MATERIAL_DESIGN_ICONS_LICENSE_FILES = LICENSE + +GOOGLE_MATERIAL_DESIGN_ICONS_LIST = \ + action alert av communication content device editor file \ + hardware image maps navigation notification places social toggle + +ifneq ($(BR2_PACKAGE_GOOGLE_MATERIAL_DESIGN_ICONS_TYPE_PNG)$(BR2_PACKAGE_GOOGLE_MATERIAL_DESIGN_ICONS_TYPE_SVG),) +define GOOGLE_MATERIAL_DESIGN_ICONS_INSTALL_ICONS_IMAGES + $(foreach family,$(GOOGLE_MATERIAL_DESIGN_ICONS_LIST),\ + $(INSTALL) -d $(TARGET_DIR)/usr/share/google-material/$(family) \ + || exit 1; \ + $(if $(BR2_PACKAGE_GOOGLE_MATERIAL_DESIGN_ICONS_TYPE_PNG), \ + $(INSTALL) -D -m 0644 $(@D)/$(family)/1x_web/*.png \ + $(TARGET_DIR)/usr/share/google-material/$(family) || exit 1;) \ + $(if $(BR2_PACKAGE_GOOGLE_MATERIAL_DESIGN_ICONS_TYPE_SVG), \ + $(INSTALL) -D -m 0644 $(@D)/$(family)/svg/production/*.svg \ + $(TARGET_DIR)/usr/share/google-material/$(family) || exit 1;) \ + ) +endef +endif + +ifeq ($(BR2_PACKAGE_GOOGLE_MATERIAL_DESIGN_ICONS_FONT),y) +define GOOGLE_MATERIAL_DESIGN_ICONS_INSTALL_ICONS_FONT + $(INSTALL) -D -m 0644 $(@D)/iconfont/MaterialIcons-Regular.ttf \ + $(TARGET_DIR)/usr/share/fonts/google-material/MaterialIcons-Regular.ttf \ + || exit 1 +endef +endif + +define GOOGLE_MATERIAL_DESIGN_ICONS_INSTALL_ICONS_SPRITES + $(if $(BR2_PACKAGE_GOOGLE_MATERIAL_DESIGN_ICONS_SPRITES_CSS), \ + $(INSTALL) -d $(TARGET_DIR)/usr/share/google-material/css-sprite \ + || exit 1; \ + $(INSTALL) -D -m 0644 $(@D)/sprites/css-sprite/* \ + $(TARGET_DIR)/usr/share/google-material/css-sprite || exit 1) + $(if $(BR2_PACKAGE_GOOGLE_MATERIAL_DESIGN_ICONS_SPRITES_SVG), \ + $(INSTALL) -d $(TARGET_DIR)/usr/share/google-material/svg-sprite \ + || exit 1; \ + $(INSTALL) -D -m 0644 $(@D)/sprites/svg-sprite/* \ + $(TARGET_DIR)/usr/share/google-material/svg-sprite || exit 1) +endef + +define GOOGLE_MATERIAL_DESIGN_ICONS_INSTALL_TARGET_CMDS + $(GOOGLE_MATERIAL_DESIGN_ICONS_INSTALL_ICONS_FONT) + $(GOOGLE_MATERIAL_DESIGN_ICONS_INSTALL_ICONS_IMAGES) + $(GOOGLE_MATERIAL_DESIGN_ICONS_INSTALL_ICONS_SPRITES) +endef + +$(eval $(generic-package)) diff --git a/package/googlefontdirectory/Config.in b/package/googlefontdirectory/Config.in new file mode 100644 index 00000000..cf2814d8 --- /dev/null +++ b/package/googlefontdirectory/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_GOOGLEFONTDIRECTORY + bool "Google font directory" + help + Font files available from Google Fonts + + https://github.com/google/fonts + +if BR2_PACKAGE_GOOGLEFONTDIRECTORY + +config BR2_PACKAGE_GOOGLEFONTDIRECTORY_FONTS + string "List of fonts to install" + default "ufl/ubuntu" + help + Specify a space-separated list of fonts to install. They + correspond to the path of the font directory within Google + Font directory code base. For example: ufl/ubuntu, + apache/kranky or ofl/gleego. + +endif diff --git a/package/googlefontdirectory/googlefontdirectory.hash b/package/googlefontdirectory/googlefontdirectory.hash new file mode 100644 index 00000000..2525b6ff --- /dev/null +++ b/package/googlefontdirectory/googlefontdirectory.hash @@ -0,0 +1,994 @@ +# Locally calculated +sha256 ec2ddbeee673cce1b0796e3b20fbff5fd836ce9ba6d88deed8b59154fa255f06 googlefontdirectory-94dff3eaa9301b6640cccc63c56d6ff33d82882c.tar.gz +# Locally calculated with +# for i in $(find apache/ ofl/ ufl/ -name 'LICENSE.txt' -o -name 'OFL.txt' -o -name 'LICENCE.txt') ; do printf "sha256 %s\n" "$(sha256sum $i)" ; done +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/robotocondensed/LICENSE.txt +sha256 3ddf9be5c28fe27dad143a5dc76eea25222ad1dd68934a047064e56ed2fa40c5 apache/opensanscondensed/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/walterturncoat/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/fontdinerswanky/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/aclonica/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/sunshiney/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/ultra/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/unkempt/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/slackey/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/satisfy/LICENSE.txt +sha256 3ddf9be5c28fe27dad143a5dc76eea25222ad1dd68934a047064e56ed2fa40c5 apache/opensans/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/montez/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/kranky/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/arimo/LICENSE.txt +sha256 3ddf9be5c28fe27dad143a5dc76eea25222ad1dd68934a047064e56ed2fa40c5 apache/opensanshebrew/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/tinos/LICENSE.txt +sha256 3ddf9be5c28fe27dad143a5dc76eea25222ad1dd68934a047064e56ed2fa40c5 apache/opensanshebrewcondensed/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/justanotherhand/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/robotoslab/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/homemadeapple/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/craftygirls/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/crushed/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/robotomono/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/maidenorange/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/roboto/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/rochester/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/rocksalt/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/creepstercaps/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/nokora/LICENSE.txt +sha256 3ddf9be5c28fe27dad143a5dc76eea25222ad1dd68934a047064e56ed2fa40c5 apache/mountainsofchristmas/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/cousine/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/syncopate/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/specialelite/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/luckiestguy/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/rancho/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/smokum/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/redressed/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/irishgrover/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/comingsoon/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/cherrycreamsoda/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/schoolbell/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/yellowtail/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/calligraffitti/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/permanentmarker/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache/chewy/LICENSE.txt +sha256 0fc8e6675568c02aac6b41dd3cccaf2264fc5969601effe68e09b26635879b2c ofl/ranchers/OFL.txt +sha256 ff72e4d89860e64ee38ccf8a5a7e9dc085d5e36115b096a6c7f8bc988e9bec61 ofl/kumarone/OFL.txt +sha256 643c63caf03855ae29be68035d8888e95eadc767a1d92f163d686da1b0a1cd3c ofl/cantarell/OFL.txt +sha256 1d242ab6fbb2dfbba2e7119b00a6328bc59cb2faf7299b844e9b92a2f12c0d8b ofl/adventpro/OFL.txt +sha256 01af2625d6247ecd2430d1d1603c579f85989d43b2d9129e08e0ac0df8909918 ofl/tienne/OFL.txt +sha256 5fb0694694dc307d1eb0121689395e634b6329ff545acc53f55ad66a716b3cf1 ofl/baloobhaina/OFL.txt +sha256 f3bc8767749fc133d9b35e84ca024b82f1ac4d1b38deca0adcf8300892303022 ofl/faustina/OFL.txt +sha256 69c34ca1873308c667ddde663cbf59c0d1cf14cbb945ad010f71d21264249e24 ofl/aubrey/OFL.txt +sha256 4febcc8d6e539db3e0c652da87bc8704f6d48e71e07f8ddb0974094a3de8da81 ofl/flavors/OFL.txt +sha256 d24ff874133ecd133e55d7c4070d2edab14d3933477c2bccb3a0d8d1cc9c33bf ofl/muktavaani/OFL.txt +sha256 ab5499b975c2dc82f533c6f13c5fca589df4d57c7c400db5f6ca8565ad9c2fd3 ofl/butchermancaps/OFL.txt +sha256 6a28d4d5d8b4d1ea89ace5a047ac6e0de182acdb8bfa22897bf7702102094f69 ofl/shadowsintolighttwo/OFL.txt +sha256 7a1d085067cd589026b256dd85af1eaa1087fa0f3d468192724c5138cc14d894 ofl/copse/OFL.txt +sha256 fd17f80dc48ff767d91d0dd9f821eebfd8b73ee82f55537a9052b6b0107622c8 ofl/voces/OFL.txt +sha256 186d750eb496a4c17a76385f82be6aea2ac1cf2de074a811d63786cf374ea73f ofl/barlowsemicondensed/OFL.txt +sha256 4aa1da66597f4c5cfde67790992ee55926ef6aaa87b9a10d529ab35e8b91070c ofl/asapcondensed/OFL.txt +sha256 301f77908df2b00141b4dcea50cc1a586c3afcee78843bd811088e8263623f9d ofl/amaticsc/OFL.txt +sha256 6b6c6721a30480a323cf33acf6a7703dfce46b846827a65f8ee96230060e3c3e ofl/homenaje/OFL.txt +sha256 393d494f9ebb5db6a3552ffa03a4c6f3746c22808b40d011b391681da55ca3f6 ofl/kellyslab/OFL.txt +sha256 ca19ac21c7656f493189093eca52b4239fcc5eacc15ab2e3d67cfbfc0e6e443b ofl/sirinstencil/OFL.txt +sha256 980c2b058d331f3c5ca4a1223e549511b71630e4f4a5533879d436d583cb5665 ofl/arbutus/OFL.txt +sha256 2758cf7a872827f39661cf8cc24188113c030447aefb5ca7145993650076ca8c ofl/ptsans/OFL.txt +sha256 7527e73a61f742a0dd050ab2fc7333de71ac7886023c100bca66a0a93b37498e ofl/headlandone/OFL.txt +sha256 39b26527bf9ed27b4c85b86341eceea0579f3550bcf448cf06345eaadf947ec9 ofl/rugeboogie/OFL.txt +sha256 2ac164969308ac200eefc516151934701044f0db5695ae2acc15df2a8d22e5cb ofl/anaheim/OFL.txt +sha256 88d3abd47414e7912d0d2eb44ca89e0b1bd7c43cc2ebe58a8a75281ad75a0f60 ofl/stardosstencil/OFL.txt +sha256 01003114b77326df223f291c48cdf12e95f6a5937437f164347919f2bbde12d4 ofl/josefinslab/OFL.txt +sha256 83aa5adca2418f091b732a19cc7c30dcb5c00c217051a58f34f5eecb19be0cd3 ofl/average/OFL.txt +sha256 585c6d2da8bcd8ffa651e0016f2e992a6891b625143a46a1dacf00699a817d9a ofl/monoton/OFL.txt +sha256 96e65d9c227a972e38035b849bba1e8b7879eecbb52f278be1e71dd481187f02 ofl/domine/OFL.txt +sha256 d1bf0acea511ad1f4de53e942cffb8ab0e67c03c6203d6f390d71105d52c33f0 ofl/missfajardose/OFL.txt +sha256 131d19126a0e7ddd25540fd6bee219cebbc8aee7e8374882998ee6c2f4ff6cf4 ofl/mergeone/OFL.txt +sha256 042a570b306ab893c6168be7e6e79bbceae46097141357ad0af7ef8bb179ed7b ofl/goblinone/OFL.txt +sha256 91c25c350d3cac39da2736d74f7ba37ef648f5237a4e330a240615bc8d8c4360 ofl/ibmplexserif/OFL.txt +sha256 bc80ea18223ea0db2ed73ab5bfd0cd601906a2b7a163183c6c4ea333be309ce4 ofl/baumans/OFL.txt +sha256 5f5dbf452c1657370d9280b50d647212a53c80acae6d78e0b5e8c2b26dc62b09 ofl/puritan/OFL.txt +sha256 90bd333a5cf0ed09264fc3e559d44979373f6c3d983b0f65cc46e952b4eb61f0 ofl/contrailone/OFL.txt +sha256 1d08c63944e639bbfe8a1b81e3c6a63836806c126b3573b9cda0db83fd27ffe9 ofl/taviraj/OFL.txt +sha256 62fab0ba1d5593782cbf048da193f4b1edc16b817577a99d707827513ad80e9a ofl/overlock/OFL.txt +sha256 75798d56e448ba4d2aec3ef5f3c2d805d9c6fe2ba688cd3d7162b2dd31e9cf48 ofl/textmeone/OFL.txt +sha256 eef925ad6afcbba33f7989f5ad826fd68d50cc1ab4d679c52927c8afd40bddf0 ofl/sedansc/OFL.txt +sha256 466aaa3bbd245e4c91c4e82c0828efe9fcfd913f5b020d75f0918516c2540fa8 ofl/spicyrice/OFL.txt +sha256 88ac81fcd30e64f6e6b91b61b159c9b700bb3dd59012b72ec61629abcfc7fba1 ofl/medulaone/OFL.txt +sha256 1d567f7c5f579d9031ae5edfb0108b4681bdd2e036249b228cc2843d3f052a0f ofl/redactedscript/OFL.txt +sha256 ce78cc8de3f6edd2738e8c02f2079db7086c9a74314baa5854675f83c33954ff ofl/kenia/OFL.txt +sha256 76af3e9e5d8768b17647813a443fcf5df3eb3ced017ee285796625e714d5ea2c ofl/ruslandisplay/OFL.txt +sha256 6e54fc004ebeb61322ecab1d86334ebf69e7051632d48eca489beee505d70762 ofl/hermeneusone/OFL.txt +sha256 8586a7e75681c7297af4cc0641eb2b29e882c5187fe189a1160eceb4e95d4163 ofl/fenix/OFL.txt +sha256 d8eb8611f8c98d20cbf18a28425652d6022dc2a5cca15026b920f1f2bc92a612 ofl/deliusunicase/OFL.txt +sha256 197c3f48cff4df3d768230e0bbdbc4305d8b8b9041ea6fb5e00872af66adc5ae ofl/novamono/OFL.txt +sha256 08fba9df5c9890f3ab00ee63f63e005ad93a23746f7484f5fe9501a1ad32730e ofl/allerta/OFL.txt +sha256 af88d31020bb48a1f78f4384249814d04a44d22feeede2ff4ae79fbb4fcf74da ofl/rammettoone/OFL.txt +sha256 397e83b05703a4240be51e2c3a2be1d0d7693d7a2d8b1ff367c26a2b9afc013e ofl/singleday/OFL.txt +sha256 0e441ae9f18ad0c294cc5b6ae3974c2db1614cab220598578b1b58c4cc334485 ofl/cedarvillecursive/OFL.txt +sha256 d416bc9437e1d7d8aba0613395ee49c95ce72d680672e910c6205b545cfcbad8 ofl/cherryswash/OFL.txt +sha256 513346ac60af1dde9d4a7bcfad3f39909d5697373a8aa1a6ee4376e6d22d3cdf ofl/niramit/OFL.txt +sha256 0b1bada9befa95a40d55830fe83fc7f8064e245fea33bdf0f96f57848f3866fa ofl/coda/OFL.txt +sha256 2a7b0a41ef401e4e0e955280b07c0a2698932d56aad3181089bdbbaad5760491 ofl/habibi/OFL.txt +sha256 2d62278530348951887211d79d1dba04acebd6ed3b1c413f6154702efea3ea62 ofl/iceberg/OFL.txt +sha256 a20db45220b6c4dc9776f24c77dc9ec7a98977d8b3c65b03aabe66b2d08e0791 ofl/cabincondensed/OFL.txt +sha256 fc1e501d419d84a8f1a800adae092045002d7141241f498237611dbb8ea763d7 ofl/stintultracondensed/OFL.txt +sha256 9a51726e5f247cb1f07bb8f49c163bc3e9ddee5f367bb5a1871d09b854ed1b7c ofl/basic/OFL.txt +sha256 ce0023bc03e1428feb5abfaa939b601d2d827ee5a6c84a2657993a7b16c5290a ofl/diplomatasc/OFL.txt +sha256 e30f893523e50ebbe07acd783ae29c7d604e6208cae7646d993e8528ce13e35a ofl/federo/OFL.txt +sha256 9d96f445b6e9c701428811d0177f894874f8d6f07ecc30d568c506542368f3ff ofl/sharetechmono/OFL.txt +sha256 46239ba6485d28553fd944da4ad32a00d9c403aa1c3e111676b0b96fe458d1d4 ofl/averiasanslibre/OFL.txt +sha256 5951473ab31533bfe1452bbcece47f237a5546c7e7d45ff1aec0289619623294 ofl/fugazone/OFL.txt +sha256 aa5d677391db4e54ad324b6888792e533c5d800de7ab713302a2fc8bff2f4f6e ofl/miltonian/OFL.txt +sha256 e0cde1a4993ed689d463d5e2401f4a60c54cc48a14253ab0f8012d722c417038 ofl/mavenpro/OFL.txt +sha256 c1eed37b6d213df4edf8f92ec7d1e972f751abd68ecd649b4f0b8e5d8e8561f6 ofl/yrsa/OFL.txt +sha256 5bbeae56b9db61a9bf85b64d5ed9a74cfcf9ee3e9b005bc2906859ddecd5eaa1 ofl/esteban/OFL.txt +sha256 7b826efb1b74a50b1c1aef0a1ba4530925b993ceadc3016d1d787c68a61649dd ofl/tenorsans/OFL.txt +sha256 28c6d2887c3dfa42488c5418c6c16ead580d33ff0afe60c05159689201f9ec63 ofl/jollylodger/OFL.txt +sha256 ce0023bc03e1428feb5abfaa939b601d2d827ee5a6c84a2657993a7b16c5290a ofl/diplomata/OFL.txt +sha256 8f2e5a9b52cf355023104413827e17dd7126c5a3656492d45eaa1ceb270aa4f1 ofl/yantramanav/OFL.txt +sha256 fe079cdbbad0f6520eb0a8235bce65b21596dd0c4c5a2694b3325cc87313b618 ofl/shortstack/OFL.txt +sha256 018d17b5e04c0a217a21979fa6b6d77bd5a143a5f06ea2ea102e427abd1ebfa2 ofl/tradewinds/OFL.txt +sha256 31c59bcdd538c113ef5c048f56827439facb12b7e5cfd158b04c83727edc453b ofl/salsa/OFL.txt +sha256 eeacf16032901d0ed0456876ec77b8f0fda6b3fecec7d972f8543eb602e6c30f ofl/nanumpenscript/OFL.txt +sha256 ddf311c28ddf5a5ad9747649837346b67bed9d356789c3072bb27dbce49e514d ofl/ptserifcaption/OFL.txt +sha256 c867d1a613bebc4932cf28c060fefb3bcfba3be56ed498b873c79f4eb786af1d ofl/librebaskerville/OFL.txt +sha256 694282197de3d750a43689dc64a8116cd19578cd516e7b2490c7b5362c064dbe ofl/kameron/OFL.txt +sha256 cb30d3086a8b3ce0b9e3690bf48d6620402b61160bc658076f95180ccd9e9dae ofl/sourcecodepro/OFL.txt +sha256 a40c3a6d0c968d3a10b17a2614606de6f20178deccc2447305f31fb106a57fb0 ofl/fresca/OFL.txt +sha256 5d3457831b42632d958fe1a14a09706d8acb006486a5ca5b2b419cd61cb22e32 ofl/chelaone/OFL.txt +sha256 6b53fb03a50914cc382f4d025ee595c17c43f24ae870f840bc51969d3e316c7e ofl/limelight/OFL.txt +sha256 574430e571a6928624f4bdf044420f7547a26309b7ebf6962296d33294e0a1e0 ofl/combo/OFL.txt +sha256 fd20b82eb12d16ec31a58fc44f7e6c533b14b425b569d83f616a1f7a9a401e75 ofl/gochihand/OFL.txt +sha256 0e74984817cdd51dbfbd8309022aa75f733e80dff0cb1d26ad2157e90446ba97 ofl/enriqueta/OFL.txt +sha256 ddf311c28ddf5a5ad9747649837346b67bed9d356789c3072bb27dbce49e514d ofl/ptserif/OFL.txt +sha256 4e69611ba5017f1fde74c31d342f5c85604814b1b45387b9ab46205996dec38e ofl/astloch/OFL.txt +sha256 013e33b6b2919fd0ffbdde6080a1c0f4521689fdce0f4876a59cf49ff8ae31c0 ofl/geostarfill/OFL.txt +sha256 14b3fbd06078a869cf2ba96e6dacb852d373703c86ca7ad54a4cdd6e20fbab19 ofl/knewave/OFL.txt +sha256 a8103c045a88bf9b28dcd7eb60a6662008f49afc0f3721bc46aaf761fc0409e7 ofl/englebert/OFL.txt +sha256 bd22e766af8f8e58eb520cb4fa73538826d04f7371b45e82295d22d1e32a4e58 ofl/gidugu/OFL.txt +sha256 0e441ae9f18ad0c294cc5b6ae3974c2db1614cab220598578b1b58c4cc334485 ofl/justmeagaindownhere/OFL.txt +sha256 5fba78215eb4e42aed6cb0b5c5df52e0f71246281a866cd4493dfcfcbcab9518 ofl/playball/OFL.txt +sha256 e75230ee246a04912366cd8d759d081200d80fb0756766c96dd52f73e8b40bed ofl/romanesco/OFL.txt +sha256 39de3de5f1873f89bca4af37823ab22e28e88d0d8f7fe2f07e82e9e6e9bf7b70 ofl/gamjaflower/OFL.txt +sha256 244ca4ef7b106d8c660e9a00cecf5d581b6a222f447d7d59a8f61711b2ad3400 ofl/uncialantiqua/OFL.txt +sha256 36e2f1debc9778bac79fac1a0cb5a5ef51c102f00b58ef7d8a05324144b68166 ofl/didactgothic/OFL.txt +sha256 0e441ae9f18ad0c294cc5b6ae3974c2db1614cab220598578b1b58c4cc334485 ofl/giveyouglory/OFL.txt +sha256 638774cdf8233b5ddaf9ebee1821e9de1d5d59c335d8ee3ba0b47fb17833b502 ofl/glegoo/OFL.txt +sha256 842b4f4605b32518a1269c4d030d719ea2c4c317d699fc4441d0219658e18893 ofl/seoulnamsan/OFL.txt +sha256 a10a07aaa150c147fa3cb22e845013f38e6c2b45fe5ba32a74ed1be9d4c417ae ofl/odormeanchey/OFL.txt +sha256 a74380bba78a364ec70b3a5fb6a1161b83cb05cc3e75a0910afbd1b5aff4f9c8 ofl/jaldi/OFL.txt +sha256 9b8405bf5f503f92401fc990f372b34d469670ab60041d5298d1015d3d0b45f8 ofl/thabit/OFL.txt +sha256 7c05152b2380228795cb474819744653fb03ddbfe5990b912ec7d9a41387230d ofl/asap/OFL.txt +sha256 ca9fe3a0e10bbb082f83ecdc07f5f04845c4bd689c46456da3e6bae23e11aae2 ofl/inder/OFL.txt +sha256 5b158abb3406e69b7408b562b7199f6ff55a41ea56e260b87176d693b0095e47 ofl/piedra/OFL.txt +sha256 b7eae5e3c3447f70caa14e0c43f5e0d953f54ee59df406f6362863bcee1a0a95 ofl/almendradisplay/OFL.txt +sha256 87b7d831a81fe8b37e7e6c672937493f710ff81883eee3adec7b5423297efd16 ofl/sharetech/OFL.txt +sha256 4ec46c3e4469afa19f0156bac6917472974f9c85c189f9220cf8735d3e810401 ofl/kristi/OFL.txt +sha256 93f60741563b4f51f2fcdb207fde72b2b23292a47022c729aecd998b360d8038 ofl/bilbo/OFL.txt +sha256 4b255eb44f613a8e426e195f0d0b7e10fcba1af7eb6047d9a7f4f3c449940e19 ofl/hindcolombo/OFL.txt +sha256 afc1b710d644c1262e1765d2401abcf93a545a4cb051955e2243fbabb8164e25 ofl/carroisgothicsc/OFL.txt +sha256 930fed5b06a415736dc3b4e5f4f01585523b672717564bf677f93966bcd57636 ofl/lustria/OFL.txt +sha256 9a536e5a3b55c2605b0a553eed383cd3efa42ba48dc45cc6f0635b3c53ee791e ofl/warnes/OFL.txt +sha256 879ec56fcc9a961937fd24d542b3b7b3f2b8cb3236b7351e62d16719e25de14c ofl/griffy/OFL.txt +sha256 29cca754098468057880970c604e55c4e2bcb8479742e4130c94f2ddc0363f9c ofl/sixcaps/OFL.txt +sha256 67261c7ceb3e627da5c94d6617dac6da29bf36b910bee304a7680ad62e2c8b46 ofl/changaone/OFL.txt +sha256 327bac41d89cf9f32e0efe353228018e1661cff458a5d4905714958514df7bd5 ofl/lalezar/OFL.txt +sha256 525411e604e7a1d85a4cd42641869f94388f04a6ed77829d6c4edd7fd740ceab ofl/ramaraja/OFL.txt +sha256 3d08baba63f1f2427fd96dee8da30b1ef6c1421b3be0e1f07cc2a78abb27c91d ofl/seaweedscript/OFL.txt +sha256 4c0a1150a363b42bd8681ff4a00315ac49510a944c4c9978237ff8b90a8920a5 ofl/grandhotel/OFL.txt +sha256 bc4c7eb365ea342b1a027fb8417fb0152f5d482a2e31c012fbfa29b668827b04 ofl/cutivemono/OFL.txt +sha256 1818771d183d203703c4b134f028527b535810e2a0666c8fe2785354ddbef686 ofl/battambang/OFL.txt +sha256 b7eae5e3c3447f70caa14e0c43f5e0d953f54ee59df406f6362863bcee1a0a95 ofl/almendra/OFL.txt +sha256 9e0d3db586ba0abf5ca398683809dacdf4c81b2960f592bd085fbf206a67ddb0 ofl/sansitaone/OFL.txt +sha256 fb1dbf3725bbdd389b2c569e0eed5091d8d10eed2833ec7efacfc3542e408615 ofl/scheherazade/OFL.txt +sha256 9134ca6996bd33ea2022e109f13f20e29dee1dcd8b2e8878aad576d2ca334e9f ofl/cormorant/OFL.txt +sha256 156ea6985861158c7dea63ecaac4c78ab0ed737d168ddffc3e34c687985a033b ofl/sansation/OFL.txt +sha256 a9b3e7e1cf5735dc49d802b88b1858a2a50307ba2a877ddf3f0b27d8b1d0abc5 ofl/blackandwhitepicture/OFL.txt +sha256 5fe7f3c9410c29534ddd9dfaf64d3994ed4236096d0d543ae69eacc3b25632b1 ofl/bitter/OFL.txt +sha256 f6f60d5d4cf4f4b1fc4e41353c897a2f5a16e6396c0cd8fa8bdfd2f4586a9a68 ofl/alegreya/OFL.txt +sha256 e88691a5e0a8a3f788f31db959701ec90a1d5e7505f1cc53c5663180a7d23c81 ofl/lohitbengali/OFL.txt +sha256 ac55580be2df22a06d29a47501e2ae11e1d399620f5a779e17a66f016ba6d5ff ofl/portersansblock/OFL.txt +sha256 27d9af34210253e7ca1251fbace86c6f65b40031d6ce1a75493a1b2093631298 ofl/vt323/OFL.txt +sha256 9452ef55386e77bd284ca466587d72802337621d7f10aa700e449753883b3397 ofl/trocchi/OFL.txt +sha256 a9b3e7e1cf5735dc49d802b88b1858a2a50307ba2a877ddf3f0b27d8b1d0abc5 ofl/stylish/OFL.txt +sha256 4b255eb44f613a8e426e195f0d0b7e10fcba1af7eb6047d9a7f4f3c449940e19 ofl/hindkochi/OFL.txt +sha256 3173acd82f8c6159b5b1037b539fcbd4edff68e65c2ea8b9412b5a5ca97b08ff ofl/archivoblack/OFL.txt +sha256 c832a4230a713d080aa2f2544d9a298ed911f689b2c48f7f276a0196b16d2b8a ofl/cookie/OFL.txt +sha256 ae28423a5e63cb65e651ccf62c9091b322fff1d2d4e87ad9f98b1096c2e7abb5 ofl/metrophobic/OFL.txt +sha256 4b255eb44f613a8e426e195f0d0b7e10fcba1af7eb6047d9a7f4f3c449940e19 ofl/hindsiliguri/OFL.txt +sha256 8c22fb3866eaebd77a2cb8e8ecbb095381ff32300db57758326fef35a26132f5 ofl/ranga/OFL.txt +sha256 d2875ded3e44e9ae53ea2b35e825dafffa19e82c5d14addb9f1150fcd7a3463d ofl/mina/OFL.txt +sha256 8242e7737bce317f7a7f2b887ac87f5bb21305ab96bee92aadc3febac16c35bf ofl/voltaire/OFL.txt +sha256 fca01a37b10879d7685c7d03fc5a04086b15cdb2cb4f870cb687aa5a9a0a1361 ofl/jimnightshade/OFL.txt +sha256 2492bb8645caaf622bdc3e880cdc9b069921e7341346d7b193666c866a1935d0 ofl/condiment/OFL.txt +sha256 e6ac721b16f309c89fb443680afda427ea34968bad190a80edf281d01d65fa99 ofl/andadasc/OFL.txt +sha256 1e5d6660366ddcfca4f2fc10e2acfba9fa4d97d40aec80d7dbfd41d730a420ae ofl/cinzeldecorative/OFL.txt +sha256 0e441ae9f18ad0c294cc5b6ae3974c2db1614cab220598578b1b58c4cc334485 ofl/coveredbyyourgrace/OFL.txt +sha256 4b255eb44f613a8e426e195f0d0b7e10fcba1af7eb6047d9a7f4f3c449940e19 ofl/hindvadodara/OFL.txt +sha256 5c36e7ec460b285185ea23847aa1f508708d9ce15d5c055279defd022972f836 ofl/rakkas/OFL.txt +sha256 0b7eae990329ac175a2e1c329060b3a4d6876e4e0cd7e5235511578352f7b191 ofl/biorhyme/OFL.txt +sha256 c54957d55e7c9e66c28e474cd39de75dc044e8f69056788cae44eb78841ceef1 ofl/montserratsubrayada/OFL.txt +sha256 fccf4916b5f84ef5f88d93fec464421aaf4121d11d4be8d74ee2d032f7661d6c ofl/padauk/OFL.txt +sha256 9ca8b9e5db7184105da255bb110023cf1cce6caa56186341bb7b09ba97b20ba5 ofl/prociono/OFL.txt +sha256 0c3f4763f49c2cd37757a2856ad470aec6a416981ac6d6e3f900c1128be39de7 ofl/elsie/OFL.txt +sha256 0d5fa0cce86012de872273700eef4fd162459e7c24a6a314911380627391071b ofl/bigshotone/OFL.txt +sha256 ca64dee162bf239c7b92d854d388bcd30552edc3ae1ef5e31714acda34c988db ofl/jomhuria/OFL.txt +sha256 bd77eae571de83ba3884c74c7983e8ac5cdf858badc36906179346dcd7e82454 ofl/gentiumbookbasic/OFL.txt +sha256 2ce1c4fcf4ab9c8474d0824434497d4afa4425db4de5629103698b170ac4ee74 ofl/bungeehairline/OFL.txt +sha256 9c56b4e2e4e922cc37e19e1a9e2e1128beaa17a812e1b67c8ac371b0fb57ae03 ofl/kopubbatang/OFL.txt +sha256 f62ef357d3a1c3d27edd35a6e1ba350e8a8d13499797964eeadefbf0b3b15d1f ofl/tillana/OFL.txt +sha256 486c4d5b9baf0d0ba5546ef3c43fcfe22c062299ab6948045a43efffe4b0f74b ofl/italiana/OFL.txt +sha256 4539710406c656519f8ddc789056a7cd6f4fe66b44cc2f52ebca6e251bb26e13 ofl/imprima/OFL.txt +sha256 7f55affd2bce8ed9be13297ba8df1a4a7e9835c2a006126dc2a1eb4ce75a7943 ofl/muli/OFL.txt +sha256 867b506cb023eae20c1accde77b2e0abf7d8a9e2620da8dbebac9f7b1117ca0b ofl/cantoraone/OFL.txt +sha256 aa72b0185d828cb2fafa62a154e84bd3e20c88ada30326089bb20542b6363aaa ofl/manuale/OFL.txt +sha256 4664e83780a263c53dbab95d3590a5a9db914aeb9a3c78f7e7ad451f9151c998 ofl/spacemono/OFL.txt +sha256 fc59ca3cd3bcb47bd4df597519111ec130c25cabcc57a8808dd2d243cdcec6ae ofl/oldenburg/OFL.txt +sha256 43c372f43d145c22e654781860506a75cb85b086dc76028a62a28a446506d253 ofl/italianno/OFL.txt +sha256 a7fe1f3d23034092b015aaeb53d2ecbc9e592be96b10bdfbcf8700ec6a6ffc97 ofl/fascinateinline/OFL.txt +sha256 d13a278247ce39695f5ea6b721103faa668083022c5280b78c6392263e473929 ofl/bonbon/OFL.txt +sha256 f0be7437bbb8b91ad4a4f7a5f3d0020368e494a803d892df03e8886d51f2db3a ofl/candal/OFL.txt +sha256 a68d8ec6bea7f277053ae93bf563d4b97c233f09f8e79f86ffe5db66f31fdddf ofl/prozalibre/OFL.txt +sha256 b00c646b7d04a6da1665a148815b8c589c1e05ed7e1febf7ccbd91758747cb03 ofl/quattrocentosans/OFL.txt +sha256 a3deaae17ab9a15dc3c2778126aa6f80d41d567741853f84b16a9e1318ed799a ofl/koulen/OFL.txt +sha256 50f7b09af5ff677f611a96cdf5eb916307c59b29f2e8144942718cb432a9bf6f ofl/margarine/OFL.txt +sha256 72a22b6dd29b6b0cdcc98de30701b46532c9f7314ee095df3063d10775dd70c3 ofl/trochut/OFL.txt +sha256 325e890b8b26fe0a683c3ba24c506d902bdd7034d9c47bd7fa2bb72b5433b9c9 ofl/shrikhand/OFL.txt +sha256 62fab0ba1d5593782cbf048da193f4b1edc16b817577a99d707827513ad80e9a ofl/overlocksc/OFL.txt +sha256 d941aa56e280b4f204272c4b1add01a8ebc7af3e8e69ba8ba9118aa2a5306dde ofl/berkshireswash/OFL.txt +sha256 9134ca6996bd33ea2022e109f13f20e29dee1dcd8b2e8878aad576d2ca334e9f ofl/cormorantsc/OFL.txt +sha256 36c285c5472c625901d4a13da7e31c5ea6126678d31d56cf95572c49f27c8950 ofl/passionone/OFL.txt +sha256 fbc351e1b5428e4f45834647dc23a5f8aaa3e744e2f4117ca03c44f640b9a3a2 ofl/stintultraexpanded/OFL.txt +sha256 021d5f1df697848da51620394659187be77cbe382ff2f896bc84ffb89c0c2d52 ofl/portlligatsans/OFL.txt +sha256 85b700bfba1250a6f8bdf930cd7113faf3d8e9dc52cd89eb98c3ac8a038a4aa9 ofl/londrinasketch/OFL.txt +sha256 c972795e48b096b6d4e3a947b0bb21c1baf1922a6e07ff9ada587c058f228740 ofl/coustard/OFL.txt +sha256 eb4a7a082fb0e7dde0a8f975d33f02907ccbe40751c8115e790cf3679787d01c ofl/strait/OFL.txt +sha256 9b1cfccef4a7e19f90e2901f808f3aec4335d3cc81f978453ad0c8ded14447a0 ofl/novascript/OFL.txt +sha256 43c89012c2b640187aae7e0c83d5ffa8381a0368c00e8426594358d44d3811e3 ofl/nunitosans/OFL.txt +sha256 fdecdad755f4e5e95bee491c7521f31625dc08283562ea8579543c90430eb269 ofl/karlatamilinclined/OFL.txt +sha256 5e80642a11aff2ead815949a8a929aff3fb7b9b6a24391406068a1b204dcc8ba ofl/abeezee/OFL.txt +sha256 bd77eae571de83ba3884c74c7983e8ac5cdf858badc36906179346dcd7e82454 ofl/gentiumbasic/OFL.txt +sha256 f2fcbde4b8968400d661e7dcc23052b1885815c8e3b45323b26cbb833352f5de ofl/timmana/OFL.txt +sha256 c8af073a60e30b55ef5d0e4f80cea168e06dd65bdee7ec18c1ea8de8f7228780 ofl/strong/OFL.txt +sha256 2ce1c4fcf4ab9c8474d0824434497d4afa4425db4de5629103698b170ac4ee74 ofl/bungeeinline/OFL.txt +sha256 013e33b6b2919fd0ffbdde6080a1c0f4521689fdce0f4876a59cf49ff8ae31c0 ofl/geostar/OFL.txt +sha256 e55c615ed00ce0054bd356041a41e5942b4a8cadceac1e32696ba2ef5f06f748 ofl/andika/OFL.txt +sha256 4705fc9bceb299b2a951d23c321d31f3679871bb99ceadb978907704d211f4f2 ofl/pacifico/OFL.txt +sha256 2887c5bb38abbde9ccc608c4dcc4b0dba0fefc0c74eec011033bcfbd3ffcb235 ofl/jacquesfrancois/OFL.txt +sha256 99d67fff016522688b8f913377f8ae9f6da6ffeae42cf67c0e5e87cfb0928d33 ofl/unna/OFL.txt +sha256 bba4a13f03d0fd5b476cc148feda6895dd8d65f34b2107ba9d010ad9539d6c0a ofl/faunaone/OFL.txt +sha256 842b4f4605b32518a1269c4d030d719ea2c4c317d699fc4441d0219658e18893 ofl/seoulhangang/OFL.txt +sha256 58bbdbe5c48dd1d7cfd658425a455c29811181873d3a46a4932c29e5b0ec16e6 ofl/euphoriascript/OFL.txt +sha256 f62ef357d3a1c3d27edd35a6e1ba350e8a8d13499797964eeadefbf0b3b15d1f ofl/laila/OFL.txt +sha256 17b90cece30db64934b7299fd76b033a3774c8a990e78badc74c59a5be8e0727 ofl/cairo/OFL.txt +sha256 5f8ff4a3f951c104e99245bdb952be08c73369222048bbf19fa3bf7170d10949 ofl/sanchez/OFL.txt +sha256 8eb1c1019fe7fe6d0b6e7d7bbbba1d9cbdd969d8c5f26455708f6cfb8a77284c ofl/nanummyeongjo/OFL.txt +sha256 942d51cf079299e83e9dd7a9a37eb92260524e8d1d576b2f0b3f7ca207c53f8e ofl/newrocker/OFL.txt +sha256 117fa195cff980e3b10fd8e8e21658c6ec954b0886647970a03c9694d3553b69 ofl/galindo/OFL.txt +sha256 1d08c63944e639bbfe8a1b81e3c6a63836806c126b3573b9cda0db83fd27ffe9 ofl/athiti/OFL.txt +sha256 0e441ae9f18ad0c294cc5b6ae3974c2db1614cab220598578b1b58c4cc334485 ofl/annieuseyourtelescope/OFL.txt +sha256 f2ab7e5c5c750fa03a8d8f64c72a089ed86fbd3dc172440fcc704b27816d5957 ofl/noticiatext/OFL.txt +sha256 9a33b452a3107542c35fc5fcee80e4d8798c82aca071c2f6f58a0f8dc5ad61fe ofl/cevicheone/OFL.txt +sha256 5fb0694694dc307d1eb0121689395e634b6329ff545acc53f55ad66a716b3cf1 ofl/balootammudu/OFL.txt +sha256 8f24842e9174beda18a556c2ae7d54f5dc444340c19a3a9ef77e23bca366adbd ofl/firasansextracondensed/OFL.txt +sha256 746b384383888d9325ed2fa9c40d2456b458aa190dd2b8c515ed4f02a1075bb7 ofl/magra/OFL.txt +sha256 8f24842e9174beda18a556c2ae7d54f5dc444340c19a3a9ef77e23bca366adbd ofl/firasanscondensed/OFL.txt +sha256 fe9183a0b7c1ae626b14004cd533c89ec7c192aba017f81ab71ede910256abb2 ofl/abhayalibre/OFL.txt +sha256 876db27db250a9b9c03fc2ef30a5efe1f37c2ed2686d368c3779583bdf746912 ofl/balthazar/OFL.txt +sha256 4342add6f0f2261f8579f31c10a55938930559703eed18be4a33b74eb749d298 ofl/doppioone/OFL.txt +sha256 d8eb8611f8c98d20cbf18a28425652d6022dc2a5cca15026b920f1f2bc92a612 ofl/deliusswashcaps/OFL.txt +sha256 16a8be6ac4b009ba1dd1e17cea48762f4915609ea5dca1303f716cf63998739d ofl/adamina/OFL.txt +sha256 1d567f7c5f579d9031ae5edfb0108b4681bdd2e036249b228cc2843d3f052a0f ofl/redacted/OFL.txt +sha256 866669fde730bf2785f44905ec162f05f2b8d9f6dcf366aca99360fedbfe502c ofl/dancingscript/OFL.txt +sha256 008445a4d53fbd71bff9cf733bdfd841a1b15fb58ef3473f7bab4c456e3b2930 ofl/ovo/OFL.txt +sha256 b7eae5e3c3447f70caa14e0c43f5e0d953f54ee59df406f6362863bcee1a0a95 ofl/almendrasc/OFL.txt +sha256 2a3ca501fc4d5efcad9798531e3e06962b1e20c60e464f6cbd6c17630112c773 ofl/imfellgreatprimersc/OFL.txt +sha256 95d23e4559ea8c6a36aa04fab56e1dca0780f5d93734072d4501023296543102 ofl/archivo/OFL.txt +sha256 3747fdcbfe4f51d6a2f101c35105bacde3715b3c32b34b6b03e5fb37983f89fc ofl/quando/OFL.txt +sha256 38a83f1f8b6efc3ab354b8b6eed22e8524dc71280844dc24811d95ae27b34952 ofl/khyay/OFL.txt +sha256 b8fb5cd1bafb52e652c733fdb75ee20c763e97acb0398f6b4bbe1d8ada0c07e5 ofl/misssaintdelafield/OFL.txt +sha256 a3b0977c5c25101d45054cf9199b9127b05fddc79d4da7dcf400821824e5a6d0 ofl/radley/OFL.txt +sha256 41f82bb4d24b304f30f7136bc47abdd083782e4265c984160f5649d1e78ea49c ofl/montserratalternates/OFL.txt +sha256 7c05152b2380228795cb474819744653fb03ddbfe5990b912ec7d9a41387230d ofl/asapvfbeta/OFL.txt +sha256 d3909465d5838d9d1c72b975ff1ed4f410a85dccd43801be525bf2b2bde89f92 ofl/snippet/OFL.txt +sha256 2ee5e8e47cd7d08f60bb9555f72b25912c9e81b13f5bc9a0551ddf943da6ca98 ofl/mukta/OFL.txt +sha256 f323edc1e5a6d8fa16120aa15367cdfb15468474cc621f9bda1a2f73c5d08d73 ofl/sedgwickavedisplay/OFL.txt +sha256 eef925ad6afcbba33f7989f5ad826fd68d50cc1ab4d679c52927c8afd40bddf0 ofl/sedan/OFL.txt +sha256 4281c00ab5b8f672fc8d686f48cb886ffbe900c8c9ee22473ca7e72e7cef8fbe ofl/wellfleet/OFL.txt +sha256 8b89f3af5fd02216793ff3dfe9a04dc22dfe5c213422ae21558ff1da6a1e94dd ofl/cabinvfbeta/OFL.txt +sha256 4bf7256c8ee73577ee5e26643d3247ec77017ca04489befd3e0f3412827729c7 ofl/laomuangdon/OFL.txt +sha256 399b33eb38cdfc76b8665defa5f81d52e8193d630ad5858c893db6bc20031bc9 ofl/rye/OFL.txt +sha256 aa5d677391db4e54ad324b6888792e533c5d800de7ab713302a2fc8bff2f4f6e ofl/miltoniantattoo/OFL.txt +sha256 8594350034ab1cb85a1946ef8852e69290255816c311450a66fed6eeda9d6292 ofl/anonymouspro/OFL.txt +sha256 1e5d6660366ddcfca4f2fc10e2acfba9fa4d97d40aec80d7dbfd41d730a420ae ofl/cinzel/OFL.txt +sha256 351740da2d452b48193483f22f64918a6dfd64a7abe225c6187ad3f36e0d9cd8 ofl/postnobillsjaffna/OFL.txt +sha256 64a73da7af818283168543e24bd214aded1bfec06f013bf9cebc20064a8560c5 ofl/elmessiri/OFL.txt +sha256 4fece81b541808b40293b0cd3f5b1990274e1100e1c20455dc2987cd96639d3f ofl/metamorphous/OFL.txt +sha256 8d325681662a30f58f57c92ab656dcbc9679deb78a493e4c0eab75321b2df6c3 ofl/worksans/OFL.txt +sha256 2887c5bb38abbde9ccc608c4dcc4b0dba0fefc0c74eec011033bcfbd3ffcb235 ofl/jacquesfrancoisshadow/OFL.txt +sha256 aac8f0cda6159b7251d1034651bcb42e07611495bc8cd764c89d22f3123032f8 ofl/aladin/OFL.txt +sha256 81d0973236b5b5709a80a217a330db36eabedf57bf4031de46b4660b69901234 ofl/leaguescript/OFL.txt +sha256 5454dc5cf2f46a2005f42f13ee2a998c7d0afd7f556f32fda208c72b266f7adc ofl/cambo/OFL.txt +sha256 b2d4b0c773afce947728ab99fca43b242b7edb0da26fe29f60c7c2d5094ec23e ofl/suwannaphum/OFL.txt +sha256 0e441ae9f18ad0c294cc5b6ae3974c2db1614cab220598578b1b58c4cc334485 ofl/labelleaurore/OFL.txt +sha256 6939af7114f0a33c7e6142d4c1320d1bbde11aebe6d8f3c48fc5fb3e0f676a7b ofl/jejumyeongjo/OFL.txt +sha256 cbdf9d35f32a9a2f02fb23c8b89c115a5a8e45feaaa2266920c4594c83dd5ed4 ofl/tenaliramakrishna/OFL.txt +sha256 95d23e4559ea8c6a36aa04fab56e1dca0780f5d93734072d4501023296543102 ofl/archivovfbeta/OFL.txt +sha256 967d75b89eef1f8a0ba1f5ee7dfb13427621f9116c6e7878ca04da8c9aa8641b ofl/mrssheppards/OFL.txt +sha256 8af83da84dd4299842f871285a88049352ab301ffa1f233d2595b29506158635 ofl/blackopsone/OFL.txt +sha256 548890e4083028f04e5feba04b6e00554654d840aab81c8664eb66c2216a571b ofl/palanquin/OFL.txt +sha256 c4cd9f38c3246ee6a68c264f017320dc1af09677d386166d8cda806d9a12e0d2 ofl/jockeyone/OFL.txt +sha256 a36ab46c8b1a74a480a1c51d6a5af08b643e870c6d247f233bc97c97c8ad2098 ofl/tuffy/OFL.txt +sha256 0e441ae9f18ad0c294cc5b6ae3974c2db1614cab220598578b1b58c4cc334485 ofl/nothingyoucoulddo/OFL.txt +sha256 b5c776129b160163c84620b35fd45dea45edf49789cda5a94c2290c230581e0b ofl/scopeone/OFL.txt +sha256 dd028a807788d5e22e9f8cc18f026cda23369954673658f2ecc7d30bdb364b89 ofl/sintony/OFL.txt +sha256 8928e999ff156e35852ab41d7a906598a8285acd3bcd81dff67213a6cd98d43e ofl/mallanna/OFL.txt +sha256 473c5e3123102434d05c66a9fc8b19cf285a3bf71cd8a91a41acef44d1448e62 ofl/sevillana/OFL.txt +sha256 22d1914919d3fe08b179dc31169fc743ca7eede7827b91a5d48c23c8cdc7cb81 ofl/anticslab/OFL.txt +sha256 026610186158060ad351fb20cd1452def5d35b2531634c090ce8cd1d9e9aeaf2 ofl/michroma/OFL.txt +sha256 0e441ae9f18ad0c294cc5b6ae3974c2db1614cab220598578b1b58c4cc334485 ofl/shadowsintolight/OFL.txt +sha256 0e441ae9f18ad0c294cc5b6ae3974c2db1614cab220598578b1b58c4cc334485 ofl/architectsdaughter/OFL.txt +sha256 61056041809e0ba18bf8b9d637a375ab1c725025428533d74d668d88b2cb8b89 ofl/simonetta/OFL.txt +sha256 0a852a06f0256a6684662663ccb1d8e08d131abd1f70cf8d972a344cf31aa381 ofl/scada/OFL.txt +sha256 f46c3ea04f38ea73c0731d73dfba3d7361d4b38970feb31a3558bd1b75e0656a ofl/lobstertwo/OFL.txt +sha256 f30a7045e4e21201182b2b9fc4e4b96189aaeaceb2c8e9b68d8bd3dc4e3c5a27 ofl/greatvibes/OFL.txt +sha256 9bc1eb1c679510b32d2e3f5f4f3b47726b1657aa121494aa68ba0b124a3c3a53 ofl/ewert/OFL.txt +sha256 1103d0731f1360eb156b0047a1337b2d62266fadcef1015d06f6263719c0200b ofl/librebarcode39/OFL.txt +sha256 359671bf16c00cae69cb66d041296b2adc7a4becd73a463cb8c5e101d97c7986 ofl/arvo/OFL.txt +sha256 c09e3b81d9cfeec46bc29a3374000e8ad013d694bdf24a288088491dd4cd5c69 ofl/creepster/OFL.txt +sha256 29bd0cfd0fb2a45f9b057c834a057724bae1f63b525a8ac83d3e7525706d9f80 ofl/inconsolata/OFL.txt +sha256 85814924eca98e1fa530901cc5167d0012aaf31122f9570d7e9755443dd9335b ofl/siamreap/OFL.txt +sha256 223fa23e8419ee762c662e0faf912dfcf386fa7093ac9ff690e380ce1993ba55 ofl/asar/OFL.txt +sha256 a0369b1d5f654110f2fe101db56a02d02806f1e609ab233368bc573ec45050e5 ofl/butcherman/OFL.txt +sha256 4f8b437578b20bff261adfe6c02f63bcf7dbb6a45ab37804b3547e5d5f44927b ofl/nosifercaps/OFL.txt +sha256 793891edf1f4f4f35b52fcc9706b03f779c7ea18ab8e9e441242d63ef0279488 ofl/autourone/OFL.txt +sha256 842b4f4605b32518a1269c4d030d719ea2c4c317d699fc4441d0219658e18893 ofl/seoulhangangcondensed/OFL.txt +sha256 1c023b4aca0e441c55c45c86cdff57fa524a96778f291d9a29a4ad777b70e2e3 ofl/arbutusslab/OFL.txt +sha256 de61c87e08286ad3215398340e9403125ab03c91b33bdf29de6d3e8a386d2d28 ofl/dangrek/OFL.txt +sha256 53ad6a474f68ddfc3fe72449de3ede4d3f033b2f24b77833b1d56edf505486d2 ofl/sura/OFL.txt +sha256 247edbf968c0a5b8defd6a9e420080a8bbca6ea002bfb326d12a472a6f95637b ofl/cuprum/OFL.txt +sha256 0623888cc2391c6c9853c04eafa7f687fef1a8328bbb848feab05d9e2a98764d ofl/emilyscandy/OFL.txt +sha256 1c43e70c49ef7a9b35fcb3758fec8ec5969ff1274c4834b4466b9014f3b9f55f ofl/volkhov/OFL.txt +sha256 cc31fe974951d56d542f33782d07b2d5577a4afdddba89744e6bd69bcbf3a853 ofl/karlatamilupright/OFL.txt +sha256 cd354a6084383c50398fae709ebe3a5dd98b947c486c1fe9de5f89caf81f980c ofl/snowburstone/OFL.txt +sha256 8a59454b7f1cc0b1fa29805781769047e5c269aa629e3422c2d7fc04b89e5c1f ofl/rosarivo/OFL.txt +sha256 de71817dafdecfee21268b8c4f106146e1d00988c4fd6546b10445eb26b24cc0 ofl/expletussans/OFL.txt +sha256 d1829ff3455bbf3b9d13dfb0a57758a863107c9108aab48558f26f37f1094180 ofl/firamono/OFL.txt +sha256 f62ef357d3a1c3d27edd35a6e1ba350e8a8d13499797964eeadefbf0b3b15d1f ofl/rajdhani/OFL.txt +sha256 26e4c39c4905bd7f1068b0bab008f5a4a9b945e2d7fda31e52719fc5aa9655bf ofl/vibur/OFL.txt +sha256 49f2a11271968a2ce019a43bf5401d1593652a18f27ea59037ff5e39856d2df7 ofl/changa/OFL.txt +sha256 1d08c63944e639bbfe8a1b81e3c6a63836806c126b3573b9cda0db83fd27ffe9 ofl/maitree/OFL.txt +sha256 2758cf7a872827f39661cf8cc24188113c030447aefb5ca7145993650076ca8c ofl/ptsanscaption/OFL.txt +sha256 4b255eb44f613a8e426e195f0d0b7e10fcba1af7eb6047d9a7f4f3c449940e19 ofl/hindmadurai/OFL.txt +sha256 f354ef1e7256644b320c5e1d9a07a819c2e2b930166003c96680894f9fba81be ofl/mrssaintdelafield/OFL.txt +sha256 5c289da4a19f054ace8e31a144a6a254601898cd7faf9eaa301141afda0adbbe ofl/coiny/OFL.txt +sha256 0886960207bb5bcf81a46ce663bab6c52a742dad80ee2cff5cbcda6f1df88568 ofl/rhodiumlibre/OFL.txt +sha256 8f94e5901c371537043e0c762c827ce33963e7bd186fbea0abafc035ef7120a7 ofl/emblemaone/OFL.txt +sha256 0e441ae9f18ad0c294cc5b6ae3974c2db1614cab220598578b1b58c4cc334485 ofl/gloriahallelujah/OFL.txt +sha256 24af1fb3ab8dfeddc83162b7f3b6c1104149b6c3022f1aa948ef4f8ff7e6bf7c ofl/poetsenone/OFL.txt +sha256 f3ee3eb20a9d565bee2bbc0d616de382a113327d7506565b2f3d3bee5f489375 ofl/bowlbyone/OFL.txt +sha256 70f664de65e7bb62e1ac728f20a9bb28de7fdc18be594186137a9e15ce9dcee5 ofl/niconne/OFL.txt +sha256 e604b133509815768e6ec4738bb04844ce9a23e80099d2b61e5d75ef46acbeb0 ofl/ruluko/OFL.txt +sha256 42ad5a49e171bec80308a1c9e8e66b03e638b3ea65af7fafa6fc0e42f45e7626 ofl/suravaram/OFL.txt +sha256 4fe81901e6f84cfce1145c715e931352a9a12aa7ac75cc193eb523c0cb0e5eb5 ofl/lohitdevanagari/OFL.txt +sha256 2937c7789b0e4fdeda6eafe93164a2ab36e20386704c4cb6f87b1deb620ec0da ofl/leckerlione/OFL.txt +sha256 91c25c350d3cac39da2736d74f7ba37ef648f5237a4e330a240615bc8d8c4360 ofl/ibmplexmono/OFL.txt +sha256 fce9f9e2fb268507a89fceea0b3eccc044f39fc3492968a04fd9e04df5ae95fa ofl/sourcesanspro/OFL.txt +sha256 e12a3e737fa75c0ee072d965b6185710f35e38a4f7a0793ebc66ba14a216109b ofl/meiescript/OFL.txt +sha256 d2f9c74aba2716333b0a3d283083f9fdc93b2e060c5ae094c79e97e8cba9d7e6 ofl/squadaone/OFL.txt +sha256 5d6517d497bea6116ed35079b30374043f6d90b19c8d97fc4e5ec48520d1e08b ofl/zcoolkuaile/OFL.txt +sha256 f8a20490ee8ad3adb2205ea44b279b19099a3a1d6b62849e90b4db20a77deeb8 ofl/brunoace/OFL.txt +sha256 75b2a5f39a53b4cf9286eb3d2cc1f895a8f3442680013c77124121bc347a6448 ofl/lemonada/OFL.txt +sha256 715ba72697e14daa9b29a333545f69bde7c497b9f77d0a2a4c4a5a752d961801 ofl/marcellus/OFL.txt +sha256 1103d0731f1360eb156b0047a1337b2d62266fadcef1015d06f6263719c0200b ofl/librebarcode128text/OFL.txt +sha256 eba176d3ae86af6b41e9b744e4d18fb56e2a6ad671381bddb61fabb86b1d39c1 ofl/croissantone/OFL.txt +sha256 12404fcefccc3cb964cb2406510ba679b30f7d7ae689db08df5b455ae24b3feb ofl/paytoneone/OFL.txt +sha256 e2a176ce310235bf281f1124454e21331390ae1b4c429a2d80ae642d333a5a7f ofl/frankruhllibre/OFL.txt +sha256 2d83a49d05906b5e23285168e72c0d019fc15e3ad110376f640feeeda34c27d1 ofl/hennypenny/OFL.txt +sha256 d7d8074c2dd46804990c184e25849947ab76c5ac7607fbf3966543455769bb73 ofl/yeonsung/OFL.txt +sha256 13831d02389d917d22fcfa6c79f98f8acbf61d230add0e73a4d4dc5f3bfb9e56 ofl/chakrapetch/OFL.txt +sha256 c39e284759a441660d4c4d852c537e271d0fd5c301fe46d065a972b6ee144ba8 ofl/aksarabaligalang/OFL.txt +sha256 4b255eb44f613a8e426e195f0d0b7e10fcba1af7eb6047d9a7f4f3c449940e19 ofl/hindmysuru/OFL.txt +sha256 0da6a3e5b24a9fa04085c20a2a1d3101eeb1e0bff56a2291f407187e1b2adcf2 ofl/mrdafoe/OFL.txt +sha256 a815f65bc72d90494b01842d3171f7cb0f9f935e023d9cc260904d221ef1064a ofl/b612/OFL.txt +sha256 e2f2dc7a667954c16a919acff5351e8ea89813d10f5a7504e1f4668fffbfa14b ofl/barrio/OFL.txt +sha256 8c495ddd455def58a45310376a747bb61bf86e4b071cc527b3618bccd3ef00fa ofl/chauphilomeneone/OFL.txt +sha256 b687f920fe20fe48d8f7709421e5deeb4becea295c80ce62aadcffc54132fa1b ofl/stalinone/OFL.txt +sha256 a90a8ebe28f3c2905a44557166010a3d219ffcce1703c3c3280ea8728d5e2ebd ofl/heebo/OFL.txt +sha256 c267a00c9476c78a2336d7b372b536885b8b24173a29ed53496f67a742c14961 ofl/alefhebrew/OFL.txt +sha256 2cd51b11e821dad2fb7acc54d68bd9a139fc7a1207e17c432ba9ce49bba3d493 ofl/fasterone/OFL.txt +sha256 ca424122f42a8d8442bc4cfd902f5f027ea67b5417705f5af1d1235927781720 ofl/amethysta/OFL.txt +sha256 bb8fac04b8535d39fb9851c9d886248d25bc0c82000066c92dd577c3369f512b ofl/chenla/OFL.txt +sha256 0e441ae9f18ad0c294cc5b6ae3974c2db1614cab220598578b1b58c4cc334485 ofl/lovedbytheking/OFL.txt +sha256 53a9ce47085d9fef613c7ecb3730dc80d25962510bbea231b89564f58240f251 ofl/gaegu/OFL.txt +sha256 9d96f445b6e9c701428811d0177f894874f8d6f07ecc30d568c506542368f3ff ofl/share/OFL.txt +sha256 9465823369fbe1ae0b5a3065021d53ef8c56e113e664229455dc80b237fa6a07 ofl/nobile/OFL.txt +sha256 0dd8e32457e18621737b593ab0fac49905cd948a078ed0e64f4890df714a1dfb ofl/amita/OFL.txt +sha256 791936b10381b512512317572fb5eee91bf503344d52c37335e402fc1cf19992 ofl/reemkufi/OFL.txt +sha256 898a9cf80636e86d6b6009b96795fda29e431ee701c28c36f274a7e8a7d8246b ofl/rubik/OFL.txt +sha256 5fb0694694dc307d1eb0121689395e634b6329ff545acc53f55ad66a716b3cf1 ofl/baloothambi/OFL.txt +sha256 382232d1add5623ba5b06394afa071f4eeecccb6d2b2bd02cfecff4a8a45065a ofl/fondamento/OFL.txt +sha256 0c3f4763f49c2cd37757a2856ad470aec6a416981ac6d6e3f900c1128be39de7 ofl/elsieswashcaps/OFL.txt +sha256 d849309d514833fe3d7a610e10f6cd5d99b4f9552bfa304969acbf89c66e4422 ofl/smythe/OFL.txt +sha256 53f9c99fa3d47f7d632a42ee7bab4a834a60a744f6026d676c3a223cef2b2ef3 ofl/vollkorn/OFL.txt +sha256 a1077580b649c7b0e05ea0e9369d48687b4ab1c585573bf86b0dcce7dde177c0 ofl/junge/OFL.txt +sha256 a9b40759b5821a0c2ad07cbd2c2a61dca4b3e222e6370a7d5bfb6b373bf4fb10 ofl/sunflower/OFL.txt +sha256 4b255eb44f613a8e426e195f0d0b7e10fcba1af7eb6047d9a7f4f3c449940e19 ofl/hindguntur/OFL.txt +sha256 84b11cc0aac8fdb93af94872bc4b8f015caabf4919db63ab7f916ccff8e52f56 ofl/josefinsans/OFL.txt +sha256 0e441ae9f18ad0c294cc5b6ae3974c2db1614cab220598578b1b58c4cc334485 ofl/dawningofanewday/OFL.txt +sha256 f27cbf1055db7b9dd80bce5cd12b462f2d9ed7313d84dd8bfef1ddd2b61bdfc5 ofl/chicle/OFL.txt +sha256 aba8997e16b1e3888c6e855ba883c70d96bd4375bff8cb9c7ce0f097200f74b8 ofl/abrilfatface/OFL.txt +sha256 8f24842e9174beda18a556c2ae7d54f5dc444340c19a3a9ef77e23bca366adbd ofl/firasans/OFL.txt +sha256 d484e0dce424a9e360adabb568b6773db5f1566df71ce3e9dcd66a6cc2c38d33 ofl/ericaone/OFL.txt +sha256 1b3b78123c94dcbc9fd4ec174317336c8c93423da62dc946b8852553cb13ddee ofl/economica/OFL.txt +sha256 74584d937293a9cacdcd2eb05851b71aa1527901c18b87961d2f877c77a1b486 ofl/kanit/OFL.txt +sha256 a6a74417db7c37f69495da556a3eb86a22a784ffb0131e3e0a5a47ce8d7fa5fb ofl/shanti/OFL.txt +sha256 2a3ca501fc4d5efcad9798531e3e06962b1e20c60e464f6cbd6c17630112c773 ofl/imfelldoublepicasc/OFL.txt +sha256 963f283b5410c7df62067a35cd7def0802c583a880e7cd7e326832ec3985ec87 ofl/spectral/OFL.txt +sha256 11bdf9c7abd81f46a88b0b017d78a0e51f451e9dc0c2272813aa9f456ee886ca ofl/kiteone/OFL.txt +sha256 6827fa45930d5847fca5b3d3898b3d87a229fba772a5b6c5bc33bf73ec83478d ofl/khmer/OFL.txt +sha256 5ae0cfa62a70251d9a2c3c5430ed3bafa480005f23e4b9525488f2318e5c10ca ofl/mrbedfort/OFL.txt +sha256 34b8afbcab7508bea23847288332a8c05a507364ca6f0c8756ce560d7d59d506 ofl/mada/OFL.txt +sha256 b67eed9578defb59cc4ff4b58428fb816786e499e84cdeafca54723b055c169e ofl/viga/OFL.txt +sha256 afc1cda4eedcfe27c8cf30fe3e9879587cb43cc2882d4cb91dd3e3fc9eecd0bf ofl/farsan/OFL.txt +sha256 cc8c0c3e81cf543e190f128b83ba7c30959f15865c14dd972fca4917faeceec1 ofl/encodesanscondensed/OFL.txt +sha256 9ca8b9e5db7184105da255bb110023cf1cce6caa56186341bb7b09ba97b20ba5 ofl/lindenhill/OFL.txt +sha256 a89ac8075be60f2beba79bed3fa253415a373dbdc3bb108b23f4854d0dd495b8 ofl/pathwaygothicone/OFL.txt +sha256 4b255eb44f613a8e426e195f0d0b7e10fcba1af7eb6047d9a7f4f3c449940e19 ofl/hindjalandhar/OFL.txt +sha256 f22a2beea88d631a620b15683fd03e79f13ad3297ad97fa5e42283c0b1a3a038 ofl/marckscript/OFL.txt +sha256 faf47a1ceab38b07205b9d58fbbf9ac39772ea47cc731aca7816276da7226a22 ofl/terminaldosis/OFL.txt +sha256 2a3ca501fc4d5efcad9798531e3e06962b1e20c60e464f6cbd6c17630112c773 ofl/imfellgreatprimer/OFL.txt +sha256 d2f87f90d108a947f98c030d9d8e4bf27e761ce83f222453b9a7230c5fb309e1 ofl/novaflat/OFL.txt +sha256 2da0fa5707f1fab1c802969b098fd1b92ca0b3b233a80e27fca416647c064dfc ofl/exo/OFL.txt +sha256 f9e5dfcdb2947c0db70465668706b0617cd052b6f86e582dff8741d9e5cded0a ofl/yinmar/OFL.txt +sha256 bcb0bda74430ccc281a616a81d0a287fed5a423815b00b222e0b7f603f85b26f ofl/caesardressing/OFL.txt +sha256 a94cfd8d1f5c33f9a7506def359b907f3313f7008bb57fc893985963cd342f8f ofl/arsenal/OFL.txt +sha256 52caec7d90533523fa7da64e95faf90ea32a663ce21847a39234b61e18d25044 ofl/bokor/OFL.txt +sha256 ef0bdccd20de76d517fb3939161d05ecd5808382fb8fa82cde5fcdb3adcb8029 ofl/engagement/OFL.txt +sha256 0d75673e4c98de3e11337dbd90b05d0232edfcade5c1c02fbc0118c85aea25da ofl/macondo/OFL.txt +sha256 9cd20277e2c89d47e3997435e3a16539d20173d850fbb42474990f71642e473e ofl/matesc/OFL.txt +sha256 a7ba785ad99b6eae0444ab89910e512d4af9865937fddbcb5c72c4f59f55d6ad ofl/merriweather/OFL.txt +sha256 010cb216e8f3fbb2836fa3f38787a412b749352de546797f57c03c3bcfe46b1f ofl/nunito/OFL.txt +sha256 91c25c350d3cac39da2736d74f7ba37ef648f5237a4e330a240615bc8d8c4360 ofl/ibmplexsans/OFL.txt +sha256 cb8bbf7a86eefa8c146f24ae5be74fffa887ba83719ab3c87036be8e3d0191e2 ofl/montaga/OFL.txt +sha256 1103d0731f1360eb156b0047a1337b2d62266fadcef1015d06f6263719c0200b ofl/librebarcode128/OFL.txt +sha256 0e441ae9f18ad0c294cc5b6ae3974c2db1614cab220598578b1b58c4cc334485 ofl/overtherainbow/OFL.txt +sha256 3621f156cc7a26e0a9cb413332e0bb35a0e76b36dbfe0b1c885b565a7bf3051e ofl/drsugiyama/OFL.txt +sha256 fbb941b371c6348ee2572ce8c78fb66128a61885f960dec1906c4e44ca4b4d3c ofl/reeniebeanie/OFL.txt +sha256 9e19c0d2e7e7adcbe9dfd0749e34dda41e7e356e0f2cc082d61d2fc9b6e0cef7 ofl/gfsdidot/OFL.txt +sha256 812fc4af0c63d31e0e81cc153af74e397407b0630e918b8b965bcbb192bc0656 ofl/artifika/OFL.txt +sha256 e8ad3f3de5baeff6bac6e711d8c406e0a6b8a61d2944741532d8965d893a2681 ofl/pirataone/OFL.txt +sha256 9134ca6996bd33ea2022e109f13f20e29dee1dcd8b2e8878aad576d2ca334e9f ofl/cormorantupright/OFL.txt +sha256 65f43260cf7e66b57ddca8d148384a6602e2c06edd389a8b3cf388045127b47d ofl/lusitana/OFL.txt +sha256 518962c41d4a5e96b0016bd8d8acc965413ea1a0102467e4955931e702b14a0d ofl/iceland/OFL.txt +sha256 2171558d2482764644a2f793696fa2e48c361730ecc87686b9a29082d6daeb10 ofl/khula/OFL.txt +sha256 d336c098ea798bf14de111cd90dff7d6bc340852405246511345d0f8564fe76e ofl/fingerpaint/OFL.txt +sha256 ea274e87939d38032b31fb741af75bff9fa3f8d4a8b652265f9e0ce1ad7e9f80 ofl/asul/OFL.txt +sha256 eb1992aec1cf892ec94ffc116d79b62c7cb03dc108141b94a57a4195d210b514 ofl/meddon/OFL.txt +sha256 9b584984f9db0ee30347391a76eff9c0a6b03dc450c3c6afe3757a2cb3a4db87 ofl/tajawal/OFL.txt +sha256 1dd84b611f4bed7f9ff9089e76a96337b187e6f283a4ab33bcb987f844f2c4db ofl/parisienne/OFL.txt +sha256 f62ef357d3a1c3d27edd35a6e1ba350e8a8d13499797964eeadefbf0b3b15d1f ofl/hind/OFL.txt +sha256 2a3ca501fc4d5efcad9798531e3e06962b1e20c60e464f6cbd6c17630112c773 ofl/imfelldwpica/OFL.txt +sha256 de08ff7a460541753999b1208f1254f1d31f16b421312aca4d4b8179d997de38 ofl/aleo/OFL.txt +sha256 7706a84d7e49e2273877106334a1eded8ae89fb5839fb81e0f2bb27c846f667e ofl/lora/OFL.txt +sha256 cc31fe974951d56d542f33782d07b2d5577a4afdddba89744e6bd69bcbf3a853 ofl/karla/OFL.txt +sha256 0409c6582424508453ce41648067efaacf0c790622918493d8f1d934bc5329a0 ofl/bigelowrules/OFL.txt +sha256 9e2d92fb24b4a548ab030c509ba88267e224f2523728ee9bb35cf334811106bd ofl/exo2/OFL.txt +sha256 f480fd19e7018942ecaf460f7a4ab9ccee0aec579abcb07d559dbede913864c6 ofl/alikeangular/OFL.txt +sha256 6ea7a3ef1d07feb592693f3f22c26d0b09321ff81814292b49be99888d0da9d7 ofl/ponnala/OFL.txt +sha256 0b7eae990329ac175a2e1c329060b3a4d6876e4e0cd7e5235511578352f7b191 ofl/biorhymeexpanded/OFL.txt +sha256 21b54eb0d7513524798a00dfbaf99a02c003a0012a728cc5f0e02d24c50482fb ofl/caveat/OFL.txt +sha256 adadb8d5d34fe2218dca0f4a4919a9b6f81dfaebb289e5446ac7b3063d6965e9 ofl/tangerine/OFL.txt +sha256 16741ac498178f645283cfb45b7a487b6d361b5de5730c5ea729f056f414f6b0 ofl/ropasans/OFL.txt +sha256 1e5bf8207a40678bc401e2e5456d0db1f2a183b550a30976b48dcdd6a4e4c46c ofl/caudex/OFL.txt +sha256 6f9e3a1c51f617e7b110862426204ec7a56d8c6d2f731373b5de6b8d069099b6 ofl/ebgaramond/OFL.txt +sha256 c2368518f12463a93cfed44e1460f36085dc60df06f415ee9b0319809987ccce ofl/frijole/OFL.txt +sha256 5f247fad3e8a86b6c0779dff09277047c1ce2b0b7580a1093347a8af755352ba ofl/sawarabigothic/OFL.txt +sha256 6627b9c2c8ff8e0c6ef23f1b0125dd5b293320c10c916d402fef64916c296d0e ofl/kreon/OFL.txt +sha256 723764a50d4e6985dfcbd75fcb40dbd3abab37ba25ae626486d4a32084854487 ofl/kdamthmor/OFL.txt +sha256 846ce83956a732edd57b74d9ba988d58abc8c8e6d0926859559318ce6aed139d ofl/mclaren/OFL.txt +sha256 ba01480319f922ecebbc73f1a523e7f8876e92b16553a32c494bcd3f6f5a27fa ofl/ledger/OFL.txt +sha256 c3bfad2900a83f571d5c984d490d51c56aef14806c28dde38125593e1e71daca ofl/mrdehaviland/OFL.txt +sha256 12af42b715a3901bfa7add1351e45b6ce22f3061555d52db45e963274c349360 ofl/arimamadurai/OFL.txt +sha256 aa8a8196a3e22c3bd985e33cd3245ae9a38accba5e79fc0e3b292612a8d6b337 ofl/miriamlibre/OFL.txt +sha256 3169e7e0e87168908218f11d660a52c0b81b5952fd73918a596e70721d68d3e5 ofl/inika/OFL.txt +sha256 e711c816f7de931244976f51166baa15446fc307e5d0ea04fdca1bc2c04afb1c ofl/nixieone/OFL.txt +sha256 1ba345a91338581e5f8fccc3e37e447ddea5b99ec9caec1b76c7c39492387d2f ofl/signika/OFL.txt +sha256 b01cec9e5e2035b70a6aeb61c673d1f6d5c91539845be07733bd9880fddeb9f0 ofl/kadwa/OFL.txt +sha256 d7577acbab1d70f2e6bd1b21d8f61db189d6aabe6375bc2d96564b8d94031664 ofl/stalemate/OFL.txt +sha256 5946eec3a7d3bda02825930156e4716198e7753641dd3303a3e8c386c8011909 ofl/eatercaps/OFL.txt +sha256 ae6de2f6fc00f76cc7eb0d97c1ae5e0b7ec734f20ad7f58cf4c74738dc822d21 ofl/chelseamarket/OFL.txt +sha256 860cbfdc9dbc3f0e8d35af80c31e8f20945bff393d4f483dfc157469e01d321c ofl/gorditas/OFL.txt +sha256 9a2d8c5a3de0a6e62432322115dce136139948411dba33cd86525c0a02749fb8 ofl/unicaone/OFL.txt +sha256 4fe01b13ffb41faa8f030d84843a95dab32792dfeeca7c072abbfd3f4d6896ad ofl/audiowide/OFL.txt +sha256 173ea2d0bdda981829719623c35699e8c0e4aa508e0af12817ad7ccbfa4c6137 ofl/originalsurfer/OFL.txt +sha256 1d08c63944e639bbfe8a1b81e3c6a63836806c126b3573b9cda0db83fd27ffe9 ofl/trirong/OFL.txt +sha256 58bdc69f4c6177125c6e7cdbc78f710f5f9952f11bba7bd5b17bd7ef169d731f ofl/goudybookletter1911/OFL.txt +sha256 2950994bcfb8e903f0539d28a8ec4af077e0aa1fa7946c33c912d2d6969c2971 ofl/glassantiqua/OFL.txt +sha256 7344b8b8c97c4f88c0ff8bb72bb024bba72f404be1c740b6596a73ed15d28df3 ofl/vampiroone/OFL.txt +sha256 cacad5bf45bf5c81f4b6cbd114261bc8a08f6110b66a4c6fad8bbc16618a3096 ofl/daysone/OFL.txt +sha256 0677891e6a143f297350d260ad766ad33bfc18ed5fa4f213acf648d6b597ec1a ofl/alegreyasanssc/OFL.txt +sha256 c8155eb9337078a9ea9f1e576ac813a03030ca43e2694593e90cd4fee6fce937 ofl/sumana/OFL.txt +sha256 95803fae1b063e592c67b5867f1f36df1df526e5ebf33c6cd4d4afa31a9d5586 ofl/sitara/OFL.txt +sha256 c254ae01c407f4a2bd0ad163e4c1a795d57ddfa8967c21b8a28c250b44d13963 ofl/sawarabimincho/OFL.txt +sha256 2a3ca501fc4d5efcad9798531e3e06962b1e20c60e464f6cbd6c17630112c773 ofl/imfellfrenchcanon/OFL.txt +sha256 25995bcf8e8ddea1aafa5449870567cbbeae7e26b27ba30aca5642f2c02e9757 ofl/quantico/OFL.txt +sha256 455755e2e7ce9dbac6beb3729c97c57d6f74a638dcb5be548ec953021fbdbfb3 ofl/ntr/OFL.txt +sha256 ad6f73fa3edb7aea340aadbc63c0d7ef7663abed82664432ae09a6b377fa313f ofl/librefranklin/OFL.txt +sha256 581f08727777cb2a1a1ec95c0f981ce64fb1ad4354f78a0ac4f3481afa605577 ofl/moulpali/OFL.txt +sha256 4bf7256c8ee73577ee5e26643d3247ec77017ca04489befd3e0f3412827729c7 ofl/laomuangkhong/OFL.txt +sha256 08fdc7cbd92b9bbc4d41d0945ae7f25450d91c5fc8c66c68df331af3505e4ec3 ofl/rougescript/OFL.txt +sha256 694d5c15c1dac5e26653e18b94394d911e471549ec9b7d6247ade62e486b4915 ofl/asset/OFL.txt +sha256 bddfe669338d0dbc24c15ccd31dbf5c101a213da38049c24baca9ccb7fde45a4 ofl/wallpoet/OFL.txt +sha256 2758cf7a872827f39661cf8cc24188113c030447aefb5ca7145993650076ca8c ofl/ptsansnarrow/OFL.txt +sha256 3cbf579238e4eacd90ad67883d971aa346ce8990d658635f78f98d608a6830a2 ofl/zillaslabhighlight/OFL.txt +sha256 87000f71a897c8c130c7777d058c5868f84316f99a32644b3bf595cd11edeb12 ofl/sancreek/OFL.txt +sha256 08fba9df5c9890f3ab00ee63f63e005ad93a23746f7484f5fe9501a1ad32730e ofl/allertastencil/OFL.txt +sha256 9608d22ae5c586628c9904e773b7c6a6520fc16e1492ebcb5ea55d9523399964 ofl/anton/OFL.txt +sha256 f3758ee70600ecd5450f01ea373204b202e048d0454c9db2d1175c5a5dd1e92f ofl/vesperlibre/OFL.txt +sha256 e43f121c788cca4a14049e58864e28021174b055710ba38e0964e816dbf905af ofl/fruktur/OFL.txt +sha256 5e0da210fb04058a8c0087985d2d456b931c2579811a49655721d3cf0c36b6d6 ofl/notoserif/OFL.txt +sha256 a1580ba69a8d706bd95e1e72ee0b5cfda0a478fbbab6a4af13b4a9e1b28faac0 ofl/revalia/OFL.txt +sha256 f323edc1e5a6d8fa16120aa15367cdfb15468474cc621f9bda1a2f73c5d08d73 ofl/sedgwickave/OFL.txt +sha256 2a3ca501fc4d5efcad9798531e3e06962b1e20c60e464f6cbd6c17630112c773 ofl/imfellfrenchcanonsc/OFL.txt +sha256 0836fd874230b17f840efcf7d3bb529f5a7b5befbfeef94478519cfe2d8551c2 ofl/courgette/OFL.txt +sha256 e3ed3ad6cb257e16dc1789900707c5cd1cdef2d60d155389342604991cf693f9 ofl/bahiana/OFL.txt +sha256 391ac3126dacc95b92a8f3408467879edb3245344bc411530a30d5aada52df92 ofl/gugi/OFL.txt +sha256 88dcde7d08e509a3eec64886292a36cbd58ed9bb52f37f91f55656fb9d21ddb8 ofl/supermercadoone/OFL.txt +sha256 41423e9e1d0ea79d0e78bd5fe9e0b27f4c23140706f5dfbfe116839c83aae91c ofl/charm/OFL.txt +sha256 43186c592361336474683e302dcc988831a53857bef188c4466f6b45dc238f84 ofl/fredokaone/OFL.txt +sha256 a21fa252efb7a1ff84de6a36df4386959668aa046f28161b4047829f7d9cd1b5 ofl/damion/OFL.txt +sha256 842b4f4605b32518a1269c4d030d719ea2c4c317d699fc4441d0219658e18893 ofl/seoulnamsancondensed/OFL.txt +sha256 bfc205682f5454b42a732ec857b665293ab8bc6f0ee901a0967219ba7ffdb190 ofl/gfsneohellenic/OFL.txt +sha256 59b91c9912b80714852a43897cbc9414d6457e22072dc99a4cea6e2bb4f3c65c ofl/freehand/OFL.txt +sha256 8b89f3af5fd02216793ff3dfe9a04dc22dfe5c213422ae21558ff1da6a1e94dd ofl/cabin/OFL.txt +sha256 b598b7fddfd578950aa1fe6e0e2607b779abfaa686b83af8ec65c860f646b2cd ofl/rumraisin/OFL.txt +sha256 2bd35914efa381c80f9fb62d6ea7d736d3c0739196a3783c3122593c3408392c ofl/gurajada/OFL.txt +sha256 5625e91bd7c2a45c8b9f59106d587bd025470b462ea901df691defe0099621e1 ofl/taprom/OFL.txt +sha256 37d5360d8d2433689e78302a93cd88e9add8a2294046476625edada2d4328deb ofl/averagesans/OFL.txt +sha256 f8e2b58dd7a8c8e21e5d744b45876bce7e010a647c071c1ed42ff0e618d4ea59 ofl/frederickathegreat/OFL.txt +sha256 5fb0694694dc307d1eb0121689395e634b6329ff545acc53f55ad66a716b3cf1 ofl/balootamma/OFL.txt +sha256 09685e225ba9b697b2ccd2d4098cac5ecbed0679960605258a271af60749887b ofl/francoisone/OFL.txt +sha256 39de3de5f1873f89bca4af37823ab22e28e88d0d8f7fe2f07e82e9e6e9bf7b70 ofl/himelody/OFL.txt +sha256 08a12877eda24767239f26b527bfce0c515efaf623c66da6baad92a6d5315e9a ofl/content/OFL.txt +sha256 0e2ccc5da1dd979f08ba82bca2fb61592506a1e58d3cbfc26d904f0db71bd812 ofl/saira/OFL.txt +sha256 d8eb8611f8c98d20cbf18a28425652d6022dc2a5cca15026b920f1f2bc92a612 ofl/delius/OFL.txt +sha256 1d08c63944e639bbfe8a1b81e3c6a63836806c126b3573b9cda0db83fd27ffe9 ofl/pridi/OFL.txt +sha256 c1eed37b6d213df4edf8f92ec7d1e972f751abd68ecd649b4f0b8e5d8e8561f6 ofl/rasa/OFL.txt +sha256 4e66943af352059c059dd658774f25fbc831f1ad478f9f0890c06ecc2dd324c7 ofl/metalmania/OFL.txt +sha256 f5b03ea0b27c7f5afb9702771ee57679ae8ba6b471b6ba9e62d985d3256f1929 ofl/playfairdisplay/OFL.txt +sha256 593f0bc55c75b673772b378eaee314f128283745c4bb1cfdb9b8012a3b6c46fe ofl/skranji/OFL.txt +sha256 46239ba6485d28553fd944da4ad32a00d9c403aa1c3e111676b0b96fe458d1d4 ofl/averiagruesalibre/OFL.txt +sha256 14d28541780d90f6577bb7abcc6f005bf6969614294e75c82abb8758a696ad46 ofl/quicksand/OFL.txt +sha256 5fb0694694dc307d1eb0121689395e634b6329ff545acc53f55ad66a716b3cf1 ofl/baloochettan/OFL.txt +sha256 35dca6122235851d236bd861124f4a893d409eba021cd8c6a292a19df0f4640d ofl/codystar/OFL.txt +sha256 ab721b35816e470fb11619ad3705f75d08dccd0864505e3d782e94fd937f6620 ofl/allan/OFL.txt +sha256 d9cdb075679d15a99bab2a8541b9c4fdc71347502111fbe9affd1d462219d96b ofl/indieflower/OFL.txt +sha256 1313ae342eae4e1810304b6cd32f6815dd11b8e45812a2af98e58b6960684fa0 ofl/petrona/OFL.txt +sha256 1e4015251ca58d4f349b4ac930259c6f3d6381ce68f8b4b27d54d53f8f63f972 ofl/angkor/OFL.txt +sha256 46239ba6485d28553fd944da4ad32a00d9c403aa1c3e111676b0b96fe458d1d4 ofl/averialibre/OFL.txt +sha256 8e28b778b6e1a7ff9ca72f4dee2d53120aa2856dc1bfd0be44307e365b0e45bb ofl/cardo/OFL.txt +sha256 a02e8715fcdf3325c474b7209399f50230897bfa828fe4eea2639ced1a1d574b ofl/blackhansans/OFL.txt +sha256 d530c14e9cc263c567b47742ef20df2a41374f00732ba4f290f52adad428b1a2 ofl/meerainimai/OFL.txt +sha256 2e2fe5f1d8916a5160060594a96c1a5116406d26847afdbd09618481e2abd6fc ofl/denkone/OFL.txt +sha256 56c4ff36faaaf336bc5fee659ff6fab2413d67499cc22acc29079b3892d8931b ofl/miniver/OFL.txt +sha256 0d75673e4c98de3e11337dbd90b05d0232edfcade5c1c02fbc0118c85aea25da ofl/macondoswashcaps/OFL.txt +sha256 742a6a4386db47a2987c7c3b4aeedfb5adedfb3356c118de450a664735686535 ofl/graduate/OFL.txt +sha256 9e53298e3629e00ae4c31531cca09051ddaa654a5de4f7b55e596132fff86e1f ofl/dhurjati/OFL.txt +sha256 df9fcd8f62ae79aba7fa5b0563a08dfede1fa0909d668287d70c395d88f5fe02 ofl/fjordone/OFL.txt +sha256 02faa476b17db0044d0c502a3ce12fdc81eeeb9bd618e6a005407c79d6081bbb ofl/monofett/OFL.txt +sha256 1edecf3f971a11dcfd777cbda6f08c0f9a77bf57a0a2a89d8142fb933894ce16 ofl/amiri/OFL.txt +sha256 6e6efa9b0556d100cfe60690cff5d9be7144df77adabfd2c278dbfee451351ea ofl/phetsarath/OFL.txt +sha256 2348c4852e6322105d130aa2addbe24c962e330094ad6dfbfd9fbd2281d76b0b ofl/bellefair/OFL.txt +sha256 3bbcf1617d93d3a949a10da78ae91c58be536fb04567ab4b5b9fd207126f1db5 ofl/buenard/OFL.txt +sha256 faf47a1ceab38b07205b9d58fbbf9ac39772ea47cc731aca7816276da7226a22 ofl/dosis/OFL.txt +sha256 3ac1301549523d9861fedca12871f24e575fbd26d520632fc00ba849b471d275 ofl/russoone/OFL.txt +sha256 44b51296985184d9b27fc2c8e5b317906c5d65d9dc834e81c07902d3e5e1cf1a ofl/brawler/OFL.txt +sha256 afb8c471158619593df0fb501453bd39fda42396e2cc3911e2a0a471c11b863c ofl/sarala/OFL.txt +sha256 de985adf63cff6b1bcb7c5cb55f1c5850fb1d36289d20a0e26d97a281bfcf956 ofl/aldrich/OFL.txt +sha256 194e25172d0144f29aff4b6fb2931ff0be0139448a5cd867db37863c9179330a ofl/stalinistone/OFL.txt +sha256 ae05f8781a5ef38380ef3efe8cad86783610b6a780c6c278d7472f95310fccee ofl/oswald/OFL.txt +sha256 2dab153a33dcb2101bba3f194d27d953c848a0fabf2e336650a81f84a0c33b3f ofl/pragatinarrow/OFL.txt +sha256 9d61931b909f9a738964f8fb311eb8fa40dba1ef9f1688b36039ebb15ee1805e ofl/questrial/OFL.txt +sha256 e315abc82a78710c7242e2f2e6529651fd631d4d50e6ad98ea194f9b54c3d701 ofl/alfaslabone/OFL.txt +sha256 4653c63a4bab99aa50de5190853fa21ea6c0a25d69d49f5a42cd51f0f67665e0 ofl/boogaloo/OFL.txt +sha256 bd8323cd1d2b6bbdfbbf99cb41ec1156d0352ced170de4aa3a96d95e6e20bf5b ofl/amiko/OFL.txt +sha256 0e441ae9f18ad0c294cc5b6ae3974c2db1614cab220598578b1b58c4cc334485 ofl/sueellenfrancisco/OFL.txt +sha256 ed93e9833f18acc2775380a28139fd88d3ebf82df7cb814042498467be3463bb ofl/lemon/OFL.txt +sha256 1f00d1f970b4ea469b6936e599b599bb217edaab792e586658ef2e71cf438685 ofl/itim/OFL.txt +sha256 fa28ba897eb819768d6bc00c30aa03ef560e80e5f6fb872eaea089c66992f502 ofl/notable/OFL.txt +sha256 96199bf9ff12dd471a66911dee95440737b437e7f5a6fd30e9e950c16d66e8df ofl/unifrakturmaguntia/OFL.txt +sha256 36e2f1debc9778bac79fac1a0cb5a5ef51c102f00b58ef7d8a05324144b68166 ofl/judson/OFL.txt +sha256 ad4f6ede2e8a017255822a6abee8d10717f1d34c20223de80285ff59e28a1cba ofl/bangers/OFL.txt +sha256 f8779e6871bbab04e0a1ddd9997f4d8173b56792a1e7f8b9d691d967a49c7dc3 ofl/andada/OFL.txt +sha256 49b9214f7b40024abec2fc89a32bdda380f2174ba7005d7636e6ea340157c5a6 ofl/jomolhari/OFL.txt +sha256 a815f65bc72d90494b01842d3171f7cb0f9f935e023d9cc260904d221ef1064a ofl/b612mono/OFL.txt +sha256 5eca89cdd576df5e4b7c694e0425b126a9ca839aa067df85fab33904a8187076 ofl/amaranth/OFL.txt +sha256 e0cde1a4993ed689d463d5e2401f4a60c54cc48a14253ab0f8012d722c417038 ofl/mavenprovfbeta/OFL.txt +sha256 eeacf16032901d0ed0456876ec77b8f0fda6b3fecec7d972f8543eb602e6c30f ofl/nanumgothiccoding/OFL.txt +sha256 0fbae33ac3aa455c8c0d598347c87f1abfac0d215483f40f5a0e8dd08076df1b ofl/librebarcode39extended/OFL.txt +sha256 3670ddaf348c62ada22a2f606158dedcd9ca5fd5422a6173d6593204a8f53d4f ofl/varta/OFL.txt +sha256 ab592d1abca19428b89d851706fa7815ec25139c6affb45d366577ca63fb91b7 ofl/yesevaone/OFL.txt +sha256 e8dd8f53b2fa502ace0636debbe7e357c4888d8d02b8b41d6a9a22d3058a63dc ofl/peralta/OFL.txt +sha256 cdf5fc4014abe91588666a9592ec86200e5a4d743b4b6e05d28d47e850bbe5fa ofl/digitalnumbers/OFL.txt +sha256 f8c2225a5fdb50e2e75f98cf6e69f198571f605f1b7f6f7eacc0947e2fcdbe8d ofl/sreekrushnadevaraya/OFL.txt +sha256 a80ee908b60f5bec9c10b135d3da93730e2194107d1f7fd3f61bd8c1a97b3e0c ofl/yesteryear/OFL.txt +sha256 6d216cec166b6e139adaa599053dd49720c053e1f2adb4845de3cc9c3704344d ofl/play/OFL.txt +sha256 46751a31966477e3f038d1e5ff1146a33234a3a523a0e6a21be3221cba082a34 ofl/muktamahee/OFL.txt +sha256 505bb8f3c30f2006b4e02d250fda31ed94b651a35f1124a201ca1c405ce989af ofl/biryani/OFL.txt +sha256 5641212407f956b828bf632afc4bbb3344f461f82255ab56756d9e3e8604c7b1 ofl/martelsans/OFL.txt +sha256 1ed119b01f03187dbe2f5f89c95431b9a4ca46db604fd263164d8b4055189f46 ofl/lateef/OFL.txt +sha256 4938e917ac54665be1dd862f54634d991b39c5d1eef69345d66a5089e401bfb4 ofl/creteround/OFL.txt +sha256 9263f9488a9ed1d5f4218581b642e0f054f9a20d208f1a53c19c9f7dbd27eaf2 ofl/peddana/OFL.txt +sha256 e75ed24435d1711de0bebfaa621c3eb5564798c88cc0c1d1f8d529bbaae703a9 ofl/yanonekaffeesatz/OFL.txt +sha256 708e33bed791c40638926a7577bcef8ff8748f84045f3825277540cbb8d483ba ofl/poiretone/OFL.txt +sha256 f1d1a3536fa4b9c71d04fe4c8d8bbfc0cc5c457d6883f45086b04d0bc07ed12d ofl/vastshadow/OFL.txt +sha256 f9f28345ffcd6cea6e3c6699e4579cd1948053d80fe89a6a5a2ecb269afc95f8 ofl/nikukyu/OFL.txt +sha256 c1bcd16ffc9d095822fd6b7fa1a24c7918b24815ed05711421f804293d2efa62 ofl/actor/OFL.txt +sha256 ae629d13b06d9afc5cf3c07d585f3192b89b7decaffc5c4dfcfa7ce11a2a2b11 ofl/raviprakash/OFL.txt +sha256 bdce62dd98db969b73f93f8e8e2151004c20ad871ceb15ad9bfcbdf2cf939dba ofl/pompiere/OFL.txt +sha256 39de3de5f1873f89bca4af37823ab22e28e88d0d8f7fe2f07e82e9e6e9bf7b70 ofl/poorstory/OFL.txt +sha256 757f49d04406c93c40d1781e7867fd85a1f9fdfbfe03a5ae332900da802fffc6 ofl/harmattan/OFL.txt +sha256 f62ef357d3a1c3d27edd35a6e1ba350e8a8d13499797964eeadefbf0b3b15d1f ofl/khand/OFL.txt +sha256 74ba064d03f1f1c4a952da936c3eb71866c34404916734de3cae73b34357e59e ofl/lato/OFL.txt +sha256 94625b91cba99cf9c8e580febf5e738b2e3c7cde9034a16bcfb7538b672137e5 ofl/zcoolxiaowei/OFL.txt +sha256 3e908f3a95680bdf3c8456bfbf76392605b34cb3fba109e46441056ab966cb35 ofl/modernantiqua/OFL.txt +sha256 6a809aeba8af2115ca4b4c3597b1fbeb836a45f0489070f330f9c2dff870da8d ofl/galada/OFL.txt +sha256 2c3737ea83b48d48624068d1bbd1d9f8049eb7cf2e1f67435e420375c42e0686 ofl/spirax/OFL.txt +sha256 92f750829545386017c3418d890769778b76fd01dfb41c62fcbb0d42ba0303eb ofl/dorsa/OFL.txt +sha256 656a20870fbcb8f559f1c6308c1df90ac93d7cd0279aab49b43a43b5e58534e6 ofl/neucha/OFL.txt +sha256 0e441ae9f18ad0c294cc5b6ae3974c2db1614cab220598578b1b58c4cc334485 ofl/zeyada/OFL.txt +sha256 4bf7256c8ee73577ee5e26643d3247ec77017ca04489befd3e0f3412827729c7 ofl/laosanspro/OFL.txt +sha256 33e3a83e377c6a41149044bd919f50d9a971d801052d4e0c0a98cb417b42ae38 ofl/risque/OFL.txt +sha256 b4fc1d55ce610f255c5712f8169543f9610536d002deb99bbc99bfbba9f8a560 ofl/pangolin/OFL.txt +sha256 511125dc85198375795fdbc109d088654d3b7f9dbd3ccb7bf93d844aef0b153c ofl/ptmono/OFL.txt +sha256 819e3b25f9b50f12299a3db1638be3813efc6b938f2b86693a218d20ec4e3209 ofl/londrinashadow/OFL.txt +sha256 e3ea566dbf689a9110b2094f9f2e5d16d7ec31720147651efc1005ca20420dd4 ofl/flamenco/OFL.txt +sha256 186d750eb496a4c17a76385f82be6aea2ac1cf2de074a811d63786cf374ea73f ofl/barlowcondensed/OFL.txt +sha256 705960c3281a5765ecc0b59bd4ed7ca59eed165748076bc2fc3e8fdbfeb944b0 ofl/pressstart2p/OFL.txt +sha256 7e896665d0863d2a17a671001dbe2528a5f9302f1dff9222af8b0834e9088d0c ofl/kiranghaerang/OFL.txt +sha256 5f1f5510eff7922864bf326ffa1d4a62f01add5193e9367b542378e5a808b500 ofl/handlee/OFL.txt +sha256 3173acd82f8c6159b5b1037b539fcbd4edff68e65c2ea8b9412b5a5ca97b08ff ofl/archivonarrow/OFL.txt +sha256 82831e8f12ecb6deb2f4d9919a04049895b4619e0301fa6b699c861bd7311c54 ofl/kavoon/OFL.txt +sha256 1a5e3792a425687a523fc7c0f8ab5d01d58bf853149d57f3dec4b4fc6932fcf6 ofl/hanuman/OFL.txt +sha256 7f91d7d8854e5cb4fc630807c0f4d57c07777769dc597173fe0aef5e58f0992c ofl/qwigley/OFL.txt +sha256 354b4be0340cd58e381fdf58793a108897bf944a7f8faf9e877c476ed6c730d1 ofl/convergence/OFL.txt +sha256 1e20933206ca06421c7c378184da5476d195314cf4bcda2bf122cd45d69a956e ofl/oxygenmono/OFL.txt +sha256 a7fe1f3d23034092b015aaeb53d2ecbc9e592be96b10bdfbcf8700ec6a6ffc97 ofl/fascinate/OFL.txt +sha256 4dbbe5c21b46f2647d227dde69b971a1b46de1435e0752a9eda1ce120725a93c ofl/norican/OFL.txt +sha256 1f581506286e960436548dba0701aab278f7e67f2adc6bdae2958923867d1e64 ofl/hanalei/OFL.txt +sha256 56edbe5fff7981dae6f6eff32f61ba04cd54324e5abfa44b1257b2a307ea561c ofl/poly/OFL.txt +sha256 59bda6b53e28d388de5eac7bbb8f3e65889dc8489be3d922f95a525354110c0e ofl/tharlon/OFL.txt +sha256 3fa0ceff4b9a2d28dde43bc63cde3acfb5e6e92d13a53e484ca0e501e18c7e2e ofl/lekton/OFL.txt +sha256 ad9ce814ff266b57d3c4698d3fadca4b41a6f942a0ddd215db5cc66abf92d668 ofl/mako/OFL.txt +sha256 c4afe82f49c05689c40dd4e262803b29c6e611e7b4efd3a0418f574b2be79d9a ofl/carterone/OFL.txt +sha256 f62ef357d3a1c3d27edd35a6e1ba350e8a8d13499797964eeadefbf0b3b15d1f ofl/karma/OFL.txt +sha256 d38acce513eccb51d7ac34ca47be279e1fcfdeca1ed088bdd2d281dc6ca939ee ofl/badscript/OFL.txt +sha256 31eb7046f4c80e0f96944c4b40b0772de68b34783b794fc13aab3f54c2ef6d9b ofl/thasadith/OFL.txt +sha256 06c79c896894160a5810d869a822fa7d02a0e2ccffd97920b8cf3b880380f6e5 ofl/amstelvaralpha/OFL.txt +sha256 4faa2d9e2ce0a4b5b37e62ee6fafe474a539b31578f7214ed97cc3503aeb8ebd ofl/oldstandardtt/OFL.txt +sha256 1e511bb01d29562932157365418c02d954d8faeef794bcd54729177fb2b03db0 ofl/istokweb/OFL.txt +sha256 846e8cc6dc69bf685d2db14cfa758ff3d9d771d54c9e0d3b511f0ecb97ac0e8a ofl/cambay/OFL.txt +sha256 6c181f5a0045e8f414e1c232c35972ab83ea084ac44825f517ba001628d97b21 ofl/kronaone/OFL.txt +sha256 d7f96801a28ea11eaa51bc4a9c87fd91f2133bc298068e6e2847a15ddda23089 ofl/librecaslontext/OFL.txt +sha256 1f00d1f970b4ea469b6936e599b599bb217edaab792e586658ef2e71cf438685 ofl/sriracha/OFL.txt +sha256 22c4588bdc14621220ba14515d52041d1312541e034a15d1f5c2a88fc6075276 ofl/merriweathersans/OFL.txt +sha256 1103d0731f1360eb156b0047a1337b2d62266fadcef1015d06f6263719c0200b ofl/librebarcode39text/OFL.txt +sha256 5b26c88d163b1430561f53fd3d9021d6057f3c67d25534a5d8d232cfbf8ee2a4 ofl/wireone/OFL.txt +sha256 57f8d60cfe9212b971f07253e303746128edd06b21e3a0e4e188308e569f03e5 ofl/orienta/OFL.txt +sha256 c87702d8b70f714fbefb554660e8ca57a43ef62a59089d11cbf0c6bd51d56928 ofl/lohittamil/OFL.txt +sha256 6939af7114f0a33c7e6142d4c1320d1bbde11aebe6d8f3c48fc5fb3e0f676a7b ofl/jejuhallasan/OFL.txt +sha256 9437c26410bcd543607a6775e7d0e359c1df3926d68c92dbaceb26ce79cc0fd3 ofl/bevan/OFL.txt +sha256 50265d2b41f8ad2dd350532d2286509aa694021b4aa0490b06f0068e4ed78c27 ofl/herrvonmuellerhoff/OFL.txt +sha256 9acc45e5ba18b5b38868fad1f51c03df4f5d7a43061d46314843de45c4444233 ofl/ribeyemarrow/OFL.txt +sha256 1fac7a3e4e43b091c2d31aef7a375d2b969c42b2d5fce8e2d40b5f7b1233ddb7 ofl/moul/OFL.txt +sha256 331c71cbd8f1d8a70cd6eec3d55553b64e6261a9bb0982fa12e6e48baca827c5 ofl/philosopher/OFL.txt +sha256 1e20933206ca06421c7c378184da5476d195314cf4bcda2bf122cd45d69a956e ofl/oxygen/OFL.txt +sha256 89418a3c7b5726c3f8828a7b7c3f1cad661cf5b7a1be3d2bd9ea243f8d9890c8 ofl/sniglet/OFL.txt +sha256 5fb0694694dc307d1eb0121689395e634b6329ff545acc53f55ad66a716b3cf1 ofl/balooda/OFL.txt +sha256 89d9d01291eeb91074ccf1f7ce07e7a1d9d421ec1191f8e84d440cb50830ed92 ofl/purplepurse/OFL.txt +sha256 5fb0694694dc307d1eb0121689395e634b6329ff545acc53f55ad66a716b3cf1 ofl/baloopaaji/OFL.txt +sha256 9acc45e5ba18b5b38868fad1f51c03df4f5d7a43061d46314843de45c4444233 ofl/ribeye/OFL.txt +sha256 f938d4076b66a13cf984ce88d92a07ff9802e8ae5e1f4a28cdc43fad122ae611 ofl/spinnaker/OFL.txt +sha256 89bf0833b785c49b0f271273ab440bdc20c85bf0322537dc901df940bf1579da ofl/amarante/OFL.txt +sha256 377f4f9c19e935228552478eb68cc2ed82910988a60ba60e2ac73b09f32d02d1 ofl/patrickhand/OFL.txt +sha256 684ef102ca4c5ff61cf1c1e5c2c6326f3c26f848446f98b8862dcca716a87601 ofl/quattrocento/OFL.txt +sha256 f62ef357d3a1c3d27edd35a6e1ba350e8a8d13499797964eeadefbf0b3b15d1f ofl/rozhaone/OFL.txt +sha256 61be7c29f4835e2be7243db12213d75d53ff028f29f4b493212a1688b1d3a1ba ofl/titanone/OFL.txt +sha256 9df0700fcd0ef48abd74459a8650d35f59397fbaa00c5b00527e57cc155689c0 ofl/durusans/OFL.txt +sha256 b1958132ff727bd74409aa37ec0abbe4be13b1b379e1210e6fb77fc608c607d5 ofl/kodchasan/OFL.txt +sha256 f1888ed385b528866a472d02f4e06ef0873aca5b3c63ff1f6116cbb150dc9a13 ofl/metal/OFL.txt +sha256 e36d420a3b382b337c386338d8abc3635e10de5dfca7f822fc63ac659a0dcfc3 ofl/amaticasc/OFL.txt +sha256 8fbe530adcbe30c658393c3f2b5a4785d6765afcefdfe47f594730131f3a0abd ofl/oleoscript/OFL.txt +sha256 60ddc0ee6e443b78940b5f92bcbab76c98ec6965e0da9fbdaf267383ab72bba8 ofl/anticdidone/OFL.txt +sha256 afc1b710d644c1262e1765d2401abcf93a545a4cb051955e2243fbabb8164e25 ofl/carroisgothic/OFL.txt +sha256 3184f6a99f589c78740fbff6ddaaabb43b8cc2f3852da36e60aeb024ea8d6f00 ofl/eaglelake/OFL.txt +sha256 f62ef357d3a1c3d27edd35a6e1ba350e8a8d13499797964eeadefbf0b3b15d1f ofl/halant/OFL.txt +sha256 9a9f089005f389717106bb3ba427cda9bd51b8a477078644566543f2a60ca85d ofl/rambla/OFL.txt +sha256 99d2f30e282d6174af8ff68597f58bb53c0dcb2b104a4c1b8d19da49021d00d3 ofl/unifrakturcook/OFL.txt +sha256 2bb0c0200723d923f8e20d08b8bd1c7af7f5cef8bb2d63ce44bd268b54334621 ofl/fjallaone/OFL.txt +sha256 72afba97d1ac9409a9fd3bb91a02a639427ca1988977909dad273e293a508d7e ofl/staatliches/OFL.txt +sha256 88aece7d90f2bb7049719f11619a560af22af3451af141f12aa4f46bb157a99b ofl/lobster/OFL.txt +sha256 955655cafa13f187f45a79dcf451942fd1118a8426abc5a25ffc5dbb00709da6 ofl/juliussansone/OFL.txt +sha256 9e1c955538817c3fab7160cb3110501e73ce109eeb58c4992a14e8323d900849 ofl/pecita/OFL.txt +sha256 96d82a96abc02fb457ddde0227833dbde9d1d02876c91f0a4e27845ca0d692fa ofl/atomicage/OFL.txt +sha256 7729f005b7a087368e2cf61fc4b65cdc85988e47d0e6e38c93a72de345e86b41 ofl/newscycle/OFL.txt +sha256 336fab6956d78eb34b50cd7bc6b16116c44735fbd0bf9f4def769ca4d8e218a9 ofl/sofia/OFL.txt +sha256 b26cae1321380296ba8311b632a397d5eac11b47197f9d0aa0b9310f1531ad60 ofl/sarabun/OFL.txt +sha256 aa8a8196a3e22c3bd985e33cd3245ae9a38accba5e79fc0e3b292612a8d6b337 ofl/suezone/OFL.txt +sha256 d3711c90a7deda6210d30e41b945f16bdaa00662b30ee0b7c36abfee82525bfe ofl/kokoro/OFL.txt +sha256 513b7871a360a6eccd426bab59743fbff36764588f47381423f04ad6b3d821d9 ofl/alexbrush/OFL.txt +sha256 67f64c5509e5151796599e3ad47c3131cbe0c80c4f9430b90236a1249c2eacc9 ofl/roundedmplus1c/OFL.txt +sha256 4a7d2f227b91046ef7a54f8f735668d86e45f4fd4089268de292a6e9de108253 ofl/bentham/OFL.txt +sha256 3c187c861dc291b9f7f96f655656f9ac2d57b33da425bd5962810be728344f57 ofl/brunoacesc/OFL.txt +sha256 869e4c29978c318b33c2e5c7c8f24d2e947f249071bb1471620036a9d1ba87ad ofl/k2d/OFL.txt +sha256 6383249ddffbd87f2bbd7878ceba2dee0f1a2193cd7a4f41c00aaceb8e6d8b5b ofl/meriendaone/OFL.txt +sha256 ed50ebe2fa922554980909192526fe94966556626d6d440a462c8e7eaed74cdc ofl/sortsmillgoudy/OFL.txt +sha256 d64c91b0306b53fabed08762068eea8b918d654fb0721c288f13cefa4aaf088c ofl/butterflykids/OFL.txt +sha256 bc1175730d609233043cde47e48f69831f012e85537c5ec1a2cf4836757c1540 ofl/mali/OFL.txt +sha256 fe5e822667a4b2e083b8fdd7a37546163f26f6481b58742236abffdcfb3e6c71 ofl/baijamjuree/OFL.txt +sha256 b0316f404a7b291e40921c605160181065791a5010a2d2d5691fc7e28cdbdff2 ofl/underdog/OFL.txt +sha256 c026db4c1a557cae47e6930876965f9cbc05758eb1f5d6f59b6b61c8f342a57f ofl/alice/OFL.txt +sha256 aad1e82802172d4c1d22dd015a5b8b4275e5665a49c1df54ed64716fca7ae194 ofl/corben/OFL.txt +sha256 878aec7282ab41d058cedbf90e14512bcb4fbd0658496de8c2dfc592ed1f0cd0 ofl/lilyscriptone/OFL.txt +sha256 2a3ca501fc4d5efcad9798531e3e06962b1e20c60e464f6cbd6c17630112c773 ofl/imfellenglishsc/OFL.txt +sha256 f62ef357d3a1c3d27edd35a6e1ba350e8a8d13499797964eeadefbf0b3b15d1f ofl/sarpanch/OFL.txt +sha256 aff3cea99bf300b4b29f4dc04867cf9b49d83de8c5ecaf991c446d506b56173e ofl/wendyone/OFL.txt +sha256 b054962de0af1397d5350fddb4d6bb20f5f2e073b543eeeb694c7c3b27144fc5 ofl/chivo/OFL.txt +sha256 19849b33c59d0cffeaad0dbdc38db767e95e03cd36fbbfe6b67a9878aa5758df ofl/fasthand/OFL.txt +sha256 a57810cbca0b4715ae8610dd7a268260cebbdd4fd76d304e371517f828150669 ofl/stoke/OFL.txt +sha256 47a0b7e315bc56ca0326fca46302d87d48a61e3528d4196e966b62f5bf0243f2 ofl/armata/OFL.txt +sha256 eeacf16032901d0ed0456876ec77b8f0fda6b3fecec7d972f8543eb602e6c30f ofl/nanumgothic/OFL.txt +sha256 616e75d879831bedfa7725c078e09bb56f8a17f40b194e16691b12251bb42b3e ofl/majormonodisplay/OFL.txt +sha256 75c7ccf4f537a7a3ebbedd299c1d2542e13d3b27aaf76a0a2d9fa91a2a8fcd3a ofl/felipa/OFL.txt +sha256 ee2c069b30f3e9a5aaf52357117ee3443ee27f17c29a2ec68861db283379905c ofl/dynalight/OFL.txt +sha256 fbe0442a6b1ce162c95e241df76cab5ef2daf6a5ac84ae1a7a6749f32c051098 ofl/breeserif/OFL.txt +sha256 43d530580461a574f6dfed9e15af6a74e95f7c04d9bfa1174a63ff036e8eee07 ofl/rubikmonoone/OFL.txt +sha256 40bd3f35477284c021978816e9d3b8723ff2283fd7065fafaa5bb3004e41b237 ofl/songmyung/OFL.txt +sha256 460966d12f306a007930575c3b8bc336fe0c32f880d622af6d3b745a06ca79a4 ofl/benchnine/OFL.txt +sha256 f6f60d5d4cf4f4b1fc4e41353c897a2f5a16e6396c0cd8fa8bdfd2f4586a9a68 ofl/alegreyasc/OFL.txt +sha256 0c922e2d65050677c26ae8dc501bc9ad3e0059c4b10df2fc9717d7bdacdfeb6d ofl/ramabhadra/OFL.txt +sha256 548890e4083028f04e5feba04b6e00554654d840aab81c8664eb66c2216a571b ofl/palanquindark/OFL.txt +sha256 e39d6ec64a37ed1523a59940695a61ea5e7882d9bbe0e7eb11653fda4b04fc79 ofl/kottaone/OFL.txt +sha256 1bfe7d2aca99042eabf37079152fef8abdda2c36dad454ae89b858a3cb1078c5 ofl/forum/OFL.txt +sha256 5505d1a010ee0f2eeecdf624984d2a6170480adab3091170abbcedd85361f1b9 ofl/novacut/OFL.txt +sha256 715ba72697e14daa9b29a333545f69bde7c497b9f77d0a2a4c4a5a752d961801 ofl/marcellussc/OFL.txt +sha256 0786594992757ea0290ae4a490ab9249728f372adb13959c0c8ae4fec83057ff ofl/quintessential/OFL.txt +sha256 ca13e9cd1faaa6afb9e43dcb534a8984cec3218993fb4b436468a79a1657ee19 ofl/keaniaone/OFL.txt +sha256 760fb433c515570f6b77ebc60299c2c91d5f03848c659452a9d2458b28935768 ofl/numans/OFL.txt +sha256 9134ca6996bd33ea2022e109f13f20e29dee1dcd8b2e8878aad576d2ca334e9f ofl/cormorantunicase/OFL.txt +sha256 1d1b7f3480c8d9b65c26d205e41dcbfa85731588d6ea50bccfa78e91f242d629 ofl/loversquarrel/OFL.txt +sha256 1d08c63944e639bbfe8a1b81e3c6a63836806c126b3573b9cda0db83fd27ffe9 ofl/prompt/OFL.txt +sha256 eb6c70cb6b575ad22df022d454df7a20582915e6e8da19b579c6cbef37a26bb5 ofl/gafata/OFL.txt +sha256 93f60741563b4f51f2fcdb207fde72b2b23292a47022c729aecd998b360d8038 ofl/bilboswashcaps/OFL.txt +sha256 4579982a484a9745864de2cda666fd7b5017f9182b74dbb4cd53d84c1d1b2231 ofl/gruppo/OFL.txt +sha256 cd059851dc2abcd2865ae318e8b949736f958794210acb90316530fd100fc904 ofl/geo/OFL.txt +sha256 af9b97696048d509e3d70f8108b7c4381084f95c8fedd97acaa76b0b287668be ofl/molle/OFL.txt +sha256 6958d8c61b6b223f81bdc2109941e5d0004996dde61e197d628e0293f4f1bc58 ofl/miama/OFL.txt +sha256 7e98b49a12b51240c85b04eb0d9919a6fec7dbd491bef6cbddc22d3f851bd1f1 ofl/marmelad/OFL.txt +sha256 b9d592c3bf421197d9b7e353416b8e2ec81584988824b43d38c86d997a08b868 ofl/myanmarsanspro/OFL.txt +sha256 e414e07f7a4da16ed47ebec80d52dd79f21d3ca42bc92385a755d8078a038814 ofl/playfairdisplaysc/OFL.txt +sha256 0e2ccc5da1dd979f08ba82bca2fb61592506a1e58d3cbfc26d904f0db71bd812 ofl/sairaextracondensed/OFL.txt +sha256 bc85bae0b512b799bbfb2b916e4d0a34cfd963d09778cd783e248b479e67760a ofl/comfortaa/OFL.txt +sha256 caa697668c3cf3e622753fb202c6c2e29648b94a3499dc7b869a14192e38c553 ofl/sourceserifpro/OFL.txt +sha256 81d6c3788a6b641cb9f543389d9d5c0cd3bf94fbb5639be19c102b9274c34291 ofl/mousememoirs/OFL.txt +sha256 dd028a807788d5e22e9f8cc18f026cda23369954673658f2ecc7d30bdb364b89 ofl/arya/OFL.txt +sha256 53f9c99fa3d47f7d632a42ee7bab4a834a60a744f6026d676c3a223cef2b2ef3 ofl/vollkornsc/OFL.txt +sha256 6506b2fa2a14259a8859608a6148a4591d67bbaef4d8e1948b43c4078561b0e5 ofl/tauri/OFL.txt +sha256 6cca1abc09d677cf00a55674ce2775e0eeb6dc5c0137b0401816680b9e500f81 ofl/marvel/OFL.txt +sha256 e98ce988fba1c138f4e7c0c5120809706ab1b24a3c29638ca83ab2ff082e08db ofl/chango/OFL.txt +sha256 0e2ccc5da1dd979f08ba82bca2fb61592506a1e58d3cbfc26d904f0db71bd812 ofl/sairasemicondensed/OFL.txt +sha256 42e7b456fee0d0dc86927579b3d2626d42bb0f4cc9778f3a92ca8ada4e46348e ofl/novaslim/OFL.txt +sha256 1b8eef90c567309fef17962cc969dd9ed1de69176517238e744018bb983e7c1c ofl/mandali/OFL.txt +sha256 9e262d6d7fb789aab6a8ecc53fc9c78387eeb9f935dcd289282d8e751b6bf743 ofl/antonio/OFL.txt +sha256 07dbf75115edfc1fd75580aa19c4c730201a099e8f86a9869887dfbed0547266 ofl/offside/OFL.txt +sha256 f177d98c67b84250ec87a03ca6ad161e84cab15b435e960039b971797a065f4a ofl/martel/OFL.txt +sha256 bb3e8082faf86b1474a6b042125ef0f83669d28110b72f70416a7587b7b9f144 ofl/unlock/OFL.txt +sha256 c4955dfe15a5db10326aa58ef767460c42cd12a3acdb3e698eee2704eb373d94 ofl/electrolize/OFL.txt +sha256 cf6dd07485d67d20f105afb9981dffdb6b180b59af45a228839cf3fb0277c9fb ofl/arapey/OFL.txt +sha256 87e8d9aca71dbe0481ba8611fc90d7e3aebfa3e2546420c403e7078898b0c484 ofl/allura/OFL.txt +sha256 55e13d77a4457aa9c60f10c5b97baea3343d3bac30960d49554a033cb9eaff7c ofl/sail/OFL.txt +sha256 1c5bc055869d5e9151ec7774082727db720ec4293c65be67f91a4bdcaeb02998 ofl/righteous/OFL.txt +sha256 de5ff32211a4340b01477af39ee339d639438955e409f79b666d4b9207f3c92c ofl/dohyeon/OFL.txt +sha256 0e441ae9f18ad0c294cc5b6ae3974c2db1614cab220598578b1b58c4cc334485 ofl/waitingforthesunrise/OFL.txt +sha256 2a3ca501fc4d5efcad9798531e3e06962b1e20c60e464f6cbd6c17630112c773 ofl/imfellenglish/OFL.txt +sha256 44a7c6e4c5572392ae122d3b1d8c6ba6fd640a7797e675384585d947f2773e3c ofl/jua/OFL.txt +sha256 1ba345a91338581e5f8fccc3e37e447ddea5b99ec9caec1b76c7c39492387d2f ofl/signikanegative/OFL.txt +sha256 9134ca6996bd33ea2022e109f13f20e29dee1dcd8b2e8878aad576d2ca334e9f ofl/cormorantgaramond/OFL.txt +sha256 9ee6b2ec20a06c599a07412690876eb457bf192c10e886e60d8bdffb80bc21a3 ofl/sahitya/OFL.txt +sha256 dcc832bd71ea62cbf97f06327a1b5442905b49ea446801421d71f7d1362db215 ofl/dokdo/OFL.txt +sha256 8aa063e3a1299c5e1821f386f5ca8bc157ac561bd12c739ffa81c6f0821450c0 ofl/donegalone/OFL.txt +sha256 e588abf45ca2b19c340c4b27349c9b6b6e5e198316fd965128ed9f4422942cbe ofl/raleway/OFL.txt +sha256 9860b97028024085855e503e32c1971bfd603374641cd018c136433ebcf5a338 ofl/gravitasone/OFL.txt +sha256 ee9d043332991eb6bf2bd56fb04db3c558c1ee2f0cb9aa7b18366c77e34fef30 ofl/jura/OFL.txt +sha256 15b1a21c3fa37a475ba6b0c0cfe289c7952548caf6e432068ddaf98d139ce419 ofl/belleza/OFL.txt +sha256 c5a77946a56488790364d060628385d51226da62a18f30d2be0181d82ee62b00 ofl/suranna/OFL.txt +sha256 36e2f1debc9778bac79fac1a0cb5a5ef51c102f00b58ef7d8a05324144b68166 ofl/megrim/OFL.txt +sha256 0fbae33ac3aa455c8c0d598347c87f1abfac0d215483f40f5a0e8dd08076df1b ofl/librebarcode39extendedtext/OFL.txt +sha256 f62ef357d3a1c3d27edd35a6e1ba350e8a8d13499797964eeadefbf0b3b15d1f ofl/teko/OFL.txt +sha256 d324289a26909a519fb16c3d468a56ab909ad6d9070cac5742e5d59ad9bd9815 ofl/gildadisplay/OFL.txt +sha256 c0bcb72e68dd416db0bb9fcec7a7fa62321b0147cde00d8c8f82748e33aefd34 ofl/novasquare/OFL.txt +sha256 794d72ffdd25e8f7ca8e1d68db088c30ddbf2fdb369b6cc8217d4fa5fa6dc62f ofl/adobeblank/OFL.txt +sha256 806cb93632b8091cd36554642a96b2752bab50015da6a2b456d786c1f9aef5a5 ofl/carme/OFL.txt +sha256 0677891e6a143f297350d260ad766ad33bfc18ed5fa4f213acf648d6b597ec1a ofl/alegreyasans/OFL.txt +sha256 08b6f5cceaefcf2881eb009adeb78edd0fabf9c8f0eaf8b88f07a690222227e6 ofl/varelaround/OFL.txt +sha256 3f0f27931c92453994176af3b1e7954f9aac39fe145374d6d08c47c822e82e59 ofl/princesssofia/OFL.txt +sha256 2ce1c4fcf4ab9c8474d0824434497d4afa4425db4de5629103698b170ac4ee74 ofl/bungeeoutline/OFL.txt +sha256 455397ca15d39e9178bbbf4b485a29187751d60f7ceb7829980a521d5ab6848d ofl/sofadione/OFL.txt +sha256 b7574cd4c76770e5e3915d16bd93f09663bd77cb041a4ec09d824c52b540529a ofl/germaniaone/OFL.txt +sha256 39de3de5f1873f89bca4af37823ab22e28e88d0d8f7fe2f07e82e9e6e9bf7b70 ofl/eastseadokdo/OFL.txt +sha256 520a0c239d39b379b61c4de5f8e3b02db20b0dfc137481843eac01f02c41f4a2 ofl/aguafinascript/OFL.txt +sha256 ffaf7bc750bdaa0b95b09eb80e419748bfaf46268c6612860f0a5e19e17abb12 ofl/orbitron/OFL.txt +sha256 c6b9c7322fe0203d4d8a0f98541136d8d76da76b92c79d206b09991b98338cc8 ofl/gemunulibre/OFL.txt +sha256 2f871c2e81de6d0c72c981615002c30bc9f1637003d6d3d4c3f0149886b70569 ofl/mervalescript/OFL.txt +sha256 5fb0694694dc307d1eb0121689395e634b6329ff545acc53f55ad66a716b3cf1 ofl/baloobhaijaan/OFL.txt +sha256 842b4f4605b32518a1269c4d030d719ea2c4c317d699fc4441d0219658e18893 ofl/seoulnamsanvertical/OFL.txt +sha256 00a6fe8dfdc48d6206bcc4f10a765515a73433dfba7255eff966963beb26facb ofl/dhyana/OFL.txt +sha256 cd2dea62cd4b0c5fb335cf07ff04fd5c4bacb49b8d6c2bbbef9766c663d79b1c ofl/patuaone/OFL.txt +sha256 c0a8947de199b422d30c16137e4decd5362e3a1d504422880d69c02bd6046dac ofl/cagliostro/OFL.txt +sha256 c267a00c9476c78a2336d7b372b536885b8b24173a29ed53496f67a742c14961 ofl/alef/OFL.txt +sha256 2cc926050c4c6ccd9a0288b7792e2fcf93e5629ee6269e35986f092275e5a1b9 ofl/sarina/OFL.txt +sha256 f1bce31b817dee01c1e4ef8bc45d8ecb95f01f4abbf0a985007cb3cd0fd8123d ofl/zcoolqingkehuangyou/OFL.txt +sha256 9788e3b3e67f22ab5846a0bb867a230e7df2468c3cd20f730a5d9c34e673d090 ofl/rubikone/OFL.txt +sha256 f3bc8767749fc133d9b35e84ca024b82f1ac4d1b38deca0adcf8300892303022 ofl/faustinavfbeta/OFL.txt +sha256 ee81f11dd1970e9749afd2a572256f8eefce65532872762a4d7a3d5daa0812c8 ofl/shojumaru/OFL.txt +sha256 4f4bc3806a1e55789c6ef75ca5fc628297b05292f74966474dc0d40324abc609 ofl/abel/OFL.txt +sha256 064539f87826887d2062b7823b2b97b7625d68b642f6c945c99c0b8dc8084195 ofl/rationale/OFL.txt +sha256 a345b13576140008a697ac66ca8c76cd63b1dd076712bc30a0f5e97dcc53cc83 ofl/markoone/OFL.txt +sha256 203693528d6d2e8dc5e639c6ea42b3e825b59dd6447294e37b306fe734650091 ofl/arizonia/OFL.txt +sha256 9ca8b9e5db7184105da255bb110023cf1cce6caa56186341bb7b09ba97b20ba5 ofl/fanwoodtext/OFL.txt +sha256 3997621a219c7758e31dbafdd3cbd2bcb0b6144a41d1ca068d04dbcc4bafcde6 ofl/milonga/OFL.txt +sha256 2ce1c4fcf4ab9c8474d0824434497d4afa4425db4de5629103698b170ac4ee74 ofl/bungeeshade/OFL.txt +sha256 162a3b5c72cba845280a6f887c11d02984540b924510138c8b1eb473bcdafb6a ofl/concertone/OFL.txt +sha256 21b54eb0d7513524798a00dfbaf99a02c003a0012a728cc5f0e02d24c50482fb ofl/caveatbrush/OFL.txt +sha256 186d750eb496a4c17a76385f82be6aea2ac1cf2de074a811d63786cf374ea73f ofl/barlow/OFL.txt +sha256 9551ade371e7bcb1f6d9959273bbf1fed3bdf398efb5c57cc1fd85d6a13e9e5e ofl/londrinaoutline/OFL.txt +sha256 f15a9a3a9a665c2d17655b8fedad86d9a8f30081d46bb91236beb1bc7294a589 ofl/akronim/OFL.txt +sha256 76a55594c9a18b7d94b8119de838237eb834bae4e8c646d6d363aee587b7b427 ofl/slabo13px/OFL.txt +sha256 0e2ccc5da1dd979f08ba82bca2fb61592506a1e58d3cbfc26d904f0db71bd812 ofl/sairacondensed/OFL.txt +sha256 96b7bc175186cd0153a9682a1c9bb1da7103ab13a83abef8026bc64582ca616f ofl/oregano/OFL.txt +sha256 6fc386ac48a529b85c21f90a6c8d2111c6271b3063f9ddd78e92645db5259510 ofl/tulpenone/OFL.txt +sha256 13e862ac3f67130f58bd4bebb61c588d147b5a555b1ac6959570799c4f648cd0 ofl/capriola/OFL.txt +sha256 d24ff874133ecd133e55d7c4070d2edab14d3933477c2bccb3a0d8d1cc9c33bf ofl/muktamalar/OFL.txt +sha256 85814924eca98e1fa530901cc5167d0012aaf31122f9570d7e9755443dd9335b ofl/siemreap/OFL.txt +sha256 f76c1013cffb3e0de0e7dad19ee5b4b7849c7ab10b67218515e39cfd87e554a7 ofl/julee/OFL.txt +sha256 c264f64bb2b91ca0dfdeab75d71719120271fa6a30035396416af235ef481c1e ofl/merienda/OFL.txt +sha256 d102f22055cfa31a9659228483de3c726010f0b3b416b78e3cbefcb54816e812 ofl/galdeano/OFL.txt +sha256 2db02cb5d05d5f8a003ffefce36a32a16520ad4cab9ed90635ff953b583e4e82 ofl/sigmarone/OFL.txt +sha256 cdcc959c42ab255b4cea4bd82f2db5c24a2da7ecabe615d02d5a5dba3716e446 ofl/racingsansone/OFL.txt +sha256 c88333734ad7cd30540ec6614d12aa829a0395715de30e336d22ddfa3005db42 ofl/catamaran/OFL.txt +sha256 26daffa24723bb188643085cfc5423f9d78d22a395df4a7928380e430545a201 ofl/bubblegumsans/OFL.txt +sha256 de2246895f0ac21fe05b095d586d36cbc9f987ebcaed1e050c61e69667caf1c6 ofl/hannari/OFL.txt +sha256 b54d54664cddcbf05f5b4ea3aec7e89317eb917cf465920969e7b22361e0f4a5 ofl/seymourone/OFL.txt +sha256 46239ba6485d28553fd944da4ad32a00d9c403aa1c3e111676b0b96fe458d1d4 ofl/averiaseriflibre/OFL.txt +sha256 91c25c350d3cac39da2736d74f7ba37ef648f5237a4e330a240615bc8d8c4360 ofl/ibmplexsanscondensed/OFL.txt +sha256 5802c9e3509199c7aa9a13ea410ae27febbc0cdea184bf7d227170fac703bba8 ofl/passeroone/OFL.txt +sha256 2400b30a72d2b1555255b81625576dfb552584a19a9c85ad8d43ff77bceab13b ofl/plaster/OFL.txt +sha256 4bed7eaae70cab1bdf2bcf9b1cb562fcd9cc26d1c3533c4ade0ec70516dfb3a4 ofl/trykker/OFL.txt +sha256 45b1f44d2cb859ea4b7be2f322c57b8ff7be55075c336744e62b5550cd0a97eb ofl/medievalsharp/OFL.txt +sha256 19c6ecf65a6b0687dd324b093ced5f1020a1fcabfc8ddaaeca6906cd05153e23 ofl/overpass/OFL.txt +sha256 ff1f38ac4e694a4ad5bd3d7a5146cd8bd73fd57aae794ced76a24b0d68e41206 ofl/pinyonscript/OFL.txt +sha256 6aa923334ec515d26b1a61bb978a0bb5bd8884de7529add1625beef2f4a53f74 ofl/nicomoji/OFL.txt +sha256 cc8c0c3e81cf543e190f128b83ba7c30959f15865c14dd972fca4917faeceec1 ofl/encodesansexpanded/OFL.txt +sha256 38fab5a643fa935a4e11edae2d7b2bbe9866b4f4828c2be2f41451b3f27cb67a ofl/paprika/OFL.txt +sha256 a5fc033225d145b43fd7391482ae7689825414ce29a01614d651a3012b57c81e ofl/monsieurladoulaise/OFL.txt +sha256 ecc91fac753ad9ba5bb7e7819a5c59ee1e3cf89032133c6b4b0318d63c35933b ofl/alike/OFL.txt +sha256 6939af7114f0a33c7e6142d4c1320d1bbde11aebe6d8f3c48fc5fb3e0f676a7b ofl/jejugothic/OFL.txt +sha256 2a3ca501fc4d5efcad9798531e3e06962b1e20c60e464f6cbd6c17630112c773 ofl/imfelldoublepica/OFL.txt +sha256 9cd20277e2c89d47e3997435e3a16539d20173d850fbb42474990f71642e473e ofl/mate/OFL.txt +sha256 351740da2d452b48193483f22f64918a6dfd64a7abe225c6187ad3f36e0d9cd8 ofl/postnobillscolombo/OFL.txt +sha256 aa8a8196a3e22c3bd985e33cd3245ae9a38accba5e79fc0e3b292612a8d6b337 ofl/secularone/OFL.txt +sha256 cc8c0c3e81cf543e190f128b83ba7c30959f15865c14dd972fca4917faeceec1 ofl/encodesans/OFL.txt +sha256 136a256d6050ed32bbf96736d70b9099c6359e83dabeb6847cdf6b8ef84319cc ofl/kantumruy/OFL.txt +sha256 72060253bd481a8dc18664bb9117072dc07c0f0270a40617c230654821774850 ofl/pattaya/OFL.txt +sha256 56d9c3529facf93873a2a1626dd038054d244b3af30a1e3ffe0e78bbda1c7622 ofl/preahvihear/OFL.txt +sha256 1a2debd5ad8e656b26bb3b29213caa8f7e557a2f31454b11ebb6c3e3b59aa5d4 ofl/cutefont/OFL.txt +sha256 f62ef357d3a1c3d27edd35a6e1ba350e8a8d13499797964eeadefbf0b3b15d1f ofl/kalam/OFL.txt +sha256 d941c5b788d47aa469ee54e30f4c12d6a43c45a295f10c568bdf9772f2893b7b ofl/oranienbaum/OFL.txt +sha256 5e0da210fb04058a8c0087985d2d456b931c2579811a49655721d3cf0c36b6d6 ofl/notosans/OFL.txt +sha256 5ae0cfa62a70251d9a2c3c5430ed3bafa480005f23e4b9525488f2318e5c10ca ofl/mrbedford/OFL.txt +sha256 0acef93ca37cf19eeb83a1c6a29b78b08377a211c8d80cd27626e210176828da ofl/kavivanar/OFL.txt +sha256 c0562e066174197902a4a10606673d189f067970ef89c6013943b9cf182aadbc ofl/titilliumweb/OFL.txt +sha256 f8fbefb5b1004615e6d1e84b1c75e68520d91196f600cb1b07620dd2748eff64 ofl/cantataone/OFL.txt +sha256 2e2cb5a98da665f2ab82a9fd01fb18c2337f845761b0c163f690ed65f3b94677 ofl/sacramento/OFL.txt +sha256 251f65282ff48a7e8ef3fb661fc99254d9b3b0c368427c98b1edbfe4ca66e888 ofl/katibeh/OFL.txt +sha256 31bc966c36352bfd33717382786d0458c38ecf540628ab134e0ce35fde801d28 ofl/poppins/OFL.txt +sha256 f016385cb4b360e7698d22a48c6b58c0634b1ed5c9c17df78515d43887511df6 ofl/yaldevicolombo/OFL.txt +sha256 0e441ae9f18ad0c294cc5b6ae3974c2db1614cab220598578b1b58c4cc334485 ofl/swankyandmoomoo/OFL.txt +sha256 b712dacdda5da76c0213f8478886f893b855665c1153ae438bc3e55a7dc525ef ofl/kurale/OFL.txt +sha256 74584d937293a9cacdcd2eb05851b71aa1527901c18b87961d2f877c77a1b486 ofl/chonburi/OFL.txt +sha256 8f187da1eb4f23e3fe7ba68b1cb2e92881a415dd34c46489698454517e273c4f ofl/krub/OFL.txt +sha256 3336bf5d4e7eedba48ecb831f37bf676e901c39f2e6a422cceadd9d2ffa55be8 ofl/kaushanscript/OFL.txt +sha256 bb655534b6c7bf3e547c1368a68a5b1032d0e96fd08b5cc75f3d7a78528784ef ofl/novaoval/OFL.txt +sha256 04b895d77ccec5034191e953e8e5884637269be15fe0675fc25039014eb46349 ofl/monda/OFL.txt +sha256 d724dea493d89a7a9681186e2fb462b7cd551674960ee4142ae6b325261b5115 ofl/hanna/OFL.txt +sha256 64ecb0c6bf5cd80c3da76035c00671272966afbd32ffbdbcad95a8b56501fb08 ofl/decovaralpha/OFL.txt +sha256 0cf28cdcf1cdfd35054352816b2d8c81bd6d6f73632198b61507f26dd4dcbeea ofl/sansita/OFL.txt +sha256 d69bcd35f4a121b312a64f7e8eb15bed61c9056e9e9cdaa8d513366142c8e005 ofl/rosario/OFL.txt +sha256 b4cff421cb89d1e32036e818f291f8ab0d3294ada70b5883d5bcc6470b869702 ofl/eczar/OFL.txt +sha256 ecb52bab55d8d6185712fe8fd2fd98300f5c8c07fad0d0a97b1e579462b0dd3f ofl/bayon/OFL.txt +sha256 ed95c33f80ccca002e3a360b683c43368f9c5eb024e5b992abb51af3c10b59bc ofl/gothica1/OFL.txt +sha256 66b5c49d384cba754806a891ebd52f2ca08dd05c0eb3c56170192da466a00a20 ofl/londrinasolid/OFL.txt +sha256 284a5a26e6db9a04259a5690ad57d52c56a4c515ca2ece1943d950f99e709dcd ofl/belgrano/OFL.txt +sha256 6cbe0f55c154b5dee71ca4f2418d69e4e916448ef2ab52dc4541197b292efa24 ofl/sonsieone/OFL.txt +sha256 255d5debbb80eb2ea762644311f266a279e8778f00156655a516e2b7781a63e1 ofl/lilitaone/OFL.txt +sha256 490b8f3acbce2331adc9b9d3e75ee6fe07946fb29af429a300c7d066b1250b2d ofl/crimsontext/OFL.txt +sha256 eeacf16032901d0ed0456876ec77b8f0fda6b3fecec7d972f8543eb602e6c30f ofl/nanumbrushscript/OFL.txt +sha256 f2c0dfa02d6f5c444b4babd7bc0b43be77ea85706e8524342516bc41e43c2f01 ofl/fahkwang/OFL.txt +sha256 4398885e6b303830d81eea03444aae6fb08a44f41b6acd193c88a2f8cd17606e ofl/srisakdi/OFL.txt +sha256 c1f8e0feb0babaacf774b971bcfd791e44125b9d61ff074e4c20924e9661556e ofl/antic/OFL.txt +sha256 6a73f9541c2de74158c0e7cf6b0a58ef774f5a780bf191f2d7ec9cc53efe2bf2 ofl/notosanstamil/OFL.txt +sha256 0b1bada9befa95a40d55830fe83fc7f8064e245fea33bdf0f96f57848f3866fa ofl/codacaption/OFL.txt +sha256 b41b99f35b507564e54f6b2f5162ad1c21f94a16837c632da6632b376a341f42 ofl/nosifer/OFL.txt +sha256 e8d0118fa9d640543e7f6848d1d93f47313c7f56b64f73f37291d859cd5932bf ofl/souliyo/OFL.txt +sha256 bff4e5087ece354afccd073621197bbb7dd9349943b5ee6aa12b1adf0b133081 ofl/happymonkey/OFL.txt +sha256 1f581506286e960436548dba0701aab278f7e67f2adc6bdae2958923867d1e64 ofl/hanaleifill/OFL.txt +sha256 03082243ebc53e2090bc59987f693982ccee83b30516457b11f6a2349b78f5f8 ofl/rokkitt/OFL.txt +sha256 1152ca18eaa6159634f1eb209c60df360c1c09a52991e392f8033702036634d4 ofl/assistant/OFL.txt +sha256 012b1870f81b0d97ca756edd9eea315c7fc22657ac2f1cbdfcb6772fed3e20f3 ofl/bhavuka/OFL.txt +sha256 ce1108854c91696a8549bb21459f1dc74e8a1ec11664d712c3868c40042f1a8a ofl/rufina/OFL.txt +sha256 bac36a7fcafc5702d9d928bb81c7de9f8739eaa820e546c3d2cc52730b652af4 ofl/devonshire/OFL.txt +sha256 ac987f9cbc5b18d3239d88adb57a4e134049811d24ddda2f6383faa589fd2727 ofl/holtwoodonesc/OFL.txt +sha256 f3ee3eb20a9d565bee2bbc0d616de382a113327d7506565b2f3d3bee5f489375 ofl/bowlbyonesc/OFL.txt +sha256 965bd2c907f7bb6f36da4f85e83f29aea8b2f720783deebd7ed7b40678e67672 ofl/mysteryquest/OFL.txt +sha256 cc8c0c3e81cf543e190f128b83ba7c30959f15865c14dd972fca4917faeceec1 ofl/encodesanssemiexpanded/OFL.txt +sha256 19e186a088a50835b38b59409a76b8df2d0252ce114a99e79e306231bbe253b7 ofl/dellarespira/OFL.txt +sha256 aa36087ecd7e9085e5a1439b0a6d0ee35966e8cd2ccaa649bebe62cae5815e82 ofl/lifesavers/OFL.txt +sha256 2a3ca501fc4d5efcad9798531e3e06962b1e20c60e464f6cbd6c17630112c773 ofl/imfelldwpicasc/OFL.txt +sha256 0e441ae9f18ad0c294cc5b6ae3974c2db1614cab220598578b1b58c4cc334485 ofl/loveyalikeasister/OFL.txt +sha256 a9ef1db03f660130790beeb3b5d91b68536a44a98ec2db3097d02a1c5f91c599 ofl/buda/OFL.txt +sha256 de318dcb99e332a746edb9f83180ee206fc3bce74ff96ad7d1cb219967ec74af ofl/pollerone/OFL.txt +sha256 315a576cbc7ab61c9e347b5725893bc8498fdcb8fc10831793c6864bc2cefba8 ofl/gudea/OFL.txt +sha256 41f82bb4d24b304f30f7136bc47abdd083782e4265c984160f5649d1e78ea49c ofl/montserrat/OFL.txt +sha256 5866fd437bf701cd93f2c41ca2a8b33786975c947bee27882d256b408c9b424a ofl/podkovavfbeta/OFL.txt +sha256 377f4f9c19e935228552478eb68cc2ed82910988a60ba60e2ac73b09f32d02d1 ofl/patrickhandsc/OFL.txt +sha256 ec1d7de447a90e4b6d8f2b4f95c7f89a70e315fdb41969bc716059e4f2461fa4 ofl/clickerscript/OFL.txt +sha256 7039124ec9c84f9d637637da9f80158f0d3681c82d4e6a811053467f7c33d587 ofl/prostoone/OFL.txt +sha256 16f8621a8dda01f044b8a58489334dbaadfad44ef2fa1d5ce0864cc2f309df01 ofl/inknutantiqua/OFL.txt +sha256 ae30055f1e31d12f6235802c25a8872bb7053fca8ed4a604c530f4b2ee83e572 ofl/pontanosans/OFL.txt +sha256 f1ef4c3ef43322403f5c30e4fb46496969cb5c34a2a6e7247b507254b69caa6a ofl/novaround/OFL.txt +sha256 cf5c4103b0ecf3c38e7c26768b5caf05e1b3e16d4d87b32d859b3c19ce7c216c ofl/petitformalscript/OFL.txt +sha256 ed80dd9539708a531313f98fb081aeeaa395ab5726931a433845d667b019c855 ofl/abyssinicasil/OFL.txt +sha256 1404cc9279d4ad713a372a5e1e1d20d7b9b000d2397c8529aeb3df5402446600 ofl/cutive/OFL.txt +sha256 19c6ecf65a6b0687dd324b093ced5f1020a1fcabfc8ddaaeca6906cd05153e23 ofl/overpassmono/OFL.txt +sha256 0878e7d6e842bc3c45154059a1c2812de0d31dca343fe6bc16abc9afdee3e3de ofl/koho/OFL.txt +sha256 636d62f04d7bda9fcf9354f258f6244e7e18288cae036b95122e204f1acbec80 ofl/neuton/OFL.txt +sha256 5fb0694694dc307d1eb0121689395e634b6329ff545acc53f55ad66a716b3cf1 ofl/baloo/OFL.txt +sha256 5866fd437bf701cd93f2c41ca2a8b33786975c947bee27882d256b408c9b424a ofl/podkova/OFL.txt +sha256 2ce1c4fcf4ab9c8474d0824434497d4afa4425db4de5629103698b170ac4ee74 ofl/bungee/OFL.txt +sha256 dc35123e99a857674b3e8807e9d7df82220d298423d9fc50ce084fbcdecf602d ofl/jotione/OFL.txt +sha256 76a55594c9a18b7d94b8119de838237eb834bae4e8c646d6d363aee587b7b427 ofl/slabo27px/OFL.txt +sha256 ed50ebe2fa922554980909192526fe94966556626d6d440a462c8e7eaed74cdc ofl/oflsortsmillgoudytt/OFL.txt +sha256 d7b108fc1f23fb016a47bb40c63d6f6e04cc35a1edfb991638d7f03621bf7f33 ofl/terminaldosislight/OFL.txt +sha256 71e5222c549d85a1403b6e709b4328b81d7b51ba021b8bd20df89550da80c087 ofl/yatraone/OFL.txt +sha256 f139d6f43d2a63a8fb3ded48b8ec747d9d59a7fbb13d077d9b96ac88580bc1ad ofl/dekko/OFL.txt +sha256 84b11cc0aac8fdb93af94872bc4b8f015caabf4919db63ab7f916ccff8e52f56 ofl/josefinsansstdlight/OFL.txt +sha256 8fbe530adcbe30c658393c3f2b5a4785d6765afcefdfe47f594730131f3a0abd ofl/oleoscriptswashcaps/OFL.txt +sha256 64dc6a7e2a77aa340c49c3e0829703f540f8d64afa506f44eaa6741580716d0f ofl/gabriela/OFL.txt +sha256 17d7a7f5d9f0139535ecec516988c4c73a2ec0f225987288f3fd6ee2622d4450 ofl/federant/OFL.txt +sha256 c0a7efe98e77cbfcf1a5ca43e874e25cf53d9185c56295bc3b5c407f95dae638 ofl/nats/OFL.txt +sha256 2ee5e8e47cd7d08f60bb9555f72b25912c9e81b13f5bc9a0551ddf943da6ca98 ofl/ekmukta/OFL.txt +sha256 e5ccbfc32e4d7fae98b467a9af310ac8d2efd5d90e684426cd24f3eb36090a2c ofl/acme/OFL.txt +sha256 5fb0694694dc307d1eb0121689395e634b6329ff545acc53f55ad66a716b3cf1 ofl/modak/OFL.txt +sha256 75a77451968e55a1ab404bd953bd8778983e21116d507b890fbcf838e58c8e8b ofl/pavanam/OFL.txt +sha256 36931b77dd81fa96fffad91b6acb54931e600845eb81f91ecf1b4459012c621a ofl/vidaloka/OFL.txt +sha256 5fb0694694dc307d1eb0121689395e634b6329ff545acc53f55ad66a716b3cf1 ofl/baloobhai/OFL.txt +sha256 1c45059cea5c6798c8591b0a17961a30328747d44214ff9b8f9c62a683bd6598 ofl/ruda/OFL.txt +sha256 0e441ae9f18ad0c294cc5b6ae3974c2db1614cab220598578b1b58c4cc334485 ofl/thegirlnextdoor/OFL.txt +sha256 4dee45deee99672fbe342b2f4b7aa75b0cd12de18a68f9732c77f096bab47e0e ofl/molengo/OFL.txt +sha256 5a5cf278190adf8be3e9905c2b21460241cb376c600bdfd6eb7aceb66036c4bf ofl/telex/OFL.txt +sha256 bb49cbf811dafcb11e0de081efcdc8385e45ccc85a5bfc3231ec4861d444dc42 ofl/ruthie/OFL.txt +sha256 b5c3d12a3085b96011fee65555234bb9d31fa7444cf6f8d5ae6b1f5771394399 ofl/lakkireddy/OFL.txt +sha256 23b896f4937eac954a383340c92dfcac1c6e05ec21cc08ec6de47d30ad8496a3 ofl/charmonman/OFL.txt +sha256 39602407e30d466bf169f46d690aaae4f5f039258e5642f91a80bb132ce6e14a ofl/bubblerone/OFL.txt +sha256 e31de7000a2a13b2e54ad01e788fd29e979fe05ea1fded44d6e71cc06e33bb2b ofl/ralewaydots/OFL.txt +sha256 8218df19bcd9786311bf1126815e8d591027aaf7611ef031af5a31c3fd66e928 ofl/arefruqaa/OFL.txt +sha256 e37fcc467040ecd81bf4cf59c99ef56b20f57918995e82b3de1d5b4e931bc2e6 ofl/portlligatslab/OFL.txt +sha256 60fea3a0da19167a3efb9c3792a3a15dc9235405d01bbec1233fdf3e79c74296 ofl/freckleface/OFL.txt +sha256 da15da6b1496d4de18f97e2ad1b722ef8a1c121149c2c93b2cf7eac6ac27b35c ofl/mplus1p/OFL.txt +sha256 d51f3341fd7b3dfa1114d3ef0bdabbe57f60eef86a1458019e0077d676fa1fcb ofl/lancelot/OFL.txt +sha256 9134ca6996bd33ea2022e109f13f20e29dee1dcd8b2e8878aad576d2ca334e9f ofl/cormorantinfant/OFL.txt +sha256 cc8c0c3e81cf543e190f128b83ba7c30959f15865c14dd972fca4917faeceec1 ofl/encodesanssemicondensed/OFL.txt +sha256 5946eec3a7d3bda02825930156e4716198e7753641dd3303a3e8c386c8011909 ofl/eater/OFL.txt +sha256 b43e2530c7af69fe1800f180d210b6d2745915ed4e0e404495038c861bb6dbf7 ofl/hammersmithone/OFL.txt +sha256 5a8751bef5a4fc867ae015099267905034345260f14060fa276aac4051ddd8b4 ofl/varela/OFL.txt +sha256 f6fc9fbae062e4efc1b0306e27715d43cd64a48b8ffba81c22034b8efee4fce2 ofl/cabinsketch/OFL.txt +sha256 2f0015108d68627bd788d313f529c21ff4da2c2c42a5e1f3883acc83480f9002 ufl/ubuntucondensed/LICENCE.txt +sha256 2f0015108d68627bd788d313f529c21ff4da2c2c42a5e1f3883acc83480f9002 ufl/ubuntumono/LICENCE.txt +sha256 2f0015108d68627bd788d313f529c21ff4da2c2c42a5e1f3883acc83480f9002 ufl/ubuntu/LICENCE.txt diff --git a/package/googlefontdirectory/googlefontdirectory.mk b/package/googlefontdirectory/googlefontdirectory.mk new file mode 100644 index 00000000..8773390f --- /dev/null +++ b/package/googlefontdirectory/googlefontdirectory.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# googlefontdirectory +# +################################################################################ + +GOOGLEFONTDIRECTORY_VERSION = 94dff3eaa9301b6640cccc63c56d6ff33d82882c +GOOGLEFONTDIRECTORY_SITE = $(call github,google,fonts,$(GOOGLEFONTDIRECTORY_VERSION)) + +GOOGLEFONTDIRECTORY_FONTS = \ + $(call qstrip,$(BR2_PACKAGE_GOOGLEFONTDIRECTORY_FONTS)) + +ifneq ($(filter apache/%,$(GOOGLEFONTDIRECTORY_FONTS)),) +GOOGLEFONTDIRECTORY_ALL_LICENSES += Apache-2.0 +GOOGLEFONTDIRECTORY_LICENSE_FILES += $(addsuffix /LICENSE.txt,$(filter apache/%,$(GOOGLEFONTDIRECTORY_FONTS))) +endif + +ifneq ($(filter ofl/%,$(GOOGLEFONTDIRECTORY_FONTS)),) +GOOGLEFONTDIRECTORY_ALL_LICENSES += OFL-1.1 +GOOGLEFONTDIRECTORY_LICENSE_FILES += $(addsuffix /OFL.txt,$(filter ofl/%,$(GOOGLEFONTDIRECTORY_FONTS))) +endif + +ifneq ($(filter ufl/%,$(GOOGLEFONTDIRECTORY_FONTS)),) +GOOGLEFONTDIRECTORY_ALL_LICENSES += UFL-1.1 +GOOGLEFONTDIRECTORY_LICENSE_FILES += $(addsuffix /LICENCE.txt,$(filter ufl/%,$(GOOGLEFONTDIRECTORY_FONTS))) +endif + +GOOGLEFONTDIRECTORY_LICENSE = $(subst $(space),$(comma)$(space),$(GOOGLEFONTDIRECTORY_ALL_LICENSES)) + +define GOOGLEFONTDIRECTORY_INSTALL_TARGET_CMDS + $(foreach d,$(GOOGLEFONTDIRECTORY_FONTS), \ + mkdir -p $(TARGET_DIR)/usr/share/fonts/$(notdir $(d)) + $(INSTALL) -m 0644 -t $(TARGET_DIR)/usr/share/fonts/$(notdir $(d)) $(@D)/$(d)/*.ttf + ) +endef + +$(eval $(generic-package)) diff --git a/package/gperf/Config.in b/package/gperf/Config.in new file mode 100644 index 00000000..e6d51fca --- /dev/null +++ b/package/gperf/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_GPERF + bool "gperf" + depends on BR2_INSTALL_LIBSTDCPP + help + A 'perfect hash function' generator + + http://www.gnu.org/software/gperf/ + +comment "gperf needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/gperf/gperf.hash b/package/gperf/gperf.hash new file mode 100644 index 00000000..3d8aafbd --- /dev/null +++ b/package/gperf/gperf.hash @@ -0,0 +1,7 @@ +# Locally calculated after checking pgp signature +# https://ftp.gnu.org/pub/gnu/gperf/gperf-3.1.tar.gz.sig +# with key 93C08C88471097CD +sha256 588546b945bba4b70b6a3a616e80b4ab466e3f33024a352fc2198112cdbb3ae2 gperf-3.1.tar.gz + +# Locally calculated +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/gperf/gperf.mk b/package/gperf/gperf.mk new file mode 100644 index 00000000..c2f042c4 --- /dev/null +++ b/package/gperf/gperf.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# gperf +# +################################################################################ + +GPERF_VERSION = 3.1 +GPERF_SITE = $(BR2_GNU_MIRROR)/gperf +GPERF_LICENSE = GPL-3.0+ +GPERF_LICENSE_FILES = COPYING +GPERF_CPE_ID_VENDOR = gperftools_project +GPERF_CPE_ID_PRODUCT = gperftools + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/gpm/0001-Added-musl-support-to-libgpm-and-the-daemon.patch b/package/gpm/0001-Added-musl-support-to-libgpm-and-the-daemon.patch new file mode 100644 index 00000000..1e1e9194 --- /dev/null +++ b/package/gpm/0001-Added-musl-support-to-libgpm-and-the-daemon.patch @@ -0,0 +1,71 @@ +From eb0e14f8a5c414603b2e882df54b9fec138104ec Mon Sep 17 00:00:00 2001 +From: Dima Krasner +Date: Wed, 12 Nov 2014 23:06:46 +0200 +Subject: [PATCH] Added musl support to libgpm and the daemon. + +[Upstream patch backported from the github repository, +https://github.com/telmich/gpm/commit/d88fb1de5803c366ab62f7de9ee5d83207fb2afe.] + +Signed-off-by: Thomas Petazzoni +--- + src/daemon/open_console.c | 1 + + src/prog/display-buttons.c | 1 + + src/prog/display-coords.c | 1 + + src/prog/gpm-root.y | 4 ++-- + 4 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/src/daemon/open_console.c b/src/daemon/open_console.c +index 98297c9..4d6c0af 100644 +--- a/src/daemon/open_console.c ++++ b/src/daemon/open_console.c +@@ -21,6 +21,7 @@ + + #include /* open and co. */ + #include /* stat() */ ++#include /* major() */ + #include /* ioctl */ + + /* Linux specific (to be outsourced in gpm2 */ +diff --git a/src/prog/display-buttons.c b/src/prog/display-buttons.c +index de8e5b2..38d2f11 100644 +--- a/src/prog/display-buttons.c ++++ b/src/prog/display-buttons.c +@@ -36,6 +36,7 @@ + #include /* printf() */ + #include /* time() */ + #include /* errno */ ++#include /* fd_set and FD_* */ + #include /* gpm information */ + + /* display resulting data */ +diff --git a/src/prog/display-coords.c b/src/prog/display-coords.c +index ed15c8a..411283a 100644 +--- a/src/prog/display-coords.c ++++ b/src/prog/display-coords.c +@@ -37,6 +37,7 @@ + #include /* printf() */ + #include /* time() */ + #include /* errno */ ++#include /* fd_set and FD_* */ + #include /* gpm information */ + + /* display resulting data */ +diff --git a/src/prog/gpm-root.y b/src/prog/gpm-root.y +index 069d801..188ae35 100644 +--- a/src/prog/gpm-root.y ++++ b/src/prog/gpm-root.y +@@ -1199,9 +1199,9 @@ int main(int argc, char **argv) + #if defined(__GLIBC__) + __sigemptyset(&childaction.sa_mask); + #else /* __GLIBC__ */ +- childaction.sa_mask=0; ++ sigemptyset(&childaction.sa_mask); + #endif /* __GLIBC__ */ +- childaction.sa_flags=SA_INTERRUPT; /* need to break the select() call */ ++ childaction.sa_flags=0; + sigaction(SIGCHLD,&childaction,NULL); + + /*....................................... Connect and get your buffer */ +-- +2.1.0 + diff --git a/package/gpm/0002-Install-unversioned-solibrary.patch b/package/gpm/0002-Install-unversioned-solibrary.patch new file mode 100644 index 00000000..27e97acb --- /dev/null +++ b/package/gpm/0002-Install-unversioned-solibrary.patch @@ -0,0 +1,41 @@ +From 06b00d53d8bd513ad5d262dc94a016c6fbf2d3aa Mon Sep 17 00:00:00 2001 +From: Kamil Rytarowski +Date: Sat, 4 May 2013 01:30:17 +0200 +Subject: [PATCH] Install unversioned solibrary + +Unversioned solibraries are shipped with -devel packages in Linux +distros. Generate and install it for the consistency. + +[Upstream patch backported from the github repository, +https://github.com/telmich/gpm/commit/06b00d53d8bd513ad5d262dc94a016c6fbf2d3aa] + +Signed-off-by: Bernd Kuhls +--- + src/Makefile.in | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +diff --git a/src/Makefile.in b/src/Makefile.in +index 6b60ad3..7e9e2ef 100644 +--- a/src/Makefile.in ++++ b/src/Makefile.in +@@ -79,7 +79,7 @@ prog/%: prog/%.o + # | $(SED) '\''s/\($*\)\.o\([ :]*\)/\1.o \1.lo\2/g'\'' > $(DEPDIR)/$@' + + # Do it all! +-all: gpm lib/libgpm.so.@abi_lev@ @LIBGPM_A@ $(PROG) ++all: gpm lib/libgpm.so.@abi_lev@ lib/libgpm.so @LIBGPM_A@ $(PROG) + + gpm: $(GOBJ) + $(CC) @LDFLAGS@ $(LDFLAGS) -o $@ $(GOBJ) @LIBS@ $(LIBS) -lm +@@ -168,9 +168,8 @@ lib/libgpm.so.@abi_full@: $(PICS) + @LDFLAGS@ $(LDFLAGS) -o lib/libgpm.so.@abi_full@ $^ @LIBS@ @SHARED_LIBS@ $(LIBS) + lib/libgpm.so.@abi_lev@: lib/libgpm.so.@abi_full@ + $(LN_S) -f libgpm.so.@abi_full@ lib/libgpm.so.@abi_lev@ +-# unneeded, isn't it? +-#lib/libgpm.so: lib/libgpm.so.@abi_full@ +-# $(LN_S) -f libgpm.so.@abi_full@ lib/libgpm.so ++lib/libgpm.so: lib/libgpm.so.@abi_full@ ++ $(LN_S) -f libgpm.so.@abi_full@ lib/libgpm.so + + include $(DEPFILE) + diff --git a/package/gpm/0003-src-Makefile.in-Really-install-unversioned-solibrary.patch b/package/gpm/0003-src-Makefile.in-Really-install-unversioned-solibrary.patch new file mode 100644 index 00000000..58b260ce --- /dev/null +++ b/package/gpm/0003-src-Makefile.in-Really-install-unversioned-solibrary.patch @@ -0,0 +1,31 @@ +From 445be05fba32c512fd87a0c98b4e9936629ef95e Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Sat, 20 Feb 2016 17:59:52 +0100 +Subject: [PATCH 1/1] src/Makefile.in: Really install unversioned solibrary + +This commit is a follow-up to +https://github.com/telmich/gpm/commit/06b00d53d8bd513ad5d262dc94a016c6fbf2d3aa +which created libgpm.so but failed to include it in the install target. + +Patch sent upstream: https://github.com/telmich/gpm/pull/11 + +Signed-off-by: Bernd Kuhls +--- + src/Makefile.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/Makefile.in b/src/Makefile.in +index 7e9e2ef..bca226f 100644 +--- a/src/Makefile.in ++++ b/src/Makefile.in +@@ -115,6 +115,7 @@ install: check + if test "x@SHLIB@" != "x" ; then \ + $(INSTALL_DATA) -m 755 lib/libgpm.so.@abi_full@ $(libdir)/libgpm.so.@abi_full@ ; \ + cd $(libdir) && $(LN_S) -f libgpm.so.@abi_full@ libgpm.so.@abi_lev@ ; \ ++ cd $(libdir) && $(LN_S) -f libgpm.so.@abi_full@ libgpm.so ; \ + echo "WARNING: We installed a lib, you should now call ldconfig" ; \ + echo "f.i.: ldconfig -n -l $(libdir)/libgpm.so.@abi_full@" ; \ + echo "Or to update everything just type ldconfig" ; \ +-- +2.7.0 + diff --git a/package/gpm/0004-Use-sigemptyset-API-instead-of-__sigemptyset.patch b/package/gpm/0004-Use-sigemptyset-API-instead-of-__sigemptyset.patch new file mode 100644 index 00000000..01c7424a --- /dev/null +++ b/package/gpm/0004-Use-sigemptyset-API-instead-of-__sigemptyset.patch @@ -0,0 +1,33 @@ +From fdc42770596e25749f7e2ce0ea97882177397167 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sun, 25 Jun 2017 07:25:33 -0700 +Subject: [PATCH] Use sigemptyset API instead of __sigemptyset + +__sigemptyset has been removed from glibc public +API headers in upcoming (2.26) release onwards + +Signed-off-by: Khem Raj +Signed-off-by: Petr Vorel +--- + src/prog/gpm-root.y | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/src/prog/gpm-root.y b/src/prog/gpm-root.y +index 5126c65..76c896c 100644 +--- a/src/prog/gpm-root.y ++++ b/src/prog/gpm-root.y +@@ -1196,11 +1196,7 @@ int main(int argc, char **argv) + LOG_DAEMON : LOG_USER); + /* reap your zombies */ + childaction.sa_handler=reap_children; +-#if defined(__GLIBC__) +- __sigemptyset(&childaction.sa_mask); +-#else /* __GLIBC__ */ + sigemptyset(&childaction.sa_mask); +-#endif /* __GLIBC__ */ + childaction.sa_flags=0; + sigaction(SIGCHLD,&childaction,NULL); + +-- +2.14.2 + diff --git a/package/gpm/0005-fix-building-w-newer-glibc.patch b/package/gpm/0005-fix-building-w-newer-glibc.patch new file mode 100644 index 00000000..b451d975 --- /dev/null +++ b/package/gpm/0005-fix-building-w-newer-glibc.patch @@ -0,0 +1,32 @@ +From b350aee4ea5785a75cb6ad770f6b768c506ebb70 Mon Sep 17 00:00:00 2001 +From: Mike Frysinger +Date: Mon, 14 Mar 2016 15:39:54 -0400 +Subject: [PATCH] fix building w/newer glibc + +Linux C libraries are looking to disentangle sysmacros.h from the +sys/types.h include, so make sure we pull in the header when it is +found. + +Signed-off-by: Giulio Benetti +--- + src/daemon/open_console.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/daemon/open_console.c b/src/daemon/open_console.c +index 4d6c0af..6dd43e6 100644 +--- a/src/daemon/open_console.c ++++ b/src/daemon/open_console.c +@@ -24,6 +24,10 @@ + #include /* major() */ + #include /* ioctl */ + ++#ifdef HAVE_SYS_SYSMACROS_H ++#include /* major() w/newer glibc */ ++#endif ++ + /* Linux specific (to be outsourced in gpm2 */ + #include /* for serial console check */ + #include /* for serial console check */ +-- +2.17.1 + diff --git a/package/gpm/0006-src-headers-daemon.h-avoid-redefinition-of-last_sele.patch b/package/gpm/0006-src-headers-daemon.h-avoid-redefinition-of-last_sele.patch new file mode 100644 index 00000000..36a8ddc5 --- /dev/null +++ b/package/gpm/0006-src-headers-daemon.h-avoid-redefinition-of-last_sele.patch @@ -0,0 +1,43 @@ +From f04f24dd5ca5c1c13608b144ab66e2ccd47f106a Mon Sep 17 00:00:00 2001 +From: Sergei Trofimovich +Date: Sun, 19 Jan 2020 19:53:41 +0000 +Subject: [PATCH] src/headers/daemon.h: avoid redefinition of + 'last_selection_time' + +Noticed build failure on gcc-10 as: + +``` +gcc -L/home/slyfox/dev/git/gpm/src -o gpm mice.o ... report.o tools.o -lm +ld: twiddler.o:gpm/src/headers/daemon.h:183: + multiple definition of `last_selection_time'; mice.o:gpm/src/headers/daemon.h:183: first defined here +ld: synaptics.o:git/gpm/src/headers/daemon.h:183: + multiple definition of `last_selection_time'; mice.o:git/gpm/src/headers/daemon.h:183: first defined here +``` + +gcc-10 will change the default from -fcommon to fno-common: +https://gcc.gnu.org/PR85678. + +The error also happens if CFLAGS=-fno-common passed explicitly. + +Signed-off-by: Sergei Trofimovich +Signed-off-by: Heiko Thiery +--- + src/headers/daemon.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/headers/daemon.h b/src/headers/daemon.h +index a8936ad..24a1a97 100644 +--- a/src/headers/daemon.h ++++ b/src/headers/daemon.h +@@ -180,7 +180,7 @@ extern struct mouse_features mouse_table[3], + extern Gpm_Type mice[]; + extern Gpm_Type *repeated_type; + +-time_t last_selection_time; ++extern time_t last_selection_time; + + + +-- +2.20.1 + diff --git a/package/gpm/Config.in b/package/gpm/Config.in new file mode 100644 index 00000000..11584799 --- /dev/null +++ b/package/gpm/Config.in @@ -0,0 +1,26 @@ +config BR2_PACKAGE_GPM + bool "gpm" + depends on !BR2_STATIC_LIBS + depends on BR2_USE_MMU # fork() + help + "gpm" means general purpose mouse (server) and provides mouse + support for Linux virtual consoles. + gpm-root (to draw menus in current virtual console; config + file in /etc/gpm-root.conf) and disable-paste (to disable + paste buffer for security reasons), will also be installed. + + http://www.nico.schottelius.org/software/gpm/ + +if BR2_PACKAGE_GPM + +config BR2_PACKAGE_GPM_INSTALL_TEST_TOOLS + bool "install test tools" + help + Install gpm test tools (get-versions, mev, hltest, mouse-test, + display-buttons & display-coords). + +endif + +comment "gpm mouse server needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + depends on BR2_USE_MMU diff --git a/package/gpm/gpm.hash b/package/gpm/gpm.hash new file mode 100644 index 00000000..fac89318 --- /dev/null +++ b/package/gpm/gpm.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 a955053b36556ffa7c628ce18fd6de7d625966573fa412fb08869533d8f7385c gpm-1.20.7.tar.lzma +sha256 1b2a567f289f66a143c56353e7b3d4fa5862514a5e3c5cfdf8b02ee5e5aaa953 COPYING diff --git a/package/gpm/gpm.mk b/package/gpm/gpm.mk new file mode 100644 index 00000000..f59d059a --- /dev/null +++ b/package/gpm/gpm.mk @@ -0,0 +1,71 @@ +################################################################################ +# +# gpm +# +################################################################################ + +GPM_VERSION = 1.20.7 +GPM_SOURCE = gpm-$(GPM_VERSION).tar.lzma +GPM_SITE = http://www.nico.schottelius.org/software/gpm/archives +GPM_LICENSE = GPL-2.0+ +GPM_LICENSE_FILES = COPYING +GPM_INSTALL_STAGING = YES +GPM_DEPENDENCIES = host-bison + +# if not already installed in staging dir, gpm Makefile may fail to find some +# of the headers needed to generate build dependencies, the first time it is +# built. CPPFLAGS is used to pass the right include path to dependency rules. +GPM_CONF_ENV = \ + CPPFLAGS="$(TARGET_CPPFLAGS) -I$(@D)/src/headers/" \ + ac_cv_path_emacs=no + +# For some reason, Microblaze gcc does not define __ELF__, which gpm +# configure script uses to determine whether the architecture uses ELF +# binaries and therefore can build shared libraries. We fix this by +# telling GPM that ELF is used on Microblaze. +ifeq ($(BR2_microblaze),y) +GPM_CONF_ENV += itz_cv_sys_elf=yes +endif + +# gpm and ncurses have a circular dependency. As gpm function GPM_Wgetch() +# (requiring ncurses) is not recommended for use by ncurses people themselves +# and as it's better to have gpm support in ncurses that the contrary, we force +# gpm to not look after ncurses explicitly. +# http://invisible-island.net/ncurses/ncurses.faq.html#using_gpm_lib +GPM_CONF_OPTS = --without-curses + +# configure is missing but gpm seems not compatible with our autoreconf +# mechanism so we have to do it manually instead of using GPM_AUTORECONF = YES +define GPM_RUN_AUTOGEN + cd $(@D) && PATH=$(BR_PATH) ./autogen.sh +endef +GPM_PRE_CONFIGURE_HOOKS += GPM_RUN_AUTOGEN + +GPM_DEPENDENCIES += host-automake host-autoconf host-libtool + +# gpm tries to build/install .info doc even if makeinfo isn't installed on the +# host, so we have to disable global doc installation to prevent autobuild +# errors. +define GPM_DISABLE_DOC_INSTALL + $(SED) 's/SUBDIRS = src doc contrib/SUBDIRS = src contrib/' \ + $(@D)/Makefile.in +endef +GPM_POST_PATCH_HOOKS += GPM_DISABLE_DOC_INSTALL + +ifeq ($(BR2_PACKAGE_GPM_INSTALL_TEST_TOOLS),) +define GPM_REMOVE_TEST_TOOLS_FROM_TARGET + for tools in mev hltest mouse-test display-buttons \ + get-versions display-coords; do \ + rm -f $(TARGET_DIR)/usr/bin/$$tools ; \ + done +endef +GPM_POST_INSTALL_TARGET_HOOKS += GPM_REMOVE_TEST_TOOLS_FROM_TARGET +endif + +define GPM_INSTALL_GPM_ROOT_CONF_ON_TARGET + $(INSTALL) -m 0644 -D $(@D)/conf/gpm-root.conf $(TARGET_DIR)/etc/ +endef + +GPM_POST_INSTALL_TARGET_HOOKS += GPM_INSTALL_GPM_ROOT_CONF_ON_TARGET + +$(eval $(autotools-package)) diff --git a/package/gpsd/0001-Fix-errors-during-gpsd-3.20-cross-compilation.patch b/package/gpsd/0001-Fix-errors-during-gpsd-3.20-cross-compilation.patch new file mode 100644 index 00000000..7ab863d4 --- /dev/null +++ b/package/gpsd/0001-Fix-errors-during-gpsd-3.20-cross-compilation.patch @@ -0,0 +1,148 @@ +From 727c37ef78f2229998ac51942f5d11c754d0c6b9 Mon Sep 17 00:00:00 2001 +From: Robert Hancock +Date: Mon, 13 Jul 2020 17:33:48 -0600 +Subject: [PATCH] Fix errors during gpsd 3.20 cross-compilation + +Adapt some post-3.20 changes to the gpsd SConstruct file from the +gpsd master branch to fix issues when cross-compiling. Original +commits did not cherry-pick cleanly onto 3.20 due to other +upstream changes. + +Signed-off-by: Robert Hancock +--- + SConstruct | 81 ++++++++++++++++++++++-------------------------------- + 1 file changed, 33 insertions(+), 48 deletions(-) + +diff --git a/SConstruct b/SConstruct +index 33e0ff326..93e8fcfea 100644 +--- a/SConstruct ++++ b/SConstruct +@@ -386,13 +386,16 @@ env['SC_PYTHON'] = sys.executable # Path to SCons Python + # So we rely on MergeFlags/ParseFlags to do the right thing for us. + env['STRIP'] = "strip" + env['PKG_CONFIG'] = "pkg-config" +-for i in ["AR", "CC", "CXX", "LD", +- "PKG_CONFIG", "STRIP", "TAR"]: ++for i in ["AR", # linker for static libs, usually "ar" ++ "CC", ++ "CXX", ++ # "LD", # scons does not use LD, usually "ld" ++ "PKG_CONFIG", ++ "SHLINK", # linker for shared libs, usually "gcc" or "g++", NOT "ld" ++ "STRIP", ++ "TAR"]: + if i in os.environ: +- j = i +- if i == "LD": +- i = "SHLINK" +- env[i] = os.getenv(j) ++ env[i] = os.getenv(i) + for i in ["ARFLAGS", "CFLAGS", "CXXFLAGS", "LDFLAGS", "SHLINKFLAGS", + "CPPFLAGS", "CCFLAGS", "LINKFLAGS"]: + if i in os.environ: +@@ -483,7 +486,7 @@ devenv = (("ADDR2LINE", "addr2line"), + ("GCCBUG", "gccbug"), + ("GCOV", "gcov"), + ("GPROF", "gprof"), +- ("LD", "ld"), ++ # ("LD", "ld"), # scons does not use LD + ("NM", "nm"), + ("OBJCOPY", "objcopy"), + ("OBJDUMP", "objdump"), +@@ -565,6 +568,22 @@ def CheckXsltproc(context): + return ret + + ++def CheckTime_t(context): ++ context.Message('Checking if sizeof(time_t) is 64 bits... ') ++ ret = context.TryLink(""" ++ #include ++ ++ int main(int argc, char **argv) { ++ static int test_array[1 - 2 * ((long int) sizeof(time_t) < 8 )]; ++ test_array[0] = 0; ++ (void) argc; (void) argv; ++ return 0; ++ } ++ """, '.c') ++ context.Result(ret) ++ return ret ++ ++ + def CheckCompilerOption(context, option): + context.Message('Checking if compiler accepts %s... ' % (option,)) + old_CFLAGS = context.env['CFLAGS'][:] # Get a *copy* of the old list +@@ -597,42 +616,6 @@ def CheckHeaderDefines(context, file, define): + return ret + + +-def CheckSizeOf(context, type): +- """Check sizeof 'type'""" +- context.Message('Checking size of ' + type + '... ') +- +- program = """ +-#include +-#include +- +-/* +- * The CheckSizeOf function does not have a way for the caller to +- * specify header files to be included to provide the type being +- * checked. As a workaround until that is remedied, include the +- * header required for time_t, which is the sole current use of this +- * function. +- */ +-#include +- +-int main() { +- printf("%d", (int)sizeof(""" + type + """)); +- return 0; +-} +-""" +- +- # compile it +- ret = context.TryCompile(program, '.c') +- if 0 == ret: +- announce('ERROR: TryCompile failed\n') +- # fall back to sizeof(time_t) is 8 +- return '8' +- +- # run it +- ret = context.TryRun(program, '.c') +- context.Result(ret[0]) +- return ret[1] +- +- + def CheckCompilerDefines(context, define): + context.Message('Checking if compiler supplies %s... ' % (define,)) + ret = context.TryLink(""" +@@ -708,8 +691,8 @@ config = Configure(env, custom_tests={ + 'CheckCompilerOption': CheckCompilerOption, + 'CheckHeaderDefines': CheckHeaderDefines, + 'CheckPKG': CheckPKG, +- 'CheckSizeOf': CheckSizeOf, + 'CheckXsltproc': CheckXsltproc, ++ 'CheckTime_t': CheckTime_t, + 'GetPythonValue': GetPythonValue, + }) + +@@ -1043,11 +1026,13 @@ else: + confdefs.append("/* #undef HAVE_%s_H */\n" + % hdr.replace("/", "_").upper()) + +- sizeof_time_t = config.CheckSizeOf("time_t") +- confdefs.append("#define SIZEOF_TIME_T %s\n" % sizeof_time_t) +- announce("sizeof(time_t) is %s" % sizeof_time_t) +- if 4 >= int(sizeof_time_t): ++ if 0 == config.CheckTime_t(): + announce("WARNING: time_t is too small. It will fail in 2038") ++ sizeof_time_t = 4 ++ else: ++ sizeof_time_t = 8 ++ ++ confdefs.append("#define SIZEOF_TIME_T %s\n" % sizeof_time_t) + + # check function after libraries, because some function require libraries + # for example clock_gettime() require librt on Linux glibc < 2.17 +-- +2.18.4 + diff --git a/package/gpsd/Config.in b/package/gpsd/Config.in new file mode 100644 index 00000000..3e13f1ba --- /dev/null +++ b/package/gpsd/Config.in @@ -0,0 +1,248 @@ +comment "gpsd needs a toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS + +menuconfig BR2_PACKAGE_GPSD + bool "gpsd" + # Uses fork() + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_THREADS + # Always tries to build a shared library + depends on !BR2_STATIC_LIBS + help + gpsd is a service daemon that monitors one or more GPSes or + AIS receivers attached to a host computer through serial or + USB ports, making all data on the location/course/velocity of + the sensors available to be queried on TCP port 2947 of the + host computer. + + The D-Bus interface is included if dbus-glib is enabled. + + https://gpsd.gitlab.io/gpsd + +if BR2_PACKAGE_GPSD + +config BR2_PACKAGE_GPSD_DEVICES + string "Where to look for GPSes" + default "/dev/ttyS1" + +comment "Features" + +config BR2_PACKAGE_GPSD_CLIENT_DEBUG + bool "client debugging support" + +config BR2_PACKAGE_GPSD_OLDSTYLE + bool "oldstyle (pre-JSON) protocol support" + +config BR2_PACKAGE_GPSD_PROFILING + bool "profiling support" + depends on BR2_TOOLCHAIN_USES_GLIBC + depends on !BR2_aarch64 + # Needs glibc for ARC arc-2018.03-eng007+ for correct __mcount linking + depends on !BR2_arc + +comment "profiling support not available with uClibc-based toolchain" + depends on !BR2_TOOLCHAIN_USES_GLIBC + +config BR2_PACKAGE_GPSD_USER + bool "GPSD privilege revocation user" + +config BR2_PACKAGE_GPSD_USER_VALUE + string "user to run as" + default "nobody" + depends on BR2_PACKAGE_GPSD_USER + +config BR2_PACKAGE_GPSD_GROUP + bool "GPSD privilege revocation group" + +config BR2_PACKAGE_GPSD_GROUP_VALUE + string "group to run as" + default "nobody" + depends on BR2_PACKAGE_GPSD_GROUP + +config BR2_PACKAGE_GPSD_FIXED_PORT_SPEED + bool "compile with fixed serial port speed" + +config BR2_PACKAGE_GPSD_FIXED_PORT_SPEED_VALUE + int "serial port speed" + default "9600" + depends on BR2_PACKAGE_GPSD_FIXED_PORT_SPEED + +config BR2_PACKAGE_GPSD_MAX_CLIENT + bool "compile with limited maximum clients" + +config BR2_PACKAGE_GPSD_MAX_CLIENT_VALUE + int "maximum number of clients" + default "10" + depends on BR2_PACKAGE_GPSD_MAX_CLIENT + +config BR2_PACKAGE_GPSD_MAX_DEV + bool "compile with maximum allowed devices" + +config BR2_PACKAGE_GPSD_MAX_DEV_VALUE + int "maximum allowed devices" + default "2" + depends on BR2_PACKAGE_GPSD_MAX_DEV + +config BR2_PACKAGE_GPSD_RECONFIGURE + bool "allow gpsd to change device settings" + default y + +config BR2_PACKAGE_GPSD_CONTROLSEND + bool "allow gpsctl/gpsmon to change device settings" + default y + +config BR2_PACKAGE_GPSD_SQUELCH + bool "squelch gpsd_report and gpsd_hexdump to save cpu" + +comment "Protocols" + +config BR2_PACKAGE_GPSD_AIVDM + bool "Aivdm" + help + Aivdm support + +config BR2_PACKAGE_GPSD_ASHTECH + bool "Ashtech" + help + Ashtech support + +config BR2_PACKAGE_GPSD_EARTHMATE + bool "Earthmate" + help + DeLorme EarthMate Zodiac support + +config BR2_PACKAGE_GPSD_EVERMORE + bool "EverMore" + help + EverMore binary support + +config BR2_PACKAGE_GPSD_FURY + bool "Fury" + help + Jackson Labs Fury and Firefly support + +config BR2_PACKAGE_GPSD_FV18 + bool "FV-18" + help + San Jose Navigation FV-18 support + +config BR2_PACKAGE_GPSD_GARMIN + bool "Garmin (kernel)" + help + Garmin kernel driver support + +config BR2_PACKAGE_GPSD_GARMIN_SIMPLE_TXT + bool "Garmin (simple text)" + help + Garmin Simple Text support + +config BR2_PACKAGE_GPSD_GEOSTAR + bool "Geostar" + help + Geostar Protocol support + +config BR2_PACKAGE_GPSD_GPSCLOCK + bool "GPSClock" + help + GPSClock support + +config BR2_PACKAGE_GPSD_GREIS + bool "Greis" + help + Greis support + +config BR2_PACKAGE_GPSD_ISYNC + bool "iSync" + help + Spectratime iSync LNRClok/GRCLOK support + +config BR2_PACKAGE_GPSD_ITRAX + bool "iTrax" + help + iTrax support + +config BR2_PACKAGE_GPSD_MTK3301 + bool "MTK-3301" + help + Mediatek MTK-3301 support + +config BR2_PACKAGE_GPSD_NAVCOM + bool "Navcom" + help + Navcom binary support + +config BR2_PACKAGE_GPSD_NMEA + bool "NMEA" + default y + help + Generic NMEA support + +config BR2_PACKAGE_GPSD_NMEA2000 + bool "NMEA2000" + select BR2_PACKAGE_GPSD_NAVCOM + select BR2_PACKAGE_GPSD_AIVDM + help + NMEA2000/CAN support + +config BR2_PACKAGE_GPSD_NTRIP + bool "NTRIP" + help + NTRIP support + +config BR2_PACKAGE_GPSD_OCEANSERVER + bool "OceanServer" + help + OceanServer Digital Compass support + +config BR2_PACKAGE_GPSD_ONCORE + bool "OnCore" + help + OnCore support + +config BR2_PACKAGE_GPSD_RTCM104V2 + bool "RTCM104 v2" + help + RTCM104 v2 support + +config BR2_PACKAGE_GPSD_RTCM104V3 + bool "RTCM104 v3" + help + RTCM104 v3 support + +config BR2_PACKAGE_GPSD_SIRF + bool "SiRF" + help + SiRF binary support + +config BR2_PACKAGE_GPSD_SKYTRAQ + bool "Skytraq" + help + Skytraq support + +config BR2_PACKAGE_GPSD_SUPERSTAR2 + bool "SuperStarII" + help + Novatel SuperStarII binary support + +config BR2_PACKAGE_GPSD_TRIMBLE_TSIP + bool "Trimble TSIP" + help + Trimble TSIP support + +config BR2_PACKAGE_GPSD_TRIPMATE + bool "TripMate" + help + Delorme TripMate support + +config BR2_PACKAGE_GPSD_TRUE_NORTH + bool "True North Technologies" + help + True North Technologies support + +config BR2_PACKAGE_GPSD_UBX + bool "UBX" + help + uBlox UBX binary support + +endif diff --git a/package/gpsd/S50gpsd b/package/gpsd/S50gpsd new file mode 100644 index 00000000..39bf2320 --- /dev/null +++ b/package/gpsd/S50gpsd @@ -0,0 +1,40 @@ +#!/bin/sh +# +# Starts the gps daemon. +# + +NAME=gpsd +DAEMON=/usr/sbin/$NAME +DEVICES=/dev/ttyS1 +PIDFILE=/var/run/$NAME.pid + +start() { + printf "Starting $NAME: " + start-stop-daemon -S -q -p $PIDFILE --exec $DAEMON -- -P $PIDFILE $DEVICES && echo "OK" || echo "Failed" +} +stop() { + printf "Stopping $NAME: " + start-stop-daemon -K -q -p $PIDFILE && echo "OK" || echo "Failed" + rm -f $PIDFILE +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/gpsd/gpsd.hash b/package/gpsd/gpsd.hash new file mode 100644 index 00000000..af53fc05 --- /dev/null +++ b/package/gpsd/gpsd.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 172a7805068eacb815a3c5225436fcb0be46e7e49a5001a94034eac43df85e50 gpsd-3.20.tar.gz +sha256 13ba6fe5b2f41f03b854f9ac5f271e116d5ed55890cc20f5fe44dcfa0dc5958b COPYING diff --git a/package/gpsd/gpsd.mk b/package/gpsd/gpsd.mk new file mode 100644 index 00000000..be7327ac --- /dev/null +++ b/package/gpsd/gpsd.mk @@ -0,0 +1,253 @@ +################################################################################ +# +# gpsd +# +################################################################################ + +GPSD_VERSION = 3.20 +GPSD_SITE = http://download-mirror.savannah.gnu.org/releases/gpsd +GPSD_LICENSE = BSD-2-Clause +GPSD_LICENSE_FILES = COPYING +GPSD_CPE_ID_VENDOR = gpsd_project +GPSD_INSTALL_STAGING = YES + +GPSD_DEPENDENCIES = host-python3 host-scons host-pkgconf + +GPSD_LDFLAGS = $(TARGET_LDFLAGS) +GPSD_CFLAGS = $(TARGET_CFLAGS) + +GPSD_SCONS_ENV = $(TARGET_CONFIGURE_OPTS) + +GPSD_SCONS_OPTS = \ + arch=$(ARCH) \ + manbuild=no \ + prefix=/usr \ + sysroot=$(STAGING_DIR) \ + strip=no \ + python=no \ + qt=no \ + systemd=$(if $(BR2_INIT_SYSTEMD),yes,no) + +ifeq ($(BR2_PACKAGE_NCURSES),y) +GPSD_DEPENDENCIES += ncurses +else +GPSD_SCONS_OPTS += ncurses=no +endif + +# Build libgpsmm if we've got C++ +ifeq ($(BR2_INSTALL_LIBSTDCPP),y) +GPSD_LDFLAGS += -lstdc++ +GPSD_CFLAGS += -std=gnu++98 +GPSD_CXXFLAGS += -std=gnu++98 +GPSD_SCONS_OPTS += libgpsmm=yes +else +GPSD_SCONS_OPTS += libgpsmm=no +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_68485),y) +GPSD_CFLAGS += -O0 +endif + +# If libusb is available build it before so the package can use it +ifeq ($(BR2_PACKAGE_LIBUSB),y) +GPSD_DEPENDENCIES += libusb +else +GPSD_SCONS_OPTS += usb=no +endif + +# If bluetooth is available build it before so the package can use it +ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS),y) +GPSD_DEPENDENCIES += bluez5_utils +else +GPSD_SCONS_OPTS += bluez=no +endif + +# If pps-tools is available, build it before so the package can use it +# (HAVE_SYS_TIMEPPS_H). +ifeq ($(BR2_PACKAGE_PPS_TOOLS),y) +GPSD_DEPENDENCIES += pps-tools +endif + +ifeq ($(BR2_PACKAGE_DBUS_GLIB),y) +GPSD_SCONS_OPTS += dbus_export=yes +GPSD_DEPENDENCIES += dbus-glib +endif + +# Protocol support +ifneq ($(BR2_PACKAGE_GPSD_ASHTECH),y) +GPSD_SCONS_OPTS += ashtech=no +endif +ifneq ($(BR2_PACKAGE_GPSD_AIVDM),y) +GPSD_SCONS_OPTS += aivdm=no +endif +ifneq ($(BR2_PACKAGE_GPSD_EARTHMATE),y) +GPSD_SCONS_OPTS += earthmate=no +endif +ifneq ($(BR2_PACKAGE_GPSD_EVERMORE),y) +GPSD_SCONS_OPTS += evermore=no +endif +ifneq ($(BR2_PACKAGE_GPSD_FURY),y) +GPSD_SCONS_OPTS += fury=no +endif +ifneq ($(BR2_PACKAGE_GPSD_FV18),y) +GPSD_SCONS_OPTS += fv18=no +endif +ifneq ($(BR2_PACKAGE_GPSD_GARMIN),y) +GPSD_SCONS_OPTS += garmin=no +endif +ifneq ($(BR2_PACKAGE_GPSD_GARMIN_SIMPLE_TXT),y) +GPSD_SCONS_OPTS += garmintxt=no +endif +ifneq ($(BR2_PACKAGE_GPSD_GEOSTAR),y) +GPSD_SCONS_OPTS += geostar=no +endif +ifneq ($(BR2_PACKAGE_GPSD_GPSCLOCK),y) +GPSD_SCONS_OPTS += gpsclock=no +endif +ifneq ($(BR2_PACKAGE_GPSD_GREIS),y) +GPSD_SCONS_OPTS += greis=no +endif +ifneq ($(BR2_PACKAGE_GPSD_ISYNC),y) +GPSD_SCONS_OPTS += isync=no +endif +ifneq ($(BR2_PACKAGE_GPSD_ITRAX),y) +GPSD_SCONS_OPTS += itrax=no +endif +ifneq ($(BR2_PACKAGE_GPSD_MTK3301),y) +GPSD_SCONS_OPTS += mtk3301=no +endif +ifneq ($(BR2_PACKAGE_GPSD_NMEA),y) +GPSD_SCONS_OPTS += nmea0183=no +endif +ifneq ($(BR2_PACKAGE_GPSD_NTRIP),y) +GPSD_SCONS_OPTS += ntrip=no +endif +ifneq ($(BR2_PACKAGE_GPSD_NAVCOM),y) +GPSD_SCONS_OPTS += navcom=no +endif +ifneq ($(BR2_PACKAGE_GPSD_NMEA2000),y) +GPSD_SCONS_OPTS += nmea2000=no +endif +ifneq ($(BR2_PACKAGE_GPSD_OCEANSERVER),y) +GPSD_SCONS_OPTS += oceanserver=no +endif +ifneq ($(BR2_PACKAGE_GPSD_ONCORE),y) +GPSD_SCONS_OPTS += oncore=no +endif +ifneq ($(BR2_PACKAGE_GPSD_RTCM104V2),y) +GPSD_SCONS_OPTS += rtcm104v2=no +endif +ifneq ($(BR2_PACKAGE_GPSD_RTCM104V3),y) +GPSD_SCONS_OPTS += rtcm104v3=no +endif +ifneq ($(BR2_PACKAGE_GPSD_SIRF),y) +GPSD_SCONS_OPTS += sirf=no +endif +ifneq ($(BR2_PACKAGE_GPSD_SKYTRAQ),y) +GPSD_SCONS_OPTS += skytraq=no +endif +ifneq ($(BR2_PACKAGE_GPSD_SUPERSTAR2),y) +GPSD_SCONS_OPTS += superstar2=no +endif +ifneq ($(BR2_PACKAGE_GPSD_TRIMBLE_TSIP),y) +GPSD_SCONS_OPTS += tsip=no +endif +ifneq ($(BR2_PACKAGE_GPSD_TRIPMATE),y) +GPSD_SCONS_OPTS += tripmate=no +endif +ifneq ($(BR2_PACKAGE_GPSD_TRUE_NORTH),y) +GPSD_SCONS_OPTS += tnt=no +endif +ifneq ($(BR2_PACKAGE_GPSD_UBX),y) +GPSD_SCONS_OPTS += ublox=no +endif + +# Features +ifeq ($(BR2_PACKAGE_GPSD_SQUELCH),y) +GPSD_SCONS_OPTS += squelch=yes +endif +ifneq ($(BR2_PACKAGE_GPSD_RECONFIGURE),y) +GPSD_SCONS_OPTS += reconfigure=no +endif +ifneq ($(BR2_PACKAGE_GPSD_CONTROLSEND),y) +GPSD_SCONS_OPTS += controlsend=no +endif +ifneq ($(BR2_PACKAGE_GPSD_OLDSTYLE),y) +GPSD_SCONS_OPTS += oldstyle=no +endif +ifeq ($(BR2_PACKAGE_GPSD_PROFILING),y) +GPSD_SCONS_OPTS += profiling=yes +endif +ifneq ($(BR2_PACKAGE_GPSD_CLIENT_DEBUG),y) +GPSD_SCONS_OPTS += clientdebug=no +endif +ifeq ($(BR2_PACKAGE_GPSD_USER),y) +GPSD_SCONS_OPTS += gpsd_user=$(BR2_PACKAGE_GPSD_USER_VALUE) +endif +ifeq ($(BR2_PACKAGE_GPSD_GROUP),y) +GPSD_SCONS_OPTS += gpsd_group=$(BR2_PACKAGE_GPSD_GROUP_VALUE) +endif +ifeq ($(BR2_PACKAGE_GPSD_FIXED_PORT_SPEED),y) +GPSD_SCONS_OPTS += fixed_port_speed=$(BR2_PACKAGE_GPSD_FIXED_PORT_SPEED_VALUE) +endif +ifeq ($(BR2_PACKAGE_GPSD_MAX_CLIENT),y) +GPSD_SCONS_OPTS += max_clients=$(BR2_PACKAGE_GPSD_MAX_CLIENT_VALUE) +endif +ifeq ($(BR2_PACKAGE_GPSD_MAX_DEV),y) +GPSD_SCONS_OPTS += max_devices=$(BR2_PACKAGE_GPSD_MAX_DEV_VALUE) +endif + +GPSD_SCONS_ENV += \ + LDFLAGS="$(GPSD_LDFLAGS)" \ + CFLAGS="$(GPSD_CFLAGS)" \ + CCFLAGS="$(GPSD_CFLAGS)" + +define GPSD_BUILD_CMDS + (cd $(@D); \ + $(GPSD_SCONS_ENV) \ + $(HOST_DIR)/bin/python3 $(SCONS) \ + $(GPSD_SCONS_OPTS)) +endef + +define GPSD_INSTALL_TARGET_CMDS + (cd $(@D); \ + $(GPSD_SCONS_ENV) \ + DESTDIR=$(TARGET_DIR) \ + $(HOST_DIR)/bin/python3 $(SCONS) \ + $(GPSD_SCONS_OPTS) \ + $(if $(BR2_PACKAGE_HAS_UDEV),udev-install,install)) +endef + +define GPSD_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/gpsd/S50gpsd $(TARGET_DIR)/etc/init.d/S50gpsd + $(SED) 's,^DEVICES=.*,DEVICES=$(BR2_PACKAGE_GPSD_DEVICES),' $(TARGET_DIR)/etc/init.d/S50gpsd +endef + +# systemd unit files are installed automatically, but need to update the +# /usr/local path references in the provided files to /usr. +define GPSD_INSTALL_INIT_SYSTEMD + $(SED) 's%/usr/local%/usr%' \ + $(TARGET_DIR)/usr/lib/systemd/system/gpsd.service \ + $(TARGET_DIR)/usr/lib/systemd/system/gpsdctl@.service +endef + +define GPSD_INSTALL_STAGING_CMDS + (cd $(@D); \ + $(GPSD_SCONS_ENV) \ + DESTDIR=$(STAGING_DIR) \ + $(HOST_DIR)/bin/python3 $(SCONS) \ + $(GPSD_SCONS_OPTS) \ + install) +endef + +# After the udev rule is installed, make it writable so that this +# package can be re-built/re-installed. +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +define GPSD_INSTALL_UDEV_RULES + chmod u+w $(TARGET_DIR)/lib/udev/rules.d/25-gpsd.rules +endef + +GPSD_POST_INSTALL_TARGET_HOOKS += GPSD_INSTALL_UDEV_RULES +endif + +$(eval $(generic-package)) diff --git a/package/gptfdisk/0001-gptcurses-partially-revert-Tweaks-for-building-on-th.patch b/package/gptfdisk/0001-gptcurses-partially-revert-Tweaks-for-building-on-th.patch new file mode 100644 index 00000000..02f95453 --- /dev/null +++ b/package/gptfdisk/0001-gptcurses-partially-revert-Tweaks-for-building-on-th.patch @@ -0,0 +1,42 @@ +From 22e69d77d745b42ca85fefdf8c9f7625b852b964 Mon Sep 17 00:00:00 2001 +From: Pierre-Jean Texier +Date: Wed, 26 Feb 2020 22:08:28 +0100 +Subject: [PATCH] gptcurses: partially revert "Tweaks for building on the + latest XCode for macOS" + +This partially reverts commit bbd6b4cc67ffcdf7b2a6bd5008d28006cb147393. + +Fixes: + +| gptcurses.cc:29:10: fatal error: ncursesw/ncurses.h: No such file or directory +| 29 | #include +| | ^~~~~~~~~~~~~~~~~~~~ + +Signed-off-by: Pierre-Jean Texier +[Retrieved from: +https://sourceforge.net/u/texierp/gptfdisk/ci/22e69d77d745b42ca85fefdf8c9f7625b852b964 +Upstream status (with meson build system): +https://sourceforge.net/p/gptfdisk/code/merge-requests/21] +--- + gptcurses.cc | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/gptcurses.cc b/gptcurses.cc +index 1b18cf2..4ebfde1 100644 +--- a/gptcurses.cc ++++ b/gptcurses.cc +@@ -23,11 +23,7 @@ + #include + #include + #include +-#if defined (__APPLE__) || (__FreeBSD__) + #include +-#else +-#include +-#endif + #include "gptcurses.h" + #include "support.h" + +-- +2.26.2 + diff --git a/package/gptfdisk/Config.in b/package/gptfdisk/Config.in new file mode 100644 index 00000000..8d94d2bc --- /dev/null +++ b/package/gptfdisk/Config.in @@ -0,0 +1,47 @@ +comment "gptfdisk needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + +config BR2_PACKAGE_GPTFDISK + bool "gptfdisk" + depends on BR2_INSTALL_LIBSTDCPP + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + select BR2_PACKAGE_GPTFDISK_GDISK if \ + !(BR2_PACKAGE_GPTFDISK_SGDISK || BR2_PACKAGE_GPTFDISK_CGDISK) + help + GPT fdisk (consisting of the gdisk and sgdisk programs) is a + text-mode partitioning tool that works on Globally Unique + Identifier (GUID) Partition Table (GPT) disks, rather than on + the more common (through 2010) Master Boot Record (MBR) + partition tables. + + http://www.rodsbooks.com/gdisk/ + +if BR2_PACKAGE_GPTFDISK + +config BR2_PACKAGE_GPTFDISK_GDISK + bool "interactive gdisk" + help + Install the interactive GUID partition table (GPT) manipulator + /usr/sbin/gdisk which is modelled after and quite similar in + use to the traditional MBR based fdisk tool. + +config BR2_PACKAGE_GPTFDISK_SGDISK + bool "command line sgdisk" + select BR2_PACKAGE_POPT + help + Install the command-line GUID partition table (GPT) + manipulator /usr/sbin/sgdisk which is named after the + traditional MBR based sfdisk tool albeit with an entirely + different option syntax. + +config BR2_PACKAGE_GPTFDISK_CGDISK + bool "ncurses cgdisk" + depends on BR2_USE_WCHAR # ncurses wchar + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_NCURSES_WCHAR # needed because of UTF-16 + help + Install the ncurses-based GUID partition table (GPT) + manipulator /usr/sbin/cgdisk. + +endif diff --git a/package/gptfdisk/Config.in.host b/package/gptfdisk/Config.in.host new file mode 100644 index 00000000..1300d024 --- /dev/null +++ b/package/gptfdisk/Config.in.host @@ -0,0 +1,11 @@ +config BR2_PACKAGE_HOST_GPTFDISK + bool "host gptfdisk" + select BR2_PACKAGE_HOST_UTIL_LINUX + help + GPT fdisk (consisting of the gdisk and sgdisk programs) is a + text-mode partitioning tool that works on Globally Unique + Identifier (GUID) Partition Table (GPT) disks, rather than + on the more common (through 2010) Master Boot Record (MBR) + partition tables. + + http://www.rodsbooks.com/gdisk/ diff --git a/package/gptfdisk/gptfdisk.hash b/package/gptfdisk/gptfdisk.hash new file mode 100644 index 00000000..caded358 --- /dev/null +++ b/package/gptfdisk/gptfdisk.hash @@ -0,0 +1,5 @@ +# From http://sourceforge.net/projects/gptfdisk/files/gptfdisk/1.0.8/ +sha1 c8824e779056158fa32887e415f5399a8646c3c5 gptfdisk-1.0.8.tar.gz +# Locally computed +sha256 95d19856f004dabc4b8c342b2612e8d0a9eebdd52004297188369f152e9dc6df gptfdisk-1.0.8.tar.gz +sha256 231f7edcc7352d7734a96eef0b8030f77982678c516876fcb81e25b32d68564c COPYING diff --git a/package/gptfdisk/gptfdisk.mk b/package/gptfdisk/gptfdisk.mk new file mode 100644 index 00000000..9869975f --- /dev/null +++ b/package/gptfdisk/gptfdisk.mk @@ -0,0 +1,55 @@ +################################################################################ +# +# gptfdisk +# +################################################################################ + +GPTFDISK_VERSION = 1.0.8 +GPTFDISK_SITE = http://downloads.sourceforge.net/sourceforge/gptfdisk +GPTFDISK_LICENSE = GPL-2.0+ +GPTFDISK_LICENSE_FILES = COPYING + +GPTFDISK_TARGETS_$(BR2_PACKAGE_GPTFDISK_GDISK) += gdisk +GPTFDISK_TARGETS_$(BR2_PACKAGE_GPTFDISK_SGDISK) += sgdisk +GPTFDISK_TARGETS_$(BR2_PACKAGE_GPTFDISK_CGDISK) += cgdisk + +GPTFDISK_DEPENDENCIES += util-linux +ifeq ($(BR2_PACKAGE_GPTFDISK_SGDISK),y) +GPTFDISK_DEPENDENCIES += popt +endif +ifeq ($(BR2_PACKAGE_GPTFDISK_CGDISK),y) +GPTFDISK_DEPENDENCIES += ncurses +endif + +ifeq ($(BR2_STATIC_LIBS),y) +# gptfdisk dependencies may link against libiconv, so we need to do so +# as well when linking statically +ifeq ($(BR2_PACKAGE_LIBICONV),y) +GPTFDISK_DEPENDENCIES += libiconv +GPTFDISK_LDLIBS += -liconv +endif +endif + +define GPTFDISK_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) \ + LDLIBS='$(GPTFDISK_LDLIBS)' $(GPTFDISK_TARGETS_y) +endef + +define GPTFDISK_INSTALL_TARGET_CMDS + for i in $(GPTFDISK_TARGETS_y); do \ + $(INSTALL) -D -m 0755 $(@D)/$$i $(TARGET_DIR)/usr/sbin/$$i || exit 1; \ + done +endef + +HOST_GPTFDISK_DEPENDENCIES = host-util-linux host-popt + +define HOST_GPTFDISK_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) $(HOST_CONFIGURE_OPTS) -C $(@D) sgdisk +endef + +define HOST_GPTFDISK_INSTALL_CMDS + $(INSTALL) -D -m 0755 $(@D)/sgdisk $(HOST_DIR)/sbin/sgdisk +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/gqrx/Config.in b/package/gqrx/Config.in new file mode 100644 index 00000000..60942c36 --- /dev/null +++ b/package/gqrx/Config.in @@ -0,0 +1,51 @@ +comment "gqrx needs a toolchain w/ C++, threads, wchar, dynamic library" + depends on BR2_USE_MMU # gnuradio + depends on BR2_TOOLCHAIN_HAS_SYNC_4 || BR2_TOOLCHAIN_HAS_ATOMIC + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_USE_WCHAR || BR2_STATIC_LIBS + +comment "gqrx needs qt5" + depends on !BR2_PACKAGE_QT5 + +comment "gqrx needs a toolchain not affected by GCC bug 64735" + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 + +config BR2_PACKAGE_GQRX + bool "gqrx" + depends on BR2_USE_MMU # gnuradio + depends on !BR2_STATIC_LIBS # gnuradio + depends on BR2_INSTALL_LIBSTDCPP # boost + depends on BR2_TOOLCHAIN_HAS_THREADS # boost + depends on BR2_USE_WCHAR # boost + depends on BR2_TOOLCHAIN_HAS_SYNC_4 || BR2_TOOLCHAIN_HAS_ATOMIC + depends on BR2_PACKAGE_QT5 + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS # gnuradio -> boost-atomic + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # gnuradio + select BR2_PACKAGE_BOOST + select BR2_PACKAGE_BOOST_PROGRAM_OPTIONS + select BR2_PACKAGE_BOOST_SYSTEM + select BR2_PACKAGE_GNURADIO + select BR2_PACKAGE_GNURADIO_ANALOG + select BR2_PACKAGE_GNURADIO_AUDIO + select BR2_PACKAGE_GNURADIO_BLOCKS + select BR2_PACKAGE_GNURADIO_DIGITAL + select BR2_PACKAGE_GNURADIO_FFT + select BR2_PACKAGE_GNURADIO_FILTER + select BR2_PACKAGE_GR_OSMOSDR + select BR2_PACKAGE_QT5BASE_GUI + select BR2_PACKAGE_QT5BASE_WIDGETS + select BR2_PACKAGE_QT5SVG + help + Gqrx is an open source software defined radio (SDR) receiver + implemented using GNU Radio and the Qt GUI + toolkit. Currently it works on Linux and Mac with hardware + supported by gr-osmosdr, including Funcube Dongle, RTL-SDR, + Airspy, HackRF, BladeRF, RFSpace, USRP and SoapySDR. + + Gqrx can operate as an AM/FM/SSB receiver with audio output + or as an FFT-only instrument. There are also various hooks + for interacting with external application using network + sockets. + + http://gqrx.dk/ diff --git a/package/gqrx/gqrx.hash b/package/gqrx/gqrx.hash new file mode 100644 index 00000000..bfa4411c --- /dev/null +++ b/package/gqrx/gqrx.hash @@ -0,0 +1,4 @@ +# Locally calculated: +sha256 ff3a9e350f730823dec8edb38cddfd72f602c909cc4ac39082c445eb66f88d96 gqrx-2.13.2.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING +sha256 7cc22ce5ee61df62e427ec43b8130de149edee3cafb5af4f18d59b6dc3958faf LICENSE-CTK diff --git a/package/gqrx/gqrx.mk b/package/gqrx/gqrx.mk new file mode 100644 index 00000000..dd15db28 --- /dev/null +++ b/package/gqrx/gqrx.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# gqrx +# +################################################################################ + +GQRX_VERSION = 2.13.2 +GQRX_SITE = $(call github,csete,gqrx,v$(GQRX_VERSION)) +GQRX_LICENSE = GPL-3.0+, Apache-2.0 +GQRX_LICENSE_FILES = COPYING LICENSE-CTK +GQRX_DEPENDENCIES = boost gnuradio gr-osmosdr qt5base qt5svg + +GQRX_CONF_OPTS = -DLINUX_AUDIO_BACKEND=Gr-audio + +# gqrx can use __atomic builtins, so we need to link with +# libatomic when available +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +GQRX_CONF_OPTS += -DCMAKE_EXE_LINKER_FLAGS=-latomic +endif + +$(eval $(cmake-package)) diff --git a/package/gr-osmosdr/Config.in b/package/gr-osmosdr/Config.in new file mode 100644 index 00000000..04fa10be --- /dev/null +++ b/package/gr-osmosdr/Config.in @@ -0,0 +1,46 @@ +config BR2_PACKAGE_GR_OSMOSDR + bool "gr-osmosdr" + depends on BR2_PACKAGE_GNURADIO + select BR2_PACKAGE_GNURADIO_BLOCKS + select BR2_PACKAGE_GNURADIO_FFT + select BR2_PACKAGE_GNURADIO_FILTER + help + GNU Radio block for interfacing with various radio hardware + + http://osmocom.org/projects/osmosdr + +if BR2_PACKAGE_GR_OSMOSDR + +config BR2_PACKAGE_GR_OSMOSDR_PYTHON + bool "python support" + depends on BR2_PACKAGE_GNURADIO_PYTHON + depends on BR2_PACKAGE_PYTHON3 + help + Enable Python support + +config BR2_PACKAGE_GR_OSMOSDR_IQFILE + bool "IQ File Source support" + help + Enable IQ File Source support + +config BR2_PACKAGE_GR_OSMOSDR_RTLSDR + bool "Osmocom RTLSDR support" + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # librtlsdr -> libusb + select BR2_PACKAGE_LIBRTLSDR + help + Enable Osmocom RTLSDR support + +comment "Osmocom RTLSDR support needs a toolchain w/ gcc >= 4.9" + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + +config BR2_PACKAGE_GR_OSMOSDR_RTLSDR_TCP + bool "RTLSDR TCP Client support" + help + Enable RTLSDR TCP client support + +config BR2_PACKAGE_GR_OSMOSDR_RFSPACE + bool "RFSPACE Receivers support" + help + Enable RFSPACE Receivers support + +endif diff --git a/package/gr-osmosdr/gr-osmosdr.hash b/package/gr-osmosdr/gr-osmosdr.hash new file mode 100644 index 00000000..95f1137e --- /dev/null +++ b/package/gr-osmosdr/gr-osmosdr.hash @@ -0,0 +1,3 @@ +# Locally calculated: +sha256 11b1eb13725ced5ded9121a10aaf7bccf2430c5c69d020791408219968665b71 gr-osmosdr-0.2.3.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/gr-osmosdr/gr-osmosdr.mk b/package/gr-osmosdr/gr-osmosdr.mk new file mode 100644 index 00000000..870db60c --- /dev/null +++ b/package/gr-osmosdr/gr-osmosdr.mk @@ -0,0 +1,57 @@ +################################################################################ +# +# gr-osmosdr +# +################################################################################ + +GR_OSMOSDR_VERSION = 0.2.3 +GR_OSMOSDR_SITE = $(call github,osmocom,gr-osmosdr,v$(GR_OSMOSDR_VERSION)) +GR_OSMOSDR_LICENSE = GPL-3.0+ +GR_OSMOSDR_LICENSE_FILES = COPYING + +# gr-osmosdr prevents doing an in-source-tree build +GR_OSMOSDR_SUPPORTS_IN_SOURCE_BUILD = NO + +GR_OSMOSDR_DEPENDENCIES = gnuradio host-python3 + +GR_OSMOSDR_CONF_OPTS = \ + -DENABLE_DEFAULT=OFF \ + -DENABLE_DOXYGEN=OFF + +# For third-party blocks, the gr-osmosdr libraries are mandatory at +# compile time. +GR_OSMOSDR_INSTALL_STAGING = YES + +ifeq ($(BR2_PACKAGE_GR_OSMOSDR_PYTHON),y) +GR_OSMOSDR_CONF_OPTS += -DENABLE_PYTHON=ON +GR_OSMOSDR_DEPENDENCIES += python3 +else +GR_OSMOSDR_CONF_OPTS += -DENABLE_PYTHON=OFF +endif + +ifeq ($(BR2_PACKAGE_GR_OSMOSDR_IQFILE),y) +GR_OSMOSDR_CONF_OPTS += -DENABLE_FILE=ON +else +GR_OSMOSDR_CONF_OPTS += -DENABLE_FILE=OFF +endif + +ifeq ($(BR2_PACKAGE_GR_OSMOSDR_RTLSDR),y) +GR_OSMOSDR_CONF_OPTS += -DENABLE_RTL=ON +GR_OSMOSDR_DEPENDENCIES += librtlsdr +else +GR_OSMOSDR_CONF_OPTS += -DENABLE_RTL=OFF +endif + +ifeq ($(BR2_PACKAGE_GR_OSMOSDR_RTLSDR_TCP),y) +GR_OSMOSDR_CONF_OPTS += -DENABLE_RTL_TCP=ON +else +GR_OSMOSDR_CONF_OPTS += -DENABLE_RTL_TCP=OFF +endif + +ifeq ($(BR2_PACKAGE_GR_OSMOSDR_RFSPACE),y) +GR_OSMOSDR_CONF_OPTS += -DENABLE_RFSPACE=ON +else +GR_OSMOSDR_CONF_OPTS += -DENABLE_RFSPACE=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/granite/0001-meson-add-introspection-option.patch b/package/granite/0001-meson-add-introspection-option.patch new file mode 100644 index 00000000..4b32fb13 --- /dev/null +++ b/package/granite/0001-meson-add-introspection-option.patch @@ -0,0 +1,73 @@ +From 4d5ddcdb9c03d4e829fe7080e497a00f0b379eff Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 14 Jun 2020 17:33:31 +0200 +Subject: [PATCH] meson: add introspection option + +This will allow the user to build granite without gobject-introspection + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/elementary/granite/pull/410] +--- + lib/meson.build | 38 ++++++++++++++++++++------------------ + meson_options.txt | 1 + + 2 files changed, 21 insertions(+), 18 deletions(-) + +diff --git a/lib/meson.build b/lib/meson.build +index a9fc4ed4..770feeb5 100644 +--- a/lib/meson.build ++++ b/lib/meson.build +@@ -98,24 +98,26 @@ install_data( + install_dir: include_dir + ) + +-# typelib generation isn't automated yet +-g_ir_compiler = find_program('g-ir-compiler') +-custom_target( +- granite_typelib, +- command: [ +- g_ir_compiler, +- '--shared-library', +- '@PLAINNAME@', +- '--output', +- '@OUTPUT@', +- join_paths(meson.current_build_dir(), granite_gir), +- ], +- input: libgranite, +- output: granite_typelib, +- depends: libgranite, +- install: true, +- install_dir: join_paths(get_option('libdir'), 'girepository-1.0'), +-) ++if get_option('introspection') ++ # typelib generation isn't automated yet ++ g_ir_compiler = find_program('g-ir-compiler') ++ custom_target( ++ granite_typelib, ++ command: [ ++ g_ir_compiler, ++ '--shared-library', ++ '@PLAINNAME@', ++ '--output', ++ '@OUTPUT@', ++ join_paths(meson.current_build_dir(), granite_gir), ++ ], ++ input: libgranite, ++ output: granite_typelib, ++ depends: libgranite, ++ install: true, ++ install_dir: join_paths(get_option('libdir'), 'girepository-1.0'), ++ ) ++endif + + libgranite_dep = declare_dependency( + link_with: libgranite, +diff --git a/meson_options.txt b/meson_options.txt +index 9d9f62e9..bd1a1d6f 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -1 +1,2 @@ + option('documentation', type: 'boolean', value: false, description: 'generate documentation with gtk-doc and valadoc') ++option('introspection', type: 'boolean', value: true, description: 'Whether to build introspection files') +-- +2.26.2 + diff --git a/package/granite/Config.in b/package/granite/Config.in new file mode 100644 index 00000000..726bde1b --- /dev/null +++ b/package/granite/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_GRANITE + bool "granite" + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + depends on BR2_PACKAGE_LIBGTK3 + select BR2_PACKAGE_LIBGEE + select BR2_PACKAGE_LIBGLIB2 + help + An extension to GTK+ that provides several useful widgets and + classes to ease application development. + + https://github.com/elementary/granite + +comment "granite needs libgtk3 and a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_PACKAGE_LIBGTK3 || !BR2_USE_WCHAR \ + || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/granite/granite.hash b/package/granite/granite.hash new file mode 100644 index 00000000..5378b30c --- /dev/null +++ b/package/granite/granite.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 8194031cac3b87d84a3fab9c30270485ce73f8b8ec23f26c9152b6859c8a18fd granite-5.4.0.tar.gz +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 COPYING diff --git a/package/granite/granite.mk b/package/granite/granite.mk new file mode 100644 index 00000000..037113f7 --- /dev/null +++ b/package/granite/granite.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# granite +# +################################################################################ + +GRANITE_VERSION = 5.4.0 +GRANITE_SITE = $(call github,elementary,granite,$(GRANITE_VERSION)) +GRANITE_DEPENDENCIES = \ + host-pkgconf \ + host-vala \ + libgee \ + libglib2 \ + libgtk3 \ + $(TARGET_NLS_DEPENDENCIES) +GRANITE_INSTALL_STAGING = YES +GRANITE_LICENSE = LGPL-3.0+ +GRANITE_LICENSE_FILES = COPYING +GRANITE_LDFLAGS = $(TARGET_LDFLAGS) $(TARGET_NLS_LIBS) + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +GRANITE_CONF_OPTS += -Dintrospection=true +GRANITE_DEPENDENCIES += gobject-introspection +else +GRANITE_CONF_OPTS += -Dintrospection=false +endif + +$(eval $(meson-package)) diff --git a/package/grantlee/Config.in b/package/grantlee/Config.in new file mode 100644 index 00000000..779306bc --- /dev/null +++ b/package/grantlee/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_GRANTLEE + bool "grantlee" + depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE && BR2_PACKAGE_QT5 + select BR2_PACKAGE_QT5SCRIPT + select BR2_PACKAGE_QT5BASE_GUI + help + Qt implementation of the Django template framework + + http://www.grantlee.org diff --git a/package/grantlee/grantlee.hash b/package/grantlee/grantlee.hash new file mode 100644 index 00000000..6508aa70 --- /dev/null +++ b/package/grantlee/grantlee.hash @@ -0,0 +1,5 @@ +# Locally calculated +sha256 139acee5746b957bdf1327ec0d97c604d4c0b9be42aec5d584297cb5ed6a990a grantlee-5.2.0.tar.gz + +# Hash for license file +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 COPYING.LIB diff --git a/package/grantlee/grantlee.mk b/package/grantlee/grantlee.mk new file mode 100644 index 00000000..7079679c --- /dev/null +++ b/package/grantlee/grantlee.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# grantlee +# +################################################################################ + +GRANTLEE_VERSION = 5.2.0 +GRANTLEE_SITE = $(call github,steveire,grantlee,v$(GRANTLEE_VERSION)) +GRANTLEE_INSTALL_STAGING = YES +GRANTLEE_LICENSE = LGPL-2.1+ +GRANTLEE_LICENSE_FILES = COPYING.LIB +GRANTLEE_DEPENDENCIES = qt5base qt5script + +$(eval $(cmake-package)) diff --git a/package/graphicsmagick/Config.in b/package/graphicsmagick/Config.in new file mode 100644 index 00000000..1e47d673 --- /dev/null +++ b/package/graphicsmagick/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_GRAPHICSMAGICK + bool "graphicsmagick" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_THREADS + help + GraphicsMagick is the swiss army knife of image processing. + It provides a robust and efficient collection of tools + and libraries which support reading, writing, + and manipulating an image in over 89 major formats + including important formats like DPX, GIF, JPEG, JPEG-2000, + PNG, PDF, PNM, TIFF, and WebP. + + http://www.graphicsmagick.org/ + +comment "graphicsmagick needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/graphicsmagick/graphicsmagick.hash b/package/graphicsmagick/graphicsmagick.hash new file mode 100644 index 00000000..6ad5de9d --- /dev/null +++ b/package/graphicsmagick/graphicsmagick.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 5d5b3fde759cdfc307aaf21df9ebd8c752e3f088bb051dd5df8aac7ba7338f46 GraphicsMagick-1.3.36.tar.xz +sha256 aed5bd8e28cbce601cbe2ca2267b663ccd63152965f2d5caea1311bf0039c325 Copyright.txt diff --git a/package/graphicsmagick/graphicsmagick.mk b/package/graphicsmagick/graphicsmagick.mk new file mode 100644 index 00000000..2a22936f --- /dev/null +++ b/package/graphicsmagick/graphicsmagick.mk @@ -0,0 +1,125 @@ +################################################################################ +# +# graphicsmagick +# +################################################################################ + +GRAPHICSMAGICK_VERSION = 1.3.36 +GRAPHICSMAGICK_SOURCE = GraphicsMagick-$(GRAPHICSMAGICK_VERSION).tar.xz +GRAPHICSMAGICK_SITE = https://downloads.sourceforge.net/project/graphicsmagick/graphicsmagick/$(GRAPHICSMAGICK_VERSION) +GRAPHICSMAGICK_LICENSE = MIT +GRAPHICSMAGICK_LICENSE_FILES = Copyright.txt +GRAPHICSMAGICK_CPE_ID_VENDOR = graphicsmagick + +GRAPHICSMAGICK_INSTALL_STAGING = YES +GRAPHICSMAGICK_CONFIG_SCRIPTS = GraphicsMagick-config GraphicsMagickWand-config + +ifeq ($(BR2_INSTALL_LIBSTDCPP),y) +GRAPHICSMAGICK_CONFIG_SCRIPTS += GraphicsMagick++-config +endif + +GRAPHICSMAGICK_CONF_OPTS = \ + --without-dps \ + --without-fpx \ + --without-jbig \ + --without-perl \ + --without-trio \ + --without-wmf \ + --without-x \ + --with-gs-font-dir=/usr/share/fonts/gs + +GRAPHICSMAGICK_DEPENDENCIES = host-pkgconf + +ifeq ($(BR2_TOOLCHAIN_HAS_OPENMP),y) +GRAPHICSMAGICK_CONF_OPTS += --enable-openmp +else +GRAPHICSMAGICK_CONF_OPTS += --disable-openmp +endif + +ifeq ($(BR2_PACKAGE_FREETYPE),y) +GRAPHICSMAGICK_CONF_OPTS += --with-ttf +GRAPHICSMAGICK_CONF_ENV += ac_cv_path_freetype_config=$(STAGING_DIR)/usr/bin/freetype-config +GRAPHICSMAGICK_DEPENDENCIES += freetype +else +GRAPHICSMAGICK_CONF_OPTS += --without-ttf +endif + +ifeq ($(BR2_PACKAGE_JPEG),y) +GRAPHICSMAGICK_CONF_OPTS += --with-jpeg +GRAPHICSMAGICK_DEPENDENCIES += jpeg +else +GRAPHICSMAGICK_CONF_OPTS += --without-jpeg +endif + +ifeq ($(BR2_PACKAGE_OPENJPEG),y) +GRAPHICSMAGICK_CONF_OPTS += --with-jp2 +GRAPHICSMAGICK_DEPENDENCIES += openjpeg +else +GRAPHICSMAGICK_CONF_OPTS += --without-jp2 +endif + +ifeq ($(BR2_PACKAGE_LCMS2),y) +GRAPHICSMAGICK_CONF_OPTS += --with-lcms2 +GRAPHICSMAGICK_DEPENDENCIES += lcms2 +else +GRAPHICSMAGICK_CONF_OPTS += --without-lcms2 +endif + +ifeq ($(BR2_PACKAGE_LIBPNG),y) +GRAPHICSMAGICK_CONF_OPTS += --with-png +GRAPHICSMAGICK_DEPENDENCIES += libpng +else +GRAPHICSMAGICK_CONF_OPTS += --without-png +endif + +ifeq ($(BR2_PACKAGE_LIBXML2),y) +GRAPHICSMAGICK_CONF_OPTS += --with-xml +GRAPHICSMAGICK_CONF_ENV += ac_cv_path_xml2_config=$(STAGING_DIR)/usr/bin/xml2-config +GRAPHICSMAGICK_DEPENDENCIES += libxml2 +else +GRAPHICSMAGICK_CONF_OPTS += --without-xml +endif + +ifeq ($(BR2_PACKAGE_TIFF),y) +GRAPHICSMAGICK_CONF_OPTS += --with-tiff +GRAPHICSMAGICK_DEPENDENCIES += tiff +else +GRAPHICSMAGICK_CONF_OPTS += --without-tiff +endif + +ifeq ($(BR2_PACKAGE_WEBP_MUX),y) +GRAPHICSMAGICK_CONF_OPTS += --with-webp +GRAPHICSMAGICK_DEPENDENCIES += webp +else +GRAPHICSMAGICK_CONF_OPTS += --without-webp +endif + +ifeq ($(BR2_PACKAGE_XZ),y) +GRAPHICSMAGICK_CONF_OPTS += --with-lzma +GRAPHICSMAGICK_DEPENDENCIES += xz +else +GRAPHICSMAGICK_CONF_OPTS += --without-lzma +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +GRAPHICSMAGICK_CONF_OPTS += --with-zlib +GRAPHICSMAGICK_DEPENDENCIES += zlib +else +GRAPHICSMAGICK_CONF_OPTS += --without-zlib +endif + +ifeq ($(BR2_PACKAGE_BZIP2),y) +GRAPHICSMAGICK_CONF_OPTS += --with-bzlib +GRAPHICSMAGICK_DEPENDENCIES += bzip2 +else +GRAPHICSMAGICK_CONF_OPTS += --without-bzlib +endif + +ifeq ($(BR2_PACKAGE_ZSTD),y) +GRAPHICSMAGICK_CONF_OPTS += --with-zstd +GRAPHICSMAGICK_DEPENDENCIES += zstd +else +GRAPHICSMAGICK_CONF_OPTS += --without-zstd +endif + +$(eval $(autotools-package)) diff --git a/package/graphite2/0001-don-t-install-a-libtool-file-with-static-library.patch b/package/graphite2/0001-don-t-install-a-libtool-file-with-static-library.patch new file mode 100644 index 00000000..ac150622 --- /dev/null +++ b/package/graphite2/0001-don-t-install-a-libtool-file-with-static-library.patch @@ -0,0 +1,67 @@ +From 3edb88b55c0870989778c670d555aa159a2c3abc Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 31 Aug 2020 20:56:43 +0200 +Subject: [PATCH] don't install a libtool file with static library + +Static library is supported since version 1.3.11 and +https://github.com/silnrsi/graphite/commit/2f143c04da5caa43ddf4dba437b2f2bc26bf4238 + +However, graphite2 is still installing libgraphite2.la which contains +incorrect information (i.e. dlname set to libgraphite2.so and +old_library set to ''): + +dlname='libgraphite2.so' + +library_names='libgraphite2.so.3.2.1 libgraphite2.so.3 libgraphite2.so' + +old_library='' + +dependency_libs='' + +This will result in the following build failure with any applications +using this file such as harfbuzz: + +arm-linux-g++.br_real: error: /home/buildroot/autobuild/run/instance-3/output-1/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libgraphite2.so: No such file or directory +make[5]: *** [main] Error 1 + +Instead of trying to fix this libtool file, just disable it when +building a static library as it is not needed + +Fixes: + - http://autobuild.buildroot.org/results/9ebe1d11e80755d59190ef2aae82bbba5cc45e44 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/silnrsi/graphite/pull/65] +--- + src/CMakeLists.txt | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index b6ac26bf..a7ace040 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -131,7 +131,9 @@ if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + nolib_test(stdc++ $) + endif () + set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "") +- CREATE_LIBTOOL_FILE(graphite2 "/lib${LIB_SUFFIX}") ++ if (BUILD_SHARED_LIBS) ++ CREATE_LIBTOOL_FILE(graphite2 "/lib${LIB_SUFFIX}") ++ endif() + endif() + + if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") +@@ -146,7 +148,9 @@ if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") + include(Graphite) + nolib_test(stdc++ $) + set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "") +- CREATE_LIBTOOL_FILE(graphite2 "/lib${LIB_SUFFIX}") ++ if (BUILD_SHARED_LIBS) ++ CREATE_LIBTOOL_FILE(graphite2 "/lib${LIB_SUFFIX}") ++ endif() + endif() + + if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows") +-- +2.28.0 + diff --git a/package/graphite2/Config.in b/package/graphite2/Config.in new file mode 100644 index 00000000..ec92ff7b --- /dev/null +++ b/package/graphite2/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_GRAPHITE2 + bool "graphite2" + depends on BR2_INSTALL_LIBSTDCPP + help + Graphite is a project within SIL's scripts and software dev + groups to provide cross-platform rendering for complex + writing systems. + + https://github.com/silnrsi/graphite + +comment "graphite2 needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/graphite2/graphite2.hash b/package/graphite2/graphite2.hash new file mode 100644 index 00000000..e005375f --- /dev/null +++ b/package/graphite2/graphite2.hash @@ -0,0 +1,4 @@ +# From https://github.com/silnrsi/graphite/releases/download/1.3.14/graphite2-1.3.14.sha256sum +sha256 f99d1c13aa5fa296898a181dff9b82fb25f6cc0933dbaa7a475d8109bd54209d graphite2-1.3.14.tgz +# Locally computed +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 LICENSE diff --git a/package/graphite2/graphite2.mk b/package/graphite2/graphite2.mk new file mode 100644 index 00000000..7f9e3c51 --- /dev/null +++ b/package/graphite2/graphite2.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# graphite2 +# +################################################################################ + +GRAPHITE2_VERSION = 1.3.14 +GRAPHITE2_SOURCE = graphite2-$(GRAPHITE2_VERSION).tgz +GRAPHITE2_SITE = \ + https://github.com/silnrsi/graphite/releases/download/$(GRAPHITE2_VERSION) +GRAPHITE2_INSTALL_STAGING = YES +GRAPHITE2_LICENSE = LGPL-2.1+ +GRAPHITE2_LICENSE_FILES = LICENSE +GRAPHITE2_CPE_ID_VENDOR = sil + +# Avoid building docs and tests to save time +define GRAPHITE2_DISABLE_TESTS_DOC + $(SED) '/^add_subdirectory(doc)/d' \ + -e '/^add_subdirectory(tests)/d' \ + -e '/add_subdirectory(gr2fonttest)/d' \ + $(@D)/CMakeLists.txt +endef +GRAPHITE2_POST_PATCH_HOOKS += GRAPHITE2_DISABLE_TESTS_DOC + +$(eval $(cmake-package)) diff --git a/package/grep/Config.in b/package/grep/Config.in new file mode 100644 index 00000000..665c05c0 --- /dev/null +++ b/package/grep/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_GREP + bool "grep" + depends on BR2_USE_WCHAR + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + The GNU regular expression matcher. + + egrep/fgrep aliases need /bin/sh to be available. + + http://www.gnu.org/software/grep/grep.html + +comment "grep needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS diff --git a/package/grep/grep.hash b/package/grep/grep.hash new file mode 100644 index 00000000..9dfe2f2c --- /dev/null +++ b/package/grep/grep.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking signature +# http://ftp.gnu.org/gnu/grep/grep-3.6.tar.xz.sig +# using key 155D3FC500C834486D1EEA677FD9FCCB000BEEEE +sha256 667e15e8afe189e93f9f21a7cd3a7b3f776202f417330b248c2ad4f997d9373e grep-3.6.tar.xz +sha256 3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986 COPYING diff --git a/package/grep/grep.mk b/package/grep/grep.mk new file mode 100644 index 00000000..27d204d4 --- /dev/null +++ b/package/grep/grep.mk @@ -0,0 +1,48 @@ +################################################################################ +# +# grep +# +################################################################################ + +GREP_VERSION = 3.6 +GREP_SITE = $(BR2_GNU_MIRROR)/grep +GREP_SOURCE = grep-$(GREP_VERSION).tar.xz +GREP_LICENSE = GPL-3.0+ +GREP_LICENSE_FILES = COPYING +GREP_CPE_ID_VENDOR = gnu +GREP_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) +# install into /bin like busybox grep +GREP_CONF_OPTS = --exec-prefix=/ + +ifeq ($(BR2_SYSTEM_BIN_SH_NONE),y) + +define GREP_REMOVE_ALIAS + $(RM) $(TARGET_DIR)/bin/[fe]grep +endef +GREP_POST_INSTALL_TARGET_HOOKS += GREP_REMOVE_ALIAS + +else + +# ensure egrep/fgrep shell wrappers use #!/bin/sh +define GREP_FIXUP_SHEBANG + $(SED) 's/bash$$/sh/' $(TARGET_DIR)/bin/[fe]grep +endef +GREP_POST_INSTALL_TARGET_HOOKS += GREP_FIXUP_SHEBANG + +endif + +# link with iconv if enabled +ifeq ($(BR2_PACKAGE_LIBICONV),y) +GREP_CONF_ENV += LIBS=-liconv +GREP_DEPENDENCIES += libiconv +endif + +# link with pcre if enabled +ifeq ($(BR2_PACKAGE_PCRE),y) +GREP_CONF_OPTS += --enable-perl-regexp +GREP_DEPENDENCIES += pcre +else +GREP_CONF_OPTS += --disable-perl-regexp +endif + +$(eval $(autotools-package)) diff --git a/package/grpc/0001-CMakeLists.txt-fix-cross-compilation-with-gRPC_BUILD.patch b/package/grpc/0001-CMakeLists.txt-fix-cross-compilation-with-gRPC_BUILD.patch new file mode 100644 index 00000000..553be8cb --- /dev/null +++ b/package/grpc/0001-CMakeLists.txt-fix-cross-compilation-with-gRPC_BUILD.patch @@ -0,0 +1,43 @@ +From 268815d74ea34856c686dce9e9c23106b51f2782 Mon Sep 17 00:00:00 2001 +From: Thomas De Schampheleire +Date: Tue, 2 Feb 2021 21:46:29 +0100 +Subject: [PATCH] CMakeLists.txt: fix cross-compilation with + gRPC_BUILD_GRPC_CPP_PLUGIN=OFF + +When cross-compiling gRPC, a native version of 'grpc_cpp_plugin' is searched +in the environment. For most use cases, a cross version of this file is not +needed. + +However, when cross-building with -DgRPC_BUILD_GRPC_CPP_PLUGIN=OFF, there +are some build errors, for example: + +make[3]: *** No rule to make target 'grpc_cpp_plugin', needed by 'gens/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc'. Stop. + +This is because there is still a hard dependency on 'grpc_cpp_plugin' for +these targets, not taking into account the cross-compilation case. + +Fix by depending on the variable gRPC_CPP_PLUGIN, which is set correctly for +either cross or native case. + +Signed-off-by: Thomas De Schampheleire + +--- + CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 6bdae22083..08aea609f7 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -317,7 +317,7 @@ function(protobuf_generate_grpc_cpp) + --plugin=protoc-gen-grpc=${_gRPC_CPP_PLUGIN} + ${_protobuf_include_path} + ${REL_FIL} +- DEPENDS ${ABS_FIL} ${_gRPC_PROTOBUF_PROTOC} grpc_cpp_plugin ++ DEPENDS ${ABS_FIL} ${_gRPC_PROTOBUF_PROTOC} ${_gRPC_CPP_PLUGIN} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Running gRPC C++ protocol buffer compiler on ${FIL}" + VERBATIM) +-- +2.26.2 + diff --git a/package/grpc/0002-Properly-detect-the-availability-of-pthread_setname_.patch b/package/grpc/0002-Properly-detect-the-availability-of-pthread_setname_.patch new file mode 100644 index 00000000..32493ac1 --- /dev/null +++ b/package/grpc/0002-Properly-detect-the-availability-of-pthread_setname_.patch @@ -0,0 +1,51 @@ +From 0dfb289a3b362b082ac3608d887e42f09dadc0d2 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Mon, 31 Dec 2018 16:22:07 +0100 +Subject: [PATCH] Properly detect the availability of pthread_setname_np() + +This commit adds a CMake check for the availability of +pthread_setname_np(), and only uses it on Linux when available. + +Indeed, some C libraries, such as uClibc, do not provide this +non-POSIX function in all cases. + +Upstream: https://github.com/grpc/grpc/pull/17610 +Signed-off-by: Thomas Petazzoni +--- + CMakeLists.txt | 6 ++++++ + include/grpc/impl/codegen/port_platform.h | 2 ++ + 2 files changed, 8 insertions(+) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 45c2fcb..0b2be4f 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -208,6 +208,12 @@ if (NOT DEFINED CMAKE_POSITION_INDEPENDENT_CODE) + endif() + list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules") + ++include(CheckSymbolExists) ++check_symbol_exists(pthread_setname_np pthread.h HAVE_PTHREAD_SETNAME_NP) ++if (HAVE_PTHREAD_SETNAME_NP) ++ add_definitions(-DHAVE_PTHREAD_SETNAME_NP) ++endif () ++ + if(MSVC) + include(cmake/msvc_static_runtime.cmake) + add_definitions(-D_WIN32_WINNT=0x600 -D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS -D_WINSOCK_DEPRECATED_NO_WARNINGS) +diff --git a/include/grpc/impl/codegen/port_platform.h b/include/grpc/impl/codegen/port_platform.h +index 4f213ff..55ecd9d 100644 +--- a/include/grpc/impl/codegen/port_platform.h ++++ b/include/grpc/impl/codegen/port_platform.h +@@ -168,7 +168,9 @@ + #endif /* _LP64 */ + #ifdef __GLIBC__ + #define GPR_POSIX_CRASH_HANDLER 1 ++#if defined(HAVE_PTHREAD_SETNAME_NP) + #define GPR_LINUX_PTHREAD_NAME 1 ++#endif /* HAVE_PTHREAD_SETNAME_NP */ + #include + #else /* musl libc */ + #define GPR_MUSL_LIBC_COMPAT 1 +-- +2.26.63 diff --git a/package/grpc/0003-wrap_memcpy.cc-add-GPR_DISABLE_WRAPPED_MEMCPY.patch b/package/grpc/0003-wrap_memcpy.cc-add-GPR_DISABLE_WRAPPED_MEMCPY.patch new file mode 100644 index 00000000..ad648044 --- /dev/null +++ b/package/grpc/0003-wrap_memcpy.cc-add-GPR_DISABLE_WRAPPED_MEMCPY.patch @@ -0,0 +1,34 @@ +From be030314805137cd63b46ea6eaa702b608669910 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 2 Jun 2019 17:45:47 +0200 +Subject: [PATCH] wrap_memcpy.cc: add GPR_DISABLE_WRAPPED_MEMCPY + +Add GPR_DISABLE_WRAPPED_MEMCPY to allow the user to disable wrapped +memcpy. This will fix build on x86_64 on musl/uclibc without changing +the cpu behavior. + +Fixes: + - http://autobuild.buildroot.org/results/20d6f2489a4e291a53bd514da66105eb607e1014 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/grpc/grpc/pull/19207] +--- + src/core/lib/gpr/wrap_memcpy.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/lib/gpr/wrap_memcpy.cc b/src/core/lib/gpr/wrap_memcpy.cc +index 9b8608e056..38b76acf95 100644 +--- a/src/core/lib/gpr/wrap_memcpy.cc ++++ b/src/core/lib/gpr/wrap_memcpy.cc +@@ -28,7 +28,7 @@ + + extern "C" { + #ifdef __linux__ +-#if defined(__x86_64__) && !defined(GPR_MUSL_LIBC_COMPAT) ++#if defined(__x86_64__) && !defined(GPR_MUSL_LIBC_COMPAT) && !defined(GPR_DISABLE_WRAPPED_MEMCPY) + __asm__(".symver memcpy,memcpy@GLIBC_2.2.5"); + void* __wrap_memcpy(void* destination, const void* source, size_t num) { + return memcpy(destination, source, num); +-- +2.20.1 + diff --git a/package/grpc/Config.in b/package/grpc/Config.in new file mode 100644 index 00000000..d1bf0d07 --- /dev/null +++ b/package/grpc/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_GRPC + bool "grpc" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS # protobuf, re2 + depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS # protobuf + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # protobuf, re2, libabseil-cpp + depends on BR2_HOST_GCC_AT_LEAST_4_9 # host-libabseil-cpp + depends on !BR2_STATIC_LIBS # protobuf, libabseil-cpp + depends on BR2_TOOLCHAIN_HAS_SYNC_4 || BR2_TOOLCHAIN_HAS_ATOMIC + depends on BR2_PACKAGE_LIBABSEIL_CPP_ARCH_SUPPORTS + select BR2_PACKAGE_C_ARES + select BR2_PACKAGE_LIBABSEIL_CPP + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_PROTOBUF + select BR2_PACKAGE_RE2 + select BR2_PACKAGE_ZLIB + help + A language-neutral, platform-neutral, open source, remote + procedure call (RPC) system initially developed at Google. + + http://github.com/grpc/grpc + +comment "grpc needs a toolchain w/ C++, threads, dynamic library, gcc >= 4.9, host gcc >= 4.9" + depends on BR2_PACKAGE_LIBABSEIL_CPP_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_SYNC_4 || BR2_TOOLCHAIN_HAS_ATOMIC + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS \ + || BR2_STATIC_LIBS || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 \ + || !BR2_HOST_GCC_AT_LEAST_4_9 + depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS diff --git a/package/grpc/grpc.hash b/package/grpc/grpc.hash new file mode 100644 index 00000000..52d25fc5 --- /dev/null +++ b/package/grpc/grpc.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 27dd2fc5c9809ddcde8eb6fa1fa278a3486566dfc28335fca13eb8df8bd3b958 grpc-1.35.0.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE diff --git a/package/grpc/grpc.mk b/package/grpc/grpc.mk new file mode 100644 index 00000000..f7a704dc --- /dev/null +++ b/package/grpc/grpc.mk @@ -0,0 +1,83 @@ +################################################################################ +# +# grpc +# +################################################################################ + +GRPC_VERSION = 1.35.0 +GRPC_SITE = $(call github,grpc,grpc,v$(GRPC_VERSION)) +GRPC_LICENSE = Apache-2.0 +GRPC_LICENSE_FILES = LICENSE +GRPC_CPE_ID_VENDOR = grpc + +GRPC_INSTALL_STAGING = YES + +# Need to use host grpc_cpp_plugin during cross compilation. +GRPC_DEPENDENCIES = c-ares host-grpc libabseil-cpp openssl protobuf re2 zlib +HOST_GRPC_DEPENDENCIES = host-c-ares host-libabseil-cpp host-openssl host-protobuf \ + host-re2 host-zlib + +# gRPC_CARES_PROVIDER=package won't work because it requires c-ares to have +# installed a cmake config file, but buildroot uses c-ares' autotools build, +# which doesn't do this. These CARES settings trick the gRPC cmake code into +# not looking for c-ares at all and yet still linking with the library. +GRPC_CONF_OPTS = \ + -DgRPC_ABSL_PROVIDER=package \ + -D_gRPC_CARES_LIBRARIES=cares \ + -DgRPC_CARES_PROVIDER=none \ + -DgRPC_PROTOBUF_PROVIDER=package \ + -DgRPC_RE2_PROVIDER=package \ + -DgRPC_SSL_PROVIDER=package \ + -DgRPC_ZLIB_PROVIDER=package \ + -DgRPC_BUILD_GRPC_CPP_PLUGIN=OFF \ + -DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF \ + -DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF \ + -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF \ + -DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF \ + -DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF \ + -DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF + +# grpc can use __atomic builtins, so we need to link with +# libatomic when available +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +GRPC_CONF_OPTS += -DCMAKE_EXE_LINKER_FLAGS=-latomic +endif + +GRPC_CFLAGS = $(TARGET_CFLAGS) +GRPC_CXXFLAGS = $(TARGET_CXXFLAGS) + +# Set GPR_DISABLE_WRAPPED_MEMCPY otherwise build will fail on x86_64 with uclibc +# because grpc tries to link with memcpy@GLIBC_2.2.5 +ifeq ($(BR2_x86_64):$(BR2_TOOLCHAIN_USES_GLIBC),y:) +GRPC_CFLAGS += -DGPR_DISABLE_WRAPPED_MEMCPY +GRPC_CXXFLAGS += -DGPR_DISABLE_WRAPPED_MEMCPY +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y) +GRPC_CFLAGS += -O0 +GRPC_CXXFLAGS += -O0 +endif + +# Toolchains older than gcc5 will fail to compile with -0s due to: +# error: failure memory model cannot be stronger than success memory model for +# '__atomic_compare_exchange', so we use -O2 in these cases +ifeq ($(BR2_TOOLCHAIN_GCC_AT_LEAST_5):$(BR2_OPTIMIZE_S),:y) +GRPC_CFLAGS += -O2 +GRPC_CXXFLAGS += -O2 +endif + +GRPC_CONF_OPTS += \ + -DCMAKE_C_FLAGS="$(GRPC_CFLAGS)" \ + -DCMAKE_CXX_FLAGS="$(GRPC_CXXFLAGS)" + +HOST_GRPC_CONF_OPTS = \ + -DgRPC_ABSL_PROVIDER=package \ + -D_gRPC_CARES_LIBRARIES=cares \ + -DgRPC_CARES_PROVIDER=none \ + -DgRPC_PROTOBUF_PROVIDER=package \ + -DgRPC_RE2_PROVIDER=package \ + -DgRPC_SSL_PROVIDER=package \ + -DgRPC_ZLIB_PROVIDER=package + +$(eval $(cmake-package)) +$(eval $(host-cmake-package)) diff --git a/package/gsettings-desktop-schemas/Config.in b/package/gsettings-desktop-schemas/Config.in new file mode 100644 index 00000000..0dfffc38 --- /dev/null +++ b/package/gsettings-desktop-schemas/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_GSETTINGS_DESKTOP_SCHEMAS + bool "gsettings-desktop-schemas" + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + select BR2_PACKAGE_LIBGLIB2 + help + gsettings-desktop-schemas contains a collection of GSettings + schemas for settings shared by various components of a + desktop. + + https://github.com/GNOME/gsettings-desktop-schemas + +comment "gsettings-desktop-schemas needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/gsettings-desktop-schemas/gsettings-desktop-schemas.hash b/package/gsettings-desktop-schemas/gsettings-desktop-schemas.hash new file mode 100644 index 00000000..d530517c --- /dev/null +++ b/package/gsettings-desktop-schemas/gsettings-desktop-schemas.hash @@ -0,0 +1,5 @@ +# From http://ftp.acc.umu.se/pub/gnome/sources/gsettings-desktop-schemas/3.36/gsettings-desktop-schemas-3.36.1.sha256sum +sha256 004bdbe43cf8290f2de7d8537e14d8957610ca479a4fa368e34dbd03f03ec9d9 gsettings-desktop-schemas-3.36.1.tar.xz + +# Hash for license file +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/gsettings-desktop-schemas/gsettings-desktop-schemas.mk b/package/gsettings-desktop-schemas/gsettings-desktop-schemas.mk new file mode 100644 index 00000000..8573c75f --- /dev/null +++ b/package/gsettings-desktop-schemas/gsettings-desktop-schemas.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# gsettings-desktop-schemas +# +################################################################################ + +GSETTINGS_DESKTOP_SCHEMAS_VERSION_MAJOR = 3.36 +GSETTINGS_DESKTOP_SCHEMAS_VERSION = $(GSETTINGS_DESKTOP_SCHEMAS_VERSION_MAJOR).1 +GSETTINGS_DESKTOP_SCHEMAS_SOURCE = gsettings-desktop-schemas-$(GSETTINGS_DESKTOP_SCHEMAS_VERSION).tar.xz +GSETTINGS_DESKTOP_SCHEMAS_SITE = http://ftp.gnome.org/pub/gnome/sources/gsettings-desktop-schemas/$(GSETTINGS_DESKTOP_SCHEMAS_VERSION_MAJOR) +GSETTINGS_DESKTOP_SCHEMAS_INSTALL_STAGING = YES +GSETTINGS_DESKTOP_SCHEMAS_DEPENDENCIES = host-pkgconf libglib2 +GSETTINGS_DESKTOP_SCHEMAS_LICENSE = LGPL-2.1+ +GSETTINGS_DESKTOP_SCHEMAS_LICENSE_FILES = COPYING +GSETTINGS_DESKTOP_SCHEMAS_CONF_OPTS = -Dintrospection=false + +$(eval $(meson-package)) diff --git a/package/gsl/Config.in b/package/gsl/Config.in new file mode 100644 index 00000000..5b82ac2a --- /dev/null +++ b/package/gsl/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_GSL + bool "gsl" + help + The GNU Scientific Library (GSL) is a numerical library for + C and C++ programmers. The library provides a wide range of + mathematical routines such as random number generators, + special functions and least-squares fitting. There are over + 1000 functions in total with an extensive test suite. + + http://www.gnu.org/software/gsl diff --git a/package/gsl/gsl.hash b/package/gsl/gsl.hash new file mode 100644 index 00000000..0d40a754 --- /dev/null +++ b/package/gsl/gsl.hash @@ -0,0 +1,3 @@ +# Locally calculated after checking pgp signature +sha256 b782339fc7a38fe17689cb39966c4d821236c28018b6593ddb6fd59ee40786a8 gsl-2.6.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/gsl/gsl.mk b/package/gsl/gsl.mk new file mode 100644 index 00000000..416955b7 --- /dev/null +++ b/package/gsl/gsl.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# gsl +# +################################################################################ + +GSL_VERSION = 2.6 +GSL_SITE = $(BR2_GNU_MIRROR)/gsl +GSL_INSTALL_STAGING = YES +GSL_LICENSE = GPL-3.0 +GSL_LICENSE_FILES = COPYING +GSL_CONFIG_SCRIPTS = gsl-config + +# uClibc pretends to have fenv support as it installs , but in +# practice, it only implements it for i386. Problem reported upstream +# at: http://lists.busybox.net/pipermail/uclibc/2012-October/047067.html. +# So we tell gsl that fenv related functions are not available in this +# case. +ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y) +ifneq ($(BR2_i386),y) +GSL_CONF_ENV = \ + ac_cv_have_decl_feenableexcept=no \ + ac_cv_have_decl_fesettrapenable=no +endif +endif + +$(eval $(autotools-package)) diff --git a/package/gssdp/Config.in b/package/gssdp/Config.in new file mode 100644 index 00000000..80c5edff --- /dev/null +++ b/package/gssdp/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_GSSDP + bool "gssdp" + depends on BR2_USE_WCHAR # glib2, libsoup + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2, libsoup + depends on BR2_USE_MMU # glib2, libsoup + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBSOUP + help + GSSDP implements resource discovery and announcement over + SSDP. + + http://www.gupnp.org + +comment "gssdp needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/gssdp/gssdp.hash b/package/gssdp/gssdp.hash new file mode 100644 index 00000000..f31f2194 --- /dev/null +++ b/package/gssdp/gssdp.hash @@ -0,0 +1,5 @@ +# Hash from: http://ftp.gnome.org/pub/gnome/sources/gssdp/1.2/gssdp-1.2.3.sha256sum: +sha256 a263dcb6730e3b3dc4bbbff80cf3fab4cd364021981d419db6dd5a8e148aa7e8 gssdp-1.2.3.tar.xz + +# Hash for license file: +sha256 d245807f90032872d1438d741ed21e2490e1175dc8aa3afa5ddb6c8e529b58e5 COPYING diff --git a/package/gssdp/gssdp.mk b/package/gssdp/gssdp.mk new file mode 100644 index 00000000..02b10d96 --- /dev/null +++ b/package/gssdp/gssdp.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# gssdp +# +################################################################################ + +GSSDP_VERSION_MAJOR = 1.2 +GSSDP_VERSION = $(GSSDP_VERSION_MAJOR).3 +GSSDP_SOURCE = gssdp-$(GSSDP_VERSION).tar.xz +GSSDP_SITE = http://ftp.gnome.org/pub/gnome/sources/gssdp/$(GSSDP_VERSION_MAJOR) +GSSDP_LICENSE = LGPL-2.0+ +GSSDP_LICENSE_FILES = COPYING +GSSDP_INSTALL_STAGING = YES +GSSDP_DEPENDENCIES = host-pkgconf libglib2 libsoup +GSSDP_CONF_OPTS = -Dexamples=false + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +GSSDP_CONF_OPTS += -Dintrospection=true -Dvapi=true +GSSDP_DEPENDENCIES += host-vala gobject-introspection +else +GSSDP_CONF_OPTS += -Dintrospection=false -Dvapi=false +endif + +ifeq ($(BR2_PACKAGE_LIBGTK3),y) +GSSDP_DEPENDENCIES += libgtk3 +GSSDP_CONF_OPTS += -Dsniffer=true +else +GSSDP_CONF_OPTS += -Dsniffer=false +endif + +$(eval $(meson-package)) diff --git a/package/gstreamer1/Config.in b/package/gstreamer1/Config.in new file mode 100644 index 00000000..4a811133 --- /dev/null +++ b/package/gstreamer1/Config.in @@ -0,0 +1,21 @@ +# Gstreamer 1.x & Plugins +source "package/gstreamer1/gstreamer1/Config.in" + +if BR2_PACKAGE_GSTREAMER1 +source "package/gstreamer1/gstreamer1-mm/Config.in" +source "package/gstreamer1/gst1-plugins-base/Config.in" +source "package/gstreamer1/gst1-plugins-bayer2rgb-neon/Config.in" +source "package/gstreamer1/gst1-plugins-good/Config.in" +source "package/gstreamer1/gst1-plugins-bad/Config.in" +source "package/gstreamer1/gst1-plugins-ugly/Config.in" +source "package/gstreamer1/gst1-devtools/Config.in" +source "package/gstreamer1/gst1-imx/Config.in" +source "package/gstreamer1/gst1-interpipe/Config.in" +source "package/gstreamer1/gst1-libav/Config.in" +source "package/gstreamer1/gst1-python/Config.in" +source "package/gstreamer1/gst1-rtsp-server/Config.in" +source "package/gstreamer1/gst1-shark/Config.in" +source "package/gstreamer1/gst1-vaapi/Config.in" +source "package/gstreamer1/gst-omx/Config.in" +source "package/gstreamer1/gstreamer1-editing-services/Config.in" +endif diff --git a/package/gstreamer1/gst-omx/Config.in b/package/gstreamer1/gst-omx/Config.in new file mode 100644 index 00000000..efe3d211 --- /dev/null +++ b/package/gstreamer1/gst-omx/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_GST_OMX + bool "gst-omx" + depends on BR2_PACKAGE_HAS_LIBOPENMAX + select BR2_PACKAGE_GST1_PLUGINS_BASE + help + GStreamer plug-in to use OpenMAX API. + + https://cgit.freedesktop.org/gstreamer/gst-omx + +comment "gst-omx requires a OpenMAX implementation" + depends on !BR2_PACKAGE_HAS_LIBOPENMAX diff --git a/package/gstreamer1/gst-omx/gst-omx.hash b/package/gstreamer1/gst-omx/gst-omx.hash new file mode 100644 index 00000000..ceeaf4e5 --- /dev/null +++ b/package/gstreamer1/gst-omx/gst-omx.hash @@ -0,0 +1,3 @@ +# From https://gstreamer.freedesktop.org/src/gst-omx/gst-omx-1.18.4.tar.xz.sha256sum +sha256 e35051cf891eb2f31d6fcf176ff37d985f97f33874ac31b0b3ad3b5b95035043 gst-omx-1.18.4.tar.xz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/gstreamer1/gst-omx/gst-omx.mk b/package/gstreamer1/gst-omx/gst-omx.mk new file mode 100644 index 00000000..36a05be6 --- /dev/null +++ b/package/gstreamer1/gst-omx/gst-omx.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# gst-omx +# +################################################################################ + +GST_OMX_VERSION = 1.18.4 +GST_OMX_SOURCE = gst-omx-$(GST_OMX_VERSION).tar.xz +GST_OMX_SITE = https://gstreamer.freedesktop.org/src/gst-omx + +GST_OMX_LICENSE = LGPL-2.1 +GST_OMX_LICENSE_FILES = COPYING + +GST_OMX_CONF_OPTS = \ + -Dexamples=disabled \ + -Dtests=disabled \ + -Dtools=disabled \ + -Ddoc=disabled + +ifeq ($(BR2_PACKAGE_RPI_USERLAND),y) +GST_OMX_VARIANT = rpi +GST_OMX_CONF_OPTS += -Dheader_path=$(STAGING_DIR)/usr/include/IL +else +GST_OMX_VARIANT = generic +endif + +GST_OMX_CONF_OPTS += -Dtarget=$(GST_OMX_VARIANT) + +GST_OMX_DEPENDENCIES = gstreamer1 gst1-plugins-base libopenmax + +# adjust library paths to where buildroot installs them +define GST_OMX_FIXUP_CONFIG_PATHS + find $(@D)/config -name gstomx.conf | \ + xargs $(SED) 's|/usr/local|/usr|g' -e 's|/opt/vc|/usr|g' +endef + +GST_OMX_POST_PATCH_HOOKS += GST_OMX_FIXUP_CONFIG_PATHS + +$(eval $(meson-package)) diff --git a/package/gstreamer1/gst1-devtools/Config.in b/package/gstreamer1/gst1-devtools/Config.in new file mode 100644 index 00000000..55cf25d5 --- /dev/null +++ b/package/gstreamer1/gst1-devtools/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_GST1_DEVTOOLS + bool "gst1-devtools" + depends on BR2_PACKAGE_PYTHON || BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_GSTREAMER1_CHECK + select BR2_PACKAGE_GST1_PLUGINS_BASE + select BR2_PACKAGE_JSON_GLIB + select BR2_PACKAGE_PYTHON_PYEXPAT if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_PYEXPAT if BR2_PACKAGE_PYTHON3 + # cairo is autodetected but needs PNG support + select BR2_PACKAGE_CAIRO_PNG if BR2_PACKAGE_CAIRO + help + GStreamer development tools (gst-validate). + + https://gstreamer.freedesktop.org + +comment "gst1-devtools depends on python" + depends on !BR2_PACKAGE_PYTHON + depends on !BR2_PACKAGE_PYTHON3 diff --git a/package/gstreamer1/gst1-devtools/gst1-devtools.hash b/package/gstreamer1/gst1-devtools/gst1-devtools.hash new file mode 100644 index 00000000..4c0c5b5b --- /dev/null +++ b/package/gstreamer1/gst1-devtools/gst1-devtools.hash @@ -0,0 +1,3 @@ +# From https://gstreamer.freedesktop.org/src/gst-devtools/gst-devtools-1.18.4.tar.xz.sha256sum +sha256 ffbd194c40912cb5e7fca2863648bf9dd8257b7af97d3a60c4fcd4efd8526ccf gst-devtools-1.18.4.tar.xz +sha256 6095e9ffa777dd22839f7801aa845b31c9ed07f3d6bf8a26dc5d2dec8ccc0ef3 validate/COPYING diff --git a/package/gstreamer1/gst1-devtools/gst1-devtools.mk b/package/gstreamer1/gst1-devtools/gst1-devtools.mk new file mode 100644 index 00000000..5a10e4fa --- /dev/null +++ b/package/gstreamer1/gst1-devtools/gst1-devtools.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# gst1-devtools +# +################################################################################ + +GST1_DEVTOOLS_VERSION = 1.18.4 +GST1_DEVTOOLS_SOURCE = gst-devtools-$(GST1_DEVTOOLS_VERSION).tar.xz +GST1_DEVTOOLS_SITE = https://gstreamer.freedesktop.org/src/gst-devtools +GST1_DEVTOOLS_LICENSE = LGPL-2.1+ +GST1_DEVTOOLS_LICENSE_FILES = validate/COPYING +GST1_DEVTOOLS_INSTALL_STAGING = YES + +GST1_DEVTOOLS_DEPENDENCIES = \ + gstreamer1 \ + gst1-plugins-base \ + json-glib \ + $(if $(BR2_PACKAGE_CAIRO),cairo) + +ifeq ($(BR2_PACKAGE_PYTHON3),y) +GST1_DEVTOOLS_DEPENDENCIES += host-python3 python3 +else +GST1_DEVTOOLS_DEPENDENCIES += host-python python +endif + +ifeq ($(BR2_PACKAGE_GST1_RTSP_SERVER),y) +GST1_DEVTOOLS_DEPENDENCIES += gst1-rtsp-server +endif + +GST1_DEVTOOLS_CONF_OPTS = \ + -Dvalidate=enabled \ + -Ddebug_viewer=disabled \ + -Dintrospection=disabled \ + -Dtests=disabled \ + -Ddoc=disabled + +$(eval $(meson-package)) diff --git a/package/gstreamer1/gst1-imx/Config.in b/package/gstreamer1/gst1-imx/Config.in new file mode 100644 index 00000000..7b46233b --- /dev/null +++ b/package/gstreamer1/gst1-imx/Config.in @@ -0,0 +1,98 @@ +comment "gst1-imx needs a toolchain w/ dynamic library" + depends on BR2_arm + depends on BR2_STATIC_LIBS + +menuconfig BR2_PACKAGE_GST1_IMX + bool "gst1-imx" + depends on BR2_arm # Only relevant for i.MX + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_GST1_PLUGINS_BASE + help + This is a set of GStreamer 1.0 plugins for plugins for + Freescale's i.MX platforms, which make use of the i.MX + multimedia capabilities. + + https://github.com/Freescale/gstreamer-imx + +if BR2_PACKAGE_GST1_IMX + +config BR2_PACKAGE_GST1_IMX_EGLVISINK + bool "imxeglvivsink" + depends on BR2_PACKAGE_IMX_GPU_VIV + help + Elements leveraging the 3D GPU + +comment "imxeglvivsink needs the Vivante 3D libraries" + depends on !BR2_PACKAGE_IMX_GPU_VIV + +config BR2_PACKAGE_GST1_IMX_G2D + bool "imxg2d" + depends on BR2_PACKAGE_IMX_GPU_G2D + help + Elements leveraging the 2D GPU + +comment "imxg2d needs the G2D libraries" + depends on !BR2_PACKAGE_IMX_GPU_G2D + +config BR2_PACKAGE_GST1_IMX_IPU + bool "imxipu" + depends on BR2_LINUX_KERNEL + help + Elements leveraging the IPU + +comment "imxipu needs an imx-specific Linux kernel to be built" + depends on !BR2_LINUX_KERNEL + +config BR2_PACKAGE_GST1_IMX_MP3ENCODER + bool "mp3encoder" + depends on BR2_PACKAGE_IMX_CODEC + help + Elements for MP3 encoding + +comment "mp3encoder needs the i.MX codec binaries" + depends on !BR2_PACKAGE_IMX_CODEC + +config BR2_PACKAGE_GST1_IMX_PXP + bool "imxpxp" + depends on BR2_LINUX_KERNEL + help + Elements leveraging the PXP + +comment "imxpxp needs an imx-specific Linux kernel to be built" + depends on !BR2_LINUX_KERNEL + +config BR2_PACKAGE_GST1_IMX_UNIAUDIODEC + bool "uniaudiodec" + depends on BR2_PACKAGE_IMX_CODEC + help + Elements for audio decoding + +comment "uniaudiodec needs the i.MX codec binaries" + depends on !BR2_PACKAGE_IMX_CODEC + +config BR2_PACKAGE_GST1_IMX_VPU + bool "imxvpu" + depends on BR2_PACKAGE_LIBIMXVPUAPI + help + Elements leveraging the VPU + +comment "imxvpu needs the VPU imxvpuapi library" + depends on !BR2_PACKAGE_LIBIMXVPUAPI + +config BR2_PACKAGE_GST1_IMX_V4L2VIDEOSRC + bool "imxv4l2videosrc" + select BR2_PACKAGE_GST1_PLUGINS_BAD + help + Elements for V4L2 capture + +config BR2_PACKAGE_GST1_IMX_V4L2VIDEOSINK + bool "imxv4l2videosink" + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2 # V4L2_COLORSPACE_DEFAULT + select BR2_PACKAGE_GST1_PLUGINS_BAD + help + Elements for V4L2 output + +comment "imxv4l2videosink needs a toolchain w/ headers >= 4.2" + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2 + +endif diff --git a/package/gstreamer1/gst1-imx/gst1-imx.hash b/package/gstreamer1/gst1-imx/gst1-imx.hash new file mode 100644 index 00000000..0a701a05 --- /dev/null +++ b/package/gstreamer1/gst1-imx/gst1-imx.hash @@ -0,0 +1,3 @@ +# locally computed hash +sha256 21feb24130c18e4a1f8cc4f72d575903d1f9134dd0604e41e91b5e783d81e320 gst1-imx-0.13.1.tar.gz +sha256 94b03f1a60a7fd5007149530626a895a6ef5a8b9342abfd56860c5f3956f5d23 LICENSE diff --git a/package/gstreamer1/gst1-imx/gst1-imx.mk b/package/gstreamer1/gst1-imx/gst1-imx.mk new file mode 100644 index 00000000..f091b4f9 --- /dev/null +++ b/package/gstreamer1/gst1-imx/gst1-imx.mk @@ -0,0 +1,104 @@ +################################################################################ +# +# gst1-imx +# +################################################################################ + +GST1_IMX_VERSION = 0.13.1 +GST1_IMX_SITE = $(call github,Freescale,gstreamer-imx,$(GST1_IMX_VERSION)) + +GST1_IMX_LICENSE = LGPL-2.0+ +GST1_IMX_LICENSE_FILES = LICENSE + +GST1_IMX_INSTALL_STAGING = YES +GST1_IMX_NEEDS_EXTERNAL_WAF = YES + +GST1_IMX_DEPENDENCIES += \ + host-pkgconf \ + gstreamer1 \ + gst1-plugins-base + +GST1_IMX_CONF_OPTS = --prefix="/usr" + +ifeq ($(BR2_LINUX_KERNEL),y) +# IPU and PXP need access to imx-specific kernel headers +GST1_IMX_DEPENDENCIES += linux +GST1_IMX_CONF_OPTS += --kernel-headers="$(LINUX_DIR)/include" +endif + +ifeq ($(BR2_PACKAGE_IMX_CODEC),y) +GST1_IMX_DEPENDENCIES += imx-codec +endif + +ifeq ($(BR2_PACKAGE_IMX_GPU_VIV),y) +GST1_IMX_DEPENDENCIES += imx-gpu-viv +endif + +ifeq ($(BR2_PACKAGE_IMX_GPU_G2D),y) +GST1_IMX_DEPENDENCIES += imx-gpu-g2d +endif + +ifeq ($(BR2_PACKAGE_GST1_IMX_EGLVISINK),y) +# There's no --enable-eglvivsink option +ifeq ($(BR2_PACKAGE_XLIB_LIBX11),y) +GST1_IMX_DEPENDENCIES += xlib_libX11 +GST1_IMX_CONF_OPTS += --egl-platform=x11 +else +ifeq ($(BR2_PACKAGE_WAYLAND),y) +GST1_IMX_DEPENDENCIES += wayland +GST1_IMX_CONF_OPTS += --egl-platform=wayland +else +GST1_IMX_CONF_OPTS += --egl-platform=fb +endif +endif +else +GST1_IMX_CONF_OPTS += --disable-eglvivsink +endif + +# There's no --enable-g2d option +ifeq ($(BR2_PACKAGE_GST1_IMX_G2D),) +GST1_IMX_CONF_OPTS += --disable-g2d +endif + +# There's no --enable-ipu option +ifeq ($(BR2_PACKAGE_GST1_IMX_IPU),) +GST1_IMX_CONF_OPTS += --disable-ipu +endif + +# There's no --enable-mp3encoder option +ifeq ($(BR2_PACKAGE_GST1_IMX_MP3ENCODER),) +GST1_IMX_CONF_OPTS += --disable-mp3encoder +endif + +# There's no --enable-pxp option +ifeq ($(BR2_PACKAGE_GST1_IMX_PXP),) +GST1_IMX_CONF_OPTS += --disable-pxp +endif + +# There's no --enable-uniaudiodec option +ifeq ($(BR2_PACKAGE_GST1_IMX_UNIAUDIODEC),) +GST1_IMX_CONF_OPTS += --disable-uniaudiodec +endif + +ifeq ($(BR2_PACKAGE_GST1_IMX_VPU),y) +# There's no --enable-vpu option +GST1_IMX_DEPENDENCIES += libimxvpuapi +else +GST1_IMX_CONF_OPTS += --disable-vpu +endif + +ifeq ($(BR2_PACKAGE_GST1_IMX_V4L2VIDEOSRC),y) +# There's no --enable-imxv4l2videosrc option +GST1_IMX_DEPENDENCIES += gst1-plugins-bad +else +GST1_IMX_CONF_OPTS += --disable-imxv4l2videosrc +endif + +ifeq ($(BR2_PACKAGE_GST1_IMX_V4L2VIDEOSINK),y) +# There's no --enable-imxv4l2videosink option +GST1_IMX_DEPENDENCIES += gst1-plugins-bad +else +GST1_IMX_CONF_OPTS += --disable-imxv4l2videosink +endif + +$(eval $(waf-package)) diff --git a/package/gstreamer1/gst1-interpipe/Config.in b/package/gstreamer1/gst1-interpipe/Config.in new file mode 100644 index 00000000..5640c2b3 --- /dev/null +++ b/package/gstreamer1/gst1-interpipe/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_GST1_INTERPIPE + bool "gst1-interpipe" + select BR2_PACKAGE_GSTREAMER1_CHECK + select BR2_PACKAGE_GST1_PLUGINS_BASE + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_APP + help + GstInterpipe is a Gstreamer plug-in that allows communication + between two independent pipelines. + + https://github.com/RidgeRun/gst-interpipe diff --git a/package/gstreamer1/gst1-interpipe/gst1-interpipe.hash b/package/gstreamer1/gst1-interpipe/gst1-interpipe.hash new file mode 100644 index 00000000..124a2e40 --- /dev/null +++ b/package/gstreamer1/gst1-interpipe/gst1-interpipe.hash @@ -0,0 +1,5 @@ +# locally computed hash +sha256 2fd86aebfe03849a19e9d02db3a8f97bf6f77de835d36ae84282d6f734df323c gst1-interpipe-1.1.4-br1.tar.gz + +# Hashes for license files: +sha256 16d7caa6cabbfd0ca47e064a7b48cb446d013e84ca88c854d6470851752136d5 COPYING diff --git a/package/gstreamer1/gst1-interpipe/gst1-interpipe.mk b/package/gstreamer1/gst1-interpipe/gst1-interpipe.mk new file mode 100644 index 00000000..eb1e6dd5 --- /dev/null +++ b/package/gstreamer1/gst1-interpipe/gst1-interpipe.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# gst1-interpipe +# +################################################################################ + +GST1_INTERPIPE_VERSION = 1.1.4 +GST1_INTERPIPE_SITE = https://github.com/RidgeRun/gst-interpipe +GST1_INTERPIPE_SITE_METHOD = git +# fetch gst-interpipe/common sub module +GST1_INTERPIPE_GIT_SUBMODULES = YES + +GST1_INTERPIPE_LICENSE = LGPL-2.1 +GST1_INTERPIPE_LICENSE_FILES = COPYING + +GST1_INTERPIPE_DEPENDENCIES = host-pkgconf gstreamer1 gst1-plugins-base + +GST1_INTERPIPE_CONF_OPTS = \ + -Dtests=disabled \ + -Denable-gtk-doc=false + +$(eval $(meson-package)) diff --git a/package/gstreamer1/gst1-libav/Config.in b/package/gstreamer1/gst1-libav/Config.in new file mode 100644 index 00000000..e58a3532 --- /dev/null +++ b/package/gstreamer1/gst1-libav/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_GST1_LIBAV + bool "gst1-libav" + depends on BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS + select BR2_PACKAGE_FFMPEG + select BR2_PACKAGE_FFMPEG_SWSCALE + select BR2_PACKAGE_GST1_PLUGINS_BASE + help + GStreamer plugin (formerly gst-ffmpeg). + + This package contains GStreamer plugins based on + the libav project. + + The codecs, muxers, bitstreams and filters to build can be + selected in the ffmpeg package. + + https://gstreamer.freedesktop.org/ diff --git a/package/gstreamer1/gst1-libav/gst1-libav.hash b/package/gstreamer1/gst1-libav/gst1-libav.hash new file mode 100644 index 00000000..632c2f86 --- /dev/null +++ b/package/gstreamer1/gst1-libav/gst1-libav.hash @@ -0,0 +1,3 @@ +# From https://gstreamer.freedesktop.org/src/gst-libav/gst-libav-1.18.4.tar.xz.sha256sum +sha256 344a463badca216c2cef6ee36f9510c190862bdee48dc4591c0a430df7e8c396 gst-libav-1.18.4.tar.xz +sha256 f445dc78b88496f7e20c7a2a461b95baba5865c8919b8289ac24ac0a80c6ce7a COPYING diff --git a/package/gstreamer1/gst1-libav/gst1-libav.mk b/package/gstreamer1/gst1-libav/gst1-libav.mk new file mode 100644 index 00000000..8ae5b87b --- /dev/null +++ b/package/gstreamer1/gst1-libav/gst1-libav.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# gst1-libav +# +################################################################################ + +GST1_LIBAV_VERSION = 1.18.4 +GST1_LIBAV_SOURCE = gst-libav-$(GST1_LIBAV_VERSION).tar.xz +GST1_LIBAV_SITE = https://gstreamer.freedesktop.org/src/gst-libav +GST1_LIBAV_LICENSE = LGPL-2.0+ +GST1_LIBAV_LICENSE_FILES = COPYING +GST1_LIBAV_DEPENDENCIES = host-pkgconf ffmpeg gstreamer1 gst1-plugins-base +GST1_LIBAV_CONF_OPTS = -Ddoc=disabled + +$(eval $(meson-package)) diff --git a/package/gstreamer1/gst1-plugins-bad/Config.in b/package/gstreamer1/gst1-plugins-bad/Config.in new file mode 100644 index 00000000..628a9df4 --- /dev/null +++ b/package/gstreamer1/gst1-plugins-bad/Config.in @@ -0,0 +1,686 @@ +menuconfig BR2_PACKAGE_GST1_PLUGINS_BAD + bool "gst1-plugins-bad" + select BR2_PACKAGE_GST1_PLUGINS_BASE + help + A set of plug-ins for GStreamer that may be of poor quality + or lacking some features. + + https://gstreamer.freedesktop.org/ + +if BR2_PACKAGE_GST1_PLUGINS_BAD + +comment "dependency-less plugins" + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_ACCURIP + bool "accurip" + help + Accurip plugin + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_ADPCMDEC + bool "adpcmdec" + help + ADPCM decoder + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_ADPCMENC + bool "adpcmenc" + help + ADPCM encoder + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_AIFF + bool "aiff" + help + Create and parse Audio interchange File Format (AIFF) files + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_ASFMUX + bool "asfmux" + help + ASF Muxer Plugin + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_AUDIOBUFFERSPLIT + bool "audiobuffersplit" + help + Audio buffersplit plugin + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_AUDIOFXBAD + bool "audiofxbad" + help + Audio filters plugin + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_AUDIOLATENCY + bool "audiolatency" + help + Audio latency plugin + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_AUDIOMIXMATRIX + bool "audiomixmatrix" + help + Audio N:M mixer plugin + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_AUDIOVISUALIZERS + bool "audiovisualizers" + help + Creates video visualizations of audio input + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_AUTOCONVERT + bool "autoconvert" + help + Selects convertor element based on caps + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_BAYER + bool "bayer" + help + Elements to convert Bayer images + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_CAMERABIN2 + bool "camerabin2" + help + Take image snapshots and record movies from camera + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_COLOREFFECTS + bool "coloreffects" + help + Color Look-up Table filters + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DEBUGUTILS + bool "debugutils" + help + Collection of elements that may or may not be useful for + debugging + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DVBSUBENC + bool "dvbsubenc" + help + DVB subpicture encoding support + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DVBSUBOVERLAY + bool "dvbsuboverlay" + help + DVB subtitle renderer plugin + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DVDSPU + bool "dvdspu" + help + DVD Sub-picture Overlay element + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_FACEOVERLAY + bool "faceoverlay" + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_FESTIVAL + bool "festival" + help + Synthesizes plain text into audio + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_FIELDANALYSIS + bool "fieldanalysis" + help + Video field analysis + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_FREEVERB + bool "freeverb" + help + Reverberation/room effect + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_FREI0R + bool "frei0r" + help + frei0r plugin library + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_GAUDIEFFECTS + bool "gaudieffects" + help + Gaudi video effects + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_GEOMETRICTRANSFORM + bool "geometrictransform" + help + Various geometric image transform elements + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_GDP + bool "gdp" + help + Payload/depayload GDP packets + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_ID3TAG + bool "id3tag" + help + ID3 v1 and v2 muxing plugin + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_INTER + bool "inter" + help + plugin for inter-pipeline communication + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_INTERLACE + bool "interlace" + help + Create an interlaced video stream + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_IVFPARSE + bool "ivfparse" + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_IVTC + bool "ivtc" + help + Inverse Telecine plugin + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_JP2KDECIMATOR + bool "jp2kdecimator" + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_JPEGFORMAT + bool "jpegformat" + help + JPEG interchange format plugin + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_LIBRFB + bool "librfb" + help + Connects to a VNC server and decodes RFB stream + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MIDI + bool "midi" + help + MIDI plugin + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MPEGDEMUX + bool "mpegdemux" + help + MPEG-PS demuxer + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MPEGTSDEMUX + bool "mpegtsdemux" + help + MPEG TS demuxer + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MPEGTSMUX + bool "mpegtsmux" + help + MPEG-TS muxer + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MPEGPSMUX + bool "mpegpsmux" + help + MPEG-PS muxer + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MXF + bool "mxf" + help + MXF plugin library + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_NETSIM + bool "netsim" + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_ONVIF + bool "onvif" + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_PCAPPARSE + bool "pcapparse" + help + Element parsing raw pcap streams + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_PNM + bool "pnm" + help + PNM plugin + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_PROXY + bool "proxy" + help + Proxy plugin + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_RAWPARSE + bool "rawparse" + help + Parses byte streams into raw frames + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_REMOVESILENCE + bool "removesilence" + help + Removes silence from an audio stream + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_RIST + bool "rist" + help + RIST streaming + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_RTMP2 + bool "rtmp2" + help + RTMP sink/source (rtmp2sink, rtmp2src) + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_RTP2 + bool "rtp" + help + RTP (rtpsrc/rtpsink) + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_RTMP + bool "rtmp" + select BR2_PACKAGE_RTMPDUMP + help + RTMP plugin + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SDP + bool "sdp" + help + configure streaming sessions using SDP + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SEGMENTCLIP + bool "segmentclip" + help + Segment clip elements + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SIREN + bool "siren" + help + Siren encoder/decoder/payloader/depayloader plugins + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SMOOTH + bool "smooth" + help + Apply a smooth filter to an image + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SPEED + bool "speed" + help + Set speed/pitch on audio/raw streams (resampler) + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SUBENC + bool "subenc" + help + subtitle encoders + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SWITCHBIN + bool "switchbin" + help + Switching between paths based on input caps + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_TIMECODE + bool "timecode" + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VIDEOFILTERS + bool "videofilters" + help + Video filters in gst-plugins-bad + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VIDEOFRAME_AUDIOLEVEL + bool "videoframe_audiolevel" + help + videoframe_audiolevel + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VIDEOPARSERS + bool "videoparsers" + help + videoparsers + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VIDEOSIGNAL + bool "videosignal" + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VMNC + bool "vmnc" + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_Y4M + bool "y4m" + help + Demuxes/decodes YUV4MPEG streams + +comment "plugins with external dependencies" + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_ASSRENDER + bool "assrender" + depends on BR2_INSTALL_LIBSTDCPP # libass -> harfbuzz + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # libass -> harfbuzz + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # libass -> harfbuzz + select BR2_PACKAGE_LIBASS + +comment "assrender plugin needs a toolchain w/ C++, gcc => 4.8" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_BLUEZ + bool "bluez" + depends on BR2_USE_WCHAR # bluez5_utils -> libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # bluez5_utils -> dbus, libglib2 + depends on BR2_USE_MMU # bluez5_utils -> dbus + depends on !BR2_STATIC_LIBS # bluez5_utils -> uses dlfcn + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4 # bluez5_utils + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # bluez5_utils + select BR2_PACKAGE_BLUEZ5_UTILS + help + Bluetooth audio A2DP/AVDTP sink, AVDTP source plugin + +comment "bluez plugin needs a toolchain w/ wchar, threads, headers >= 3.4, dynamic library" + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4 || BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_USE_MMU + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_BZ2 + bool "bz2" + select BR2_PACKAGE_BZIP2 + help + Compress or decompress streams + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_CURL + bool "curl" + select BR2_PACKAGE_LIBCURL + help + libcurl-based elements + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DASH + bool "dash" + select BR2_PACKAGE_LIBXML2 + help + DASH demuxer plugin + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DECKLINK + bool "decklink" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS # + help + Blackmagic Decklink plugin + +comment "decklink needs a toolchain w/ C++, dynamic library" + depends on !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DIRECTFB + bool "directfb" + default y + depends on BR2_PACKAGE_DIRECTFB + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DVB + bool "dvb" + # FEC_2_5 / QAM_4_NR definitions + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7 + select BR2_PACKAGE_DTV_SCAN_TABLES + help + DVB elements + +comment "dvb needs a toolchain w/ headers >= 3.7" + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7 + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_FAAD + bool "faad" + select BR2_PACKAGE_FAAD2 + help + Free AAC Decoder (FAAD) + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_FBDEV + bool "fbdev" + help + Linux framebuffer video sink + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_FDK_AAC + bool "fdk-aac" + depends on BR2_PACKAGE_FDK_AAC_ARCH_SUPPORTS + depends on BR2_INSTALL_LIBSTDCPP + select BR2_PACKAGE_FDK_AAC + help + MPEG AAC encoder/decoder + +comment "fdk-aac needs a toolchain w/ C++" + depends on BR2_PACKAGE_FDK_AAC_ARCH_SUPPORTS + depends on !BR2_INSTALL_LIBSTDCPP + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_FLUIDSYNTH + bool "fluidsynth" + depends on !BR2_STATIC_LIBS # fluidsynth + depends on BR2_USE_WCHAR # fluidsynth + depends on BR2_TOOLCHAIN_HAS_THREADS # fluidsynth + depends on BR2_USE_MMU # fluidsynth + select BR2_PACKAGE_FLUIDSYNTH + help + Fluidsynth MIDI decoder plugin + +comment "fluidsynth needs a toolchain w/ threads, wchar, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_GL + bool "gl" + default y + depends on BR2_PACKAGE_GST1_PLUGINS_BASE_HAS_LIB_OPENGL + +comment "gl needs the gst1-plugins-base opengl library" + depends on !BR2_PACKAGE_GST1_PLUGINS_BASE_HAS_LIB_OPENGL + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_HLS + bool "hls" + select BR2_PACKAGE_NETTLE if !(BR2_PACKAGE_LIBGCRYPT || BR2_PACKAGE_OPENSSL) + help + Fragmented streaming plugins + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_KMS + bool "kmssink" + depends on BR2_TOOLCHAIN_HAS_THREADS # libdrm -> libpthread-stubs + select BR2_PACKAGE_LIBDRM + help + KMS video sink + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_LIBMMS + bool "libmms" + depends on BR2_USE_WCHAR # libmms -> libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libmms -> libglib2 + select BR2_PACKAGE_LIBMMS + help + Microsoft Multi Media Server streaming protocol support + +comment "libmms needs a toolchain w/ wchar, threads" + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DTLS + bool "dtls" + select BR2_PACKAGE_OPENSSL + help + DTLS plugin + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_TTML + bool "ttml" + depends on BR2_USE_WCHAR # pango -> glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # pango -> glib2 + depends on BR2_INSTALL_LIBSTDCPP # pango -> freetype + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # pango -> harfbuzz + select BR2_PACKAGE_CAIRO + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_PANGO + help + Timed Text Markup Language (TTML) subtitle plugin + +comment "ttml needs a toolchain w/ wchar, threads, C++" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_INSTALL_LIBSTDCPP + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MPEG2ENC + bool "mpeg2enc" + depends on BR2_USE_MMU # fork + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_LIBMPEG2 + select BR2_PACKAGE_MJPEGTOOLS + help + High-quality MPEG-1/2 video encoder + +comment "mpeg2enc needs a toolchain w/ threads, C++" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS \ + || !BR2_INSTALL_LIBSTDCPP + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MUSEPACK + bool "musepack" + select BR2_PACKAGE_MUSEPACK + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_NEON + bool "neon" + select BR2_PACKAGE_NEON + help + lib neon http client src + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_OPENAL + bool "openal" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_PAKCAGE_OPENAL_ARCH_SUPPORTS + select BR2_PACKAGE_OPENAL + +comment "openal plugin needs a toolchain w/ NPTL, C++, gcc >= 4.9" + depends on BR2_PAKCAGE_OPENAL_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL \ + || !BR2_INSTALL_LIBSTDCPP \ + || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_OPENH264 + bool "openh264" + depends on BR2_PACKAGE_LIBOPENH264_ARCH_SUPPORTS + depends on BR2_INSTALL_LIBSTDCPP # libopenh264 + depends on !BR2_STATIC_LIBS # libopenh264 + depends on BR2_TOOLCHAIN_HAS_THREADS # libopenh264 + select BR2_PACKAGE_LIBOPENH264 + help + OpenH264 based encoding/decoding plugin + +comment "openh264 plugin needs a toolchain w/ C++, dynamic library, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS + depends on BR2_PACKAGE_LIBOPENH264_ARCH_SUPPORTS + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_OPENJPEG + bool "openjpeg" + select BR2_PACKAGE_OPENJPEG + help + GStreamer OpenJPEG plugin + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_OPUS + bool "opus" + select BR2_PACKAGE_OPUS + help + OPUS plugin library + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_RSVG + bool "rsvg" + depends on BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS # librsvg + depends on BR2_INSTALL_LIBSTDCPP # librsvg -> pango + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # librsvg -> pango -> harfbuzz + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # librsvg -> pango -> harfbuzz + select BR2_PACKAGE_LIBRSVG + help + RSVG plugin library + +comment "rsvg plugin needs a toolchain w/ C++, gcc >= 4.8" + depends on BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SBC + bool "sbc" + select BR2_PACKAGE_SBC + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SCTP + bool "sctp" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # __sync_*_4 intrinsics + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SHM + bool "shm" + help + shared memory sink source + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SNDFILE + bool "sndfile" + select BR2_PACKAGE_LIBSNDFILE + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SRTP + bool "srtp" + select BR2_PACKAGE_LIBSRTP + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VOAACENC + bool "voaacenc" + select BR2_PACKAGE_VO_AACENC + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_WAYLAND + bool "wayland" + default y + depends on BR2_PACKAGE_WAYLAND + depends on BR2_TOOLCHAIN_HAS_THREADS # libdrm -> libpthread-stubs + select BR2_PACKAGE_LIBDRM + select BR2_PACKAGE_WAYLAND_PROTOCOLS + help + Wayland Video Sink + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_WEBP + bool "webp" + select BR2_PACKAGE_WEBP + help + Webp image format plugin + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_WEBRTC + bool "webrtc" + depends on !BR2_STATIC_LIBS # libnice -> gnutls + select BR2_PACKAGE_GST1_PLUGINS_BASE # libgstsdp + select BR2_PACKAGE_LIBNICE + help + WebRTC plugins (webrtcbin - a bin for webrtc connections) + +comment "webrtc needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_WEBRTCDSP + bool "webrtcdsp" + # All depends from webrtc-audio-processing + depends on BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING_ARCH_SUPPORTS + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + select BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING + help + WebRTC echo-cancellation, gain control and noise suppression + +comment "webrtcdsp needs a toolchain w/ C++, NPTL, gcc >= 4.8" + depends on BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING_ARCH_SUPPORTS + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS_NPTL \ + || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_WPE + bool "wpe" + default y + depends on BR2_PACKAGE_WPEWEBKIT + depends on BR2_PACKAGE_GST1_PLUGINS_BASE_HAS_LIB_OPENGL + +comment "wpe needs the gst1-plugins-base opengl library and wpewebkit" + depends on !BR2_PACKAGE_WPEWEBKIT \ + || !BR2_PACKAGE_GST1_PLUGINS_BASE_HAS_LIB_OPENGL + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_V4L2CODECS + bool "v4l2codecs" + depends on BR2_PACKAGE_HAS_UDEV # libgudev + select BR2_PACKAGE_LIBGUDEV + help + Video4Linux Stateless CODECs support + +config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_X265 + bool "x265" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # x265 + select BR2_PACKAGE_X265 + help + x265 encoding plugin + +comment "x265 needs a toolchain w/ C++, dynamic library" + depends on !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS + +config BR2_PACKAGE_GST1_PLUGINS_BAD_ZBAR + bool "zbar" + depends on BR2_TOOLCHAIN_HAS_THREADS # zbar-> libv4l + depends on BR2_USE_MMU # zbar-> libv4l + depends on BR2_INSTALL_LIBSTDCPP # zbar-> libv4l + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0 # zbar -> libv4l + select BR2_PACKAGE_ZBAR + +comment "zbar plugin needs a toolchain w/ threads, C++ and headers >= 3.0" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS \ + || !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0 + +endif diff --git a/package/gstreamer1/gst1-plugins-bad/gst1-plugins-bad.hash b/package/gstreamer1/gst1-plugins-bad/gst1-plugins-bad.hash new file mode 100644 index 00000000..18c4ed4b --- /dev/null +++ b/package/gstreamer1/gst1-plugins-bad/gst1-plugins-bad.hash @@ -0,0 +1,3 @@ +# From https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.18.4.tar.xz.sha256sum +sha256 74e806bc5595b18c70e9ca93571e27e79dfb808e5d2e7967afa952b52e99c85f gst-plugins-bad-1.18.4.tar.xz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/gstreamer1/gst1-plugins-bad/gst1-plugins-bad.mk b/package/gstreamer1/gst1-plugins-bad/gst1-plugins-bad.mk new file mode 100644 index 00000000..f4cf0d53 --- /dev/null +++ b/package/gstreamer1/gst1-plugins-bad/gst1-plugins-bad.mk @@ -0,0 +1,802 @@ +################################################################################ +# +# gst1-plugins-bad +# +################################################################################ + +GST1_PLUGINS_BAD_VERSION = 1.18.4 +GST1_PLUGINS_BAD_SOURCE = gst-plugins-bad-$(GST1_PLUGINS_BAD_VERSION).tar.xz +GST1_PLUGINS_BAD_SITE = https://gstreamer.freedesktop.org/src/gst-plugins-bad +GST1_PLUGINS_BAD_INSTALL_STAGING = YES +# Additional plugin licenses will be appended to GST1_PLUGINS_BAD_LICENSE and +# GST1_PLUGINS_BAD_LICENSE_FILES if enabled. +GST1_PLUGINS_BAD_LICENSE_FILES = COPYING +GST1_PLUGINS_BAD_LICENSE = LGPL-2.0+ +GST1_PLUGINS_BAD_CPE_ID_VENDOR = freedesktop +GST1_PLUGINS_BAD_CPE_ID_PRODUCT = gst-plugins-bad + +GST1_PLUGINS_BAD_CFLAGS = $(TARGET_CFLAGS) -std=c99 -D_GNU_SOURCE +GST1_PLUGINS_BAD_LDFLAGS = $(TARGET_LDFLAGS) $(TARGET_NLS_LIBS) + +GST1_PLUGINS_BAD_CONF_OPTS = \ + -Dexamples=disabled \ + -Dtests=disabled \ + -Ddirectsound=disabled \ + -Dd3dvideosink=disabled \ + -Dwinks=disabled \ + -Dandroidmedia=disabled \ + -Dapplemedia=disabled \ + -Dgobject-cast-checks=disabled \ + -Dglib-asserts=disabled \ + -Dglib-checks=disabled \ + -Dextra-checks=disabled \ + -Ddoc=disabled + +# Options which require currently unpackaged libraries +GST1_PLUGINS_BAD_CONF_OPTS += \ + -Davtp=disabled \ + -Dopensles=disabled \ + -Duvch264=disabled \ + -Dmsdk=disabled \ + -Dvoamrwbenc=disabled \ + -Dbs2b=disabled \ + -Dchromaprint=disabled \ + -Dd3d11=disabled \ + -Ddc1394=disabled \ + -Ddts=disabled \ + -Dresindvd=disabled \ + -Dfaac=disabled \ + -Dflite=disabled \ + -Dgsm=disabled \ + -Dkate=disabled \ + -Dladspa=disabled \ + -Dlv2=disabled \ + -Dmediafoundation=disabled \ + -Dmicrodns=disabled \ + -Dlibde265=disabled \ + -Dmodplug=disabled \ + -Dmplex=disabled \ + -Dofa=disabled \ + -Dopenexr=disabled \ + -Dopenni2=disabled \ + -Dteletextdec=disabled \ + -Dwildmidi=disabled \ + -Dsmoothstreaming=disabled \ + -Dsoundtouch=disabled \ + -Dgme=disabled \ + -Dvdpau=disabled \ + -Dspandsp=disabled \ + -Dsvthevcenc=disabled \ + -Dtranscode=disabled \ + -Dwasapi2=disabled \ + -Dzxing=disabled \ + -Dmagicleap=disabled \ + -Diqa=disabled \ + -Dopencv=disabled + +GST1_PLUGINS_BAD_DEPENDENCIES = gst1-plugins-base gstreamer1 + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dintrospection=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += gobject-introspection +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dintrospection=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_WAYLAND),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dwayland=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += libdrm wayland wayland-protocols +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dwayland=disabled +endif + +ifeq ($(BR2_PACKAGE_ORC),y) +GST1_PLUGINS_BAD_DEPENDENCIES += orc +GST1_PLUGINS_BAD_CONF_OPTS += -Dorc=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dorc=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_BLUEZ),y) +GST1_PLUGINS_BAD_DEPENDENCIES += bluez5_utils +GST1_PLUGINS_BAD_CONF_OPTS += -Dbluez=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dbluez=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_ACCURIP),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Daccurip=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Daccurip=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_ADPCMDEC),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dadpcmdec=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dadpcmdec=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_ADPCMENC),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dadpcmenc=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dadpcmenc=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_AIFF),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Daiff=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Daiff=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_ASFMUX),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dasfmux=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dasfmux=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_AUDIOBUFFERSPLIT),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Daudiobuffersplit=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Daudiobuffersplit=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_AUDIOFXBAD),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Daudiofxbad=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Daudiofxbad=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_AUDIOLATENCY),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Daudiolatency=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Daudiolatency=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_AUDIOMIXMATRIX),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Daudiomixmatrix=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Daudiomixmatrix=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_AUDIOVISUALIZERS),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Daudiovisualizers=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Daudiovisualizers=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_AUTOCONVERT),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dautoconvert=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dautoconvert=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_BAYER),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dbayer=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dbayer=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_CAMERABIN2),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dcamerabin2=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dcamerabin2=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_COLOREFFECTS),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dcoloreffects=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dcoloreffects=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DEBUGUTILS),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Ddebugutils=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Ddebugutils=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DVBSUBENC),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Ddvbsubenc=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Ddvbsubenc=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DVBSUBOVERLAY),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Ddvbsuboverlay=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Ddvbsuboverlay=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DVDSPU),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Ddvdspu=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Ddvdspu=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_FACEOVERLAY),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dfaceoverlay=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dfaceoverlay=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_FESTIVAL),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dfestival=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dfestival=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_FIELDANALYSIS),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dfieldanalysis=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dfieldanalysis=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_FREEVERB),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dfreeverb=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dfreeverb=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_FREI0R),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dfrei0r=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dfrei0r=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_GAUDIEFFECTS),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dgaudieffects=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dgaudieffects=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_GEOMETRICTRANSFORM),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dgeometrictransform=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dgeometrictransform=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_GDP),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dgdp=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dgdp=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_ID3TAG),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Did3tag=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Did3tag=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_INTER),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dinter=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dinter=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_INTERLACE),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dinterlace=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dinterlace=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_IVFPARSE),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Divfparse=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Divfparse=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_IVTC),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Divtc=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Divtc=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_JP2KDECIMATOR),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Djp2kdecimator=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Djp2kdecimator=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_JPEGFORMAT),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Djpegformat=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Djpegformat=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_LIBRFB),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dlibrfb=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dlibrfb=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MIDI),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dmidi=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dmidi=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MPEGDEMUX),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dmpegdemux=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dmpegdemux=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MPEGPSMUX),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dmpegpsmux=enabled +GST1_PLUGINS_BAD_HAS_UNKNOWN_LICENSE = y +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dmpegpsmux=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MPEGTSMUX),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dmpegtsmux=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dmpegtsmux=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MPEGTSDEMUX),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dmpegtsdemux=enabled +GST1_PLUGINS_BAD_HAS_UNKNOWN_LICENSE = y +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dmpegtsdemux=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MXF),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dmxf=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dmxf=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_NETSIM),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dnetsim=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dnetsim=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_ONVIF),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Donvif=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Donvif=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_PCAPPARSE),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dpcapparse=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dpcapparse=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_PNM),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dpnm=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dpnm=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_PROXY),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dproxy=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dproxy=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_RAWPARSE),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Drawparse=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Drawparse=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_REMOVESILENCE),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dremovesilence=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dremovesilence=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_RIST),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Drist=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Drist=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_RTMP2),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Drtmp2=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Drtmp2=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_RTP2),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Drtp=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Drtp=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_RTMP),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Drtmp=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += rtmpdump +else +GST1_PLUGINS_BAD_CONF_OPTS += -Drtmp=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SDP),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dsdp=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dsdp=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SEGMENTCLIP),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dsegmentclip=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dsegmentclip=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SIREN),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dsiren=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dsiren=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SMOOTH),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dsmooth=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dsmooth=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SPEED),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dspeed=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dspeed=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SUBENC),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dsubenc=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dsubenc=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SWITCHBIN),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dswitchbin=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dswitchbin=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_TIMECODE),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dtimecode=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dtimecode=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VIDEOFILTERS),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dvideofilters=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dvideofilters=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VIDEOFRAME_AUDIOLEVEL),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dvideoframe_audiolevel=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dvideoframe_audiolevel=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VIDEOPARSERS),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dvideoparsers=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dvideoparsers=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VIDEOSIGNAL),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dvideosignal=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dvideosignal=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VMNC),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dvmnc=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dvmnc=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_Y4M),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dy4m=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dy4m=disabled +endif + +# Plugins with dependencies + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_ASSRENDER),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dassrender=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += libass +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dassrender=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_BZ2),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dbz2=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += bzip2 +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dbz2=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_CURL),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dcurl=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += libcurl +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dcurl=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DASH),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Ddash=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += libxml2 +else +GST1_PLUGINS_BAD_CONF_OPTS += -Ddash=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DECKLINK),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Ddecklink=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Ddecklink=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DIRECTFB),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Ddirectfb=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += directfb +else +GST1_PLUGINS_BAD_CONF_OPTS += -Ddirectfb=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DVB),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Ddvb=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += dtv-scan-tables +else +GST1_PLUGINS_BAD_CONF_OPTS += -Ddvb=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_FAAD),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dfaad=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += faad2 +GST1_PLUGINS_BAD_HAS_GPL_LICENSE = y +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dfaad=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_FBDEV),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dfbdev=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dfbdev=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_FDK_AAC),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dfdkaac=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += fdk-aac +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dfdkaac=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_FLUIDSYNTH),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dfluidsynth=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += fluidsynth +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dfluidsynth=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_GL),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dgl=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dgl=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_HLS),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dhls=enabled + +ifeq ($(BR2_PACKAGE_NETTLE),y) +GST1_PLUGINS_BAD_DEPENDENCIES += nettle +GST1_PLUGINS_BAD_CONF_OPTS += -Dhls-crypto='nettle' +else ifeq ($(BR2_PACKAGE_LIBGCRYPT),y) +GST1_PLUGINS_BAD_DEPENDENCIES += libgcrypt +GST1_PLUGINS_BAD_CONF_OPTS += -Dhls-crypto='libgcrypt' +else +GST1_PLUGINS_BAD_DEPENDENCIES += openssl +GST1_PLUGINS_BAD_CONF_OPTS += -Dhls-crypto='openssl' +endif + +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dhls=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_KMS),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dkms=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += libdrm +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dkms=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_LIBMMS),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dlibmms=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += libmms +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dlibmms=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DTLS),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Ddtls=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += openssl +GST1_PLUGINS_BAD_HAS_BSD2C_LICENSE = y +else +GST1_PLUGINS_BAD_CONF_OPTS += -Ddtls=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_TTML),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dttml=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += cairo libxml2 pango +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dttml=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MPEG2ENC),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dmpeg2enc=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += libmpeg2 mjpegtools +GST1_PLUGINS_BAD_HAS_GPL_LICENSE = y +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dmpeg2enc=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MUSEPACK),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dmusepack=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += musepack +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dmusepack=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_NEON),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dneon=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += neon +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dneon=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_OPENAL),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dopenal=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += openal +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dopenal=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_OPENH264),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dopenh264=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += libopenh264 +GST1_PLUGINS_BAD_HAS_BSD2C_LICENSE = y +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dopenh264=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_OPENJPEG),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dopenjpeg=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += openjpeg +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dopenjpeg=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_OPUS),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dopus=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += opus +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dopus=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_RSVG),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Drsvg=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += librsvg +else +GST1_PLUGINS_BAD_CONF_OPTS += -Drsvg=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SBC),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dsbc=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += sbc +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dsbc=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SCTP),y) +GST1_PLUGINS_BAD_CONF_OPTS += \ + -Dsctp=enabled \ + -Dsctp-internal-usrsctp=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += \ + -Dsctp=disabled \ + -Dsctp-internal-usrsctp=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SHM),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dshm=enabled +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dshm=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SNDFILE),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dsndfile=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += libsndfile +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dsndfile=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SRTP),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dsrtp=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += libsrtp +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dsrtp=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VOAACENC),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dvoaacenc=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += vo-aacenc +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dvoaacenc=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_WEBP),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dwebp=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += webp +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dwebp=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_WEBRTC),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dwebrtc=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += gst1-plugins-base libnice +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dwebrtc=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_WEBRTCDSP),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dwebrtcdsp=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += webrtc-audio-processing +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dwebrtcdsp=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_WPE),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dwpe=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += libwpe wpewebkit wpebackend-fdo +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dwpe=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_V4L2CODECS),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dv4l2codecs=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += libgudev +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dv4l2codecs=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_X265),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dx265=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += x265 +GST1_PLUGINS_BAD_HAS_GPL_LICENSE = y +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dx265=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD_ZBAR),y) +GST1_PLUGINS_BAD_CONF_OPTS += -Dzbar=enabled +GST1_PLUGINS_BAD_DEPENDENCIES += zbar +else +GST1_PLUGINS_BAD_CONF_OPTS += -Dzbar=disabled +endif + +# Add GPL license if GPL licensed plugins enabled. +ifeq ($(GST1_PLUGINS_BAD_HAS_GPL_LICENSE),y) +GST1_PLUGINS_BAD_LICENSE += , GPL-2.0+ +GST1_PLUGINS_BAD_LICENSE_FILES += COPYING +endif + +# Add BSD license if BSD licensed plugins enabled. +ifeq ($(GST1_PLUGINS_BAD_HAS_BSD2C_LICENSE),y) +GST1_PLUGINS_BAD_LICENSE += , BSD-2-Clause +endif + +# Add Unknown license if Unknown licensed plugins enabled. +ifeq ($(GST1_PLUGINS_BAD_HAS_UNKNOWN_LICENSE),y) +GST1_PLUGINS_BAD_LICENSE += , UNKNOWN +endif + +# Use the following command to extract license info for plugins. +# # find . -name 'plugin-*.xml' | xargs grep license + +$(eval $(meson-package)) diff --git a/package/gstreamer1/gst1-plugins-base/0001-gst-libs-gst-video-gstvideoaggregator.c-fix-build-wi.patch b/package/gstreamer1/gst1-plugins-base/0001-gst-libs-gst-video-gstvideoaggregator.c-fix-build-wi.patch new file mode 100644 index 00000000..87cd6493 --- /dev/null +++ b/package/gstreamer1/gst1-plugins-base/0001-gst-libs-gst-video-gstvideoaggregator.c-fix-build-wi.patch @@ -0,0 +1,45 @@ +From 012ca1bcd234ee02f576dd58b1f09baba18b89b0 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 14 Dec 2020 07:42:55 +0100 +Subject: [PATCH] gst-libs/gst/video/gstvideoaggregator.c: fix build with gcc + 4.8 + +Fix the following build failure with gcc 4.8 which has been added with +https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/commit/d268c193ad39fb970351ed62898be806ebd0a71e: + +../gst-libs/gst/video/gstvideoaggregator.c: In function 'gst_video_aggregator_init': +../gst-libs/gst/video/gstvideoaggregator.c:2762:3: error: 'for' loop initial declarations are only allowed in C99 mode + for (gint i = 0; i < gst_caps_get_size (src_template); i++) { + ^ + +Signed-off-by: Fabrice Fontaine +[Upstream status: +https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/974] +--- + gst-libs/gst/video/gstvideoaggregator.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/gst-libs/gst/video/gstvideoaggregator.c b/gst-libs/gst/video/gstvideoaggregator.c +index 2e3d813be..04dad6563 100644 +--- a/gst-libs/gst/video/gstvideoaggregator.c ++++ b/gst-libs/gst/video/gstvideoaggregator.c +@@ -2786,6 +2786,7 @@ gst_video_aggregator_init (GstVideoAggregator * vagg, + { + GstCaps *src_template; + GstPadTemplate *pad_template; ++ gint i; + + vagg->priv = gst_video_aggregator_get_instance_private (vagg); + vagg->priv->current_caps = NULL; +@@ -2800,7 +2801,7 @@ gst_video_aggregator_init (GstVideoAggregator * vagg, + pad_template = + gst_element_class_get_pad_template (GST_ELEMENT_CLASS (klass), "src"); + src_template = gst_pad_template_get_caps (pad_template); +- for (gint i = 0; i < gst_caps_get_size (src_template); i++) { ++ for (i = 0; i < gst_caps_get_size (src_template); i++) { + const GValue *v = + gst_structure_get_value (gst_caps_get_structure (src_template, i), + "format"); +-- +2.29.2 + diff --git a/package/gstreamer1/gst1-plugins-base/Config.in b/package/gstreamer1/gst1-plugins-base/Config.in new file mode 100644 index 00000000..ceed5589 --- /dev/null +++ b/package/gstreamer1/gst1-plugins-base/Config.in @@ -0,0 +1,318 @@ +menuconfig BR2_PACKAGE_GST1_PLUGINS_BASE + bool "gst1-plugins-base" + select BR2_PACKAGE_XLIB_LIBX11 if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBXEXT if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBXV if BR2_PACKAGE_XORG7 + help + A basic set of well-supported plug-ins for GStreamer. + + https://gstreamer.freedesktop.org/ + +if BR2_PACKAGE_GST1_PLUGINS_BASE + +config BR2_PACKAGE_GST1_PLUGINS_BASE_INSTALL_TOOLS + bool "install tools" + help + Install the gst-discoverer, gst-device-monitor and gst-play + tools. + +comment "dependency-less plugins" + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_ADDER + bool "adder" + help + Adds multiple streams + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_APP + bool "app" + help + Elements used to communicate with applications + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIOCONVERT + bool "audioconvert (mandatory for audio playback)" + default y + help + Convert audio to different formats + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIOMIXER + bool "audiomixer" + help + Audio mixer plugin + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIORATE + bool "audiorate" + help + Adjusts audio frames + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIOTESTSRC + bool "audiotestsrc" + help + Creates audio test signals of given frequency and volume + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_COMPOSITOR + bool "compositor" + help + Video compositor plugin + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_ENCODING + bool "encoding" + help + various encoding-related elements + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEOCONVERT + bool "videoconvert" + help + Colorspace conversion + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_GIO + bool "gio" + help + GIO elements + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_GIO_TYPEFINDER + bool "gio-typefinder" + help + GIO typefinder elements + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_OVERLAYCOMPOSITION + bool "overlaycomposition" + help + Overlaycomposition plugin. + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_PLAYBACK + bool "playback" + default y + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_TYPEFIND + help + various playback elements + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIORESAMPLE + bool "audioresample (mandatory for audio playback)" + default y + help + Resamples audio + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_RAWPARSE + bool "rawparse" + help + Parses byte streams into raw frames + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_SUBPARSE + bool "subparse" + help + Subtitle parsing + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_TCP + bool "tcp" + help + transfer data over the network via TCP + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_TYPEFIND + bool "typefind" + default y + help + default typefind functions + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEOTESTSRC + bool "videotestsrc" + help + Creates a test video stream + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEORATE + bool "videorate" + help + Adjusts video frames + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEOSCALE + bool "videoscale (mandatory for video playback)" + default y + help + Resizes video + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VOLUME + bool "volume (mandatory for audio playback)" + default y + help + plugin for controlling audio volume + +comment "plugins with external dependencies" + +menuconfig BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL + bool "opengl" + depends on BR2_PACKAGE_HAS_LIBGL || BR2_PACKAGE_HAS_LIBGLES + +if BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL + +config BR2_PACKAGE_GST1_PLUGINS_BASE_HAS_LIB_OPENGL + def_bool BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_HAS_WINDOW + +comment "The opengl library needs an API, a platform and a window system" + depends on !BR2_PACKAGE_GST1_PLUGINS_BASE_HAS_LIB_OPENGL + +comment "APIs" + +config BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_HAS_API + bool + +config BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_OPENGL + bool "opengl" + default y + depends on BR2_PACKAGE_HAS_LIBGL + select BR2_PACKAGE_LIBGLU + select BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_HAS_API + +comment "opengl needs an OpenGL backend" + depends on !BR2_PACKAGE_HAS_LIBGL + +config BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_GLES2 + bool "gles2" + default y + depends on BR2_PACKAGE_HAS_LIBGLES + select BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_HAS_API + +comment "gles2 needs an OpenGL ES backend" + depends on !BR2_PACKAGE_HAS_LIBGLES + +comment "Platforms" + +config BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_HAS_PLATFORM + bool + +config BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_GLX + bool "glx" + default y + depends on BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_OPENGL + depends on BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR # mesa needs big X + depends on !BR2_PACKAGE_RPI_USERLAND # x11 + select BR2_PACKAGE_XLIB_LIBXRENDER + select BR2_PACKAGE_XORGPROTO + select BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_X11 + select BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_HAS_PLATFORM + help + OpenGL Extension to the X Window System + +comment "glx not supported with rpi-userland" + depends on BR2_PACKAGE_RPI_USERLAND + +comment "glx needs the opengl API and modular X.org" + depends on !BR2_PACKAGE_RPI_USERLAND && \ + (!BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_OPENGL || \ + !BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR) + +config BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_EGL + bool "egl" + default y + depends on BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_HAS_API + depends on BR2_PACKAGE_HAS_LIBEGL + select BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_HAS_PLATFORM + +comment "egl needs an API and an EGL backend" + depends on !BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_HAS_API || \ + !BR2_PACKAGE_HAS_LIBEGL + +comment "Window systems" + +config BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_HAS_WINDOW + bool + +config BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_X11 + bool "x11" + default y + depends on BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_HAS_PLATFORM + depends on !BR2_PACKAGE_RPI_USERLAND + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBX11 + select BR2_PACKAGE_XLIB_LIBXEXT + select BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_HAS_WINDOW + +comment "x11 not supported with rpi-userland" + depends on BR2_PACKAGE_RPI_USERLAND + +comment "x11 needs a platform and X.org" + depends on !BR2_PACKAGE_RPI_USERLAND && \ + (!BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_HAS_PLATFORM || \ + !BR2_PACKAGE_XORG7) + +config BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_WAYLAND + bool "wayland" + default y + depends on BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_EGL + depends on BR2_PACKAGE_WAYLAND + select BR2_PACKAGE_WAYLAND_PROTOCOLS + select BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_HAS_WINDOW + +comment "wayland needs the egl platform and the wayland package" + depends on !BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_EGL || \ + !BR2_PACKAGE_WAYLAND + +config BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_DISPMANX + bool "dispmanx" + default y + depends on BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_EGL + depends on BR2_PACKAGE_RPI_USERLAND + select BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_HAS_WINDOW + help + Raspberry Pi's Dispmanx windowing system + +comment "dispmanx needs the egl platform and rpi-userland" + depends on !BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_EGL || \ + !BR2_PACKAGE_RPI_USERLAND +endif + +comment "opengl needs an OpenGL or OpenGL ES backend" + depends on !BR2_PACKAGE_HAS_LIBGL && !BR2_PACKAGE_HAS_LIBGLES + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_ALSA + bool "alsa (mandatory for audio playback)" + select BR2_PACKAGE_ALSA_LIB + select BR2_PACKAGE_ALSA_LIB_MIXER + select BR2_PACKAGE_ALSA_LIB_PCM + select BR2_PACKAGE_ALSA_LIB_SEQ + help + ALSA plugin library + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_TREMOR + bool "tremor" + select BR2_PACKAGE_TREMOR + help + Vorbis Tremor decoder + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_OGG + bool "ogg (*.ogg audio/video)" + select BR2_PACKAGE_LIBOGG + help + ogg stream manipulation (info about ogg: http://xiph.org) + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_OPUS + bool "opus" + select BR2_PACKAGE_OPUS + help + Opus codec for speech and audio. + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_PANGO + bool "pango font renderer" + depends on BR2_INSTALL_LIBSTDCPP # pango -> freetype + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # pango -> harfbuzz + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # pango -> harfbuzz + select BR2_PACKAGE_PANGO + help + Pango-based text rendering and overlay + +comment "pango plugin needs a toolchain w/ C++, gcc >= 4.8" + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_THEORA + bool "theora (*.ogg video)" + select BR2_PACKAGE_LIBTHEORA + help + Theora plugin library + +config BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VORBIS + bool "vorbis (*.ogg audio)" + select BR2_PACKAGE_LIBVORBIS + help + Vorbis plugin library + +endif diff --git a/package/gstreamer1/gst1-plugins-base/gst1-plugins-base.hash b/package/gstreamer1/gst1-plugins-base/gst1-plugins-base.hash new file mode 100644 index 00000000..dabceac8 --- /dev/null +++ b/package/gstreamer1/gst1-plugins-base/gst1-plugins-base.hash @@ -0,0 +1,3 @@ +# From https://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.18.4.tar.xz.sha256sum +sha256 29e53229a84d01d722f6f6db13087231cdf6113dd85c25746b9b58c3d68e8323 gst-plugins-base-1.18.4.tar.xz +sha256 f445dc78b88496f7e20c7a2a461b95baba5865c8919b8289ac24ac0a80c6ce7a COPYING diff --git a/package/gstreamer1/gst1-plugins-base/gst1-plugins-base.mk b/package/gstreamer1/gst1-plugins-base/gst1-plugins-base.mk new file mode 100644 index 00000000..ccbf75a4 --- /dev/null +++ b/package/gstreamer1/gst1-plugins-base/gst1-plugins-base.mk @@ -0,0 +1,298 @@ +################################################################################ +# +# gst1-plugins-base +# +################################################################################ + +GST1_PLUGINS_BASE_VERSION = 1.18.4 +GST1_PLUGINS_BASE_SOURCE = gst-plugins-base-$(GST1_PLUGINS_BASE_VERSION).tar.xz +GST1_PLUGINS_BASE_SITE = https://gstreamer.freedesktop.org/src/gst-plugins-base +GST1_PLUGINS_BASE_INSTALL_STAGING = YES +GST1_PLUGINS_BASE_LICENSE_FILES = COPYING +GST1_PLUGINS_BASE_LICENSE = LGPL-2.0+, LGPL-2.1+ + +GST1_PLUGINS_BASE_CONF_OPTS = \ + -Dexamples=disabled \ + -Dtests=disabled \ + -Dgobject-cast-checks=disabled \ + -Dglib-asserts=disabled \ + -Dglib-checks=disabled \ + -Ddoc=disabled + +# Options which require currently unpackaged libraries +GST1_PLUGINS_BASE_CONF_OPTS += \ + -Dcdparanoia=disabled \ + -Dlibvisual=disabled \ + -Diso-codes=disabled + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_INSTALL_TOOLS),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dtools=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dtools=disabled +endif + +GST1_PLUGINS_BASE_DEPENDENCIES = gstreamer1 $(TARGET_NLS_DEPENDENCIES) + +GST1_PLUGINS_BASE_LDFLAGS = $(TARGET_LDFLAGS) $(TARGET_NLS_LIBS) + +# These plugins are listed in the order from ./configure --help + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dintrospection=enabled +GST1_PLUGINS_BASE_DEPENDENCIES += gobject-introspection +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dintrospection=disabled +endif + +ifeq ($(BR2_PACKAGE_ORC),y) +GST1_PLUGINS_BASE_DEPENDENCIES += orc +GST1_PLUGINS_BASE_CONF_OPTS += -Dorc=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dorc=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_HAS_API)$(BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_HAS_PLATFORM)$(BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_HAS_WINDOW),yyy) +GST1_PLUGINS_BASE_CONF_OPTS += -Dgl=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dgl=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_OPENGL),y) +GST1_PLUGINS_BASE_GL_API_LIST = opengl +GST1_PLUGINS_BASE_DEPENDENCIES += libgl libglu +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_GLES2),y) +GST1_PLUGINS_BASE_GL_API_LIST += gles2 +GST1_PLUGINS_BASE_DEPENDENCIES += libgles +endif + +GST1_PLUGINS_BASE_CONF_OPTS += -Dgl_api='$(subst $(space),$(comma),$(GST1_PLUGINS_BASE_GL_API_LIST))' + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_GLX),y) +GST1_PLUGINS_BASE_GL_PLATFORM_LIST += glx +GST1_PLUGINS_BASE_DEPENDENCIES += xorgproto xlib_libXrender +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_EGL),y) +GST1_PLUGINS_BASE_GL_PLATFORM_LIST += egl +GST1_PLUGINS_BASE_DEPENDENCIES += libegl +endif +GST1_PLUGINS_BASE_CONF_OPTS += -Dgl_platform='$(subst $(space),$(comma),$(GST1_PLUGINS_BASE_GL_PLATFORM_LIST))' + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_X11),y) +GST1_PLUGINS_BASE_WINSYS_LIST += x11 +GST1_PLUGINS_BASE_DEPENDENCIES += xlib_libX11 xlib_libXext +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_WAYLAND),y) +GST1_PLUGINS_BASE_WINSYS_LIST += wayland +GST1_PLUGINS_BASE_DEPENDENCIES += wayland wayland-protocols +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_DISPMANX),y) +GST1_PLUGINS_BASE_WINSYS_LIST += dispmanx +GST1_PLUGINS_BASE_DEPENDENCIES += rpi-userland +endif +GST1_PLUGINS_BASE_CONF_OPTS += -Dgl_winsys='$(subst $(space),$(comma),$(GST1_PLUGINS_BASE_WINSYS_LIST))' + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_ADDER),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dadder=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dadder=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_APP),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dapp=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dapp=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIOCONVERT),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Daudioconvert=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Daudioconvert=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIOMIXER),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Daudiomixer=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Daudiomixer=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIORATE),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Daudiorate=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Daudiorate=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIOTESTSRC),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Daudiotestsrc=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Daudiotestsrc=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_COMPOSITOR),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dcompositor=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dcompositor=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_ENCODING),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dencoding=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dencoding=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEOCONVERT),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dvideoconvert=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dvideoconvert=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_GIO),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dgio=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dgio=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_GIO_TYPEFINDER),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dgio-typefinder=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dgio-typefinder=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_OVERLAYCOMPOSITION),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Doverlaycomposition=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Doverlaycomposition=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_PLAYBACK),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dplayback=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dplayback=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIORESAMPLE),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Daudioresample=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Daudioresample=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_RAWPARSE),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Drawparse=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Drawparse=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_SUBPARSE),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dsubparse=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dsubparse=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_TCP),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dtcp=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dtcp=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_TYPEFIND),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dtypefind=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dtypefind=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEOTESTSRC),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dvideotestsrc=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dvideotestsrc=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEORATE),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dvideorate=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dvideorate=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEOSCALE),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dvideoscale=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dvideoscale=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VOLUME),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dvolume=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dvolume=disabled +endif + +# Zlib is checked for headers and is not an option. +ifeq ($(BR2_PACKAGE_ZLIB),y) +GST1_PLUGINS_BASE_DEPENDENCIES += zlib +endif + +ifeq ($(BR2_PACKAGE_XORG7),y) +GST1_PLUGINS_BASE_DEPENDENCIES += xlib_libX11 xlib_libXext xlib_libXv +GST1_PLUGINS_BASE_CONF_OPTS += \ + -Dx11=enabled \ + -Dxshm=enabled \ + -Dxvideo=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += \ + -Dx11=disabled \ + -Dxshm=disabled \ + -Dxvideo=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_ALSA),y) +GST1_PLUGINS_BASE_DEPENDENCIES += alsa-lib +GST1_PLUGINS_BASE_CONF_OPTS += -Dalsa=enabled +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dalsa=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_TREMOR),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dtremor=enabled +GST1_PLUGINS_BASE_DEPENDENCIES += tremor +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dtremor=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_OPUS),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dopus=enabled +GST1_PLUGINS_BASE_DEPENDENCIES += opus +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dopus=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_OGG),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dogg=enabled +GST1_PLUGINS_BASE_DEPENDENCIES += libogg +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dogg=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_PANGO),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dpango=enabled +GST1_PLUGINS_BASE_DEPENDENCIES += pango +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dpango=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_THEORA),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dtheora=enabled +GST1_PLUGINS_BASE_DEPENDENCIES += libtheora +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dtheora=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VORBIS),y) +GST1_PLUGINS_BASE_CONF_OPTS += -Dvorbis=enabled +GST1_PLUGINS_BASE_DEPENDENCIES += libvorbis +else +GST1_PLUGINS_BASE_CONF_OPTS += -Dvorbis=disabled +endif + +$(eval $(meson-package)) diff --git a/package/gstreamer1/gst1-plugins-bayer2rgb-neon/Config.in b/package/gstreamer1/gst1-plugins-bayer2rgb-neon/Config.in new file mode 100644 index 00000000..b7cac08d --- /dev/null +++ b/package/gstreamer1/gst1-plugins-bayer2rgb-neon/Config.in @@ -0,0 +1,20 @@ +menuconfig BR2_PACKAGE_GST1_PLUGINS_BAYER2RGB_NEON + bool "gst1-plugins-bayer2rgb-neon" + depends on BR2_arm && BR2_ARM_CPU_HAS_NEON # bayer2rgb-neon + depends on !BR2_STATIC_LIBS # bayer2rgb-neon + depends on BR2_INSTALL_LIBSTDCPP # bayer2rgb-neon + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # bayer2rgb-neon + select BR2_PACKAGE_GST1_PLUGINS_BASE + select BR2_PACKAGE_BAYER2RGB_NEON + help + gst1-plugins-bayer2rgb-neon is a gstreamer1 + plugin which uses bayer2rgb-neon library to + decode raw camera bayer to RGB using + NEON hardware acceleration. + + https://git.phytec.de/gst-bayer2rgb-neon + +comment "gst1-plugins-bayer2rgb-neon needs a toolchain w/ C++, dynamic library, gcc >= 4.9" + depends on BR2_arm && BR2_ARM_CPU_HAS_NEON + depends on BR2_STATIC_LIBS || !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/gstreamer1/gst1-plugins-bayer2rgb-neon/gst1-plugins-bayer2rgb-neon.hash b/package/gstreamer1/gst1-plugins-bayer2rgb-neon/gst1-plugins-bayer2rgb-neon.hash new file mode 100644 index 00000000..cfb62b06 --- /dev/null +++ b/package/gstreamer1/gst1-plugins-bayer2rgb-neon/gst1-plugins-bayer2rgb-neon.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 307725640203083df7dfb7f9c2b8bb9583accf7b8c06238dd92d6150a9fd8b04 gst-bayer2rgb-neon-0.4.tar.bz2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/gstreamer1/gst1-plugins-bayer2rgb-neon/gst1-plugins-bayer2rgb-neon.mk b/package/gstreamer1/gst1-plugins-bayer2rgb-neon/gst1-plugins-bayer2rgb-neon.mk new file mode 100644 index 00000000..5139463c --- /dev/null +++ b/package/gstreamer1/gst1-plugins-bayer2rgb-neon/gst1-plugins-bayer2rgb-neon.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# gst1-plugins-bayer2rgb-neon +# +################################################################################ + +GST1_PLUGINS_BAYER2RGB_NEON_VERSION = 0.4 +GST1_PLUGINS_BAYER2RGB_NEON_SOURCE = gst-bayer2rgb-neon-$(GST1_PLUGINS_BAYER2RGB_NEON_VERSION).tar.bz2 +GST1_PLUGINS_BAYER2RGB_NEON_SITE = https://git.phytec.de/gst-bayer2rgb-neon/snapshot +GST1_PLUGINS_BAYER2RGB_NEON_LICENSE = GPL-3.0 +GST1_PLUGINS_BAYER2RGB_NEON_LICENSE_FILES = COPYING + +GST1_PLUGINS_BAYER2RGB_NEON_INSTALL_STAGING = YES + +GST1_PLUGINS_BAYER2RGB_NEON_DEPENDENCIES = \ + host-pkgconf \ + gstreamer1 \ + gst1-plugins-base \ + bayer2rgb-neon + +GST1_PLUGINS_BAYER2RGB_NEON_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/gstreamer1/gst1-plugins-good/Config.in b/package/gstreamer1/gst1-plugins-good/Config.in new file mode 100644 index 00000000..67df206e --- /dev/null +++ b/package/gstreamer1/gst1-plugins-good/Config.in @@ -0,0 +1,424 @@ +menuconfig BR2_PACKAGE_GST1_PLUGINS_GOOD + bool "gst1-plugins-good" + select BR2_PACKAGE_GST1_PLUGINS_BASE + select BR2_PACKAGE_XLIB_LIBX11 if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBXEXT if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBXV if BR2_PACKAGE_XORG7 + help + A set of well-supported plug-ins for GStreamer under the + preferred license. + + https://gstreamer.freedesktop.org/ + +if BR2_PACKAGE_GST1_PLUGINS_GOOD + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_JPEG + bool "jpeg (JPEG support)" + select BR2_PACKAGE_JPEG + help + JPeg plugin library + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PNG + bool "png (PNG support)" + select BR2_PACKAGE_LIBPNG + help + PNG plugin library + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_BZ2 + bool "bz2 support" + depends on BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_MATROSKA + select BR2_PACKAGE_BZIP2 + help + Enable bz2 support for the following plugins: + matroska + +comment "dependency-less plugins" + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_ALPHA + bool "alpha" + help + adds an alpha channel to video - constant or via chroma-keying + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_APETAG + bool "apetag" + help + APEv1/2 tag reader + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_AUDIOFX + bool "audiofx" + help + Audio effects plugin + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_AUDIOPARSERS + bool "audioparsers" + help + Parsers for various audio formats + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_AUPARSE + bool "auparse" + help + parses au streams + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_AUTODETECT + bool "autodetect" + help + Plugin contains auto-detection plugins for video/audio in- + and outputs + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_AVI + bool "avi (*.avi video)" + default y + help + AVI stream handling + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_CUTTER + bool "cutter" + help + Audio Cutter to split audio into non-silent bits + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_DEBUGUTILS + bool "debugutils" + help + elements for testing and debugging + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_DEINTERLACE + bool "deinterlace" + help + Deinterlacer + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_DTMF + bool "dtmf" + help + DTMF plugin + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_EFFECTV + bool "effectv" + help + effect plugins from the effectv project + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_EQUALIZER + bool "equalizer" + help + GStreamer audio equalizers + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_FLV + bool "flv" + help + FLV muxing and demuxing plugin + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_FLX + bool "flx" + help + FLC/FLI/FLX video decoder + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_GOOM + bool "goom" + help + GOOM visualization filter + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_GOOM2K1 + bool "goom2k1" + help + GOOM 2k1 visualization filter + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_ICYDEMUX + bool "icydemux" + help + Demux ICY tags from a stream + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_ID3DEMUX + bool "id3demux (*.mp3 audio)" + help + Demux ID3v1 and ID3v2 tags from a file + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_IMAGEFREEZE + bool "imagefreeze" + help + Still frame stream generator + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_INTERLEAVE + bool "interleave" + help + Audio interleaver/deinterleaver + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_ISOMP4 + bool "isomp4" + default y + help + ISO base media file format support (mp4, 3gpp, qt, mj2) + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_LAW + bool "law" + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_LEVEL + bool "level" + help + Audio level plugin + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_MATROSKA + bool "matroska" + help + Matroska and WebM stream handling + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_MONOSCOPE + bool "monoscope" + help + Monoscope visualization + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_MULTIFILE + bool "multifile" + help + Reads/Writes buffers from/to sequentially named files + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_MULTIPART + bool "multipart" + help + multipart stream manipulation + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_REPLAYGAIN + bool "replaygain" + help + ReplayGain volume normalization + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_RTP + bool "rtp" + help + Real-time protocol plugins + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_RTPMANAGER + bool "rtpmanager" + help + RTP session management plugin library + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_RTSP + bool "rtsp" + help + transfer data via RTSP + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_SHAPEWIPE + bool "shapewipe" + help + Shape Wipe transition filter + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_SMPTE + bool "smpte" + help + Apply the standard SMPTE transitions on video images + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_SPECTRUM + bool "spectrum" + help + Run an FFT on the audio signal, output spectrum data + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_UDP + bool "udp" + help + transfer data via UDP + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_VIDEOBOX + bool "videobox" + help + resizes a video by adding borders or cropping + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_VIDEOCROP + bool "videocrop" + help + Crops video into a user-defined region + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_VIDEOFILTER + bool "videofilter" + help + Video filters plugin + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_VIDEOMIXER + bool "videomixer" + help + Video mixer + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_WAVENC + bool "wavenc" + help + Encode raw audio into WAV + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_WAVPARSE + bool "wavparse (*.wav audio)" + default y + help + Parse a .wav file into raw audio + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_Y4M + bool "y4m" + help + Encodes a YUV frame into the yuv4mpeg format (mjpegtools) + +comment "plugins with external dependencies" + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_LAME + bool "lame (*.mp3 audio encoder)" + select BR2_PACKAGE_LAME + help + Encode MP3s with LAME + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_MPG123 + bool "mpg123 (*.mp3 audio)" + select BR2_PACKAGE_MPG123 + help + mp3 decoding based on the mpg123 library + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_OSS + bool "ossaudio (OSS audio)" + help + OSS (Open Sound System) support for GStreamer + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_OSS4 + bool "oss4 (Open Sound System 4)" + help + Open Sound System (OSS) version 4 support for GStreamer + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_QMLGL + bool "qmlgl (qt5)" + depends on BR2_PACKAGE_QT5 + depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE # qt5declarative + depends on BR2_PACKAGE_GST1_PLUGINS_BASE_HAS_LIB_OPENGL + select BR2_PACKAGE_QT5BASE_WIDGETS + select BR2_PACKAGE_QT5DECLARATIVE + select BR2_PACKAGE_QT5DECLARATIVE_QUICK + select BR2_PACKAGE_QT5X11EXTRAS if BR2_PACKAGE_QT5BASE_XCB + help + QT5 plugin which includes elements qmlglsrc and qmlglsink + +comment "qmlgl (qt5) needs the gst1-plugins-base opengl library" + depends on !BR2_PACKAGE_GST1_PLUGINS_BASE_HAS_LIB_OPENGL + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_SHOUT2 + bool "shout2" + select BR2_PACKAGE_LIBSHOUT + help + Elements to send data to an icecast server using libshout2 + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_V4L2 + bool "v4l2" + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0 # multi planar api + select BR2_PACKAGE_LIBGUDEV if BR2_PACKAGE_HAS_UDEV + help + elements for Video 4 Linux + +comment "v4l2 needs a toolchain w/ headers >= 3.0" + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0 + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_V4L2_PROBE + bool "v4l2-probe (m2m)" + depends on BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_V4L2 + help + Enables the V4L2 probe at plugin load time. This enables + support for v4l2 transform devices, such as m2m + devices. These plugins are registered as v4l2videoNconvert + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_CAIRO + bool "cairo" + select BR2_PACKAGE_CAIRO + select BR2_PACKAGE_CAIRO_PNG + help + Cairo-based elements + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_FLAC + bool "flac (libFLAC)" + depends on BR2_USE_WCHAR # flac + select BR2_PACKAGE_FLAC + help + The FLAC Lossless compressor Codec + +comment "flac needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_GDKPIXBUF + bool "gdkpixbuf" + depends on BR2_USE_WCHAR # gdk-pixbuf -> libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # gdk-pixbuf -> libglib2 + select BR2_PACKAGE_GDK_PIXBUF + help + GdkPixbuf-based image decoder, overlay and sink + +comment "gdkpixbuf needs a toolchain w/ wchar, threads" + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_JACK + bool "jack" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + select BR2_PACKAGE_JACK2 + help + JACK audio source/sink plugin + +comment "jack needs a toolchain w/ C++, dynamic library" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_PULSE + bool "pulseaudio" + depends on BR2_TOOLCHAIN_HAS_THREADS # pulseaudio + depends on BR2_USE_MMU # pulseaudio + depends on !BR2_STATIC_LIBS # pulseaudio + depends on BR2_USE_WCHAR # pulseaudio + depends on BR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC # pulseaudio + select BR2_PACKAGE_PULSEAUDIO + help + PulseAudio plugin library + +comment "pulseaudio support needs a toolchain w/ threads, wchar, dynamic library" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS || !BR2_USE_WCHAR + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_SOUPHTTPSRC + bool "souphttpsrc (http client)" + depends on BR2_USE_WCHAR # libsoup -> glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libsoup -> glib2 + select BR2_PACKAGE_LIBSOUP + help + libsoup HTTP client src/sink + +comment "souphttpsrc needs a toolchain w/ wchar, threads" + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_SPEEX + bool "speex" + select BR2_PACKAGE_SPEEX + help + Speex plugin library + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_TAGLIB + bool "taglib" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + select BR2_PACKAGE_TAGLIB + help + Taglib tagging plugin library + +comment "taglib needs a toolchain w/ C++, wchar" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_TWOLAME + bool "twolame" + select BR2_PACKAGE_TWOLAME + help + twolame mp2 audio encoder plugin + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_VPX + bool "vpx (webm)" + depends on BR2_TOOLCHAIN_HAS_THREADS # libvpx + select BR2_PACKAGE_LIBVPX + help + VP8 plugin + +comment "libvpx needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_WAVPACK + bool "wavpack (*.wv audio)" + select BR2_PACKAGE_WAVPACK + help + Wavpack lossless/lossy audio format handling + +endif diff --git a/package/gstreamer1/gst1-plugins-good/gst1-plugins-good.hash b/package/gstreamer1/gst1-plugins-good/gst1-plugins-good.hash new file mode 100644 index 00000000..546fed98 --- /dev/null +++ b/package/gstreamer1/gst1-plugins-good/gst1-plugins-good.hash @@ -0,0 +1,3 @@ +# From https://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.18.4.tar.xz.sha256sum +sha256 b6e50e3a9bbcd56ee6ec71c33aa8332cc9c926b0c1fae995aac8b3040ebe39b0 gst-plugins-good-1.18.4.tar.xz +sha256 6095e9ffa777dd22839f7801aa845b31c9ed07f3d6bf8a26dc5d2dec8ccc0ef3 COPYING diff --git a/package/gstreamer1/gst1-plugins-good/gst1-plugins-good.mk b/package/gstreamer1/gst1-plugins-good/gst1-plugins-good.mk new file mode 100644 index 00000000..bace7780 --- /dev/null +++ b/package/gstreamer1/gst1-plugins-good/gst1-plugins-good.mk @@ -0,0 +1,493 @@ +################################################################################ +# +# gst1-plugins-good +# +################################################################################ + +GST1_PLUGINS_GOOD_VERSION = 1.18.4 +GST1_PLUGINS_GOOD_SOURCE = gst-plugins-good-$(GST1_PLUGINS_GOOD_VERSION).tar.xz +GST1_PLUGINS_GOOD_SITE = https://gstreamer.freedesktop.org/src/gst-plugins-good +GST1_PLUGINS_GOOD_LICENSE_FILES = COPYING +GST1_PLUGINS_GOOD_LICENSE = LGPL-2.1+ + +GST1_PLUGINS_GOOD_LDFLAGS = $(TARGET_LDFLAGS) $(TARGET_NLS_LIBS) + +GST1_PLUGINS_GOOD_CONF_OPTS = \ + -Dexamples=disabled \ + -Dtests=disabled \ + -Dgobject-cast-checks=disabled \ + -Dglib-asserts=disabled \ + -Dglib-checks=disabled \ + -Dasm=disabled \ + -Ddirectsound=disabled \ + -Dwaveform=disabled \ + -Drpicamsrc=disabled \ + -Dosxaudio=disabled \ + -Dosxvideo=disabled \ + -Daalib=disabled \ + -Dlibcaca=disabled \ + -Ddoc=disabled + +# Options which require currently unpackaged libraries +GST1_PLUGINS_GOOD_CONF_OPTS += \ + -Ddv=disabled \ + -Ddv1394=disabled + +GST1_PLUGINS_GOOD_DEPENDENCIES = \ + gstreamer1 \ + gst1-plugins-base \ + $(TARGET_NLS_DEPENDENCIES) + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_JACK),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Djack=enabled +GST1_PLUGINS_GOOD_DEPENDENCIES += jack2 +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Djack=disabled +endif + +ifeq ($(BR2_PACKAGE_LIBV4L),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dv4l2-libv4l2=enabled +GST1_PLUGINS_GOOD_DEPENDENCIES += libv4l +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dv4l2-libv4l2=disabled +endif + +ifeq ($(BR2_PACKAGE_ORC),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dorc=enabled +GST1_PLUGINS_GOOD_DEPENDENCIES += orc +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_ALPHA),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dalpha=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dalpha=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_APETAG),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dapetag=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dapetag=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_AUDIOFX),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Daudiofx=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Daudiofx=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_AUDIOPARSERS),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Daudioparsers=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Daudioparsers=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_AUPARSE),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dauparse=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dauparse=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_AUTODETECT),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dautodetect=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dautodetect=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_AVI),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Davi=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Davi=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_CUTTER),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dcutter=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dcutter=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_DEBUGUTILS),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Ddebugutils=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Ddebugutils=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_DEINTERLACE),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Ddeinterlace=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Ddeinterlace=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_DTMF),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Ddtmf=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Ddtmf=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_EFFECTV),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Deffectv=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Deffectv=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_EQUALIZER),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dequalizer=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dequalizer=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_FLV),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dflv=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dflv=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_FLX),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dflx=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dflx=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_GOOM),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dgoom=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dgoom=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_GOOM2K1),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dgoom2k1=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dgoom2k1=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_ICYDEMUX),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dicydemux=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dicydemux=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_ID3DEMUX),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Did3demux=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Did3demux=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_IMAGEFREEZE),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dimagefreeze=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dimagefreeze=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_INTERLEAVE),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dinterleave=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dinterleave=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_ISOMP4),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Disomp4=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Disomp4=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_LAME),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dlame=enabled +GST1_PLUGINS_GOOD_DEPENDENCIES += lame +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dlame=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_MPG123),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dmpg123=enabled +GST1_PLUGINS_GOOD_DEPENDENCIES += mpg123 +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dmpg123=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_LAW),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dlaw=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dlaw=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_LEVEL),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dlevel=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dlevel=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_MATROSKA),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dmatroska=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dmatroska=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_MONOSCOPE),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dmonoscope=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dmonoscope=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_MULTIFILE),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dmultifile=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dmultifile=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_MULTIPART),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dmultipart=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dmultipart=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_REPLAYGAIN),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dreplaygain=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dreplaygain=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_RTP),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Drtp=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Drtp=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_RTPMANAGER),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Drtpmanager=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Drtpmanager=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_RTSP),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Drtsp=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Drtsp=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_SHAPEWIPE),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dshapewipe=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dshapewipe=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_SMPTE),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dsmpte=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dsmpte=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_SPECTRUM),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dspectrum=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dspectrum=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_UDP),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dudp=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dudp=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_VIDEOBOX),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dvideobox=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dvideobox=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_VIDEOCROP),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dvideocrop=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dvideocrop=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_VIDEOFILTER),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dvideofilter=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dvideofilter=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_VIDEOMIXER),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dvideomixer=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dvideomixer=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_WAVENC),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dwavenc=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dwavenc=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_WAVPARSE),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dwavparse=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dwavparse=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_Y4M),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dy4m=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dy4m=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_OSS),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Doss=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Doss=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_OSS4),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Doss4=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Doss4=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_QMLGL),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dqt5=enabled +GST1_PLUGINS_GOOD_DEPENDENCIES += qt5declarative +ifeq ($(BR2_PACKAGE_QT5BASE_XCB),y) +GST1_PLUGINS_GOOD_DEPENDENCIES += qt5x11extras +endif +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dqt5=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_SHOUT2),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dshout2=enabled +GST1_PLUGINS_GOOD_DEPENDENCIES += libshout +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dshout2=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_V4L2),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dv4l2=enabled +# Enable use of gudev if available, for device probing and monitoring. +ifeq ($(BR2_PACKAGE_LIBGUDEV),y) +GST1_PLUGINS_GOOD_DEPENDENCIES += libgudev +GST1_PLUGINS_GOOD_CONF_OPTS += -Dv4l2-gudev=enabled +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dv4l2-gudev=disabled +endif +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dv4l2=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_V4L2_PROBE),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dv4l2-probe=true +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dv4l2-probe=false +endif + +ifeq ($(BR2_PACKAGE_XORG7),y) +GST1_PLUGINS_GOOD_DEPENDENCIES += xlib_libX11 xlib_libXext xlib_libXv +GST1_PLUGINS_GOOD_CONF_OPTS += -Dximagesrc=enabled +ifeq ($(BR2_PACKAGE_XLIB_LIBXFIXES),y) +GST1_PLUGINS_GOOD_DEPENDENCIES += xlib_libXfixes +GST1_PLUGINS_GOOD_CONF_OPTS += -Dximagesrc-xfixes=enabled +endif +ifeq ($(BR2_PACKAGE_XLIB_LIBXDAMAGE),y) +GST1_PLUGINS_GOOD_DEPENDENCIES += xlib_libXdamage +GST1_PLUGINS_GOOD_CONF_OPTS += -Dximagesrc-xdamage=enabled +endif +else +GST1_PLUGINS_GOOD_CONF_OPTS += \ + -Dximagesrc=disabled \ + -Dximagesrc-xfixes=disabled \ + -Dximagesrc-xdamage=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_CAIRO),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dcairo=enabled +GST1_PLUGINS_GOOD_DEPENDENCIES += cairo +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dcairo=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_FLAC),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dflac=enabled +GST1_PLUGINS_GOOD_DEPENDENCIES += flac +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dflac=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_GDKPIXBUF),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dgdk-pixbuf=enabled +GST1_PLUGINS_GOOD_DEPENDENCIES += gdk-pixbuf +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dgdk-pixbuf=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_JPEG),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Djpeg=enabled +GST1_PLUGINS_GOOD_DEPENDENCIES += jpeg +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Djpeg=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PNG),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dpng=enabled +GST1_PLUGINS_GOOD_DEPENDENCIES += libpng +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dpng=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_PULSE),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dpulse=enabled +GST1_PLUGINS_GOOD_DEPENDENCIES += pulseaudio +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dpulse=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_SOUPHTTPSRC),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dsoup=enabled +GST1_PLUGINS_GOOD_DEPENDENCIES += libsoup +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dsoup=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_SPEEX),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dspeex=enabled +GST1_PLUGINS_GOOD_DEPENDENCIES += speex +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dspeex=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_TAGLIB),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dtaglib=enabled +GST1_PLUGINS_GOOD_DEPENDENCIES += taglib +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dtaglib=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_TWOLAME),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dtwolame=enabled +GST1_PLUGINS_GOOD_DEPENDENCIES += twolame +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dtwolame=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_VPX),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dvpx=enabled +GST1_PLUGINS_GOOD_DEPENDENCIES += libvpx +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dvpx=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_WAVPACK),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dwavpack=enabled +GST1_PLUGINS_GOOD_DEPENDENCIES += wavpack +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dwavpack=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_ZLIB),y) +GST1_PLUGINS_GOOD_DEPENDENCIES += zlib +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_GOOD_BZ2),y) +GST1_PLUGINS_GOOD_CONF_OPTS += -Dbz2=enabled +GST1_PLUGINS_GOOD_DEPENDENCIES += bzip2 +else +GST1_PLUGINS_GOOD_CONF_OPTS += -Dbz2=disabled +endif + +$(eval $(meson-package)) diff --git a/package/gstreamer1/gst1-plugins-ugly/Config.in b/package/gstreamer1/gst1-plugins-ugly/Config.in new file mode 100644 index 00000000..ba199898 --- /dev/null +++ b/package/gstreamer1/gst1-plugins-ugly/Config.in @@ -0,0 +1,61 @@ +menuconfig BR2_PACKAGE_GST1_PLUGINS_UGLY + bool "gst1-plugins-ugly" + select BR2_PACKAGE_GST1_PLUGINS_BASE + help + A set of well-supported plug-ins for GStreamer, but might pose + problems for distributors. + + https://gstreamer.freedesktop.org/ + +if BR2_PACKAGE_GST1_PLUGINS_UGLY + +comment "dependency-less plugins" + +config BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_ASFDEMUX + bool "asfdemux" + help + Demuxes and muxes audio and video in Microsofts ASF format + +config BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_DVDLPCMDEC + bool "dvdlpcmdec" + help + Decode DVD LPCM frames into standard PCM + +config BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_DVDSUB + bool "dvdsub" + help + DVD subtitle parser and decoder + +config BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_XINGMUX + bool "xingmux" + help + Add XING tags to mpeg audio files + +config BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_REALMEDIA + bool "realmedia" + help + RealMedia support plugins + +comment "plugins with external dependencies (there may be more available)" + +config BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_DVDREAD + bool "dvdread" + select BR2_PACKAGE_LIBDVDREAD + help + Access a DVD with dvdread + +config BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_MPEG2DEC + bool "mpeg2dec" + select BR2_PACKAGE_LIBMPEG2 + help + LibMpeg2 decoder + +config BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_X264 + bool "x264" + select BR2_PACKAGE_X264 + help + x264 encoder + +# Note: to get descriptions use the following. +# # find . -name 'plugin-*.xml' | xargs grep -m 1 description +endif diff --git a/package/gstreamer1/gst1-plugins-ugly/gst1-plugins-ugly.hash b/package/gstreamer1/gst1-plugins-ugly/gst1-plugins-ugly.hash new file mode 100644 index 00000000..3ca78ed1 --- /dev/null +++ b/package/gstreamer1/gst1-plugins-ugly/gst1-plugins-ugly.hash @@ -0,0 +1,3 @@ +# From https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.18.4.tar.xz.sha256sum +sha256 218df0ce0d31e8ca9cdeb01a3b0c573172cc9c21bb3d41811c7820145623d13c gst-plugins-ugly-1.18.4.tar.xz +sha256 6095e9ffa777dd22839f7801aa845b31c9ed07f3d6bf8a26dc5d2dec8ccc0ef3 COPYING diff --git a/package/gstreamer1/gst1-plugins-ugly/gst1-plugins-ugly.mk b/package/gstreamer1/gst1-plugins-ugly/gst1-plugins-ugly.mk new file mode 100644 index 00000000..b596a0bc --- /dev/null +++ b/package/gstreamer1/gst1-plugins-ugly/gst1-plugins-ugly.mk @@ -0,0 +1,99 @@ +################################################################################ +# +# gst1-plugins-ugly +# +################################################################################ + +GST1_PLUGINS_UGLY_VERSION = 1.18.4 +GST1_PLUGINS_UGLY_SOURCE = gst-plugins-ugly-$(GST1_PLUGINS_UGLY_VERSION).tar.xz +GST1_PLUGINS_UGLY_SITE = https://gstreamer.freedesktop.org/src/gst-plugins-ugly +GST1_PLUGINS_UGLY_LICENSE_FILES = COPYING +# GPL licensed plugins will append to GST1_PLUGINS_UGLY_LICENSE if enabled. +GST1_PLUGINS_UGLY_LICENSE = LGPL-2.1+ + +GST1_PLUGINS_UGLY_LDFLAGS = $(TARGET_LDFLAGS) $(TARGET_NLS_LIBS) + +GST1_PLUGINS_UGLY_CONF_OPTS += \ + -Dexamples=disabled \ + -Dtests=disabled \ + -Ddoc=disabled + +GST1_PLUGINS_UGLY_CONF_OPTS += \ + -Da52dec=disabled \ + -Damrnb=disabled \ + -Damrwbdec=disabled \ + -Dcdio=disabled \ + -Dsidplay=disabled + +GST1_PLUGINS_UGLY_DEPENDENCIES = gstreamer1 gst1-plugins-base + +ifeq ($(BR2_PACKAGE_ORC),y) +GST1_PLUGINS_UGLY_CONF_OPTS += -Dorc=enabled +GST1_PLUGINS_UGLY_DEPENDENCIES += orc +else +GST1_PLUGINS_UGLY_CONF_OPTS += -Dorc=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_ASFDEMUX),y) +GST1_PLUGINS_UGLY_CONF_OPTS += -Dasfdemux=enabled +else +GST1_PLUGINS_UGLY_CONF_OPTS += -Dasfdemux=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_DVDLPCMDEC),y) +GST1_PLUGINS_UGLY_CONF_OPTS += -Ddvdlpcmdec=enabled +else +GST1_PLUGINS_UGLY_CONF_OPTS += -Ddvdlpcmdec=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_DVDSUB),y) +GST1_PLUGINS_UGLY_CONF_OPTS += -Ddvdsub=enabled +else +GST1_PLUGINS_UGLY_CONF_OPTS += -Ddvdsub=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_XINGMUX),y) +GST1_PLUGINS_UGLY_CONF_OPTS += -Dxingmux=enabled +else +GST1_PLUGINS_UGLY_CONF_OPTS += -Dxingmux=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_REALMEDIA),y) +GST1_PLUGINS_UGLY_CONF_OPTS += -Drealmedia=enabled +else +GST1_PLUGINS_UGLY_CONF_OPTS += -Drealmedia=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_DVDREAD),y) +GST1_PLUGINS_UGLY_CONF_OPTS += -Ddvdread=enabled +GST1_PLUGINS_UGLY_DEPENDENCIES += libdvdread +GST1_PLUGINS_UGLY_HAS_GPL_LICENSE = y +else +GST1_PLUGINS_UGLY_CONF_OPTS += -Ddvdread=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_MPEG2DEC),y) +GST1_PLUGINS_UGLY_CONF_OPTS += -Dmpeg2dec=enabled +GST1_PLUGINS_UGLY_DEPENDENCIES += libmpeg2 +GST1_PLUGINS_UGLY_HAS_GPL_LICENSE = y +else +GST1_PLUGINS_UGLY_CONF_OPTS += -Dmpeg2dec=disabled +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_X264),y) +GST1_PLUGINS_UGLY_CONF_OPTS += -Dx264=enabled +GST1_PLUGINS_UGLY_DEPENDENCIES += x264 +GST1_PLUGINS_UGLY_HAS_GPL_LICENSE = y +else +GST1_PLUGINS_UGLY_CONF_OPTS += -Dx264=disabled +endif + +# Add GPL license if GPL plugins enabled. +ifeq ($(GST1_PLUGINS_UGLY_HAS_GPL_LICENSE),y) +GST1_PLUGINS_UGLY_LICENSE += , GPL-2.0 +endif + +# Use the following command to extract license info for plugins. +# # find . -name 'plugin-*.xml' | xargs grep license + +$(eval $(meson-package)) diff --git a/package/gstreamer1/gst1-python/Config.in b/package/gstreamer1/gst1-python/Config.in new file mode 100644 index 00000000..2f349840 --- /dev/null +++ b/package/gstreamer1/gst1-python/Config.in @@ -0,0 +1,25 @@ +config BR2_PACKAGE_GST1_PYTHON + bool "gst1-python" + depends on BR2_USE_MMU # libglib2, gobject-introspection + depends on BR2_PACKAGE_GOBJECT_INTROSPECTION_ARCH_SUPPORTS # gobject-introspection + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # gobject-introspection + depends on BR2_TOOLCHAIN_USES_GLIBC # gobject-introspection + depends on BR2_PACKAGE_PYTHON3 # gobject-introspection + select BR2_PACKAGE_GOBJECT_INTROSPECTION + select BR2_PACKAGE_GST1_PLUGINS_BASE + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_PYTHON_GOBJECT + help + GStreamer python overrides for the gobject-introspection-based + pygst bindings. + + https://gstreamer.freedesktop.org/modules/gst-python.html + +comment "gst1-python needs python3" + depends on !BR2_PACKAGE_PYTHON3 + +comment "gst1-python needs a glibc toolchain, gcc >= 4.9" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_GOBJECT_INTROSPECTION_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_USES_GLIBC || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/gstreamer1/gst1-python/gst1-python.hash b/package/gstreamer1/gst1-python/gst1-python.hash new file mode 100644 index 00000000..f7c2d570 --- /dev/null +++ b/package/gstreamer1/gst1-python/gst1-python.hash @@ -0,0 +1,3 @@ +# From https://gstreamer.freedesktop.org/src/gst-python/gst-python-1.18.4.tar.xz.sha256sum +sha256 cb68e08a7e825e08b83a12a22dcd6e4f1b328a7b02a7ac84f42f68f4ddc7098e gst-python-1.18.4.tar.xz +sha256 ea3ad127610e5ded2210b3a86a46314f2b3b28e438eccffdae19a4d6fbcdb0c2 COPYING diff --git a/package/gstreamer1/gst1-python/gst1-python.mk b/package/gstreamer1/gst1-python/gst1-python.mk new file mode 100644 index 00000000..ed127cdb --- /dev/null +++ b/package/gstreamer1/gst1-python/gst1-python.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# gst1-python +# +################################################################################ + +GST1_PYTHON_VERSION = 1.18.4 +GST1_PYTHON_SOURCE = gst-python-$(GST1_PYTHON_VERSION).tar.xz +GST1_PYTHON_SITE = https://gstreamer.freedesktop.org/src/gst-python +GST1_PYTHON_INSTALL_STAGING = YES +GST1_PYTHON_LICENSE_FILES = COPYING +GST1_PYTHON_LICENSE = LGPL-2.1+ + +GST1_PYTHON_DEPENDENCIES = \ + gst1-plugins-base \ + gstreamer1 \ + python-gobject + +# A sysconfigdata_name must be manually specified or the resulting .so +# will have a x86_64 prefix, which causes "from gi.repository import Gst" +# to fail. A pythonpath must be specified or the host python path will be +# used resulting in a "not a valid python" error. +GST1_PYTHON_CONF_ENV += \ + _PYTHON_SYSCONFIGDATA_NAME=$(PKG_PYTHON_SYSCONFIGDATA_NAME) \ + PYTHONPATH=$(PYTHON3_PATH) + +# Due to the CONF_ENV options, libpython-dir must be set manually +# or else the error: "Python dynamic library path could not be determined" +# occurs. We set the libpython-dir to /usr/lib as this path is hard-coded +# into the resulting .so file as /usr/lib/python3.$(PYTHON3_VERSION_MAJOR).so. +# Because we provide PYTHONPATH=$(PYTHON3_PATH) above, the logic in the meson +# file uses the above python path to determine if /usr/lib/ has the proper .so +# file. Because Buildroot provides the appropriate paths, the meson file finds +# the correct .so file, and the resulting compiled library has the appropriate +# path of /usr/lib/python3.$(PYTHON3_VERSION_MAJOR).so +GST1_PYTHON_CONF_OPTS += \ + -Dlibpython-dir=/usr/lib/ + +$(eval $(meson-package)) diff --git a/package/gstreamer1/gst1-rtsp-server/Config.in b/package/gstreamer1/gst1-rtsp-server/Config.in new file mode 100644 index 00000000..f0294795 --- /dev/null +++ b/package/gstreamer1/gst1-rtsp-server/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_GST1_RTSP_SERVER + bool "gst1-rtsp-server" + select BR2_PACKAGE_GST1_PLUGINS_BASE + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_APP # runtime + select BR2_PACKAGE_GST1_PLUGINS_GOOD + select BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_RTP # runtime + select BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_RTPMANAGER # runtime + select BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_UDP # runtime + help + RTSP server library based on GStreamer. + + https://gstreamer.freedesktop.org/ diff --git a/package/gstreamer1/gst1-rtsp-server/gst1-rtsp-server.hash b/package/gstreamer1/gst1-rtsp-server/gst1-rtsp-server.hash new file mode 100644 index 00000000..b07b2441 --- /dev/null +++ b/package/gstreamer1/gst1-rtsp-server/gst1-rtsp-server.hash @@ -0,0 +1,4 @@ +# From https://gstreamer.freedesktop.org/src/gst-rtsp-server/gst-rtsp-server-1.18.4.tar.xz.sha256sum +sha256 a46bb8de40b971a048580279d2660e616796f871ad3ed00c8a95fe4d273a6c94 gst-rtsp-server-1.18.4.tar.xz +sha256 f445dc78b88496f7e20c7a2a461b95baba5865c8919b8289ac24ac0a80c6ce7a COPYING +sha256 f445dc78b88496f7e20c7a2a461b95baba5865c8919b8289ac24ac0a80c6ce7a COPYING.LIB diff --git a/package/gstreamer1/gst1-rtsp-server/gst1-rtsp-server.mk b/package/gstreamer1/gst1-rtsp-server/gst1-rtsp-server.mk new file mode 100644 index 00000000..878195b7 --- /dev/null +++ b/package/gstreamer1/gst1-rtsp-server/gst1-rtsp-server.mk @@ -0,0 +1,50 @@ +################################################################################ +# +# gst1-rtsp-server +# +################################################################################ + +GST1_RTSP_SERVER_VERSION = 1.18.4 +GST1_RTSP_SERVER_SOURCE = gst-rtsp-server-$(GST1_RTSP_SERVER_VERSION).tar.xz +GST1_RTSP_SERVER_SITE = http://gstreamer.freedesktop.org/src/gst-rtsp-server +GST1_RTSP_SERVER_LICENSE = LGPL-2.0+ +GST1_RTSP_SERVER_LICENSE_FILES = COPYING COPYING.LIB +GST1_RTSP_SERVER_CPE_ID_VENDOR = gstreamer_project +GST1_RTSP_SERVER_CPE_ID_PRODUCT = gst-rtsp-server +GST1_RTSP_SERVER_INSTALL_STAGING = YES +GST1_RTSP_SERVER_DEPENDENCIES = \ + host-pkgconf \ + gstreamer1 \ + gst1-plugins-base \ + gst1-plugins-good + +GST1_RTSP_SERVER_LDFLAGS = $(TARGET_LDFLAGS) $(TARGET_NLS_LIBS) + +GST1_RTSP_SERVER_CONF_OPTS = \ + -Dexamples=disabled \ + -Dtests=disabled \ + -Ddoc=disabled + +GST1_RTSP_SERVER_CONF_OPTS += \ + -Dexamples=disabled \ + -Dtests=disabled \ + -Dgobject-cast-checks=disabled \ + -Dglib-asserts=disabled \ + -Dglib-checks=disabled + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +GST1_RTSP_SERVER_CONF_OPTS += -Dintrospection=enabled +GST1_RTSP_SERVER_DEPENDENCIES += gobject-introspection +else +GST1_RTSP_SERVER_CONF_OPTS += -Dintrospection=disabled +endif + +ifeq ($(BR2_PACKAGE_LIBCGROUP),y) +GST1_RTSP_SERVER_DEPENDENCIES += libcgroup +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD),y) +GST1_RTSP_SERVER_DEPENDENCIES += gst1-plugins-bad +endif + +$(eval $(meson-package)) diff --git a/package/gstreamer1/gst1-shark/Config.in b/package/gstreamer1/gst1-shark/Config.in new file mode 100644 index 00000000..ad6b6fb9 --- /dev/null +++ b/package/gstreamer1/gst1-shark/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_GST1_SHARK + bool "gst1-shark" + select BR2_PACKAGE_GSTREAMER1_CHECK + select BR2_PACKAGE_GST1_PLUGINS_BASE + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_APP + select BR2_PACKAGE_GSTREAMER1_GST_DEBUG # gst_debug_log_valist, GST_CAT_STATES + help + GstShark leverages GStreamers newest instrumentation subsystem + by installing a set of custom hooks to the trace points. A + variety of data analytics are extracted and presented to the + user in a graphical, friendly way. + + https://github.com/RidgeRun/gst-shark diff --git a/package/gstreamer1/gst1-shark/gst1-shark.hash b/package/gstreamer1/gst1-shark/gst1-shark.hash new file mode 100644 index 00000000..caa9107b --- /dev/null +++ b/package/gstreamer1/gst1-shark/gst1-shark.hash @@ -0,0 +1,5 @@ +# locally computed hash +sha256 b141312603af82f600981dd7231e2ecc5a42b3550fadd2450965a0a85f62cbb2 gst1-shark-v0.7.2-br1.tar.gz + +# Hashes for license files: +sha256 6d191b8f1fa03cabced18b8e48fddbf960a19f965bed8491e76ed62238f92f0b COPYING diff --git a/package/gstreamer1/gst1-shark/gst1-shark.mk b/package/gstreamer1/gst1-shark/gst1-shark.mk new file mode 100644 index 00000000..ea0c5a29 --- /dev/null +++ b/package/gstreamer1/gst1-shark/gst1-shark.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# gst1-shark +# +################################################################################ + +GST1_SHARK_VERSION = v0.7.2 +GST1_SHARK_SITE = https://github.com/RidgeRun/gst-shark.git +GST1_SHARK_SITE_METHOD = git +GST1_SHARK_GIT_SUBMODULES = YES + +GST1_SHARK_LICENSE = LGPL-2.1+ +GST1_SHARK_LICENSE_FILES = COPYING + +GST1_SHARK_AUTORECONF = YES +GST1_SHARK_DEPENDENCIES = host-pkgconf gstreamer1 gst1-plugins-base +GST1_SHARK_CONF_OPTS = --disable-graphviz + +$(eval $(autotools-package)) diff --git a/package/gstreamer1/gst1-vaapi/Config.in b/package/gstreamer1/gst1-vaapi/Config.in new file mode 100644 index 00000000..91bd4f85 --- /dev/null +++ b/package/gstreamer1/gst1-vaapi/Config.in @@ -0,0 +1,50 @@ +config BR2_PACKAGE_GST1_VAAPI + bool "gst1-vaapi" + depends on !BR2_STATIC_LIBS # dlopen(), libva + depends on BR2_TOOLCHAIN_HAS_THREADS # libva, libdrm + depends on BR2_PACKAGE_HAS_UDEV + select BR2_PACKAGE_LIBVA + select BR2_PACKAGE_LIBDRM + select BR2_PACKAGE_GST1_PLUGINS_BASE + select BR2_PACKAGE_GST1_PLUGINS_BAD # gstreamer-codecparsers + help + gstreamer-vaapi consists in a collection of VA-API based + plugins for GStreamer and helper libraries. + + vaapidec is used to decode JPEG, MPEG-2, MPEG-4:2, + H.264 AVC, H.264 MVC, VP8, VC-1, WMV3, HEVC videos to VA + surfaces, depending on the actual value of and the + underlying hardware capabilities. This plugin is also able + to implicitly download the decoded surface to raw YUV + buffers. + + vaapienc is used to encode into MPEG-2, H.264 AVC, + H.264 MVC, JPEG, VP8, HEVC videos, depending on the actual + value of (mpeg2, h264, etc.) and the hardware + capabilities. By default, raw format bitstreams are + generated, so the result may be piped to a muxer, e.g. qtmux + for MP4 containers. + + vaapipostproc is used to filter VA surfaces, for + e.g. scaling, deinterlacing (bob, motion-adaptive, + motion-compensated), noise reduction or sharpening. This + plugin is also used to upload raw YUV pixels into VA + surfaces. + + vaapisink is used to render VA surfaces to an X11 or Wayland + display. This plugin also features a "headless" mode (DRM) + more suited to remote transcode scenarios, with faster + throughput. + + https://cgit.freedesktop.org/gstreamer/gstreamer-vaapi + +if BR2_PACKAGE_GST1_VAAPI + +config BR2_PACKAGE_GST1_VAAPI_ENCODERS + bool "enable encoders" + +endif + +comment "gst1-vaapi needs udev /dev management and a toolchain w/ threads, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS || \ + !BR2_PACKAGE_HAS_UDEV diff --git a/package/gstreamer1/gst1-vaapi/gst1-vaapi.hash b/package/gstreamer1/gst1-vaapi/gst1-vaapi.hash new file mode 100644 index 00000000..10986d3c --- /dev/null +++ b/package/gstreamer1/gst1-vaapi/gst1-vaapi.hash @@ -0,0 +1,3 @@ +# From https://gstreamer.freedesktop.org/src/gstreamer-vaapi/gstreamer-vaapi-1.18.4.tar.xz.sha256sum +sha256 92db98af86f3150d429c9ab17e88d2364f9c07a140c8f445ed739e8f10252aea gstreamer-vaapi-1.18.4.tar.xz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LIB diff --git a/package/gstreamer1/gst1-vaapi/gst1-vaapi.mk b/package/gstreamer1/gst1-vaapi/gst1-vaapi.mk new file mode 100644 index 00000000..411a3269 --- /dev/null +++ b/package/gstreamer1/gst1-vaapi/gst1-vaapi.mk @@ -0,0 +1,36 @@ +################################################################################ +# +# gst1-vaapi +# +################################################################################ + +GST1_VAAPI_VERSION = 1.18.4 +GST1_VAAPI_SITE = https://gstreamer.freedesktop.org/src/gstreamer-vaapi +GST1_VAAPI_SOURCE = gstreamer-vaapi-$(GST1_VAAPI_VERSION).tar.xz +GST1_VAAPI_LICENSE = LGPL-2.1+ +GST1_VAAPI_LICENSE_FILES = COPYING.LIB + +GST1_VAAPI_DEPENDENCIES += \ + gstreamer1 \ + gst1-plugins-base \ + gst1-plugins-bad \ + libva \ + libdrm + +GST1_VAAPI_CONF_OPTS += \ + -Dwith_drm=yes \ + -Dwith_x11=no \ + -Dwith_glx=no \ + -Dwith_wayland=no \ + -Dwith_egl=no \ + -Dexamples=disabled \ + -Dtest=disabled \ + -Ddoc=disabled + +ifeq ($(BR2_PACKAGE_GST1_VAAPI_ENCODERS),y) +GST1_VAAPI_CONF_OPTS += -Dwith_encoders=yes +else +GST1_VAAPI_CONF_OPTS += -Dwith_encoders=no +endif + +$(eval $(meson-package)) diff --git a/package/gstreamer1/gstreamer1-editing-services/Config.in b/package/gstreamer1/gstreamer1-editing-services/Config.in new file mode 100644 index 00000000..9c41e814 --- /dev/null +++ b/package/gstreamer1/gstreamer1-editing-services/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_GSTREAMER1_EDITING_SERVICES + bool "gstreamer1-editing-services" + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_GST1_PLUGINS_BASE + select BR2_PACKAGE_GST1_PLUGINS_GOOD + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIOCONVERT # runtime + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIOMIXER # runtime + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIORESAMPLE # runtime + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEOCONVERT # runtime + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEOTESTSRC # runtime + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEOSCALE # runtime + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VOLUME # runtime + select BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_IMAGEFREEZE # runtime + help + GStreamer Editing Services is a high-level library for + facilitating the creation of audio/video non-linear editors. + + https://gstreamer.freedesktop.org diff --git a/package/gstreamer1/gstreamer1-editing-services/gstreamer1-editing-services.hash b/package/gstreamer1/gstreamer1-editing-services/gstreamer1-editing-services.hash new file mode 100644 index 00000000..1795171e --- /dev/null +++ b/package/gstreamer1/gstreamer1-editing-services/gstreamer1-editing-services.hash @@ -0,0 +1,6 @@ +# From https://gstreamer.freedesktop.org/src/gstreamer-editing-services/gst-editing-services-1.18.4.tar.xz.sha256sum +sha256 4687b870a7de18aebf50f45ff572ad9e0138020e3479e02a6f056a0c4c7a1d04 gst-editing-services-1.18.4.tar.xz + +# Hashes for license files: +sha256 f445dc78b88496f7e20c7a2a461b95baba5865c8919b8289ac24ac0a80c6ce7a COPYING +sha256 f445dc78b88496f7e20c7a2a461b95baba5865c8919b8289ac24ac0a80c6ce7a COPYING.LIB diff --git a/package/gstreamer1/gstreamer1-editing-services/gstreamer1-editing-services.mk b/package/gstreamer1/gstreamer1-editing-services/gstreamer1-editing-services.mk new file mode 100644 index 00000000..e7f626ef --- /dev/null +++ b/package/gstreamer1/gstreamer1-editing-services/gstreamer1-editing-services.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# gstreamer1-editing-services +# +################################################################################ + +GSTREAMER1_EDITING_SERVICES_VERSION = 1.18.4 +GSTREAMER1_EDITING_SERVICES_SOURCE = gst-editing-services-$(GSTREAMER1_EDITING_SERVICES_VERSION).tar.xz +GSTREAMER1_EDITING_SERVICES_SITE = https://gstreamer.freedesktop.org/src/gstreamer-editing-services +GSTREAMER1_EDITING_SERVICES_LICENSE = LGPL-2.0+ +GSTREAMER1_EDITING_SERVICES_LICENSE_FILES = COPYING COPYING.LIB +GSTREAMER1_EDITING_SERVICES_INSTALL_STAGING = YES +GSTREAMER1_EDITING_SERVICES_DEPENDENCIES = \ + host-pkgconf \ + gstreamer1 \ + gst1-plugins-base \ + gst1-plugins-good \ + libxml2 + +GSTREAMER1_EDITING_SERVICES_CONF_OPTS = \ + -Ddoc=disabled \ + -Dexamples=disabled \ + -Dintrospection=disabled \ + -Dtests=disabled \ + -Dtools=enabled \ + -Dbash-completion=disabled \ + -Dxptv=disabled \ + -Dpython=disabled + +ifeq ($(BR2_PACKAGE_GST1_DEVTOOLS),y) +GSTREAMER1_EDITING_SERVICES_DEPENDENCIES += gst1-devtools +GSTREAMER1_EDITING_SERVICES_CONF_OPTS += -Dvalidate=enabled +else +GSTREAMER1_EDITING_SERVICES_CONF_OPTS += -Dvalidate=disabled +endif + +$(eval $(meson-package)) diff --git a/package/gstreamer1/gstreamer1-mm/Config.in b/package/gstreamer1/gstreamer1-mm/Config.in new file mode 100644 index 00000000..471c083c --- /dev/null +++ b/package/gstreamer1/gstreamer1-mm/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_GSTREAMER1_MM + bool "gstreamer1-mm" + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # glibmm + depends on BR2_INSTALL_LIBSTDCPP # glibmm + depends on BR2_USE_WCHAR # glibmm -> libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # glibmm -> libglib2 + select BR2_PACKAGE_GLIBMM + select BR2_PACKAGE_GSTREAMER1_CHECK + select BR2_PACKAGE_GST1_PLUGINS_BASE + help + gstreamermm provides C++ bindings for the GStreamer streaming + multimedia library (http://gstreamer.freedesktop.org). With + gstreamermm it is possible to develop applications that work + with multimedia in C++. + + gstreamermm is developed over glibmm, libsigc++ and libxml++ + and the functionalities they provide. This means that, among + other things, referencing and unreferencing of GObjects is + handled automatically via glibmm's automatic pointer class, + Glib::RefPtr, and libsigc++'s slots are used for callbacks and + signals. + + https://gstreamer.freedesktop.org/bindings/cplusplus.html + +comment "gstreamer1-mm needs a toolchain w/ C++, wchar, threads, gcc >= 4.9" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || !BR2_USE_WCHAR \ + || !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/gstreamer1/gstreamer1-mm/gstreamer1-mm.hash b/package/gstreamer1/gstreamer1-mm/gstreamer1-mm.hash new file mode 100644 index 00000000..425cf05f --- /dev/null +++ b/package/gstreamer1/gstreamer1-mm/gstreamer1-mm.hash @@ -0,0 +1,6 @@ +# From http://ftp.gnome.org/pub/gnome/sources/gstreamermm/1.10/gstreamermm-1.10.0.sha256sum +sha256 be58fe9ef7d7e392568ec85e80a84f4730adbf91fb0355ff7d7c616675ea8d60 gstreamermm-1.10.0.tar.xz + +# Locally computed +sha256 7c78a8d7fc6781d51402d5a6036bedda9cffb0e5d28757e25d54d6eacbb1949f COPYING +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING.examples diff --git a/package/gstreamer1/gstreamer1-mm/gstreamer1-mm.mk b/package/gstreamer1/gstreamer1-mm/gstreamer1-mm.mk new file mode 100644 index 00000000..539c9df1 --- /dev/null +++ b/package/gstreamer1/gstreamer1-mm/gstreamer1-mm.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# gstreamer1-mm +# +################################################################################ + +GSTREAMER1_MM_VERSION_MAJOR = 1.10 +GSTREAMER1_MM_VERSION = $(GSTREAMER1_MM_VERSION_MAJOR).0 +GSTREAMER1_MM_SITE = http://ftp.gnome.org/pub/gnome/sources/gstreamermm/$(GSTREAMER1_MM_VERSION_MAJOR) +GSTREAMER1_MM_SOURCE = gstreamermm-$(GSTREAMER1_MM_VERSION).tar.xz +GSTREAMER1_MM_LICENSE = LGPL-2.1+ (library), GPL-2.0 (examples) +GSTREAMER1_MM_LICENSE_FILES = COPYING COPYING.examples +GSTREAMER1_MM_INSTALL_STAGING = YES +GSTREAMER1_MM_DEPENDENCIES += \ + glibmm \ + gstreamer1 \ + gst1-plugins-base + +GSTREAMER1_MM_CONF_OPTS += \ + --disable-gl \ + --enable-unittests=no \ + --disable-deprecated-api + +$(eval $(autotools-package)) diff --git a/package/gstreamer1/gstreamer1.mk b/package/gstreamer1/gstreamer1.mk new file mode 100644 index 00000000..8530ff02 --- /dev/null +++ b/package/gstreamer1/gstreamer1.mk @@ -0,0 +1 @@ +include $(sort $(wildcard package/gstreamer1/*/*.mk)) diff --git a/package/gstreamer1/gstreamer1/Config.in b/package/gstreamer1/gstreamer1/Config.in new file mode 100644 index 00000000..5609d869 --- /dev/null +++ b/package/gstreamer1/gstreamer1/Config.in @@ -0,0 +1,61 @@ +comment "gstreamer 1.x needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_GSTREAMER1 + bool "gstreamer 1.x" + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + select BR2_PACKAGE_LIBGLIB2 + help + GStreamer is an open source multimedia framework. This 1.x + version of Gstreamer is incompatible with Gstreamer 0.10.x. + + https://gstreamer.freedesktop.org/ + +if BR2_PACKAGE_GSTREAMER1 + +config BR2_PACKAGE_GSTREAMER1_CHECK + bool "enable unit test libraries" + help + Enable building unit test libraries for gstreamer. + +config BR2_PACKAGE_GSTREAMER1_PARSE + bool "enable command-line parser" + default y + help + Enable command line parser for gstreamer. This may increase + the CPU overhead by a small amount. + +config BR2_PACKAGE_GSTREAMER1_TRACE + bool "enable tracing subsystem" + default y + help + Enable the tracing subsystem within gstreamer. This may + increase CPU overhead by a small amount. + +config BR2_PACKAGE_GSTREAMER1_GST_DEBUG + bool "enable gst-debug trace support" + default y + help + Enable support for the gst-debug tracing functionality in + gstreamer. This has limited CPU overhead, but does increase + the rootfs size somewhat. + +config BR2_PACKAGE_GSTREAMER1_PLUGIN_REGISTRY + bool "enable plugin registry" + default y + help + Enable support for the GStreamer plugin registry. This may + increase the launch-time for a GStreamer application. + +config BR2_PACKAGE_GSTREAMER1_INSTALL_TOOLS + bool "install tools" + default y + help + Install the gst-inspect, gst-launch, gst-stats and + gst-typefind tools. This will take up additional space on + the target. + +endif diff --git a/package/gstreamer1/gstreamer1/gstreamer1.hash b/package/gstreamer1/gstreamer1/gstreamer1.hash new file mode 100644 index 00000000..e9709ef0 --- /dev/null +++ b/package/gstreamer1/gstreamer1/gstreamer1.hash @@ -0,0 +1,3 @@ +# From https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.18.4.tar.xz.sha256sum +sha256 9aeec99b38e310817012aa2d1d76573b787af47f8a725a65b833880a094dfbc5 gstreamer-1.18.4.tar.xz +sha256 f445dc78b88496f7e20c7a2a461b95baba5865c8919b8289ac24ac0a80c6ce7a COPYING diff --git a/package/gstreamer1/gstreamer1/gstreamer1.mk b/package/gstreamer1/gstreamer1/gstreamer1.mk new file mode 100644 index 00000000..171ea2b8 --- /dev/null +++ b/package/gstreamer1/gstreamer1/gstreamer1.mk @@ -0,0 +1,52 @@ +################################################################################ +# +# gstreamer1 +# +################################################################################ + +GSTREAMER1_VERSION = 1.18.4 +GSTREAMER1_SOURCE = gstreamer-$(GSTREAMER1_VERSION).tar.xz +GSTREAMER1_SITE = https://gstreamer.freedesktop.org/src/gstreamer +GSTREAMER1_INSTALL_STAGING = YES +GSTREAMER1_LICENSE_FILES = COPYING +GSTREAMER1_LICENSE = LGPL-2.0+, LGPL-2.1+ +GSTREAMER1_CPE_ID_VENDOR = gstreamer_project +GSTREAMER1_CPE_ID_PRODUCT = gstreamer + +GSTREAMER1_CONF_OPTS = \ + -Dexamples=disabled \ + -Dtests=disabled \ + -Dbenchmarks=disabled \ + -Dtools=$(if $(BR2_PACKAGE_GSTREAMER1_INSTALL_TOOLS),enabled,disabled) \ + -Dgtk_doc=disabled \ + -Dgobject-cast-checks=disabled \ + -Dglib-asserts=disabled \ + -Dglib-checks=disabled \ + -Dextra-checks=disabled \ + -Dcheck=$(if $(BR2_PACKAGE_GSTREAMER1_CHECK),enabled,disabled) \ + -Dtracer_hooks=$(if $(BR2_PACKAGE_GSTREAMER1_TRACE),true,false) \ + -Doption-parsing=$(if $(BR2_PACKAGE_GSTREAMER1_PARSE),true,false) \ + -Dgst_debug=$(if $(BR2_PACKAGE_GSTREAMER1_GST_DEBUG),true,false) \ + -Dgst_parse=true \ + -Dregistry=$(if $(BR2_PACKAGE_GSTREAMER1_PLUGIN_REGISTRY),true,false) \ + -Ddoc=disabled + +GSTREAMER1_DEPENDENCIES = \ + host-bison \ + host-flex \ + host-pkgconf \ + libglib2 \ + $(if $(BR2_PACKAGE_LIBUNWIND),libunwind) \ + $(if $(BR2_PACKAGE_VALGRIND),valgrind) \ + $(TARGET_NLS_DEPENDENCIES) + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +GSTREAMER1_CONF_OPTS += -Dintrospection=enabled +GSTREAMER1_DEPENDENCIES += gobject-introspection +else +GSTREAMER1_CONF_OPTS += -Dintrospection=disabled +endif + +GSTREAMER1_LDFLAGS = $(TARGET_LDFLAGS) $(TARGET_NLS_LIBS) + +$(eval $(meson-package)) diff --git a/package/gtest/Config.in b/package/gtest/Config.in new file mode 100644 index 00000000..3f1f3855 --- /dev/null +++ b/package/gtest/Config.in @@ -0,0 +1,54 @@ +config BR2_PACKAGE_GTEST + bool "gtest" + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_MMU # fork() + help + Google's framework for writing C++ tests on a variety of + platforms (Linux, Mac OS X, Windows, Cygwin, Windows CE, and + Symbian). Based on the xUnit architecture. Supports + automatic test discovery, a rich set of assertions, + user-defined assertions, death tests, fatal and non-fatal + failures, value- and type-parameterized tests, various + options for running the tests, and XML test report + generation. + + Gtest also allows to easily build testsuites for C programs. + + This package allows running testsuites on the target which + might be advantageous in certain cases. + + https://github.com/google/googletest + +if BR2_PACKAGE_GTEST + +config BR2_PACKAGE_GTEST_GMOCK + bool "gmock" + help + Inspired by jMock, EasyMock, and Hamcrest, and designed with + C++'s specifics in mind, Google C++ Mocking Framework (or + Google Mock for short) is a library for writing and using C++ + mock classes. + + Google Mock: + + * lets you create mock classes trivially using simple + macros, supports a rich set of matchers and actions, + * handles unordered, partially ordered, or completely + ordered expectations, + * is extensible by users, and + * works on Linux, Mac OS X, Windows, Windows Mobile, minGW, + and Symbian. + + There are both host and target packages. The target one has + include files required to compile the tests and the static + libraries required to link/run them. The host package installs + gmock_gen, a Python script used to generate code mocks. + +endif # BR2_PACKAGE_GTEST + +comment "gtest needs a toolchain w/ C++, wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_INSTALL_LIBSTDCPP diff --git a/package/gtest/gtest.hash b/package/gtest/gtest.hash new file mode 100644 index 00000000..082c5977 --- /dev/null +++ b/package/gtest/gtest.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 9dc9157a9a1551ec7a7e43daea9a694a0bb5fb8bec81235d8a1e6ef64c716dcb gtest-1.10.0.tar.gz +sha256 9702de7e4117a8e2b20dafab11ffda58c198aede066406496bef670d40a22138 googletest/LICENSE diff --git a/package/gtest/gtest.mk b/package/gtest/gtest.mk new file mode 100644 index 00000000..f8b2339d --- /dev/null +++ b/package/gtest/gtest.mk @@ -0,0 +1,103 @@ +################################################################################ +# +# gtest +# +################################################################################ + +GTEST_VERSION = 1.10.0 +GTEST_SITE = $(call github,google,googletest,release-$(GTEST_VERSION)) +GTEST_INSTALL_STAGING = YES +GTEST_INSTALL_TARGET = NO +GTEST_LICENSE = BSD-3-Clause +GTEST_LICENSE_FILES = googletest/LICENSE +GTEST_CPE_ID_VENDOR = google +GTEST_CPE_ID_PRODUCT = google_test + +ifeq ($(BR2_PACKAGE_GTEST_GMOCK),y) +GTEST_DEPENDENCIES += host-gtest +endif + +HOST_GTEST_LICENSE = Apache-2.0 +HOST_GTEST_LICENSE_FILES = googlemock/scripts/generator/LICENSE +ifeq ($(BR2_PACKAGE_PYTHON3),y) +HOST_GTEST_PYTHON_VERSION = $(PYTHON3_VERSION_MAJOR) +HOST_GTEST_DEPENDENCIES += host-python3 +else +HOST_GTEST_PYTHON_VERSION = $(PYTHON_VERSION_MAJOR) +HOST_GTEST_DEPENDENCIES += host-python +endif + +HOST_GTEST_GMOCK_PYTHONPATH = \ + $(HOST_DIR)/lib/python$(HOST_GTEST_PYTHON_VERSION)/site-packages + +# While it is possible to build gtest as shared library, using this gtest shared +# library requires to set some special configure option in the project using +# gtest. +# So, force to build gtest as a static library. +# +# For further details, refer to the explaination given in the README file from +# the gtest sources. +GTEST_CONF_OPTS = -DBUILD_SHARED_LIBS=OFF + +# Ensure that GTest is compiled with -fPIC to allow linking the static +# libraries with dynamically linked programs. This is not a requirement +# for most architectures but is mandatory for ARM. +ifeq ($(BR2_STATIC_LIBS),) +GTEST_CONF_OPTS += -DCMAKE_POSITION_INDEPENDENT_CODE=ON +endif + +GTEST_CONF_OPTS += -DBUILD_GTEST=ON + +# Generate the gtest-config script manually, since the CMake build system is +# not doing it. +define GTEST_INSTALL_GTEST_CONFIG + sed 's%@PACKAGE_TARNAME@%gtest%;\ + s%@PACKAGE_VERSION@%$(GTEST_VERSION)%;\ + s%@prefix@%$(STAGING_DIR)/usr%;\ + s%@exec_prefix@%$(STAGING_DIR)/usr%;\ + s%@libdir@%$(STAGING_DIR)/usr/lib%;\ + s%@includedir@%$(STAGING_DIR)/usr/include%;\ + s%@bindir@%$(STAGING_DIR)/usr/bin%;\ + s%@PTHREAD_CFLAGS@%%;\ + s%@PTHREAD_LIBS@%-lpthread%;' \ + $(@D)/googletest/scripts/gtest-config.in \ + > $(STAGING_DIR)/usr/bin/gtest-config + chmod +x $(STAGING_DIR)/usr/bin/gtest-config +endef +GTEST_POST_INSTALL_STAGING_HOOKS = GTEST_INSTALL_GTEST_CONFIG + +ifeq ($(BR2_PACKAGE_GTEST_GMOCK),y) +GTEST_CONF_OPTS += -DBUILD_GMOCK=ON + +# Generate the gmock-config script manually, since the CMake build system is +# not doing it. +define GTEST_INSTALL_GMOCK_CONFIG + sed 's%@PACKAGE_TARNAME@%gmock%;\ + s%@PACKAGE_VERSION@%$(GTEST_VERSION)%;\ + s%@prefix@%$(STAGING_DIR)/usr%;\ + s%@exec_prefix@%$(STAGING_DIR)/usr%;\ + s%@libdir@%$(STAGING_DIR)/usr/lib%;\ + s%@includedir@%$(STAGING_DIR)/usr/include%;\ + s%@bindir@%$(STAGING_DIR)/usr/bin%;\ + s%@PTHREAD_CFLAGS@%%;\ + s%@PTHREAD_LIBS@%-lpthread%;' \ + $(@D)/googlemock/scripts/gmock-config.in \ + > $(STAGING_DIR)/usr/bin/gmock-config + chmod +x $(STAGING_DIR)/usr/bin/gmock-config +endef +GTEST_POST_INSTALL_STAGING_HOOKS += GTEST_INSTALL_GMOCK_CONFIG +else +GTEST_CONF_OPTS += -DBUILD_GMOCK=OFF +endif + +define HOST_GTEST_INSTALL_CMDS + $(INSTALL) -D -m 0755 $(@D)/googlemock/scripts/generator/gmock_gen.py \ + $(HOST_DIR)/bin/gmock_gen + cp -rp $(@D)/googlemock/scripts/generator/cpp \ + $(HOST_GTEST_GMOCK_PYTHONPATH) +endef + +$(eval $(cmake-package)) +# The host package does not build anything, just installs gmock_gen stuff, so +# it does not need to be a host-cmake-package. +$(eval $(host-generic-package)) diff --git a/package/gtk2-engines/Config.in b/package/gtk2-engines/Config.in new file mode 100644 index 00000000..756a7d00 --- /dev/null +++ b/package/gtk2-engines/Config.in @@ -0,0 +1,5 @@ +config BR2_PACKAGE_GTK2_ENGINES + bool "gtk engines" + depends on BR2_PACKAGE_LIBGTK2 + help + A collection of basic theme engines for GTK+. diff --git a/package/gtk2-engines/gtk2-engines.hash b/package/gtk2-engines/gtk2-engines.hash new file mode 100644 index 00000000..20125c70 --- /dev/null +++ b/package/gtk2-engines/gtk2-engines.hash @@ -0,0 +1,4 @@ +# From http://ftp.gnome.org/pub/gnome/sources/gtk-engines/2.20/gtk-engines-2.20.2.sha256sum +sha256 15b680abca6c773ecb85253521fa100dd3b8549befeecc7595b10209d62d66b5 gtk-engines-2.20.2.tar.bz2 +# Locally computed +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 COPYING diff --git a/package/gtk2-engines/gtk2-engines.mk b/package/gtk2-engines/gtk2-engines.mk new file mode 100644 index 00000000..5f145940 --- /dev/null +++ b/package/gtk2-engines/gtk2-engines.mk @@ -0,0 +1,88 @@ +################################################################################ +# +# gtk2-engines +# +################################################################################ + +GTK2_ENGINES_VERSION_MAJOR = 2.20 +GTK2_ENGINES_VERSION = $(GTK2_ENGINES_VERSION_MAJOR).2 +GTK2_ENGINES_SOURCE = gtk-engines-$(GTK2_ENGINES_VERSION).tar.bz2 +GTK2_ENGINES_SITE = http://ftp.gnome.org/pub/GNOME/sources/gtk-engines/$(GTK2_ENGINES_VERSION_MAJOR) +GTK2_ENGINES_DEPENDENCIES = libgtk2 host-intltool +GTK2_ENGINES_LICENSE = LGPL-2.1+ +GTK2_ENGINES_LICENSE_FILES = COPYING + +GTK2_ENGINES_CONF_ENV = \ + ac_cv_func_posix_getpwuid_r=yes \ + glib_cv_stack_grows=no \ + glib_cv_uscore=no \ + ac_cv_func_strtod=yes \ + ac_fsusage_space=yes \ + fu_cv_sys_stat_statfs2_bsize=yes \ + ac_cv_func_closedir_void=no \ + ac_cv_func_getloadavg=no \ + ac_cv_lib_util_getloadavg=no \ + ac_cv_lib_getloadavg_getloadavg=no \ + ac_cv_func_getgroups=yes \ + ac_cv_func_getgroups_works=yes \ + ac_cv_func_chown_works=yes \ + ac_cv_have_decl_euidaccess=no \ + ac_cv_func_euidaccess=no \ + ac_cv_have_decl_strnlen=yes \ + ac_cv_func_strnlen_working=yes \ + ac_cv_func_lstat_dereferences_slashed_symlink=yes \ + ac_cv_func_lstat_empty_string_bug=no \ + ac_cv_func_stat_empty_string_bug=no \ + vb_cv_func_rename_trailing_slash_bug=no \ + ac_cv_have_decl_nanosleep=yes \ + jm_cv_func_nanosleep_works=yes \ + gl_cv_func_working_utimes=yes \ + ac_cv_func_utime_null=yes \ + ac_cv_have_decl_strerror_r=yes \ + ac_cv_func_strerror_r_char_p=no \ + jm_cv_func_svid_putenv=yes \ + ac_cv_func_getcwd_null=yes \ + ac_cv_func_getdelim=yes \ + ac_cv_func_mkstemp=yes \ + utils_cv_func_mkstemp_limitations=no \ + utils_cv_func_mkdir_trailing_slash_bug=no \ + jm_cv_func_gettimeofday_clobber=no \ + gl_cv_func_working_readdir=yes \ + jm_ac_cv_func_link_follows_symlink=no \ + utils_cv_localtime_cache=no \ + ac_cv_struct_st_mtim_nsec=no \ + gl_cv_func_tzset_clobber=no \ + gl_cv_func_getcwd_null=yes \ + gl_cv_func_getcwd_path_max=yes \ + ac_cv_func_fnmatch_gnu=yes \ + am_getline_needs_run_time_check=no \ + am_cv_func_working_getline=yes \ + gl_cv_func_mkdir_trailing_slash_bug=no \ + gl_cv_func_mkstemp_limitations=no \ + ac_cv_func_working_mktime=yes \ + jm_cv_func_working_re_compile_pattern=yes \ + ac_use_included_regex=no \ + gl_cv_c_restrict=no \ + ac_cv_path_CUPS_CONFIG=no + +GTK2_ENGINES_CONF_OPTS = \ + --with-x \ + --x-includes=$(STAGING_DIR)/usr/include/X11 \ + --x-libraries=$(STAGING_DIR)/usr/lib \ + --disable-glibtest \ + --enable-explicit-deps=no \ + --enable-clearlooks \ + --disable-crux \ + --disable-hc \ + --disable-industrial \ + --disable-mist \ + --disable-redmond \ + --disable-smooth \ + --disable-glide \ + --disable-thinice \ + --enable-animation \ + --disable-development \ + --disable-paranoia \ + --disable-deprecated + +$(eval $(autotools-package)) diff --git a/package/gtkmm3/Config.in b/package/gtkmm3/Config.in new file mode 100644 index 00000000..8762c720 --- /dev/null +++ b/package/gtkmm3/Config.in @@ -0,0 +1,30 @@ +comment "gtkmm3 needs libgtk3 and a toolchain w/ C++, wchar, threads, gcc >= 4.9" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || !BR2_USE_WCHAR \ + || !BR2_INSTALL_LIBSTDCPP || !BR2_PACKAGE_LIBGTK3 \ + || !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_GTKMM3 + bool "gtkmm3" + # Broken on existing external/internal nios2 toolchains, + # revisit when they are upgraded with at least Binutils >= 2.26 + # and GCC >= 5.3. + # https://sourceware.org/bugzilla/show_bug.cgi?id=19405 + depends on !BR2_nios2 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # pangomm, libgtk3 -> pango -> harfbuzz + depends on BR2_INSTALL_LIBSTDCPP # glibmm, libpangomm -> glibmm/pango + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C++11 + depends on BR2_TOOLCHAIN_HAS_THREADS # *mm/libgtk3 -> libglib2 + depends on BR2_USE_MMU # *mm/libgtk3 -> libglib2 + depends on BR2_USE_WCHAR # *mm/libgtk3 -> libglib2 + depends on BR2_PACKAGE_LIBGTK3 + select BR2_PACKAGE_ATKMM + select BR2_PACKAGE_CAIROMM + select BR2_PACKAGE_GLIBMM + select BR2_PACKAGE_LIBSIGC + select BR2_PACKAGE_PANGOMM + help + The gtkmm3 package is a set of C++ bindings for GTK 3. + + http://www.gtkmm.org/ diff --git a/package/gtkmm3/gtkmm3.hash b/package/gtkmm3/gtkmm3.hash new file mode 100644 index 00000000..87c59b2c --- /dev/null +++ b/package/gtkmm3/gtkmm3.hash @@ -0,0 +1,5 @@ +# From http://ftp.gnome.org/pub/GNOME/sources/gtkmm/3.22/gtkmm-3.22.0.sha256sum +sha256 05da4d4b628fb20c8384630ddf478a3b5562952b2d6181fe28d58f6cbc0514f5 gtkmm-3.22.0.tar.xz +# Locally computed +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING.tools diff --git a/package/gtkmm3/gtkmm3.mk b/package/gtkmm3/gtkmm3.mk new file mode 100644 index 00000000..00988914 --- /dev/null +++ b/package/gtkmm3/gtkmm3.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# gtkmm3 +# +################################################################################ + +GTKMM3_VERSION_MAJOR = 3.22 +GTKMM3_VERSION = $(GTKMM3_VERSION_MAJOR).0 +GTKMM3_SOURCE = gtkmm-$(GTKMM3_VERSION).tar.xz +GTKMM3_SITE = http://ftp.gnome.org/pub/gnome/sources/gtkmm/$(GTKMM3_VERSION_MAJOR) +GTKMM3_LICENSE = LGPL-2.1+ (library), GPL-2.0+ (tools) +GTKMM3_LICENSE_FILES = COPYING COPYING.tools +GTKMM3_INSTALL_STAGING = YES +GTKMM3_DEPENDENCIES = atkmm cairomm glibmm libgtk3 libsigc pangomm host-pkgconf + +$(eval $(autotools-package)) diff --git a/package/gtkperf/Config.in b/package/gtkperf/Config.in new file mode 100644 index 00000000..a763e305 --- /dev/null +++ b/package/gtkperf/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_GTKPERF + bool "gtkperf (performance test for GTK2)" + depends on BR2_PACKAGE_LIBGTK2 + help + GtkPerf is an application designed to test GTK+ performance. + The point is to create common testing platform to run + predefined GTK+ widgets + e.g. (opening comboboxes, toggling buttons, scrolling text + yms.) and this way define the speed of device/platform. + + http://gtkperf.sourceforge.net/ diff --git a/package/gtkperf/gtkperf.hash b/package/gtkperf/gtkperf.hash new file mode 100644 index 00000000..72f35a26 --- /dev/null +++ b/package/gtkperf/gtkperf.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 9704344e732038eecbd007dd996a56293a6b027b5b76f3f036273a3fae1ab27b gtkperf_0.40.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/gtkperf/gtkperf.mk b/package/gtkperf/gtkperf.mk new file mode 100644 index 00000000..cc043398 --- /dev/null +++ b/package/gtkperf/gtkperf.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# gtkperf +# +################################################################################ + +GTKPERF_VERSION = 0.40 +GTKPERF_SOURCE = gtkperf_$(GTKPERF_VERSION).tar.gz +GTKPERF_SITE = http://downloads.sourceforge.net/project/gtkperf/gtkperf/$(GTKPERF_VERSION) +GTKPERF_DEPENDENCIES = libgtk2 $(TARGET_NLS_DEPENDENCIES) +GTKPERF_LICENSE = GPL-2.0 +GTKPERF_LICENSE_FILES = COPYING +GTKPERF_CONF_ENV = LIBS=$(TARGET_NLS_LIBS) + +$(eval $(autotools-package)) diff --git a/package/gtksourceview/Config.in b/package/gtksourceview/Config.in new file mode 100644 index 00000000..e87969b1 --- /dev/null +++ b/package/gtksourceview/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_GTKSOURCEVIEW + bool "gtksourceview" + depends on BR2_PACKAGE_LIBGTK3 + select BR2_PACKAGE_LIBXML2 + help + GtkSourceView is a portable C library that extends the + standard GTK+ framework for multiline text editing with + support for configurable syntax highlighting, unlimited + undo/redo, search and replace, a completion framework, + printing and other features typical of a source code editor. + + https://projects.gnome.org/gtksourceview diff --git a/package/gtksourceview/gtksourceview.hash b/package/gtksourceview/gtksourceview.hash new file mode 100644 index 00000000..3b78b706 --- /dev/null +++ b/package/gtksourceview/gtksourceview.hash @@ -0,0 +1,5 @@ +# Hash from: http://ftp.gnome.org/pub/gnome/sources/gtksourceview/3.24/gtksourceview-3.24.7.sha256sum: +sha256 a5c20d3a6347533689358f3ea52486409f6dd41d5a69c65eab7570cfaffee8e6 gtksourceview-3.24.7.tar.xz + +# Locally computed: +sha256 5df07007198989c622f5d41de8d703e7bef3d0e79d62e24332ee739a452af62a COPYING diff --git a/package/gtksourceview/gtksourceview.mk b/package/gtksourceview/gtksourceview.mk new file mode 100644 index 00000000..ae1d3ff2 --- /dev/null +++ b/package/gtksourceview/gtksourceview.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# gtksourceview +# +################################################################################ + +GTKSOURCEVIEW_VERSION_MAJOR = 3.24 +GTKSOURCEVIEW_VERSION = $(GTKSOURCEVIEW_VERSION_MAJOR).7 +GTKSOURCEVIEW_SOURCE = gtksourceview-$(GTKSOURCEVIEW_VERSION).tar.xz +GTKSOURCEVIEW_SITE = \ + http://ftp.gnome.org/pub/gnome/sources/gtksourceview/$(GTKSOURCEVIEW_VERSION_MAJOR) +GTKSOURCEVIEW_LICENSE = LGPL-2.1+ +GTKSOURCEVIEW_LICENSE_FILES = COPYING +GTKSOURCEVIEW_INSTALL_STAGING = YES +GTKSOURCEVIEW_DEPENDENCIES = host-pkgconf libglib2 libxml2 libgtk3 + +$(eval $(autotools-package)) diff --git a/package/guile/0001-fix_arm_endianness.patch b/package/guile/0001-fix_arm_endianness.patch new file mode 100644 index 00000000..67c0b606 --- /dev/null +++ b/package/guile/0001-fix_arm_endianness.patch @@ -0,0 +1,25 @@ +Fix support for ARM endianness, otherwise it gives the error +"unknown CPU endianness" + +Signed-off-by: Pedro Aguilar + +diff -Nau guile-2.0.11.orig/module/system/base/target.scm guile-2.0.11/module/system/base/target.scm +--- guile-2.0.11.orig/module/system/base/target.scm 2013-02-28 09:42:45.000000000 +0100 ++++ guile-2.0.11/module/system/base/target.scm 2014-11-03 23:05:01.789338997 +0100 +@@ -70,7 +70,15 @@ + ((member cpu '("sparc" "sparc64" "powerpc" "powerpc64" "spu" + "mips" "mips64")) + (endianness big)) +- ((string-match "^arm.*el" cpu) ++ ((string-match "^arm.*el" cpu) ++ (endianness little)) ++ ((string-match "^arm.*eb" cpu) ++ (endianness big)) ++ ((string-prefix? "arm" cpu) ;ARMs are LE by default ++ (endianness little)) ++ ((string-match "^aarch64.*be" cpu) ++ (endianness big)) ++ ((string=? "aarch64" cpu) + (endianness little)) + (else + (error "unknown CPU endianness" cpu))))) diff --git a/package/guile/0002-calculate-csqrt_manually.patch b/package/guile/0002-calculate-csqrt_manually.patch new file mode 100644 index 00000000..98bb0b68 --- /dev/null +++ b/package/guile/0002-calculate-csqrt_manually.patch @@ -0,0 +1,16 @@ +Avoid using scm_from_complex_double(csqrt()) when building with uclibc. + +Signed-off-by: Pedro Aguilar + +diff -Nau guile-2.0.11.orig/configure.ac guile-2.0.11/configure.ac +--- guile-2.0.11.orig/configure.ac 2014-03-12 14:36:02.000000000 +0100 ++++ guile-2.0.11/configure.ac 2014-11-03 23:59:51.897267207 +0100 +@@ -862,7 +862,7 @@ + }]])], + [guile_cv_use_csqrt=yes], + [guile_cv_use_csqrt="no, glibc 2.3 bug"], +- [guile_cv_use_csqrt="yes, hopefully (cross-compiling)"])]) ++ [guile_cv_use_csqrt="no (cross-compiling)"])]) + case $guile_cv_use_csqrt in + yes*) + AC_DEFINE([HAVE_USABLE_CSQRT], 1, [Define to 1 if csqrt is bug-free]) diff --git a/package/guile/0003-Makefile.am-fix-build-without-makeinfo.patch b/package/guile/0003-Makefile.am-fix-build-without-makeinfo.patch new file mode 100644 index 00000000..0d16f923 --- /dev/null +++ b/package/guile/0003-Makefile.am-fix-build-without-makeinfo.patch @@ -0,0 +1,51 @@ +From 9304ad88a5f4b083d348563c5de00da53b34cf46 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Fri, 6 Mar 2020 23:20:39 +0100 +Subject: [PATCH] Makefile.am: fix build without makeinfo + +Don't build doc subdir if makeinfo is not available otherwise build +fails on: + +make[4]: Entering directory '/nvmedata/autobuild/instance-7/output-1/build/host-guile-2.0.14/doc/ref' + MAKEINFO guile.info +/nvmedata/autobuild/instance-7/output-1/build/host-guile-2.0.14/build-aux/missing: line 81: makeinfo: command not found +WARNING: 'makeinfo' is missing on your system. + You should only need it if you modified a '.texi' file, or + any other file indirectly affecting the aspect of the manual. + You might want to install the Texinfo package: + + The spurious makeinfo call might also be the consequence of + using a buggy 'make' (AIX, DU, IRIX), in which case you might + want to install GNU make: + + +Fixes: + - http://autobuild.buildroot.org/results/9605aac6f760bfff190d0ab95fa50f65486ffe90 + +Signed-off-by: Fabrice Fontaine +[Upstream status: sent to bug-guile@gnu.org] +--- + Makefile.am | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index ebbf6d476..2270afb9f 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -38,8 +38,12 @@ SUBDIRS = \ + test-suite \ + benchmark-suite \ + gc-benchmarks \ +- am \ ++ am ++ ++if HAVE_MAKEINFO ++SUBDIRS += \ + doc ++endif + + DIST_SUBDIRS = $(SUBDIRS) prebuilt + +-- +2.25.0 + diff --git a/package/guile/0004-module-system-base-target.scm-support-riscv32.patch b/package/guile/0004-module-system-base-target.scm-support-riscv32.patch new file mode 100644 index 00000000..a988d2d9 --- /dev/null +++ b/package/guile/0004-module-system-base-target.scm-support-riscv32.patch @@ -0,0 +1,33 @@ +From 6142350d7c0562b0525462abdd41309ae0faa2eb Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Fri, 6 Aug 2021 19:49:37 +0200 +Subject: [PATCH] module/system/base/target.scm: support riscv32 + +Fix the following build failure on riscv32: + +system/base/target.scm:132:16: In procedure triplet-pointer-size: +unknown CPU word size "riscv32" + +Fixes: + - http://autobuild.buildroot.org/results/6705630c1484239ec8b73d57ebc2e2570fbfc8f8 + +Signed-off-by: Fabrice Fontaine +--- + module/system/base/target.scm | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/module/system/base/target.scm b/module/system/base/target.scm +index 2088cd866..dba46664d 100644 +--- a/module/system/base/target.scm ++++ b/module/system/base/target.scm +@@ -116,6 +116,7 @@ + + ((string-match "^x86_64-.*-gnux32" triplet) 4) ; x32 + ++ ((string-match "32$" cpu) 4) + ((string-match "64$" cpu) 8) + ((string-match "64_?[lbe][lbe]$" cpu) 8) + ((member cpu '("sparc" "powerpc" "mips" "mipsel" "nios2" "m68k" "sh3" "sh4")) 4) +-- +2.30.2 + diff --git a/package/guile/Config.in b/package/guile/Config.in new file mode 100644 index 00000000..c26c296e --- /dev/null +++ b/package/guile/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_GUILE + bool "guile" + depends on !BR2_TOOLCHAIN_USES_MUSL # no strtol_l + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_PACKAGE_LIBATOMIC_OPS_ARCH_SUPPORTS # bdwgc + depends on BR2_USE_WCHAR # libunistring + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_LIBUNISTRING + select BR2_PACKAGE_LIBFFI + select BR2_PACKAGE_GMP + select BR2_PACKAGE_BDWGC + select BR2_PACKAGE_LIBTOOL + help + Guile is an interpreter and compiler for the Scheme + programming language, a clean and elegant dialect of Lisp. + + http://www.gnu.org/software/guile + +comment "guile needs a uClibc or glibc toolchain w/ threads, wchar, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR || \ + BR2_STATIC_LIBS || BR2_TOOLCHAIN_USES_MUSL diff --git a/package/guile/guile.hash b/package/guile/guile.hash new file mode 100644 index 00000000..a163f59f --- /dev/null +++ b/package/guile/guile.hash @@ -0,0 +1,6 @@ +# Locally calculated after checking pgp signature +sha256 6b7947dc2e3d115983846a268b8f5753c12fd5547e42fbf2b97d75a3b79f0d31 guile-3.0.4.tar.xz +# Locally computed +sha256 b51c6f20e6d029cb5b3e5bf235ac562c9a188c5bdc4ffcdc663897772d6e0260 LICENSE +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING +sha256 9ccf26cfe845e0eb8bb58053e47366e7ab6b697ae010f7650978d4b71b7d1fc1 COPYING.LESSER diff --git a/package/guile/guile.mk b/package/guile/guile.mk new file mode 100644 index 00000000..44f4d1c8 --- /dev/null +++ b/package/guile/guile.mk @@ -0,0 +1,72 @@ +################################################################################ +# +# guile +# +################################################################################ + +GUILE_VERSION = 3.0.4 +GUILE_SOURCE = guile-$(GUILE_VERSION).tar.xz +GUILE_SITE = $(BR2_GNU_MIRROR)/guile +GUILE_INSTALL_STAGING = YES +# For 0002-calculate-csqrt_manually.patch and +# 0003-Makefile.am-fix-build-without-makeinfo.patch +GUILE_AUTORECONF = YES +GUILE_LICENSE = LGPL-3.0+ +GUILE_LICENSE_FILES = LICENSE COPYING COPYING.LESSER + +# libtool dependency is needed because guile uses libltdl +GUILE_DEPENDENCIES = host-guile libunistring libffi gmp bdwgc host-pkgconf libtool +HOST_GUILE_DEPENDENCIES = host-libunistring host-libffi host-gmp host-bdwgc host-flex host-pkgconf host-gettext + +# The HAVE_GC* CFLAGS specify that we will use internal callbacks +# instead of the ones provided by +# bdwgc. Eg. HAVE_GC_SET_FINALIZER_NOTIFIER specifies that we won't +# use bdwgc's GC_finalizer_notifier callback. Trying to use these +# specific bdwgc's callbacks breaks guile's building. +GUILE_CFLAGS = \ + -DHAVE_GC_SET_FINALIZER_NOTIFIER \ + -DHAVE_GC_GET_HEAP_USAGE_SAFE \ + -DHAVE_GC_GET_FREE_SPACE_DIVISOR \ + -DHAVE_GC_SET_FINALIZE_ON_DEMAND + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +GUILE_CONF_ENV += LIBS=-latomic +endif + +ifeq ($(BR2_STATIC_LIBS),y) +GUILE_CFLAGS += -DGC_NO_DLOPEN +endif + +# Triggers assembler error with -Os +ifeq ($(BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM)$(BR2_OPTIMIZE_S),yy) +GUILE_CFLAGS += -O2 +endif + +# jit triggers build failures with gcc < 5 +ifeq ($(BR2_TOOLCHAIN_GCC_AT_LEAST_5),) +GUILE_CONF_OPTS += --disable-jit +endif +ifeq ($(BR2_HOST_GCC_AT_LEAST_5),) +HOST_GUILE_CONF_OPTS += --disable-jit +endif + +# It can use readline, but on the condition that it was build against +# ncurses. If both aren't present disable readline support since the +# host readline/ncurses support can poison the build. +ifeq ($(BR2_PACKAGE_NCURSES)$(BR2_PACKAGE_READLINE),yy) +GUILE_CONF_OPTS += --with-libreadline-prefix=$(STAGING_DIR)/usr +GUILE_DEPENDENCIES += readline +else +GUILE_CONF_OPTS += --without-libreadline-prefix +endif + +GUILE_CONF_ENV += GUILE_FOR_BUILD=$(HOST_DIR)/bin/guile \ + CFLAGS="$(TARGET_CFLAGS) $(GUILE_CFLAGS)" + +GUILE_CONF_OPTS += \ + --with-libltdl-prefix=$(STAGING_DIR)/usr/lib \ + --with-libgmp-prefix=$(STAGING_DIR)/usr/lib \ + --with-libunistring-prefix=$(STAGING_DIR)/usr/lib + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/gupnp-av/Config.in b/package/gupnp-av/Config.in new file mode 100644 index 00000000..7b618f5b --- /dev/null +++ b/package/gupnp-av/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_GUPNP_AV + bool "gupnp-av" + depends on BR2_USE_WCHAR # glib2, gupnp + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2, gupnp + depends on BR2_USE_MMU # glib2, gupnp + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_GUPNP + select BR2_PACKAGE_LIBXML2 + help + GUPnP-AV is a collection of helpers for building AV + (audio/video) applications using GUPnP. + + http://www.gupnp.org/ + +comment "gupnp-av needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/gupnp-av/gupnp-av.hash b/package/gupnp-av/gupnp-av.hash new file mode 100644 index 00000000..5dc2ac1a --- /dev/null +++ b/package/gupnp-av/gupnp-av.hash @@ -0,0 +1,5 @@ +# Hash from: http://ftp.gnome.org/pub/gnome/sources/gupnp-av/0.12/gupnp-av-0.12.11.sha256sum: +sha256 689dcf1492ab8991daea291365a32548a77d1a2294d85b33622b55cca9ce6fdc gupnp-av-0.12.11.tar.xz + +# Hash for license file: +sha256 d245807f90032872d1438d741ed21e2490e1175dc8aa3afa5ddb6c8e529b58e5 COPYING diff --git a/package/gupnp-av/gupnp-av.mk b/package/gupnp-av/gupnp-av.mk new file mode 100644 index 00000000..55436d0e --- /dev/null +++ b/package/gupnp-av/gupnp-av.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# gupnp-av +# +################################################################################ + +GUPNP_AV_VERSION_MAJOR = 0.12 +GUPNP_AV_VERSION = $(GUPNP_AV_VERSION_MAJOR).11 +GUPNP_AV_SOURCE = gupnp-av-$(GUPNP_AV_VERSION).tar.xz +GUPNP_AV_SITE = http://ftp.gnome.org/pub/gnome/sources/gupnp-av/$(GUPNP_AV_VERSION_MAJOR) +GUPNP_AV_LICENSE = LGPL-2.0+ +GUPNP_AV_LICENSE_FILES = COPYING +GUPNP_AV_INSTALL_STAGING = YES +GUPNP_AV_DEPENDENCIES = host-pkgconf libglib2 libxml2 gupnp + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +GUPNP_AV_CONF_OPTS += --enable-introspection +GUPNP_AV_DEPENDENCIES += gobject-introspection +else +GUPNP_AV_CONF_OPTS += --disable-introspection +endif + +$(eval $(autotools-package)) diff --git a/package/gupnp-dlna/Config.in b/package/gupnp-dlna/Config.in new file mode 100644 index 00000000..a0ecdb3b --- /dev/null +++ b/package/gupnp-dlna/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_GUPNP_DLNA + bool "gupnp-dlna" + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBXML2 + help + GUPnP DLNA is a small utility library that aims to ease the + DLNA-related tasks such as media profile guessing, transcoding + to a given profile, etc. + + http://www.gupnp.org/ + +comment "gupnp-dlna needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/gupnp-dlna/gupnp-dlna.hash b/package/gupnp-dlna/gupnp-dlna.hash new file mode 100644 index 00000000..01c74897 --- /dev/null +++ b/package/gupnp-dlna/gupnp-dlna.hash @@ -0,0 +1,5 @@ +# Hash from: http://ftp.gnome.org/pub/gnome/sources/gupnp-dlna/0.10/gupnp-dlna-0.10.5.sha256sum: +sha256 123e368227c11d5c17fc1aa76cbdaffa345355eb51d172cd39fc74a5b468ff6a gupnp-dlna-0.10.5.tar.xz + +# Locally computed: +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/gupnp-dlna/gupnp-dlna.mk b/package/gupnp-dlna/gupnp-dlna.mk new file mode 100644 index 00000000..85d30b7c --- /dev/null +++ b/package/gupnp-dlna/gupnp-dlna.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# gupnp-dlna +# +################################################################################ + +GUPNP_DLNA_VERSION_MAJOR = 0.10 +GUPNP_DLNA_VERSION = $(GUPNP_DLNA_VERSION_MAJOR).5 +GUPNP_DLNA_SOURCE = gupnp-dlna-$(GUPNP_DLNA_VERSION).tar.xz +GUPNP_DLNA_SITE = \ + http://ftp.gnome.org/pub/gnome/sources/gupnp-dlna/$(GUPNP_DLNA_VERSION_MAJOR) +# COPYING contains LGPL-2.1 but all source files contain LPGL-2.0+ +GUPNP_DLNA_LICENSE = LGPL-2.0+ +GUPNP_DLNA_LICENSE_FILES = COPYING +GUPNP_DLNA_INSTALL_STAGING = YES +GUPNP_DLNA_DEPENDENCIES = host-pkgconf libglib2 libxml2 + +GUPNP_DLNA_CONF_OPTS = \ + --disable-introspection \ + --disable-legacy-gstreamer-metadata-backend + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE),y) +GUPNP_DLNA_CONF_OPTS += --enable-gstreamer-metadata-backend +GUPNP_DLNA_DEPENDENCIES += gstreamer1 gst1-plugins-base +else +GUPNP_DLNA_CONF_OPTS += --disable-gstreamer-metadata-backend +endif + +$(eval $(autotools-package)) diff --git a/package/gupnp-tools/0001-src-meson.build-upload-needs-gupnp-av.patch b/package/gupnp-tools/0001-src-meson.build-upload-needs-gupnp-av.patch new file mode 100644 index 00000000..f8eba767 --- /dev/null +++ b/package/gupnp-tools/0001-src-meson.build-upload-needs-gupnp-av.patch @@ -0,0 +1,30 @@ +From 0831f77e990e363f78e3f6a5c461084988824f7b Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Tue, 2 Jul 2019 23:48:12 +0200 +Subject: [PATCH] src/meson.build: upload needs gupnp-av + +Signed-off-by: Fabrice Fontaine +[Upstream status: +https://gitlab.gnome.org/GNOME/gupnp-tools/merge_requests/3] +--- + src/meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/meson.build b/src/meson.build +index 84b2ca2..6601f45 100644 +--- a/src/meson.build ++++ b/src/meson.build +@@ -2,9 +2,9 @@ subdir('common') + + if get_option('av-tools') and gupnp_av.found() + subdir('av-cp') ++ subdir('upload') + endif + + subdir('discover') + subdir('network-light') + subdir('universal-cp') +-subdir('upload') +-- +2.20.1 + diff --git a/package/gupnp-tools/Config.in b/package/gupnp-tools/Config.in new file mode 100644 index 00000000..af662417 --- /dev/null +++ b/package/gupnp-tools/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_GUPNP_TOOLS + bool "gupnp-tools" + depends on BR2_PACKAGE_LIBGTK3 + # gssdp, gupnp, libsoup all select on libglib2, so they have + # the same dependencies as libgtk3, which we depend on. So for + # the same of simplicity, we don't replicate all those + # (complex) dependencies. + select BR2_PACKAGE_GSSDP + select BR2_PACKAGE_GUPNP + select BR2_PACKAGE_LIBSOUP + select BR2_PACKAGE_LIBXML2 + help + GUPnP Tools are free replacements of Intel UPnP tools that + use GUPnP. They provides client and server side tools which + enable one to easily test and debug one's UPnP devices and + control points. + + http://www.gupnp.org/ + +comment "gupnp-tools needs libgtk3" + depends on !BR2_PACKAGE_LIBGTK3 diff --git a/package/gupnp-tools/gupnp-tools.hash b/package/gupnp-tools/gupnp-tools.hash new file mode 100644 index 00000000..30f1b829 --- /dev/null +++ b/package/gupnp-tools/gupnp-tools.hash @@ -0,0 +1,5 @@ +# Hash from: http://ftp.gnome.org/pub/gnome/sources/gupnp-tools/0.10/gupnp-tools-0.10.0.sha256sum: +sha256 41da7ff5ba8e2425adcb64ca5e04c81f57ca20ec6fdb84923939fdad42c6a18d gupnp-tools-0.10.0.tar.xz + +# Locally computed: +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/gupnp-tools/gupnp-tools.mk b/package/gupnp-tools/gupnp-tools.mk new file mode 100644 index 00000000..182b0145 --- /dev/null +++ b/package/gupnp-tools/gupnp-tools.mk @@ -0,0 +1,38 @@ +################################################################################ +# +# gupnp-tools +# +################################################################################ + +GUPNP_TOOLS_VERSION_MAJOR = 0.10 +GUPNP_TOOLS_VERSION = $(GUPNP_TOOLS_VERSION_MAJOR).0 +GUPNP_TOOLS_SOURCE = gupnp-tools-$(GUPNP_TOOLS_VERSION).tar.xz +GUPNP_TOOLS_SITE = \ + http://ftp.gnome.org/pub/gnome/sources/gupnp-tools/$(GUPNP_TOOLS_VERSION_MAJOR) +GUPNP_TOOLS_LICENSE = GPL-2.0+ +GUPNP_TOOLS_LICENSE_FILES = COPYING +GUPNP_TOOLS_INSTALL_STAGING = YES +GUPNP_TOOLS_DEPENDENCIES = \ + host-pkgconf \ + libglib2 \ + libxml2 \ + gssdp \ + gupnp \ + libsoup \ + libgtk3 \ + $(TARGET_NLS_DEPENDENCIES) + +GUPNP_TOOLS_LDFLAGS = $(TARGET_LDFLAGS) $(TARGET_NLS_LIBS) + +ifeq ($(BR2_PACKAGE_GUPNP_AV),y) +GUPNP_TOOLS_CONF_OPTS += -Dav-tools=true +GUPNP_TOOLS_DEPENDENCIES += gupnp-av +else +GUPNP_TOOLS_CONF_OPTS += -Dav-tools=false +endif + +ifeq ($(BR2_PACKAGE_GTKSOURCEVIEW),y) +GUPNP_TOOLS_DEPENDENCIES += gtksourceview +endif + +$(eval $(meson-package)) diff --git a/package/gupnp/0001-doc-Check-for-stylesheet-existence-on-doc-build.patch b/package/gupnp/0001-doc-Check-for-stylesheet-existence-on-doc-build.patch new file mode 100644 index 00000000..448996da --- /dev/null +++ b/package/gupnp/0001-doc-Check-for-stylesheet-existence-on-doc-build.patch @@ -0,0 +1,73 @@ +From 7ce37c94596029358a67d732a82e4313f7b89135 Mon Sep 17 00:00:00 2001 +From: Jens Georg +Date: Sun, 30 May 2021 13:13:00 +0200 +Subject: [PATCH] doc: Check for stylesheet existence on doc build + +Checking for xsltproc is not enough + +Fixes #17 + +[Retrieved from: +https://gitlab.gnome.org/GNOME/gupnp/-/commit/7ce37c94596029358a67d732a82e4313f7b89135] +Signed-off-by: Fabrice Fontaine +--- + doc/meson.build | 34 +++++++++++++++++++++++++--------- + 1 file changed, 25 insertions(+), 9 deletions(-) + +diff --git a/doc/meson.build b/doc/meson.build +index 26c32c9..eb69d07 100644 +--- a/doc/meson.build ++++ b/doc/meson.build +@@ -30,6 +30,8 @@ endif + + xsltproc = find_program('xsltproc', required: false) + if xsltproc.found() ++ stylesheet = 'http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl' ++ + xlstproc_flags = [ + '--nonet', + '--xinclude', +@@ -45,17 +47,31 @@ if xsltproc.found() + xsltproc, + xlstproc_flags, + '-o', '@OUTPUT@', +- 'http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl', ++ stylesheet, + '@INPUT@' + ] + +- custom_target( +- 'man 1 pages', +- input: 'gupnp-binding-tool.xml', +- output: 'gupnp-binding-tool-1.2.1', +- command: xsltproc_args, +- depend_files : version_xml, +- install: true, +- install_dir: join_paths(get_option('mandir'), 'man1') ++ stylesheet_check = run_command( ++ [ ++ xsltproc, ++ xlstproc_flags, ++ '--noout', ++ stylesheet, ++ 'gupnp-binding-tool.xml' ++ ] + ) ++ if (stylesheet_check.returncode() == 0) ++ message('Stylesheet ' + stylesheet + ' available') ++ custom_target( ++ 'man 1 pages', ++ input: 'gupnp-binding-tool.xml', ++ output: 'gupnp-binding-tool-1.2.1', ++ command: xsltproc_args, ++ depend_files : version_xml, ++ install: true, ++ install_dir: join_paths(get_option('mandir'), 'man1') ++ ) ++ else ++ message('Stylesheet ' + stylesheet + ' not found, not building man page') ++ endif + endif +-- +GitLab + diff --git a/package/gupnp/Config.in b/package/gupnp/Config.in new file mode 100644 index 00000000..3074a427 --- /dev/null +++ b/package/gupnp/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_GUPNP + bool "gupnp" + depends on BR2_USE_WCHAR # glib2, gssdp + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2, gssdp + depends on BR2_USE_MMU # glib2, gssdp + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_GSSDP + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + help + GUPnP implements the UPnP specification: resource announcement + and discovery, description, control, event notification, and + presentation. + + http://www.gupnp.org/ + +comment "gupnp needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/gupnp/gupnp.hash b/package/gupnp/gupnp.hash new file mode 100644 index 00000000..7064c9f6 --- /dev/null +++ b/package/gupnp/gupnp.hash @@ -0,0 +1,5 @@ +# Hash from: http://ftp.gnome.org/pub/gnome/sources/gupnp/1.2/gupnp-1.2.6.sha256sum: +sha256 00b20f1e478a72deac92c34723693a2ac55789ed1e4bb4eed99eb4d62092aafd gupnp-1.2.6.tar.xz + +# Hash for license file: +sha256 d245807f90032872d1438d741ed21e2490e1175dc8aa3afa5ddb6c8e529b58e5 COPYING diff --git a/package/gupnp/gupnp.mk b/package/gupnp/gupnp.mk new file mode 100644 index 00000000..7ec0e638 --- /dev/null +++ b/package/gupnp/gupnp.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# gupnp +# +################################################################################ + +GUPNP_VERSION_MAJOR = 1.2 +GUPNP_VERSION = $(GUPNP_VERSION_MAJOR).6 +GUPNP_SOURCE = gupnp-$(GUPNP_VERSION).tar.xz +GUPNP_SITE = http://ftp.gnome.org/pub/gnome/sources/gupnp/$(GUPNP_VERSION_MAJOR) +GUPNP_LICENSE = LGPL-2.0+ +GUPNP_LICENSE_FILES = COPYING +GUPNP_INSTALL_STAGING = YES +GUPNP_DEPENDENCIES = host-pkgconf libglib2 libxml2 gssdp util-linux +GUPNP_CONF_OPTS = -Dexamples=false + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +GUPNP_CONF_OPTS += -Dintrospection=true -Dvapi=true +GUPNP_DEPENDENCIES += host-vala gobject-introspection +else +GUPNP_CONF_OPTS += -Dintrospection=false -Dvapi=false +endif + +$(eval $(meson-package)) diff --git a/package/gutenprint/0001-use-pregen-xmli18n-header.patch b/package/gutenprint/0001-use-pregen-xmli18n-header.patch new file mode 100644 index 00000000..533fe33d --- /dev/null +++ b/package/gutenprint/0001-use-pregen-xmli18n-header.patch @@ -0,0 +1,48 @@ +src/xml: use preg-gen xmli18n_tmp.h if specified + +Ideally, the programs needed at build-time should be built with +CC_FOR_BUILD, and not with CC_FOR_HOST. + +Unfortunately, this program wants to link against the gutenprint libs, +so we would also need to build them with CC_FOR_HOST, that is build them +twice, once for build, once for host. + +Instead, in the Buildroot context, we first build gutenprint for the build +system, use that to generate the incriminated header, and then re-use that +header to build the gutenprint for the host. + +It is not possible to have such constructs in Makefile.am: + ifeq ($(FOO),) + bar: bla + cat $< >$@ + else + bar: + echo $(FOO) >$@ + endif + +as autoreconf will yell loudly that there is an 'endif' without an 'if'. +Sigh... :-( + +Signed-off-by: "Yann E. MORIN" + +diff -durN gutenprint-5.2.9.orig/src/xml/Makefile.am gutenprint-5.2.9/src/xml/Makefile.am +--- gutenprint-5.2.9.orig/src/xml/Makefile.am 2011-03-30 02:43:24.000000000 +0200 ++++ gutenprint-5.2.9/src/xml/Makefile.am 2013-03-24 17:08:08.435918773 +0100 +@@ -52,10 +52,13 @@ + + + xmli18n-tmp.h: xml-stamp extract-strings +- -rm -f $@ $@.tmp +- ./extract-strings `cat xml-stamp | sed -e 's;^;$(srcdir)/;'` > $@.tmp +- mv $@.tmp $@ +- ++ if [ -z "$(BR2_USE_PREGEN_XMLI18N_TMP_H)" ]; then \ ++ rm -f $@ $@.tmp; \ ++ ./extract-strings `cat xml-stamp | sed -e 's;^;$(srcdir)/;'` > $@.tmp; \ ++ mv $@.tmp $@; \ ++ else \ ++ cp $(BR2_USE_PREGEN_XMLI18N_TMP_H) $@; \ ++ fi + + dist-hook: xmli18n-tmp.h xml-stamp + # xmli18n-tmp.h is needed by po/POTFILES.in at dist time diff --git a/package/gutenprint/0002-cups-support-replaces-static-with-static-libtool-lib.patch b/package/gutenprint/0002-cups-support-replaces-static-with-static-libtool-lib.patch new file mode 100644 index 00000000..d8cfb7d9 --- /dev/null +++ b/package/gutenprint/0002-cups-support-replaces-static-with-static-libtool-lib.patch @@ -0,0 +1,39 @@ +From 08a5d355160eb2ac8346ae1b94591418343217f9 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sun, 17 Aug 2014 23:43:20 +0200 +Subject: [PATCH 1/1] cups support: replaces -static with -static-libtool-libs + +gutenprint rely on the original behaviour of -static, but since commit +in buildroot "support/libtool: make -static behave like -all-static" [1], +the build of genppd is broken. + +genppd need to be build statically otherwise the following warning appears: +***WARNING: Use of --disable-static-genppd or --disable-static + when building CUPS is very dangerous. The build may + fail when building the PPD files, or may *SILENTLY* + build incorrect PPD files or cause other problems. + Please review the README and release notes carefully! + +[1] http://git.buildroot.net/buildroot/commit/?id=97703978ac870ce2b14ad144f8e082de82aa2c64 + +Signed-off-by: Romain Naour +--- + src/cups/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/cups/Makefile.am b/src/cups/Makefile.am +index 1e27ae0..d711b70 100644 +--- a/src/cups/Makefile.am ++++ b/src/cups/Makefile.am +@@ -84,7 +84,7 @@ noinst_SCRIPTS=test-rastertogutenprint + endif + + if BUILD_GENPPD_STATIC +-STATIC_LDOPTS=-static -export-dynamic ++STATIC_LDOPTS=-static-libtool-libs -export-dynamic + endif + + cups_calibrate_SOURCES = cups-calibrate.c +-- +1.9.3 + diff --git a/package/gutenprint/Config.in b/package/gutenprint/Config.in new file mode 100644 index 00000000..f93717c7 --- /dev/null +++ b/package/gutenprint/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_GUTENPRINT + bool "gutenprint" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_CUPS + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + Gutenprint, formerly named Gimp-Print, is a suite of printer + drivers that may be used with most common UNIX print spooling + systems, including CUPS, lpr, LPRng, or others + + http://gimp-print.sourceforge.net/ + +comment "gutenprint needs a toolchain w/ C++" + depends on BR2_PACKAGE_CUPS + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/gutenprint/gutenprint.hash b/package/gutenprint/gutenprint.hash new file mode 100644 index 00000000..81188849 --- /dev/null +++ b/package/gutenprint/gutenprint.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 45bf0766f196a764c113bfad7ab1ea748f1d5ff9ebb0d3a2206705fe52e82389 gutenprint-5.2.14.tar.bz2 +sha256 231f7edcc7352d7734a96eef0b8030f77982678c516876fcb81e25b32d68564c COPYING diff --git a/package/gutenprint/gutenprint.mk b/package/gutenprint/gutenprint.mk new file mode 100644 index 00000000..b0fcd5a5 --- /dev/null +++ b/package/gutenprint/gutenprint.mk @@ -0,0 +1,89 @@ +################################################################################ +# +# gutenprint +# +################################################################################ + +GUTENPRINT_VERSION_MAJOR = 5.2 +GUTENPRINT_VERSION = $(GUTENPRINT_VERSION_MAJOR).14 +GUTENPRINT_SITE = http://downloads.sourceforge.net/project/gimp-print/gutenprint-$(GUTENPRINT_VERSION_MAJOR)/$(GUTENPRINT_VERSION) +GUTENPRINT_SOURCE = gutenprint-$(GUTENPRINT_VERSION).tar.bz2 +GUTENPRINT_LICENSE = GPL-2.0+ +GUTENPRINT_LICENSE_FILES = COPYING +GUTENPRINT_CPE_ID_VENDOR = gutenprint_project + +# Needed, as we touch Makefile.am +GUTENPRINT_AUTORECONF = YES + +# Needed by autoreconf +define GUTENPRINT_CREATE_M4_DIR + mkdir -p $(@D)/m4local +endef +GUTENPRINT_POST_PATCH_HOOKS += GUTENPRINT_CREATE_M4_DIR +HOST_GUTENPRINT_POST_PATCH_HOOKS += GUTENPRINT_CREATE_M4_DIR + +GUTENPRINT_DEPENDENCIES = \ + cups host-pkgconf \ + $(if $(BR2_PACKAGE_LIBICONV),libiconv) \ + $(if $(BR2_PACKAGE_LIBUSB),libusb) + +# host-gutenprint is needed to generate XML as part of compilation +# the program that generates the xml also links against libgutenprint +# so we need to build both a host package and a target package +GUTENPRINT_DEPENDENCIES += host-gutenprint + +GUTENPRINT_CONF_ENV = \ + ac_cv_path_CUPS_CONFIG=$(STAGING_DIR)/usr/bin/cups-config \ + ac_cv_path_IJS_CONFIG="" + +GUTENPRINT_CONF_OPTS = \ + --disable-libgutenprintui2 \ + --disable-samples \ + --without-doc \ + --without-gimp2 \ + --disable-escputil \ + --disable-test \ + --disable-testpattern \ + --with-cups="/usr" \ + --with-sysroot="$(STAGING_DIR)" \ + --disable-cups-ppds + +# USE_PREGEN_XMLI18N_TMP_H is added by our patch +GUTENPRINT_MAKE_ENV = BR2_USE_PREGEN_XMLI18N_TMP_H=$(HOST_DIR)/include/xmli18n-tmp.h + +HOST_GUTENPRINT_DEPENDENCIES = host-pkgconf +# The host-gutenprint shall create the required header +HOST_GUTENPRINT_MAKE_ENV = + +# Even with --without-cups, gutenprint will still add the output of +# cups-config --cflags / --ldflags to it's compiler/linker flags if +# available on host. +# Notice: Because of the configure logic, it needs to be set to the +# empty string to to disable this, not just to /bin/false like elsewhere. +HOST_GUTENPRINT_CONF_ENV = ac_cv_path_CUPS_CONFIG='' + +HOST_GUTENPRINT_CONF_OPTS = \ + --disable-libgutenprintui2 \ + --disable-samples \ + --without-gimp2 \ + --without-doc \ + --without-foomatic \ + --without-foomatic3 \ + --disable-escputil \ + --disable-test \ + --disable-testpattern \ + --without-cups + +define HOST_GUTENPRINT_POST_BUILD_INSTAL_TMP_HEADER + cp $(@D)/src/xml/xmli18n-tmp.h $(HOST_DIR)/include +endef +HOST_GUTENPRINT_POST_BUILD_HOOKS += HOST_GUTENPRINT_POST_BUILD_INSTAL_TMP_HEADER + +define GUTENPRINT_POST_INSTALL_TARGET_FIXUP + mkdir -p $(TARGET_DIR)/usr/share/gutenprint/5.2 + cp -rf $(HOST_DIR)/share/gutenprint/5.2/xml $(TARGET_DIR)/usr/share/gutenprint/5.2 +endef +GUTENPRINT_POST_INSTALL_TARGET_HOOKS += GUTENPRINT_POST_INSTALL_TARGET_FIXUP + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/gvfs/0001-meson.build-fix-linking-with-libmetadata.patch b/package/gvfs/0001-meson.build-fix-linking-with-libmetadata.patch new file mode 100644 index 00000000..3ee4a28e --- /dev/null +++ b/package/gvfs/0001-meson.build-fix-linking-with-libmetadata.patch @@ -0,0 +1,78 @@ +From 731256d7517f0d9cf0b999bb22f864080d5e8690 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 18 Jul 2020 10:00:50 +0200 +Subject: [PATCH] meson.build: fix linking with libmetadata + +libmetadata is built as a static library and depends on libgvfscommon so +change the dependencies order to put libgvfscommon_dep after +libmetadata_dep or gvfsd-metadata will fail to link on: + +FAILED: metadata/gvfsd-metadata +/home/naourr/work/instance-3/output-1/host/bin/arm-none-linux-gnueabi-gcc -o metadata/gvfsd-metadata 'metadata/45447b7@@gvfsd-metadata@exe/meta-daemon.c.o' -Wl,--as-needed -Wl,--no-undefined -Wl,-O1 -Wl,--start-group common/libgvfscommon.so metadata/libmetadata.a /home/naourr/work/instance-3/output-1/host/arm-buildroot-linux-gnueabi/sysroot/usr/lib/libgio-2.0.so /home/naourr/work/instance-3/output-1/host/arm-buildroot-linux-gnueabi/sysroot/usr/lib/libgobject-2.0.so /home/naourr/work/instance-3/output-1/host/arm-buildroot-linux-gnueabi/sysroot/usr/lib/libglib-2.0.so -Wl,--end-group '-Wl,-rpath,$ORIGIN/../common:$ORIGIN/' -Wl,-rpath-link,/home/naourr/work/instance-3/output-1/build/gvfs-1.44.1/build/common -Wl,-rpath-link,/home/naourr/work/instance-3/output-1/build/gvfs-1.44.1/build/metadata +metadata/libmetadata.a(metatree.c.o): In function `safe_open': +metatree.c:(.text+0x9c8): undefined reference to `gvfs_randomize_string' +collect2: error: ld returned 1 exit status + +Apply this change in the whole source code and not only for +gvfsd-metadata to avoid any other build failures. + +Fixes: + - http://autobuild.buildroot.org/results//fa892c41b6b9285839a0164b000e37fb04dcc194 + +Signed-off-by: Fabrice Fontaine +[Upstream status: +https://gitlab.gnome.org/GNOME/gvfs/-/merge_requests/92] +--- + client/meson.build | 2 +- + metadata/meson.build | 5 +++-- + 2 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/client/meson.build b/client/meson.build +index 8f57d0d3..1d251481 100644 +--- a/client/meson.build ++++ b/client/meson.build +@@ -33,8 +33,8 @@ sources = uri_parser_sources + uri_utils + files( + + deps = [ + gio_unix_dep, +- libgvfscommon_dep, + libmetadata_dep, ++ libgvfscommon_dep, + ] + + cflags = [ +diff --git a/metadata/meson.build b/metadata/meson.build +index 4e120d18..5699e6f2 100644 +--- a/metadata/meson.build ++++ b/metadata/meson.build +@@ -72,8 +72,8 @@ libmetadata_dep = declare_dependency( + ) + + deps = [ +- libgvfscommon_dep, + libmetadata_dep, ++ libgvfscommon_dep, + ] + + if enable_gudev +@@ -105,8 +105,8 @@ if enable_devel_utils + app + '.c', + include_directories: top_inc, + dependencies: [ +- libgvfscommon_dep, + libmetadata_dep, ++ libgvfscommon_dep, + ], + c_args: cflags, + ) +@@ -119,6 +119,7 @@ if enable_devel_utils + include_directories: top_inc, + dependencies: [ + libmetadata_dep, ++ libgvfscommon_dep, + libxml_dep, + ], + c_args: cflags, +-- +2.27.0 + diff --git a/package/gvfs/Config.in b/package/gvfs/Config.in new file mode 100644 index 00000000..68ad2914 --- /dev/null +++ b/package/gvfs/Config.in @@ -0,0 +1,23 @@ +config BR2_PACKAGE_GVFS + bool "gvfs" + depends on BR2_USE_WCHAR # glib2 + depends on BR2_USE_MMU # dbus, glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # dbus, glib2 + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_GSETTINGS_DESKTOP_SCHEMAS + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_DBUS + select BR2_PACKAGE_SHARED_MIME_INFO + help + gvfs is a userspace virtual filesystem where mount runs as a + separate processes which you talk to via D-Bus. It also + contains a gio module that seamlessly adds gvfs support to + all applications using the gio API. It also supports exposing + the gvfs mounts to non-gio applications using fuse. + + https://wiki.gnome.org/action/show/Projects/gvfs + +comment "gvfs needs a toolchain w/ wchar, threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS diff --git a/package/gvfs/gvfs.hash b/package/gvfs/gvfs.hash new file mode 100644 index 00000000..2ee945e7 --- /dev/null +++ b/package/gvfs/gvfs.hash @@ -0,0 +1,5 @@ +# From http://ftp.gnome.org/pub/GNOME/sources/gvfs/1.44/gvfs-1.44.1.sha256sum +sha256 50ef3245d1b03666a40455109169a2a1bd51419fd2d51f9fa6cfd4f89f04fb46 gvfs-1.44.1.tar.xz + +# Hash for license file +sha256 45cf336e2e48176993babc5aabf44437390f40e6a86a472c6abfc7ce9c035db4 COPYING diff --git a/package/gvfs/gvfs.mk b/package/gvfs/gvfs.mk new file mode 100644 index 00000000..fc77e8e1 --- /dev/null +++ b/package/gvfs/gvfs.mk @@ -0,0 +1,171 @@ +################################################################################ +# +# gvfs +# +################################################################################ + +GVFS_VERSION_MAJOR = 1.44 +GVFS_VERSION = $(GVFS_VERSION_MAJOR).1 +GVFS_SOURCE = gvfs-$(GVFS_VERSION).tar.xz +GVFS_SITE = http://ftp.gnome.org/pub/GNOME/sources/gvfs/$(GVFS_VERSION_MAJOR) +GVFS_INSTALL_STAGING = YES +GVFS_DEPENDENCIES = \ + host-pkgconf \ + host-libglib2 \ + dbus \ + gsettings-desktop-schemas \ + libglib2 \ + shared-mime-info \ + $(TARGET_NLS_DEPENDENCIES) +GVFS_LICENSE = LGPL-2.0+ +GVFS_LICENSE_FILES = COPYING +GVFS_CPE_ID_VENDOR = gnome + +GVFS_LDFLAGS = $(TARGET_LDFLAGS) $(TARGET_NLS_LIBS) + +# Most of these are missing library support +GVFS_CONF_OPTS = \ + -Dafc=false \ + -Dgoa=false \ + -Dgoogle=false \ + -Dmtp=false \ + -Dsftp=false \ + -Dudisks2=false + +ifeq ($(BR2_PACKAGE_AVAHI),y) +GVFS_DEPENDENCIES += avahi +GVFS_CONF_OPTS += -Ddnssd=true +else +GVFS_CONF_OPTS += -Ddnssd=false +endif + +ifeq ($(BR2_PACKAGE_GCR),y) +GVFS_DEPENDENCIES += gcr +GVFS_CONF_OPTS += -Dgcr=true +else +GVFS_CONF_OPTS += -Dgcr=false +endif + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +GVFS_DEPENDENCIES += udev +endif + +ifeq ($(BR2_PACKAGE_LIBGUDEV),y) +GVFS_DEPENDENCIES += libgudev +GVFS_CONF_OPTS += -Dgudev=true +else +GVFS_CONF_OPTS += -Dgudev=false +endif + +ifeq ($(BR2_PACKAGE_LIBARCHIVE),y) +GVFS_DEPENDENCIES += libarchive +GVFS_CONF_OPTS += -Darchive=true +else +GVFS_CONF_OPTS += -Darchive=false +endif + +ifeq ($(BR2_PACKAGE_LIBBLURAY),y) +GVFS_DEPENDENCIES += libbluray +GVFS_CONF_OPTS += -Dbluray=true +else +GVFS_CONF_OPTS += -Dbluray=false +endif + +ifeq ($(BR2_PACKAGE_LIBCAP)$(BR2_PACKAGE_POLKIT),yy) +GVFS_DEPENDENCIES += libcap polkit +GVFS_CONF_OPTS += -Dadmin=true +else +GVFS_CONF_OPTS += -Dadmin=false +endif + +ifeq ($(BR2_PACKAGE_LIBCDIO_PARANOIA)$(BR2_PACKAGE_LIBGUDEV),yy) +GVFS_DEPENDENCIES += libcdio-paranoia libgudev +GVFS_CONF_OPTS += -Dcdda=true +else +GVFS_CONF_OPTS += -Dcdda=false +endif + +ifeq ($(BR2_PACKAGE_LIBFUSE3),y) +GVFS_DEPENDENCIES += libfuse3 +GVFS_CONF_OPTS += -Dfuse=true +else +GVFS_CONF_OPTS += -Dfuse=false +endif + +# AFP support is anon-only without libgcrypt which isn't very useful +ifeq ($(BR2_PACKAGE_LIBGCRYPT),y) +GVFS_CONF_OPTS += \ + -Dafp=true \ + -Dgcrypt=true +GVFS_DEPENDENCIES += libgcrypt +else +GVFS_CONF_OPTS += \ + -Dafp=false \ + -Dgcrypt=false +endif + +ifeq ($(BR2_PACKAGE_LIBGPHOTO2)$(BR2_PACKAGE_LIBGUDEV),yy) +GVFS_DEPENDENCIES += libgphoto2 libgudev +GVFS_CONF_OPTS += -Dgphoto2=true +else +GVFS_CONF_OPTS += -Dgphoto2=false +endif + +ifeq ($(BR2_PACKAGE_LIBNFS),y) +GVFS_CONF_OPTS += -Dnfs=true +GVFS_DEPENDENCIES += libnfs +else +GVFS_CONF_OPTS += -Dnfs=false +endif + +ifeq ($(BR2_PACKAGE_LIBSECRET),y) +GVFS_DEPENDENCIES += libsecret +GVFS_CONF_OPTS += -Dkeyring=true +else +GVFS_CONF_OPTS += -Dkeyring=false +endif + +ifeq ($(BR2_PACKAGE_LIBSOUP)$(BR2_PACKAGE_LIBXML2),yy) +GVFS_DEPENDENCIES += libsoup libxml2 +GVFS_CONF_OPTS += -Dhttp=true +else +GVFS_CONF_OPTS += -Dhttp=false +endif + +ifeq ($(BR2_PACKAGE_LIBUSB),y) +GVFS_DEPENDENCIES += libusb +GVFS_CONF_OPTS += -Dlibusb=true +else +GVFS_CONF_OPTS += -Dlibusb=false +endif + +ifeq ($(BR2_PACKAGE_SAMBA4),y) +GVFS_DEPENDENCIES += samba4 +GVFS_CONF_OPTS += -Dsmb=true +else +GVFS_CONF_OPTS += -Dsmb=false +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +GVFS_DEPENDENCIES += systemd +GVFS_CONF_OPTS += -Dlogind=true +else +GVFS_CONF_OPTS += \ + -Dlogind=false \ + -Dsystemduserunitdir=no \ + -Dtmpfilesdir=no +endif + +define GVFS_REMOVE_TARGET_SCHEMAS + rm $(TARGET_DIR)/usr/share/glib-2.0/schemas/*.xml +endef + +define GVFS_COMPILE_SCHEMAS + $(HOST_DIR)/bin/glib-compile-schemas --targetdir=$(TARGET_DIR)/usr/share/glib-2.0/schemas $(STAGING_DIR)/usr/share/glib-2.0/schemas +endef + +GVFS_POST_INSTALL_TARGET_HOOKS += \ + GVFS_REMOVE_TARGET_SCHEMAS \ + GVFS_COMPILE_SCHEMAS + +$(eval $(meson-package)) diff --git a/package/gzip/Config.in b/package/gzip/Config.in new file mode 100644 index 00000000..f2eac037 --- /dev/null +++ b/package/gzip/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_GZIP + bool "gzip" + depends on BR2_USE_WCHAR + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + Standard GNU compressor. Provides things like gzip, + gunzip, gzcat, etc... + + http://www.gnu.org/software/gzip/gzip.html + +comment "gzip needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS diff --git a/package/gzip/gzip.hash b/package/gzip/gzip.hash new file mode 100644 index 00000000..5675b3ed --- /dev/null +++ b/package/gzip/gzip.hash @@ -0,0 +1,6 @@ +# Locally calculated after checking pgp signature +# https://ftp.gnu.org/gnu/gzip/gzip-1.10.tar.xz.sig +# using key 155D3FC500C834486D1EEA677FD9FCCB000BEEEE +sha256 8425ccac99872d544d4310305f915f5ea81e04d0f437ef1a230dc9d1c819d7c0 gzip-1.10.tar.xz +# Locally calculated +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/gzip/gzip.mk b/package/gzip/gzip.mk new file mode 100644 index 00000000..c8fd3ddb --- /dev/null +++ b/package/gzip/gzip.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# gzip +# +################################################################################ + +GZIP_VERSION = 1.10 +GZIP_SOURCE = gzip-$(GZIP_VERSION).tar.xz +GZIP_SITE = $(BR2_GNU_MIRROR)/gzip +# Some other tools expect it to be in /bin +GZIP_CONF_OPTS = --exec-prefix=/ +GZIP_LICENSE = GPL-3.0+ +GZIP_LICENSE_FILES = COPYING +GZIP_CPE_ID_VENDOR = gnu +GZIP_CONF_ENV += gl_cv_func_fflush_stdin=yes +HOST_GZIP_CONF_ENV += gl_cv_func_fflush_stdin=yes +# configure substitutes $(SHELL) for the shell shebang in scripts like +# gzexe. Unfortunately, the same $(SHELL) variable will also be used by +# make to run its commands. Fortunately, /bin/sh is always a POSIX shell +# on both the target and host systems that we support. Even with this, +# the configure check is slightly broken and prints a bogus warning: +# "using /bin/sh, even though it may have file descriptor bugs" +GZIP_CONF_ENV += ac_cv_path_shell=/bin/sh + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/hackrf/0001-Don-t-require-a-C-compiler.patch b/package/hackrf/0001-Don-t-require-a-C-compiler.patch new file mode 100644 index 00000000..3369dca6 --- /dev/null +++ b/package/hackrf/0001-Don-t-require-a-C-compiler.patch @@ -0,0 +1,37 @@ +From 8b0a8b2be8cf2e4a76c03d3bcdf99bff5025ba22 Mon Sep 17 00:00:00 2001 +From: "Arnout Vandecappelle (Essensium/Mind)" +Date: Sat, 31 Mar 2018 22:50:37 +0200 +Subject: [PATCH] Don't require a C++ compiler + +By default, CMake assumes that the project is using both C and C++. By +explicitly passing 'C' as argument of the project() macro, we tell CMake +that only C is used, which prevents CMake from erroring out if a C++ +compiler doesn't exist. + +Upstream status: https://github.com/mossmann/hackrf/pull/469 + +This patch differs from upstream because: +- project name upstream has been changed into HackRF; +- in Buildroot, we are only interested in host, not firmware. + +Signed-off-by: Arnout Vandecappelle (Essensium/Mind) +--- + host/CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/host/CMakeLists.txt b/host/CMakeLists.txt +index 874163f..d9cbe31 100644 +--- a/host/CMakeLists.txt ++++ b/host/CMakeLists.txt +@@ -1,7 +1,7 @@ + #top dir cmake project for libhackrf + tools + + cmake_minimum_required(VERSION 2.8) +-project (hackrf_all) ++project (hackrf_all C) + + add_subdirectory(libhackrf) + add_subdirectory(hackrf-tools) +-- +2.16.3 + diff --git a/package/hackrf/Config.in b/package/hackrf/Config.in new file mode 100644 index 00000000..05d01adc --- /dev/null +++ b/package/hackrf/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_HACKRF + bool "hackrf" + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_FFTW + select BR2_PACKAGE_FFTW_SINGLE + select BR2_PACKAGE_LIBUSB + help + Library and tools for accessing HackRF SDR boards. + + https://github.com/mossmann/hackrf/tree/master/host + +comment "hackrf needs a toolchain w/ threads, dynamic library, gcc >= 4.9" + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/hackrf/hackrf.hash b/package/hackrf/hackrf.hash new file mode 100644 index 00000000..c0cf7322 --- /dev/null +++ b/package/hackrf/hackrf.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 a89badc09a1d2fa18367b3b2c974580ad5f6ce93aaa4e54557dc3d013c029d14 hackrf-2018.01.1.tar.xz +sha256 49b60a6288f90f49074228cc1fae0fb16871ba36b756013abdf7c2fc92f01fad COPYING diff --git a/package/hackrf/hackrf.mk b/package/hackrf/hackrf.mk new file mode 100644 index 00000000..b83f6518 --- /dev/null +++ b/package/hackrf/hackrf.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# hackrf +# +################################################################################ + +HACKRF_VERSION = 2018.01.1 +HACKRF_SITE = https://github.com/mossmann/hackrf/releases/download/v$(HACKRF_VERSION) +HACKRF_SOURCE = hackrf-$(HACKRF_VERSION).tar.xz +HACKRF_LICENSE = GPL-2.0+ BSD-3c +HACKRF_LICENSE_FILES = COPYING +HACKRF_DEPENDENCIES = fftw-single libusb +HACKRF_SUBDIR = host +HACKRF_INSTALL_STAGING = YES + +HACKRF_CONF_OPTS += -DBUILD_HACKRF_TOOLS=ON + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +HACKRF_CONF_OPTS += \ + -DINSTALL_UDEV_RULES=ON \ + -DUDEV_RULES_GROUP=plugdev +else +HACKRF_CONF_OPTS += -DINSTALL_UDEV_RULES=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/hans/Config.in b/package/hans/Config.in new file mode 100644 index 00000000..54bdfd96 --- /dev/null +++ b/package/hans/Config.in @@ -0,0 +1,14 @@ +comment "hans needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + +config BR2_PACKAGE_HANS + bool "hans" + depends on BR2_INSTALL_LIBSTDCPP + help + Hans makes it possible to tunnel IPv4 through ICMP echo + packets, so you could call it a ping tunnel. + This can be useful when you find yourself in the situation + that your Internet access is firewalled, but pings are + allowed. + + http://code.gerade.org/hans/ diff --git a/package/hans/hans.hash b/package/hans/hans.hash new file mode 100644 index 00000000..fe46ab58 --- /dev/null +++ b/package/hans/hans.hash @@ -0,0 +1,6 @@ +# From http://sourceforge.net/projects/hanstunnel/files/source/ +md5 8628393ec1b61a6c3a47a0a3dcb455b3 hans-1.0.tar.gz +sha1 0bc857df109af222732cb95c861a0f0a6dd53dee hans-1.0.tar.gz +# Locally computed +sha256 f8f70cf22ba14d9223695c9e9a2d75289d8360f61f533b83ee538836f29a458e hans-1.0.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE diff --git a/package/hans/hans.mk b/package/hans/hans.mk new file mode 100644 index 00000000..e26c2f37 --- /dev/null +++ b/package/hans/hans.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# hans +# +################################################################################ + +HANS_VERSION = 1.0 +HANS_SITE = http://downloads.sourceforge.net/project/hanstunnel/source +HANS_LICENSE = GPL-3.0+ +HANS_LICENSE_FILES = LICENSE + +define HANS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) GCC="$(TARGET_CC)" GPP="$(TARGET_CXX)" -C $(@D) +endef + +define HANS_INSTALL_TARGET_CMDS + $(INSTALL) -m 755 -D $(@D)/hans $(TARGET_DIR)/usr/sbin/hans +endef + +$(eval $(generic-package)) diff --git a/package/haproxy/Config.in b/package/haproxy/Config.in new file mode 100644 index 00000000..b348eb9d --- /dev/null +++ b/package/haproxy/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_HAPROXY_ARCH_SUPPORTS + bool + default y + # src/proto_http.c:6330:1: internal compiler error: Segmentation fault + depends on !BR2_nios2 + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60040 + depends on !(BR2_sh4 && !BR2_TOOLCHAIN_GCC_AT_LEAST_7) + +config BR2_PACKAGE_HAPROXY + bool "haproxy" + depends on BR2_PACKAGE_HAPROXY_ARCH_SUPPORTS + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_SYNC_1 && BR2_TOOLCHAIN_HAS_SYNC_4 + help + HAProxy is a free, very fast and reliable solution offering + high availability, load balancing, and proxying for TCP and + HTTP-based applications. + + http://www.haproxy.org diff --git a/package/haproxy/haproxy.hash b/package/haproxy/haproxy.hash new file mode 100644 index 00000000..66a6f40b --- /dev/null +++ b/package/haproxy/haproxy.hash @@ -0,0 +1,6 @@ +# From: http://www.haproxy.org/download/2.2/src/haproxy-2.2.14.tar.gz.sha256 +sha256 6a9b702f04b07786f3e5878de8172a727acfdfdbc1cefe1c7a438df372f2fb61 haproxy-2.2.14.tar.gz +# Locally computed: +sha256 0717ca51fceaa25ac9e5ccc62e0c727dcf27796057201fb5fded56a25ff6ca28 LICENSE +sha256 5df07007198989c622f5d41de8d703e7bef3d0e79d62e24332ee739a452af62a doc/lgpl.txt +sha256 ddb9db7630752f8fdc6898f7c99a99eaeeac5213627ecb093df9c82f56175dc7 doc/gpl.txt diff --git a/package/haproxy/haproxy.mk b/package/haproxy/haproxy.mk new file mode 100644 index 00000000..6254819a --- /dev/null +++ b/package/haproxy/haproxy.mk @@ -0,0 +1,93 @@ +################################################################################ +# +# haproxy +# +################################################################################ + +HAPROXY_VERSION_MAJOR = 2.2 +HAPROXY_VERSION = $(HAPROXY_VERSION_MAJOR).14 +HAPROXY_SITE = http://www.haproxy.org/download/$(HAPROXY_VERSION_MAJOR)/src +HAPROXY_LICENSE = GPL-2.0+ and LGPL-2.1+ with exceptions +HAPROXY_LICENSE_FILES = LICENSE doc/lgpl.txt doc/gpl.txt +HAPROXY_CPE_ID_VENDOR = haproxy + +HAPROXY_MAKE_OPTS = \ + LD=$(TARGET_CC) \ + PREFIX=/usr \ + TARGET=custom + +ifeq ($(BR2_STATIC_LIBS),) +HAPROXY_MAKE_OPTS += USE_DL=1 +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +HAPROXY_LIBS += -latomic +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS_NPTL),y) +# threads uses atomics on gcc >= 4.7 and sync otherwise (see +# include/common/hathreads.h) +ifeq ($(BR2_TOOLCHAIN_GCC_AT_LEAST_4_7):$(BR2_TOOLCHAIN_HAS_ATOMIC),y:y) +HAPROXY_MAKE_OPTS += USE_THREAD=1 +else ifeq ($(BR2_TOOLCHAIN_GCC_AT_LEAST_4_7):$(BR2_TOOLCHAIN_HAS_SYNC_4),:y) +HAPROXY_MAKE_OPTS += USE_THREAD=1 +endif +endif + +ifeq ($(BR2_PACKAGE_LUA_5_3),y) +HAPROXY_DEPENDENCIES += lua +HAPROXY_MAKE_OPTS += \ + LUA_LIB_NAME=lua \ + USE_LUA=1 +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +HAPROXY_DEPENDENCIES += openssl +HAPROXY_MAKE_OPTS += USE_OPENSSL=1 +ifeq ($(BR2_STATIC_LIBS),y) +HAPROXY_LIBS += -lz +endif +endif + +# pcre and pcre2 can't be enabled at the same time so prefer pcre2 +ifeq ($(BR2_PACKAGE_PCRE2),y) +HAPROXY_DEPENDENCIES += pcre2 +HAPROXY_MAKE_OPTS += \ + PCRE2_CONFIG=$(STAGING_DIR)/usr/bin/pcre2-config \ + USE_PCRE2=1 +else ifeq ($(BR2_PACKAGE_PCRE),y) +HAPROXY_DEPENDENCIES += pcre +HAPROXY_MAKE_OPTS += \ + PCRE_CONFIG=$(STAGING_DIR)/usr/bin/pcre-config \ + USE_PCRE=1 +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +HAPROXY_DEPENDENCIES += systemd +HAPROXY_MAKE_OPTS += USE_SYSTEMD=1 +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +HAPROXY_DEPENDENCIES += zlib +HAPROXY_MAKE_OPTS += USE_ZLIB=1 +endif + +HAPROXY_MAKE_OPTS += ADDLIB="$(HAPROXY_LIBS)" + +HAPROXY_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_90620),y) +HAPROXY_CFLAGS += -O0 +endif + +define HAPROXY_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) \ + $(HAPROXY_MAKE_OPTS) CFLAGS="$(HAPROXY_CFLAGS)" -C $(@D) +endef + +define HAPROXY_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) \ + $(HAPROXY_MAKE_OPTS) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/harfbuzz/0001-meson.build-check-for-pthread.h.patch b/package/harfbuzz/0001-meson.build-check-for-pthread.h.patch new file mode 100644 index 00000000..6d7225cb --- /dev/null +++ b/package/harfbuzz/0001-meson.build-check-for-pthread.h.patch @@ -0,0 +1,49 @@ +From 96bbf3a3af45d86f790afdf91a6686c37421e92b Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 15 Nov 2020 10:57:37 +0100 +Subject: [PATCH] meson.build: check for pthread.h + +Check for pthread.h otherwise the build will fail with some toolchains +that have libphtread.so but not pthread.h: + +Run-time dependency threads found: YES + +../src/hb-mutex.hh:53:10: fatal error: pthread.h: No such file or directory + #include + ^~~~~~~~~~~ + +Moreover, fix detection of pthread fallback + +Fixes: + - http://autobuild.buildroot.org/results/70c98e89b1d5e5b651d1f6928dc53f465103f57a + +Signed-off-by: Fabrice Fontaine +--- + meson.build | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/meson.build b/meson.build +index bf3925db..6d263d48 100644 +--- a/meson.build ++++ b/meson.build +@@ -281,13 +281,15 @@ endif + # threads + thread_dep = null_dep + if host_machine.system() != 'windows' +- thread_dep = dependency('threads', required: false) ++ if cpp.has_header('pthread.h') ++ thread_dep = dependency('threads', required: false) ++ endif + + if thread_dep.found() + conf.set('HAVE_PTHREAD', 1) + else + check_headers += ['sched.h'] +- check_funcs += ['sched_yield', {'link_with': 'rt'}] ++ check_funcs += [['sched_yield', {'link_with': 'rt'}]] + endif + endif + +-- +2.29.2 + diff --git a/package/harfbuzz/Config.in b/package/harfbuzz/Config.in new file mode 100644 index 00000000..8bc88f42 --- /dev/null +++ b/package/harfbuzz/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_HARFBUZZ + bool "harfbuzz" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + help + HarfBuzz is an OpenType text shaping engine + + https://harfbuzz.github.io/ + + Harfbuzz can make optional use of cairo, freetype, + glib2 and icu packages if they are selected. + +comment "harfbuzz needs a toolchain w/ C++, gcc >= 4.8" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 diff --git a/package/harfbuzz/harfbuzz.hash b/package/harfbuzz/harfbuzz.hash new file mode 100644 index 00000000..98b137c8 --- /dev/null +++ b/package/harfbuzz/harfbuzz.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 6ad11d653347bd25d8317589df4e431a2de372c0cf9be3543368e07ec23bb8e7 harfbuzz-2.7.4.tar.xz +sha256 beb3f017ceb41387667f78237a7cecf84defa0ed257c505894663d6a9f13211b COPYING diff --git a/package/harfbuzz/harfbuzz.mk b/package/harfbuzz/harfbuzz.mk new file mode 100644 index 00000000..f1ef7ee9 --- /dev/null +++ b/package/harfbuzz/harfbuzz.mk @@ -0,0 +1,96 @@ +################################################################################ +# +# harfbuzz +# +################################################################################ + +HARFBUZZ_VERSION = 2.7.4 +HARFBUZZ_SITE = https://github.com/harfbuzz/harfbuzz/releases/download/$(HARFBUZZ_VERSION) +HARFBUZZ_SOURCE = harfbuzz-$(HARFBUZZ_VERSION).tar.xz +HARFBUZZ_LICENSE = MIT, ISC (ucdn library) +HARFBUZZ_LICENSE_FILES = COPYING +HARFBUZZ_CPE_ID_VENDOR = harfbuzz_project +HARFBUZZ_INSTALL_STAGING = YES +HARFBUZZ_CONF_OPTS = \ + -Dfontconfig=disabled \ + -Dgdi=disabled \ + -Ddirectwrite=disabled \ + -Dcoretext=disabled \ + -Dtests=disabled \ + -Ddocs=disabled \ + -Dbenchmark=disabled \ + -Dicu_builtin=false \ + -Dexperimental_api=false \ + -Dfuzzer_ldflags="" + +# freetype & glib2 support required by host-pango +HOST_HARFBUZZ_DEPENDENCIES = \ + host-freetype \ + host-libglib2 +HOST_HARFBUZZ_CONF_OPTS = \ + -Dglib=enabled \ + -Dgobject=disabled \ + -Dcairo=disabled \ + -Dfontconfig=disabled \ + -Dicu=disabled \ + -Dgraphite=disabled \ + -Dfreetype=enabled \ + -Dgdi=disabled \ + -Ddirectwrite=disabled \ + -Dcoretext=disabled \ + -Dtests=disabled \ + -Dintrospection=disabled \ + -Ddocs=disabled \ + -Dbenchmark=disabled \ + -Dicu_builtin=false \ + -Dexperimental_api=false \ + -Dfuzzer_ldflags="" + +ifeq ($(BR2_PACKAGE_CAIRO),y) +HARFBUZZ_DEPENDENCIES += cairo +HARFBUZZ_CONF_OPTS += -Dcairo=enabled +else +HARFBUZZ_CONF_OPTS += -Dcairo=disabled +endif + +ifeq ($(BR2_PACKAGE_FREETYPE),y) +HARFBUZZ_DEPENDENCIES += freetype +HARFBUZZ_CONF_OPTS += -Dfreetype=enabled +else +HARFBUZZ_CONF_OPTS += -Dfreetype=disabled +endif + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +HARFBUZZ_DEPENDENCIES += gobject-introspection +HARFBUZZ_CONF_OPTS += \ + -Dgobject=enabled \ + -Dintrospection=enabled +else +HARFBUZZ_CONF_OPTS += \ + -Dgobject=disabled \ + -Dintrospection=disabled +endif + +ifeq ($(BR2_PACKAGE_GRAPHITE2),y) +HARFBUZZ_DEPENDENCIES += graphite2 +HARFBUZZ_CONF_OPTS += -Dgraphite=enabled +else +HARFBUZZ_CONF_OPTS += -Dgraphite=disabled +endif + +ifeq ($(BR2_PACKAGE_LIBGLIB2),y) +HARFBUZZ_DEPENDENCIES += libglib2 +HARFBUZZ_CONF_OPTS += -Dglib=enabled +else +HARFBUZZ_CONF_OPTS += -Dglib=disabled +endif + +ifeq ($(BR2_PACKAGE_ICU),y) +HARFBUZZ_DEPENDENCIES += icu +HARFBUZZ_CONF_OPTS += -Dicu=enabled +else +HARFBUZZ_CONF_OPTS += -Dicu=disabled +endif + +$(eval $(meson-package)) +$(eval $(host-meson-package)) diff --git a/package/haserl/0001-add-haserl_lualib.inc.patch b/package/haserl/0001-add-haserl_lualib.inc.patch new file mode 100644 index 00000000..f9e2a95e --- /dev/null +++ b/package/haserl/0001-add-haserl_lualib.inc.patch @@ -0,0 +1,149 @@ +[HACK] add preprocessed lualib file so host-lua isn't needed + +Haserl no longer ships with haserl_lualib.inc, causing lua2c (which needs +host-lua support) to be built to generate it. + +Re-add .inc file from 0.9.33 so we don't need host-lua. + +Signed-off-by: Peter Korsgaard +Signed-off-by: Max Filippov +--- + src/Makefile.in | 3 - + src/haserl_lualib.inc | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 98 insertions(+), 2 deletions(-) + +Index: haserl-0.9.33/src/haserl_lualib.inc +=================================================================== +--- /dev/null ++++ haserl-0.9.33/src/haserl_lualib.inc +@@ -0,0 +1,109 @@ ++/* This file was automatically generated from haserl_lualib.lua. DO NOT EDIT */ ++ ++static const unsigned char haserl_lualib[] = { ++ 27, 76,117, 97, 81, 0, 1, 4, 8, 4, 8, 0, 19, 0, 0, 0, ++ 0, 0, 0, 0, 64,104, 97,115,101,114,108, 95,108,117, 97,108, ++ 105, 98, 46,108,117, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 2, 7, 24, 0, 0, 0, 10, 0, 0, 0, 74, 0, 0, 0,138, ++ 0, 0, 0,202, 0, 0, 0, 10, 1, 0, 0, 74, 1, 0, 0,138, ++ 1, 0, 0,135,129, 1, 0, 71, 65, 1, 0, 7, 1, 1, 0,199, ++ 192, 0, 0,135,128, 0, 0, 71, 64, 0, 0, 7, 0, 0, 0, 5, ++ 0, 0, 0,100, 0, 0, 0, 9, 64,128,131, 5, 0, 0, 0,100, ++ 64, 0, 0, 9, 64, 0,132, 5, 0, 0, 0,100,128, 0, 0, 9, ++ 64,128,132, 30, 0,128, 0, 10, 0, 0, 0, 4, 7, 0, 0, 0, ++ 0, 0, 0, 0,104, 97,115,101,114,108, 0, 4, 5, 0, 0, 0, ++ 0, 0, 0, 0, 70, 79, 82, 77, 0, 4, 4, 0, 0, 0, 0, 0, ++ 0, 0, 69, 78, 86, 0, 4, 7, 0, 0, 0, 0, 0, 0, 0, 67, ++ 79, 79, 75, 73, 69, 0, 4, 7, 0, 0, 0, 0, 0, 0, 0, 72, ++ 65, 83, 69, 82, 76, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 71, ++ 69, 84, 0, 4, 5, 0, 0, 0, 0, 0, 0, 0, 80, 79, 83, 84, ++ 0, 4, 9, 0, 0, 0, 0, 0, 0, 0,115,101,116,102,105,101, ++ 108,100, 0, 4, 9, 0, 0, 0, 0, 0, 0, 0,103,101,116,102, ++ 105,101,108,100, 0, 4, 9, 0, 0, 0, 0, 0, 0, 0,109,121, ++ 112,117,116,101,110,118, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 25, 0, 0, 0, 39, 0, 0, 0, 0, 2, 0, 10, 29, ++ 0, 0, 0,133, 0, 0, 0,197, 64, 0, 0,198,128,192, 1, 0, ++ 1, 0, 0, 65,193, 0, 0,220, 0,129, 1, 22,128, 4,128, 5, ++ 2, 1, 0, 64, 2, 0, 3, 28,130, 0, 1, 26, 2, 0, 0, 22, ++ 192, 0,128, 5, 2, 1, 0, 64, 2, 0, 3, 28,130, 0, 1,128, ++ 1, 0, 4, 23, 64,193, 3, 22,128, 1,128, 6,130, 1, 1, 26, ++ 66, 0, 0, 22, 0, 0,128, 10, 2, 0, 0,137, 0, 2, 3,134, ++ 128, 1, 1, 22, 0, 0,128,137, 64, 0, 3,225,128, 0, 0, 22, ++ 128,250,127, 30, 0,128, 0, 6, 0, 0, 0, 4, 3, 0, 0, 0, ++ 0, 0, 0, 0, 95, 71, 0, 4, 7, 0, 0, 0, 0, 0, 0, 0, ++ 115,116,114,105,110,103, 0, 4, 7, 0, 0, 0, 0, 0, 0, 0, ++ 103,109, 97,116, 99,104, 0, 4, 15, 0, 0, 0, 0, 0, 0, 0, ++ 40, 91, 37,119, 95, 37, 45, 93, 43, 41, 40, 46, 63, 41, 0, 4, ++ 9, 0, 0, 0, 0, 0, 0, 0,116,111,110,117,109, 98,101,114, ++ 0, 4, 2, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, ++ 29, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 28, 0, 0, 0, ++ 28, 0, 0, 0, 28, 0, 0, 0, 28, 0, 0, 0, 28, 0, 0, 0, ++ 29, 0, 0, 0, 29, 0, 0, 0, 29, 0, 0, 0, 29, 0, 0, 0, ++ 29, 0, 0, 0, 30, 0, 0, 0, 30, 0, 0, 0, 30, 0, 0, 0, ++ 30, 0, 0, 0, 32, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, ++ 33, 0, 0, 0, 33, 0, 0, 0, 33, 0, 0, 0, 33, 0, 0, 0, ++ 34, 0, 0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 28, 0, 0, 0, ++ 37, 0, 0, 0, 39, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, ++ 0, 0, 0, 0,102, 0, 0, 0, 0, 0, 28, 0, 0, 0, 2, 0, ++ 0, 0, 0, 0, 0, 0,118, 0, 0, 0, 0, 0, 28, 0, 0, 0, ++ 2, 0, 0, 0, 0, 0, 0, 0,116, 0, 1, 0, 0, 0, 28, 0, ++ 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 40,102,111,114, 32,103, ++ 101,110,101,114, 97,116,111,114, 41, 0, 6, 0, 0, 0, 28, 0, ++ 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 40,102,111,114, 32,115, ++ 116, 97,116,101, 41, 0, 6, 0, 0, 0, 28, 0, 0, 0, 14, 0, ++ 0, 0, 0, 0, 0, 0, 40,102,111,114, 32, 99,111,110,116,114, ++ 111,108, 41, 0, 6, 0, 0, 0, 28, 0, 0, 0, 2, 0, 0, 0, ++ 0, 0, 0, 0,119, 0, 7, 0, 0, 0, 26, 0, 0, 0, 2, 0, ++ 0, 0, 0, 0, 0, 0,100, 0, 7, 0, 0, 0, 26, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, ++ 47, 0, 0, 0, 0, 1, 0, 8, 12, 0, 0, 0, 69, 0, 0, 0, ++ 133, 64, 0, 0,134,128, 64, 1,192, 0, 0, 0, 1,193, 0, 0, ++ 156, 0,129, 1, 22, 0, 0,128, 70, 64,129, 0,161, 64, 0, 0, ++ 22, 0,255,127, 94, 0, 0, 1, 30, 0,128, 0, 4, 0, 0, 0, ++ 4, 3, 0, 0, 0, 0, 0, 0, 0, 95, 71, 0, 4, 7, 0, 0, ++ 0, 0, 0, 0, 0,115,116,114,105,110,103, 0, 4, 7, 0, 0, ++ 0, 0, 0, 0, 0,103,109, 97,116, 99,104, 0, 4, 7, 0, 0, ++ 0, 0, 0, 0, 0, 91, 37,119, 95, 93, 43, 0, 0, 0, 0, 0, ++ 12, 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 43, 0, 0, 0, ++ 43, 0, 0, 0, 43, 0, 0, 0, 43, 0, 0, 0, 43, 0, 0, 0, ++ 44, 0, 0, 0, 43, 0, 0, 0, 44, 0, 0, 0, 46, 0, 0, 0, ++ 47, 0, 0, 0, 6, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, ++ 102, 0, 0, 0, 0, 0, 11, 0, 0, 0, 2, 0, 0, 0, 0, 0, ++ 0, 0,118, 0, 1, 0, 0, 0, 11, 0, 0, 0, 16, 0, 0, 0, ++ 0, 0, 0, 0, 40,102,111,114, 32,103,101,110,101,114, 97,116, ++ 111,114, 41, 0, 6, 0, 0, 0, 10, 0, 0, 0, 12, 0, 0, 0, ++ 0, 0, 0, 0, 40,102,111,114, 32,115,116, 97,116,101, 41, 0, ++ 6, 0, 0, 0, 10, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, ++ 40,102,111,114, 32, 99,111,110,116,114,111,108, 41, 0, 6, 0, ++ 0, 0, 10, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,119, 0, ++ 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 49, 0, 0, 0, 55, 0, 0, 0, 0, 2, 0, 6, ++ 20, 0, 0, 0,133, 0, 0, 0,134, 64, 64, 1,192, 0, 0, 0, ++ 1,129, 0, 0, 65,193, 0, 0,156,128, 0, 2, 0, 0, 0, 1, ++ 133, 0, 0, 0,134, 64, 64, 1,192, 0, 0, 0, 1, 1, 1, 0, ++ 65,193, 0, 0,156,128, 0, 2, 0, 0, 0, 1,133, 64, 1, 0, ++ 134,128, 65, 1,192, 0, 0, 0, 0, 1,128, 0,156, 64,128, 1, ++ 30, 0,128, 0, 7, 0, 0, 0, 4, 7, 0, 0, 0, 0, 0, 0, ++ 0,115,116,114,105,110,103, 0, 4, 5, 0, 0, 0, 0, 0, 0, ++ 0,103,115,117, 98, 0, 4, 7, 0, 0, 0, 0, 0, 0, 0, 91, ++ 92, 93, 92, 91, 93, 0, 4, 2, 0, 0, 0, 0, 0, 0, 0, 46, ++ 0, 4, 6, 0, 0, 0, 0, 0, 0, 0, 91, 92, 46, 93, 43, 0, ++ 4, 7, 0, 0, 0, 0, 0, 0, 0,104, 97,115,101,114,108, 0, ++ 4, 9, 0, 0, 0, 0, 0, 0, 0,115,101,116,102,105,101,108, ++ 100, 0, 0, 0, 0, 0, 20, 0, 0, 0, 51, 0, 0, 0, 51, 0, ++ 0, 0, 51, 0, 0, 0, 51, 0, 0, 0, 51, 0, 0, 0, 51, 0, ++ 0, 0, 51, 0, 0, 0, 52, 0, 0, 0, 52, 0, 0, 0, 52, 0, ++ 0, 0, 52, 0, 0, 0, 52, 0, 0, 0, 52, 0, 0, 0, 52, 0, ++ 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, ++ 0, 0, 54, 0, 0, 0, 55, 0, 0, 0, 2, 0, 0, 0, 4, 0, ++ 0, 0, 0, 0, 0, 0,107,101,121, 0, 0, 0, 0, 0, 19, 0, ++ 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,118, 97,108,117,101, 0, ++ 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, ++ 23, 0, 0, 0, 23, 0, 0, 0, 23, 0, 0, 0, 23, 0, 0, 0, ++ 23, 0, 0, 0, 23, 0, 0, 0, 23, 0, 0, 0, 23, 0, 0, 0, ++ 23, 0, 0, 0, 23, 0, 0, 0, 23, 0, 0, 0, 23, 0, 0, 0, ++ 23, 0, 0, 0, 23, 0, 0, 0, 25, 0, 0, 0, 39, 0, 0, 0, ++ 25, 0, 0, 0, 41, 0, 0, 0, 47, 0, 0, 0, 41, 0, 0, 0, ++ 49, 0, 0, 0, 55, 0, 0, 0, 49, 0, 0, 0, 55, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, ++}; +Index: haserl-0.9.29/src/Makefile.in +=================================================================== +--- haserl-0.9.29.orig/src/Makefile.in ++++ haserl-0.9.29/src/Makefile.in +@@ -32,7 +32,6 @@ + NORMAL_UNINSTALL = : + PRE_UNINSTALL = : + POST_UNINSTALL = : +-@USE_LUA_TRUE@noinst_PROGRAMS = lua2c$(EXEEXT) + @INCLUDE_LUASHELL_TRUE@@USE_LUA_TRUE@am__append_1 = h_lua.c h_lua.h + @INCLUDE_LUACSHELL_TRUE@@USE_LUA_TRUE@am__append_2 = h_luac.c h_luac.h + bin_PROGRAMS = haserl$(EXEEXT) +@@ -515,7 +514,7 @@ + @USE_LUA_TRUE@ $(CC_FOR_BUILD) $(CFLAGS) $(LDFLAGS) $(lua2c_LDFLAGS) \ + @USE_LUA_TRUE@ -o $@ $^ $(LIBS) + +-@USE_LUA_TRUE@haserl_lualib.inc : haserl_lualib.lua lua2c ++@USE_LUA_TRUE@haserl_lualib.inc : + @USE_LUA_TRUE@ if ! ./lua2c haserl_lualib haserl_lualib.lua >$@; then \ + @USE_LUA_TRUE@ rm $@; \ + @USE_LUA_TRUE@ exit 1 ;\ diff --git a/package/haserl/Config.in b/package/haserl/Config.in new file mode 100644 index 00000000..9ccc392d --- /dev/null +++ b/package/haserl/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_HASERL + bool "haserl" + depends on BR2_USE_MMU # fork() + help + Haserl is a small cgi wrapper that enables shell scripts to be + embedded into html documents. It is intended for environments + where something like PHP is too big. + + http://haserl.sourceforge.net/ + +config BR2_PACKAGE_HASERL_WITH_LUA + bool "Lua support" + depends on BR2_PACKAGE_HASERL + depends on BR2_PACKAGE_LUA + help + Enable Lua support for haserl diff --git a/package/haserl/haserl.hash b/package/haserl/haserl.hash new file mode 100644 index 00000000..c66b54a0 --- /dev/null +++ b/package/haserl/haserl.hash @@ -0,0 +1,5 @@ +# From http://sourceforge.net/projects/haserl/files/haserl-devel/ +md5 b94cd201a82b410b7f93fe3a31416cff haserl-0.9.36.tar.gz +sha1 a6244b496f06e1fea70581cb02c04bc1f0ffcbc3 haserl-0.9.36.tar.gz +# Locally computed +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/haserl/haserl.mk b/package/haserl/haserl.mk new file mode 100644 index 00000000..22950f4d --- /dev/null +++ b/package/haserl/haserl.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# haserl +# +################################################################################ + +HASERL_VERSION = 0.9.36 +HASERL_SITE = http://downloads.sourceforge.net/project/haserl/haserl-devel +HASERL_LICENSE = GPL-2.0 +HASERL_LICENSE_FILES = COPYING +HASERL_CPE_ID_VENDOR = haserl_project +HASERL_DEPENDENCIES = host-pkgconf + +ifeq ($(BR2_PACKAGE_HASERL_WITH_LUA),y) +HASERL_CONF_OPTS += --with-lua +HASERL_DEPENDENCIES += lua + +# liblua uses dlopen when dynamically linked +ifneq ($(BR2_STATIC_LIBS),y) +HASERL_CONF_ENV += LIBS="-ldl" +endif + +else +HASERL_CONF_OPTS += --without-lua +endif + +define HASERL_REMOVE_EXAMPLES + rm -rf $(TARGET_DIR)/usr/share/haserl +endef + +HASERL_POST_INSTALL_TARGET_HOOKS += HASERL_REMOVE_EXAMPLES + +$(eval $(autotools-package)) diff --git a/package/haveged/Config.in b/package/haveged/Config.in new file mode 100644 index 00000000..0e49a2db --- /dev/null +++ b/package/haveged/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_HAVEGED + bool "haveged" + depends on BR2_USE_MMU # fork() + help + The haveged project is an attempt to provide an easy-to-use, + unpredictable random number generator based upon an adaptation + of the HAVEGE algorithm. + + http://www.issihosts.com/haveged/ diff --git a/package/haveged/S21haveged b/package/haveged/S21haveged new file mode 100644 index 00000000..4b6e6ced --- /dev/null +++ b/package/haveged/S21haveged @@ -0,0 +1,23 @@ +#!/bin/sh + +case "$1" in + start) + printf "Starting haveged: " + start-stop-daemon -S -x /usr/sbin/haveged -- -w 1024 -r 0 + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + stop) + printf "Stopping haveged: " + start-stop-daemon -K -x /usr/sbin/haveged + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + restart|reload) + $0 stop + $0 start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit 0 diff --git a/package/haveged/haveged.hash b/package/haveged/haveged.hash new file mode 100644 index 00000000..df8c48e2 --- /dev/null +++ b/package/haveged/haveged.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 d17bd22fa1745daca5ac72e014ed3b0fe5720da4c115953124b1bf2a0aa2b04b haveged-1.9.13.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/haveged/haveged.mk b/package/haveged/haveged.mk new file mode 100644 index 00000000..3980f801 --- /dev/null +++ b/package/haveged/haveged.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# haveged +# +################################################################################ + +HAVEGED_VERSION = 1.9.13 +HAVEGED_SITE = $(call github,jirka-h,haveged,v$(HAVEGED_VERSION)) +HAVEGED_LICENSE = GPL-3.0+ +HAVEGED_LICENSE_FILES = COPYING +HAVEGED_SELINUX_MODULES = entropyd + +ifeq ($(BR2_sparc_v8)$(BR2_sparc_leon3),y) +HAVEGED_CONF_OPTS += --enable-clock_gettime=yes +endif + +define HAVEGED_INSTALL_INIT_SYSV + $(INSTALL) -m 755 -D package/haveged/S21haveged \ + $(TARGET_DIR)/etc/init.d/S21haveged +endef + +define HAVEGED_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/haveged/haveged.service \ + $(TARGET_DIR)/usr/lib/systemd/system/haveged.service +endef + +$(eval $(autotools-package)) diff --git a/package/haveged/haveged.service b/package/haveged/haveged.service new file mode 100644 index 00000000..5a2336b0 --- /dev/null +++ b/package/haveged/haveged.service @@ -0,0 +1,22 @@ +[Unit] +# inspiration from upstream init.d/service.fedora +Description=Entropy Daemon based on the HAVEGE algorithm +Documentation=man:haveged(8) http://www.issihosts.com/haveged/ +DefaultDependencies=no +# This would wait for filesystems, but we only need /dev/random, which +# is certainly available after systemd initialised +# After=systemd-tmpfiles-setup-dev.service +Before=sysinit.target shutdown.target systemd-journald.service + +[Service] +ExecStart=/usr/sbin/haveged -w 1024 -v 1 --Foreground +Restart=always +SuccessExitStatus=137 143 + +# Only simple isolation methods that don't pull in dependencies +CapabilityBoundingSet=CAP_SYS_ADMIN +SecureBits=noroot-locked +ProtectSystem=full + +[Install] +WantedBy=sysinit.target diff --git a/package/hdparm/Config.in b/package/hdparm/Config.in new file mode 100644 index 00000000..17ecb65c --- /dev/null +++ b/package/hdparm/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_HDPARM + bool "hdparm" + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + hdparm - get/set ATA/SATA drive parameters under Linux + + https://sourceforge.net/projects/hdparm/ diff --git a/package/hdparm/hdparm.hash b/package/hdparm/hdparm.hash new file mode 100644 index 00000000..b37826ca --- /dev/null +++ b/package/hdparm/hdparm.hash @@ -0,0 +1,5 @@ +# From https://sourceforge.net/projects/hdparm/files/hdparm/ +sha1 100b9a5551b71d87b446b415d56c5d45ac41d131 hdparm-9.62.tar.gz +# Locally computed +sha256 2c0f9d75cdbeda928a25a128cd3d0b7120445ec0910c0b29d4c1038ed1be777f hdparm-9.62.tar.gz +sha256 eae572b06d2733f5c65fbe81680ce2b8a109afee2bdd1a161343c772af0e82e1 LICENSE.TXT diff --git a/package/hdparm/hdparm.mk b/package/hdparm/hdparm.mk new file mode 100644 index 00000000..6a71c14f --- /dev/null +++ b/package/hdparm/hdparm.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# hdparm +# +################################################################################ + +HDPARM_VERSION = 9.62 +HDPARM_SITE = https://downloads.sourceforge.net/project/hdparm/hdparm +HDPARM_LICENSE = BSD-Style +HDPARM_LICENSE_FILES = LICENSE.TXT + +define HDPARM_BUILD_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) \ + CFLAGS="$(TARGET_CFLAGS)" \ + LDFLAGS="$(TARGET_LDFLAGS)" \ + STRIP=/bin/true +endef + +define HDPARM_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/hdparm $(TARGET_DIR)/sbin/hdparm +endef + +$(eval $(generic-package)) diff --git a/package/heimdal/heimdal.hash b/package/heimdal/heimdal.hash new file mode 100644 index 00000000..07502338 --- /dev/null +++ b/package/heimdal/heimdal.hash @@ -0,0 +1,5 @@ +# From https://github.com/heimdal/heimdal/releases +sha1 5dd16703be7255f66a4d65440f0c622aeeca60d9 heimdal-7.7.0.tar.gz +sha256 f02d3314d634cc55eb9cf04a1eae0d96b293e45a1f837de9d894e800161b7d1b heimdal-7.7.0.tar.gz +# Locally computed +sha256 0c4b07bf5b98f7a1d01f8e60722d6c6747ef052c2aa6d2043daf690d4e1b0a7f LICENSE diff --git a/package/heimdal/heimdal.mk b/package/heimdal/heimdal.mk new file mode 100644 index 00000000..9a1a68f0 --- /dev/null +++ b/package/heimdal/heimdal.mk @@ -0,0 +1,46 @@ +################################################################################ +# +# heimdal +# +################################################################################ + +HEIMDAL_VERSION = 7.7.0 +HEIMDAL_SITE = https://github.com/heimdal/heimdal/releases/download/heimdal-$(HEIMDAL_VERSION) +HOST_HEIMDAL_DEPENDENCIES = host-e2fsprogs host-ncurses host-pkgconf +HEIMDAL_INSTALL_STAGING = YES +HEIMDAL_MAKE = $(MAKE1) +# static because of -fPIC issues with e2fsprogs on x86_64 host +HOST_HEIMDAL_CONF_OPTS = \ + --disable-shared \ + --enable-static \ + --without-openldap \ + --without-capng \ + --with-db-type-preference= \ + --without-sqlite3 \ + --without-libintl \ + --without-openssl \ + --without-berkeley-db \ + --without-readline \ + --without-libedit \ + --without-hesiod \ + --without-x \ + --disable-mdb-db \ + --disable-ndbm-db \ + --disable-heimdal-documentation + +HOST_HEIMDAL_CONF_ENV = MAKEINFO=true +HEIMDAL_LICENSE = BSD-3-Clause +HEIMDAL_LICENSE_FILES = LICENSE +HEIMDAL_CPE_ID_VENDOR = heimdal_project + +# We need asn1_compile in the PATH for samba4 +define HOST_HEIMDAL_MAKE_SYMLINK + ln -sf $(HOST_DIR)/libexec/heimdal/asn1_compile \ + $(HOST_DIR)/bin/asn1_compile + ln -sf $(HOST_DIR)/bin/compile_et \ + $(HOST_DIR)/libexec/heimdal/compile_et +endef + +HOST_HEIMDAL_POST_INSTALL_HOOKS += HOST_HEIMDAL_MAKE_SYMLINK + +$(eval $(host-autotools-package)) diff --git a/package/heirloom-mailx/0001-Patched-out-SSL2-support-since-it-is-no-longer-suppo.patch b/package/heirloom-mailx/0001-Patched-out-SSL2-support-since-it-is-no-longer-suppo.patch new file mode 100644 index 00000000..db5b19ee --- /dev/null +++ b/package/heirloom-mailx/0001-Patched-out-SSL2-support-since-it-is-no-longer-suppo.patch @@ -0,0 +1,42 @@ +From: Hilko Bengen +Date: Wed, 27 Apr 2011 00:18:42 +0200 +Subject: Patched out SSL2 support since it is no longer supported by OpenSSL. + +Now that openssl has dropped SSLv2 support we need to patch it out. +Patch picked up from debian patchseries 5. + +Signed-off-by: Gustavo Zacarias + +--- + mailx.1 | 2 +- + openssl.c | 4 +--- + 2 files changed, 2 insertions(+), 4 deletions(-) + +diff --git a/mailx.1 b/mailx.1 +index 417ea04..a02e430 100644 +--- a/mailx.1 ++++ b/mailx.1 +@@ -3575,7 +3575,7 @@ Only applicable if SSL/TLS support is built using OpenSSL. + .TP + .B ssl-method + Selects a SSL/TLS protocol version; +-valid values are `ssl2', `ssl3', and `tls1'. ++valid values are `ssl3', and `tls1'. + If unset, the method is selected automatically, + if possible. + .TP +diff --git a/openssl.c b/openssl.c +index b4e33fc..44fe4e5 100644 +--- a/openssl.c ++++ b/openssl.c +@@ -216,9 +216,7 @@ ssl_select_method(const char *uhp) + + cp = ssl_method_string(uhp); + if (cp != NULL) { +- if (equal(cp, "ssl2")) +- method = SSLv2_client_method(); +- else if (equal(cp, "ssl3")) ++ if (equal(cp, "ssl3")) + method = SSLv3_client_method(); + else if (equal(cp, "tls1")) + method = TLSv1_client_method(); diff --git a/package/heirloom-mailx/0002-fix-libressl-support.patch b/package/heirloom-mailx/0002-fix-libressl-support.patch new file mode 100644 index 00000000..b54aaaf7 --- /dev/null +++ b/package/heirloom-mailx/0002-fix-libressl-support.patch @@ -0,0 +1,54 @@ +From aad28d30af6c3a74c522dd61943788e908860c84 Mon Sep 17 00:00:00 2001 +From: Adam Duskett +Date: Fri, 4 Aug 2017 07:22:47 -0400 +Subject: [PATCH] fix libressl support + +heirloom-mailx has two small issues when compiling against LibreSSL: + - RAND_egd is used (LibreSSL does not support RAND_egd) + Solution: "Guard" the code calling RAND_egd + + - SSLv3_client_method function is used (LibreSSL does not support SSLv3) + Solution: "Guard" the code with #ifndef OPENSSL_NO_SSL3 + +Signed-off-by: Adam Duskett +--- + openssl.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/openssl.c b/openssl.c +index 44fe4e5..c4a1bb7 100644 +--- a/openssl.c ++++ b/openssl.c +@@ -137,11 +137,13 @@ ssl_rand_init(void) + + if ((cp = value("ssl-rand-egd")) != NULL) { + cp = expand(cp); ++#ifndef OPENSSL_NO_EGD + if (RAND_egd(cp) == -1) { + fprintf(stderr, catgets(catd, CATSET, 245, + "entropy daemon at \"%s\" not available\n"), + cp); + } else ++#endif + state = 1; + } else if ((cp = value("ssl-rand-file")) != NULL) { + cp = expand(cp); +@@ -216,10 +218,15 @@ ssl_select_method(const char *uhp) + + cp = ssl_method_string(uhp); + if (cp != NULL) { ++ #ifndef OPENSSL_NO_SSL3 + if (equal(cp, "ssl3")) + method = SSLv3_client_method(); + else if (equal(cp, "tls1")) + method = TLSv1_client_method(); ++ #else ++ if (equal(cp, "tls1")) ++ method = TLSv1_client_method(); ++ #endif + else { + fprintf(stderr, catgets(catd, CATSET, 244, + "Invalid SSL method \"%s\"\n"), cp); +-- +2.13.3 + diff --git a/package/heirloom-mailx/Config.in b/package/heirloom-mailx/Config.in new file mode 100644 index 00000000..87664b48 --- /dev/null +++ b/package/heirloom-mailx/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_HEIRLOOM_MAILX + bool "heirloom-mailx" + # uses fork() + depends on BR2_USE_MMU + depends on !BR2_STATIC_LIBS + help + Heirloom mailx (previously known as nail) is a mail user + agent for Unix systems. + + It can be used as a command-line mail reader, but also more + importantly on embedded systems, as a mail composition + program and SMTP client, in order to send e-mail from shell + scripts. It supports SMTP authentication (login, plain, + cram-md5), SMTPS, MIME encoding of attachements, and more. + + http://heirloom.sourceforge.net/mailx.html + +comment "heirloom-mailx needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + depends on BR2_USE_MMU diff --git a/package/heirloom-mailx/heirloom-mailx.hash b/package/heirloom-mailx/heirloom-mailx.hash new file mode 100644 index 00000000..1f59f734 --- /dev/null +++ b/package/heirloom-mailx/heirloom-mailx.hash @@ -0,0 +1,4 @@ +# From http://snapshot.debian.org/archive/debian/20141023T043132Z/pool/main/h/heirloom-mailx/heirloom-mailx_12.5-3.dsc +sha256 015ba4209135867f37a0245d22235a392b8bbed956913286b887c2e2a9a421ad heirloom-mailx_12.5.orig.tar.gz +# Locally computed +sha256 5ddc00aed98a0cf75fc7edfd9f3aeb1e919ae0ad5e9ff55d61f643d62d802b07 COPYING diff --git a/package/heirloom-mailx/heirloom-mailx.mk b/package/heirloom-mailx/heirloom-mailx.mk new file mode 100644 index 00000000..b3cece0c --- /dev/null +++ b/package/heirloom-mailx/heirloom-mailx.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# heirloom-mailx +# +################################################################################ + +HEIRLOOM_MAILX_VERSION = 12.5 +HEIRLOOM_MAILX_SOURCE = heirloom-mailx_$(HEIRLOOM_MAILX_VERSION).orig.tar.gz +HEIRLOOM_MAILX_SITE = http://snapshot.debian.org/archive/debian/20141023T043132Z/pool/main/h/heirloom-mailx +HEIRLOOM_MAILX_LICENSE = BSD-4-Clause, Bellcore (base64), OpenVision (imap_gssapi), RSA Data Security (md5), Network Working Group (hmac), MPL-1.1 (nss) +HEIRLOOM_MAILX_LICENSE_FILES = COPYING +HEIRLOOM_MAILX_CPE_ID_VENDOR = heirloom +HEIRLOOM_MAILX_CPE_ID_PRODUCT = mailx + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +HEIRLOOM_MAILX_DEPENDENCIES += openssl +endif + +define HEIRLOOM_MAILX_CONFIGURE_CMDS + (cd $(@D); $(TARGET_CONFIGURE_OPTS) $(SHELL) ./makeconfig) +endef + +# -fPIC is needed to build with NIOS2 toolchains. +define HEIRLOOM_MAILX_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) \ + CFLAGS="$(TARGET_CFLAGS) -fPIC" \ + -C $(@D) +endef + +define HEIRLOOM_MAILX_INSTALL_TARGET_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + PREFIX=/usr \ + UCBINSTALL=$(INSTALL) \ + STRIP=/bin/true \ + DESTDIR=$(TARGET_DIR) \ + install +endef + +$(eval $(generic-package)) diff --git a/package/hiawatha/Config.in b/package/hiawatha/Config.in new file mode 100644 index 00000000..8f1908f6 --- /dev/null +++ b/package/hiawatha/Config.in @@ -0,0 +1,37 @@ +comment "hiawatha needs a toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS + +config BR2_PACKAGE_HIAWATHA + bool "hiawatha" + # needs fork() + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # __sync_*_4 intrisics + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_ZLIB + help + Hiawatha is a webserver for Unix and has been built with + security in mind. This resulted in a highly secure + webserver, in both code and features. + + This webserver runs on Linux, BSD, MacOS X and + Windows. Although it can run any kind of CGI / FastCGI + application, it has been optimized for usage with PHP. Most + well known PHP frameworks and CMS applications have been + tested with Hiawatha and ran without a problem. Hiawatha + supports many web and HTTP features such as CGI/FastCGI, + HTTP authentication, virtual host support, request + pipelining, keep alive connections, URL rewriting and many + more. + + http://www.hiawatha-webserver.org/ + +if BR2_PACKAGE_HIAWATHA + +config BR2_PACKAGE_HIAWATHA_SSL + bool "hiawatha TLS support" + select BR2_PACKAGE_MBEDTLS + +endif diff --git a/package/hiawatha/hiawatha.hash b/package/hiawatha/hiawatha.hash new file mode 100644 index 00000000..2fba5600 --- /dev/null +++ b/package/hiawatha/hiawatha.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 79d85d165d68dd7043bbd337f5bc7dd10d8632d68ba61d0e557f84bd687c9727 hiawatha-10.11.tar.gz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 LICENSE diff --git a/package/hiawatha/hiawatha.mk b/package/hiawatha/hiawatha.mk new file mode 100644 index 00000000..126cb711 --- /dev/null +++ b/package/hiawatha/hiawatha.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# hiawatha +# +################################################################################ + +HIAWATHA_VERSION = 10.11 +HIAWATHA_SITE = https://www.hiawatha-webserver.org/files +HIAWATHA_DEPENDENCIES = zlib +HIAWATHA_LICENSE = GPL-2.0 +HIAWATHA_LICENSE_FILES = LICENSE + +HIAWATHA_CONF_OPTS = \ + -DENABLE_TOOLKIT=OFF \ + -DCONFIG_DIR=/etc/hiawatha \ + -DLOG_DIR=/var/log \ + -DPID_DIR=/var/run \ + -DWEBROOT_DIR=/var/www/hiawatha \ + -DWORK_DIR=/var/lib/hiawatha + +ifeq ($(BR2_PACKAGE_HIAWATHA_SSL),y) +HIAWATHA_CONF_OPTS += -DUSE_SYSTEM_MBEDTLS=ON +HIAWATHA_DEPENDENCIES += mbedtls +else +HIAWATHA_CONF_OPTS += -DENABLE_TLS=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBXSLT),y) +HIAWATHA_CONF_OPTS += -DENABLE_XSLT=ON +HIAWATHA_DEPENDENCIES += libxslt +else +HIAWATHA_CONF_OPTS += -DENABLE_XSLT=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/hicolor-icon-theme/Config.in b/package/hicolor-icon-theme/Config.in new file mode 100644 index 00000000..5ef2cd22 --- /dev/null +++ b/package/hicolor-icon-theme/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_HICOLOR_ICON_THEME + bool "hicolor icon theme" + help + Freedesktop Hicolor icon theme + + This is the fallback icon theme, which only creates the + standard directory structure for storing icons of third-party + applications (i.e. the ones not available in usual icon + themes). + + https://www.freedesktop.org/wiki/Software/icon-theme/ diff --git a/package/hicolor-icon-theme/hicolor-icon-theme.hash b/package/hicolor-icon-theme/hicolor-icon-theme.hash new file mode 100644 index 00000000..ec9635f0 --- /dev/null +++ b/package/hicolor-icon-theme/hicolor-icon-theme.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 317484352271d18cbbcfac3868eab798d67fff1b8402e740baa6ff41d588a9d8 hicolor-icon-theme-0.17.tar.xz +sha256 b0a64377d4ee87b7dbcf418ce4fb33ec3b2d7081b6732890e4af06b8118c4526 COPYING diff --git a/package/hicolor-icon-theme/hicolor-icon-theme.mk b/package/hicolor-icon-theme/hicolor-icon-theme.mk new file mode 100644 index 00000000..088aecf3 --- /dev/null +++ b/package/hicolor-icon-theme/hicolor-icon-theme.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# hicolor-icon-theme +# +################################################################################ + +HICOLOR_ICON_THEME_VERSION = 0.17 +HICOLOR_ICON_THEME_SITE = http://icon-theme.freedesktop.org/releases +HICOLOR_ICON_THEME_SOURCE = hicolor-icon-theme-$(HICOLOR_ICON_THEME_VERSION).tar.xz +HICOLOR_ICON_THEME_LICENSE = GPL-2.0 +HICOLOR_ICON_THEME_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/hidapi/0001-hidtest-dont-use-a-C-source-file-since-it-s-pure-C.patch b/package/hidapi/0001-hidtest-dont-use-a-C-source-file-since-it-s-pure-C.patch new file mode 100644 index 00000000..4740cb7b --- /dev/null +++ b/package/hidapi/0001-hidtest-dont-use-a-C-source-file-since-it-s-pure-C.patch @@ -0,0 +1,445 @@ +From 2fb04c2245167e247b95400112b5dbea12fcb206 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 30 Dec 2015 20:02:29 +0100 +Subject: [PATCH] hidtest: dont' use a C++ source file, since it's pure C + +This allows to build the test program with toolchains that don't have +C++ support. + +Signed-off-by: Thomas Petazzoni +--- + hidtest/Makefile.am | 6 +- + hidtest/hidtest.c | 194 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + hidtest/hidtest.cpp | 194 ---------------------------------------------------- + 3 files changed, 197 insertions(+), 197 deletions(-) + create mode 100644 hidtest/hidtest.c + delete mode 100644 hidtest/hidtest.cpp + +diff --git a/hidtest/Makefile.am b/hidtest/Makefile.am +index d278644..5f52c3f 100644 +--- a/hidtest/Makefile.am ++++ b/hidtest/Makefile.am +@@ -4,17 +4,17 @@ AM_CPPFLAGS = -I$(top_srcdir)/hidapi/ + if OS_LINUX + noinst_PROGRAMS = hidtest-libusb hidtest-hidraw + +-hidtest_hidraw_SOURCES = hidtest.cpp ++hidtest_hidraw_SOURCES = hidtest.c + hidtest_hidraw_LDADD = $(top_builddir)/linux/libhidapi-hidraw.la + +-hidtest_libusb_SOURCES = hidtest.cpp ++hidtest_libusb_SOURCES = hidtest.c + hidtest_libusb_LDADD = $(top_builddir)/libusb/libhidapi-libusb.la + else + + # Other OS's + noinst_PROGRAMS = hidtest + +-hidtest_SOURCES = hidtest.cpp ++hidtest_SOURCES = hidtest.c + hidtest_LDADD = $(top_builddir)/$(backend)/libhidapi.la + + endif +diff --git a/hidtest/hidtest.c b/hidtest/hidtest.c +new file mode 100644 +index 0000000..94f0a5c +--- /dev/null ++++ b/hidtest/hidtest.c +@@ -0,0 +1,194 @@ ++/******************************************************* ++ Windows HID simplification ++ ++ Alan Ott ++ Signal 11 Software ++ ++ 8/22/2009 ++ ++ Copyright 2009 ++ ++ This contents of this file may be used by anyone ++ for any reason without any conditions and may be ++ used as a starting point for your own applications ++ which use HIDAPI. ++********************************************************/ ++ ++#include ++#include ++#include ++#include ++#include "hidapi.h" ++ ++// Headers needed for sleeping. ++#ifdef _WIN32 ++ #include ++#else ++ #include ++#endif ++ ++int main(int argc, char* argv[]) ++{ ++ int res; ++ unsigned char buf[256]; ++ #define MAX_STR 255 ++ wchar_t wstr[MAX_STR]; ++ hid_device *handle; ++ int i; ++ ++#ifdef WIN32 ++ UNREFERENCED_PARAMETER(argc); ++ UNREFERENCED_PARAMETER(argv); ++#endif ++ ++ struct hid_device_info *devs, *cur_dev; ++ ++ if (hid_init()) ++ return -1; ++ ++ devs = hid_enumerate(0x0, 0x0); ++ cur_dev = devs; ++ while (cur_dev) { ++ printf("Device Found\n type: %04hx %04hx\n path: %s\n serial_number: %ls", cur_dev->vendor_id, cur_dev->product_id, cur_dev->path, cur_dev->serial_number); ++ printf("\n"); ++ printf(" Manufacturer: %ls\n", cur_dev->manufacturer_string); ++ printf(" Product: %ls\n", cur_dev->product_string); ++ printf(" Release: %hx\n", cur_dev->release_number); ++ printf(" Interface: %d\n", cur_dev->interface_number); ++ printf("\n"); ++ cur_dev = cur_dev->next; ++ } ++ hid_free_enumeration(devs); ++ ++ // Set up the command buffer. ++ memset(buf,0x00,sizeof(buf)); ++ buf[0] = 0x01; ++ buf[1] = 0x81; ++ ++ ++ // Open the device using the VID, PID, ++ // and optionally the Serial number. ++ ////handle = hid_open(0x4d8, 0x3f, L"12345"); ++ handle = hid_open(0x4d8, 0x3f, NULL); ++ if (!handle) { ++ printf("unable to open device\n"); ++ return 1; ++ } ++ ++ // Read the Manufacturer String ++ wstr[0] = 0x0000; ++ res = hid_get_manufacturer_string(handle, wstr, MAX_STR); ++ if (res < 0) ++ printf("Unable to read manufacturer string\n"); ++ printf("Manufacturer String: %ls\n", wstr); ++ ++ // Read the Product String ++ wstr[0] = 0x0000; ++ res = hid_get_product_string(handle, wstr, MAX_STR); ++ if (res < 0) ++ printf("Unable to read product string\n"); ++ printf("Product String: %ls\n", wstr); ++ ++ // Read the Serial Number String ++ wstr[0] = 0x0000; ++ res = hid_get_serial_number_string(handle, wstr, MAX_STR); ++ if (res < 0) ++ printf("Unable to read serial number string\n"); ++ printf("Serial Number String: (%d) %ls", wstr[0], wstr); ++ printf("\n"); ++ ++ // Read Indexed String 1 ++ wstr[0] = 0x0000; ++ res = hid_get_indexed_string(handle, 1, wstr, MAX_STR); ++ if (res < 0) ++ printf("Unable to read indexed string 1\n"); ++ printf("Indexed String 1: %ls\n", wstr); ++ ++ // Set the hid_read() function to be non-blocking. ++ hid_set_nonblocking(handle, 1); ++ ++ // Try to read from the device. There shoud be no ++ // data here, but execution should not block. ++ res = hid_read(handle, buf, 17); ++ ++ // Send a Feature Report to the device ++ buf[0] = 0x2; ++ buf[1] = 0xa0; ++ buf[2] = 0x0a; ++ buf[3] = 0x00; ++ buf[4] = 0x00; ++ res = hid_send_feature_report(handle, buf, 17); ++ if (res < 0) { ++ printf("Unable to send a feature report.\n"); ++ } ++ ++ memset(buf,0,sizeof(buf)); ++ ++ // Read a Feature Report from the device ++ buf[0] = 0x2; ++ res = hid_get_feature_report(handle, buf, sizeof(buf)); ++ if (res < 0) { ++ printf("Unable to get a feature report.\n"); ++ printf("%ls", hid_error(handle)); ++ } ++ else { ++ // Print out the returned buffer. ++ printf("Feature Report\n "); ++ for (i = 0; i < res; i++) ++ printf("%02hhx ", buf[i]); ++ printf("\n"); ++ } ++ ++ memset(buf,0,sizeof(buf)); ++ ++ // Toggle LED (cmd 0x80). The first byte is the report number (0x1). ++ buf[0] = 0x1; ++ buf[1] = 0x80; ++ res = hid_write(handle, buf, 17); ++ if (res < 0) { ++ printf("Unable to write()\n"); ++ printf("Error: %ls\n", hid_error(handle)); ++ } ++ ++ ++ // Request state (cmd 0x81). The first byte is the report number (0x1). ++ buf[0] = 0x1; ++ buf[1] = 0x81; ++ hid_write(handle, buf, 17); ++ if (res < 0) ++ printf("Unable to write() (2)\n"); ++ ++ // Read requested state. hid_read() has been set to be ++ // non-blocking by the call to hid_set_nonblocking() above. ++ // This loop demonstrates the non-blocking nature of hid_read(). ++ res = 0; ++ while (res == 0) { ++ res = hid_read(handle, buf, sizeof(buf)); ++ if (res == 0) ++ printf("waiting...\n"); ++ if (res < 0) ++ printf("Unable to read()\n"); ++ #ifdef WIN32 ++ Sleep(500); ++ #else ++ usleep(500*1000); ++ #endif ++ } ++ ++ printf("Data read:\n "); ++ // Print out the returned buffer. ++ for (i = 0; i < res; i++) ++ printf("%02hhx ", buf[i]); ++ printf("\n"); ++ ++ hid_close(handle); ++ ++ /* Free static HIDAPI objects. */ ++ hid_exit(); ++ ++#ifdef WIN32 ++ system("pause"); ++#endif ++ ++ return 0; ++} +diff --git a/hidtest/hidtest.cpp b/hidtest/hidtest.cpp +deleted file mode 100644 +index 94f0a5c..0000000 +--- a/hidtest/hidtest.cpp ++++ /dev/null +@@ -1,194 +0,0 @@ +-/******************************************************* +- Windows HID simplification +- +- Alan Ott +- Signal 11 Software +- +- 8/22/2009 +- +- Copyright 2009 +- +- This contents of this file may be used by anyone +- for any reason without any conditions and may be +- used as a starting point for your own applications +- which use HIDAPI. +-********************************************************/ +- +-#include +-#include +-#include +-#include +-#include "hidapi.h" +- +-// Headers needed for sleeping. +-#ifdef _WIN32 +- #include +-#else +- #include +-#endif +- +-int main(int argc, char* argv[]) +-{ +- int res; +- unsigned char buf[256]; +- #define MAX_STR 255 +- wchar_t wstr[MAX_STR]; +- hid_device *handle; +- int i; +- +-#ifdef WIN32 +- UNREFERENCED_PARAMETER(argc); +- UNREFERENCED_PARAMETER(argv); +-#endif +- +- struct hid_device_info *devs, *cur_dev; +- +- if (hid_init()) +- return -1; +- +- devs = hid_enumerate(0x0, 0x0); +- cur_dev = devs; +- while (cur_dev) { +- printf("Device Found\n type: %04hx %04hx\n path: %s\n serial_number: %ls", cur_dev->vendor_id, cur_dev->product_id, cur_dev->path, cur_dev->serial_number); +- printf("\n"); +- printf(" Manufacturer: %ls\n", cur_dev->manufacturer_string); +- printf(" Product: %ls\n", cur_dev->product_string); +- printf(" Release: %hx\n", cur_dev->release_number); +- printf(" Interface: %d\n", cur_dev->interface_number); +- printf("\n"); +- cur_dev = cur_dev->next; +- } +- hid_free_enumeration(devs); +- +- // Set up the command buffer. +- memset(buf,0x00,sizeof(buf)); +- buf[0] = 0x01; +- buf[1] = 0x81; +- +- +- // Open the device using the VID, PID, +- // and optionally the Serial number. +- ////handle = hid_open(0x4d8, 0x3f, L"12345"); +- handle = hid_open(0x4d8, 0x3f, NULL); +- if (!handle) { +- printf("unable to open device\n"); +- return 1; +- } +- +- // Read the Manufacturer String +- wstr[0] = 0x0000; +- res = hid_get_manufacturer_string(handle, wstr, MAX_STR); +- if (res < 0) +- printf("Unable to read manufacturer string\n"); +- printf("Manufacturer String: %ls\n", wstr); +- +- // Read the Product String +- wstr[0] = 0x0000; +- res = hid_get_product_string(handle, wstr, MAX_STR); +- if (res < 0) +- printf("Unable to read product string\n"); +- printf("Product String: %ls\n", wstr); +- +- // Read the Serial Number String +- wstr[0] = 0x0000; +- res = hid_get_serial_number_string(handle, wstr, MAX_STR); +- if (res < 0) +- printf("Unable to read serial number string\n"); +- printf("Serial Number String: (%d) %ls", wstr[0], wstr); +- printf("\n"); +- +- // Read Indexed String 1 +- wstr[0] = 0x0000; +- res = hid_get_indexed_string(handle, 1, wstr, MAX_STR); +- if (res < 0) +- printf("Unable to read indexed string 1\n"); +- printf("Indexed String 1: %ls\n", wstr); +- +- // Set the hid_read() function to be non-blocking. +- hid_set_nonblocking(handle, 1); +- +- // Try to read from the device. There shoud be no +- // data here, but execution should not block. +- res = hid_read(handle, buf, 17); +- +- // Send a Feature Report to the device +- buf[0] = 0x2; +- buf[1] = 0xa0; +- buf[2] = 0x0a; +- buf[3] = 0x00; +- buf[4] = 0x00; +- res = hid_send_feature_report(handle, buf, 17); +- if (res < 0) { +- printf("Unable to send a feature report.\n"); +- } +- +- memset(buf,0,sizeof(buf)); +- +- // Read a Feature Report from the device +- buf[0] = 0x2; +- res = hid_get_feature_report(handle, buf, sizeof(buf)); +- if (res < 0) { +- printf("Unable to get a feature report.\n"); +- printf("%ls", hid_error(handle)); +- } +- else { +- // Print out the returned buffer. +- printf("Feature Report\n "); +- for (i = 0; i < res; i++) +- printf("%02hhx ", buf[i]); +- printf("\n"); +- } +- +- memset(buf,0,sizeof(buf)); +- +- // Toggle LED (cmd 0x80). The first byte is the report number (0x1). +- buf[0] = 0x1; +- buf[1] = 0x80; +- res = hid_write(handle, buf, 17); +- if (res < 0) { +- printf("Unable to write()\n"); +- printf("Error: %ls\n", hid_error(handle)); +- } +- +- +- // Request state (cmd 0x81). The first byte is the report number (0x1). +- buf[0] = 0x1; +- buf[1] = 0x81; +- hid_write(handle, buf, 17); +- if (res < 0) +- printf("Unable to write() (2)\n"); +- +- // Read requested state. hid_read() has been set to be +- // non-blocking by the call to hid_set_nonblocking() above. +- // This loop demonstrates the non-blocking nature of hid_read(). +- res = 0; +- while (res == 0) { +- res = hid_read(handle, buf, sizeof(buf)); +- if (res == 0) +- printf("waiting...\n"); +- if (res < 0) +- printf("Unable to read()\n"); +- #ifdef WIN32 +- Sleep(500); +- #else +- usleep(500*1000); +- #endif +- } +- +- printf("Data read:\n "); +- // Print out the returned buffer. +- for (i = 0; i < res; i++) +- printf("%02hhx ", buf[i]); +- printf("\n"); +- +- hid_close(handle); +- +- /* Free static HIDAPI objects. */ +- hid_exit(); +- +-#ifdef WIN32 +- system("pause"); +-#endif +- +- return 0; +-} +-- +2.7.4 + diff --git a/package/hidapi/Config.in b/package/hidapi/Config.in new file mode 100644 index 00000000..061c7883 --- /dev/null +++ b/package/hidapi/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_HIDAPI + bool "hidapi" + depends on BR2_PACKAGE_HAS_UDEV + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_LIBGUDEV + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + # runtime UTF conversion support + select BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY if BR2_TOOLCHAIN_USES_GLIBC + help + HIDAPI is a multi-platform library which allows an application + to interface with USB and Bluetooth HID-Class devices on + Windows, Linux, and Mac OS X. + + http://github.com/libusb/hidapi/ + +comment "hidapi needs udev /dev management and a toolchain w/ NPTL, threads, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL || \ + !BR2_PACKAGE_HAS_UDEV || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/hidapi/hidapi.hash b/package/hidapi/hidapi.hash new file mode 100644 index 00000000..232c1ec4 --- /dev/null +++ b/package/hidapi/hidapi.hash @@ -0,0 +1,6 @@ +# Locally calculated +sha256 630ee1834bdd5c5761ab079fd04f463a89585df8fcae51a7bfe4229b1e02a652 hidapi-0.9.0.tar.gz +sha256 7d3b087c34f35d4d538e3bcddd1ff8f66e92f9ef336881999482800ddf840913 LICENSE.txt +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE-gpl3.txt +sha256 30eb1bef29b46f8ba7ab8b416035dbd93cb034a45481dd97815b944284582cd2 LICENSE-bsd.txt +sha256 fb5436aa63d1b71a8dfbf74ecaf1a5b4e1ec4df7f80074d11fec99284f69ca5f LICENSE-orig.txt diff --git a/package/hidapi/hidapi.mk b/package/hidapi/hidapi.mk new file mode 100644 index 00000000..abbe5878 --- /dev/null +++ b/package/hidapi/hidapi.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# hidapi +# +################################################################################ + +HIDAPI_VERSION = 0.9.0 +HIDAPI_SITE = $(call github,libusb,hidapi,hidapi-$(HIDAPI_VERSION)) +HIDAPI_INSTALL_STAGING = YES +# No configure provided, so we need to autoreconf. +HIDAPI_AUTORECONF = YES +HIDAPI_LICENSE = GPL-3.0 or BSD-3-Clause or HIDAPI license +HIDAPI_LICENSE_FILES = LICENSE.txt LICENSE-gpl3.txt LICENSE-bsd.txt LICENSE-orig.txt + +HIDAPI_DEPENDENCIES = libusb libgudev + +ifeq ($(BR2_PACKAGE_LIBICONV),y) +HIDAPI_DEPENDENCIES += libiconv +HIDAPI_CONF_ENV += LIBS="-liconv" +endif + +$(eval $(autotools-package)) diff --git a/package/hiredis/0001-CMakeLists.txt-do-not-force-SHARED.patch b/package/hiredis/0001-CMakeLists.txt-do-not-force-SHARED.patch new file mode 100644 index 00000000..b7fdb879 --- /dev/null +++ b/package/hiredis/0001-CMakeLists.txt-do-not-force-SHARED.patch @@ -0,0 +1,47 @@ +From 0ce382c275b087e866517c003e565f8cc4855bdd Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 29 Aug 2020 23:19:26 +0200 +Subject: [PATCH] CMakeLists.txt: do not force SHARED + +Allow the user to build static libraries by removing SHARED from +ADD_LIBRARY calls. + +Here is an extract of +https://cmake.org/cmake/help/latest/command/add_library.html: + +"If no type is given explicitly the type is STATIC or SHARED based on +whether the current value of the variable BUILD_SHARED_LIBS is ON." + +Signed-off-by: Fabrice Fontaine +[Upstream status: probably not upstreamable as is because it will +conflict with https://github.com/redis/hiredis/pull/851. So, this patch +will probably have to be reworked for 1.0.x] +--- + CMakeLists.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 1beccc6..fed79fd 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -40,7 +40,7 @@ IF(WIN32) + ADD_COMPILE_DEFINITIONS(_CRT_SECURE_NO_WARNINGS WIN32_LEAN_AND_MEAN) + ENDIF() + +-ADD_LIBRARY(hiredis SHARED ${hiredis_sources}) ++ADD_LIBRARY(hiredis ${hiredis_sources}) + + SET_TARGET_PROPERTIES(hiredis + PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE +@@ -97,7 +97,7 @@ IF(ENABLE_SSL) + FIND_PACKAGE(OpenSSL REQUIRED) + SET(hiredis_ssl_sources + ssl.c) +- ADD_LIBRARY(hiredis_ssl SHARED ++ ADD_LIBRARY(hiredis_ssl + ${hiredis_ssl_sources}) + + IF (APPLE) +-- +2.28.0 + diff --git a/package/hiredis/0002-CMakeLists.txt-allow-building-without-a-C-compiler.patch b/package/hiredis/0002-CMakeLists.txt-allow-building-without-a-C-compiler.patch new file mode 100644 index 00000000..08a9ef98 --- /dev/null +++ b/package/hiredis/0002-CMakeLists.txt-allow-building-without-a-C-compiler.patch @@ -0,0 +1,57 @@ +From bb4a8937411a9e6ac2e5c12c0e7eeaa7dab251ba Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 5 Sep 2020 12:54:21 +0200 +Subject: [PATCH] CMakeLists.txt: allow building without a C++ compiler + +Define hiredis as a C project (and use a single PROJECT statement) to +avoid the following build failure if a C++ compiler is not found: + +CMake Error at CMakeLists.txt:3 (PROJECT): + The CMAKE_CXX_COMPILER: + + /srv/storage/autobuild/run/instance-1/output-1/host/bin/arm-linux-g++ + + is not a full path to an existing compiler tool. + + Tell CMake where to find the compiler by setting either the environment + variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path + to the compiler, or to the compiler name if it is in the PATH. + +The only cpp source file is examples/example-qt.cpp which is never +compiled with cmake buildsystem. This file is compiled only with the +Makefile buildsystem so perhaps it should be removed. If it is added to +the cmake buildsystem, a call to enable_language(CXX) will have to be +added. + +Fixes: + - http://autobuild.buildroot.org/results/830ec3398cd29b9fc5cde06a225ef531d7a9d850 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/redis/hiredis/pull/872] +--- + CMakeLists.txt | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 4cbd438..9d65b7f 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1,6 +1,5 @@ + CMAKE_MINIMUM_REQUIRED(VERSION 3.4.0) + INCLUDE(GNUInstallDirs) +-PROJECT(hiredis) + + OPTION(ENABLE_SSL "Build hiredis_ssl for SSL support" OFF) + OPTION(DISABLE_TESTS "If tests should be compiled or not" OFF) +@@ -20,7 +19,7 @@ getVersionBit(HIREDIS_SONAME) + SET(VERSION "${HIREDIS_MAJOR}.${HIREDIS_MINOR}.${HIREDIS_PATCH}") + MESSAGE("Detected version: ${VERSION}") + +-PROJECT(hiredis VERSION "${VERSION}") ++PROJECT(hiredis LANGUAGES "C" VERSION "${VERSION}") + + # Hiredis requires C99 + SET(CMAKE_C_STANDARD 99) +-- +2.28.0 + diff --git a/package/hiredis/0003-Explicitly-set-c99-in-CMake.patch b/package/hiredis/0003-Explicitly-set-c99-in-CMake.patch new file mode 100644 index 00000000..7e6ef8bc --- /dev/null +++ b/package/hiredis/0003-Explicitly-set-c99-in-CMake.patch @@ -0,0 +1,28 @@ +From 13a35bdb64615e381c5e1151cdd4e78bba71a6db Mon Sep 17 00:00:00 2001 +From: michael-grunder +Date: Fri, 28 Aug 2020 12:35:01 -0700 +Subject: [PATCH] Explicitly set c99 in CMake + +See #869 + +[Retrieved from: +https://github.com/redis/hiredis/commit/13a35bdb64615e381c5e1151cdd4e78bba71a6db] +Signed-off-by: Fabrice Fontaine +--- + CMakeLists.txt | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 1beccc69a..4cbd438d7 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -22,6 +22,9 @@ MESSAGE("Detected version: ${VERSION}") + + PROJECT(hiredis VERSION "${VERSION}") + ++# Hiredis requires C99 ++SET(CMAKE_C_STANDARD 99) ++ + SET(ENABLE_EXAMPLES OFF CACHE BOOL "Enable building hiredis examples") + + SET(hiredis_sources diff --git a/package/hiredis/Config.in b/package/hiredis/Config.in new file mode 100644 index 00000000..16563553 --- /dev/null +++ b/package/hiredis/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_HIREDIS + bool "hiredis" + help + Minimalistic C client for Redis >= 1.2 + + It is minimalistic because it just adds minimal support for + the protocol, but at the same time it uses a high level + printf-alike API in order to make it much higher level than + otherwise suggested by its minimal code base and the lack of + explicit bindings for every Redis command. + + https://github.com/redis/hiredis diff --git a/package/hiredis/hiredis.hash b/package/hiredis/hiredis.hash new file mode 100644 index 00000000..fc01d1f6 --- /dev/null +++ b/package/hiredis/hiredis.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 2a0b5fe5119ec973a0c1966bfc4bd7ed39dbce1cb6d749064af9121fe971936f hiredis-1.0.0.tar.gz +sha256 dca05ce8fc87a8261783b4aed0deef8becc9350b6aa770bc714d0c1833b896eb COPYING diff --git a/package/hiredis/hiredis.mk b/package/hiredis/hiredis.mk new file mode 100644 index 00000000..f340fb8a --- /dev/null +++ b/package/hiredis/hiredis.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# hiredis +# +################################################################################ + +HIREDIS_VERSION_MAJOR = 1.0 +HIREDIS_VERSION = $(HIREDIS_VERSION_MAJOR).0 +HIREDIS_SITE = $(call github,redis,hiredis,v$(HIREDIS_VERSION)) +HIREDIS_LICENSE = BSD-3-Clause +HIREDIS_LICENSE_FILES = COPYING +HIREDIS_CPE_ID_VENDOR = redislabs +HIREDIS_INSTALL_STAGING = YES +HIREDIS_CONF_OPTS = -DDISABLE_TESTS=ON + +ifeq ($(BR2_PACKAGE_OPENSSL)$(BR2_TOOLCHAIN_HAS_THREADS),yy) +HIREDIS_CONF_OPTS += -DENABLE_SSL=ON +HIREDIS_DEPENDENCIES += openssl +else +HIREDIS_CONF_OPTS += -DENABLE_SSL=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/hostapd/0001-AP-Silently-ignore-management-frame-from-unexpected-.patch b/package/hostapd/0001-AP-Silently-ignore-management-frame-from-unexpected-.patch new file mode 100644 index 00000000..959788c2 --- /dev/null +++ b/package/hostapd/0001-AP-Silently-ignore-management-frame-from-unexpected-.patch @@ -0,0 +1,77 @@ +From 8c07fa9eda13e835f3f968b2e1c9a8be3a851ff9 Mon Sep 17 00:00:00 2001 +From: Jouni Malinen +Date: Thu, 29 Aug 2019 11:52:04 +0300 +Subject: [PATCH] AP: Silently ignore management frame from unexpected source + address + +Do not process any received Management frames with unexpected/invalid SA +so that we do not add any state for unexpected STA addresses or end up +sending out frames to unexpected destination. This prevents unexpected +sequences where an unprotected frame might end up causing the AP to send +out a response to another device and that other device processing the +unexpected response. + +In particular, this prevents some potential denial of service cases +where the unexpected response frame from the AP might result in a +connected station dropping its association. + +Signed-off-by: Jouni Malinen + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://w1.fi/security/2019-7/0001-AP-Silently-ignore-management-frame-from-unexpected-.patch] +--- + src/ap/drv_callbacks.c | 13 +++++++++++++ + src/ap/ieee802_11.c | 12 ++++++++++++ + 2 files changed, 25 insertions(+) + +diff --git a/src/ap/drv_callbacks.c b/src/ap/drv_callbacks.c +index 31587685fe3b..34ca379edc3d 100644 +--- a/src/ap/drv_callbacks.c ++++ b/src/ap/drv_callbacks.c +@@ -131,6 +131,19 @@ int hostapd_notif_assoc(struct hostapd_data *hapd, const u8 *addr, + "hostapd_notif_assoc: Skip event with no address"); + return -1; + } ++ ++ if (is_multicast_ether_addr(addr) || ++ is_zero_ether_addr(addr) || ++ os_memcmp(addr, hapd->own_addr, ETH_ALEN) == 0) { ++ /* Do not process any frames with unexpected/invalid SA so that ++ * we do not add any state for unexpected STA addresses or end ++ * up sending out frames to unexpected destination. */ ++ wpa_printf(MSG_DEBUG, "%s: Invalid SA=" MACSTR ++ " in received indication - ignore this indication silently", ++ __func__, MAC2STR(addr)); ++ return 0; ++ } ++ + random_add_randomness(addr, ETH_ALEN); + + hostapd_logger(hapd, addr, HOSTAPD_MODULE_IEEE80211, +diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c +index c85a28db44b7..e7065372e158 100644 +--- a/src/ap/ieee802_11.c ++++ b/src/ap/ieee802_11.c +@@ -4626,6 +4626,18 @@ int ieee802_11_mgmt(struct hostapd_data *hapd, const u8 *buf, size_t len, + fc = le_to_host16(mgmt->frame_control); + stype = WLAN_FC_GET_STYPE(fc); + ++ if (is_multicast_ether_addr(mgmt->sa) || ++ is_zero_ether_addr(mgmt->sa) || ++ os_memcmp(mgmt->sa, hapd->own_addr, ETH_ALEN) == 0) { ++ /* Do not process any frames with unexpected/invalid SA so that ++ * we do not add any state for unexpected STA addresses or end ++ * up sending out frames to unexpected destination. */ ++ wpa_printf(MSG_DEBUG, "MGMT: Invalid SA=" MACSTR ++ " in received frame - ignore this frame silently", ++ MAC2STR(mgmt->sa)); ++ return 0; ++ } ++ + if (stype == WLAN_FC_STYPE_BEACON) { + handle_beacon(hapd, mgmt, len, fi); + return 1; +-- +2.20.1 + diff --git a/package/hostapd/0002-ASN.1-Validate-DigestAlgorithmIdentifier-parameters.patch b/package/hostapd/0002-ASN.1-Validate-DigestAlgorithmIdentifier-parameters.patch new file mode 100644 index 00000000..5dcfed94 --- /dev/null +++ b/package/hostapd/0002-ASN.1-Validate-DigestAlgorithmIdentifier-parameters.patch @@ -0,0 +1,116 @@ +From a0541334a6394f8237a4393b7372693cd7e96f15 Mon Sep 17 00:00:00 2001 +From: Jouni Malinen +Date: Sat, 13 Mar 2021 18:19:31 +0200 +Subject: [PATCH] ASN.1: Validate DigestAlgorithmIdentifier parameters + +The supported hash algorithms do not use AlgorithmIdentifier parameters. +However, there are implementations that include NULL parameters in +addition to ones that omit the parameters. Previous implementation did +not check the parameters value at all which supported both these cases, +but did not reject any other unexpected information. + +Use strict validation of digest algorithm parameters and reject any +unexpected value when validating a signature. This is needed to prevent +potential forging attacks. + +Signed-off-by: Jouni Malinen +Signed-off-by: Peter Korsgaard +--- + src/tls/pkcs1.c | 21 +++++++++++++++++++++ + src/tls/x509v3.c | 20 ++++++++++++++++++++ + 2 files changed, 41 insertions(+) + +diff --git a/src/tls/pkcs1.c b/src/tls/pkcs1.c +index bbdb0d72d..5761dfed0 100644 +--- a/src/tls/pkcs1.c ++++ b/src/tls/pkcs1.c +@@ -244,6 +244,8 @@ int pkcs1_v15_sig_ver(struct crypto_public_key *pk, + os_free(decrypted); + return -1; + } ++ wpa_hexdump(MSG_MSGDUMP, "PKCS #1: DigestInfo", ++ hdr.payload, hdr.length); + + pos = hdr.payload; + end = pos + hdr.length; +@@ -265,6 +267,8 @@ int pkcs1_v15_sig_ver(struct crypto_public_key *pk, + os_free(decrypted); + return -1; + } ++ wpa_hexdump(MSG_MSGDUMP, "PKCS #1: DigestAlgorithmIdentifier", ++ hdr.payload, hdr.length); + da_end = hdr.payload + hdr.length; + + if (asn1_get_oid(hdr.payload, hdr.length, &oid, &next)) { +@@ -273,6 +277,23 @@ int pkcs1_v15_sig_ver(struct crypto_public_key *pk, + os_free(decrypted); + return -1; + } ++ wpa_hexdump(MSG_MSGDUMP, "PKCS #1: Digest algorithm parameters", ++ next, da_end - next); ++ ++ /* ++ * RFC 5754: The correct encoding for the SHA2 algorithms would be to ++ * omit the parameters, but there are implementation that encode these ++ * as a NULL element. Allow these two cases and reject anything else. ++ */ ++ if (da_end > next && ++ (asn1_get_next(next, da_end - next, &hdr) < 0 || ++ !asn1_is_null(&hdr) || ++ hdr.payload + hdr.length != da_end)) { ++ wpa_printf(MSG_DEBUG, ++ "PKCS #1: Unexpected digest algorithm parameters"); ++ os_free(decrypted); ++ return -1; ++ } + + if (!asn1_oid_equal(&oid, hash_alg)) { + char txt[100], txt2[100]; +diff --git a/src/tls/x509v3.c b/src/tls/x509v3.c +index a8944dd2f..df337ec4d 100644 +--- a/src/tls/x509v3.c ++++ b/src/tls/x509v3.c +@@ -1964,6 +1964,7 @@ int x509_check_signature(struct x509_certificate *issuer, + os_free(data); + return -1; + } ++ wpa_hexdump(MSG_MSGDUMP, "X509: DigestInfo", hdr.payload, hdr.length); + + pos = hdr.payload; + end = pos + hdr.length; +@@ -1985,6 +1986,8 @@ int x509_check_signature(struct x509_certificate *issuer, + os_free(data); + return -1; + } ++ wpa_hexdump(MSG_MSGDUMP, "X509: DigestAlgorithmIdentifier", ++ hdr.payload, hdr.length); + da_end = hdr.payload + hdr.length; + + if (asn1_get_oid(hdr.payload, hdr.length, &oid, &next)) { +@@ -1992,6 +1995,23 @@ int x509_check_signature(struct x509_certificate *issuer, + os_free(data); + return -1; + } ++ wpa_hexdump(MSG_MSGDUMP, "X509: Digest algorithm parameters", ++ next, da_end - next); ++ ++ /* ++ * RFC 5754: The correct encoding for the SHA2 algorithms would be to ++ * omit the parameters, but there are implementation that encode these ++ * as a NULL element. Allow these two cases and reject anything else. ++ */ ++ if (da_end > next && ++ (asn1_get_next(next, da_end - next, &hdr) < 0 || ++ !asn1_is_null(&hdr) || ++ hdr.payload + hdr.length != da_end)) { ++ wpa_printf(MSG_DEBUG, ++ "X509: Unexpected digest algorithm parameters"); ++ os_free(data); ++ return -1; ++ } + + if (x509_sha1_oid(&oid)) { + if (signature->oid.oid[6] != 5 /* sha-1WithRSAEncryption */) { +-- +2.20.1 + diff --git a/package/hostapd/0003-Include-stdbool.h-to-allow-C99-bool-to-be-used.patch b/package/hostapd/0003-Include-stdbool.h-to-allow-C99-bool-to-be-used.patch new file mode 100644 index 00000000..e52dbdb6 --- /dev/null +++ b/package/hostapd/0003-Include-stdbool.h-to-allow-C99-bool-to-be-used.patch @@ -0,0 +1,32 @@ +From 99cf89555313056d3a8fa54b21d02dc880b363e1 Mon Sep 17 00:00:00 2001 +From: Jouni Malinen +Date: Mon, 20 Apr 2020 20:29:31 +0300 +Subject: [PATCH] Include stdbool.h to allow C99 bool to be used + +We have practically started requiring some C99 features, so might as +well finally go ahead and bring in the C99 bool as well. + +Signed-off-by: Jouni Malinen +[geomatsi@gmail.com: backport from upstream] +Signed-off-by: Sergey Matyukevich +[yann.morin.1998@free.fr: keep upstream sha1 in header, drop numbering] +Signed-off-by: Yann E. MORIN +--- + src/utils/includes.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/utils/includes.h b/src/utils/includes.h +index 75513fc8c..741fc9c14 100644 +--- a/src/utils/includes.h ++++ b/src/utils/includes.h +@@ -18,6 +18,7 @@ + + #include + #include ++#include + #include + #include + #include +-- +2.25.1 + diff --git a/package/hostapd/0004-ASN.1-Add-helper-functions-for-recognizing-tag-value.patch b/package/hostapd/0004-ASN.1-Add-helper-functions-for-recognizing-tag-value.patch new file mode 100644 index 00000000..a5415e7d --- /dev/null +++ b/package/hostapd/0004-ASN.1-Add-helper-functions-for-recognizing-tag-value.patch @@ -0,0 +1,37 @@ +From 9a990e8c4eb92dd64e0ec483599820e45c35ac23 Mon Sep 17 00:00:00 2001 +From: Jouni Malinen +Date: Sat, 13 Mar 2021 23:14:23 +0200 +Subject: [PATCH] ASN.1: Add helper functions for recognizing tag values + +Signed-off-by: Jouni Malinen +[geomatsi@gmail.com: backport asn1_is_null() from upstream 9a990e8c4eb9] +Signed-off-by: Sergey Matyukevich +[yann.morin.1998@free.fr: + - reformat, keep the upstream sha1 and title, + - drop numbering +] +Signed-off-by: Yann E. MORIN +--- + src/tls/asn1.h | 102 +++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 102 insertions(+) + +diff --git a/src/tls/asn1.h b/src/tls/asn1.h +index de3430adb..a4d1be473 100644 +--- a/src/tls/asn1.h ++++ b/src/tls/asn1.h +@@ -66,6 +66,12 @@ struct wpabuf * asn1_build_alg_id(const struct asn1_oid *oid, + unsigned long asn1_bit_string_to_long(const u8 *buf, size_t len); + int asn1_oid_equal(const struct asn1_oid *a, const struct asn1_oid *b); + ++static inline bool asn1_is_null(const struct asn1_hdr *hdr) ++{ ++ return hdr->class == ASN1_CLASS_UNIVERSAL && ++ hdr->tag == ASN1_TAG_NULL; ++} ++ + extern struct asn1_oid asn1_sha1_oid; + extern struct asn1_oid asn1_sha256_oid; + +-- +2.25.1 + diff --git a/package/hostapd/Config.in b/package/hostapd/Config.in new file mode 100644 index 00000000..38cead90 --- /dev/null +++ b/package/hostapd/Config.in @@ -0,0 +1,115 @@ +config BR2_PACKAGE_HOSTAPD + bool "hostapd" + depends on BR2_USE_MMU # fork() + help + User space daemon for wireless access points. + + It implements IEEE 802.11 access point management, + IEEE 802.1X/WPA/WPA2/EAP authenticators, RADIUS client, + EAP server and RADIUS authentication server. + + http://w1.fi/hostapd/ + +if BR2_PACKAGE_HOSTAPD + +config BR2_PACKAGE_HOSTAPD_DRIVER_HOSTAP + bool "Enable hostap driver" + default y + select BR2_PACKAGE_HOSTAPD_HAS_WIFI_DRIVERS + help + Enable support for Host AP driver. + +config BR2_PACKAGE_HOSTAPD_DRIVER_NL80211 + bool "Enable nl80211 driver" + default y + depends on BR2_TOOLCHAIN_HAS_THREADS # libnl + select BR2_PACKAGE_LIBNL + select BR2_PACKAGE_HOSTAPD_HAS_WIFI_DRIVERS + help + Enable support for drivers using the nl80211 kernel interface. + +comment "nl80211 driver needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_HOSTAPD_DRIVER_WIRED + bool "Enable wired driver" + help + Enable support for wired authenticator. + +config BR2_PACKAGE_HOSTAPD_DRIVER_NONE + bool + default y + depends on !BR2_PACKAGE_HOSTAPD_DRIVER_HOSTAP + depends on !BR2_PACKAGE_HOSTAPD_DRIVER_NL80211 + depends on !BR2_PACKAGE_HOSTAPD_DRIVER_WIRED + +config BR2_PACKAGE_HOSTAPD_HAS_WIFI_DRIVERS + bool + +config BR2_PACKAGE_HOSTAPD_ACS + bool "Enable ACS" + default y + depends on BR2_PACKAGE_HOSTAPD_DRIVER_NL80211 + help + Enable support for standard ACS (Automatic Channel Selection). + Some propietary drivers use a custom algorithm which requires + channel to be set to '0' (which enables ACS in the config), + causing hostapd to use the standard one which doesn't work + for those cases. + +comment "ACS is currently only supported through the nl80211 driver" + depends on !BR2_PACKAGE_HOSTAPD_DRIVER_NL80211 + +config BR2_PACKAGE_HOSTAPD_EAP + bool "Enable EAP" + depends on !BR2_STATIC_LIBS + help + Enable support for EAP and RADIUS. + +comment "hostapd EAP needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +config BR2_PACKAGE_HOSTAPD_WPS + bool "Enable WPS" + help + Enable support for Wi-Fi Protected Setup. + +config BR2_PACKAGE_HOSTAPD_WPA3 + bool "Enable WPA3 support" + depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_OPENSSL_FORCE_LIBOPENSSL + help + Enable WPA3 support including OWE, SAE, DPP + +config BR2_PACKAGE_HOSTAPD_VLAN + bool "Enable VLAN support" + default y + help + Enable support for VLANs. + +if BR2_PACKAGE_HOSTAPD_VLAN + +config BR2_PACKAGE_HOSTAPD_VLAN_DYNAMIC + bool "Enable dynamic VLAN support" + default y + help + Enable support for fully dynamic VLANs. + This enables hostapd to automatically create + bridge and VLAN interfaces if necessary. + +config BR2_PACKAGE_HOSTAPD_VLAN_NETLINK + bool "Use netlink-based API for VLAN operations" + default y + depends on BR2_TOOLCHAIN_HAS_THREADS # libnl + select BR2_PACKAGE_LIBNL + help + Use netlink-based kernel API for VLAN operations + instead of ioctl(). + +comment "netlink-based VLAN support needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS + +endif # BR2_PACKAGE_HOSTAPD_VLAN + +endif diff --git a/package/hostapd/hostapd.hash b/package/hostapd/hostapd.hash new file mode 100644 index 00000000..9ac5f4b3 --- /dev/null +++ b/package/hostapd/hostapd.hash @@ -0,0 +1,7 @@ +# Locally calculated +sha256 881d7d6a90b2428479288d64233151448f8990ab4958e0ecaca7eeb3c9db2bd7 hostapd-2.9.tar.gz +sha256 2d9a5b9d616f1b4aa4a22b967cee866e2f69b798b0b46803a7928c8559842bd7 0001-WPS-UPnP-Do-not-allow-event-subscriptions-with-URLs-.patch +sha256 49feb35a5276279b465f6836d6fa2c6b34d94dc979e8b840d1918865c04260de 0002-WPS-UPnP-Fix-event-message-generation-using-a-long-U.patch +sha256 a8212a2d89a5bab2824d22b6047e7740553df163114fcec94832bfa9c5c5d78a 0003-WPS-UPnP-Handle-HTTP-initiation-failures-for-events-.patch +sha256 7f40cfec5faf5e927ea9028ab9392cd118685bde7229ad24210caf0a8f6e9611 0001-P2P-Fix-a-corner-case-in-peer-addition-based-on-PD-R.patch +sha256 9da5dd0776da266b180b915e460ff75c6ff729aca1196ab396529510f24f3761 README diff --git a/package/hostapd/hostapd.mk b/package/hostapd/hostapd.mk new file mode 100644 index 00000000..8820254f --- /dev/null +++ b/package/hostapd/hostapd.mk @@ -0,0 +1,162 @@ +################################################################################ +# +# hostapd +# +################################################################################ + +HOSTAPD_VERSION = 2.9 +HOSTAPD_SITE = http://w1.fi/releases +HOSTAPD_SUBDIR = hostapd +HOSTAPD_CONFIG = $(HOSTAPD_DIR)/$(HOSTAPD_SUBDIR)/.config +HOSTAPD_PATCH = \ + https://w1.fi/security/2020-1/0001-WPS-UPnP-Do-not-allow-event-subscriptions-with-URLs-.patch \ + https://w1.fi/security/2020-1/0002-WPS-UPnP-Fix-event-message-generation-using-a-long-U.patch \ + https://w1.fi/security/2020-1/0003-WPS-UPnP-Handle-HTTP-initiation-failures-for-events-.patch \ + https://w1.fi/security/2021-1/0001-P2P-Fix-a-corner-case-in-peer-addition-based-on-PD-R.patch +HOSTAPD_DEPENDENCIES = host-pkgconf +HOSTAPD_CFLAGS = $(TARGET_CFLAGS) +HOSTAPD_LICENSE = BSD-3-Clause +HOSTAPD_LICENSE_FILES = README + +# 0001-AP-Silently-ignore-management-frame-from-unexpected-.patch +HOSTAPD_IGNORE_CVES += CVE-2019-16275 + +# 0001-WPS-UPnP-Do-not-allow-event-subscriptions-with-URLs-.patch +HOSTAPD_IGNORE_CVES += CVE-2020-12695 + +# 0002-ASN.1-Validate-DigestAlgorithmIdentifier-parameters.patch +HOSTAPD_IGNORE_CVES += CVE-2021-30004 + +# 0001-P2P-Fix-a-corner-case-in-peer-addition-based-on-PD-R.patch +HOSTAPD_IGNORE_CVES += CVE-2021-27803 + +HOSTAPD_CPE_ID_VENDOR = w1.fi +HOSTAPD_CONFIG_SET = + +HOSTAPD_CONFIG_ENABLE = \ + CONFIG_INTERNAL_LIBTOMMATH \ + CONFIG_DEBUG_FILE \ + CONFIG_DEBUG_SYSLOG + +HOSTAPD_CONFIG_DISABLE = + +# Try to use openssl if it's already available +ifeq ($(BR2_PACKAGE_LIBOPENSSL),y) +HOSTAPD_DEPENDENCIES += host-pkgconf libopenssl +HOSTAPD_LIBS += `$(PKG_CONFIG_HOST_BINARY) --libs openssl` +HOSTAPD_CONFIG_EDITS += 's/\#\(CONFIG_TLS=openssl\)/\1/' +else +HOSTAPD_CONFIG_DISABLE += CONFIG_EAP_PWD CONFIG_EAP_TEAP +HOSTAPD_CONFIG_EDITS += 's/\#\(CONFIG_TLS=\).*/\1internal/' +endif + +ifeq ($(BR2_PACKAGE_HOSTAPD_DRIVER_HOSTAP),) +HOSTAPD_CONFIG_DISABLE += CONFIG_DRIVER_HOSTAP +endif + +ifeq ($(BR2_PACKAGE_HOSTAPD_DRIVER_NL80211),) +HOSTAPD_CONFIG_DISABLE += CONFIG_DRIVER_NL80211 +endif + +ifeq ($(BR2_PACKAGE_HOSTAPD_DRIVER_WIRED),y) +HOSTAPD_CONFIG_ENABLE += CONFIG_DRIVER_WIRED +endif + +ifeq ($(BR2_PACKAGE_HOSTAPD_DRIVER_NONE),y) +HOSTAPD_CONFIG_ENABLE += CONFIG_DRIVER_NONE +endif + +# Add options for wireless drivers +ifeq ($(BR2_PACKAGE_HOSTAPD_HAS_WIFI_DRIVERS),y) +HOSTAPD_CONFIG_ENABLE += \ + CONFIG_HS20 \ + CONFIG_IEEE80211AC \ + CONFIG_IEEE80211N \ + CONFIG_IEEE80211R \ + CONFIG_INTERWORKING +endif + +ifeq ($(BR2_PACKAGE_HOSTAPD_ACS),y) +HOSTAPD_CONFIG_ENABLE += CONFIG_ACS +endif + +ifeq ($(BR2_PACKAGE_HOSTAPD_EAP),y) +HOSTAPD_CONFIG_ENABLE += \ + CONFIG_EAP \ + CONFIG_RADIUS_SERVER + +# Enable both TLS v1.1 (CONFIG_TLSV11) and v1.2 (CONFIG_TLSV12) +HOSTAPD_CONFIG_ENABLE += CONFIG_TLSV1 +else +HOSTAPD_CONFIG_DISABLE += CONFIG_EAP +HOSTAPD_CONFIG_ENABLE += \ + CONFIG_NO_ACCOUNTING \ + CONFIG_NO_RADIUS +endif + +ifeq ($(BR2_PACKAGE_HOSTAPD_WPS),y) +HOSTAPD_CONFIG_ENABLE += CONFIG_WPS +endif + +ifeq ($(BR2_PACKAGE_HOSTAPD_WPA3),y) +HOSTAPD_CONFIG_SET += \ + CONFIG_DPP \ + CONFIG_SAE +HOSTAPD_CONFIG_ENABLE += \ + CONFIG_OWE +else +HOSTAPD_CONFIG_DISABLE += \ + CONFIG_OWE +endif + +ifeq ($(BR2_PACKAGE_HOSTAPD_VLAN),) +HOSTAPD_CONFIG_ENABLE += CONFIG_NO_VLAN +endif + +ifeq ($(BR2_PACKAGE_HOSTAPD_VLAN_DYNAMIC),y) +HOSTAPD_CONFIG_ENABLE += CONFIG_FULL_DYNAMIC_VLAN +HOSTAPD_CONFIG_SET += NEED_LINUX_IOCTL +endif + +ifeq ($(BR2_PACKAGE_HOSTAPD_VLAN_NETLINK),y) +HOSTAPD_CONFIG_ENABLE += CONFIG_VLAN_NETLINK +endif + +# Options for building with libnl +ifeq ($(BR2_PACKAGE_LIBNL),y) +HOSTAPD_DEPENDENCIES += libnl +HOSTAPD_CFLAGS += -I$(STAGING_DIR)/usr/include/libnl3/ +HOSTAPD_CONFIG_ENABLE += CONFIG_LIBNL32 +# libnl-3 needs -lm (for rint) and -lpthread if linking statically +# And library order matters hence stick -lnl-3 first since it's appended +# in the hostapd Makefiles as in LIBS+=-lnl-3 ... thus failing +ifeq ($(BR2_STATIC_LIBS),y) +HOSTAPD_LIBS += -lnl-3 -lm -lpthread +endif +endif + +define HOSTAPD_CONFIGURE_CMDS + cp $(@D)/hostapd/defconfig $(HOSTAPD_CONFIG) + sed -i $(patsubst %,-e 's/^#\(%\)/\1/',$(HOSTAPD_CONFIG_ENABLE)) \ + $(patsubst %,-e 's/^\(%\)/#\1/',$(HOSTAPD_CONFIG_DISABLE)) \ + $(patsubst %,-e '1i%=y',$(HOSTAPD_CONFIG_SET)) \ + $(patsubst %,-e %,$(HOSTAPD_CONFIG_EDITS)) \ + $(HOSTAPD_CONFIG) +endef + +define HOSTAPD_BUILD_CMDS + $(TARGET_MAKE_ENV) CFLAGS="$(HOSTAPD_CFLAGS)" \ + LDFLAGS="$(TARGET_LDFLAGS)" LIBS="$(HOSTAPD_LIBS)" \ + $(MAKE) CC="$(TARGET_CC)" -C $(@D)/$(HOSTAPD_SUBDIR) +endef + +define HOSTAPD_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/$(HOSTAPD_SUBDIR)/hostapd \ + $(TARGET_DIR)/usr/sbin/hostapd + $(INSTALL) -m 0755 -D $(@D)/$(HOSTAPD_SUBDIR)/hostapd_cli \ + $(TARGET_DIR)/usr/bin/hostapd_cli + $(INSTALL) -m 0644 -D $(@D)/$(HOSTAPD_SUBDIR)/hostapd.conf \ + $(TARGET_DIR)/etc/hostapd.conf +endef + +$(eval $(generic-package)) diff --git a/package/hplip/0001-build-use-pkg-config-to-discover-libusb.patch b/package/hplip/0001-build-use-pkg-config-to-discover-libusb.patch new file mode 100644 index 00000000..59b89a4a --- /dev/null +++ b/package/hplip/0001-build-use-pkg-config-to-discover-libusb.patch @@ -0,0 +1,45 @@ +From 1eed2b65eff4c66b80eab0ec46c6705de19bdb9d Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Thu, 21 Jan 2016 23:54:03 +0100 +Subject: [PATCH] build: use pkg-config to discover libusb + +This allows to remove hardcoded paths to libusb headers. + +Signed-off-by: Thomas Petazzoni +--- + Makefile.am | 4 ++-- + configure.in | 3 +-- + 2 files changed, 3 insertions(+), 4 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 73fed2e..3a4e899 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -92,8 +92,8 @@ libhpmud_la_SOURCES += io/hpmud/musb_libusb01.c + libhpmud_la_LDFLAGS += -lusb + else + libhpmud_la_SOURCES += io/hpmud/musb.c +-libhpmud_la_CFLAGS += -I/usr/include/libusb-1.0 +-libhpmud_la_LDFLAGS += -lusb-1.0 ++libhpmud_la_CFLAGS += $(LIBUSB_CFLAGS) ++libhpmud_la_LDFLAGS += $(LIBUSB_LIBS) + endif + + if NETWORK_BUILD +diff --git a/configure.in b/configure.in +index 3706645..8b06428 100755 +--- a/configure.in ++++ b/configure.in +@@ -542,8 +542,7 @@ if test "$hpijs_only_build" = "no" && test "$hpcups_only_build" = "no"; then + AC_CHECK_LIB([usb], [usb_init], [LIBS="$LIBS"], [AC_MSG_ERROR([cannot find libusb support], 2)]) + AC_CHECK_HEADERS(usb.h, ,[AC_MSG_ERROR([cannot find libusb-devel support], 11)]) + else +- AC_CHECK_LIB([usb-1.0], [libusb_init], [LIBS="$LIBS"], [AC_MSG_ERROR([cannot find libusb 1.0 support], 2)]) +- AC_CHECK_HEADERS(libusb-1.0/libusb.h, ,[AC_MSG_ERROR([cannot find libusb-1.0-devel support], 11)]) ++ PKG_CHECK_MODULES([LIBUSB], [libusb-1.0]) + fi + fi + +-- +2.6.4 + diff --git a/package/hplip/0002-configure.in-fix-AM_INIT_AUTOMAKE-call.patch b/package/hplip/0002-configure.in-fix-AM_INIT_AUTOMAKE-call.patch new file mode 100644 index 00000000..db2f0a43 --- /dev/null +++ b/package/hplip/0002-configure.in-fix-AM_INIT_AUTOMAKE-call.patch @@ -0,0 +1,35 @@ +From a2de7e834417de68db10dc6f09d5810b06e6cbc8 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Thu, 21 Jan 2016 23:54:50 +0100 +Subject: [PATCH] configure.in: fix AM_INIT_AUTOMAKE call + +Uncomment the appropriate call to AM_INIT_AUTOMAKE so that the +"foreign" option is passed, which avoids the need for creating various +unneeded files when autoreconfiguring. + +Add the subdir-objects options since the main Makefile.am references +files in subdirectories. This allows to silence a huge amount of +warning when autoreconfiguring. + +Signed-off-by: Thomas Petazzoni +--- + configure.in | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/configure.in b/configure.in +index 8b06428..680cad5 100755 +--- a/configure.in ++++ b/configure.in +@@ -27,8 +27,7 @@ + + #AC_PREREQ(2.59) + AC_INIT([HP Linux Imaging and Printing], [3.17.10], [3.17.10], [hplip]) +-#AM_INIT_AUTOMAKE([1.9 foreign]) +-AM_INIT_AUTOMAKE ++AM_INIT_AUTOMAKE([1.9 foreign subdir-objects]) + AC_DISABLE_STATIC + + # Checks for programs. +-- +2.6.4 + diff --git a/package/hplip/Config.in b/package/hplip/Config.in new file mode 100644 index 00000000..bab29303 --- /dev/null +++ b/package/hplip/Config.in @@ -0,0 +1,24 @@ +config BR2_PACKAGE_HPLIP + bool "hplip" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_CUPS + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + depends on !BR2_STATIC_LIBS # libdl + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_JPEG + help + HP Linux Imaging and Printing (HPLIP) + HPLIP is an HP-developed solution for printing, scanning, and + faxing with HP inkjet and laser based printers in Linux. The + HPLIP project provides printing support for 2,211 printer + models, including Deskjet, Officejet, Photosmart, PSC + (Print Scan Copy), Business Inkjet, LaserJet, Edgeline MFP, + and LaserJet MFP. + + http://hplipopensource.com/ + +comment "hplip needs a toolchain w/ C++, threads, dynamic library, gcc >= 4.9" + depends on BR2_PACKAGE_CUPS + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/hplip/hplip.hash b/package/hplip/hplip.hash new file mode 100644 index 00000000..0a4d7eeb --- /dev/null +++ b/package/hplip/hplip.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 0f7344174672f63a98a22f3c109005b6eb89fe738b7d466316bf2c53d083476c hplip-3.17.10.tar.gz +sha256 8af0e85fc6b88aec25200bcb4f604d886818482bd2c5cc81038f4c6a311c913a COPYING diff --git a/package/hplip/hplip.mk b/package/hplip/hplip.mk new file mode 100644 index 00000000..9eac83d5 --- /dev/null +++ b/package/hplip/hplip.mk @@ -0,0 +1,46 @@ +################################################################################ +# +# hplip +# +################################################################################ + +HPLIP_VERSION = 3.17.10 +HPLIP_SITE = http://downloads.sourceforge.net/hplip/hplip +HPLIP_AUTORECONF = YES +HPLIP_DEPENDENCIES = cups libusb jpeg host-pkgconf +HPLIP_LICENSE = GPL-2.0, BSD-3-Clause, MIT +HPLIP_LICENSE_FILES = COPYING + +HPLIP_CONF_OPTS = \ + --disable-qt4 \ + --disable-scan-build \ + --disable-gui-build \ + --disable-doc-build \ + --disable-network-build \ + --enable-hpcups-install \ + --disable-hpijs-install \ + --enable-cups-ppd-install \ + --enable-cups-drv-install \ + --disable-foomatic-ppd-install \ + --disable-foomatic-drv-install \ + --disable-foomatic-rip-hplip-install \ + --enable-new-hpcups \ + --enable-lite-build + +# build system does not support cups-config +HPLIP_CONF_ENV = LIBS=`$(STAGING_DIR)/usr/bin/cups-config --libs` + +ifeq ($(BR2_PACKAGE_DBUS),y) +HPLIP_CONF_OPTS += --enable-dbus-build +HPLIP_DEPENDENCIES += dbus +else +HPLIP_CONF_OPTS += --disable-dbus-build +endif + +define HPLIP_POST_INSTALL_TARGET_FIXUP + mkdir -p $(TARGET_DIR)/usr/share/hplip/data/models + cp $(@D)/data/models/* $(TARGET_DIR)/usr/share/hplip/data/models +endef +HPLIP_POST_INSTALL_TARGET_HOOKS += HPLIP_POST_INSTALL_TARGET_FIXUP + +$(eval $(autotools-package)) diff --git a/package/htop/Config.in b/package/htop/Config.in new file mode 100644 index 00000000..214a9a1c --- /dev/null +++ b/package/htop/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_HTOP + bool "htop" + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS # dlopen() + select BR2_PACKAGE_NCURSES + help + htop is an interactive text-mode process viewer for Linux. + It aims to be a better top. + + https://htop.dev/ + +comment "htop needs a toolchain w/ dynamic library" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS diff --git a/package/htop/htop.hash b/package/htop/htop.hash new file mode 100644 index 00000000..34d95eb7 --- /dev/null +++ b/package/htop/htop.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 123476d56a5e6a219654eebb6b2ec747dfa364f39c01a6475bf8030a25c81bff htop-ce6d60e7def146c13d0b8bca4642e7401a0a8995.tar.gz +sha256 c228cc14df980a23ea0c3c9ac957b904dd6a8514f6283db403de22e9179471be COPYING diff --git a/package/htop/htop.mk b/package/htop/htop.mk new file mode 100644 index 00000000..bb2bcb29 --- /dev/null +++ b/package/htop/htop.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# htop +# +################################################################################ + +# This commit hash corresponds to version 3.0.5. +# htop sources were moved from bintray to github and the sources tar archive +# was also changed (the build process requires `HTOP_AUTORECONF = YES` now). We +# use commit hash instead of git tag here to avoid breaking existing source +# caches +HTOP_VERSION = ce6d60e7def146c13d0b8bca4642e7401a0a8995 +HTOP_SITE = $(call github,htop-dev,htop,$(HTOP_VERSION)) +HTOP_DEPENDENCIES = ncurses +HTOP_AUTORECONF = YES +# Prevent htop build system from searching the host paths +HTOP_CONF_ENV = HTOP_NCURSES_CONFIG_SCRIPT=$(STAGING_DIR)/usr/bin/$(NCURSES_CONFIG_SCRIPTS) +HTOP_LICENSE = GPL-2.0 +HTOP_LICENSE_FILES = COPYING + +ifeq ($(BR2_PACKAGE_LM_SENSORS),y) +HTOP_CONF_OPTS += --with-sensors +HTOP_DEPENDENCIES += lm-sensors +else +HTOP_CONF_OPTS += --without-sensors +endif + +ifeq ($(BR2_PACKAGE_NCURSES_WCHAR),y) +HTOP_CONF_OPTS += --enable-unicode +else +HTOP_CONF_OPTS += --disable-unicode +endif + +$(eval $(autotools-package)) diff --git a/package/htpdate/Config.in b/package/htpdate/Config.in new file mode 100644 index 00000000..42c10c30 --- /dev/null +++ b/package/htpdate/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_HTPDATE + bool "htpdate" + depends on BR2_USE_MMU # fork() + help + The HTTP Time Protocol (HTP) is used to synchronize a + computer's time with web servers as reference time source. + + https://github.com/angeloc/htpdate diff --git a/package/htpdate/S43htpdate b/package/htpdate/S43htpdate new file mode 100644 index 00000000..75f9a995 --- /dev/null +++ b/package/htpdate/S43htpdate @@ -0,0 +1,51 @@ +#!/bin/sh + +DAEMON="htpdate" +PIDFILE="/var/run/$DAEMON.pid" + +HTPDATE_ARGS="-a -s -t https://google.com" +test -r "/etc/default/$DAEMON" && . "/etc/default/$DAEMON" + +start() { + printf 'Starting %s: ' "$DAEMON" + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon -S -q -x "/usr/bin/$DAEMON" \ + -- -D -i "$PIDFILE" $HTPDATE_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + rm -f "$PIDFILE" + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +case "$1" in + start|stop|restart) + "$1";; + reload) + # Restart, since there is no true "reload" feature. + restart;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/htpdate/htpdate.hash b/package/htpdate/htpdate.hash new file mode 100644 index 00000000..824266c1 --- /dev/null +++ b/package/htpdate/htpdate.hash @@ -0,0 +1,3 @@ +# Locally calculated: +sha256 d2cff522b8f53b00769dcca77d8025b19238ed35d702a4739dc05e387f718909 htpdate-1.2.6.tar.gz +sha256 b1c8d41afde943cacedab52cbb44ef7ffb7026e738b9c891009e89559fe31c20 LICENSE diff --git a/package/htpdate/htpdate.mk b/package/htpdate/htpdate.mk new file mode 100644 index 00000000..52022346 --- /dev/null +++ b/package/htpdate/htpdate.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# htpdate +# +################################################################################ + +HTPDATE_VERSION = 1.2.6 +HTPDATE_SITE = $(call github,angeloc,htpdate,v$(HTPDATE_VERSION)) +HTPDATE_LICENSE = GPL-2.0+ +HTPDATE_LICENSE_FILES = LICENSE + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +HTPDATE_BUILD_OPTS = ENABLE_HTTPS=1 +HTPDATE_DEPENDENCIES += openssl host-pkgconf +endif + +define HTPDATE_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) $(HTPDATE_BUILD_OPTS) +endef + +define HTPDATE_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +define HTPDATE_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/htpdate/S43htpdate \ + $(TARGET_DIR)/etc/init.d/S43htpdate +endef + +define HTPDATE_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0644 package/htpdate/htpdate.service \ + $(TARGET_DIR)/usr/lib/systemd/system/htpdate.service +endef + +$(eval $(generic-package)) diff --git a/package/htpdate/htpdate.service b/package/htpdate/htpdate.service new file mode 100644 index 00000000..b7f1371b --- /dev/null +++ b/package/htpdate/htpdate.service @@ -0,0 +1,13 @@ +[Unit] +Description=htpdate daemon +After=network.target + +[Service] +Type=forking +PIDFile=/run/htpdate.pid +Environment=HTPDATE_ARGS="-a -s -t https://www.google.com" +EnvironmentFile=-/etc/default/htpdate +ExecStart=/usr/bin/htpdate -D -i /run/htpdate.pid $HTPDATE_ARGS + +[Install] +WantedBy=multi-user.target diff --git a/package/httping/0001-fix-math-library-linking.patch b/package/httping/0001-fix-math-library-linking.patch new file mode 100644 index 00000000..0078f41c --- /dev/null +++ b/package/httping/0001-fix-math-library-linking.patch @@ -0,0 +1,25 @@ +Move LDFLAGS+=-lm option to the end. +The order of the math library directive '-lm' matters. + +Signed-off-by: Yuvaraj Patil +--- +diff -Nurp httping-2.3.4_orig/Makefile httping-2.3.4/Makefile +--- httping-2.3.4_orig/Makefile 2014-07-23 16:16:36.495546288 +0530 ++++ httping-2.3.4/Makefile 2014-07-23 16:18:42.547541002 +0530 +@@ -37,7 +37,6 @@ DEBUG=yes + WFLAGS=-Wall -W + OFLAGS= + CFLAGS+=$(WFLAGS) $(OFLAGS) -DVERSION=\"$(VERSION)\" -DLOCALEDIR=\"$(LOCALEDIR)\" +-LDFLAGS+=-lm + + PACKAGE=$(TARGET)-$(VERSION) + PREFIX?=/usr +@@ -97,6 +96,8 @@ ifeq ($(ARM),yes) + CC=arm-linux-gcc + endif + ++LDFLAGS+=-lm ++ + all: $(TARGET) $(TRANSLATIONS) + + $(TARGET): $(OBJS) diff --git a/package/httping/0002-Makefile-allow-build-without-gettext.patch b/package/httping/0002-Makefile-allow-build-without-gettext.patch new file mode 100644 index 00000000..aec1de47 --- /dev/null +++ b/package/httping/0002-Makefile-allow-build-without-gettext.patch @@ -0,0 +1,48 @@ +From fe7d6c5a0e5dfe129f228498037393d23d6ae890 Mon Sep 17 00:00:00 2001 +From: Baruch Siach +Date: Tue, 18 Jul 2017 19:09:03 +0300 +Subject: [PATCH] Makefile: allow build without gettext + +The msgfmt command is part of the gettext package, and is used to generate +binary translation files. When gettext is not installed, build fails. +Translation files are not always needed on size constrained embedded targets. +Add an option to disable translation files generation using the NO_GETTEXT +variable. + +Signed-off-by: Baruch Siach +--- +Upstream status: https://github.com/flok99/httping/pull/36 + + Makefile | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/Makefile b/Makefile +index 46127f4cdde1..160cc1794ec8 100644 +--- a/Makefile ++++ b/Makefile +@@ -55,7 +55,9 @@ MKDIR=/bin/mkdir + ARCHIVE=/bin/tar cf - + COMPRESS=/bin/gzip -9 + ++ifneq ($(NO_GETTEXT),yes) + TRANSLATIONS=nl.mo ru.mo ++endif + + OBJS=gen.o http.o io.o error.o utils.o main.o tcp.o res.o socks5.o kalman.o cookies.o help.o colors.o + +@@ -118,10 +120,12 @@ install: $(TARGET) $(TRANSLATIONS) + ifneq ($(DEBUG),yes) + $(STRIP) $(DESTDIR)/$(BINDIR)/$(TARGET) + endif ++ifneq ($(NO_GETTEXT),yes) + mkdir -p $(DESTDIR)/$(PREFIX)/share/locale/nl/LC_MESSAGES + cp nl.mo $(DESTDIR)/$(PREFIX)/share/locale/nl/LC_MESSAGES/httping.mo + mkdir -p $(DESTDIR)/$(PREFIX)/share/locale/ru/LC_MESSAGES + cp ru.mo $(DESTDIR)/$(PREFIX)/share/locale/ru/LC_MESSAGES/httping.mo ++endif + + + makefile.inc: +-- +2.13.2 + diff --git a/package/httping/Config.in b/package/httping/Config.in new file mode 100644 index 00000000..c0e5071c --- /dev/null +++ b/package/httping/Config.in @@ -0,0 +1,22 @@ +comment "httping needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR + +config BR2_PACKAGE_HTTPING + bool "httping" + depends on BR2_USE_WCHAR + help + Httping is like 'ping' but for http-requests. + Give it an url, and it'll show you how long it takes to + connect, send a request and retrieve the reply (only the + headers). + Be aware that the transmission across the network also takes + time! So it measures the latency of the webserver + network. + + http://www.vanheusden.com/httping/ + +if BR2_PACKAGE_HTTPING + +config BR2_PACKAGE_HTTPING_TFO + bool "TCP Fast Open (TFO) support" + +endif diff --git a/package/httping/httping.hash b/package/httping/httping.hash new file mode 100644 index 00000000..c3961576 --- /dev/null +++ b/package/httping/httping.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 3e895a0a6d7bd79de25a255a1376d4da88eb09c34efdd0476ab5a907e75bfaf8 httping-2.5.tgz +sha256 c5db2e5b9a692fcdf2bd370f1533529063fbcf8947a8f5ee9d4b050a14e0566d license.txt diff --git a/package/httping/httping.mk b/package/httping/httping.mk new file mode 100644 index 00000000..b3a625a8 --- /dev/null +++ b/package/httping/httping.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# httping +# +################################################################################ + +HTTPING_VERSION = 2.5 +HTTPING_SOURCE = httping-$(HTTPING_VERSION).tgz +HTTPING_SITE = http://www.vanheusden.com/httping +HTTPING_LICENSE = GPL-2.0 +HTTPING_LICENSE_FILES = license.txt +HTTPING_LDFLAGS = $(TARGET_LDFLAGS) \ + $(TARGET_NLS_LIBS) \ + $(if $(BR2_PACKAGE_LIBICONV),-liconv) +HTTPING_DEPENDENCIES = \ + $(TARGET_NLS_DEPENDENCIES) \ + $(if $(BR2_PACKAGE_LIBICONV),libiconv) \ + $(if $(BR2_PACKAGE_NCURSES_WCHAR),ncurses) \ + $(if $(BR2_PACKAGE_OPENSSL),openssl) \ + $(if $(BR2_PACKAGE_FFTW_DOUBLE),fftw-double) +HTTPING_MAKE_OPTS = $(TARGET_CONFIGURE_OPTS) \ + FW=$(if $(BR2_PACKAGE_FFTW_DOUBLE),yes,no) \ + NC=$(if $(BR2_PACKAGE_NCURSES_WCHAR),yes,no) \ + SSL=$(if $(BR2_PACKAGE_OPENSSL),yes,no) \ + TFO=$(if $(BR2_PACKAGE_HTTPING_TFO),yes,no) \ + NO_GETTEXT=$(if $(BR2_SYSTEM_ENABLE_NLS),no,yes) + +define HTTPING_BUILD_CMDS + $(HTTPING_MAKE_OPTS) LDFLAGS="$(HTTPING_LDFLAGS)" \ + $(MAKE) DEBUG=no -C $(@D) +endef + +define HTTPING_INSTALL_TARGET_CMDS + $(HTTPING_MAKE_OPTS) $(MAKE) DESTDIR=$(TARGET_DIR) -C $(@D) install +endef + +$(eval $(generic-package)) diff --git a/package/hwdata/Config.in b/package/hwdata/Config.in new file mode 100644 index 00000000..f563988a --- /dev/null +++ b/package/hwdata/Config.in @@ -0,0 +1,38 @@ +config BR2_PACKAGE_HWDATA + bool "hwdata" + help + Various hardware identification and configuration data + + - Individual Address Block (IAB) and Organizationally Unique + Identifier (OUI) databases, from IEEE Registration Authority + - PCI ID database + - PNP ID database (from Microsoft) + - USB ID database + + https://github.com/vcrhonek/hwdata + +if BR2_PACKAGE_HWDATA + +config BR2_PACKAGE_HWDATA_IAB_OUI_TXT + bool "install iab.txt and oui.txt" + help + Install iab.txt and oui.txt + +config BR2_PACKAGE_HWDATA_PCI_IDS + bool "install pci.ids" + default y + help + Install pci.ids + +config BR2_PACKAGE_HWDATA_PNP_IDS + bool "install pnp.ids" + help + Install pnp.ids + +config BR2_PACKAGE_HWDATA_USB_IDS + bool "install usb.ids" + default y + help + Install usb.ids + +endif diff --git a/package/hwdata/hwdata.hash b/package/hwdata/hwdata.hash new file mode 100644 index 00000000..489f47a7 --- /dev/null +++ b/package/hwdata/hwdata.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 f1e79131c870dce4a3b4b75edeefc5c9aef416d488a131c66cb6893be743be63 hwdata-0.342.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING +sha256 21d0406f93e884a050426ebc21931839a45d56bfcbcbfdda7686d583f36f107f LICENSE diff --git a/package/hwdata/hwdata.mk b/package/hwdata/hwdata.mk new file mode 100644 index 00000000..7d718bac --- /dev/null +++ b/package/hwdata/hwdata.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# hwdata +# +################################################################################ + +HWDATA_VERSION = 0.342 +HWDATA_SITE = $(call github,vcrhonek,hwdata,v$(HWDATA_VERSION)) +HWDATA_LICENSE = GPL-2.0+, BSD-3-Clause, XFree86 1.0 +HWDATA_LICENSE_FILES = COPYING LICENSE + +HWDATA_FILES = \ + $(if $(BR2_PACKAGE_HWDATA_IAB_OUI_TXT),iab.txt oui.txt) \ + $(if $(BR2_PACKAGE_HWDATA_PCI_IDS),pci.ids) \ + $(if $(BR2_PACKAGE_HWDATA_PNP_IDS),pnp.ids) \ + $(if $(BR2_PACKAGE_HWDATA_USB_IDS),usb.ids) + +ifneq ($(strip $(HWDATA_FILES)),) +define HWDATA_INSTALL_TARGET_CMDS + $(INSTALL) -d -m 755 $(TARGET_DIR)/usr/share/hwdata + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/share/hwdata \ + $(addprefix $(@D)/,$(HWDATA_FILES)) +endef +endif + +$(eval $(generic-package)) diff --git a/package/hwloc/Config.in b/package/hwloc/Config.in new file mode 100644 index 00000000..1fb23027 --- /dev/null +++ b/package/hwloc/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_HWLOC + bool "hwloc" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Portable Hardware Locality + + Provides a portable abstraction (across OS, versions, + architectures, ...) of the hierarchical topology of modern + architectures, including NUMA memory nodes, sockets, shared + caches, cores and simultaneous multithreading. + + http://www.open-mpi.org/projects/hwloc/ + +comment "hwloc needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/hwloc/hwloc.hash b/package/hwloc/hwloc.hash new file mode 100644 index 00000000..9637ba13 --- /dev/null +++ b/package/hwloc/hwloc.hash @@ -0,0 +1,6 @@ +# From https://www.open-mpi.org/software/hwloc/v1.11/ +md5 3c792e23c209e9e1bafe9bdbc613d401 hwloc-1.11.13.tar.bz2 +sha1 c3ae96a845ff3800f28b28fdb48146f971589653 hwloc-1.11.13.tar.bz2 +# Locally computed +sha256 a4494b7765f517c0990d1c7f09d98cb87755bb6b841e4e2cbfebca1b14bac9c8 hwloc-1.11.13.tar.bz2 +sha256 c1816ed2da6aea779c4f27352f807c8bbaf545c2843d7b2ae818e1d529028821 COPYING diff --git a/package/hwloc/hwloc.mk b/package/hwloc/hwloc.mk new file mode 100644 index 00000000..b3cc5604 --- /dev/null +++ b/package/hwloc/hwloc.mk @@ -0,0 +1,57 @@ +################################################################################ +# +# hwloc +# +################################################################################ + +HWLOC_VERSION_MAJOR = 1.11 +HWLOC_VERSION = $(HWLOC_VERSION_MAJOR).13 +HWLOC_SOURCE = hwloc-$(HWLOC_VERSION).tar.bz2 +HWLOC_SITE = http://www.open-mpi.org/software/hwloc/v$(HWLOC_VERSION_MAJOR)/downloads +HWLOC_LICENSE = BSD-3-Clause +HWLOC_LICENSE_FILES = COPYING +HWLOC_DEPENDENCIES = host-pkgconf +HWLOC_INSTALL_STAGING = YES +HWLOC_SELINUX_MODULES = hwloc + +HWLOC_CONF_OPTS = \ + --disable-opencl \ + --disable-cuda \ + --disable-nvml \ + --disable-gl \ + --disable-cairo \ + --disable-doxygen + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +HWLOC_CONF_OPTS += --enable-libudev +HWLOC_DEPENDENCIES += udev +else +HWLOC_CONF_OPTS += --disable-libudev +endif + +ifeq ($(BR2_PACKAGE_LIBPCIACCESS),y) +HWLOC_CONF_OPTS += --enable-pci +HWLOC_DEPENDENCIES += libpciaccess +else +HWLOC_CONF_OPTS += --disable-pci +endif + +ifeq ($(BR2_PACKAGE_LIBXML2),y) +HWLOC_CONF_OPTS += --enable-libxml2 +HWLOC_DEPENDENCIES += libxml2 +else +HWLOC_CONF_OPTS += --disable-libxml2 +endif + +ifeq ($(BR2_PACKAGE_NCURSES),y) +HWLOC_DEPENDENCIES += ncurses +endif + +ifeq ($(BR2_PACKAGE_NUMACTL),y) +HWLOC_CONF_OPTS += --enable-libnuma +HWLOC_DEPENDENCIES += numactl +else +HWLOC_CONF_OPTS += --disable-libnuma +endif + +$(eval $(autotools-package)) diff --git a/package/i2c-tools/0001-Revert-tools-i2ctransfer-add-check-for-returned-leng.patch b/package/i2c-tools/0001-Revert-tools-i2ctransfer-add-check-for-returned-leng.patch new file mode 100644 index 00000000..7173efe2 --- /dev/null +++ b/package/i2c-tools/0001-Revert-tools-i2ctransfer-add-check-for-returned-leng.patch @@ -0,0 +1,41 @@ +From 06a1909ae1e8ae1edc70dc48dd22a32ba5eceecb Mon Sep 17 00:00:00 2001 +From: Wolfram Sang +Date: Tue, 9 Feb 2021 12:05:56 +0100 +Subject: [PATCH] Revert "tools: i2ctransfer: add check for returned length + from driver" + +This reverts commit 34806fc4e7090b34e32fa1110d546ab5ce01a6a0. It was +developed against an experimental kernel. The regular kernel does not +update the new message length to userspace, so the check is always false +positive. We can't change the kernel behaviour because it would break +the ABI. So revert this commit. + +Signed-off-by: Wolfram Sang +Signed-off-by: Wolfram Sang +[Peter: drop CHANGES update] +Signed-off-by: Peter Korsgaard +--- + tools/i2ctransfer.c | 7 +------ + 1 file changed, 1 insertions(+), 6 deletions(-) + +diff --git a/tools/i2ctransfer.c b/tools/i2ctransfer.c +index f2a4df8..b0e8d43 100644 +--- a/tools/i2ctransfer.c ++++ b/tools/i2ctransfer.c +@@ -88,12 +88,7 @@ static void print_msgs(struct i2c_msg *msgs, __u32 nmsgs, unsigned flags) + int recv_len = msgs[i].flags & I2C_M_RECV_LEN; + int print_buf = (read && (flags & PRINT_READ_BUF)) || + (!read && (flags & PRINT_WRITE_BUF)); +- __u16 len = msgs[i].len; +- +- if (recv_len && print_buf && len != msgs[i].buf[0] + 1) { +- fprintf(stderr, "Correcting wrong msg length after recv_len! Please fix the I2C driver and/or report.\n"); +- len = msgs[i].buf[0] + 1; +- } ++ __u16 len = recv_len ? msgs[i].buf[0] + 1 : msgs[i].len; + + if (flags & PRINT_HEADER) { + fprintf(output, "msg %u: addr 0x%02x, %s, len ", +-- +2.20.1 + diff --git a/package/i2c-tools/Config.in b/package/i2c-tools/Config.in new file mode 100644 index 00000000..d9b8dd9a --- /dev/null +++ b/package/i2c-tools/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_I2C_TOOLS + bool "i2c-tools" + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + Heterogeneous set of I2C tools for Linux + + This package contains a heterogeneous set of I2C tools for + Linux: a bus probing tool, a chip dumper, register-level + access helpers, EEPROM decoding scripts, and more. + + https://i2c.wiki.kernel.org/index.php/I2C_Tools diff --git a/package/i2c-tools/i2c-tools.hash b/package/i2c-tools/i2c-tools.hash new file mode 100644 index 00000000..150bdb2e --- /dev/null +++ b/package/i2c-tools/i2c-tools.hash @@ -0,0 +1,7 @@ +# From https://www.kernel.org/pub/software/utils/i2c-tools/sha256sums.asc +sha256 37f2dabc7082d185903ff21d1f584b5dcb4dd2eb2c879bbd8d7c50ae900dacd6 i2c-tools-4.2.tar.xz + +# License files +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LGPL +sha256 370e8bc3d45744170cc4b12dc5135b107fa40a00179a19973fbd714146dec04c README diff --git a/package/i2c-tools/i2c-tools.mk b/package/i2c-tools/i2c-tools.mk new file mode 100644 index 00000000..8936f6c4 --- /dev/null +++ b/package/i2c-tools/i2c-tools.mk @@ -0,0 +1,72 @@ +################################################################################ +# +# i2c-tools +# +################################################################################ + +I2C_TOOLS_VERSION = 4.2 +I2C_TOOLS_SOURCE = i2c-tools-$(I2C_TOOLS_VERSION).tar.xz +I2C_TOOLS_SITE = https://www.kernel.org/pub/software/utils/i2c-tools +I2C_TOOLS_LICENSE = GPL-2.0+, GPL-2.0 (py-smbus), LGPL-2.1+ (libi2c) +I2C_TOOLS_LICENSE_FILES = COPYING COPYING.LGPL README +I2C_TOOLS_CPE_ID_VENDOR = i2c-tools_project +I2C_TOOLS_MAKE_OPTS = EXTRA=eeprog +I2C_TOOLS_INSTALL_STAGING = YES + +ifeq ($(BR2_PACKAGE_PYTHON),y) +I2C_TOOLS_DEPENDENCIES += python +endif + +ifeq ($(BR2_PACKAGE_PYTHON3),y) +I2C_TOOLS_DEPENDENCIES += python3 +endif + +ifeq ($(BR2_STATIC_LIBS),y) +I2C_TOOLS_MAKE_OPTS += BUILD_DYNAMIC_LIB=0 USE_STATIC_LIB=1 +endif + +ifeq ($(BR2_SHARED_LIBS),y) +I2C_TOOLS_MAKE_OPTS += BUILD_STATIC_LIB=0 +endif + +# Build/install steps mirror the distutil python package type in the python package +# infrastructure +ifeq ($(BR2_PACKAGE_PYTHON)$(BR2_PACKAGE_PYTHON3),y) +# BASE_ENV taken from PKG_PYTHON_DISTUTILS_ENV in package/pkg-python.mk +I2C_TOOLS_PYTHON_BASE_ENV = \ + $(PKG_PYTHON_DISTUTILS_ENV) \ + CFLAGS="$(TARGET_CFLAGS) -I../include" + +define I2C_TOOLS_BUILD_PYSMBUS + (cd $(@D)/py-smbus; \ + $(I2C_TOOLS_PYTHON_BASE_ENV) \ + $(HOST_DIR)/bin/python setup.py build \ + $(PKG_PYTHON_DISTUTILS_BUILD_OPTS)) +endef + +define I2C_TOOLS_INSTALL_PYSMBUS + (cd $(@D)/py-smbus; \ + $(I2C_TOOLS_PYTHON_BASE_ENV) \ + $(HOST_DIR)/bin/python setup.py install \ + $(PKG_PYTHON_DISTUTILS_INSTALL_TARGET_OPTS)) +endef + +endif # BR2_PACKAGE_PYTHON + +define I2C_TOOLS_BUILD_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) $(I2C_TOOLS_MAKE_OPTS) -C $(@D) + $(I2C_TOOLS_BUILD_PYSMBUS) +endef + +define I2C_TOOLS_INSTALL_TARGET_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) $(I2C_TOOLS_MAKE_OPTS) \ + DESTDIR="$(TARGET_DIR)" PREFIX=/usr -C $(@D) install + $(I2C_TOOLS_INSTALL_PYSMBUS) +endef + +define I2C_TOOLS_INSTALL_STAGING_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) $(I2C_TOOLS_MAKE_OPTS) \ + DESTDIR="$(STAGING_DIR)" PREFIX=/usr -C $(@D) install +endef + +$(eval $(generic-package)) diff --git a/package/i2pd/Config.in b/package/i2pd/Config.in new file mode 100644 index 00000000..5b9ac33e --- /dev/null +++ b/package/i2pd/Config.in @@ -0,0 +1,37 @@ +config BR2_PACKAGE_I2PD + bool "i2pd" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_ATOMIC + # pthread_condattr_setclock + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR # boost + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # exception_ptr + select BR2_PACKAGE_BOOST + select BR2_PACKAGE_BOOST_DATE_TIME + select BR2_PACKAGE_BOOST_FILESYSTEM + select BR2_PACKAGE_BOOST_PROGRAM_OPTIONS + select BR2_PACKAGE_BOOST_SYSTEM + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_ZLIB + help + i2pd (I2P Daemon) is a full-featured C++ implementation of I2P + client. + + I2P (Invisible Internet Protocol) is a universal anonymous + network layer. + All communications over I2P are anonymous and end-to-end + encrypted, participants don't reveal their real IP addresses. + + http://i2pd.website + +comment "i2pd needs a toolchain w/ C++, NPTL, wchar" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_ATOMIC + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_HAS_THREADS_NPTL || !BR2_USE_WCHAR + +comment "i2pd needs exception_ptr" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_ATOMIC + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 diff --git a/package/i2pd/S99i2pd b/package/i2pd/S99i2pd new file mode 100644 index 00000000..32775cdb --- /dev/null +++ b/package/i2pd/S99i2pd @@ -0,0 +1,38 @@ +#!/bin/sh + +NAME=i2pd +PIDFILE=/var/run/$NAME.pid +DAEMON=/usr/bin/$NAME +DAEMON_ARGS="--conf=/etc/i2pd/i2pd.conf --tunconf=/etc/i2pd/tunnels.conf --pidfile=/var/run/i2pd.pid --logfile=/var/log/i2pd.log --daemon --service" + +start() { + printf "Starting $NAME: " + start-stop-daemon -S -q -m -b -p $PIDFILE --exec $DAEMON -- $DAEMON_ARGS + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +stop() { + printf "Stopping $NAME: " + start-stop-daemon -K -q -p $PIDFILE + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/i2pd/i2pd.hash b/package/i2pd/i2pd.hash new file mode 100644 index 00000000..4bfaecab --- /dev/null +++ b/package/i2pd/i2pd.hash @@ -0,0 +1,4 @@ +# From https://github.com/PurpleI2P/i2pd/releases/download/2.35.0/SHA512SUMS +sha512 cffc41484a63eba7c7091957cd4d8b8584bb02580d70c69132f1447018be5b3cde7893ae4a0bcb914d53e95c089d4253ece6e20442c9da7810e7800a2b99b117 i2pd-2.35.0.tar.gz +# Locally computed: +sha256 9c87aff490b272254d716475e3c4973f5f64af1d18f9f6962c1e61e252e1ad9a LICENSE diff --git a/package/i2pd/i2pd.mk b/package/i2pd/i2pd.mk new file mode 100644 index 00000000..ef6a467d --- /dev/null +++ b/package/i2pd/i2pd.mk @@ -0,0 +1,61 @@ +################################################################################ +# +# i2pd +# +################################################################################ + +I2PD_VERSION = 2.35.0 +I2PD_SITE = $(call github,PurpleI2P,i2pd,$(I2PD_VERSION)) +I2PD_LICENSE = BSD-3-Clause +I2PD_LICENSE_FILES = LICENSE +I2PD_SUBDIR = build +I2PD_DEPENDENCIES = \ + boost \ + openssl \ + zlib + +I2PD_CONF_OPTS += -DWITH_GUI=OFF + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +I2PD_CONF_OPTS += \ + -DHAVE_CXX_ATOMICS_WITHOUT_LIB=OFF \ + -DHAVE_CXX_ATOMICS64_WITHOUT_LIB=OFF +endif + +ifeq ($(BR2_STATIC_LIBS),y) +I2PD_CONF_OPTS += -DWITH_STATIC=ON +else +I2PD_CONF_OPTS += -DWITH_STATIC=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBMINIUPNPC),y) +I2PD_DEPENDENCIES += libminiupnpc +I2PD_CONF_OPTS += -DWITH_UPNP=ON +else +I2PD_CONF_OPTS += -DWITH_UPNP=OFF +endif + +define I2PD_INSTALL_CONFIGURATION_FILES + $(INSTALL) -D -m 644 $(@D)/contrib/i2pd.conf \ + $(TARGET_DIR)/etc/i2pd/i2pd.conf + $(INSTALL) -D -m 644 $(@D)/contrib/tunnels.conf \ + $(TARGET_DIR)/etc/i2pd/tunnels.conf + mkdir -p $(TARGET_DIR)/var/lib/i2pd + cp -a $(@D)/contrib/certificates $(TARGET_DIR)/var/lib/i2pd +endef + +define I2PD_USERS + i2pd -1 i2pd -1 * /var/lib/i2pd - - I2P Daemon +endef + +define I2PD_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/i2pd/S99i2pd \ + $(TARGET_DIR)/etc/init.d/S99i2pd +endef + +define I2PD_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/i2pd/i2pd.service \ + $(TARGET_DIR)/usr/lib/systemd/system/i2pd.service +endef + +$(eval $(cmake-package)) diff --git a/package/i2pd/i2pd.service b/package/i2pd/i2pd.service new file mode 100644 index 00000000..0fdee595 --- /dev/null +++ b/package/i2pd/i2pd.service @@ -0,0 +1,29 @@ +[Unit] +Description=I2P Router written in C++ +After=network.target + +[Service] +User=i2pd +Group=i2pd +RuntimeDirectory=i2pd +RuntimeDirectoryMode=0700 +LogsDirectory=i2pd +LogsDirectoryMode=0700 +Type=simple +ExecStart=/usr/bin/i2pd --conf=/etc/i2pd/i2pd.conf --tunconf=/etc/i2pd/tunnels.conf --pidfile=/run/i2pd/i2pd.pid --logfile=/var/log/i2pd/i2pd.log --daemon --service +ExecReload=/bin/kill -HUP $MAINPID +PIDFile=/run/i2pd/i2pd.pid +### Uncomment, if auto restart needed +#Restart=on-failure + +### Use SIGINT for graceful stop daemon. +# i2pd stops accepting new tunnels and waits ~10 min while old ones do not die. +KillSignal=SIGINT +TimeoutStopSec=10m + +# If you have problems with hanging i2pd, you can try enable this +#LimitNOFILE=4096 +PrivateDevices=yes + +[Install] +WantedBy=multi-user.target diff --git a/package/i7z/0001-fix-build-with-gcc-10.patch b/package/i7z/0001-fix-build-with-gcc-10.patch new file mode 100644 index 00000000..a25e937b --- /dev/null +++ b/package/i7z/0001-fix-build-with-gcc-10.patch @@ -0,0 +1,63 @@ +From 6e4e407a374512b5bcb5a7c184258653e472ef9f Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Tue, 19 Jan 2021 07:47:58 +0100 +Subject: [PATCH] fix build with gcc 10 + +Fix the following build failure with gcc 10 (which defaults to +-fno-common): + +/home/buildroot/autobuild/instance-2/output-1/host/bin/x86_64-linux-gcc -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -fno-schedule-insns2 -fno-schedule-insns -fno-inline-small-functions -fno-caller-saves -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DBUILD_MAIN -Wimplicit-function-declaration -Dx64_BIT -o i7z i7z.o helper_functions.o i7z_Single_Socket.o i7z_Dual_Socket.o -lncurses -lpthread -lrt -lm +/home/buildroot/autobuild/instance-2/output-1/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-gnu/10.2.0/../../../../x86_64-buildroot-linux-gnu/bin/ld: i7z_Dual_Socket.o:(.bss+0x0): multiple definition of `global_ts'; i7z_Single_Socket.o:(.bss+0x0): first defined here + +Fixes: + - http://autobuild.buildroot.org/results/1a433611ba8676cf1ca276fccaf3633971bd562e + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/ajaiantilal/i7z/pull/27] +--- + i7z.c | 1 + + i7z_Dual_Socket.c | 2 +- + i7z_Single_Socket.c | 2 +- + 3 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/i7z.c b/i7z.c +index 61e2757..910a608 100644 +--- a/i7z.c ++++ b/i7z.c +@@ -34,6 +34,7 @@ int Dual_Socket(); + + int socket_0_num=0, socket_1_num=1; + bool use_ncurses = true; ++struct timespec global_ts; + + /////////////////////LOGGING TO FILE//////////////////////////////////////// + FILE *fp_log_file_freq; +diff --git a/i7z_Dual_Socket.c b/i7z_Dual_Socket.c +index 1388339..ceafdce 100644 +--- a/i7z_Dual_Socket.c ++++ b/i7z_Dual_Socket.c +@@ -37,7 +37,7 @@ float Read_Voltage_CPU(int cpu_num); + extern struct program_options prog_options; + FILE *fp_log_file; + +-struct timespec global_ts; ++extern struct timespec global_ts; + extern FILE *fp_log_file_freq_1, *fp_log_file_freq_2; + + extern char* CPU_FREQUENCY_LOGGING_FILE_single; +diff --git a/i7z_Single_Socket.c b/i7z_Single_Socket.c +index 16e98c1..b7266e6 100644 +--- a/i7z_Single_Socket.c ++++ b/i7z_Single_Socket.c +@@ -35,7 +35,7 @@ int Read_Thermal_Status_CPU(int cpu_num); + extern struct program_options prog_options; + extern FILE *fp_log_file_freq; + +-struct timespec global_ts; ++extern struct timespec global_ts; + + extern char* CPU_FREQUENCY_LOGGING_FILE_single; + extern char* CPU_FREQUENCY_LOGGING_FILE_dual; +-- +2.29.2 + diff --git a/package/i7z/Config.in b/package/i7z/Config.in new file mode 100644 index 00000000..eea74f2f --- /dev/null +++ b/package/i7z/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_I7Z + bool "i7z" + depends on BR2_i386 || BR2_x86_64 + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_NCURSES + help + "A better i7 (and now i3, i5) reporting tool for Linux." + + i7z can print out the C-states and temperature for i3, i5 + and i7 based Core processors from Intel (including Nehalems, + Sandy Bridge and Ivy Bridge). + + https://github.com/ajaiantilal/i7z + +comment "i7z needs a toolchain w/ threads" + depends on BR2_i386 || BR2_x86_64 + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/i7z/i7z.hash b/package/i7z/i7z.hash new file mode 100644 index 00000000..d3affe8d --- /dev/null +++ b/package/i7z/i7z.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 e127bddf850e7febd39cef2d2b13dca5fe19cc2a1bb1099d72b683be5d8bd1c0 i7z-5023138d7c35c4667c938b853e5ea89737334e92.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/i7z/i7z.mk b/package/i7z/i7z.mk new file mode 100644 index 00000000..9c2c6739 --- /dev/null +++ b/package/i7z/i7z.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# i7z +# +################################################################################ + +I7Z_VERSION = 5023138d7c35c4667c938b853e5ea89737334e92 +I7Z_SITE = $(call github,ajaiantilal,i7z,$(I7Z_VERSION)) +I7Z_LICENSE = GPL-2.0 +I7Z_LICENSE_FILES = COPYING +I7Z_DEPENDENCIES = ncurses + +define I7Z_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) +endef + +define I7Z_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) install \ + DESTDIR="$(TARGET_DIR)" +endef + +$(eval $(generic-package)) diff --git a/package/ibm-sw-tpm2/0001-Use-LONG_BIT-to-define-RADIX_BITS.patch b/package/ibm-sw-tpm2/0001-Use-LONG_BIT-to-define-RADIX_BITS.patch new file mode 100644 index 00000000..c84e359a --- /dev/null +++ b/package/ibm-sw-tpm2/0001-Use-LONG_BIT-to-define-RADIX_BITS.patch @@ -0,0 +1,76 @@ +From 5aeb25abf13de43b9e497f6509209911dd1386b8 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sun, 26 Apr 2020 15:33:39 +0200 +Subject: [PATCH] Use LONG_BIT to define RADIX_BITS + +This allows to avoid having to support each CPU architecture +individually. + +Also, add the necessary defines in the makefile to expose +LONG_BIT. Adding those defines end up requiring using +as we're now using >= POSIX.1-2001 definitions of fd_set and friends. + +Signed-off-by: Thomas Petazzoni +Signed-off-by: Vincent Fazio +--- + src/LibSupport.h | 17 +++-------------- + src/TcpServerPosix.c | 1 + + src/makefile | 2 ++ + 3 files changed, 6 insertions(+), 14 deletions(-) + +diff --git a/src/LibSupport.h b/src/LibSupport.h +index b2e6a51..0b59d18 100644 +--- a/src/LibSupport.h ++++ b/src/LibSupport.h +@@ -64,20 +64,9 @@ + #ifndef _LIB_SUPPORT_H_ + #define _LIB_SUPPORT_H_ + +-#ifndef RADIX_BITS +-# if defined(__x86_64__) || defined(__x86_64) \ +- || defined(__amd64__) || defined(__amd64) || defined(_WIN64) || defined(_M_X64) \ +- || defined(_M_ARM64) || defined(__aarch64__) \ +- || defined(__powerpc64__) || defined(__ppc64__) +-# define RADIX_BITS 64 +-# elif defined(__i386__) || defined(__i386) || defined(i386) \ +- || defined(_WIN32) || defined(_M_IX86) \ +- || defined(_M_ARM) || defined(__arm__) || defined(__thumb__) +-# define RADIX_BITS 32 +-# else +-# error Unable to determine RADIX_BITS from compiler environment +-# endif +-#endif // RADIX_BITS ++#include ++ ++#define RADIX_BITS LONG_BIT + + // These macros use the selected libraries to the proper include files. + #define LIB_QUOTE(_STRING_) #_STRING_ +diff --git a/src/TcpServerPosix.c b/src/TcpServerPosix.c +index 20fcb29..bdac7aa 100644 +--- a/src/TcpServerPosix.c ++++ b/src/TcpServerPosix.c +@@ -66,6 +66,7 @@ + + #include + /* FIXME need Posix TCP socket code */ ++#include + #include + #include + #include +diff --git a/src/makefile b/src/makefile +index f124e78..6ee128e 100644 +--- a/src/makefile ++++ b/src/makefile +@@ -46,6 +46,8 @@ CCFLAGS = -Wall \ + -c -ggdb -O0 \ + -DTPM_POSIX \ + -D_POSIX_ \ ++ -D_DEFAULT_SOURCE \ ++ -D_XOPEN_SOURCE=500 \ + -DTPM_NUVOTON + + # add this line for big endian platforms +-- +2.26.2 + diff --git a/package/ibm-sw-tpm2/0002-Remove-unused-global-variable-to-fix-compilation-with-GCC-10.patch b/package/ibm-sw-tpm2/0002-Remove-unused-global-variable-to-fix-compilation-with-GCC-10.patch new file mode 100644 index 00000000..ff82a180 --- /dev/null +++ b/package/ibm-sw-tpm2/0002-Remove-unused-global-variable-to-fix-compilation-with-GCC-10.patch @@ -0,0 +1,30 @@ +From 9bd2926c0f359f143141c32c2b261ca100d804c8 Mon Sep 17 00:00:00 2001 +From: Jonas Witschel +Date: Wed, 13 May 2020 10:56:03 +0200 +Subject: [PATCH] Remove unused global variable to fix compilation with GCC 10 + +GCC defaults to -fno-common, resulting in a compilation error: + +CryptSym.h:84: multiple definition of `tpmCryptKeySchedule' + +Since the global variable is not used anywhere, it can be removed. +[Retrieved from: +https://github.com/kgoldman/ibmswtpm2/pull/3/commits/9bd2926c0f359f143141c32c2b261ca100d804c8] +Signed-off-by: Fabrice Fontaine +--- + src/CryptSym.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/CryptSym.h b/src/CryptSym.h +index 7b58e41..9a33b13 100644 +--- a/src/CryptSym.h ++++ b/src/CryptSym.h +@@ -81,7 +81,7 @@ union tpmCryptKeySchedule_t { + #else + uint32_t alignment; + #endif +-} tpmCryptKeySchedule; ++}; + /* Each block cipher within a library is expected to conform to the same calling conventions with + three parameters (keySchedule, in, and out) in the same order. That means that all algorithms + would use the same order of the same parameters. The code is written assuming the (keySchedule, diff --git a/package/ibm-sw-tpm2/Config.in b/package/ibm-sw-tpm2/Config.in new file mode 100644 index 00000000..57781a54 --- /dev/null +++ b/package/ibm-sw-tpm2/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_IBM_SW_TPM2 + bool "ibm-sw-tpm2" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS # ibm-sw-tpm2 + depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_OPENSSL_FORCE_LIBOPENSSL + help + This project is an implementation of the TCG TPM 2.0 + specification. It is based on the TPM specification Parts 3 + and 4 source code donated by Microsoft, with additional + files to complete the implementation. + + https://sourceforge.net/projects/ibmswtpm2/ + +comment "ibm-sw-tpm2 needs a toolchain w/ threads, dynamic library" + depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/ibm-sw-tpm2/ibm-sw-tpm2.hash b/package/ibm-sw-tpm2/ibm-sw-tpm2.hash new file mode 100644 index 00000000..f57dcbbb --- /dev/null +++ b/package/ibm-sw-tpm2/ibm-sw-tpm2.hash @@ -0,0 +1,6 @@ +# from https://sourceforge.net/projects/ibmswtpm2/files +sha1 a2a5335024a2edc1739f08b99e716fa355be627d ibmtpm1563.tar.gz +md5 13013612b3a13dc935fefe1a5684179c ibmtpm1563.tar.gz +# Locally computed: +sha256 fc3a17f8315c1f47670764f2384943afc0d3ba1e9a0422dacb08d455733bd1e9 ibmtpm1563.tar.gz +sha256 dd2d31b560011ea673e197251e710e52669d911367d83cd3cfd018f8ed58bde9 LICENSE diff --git a/package/ibm-sw-tpm2/ibm-sw-tpm2.mk b/package/ibm-sw-tpm2/ibm-sw-tpm2.mk new file mode 100644 index 00000000..58102667 --- /dev/null +++ b/package/ibm-sw-tpm2/ibm-sw-tpm2.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# ibm-sw-tpm2 +# +################################################################################ + +IBM_SW_TPM2_VERSION = 1563 +IBM_SW_TPM2_SOURCE = ibmtpm$(IBM_SW_TPM2_VERSION).tar.gz +IBM_SW_TPM2_SITE = https://sourceforge.net/projects/ibmswtpm2/files +IBM_SW_TPM2_LICENSE = BSD-3-Clause +IBM_SW_TPM2_LICENSE_FILES = LICENSE +IBM_SW_TPM2_DEPENDENCIES = openssl + +define IBM_SW_TPM2_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/src $(TARGET_CONFIGURE_OPTS) +endef + +define IBM_SW_TPM2_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/src $(TARGET_CONFIGURE_OPTS) install \ + DESTDIR=$(TARGET_DIR) +endef + +$(eval $(generic-package)) diff --git a/package/ibrcommon/0001-ibrcommon-data-File.cpp-support-POSIX-basename-call.patch b/package/ibrcommon/0001-ibrcommon-data-File.cpp-support-POSIX-basename-call.patch new file mode 100644 index 00000000..b7c1839f --- /dev/null +++ b/package/ibrcommon/0001-ibrcommon-data-File.cpp-support-POSIX-basename-call.patch @@ -0,0 +1,55 @@ +From d667b13a87cf3207599a19eb981a893a1d7a67ee Mon Sep 17 00:00:00 2001 +From: Brendan Heading +Date: Mon, 14 Sep 2015 23:25:52 +0100 +Subject: [PATCH 1/1] ibrcommon/data/File.cpp: support POSIX basename call + +Firstly, and somewhat strangely, musl chooses not to provide a basename(3) +prototype within whenever __cplusplus is defined. This can be +solved by including the header defined by POSIX 1003.1 whenever +__GLIBC__ is not defined. + +However, this leads to a second problem. POSIX defines the function as +char* basename(char*) and this is the only version supported by musl. +However, the std::string.cstr() method returns a const char*. + +POSIX says that the string parameter can be modified. However the GNU +implementation never modifies it. glibc therefore supports an extension +when compiling under C++ by also supplying +const char* basename(const char*). This extension is not present on musl +which is the cause of the failure. + +The solution is reasonably straightforward; test if __GLIBC__ is defined +before calling basename. If not, use the fallback already provided for +other platforms whereby basename() is called on a temporary copy. + +Signed-off-by: Brendan Heading +Upstream-status: pending +--- + ibrcommon/data/File.cpp | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/ibrcommon/data/File.cpp b/ibrcommon/data/File.cpp +index 31af4ae..68e9b4f 100644 +--- a/ibrcommon/data/File.cpp ++++ b/ibrcommon/data/File.cpp +@@ -35,7 +35,7 @@ + #include + #include + +-#if !defined(HAVE_FEATURES_H) || defined(ANDROID) ++#if !defined(HAVE_FEATURES_H) || !defined(__GLIBC__) || defined(ANDROID) + #include + #endif + +@@ -225,7 +225,7 @@ namespace ibrcommon + + std::string File::getBasename() const + { +-#if !defined(ANDROID) && defined(HAVE_FEATURES_H) ++#if !defined(ANDROID) && defined(HAVE_FEATURES_H) && defined(__GLIBC__) + return std::string(basename(_path.c_str())); + #else + char path[_path.length()+1]; +-- +2.4.3 + diff --git a/package/ibrcommon/0002-ibrcommon-added-openssl-1.1-compatibility-264.patch b/package/ibrcommon/0002-ibrcommon-added-openssl-1.1-compatibility-264.patch new file mode 100644 index 00000000..90e5147f --- /dev/null +++ b/package/ibrcommon/0002-ibrcommon-added-openssl-1.1-compatibility-264.patch @@ -0,0 +1,357 @@ +From a801d10a081e3130e24042256a43190c9eb6c112 Mon Sep 17 00:00:00 2001 +From: Eneas Queiroz <35331380+cotequeiroz@users.noreply.github.com> +Date: Wed, 23 May 2018 03:09:02 -0300 +Subject: [PATCH] ibrcommon: added openssl 1.1 compatibility (#264) + +This patch adds compatibility to openssl 1.1.0. + +Backported from master branch: +https://github.com/ibrdtn/ibrdtn/commit/a801d10a081e3130e24042256a43190c9eb6c112 + +Signed-off-by: Eneas U de Queiroz +Signed-off-by: Bernd Kuhls +--- + ibrcommon/ibrcommon/ssl/HMacStream.cpp | 11 +++--- + ibrcommon/ibrcommon/ssl/HMacStream.h | 2 +- + ibrcommon/ibrcommon/ssl/RSASHA256Stream.cpp | 28 +++++++------ + ibrcommon/ibrcommon/ssl/RSASHA256Stream.h | 2 +- + ibrcommon/ibrcommon/ssl/iostreamBIO.cpp | 44 ++++++++++++++++----- + ibrcommon/ibrcommon/ssl/openssl_compat.h | 38 ++++++++++++++++++ + 6 files changed, 95 insertions(+), 30 deletions(-) + create mode 100644 ibrcommon/ibrcommon/ssl/openssl_compat.h + +diff --git a/ibrcommon/ssl/HMacStream.cpp b/ibrcommon/ssl/HMacStream.cpp +index e5d317e3..66d8ce42 100644 +--- a/ibrcommon/ssl/HMacStream.cpp ++++ b/ibrcommon/ssl/HMacStream.cpp +@@ -20,29 +20,30 @@ + */ + + #include "ibrcommon/ssl/HMacStream.h" ++#include "openssl_compat.h" + + namespace ibrcommon + { + HMacStream::HMacStream(const unsigned char * const key, const int key_size) + : HashStream(EVP_MAX_MD_SIZE, BUFF_SIZE), key_(key), key_size_(key_size) + { +- HMAC_CTX_init(&ctx_); +- HMAC_Init_ex(&ctx_, key_, key_size_, EVP_sha1(), NULL); ++ ctx_ = HMAC_CTX_new(); ++ HMAC_Init_ex(ctx_, key_, key_size_, EVP_sha1(), NULL); + } + + HMacStream::~HMacStream() + { +- HMAC_CTX_cleanup(&ctx_); ++ HMAC_CTX_free(ctx_); + } + + void HMacStream::update(char *buf, const size_t size) + { + // hashing +- HMAC_Update(&ctx_, (unsigned char*)buf, size); ++ HMAC_Update(ctx_, (unsigned char*)buf, size); + } + + void HMacStream::finalize(char * hash, unsigned int &size) + { +- HMAC_Final(&ctx_, (unsigned char*)hash, &size); ++ HMAC_Final(ctx_, (unsigned char*)hash, &size); + } + } +diff --git a/ibrcommon/ssl/HMacStream.h b/ibrcommon/ssl/HMacStream.h +index 7dcea168..d04bceb8 100644 +--- a/ibrcommon/ssl/HMacStream.h ++++ b/ibrcommon/ssl/HMacStream.h +@@ -44,7 +44,7 @@ namespace ibrcommon + const unsigned char * const key_; + const int key_size_; + +- HMAC_CTX ctx_; ++ HMAC_CTX* ctx_; + }; + } + +diff --git a/ibrcommon/ssl/RSASHA256Stream.cpp b/ibrcommon/ssl/RSASHA256Stream.cpp +index d94430ed..d25c5d2f 100644 +--- a/ibrcommon/ssl/RSASHA256Stream.cpp ++++ b/ibrcommon/ssl/RSASHA256Stream.cpp +@@ -21,6 +21,7 @@ + + #include "ibrcommon/ssl/RSASHA256Stream.h" + #include "ibrcommon/Logger.h" ++#include "openssl_compat.h" + #include + + namespace ibrcommon +@@ -30,11 +31,11 @@ namespace ibrcommon + { + // Initialize get pointer. This should be zero so that underflow is called upon first read. + setp(&out_buf_[0], &out_buf_[BUFF_SIZE - 1]); +- EVP_MD_CTX_init(&_ctx); ++ _ctx = EVP_MD_CTX_new(); + + if (!_verify) + { +- if (!EVP_SignInit_ex(&_ctx, EVP_sha256(), NULL)) ++ if (!EVP_SignInit_ex(_ctx, EVP_sha256(), NULL)) + { + IBRCOMMON_LOGGER_TAG("RSASHA256Stream", critical) << "failed to initialize the signature function" << IBRCOMMON_LOGGER_ENDL; + ERR_print_errors_fp(stderr); +@@ -42,7 +43,7 @@ namespace ibrcommon + } + else + { +- if (!EVP_VerifyInit_ex(&_ctx, EVP_sha256(), NULL)) ++ if (!EVP_VerifyInit_ex(_ctx, EVP_sha256(), NULL)) + { + IBRCOMMON_LOGGER_TAG("RSASHA256Stream", critical) << "failed to initialize the verification function" << IBRCOMMON_LOGGER_ENDL; + ERR_print_errors_fp(stderr); +@@ -52,18 +53,19 @@ namespace ibrcommon + + RSASHA256Stream::~RSASHA256Stream() + { +- EVP_MD_CTX_cleanup(&_ctx); ++ EVP_MD_CTX_free(_ctx); + } + + void RSASHA256Stream::reset() + { +- EVP_MD_CTX_cleanup(&_ctx); +- +- EVP_MD_CTX_init(&_ctx); ++#if OPENSSL_VERSION_NUMBER < 0x10100000L ++ EVP_MD_CTX_cleanup(_ctx); ++#endif ++ EVP_MD_CTX_init(_ctx); + + if (!_verify) + { +- if (!EVP_SignInit_ex(&_ctx, EVP_sha256(), NULL)) ++ if (!EVP_SignInit_ex(_ctx, EVP_sha256(), NULL)) + { + IBRCOMMON_LOGGER_TAG("RSASHA256Stream", critical) << "failed to initialize the signature function" << IBRCOMMON_LOGGER_ENDL; + ERR_print_errors_fp(stderr); +@@ -71,7 +73,7 @@ namespace ibrcommon + } + else + { +- if (!EVP_VerifyInit_ex(&_ctx, EVP_sha256(), NULL)) ++ if (!EVP_VerifyInit_ex(_ctx, EVP_sha256(), NULL)) + { + IBRCOMMON_LOGGER_TAG("RSASHA256Stream", critical) << "failed to initialize the verfication function" << IBRCOMMON_LOGGER_ENDL; + ERR_print_errors_fp(stderr); +@@ -91,7 +93,7 @@ namespace ibrcommon + std::vector sign(EVP_PKEY_size(_pkey)); + unsigned int size = EVP_PKEY_size(_pkey); + +- _return_code = EVP_SignFinal(&_ctx, &sign[0], &size, _pkey); ++ _return_code = EVP_SignFinal(_ctx, &sign[0], &size, _pkey); + + _sign = std::string((const char*)&sign[0], size); + +@@ -107,7 +109,7 @@ namespace ibrcommon + if (!_sign_valid) + { + sync(); +- _return_code = EVP_VerifyFinal(&_ctx, reinterpret_cast(their_sign.c_str()), static_cast(their_sign.size()), _pkey); ++ _return_code = EVP_VerifyFinal(_ctx, reinterpret_cast(their_sign.c_str()), static_cast(their_sign.size()), _pkey); + _sign_valid = true; + } + return _return_code; +@@ -145,7 +147,7 @@ namespace ibrcommon + if (!_verify) + // hashing + { +- if (!EVP_SignUpdate(&_ctx, &out_buf_[0], iend - ibegin)) ++ if (!EVP_SignUpdate(_ctx, &out_buf_[0], iend - ibegin)) + { + IBRCOMMON_LOGGER_TAG("RSASHA256Stream", critical) << "failed to feed data into the signature function" << IBRCOMMON_LOGGER_ENDL; + ERR_print_errors_fp(stderr); +@@ -153,7 +155,7 @@ namespace ibrcommon + } + else + { +- if (!EVP_VerifyUpdate(&_ctx, &out_buf_[0], iend - ibegin)) ++ if (!EVP_VerifyUpdate(_ctx, &out_buf_[0], iend - ibegin)) + { + IBRCOMMON_LOGGER_TAG("RSASHA256Stream", critical) << "failed to feed data into the verification function" << IBRCOMMON_LOGGER_ENDL; + ERR_print_errors_fp(stderr); +diff --git a/ibrcommon/ssl/RSASHA256Stream.h b/ibrcommon/ssl/RSASHA256Stream.h +index 344f8e10..6f3a1168 100644 +--- a/ibrcommon/ssl/RSASHA256Stream.h ++++ b/ibrcommon/ssl/RSASHA256Stream.h +@@ -106,7 +106,7 @@ namespace ibrcommon + + /** the context in which the streamed data will be feed into for + calculation of the hash/signature */ +- EVP_MD_CTX _ctx; ++ EVP_MD_CTX * _ctx; + + /** tells if the context needs to be finalized to get a valid signature or + verification */ +diff --git a/ibrcommon/ssl/iostreamBIO.cpp b/ibrcommon/ssl/iostreamBIO.cpp +index 18c1b55c..ea6c63eb 100644 +--- a/ibrcommon/ssl/iostreamBIO.cpp ++++ b/ibrcommon/ssl/iostreamBIO.cpp +@@ -23,6 +23,7 @@ + + #include "ibrcommon/Logger.h" + ++#include "openssl_compat.h" + #include + + namespace ibrcommon +@@ -42,7 +43,20 @@ static int create(BIO *bio); + //static int destroy(BIO *bio); + //static long (*callback_ctrl)(BIO *, int, bio_info_cb *); + +- ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++BIO_METHOD * BIO_iostream_method() ++{ ++ static BIO_METHOD *iostream_method = NULL; ++ if (iostream_method) { ++ iostream_method = BIO_meth_new(iostreamBIO::type, iostreamBIO::name); ++ BIO_meth_set_write(iostream_method, bwrite); ++ BIO_meth_set_read(iostream_method, bread); ++ BIO_meth_set_ctrl(iostream_method, ctrl); ++ BIO_meth_set_create(iostream_method, create); ++ } ++ return iostream_method; ++} ++#else + static BIO_METHOD iostream_method = + { + iostreamBIO::type, +@@ -56,12 +70,17 @@ static BIO_METHOD iostream_method = + NULL,//destroy, + NULL//callback_ctrl + }; ++BIO_METHOD * BIO_iostream_method() ++{ ++ return &iostream_method; ++} ++#endif + + iostreamBIO::iostreamBIO(iostream *stream) + : _stream(stream) + { + /* create BIO */ +- _bio = BIO_new(&iostream_method); ++ _bio = BIO_new(BIO_iostream_method()); + if(!_bio){ + /* creation failed, throw exception */ + char err_buf[ERR_BUF_SIZE]; +@@ -72,7 +91,7 @@ iostreamBIO::iostreamBIO(iostream *stream) + } + + /* save the iostream in the bio object */ +- _bio->ptr = stream; ++ BIO_set_data(_bio, (void *) stream); + } + + BIO * iostreamBIO::getBIO(){ +@@ -81,10 +100,10 @@ BIO * iostreamBIO::getBIO(){ + + static int create(BIO *bio) + { +- bio->ptr = NULL; +- /* (from openssl memory bio) */ +- bio->shutdown=1; +- bio->init=1; ++ BIO_set_data(bio, NULL); ++ BIO_set_shutdown(bio, 1); ++ BIO_set_init(bio, 1); ++#if OPENSSL_VERSION_NUMBER < 0x10100000L + /* from bss_mem.c (openssl): + * bio->num is used to hold the value to return on 'empty', if it is + * 0, should_retry is not set +@@ -93,6 +112,7 @@ static int create(BIO *bio) + * it is set to 0 since the underlying stream is blocking + */ + bio->num= 0; ++#endif + + return 1; + } +@@ -102,7 +122,7 @@ static int create(BIO *bio) + static long ctrl(BIO *bio, int cmd, long num, void *) + { + long ret; +- iostream *stream = reinterpret_cast(bio->ptr); ++ iostream *stream = reinterpret_cast(BIO_get_data(bio)); + + IBRCOMMON_LOGGER_DEBUG_TAG("iostreamBIO", 90) << "ctrl called, cmd: " << cmd << ", num: " << num << "." << IBRCOMMON_LOGGER_ENDL; + +@@ -147,8 +167,12 @@ static long ctrl(BIO *bio, int cmd, long num, void *) + + static int bread(BIO *bio, char *buf, int len) + { +- iostream *stream = reinterpret_cast(bio->ptr); ++ iostream *stream = reinterpret_cast(BIO_get_data(bio)); ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ int num_bytes = 0; ++#else + int num_bytes = bio->num; ++#endif + + try{ + /* make sure to read at least 1 byte and then read as much as we can */ +@@ -170,7 +194,7 @@ static int bwrite(BIO *bio, const char *buf, int len) + if(len == 0){ + return 0; + } +- iostream *stream = reinterpret_cast(bio->ptr); ++ iostream *stream = reinterpret_cast(BIO_get_data(bio)); + + /* write the data */ + try{ +diff --git a/ibrcommon/ssl/openssl_compat.h b/ibrcommon/ssl/openssl_compat.h +new file mode 100644 +index 00000000..e491677f +--- /dev/null ++++ b/ibrcommon/ssl/openssl_compat.h +@@ -0,0 +1,38 @@ ++#ifndef OPENSSL_COMPAT_H ++#define OPENSSL_COMPAT_H ++ ++#include ++#if OPENSSL_VERSION_NUMBER < 0x10100000L ++ ++#include ++#include ++ ++static inline EVP_MD_CTX * EVP_MD_CTX_new() ++{ ++ EVP_MD_CTX *ctx; ++ ++ ctx = (EVP_MD_CTX *) OPENSSL_malloc(sizeof(EVP_MD_CTX)); ++ EVP_MD_CTX_init(ctx); ++ return ctx; ++} ++#define EVP_MD_CTX_free(c) if (c != NULL) OPENSSL_free(c) ++ ++static inline HMAC_CTX * HMAC_CTX_new() ++{ ++ HMAC_CTX *ctx; ++ ++ ctx = (HMAC_CTX *) OPENSSL_malloc(sizeof(HMAC_CTX)); ++ HMAC_CTX_init(ctx); ++ return ctx; ++} ++#define HMAC_CTX_free(c) if (c != NULL) OPENSSL_free(c) ++ ++#define BIO_get_data(b) b->ptr ++#define BIO_set_data(b, v) b->ptr=v ++#define BIO_set_shutdown(b, v) b->shutdown=v ++#define BIO_set_init(b, v) b->init=v ++ ++#endif /* OPENSSL_VERSION_NUMBER */ ++ ++#endif /* OPENSSL_COMPAT_H */ ++ +-- +2.18.0 + diff --git a/package/ibrcommon/0003-ibrcommon-ssl-gcm-fix-static-build-with-openssl.patch b/package/ibrcommon/0003-ibrcommon-ssl-gcm-fix-static-build-with-openssl.patch new file mode 100644 index 00000000..c55b227c --- /dev/null +++ b/package/ibrcommon/0003-ibrcommon-ssl-gcm-fix-static-build-with-openssl.patch @@ -0,0 +1,94 @@ +From 8118c43a53271ba2dd31ce3913a3cd21bc7dcca7 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 16 Feb 2019 11:58:34 +0100 +Subject: [PATCH] ibrcommon/ssl/gcm: fix static build with openssl + +gf_mul is already defined in libcrypto (openssl) so rename it into +ibrdtn_gf_mul to fix following build failure: + +/home/buildroot/autobuild/instance-3/output/host/bin/../arm-buildroot-uclinux-uclibcgnueabi/sysroot/usr/lib/libcrypto.a(f_impl.o): In function `gf_mul': +f_impl.c:(.text+0x0): multiple definition of `gf_mul' +/home/buildroot/autobuild/instance-3/output/host/arm-buildroot-uclinux-uclibcgnueabi/sysroot/usr/lib/libibrcommon.a(gf128mul.o):gf128mul.cpp:(.text+0x30): first defined here +collect2: error: ld returned 1 exit status +Makefile:560: recipe for target 'dtnd' failed + +Fixes: + - http://autobuild.buildroot.org/results/1d3b4b6cf043a3e185ce758b617a0a18c3d36cdb + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/ibrdtn/ibrdtn/pull/269] +--- + ibrcommon/ibrcommon/ssl/gcm/gcm.cpp | 10 +++++----- + ibrcommon/ibrcommon/ssl/gcm/gf128mul.cpp | 2 +- + ibrcommon/ibrcommon/ssl/gcm/gf128mul.h | 2 +- + 3 files changed, 7 insertions(+), 7 deletions(-) + +diff --git a/ibrcommon/ssl/gcm/gcm.cpp b/ibrcommon/ssl/gcm/gcm.cpp +index 8a5745b4..6097b43e 100644 +--- a/ibrcommon/ssl/gcm/gcm.cpp ++++ b/ibrcommon/ssl/gcm/gcm.cpp +@@ -89,7 +89,7 @@ ret_type gcm_init_and_key( /* initialise mode and set key + #elif defined( TABLES_256 ) + #define gf_mul_hh(a, ctx, scr) gf_mul_256(a, ctx->gf_t256, scr) + #else +-#define gf_mul_hh(a, ctx, scr) gf_mul(a, ui8_ptr(ctx->ghash_h)) ++#define gf_mul_hh(a, ctx, scr) ibrdtn_gf_mul(a, ui8_ptr(ctx->ghash_h)) + #endif + + ret_type gcm_init_message( /* initialise a new message */ +@@ -334,9 +334,9 @@ ret_type gcm_compute_tag( /* compute authentication tag + memcpy(tbuf, ctx->ghash_h, BLOCK_SIZE); + for( ; ; ) + { +- if(ln & 1) gf_mul(ui8_ptr(ctx->hdr_ghv), tbuf); ++ if(ln & 1) ibrdtn_gf_mul(ui8_ptr(ctx->hdr_ghv), tbuf); + if(!(ln >>= 1)) break; +- gf_mul(tbuf, tbuf); ++ ibrdtn_gf_mul(tbuf, tbuf); + } + } + #else /* this one seems slower on x86 and x86_64 :-( */ +@@ -348,12 +348,12 @@ ret_type gcm_compute_tag( /* compute authentication tag + tbuf[0] = 0x80; + while(i) + { +- gf_mul(tbuf, tbuf); ++ ibrdtn_gf_mul(tbuf, tbuf); + if(i & ln) + gf_mul_hh(tbuf, ctx, scratch); + i >>= 1; + } +- gf_mul(ui8_ptr(ctx->hdr_ghv), tbuf); ++ ibrdtn_gf_mul(ui8_ptr(ctx->hdr_ghv), tbuf); + } + #endif + i = BLOCK_SIZE; ln = (uint_32t)(ctx->txt_acnt << 3); +diff --git a/ibrcommon/ssl/gcm/gf128mul.cpp b/ibrcommon/ssl/gcm/gf128mul.cpp +index a553a044..d0c460c3 100644 +--- a/ibrcommon/ssl/gcm/gf128mul.cpp ++++ b/ibrcommon/ssl/gcm/gf128mul.cpp +@@ -103,7 +103,7 @@ + + const unsigned short gf_tab[256] = gf_dat(xda); + +-void gf_mul(void *a, const void* b) ++void ibrdtn_gf_mul(void *a, const void* b) + { uint_32t r[GF_BYTE_LEN >> 2], p[8][GF_BYTE_LEN >> 2]; + int i; + +diff --git a/ibrcommon/ssl/gcm/gf128mul.h b/ibrcommon/ssl/gcm/gf128mul.h +index 4645c7fe..65fba54b 100644 +--- a/ibrcommon/ssl/gcm/gf128mul.h ++++ b/ibrcommon/ssl/gcm/gf128mul.h +@@ -619,7 +619,7 @@ gf_inline void mul_x(void *r, const void *x) + + /* A slow generic version of gf_mul (a = a * b) */ + +-void gf_mul(void *a, const void* b); ++void ibrdtn_gf_mul(void *a, const void* b); + + /* This version uses 64k bytes of table space on the stack. + A 16 byte buffer has to be multiplied by a 16 byte key +-- +2.14.1 + diff --git a/package/ibrcommon/Config.in b/package/ibrcommon/Config.in new file mode 100644 index 00000000..36ccfbc3 --- /dev/null +++ b/package/ibrcommon/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_IBRCOMMON + bool "ibrcommon" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + help + IBR-DTN is a small dtn application that supports: + Bundle Protocol RFC 5050 + Bundle Security Protocol RFC 6257 + + http://trac.ibr.cs.tu-bs.de/project-cm-2012-ibrdtn + +comment "ibrcommon needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/ibrcommon/ibrcommon.hash b/package/ibrcommon/ibrcommon.hash new file mode 100644 index 00000000..9d13f06d --- /dev/null +++ b/package/ibrcommon/ibrcommon.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 9c457c1ebc01e6216524636628c647bef34ab11bd96f0e0788be8749374fdc20 ibrcommon-1.0.1.tar.gz +sha256 1a0b57773a46d9d4cc2f0d1780a17acc38af506bb1e0234aaa85f8ccd6dc0b92 COPYING +sha256 9b8a430c2136ebcf76bd37f50da7d7a80ede413ec6604cc4694ea536e779854c README diff --git a/package/ibrcommon/ibrcommon.mk b/package/ibrcommon/ibrcommon.mk new file mode 100644 index 00000000..d9e843eb --- /dev/null +++ b/package/ibrcommon/ibrcommon.mk @@ -0,0 +1,36 @@ +################################################################################ +# +# ibrcommon +# +################################################################################ + +IBRCOMMON_VERSION = 1.0.1 +IBRCOMMON_SITE = https://www.ibr.cs.tu-bs.de/projects/ibr-dtn/releases +IBRCOMMON_INSTALL_STAGING = YES +IBRCOMMON_LICENSE = Apache-2.0 +IBRCOMMON_LICENSE_FILES = COPYING README +IBRCOMMON_DEPENDENCIES = host-pkgconf +IBRCOMMON_CONF_ENV = CXXFLAGS="$(TARGET_CXXFLAGS) -std=c++11" + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +IBRCOMMON_DEPENDENCIES += openssl +IBRCOMMON_CONF_OPTS += --with-openssl +else +IBRCOMMON_CONF_OPTS += --without-openssl +endif + +ifeq ($(BR2_PACKAGE_LIBNL),y) +IBRCOMMON_DEPENDENCIES += libnl +IBRCOMMON_CONF_OPTS += --with-lowpan +else +IBRCOMMON_CONF_OPTS += --without-lowpan +endif + +ifeq ($(BR2_PACKAGE_LIBXML2),y) +IBRCOMMON_DEPENDENCIES += libxml2 +IBRCOMMON_CONF_OPTS += --with-xml +else +IBRCOMMON_CONF_OPTS += --without-xml +endif + +$(eval $(autotools-package)) diff --git a/package/ibrdtn-tools/Config.in b/package/ibrdtn-tools/Config.in new file mode 100644 index 00000000..91419d67 --- /dev/null +++ b/package/ibrdtn-tools/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_IBRDTN_TOOLS + bool "ibrdtn-tools" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_IBRCOMMON + select BR2_PACKAGE_IBRDTN + help + IBR-DTN is a small dtn application that supports: + Bundle Protocol RFC 5050 + Bundle Security Protocol RFC 6257 + + http://trac.ibr.cs.tu-bs.de/project-cm-2012-ibrdtn + +comment "ibrdtn-tools needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/ibrdtn-tools/ibrdtn-tools.hash b/package/ibrdtn-tools/ibrdtn-tools.hash new file mode 100644 index 00000000..c9fb64cd --- /dev/null +++ b/package/ibrdtn-tools/ibrdtn-tools.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 eab066cf15f9c322d769c6c9c58adfb474cba7d446fd12e8de5ff6344376795b ibrdtn-tools-1.0.1.tar.gz +sha256 809fa1ed21450f59827d1e9aec720bbc4b687434fa22283c6cb5dd82a47ab9c0 COPYING diff --git a/package/ibrdtn-tools/ibrdtn-tools.mk b/package/ibrdtn-tools/ibrdtn-tools.mk new file mode 100644 index 00000000..77dbfc10 --- /dev/null +++ b/package/ibrdtn-tools/ibrdtn-tools.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# ibrdtn-tools +# +################################################################################ + +IBRDTN_TOOLS_VERSION = 1.0.1 +IBRDTN_TOOLS_SITE = https://www.ibr.cs.tu-bs.de/projects/ibr-dtn/releases +IBRDTN_TOOLS_LICENSE = Apache-2.0 +IBRDTN_TOOLS_LICENSE_FILES = COPYING +IBRDTN_TOOLS_DEPENDENCIES = ibrcommon ibrdtn host-pkgconf +IBRDTN_TOOLS_CONF_ENV = CXXFLAGS="$(TARGET_CXXFLAGS) -std=c++11" + +ifeq ($(BR2_STATIC_LIBS),y) +IBRDTN_TOOLS_CONF_ENV += LDFLAGS="$(TARGET_LDFLAGS) -pthread" +endif + +ifeq ($(BR2_PACKAGE_LIBDAEMON),y) +IBRDTN_TOOLS_CONF_OPTS += --with-libdaemon +IBRDTN_TOOLS_DEPENDENCIES += libdaemon +else +IBRDTN_TOOLS_CONF_OPTS += --without-libdaemon +endif + +ifeq ($(BR2_PACKAGE_LIBARCHIVE),y) +IBRDTN_TOOLS_CONF_OPTS += --with-libarchive +IBRDTN_TOOLS_DEPENDENCIES += libarchive +else +IBRDTN_TOOLS_CONF_OPTS += --without-libarchive +endif + +$(eval $(autotools-package)) diff --git a/package/ibrdtn/Config.in b/package/ibrdtn/Config.in new file mode 100644 index 00000000..56983159 --- /dev/null +++ b/package/ibrdtn/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_IBRDTN + bool "ibrdtn" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_IBRCOMMON + help + IBR-DTN is a small dtn application that supports: + Bundle Protocol RFC 5050 + Bundle Security Protocol RFC 6257 + + This package contains the ibrdtn library. + + http://trac.ibr.cs.tu-bs.de/project-cm-2012-ibrdtn + +comment "ibrdtn needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/ibrdtn/ibrdtn.hash b/package/ibrdtn/ibrdtn.hash new file mode 100644 index 00000000..0712df1c --- /dev/null +++ b/package/ibrdtn/ibrdtn.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 288b14ccbaefb5e3234065c2778c247797ccb3c7afbb6746bb37dc12c620d360 ibrdtn-1.0.1.tar.gz +sha256 809fa1ed21450f59827d1e9aec720bbc4b687434fa22283c6cb5dd82a47ab9c0 COPYING diff --git a/package/ibrdtn/ibrdtn.mk b/package/ibrdtn/ibrdtn.mk new file mode 100644 index 00000000..99ff92d4 --- /dev/null +++ b/package/ibrdtn/ibrdtn.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# ibrdtn +# +################################################################################ + +IBRDTN_VERSION = 1.0.1 +IBRDTN_SITE = https://www.ibr.cs.tu-bs.de/projects/ibr-dtn/releases +IBRDTN_INSTALL_STAGING = YES +IBRDTN_LICENSE = Apache-2.0 +IBRDTN_LICENSE_FILES = COPYING +IBRDTN_DEPENDENCIES = ibrcommon host-pkgconf +IBRDTN_CONF_ENV = CXXFLAGS="$(TARGET_CXXFLAGS) -std=c++11" + +ifeq ($(BR2_PACKAGE_ZLIB),y) +IBRDTN_CONF_OPTS += --with-compression +IBRDTN_DEPENDENCIES += zlib +else +IBRDTN_CONF_OPTS += --without-compression +endif + +ifeq ($(BR2_PACKAGE_LIBGLIB2),y) +IBRDTN_CONF_OPTS += --with-glib +IBRDTN_DEPENDENCIES += libglib2 +else +IBRDTN_CONF_OPTS += --without-glib +endif + +$(eval $(autotools-package)) diff --git a/package/ibrdtnd/0001-ibrdtnd-added-openssl-compatibility.patch b/package/ibrdtnd/0001-ibrdtnd-added-openssl-compatibility.patch new file mode 100644 index 00000000..8d100e2a --- /dev/null +++ b/package/ibrdtnd/0001-ibrdtnd-added-openssl-compatibility.patch @@ -0,0 +1,205 @@ +From 8785fe0be66c8d6eaa94ffde921909a7ec220123 Mon Sep 17 00:00:00 2001 +From: Eneas U de Queiroz +Date: Sat, 26 May 2018 23:44:54 -0300 +Subject: [PATCH] ibrdtnd: added openssl compatibility + +This patch adds compatibility with openssl 1.1.0 to ibrdtnd. + +Upstream: https://github.com/ibrdtn/ibrdtn/pull/265 + +Signed-off-by: Eneas U de Queiroz +Signed-off-by: Matthew Weber +--- + src/security/exchange/DHProtocol.cpp | 36 ++++++++++--- + src/security/exchange/Makefile.am | 2 + + src/security/exchange/openssl_compat.cpp | 62 ++++++++++++++++++++++ + src/security/exchange/openssl_compat.h | 13 +++++ + 4 files changed, 107 insertions(+), 6 deletions(-) + create mode 100644 src/security/exchange/openssl_compat.cpp + create mode 100644 src/security/exchange/openssl_compat.h + +diff --git a/src/security/exchange/DHProtocol.cpp b/src/security/exchange/DHProtocol.cpp +index e94c502..3e0ad71 100644 +--- a/src/security/exchange/DHProtocol.cpp ++++ b/src/security/exchange/DHProtocol.cpp +@@ -30,6 +30,7 @@ + + #include + #include ++#include "openssl_compat.h" + + #define DH_KEY_LENGTH 1024 + +@@ -132,6 +133,7 @@ namespace dtn + + void DHProtocol::begin(KeyExchangeSession &session, KeyExchangeData &data) + { ++ const BIGNUM *pub_key, *p, *g; + // get session state + DHState &state = session.getState(); + +@@ -159,9 +161,12 @@ namespace dtn + // prepare request + KeyExchangeData request(KeyExchangeData::REQUEST, session); + +- write(request, state.dh->pub_key); +- write(request, state.dh->p); +- write(request, state.dh->g); ++ DH_get0_pqg(state.dh, &p, NULL, &g); ++ DH_get0_key(state.dh, &pub_key, NULL); ++ ++ write(request, pub_key); ++ write(request, p); ++ write(request, g); + + manager.submit(session, request); + } +@@ -177,6 +182,15 @@ namespace dtn + { + if (data.getAction() == KeyExchangeData::REQUEST) + { ++ BIGNUM *p = BN_new(); ++ BIGNUM *g = BN_new(); ++ if (p == NULL || g == NULL) ++ { ++ BN_free(p); ++ BN_free(g); ++ throw ibrcommon::Exception("Error while allocating space for DH parameters"); ++ } ++ + BIGNUM* pub_key = BN_new(); + read(data, &pub_key); + +@@ -184,8 +198,16 @@ namespace dtn + state.dh = DH_new(); + + // read p and g paramter from message +- read(data, &state.dh->p); +- read(data, &state.dh->g); ++ read(data, &p); ++ read(data, &g); ++ ++ if (DH_set0_pqg(state.dh, p, NULL, g)) ++ { ++ BN_free(p); ++ BN_free(g); ++ BN_free(pub_key); ++ throw ibrcommon::Exception("Error while setting DH parameters"); ++ } + + int codes; + if (!DH_check(state.dh, &codes)) +@@ -213,7 +235,9 @@ namespace dtn + state.secret.assign((const char*)secret, length); + + KeyExchangeData response(KeyExchangeData::RESPONSE, session); +- write(response, state.dh->pub_key); ++ const BIGNUM *state_dh_pub_key; ++ DH_get0_key(state.dh, &state_dh_pub_key, NULL); ++ write(response, state_dh_pub_key); + + manager.submit(session, response); + +diff --git a/src/security/exchange/Makefile.am b/src/security/exchange/Makefile.am +index a6b2f83..71ed836 100644 +--- a/src/security/exchange/Makefile.am ++++ b/src/security/exchange/Makefile.am +@@ -22,6 +22,8 @@ exchange_SOURCES += \ + NFCProtocol.cpp \ + NoneProtocol.h \ + NoneProtocol.cpp \ ++ openssl_compat.h \ ++ openssl_compat.cpp \ + QRCodeProtocol.h \ + QRCodeProtocol.cpp + +diff --git a/src/security/exchange/openssl_compat.cpp b/src/security/exchange/openssl_compat.cpp +new file mode 100644 +index 0000000..e3baba0 +--- /dev/null ++++ b/src/security/exchange/openssl_compat.cpp +@@ -0,0 +1,62 @@ ++/* ++ * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. ++ * ++ * Licensed under the OpenSSL license (the "License"). You may not use ++ * this file except in compliance with the License. You can obtain a copy ++ * in the file LICENSE in the source distribution or at ++ * https://www.openssl.org/source/license.html ++ */ ++ ++#include "openssl_compat.h" ++ ++#if OPENSSL_VERSION_NUMBER < 0x10100000L ++ ++void DH_get0_pqg(const DH *dh, ++ const BIGNUM **p, const BIGNUM **q, const BIGNUM **g) ++{ ++ if (p != NULL) ++ *p = dh->p; ++ if (q != NULL) ++ *q = dh->q; ++ if (g != NULL) ++ *g = dh->g; ++} ++ ++int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g) ++{ ++ /* If the fields p and g in d are NULL, the corresponding input ++ * parameters MUST be non-NULL. q may remain NULL. ++ */ ++ if ((dh->p == NULL && p == NULL) ++ || (dh->g == NULL && g == NULL)) ++ return 0; ++ ++ if (p != NULL) { ++ BN_free(dh->p); ++ dh->p = p; ++ } ++ if (q != NULL) { ++ BN_free(dh->q); ++ dh->q = q; ++ } ++ if (g != NULL) { ++ BN_free(dh->g); ++ dh->g = g; ++ } ++ ++ if (q != NULL) { ++ dh->length = BN_num_bits(q); ++ } ++ ++ return 1; ++} ++ ++void DH_get0_key(const DH *dh, const BIGNUM **pub_key, const BIGNUM **priv_key) ++{ ++ if (pub_key != NULL) ++ *pub_key = dh->pub_key; ++ if (priv_key != NULL) ++ *priv_key = dh->priv_key; ++} ++ ++#endif /* OPENSSL_VERSION_NUMBER */ +diff --git a/src/security/exchange/openssl_compat.h b/src/security/exchange/openssl_compat.h +new file mode 100644 +index 0000000..29e7d41 +--- /dev/null ++++ b/src/security/exchange/openssl_compat.h +@@ -0,0 +1,13 @@ ++#ifndef LIBCRYPTO_COMPAT_H ++#define LIBCRYPTO_COMPAT_H ++ ++#if OPENSSL_VERSION_NUMBER < 0x10100000L ++ ++#include ++ ++void DH_get0_pqg(const DH *dh, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); ++int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g); ++void DH_get0_key(const DH *dh, const BIGNUM **pub_key, const BIGNUM **priv_key); ++ ++#endif /* OPENSSL_VERSION_NUMBER */ ++#endif /* LIBCRYPTO_COMPAT_H */ +-- +1.9.1 + diff --git a/package/ibrdtnd/0002-SecurityCertificateManager.cpp-include-cstring-267.patch b/package/ibrdtnd/0002-SecurityCertificateManager.cpp-include-cstring-267.patch new file mode 100644 index 00000000..e681936e --- /dev/null +++ b/package/ibrdtnd/0002-SecurityCertificateManager.cpp-include-cstring-267.patch @@ -0,0 +1,29 @@ +From 9458a8627ed73600488a6d8a0ce2ce1d123da583 Mon Sep 17 00:00:00 2001 +From: bkuhls +Date: Sun, 19 Aug 2018 11:23:48 +0200 +Subject: [PATCH] SecurityCertificateManager.cpp: include cstring (#267) + +Fixes build with gcc-8.2.0. + +Upstream: https://github.com/ibrdtn/ibrdtn/commit/122fa8ed49f896abf6a389505f3d0b66d49d1e77 + +Signed-off-by: Matthew Weber +--- + src/security/SecurityCertificateManager.cpp | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/security/SecurityCertificateManager.cpp b/src/security/SecurityCertificateManager.cpp +index 5fba703..f2bbb01 100644 +--- a/src/security/SecurityCertificateManager.cpp ++++ b/src/security/SecurityCertificateManager.cpp +@@ -22,6 +22,7 @@ + #include "security/SecurityCertificateManager.h" + #include "Configuration.h" + ++#include + #include + + #include +-- +1.9.1 + diff --git a/package/ibrdtnd/Config.in b/package/ibrdtnd/Config.in new file mode 100644 index 00000000..f7f371ed --- /dev/null +++ b/package/ibrdtnd/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_IBRDTND + bool "ibrdtnd" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_IBRDTN + select BR2_PACKAGE_IBRCOMMON + help + IBR-DTN is a small dtn application that supports: + Bundle Protocol RFC 5050 + Bundle Security Protocol RFC 6257 + + http://trac.ibr.cs.tu-bs.de/project-cm-2012-ibrdtn + +comment "ibrdtnd needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/ibrdtnd/ibrdtnd.hash b/package/ibrdtnd/ibrdtnd.hash new file mode 100644 index 00000000..e1438bee --- /dev/null +++ b/package/ibrdtnd/ibrdtnd.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 9bd79636154093ab6bf4fd10d6c62d67c6db45141460847b19def327c93771ed ibrdtnd-1.0.1.tar.gz +sha256 0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594 COPYING diff --git a/package/ibrdtnd/ibrdtnd.mk b/package/ibrdtnd/ibrdtnd.mk new file mode 100644 index 00000000..20ac496f --- /dev/null +++ b/package/ibrdtnd/ibrdtnd.mk @@ -0,0 +1,53 @@ +################################################################################ +# +# ibrdtnd +# +################################################################################ + +IBRDTND_VERSION = 1.0.1 +IBRDTND_SITE = https://www.ibr.cs.tu-bs.de/projects/ibr-dtn/releases +IBRDTND_LICENSE = Apache-2.0 +IBRDTND_LICENSE_FILES = COPYING +IBRDTND_DEPENDENCIES = ibrdtn ibrcommon host-pkgconf + +# Disable features that don't have the necessary dependencies in +# Buildroot +IBRDTND_CONF_OPTS = \ + --disable-dtndht \ + --without-wifip2p \ + --without-vmime + +# don't build documentation +IBRDTND_CONF_ENV = \ + PDFLATEX='no' \ + CXXFLAGS="$(TARGET_CXXFLAGS) -std=c++11" + +ifeq ($(BR2_PACKAGE_LIBDAEMON),y) +IBRDTND_CONF_OPTS += --enable-libdaemon +IBRDTND_DEPENDENCIES += libdaemon +else +IBRDTND_CONF_OPTS += --disable-libdaemon +endif + +ifeq ($(BR2_PACKAGE_LIBCURL),y) +IBRDTND_CONF_OPTS += --with-curl +IBRDTND_DEPENDENCIES += libcurl +else +IBRDTND_CONF_OPTS += --without-curl +endif + +ifeq ($(BR2_PACKAGE_SQLITE),y) +IBRDTND_CONF_OPTS += --with-sqlite +IBRDTND_DEPENDENCIES += sqlite +else +IBRDTND_CONF_OPTS += --without-sqlite +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +IBRDTND_CONF_OPTS += --with-tls +IBRDTND_DEPENDENCIES += openssl +else +IBRDTND_CONF_OPTS += --without-tls +endif + +$(eval $(autotools-package)) diff --git a/package/icu/0001-dont-build-static-dynamic-twice.patch b/package/icu/0001-dont-build-static-dynamic-twice.patch new file mode 100644 index 00000000..ccbe534a --- /dev/null +++ b/package/icu/0001-dont-build-static-dynamic-twice.patch @@ -0,0 +1,37 @@ +Don't build object files twice + +When passed --enable-static and --enable-shared, icu will generate +both a shared and a static version of its libraries. + +However, in order to do so, it builds each and every object file +twice: once with -fPIC (for the shared library), and once without +-fPIC (for the static library). While admittedly building -fPIC for a +static library generates a slightly suboptimal code, this is what all +the autotools-based project are doing. They build each object file +once, and they use it for both the static and shared libraries. + +icu builds the object files for the shared library as .o files, and +the object files for static library as .ao files. By simply changing +the suffix of object files used for static libraries to ".o", we tell +icu to use the ones built for the shared library (i.e, with -fPIC), +and avoid the double build of icu. + +On a fast build server, this brings the target icu build from +3m41.302s down to 1m43.926s (approximate numbers: some other builds +are running on the system at the same time). + +Signed-off-by: Thomas Petazzoni + +Index: b/source/config/mh-linux +=================================================================== +--- a/source/config/mh-linux ++++ b/source/config/mh-linux +@@ -35,7 +35,7 @@ + ## Shared object suffix + SO = so + ## Non-shared intermediate object suffix +-STATIC_O = ao ++STATIC_O = o + + ## Compilation rules + %.$(STATIC_O): $(srcdir)/%.c diff --git a/package/icu/0002-workaround-toolchain-bugs.patch b/package/icu/0002-workaround-toolchain-bugs.patch new file mode 100644 index 00000000..b5f25d0a --- /dev/null +++ b/package/icu/0002-workaround-toolchain-bugs.patch @@ -0,0 +1,37 @@ +Workaround toolchain bugs + +Many of ARM Sourcery CodeBench toolchain have a bug when compiling +icu's translit.cpp source file. The bug is trigerred when there is a +combination of "-W -Wall" and "-Os", and causes an internal compiler +error. The bug has been reported to Mentor Graphics. + +Even though it is clearly a toolchain bug, having a workaround for it +is trivial in this case. So it will avoid our users falling into this +internal compiler error, and allow our autobuilders to test more +packages using this Sourcery CodeBench toolchain.qq + +[Gustavo: update for ICU4C 54.1] +Signed-off-by: Thomas Petazzoni +Signed-off-by: Gustavo Zacarias + +diff -Nura icu.orig/source/configure icu/source/configure +--- icu.orig/source/configure 2014-12-18 15:49:43.038628644 -0300 ++++ icu/source/configure 2014-12-18 15:51:23.183083232 -0300 +@@ -4323,7 +4323,7 @@ + ;; + esac + +- CFLAGS="$CFLAGS -Wall -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings" ++ CFLAGS="$CFLAGS -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings" + else + case "${host}" in + *-*-cygwin) +@@ -4337,7 +4337,7 @@ + fi + if test "$GXX" = yes + then +- CXXFLAGS="$CXXFLAGS -W -Wall -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long" ++ CXXFLAGS="$CXXFLAGS -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long" + else + case "${host}" in + *-*-cygwin) diff --git a/package/icu/0003-link-icudata-as-data-only.patch b/package/icu/0003-link-icudata-as-data-only.patch new file mode 100644 index 00000000..d970e8d3 --- /dev/null +++ b/package/icu/0003-link-icudata-as-data-only.patch @@ -0,0 +1,35 @@ +From d5d0c4bb7cc9aa4a132ec0bea13255aee50c1cf9 Mon Sep 17 00:00:00 2001 +From: Maxime Hadjinlian +Date: Fri, 6 Jun 2014 14:55:58 +0200 +Subject: [PATCH] Don't link icudata as a data only library + +This patch cames straight from Debian. It fixes an issue when +libicudata would not have some flags indicating it's EABIhf, causing +applications linked against libicudata to not start on EABIhf +systems. Getting rid of the -nodefaultlibs -nostdlib flags solves the +problem, and is the solution that is used by Debian, see +https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=653457. + +Signed-off-by: Maxime Hadjinlian +--- + source/config/mh-linux | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/source/config/mh-linux b/source/config/mh-linux +index 531a3b2..5a2a7c4 100644 +--- a/source/config/mh-linux ++++ b/source/config/mh-linux +@@ -21,7 +21,9 @@ LD_RPATH= -Wl,-zorigin,-rpath,'$$'ORIGIN + LD_RPATH_PRE = -Wl,-rpath, + + ## These are the library specific LDFLAGS +-LDFLAGSICUDT=-nodefaultlibs -nostdlib ++#LDFLAGSICUDT=-nodefaultlibs -nostdlib ++# Debian change: linking icudata as data only causes too many problems. ++LDFLAGSICUDT= + + ## Compiler switch to embed a library name + # The initial tab in the next line is to prevent icu-config from reading it. +-- +2.0.0.rc2 + diff --git a/package/icu/0004-fix-static-linking-with-icu-uc.patch b/package/icu/0004-fix-static-linking-with-icu-uc.patch new file mode 100644 index 00000000..965906b9 --- /dev/null +++ b/package/icu/0004-fix-static-linking-with-icu-uc.patch @@ -0,0 +1,34 @@ +From ffff12fd321c7a056e796e74cc508726b0626ae0 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Wed, 22 Jul 2015 22:43:25 +0200 +Subject: [PATCH] fix static linking with icu-uc + +During static linking with a C application and libicuuc.a, +-lstdc++ is required. + +Add -lstdc++ in Libs.private of icu-uc.pc. + +Fixes: +http://autobuild.buildroot.net/results/210/2107f9dfb39eeb6559fb4271c7af8b39aef521ca/ + +Signed-off-by: Romain Naour +--- + source/Makefile.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/source/Makefile.in b/source/Makefile.in +index 9db6c52..ca48e16 100644 +--- a/source/Makefile.in ++++ b/source/Makefile.in +@@ -264,7 +264,7 @@ config/icu-uc.pc: config/icu.pc Makefile icudefs.mk + @echo "Description: $(PACKAGE_ICU_DESCRIPTION): Common and Data libraries" >> $@ + @echo "Name: $(PACKAGE)-uc" >> $@ + @echo "Libs:" '-L$${libdir}' "${ICULIBS_UC}" "${ICULIBS_DT}" >> $@ +- @echo "Libs.private:" '$${baselibs}' >> $@ ++ @echo "Libs.private:" '$${baselibs}' -lstdc++ >> $@ + @echo $@ updated. + + config/icu-i18n.pc: config/icu.pc Makefile icudefs.mk +-- +2.4.3 + diff --git a/package/icu/0005-icu-looongarch-support.patch b/package/icu/0005-icu-looongarch-support.patch new file mode 100644 index 00000000..d97d51f7 --- /dev/null +++ b/package/icu/0005-icu-looongarch-support.patch @@ -0,0 +1,11 @@ +diff -Nprua icu-bak/source/i18n/double-conversion-utils.h icu/source/i18n/double-conversion-utils.h +--- icu-bak/source/i18n/double-conversion-utils.h 2020-10-29 05:21:12.000000000 +0800 ++++ icu/source/i18n/double-conversion-utils.h 2022-10-18 11:58:36.917691787 +0800 +@@ -128,6 +128,7 @@ int main(int argc, char** argv) { + defined(__riscv) || defined(__e2k__) || \ + defined(__or1k__) || defined(__arc__) || \ + defined(__microblaze__) || defined(__XTENSA__) || \ ++ defined(_LOONGARCH_ARCH) || defined(__loongarch__) || \ + defined(__EMSCRIPTEN__) || defined(__wasm32__) + #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 + #elif defined(__mc68000__) || \ diff --git a/package/icu/Config.in b/package/icu/Config.in new file mode 100644 index 00000000..b0c9eac8 --- /dev/null +++ b/package/icu/Config.in @@ -0,0 +1,35 @@ +config BR2_PACKAGE_ICU + bool "icu" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + depends on BR2_HOST_GCC_AT_LEAST_4_9 # C++11 PR56019 + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C++11 PR56019 + depends on BR2_TOOLCHAIN_HAS_THREADS + # icu does some funky things by generating by itself an ELF + # file, and it cannot easily be changed to generate FLAT + # format. + depends on !BR2_BINFMT_FLAT + help + International Components for Unicode. + + http://site.icu-project.org/ + +if BR2_PACKAGE_ICU + +config BR2_PACKAGE_ICU_CUSTOM_DATA_PATH + string "Path to custom data library file" + help + This option allows to define the path to a custom data + library generated with http://apps.icu-project.org/datacustom/ + Make sure you select the appropiate version to match the one + provided by buildroot. + Leave empty to not use this functionality. + +endif + +comment "icu needs a toolchain w/ C++, wchar, threads, gcc >= 4.9, host gcc >= 4.9" + depends on !BR2_BINFMT_FLAT + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || \ + !BR2_HOST_GCC_AT_LEAST_4_9 diff --git a/package/icu/icu.hash b/package/icu/icu.hash new file mode 100644 index 00000000..80cdd7df --- /dev/null +++ b/package/icu/icu.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 a9f2e3d8b4434b8e53878b4308bd1e6ee51c9c7042e2b1a376abefb6fbb29f2d icu4c-68_1-src.tgz +sha256 7915b19db903070778581ae05d8bf4ea241b34a05deb51ca4f5cbb15ea1cbba3 LICENSE diff --git a/package/icu/icu.mk b/package/icu/icu.mk new file mode 100644 index 00000000..4d67831c --- /dev/null +++ b/package/icu/icu.mk @@ -0,0 +1,67 @@ +################################################################################ +# +# icu +# +################################################################################ + +# Git tags (and therefore versions on release-monitoring.org) use the +# XX-Y format, but the tarballs are named XX_Y and the containing +# directories XX.Y. +ICU_VERSION = 68-1 +ICU_SOURCE = icu4c-$(subst -,_,$(ICU_VERSION))-src.tgz +ICU_SITE = \ + https://github.com/unicode-org/icu/releases/download/release-$(ICU_VERSION) +ICU_LICENSE = ICU License +ICU_LICENSE_FILES = LICENSE +ICU_CPE_ID_VENDOR = icu-project +ICU_CPE_ID_PRODUCT = international_components_for_unicode +ICU_CPE_ID_VERSION = $(subst -,.,$(ICU_VERSION)) + +ICU_DEPENDENCIES = host-icu +ICU_INSTALL_STAGING = YES +ICU_CONFIG_SCRIPTS = icu-config +ICU_CONF_OPTS = \ + --with-cross-build=$(HOST_ICU_DIR)/source \ + --disable-samples \ + --disable-tests + +# When available, icu prefers to use C++11 atomics, which rely on the +# __atomic builtins. On certain architectures, this requires linking +# with libatomic starting from gcc 4.8. +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +ICU_CONF_ENV += LIBS="-latomic" +endif + +# strtod_l() is not supported by musl; also xlocale.h is missing +ifeq ($(BR2_TOOLCHAIN_USES_MUSL),y) +ICU_CONF_ENV += ac_cv_func_strtod_l=no +endif + +HOST_ICU_CONF_OPTS = \ + --disable-samples \ + --disable-tests \ + --disable-extras \ + --disable-icuio \ + --disable-layout \ + --disable-renaming +ICU_SUBDIR = source +HOST_ICU_SUBDIR = source + +ICU_CUSTOM_DATA_PATH = $(call qstrip,$(BR2_PACKAGE_ICU_CUSTOM_DATA_PATH)) + +ifneq ($(ICU_CUSTOM_DATA_PATH),) +define ICU_COPY_CUSTOM_DATA + cp $(ICU_CUSTOM_DATA_PATH) $(@D)/source/data/in/ +endef +ICU_POST_PATCH_HOOKS += ICU_COPY_CUSTOM_DATA +endif + +define ICU_REMOVE_DEV_FILES + rm -f $(addprefix $(TARGET_DIR)/usr/bin/,derb genbrk gencfu gencnval gendict genrb icuinfo makeconv uconv) + rm -f $(addprefix $(TARGET_DIR)/usr/sbin/,genccode gencmn gennorm2 gensprep icupkg) + rm -rf $(TARGET_DIR)/usr/share/icu +endef +ICU_POST_INSTALL_TARGET_HOOKS += ICU_REMOVE_DEV_FILES + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/ifenslave/Config.in b/package/ifenslave/Config.in new file mode 100644 index 00000000..d28e0f7c --- /dev/null +++ b/package/ifenslave/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_IFENSLAVE + bool "ifenslave" + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + Configure network interfaces for parallel routing (bonding) + + https://salsa.debian.org/debian/ifenslave diff --git a/package/ifenslave/ifenslave.hash b/package/ifenslave/ifenslave.hash new file mode 100644 index 00000000..9073165e --- /dev/null +++ b/package/ifenslave/ifenslave.hash @@ -0,0 +1,5 @@ +# From http://snapshot.debian.org/archive/debian/20170102T091407Z/pool/main/i/ifenslave/ifenslave_2.9.dsc +sha1 a17e88fa298ef337e872c8aa5d7a390921239d1a ifenslave_2.9.tar.xz +sha256 e5666c0b61347bd06f2394c16eca6895fcb5e5cc83d0a1c596a975274de5a3c9 ifenslave_2.9.tar.xz +# Locally computed +sha256 299e00f3afc0e6ea0685340df73ad444e58e6fe0229989ba0983f5f33e275c41 debian/copyright diff --git a/package/ifenslave/ifenslave.mk b/package/ifenslave/ifenslave.mk new file mode 100644 index 00000000..b51aa720 --- /dev/null +++ b/package/ifenslave/ifenslave.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# ifenslave +# +################################################################################ + +IFENSLAVE_VERSION = 2.9 +IFENSLAVE_SOURCE = ifenslave_$(IFENSLAVE_VERSION).tar.xz +IFENSLAVE_SITE = http://snapshot.debian.org/archive/debian/20170102T091407Z/pool/main/i/ifenslave +IFENSLAVE_LICENSE = GPL-3.0+ +IFENSLAVE_LICENSE_FILES = debian/copyright + +# shell script, so nothing to build + +define IFENSLAVE_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/ifenslave $(TARGET_DIR)/sbin/ifenslave +endef + +$(eval $(generic-package)) diff --git a/package/ifmetric/0001-Fix-issue-NETLINK-Packet-too-small-or-truncated-92-1.patch b/package/ifmetric/0001-Fix-issue-NETLINK-Packet-too-small-or-truncated-92-1.patch new file mode 100644 index 00000000..8986b4fc --- /dev/null +++ b/package/ifmetric/0001-Fix-issue-NETLINK-Packet-too-small-or-truncated-92-1.patch @@ -0,0 +1,29 @@ +From 0c80f9ead3eb1d938b3e8e68165c91e62db72de3 Mon Sep 17 00:00:00 2001 +From: Damjan Georgievski +Date: Wed, 15 Aug 2012 00:54:38 +0200 +Subject: [PATCH] Fix issue: NETLINK: Packet too small or truncated! + 92!=16!=244 + +As reported in http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=514197#22 + +Signed-off-by: Peter Korsgaard +--- + src/nlrequest.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/nlrequest.c b/src/nlrequest.c +index 99fd3d0..3a1f794 100644 +--- a/src/nlrequest.c ++++ b/src/nlrequest.c +@@ -44,7 +44,7 @@ int netlink_request(int s, struct nlmsghdr *n, int (*callback) (struct nlmsghdr + + for (;;) { + int bytes; +- char replybuf[2048]; ++ char replybuf[4096]; + struct nlmsghdr *p = (struct nlmsghdr *) replybuf; + + if ((bytes = recv(s, &replybuf, sizeof(replybuf), 0)) < 0) { +-- +2.11.0 + diff --git a/package/ifmetric/Config.in b/package/ifmetric/Config.in new file mode 100644 index 00000000..64c8ace8 --- /dev/null +++ b/package/ifmetric/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_IFMETRIC + bool "ifmetric" + help + Ifmetric is a Linux tool for setting the metrics of all IPv4 + routes attached to a given network interface at once. This + may be used to change the priority of routing IPv4 traffic + over the interface. Lower metrics correlate with higher + priorities. + + http://0pointer.de/lennart/projects/ifmetric/ diff --git a/package/ifmetric/ifmetric.hash b/package/ifmetric/ifmetric.hash new file mode 100644 index 00000000..186522ef --- /dev/null +++ b/package/ifmetric/ifmetric.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 0fa8510a4e34e555f136f9df81d26618313f2d69a4880c0fb5967f19502f1aec ifmetric-0.3.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 LICENSE +sha256 1e33d5a8750b4b3c2cb4fb89a916463f3c838f8eb361abbf72faf244c7dde771 README diff --git a/package/ifmetric/ifmetric.mk b/package/ifmetric/ifmetric.mk new file mode 100644 index 00000000..29a6cbcd --- /dev/null +++ b/package/ifmetric/ifmetric.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# ifmetric +# +################################################################################ + +IFMETRIC_VERSION = 0.3 +IFMETRIC_SITE = http://0pointer.de/lennart/projects/ifmetric +IFMETRIC_LICENSE = GPL-2.0+ +IFMETRIC_LICENSE_FILES = LICENSE README +# do not generate documentation +IFMETRIC_CONF_OPTS = --disable-lynx --disable-xmltoman + +$(eval $(autotools-package)) diff --git a/package/ifplugd/0001-cross.patch b/package/ifplugd/0001-cross.patch new file mode 100644 index 00000000..62172381 --- /dev/null +++ b/package/ifplugd/0001-cross.patch @@ -0,0 +1,17 @@ +--- + configure | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: ifplugd-0.28/configure +=================================================================== +--- ifplugd-0.28.orig/configure ++++ ifplugd-0.28/configure +@@ -5430,7 +5430,7 @@ + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + if test "$cross_compiling" = yes; then +- ac_cv_func_malloc_0_nonnull=no ++ ac_cv_func_malloc_0_nonnull=yes + else + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ diff --git a/package/ifplugd/0002-fix-headers.patch b/package/ifplugd/0002-fix-headers.patch new file mode 100644 index 00000000..06372a26 --- /dev/null +++ b/package/ifplugd/0002-fix-headers.patch @@ -0,0 +1,24 @@ +--- + src/interface.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: ifplugd-0.28/src/interface.c +=================================================================== +--- ifplugd-0.28.orig/src/interface.c ++++ ifplugd-0.28/src/interface.c +@@ -23,7 +23,6 @@ + #endif + + #include +-#include + #include + #include + #include +@@ -32,6 +31,7 @@ + #include + #include + #include ++#include + #include + #include + #include diff --git a/package/ifplugd/0003-no-cxx.patch b/package/ifplugd/0003-no-cxx.patch new file mode 100644 index 00000000..50ec0545 --- /dev/null +++ b/package/ifplugd/0003-no-cxx.patch @@ -0,0 +1,17 @@ +[PATCH] ifplugd: configure: don't check for C++ compiler + +The configure script was checking for a C++ compiler (and erroring out +if not found), even though it isn't used for anything. + +Signed-off-by: Peter Korsgaard +diff -urpN ifplugd-0.28/configure.ac ifplugd-0.28.new/configure.ac +--- ifplugd-0.28/configure.ac 2005-06-04 21:21:51.000000000 +0200 ++++ ifplugd-0.28.new/configure.ac 2008-12-13 20:31:13.000000000 +0100 +@@ -33,7 +33,6 @@ if type -p stow > /dev/null && test -d / + fi + + # Checks for programs. +-AC_PROG_CXX + AC_PROG_CC + AC_PROG_CPP + AC_PROG_INSTALL diff --git a/package/ifplugd/0004-musl-fix-types.patch b/package/ifplugd/0004-musl-fix-types.patch new file mode 100644 index 00000000..174f9c8a --- /dev/null +++ b/package/ifplugd/0004-musl-fix-types.patch @@ -0,0 +1,24 @@ +The musl C library does not define type names such as `__uint32_t`. Instead we +use the integer types declared in the ISO C standard header file . + +Signed-off-by: Jörg Krause + +diff -purN ifplugd-0.28.orig/src/ethtool-local.h ifplugd-0.28/src/ethtool-local.h +--- ifplugd-0.28.orig/src/ethtool-local.h 2015-08-01 18:43:47.360916834 +0200 ++++ ifplugd-0.28/src/ethtool-local.h 2015-08-01 18:44:24.256037746 +0200 +@@ -21,10 +21,12 @@ + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + ++#include ++ + typedef unsigned long long u64; +-typedef __uint32_t u32; +-typedef __uint16_t u16; +-typedef __uint8_t u8; ++typedef uint32_t u32; ++typedef uint16_t u16; ++typedef uint8_t u8; + + #include "ethtool-kernel.h" + diff --git a/package/ifplugd/0005-src-interface.h-fix-build-with-gcc-10.patch b/package/ifplugd/0005-src-interface.h-fix-build-with-gcc-10.patch new file mode 100644 index 00000000..febeb768 --- /dev/null +++ b/package/ifplugd/0005-src-interface.h-fix-build-with-gcc-10.patch @@ -0,0 +1,38 @@ +From 4ce42974267dd969a597a7357d6c98ccbe8140f8 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 17 Aug 2020 20:41:29 +0200 +Subject: [PATCH] src/interface.h: fix build with gcc 10 + +This will fix the following build failure: + +/home/buildroot/autobuild/instance-1/output-1/host/bin/arm-buildroot-linux-gnueabihf-gcc -D_REENTRANT -DSYSCONFDIR="\"/etc\"" -D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -pipe -W -Wall -Wno-unused-parameter -o ifplugstatus ifplugstatus.o interface.o -L/home/buildroot/autobuild/instance-1/output-1/host/bin/../arm-buildroot-linux-gnueabihf/sysroot/usr/lib -ldaemon +/home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: interface.o:(.bss+0x0): multiple definition of `interface_do_message'; ifplugstatus.o:(.bss+0xc): first defined here +/home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: interface.o:(.bss+0x4): multiple definition of `interface_auto_up'; ifplugstatus.o:(.bss+0x4): first defined here + +Fixes: + - http://autobuild.buildroot.org/results/63f7c6fc4a2a30c8eb0298856a2615f816d50299 + +Signed-off-by: Fabrice Fontaine +[Upstream status: sent to Lennart Poettering ] +--- + src/interface.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/interface.h b/src/interface.h +index 2f35a84..e603844 100644 +--- a/src/interface.h ++++ b/src/interface.h +@@ -21,8 +21,8 @@ + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +-int interface_auto_up; +-int interface_do_message; ++extern int interface_auto_up; ++extern int interface_do_message; + + typedef enum { IFSTATUS_UP, IFSTATUS_DOWN, IFSTATUS_ERR } interface_status_t; + +-- +2.27.0 + diff --git a/package/ifplugd/Config.in b/package/ifplugd/Config.in new file mode 100644 index 00000000..c4b5b5b9 --- /dev/null +++ b/package/ifplugd/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_IFPLUGD + bool "ifplugd" + # libdaemon uses fork() + depends on BR2_USE_MMU + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + select BR2_PACKAGE_LIBDAEMON + help + Ifplugd is a daemon which will automatically configure your + ethernet device when a cable is plugged in and automatically + de-configure it if the cable is pulled out. This is useful + on laptops with onboard network adapters, since it will only + configure the interface when a cable is really connected. + + http://0pointer.de/lennart/projects/ifplugd/ diff --git a/package/ifplugd/ifplugd.hash b/package/ifplugd/ifplugd.hash new file mode 100644 index 00000000..9b720e31 --- /dev/null +++ b/package/ifplugd/ifplugd.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 474754ac4ab32d738cbf2a4a3e87ee0a2c71b9048a38bdcd7df1e4f9fd6541f0 ifplugd-0.28.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 LICENSE diff --git a/package/ifplugd/ifplugd.mk b/package/ifplugd/ifplugd.mk new file mode 100644 index 00000000..06b06074 --- /dev/null +++ b/package/ifplugd/ifplugd.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# ifplugd +# +################################################################################ + +IFPLUGD_VERSION = 0.28 +IFPLUGD_SITE = http://0pointer.de/lennart/projects/ifplugd +IFPLUGD_LICENSE = GPL-2.0+ +IFPLUGD_LICENSE_FILES = LICENSE +IFPLUGD_AUTORECONF = YES + +# install-strip unconditionally overwrites $(TARGET_DIR)/etc/ifplugd/ifplugd.* +IFPLUGD_INSTALL_TARGET_OPTS = DESTDIR=$(TARGET_DIR) install-exec +IFPLUGD_CONF_OPTS = --disable-lynx --with-initdir=/etc/init.d/ +IFPLUGD_DEPENDENCIES = libdaemon + +define IFPLUGD_INSTALL_FIXUP + $(INSTALL) -D -m 0644 $(@D)/conf/ifplugd.conf $(TARGET_DIR)/etc/ifplugd/ifplugd.conf; \ + $(SED) 's^\(ARGS=.*\)w^\1^' $(TARGET_DIR)/etc/ifplugd/ifplugd.conf; \ + $(INSTALL) -D -m 0755 $(@D)/conf/ifplugd.action \ + $(TARGET_DIR)/etc/ifplugd/ifplugd.action +endef + +IFPLUGD_POST_INSTALL_TARGET_HOOKS += IFPLUGD_INSTALL_FIXUP + +define IFPLUGD_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 $(@D)/conf/ifplugd.init \ + $(TARGET_DIR)/etc/init.d/S45ifplugd + # don't use bash for init script + $(SED) 's^/bin/bash^/bin/sh^g' $(TARGET_DIR)/etc/init.d/S45ifplugd +endef + +$(eval $(autotools-package)) diff --git a/package/iftop/0001-ui_common.h-fix-build-with-gcc-10.patch b/package/iftop/0001-ui_common.h-fix-build-with-gcc-10.patch new file mode 100644 index 00000000..4bee03eb --- /dev/null +++ b/package/iftop/0001-ui_common.h-fix-build-with-gcc-10.patch @@ -0,0 +1,60 @@ +From 18a9f7732944bfe45023f9dd7528295e7d43e678 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Wed, 12 Aug 2020 22:31:33 +0200 +Subject: [PATCH] ui_common.h: fix build with gcc 10 + +Define global variables as extern in header to fix the build with gcc 10 +which default to -fno-common: https://gcc.gnu.org/gcc-10/porting_to.html + +Fixes: + - http://autobuild.buildroot.org/results/55a8581f11e776439782c228441ef1c8c1243386 + +Signed-off-by: Fabrice Fontaine +[Upstream status: sent to iftop-users@lists.beasts.org] +--- + ui_common.c | 6 ++++++ + ui_common.h | 10 +++++----- + 2 files changed, 11 insertions(+), 5 deletions(-) + +diff --git a/ui_common.c b/ui_common.c +index dcf6646..b1027ec 100644 +--- a/ui_common.c ++++ b/ui_common.c +@@ -17,6 +17,12 @@ + + #include "ui_common.h" + ++sorted_list_type screen_list; ++host_pair_line totals; ++int peaksent, peakrecv, peaktotal; ++hash_type* screen_hash; ++hash_type* service_hash; ++ + /* 2, 10 and 40 seconds */ + int history_divs[HISTORY_DIVISIONS] = {1, 5, 20}; + +diff --git a/ui_common.h b/ui_common.h +index 63ae5bb..add72fe 100644 +--- a/ui_common.h ++++ b/ui_common.h +@@ -33,12 +33,12 @@ typedef struct host_pair_line_tag { + + extern options_t options; + +-sorted_list_type screen_list; +-host_pair_line totals; +-int peaksent, peakrecv, peaktotal; ++extern sorted_list_type screen_list; ++extern host_pair_line totals; ++extern int peaksent, peakrecv, peaktotal; + extern history_type history_totals; +-hash_type* screen_hash; +-hash_type* service_hash; ++extern hash_type* screen_hash; ++extern hash_type* service_hash; + + void analyse_data(void); + void screen_list_init(void); +-- +2.27.0 + diff --git a/package/iftop/0002-Rename-pcap_filter-to-iftop_pcap_filter.patch b/package/iftop/0002-Rename-pcap_filter-to-iftop_pcap_filter.patch new file mode 100644 index 00000000..92eedcca --- /dev/null +++ b/package/iftop/0002-Rename-pcap_filter-to-iftop_pcap_filter.patch @@ -0,0 +1,51 @@ +From 64a185ce2017e4523f4bc39a36c7aebd6d68549a Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Wed, 2 Jun 2021 08:21:04 +0200 +Subject: [PATCH] Rename pcap_filter to iftop_pcap_filter + +Rename pcap_filter to iftop_pcap_filter to fix the following static +build failure: + +/home/buildroot/autobuild/run/instance-3/output-1/host/bin/riscv64-linux-gcc -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -static -static -o iftop addr_hash.o edline.o hash.o iftop.o ns_hash.o options.o resolver.o screenfilter.o serv_hash.o sorted_list.o threadprof.o ui_common.o ui.o tui.o util.o addrs_ioctl.o addrs_dlpi.o dlcommon.o stringmap.o cfgfile.o vector.o -lpcap -lpcap -L/home/buildroot/autobuild/run/instance-3/output-1/host/riscv64-buildroot-linux-musl/sysroot/usr/bin/../../../../bin/../riscv64-buildroot-linux-musl/sysroot/usr/lib -lnl-genl-3 -lnl-3 -lpthread -lcurses +/home/buildroot/autobuild/run/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/riscv64-buildroot-linux-musl/10.2.0/../../../../riscv64-buildroot-linux-musl/bin/ld: /home/buildroot/autobuild/run/instance-3/output-1/host/riscv64-buildroot-linux-musl/sysroot/usr/bin/../../../../bin/../riscv64-buildroot-linux-musl/sysroot/usr/lib/libpcap.a(bpf_filter.o): in function `pcap_filter': +bpf_filter.c:(.text+0x4a8): multiple definition of `pcap_filter'; iftop.o:iftop.c:(.bss+0x1a8): first defined here + +Fixes: + - http://autobuild.buildroot.org/results/eb53ff6b031c654daec57050dec376b5c9134a81 + +Signed-off-by: Fabrice Fontaine +--- + iftop.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/iftop.c b/iftop.c +index aaec6aa..f89eee3 100644 +--- a/iftop.c ++++ b/iftop.c +@@ -74,7 +74,7 @@ int history_len = 1; + pthread_mutex_t tick_mutex; + + pcap_t* pd; /* pcap descriptor */ +-struct bpf_program pcap_filter; ++struct bpf_program iftop_pcap_filter; + pcap_handler packet_handler; + + sig_atomic_t foad; +@@ -679,12 +679,12 @@ char *set_filter_code(const char *filter) { + sprintf(x, "(%s) and (ip or ip6)", filter); + } else + x = xstrdup("ip or ip6"); +- if (pcap_compile(pd, &pcap_filter, x, 1, 0) == -1) { ++ if (pcap_compile(pd, &iftop_pcap_filter, x, 1, 0) == -1) { + xfree(x); + return pcap_geterr(pd); + } + xfree(x); +- if (pcap_setfilter(pd, &pcap_filter) == -1) ++ if (pcap_setfilter(pd, &iftop_pcap_filter) == -1) + return pcap_geterr(pd); + else + return NULL; +-- +2.30.2 + diff --git a/package/iftop/Config.in b/package/iftop/Config.in new file mode 100644 index 00000000..514101ca --- /dev/null +++ b/package/iftop/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_IFTOP + bool "iftop" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_LIBPCAP + help + iftop does for network usage what top(1) does for CPU usage. + It listens to network traffic on a named interface and + displays a table of current bandwidth usage by pairs of hosts. + Handy for answering the question "why is our ADSL link so + slow?". + + http://www.ex-parrot.com/pdw/iftop/ + +comment "iftop needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/iftop/iftop.hash b/package/iftop/iftop.hash new file mode 100644 index 00000000..3611a6a6 --- /dev/null +++ b/package/iftop/iftop.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 f733eeea371a7577f8fe353d86dd88d16f5b2a2e702bd96f5ffb2c197d9b4f97 iftop-1.0pre4.tar.gz +sha256 c00d1408e080e7f14615c7c2e0fbd079f1b2c19e93fc6eab819bdee8d5fdfbc4 COPYING diff --git a/package/iftop/iftop.mk b/package/iftop/iftop.mk new file mode 100644 index 00000000..664c725f --- /dev/null +++ b/package/iftop/iftop.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# iftop +# +################################################################################ + +IFTOP_VERSION = 1.0pre4 +IFTOP_SITE = http://www.ex-parrot.com/pdw/iftop/download +IFTOP_DEPENDENCIES = ncurses libpcap +IFTOP_LICENSE = GPL-2.0+ +IFTOP_LICENSE_FILES = COPYING + +IFTOP_LIBS = -lpcap +ifeq ($(BR2_STATIC_LIBS),y) +IFTOP_LIBS += `$(STAGING_DIR)/usr/bin/pcap-config --static --additional-libs` +endif +IFTOP_CONF_ENV += LIBS+="$(IFTOP_LIBS)" + +$(eval $(autotools-package)) diff --git a/package/ifupdown-scripts/Config.in b/package/ifupdown-scripts/Config.in new file mode 100644 index 00000000..166094c5 --- /dev/null +++ b/package/ifupdown-scripts/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_IFUPDOWN_SCRIPTS + bool "ifupdown scripts" + default y if BR2_ROOTFS_SKELETON_DEFAULT + depends on !BR2_PACKAGE_SYSTEMD_NETWORKD && !BR2_PACKAGE_NETIFRC + help + Set of scripts used by ifupdown (either the standalone one, + or the busybox one) to bring network up, or tear it down. diff --git a/package/ifupdown-scripts/S40network b/package/ifupdown-scripts/S40network new file mode 100644 index 00000000..642c5013 --- /dev/null +++ b/package/ifupdown-scripts/S40network @@ -0,0 +1,30 @@ +#!/bin/sh +# +# Start the network.... +# + +# Debian ifupdown needs the /run/network lock directory +mkdir -p /run/network + +case "$1" in + start) + printf "Starting network: " + /sbin/ifup -a + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + stop) + printf "Stopping network: " + /sbin/ifdown -a + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + restart|reload) + "$0" stop + "$0" start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? + diff --git a/package/ifupdown-scripts/ifupdown-scripts.mk b/package/ifupdown-scripts/ifupdown-scripts.mk new file mode 100644 index 00000000..5ef03214 --- /dev/null +++ b/package/ifupdown-scripts/ifupdown-scripts.mk @@ -0,0 +1,72 @@ +################################################################################ +# +# ifupdown-scripts +# +################################################################################ + +define IFUPDOWN_SCRIPTS_PREAMBLE + echo "# interface file auto-generated by buildroot" \ + > $(TARGET_DIR)/etc/network/interfaces +endef + +define IFUPDOWN_SCRIPTS_LOCALHOST + ( \ + echo ; \ + echo "auto lo"; \ + echo "iface lo inet loopback"; \ + ) >> $(TARGET_DIR)/etc/network/interfaces +endef + +IFUPDOWN_SCRIPTS_DHCP_IFACE = $(call qstrip,$(BR2_SYSTEM_DHCP)) + +ifneq ($(IFUPDOWN_SCRIPTS_DHCP_IFACE),) +define IFUPDOWN_SCRIPTS_DHCP + ( \ + echo ; \ + echo "auto $(IFUPDOWN_SCRIPTS_DHCP_IFACE)"; \ + echo "iface $(IFUPDOWN_SCRIPTS_DHCP_IFACE) inet dhcp"; \ + echo " pre-up /etc/network/nfs_check"; \ + echo " wait-delay 15"; \ + echo " hostname \$$(hostname)"; \ + ) >> $(TARGET_DIR)/etc/network/interfaces +endef +define IFUPDOWN_SCRIPTS_DHCP_OPENRC + echo "ifup $(IFUPDOWN_SCRIPTS_DHCP_IFACE)" \ + > $(TARGET_DIR)/etc/ifup.$(IFUPDOWN_SCRIPTS_DHCP_IFACE) + echo "ifdown $(IFUPDOWN_SCRIPTS_DHCP_IFACE)" \ + > $(TARGET_DIR)/etc/ifdown.$(IFUPDOWN_SCRIPTS_DHCP_IFACE) +endef +endif + +define IFUPDOWN_SCRIPTS_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(IFUPDOWN_SCRIPTS_PKGDIR)/nfs_check \ + $(TARGET_DIR)/etc/network/nfs_check + $(call SYSTEM_RSYNC,$(IFUPDOWN_SCRIPTS_PKGDIR)/network,$(TARGET_DIR)/etc/network) +endef + +define IFUPDOWN_SCRIPTS_INSTALL_INIT_OPENRC + $(IFUPDOWN_SCRIPTS_PREAMBLE) + $(IFUPDOWN_SCRIPTS_DHCP) + $(IFUPDOWN_SCRIPTS_DHCP_OPENRC) +endef + +define IFUPDOWN_SCRIPTS_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 $(IFUPDOWN_SCRIPTS_PKGDIR)/S40network \ + $(TARGET_DIR)/etc/init.d/S40network + $(IFUPDOWN_SCRIPTS_PREAMBLE) + $(IFUPDOWN_SCRIPTS_LOCALHOST) + $(IFUPDOWN_SCRIPTS_DHCP) +endef + +# ifupdown-scripts can not be selected when systemd-networkd is +# enabled, so if we are enabled with systemd, we must install our +# own service file. +define IFUPDOWN_SCRIPTS_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 $(IFUPDOWN_SCRIPTS_PKGDIR)/network.service \ + $(TARGET_DIR)/etc/systemd/system/network.service + $(IFUPDOWN_SCRIPTS_PREAMBLE) + $(IFUPDOWN_SCRIPTS_LOCALHOST) + $(IFUPDOWN_SCRIPTS_DHCP) +endef + +$(eval $(generic-package)) diff --git a/package/ifupdown-scripts/network.service b/package/ifupdown-scripts/network.service new file mode 100644 index 00000000..0d77bb82 --- /dev/null +++ b/package/ifupdown-scripts/network.service @@ -0,0 +1,21 @@ +[Unit] +Description=Network Connectivity +Wants=network.target +Before=network.target + +[Service] +Type=oneshot +RemainAfterExit=yes + +# lo is brought up earlier, which will cause the upcoming "ifup -a" to fail +# with exit code 1, due to an "ip: RTNETLINK answers: File exists" error during +# its "ip addr add ..." command, subsequently causing this unit to fail even +# though it is a benign error. Flushing the lo address with the command below +# before ifup prevents this failure. +ExecStart=/sbin/ip addr flush dev lo + +ExecStart=/sbin/ifup -a +ExecStop=/sbin/ifdown -a + +[Install] +WantedBy=multi-user.target diff --git a/package/ifupdown-scripts/network/if-down.d/.empty b/package/ifupdown-scripts/network/if-down.d/.empty new file mode 100644 index 00000000..e69de29b diff --git a/package/ifupdown-scripts/network/if-post-down.d/.empty b/package/ifupdown-scripts/network/if-post-down.d/.empty new file mode 100644 index 00000000..e69de29b diff --git a/package/ifupdown-scripts/network/if-pre-up.d/wait_iface b/package/ifupdown-scripts/network/if-pre-up.d/wait_iface new file mode 100755 index 00000000..ebccff2a --- /dev/null +++ b/package/ifupdown-scripts/network/if-pre-up.d/wait_iface @@ -0,0 +1,21 @@ +#!/bin/sh + +# In case we have a slow-to-appear interface (e.g. eth-over-USB), +# and we need to configure it, wait until it appears, but not too +# long either. IF_WAIT_DELAY is in seconds. + +if [ "${IF_WAIT_DELAY}" -a ! -e "/sys/class/net/${IFACE}" ]; then + printf "Waiting for interface %s to appear" "${IFACE}" + while [ ${IF_WAIT_DELAY} -gt 0 ]; do + if [ -e "/sys/class/net/${IFACE}" ]; then + printf "\n" + exit 0 + fi + sleep 1 + printf "." + : $((IF_WAIT_DELAY -= 1)) + done + printf " timeout!\n" + exit 1 +fi + diff --git a/package/ifupdown-scripts/network/if-up.d/.empty b/package/ifupdown-scripts/network/if-up.d/.empty new file mode 100644 index 00000000..e69de29b diff --git a/package/ifupdown-scripts/nfs_check b/package/ifupdown-scripts/nfs_check new file mode 100755 index 00000000..dfa0cbf5 --- /dev/null +++ b/package/ifupdown-scripts/nfs_check @@ -0,0 +1,20 @@ +#!/bin/sh + +# This allows NFS booting to work while also being able to configure +# the network interface via DHCP when not NFS booting. Otherwise, a +# NFS booted system will likely hang during DHCP configuration. + +# Attempting to configure the network interface used for NFS will +# initially bring that network down. Since the root filesystem is +# accessed over this network, the system hangs. + +# This script is run by ifup and will attempt to detect if a NFS root +# mount uses the interface to be configured (IFACE), and if so does +# not configure it. This should allow the same build to be disk/flash +# booted or NFS booted. + +nfsip=`sed -n '/^[^ ]*:.* \/ nfs.*[ ,]addr=\([0-9.]\+\).*/s//\1/p' /proc/mounts` +if [ -n "$nfsip" ] && ip route get to "$nfsip" | grep -q "dev $IFACE"; then + echo Skipping $IFACE, used for NFS from $nfsip + exit 1 +fi diff --git a/package/ifupdown/0001-dont-use-dpkg-architecture.patch b/package/ifupdown/0001-dont-use-dpkg-architecture.patch new file mode 100644 index 00000000..bb5c58f8 --- /dev/null +++ b/package/ifupdown/0001-dont-use-dpkg-architecture.patch @@ -0,0 +1,17 @@ +Drop the need for dpkg-architecture, we only build for linux. +Thanks to Károly Kasza for catching this one. + +Signed-off-by: Gustavo Zacarias + +diff -Nura ifupdown.orig/defn2c.pl ifupdown/defn2c.pl +--- ifupdown.orig/defn2c.pl 2014-11-18 16:39:28.878772655 -0300 ++++ ifupdown/defn2c.pl 2014-11-18 16:43:41.120456676 -0300 +@@ -2,7 +2,7 @@ + + use strict; + +-my $DEB_HOST_ARCH_OS = `dpkg-architecture -qDEB_HOST_ARCH_OS`; ++my $DEB_HOST_ARCH_OS = "linux"; + + $DEB_HOST_ARCH_OS =~ s/\n//; + diff --git a/package/ifupdown/Config.in b/package/ifupdown/Config.in new file mode 100644 index 00000000..97d02b4c --- /dev/null +++ b/package/ifupdown/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_IFUPDOWN + bool "ifupdown" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4 # iproute2 + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + # runtime for ip binary + select BR2_PACKAGE_IPROUTE2 if !BR2_PACKAGE_BUSYBOX + # runtime for run-parts + select BR2_PACKAGE_DEBIANUTILS if !BR2_PACKAGE_BUSYBOX + help + High level tools to configure network interfaces. + + https://tracker.debian.org/pkg/ifupdown + +comment "ifupdown needs a toolchain w/ headers >= 3.4" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4 + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS diff --git a/package/ifupdown/ifupdown.hash b/package/ifupdown/ifupdown.hash new file mode 100644 index 00000000..f8844a60 --- /dev/null +++ b/package/ifupdown/ifupdown.hash @@ -0,0 +1,4 @@ +# From http://ftp.de.debian.org/debian/pool/main/i/ifupdown/ifupdown_0.8.16.dsc +sha256 601416c12e39ac29022951a2867aed5c607f732ac57fd51517bfba92a4cc4fb0 ifupdown_0.8.16.tar.xz +# Locally computed +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/ifupdown/ifupdown.mk b/package/ifupdown/ifupdown.mk new file mode 100644 index 00000000..e62c2a79 --- /dev/null +++ b/package/ifupdown/ifupdown.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# ifupdown +# +################################################################################ + +IFUPDOWN_VERSION = 0.8.16 +IFUPDOWN_SOURCE = ifupdown_$(IFUPDOWN_VERSION).tar.xz +IFUPDOWN_SITE = http://snapshot.debian.org/archive/debian/20160922T165503Z/pool/main/i/ifupdown +IFUPDOWN_LICENSE = GPL-2.0+ +IFUPDOWN_LICENSE_FILES = COPYING +IFUPDOWN_CPE_ID_VENDOR = debian + +define IFUPDOWN_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(TARGET_CFLAGS) -std=gnu99 -D'IFUPDOWN_VERSION=\"$(IFUPDOWN_VERSION)\"'" \ + -C $(@D) +endef + +# install doesn't overwrite +define IFUPDOWN_INSTALL_TARGET_CMDS + $(RM) $(TARGET_DIR)/sbin/{ifdown,ifquery} + $(TARGET_MAKE_ENV) $(MAKE) BASEDIR=$(TARGET_DIR) -C $(@D) install +endef + +# We need to switch from /bin/ip to /sbin/ip +IFUPDOWN_DEFN_FILES = can inet inet6 ipx link meta +define IFUPDOWN_MAKE_IP_IN_SBIN + for f in $(IFUPDOWN_DEFN_FILES) ; do \ + $(SED) 's,/bin/ip,/sbin/ip,' $(@D)/$$f.defn ; \ + done +endef +IFUPDOWN_POST_PATCH_HOOKS += IFUPDOWN_MAKE_IP_IN_SBIN + +$(eval $(generic-package)) diff --git a/package/igd2-for-linux/Config.in b/package/igd2-for-linux/Config.in new file mode 100644 index 00000000..f1658d3a --- /dev/null +++ b/package/igd2-for-linux/Config.in @@ -0,0 +1,25 @@ +config BR2_PACKAGE_IGD2_FOR_LINUX + bool "igd2-for-linux" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_WCHAR + select BR2_PACKAGE_IPTABLES # runtime + select BR2_PACKAGE_LIBUPNP + help + This is The Linux UPnP Internet Gateway Device 2. It is + modified from the original Linux UPnP Internet Gateway Device + [http://linux-igd.sourceforge.net/] according to UPnP + InternetGatewayDevice:2 specifications. + + It implements the UPnP Internet Gateway Device version 2 + specification (IGDv2) and allows UPnP aware clients, such as + MSN Messenger, Azureus or Miranda to work properly from behind + a NAT firewall. + + Please edit /etc/upnpd.conf before using upnpd! + + https://github.com/Orange-OpenSource/igd2-for-linux + +comment "igd2-for-linux needs a toolchain w/ threads, wchar" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR diff --git a/package/igd2-for-linux/S99upnpd b/package/igd2-for-linux/S99upnpd new file mode 100644 index 00000000..c023fa47 --- /dev/null +++ b/package/igd2-for-linux/S99upnpd @@ -0,0 +1,67 @@ +#!/bin/sh + +NAME=upnpd +PIDFILE=/var/run/$NAME.pid +DAEMON=/usr/sbin/$NAME +CFGFILE=/etc/default/$NAME + +LAN=eth0 +WAN=eth0 + +# For the UPnP library to function correctly, networking must be configured +# properly for multicasting as described in +# https://sourceforge.net/p/pupnp/code/ci/master/tree/README. +# Without this addition, device advertisements and control point searches will +# not function. +# However, the route has to be configured once for all UPnP applications +# (igd2-for-linux, ushare, ...) so do not manage UPnP route by default +MANAGE_UPNP_MULTICAST_ROUTE_ON_LAN=0 + +# Read configuration variable file if it is present +if [ -f $CFGFILE ]; then + . $CFGFILE +fi + +DAEMON_ARGS="-f $WAN $LAN" + +start() { + if [ $MANAGE_UPNP_MULTICAST_ROUTE_ON_LAN != 0 ]; then + printf "Add UPnP multicast route on $LAN\n" + route add -net 239.0.0.0 netmask 255.0.0.0 $LAN + fi + printf "Starting $NAME: " + start-stop-daemon -S -q -m -b -p $PIDFILE --exec $DAEMON -- $DAEMON_ARGS + [ $? = 0 ] && echo "OK" || echo "FAIL" +} + +stop() { + printf "Stopping $NAME: " + start-stop-daemon -K -q -p $PIDFILE + [ $? = 0 ] && echo "OK" || echo "FAIL" + if [ $MANAGE_UPNP_MULTICAST_ROUTE_ON_LAN != 0 ]; then + printf "Remove UPnP multicast route on $LAN\n" + route del -net 239.0.0.0 netmask 255.0.0.0 $LAN + fi +} + +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac + +exit $? diff --git a/package/igd2-for-linux/igd2-for-linux.hash b/package/igd2-for-linux/igd2-for-linux.hash new file mode 100644 index 00000000..fe127233 --- /dev/null +++ b/package/igd2-for-linux/igd2-for-linux.hash @@ -0,0 +1,4 @@ +# Locally computed: +sha256 843f2b0a7597e6cc7af85da099a7cce3401a334cbb4a6ae9d38ce252311db9b9 igd2-for-linux-2.1.tar.gz +sha256 204d8eff92f95aac4df6c8122bc1505f468f3a901e5a4cc08940e0ede1938994 linuxigd2/doc/LICENSE +sha256 c8b99423cad48bb44e2cf52a496361404290865eac259a82da6d1e4331ececb3 linuxigd2/src/threadutil/COPYING diff --git a/package/igd2-for-linux/igd2-for-linux.mk b/package/igd2-for-linux/igd2-for-linux.mk new file mode 100644 index 00000000..8cc3c6ae --- /dev/null +++ b/package/igd2-for-linux/igd2-for-linux.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# igd2-for-linux +# +################################################################################ + +IGD2_FOR_LINUX_VERSION = 2.1 +IGD2_FOR_LINUX_SITE = \ + $(call github,Orange-OpenSource,igd2-for-linux,v$(IGD2_FOR_LINUX_VERSION)) + +IGD2_FOR_LINUX_LICENSE = GPL-2.0, BSD-3-Clause +IGD2_FOR_LINUX_LICENSE_FILES = linuxigd2/doc/LICENSE linuxigd2/src/threadutil/COPYING + +IGD2_FOR_LINUX_DEPENDENCIES = libupnp +# From git +IGD2_FOR_LINUX_AUTORECONF = YES +IGD2_FOR_LINUX_SUBDIR = linuxigd2 + +define IGD2_FOR_LINUX_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/igd2-for-linux/S99upnpd \ + $(TARGET_DIR)/etc/init.d/S99upnpd +endef + +define IGD2_FOR_LINUX_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0644 package/igd2-for-linux/upnpd.service \ + $(TARGET_DIR)/usr/lib/systemd/system/upnpd.service +endef + +$(eval $(autotools-package)) diff --git a/package/igd2-for-linux/upnpd.service b/package/igd2-for-linux/upnpd.service new file mode 100644 index 00000000..91a5b4ca --- /dev/null +++ b/package/igd2-for-linux/upnpd.service @@ -0,0 +1,22 @@ +[Unit] +Description=UPnP Internet Gateway Device version 2 daemon +After=network.target + +[Service] +Environment="LAN=eth0" +Environment="WAN=eth0" +EnvironmentFile=/etc/default/upnpd +# For the UPnP library to function correctly, networking must be configured +# properly for multicasting as described in +# https://sourceforge.net/p/pupnp/code/ci/master/tree/README. +# Without this addition, device advertisements and control point searches will +# not function. +# However, the route has to be configured once for all UPnP applications +# (igd2-for-linux, ushare, ...) so do not manage UPnP route by default +#ExecStartPre=/sbin/route add -net 239.0.0.0 netmask 255.0.0.0 $LAN +#ExecStopPost=/sbin/route del -net 239.0.0.0 netmask 255.0.0.0 $LAN +ExecStart=/usr/sbin/upnpd -f $WAN $LAN +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/package/igh-ethercat/Config.in b/package/igh-ethercat/Config.in new file mode 100644 index 00000000..e600ef5f --- /dev/null +++ b/package/igh-ethercat/Config.in @@ -0,0 +1,29 @@ +comment "igh-ethercat needs a Linux kernel to be built" + depends on !BR2_LINUX_KERNEL + +config BR2_PACKAGE_IGH_ETHERCAT + bool "igh-ethercat" + depends on BR2_LINUX_KERNEL + help + IgH EtherCAT Master for Linux. + + http://www.etherlab.org/en/ethercat/index.php + +if BR2_PACKAGE_IGH_ETHERCAT + +config BR2_PACKAGE_IGH_ETHERCAT_8139TOO + bool "8139too driver" + +config BR2_PACKAGE_IGH_ETHERCAT_E100 + bool "e100 driver" + +config BR2_PACKAGE_IGH_ETHERCAT_E1000 + bool "e1000 driver" + +config BR2_PACKAGE_IGH_ETHERCAT_E1000E + bool "e1000e driver" + +config BR2_PACKAGE_IGH_ETHERCAT_R8169 + bool "r8169 driver" + +endif diff --git a/package/igh-ethercat/igh-ethercat.hash b/package/igh-ethercat/igh-ethercat.hash new file mode 100644 index 00000000..fd373a14 --- /dev/null +++ b/package/igh-ethercat/igh-ethercat.hash @@ -0,0 +1,5 @@ +# From http://etherlab.org/download/ethercat/ethercat-1.5.2.tar.bz2.md5 +md5 6b4001f8d975865d74a0b108b3bdda3d ethercat-1.5.2.tar.bz2 +# Locally computed +sha256 231f7edcc7352d7734a96eef0b8030f77982678c516876fcb81e25b32d68564c COPYING +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LESSER diff --git a/package/igh-ethercat/igh-ethercat.mk b/package/igh-ethercat/igh-ethercat.mk new file mode 100644 index 00000000..b9771e8f --- /dev/null +++ b/package/igh-ethercat/igh-ethercat.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# igh-ethercat +# +################################################################################ + +IGH_ETHERCAT_VERSION = 1.5.2 +IGH_ETHERCAT_SITE = http://etherlab.org/download/ethercat +IGH_ETHERCAT_SOURCE = ethercat-$(IGH_ETHERCAT_VERSION).tar.bz2 +IGH_ETHERCAT_LICENSE = GPL-2.0 (IgH EtherCAT master), LGPL-2.1 (libraries) +IGH_ETHERCAT_LICENSE_FILES = COPYING COPYING.LESSER + +IGH_ETHERCAT_INSTALL_STAGING = YES + +IGH_ETHERCAT_CONF_OPTS = \ + --with-linux-dir=$(LINUX_DIR) + +IGH_ETHERCAT_CONF_OPTS += $(if $(BR2_PACKAGE_IGH_ETHERCAT_8139TOO),--enable-8139too,--disable-8139too) +IGH_ETHERCAT_CONF_OPTS += $(if $(BR2_PACKAGE_IGH_ETHERCAT_E100),--enable-e100,--disable-e100) +IGH_ETHERCAT_CONF_OPTS += $(if $(BR2_PACKAGE_IGH_ETHERCAT_E1000),--enable-e1000,--disable-e1000) +IGH_ETHERCAT_CONF_OPTS += $(if $(BR2_PACKAGE_IGH_ETHERCAT_E1000E),--enable-e1000e,--disable-e1000e) +IGH_ETHERCAT_CONF_OPTS += $(if $(BR2_PACKAGE_IGH_ETHERCAT_R8169),--enable-r8169,--disable-r8169) + +$(eval $(kernel-module)) +$(eval $(autotools-package)) diff --git a/package/igmpproxy/Config.in b/package/igmpproxy/Config.in new file mode 100644 index 00000000..37f39b28 --- /dev/null +++ b/package/igmpproxy/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_IGMPPROXY + bool "igmpproxy" + depends on BR2_USE_MMU # fork() + depends on BR2_USE_WCHAR + help + A simple dynamic Multicast Routing Daemon + using only IGMP signalling. It's intended + for simple forwarding of Multicast traffic + between networks. + + http://sourceforge.net/projects/igmpproxy/ + +comment "igmpproxy needs a toolchain w/ wchar" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR diff --git a/package/igmpproxy/igmpproxy.hash b/package/igmpproxy/igmpproxy.hash new file mode 100644 index 00000000..2566987a --- /dev/null +++ b/package/igmpproxy/igmpproxy.hash @@ -0,0 +1,5 @@ +# Locally computed: +sha256 6faa1f42ba323f60a9eb4958550e25b2e7e9c645da32c52ba12db0c9bdfce1ba igmpproxy-0.2.1.tar.gz +sha256 be3d05af93dbbc4650f8d641d8e1bec220af4a729e07ba71e949c25b93a1b4f6 COPYING +sha256 c4f65d5d396ad518a37d30b83fe33897661858dc174ff64a15d0461630ce64e4 GPL.txt +sha256 4328a21f0822caa9976356623118bcdcc9970c7a0f9a3deeba23c779b7cfb5d1 Stanford.txt diff --git a/package/igmpproxy/igmpproxy.mk b/package/igmpproxy/igmpproxy.mk new file mode 100644 index 00000000..fe4614fd --- /dev/null +++ b/package/igmpproxy/igmpproxy.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# igmpproxy +# +################################################################################ + +IGMPPROXY_VERSION = 0.2.1 +IGMPPROXY_SITE = $(call github,pali,igmpproxy,$(IGMPPROXY_VERSION)) +IGMPPROXY_AUTORECONF = YES +IGMPPROXY_LICENSE = GPL-2.0+, BSD-3-Clause (mrouted) +IGMPPROXY_LICENSE_FILES = COPYING GPL.txt Stanford.txt + +$(eval $(autotools-package)) diff --git a/package/ijs/Config.in b/package/ijs/Config.in new file mode 100644 index 00000000..50e8161b --- /dev/null +++ b/package/ijs/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_IJS + bool "ijs" + depends on BR2_USE_MMU # fork() + help + The IJS package contains a library which implements a + protocol for transmission of raster page images. + + http://www.openprinting.org/ diff --git a/package/ijs/ijs.hash b/package/ijs/ijs.hash new file mode 100644 index 00000000..6accb571 --- /dev/null +++ b/package/ijs/ijs.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 11a5f5084488c480f3ff5a24d64d7147bb64272bf60a0ba51330a56c5b50cab9 ijs-0.35.tar.bz2 +sha256 f723390b7ee019eccf07763dcb5744acf8bb43034bc3ba3d6f1c94440e365b4f README diff --git a/package/ijs/ijs.mk b/package/ijs/ijs.mk new file mode 100644 index 00000000..dfd3ff9f --- /dev/null +++ b/package/ijs/ijs.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# ijs +# +################################################################################ + +IJS_VERSION = 0.35 +IJS_SOURCE = ijs-$(IJS_VERSION).tar.bz2 +IJS_SITE = http://www.openprinting.org/download/ijs/download +IJS_LICENSE = MIT +IJS_LICENSE_FILES = README +# Buildroot libtool patch does not apply, so we autoreconf the +# package. +IJS_AUTORECONF = YES +IJS_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/ima-evm-utils/Config.in b/package/ima-evm-utils/Config.in new file mode 100644 index 00000000..59df58e5 --- /dev/null +++ b/package/ima-evm-utils/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_IMA_EVM_UTILS + bool "ima-evm-utils" + depends on BR2_USE_MMU # keyutils + depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS # tpm2-tss + depends on !BR2_STATIC_LIBS # keyutils, tpm2-tss + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_KEYUTILS + select BR2_PACKAGE_TPM2_TSS + help + Linux Integrity Measurement Architecture (IMA) + Extended Verification Module (EVM) tools. + + https://sourceforge.net/p/linux-ima/wiki/Home/ + +comment "ima-evm-utils needs dynamic library support" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS + depends on BR2_STATIC_LIBS diff --git a/package/ima-evm-utils/ima-evm-utils.hash b/package/ima-evm-utils/ima-evm-utils.hash new file mode 100644 index 00000000..2cdba227 --- /dev/null +++ b/package/ima-evm-utils/ima-evm-utils.hash @@ -0,0 +1,4 @@ +# sha1 from sourceforge, sha256 locally computed +sha1 034d163533ae5f9c06001b375ec7e5a1b09a3853 ima-evm-utils-1.3.2.tar.gz +sha256 c2b206e7f9fbe62a938b7ae59e31906fefae4d5351fe01db739bd8346b75d4a7 ima-evm-utils-1.3.2.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/ima-evm-utils/ima-evm-utils.mk b/package/ima-evm-utils/ima-evm-utils.mk new file mode 100644 index 00000000..cc53e02d --- /dev/null +++ b/package/ima-evm-utils/ima-evm-utils.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# ima-evm-utils +# +################################################################################ + +IMA_EVM_UTILS_VERSION = 1.3.2 +IMA_EVM_UTILS_SITE = http://downloads.sourceforge.net/project/linux-ima/ima-evm-utils +IMA_EVM_UTILS_LICENSE = GPL-2.0 +IMA_EVM_UTILS_LICENSE_FILES = COPYING +IMA_EVM_UTILS_DEPENDENCIES = host-pkgconf keyutils openssl tpm2-tss + +# Tarball doesn't contain configure +IMA_EVM_UTILS_AUTORECONF = YES + +# Build and install in the src subdirectory. This avoids building the +# documentation, which requires asciidoc and xsltproc. Note that configure still +# needs to be run from the top dir, so _SUBDIR can't be used. + +define IMA_EVM_UTILS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/src all +endef + +define IMA_EVM_UTILS_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) DESTDIR="$(STAGING_DIR)" -C $(@D)/src install +endef + +define IMA_EVM_UTILS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) DESTDIR="$(TARGET_DIR)" -C $(@D)/src install +endef + +$(eval $(autotools-package)) diff --git a/package/imagemagick/Config.in b/package/imagemagick/Config.in new file mode 100644 index 00000000..8b795d89 --- /dev/null +++ b/package/imagemagick/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_IMAGEMAGICK + bool "imagemagick" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_THREADS + help + ImageMagick(R) is a software suite to create, edit, and + compose bitmap images. It can read, convert and write images + in a variety of formats (about 100) including DPX, EXR, GIF, + JPEG, JPEG-2000, PDF, PhotoCD, PNG, Postscript, SVG, and TIFF. + Use ImageMagick to translate, flip, mirror, rotate, scale, + shear and transform images, adjust image colors, apply various + special effects, or draw text, lines, polygons, ellipses and + Bézier curves. + + http://www.imagemagick.org/ + +comment "imagemagick needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/imagemagick/Config.in.host b/package/imagemagick/Config.in.host new file mode 100644 index 00000000..e12d8293 --- /dev/null +++ b/package/imagemagick/Config.in.host @@ -0,0 +1,27 @@ +config BR2_PACKAGE_HOST_IMAGEMAGICK + bool "host imagemagick" + depends on BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS # host-librsvg + help + ImageMagick(R) is a software suite to create, edit, and + compose bitmap images. It can read, convert and write images + in a variety of formats (about 100) including DPX, EXR, GIF, + JPEG, JPEG-2000, PDF, PhotoCD, PNG, Postscript, SVG, and TIFF. + Use ImageMagick to translate, flip, mirror, rotate, scale, + shear and transform images, adjust image colors, apply various + special effects, or draw text, lines, polygons, ellipses and + Bézier curves. + + http://www.imagemagick.org/ + +if BR2_PACKAGE_HOST_IMAGEMAGICK + +config BR2_PACKAGE_HOST_IMAGEMAGICK_SVG + bool "SVG support" + help + Say 'y' here is you need ImageMagick tools (like convert) + to support SVG. + + This is not enabled by default, as it brings quite a few + extra dependencies, and thus extra build time. + +endif diff --git a/package/imagemagick/imagemagick.hash b/package/imagemagick/imagemagick.hash new file mode 100644 index 00000000..b787643f --- /dev/null +++ b/package/imagemagick/imagemagick.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 fc454be622724c6224fa6c8230bb9c50191a05fbf05b9c9c25aa3e5497090b83 imagemagick-7.0.11-13.tar.gz +sha256 040badb77b659e751ea16113490a937e1e01f3f5d32181e966b8982413533fb2 LICENSE diff --git a/package/imagemagick/imagemagick.mk b/package/imagemagick/imagemagick.mk new file mode 100644 index 00000000..a6eaf998 --- /dev/null +++ b/package/imagemagick/imagemagick.mk @@ -0,0 +1,248 @@ +################################################################################ +# +# imagemagick +# +################################################################################ + +IMAGEMAGICK_VERSION = 7.0.11-13 +IMAGEMAGICK_SITE = $(call github,ImageMagick,ImageMagick,$(IMAGEMAGICK_VERSION)) +IMAGEMAGICK_LICENSE = Apache-2.0 +IMAGEMAGICK_LICENSE_FILES = LICENSE +IMAGEMAGICK_CPE_ID_VENDOR = imagemagick + +IMAGEMAGICK_INSTALL_STAGING = YES +IMAGEMAGICK_CONFIG_SCRIPTS = \ + $(addsuffix -config,MagickCore MagickWand) + +ifeq ($(BR2_INSTALL_LIBSTDCPP)$(BR2_USE_WCHAR),yy) +IMAGEMAGICK_CONFIG_SCRIPTS += Magick++-config +endif + +IMAGEMAGICK_CONF_ENV = \ + ac_cv_sys_file_offset_bits=64 \ + ax_cv_check_cl_libcl=no + +IMAGEMAGICK_CONF_OPTS = \ + --program-transform-name='s,,,' \ + --disable-opencl \ + --disable-openmp \ + --without-djvu \ + --without-dps \ + --without-flif \ + --without-fpx \ + --without-gslib \ + --without-gvc \ + --without-heic \ + --without-jbig \ + --without-jxl \ + --without-lqr \ + --without-openexr \ + --without-openjp2 \ + --without-perl \ + --without-raqm \ + --without-wmf \ + --without-x \ + --with-gs-font-dir=/usr/share/fonts/gs + +IMAGEMAGICK_DEPENDENCIES = host-pkgconf + +ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y) +# Like postgreSQL, imagemagick does not build against uClibc with +# locales enabled, due to an uClibc bug, see +# http://lists.uclibc.org/pipermail/uclibc/2014-April/048326.html +# so overwrite automatic detection and disable locale support +IMAGEMAGICK_CONF_ENV += ac_cv_func_newlocale=no +endif + +ifeq ($(BR2_PACKAGE_FONTCONFIG),y) +IMAGEMAGICK_CONF_OPTS += --with-fontconfig +IMAGEMAGICK_DEPENDENCIES += fontconfig +else +IMAGEMAGICK_CONF_OPTS += --without-fontconfig +endif + +ifeq ($(BR2_PACKAGE_FREETYPE),y) +IMAGEMAGICK_CONF_OPTS += --with-freetype +IMAGEMAGICK_CONF_ENV += \ + ac_cv_path_freetype_config=$(STAGING_DIR)/usr/bin/freetype-config +IMAGEMAGICK_DEPENDENCIES += freetype +else +IMAGEMAGICK_CONF_OPTS += --without-freetype +endif + +ifeq ($(BR2_PACKAGE_JPEG),y) +IMAGEMAGICK_CONF_OPTS += --with-jpeg +IMAGEMAGICK_DEPENDENCIES += jpeg +else +IMAGEMAGICK_CONF_OPTS += --without-jpeg +endif + +ifeq ($(BR2_PACKAGE_LCMS2),y) +IMAGEMAGICK_CONF_OPTS += --with-lcms +IMAGEMAGICK_DEPENDENCIES += lcms2 +else +IMAGEMAGICK_CONF_OPTS += --without-lcms +endif + +ifeq ($(BR2_PACKAGE_LIBPNG),y) +IMAGEMAGICK_CONF_OPTS += --with-png +IMAGEMAGICK_DEPENDENCIES += libpng +else +IMAGEMAGICK_CONF_OPTS += --without-png +endif + +ifeq ($(BR2_PACKAGE_LIBRAW),y) +IMAGEMAGICK_CONF_OPTS += --with-raw +IMAGEMAGICK_DEPENDENCIES += libraw +else +IMAGEMAGICK_CONF_OPTS += --without-raw +endif + +ifeq ($(BR2_PACKAGE_LIBRSVG),y) +IMAGEMAGICK_CONF_OPTS += --with-rsvg +IMAGEMAGICK_DEPENDENCIES += librsvg +else +IMAGEMAGICK_CONF_OPTS += --without-rsvg +endif + +ifeq ($(BR2_PACKAGE_LIBXML2),y) +IMAGEMAGICK_CONF_OPTS += --with-xml +IMAGEMAGICK_CONF_ENV += ac_cv_path_xml2_config=$(STAGING_DIR)/usr/bin/xml2-config +IMAGEMAGICK_DEPENDENCIES += libxml2 +else +IMAGEMAGICK_CONF_OPTS += --without-xml +endif + +ifeq ($(BR2_PACKAGE_LIBZIP),y) +IMAGEMAGICK_CONF_OPTS += --with-zip +IMAGEMAGICK_DEPENDENCIES += libzip +else +IMAGEMAGICK_CONF_OPTS += --without-zip +endif + +ifeq ($(BR2_PACKAGE_ZSTD),y) +IMAGEMAGICK_CONF_OPTS += --with-zstd +IMAGEMAGICK_DEPENDENCIES += zstd +else +IMAGEMAGICK_CONF_OPTS += --without-zstd +endif + +ifeq ($(BR2_PACKAGE_PANGO),y) +IMAGEMAGICK_CONF_OPTS += --with-pango +IMAGEMAGICK_DEPENDENCIES += pango +else +IMAGEMAGICK_CONF_OPTS += --without-pango +endif + +ifeq ($(BR2_PACKAGE_TIFF),y) +IMAGEMAGICK_CONF_OPTS += --with-tiff +IMAGEMAGICK_DEPENDENCIES += tiff +else +IMAGEMAGICK_CONF_OPTS += --without-tiff +endif + +ifeq ($(BR2_PACKAGE_XZ),y) +IMAGEMAGICK_CONF_OPTS += --with-lzma +IMAGEMAGICK_DEPENDENCIES += xz +else +IMAGEMAGICK_CONF_OPTS += --without-lzma +endif + +ifeq ($(BR2_PACKAGE_FFTW_DOUBLE),y) +# configure script misdetects these leading to build errors +IMAGEMAGICK_CONF_ENV += ac_cv_func_creal=yes ac_cv_func_cimag=yes +IMAGEMAGICK_CONF_OPTS += --with-fftw +IMAGEMAGICK_DEPENDENCIES += fftw-double +else +IMAGEMAGICK_CONF_OPTS += --without-fftw +endif + +ifeq ($(BR2_PACKAGE_WEBP),y) +IMAGEMAGICK_CONF_OPTS += --with-webp +IMAGEMAGICK_DEPENDENCIES += webp +else +IMAGEMAGICK_CONF_OPTS += --without-webp +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +IMAGEMAGICK_CONF_OPTS += --with-zlib +IMAGEMAGICK_DEPENDENCIES += zlib +else +IMAGEMAGICK_CONF_OPTS += --without-zlib +endif + +ifeq ($(BR2_PACKAGE_BZIP2),y) +IMAGEMAGICK_CONF_OPTS += --with-bzlib +IMAGEMAGICK_DEPENDENCIES += bzip2 +else +IMAGEMAGICK_CONF_OPTS += --without-bzlib +endif + +HOST_IMAGEMAGICK_CONF_OPTS = \ + --disable-opencl \ + --disable-openmp \ + --without-djvu \ + --without-dps \ + --without-flif \ + --without-fpx \ + --without-gslib \ + --without-gvc \ + --without-heic \ + --without-jbig \ + --without-jxl \ + --without-lqr \ + --without-openexr \ + --without-openjp2 \ + --without-perl \ + --without-raqm \ + --without-raw \ + --without-wmf \ + --without-x \ + --without-zip \ + --without-zstd \ + --without-bzlib \ + --without-fftw \ + --without-lcms \ + --without-lzma \ + --without-tiff \ + --without-webp \ + --with-jpeg \ + --with-png \ + --with-zlib + +# uses clock_gettime, which was provided by librt in glibc < 2.17 +HOST_IMAGEMAGICK_CONF_ENV = \ + LIBS="-lrt" \ + ax_cv_check_cl_libcl=no + +HOST_IMAGEMAGICK_DEPENDENCIES = \ + host-libjpeg \ + host-libpng \ + host-pkgconf \ + host-zlib + +ifeq ($(BR2_PACKAGE_HOST_IMAGEMAGICK_SVG),y) +HOST_IMAGEMAGICK_DEPENDENCIES += \ + host-fontconfig \ + host-freetype \ + host-librsvg \ + host-libxml2 \ + host-pango +HOST_IMAGEMAGICK_CONF_ENV += ac_cv_path_xml2_config=$(HOST_DIR)/bin/xml2-config +HOST_IMAGEMAGICK_CONF_OPTS += \ + --with-fontconfig \ + --with-freetype \ + --with-pango \ + --with-rsvg \ + --with-xml +else +HOST_IMAGEMAGICK_CONF_OPTS += \ + --without-fontconfig \ + --without-freetype \ + --without-pango \ + --without-rsvg \ + --without-xml +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/imlib2/Config.in b/package/imlib2/Config.in new file mode 100644 index 00000000..c47178f1 --- /dev/null +++ b/package/imlib2/Config.in @@ -0,0 +1,42 @@ +comment "imlib2 needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +config BR2_PACKAGE_IMLIB2 + bool "imlib2" + depends on !BR2_STATIC_LIBS # dlopen() + select BR2_PACKAGE_FREETYPE + help + Imlib 2 is the successor to Imlib. This library provides + routines to load, save and render images in various formats. + + http://freshmeat.net/projects/imlib2/ + +if BR2_PACKAGE_IMLIB2 + +config BR2_PACKAGE_IMLIB2_JPEG + bool "JPEG support" + select BR2_PACKAGE_JPEG + +config BR2_PACKAGE_IMLIB2_PNG + bool "PNG support" + select BR2_PACKAGE_LIBPNG + +config BR2_PACKAGE_IMLIB2_GIF + bool "GIF support" + select BR2_PACKAGE_GIFLIB + +config BR2_PACKAGE_IMLIB2_TIFF + bool "TIFF support" + select BR2_PACKAGE_TIFF + +config BR2_PACKAGE_IMLIB2_ID3 + bool "ID3 support" + select BR2_PACKAGE_LIBID3TAG + +config BR2_PACKAGE_IMLIB2_X + bool "X support" + default y + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBXEXT + select BR2_PACKAGE_XLIB_LIBX11 +endif diff --git a/package/imlib2/imlib2.hash b/package/imlib2/imlib2.hash new file mode 100644 index 00000000..68f6c91d --- /dev/null +++ b/package/imlib2/imlib2.hash @@ -0,0 +1,8 @@ +# From https://sourceforge.net/projects/enlightenment/files/imlib2-src/1.6.1/ +md5 7b3fbcb974b48822b32b326c6a47764b imlib2-1.6.1.tar.bz2 +sha1 3b5f850e83cbb7481e33061348fb9c7a555c8c60 imlib2-1.6.1.tar.bz2 + +# Locally computed +sha256 4d393a77e13da883c8ee2da3b029da3570210fe37d000c9ac33d9fce751b166d imlib2-1.6.1.tar.bz2 +sha256 fb70339dd33a77b6213c7ae067fccf93d04af44ff3f937c61f8863f7970e73f6 COPYING +sha256 8c9a2e92ed4937e2d30c2ea95439c36ed3002fc47e34efee43455a460fee8ef5 COPYING-PLAIN diff --git a/package/imlib2/imlib2.mk b/package/imlib2/imlib2.mk new file mode 100644 index 00000000..a8855857 --- /dev/null +++ b/package/imlib2/imlib2.mk @@ -0,0 +1,68 @@ +################################################################################ +# +# imlib2 +# +################################################################################ + +IMLIB2_VERSION = 1.6.1 +IMLIB2_SOURCE = imlib2-$(IMLIB2_VERSION).tar.bz2 +IMLIB2_SITE = http://downloads.sourceforge.net/project/enlightenment/imlib2-src/$(IMLIB2_VERSION) +IMLIB2_LICENSE = Imlib2 +IMLIB2_LICENSE_FILES = COPYING COPYING-PLAIN +IMLIB2_CPE_ID_VENDOR = enlightenment + +IMLIB2_INSTALL_STAGING = YES +IMLIB2_DEPENDENCIES = host-pkgconf freetype +IMLIB2_CONF_OPTS = --with-freetype-config=$(STAGING_DIR)/usr/bin/freetype-config +IMLIB2_CONFIG_SCRIPTS = imlib2-config + +ifeq ($(BR2_PACKAGE_IMLIB2_X),y) +IMLIB2_CONF_OPTS += --with-x +IMLIB2_DEPENDENCIES += xlib_libX11 xlib_libXext +else +IMLIB2_CONF_OPTS += --without-x +endif + +ifeq ($(BR2_PACKAGE_IMLIB2_JPEG),y) +IMLIB2_CONF_OPTS += --with-jpeg +IMLIB2_DEPENDENCIES += jpeg +else +IMLIB2_CONF_OPTS += --without-jpeg +endif + +ifeq ($(BR2_PACKAGE_IMLIB2_PNG),y) +IMLIB2_CONF_OPTS += --with-png +IMLIB2_DEPENDENCIES += libpng +else +IMLIB2_CONF_OPTS += --without-png +endif + +ifeq ($(BR2_PACKAGE_IMLIB2_GIF),y) +IMLIB2_CONF_OPTS += --with-gif +IMLIB2_DEPENDENCIES += giflib +else +IMLIB2_CONF_OPTS += --without-gif +endif + +ifeq ($(BR2_PACKAGE_IMLIB2_TIFF),y) +IMLIB2_CONF_OPTS += --with-tiff +IMLIB2_DEPENDENCIES += tiff +else +IMLIB2_CONF_OPTS += --without-tiff +endif + +ifeq ($(BR2_PACKAGE_IMLIB2_ID3),y) +IMLIB2_CONF_OPTS += --with-id3 +IMLIB2_DEPENDENCIES += libid3tag +else +IMLIB2_CONF_OPTS += --without-id3 +endif + +# drop -L from linker flags +define IMLIB2_FIXUP_IMLIB2_CONFIG + $(SED) 's/-L[^ ]*//g' $(STAGING_DIR)/usr/bin/imlib2-config +endef + +IMLIB2_POST_INSTALL_STAGING_HOOKS += IMLIB2_FIXUP_IMLIB2_CONFIG + +$(eval $(autotools-package)) diff --git a/package/imx-mkimage/0001-Add-support-for-overriding-BL32-and-BL33-not-only-BL.patch b/package/imx-mkimage/0001-Add-support-for-overriding-BL32-and-BL33-not-only-BL.patch new file mode 100644 index 00000000..e8ba820f --- /dev/null +++ b/package/imx-mkimage/0001-Add-support-for-overriding-BL32-and-BL33-not-only-BL.patch @@ -0,0 +1,60 @@ +From 4870df3d70e94f9f0d6c06f610cea2d88cd6edb5 Mon Sep 17 00:00:00 2001 +From: Erik Larsson +Date: Thu, 8 Mar 2018 19:04:37 +0100 +Subject: [PATCH] Add support for overriding BL32 and BL33 not only BL31 + +Signed-off-by: Erik Larsson +Signed-off-by: Christopher Dahlberg +Signed-off-by: Marcus Folkesson +--- + iMX8M/mkimage_fit_atf.sh | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/iMX8M/mkimage_fit_atf.sh b/iMX8M/mkimage_fit_atf.sh +index 95749b1..c1aa902 100755 +--- a/iMX8M/mkimage_fit_atf.sh ++++ b/iMX8M/mkimage_fit_atf.sh +@@ -18,23 +18,23 @@ if [ ! -f $BL31 ]; then + echo "ERROR: BL31 file $BL31 NOT found" >&2 + exit 0 + else +- echo "bl31.bin size: " >&2 +- ls -lct bl31.bin | awk '{print $5}' >&2 ++ echo "$BL31 size: " >&2 ++ ls -lct $BL31 | awk '{print $5}' >&2 + fi + +-BL32="tee.bin" ++[ -z "$BL32" ] && BL32="tee.bin" + LOADABLES="\"atf@1\"" + + if [ ! -f $BL32 ]; then + BL32=/dev/null + else + echo "Building with TEE support, make sure your bl31 is compiled with spd. If you do not want tee, please delete tee.bin" >&2 +- echo "tee.bin size: " >&2 +- ls -lct tee.bin | awk '{print $5}' >&2 ++ echo "$BL32 size: " >&2 ++ ls -lct $BL32 | awk '{print $5}' >&2 + LOADABLES="$LOADABLES, \"tee@1\"" + fi + +-BL33="u-boot-nodtb.bin" ++[ -z "$BL33" ] && BL33="u-boot-nodtb.bin" + DEK_BLOB="dek_blob_fit_dummy.bin" + + if [ ! -f $DEK_BLOB ]; then +@@ -49,8 +49,8 @@ if [ ! -f $BL33 ]; then + exit 0 + else + +- echo "u-boot-nodtb.bin size: " >&2 +- ls -lct u-boot-nodtb.bin | awk '{print $5}' >&2 ++ echo "$BL33 size: " >&2 ++ ls -lct $BL33 | awk '{print $5}' >&2 + fi + + for dtname in $* +-- +2.25.1 + diff --git a/package/imx-mkimage/0002-Add-LDFLAGS-to-link-step.patch b/package/imx-mkimage/0002-Add-LDFLAGS-to-link-step.patch new file mode 100644 index 00000000..7272c3ac --- /dev/null +++ b/package/imx-mkimage/0002-Add-LDFLAGS-to-link-step.patch @@ -0,0 +1,26 @@ +From 3ef9f773ce1a402607957fa73775d2e0a591a1a5 Mon Sep 17 00:00:00 2001 +From: Erik Larsson +Date: Tue, 6 Mar 2018 12:28:39 +0100 +Subject: [PATCH] Add LDFLAGS to link step + +Signed-off-by: Erik Larsson +--- + iMX8M/soc.mak | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/iMX8M/soc.mak b/iMX8M/soc.mak +index d714259..aecf84b 100644 +--- a/iMX8M/soc.mak ++++ b/iMX8M/soc.mak +@@ -67,7 +67,7 @@ FW_DIR = imx-boot/imx-boot-tools/$(PLAT) + $(MKIMG): mkimage_imx8.c + @echo "PLAT="$(PLAT) "HDMI="$(HDMI) + @echo "Compiling mkimage_imx8" +- $(CC) $(CFLAGS) mkimage_imx8.c -o $(MKIMG) -lz ++ $(CC) $(CFLAGS) mkimage_imx8.c -o $(MKIMG) $(LDFLAGS) -lz + + u-boot-spl-ddr.bin: u-boot-spl.bin lpddr4_pmu_train_1d_imem.bin lpddr4_pmu_train_1d_dmem.bin lpddr4_pmu_train_2d_imem.bin lpddr4_pmu_train_2d_dmem.bin + @objcopy -I binary -O binary --pad-to 0x8000 --gap-fill=0x0 lpddr4_pmu_train_1d_imem.bin lpddr4_pmu_train_1d_imem_pad.bin +-- +2.25.1 + diff --git a/package/imx-mkimage/0003-Add-unused-fake-version.patch b/package/imx-mkimage/0003-Add-unused-fake-version.patch new file mode 100644 index 00000000..0e817a1a --- /dev/null +++ b/package/imx-mkimage/0003-Add-unused-fake-version.patch @@ -0,0 +1,36 @@ +From b25b4324be4c0dd9ee5fecdf2981d291fb187686 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Andr=C3=A9=20Hentschel?= +Date: Mon, 25 Feb 2019 22:15:55 +0100 +Subject: [PATCH] Add unused fake version +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The Makefile makes the assumption that the build process runs +from a Git clone of the source code. +We can safely add a fake version here, because the code to +print it is broken anyway. + +Signed-off-by: André Hentschel +--- + Makefile | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/Makefile b/Makefile +index 49ef486..b966399 100644 +--- a/Makefile ++++ b/Makefile +@@ -37,9 +37,7 @@ $(MKIMG): src/build_info.h $(SRCS) + bin: $(MKIMG) + + src/build_info.h: +- @echo -n '#define MKIMAGE_COMMIT 0x' > src/build_info.h +- @git rev-parse --short=8 HEAD >> src/build_info.h +- @echo '' >> src/build_info.h ++ @echo '#define MKIMAGE_COMMIT 0xdeadbeef' > src/build_info.h + + help: + @echo $(CURR_DIR) +-- +2.25.1 + diff --git a/package/imx-mkimage/Config.in.host b/package/imx-mkimage/Config.in.host new file mode 100644 index 00000000..8d273557 --- /dev/null +++ b/package/imx-mkimage/Config.in.host @@ -0,0 +1,7 @@ +config BR2_PACKAGE_HOST_IMX_MKIMAGE + bool "host imx-mkimage" + help + imx-mkimage is used to combine input images and generate + final boot image with appropriate IVT set. + + https://source.codeaurora.org/external/imx/imx-mkimage diff --git a/package/imx-mkimage/imx-mkimage.hash b/package/imx-mkimage/imx-mkimage.hash new file mode 100644 index 00000000..88fac9bb --- /dev/null +++ b/package/imx-mkimage/imx-mkimage.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 2746136aa5ed79ba24cfbe877d29022a2a33f6614b1bba728e95d1b2f0448196 imx-mkimage-rel_imx_5.4.70_2.3.0-br1.tar.gz +sha256 231f7edcc7352d7734a96eef0b8030f77982678c516876fcb81e25b32d68564c COPYING diff --git a/package/imx-mkimage/imx-mkimage.mk b/package/imx-mkimage/imx-mkimage.mk new file mode 100644 index 00000000..626e3d87 --- /dev/null +++ b/package/imx-mkimage/imx-mkimage.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# imx-mkimage +# +################################################################################ + +IMX_MKIMAGE_VERSION = rel_imx_5.4.70_2.3.0 +IMX_MKIMAGE_SITE = https://source.codeaurora.org/external/imx/imx-mkimage +IMX_MKIMAGE_SITE_METHOD = git +IMX_MKIMAGE_LICENSE = GPL-2.0+ +IMX_MKIMAGE_LICENSE_FILES = COPYING +HOST_IMX_MKIMAGE_DEPENDENCIES = host-zlib + +ifeq ($(BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M)$(BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MM)$(BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MN),y) +# i.MX8M needs a different binary +define HOST_IMX_MKIMAGE_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) $(HOST_CONFIGURE_OPTS) \ + CFLAGS="$(HOST_CFLAGS) -std=c99" \ + -C $(@D)/iMX8M -f soc.mak mkimage_imx8 +endef +define HOST_IMX_MKIMAGE_INSTALL_CMDS + $(INSTALL) -D -m 755 $(@D)/iMX8M/mkimage_imx8 $(HOST_DIR)/bin/mkimage_imx8 + $(INSTALL) -D -m 755 $(@D)/iMX8M/mkimage_fit_atf.sh $(HOST_DIR)/bin/mkimage_fit_atf.sh +endef +else +# i.MX8 and i.MX8X +define HOST_IMX_MKIMAGE_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) $(HOST_CONFIGURE_OPTS) \ + CFLAGS="$(HOST_CFLAGS) -std=c99" \ + -C $(@D) MKIMG=mkimage_imx8 mkimage_imx8 +endef +define HOST_IMX_MKIMAGE_INSTALL_CMDS + $(INSTALL) -D -m 755 $(@D)/mkimage_imx8 $(HOST_DIR)/bin/mkimage_imx8 +endef +endif + +$(eval $(host-generic-package)) diff --git a/package/imx-usb-loader/Config.in b/package/imx-usb-loader/Config.in new file mode 100644 index 00000000..9a152e09 --- /dev/null +++ b/package/imx-usb-loader/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_IMX_USB_LOADER + bool "imx-usb-loader" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + help + This package contains tools to download and execute code + on Freescale i.MX5/i.MX6 and Vybrid SoCs through the + Serial Download Protocol. + + https://github.com/boundarydevices/imx_usb_loader + +comment "imx-usb-loader needs a toolchain w/ threads, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/imx-usb-loader/Config.in.host b/package/imx-usb-loader/Config.in.host new file mode 100644 index 00000000..78c5edea --- /dev/null +++ b/package/imx-usb-loader/Config.in.host @@ -0,0 +1,14 @@ +config BR2_PACKAGE_HOST_IMX_USB_LOADER + bool "host imx-usb-loader" + depends on BR2_arm || BR2_aarch64 + depends on BR2_HOST_GCC_AT_LEAST_4_9 # host-libusb + help + This package contains tools to download and execute code + on Freescale i.MX5x/6x/7x/8x and Vybrid SoCs through the + Serial Download Protocol. + + https://github.com/boundarydevices/imx_usb_loader + +comment "host imx-usb-loader needs a toolchain w/ host gcc >= 4.9" + depends on BR2_arm || BR2_aarch64 + depends on !BR2_HOST_GCC_AT_LEAST_4_9 diff --git a/package/imx-usb-loader/imx-usb-loader.hash b/package/imx-usb-loader/imx-usb-loader.hash new file mode 100644 index 00000000..7e1c0971 --- /dev/null +++ b/package/imx-usb-loader/imx-usb-loader.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 4357907c9669874d3ccbf00395bf0b1733c26e6daea85d721f1c0cd897f4162c imx-usb-loader-30b43d69770cd69e84c045dc9dcabb1f3e9d975a.tar.gz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/imx-usb-loader/imx-usb-loader.mk b/package/imx-usb-loader/imx-usb-loader.mk new file mode 100644 index 00000000..1a094869 --- /dev/null +++ b/package/imx-usb-loader/imx-usb-loader.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# imx-usb-loader +# +################################################################################ + +IMX_USB_LOADER_VERSION = 30b43d69770cd69e84c045dc9dcabb1f3e9d975a + +IMX_USB_LOADER_SITE = $(call github,boundarydevices,imx_usb_loader,$(IMX_USB_LOADER_VERSION)) +IMX_USB_LOADER_LICENSE = LGPL-2.1+ +IMX_USB_LOADER_LICENSE_FILES = COPYING +IMX_USB_LOADER_DEPENDENCIES = libusb host-pkgconf +HOST_IMX_USB_LOADER_DEPENDENCIES = host-libusb host-pkgconf + +define IMX_USB_LOADER_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) +endef + +define HOST_IMX_USB_LOADER_BUILD_CMDS + $(HOST_CONFIGURE_OPTS) $(MAKE) -C $(@D) +endef + +define IMX_USB_LOADER_INSTALL_TARGET_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) prefix=$(TARGET_DIR)/usr install +endef + +define HOST_IMX_USB_LOADER_INSTALL_CMDS + $(HOST_CONFIGURE_OPTS) $(MAKE) -C $(@D) prefix=$(HOST_DIR) install +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/inadyn/Config.in b/package/inadyn/Config.in new file mode 100644 index 00000000..3589823d --- /dev/null +++ b/package/inadyn/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_INADYN + bool "inadyn" + depends on BR2_USE_MMU # Uses fork() + depends on !BR2_STATIC_LIBS # dlopen() + select BR2_PACKAGE_LIBCONFUSE + help + INADYN is a free DynDNS client. It gives the possibility + to have your own fixed hostname registered on the internet, + although your IP might be changing. + + https://github.com/troglobit/inadyn + +comment "inadyn needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + depends on BR2_USE_MMU diff --git a/package/inadyn/S70inadyn b/package/inadyn/S70inadyn new file mode 100644 index 00000000..ca7b4146 --- /dev/null +++ b/package/inadyn/S70inadyn @@ -0,0 +1,44 @@ +#!/bin/sh +# +# Start & stop the inadyn client +# + +CONFIG=/etc/inadyn.conf + +# check if CONFIG exists, print message & exit if it doesn't +[ ! -f $CONFIG ] && ( echo "The config file "$CONFIG" is missing...exiting now." && exit 2 ) + +# Allow a few customizations from a config file. Especially inadyn +# must be explicitly enabled by adding ENABLED="yes" in this file. +test -r /etc/default/inadyn && . /etc/default/inadyn + +case "$1" in + start) + printf "Starting inadyn: " + if test "${ENABLED}" != "yes" ; then + echo "SKIPPED" + exit 0 + fi + start-stop-daemon -b -q -S -p /var/run/inadyn.pid -x /usr/sbin/inadyn + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + stop) + printf "Stopping inadyn: " + if test "${ENABLED}" != "yes" ; then + echo "SKIPPED" + exit 0 + fi + start-stop-daemon -q -K -p /var/run/inadyn.pid -x /usr/sbin/inadyn + [ $? = 0 ] && echo "OK" || echo "FAIL" + rm -f /var/run/inadyn.pid + ;; + restart) + "$0" stop + "$0" start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/inadyn/inadyn.conf b/package/inadyn/inadyn.conf new file mode 100644 index 00000000..1b290276 --- /dev/null +++ b/package/inadyn/inadyn.conf @@ -0,0 +1,11 @@ +# Basic configuration file for inadyn +# +# /etc/inadyn.conf +iface = eth0 +period = 300 + +provider default@dyndns.org { + username = test + password = test + hostname = test +} diff --git a/package/inadyn/inadyn.hash b/package/inadyn/inadyn.hash new file mode 100644 index 00000000..638f92d1 --- /dev/null +++ b/package/inadyn/inadyn.hash @@ -0,0 +1,5 @@ +# From https://github.com/troglobit/inadyn/releases/download/v2.8.1/inadyn-2.8.1.tar.xz.sha256 +sha256 1185a9fb165bfc5f5b5f66f0dd8a695c9bd78d4b20cd162273eeea77f2d2e685 inadyn-2.8.1.tar.xz + +# Locally computed +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/inadyn/inadyn.mk b/package/inadyn/inadyn.mk new file mode 100644 index 00000000..c115e892 --- /dev/null +++ b/package/inadyn/inadyn.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# inadyn +# +################################################################################ + +INADYN_VERSION = 2.8.1 +INADYN_SITE = https://github.com/troglobit/inadyn/releases/download/v$(INADYN_VERSION) +INADYN_SOURCE = inadyn-$(INADYN_VERSION).tar.xz +INADYN_LICENSE = GPL-2.0+ +INADYN_LICENSE_FILES = COPYING +INADYN_DEPENDENCIES = host-pkgconf libconfuse + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +INADYN_CONF_OPTS += --enable-openssl +INADYN_DEPENDENCIES += openssl +else ifeq ($(BR2_PACKAGE_GNUTLS),y) +INADYN_DEPENDENCIES += gnutls +else +INADYN_CONF_OPTS += --disable-ssl +endif + +define INADYN_INSTALL_SAMPLE_CONFIG + $(INSTALL) -D -m 0600 package/inadyn/inadyn.conf \ + $(TARGET_DIR)/etc/inadyn.conf +endef +INADYN_POST_INSTALL_TARGET_HOOKS += INADYN_INSTALL_SAMPLE_CONFIG + +define INADYN_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/inadyn/S70inadyn \ + $(TARGET_DIR)/etc/init.d/S70inadyn +endef + +define INADYN_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/inadyn/inadyn.service \ + $(TARGET_DIR)/usr/lib/systemd/system/inadyn.service +endef + +$(eval $(autotools-package)) diff --git a/package/inadyn/inadyn.service b/package/inadyn/inadyn.service new file mode 100644 index 00000000..abc0a1e4 --- /dev/null +++ b/package/inadyn/inadyn.service @@ -0,0 +1,10 @@ +[Unit] +Description=DDNS client +After=syslog.target network.target + +[Service] +ExecStart=/usr/bin/inadyn +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/package/inconsolata/Config.in b/package/inconsolata/Config.in new file mode 100644 index 00000000..de6b3885 --- /dev/null +++ b/package/inconsolata/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_INCONSOLATA + bool "inconsolata" + help + Inconsolata is a monospace font, designed for code listings + and the like. + + http://www.google.com/fonts/specimen/Inconsolata diff --git a/package/inconsolata/inconsolata.hash b/package/inconsolata/inconsolata.hash new file mode 100644 index 00000000..d222fc32 --- /dev/null +++ b/package/inconsolata/inconsolata.hash @@ -0,0 +1,4 @@ +# From http://snapshot.debian.org/archive/debian/20091207T044352Z/pool/main/t/ttf-inconsolata/ttf-inconsolata_001.010-2.dsc +sha256 ecf8ba44911fcb3c9683aef1ca2b3cfbafa119a3e93c682f448850e1ae08ce93 ttf-inconsolata_001.010.orig.tar.gz +# Locally computed +sha256 8bbed014d1c85a9e3f36703816833c9538e140fea88c2bc3a745ce2449dc18ab OFL.txt diff --git a/package/inconsolata/inconsolata.mk b/package/inconsolata/inconsolata.mk new file mode 100644 index 00000000..3fe3895c --- /dev/null +++ b/package/inconsolata/inconsolata.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# inconsolata +# +################################################################################ + +INCONSOLATA_VERSION = 001.010 +INCONSOLATA_SITE = http://snapshot.debian.org/archive/debian/20090524T155154Z/pool/main/t/ttf-inconsolata +INCONSOLATA_SOURCE = ttf-inconsolata_$(INCONSOLATA_VERSION).orig.tar.gz +INCONSOLATA_TARGET_DIR = $(TARGET_DIR)/usr/share/fonts/inconsolata +INCONSOLATA_LICENSE = OFL-1.0 +INCONSOLATA_LICENSE_FILES = OFL.txt + +define INCONSOLATA_INSTALL_TARGET_CMDS + mkdir -p $(INCONSOLATA_TARGET_DIR) + $(INSTALL) -m 644 $(@D)/*.otf $(INCONSOLATA_TARGET_DIR) +endef + +$(eval $(generic-package)) diff --git a/package/inih/0001-meson-optionally-depend-on-c.patch b/package/inih/0001-meson-optionally-depend-on-c.patch new file mode 100644 index 00000000..a039dde1 --- /dev/null +++ b/package/inih/0001-meson-optionally-depend-on-c.patch @@ -0,0 +1,34 @@ +From e192e4762749cfe3bc350e0353aa82b1a849256d Mon Sep 17 00:00:00 2001 +From: bkuhls +Date: Sun, 10 Jan 2021 21:56:56 +0100 +Subject: [PATCH] meson: optionally depend on c++ (#124) + +This fix is needed to allow building with toolchains which lack c++. + +Downloaded from upstream commit: +https://github.com/benhoyt/inih/commit/e192e4762749cfe3bc350e0353aa82b1a849256d + +Signed-off-by: Bernd Kuhls +--- + meson.build | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/meson.build b/meson.build +index 4602326..5393af4 100644 +--- a/meson.build ++++ b/meson.build +@@ -1,5 +1,5 @@ + project('inih', +- ['c','cpp'], ++ ['c'], + default_options : ['default_library=static'], + license : 'BSD-3-Clause', + ) +@@ -83,6 +83,7 @@ inih_dep = declare_dependency( + + #### INIReader #### + if get_option('with_INIReader') ++ add_languages('cpp') + inc_INIReader = include_directories('cpp') + + lib_INIReader = library('INIReader', diff --git a/package/inih/Config.in b/package/inih/Config.in new file mode 100644 index 00000000..2c6553a8 --- /dev/null +++ b/package/inih/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_INIH + bool "inih" + help + inih (INI Not Invented Here) is a simple .INI file parser + written in C. + + https://github.com/benhoyt/inih/ diff --git a/package/inih/inih.hash b/package/inih/inih.hash new file mode 100644 index 00000000..2560a91f --- /dev/null +++ b/package/inih/inih.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 439cff9ce9a8afc52d08772ac3e93b3cecd79c7707f871fb4534fb3a48201880 inih-52.tar.gz +sha256 9ae3b39e83e9158e44b67733baa3bb2d84e80efdcfb14a5820210a42c7abdf7f LICENSE.txt diff --git a/package/inih/inih.mk b/package/inih/inih.mk new file mode 100644 index 00000000..ccc549b0 --- /dev/null +++ b/package/inih/inih.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# INIH +# +################################################################################ + +INIH_VERSION = 52 +INIH_SITE = $(call github,benhoyt,inih,r$(INIH_VERSION)) +INIH_INSTALL_STAGING = YES +INIH_LICENSE = BSD-3-Clause +INIH_LICENSE_FILES = LICENSE.txt +INIH_CONF_OPTS = -Ddistro_install=true + +ifeq ($(BR2_INSTALL_LIBSTDCPP),y) +INIH_CONF_OPTS += -Dwith_INIReader=true +else +INIH_CONF_OPTS += -Dwith_INIReader=false +endif + +$(eval $(meson-package)) diff --git a/package/initscripts/Config.in b/package/initscripts/Config.in new file mode 100644 index 00000000..82cbd5c6 --- /dev/null +++ b/package/initscripts/Config.in @@ -0,0 +1,4 @@ +config BR2_PACKAGE_INITSCRIPTS + bool + help + The basics startup scripts for both SysV and Busybox diff --git a/package/initscripts/init.d/rcK b/package/initscripts/init.d/rcK new file mode 100755 index 00000000..59e9c54f --- /dev/null +++ b/package/initscripts/init.d/rcK @@ -0,0 +1,27 @@ +#!/bin/sh + + +# Stop all init scripts in /etc/init.d +# executing them in reversed numerical order. +# +for i in $(ls -r /etc/init.d/S??*) ;do + + # Ignore dangling symlinks (if any). + [ ! -f "$i" ] && continue + + case "$i" in + *.sh) + # Source shell script for speed. + ( + trap - INT QUIT TSTP + set stop + . $i + ) + ;; + *) + # No sh extension, so fork subprocess. + $i stop + ;; + esac +done + diff --git a/package/initscripts/init.d/rcS b/package/initscripts/init.d/rcS new file mode 100755 index 00000000..de411534 --- /dev/null +++ b/package/initscripts/init.d/rcS @@ -0,0 +1,27 @@ +#!/bin/sh + + +# Start all init scripts in /etc/init.d +# executing them in numerical order. +# +for i in /etc/init.d/S??* ;do + + # Ignore dangling symlinks (if any). + [ ! -f "$i" ] && continue + + case "$i" in + *.sh) + # Source shell script for speed. + ( + trap - INT QUIT TSTP + set start + . $i + ) + ;; + *) + # No sh extension, so fork subprocess. + $i start + ;; + esac +done + diff --git a/package/initscripts/initscripts.mk b/package/initscripts/initscripts.mk new file mode 100644 index 00000000..cfee1555 --- /dev/null +++ b/package/initscripts/initscripts.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# initscripts +# +################################################################################ + +define INITSCRIPTS_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/etc/init.d + $(INSTALL) -D -m 0755 package/initscripts/init.d/* $(TARGET_DIR)/etc/init.d/ +endef + +$(eval $(generic-package)) diff --git a/package/inotify-tools/Config.in b/package/inotify-tools/Config.in new file mode 100644 index 00000000..6b113d9e --- /dev/null +++ b/package/inotify-tools/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_INOTIFY_TOOLS + bool "inotify-tools" + depends on BR2_USE_MMU # fork() + help + inotify-tools is a C library and a set of command-line + programs for Linux providing a simple interface to inotify. + These programs can be used to monitor and act upon + filesystem events. Provides the 'inotifywait' and + 'inotifywatch' binaries. + + https://github.com/inotify-tools/inotify-tools diff --git a/package/inotify-tools/inotify-tools.hash b/package/inotify-tools/inotify-tools.hash new file mode 100644 index 00000000..5984827f --- /dev/null +++ b/package/inotify-tools/inotify-tools.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 c5b018567814ea555d716f518b6e3ae243c733f7bd3e8585d81748a6da286f3c inotify-tools-3.20.2.2.tar.gz +sha256 e41fc126320a79ed53b5aa3386f059f7d10770856d6fd714ab80a96ce6bd09d6 COPYING diff --git a/package/inotify-tools/inotify-tools.mk b/package/inotify-tools/inotify-tools.mk new file mode 100644 index 00000000..b410ade3 --- /dev/null +++ b/package/inotify-tools/inotify-tools.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# inotify-tools +# +################################################################################ + +INOTIFY_TOOLS_VERSION = 3.20.2.2 +INOTIFY_TOOLS_SITE = https://github.com/inotify-tools/inotify-tools/releases/download/$(INOTIFY_TOOLS_VERSION) +INOTIFY_TOOLS_LICENSE = GPL-2.0+ +INOTIFY_TOOLS_LICENSE_FILES = COPYING +INOTIFY_TOOLS_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/input-event-daemon/Config.in b/package/input-event-daemon/Config.in new file mode 100644 index 00000000..84177fd8 --- /dev/null +++ b/package/input-event-daemon/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_INPUT_EVENT_DAEMON + bool "input-event-daemon" + # Uses fork() + depends on BR2_USE_MMU + help + input-event-daemon is a daemon which executes + a user-defined command on input events, such as + keys, mouse buttons and switches. + + http://github.com/gandro/input-event-daemon diff --git a/package/input-event-daemon/S99input-event-daemon b/package/input-event-daemon/S99input-event-daemon new file mode 100644 index 00000000..8d70dd30 --- /dev/null +++ b/package/input-event-daemon/S99input-event-daemon @@ -0,0 +1,39 @@ +#! /bin/sh + +[ -f /usr/bin/input-event-daemon ] || exit 0 + +start() { + printf "Starting input-event-daemon: " + input-event-daemon + echo "done" +} + + +stop() { + printf "Stopping input-event-daemon: " + killall input-event-daemon + echo "done" +} + +restart() { + stop + start +} + +# See how we were called. +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|reload|restart}" + exit 1 +esac + +exit $? diff --git a/package/input-event-daemon/input-event-daemon.hash b/package/input-event-daemon/input-event-daemon.hash new file mode 100644 index 00000000..ad0c4e99 --- /dev/null +++ b/package/input-event-daemon/input-event-daemon.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 1d9a44160aead88080093f74be9d709fbbc2637f982958e2673d80aedacd0a65 input-event-daemon-0.1.3.tar.gz +sha256 56f6614c63a023e4d486332968bfa7933f06ea7c785ef85f403448022ae7f912 README diff --git a/package/input-event-daemon/input-event-daemon.mk b/package/input-event-daemon/input-event-daemon.mk new file mode 100644 index 00000000..dbe2d4bf --- /dev/null +++ b/package/input-event-daemon/input-event-daemon.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# input-event-daemon +# +################################################################################ + +INPUT_EVENT_DAEMON_VERSION = 0.1.3 +INPUT_EVENT_DAEMON_SITE = $(call github,gandro,input-event-daemon,v$(INPUT_EVENT_DAEMON_VERSION)) +INPUT_EVENT_DAEMON_LICENSE = input-event-daemon license +INPUT_EVENT_DAEMON_LICENSE_FILES = README + +define INPUT_EVENT_DAEMON_BUILD_CMDS + touch $(@D)/input-event-table.h + $(TARGET_MAKE_ENV) $(MAKE) CC="$(TARGET_CC)" CFLAGS="$(TARGET_CFLAGS)" \ + LDFLAGS="$(TARGET_LDFLAGS)" -C $(@D) +endef + +define INPUT_EVENT_DAEMON_INSTALL_TARGET_CMDS + $(INSTALL) -m 755 -D $(@D)/input-event-daemon \ + $(TARGET_DIR)/usr/bin/input-event-daemon + $(INSTALL) -m 644 -D $(@D)/docs/sample.conf \ + $(TARGET_DIR)/etc/input-event-daemon.conf +endef + +define INPUT_EVENT_DAEMON_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/input-event-daemon/S99input-event-daemon \ + $(TARGET_DIR)/etc/init.d/S99input-event-daemon +endef + +define INPUT_EVENT_DAEMON_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/input-event-daemon/input-event-daemon.service \ + $(TARGET_DIR)/usr/lib/systemd/system/input-event-daemon.service +endef + +$(eval $(generic-package)) diff --git a/package/input-event-daemon/input-event-daemon.service b/package/input-event-daemon/input-event-daemon.service new file mode 100644 index 00000000..d91e655f --- /dev/null +++ b/package/input-event-daemon/input-event-daemon.service @@ -0,0 +1,9 @@ +[Unit] +Description=Input Event Daemon + +[Service] +ExecStart=/usr/bin/input-event-daemon --no-daemon +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/package/intel-gmmlib/Config.in b/package/intel-gmmlib/Config.in new file mode 100644 index 00000000..9d5fbd9c --- /dev/null +++ b/package/intel-gmmlib/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_INTEL_GMMLIB + bool "intel-gmmlib" + depends on BR2_x86_64 + depends on !BR2_STATIC_LIBS + help + The Intel(R) Graphics Memory Management Library provides + device specific and buffer management for the Intel(R) + Graphics Compute Runtime for OpenCL(TM) and the Intel(R) + Media Driver for VAAPI. + + https://github.com/intel/gmmlib + +comment "intel-gmmlib needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/intel-gmmlib/intel-gmmlib.hash b/package/intel-gmmlib/intel-gmmlib.hash new file mode 100644 index 00000000..1e8baba6 --- /dev/null +++ b/package/intel-gmmlib/intel-gmmlib.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 bb874b41c499abb8f6253b1834e93a02ed9744de71f2503ee9cd4100af7c1860 intel-gmmlib-19.4.1.tar.gz +sha256 b61d639c5d84ec710ffcf5600ac92f8a4ace66670c1f9bd921f3bde671d36033 LICENSE.md diff --git a/package/intel-gmmlib/intel-gmmlib.mk b/package/intel-gmmlib/intel-gmmlib.mk new file mode 100644 index 00000000..517fc091 --- /dev/null +++ b/package/intel-gmmlib/intel-gmmlib.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# intel-gmmlib +# +################################################################################ + +INTEL_GMMLIB_VERSION = 19.4.1 +INTEL_GMMLIB_SITE = https://github.com/intel/gmmlib/archive +INTEL_GMMLIB_LICENSE = MIT +INTEL_GMMLIB_LICENSE_FILES = LICENSE.md + +INTEL_GMMLIB_INSTALL_STAGING = YES +INTEL_GMMLIB_SUPPORTS_IN_SOURCE_BUILD = NO + +INTEL_GMMLIB_CONF_OPTS = -DRUN_TEST_SUITE=OFF + +$(eval $(cmake-package)) diff --git a/package/intel-mediadriver/0001-Drop-hardening-related-flags.patch b/package/intel-mediadriver/0001-Drop-hardening-related-flags.patch new file mode 100644 index 00000000..bc292033 --- /dev/null +++ b/package/intel-mediadriver/0001-Drop-hardening-related-flags.patch @@ -0,0 +1,63 @@ +From 8916c8480eb3483c2ffb41ad8961cd0c2b0fb1c4 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Mon, 15 Apr 2019 22:48:21 +0200 +Subject: [PATCH] Drop hardening-related flags + +These will be set by Buildroot depending on toolchain capabilities and +global Buildroot options. + +Signed-off-by: Thomas Petazzoni +--- + cmrtlib/linux/CMakeLists.txt | 8 ++++---- + media_driver/cmake/linux/media_compile_flags_linux.cmake | 1 - + media_driver/media_top_cmake.cmake | 2 +- + 3 files changed, 5 insertions(+), 6 deletions(-) + +diff --git a/cmrtlib/linux/CMakeLists.txt b/cmrtlib/linux/CMakeLists.txt +index 44ce4f08..b462fbea 100644 +--- a/cmrtlib/linux/CMakeLists.txt ++++ b/cmrtlib/linux/CMakeLists.txt +@@ -26,11 +26,11 @@ set(LIBRARY_OUTPUT_PATH ${MDF_OPTION__OUTPUT_DIR}) + + # Set up compile options that will be used for the Linux build + if(CMAKE_COMPILER_IS_GNUCC) +- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1 -std=c++11 -fPIC -fpermissive -fstack-protector-all -Werror") +- set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-strict-aliasing -D_FORTIFY_SOURCE=2") ++ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1 -std=c++11 -fPIC -fpermissive -Werror") ++ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-strict-aliasing ") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG -D__DEBUG -O0") +- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1 -std=c++11 -fPIC -fpermissive -fstack-protector-all -Werror") +- set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -fno-strict-aliasing -D_FORTIFY_SOURCE=2") ++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1 -std=c++11 -fPIC -fpermissive -Werror") ++ set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -fno-strict-aliasing") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG -D__DEBUG -O0") + + set(GCC_SECURE_LINK_FLAGS "-z relro -z now") +diff --git a/media_driver/cmake/linux/media_compile_flags_linux.cmake b/media_driver/cmake/linux/media_compile_flags_linux.cmake +index 9e85fdb2..c45ce11b 100755 +--- a/media_driver/cmake/linux/media_compile_flags_linux.cmake ++++ b/media_driver/cmake/linux/media_compile_flags_linux.cmake +@@ -64,7 +64,6 @@ set(MEDIA_COMPILER_FLAGS_COMMON + # Other common flags + -fmessage-length=0 + -fvisibility=hidden +- -fstack-protector + -fdata-sections + -ffunction-sections + -Wl,--gc-sections +diff --git a/media_driver/media_top_cmake.cmake b/media_driver/media_top_cmake.cmake +index 3491db1e..b30fa04a 100755 +--- a/media_driver/media_top_cmake.cmake ++++ b/media_driver/media_top_cmake.cmake +@@ -88,7 +88,7 @@ if(MEDIA_BUILD_FATAL_WARNINGS) + set_target_properties(${LIB_NAME_OBJ} PROPERTIES COMPILE_FLAGS "-Werror") + endif() + +-set_target_properties(${LIB_NAME} PROPERTIES LINK_FLAGS "-Wl,--no-as-needed -Wl,--gc-sections -z relro -z now -fstack-protector -fPIC") ++set_target_properties(${LIB_NAME} PROPERTIES LINK_FLAGS "-Wl,--no-as-needed -Wl,--gc-sections -fPIC") + set_target_properties(${LIB_NAME} PROPERTIES PREFIX "") + set_target_properties(${LIB_NAME_STATIC} PROPERTIES PREFIX "") + +-- +2.20.1 + diff --git a/package/intel-mediadriver/0002-build-fix-Werror=format-overflow-under-gcc-10.patch b/package/intel-mediadriver/0002-build-fix-Werror=format-overflow-under-gcc-10.patch new file mode 100644 index 00000000..46775e93 --- /dev/null +++ b/package/intel-mediadriver/0002-build-fix-Werror=format-overflow-under-gcc-10.patch @@ -0,0 +1,162 @@ +From da966a2ab1f5161cc0a21a4cd7e07edf732ebee9 Mon Sep 17 00:00:00 2001 +From: Dmitry Rogozhkin +Date: Thu, 19 Mar 2020 20:59:12 -0700 +Subject: [PATCH] build: fix Werror=format-overflow under gcc-10 + +Fixes: #870 + +With upcoming gcc-10 we start to see Werror=format-overflow reporting +that we attempt to printf %s null strings. + +Change-Id: I7a62bc98bf7dd6bcd61d475d7650a06aa1a70932 +Signed-off-by: Dmitry Rogozhkin +[Retrieved from: +https://github.com/intel/media-driver/commit/da966a2ab1f5161cc0a21a4cd7e07edf732ebee9] +Signed-off-by: Fabrice Fontaine +--- + media_driver/linux/common/os/i915/xf86drm.c | 57 ++++++++++--------- + .../linux/ult/libdrm_mock/xf86drm_mock.c | 57 ++++++++++--------- + 2 files changed, 58 insertions(+), 56 deletions(-) + +diff --git a/media_driver/linux/common/os/i915/xf86drm.c b/media_driver/linux/common/os/i915/xf86drm.c +index 7594bde99..d0fc1b7ac 100644 +--- a/media_driver/linux/common/os/i915/xf86drm.c ++++ b/media_driver/linux/common/os/i915/xf86drm.c +@@ -581,37 +581,38 @@ static int drmOpenByBusid(const char *busid, int type) + + drmMsg("drmOpenByBusid: Searching for BusID %s\n", busid); + for (i = base; i < base + DRM_MAX_MINOR; i++) { +- fd = drmOpenMinor(i, 1, type); +- drmMsg("drmOpenByBusid: drmOpenMinor returns %d\n", fd); +- if (fd >= 0) { +- /* We need to try for 1.4 first for proper PCI domain support +- * and if that fails, we know the kernel is busted +- */ +- sv.drm_di_major = 1; +- sv.drm_di_minor = 4; +- sv.drm_dd_major = -1; /* Don't care */ +- sv.drm_dd_minor = -1; /* Don't care */ +- if (drmSetInterfaceVersion(fd, &sv)) { ++ fd = drmOpenMinor(i, 1, type); ++ drmMsg("drmOpenByBusid: drmOpenMinor returns %d\n", fd); ++ if (fd >= 0) { ++ /* We need to try for 1.4 first for proper PCI domain support ++ * and if that fails, we know the kernel is busted ++ */ ++ sv.drm_di_major = 1; ++ sv.drm_di_minor = 4; ++ sv.drm_dd_major = -1; /* Don't care */ ++ sv.drm_dd_minor = -1; /* Don't care */ ++ if (drmSetInterfaceVersion(fd, &sv)) { + #ifndef __alpha__ +- pci_domain_ok = 0; ++ pci_domain_ok = 0; + #endif +- sv.drm_di_major = 1; +- sv.drm_di_minor = 1; +- sv.drm_dd_major = -1; /* Don't care */ +- sv.drm_dd_minor = -1; /* Don't care */ +- drmMsg("drmOpenByBusid: Interface 1.4 failed, trying 1.1\n"); +- drmSetInterfaceVersion(fd, &sv); +- } +- buf = drmGetBusid(fd); +- drmMsg("drmOpenByBusid: drmGetBusid reports %s\n", buf); +- if (buf && drmMatchBusID(buf, busid, pci_domain_ok)) { +- drmFreeBusid(buf); +- return fd; ++ sv.drm_di_major = 1; ++ sv.drm_di_minor = 1; ++ sv.drm_dd_major = -1; /* Don't care */ ++ sv.drm_dd_minor = -1; /* Don't care */ ++ drmMsg("drmOpenByBusid: Interface 1.4 failed, trying 1.1\n"); ++ drmSetInterfaceVersion(fd, &sv); ++ } ++ buf = drmGetBusid(fd); ++ if (buf) { ++ drmMsg("drmOpenByBusid: drmGetBusid reports %s\n", buf); ++ if (drmMatchBusID(buf, busid, pci_domain_ok)) { ++ drmFreeBusid(buf); ++ return fd; ++ } ++ drmFreeBusid(buf); ++ } ++ close(fd); + } +- if (buf) +- drmFreeBusid(buf); +- close(fd); +- } + } + return -1; + } +diff --git a/media_driver/linux/ult/libdrm_mock/xf86drm_mock.c b/media_driver/linux/ult/libdrm_mock/xf86drm_mock.c +index 7e5246295..2e5863798 100644 +--- a/media_driver/linux/ult/libdrm_mock/xf86drm_mock.c ++++ b/media_driver/linux/ult/libdrm_mock/xf86drm_mock.c +@@ -790,37 +790,38 @@ static int drmOpenByBusid(const char *busid, int type) + + drmMsg("drmOpenByBusid: Searching for BusID %s\n", busid); + for (i = base; i < base + DRM_MAX_MINOR; i++) { +- fd = drmOpenMinor(i, 1, type); +- drmMsg("drmOpenByBusid: drmOpenMinor returns %d\n", fd); +- if (fd >= 0) { +- /* We need to try for 1.4 first for proper PCI domain support +- * and if that fails, we know the kernel is busted +- */ +- sv.drm_di_major = 1; +- sv.drm_di_minor = 4; +- sv.drm_dd_major = -1; /* Don't care */ +- sv.drm_dd_minor = -1; /* Don't care */ +- if (drmSetInterfaceVersion(fd, &sv)) { ++ fd = drmOpenMinor(i, 1, type); ++ drmMsg("drmOpenByBusid: drmOpenMinor returns %d\n", fd); ++ if (fd >= 0) { ++ /* We need to try for 1.4 first for proper PCI domain support ++ * and if that fails, we know the kernel is busted ++ */ ++ sv.drm_di_major = 1; ++ sv.drm_di_minor = 4; ++ sv.drm_dd_major = -1; /* Don't care */ ++ sv.drm_dd_minor = -1; /* Don't care */ ++ if (drmSetInterfaceVersion(fd, &sv)) { + #ifndef __alpha__ +- pci_domain_ok = 0; ++ pci_domain_ok = 0; + #endif +- sv.drm_di_major = 1; +- sv.drm_di_minor = 1; +- sv.drm_dd_major = -1; /* Don't care */ +- sv.drm_dd_minor = -1; /* Don't care */ +- drmMsg("drmOpenByBusid: Interface 1.4 failed, trying 1.1\n"); +- drmSetInterfaceVersion(fd, &sv); +- } +- buf = drmGetBusid(fd); +- drmMsg("drmOpenByBusid: drmGetBusid reports %s\n", buf); +- if (buf && drmMatchBusID(buf, busid, pci_domain_ok)) { +- drmFreeBusid(buf); +- return fd; ++ sv.drm_di_major = 1; ++ sv.drm_di_minor = 1; ++ sv.drm_dd_major = -1; /* Don't care */ ++ sv.drm_dd_minor = -1; /* Don't care */ ++ drmMsg("drmOpenByBusid: Interface 1.4 failed, trying 1.1\n"); ++ drmSetInterfaceVersion(fd, &sv); ++ } ++ buf = drmGetBusid(fd); ++ if (buf) { ++ drmMsg("drmOpenByBusid: drmGetBusid reports %s\n", buf); ++ if (drmMatchBusID(buf, busid, pci_domain_ok)) { ++ drmFreeBusid(buf); ++ return fd; ++ } ++ drmFreeBusid(buf); ++ } ++ close(fd); + } +- if (buf) +- drmFreeBusid(buf); +- close(fd); +- } + } + return -1; + } diff --git a/package/intel-mediadriver/0003-cmrtlib-linux-CMakelists.txt-respect-MEDIA_BUILD_FAT.patch b/package/intel-mediadriver/0003-cmrtlib-linux-CMakelists.txt-respect-MEDIA_BUILD_FAT.patch new file mode 100644 index 00000000..bc7a27f4 --- /dev/null +++ b/package/intel-mediadriver/0003-cmrtlib-linux-CMakelists.txt-respect-MEDIA_BUILD_FAT.patch @@ -0,0 +1,51 @@ +From f09fddd6763aca237f19417de05a1f5de7f51d40 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 5 Jun 2021 16:57:32 +0200 +Subject: [PATCH] cmrtlib/linux/CMakelists.txt: respect + MEDIA_BUILD_FATAL_WARNINGS + +Respect MEDIA_BUILD_FATAL_WARNINGS to avoid the following build failure +when the user provides _FORTIFY_SOURCE: + +In file included from /home/buildroot/autobuild/instance-0/output-1/host/x86_64-buildroot-linux-gnu/sysroot/usr/include/dlfcn.h:22, + from /home/buildroot/autobuild/instance-0/output-1/build/intel-mediadriver-19.4.0r/cmrtlib/linux/../linux/share/cm_include.h:30, + from /home/buildroot/autobuild/instance-0/output-1/build/intel-mediadriver-19.4.0r/cmrtlib/agnostic/share/cm_printf_host.cpp:23: +/home/buildroot/autobuild/instance-0/output-1/host/x86_64-buildroot-linux-gnu/sysroot/usr/include/features.h:397:4: error: #warning _FORTIFY_SOURCE requires compiling with optimization (-O) [-Werror=cpp] + 397 | # warning _FORTIFY_SOURCE requires compiling with optimization (-O) + | ^~~~~~~ + +Fixes: + - http://autobuild.buildroot.org/results/52638d95312e464626d1c4047b3b26d4f57a1cd2 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/intel/media-driver/pull/1203] +--- + cmrtlib/linux/CMakeLists.txt | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/cmrtlib/linux/CMakeLists.txt b/cmrtlib/linux/CMakeLists.txt +index 7a0193a8..65f71cee 100644 +--- a/cmrtlib/linux/CMakeLists.txt ++++ b/cmrtlib/linux/CMakeLists.txt +@@ -32,12 +32,16 @@ else() + + # Set up compile options that will be used for the Linux build + if(CMAKE_COMPILER_IS_GNUCC) +- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1 -std=c++11 -fPIC -fpermissive -Werror") ++ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1 -std=c++11 -fPIC -fpermissive") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-strict-aliasing ") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG -D__DEBUG -O0") +- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1 -std=c++11 -fPIC -fpermissive -Werror") ++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1 -std=c++11 -fPIC -fpermissive") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -fno-strict-aliasing") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG -D__DEBUG -O0") ++ if(MEDIA_BUILD_FATAL_WARNINGS) ++ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS} -Werror") ++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS} -Werror") ++ endif() + + set(GCC_SECURE_LINK_FLAGS "-z relro -z now") + set(CMAKE_SKIP_RPATH ON) +-- +2.30.2 + diff --git a/package/intel-mediadriver/Config.in b/package/intel-mediadriver/Config.in new file mode 100644 index 00000000..35117f77 --- /dev/null +++ b/package/intel-mediadriver/Config.in @@ -0,0 +1,30 @@ +config BR2_PACKAGE_INTEL_MEDIADRIVER + bool "intel-mediadriver" + depends on BR2_x86_64 + depends on !BR2_STATIC_LIBS # mesa3d, libva + depends on BR2_INSTALL_LIBSTDCPP # mesa3d + depends on BR2_TOOLCHAIN_HAS_SYNC_1 # mesa3d + depends on BR2_TOOLCHAIN_HAS_THREADS # libva + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # mesa3d + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_INTEL_GMMLIB + select BR2_PACKAGE_LIBPCIACCESS + select BR2_PACKAGE_LIBVA + select BR2_PACKAGE_MESA3D + select BR2_PACKAGE_XLIB_LIBX11 + help + The Intel(R) Media Driver for VAAPI is a new VA-API (Video + Acceleration API) user mode driver supporting hardware + accelerated decoding, encoding, and video post processing for + GEN based graphics hardware. + + https://github.com/intel/media-driver + +comment "intel-mediadriver needs X.org" + depends on BR2_x86_64 && BR2_TOOLCHAIN_HAS_SYNC_1 + depends on !BR2_PACKAGE_XORG7 + +comment "intel-mediadriver needs a toolchain w/ dynamic library, C++, NPTL" + depends on BR2_x86_64 && BR2_TOOLCHAIN_HAS_SYNC_1 + depends on BR2_STATIC_LIBS || !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_HAS_THREADS_NPTL diff --git a/package/intel-mediadriver/intel-mediadriver.hash b/package/intel-mediadriver/intel-mediadriver.hash new file mode 100644 index 00000000..5d016695 --- /dev/null +++ b/package/intel-mediadriver/intel-mediadriver.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 a03bd75eefe9cb0245e3aab2723b3fef555d9f180a180b2c29d7b12d483d9ec2 intel-media-19.4.0r.tar.gz +sha256 74979d5aaee78b8da82e3aafd415a216b6131dfff6d95d6930927c8a4e3bded3 LICENSE.md diff --git a/package/intel-mediadriver/intel-mediadriver.mk b/package/intel-mediadriver/intel-mediadriver.mk new file mode 100644 index 00000000..01423b96 --- /dev/null +++ b/package/intel-mediadriver/intel-mediadriver.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# intel-mediadriver +# +################################################################################ + +# based on https://software.intel.com/en-us/articles/build-and-debug-open-source-media-stack + +INTEL_MEDIADRIVER_VERSION = 19.4.0r +INTEL_MEDIADRIVER_SITE = http://github.com/intel/media-driver/archive +INTEL_MEDIADRIVER_SOURCE= intel-media-$(INTEL_MEDIADRIVER_VERSION).tar.gz +INTEL_MEDIADRIVER_LICENSE = MIT, BSD-3-Clause +INTEL_MEDIADRIVER_LICENSE_FILES = LICENSE.md + +INTEL_MEDIADRIVER_DEPENDENCIES = \ + intel-gmmlib \ + libpciaccess \ + libva \ + mesa3d \ + xlib_libX11 + +INTEL_MEDIADRIVER_SUPPORTS_IN_SOURCE_BUILD = NO + +INTEL_MEDIADRIVER_CONF_OPTS = \ + -DINSTALL_DRIVER_SYSCONF=OFF \ + -DMEDIA_BUILD_FATAL_WARNINGS=OFF \ + -DMEDIA_RUN_TEST_SUITE=OFF + +$(eval $(cmake-package)) diff --git a/package/intel-mediasdk/0001-Don-t-force-fstack-protector.patch b/package/intel-mediasdk/0001-Don-t-force-fstack-protector.patch new file mode 100644 index 00000000..a33c218c --- /dev/null +++ b/package/intel-mediasdk/0001-Don-t-force-fstack-protector.patch @@ -0,0 +1,52 @@ +From 28ca7393c08cb54b87d11c1ca92821e48f54781b Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Mon, 15 Apr 2019 23:09:33 +0200 +Subject: [PATCH] Don't force -fstack-protector + +This allows the environment to decide whether SSP should be used or +not, for example to support toolchains that don't have SSP support. + +Signed-off-by: Thomas Petazzoni +--- + api/mfx_dispatch/linux/CMakeLists.txt | 2 +- + builder/FindPackages.cmake | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/api/mfx_dispatch/linux/CMakeLists.txt b/api/mfx_dispatch/linux/CMakeLists.txt +index 15a4bd9a..4415f840 100644 +--- a/api/mfx_dispatch/linux/CMakeLists.txt ++++ b/api/mfx_dispatch/linux/CMakeLists.txt +@@ -100,7 +100,7 @@ target_link_libraries(mfx dl) + get_api_version(MFX_VERSION_MAJOR MFX_VERSION_MINOR) + + set_target_properties( mfx PROPERTIES LINK_FLAGS +- "-Wl,--no-undefined,-z,relro,-z,now,-z,noexecstack -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/libmfx.map -fstack-protector") ++ "-Wl,--no-undefined,-z,relro,-z,now,-z,noexecstack -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/libmfx.map") + set_target_properties( mfx PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIB_DIR}/${CMAKE_BUILD_TYPE} FOLDER mfx ) + set_target_properties( mfx PROPERTIES VERSION ${MFX_VERSION_MAJOR}.${MFX_VERSION_MINOR}) + set_target_properties( mfx PROPERTIES SOVERSION ${MFX_VERSION_MAJOR}) +diff --git a/builder/FindPackages.cmake b/builder/FindPackages.cmake +index 7e36ae2d..5b8b9b9d 100644 +--- a/builder/FindPackages.cmake ++++ b/builder/FindPackages.cmake +@@ -83,7 +83,7 @@ function( configure_build_variant_linux target variant ) + return() # should not occur; just in case + endif() + set( link_flags_list "-Wl,--no-undefined,-z,relro,-z,now,-z,noexecstack -Wl,--no-as-needed -ldl") +- append_property( ${ARGV0} LINK_FLAGS "${link_flags_list} ${MFX_LDFLAGS} -fstack-protector" ) ++ append_property( ${ARGV0} LINK_FLAGS "${link_flags_list} ${MFX_LDFLAGS}" ) + # message( STATUS "Libva located at: ${PKG_LIBVA_LIBRARY_DIRS}" ) + + if( ARGV1 MATCHES hw AND Linux ) +@@ -448,7 +448,7 @@ function(configure_dependencies target dependencies variant) + endforeach() + + set(SCOPE_CFLAGS ${SCOPE_CFLAGS} PARENT_SCOPE) +- set(SCOPE_LINKFLAGS "${SCOPE_LINKFLAGS} -Wl,--no-undefined,-z,relro,-z,now,-z,noexecstack -fstack-protector" PARENT_SCOPE) ++ set(SCOPE_LINKFLAGS "${SCOPE_LINKFLAGS} -Wl,--no-undefined,-z,relro,-z,now,-z,noexecstack" PARENT_SCOPE) + set(SCOPE_LIBS ${SCOPE_LIBS} PARENT_SCOPE) + endfunction() + +-- +2.20.1 + diff --git a/package/intel-mediasdk/Config.in b/package/intel-mediasdk/Config.in new file mode 100644 index 00000000..05293d76 --- /dev/null +++ b/package/intel-mediasdk/Config.in @@ -0,0 +1,31 @@ +config BR2_PACKAGE_INTEL_MEDIASDK + bool "intel-mediasdk" + depends on BR2_x86_64 + depends on !BR2_STATIC_LIBS # intel-mediadriver + depends on BR2_INSTALL_LIBSTDCPP # intel-mediadriver + depends on BR2_TOOLCHAIN_HAS_SYNC_1 # intel-mediadriver + depends on BR2_TOOLCHAIN_HAS_THREADS # intel-mediadriver + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # intel-mediadriver + depends on BR2_PACKAGE_XORG7 # intel-mediadriver + select BR2_PACKAGE_INTEL_MEDIADRIVER + select BR2_PACKAGE_LIBDRM_INTEL + help + Intel(R) Media SDK provides an API to access + hardware-accelerated video decode, encode and filtering on + Intel® platforms with integrated graphics. + + Supported video encoders: HEVC, AVC, MPEG-2, JPEG + Supported Video decoders: HEVC, AVC, VP8, MPEG-2, VC1, JPEG + Supported video pre-processing filters: Color Conversion, + Deinterlace, Denoise, Resize, Rotate, Composition + + http://mediasdk.intel.com/ + +comment "intel-mediasdk needs X.org" + depends on BR2_x86_64 && BR2_TOOLCHAIN_HAS_SYNC_1 + depends on !BR2_PACKAGE_XORG7 + +comment "intel-mediasdk needs a toolchain w/ dynamic library, C++, NPTL" + depends on BR2_x86_64 && BR2_TOOLCHAIN_HAS_SYNC_1 + depends on BR2_STATIC_LIBS || !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_HAS_THREADS_NPTL diff --git a/package/intel-mediasdk/intel-mediasdk.hash b/package/intel-mediasdk/intel-mediasdk.hash new file mode 100644 index 00000000..103c8bb5 --- /dev/null +++ b/package/intel-mediasdk/intel-mediasdk.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 289a40ffe73dc291461d97edf452bdc622f76e52666483fd1eb4f131d2921cd1 intel-mediasdk-19.4.0.tar.gz +sha256 dfd67773578903698f9ff4a61eb8f2d84810cbecd56f3f3cee8c649f813b6ea6 LICENSE diff --git a/package/intel-mediasdk/intel-mediasdk.mk b/package/intel-mediasdk/intel-mediasdk.mk new file mode 100644 index 00000000..5467c963 --- /dev/null +++ b/package/intel-mediasdk/intel-mediasdk.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# intel-mediasdk +# +################################################################################ + +INTEL_MEDIASDK_VERSION = 19.4.0 +INTEL_MEDIASDK_SITE = http://github.com/Intel-Media-SDK/MediaSDK/archive +INTEL_MEDIASDK_LICENSE = MIT +INTEL_MEDIASDK_LICENSE_FILES = LICENSE + +INTEL_MEDIASDK_INSTALL_STAGING = YES +INTEL_MEDIASDK_DEPENDENCIES = intel-mediadriver + +INTEL_MEDIASDK_CONF_OPTS = \ + -DBUILD_SAMPLES=OFF \ + -DBUILD_TUTORIALS=OFF \ + -DMFX_INCLUDE="$(@D)/api/include" + +$(eval $(cmake-package)) diff --git a/package/intel-microcode/Config.in b/package/intel-microcode/Config.in new file mode 100644 index 00000000..4a45aa1e --- /dev/null +++ b/package/intel-microcode/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_INTEL_MICROCODE + bool "intel-microcode" + depends on BR2_x86_64 || BR2_i386 + help + This package provides an Intel microcode data file that can be + used to correct processor errors. The iucode-tool package and + proper kernel support are required to upload the microcode. + + https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files + +config BR2_PACKAGE_INTEL_MICROCODE_INSTALL_TARGET + bool "install microcode files to /lib/firmware in target" + default y + depends on BR2_PACKAGE_INTEL_MICROCODE + help + Select this option to have the microcode files installed to + /lib/firmware/intel-ucode in the target root filesystem, in + addition to the images directory. diff --git a/package/intel-microcode/intel-microcode.hash b/package/intel-microcode/intel-microcode.hash new file mode 100644 index 00000000..6687d4c0 --- /dev/null +++ b/package/intel-microcode/intel-microcode.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 fd85b6b769efd029dec6a2c07106fd18fb4dcb548b7bc4cde09295a8344ef6d7 intel-microcode-20210608.tar.gz +sha256 03efb1491c7e899feb2665fa299363e64035e5444c1b8bc1f6ebed30de964e12 license diff --git a/package/intel-microcode/intel-microcode.mk b/package/intel-microcode/intel-microcode.mk new file mode 100644 index 00000000..af7f6fa8 --- /dev/null +++ b/package/intel-microcode/intel-microcode.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# intel-microcode +# +################################################################################ + +INTEL_MICROCODE_VERSION = 20210608 +INTEL_MICROCODE_SITE = $(call github,intel,Intel-Linux-Processor-Microcode-Data-Files,microcode-$(INTEL_MICROCODE_VERSION)) +INTEL_MICROCODE_LICENSE = PROPRIETARY +INTEL_MICROCODE_LICENSE_FILES = license +INTEL_MICROCODE_REDISTRIBUTE = NO +INTEL_MICROCODE_INSTALL_IMAGES = YES + +define INTEL_MICROCODE_INSTALL_IMAGES_CMDS + mkdir -p $(BINARIES_DIR)/intel-ucode + $(INSTALL) -m 0644 -t $(BINARIES_DIR)/intel-ucode \ + $(@D)/intel-ucode/* +endef + +ifeq ($(BR2_PACKAGE_INTEL_MICROCODE_INSTALL_TARGET),y) +define INTEL_MICROCODE_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/lib/firmware/intel-ucode + $(INSTALL) -m 0644 -t $(TARGET_DIR)/lib/firmware/intel-ucode \ + $(@D)/intel-ucode/* +endef +else +INTEL_MICROCODE_INSTALL_TARGET = NO +endif + +define INTEL_MICROCODE_LINUX_CONFIG_FIXUPS + $(call KCONFIG_ENABLE_OPT,CONFIG_MICROCODE) + $(call KCONFIG_ENABLE_OPT,CONFIG_MICROCODE_INTEL) +endef + +$(eval $(generic-package)) diff --git a/package/intltool/0001-perl-5.26-compatibility.patch b/package/intltool/0001-perl-5.26-compatibility.patch new file mode 100644 index 00000000..a2a7aef1 --- /dev/null +++ b/package/intltool/0001-perl-5.26-compatibility.patch @@ -0,0 +1,55 @@ +Fix regex errors thrown by Perl 5.26: + +Unescaped left brace in regex is illegal here in regex; marked by <-- HERE in m/^(.*)\${ <-- HERE ?([A-Z_]+)}?(.*)$/ at $BUILDROOT/host/usr/bin/intltool-update line 1065. + +Fetched from: +https://github.com/Alexpux/MSYS2-packages/blob/master/intltool/perl-5.22-compatibility.patch + +Reported upstream: +https://bugs.launchpad.net/intltool/+bug/1696658 + +Signed-off-by: Jörg Krause + +--- intltool-0.51.0.orig/intltool-update.in 2015-03-09 02:39:54.000000000 +0100 ++++ intltool-0.51.0.orig/intltool-update.in 2015-06-19 01:52:07.171228154 +0200 +@@ -1062,7 +1062,7 @@ + } + } + +- if ($str =~ /^(.*)\${?([A-Z_]+)}?(.*)$/) ++ if ($str =~ /^(.*)\$\{?([A-Z_]+)}?(.*)$/) + { + my $rest = $3; + my $untouched = $1; +@@ -1190,10 +1190,10 @@ + $name =~ s/\(+$//g; + $version =~ s/\(+$//g; + +- $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\${?AC_PACKAGE_NAME}?/); +- $varhash{"PACKAGE"} = $name if (not $name =~ /\${?PACKAGE}?/); +- $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\${?AC_PACKAGE_VERSION}?/); +- $varhash{"VERSION"} = $version if (not $name =~ /\${?VERSION}?/); ++ $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\$\{?AC_PACKAGE_NAME}?/); ++ $varhash{"PACKAGE"} = $name if (not $name =~ /\$\{?PACKAGE}?/); ++ $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\$\{?AC_PACKAGE_VERSION}?/); ++ $varhash{"VERSION"} = $version if (not $name =~ /\$\{?VERSION}?/); + } + + if ($conf_source =~ /^AC_INIT\(([^,\)]+),([^,\)]+)[,]?([^,\)]+)?/m) +@@ -1219,11 +1219,11 @@ + $version =~ s/\(+$//g; + $bugurl =~ s/\(+$//g if (defined $bugurl); + +- $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\${?AC_PACKAGE_NAME}?/); +- $varhash{"PACKAGE"} = $name if (not $name =~ /\${?PACKAGE}?/); +- $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\${?AC_PACKAGE_VERSION}?/); +- $varhash{"VERSION"} = $version if (not $name =~ /\${?VERSION}?/); +- $varhash{"PACKAGE_BUGREPORT"} = $bugurl if (defined $bugurl and not $bugurl =~ /\${?\w+}?/); ++ $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\$\{?AC_PACKAGE_NAME}?/); ++ $varhash{"PACKAGE"} = $name if (not $name =~ /\$\{?PACKAGE}?/); ++ $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\$\{?AC_PACKAGE_VERSION}?/); ++ $varhash{"VERSION"} = $version if (not $name =~ /\$\{?VERSION}?/); ++ $varhash{"PACKAGE_BUGREPORT"} = $bugurl if (defined $bugurl and not $bugurl =~ /\$\{?\w+}?/); + } + + # \s makes this not work, why? diff --git a/package/intltool/intltool.hash b/package/intltool/intltool.hash new file mode 100644 index 00000000..de1df87b --- /dev/null +++ b/package/intltool/intltool.hash @@ -0,0 +1,6 @@ +# From https://launchpad.net/intltool/trunk/0.51.0/+download/intltool-0.51.0.tar.gz/+md5 +md5 12e517cac2b57a0121cda351570f1e63 intltool-0.51.0.tar.gz + +# Locally calculated +sha256 67c74d94196b153b774ab9f89b2fa6c6ba79352407037c8c14d5aeb334e959cd intltool-0.51.0.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/intltool/intltool.mk b/package/intltool/intltool.mk new file mode 100644 index 00000000..85955444 --- /dev/null +++ b/package/intltool/intltool.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# intltool +# +################################################################################ + +INTLTOOL_VERSION = 0.51.0 +INTLTOOL_SITE = https://launchpad.net/intltool/trunk/$(INTLTOOL_VERSION)/+download +INTLTOOL_LICENSE = GPL-2.0+ +INTLTOOL_LICENSE_FILES = COPYING + +HOST_INTLTOOL_DEPENDENCIES = host-gettext host-libxml-parser-perl + +$(eval $(host-autotools-package)) diff --git a/package/iodine/0001-disable-systemd-and-selinux.patch b/package/iodine/0001-disable-systemd-and-selinux.patch new file mode 100644 index 00000000..965abb7c --- /dev/null +++ b/package/iodine/0001-disable-systemd-and-selinux.patch @@ -0,0 +1,29 @@ +Disable selinux and systemd support since they check for host headers. + +Signed-off-by: Gustavo Zacarias + +diff -Nura iodine-0.7.0.orig/src/osflags iodine-0.7.0/src/osflags +--- iodine-0.7.0.orig/src/osflags 2015-02-20 14:59:00.799958145 -0300 ++++ iodine-0.7.0/src/osflags 2015-02-20 15:05:54.791135141 -0300 +@@ -18,8 +18,8 @@ + ;; + Linux) + FLAGS=""; +- [ -e /usr/include/selinux/selinux.h ] && FLAGS="$FLAGS -lselinux"; +- [ -e /usr/include/systemd/sd-daemon.h ] && FLAGS="$FLAGS -lsystemd-daemon"; ++ #[ -e /usr/include/selinux/selinux.h ] && FLAGS="$FLAGS -lselinux"; ++ #[ -e /usr/include/systemd/sd-daemon.h ] && FLAGS="$FLAGS -lsystemd-daemon"; + echo $FLAGS; + ;; + esac +@@ -34,8 +34,8 @@ + ;; + Linux) + FLAGS="-D_GNU_SOURCE" +- [ -e /usr/include/selinux/selinux.h ] && FLAGS="$FLAGS -DHAVE_SETCON"; +- [ -e /usr/include/systemd/sd-daemon.h ] && FLAGS="$FLAGS -DHAVE_SYSTEMD"; ++ #[ -e /usr/include/selinux/selinux.h ] && FLAGS="$FLAGS -DHAVE_SETCON"; ++ #[ -e /usr/include/systemd/sd-daemon.h ] && FLAGS="$FLAGS -DHAVE_SYSTEMD"; + echo $FLAGS; + ;; + esac diff --git a/package/iodine/Config.in b/package/iodine/Config.in new file mode 100644 index 00000000..6962cb8a --- /dev/null +++ b/package/iodine/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_IODINE + bool "iodine" + select BR2_PACKAGE_ZLIB + help + iodine lets you tunnel IPv4 data through a DNS server. + This can be usable in different situations where + internet access is firewalled, but DNS queries are allowed. + + http://code.kryo.se/iodine/ diff --git a/package/iodine/iodine.hash b/package/iodine/iodine.hash new file mode 100644 index 00000000..691ef4d7 --- /dev/null +++ b/package/iodine/iodine.hash @@ -0,0 +1,4 @@ +# From http://code.kryo.se/iodine/ +md5 fdbf3b81cd69caf5230d76a8b039fd99 iodine-0.7.0.tar.gz +# Locally computed +sha256 f41a252b2218759aa351270b7ad9791bdd323836b940e35c0614837a5d24dcb7 README diff --git a/package/iodine/iodine.mk b/package/iodine/iodine.mk new file mode 100644 index 00000000..5de63891 --- /dev/null +++ b/package/iodine/iodine.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# iodine +# +################################################################################ + +IODINE_VERSION = 0.7.0 +IODINE_SITE = http://code.kryo.se/iodine +IODINE_DEPENDENCIES = zlib +IODINE_LICENSE = MIT +IODINE_LICENSE_FILES = README +IODINE_CPE_ID_VENDOR = kryo + +IODINE_CFLAGS = $(TARGET_CFLAGS) + +# iodine contains a local implementation of daemon(3) for older +# systems, unless __GLIBC__ is defined. Musl does provide it, but +# unlike uClibc it doesn't define __GLIBC__. Work around it by +# pretending to be glibc as we otherwise end up with symbol conflicts. +ifeq ($(BR2_TOOLCHAIN_USES_MUSL),y) +IODINE_CFLAGS += -D__GLIBC__ +endif + +define IODINE_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) CFLAGS="$(IODINE_CFLAGS)" \ + $(MAKE) ARCH=$(BR2_ARCH) -C $(@D) +endef + +define IODINE_INSTALL_TARGET_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) install DESTDIR="$(TARGET_DIR)" prefix=/usr +endef + +$(eval $(generic-package)) diff --git a/package/iostat/0001-cpunum.patch b/package/iostat/0001-cpunum.patch new file mode 100644 index 00000000..0e75dbf7 --- /dev/null +++ b/package/iostat/0001-cpunum.patch @@ -0,0 +1,27 @@ +From bf646965f75cdad77a45fa3b0046e093b202b2ce Mon Sep 17 00:00:00 2001 +From: Gustavo Zacarias +Date: Thu, 22 Jul 2010 12:42:10 -0300 +Subject: [PATCH] Make cpu number counter more reliable + + +Signed-off-by: Gustavo Zacarias +--- + iostat.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/iostat.c b/iostat.c +index 13e2af7..5d74085 100644 +--- a/iostat.c ++++ b/iostat.c +@@ -140,7 +140,7 @@ void get_number_of_cpus() + + handle_error("Can't open /proc/cpuinfo", !ncpufp); + while (fgets(buffer, sizeof(buffer), ncpufp)) { +- if (!strncmp(buffer, "processor\t:", 11)) ++ if (!strncasecmp(buffer, "processor\t", 10)) + ncpu++; + } + fclose(ncpufp); +-- +1.7.1 + diff --git a/package/iostat/Config.in b/package/iostat/Config.in new file mode 100644 index 00000000..1aa14645 --- /dev/null +++ b/package/iostat/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_IOSTAT + bool "iostat" + help + An I/O performance monitoring utility. + + http://www.linuxinsight.com/iostat_utility.html diff --git a/package/iostat/iostat.hash b/package/iostat/iostat.hash new file mode 100644 index 00000000..0f58bbf7 --- /dev/null +++ b/package/iostat/iostat.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 edc5aa73f43bd6c7d49f2c1d5906a0a68c0b28bc4dfdaf1f2aa5ae4a2449c58e iostat-2.2.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 LICENSE diff --git a/package/iostat/iostat.mk b/package/iostat/iostat.mk new file mode 100644 index 00000000..4953c73e --- /dev/null +++ b/package/iostat/iostat.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# iostat +# +################################################################################ + +IOSTAT_VERSION = 2.2 +IOSTAT_SITE = http://linuxinsight.com/sites/default/files +IOSTAT_LICENSE = GPL +IOSTAT_LICENSE_FILES = LICENSE + +define IOSTAT_BUILD_CMDS + $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(TARGET_CFLAGS) -DHZ=100" +endef + +define IOSTAT_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(IOSTAT_DIR)/iostat $(TARGET_DIR)/usr/bin/iostat +endef + +$(eval $(generic-package)) diff --git a/package/iotop/0001-Fix-build-error-with-Python-3.patch b/package/iotop/0001-Fix-build-error-with-Python-3.patch new file mode 100644 index 00000000..bf656f88 --- /dev/null +++ b/package/iotop/0001-Fix-build-error-with-Python-3.patch @@ -0,0 +1,37 @@ +Status: upstream +http://repo.or.cz/w/iotop.git/commit/99c8d7cedce81f17b851954d94bfa73787300599 + +Signed-off-by: Christophe Vu-Brugier + +From 99c8d7cedce81f17b851954d94bfa73787300599 Mon Sep 17 00:00:00 2001 +From: Christophe Vu-Brugier +Date: Fri, 17 Oct 2014 13:49:31 +0200 +Subject: [PATCH] Fix build error with Python 3 caused by itervalues() in + setup.py + +The itervalues() method is not available in Python 3. As a +consequence, this patch replaces the call to itervalues() in setup.py +with a call to values() which works on both Python 2 and Python 3. + +Signed-off-by: Christophe Vu-Brugier +Signed-off-by: Paul Wise +--- + setup.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/setup.py b/setup.py +index 7150102..9de6068 100755 +--- a/setup.py ++++ b/setup.py +@@ -7,7 +7,7 @@ from iotop.version import VERSION + # Dirty hack to make setup.py install the iotop script to sbin/ instead of bin/ + # while still honoring the choice of installing into local/ or not. + if hasattr(distutils_install, 'INSTALL_SCHEMES'): +- for d in distutils_install.INSTALL_SCHEMES.itervalues(): ++ for d in distutils_install.INSTALL_SCHEMES.values(): + if d.get('scripts', '').endswith('/bin'): + d['scripts'] = d['scripts'][:-len('/bin')] + '/sbin' + +-- +2.1.4 + diff --git a/package/iotop/Config.in b/package/iotop/Config.in new file mode 100644 index 00000000..ada61316 --- /dev/null +++ b/package/iotop/Config.in @@ -0,0 +1,12 @@ +comment "iotop depends on python or python3" + depends on !BR2_PACKAGE_PYTHON && !BR2_PACKAGE_PYTHON3 + +config BR2_PACKAGE_IOTOP + bool "iotop" + depends on BR2_PACKAGE_PYTHON || BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_CURSES if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_CURSES if BR2_PACKAGE_PYTHON3 + help + iotop does for I/O usage what top does for CPU usage. + + http://guichaz.free.fr/iotop/ diff --git a/package/iotop/iotop.hash b/package/iotop/iotop.hash new file mode 100644 index 00000000..a8e96479 --- /dev/null +++ b/package/iotop/iotop.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 1a7c02fd3758bb048d8af861c5f8735eb3ee9abadeaa787f27b8af2b1eaee8ce iotop-0.6.tar.gz +sha256 c38aee9e3c8c4d5d594ff548a1be05453023016d6286931f6512db215ec1fd42 COPYING diff --git a/package/iotop/iotop.mk b/package/iotop/iotop.mk new file mode 100644 index 00000000..8b556497 --- /dev/null +++ b/package/iotop/iotop.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# iotop +# +################################################################################ + +IOTOP_VERSION = 0.6 +IOTOP_SITE = http://guichaz.free.fr/iotop/files +IOTOP_LICENSE = GPL-2.0+ +IOTOP_LICENSE_FILES = COPYING +IOTOP_SETUP_TYPE = distutils + +$(eval $(python-package)) diff --git a/package/iozone/0001-Add-new-targets-for-iozone.patch b/package/iozone/0001-Add-new-targets-for-iozone.patch new file mode 100644 index 00000000..e6bfc18d --- /dev/null +++ b/package/iozone/0001-Add-new-targets-for-iozone.patch @@ -0,0 +1,103 @@ +From 1584ffbfda3277b82997b9f1e0ef31a7061560e0 Mon Sep 17 00:00:00 2001 +From: Gustavo Zacarias +Date: Sun, 26 Aug 2018 18:39:06 +0200 +Subject: [PATCH] Add new targets for iozone: + +linux-noaio is for linux targets without AIO (use case: uClibc) +linux-noth is for linux target without threads or AIO + +And make largefile support optional via CFLAGS. + +Signed-off-by: Gustavo Zacarias +Signed-off-by: Gilles Talis +--- + src/current/makefile | 56 +++++++++++++++++++++++++++++++++++++++++++--------- + 1 file changed, 47 insertions(+), 9 deletions(-) + +diff --git a/src/current/makefile b/src/current/makefile +index cfef879..7925e62 100644 +--- a/src/current/makefile ++++ b/src/current/makefile +@@ -168,10 +168,28 @@ hpux_no_ansi: iozone_hpux_no.o libbif.o + # GNU 'C' compiler Linux build with threads, largefiles, async I/O + # + linux: iozone_linux.o libasync.o libbif.o fileop_linux.o pit_server.o +- $(CC) -O3 $(LDFLAGS) iozone_linux.o libasync.o libbif.o -lpthread \ ++ $(CC) $(CFLAGS) $(LDFLAGS) iozone_linux.o libasync.o libbif.o \ ++ -lpthread -lrt -o iozone ++ $(CC) $(CFLAGS) -Dlinux fileop_linux.o -o fileop ++ $(CC) $(CFLAGS) -Dlinux pit_server.o -o pit_server ++ ++# ++# GNU 'C' compiler Linux build with threads, largefiles ++# ++linux-noaio: iozone_linux-noaio.o libbif.o fileop_linux.o pit_server.o ++ $(CC) $(CFLAGS) $(LDFLAGS) iozone_linux-noaio.o libbif.o \ ++ -lpthread -lrt -o iozone ++ $(CC) $(CFLAGS) -Dlinux fileop_linux.o -o fileop ++ $(CC) $(CFLAGS) -Dlinux pit_server.o -o pit_server ++ ++# ++# GNU 'C' compiler Linux build with largefiles ++# ++linux-noth: iozone_linux-noth.o libbif.o fileop_linux.o pit_server.o ++ $(CC) $(CFLAGS) $(LDFLAGS) iozone_linux-noth.o libbif.o \ + -lrt -o iozone +- $(CC) -O3 -Dlinux fileop_linux.o -o fileop +- $(CC) -O3 -Dlinux pit_server.o -o pit_server ++ $(CC) $(CFLAGS) -Dlinux fileop_linux.o -o fileop ++ $(CC) $(CFLAGS) -Dlinux pit_server.o -o pit_server + + # + # GNU 'C' compiler Linux build for powerpc chip with threads, largefiles, async I/O +@@ -814,13 +832,33 @@ iozone_linux.o: iozone.c libbif.c libasync.c + @echo "" + @echo "Building iozone for Linux" + @echo "" +- $(CC) -Wmissing-prototypes -Wall -c -O3 -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DHAVE_PREAD \ +- -DSHARED_MEM -Dlinux -D_LARGEFILE64_SOURCE $(CFLAGS) iozone.c \ ++ $(CC) -Wmissing-prototypes -Wall -c -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DHAVE_PREAD \ ++ -DSHARED_MEM -Dlinux $(CFLAGS) iozone.c \ + -DNAME='"linux"' -o iozone_linux.o +- $(CC) -Wmissing-prototypes -Wall -c -O3 -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D_LARGEFILE64_SOURCE \ ++ $(CC) -Wmissing-prototypes -Wall -c -Dunix -DHAVE_ANSIC_C -DASYNC_IO \ ++ -DSHARED_MEM -Dlinux $(CFLAGS) libbif.c -o libbif.o ++ $(CC) -Wmissing-prototypes -Wall -c -Dunix -Dlinux -DHAVE_ANSIC_C -DASYNC_IO \ ++ $(CFLAGS) libasync.c -o libasync.o ++ ++iozone_linux-noaio.o: iozone.c libbif.c ++ @echo "" ++ @echo "Building iozone for Linux no AIO" ++ @echo "" ++ $(CC) -Wmissing-prototypes -Wall -c -Dunix -DHAVE_ANSIC_C -DHAVE_PREAD \ ++ -DSHARED_MEM -Dlinux $(CFLAGS) iozone.c \ ++ -DNAME='"linux"' -o iozone_linux-noaio.o ++ $(CC) -Wmissing-prototypes -Wall -c -Dunix -DHAVE_ANSIC_C \ ++ -DSHARED_MEM -Dlinux $(CFLAGS) libbif.c -o libbif.o ++ ++iozone_linux-noth.o: iozone.c libbif.c ++ @echo "" ++ @echo "Building iozone for Linux with no threads" ++ @echo "" ++ $(CC) -Wmissing-prototypes -Wall -c -Dunix -DHAVE_ANSIC_C -DNO_THREADS -DHAVE_PREAD \ ++ -DSHARED_MEM -Dlinux $(CFLAGS) iozone.c \ ++ -DNAME='"linux"' -o iozone_linux-noth.o ++ $(CC) -Wmissing-prototypes -Wall -c -Dunix -DHAVE_ANSIC_C -DNO_THREADS \ + -DSHARED_MEM -Dlinux $(CFLAGS) libbif.c -o libbif.o +- $(CC) -Wmissing-prototypes -Wall -c -O3 -Dunix -Dlinux -DHAVE_ANSIC_C -DASYNC_IO \ +- -D_LARGEFILE64_SOURCE $(CFLAGS) libasync.c -o libasync.o + + fileop_AIX.o: fileop.c + @echo "" +@@ -924,7 +962,7 @@ fileop_linux.o: fileop.c + @echo "" + @echo "Building fileop for Linux" + @echo "" +- $(CC) -Wall -c -O3 $(CFLAGS) fileop.c -o fileop_linux.o ++ $(CC) -Wall -c $(CFLAGS) fileop.c -o fileop_linux.o + + fileop_openbsd.o: fileop.c + @echo "" +-- +2.7.4 + diff --git a/package/iozone/Config.in b/package/iozone/Config.in new file mode 100644 index 00000000..c66def26 --- /dev/null +++ b/package/iozone/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_IOZONE + bool "iozone" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + help + IOzone is a filesystem benchmark tool. + The benchmark generates and measures a variety of file + operations + + http://www.iozone.org/ + +comment "iozone needs a toolchain w/ NPTL" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL diff --git a/package/iozone/iozone.hash b/package/iozone/iozone.hash new file mode 100644 index 00000000..61e8ff3a --- /dev/null +++ b/package/iozone/iozone.hash @@ -0,0 +1,2 @@ +# Locally calculated +sha256 5eadb4235ae2a956911204c50ebf2d8d8d59ddcd4a2841a1baf42f3145ad4fed iozone3_490.tar diff --git a/package/iozone/iozone.mk b/package/iozone/iozone.mk new file mode 100644 index 00000000..ebb62436 --- /dev/null +++ b/package/iozone/iozone.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# iozone +# +################################################################################ + +IOZONE_VERSION = 3_490 +IOZONE_SOURCE = iozone$(IOZONE_VERSION).tar +IOZONE_SITE = http://www.iozone.org/src/current +IOZONE_LICENSE = IOzone license (NO DERIVED WORKS ALLOWED) +# IOzone license details can be found at: +# http://www.iozone.org/docs/Iozone_License.txt + +# AIO support not available on uClibc, use the linux (non-aio) target. +ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y) +IOZONE_TARGET = linux-noaio +else +IOZONE_TARGET = linux +endif + +define IOZONE_BUILD_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) $(IOZONE_TARGET) -C $(@D)/src/current +endef + +define IOZONE_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 755 $(@D)/src/current/iozone \ + $(TARGET_DIR)/usr/bin/iozone + $(INSTALL) -D -m 755 $(@D)/src/current/fileop \ + $(TARGET_DIR)/usr/bin/fileop +endef + +$(eval $(generic-package)) diff --git a/package/ipcalc/0001-Do-not-fail-to-build-if-ronn-is-missing.patch b/package/ipcalc/0001-Do-not-fail-to-build-if-ronn-is-missing.patch new file mode 100644 index 00000000..419f4bba --- /dev/null +++ b/package/ipcalc/0001-Do-not-fail-to-build-if-ronn-is-missing.patch @@ -0,0 +1,49 @@ +From 322294d7bf61f9fdf0e45e9b6c6013a7c6a35bfd Mon Sep 17 00:00:00 2001 +From: Derrick Lyndon Pallas +Date: Wed, 14 Oct 2020 18:25:54 +0000 +Subject: [PATCH] Do not fail to build if ronn is missing + +If ruby-ronn is missing, we can not compile the man page from markdown but +that should not prevent the application from building. + +Signed-off-by: Derrick Lyndon Pallas +--- + meson.build | 23 ++++++++++++----------- + 1 file changed, 12 insertions(+), 11 deletions(-) + +diff --git a/meson.build b/meson.build +index a2169fc..981d4a4 100644 +--- a/meson.build ++++ b/meson.build +@@ -72,16 +72,17 @@ ipcalc = executable('ipcalc', + install : true + ) + +-ronn = find_program('ronn', required: true) +- +-ipcalc_1 = custom_target( +- 'ipcalc.1', +- output : 'ipcalc.1', +- input : 'ipcalc.1.md', +- command : [ronn, '--pipe', '-r', '@INPUT@'], +- capture: true, +- install_dir: join_paths(get_option('mandir'), 'man1'), +- install: true +-) ++ronn = find_program('ronn', required: false) ++if ronn.found() ++ ipcalc_1 = custom_target( ++ 'ipcalc.1', ++ output : 'ipcalc.1', ++ input : 'ipcalc.1.md', ++ command : [ronn, '--pipe', '-r', '@INPUT@'], ++ capture: true, ++ install_dir: join_paths(get_option('mandir'), 'man1'), ++ install: true ++ ) ++endif + + subdir('tests') +-- +2.28.0 + diff --git a/package/ipcalc/0002-Include-stdarg-for-va_list.patch b/package/ipcalc/0002-Include-stdarg-for-va_list.patch new file mode 100644 index 00000000..9261ce38 --- /dev/null +++ b/package/ipcalc/0002-Include-stdarg-for-va_list.patch @@ -0,0 +1,29 @@ +From 7795c02fb1e0f5fdbdf949007e52684c590235d4 Mon Sep 17 00:00:00 2001 +From: Derrick Lyndon Pallas +Date: Wed, 14 Oct 2020 18:40:38 +0000 +Subject: [PATCH] Include stdarg for va_list + +While several function signatures use va_list, stdarg was never included. +This fixes that. + +Signed-off-by: Derrick Lyndon Pallas +--- + ipcalc.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/ipcalc.h b/ipcalc.h +index 0e81320..a220dc5 100644 +--- a/ipcalc.h ++++ b/ipcalc.h +@@ -20,6 +20,8 @@ + #ifndef _IPCALC_H + #define _IPCALC_H + ++#include /* for va_list */ ++ + #if defined(USE_GEOIP) + void geo_ip_lookup(const char *ip, char **country, char **ccode, char **city, char **coord); + int geo_setup(void); +-- +2.28.0 + diff --git a/package/ipcalc/Config.in b/package/ipcalc/Config.in new file mode 100644 index 00000000..5f5f7ad8 --- /dev/null +++ b/package/ipcalc/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_IPCALC + bool "ipcalc" + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + A modern IPv4/IPv6 ipcalc tool, assisting in network + calculations in command line and as a tool for scripts. + + https://gitlab.com/ipcalc/ipcalc diff --git a/package/ipcalc/ipcalc.hash b/package/ipcalc/ipcalc.hash new file mode 100644 index 00000000..df610eb6 --- /dev/null +++ b/package/ipcalc/ipcalc.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 d7aca371335ab3e35364bcfe34cd0229db005be8bebb9236608ec318cb3f7748 ipcalc-1.0.0.tar.bz2 +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/ipcalc/ipcalc.mk b/package/ipcalc/ipcalc.mk new file mode 100644 index 00000000..ff9d6433 --- /dev/null +++ b/package/ipcalc/ipcalc.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# ipcalc +# +################################################################################ + +IPCALC_VERSION = 1.0.0 +IPCALC_SITE = $(call gitlab,ipcalc,ipcalc,$(IPCALC_VERSION)) +IPCALC_SOURCE = ipcalc-$(IPCALC_VERSION).tar.bz2 +IPCALC_LICENSE = GPL-2.0+ +IPCALC_LICENSE_FILES = COPYING + +IPCALC_CONF_OPTS = \ + -Duse_maxminddb=disabled \ + -Duse_geoip=disabled + +$(eval $(meson-package)) diff --git a/package/iperf/Config.in b/package/iperf/Config.in new file mode 100644 index 00000000..9de667aa --- /dev/null +++ b/package/iperf/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_IPERF + bool "iperf" + depends on BR2_INSTALL_LIBSTDCPP + # uses fork() + depends on BR2_USE_MMU + help + Internet Protocol bandwidth measuring tool for measuring + TCP/UDP performance. + + https://sourceforge.net/projects/iperf2/ + +config BR2_PACKAGE_IPERF_VERSION + string "iperf version" + default "2.0.13" + depends on BR2_PACKAGE_IPERF + help + Iperf Version + +comment "iperf needs a toolchain w/ C++" + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/iperf/iperf.hash b/package/iperf/iperf.hash new file mode 100644 index 00000000..a0acbcfb --- /dev/null +++ b/package/iperf/iperf.hash @@ -0,0 +1,7 @@ +# From https://sourceforge.net/projects/iperf2/files/ +sha1 0c7625c61087b9e6866421abb8bb533658b40a8d iperf-2.0.13.tar.gz + +# Locally computed: +sha256 c88adec966096a81136dda91b4bd19c27aae06df4d45a7f547a8e50d723778ad iperf-2.0.13.tar.gz +sha256 b427f81320cdda0d33a68657f613719feeef970fdb76a8a2c15cfcbe141273d8 iperf-2.0.12.tar.gz +sha256 5f9f5c4feca3347c3b3c0ada8b16b4e6b698aac4e6f016a24adf61a5915336d1 COPYING diff --git a/package/iperf/iperf.mk b/package/iperf/iperf.mk new file mode 100644 index 00000000..12dd4761 --- /dev/null +++ b/package/iperf/iperf.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# iperf +# +################################################################################ + + +# BR2_PACKAGE_IPERF_VERSION is string type, have "quote", such as "2.0.12" +# cannot directly give to IPERF_VERSION +ifeq ($(BR2_PACKAGE_IPERF_VERSION),"2.0.12") +IPERF_VERSION = 2.0.12 +else +IPERF_VERSION = 2.0.13 +endif + +IPERF_SITE = http://downloads.sourceforge.net/project/iperf2 +IPERF_LICENSE = MIT-like +IPERF_LICENSE_FILES = COPYING +IPERF_CPE_ID_VENDOR = iperf2_project +IPERF_CPE_ID_PRODUCT = iperf2 + +IPERF_CONF_OPTS = \ + --disable-web100 + +$(eval $(autotools-package)) diff --git a/package/iperf3/Config.in b/package/iperf3/Config.in new file mode 100644 index 00000000..5b2204c5 --- /dev/null +++ b/package/iperf3/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_IPERF3 + bool "iperf3" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + iperf is a tool for active measurements of the maximum + achievable bandwidth on IP networks. + It supports tuning of various parameters related to timing, + protocols, and buffers. For each test it reports the + bandwidth, loss, and other parameters. + It's a redesign of the NLANR/DAST iperf(2) and is not backward + compatible. + + http://software.es.net/iperf/index.html + +comment "iperf3 needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/iperf3/iperf3.hash b/package/iperf3/iperf3.hash new file mode 100644 index 00000000..fa9d54f4 --- /dev/null +++ b/package/iperf3/iperf3.hash @@ -0,0 +1,4 @@ +# From https://downloads.es.net/pub/iperf/iperf-3.9.tar.gz.sha256 +sha256 24b63a26382325f759f11d421779a937b63ca1bc17c44587d2fcfedab60ac038 iperf-3.9.tar.gz +# Locally computed +sha256 9ef73096bdd5209dd979bfa1fec70aeb42a7255d2df3aec423642aa92d5e9f40 LICENSE diff --git a/package/iperf3/iperf3.mk b/package/iperf3/iperf3.mk new file mode 100644 index 00000000..7d20b86e --- /dev/null +++ b/package/iperf3/iperf3.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# iperf3 +# +################################################################################ + +IPERF3_VERSION = 3.9 +IPERF3_SITE = https://downloads.es.net/pub/iperf +IPERF3_SOURCE = iperf-$(IPERF3_VERSION).tar.gz +IPERF3_LICENSE = BSD-3-Clause, BSD-2-Clause, MIT +IPERF3_LICENSE_FILES = LICENSE +IPERF3_CPE_ID_VENDOR = es + +IPERF3_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) -D_GNU_SOURCE" + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +# We intentionally don't pass --with-openssl, otherwise pkg-config is +# not used, and indirect libraries are not picked up when static +# linking. +IPERF3_DEPENDENCIES += host-pkgconf openssl +else +IPERF3_CONF_OPTS += --without-openssl +endif + +$(eval $(autotools-package)) diff --git a/package/ipmitool/0001-Fix-missing-stddef.h-include.patch b/package/ipmitool/0001-Fix-missing-stddef.h-include.patch new file mode 100644 index 00000000..dc3f92e4 --- /dev/null +++ b/package/ipmitool/0001-Fix-missing-stddef.h-include.patch @@ -0,0 +1,38 @@ +From 04d489936191e685123978a1ca370f9cc30e6a06 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=B6rg=20Krause?= +Date: Mon, 18 Apr 2016 21:17:26 +0200 +Subject: [PATCH] Fix missing stddef.h include +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Needed for wchar_t. Fixes build error: + +imbapi.h:140:9: error: unknown type name 'wchar_t' + typedef wchar_t WCHAR; + +Upstream status: Pending +https://sourceforge.net/p/ipmitool/mailman/message/35022779/ + +Signed-off-by: Jörg Krause +--- + src/plugins/imb/imbapi.h | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/plugins/imb/imbapi.h b/src/plugins/imb/imbapi.h +index 6ba4121..6b39b47 100644 +--- a/src/plugins/imb/imbapi.h ++++ b/src/plugins/imb/imbapi.h +@@ -33,6 +33,9 @@ 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. + *----------------------------------------------------------------------*/ ++ ++#include ++ + #ifndef _WINDEFS_H + #define _WINDEFS_H + #ifndef FALSE +-- +2.10.2 + diff --git a/package/ipmitool/0002-ID-461-OpenSSL-1.1-compatibility-error-storage-size-.patch b/package/ipmitool/0002-ID-461-OpenSSL-1.1-compatibility-error-storage-size-.patch new file mode 100644 index 00000000..d43f22e2 --- /dev/null +++ b/package/ipmitool/0002-ID-461-OpenSSL-1.1-compatibility-error-storage-size-.patch @@ -0,0 +1,108 @@ +From 1ad09f56d461e78ad83c77b654fb65467a68388b Mon Sep 17 00:00:00 2001 +From: Dennis Schridde +Date: Wed, 30 Nov 2016 17:33:00 +0100 +Subject: [PATCH] ID:461 - OpenSSL 1.1 compatibility - "error: storage size + of 'ctx' isn't known" + +In OpenSSL 1.1 EVP_CIPHER_CTX became opaque, cf. `man 3ssl EVP_EncryptInit` + +Fixes: ID:461 + +Upstream: https://github.com/ipmitool/ipmitool/commit/b57487e360916ab3eaa50aa6d021c73b6337a4a0 + +Signed-off-by: Matthew Weber +--- + src/plugins/lanplus/lanplus_crypt_impl.c | 28 ++++++++++++++-------------- + 1 file changed, 14 insertions(+), 14 deletions(-) + +diff --git a/src/plugins/lanplus/lanplus_crypt_impl.c b/src/plugins/lanplus/lanplus_crypt_impl.c +index d5fac37..3c0df23 100644 +--- a/src/plugins/lanplus/lanplus_crypt_impl.c ++++ b/src/plugins/lanplus/lanplus_crypt_impl.c +@@ -164,10 +164,10 @@ lanplus_encrypt_aes_cbc_128(const uint8_t * iv, + uint8_t * output, + uint32_t * bytes_written) + { +- EVP_CIPHER_CTX ctx; +- EVP_CIPHER_CTX_init(&ctx); +- EVP_EncryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL, key, iv); +- EVP_CIPHER_CTX_set_padding(&ctx, 0); ++ EVP_CIPHER_CTX* ctx; ++ EVP_CIPHER_CTX_init(ctx); ++ EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv); ++ EVP_CIPHER_CTX_set_padding(ctx, 0); + + + *bytes_written = 0; +@@ -191,7 +191,7 @@ lanplus_encrypt_aes_cbc_128(const uint8_t * iv, + assert((input_length % IPMI_CRYPT_AES_CBC_128_BLOCK_SIZE) == 0); + + +- if(!EVP_EncryptUpdate(&ctx, output, (int *)bytes_written, input, input_length)) ++ if(!EVP_EncryptUpdate(ctx, output, (int *)bytes_written, input, input_length)) + { + /* Error */ + *bytes_written = 0; +@@ -201,7 +201,7 @@ lanplus_encrypt_aes_cbc_128(const uint8_t * iv, + { + uint32_t tmplen; + +- if(!EVP_EncryptFinal_ex(&ctx, output + *bytes_written, (int *)&tmplen)) ++ if(!EVP_EncryptFinal_ex(ctx, output + *bytes_written, (int *)&tmplen)) + { + *bytes_written = 0; + return; /* Error */ +@@ -210,7 +210,7 @@ lanplus_encrypt_aes_cbc_128(const uint8_t * iv, + { + /* Success */ + *bytes_written += tmplen; +- EVP_CIPHER_CTX_cleanup(&ctx); ++ EVP_CIPHER_CTX_cleanup(ctx); + } + } + } +@@ -239,10 +239,10 @@ lanplus_decrypt_aes_cbc_128(const uint8_t * iv, + uint8_t * output, + uint32_t * bytes_written) + { +- EVP_CIPHER_CTX ctx; +- EVP_CIPHER_CTX_init(&ctx); +- EVP_DecryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL, key, iv); +- EVP_CIPHER_CTX_set_padding(&ctx, 0); ++ EVP_CIPHER_CTX* ctx; ++ EVP_CIPHER_CTX_init(ctx); ++ EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv); ++ EVP_CIPHER_CTX_set_padding(ctx, 0); + + + if (verbose >= 5) +@@ -266,7 +266,7 @@ lanplus_decrypt_aes_cbc_128(const uint8_t * iv, + assert((input_length % IPMI_CRYPT_AES_CBC_128_BLOCK_SIZE) == 0); + + +- if (!EVP_DecryptUpdate(&ctx, output, (int *)bytes_written, input, input_length)) ++ if (!EVP_DecryptUpdate(ctx, output, (int *)bytes_written, input, input_length)) + { + /* Error */ + lprintf(LOG_DEBUG, "ERROR: decrypt update failed"); +@@ -277,7 +277,7 @@ lanplus_decrypt_aes_cbc_128(const uint8_t * iv, + { + uint32_t tmplen; + +- if (!EVP_DecryptFinal_ex(&ctx, output + *bytes_written, (int *)&tmplen)) ++ if (!EVP_DecryptFinal_ex(ctx, output + *bytes_written, (int *)&tmplen)) + { + char buffer[1000]; + ERR_error_string(ERR_get_error(), buffer); +@@ -290,7 +290,7 @@ lanplus_decrypt_aes_cbc_128(const uint8_t * iv, + { + /* Success */ + *bytes_written += tmplen; +- EVP_CIPHER_CTX_cleanup(&ctx); ++ EVP_CIPHER_CTX_cleanup(ctx); + } + } + +-- +1.9.1 + diff --git a/package/ipmitool/0003-ID-461-Make-compiler-happier-about-changes-related-t.patch b/package/ipmitool/0003-ID-461-Make-compiler-happier-about-changes-related-t.patch new file mode 100644 index 00000000..7ff27bda --- /dev/null +++ b/package/ipmitool/0003-ID-461-Make-compiler-happier-about-changes-related-t.patch @@ -0,0 +1,40 @@ +From ccc85e4fd67423e770901ec59975e84b07eed883 Mon Sep 17 00:00:00 2001 +From: Zdenek Styblik +Date: Sun, 15 Jan 2017 15:11:25 +0100 +Subject: [PATCH] ID:461 - Make compiler happier about changes related to + OpenSSL 1.1 + +Complaint was that ctx isn't initialized. + +Upstream: https://github.com/ipmitool/ipmitool/commit/77fe5635037ebaf411cae46cf5045ca819b5c145 + +Signed-off-by: Matthew Weber +--- + src/plugins/lanplus/lanplus_crypt_impl.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/plugins/lanplus/lanplus_crypt_impl.c b/src/plugins/lanplus/lanplus_crypt_impl.c +index 3c0df23..d12d0e3 100644 +--- a/src/plugins/lanplus/lanplus_crypt_impl.c ++++ b/src/plugins/lanplus/lanplus_crypt_impl.c +@@ -164,7 +164,7 @@ lanplus_encrypt_aes_cbc_128(const uint8_t * iv, + uint8_t * output, + uint32_t * bytes_written) + { +- EVP_CIPHER_CTX* ctx; ++ EVP_CIPHER_CTX *ctx = NULL; + EVP_CIPHER_CTX_init(ctx); + EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv); + EVP_CIPHER_CTX_set_padding(ctx, 0); +@@ -239,7 +239,7 @@ lanplus_decrypt_aes_cbc_128(const uint8_t * iv, + uint8_t * output, + uint32_t * bytes_written) + { +- EVP_CIPHER_CTX* ctx; ++ EVP_CIPHER_CTX *ctx = NULL; + EVP_CIPHER_CTX_init(ctx); + EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv); + EVP_CIPHER_CTX_set_padding(ctx, 0); +-- +1.9.1 + diff --git a/package/ipmitool/0004-ID-480-ipmitool-coredumps-in-EVP_CIPHER_CTX_init.patch b/package/ipmitool/0004-ID-480-ipmitool-coredumps-in-EVP_CIPHER_CTX_init.patch new file mode 100644 index 00000000..aabcc62d --- /dev/null +++ b/package/ipmitool/0004-ID-480-ipmitool-coredumps-in-EVP_CIPHER_CTX_init.patch @@ -0,0 +1,57 @@ +From 72df3eadb27161a292f35b1d97178f70f41e50f6 Mon Sep 17 00:00:00 2001 +From: Zdenek Styblik +Date: Sun, 12 Mar 2017 14:00:35 +0100 +Subject: [PATCH] ID:480 - ipmitool coredumps in EVP_CIPHER_CTX_init + +IPMI tool coredumps due to changes introduced in ID:461. This shouldn't be +surprise as a NULL pointer is passed to init. Commit addresses this issue by +calling EVP_CIPHER_CTX_new() instead of EVP_CIPHER_CTX_init(), which is +deprecated, and by checking return value of call to former function. + +Upstream: https://github.com/ipmitool/ipmitool/commit/f004b4b7197fc83e7d47ec8cbcaefffa9a922717 + +Signed-off-by: Matthew Weber +--- + src/plugins/lanplus/lanplus_crypt_impl.c | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +diff --git a/src/plugins/lanplus/lanplus_crypt_impl.c b/src/plugins/lanplus/lanplus_crypt_impl.c +index d12d0e3..0e330c1 100644 +--- a/src/plugins/lanplus/lanplus_crypt_impl.c ++++ b/src/plugins/lanplus/lanplus_crypt_impl.c +@@ -165,10 +165,13 @@ lanplus_encrypt_aes_cbc_128(const uint8_t * iv, + uint32_t * bytes_written) + { + EVP_CIPHER_CTX *ctx = NULL; +- EVP_CIPHER_CTX_init(ctx); ++ ctx = EVP_CIPHER_CTX_new(); ++ if (ctx == NULL) { ++ *bytes_written = 0; ++ return; ++ } + EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv); + EVP_CIPHER_CTX_set_padding(ctx, 0); +- + + *bytes_written = 0; + +@@ -240,11 +243,14 @@ lanplus_decrypt_aes_cbc_128(const uint8_t * iv, + uint32_t * bytes_written) + { + EVP_CIPHER_CTX *ctx = NULL; +- EVP_CIPHER_CTX_init(ctx); ++ ctx = EVP_CIPHER_CTX_new(); ++ if (ctx == NULL) { ++ *bytes_written = 0; ++ return; ++ } + EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv); + EVP_CIPHER_CTX_set_padding(ctx, 0); + +- + if (verbose >= 5) + { + printbuf(iv, 16, "decrypting with this IV"); +-- +1.9.1 + diff --git a/package/ipmitool/0005-ID-480-Call-EVP_CIPHER_CTX_free-instead-of-EVP_CIPHE.patch b/package/ipmitool/0005-ID-480-Call-EVP_CIPHER_CTX_free-instead-of-EVP_CIPHE.patch new file mode 100644 index 00000000..b3ce9650 --- /dev/null +++ b/package/ipmitool/0005-ID-480-Call-EVP_CIPHER_CTX_free-instead-of-EVP_CIPHE.patch @@ -0,0 +1,148 @@ +From d9d6e0bff831da03f4448f0cdb82fc3d143662c8 Mon Sep 17 00:00:00 2001 +From: Holger Liebig +Date: Tue, 4 Apr 2017 20:43:05 +0200 +Subject: [PATCH] ID:480 - Call EVP_CIPHER_CTX_free() instead of + EVP_CIPHER_CTX_cleanup() + +Call EVP_CIPHER_CTX_free() instead of EVP_CIPHER_CTX_cleanup() to fix memory +leak. + +Upstream: https://github.com/ipmitool/ipmitool/commit/1664902525a1c3771b4d8b3ccab7ea1ba6b2bdd1 + +Signed-off-by: Matthew Weber +--- + src/plugins/lanplus/lanplus_crypt_impl.c | 44 +++++++++++++++++--------------- + 1 file changed, 23 insertions(+), 21 deletions(-) + +diff --git a/src/plugins/lanplus/lanplus_crypt_impl.c b/src/plugins/lanplus/lanplus_crypt_impl.c +index 0e330c1..9652a5e 100644 +--- a/src/plugins/lanplus/lanplus_crypt_impl.c ++++ b/src/plugins/lanplus/lanplus_crypt_impl.c +@@ -165,13 +165,6 @@ lanplus_encrypt_aes_cbc_128(const uint8_t * iv, + uint32_t * bytes_written) + { + EVP_CIPHER_CTX *ctx = NULL; +- ctx = EVP_CIPHER_CTX_new(); +- if (ctx == NULL) { +- *bytes_written = 0; +- return; +- } +- EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv); +- EVP_CIPHER_CTX_set_padding(ctx, 0); + + *bytes_written = 0; + +@@ -185,6 +178,14 @@ lanplus_encrypt_aes_cbc_128(const uint8_t * iv, + printbuf(input, input_length, "encrypting this data"); + } + ++ ctx = EVP_CIPHER_CTX_new(); ++ if (ctx == NULL) { ++ lprintf(LOG_DEBUG, "ERROR: EVP_CIPHER_CTX_new() failed"); ++ return; ++ } ++ EVP_CIPHER_CTX_init(ctx); ++ EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv); ++ EVP_CIPHER_CTX_set_padding(ctx, 0); + + /* + * The default implementation adds a whole block of padding if the input +@@ -198,7 +199,6 @@ lanplus_encrypt_aes_cbc_128(const uint8_t * iv, + { + /* Error */ + *bytes_written = 0; +- return; + } + else + { +@@ -206,16 +206,17 @@ lanplus_encrypt_aes_cbc_128(const uint8_t * iv, + + if(!EVP_EncryptFinal_ex(ctx, output + *bytes_written, (int *)&tmplen)) + { ++ /* Error */ + *bytes_written = 0; +- return; /* Error */ + } + else + { + /* Success */ + *bytes_written += tmplen; +- EVP_CIPHER_CTX_cleanup(ctx); + } + } ++ /* performs cleanup and free */ ++ EVP_CIPHER_CTX_free(ctx); + } + + +@@ -243,13 +244,6 @@ lanplus_decrypt_aes_cbc_128(const uint8_t * iv, + uint32_t * bytes_written) + { + EVP_CIPHER_CTX *ctx = NULL; +- ctx = EVP_CIPHER_CTX_new(); +- if (ctx == NULL) { +- *bytes_written = 0; +- return; +- } +- EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv); +- EVP_CIPHER_CTX_set_padding(ctx, 0); + + if (verbose >= 5) + { +@@ -258,12 +252,20 @@ lanplus_decrypt_aes_cbc_128(const uint8_t * iv, + printbuf(input, input_length, "decrypting this data"); + } + +- + *bytes_written = 0; + + if (input_length == 0) + return; + ++ ctx = EVP_CIPHER_CTX_new(); ++ if (ctx == NULL) { ++ lprintf(LOG_DEBUG, "ERROR: EVP_CIPHER_CTX_new() failed"); ++ return; ++ } ++ EVP_CIPHER_CTX_init(ctx); ++ EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv); ++ EVP_CIPHER_CTX_set_padding(ctx, 0); ++ + /* + * The default implementation adds a whole block of padding if the input + * data is perfectly aligned. We would like to keep that from happening. +@@ -277,7 +279,6 @@ lanplus_decrypt_aes_cbc_128(const uint8_t * iv, + /* Error */ + lprintf(LOG_DEBUG, "ERROR: decrypt update failed"); + *bytes_written = 0; +- return; + } + else + { +@@ -285,20 +286,21 @@ lanplus_decrypt_aes_cbc_128(const uint8_t * iv, + + if (!EVP_DecryptFinal_ex(ctx, output + *bytes_written, (int *)&tmplen)) + { ++ /* Error */ + char buffer[1000]; + ERR_error_string(ERR_get_error(), buffer); + lprintf(LOG_DEBUG, "the ERR error %s", buffer); + lprintf(LOG_DEBUG, "ERROR: decrypt final failed"); + *bytes_written = 0; +- return; /* Error */ + } + else + { + /* Success */ + *bytes_written += tmplen; +- EVP_CIPHER_CTX_cleanup(ctx); + } + } ++ /* performs cleanup and free */ ++ EVP_CIPHER_CTX_free(ctx); + + if (verbose >= 5) + { +-- +1.9.1 + diff --git a/package/ipmitool/0006-lanplus-Fix-compile-with-deprecated-APIs-disabled.patch b/package/ipmitool/0006-lanplus-Fix-compile-with-deprecated-APIs-disabled.patch new file mode 100644 index 00000000..87fdd0aa --- /dev/null +++ b/package/ipmitool/0006-lanplus-Fix-compile-with-deprecated-APIs-disabled.patch @@ -0,0 +1,50 @@ +From fc2136969adfb926eed610b8ed0a74b2030b48ed Mon Sep 17 00:00:00 2001 +From: Rosen Penev +Date: Tue, 21 Aug 2018 19:29:07 -0700 +Subject: [PATCH] lanplus: Fix compile with deprecated APIs disabled. + +From the man page: + +EVP_CIPHER_CTX was made opaque in OpenSSL 1.1.0. As a result, +EVP_CIPHER_CTX_reset() appeared and EVP_CIPHER_CTX_cleanup() disappeared. +EVP_CIPHER_CTX_init() remains as an alias for EVP_CIPHER_CTX_reset(). + +Upstream: https://github.com/ipmitool/ipmitool/commit/a8862d7508fb138b1c286eea958700cca63c9476 + +Signed-off-by: Rosen Penev +Signed-off-by: Matthew Weber +--- + src/plugins/lanplus/lanplus_crypt_impl.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/src/plugins/lanplus/lanplus_crypt_impl.c b/src/plugins/lanplus/lanplus_crypt_impl.c +index 9652a5e..e94401e 100644 +--- a/src/plugins/lanplus/lanplus_crypt_impl.c ++++ b/src/plugins/lanplus/lanplus_crypt_impl.c +@@ -183,7 +183,11 @@ lanplus_encrypt_aes_cbc_128(const uint8_t * iv, + lprintf(LOG_DEBUG, "ERROR: EVP_CIPHER_CTX_new() failed"); + return; + } ++#if OPENSSL_VERSION_NUMBER < 0x10100000L + EVP_CIPHER_CTX_init(ctx); ++#else ++ EVP_CIPHER_CTX_reset(ctx); ++#endif + EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv); + EVP_CIPHER_CTX_set_padding(ctx, 0); + +@@ -262,7 +266,11 @@ lanplus_decrypt_aes_cbc_128(const uint8_t * iv, + lprintf(LOG_DEBUG, "ERROR: EVP_CIPHER_CTX_new() failed"); + return; + } ++#if OPENSSL_VERSION_NUMBER < 0x10100000L + EVP_CIPHER_CTX_init(ctx); ++#else ++ EVP_CIPHER_CTX_reset(ctx); ++#endif + EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv); + EVP_CIPHER_CTX_set_padding(ctx, 0); + +-- +1.9.1 + diff --git a/package/ipmitool/0007-hpmfwupg-move-variable-definition-to-c-file.patch b/package/ipmitool/0007-hpmfwupg-move-variable-definition-to-c-file.patch new file mode 100644 index 00000000..0b49160b --- /dev/null +++ b/package/ipmitool/0007-hpmfwupg-move-variable-definition-to-c-file.patch @@ -0,0 +1,40 @@ +From c3939dac2c060651361fc71516806f9ab8c38901 Mon Sep 17 00:00:00 2001 +From: Vaclav Dolezal +Date: Thu, 23 Jan 2020 11:26:32 +0100 +Subject: [PATCH] hpmfwupg: move variable definition to .c file + +Signed-off-by: Vaclav Dolezal +[Retrieved from: +https://github.com/ipmitool/ipmitool/commit/c3939dac2c060651361fc71516806f9ab8c38901] +Signed-off-by: Fabrice Fontaine +--- + include/ipmitool/ipmi_hpmfwupg.h | 2 +- + lib/ipmi_hpmfwupg.c | 2 ++ + 2 files changed, 3 insertions(+), 1 deletion(-) + +diff --git a/include/ipmitool/ipmi_hpmfwupg.h b/include/ipmitool/ipmi_hpmfwupg.h +index de65292b..07f597be 100644 +--- a/include/ipmitool/ipmi_hpmfwupg.h ++++ b/include/ipmitool/ipmi_hpmfwupg.h +@@ -800,7 +800,7 @@ typedef struct _VERSIONINFO { + char descString[HPMFWUPG_DESC_STRING_LENGTH + 1]; + }VERSIONINFO, *PVERSIONINFO; + +-VERSIONINFO gVersionInfo[HPMFWUPG_COMPONENT_ID_MAX]; ++extern VERSIONINFO gVersionInfo[HPMFWUPG_COMPONENT_ID_MAX]; + + #define TARGET_VER (0x01) + #define ROLLBACK_VER (0x02) +diff --git a/lib/ipmi_hpmfwupg.c b/lib/ipmi_hpmfwupg.c +index 4aa8cecd..d63d2c15 100644 +--- a/lib/ipmi_hpmfwupg.c ++++ b/lib/ipmi_hpmfwupg.c +@@ -50,6 +50,8 @@ + + extern int verbose; + ++VERSIONINFO gVersionInfo[HPMFWUPG_COMPONENT_ID_MAX]; ++ + int HpmfwupgUpgrade(struct ipmi_intf *intf, char *imageFilename, + int activate, int, int); + int HpmfwupgValidateImageIntegrity(struct HpmfwupgUpgradeCtx *pFwupgCtx); diff --git a/package/ipmitool/0008-fru-Fix-buffer-overflow-vulnerabilities.patch b/package/ipmitool/0008-fru-Fix-buffer-overflow-vulnerabilities.patch new file mode 100644 index 00000000..a39713fd --- /dev/null +++ b/package/ipmitool/0008-fru-Fix-buffer-overflow-vulnerabilities.patch @@ -0,0 +1,132 @@ +From d615cb6c39d401a569941be2a615176191afa7ac Mon Sep 17 00:00:00 2001 +From: Chrostoper Ertl +Date: Thu, 28 Nov 2019 16:33:59 +0000 +Subject: [PATCH] fru: Fix buffer overflow vulnerabilities + +Partial fix for CVE-2020-5208, see +https://github.com/ipmitool/ipmitool/security/advisories/GHSA-g659-9qxw-p7cp + +The `read_fru_area_section` function only performs size validation of +requested read size, and falsely assumes that the IPMI message will not +respond with more than the requested amount of data; it uses the +unvalidated response size to copy into `frubuf`. If the response is +larger than the request, this can result in overflowing the buffer. + +The same issue affects the `read_fru_area` function. + +[Retrieve from +https://github.com/ipmitool/ipmitool/commit/e824c23316ae50beb7f7488f2055ac65e8b341f2] +Signed-off-by: Heiko Thiery +--- + lib/ipmi_fru.c | 33 +++++++++++++++++++++++++++++++-- + 1 file changed, 31 insertions(+), 2 deletions(-) + +diff --git a/lib/ipmi_fru.c b/lib/ipmi_fru.c +index cf00eff..af99aa9 100644 +--- a/lib/ipmi_fru.c ++++ b/lib/ipmi_fru.c +@@ -615,7 +615,10 @@ int + read_fru_area(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id, + uint32_t offset, uint32_t length, uint8_t *frubuf) + { +- uint32_t off = offset, tmp, finish; ++ uint32_t off = offset; ++ uint32_t tmp; ++ uint32_t finish; ++ uint32_t size_left_in_buffer; + struct ipmi_rs * rsp; + struct ipmi_rq req; + uint8_t msg_data[4]; +@@ -628,10 +631,12 @@ read_fru_area(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id, + + finish = offset + length; + if (finish > fru->size) { ++ memset(frubuf + fru->size, 0, length - fru->size); + finish = fru->size; + lprintf(LOG_NOTICE, "Read FRU Area length %d too large, " + "Adjusting to %d", + offset + length, finish - offset); ++ length = finish - offset; + } + + memset(&req, 0, sizeof(req)); +@@ -667,6 +672,7 @@ read_fru_area(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id, + } + } + ++ size_left_in_buffer = length; + do { + tmp = fru->access ? off >> 1 : off; + msg_data[0] = id; +@@ -707,9 +713,18 @@ read_fru_area(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id, + } + + tmp = fru->access ? rsp->data[0] << 1 : rsp->data[0]; ++ if(rsp->data_len < 1 ++ || tmp > rsp->data_len - 1 ++ || tmp > size_left_in_buffer) ++ { ++ printf(" Not enough buffer size"); ++ return -1; ++ } ++ + memcpy(frubuf, rsp->data + 1, tmp); + off += tmp; + frubuf += tmp; ++ size_left_in_buffer -= tmp; + /* sometimes the size returned in the Info command + * is too large. return 0 so higher level function + * still attempts to parse what was returned */ +@@ -742,7 +757,9 @@ read_fru_area_section(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id, + uint32_t offset, uint32_t length, uint8_t *frubuf) + { + static uint32_t fru_data_rqst_size = 20; +- uint32_t off = offset, tmp, finish; ++ uint32_t off = offset; ++ uint32_t tmp, finish; ++ uint32_t size_left_in_buffer; + struct ipmi_rs * rsp; + struct ipmi_rq req; + uint8_t msg_data[4]; +@@ -755,10 +772,12 @@ read_fru_area_section(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id, + + finish = offset + length; + if (finish > fru->size) { ++ memset(frubuf + fru->size, 0, length - fru->size); + finish = fru->size; + lprintf(LOG_NOTICE, "Read FRU Area length %d too large, " + "Adjusting to %d", + offset + length, finish - offset); ++ length = finish - offset; + } + + memset(&req, 0, sizeof(req)); +@@ -773,6 +792,8 @@ read_fru_area_section(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id, + if (fru->access && fru_data_rqst_size > 16) + #endif + fru_data_rqst_size = 16; ++ ++ size_left_in_buffer = length; + do { + tmp = fru->access ? off >> 1 : off; + msg_data[0] = id; +@@ -804,8 +825,16 @@ read_fru_area_section(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id, + } + + tmp = fru->access ? rsp->data[0] << 1 : rsp->data[0]; ++ if(rsp->data_len < 1 ++ || tmp > rsp->data_len - 1 ++ || tmp > size_left_in_buffer) ++ { ++ printf(" Not enough buffer size"); ++ return -1; ++ } + memcpy((frubuf + off)-offset, rsp->data + 1, tmp); + off += tmp; ++ size_left_in_buffer -= tmp; + + /* sometimes the size returned in the Info command + * is too large. return 0 so higher level function +-- +2.20.1 + diff --git a/package/ipmitool/0009-fru-Fix-buffer-overflow-in-ipmi_spd_print_fru.patch b/package/ipmitool/0009-fru-Fix-buffer-overflow-in-ipmi_spd_print_fru.patch new file mode 100644 index 00000000..213a2ad7 --- /dev/null +++ b/package/ipmitool/0009-fru-Fix-buffer-overflow-in-ipmi_spd_print_fru.patch @@ -0,0 +1,52 @@ +From 879f57c3b1ff17b1ca0dbdc8aac9c7a814e876fc Mon Sep 17 00:00:00 2001 +From: Chrostoper Ertl +Date: Thu, 28 Nov 2019 16:44:18 +0000 +Subject: [PATCH] fru: Fix buffer overflow in ipmi_spd_print_fru + +Partial fix for CVE-2020-5208, see +https://github.com/ipmitool/ipmitool/security/advisories/GHSA-g659-9qxw-p7cp + +The `ipmi_spd_print_fru` function has a similar issue as the one fixed +by the previous commit in `read_fru_area_section`. An initial request is +made to get the `fru.size`, which is used as the size for the allocation +of `spd_data`. Inside a loop, further requests are performed to get the +copy sizes which are not checked before being used as the size for a +copy into the buffer. + +[Retrieve from: +https://github.com/ipmitool/ipmitool/commit/840fb1cbb4fb365cb9797300e3374d4faefcdb10] +Signed-off-by: Heiko Thiery +--- + lib/dimm_spd.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/lib/dimm_spd.c b/lib/dimm_spd.c +index 41e30db..68f3b4f 100644 +--- a/lib/dimm_spd.c ++++ b/lib/dimm_spd.c +@@ -1621,7 +1621,7 @@ ipmi_spd_print_fru(struct ipmi_intf * intf, uint8_t id) + struct ipmi_rq req; + struct fru_info fru; + uint8_t *spd_data, msg_data[4]; +- int len, offset; ++ uint32_t len, offset; + + msg_data[0] = id; + +@@ -1697,6 +1697,13 @@ ipmi_spd_print_fru(struct ipmi_intf * intf, uint8_t id) + } + + len = rsp->data[0]; ++ if(rsp->data_len < 1 ++ || len > rsp->data_len - 1 ++ || len > fru.size - offset) ++ { ++ printf(" Not enough buffer size"); ++ return -1; ++ } + memcpy(&spd_data[offset], rsp->data + 1, len); + offset += len; + } while (offset < fru.size); +-- +2.20.1 + diff --git a/package/ipmitool/0010-session-Fix-buffer-overflow-in-ipmi_get_session_info.patch b/package/ipmitool/0010-session-Fix-buffer-overflow-in-ipmi_get_session_info.patch new file mode 100644 index 00000000..94a5ce65 --- /dev/null +++ b/package/ipmitool/0010-session-Fix-buffer-overflow-in-ipmi_get_session_info.patch @@ -0,0 +1,52 @@ +From cd785a7fe4f42ab59bcefcf01b9175f039af29b5 Mon Sep 17 00:00:00 2001 +From: Chrostoper Ertl +Date: Thu, 28 Nov 2019 16:51:49 +0000 +Subject: [PATCH] session: Fix buffer overflow in ipmi_get_session_info + +Partial fix for CVE-2020-5208, see +https://github.com/ipmitool/ipmitool/security/advisories/GHSA-g659-9qxw-p7cp + +The `ipmi_get_session_info` function does not properly check the +response `data_len`, which is used as a copy size, allowing stack buffer +overflow. + +[Retrieve from: +https://github.com/ipmitool/ipmitool/commit/41d7026946fafbd4d1ec0bcaca3ea30a6e8eed22] +Signed-off-by: Heiko Thiery +--- + lib/ipmi_session.c | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +diff --git a/lib/ipmi_session.c b/lib/ipmi_session.c +index 141f0f4..b9af1fd 100644 +--- a/lib/ipmi_session.c ++++ b/lib/ipmi_session.c +@@ -309,8 +309,10 @@ ipmi_get_session_info(struct ipmi_intf * intf, + } + else + { +- memcpy(&session_info, rsp->data, rsp->data_len); +- print_session_info(&session_info, rsp->data_len); ++ memcpy(&session_info, rsp->data, ++ __min(rsp->data_len, sizeof(session_info))); ++ print_session_info(&session_info, ++ __min(rsp->data_len, sizeof(session_info))); + } + break; + +@@ -341,8 +343,10 @@ ipmi_get_session_info(struct ipmi_intf * intf, + break; + } + +- memcpy(&session_info, rsp->data, rsp->data_len); +- print_session_info(&session_info, rsp->data_len); ++ memcpy(&session_info, rsp->data, ++ __min(rsp->data_len, sizeof(session_info))); ++ print_session_info(&session_info, ++ __min(rsp->data_len, sizeof(session_info))); + + } while (i <= session_info.session_slot_count); + break; +-- +2.20.1 + diff --git a/package/ipmitool/0011-channel-Fix-buffer-overflow.patch b/package/ipmitool/0011-channel-Fix-buffer-overflow.patch new file mode 100644 index 00000000..62e04c3e --- /dev/null +++ b/package/ipmitool/0011-channel-Fix-buffer-overflow.patch @@ -0,0 +1,46 @@ +From 1d479fc61feacc64adea64da9601f3dfcf6f74b3 Mon Sep 17 00:00:00 2001 +From: Chrostoper Ertl +Date: Thu, 28 Nov 2019 16:56:38 +0000 +Subject: [PATCH] channel: Fix buffer overflow +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Partial fix for CVE-2020-5208, see +https://github.com/ipmitool/ipmitool/security/advisories/GHSA-g659-9qxw-p7cp + +The `ipmi_get_channel_cipher_suites` function does not properly check +the final response’s `data_len`, which can lead to stack buffer overflow +on the final copy. + +[Retrieve from: +https://github.com/ipmitool/ipmitool/commit/9452be87181a6e83cfcc768b3ed8321763db50e4 + +The patch is slightly modified manually. The define +(MAX_CIPHER_SUITE_DATA_LEN) was introduced upstream in another patch. +Replace the define by the value 0x10.] + +Signed-off-by: Heiko Thiery +--- + lib/ipmi_channel.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/lib/ipmi_channel.c b/lib/ipmi_channel.c +index fab2e54..59ac227 100644 +--- a/lib/ipmi_channel.c ++++ b/lib/ipmi_channel.c +@@ -413,7 +413,10 @@ ipmi_get_channel_cipher_suites(struct ipmi_intf *intf, const char *payload_type, + lprintf(LOG_ERR, "Unable to Get Channel Cipher Suites"); + return -1; + } +- if (rsp->ccode > 0) { ++ if (rsp->ccode ++ || rsp->data_len < 1 ++ || rsp->data_len > sizeof(uint8_t) + 0x10) ++ { + lprintf(LOG_ERR, "Get Channel Cipher Suites failed: %s", + val2str(rsp->ccode, completion_code_vals)); + return -1; +-- +2.20.1 + diff --git a/package/ipmitool/0012-lanp-Fix-buffer-overflows-in-get_lan_param_select.patch b/package/ipmitool/0012-lanp-Fix-buffer-overflows-in-get_lan_param_select.patch new file mode 100644 index 00000000..aba9ad2c --- /dev/null +++ b/package/ipmitool/0012-lanp-Fix-buffer-overflows-in-get_lan_param_select.patch @@ -0,0 +1,92 @@ +From ceebf5998b71e11c81133680560b498977d3d3cd Mon Sep 17 00:00:00 2001 +From: Chrostoper Ertl +Date: Thu, 28 Nov 2019 17:06:39 +0000 +Subject: [PATCH] lanp: Fix buffer overflows in get_lan_param_select +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Partial fix for CVE-2020-5208, see +https://github.com/ipmitool/ipmitool/security/advisories/GHSA-g659-9qxw-p7cp + +The `get_lan_param_select` function is missing a validation check on the +response’s `data_len`, which it then returns to caller functions, where +stack buffer overflow can occur. + +[Retrieve from: +https://github.com/ipmitool/ipmitool/commit/d45572d71e70840e0d4c50bf48218492b79c1a10] +Signed-off-by: Heiko Thiery +--- + lib/ipmi_lanp.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +diff --git a/lib/ipmi_lanp.c b/lib/ipmi_lanp.c +index 65d881b..022c7f1 100644 +--- a/lib/ipmi_lanp.c ++++ b/lib/ipmi_lanp.c +@@ -1809,7 +1809,7 @@ ipmi_lan_alert_set(struct ipmi_intf * intf, uint8_t chan, uint8_t alert, + if (p == NULL) { + return (-1); + } +- memcpy(data, p->data, p->data_len); ++ memcpy(data, p->data, __min(p->data_len, sizeof(data))); + /* set new ipaddr */ + memcpy(data+3, temp, 4); + printf("Setting LAN Alert %d IP Address to %d.%d.%d.%d\n", alert, +@@ -1824,7 +1824,7 @@ ipmi_lan_alert_set(struct ipmi_intf * intf, uint8_t chan, uint8_t alert, + if (p == NULL) { + return (-1); + } +- memcpy(data, p->data, p->data_len); ++ memcpy(data, p->data, __min(p->data_len, sizeof(data))); + /* set new macaddr */ + memcpy(data+7, temp, 6); + printf("Setting LAN Alert %d MAC Address to " +@@ -1838,7 +1838,7 @@ ipmi_lan_alert_set(struct ipmi_intf * intf, uint8_t chan, uint8_t alert, + if (p == NULL) { + return (-1); + } +- memcpy(data, p->data, p->data_len); ++ memcpy(data, p->data, __min(p->data_len, sizeof(data))); + + if (strncasecmp(argv[1], "def", 3) == 0 || + strncasecmp(argv[1], "default", 7) == 0) { +@@ -1864,7 +1864,7 @@ ipmi_lan_alert_set(struct ipmi_intf * intf, uint8_t chan, uint8_t alert, + if (p == NULL) { + return (-1); + } +- memcpy(data, p->data, p->data_len); ++ memcpy(data, p->data, __min(p->data_len, sizeof(data))); + + if (strncasecmp(argv[1], "on", 2) == 0 || + strncasecmp(argv[1], "yes", 3) == 0) { +@@ -1889,7 +1889,7 @@ ipmi_lan_alert_set(struct ipmi_intf * intf, uint8_t chan, uint8_t alert, + if (p == NULL) { + return (-1); + } +- memcpy(data, p->data, p->data_len); ++ memcpy(data, p->data, __min(p->data_len, sizeof(data))); + + if (strncasecmp(argv[1], "pet", 3) == 0) { + printf("Setting LAN Alert %d destination to PET Trap\n", alert); +@@ -1917,7 +1917,7 @@ ipmi_lan_alert_set(struct ipmi_intf * intf, uint8_t chan, uint8_t alert, + if (p == NULL) { + return (-1); + } +- memcpy(data, p->data, p->data_len); ++ memcpy(data, p->data, __min(p->data_len, sizeof(data))); + + if (str2uchar(argv[1], &data[2]) != 0) { + lprintf(LOG_ERR, "Invalid time: %s", argv[1]); +@@ -1933,7 +1933,7 @@ ipmi_lan_alert_set(struct ipmi_intf * intf, uint8_t chan, uint8_t alert, + if (p == NULL) { + return (-1); + } +- memcpy(data, p->data, p->data_len); ++ memcpy(data, p->data, __min(p->data_len, sizeof(data))); + + if (str2uchar(argv[1], &data[3]) != 0) { + lprintf(LOG_ERR, "Invalid retry: %s", argv[1]); +-- +2.20.1 + diff --git a/package/ipmitool/0013-fru-sdr-Fix-id_string-buffer-overflows.patch b/package/ipmitool/0013-fru-sdr-Fix-id_string-buffer-overflows.patch new file mode 100644 index 00000000..2a519f3c --- /dev/null +++ b/package/ipmitool/0013-fru-sdr-Fix-id_string-buffer-overflows.patch @@ -0,0 +1,141 @@ +From bf3ded3a474d85da99eb717acdcd8ff4f89f9879 Mon Sep 17 00:00:00 2001 +From: Chrostoper Ertl +Date: Thu, 28 Nov 2019 17:13:45 +0000 +Subject: [PATCH] fru, sdr: Fix id_string buffer overflows + +Final part of the fixes for CVE-2020-5208, see +https://github.com/ipmitool/ipmitool/security/advisories/GHSA-g659-9qxw-p7cp + +9 variants of stack buffer overflow when parsing `id_string` field of +SDR records returned from `CMD_GET_SDR` command. + +SDR record structs have an `id_code` field, and an `id_string` `char` +array. + +The length of `id_string` is calculated as `(id_code & 0x1f) + 1`, +which can be larger than expected 16 characters (if `id_code = 0xff`, +then length will be `(0xff & 0x1f) + 1 = 32`). + +In numerous places, this can cause stack buffer overflow when copying +into fixed buffer of size `17` bytes from this calculated length. + +[Retrieve from: +https://github.com/ipmitool/ipmitool/commit/7ccea283dd62a05a320c1921e3d8d71a87772637] +Signed-off-by: Heiko Thiery +--- + lib/ipmi_fru.c | 2 +- + lib/ipmi_sdr.c | 40 ++++++++++++++++++++++++---------------- + 2 files changed, 25 insertions(+), 17 deletions(-) + +diff --git a/lib/ipmi_fru.c b/lib/ipmi_fru.c +index af99aa9..98bc984 100644 +--- a/lib/ipmi_fru.c ++++ b/lib/ipmi_fru.c +@@ -3062,7 +3062,7 @@ ipmi_fru_print(struct ipmi_intf * intf, struct sdr_record_fru_locator * fru) + return 0; + + memset(desc, 0, sizeof(desc)); +- memcpy(desc, fru->id_string, fru->id_code & 0x01f); ++ memcpy(desc, fru->id_string, __min(fru->id_code & 0x01f, sizeof(desc))); + desc[fru->id_code & 0x01f] = 0; + printf("FRU Device Description : %s (ID %d)\n", desc, fru->device_id); + +diff --git a/lib/ipmi_sdr.c b/lib/ipmi_sdr.c +index 2a9cbe3..62aac08 100644 +--- a/lib/ipmi_sdr.c ++++ b/lib/ipmi_sdr.c +@@ -2084,7 +2084,7 @@ ipmi_sdr_print_sensor_eventonly(struct ipmi_intf *intf, + return -1; + + memset(desc, 0, sizeof (desc)); +- snprintf(desc, (sensor->id_code & 0x1f) + 1, "%s", sensor->id_string); ++ snprintf(desc, sizeof(desc), "%.*s", (sensor->id_code & 0x1f) + 1, sensor->id_string); + + if (verbose) { + printf("Sensor ID : %s (0x%x)\n", +@@ -2135,7 +2135,7 @@ ipmi_sdr_print_sensor_mc_locator(struct ipmi_intf *intf, + return -1; + + memset(desc, 0, sizeof (desc)); +- snprintf(desc, (mc->id_code & 0x1f) + 1, "%s", mc->id_string); ++ snprintf(desc, sizeof(desc), "%.*s", (mc->id_code & 0x1f) + 1, mc->id_string); + + if (verbose == 0) { + if (csv_output) +@@ -2228,7 +2228,7 @@ ipmi_sdr_print_sensor_generic_locator(struct ipmi_intf *intf, + char desc[17]; + + memset(desc, 0, sizeof (desc)); +- snprintf(desc, (dev->id_code & 0x1f) + 1, "%s", dev->id_string); ++ snprintf(desc, sizeof(desc), "%.*s", (dev->id_code & 0x1f) + 1, dev->id_string); + + if (!verbose) { + if (csv_output) +@@ -2285,7 +2285,7 @@ ipmi_sdr_print_sensor_fru_locator(struct ipmi_intf *intf, + char desc[17]; + + memset(desc, 0, sizeof (desc)); +- snprintf(desc, (fru->id_code & 0x1f) + 1, "%s", fru->id_string); ++ snprintf(desc, sizeof(desc), "%.*s", (fru->id_code & 0x1f) + 1, fru->id_string); + + if (!verbose) { + if (csv_output) +@@ -2489,35 +2489,43 @@ ipmi_sdr_print_name_from_rawentry(struct ipmi_intf *intf, uint16_t id, + + int rc =0; + char desc[17]; ++ const char *id_string; ++ uint8_t id_code; + memset(desc, ' ', sizeof (desc)); + + switch ( type) { + case SDR_RECORD_TYPE_FULL_SENSOR: + record.full = (struct sdr_record_full_sensor *) raw; +- snprintf(desc, (record.full->id_code & 0x1f) +1, "%s", +- (const char *)record.full->id_string); ++ id_code = record.full->id_code; ++ id_string = record.full->id_string; + break; ++ + case SDR_RECORD_TYPE_COMPACT_SENSOR: + record.compact = (struct sdr_record_compact_sensor *) raw ; +- snprintf(desc, (record.compact->id_code & 0x1f) +1, "%s", +- (const char *)record.compact->id_string); ++ id_code = record.compact->id_code; ++ id_string = record.compact->id_string; + break; ++ + case SDR_RECORD_TYPE_EVENTONLY_SENSOR: + record.eventonly = (struct sdr_record_eventonly_sensor *) raw ; +- snprintf(desc, (record.eventonly->id_code & 0x1f) +1, "%s", +- (const char *)record.eventonly->id_string); +- break; ++ id_code = record.eventonly->id_code; ++ id_string = record.eventonly->id_string; ++ break; ++ + case SDR_RECORD_TYPE_MC_DEVICE_LOCATOR: + record.mcloc = (struct sdr_record_mc_locator *) raw ; +- snprintf(desc, (record.mcloc->id_code & 0x1f) +1, "%s", +- (const char *)record.mcloc->id_string); ++ id_code = record.mcloc->id_code; ++ id_string = record.mcloc->id_string; + break; ++ + default: + rc = -1; +- break; +- } ++ } ++ if (!rc) { ++ snprintf(desc, sizeof(desc), "%.*s", (id_code & 0x1f) + 1, id_string); ++ } + +- lprintf(LOG_INFO, "ID: 0x%04x , NAME: %-16s", id, desc); ++ lprintf(LOG_INFO, "ID: 0x%04x , NAME: %-16s", id, desc); + return rc; + } + +-- +2.20.1 + diff --git a/package/ipmitool/Config.in b/package/ipmitool/Config.in new file mode 100644 index 00000000..826bc094 --- /dev/null +++ b/package/ipmitool/Config.in @@ -0,0 +1,40 @@ +config BR2_PACKAGE_IPMITOOL + bool "ipmitool" + depends on BR2_USE_MMU # fork() + help + IPMItool provides a simple command-line interface to + IPMI-enabled devices. + + http://sourceforge.net/projects/ipmitool/ + +if BR2_PACKAGE_IPMITOOL + +config BR2_PACKAGE_IPMITOOL_LANPLUS + bool "enable lanplus interface" + select BR2_PACKAGE_OPENSSL + help + Enables the IPMI v2.0 RMCP+ LAN interface typically used to + send IPMI commands to the BMC of a remote server. + Not needed if you only want to communicate with the local BMC + of your device using the OpenIPMI ipmi_si kernel module, or if + using the legacy IPMI v1.5 RMCP LAN interface. + +config BR2_PACKAGE_IPMITOOL_USB + bool "enable usb interface" + help + Enables the IPMI USB interface typically used to send inband + IPMI commands to the BMC of a server. + +config BR2_PACKAGE_IPMITOOL_IPMIEVD + bool "ipmievd" + help + IPMI event daemon for sending events to syslog + +config BR2_PACKAGE_IPMITOOL_IPMISHELL + bool "ipmishell" + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_READLINE + help + IPMI shell interface + +endif diff --git a/package/ipmitool/ipmitool.hash b/package/ipmitool/ipmitool.hash new file mode 100644 index 00000000..5c053dc8 --- /dev/null +++ b/package/ipmitool/ipmitool.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 0c1ba3b1555edefb7c32ae8cd6a3e04322056bc087918f07189eeedfc8b81e01 ipmitool-1.8.18.tar.bz2 +sha256 b7e2382a8be43b5f6cb092f2d2bda163bf1a1938be9300f821a845cbcd535f56 COPYING diff --git a/package/ipmitool/ipmitool.mk b/package/ipmitool/ipmitool.mk new file mode 100644 index 00000000..facd97a0 --- /dev/null +++ b/package/ipmitool/ipmitool.mk @@ -0,0 +1,49 @@ +################################################################################ +# +# ipmitool +# +################################################################################ + +IPMITOOL_VERSION = 1.8.18 +IPMITOOL_SOURCE = ipmitool-$(IPMITOOL_VERSION).tar.bz2 +IPMITOOL_SITE = http://downloads.sourceforge.net/project/ipmitool/ipmitool/$(IPMITOOL_VERSION) +IPMITOOL_LICENSE = BSD-3-Clause +IPMITOOL_LICENSE_FILES = COPYING +IPMITOOL_CPE_ID_VENDOR = ipmitool_project + +# 0008-fru-Fix-buffer-overflow-vulnerabilities.patch +# 0009-fru-Fix-buffer-overflow-in-ipmi_spd_print_fru.patch +# 0010-session-Fix-buffer-overflow-in-ipmi_get_session_info.patch +# 0011-channel-Fix-buffer-overflow.patch +# 0012-lanp-Fix-buffer-overflows-in-get_lan_param_select.patch +# 0013-fru-sdr-Fix-id_string-buffer-overflows.patch +IPMITOOL_IGNORE_CVES += CVE-2020-5208 + +ifeq ($(BR2_PACKAGE_IPMITOOL_LANPLUS),y) +IPMITOOL_DEPENDENCIES += openssl +IPMITOOL_CONF_OPTS += --enable-intf-lanplus +else +IPMITOOL_CONF_OPTS += --disable-intf-lanplus +endif + +ifeq ($(BR2_PACKAGE_IPMITOOL_USB),y) +IPMITOOL_CONF_OPTS += --enable-intf-usb +else +IPMITOOL_CONF_OPTS += --disable-intf-usb +endif + +ifeq ($(BR2_PACKAGE_IPMITOOL_IPMISHELL),y) +IPMITOOL_DEPENDENCIES += ncurses readline +IPMITOOL_CONF_OPTS += --enable-ipmishell +else +IPMITOOL_CONF_OPTS += --disable-ipmishell +endif + +ifeq ($(BR2_PACKAGE_IPMITOOL_IPMIEVD),) +define IPMITOOL_REMOVE_IPMIEVD + $(RM) -f $(TARGET_DIR)/usr/sbin/ipmievd +endef +IPMITOOL_POST_INSTALL_TARGET_HOOKS += IPMITOOL_REMOVE_IPMIEVD +endif + +$(eval $(autotools-package)) diff --git a/package/ipmiutil/Config.in b/package/ipmiutil/Config.in new file mode 100644 index 00000000..9eb5452b --- /dev/null +++ b/package/ipmiutil/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_IPMIUTIL + bool "ipmiutil" + depends on BR2_USE_MMU + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_x86_64 || BR2_i386 + help + The ipmiutil package provides easy-to-use utilities to view + the SEL, perform an IPMI chassis reset, set up the IPMI LAN + and Platform Event Filter entries to allow SNMP alerts, + Serial-Over-LAN console, event daemon, and other IPMI tasks. + + http://ipmiutil.sourceforge.net/ + +comment "ipmiutil needs a toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS + depends on BR2_x86_64 || BR2_i386 diff --git a/package/ipmiutil/ipmiutil.hash b/package/ipmiutil/ipmiutil.hash new file mode 100644 index 00000000..f87c2762 --- /dev/null +++ b/package/ipmiutil/ipmiutil.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/ipmiutil/files/ +md5 fab260bc834a0f3f9324a6365fc26eca ipmiutil-3.1.7.tar.gz +sha1 a0cd29820b15166120eb4a51e6239bfa6f9c65dd ipmiutil-3.1.7.tar.gz +# Locally computed +sha256 911fd6f8b33651b98863d57e678d2fc593bc43fcd2a21f5dc7d5db8f92128a9a ipmiutil-3.1.7.tar.gz +sha256 7e0ec8238aa1431e95a4950032a4483fe33fec3fac348eaade5856cdc5ae3e39 COPYING diff --git a/package/ipmiutil/ipmiutil.mk b/package/ipmiutil/ipmiutil.mk new file mode 100644 index 00000000..d85b9643 --- /dev/null +++ b/package/ipmiutil/ipmiutil.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# ipmiutil +# +################################################################################ + +IPMIUTIL_VERSION = 3.1.7 +IPMIUTIL_SITE = https://sourceforge.net/projects/ipmiutil/files +IPMIUTIL_LICENSE = BSD-3-Clause +IPMIUTIL_LICENSE_FILES = COPYING + +IPMIUTIL_MAKE = $(MAKE1) + +# forgets to link against libcrypto dependencies breaking static link +ifeq ($(BR2_PACKAGE_OPENSSL)x$(BR2_STATIC_LIBS),yx) +# tests against distro libcrypto so it might get a false positive when +# the openssl version is old, so force it off +# SKIP_MD2 can be used only if ALLOW_GNU is defined. +IPMIUTIL_CONF_OPTS += CPPFLAGS="$(TARGET_CPPFLAGS) -DALLOW_GNU -DSKIP_MD2 -DSSL11" +IPMIUTIL_DEPENDENCIES += openssl +else +IPMIUTIL_CONF_OPTS += --disable-lanplus +endif + +$(eval $(autotools-package)) diff --git a/package/iproute2/0001-devlink-update-include-files.patch b/package/iproute2/0001-devlink-update-include-files.patch new file mode 100644 index 00000000..8cc6e4ec --- /dev/null +++ b/package/iproute2/0001-devlink-update-include-files.patch @@ -0,0 +1,55 @@ +From 12fafa27c7b306e6c397e858f4d5a8159500f659 Mon Sep 17 00:00:00 2001 +From: Stephen Hemminger +Date: Thu, 11 Jun 2020 09:46:46 -0700 +Subject: devlink: update include files + +Use the tool iwyu to get more complete list of includes for +all the bits used by devlink. + +This should also fix build with musl libc. + +Fixes: c4dfddccef4e ("fix JSON output of mon command") +Reported-off-by: Dan Robertson +Signed-off-by: Stephen Hemminger + +[Retrieved from: +https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/commit/?id=12fafa27c7b306e6c397e858f4d5a8159500f659] +Signed-off-by: Fabrice Fontaine +--- + devlink/devlink.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/devlink/devlink.c b/devlink/devlink.c +index 507972c3..ce2e4676 100644 +--- a/devlink/devlink.c ++++ b/devlink/devlink.c +@@ -19,18 +19,25 @@ + #include + #include + #include ++#include ++#include ++#include ++#include + #include + #define _LINUX_SYSINFO_H /* avoid collision with musl header */ + #include + #include ++#include + #include + #include ++#include ++#include + #include + + #include "SNAPSHOT.h" + #include "list.h" + #include "mnlg.h" +-#include "json_writer.h" ++#include "json_print.h" + #include "utils.h" + #include "namespace.h" + +-- +cgit 1.2.3-1.el7 + diff --git a/package/iproute2/Config.in b/package/iproute2/Config.in new file mode 100644 index 00000000..ab9e515e --- /dev/null +++ b/package/iproute2/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_IPROUTE2 + bool "iproute2" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4 # __kernel_{u,}long_t + help + Kernel routing and traffic control utilities. Provides things + like ip and tc. + + http://www.linuxfoundation.org/collaborate/workgroups/networking/iproute2 + +comment "iproute2 needs a toolchain w/ headers >= 3.4" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4 diff --git a/package/iproute2/iproute2.hash b/package/iproute2/iproute2.hash new file mode 100644 index 00000000..b2a9e21e --- /dev/null +++ b/package/iproute2/iproute2.hash @@ -0,0 +1,3 @@ +# From https://kernel.org/pub/linux/utils/net/iproute2/sha256sums.asc +sha256 725dc7ba94aae54c6f8d4223ca055d9fb4fe89d6994b1c03bfb4411c4dd10f21 iproute2-5.7.0.tar.xz +sha256 e6d6a009505e345fe949e1310334fcb0747f28dae2856759de102ab66b722cb4 COPYING diff --git a/package/iproute2/iproute2.mk b/package/iproute2/iproute2.mk new file mode 100644 index 00000000..3460c5c3 --- /dev/null +++ b/package/iproute2/iproute2.mk @@ -0,0 +1,58 @@ +################################################################################ +# +# iproute2 +# +################################################################################ + +IPROUTE2_VERSION = 5.7.0 +IPROUTE2_SOURCE = iproute2-$(IPROUTE2_VERSION).tar.xz +IPROUTE2_SITE = $(BR2_KERNEL_MIRROR)/linux/utils/net/iproute2 +IPROUTE2_DEPENDENCIES = host-bison host-flex host-pkgconf \ + $(if $(BR2_PACKAGE_LIBMNL),libmnl) +IPROUTE2_LICENSE = GPL-2.0+ +IPROUTE2_LICENSE_FILES = COPYING +IPROUTE2_CPE_ID_VENDOR = iproute2_project + +ifeq ($(BR2_PACKAGE_ELFUTILS),y) +IPROUTE2_DEPENDENCIES += elfutils +endif + +ifeq ($(BR2_PACKAGE_LIBCAP),y) +IPROUTE2_DEPENDENCIES += libcap +endif + +ifeq ($(BR2_PACKAGE_LIBSELINUX),y) +IPROUTE2_DEPENDENCIES += libselinux +endif + +ifeq ($(BR2_PACKAGE_IPTABLES)x$(BR2_STATIC_LIBS),yx) +IPROUTE2_DEPENDENCIES += iptables +else +define IPROUTE2_DISABLE_IPTABLES + # m_xt.so is built unconditionally + echo "TC_CONFIG_XT:=n" >>$(@D)/config.mk +endef +endif + +ifeq ($(BR2_PACKAGE_BERKELEYDB_COMPAT185),y) +IPROUTE2_DEPENDENCIES += berkeleydb +endif + +define IPROUTE2_CONFIGURE_CMDS + cd $(@D) && $(TARGET_CONFIGURE_OPTS) ./configure + $(IPROUTE2_DISABLE_IPTABLES) +endef + +define IPROUTE2_BUILD_CMDS + $(TARGET_MAKE_ENV) LDFLAGS="$(TARGET_LDFLAGS)" \ + CFLAGS="$(TARGET_CFLAGS) -DXT_LIB_DIR=\\\"/usr/lib/xtables\\\"" \ + CBUILD_CFLAGS="$(HOST_CFLAGS)" $(MAKE) V=1 LIBDB_LIBS=-lpthread \ + DBM_INCLUDE="$(STAGING_DIR)/usr/include" \ + SHARED_LIBS="$(if $(BR2_STATIC_LIBS),n,y)" -C $(@D) +endef + +define IPROUTE2_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) DESTDIR="$(TARGET_DIR)" $(MAKE) -C $(@D) install +endef + +$(eval $(generic-package)) diff --git a/package/iprutils/0001-configure.ac-add-AC_USE_SYSTEM_EXTENSIONS.patch b/package/iprutils/0001-configure.ac-add-AC_USE_SYSTEM_EXTENSIONS.patch new file mode 100644 index 00000000..c2b6a315 --- /dev/null +++ b/package/iprutils/0001-configure.ac-add-AC_USE_SYSTEM_EXTENSIONS.patch @@ -0,0 +1,47 @@ +From 068f37c100e105fd8edcae07762613e8e33c5282 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Tue, 18 Aug 2020 20:26:58 +0200 +Subject: [PATCH] configure.ac: add AC_USE_SYSTEM_EXTENSIONS + +uint and alphasort come from glibc, and with ancient versions thereof, +they were guarded behind different sets of feature-test macros (see +manpage for scandir() for example), which were not default back then. + +In file included from iprdump.c:17:0: +iprlib.h:1866:2: error: unknown type name 'uint' + uint supported_with_min_ucode_level; + ^ + +iprlib.c: In function 'ipr_get_pci_slots': +iprlib.c:1999:48: error: 'alphasort' undeclared (first use in this function) + num_slots = scandir(rootslot, &slotdir, NULL, alphasort); + ^ + +Fix them by adding AC_USE_SYSTEM_EXTENSIONS in configure.ac + +Fixes: + - http://autobuild.buildroot.org/results/41fde4aa06f7c025bb05aa594716643b9010358f + +[Upstream status: https://github.com/bjking1/iprutils/pull/4] +Signed-off-by: Fabrice Fontaine +[yann.morin.1998@free.fr: issue is with glibc, not gcc] +Signed-off-by: Yann E. MORIN +--- + configure.ac | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/configure.ac b/configure.ac +index 462a8b5..7f5fa7d 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -14,6 +14,7 @@ AC_INIT([iprutils], [2.4.19.1], [iprdd-devel@lists.sourceforge.net]) + + AM_INIT_AUTOMAKE([1.9 foreign]) + AC_CONFIG_MACRO_DIR([build-aux]) ++AC_USE_SYSTEM_EXTENSIONS + + # Checks for programs. + AC_PROG_CC +-- +2.27.0 + diff --git a/package/iprutils/Config.in b/package/iprutils/Config.in new file mode 100644 index 00000000..2938da0e --- /dev/null +++ b/package/iprutils/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_IPRUTILS + bool "iprutils" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_LIBSYSFS + select BR2_PACKAGE_PCIUTILS + select BR2_PACKAGE_ZLIB + help + System utilities for IBM Power RAID devices + + http://sourceforge.net/projects/iprdd/ diff --git a/package/iprutils/iprutils.hash b/package/iprutils/iprutils.hash new file mode 100644 index 00000000..bcad6e6d --- /dev/null +++ b/package/iprutils/iprutils.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/iprdd/files/iprutils%20for%202.6%20kernels/2.4.18/ +md5 df733f504dd4f96abf3272f679b25311 iprutils-2.4.18.1.tar.gz +sha1 701a1a9af6890d333904a92f0b01c26b92f821fa iprutils-2.4.18.1.tar.gz +# Locally computed: +sha256 1c26aee3bf95517fcb844f35ff2711a39b46cbfb50619db1d792c93eeee6f43d iprutils-2.4.18.1.tar.gz +sha256 59b4179e61248aff9cd2d6ee4cd1dbbd0ef48836fe2eeee19f4b16459785104a LICENSE diff --git a/package/iprutils/iprutils.mk b/package/iprutils/iprutils.mk new file mode 100644 index 00000000..9595125a --- /dev/null +++ b/package/iprutils/iprutils.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# iprutils +# +################################################################################ + +IPRUTILS_VERSION_MAJOR = 2.4.18 +IPRUTILS_VERSION = $(IPRUTILS_VERSION_MAJOR).1 +IPRUTILS_SITE = https://downloads.sourceforge.net/project/iprdd/iprutils%20for%202.6%20kernels/$(IPRUTILS_VERSION_MAJOR) +IPRUTILS_DEPENDENCIES = ncurses libsysfs pciutils zlib +IPRUTILS_LICENSE = Common Public License Version 1.0 +IPRUTILS_LICENSE_FILES = LICENSE +# We"re patching configure.ac +IPRUTILS_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/ipset/Config.in b/package/ipset/Config.in new file mode 100644 index 00000000..69514132 --- /dev/null +++ b/package/ipset/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_IPSET + bool "ipset" + select BR2_PACKAGE_LIBMNL + help + Utility to manage IP sets in the linux kernel. + Requires a patched kernel or version >=2.6.39. + + http://ipset.netfilter.org/ diff --git a/package/ipset/ipset.hash b/package/ipset/ipset.hash new file mode 100644 index 00000000..fb200585 --- /dev/null +++ b/package/ipset/ipset.hash @@ -0,0 +1,6 @@ +# From http://ipset.netfilter.org/ipset-7.6.tar.bz2.md5sum.txt +md5 e107b679c3256af795261cece864d6d9 ipset-7.6.tar.bz2 +# Calculated based on the hash above +sha256 0e7d44caa9c153d96a9b5f12644fbe35a632537a5a7f653792b72e53d9d5c2db ipset-7.6.tar.bz2 +# Locally calculated +sha256 231f7edcc7352d7734a96eef0b8030f77982678c516876fcb81e25b32d68564c COPYING diff --git a/package/ipset/ipset.mk b/package/ipset/ipset.mk new file mode 100644 index 00000000..4c5a44a5 --- /dev/null +++ b/package/ipset/ipset.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# ipset +# +################################################################################ + +IPSET_VERSION = 7.6 +IPSET_SOURCE = ipset-$(IPSET_VERSION).tar.bz2 +IPSET_SITE = http://ipset.netfilter.org +IPSET_DEPENDENCIES = libmnl host-pkgconf +IPSET_CONF_OPTS = --with-kmod=no +IPSET_LICENSE = GPL-2.0 +IPSET_LICENSE_FILES = COPYING +IPSET_CPE_ID_VENDOR = netfilter +IPSET_INSTALL_STAGING = YES +IPSET_SELINUX_MODULES = iptables + +$(eval $(autotools-package)) diff --git a/package/iptables/Config.in b/package/iptables/Config.in new file mode 100644 index 00000000..e6b12603 --- /dev/null +++ b/package/iptables/Config.in @@ -0,0 +1,31 @@ +config BR2_PACKAGE_IPTABLES + bool "iptables" + help + Linux kernel firewall, NAT, and packet mangling tools. + + http://www.netfilter.org/projects/iptables/index.html + +if BR2_PACKAGE_IPTABLES + +config BR2_PACKAGE_IPTABLES_BPF_NFSYNPROXY + bool "bpfc and nfsynproxy" + select BR2_PACKAGE_LIBPCAP + help + Build bpf compiler and nfsynproxy configuration tool. + +config BR2_PACKAGE_IPTABLES_NFTABLES + bool "nftables compat" + # uses dlfcn + depends on !BR2_STATIC_LIBS + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12 + select BR2_PACKAGE_LIBMNL + select BR2_PACKAGE_LIBNFTNL + help + Build nftables compat utilities. + +comment "nftables compat needs a toolchain w/ wchar, dynamic library, headers >= 3.12" + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12 || \ + !BR2_USE_WCHAR || BR2_STATIC_LIBS + +endif diff --git a/package/iptables/iptables.hash b/package/iptables/iptables.hash new file mode 100644 index 00000000..120e7e4a --- /dev/null +++ b/package/iptables/iptables.hash @@ -0,0 +1,4 @@ +# From https://netfilter.org/projects/iptables/downloads.html +sha256 a0f4fe0c3eb8faa5bd9c8376d132f340b9558e750c91deb2d5028aa3d0047767 iptables-1.8.6.tar.bz2 +# Locally calculated +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/iptables/iptables.mk b/package/iptables/iptables.mk new file mode 100644 index 00000000..dc014666 --- /dev/null +++ b/package/iptables/iptables.mk @@ -0,0 +1,60 @@ +################################################################################ +# +# iptables +# +################################################################################ + +IPTABLES_VERSION = 1.8.6 +IPTABLES_SOURCE = iptables-$(IPTABLES_VERSION).tar.bz2 +IPTABLES_SITE = https://netfilter.org/projects/iptables/files +IPTABLES_INSTALL_STAGING = YES +IPTABLES_DEPENDENCIES = host-pkgconf \ + $(if $(BR2_PACKAGE_LIBNETFILTER_CONNTRACK),libnetfilter_conntrack) +IPTABLES_LICENSE = GPL-2.0 +IPTABLES_LICENSE_FILES = COPYING +IPTABLES_CPE_ID_VENDOR = netfilter +IPTABLES_SELINUX_MODULES = iptables + +# Building static causes ugly warnings on some plugins +IPTABLES_CONF_OPTS = --libexecdir=/usr/lib --with-kernel=$(STAGING_DIR)/usr \ + $(if $(BR2_STATIC_LIBS),,--disable-static) + +# For connlabel match +ifeq ($(BR2_PACKAGE_LIBNETFILTER_CONNTRACK),y) +IPTABLES_DEPENDENCIES += libnetfilter_conntrack +endif + +# For nfnl_osf +ifeq ($(BR2_PACKAGE_LIBNFNETLINK),y) +IPTABLES_DEPENDENCIES += libnfnetlink +endif + +# For iptables-compat tools +ifeq ($(BR2_PACKAGE_IPTABLES_NFTABLES),y) +IPTABLES_CONF_OPTS += --enable-nftables +IPTABLES_DEPENDENCIES += host-bison host-flex libmnl libnftnl +else +IPTABLES_CONF_OPTS += --disable-nftables +endif + +# bpf compiler support and nfsynproxy tool +ifeq ($(BR2_PACKAGE_IPTABLES_BPF_NFSYNPROXY),y) +# libpcap is tricky for static-only builds and needs help +ifeq ($(BR2_STATIC_LIBS),y) +IPTABLES_LIBS_FOR_STATIC_LINK += `$(STAGING_DIR)/usr/bin/pcap-config --static --additional-libs` +IPTABLES_CONF_OPTS += LIBS="$(IPTABLES_LIBS_FOR_STATIC_LINK)" +endif +IPTABLES_CONF_OPTS += --enable-bpf-compiler --enable-nfsynproxy +IPTABLES_DEPENDENCIES += libpcap +else +IPTABLES_CONF_OPTS += --disable-bpf-compiler --disable-nfsynproxy +endif + +define IPTABLES_LINUX_CONFIG_FIXUPS + $(call KCONFIG_ENABLE_OPT,CONFIG_IP_NF_IPTABLES) + $(call KCONFIG_ENABLE_OPT,CONFIG_IP_NF_FILTER) + $(call KCONFIG_ENABLE_OPT,CONFIG_NETFILTER) + $(call KCONFIG_ENABLE_OPT,CONFIG_NETFILTER_XTABLES) +endef + +$(eval $(autotools-package)) diff --git a/package/iptraf-ng/Config.in b/package/iptraf-ng/Config.in new file mode 100644 index 00000000..5c61b7c0 --- /dev/null +++ b/package/iptraf-ng/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_IPTRAF_NG + bool "iptraf-ng" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14 + select BR2_PACKAGE_NCURSES + help + IPTraf-ng is a console-based network monitoring program for + Linux that gathers displays information about IP traffic. + + https://github.com/iptraf-ng/iptraf-ng + + IPTraf-ng is a fork of original IPTraf v3.0.0 + (http://iptraf.seul.org). + +comment "iptraf-ng needs a toolchain w/ kernel headers >= 3.14" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14 diff --git a/package/iptraf-ng/iptraf-ng.hash b/package/iptraf-ng/iptraf-ng.hash new file mode 100644 index 00000000..314d5cee --- /dev/null +++ b/package/iptraf-ng/iptraf-ng.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 9f5cef584065420dea1ba32c86126aede1fa9bd25b0f8362b0f9fd9754f00870 iptraf-ng-1.2.1.tar.gz +sha256 4e49bef38f621aac4a870da4b30011c7b7abc7256b218daec1c425b08448ae1e LICENSE diff --git a/package/iptraf-ng/iptraf-ng.mk b/package/iptraf-ng/iptraf-ng.mk new file mode 100644 index 00000000..044630be --- /dev/null +++ b/package/iptraf-ng/iptraf-ng.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# iptraf-ng +# +################################################################################ + +IPTRAF_NG_VERSION = 1.2.1 +IPTRAF_NG_SITE = $(call github,iptraf-ng,iptraf-ng,v$(IPTRAF_NG_VERSION)) +IPTRAF_NG_LICENSE = GPL-2.0+ +IPTRAF_NG_LICENSE_FILES = LICENSE +IPTRAF_NG_DEPENDENCIES = ncurses + +define IPTRAF_NG_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) \ + NCURSES_LDFLAGS="-lpanel -lncurses" \ + -C $(@D) +endef + +define IPTRAF_NG_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + prefix=/usr DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/iputils/Config.in b/package/iputils/Config.in new file mode 100644 index 00000000..0d4a4ba3 --- /dev/null +++ b/package/iputils/Config.in @@ -0,0 +1,76 @@ +config BR2_PACKAGE_IPUTILS + bool "iputils" + depends on BR2_USE_MMU # fork() + help + This package is set of small useful utilities for Linux + networking. It includes complete versions of ping, traceroute, + etc. + + https://github.com/iputils/iputils + +if BR2_PACKAGE_IPUTILS + +config BR2_PACKAGE_IPUTILS_ARPING + bool "arping" + default y + help + Installs arping. + +config BR2_PACKAGE_IPUTILS_CLOCKDIFF + bool "clockdiff" + default y + help + Installs clockdiff. + +config BR2_PACKAGE_IPUTILS_PING + bool "ping" + default y + help + Installs ping. + +config BR2_PACKAGE_IPUTILS_RARPD + bool "rarpd" + help + Installs rarpd. + +config BR2_PACKAGE_IPUTILS_RDISC + bool "rdisc" + default y + help + Installs rdisc. + +config BR2_PACKAGE_IPUTILS_RDISC_SERVER + bool "rdisc (server code)" + default y + depends on BR2_PACKAGE_IPUTILS_RDISC + help + Builds rdisc with server code. + +config BR2_PACKAGE_IPUTILS_TFTPD + bool "tftpd" + help + Installs tftpd. + +config BR2_PACKAGE_IPUTILS_TRACEPATH + bool "tracepath" + default y + help + Installs tracepath. + +config BR2_PACKAGE_IPUTILS_TRACEROUTE6 + bool "traceroute6" + default y + help + Installs traceroute6. + +config BR2_PACKAGE_IPUTILS_NINFOD + bool "ninfod" + default y + depends on BR2_TOOLCHAIN_HAS_THREADS # ninfod requires + help + Installs ninfod. + +comment "ninfod needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS + +endif diff --git a/package/iputils/iputils.hash b/package/iputils/iputils.hash new file mode 100644 index 00000000..3e30ca93 --- /dev/null +++ b/package/iputils/iputils.hash @@ -0,0 +1,6 @@ +# https://github.com/iputils/iputils/releases/download/20210202/sha256sum.asc +sha256 3f557ecfd2ace873801231d2c1f42de73ced9fbc1ef3a438d847688b5fb0e8ab iputils-20210202.tar.gz +# Locally computed +sha256 b8ea785d12fa6a44916601104dd746216957e93f13a26d3eb858b3b5a4ad66ab LICENSE +sha256 9acc4bc871a4742550158e3696dcb381953172ef808d04ca248184f9f6322712 Documentation/LICENSE.BSD3 +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 Documentation/LICENSE.GPL2 diff --git a/package/iputils/iputils.mk b/package/iputils/iputils.mk new file mode 100644 index 00000000..715779a6 --- /dev/null +++ b/package/iputils/iputils.mk @@ -0,0 +1,149 @@ +################################################################################ +# +# iputils +# +################################################################################ + +# The original upstream was forked to the github repository in 2014 to +# pull fixes from other distribution and centralize the changes after +# the upstream seemed to have gone dormant. The fork contains the +# latest changes including musl support, removing a libsysfs dependency +# and IPv6 updates. +# http://www.spinics.net/lists/netdev/msg279881.html + +IPUTILS_VERSION = 20210202 +IPUTILS_SITE = $(call github,iputils,iputils,$(IPUTILS_VERSION)) +IPUTILS_LICENSE = GPL-2.0+, BSD-3-Clause +IPUTILS_LICENSE_FILES = LICENSE Documentation/LICENSE.BSD3 Documentation/LICENSE.GPL2 +IPUTILS_CPE_ID_VENDOR = iputils_project +IPUTILS_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) + +# Selectively build binaries +IPUTILS_CONF_OPTS += \ + -DBUILD_CLOCKDIFF=$(if $(BR2_PACKAGE_IPUTILS_CLOCKDIFF),true,false) \ + -DBUILD_RARPD=$(if $(BR2_PACKAGE_IPUTILS_RARPD),true,false) \ + -DBUILD_RDISC=$(if $(BR2_PACKAGE_IPUTILS_RDISC),true,false) \ + -DBUILD_RDISC_SERVER=$(if $(BR2_PACKAGE_IPUTILS_RDISC_SERVER),true,false) \ + -DBUILD_TRACEPATH=$(if $(BR2_PACKAGE_IPUTILS_TRACEPATH),true,false) \ + -DBUILD_TRACEROUTE6=$(if $(BR2_PACKAGE_IPUTILS_TRACEROUTE6),true,false) \ + -DBUILD_NINFOD=$(if $(BR2_PACKAGE_IPUTILS_NINFOD),true,false) + +# Selectively select the appropriate SELinux refpolicy modules +IPUTILS_SELINUX_MODULES = \ + $(if $(BR2_PACKAGE_IPUTILS_ARPING),netutils) \ + $(if $(BR2_PACKAGE_IPUTILS_PING),netutils) \ + $(if $(BR2_PACKAGE_IPUTILS_TRACEPATH),netutils) \ + $(if $(BR2_PACKAGE_IPUTILS_TRACEROUTE6),netutils) \ + $(if $(BR2_PACKAGE_IPUTILS_RDISC),rdisc) \ + $(if $(BR2_PACKAGE_IPUTILS_TFTPD),tftp) + +# +# arping +# +ifeq ($(BR2_PACKAGE_IPUTILS_ARPING),y) +IPUTILS_CONF_OPTS += -DBUILD_ARPING=true + +# move some binaries to the same location as where Busybox installs +# the corresponding applets, so that we have a single version of the +# tools (from iputils) +define IPUTILS_MOVE_ARPING_BINARY + mv $(TARGET_DIR)/usr/bin/arping $(TARGET_DIR)/usr/sbin/arping +endef +IPUTILS_POST_INSTALL_TARGET_HOOKS += IPUTILS_MOVE_ARPING_BINARY + +else +IPUTILS_CONF_OPTS += -DBUILD_ARPING=false +endif + +# +# ping +# +ifeq ($(BR2_PACKAGE_IPUTILS_PING),y) +IPUTILS_CONF_OPTS += -DBUILD_PING=true + +# same reason to move the ping binary as for arping +ifeq ($(BR2_ROOTFS_MERGED_USR),) +define IPUTILS_MOVE_PING_BINARY + mv $(TARGET_DIR)/usr/bin/ping $(TARGET_DIR)/bin/ping +endef +IPUTILS_POST_INSTALL_TARGET_HOOKS += IPUTILS_MOVE_PING_BINARY +endif + +# upstream requires distros to create symlink +define IPUTILS_CREATE_PING6_SYMLINK + ln -sf ping $(TARGET_DIR)/bin/ping6 +endef +IPUTILS_POST_INSTALL_TARGET_HOOKS += IPUTILS_CREATE_PING6_SYMLINK + +else +IPUTILS_CONF_OPTS += -DBUILD_PING=false +endif + +# +# tftpd +# +ifeq ($(BR2_PACKAGE_IPUTILS_TFTPD),y) +IPUTILS_CONF_OPTS += -DBUILD_TFTPD=true + +else +IPUTILS_CONF_OPTS += -DBUILD_TFTPD=false +endif + +# Handle libraries +ifeq ($(BR2_PACKAGE_LIBCAP),y) +IPUTILS_CONF_OPTS += -DUSE_CAP=true +IPUTILS_DEPENDENCIES += libcap +else +IPUTILS_CONF_OPTS += -DUSE_CAP=false +endif + +ifeq ($(BR2_PACKAGE_LIBIDN2),y) +IPUTILS_CONF_OPTS += -DUSE_IDN=true +IPUTILS_DEPENDENCIES += libidn2 +else +IPUTILS_CONF_OPTS += -DUSE_IDN=false +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +IPUTILS_DEPENDENCIES += systemd +endif + +ifeq ($(BR2_SYSTEM_ENABLE_NLS),y) +IPUTILS_CONF_OPTS += -DUSE_GETTEXT=true +else +IPUTILS_CONF_OPTS += -DUSE_GETTEXT=false +endif + +# XSL Stylesheets for DocBook 5 not packaged for buildroot +IPUTILS_CONF_OPTS += -DBUILD_MANS=false -DBUILD_HTML_MANS=false + +# handle permissions ourselves +IPUTILS_CONF_OPTS += -DNO_SETCAP_OR_SUID=true +ifeq ($(BR2_ROOTFS_DEVICE_TABLE_SUPPORTS_EXTENDED_ATTRIBUTES),y) +define IPUTILS_PERMISSIONS + $(if $(BR2_PACKAGE_IPUTILS_ARPING),\ + /usr/sbin/arping f 755 0 0 - - - - -,) + $(if $(BR2_PACKAGE_IPUTILS_CLOCKDIFF),\ + /usr/bin/clockdiff f 755 0 0 - - - - - + |xattr cap_net_raw+p,) + $(if $(BR2_PACKAGE_IPUTILS_PING),\ + /bin/ping f 755 0 0 - - - - - + |xattr cap_net_raw+p,) + $(if $(BR2_PACKAGE_IPUTILS_TRACEROUTE6),\ + /usr/bin/traceroute6 f 755 0 0 - - - - - + |xattr cap_net_raw+p,) +endef +else +define IPUTILS_PERMISSIONS + $(if $(BR2_PACKAGE_IPUTILS_ARPING),\ + /usr/sbin/arping f 755 0 0 - - - - -,) + $(if $(BR2_PACKAGE_IPUTILS_CLOCKDIFF),\ + /usr/bin/clockdiff f 4755 0 0 - - - - -,) + $(if $(BR2_PACKAGE_IPUTILS_PING),\ + /bin/ping f 4755 0 0 - - - - -,) + $(if $(BR2_PACKAGE_IPUTILS_TRACEROUTE6),\ + /usr/bin/traceroute6 f 4755 0 0 - - - - -,) +endef +endif + +$(eval $(meson-package)) diff --git a/package/irda-utils/0001-daemon.patch b/package/irda-utils/0001-daemon.patch new file mode 100644 index 00000000..f6034a75 --- /dev/null +++ b/package/irda-utils/0001-daemon.patch @@ -0,0 +1,34 @@ +written by Mike Frysinger + +https://sourceforge.net/tracker/?func=detail&aid=3132053&group_id=5616&atid=305616 + +Rather than using the fork function (which doesnt work on nommu +systems), simply use the daemon() function instead (which does +work). this should work the same before and after for all systems. + +--- a/irattach/util.c ++++ b/irattach/util.c +@@ -156,21 +156,10 @@ + + void fork_now(int ttyfd) + { +- int ret; + int i; + +- if ((ret = fork()) > 0) +- exit(0); +- +- if (ret == -1) +- syslog(LOG_INFO, "forking: %m"); +- if (setsid() < 0) +- syslog(LOG_INFO, "detaching from tty: %m"); +- +- if ((ret = fork()) > 0) { +- /* cleanup_files = 0; */ +- exit(0); +- } ++ if (daemon(1, 1)) ++ syslog(LOG_INFO, "daemon: %m"); + + /* Close all open inherited files! Except for ttyfd! */ + for (i = 0; i < 64; i++) diff --git a/package/irda-utils/0002-nommu.patch b/package/irda-utils/0002-nommu.patch new file mode 100644 index 00000000..bc76bd39 --- /dev/null +++ b/package/irda-utils/0002-nommu.patch @@ -0,0 +1,24 @@ +written by Mike Frysinger + +https://sourceforge.net/tracker/?func=detail&aid=3132056&group_id=5616&atid=305616 + +nommu systems cannot fork() as the hardware cannot support +it. irattach uses it as a minor optimization, but it isnt +necessary for correct functioning of the utility. so add a +NO_FORK define so we nommu peeps can do CFLAGS="... -DNO_FORK=1 +..." and use it in our embedded systems. + +--- a/irattach/irattach.c ++++ b/irattach/irattach.c +@@ -397,7 +397,11 @@ + after_names[i]); + /* Create a new instance for this other + * interface */ ++#ifdef NO_FORK ++ pid = -1; ++#else + pid = fork(); ++#endif + /* If in the child */ + if(!pid) { + /* Get the interface name */ diff --git a/package/irda-utils/0003-subdir.patch b/package/irda-utils/0003-subdir.patch new file mode 100644 index 00000000..e9b5458a --- /dev/null +++ b/package/irda-utils/0003-subdir.patch @@ -0,0 +1,23 @@ +written by Mike Frysinger + +https://sourceforge.net/tracker/?func=detail&aid=3132051&group_id=5616&atid=305616 + +The top level makefile ignores build/install errors in subdirs which makes +packaging a pain to verify. + +--- a/Makefile ++++ b/Makefile +@@ -31,11 +31,11 @@ + CFLAGS= -O2 -W -Wall + + all: +- @-(set -e ; for d in $(DIRS) ; do $(MAKE) $(MAKE_OUTPUT) -C $$d $@ ; done) ++ @(set -e ; for d in $(DIRS) ; do $(MAKE) $(MAKE_OUTPUT) -C $$d $@ ; done) + + + install: +- @-(set -e ; for d in $(DIRS) ; do $(MAKE) $(MAKE_OUTPUT) -C $$d $@ ; done) ++ @(set -e ; for d in $(DIRS) ; do $(MAKE) $(MAKE_OUTPUT) -C $$d $@ ; done) + + + clean: diff --git a/package/irda-utils/0004-musl.patch b/package/irda-utils/0004-musl.patch new file mode 100644 index 00000000..6cf975b8 --- /dev/null +++ b/package/irda-utils/0004-musl.patch @@ -0,0 +1,31 @@ +Replace use of with . + +kernel headers already provides the +needed definitions, moreover not all libc implementations +provide if_packet.h e.g. musl + +Signed-off-by: Khem Raj +Upstream-Status: Pending +[From http://cgit.openembedded.org/openembedded-core/plain/meta/recipes-connectivity/irda-utils/irda-utils-0.9.18/musl.patch.] +Signed-off-by: Bernd Kuhls + +Index: irda-utils-0.9.18/irdaping/irdaping.c +=================================================================== +--- irda-utils-0.9.18.orig/irdaping/irdaping.c ++++ irda-utils-0.9.18/irdaping/irdaping.c +@@ -33,7 +33,6 @@ + #include + #include + #include /* For struct ifreq */ +-#include /* For struct sockaddr_pkt */ + #include /* For ARPHRD_IRDA */ + #include /* For ETH_P_ALL */ + #include /* For htons */ +@@ -46,6 +45,7 @@ + #include /* __cpu_to_le32 and co. */ + + #include /* For __u8 and co. */ ++#include /* For struct sockaddr_pkt */ + #include + + #ifndef AF_IRDA diff --git a/package/irda-utils/Config.in b/package/irda-utils/Config.in new file mode 100644 index 00000000..418ab618 --- /dev/null +++ b/package/irda-utils/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_IRDA_UTILS + bool "irda-utils" + help + user space utilities which control the IrDA stack + + http://irda.sourceforge.net/ + +if BR2_PACKAGE_IRDA_UTILS + +config BR2_PACKAGE_IRDA_UTILS_IRATTACH + bool "irattach" + +config BR2_PACKAGE_IRDA_UTILS_IRDAPING + bool "irdaping" + +config BR2_PACKAGE_IRDA_UTILS_IRNETD + bool "irnetd" + +endif diff --git a/package/irda-utils/irda-utils.hash b/package/irda-utils/irda-utils.hash new file mode 100644 index 00000000..8a513cf3 --- /dev/null +++ b/package/irda-utils/irda-utils.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 61980551e46b2eaa9e17ad31cbc1a638074611fc33bff34163d10c7a67a9fdc6 irda-utils-0.9.18.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 man/COPYING diff --git a/package/irda-utils/irda-utils.mk b/package/irda-utils/irda-utils.mk new file mode 100644 index 00000000..18a3e586 --- /dev/null +++ b/package/irda-utils/irda-utils.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# irda-utils +# +################################################################################ + +IRDA_UTILS_VERSION = 0.9.18 +IRDA_UTILS_SITE = http://downloads.sourceforge.net/project/irda/irda-utils/$(IRDA_UTILS_VERSION) +IRDA_UTILS_LICENSE = GPL-2.0+ +IRDA_UTILS_LICENSE_FILES = man/COPYING + +IRDA_UTILS_CFLAGS = $(TARGET_CFLAGS) -I. +ifeq ($(BR2_USE_MMU),) +IRDA_UTILS_CFLAGS += -DNO_FORK=1 +endif + +define IRDA_UTILS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) \ + CC="$(TARGET_CC)" \ + CFLAGS="$(IRDA_UTILS_CFLAGS)" \ + SYS_INCLUDES= \ + DIRS="irattach irdaping irnetd" \ + V=1 -C $(@D) +endef + +IRDA_UTILS_SBINS- = +IRDA_UTILS_SBINS-y = +IRDA_UTILS_SBINS-$(BR2_PACKAGE_IRDA_UTILS_IRATTACH) += irattach +IRDA_UTILS_SBINS-$(BR2_PACKAGE_IRDA_UTILS_IRDAPING) += irdaping +IRDA_UTILS_SBINS-$(BR2_PACKAGE_IRDA_UTILS_IRNETD) += irnetd +IRDA_UTILS_SBINS- += $(IRDA_UTILS_SBINS-y) + +define IRDA_UTILS_INSTALL_TARGET_CMDS + for i in $(IRDA_UTILS_SBINS-y); do \ + $(INSTALL) -m 0755 -D $(@D)/$$i/$$i $(TARGET_DIR)/usr/sbin/$$i || exit 1; \ + done +endef + +$(eval $(generic-package)) diff --git a/package/irqbalance/0001-fix-uint64_t-printf-format-use-PRIu64.patch b/package/irqbalance/0001-fix-uint64_t-printf-format-use-PRIu64.patch new file mode 100644 index 00000000..95a9616c --- /dev/null +++ b/package/irqbalance/0001-fix-uint64_t-printf-format-use-PRIu64.patch @@ -0,0 +1,105 @@ +From 0cdc7a22d5156440fecff14c438d4e24261ac793 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Sat, 20 Feb 2021 23:38:56 +0100 +Subject: [PATCH] fix uint64_t printf format (use PRIu64) + +Fixes (on arm 32-bit): + + $ irqbalance-ui + Invalid data sent. Unexpected token: (null)TYPE + +And strace showed the following: + + 237 sendmsg(3, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="stats", iov_len=5}], msg_iovlen=1, msg_control=[{cmsg_len=24, cmsg_level=SOL_SOCKET, cmsg_type=SCM_CREDENTIALS, cmsg_data={pid=237, uid=0, gid=0}}], msg_controllen=24, msg_flags=0}, 0) = 5 + 237 recv(3, "TYPE 3 NUMBER -1 LOAD 0 SAVE_MODE 0 (null)TYPE 2 NUMBER 0 LOAD 0 SAVE_MODE 0 (null)TYPE 1 NUMBER 0 LOAD 0 SAVE_MODE 0 (null)TYPE 0 NUMBER 3 LOAD 0 SAVE_MODE 0 (null)TYPE 1 NUMBER 1 LOAD 0 SAVE_MODE 0 (null)TYPE 0 NUMBER 1 LOAD 0 SAVE_MODE 0 (null)TYPE 1 NUMBER 2 LOAD 0 SAVE_MODE 0 (null)TYPE 0 NUMBER 2 LOAD 0 SAVE_MODE 0 (null)TYPE 1 NUMBER 3 LOAD 0 SAVE_MODE 0 (null)TYPE 0 NUMBER 0 LOAD 0 SAVE_MODE 0 (null)", 8192, 0) = 411 + +[backported from upstream] +Signed-off-by: Peter Seiderer +--- + cputree.c | 3 ++- + irqbalance.c | 5 +++-- + ui/ui.c | 5 +++-- + 3 files changed, 8 insertions(+), 5 deletions(-) + +diff --git a/cputree.c b/cputree.c +index fda0200..a8dba73 100644 +--- a/cputree.c ++++ b/cputree.c +@@ -33,6 +33,7 @@ + #include + #include + #include ++#include + + #include + +@@ -417,7 +418,7 @@ static void dump_irq(struct irq_info *info, void *data) + indent[i] = log_indent[0]; + + indent[i] = '\0'; +- log(TO_CONSOLE, LOG_INFO, "%sInterrupt %i node_num is %d (%s/%lu:%lu) \n", indent, ++ log(TO_CONSOLE, LOG_INFO, "%sInterrupt %i node_num is %d (%s/%" PRIu64 ":%" PRIu64 ") \n", indent, + info->irq, irq_numa_node(info)->number, classes[info->class], info->load, (info->irq_count - info->last_irq_count)); + free(indent); + } +diff --git a/irqbalance.c b/irqbalance.c +index 9baa955..458bb07 100644 +--- a/irqbalance.c ++++ b/irqbalance.c +@@ -34,6 +34,7 @@ + #include + #include + #include ++#include + #ifdef HAVE_GETOPT_LONG + #include + #endif +@@ -357,7 +358,7 @@ void get_irq_data(struct irq_info *irq, void *data) + *irqdata = newptr; + + sprintf(*irqdata + strlen(*irqdata), +- "IRQ %d LOAD %lu DIFF %lu CLASS %d ", irq->irq, irq->load, ++ "IRQ %d LOAD %" PRIu64 " DIFF %" PRIu64 " CLASS %d ", irq->irq, irq->load, + (irq->irq_count - irq->last_irq_count), irq->class); + } + +@@ -395,7 +396,7 @@ void get_object_stat(struct topo_obj *object, void *data) + + *stats = newptr; + +- sprintf(*stats + strlen(*stats), "TYPE %d NUMBER %d LOAD %lu SAVE_MODE %d %s", ++ sprintf(*stats + strlen(*stats), "TYPE %d NUMBER %d LOAD %" PRIu64 " SAVE_MODE %d %s", + object->obj_type, object->number, object->load, + object->powersave_mode, irq_data ? irq_data : ""); + free(irq_data); +diff --git a/ui/ui.c b/ui/ui.c +index 06ec472..4cf68bf 100644 +--- a/ui/ui.c ++++ b/ui/ui.c +@@ -1,4 +1,5 @@ + ++#include + #include + #include "ui.h" + +@@ -563,7 +564,7 @@ void settings() + + char info[128] = "Current sleep interval between rebalancing: \0"; + uint8_t sleep_input_offset = strlen(info) + 3; +- snprintf(info + strlen(info), 128 - strlen(info), "%lu\n", setup.sleep); ++ snprintf(info + strlen(info), 128 - strlen(info), "%" PRIu64 "\n", setup.sleep); + attrset(COLOR_PAIR(1)); + mvprintw(2, 3, info); + print_all_cpus(); +@@ -588,7 +589,7 @@ void settings() + if(new_sleep != setup.sleep) { + setup.sleep = new_sleep; + char settings_data[128]; +- snprintf(settings_data, 128, "%s %lu", SET_SLEEP, new_sleep); ++ snprintf(settings_data, 128, "%s %" PRIu64, SET_SLEEP, new_sleep); + send_settings(settings_data); + } + break; +-- +2.25.1 + diff --git a/package/irqbalance/0002-configure.ac-use-pkg-config-to-find-numa.patch b/package/irqbalance/0002-configure.ac-use-pkg-config-to-find-numa.patch new file mode 100644 index 00000000..751367cc --- /dev/null +++ b/package/irqbalance/0002-configure.ac-use-pkg-config-to-find-numa.patch @@ -0,0 +1,38 @@ +From 274cb8ea470a10ce46b783e77784b0eb08cf20d8 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 1 Aug 2021 23:26:01 +0200 +Subject: [PATCH] configure.ac: use pkg-config to find numa + +Use pkg-config to find numa and fallback to current mechanism. +Thanks to pkg-config, numa dependencies such as -latomic will be +retrieved. + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/Irqbalance/irqbalance/pull/188] +--- + configure.ac | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index c45b9ce..50c62ba 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -23,7 +23,14 @@ AC_CHECK_HEADERS([numa.h]) + + AC_CHECK_FUNCS(getopt_long) + +-AC_CHECK_LIB(numa, numa_available) ++PKG_CHECK_MODULES([NUMA], [numa], [has_numa=yes], [AC_CHECK_LIB(numa, numa_available)]) ++AS_IF([test "x$has_numa" = "xyes"], [ ++ AC_SUBST([NUMA_CFLAGS]) ++ AC_SUBST([NUMA_LIBS]) ++ LIBS="$LIBS $NUMA_LIBS" ++ AC_SUBST([LIBS]) ++]) ++ + AC_CHECK_LIB(m, floor) + + PKG_CHECK_MODULES([GLIB2], [glib-2.0], [], [AC_MSG_ERROR([glib-2.0 is required])]) +-- +2.30.2 + diff --git a/package/irqbalance/Config.in b/package/irqbalance/Config.in new file mode 100644 index 00000000..02d146f4 --- /dev/null +++ b/package/irqbalance/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_IRQBALANCE + bool "irqbalance" + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + select BR2_PACKAGE_LIBGLIB2 + help + Irqbalance is a daemon to help balance the cpu load generated + by interrupts across all of a systems cpus. + Irqbalance identifies the highest volume interrupt sources, + and isolates them to a single unique cpu, so that load is + spread as much as possible over an entire processor set, while + minimizing cache hit rates for irq handlers. + + https://github.com/Irqbalance/irqbalance + +comment "irqbalance needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/irqbalance/S13irqbalance b/package/irqbalance/S13irqbalance new file mode 100644 index 00000000..f6ed9291 --- /dev/null +++ b/package/irqbalance/S13irqbalance @@ -0,0 +1,36 @@ +#!/bin/sh +# +# Starts irqbalance +# + +EXEC="/usr/sbin/irqbalance" +ARGS="" +PID="/var/run/irqbalance.pid" + +case "$1" in + start) + printf "Starting irqbalance: " + # for irqbalance socket /run/irqbalance/irqbalance.sock + mkdir -p /run/irqbalance + start-stop-daemon -S -q -x $EXEC -- $ARGS + if [ $? != 0 ]; then + echo "FAILED" + exit 1 + else + echo "OK" + fi + pidof irqbalance > $PID + ;; + stop) + printf "Stopping irqbalance: " + start-stop-daemon -K -q -p $PID + echo "OK" + ;; + restart|reload) + $0 stop + $0 start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac diff --git a/package/irqbalance/irqbalance.hash b/package/irqbalance/irqbalance.hash new file mode 100644 index 00000000..587173ca --- /dev/null +++ b/package/irqbalance/irqbalance.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 28f2ad35945b93d90f4a5bad95b4c0871a0f644375f746ec16f61045b9ec970e irqbalance-1.7.0.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/irqbalance/irqbalance.mk b/package/irqbalance/irqbalance.mk new file mode 100644 index 00000000..b099f7c6 --- /dev/null +++ b/package/irqbalance/irqbalance.mk @@ -0,0 +1,53 @@ +################################################################################ +# +# irqbalance +# +################################################################################ + +IRQBALANCE_VERSION = 1.7.0 +IRQBALANCE_SITE = $(call github,irqbalance,irqbalance,v$(IRQBALANCE_VERSION)) +IRQBALANCE_LICENSE = GPL-2.0 +IRQBALANCE_LICENSE_FILES = COPYING +IRQBALANCE_DEPENDENCIES = host-pkgconf libglib2 +# Autoreconf needed because package is distributed without a configure script +IRQBALANCE_AUTORECONF = YES + +ifeq ($(BR2_PACKAGE_LIBCAP_NG),y) +IRQBALANCE_DEPENDENCIES += libcap-ng +IRQBALANCE_CONF_OPTS += --with-libcap-ng +else +IRQBALANCE_CONF_OPTS += --without-libcap-ng +endif + +ifeq ($(BR2_PACKAGE_NCURSES_WCHAR),y) +IRQBALANCE_DEPENDENCIES += ncurses +IRQBALANCE_CONF_OPTS += --with-irqbalance-ui +else +IRQBALANCE_CONF_OPTS += --without-irqbalance-ui +endif + +ifeq ($(BR2_PACKAGE_NUMACTL),y) +IRQBALANCE_DEPENDENCIES += numactl +IRQBALANCE_CONF_OPTS += --enable-numa +else +IRQBALANCE_CONF_OPTS += --disable-numa +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +IRQBALANCE_DEPENDENCIES += systemd +IRQBALANCE_CONF_OPTS += --with-systemd +else +IRQBALANCE_CONF_OPTS += --without-systemd +endif + +define IRQBALANCE_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 package/irqbalance/S13irqbalance \ + $(TARGET_DIR)/etc/init.d/S13irqbalance +endef + +define IRQBALANCE_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/irqbalance/irqbalance.service \ + $(TARGET_DIR)/usr/lib/systemd/system/irqbalance.service +endef + +$(eval $(autotools-package)) diff --git a/package/irqbalance/irqbalance.service b/package/irqbalance/irqbalance.service new file mode 100644 index 00000000..39574877 --- /dev/null +++ b/package/irqbalance/irqbalance.service @@ -0,0 +1,10 @@ +[Unit] +Description=irqbalance daemon +After=syslog.target + +[Service] +RuntimeDirectory=irqbalance +ExecStart=/usr/sbin/irqbalance --foreground + +[Install] +WantedBy=multi-user.target diff --git a/package/irrlicht/0001-override-CPPFLAGS-CXXFLAGS-and-CFLAGS-in-Makefile.patch b/package/irrlicht/0001-override-CPPFLAGS-CXXFLAGS-and-CFLAGS-in-Makefile.patch new file mode 100644 index 00000000..d6e4b63f --- /dev/null +++ b/package/irrlicht/0001-override-CPPFLAGS-CXXFLAGS-and-CFLAGS-in-Makefile.patch @@ -0,0 +1,44 @@ +From 5c5e6d0f469c8b4384bbe5d6c8f78069c182daf0 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sun, 9 Apr 2017 19:56:55 +0200 +Subject: [PATCH] override CPPFLAGS, CXXFLAGS and CFLAGS in Makefile + +When CPPFLAGS is passed on the command line, include paths for the +bundled libraries are lost. Since the hand written Makefile want +to use them unconditionally, we need to use the key word "override" +before CPPFLAGS. + +Do the same for CXXFLAGS and CFLAGS otherwise -fPIC is lost. + +Signed-off-by: Romain Naour +--- + source/Irrlicht/Makefile | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/source/Irrlicht/Makefile b/source/Irrlicht/Makefile +index 0712b07..b334e9c 100644 +--- a/source/Irrlicht/Makefile ++++ b/source/Irrlicht/Makefile +@@ -62,7 +62,7 @@ LINKOBJ = $(IRRMESHOBJ) $(IRROBJ) $(IRRPARTICLEOBJ) $(IRRANIMOBJ) \ + ############### + #Compiler flags + CXXINCS = -I../../include -Izlib -Ijpeglib -Ilibpng +-CPPFLAGS += $(CXXINCS) -DIRRLICHT_EXPORTS=1 ++override CPPFLAGS += $(CXXINCS) -DIRRLICHT_EXPORTS=1 + CXXFLAGS += -Wall -pipe -fno-exceptions -fno-rtti -fstrict-aliasing + ifndef NDEBUG + CXXFLAGS += -g -D_DEBUG +@@ -74,8 +74,8 @@ CXXFLAGS += -pg + endif + CFLAGS := -O3 -fexpensive-optimizations -DPNG_THREAD_UNSAFE_OK -DPNG_NO_MMX_CODE -DPNG_NO_MNG_FEATURES + +-sharedlib sharedlib_osx: CXXFLAGS += -fPIC +-sharedlib sharedlib_osx: CFLAGS += -fPIC ++sharedlib sharedlib_osx: override CXXFLAGS += -fPIC ++sharedlib sharedlib_osx: override CFLAGS += -fPIC + + #multilib handling + ifeq ($(HOSTTYPE), x86_64) +-- +2.9.3 + diff --git a/package/irrlicht/0002-remove-sys-sysctl.h.patch b/package/irrlicht/0002-remove-sys-sysctl.h.patch new file mode 100644 index 00000000..d9142a9a --- /dev/null +++ b/package/irrlicht/0002-remove-sys-sysctl.h.patch @@ -0,0 +1,38 @@ +From 5382142d37730f6758753b758c91e257ffd5892c Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sun, 9 Apr 2017 22:20:19 +0200 +Subject: [PATCH] remove sys/sysctl.h + +With musl irrlicht doesn't build due to missing sys/sysctl.h + +fatal error: sys/sysctl.h: No such file or directory + +From [1] +"sysctl does not work, and NEVER worked. using it is bogus. +it was a bogus experimental syscall that was deprecated before +it was ever used (basically, a broken binary version of +/proc/sys, without any stability between kernel versions for +what the binary constants meant)." + +[1] https://devsonacid.wordpress.com/tag/musl/ + +Signed-off-by: Romain Naour +--- + source/Irrlicht/COSOperator.cpp | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/source/Irrlicht/COSOperator.cpp b/source/Irrlicht/COSOperator.cpp +index 0899d1d..ccf5ef5 100644 +--- a/source/Irrlicht/COSOperator.cpp ++++ b/source/Irrlicht/COSOperator.cpp +@@ -13,7 +13,6 @@ + #include + #ifndef _IRR_SOLARIS_PLATFORM_ + #include +-#include + #endif + #endif + +-- +2.9.3 + diff --git a/package/irrlicht/0003-makefile-override-LDFLAGS-and-remove-obsolete-X11R6-.patch b/package/irrlicht/0003-makefile-override-LDFLAGS-and-remove-obsolete-X11R6-.patch new file mode 100644 index 00000000..51b98a4e --- /dev/null +++ b/package/irrlicht/0003-makefile-override-LDFLAGS-and-remove-obsolete-X11R6-.patch @@ -0,0 +1,36 @@ +From 0ecb59c4dc575bb902c1955d8762f91ff79290a4 Mon Sep 17 00:00:00 2001 +From: Bartosz Bilas +Date: Tue, 23 Jun 2020 19:36:27 +0200 +Subject: [PATCH] makefile: override LDFLAGS and remove obsolete X11R6 + lib/include directories + +Add "override" keyword to LDFLAGS variable in order to link libraries +using buildroot cross-compiler correctly and remove those non-supported +paths to lib/includes that are not used and not available in buildroot +and in addition point to the host system libraries in a result +cause the following warning: + +/home/bartekk/buildroot/output/host/opt/ext-toolchain/bin/../lib/gcc/arm-buildroot-linux-gnueabihf/9.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: warning: library search path "/usr/X11R6/lib" is unsafe for cross-compilation + +Signed-off-by: Bartosz Bilas +--- + source/Irrlicht/Makefile | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/source/Irrlicht/Makefile b/source/Irrlicht/Makefile +index 1a8277e..b323237 100644 +--- a/source/Irrlicht/Makefile ++++ b/source/Irrlicht/Makefile +@@ -88,8 +88,7 @@ STATIC_LIB = libIrrlicht.a + LIB_PATH = ../../lib/$(SYSTEM) + INSTALL_DIR = /usr/local/lib + sharedlib install: SHARED_LIB = libIrrlicht.so +-sharedlib: LDFLAGS += -L/usr/X11R6/lib$(LIBSELECT) -lGL -lXxf86vm +-staticlib sharedlib: CXXINCS += -I/usr/X11R6/include ++sharedlib: override LDFLAGS += -lGL -lXxf86vm + + #OSX specific options + staticlib_osx sharedlib_osx install_osx: SYSTEM = MacOSX +-- +2.27.0 + diff --git a/package/irrlicht/Config.in b/package/irrlicht/Config.in new file mode 100644 index 00000000..edd182be --- /dev/null +++ b/package/irrlicht/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_IRRLICHT + bool "irrlicht" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_XORG7 + depends on BR2_PACKAGE_HAS_LIBGL # use GLX + select BR2_PACKAGE_XLIB_LIBXXF86VM # libXxf86vm + help + An open source high performance realtime 3D graphics engine. + + http://irrlicht.sourceforge.net/ + +comment "irrlicht needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + +comment "irrlicht needs X11 and an OpenGL provider" + depends on !BR2_PACKAGE_HAS_LIBGL || !BR2_PACKAGE_XORG7 + depends on BR2_INSTALL_LIBSTDCPP diff --git a/package/irrlicht/irrlicht.hash b/package/irrlicht/irrlicht.hash new file mode 100644 index 00000000..1f5631f2 --- /dev/null +++ b/package/irrlicht/irrlicht.hash @@ -0,0 +1,10 @@ +# From https://sourceforge.net/projects/irrlicht/files/Irrlicht%20SDK/1.8/1.8.4 +md5 9401cfff801395010b0912211f3cbb4f irrlicht-1.8.4.zip +sha1 38bf0223fe868d243d6a39d0dc191c8df6e03b3b irrlicht-1.8.4.zip +# Locally calculated +sha256 f42b280bc608e545b820206fe2a999c55f290de5c7509a02bdbeeccc1bf9e433 irrlicht-1.8.4.zip +sha256 cc86e0b830f9d48933feb198f2741a7d9bb7c34fe8a35302d8ce36b8e2ecb27b doc/aesGladman.txt +sha256 e8a6b63336018eec09ac3a7cdfe5a80bda635641bc0397a77b8baa25bed03800 doc/bzip2-license.txt +sha256 ca38f1ba4ab901111f6eee50009bd46dbd866e6beb98d592d843f7c162d73409 doc/irrlicht-license.txt +sha256 67f098c29401646a0f52da432efc3bab0433c13f17effc3314e9fa523da51b75 doc/jpglib-license.txt +sha256 e0f86c3e4acd285618faa55735ceedce46084a3cfb06b8f31d0d092bb68ae151 doc/libpng-license.txt diff --git a/package/irrlicht/irrlicht.mk b/package/irrlicht/irrlicht.mk new file mode 100644 index 00000000..bd82815c --- /dev/null +++ b/package/irrlicht/irrlicht.mk @@ -0,0 +1,65 @@ +################################################################################ +# +# irrlicht +# +################################################################################ + +IRRLICHT_VERSION_MAJOR = 1.8 +IRRLICHT_VERSION = $(IRRLICHT_VERSION_MAJOR).4 +IRRLICHT_SOURCE = irrlicht-$(IRRLICHT_VERSION).zip +IRRLICHT_SITE = https://downloads.sourceforge.net/project/irrlicht/Irrlicht%20SDK/$(IRRLICHT_VERSION_MAJOR)/$(IRRLICHT_VERSION) +IRRLICHT_INSTALL_STAGING = YES + +# Bundled libraries: bzip2, libaesGladman, libpng, lzma, zlib, +# The handcrafted Makefile can only use bundled libraries. +IRRLICHT_LICENSE = Zlib (irrlicht), BSD-3-Clause (libaesGladman), bzip2-1.0.5 (bzip2), IJG (libjpeg), Libpng (libpng) +IRRLICHT_LICENSE_FILES = \ + doc/aesGladman.txt \ + doc/bzip2-license.txt \ + doc/irrlicht-license.txt \ + doc/jpglib-license.txt \ + doc/libpng-license.txt + +IRRLICHT_SUBDIR = source/Irrlicht + +IRRLICHT_DEPENDENCIES = libgl xlib_libXxf86vm + +define IRRLICHT_EXTRACT_CMDS + $(UNZIP) -d $(@D) $(IRRLICHT_DL_DIR)/$(IRRLICHT_SOURCE) + mv $(@D)/irrlicht-$(IRRLICHT_VERSION)/* $(@D) + $(RM) -r $(@D)/irrlicht-$(IRRLICHT_VERSION) +endef + +IRRLICHT_CONF_OPTS = $(TARGET_CONFIGURE_OPTS) + +# Build a static library OR a shared library, otherwise we need to compile with -fPIC +# "relocation R_X86_64_32S can not be used when making a shared object; recompile with -fPIC" +ifeq ($(BR2_STATIC_LIBS),) +IRRLICHT_CONF_OPTS += sharedlib +endif + +# Irrlicht fail to detect properly the NEON support on aarch64 or ARM with NEON FPU support. +# While linking an application with libIrrlicht.so, we get an undefined reference to +# png_init_filter_functions_neon. +# Some files are missing in the libpng bundled in Irrlicht, in particular arm/arm_init.c, +# so disable NEON support completely. +IRRLICHT_CONF_OPTS += CPPFLAGS="$(TARGET_CPPFLAGS) -DPNG_ARM_NEON_OPT=0" + +define IRRLICHT_BUILD_CMDS + $(TARGET_MAKE_ENV) + $(MAKE) -C $(@D)/$(IRRLICHT_SUBDIR) $(IRRLICHT_CONF_OPTS) +endef + +define IRRLICHT_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) \ + INSTALL_DIR=$(STAGING_DIR)/usr/lib \ + -C $(@D)/$(IRRLICHT_SUBDIR) install +endef + +define IRRLICHT_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) \ + INSTALL_DIR=$(TARGET_DIR)/usr/lib \ + -C $(@D)/$(IRRLICHT_SUBDIR) install +endef + +$(eval $(generic-package)) diff --git a/package/irssi/Config.in b/package/irssi/Config.in new file mode 100644 index 00000000..6361cff3 --- /dev/null +++ b/package/irssi/Config.in @@ -0,0 +1,31 @@ +config BR2_PACKAGE_IRSSI + bool "irssi" + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_OPENSSL + help + Irssi is a terminal based IRC client for UNIX systems. + + http://irssi.org/ + +if BR2_PACKAGE_IRSSI + +config BR2_PACKAGE_IRSSI_PROXY + bool "proxy module" + help + Build the irssi proxy module, which allows an IRC connection + to be shared among multiple clients. + +config BR2_PACKAGE_IRSSI_TRUE_COLOR + bool "true color support" + help + Build with true color support in terminal. + +endif + +comment "irssi needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/irssi/irssi.hash b/package/irssi/irssi.hash new file mode 100644 index 00000000..6a91e164 --- /dev/null +++ b/package/irssi/irssi.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 414fdee2ffaeb90a55f141b7fb3899608631dc891e2bc1f5e91ca31f1a621101 irssi-1.0.8.tar.xz +# Locally calculated +sha256 a1a27cb2ecee8d5378fbb3562f577104a445d6d66fee89286e16758305e63e2b COPYING diff --git a/package/irssi/irssi.mk b/package/irssi/irssi.mk new file mode 100644 index 00000000..c64690c5 --- /dev/null +++ b/package/irssi/irssi.mk @@ -0,0 +1,46 @@ +################################################################################ +# +# irssi +# +################################################################################ + +IRSSI_VERSION = 1.0.8 +IRSSI_SOURCE = irssi-$(IRSSI_VERSION).tar.xz +# Do not use the github helper here. The generated tarball is *NOT* the +# same as the one uploaded by upstream for the release. +IRSSI_SITE = https://github.com/irssi/irssi/releases/download/$(IRSSI_VERSION) +IRSSI_LICENSE = GPL-2.0+ +IRSSI_LICENSE_FILES = COPYING +IRSSI_CPE_ID_VENDOR = irssi +IRSSI_DEPENDENCIES = host-pkgconf libglib2 ncurses openssl + +IRSSI_CONF_OPTS = \ + --disable-glibtest \ + --without-perl + +ifeq ($(BR2_PACKAGE_IRSSI_PROXY),y) +IRSSI_CONF_OPTS += --with-proxy +# If shared libs are disabled, 'proxy' has to go in the list of built-in +# modules. +ifeq ($(BR2_STATIC_LIBS),y) +IRSSI_CONF_OPTS += --with-modules=proxy +endif +else +IRSSI_CONF_OPTS += --without-proxy +endif # proxy + +ifeq ($(BR2_PACKAGE_IRSSI_TRUE_COLOR),y) +IRSSI_CONF_OPTS += --enable-true-color +else +IRSSI_CONF_OPTS += --disable-true-color +endif + +# Cross-compiling irssi with the perl interpreter enabled doesn't work +# yet. So, remove scripts as they are useless in that case. +define IRSSI_REMOVE_SCRIPTS + rm -rf $(TARGET_DIR)/usr/share/irssi/scripts/ +endef + +IRSSI_POST_INSTALL_TARGET_HOOKS += IRSSI_REMOVE_SCRIPTS + +$(eval $(autotools-package)) diff --git a/package/isl/isl.hash b/package/isl/isl.hash new file mode 100644 index 00000000..40d04dca --- /dev/null +++ b/package/isl/isl.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 6c8bc56c477affecba9c59e2c9f026967ac8bad01b51bdd07916db40a517b9fa isl-0.22.tar.xz +sha256 3a2c398103f6bca0f50a9a9465deca9230b370b0212af5fdf31ed88a36215c30 LICENSE diff --git a/package/isl/isl.mk b/package/isl/isl.mk new file mode 100644 index 00000000..a1a597d0 --- /dev/null +++ b/package/isl/isl.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# isl +# +################################################################################ + +ISL_VERSION = 0.22 +ISL_SOURCE = isl-$(ISL_VERSION).tar.xz +ISL_SITE = http://isl.gforge.inria.fr +ISL_LICENSE = MIT +ISL_LICENSE_FILES = LICENSE +HOST_ISL_DEPENDENCIES = host-gmp + +$(eval $(host-autotools-package)) diff --git a/package/iucode-tool/Config.in b/package/iucode-tool/Config.in new file mode 100644 index 00000000..f9f2521a --- /dev/null +++ b/package/iucode-tool/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_IUCODE_TOOL + bool "iucode-tool" + depends on BR2_x86_64 || BR2_i386 + select BR2_PACKAGE_INTEL_MICROCODE + select BR2_PACKAGE_INTEL_MICROCODE_INSTALL_TARGET + select BR2_PACKAGE_ARGP_STANDALONE \ + if BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_MUSL + help + Intel processor microcode tool + + https://gitlab.com/iucode-tool diff --git a/package/iucode-tool/S00iucode-tool b/package/iucode-tool/S00iucode-tool new file mode 100644 index 00000000..393c903b --- /dev/null +++ b/package/iucode-tool/S00iucode-tool @@ -0,0 +1,28 @@ +#!/bin/sh +# +# Upload microcode into the processor. +# + +MICROCODE_DIR="/lib/firmware/intel-ucode" + +start() { + printf 'Starting iucode-tool: ' + /usr/sbin/iucode_tool -q -k "$MICROCODE_DIR" + status="$?" + if [ "$status" = 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +case "$1" in + start) + start;; + stop|restart|reload) + ;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/iucode-tool/iucode-tool.hash b/package/iucode-tool/iucode-tool.hash new file mode 100644 index 00000000..6d8fb635 --- /dev/null +++ b/package/iucode-tool/iucode-tool.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 12b88efa4d0d95af08db05a50b3dcb217c0eb2bfc67b483779e33d498ddb2f95 iucode-tool_2.3.1.tar.xz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/iucode-tool/iucode-tool.mk b/package/iucode-tool/iucode-tool.mk new file mode 100644 index 00000000..568692c4 --- /dev/null +++ b/package/iucode-tool/iucode-tool.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# iucode-tool +# +################################################################################ + +IUCODE_TOOL_VERSION = 2.3.1 +IUCODE_TOOL_SOURCE = iucode-tool_$(IUCODE_TOOL_VERSION).tar.xz +IUCODE_TOOL_SITE = https://gitlab.com/iucode-tool/releases/raw/master +ifeq ($(BR2_PACKAGE_ARGP_STANDALONE),y) +IUCODE_TOOL_DEPENDENCIES = argp-standalone +endif +IUCODE_TOOL_LICENSE = GPL-2.0+ +IUCODE_TOOL_LICENSE_FILES = COPYING +IUCODE_TOOL_CPE_ID_VENDOR = iucode-tool_project + +define IUCODE_TOOL_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/iucode-tool/S00iucode-tool \ + $(TARGET_DIR)/etc/init.d/S00iucode-tool +endef + +define IUCODE_TOOL_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/iucode-tool/iucode.service \ + $(TARGET_DIR)/usr/lib/systemd/system/iucode.service +endef + +$(eval $(autotools-package)) diff --git a/package/iucode-tool/iucode.service b/package/iucode-tool/iucode.service new file mode 100644 index 00000000..d99acc6a --- /dev/null +++ b/package/iucode-tool/iucode.service @@ -0,0 +1,10 @@ +[Unit] +Description=Upload microcode into the processor + +[Service] +Type=oneshot +ExecStart=/usr/sbin/iucode_tool -k /usr/share/misc/intel-microcode.dat +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target diff --git a/package/iw/Config.in b/package/iw/Config.in new file mode 100644 index 00000000..8a74e3b2 --- /dev/null +++ b/package/iw/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_IW + bool "iw" + depends on BR2_TOOLCHAIN_HAS_THREADS # libnl + select BR2_PACKAGE_LIBNL + help + Utility for wireless devices using the mac80211 kernel stack + + https://wireless.wiki.kernel.org/en/users/documentation/iw + +comment "iw needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/iw/iw.hash b/package/iw/iw.hash new file mode 100644 index 00000000..126b1cb6 --- /dev/null +++ b/package/iw/iw.hash @@ -0,0 +1,4 @@ +# From https://www.kernel.org/pub/software/network/iw/sha256sums.asc +sha256 293a07109aeb7e36267cf59e3ce52857e9ffae3a6666eb8ac77894b1839fe1f2 iw-5.9.tar.xz +# Locally calculated +sha256 5932fb70481e128940168a5fdf133e6454293c0865c7e757874b235cb6daa2af COPYING diff --git a/package/iw/iw.mk b/package/iw/iw.mk new file mode 100644 index 00000000..32ecf93c --- /dev/null +++ b/package/iw/iw.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# iw +# +################################################################################ + +IW_VERSION = 5.9 +IW_SOURCE = iw-$(IW_VERSION).tar.xz +IW_SITE = $(BR2_KERNEL_MIRROR)/software/network/iw +IW_LICENSE = ISC +IW_LICENSE_FILES = COPYING +IW_CPE_ID_VENDOR = kernel +IW_DEPENDENCIES = host-pkgconf libnl +IW_MAKE_ENV = \ + $(TARGET_MAKE_ENV) \ + PKG_CONFIG="$(HOST_DIR)/bin/pkg-config" + +define IW_BUILD_CMDS + $(IW_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) +endef + +define IW_INSTALL_TARGET_CMDS + $(IW_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/iwd/0001-configure.ac-fix-static-build-with-readline.patch b/package/iwd/0001-configure.ac-fix-static-build-with-readline.patch new file mode 100644 index 00000000..37dbdb18 --- /dev/null +++ b/package/iwd/0001-configure.ac-fix-static-build-with-readline.patch @@ -0,0 +1,61 @@ +From 358e0755c3a434d7a815519b8c10ae5d347caad0 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Wed, 16 Dec 2020 07:51:04 +0100 +Subject: [PATCH] configure.ac: fix static build with readline + +Retrieve the dependencies of readline through pkg-config (and fallback +to -lreadline) to avoid the following build failure: + +/nvme/rc-buildroot-test/scripts/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-uclibc/8.3.0/../../../../x86_64-buildroot-linux-uclibc/bin/ld: /nvme/rc-buildroot-test/scripts/instance-0/output-1/host/bin/../x86_64-buildroot-linux-uclibc/sysroot/usr/lib/libreadline.a(display.o): in function `cr': +display.c:(.text+0x1ab): undefined reference to `tputs' + +Fixes: + - http://autobuild.buildroot.org/results/8fb1341f2f5094c346456b43b4fc04996c2e1485 + +Signed-off-by: Fabrice Fontaine +[Upstream status: +https://lists.01.org/hyperkitty/list/iwd@lists.01.org/thread/NFI4P52Y65T6XX7S7DGIVDMZISNQWUUC/] +--- + Makefile.am | 4 ++-- + configure.ac | 3 +++ + 2 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 3cd7eaa6..493d06cc 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -288,7 +288,7 @@ client_iwctl_SOURCES = client/main.c \ + client/network.h client/network.c \ + client/properties.h client/properties.c \ + client/wsc.c client/station.c +-client_iwctl_LDADD = $(ell_ldadd) -lreadline ++client_iwctl_LDADD = $(ell_ldadd) $(READLINE_LIBS) + + if MANUAL_PAGES + man_MANS += client/iwctl.1 +@@ -504,7 +504,7 @@ unit_test_client_SOURCES = unit/test-client.c \ + client/display.h client/display.c \ + client/network.h client/network.c \ + client/properties.h client/properties.c +-unit_test_client_LDADD = $(ell_ldadd) -lreadline ++unit_test_client_LDADD = $(ell_ldadd) $(READLINE_LIBS) + endif + + unit_test_sae_SOURCES = unit/test-sae.c \ +diff --git a/configure.ac b/configure.ac +index 7bd917a4..52f27ed9 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -154,6 +154,9 @@ AC_ARG_ENABLE([client], AC_HELP_STRING([--disable-client], + if (test "${enable_client}" != "no"); then + AC_CHECK_HEADERS(readline/readline.h, enable_readline=yes, + AC_MSG_ERROR(readline header files are required)) ++ PKG_CHECK_MODULES(READLINE, readline, dummy=yes, READLINE_LIBS=-lreadline) ++ AC_SUBST(READLINE_CFLAGS) ++ AC_SUBST(READLINE_LIBS) + fi + AM_CONDITIONAL(CLIENT, test "${enable_client}" != "no") + +-- +2.29.2 + diff --git a/package/iwd/Config.in b/package/iwd/Config.in new file mode 100644 index 00000000..59d44223 --- /dev/null +++ b/package/iwd/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_IWD + bool "iwd" + depends on BR2_USE_MMU # dbus + depends on BR2_TOOLCHAIN_HAS_THREADS # dbus + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # ell + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12 # ell + depends on BR2_USE_WCHAR # ell + select BR2_PACKAGE_DBUS # runtime + select BR2_PACKAGE_ELL + select BR2_PACKAGE_OPENRESOLV if !BR2_PACKAGE_SYSTEMD_RESOLVED + help + iNet Wireless daemon (iwd) + + https://iwd.wiki.kernel.org/ + +comment "iwd needs a toolchain w/ threads, wchar, headers >= 4.12" + depends on BR2_USE_MMU # dbus + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # ell + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12 diff --git a/package/iwd/S40iwd b/package/iwd/S40iwd new file mode 100644 index 00000000..6714ca99 --- /dev/null +++ b/package/iwd/S40iwd @@ -0,0 +1,42 @@ +#!/bin/sh + +DAEMON="/usr/libexec/iwd" +PIDFILE="/var/run/iwd.pid" + +IWD_ARGS="" + +[ -r "/etc/default/iwd" ] && . "/etc/default/iwd" + +start() { + printf "Starting iwd:" + mkdir -p /tmp/iwd/hotspot + start-stop-daemon -b -m -S -q -p "$PIDFILE" -x "$DAEMON" \ + -- $IWD_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf "Stopping iwd:" + start-stop-daemon -K -q -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +case "$1" in + start|stop) + "$1";; + *) + echo "Usage: $0 {start|stop}" + exit 1 +esac diff --git a/package/iwd/iwd.hash b/package/iwd/iwd.hash new file mode 100644 index 00000000..f1ee23dc --- /dev/null +++ b/package/iwd/iwd.hash @@ -0,0 +1,5 @@ +# Locally computed +sha256 c3ea43eccf27bb92d4e4482ff407cdabd2d1a1e4647d646241de87f2774e9a20 iwd-1.10-br1.tar.gz + +# License files +sha256 ec60b993835e2c6b79e6d9226345f4e614e686eb57dc13b6420c15a33a8996e5 COPYING diff --git a/package/iwd/iwd.mk b/package/iwd/iwd.mk new file mode 100644 index 00000000..652beb83 --- /dev/null +++ b/package/iwd/iwd.mk @@ -0,0 +1,72 @@ +################################################################################ +# +# iwd +# +################################################################################ + +IWD_VERSION = 1.10 +IWD_SITE = https://git.kernel.org/pub/scm/network/wireless/iwd.git +IWD_SITE_METHOD = git +IWD_LICENSE = LGPL-2.1+ +IWD_LICENSE_FILES = COPYING +IWD_CPE_ID_VENDOR = intel +IWD_CPE_ID_PRODUCT = inet_wireless_daemon +# sources from git, no configure script provided +IWD_AUTORECONF = YES +IWD_SELINUX_MODULES = networkmanager + +IWD_CONF_OPTS = \ + --disable-manual-pages \ + --enable-external-ell +IWD_DEPENDENCIES = ell + +# autoreconf requires an existing build-aux directory +define IWD_MKDIR_BUILD_AUX + mkdir -p $(@D)/build-aux +endef +IWD_POST_PATCH_HOOKS += IWD_MKDIR_BUILD_AUX + +ifeq ($(BR2_PACKAGE_DBUS),y) +IWD_CONF_OPTS += --enable-dbus-policy --with-dbus-datadir=/usr/share +IWD_DEPENDENCIES += dbus +else +IWD_CONF_OPTS += --disable-dbus-policy +endif + +ifeq ($(BR2_PACKAGE_READLINE),y) +# iwd client depends on readline (GPL-3.0+) +IWD_LICENSE += , GPL-3.0+ (client) +IWD_CONF_OPTS += --enable-client +IWD_DEPENDENCIES += readline +else +IWD_CONF_OPTS += --disable-client +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +IWD_CONF_OPTS += --enable-systemd-service +IWD_DEPENDENCIES += systemd +else +IWD_CONF_OPTS += --disable-systemd-service +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD_RESOLVED),y) +IWD_RESOLV_SERVICE = systemd +else +IWD_RESOLV_SERVICE = resolvconf +endif + +define IWD_INSTALL_CONFIG_FILE + $(INSTALL) -D -m 644 package/iwd/main.conf $(TARGET_DIR)/etc/iwd/main.conf + $(SED) 's,__RESOLV_SERVICE__,$(IWD_RESOLV_SERVICE),' $(TARGET_DIR)/etc/iwd/main.conf +endef + +IWD_POST_INSTALL_TARGET_HOOKS += IWD_INSTALL_CONFIG_FILE + +define IWD_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/iwd/S40iwd \ + $(TARGET_DIR)/etc/init.d/S40iwd + mkdir -p $(TARGET_DIR)/var/lib/iwd + ln -sf /tmp/iwd/hotspot $(TARGET_DIR)/var/lib/iwd/hotspot +endef + +$(eval $(autotools-package)) diff --git a/package/iwd/main.conf b/package/iwd/main.conf new file mode 100644 index 00000000..22c1cd73 --- /dev/null +++ b/package/iwd/main.conf @@ -0,0 +1,5 @@ +# use built-in dhcp client +[General] +EnableNetworkConfiguration=true +[Network] +NameResolvingService=__RESOLV_SERVICE__ diff --git a/package/jack1/Config.in b/package/jack1/Config.in new file mode 100644 index 00000000..b9299e2f --- /dev/null +++ b/package/jack1/Config.in @@ -0,0 +1,33 @@ +config BR2_PACKAGE_JACK1 + bool "jack1" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_THREADS # alsa-lib + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_PACKAGE_JACK2 + select BR2_PACKAGE_ALSA_LIB + select BR2_PACKAGE_ALSA_LIB_HWDEP + select BR2_PACKAGE_ALSA_LIB_RAWMIDI + select BR2_PACKAGE_ALSA_LIB_SEQ + select BR2_PACKAGE_BERKELEYDB + select BR2_PACKAGE_LIBSAMPLERATE + select BR2_PACKAGE_LIBSNDFILE + help + JACK Audio Connection Kit (JACK 1 implementation). + + JACK is a low-latency sound server, allowing multiple + applications to connect to one audio device, and to share + audio between themselves. This package contains the daemon + jackd as well as some example clients. + + http://jackaudio.org/ + + Another implementation (BR2_PACKAGE_JACK2) is also available, + please consult the documentation to choose the right one: + + https://github.com/jackaudio/jackaudio.github.com/wiki/Q_difference_jack1_jack2 + +comment "jack1 needs a toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/jack1/jack1.hash b/package/jack1/jack1.hash new file mode 100644 index 00000000..d7787ac2 --- /dev/null +++ b/package/jack1/jack1.hash @@ -0,0 +1,5 @@ +# Locally computed +sha256 3517b5bff82139a76b2b66fe2fd9a3b34b6e594c184f95a988524c575b11d444 jack-audio-connection-kit-0.125.0.tar.gz +sha256 661fe53a7e3fce790b185e35c60b7ed80d7efdf25fd7df5af6814a9a215a538f COPYING +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING.GPL +sha256 ad01ea5cd2755f6048383c8d54c88459cd6fcb17757c5c8892f8c5ea060f6140 COPYING.LGPL diff --git a/package/jack1/jack1.mk b/package/jack1/jack1.mk new file mode 100644 index 00000000..2f97434e --- /dev/null +++ b/package/jack1/jack1.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# jack1 +# +################################################################################ + +JACK1_VERSION = 0.125.0 +JACK1_SOURCE = jack-audio-connection-kit-$(JACK1_VERSION).tar.gz +JACK1_SITE = http://jackaudio.org/downloads +JACK1_LICENSE = GPL-2.0+ (jack server), LGPL-2.1+ (jack library) +JACK1_LICENSE_FILES = COPYING COPYING.GPL COPYING.LGPL +JACK1_INSTALL_STAGING = YES + +# Dependency to celt can't be met: jack1 requires celt >= 0.8.0 but we +# only have 0.5.1.3 and we cannot upgrade. +JACK1_DEPENDENCIES = host-pkgconf alsa-lib berkeleydb libsamplerate libsndfile + +ifeq ($(BR2_PACKAGE_READLINE),y) +JACK1_DEPENDENCIES += readline +endif + +JACK1_CONF_OPTS = --without-html-dir --disable-oss + +$(eval $(autotools-package)) diff --git a/package/jack2/Config.in b/package/jack2/Config.in new file mode 100644 index 00000000..f9de7be0 --- /dev/null +++ b/package/jack2/Config.in @@ -0,0 +1,54 @@ +config BR2_PACKAGE_JACK2 + bool "jack2" + depends on BR2_TOOLCHAIN_HAS_THREADS # alsa-lib + depends on BR2_USE_MMU # fork() + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + select BR2_PACKAGE_LIBSAMPLERATE + select BR2_PACKAGE_LIBSNDFILE + select BR2_PACKAGE_ALSA_LIB + select BR2_PACKAGE_ALSA_LIB_HWDEP + select BR2_PACKAGE_ALSA_LIB_SEQ + select BR2_PACKAGE_ALSA_LIB_RAWMIDI + # Ensure we get at least one: + select BR2_PACKAGE_JACK2_LEGACY if !BR2_PACKAGE_JACK2_DBUS + help + JACK Audio Connection Kit (server and example clients). + + JACK is a low-latency sound server, allowing multiple + applications to connect to one audio device, and to share + audio between themselves. This package contains the daemon + jackd as well as some example clients. + + http://jackaudio.org/ + +if BR2_PACKAGE_JACK2 + +config BR2_PACKAGE_JACK2_LEGACY + bool "classic jack2" + help + Build and use jackd. + + https://github.com/jackaudio/jackaudio.github.com/wiki/JackDbusPackaging + +config BR2_PACKAGE_JACK2_DBUS + bool "dbus jack2" + depends on BR2_USE_WCHAR # dbus-python, python + select BR2_PACKAGE_DBUS + select BR2_PACKAGE_DBUS_PYTHON + select BR2_PACKAGE_PYTHON3 if !BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON_PYEXPAT if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_PYEXPAT if BR2_PACKAGE_PYTHON3 # runtime + help + Build and use jackdbus. + + https://github.com/jackaudio/jackaudio.github.com/wiki/JackDbusPackaging + +endif + +comment "jack2 needs a toolchain w/ threads, C++, dynamic library" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP || \ + BR2_STATIC_LIBS diff --git a/package/jack2/jack2.hash b/package/jack2/jack2.hash new file mode 100644 index 00000000..df708f7c --- /dev/null +++ b/package/jack2/jack2.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 38f674bbc57852a8eb3d9faa1f96a0912d26f7d5df14c11005ad499c8ae352f2 jack2-1.9.17.tar.gz +sha256 d8c320ffc0030d1b096ae4732b50d2b811cf95e9a9b7377c1127b2563e0a0388 COPYING diff --git a/package/jack2/jack2.mk b/package/jack2/jack2.mk new file mode 100644 index 00000000..e6a036ba --- /dev/null +++ b/package/jack2/jack2.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# jack2 +# +################################################################################ + +JACK2_VERSION = 1.9.17 +JACK2_SITE = $(call github,jackaudio,jack2,v$(JACK2_VERSION)) +JACK2_LICENSE = GPL-2.0+ (jack server), LGPL-2.1+ (jack library) +JACK2_LICENSE_FILES = COPYING +JACK2_CPE_ID_VENDOR = jackaudio +JACK2_DEPENDENCIES = libsamplerate libsndfile alsa-lib +JACK2_INSTALL_STAGING = YES + +JACK2_CONF_OPTS = --alsa + +ifeq ($(BR2_PACKAGE_OPUS),y) +JACK2_DEPENDENCIES += opus +endif + +ifeq ($(BR2_PACKAGE_READLINE),y) +JACK2_DEPENDENCIES += readline +endif + +ifeq ($(BR2_PACKAGE_JACK2_LEGACY),y) +JACK2_CONF_OPTS += --classic +else +define JACK2_REMOVE_JACK_CONTROL + $(RM) -f $(TARGET_DIR)/usr/bin/jack_control +endef +JACK2_POST_INSTALL_TARGET_HOOKS += JACK2_REMOVE_JACK_CONTROL +endif + +ifeq ($(BR2_PACKAGE_JACK2_DBUS),y) +JACK2_DEPENDENCIES += dbus +JACK2_CONF_OPTS += --dbus +endif + +# The dependency against eigen is only useful in conjunction with +# gtkiostream, which we do not have, so we don't need to depend on +# eigen. + +$(eval $(waf-package)) diff --git a/package/jailhouse/Config.in b/package/jailhouse/Config.in new file mode 100644 index 00000000..596b4951 --- /dev/null +++ b/package/jailhouse/Config.in @@ -0,0 +1,28 @@ +config BR2_PACKAGE_JAILHOUSE + bool "jailhouse" + depends on BR2_aarch64 || BR2_x86_64 + depends on BR2_LINUX_KERNEL + help + The Jailhouse partitioning Hypervisor based on Linux. + + https://github.com/siemens/jailhouse + +if BR2_PACKAGE_JAILHOUSE + +config BR2_PACKAGE_JAILHOUSE_HELPER_SCRIPTS + bool "helper scripts" + depends on BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON_MAKO # runtime + help + Python-based helpers for the Jailhouse Hypervisor. + + https://github.com/siemens/jailhouse + +comment "helper scripts require Python" + depends on !BR2_PACKAGE_PYTHON + +endif + +comment "jailhouse needs a Linux kernel to be built" + depends on BR2_aarch64 || BR2_x86_64 + depends on !BR2_LINUX_KERNEL diff --git a/package/jailhouse/jailhouse.hash b/package/jailhouse/jailhouse.hash new file mode 100644 index 00000000..13a260e8 --- /dev/null +++ b/package/jailhouse/jailhouse.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 3777a553c2acb2b693843fe4d16ab80333879daedd47d9c9f3717c9644e6cf93 jailhouse-0.12.tar.gz +sha256 3aafb31a2436178323663e00511f16d58fc36ea654b1457532e79d017205efd8 COPYING diff --git a/package/jailhouse/jailhouse.mk b/package/jailhouse/jailhouse.mk new file mode 100644 index 00000000..6356c5a7 --- /dev/null +++ b/package/jailhouse/jailhouse.mk @@ -0,0 +1,54 @@ +################################################################################ +# +# jailhouse +# +################################################################################ + +JAILHOUSE_VERSION = 0.12 +JAILHOUSE_SITE = $(call github,siemens,jailhouse,v$(JAILHOUSE_VERSION)) +JAILHOUSE_LICENSE = GPL-2.0 +JAILHOUSE_LICENSE_FILES = COPYING +JAILHOUSE_DEPENDENCIES = \ + linux + +JAILHOUSE_MAKE_OPTS = \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + ARCH="$(KERNEL_ARCH)" \ + KDIR="$(LINUX_DIR)" \ + DESTDIR="$(TARGET_DIR)" + +ifeq ($(BR2_PACKAGE_JAILHOUSE_HELPER_SCRIPTS),y) +JAILHOUSE_DEPENDENCIES += \ + host-python-mako \ + host-python-setuptools +JAILHOUSE_MAKE_OPTS += \ + HAS_PYTHON_MAKO="yes" \ + PYTHON_PIP_USABLE="yes" +else +JAILHOUSE_MAKE_OPTS += \ + HAS_PYTHON_MAKO="no" \ + PYTHON_PIP_USABLE="no" +endif + +define JAILHOUSE_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(JAILHOUSE_MAKE_OPTS) -C $(@D) + + $(if $(BR2_PACKAGE_JAILHOUSE_HELPER_SCRIPTS), \ + cd $(@D) && $(PKG_PYTHON_SETUPTOOLS_ENV) $(HOST_DIR)/bin/python setup.py build) +endef + +define JAILHOUSE_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(JAILHOUSE_MAKE_OPTS) -C $(@D) modules_install firmware_install tool_inmates_install + $(TARGET_MAKE_ENV) $(MAKE) $(JAILHOUSE_MAKE_OPTS) -C $(@D)/tools src=$(@D)/tools install + + $(INSTALL) -d -m 0755 $(TARGET_DIR)/etc/jailhouse + $(INSTALL) -D -m 0644 $(@D)/configs/*/*.cell $(TARGET_DIR)/etc/jailhouse + + $(INSTALL) -d -m 0755 $(TARGET_DIR)/usr/local/libexec/jailhouse/demos + $(INSTALL) -D -m 0755 $(@D)/inmates/demos/*/*.bin $(TARGET_DIR)/usr/local/libexec/jailhouse/demos + + $(if $(BR2_PACKAGE_JAILHOUSE_HELPER_SCRIPTS), \ + cd $(@D) && $(PKG_PYTHON_SETUPTOOLS_ENV) $(HOST_DIR)/bin/python setup.py install --no-compile $(PKG_PYTHON_SETUPTOOLS_INSTALL_TARGET_OPTS)) +endef + +$(eval $(generic-package)) diff --git a/package/jansson/Config.in b/package/jansson/Config.in new file mode 100644 index 00000000..18c8ce5d --- /dev/null +++ b/package/jansson/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_JANSSON + bool "jansson" + help + Jansson is a C library for encoding, decoding and manipulating + JSON data. + + http://www.digip.org/jansson/ diff --git a/package/jansson/jansson.hash b/package/jansson/jansson.hash new file mode 100644 index 00000000..5c193169 --- /dev/null +++ b/package/jansson/jansson.hash @@ -0,0 +1,3 @@ +# Locally calculated after checking pgp signature +sha256 f4f377da17b10201a60c1108613e78ee15df6b12016b116b6de42209f47a474f jansson-2.13.1.tar.gz +sha256 1fff7d37d22157bcd81ab53b6c54da755d7c2f868f15807d9bde920f10730da0 LICENSE diff --git a/package/jansson/jansson.mk b/package/jansson/jansson.mk new file mode 100644 index 00000000..2761ce9b --- /dev/null +++ b/package/jansson/jansson.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# jansson +# +################################################################################ + +JANSSON_VERSION = 2.13.1 +JANSSON_SITE = http://www.digip.org/jansson/releases +JANSSON_LICENSE = MIT +JANSSON_LICENSE_FILES = LICENSE +JANSSON_CPE_ID_VENDOR = jansson_project +JANSSON_INSTALL_STAGING = YES +JANSSON_CONF_ENV = LIBS="-lm" + +$(eval $(autotools-package)) diff --git a/package/janus-gateway/0001-disable-ssp.patch b/package/janus-gateway/0001-disable-ssp.patch new file mode 100644 index 00000000..22f7f1a4 --- /dev/null +++ b/package/janus-gateway/0001-disable-ssp.patch @@ -0,0 +1,33 @@ +From 4b02c8207adb888d35951bbc1c5b3029594f44c6 Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Wed, 24 Apr 2019 13:56:27 -0400 +Subject: [PATCH] Do not force SSP usage + +The toolchain may not support SSP, so do not enforce its usage, let +the package user pass the appropriate CFLAGS to enable SSP if needed. + +Signed-off-by: Gregory Dymarek +Signed-off-by: Thomas Petazzoni +(rebased against v0.1.0) +Signed-off-by: Bernd Kuhls +(rebased against v0.6.3) +Signed-off-by: Adam Duskett +--- + configure.ac | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 257ea8c..ca17a29 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -20,7 +20,6 @@ LT_INIT + # Common CFLAGS + CFLAGS="$CFLAGS \ + -fPIC \ +- -fstack-protector-all \ + -fstrict-aliasing \ + -ggdb3 \ + -pthread \ +-- +2.20.1 + diff --git a/package/janus-gateway/0002-Add-test-for-Wunused-but-set-variable.patch b/package/janus-gateway/0002-Add-test-for-Wunused-but-set-variable.patch new file mode 100644 index 00000000..b54c8cbe --- /dev/null +++ b/package/janus-gateway/0002-Add-test-for-Wunused-but-set-variable.patch @@ -0,0 +1,146 @@ +From c0f075bdee5edabf8f19b68e0880fbd249a89653 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sat, 3 Jan 2015 15:09:59 +0100 +Subject: [PATCH] Add test for -Wunused-but-set-variable + +The -Wunused-but-set-variable option does not exist in some old gcc +versions (gcc 4.5.x), so using it unconditionally breaks the build +with such compilers. + +This commit introduces the AX_CHECK_COMPILE_FLAG m4 macro taken from +the autoconf-archive +(http://git.savannah.gnu.org/gitweb/?p=autoconf-archive.git;a=blob_plain;f=m4/ax_check_compile_flag.m4), +and uses it to detect if the -Wunused-but-set-variable option is +supported, and only uses it in this case. + +Signed-off-by: Thomas Petazzoni +(rebased against v0.1.0) +Signed-off-by: Bernd Kuhls +(rebased against v0.6.3) +Signed-off-by: Adam Duskett +--- + Makefile.am | 1 + + configure.ac | 6 ++- + m4/ax_check_compile_flag.m4 | 74 +++++++++++++++++++++++++++++++++++++ + 3 files changed, 79 insertions(+), 2 deletions(-) + create mode 100644 m4/ax_check_compile_flag.m4 + +diff --git a/Makefile.am b/Makefile.am +index f961fdb..3ddbe59 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -151,6 +151,7 @@ janus_CFLAGS = \ + -DEVENTDIR=\"$(eventdir)\" \ + -DLOGGERDIR=\"$(loggerdir)\" \ + -DCONFDIR=\"$(confdir)\" \ ++ @GCC_WARN_UNUSED_BUT_SET@ \ + $(BORINGSSL_CFLAGS) \ + $(NULL) + +diff --git a/configure.ac b/configure.ac +index ca17a29..beef91a 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -13,6 +13,9 @@ AM_SILENT_RULES([yes]) + AC_USE_SYSTEM_EXTENSIONS + + AC_PROG_CC ++AX_CHECK_COMPILE_FLAG([-Wunused-but-set-variable], ++ [GCC_WARN_UNUSED_BUT_SET=-Wunused-but-set-variable]) ++AC_SUBST(GCC_WARN_UNUSED_BUT_SET) + + LT_PREREQ([2.2]) + LT_INIT +@@ -64,8 +67,7 @@ clang*) + CFLAGS="$CFLAGS \ + -Wcast-align \ + -Wno-override-init \ +- -Wunsafe-loop-optimizations \ +- -Wunused-but-set-variable" ++ -Wunsafe-loop-optimizations" + esac + + JANUS_VERSION=103 +diff --git a/m4/ax_check_compile_flag.m4 b/m4/ax_check_compile_flag.m4 +new file mode 100644 +index 0000000..51df0c0 +--- /dev/null ++++ b/m4/ax_check_compile_flag.m4 +@@ -0,0 +1,74 @@ ++# =========================================================================== ++# http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html ++# =========================================================================== ++# ++# SYNOPSIS ++# ++# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) ++# ++# DESCRIPTION ++# ++# Check whether the given FLAG works with the current language's compiler ++# or gives an error. (Warnings, however, are ignored) ++# ++# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on ++# success/failure. ++# ++# If EXTRA-FLAGS is defined, it is added to the current language's default ++# flags (e.g. CFLAGS) when the check is done. The check is thus made with ++# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to ++# force the compiler to issue an error when a bad flag is given. ++# ++# INPUT gives an alternative input source to AC_COMPILE_IFELSE. ++# ++# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this ++# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. ++# ++# LICENSE ++# ++# Copyright (c) 2008 Guido U. Draheim ++# Copyright (c) 2011 Maarten Bosmans ++# ++# 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 3 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, see . ++# ++# As a special exception, the respective Autoconf Macro's copyright owner ++# gives unlimited permission to copy, distribute and modify the configure ++# scripts that are the output of Autoconf when processing the Macro. You ++# need not follow the terms of the GNU General Public License when using ++# or distributing such scripts, even though portions of the text of the ++# Macro appear in them. The GNU General Public License (GPL) does govern ++# all other use of the material that constitutes the Autoconf Macro. ++# ++# This special exception to the GPL applies to versions of the Autoconf ++# Macro released by the Autoconf Archive. When you make and distribute a ++# modified version of the Autoconf Macro, you may extend this special ++# exception to the GPL to apply to your modified version as well. ++ ++#serial 3 ++ ++AC_DEFUN([AX_CHECK_COMPILE_FLAG], ++[AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX ++AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl ++AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ ++ ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS ++ _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" ++ AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], ++ [AS_VAR_SET(CACHEVAR,[yes])], ++ [AS_VAR_SET(CACHEVAR,[no])]) ++ _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) ++AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes], ++ [m4_default([$2], :)], ++ [m4_default([$3], :)]) ++AS_VAR_POPDEF([CACHEVAR])dnl ++])dnl AX_CHECK_COMPILE_FLAGS +-- +2.20.1 + diff --git a/package/janus-gateway/Config.in b/package/janus-gateway/Config.in new file mode 100644 index 00000000..5d711fe7 --- /dev/null +++ b/package/janus-gateway/Config.in @@ -0,0 +1,99 @@ +menuconfig BR2_PACKAGE_JANUS_GATEWAY + bool "janus-gateway" + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_WCHAR # libnice -> libglib2 + depends on BR2_USE_MMU # libnice + depends on !BR2_STATIC_LIBS # dlopen + select BR2_PACKAGE_JANSSON + select BR2_PACKAGE_LIBCONFIG + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBNICE + select BR2_PACKAGE_LIBSRTP + select BR2_PACKAGE_OPENSSL + help + Janus is an open source, general purpose, WebRTC gateway + designed and developed by Meetecho. + + https://github.com/meetecho/janus-gateway + +if BR2_PACKAGE_JANUS_GATEWAY + +config BR2_PACKAGE_JANUS_GATEWAY_DEMOS + bool "HTML demos" + help + Install the demonstration website, as featured on + https://janus.conf.meetecho.com/ + +comment "plugins" + +config BR2_PACKAGE_JANUS_GATEWAY_AUDIO_BRIDGE + bool "audio bridge" + select BR2_PACKAGE_OPUS + +config BR2_PACKAGE_JANUS_GATEWAY_ECHO_TEST + bool "echo test" + +config BR2_PACKAGE_JANUS_GATEWAY_RECORDPLAY + bool "record and play" + +config BR2_PACKAGE_JANUS_GATEWAY_SIP_GATEWAY + bool "sip gateway" + select BR2_PACKAGE_SOFIA_SIP + +config BR2_PACKAGE_JANUS_GATEWAY_STREAMING + bool "streaming" + # SO_REUSEPORT + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9 + +comment "streaming plugin needs a toolchain w/ headers >= 3.9" + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9 + +config BR2_PACKAGE_JANUS_GATEWAY_TEXT_ROOM + bool "text room" + +config BR2_PACKAGE_JANUS_GATEWAY_VIDEO_CALL + bool "video call" + +config BR2_PACKAGE_JANUS_GATEWAY_VIDEO_ROOM + bool "video room" + +config BR2_PACKAGE_JANUS_GATEWAY_VOICE_MAIL + bool "voice mail" + select BR2_PACKAGE_LIBOGG + +comment "transports" + +config BR2_PACKAGE_JANUS_GATEWAY_MQTT + bool "MQTT" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_PAHO_MQTT_C + +comment "MQTT transport needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_JANUS_GATEWAY_RABBITMQ + bool "RabbitMQ" + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_RABBITMQ_C + +comment "RabbitMQ transport needs a toolchain w/ dynamic library, threads" + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_JANUS_GATEWAY_REST + bool "REST (HTTP/HTTPS)" + select BR2_PACKAGE_LIBMICROHTTPD + +config BR2_PACKAGE_JANUS_GATEWAY_UNIX_SOCKETS + bool "Unix Sockets" + default y + +config BR2_PACKAGE_JANUS_GATEWAY_WEBSOCKETS + bool "WebSockets" + select BR2_PACKAGE_LIBWEBSOCKETS + +endif + +comment "janus-gateway needs a toolchain w/ dynamic library, threads, wchar" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR diff --git a/package/janus-gateway/janus-gateway.hash b/package/janus-gateway/janus-gateway.hash new file mode 100644 index 00000000..ee71979b --- /dev/null +++ b/package/janus-gateway/janus-gateway.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 7f8c58e5c5ed94821ce877169da90c00e4adf81920ed383a2e0ec241960d121b janus-gateway-0.10.3.tar.gz +sha256 91d04c97fa1da3fcd28205873276358aafc071c5b00a9ea8c49dd06d487a9dc6 COPYING diff --git a/package/janus-gateway/janus-gateway.mk b/package/janus-gateway/janus-gateway.mk new file mode 100644 index 00000000..98a2184d --- /dev/null +++ b/package/janus-gateway/janus-gateway.mk @@ -0,0 +1,131 @@ +################################################################################ +# +# janus-gateway +# +################################################################################ + +JANUS_GATEWAY_VERSION = 0.10.3 +JANUS_GATEWAY_SITE = $(call github,meetecho,janus-gateway,v$(JANUS_GATEWAY_VERSION)) +JANUS_GATEWAY_LICENSE = GPL-3.0 with OpenSSL exception +JANUS_GATEWAY_LICENSE_FILES = COPYING +JANUS_GATEWAY_CPE_ID_VENDOR = meetecho +JANUS_GATEWAY_CPE_ID_PRODUCT = janus + +# ding-libs provides the ini_config library +JANUS_GATEWAY_DEPENDENCIES = host-pkgconf jansson libnice \ + libsrtp host-gengetopt libglib2 openssl libconfig \ + $(if $(BR2_PACKAGE_LIBOGG),libogg) + +# Straight out of the repository, no ./configure, and we also patch +# configure.ac. +JANUS_GATEWAY_AUTORECONF = YES + +JANUS_GATEWAY_CONF_OPTS = \ + --disable-data-channels \ + --disable-sample-event-handler + +ifeq ($(BR2_PACKAGE_JANUS_GATEWAY_DEMOS),) +define JANUS_GATEWAY_REMOVE_DEMOS + $(RM) -fr $(TARGET_DIR)/usr/share/janus/demos/ +endef +JANUS_GATEWAY_POST_INSTALL_TARGET_HOOKS += JANUS_GATEWAY_REMOVE_DEMOS +endif + +ifeq ($(BR2_PACKAGE_JANUS_GATEWAY_AUDIO_BRIDGE),y) +JANUS_GATEWAY_DEPENDENCIES += opus +JANUS_GATEWAY_CONF_OPTS += --enable-plugin-audiobridge +else +JANUS_GATEWAY_CONF_OPTS += --disable-plugin-audiobridge +endif + +ifeq ($(BR2_PACKAGE_JANUS_GATEWAY_ECHO_TEST),y) +JANUS_GATEWAY_CONF_OPTS += --enable-plugin-echotest +else +JANUS_GATEWAY_CONF_OPTS += --disable-plugin-echotest +endif + +ifeq ($(BR2_PACKAGE_JANUS_GATEWAY_RECORDPLAY),y) +JANUS_GATEWAY_CONF_OPTS += --enable-plugin-recordplay +else +JANUS_GATEWAY_CONF_OPTS += --disable-plugin-recordplay +endif + +ifeq ($(BR2_PACKAGE_JANUS_GATEWAY_SIP_GATEWAY),y) +JANUS_GATEWAY_DEPENDENCIES += sofia-sip +JANUS_GATEWAY_CONF_OPTS += --enable-plugin-sip +else +JANUS_GATEWAY_CONF_OPTS += --disable-plugin-sip +endif + +ifeq ($(BR2_PACKAGE_JANUS_GATEWAY_STREAMING),y) +JANUS_GATEWAY_CONF_OPTS += --enable-plugin-streaming +else +JANUS_GATEWAY_CONF_OPTS += --disable-plugin-streaming +endif + +ifeq ($(BR2_PACKAGE_JANUS_GATEWAY_TEXT_ROOM),y) +JANUS_GATEWAY_CONF_OPTS += --enable-plugin-textroom +else +JANUS_GATEWAY_CONF_OPTS += --disable-plugin-textroom +endif + +ifeq ($(BR2_PACKAGE_JANUS_GATEWAY_VIDEO_CALL),y) +JANUS_GATEWAY_CONF_OPTS += --enable-plugin-videocall +else +JANUS_GATEWAY_CONF_OPTS += --disable-plugin-videocall +endif + +ifeq ($(BR2_PACKAGE_JANUS_GATEWAY_VIDEO_ROOM),y) +JANUS_GATEWAY_CONF_OPTS += --enable-plugin-videoroom +else +JANUS_GATEWAY_CONF_OPTS += --disable-plugin-videoroom +endif + +ifeq ($(BR2_PACKAGE_JANUS_GATEWAY_VOICE_MAIL),y) +JANUS_GATEWAY_CONF_OPTS += --enable-plugin-voicemail +else +JANUS_GATEWAY_CONF_OPTS += --disable-plugin-voicemail +endif + +ifeq ($(BR2_PACKAGE_JANUS_GATEWAY_MQTT),y) +JANUS_GATEWAY_DEPENDENCIES += paho-mqtt-c +JANUS_GATEWAY_CONF_OPTS += --enable-mqtt +else +JANUS_GATEWAY_CONF_OPTS += --disable-mqtt +endif + +ifeq ($(BR2_PACKAGE_JANUS_GATEWAY_RABBITMQ),y) +JANUS_GATEWAY_DEPENDENCIES += rabbitmq-c +JANUS_GATEWAY_CONF_OPTS += --enable-rabbitmq +else +JANUS_GATEWAY_CONF_OPTS += --disable-rabbitmq +endif + +ifeq ($(BR2_PACKAGE_JANUS_GATEWAY_REST),y) +JANUS_GATEWAY_DEPENDENCIES += libmicrohttpd +JANUS_GATEWAY_CONF_OPTS += --enable-rest +else +JANUS_GATEWAY_CONF_OPTS += --disable-rest +endif + +ifeq ($(BR2_PACKAGE_JANUS_GATEWAY_UNIX_SOCKETS),y) +JANUS_GATEWAY_CONF_OPTS += --enable-unix-sockets +else +JANUS_GATEWAY_CONF_OPTS += --disable-unix-sockets +endif + +ifeq ($(BR2_PACKAGE_JANUS_GATEWAY_WEBSOCKETS),y) +JANUS_GATEWAY_DEPENDENCIES += libwebsockets +JANUS_GATEWAY_CONF_OPTS += --enable-websockets +else +JANUS_GATEWAY_CONF_OPTS += --disable-websockets +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +JANUS_GATEWAY_DEPENDENCIES += systemd +JANUS_GATEWAY_CONF_OPTS += --enable-systemd-sockets +else +JANUS_GATEWAY_CONF_OPTS += --disable-systemd-sockets +endif + +$(eval $(autotools-package)) diff --git a/package/jasper/Config.in b/package/jasper/Config.in new file mode 100644 index 00000000..72969365 --- /dev/null +++ b/package/jasper/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_JASPER + bool "jasper" + help + JPEG-2000 decoder + + http://www.ece.uvic.ca/~mdadams/jasper/ diff --git a/package/jasper/jasper.hash b/package/jasper/jasper.hash new file mode 100644 index 00000000..67653a8e --- /dev/null +++ b/package/jasper/jasper.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 6b4e5f682be0ab1a5acb0eeb6bf41d6ce17a658bb8e2dbda95de40100939cc88 jasper-2.0.28.tar.gz +sha256 4ad1bb42aff888c4403d792e6e2c5f1716d6c279fea70b296333c9d577d30b81 LICENSE diff --git a/package/jasper/jasper.mk b/package/jasper/jasper.mk new file mode 100644 index 00000000..6ef1afca --- /dev/null +++ b/package/jasper/jasper.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# jasper +# +################################################################################ + +JASPER_VERSION = 2.0.28 +JASPER_SITE = $(call github,jasper-software,jasper,version-$(JASPER_VERSION)) +JASPER_INSTALL_STAGING = YES +JASPER_LICENSE = JasPer-2.0 +JASPER_LICENSE_FILES = LICENSE +JASPER_CPE_ID_VENDOR = jasper_project +JASPER_SUPPORTS_IN_SOURCE_BUILD = NO +JASPER_CONF_OPTS = \ + -DCMAKE_DISABLE_FIND_PACKAGE_DOXYGEN=TRUE \ + -DCMAKE_DISABLE_FIND_PACKAGE_LATEX=TRUE + +ifeq ($(BR2_STATIC_LIBS),y) +JASPER_CONF_OPTS += -DJAS_ENABLE_SHARED=OFF +endif + +ifeq ($(BR2_PACKAGE_JPEG),y) +JASPER_CONF_OPTS += -DJAS_ENABLE_LIBJPEG=ON +JASPER_DEPENDENCIES += jpeg +else +JASPER_CONF_OPTS += -DJAS_ENABLE_LIBJPEG=OFF +endif + +JASPER_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y) +JASPER_CFLAGS += -O0 +endif + +JASPER_CONF_OPTS += -DCMAKE_C_FLAGS="$(JASPER_CFLAGS)" + +$(eval $(cmake-package)) diff --git a/package/jbig2dec/Config.in b/package/jbig2dec/Config.in new file mode 100644 index 00000000..d1440dca --- /dev/null +++ b/package/jbig2dec/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_JBIG2DEC + bool "jbig2dec" + help + jbig2dec is a decoder implementation of the JBIG2 + image compression format. + + https://jbig2dec.com/ diff --git a/package/jbig2dec/jbig2dec.hash b/package/jbig2dec/jbig2dec.hash new file mode 100644 index 00000000..5a34af37 --- /dev/null +++ b/package/jbig2dec/jbig2dec.hash @@ -0,0 +1,7 @@ +# https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs9530/MD5SUMS +# and SHA512SUMS are missing the hashes for this file. +# Locally computed: +sha256 279476695b38f04939aa59d041be56f6bade3422003a406a85e9792c27118a37 jbig2dec-0.19.tar.gz + +# Hash for license files: +sha256 1bf5258afe453934484fd0cea97508b72301633a6a78b0ae8a9ee44ac78f26d9 LICENSE diff --git a/package/jbig2dec/jbig2dec.mk b/package/jbig2dec/jbig2dec.mk new file mode 100644 index 00000000..8d881136 --- /dev/null +++ b/package/jbig2dec/jbig2dec.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# jbig2dec +# +################################################################################ + +JBIG2DEC_VERSION = 0.19 +JBIG2DEC_SITE = \ + https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs9530 +JBIG2DEC_LICENSE = AGPL-3.0+ +JBIG2DEC_LICENSE_FILES = LICENSE +JBIG2DEC_CPE_ID_VENDOR = artifex +JBIG2DEC_INSTALL_STAGING = YES +# tarball is missing install-sh, install.sh, or shtool +JBIG2DEC_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/jemalloc/Config.in b/package/jemalloc/Config.in new file mode 100644 index 00000000..c272d452 --- /dev/null +++ b/package/jemalloc/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_JEMALLOC_ARCH_SUPPORTS + bool + # see include/jemalloc/internal/quantum.h + default y if BR2_arm || BR2_armeb + default y if BR2_aarch64 || BR2_aarch64_be + default y if BR2_i386 || BR2_x86_64 + default y if BR2_m68k + default y if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el + default y if BR2_nios2 + default y if BR2_or1k + default y if BR2_powerpc + default y if BR2_riscv + default y if BR2_sh4 || BR2sh4eb || BR2_sh4a || BR2_sh4aeb + default y if BR2_sparc64 + +config BR2_PACKAGE_JEMALLOC + bool "jemalloc" + depends on BR2_PACKAGE_JEMALLOC_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS + help + This library providing a malloc(3) implementation that + emphasizes fragmentation avoidance and scalable concurrency + support. + + http://jemalloc.net/ + +comment "jemalloc needs a toolchain w/ threads" + depends on BR2_PACKAGE_JEMALLOC_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/jemalloc/jemalloc.hash b/package/jemalloc/jemalloc.hash new file mode 100644 index 00000000..5db53d05 --- /dev/null +++ b/package/jemalloc/jemalloc.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 34330e5ce276099e2e8950d9335db5a875689a4c6a56751ef3b1d8c537f887f6 jemalloc-5.2.1.tar.bz2 +sha256 94aa2caa98c25d942f58b956c71dba6a99ff98fc3a31cbc669fe2a4cd0268b53 COPYING diff --git a/package/jemalloc/jemalloc.mk b/package/jemalloc/jemalloc.mk new file mode 100644 index 00000000..e43a4f79 --- /dev/null +++ b/package/jemalloc/jemalloc.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# jemalloc +# +################################################################################ + +JEMALLOC_VERSION = 5.2.1 +JEMALLOC_SOURCE = jemalloc-$(JEMALLOC_VERSION).tar.bz2 +JEMALLOC_SITE = https://github.com/jemalloc/jemalloc/releases/download/$(JEMALLOC_VERSION) +JEMALLOC_LICENSE = BSD-2-Clause +JEMALLOC_LICENSE_FILES = COPYING +JEMALLOC_INSTALL_STAGING = YES +JEMALLOC_CONFIG_SCRIPTS = jemalloc-config + +# gcc bug internal compiler error: in merge_overlapping_regs, at +# regrename.c:304. This bug is fixed since gcc 6. +ifeq ($(BR2_or1k):$(BR2_TOOLCHAIN_GCC_AT_LEAST_6),y:) +JEMALLOC_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) -O0" +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/jhead/Config.in b/package/jhead/Config.in new file mode 100644 index 00000000..58498cd6 --- /dev/null +++ b/package/jhead/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_JHEAD + bool "jhead" + depends on BR2_USE_WCHAR + help + Jhead is a program for manipulating settings and thumbnails + in Exif jpeg headers used by most Digital Cameras. + + http://www.sentex.net/~mwandel/jhead/ + +comment "jhead needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR diff --git a/package/jhead/jhead.hash b/package/jhead/jhead.hash new file mode 100644 index 00000000..ffe75381 --- /dev/null +++ b/package/jhead/jhead.hash @@ -0,0 +1,3 @@ +# Locally calculated from download (no sig, hash) +sha256 ef89bbcf4f6c25ed88088cf242a47a6aedfff4f08cc7dc205bf3e2c0f10a03c9 jhead-3.04.tar.gz +sha256 46c870a208305489eea862ec8b05b030ba1f06d99195f660dc0ba541cc38d82b readme.txt diff --git a/package/jhead/jhead.mk b/package/jhead/jhead.mk new file mode 100644 index 00000000..49cb03da --- /dev/null +++ b/package/jhead/jhead.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# jhead +# +################################################################################ + +JHEAD_VERSION = 3.04 +JHEAD_SITE = http://www.sentex.net/~mwandel/jhead +JHEAD_LICENSE = Public Domain +JHEAD_LICENSE_FILES = readme.txt +JHEAD_CPE_ID_VENDOR = jhead_project + +define JHEAD_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) +endef + +define JHEAD_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/jhead $(TARGET_DIR)/usr/bin/jhead +endef + +$(eval $(generic-package)) diff --git a/package/jimtcl/Config.in b/package/jimtcl/Config.in new file mode 100644 index 00000000..635fef14 --- /dev/null +++ b/package/jimtcl/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_JIMTCL + bool "jimtcl" + help + Jim Tcl is a small footprint reimplementation of the Tcl + scripting language. The core language engine is compatible + with Tcl 8.5+, while implementing a significant subset of + the Tcl 8.6 command set, plus additional features available + only in Jim Tcl. + + http://jim.tcl.tk diff --git a/package/jimtcl/jimtcl.hash b/package/jimtcl/jimtcl.hash new file mode 100644 index 00000000..21d75c4f --- /dev/null +++ b/package/jimtcl/jimtcl.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 ab8204cd03b946f5149e1273af9c86d8e73b146084a0fbeb1d4f41a75b0b3411 jimtcl-0.79.tar.gz +sha256 419f1146334e57fb258d6c957d1f94d43455ec0d24b1b54c4447e5f61a353950 LICENSE diff --git a/package/jimtcl/jimtcl.mk b/package/jimtcl/jimtcl.mk new file mode 100644 index 00000000..e712dff0 --- /dev/null +++ b/package/jimtcl/jimtcl.mk @@ -0,0 +1,103 @@ +################################################################################ +# +# jimtcl +# +################################################################################ + +JIMTCL_VERSION = 0.79 +JIMTCL_SITE = $(call github,msteveb,jimtcl,$(JIMTCL_VERSION)) +JIMTCL_INSTALL_STAGING = YES +JIMTCL_LICENSE = BSD-2-Clause +JIMTCL_LICENSE_FILES = LICENSE + +JIMTCL_HEADERS_TO_INSTALL = \ + jim.h \ + jim-eventloop.h \ + jim-signal.h \ + jim-subcmd.h \ + jim-win32compat.h \ + jim-config.h + +ifeq ($(BR2_PACKAGE_TCL),) +define JIMTCL_LINK_TCLSH + ln -sf jimsh $(TARGET_DIR)/usr/bin/tclsh +endef +endif + +ifeq ($(BR2_STATIC_LIBS),y) +define JIMTCL_INSTALL_LIB + $(INSTALL) -m 0644 -D $(@D)/libjim.a $(1)/usr/lib/libjim.a +endef +else +JIMTCL_SHARED = --shared +define JIMTCL_INSTALL_LIB + $(INSTALL) -m 0755 -D $(@D)/libjim.so.$(JIMTCL_VERSION) \ + $(1)/usr/lib/libjim.so.$(JIMTCL_VERSION) + ln -sf libjim.so.$(JIMTCL_VERSION) $(1)/usr/lib/libjim.so +endef +endif + +# build system doesn't use autotools, but does use an old version of +# gnuconfig which doesn't know all the architectures supported by +# Buildroot, so update config.guess / config.sub like we do in +# pkg-autotools.mk +JIMTCL_POST_PATCH_HOOKS += UPDATE_CONFIG_HOOK +HOST_JIMTCL_POST_PATCH_HOOKS += UPDATE_CONFIG_HOOK + +# jimtcl really wants to find a existing $CXX, so feed it false +# when we do not have one. +define JIMTCL_CONFIGURE_CMDS + (cd $(@D); \ + $(TARGET_CONFIGURE_OPTS) \ + CCACHE=none \ + $(if $(BR2_INSTALL_LIBSTDCPP),,CXX=false) \ + ./configure --prefix=/usr \ + --host=$(GNU_TARGET_NAME) \ + --build=$(GNU_HOST_NAME) \ + $(JIMTCL_SHARED) \ + ) +endef + +# -fPIC is mandatory to build shared libraries on certain architectures +# (e.g. SPARC) and causes no harm or drawbacks on other architectures +define JIMTCL_BUILD_CMDS + SH_CFLAGS="-fPIC" \ + SHOBJ_CFLAGS="-fPIC" \ + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define JIMTCL_INSTALL_STAGING_CMDS + for i in $(JIMTCL_HEADERS_TO_INSTALL); do \ + cp -a $(@D)/$$i $(STAGING_DIR)/usr/include/ || exit 1 ; \ + done; \ + $(call JIMTCL_INSTALL_LIB,$(STAGING_DIR)) +endef + +define JIMTCL_INSTALL_TARGET_CMDS + $(INSTALL) -D $(@D)/jimsh $(TARGET_DIR)/usr/bin/jimsh + $(call JIMTCL_INSTALL_LIB,$(TARGET_DIR)) + $(JIMTCL_LINK_TCLSH) +endef + +define HOST_JIMTCL_CONFIGURE_CMDS + cd $(@D) && \ + $(HOST_CONFIGURE_OPTS) \ + CCACHE=none \ + ./configure --prefix=$(HOST_DIR) --shared +endef + +define HOST_JIMTCL_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define HOST_JIMTCL_INSTALL_CMDS + for i in $(JIMTCL_HEADERS_TO_INSTALL); do \ + cp -a $(@D)/$$i $(HOST_DIR)/usr/include/ || exit 1 ; \ + done; + $(INSTALL) -m 0755 -D $(@D)/libjim.so.$(JIMTCL_VERSION) \ + $(HOST_DIR)/usr/lib/libjim.so.$(JIMTCL_VERSION) + ln -sf libjim.so.$(JIMTCL_VERSION) $(HOST_DIR)/usr/lib/libjim.so +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/jitterentropy-library/0001-Makefile-cleanup-install.patch b/package/jitterentropy-library/0001-Makefile-cleanup-install.patch new file mode 100644 index 00000000..9c7e4036 --- /dev/null +++ b/package/jitterentropy-library/0001-Makefile-cleanup-install.patch @@ -0,0 +1,54 @@ +From 060b9b4147f6e5ff386a8b017796118d783e59fa Mon Sep 17 00:00:00 2001 +From: Matt Weber +Date: Tue, 22 Oct 2019 12:44:30 -0500 +Subject: [PATCH] Makefile: cleanup install for rebuilds + +Support the ability to rebuild and redeploy without a clean. This +required some force linking and man archive creation. + +Provide the ability to override the stripping of the shared lib for +cases where a embedded target build may want to control stripping +or provide cross arch tools. + +Signed-off-by: Matthew Weber +Signed-off-by: Stephan Mueller +[Retrieved from: +https://github.com/smuellerDD/jitterentropy-library/commit/060b9b4147f6e5ff386a8b017796118d783e59fa] +Signed-off-by: Fabrice Fontaine +--- + Makefile | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +diff --git a/Makefile b/Makefile +index 4ff069b..2e78607 100644 +--- a/Makefile ++++ b/Makefile +@@ -14,6 +14,8 @@ LIBDIR := lib + # include target directory + INCDIR := include + ++INSTALL_STRIP ?= install -s ++ + NAME := jitterentropy + LIBMAJOR=$(shell cat jitterentropy-base.c | grep define | grep MAJVERSION | awk '{print $$3}') + LIBMINOR=$(shell cat jitterentropy-base.c | grep define | grep MINVERSION | awk '{print $$3}') +@@ -58,15 +60,15 @@ cppcheck: + install: + install -d -m 0755 $(DESTDIR)$(PREFIX)/share/man/man3 + install -m 644 doc/$(NAME).3 $(DESTDIR)$(PREFIX)/share/man/man3/ +- gzip -9 $(DESTDIR)$(PREFIX)/share/man/man3/$(NAME).3 ++ gzip -f -9 $(DESTDIR)$(PREFIX)/share/man/man3/$(NAME).3 + install -d -m 0755 $(DESTDIR)$(PREFIX)/$(LIBDIR) +- install -m 0755 -s lib$(NAME).so.$(LIBVERSION) $(DESTDIR)$(PREFIX)/$(LIBDIR)/ ++ $(INSTALL_STRIP) -m 0755 lib$(NAME).so.$(LIBVERSION) $(DESTDIR)$(PREFIX)/$(LIBDIR)/ + install -d -m 0755 $(DESTDIR)$(PREFIX)/$(INCDIR) + install -m 0644 jitterentropy.h $(DESTDIR)$(PREFIX)/$(INCDIR)/ + install -m 0644 jitterentropy-base-user.h $(DESTDIR)$(PREFIX)/$(INCDIR)/ + $(RM) $(DESTDIR)$(PREFIX)/$(LIBDIR)/lib$(NAME).so.$(LIBMAJOR) +- ln -s lib$(NAME).so.$(LIBVERSION) $(DESTDIR)$(PREFIX)/$(LIBDIR)/lib$(NAME).so.$(LIBMAJOR) +- ln -s lib$(NAME).so.$(LIBMAJOR) $(DESTDIR)$(PREFIX)/$(LIBDIR)/lib$(NAME).so ++ ln -sf lib$(NAME).so.$(LIBVERSION) $(DESTDIR)$(PREFIX)/$(LIBDIR)/lib$(NAME).so.$(LIBMAJOR) ++ ln -sf lib$(NAME).so.$(LIBMAJOR) $(DESTDIR)$(PREFIX)/$(LIBDIR)/lib$(NAME).so + + clean: + @- $(RM) $(NAME) diff --git a/package/jitterentropy-library/0002-Makefile-add-additional-install-targets.patch b/package/jitterentropy-library/0002-Makefile-add-additional-install-targets.patch new file mode 100644 index 00000000..a331c9f3 --- /dev/null +++ b/package/jitterentropy-library/0002-Makefile-add-additional-install-targets.patch @@ -0,0 +1,56 @@ +From d545d76cb3173cc98e1421604929248f2d882821 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Thu, 24 Oct 2019 18:48:47 +0200 +Subject: [PATCH] Makefile: add additional install targets + +Add install-includes, install-man, install-shared and install-static +targets to allow the user to configure what must be installed + +Signed-off-by: Fabrice Fontaine +[Upstream status: +https://github.com/smuellerDD/jitterentropy-library/pull/11] +--- + Makefile | 18 ++++++++++++++---- + 1 file changed, 14 insertions(+), 4 deletions(-) + +diff --git a/Makefile b/Makefile +index 2e78607..41bc4f7 100644 +--- a/Makefile ++++ b/Makefile +@@ -57,19 +57,29 @@ scan: $(analyze_plists) + cppcheck: + cppcheck --force -q --enable=performance --enable=warning --enable=portability *.h *.c + +-install: ++install: install-man install-shared install-includes ++ ++install-man: + install -d -m 0755 $(DESTDIR)$(PREFIX)/share/man/man3 + install -m 644 doc/$(NAME).3 $(DESTDIR)$(PREFIX)/share/man/man3/ + gzip -f -9 $(DESTDIR)$(PREFIX)/share/man/man3/$(NAME).3 ++ ++install-shared: + install -d -m 0755 $(DESTDIR)$(PREFIX)/$(LIBDIR) + $(INSTALL_STRIP) -m 0755 lib$(NAME).so.$(LIBVERSION) $(DESTDIR)$(PREFIX)/$(LIBDIR)/ +- install -d -m 0755 $(DESTDIR)$(PREFIX)/$(INCDIR) +- install -m 0644 jitterentropy.h $(DESTDIR)$(PREFIX)/$(INCDIR)/ +- install -m 0644 jitterentropy-base-user.h $(DESTDIR)$(PREFIX)/$(INCDIR)/ + $(RM) $(DESTDIR)$(PREFIX)/$(LIBDIR)/lib$(NAME).so.$(LIBMAJOR) + ln -sf lib$(NAME).so.$(LIBVERSION) $(DESTDIR)$(PREFIX)/$(LIBDIR)/lib$(NAME).so.$(LIBMAJOR) + ln -sf lib$(NAME).so.$(LIBMAJOR) $(DESTDIR)$(PREFIX)/$(LIBDIR)/lib$(NAME).so + ++install-includes: ++ install -d -m 0755 $(DESTDIR)$(PREFIX)/$(INCDIR) ++ install -m 0644 jitterentropy.h $(DESTDIR)$(PREFIX)/$(INCDIR)/ ++ install -m 0644 jitterentropy-base-user.h $(DESTDIR)$(PREFIX)/$(INCDIR)/ ++ ++install-static: ++ install -d -m 0755 $(DESTDIR)$(PREFIX)/$(LIBDIR) ++ install -m 0755 lib$(NAME).a $(DESTDIR)$(PREFIX)/$(LIBDIR)/ ++ + clean: + @- $(RM) $(NAME) + @- $(RM) $(OBJS) +-- +2.23.0 + diff --git a/package/jitterentropy-library/0003-Makefile-allow-the-user-to-disable-stack-protector.patch b/package/jitterentropy-library/0003-Makefile-allow-the-user-to-disable-stack-protector.patch new file mode 100644 index 00000000..eeff0a0f --- /dev/null +++ b/package/jitterentropy-library/0003-Makefile-allow-the-user-to-disable-stack-protector.patch @@ -0,0 +1,36 @@ +From 37e8a6a7e5875e20a8de07fbfbb69912f1964f7d Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 28 Oct 2019 09:47:49 +0100 +Subject: [PATCH] Makefile: allow the user to disable stack protector + +Allow the user to disable stack-protector by overriding CFLAGS as it is +not supported by all toolchains. + +Fixes: + - http://autobuild.buildroot.net/results/cba1ae830c7a4d1740098fe67aec59b4dc2f9a03 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/smuellerDD/jitterentropy-library/pull/12] +--- + Makefile | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Makefile b/Makefile +index 41bc4f7..b0f20e2 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,9 +1,9 @@ + # Compile Noise Source as user space application + + CC ?= gcc +-CFLAGS +=-Wextra -Wall -pedantic -fPIC -O0 + #Hardening +-CFLAGS +=-fstack-protector-all -fwrapv --param ssp-buffer-size=4 ++CFLAGS ?=-fstack-protector-all --param ssp-buffer-size=4 ++CFLAGS +=-Wextra -Wall -pedantic -fPIC -O0 -fwrapv + LDFLAGS +=-Wl,-z,relro,-z,now + + # Change as necessary +-- +2.23.0 + diff --git a/package/jitterentropy-library/Config.in b/package/jitterentropy-library/Config.in new file mode 100644 index 00000000..02f8ff61 --- /dev/null +++ b/package/jitterentropy-library/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_JITTERENTROPY_LIBRARY + bool "libjitterentropy" + help + Hardware RNG based on CPU timing jitter. + + https://github.com/smuellerDD/jitterentropy-library diff --git a/package/jitterentropy-library/jitterentropy-library.hash b/package/jitterentropy-library/jitterentropy-library.hash new file mode 100644 index 00000000..5ff38f6f --- /dev/null +++ b/package/jitterentropy-library/jitterentropy-library.hash @@ -0,0 +1,5 @@ +# Locally computed +sha256 42d4bd1050b5f0d7b45b5453e5b6cfc45c0492bb428791f571d8f69b066351a4 jitterentropy-library-2.2.0.tar.gz +sha256 96b5a6b49aaeeba9036f9b80e6e299d613a8eca158741a25a67dc78792413e23 COPYING +sha256 13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239 COPYING.bsd +sha256 e6d6a009505e345fe949e1310334fcb0747f28dae2856759de102ab66b722cb4 COPYING.gplv2 diff --git a/package/jitterentropy-library/jitterentropy-library.mk b/package/jitterentropy-library/jitterentropy-library.mk new file mode 100644 index 00000000..d9dc031c --- /dev/null +++ b/package/jitterentropy-library/jitterentropy-library.mk @@ -0,0 +1,42 @@ +################################################################################ +# +# jitterentropy-library +# +################################################################################ + +JITTERENTROPY_LIBRARY_VERSION = 2.2.0 +JITTERENTROPY_LIBRARY_SITE = $(call github,smuellerDD,$(JITTERENTROPY_LIBRARY_NAME),v$(JITTERENTROPY_LIBRARY_VERSION)) +JITTERENTROPY_LIBRARY_LICENSE = GPL-2.0 or BSD-3-Clause +JITTERENTROPY_LIBRARY_LICENSE_FILES = COPYING COPYING.bsd COPYING.gplv2 +JITTERENTROPY_LIBRARY_INSTALL_STAGING = YES +JITTERENTROPY_LIBRARY_INSTALL_TARGETS = install-includes +JITTERENTROPY_LIBRARY_SELINUX_MODULES = entropyd + +ifeq ($(BR2_STATIC_LIBS)$(BR2_SHARED_STATIC_LIBS),y) +JITTERENTROPY_LIBRARY_BUILD_TARGETS += jitterentropy-static +JITTERENTROPY_LIBRARY_INSTALL_TARGETS += install-static +endif + +ifeq ($(BR2_SHARED_LIBS)$(BR2_SHARED_STATIC_LIBS),y) +JITTERENTROPY_LIBRARY_BUILD_TARGETS += jitterentropy +JITTERENTROPY_LIBRARY_INSTALL_TARGETS += install-shared +endif + +define JITTERENTROPY_LIBRARY_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + $(JITTERENTROPY_LIBRARY_BUILD_TARGETS) +endef + +define JITTERENTROPY_LIBRARY_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) \ + INSTALL_STRIP="install" PREFIX=/usr \ + $(JITTERENTROPY_LIBRARY_INSTALL_TARGETS) +endef + +define JITTERENTROPY_LIBRARY_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) \ + INSTALL_STRIP="install" PREFIX=/usr \ + $(JITTERENTROPY_LIBRARY_INSTALL_TARGETS) +endef + +$(eval $(generic-package)) diff --git a/package/jo/Config.in b/package/jo/Config.in new file mode 100644 index 00000000..c5532c21 --- /dev/null +++ b/package/jo/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_JO + bool "jo" + help + Command-line processor to output JSON from a shell + + https://github.com/jpmens/jo diff --git a/package/jo/jo.hash b/package/jo/jo.hash new file mode 100644 index 00000000..8f1cc8fc --- /dev/null +++ b/package/jo/jo.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 24c64d2eb863900947f58f32b502c95fec8f086105fd31151b91f54b7b5256a2 jo-1.4.tar.gz +sha256 41d8b23dc6e76731f4920b9ce42d0d4a248d243a510319e2441d174a115f35cf COPYING diff --git a/package/jo/jo.mk b/package/jo/jo.mk new file mode 100644 index 00000000..24b499f3 --- /dev/null +++ b/package/jo/jo.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# jo +# +################################################################################ + +JO_VERSION = 1.4 +JO_SITE = https://github.com/jpmens/jo/releases/download/$(JO_VERSION) +JO_LICENSE = MIT (json.[ch]), GPL-2.0+ (rest) +JO_LICENSE_FILES = COPYING +# don't build man pages +JO_CONF_ENV = ac_cv_path_PANDOC='' + +$(eval $(autotools-package)) diff --git a/package/joe/Config.in b/package/joe/Config.in new file mode 100644 index 00000000..c9dd967b --- /dev/null +++ b/package/joe/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_JOE + bool "joe" + depends on BR2_USE_MMU # fork() + help + Joe's Own Editor + + JOE is an easy-to-use, full featured terminal-based screen + editor. Its behavior is a blending of WordStar and GNU-EMACS + (but it does not use code from either program). + It is a great editor for new users or as an alternative to vi. + + http://joe-editor.sf.net + +config BR2_PACKAGE_JOE_FULL + bool "full install of rc and syntax highlighting files" + default y + depends on BR2_PACKAGE_JOE + help + Install all rc and syntax highlighting files. Without this + option only the joe binary is installed, which contains a + default configuration. diff --git a/package/joe/joe.hash b/package/joe/joe.hash new file mode 100644 index 00000000..1e2de422 --- /dev/null +++ b/package/joe/joe.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/joe-editor/files/JOE%20sources/joe-4.6/ +sha1 da7712333f676cfb5ae9f3565fd2225c5a2185ca joe-4.6.tar.gz +md5 9017484e6116830d846678b625ea5c43 joe-4.6.tar.gz +# Locally computed: +sha256 495a0a61f26404070fe8a719d80406dc7f337623788e445b92a9f6de512ab9de joe-4.6.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/joe/joe.mk b/package/joe/joe.mk new file mode 100644 index 00000000..f0cac402 --- /dev/null +++ b/package/joe/joe.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# joe +# +################################################################################ + +JOE_VERSION = 4.6 +JOE_SITE = http://downloads.sourceforge.net/project/joe-editor/JOE%20sources/joe-$(JOE_VERSION) +JOE_LICENSE = GPL-2.0+ +JOE_LICENSE_FILES = COPYING + +ifeq ($(BR2_PACKAGE_NCURSES),y) +JOE_DEPENDENCIES += ncurses +JOE_CONF_OPTS += --enable-curses +else +JOE_CONF_OPTS += --disable-curses +endif + +ifneq ($(BR2_PACKAGE_JOE_FULL),y) +define JOE_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/joe/joe $(TARGET_DIR)/usr/bin/joe +endef +endif + +$(eval $(autotools-package)) diff --git a/package/jose/0001-lib-hsh.c-rename-hsh-local-variable.patch b/package/jose/0001-lib-hsh.c-rename-hsh-local-variable.patch new file mode 100644 index 00000000..0bd259ad --- /dev/null +++ b/package/jose/0001-lib-hsh.c-rename-hsh-local-variable.patch @@ -0,0 +1,71 @@ +From 591fc6da944ffc29936e0019b2bc225ddc81dbba Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Mon, 20 Nov 2017 22:48:33 +0100 +Subject: [PATCH] lib/hsh.c: rename hsh local variable + +The hsh local variable name conflicts with the function prototype of +hsh() in hsh.h, causing the following build issues with old compilers +(gcc 4.7): + +hsh.c: In function 'hsh': +hsh.c:28:21: error: declaration of 'hsh' shadows a global declaration [-Werror=shadow] +hsh.c:26:1: error: shadowed declaration is here [-Werror=shadow] +hsh.c: In function 'hsh_buf': +hsh.c:60:21: error: declaration of 'hsh' shadows a global declaration [-Werror=shadow] +hsh.c:26:1: error: shadowed declaration is here [-Werror=shadow] + +Therefore, we rename this local variable to _hsh. + +Submitted-upstream: https://github.com/latchset/jose/pull/51 +Signed-off-by: Thomas Petazzoni +--- + lib/hsh.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/lib/hsh.c b/lib/hsh.c +index c59a95f..a2a891b 100644 +--- a/lib/hsh.c ++++ b/lib/hsh.c +@@ -25,7 +25,7 @@ + json_t * + hsh(jose_cfg_t *cfg, const char *alg, const void *data, size_t dlen) + { +- jose_io_auto_t *hsh = NULL; ++ jose_io_auto_t *_hsh = NULL; + jose_io_auto_t *enc = NULL; + jose_io_auto_t *buf = NULL; + char b[1024] = {}; +@@ -33,8 +33,8 @@ hsh(jose_cfg_t *cfg, const char *alg, const void *data, size_t dlen) + + buf = jose_io_buffer(cfg, b, &l); + enc = jose_b64_enc_io(buf); +- hsh = hsh_io(cfg, alg, enc); +- if (!buf || !enc || !hsh || !hsh->feed(hsh, data, dlen) || !hsh->done(hsh)) ++ _hsh = hsh_io(cfg, alg, enc); ++ if (!buf || !enc || !_hsh || !_hsh->feed(_hsh, data, dlen) || !_hsh->done(_hsh)) + return NULL; + + return json_stringn(b, l); +@@ -57,7 +57,7 @@ hsh_buf(jose_cfg_t *cfg, const char *alg, + const void *data, size_t dlen, void *hash, size_t hlen) + { + const jose_hook_alg_t *a = NULL; +- jose_io_auto_t *hsh = NULL; ++ jose_io_auto_t *_hsh = NULL; + jose_io_auto_t *buf = NULL; + + a = jose_hook_alg_find(JOSE_HOOK_ALG_KIND_HASH, alg); +@@ -71,8 +71,8 @@ hsh_buf(jose_cfg_t *cfg, const char *alg, + return SIZE_MAX; + + buf = jose_io_buffer(cfg, hash, &hlen); +- hsh = a->hash.hsh(a, cfg, buf); +- if (!buf || !hsh || !hsh->feed(hsh, data, dlen) || !hsh->done(hsh)) ++ _hsh = a->hash.hsh(a, cfg, buf); ++ if (!buf || !_hsh || !_hsh->feed(_hsh, data, dlen) || !_hsh->done(_hsh)) + return SIZE_MAX; + + return hlen; +-- +2.13.6 + diff --git a/package/jose/0002-configure-fix-build-with-old-compilers.patch b/package/jose/0002-configure-fix-build-with-old-compilers.patch new file mode 100644 index 00000000..0484f38f --- /dev/null +++ b/package/jose/0002-configure-fix-build-with-old-compilers.patch @@ -0,0 +1,165 @@ +From 98e9faa4d39cd5b6aaab882877e19ae394ba3810 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Mon, 20 Nov 2017 23:10:38 +0100 +Subject: [PATCH] configure: fix build with old compilers + +Old gcc versions (gcc 4.7) do not support all warnings flags currently +hard-coded by configure.ac. In order to fix this, we import the +AX_CHECK_COMPILE_FLAG() macro from the autoconf-archive, and use it in +the configure.ac to only use warning flags when the compiler supports +them. + +Submitted-upstream: https://github.com/latchset/jose/pull/51 +Signed-off-by: Thomas Petazzoni +--- + configure.ac | 46 +++++++++++++++------------- + m4/ax_check_compile_flag.m4 | 74 +++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 105 insertions(+), 22 deletions(-) + create mode 100644 m4/ax_check_compile_flag.m4 + +diff --git a/configure.ac b/configure.ac +index cf8c9a6..6fe4ded 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1,5 +1,6 @@ + AC_PREREQ(2.62) + AC_INIT(jose, 10) ++AC_CONFIG_MACRO_DIRS([m4]) + AC_CANONICAL_SYSTEM + AC_PROG_CC_C99 + +@@ -18,27 +19,30 @@ PKG_CHECK_MODULES([libcrypto], [libcrypto >= 1.0.2]) + AC_OPENMP + AC_SUBST([OPENMP_CFLAGS]) + +-JOSE_CFLAGS="\ +--Wall \ +--Wextra \ +--Werror \ +--Wstrict-aliasing \ +--Wchar-subscripts \ +--Wformat-security \ +--Wmissing-declarations \ +--Wmissing-prototypes \ +--Wnested-externs \ +--Wpointer-arith \ +--Wshadow \ +--Wsign-compare \ +--Wstrict-prototypes \ +--Wtype-limits \ +--Wunused-function \ +--Wno-missing-field-initializers \ +--Wno-unused-command-line-argument \ +--Wno-unused-parameter \ +--Wno-unknown-pragmas \ +-" ++for flag in \ ++ -Wall \ ++ -Wextra \ ++ -Werror \ ++ -Wstrict-aliasing \ ++ -Wchar-subscripts \ ++ -Wformat-security \ ++ -Wmissing-declarations \ ++ -Wmissing-prototypes \ ++ -Wnested-externs \ ++ -Wpointer-arith \ ++ -Wshadow \ ++ -Wsign-compare \ ++ -Wstrict-prototypes \ ++ -Wtype-limits \ ++ -Wunused-function \ ++ -Wno-missing-field-initializers \ ++ -Wno-unused-command-line-argument \ ++ -Wno-unused-parameter \ ++ -Wno-unknown-pragmas ; do ++ AX_CHECK_COMPILE_FLAG([${flag}], ++ [JOSE_CFLAGS="${JOSE_CFLAGS} ${flag}"]) ++done ++ + AC_SUBST([JOSE_CFLAGS]) + + AC_MSG_CHECKING([for linker script support]) +diff --git a/m4/ax_check_compile_flag.m4 b/m4/ax_check_compile_flag.m4 +new file mode 100644 +index 0000000..dcabb92 +--- /dev/null ++++ b/m4/ax_check_compile_flag.m4 +@@ -0,0 +1,74 @@ ++# =========================================================================== ++# https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html ++# =========================================================================== ++# ++# SYNOPSIS ++# ++# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) ++# ++# DESCRIPTION ++# ++# Check whether the given FLAG works with the current language's compiler ++# or gives an error. (Warnings, however, are ignored) ++# ++# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on ++# success/failure. ++# ++# If EXTRA-FLAGS is defined, it is added to the current language's default ++# flags (e.g. CFLAGS) when the check is done. The check is thus made with ++# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to ++# force the compiler to issue an error when a bad flag is given. ++# ++# INPUT gives an alternative input source to AC_COMPILE_IFELSE. ++# ++# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this ++# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. ++# ++# LICENSE ++# ++# Copyright (c) 2008 Guido U. Draheim ++# Copyright (c) 2011 Maarten Bosmans ++# ++# 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 3 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, see . ++# ++# As a special exception, the respective Autoconf Macro's copyright owner ++# gives unlimited permission to copy, distribute and modify the configure ++# scripts that are the output of Autoconf when processing the Macro. You ++# need not follow the terms of the GNU General Public License when using ++# or distributing such scripts, even though portions of the text of the ++# Macro appear in them. The GNU General Public License (GPL) does govern ++# all other use of the material that constitutes the Autoconf Macro. ++# ++# This special exception to the GPL applies to versions of the Autoconf ++# Macro released by the Autoconf Archive. When you make and distribute a ++# modified version of the Autoconf Macro, you may extend this special ++# exception to the GPL to apply to your modified version as well. ++ ++#serial 5 ++ ++AC_DEFUN([AX_CHECK_COMPILE_FLAG], ++[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF ++AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl ++AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ ++ ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS ++ _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" ++ AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], ++ [AS_VAR_SET(CACHEVAR,[yes])], ++ [AS_VAR_SET(CACHEVAR,[no])]) ++ _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) ++AS_VAR_IF(CACHEVAR,yes, ++ [m4_default([$2], :)], ++ [m4_default([$3], :)]) ++AS_VAR_POPDEF([CACHEVAR])dnl ++])dnl AX_CHECK_COMPILE_FLAGS +-- +2.13.6 + diff --git a/package/jose/Config.in b/package/jose/Config.in new file mode 100644 index 00000000..4a9ed8da --- /dev/null +++ b/package/jose/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_JOSE + bool "jose" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_JANSSON + select BR2_PACKAGE_OPENSSL + help + C-language implementation of Javascript Object Signing and + Encryption. + + https://github.com/latchset/jose + +comment "jose needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/jose/jose.hash b/package/jose/jose.hash new file mode 100644 index 00000000..376bc0b5 --- /dev/null +++ b/package/jose/jose.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 5c9cdcfb535c4d9f781393d7530521c72b1dd81caa9934cab6dd752cc7efcd72 jose-10.tar.bz2 +sha256 09e8a9bcec8067104652c168685ab0931e7868f9c8284b66f5ae6edae5f1130b COPYING diff --git a/package/jose/jose.mk b/package/jose/jose.mk new file mode 100644 index 00000000..2758d408 --- /dev/null +++ b/package/jose/jose.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# jose +# +################################################################################ + +JOSE_VERSION = 10 +JOSE_SOURCE = jose-$(JOSE_VERSION).tar.bz2 +JOSE_SITE = https://github.com/latchset/jose/releases/download/v$(JOSE_VERSION) +JOSE_LICENSE = Apache-2.0 +JOSE_LICENSE_FILES = COPYING +# 0002-configure-fix-build-with-old-compilers.patch +JOSE_AUTORECONF = YES +JOSE_INSTALL_STAGING = YES +JOSE_DEPENDENCIES = host-pkgconf zlib jansson openssl + +$(eval $(autotools-package)) diff --git a/package/jpeg-turbo/Config.in.options b/package/jpeg-turbo/Config.in.options new file mode 100644 index 00000000..8654b309 --- /dev/null +++ b/package/jpeg-turbo/Config.in.options @@ -0,0 +1,11 @@ +if BR2_PACKAGE_JPEG_TURBO + +config BR2_PACKAGE_JPEG_TURBO_TOOLS + bool "jpeg-turbo tools" + help + Libjpeg-turbo can also provide some tools like cjpeg, + djpeg, jpegtran, rdjpgcom, tjbench and wrjpgcom. + + If you want to keep them enable this option. + +endif diff --git a/package/jpeg-turbo/jpeg-turbo.hash b/package/jpeg-turbo/jpeg-turbo.hash new file mode 100644 index 00000000..1a22b1d6 --- /dev/null +++ b/package/jpeg-turbo/jpeg-turbo.hash @@ -0,0 +1,7 @@ +# From https://sourceforge.net/projects/libjpeg-turbo/files/2.0.6/ +sha1 5406c7676d7df89fb4da791ad5af51202910fb25 libjpeg-turbo-2.0.6.tar.gz +md5 4cada3f0bdc93d826fa31bf9e4469ef6 libjpeg-turbo-2.0.6.tar.gz +# Locally computed +sha256 d74b92ac33b0e3657123ddcf6728788c90dc84dcb6a52013d758af3c4af481bb libjpeg-turbo-2.0.6.tar.gz +sha256 0b7a24c3906d26dfbe24e96e9415549b387c3227140dc6b7ab2fb924254e37a1 LICENSE.md +sha256 01ccef626ec864773c681d4a4056f72af9052d619e0609df0d369117f8b3efdf README.ijg diff --git a/package/jpeg-turbo/jpeg-turbo.mk b/package/jpeg-turbo/jpeg-turbo.mk new file mode 100644 index 00000000..5c977dc0 --- /dev/null +++ b/package/jpeg-turbo/jpeg-turbo.mk @@ -0,0 +1,53 @@ +################################################################################ +# +# jpeg-turbo +# +################################################################################ + +JPEG_TURBO_VERSION = 2.0.6 +JPEG_TURBO_SOURCE = libjpeg-turbo-$(JPEG_TURBO_VERSION).tar.gz +JPEG_TURBO_SITE = https://downloads.sourceforge.net/project/libjpeg-turbo/$(JPEG_TURBO_VERSION) +JPEG_TURBO_LICENSE = IJG (libjpeg), BSD-3-Clause (TurboJPEG), Zlib (SIMD) +JPEG_TURBO_LICENSE_FILES = LICENSE.md README.ijg +JPEG_TURBO_CPE_ID_VENDOR = libjpeg-turbo +JPEG_TURBO_CPE_ID_PRODUCT = libjpeg-turbo +JPEG_TURBO_INSTALL_STAGING = YES +JPEG_TURBO_PROVIDES = jpeg +JPEG_TURBO_DEPENDENCIES = host-pkgconf + +JPEG_TURBO_CONF_OPTS = -DWITH_JPEG8=ON + +ifeq ($(BR2_STATIC_LIBS),y) +JPEG_TURBO_CONF_OPTS += -DENABLE_STATIC=ON -DENABLE_SHARED=OFF +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +JPEG_TURBO_CONF_OPTS += -DENABLE_STATIC=ON -DENABLE_SHARED=ON +else ifeq ($(BR2_SHARED_LIBS),y) +JPEG_TURBO_CONF_OPTS += -DENABLE_STATIC=OFF -DENABLE_SHARED=ON +endif + +ifeq ($(BR2_PACKAGE_JPEG_SIMD_SUPPORT),y) +JPEG_TURBO_CONF_OPTS += -DWITH_SIMD=ON +# x86 simd support needs nasm +JPEG_TURBO_DEPENDENCIES += $(if $(BR2_X86_CPU_HAS_MMX),host-nasm) +else +JPEG_TURBO_CONF_OPTS += -DWITH_SIMD=OFF +endif + +# Ensure that jpeg-turbo is compiled with -fPIC to allow linking the static +# libraries with dynamically linked programs. This is not a requirement +# for most architectures but is mandatory for ARM. +# This allow to avoid link issues with BR2_SSP_ALL: +# jsimd_none.c.o: relocation R_AARCH64_ADR_PREL_PG_HI21 against external symbol `__stack_chk_guard@@GLIBC_2.17' +# can not be used when making a shared object; recompile with -fPIC +ifeq ($(BR2_STATIC_LIBS),) +JPEG_TURBO_CONF_OPTS += -DCMAKE_POSITION_INDEPENDENT_CODE=ON +endif + +ifeq ($(BR2_PACKAGE_JPEG_TURBO_TOOLS),) +define JPEG_TURBO_REMOVE_TOOLS + rm -f $(addprefix $(TARGET_DIR)/usr/bin/,cjpeg djpeg jpegtran rdjpgcom tjbench wrjpgcom) +endef +JPEG_TURBO_POST_INSTALL_TARGET_HOOKS += JPEG_TURBO_REMOVE_TOOLS +endif + +$(eval $(cmake-package)) diff --git a/package/jpeg/Config.in b/package/jpeg/Config.in new file mode 100644 index 00000000..0a786060 --- /dev/null +++ b/package/jpeg/Config.in @@ -0,0 +1,56 @@ +# jpeg-turbo has simd support for some architectures +config BR2_PACKAGE_JPEG_SIMD_SUPPORT + bool + default y if BR2_X86_CPU_HAS_MMX + default y if BR2_ARM_CPU_HAS_NEON + default y if BR2_POWERPC_CPU_HAS_ALTIVEC + default y if BR2_aarch64 || BR2_aarch64_be + +config BR2_PACKAGE_JPEG + bool "jpeg support" + help + Select the desired JPEG library provider. + +if BR2_PACKAGE_JPEG + +choice + prompt "jpeg variant" + default BR2_PACKAGE_JPEG_TURBO if BR2_PACKAGE_JPEG_SIMD_SUPPORT + help + Select the normal libjpeg or libjpeg-turbo. + +config BR2_PACKAGE_LIBJPEG + bool "jpeg" + select BR2_PACKAGE_HAS_JPEG + help + The ubiquitous C library for manipulating JPEG images. + + http://www.ijg.org/ + +config BR2_PACKAGE_JPEG_TURBO + bool "jpeg-turbo" + select BR2_PACKAGE_HAS_JPEG + help + Libjpeg-turbo is a derivative of libjpeg that uses SIMD + instructions (MMX, SSE2, NEON) to accelerate baseline JPEG + compression and decompression on x86, x86-64, and ARM + systems. + + http://www.libjpeg-turbo.org + +# libjpeg from br2-external trees, if any +source "$BR2_BASE_DIR/.br2-external.in.jpeg" + +endchoice + +source "package/jpeg-turbo/Config.in.options" + +config BR2_PACKAGE_HAS_JPEG + bool + +config BR2_PACKAGE_PROVIDES_JPEG + string + default "libjpeg" if BR2_PACKAGE_LIBJPEG + default "jpeg-turbo" if BR2_PACKAGE_JPEG_TURBO + +endif diff --git a/package/jpeg/jpeg.mk b/package/jpeg/jpeg.mk new file mode 100644 index 00000000..2d56be6a --- /dev/null +++ b/package/jpeg/jpeg.mk @@ -0,0 +1,7 @@ +################################################################################ +# +# jpeg +# +################################################################################ + +$(eval $(virtual-package)) diff --git a/package/jq/Config.in b/package/jq/Config.in new file mode 100644 index 00000000..5edb5d09 --- /dev/null +++ b/package/jq/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_JQ + bool "jq" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + jq is like sed for JSON data - you can use it to slice and + filter and map and transform structured data with the same + ease that sed, awk, grep and friends let you play with text. + + http://stedolan.github.io/jq/ + +comment "jq needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/jq/Config.in.host b/package/jq/Config.in.host new file mode 100644 index 00000000..9fc0e990 --- /dev/null +++ b/package/jq/Config.in.host @@ -0,0 +1,11 @@ +config BR2_PACKAGE_HOST_JQ + bool "host jq" + help + jq is like sed for JSON data - you can use it to slice and + filter and map and transform structured data with the same + ease that sed, awk, grep and friends let you play with text. + + As a host tool, jq can be useful to create/edit/merge/check + JSON files from a post-build script. + + http://stedolan.github.io/jq/ diff --git a/package/jq/jq.hash b/package/jq/jq.hash new file mode 100644 index 00000000..12578138 --- /dev/null +++ b/package/jq/jq.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 20249104d4df2247253df6df4a980b8be1f5232f03fef7cd41bacb7e6eab04fd jq-a17dd3248a666d01be75f6b16be37e80e20b0954.tar.gz +sha256 c8437d414ca5b394718784c3bf5bdff7f01fee417625fabf1fb722ca263037da COPYING diff --git a/package/jq/jq.mk b/package/jq/jq.mk new file mode 100644 index 00000000..7f890f89 --- /dev/null +++ b/package/jq/jq.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# jq +# +################################################################################ + +JQ_VERSION = a17dd3248a666d01be75f6b16be37e80e20b0954 +JQ_SITE = $(call github,stedolan,jq,$(JQ_VERSION)) +JQ_LICENSE = MIT (code), ICU (decNumber), CC-BY-3.0 (documentation) +JQ_LICENSE_FILES = COPYING +JQ_CPE_ID_VENDOR = jq_project +JQ_INSTALL_STAGING = YES + +# currently using git version directly +JQ_AUTORECONF = YES + +# uses c99 specific features +# _GNU_SOURCE added to fix gcc6+ host compilation +# (https://github.com/stedolan/jq/issues/1598) +JQ_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) -std=c99 -D_GNU_SOURCE" +HOST_JQ_CONF_ENV += CFLAGS="$(HOST_CFLAGS) -std=c99 -D_GNU_SOURCE" + +# jq explicitly enables maintainer mode, which we don't need/want +JQ_CONF_OPTS += --disable-maintainer-mode +HOST_JQ_CONF_OPTS += --disable-maintainer-mode --without-oniguruma + +ifeq ($(BR2_PACKAGE_ONIGURUMA),y) +JQ_DEPENDENCIES += oniguruma +JQ_CONF_OPTS += --with-oniguruma +else +JQ_CONF_OPTS += --without-oniguruma +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/jquery-datetimepicker/Config.in b/package/jquery-datetimepicker/Config.in new file mode 100644 index 00000000..9da37188 --- /dev/null +++ b/package/jquery-datetimepicker/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_JQUERY_DATETIMEPICKER + bool "jquery-datetimepicker" + help + Use this plugin to unobtrusively add a datetimepicker, + datepicker or timepicker dropdown to your forms. + + http://xdsoft.net/jqplugins/datetimepicker diff --git a/package/jquery-datetimepicker/jquery-datetimepicker.hash b/package/jquery-datetimepicker/jquery-datetimepicker.hash new file mode 100644 index 00000000..1fbd428e --- /dev/null +++ b/package/jquery-datetimepicker/jquery-datetimepicker.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 2f362a8acd149d1487a9460942f135d1037f01ee0cbfecba8c352fa2f79c34c9 jquery-datetimepicker-2.4.5.tar.gz +sha256 491add640b4678b78571d3b4c0840422b48a5b397e47e2104c1942ff1fce1a68 MIT-LICENSE.txt diff --git a/package/jquery-datetimepicker/jquery-datetimepicker.mk b/package/jquery-datetimepicker/jquery-datetimepicker.mk new file mode 100644 index 00000000..e4d47997 --- /dev/null +++ b/package/jquery-datetimepicker/jquery-datetimepicker.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# jquery-datetimepicker +# +################################################################################ + +JQUERY_DATETIMEPICKER_VERSION = 2.4.5 +JQUERY_DATETIMEPICKER_SITE = $(call github,xdan,datetimepicker,$(JQUERY_DATETIMEPICKER_VERSION)) +JQUERY_DATETIMEPICKER_LICENSE = MIT +JQUERY_DATETIMEPICKER_LICENSE_FILES = MIT-LICENSE.txt + +define JQUERY_DATETIMEPICKER_INSTALL_TARGET_CMDS + $(INSTALL) -m 0644 -D $(@D)/jquery.datetimepicker.css \ + $(TARGET_DIR)/var/www/jquery-plugins/datetimepicker/jquery.datetimepicker.css + $(INSTALL) -m 0644 -D $(@D)/jquery.datetimepicker.js \ + $(TARGET_DIR)/var/www/jquery-plugins/datetimepicker/jquery.datetimepicker.js +endef + +$(eval $(generic-package)) diff --git a/package/jquery-keyboard/Config.in b/package/jquery-keyboard/Config.in new file mode 100644 index 00000000..117c4a56 --- /dev/null +++ b/package/jquery-keyboard/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_JQUERY_KEYBOARD + bool "jquery-keyboard" + select BR2_PACKAGE_JQUERY_UI + help + Virtual Keyboard using jQuery UI + + https://github.com/Mottie/Keyboard diff --git a/package/jquery-keyboard/jquery-keyboard.hash b/package/jquery-keyboard/jquery-keyboard.hash new file mode 100644 index 00000000..a0d9d7d8 --- /dev/null +++ b/package/jquery-keyboard/jquery-keyboard.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 6a20a1cdc9367c218048125eeb6f78d775175a964b3b9b781a931b63c0f98c66 jquery-keyboard-1.18.12.tar.gz +sha256 0ad9a0e7291b45cdb5abe2a517d8b82282a816d41c9224660849792ce01fe983 README.markdown diff --git a/package/jquery-keyboard/jquery-keyboard.mk b/package/jquery-keyboard/jquery-keyboard.mk new file mode 100644 index 00000000..5066aa2c --- /dev/null +++ b/package/jquery-keyboard/jquery-keyboard.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# jquery-keyboard +# +################################################################################ + +JQUERY_KEYBOARD_VERSION = 1.18.12 +JQUERY_KEYBOARD_SITE = $(call github,Mottie,Keyboard,v$(JQUERY_KEYBOARD_VERSION)) +JQUERY_KEYBOARD_LICENSE = MIT WTFPL +JQUERY_KEYBOARD_LICENSE_FILES = README.markdown + +define JQUERY_KEYBOARD_INSTALL_TARGET_CMDS + $(INSTALL) -m 0644 -D $(@D)/css/keyboard.css \ + $(TARGET_DIR)/var/www/css/keyboard.css + $(INSTALL) -m 0644 $(@D)/js/jquery.keyboard*.js \ + $(TARGET_DIR)/var/www + $(INSTALL) -m 0644 -D $(@D)/js/jquery.mousewheel.js \ + $(TARGET_DIR)/var/www/jquery.mousewheel.js + $(INSTALL) -m 0755 -d $(TARGET_DIR)/var/www/layouts + $(INSTALL) -m 0644 $(@D)/layouts/*.js \ + $(TARGET_DIR)/var/www/layouts +endef + +$(eval $(generic-package)) diff --git a/package/jquery-mobile/Config.in b/package/jquery-mobile/Config.in new file mode 100644 index 00000000..fa31a363 --- /dev/null +++ b/package/jquery-mobile/Config.in @@ -0,0 +1,25 @@ +config BR2_PACKAGE_JQUERY_MOBILE + bool "jquery-mobile" + help + jQuery-Mobile is a unified, HTML5-based user interface + system for all popular mobile device platforms, built on the + rock-solid jQuery and jQuery UI foundation. Its lightweight + code is built with progressive enhancement, and has a + flexible, easily themeable design. + + http://jquerymobile.com + +if BR2_PACKAGE_JQUERY_MOBILE + +config BR2_PACKAGE_JQUERY_MOBILE_FULL + bool "jquery-mobile development files" + help + Installs the development versions. + +config BR2_PACKAGE_JQUERY_MOBILE_DEMOS + bool "jquery-mobile demo files" + help + Installs the demo files. + The main demo page is http://hostname/demos/index.html + +endif diff --git a/package/jquery-mobile/jquery-mobile.hash b/package/jquery-mobile/jquery-mobile.hash new file mode 100644 index 00000000..3dfaa07a --- /dev/null +++ b/package/jquery-mobile/jquery-mobile.hash @@ -0,0 +1,2 @@ +# locally computed +sha256 7ed156b191dc3e262e3f450aede43adfb738ff0085afed87eb18fe4f43dfc681 jquery.mobile-1.4.3.zip diff --git a/package/jquery-mobile/jquery-mobile.mk b/package/jquery-mobile/jquery-mobile.mk new file mode 100644 index 00000000..1171e60d --- /dev/null +++ b/package/jquery-mobile/jquery-mobile.mk @@ -0,0 +1,47 @@ +################################################################################ +# +# jquery-mobile +# +################################################################################ + +JQUERY_MOBILE_VERSION = 1.4.3 +JQUERY_MOBILE_SITE = http://jquerymobile.com/resources/download +JQUERY_MOBILE_SOURCE = jquery.mobile-$(JQUERY_MOBILE_VERSION).zip +JQUERY_MOBILE_LICENSE = MIT + +define JQUERY_MOBILE_EXTRACT_CMDS + $(UNZIP) -d $(@D) $(JQUERY_MOBILE_DL_DIR)/$(JQUERY_MOBILE_SOURCE) +endef + +JQUERY_MOBILE_INSTALLED_FILES = \ + jquery.mobile.structure-$(JQUERY_MOBILE_VERSION).min.css \ + jquery.mobile.theme-$(JQUERY_MOBILE_VERSION).min.css \ + jquery.mobile-$(JQUERY_MOBILE_VERSION).min.css \ + jquery.mobile-$(JQUERY_MOBILE_VERSION).min.map \ + jquery.mobile-$(JQUERY_MOBILE_VERSION).min.js + +ifeq ($(BR2_PACKAGE_JQUERY_MOBILE_FULL),y) +JQUERY_MOBILE_INSTALLED_FILES += \ + jquery.mobile.structure-$(JQUERY_MOBILE_VERSION).css \ + jquery.mobile.theme-$(JQUERY_MOBILE_VERSION).css \ + jquery.mobile-$(JQUERY_MOBILE_VERSION).css \ + jquery.mobile-$(JQUERY_MOBILE_VERSION).js +endif + +ifeq ($(BR2_PACKAGE_JQUERY_MOBILE_DEMOS),y) +define JQUERY_MOBILE_INSTALL_DEMOS + mkdir -p $(TARGET_DIR)/var/www/demos + cp -r $(@D)/demos/* $(TARGET_DIR)/var/www/demos +endef +endif + +define JQUERY_MOBILE_INSTALL_TARGET_CMDS + for f in $(JQUERY_MOBILE_INSTALLED_FILES) ; do \ + $(INSTALL) -m 0644 -D $(@D)/$$f $(TARGET_DIR)/var/www/$$f || break ; \ + done + mkdir -p $(TARGET_DIR)/var/www/images + cp -r $(@D)/images/* $(TARGET_DIR)/var/www/images + $(JQUERY_MOBILE_INSTALL_DEMOS) +endef + +$(eval $(generic-package)) diff --git a/package/jquery-sidebar/Config.in b/package/jquery-sidebar/Config.in new file mode 100644 index 00000000..324a20c2 --- /dev/null +++ b/package/jquery-sidebar/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_JQUERY_SIDEBAR + bool "jquery-sidebar" + help + A stupid simple sidebar jQuery plugin. + + http://jillix.github.io/jQuery-sidebar/ diff --git a/package/jquery-sidebar/jquery-sidebar.hash b/package/jquery-sidebar/jquery-sidebar.hash new file mode 100644 index 00000000..5d336fee --- /dev/null +++ b/package/jquery-sidebar/jquery-sidebar.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 c96e46439a87555f2200442f597cce64f21f81f94d7601ddfc3b837913ddb42f jquery-sidebar-3.3.2.tar.gz +sha256 f3522370f4b6accf9c1344f520bdea35f2388f1cbb124c0c179d2ca2a6a94c76 LICENSE diff --git a/package/jquery-sidebar/jquery-sidebar.mk b/package/jquery-sidebar/jquery-sidebar.mk new file mode 100644 index 00000000..7af3667b --- /dev/null +++ b/package/jquery-sidebar/jquery-sidebar.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# jquery-sidebar +# +################################################################################ + +JQUERY_SIDEBAR_VERSION = 3.3.2 +JQUERY_SIDEBAR_SITE = $(call github,jillix,jQuery-sidebar,$(JQUERY_SIDEBAR_VERSION)) +JQUERY_SIDEBAR_LICENSE = MIT +JQUERY_SIDEBAR_LICENSE_FILES = LICENSE + +define JQUERY_SIDEBAR_INSTALL_TARGET_CMDS + $(INSTALL) -m 0644 -D $(@D)/src/jquery.sidebar.min.js \ + $(TARGET_DIR)/var/www/jquery-plugins/sidebar/jquery.sidebar.min.js +endef + +$(eval $(generic-package)) diff --git a/package/jquery-sparkline/Config.in b/package/jquery-sparkline/Config.in new file mode 100644 index 00000000..1741a294 --- /dev/null +++ b/package/jquery-sparkline/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_JQUERY_SPARKLINE + bool "jquery-sparkline" + help + This jQuery plugin generates sparklines (small inline + charts) directly in the browser using data supplied either + inline in the HTML, or via javascript. + + The plugin is compatible with most modern browsers and has + been tested with Firefox 2+, Safari 3+, Opera 9, Google + Chrome and Internet Explorer 6, 7 & 8. + + http://www.omnipotent.net/jquery.sparkline/ diff --git a/package/jquery-sparkline/jquery-sparkline.hash b/package/jquery-sparkline/jquery-sparkline.hash new file mode 100644 index 00000000..d8088bce --- /dev/null +++ b/package/jquery-sparkline/jquery-sparkline.hash @@ -0,0 +1,2 @@ +# locally computed +sha256 06e0242da172ab85985db3774c54ac1b53391a5b447857a100c5118b8281a543 jquery.sparkline.min.js diff --git a/package/jquery-sparkline/jquery-sparkline.mk b/package/jquery-sparkline/jquery-sparkline.mk new file mode 100644 index 00000000..683d84f4 --- /dev/null +++ b/package/jquery-sparkline/jquery-sparkline.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# jquery-sparkline +# +################################################################################ + +JQUERY_SPARKLINE_VERSION = 2.1.2 +JQUERY_SPARKLINE_SITE = http://www.omnipotent.net/jquery.sparkline/$(JQUERY_SPARKLINE_VERSION) +JQUERY_SPARKLINE_SOURCE = jquery.sparkline.min.js +JQUERY_SPARKLINE_LICENSE = BSD-3-Clause + +define JQUERY_SPARKLINE_EXTRACT_CMDS + cp $(JQUERY_SPARKLINE_DL_DIR)/$(JQUERY_SPARKLINE_SOURCE) $(@D) +endef + +define JQUERY_SPARKLINE_INSTALL_TARGET_CMDS + $(INSTALL) -m 0644 -D $(@D)/$(JQUERY_SPARKLINE_SOURCE) \ + $(TARGET_DIR)/var/www/jquery.sparkline.js +endef + +$(eval $(generic-package)) diff --git a/package/jquery-ui-themes/Config.in b/package/jquery-ui-themes/Config.in new file mode 100644 index 00000000..29359544 --- /dev/null +++ b/package/jquery-ui-themes/Config.in @@ -0,0 +1,117 @@ +config BR2_PACKAGE_JQUERY_UI_THEMES + bool "jquery-ui-themes" + depends on BR2_PACKAGE_JQUERY_UI + help + Themes for jQuery UI. + + http://jqueryui.com/ + +if BR2_PACKAGE_JQUERY_UI_THEMES + +choice + prompt "theme to install" + help + Specify the jQuery UI theme to install. + +config BR2_PACKAGE_JQUERY_UI_THEMES_BLACK_TIE + bool "black-tie" + +config BR2_PACKAGE_JQUERY_UI_THEMES_BLITZER + bool "blitzer" + +config BR2_PACKAGE_JQUERY_UI_THEMES_CUPERTINO + bool "cupertino" + +config BR2_PACKAGE_JQUERY_UI_THEMES_DARK_HIVE + bool "dark-hive" + +config BR2_PACKAGE_JQUERY_UI_THEMES_DOT_LUV + bool "dot-luv" + +config BR2_PACKAGE_JQUERY_UI_THEMES_EGGPLANT + bool "eggplant" + +config BR2_PACKAGE_JQUERY_UI_THEMES_EXCITE_BIKE + bool "excite-bike" + +config BR2_PACKAGE_JQUERY_UI_THEMES_FLICK + bool "flick" + +config BR2_PACKAGE_JQUERY_UI_THEMES_HOT_SNEAKS + bool "hot-sneaks" + +config BR2_PACKAGE_JQUERY_UI_THEMES_HUMANITY + bool "humanity" + +config BR2_PACKAGE_JQUERY_UI_THEMES_LE_FROG + bool "le-frog" + +config BR2_PACKAGE_JQUERY_UI_THEMES_MINT_CHOC + bool "mint-choc" + +config BR2_PACKAGE_JQUERY_UI_THEMES_OVERCAST + bool "overcast" + +config BR2_PACKAGE_JQUERY_UI_THEMES_PEPPER_GRINDER + bool "pepper-grinder" + +config BR2_PACKAGE_JQUERY_UI_THEMES_REDMOND + bool "redmond" + +config BR2_PACKAGE_JQUERY_UI_THEMES_SMOOTHNESS + bool "smoothness" + +config BR2_PACKAGE_JQUERY_UI_THEMES_SOUTH_STREET + bool "south-street" + +config BR2_PACKAGE_JQUERY_UI_THEMES_START + bool "start" + +config BR2_PACKAGE_JQUERY_UI_THEMES_SUNNY + bool "sunny" + +config BR2_PACKAGE_JQUERY_UI_THEMES_SWANKY_PURSE + bool "swanky-purse" + +config BR2_PACKAGE_JQUERY_UI_THEMES_TRONTASTIC + bool "trontastic" + +config BR2_PACKAGE_JQUERY_UI_THEMES_UI_DARKNESS + bool "ui-darkness" + +config BR2_PACKAGE_JQUERY_UI_THEMES_UI_LIGHTNESS + bool "ui-lightness" + +config BR2_PACKAGE_JQUERY_UI_THEMES_VADER + bool "vader" + +endchoice + +config BR2_PACKAGE_JQUERY_UI_THEMES_THEME + string + default "black-tie" if BR2_PACKAGE_JQUERY_UI_THEMES_BLACK_TIE + default "blitzer" if BR2_PACKAGE_JQUERY_UI_THEMES_BLITZER + default "cupertino" if BR2_PACKAGE_JQUERY_UI_THEMES_CUPERTINO + default "dark-hive" if BR2_PACKAGE_JQUERY_UI_THEMES_DARK_HIVE + default "dot-luv" if BR2_PACKAGE_JQUERY_UI_THEMES_DOT_LUV + default "eggplant" if BR2_PACKAGE_JQUERY_UI_THEMES_EGGPLANT + default "excite-bike" if BR2_PACKAGE_JQUERY_UI_THEMES_EXCITE_BIKE + default "flick" if BR2_PACKAGE_JQUERY_UI_THEMES_FLICK + default "hot-sneaks" if BR2_PACKAGE_JQUERY_UI_THEMES_HOT_SNEAKS + default "humanity" if BR2_PACKAGE_JQUERY_UI_THEMES_HUMANITY + default "le-frog" if BR2_PACKAGE_JQUERY_UI_THEMES_LE_FROG + default "mint-choc" if BR2_PACKAGE_JQUERY_UI_THEMES_MINT_CHOC + default "overcast" if BR2_PACKAGE_JQUERY_UI_THEMES_OVERCAST + default "pepper-grinder" if BR2_PACKAGE_JQUERY_UI_THEMES_PEPPER_GRINDER + default "redmond" if BR2_PACKAGE_JQUERY_UI_THEMES_REDMOND + default "smoothness" if BR2_PACKAGE_JQUERY_UI_THEMES_SMOOTHNESS + default "south-street" if BR2_PACKAGE_JQUERY_UI_THEMES_SOUTH_STREET + default "start" if BR2_PACKAGE_JQUERY_UI_THEMES_START + default "sunny" if BR2_PACKAGE_JQUERY_UI_THEMES_SUNNY + default "swanky-purse" if BR2_PACKAGE_JQUERY_UI_THEMES_SWANKY_PURSE + default "trontastic" if BR2_PACKAGE_JQUERY_UI_THEMES_TRONTASTIC + default "ui-darkness" if BR2_PACKAGE_JQUERY_UI_THEMES_UI_DARKNESS + default "ui-lightness" if BR2_PACKAGE_JQUERY_UI_THEMES_UI_LIGHTNESS + default "vader" if BR2_PACKAGE_JQUERY_UI_THEMES_UI_VADER + +endif diff --git a/package/jquery-ui-themes/jquery-ui-themes.hash b/package/jquery-ui-themes/jquery-ui-themes.hash new file mode 100644 index 00000000..5f662dad --- /dev/null +++ b/package/jquery-ui-themes/jquery-ui-themes.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 90467a83abcb8d2471b0d53d21b4c09e2cf686d5350e10a6e84fa3f3616a840f jquery-ui-themes-1.10.4.zip +sha256 ef1fdd608b20fbea7ef269ed03bd24e637717cc193971798a394bf2fa983cd53 MIT-LICENSE.txt diff --git a/package/jquery-ui-themes/jquery-ui-themes.mk b/package/jquery-ui-themes/jquery-ui-themes.mk new file mode 100644 index 00000000..5108389a --- /dev/null +++ b/package/jquery-ui-themes/jquery-ui-themes.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# jquery-ui-themes +# +################################################################################ + +JQUERY_UI_THEMES_VERSION = 1.10.4 +JQUERY_UI_THEMES_SITE = http://jqueryui.com/resources/download +JQUERY_UI_THEMES_SOURCE = jquery-ui-themes-$(JQUERY_UI_THEMES_VERSION).zip +JQUERY_UI_THEMES_LICENSE = MIT +JQUERY_UI_THEMES_LICENSE_FILES = MIT-LICENSE.txt +JQUERY_UI_THEMES_DEPENDENCIES = jquery-ui + +define JQUERY_UI_THEMES_EXTRACT_CMDS + $(UNZIP) -d $(@D) $(JQUERY_UI_THEMES_DL_DIR)/$(JQUERY_UI_THEMES_SOURCE) + mv $(@D)/jquery-ui-themes-$(JQUERY_UI_THEMES_VERSION)/* $(@D) + $(RM) -r $(@D)/jquery-ui-themes-$(JQUERY_UI_THEMES_VERSION) +endef + +define JQUERY_UI_THEMES_INSTALL_TARGET_CMDS + $(INSTALL) -m 0644 -D \ + $(@D)/themes/$(call qstrip,$(BR2_PACKAGE_JQUERY_UI_THEMES_THEME))/jquery-ui.css \ + $(TARGET_DIR)/var/www/jquery-ui.css + $(INSTALL) -d $(TARGET_DIR)/var/www/images + cp -a $(@D)/themes/$(call qstrip,$(BR2_PACKAGE_JQUERY_UI_THEMES_THEME))/images/*.png \ + $(TARGET_DIR)/var/www/images + chmod 0644 $(TARGET_DIR)/var/www/images/*.png +endef + +$(eval $(generic-package)) diff --git a/package/jquery-ui/Config.in b/package/jquery-ui/Config.in new file mode 100644 index 00000000..fd38997e --- /dev/null +++ b/package/jquery-ui/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_JQUERY_UI + bool "jquery-ui" + help + jQuery UI provides abstractions for low-level interaction and + animation, advanced effects and high-level, themeable widgets, + built on top of the jQuery JavaScript Library, that you can + use to build highly interactive web applications. + + http://jqueryui.com/ diff --git a/package/jquery-ui/jquery-ui.hash b/package/jquery-ui/jquery-ui.hash new file mode 100644 index 00000000..453ecd55 --- /dev/null +++ b/package/jquery-ui/jquery-ui.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 c76f349930245360f4d1dea672b9a587f8938b536a378e20eeff919f7263f99f jquery-ui-1.10.4.zip +sha256 ef1fdd608b20fbea7ef269ed03bd24e637717cc193971798a394bf2fa983cd53 MIT-LICENSE.txt diff --git a/package/jquery-ui/jquery-ui.mk b/package/jquery-ui/jquery-ui.mk new file mode 100644 index 00000000..9284e683 --- /dev/null +++ b/package/jquery-ui/jquery-ui.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# jquery-ui +# +################################################################################ + +JQUERY_UI_VERSION = 1.10.4 +# Use buildroot mirror since upstream switched the zipfile and directory +# structure without bumping/renaming. +# Remember to switch back to jqueryui.com when bumping! +JQUERY_UI_SITE = http://sources.buildroot.net +JQUERY_UI_SOURCE = jquery-ui-$(JQUERY_UI_VERSION).zip +JQUERY_UI_LICENSE = MIT +JQUERY_UI_LICENSE_FILES = MIT-LICENSE.txt + +define JQUERY_UI_EXTRACT_CMDS + $(UNZIP) -d $(@D) $(JQUERY_UI_DL_DIR)/$(JQUERY_UI_SOURCE) + mv $(@D)/jquery-ui-$(JQUERY_UI_VERSION)/* $(@D) + $(RM) -r $(@D)/jquery-ui-$(JQUERY_UI_VERSION) +endef + +define JQUERY_UI_INSTALL_TARGET_CMDS + $(INSTALL) -m 0644 -D $(@D)/ui/minified/jquery-ui.min.js \ + $(TARGET_DIR)/var/www/jquery-ui.js + $(INSTALL) -m 0644 -D $(@D)/ui/minified/i18n/jquery-ui-i18n.min.js \ + $(TARGET_DIR)/var/www/jquery-ui-i18n.js + $(INSTALL) -m 0644 -D $(@D)/themes/base/minified/jquery-ui.min.css \ + $(TARGET_DIR)/var/www/jquery-ui.css + $(INSTALL) -d $(TARGET_DIR)/var/www/images + $(INSTALL) -m 0644 -t $(TARGET_DIR)/var/www/images \ + $(@D)/themes/base/minified/images/*.png +endef + +$(eval $(generic-package)) diff --git a/package/jquery-validation/Config.in b/package/jquery-validation/Config.in new file mode 100644 index 00000000..39e898e8 --- /dev/null +++ b/package/jquery-validation/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_JQUERY_VALIDATION + bool "jquery-validation" + help + The jQuery Validation Plugin provides drop-in validation for + your existing forms, while making all kinds of + customizations to fit your application really easy. + + http://jqueryvalidation.org/ diff --git a/package/jquery-validation/jquery-validation.hash b/package/jquery-validation/jquery-validation.hash new file mode 100644 index 00000000..4dbe07e2 --- /dev/null +++ b/package/jquery-validation/jquery-validation.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 01ad2ef0a7f9cd413aeb51081651293916da47d20e5c0a59ec62587e58b03564 jquery-validation-1.19.3.zip +sha256 3e5a99460077c16bf75f6821a30cdac9baa339119ebf63b2a6c49f4f50421ca4 README.md diff --git a/package/jquery-validation/jquery-validation.mk b/package/jquery-validation/jquery-validation.mk new file mode 100644 index 00000000..920ed1ce --- /dev/null +++ b/package/jquery-validation/jquery-validation.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# jquery-validation +# +################################################################################ + +JQUERY_VALIDATION_VERSION = 1.19.3 +JQUERY_VALIDATION_SITE = https://github.com/jquery-validation/jquery-validation/releases/download/$(JQUERY_VALIDATION_VERSION) +JQUERY_VALIDATION_SOURCE = jquery-validation-$(JQUERY_VALIDATION_VERSION).zip +JQUERY_VALIDATION_LICENSE = MIT +JQUERY_VALIDATION_LICENSE_FILES = README.md +JQUERY_VALIDATION_CPE_ID_VENDOR = jqueryvalidation +JQUERY_VALIDATION_CPE_ID_PRODUCT = jquery_validation + +define JQUERY_VALIDATION_EXTRACT_CMDS + $(UNZIP) -d $(@D) $(JQUERY_VALIDATION_DL_DIR)/$(JQUERY_VALIDATION_SOURCE) +endef + +define JQUERY_VALIDATION_INSTALL_TARGET_CMDS + $(INSTALL) -m 0644 -D $(@D)/dist/jquery.validate.min.js \ + $(TARGET_DIR)/var/www/jquery.validate.js +endef + +$(eval $(generic-package)) diff --git a/package/jquery/Config.in b/package/jquery/Config.in new file mode 100644 index 00000000..92f56042 --- /dev/null +++ b/package/jquery/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_JQUERY + bool "jQuery" + help + jQuery is a fast and concise JavaScript Library that + simplifies HTML document traversing, event handling, + animating, and Ajax interactions for rapid web development. + + http://jquery.com diff --git a/package/jquery/jquery.hash b/package/jquery/jquery.hash new file mode 100644 index 00000000..e9ef56a4 --- /dev/null +++ b/package/jquery/jquery.hash @@ -0,0 +1,2 @@ +# Locally computed hashes, not provided by upstream +sha256 f7f6a5894f1d19ddad6fa392b2ece2c5e578cbf7da4ea805b6885eb6985b6e3d jquery-3.5.1.min.js diff --git a/package/jquery/jquery.mk b/package/jquery/jquery.mk new file mode 100644 index 00000000..8febed36 --- /dev/null +++ b/package/jquery/jquery.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# jquery +# +################################################################################ + +JQUERY_VERSION = 3.5.1 +JQUERY_SITE = http://code.jquery.com +JQUERY_SOURCE = jquery-$(JQUERY_VERSION).min.js +JQUERY_LICENSE = MIT +JQUERY_CPE_ID_VENDOR = jquery + +define JQUERY_EXTRACT_CMDS + cp $(JQUERY_DL_DIR)/$(JQUERY_SOURCE) $(@D) +endef + +define JQUERY_INSTALL_TARGET_CMDS + $(INSTALL) -m 0644 -D $(@D)/$(JQUERY_SOURCE) \ + $(TARGET_DIR)/var/www/jquery.js +endef + +$(eval $(generic-package)) diff --git a/package/jsmin/Config.in b/package/jsmin/Config.in new file mode 100644 index 00000000..d0948b89 --- /dev/null +++ b/package/jsmin/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_JSMIN + bool "jsmin" + help + JSMin is a filter which removes comments and unnecessary + whitespace from JavaScript files. It typically reduces + filesize by half, resulting in faster downloads. It also + encourages a more expressive programming style because it + eliminates the download cost of clean, literate + self-documentation. + + http://www.crockford.com/javascript/jsmin.html diff --git a/package/jsmin/Config.in.host b/package/jsmin/Config.in.host new file mode 100644 index 00000000..25ec9bb8 --- /dev/null +++ b/package/jsmin/Config.in.host @@ -0,0 +1,11 @@ +config BR2_PACKAGE_HOST_JSMIN + bool "host jsmin" + help + JSMin is a filter which removes comments and unnecessary + whitespace from JavaScript files. It typically reduces + filesize by half, resulting in faster downloads. It also + encourages a more expressive programming style because it + eliminates the download cost of clean, literate + self-documentation. + + http://www.crockford.com/javascript/jsmin.html diff --git a/package/jsmin/jsmin.hash b/package/jsmin/jsmin.hash new file mode 100644 index 00000000..c1609785 --- /dev/null +++ b/package/jsmin/jsmin.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 aae127bf7291a7b2592f36599e5ed6c6423eac7abe0cd5992f82d6d46fe9ed2d jsmin-1bf6ce5f74a9f8752ac7f5d115b8d7ccb31cfe1b.tar.gz +sha256 b420f61778af09534adc836a5086f5625b8499124051c50baefa218e7c03a58c jsmin.c diff --git a/package/jsmin/jsmin.mk b/package/jsmin/jsmin.mk new file mode 100644 index 00000000..84c39a7b --- /dev/null +++ b/package/jsmin/jsmin.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# jsmin +# +################################################################################ + +JSMIN_VERSION = 1bf6ce5f74a9f8752ac7f5d115b8d7ccb31cfe1b +JSMIN_SITE = $(call github,douglascrockford,JSMin,$(JSMIN_VERSION)) +JSMIN_LICENSE = MIT +JSMIN_LICENSE_FILES = jsmin.c + +define JSMIN_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) jsmin +endef + +define JSMIN_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/jsmin $(TARGET_DIR)/usr/bin/jsmin +endef + +define HOST_JSMIN_BUILD_CMDS + $(HOST_CONFIGURE_OPTS) $(MAKE) -C $(@D) jsmin +endef + +define HOST_JSMIN_INSTALL_CMDS + $(INSTALL) -m 0755 -D $(@D)/jsmin $(HOST_DIR)/bin/jsmin +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/jsmn/Config.in b/package/jsmn/Config.in new file mode 100644 index 00000000..ab142732 --- /dev/null +++ b/package/jsmn/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_JSMN + bool "jsmn" + help + jsmn (pronounced like 'jasmine') is a minimalistic JSON + parser in C. It can be easily integrated into + resource-limited or embedded projects. + + https://github.com/zserge/jsmn/ diff --git a/package/jsmn/jsmn.hash b/package/jsmn/jsmn.hash new file mode 100644 index 00000000..b5a78f6e --- /dev/null +++ b/package/jsmn/jsmn.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 5f0913a10657fe7ec8d5794ccf00a01000e3e1f2f1e1f143c34a0f7b47edcb38 jsmn-1.1.0.tar.gz +sha256 4675b94a50d2afe811c52785463c854f1156056632cce17cc7133939eac8ed55 LICENSE diff --git a/package/jsmn/jsmn.mk b/package/jsmn/jsmn.mk new file mode 100644 index 00000000..750e8cf8 --- /dev/null +++ b/package/jsmn/jsmn.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# jsmn +# +################################################################################ + +JSMN_VERSION = 1.1.0 +JSMN_SITE = $(call github,zserge,jsmn,v$(JSMN_VERSION)) +JSMN_LICENSE = MIT +JSMN_LICENSE_FILES = LICENSE +# single-header, header-only library +JSMN_INSTALL_STAGING = YES +JSMN_INSTALL_TARGET = NO + +define JSMN_INSTALL_STAGING_CMDS + $(INSTALL) -D -m 0644 $(@D)/jsmn.h $(STAGING_DIR)/usr/include/jsmn.h +endef + +$(eval $(generic-package)) diff --git a/package/json-c/Config.in b/package/json-c/Config.in new file mode 100644 index 00000000..4df44a96 --- /dev/null +++ b/package/json-c/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_JSON_C + bool "json-c" + # uses __sync_val_compare_and_swap_4 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + help + JSON-C - A JSON implementation in C + + JSON-C implements a reference counting object model that + allows you to easily construct JSON objects in C, output + them as JSON formatted strings and parse JSON formatted + strings back into the C representation of JSON objects. + + https://github.com/json-c/json-c/ diff --git a/package/json-c/json-c.hash b/package/json-c/json-c.hash new file mode 100644 index 00000000..a20d370e --- /dev/null +++ b/package/json-c/json-c.hash @@ -0,0 +1,4 @@ +# From https://github.com/json-c/json-c/wiki +sha256 b8d80a1ddb718b3ba7492916237bbf86609e9709fb007e7f7d4322f02341a4c6 json-c-0.15.tar.gz +# Locally calculated +sha256 74c1e6ca5eba76b54d0ad00d4815c8315c1b3bc45ff99de61d103dc92486284c COPYING diff --git a/package/json-c/json-c.mk b/package/json-c/json-c.mk new file mode 100644 index 00000000..3639bad2 --- /dev/null +++ b/package/json-c/json-c.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# json-c +# +################################################################################ + +JSON_C_VERSION = 0.15 +JSON_C_SITE = https://s3.amazonaws.com/json-c_releases/releases +JSON_C_INSTALL_STAGING = YES +JSON_C_LICENSE = MIT +JSON_C_LICENSE_FILES = COPYING +JSON_C_CPE_ID_VENDOR = json-c_project + +$(eval $(cmake-package)) +$(eval $(host-cmake-package)) diff --git a/package/json-for-modern-cpp/Config.in b/package/json-for-modern-cpp/Config.in new file mode 100644 index 00000000..b045cba6 --- /dev/null +++ b/package/json-for-modern-cpp/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_JSON_FOR_MODERN_CPP + bool "json-for-modern-cpp" + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C++11 + depends on BR2_INSTALL_LIBSTDCPP + help + Json for modern c++ has the following desing goals in mind: + + - Intuitive syntax. In languages such as Python, JSON feels + like a first class data type. All the operator magic of + modern C++ is used to achieve the same feeling in c++. + + - Trivial integration. The whole code consists of a single + header file json.hpp. That's it. No library, no + subproject, no dependencies, no complex build system. The + class is written in vanilla C++11. All in all, everything + should require no adjustment of compiler flags or project + settings. + + - Serious testing. The class is heavily unit-tested and + covers 100% of the code, including all exceptional + behavior. Furthermore, it is checked with Valgrind that + there are no memory leaks. To maintain high quality, the + project is following the Core Infrastructure Initiative + (CII) best practices. + + https://github.com/nlohmann/json + +comment "json-for-modern-cpp needs a toolchain w/ C++, gcc >= 4.9" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/json-for-modern-cpp/json-for-modern-cpp.hash b/package/json-for-modern-cpp/json-for-modern-cpp.hash new file mode 100644 index 00000000..eb9270b3 --- /dev/null +++ b/package/json-for-modern-cpp/json-for-modern-cpp.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 9943db11eeaa5b23e58a88fbc26c453faccef7b546e55063ad00e7caaaf76d0b json-3.9.0.tar.gz +sha256 50be9457e5c9faaba5e60d9c73f8eabe9e0737a2d9c3e58357d856661862c18e LICENSE.MIT diff --git a/package/json-for-modern-cpp/json-for-modern-cpp.mk b/package/json-for-modern-cpp/json-for-modern-cpp.mk new file mode 100644 index 00000000..ffc419e6 --- /dev/null +++ b/package/json-for-modern-cpp/json-for-modern-cpp.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# json-for-modern-cpp +# +################################################################################ + +JSON_FOR_MODERN_CPP_VERSION = 3.9.0 +JSON_FOR_MODERN_CPP_SOURCE = json-$(JSON_FOR_MODERN_CPP_VERSION).tar.gz +JSON_FOR_MODERN_CPP_SITE = $(call github,nlohmann,json,v$(JSON_FOR_MODERN_CPP_VERSION)) +JSON_FOR_MODERN_CPP_LICENSE = MIT +JSON_FOR_MODERN_CPP_LICENSE_FILES = LICENSE.MIT +JSON_FOR_MODERN_CPP_CPE_ID_VENDOR = json-for-modern-cpp_project + +JSON_FOR_MODERN_CPP_INSTALL_STAGING = YES +# header only library +JSON_FOR_MODERN_CPP_INSTALL_TARGET = NO +JSON_FOR_MODERN_CPP_CONF_OPTS = -DJSON_BuildTests=OFF + +$(eval $(cmake-package)) diff --git a/package/json-glib/Config.in b/package/json-glib/Config.in new file mode 100644 index 00000000..9df03d92 --- /dev/null +++ b/package/json-glib/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_JSON_GLIB + bool "json-glib" + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + select BR2_PACKAGE_LIBGLIB2 + help + JSON-GLib is a library providing serialization and + deserialization support for the JavaScript Object Notation + (JSON) format described by RFC 4627. + + https://live.gnome.org/JsonGlib/ + +comment "json-glib needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/json-glib/json-glib.hash b/package/json-glib/json-glib.hash new file mode 100644 index 00000000..b68794db --- /dev/null +++ b/package/json-glib/json-glib.hash @@ -0,0 +1,5 @@ +# From http://ftp.gnome.org/pub/GNOME/sources/json-glib/1.4/json-glib-1.4.4.sha256sum +sha256 720c5f4379513dc11fd97dc75336eb0c0d3338c53128044d9fabec4374f4bc47 json-glib-1.4.4.tar.xz + +# Hash for license file: +sha256 a190dc9c8043755d90f8b0a75fa66b9e42d4af4c980bf5ddc633f0124db3cee7 COPYING diff --git a/package/json-glib/json-glib.mk b/package/json-glib/json-glib.mk new file mode 100644 index 00000000..accdb4f8 --- /dev/null +++ b/package/json-glib/json-glib.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# json-glib +# +################################################################################ + +JSON_GLIB_VERSION_MAJOR = 1.4 +JSON_GLIB_VERSION = $(JSON_GLIB_VERSION_MAJOR).4 +JSON_GLIB_SITE = http://ftp.gnome.org/pub/GNOME/sources/json-glib/$(JSON_GLIB_VERSION_MAJOR) +JSON_GLIB_SOURCE = json-glib-$(JSON_GLIB_VERSION).tar.xz +JSON_GLIB_LICENSE = LGPL-2.1+ +JSON_GLIB_LICENSE_FILES = COPYING +JSON_GLIB_INSTALL_STAGING = YES + +JSON_GLIB_DEPENDENCIES = \ + $(TARGET_NLS_DEPENDENCIES) \ + host-pkgconf \ + libglib2 + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +JSON_GLIB_CONF_OPTS += -Dintrospection=true +JSON_GLIB_DEPENDENCIES += gobject-introspection +else +JSON_GLIB_CONF_OPTS += -Dintrospection=false +endif + +JSON_GLIB_LDFLAGS = $(TARGET_LDFLAGS) $(TARGET_NLS_LIBS) + +$(eval $(meson-package)) diff --git a/package/json-javascript/Config.in b/package/json-javascript/Config.in new file mode 100644 index 00000000..501c54f3 --- /dev/null +++ b/package/json-javascript/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_JSON_JAVASCRIPT + bool "json-javascript" + help + JSON in JavaScript + + https://github.com/douglascrockford/JSON-js/ diff --git a/package/json-javascript/json-javascript.hash b/package/json-javascript/json-javascript.hash new file mode 100644 index 00000000..9522fee9 --- /dev/null +++ b/package/json-javascript/json-javascript.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 1a9dd4429e4bb4929dcb438f9591a3625bc8cc161f840b5f843d8b1d2c8dcfe5 json-javascript-3d7767b6b1f3da363c625ff54e63bbf20e9e83ac.tar.gz +sha256 925947d3d711c4441a9db20f51215fbf5c119d2a3b51cadb2c9031907d8014b5 json2.js diff --git a/package/json-javascript/json-javascript.mk b/package/json-javascript/json-javascript.mk new file mode 100644 index 00000000..c15b5319 --- /dev/null +++ b/package/json-javascript/json-javascript.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# json-javascript +# +################################################################################ + +JSON_JAVASCRIPT_VERSION = 3d7767b6b1f3da363c625ff54e63bbf20e9e83ac +JSON_JAVASCRIPT_SITE = $(call github,douglascrockford,JSON-js,$(JSON_JAVASCRIPT_VERSION)) +JSON_JAVASCRIPT_LICENSE = Public Domain +JSON_JAVASCRIPT_LICENSE_FILES = json2.js + +define JSON_JAVASCRIPT_INSTALL_TARGET_CMDS + $(INSTALL) -m 0644 -D $(@D)/json2.js $(TARGET_DIR)/var/www/json2.js +endef + +$(eval $(generic-package)) diff --git a/package/jsoncpp/Config.in b/package/jsoncpp/Config.in new file mode 100644 index 00000000..a6c6b919 --- /dev/null +++ b/package/jsoncpp/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_JSONCPP + bool "jsoncpp" + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 # C++11 + depends on BR2_INSTALL_LIBSTDCPP + help + JsonCpp is a C++ library that allows manipulating JSON + values, including serialization and deserialization to and + from strings. It can also preserve existing comment in + unserialization/serialization steps, making it a convenient + format to store user input files. + + https://github.com/open-source-parsers/jsoncpp + +comment "jsoncpp needs a toolchain w/ C++, gcc >= 4.7" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 diff --git a/package/jsoncpp/jsoncpp.hash b/package/jsoncpp/jsoncpp.hash new file mode 100644 index 00000000..0070a187 --- /dev/null +++ b/package/jsoncpp/jsoncpp.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 e34a628a8142643b976c7233ef381457efad79468c67cb1ae0b83a33d7493999 jsoncpp-1.9.4.tar.gz +sha256 95039d77a20e75b428207740d9a8f97b2dce3c89da4b21f1ad862b5997160e0a LICENSE diff --git a/package/jsoncpp/jsoncpp.mk b/package/jsoncpp/jsoncpp.mk new file mode 100644 index 00000000..829459df --- /dev/null +++ b/package/jsoncpp/jsoncpp.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# jsoncpp +# +################################################################################ + +JSONCPP_VERSION = 1.9.4 +JSONCPP_SITE = $(call github,open-source-parsers,jsoncpp,$(JSONCPP_VERSION)) +JSONCPP_LICENSE = Public Domain or MIT +JSONCPP_LICENSE_FILES = LICENSE +JSONCPP_CPE_ID_VENDOR = jsoncpp_project +JSONCPP_INSTALL_STAGING = YES +JSONCPP_CONF_OPTS = -Dtests=false + +$(eval $(meson-package)) diff --git a/package/jszip/Config.in b/package/jszip/Config.in new file mode 100644 index 00000000..455891ab --- /dev/null +++ b/package/jszip/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_JSZIP + bool "jszip" + help + JSZip is a javascript library for creating, reading and + editing .zip files, with a lovely and simple API. + + https://stuk.github.io/jszip diff --git a/package/jszip/jszip.hash b/package/jszip/jszip.hash new file mode 100644 index 00000000..13a2076a --- /dev/null +++ b/package/jszip/jszip.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 e5343decfb781b15c54c0df9ddedd6c8518c800a4667a0a95741c694a4f38d34 jszip-3.2.2.tar.gz +sha256 14450c78405ad2a2173e25740b56406556779149df9c4c83523a8c63d0686210 LICENSE.markdown diff --git a/package/jszip/jszip.mk b/package/jszip/jszip.mk new file mode 100644 index 00000000..04bd0a7b --- /dev/null +++ b/package/jszip/jszip.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# jszip +# +################################################################################ + +JSZIP_VERSION = 3.2.2 +JSZIP_SITE = $(call github,Stuk,jszip,v$(JSZIP_VERSION)) +JSZIP_LICENSE = MIT or GPL-3.0 +JSZIP_LICENSE_FILES = LICENSE.markdown + +define JSZIP_INSTALL_TARGET_CMDS + $(INSTALL) -m 0644 -D $(@D)/dist/jszip.min.js \ + $(TARGET_DIR)/var/www/jszip/js/jszip.min.js +endef + +$(eval $(generic-package)) diff --git a/package/kbd/Config.in b/package/kbd/Config.in new file mode 100644 index 00000000..27cadf1a --- /dev/null +++ b/package/kbd/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_KBD + bool "kbd" + # Uses fork() + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # _Generic + help + Keytable files and keyboard utilities. + + http://kernel.org/pub/linux/utils/kbd/ + +comment "kbd needs a toolchain w/ gcc >= 4.9" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/kbd/kbd.hash b/package/kbd/kbd.hash new file mode 100644 index 00000000..66ffaeb0 --- /dev/null +++ b/package/kbd/kbd.hash @@ -0,0 +1,4 @@ +# From https://www.kernel.org/pub/linux/utils/kbd/sha256sums.asc +sha256 685056143cb8effd0a1d44b5c391eb50d80dcfd014b1a4d6e2650a28d61cb82a kbd-2.3.0.tar.xz +sha256 ddb9db7630752f8fdc6898f7c99a99eaeeac5213627ecb093df9c82f56175dc7 COPYING +sha256 5a16340fe773f422144b436df90319114a2884933c56e9be6fad642e59be5e1f CREDITS diff --git a/package/kbd/kbd.mk b/package/kbd/kbd.mk new file mode 100644 index 00000000..928b5ffe --- /dev/null +++ b/package/kbd/kbd.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# kbd +# +################################################################################ + +KBD_VERSION = 2.3.0 +KBD_SOURCE = kbd-$(KBD_VERSION).tar.xz +KBD_SITE = $(BR2_KERNEL_MIRROR)/linux/utils/kbd +KBD_CONF_OPTS = \ + --disable-vlock \ + --disable-tests +KBD_DEPENDENCIES = \ + $(TARGET_NLS_DEPENDENCIES) \ + host-pkgconf +KBD_LICENSE = GPL-2.0+ +KBD_LICENSE_FILES = COPYING CREDITS + +KBD_INSTALL_TARGET_OPTS = MKINSTALLDIRS=$(@D)/config/mkinstalldirs DESTDIR=$(TARGET_DIR) install + +$(eval $(autotools-package)) diff --git a/package/keepalived/0001-core-Fix-compiling-on-RHEL-9.patch b/package/keepalived/0001-core-Fix-compiling-on-RHEL-9.patch new file mode 100644 index 00000000..39134fcc --- /dev/null +++ b/package/keepalived/0001-core-Fix-compiling-on-RHEL-9.patch @@ -0,0 +1,34 @@ +From 3fd0c21e4f63ac0a52b5d7a09575f0f364972e4d Mon Sep 17 00:00:00 2001 +From: Quentin Armitage +Date: Tue, 8 Jun 2021 08:57:45 +0100 +Subject: [PATCH] core: Fix compiling on RHEL 9 + +Signed-off-by: Quentin Armitage + +[Retrieved from: +https://github.com/acassen/keepalived/commit/3fd0c21e4f63ac0a52b5d7a09575f0f364972e4d] +Signed-off-by: Fabrice Fontaine +--- + keepalived/core/layer4.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/keepalived/core/layer4.c b/keepalived/core/layer4.c +index d2cc971a3..fdca04913 100644 +--- a/keepalived/core/layer4.c ++++ b/keepalived/core/layer4.c +@@ -27,13 +27,14 @@ + #include + #include + #include ++#include ++#include + #include + #include + #ifdef ERRQUEUE_NEEDS_SYS_TIME + #include + #endif + #include +-#include + + #include "layer4.h" + #include "logger.h" diff --git a/package/keepalived/Config.in b/package/keepalived/Config.in new file mode 100644 index 00000000..2a0663fe --- /dev/null +++ b/package/keepalived/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_KEEPALIVED + bool "keepalived" + depends on BR2_USE_MMU + depends on !BR2_STATIC_LIBS # uses libdl + select BR2_PACKAGE_OPENSSL + help + The main goal of the keepalived project is to add a strong & + robust keepalive facility to the Linux Virtual Server + project. It implements a multilayer TCP/IP stack + checks. Keepalived implements a framework based on three + family checks: Layer3, Layer4 & Layer5. This framework gives + the daemon the ability of checking a LVS server pool + states. Keepalived can be sumarize as a LVS driving daemon. + + http://www.keepalived.org/ + +comment "keepalived needs a toolchain w/ dynamic library" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS diff --git a/package/keepalived/keepalived.hash b/package/keepalived/keepalived.hash new file mode 100644 index 00000000..94af43c3 --- /dev/null +++ b/package/keepalived/keepalived.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 245bf399e4320064996ac5507236a8896f545d005f6c4c3b91701bcbc5728c60 keepalived-2.1.4.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/keepalived/keepalived.mk b/package/keepalived/keepalived.mk new file mode 100644 index 00000000..5d42cab7 --- /dev/null +++ b/package/keepalived/keepalived.mk @@ -0,0 +1,57 @@ +################################################################################ +# +# keepalived +# +################################################################################ + +KEEPALIVED_VERSION = 2.1.4 +KEEPALIVED_SITE = http://www.keepalived.org/software +KEEPALIVED_DEPENDENCIES = host-pkgconf openssl +KEEPALIVED_LICENSE = GPL-2.0+ +KEEPALIVED_LICENSE_FILES = COPYING +KEEPALIVED_CPE_ID_VENDOR = keepalived +KEEPALIVED_CONF_OPTS = --disable-hardening + +ifeq ($(BR2_PACKAGE_JSON_C),y) +KEEPALIVED_DEPENDENCIES += json-c +KEEPALIVED_CONF_OPTS += --enable-json +else +KEEPALIVED_CONF_OPTS += --disable-json +endif + +ifeq ($(BR2_PACKAGE_LIBGLIB2),y) +KEEPALIVED_DEPENDENCIES += libglib2 +KEEPALIVED_CONF_OPTS += --enable-dbus +else +KEEPALIVED_CONF_OPTS += --disable-dbus +endif + +ifeq ($(BR2_PACKAGE_LIBNL)$(BR2_PACKAGE_LIBNFNETLINK),yy) +KEEPALIVED_DEPENDENCIES += libnl libnfnetlink +KEEPALIVED_CONF_OPTS += --enable-libnl +else +KEEPALIVED_CONF_OPTS += --disable-libnl +endif + +ifeq ($(BR2_PACKAGE_IPTABLES),y) +KEEPALIVED_DEPENDENCIES += iptables +KEEPALIVED_CONF_OPTS += --enable-iptables +# ipset support only makes sense when iptables support is enabled. +ifeq ($(BR2_PACKAGE_IPSET),y) +KEEPALIVED_DEPENDENCIES += ipset +KEEPALIVED_CONF_OPTS += --enable-libipset +else +KEEPALIVED_CONF_OPTS += --disable-libipset +endif +else +KEEPALIVED_CONF_OPTS += --disable-iptables +endif + +ifeq ($(BR2_PACKAGE_LIBNFTNL),y) +KEEPALIVED_DEPENDENCIES += libnftnl +KEEPALIVED_CONF_OPTS += --enable-nftables +else +KEEPALIVED_CONF_OPTS += --disable-nftables +endif + +$(eval $(autotools-package)) diff --git a/package/kexec-lite/0001-clean-restart.patch b/package/kexec-lite/0001-clean-restart.patch new file mode 100644 index 00000000..faaa93a0 --- /dev/null +++ b/package/kexec-lite/0001-clean-restart.patch @@ -0,0 +1,34 @@ +From 0a654c20e1b9324c57ba4116b52fb6ab33847e1d Mon Sep 17 00:00:00 2001 +From: Jeremy Kerr +Date: Thu, 8 Aug 2013 17:16:31 +0800 +Subject: [PATCH] kexec: Implement clean restart for busybox init + +Signed-off-by: Jeremy Kerr +--- + kexec.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/kexec.c b/kexec.c +index 2edb7df..b2a0c42 100644 +--- a/kexec.c ++++ b/kexec.c +@@ -27,6 +27,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -818,7 +819,7 @@ int main(int argc, char *argv[]) + sync(); + exec_kexec(); + } else { +- execlp("shutdown", "shutdown", "-r", "now", NULL); ++ kill(1, SIGQUIT); + } + + return -1; +-- +1.7.10.4 + diff --git a/package/kexec-lite/Config.in b/package/kexec-lite/Config.in new file mode 100644 index 00000000..abfa95ab --- /dev/null +++ b/package/kexec-lite/Config.in @@ -0,0 +1,25 @@ +config BR2_PACKAGE_KEXEC_LITE + bool "kexec-lite" + depends on BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le + depends on !BR2_STATIC_LIBS # dtc, elfutils + depends on BR2_USE_WCHAR # elfutils + depends on BR2_TOOLCHAIN_HAS_THREADS # elfutils + depends on BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC # elfutils + select BR2_PACKAGE_ELFUTILS + select BR2_PACKAGE_DTC + select BR2_PACKAGE_DTC_PROGRAMS + help + Kexec is a user space utiltity for loading another kernel + and asking the currently running kernel to do something with + it. + + This package is a tiny implementation of the kexec userspace + components, for devicetree-based platforms. + + https://github.com/antonblanchard/kexec-lite + +comment "kexec-lite needs a uClibc or glibc toolchain w/ wchar, dynamic library, threads" + depends on BR2_powerpc || BR2_powerpc64 + depends on BR2_STATIC_LIBS || !BR2_USE_WCHAR \ + || !BR2_TOOLCHAIN_HAS_THREADS \ + || !(BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC) diff --git a/package/kexec-lite/kexec-lite.hash b/package/kexec-lite/kexec-lite.hash new file mode 100644 index 00000000..e2426a45 --- /dev/null +++ b/package/kexec-lite/kexec-lite.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 1027c69721e8ee21614273a540e1dd505370d8d814845c0adaf838496105a35d kexec-lite-6b0130b3c1ea489e061cda2805e6f8b68dc96a76.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/kexec-lite/kexec-lite.mk b/package/kexec-lite/kexec-lite.mk new file mode 100644 index 00000000..89d42659 --- /dev/null +++ b/package/kexec-lite/kexec-lite.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# kexec-lite +# +################################################################################ + +KEXEC_LITE_VERSION = 6b0130b3c1ea489e061cda2805e6f8b68dc96a76 +KEXEC_LITE_SITE = $(call github,antonblanchard,kexec-lite,$(KEXEC_LITE_VERSION)) +KEXEC_LITE_LICENSE = GPL-2.0+ +KEXEC_LITE_LICENSE_FILES = COPYING +KEXEC_LITE_DEPENDENCIES = elfutils dtc +KEXEC_LITE_AUTORECONF = YES +KEXEC_LITE_SELINUX_MODULES = kdump + +$(eval $(autotools-package)) diff --git a/package/kexec/0001-kexec-build-multiboot2-for-i386.patch b/package/kexec/0001-kexec-build-multiboot2-for-i386.patch new file mode 100644 index 00000000..c67da98c --- /dev/null +++ b/package/kexec/0001-kexec-build-multiboot2-for-i386.patch @@ -0,0 +1,72 @@ +From 2c9f26ed20a791a7df0182ba82e93abb52f5a615 Mon Sep 17 00:00:00 2001 +From: Chris Packham +Date: Mon, 18 Nov 2019 12:52:15 +1300 +Subject: kexec: build multiboot2 for i386 + +This addresses the following compilation issues when building for i386. + + kexec/arch/i386/kexec-x86.c:39:22: error: 'multiboot2_x86_probe' undeclared here (not in a function); did you mean 'multiboot_x86_probe'? + { "multiboot2-x86", multiboot2_x86_probe, multiboot2_x86_load, + ^~~~~~~~~~~~~~~~~~~~ + multiboot_x86_probe + kexec/arch/i386/kexec-x86.c:39:44: error: 'multiboot2_x86_load' undeclared here (not in a function); did you mean 'multiboot_x86_load'? + { "multiboot2-x86", multiboot2_x86_probe, multiboot2_x86_load, + ^~~~~~~~~~~~~~~~~~~ + multiboot_x86_load + kexec/arch/i386/kexec-x86.c:40:4: error: 'multiboot2_x86_usage' undeclared here (not in a function); did you mean 'multiboot_x86_usage'? + multiboot2_x86_usage }, + ^~~~~~~~~~~~~~~~~~~~ + multiboot_x86_usage + make: *** [Makefile:114: kexec/arch/i386/kexec-x86.o] Error 1 + make: *** Waiting for unfinished jobs.... + +Signed-off-by: Chris Packham +Signed-off-by: Simon Horman + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://git.kernel.org/pub/scm/utils/kernel/kexec/kexec-tools.git/commit/?id=2c9f26ed20a791a7df0182ba82e93abb52f5a615] +--- + kexec/arch/i386/Makefile | 2 +- + kexec/arch/i386/kexec-x86.h | 5 +++++ + 2 files changed, 6 insertions(+), 1 deletion(-) + +diff --git a/kexec/arch/i386/Makefile b/kexec/arch/i386/Makefile +index 105cefd..f486103 100644 +--- a/kexec/arch/i386/Makefile ++++ b/kexec/arch/i386/Makefile +@@ -7,6 +7,7 @@ i386_KEXEC_SRCS += kexec/arch/i386/kexec-elf-x86.c + i386_KEXEC_SRCS += kexec/arch/i386/kexec-elf-rel-x86.c + i386_KEXEC_SRCS += kexec/arch/i386/kexec-bzImage.c + i386_KEXEC_SRCS += kexec/arch/i386/kexec-multiboot-x86.c ++i386_KEXEC_SRCS += kexec/arch/i386/kexec-mb2-x86.c + i386_KEXEC_SRCS += kexec/arch/i386/kexec-beoboot-x86.c + i386_KEXEC_SRCS += kexec/arch/i386/kexec-nbi.c + i386_KEXEC_SRCS += kexec/arch/i386/x86-linux-setup.c +@@ -14,7 +15,6 @@ i386_KEXEC_SRCS += kexec/arch/i386/crashdump-x86.c + + dist += kexec/arch/i386/Makefile $(i386_KEXEC_SRCS) \ + kexec/arch/i386/crashdump-x86.h \ +- kexec/arch/i386/kexec-mb2-x86.c \ + kexec/arch/i386/kexec-x86.h \ + kexec/arch/i386/x86-linux-setup.h \ + kexec/arch/i386/include/arch/options.h +diff --git a/kexec/arch/i386/kexec-x86.h b/kexec/arch/i386/kexec-x86.h +index 1b58c3b..0f941df 100644 +--- a/kexec/arch/i386/kexec-x86.h ++++ b/kexec/arch/i386/kexec-x86.h +@@ -60,6 +60,11 @@ int multiboot_x86_load(int argc, char **argv, const char *buf, off_t len, + struct kexec_info *info); + void multiboot_x86_usage(void); + ++int multiboot2_x86_load(int argc, char **argv, const char *buf, off_t len, ++ struct kexec_info *info); ++void multiboot2_x86_usage(void); ++int multiboot2_x86_probe(const char *buf, off_t buf_len); ++ + int elf_x86_probe(const char *buf, off_t len); + int elf_x86_load(int argc, char **argv, const char *buf, off_t len, + struct kexec_info *info); +-- +cgit 1.2-0.3.lf.el7 + diff --git a/package/kexec/0002-kexec-tools-Remove-duplicated-variable-declarations.patch b/package/kexec/0002-kexec-tools-Remove-duplicated-variable-declarations.patch new file mode 100644 index 00000000..99cb9a28 --- /dev/null +++ b/package/kexec/0002-kexec-tools-Remove-duplicated-variable-declarations.patch @@ -0,0 +1,102 @@ +From cc087b11462af9f971a2c090d07e8d780a867b50 Mon Sep 17 00:00:00 2001 +From: Kairui Song +Date: Wed, 29 Jan 2020 13:38:19 +0800 +Subject: kexec-tools: Remove duplicated variable declarations + +When building kexec-tools for Fedora 32, following error is observed: + +/usr/bin/ld: kexec/arch/x86_64/kexec-bzImage64.o:(.bss+0x0): multiple definition of `bzImage_support_efi_boot'; +kexec/arch/i386/kexec-bzImage.o:(.bss+0x0): first defined here + +/builddir/build/BUILD/kexec-tools-2.0.20/kexec/arch/arm/../../fs2dt.h:33: multiple definition of `my_debug'; +kexec/fs2dt.o:/builddir/build/BUILD/kexec-tools-2.0.20/kexec/fs2dt.h:33: first defined here + +/builddir/build/BUILD/kexec-tools-2.0.20/kexec/arch/arm64/kexec-arm64.h:68: multiple definition of `arm64_mem'; +kexec/fs2dt.o:/builddir/build/BUILD/kexec-tools-2.0.20/././kexec/arch/arm64/kexec-arm64.h:68: first defined here + +/builddir/build/BUILD/kexec-tools-2.0.20/kexec/arch/arm64/kexec-arm64.h:54: multiple definition of `initrd_size'; +kexec/fs2dt.o:/builddir/build/BUILD/kexec-tools-2.0.20/././kexec/arch/arm64/kexec-arm64.h:54: first defined here + +/builddir/build/BUILD/kexec-tools-2.0.20/kexec/arch/arm64/kexec-arm64.h:53: multiple definition of `initrd_base'; +kexec/fs2dt.o:/builddir/build/BUILD/kexec-tools-2.0.20/././kexec/arch/arm64/kexec-arm64.h:53: first defined here + +And apparently, these variables are wrongly declared multiple times. So +remove duplicated declaration. + +Signed-off-by: Kairui Song +Signed-off-by: Simon Horman +[Retrieved from: +https://git.kernel.org/pub/scm/utils/kernel/kexec/kexec-tools.git/commit/?id=cc087b11462af9f971a2c090d07e8d780a867b50] +Signed-off-by: Fabrice Fontaine +--- + kexec/arch/arm64/kexec-arm64.h | 6 +++--- + kexec/arch/ppc64/kexec-elf-ppc64.c | 2 -- + kexec/arch/x86_64/kexec-bzImage64.c | 1 - + kexec/fs2dt.h | 2 +- + 4 files changed, 4 insertions(+), 7 deletions(-) + +diff --git a/kexec/arch/arm64/kexec-arm64.h b/kexec/arch/arm64/kexec-arm64.h +index 628de79..ed447ac 100644 +--- a/kexec/arch/arm64/kexec-arm64.h ++++ b/kexec/arch/arm64/kexec-arm64.h +@@ -50,8 +50,8 @@ int zImage_arm64_load(int argc, char **argv, const char *kernel_buf, + void zImage_arm64_usage(void); + + +-off_t initrd_base; +-off_t initrd_size; ++extern off_t initrd_base; ++extern off_t initrd_size; + + /** + * struct arm64_mem - Memory layout info. +@@ -65,7 +65,7 @@ struct arm64_mem { + }; + + #define arm64_mem_ngv UINT64_MAX +-struct arm64_mem arm64_mem; ++extern struct arm64_mem arm64_mem; + + uint64_t get_phys_offset(void); + uint64_t get_vp_offset(void); +diff --git a/kexec/arch/ppc64/kexec-elf-ppc64.c b/kexec/arch/ppc64/kexec-elf-ppc64.c +index 3510b70..695b8b0 100644 +--- a/kexec/arch/ppc64/kexec-elf-ppc64.c ++++ b/kexec/arch/ppc64/kexec-elf-ppc64.c +@@ -44,8 +44,6 @@ + uint64_t initrd_base, initrd_size; + unsigned char reuse_initrd = 0; + const char *ramdisk; +-/* Used for enabling printing message from purgatory code */ +-int my_debug = 0; + + int elf_ppc64_probe(const char *buf, off_t len) + { +diff --git a/kexec/arch/x86_64/kexec-bzImage64.c b/kexec/arch/x86_64/kexec-bzImage64.c +index 8edb3e4..ba8dc48 100644 +--- a/kexec/arch/x86_64/kexec-bzImage64.c ++++ b/kexec/arch/x86_64/kexec-bzImage64.c +@@ -42,7 +42,6 @@ + #include + + static const int probe_debug = 0; +-int bzImage_support_efi_boot; + + int bzImage64_probe(const char *buf, off_t len) + { +diff --git a/kexec/fs2dt.h b/kexec/fs2dt.h +index 7633273..fe24931 100644 +--- a/kexec/fs2dt.h ++++ b/kexec/fs2dt.h +@@ -30,7 +30,7 @@ extern struct bootblock bb[1]; + + /* Used for enabling printing message from purgatory code + * Only has implemented for PPC64 */ +-int my_debug; ++extern int my_debug; + extern int dt_no_old_root; + + void reserve(unsigned long long where, unsigned long long length); +-- +cgit 1.2.3-1.el7 + diff --git a/package/kexec/0003-kexec-tools-fix-build-on-pre-4.4-kernels.patch b/package/kexec/0003-kexec-tools-fix-build-on-pre-4.4-kernels.patch new file mode 100644 index 00000000..fcac604d --- /dev/null +++ b/package/kexec/0003-kexec-tools-fix-build-on-pre-4.4-kernels.patch @@ -0,0 +1,34 @@ +From cbbe4c47cb2acae04083c510dbe0efc5f48f5bb6 Mon Sep 17 00:00:00 2001 +From: Federico Pellegrin +Date: Wed, 3 Feb 2021 11:00:17 +0100 +Subject: [PATCH] kexec-tools: fix build on pre 4.4 kernels + +kexec build will fail on older kernels (pre 4.4) as the define +VIDEO_CAPABILITY_64BIT_BASE was not present at that time. + +This patch adds it, as per linux/include/uapi/linux/screen_info.h, +if not present. + +Signed-off-by: Federico Pellegrin +--- + kexec/arch/i386/x86-linux-setup.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/kexec/arch/i386/x86-linux-setup.c b/kexec/arch/i386/x86-linux-setup.c +index 76e1185..ab54a4a 100644 +--- a/kexec/arch/i386/x86-linux-setup.c ++++ b/kexec/arch/i386/x86-linux-setup.c +@@ -37,6 +37,10 @@ + #include "x86-linux-setup.h" + #include "../../kexec/kexec-syscall.h" + ++#ifndef VIDEO_CAPABILITY_64BIT_BASE ++#define VIDEO_CAPABILITY_64BIT_BASE (1 << 1) /* Frame buffer base is 64-bit */ ++#endif ++ + void init_linux_parameters(struct x86_linux_param_header *real_mode) + { + /* Fill in the values that are usually provided by the kernel. */ +-- +2.26.2 + diff --git a/package/kexec/Config.in b/package/kexec/Config.in new file mode 100644 index 00000000..90a7bc26 --- /dev/null +++ b/package/kexec/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_KEXEC + bool "kexec" + depends on BR2_i386 || BR2_x86_64 || BR2_arm || BR2_armeb || \ + BR2_mips || BR2_mips64 || BR2_mipsel || BR2_mips64el || \ + BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le || \ + BR2_sh4 || BR2_sh4a || BR2_aarch64 || BR2_s390x + help + Kexec is a user space utility for loading another kernel + and asking the currently running kernel to do something with + it. + + https://www.kernel.org/pub/linux/utils/kernel/kexec/ + +if BR2_PACKAGE_KEXEC + +config BR2_PACKAGE_KEXEC_ZLIB + bool "zlib support" + select BR2_PACKAGE_ZLIB + help + Support for compressed kernel images + +endif diff --git a/package/kexec/kexec.hash b/package/kexec/kexec.hash new file mode 100644 index 00000000..302e0790 --- /dev/null +++ b/package/kexec/kexec.hash @@ -0,0 +1,4 @@ +# From https://www.kernel.org/pub/linux/utils/kernel/kexec/sha256sums.asc +sha256 dad8077f0315445d1f6335579fc4ade222facf82a67124974c7be5303ba4f8c8 kexec-tools-2.0.20.tar.xz +# locally calculated +sha256 fa5fc1d1eec39532ea517518eeefd7b6e3c14341a55e5880a0e2a49eee47a5b7 COPYING diff --git a/package/kexec/kexec.mk b/package/kexec/kexec.mk new file mode 100644 index 00000000..c54ce1f1 --- /dev/null +++ b/package/kexec/kexec.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# kexec +# +################################################################################ + +KEXEC_VERSION = 2.0.20 +KEXEC_SOURCE = kexec-tools-$(KEXEC_VERSION).tar.xz +KEXEC_SITE = $(BR2_KERNEL_MIRROR)/linux/utils/kernel/kexec +KEXEC_LICENSE = GPL-2.0 +KEXEC_LICENSE_FILES = COPYING +KEXEC_SELINUX_MODULES = kdump + +# Makefile expects $STRIP -o to work, so needed for !BR2_STRIP_strip +KEXEC_MAKE_OPTS = STRIP="$(TARGET_CROSS)strip" + +ifeq ($(BR2_PACKAGE_KEXEC_ZLIB),y) +KEXEC_CONF_OPTS += --with-zlib +KEXEC_DEPENDENCIES = zlib +else +KEXEC_CONF_OPTS += --without-zlib +endif + +ifeq ($(BR2_PACKAGE_XZ),y) +KEXEC_CONF_OPTS += --with-lzma +KEXEC_DEPENDENCIES += xz +else +KEXEC_CONF_OPTS += --without-lzma +endif + +define KEXEC_REMOVE_LIB_TOOLS + rm -rf $(TARGET_DIR)/usr/lib/kexec-tools +endef + +KEXEC_POST_INSTALL_TARGET_HOOKS += KEXEC_REMOVE_LIB_TOOLS + +$(eval $(autotools-package)) diff --git a/package/keyutils/0001-fix-install-rule.patch b/package/keyutils/0001-fix-install-rule.patch new file mode 100644 index 00000000..b8bad533 --- /dev/null +++ b/package/keyutils/0001-fix-install-rule.patch @@ -0,0 +1,22 @@ +Makefile: fix install rule + +Do not link the .so with an absolute path, otherwise it may point to +the host library. + +Based on the former patch by Yann E. MORIN. + +Signed-off-by: Vicente Olivert Riera +[baruch: update for 1.6] +Signed-off-by: Baruch Siach + +--- keyutils-1.5.9/Makefile.orig 2014-09-22 16:13:41.593562765 +0100 ++++ keyutils-1.5.9/Makefile 2014-09-22 16:14:05.377963952 +0100 +@@ -200,7 +200,7 @@ ifeq ($(NO_SOLIB),0) + $(INSTALL) -D $(LIBNAME) $(DESTDIR)$(LIBDIR)/$(LIBNAME) + $(LNS) $(LIBNAME) $(DESTDIR)$(LIBDIR)/$(SONAME) + mkdir -p $(DESTDIR)$(USRLIBDIR) +- $(LNS) $(LIBDIR)/$(SONAME) $(DESTDIR)$(USRLIBDIR)/$(DEVELLIB) ++ $(LNS) $(SONAME) $(DESTDIR)$(USRLIBDIR)/$(DEVELLIB) + sed \ + -e 's,@VERSION\@,$(VERSION),g' \ + -e 's,@prefix\@,$(PREFIX),g' \ diff --git a/package/keyutils/0002-cifs.patch b/package/keyutils/0002-cifs.patch new file mode 100644 index 00000000..23f8e331 --- /dev/null +++ b/package/keyutils/0002-cifs.patch @@ -0,0 +1,15 @@ +Patch vampirised from Debian's packaging of keyutils-1.4 + +Author: Marcus Meissner +Description: Added 2 cifs helpers to request-key.conf (for CIFS DFS support) + +diff -Naurp keyutils.orig/request-key.conf keyutils/request-key.conf +--- keyutils.orig/request-key.conf 2008-09-07 23:53:10.000000000 +0000 ++++ keyutils/request-key.conf 2009-02-05 00:53:00.000000000 +0000 +@@ -38,4 +38,6 @@ + create user debug:* revoked /bin/keyctl reject %k 30 %c %S + create user debug:loop:* * |/bin/cat + create user debug:* * /usr/share/keyutils/request-key-debug.sh %k %d %c %S ++create cifs.spnego * * /usr/sbin/cifs.upcall -c %k ++create dns_resolver * * /usr/sbin/cifs.upcall %k + negate * * * /bin/keyctl negate %k 30 %S diff --git a/package/keyutils/Config.in b/package/keyutils/Config.in new file mode 100644 index 00000000..e4a2e846 --- /dev/null +++ b/package/keyutils/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_KEYUTILS + bool "keyutils" + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS # dlopen + help + These tools are used to control the key management system + built into the Linux kernel. + + https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/keyutils.git/ + +comment "keyutils needs a toolchain w/ dynamic library" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS diff --git a/package/keyutils/keyutils.hash b/package/keyutils/keyutils.hash new file mode 100644 index 00000000..35de0c78 --- /dev/null +++ b/package/keyutils/keyutils.hash @@ -0,0 +1,4 @@ +# Locally computed +sha256 a61d5706136ae4c05bd48f86186bcfdbd88dd8bd5107e3e195c924cfc1b39bb4 keyutils-1.6.3.tar.gz +sha256 f46409d4822b2457b39bbd0e7881eecb396130eb8320b7748fa7e9488970aa6d LICENCE.GPL +sha256 0d15593e3a8ad90917f8509b5ac1e4b5e5d196434a68029aa9dc0858a4a4c521 LICENCE.LGPL diff --git a/package/keyutils/keyutils.mk b/package/keyutils/keyutils.mk new file mode 100644 index 00000000..cba57cf1 --- /dev/null +++ b/package/keyutils/keyutils.mk @@ -0,0 +1,42 @@ +################################################################################ +# +# keyutils +# +################################################################################ + +KEYUTILS_VERSION = 1.6.3 +KEYUTILS_SITE = https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/keyutils.git/snapshot +KEYUTILS_LICENSE = GPL-2.0+, LGPL-2.1+ +KEYUTILS_LICENSE_FILES = LICENCE.GPL LICENCE.LGPL +KEYUTILS_INSTALL_STAGING = YES + +KEYUTILS_MAKE_PARAMS = \ + INSTALL=$(INSTALL) \ + LIBDIR=/usr/lib \ + USRLIBDIR=/usr/lib \ + CFLAGS="$(TARGET_CFLAGS)" \ + CPPFLAGS="$(TARGET_CPPFLAGS) -I." \ + LNS="$(HOSTLN) -sf" + +ifeq ($(BR2_SHARED_LIBS),y) +KEYUTILS_MAKE_PARAMS += NO_ARLIB=1 +endif + +# Touch cxx.stamp to avoid adding a C++ dependency +define KEYUTILS_CONFIGURE_CMDS + touch $(@D)/cxx.stamp +endef + +define KEYUTILS_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) $(KEYUTILS_MAKE_PARAMS) -C $(@D) +endef + +define KEYUTILS_INSTALL_STAGING_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) $(KEYUTILS_MAKE_PARAMS) -C $(@D) DESTDIR=$(STAGING_DIR) install +endef + +define KEYUTILS_INSTALL_TARGET_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) $(KEYUTILS_MAKE_PARAMS) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/kf5/Config.in b/package/kf5/Config.in new file mode 100644 index 00000000..030759f3 --- /dev/null +++ b/package/kf5/Config.in @@ -0,0 +1,15 @@ +menuconfig BR2_PACKAGE_KF5 + bool "KF5" + depends on BR2_PACKAGE_QT5 + help + This option enables the KF5 KDE Frameworks. Sub-options + allow to select which modules should be built. + + https://techbase.kde.org/KDE_Frameworks + +if BR2_PACKAGE_KF5 +source "package/kf5/kf5-extra-cmake-modules/Config.in" +source "package/kf5/kf5-kcoreaddons/Config.in" +source "package/kf5/kf5-modemmanager-qt/Config.in" +source "package/kf5/kf5-networkmanager-qt/Config.in" +endif diff --git a/package/kf5/kf5-extra-cmake-modules/Config.in b/package/kf5/kf5-extra-cmake-modules/Config.in new file mode 100644 index 00000000..7cb1036c --- /dev/null +++ b/package/kf5/kf5-extra-cmake-modules/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_KF5_EXTRA_CMAKE_MODULES + bool "kf5-extra-cmake-modules" + help + KF5 is a set of Qt framework addons, extending Qt in various + ways, not only restricted in helping integration in KDE. + + This package corresponds to the extra CMake modules, + required for most KF5 libraries. + + https://api.kde.org/frameworks/extra-cmake-modules/html/index.html diff --git a/package/kf5/kf5-extra-cmake-modules/kf5-extra-cmake-modules.hash b/package/kf5/kf5-extra-cmake-modules/kf5-extra-cmake-modules.hash new file mode 100644 index 00000000..733e267f --- /dev/null +++ b/package/kf5/kf5-extra-cmake-modules/kf5-extra-cmake-modules.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 976d8bd15a0b929376bfaef34602a0fb9614229851c46fac3c4b28938f682195 extra-cmake-modules-5.47.0.tar.xz +sha256 46cde7dc11e64c78d650b4851b88f6704b4665ff60f22a1caf68ceb15e217e5b COPYING-CMAKE-SCRIPTS diff --git a/package/kf5/kf5-extra-cmake-modules/kf5-extra-cmake-modules.mk b/package/kf5/kf5-extra-cmake-modules/kf5-extra-cmake-modules.mk new file mode 100644 index 00000000..3c4281b9 --- /dev/null +++ b/package/kf5/kf5-extra-cmake-modules/kf5-extra-cmake-modules.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# kf5-extra-cmake-modules +# +################################################################################ + +KF5_EXTRA_CMAKE_MODULES_VERSION = $(KF5_VERSION) +KF5_EXTRA_CMAKE_MODULES_SITE = $(KF5_SITE) +KF5_EXTRA_CMAKE_MODULES_SOURCE = extra-cmake-modules-$(KF5_EXTRA_CMAKE_MODULES_VERSION).tar.xz +KF5_EXTRA_CMAKE_MODULES_LICENSE = BSD-3-Clause +KF5_EXTRA_CMAKE_MODULES_LICENSE_FILES = COPYING-CMAKE-SCRIPTS + +KF5_EXTRA_CMAKE_MODULES_DEPENDENCIES = host-pkgconf +KF5_EXTRA_CMAKE_MODULES_INSTALL_STAGING = YES +KF5_EXTRA_CMAKE_MODULES_INSTALL_TARGET = NO + +$(eval $(cmake-package)) diff --git a/package/kf5/kf5-kcoreaddons/Config.in b/package/kf5/kf5-kcoreaddons/Config.in new file mode 100644 index 00000000..02bd38e3 --- /dev/null +++ b/package/kf5/kf5-kcoreaddons/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_KF5_KCOREADDONS + bool "kf5-kcoreaddons" + depends on !BR2_TOOLCHAIN_HAS_BINUTILS_BUG_27597 + select BR2_PACKAGE_KF5_EXTRA_CMAKE_MODULES + select BR2_PACKAGE_QT5TOOLS + select BR2_PACKAGE_QT5TOOLS_LINGUIST_TOOLS + help + KF5 is a set of Qt framework addons, extending Qt in + various ways, not only restricted in helping integration + in KDE. + + This package contains KCoreAddons, a set of classes built + on top of QtCore to perform various tasks. + + https://api.kde.org/frameworks/kcoreaddons/html/index.html diff --git a/package/kf5/kf5-kcoreaddons/kf5-kcoreaddons.hash b/package/kf5/kf5-kcoreaddons/kf5-kcoreaddons.hash new file mode 100644 index 00000000..0cd8dcfc --- /dev/null +++ b/package/kf5/kf5-kcoreaddons/kf5-kcoreaddons.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 40ff04757e4ac19bc8448940fe18886c894a2069865966cc865fc55ff67b0b46 kcoreaddons-5.47.0.tar.xz +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 COPYING.LIB diff --git a/package/kf5/kf5-kcoreaddons/kf5-kcoreaddons.mk b/package/kf5/kf5-kcoreaddons/kf5-kcoreaddons.mk new file mode 100644 index 00000000..76be8876 --- /dev/null +++ b/package/kf5/kf5-kcoreaddons/kf5-kcoreaddons.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# kf5-kcoreaddons +# +################################################################################ + +KF5_KCOREADDONS_VERSION = $(KF5_VERSION) +KF5_KCOREADDONS_SITE = $(KF5_SITE) +KF5_KCOREADDONS_SOURCE = kcoreaddons-$(KF5_KCOREADDONS_VERSION).tar.xz +KF5_KCOREADDONS_LICENSE = LGPL-2.1 +KF5_KCOREADDONS_LICENSE_FILES = COPYING.LIB + +KF5_KCOREADDONS_DEPENDENCIES = kf5-extra-cmake-modules qt5tools +KF5_KCOREADDONS_INSTALL_STAGING = YES + +KF5_KCOREADDONS_CXXFLAGS = $(TARGET_CXXFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +KF5_KCOREADDONS_CXXFLAGS += -latomic +endif + +KF5_KCOREADDONS_CONF_OPTS = -DCMAKE_CXX_FLAGS="$(KF5_KCOREADDONS_CXXFLAGS)" + +ifeq ($(BR2_microblaze),y) +# Microblaze ld emits warnings, make warnings not to be treated as errors +KF5_KCOREADDONS_CONF_OPTS += -DCMAKE_SHARED_LINKER_FLAGS="-Wl,--no-fatal-warnings" +endif + +$(eval $(cmake-package)) diff --git a/package/kf5/kf5-modemmanager-qt/Config.in b/package/kf5/kf5-modemmanager-qt/Config.in new file mode 100644 index 00000000..f08de556 --- /dev/null +++ b/package/kf5/kf5-modemmanager-qt/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_KF5_MODEMMANAGER_QT + bool "kf5-modemmanager-qt" + depends on BR2_USE_MMU # qt5dbus + depends on BR2_TOOLCHAIN_HAS_THREADS # qt5dbus + depends on BR2_PACKAGE_MODEM_MANAGER + select BR2_PACKAGE_QT5BASE_DBUS + select BR2_PACKAGE_KF5_EXTRA_CMAKE_MODULES + help + KF5 is a set of Qt framework addons, extending Qt in various + ways, not only restricted in helping integration in KDE. + + This package contains the ModemManager Qt5 bindings from the + KF5 project. + + https://api.kde.org/frameworks/modemmanager-qt/html/index.html + +comment "kf5-modemmanager-qt needs toolchain w/ threads" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_MODEM_MANAGER + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/kf5/kf5-modemmanager-qt/kf5-modemmanager-qt.hash b/package/kf5/kf5-modemmanager-qt/kf5-modemmanager-qt.hash new file mode 100644 index 00000000..408eb0c0 --- /dev/null +++ b/package/kf5/kf5-modemmanager-qt/kf5-modemmanager-qt.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 8b6ab15ce82b7a30b26814178ac33380056ec4398707481aa5ce95cf09d39d03 modemmanager-qt-5.47.0.tar.xz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LIB diff --git a/package/kf5/kf5-modemmanager-qt/kf5-modemmanager-qt.mk b/package/kf5/kf5-modemmanager-qt/kf5-modemmanager-qt.mk new file mode 100644 index 00000000..81617492 --- /dev/null +++ b/package/kf5/kf5-modemmanager-qt/kf5-modemmanager-qt.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# kf5-modemmanager-qt +# +################################################################################ + +KF5_MODEMMANAGER_QT_VERSION = $(KF5_VERSION) +KF5_MODEMMANAGER_QT_SITE = $(KF5_SITE) +KF5_MODEMMANAGER_QT_SOURCE = modemmanager-qt-$(KF5_MODEMMANAGER_QT_VERSION).tar.xz +KF5_MODEMMANAGER_QT_LICENSE = LGPL-2.1+ +KF5_MODEMMANAGER_QT_LICENSE_FILES = COPYING.LIB + +KF5_MODEMMANAGER_QT_DEPENDENCIES = kf5-extra-cmake-modules modem-manager qt5base +KF5_MODEMMANAGER_QT_INSTALL_STAGING = YES + +# Uses __atomic_fetch_add_4 +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +KF5_MODEMMANAGER_QT_CONF_OPTS += -DCMAKE_EXE_LINKER_FLAGS=-latomic +endif + +$(eval $(cmake-package)) diff --git a/package/kf5/kf5-networkmanager-qt/Config.in b/package/kf5/kf5-networkmanager-qt/Config.in new file mode 100644 index 00000000..6b309f08 --- /dev/null +++ b/package/kf5/kf5-networkmanager-qt/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_KF5_NETWORKMANAGER_QT + bool "kf5-networkmanager-qt" + depends on BR2_USE_MMU # qt5dbus + depends on BR2_TOOLCHAIN_HAS_THREADS # qt5dbus + depends on BR2_PACKAGE_NETWORK_MANAGER + select BR2_PACKAGE_QT5BASE_DBUS + select BR2_PACKAGE_KF5_EXTRA_CMAKE_MODULES + help + KF5 is a set of Qt framework addons, extending Qt in various + ways, not only restricted in helping integration in KDE. + + This package contains the NetworkManager Qt5 bindings from + the KF5 project. + + https://api.kde.org/frameworks/networkmanager-qt/html/index.html + +comment "kf5-networkmanager-qt needs toolchain w/ threads" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_NETWORK_MANAGER + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/kf5/kf5-networkmanager-qt/kf5-networkmanager-qt.hash b/package/kf5/kf5-networkmanager-qt/kf5-networkmanager-qt.hash new file mode 100644 index 00000000..8ccada45 --- /dev/null +++ b/package/kf5/kf5-networkmanager-qt/kf5-networkmanager-qt.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 d0b377500ee4cf4f029f4d04d6844bcf3d2d6734982b511a5fffab5165688209 networkmanager-qt-5.47.0.tar.xz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LIB diff --git a/package/kf5/kf5-networkmanager-qt/kf5-networkmanager-qt.mk b/package/kf5/kf5-networkmanager-qt/kf5-networkmanager-qt.mk new file mode 100644 index 00000000..c383f98e --- /dev/null +++ b/package/kf5/kf5-networkmanager-qt/kf5-networkmanager-qt.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# kf5-networkmanager-qt +# +################################################################################ + +KF5_NETWORKMANAGER_QT_VERSION = $(KF5_VERSION) +KF5_NETWORKMANAGER_QT_SITE = $(KF5_SITE) +KF5_NETWORKMANAGER_QT_SOURCE = networkmanager-qt-$(KF5_NETWORKMANAGER_QT_VERSION).tar.xz +KF5_NETWORKMANAGER_QT_LICENSE = LGPL-2.1+ +KF5_NETWORKMANAGER_QT_LICENSE_FILES = COPYING.LIB + +KF5_NETWORKMANAGER_QT_DEPENDENCIES = kf5-extra-cmake-modules network-manager qt5base +KF5_NETWORKMANAGER_QT_INSTALL_STAGING = YES + +$(eval $(cmake-package)) diff --git a/package/kf5/kf5.mk b/package/kf5/kf5.mk new file mode 100644 index 00000000..8360fc9b --- /dev/null +++ b/package/kf5/kf5.mk @@ -0,0 +1,11 @@ +################################################################################ +# +# kf5 +# +################################################################################ + +KF5_VERSION_MAJOR = 5.47 +KF5_VERSION = $(KF5_VERSION_MAJOR).0 +KF5_SITE = https://download.kde.org/stable/frameworks/$(KF5_VERSION_MAJOR) + +include $(sort $(wildcard package/kf5/*/*.mk)) diff --git a/package/kismet/0001-Add-getter-to-read-database-values-as-long-long.patch b/package/kismet/0001-Add-getter-to-read-database-values-as-long-long.patch new file mode 100644 index 00000000..564cba87 --- /dev/null +++ b/package/kismet/0001-Add-getter-to-read-database-values-as-long-long.patch @@ -0,0 +1,28 @@ +From 1d36faad18e34b43ac8ea3e7f6a44315f827a2db Mon Sep 17 00:00:00 2001 +From: George Hopkins +Date: Mon, 4 Jan 2021 13:59:41 +0100 +Subject: [PATCH] Add getter to read database values as long long + +[Retrieved from: +https://github.com/kismetwireless/kismet/commit/1d36faad18e34b43ac8ea3e7f6a44315f827a2db] +Signed-off-by: Fabrice Fontaine +--- + sqlite3_cpp11.cc | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/sqlite3_cpp11.cc b/sqlite3_cpp11.cc +index 7974bde8c..5c92dfa87 100644 +--- a/sqlite3_cpp11.cc ++++ b/sqlite3_cpp11.cc +@@ -411,6 +411,11 @@ namespace kissqlite3 { + return (unsigned long) sqlite3_column_int64(stmt.get(), column); + } + ++ template<> ++ long long sqlite3_column_as(std::shared_ptr stmt, unsigned int column) { ++ return (long long) sqlite3_column_int64(stmt.get(), column); ++ } ++ + template<> + unsigned long long sqlite3_column_as(std::shared_ptr stmt, unsigned int column) { + return (unsigned long long) sqlite3_column_int64(stmt.get(), column); diff --git a/package/kismet/0002-boost-asio-Use-eventfd-function-with-uClibc.patch b/package/kismet/0002-boost-asio-Use-eventfd-function-with-uClibc.patch new file mode 100644 index 00000000..eb5fb2ec --- /dev/null +++ b/package/kismet/0002-boost-asio-Use-eventfd-function-with-uClibc.patch @@ -0,0 +1,66 @@ +From 9330d34ced1d7d0e56d579bb55a9ed1286d324f0 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Thu, 4 Mar 2021 13:36:52 +0100 +Subject: [PATCH] boost/asio: Use eventfd() function with uClibc + +Fix build with uclibc thanks to +https://github.com/boostorg/asio/commit/b2ee39aee0b186c5bcabb051b7a536ab1517616a + +Fixes: + - http://autobuild.buildroot.org/results/1c2885d75219aabadbb66ab66fe0dc4b4346ff1e + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/kismetwireless/kismet/commit/9330d34ced1d7d0e56d579bb55a9ed1286d324f0] +--- + .../asio/detail/impl/eventfd_select_interrupter.ipp | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/boost/asio/detail/impl/eventfd_select_interrupter.ipp b/boost/asio/detail/impl/eventfd_select_interrupter.ipp +index 38d4b2a6..8bdb3c20 100644 +--- a/boost/asio/detail/impl/eventfd_select_interrupter.ipp ++++ b/boost/asio/detail/impl/eventfd_select_interrupter.ipp +@@ -23,11 +23,11 @@ + #include + #include + #include +-#if __GLIBC__ == 2 && __GLIBC_MINOR__ < 8 ++#if __GLIBC__ == 2 && __GLIBC_MINOR__ < 8 && !defined(__UCLIBC__) + # include +-#else // __GLIBC__ == 2 && __GLIBC_MINOR__ < 8 ++#else // __GLIBC__ == 2 && __GLIBC_MINOR__ < 8 && !defined(__UCLIBC__) + # include +-#endif // __GLIBC__ == 2 && __GLIBC_MINOR__ < 8 ++#endif // __GLIBC__ == 2 && __GLIBC_MINOR__ < 8 && !defined(__UCLIBC__) + #include + #include + #include +@@ -46,14 +46,14 @@ eventfd_select_interrupter::eventfd_select_interrupter() + + void eventfd_select_interrupter::open_descriptors() + { +-#if __GLIBC__ == 2 && __GLIBC_MINOR__ < 8 ++#if __GLIBC__ == 2 && __GLIBC_MINOR__ < 8 && !defined(__UCLIBC__) + write_descriptor_ = read_descriptor_ = syscall(__NR_eventfd, 0); + if (read_descriptor_ != -1) + { + ::fcntl(read_descriptor_, F_SETFL, O_NONBLOCK); + ::fcntl(read_descriptor_, F_SETFD, FD_CLOEXEC); + } +-#else // __GLIBC__ == 2 && __GLIBC_MINOR__ < 8 ++#else // __GLIBC__ == 2 && __GLIBC_MINOR__ < 8 && !defined(__UCLIBC__) + # if defined(EFD_CLOEXEC) && defined(EFD_NONBLOCK) + write_descriptor_ = read_descriptor_ = + ::eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK); +@@ -70,7 +70,7 @@ void eventfd_select_interrupter::open_descriptors() + ::fcntl(read_descriptor_, F_SETFD, FD_CLOEXEC); + } + } +-#endif // __GLIBC__ == 2 && __GLIBC_MINOR__ < 8 ++#endif // __GLIBC__ == 2 && __GLIBC_MINOR__ < 8 && !defined(__UCLIBC__) + + if (read_descriptor_ == -1) + { +-- +2.30.0 + diff --git a/package/kismet/Config.in b/package/kismet/Config.in new file mode 100644 index 00000000..d9f8ebe0 --- /dev/null +++ b/package/kismet/Config.in @@ -0,0 +1,76 @@ +comment "kismet needs a toolchain w/ threads, C++" + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86" + +config BR2_PACKAGE_KISMET + bool "kismet" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86" # protobuf-c + select BR2_PACKAGE_LIBPCAP + select BR2_PACKAGE_PROTOBUF_C + select BR2_PACKAGE_SQLITE + select BR2_PACKAGE_ZLIB + help + Kismet is a wireless network and device detector, sniffer, + wardriving tool, and WIDS (wireless intrusion detection) + framework. + + Kismet works with Wi-Fi interfaces, Bluetooth interfaces, some + SDR (software defined radio) hardware like the RTLSDR, and + other specialized capture hardware. + + http://www.kismetwireless.net + +if BR2_PACKAGE_KISMET + +config BR2_PACKAGE_KISMET_PYTHON_TOOLS + bool "Install python tools" + depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS # protobuf + depends on BR2_PACKAGE_PYTHON_NUMPY_ARCH_SUPPORTS # python-numpy + depends on BR2_PACKAGE_PYTHON3 + depends on !BR2_STATIC_LIBS # protobuf + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # protobuf + depends on BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_MUSL # python-numpy + select BR2_PACKAGE_PROTOBUF + select BR2_PACKAGE_PYTHON_NUMPY # runtime for RTLAMR and RTLADSB + select BR2_PACKAGE_PYTHON_PROTOBUF # runtime + select BR2_PACKAGE_PYTHON_SERIAL # runtime for Freaklabs Zigbee + select BR2_PACKAGE_PYTHON_SETUPTOOLS + help + Enable Python and Python-related tools (RTL_433, RTLAMR, + RTLADSB and Freaklabs Zigbee) + +comment "python tools needs python3" + depends on !BR2_PACKAGE_PYTHON3 + depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS + depends on BR2_PACKAGE_PYTHON_NUMPY_ARCH_SUPPORTS + +comment "python tools needs a glibc or musl toolchain w/ dynamic library, gcc >= 4.8" + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS + depends on BR2_PACKAGE_PYTHON_NUMPY_ARCH_SUPPORTS + depends on !(BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_MUSL) + +config BR2_PACKAGE_KISMET_SERVER + bool "Install server" + default y + depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS # protobuf + depends on !BR2_STATIC_LIBS # dlfcn.h + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # protobuf + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # std::future + select BR2_PACKAGE_PROTOBUF + +comment "server needs a toolchain w/ dynamic library, wchar, gcc >= 4.8" + depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 + depends on BR2_STATIC_LIBS || !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + +comment "server needs a toolchain not affected by GCC bug 64735" + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 + +endif diff --git a/package/kismet/kismet.hash b/package/kismet/kismet.hash new file mode 100644 index 00000000..2b0baa10 --- /dev/null +++ b/package/kismet/kismet.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 52a8eddd560688693552bcd8ff033f662a1a57b47650d6434c5e2c6d83e2bb33 kismet-2020-12-R3.tar.xz +sha256 93c7f0d7e356b0abfb6f494ff3ea37f96abc84e9a5619b25d4e43f7553a55739 LICENSE diff --git a/package/kismet/kismet.mk b/package/kismet/kismet.mk new file mode 100644 index 00000000..3a171af7 --- /dev/null +++ b/package/kismet/kismet.mk @@ -0,0 +1,97 @@ +################################################################################ +# +# kismet +# +################################################################################ + +KISMET_VERSION = 2020-12-R3 +KISMET_SOURCE = kismet-$(KISMET_VERSION).tar.xz +KISMET_SITE = http://www.kismetwireless.net/code +KISMET_DEPENDENCIES = \ + host-pkgconf \ + libpcap \ + $(if $(BR2_PACKAGE_LIBNL),libnl) \ + $(if $(BR2_PACKAGE_PROTOBUF),protobuf) \ + protobuf-c \ + sqlite \ + zlib +KISMET_LICENSE = GPL-2.0+ +KISMET_LICENSE_FILES = LICENSE +KISMET_SELINUX_MODULES = kismet +# Needed because tarball configure has not been rebuilt after +# https://github.com/kismetwireless/kismet/commit/e70968bcbca86dd448d619c40cdeaae8b7dcee98 +KISMET_AUTORECONF = YES + +KISMET_CONF_OPTS = --disable-debuglibs + +KISMET_CXXFLAGS = $(TARGET_CXXFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y) +KISMET_CXXFLAGS += -O0 +endif + +KISMET_CONF_ENV += CXXFLAGS="$(KISMET_CXXFLAGS)" + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +KISMET_CONF_ENV += LIBS=-latomic +endif + +ifeq ($(BR2_PACKAGE_LIBCAP),y) +KISMET_DEPENDENCIES += libcap +KISMET_CONF_OPTS += --enable-libcap +else +KISMET_CONF_OPTS += --disable-libcap +endif + +ifeq ($(BR2_PACKAGE_LIBUSB),y) +KISMET_DEPENDENCIES += libusb +KISMET_CONF_OPTS += --enable-libusb +else +KISMET_CONF_OPTS += --disable-libusb +endif + +ifeq ($(BR2_PACKAGE_LIBWEBSOCKETS),y) +KISMET_DEPENDENCIES += libwebsockets +KISMET_CONF_OPTS += --enable-libwebsockets +else +KISMET_CONF_OPTS += --disable-libwebsockets +endif + +ifeq ($(BR2_PACKAGE_LM_SENSORS),y) +KISMET_DEPENDENCIES += lm-sensors +KISMET_CONF_OPTS += --enable-lmsensors +else +KISMET_CONF_OPTS += --disable-lmsensors +endif + +ifeq ($(BR2_PACKAGE_PCRE),y) +KISMET_DEPENDENCIES += pcre +KISMET_CONF_OPTS += --enable-pcre +else +KISMET_CONF_OPTS += --disable-pcre +endif + +ifeq ($(BR2_PACKAGE_KISMET_PYTHON_TOOLS),y) +KISMET_DEPENDENCIES += python3 python-setuptools +KISMET_CONF_OPTS += \ + --enable-python-tools \ + --with-python-interpreter=$(HOST_DIR)/bin/python$(PYTHON3_VERSION_MAJOR) +else +KISMET_CONF_OPTS += --disable-python-tools +endif + +KISMET_INSTALL_TARGET_OPTS += \ + DESTDIR=$(TARGET_DIR) \ + INSTUSR=$(shell id -u) \ + INSTGRP=$(shell id -g) \ + SUIDGROUP=$(shell id -g) + +ifeq ($(BR2_PACKAGE_KISMET_SERVER),y) +KISMET_CONF_OPTS += --disable-capture-tools-only +KISMET_INSTALL_TARGET_OPTS += install +else +KISMET_CONF_OPTS += --enable-capture-tools-only +KISMET_INSTALL_TARGET_OPTS += binsuidinstall +endif + +$(eval $(autotools-package)) diff --git a/package/kmod/0001-fix-O_CLOEXEC.patch b/package/kmod/0001-fix-O_CLOEXEC.patch new file mode 100644 index 00000000..145ac342 --- /dev/null +++ b/package/kmod/0001-fix-O_CLOEXEC.patch @@ -0,0 +1,48 @@ +From b39a62f6682463bcd47480348fac3dcd209a19a5 Mon Sep 17 00:00:00 2001 +From: Robert Yang +Date: Wed, 22 Jan 2014 01:06:40 -0500 +Subject: [PATCH] Add dummy definition of O_CLOEXEC + +O_CLOEXEC is introduced from Linux 2.6.23, so old kernel doesn't have +it, we need check before use. + +This patch is much more like a workaround, since it may need fcntl() use +FD_CLOEXEC to replace. + +This problem was reported by "Ting Liu " + +[Thomas De Schampheleire +Signed-off-by: Vicente Olivert Riera + +Upstream-status: rejected, suggests to add in buildroot instead [1] + +[1] http://news.gmane.org/find-root.php?message_id=1412062906%2d27378%2d1%2dgit%2dsend%2demail%2dpatrickdepinguin%40gmail.com + +--- + shared/missing.h | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/shared/missing.h b/shared/missing.h +index 4c0d136..e123e98 100644 +--- a/shared/missing.h ++++ b/shared/missing.h +@@ -19,6 +19,10 @@ + # define __NR_finit_module -1 + #endif + ++#ifndef O_CLOEXEC ++#define O_CLOEXEC 0 ++#endif ++ + #ifndef HAVE_FINIT_MODULE + #include + +-- +1.7.1 + diff --git a/package/kmod/Config.in b/package/kmod/Config.in new file mode 100644 index 00000000..e59b281c --- /dev/null +++ b/package/kmod/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_KMOD + bool "kmod" + depends on !BR2_STATIC_LIBS + help + handle kernel modules + + http://git.kernel.org/?p=utils/kernel/kmod/kmod.git + +if BR2_PACKAGE_KMOD + +config BR2_PACKAGE_KMOD_TOOLS + bool "kmod utilities" + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + Install kmod module utilities (depmod, insmod, lsmod, + modinfo, modprobe, rmmod). + +endif + +comment "kmod needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/kmod/Config.in.host b/package/kmod/Config.in.host new file mode 100644 index 00000000..9dbbcea7 --- /dev/null +++ b/package/kmod/Config.in.host @@ -0,0 +1,16 @@ +config BR2_PACKAGE_HOST_KMOD + bool "host kmod" + help + kmod is a set of tools to handle common tasks with Linux + kernel modules like insert, remove, list, check properties, + resolve dependencies and aliases. + +if BR2_PACKAGE_HOST_KMOD + +config BR2_PACKAGE_HOST_KMOD_GZ + bool "support gzip-compressed modules" + +config BR2_PACKAGE_HOST_KMOD_XZ + bool "support xz-compressed modules" + +endif diff --git a/package/kmod/kmod.hash b/package/kmod/kmod.hash new file mode 100644 index 00000000..f0bd436d --- /dev/null +++ b/package/kmod/kmod.hash @@ -0,0 +1,6 @@ +# From https://www.kernel.org/pub/linux/utils/kernel/kmod/sha256sums.asc +sha256 3969fc0f13daa98084256337081c442f8749310089e48aa695c9b4dfe1b3a26c kmod-28.tar.xz + +# Locally calculated +sha256 6095e9ffa777dd22839f7801aa845b31c9ed07f3d6bf8a26dc5d2dec8ccc0ef3 libkmod/COPYING +sha256 6095e9ffa777dd22839f7801aa845b31c9ed07f3d6bf8a26dc5d2dec8ccc0ef3 COPYING diff --git a/package/kmod/kmod.mk b/package/kmod/kmod.mk new file mode 100644 index 00000000..7fed252c --- /dev/null +++ b/package/kmod/kmod.mk @@ -0,0 +1,111 @@ +################################################################################ +# +# kmod +# +################################################################################ + +KMOD_VERSION = 28 +KMOD_SOURCE = kmod-$(KMOD_VERSION).tar.xz +KMOD_SITE = $(BR2_KERNEL_MIRROR)/linux/utils/kernel/kmod +KMOD_INSTALL_STAGING = YES +KMOD_DEPENDENCIES = host-pkgconf +HOST_KMOD_DEPENDENCIES = host-pkgconf + +# license info for libkmod only, conditionally add more below +KMOD_LICENSE = LGPL-2.1+ (library) +KMOD_LICENSE_FILES = libkmod/COPYING + +KMOD_CPE_ID_VENDOR = kernel + +# --gc-sections triggers binutils ld segfault +# https://sourceware.org/bugzilla/show_bug.cgi?id=21180 +ifeq ($(BR2_microblaze),y) +KMOD_CONF_ENV += cc_cv_LDFLAGS__Wl___gc_sections=false +endif + +# static linking not supported, see +# https://git.kernel.org/cgit/utils/kernel/kmod/kmod.git/commit/?id=b7016153ec8 +KMOD_CONF_OPTS = --disable-static --enable-shared + +KMOD_CONF_OPTS += --disable-manpages +HOST_KMOD_CONF_OPTS = --disable-manpages + +ifeq ($(BR2_PACKAGE_BASH_COMPLETION),y) +KMOD_CONF_OPTS += --with-bashcompletiondir=/usr/share/bash-completion/completions +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +KMOD_DEPENDENCIES += zlib +KMOD_CONF_OPTS += --with-zlib +else +KMOD_CONF_OPTS += --without-zlib +endif + +ifeq ($(BR2_PACKAGE_XZ),y) +KMOD_DEPENDENCIES += xz +KMOD_CONF_OPTS += --with-xz +else +KMOD_CONF_OPTS += --without-xz +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +KMOD_DEPENDENCIES += openssl +KMOD_CONF_OPTS += --with-openssl +else +KMOD_CONF_OPTS += --without-openssl +endif + +ifeq ($(BR2_PACKAGE_PYTHON)$(BR2_PACKAGE_PYTHON3),y) +KMOD_DEPENDENCIES += $(if $(BR2_PACKAGE_PYTHON),python,python3) +KMOD_CONF_OPTS += --enable-python +endif + +ifeq ($(BR2_PACKAGE_KMOD_TOOLS),y) + +# add license info for kmod tools +KMOD_LICENSE += , GPL-2.0+ (tools) +KMOD_LICENSE_FILES += COPYING + +# /sbin is really /usr/sbin with merged /usr, so adjust relative symlink +ifeq ($(BR2_ROOTFS_MERGED_USR),y) +KMOD_BIN_PATH = ../bin/kmod +else +KMOD_BIN_PATH = ../usr/bin/kmod +endif + +define KMOD_INSTALL_TOOLS + for i in depmod insmod lsmod modinfo modprobe rmmod; do \ + ln -sf $(KMOD_BIN_PATH) $(TARGET_DIR)/sbin/$$i; \ + done +endef + +KMOD_POST_INSTALL_TARGET_HOOKS += KMOD_INSTALL_TOOLS +else +KMOD_CONF_OPTS += --disable-tools +endif + +ifeq ($(BR2_PACKAGE_HOST_KMOD_GZ),y) +HOST_KMOD_DEPENDENCIES += host-zlib +HOST_KMOD_CONF_OPTS += --with-zlib +else +HOST_KMOD_CONF_OPTS += --without-zlib +endif + +ifeq ($(BR2_PACKAGE_HOST_KMOD_XZ),y) +HOST_KMOD_DEPENDENCIES += host-xz +HOST_KMOD_CONF_OPTS += --with-xz +else +HOST_KMOD_CONF_OPTS += --without-xz +endif + +# We only install depmod, since that's the only tool used for the +# host. +define HOST_KMOD_INSTALL_TOOLS + mkdir -p $(HOST_DIR)/sbin/ + ln -sf ../bin/kmod $(HOST_DIR)/sbin/depmod +endef + +HOST_KMOD_POST_INSTALL_HOOKS += HOST_KMOD_INSTALL_TOOLS + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/kmscube/Config.in b/package/kmscube/Config.in new file mode 100644 index 00000000..b6ad305b --- /dev/null +++ b/package/kmscube/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_KMSCUBE + bool "kmscube" + # requires libgbm from mesa3d + depends on BR2_PACKAGE_MESA3D_OPENGL_EGL + depends on BR2_PACKAGE_MESA3D_OPENGL_ES + help + kmscube is an application to test kms/drm drivers. + + https://gitlab.freedesktop.org/mesa/kmscube diff --git a/package/kmscube/kmscube.hash b/package/kmscube/kmscube.hash new file mode 100644 index 00000000..cb7abd48 --- /dev/null +++ b/package/kmscube/kmscube.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 ec135069d8bee7f4fe38cb9dc96fbbd56e0057290fa25eff8b5b314ee473c502 kmscube-4660a7dca6512b6e658759d00cff7d4ad2a2059d.tar.gz +sha256 f622099ab0d274133f6e62d5fccfe970b61134d80ed036f45f8cf1e90c3d5a05 COPYING diff --git a/package/kmscube/kmscube.mk b/package/kmscube/kmscube.mk new file mode 100644 index 00000000..7b458376 --- /dev/null +++ b/package/kmscube/kmscube.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kmscube +# +################################################################################ + +KMSCUBE_VERSION = 4660a7dca6512b6e658759d00cff7d4ad2a2059d +KMSCUBE_SITE = https://gitlab.freedesktop.org/mesa/kmscube/-/archive/$(KMSCUBE_VERSION) +KMSCUBE_LICENSE = MIT +KMSCUBE_LICENSE_FILES = COPYING +KMSCUBE_DEPENDENCIES = host-pkgconf mesa3d libdrm + +$(eval $(meson-package)) diff --git a/package/kmsxx/0001-meson-add-use-system-fmt-option.patch b/package/kmsxx/0001-meson-add-use-system-fmt-option.patch new file mode 100644 index 00000000..e9d67b12 --- /dev/null +++ b/package/kmsxx/0001-meson-add-use-system-fmt-option.patch @@ -0,0 +1,46 @@ +From 61db7d5520f50564da8f2c9ac952eadb31f70727 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Sun, 29 Nov 2020 11:13:41 +0100 +Subject: [PATCH] meson: add use-system-fmt option + +[Upstream: https://github.com/tomba/kmsxx/pull/60] +Signed-off-by: Peter Seiderer +--- + meson.build | 10 +++++++--- + meson_options.txt | 2 ++ + 2 files changed, 9 insertions(+), 3 deletions(-) + +diff --git a/meson.build b/meson.build +index 9652009..29080f4 100644 +--- a/meson.build ++++ b/meson.build +@@ -31,9 +31,13 @@ endif + + add_global_link_arguments(link_arguments, language : 'cpp') + +-libfmt_includes = include_directories('ext/fmt/include') +-libfmt_dep = declare_dependency(include_directories : libfmt_includes, +- compile_args : '-DFMT_HEADER_ONLY') ++if get_option('use-system-fmt') ++ libfmt_dep = dependency('fmt') ++else ++ libfmt_includes = include_directories('ext/fmt/include') ++ libfmt_dep = declare_dependency(include_directories : libfmt_includes, ++ compile_args : '-DFMT_HEADER_ONLY') ++endif + + pybind11_includes = include_directories('ext/pybind11/include') + pybind11_dep = declare_dependency(include_directories : pybind11_includes) +diff --git a/meson_options.txt b/meson_options.txt +index cd854ab..48176a8 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -3,3 +3,5 @@ option('pykms', type : 'feature', value : 'auto') + option('omap', type : 'feature', value : 'auto') + option('static-libc', type : 'boolean', value : false) + option('utils', type : 'boolean', value : true) ++ ++option('use-system-fmt', type : 'boolean', value : false) +-- +2.29.2 + diff --git a/package/kmsxx/0002-meson-add-use-system-pybind11-option.patch b/package/kmsxx/0002-meson-add-use-system-pybind11-option.patch new file mode 100644 index 00000000..be58b65b --- /dev/null +++ b/package/kmsxx/0002-meson-add-use-system-pybind11-option.patch @@ -0,0 +1,43 @@ +From 27f15549ce67194e4152c57db2b762b7a443b4c7 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Sun, 29 Nov 2020 11:14:41 +0100 +Subject: [PATCH] meson: add use-system-pybind11 option + +[Upstream: https://github.com/tomba/kmsxx/pull/60] +Signed-off-by: Peter Seiderer +--- + meson.build | 8 ++++++-- + meson_options.txt | 1 + + 2 files changed, 7 insertions(+), 2 deletions(-) + +diff --git a/meson.build b/meson.build +index 29080f4..4b3e7c3 100644 +--- a/meson.build ++++ b/meson.build +@@ -39,8 +39,12 @@ else + compile_args : '-DFMT_HEADER_ONLY') + endif + +-pybind11_includes = include_directories('ext/pybind11/include') +-pybind11_dep = declare_dependency(include_directories : pybind11_includes) ++if get_option('use-system-pybind11') ++ pybind11_dep = dependency('pybind11') ++else ++ pybind11_includes = include_directories('ext/pybind11/include') ++ pybind11_dep = declare_dependency(include_directories : pybind11_includes) ++endif + + libdrmomap_dep = dependency('libdrm_omap', required : get_option('omap')) + +diff --git a/meson_options.txt b/meson_options.txt +index 48176a8..095c6f2 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -5,3 +5,4 @@ option('static-libc', type : 'boolean', value : false) + option('utils', type : 'boolean', value : true) + + option('use-system-fmt', type : 'boolean', value : false) ++option('use-system-pybind11', type : 'boolean', value : false) +-- +2.29.2 + diff --git a/package/kmsxx/0003-meson-only-build-py-in-case-pykms-is-enabled.patch b/package/kmsxx/0003-meson-only-build-py-in-case-pykms-is-enabled.patch new file mode 100644 index 00000000..a9085213 --- /dev/null +++ b/package/kmsxx/0003-meson-only-build-py-in-case-pykms-is-enabled.patch @@ -0,0 +1,48 @@ +From 0ef36b2e22c2ac0331b3096b7adc69fb08044048 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Sun, 29 Nov 2020 11:37:26 +0100 +Subject: [PATCH] meson: only build py in case pykms is enabled + +[Upstream: https://github.com/tomba/kmsxx/pull/60] +Signed-off-by: Peter Seiderer +--- + meson.build | 16 ++++++++++------ + 1 file changed, 10 insertions(+), 6 deletions(-) + +diff --git a/meson.build b/meson.build +index 4b3e7c3..1810b17 100644 +--- a/meson.build ++++ b/meson.build +@@ -39,11 +39,13 @@ else + compile_args : '-DFMT_HEADER_ONLY') + endif + +-if get_option('use-system-pybind11') +- pybind11_dep = dependency('pybind11') +-else +- pybind11_includes = include_directories('ext/pybind11/include') +- pybind11_dep = declare_dependency(include_directories : pybind11_includes) ++if get_option('pykms').enabled() ++ if get_option('use-system-pybind11') ++ pybind11_dep = dependency('pybind11') ++ else ++ pybind11_includes = include_directories('ext/pybind11/include') ++ pybind11_dep = declare_dependency(include_directories : pybind11_includes) ++ endif + endif + + libdrmomap_dep = dependency('libdrm_omap', required : get_option('omap')) +@@ -55,7 +57,9 @@ if get_option('utils') + subdir('utils') + endif + +-subdir('py') ++if get_option('pykms').enabled() ++ subdir('py') ++endif + + if get_option('kmscube') + subdir('kmscube') +-- +2.29.2 + diff --git a/package/kmsxx/Config.in b/package/kmsxx/Config.in new file mode 100644 index 00000000..fa327ba1 --- /dev/null +++ b/package/kmsxx/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_KMSXX + bool "kms++" + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_11 # linux/dma-buf.h + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS # libdrm + depends on BR2_USE_WCHAR # fmt + select BR2_PACKAGE_FMT + select BR2_PACKAGE_LIBDRM + help + libkms++ is a C++11 library for kernel mode setting. + + Also included are simple test tools for KMS. + + https://github.com/tomba/kmsxx + +if BR2_PACKAGE_KMSXX + +config BR2_PACKAGE_KMSXX_INSTALL_TESTS + bool "Install test programs" + help + This option allows to install the kmsxx test programs. + +endif + +comment "kms++ needs a toolchain w/ threads, C++, gcc >= 4.8, headers >= 4.11, wchar" + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 || !BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_11 \ + || !BR2_USE_WCHAR diff --git a/package/kmsxx/kmsxx.hash b/package/kmsxx/kmsxx.hash new file mode 100644 index 00000000..1eeb1e6a --- /dev/null +++ b/package/kmsxx/kmsxx.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 4a682328b03c28ff1f6cfcafc48d30c3feb5ef98ed07e5dd3bbd9e6a1d4a47cc kmsxx-548905611c130ea9d31929a0caf7a198d8bac462.tar.gz +sha256 fab3dd6bdab226f1c08630b1dd917e11fcb4ec5e1e020e2c16f83a0a13863e85 LICENSE diff --git a/package/kmsxx/kmsxx.mk b/package/kmsxx/kmsxx.mk new file mode 100644 index 00000000..fd40ff8e --- /dev/null +++ b/package/kmsxx/kmsxx.mk @@ -0,0 +1,49 @@ +################################################################################ +# +# kmsxx +# +################################################################################ + +KMSXX_VERSION = 548905611c130ea9d31929a0caf7a198d8bac462 +KMSXX_SITE = $(call github,tomba,kmsxx,$(KMSXX_VERSION)) +KMSXX_LICENSE = MPL-2.0 +KMSXX_LICENSE_FILES = LICENSE +KMSXX_INSTALL_STAGING = YES +KMSXX_DEPENDENCIES = fmt libdrm host-pkgconf +KMSXX_CONF_OPTS = \ + -Dkmscube=false \ + -Dpykms=disabled \ + -Domap=disabled \ + -Duse-system-fmt=true \ + -Duse-system-pybind11=true + +ifeq ($(BR2_STATIC_LIBS),y) +KMSXX_CONF_OPTS += -Dstatic-libc=true +else +KMSXX_CONF_OPTS += -Dstatic-libc=false +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y) +KMSXX_CXXFLAGS += $(TARGET_CXXFLAGS) -O0 +endif + +ifeq ($(BR2_PACKAGE_KMSXX_INSTALL_TESTS),y) +KMSXX_CONF_OPTS += -Dutils=true +# extra handling for some utils not installed by default +KMSXX_EXTRA_UTILS = kmsview kmscapture omap-wbcap omap-wbm2m +ifeq ($(BR2_PACKAGE_LIBEVDEV),y) +KMSXX_DEPENDENCIES += libevdev +KMSXX_EXTRA_UTILS += kmstouch +endif +define KMSXX_INSTALL_EXTRA_UTILS + $(foreach t,$(KMSXX_EXTRA_UTILS),\ + $(INSTALL) -D -m 0755 $(@D)/build/utils/$(t) \ + $(TARGET_DIR)/usr/bin/$(t) + ) +endef +KMSXX_POST_INSTALL_TARGET_HOOKS += KMSXX_INSTALL_EXTRA_UTILS +else +KMSXX_CONF_OPTS += -Dutils=false +endif + +$(eval $(meson-package)) diff --git a/package/knock/Config.in b/package/knock/Config.in new file mode 100644 index 00000000..0060ad07 --- /dev/null +++ b/package/knock/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_KNOCK + bool "knock" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBPCAP + help + A port knocking implementation. + Provides a daemon and a user application. Port knocking can be + used to run an arbitrary application, once the daemon detects + a predefined sequence of incoming TCP/UDP packets on a network + interface. This can be used, e.g. to open up ports in a + firewall. + + http://www.zeroflux.org/projects/knock diff --git a/package/knock/knock.hash b/package/knock/knock.hash new file mode 100644 index 00000000..0b9a0918 --- /dev/null +++ b/package/knock/knock.hash @@ -0,0 +1,3 @@ +# locally computed hash +sha256 940a8de61b4b3530560805c3b9310a077c28c99173c2ccb07ff96720b0e93c58 knock-258a27e5a47809f97c2b9f2751a88c2f94aae891.tar.gz +sha256 d747e19206e41702e40822dd91d37cbf40edd86f364ea416d667a0e3013f7189 COPYING diff --git a/package/knock/knock.mk b/package/knock/knock.mk new file mode 100644 index 00000000..55f5bfdf --- /dev/null +++ b/package/knock/knock.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# knock +# +################################################################################ + +KNOCK_VERSION = 258a27e5a47809f97c2b9f2751a88c2f94aae891 +KNOCK_SITE = $(call github,jvinet,knock,$(KNOCK_VERSION)) +KNOCK_AUTORECONF = YES +KNOCK_LICENSE = GPL-2.0+ +KNOCK_LICENSE_FILES = COPYING +KNOCK_DEPENDENCIES = libpcap + +ifeq ($(BR2_STATIC_LIBS),y) +KNOCK_CONF_OPTS = LIBS="`$(STAGING_DIR)/usr/bin/pcap-config --static --additional-libs`" +endif + +$(eval $(autotools-package)) diff --git a/package/kodi-audiodecoder-modplug/Config.in b/package/kodi-audiodecoder-modplug/Config.in new file mode 100644 index 00000000..856ca8be --- /dev/null +++ b/package/kodi-audiodecoder-modplug/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_KODI_AUDIODECODER_MODPLUG + bool "kodi-audiodecoder-modplug" + select BR2_PACKAGE_LIBMODPLUG + help + Modplug decoder addon for Kodi + + https://github.com/xbmc/audiodecoder.modplug diff --git a/package/kodi-audiodecoder-modplug/kodi-audiodecoder-modplug.hash b/package/kodi-audiodecoder-modplug/kodi-audiodecoder-modplug.hash new file mode 100644 index 00000000..ecc6f2b7 --- /dev/null +++ b/package/kodi-audiodecoder-modplug/kodi-audiodecoder-modplug.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 6827f1ebefa5f281ace52bdf83b5ab95789c77b88a344524ead1b346668d57e7 kodi-audiodecoder-modplug-2.0.3-Leia.tar.gz +sha256 317f732723eb58745a9b22c234861dbd2d98972039543f6b549c7cb26eb2cb08 debian/copyright diff --git a/package/kodi-audiodecoder-modplug/kodi-audiodecoder-modplug.mk b/package/kodi-audiodecoder-modplug/kodi-audiodecoder-modplug.mk new file mode 100644 index 00000000..8e103105 --- /dev/null +++ b/package/kodi-audiodecoder-modplug/kodi-audiodecoder-modplug.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-audiodecoder-modplug +# +################################################################################ + +KODI_AUDIODECODER_MODPLUG_VERSION = 2.0.3-Leia +KODI_AUDIODECODER_MODPLUG_SITE = $(call github,xbmc,audiodecoder.modplug,$(KODI_AUDIODECODER_MODPLUG_VERSION)) +KODI_AUDIODECODER_MODPLUG_LICENSE = GPL-2.0+ +KODI_AUDIODECODER_MODPLUG_LICENSE_FILES = debian/copyright +KODI_AUDIODECODER_MODPLUG_DEPENDENCIES = kodi libmodplug + +$(eval $(cmake-package)) diff --git a/package/kodi-audiodecoder-nosefart/Config.in b/package/kodi-audiodecoder-nosefart/Config.in new file mode 100644 index 00000000..bb56a3d6 --- /dev/null +++ b/package/kodi-audiodecoder-nosefart/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_KODI_AUDIODECODER_NOSEFART + bool "kodi-audiodecoder-nosefart" + help + Nosefart decoder addon for Kodi + + https://github.com/xbmc/audiodecoder.nosefart diff --git a/package/kodi-audiodecoder-nosefart/kodi-audiodecoder-nosefart.hash b/package/kodi-audiodecoder-nosefart/kodi-audiodecoder-nosefart.hash new file mode 100644 index 00000000..8f04dc53 --- /dev/null +++ b/package/kodi-audiodecoder-nosefart/kodi-audiodecoder-nosefart.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 66305c9d654aed0b9efcf44b90acac0ab8db321dff57523d13faf67606cd78ce kodi-audiodecoder-nosefart-2.0.2-Leia.tar.gz +sha256 01a3f135925df23a5d8679ff633fe3d5021125224c9349acd2c35dd0cf3ea762 debian/copyright diff --git a/package/kodi-audiodecoder-nosefart/kodi-audiodecoder-nosefart.mk b/package/kodi-audiodecoder-nosefart/kodi-audiodecoder-nosefart.mk new file mode 100644 index 00000000..8f437a73 --- /dev/null +++ b/package/kodi-audiodecoder-nosefart/kodi-audiodecoder-nosefart.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-audiodecoder-nosefart +# +################################################################################ + +KODI_AUDIODECODER_NOSEFART_VERSION = 2.0.2-Leia +KODI_AUDIODECODER_NOSEFART_SITE = $(call github,xbmc,audiodecoder.nosefart,$(KODI_AUDIODECODER_NOSEFART_VERSION)) +KODI_AUDIODECODER_NOSEFART_LICENSE = GPL-2.0+ +KODI_AUDIODECODER_NOSEFART_LICENSE_FILES = debian/copyright +KODI_AUDIODECODER_NOSEFART_DEPENDENCIES = kodi + +$(eval $(cmake-package)) diff --git a/package/kodi-audiodecoder-sidplay/Config.in b/package/kodi-audiodecoder-sidplay/Config.in new file mode 100644 index 00000000..eca4160a --- /dev/null +++ b/package/kodi-audiodecoder-sidplay/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_KODI_AUDIODECODER_SIDPLAY + bool "kodi-audiodecoder-sidplay" + select BR2_PACKAGE_LIBSIDPLAY2 + help + Sidplay decoder addon for Kodi + + https://github.com/xbmc/audiodecoder.sidplay diff --git a/package/kodi-audiodecoder-sidplay/kodi-audiodecoder-sidplay.hash b/package/kodi-audiodecoder-sidplay/kodi-audiodecoder-sidplay.hash new file mode 100644 index 00000000..308f2b6f --- /dev/null +++ b/package/kodi-audiodecoder-sidplay/kodi-audiodecoder-sidplay.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 271e513a3094b163f986eb5bb5cbc70c7a602f5764cef255cc161cc5094e5648 kodi-audiodecoder-sidplay-1.2.2-Leia.tar.gz +sha256 dc915100daec3589f59b47f3438e8ec5ccc11ec25ccb3d0e7e66639764f31584 debian/copyright diff --git a/package/kodi-audiodecoder-sidplay/kodi-audiodecoder-sidplay.mk b/package/kodi-audiodecoder-sidplay/kodi-audiodecoder-sidplay.mk new file mode 100644 index 00000000..079ae0b2 --- /dev/null +++ b/package/kodi-audiodecoder-sidplay/kodi-audiodecoder-sidplay.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-audiodecoder-sidplay +# +################################################################################ + +KODI_AUDIODECODER_SIDPLAY_VERSION = 1.2.2-Leia +KODI_AUDIODECODER_SIDPLAY_SITE = $(call github,xbmc,audiodecoder.sidplay,$(KODI_AUDIODECODER_SIDPLAY_VERSION)) +KODI_AUDIODECODER_SIDPLAY_LICENSE = GPL-2.0+ +KODI_AUDIODECODER_SIDPLAY_LICENSE_FILES = debian/copyright +KODI_AUDIODECODER_SIDPLAY_DEPENDENCIES = host-pkgconf kodi libsidplay2 + +$(eval $(cmake-package)) diff --git a/package/kodi-audiodecoder-snesapu/Config.in b/package/kodi-audiodecoder-snesapu/Config.in new file mode 100644 index 00000000..2c3bb15d --- /dev/null +++ b/package/kodi-audiodecoder-snesapu/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_KODI_AUDIODECODER_SNESAPU + bool "kodi-audiodecoder-snesapu" + help + SPC decoder addon for Kodi + + https://github.com/xbmc/audiodecoder.snesapu diff --git a/package/kodi-audiodecoder-snesapu/kodi-audiodecoder-snesapu.hash b/package/kodi-audiodecoder-snesapu/kodi-audiodecoder-snesapu.hash new file mode 100644 index 00000000..c1c2eee2 --- /dev/null +++ b/package/kodi-audiodecoder-snesapu/kodi-audiodecoder-snesapu.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 e059f84b04b8e92e5ecc2989303f6a736f37d6e3bda939ac765499e616c91580 kodi-audiodecoder-snesapu-2.0.2-Leia.tar.gz +sha256 b7e8b234fc40687d647d929fc554b91cdaa4011e5e656e68c5c6ee8c4cdf81d2 debian/copyright diff --git a/package/kodi-audiodecoder-snesapu/kodi-audiodecoder-snesapu.mk b/package/kodi-audiodecoder-snesapu/kodi-audiodecoder-snesapu.mk new file mode 100644 index 00000000..57504a17 --- /dev/null +++ b/package/kodi-audiodecoder-snesapu/kodi-audiodecoder-snesapu.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-audiodecoder-snesapu +# +################################################################################ + +KODI_AUDIODECODER_SNESAPU_VERSION = 2.0.2-Leia +KODI_AUDIODECODER_SNESAPU_SITE = $(call github,xbmc,audiodecoder.snesapu,$(KODI_AUDIODECODER_SNESAPU_VERSION)) +KODI_AUDIODECODER_SNESAPU_LICENSE = GPL-2.0+ +KODI_AUDIODECODER_SNESAPU_LICENSE_FILES = debian/copyright +KODI_AUDIODECODER_SNESAPU_DEPENDENCIES = kodi + +$(eval $(cmake-package)) diff --git a/package/kodi-audiodecoder-stsound/Config.in b/package/kodi-audiodecoder-stsound/Config.in new file mode 100644 index 00000000..2001e481 --- /dev/null +++ b/package/kodi-audiodecoder-stsound/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_KODI_AUDIODECODER_STSOUND + bool "kodi-audiodecoder-stsound" + help + YM decoder addon for Kodi + + https://github.com/xbmc/audiodecoder.stsound diff --git a/package/kodi-audiodecoder-stsound/kodi-audiodecoder-stsound.hash b/package/kodi-audiodecoder-stsound/kodi-audiodecoder-stsound.hash new file mode 100644 index 00000000..24b76406 --- /dev/null +++ b/package/kodi-audiodecoder-stsound/kodi-audiodecoder-stsound.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 3e14a7da3822002a90bf7d31a9f98541ae9ec2137c764dc94ca5b4de4ac8de82 kodi-audiodecoder-stsound-2.0.2-Leia.tar.gz +sha256 417ded3464139990f7898ac17c9eacde85dc0fafd3b3ca0c497d945b1bd93af5 debian/copyright diff --git a/package/kodi-audiodecoder-stsound/kodi-audiodecoder-stsound.mk b/package/kodi-audiodecoder-stsound/kodi-audiodecoder-stsound.mk new file mode 100644 index 00000000..679be5a7 --- /dev/null +++ b/package/kodi-audiodecoder-stsound/kodi-audiodecoder-stsound.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-audiodecoder-stsound +# +################################################################################ + +KODI_AUDIODECODER_STSOUND_VERSION = 2.0.2-Leia +KODI_AUDIODECODER_STSOUND_SITE = $(call github,xbmc,audiodecoder.stsound,$(KODI_AUDIODECODER_STSOUND_VERSION)) +KODI_AUDIODECODER_STSOUND_LICENSE = GPL-2.0+ +KODI_AUDIODECODER_STSOUND_LICENSE_FILES = debian/copyright +KODI_AUDIODECODER_STSOUND_DEPENDENCIES = kodi + +$(eval $(cmake-package)) diff --git a/package/kodi-audiodecoder-timidity/Config.in b/package/kodi-audiodecoder-timidity/Config.in new file mode 100644 index 00000000..ad3caf1e --- /dev/null +++ b/package/kodi-audiodecoder-timidity/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_KODI_AUDIODECODER_TIMIDITY + bool "kodi-audiodecoder-timidity" + help + Timidity decoder addon for Kodi + + https://github.com/xbmc/audiodecoder.timidity diff --git a/package/kodi-audiodecoder-timidity/kodi-audiodecoder-timidity.hash b/package/kodi-audiodecoder-timidity/kodi-audiodecoder-timidity.hash new file mode 100644 index 00000000..ea56c38f --- /dev/null +++ b/package/kodi-audiodecoder-timidity/kodi-audiodecoder-timidity.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 b20a3a23056aaf76c216c755f36dff03e943d7c086d3e3fca4c920b93113e073 kodi-audiodecoder-timidity-2.0.5-Leia.tar.gz +sha256 310782e1abd43c4de6217c513e328bddf999d39302d67c6e05b10a59959827af LICENSE.md diff --git a/package/kodi-audiodecoder-timidity/kodi-audiodecoder-timidity.mk b/package/kodi-audiodecoder-timidity/kodi-audiodecoder-timidity.mk new file mode 100644 index 00000000..a4f0126c --- /dev/null +++ b/package/kodi-audiodecoder-timidity/kodi-audiodecoder-timidity.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-audiodecoder-timidity +# +################################################################################ + +KODI_AUDIODECODER_TIMIDITY_VERSION = 2.0.5-Leia +KODI_AUDIODECODER_TIMIDITY_SITE = $(call github,xbmc,audiodecoder.timidity,$(KODI_AUDIODECODER_TIMIDITY_VERSION)) +KODI_AUDIODECODER_TIMIDITY_LICENSE = GPL-2.0+ +KODI_AUDIODECODER_TIMIDITY_LICENSE_FILES = LICENSE.md +KODI_AUDIODECODER_TIMIDITY_DEPENDENCIES = kodi + +$(eval $(cmake-package)) diff --git a/package/kodi-audiodecoder-vgmstream/Config.in b/package/kodi-audiodecoder-vgmstream/Config.in new file mode 100644 index 00000000..440edc7c --- /dev/null +++ b/package/kodi-audiodecoder-vgmstream/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_KODI_AUDIODECODER_VGMSTREAM + bool "kodi-audiodecoder-vgmstream" + help + VGM decoder addon for Kodi + + https://github.com/xbmc/audiodecoder.vgmstream diff --git a/package/kodi-audiodecoder-vgmstream/kodi-audiodecoder-vgmstream.hash b/package/kodi-audiodecoder-vgmstream/kodi-audiodecoder-vgmstream.hash new file mode 100644 index 00000000..3ee9ebbf --- /dev/null +++ b/package/kodi-audiodecoder-vgmstream/kodi-audiodecoder-vgmstream.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 28876be1e1317b3ec5c3a4fe415f20d92a4c5868912656c5e8ab9cdd7e3f32d8 kodi-audiodecoder-vgmstream-1.1.5-Leia.tar.gz +sha256 fc7c7ab8774d94fb2eccdf47e3b8052a3906e4b5ec8554191da321020c965d8e debian/copyright diff --git a/package/kodi-audiodecoder-vgmstream/kodi-audiodecoder-vgmstream.mk b/package/kodi-audiodecoder-vgmstream/kodi-audiodecoder-vgmstream.mk new file mode 100644 index 00000000..4e3cdab5 --- /dev/null +++ b/package/kodi-audiodecoder-vgmstream/kodi-audiodecoder-vgmstream.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-audiodecoder-vgmstream +# +################################################################################ + +KODI_AUDIODECODER_VGMSTREAM_VERSION = 1.1.5-Leia +KODI_AUDIODECODER_VGMSTREAM_SITE = $(call github,xbmc,audiodecoder.vgmstream,$(KODI_AUDIODECODER_VGMSTREAM_VERSION)) +KODI_AUDIODECODER_VGMSTREAM_LICENSE = GPL-2.0+ +KODI_AUDIODECODER_VGMSTREAM_LICENSE_FILES = debian/copyright +KODI_AUDIODECODER_VGMSTREAM_DEPENDENCIES = kodi + +$(eval $(cmake-package)) diff --git a/package/kodi-audioencoder-flac/Config.in b/package/kodi-audioencoder-flac/Config.in new file mode 100644 index 00000000..95acbbad --- /dev/null +++ b/package/kodi-audioencoder-flac/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_KODI_AUDIOENCODER_FLAC + bool "kodi-audioencoder-flac" + select BR2_PACKAGE_FLAC + select BR2_PACKAGE_KODI_OPTICALDRIVE + select BR2_PACKAGE_LIBOGG + help + An audioencoder addon for Kodi + + https://github.com/xbmc/audioencoder.flac diff --git a/package/kodi-audioencoder-flac/kodi-audioencoder-flac.hash b/package/kodi-audioencoder-flac/kodi-audioencoder-flac.hash new file mode 100644 index 00000000..9f33d6c6 --- /dev/null +++ b/package/kodi-audioencoder-flac/kodi-audioencoder-flac.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 42e18fc2477ce5abc3efd89851a4bacc6b9436889a607a15f8232ef68b297f93 kodi-audioencoder-flac-2.0.6-Leia.tar.gz +sha256 21dc3eb9c75f1ed6367a4cf3f3999b299bc6c172da3730184edd2a5dd4d090aa debian/copyright diff --git a/package/kodi-audioencoder-flac/kodi-audioencoder-flac.mk b/package/kodi-audioencoder-flac/kodi-audioencoder-flac.mk new file mode 100644 index 00000000..53c1f3de --- /dev/null +++ b/package/kodi-audioencoder-flac/kodi-audioencoder-flac.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-audioencoder-flac +# +################################################################################ + +KODI_AUDIOENCODER_FLAC_VERSION = 2.0.6-Leia +KODI_AUDIOENCODER_FLAC_SITE = $(call github,xbmc,audioencoder.flac,$(KODI_AUDIOENCODER_FLAC_VERSION)) +KODI_AUDIOENCODER_FLAC_LICENSE = GPL-2.0+ +KODI_AUDIOENCODER_FLAC_LICENSE_FILES = debian/copyright +KODI_AUDIOENCODER_FLAC_DEPENDENCIES = flac kodi libogg host-pkgconf + +$(eval $(cmake-package)) diff --git a/package/kodi-audioencoder-lame/Config.in b/package/kodi-audioencoder-lame/Config.in new file mode 100644 index 00000000..dc6a0cd7 --- /dev/null +++ b/package/kodi-audioencoder-lame/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_KODI_AUDIOENCODER_LAME + bool "kodi-audioencoder-lame" + select BR2_PACKAGE_KODI_OPTICALDRIVE + select BR2_PACKAGE_LAME + help + An audioencoder addon for Kodi + + https://github.com/xbmc/audioencoder.lame diff --git a/package/kodi-audioencoder-lame/kodi-audioencoder-lame.hash b/package/kodi-audioencoder-lame/kodi-audioencoder-lame.hash new file mode 100644 index 00000000..cd3351e2 --- /dev/null +++ b/package/kodi-audioencoder-lame/kodi-audioencoder-lame.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 9df54cf5c5ae3882a2d89d745c1d1f8b749e71a7f9305a1b059ecfd356995a36 kodi-audioencoder-lame-2.0.4-Leia.tar.gz +sha256 68a06632cc80eea941b07e27777788dcd4f7c5ba9c006e24f467a9d4bf4d3582 debian/copyright diff --git a/package/kodi-audioencoder-lame/kodi-audioencoder-lame.mk b/package/kodi-audioencoder-lame/kodi-audioencoder-lame.mk new file mode 100644 index 00000000..5d93e83e --- /dev/null +++ b/package/kodi-audioencoder-lame/kodi-audioencoder-lame.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# kodi-audioencoder-lame +# +################################################################################ + +KODI_AUDIOENCODER_LAME_VERSION = 2.0.4-Leia +KODI_AUDIOENCODER_LAME_SITE = $(call github,xbmc,audioencoder.lame,$(KODI_AUDIOENCODER_LAME_VERSION)) +KODI_AUDIOENCODER_LAME_LICENSE = GPL-2.0+ +KODI_AUDIOENCODER_LAME_LICENSE_FILES = debian/copyright +KODI_AUDIOENCODER_LAME_DEPENDENCIES = kodi lame +KODI_AUDIOENCODER_LAME_CONF_OPTS += \ + -DLAME_INCLUDE_DIRS=$(STAGING_DIR)/usr/include + +$(eval $(cmake-package)) diff --git a/package/kodi-audioencoder-vorbis/Config.in b/package/kodi-audioencoder-vorbis/Config.in new file mode 100644 index 00000000..8b84626f --- /dev/null +++ b/package/kodi-audioencoder-vorbis/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_KODI_AUDIOENCODER_VORBIS + bool "kodi-audioencoder-vorbis" + select BR2_PACKAGE_KODI_OPTICALDRIVE + select BR2_PACKAGE_LIBOGG + select BR2_PACKAGE_LIBVORBIS + help + An audioencoder addon for Kodi + + https://github.com/xbmc/audioencoder.vorbis diff --git a/package/kodi-audioencoder-vorbis/kodi-audioencoder-vorbis.hash b/package/kodi-audioencoder-vorbis/kodi-audioencoder-vorbis.hash new file mode 100644 index 00000000..0b9463fe --- /dev/null +++ b/package/kodi-audioencoder-vorbis/kodi-audioencoder-vorbis.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 b4b2b1b7ae8bda35514f20ad0275b434f2b60fc93b1e17ca6e654ae145852b1f kodi-audioencoder-vorbis-2.0.4-Leia.tar.gz +sha256 706e890fc5c0496b72d3c36284abcc85f9c83b3f2b21db53a68439c538122a59 debian/copyright diff --git a/package/kodi-audioencoder-vorbis/kodi-audioencoder-vorbis.mk b/package/kodi-audioencoder-vorbis/kodi-audioencoder-vorbis.mk new file mode 100644 index 00000000..b789d239 --- /dev/null +++ b/package/kodi-audioencoder-vorbis/kodi-audioencoder-vorbis.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-audioencoder-vorbis +# +################################################################################ + +KODI_AUDIOENCODER_VORBIS_VERSION = 2.0.4-Leia +KODI_AUDIOENCODER_VORBIS_SITE = $(call github,xbmc,audioencoder.vorbis,$(KODI_AUDIOENCODER_VORBIS_VERSION)) +KODI_AUDIOENCODER_VORBIS_LICENSE = GPL-2.0+ +KODI_AUDIOENCODER_VORBIS_LICENSE_FILES = debian/copyright +KODI_AUDIOENCODER_VORBIS_DEPENDENCIES = kodi libogg libvorbis host-pkgconf + +$(eval $(cmake-package)) diff --git a/package/kodi-audioencoder-wav/Config.in b/package/kodi-audioencoder-wav/Config.in new file mode 100644 index 00000000..6bdbb9aa --- /dev/null +++ b/package/kodi-audioencoder-wav/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_KODI_AUDIOENCODER_WAV + bool "kodi-audioencoder-wav" + select BR2_PACKAGE_KODI_OPTICALDRIVE + help + An audioencoder addon for Kodi + + https://github.com/xbmc/audioencoder.wav diff --git a/package/kodi-audioencoder-wav/kodi-audioencoder-wav.hash b/package/kodi-audioencoder-wav/kodi-audioencoder-wav.hash new file mode 100644 index 00000000..9b9add21 --- /dev/null +++ b/package/kodi-audioencoder-wav/kodi-audioencoder-wav.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 03cb2810b2aa335fd308a5e2b6580d21ac840334c55fc891acc310633c3c49b4 kodi-audioencoder-wav-2.0.3-Leia.tar.gz +sha256 341a6317428fbc7c9d5b971d1c6162ea34be64649caa650ee0a05c06ae53a872 debian/copyright diff --git a/package/kodi-audioencoder-wav/kodi-audioencoder-wav.mk b/package/kodi-audioencoder-wav/kodi-audioencoder-wav.mk new file mode 100644 index 00000000..b597b1b1 --- /dev/null +++ b/package/kodi-audioencoder-wav/kodi-audioencoder-wav.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-audioencoder-wav +# +################################################################################ + +KODI_AUDIOENCODER_WAV_VERSION = 2.0.3-Leia +KODI_AUDIOENCODER_WAV_SITE = $(call github,xbmc,audioencoder.wav,$(KODI_AUDIOENCODER_WAV_VERSION)) +KODI_AUDIOENCODER_WAV_LICENSE = GPL-2.0+ +KODI_AUDIOENCODER_WAV_LICENSE_FILES = debian/copyright +KODI_AUDIOENCODER_WAV_DEPENDENCIES = kodi + +$(eval $(cmake-package)) diff --git a/package/kodi-inputstream-adaptive/Config.in b/package/kodi-inputstream-adaptive/Config.in new file mode 100644 index 00000000..21f1cff1 --- /dev/null +++ b/package/kodi-inputstream-adaptive/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_KODI_INPUTSTREAM_ADAPTIVE + bool "kodi-inputstream-adaptive" + # wvdecrypter/cdm/build/build_config.h + depends on BR2_aarch64 || BR2_arm || BR2_i386 || BR2_mipsel \ + || BR2_mips64el || BR2_x86_64 + help + Kodi inputstream addon for several manifest types + + https://github.com/xbmc/inputstream.adaptive diff --git a/package/kodi-inputstream-adaptive/kodi-inputstream-adaptive.hash b/package/kodi-inputstream-adaptive/kodi-inputstream-adaptive.hash new file mode 100644 index 00000000..b12c93ac --- /dev/null +++ b/package/kodi-inputstream-adaptive/kodi-inputstream-adaptive.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 222b7ad879146c62a1fc6016fc70ca1ca57b3b882882ebc54e0b772bf96482e7 kodi-inputstream-adaptive-2.4.6-Leia.tar.gz +sha256 89931c1fb1f3716694175763cf3221cfcd63d6935031cf6b4512d17ffe5d9860 LICENSE.GPL diff --git a/package/kodi-inputstream-adaptive/kodi-inputstream-adaptive.mk b/package/kodi-inputstream-adaptive/kodi-inputstream-adaptive.mk new file mode 100644 index 00000000..a8024951 --- /dev/null +++ b/package/kodi-inputstream-adaptive/kodi-inputstream-adaptive.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-inputstream-adaptive +# +################################################################################ + +KODI_INPUTSTREAM_ADAPTIVE_VERSION = 2.4.6-Leia +KODI_INPUTSTREAM_ADAPTIVE_SITE = $(call github,xbmc,inputstream.adaptive,$(KODI_INPUTSTREAM_ADAPTIVE_VERSION)) +KODI_INPUTSTREAM_ADAPTIVE_LICENSE = GPL-2.0+ +KODI_INPUTSTREAM_ADAPTIVE_LICENSE_FILES = LICENSE.GPL +KODI_INPUTSTREAM_ADAPTIVE_DEPENDENCIES = kodi + +$(eval $(cmake-package)) diff --git a/package/kodi-inputstream-rtmp/Config.in b/package/kodi-inputstream-rtmp/Config.in new file mode 100644 index 00000000..fa839263 --- /dev/null +++ b/package/kodi-inputstream-rtmp/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_KODI_INPUTSTREAM_RTMP + bool "kodi-inputstream-rtmp" + select BR2_PACKAGE_RTMPDUMP + help + RTMP input stream add-on for Kodi + + https://github.com/xbmc/inputstream.rtmp diff --git a/package/kodi-inputstream-rtmp/kodi-inputstream-rtmp.hash b/package/kodi-inputstream-rtmp/kodi-inputstream-rtmp.hash new file mode 100644 index 00000000..d472b89b --- /dev/null +++ b/package/kodi-inputstream-rtmp/kodi-inputstream-rtmp.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 56dac63262fa736620863900d903616d4827d735992e6d8beda84e377a5599e5 kodi-inputstream-rtmp-2.0.9-Leia.tar.gz +sha256 ddba7d22c2586f13de40786c21f3b87c6913c9937f4862dc828d33cfff0395eb debian/copyright diff --git a/package/kodi-inputstream-rtmp/kodi-inputstream-rtmp.mk b/package/kodi-inputstream-rtmp/kodi-inputstream-rtmp.mk new file mode 100644 index 00000000..e850be40 --- /dev/null +++ b/package/kodi-inputstream-rtmp/kodi-inputstream-rtmp.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-inputstream-rtmp +# +################################################################################ + +KODI_INPUTSTREAM_RTMP_VERSION = 2.0.9-Leia +KODI_INPUTSTREAM_RTMP_SITE = $(call github,xbmc,inputstream.rtmp,$(KODI_INPUTSTREAM_RTMP_VERSION)) +KODI_INPUTSTREAM_RTMP_LICENSE = GPL-2.0+ +KODI_INPUTSTREAM_RTMP_LICENSE_FILES = debian/copyright +KODI_INPUTSTREAM_RTMP_DEPENDENCIES = kodi rtmpdump + +$(eval $(cmake-package)) diff --git a/package/kodi-jsonschemabuilder/kodi-jsonschemabuilder.hash b/package/kodi-jsonschemabuilder/kodi-jsonschemabuilder.hash new file mode 120000 index 00000000..a5757509 --- /dev/null +++ b/package/kodi-jsonschemabuilder/kodi-jsonschemabuilder.hash @@ -0,0 +1 @@ +../kodi/kodi.hash \ No newline at end of file diff --git a/package/kodi-jsonschemabuilder/kodi-jsonschemabuilder.mk b/package/kodi-jsonschemabuilder/kodi-jsonschemabuilder.mk new file mode 100644 index 00000000..2c7f77d0 --- /dev/null +++ b/package/kodi-jsonschemabuilder/kodi-jsonschemabuilder.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# kodi-jsonschemabuilder +# +################################################################################ + +# Not possible to directly refer to kodi variables, because of +# first/second expansion trickery... +KODI_JSONSCHEMABUILDER_VERSION = 18.9-Leia +KODI_JSONSCHEMABUILDER_SITE = $(call github,xbmc,xbmc,$(KODI_JSONSCHEMABUILDER_VERSION)) +KODI_JSONSCHEMABUILDER_SOURCE = kodi-$(KODI_JSONSCHEMABUILDER_VERSION).tar.gz +KODI_JSONSCHEMABUILDER_DL_SUBDIR = kodi +KODI_JSONSCHEMABUILDER_LICENSE = GPL-2.0 +KODI_JSONSCHEMABUILDER_LICENSE_FILES = LICENSE.md +HOST_KODI_JSONSCHEMABUILDER_SUBDIR = tools/depends/native/JsonSchemaBuilder + +HOST_KODI_JSONSCHEMABUILDER_CONF_OPTS = \ + -DCMAKE_MODULE_PATH=$(@D)/project/cmake/modules + +define HOST_KODI_JSONSCHEMABUILDER_INSTALL_CMDS + $(INSTALL) -m 755 -D \ + $(@D)/tools/depends/native/JsonSchemaBuilder/JsonSchemaBuilder \ + $(HOST_DIR)/bin/JsonSchemaBuilder +endef + +$(eval $(host-cmake-package)) diff --git a/package/kodi-peripheral-joystick/Config.in b/package/kodi-peripheral-joystick/Config.in new file mode 100644 index 00000000..d93e71b6 --- /dev/null +++ b/package/kodi-peripheral-joystick/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_KODI_PERIPHERAL_JOYSTICK + bool "kodi-peripheral-joystick" + depends on BR2_PACKAGE_HAS_UDEV + select BR2_PACKAGE_TINYXML + help + Kodi joystick support (drivers and button maps) + + https://github.com/xbmc/peripheral.joystick + +comment "kodi-peripheral-joystick needs udev /dev management" + depends on !BR2_PACKAGE_HAS_UDEV diff --git a/package/kodi-peripheral-joystick/kodi-peripheral-joystick.hash b/package/kodi-peripheral-joystick/kodi-peripheral-joystick.hash new file mode 100644 index 00000000..d0cac8e4 --- /dev/null +++ b/package/kodi-peripheral-joystick/kodi-peripheral-joystick.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 e83c32380a51ea74bd5f0af74afc747ff5de99167934e2644bc2b3438cd998d0 kodi-peripheral-joystick-1.4.9-Leia.tar.gz +sha256 2bb807179053b1a7795f9952539a394664847f561a9ffa4ccc36d7bb3cddadf9 debian/copyright diff --git a/package/kodi-peripheral-joystick/kodi-peripheral-joystick.mk b/package/kodi-peripheral-joystick/kodi-peripheral-joystick.mk new file mode 100644 index 00000000..9cce174d --- /dev/null +++ b/package/kodi-peripheral-joystick/kodi-peripheral-joystick.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-peripheral-joystick +# +################################################################################ + +KODI_PERIPHERAL_JOYSTICK_VERSION = 1.4.9-Leia +KODI_PERIPHERAL_JOYSTICK_SITE = $(call github,xbmc,peripheral.joystick,$(KODI_PERIPHERAL_JOYSTICK_VERSION)) +KODI_PERIPHERAL_JOYSTICK_LICENSE = GPL-2.0+ +KODI_PERIPHERAL_JOYSTICK_LICENSE_FILES = debian/copyright +KODI_PERIPHERAL_JOYSTICK_DEPENDENCIES = kodi tinyxml udev + +$(eval $(cmake-package)) diff --git a/package/kodi-peripheral-xarcade/Config.in b/package/kodi-peripheral-xarcade/Config.in new file mode 100644 index 00000000..8d3c6785 --- /dev/null +++ b/package/kodi-peripheral-xarcade/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_KODI_PERIPHERAL_XARCADE + bool "kodi-peripheral-xarcade" + help + X-Arcade Tankstick support for Kodi + + https://github.com/kodi-game/peripheral.xarcade diff --git a/package/kodi-peripheral-xarcade/kodi-peripheral-xarcade.hash b/package/kodi-peripheral-xarcade/kodi-peripheral-xarcade.hash new file mode 100644 index 00000000..7443ac65 --- /dev/null +++ b/package/kodi-peripheral-xarcade/kodi-peripheral-xarcade.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 c1d755230b0f2fe943cf7297a6d187371088f39391944d422d2bf5969c8863c1 kodi-peripheral-xarcade-51e1a4550a6c7d7feeb01760a731af17bea6c524.tar.gz +sha256 848ad4f3a480c953b556467fb9a315dd352ec1d267e012144c46adc571e39efb debian/copyright diff --git a/package/kodi-peripheral-xarcade/kodi-peripheral-xarcade.mk b/package/kodi-peripheral-xarcade/kodi-peripheral-xarcade.mk new file mode 100644 index 00000000..42d7af8a --- /dev/null +++ b/package/kodi-peripheral-xarcade/kodi-peripheral-xarcade.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-peripheral-xarcade +# +################################################################################ + +KODI_PERIPHERAL_XARCADE_VERSION = 51e1a4550a6c7d7feeb01760a731af17bea6c524 +KODI_PERIPHERAL_XARCADE_SITE = $(call github,kodi-game,peripheral.xarcade,$(KODI_PERIPHERAL_XARCADE_VERSION)) +KODI_PERIPHERAL_XARCADE_LICENSE = GPL-2.0+ +KODI_PERIPHERAL_XARCADE_LICENSE_FILES = debian/copyright +KODI_PERIPHERAL_XARCADE_DEPENDENCIES = kodi + +$(eval $(cmake-package)) diff --git a/package/kodi-platform/0001-kodiplatform-config.cmake-fix-for-cross-compilation.patch b/package/kodi-platform/0001-kodiplatform-config.cmake-fix-for-cross-compilation.patch new file mode 100644 index 00000000..cc514b00 --- /dev/null +++ b/package/kodi-platform/0001-kodiplatform-config.cmake-fix-for-cross-compilation.patch @@ -0,0 +1,56 @@ +From a6e25dba4b5c1d911a4644a0ca116abc642cd72a Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Thu, 30 Jul 2015 09:28:24 +0200 +Subject: [PATCH] kodiplatform-config.cmake: fix for cross-compilation + +Use CMAKE_FIND_ROOT_PATH in kodiplatform-config.cmake in order to make +it cross-compilation friendly. + +Patch sent upstream: https://github.com/xbmc/kodi-platform/pull/30 + +Signed-off-by: Thomas Petazzoni +--- + CMakeLists.txt | 2 +- + kodiplatform-config.cmake.in | 6 +++--- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 25d8004..db23dc9 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -22,7 +22,7 @@ if(NOT WIN32) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") + endif() + +-set(kodiplatform_INCLUDE_DIRS ${TINYXML_INCLUDE_DIR} "${CMAKE_INSTALL_PREFIX}/include/kodi") ++set(kodiplatform_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/include/kodi") + IF(WIN32) + LIST(APPEND kodiplatform_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/include/kodi/windows") + ENDIF(WIN32) +diff --git a/kodiplatform-config.cmake.in b/kodiplatform-config.cmake.in +index 3fc5273..1bc437a 100644 +--- a/kodiplatform-config.cmake.in ++++ b/kodiplatform-config.cmake.in +@@ -10,16 +10,16 @@ + # + # propagate these properties from one build system to the other + set (kodiplatform_VERSION "@kodiplatform_VERSION_MAJOR@.@kodiplatform_VERSION_MINOR@") +-set (kodiplatform_INCLUDE_DIRS @kodiplatform_INCLUDE_DIRS@ @CMAKE_INSTALL_PREFIX@/include) ++set (kodiplatform_INCLUDE_DIRS @TINYXML_INCLUDE_DIR@ ${CMAKE_FIND_ROOT_PATH}@kodiplatform_INCLUDE_DIRS@ ${CMAKE_FIND_ROOT_PATH}@CMAKE_INSTALL_PREFIX@/include) + set (kodiplatform_LIBRARY_DIRS "@CMAKE_LIBRARY_OUTPUT_DIRECTORY@") + set (kodiplatform_LINKER_FLAGS "@kodiplatform_LINKER_FLAGS@") + set (kodiplatform_CONFIG_VARS "@kodiplatform_CONFIG_VARS@") + + # libraries come from the build tree where this file was generated + if(WIN32) +- set (kodiplatform_LIBRARY "@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@/kodiplatform.lib") ++ set (kodiplatform_LIBRARY "${CMAKE_FIND_ROOT_PATH}@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@/kodiplatform.lib") + else(WIN32) +- set (kodiplatform_LIBRARY "-L@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@ -lkodiplatform") ++ set (kodiplatform_LIBRARY "-L${CMAKE_FIND_ROOT_PATH}@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@ -lkodiplatform") + endif(WIN32) + set (kodiplatform_LIBRARIES ${kodiplatform_LIBRARY} "@kodiplatform_LIBRARIES@") + mark_as_advanced (kodiplatform_LIBRARY) +-- +2.5.0 + diff --git a/package/kodi-platform/Config.in b/package/kodi-platform/Config.in new file mode 100644 index 00000000..cde1925c --- /dev/null +++ b/package/kodi-platform/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_KODI_PLATFORM + bool + select BR2_PACKAGE_LIBPLATFORM + help + Kodi add-on platform support library + + https://github.com/xbmc/kodi-platform diff --git a/package/kodi-platform/kodi-platform.hash b/package/kodi-platform/kodi-platform.hash new file mode 100644 index 00000000..29a43cf0 --- /dev/null +++ b/package/kodi-platform/kodi-platform.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 159165ae641da5eb273885ce53b8a4b84e62a595c4974f9d12c1b5d1428ef25c kodi-platform-809c5e9d711e378561440a896fcb7dbcd009eb3d.tar.gz +sha256 2f4bc4c1244b679121749378ff1a2b4b4e318897dac3d346a236432948ebeea7 debian/copyright diff --git a/package/kodi-platform/kodi-platform.mk b/package/kodi-platform/kodi-platform.mk new file mode 100644 index 00000000..f1b97e32 --- /dev/null +++ b/package/kodi-platform/kodi-platform.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# kodi-platform +# +################################################################################ + +KODI_PLATFORM_VERSION = 809c5e9d711e378561440a896fcb7dbcd009eb3d +KODI_PLATFORM_SITE = $(call github,xbmc,kodi-platform,$(KODI_PLATFORM_VERSION)) +KODI_PLATFORM_LICENSE = GPL-2.0+ +KODI_PLATFORM_LICENSE_FILES = debian/copyright +KODI_PLATFORM_INSTALL_STAGING = YES +KODI_PLATFORM_DEPENDENCIES = libplatform kodi + +$(eval $(cmake-package)) diff --git a/package/kodi-pvr-argustv/Config.in b/package/kodi-pvr-argustv/Config.in new file mode 100644 index 00000000..216000ae --- /dev/null +++ b/package/kodi-pvr-argustv/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_KODI_PVR_ARGUSTV + bool "kodi-pvr-argustv" + select BR2_PACKAGE_JSONCPP + select BR2_PACKAGE_KODI_PLATFORM + help + Kodi's ARGUS TV client addon + + https://github.com/kodi-pvr/pvr.argustv diff --git a/package/kodi-pvr-argustv/kodi-pvr-argustv.hash b/package/kodi-pvr-argustv/kodi-pvr-argustv.hash new file mode 100644 index 00000000..5c47dd30 --- /dev/null +++ b/package/kodi-pvr-argustv/kodi-pvr-argustv.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 7bfedb27b2aec4015b2594df18b76fe42e97ec10f4b5cb9c6987b1a7a264c844 kodi-pvr-argustv-3.5.6-Leia.tar.gz +sha256 17bc5450fff10fc46484886690adbf20c369f5baff021435feab1187b9943834 debian/copyright diff --git a/package/kodi-pvr-argustv/kodi-pvr-argustv.mk b/package/kodi-pvr-argustv/kodi-pvr-argustv.mk new file mode 100644 index 00000000..73a9f1c7 --- /dev/null +++ b/package/kodi-pvr-argustv/kodi-pvr-argustv.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-pvr-argustv +# +################################################################################ + +KODI_PVR_ARGUSTV_VERSION = 3.5.6-Leia +KODI_PVR_ARGUSTV_SITE = $(call github,kodi-pvr,pvr.argustv,$(KODI_PVR_ARGUSTV_VERSION)) +KODI_PVR_ARGUSTV_LICENSE = GPL-2.0+ +KODI_PVR_ARGUSTV_LICENSE_FILES = debian/copyright +KODI_PVR_ARGUSTV_DEPENDENCIES = jsoncpp kodi-platform + +$(eval $(cmake-package)) diff --git a/package/kodi-pvr-dvblink/Config.in b/package/kodi-pvr-dvblink/Config.in new file mode 100644 index 00000000..57f11271 --- /dev/null +++ b/package/kodi-pvr-dvblink/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_KODI_PVR_DVBLINK + bool "kodi-pvr-dvblink" + select BR2_PACKAGE_KODI_PLATFORM + select BR2_PACKAGE_TINYXML2 + help + Kodi's DVBLink client addon + + https://github.com/kodi-pvr/pvr.dvblink diff --git a/package/kodi-pvr-dvblink/kodi-pvr-dvblink.hash b/package/kodi-pvr-dvblink/kodi-pvr-dvblink.hash new file mode 100644 index 00000000..c2121df0 --- /dev/null +++ b/package/kodi-pvr-dvblink/kodi-pvr-dvblink.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 ad7586abfe7b3f9dd67b3a2225c442fc8d2a442e48bd7df75b11652286392c2f kodi-pvr-dvblink-4.7.2-Leia.tar.gz +sha256 4200fb35edb052f04dc43d267a1ad59468cb899e7b4931756b5830039b82716d debian/copyright diff --git a/package/kodi-pvr-dvblink/kodi-pvr-dvblink.mk b/package/kodi-pvr-dvblink/kodi-pvr-dvblink.mk new file mode 100644 index 00000000..95bc7bbb --- /dev/null +++ b/package/kodi-pvr-dvblink/kodi-pvr-dvblink.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-pvr-dvblink +# +################################################################################ + +KODI_PVR_DVBLINK_VERSION = 4.7.2-Leia +KODI_PVR_DVBLINK_SITE = $(call github,kodi-pvr,pvr.dvblink,$(KODI_PVR_DVBLINK_VERSION)) +KODI_PVR_DVBLINK_LICENSE = GPL-2.0+ +KODI_PVR_DVBLINK_LICENSE_FILES = debian/copyright +KODI_PVR_DVBLINK_DEPENDENCIES = kodi-platform tinyxml2 + +$(eval $(cmake-package)) diff --git a/package/kodi-pvr-dvbviewer/Config.in b/package/kodi-pvr-dvbviewer/Config.in new file mode 100644 index 00000000..e7dd7b3e --- /dev/null +++ b/package/kodi-pvr-dvbviewer/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_KODI_PVR_DVBVIEWER + bool "kodi-pvr-dvbviewer" + select BR2_PACKAGE_KODI_PLATFORM + help + Kodi's DVBViewer client addon + + https://github.com/kodi-pvr/pvr.dvbviewer diff --git a/package/kodi-pvr-dvbviewer/kodi-pvr-dvbviewer.hash b/package/kodi-pvr-dvbviewer/kodi-pvr-dvbviewer.hash new file mode 100644 index 00000000..ec201341 --- /dev/null +++ b/package/kodi-pvr-dvbviewer/kodi-pvr-dvbviewer.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 8a3d167e652574caf30ba0ce9c22d278715e0237774b817e37826f1b2d647bff kodi-pvr-dvbviewer-3.7.11-Leia.tar.gz +sha256 5757dbd6a8731e9395508cd7ab9ca0ea0c2863a7aac7136299d40549c88c9c2c debian/copyright diff --git a/package/kodi-pvr-dvbviewer/kodi-pvr-dvbviewer.mk b/package/kodi-pvr-dvbviewer/kodi-pvr-dvbviewer.mk new file mode 100644 index 00000000..b88d3d86 --- /dev/null +++ b/package/kodi-pvr-dvbviewer/kodi-pvr-dvbviewer.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-pvr-dvbviewer +# +################################################################################ + +KODI_PVR_DVBVIEWER_VERSION = 3.7.11-Leia +KODI_PVR_DVBVIEWER_SITE = $(call github,kodi-pvr,pvr.dvbviewer,$(KODI_PVR_DVBVIEWER_VERSION)) +KODI_PVR_DVBVIEWER_LICENSE = GPL-2.0+ +KODI_PVR_DVBVIEWER_LICENSE_FILES = debian/copyright +KODI_PVR_DVBVIEWER_DEPENDENCIES = kodi-platform + +$(eval $(cmake-package)) diff --git a/package/kodi-pvr-filmon/Config.in b/package/kodi-pvr-filmon/Config.in new file mode 100644 index 00000000..0b662df1 --- /dev/null +++ b/package/kodi-pvr-filmon/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_KODI_PVR_FILMON + bool "kodi-pvr-filmon" + select BR2_PACKAGE_JSONCPP + select BR2_PACKAGE_KODI_PLATFORM + help + Filmon PVR client addon for Kodi + + https://github.com/kodi-pvr/pvr.filmon diff --git a/package/kodi-pvr-filmon/kodi-pvr-filmon.hash b/package/kodi-pvr-filmon/kodi-pvr-filmon.hash new file mode 100644 index 00000000..e89ce635 --- /dev/null +++ b/package/kodi-pvr-filmon/kodi-pvr-filmon.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 90988e4833c0f84ab08e08be3cd08b84e4ba2baf2ebc1545c62e5dbd6708d749 kodi-pvr-filmon-2.4.6-Leia.tar.gz +sha256 081907693b03f27cb1b17e0a440ae05fd8c8b4631be6fe6fdba4e18a5d40fdc5 debian/copyright diff --git a/package/kodi-pvr-filmon/kodi-pvr-filmon.mk b/package/kodi-pvr-filmon/kodi-pvr-filmon.mk new file mode 100644 index 00000000..078eae17 --- /dev/null +++ b/package/kodi-pvr-filmon/kodi-pvr-filmon.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-pvr-filmon +# +################################################################################ + +KODI_PVR_FILMON_VERSION = 2.4.6-Leia +KODI_PVR_FILMON_SITE = $(call github,kodi-pvr,pvr.filmon,$(KODI_PVR_FILMON_VERSION)) +KODI_PVR_FILMON_LICENSE = GPL-2.0+ +KODI_PVR_FILMON_LICENSE_FILES = debian/copyright +KODI_PVR_FILMON_DEPENDENCIES = jsoncpp kodi-platform + +$(eval $(cmake-package)) diff --git a/package/kodi-pvr-hdhomerun/Config.in b/package/kodi-pvr-hdhomerun/Config.in new file mode 100644 index 00000000..ed5b914c --- /dev/null +++ b/package/kodi-pvr-hdhomerun/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_KODI_PVR_HDHOMERUN + bool "kodi-pvr-hdhomerun" + select BR2_PACKAGE_JSONCPP + select BR2_PACKAGE_KODI_PLATFORM + select BR2_PACKAGE_LIBHDHOMERUN + help + Kodi's HDHomeRun client addon + + https://github.com/kodi-pvr/pvr.hdhomerun diff --git a/package/kodi-pvr-hdhomerun/kodi-pvr-hdhomerun.hash b/package/kodi-pvr-hdhomerun/kodi-pvr-hdhomerun.hash new file mode 100644 index 00000000..1762289f --- /dev/null +++ b/package/kodi-pvr-hdhomerun/kodi-pvr-hdhomerun.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 815ba3dfbe6e1318226d41879057f0b8a4f0ac960d12ebc5d69f0a1ac28cfa09 kodi-pvr-hdhomerun-3.5.0-Leia.tar.gz +sha256 9e76c8ce9e201f75c50c755982b9e2f15821280dedc5e953f685086912e1e39d debian/copyright diff --git a/package/kodi-pvr-hdhomerun/kodi-pvr-hdhomerun.mk b/package/kodi-pvr-hdhomerun/kodi-pvr-hdhomerun.mk new file mode 100644 index 00000000..ae42f5c3 --- /dev/null +++ b/package/kodi-pvr-hdhomerun/kodi-pvr-hdhomerun.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-pvr-hdhomerun +# +################################################################################ + +KODI_PVR_HDHOMERUN_VERSION = 3.5.0-Leia +KODI_PVR_HDHOMERUN_SITE = $(call github,kodi-pvr,pvr.hdhomerun,$(KODI_PVR_HDHOMERUN_VERSION)) +KODI_PVR_HDHOMERUN_LICENSE = GPL-2.0+ +KODI_PVR_HDHOMERUN_LICENSE_FILES = debian/copyright +KODI_PVR_HDHOMERUN_DEPENDENCIES = jsoncpp kodi-platform libhdhomerun + +$(eval $(cmake-package)) diff --git a/package/kodi-pvr-hts/Config.in b/package/kodi-pvr-hts/Config.in new file mode 100644 index 00000000..c4c4497b --- /dev/null +++ b/package/kodi-pvr-hts/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_KODI_PVR_HTS + bool "kodi-pvr-hts" + select BR2_PACKAGE_KODI_PLATFORM + help + Tvheadend HTSP PVR client addon for Kodi + + https://github.com/kodi-pvr/pvr.hts diff --git a/package/kodi-pvr-hts/kodi-pvr-hts.hash b/package/kodi-pvr-hts/kodi-pvr-hts.hash new file mode 100644 index 00000000..c9724404 --- /dev/null +++ b/package/kodi-pvr-hts/kodi-pvr-hts.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 6958b91ca616554e4c068bc303c66388e9a2c3a68b5979d8918b4e0d7b6bb95c kodi-pvr-hts-4.4.21-Leia.tar.gz +sha256 6d97c3d608a5d59565b567313bd3e53a1d0066ed59f4ae8e474c895d0c20e746 debian/copyright diff --git a/package/kodi-pvr-hts/kodi-pvr-hts.mk b/package/kodi-pvr-hts/kodi-pvr-hts.mk new file mode 100644 index 00000000..6a25cda0 --- /dev/null +++ b/package/kodi-pvr-hts/kodi-pvr-hts.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-pvr-hts +# +################################################################################ + +KODI_PVR_HTS_VERSION = 4.4.21-Leia +KODI_PVR_HTS_SITE = $(call github,kodi-pvr,pvr.hts,$(KODI_PVR_HTS_VERSION)) +KODI_PVR_HTS_LICENSE = GPL-2.0+ +KODI_PVR_HTS_LICENSE_FILES = debian/copyright +KODI_PVR_HTS_DEPENDENCIES = kodi-platform + +$(eval $(cmake-package)) diff --git a/package/kodi-pvr-iptvsimple/Config.in b/package/kodi-pvr-iptvsimple/Config.in new file mode 100644 index 00000000..94fc1f06 --- /dev/null +++ b/package/kodi-pvr-iptvsimple/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_KODI_PVR_IPTVSIMPLE + bool "kodi-pvr-iptvsimple" + select BR2_PACKAGE_KODI_PLATFORM + select BR2_PACKAGE_RAPIDXML + help + IPTV Live TV and Radio PVR client addon for Kodi + + https://github.com/kodi-pvr/pvr.iptvsimple diff --git a/package/kodi-pvr-iptvsimple/kodi-pvr-iptvsimple.hash b/package/kodi-pvr-iptvsimple/kodi-pvr-iptvsimple.hash new file mode 100644 index 00000000..2de9a4a1 --- /dev/null +++ b/package/kodi-pvr-iptvsimple/kodi-pvr-iptvsimple.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 0812e359a943f4ffb763b47fc0440768a8aa09f12172ef8dff4440b0a48f9c96 kodi-pvr-iptvsimple-3.9.8-Leia.tar.gz +sha256 50e33ec3cddb75e6c5c5eb1b3d38cc0adee7dec71d7244925106d4a2c4d5e31d debian/copyright diff --git a/package/kodi-pvr-iptvsimple/kodi-pvr-iptvsimple.mk b/package/kodi-pvr-iptvsimple/kodi-pvr-iptvsimple.mk new file mode 100644 index 00000000..f1a08710 --- /dev/null +++ b/package/kodi-pvr-iptvsimple/kodi-pvr-iptvsimple.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-pvr-iptvsimple +# +################################################################################ + +KODI_PVR_IPTVSIMPLE_VERSION = 3.9.8-Leia +KODI_PVR_IPTVSIMPLE_SITE = $(call github,kodi-pvr,pvr.iptvsimple,$(KODI_PVR_IPTVSIMPLE_VERSION)) +KODI_PVR_IPTVSIMPLE_LICENSE = GPL-2.0+ +KODI_PVR_IPTVSIMPLE_LICENSE_FILES = debian/copyright +KODI_PVR_IPTVSIMPLE_DEPENDENCIES = kodi-platform rapidxml + +$(eval $(cmake-package)) diff --git a/package/kodi-pvr-mediaportal-tvserver/Config.in b/package/kodi-pvr-mediaportal-tvserver/Config.in new file mode 100644 index 00000000..733ca885 --- /dev/null +++ b/package/kodi-pvr-mediaportal-tvserver/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_KODI_PVR_MEDIAPORTAL_TVSERVER + bool "kodi-pvr-mediaportal-tvserver" + select BR2_PACKAGE_KODI_PLATFORM + help + MediaPortal TVServer PVR client addon for Kodi + + https://github.com/kodi-pvr/pvr.mediaportal.tvserver diff --git a/package/kodi-pvr-mediaportal-tvserver/kodi-pvr-mediaportal-tvserver.hash b/package/kodi-pvr-mediaportal-tvserver/kodi-pvr-mediaportal-tvserver.hash new file mode 100644 index 00000000..53d4316d --- /dev/null +++ b/package/kodi-pvr-mediaportal-tvserver/kodi-pvr-mediaportal-tvserver.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 9c05578566f7448dc3a7677587c804596aa314afd493cb9c62cc65ea883645aa kodi-pvr-mediaportal-tvserver-3.5.18-Leia.tar.gz +sha256 f9df5b0c11a23b2d5ca84828c67412ecd8752df46527285aeff48f4d7988d367 debian/copyright diff --git a/package/kodi-pvr-mediaportal-tvserver/kodi-pvr-mediaportal-tvserver.mk b/package/kodi-pvr-mediaportal-tvserver/kodi-pvr-mediaportal-tvserver.mk new file mode 100644 index 00000000..a00711c6 --- /dev/null +++ b/package/kodi-pvr-mediaportal-tvserver/kodi-pvr-mediaportal-tvserver.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-pvr-mediaportal-tvserver +# +################################################################################ + +KODI_PVR_MEDIAPORTAL_TVSERVER_VERSION = 3.5.18-Leia +KODI_PVR_MEDIAPORTAL_TVSERVER_SITE = $(call github,kodi-pvr,pvr.mediaportal.tvserver,$(KODI_PVR_MEDIAPORTAL_TVSERVER_VERSION)) +KODI_PVR_MEDIAPORTAL_TVSERVER_LICENSE = GPL-2.0+ +KODI_PVR_MEDIAPORTAL_TVSERVER_LICENSE_FILES = debian/copyright +KODI_PVR_MEDIAPORTAL_TVSERVER_DEPENDENCIES = kodi-platform + +$(eval $(cmake-package)) diff --git a/package/kodi-pvr-mythtv/Config.in b/package/kodi-pvr-mythtv/Config.in new file mode 100644 index 00000000..798ff3e9 --- /dev/null +++ b/package/kodi-pvr-mythtv/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_KODI_PVR_MYTHTV + bool "kodi-pvr-mythtv" + select BR2_PACKAGE_KODI_PLATFORM + help + MythTV PVR for Kodi + + https://github.com/kodi-pvr/pvr.mythtv diff --git a/package/kodi-pvr-mythtv/kodi-pvr-mythtv.hash b/package/kodi-pvr-mythtv/kodi-pvr-mythtv.hash new file mode 100644 index 00000000..1896592c --- /dev/null +++ b/package/kodi-pvr-mythtv/kodi-pvr-mythtv.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 b2048db252966d5f78828cacd41e85d00a522c03fe7f24a0f000f720fe7aff0a kodi-pvr-mythtv-5.10.19-Leia.tar.gz +sha256 0efb11009d447b39ec35d77dc265db3d1c3d261730bbc33b267587254d973ec8 debian/copyright diff --git a/package/kodi-pvr-mythtv/kodi-pvr-mythtv.mk b/package/kodi-pvr-mythtv/kodi-pvr-mythtv.mk new file mode 100644 index 00000000..e902bab1 --- /dev/null +++ b/package/kodi-pvr-mythtv/kodi-pvr-mythtv.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-pvr-mythtv +# +################################################################################ + +KODI_PVR_MYTHTV_VERSION = 5.10.19-Leia +KODI_PVR_MYTHTV_SITE = $(call github,janbar,pvr.mythtv,$(KODI_PVR_MYTHTV_VERSION)) +KODI_PVR_MYTHTV_LICENSE = GPL-2.0+ +KODI_PVR_MYTHTV_LICENSE_FILES = debian/copyright +KODI_PVR_MYTHTV_DEPENDENCIES = kodi-platform + +$(eval $(cmake-package)) diff --git a/package/kodi-pvr-nextpvr/Config.in b/package/kodi-pvr-nextpvr/Config.in new file mode 100644 index 00000000..e5204267 --- /dev/null +++ b/package/kodi-pvr-nextpvr/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_KODI_PVR_NEXTPVR + bool "kodi-pvr-nextpvr" + select BR2_PACKAGE_KODI_PLATFORM + help + Kodi's NextPVR client addon + + https://github.com/kodi-pvr/pvr.nextpvr diff --git a/package/kodi-pvr-nextpvr/kodi-pvr-nextpvr.hash b/package/kodi-pvr-nextpvr/kodi-pvr-nextpvr.hash new file mode 100644 index 00000000..345ece6d --- /dev/null +++ b/package/kodi-pvr-nextpvr/kodi-pvr-nextpvr.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 1f5576070a0bf076d1f28cdd547bc4ff134861c18a71cff7fd036eaacc357707 kodi-pvr-nextpvr-3.3.21-Leia.tar.gz +sha256 0bd576badce05c6b4315c415dabd77d80c871e72026c399f7a7bb8582e0911fe debian/copyright diff --git a/package/kodi-pvr-nextpvr/kodi-pvr-nextpvr.mk b/package/kodi-pvr-nextpvr/kodi-pvr-nextpvr.mk new file mode 100644 index 00000000..b3521604 --- /dev/null +++ b/package/kodi-pvr-nextpvr/kodi-pvr-nextpvr.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-pvr-nextpvr +# +################################################################################ + +KODI_PVR_NEXTPVR_VERSION = 3.3.21-Leia +KODI_PVR_NEXTPVR_SITE = $(call github,kodi-pvr,pvr.nextpvr,$(KODI_PVR_NEXTPVR_VERSION)) +KODI_PVR_NEXTPVR_LICENSE = GPL-2.0+ +KODI_PVR_NEXTPVR_LICENSE_FILES = debian/copyright +KODI_PVR_NEXTPVR_DEPENDENCIES = kodi-platform + +$(eval $(cmake-package)) diff --git a/package/kodi-pvr-njoy/Config.in b/package/kodi-pvr-njoy/Config.in new file mode 100644 index 00000000..33c493cb --- /dev/null +++ b/package/kodi-pvr-njoy/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_KODI_PVR_NJOY + bool "kodi-pvr-njoy" + select BR2_PACKAGE_KODI_PLATFORM + help + Kodi's Njoy N7 client addon + + https://github.com/kodi-pvr/pvr.njoy diff --git a/package/kodi-pvr-njoy/kodi-pvr-njoy.hash b/package/kodi-pvr-njoy/kodi-pvr-njoy.hash new file mode 100644 index 00000000..3071dfac --- /dev/null +++ b/package/kodi-pvr-njoy/kodi-pvr-njoy.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 8c42a3c3754d7a07de9682504c4883a584eb21a92b9af70f0129ffc2707c1554 kodi-pvr-njoy-3.4.2-Leia.tar.gz +sha256 9d42154eabd84ae131cc6384a3ea0fc622c3551595564bec7a6bec8df4a57fbd debian/copyright diff --git a/package/kodi-pvr-njoy/kodi-pvr-njoy.mk b/package/kodi-pvr-njoy/kodi-pvr-njoy.mk new file mode 100644 index 00000000..ca86d46d --- /dev/null +++ b/package/kodi-pvr-njoy/kodi-pvr-njoy.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-pvr-njoy +# +################################################################################ + +KODI_PVR_NJOY_VERSION = 3.4.2-Leia +KODI_PVR_NJOY_SITE = $(call github,kodi-pvr,pvr.njoy,$(KODI_PVR_NJOY_VERSION)) +KODI_PVR_NJOY_LICENSE = GPL-2.0+ +KODI_PVR_NJOY_LICENSE_FILES = debian/copyright +KODI_PVR_NJOY_DEPENDENCIES = kodi-platform + +$(eval $(cmake-package)) diff --git a/package/kodi-pvr-octonet/Config.in b/package/kodi-pvr-octonet/Config.in new file mode 100644 index 00000000..b8bcd7e2 --- /dev/null +++ b/package/kodi-pvr-octonet/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_KODI_PVR_OCTONET + bool "kodi-pvr-octonet" + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # json-for-modern-cpp + select BR2_PACKAGE_JSON_FOR_MODERN_CPP + select BR2_PACKAGE_KODI_PLATFORM + select BR2_PACKAGE_LIBPLATFORM + help + DigitalDevices Octonet PVR client addon for Kodi + + https://github.com/DigitalDevices/pvr.octonet + +comment "kodi-pvr-octonet needs a toolchain w/ gcc >= 4.9" + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/kodi-pvr-octonet/kodi-pvr-octonet.hash b/package/kodi-pvr-octonet/kodi-pvr-octonet.hash new file mode 100644 index 00000000..5ee0eeb6 --- /dev/null +++ b/package/kodi-pvr-octonet/kodi-pvr-octonet.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 e55d440afe3b1f1bc1529d1f662d4d18f5334ecf01e023d34d5a7e419b6fbf10 kodi-pvr-octonet-e35cc373476a92aee11ec8e8a14fb8fc086a4f84.tar.gz +sha256 8547bcbe8bd72c18ac285fd801fcbff8806a988913741b14497f4aba88bba403 debian/copyright diff --git a/package/kodi-pvr-octonet/kodi-pvr-octonet.mk b/package/kodi-pvr-octonet/kodi-pvr-octonet.mk new file mode 100644 index 00000000..890a2835 --- /dev/null +++ b/package/kodi-pvr-octonet/kodi-pvr-octonet.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-pvr-octonet +# +################################################################################ + +KODI_PVR_OCTONET_VERSION = e35cc373476a92aee11ec8e8a14fb8fc086a4f84 +KODI_PVR_OCTONET_SITE = $(call github,DigitalDevices,pvr.octonet,$(KODI_PVR_OCTONET_VERSION)) +KODI_PVR_OCTONET_LICENSE = GPL-2.0+ +KODI_PVR_OCTONET_LICENSE_FILES = debian/copyright +KODI_PVR_OCTONET_DEPENDENCIES = json-for-modern-cpp kodi-platform libplatform + +$(eval $(cmake-package)) diff --git a/package/kodi-pvr-pctv/Config.in b/package/kodi-pvr-pctv/Config.in new file mode 100644 index 00000000..255cd4a5 --- /dev/null +++ b/package/kodi-pvr-pctv/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_KODI_PVR_PCTV + bool "kodi-pvr-pctv" + select BR2_PACKAGE_JSONCPP + select BR2_PACKAGE_KODI_PLATFORM + help + PCTV PVR client addon for Kodi + + https://github.com/kodi-pvr/pvr.vdr.vnsi diff --git a/package/kodi-pvr-pctv/kodi-pvr-pctv.hash b/package/kodi-pvr-pctv/kodi-pvr-pctv.hash new file mode 100644 index 00000000..30fb81a9 --- /dev/null +++ b/package/kodi-pvr-pctv/kodi-pvr-pctv.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 10124e5444c6cfb0c77bad1d1122f6ba5fc233248d6b33066ba799f4dedceeee kodi-pvr-pctv-2.4.7-Leia.tar.gz +sha256 43376e70ae80133530c8ce71a3b0dcde8529a8162d3b3956009eb8fc0f5c559c debian/copyright diff --git a/package/kodi-pvr-pctv/kodi-pvr-pctv.mk b/package/kodi-pvr-pctv/kodi-pvr-pctv.mk new file mode 100644 index 00000000..851788c9 --- /dev/null +++ b/package/kodi-pvr-pctv/kodi-pvr-pctv.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-pvr-pctv +# +################################################################################ + +KODI_PVR_PCTV_VERSION = 2.4.7-Leia +KODI_PVR_PCTV_SITE = $(call github,kodi-pvr,pvr.pctv,$(KODI_PVR_PCTV_VERSION)) +KODI_PVR_PCTV_LICENSE = GPL-2.0+ +KODI_PVR_PCTV_LICENSE_FILES = debian/copyright +KODI_PVR_PCTV_DEPENDENCIES = jsoncpp kodi-platform + +$(eval $(cmake-package)) diff --git a/package/kodi-pvr-stalker/Config.in b/package/kodi-pvr-stalker/Config.in new file mode 100644 index 00000000..d334d0c2 --- /dev/null +++ b/package/kodi-pvr-stalker/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_KODI_PVR_STALKER + bool "kodi-pvr-stalker" + select BR2_PACKAGE_JSONCPP + select BR2_PACKAGE_KODI_PLATFORM + select BR2_PACKAGE_LIBXML2 + help + A PVR Client that connects Kodi to Stalker Middleware + + https://github.com/kodi-pvr/pvr.stalker diff --git a/package/kodi-pvr-stalker/kodi-pvr-stalker.hash b/package/kodi-pvr-stalker/kodi-pvr-stalker.hash new file mode 100644 index 00000000..cc129d90 --- /dev/null +++ b/package/kodi-pvr-stalker/kodi-pvr-stalker.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 03eb428f21d6b8526b6671278b60ac6dc5a761a515af27172d8ac5c814cc3f65 kodi-pvr-stalker-3.4.10-Leia.tar.gz +sha256 f9fa34b2caa07376a7a976c1f0b1b9761b37449afd4ceb1e7afa283492054237 debian/copyright diff --git a/package/kodi-pvr-stalker/kodi-pvr-stalker.mk b/package/kodi-pvr-stalker/kodi-pvr-stalker.mk new file mode 100644 index 00000000..0ae41171 --- /dev/null +++ b/package/kodi-pvr-stalker/kodi-pvr-stalker.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-pvr-stalker +# +################################################################################ + +KODI_PVR_STALKER_VERSION = 3.4.10-Leia +KODI_PVR_STALKER_SITE = $(call github,kodi-pvr,pvr.stalker,$(KODI_PVR_STALKER_VERSION)) +KODI_PVR_STALKER_LICENSE = GPL-2.0+ +KODI_PVR_STALKER_LICENSE_FILES = debian/copyright +KODI_PVR_STALKER_DEPENDENCIES = jsoncpp kodi-platform libxml2 + +$(eval $(cmake-package)) diff --git a/package/kodi-pvr-vbox/Config.in b/package/kodi-pvr-vbox/Config.in new file mode 100644 index 00000000..c1c22c10 --- /dev/null +++ b/package/kodi-pvr-vbox/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_KODI_PVR_VBOX + bool "kodi-pvr-vbox" + select BR2_PACKAGE_KODI_PLATFORM + help + Kodi PVR addon for interfacing with VBox Communications XTi TV + Gateway + + https://github.com/kodi-pvr/pvr.vbox diff --git a/package/kodi-pvr-vbox/kodi-pvr-vbox.hash b/package/kodi-pvr-vbox/kodi-pvr-vbox.hash new file mode 100644 index 00000000..b753b994 --- /dev/null +++ b/package/kodi-pvr-vbox/kodi-pvr-vbox.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 98aadcf3d0109a7dc5f85b4e5473d595039b59c46b0686a2fbda88ff7631ee0c kodi-pvr-vbox-4.7.0-Leia.tar.gz +sha256 f535b79e33bdf4d270f8aed3fdcb92f807981f808d7f5e3c053c088e5ccf553b debian/copyright diff --git a/package/kodi-pvr-vbox/kodi-pvr-vbox.mk b/package/kodi-pvr-vbox/kodi-pvr-vbox.mk new file mode 100644 index 00000000..b10bfc5b --- /dev/null +++ b/package/kodi-pvr-vbox/kodi-pvr-vbox.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-pvr-vbox +# +################################################################################ + +KODI_PVR_VBOX_VERSION = 4.7.0-Leia +KODI_PVR_VBOX_SITE = $(call github,kodi-pvr,pvr.vbox,$(KODI_PVR_VBOX_VERSION)) +KODI_PVR_VBOX_LICENSE = GPL-2.0+ +KODI_PVR_VBOX_LICENSE_FILES = debian/copyright +KODI_PVR_VBOX_DEPENDENCIES = kodi-platform + +$(eval $(cmake-package)) diff --git a/package/kodi-pvr-vdr-vnsi/Config.in b/package/kodi-pvr-vdr-vnsi/Config.in new file mode 100644 index 00000000..768dec88 --- /dev/null +++ b/package/kodi-pvr-vdr-vnsi/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_KODI_PVR_VDR_VNSI + bool "kodi-pvr-vdr-vnsi" + select BR2_PACKAGE_KODI_PLATFORM + help + Kodi PVR addon VNSI + + https://github.com/kodi-pvr/pvr.vdr.vnsi diff --git a/package/kodi-pvr-vdr-vnsi/kodi-pvr-vdr-vnsi.hash b/package/kodi-pvr-vdr-vnsi/kodi-pvr-vdr-vnsi.hash new file mode 100644 index 00000000..f7043b58 --- /dev/null +++ b/package/kodi-pvr-vdr-vnsi/kodi-pvr-vdr-vnsi.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 f0ea8907e77ca014429bbe73d07c3410cc7be25a6db0df157863b87d2684affb kodi-pvr-vdr-vnsi-3.6.4-Leia.tar.gz +sha256 28266596fdf4162d4f15985e0108cd9ddb42531ddad2297011649c1af49f7fe2 debian/copyright diff --git a/package/kodi-pvr-vdr-vnsi/kodi-pvr-vdr-vnsi.mk b/package/kodi-pvr-vdr-vnsi/kodi-pvr-vdr-vnsi.mk new file mode 100644 index 00000000..f467fa98 --- /dev/null +++ b/package/kodi-pvr-vdr-vnsi/kodi-pvr-vdr-vnsi.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-pvr-vdr-vnsi +# +################################################################################ + +KODI_PVR_VDR_VNSI_VERSION = 3.6.4-Leia +KODI_PVR_VDR_VNSI_SITE = $(call github,kodi-pvr,pvr.vdr.vnsi,$(KODI_PVR_VDR_VNSI_VERSION)) +KODI_PVR_VDR_VNSI_LICENSE = GPL-2.0+ +KODI_PVR_VDR_VNSI_LICENSE_FILES = debian/copyright +KODI_PVR_VDR_VNSI_DEPENDENCIES = kodi-platform + +$(eval $(cmake-package)) diff --git a/package/kodi-pvr-vuplus/Config.in b/package/kodi-pvr-vuplus/Config.in new file mode 100644 index 00000000..b6a03e84 --- /dev/null +++ b/package/kodi-pvr-vuplus/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_KODI_PVR_VUPLUS + bool "kodi-pvr-vuplus" + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # json-for-modern-cpp + select BR2_PACKAGE_JSON_FOR_MODERN_CPP + select BR2_PACKAGE_KODI_PLATFORM + select BR2_PACKAGE_TINYXML + help + VuPlus PVR client addon for Kodi + + https://github.com/kodi-pvr/pvr.vuplus + +comment "kodi-pvr-vuplus needs a toolchain w/ gcc >= 4.9" + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/kodi-pvr-vuplus/kodi-pvr-vuplus.hash b/package/kodi-pvr-vuplus/kodi-pvr-vuplus.hash new file mode 100644 index 00000000..e80e51bc --- /dev/null +++ b/package/kodi-pvr-vuplus/kodi-pvr-vuplus.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 d7dd890e4491e211ff3781cdc043347ab7a4ef6e00619ac1b4641ed81b0c3626 kodi-pvr-vuplus-3.28.9-Leia.tar.gz +sha256 e98518889de8d38eaa6ddcb086b6e3b86efed98b501a5c666b9cf48f79e6df5d debian/copyright diff --git a/package/kodi-pvr-vuplus/kodi-pvr-vuplus.mk b/package/kodi-pvr-vuplus/kodi-pvr-vuplus.mk new file mode 100644 index 00000000..bf1de117 --- /dev/null +++ b/package/kodi-pvr-vuplus/kodi-pvr-vuplus.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-pvr-vuplus +# +################################################################################ + +KODI_PVR_VUPLUS_VERSION = 3.28.9-Leia +KODI_PVR_VUPLUS_SITE = $(call github,kodi-pvr,pvr.vuplus,$(KODI_PVR_VUPLUS_VERSION)) +KODI_PVR_VUPLUS_LICENSE = GPL-2.0+ +KODI_PVR_VUPLUS_LICENSE_FILES = debian/copyright +KODI_PVR_VUPLUS_DEPENDENCIES = json-for-modern-cpp kodi-platform tinyxml + +$(eval $(cmake-package)) diff --git a/package/kodi-pvr-wmc/Config.in b/package/kodi-pvr-wmc/Config.in new file mode 100644 index 00000000..2672c834 --- /dev/null +++ b/package/kodi-pvr-wmc/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_KODI_PVR_WMC + bool "kodi-pvr-wmc" + select BR2_PACKAGE_KODI_PLATFORM + help + Kodi's Windows Media Center client addon + + https://github.com/kodi-pvr/pvr.wmc diff --git a/package/kodi-pvr-wmc/kodi-pvr-wmc.hash b/package/kodi-pvr-wmc/kodi-pvr-wmc.hash new file mode 100644 index 00000000..d5387e85 --- /dev/null +++ b/package/kodi-pvr-wmc/kodi-pvr-wmc.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 7fb150ba3b8b41cf164425b56ae5dda3a5fb2f64cdea7229900113965d492fee kodi-pvr-wmc-2.4.6-Leia.tar.gz +sha256 6d97c3d608a5d59565b567313bd3e53a1d0066ed59f4ae8e474c895d0c20e746 debian/copyright diff --git a/package/kodi-pvr-wmc/kodi-pvr-wmc.mk b/package/kodi-pvr-wmc/kodi-pvr-wmc.mk new file mode 100644 index 00000000..c280f89d --- /dev/null +++ b/package/kodi-pvr-wmc/kodi-pvr-wmc.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-pvr-wmc +# +################################################################################ + +KODI_PVR_WMC_VERSION = 2.4.6-Leia +KODI_PVR_WMC_SITE = $(call github,kodi-pvr,pvr.wmc,$(KODI_PVR_WMC_VERSION)) +KODI_PVR_WMC_LICENSE = GPL-2.0+ +KODI_PVR_WMC_LICENSE_FILES = debian/copyright +KODI_PVR_WMC_DEPENDENCIES = kodi-platform + +$(eval $(cmake-package)) diff --git a/package/kodi-pvr-zattoo/Config.in b/package/kodi-pvr-zattoo/Config.in new file mode 100644 index 00000000..5dfadcad --- /dev/null +++ b/package/kodi-pvr-zattoo/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_KODI_PVR_ZATTOO + bool "kodi-pvr-zattoo" + select BR2_PACKAGE_KODI_PLATFORM + select BR2_PACKAGE_LIBPLATFORM + select BR2_PACKAGE_RAPIDJSON + select BR2_PACKAGE_TINYXML2 + help + Kodi PVR-Addon for Zattoo + + https://github.com/rbuehlma/pvr.zattoo diff --git a/package/kodi-pvr-zattoo/kodi-pvr-zattoo.hash b/package/kodi-pvr-zattoo/kodi-pvr-zattoo.hash new file mode 100644 index 00000000..13201a42 --- /dev/null +++ b/package/kodi-pvr-zattoo/kodi-pvr-zattoo.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 19de7bc58bcf37bbcff5ad2cb2f095cb15a4217f9abec5c9ff30d0489dab89d2 kodi-pvr-zattoo-18.1.21-Leia.tar.gz +sha256 d3670aef89085fd6b97665967a8422c89324afbc4720daa0975696a2ee92e236 debian/copyright diff --git a/package/kodi-pvr-zattoo/kodi-pvr-zattoo.mk b/package/kodi-pvr-zattoo/kodi-pvr-zattoo.mk new file mode 100644 index 00000000..78fc01f1 --- /dev/null +++ b/package/kodi-pvr-zattoo/kodi-pvr-zattoo.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-pvr-zattoo +# +################################################################################ + +KODI_PVR_ZATTOO_VERSION = 18.1.21-Leia +KODI_PVR_ZATTOO_SITE = $(call github,rbuehlma,pvr.zattoo,$(KODI_PVR_ZATTOO_VERSION)) +KODI_PVR_ZATTOO_LICENSE = GPL-2.0+ +KODI_PVR_ZATTOO_LICENSE_FILES = debian/copyright +KODI_PVR_ZATTOO_DEPENDENCIES = kodi-platform libplatform rapidjson tinyxml2 + +$(eval $(cmake-package)) diff --git a/package/kodi-screensaver-asteroids/Config.in b/package/kodi-screensaver-asteroids/Config.in new file mode 100644 index 00000000..3d66c3dc --- /dev/null +++ b/package/kodi-screensaver-asteroids/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_KODI_SCREENSAVER_ASTEROIDS + bool "kodi-screensaver-asteroids" + depends on BR2_PACKAGE_HAS_LIBGL + select BR2_PACKAGE_GLM + help + Asteroids screensaver for Kodi + + https://github.com/xbmc/screensaver.asteroids + +comment "kodi-screensaver-asteroids needs OpenGL" + depends on !BR2_PACKAGE_HAS_LIBGL diff --git a/package/kodi-screensaver-asteroids/kodi-screensaver-asteroids.hash b/package/kodi-screensaver-asteroids/kodi-screensaver-asteroids.hash new file mode 100644 index 00000000..e6855a3b --- /dev/null +++ b/package/kodi-screensaver-asteroids/kodi-screensaver-asteroids.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 f4b54ed79eedd1a39e24dcbe8d372dbfc9edbc9358499ea9ab28777dd9082ee3 kodi-screensaver-asteroids-2.3.3-Leia.tar.gz +sha256 297a1d34e6000f1b1a924f5ab75c16c2270968bfa47357dd8fa3799c9dfc47d8 debian/copyright diff --git a/package/kodi-screensaver-asteroids/kodi-screensaver-asteroids.mk b/package/kodi-screensaver-asteroids/kodi-screensaver-asteroids.mk new file mode 100644 index 00000000..dcd0a3d3 --- /dev/null +++ b/package/kodi-screensaver-asteroids/kodi-screensaver-asteroids.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-screensaver-asteroids +# +################################################################################ + +KODI_SCREENSAVER_ASTEROIDS_VERSION = 2.3.3-Leia +KODI_SCREENSAVER_ASTEROIDS_SITE = $(call github,xbmc,screensaver.asteroids,$(KODI_SCREENSAVER_ASTEROIDS_VERSION)) +KODI_SCREENSAVER_ASTEROIDS_LICENSE = GPL-2.0+ +KODI_SCREENSAVER_ASTEROIDS_LICENSE_FILES = debian/copyright +KODI_SCREENSAVER_ASTEROIDS_DEPENDENCIES = glm kodi + +$(eval $(cmake-package)) diff --git a/package/kodi-screensaver-asterwave/Config.in b/package/kodi-screensaver-asterwave/Config.in new file mode 100644 index 00000000..b5e80cc5 --- /dev/null +++ b/package/kodi-screensaver-asterwave/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_KODI_SCREENSAVER_ASTERWAVE + bool "kodi-screensaver-asterwave" + depends on BR2_PACKAGE_HAS_LIBGL # libglu, libsoil + select BR2_PACKAGE_LIBGLU + select BR2_PACKAGE_LIBSOIL + help + AsterWave screensaver for Kodi + + https://github.com/xbmc/screensaver.asterwave + +comment "kodi-screensaver-asterwave needs OpenGL" + depends on !BR2_PACKAGE_HAS_LIBGL diff --git a/package/kodi-screensaver-asterwave/kodi-screensaver-asterwave.hash b/package/kodi-screensaver-asterwave/kodi-screensaver-asterwave.hash new file mode 100644 index 00000000..a7fc0578 --- /dev/null +++ b/package/kodi-screensaver-asterwave/kodi-screensaver-asterwave.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 d61bcdd8b74b50a26eab1597718b12ec260f6c6cdde0f143dbc1ce958ca86c69 kodi-screensaver-asterwave-3.0.5-Leia.tar.gz +sha256 a0268e081014f3a555be39f7eb0fff759424963324915ad2ea56bf26668685e7 debian/copyright diff --git a/package/kodi-screensaver-asterwave/kodi-screensaver-asterwave.mk b/package/kodi-screensaver-asterwave/kodi-screensaver-asterwave.mk new file mode 100644 index 00000000..b982395e --- /dev/null +++ b/package/kodi-screensaver-asterwave/kodi-screensaver-asterwave.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-screensaver-asterwave +# +################################################################################ + +KODI_SCREENSAVER_ASTERWAVE_VERSION = 3.0.5-Leia +KODI_SCREENSAVER_ASTERWAVE_SITE = $(call github,xbmc,screensaver.asterwave,$(KODI_SCREENSAVER_ASTERWAVE_VERSION)) +KODI_SCREENSAVER_ASTERWAVE_LICENSE = GPL-2.0+ +KODI_SCREENSAVER_ASTERWAVE_LICENSE_FILES = debian/copyright +KODI_SCREENSAVER_ASTERWAVE_DEPENDENCIES = kodi libglu libsoil + +$(eval $(cmake-package)) diff --git a/package/kodi-screensaver-biogenesis/Config.in b/package/kodi-screensaver-biogenesis/Config.in new file mode 100644 index 00000000..9703e909 --- /dev/null +++ b/package/kodi-screensaver-biogenesis/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_KODI_SCREENSAVER_BIOGENESIS + bool "kodi-screensaver-biogenesis" + depends on BR2_PACKAGE_HAS_LIBGL + help + BioGenesis screensaver for Kodi + + https://github.com/xbmc/screensaver.biogenesis + +comment "kodi-screensaver-biogenesis needs OpenGL" + depends on !BR2_PACKAGE_HAS_LIBGL diff --git a/package/kodi-screensaver-biogenesis/kodi-screensaver-biogenesis.hash b/package/kodi-screensaver-biogenesis/kodi-screensaver-biogenesis.hash new file mode 100644 index 00000000..df07f9fb --- /dev/null +++ b/package/kodi-screensaver-biogenesis/kodi-screensaver-biogenesis.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 b0f721d112282f633a769e7b077c5dd52e5045a8f1ae32c4e602b0e2e937acb0 kodi-screensaver-biogenesis-2.2.3-Leia.tar.gz +sha256 d38b9e2768b49acdedcb21a202d12753c8f1d7e85e5ee24ff1e4aee3c7601a65 debian/copyright diff --git a/package/kodi-screensaver-biogenesis/kodi-screensaver-biogenesis.mk b/package/kodi-screensaver-biogenesis/kodi-screensaver-biogenesis.mk new file mode 100644 index 00000000..562c279e --- /dev/null +++ b/package/kodi-screensaver-biogenesis/kodi-screensaver-biogenesis.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-screensaver-biogenesis +# +################################################################################ + +KODI_SCREENSAVER_BIOGENESIS_VERSION = 2.2.3-Leia +KODI_SCREENSAVER_BIOGENESIS_SITE = $(call github,xbmc,screensaver.biogenesis,$(KODI_SCREENSAVER_BIOGENESIS_VERSION)) +KODI_SCREENSAVER_BIOGENESIS_LICENSE = GPL-2.0+ +KODI_SCREENSAVER_BIOGENESIS_LICENSE_FILES = debian/copyright +KODI_SCREENSAVER_BIOGENESIS_DEPENDENCIES = kodi + +$(eval $(cmake-package)) diff --git a/package/kodi-screensaver-cpblobs/Config.in b/package/kodi-screensaver-cpblobs/Config.in new file mode 100644 index 00000000..4e0003bd --- /dev/null +++ b/package/kodi-screensaver-cpblobs/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_KODI_SCREENSAVER_CPBLOBS + bool "kodi-screensaver-cpblobs" + depends on BR2_PACKAGE_HAS_LIBGL # libsoil + select BR2_PACKAGE_LIBSOIL + help + CpBlobs screensaver for Kodi + + https://github.com/xbmc/screensaver.cpblobs + +comment "kodi-screensaver-cpblobs needs OpenGL" + depends on !BR2_PACKAGE_HAS_LIBGL diff --git a/package/kodi-screensaver-cpblobs/kodi-screensaver-cpblobs.hash b/package/kodi-screensaver-cpblobs/kodi-screensaver-cpblobs.hash new file mode 100644 index 00000000..4ff614a9 --- /dev/null +++ b/package/kodi-screensaver-cpblobs/kodi-screensaver-cpblobs.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 afab934a2c93f73334943775f45f5a1d065e74714528bc700459d110e88e43a4 kodi-screensaver-cpblobs-3.0.5-Leia.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE diff --git a/package/kodi-screensaver-cpblobs/kodi-screensaver-cpblobs.mk b/package/kodi-screensaver-cpblobs/kodi-screensaver-cpblobs.mk new file mode 100644 index 00000000..01f6bdf3 --- /dev/null +++ b/package/kodi-screensaver-cpblobs/kodi-screensaver-cpblobs.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-screensaver-cpblobs +# +################################################################################ + +KODI_SCREENSAVER_CPBLOBS_VERSION = 3.0.5-Leia +KODI_SCREENSAVER_CPBLOBS_SITE = $(call github,xbmc,screensaver.cpblobs,$(KODI_SCREENSAVER_CPBLOBS_VERSION)) +KODI_SCREENSAVER_CPBLOBS_LICENSE = GPL-2.0 +KODI_SCREENSAVER_CPBLOBS_LICENSE_FILES = LICENSE +KODI_SCREENSAVER_CPBLOBS_DEPENDENCIES = kodi libsoil + +$(eval $(cmake-package)) diff --git a/package/kodi-screensaver-crystalmorph/Config.in b/package/kodi-screensaver-crystalmorph/Config.in new file mode 100644 index 00000000..1303d229 --- /dev/null +++ b/package/kodi-screensaver-crystalmorph/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_KODI_SCREENSAVER_CRYSTALMORPH + bool "kodi-screensaver-crystalmorph" + depends on BR2_PACKAGE_HAS_LIBGL # libglu + help + CrystalMorph screensaver for Kodi + + https://github.com/notspiff/screensaver.crystalmorph + +comment "kodi-screensaver-crystalmorph needs OpenGL" + depends on !BR2_PACKAGE_HAS_LIBGL diff --git a/package/kodi-screensaver-crystalmorph/kodi-screensaver-crystalmorph.hash b/package/kodi-screensaver-crystalmorph/kodi-screensaver-crystalmorph.hash new file mode 100644 index 00000000..59e07032 --- /dev/null +++ b/package/kodi-screensaver-crystalmorph/kodi-screensaver-crystalmorph.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 d8ed548222f1118964104fefc8ac3056dfe6c9d2ee35cd7c8355c9ea9fcaffc5 kodi-screensaver-crystalmorph-4439c84c38abf889e19a1863e745942c0d7f8203.tar.gz +sha256 febce1924ed772f22ec3fabec646b1401aad4f4a81a7f1baeb858f27ae4f5241 src/Fractal.cpp diff --git a/package/kodi-screensaver-crystalmorph/kodi-screensaver-crystalmorph.mk b/package/kodi-screensaver-crystalmorph/kodi-screensaver-crystalmorph.mk new file mode 100644 index 00000000..35642d55 --- /dev/null +++ b/package/kodi-screensaver-crystalmorph/kodi-screensaver-crystalmorph.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-screensaver-crystalmorph +# +################################################################################ + +KODI_SCREENSAVER_CRYSTALMORPH_VERSION = 4439c84c38abf889e19a1863e745942c0d7f8203 +KODI_SCREENSAVER_CRYSTALMORPH_SITE = $(call github,notspiff,screensaver.crystalmorph,$(KODI_SCREENSAVER_CRYSTALMORPH_VERSION)) +KODI_SCREENSAVER_CRYSTALMORPH_LICENSE = GPL-2.0+ +KODI_SCREENSAVER_CRYSTALMORPH_LICENSE_FILES = src/Fractal.cpp +KODI_SCREENSAVER_CRYSTALMORPH_DEPENDENCIES = kodi + +$(eval $(cmake-package)) diff --git a/package/kodi-screensaver-greynetic/Config.in b/package/kodi-screensaver-greynetic/Config.in new file mode 100644 index 00000000..685feb88 --- /dev/null +++ b/package/kodi-screensaver-greynetic/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_KODI_SCREENSAVER_GREYNETIC + bool "kodi-screensaver-greynetic" + depends on BR2_PACKAGE_HAS_LIBGL + help + Greynetic screensaver for Kodi + + https://github.com/xbmc/screensaver.greynetic + +comment "kodi-screensaver-greynetic needs OpenGL" + depends on !BR2_PACKAGE_HAS_LIBGL diff --git a/package/kodi-screensaver-greynetic/kodi-screensaver-greynetic.hash b/package/kodi-screensaver-greynetic/kodi-screensaver-greynetic.hash new file mode 100644 index 00000000..87961fda --- /dev/null +++ b/package/kodi-screensaver-greynetic/kodi-screensaver-greynetic.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 e9a24d3204e3d6d5b5302a865e37c6f2ae9e25a3536eeda4205830f5e0256555 kodi-screensaver-greynetic-2.2.3-Leia.tar.gz +sha256 2905fdee5c68dc4944c42711d45f47794e8fb881bd67d66d0875d10f9a2156a0 debian/copyright diff --git a/package/kodi-screensaver-greynetic/kodi-screensaver-greynetic.mk b/package/kodi-screensaver-greynetic/kodi-screensaver-greynetic.mk new file mode 100644 index 00000000..63113255 --- /dev/null +++ b/package/kodi-screensaver-greynetic/kodi-screensaver-greynetic.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-screensaver-greynetic +# +################################################################################ + +KODI_SCREENSAVER_GREYNETIC_VERSION = 2.2.3-Leia +KODI_SCREENSAVER_GREYNETIC_SITE = $(call github,xbmc,screensaver.greynetic,$(KODI_SCREENSAVER_GREYNETIC_VERSION)) +KODI_SCREENSAVER_GREYNETIC_LICENSE = GPL-2.0+ +KODI_SCREENSAVER_GREYNETIC_LICENSE_FILES = debian/copyright +KODI_SCREENSAVER_GREYNETIC_DEPENDENCIES = kodi + +$(eval $(cmake-package)) diff --git a/package/kodi-screensaver-matrixtrails/Config.in b/package/kodi-screensaver-matrixtrails/Config.in new file mode 100644 index 00000000..270a51c9 --- /dev/null +++ b/package/kodi-screensaver-matrixtrails/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_KODI_SCREENSAVER_MATRIXTRAILS + bool "kodi-screensaver-matrixtrails" + depends on BR2_PACKAGE_HAS_LIBGL # libsoil + select BR2_PACKAGE_LIBSOIL + help + Matrix trails screensaver for Kodi + + https://github.com/xbmc/screensaver.matrixtrails + +comment "kodi-screensaver-matrixtrails needs OpenGL" + depends on !BR2_PACKAGE_HAS_LIBGL diff --git a/package/kodi-screensaver-matrixtrails/kodi-screensaver-matrixtrails.hash b/package/kodi-screensaver-matrixtrails/kodi-screensaver-matrixtrails.hash new file mode 100644 index 00000000..26b95cbc --- /dev/null +++ b/package/kodi-screensaver-matrixtrails/kodi-screensaver-matrixtrails.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 5a2f5bca0c197eea87f06376941c6d0ddbc81cf144d8c3854ac148fdec3400ec kodi-screensaver-matrixtrails-2.2.3-Leia.tar.gz +sha256 385a17599b44aaea10537374c1991c21a5e06153878917b12f96fc1cf8bbc118 debian/copyright diff --git a/package/kodi-screensaver-matrixtrails/kodi-screensaver-matrixtrails.mk b/package/kodi-screensaver-matrixtrails/kodi-screensaver-matrixtrails.mk new file mode 100644 index 00000000..10d3d45e --- /dev/null +++ b/package/kodi-screensaver-matrixtrails/kodi-screensaver-matrixtrails.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-screensaver-matrixtrails +# +################################################################################ + +KODI_SCREENSAVER_MATRIXTRAILS_VERSION = 2.2.3-Leia +KODI_SCREENSAVER_MATRIXTRAILS_SITE = $(call github,xbmc,screensaver.matrixtrails,$(KODI_SCREENSAVER_MATRIXTRAILS_VERSION)) +KODI_SCREENSAVER_MATRIXTRAILS_LICENSE = GPL-2.0+ +KODI_SCREENSAVER_MATRIXTRAILS_LICENSE_FILES = debian/copyright +KODI_SCREENSAVER_MATRIXTRAILS_DEPENDENCIES = kodi libsoil + +$(eval $(cmake-package)) diff --git a/package/kodi-screensaver-pingpong/Config.in b/package/kodi-screensaver-pingpong/Config.in new file mode 100644 index 00000000..bc76fffd --- /dev/null +++ b/package/kodi-screensaver-pingpong/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_KODI_SCREENSAVER_PINGPONG + bool "kodi-screensaver-pingpong" + depends on BR2_PACKAGE_HAS_LIBGL + help + Ping-pong screensaver for Kodi + + https://github.com/xbmc/screensaver.pingpong + +comment "kodi-screensaver-pingpong needs OpenGL" + depends on !BR2_PACKAGE_HAS_LIBGL diff --git a/package/kodi-screensaver-pingpong/kodi-screensaver-pingpong.hash b/package/kodi-screensaver-pingpong/kodi-screensaver-pingpong.hash new file mode 100644 index 00000000..4b6114fd --- /dev/null +++ b/package/kodi-screensaver-pingpong/kodi-screensaver-pingpong.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 b87e65d2e3c290de7167e1098899d5816103958a99769d84e930ffd2cbfa7d00 kodi-screensaver-pingpong-2.1.3-Leia.tar.gz +sha256 96e9b817ea6384e3d2c5241c8a0504df11d6f8bd0a2f58f25df7152da64f263c debian/copyright diff --git a/package/kodi-screensaver-pingpong/kodi-screensaver-pingpong.mk b/package/kodi-screensaver-pingpong/kodi-screensaver-pingpong.mk new file mode 100644 index 00000000..929539f0 --- /dev/null +++ b/package/kodi-screensaver-pingpong/kodi-screensaver-pingpong.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-screensaver-pingpong +# +################################################################################ + +KODI_SCREENSAVER_PINGPONG_VERSION = 2.1.3-Leia +KODI_SCREENSAVER_PINGPONG_SITE = $(call github,xbmc,screensaver.pingpong,$(KODI_SCREENSAVER_PINGPONG_VERSION)) +KODI_SCREENSAVER_PINGPONG_LICENSE = GPL-2.0+ +KODI_SCREENSAVER_PINGPONG_LICENSE_FILES = debian/copyright +KODI_SCREENSAVER_PINGPONG_DEPENDENCIES = kodi + +$(eval $(cmake-package)) diff --git a/package/kodi-screensaver-pyro/Config.in b/package/kodi-screensaver-pyro/Config.in new file mode 100644 index 00000000..e2d1988e --- /dev/null +++ b/package/kodi-screensaver-pyro/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_KODI_SCREENSAVER_PYRO + bool "kodi-screensaver-pyro" + depends on BR2_PACKAGE_HAS_LIBGL + help + Pyro screensaver for Kodi + + https://github.com/xbmc/screensaver.pyro + +comment "kodi-screensaver-pyro needs OpenGL" + depends on !BR2_PACKAGE_HAS_LIBGL diff --git a/package/kodi-screensaver-pyro/kodi-screensaver-pyro.hash b/package/kodi-screensaver-pyro/kodi-screensaver-pyro.hash new file mode 100644 index 00000000..fd51a7c1 --- /dev/null +++ b/package/kodi-screensaver-pyro/kodi-screensaver-pyro.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 cf9ed582b70460682175366641e6a00eaea085a1d3477a02710ba8398a1d17bd kodi-screensaver-pyro-3.0.1-Leia.tar.gz +sha256 24354cf1e6058ba0a95c7652eab9f1be2224c835ce36d14e82c0f401f65a53b7 debian/copyright diff --git a/package/kodi-screensaver-pyro/kodi-screensaver-pyro.mk b/package/kodi-screensaver-pyro/kodi-screensaver-pyro.mk new file mode 100644 index 00000000..8a6ea93e --- /dev/null +++ b/package/kodi-screensaver-pyro/kodi-screensaver-pyro.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-screensaver-pyro +# +################################################################################ + +KODI_SCREENSAVER_PYRO_VERSION = 3.0.1-Leia +KODI_SCREENSAVER_PYRO_SITE = $(call github,xbmc,screensaver.pyro,$(KODI_SCREENSAVER_PYRO_VERSION)) +KODI_SCREENSAVER_PYRO_LICENSE = GPL-2.0+ +KODI_SCREENSAVER_PYRO_LICENSE_FILES = debian/copyright +KODI_SCREENSAVER_PYRO_DEPENDENCIES = kodi + +$(eval $(cmake-package)) diff --git a/package/kodi-screensaver-rsxs/0001-Disable-drempels.patch b/package/kodi-screensaver-rsxs/0001-Disable-drempels.patch new file mode 100644 index 00000000..e76a9b99 --- /dev/null +++ b/package/kodi-screensaver-rsxs/0001-Disable-drempels.patch @@ -0,0 +1,40 @@ +From 28c01686ba0d67d317e058776f01efba5e6471bd Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Sat, 13 Jul 2019 14:18:12 +0200 +Subject: [PATCH] Disable drempels + +Does not build with ImageMagick 7.x: + +src/drempels/TexMgr.cpp:31:10: fatal error: magick/api.h: + No such file or directory + +Signed-off-by: Bernd Kuhls +--- + CMakeLists.txt | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index a86ccd0..b5ca03f 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -40,8 +40,7 @@ include_directories(${KODI_INCLUDE_DIR}/.. # Hack way with "/..", need bigger Ko + if(ImageMagick_FOUND AND NOT ${OWN_IMAGE_MAGICK}) + message(STATUS "ImageMagick found in the system and is used") + else() +- message(STATUS "ImageMagick not found or forced and add custom created") +- add_subdirectory(lib/ImageMagick) ++ message(STATUS "ImageMagick not found") + endif() + add_subdirectory(lib/kodi/gui/gl) + add_subdirectory(lib/Implicit) +@@ -70,7 +69,6 @@ include(src/biof/CMakeLists.txt) + include(src/busyspheres/CMakeLists.txt) + include(src/colorfire/CMakeLists.txt) + include(src/cyclone/CMakeLists.txt) +-include(src/drempels/CMakeLists.txt) + include(src/euphoria/CMakeLists.txt) + include(src/feedback/CMakeLists.txt) + include(src/fieldlines/CMakeLists.txt) +-- +2.20.1 + diff --git a/package/kodi-screensaver-rsxs/Config.in b/package/kodi-screensaver-rsxs/Config.in new file mode 100644 index 00000000..076c7eff --- /dev/null +++ b/package/kodi-screensaver-rsxs/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_KODI_SCREENSAVER_RSXS + bool "kodi-screensaver-rsxs" + depends on BR2_PACKAGE_HAS_LIBGL # libglu + select BR2_PACKAGE_BZIP2 + select BR2_PACKAGE_GLI + select BR2_PACKAGE_GLM + select BR2_PACKAGE_JPEG + select BR2_PACKAGE_LIBPNG + select BR2_PACKAGE_LIBTOOL + select BR2_PACKAGE_TIFF + help + RSXS screensaver add-ons for Kodi + + https://github.com/xbmc/screensavers.rsxs + +comment "kodi-screensaver-rsxs needs an OpenGL backend" + depends on !BR2_PACKAGE_HAS_LIBGL diff --git a/package/kodi-screensaver-rsxs/kodi-screensaver-rsxs.hash b/package/kodi-screensaver-rsxs/kodi-screensaver-rsxs.hash new file mode 100644 index 00000000..f4987a44 --- /dev/null +++ b/package/kodi-screensaver-rsxs/kodi-screensaver-rsxs.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 22ff3f0ca9679c59ce1a90b98d918dd10a8012b789729b2e44c04d4ce8c86ad8 kodi-screensaver-rsxs-7cb648507440d87948dec10d5bfdab3b722d37fe.tar.gz +sha256 fa0ff8b6a6267b9477be7d505aa384056633b4be17e0b9d308df9bd70d1c99f6 debian/copyright diff --git a/package/kodi-screensaver-rsxs/kodi-screensaver-rsxs.mk b/package/kodi-screensaver-rsxs/kodi-screensaver-rsxs.mk new file mode 100644 index 00000000..aa881d0d --- /dev/null +++ b/package/kodi-screensaver-rsxs/kodi-screensaver-rsxs.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-screensaver-rsxs +# +################################################################################ + +KODI_SCREENSAVER_RSXS_VERSION = 7cb648507440d87948dec10d5bfdab3b722d37fe +KODI_SCREENSAVER_RSXS_SITE = $(call github,xbmc,screensavers.rsxs,$(KODI_SCREENSAVER_RSXS_VERSION)) +KODI_SCREENSAVER_RSXS_LICENSE = GPL-2.0+ +KODI_SCREENSAVER_RSXS_LICENSE_FILES = debian/copyright +KODI_SCREENSAVER_RSXS_DEPENDENCIES = bzip2 gli glm jpeg kodi libpng libtool tiff + +$(eval $(cmake-package)) diff --git a/package/kodi-screensaver-stars/Config.in b/package/kodi-screensaver-stars/Config.in new file mode 100644 index 00000000..a2e435c0 --- /dev/null +++ b/package/kodi-screensaver-stars/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_KODI_SCREENSAVER_STARS + bool "kodi-screensaver-stars" + depends on BR2_PACKAGE_HAS_LIBGL + help + Starfield screensaver for Kodi + + https://github.com/xbmc/screensaver.stars + +comment "kodi-screensaver-stars needs OpenGL" + depends on !BR2_PACKAGE_HAS_LIBGL diff --git a/package/kodi-screensaver-stars/kodi-screensaver-stars.hash b/package/kodi-screensaver-stars/kodi-screensaver-stars.hash new file mode 100644 index 00000000..b6585173 --- /dev/null +++ b/package/kodi-screensaver-stars/kodi-screensaver-stars.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 98972a9af45015d902ade50db822dbded52d4473acde6bc4b01a5ab8c4af4269 kodi-screensaver-stars-2.1.4-Leia.tar.gz +sha256 310782e1abd43c4de6217c513e328bddf999d39302d67c6e05b10a59959827af LICENSE.md diff --git a/package/kodi-screensaver-stars/kodi-screensaver-stars.mk b/package/kodi-screensaver-stars/kodi-screensaver-stars.mk new file mode 100644 index 00000000..ca51921b --- /dev/null +++ b/package/kodi-screensaver-stars/kodi-screensaver-stars.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-screensaver-stars +# +################################################################################ + +KODI_SCREENSAVER_STARS_VERSION = 2.1.4-Leia +KODI_SCREENSAVER_STARS_SITE = $(call github,xbmc,screensaver.stars,$(KODI_SCREENSAVER_STARS_VERSION)) +KODI_SCREENSAVER_STARS_LICENSE = GPL-2.0+ +KODI_SCREENSAVER_STARS_LICENSE_FILES = LICENSE.md +KODI_SCREENSAVER_STARS_DEPENDENCIES = kodi + +$(eval $(cmake-package)) diff --git a/package/kodi-skin-confluence/Config.in b/package/kodi-skin-confluence/Config.in new file mode 100644 index 00000000..08b65680 --- /dev/null +++ b/package/kodi-skin-confluence/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_KODI_SKIN_CONFLUENCE + bool "kodi-skin-confluence" + help + Kodi confluence skin + + https://github.com/xbmc/skin.confluence diff --git a/package/kodi-skin-confluence/kodi-skin-confluence.hash b/package/kodi-skin-confluence/kodi-skin-confluence.hash new file mode 100644 index 00000000..fdd4e828 --- /dev/null +++ b/package/kodi-skin-confluence/kodi-skin-confluence.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 dc4a0abf05db50caf8e70e4904b8c2c445008ec3d6d23381c9c31dedaf6109de kodi-skin-confluence-cffcb8320003e6048abe4b26316e5d5f3d50eac9.tar.gz +sha256 89931c1fb1f3716694175763cf3221cfcd63d6935031cf6b4512d17ffe5d9860 LICENSE.txt diff --git a/package/kodi-skin-confluence/kodi-skin-confluence.mk b/package/kodi-skin-confluence/kodi-skin-confluence.mk new file mode 100644 index 00000000..d9bd10bd --- /dev/null +++ b/package/kodi-skin-confluence/kodi-skin-confluence.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# kodi-skin-confluence +# +################################################################################ + +KODI_SKIN_CONFLUENCE_VERSION = cffcb8320003e6048abe4b26316e5d5f3d50eac9 +KODI_SKIN_CONFLUENCE_SITE = $(call github,xbmc,skin.confluence,$(KODI_SKIN_CONFLUENCE_VERSION)) +KODI_SKIN_CONFLUENCE_LICENSE = GPL-2.0 +KODI_SKIN_CONFLUENCE_LICENSE_FILES = LICENSE.txt +KODI_SKIN_CONFLUENCE_DEPENDENCIES = kodi + +define KODI_SKIN_CONFLUENCE_BUILD_CMDS + $(HOST_DIR)/bin/TexturePacker -input $(@D)/media/ -output $(@D)/media/Textures.xbt -dupecheck -use_none +endef + +define KODI_SKIN_CONFLUENCE_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/usr/share/kodi/addons/skin.confluence + cp -dpfr $(@D)/* $(TARGET_DIR)/usr/share/kodi/addons/skin.confluence + find $(TARGET_DIR)/usr/share/kodi/addons/skin.confluence/media -name *.jpg -delete + find $(TARGET_DIR)/usr/share/kodi/addons/skin.confluence/media -name *.png -delete +endef + +$(eval $(generic-package)) diff --git a/package/kodi-texturepacker/0001-texturepacker.patch b/package/kodi-texturepacker/0001-texturepacker.patch new file mode 100644 index 00000000..8830b4c6 --- /dev/null +++ b/package/kodi-texturepacker/0001-texturepacker.patch @@ -0,0 +1,16 @@ +Fix host compile + +Signed-off-by: Bernd Kuhls + +diff -uNr xbmc-656cba5d5c7c5edb166196b48560825b9b1f03fd.org/tools/depends/native/TexturePacker/Makefile xbmc-656cba5d5c7c5edb166196b48560825b9b1f03fd/tools/depends/native/TexturePacker/Makefile +--- xbmc-656cba5d5c7c5edb166196b48560825b9b1f03fd.org/tools/depends/native/TexturePacker/Makefile 2015-01-25 09:00:48.000000000 +0100 ++++ xbmc-656cba5d5c7c5edb166196b48560825b9b1f03fd/tools/depends/native/TexturePacker/Makefile 2015-01-25 13:03:23.606140953 +0100 +@@ -36,7 +36,7 @@ + -rm -rf $(PLATFORM)/*; mkdir -p $(PLATFORM) + cd $(PLATFORM); cp -a $(SOURCE)/* . + cd $(PLATFORM); ./autogen.sh +- cd $(PLATFORM); ./configure --prefix=$(PREFIX) $(EXTRA_CONFIGURE) EXTRA_DEFINES="$(NATIVE_ARCH_DEFINES)" ++ cd $(PLATFORM); ./configure --prefix=$(PREFIX) EXTRA_DEFINES="$(NATIVE_ARCH_DEFINES)" + + + $(APP): $(PLATFORM) diff --git a/package/kodi-texturepacker/0002-fix-texture-packer-cmake-source-dir.patch b/package/kodi-texturepacker/0002-fix-texture-packer-cmake-source-dir.patch new file mode 100644 index 00000000..ddd82439 --- /dev/null +++ b/package/kodi-texturepacker/0002-fix-texture-packer-cmake-source-dir.patch @@ -0,0 +1,27 @@ +Fix stand-alone build + +CMake Error at CMakeLists.txt:40 (add_executable): + Cannot find source file: + + /home/bernd/buildroot/output/build/host-kodi-texturepacker-18.4-Leia/tools/depends/native/TexturePacker/xbmc/guilib/XBTF.cpp + + Tried extensions .c .C .c++ .cc .cpp .cxx .cu .m .M .mm .h .hh .h++ .hm + .hpp .hxx .in .txx + +CMake Error at CMakeLists.txt:40 (add_executable): + No SOURCES given to target: TexturePacker + +Downloaded from +https://github.com/LibreELEC/LibreELEC.tv/blob/master/packages/mediacenter/kodi/patches/kodi-100.25-hack-fix-texture-packer-cmake-source-dir.patch + +Signed-off-by: Bernd Kuhls + +diff -Naur a/tools/depends/native/TexturePacker/CMakeLists.txt b/tools/depends/native/TexturePacker/CMakeLists.txt +--- a/tools/depends/native/TexturePacker/CMakeLists.txt 2016-12-23 17:10:28.593185862 +0000 ++++ b/tools/depends/native/TexturePacker/CMakeLists.txt 2016-12-23 17:10:39.469253011 +0000 +@@ -1,3 +1,5 @@ ++set(CMAKE_SOURCE_DIR ${CMAKE_SOURCE_DIR}/../../../..) ++ + list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules) + + if(APPLE) diff --git a/package/kodi-texturepacker/kodi-texturepacker.hash b/package/kodi-texturepacker/kodi-texturepacker.hash new file mode 120000 index 00000000..a5757509 --- /dev/null +++ b/package/kodi-texturepacker/kodi-texturepacker.hash @@ -0,0 +1 @@ +../kodi/kodi.hash \ No newline at end of file diff --git a/package/kodi-texturepacker/kodi-texturepacker.mk b/package/kodi-texturepacker/kodi-texturepacker.mk new file mode 100644 index 00000000..7b13904e --- /dev/null +++ b/package/kodi-texturepacker/kodi-texturepacker.mk @@ -0,0 +1,41 @@ +################################################################################ +# +# kodi-texturepacker +# +################################################################################ + +# Not possible to directly refer to kodi variables, because of +# first/second expansion trickery... +KODI_TEXTUREPACKER_VERSION = 18.9-Leia +KODI_TEXTUREPACKER_SITE = $(call github,xbmc,xbmc,$(KODI_TEXTUREPACKER_VERSION)) +KODI_TEXTUREPACKER_SOURCE = kodi-$(KODI_TEXTUREPACKER_VERSION).tar.gz +KODI_TEXTUREPACKER_DL_SUBDIR = kodi +KODI_TEXTUREPACKER_LICENSE = GPL-2.0 +KODI_TEXTUREPACKER_LICENSE_FILES = LICENSE.md +HOST_KODI_TEXTUREPACKER_SUBDIR = tools/depends/native/TexturePacker +HOST_KODI_TEXTUREPACKER_DEPENDENCIES = \ + host-giflib \ + host-libjpeg \ + host-libpng \ + host-lzo + +HOST_KODI_TEXTUREPACKER_CXXFLAGS = \ + $(HOST_CXXFLAGS) \ + -std=c++0x \ + -DTARGET_POSIX \ + -DTARGET_LINUX \ + -D_LINUX \ + -I$(@D)/xbmc/linux + +HOST_KODI_TEXTUREPACKER_CONF_OPTS += \ + -DCMAKE_CXX_FLAGS="$(HOST_KODI_TEXTUREPACKER_CXXFLAGS)" \ + -DCMAKE_MODULE_PATH=$(@D)/cmake/modules \ + -Wno-dev + +define HOST_KODI_TEXTUREPACKER_INSTALL_CMDS + $(INSTALL) -m 755 -D \ + $(@D)/tools/depends/native/TexturePacker/TexturePacker \ + $(HOST_DIR)/bin/TexturePacker +endef + +$(eval $(host-cmake-package)) diff --git a/package/kodi-vfs-rar/Config.in b/package/kodi-vfs-rar/Config.in new file mode 100644 index 00000000..2d8b6805 --- /dev/null +++ b/package/kodi-vfs-rar/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_KODI_VFS_RAR + bool "kodi-vfs-rar" + select BR2_PACKAGE_TINYXML + help + RAR VFS addon for Kodi + + https://github.com/xbmc/vfs.rar diff --git a/package/kodi-vfs-rar/kodi-vfs-rar.hash b/package/kodi-vfs-rar/kodi-vfs-rar.hash new file mode 100644 index 00000000..22ad584f --- /dev/null +++ b/package/kodi-vfs-rar/kodi-vfs-rar.hash @@ -0,0 +1,5 @@ +# Locally computed +sha256 5275c09eed7e8354849caa17c3d9699abcfa2437a7c7af3833bffd10fc1c577f kodi-vfs-rar-2.3.2-Leia.tar.gz +# License files +sha256 6ecc1687808b7d66b24f874755abfed7464d9751ed0001cd4e8e5d9bf397ff8a lib/UnrarXLib/license.txt +sha256 310782e1abd43c4de6217c513e328bddf999d39302d67c6e05b10a59959827af LICENSE.md diff --git a/package/kodi-vfs-rar/kodi-vfs-rar.mk b/package/kodi-vfs-rar/kodi-vfs-rar.mk new file mode 100644 index 00000000..c0d52a1d --- /dev/null +++ b/package/kodi-vfs-rar/kodi-vfs-rar.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-vfs-rar +# +################################################################################ + +KODI_VFS_RAR_VERSION = 2.3.2-Leia +KODI_VFS_RAR_SITE = $(call github,xbmc,vfs.rar,$(KODI_VFS_RAR_VERSION)) +KODI_VFS_RAR_LICENSE = unrar, GPL-2.0+ +KODI_VFS_RAR_LICENSE_FILES = lib/UnrarXLib/license.txt LICENSE.md +KODI_VFS_RAR_DEPENDENCIES = kodi tinyxml + +$(eval $(cmake-package)) diff --git a/package/kodi-vfs-sftp/Config.in b/package/kodi-vfs-sftp/Config.in new file mode 100644 index 00000000..a939bd92 --- /dev/null +++ b/package/kodi-vfs-sftp/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_KODI_VFS_SFTP + bool "kodi-vfs-sftp" + select BR2_PACKAGE_KODI_PLATFORM + select BR2_PACKAGE_LIBPLATFORM + select BR2_PACKAGE_LIBSSH + help + SFTP VFS addon for Kodi + + https://github.com/xbmc/vfs.sftp diff --git a/package/kodi-vfs-sftp/kodi-vfs-sftp.hash b/package/kodi-vfs-sftp/kodi-vfs-sftp.hash new file mode 100644 index 00000000..a17c2d32 --- /dev/null +++ b/package/kodi-vfs-sftp/kodi-vfs-sftp.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 dc3db18b6cef90cd518b741e5c9bc7b3f4412774ee60bf70b451a8d2fc88a091 kodi-vfs-sftp-1.0.6-Leia.tar.gz +sha256 310782e1abd43c4de6217c513e328bddf999d39302d67c6e05b10a59959827af LICENSE.md diff --git a/package/kodi-vfs-sftp/kodi-vfs-sftp.mk b/package/kodi-vfs-sftp/kodi-vfs-sftp.mk new file mode 100644 index 00000000..3870ff9b --- /dev/null +++ b/package/kodi-vfs-sftp/kodi-vfs-sftp.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-vfs-sftp +# +################################################################################ + +KODI_VFS_SFTP_VERSION = 1.0.6-Leia +KODI_VFS_SFTP_SITE = $(call github,xbmc,vfs.sftp,$(KODI_VFS_SFTP_VERSION)) +KODI_VFS_SFTP_LICENSE = GPL-2.0+ +KODI_VFS_SFTP_LICENSE_FILES = LICENSE.md +KODI_VFS_SFTP_DEPENDENCIES = kodi-platform libplatform libssh + +$(eval $(cmake-package)) diff --git a/package/kodi-visualisation-fishbmc/Config.in b/package/kodi-visualisation-fishbmc/Config.in new file mode 100644 index 00000000..66c1565b --- /dev/null +++ b/package/kodi-visualisation-fishbmc/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_KODI_VISUALISATION_FISHBMC + bool "kodi-visualisation-fishbmc" + help + Fische visualiser for Kodi + + https://github.com/xbmc/visualization.fishbmc diff --git a/package/kodi-visualisation-fishbmc/kodi-visualisation-fishbmc.hash b/package/kodi-visualisation-fishbmc/kodi-visualisation-fishbmc.hash new file mode 100644 index 00000000..4e215f33 --- /dev/null +++ b/package/kodi-visualisation-fishbmc/kodi-visualisation-fishbmc.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 a03d4f64a6d44625d6936fd3abd359a0a08d11252663cae9fc5d061bd489c006 kodi-visualisation-fishbmc-5.1.3-Leia.tar.gz +sha256 684792cea796ea39d086ffd6cf5cb7c70ab8188dcf493707ba90d081d28f787e visualization.fishbmc/LICENSE diff --git a/package/kodi-visualisation-fishbmc/kodi-visualisation-fishbmc.mk b/package/kodi-visualisation-fishbmc/kodi-visualisation-fishbmc.mk new file mode 100644 index 00000000..defc183f --- /dev/null +++ b/package/kodi-visualisation-fishbmc/kodi-visualisation-fishbmc.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-visualisation-fishbmc +# +################################################################################ + +KODI_VISUALISATION_FISHBMC_VERSION = 5.1.3-Leia +KODI_VISUALISATION_FISHBMC_SITE = $(call github,xbmc,visualization.fishbmc,$(KODI_VISUALISATION_FISHBMC_VERSION)) +KODI_VISUALISATION_FISHBMC_LICENSE = GPL-2.0+ +KODI_VISUALISATION_FISHBMC_LICENSE_FILES = visualization.fishbmc/LICENSE +KODI_VISUALISATION_FISHBMC_DEPENDENCIES = kodi + +$(eval $(cmake-package)) diff --git a/package/kodi-visualisation-goom/Config.in b/package/kodi-visualisation-goom/Config.in new file mode 100644 index 00000000..065bc1d7 --- /dev/null +++ b/package/kodi-visualisation-goom/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_KODI_VISUALISATION_GOOM + bool "kodi-visualisation-goom" + depends on BR2_PACKAGE_HAS_LIBGL + select BR2_PACKAGE_GLM + help + GOOM visualiser for Kodi + + https://github.com/notspiff/visualization.goom + +comment "kodi-visualization-goom needs OpenGL" + depends on !BR2_PACKAGE_HAS_LIBGL diff --git a/package/kodi-visualisation-goom/kodi-visualisation-goom.hash b/package/kodi-visualisation-goom/kodi-visualisation-goom.hash new file mode 100644 index 00000000..c9fa7dea --- /dev/null +++ b/package/kodi-visualisation-goom/kodi-visualisation-goom.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 fdd656721f6d1b1962fd0a1e240eafb4710237ba70809dd0391cd10cacf4417c kodi-visualisation-goom-2.2.3-Leia.tar.gz +sha256 a6b36f495079206146ae0b11624a8db49a538f421ffe1341f8651c9e6b06f0b0 debian/copyright diff --git a/package/kodi-visualisation-goom/kodi-visualisation-goom.mk b/package/kodi-visualisation-goom/kodi-visualisation-goom.mk new file mode 100644 index 00000000..d83f857a --- /dev/null +++ b/package/kodi-visualisation-goom/kodi-visualisation-goom.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# kodi-visualisation-goom +# +################################################################################ + +KODI_VISUALISATION_GOOM_VERSION = 2.2.3-Leia +KODI_VISUALISATION_GOOM_SITE = $(call github,xbmc,visualization.goom,$(KODI_VISUALISATION_GOOM_VERSION)) +KODI_VISUALISATION_GOOM_LICENSE = GPL-2.0+ +KODI_VISUALISATION_GOOM_LICENSE_FILES = debian/copyright + +KODI_VISUALISATION_GOOM_DEPENDENCIES = glm kodi + +KODI_VISUALISATION_GOOM_CONF_OPTS += \ + -DCMAKE_C_FLAGS="-std=c11" + +$(eval $(cmake-package)) diff --git a/package/kodi-visualisation-shadertoy/Config.in b/package/kodi-visualisation-shadertoy/Config.in new file mode 100644 index 00000000..1fabba5e --- /dev/null +++ b/package/kodi-visualisation-shadertoy/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_KODI_VISUALISATION_SHADERTOY + bool "kodi-visualisation-shadertoy" + select BR2_PACKAGE_GLM + select BR2_PACKAGE_LIBPLATFORM + help + Shadertoy visualiser for Kodi + + https://github.com/notspiff/visualization.shadertoy diff --git a/package/kodi-visualisation-shadertoy/kodi-visualisation-shadertoy.hash b/package/kodi-visualisation-shadertoy/kodi-visualisation-shadertoy.hash new file mode 100644 index 00000000..67ab8867 --- /dev/null +++ b/package/kodi-visualisation-shadertoy/kodi-visualisation-shadertoy.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 07724fc59cc5f960a941b8255af326e87fa9fbc8234498c7e21d8a46050e0dd4 kodi-visualisation-shadertoy-1.2.4-Leia.tar.gz +sha256 e33ac3ac6ca1bdd4a4a411481d43579d855622e7ecc207809b5f49ea617db480 debian/copyright diff --git a/package/kodi-visualisation-shadertoy/kodi-visualisation-shadertoy.mk b/package/kodi-visualisation-shadertoy/kodi-visualisation-shadertoy.mk new file mode 100644 index 00000000..865abf02 --- /dev/null +++ b/package/kodi-visualisation-shadertoy/kodi-visualisation-shadertoy.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-visualisation-shadertoy +# +################################################################################ + +KODI_VISUALISATION_SHADERTOY_VERSION = 1.2.4-Leia +KODI_VISUALISATION_SHADERTOY_SITE = $(call github,xbmc,visualization.shadertoy,$(KODI_VISUALISATION_SHADERTOY_VERSION)) +KODI_VISUALISATION_SHADERTOY_LICENSE = GPL-2.0+ +KODI_VISUALISATION_SHADERTOY_LICENSE_FILES = debian/copyright +KODI_VISUALISATION_SHADERTOY_DEPENDENCIES = glm kodi libplatform + +$(eval $(cmake-package)) diff --git a/package/kodi-visualisation-spectrum/0001-Backport-Add-missing-cstddef-include.patch b/package/kodi-visualisation-spectrum/0001-Backport-Add-missing-cstddef-include.patch new file mode 100644 index 00000000..5b1bb0c4 --- /dev/null +++ b/package/kodi-visualisation-spectrum/0001-Backport-Add-missing-cstddef-include.patch @@ -0,0 +1,30 @@ +From b2c54c1043c2396678005b578e85db30bdf5ccb9 Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Sat, 18 Jan 2020 20:22:41 +0100 +Subject: [PATCH] [Backport] Add missing cstddef include + +Backported from https://github.com/xbmc/visualization.spectrum/pull/37 + +Patch sent upstream: +https://github.com/xbmc/visualization.spectrum/pull/38 + +Signed-off-by: Bernd Kuhls +--- + src/opengl_spectrum.cpp | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/opengl_spectrum.cpp b/src/opengl_spectrum.cpp +index 05409ea..2441fd6 100644 +--- a/src/opengl_spectrum.cpp ++++ b/src/opengl_spectrum.cpp +@@ -38,6 +38,7 @@ + #include + #include + #include ++#include + + #include + #include +-- +2.20.1 + diff --git a/package/kodi-visualisation-spectrum/Config.in b/package/kodi-visualisation-spectrum/Config.in new file mode 100644 index 00000000..3b2b0a25 --- /dev/null +++ b/package/kodi-visualisation-spectrum/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_KODI_VISUALISATION_SPECTRUM + bool "kodi-visualisation-spectrum" + help + Spectrum visualiser for Kodi + + https://github.com/notspiff/visualization.spectrum diff --git a/package/kodi-visualisation-spectrum/kodi-visualisation-spectrum.hash b/package/kodi-visualisation-spectrum/kodi-visualisation-spectrum.hash new file mode 100644 index 00000000..ae78fbd3 --- /dev/null +++ b/package/kodi-visualisation-spectrum/kodi-visualisation-spectrum.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 ec88defbb90fdb03f075abdba39c436906a8fbad8f034da3e3b31f75842206cc kodi-visualisation-spectrum-3.0.2-Leia.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/kodi-visualisation-spectrum/kodi-visualisation-spectrum.mk b/package/kodi-visualisation-spectrum/kodi-visualisation-spectrum.mk new file mode 100644 index 00000000..c3d61c1e --- /dev/null +++ b/package/kodi-visualisation-spectrum/kodi-visualisation-spectrum.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-visualisation-spectrum +# +################################################################################ + +KODI_VISUALISATION_SPECTRUM_VERSION = 3.0.2-Leia +KODI_VISUALISATION_SPECTRUM_SITE = $(call github,xbmc,visualization.spectrum,$(KODI_VISUALISATION_SPECTRUM_VERSION)) +KODI_VISUALISATION_SPECTRUM_LICENSE = GPL-2.0+ +KODI_VISUALISATION_SPECTRUM_LICENSE_FILES = COPYING +KODI_VISUALISATION_SPECTRUM_DEPENDENCIES = kodi + +$(eval $(cmake-package)) diff --git a/package/kodi-visualisation-starburst/Config.in b/package/kodi-visualisation-starburst/Config.in new file mode 100644 index 00000000..af9eee7a --- /dev/null +++ b/package/kodi-visualisation-starburst/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_KODI_VISUALISATION_STARBURST + bool "kodi-visualisation-starburst" + select BR2_PACKAGE_GLM + help + StarBurst visualization for Kodi + + https://github.com/xbmc/visualization.starburst diff --git a/package/kodi-visualisation-starburst/kodi-visualisation-starburst.hash b/package/kodi-visualisation-starburst/kodi-visualisation-starburst.hash new file mode 100644 index 00000000..834d71ae --- /dev/null +++ b/package/kodi-visualisation-starburst/kodi-visualisation-starburst.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 5a06385dd4824373a00fe4e2139b3d851c51ed001f68671acf99d17ce348f5e2 kodi-visualisation-starburst-2.0.3-Leia.tar.gz +sha256 2e668b3da2f061a6d6ecc3cb96bdfb0f8fc9cc98c9e9f95454bc45b88708690f debian/copyright diff --git a/package/kodi-visualisation-starburst/kodi-visualisation-starburst.mk b/package/kodi-visualisation-starburst/kodi-visualisation-starburst.mk new file mode 100644 index 00000000..8d736f08 --- /dev/null +++ b/package/kodi-visualisation-starburst/kodi-visualisation-starburst.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-visualisation-starburst +# +################################################################################ + +KODI_VISUALISATION_STARBURST_VERSION = 2.0.3-Leia +KODI_VISUALISATION_STARBURST_SITE = $(call github,xbmc,visualization.starburst,$(KODI_VISUALISATION_STARBURST_VERSION)) +KODI_VISUALISATION_STARBURST_LICENSE = GPL-2.0+ +KODI_VISUALISATION_STARBURST_LICENSE_FILES = debian/copyright +KODI_VISUALISATION_STARBURST_DEPENDENCIES = glm kodi + +$(eval $(cmake-package)) diff --git a/package/kodi-visualisation-waveform/Config.in b/package/kodi-visualisation-waveform/Config.in new file mode 100644 index 00000000..56f25096 --- /dev/null +++ b/package/kodi-visualisation-waveform/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_KODI_VISUALISATION_WAVEFORM + bool "kodi-visualisation-waveform" + help + Waveform visualiser for Kodi + + https://github.com/notspiff/visualization.waveform diff --git a/package/kodi-visualisation-waveform/kodi-visualisation-waveform.hash b/package/kodi-visualisation-waveform/kodi-visualisation-waveform.hash new file mode 100644 index 00000000..578b2ea8 --- /dev/null +++ b/package/kodi-visualisation-waveform/kodi-visualisation-waveform.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 d734cbe9d7e661e8d4e61ff2bada423fd8dba33c5148b5044f4b1a1997c51376 kodi-visualisation-waveform-3.1.2-Leia.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/kodi-visualisation-waveform/kodi-visualisation-waveform.mk b/package/kodi-visualisation-waveform/kodi-visualisation-waveform.mk new file mode 100644 index 00000000..64a4db4f --- /dev/null +++ b/package/kodi-visualisation-waveform/kodi-visualisation-waveform.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# kodi-visualisation-waveform +# +################################################################################ + +KODI_VISUALISATION_WAVEFORM_VERSION = 3.1.2-Leia +KODI_VISUALISATION_WAVEFORM_SITE = $(call github,xbmc,visualization.waveform,$(KODI_VISUALISATION_WAVEFORM_VERSION)) +KODI_VISUALISATION_WAVEFORM_LICENSE = GPL-2.0+ +KODI_VISUALISATION_WAVEFORM_LICENSE_FILES = COPYING +KODI_VISUALISATION_WAVEFORM_DEPENDENCIES = kodi + +$(eval $(cmake-package)) diff --git a/package/kodi/0001-kodi-config.cmake-use-CMAKE_FIND_ROOT_PATH-to-fix-cr.patch b/package/kodi/0001-kodi-config.cmake-use-CMAKE_FIND_ROOT_PATH-to-fix-cr.patch new file mode 100644 index 00000000..5abb77e7 --- /dev/null +++ b/package/kodi/0001-kodi-config.cmake-use-CMAKE_FIND_ROOT_PATH-to-fix-cr.patch @@ -0,0 +1,42 @@ +From 6604cce38fed748e98d3bd2bf9d0f368d67eeb3c Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 29 Jul 2015 23:13:33 +0200 +Subject: [PATCH] kodi-config.cmake: use CMAKE_FIND_ROOT_PATH to fix + cross-compilation + +When cross-compiling, the location at build time of the libraries is +not the same as the one at run-time. The CMAKE_FIND_ROOT_PATH variable +is here to handle this difference, so use it in kodi-config.cmake. + +Signed-off-by: Thomas Petazzoni +(rebased and simplified for Kodi 17.0-Krypton) +Signed-off-by: Bernd Kuhls +--- + project/cmake/KodiConfig.cmake.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/project/cmake/KodiConfig.cmake.in b/project/cmake/KodiConfig.cmake.in +index 76626ec..ffb8e1d 100644 +--- a/cmake/KodiConfig.cmake.in ++++ b/cmake/KodiConfig.cmake.in +@@ -8,7 +8,7 @@ if(NOT @APP_NAME_UC@_PREFIX) + set(@APP_NAME_UC@_PREFIX @APP_PREFIX@) + endif() + if(NOT @APP_NAME_UC@_INCLUDE_DIR) +- set(@APP_NAME_UC@_INCLUDE_DIR @APP_INCLUDE_DIR@) ++ set(@APP_NAME_UC@_INCLUDE_DIR ${CMAKE_FIND_ROOT_PATH}/@APP_INCLUDE_DIR@) + endif() + if(NOT @APP_NAME_UC@_LIB_DIR) + set(@APP_NAME_UC@_LIB_DIR @APP_LIB_DIR@) +@@ -20,7 +20,7 @@ endif() + if(NOT WIN32) + set(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} @CXX11_SWITCH@") + endif() +-list(APPEND CMAKE_MODULE_PATH @APP_LIB_DIR@ @APP_DATA_DIR@/cmake) ++list(APPEND CMAKE_MODULE_PATH ${CMAKE_FIND_ROOT_PATH}/@APP_LIB_DIR@ ${CMAKE_FIND_ROOT_PATH}/@APP_DATA_DIR@/cmake) + + string(REPLACE ";" " " ARCH_DEFINES "@ARCH_DEFINES@") + add_definitions(${ARCH_DEFINES} -DBUILD_KODI_ADDON) +-- +2.5.0 + diff --git a/package/kodi/0002-Fix-crosscompiling-issues.patch b/package/kodi/0002-Fix-crosscompiling-issues.patch new file mode 100644 index 00000000..12bb66dd --- /dev/null +++ b/package/kodi/0002-Fix-crosscompiling-issues.patch @@ -0,0 +1,76 @@ +From d2c343a20bb61098d0450b15ea2d1dacd28d954a Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Sun, 12 Aug 2018 15:13:24 +0200 +Subject: [PATCH] Fix crosscompiling issues + +The codepath for KODI_DEPENDSBUILD needs to be used in order to provide +the correct crosscompiling options to ffmpeg. The CMake option +KODI_DEPENDSBUILD itself can not be enabled because it disables the +internal build of libdvd*. + +To link kodi.bin with the statically built ffmpeg libraries kodi uses +a wrapper script which calls pkgconfig. Our pkgconfig is patched to +alter paths which breaks the link command in this case, to fix this +PKG_CONFIG_SYSROOT_DIR was added. + +Also remove configure option --cpu from ffmpeg_conf to fix build +errors. + +Signed-off-by: Bernd Kuhls +--- + project/cmake/modules/FindFFMPEG.cmake | 16 +++++++--------- + tools/depends/target/ffmpeg/CMakeLists.txt | 2 +- + 2 files changed, 8 insertions(+), 10 deletions(-) + +diff --git a/project/cmake/modules/FindFFMPEG.cmake b/project/cmake/modules/FindFFMPEG.cmake +index 28cc80710e..1ac8793149 100644 +--- a/cmake/modules/FindFFMPEG.cmake ++++ b/cmake/modules/FindFFMPEG.cmake +@@ -234,14 +234,12 @@ + -DENABLE_VAAPI=${ENABLE_VAAPI} + -DENABLE_VDPAU=${ENABLE_VDPAU}) + +- if(KODI_DEPENDSBUILD) + set(CROSS_ARGS -DDEPENDS_PATH=${DEPENDS_PATH} + -DPKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE} + -DCROSSCOMPILING=${CMAKE_CROSSCOMPILING} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} +- -DOS=${OS} ++ -DOS=linux + -DCMAKE_AR=${CMAKE_AR}) +- endif() + set(LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS}) + list(APPEND LINKER_FLAGS ${SYSTEM_LDFLAGS}) + +@@ -280,12 +278,12 @@ + "#!${BASH_COMMAND} + if [[ $@ == *${APP_NAME_LC}.bin* || $@ == *${APP_NAME_LC}${APP_BINARY_SUFFIX}* || $@ == *${APP_NAME_LC}.so* || $@ == *${APP_NAME_LC}-test* ]] + then +- avformat=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libavcodec` +- avcodec=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libavformat` +- avfilter=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libavfilter` +- avutil=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libavutil` +- swscale=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libswscale` +- swresample=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libswresample` ++ avformat=`PKG_CONFIG_SYSROOT_DIR=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR} PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libavcodec` ++ avcodec=`PKG_CONFIG_SYSROOT_DIR=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR} PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libavformat` ++ avfilter=`PKG_CONFIG_SYSROOT_DIR=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR} PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libavfilter` ++ avutil=`PKG_CONFIG_SYSROOT_DIR=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR} PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libavutil` ++ swscale=`PKG_CONFIG_SYSROOT_DIR=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR} PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libswscale` ++ swresample=`PKG_CONFIG_SYSROOT_DIR=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR} PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libswresample` + gnutls=`PKG_CONFIG_PATH=${DEPENDS_PATH}/lib/pkgconfig/ ${PKG_CONFIG_EXECUTABLE} --libs-only-l --static --silence-errors gnutls` + $@ $avcodec $avformat $avcodec $avfilter $swscale $swresample -lpostproc $gnutls + else +diff --git a/tools/depends/target/ffmpeg/CMakeLists.txt b/tools/depends/target/ffmpeg/CMakeLists.txt +index fda6b0cac4..af3afa6b60 100644 +--- a/tools/depends/target/ffmpeg/CMakeLists.txt ++++ b/tools/depends/target/ffmpeg/CMakeLists.txt +@@ -13,7 +13,7 @@ + if(CROSSCOMPILING) + set(pkgconf "PKG_CONFIG_LIBDIR=${DEPENDS_PATH}/lib/pkgconfig") + list(APPEND ffmpeg_conf --pkg-config=${PKG_CONFIG_EXECUTABLE} --pkg-config-flags=--static) +- list(APPEND ffmpeg_conf --enable-cross-compile --cpu=${CPU} --arch=${CPU} --target-os=${OS}) ++ list(APPEND ffmpeg_conf --enable-cross-compile --arch=${CPU} --target-os=${OS}) + list(APPEND ffmpeg_conf --ar=${CMAKE_AR} --strip=${CMAKE_STRIP}) + message(STATUS "CROSS: ${ffmpeg_conf}") + endif() diff --git a/package/kodi/Config.in b/package/kodi/Config.in new file mode 100644 index 00000000..72cdbabf --- /dev/null +++ b/package/kodi/Config.in @@ -0,0 +1,387 @@ +config BR2_PACKAGE_KODI_ARCH_SUPPORTS + bool + default y if BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS + # i386: needs sse (see upstream PR 10351) + depends on !(BR2_i386 && !BR2_X86_CPU_HAS_SSE) + depends on BR2_USE_MMU # libcdio, and others + +comment "kodi needs python w/ .py modules, a uClibc or glibc toolchain w/ C++, threads, wchar, dynamic library, gcc >= 4.8" + depends on BR2_PACKAGE_KODI_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS \ + || !BR2_USE_WCHAR || BR2_STATIC_LIBS \ + || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 \ + || BR2_TOOLCHAIN_USES_MUSL \ + || !BR2_PACKAGE_PYTHON \ + || BR2_PACKAGE_PYTHON_PYC_ONLY + +config BR2_PACKAGE_KODI_PLATFORM_SUPPORTS + bool + +config BR2_PACKAGE_KODI_PLATFORM_SUPPORTS_RBPI + bool + default y + # List of valid CPUs can be found here: + # https://github.com/xbmc/xbmc/blob/Krypton/project/cmake/scripts/rbpi/ArchSetup.cmake#L12 + depends on BR2_arm1176jzf_s || BR2_cortex_a7 || BR2_cortex_a53 + depends on BR2_PACKAGE_RPI_USERLAND + depends on BR2_PACKAGE_HAS_UDEV # libinput + select BR2_PACKAGE_KODI_PLATFORM_SUPPORTS + +config BR2_PACKAGE_KODI_PLATFORM_SUPPORTS_WAYLAND_GL + bool + default y + depends on BR2_PACKAGE_HAS_LIBGL + depends on BR2_PACKAGE_HAS_LIBEGL_WAYLAND # waylandpp + depends on BR2_HOST_GCC_AT_LEAST_4_9 # waylandpp + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # waylandpp + depends on BR2_INSTALL_LIBSTDCPP # waylandpp + depends on BR2_PACKAGE_WAYLAND # waylandpp + select BR2_PACKAGE_KODI_PLATFORM_SUPPORTS + +config BR2_PACKAGE_KODI_PLATFORM_SUPPORTS_WAYLAND_GLES + bool + default y + depends on BR2_PACKAGE_HAS_LIBGLES + depends on BR2_PACKAGE_HAS_LIBEGL_WAYLAND # waylandpp + depends on BR2_HOST_GCC_AT_LEAST_4_9 # waylandpp + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # waylandpp + depends on BR2_PACKAGE_WAYLAND # waylandpp + select BR2_PACKAGE_KODI_PLATFORM_SUPPORTS + +config BR2_PACKAGE_KODI_PLATFORM_SUPPORTS_X11_OPENGL + bool + default y + depends on BR2_PACKAGE_HAS_LIBEGL + depends on BR2_PACKAGE_HAS_LIBGL + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_KODI_PLATFORM_SUPPORTS + +comment "kodi needs an OpenGL EGL backend with OpenGL support" + depends on !BR2_PACKAGE_KODI_PLATFORM_SUPPORTS + +menuconfig BR2_PACKAGE_KODI + bool "kodi" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # libass -> harfbuzz + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_TOOLCHAIN_USES_MUSL + depends on BR2_USE_WCHAR + depends on !BR2_STATIC_LIBS # gnutls, python and others + depends on BR2_PACKAGE_KODI_ARCH_SUPPORTS + depends on BR2_PACKAGE_KODI_PLATFORM_SUPPORTS + depends on BR2_PACKAGE_PYTHON + depends on !BR2_PACKAGE_PYTHON_PYC_ONLY + select BR2_NEEDS_HOST_JAVA + select BR2_PACKAGE_EXPAT + select BR2_PACKAGE_FLATBUFFERS + select BR2_PACKAGE_FMT + select BR2_PACKAGE_FONTCONFIG + select BR2_PACKAGE_FREETYPE + select BR2_PACKAGE_FSTRCMP + select BR2_PACKAGE_GNUTLS + select BR2_PACKAGE_LIBASS + select BR2_PACKAGE_LIBCDIO + select BR2_PACKAGE_LIBCROSSGUID + select BR2_PACKAGE_LIBCURL + select BR2_PACKAGE_LIBFRIBIDI + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + select BR2_PACKAGE_LIBICONV_EXTRA_ENCODINGS if !BR2_ENABLE_LOCALE + select BR2_PACKAGE_LIBPLIST + select BR2_PACKAGE_LZO + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_PCRE + select BR2_PACKAGE_PCRE_UCP + select BR2_PACKAGE_PYTHON_2TO3 + select BR2_PACKAGE_PYTHON_BSDDB + select BR2_PACKAGE_PYTHON_CURSES + select BR2_PACKAGE_PYTHON_PYEXPAT + select BR2_PACKAGE_PYTHON_SQLITE + select BR2_PACKAGE_PYTHON_SSL + select BR2_PACKAGE_PYTHON_UNICODEDATA + select BR2_PACKAGE_PYTHON_ZLIB + select BR2_PACKAGE_RAPIDJSON + select BR2_PACKAGE_SQLITE + select BR2_PACKAGE_TAGLIB + select BR2_PACKAGE_TINYXML + select BR2_PACKAGE_ZLIB + select BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY if BR2_TOOLCHAIN_USES_GLIBC # runtime UTF conversion support + help + Kodi is an award-winning free and open source (GPL) software + media player and entertainment hub for digital media. + + http://kodi.tv + +if BR2_PACKAGE_KODI + +source "package/kodi-platform/Config.in" + +config BR2_PACKAGE_KODI_ALSA_LIB + bool "alsa" + select BR2_PACKAGE_ALSA_LIB + help + Enable alsa support. + +config BR2_PACKAGE_KODI_AVAHI + bool "avahi" + select BR2_PACKAGE_AVAHI + select BR2_PACKAGE_AVAHI_DAEMON + help + Enable Avahi support. + Select this if you want Kodi to support Bonjour protocol. + +config BR2_PACKAGE_KODI_BLUEZ + bool "bluetooth" + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4 # bluez5_utils + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # bluez5_utils + select BR2_PACKAGE_BLUEZ5_UTILS + help + Enable bluetooth support + +config BR2_PACKAGE_KODI_DBUS + bool "dbus" + select BR2_PACKAGE_DBUS + help + Enable D-Bus support + +config BR2_PACKAGE_KODI_EVENTCLIENTS + bool "eventclients" + help + Enable event clients support + + https://github.com/xbmc/xbmc/blob/master/tools/EventClients/README.txt + +config BR2_PACKAGE_KODI_LIBBLURAY + bool "blu-ray" + select BR2_PACKAGE_LIBBLURAY + help + Enable Blu-ray input support. + Select this if you want to play back Blu-ray content. + +config BR2_PACKAGE_KODI_LIBCEC + bool "hdmi cec" + select BR2_PACKAGE_LIBCEC + help + Enable CEC (Consumer Electronics Control) support. + Select this if you want Kodi to support HDMI CEC. + +config BR2_PACKAGE_KODI_LCMS2 + bool "lcms2" + select BR2_PACKAGE_LCMS2 + help + Enable color management support. + +config BR2_PACKAGE_KODI_LIBMICROHTTPD + bool "web server" + select BR2_PACKAGE_LIBMICROHTTPD + help + Enable webserver feature + +config BR2_PACKAGE_KODI_LIBNFS + bool "nfs" + # libnfs -> libtirpc + depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC || BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_LIBNFS + help + Enable NFS server support. + +comment "nfs support needs a toolchain w/ threads support" + depends on !(BR2_TOOLCHAIN_HAS_THREADS || BR2_TOOLCHAIN_HAS_NATIVE_RPC) + +config BR2_PACKAGE_KODI_MYSQL + bool "mysql" + select BR2_PACKAGE_MYSQL + help + Enable MySQL support + +choice + prompt "platform" + default BR2_PACKAGE_KODI_PLATFORM_X11_OPENGL + +config BR2_PACKAGE_KODI_PLATFORM_RBPI + bool "Raspberry Pi" + depends on BR2_PACKAGE_KODI_PLATFORM_SUPPORTS_RBPI + select BR2_PACKAGE_LIBINPUT + select BR2_PACKAGE_LIBXKBCOMMON + +config BR2_PACKAGE_KODI_PLATFORM_WAYLAND_GL + bool "Wayland/OpenGL" + depends on BR2_PACKAGE_KODI_PLATFORM_SUPPORTS_WAYLAND_GL + select BR2_PACKAGE_LIBGLU + select BR2_PACKAGE_LIBXKBCOMMON + select BR2_PACKAGE_WAYLANDPP + +config BR2_PACKAGE_KODI_PLATFORM_WAYLAND_GLES + bool "Wayland/GLES" + depends on BR2_PACKAGE_KODI_PLATFORM_SUPPORTS_WAYLAND_GLES + select BR2_PACKAGE_LIBXKBCOMMON + select BR2_PACKAGE_WAYLANDPP + +config BR2_PACKAGE_KODI_PLATFORM_X11_OPENGL + bool "X11/OpenGL" + depends on BR2_PACKAGE_KODI_PLATFORM_SUPPORTS_X11_OPENGL + select BR2_PACKAGE_LIBDRM + select BR2_PACKAGE_LIBGLU + select BR2_PACKAGE_XLIB_LIBXRANDR + +endchoice + +config BR2_PACKAGE_KODI_PULSEAUDIO + bool "pulseaudio" + depends on BR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC + # Pulseaudio support in kodi needs glib support in Pulseaudio, + # see FindPulseAudio.cmake. Kodi meets all dependencies of + # libglib2, so there is no need to propagate them here. + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_PULSEAUDIO + help + Enable Pulseaudio support. + +config BR2_PACKAGE_KODI_LIBSHAIRPLAY + bool "shairport" + select BR2_PACKAGE_LIBSHAIRPLAY + help + Enable Shairport support. + Select this if you want to stream content from an Apple + device. + +config BR2_PACKAGE_KODI_LIBSMBCLIENT + bool "samba" + depends on BR2_PACKAGE_SAMBA4 + help + Enable Samba support + +config BR2_PACKAGE_KODI_LIBUSB + bool "usb" + # https://github.com/xbmc/xbmc/blob/Jarvis/configure.ac#L1554 + # "if libudev is available, we don't need libusb" + depends on !BR2_PACKAGE_HAS_UDEV + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_LIBUSB_COMPAT + help + Enable libusb support. + +comment "usb support needs a toolchain w/ gcc >= 4.9" + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + +config BR2_PACKAGE_KODI_LIBVA + bool "va" + depends on \ + BR2_PACKAGE_KODI_PLATFORM_WAYLAND_GL || \ + BR2_PACKAGE_KODI_PLATFORM_WAYLAND_GLES || \ + BR2_PACKAGE_KODI_PLATFORM_X11_OPENGL + select BR2_PACKAGE_LIBVA + help + Enable libva support. + +comment "libva support needs platform 'Wayland' or 'X11/OpenGL'" + depends on \ + !BR2_PACKAGE_KODI_PLATFORM_WAYLAND_GL && \ + !BR2_PACKAGE_KODI_PLATFORM_WAYLAND_GLES && \ + !BR2_PACKAGE_KODI_PLATFORM_X11_OPENGL + +config BR2_PACKAGE_KODI_LIBVDPAU + bool "vdpau" + depends on BR2_PACKAGE_KODI_PLATFORM_X11_OPENGL + select BR2_PACKAGE_LIBVDPAU + help + Enable libvdpau support. + +comment "libvdpau support needs platform 'X11/OpenGL'" + depends on !BR2_PACKAGE_KODI_PLATFORM_X11_OPENGL + +config BR2_PACKAGE_KODI_UPNP + bool "upnp" + help + Enable UPnP support + +config BR2_PACKAGE_KODI_OPTICALDRIVE + bool "optical drives" + help + Add support for optical drives, to read e.g. DVDs... + +menu "Audio decoder addons" + source "package/kodi-audiodecoder-modplug/Config.in" + source "package/kodi-audiodecoder-nosefart/Config.in" + source "package/kodi-audiodecoder-sidplay/Config.in" + source "package/kodi-audiodecoder-snesapu/Config.in" + source "package/kodi-audiodecoder-stsound/Config.in" + source "package/kodi-audiodecoder-timidity/Config.in" + source "package/kodi-audiodecoder-vgmstream/Config.in" +endmenu + +menu "Audio encoder addons" + source "package/kodi-audioencoder-flac/Config.in" + source "package/kodi-audioencoder-lame/Config.in" + source "package/kodi-audioencoder-vorbis/Config.in" + source "package/kodi-audioencoder-wav/Config.in" +endmenu + +menu "Peripheral addons" + source "package/kodi-peripheral-joystick/Config.in" + source "package/kodi-peripheral-xarcade/Config.in" +endmenu + +menu "Inputstream addons" + source "package/kodi-inputstream-adaptive/Config.in" + source "package/kodi-inputstream-rtmp/Config.in" +endmenu + +menu "PVR addons" + source "package/kodi-pvr-argustv/Config.in" + source "package/kodi-pvr-dvblink/Config.in" + source "package/kodi-pvr-dvbviewer/Config.in" + source "package/kodi-pvr-filmon/Config.in" + source "package/kodi-pvr-hdhomerun/Config.in" + source "package/kodi-pvr-hts/Config.in" + source "package/kodi-pvr-iptvsimple/Config.in" + source "package/kodi-pvr-mediaportal-tvserver/Config.in" + source "package/kodi-pvr-mythtv/Config.in" + source "package/kodi-pvr-nextpvr/Config.in" + source "package/kodi-pvr-njoy/Config.in" + source "package/kodi-pvr-octonet/Config.in" + source "package/kodi-pvr-pctv/Config.in" + source "package/kodi-pvr-stalker/Config.in" + source "package/kodi-pvr-vbox/Config.in" + source "package/kodi-pvr-vdr-vnsi/Config.in" + source "package/kodi-pvr-vuplus/Config.in" + source "package/kodi-pvr-wmc/Config.in" + source "package/kodi-pvr-zattoo/Config.in" +endmenu + +menu "Screensavers" + source "package/kodi-screensaver-asteroids/Config.in" + source "package/kodi-screensaver-asterwave/Config.in" + source "package/kodi-screensaver-biogenesis/Config.in" + source "package/kodi-screensaver-cpblobs/Config.in" + source "package/kodi-screensaver-crystalmorph/Config.in" + source "package/kodi-screensaver-greynetic/Config.in" + source "package/kodi-screensaver-matrixtrails/Config.in" + source "package/kodi-screensaver-pingpong/Config.in" + source "package/kodi-screensaver-pyro/Config.in" + source "package/kodi-screensaver-rsxs/Config.in" + source "package/kodi-screensaver-stars/Config.in" +endmenu + +menu "Skins" + source "package/kodi-skin-confluence/Config.in" +endmenu + +menu "Virtual file systems" + source "package/kodi-vfs-rar/Config.in" + source "package/kodi-vfs-sftp/Config.in" +endmenu + +menu "Visualisations" + source "package/kodi-visualisation-fishbmc/Config.in" + source "package/kodi-visualisation-goom/Config.in" + source "package/kodi-visualisation-shadertoy/Config.in" + source "package/kodi-visualisation-spectrum/Config.in" + source "package/kodi-visualisation-starburst/Config.in" + source "package/kodi-visualisation-waveform/Config.in" +endmenu + +endif # BR2_PACKAGE_KODI diff --git a/package/kodi/S50kodi b/package/kodi/S50kodi new file mode 100644 index 00000000..0afe7a67 --- /dev/null +++ b/package/kodi/S50kodi @@ -0,0 +1,39 @@ +#!/bin/sh +# +# Starts Kodi +# + +BIN=/usr/bin/br-kodi +KODI=/usr/lib/kodi/kodi.bin +KODI_ARGS="--standalone -fs -n" +PIDFILE=/var/run/kodi.pid + +start() { + printf "Starting Kodi: " + start-stop-daemon -S -q -b -m -p $PIDFILE --exec $BIN -- $KODI $KODI_ARGS + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +stop() { + printf "Stopping Kodi: " + start-stop-daemon -K -q -p $PIDFILE + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac diff --git a/package/kodi/br-kodi b/package/kodi/br-kodi new file mode 100755 index 00000000..83d4d4e5 --- /dev/null +++ b/package/kodi/br-kodi @@ -0,0 +1,36 @@ +#!/bin/sh + +# We're called with the real Kodi executable as +# first argument, followed by any Kodi extra args +KODI="${1}" +shift + +# In case someone asked we terminate, just kill +# the Kodi process +trap_kill() { + LOOP=0 + killall "${KODI##*/}" +} +trap trap_kill INT QUIT TERM + +LOOP=1 +while [ ${LOOP} -eq 1 ]; do + # Hack: BusyBox ash does not catch signals while a non-builtin + # is running, and only catches the signal when the non-builtin + # command ends. So, we just background the Kodi binary, and wait + # for it. But BusyBox' ash's wait builtin does not return the + # exit code even if there was only one job (which is correct + # for POSIX). So we explicitly wait for the Kodi job + "${KODI}" "${@}" & + wait %1 + ret=$? + case "${ret}" in + 0) ;; + 64) poweroff; LOOP=0;; + 66) reboot; LOOP=0;; + *) # Crash + sleep 1 + ;; + esac +done +exit ${ret} diff --git a/package/kodi/kodi.hash b/package/kodi/kodi.hash new file mode 100644 index 00000000..545f8790 --- /dev/null +++ b/package/kodi/kodi.hash @@ -0,0 +1,7 @@ +# Locally computed +sha256 bdf8afa9356b1f815de9984801d3e0d2b46a719e747895b75528f20995c59d2b kodi-18.9-Leia.tar.gz +sha256 e11e7594af35f36ab2711252c3d6bb106908f26605498aef4a9be2d7bc001db2 kodi-ffmpeg-4.0.4-Leia-18.4.tar.gz +sha256 38816f8373e243bc5950449b4f3b18938c4e1c59348e3411e23f31db4072e40d kodi-libdvdcss-1.4.2-Leia-Beta-5.tar.gz +sha256 071e414e61b795f2ff9015b21a85fc009dde967f27780d23092643916538a57a kodi-libdvdnav-6.0.0-Leia-Alpha-3.tar.gz +sha256 a30b6aa0aad0f2c505bc77948af2d5531a80b6e68112addb4c123fca24d5d3bf kodi-libdvdread-6.0.0-Leia-Alpha-3.tar.gz +sha256 9d2396ef3e091d3b82bc84143e070700412984e8589513570f54e0675d1e8851 LICENSE.md diff --git a/package/kodi/kodi.mk b/package/kodi/kodi.mk new file mode 100644 index 00000000..e76118c3 --- /dev/null +++ b/package/kodi/kodi.mk @@ -0,0 +1,396 @@ +################################################################################ +# +# kodi +# +################################################################################ + +# When updating the version, please also update kodi-jsonschemabuilder +# and kodi-texturepacker +KODI_VERSION_MAJOR = 18.9 +KODI_VERSION_NAME = Leia +KODI_VERSION = $(KODI_VERSION_MAJOR)-$(KODI_VERSION_NAME) +KODI_SITE = $(call github,xbmc,xbmc,$(KODI_VERSION)) +KODI_LICENSE = GPL-2.0 +KODI_LICENSE_FILES = LICENSE.md +KODI_CPE_ID_VENDOR = kodi +KODI_CPE_ID_VERSION = $(KODI_VERSION_MAJOR) +# needed for binary addons +KODI_INSTALL_STAGING = YES +# kodi recommends building out-of-source +KODI_SUPPORTS_IN_SOURCE_BUILD = NO +KODI_DEPENDENCIES = \ + expat \ + flatbuffers \ + fmt \ + fontconfig \ + freetype \ + fstrcmp \ + gnutls \ + host-flatbuffers \ + host-gawk \ + host-gettext \ + host-gperf \ + host-kodi-jsonschemabuilder \ + host-kodi-texturepacker \ + host-nasm \ + host-swig \ + host-xmlstarlet \ + libass \ + libcdio \ + libcrossguid \ + libcurl \ + libfribidi \ + libplist \ + lzo \ + ncurses \ + openssl \ + pcre \ + python \ + rapidjson \ + sqlite \ + taglib \ + tinyxml \ + zlib + +# taken from tools/depends/target/*/*-VERSION +KODI_FFMPEG_VERSION = 4.0.4-Leia-18.4 +KODI_LIBDVDCSS_VERSION = 1.4.2-Leia-Beta-5 +KODI_LIBDVDNAV_VERSION = 6.0.0-Leia-Alpha-3 +KODI_LIBDVDREAD_VERSION = 6.0.0-Leia-Alpha-3 +KODI_EXTRA_DOWNLOADS += \ + $(call github,xbmc,FFmpeg,$(KODI_FFMPEG_VERSION))/kodi-ffmpeg-$(KODI_FFMPEG_VERSION).tar.gz \ + $(call github,xbmc,libdvdcss,$(KODI_LIBDVDCSS_VERSION))/kodi-libdvdcss-$(KODI_LIBDVDCSS_VERSION).tar.gz \ + $(call github,xbmc,libdvdnav,$(KODI_LIBDVDNAV_VERSION))/kodi-libdvdnav-$(KODI_LIBDVDNAV_VERSION).tar.gz \ + $(call github,xbmc,libdvdread,$(KODI_LIBDVDREAD_VERSION))/kodi-libdvdread-$(KODI_LIBDVDREAD_VERSION).tar.gz + +define KODI_CPLUFF_AUTOCONF + cd $(KODI_SRCDIR)/lib/cpluff && ./autogen.sh +endef +KODI_PRE_CONFIGURE_HOOKS += KODI_CPLUFF_AUTOCONF +KODI_DEPENDENCIES += host-automake host-autoconf host-libtool + +KODI_CONF_OPTS += \ + -DCMAKE_C_FLAGS="$(TARGET_CFLAGS) $(KODI_C_FLAGS)" \ + -DENABLE_APP_AUTONAME=OFF \ + -DENABLE_CCACHE=OFF \ + -DENABLE_DVDCSS=ON \ + -DENABLE_INTERNAL_CROSSGUID=OFF \ + -DENABLE_INTERNAL_FFMPEG=ON \ + -DENABLE_INTERNAL_FLATBUFFERS=OFF \ + -DFFMPEG_URL=$(KODI_DL_DIR)/kodi-ffmpeg-$(KODI_FFMPEG_VERSION).tar.gz \ + -DKODI_DEPENDSBUILD=OFF \ + -DENABLE_LDGOLD=OFF \ + -DNATIVEPREFIX=$(HOST_DIR) \ + -DDEPENDS_PATH=$(STAGING_DIR)/usr \ + -DWITH_JSONSCHEMABUILDER=$(HOST_DIR)/bin/JsonSchemaBuilder \ + -DWITH_TEXTUREPACKER=$(HOST_DIR)/bin/TexturePacker \ + -DLIBDVDCSS_URL=$(KODI_DL_DIR)/kodi-libdvdcss-$(KODI_LIBDVDCSS_VERSION).tar.gz \ + -DLIBDVDNAV_URL=$(KODI_DL_DIR)/kodi-libdvdnav-$(KODI_LIBDVDNAV_VERSION).tar.gz \ + -DLIBDVDREAD_URL=$(KODI_DL_DIR)/kodi-libdvdread-$(KODI_LIBDVDREAD_VERSION).tar.gz + +ifeq ($(BR2_ENABLE_LOCALE),) +KODI_DEPENDENCIES += libiconv +endif + +ifeq ($(BR2_PACKAGE_KODI_PLATFORM_RBPI),y) +# These CPU-specific options are only used on rbpi: +# https://github.com/xbmc/xbmc/blob/Krypton/project/cmake/scripts/rbpi/ArchSetup.cmake#L13 +ifeq ($(BR2_arm1176jzf_s)$(BR2_cortex_a7)$(BR2_cortex_a53),y) +KODI_CONF_OPTS += -DWITH_CPU="$(GCC_TARGET_CPU)" +endif +else ifeq ($(BR2_arceb)$(BR2_arcle),y) +KODI_CONF_OPTS += -DWITH_ARCH=arc -DWITH_CPU=arc +else ifeq ($(BR2_armeb),y) +KODI_CONF_OPTS += -DWITH_ARCH=arm -DWITH_CPU=arm +else ifeq ($(BR2_mips)$(BR2_mipsel)$(BR2_mips64)$(BR2_mips64el),y) +KODI_CONF_OPTS += \ + -DWITH_ARCH=mips$(if $(BR2_ARCH_IS_64),64) \ + -DWITH_CPU=mips$(if $(BR2_ARCH_IS_64),64) +else ifeq ($(BR2_powerpc)$(BR2_powerpc64le),y) +KODI_CONF_OPTS += \ + -DWITH_ARCH=powerpc$(if $(BR2_ARCH_IS_64),64) \ + -DWITH_CPU=powerpc$(if $(BR2_ARCH_IS_64),64) +else ifeq ($(BR2_powerpc64)$(BR2_sparc64)$(BR2_sh4)$(BR2_xtensa),y) +KODI_CONF_OPTS += -DWITH_ARCH=$(BR2_ARCH) -DWITH_CPU=$(BR2_ARCH) +else +# Kodi auto-detects ARCH, tested: arm, aarch64, i386, x86_64 +# see project/cmake/scripts/linux/ArchSetup.cmake +KODI_CONF_OPTS += -DWITH_CPU=$(BR2_ARCH) +endif + +ifeq ($(BR2_X86_CPU_HAS_SSE),y) +KODI_CONF_OPTS += -D_SSE_OK=ON -D_SSE_TRUE=ON +else +KODI_CONF_OPTS += -D_SSE_OK=OFF -D_SSE_TRUE=OFF +endif + +ifeq ($(BR2_X86_CPU_HAS_SSE2),y) +KODI_CONF_OPTS += -D_SSE2_OK=ON -D_SSE2_TRUE=ON +else +KODI_CONF_OPTS += -D_SSE2_OK=OFF -D_SSE2_TRUE=OFF +endif + +ifeq ($(BR2_X86_CPU_HAS_SSE3),y) +KODI_CONF_OPTS += -D_SSE3_OK=ON -D_SSE3_TRUE=ON +else +KODI_CONF_OPTS += -D_SSE3_OK=OFF -D_SSE3_TRUE=OFF +endif + +ifeq ($(BR2_X86_CPU_HAS_SSSE3),y) +KODI_CONF_OPTS += -D_SSSE3_OK=ON -D_SSSE3_TRUE=ON +else +KODI_CONF_OPTS += -D_SSSE3_OK=OFF -D_SSSE3_TRUE=OFF +endif + +ifeq ($(BR2_X86_CPU_HAS_SSE4),y) +KODI_CONF_OPTS += -D_SSE41_OK=ON -D_SSE41_TRUE=ON +else +KODI_CONF_OPTS += -D_SSE41_OK=OFF -D_SSE41_TRUE=OFF +endif + +ifeq ($(BR2_X86_CPU_HAS_SSE42),y) +KODI_CONF_OPTS += -D_SSE42_OK=ON -D_SSE42_TRUE=ON +else +KODI_CONF_OPTS += -D_SSE42_OK=OFF -D_SSE42_TRUE=OFF +endif + +ifeq ($(BR2_X86_CPU_HAS_AVX),y) +KODI_CONF_OPTS += -D_AVX_OK=ON -D_AVX_TRUE=ON +else +KODI_CONF_OPTS += -D_AVX_OK=OFF -D_AVX_TRUE=OFF +endif + +ifeq ($(BR2_X86_CPU_HAS_AVX2),y) +KODI_CONF_OPTS += -D_AVX2_OK=ON -D_AVX2_TRUE=ON +else +KODI_CONF_OPTS += -D_AVX2_OK=OFF -D_AVX2_TRUE=OFF +endif + +# mips: uses __atomic_load_8 +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +KODI_CONF_OPTS += -DCMAKE_EXE_LINKER_FLAGS=-latomic +endif + +ifeq ($(BR2_PACKAGE_KODI_PLATFORM_RBPI),y) +KODI_CONF_OPTS += -DCORE_PLATFORM_NAME=rbpi +KODI_DEPENDENCIES += libinput libxkbcommon rpi-userland +endif + +ifeq ($(BR2_PACKAGE_KODI_PLATFORM_WAYLAND_GL),y) +KODI_CONF_OPTS += \ + -DCORE_PLATFORM_NAME=wayland \ + -DWAYLAND_RENDER_SYSTEM=gl +KODI_DEPENDENCIES += libegl libgl libglu libxkbcommon waylandpp +endif + +ifeq ($(BR2_PACKAGE_KODI_PLATFORM_WAYLAND_GLES),y) +KODI_CONF_OPTS += \ + -DCORE_PLATFORM_NAME=wayland \ + -DWAYLAND_RENDER_SYSTEM=gles +KODI_C_FLAGS += `$(PKG_CONFIG_HOST_BINARY) --cflags egl` +KODI_CXX_FLAGS += `$(PKG_CONFIG_HOST_BINARY) --cflags egl` +KODI_DEPENDENCIES += libegl libgles libxkbcommon waylandpp +endif + +ifeq ($(BR2_PACKAGE_KODI_PLATFORM_X11_OPENGL),y) +KODI_CONF_OPTS += -DCORE_PLATFORM_NAME=x11 +KODI_DEPENDENCIES += libegl libglu libgl xlib_libX11 xlib_libXext \ + xlib_libXrandr libdrm +endif + +ifeq ($(BR2_PACKAGE_KODI_MYSQL),y) +KODI_CONF_OPTS += -DENABLE_MYSQLCLIENT=ON +KODI_DEPENDENCIES += mysql +else +KODI_CONF_OPTS += -DENABLE_MYSQLCLIENT=OFF +endif + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +KODI_CONF_OPTS += -DENABLE_UDEV=ON +KODI_DEPENDENCIES += udev +else +KODI_CONF_OPTS += -DENABLE_UDEV=OFF +ifeq ($(BR2_PACKAGE_KODI_LIBUSB),y) +KODI_CONF_OPTS += -DENABLE_LIBUSB=ON +KODI_DEPENDENCIES += libusb-compat +else +KODI_CONF_OPTS += -DENABLE_LIBUSB=OFF +endif +endif + +ifeq ($(BR2_PACKAGE_LIBCAP),y) +KODI_CONF_OPTS += -DENABLE_CAP=ON +KODI_DEPENDENCIES += libcap +else +KODI_CONF_OPTS += -DENABLE_CAP=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBXML2)$(BR2_PACKAGE_LIBXSLT),yy) +KODI_CONF_OPTS += -DENABLE_XSLT=ON +KODI_DEPENDENCIES += libxml2 libxslt +else +KODI_CONF_OPTS += -DENABLE_XSLT=OFF +endif + +ifeq ($(BR2_PACKAGE_KODI_BLUEZ),y) +KODI_CONF_OPTS += -DENABLE_BLUETOOTH=ON +KODI_DEPENDENCIES += bluez5_utils +else +KODI_CONF_OPTS += -DENABLE_BLUETOOTH=OFF +endif + +ifeq ($(BR2_PACKAGE_KODI_DBUS),y) +KODI_DEPENDENCIES += dbus +KODI_CONF_OPTS += -DENABLE_DBUS=ON +else +KODI_CONF_OPTS += -DENABLE_DBUS=OFF +endif + +ifeq ($(BR2_PACKAGE_KODI_EVENTCLIENTS),y) +KODI_CONF_OPTS += -DENABLE_EVENTCLIENTS=ON +else +KODI_CONF_OPTS += -DENABLE_EVENTCLIENTS=OFF +endif + +ifeq ($(BR2_PACKAGE_KODI_ALSA_LIB),y) +KODI_CONF_OPTS += -DENABLE_ALSA=ON +KODI_DEPENDENCIES += alsa-lib +else +KODI_CONF_OPTS += -DENABLE_ALSA=OFF +endif + +ifeq ($(BR2_PACKAGE_KODI_LIBMICROHTTPD),y) +KODI_CONF_OPTS += -DENABLE_MICROHTTPD=ON +KODI_DEPENDENCIES += libmicrohttpd +else +KODI_CONF_OPTS += -DENABLE_MICROHTTPD=OFF +endif + +ifeq ($(BR2_PACKAGE_KODI_LIBSMBCLIENT),y) +KODI_DEPENDENCIES += samba4 +KODI_CONF_OPTS += -DENABLE_SMBCLIENT=ON +else +KODI_CONF_OPTS += -DENABLE_SMBCLIENT=OFF +endif + +ifeq ($(BR2_PACKAGE_KODI_LIBNFS),y) +KODI_DEPENDENCIES += libnfs +KODI_CONF_OPTS += -DENABLE_NFS=ON +else +KODI_CONF_OPTS += -DENABLE_NFS=OFF +endif + +ifeq ($(BR2_PACKAGE_KODI_LIBBLURAY),y) +KODI_DEPENDENCIES += libbluray +KODI_CONF_OPTS += -DENABLE_BLURAY=ON +else +KODI_CONF_OPTS += -DENABLE_BLURAY=OFF +endif + +ifeq ($(BR2_PACKAGE_KODI_LIBSHAIRPLAY),y) +KODI_DEPENDENCIES += libshairplay +KODI_CONF_OPTS += -DENABLE_AIRTUNES=ON +else +KODI_CONF_OPTS += -DENABLE_AIRTUNES=OFF +endif + +ifeq ($(BR2_PACKAGE_KODI_AVAHI),y) +KODI_DEPENDENCIES += avahi +KODI_CONF_OPTS += -DENABLE_AVAHI=ON +else +KODI_CONF_OPTS += -DENABLE_AVAHI=OFF +endif + +ifeq ($(BR2_PACKAGE_KODI_LIBCEC),y) +KODI_DEPENDENCIES += libcec +KODI_CONF_OPTS += -DENABLE_CEC=ON +else +KODI_CONF_OPTS += -DENABLE_CEC=OFF +endif + +ifeq ($(BR2_PACKAGE_KODI_LCMS2),y) +KODI_DEPENDENCIES += lcms2 +KODI_CONF_OPTS += -DENABLE_LCMS2=ON +else +KODI_CONF_OPTS += -DENABLE_LCMS2=OFF +endif + +ifeq ($(BR2_PACKAGE_LIRC_TOOLS),y) +KODI_DEPENDENCIES += lirc-tools +endif + +# kodi needs libva & libva-glx +ifeq ($(BR2_PACKAGE_KODI_LIBVA)$(BR2_PACKAGE_MESA3D_DRI_DRIVER),yy) +KODI_DEPENDENCIES += mesa3d libva +KODI_CONF_OPTS += -DENABLE_VAAPI=ON +else +KODI_CONF_OPTS += -DENABLE_VAAPI=OFF +endif + +ifeq ($(BR2_PACKAGE_KODI_LIBVDPAU),y) +KODI_DEPENDENCIES += libvdpau +KODI_CONF_OPTS += -DENABLE_VDPAU=ON +else +KODI_CONF_OPTS += -DENABLE_VDPAU=OFF +endif + +ifeq ($(BR2_PACKAGE_KODI_UPNP),y) +KODI_CONF_OPTS += -DENABLE_UPNP=ON +else +KODI_CONF_OPTS += -DENABLE_UPNP=OFF +endif + +ifeq ($(BR2_PACKAGE_KODI_OPTICALDRIVE),y) +KODI_CONF_OPTS += -DENABLE_OPTICAL=ON +else +KODI_CONF_OPTS += -DENABLE_OPTICAL=OFF +endif + +ifeq ($(BR2_PACKAGE_KODI_PULSEAUDIO),y) +KODI_CONF_OPTS += -DENABLE_PULSEAUDIO=ON +KODI_DEPENDENCIES += pulseaudio +else +KODI_CONF_OPTS += -DENABLE_PULSEAUDIO=OFF +endif + +# Remove versioncheck addon, updating Kodi is done by building a new +# buildroot image. +KODI_ADDON_MANIFEST = $(TARGET_DIR)/usr/share/kodi/system/addon-manifest.xml +define KODI_CLEAN_UNUSED_ADDONS + rm -Rf $(TARGET_DIR)/usr/share/kodi/addons/service.xbmc.versioncheck + $(HOST_DIR)/bin/xml ed -L \ + -d "/addons/addon[text()='service.xbmc.versioncheck']" \ + $(KODI_ADDON_MANIFEST) +endef +KODI_POST_INSTALL_TARGET_HOOKS += KODI_CLEAN_UNUSED_ADDONS + +define KODI_INSTALL_BR_WRAPPER + $(INSTALL) -D -m 0755 package/kodi/br-kodi \ + $(TARGET_DIR)/usr/bin/br-kodi +endef +KODI_POST_INSTALL_TARGET_HOOKS += KODI_INSTALL_BR_WRAPPER + +# When run from a startup script, Kodi has no $HOME where to store its +# configuration, so ends up storing it in /.kodi (yes, at the root of +# the rootfs). This is a problem for read-only filesystems. But we can't +# easily change that, so create /.kodi as a symlink where we want the +# config to eventually be. Add synlinks for the legacy XBMC name as well +define KODI_INSTALL_CONFIG_DIR + $(INSTALL) -d -m 0755 $(TARGET_DIR)/var/kodi + ln -sf /var/kodi $(TARGET_DIR)/.kodi + ln -sf /var/kodi $(TARGET_DIR)/var/xbmc + ln -sf /var/kodi $(TARGET_DIR)/.xbmc +endef +KODI_POST_INSTALL_TARGET_HOOKS += KODI_INSTALL_CONFIG_DIR + +define KODI_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 package/kodi/S50kodi \ + $(TARGET_DIR)/etc/init.d/S50kodi +endef + +define KODI_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/kodi/kodi.service \ + $(TARGET_DIR)/usr/lib/systemd/system/kodi.service +endef + +$(eval $(cmake-package)) diff --git a/package/kodi/kodi.service b/package/kodi/kodi.service new file mode 100644 index 00000000..f30741c1 --- /dev/null +++ b/package/kodi/kodi.service @@ -0,0 +1,12 @@ +[Unit] +Description = Kodi Entertainment Center +After = network.target + +[Service] +Type = simple +ExecStart = /usr/lib/kodi/kodi.bin --standalone -fs -n +Restart = on-failure + +[Install] +WantedBy = multi-user.target + diff --git a/package/kompexsqlite/0001-Makefile-use-autoconf-CXX-for-proper-builds.patch b/package/kompexsqlite/0001-Makefile-use-autoconf-CXX-for-proper-builds.patch new file mode 100644 index 00000000..408c100d --- /dev/null +++ b/package/kompexsqlite/0001-Makefile-use-autoconf-CXX-for-proper-builds.patch @@ -0,0 +1,27 @@ +From 769693d9ddf63b04dd4aad6cad080f3cee3f997e Mon Sep 17 00:00:00 2001 +From: Gustavo Zacarias +Date: Thu, 11 Jun 2015 14:08:38 -0300 +Subject: [PATCH] Makefile: use autoconf CXX for proper builds + +Status: applied upstream. + +Signed-off-by: Gustavo Zacarias +--- + Makefile.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/Makefile.in b/Makefile.in +index 91fb8b2..fe862cd 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -23,6 +23,7 @@ mandir = $(prefix)/share/man/man3 + headerdir = $(prefix)/include/kompex + + CC = @CC@ ++CXX = @CXX@ + CFLAGS = @CFLAGS@ + CPPFLAGS = $(CFLAGS) @CPPFLAGS@ + LDFLAGS = @LDFLAGS@ +-- +2.3.6 + diff --git a/package/kompexsqlite/0002-append-to-cflags-and-cxxflags.patch b/package/kompexsqlite/0002-append-to-cflags-and-cxxflags.patch new file mode 100644 index 00000000..abd0dc0f --- /dev/null +++ b/package/kompexsqlite/0002-append-to-cflags-and-cxxflags.patch @@ -0,0 +1,49 @@ +From 3eb064ffa9b43fb5f245b8abda48a1c152a6f2d7 Mon Sep 17 00:00:00 2001 +From: me +Date: Thu, 20 Nov 2014 14:37:34 -0700 +Subject: [PATCH] Append to CFLAGS and CXXFLAGS as setup by ./configure. This + can allow users to Customize the SQLite build process with compile time + #defines rather than altering the sources. + +Signed-off-by: Max Filippov +--- +Backported from: 3eb064ffa9b43fb5f245b8abda48a1c152a6f2d7 + + Makefile-shared.mk | 4 ++-- + Makefile-static.mk | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/Makefile-shared.mk b/Makefile-shared.mk +index b2a4920..d15ce3c 100644 +--- a/Makefile-shared.mk ++++ b/Makefile-shared.mk +@@ -12,10 +12,10 @@ OBJS= \ + ${objsdir}/sqlite3.o + + # C Compiler Flags +-CFLAGS= -fPIC -MMD -MP ++CFLAGS+= -fPIC -MMD -MP + + # CC Compiler Flags +-CPPFLAGS= -DKOMPEX_SQLITEWRAPPER_EXPORT -DKOMPEX_SQLITEWRAPPER_DYN -fPIC -MMD -MP -I${includedir} ++CPPFLAGS+= -DKOMPEX_SQLITEWRAPPER_EXPORT -DKOMPEX_SQLITEWRAPPER_DYN -fPIC -MMD -MP -I${includedir} + + # Link Libraries and Options + LDLIBSOPTIONS= -shared -fPIC +diff --git a/Makefile-static.mk b/Makefile-static.mk +index 429a4ff..0678681 100644 +--- a/Makefile-static.mk ++++ b/Makefile-static.mk +@@ -12,10 +12,10 @@ OBJS= \ + ${objsdir}/sqlite3.o + + # C Compiler Flags +-CFLAGS= -MMD -MP ++CFLAGS+= -MMD -MP + + # CC Compiler Flags +-CPPFLAGS= -I${includedir} -MMD -MP ++CPPFLAGS+= -I${includedir} -MMD -MP + + # Link Libraries and Options + LDLIBSOPTIONS= diff --git a/package/kompexsqlite/Config.in b/package/kompexsqlite/Config.in new file mode 100644 index 00000000..5b718425 --- /dev/null +++ b/package/kompexsqlite/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_KOMPEXSQLITE + bool "kompexsqlite" + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS + help + The Kompex SQLite Wrapper is an open source C++ wrapper + library for SQLite. + + http://sqlitewrapper.kompex-online.com/index.php + +comment "kompexsqlite needs a toolchain w/ C++, wchar, threads, dynamic library" + depends on !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS || \ + !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/kompexsqlite/kompexsqlite.hash b/package/kompexsqlite/kompexsqlite.hash new file mode 100644 index 00000000..8869e9b7 --- /dev/null +++ b/package/kompexsqlite/kompexsqlite.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 73bec94fe5dd3a24bd8668b3a131a84dbe39a992579eebab1236aa0e73b2c9cc kompexsqlite-1.10.12-1.tar.gz +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 LICENSE.txt diff --git a/package/kompexsqlite/kompexsqlite.mk b/package/kompexsqlite/kompexsqlite.mk new file mode 100644 index 00000000..a40088fa --- /dev/null +++ b/package/kompexsqlite/kompexsqlite.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# kompexsqlite +# +################################################################################ + +KOMPEXSQLITE_VERSION = 1.10.12-1 +KOMPEXSQLITE_SITE = \ + $(call github,Aethelflaed,kompex-sqlite-wrapper,v$(KOMPEXSQLITE_VERSION)) +KOMPEXSQLITE_INSTALL_STAGING = YES +KOMPEXSQLITE_LICENSE = LGPL-3.0+ (wrapper), Public Domain (bundled sqlite) +KOMPEXSQLITE_LICENSE_FILES = LICENSE.txt + +$(eval $(autotools-package)) diff --git a/package/ktap/Config.in b/package/ktap/Config.in new file mode 100644 index 00000000..38293f6d --- /dev/null +++ b/package/ktap/Config.in @@ -0,0 +1,31 @@ +config BR2_PACKAGE_KTAP + bool "ktap" + depends on BR2_LINUX_KERNEL + depends on BR2_TOOLCHAIN_HAS_THREADS + help + ktap is a script-based dynamic tracing tool for Linux + + It uses a scripting language and lets users trace the Linux + kernel dynamically. ktap is designed to give operational + insights with interoperability that allows users to tune, + troubleshoot and extend kernel and application. + It's similar to Linux Systemtap and Solaris Dtrace. + + ktap doesn't support kernels older than 3.1. + + To be able to resolve symbols in DSO and for sdt, you need to + enable elfutils. + + Your kernel must have CONFIG_EVENT_TRACING, + CONFIG_PERF_EVENTS, and CONFIG_DEBUG_FS enabled to compile. + + Buildroot automatically enables these in the kernel + configuration. + + http://www.ktap.org + +comment "ktap needs a Linux kernel to be built" + depends on !BR2_LINUX_KERNEL + +comment "ktap needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/ktap/ktap.hash b/package/ktap/ktap.hash new file mode 100644 index 00000000..1eff7125 --- /dev/null +++ b/package/ktap/ktap.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 44a0808d57175cf9d15466f720e1e10d5ed1abc3497aedf9ddd6469545552345 ktap-23bc7a4a94bd9e4e1b8b7c06632e61c041d57b5f.tar.gz +sha256 e6d6a009505e345fe949e1310334fcb0747f28dae2856759de102ab66b722cb4 LICENSE-GPL diff --git a/package/ktap/ktap.mk b/package/ktap/ktap.mk new file mode 100644 index 00000000..09daba5c --- /dev/null +++ b/package/ktap/ktap.mk @@ -0,0 +1,36 @@ +################################################################################ +# +# ktap +# +################################################################################ + +KTAP_VERSION = 23bc7a4a94bd9e4e1b8b7c06632e61c041d57b5f +KTAP_SITE = $(call github,ktap,ktap,$(KTAP_VERSION)) +KTAP_LICENSE = GPL-2.0 +KTAP_LICENSE_FILES = LICENSE-GPL + +ifeq ($(BR2_PACKAGE_ELFUTILS),y) +KTAP_DEPENDENCIES += elfutils +else +KTAP_FLAGS += NO_LIBELF=1 +endif + +define KTAP_BUILD_CMDS + $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) $(KTAP_FLAGS) ktap +endef + +define KTAP_INSTALL_TARGET_CMDS + $(INSTALL) -D -m755 $(@D)/ktap $(TARGET_DIR)/usr/bin/ktap +endef + +KTAP_MODULE_MAKE_OPTS = KVERSION=$(LINUX_VERSION_PROBED) + +define KTAP_LINUX_CONFIG_FIXUPS + $(call KCONFIG_ENABLE_OPT,CONFIG_DEBUG_FS) + $(call KCONFIG_ENABLE_OPT,CONFIG_ENABLE_DEFAULT_TRACERS) + $(call KCONFIG_ENABLE_OPT,CONFIG_PERF_EVENTS) + $(call KCONFIG_ENABLE_OPT,CONFIG_FUNCTION_TRACER) +endef + +$(eval $(kernel-module)) +$(eval $(generic-package)) diff --git a/package/kvazaar/Config.in b/package/kvazaar/Config.in new file mode 100644 index 00000000..558d161e --- /dev/null +++ b/package/kvazaar/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_KVAZAAR + bool "kvazaar" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + # use deprecated altivec vec_lvsl() + depends on !BR2_powerpc && !BR2_powerpc64 && !BR2_powerpc64le + help + An open-source HEVC encoder licensed under LGPLv2.1 + + https://github.com/ultravideo/kvazaar + +comment "kvazaar needs a toolchain w/ C++, threads" + depends on !BR2_powerpc && !BR2_powerpc64 && !BR2_powerpc64le + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/kvazaar/kvazaar.hash b/package/kvazaar/kvazaar.hash new file mode 100644 index 00000000..fe3255a6 --- /dev/null +++ b/package/kvazaar/kvazaar.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 480ecfd9b4d2b7d21b355e4a35fcf47b4db7a3b0315b6219d93733db42392bd9 kvazaar-1.2.0.tar.gz +sha256 531712277c3543b9ee86c4c4e0e424f531b893a44cc021c74a24b038d8de4d2a COPYING diff --git a/package/kvazaar/kvazaar.mk b/package/kvazaar/kvazaar.mk new file mode 100644 index 00000000..29433d6e --- /dev/null +++ b/package/kvazaar/kvazaar.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# kvazaar +# +################################################################################ + +KVAZAAR_VERSION = 1.2.0 +KVAZAAR_SITE = $(call github,ultravideo,kvazaar,v$(KVAZAAR_VERSION)) +KVAZAAR_LICENSE = LGPL-2.1+ +KVAZAAR_LICENSE_FILES = COPYING +KVAZAAR_AUTORECONF = YES +KVAZAAR_INSTALL_STAGING = YES +KVAZAAR_DEPENDENCIES = host-pkgconf +KVAZAAR_CONF_OPTS = --without-cryptopp + +$(eval $(autotools-package)) diff --git a/package/kvm-unit-tests/0001-Makefile-remove-Werror-to-avoid-build-failures.patch b/package/kvm-unit-tests/0001-Makefile-remove-Werror-to-avoid-build-failures.patch new file mode 100644 index 00000000..cbfa3a87 --- /dev/null +++ b/package/kvm-unit-tests/0001-Makefile-remove-Werror-to-avoid-build-failures.patch @@ -0,0 +1,27 @@ +From 08e14a662b9e75daec29722e49150869952ba1b6 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Mon, 20 Nov 2017 22:09:39 +0100 +Subject: [PATCH] Makefile: remove -Werror to avoid build failures + +Signed-off-by: Thomas Petazzoni +[Matthew: Refactoring of Thomas Petazzoni's original.] +Signed-off-by: Matthew Weber +--- + Makefile | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/Makefile b/Makefile +index 7231334..d9ad42b 100644 +--- a/Makefile ++++ b/Makefile +@@ -53,7 +53,6 @@ cc-option = $(shell if $(CC) $(1) -S -o /dev/null -xc /dev/null \ + COMMON_CFLAGS += -g $(autodepend-flags) + COMMON_CFLAGS += -Wall -Wwrite-strings -Wclobbered -Wempty-body -Wuninitialized + COMMON_CFLAGS += -Wignored-qualifiers -Wunused-but-set-parameter +-COMMON_CFLAGS += -Werror + frame-pointer-flag=-f$(if $(KEEP_FRAME_POINTER),no-,)omit-frame-pointer + fomit_frame_pointer := $(call cc-option, $(frame-pointer-flag), "") + fnostack_protector := $(call cc-option, -fno-stack-protector, "") +-- +2.14.2 + diff --git a/package/kvm-unit-tests/0002-kvm-unit-tests-test-for-rdseed-rdrand.patch b/package/kvm-unit-tests/0002-kvm-unit-tests-test-for-rdseed-rdrand.patch new file mode 100644 index 00000000..47f15c6c --- /dev/null +++ b/package/kvm-unit-tests/0002-kvm-unit-tests-test-for-rdseed-rdrand.patch @@ -0,0 +1,110 @@ +From 8d9a62a5fa89001266352a929c5d40b28c0dda85 Mon Sep 17 00:00:00 2001 +From: Matt Weber +Date: Fri, 12 Jan 2018 19:07:27 -0600 +Subject: [PATCH v2] kvm-unit-tests: test for rdseed/rdrand + +The build fails when the host binutils isn't at least 2.23 +(2.22.x introduced RDSEED). + +Fixes: +http://autobuild.buildroot.net/results/c39/c3987a3cbd2960b0ff50f872636bdfd8d1a9c820/ + +Upstream: +https://marc.info/?l=kvm&m=151580743523259&w=2 + +Signed-off-by: Matthew Weber +--- + Makefile | 2 +- + configure | 18 ++++++++++++++++++ + x86/vmx_tests.c | 6 ++++++ + 3 files changed, 25 insertions(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index d9ad42b..799e9b5 100644 +--- a/Makefile ++++ b/Makefile +@@ -50,7 +50,7 @@ include $(SRCDIR)/$(TEST_DIR)/Makefile + cc-option = $(shell if $(CC) $(1) -S -o /dev/null -xc /dev/null \ + > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;) + +-COMMON_CFLAGS += -g $(autodepend-flags) ++COMMON_CFLAGS += -g $(autodepend-flags) $(EXTRA_CFLAGS) + COMMON_CFLAGS += -Wall -Wwrite-strings -Wclobbered -Wempty-body -Wuninitialized + COMMON_CFLAGS += -Wignored-qualifiers -Wunused-but-set-parameter + frame-pointer-flag=-f$(if $(KEEP_FRAME_POINTER),no-,)omit-frame-pointer +diff --git a/configure b/configure +index dd9d361..21c0219 100755 +--- a/configure ++++ b/configure +@@ -171,6 +171,23 @@ mkdir -p lib + ln -sf "$asm" lib/asm + + ++cat > rd_test.c < ++int main() { ++ uint16_t seed=0; ++ unsigned char ok; ++ asm volatile ("rdseed %0; setc %1" ++ : "=r" (seed), "=qm" (ok)); ++ return ok; ++} ++EOF ++if $cross_prefix$cc -o /dev/null rd_test.c &> /dev/null; then ++ echo "Checking for rdseed/rdrand... Yes." ++else ++ echo "Checking for rdseed/rdrand... No." ++ extra_cflags="-DNO_RDSEEDRAND" ++fi ++ + # create the config + cat < config.mak + SRCDIR=$srcdir +@@ -181,6 +198,7 @@ ARCH_NAME=$arch_name + PROCESSOR=$processor + CC=$cross_prefix$cc + CXX=$cross_prefix$cxx ++EXTRA_CFLAGS=$extra_cflags + LD=$cross_prefix$ld + OBJCOPY=$cross_prefix$objcopy + OBJDUMP=$cross_prefix$objdump +diff --git a/x86/vmx_tests.c b/x86/vmx_tests.c +index 4a3e94b..2cbe3eb 100644 +--- a/x86/vmx_tests.c ++++ b/x86/vmx_tests.c +@@ -770,8 +770,10 @@ asm( + "insn_sldt: sldt %ax;ret\n\t" + "insn_lldt: xor %eax, %eax; lldt %ax;ret\n\t" + "insn_str: str %ax;ret\n\t" ++#ifndef NO_RDSEEDRAND + "insn_rdrand: rdrand %rax;ret\n\t" + "insn_rdseed: rdseed %rax;ret\n\t" ++#endif + ); + extern void insn_hlt(); + extern void insn_invlpg(); +@@ -796,8 +798,10 @@ extern void insn_lldt(); + extern void insn_str(); + extern void insn_cpuid(); + extern void insn_invd(); ++#ifndef NO_RDSEEDRAND + extern void insn_rdrand(); + extern void insn_rdseed(); ++#endif + + u32 cur_insn; + u64 cr3; +@@ -853,8 +857,10 @@ static struct insn_table insn_table[] = { + {"DESC_TABLE (LLDT)", CPU_DESC_TABLE, insn_lldt, INSN_CPU1, 47, 0, 0, 0}, + {"DESC_TABLE (STR)", CPU_DESC_TABLE, insn_str, INSN_CPU1, 47, 0, 0, 0}, + /* LTR causes a #GP if done with a busy selector, so it is not tested. */ ++#ifndef NO_RDSEEDRAND + {"RDRAND", CPU_RDRAND, insn_rdrand, INSN_CPU1, VMX_RDRAND, 0, 0, 0}, + {"RDSEED", CPU_RDSEED, insn_rdseed, INSN_CPU1, VMX_RDSEED, 0, 0, 0}, ++#endif + // Instructions always trap + {"CPUID", 0, insn_cpuid, INSN_ALWAYS_TRAP, 10, 0, 0, 0}, + {"INVD", 0, insn_invd, INSN_ALWAYS_TRAP, 13, 0, 0, 0}, +-- +1.9.1 + diff --git a/package/kvm-unit-tests/0003-Makefile-fix-stack-protector-tests.patch b/package/kvm-unit-tests/0003-Makefile-fix-stack-protector-tests.patch new file mode 100644 index 00000000..be819f27 --- /dev/null +++ b/package/kvm-unit-tests/0003-Makefile-fix-stack-protector-tests.patch @@ -0,0 +1,36 @@ +From 9bf9155804652c0b3a94af9723c79b6de430187b Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 24 Feb 2020 00:04:06 +0100 +Subject: [PATCH] Makefile: fix stack-protector tests + +Rename fnostack_protector into fno_stack_protector and +fnostack_protector_all into fnostack_protector_all otherwise build will +fail if -fstack-protector is passed by the toolchain + +Fixes: + - http://autobuild.buildroot.org/results/ad689b08173548af21dd1fb0e827fd561de6dfef + +Signed-off-by: Fabrice Fontaine +[Upstream status: sent to kvm@vger.kernel.org] +--- + Makefile | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Makefile b/Makefile +index 767b6c6..754ed65 100644 +--- a/Makefile ++++ b/Makefile +@@ -55,8 +55,8 @@ COMMON_CFLAGS += -Wignored-qualifiers -Werror + + frame-pointer-flag=-f$(if $(KEEP_FRAME_POINTER),no-,)omit-frame-pointer + fomit_frame_pointer := $(call cc-option, $(frame-pointer-flag), "") +-fnostack_protector := $(call cc-option, -fno-stack-protector, "") +-fnostack_protector_all := $(call cc-option, -fno-stack-protector-all, "") ++fno_stack_protector := $(call cc-option, -fno-stack-protector, "") ++fno_stack_protector_all := $(call cc-option, -fno-stack-protector-all, "") + wno_frame_address := $(call cc-option, -Wno-frame-address, "") + fno_pic := $(call cc-option, -fno-pic, "") + no_pie := $(call cc-option, -no-pie, "") +-- +2.25.0 + diff --git a/package/kvm-unit-tests/Config.in b/package/kvm-unit-tests/Config.in new file mode 100644 index 00000000..e470dd61 --- /dev/null +++ b/package/kvm-unit-tests/Config.in @@ -0,0 +1,39 @@ +config BR2_PACKAGE_KVM_UNIT_TESTS_ARCH_SUPPORTS + bool + # On ARM, it uses virtualization extensions + default y if BR2_cortex_a7 || BR2_cortex_a12 || \ + BR2_cortex_a15 || BR2_cortex_a15_a7 || \ + BR2_cortex_a17 || BR2_cortex_a17_a7 + default y if BR2_i386 || BR2_x86_64 + default y if BR2_powerpc64 || BR2_powerpc64le + +config BR2_PACKAGE_KVM_UNIT_TESTS + bool "kvm-unit-tests" + depends on BR2_PACKAGE_KVM_UNIT_TESTS_ARCH_SUPPORTS + # on i386 and x86-64, __builtin_reachable is used, so we need + # gcc 4.5 at least. on i386, we use the target gcc, while on + # x86-64 we use the host gcc (see .mk file for details) + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_5 || !BR2_i386 + depends on BR2_HOSTARCH = "x86_64" || !BR2_x86_64 + select BR2_HOSTARCH_NEEDS_IA32_COMPILER if BR2_x86_64=y + help + kvm-unit-tests is a project as old as KVM. As its name + suggests, it's purpose is to provide unit tests for KVM. The + unit tests are tiny guest operating systems that generally + execute only tens of lines of C and assembler test code in + order to obtain its PASS/FAIL result. Unit tests provide KVM + and virt hardware functional testing by targeting the + features through minimal implementations of their use per + the hardware specification. The simplicity of unit tests + make them easy to verify they are correct, easy to maintain, + and easy to use in timing measurements. Unit tests are also + often used for quick and dirty bug reproducers. The + reproducers may then be kept as regression tests. It's + strongly encouraged that patches implementing new KVM + features are submitted with accompanying unit tests. + + http://www.linux-kvm.org/page/KVM-unit-tests + +comment "kvm-unit-tests needs a toolchain w/ gcc >= 4.5" + depends on BR2_i386 + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_5 diff --git a/package/kvm-unit-tests/kvm-unit-tests.hash b/package/kvm-unit-tests/kvm-unit-tests.hash new file mode 100644 index 00000000..ad500d04 --- /dev/null +++ b/package/kvm-unit-tests/kvm-unit-tests.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 e476443cd76c8f540734e075b419638b2f200ae002986d6fc14076d410f3751e kvm-unit-tests-kvm-unit-tests-20171020-br1.tar.gz +sha256 d9bbb60891710d248f01c8bdac50ef7ad39188de512610437872e83112b38a1b COPYRIGHT diff --git a/package/kvm-unit-tests/kvm-unit-tests.mk b/package/kvm-unit-tests/kvm-unit-tests.mk new file mode 100644 index 00000000..a972602f --- /dev/null +++ b/package/kvm-unit-tests/kvm-unit-tests.mk @@ -0,0 +1,58 @@ +################################################################################ +# +# kvm-unit-tests +# +################################################################################ + +KVM_UNIT_TESTS_VERSION = kvm-unit-tests-20171020 +KVM_UNIT_TESTS_SITE = https://git.kernel.org/pub/scm/virt/kvm/kvm-unit-tests.git +KVM_UNIT_TESTS_SITE_METHOD = git +KVM_UNIT_TESTS_LICENSE = LGPL-2.0 +KVM_UNIT_TESTS_LICENSE_FILES = COPYRIGHT + +ifeq ($(BR2_arm),y) +KVM_UNIT_TESTS_ARCH = arm +else ifeq ($(BR2_i386),y) +KVM_UNIT_TESTS_ARCH = i386 +else ifeq ($(BR2_powerpc64)$(BR2_powerpc64le),y) +KVM_UNIT_TESTS_ARCH = ppc64 +else ifeq ($(BR2_x86_64),y) +KVM_UNIT_TESTS_ARCH = x86_64 +endif + +ifeq ($(BR2_ENDIAN),"LITTLE") +KVM_UNIT_TESTS_ENDIAN = little +else +KVM_UNIT_TESTS_ENDIAN = big +endif + +KVM_UNIT_TESTS_CONF_OPTS =\ + --arch="$(KVM_UNIT_TESTS_ARCH)" \ + --processor="$(GCC_TARGET_CPU)" \ + --endian="$(KVM_UNIT_TESTS_ENDIAN)" + +# For all architectures but x86-64, we use the target +# compiler. However, for x86-64, we use the host compiler, as +# kvm-unit-tests builds 32 bit code, which Buildroot toolchains for +# x86-64 cannot do. +ifeq ($(BR2_x86_64),) +KVM_UNIT_TESTS_CONF_OPTS += --cross-prefix="$(TARGET_CROSS)" +endif + +define KVM_UNIT_TESTS_CONFIGURE_CMDS + cd $(@D) && ./configure $(KVM_UNIT_TESTS_CONF_OPTS) +endef + +define KVM_UNIT_TESTS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(KVM_UNIT_TESTS_MAKE_OPTS) -C $(@D) \ + standalone +endef + +define KVM_UNIT_TESTS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(KVM_UNIT_TESTS_MAKE_OPTS) -C $(@D) \ + DESTDIR=$(TARGET_DIR)/usr/share/kvm-unit-tests/ \ + install +endef + +# Does use configure script but not an autotools one +$(eval $(generic-package)) diff --git a/package/kvmtool/Config.in b/package/kvmtool/Config.in new file mode 100644 index 00000000..bf19a253 --- /dev/null +++ b/package/kvmtool/Config.in @@ -0,0 +1,31 @@ +config BR2_PACKAGE_KVMTOOL + bool "kvmtool" + depends on BR2_USE_MMU # guest simple init fork() + # No MADV_HUGEPAGE define in uClibc(-ng) + depends on (BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_MUSL) + # Only mips big-endian seems to be supported (build breaks) + # Should work on powerpc64 but the build breaks with missing types + depends on BR2_aarch64 || BR2_arm || BR2_armeb || BR2_i386 || \ + BR2_mips || BR2_x86_64 + # libfdt is only required for DT architectures... + # ...but it's not able to build for static targets + depends on !(BR2_STATIC_LIBS && (BR2_aarch64 || BR2_arm || BR2_armeb)) + select BR2_PACKAGE_DTC if BR2_aarch64 || BR2_arm || BR2_armeb + help + kvmtool is a lightweight tool for hosting KVM guests. + As a pure virtualization tool it only supports guests using + the same architecture, though it supports running 32-bit + guests on those 64-bit architectures that allow this. + + https://git.kernel.org/cgit/linux/kernel/git/will/kvmtool.git/tree/README + +comment "kvmtool needs a glibc or musl toolchain" + depends on BR2_USE_MMU + depends on BR2_i386 || BR2_mips || BR2_x86_64 + depends on !(BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_MUSL) + +comment "kvmtool needs a glibc or musl toolchain w/ dynamic library" + depends on BR2_USE_MMU + depends on BR2_aarch64 || BR2_arm || BR2_armeb + depends on !(BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_MUSL) || \ + BR2_STATIC_LIBS diff --git a/package/kvmtool/kvmtool.hash b/package/kvmtool/kvmtool.hash new file mode 100644 index 00000000..8747ae1d --- /dev/null +++ b/package/kvmtool/kvmtool.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 e2eb2cd8b31d24484e3095923cfe8c36d4b92741b76965cafaed6be3835369c6 kvmtool-f77d646ba01d04be5aad9449ac00719c043fe36e-br1.tar.gz +sha256 0d5bf346df9e635a29dcdddf832dc5b002ca6cdc1c5c9c6c567d2a61bb0c5c15 COPYING diff --git a/package/kvmtool/kvmtool.mk b/package/kvmtool/kvmtool.mk new file mode 100644 index 00000000..2984817c --- /dev/null +++ b/package/kvmtool/kvmtool.mk @@ -0,0 +1,36 @@ +################################################################################ +# +# kvmtool +# +################################################################################ + +KVMTOOL_VERSION = f77d646ba01d04be5aad9449ac00719c043fe36e +KVMTOOL_SITE = https://git.kernel.org/pub/scm/linux/kernel/git/will/kvmtool.git +KVMTOOL_SITE_METHOD = git +KVMTOOL_DEPENDENCIES = \ + $(if $(BR2_PACKAGE_BINUTILS),binutils) \ + $(if $(BR2_PACKAGE_DTC),dtc) \ + $(if $(BR2_PACKAGE_LIBAIO),libaio) \ + $(if $(BR2_PACKAGE_LIBGTK3),libgtk3) \ + $(if $(BR2_PACKAGE_LIBVNCSERVER),libvncserver) \ + $(if $(BR2_PACKAGE_SDL),sdl) \ + $(if $(BR2_PACKAGE_ZLIB),zlib) +KVMTOOL_LICENSE = GPL-2.0 +KVMTOOL_LICENSE_FILES = COPYING + +# Disable -Werror, otherwise musl is not happy +KVMTOOL_MAKE_OPTS = \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + LDFLAGS="$(TARGET_LDFLAGS) $(KVMTOOL_EXTRA_LDFLAGS)" \ + WERROR=0 + +define KVMTOOL_BUILD_CMDS + $(TARGET_MAKE_ENV) ARCH=$(KERNEL_ARCH) $(MAKE) -C $(@D) $(KVMTOOL_MAKE_OPTS) +endef + +define KVMTOOL_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) ARCH=$(KERNEL_ARCH) $(MAKE) -C $(@D) \ + $(KVMTOOL_MAKE_OPTS) install DESTDIR=$(TARGET_DIR) prefix=/usr +endef + +$(eval $(generic-package)) diff --git a/package/kyua/Config.in b/package/kyua/Config.in new file mode 100644 index 00000000..4fc5e098 --- /dev/null +++ b/package/kyua/Config.in @@ -0,0 +1,23 @@ +config BR2_PACKAGE_KYUA + bool "kyua" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_HAS_LUAINTERPRETER # lutok + depends on !BR2_PACKAGE_LUAJIT # lutok + depends on !BR2_STATIC_LIBS # lutok + depends on BR2_USE_MMU # atf + select BR2_PACKAGE_ATF + select BR2_PACKAGE_LUTOK + select BR2_PACKAGE_SQLITE + help + Kyua is a testing framework for infrastructure software, + originally designed to equip BSD-based operating systems + with a test suite. This means that Kyua is lightweight + and simple, and that Kyua integrates well with various build + systems and continuous integration frameworks. + + https://github.com/jmmv/kyua + +comment "kyua needs a toolchain w/ C++, dynamic library and full Lua" + depends on !BR2_INSTALL_LIBSTDCPP || BR2_PACKAGE_LUAJIT || BR2_STATIC_LIBS + depends on BR2_PACKAGE_HAS_LUAINTERPRETER + depends on BR2_USE_MMU diff --git a/package/kyua/kyua.hash b/package/kyua/kyua.hash new file mode 100644 index 00000000..66681692 --- /dev/null +++ b/package/kyua/kyua.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 db6e5d341d5cf7e49e50aa361243e19087a00ba33742b0855d2685c0b8e721d6 kyua-0.13.tar.gz +sha256 a6a8f43f6d2ed9b801978cc012cc816c4a9421a6dcea0579d3a40eab4b349674 LICENSE diff --git a/package/kyua/kyua.mk b/package/kyua/kyua.mk new file mode 100644 index 00000000..5caa2039 --- /dev/null +++ b/package/kyua/kyua.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# kyua +# +################################################################################ + +KYUA_VERSION = 0.13 +KYUA_SITE = https://github.com/jmmv/kyua/releases/download/kyua-$(KYUA_VERSION) +KYUA_DEPENDENCIES = host-pkgconf atf lutok sqlite +KYUA_CONF_OPTS = --without-doxygen --without-atf +KYUA_LICENSE = BSD-3-Clause +KYUA_LICENSE_FILES = LICENSE +KYUA_CONF_ENV = \ + kyua_cv_attribute_noreturn=yes \ + kyua_cv_getcwd_dyn=yes \ + kyua_cv_lchmod_works=no \ + kyua_cv_getopt_gnu=yes \ + kyua_cv_getopt_optind_reset_value=0 \ + kyua_cv_signals_lastno=15 + +define KYUA_INSTALL_CONFIG + $(INSTALL) -D -m 644 $(@D)/examples/kyua.conf $(TARGET_DIR)/etc/kyua/kyua.conf +endef + +KYUA_POST_INSTALL_HOOKS += KYUA_INSTALL_CONFIG + +$(eval $(autotools-package)) diff --git a/package/lame/Config.in b/package/lame/Config.in new file mode 100644 index 00000000..2b144a05 --- /dev/null +++ b/package/lame/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LAME + bool "lame" + help + LAME is a high quality MPEG Audio Layer III (MP3) encoder. + + http://lame.sourceforge.net/ diff --git a/package/lame/lame.hash b/package/lame/lame.hash new file mode 100644 index 00000000..58dc6f78 --- /dev/null +++ b/package/lame/lame.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 ddfe36cab873794038ae2c1210557ad34857a4b6bdc515785d1da9e175b1da1e lame-3.100.tar.gz +sha256 bfe4a52dc4645385f356a8e83cc54216a293e3b6f1cb4f79f5fc0277abf937fd COPYING diff --git a/package/lame/lame.mk b/package/lame/lame.mk new file mode 100644 index 00000000..3a57cffe --- /dev/null +++ b/package/lame/lame.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# lame +# +################################################################################ + +LAME_VERSION = 3.100 +LAME_SITE = http://downloads.sourceforge.net/project/lame/lame/$(LAME_VERSION) +LAME_DEPENDENCIES = host-pkgconf +LAME_INSTALL_STAGING = YES +LAME_CONF_ENV = GTK_CONFIG=/bin/false +LAME_CONF_OPTS = --enable-dynamic-frontends +LAME_LICENSE = LGPL-2.0+ +LAME_LICENSE_FILES = COPYING +LAME_CPE_ID_VENDOR = lame_project + +ifeq ($(BR2_PACKAGE_LIBSNDFILE),y) +LAME_DEPENDENCIES += libsndfile +LAME_CONF_OPTS += --with-fileio=sndfile +endif + +ifeq ($(BR2_PACKAGE_NCURSES),y) +LAME_DEPENDENCIES += ncurses +endif + +ifeq ($(BR2_ENDIAN),"BIG") +define LAME_BIGENDIAN_ARCH + echo "#define WORDS_BIGENDIAN 1" >>$(@D)/config.h +endef +endif + +LAME_POST_CONFIGURE_HOOKS += LAME_BIGENDIAN_ARCH + +$(eval $(autotools-package)) diff --git a/package/lapack/Config.in b/package/lapack/Config.in new file mode 100644 index 00000000..6cd0810c --- /dev/null +++ b/package/lapack/Config.in @@ -0,0 +1,22 @@ +comment "lapack/blas needs a toolchain w/ fortran" + depends on !(BR2_powerpc && BR2_TOOLCHAIN_USES_UCLIBC) + depends on !BR2_TOOLCHAIN_HAS_FORTRAN + +config BR2_PACKAGE_LAPACK + bool "lapack/blas" + depends on BR2_TOOLCHAIN_HAS_FORTRAN + depends on !BR2_PACKAGE_CLAPACK + # _fpu_control is used on PowerPC, but not available with uClibc + depends on !(BR2_powerpc && BR2_TOOLCHAIN_USES_UCLIBC) + help + LAPACK and BLAS FORTRAN implementation. This package + installs two libraries: libblas and liblapack. + + http://www.netlib.org/lapack/ + +config BR2_PACKAGE_LAPACK_COMPLEX + bool "Complex/Complex16 support" + default y + depends on BR2_PACKAGE_LAPACK + help + Builds support for COMPLEX and COMPLEX16 data types. diff --git a/package/lapack/lapack.hash b/package/lapack/lapack.hash new file mode 100644 index 00000000..bac7210c --- /dev/null +++ b/package/lapack/lapack.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 106087f1bb5f46afdfba7f569d0cbe23dacb9a07cd24733765a0e89dbe1ad573 lapack-3.9.0.tar.gz +sha256 d56bd4441b999b80c88df04faf0d8b3d7d3b2bd781cf91242c4188e8a6d0f8be LICENSE diff --git a/package/lapack/lapack.mk b/package/lapack/lapack.mk new file mode 100644 index 00000000..41774f61 --- /dev/null +++ b/package/lapack/lapack.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# lapack +# +################################################################################ + +LAPACK_VERSION = 3.9.0 +LAPACK_LICENSE = BSD-3-Clause +LAPACK_LICENSE_FILES = LICENSE +LAPACK_SITE = $(call github,Reference-LAPACK,lapack,v$(LAPACK_VERSION)) +LAPACK_INSTALL_STAGING = YES +LAPACK_SUPPORTS_IN_SOURCE_BUILD = NO +LAPACK_CONF_OPTS = -DLAPACKE=ON -DCBLAS=ON + +ifeq ($(BR2_PACKAGE_LAPACK_COMPLEX),y) +LAPACK_CONF_OPTS += -DBUILD_COMPLEX=ON -DBUILD_COMPLEX16=ON +else +LAPACK_CONF_OPTS += -DBUILD_COMPLEX=OFF -DBUILD_COMPLEX16=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/latencytop/0001-makefile.patch b/package/latencytop/0001-makefile.patch new file mode 100644 index 00000000..fa8c51cf --- /dev/null +++ b/package/latencytop/0001-makefile.patch @@ -0,0 +1,28 @@ +Usee $(CC) to enable cross compiling and link to the right ncurses library. + +Signed-off-by: Qais Yousef + +--- latencytop-0.5/Makefile.old 2012-04-18 11:59:39.748084334 +0100 ++++ latencytop-0.5/Makefile 2012-04-18 12:00:08.659112340 +0100 +@@ -4,7 +4,7 @@ + DESTDIR = + SBINDIR = /usr/sbin + XCFLAGS = -W -g `pkg-config --cflags glib-2.0` -D_FORTIFY_SOURCE=2 -Wno-sign-compare +-LDF = -Wl,--as-needed `pkg-config --libs glib-2.0` -lncursesw ++LDF = -Wl,--as-needed `pkg-config --libs glib-2.0` -lncurses + + OBJS= latencytop.o text_display.o translate.o fsync.o + +@@ -26,10 +26,10 @@ + + # We write explicity this "implicit rule" + %.o : %.c +- gcc -c $(CFLAGS) $(XCFLAGS) $< -o $@ ++ $(CC) -c $(CFLAGS) $(XCFLAGS) $< -o $@ + + latencytop: $(OBJS) latencytop.h Makefile +- gcc $(CFLAGS) $(OBJS) $(LDF) -o latencytop ++ $(CC) $(CFLAGS) $(OBJS) $(LDF) -o latencytop + + clean: + rm -f *~ latencytop DEADJOE *.o diff --git a/package/latencytop/Config.in b/package/latencytop/Config.in new file mode 100644 index 00000000..b54ef052 --- /dev/null +++ b/package/latencytop/Config.in @@ -0,0 +1,26 @@ +config BR2_PACKAGE_LATENCYTOP + bool "latencytop" + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_LIBGLIB2 + help + There are many types and causes of latency. LatencyTOP + focuses on the type of latency that causes skips in audio, + stutters in your desktop experience or that overloads your + server (while you have plenty of CPU power left). + + LatencyTOP focuses on the cases where the applications want + to run and execute useful code, but there's some resource + that's not currently available (and the kernel then blocks + the process). This is done both on a system level and on a + per process level, so that you can see what's happening to + the system, and which process is suffering and/or causing + the delays. + + http://www.latencytop.org + +comment "latencytop needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/latencytop/latencytop.hash b/package/latencytop/latencytop.hash new file mode 100644 index 00000000..74b8a03a --- /dev/null +++ b/package/latencytop/latencytop.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 9e7f72fbea7bd918e71212a1eabaad8488d2c602205d2e3c95d62cd57e9203ef latencytop-0.5.tar.gz +sha256 34d1db30ab21eaedb2c191b2787632a960090a0c63da9f5b481d84b23b98c438 latencytop.c diff --git a/package/latencytop/latencytop.mk b/package/latencytop/latencytop.mk new file mode 100644 index 00000000..56afe860 --- /dev/null +++ b/package/latencytop/latencytop.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# latencytop +# +################################################################################ + +LATENCYTOP_VERSION = 0.5 +LATENCYTOP_SITE = http://www.latencytop.org/download +LATENCYTOP_DEPENDENCIES = libglib2 ncurses +LATENCYTOP_LICENSE = GPL-2.0 +LATENCYTOP_LICENSE_FILES = latencytop.c + +# NOTE: GTK is heavy weight, we intentionally build the text (ncurses) +# version only +define LATENCYTOP_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) HAS_GTK_GUI= +endef + +define LATENCYTOP_INSTALL_TARGET_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) install -C $(@D) DESTDIR=$(TARGET_DIR) HAS_GTK_GUI= +endef + +$(eval $(generic-package)) diff --git a/package/lbase64/0001-retro-compatible-with-Lua-5.1.patch b/package/lbase64/0001-retro-compatible-with-Lua-5.1.patch new file mode 100644 index 00000000..12acf448 --- /dev/null +++ b/package/lbase64/0001-retro-compatible-with-Lua-5.1.patch @@ -0,0 +1,20 @@ +retro compatible with Lua 5.1 C/API + +Signed-off-by: Francois Perrad + +Index: b/lbase64.c +=================================================================== +--- a/lbase64.c ++++ b/lbase64.c +@@ -111,7 +111,11 @@ + + LUALIB_API int luaopen_base64(lua_State *L) + { ++#if LUA_VERSION_NUM >= 502 + luaL_newlib(L,R); ++#else ++ luaL_register(L,MYNAME,R); ++#endif + lua_pushliteral(L,"version"); /** version */ + lua_pushliteral(L,MYVERSION); + lua_settable(L,-3); diff --git a/package/lbase64/Config.in b/package/lbase64/Config.in new file mode 100644 index 00000000..c836ffb5 --- /dev/null +++ b/package/lbase64/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LBASE64 + bool "lbase64" + help + A base64 library for Lua + + http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/#lbase64 diff --git a/package/lbase64/lbase64.hash b/package/lbase64/lbase64.hash new file mode 100644 index 00000000..34ef2132 --- /dev/null +++ b/package/lbase64/lbase64.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 b83dbc87330a322e5222cd891a6e258b533f5b6c46e8f3c18fc0265e4c991aaa lbase64.tar.gz +sha256 a2b4f2d25b56c40801ce4f403541cbc301313048acfaa59c9509024bec57b662 README diff --git a/package/lbase64/lbase64.mk b/package/lbase64/lbase64.mk new file mode 100644 index 00000000..0225fc67 --- /dev/null +++ b/package/lbase64/lbase64.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# lbase64 +# +################################################################################ + +LBASE64_VERSION = 20120820 +LBASE64_SITE = http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/5.3 +LBASE64_SOURCE = lbase64.tar.gz +LBASE64_LICENSE = Public domain +LBASE64_LICENSE_FILES = README +LBASE64_DEPENDENCIES = luainterpreter + +define LBASE64_BUILD_CMDS + $(MAKE1) $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(TARGET_CFLAGS) -fPIC" -C $(@D) so +endef + +define LBASE64_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/base64.so \ + $(TARGET_DIR)/usr/lib/lua/$(LUAINTERPRETER_ABIVER)/base64.so +endef + +$(eval $(generic-package)) diff --git a/package/lbreakout2/Config.in b/package/lbreakout2/Config.in new file mode 100644 index 00000000..eeb8a069 --- /dev/null +++ b/package/lbreakout2/Config.in @@ -0,0 +1,30 @@ +config BR2_PACKAGE_LBREAKOUT2 + bool "LBreakout2" + select BR2_PACKAGE_SDL + select BR2_PACKAGE_LIBPNG + help + LBreakout2 is the successor to LBreakout, a breakout-style + arcade game in the manner of Arkanoid. Requires SDL, libpng, + and optionnally SDL_mixer/SDL_net. + A display with minimum 640x480 resolution, a keyboard and a + mouse are recommanded. + + http://lgames.sourceforge.net/index.php?project=LBreakout2 + +if BR2_PACKAGE_LBREAKOUT2 + +config BR2_PACKAGE_LBREAKOUT2_AUDIO + bool "audio support" + default y + select BR2_PACKAGE_SDL_MIXER + help + Activates audio support in LBreakout2. Will add SDL_mixer. + +config BR2_PACKAGE_LBREAKOUT2_NET + bool "network support" + default y + select BR2_PACKAGE_SDL_NET + help + Activates network support LBreakout2. Will add SDL_net. + +endif diff --git a/package/lbreakout2/lbreakout2.hash b/package/lbreakout2/lbreakout2.hash new file mode 100644 index 00000000..56d0a950 --- /dev/null +++ b/package/lbreakout2/lbreakout2.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/lgames/files/lbreakout2/2.6/ +md5 1a9238b83f9f13f09b7a4d53e00b4e84 lbreakout2-2.6.5.tar.gz +sha1 d92326499165fd368be04378d633e13d42b4d2d7 lbreakout2-2.6.5.tar.gz +# Locally computed: +sha256 9104d6175553da3442dc6a5fc407a669e2f5aff3eedc5d30409eb003b7a78d6f lbreakout2-2.6.5.tar.gz +sha256 67f82e045cf7acfef853ea0f426575a8359161a0a325e19f02b529a87c4b6c34 COPYING diff --git a/package/lbreakout2/lbreakout2.mk b/package/lbreakout2/lbreakout2.mk new file mode 100644 index 00000000..49db8d54 --- /dev/null +++ b/package/lbreakout2/lbreakout2.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# lbreakout2 +# +################################################################################ + +LBREAKOUT2_VERSION_MAJOR = 2.6 +LBREAKOUT2_VERSION = $(LBREAKOUT2_VERSION_MAJOR).5 +LBREAKOUT2_SITE = https://downloads.sourceforge.net/lgames/lbreakout2/$(LBREAKOUT2_VERSION_MAJOR) +LBREAKOUT2_LICENSE = GPL-2.0+ +LBREAKOUT2_LICENSE_FILES = COPYING + +LBREAKOUT2_DEPENDENCIES = sdl libpng $(TARGET_NLS_DEPENDENCIES) + +LBREAKOUT2_CONF_ENV = \ + SDL_CONFIG="$(STAGING_DIR)/usr/bin/sdl-config" \ + LIBS=$(TARGET_NLS_LIBS) + +ifeq ($(BR2_PACKAGE_LBREAKOUT2_AUDIO),y) +LBREAKOUT2_DEPENDENCIES += sdl_mixer +LBREAKOUT2_CONF_OPTS += --enable-audio=yes +else +LBREAKOUT2_CONF_OPTS += --disable-audio +endif + +ifeq ($(BR2_PACKAGE_LBREAKOUT2_NET),y) +LBREAKOUT2_DEPENDENCIES += sdl_net +LBREAKOUT2_CONF_OPTS += --enable-network=yes +else +LBREAKOUT2_CONF_OPTS += --disable-network +endif + +$(eval $(autotools-package)) diff --git a/package/lcdapi/Config.in b/package/lcdapi/Config.in new file mode 100644 index 00000000..154689b2 --- /dev/null +++ b/package/lcdapi/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LCDAPI + bool "lcdapi" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + help + C++ client API for lcdproc, containing a set of widget + classes. + + https://github.com/spdawson/lcdapi + +comment "lcdapi needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/lcdapi/lcdapi.hash b/package/lcdapi/lcdapi.hash new file mode 100644 index 00000000..fc86b66d --- /dev/null +++ b/package/lcdapi/lcdapi.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 6afdd4238af1fa7ea5f10378601381fc3f535a10504dc7d4ea8eab56e0dda091 lcdapi-0.11.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/lcdapi/lcdapi.mk b/package/lcdapi/lcdapi.mk new file mode 100644 index 00000000..f6b14cd2 --- /dev/null +++ b/package/lcdapi/lcdapi.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# lcdapi +# +################################################################################ + +LCDAPI_VERSION = 0.11 +LCDAPI_SITE = $(call github,spdawson,lcdapi,v$(LCDAPI_VERSION)) +LCDAPI_LICENSE = LGPL-2.1+ +LCDAPI_LICENSE_FILES = COPYING +LCDAPI_AUTORECONF = YES +LCDAPI_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/lcdproc/0001-LCDd.conf.patch b/package/lcdproc/0001-LCDd.conf.patch new file mode 100644 index 00000000..283ac886 --- /dev/null +++ b/package/lcdproc/0001-LCDd.conf.patch @@ -0,0 +1,18 @@ +Fix the default LCDd configuration file, so that the DriverPath +is set to the correct lcdproc library install path, rather than +the dummy/default path. + +Signed-off-by: Simon Dawson +--- + +--- lcdproc-0.5.3/LCDd.conf.orig 2009-06-20 14:48:34.000000000 +0100 ++++ lcdproc-0.5.3/LCDd.conf 2010-05-11 10:02:21.000000000 +0100 +@@ -34,7 +34,7 @@ + # the driver modules and will thus not be able to + # function properly. + # NOTE: Always place a slash as last character ! +-DriverPath=server/drivers/ ++DriverPath=/usr/lib/lcdproc/ + + # Tells the server to load the given drivers. Multiple lines can be given. + # The name of the driver is case sensitive and determines the section diff --git a/package/lcdproc/0002-Add-missing-ioctl-header.patch b/package/lcdproc/0002-Add-missing-ioctl-header.patch new file mode 100644 index 00000000..8c212359 --- /dev/null +++ b/package/lcdproc/0002-Add-missing-ioctl-header.patch @@ -0,0 +1,50 @@ +From 6267665454501512ac054202b38e4e6a72fa284b Mon Sep 17 00:00:00 2001 +From: Baruch Siach +Date: Fri, 8 Sep 2017 14:19:11 +0300 +Subject: [PATCH] Add missing ioctl header + +The spidev.h header uses macros from linux/ioctl.h. Add this header +explicitly since some libc, like musl, do not include it implicitly. +This fixes the following build failure: + +In file included from .../sysroot/usr/include/sys/ioctl.h:7:0, + from hd44780-spi.c:31: +hd44780-spi.c: In function ‘spi_transfer’: +hd44780-spi.c:89:24: error: ‘_IOC_SIZEBITS’ undeclared (first use in this function) + status = ioctl(p->fd, SPI_IOC_MESSAGE(1), &xfer); + ^ +Signed-off-by: Baruch Siach +--- +Upstream status: https://github.com/lcdproc/lcdproc/pull/90 + + server/drivers/hd44780-pifacecad.c | 1 + + server/drivers/hd44780-spi.c | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/server/drivers/hd44780-pifacecad.c b/server/drivers/hd44780-pifacecad.c +index a73b9f9b1f82..55139124d852 100644 +--- a/server/drivers/hd44780-pifacecad.c ++++ b/server/drivers/hd44780-pifacecad.c +@@ -54,6 +54,7 @@ + #include + #include + #include ++#include + #include + #include + +diff --git a/server/drivers/hd44780-spi.c b/server/drivers/hd44780-spi.c +index 791156f87a26..74c85fb014aa 100644 +--- a/server/drivers/hd44780-spi.c ++++ b/server/drivers/hd44780-spi.c +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + #include + #include + +-- +2.14.1 + diff --git a/package/lcdproc/0003-Fixcompilation-with-GCC-10-x.patch b/package/lcdproc/0003-Fixcompilation-with-GCC-10-x.patch new file mode 100644 index 00000000..c8a3dc20 --- /dev/null +++ b/package/lcdproc/0003-Fixcompilation-with-GCC-10-x.patch @@ -0,0 +1,46 @@ +From 084126b03f29b33ab3e657c66e8c6a439f27f8e1 Mon Sep 17 00:00:00 2001 +From: Harald Geyer +Date: Mon, 10 Feb 2020 13:15:10 +0100 +Subject: [PATCH] Fix compilation with GCC >= 10.x + +Starting with GCC >= 10.x, -fno-common is used as default +instead of -fcommon. This patch fixes the compilation. + +Closes: #148 + +Suggested-by: Conrad Kostecki +Signed-off-by: Harald Geyer + +[Retrieved from: +https://github.com/lcdproc/lcdproc/commit/084126b03f29b33ab3e657c66e8c6a439f27f8e1] +Signed-off-by: Fabrice Fontaine +--- + clients/lcdproc/iface.c | 1 + + clients/lcdproc/iface.h | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/clients/lcdproc/iface.c b/clients/lcdproc/iface.c +index 40e50cb7..1ac355bd 100644 +--- a/clients/lcdproc/iface.c ++++ b/clients/lcdproc/iface.c +@@ -32,6 +32,7 @@ + #define UNSET_INT -1 + #define UNSET_STR "\01" + ++IfaceInfo iface[MAX_INTERFACES]; + + static int iface_count = 0; /* number of interfaces */ + static char unit_label[10] = "B"; /* default unit label is Bytes */ +diff --git a/clients/lcdproc/iface.h b/clients/lcdproc/iface.h +index cc6dbaaf..c1bd6b5b 100644 +--- a/clients/lcdproc/iface.h ++++ b/clients/lcdproc/iface.h +@@ -18,7 +18,7 @@ + /** max number of interfaces in multi-interface mode */ + #define MAX_INTERFACES 3 + +-IfaceInfo iface[MAX_INTERFACES]; /* interface info */ ++extern IfaceInfo iface[MAX_INTERFACES]; /* interface info */ + + /** Update screen content */ + int iface_screen(int rep, int display, int *flags_ptr); diff --git a/package/lcdproc/Config.in b/package/lcdproc/Config.in new file mode 100644 index 00000000..042abd69 --- /dev/null +++ b/package/lcdproc/Config.in @@ -0,0 +1,29 @@ +comment "lcdproc needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +config BR2_PACKAGE_LCDPROC + bool "lcdproc" + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_FREETYPE + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_ZLIB + help + LCD display driver daemon and clients + + http://lcdproc.org/ + +if BR2_PACKAGE_LCDPROC + +config BR2_PACKAGE_LCDPROC_DRIVERS + string "List of drivers to build" + default "all" + help + Specify a comma-separated list of lcdproc drivers to be built + +config BR2_PACKAGE_LCDPROC_MENUS + bool "Menu support" + help + Enable support for lcdproc menus + +endif diff --git a/package/lcdproc/lcdproc.hash b/package/lcdproc/lcdproc.hash new file mode 100644 index 00000000..a90d43c1 --- /dev/null +++ b/package/lcdproc/lcdproc.hash @@ -0,0 +1,4 @@ +# Locally computed: +sha256 843007d377adc856529ed0c7c42c9a7563043f06b1b73add0372bba3a3029804 lcdproc-0.5.7.tar.gz +sha256 d48a915496c96ff775b377d2222de3150ae5172bfb84a6ec9f9ceab962f97b83 lcdproc-0.5.9.tar.gz +sha256 1b2a567f289f66a143c56353e7b3d4fa5862514a5e3c5cfdf8b02ee5e5aaa953 COPYING diff --git a/package/lcdproc/lcdproc.mk b/package/lcdproc/lcdproc.mk new file mode 100644 index 00000000..96e59da4 --- /dev/null +++ b/package/lcdproc/lcdproc.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# lcdproc +# +################################################################################ + +LCDPROC_VERSION = 0.5.9 +LCDPROC_SITE = https://github.com/lcdproc/lcdproc/releases/download/v$(LCDPROC_VERSION) +LCDPROC_LICENSE = GPL-2.0+ +LCDPROC_LICENSE_FILES = COPYING +LCDPROC_MAKE = $(MAKE1) + +LCDPROC_CONF_OPTS = --enable-drivers=$(BR2_PACKAGE_LCDPROC_DRIVERS) + +ifeq ($(BR2_PACKAGE_LCDPROC_MENUS),y) +LCDPROC_CONF_OPTS += --enable-lcdproc-menus +endif + +LCDPROC_DEPENDENCIES = freetype ncurses zlib + +LCDPROC_CONF_ENV += \ + ac_cv_mtab_file=/etc/mtab \ + ac_cv_path_FT2_CONFIG=$(STAGING_DIR)/usr/bin/freetype-config + +ifeq ($(BR2_PACKAGE_LIBPNG),y) +LCDPROC_DEPENDENCIES += libpng +LCDPROC_CONF_ENV += ac_cv_path__png_config=$(STAGING_DIR)/usr/bin/libpng-config +LCDPROC_CONF_OPTS += --enable-libpng +else +LCDPROC_CONF_OPTS += --disable-libpng +endif + +$(eval $(autotools-package)) diff --git a/package/lcms2/Config.in b/package/lcms2/Config.in new file mode 100644 index 00000000..19e1b9c1 --- /dev/null +++ b/package/lcms2/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LCMS2 + bool "lcms2" + help + Little Color Management Software (CMS) intends to be an OPEN + SOURCE small-footprint color management engine, with special + focus on accuracy and performance. + It uses the International Color Consortium standard (ICC), + which is the modern standard when regarding to color + management. + + http://www.littlecms.com/ diff --git a/package/lcms2/lcms2.hash b/package/lcms2/lcms2.hash new file mode 100644 index 00000000..c0916820 --- /dev/null +++ b/package/lcms2/lcms2.hash @@ -0,0 +1,5 @@ +# From https://sourceforge.net/projects/lcms/files/lcms/2.11 +sha1 7413047c74de29e20caa5c9afc1b12bf07bbf7a7 lcms2-2.11.tar.gz +# Locally computed: +sha256 dc49b9c8e4d7cdff376040571a722902b682a795bf92985a85b48854c270772e lcms2-2.11.tar.gz +sha256 53ad5ca11b8f4079e9c9bfa61575927a33f53526d6d414287149ec3ab61e8e4d COPYING diff --git a/package/lcms2/lcms2.mk b/package/lcms2/lcms2.mk new file mode 100644 index 00000000..44b9965a --- /dev/null +++ b/package/lcms2/lcms2.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# lcms2 +# +################################################################################ + +LCMS2_VERSION = 2.11 +LCMS2_SITE = http://downloads.sourceforge.net/project/lcms/lcms/$(LCMS2_VERSION) +LCMS2_LICENSE = MIT +LCMS2_LICENSE_FILES = COPYING +LCMS2_CPE_ID_VENDOR = littlecms +LCMS2_CPE_ID_PRODUCT = little_cms +LCMS2_INSTALL_STAGING = YES +# tiff is only used by tificc sample +LCMS2_CONF_OPTS = --without-tiff + +ifeq ($(BR2_PACKAGE_JPEG),y) +LCMS2_CONF_OPTS += --with-jpeg +LCMS2_DEPENDENCIES += jpeg +else +LCMS2_CONF_OPTS += --without-jpeg +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +LCMS2_CONF_OPTS += --with-zlib +LCMS2_DEPENDENCIES += zlib +else +LCMS2_CONF_OPTS += --without-zlib +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/leafnode2/0001-cross_makefile.patch b/package/leafnode2/0001-cross_makefile.patch new file mode 100644 index 00000000..b61a8ef3 --- /dev/null +++ b/package/leafnode2/0001-cross_makefile.patch @@ -0,0 +1,39 @@ +Fix cross-compilation issues + + - During target package compilation the host version of b_sortnl is + needed. + + - Do not call a 'amiroot' program built for the target when + cross-compiling. We're anyway not root, so simply remove the + chown/chgrp dance. + +Signed-off-by: Bernd Kuhls +Signed-off-by: Thomas Petazzoni + +Index: b/Makefile.in +=================================================================== +--- a/Makefile.in ++++ b/Makefile.in +@@ -1853,7 +1853,7 @@ + + configparam_data.c: $(srcdir)/config.table b_sortnl$(EXEEXT) genconfigparam_data.awk + rm -f config.table.sorted +- ./b_sortnl$(EXEEXT) <$(srcdir)/config.table >config.table.sorted ++ ./b_sortnl_host$(EXEEXT) <$(srcdir)/config.table >config.table.sorted + $(AWK) -f $(srcdir)/genconfigparam_data.awk $@ \ + || { rm -f $@ ; false ; } + +@@ -1868,13 +1868,7 @@ + install-data-hook: + $(INSTALL) -d -m 02770 $(DESTDIR)$(SPOOLDIR) + $(INSTALL) -d -m 02770 $(DESTDIR)$(SPOOLDIR)/leaf.node +- -./amiroot && chown $(RUNAS_USER) $(DESTDIR)$(SPOOLDIR) +- -./amiroot && chown $(RUNAS_USER) $(DESTDIR)$(SPOOLDIR)/leaf.node +- -./amiroot && chgrp $(RUNAS_GROUP) $(DESTDIR)$(SPOOLDIR) +- -./amiroot && chgrp $(RUNAS_GROUP) $(DESTDIR)$(SPOOLDIR)/leaf.node + rm -f $(DESTDIR)$(sbindir)/leafnode-version # now in $(bindir) +- ./amiroot && p=$(DESTDIR)$(bindir)/newsq && chown 0 $$p \ +- && chgrp $(RUNAS_GROUP) $$p && chmod 2111 $$p ; true + @echo + @echo "### If upgrading from leafnode before 1.6," + @echo "### run: make update" diff --git a/package/leafnode2/Config.in b/package/leafnode2/Config.in new file mode 100644 index 00000000..e244bdc4 --- /dev/null +++ b/package/leafnode2/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_LEAFNODE2 + bool "leafnode2" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_PCRE + help + Leafnode-2 is a store-and-forward NNTP (or Usenet) proxy + server designed for small sites with just a few active + newsgroups. + + Leafnode-2 needs inetd, check chapter 14 of the documentation + at: + http://krusty.dt.e-technik.tu-dortmund.de/~ma/leafnode/beta/leafnode-readme.txt + + For example, you can add this line to inetd.conf: + nntp stream tcp nowait news /usr/sbin/leafnode + + http://krusty.dt.e-technik.tu-dortmund.de/~ma/leafnode/beta diff --git a/package/leafnode2/leafnode2.hash b/package/leafnode2/leafnode2.hash new file mode 100644 index 00000000..7dfa7cce --- /dev/null +++ b/package/leafnode2/leafnode2.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 34eba2cbbb871b724c8d5dd402d1c358aeb21ba426beb5658e155ed0d7461075 leafnode-2.0.0.alpha20140727b.tar.bz2 +sha256 59d37f745dc5a2d63a51dff344f4ad89f72e76f8c7b7d877f20880d838b1bec9 COPYING +sha256 0c92246a9d3636e0aa6a244f6c481639b2e530fbbb25bc048ce7acd83e1fc5f6 COPYING.LGPL diff --git a/package/leafnode2/leafnode2.mk b/package/leafnode2/leafnode2.mk new file mode 100644 index 00000000..a02aad43 --- /dev/null +++ b/package/leafnode2/leafnode2.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# leafnode2 +# +################################################################################ + +LEAFNODE2_VERSION = 2.0.0.alpha20140727b +LEAFNODE2_SOURCE = leafnode-$(LEAFNODE2_VERSION).tar.bz2 +LEAFNODE2_SITE = http://krusty.dt.e-technik.tu-dortmund.de/~ma/leafnode/beta +LEAFNODE2_LICENSE = LGPL-2.1 +LEAFNODE2_LICENSE_FILES = COPYING COPYING.LGPL +LEAFNODE2_DEPENDENCIES = host-pcre pcre + +LEAFNODE2_CONF_ENV = \ + PCRECONFIG="$(STAGING_DIR)/usr/bin/pcre-config" + +# --enable-runas-user use 'news' as default but the configure stop +# if news doesn't exist on the build host. +# Use 'root' while cross-compiling +LEAFNODE2_CONF_OPTS = \ + --sysconfdir=/etc/leafnode2 \ + --enable-spooldir=/var/spool/news \ + --enable-runas-user=root + +# Leafnode2 needs the host version of b_sortnl during +# compilation. Instead of creating a seperate host package and +# installing b_sortnl to $(HOST_DIR) this binary is compiled +# on-the-fly, host-pcre is needed for this +define LEAFNODE2_BUILD_SORTNL_TOOL + cd $(@D); \ + $(HOSTCC) $(HOST_CFLAGS) -o b_sortnl_host \ + arc4random.c mergesort.c b_sortnl.c critmem_malloc.c \ + critmem_realloc.c -DHAVE_CONFIG_H -I$(HOST_DIR)/include \ + -L $(HOST_DIR)/lib -Wl,-rpath,$(HOST_DIR)/lib -lpcre +endef + +LEAFNODE2_PRE_BUILD_HOOKS += LEAFNODE2_BUILD_SORTNL_TOOL + +define LEAFNODE2_USERS + news -1 news -1 * - - - Leafnode2 daemon +endef + +$(eval $(autotools-package)) diff --git a/package/leafpad/Config.in b/package/leafpad/Config.in new file mode 100644 index 00000000..a4408547 --- /dev/null +++ b/package/leafpad/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LEAFPAD + bool "leafpad" + depends on BR2_PACKAGE_LIBGTK2 + help + GTK+ based simple text editor + + http://savannah.nongnu.org/download/leafpad diff --git a/package/leafpad/leafpad.hash b/package/leafpad/leafpad.hash new file mode 100644 index 00000000..e21c07ad --- /dev/null +++ b/package/leafpad/leafpad.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 959d22ae07f22803bc66ff40d373a854532a6e4732680bf8a96a3fbcb9f80a2c leafpad-0.8.18.1.tar.gz +# Locally computed +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/leafpad/leafpad.mk b/package/leafpad/leafpad.mk new file mode 100644 index 00000000..c6c28d12 --- /dev/null +++ b/package/leafpad/leafpad.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# leafpad +# +################################################################################ + +LEAFPAD_VERSION = 0.8.18.1 +LEAFPAD_SITE = http://savannah.nongnu.org/download/leafpad +LEAFPAD_DEPENDENCIES = libgtk2 host-intltool +LEAFPAD_LICENSE = GPL-2.0+ +LEAFPAD_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/lensfun/Config.in b/package/lensfun/Config.in new file mode 100644 index 00000000..7ec49020 --- /dev/null +++ b/package/lensfun/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_LENSFUN + bool "lensfun" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + select BR2_PACKAGE_LIBGLIB2 + help + Lensfun itself is only a library for correcting several + artefacts and a database for storing lens profiles. To + actually use Lensfun to process your images you need an + image editing application with Lensfun support. + + http://lensfun.sourceforge.net + +if BR2_PACKAGE_LENSFUN + +config BR2_PACKAGE_LENSFUN_TOOLS + bool "lensfun tools" + select BR2_PACKAGE_LIBPNG + help + Build 'lenstool'. + +endif + +comment "lensfun needs a toolchain w/ C++, threads, wchar" + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS \ + || !BR2_USE_WCHAR diff --git a/package/lensfun/lensfun.hash b/package/lensfun/lensfun.hash new file mode 100644 index 00000000..1a27373f --- /dev/null +++ b/package/lensfun/lensfun.hash @@ -0,0 +1,7 @@ +# From https://sourceforge.net/projects/lensfun/files/0.3.2 +sha1 1d978b15aa7304d66a4931fa37ca9f8f89396c16 lensfun-0.3.2.tar.gz +md5 247e59a0812ec451f6cd0d20b3379cb5 lensfun-0.3.2.tar.gz +# Locally calculated +sha256 ae8bcad46614ca47f5bda65b00af4a257a9564a61725df9c74cb260da544d331 lensfun-0.3.2.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 docs/gpl-3.0.txt +sha256 a853c2ffec17057872340eee242ae4d96cbf2b520ae27d903e1b2fef1a5f9d1c docs/lgpl-3.0.txt diff --git a/package/lensfun/lensfun.mk b/package/lensfun/lensfun.mk new file mode 100644 index 00000000..9258409f --- /dev/null +++ b/package/lensfun/lensfun.mk @@ -0,0 +1,47 @@ +################################################################################ +# +# lensfun +# +################################################################################ + +LENSFUN_VERSION = 0.3.2 +LENSFUN_SITE = https://sourceforge.net/projects/lensfun/files/$(LENSFUN_VERSION) +LENSFUN_LICENSE = LGPL-3.0+ (libraries), GPL-3.0+ (programs) +LENSFUN_LICENSE_FILES = docs/gpl-3.0.txt docs/lgpl-3.0.txt +LENSFUN_INSTALL_STAGING = YES +LENSFUN_DEPENDENCIES = libglib2 + +# lensfun doesn't support in source build, it fail to build lensfun tools. +LENSFUN_SUPPORTS_IN_SOURCE_BUILD = NO + +ifeq ($(BR2_X86_CPU_HAS_SSE),y) +LENSFUN_CONF_OPTS += -DBUILD_FOR_SSE=ON +else +LENSFUN_CONF_OPTS += -DBUILD_FOR_SSE=OFF +endif + +ifeq ($(BR2_X86_CPU_HAS_SSE2),y) +LENSFUN_CONF_OPTS += -DBUILD_FOR_SSE2=ON +else +LENSFUN_CONF_OPTS += -DBUILD_FOR_SSE2=OFF +endif + +ifeq ($(BR2_PACKAGE_LENSFUN_TOOLS),y) +LENSFUN_DEPENDENCIES += libpng +LENSFUN_CONF_OPTS += -DBUILD_LENSTOOL=ON +# broken +else +LENSFUN_CONF_OPTS += -DBUILD_LENSTOOL=OFF +endif + +ifeq ($(BR2_STATIC_LIBS),y) +LENSFUN_CONF_OPTS += -DBUILD_STATIC=ON +else +LENSFUN_CONF_OPTS += -DBUILD_STATIC=OFF +endif + +# Don't install helper scripts (which require python3 and gksudo). +# Don't run setup.py on the host. +LENSFUN_CONF_OPTS += -DINSTALL_HELPER_SCRIPTS=OFF -DPYTHON=OFF + +$(eval $(cmake-package)) diff --git a/package/leptonica/Config.in b/package/leptonica/Config.in new file mode 100644 index 00000000..ec4920c2 --- /dev/null +++ b/package/leptonica/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LEPTONICA + bool "leptonica" + help + Leptonica is an image processing and image analysis library. + + http://www.leptonica.org/ diff --git a/package/leptonica/leptonica.hash b/package/leptonica/leptonica.hash new file mode 100644 index 00000000..6ef1a091 --- /dev/null +++ b/package/leptonica/leptonica.hash @@ -0,0 +1,3 @@ +# locally computed hash +sha256 ec9c46c2aefbb960fb6a6b7f800fe39de48343437b6ce08e30a8d9688ed14ba4 leptonica-1.80.0.tar.gz +sha256 87829abb5bbb00b55a107365da89e9a33f86c4250169e5a1e5588505be7d5806 leptonica-license.txt diff --git a/package/leptonica/leptonica.mk b/package/leptonica/leptonica.mk new file mode 100644 index 00000000..93d1e47c --- /dev/null +++ b/package/leptonica/leptonica.mk @@ -0,0 +1,73 @@ +################################################################################ +# +# leptonica +# +################################################################################ + +LEPTONICA_VERSION = 1.80.0 +LEPTONICA_SITE = http://www.leptonica.org/source +LEPTONICA_LICENSE = BSD-2-Clause +LEPTONICA_LICENSE_FILES = leptonica-license.txt +LEPTONICA_CPE_ID_VENDOR = leptonica +LEPTONICA_INSTALL_STAGING = YES +LEPTONICA_DEPENDENCIES = host-pkgconf + +LEPTONICA_CONF_OPTS += --disable-programs + +ifeq ($(BR2_PACKAGE_GIFLIB),y) +LEPTONICA_DEPENDENCIES += giflib +LEPTONICA_CONF_OPTS += --with-giflib +else +LEPTONICA_CONF_OPTS += --without-giflib +endif + +ifeq ($(BR2_PACKAGE_JPEG),y) +LEPTONICA_DEPENDENCIES += jpeg +LEPTONICA_CONF_OPTS += --with-jpeg +else +LEPTONICA_CONF_OPTS += --without-jpeg +endif + +ifeq ($(BR2_PACKAGE_LIBPNG),y) +LEPTONICA_DEPENDENCIES += libpng +LEPTONICA_CONF_OPTS += --with-libpng +else +LEPTONICA_CONF_OPTS += --without-libpng +endif + +ifeq ($(BR2_PACKAGE_OPENJPEG),y) +LEPTONICA_DEPENDENCIES += openjpeg +LEPTONICA_CONF_OPTS += --with-libopenjpeg +else +LEPTONICA_CONF_OPTS += --without-libopenjpeg +endif + +ifeq ($(BR2_PACKAGE_TIFF),y) +LEPTONICA_DEPENDENCIES += tiff +LEPTONICA_CONF_OPTS += --with-libtiff +else +LEPTONICA_CONF_OPTS += --without-libtiff +endif + +ifeq ($(BR2_PACKAGE_WEBP),y) +LEPTONICA_DEPENDENCIES += webp +LEPTONICA_CONF_OPTS += --with-libwebp +ifeq ($(BR2_PACKAGE_WEBP_DEMUX)$(BR2_PACKAGE_WEBP_MUX),yy) +LEPTONICA_CONF_OPTS += --with-libwebpmux +else +LEPTONICA_CONF_OPTS += --without-libwebpmux +endif +else +LEPTONICA_CONF_OPTS += \ + --without-libwebp \ + --without-libwebpmux +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +LEPTONICA_DEPENDENCIES += zlib +LEPTONICA_CONF_OPTS += --with-zlib +else +LEPTONICA_CONF_OPTS += --without-zlib +endif + +$(eval $(autotools-package)) diff --git a/package/less/Config.in b/package/less/Config.in new file mode 100644 index 00000000..caf688ae --- /dev/null +++ b/package/less/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LESS + bool "less" + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + select BR2_PACKAGE_NCURSES + help + Excellent text file viewer. + + http://www.greenwoodsoftware.com/ diff --git a/package/less/less.hash b/package/less/less.hash new file mode 100644 index 00000000..e675569c --- /dev/null +++ b/package/less/less.hash @@ -0,0 +1,6 @@ +# Locally calculated after checking pgp signature +# using DSA key F153A7C833235259 +# http://www.greenwoodsoftware.com/less/less-563.sig +sha256 ce5b6d2b9fc4442d7a07c93ab128d2dff2ce09a1d4f2d055b95cf28dd0dc9a9a less-563.tar.gz +# Locally calculated +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/less/less.mk b/package/less/less.mk new file mode 100644 index 00000000..a15bd25b --- /dev/null +++ b/package/less/less.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# less +# +################################################################################ + +LESS_VERSION = 563 +LESS_SITE = http://www.greenwoodsoftware.com/less +LESS_LICENSE = GPL-3.0+ +LESS_LICENSE_FILES = COPYING +LESS_CPE_ID_VENDOR = gnu +LESS_DEPENDENCIES = ncurses + +define LESS_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 $(@D)/less $(TARGET_DIR)/usr/bin/less +endef + +$(eval $(autotools-package)) diff --git a/package/lesstif/Config.in b/package/lesstif/Config.in new file mode 100644 index 00000000..654ee6f1 --- /dev/null +++ b/package/lesstif/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LESSTIF + bool "lesstif" + depends on BR2_USE_MMU # fork() + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBXT + select BR2_PACKAGE_XLIB_LIBXEXT + select BR2_PACKAGE_FREETYPE + help + lesstif is the Hungry Programmers' version of OSF/Motif + + http://lesstif.sourceforge.net/ diff --git a/package/lesstif/lesstif.hash b/package/lesstif/lesstif.hash new file mode 100644 index 00000000..31a394db --- /dev/null +++ b/package/lesstif/lesstif.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 eb4aa38858c29a4a3bcf605cfe7d91ca41f4522d78d770f69721e6e3a4ecf7e3 lesstif-0.95.2.tar.bz2 +sha256 94b03f1a60a7fd5007149530626a895a6ef5a8b9342abfd56860c5f3956f5d23 COPYING.LIB diff --git a/package/lesstif/lesstif.mk b/package/lesstif/lesstif.mk new file mode 100644 index 00000000..378c594e --- /dev/null +++ b/package/lesstif/lesstif.mk @@ -0,0 +1,42 @@ +################################################################################ +# +# lesstif +# +################################################################################ + +LESSTIF_VERSION = 0.95.2 +LESSTIF_SOURCE = lesstif-$(LESSTIF_VERSION).tar.bz2 +LESSTIF_SITE = http://downloads.sourceforge.net/project/lesstif/lesstif/$(LESSTIF_VERSION) +LESSTIF_INSTALL_STAGING = YES +LESSTIF_DEPENDENCIES = \ + xlib_libXt \ + xlib_libXext \ + freetype +LESSTIF_LICENSE = LGPL-2.0+ +LESSTIF_LICENSE_FILES = COPYING.LIB +LESSTIF_CONF_OPTS = \ + --with-gnu-ld \ + --with-freetype-config=$(STAGING_DIR)/usr/bin/freetype-config \ + --enable-production=yes \ + --enable-build-tests=no \ + --no-recursion + +# Reduces the buggy makefile to the smallest possible (and working) thing +define LESSTIF_NOMAN2HTML + echo "all:" > $(@D)/doc/Makefile + echo "" >> $(@D)/doc/Makefile + echo "install:" >> $(@D)/doc/Makefile + echo "" >> $(@D)/doc/Makefile + echo "clean:" >> $(@D)/doc/Makefile +endef + +# Prevents to copy ac_find_motif.m4 on target, it would else +# be created at $(TARGET_DIR)/$(HOST_DIR)/share/aclocal/ac_find_motif.m4 +define LESSTIF_FIXACLOCAL + sed -i -e "/install-data-am: install-aclocalDATA/d" $(@D)/scripts/autoconf/Makefile +endef + +LESSTIF_POST_CONFIGURE_HOOKS += LESSTIF_NOMAN2HTML +LESSTIF_POST_CONFIGURE_HOOKS += LESSTIF_FIXACLOCAL + +$(eval $(autotools-package)) diff --git a/package/let-me-create/0001-fix-build-with-musl-C-library.patch b/package/let-me-create/0001-fix-build-with-musl-C-library.patch new file mode 100644 index 00000000..90a72464 --- /dev/null +++ b/package/let-me-create/0001-fix-build-with-musl-C-library.patch @@ -0,0 +1,38 @@ +From 93fbc53a727a49dd5061e44e3156ff2044e6e0b5 Mon Sep 17 00:00:00 2001 +From: Rahul Bedarkar +Date: Tue, 1 Aug 2017 22:44:22 +0530 +Subject: [PATCH] fix build with musl C library + +With musl C library, we get following build error: + +/home/buildroot/autobuild/run/instance-3/output/build/let-me-create-v1.5.2/src/core/spi.c: In function 'spi_transfer': +/home/buildroot/autobuild/run/instance-3/output/build/let-me-create-v1.5.2/src/core/spi.c:170:19: error: '_IOC_SIZEBITS' undeclared (first use in this function) +if (ioctl(fd, SPI_IOC_MESSAGE(1), &tr) < 0) { +^ +/home/buildroot/autobuild/run/instance-3/output/build/let-me-create-v1.5.2/src/core/spi.c:170:19: note: each undeclared identifier is reported only once for each function it appears in + +Include for musl C library compatibility. + +This build issue is detected by Buildroot autobuilder: +http://autobuild.buildroot.net/results/af9/af946fa6fe05ee265e4ac97742b15afeb0cea1ab/ + +Signed-off-by: Rahul Bedarkar rahulbedarkar89@gmail.com +--- +Upstream status: https://github.com/CreatorDev/LetMeCreate/pull/29 + + src/core/spi.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/core/spi.c b/src/core/spi.c +index 4d55cee..9ec7ea9 100644 +--- a/src/core/spi.c ++++ b/src/core/spi.c +@@ -1,4 +1,5 @@ + #include ++#include + #include + #include + #include +-- +2.7.4 + diff --git a/package/let-me-create/Config.in b/package/let-me-create/Config.in new file mode 100644 index 00000000..b0fdc73d --- /dev/null +++ b/package/let-me-create/Config.in @@ -0,0 +1,27 @@ +comment "let-me-create needs a toolchain w/ C++, threads, dynamic library" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS \ + || BR2_STATIC_LIBS + +config BR2_PACKAGE_LET_ME_CREATE + bool "let-me-create" + # build issues in static libs configuration + # see https://github.com/CreatorDev/LetMeCreate/issues/28 + depends on !BR2_STATIC_LIBS + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + help + This library is collection of small wrappers for some + interfaces on the Creator Ci40 board. It aims at making + easier to develop on this platform. It also provides + wrappers for a few clicks. + + https://github.com/CreatorDev/LetMeCreate + +if BR2_PACKAGE_LET_ME_CREATE + +config BR2_PACKAGE_LET_ME_CREATE_EXAMPLES + bool "Build and install examples" + help + Build and install examples + +endif diff --git a/package/let-me-create/let-me-create.hash b/package/let-me-create/let-me-create.hash new file mode 100644 index 00000000..89976178 --- /dev/null +++ b/package/let-me-create/let-me-create.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 5f42858a2062f34d2578e9cb1aed3ccb8d2409d908aa4c41a924418666d5f2bd let-me-create-1.5.2.tar.gz +sha256 8ffc162e1435e810845b09a4c0d534df057a030f4c107778677b6621dc203426 LICENSE diff --git a/package/let-me-create/let-me-create.mk b/package/let-me-create/let-me-create.mk new file mode 100644 index 00000000..faa5e14d --- /dev/null +++ b/package/let-me-create/let-me-create.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# LetMeCreate +# +################################################################################ + +LET_ME_CREATE_VERSION = 1.5.2 +LET_ME_CREATE_SITE = $(call github,CreatorDev,LetMeCreate,v$(LET_ME_CREATE_VERSION)) +LET_ME_CREATE_INSTALL_STAGING = YES +LET_ME_CREATE_LICENSE = BSD-3-Clause +LET_ME_CREATE_LICENSE_FILES = LICENSE + +# pure static build not supported +ifeq ($(BR2_SHARED_LIBS),y) +LET_ME_CREATE_CONF_OPTS += -DBUILD_STATIC=OFF -DBUILD_SHARED=ON +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +LET_ME_CREATE_CONF_OPTS += -DBUILD_STATIC=ON -DBUILD_SHARED=ON +endif + +ifeq ($(BR2_PACKAGE_LET_ME_CREATE_EXAMPLES),y) +LET_ME_CREATE_CONF_OPTS += -DBUILD_EXAMPLES=ON +else +LET_ME_CREATE_CONF_OPTS += -DBUILD_EXAMPLES=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/leveldb/0001-Fix-compilation-with-g-4.8.2.patch b/package/leveldb/0001-Fix-compilation-with-g-4.8.2.patch new file mode 100644 index 00000000..f3921606 --- /dev/null +++ b/package/leveldb/0001-Fix-compilation-with-g-4.8.2.patch @@ -0,0 +1,31 @@ +From 8a8016f6d2af335ab205aa40d5274fc9b0c7a566 Mon Sep 17 00:00:00 2001 +From: Steve James +Date: Sun, 5 Apr 2015 16:29:51 +0200 +Subject: [PATCH 1/2] Fix compilation with g++ 4.8.2 + +Where db_iter.cc fails to get a typedef for ssize_t when compiled by +GCC. + +Upstream-Status: Submitted [https://github.com/google/leveldb/issues/233] + +Signed-off-by: Steve James +Signed-off-by: Thomas Petazzoni +--- + db/db_iter.cc | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/db/db_iter.cc b/db/db_iter.cc +index 3b2035e..c2e5f35 100644 +--- a/db/db_iter.cc ++++ b/db/db_iter.cc +@@ -13,6 +13,7 @@ + #include "util/logging.h" + #include "util/mutexlock.h" + #include "util/random.h" ++#include // for ssize_t + + namespace leveldb { + +-- +2.1.0 + diff --git a/package/leveldb/0002-CMake-install-libmemenv.a.patch b/package/leveldb/0002-CMake-install-libmemenv.a.patch new file mode 100644 index 00000000..ab23a188 --- /dev/null +++ b/package/leveldb/0002-CMake-install-libmemenv.a.patch @@ -0,0 +1,74 @@ +From 2fa960098e5b6f9daa9f7d6cab27188566859be8 Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Sat, 12 Oct 2019 14:43:46 +0200 +Subject: [PATCH] CMake: install libmemenv.a + +Needed for qt5webkit +https://git.busybox.net/buildroot/commit/?id=8a10d9ce311c6cb0490d76921cae55618c258354 +https://git.busybox.net/buildroot/commit/?id=16f847340d07dce620e4c3fc0a099aa79898d86a + +Signed-off-by: Bernd Kuhls +--- + CMakeLists.txt | 26 +++++++++++++++++++++++++- + 1 file changed, 25 insertions(+), 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index a65afbf..83b2425 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -187,6 +187,30 @@ target_sources(leveldb + "${LEVELDB_PUBLIC_INCLUDE_DIR}/write_batch.h" + ) + ++set(libmemenv_a_sources ++ "${PROJECT_SOURCE_DIR}/helpers/memenv/memenv.cc" ++ "${PROJECT_SOURCE_DIR}/helpers/memenv/memenv.h" ++ ) ++add_library(memenv STATIC ${libmemenv_a_sources}) ++target_compile_definitions(memenv ++ PRIVATE ++ # Used by include/export.h when building shared libraries. ++ LEVELDB_COMPILE_LIBRARY ++ # Used by port/port.h. ++ ${LEVELDB_PLATFORM_NAME}=1 ++) ++if (NOT HAVE_CXX17_HAS_INCLUDE) ++ target_compile_definitions(memenv ++ PRIVATE ++ LEVELDB_HAS_PORT_CONFIG_H=1 ++ ) ++endif(NOT HAVE_CXX17_HAS_INCLUDE) ++target_include_directories(memenv ++ PUBLIC ++ $ ++ $ ++) ++ + if (WIN32) + target_sources(leveldb + PRIVATE +@@ -418,7 +436,7 @@ endif(LEVELDB_BUILD_BENCHMARKS) + + if(LEVELDB_INSTALL) + include(GNUInstallDirs) +- install(TARGETS leveldb ++ install(TARGETS leveldb memenv + EXPORT leveldbTargets + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} +@@ -444,6 +462,12 @@ if(LEVELDB_INSTALL) + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/leveldb + ) + ++ install( ++ FILES ++ "${PROJECT_SOURCE_DIR}/helpers/memenv/memenv.h" ++ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/helpers/memenv ++ ) ++ + include(CMakePackageConfigHelpers) + write_basic_package_version_file( + "${PROJECT_BINARY_DIR}/leveldbConfigVersion.cmake" +-- +2.20.1 + diff --git a/package/leveldb/0003-CMakeLists.txt-check-for-atomic-library.patch b/package/leveldb/0003-CMakeLists.txt-check-for-atomic-library.patch new file mode 100644 index 00000000..98609b6b --- /dev/null +++ b/package/leveldb/0003-CMakeLists.txt-check-for-atomic-library.patch @@ -0,0 +1,49 @@ +From 9e82eb57870ec7c01734b44ed4bb994362004df3 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Fri, 27 Dec 2019 10:20:53 +0100 +Subject: [PATCH] CMakeLists.txt: check for atomic library + +On some architectures, atomic binutils are provided by the libatomic +library from gcc. Linking with libatomic is therefore necessary, +otherwise the build fails with: + +[100%] Linking CXX executable leveldbutil +/home/fabrice/buildroot/output/host/opt/ext-toolchain/bin/../lib/gcc/sparc-buildroot-linux-uclibc/7.4.0/../../../../sparc-buildroot-linux-uclibc/bin/ld: libleveldb.a(env_posix.cc.o): in function `leveldb::(anonymous namespace)::Limiter::Acquire()': +env_posix.cc:(.text+0x124): undefined reference to `__atomic_fetch_sub_4' + +This is often for example the case on sparcv8 32 bit. + +Fixes: + - http://autobuild.buildroot.org/results/01d5a50581ac9e9b46f40e6f9665f74897db5e6f + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/google/leveldb/pull/765] +--- + CMakeLists.txt | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index be41ba4..9d6773f 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -41,6 +41,7 @@ include(CheckIncludeFile) + check_include_file("unistd.h" HAVE_UNISTD_H) + + include(CheckLibraryExists) ++check_library_exists(atomic __atomic_fetch_add_4 "" HAVE_ATOMIC) + check_library_exists(crc32c crc32c_value "" HAVE_CRC32C) + check_library_exists(snappy snappy_compress "" HAVE_SNAPPY) + check_library_exists(tcmalloc malloc "" HAVE_TCMALLOC) +@@ -270,6 +271,9 @@ if(HAVE_CLANG_THREAD_SAFETY) + -Werror -Wthread-safety) + endif(HAVE_CLANG_THREAD_SAFETY) + ++if(HAVE_ATOMIC) ++ target_link_libraries(leveldb atomic) ++endif(HAVE_ATOMIC) + if(HAVE_CRC32C) + target_link_libraries(leveldb crc32c) + endif(HAVE_CRC32C) +-- +2.24.0 + diff --git a/package/leveldb/0004-cmake-Use-find_package-to-find-Snappy.patch b/package/leveldb/0004-cmake-Use-find_package-to-find-Snappy.patch new file mode 100644 index 00000000..2626e886 --- /dev/null +++ b/package/leveldb/0004-cmake-Use-find_package-to-find-Snappy.patch @@ -0,0 +1,98 @@ +From 450c1d88b3e1af34614294830b4dc0612d198d26 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Pawe=C5=82=20Bylica?= +Date: Wed, 8 May 2019 10:42:03 +0200 +Subject: [PATCH] cmake: Use find_package() to find Snappy + +Upstream: https://github.com/google/leveldb/pull/686/commits/3e73a396a082efc76e065ae974fe18c3bb27219d +[Thomas: this commit allows to fix the detection of the snappy library +in static link configurations] +Signed-off-by: Thomas Petazzoni +--- + CMakeLists.txt | 12 ++++++++---- + cmake/FindSnappy.cmake | 31 +++++++++++++++++++++++++++++++ + 2 files changed, 39 insertions(+), 4 deletions(-) + create mode 100644 cmake/FindSnappy.cmake + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 78fead6..2efccda 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -6,6 +6,9 @@ cmake_minimum_required(VERSION 3.9) + # Keep the version below in sync with the one in db.h + project(leveldb VERSION 1.22.0 LANGUAGES C CXX) + ++# Include local CMake modules. ++list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) ++ + # This project can use C11, but will gracefully decay down to C89. + set(CMAKE_C_STANDARD 11) + set(CMAKE_C_STANDARD_REQUIRED OFF) +@@ -31,13 +34,14 @@ option(LEVELDB_INSTALL "Install LevelDB's header and library" ON) + include(TestBigEndian) + test_big_endian(LEVELDB_IS_BIG_ENDIAN) + ++find_package(Snappy) ++ + include(CheckIncludeFile) + check_include_file("unistd.h" HAVE_UNISTD_H) + + include(CheckLibraryExists) + check_library_exists(atomic __atomic_fetch_add_4 "" HAVE_ATOMIC) + check_library_exists(crc32c crc32c_value "" HAVE_CRC32C) +-check_library_exists(snappy snappy_compress "" HAVE_SNAPPY) + check_library_exists(tcmalloc malloc "" HAVE_TCMALLOC) + + include(CheckCXXSymbolExists) +@@ -276,9 +280,9 @@ endif(HAVE_ATOMIC) + if(HAVE_CRC32C) + target_link_libraries(leveldb crc32c) + endif(HAVE_CRC32C) +-if(HAVE_SNAPPY) +- target_link_libraries(leveldb snappy) +-endif(HAVE_SNAPPY) ++if(TARGET Snappy::snappy) ++ target_link_libraries(leveldb Snappy::snappy) ++endif() + if(HAVE_TCMALLOC) + target_link_libraries(leveldb tcmalloc) + endif(HAVE_TCMALLOC) +diff --git a/cmake/FindSnappy.cmake b/cmake/FindSnappy.cmake +new file mode 100644 +index 0000000..88c1de9 +--- /dev/null ++++ b/cmake/FindSnappy.cmake +@@ -0,0 +1,31 @@ ++# Copyright 2019 The LevelDB Authors. All rights reserved. ++# Use of this source code is governed by a BSD-style license that can be ++# found in the LICENSE file. See the AUTHORS file for names of contributors. ++ ++find_library(SNAPPY_LIBRARY ++ NAMES snappy ++ HINTS ${SNAPPY_ROOT_DIR}/lib ++) ++ ++find_path(SNAPPY_INCLUDE_DIR ++ NAMES snappy.h ++ HINTS ${SNAPPY_ROOT_DIR}/include ++) ++ ++include(FindPackageHandleStandardArgs) ++find_package_handle_standard_args(Snappy DEFAULT_MSG SNAPPY_LIBRARY SNAPPY_INCLUDE_DIR) ++ ++mark_as_advanced(SNAPPY_LIBRARY SNAPPY_INCLUDE_DIR) ++ ++if(SNAPPY_FOUND) ++ set(HAVE_SNAPPY TRUE) # For compatibity with generating port_config.h. ++ ++ # Add imported targets. ++ # Follow the package naming convetion 'Snappy::' from ++ # https://github.com/google/snappy/blob/master/CMakeLists.txt#L211. ++ add_library(Snappy::snappy UNKNOWN IMPORTED) ++ set_target_properties(Snappy::snappy PROPERTIES ++ IMPORTED_LOCATION ${SNAPPY_LIBRARY} ++ INTERFACE_INCLUDE_DIRECTORIES ${SNAPPY_INCLUDE_DIR} ++ ) ++endif() +-- +2.26.2 + diff --git a/package/leveldb/Config.in b/package/leveldb/Config.in new file mode 100644 index 00000000..c4279fcb --- /dev/null +++ b/package/leveldb/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_LEVELDB + bool "leveldb" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11 + depends on BR2_TOOLCHAIN_HAS_THREADS + help + LevelDB is a fast key-value storage library written at Google + that provides an ordered mapping from string keys to string + values. + + https://github.com/google/leveldb + +comment "leveldb needs a toolchain w/ C++, threads, gcc >= 4.8" + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_HAS_THREADS || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 diff --git a/package/leveldb/leveldb.hash b/package/leveldb/leveldb.hash new file mode 100644 index 00000000..c4a8499d --- /dev/null +++ b/package/leveldb/leveldb.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 55423cac9e3306f4a9502c738a001e4a339d1a38ffbee7572d4a07d5d63949b2 leveldb-1.22.tar.gz +sha256 ccc19f1da0798ed666609b65a5b44dd8b3abe6fc08b9c0592eb76e82e174db19 LICENSE diff --git a/package/leveldb/leveldb.mk b/package/leveldb/leveldb.mk new file mode 100644 index 00000000..684b6186 --- /dev/null +++ b/package/leveldb/leveldb.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# leveldb +# +################################################################################ + +LEVELDB_VERSION = 1.22 +LEVELDB_SITE = $(call github,google,leveldb,$(LEVELDB_VERSION)) +LEVELDB_LICENSE = BSD-3-Clause +LEVELDB_LICENSE_FILES = LICENSE +LEVELDB_INSTALL_STAGING = YES +LEVELDB_CONF_OPTS = \ + -DLEVELDB_BUILD_BENCHMARKS=OFF \ + -DLEVELDB_BUILD_TESTS=OFF + +ifeq ($(BR2_PACKAGE_SNAPPY),y) +LEVELDB_DEPENDENCIES += snappy +endif + +$(eval $(cmake-package)) diff --git a/package/lft/Config.in b/package/lft/Config.in new file mode 100644 index 00000000..9ed7b8bd --- /dev/null +++ b/package/lft/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LFT + bool "lft" + select BR2_PACKAGE_LIBPCAP + help + LFT, short for Layer Four Traceroute, is a sort of + 'traceroute' that often works much faster (than the + commonly-used Van Jacobson method) and goes through many + configurations of packet-filters (firewalls). + + http://pwhois.org/lft/ diff --git a/package/lft/lft.hash b/package/lft/lft.hash new file mode 100644 index 00000000..91a1fb06 --- /dev/null +++ b/package/lft/lft.hash @@ -0,0 +1,5 @@ +# From http://pwhois.org/lft/ +md5 31b15aabc619707427a73657512560f8 lft-3.8.tar.gz +# Locally calculated +sha256 10f427e77b0f8207817329bd8ef0310078434612620073369264d15e6f97e990 lft-3.8.tar.gz +sha256 e3b7634630e6800eccca6ecafb5d40153d4f8f7a20e2b2399bf3c0ea92f44614 COPYING diff --git a/package/lft/lft.mk b/package/lft/lft.mk new file mode 100644 index 00000000..5154c83f --- /dev/null +++ b/package/lft/lft.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# lft +# +################################################################################ + +LFT_VERSION = 3.8 +LFT_SITE = http://pwhois.org/get +LFT_DEPENDENCIES = libpcap +LFT_LICENSE = VOSTROM Public License for Open Source +LFT_LICENSE_FILES = COPYING +LFT_CONF_OPTS = --with-pcap=$(STAGING_DIR)/usr +LFT_MAKE_ENV = STRIP=true + +ifeq ($(BR2_STATIC_LIBS),y) +LFT_CONF_OPTS += LIBS="`$(STAGING_DIR)/usr/bin/pcap-config --static --additional-libs`" +endif + +$(eval $(autotools-package)) diff --git a/package/lftp/Config.in b/package/lftp/Config.in new file mode 100644 index 00000000..ebe8882e --- /dev/null +++ b/package/lftp/Config.in @@ -0,0 +1,67 @@ +config BR2_PACKAGE_LFTP + bool "lftp" + depends on BR2_USE_WCHAR + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_READLINE + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_OPENSSL if !BR2_PACKAGE_GNUTLS + help + LFTP is a sophisticated ftp/http client, and a file transfer + program supporting a number of network protocols. Like BASH, + it has job control and uses the readline library for input. It + has bookmarks, a built-in mirror command, and can transfer + several files in parallel. + It was designed with reliability in mind. + + http://lftp.yar.ru/ + +if BR2_PACKAGE_LFTP + +comment "Commands" + +config BR2_PACKAGE_LFTP_CMD_MIRROR + bool "Mirror command" + default y + help + Enable mirror command + +config BR2_PACKAGE_LFTP_CMD_SLEEP + bool "Sleep command" + default y + help + Enable sleep command + +config BR2_PACKAGE_LFTP_CMD_TORRENT + bool "Torrent command" + help + Enable torrent command + +comment "Protocols" + +config BR2_PACKAGE_LFTP_PROTO_FISH + bool "FISH protocol" + help + Enable FISH protocol + +config BR2_PACKAGE_LFTP_PROTO_FTP + bool "FTP protocol" + default y + help + Enable FTP protocol + +config BR2_PACKAGE_LFTP_PROTO_HTTP + bool "HTTP protocol" + help + Enable HTTP protocol + +config BR2_PACKAGE_LFTP_PROTO_SFTP + bool "SFTP protocol" + help + Enable SFTP protocol + +endif # BR2_PACKAGE_LFTP + +comment "lftp requires a toolchain w/ C++, wchar" + depends on BR2_USE_MMU + depends on !(BR2_USE_WCHAR && BR2_INSTALL_LIBSTDCPP) diff --git a/package/lftp/lftp.hash b/package/lftp/lftp.hash new file mode 100644 index 00000000..e4c3305c --- /dev/null +++ b/package/lftp/lftp.hash @@ -0,0 +1,7 @@ +# From http://lftp.yar.ru/ftp/lftp-4.9.2.md5sum +md5 b3a272ecb7a2b60e3827776f90ffb2f3 lftp-4.9.2.tar.xz +# Locally calculated after checking gpg signature +sha256 c517c4f4f9c39bd415d7313088a2b1e313b2d386867fe40b7692b83a20f0670d lftp-4.9.2.tar.xz + +# Hash for license file: +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/lftp/lftp.mk b/package/lftp/lftp.mk new file mode 100644 index 00000000..00b33b91 --- /dev/null +++ b/package/lftp/lftp.mk @@ -0,0 +1,77 @@ +################################################################################ +# +# lftp +# +################################################################################ + +LFTP_VERSION = 4.9.2 +LFTP_SOURCE = lftp-$(LFTP_VERSION).tar.xz +LFTP_SITE = http://lftp.yar.ru/ftp +LFTP_LICENSE = GPL-3.0+ +LFTP_LICENSE_FILES = COPYING +LFTP_CPE_ID_VENDOR = lftp_project +LFTP_DEPENDENCIES = readline zlib host-pkgconf + +# Help lftp finding readline and zlib +LFTP_CONF_OPTS = \ + --with-readline=$(STAGING_DIR)/usr \ + --with-readline-lib="`$(PKG_CONFIG_HOST_BINARY) --libs readline`" \ + --with-zlib=$(STAGING_DIR)/usr + +ifneq ($(BR2_STATIC_LIBS),y) +LFTP_CONF_OPTS += --with-modules +endif + +ifeq ($(BR2_PACKAGE_EXPAT)$(BR2_PACKAGE_LFTP_PROTO_HTTP),yy) +LFTP_DEPENDENCIES += expat +LFTP_CONF_OPTS += --with-expat=$(STAGING_DIR)/usr +else +LFTP_CONF_OPTS += --without-expat +endif + +ifeq ($(BR2_PACKAGE_GNUTLS),y) +LFTP_DEPENDENCIES += gnutls +LFTP_CONF_OPTS += --with-gnutls +else +LFTP_CONF_OPTS += --without-gnutls +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +LFTP_DEPENDENCIES += openssl +LFTP_CONF_OPTS += --with-openssl +else +LFTP_CONF_OPTS += --without-openssl +endif + +ifeq ($(BR2_PACKAGE_LIBIDN2),y) +LFTP_DEPENDENCIES += libidn2 +LFTP_CONF_OPTS += --with-libidn2=$(STAGING_DIR)/usr +else +LFTP_CONF_OPTS += --without-libidn2 +endif + +# Remove /usr/share/lftp +define LFTP_REMOVE_DATA + $(RM) -fr $(TARGET_DIR)/usr/share/lftp +endef + +LFTP_POST_INSTALL_TARGET_HOOKS += LFTP_REMOVE_DATA + +# Optional commands and protocols +LFTP_MODULES_TO_REMOVE-$(BR2_PACKAGE_LFTP_CMD_MIRROR) += cmd-mirror.so +LFTP_MODULES_TO_REMOVE-$(BR2_PACKAGE_LFTP_CMD_SLEEP) += cmd-sleep.so +LFTP_MODULES_TO_REMOVE-$(BR2_PACKAGE_LFTP_CMD_TORRENT) += cmd-torrent.so +LFTP_MODULES_TO_REMOVE-$(BR2_PACKAGE_LFTP_PROTO_FISH) += proto-fish.so +LFTP_MODULES_TO_REMOVE-$(BR2_PACKAGE_LFTP_PROTO_FTP) += proto-ftp.so +LFTP_MODULES_TO_REMOVE-$(BR2_PACKAGE_LFTP_PROTO_HTTP) += proto-http.so +LFTP_MODULES_TO_REMOVE-$(BR2_PACKAGE_LFTP_PROTO_SFTP) += proto-sftp.so + +define LFTP_REMOVE_MODULES + for f in $(LFTP_MODULES_TO_REMOVE-) ; do \ + $(RM) -f $(TARGET_DIR)/usr/lib/lftp/$(LFTP_VERSION)/$$f ; \ + done +endef + +LFTP_POST_INSTALL_TARGET_HOOKS += LFTP_REMOVE_MODULES + +$(eval $(autotools-package)) diff --git a/package/libaacs/0001-read_file.h-include-sys-types.h.patch b/package/libaacs/0001-read_file.h-include-sys-types.h.patch new file mode 100644 index 00000000..9bb1e045 --- /dev/null +++ b/package/libaacs/0001-read_file.h-include-sys-types.h.patch @@ -0,0 +1,36 @@ +From 1fb08a352afada589f0b93af7a07c6fcd6da9bb8 Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Mon, 21 Sep 2020 20:19:38 +0200 +Subject: [PATCH] read_file.h: include sys/types.h +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Fixes build error with uClibc and gcc-8.3.0: + +In file included from src/devtools/uk_dump.c:28: +src/devtools/read_file.h:24:44: error: unknown type name ‘off_t’ + static size_t _read_file(const char *name, off_t min_size, off_t max_size, uint8_t **pdata) + +Upstream status: pending + +Signed-off-by: Bernd Kuhls +--- + src/devtools/read_file.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/devtools/read_file.h b/src/devtools/read_file.h +index 953b2ef..a5d185c 100644 +--- a/src/devtools/read_file.h ++++ b/src/devtools/read_file.h +@@ -19,6 +19,7 @@ + + #include + #include ++#include + #include + + static size_t _read_file(const char *name, off_t min_size, off_t max_size, uint8_t **pdata) +-- +2.27.0 + diff --git a/package/libaacs/Config.in b/package/libaacs/Config.in new file mode 100644 index 00000000..d59b6da6 --- /dev/null +++ b/package/libaacs/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_LIBAACS + bool "libaacs" + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgcrypt + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_LIBGCRYPT + help + libaacs is a research project to implement the Advanced Access + Content System specification. + NB: this project doesn't offer any key or certificate that + could be used to decode encrypted copyrighted material. + + http://www.videolan.org/developers/libaacs.html + +comment "libaacs needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/libaacs/libaacs.hash b/package/libaacs/libaacs.hash new file mode 100644 index 00000000..62e389f2 --- /dev/null +++ b/package/libaacs/libaacs.hash @@ -0,0 +1,5 @@ +# From http://download.videolan.org/pub/videolan/libaacs/0.11.0/libaacs-0.11.0.tar.bz2.sha512 +sha512 167edbb6f26599e41d6084908039bf902f69f57da1f64f1491734157d1568ad0b32c8ea3064e0706e383af8dc6007eef65170b2b47222bf3d363e395e0b60388 libaacs-0.11.0.tar.bz2 + +# Hash for license file: +sha256 592987e8510228d546540b84a22444bde98e48d03078d3b2eefcd889bec5ce8c COPYING diff --git a/package/libaacs/libaacs.mk b/package/libaacs/libaacs.mk new file mode 100644 index 00000000..3e0df180 --- /dev/null +++ b/package/libaacs/libaacs.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# libaacs +# +################################################################################ + +LIBAACS_VERSION = 0.11.0 +LIBAACS_SITE = http://download.videolan.org/pub/videolan/libaacs/$(LIBAACS_VERSION) +LIBAACS_SOURCE = libaacs-$(LIBAACS_VERSION).tar.bz2 +LIBAACS_LICENSE = LGPL-2.1+ +LIBAACS_LICENSE_FILES = COPYING +LIBAACS_INSTALL_STAGING = YES +LIBAACS_DEPENDENCIES = host-bison host-flex libgcrypt +LIBAACS_CONF_OPTS = \ + --disable-werror \ + --disable-extra-warnings \ + --disable-optimizations \ + --disable-examples \ + --disable-debug \ + --with-gnu-ld \ + --with-libgcrypt-prefix=$(STAGING_DIR)/usr \ + --with-gpg-error-prefix=$(STAGING_DIR)/usr + +$(eval $(autotools-package)) diff --git a/package/libabseil-cpp/0001-force-position-independent-code.patch b/package/libabseil-cpp/0001-force-position-independent-code.patch new file mode 100644 index 00000000..6bf46bf0 --- /dev/null +++ b/package/libabseil-cpp/0001-force-position-independent-code.patch @@ -0,0 +1,38 @@ +From d170b19e500d85381369e379771be8d7816bcc92 Mon Sep 17 00:00:00 2001 +From: Adam Duskett +Date: Tue, 21 Jul 2020 13:08:50 -0700 +Subject: [PATCH] force position independent code + +Without this option, programs building for arm64 or x86-64 will fail when +attempting to link to the built libraries with the following (abbreviated) +error: + +"relocation against `.rodata' can not be used when making a shared object; +recompile with -fPIC." + +Because libabseil-cpp builds static libraries, it is better to set the +POSITION_INDEPENDENT_CODE to ON instead of forcing fPIC, as forcing fPIC may +cause relocation errors when shared libraries link against the built static +libraries. + +Signed-off-by: Adam Duskett +--- + CMake/AbseilHelpers.cmake | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/CMake/AbseilHelpers.cmake b/CMake/AbseilHelpers.cmake +index 86ff9eb..bdb7a89 100644 +--- a/CMake/AbseilHelpers.cmake ++++ b/CMake/AbseilHelpers.cmake +@@ -209,6 +209,8 @@ function(absl_cc_library) + set_property(TARGET ${_NAME} PROPERTY CXX_STANDARD ${ABSL_CXX_STANDARD}) + set_property(TARGET ${_NAME} PROPERTY CXX_STANDARD_REQUIRED ON) + ++ # Without this setting, other programs such as GRPC will fail when linking. ++ set_property(TARGET ${_NAME} PROPERTY POSITION_INDEPENDENT_CODE ON) + # When being installed, we lose the absl_ prefix. We want to put it back + # to have properly named lib files. This is a no-op when we are not being + # installed. +-- +2.26.2 + diff --git a/package/libabseil-cpp/Config.in b/package/libabseil-cpp/Config.in new file mode 100644 index 00000000..222e3a09 --- /dev/null +++ b/package/libabseil-cpp/Config.in @@ -0,0 +1,33 @@ +# see absl/debugging/internal/examine_stack.cc for the list of +# architectures that are supported, and for which ucontext is used. +config BR2_PACKAGE_LIBABSEIL_CPP_ARCH_SUPPORTS + bool + default y if BR2_aarch64 || BR2_aarch64_be + default y if BR2_arm || BR2_armeb + default y if BR2_i386 + default y if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el + default y if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le + default y if BR2_riscv + default y if BR2_x86_64 + depends on BR2_TOOLCHAIN_HAS_UCONTEXT + +config BR2_PACKAGE_LIBABSEIL_CPP + bool "libabseil-cpp" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS # uses dlfcn.h + depends on BR2_PACKAGE_LIBABSEIL_CPP_ARCH_SUPPORTS + help + Abseil is an open-source collection of C++ library code + designed to augment the C++ standard library. The Abseil + library code is collected from Google's own C++ code base, + has been extensively tested and used in production, and is + the same code we depend on in our daily coding lives. + + https://github.com/abseil/abseil-cpp + +comment "libabseil-cpp needs a toolchain w/ gcc >= 4.9, C++, threads, dynamic library" + depends on BR2_PACKAGE_LIBABSEIL_CPP_ARCH_SUPPORTS + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/libabseil-cpp/libabseil-cpp.hash b/package/libabseil-cpp/libabseil-cpp.hash new file mode 100644 index 00000000..b1760435 --- /dev/null +++ b/package/libabseil-cpp/libabseil-cpp.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 ebe2ad1480d27383e4bf4211e2ca2ef312d5e6a09eba869fd2e8a5c5d553ded2 libabseil-cpp-20200923.3.tar.gz +sha256 c79a7fea0e3cac04cd43f20e7b648e5a0ff8fa5344e644b0ee09ca1162b62747 LICENSE diff --git a/package/libabseil-cpp/libabseil-cpp.mk b/package/libabseil-cpp/libabseil-cpp.mk new file mode 100644 index 00000000..d614a5e5 --- /dev/null +++ b/package/libabseil-cpp/libabseil-cpp.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# libabseil-cpp +# +################################################################################ + +LIBABSEIL_CPP_VERSION = 20200923.3 +LIBABSEIL_CPP_SITE = $(call github,abseil,abseil-cpp,$(LIBABSEIL_CPP_VERSION)) +LIBABSEIL_CPP_LICENSE = Apache-2.0 +LIBABSEIL_CPP_LICENSE_FILES = LICENSE +LIBABSEIL_CPP_INSTALL_STAGING = YES + +LIBABSEIL_CPP_CONF_OPTS = \ + -DCMAKE_CXX_STANDARD=11 \ + -DABSL_ENABLE_INSTALL=ON \ + -DABSL_USE_GOOGLETEST_HEAD=OFF \ + -DABSL_RUN_TESTS=OFF + +HOST_LIBABSEIL_CPP_CONF_OPTS = \ + -DCMAKE_CXX_STANDARD=11 \ + -DABSL_ENABLE_INSTALL=ON \ + -DABSL_USE_GOOGLETEST_HEAD=OFF \ + -DABSL_RUN_TESTS=OFF + +$(eval $(cmake-package)) +$(eval $(host-cmake-package)) diff --git a/package/libaio/Config.in b/package/libaio/Config.in new file mode 100644 index 00000000..eed843f4 --- /dev/null +++ b/package/libaio/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LIBAIO + bool "libaio" + help + Library for doing asynchronous I/O + + https://pagure.io/libaio/ diff --git a/package/libaio/libaio.hash b/package/libaio/libaio.hash new file mode 100644 index 00000000..ac815a73 --- /dev/null +++ b/package/libaio/libaio.hash @@ -0,0 +1,5 @@ +# From https://releases.pagure.org/libaio/CHECKSUMS +sha256 ab0462f2c9d546683e5147b1ce9c195fe95d07fac5bf362f6c01637955c3b492 libaio-0.3.112.tar.gz + +# Hash for license file: +sha256 5bbcbb737e60fe9deba08ecbd00920cfcc3403ba2e534c64fdeea49d6bb87509 COPYING diff --git a/package/libaio/libaio.mk b/package/libaio/libaio.mk new file mode 100644 index 00000000..34f08b75 --- /dev/null +++ b/package/libaio/libaio.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# libaio +# +################################################################################ + +LIBAIO_VERSION = 0.3.112 +LIBAIO_SITE = https://releases.pagure.org/libaio +LIBAIO_INSTALL_STAGING = YES +LIBAIO_LICENSE = LGPL-2.1+ +LIBAIO_LICENSE_FILES = COPYING + +LIBAIO_CONFIGURE_OPTS = $(TARGET_CONFIGURE_OPTS) + +ifeq ($(BR2_STATIC_LIBS),y) +LIBAIO_CONFIGURE_OPTS += ENABLE_SHARED=0 +endif + +define LIBAIO_BUILD_CMDS + $(LIBAIO_CONFIGURE_OPTS) $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define LIBAIO_INSTALL_STAGING_CMDS + $(LIBAIO_CONFIGURE_OPTS) $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install +endef + +define LIBAIO_INSTALL_TARGET_CMDS + $(LIBAIO_CONFIGURE_OPTS) $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +define HOST_LIBAIO_BUILD_CMDS + $(HOST_CONFIGURE_OPTS) $(HOST_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define HOST_LIBAIO_INSTALL_CMDS + $(HOST_CONFIGURE_OPTS) $(HOST_MAKE_ENV) $(MAKE) -C $(@D) prefix=$(HOST_DIR) install +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/libao/Config.in b/package/libao/Config.in new file mode 100644 index 00000000..1fab6d9b --- /dev/null +++ b/package/libao/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBAO + bool "libao" + help + Libao is a cross-platform audio library that allows programs + to output audio using a simple API on a wide variety of + platforms. + + http://www.xiph.org/ao/ diff --git a/package/libao/libao.hash b/package/libao/libao.hash new file mode 100644 index 00000000..dced3ddd --- /dev/null +++ b/package/libao/libao.hash @@ -0,0 +1,5 @@ +# From http://downloads.xiph.org/releases/ao/SHA256SUMS.txt +sha256 03ad231ad1f9d64b52474392d63c31197b0bc7bd416e58b1c10a329a5ed89caf libao-1.2.0.tar.gz + +# Hash for license file: +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/libao/libao.mk b/package/libao/libao.mk new file mode 100644 index 00000000..19a4c165 --- /dev/null +++ b/package/libao/libao.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# libao +# +################################################################################ + +LIBAO_VERSION = 1.2.0 +LIBAO_SITE = http://downloads.xiph.org/releases/ao +LIBAO_DEPENDENCIES = host-pkgconf +LIBAO_INSTALL_STAGING = YES +LIBAO_LICENSE = GPL-2.0+ +LIBAO_LICENSE_FILES = COPYING +LIBAO_CPE_ID_VENDOR = xiph +LIBAO_CONF_OPTS = \ + --disable-esd \ + --disable-wmm \ + --disable-arts \ + --disable-nas \ + --disable-pulse \ + --disable-broken-oss + +ifeq ($(BR2_PACKAGE_ALSA_LIB),y) +LIBAO_DEPENDENCIES += alsa-lib +LIBAO_CONF_OPTS += --enable-alsa --enable-alsa-mmap + +# Remove the OSS plugin if ALSA is enabled, as libao will prefer ALSA anyway +define LIBAO_REMOVE_OSS_PLUGIN + rm -f $(TARGET_DIR)/usr/lib/ao/plugins-4/liboss.so +endef +LIBAO_POST_INSTALL_TARGET_HOOKS += LIBAO_REMOVE_OSS_PLUGIN +else +LIBAO_CONF_OPTS += --disable-alsa +endif + +$(eval $(autotools-package)) diff --git a/package/libapparmor/Config.in b/package/libapparmor/Config.in new file mode 100644 index 00000000..dbfd2dc4 --- /dev/null +++ b/package/libapparmor/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_LIBAPPARMOR + bool "libapparmor" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16 + help + AppArmor is an effective and easy-to-use Linux application + security system. AppArmor proactively protects the operating + system and applications from external or internal threats, + even zero-day attacks, by enforcing good behavior and + preventing even unknown application flaws from being + exploited. + + This package installs only the library. + + http://wiki.apparmor.net + +comment "libapparmor needs a toolchain w/ headers >= 3.16, threads" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_TOOLCHAIN_HAS_THREADS \ + || !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16 diff --git a/package/libapparmor/libapparmor.hash b/package/libapparmor/libapparmor.hash new file mode 100644 index 00000000..37e1ff52 --- /dev/null +++ b/package/libapparmor/libapparmor.hash @@ -0,0 +1,6 @@ +# From: https://gitlab.com/apparmor/apparmor/-/wikis/home#userspace +sha256 8fada772d9a60989525594346d9aa22af938daafc1781adce9a1acb3c75bdf24 apparmor-3.0.1.tar.gz + +# locally computed +sha256 a7e0cdcbea5c14927cedfc600d46526bdcbb1eb0a4d951e2ea53c2a6de159cb4 LICENSE +sha256 6095e9ffa777dd22839f7801aa845b31c9ed07f3d6bf8a26dc5d2dec8ccc0ef3 libraries/libapparmor/COPYING.LGPL diff --git a/package/libapparmor/libapparmor.mk b/package/libapparmor/libapparmor.mk new file mode 100644 index 00000000..255432e4 --- /dev/null +++ b/package/libapparmor/libapparmor.mk @@ -0,0 +1,48 @@ +################################################################################ +# +# libapparmor +# +################################################################################ + +# When updating the version here, please also update the apparmor package +LIBAPPARMOR_VERSION_MAJOR = 3.0 +LIBAPPARMOR_VERSION = $(LIBAPPARMOR_VERSION_MAJOR).1 +LIBAPPARMOR_SOURCE = apparmor-$(LIBAPPARMOR_VERSION).tar.gz +LIBAPPARMOR_SITE = https://launchpad.net/apparmor/$(LIBAPPARMOR_VERSION_MAJOR)/$(LIBAPPARMOR_VERSION)/+download +LIBAPPARMOR_LICENSE = LGPL-2.1 +LIBAPPARMOR_LICENSE_FILES = LICENSE libraries/libapparmor/COPYING.LGPL + +LIBAPPARMOR_DEPENDENCIES = host-bison host-flex host-pkgconf +LIBAPPARMOR_SUBDIR = libraries/libapparmor +LIBAPPARMOR_INSTALL_STAGING = YES + +# Patches 0001 and 0002 touch Makefile.am and an m4 file +LIBAPPARMOR_AUTORECONF = YES + +# Most AppArmor tools will want to link to the static lib. +# ac_cv_prog_cc_c99 is required for BR2_USE_WCHAR=n because the C99 test +# provided by autoconf relies on wchar_t. +LIBAPPARMOR_CONF_OPTS = \ + ac_cv_prog_cc_c99=-std=gnu99 \ + --enable-static \ + --disable-man-pages + +ifeq ($(BR2_PACKAGE_PYTHON3),y) +LIBAPPARMOR_DEPENDENCIES += host-python3 host-swig python3 +LIBAPPARMOR_CONF_OPTS += \ + --with-python \ + PYTHON=$(HOST_DIR)/usr/bin/python3 \ + PYTHON_CONFIG=$(STAGING_DIR)/usr/bin/python3-config \ + SWIG=$(SWIG) +else +LIBAPPARMOR_CONF_OPTS += --without-python +endif + +define LIBAPPARMOR_LINUX_CONFIG_FIXUPS + $(call KCONFIG_ENABLE_OPT,CONFIG_AUDIT) + $(call KCONFIG_ENABLE_OPT,CONFIG_SECURITY) + $(call KCONFIG_ENABLE_OPT,CONFIG_SECURITY_APPARMOR) + $(call KCONFIG_ENABLE_OPT,CONFIG_DEFAULT_SECURITY_APPARMOR) +endef + +$(eval $(autotools-package)) diff --git a/package/libarchive/Config.in b/package/libarchive/Config.in new file mode 100644 index 00000000..fd429acb --- /dev/null +++ b/package/libarchive/Config.in @@ -0,0 +1,33 @@ +comment "libarchive needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR + +config BR2_PACKAGE_LIBARCHIVE + bool "libarchive" + depends on BR2_USE_WCHAR + help + Libarchive is a reusable C library for reading and writing a + variety of streaming archive formats. + + http://www.libarchive.org/ + +if BR2_PACKAGE_LIBARCHIVE + +config BR2_PACKAGE_LIBARCHIVE_BSDTAR + bool "bsdtar" + help + The 'bsdtar' program is a full-featured 'tar' + replacement built on libarchive. + +config BR2_PACKAGE_LIBARCHIVE_BSDCPIO + bool "bsdcpio" + help + The 'bsdcpio' program is a different interface to + essentially the same functionality as 'bsdtar'. + +config BR2_PACKAGE_LIBARCHIVE_BSDCAT + bool "bsdcat" + help + The 'bsdcat' program is a simple replacement tool + for zcat, bzcat, xzcat, and such. + +endif diff --git a/package/libarchive/libarchive.hash b/package/libarchive/libarchive.hash new file mode 100644 index 00000000..bf0d6e4f --- /dev/null +++ b/package/libarchive/libarchive.hash @@ -0,0 +1,4 @@ +# From https://www.libarchive.de/downloads/sha256sums +sha256 9015d109ec00bb9ae1a384b172bf2fc1dff41e2c66e5a9eeddf933af9db37f5a libarchive-3.5.1.tar.gz +# Locally computed: +sha256 b2cdf763345de2de34cebf54394df3c61a105c3b71288603c251f2fa638200ba COPYING diff --git a/package/libarchive/libarchive.mk b/package/libarchive/libarchive.mk new file mode 100644 index 00000000..9cc69fd4 --- /dev/null +++ b/package/libarchive/libarchive.mk @@ -0,0 +1,157 @@ +################################################################################ +# +# libarchive +# +################################################################################ + +LIBARCHIVE_VERSION = 3.5.1 +LIBARCHIVE_SITE = https://www.libarchive.de/downloads +LIBARCHIVE_INSTALL_STAGING = YES +LIBARCHIVE_LICENSE = BSD-2-Clause, BSD-3-Clause, CC0-1.0, OpenSSL, Apache-2.0 +LIBARCHIVE_LICENSE_FILES = COPYING +LIBARCHIVE_CPE_ID_VENDOR = libarchive + +ifeq ($(BR2_PACKAGE_LIBARCHIVE_BSDTAR),y) +ifeq ($(BR2_STATIC_LIBS),y) +LIBARCHIVE_CONF_OPTS += --enable-bsdtar=static +else +LIBARCHIVE_CONF_OPTS += --enable-bsdtar=shared +endif +else +LIBARCHIVE_CONF_OPTS += --disable-bsdtar +endif + +ifeq ($(BR2_PACKAGE_LIBARCHIVE_BSDCPIO),y) +ifeq ($(BR2_STATIC_LIBS),y) +LIBARCHIVE_CONF_OPTS += --enable-bsdcpio=static +else +LIBARCHIVE_CONF_OPTS += --enable-bsdcpio=shared +endif +else +LIBARCHIVE_CONF_OPTS += --disable-bsdcpio +endif + +ifeq ($(BR2_PACKAGE_LIBARCHIVE_BSDCAT),y) +ifeq ($(BR2_STATIC_LIBS),y) +LIBARCHIVE_CONF_OPTS += --enable-bsdcat=static +else +LIBARCHIVE_CONF_OPTS += --enable-bsdcat=shared +endif +else +LIBARCHIVE_CONF_OPTS += --disable-bsdcat +endif + +ifeq ($(BR2_PACKAGE_ACL),y) +LIBARCHIVE_DEPENDENCIES += acl +else +LIBARCHIVE_CONF_OPTS += --disable-acl +endif + +ifeq ($(BR2_PACKAGE_ATTR),y) +LIBARCHIVE_DEPENDENCIES += attr +else +LIBARCHIVE_CONF_OPTS += --disable-xattr +endif + +ifeq ($(BR2_PACKAGE_BZIP2),y) +LIBARCHIVE_CONF_OPTS += --with-bz2lib +LIBARCHIVE_DEPENDENCIES += bzip2 +else +LIBARCHIVE_CONF_OPTS += --without-bz2lib +endif + +ifeq ($(BR2_PACKAGE_EXPAT),y) +LIBARCHIVE_DEPENDENCIES += expat +else +LIBARCHIVE_CONF_OPTS += --without-expat +endif + +ifeq ($(BR2_PACKAGE_LIBICONV),y) +LIBARCHIVE_DEPENDENCIES += libiconv +else +LIBARCHIVE_CONF_OPTS += --without-libiconv-prefix +endif + +ifeq ($(BR2_PACKAGE_LIBXML2),y) +LIBARCHIVE_DEPENDENCIES += libxml2 +LIBARCHIVE_CONF_ENV += XML2_CONFIG=$(STAGING_DIR)/usr/bin/xml2-config +else +LIBARCHIVE_CONF_OPTS += --without-xml2 +endif + +ifeq ($(BR2_PACKAGE_LZ4),y) +LIBARCHIVE_CONF_OPTS += --with-lz4 +LIBARCHIVE_DEPENDENCIES += lz4 +else +LIBARCHIVE_CONF_OPTS += --without-lz4 +endif + +ifeq ($(BR2_PACKAGE_LZO),y) +LIBARCHIVE_DEPENDENCIES += lzo +else +LIBARCHIVE_CONF_OPTS += --without-lzo2 +endif + +ifeq ($(BR2_PACKAGE_MBEDTLS),y) +LIBARCHIVE_DEPENDENCIES += mbedtls +LIBARCHIVE_CONF_OPTS += --with-mbedtls +else +LIBARCHIVE_CONF_OPTS += --without-mbedtls +endif + +ifeq ($(BR2_PACKAGE_NETTLE),y) +LIBARCHIVE_DEPENDENCIES += nettle +LIBARCHIVE_CONF_OPTS += --with-nettle +else +LIBARCHIVE_CONF_OPTS += --without-nettle +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +LIBARCHIVE_DEPENDENCIES += openssl +else +LIBARCHIVE_CONF_OPTS += --without-openssl +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +LIBARCHIVE_DEPENDENCIES += zlib +else +LIBARCHIVE_CONF_OPTS += --without-zlib +endif + +# libarchive requires LZMA with thread support in the toolchain +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS)$(BR2_PACKAGE_XZ),yy) +LIBARCHIVE_DEPENDENCIES += xz +LIBARCHIVE_CONF_OPTS += --with-lzma +else +LIBARCHIVE_CONF_OPTS += --without-lzma +endif + +ifeq ($(BR2_PACKAGE_ZSTD),y) +LIBARCHIVE_DEPENDENCIES += zstd +LIBARCHIVE_CONF_OPTS += --with-zstd +else +LIBARCHIVE_CONF_OPTS += --without-zstd +endif + +# The only user of host-libarchive needs zlib support +HOST_LIBARCHIVE_DEPENDENCIES = host-zlib +HOST_LIBARCHIVE_CONF_OPTS = \ + --disable-bsdtar \ + --disable-bsdcpio \ + --disable-bsdcat \ + --disable-acl \ + --disable-xattr \ + --without-bz2lib \ + --without-expat \ + --without-libiconv-prefix \ + --without-xml2 \ + --without-lz4 \ + --without-lzo2 \ + --without-mbedtls \ + --without-nettle \ + --without-openssl \ + --without-lzma \ + --without-zstd + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libargon2/0001-libargon2-dont-fail-on-existing-symlink.patch b/package/libargon2/0001-libargon2-dont-fail-on-existing-symlink.patch new file mode 100644 index 00000000..43a6deb9 --- /dev/null +++ b/package/libargon2/0001-libargon2-dont-fail-on-existing-symlink.patch @@ -0,0 +1,23 @@ +From b997b9e7d4744020409223afddc7299a771eb52d Mon Sep 17 00:00:00 2001 +From: Pascal de Bruijn +Date: Thu, 7 Nov 2019 09:55:32 +0100 +Subject: [PATCH] Don't fail on existing symlink + +Signed-off-by: Pascal de Bruijn +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index 837e7f7..7c116c9 100644 +--- a/Makefile ++++ b/Makefile +@@ -238,7 +238,7 @@ install: $(RUN) libs + $(INSTALL) -d $(INST_LIBRARY) + $(INSTALL) -m 0644 $(LIBRARIES) $(INST_LIBRARY) + ifdef LINKED_LIB_SH +- cd $(INST_LIBRARY) && ln -s $(notdir $(LIB_SH) $(LINKED_LIB_SH)) ++ cd $(INST_LIBRARY) && ln -sf $(notdir $(LIB_SH) $(LINKED_LIB_SH)) + endif + $(INSTALL) -d $(INST_BINARY) + $(INSTALL) $(RUN) $(INST_BINARY) diff --git a/package/libargon2/Config.in b/package/libargon2/Config.in new file mode 100644 index 00000000..6bba74cf --- /dev/null +++ b/package/libargon2/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LIBARGON2 + bool "libargon2" + depends on BR2_USE_MMU + depends on !BR2_STATIC_LIBS + help + A modern password hashing algorithm + + https://password-hashing.net/#argon2 + +comment "libargon needs a toolchain w/ dynamic library" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS diff --git a/package/libargon2/libargon2.hash b/package/libargon2/libargon2.hash new file mode 100644 index 00000000..331eea99 --- /dev/null +++ b/package/libargon2/libargon2.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 daf972a89577f8772602bf2eb38b6a3dd3d922bf5724d45e7f9589b5e830442c libargon2-20190702.tar.gz +sha256 220f8736a89ff51c92ef3d497f413b48e6cf1df3d6278bc909c6308c78e1718e LICENSE diff --git a/package/libargon2/libargon2.mk b/package/libargon2/libargon2.mk new file mode 100644 index 00000000..b3f6e1b2 --- /dev/null +++ b/package/libargon2/libargon2.mk @@ -0,0 +1,41 @@ +################################################################################ +# +# libargon2 +# +################################################################################ + +LIBARGON2_VERSION = 20190702 +LIBARGON2_SITE = $(call github,P-H-C,phc-winner-argon2,$(LIBARGON2_VERSION)) +LIBARGON2_LICENSE = CC0-1.0 or Apache-2.0 +LIBARGON2_LICENSE_FILES = LICENSE +LIBARGON2_INSTALL_STAGING = YES + +LIBARGON2_OPTS = LIBRARY_REL=lib + +# GCC_TARGET_ARCH is not defined for all architectures, but libargon2 +# only uses it to detect if some x86 optimizations can be used, and +# GCC_TARGET_ARCH is defined on x86. +ifneq ($(GCC_TARGET_ARCH),) +LIBARGON2_OPTS += OPTTARGET=$(GCC_TARGET_ARCH) +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),) +LIBARGON2_OPTS += NO_THREADS=1 +endif + +define LIBARGON2_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + $(LIBARGON2_OPTS) +endef + +define LIBARGON2_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + $(LIBARGON2_OPTS) DESTDIR=$(STAGING_DIR) install +endef + +define LIBARGON2_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + $(LIBARGON2_OPTS) DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/libargtable2/Config.in b/package/libargtable2/Config.in new file mode 100644 index 00000000..42d067be --- /dev/null +++ b/package/libargtable2/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBARGTABLE2 + bool "libargtable2" + help + A greatly simplified and yet quite robust argument parsing + set of library calls. + + http://argtable.sourceforge.net/ diff --git a/package/libargtable2/libargtable2.hash b/package/libargtable2/libargtable2.hash new file mode 100644 index 00000000..7df3a180 --- /dev/null +++ b/package/libargtable2/libargtable2.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 8f77e8a7ced5301af6e22f47302fdbc3b1ff41f2b83c43c77ae5ca041771ddbf argtable2-13.tar.gz +sha256 d7bf9d064ac3e5840f9dd02422b7eeec4f1fd03f37fadbd043602be5e882304f COPYING diff --git a/package/libargtable2/libargtable2.mk b/package/libargtable2/libargtable2.mk new file mode 100644 index 00000000..8215f552 --- /dev/null +++ b/package/libargtable2/libargtable2.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# libargtable2 +# +################################################################################ + +LIBARGTABLE2_VERSION = 13 +LIBARGTABLE2_SOURCE = argtable2-$(LIBARGTABLE2_VERSION).tar.gz +LIBARGTABLE2_SITE = http://downloads.sourceforge.net/project/argtable/argtable/argtable-2.13 +LIBARGTABLE2_INSTALL_STAGING = YES +LIBARGTABLE2_CONF_OPTS = \ + --disable-example \ + --disable-kernel-module \ + --enable-lib \ + --enable-util +LIBARGTABLE2_LICENSE = LGPL-2.0+ +LIBARGTABLE2_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/libart/0001-art-config-cross.patch b/package/libart/0001-art-config-cross.patch new file mode 100644 index 00000000..a54f26a2 --- /dev/null +++ b/package/libart/0001-art-config-cross.patch @@ -0,0 +1,34 @@ +diff -Nura libart_lgpl-2.3.21.orig/Makefile.am libart_lgpl-2.3.21/Makefile.am +--- libart_lgpl-2.3.21.orig/Makefile.am 2011-02-01 10:07:39.687545397 -0300 ++++ libart_lgpl-2.3.21/Makefile.am 2011-02-01 10:08:48.320545396 -0300 +@@ -5,11 +5,6 @@ + + noinst_SCRIPTS = gen_art_config.sh + +-BUILT_SOURCES = art_config.h +- +-art_config.h: +- ./gen_art_config.sh > art_config.h +- + EXTRA_DIST = \ + libart.def \ + libart-config.in \ +diff -Nura libart_lgpl-2.3.21.orig/art_config.h libart_lgpl-2.3.21/art_config.h +--- libart_lgpl-2.3.21.orig/art_config.h 2011-02-01 10:07:39.688545397 -0300 ++++ libart_lgpl-2.3.21/art_config.h 2011-02-01 10:08:27.315545395 -0300 +@@ -1,9 +1,15 @@ + /* Automatically generated by gen_art_config */ + ++#include ++ + #define ART_SIZEOF_CHAR 1 + #define ART_SIZEOF_SHORT 2 + #define ART_SIZEOF_INT 4 ++#if LONG_MAX == 2147483647L + #define ART_SIZEOF_LONG 4 ++#else ++#define ART_SIZEOF_LONG 8 ++#endif + + typedef unsigned char art_u8; + typedef unsigned short art_u16; diff --git a/package/libart/Config.in b/package/libart/Config.in new file mode 100644 index 00000000..92623358 --- /dev/null +++ b/package/libart/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_LIBART + bool "libart" + help + Libart is a library for high-performance 2D graphics. It + supports a very powerful imaging model, basically the same + as SVG and the Java 2D API. It includes all PostScript + imaging operations, and adds antialiasing and + alpha-transparency. It is also highly tuned for incremental + rendering. It contains data structures and algorithms suited + to rapid, precise computation of Region of Interest, and a + two-phase rendering pipeline optimized for interactive + display. + + http://www.levien.com/libart/ diff --git a/package/libart/libart.hash b/package/libart/libart.hash new file mode 100644 index 00000000..105277b1 --- /dev/null +++ b/package/libart/libart.hash @@ -0,0 +1,5 @@ +# From http://ftp.gnome.org/pub/gnome/sources/libart_lgpl/2.3/libart_lgpl-2.3.21.sha256sum +sha256 2a10b1c884bb37c7bd5c5eba59dbd0d28bf68e64a42d7f2083c836f60f8e98fa libart_lgpl-2.3.21.tar.gz + +# Hash for license file: +sha256 d245807f90032872d1438d741ed21e2490e1175dc8aa3afa5ddb6c8e529b58e5 COPYING diff --git a/package/libart/libart.mk b/package/libart/libart.mk new file mode 100644 index 00000000..b3c6176a --- /dev/null +++ b/package/libart/libart.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# libart +# +################################################################################ + +LIBART_VERSION_MAJOR = 2.3 +LIBART_VERSION = $(LIBART_VERSION_MAJOR).21 +LIBART_SOURCE = libart_lgpl-$(LIBART_VERSION).tar.gz +LIBART_SITE = http://ftp.gnome.org/pub/gnome/sources/libart_lgpl/$(LIBART_VERSION_MAJOR) +LIBART_AUTORECONF = YES +LIBART_INSTALL_STAGING = YES +LIBART_CONFIG_SCRIPTS = libart2-config +LIBART_LICENSE = LGPL-2.0+ +LIBART_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/libasplib/0001-asplib_CPUTimer.h-Fix-time.h-include.patch b/package/libasplib/0001-asplib_CPUTimer.h-Fix-time.h-include.patch new file mode 100644 index 00000000..c91ddbfa --- /dev/null +++ b/package/libasplib/0001-asplib_CPUTimer.h-Fix-time.h-include.patch @@ -0,0 +1,39 @@ +From 7291289ba0c052e45e2a0330642318798d6a4caf Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Fri, 27 Jan 2017 16:02:27 +0100 +Subject: [PATCH 1/1] asplib_CPUTimer.h: Fix time.h include + +According to https://linux.die.net/man/3/clock_gettime time.h needs to +be included instead of sys/time.h. + +This patch fixes a build error found by buildroot autobuilders: + +http://autobuild.buildroot.net/results/cc0/cc0b928ee24a526b7c82fd3f391e2be024a14578// + +/home/peko/autobuild/instance-1/output/build/libasplib-be7fac89218a84b75f7598e3d76625ece99296f2/asplib_modules/Timer/asplib/Timer/asplib_CPUTimer.cpp: In member function 'void asplib::CCPUTimer::start_Timer()': +/home/peko/autobuild/instance-1/output/build/libasplib-be7fac89218a84b75f7598e3d76625ece99296f2/asplib_modules/Timer/asplib/Timer/asplib_CPUTimer.cpp:69:19: error: 'CLOCK_REALTIME' was not declared in this scope + clock_gettime(CLOCK_REALTIME, &m_startTime); + +Patch sent upstream: https://github.com/AchimTuran/asplib/pull/34 + +Signed-off-by: Bernd Kuhls +--- + asplib_modules/Timer/asplib/Timer/asplib_CPUTimer.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/asplib_modules/Timer/asplib/Timer/asplib_CPUTimer.h b/asplib_modules/Timer/asplib/Timer/asplib_CPUTimer.h +index a61ff49..a9676e0 100644 +--- a/asplib_modules/Timer/asplib/Timer/asplib_CPUTimer.h ++++ b/asplib_modules/Timer/asplib/Timer/asplib_CPUTimer.h +@@ -29,7 +29,7 @@ + #include + #include + #elif defined(TARGET_LINUX) +- #include ++ #include + #endif + + namespace asplib +-- +2.11.0 + diff --git a/package/libasplib/Config.in b/package/libasplib/Config.in new file mode 100644 index 00000000..89d54484 --- /dev/null +++ b/package/libasplib/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBASPLIB + bool "libasplib" + depends on BR2_INSTALL_LIBSTDCPP + help + asplib (Achim's Signal Processing LIBrary), is a small and + lightweight C++ library for digital signal processing. + + https://github.com/AchimTuran/asplib + +comment "asplib needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/libasplib/libasplib.hash b/package/libasplib/libasplib.hash new file mode 100644 index 00000000..db8e9203 --- /dev/null +++ b/package/libasplib/libasplib.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 68e117348fa17592dde7672477e927119a0e477103ced1d3a57d92e30880a147 libasplib-be7fac89218a84b75f7598e3d76625ece99296f2.tar.gz +sha256 12ac5047f2af0522f06798b1589ffc4599bc29c91f954d7874e0320634e777c0 LICENSE diff --git a/package/libasplib/libasplib.mk b/package/libasplib/libasplib.mk new file mode 100644 index 00000000..5da85abe --- /dev/null +++ b/package/libasplib/libasplib.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# libasplib +# +################################################################################ + +LIBASPLIB_VERSION = be7fac89218a84b75f7598e3d76625ece99296f2 +LIBASPLIB_SITE = $(call github,AchimTuran,asplib,$(LIBASPLIB_VERSION)) +LIBASPLIB_LICENSE = GPL-3.0+ +LIBASPLIB_LICENSE_FILES = LICENSE +LIBASPLIB_INSTALL_STAGING = YES + +LIBASPLIB_CONF_OPTS = \ + -DASPLIB_MODULES_TO_BUILD=some \ + -DBUILD_BIQUAD=ON \ + -DBUILD_IIR=ON \ + -DBUILD_LOGGER=ON \ + -DBUILD_SIGNALS=ON \ + -DBUILD_TIMER=ON + +$(eval $(cmake-package)) diff --git a/package/libass/Config.in b/package/libass/Config.in new file mode 100644 index 00000000..803f6b44 --- /dev/null +++ b/package/libass/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_LIBASS + bool "libass" + depends on BR2_INSTALL_LIBSTDCPP # harfbuzz + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # harfbuzz + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # harfbuzz + select BR2_PACKAGE_FREETYPE + select BR2_PACKAGE_HARFBUZZ + select BR2_PACKAGE_LIBFRIBIDI + help + libass is a portable subtitle renderer for the ASS/SSA + (Advanced Substation Alpha/Substation Alpha) subtitle format + + https://github.com/libass/libass + +comment "libass needs a toolchain w/ C++, gcc >= 4.8" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 diff --git a/package/libass/libass.hash b/package/libass/libass.hash new file mode 100644 index 00000000..882bc456 --- /dev/null +++ b/package/libass/libass.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 1cdd39c9d007b06e737e7738004d7f38cf9b1e92843f37307b24e7ff63ab8e53 libass-0.15.1.tar.xz +sha256 f7e30699d02798351e7f839e3d3bfeb29ce65e44efa7735c225464c4fd7dfe9c COPYING diff --git a/package/libass/libass.mk b/package/libass/libass.mk new file mode 100644 index 00000000..515f87c6 --- /dev/null +++ b/package/libass/libass.mk @@ -0,0 +1,36 @@ +################################################################################ +# +# libass +# +################################################################################ + +LIBASS_VERSION = 0.15.1 +LIBASS_SOURCE = libass-$(LIBASS_VERSION).tar.xz +# Do not use the github helper here, the generated tarball is *NOT* +# the same as the one uploaded by upstream for the release. +LIBASS_SITE = https://github.com/libass/libass/releases/download/$(LIBASS_VERSION) +LIBASS_INSTALL_STAGING = YES +LIBASS_LICENSE = ISC +LIBASS_LICENSE_FILES = COPYING +LIBASS_CPE_ID_VENDOR = libass_project +LIBASS_DEPENDENCIES = \ + host-pkgconf \ + freetype \ + harfbuzz \ + libfribidi \ + $(if $(BR2_PACKAGE_LIBICONV),libiconv) + +# configure: WARNING: Install nasm for a significantly faster libass build. +# only for Intel archs +ifeq ($(BR2_i386)$(BR2_x86_64),y) +LIBASS_DEPENDENCIES += host-nasm +endif + +ifeq ($(BR2_PACKAGE_FONTCONFIG),y) +LIBASS_DEPENDENCIES += fontconfig +LIBASS_CONF_OPTS += --enable-fontconfig +else +LIBASS_CONF_OPTS += --disable-fontconfig --disable-require-system-font-provider +endif + +$(eval $(autotools-package)) diff --git a/package/libassuan/Config.in b/package/libassuan/Config.in new file mode 100644 index 00000000..012e65c4 --- /dev/null +++ b/package/libassuan/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_LIBASSUAN + bool "libassuan" + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgpg-error + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBGPG_ERROR + help + Libassuan is a small library implementing the so-called + Assuan protocol. + + This protocol is used for IPC between most newer GnuPG + components. Both, server and client side functions are + provided. + + http://www.gnupg.org/related_software/libassuan/ diff --git a/package/libassuan/libassuan.hash b/package/libassuan/libassuan.hash new file mode 100644 index 00000000..3506b4f8 --- /dev/null +++ b/package/libassuan/libassuan.hash @@ -0,0 +1,8 @@ +# From https://www.gnupg.org/download/integrity_check.html +sha1 55a35918e95566ef94e8843879a7dd3f87de3781 libassuan-2.5.4.tar.bz2 +# Locally calculated after checking signature +# https://www.gnupg.org/ftp/gcrypt/libassuan/libassuan-2.5.4.tar.bz2.sig +# using key D8692123C4065DEA5E0F3AB5249B39D24F25E3B6 +sha256 c080ee96b3bd519edd696cfcebdecf19a3952189178db9887be713ccbcb5fbf0 libassuan-2.5.4.tar.bz2 +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 COPYING.LIB +sha256 fc82ca8b6fdb18d4e3e85cfd8ab58d1bcd3f1b29abe782895abd91d64763f8e7 COPYING diff --git a/package/libassuan/libassuan.mk b/package/libassuan/libassuan.mk new file mode 100644 index 00000000..8b618197 --- /dev/null +++ b/package/libassuan/libassuan.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# libassuan +# +################################################################################ + +LIBASSUAN_VERSION = 2.5.4 +LIBASSUAN_SITE = ftp://ftp.gnupg.org/gcrypt/libassuan +LIBASSUAN_SOURCE = libassuan-$(LIBASSUAN_VERSION).tar.bz2 +LIBASSUAN_LICENSE = LGPL-2.1+ (library), GPL-3.0 (tests, doc) +LIBASSUAN_LICENSE_FILES = COPYING.LIB COPYING +LIBASSUAN_INSTALL_STAGING = YES +LIBASSUAN_DEPENDENCIES = libgpg-error +LIBASSUAN_CONF_OPTS = \ + --with-gpg-error-prefix=$(STAGING_DIR)/usr +LIBASSUAN_CONFIG_SCRIPTS = libassuan-config + +$(eval $(autotools-package)) diff --git a/package/libatasmart/0001-strpool-cross-flags.patch b/package/libatasmart/0001-strpool-cross-flags.patch new file mode 100644 index 00000000..89b91cca --- /dev/null +++ b/package/libatasmart/0001-strpool-cross-flags.patch @@ -0,0 +1,42 @@ +From 730158700ea7a554c37f24bfbf5f4985f7280f3e Mon Sep 17 00:00:00 2001 +From: Peter Korsgaard +Date: Wed, 6 Feb 2013 14:07:02 +0100 +Subject: [PATCH] strpool: don't mix up host/build flags when cross compiling + +Submitted upstream as https://bugs.freedesktop.org/show_bug.cgi?id=60364 + +Commit b71035ce89 (build-sys: modernize build system) changed the strpool +(which needs to be built for the build machine) compilation to use +AM_CFLAGS / AM_LDFLAGS rather than CFLAGS / LDFLAGS. This is wrong, as +The AM_ version is used TOGETHER with (the user supplied) CFLAGS/LDFLAGS, +causing strpool to use both CFLAGS (for host) and CCFLAGS_FOR_BUILD (for +build) flags, breaking cross compilation with errors like: + +cc1: error: unrecognized command line option "-mabi=spe" + +Instead overwrite the (user supplied) CFLAGS with the (user supplied) +CFLAGS_FOR_BUILD (and similar for LDFLAGS) like we used to do. + +Signed-off-by: Peter Korsgaard +--- + strpool/Makefile.am | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/strpool/Makefile.am b/strpool/Makefile.am +index b041cea..5b335a5 100644 +--- a/strpool/Makefile.am ++++ b/strpool/Makefile.am +@@ -17,8 +17,8 @@ + # . + + CC = @CC_FOR_BUILD@ +-AM_CFLAGS = @BUILD_CFLAGS@ +-AM_LDFLAGS = @BUILD_LDFLAGS@ ++CFLAGS = @BUILD_CFLAGS@ ++LDFLAGS = @BUILD_LDFLAGS@ + + noinst_PROGRAMS = \ + strpool +-- +1.7.10.4 + diff --git a/package/libatasmart/Config.in b/package/libatasmart/Config.in new file mode 100644 index 00000000..9db3b093 --- /dev/null +++ b/package/libatasmart/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBATASMART + bool "libatasmart" + depends on BR2_PACKAGE_HAS_UDEV # libudev is configure dependency + help + The libatasmart package is a disk reporting library. + It only supports a subset of the ATA S.M.A.R.T. functionality. + + http://0pointer.de/blog/projects/being-smart.html + +comment "libatasmart requires udev to be enabled" + depends on !BR2_PACKAGE_HAS_UDEV diff --git a/package/libatasmart/libatasmart.hash b/package/libatasmart/libatasmart.hash new file mode 100644 index 00000000..b661332a --- /dev/null +++ b/package/libatasmart/libatasmart.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 61f0ea345f63d28ab2ff0dc352c22271661b66bf09642db3a4049ac9dbdb0f8d libatasmart-0.19.tar.xz +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 LGPL diff --git a/package/libatasmart/libatasmart.mk b/package/libatasmart/libatasmart.mk new file mode 100644 index 00000000..1d4eeaae --- /dev/null +++ b/package/libatasmart/libatasmart.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# libatasmart +# +################################################################################ + +LIBATASMART_VERSION = 0.19 +LIBATASMART_SOURCE = libatasmart-$(LIBATASMART_VERSION).tar.xz +LIBATASMART_SITE = http://0pointer.de/public +LIBATASMART_LICENSE = LGPL-2.1 +LIBATASMART_LICENSE_FILES = LGPL +LIBATASMART_INSTALL_STAGING = YES + +# package doesn't include configure script +LIBATASMART_AUTORECONF = YES + +LIBATASMART_DEPENDENCIES = udev + +$(eval $(autotools-package)) diff --git a/package/libatomic_ops/Config.in b/package/libatomic_ops/Config.in new file mode 100644 index 00000000..e9206f33 --- /dev/null +++ b/package/libatomic_ops/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_LIBATOMIC_OPS_ARCH_SUPPORTS + bool + default y if BR2_arm || BR2_armeb || BR2_aarch64 || BR2_i386 || BR2_sparc || BR2_sparc64 || BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le || BR2_x86_64 || BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el + # Unsupported for MIPS R6 + depends on !BR2_MIPS_CPU_MIPS32R6 && !BR2_MIPS_CPU_MIPS64R6 + +config BR2_PACKAGE_LIBATOMIC_OPS + bool "libatomic_ops" + depends on BR2_PACKAGE_LIBATOMIC_OPS_ARCH_SUPPORTS + help + Atomic operations library + + https://github.com/ivmai/libatomic_ops diff --git a/package/libatomic_ops/libatomic_ops.hash b/package/libatomic_ops/libatomic_ops.hash new file mode 100644 index 00000000..3fca4a8c --- /dev/null +++ b/package/libatomic_ops/libatomic_ops.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 e6b0909cf4e63cec693fe6c48191ce864c32c5113e16c3f517aa2a244b46992f libatomic_ops-7.6.10.tar.gz +sha256 f0e630c0ca489767033da5a0c869fb4231db522c5ff479ce55a853a923a00f69 doc/LICENSING.txt +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/libatomic_ops/libatomic_ops.mk b/package/libatomic_ops/libatomic_ops.mk new file mode 100644 index 00000000..cc890a7f --- /dev/null +++ b/package/libatomic_ops/libatomic_ops.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# libatomic_ops +# +################################################################################ + +LIBATOMIC_OPS_VERSION = 7.6.10 +LIBATOMIC_OPS_SITE = $(call github,ivmai,libatomic_ops,v$(LIBATOMIC_OPS_VERSION)) +LIBATOMIC_OPS_AUTORECONF = YES + +# From doc/LICENSING.txt: "Our intent is to make it easy to use +# libatomic_ops, in both free and proprietary software. Hence most +# code that we expect to be linked into a client application is +# covered by an MIT-style license. A few library routines are covered +# by the GNU General Public License. These are put into a separate +# library, libatomic_ops_gpl.a." +LIBATOMIC_OPS_LICENSE = MIT (main library) / GPL-2.0+ (gpl extension) +LIBATOMIC_OPS_LICENSE_FILES = doc/LICENSING.txt COPYING + +LIBATOMIC_OPS_INSTALL_STAGING = YES + +ifeq ($(BR2_sparc_v8)$(BR2_sparc_leon3),y) +LIBATOMIC_OPS_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -DAO_NO_SPARC_V9" +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libavl/0001-fix-makefile.patch b/package/libavl/0001-fix-makefile.patch new file mode 100644 index 00000000..6cc96e5f --- /dev/null +++ b/package/libavl/0001-fix-makefile.patch @@ -0,0 +1,49 @@ +makefile: fix compilation and installation + +This was originally taken from: +https://sources.debian.org/data/main/liba/libavl/0.3.5-4/debian/patches/fix-makefile + +Unfortunately, the URL does not end in ".patch", therefore we cannot +use it in the FOO_PATCH variable directly. + +Signed-off-by: Michael Walle + +--- a/GNUmakefile ++++ b/GNUmakefile +@@ -6,7 +6,8 @@ + LDCONFIG ?= /sbin/ldconfig + + # Some suggestions: (-mcpu= generates i386 compatible code) +-CFLAGS ?= -O2 -fomit-frame-pointer -pipe -mcpu=i686 -w ++CFLAGS ?= -O2 -pipe -Wall -Werror ++CFLAGS += -fPIC + #CFLAGS = -O2 -fomit-frame-pointer -pipe -march=i586 -Wall -g + #CFLAGS = -O6 -fomit-frame-pointer -pipe -march=i586 -Wall -ansi -pedantic + #CFLAGS = -O6 -fomit-frame-pointer -pipe -march=i686 -Wall -ansi -pedantic +@@ -34,20 +35,21 @@ + $(CC) $(LDFLAGS) $^ -o $@ $(LIBS) + + $(LIBRARY): avl.o +- $(CC) -nostdlib -shared -Wl,-soname,libavl.so.1 $^ -o $@ -lc ++ $(CC) $(LDFLAGS) -shared -Wl,-soname,libavl.so.1 $^ -o $@ -lc + + clean: + $(RM) *.o $(PROGRAMS) libavl.* + + install: all + $(INSTALL) -d $(DESTDIR)$(libdir) +- $(INSTALL) avl.h $(DESTDIR)$(includedir) +- $(INSTALL) $(LIBRARIES) $(DESTDIR)$(libdir) +- for i in $(LIBRARIES); do\ ++ $(INSTALL) -d $(DESTDIR)$(includedir) ++ $(INSTALL) -m 644 avl.h $(DESTDIR)$(includedir) ++ $(INSTALL) -m 644 $(LIBRARY) $(DESTDIR)$(libdir) ++ for i in $(LIBRARY); do\ + $(LN) -sf $$i $(DESTDIR)$(libdir)/$${i%.*};\ + $(LN) -sf $${i%.*} $(DESTDIR)$(libdir)/$${i%.*.*};\ + done +- -$(LDCONFIG) ++ #-$(LDCONFIG) + + .PHONY: clean install all + .PRECIOUS: %.h %.c diff --git a/package/libavl/Config.in b/package/libavl/Config.in new file mode 100644 index 00000000..20d3c5ef --- /dev/null +++ b/package/libavl/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_LIBAVL + bool "libavl" + depends on !BR2_STATIC_LIBS + help + AVLTree is a small implementation of AVL trees for the C + programming language. + + https://packages.debian.org/buster/libavl1 + + This is not the GNU AVL library by Ben Pfaff. + +comment "libavl needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/libavl/libavl.hash b/package/libavl/libavl.hash new file mode 100644 index 00000000..4d70f0cc --- /dev/null +++ b/package/libavl/libavl.hash @@ -0,0 +1,5 @@ +# From http://snapshot.debian.org/archive/debian/20160621T164030Z/pool/main/liba/libavl/libavl_0.3.5-4.dsc +sha256 4497b9e22cdd61ae2fa893b9d5fd6213dc306726d7c4be08c29e173622dca8a0 libavl_0.3.5.orig.tar.gz + +# Locally computed +sha256 767a9accfe3b110153b567983b98889469dfaae02899a632aeadbb81ad611293 COPYING diff --git a/package/libavl/libavl.mk b/package/libavl/libavl.mk new file mode 100644 index 00000000..75ada327 --- /dev/null +++ b/package/libavl/libavl.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# libavl +# +################################################################################ + +LIBAVL_VERSION = 0.3.5 +LIBAVL_SITE = http://snapshot.debian.org/archive/debian/20050312T000000Z/pool/main/liba/libavl +LIBAVL_SOURCE = libavl_$(LIBAVL_VERSION).orig.tar.gz +LIBAVL_LICENSE = LGPL-2.0+ +LIBAVL_LICENSE_FILES = COPYING +LIBAVL_INSTALL_STAGING = YES + +LIBAVL_CFLAGS = $(TARGET_CFLAGS) -fPIC +HOST_LIBAVL_CFLAGS = $(HOST_CFLAGS) -fPIC + +define LIBAVL_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) \ + CFLAGS="$(LIBAVL_CFLAGS)" +endef + +define LIBAVL_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) install \ + prefix=/usr DESTDIR=$(STAGING_DIR) +endef + +define LIBAVL_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) install \ + prefix=/usr DESTDIR=$(TARGET_DIR) +endef + +define HOST_LIBAVL_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) $(HOST_CONFIGURE_OPTS) -C $(@D) \ + CFLAGS="$(HOST_LIBAVL_CFLAGS)" +endef + +define HOST_LIBAVL_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE) $(HOST_CONFIGURE_OPTS) -C $(@D) install \ + prefix=$(HOST_DIR) +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/libb64/0001-Integer-overflows.patch b/package/libb64/0001-Integer-overflows.patch new file mode 100644 index 00000000..0e3e08b1 --- /dev/null +++ b/package/libb64/0001-Integer-overflows.patch @@ -0,0 +1,73 @@ +Fix integer overflows. Will not work on compilers with unsigned char +as the default. + +Fetched from: https://sources.debian.org/patches/libb64/1.2-5/ + +Combined "integer overflows.diff" and "off by one.diff" and adapted +for version 1.2.1. + +Signed-off-by: Mikael Eliasson + +diff --git a/src/cdecode.c b/src/cdecode.c +index a6c0a42..45da4e1 100644 +--- a/src/cdecode.c ++++ b/src/cdecode.c +@@ -9,10 +9,11 @@ For details, see http://sourceforge.net/projects/libb64 + + int base64_decode_value(char value_in) + { +- static const char decoding[] = {62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-2,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51}; ++ static const signed char decoding[] = {62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-2,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51}; + static const char decoding_size = sizeof(decoding); ++ if (value_in < 43) return -1; + value_in -= 43; +- if (value_in < 0 || value_in >= decoding_size) return -1; ++ if (value_in >= decoding_size) return -1; + return decoding[(int)value_in]; + } + +@@ -26,7 +27,7 @@ int base64_decode_block(const char* code_in, const int length_in, char* plaintex + { + const char* codechar = code_in; + char* plainchar = plaintext_out; +- char fragment; ++ int fragment; + + *plainchar = state_in->plainchar; + +@@ -42,7 +43,7 @@ int base64_decode_block(const char* code_in, const int length_in, char* plaintex + state_in->plainchar = *plainchar; + return plainchar - plaintext_out; + } +- fragment = (char)base64_decode_value(*codechar++); ++ fragment = base64_decode_value(*codechar++); + } while (fragment < 0); + *plainchar = (fragment & 0x03f) << 2; + case step_b: +@@ -53,7 +54,7 @@ int base64_decode_block(const char* code_in, const int length_in, char* plaintex + state_in->plainchar = *plainchar; + return plainchar - plaintext_out; + } +- fragment = (char)base64_decode_value(*codechar++); ++ fragment = base64_decode_value(*codechar++); + } while (fragment < 0); + *plainchar++ |= (fragment & 0x030) >> 4; + *plainchar = (fragment & 0x00f) << 4; +@@ -65,7 +66,7 @@ int base64_decode_block(const char* code_in, const int length_in, char* plaintex + state_in->plainchar = *plainchar; + return plainchar - plaintext_out; + } +- fragment = (char)base64_decode_value(*codechar++); ++ fragment = base64_decode_value(*codechar++); + } while (fragment < 0); + *plainchar++ |= (fragment & 0x03c) >> 2; + *plainchar = (fragment & 0x003) << 6; +@@ -77,7 +78,7 @@ int base64_decode_block(const char* code_in, const int length_in, char* plaintex + state_in->plainchar = *plainchar; + return plainchar - plaintext_out; + } +- fragment = (char)base64_decode_value(*codechar++); ++ fragment = base64_decode_value(*codechar++); + } while (fragment < 0); + *plainchar++ |= (fragment & 0x03f); + } diff --git a/package/libb64/0002-Initialize-C++-objects.patch b/package/libb64/0002-Initialize-C++-objects.patch new file mode 100644 index 00000000..1556f889 --- /dev/null +++ b/package/libb64/0002-Initialize-C++-objects.patch @@ -0,0 +1,38 @@ +Fixes uninitialized C++ encoder and decoder _state variable bug. + +Fetched from: https://sources.debian.org/patches/libb64/1.2-5/ + +initialize-coder-state.diff patch without modifications. + +Signed-off-by: Mikael Eliasson + +diff --git a/include/b64/decode.h b/include/b64/decode.h +index 12b16ea..d3f7d60 100644 +--- a/include/b64/decode.h ++++ b/include/b64/decode.h +@@ -24,7 +24,9 @@ namespace base64 + + decoder(int buffersize_in = BUFFERSIZE) + : _buffersize(buffersize_in) +- {} ++ { ++ base64_init_decodestate(&_state); ++ } + + int decode(char value_in) + { +diff --git a/include/b64/encode.h b/include/b64/encode.h +index 5d807d9..49aafdc 100644 +--- a/include/b64/encode.h ++++ b/include/b64/encode.h +@@ -24,7 +24,9 @@ namespace base64 + + encoder(int buffersize_in = BUFFERSIZE) + : _buffersize(buffersize_in) +- {} ++ { ++ base64_init_encodestate(&_state); ++ } + + int encode(char value_in) + { diff --git a/package/libb64/Config.in b/package/libb64/Config.in new file mode 100644 index 00000000..405d0b8c --- /dev/null +++ b/package/libb64/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_LIBB64 + bool "libb64" + help + libb64 is a library of ANSI C routines for fast encoding + and decoding of data into and from a base64-encoded format. + C++ wrappers are included, as well as the source code for + standalone encoding and decoding executables. + + Base64 uses a subset of displayable ASCII characters, and is + therefore a useful encoding for storing binary data in a text + file, such as XML, or sending binary data over text-only + email. + + http://libb64.sourceforge.net diff --git a/package/libb64/libb64.hash b/package/libb64/libb64.hash new file mode 100644 index 00000000..0ed8065f --- /dev/null +++ b/package/libb64/libb64.hash @@ -0,0 +1,6 @@ +# sha1 from sourceforge, sha256 locally computed +sha1 04b3e21b8c951d27f02fe91249ca3474554af0b9 libb64-1.2.1.zip +sha256 20106f0ba95cfd9c35a13c71206643e3fb3e46512df3e2efb2fdbf87116314b2 libb64-1.2.1.zip + +# Hash for license file: +sha256 834b7afa1b3c40289a3be775d3625016be1c0d7ea7a4a26c1eb207f53dc961d8 LICENSE diff --git a/package/libb64/libb64.mk b/package/libb64/libb64.mk new file mode 100644 index 00000000..ed6d3cf4 --- /dev/null +++ b/package/libb64/libb64.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# libb64 +# +################################################################################ + +LIBB64_VERSION = 1.2.1 +LIBB64_SOURCE = libb64-$(LIBB64_VERSION).zip +LIBB64_SITE = https://downloads.sourceforge.net/project/libb64/libb64/libb64 +LIBB64_LICENSE = Public Domain +LIBB64_LICENSE_FILES = LICENSE +LIBB64_INSTALL_STAGING = YES +# Only static lib and headers +LIBB64_INSTALL_TARGET = NO + +define LIBB64_EXTRACT_CMDS + unzip $(LIBB64_DL_DIR)/$(LIBB64_SOURCE) -d $(BUILD_DIR) +endef + +define LIBB64_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) CC="$(TARGET_CC)" CCFLAGS="$(TARGET_CFLAGS)" -C $(@D) all_src +endef + +define LIBB64_INSTALL_STAGING_CMDS + $(INSTALL) -d -m 0755 $(STAGING_DIR)/usr/include/b64 + $(INSTALL) -m 0644 $(@D)/include/b64/* $(STAGING_DIR)/usr/include/b64 + $(INSTALL) -D -m 0755 $(@D)/src/libb64.a $(STAGING_DIR)/usr/lib +endef + +$(eval $(generic-package)) diff --git a/package/libbacktrace/Config.in b/package/libbacktrace/Config.in new file mode 100644 index 00000000..0f940dd5 --- /dev/null +++ b/package/libbacktrace/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBBACKTRACE + bool "libbacktrace" + help + A C library that may be linked into a C/C++ program to + produce symbolic backtraces + + https://github.com/ianlancetaylor/libbacktrace diff --git a/package/libbacktrace/libbacktrace.hash b/package/libbacktrace/libbacktrace.hash new file mode 100644 index 00000000..ecd530a3 --- /dev/null +++ b/package/libbacktrace/libbacktrace.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 13072c499c76866c188beaf3d50f3dddbf2c27ed9fd72b33d1b857acd33b1cb5 libbacktrace-9b7f216e867916594d81e8b6118f092ac3fcf704.tar.gz +sha256 ef8a9b3247488f8901ca60de9b17b745d7bd67e5ec1e622f80d62364572200d8 LICENSE diff --git a/package/libbacktrace/libbacktrace.mk b/package/libbacktrace/libbacktrace.mk new file mode 100644 index 00000000..8f812228 --- /dev/null +++ b/package/libbacktrace/libbacktrace.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# libbacktrace +# +################################################################################ + +LIBBACKTRACE_VERSION = 9b7f216e867916594d81e8b6118f092ac3fcf704 +LIBBACKTRACE_SITE = $(call github,ianlancetaylor,libbacktrace,$(LIBBACKTRACE_VERSION)) +LIBBACKTRACE_LICENSE = BSD-3C-like +LIBBACKTRACE_LICENSE_FILES = LICENSE +LIBBACKTRACE_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/libbdplus/Config.in b/package/libbdplus/Config.in new file mode 100644 index 00000000..2d314d13 --- /dev/null +++ b/package/libbdplus/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_LIBBDPLUS + bool "libbdplus" + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgcrypt + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_LIBGCRYPT + help + libbdplus is a research project to implement the BD+ System + Specifications. + This research project provides, through an open-source + library, a way to understand how the BD+ works. + NB: this project doesn't offer any key, configuration file or + certificate that could be used to decode encrypted copyrighted + material. + + http://www.videolan.org/developers/libbdplus.html + +comment "libbdplus needs a toolchain w/ threads, dynamic library" + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/libbdplus/libbdplus.hash b/package/libbdplus/libbdplus.hash new file mode 100644 index 00000000..6abc0e49 --- /dev/null +++ b/package/libbdplus/libbdplus.hash @@ -0,0 +1,5 @@ +# From http://download.videolan.org/pub/videolan/libbdplus/0.1.2/libbdplus-0.1.2.tar.bz2.sha512 +sha512 e00e7bc9f52b9275646593b753ba646b052255be94a7241965f4dbe4734f8f6a072973ed4b9997957f939236b0633897c295749f79e232188430795be5b5087b libbdplus-0.1.2.tar.bz2 + +# Hash for license file: +sha256 592987e8510228d546540b84a22444bde98e48d03078d3b2eefcd889bec5ce8c COPYING diff --git a/package/libbdplus/libbdplus.mk b/package/libbdplus/libbdplus.mk new file mode 100644 index 00000000..b0e8b148 --- /dev/null +++ b/package/libbdplus/libbdplus.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# libbdplus +# +################################################################################ + +LIBBDPLUS_VERSION = 0.1.2 +LIBBDPLUS_SITE = http://download.videolan.org/pub/videolan/libbdplus/$(LIBBDPLUS_VERSION) +LIBBDPLUS_SOURCE = libbdplus-$(LIBBDPLUS_VERSION).tar.bz2 +LIBBDPLUS_LICENSE = LGPL-2.1+ +LIBBDPLUS_LICENSE_FILES = COPYING +LIBBDPLUS_INSTALL_STAGING = YES +LIBBDPLUS_DEPENDENCIES = libgcrypt +LIBBDPLUS_CONF_OPTS = \ + --disable-werror \ + --disable-extra-warnings \ + --disable-optimizations \ + --disable-examples \ + --disable-debug \ + --with-gnu-ld \ + --with-libgcrypt-prefix=$(STAGING_DIR)/usr \ + --with-gpg-error-prefix=$(STAGING_DIR)/usr + +ifeq ($(BR2_PACKAGE_LIBAACS),y) +LIBBDPLUS_DEPENDENCIES += libaacs +LIBBDPLUS_CONF_OPTS += --with-libaacs +else +LIBBDPLUS_CONF_OPTS += --without-libaacs +endif + +$(eval $(autotools-package)) diff --git a/package/libblockdev/0001-Provide-replacement-function-for-strerror_l.patch b/package/libblockdev/0001-Provide-replacement-function-for-strerror_l.patch new file mode 100644 index 00000000..018e4c44 --- /dev/null +++ b/package/libblockdev/0001-Provide-replacement-function-for-strerror_l.patch @@ -0,0 +1,69 @@ +From ccf93148aa3587dd98a02e253cdc42a7af14df1e Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sat, 29 Aug 2020 16:04:15 +0200 +Subject: [PATCH] Provide replacement function for strerror_l() + +strerror_l() is not implemented in some C libraries, such as uClibc, +so let's provide a simple replacement function that falls back on +strerror(). + +Signed-off-by: Thomas Petazzoni +--- + configure.ac | 2 ++ + src/plugins/crypto.c | 7 +++++++ + src/utils/module.c | 8 ++++++++ + 3 files changed, 17 insertions(+) + +diff --git a/configure.ac b/configure.ac +index c2d22c2..36aeb51 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -137,6 +137,8 @@ AC_CHECK_HEADERS([dlfcn.h string.h unistd.h sys/fcntl.h sys/ioctl.h linux/random + [LIBBLOCKDEV_SOFT_FAILURE([Header file $ac_header not found.])], + []) + ++AC_CHECK_FUNCS([strerror_l]) ++ + AC_ARG_WITH([bcache], + AS_HELP_STRING([--with-bcache], [support bcache @<:@default=yes@:>@]), + [], +diff --git a/src/plugins/crypto.c b/src/plugins/crypto.c +index f4a2e8f..c1bd7b5 100644 +--- a/src/plugins/crypto.c ++++ b/src/plugins/crypto.c +@@ -52,6 +52,13 @@ + + #define UNUSED __attribute__((unused)) + ++#if !defined(HAVE_STRERROR_L) ++static char *strerror_l(int errnum, locale_t locale UNUSED) ++{ ++ return strerror(errnum); ++} ++#endif ++ + /** + * SECTION: crypto + * @short_description: plugin for operations with encrypted devices +diff --git a/src/utils/module.c b/src/utils/module.c +index 9750e24..086bec0 100644 +--- a/src/utils/module.c ++++ b/src/utils/module.c +@@ -27,6 +27,14 @@ + + #include "module.h" + ++#define UNUSED __attribute__((unused)) ++ ++#if !defined(HAVE_STRERROR_L) ++static char *strerror_l(int errnum, locale_t locale UNUSED) ++{ ++ return strerror(errnum); ++} ++#endif + + /** + * bd_utils_module_error_quark: (skip) +-- +2.26.2 + diff --git a/package/libblockdev/Config.in b/package/libblockdev/Config.in new file mode 100644 index 00000000..4389fd79 --- /dev/null +++ b/package/libblockdev/Config.in @@ -0,0 +1,72 @@ +config BR2_PACKAGE_LIBBLOCKDEV + bool "libblockdev" + depends on !BR2_STATIC_LIBS # kmod + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + depends on BR2_PACKAGE_HAS_UDEV + select BR2_PACKAGE_KMOD + select BR2_PACKAGE_LIBGLIB2 + help + libblockdev is a C library supporting GObject introspection + for manipulation of block devices. It has a plugin-based + architecture where each technology (like LVM, Btrfs, MD RAID, + Swap,...) is implemented in a separate plugin, possibly with + multiple implementations. + + https://github.com/storaged-project/libblockdev/ + +if BR2_PACKAGE_LIBBLOCKDEV + +comment "plugins" + +config BR2_PACKAGE_LIBBLOCKDEV_CRYPTO + bool "crypto" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # cryptsetup -> json-c + select BR2_PACKAGE_CRYPTSETUP + +config BR2_PACKAGE_LIBBLOCKDEV_FS + bool "filesystem" + depends on BR2_ENABLE_LOCALE # parted + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBMOUNT + select BR2_PACKAGE_PARTED + +comment "filesystem plugin needs a toolchain w/ locale" + depends on !BR2_ENABLE_LOCALE + +config BR2_PACKAGE_LIBBLOCKDEV_LOOP + bool "loop" + +config BR2_PACKAGE_LIBBLOCKDEV_LVM2 + bool "lvm2" + depends on BR2_ENABLE_LOCALE # parted + select BR2_PACKAGE_PARTED + select BR2_PACKAGE_LVM2 + +comment "lvm2 support needs a toolchain w/ locale" + depends on !BR2_ENABLE_LOCALE + +config BR2_PACKAGE_LIBBLOCKDEV_MDRAID + bool "mdraid" + select BR2_PACKAGE_LIBBYTESIZE + +config BR2_PACKAGE_LIBBLOCKDEV_PART + bool "part" + depends on BR2_ENABLE_LOCALE # parted + select BR2_PACKAGE_PARTED + +comment "part plugin needs a toolchain w/ locale" + depends on !BR2_ENABLE_LOCALE + +config BR2_PACKAGE_LIBBLOCKDEV_SWAP + bool "swap" + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBBLKID + +endif + +comment "libblockdev needs udev /dev management and a toolchain w/ wchar, threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_PACKAGE_HAS_UDEV || BR2_STATIC_LIBS || \ + !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libblockdev/libblockdev.hash b/package/libblockdev/libblockdev.hash new file mode 100644 index 00000000..101b99f1 --- /dev/null +++ b/package/libblockdev/libblockdev.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 555aa42a2db39649ad83253bdc902ab5bd63d39c123e0c8055c4de7fe7571668 libblockdev-2.25.tar.gz +sha256 97bdc721d875501b6243a456333fdfdb1ab64d31c4da2554de845caf4674b946 LICENSE diff --git a/package/libblockdev/libblockdev.mk b/package/libblockdev/libblockdev.mk new file mode 100644 index 00000000..39ae9230 --- /dev/null +++ b/package/libblockdev/libblockdev.mk @@ -0,0 +1,82 @@ +################################################################################ +# +# libblockdev +# +################################################################################ + +LIBBLOCKDEV_VERSION = 2.25 +LIBBLOCKDEV_SITE = https://github.com/storaged-project/libblockdev/releases/download/$(LIBBLOCKDEV_VERSION)-1 +LIBBLOCKDEV_LICENSE = LGPL-2.1 +LIBBLOCKDEV_LICENSE_FILES = LICENSE +LIBBLOCKDEV_INSTALL_STAGING = YES +LIBBLOCKDEV_DEPENDENCIES = host-pkgconf libglib2 kmod udev +# 0001-Provide-replacement-function-for-strerror_l.patch +LIBBLOCKDEV_AUTORECONF = YES + +LIBBLOCKDEV_CONF_OPTS = \ + --disable-introspection \ + --with-loop \ + --without-bcache \ + --without-btrfs \ + --without-dm \ + --without-dmraid \ + --without-escrow \ + --without-kbd \ + --without-lvm_dbus \ + --without-mpath \ + --without-nvdimm \ + --without-python2 \ + --without-python3 \ + --without-s390 \ + --without-tools \ + --without-vdo + +ifeq ($(BR2_PACKAGE_LIBBLOCKDEV_CRYPTO),y) +LIBBLOCKDEV_DEPENDENCIES += cryptsetup +LIBBLOCKDEV_CONF_OPTS += --with-crypto +else +LIBBLOCKDEV_CONF_OPTS += --without-crypto +endif + +ifeq ($(BR2_PACKAGE_LIBBLOCKDEV_FS),y) +LIBBLOCKDEV_DEPENDENCIES += parted util-linux +LIBBLOCKDEV_CONF_OPTS += --with-fs +else +LIBBLOCKDEV_CONF_OPTS += --without-fs +endif + +ifeq ($(BR2_PACKAGE_LIBBLOCKDEV_LOOP),y) +LIBBLOCKDEV_CONF_OPTS += --with-loop +else +LIBBLOCKDEV_CONF_OPTS += --without-loop +endif + +ifeq ($(BR2_PACKAGE_LIBBLOCKDEV_LVM2),y) +LIBBLOCKDEV_DEPENDENCIES += lvm2 parted +LIBBLOCKDEV_CONF_OPTS += --with-lvm +else +LIBBLOCKDEV_CONF_OPTS += --without-lvm +endif + +ifeq ($(BR2_PACKAGE_LIBBLOCKDEV_MDRAID),y) +LIBBLOCKDEV_DEPENDENCIES += libbytesize +LIBBLOCKDEV_CONF_OPTS += --with-mdraid +else +LIBBLOCKDEV_CONF_OPTS += --without-mdraid +endif + +ifeq ($(BR2_PACKAGE_LIBBLOCKDEV_PART),y) +LIBBLOCKDEV_DEPENDENCIES += parted +LIBBLOCKDEV_CONF_OPTS += --with-part +else +LIBBLOCKDEV_CONF_OPTS += --without-part +endif + +ifeq ($(BR2_PACKAGE_LIBBLOCKDEV_SWAP),y) +LIBBLOCKDEV_DEPENDENCIES += util-linux +LIBBLOCKDEV_CONF_OPTS += --with-swap +else +LIBBLOCKDEV_CONF_OPTS += --without-swap +endif + +$(eval $(autotools-package)) diff --git a/package/libbluray/Config.in b/package/libbluray/Config.in new file mode 100644 index 00000000..b9589356 --- /dev/null +++ b/package/libbluray/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBBLURAY + bool "libbluray" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + help + libbluray is a client library for accessing bluray disks. + + http://www.videolan.org/developers/libbluray.html + +comment "libbluray needs a toolchain w/ threads, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/libbluray/libbluray.hash b/package/libbluray/libbluray.hash new file mode 100644 index 00000000..430d4774 --- /dev/null +++ b/package/libbluray/libbluray.hash @@ -0,0 +1,4 @@ +# From http://download.videolan.org/pub/videolan/libbluray/1.2.1/libbluray-1.2.1.tar.bz2.sha512 +sha512 e9eeee433034266e88c05ae3469c0bd2bf700d7f16e17ad706f48426c143c823e83c16ab79a637f1e85e4eb858aa0577630671f87ba35d179db2a1d8bc8545c4 libbluray-1.2.1.tar.bz2 +# Locally computed +sha256 b3aa400aca6d2ba1f0bd03bd98d03d1fe7489a3bbb26969d72016360af8a5c9d COPYING diff --git a/package/libbluray/libbluray.mk b/package/libbluray/libbluray.mk new file mode 100644 index 00000000..36f59190 --- /dev/null +++ b/package/libbluray/libbluray.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# libbluray +# +################################################################################ + +LIBBLURAY_VERSION = 1.2.1 +LIBBLURAY_SITE = http://download.videolan.org/pub/videolan/libbluray/$(LIBBLURAY_VERSION) +LIBBLURAY_SOURCE = libbluray-$(LIBBLURAY_VERSION).tar.bz2 +LIBBLURAY_INSTALL_STAGING = YES +LIBBLURAY_LICENSE = LGPL-2.1+ +LIBBLURAY_LICENSE_FILES = COPYING +LIBBLURAY_CPE_ID_VENDOR = videolan +LIBBLURAY_DEPENDENCIES = host-pkgconf + +LIBBLURAY_CONF_OPTS = --disable-bdjava-jar + +ifeq ($(BR2_PACKAGE_LIBICONV),y) +LIBBLURAY_DEPENDENCIES += libiconv +endif + +ifeq ($(BR2_PACKAGE_FREETYPE),y) +LIBBLURAY_DEPENDENCIES += freetype +LIBBLURAY_CONF_OPTS += --with-freetype +else +LIBBLURAY_CONF_OPTS += --without-freetype +endif + +ifeq ($(BR2_PACKAGE_FONTCONFIG),y) +LIBBLURAY_DEPENDENCIES += fontconfig +LIBBLURAY_CONF_OPTS += --with-fontconfig +else +LIBBLURAY_CONF_OPTS += --without-fontconfig +endif + +ifeq ($(BR2_PACKAGE_LIBXML2),y) +LIBBLURAY_DEPENDENCIES += libxml2 +LIBBLURAY_CONF_OPTS += --with-libxml2 +else +LIBBLURAY_CONF_OPTS += --without-libxml2 +endif + +$(eval $(autotools-package)) diff --git a/package/libbroadvoice/Config.in b/package/libbroadvoice/Config.in new file mode 100644 index 00000000..3301ba8f --- /dev/null +++ b/package/libbroadvoice/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LIBBROADVOICE + bool "libbroadvoice" + # broken with gcc <= 4.8 on arc + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59049 + depends on !BR2_arc || BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + help + broadvoice - a library for the BroadVoice 16 and 32 speech + codecs + + https://www.broadcom.com/support/broadvoice diff --git a/package/libbroadvoice/libbroadvoice.hash b/package/libbroadvoice/libbroadvoice.hash new file mode 100644 index 00000000..0a22817e --- /dev/null +++ b/package/libbroadvoice/libbroadvoice.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 777e5dccc3d189514b7f8e85b6c941d3b9d16d2d68d72cad055cbdfb571d3681 libbroadvoice-f65b0f50c8c767229fbf1758370880abc0d78564-br1.tar.gz +sha256 2550586c993ce4a8c23c8b11968ea36192116a896a2504799cc65307d769c094 COPYING diff --git a/package/libbroadvoice/libbroadvoice.mk b/package/libbroadvoice/libbroadvoice.mk new file mode 100644 index 00000000..9c6b4e29 --- /dev/null +++ b/package/libbroadvoice/libbroadvoice.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# libbroadvoice +# +################################################################################ + +LIBBROADVOICE_VERSION = f65b0f50c8c767229fbf1758370880abc0d78564 +# we use the FreeSwitch fork because (quoting README): +# "This library is based on the Broadcom reference code, but has been +# heavily modified so that it builds into a proper library, with a clean +# usable interface, on a range of platforms." +LIBBROADVOICE_SITE = https://freeswitch.org/stash/scm/sd/libbroadvoice.git +LIBBROADVOICE_SITE_METHOD = git +LIBBROADVOICE_LICENSE = LGPL-2.1 +LIBBROADVOICE_LICENSE_FILES = COPYING +LIBBROADVOICE_AUTORECONF = YES +LIBBROADVOICE_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/libbsd/Config.in b/package/libbsd/Config.in new file mode 100644 index 00000000..845a2216 --- /dev/null +++ b/package/libbsd/Config.in @@ -0,0 +1,28 @@ +config BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS + bool + default y + # libbsd does not support those architectures (see src/local-elf.h) + depends on !BR2_microblaze + depends on !BR2_arc + depends on !BR2_xtensa + depends on !BR2_nds32 + +config BR2_PACKAGE_LIBBSD + bool "libbsd" + depends on BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_WCHAR + help + This library provides useful functions commonly found on BSD + systems, and lacking on others like GNU systems, thus making + it easier to port projects with strong BSD origins, without + needing to embed the same code over and over again on each + project. + + http://libbsd.freedesktop.org/ + +comment "libbsd needs a toolchain w/ dynamic library, threads, wchar" + depends on BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_USE_WCHAR diff --git a/package/libbsd/libbsd.hash b/package/libbsd/libbsd.hash new file mode 100644 index 00000000..95887bd6 --- /dev/null +++ b/package/libbsd/libbsd.hash @@ -0,0 +1,3 @@ +# From https://lists.freedesktop.org/archives/libbsd/2019-August/000229.html +sha256 34b8adc726883d0e85b3118fa13605e179a62b31ba51f676136ecb2d0bc1a887 libbsd-0.10.0.tar.xz +sha256 933d14a6bc89ee1fd7adbf5b6ec97f6ff0e002549d0b0c164f8a8895371d78f8 COPYING diff --git a/package/libbsd/libbsd.mk b/package/libbsd/libbsd.mk new file mode 100644 index 00000000..256a75f1 --- /dev/null +++ b/package/libbsd/libbsd.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libbsd +# +################################################################################ + +LIBBSD_VERSION = 0.10.0 +LIBBSD_SOURCE = libbsd-$(LIBBSD_VERSION).tar.xz +LIBBSD_SITE = https://libbsd.freedesktop.org/releases +LIBBSD_LICENSE = BSD-2-Clause, BSD-3-Clause, BSD-4-Clause, BSD-5-Clause, \ + MIT, ISC, Beerware +LIBBSD_LICENSE_FILES = COPYING +LIBBSD_CPE_ID_VENDOR = freedesktop +LIBBSD_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/libbson/Config.in b/package/libbson/Config.in new file mode 100644 index 00000000..95f224e2 --- /dev/null +++ b/package/libbson/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBBSON + bool "libbson" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + libbson is a library providing useful routines related to + building, parsing, and iterating BSON documents. + + http://mongoc.org/libbson/ + +comment "libbson needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libbson/libbson.hash b/package/libbson/libbson.hash new file mode 100644 index 00000000..56845990 --- /dev/null +++ b/package/libbson/libbson.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 6bb51b863a4641d6d7729e4b55df8f4389ed534c34eb3a1cda906a53df11072c libbson-1.9.5.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 COPYING +sha256 8dc5cb3146b026715e6c145621c7732f36c295d825b7b3a03076ad3f238db48e THIRD_PARTY_NOTICES diff --git a/package/libbson/libbson.mk b/package/libbson/libbson.mk new file mode 100644 index 00000000..931df333 --- /dev/null +++ b/package/libbson/libbson.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# libbson +# +################################################################################ + +LIBBSON_VERSION = 1.9.5 +LIBBSON_SITE = https://github.com/mongodb/libbson/releases/download/$(LIBBSON_VERSION) +LIBBSON_LICENSE = Apache-2.0, MIT (jsonl), ISC (b64), Zlib (md5) +LIBBSON_LICENSE_FILES = COPYING THIRD_PARTY_NOTICES +LIBBSON_CONF_OPTS = \ + --disable-tests \ + --disable-examples \ + --disable-man-pages \ + --disable-html-docs + +LIBBSON_INSTALL_STAGING = YES + +# Also has CMake support, but that forces shared+static libs and static +# lib has a different name. +$(eval $(autotools-package)) diff --git a/package/libbytesize/Config.in b/package/libbytesize/Config.in new file mode 100644 index 00000000..6cc550e4 --- /dev/null +++ b/package/libbytesize/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LIBBYTESIZE + bool "libbytesize" + select BR2_PACKAGE_GMP + select BR2_PACKAGE_MPFR + select BR2_PACKAGE_PCRE2 + help + A tiny library that facilitates the common operations with + sizes in bytes + + https://github.com/storaged-project/libbytesize/ diff --git a/package/libbytesize/libbytesize.hash b/package/libbytesize/libbytesize.hash new file mode 100644 index 00000000..51fa43ae --- /dev/null +++ b/package/libbytesize/libbytesize.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 6305addae2b7be313dbfc36b96094ec0544d5144859ab4a5685ca6d314d6fdda libbytesize-2.5.tar.gz +sha256 97bdc721d875501b6243a456333fdfdb1ab64d31c4da2554de845caf4674b946 LICENSE diff --git a/package/libbytesize/libbytesize.mk b/package/libbytesize/libbytesize.mk new file mode 100644 index 00000000..0ba380dc --- /dev/null +++ b/package/libbytesize/libbytesize.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# libbytesize +# +################################################################################ + +LIBBYTESIZE_VERSION = 2.5 +LIBBYTESIZE_SITE = https://github.com/storaged-project/libbytesize/releases/download/$(LIBBYTESIZE_VERSION) +LIBBYTESIZE_LICENSE = LGPL-2.1+ +LIBBYTESIZE_LICENSE_FILES = LICENSE +LIBBYTESIZE_INSTALL_STAGING = YES + +LIBBYTESIZE_DEPENDENCIES = \ + host-pkgconf \ + host-gettext \ + gmp \ + mpfr \ + pcre2 + +LIBBYTESIZE_CONF_OPTS += \ + --without-python3 \ + --without-tools + +$(eval $(autotools-package)) diff --git a/package/libcamera/0001-libcamera-add-dependencies-to-libcamera_dep.patch b/package/libcamera/0001-libcamera-add-dependencies-to-libcamera_dep.patch new file mode 100644 index 00000000..aa8d659c --- /dev/null +++ b/package/libcamera/0001-libcamera-add-dependencies-to-libcamera_dep.patch @@ -0,0 +1,37 @@ +From 1a2fd4526e0858827f47a7e9359df34f0d0e3108 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Thu, 27 May 2021 21:00:21 +0200 +Subject: [PATCH] libcamera: add dependencies to libcamera_dep + +Add dependencies to libcamera_dep to avoid the following build failure +with qcam on sparc v8 which is raised since commit +a8310248fc26cc1e1b791af5e9394c1d20bee269: + +FAILED: src/qcam/qcam +/srv/storage/autobuild/run/instance-0/output-1/host/bin/sparc-linux-g++ -o src/qcam/qcam src/qcam/qcam.p/meson-generated_.._qt5-feathericons_qrc.cpp.o src/qcam/qcam.p/meson-generated_moc_main_window.cpp.o src/qcam/qcam.p/meson-generated_moc_viewfinder_qt.cpp.o src/qcam/qcam.p/.._cam_options.cpp.o src/qcam/qcam.p/.._cam_stream_options.cpp.o src/qcam/qcam.p/format_converter.cpp.o src/qcam/qcam.p/main.cpp.o src/qcam/qcam.p/main_window.cpp.o src/qcam/qcam.p/message_handler.cpp.o src/qcam/qcam.p/viewfinder_qt.cpp.o src/qcam/qcam.p/dng_writer.cpp.o -Wl,--as-needed -Wl,--no-undefined -Wl,-O1 -Wshadow -include config.h '-Wl,-rpath,$ORIGIN/../libcamera' -Wl,-rpath-link,/srv/storage/autobuild/run/instance-0/output-1/build/libcamera-3a1f67a8031ac5ad96a11d5dc8b2e8976290497b/build/src/libcamera -Wl,--start-group src/libcamera/libcamera.so /srv/storage/autobuild/run/instance-0/output-1/host/sparc-buildroot-linux-uclibc/sysroot/usr/lib/libQt5Core.so /srv/storage/autobuild/run/instance-0/output-1/host/sparc-buildroot-linux-uclibc/sysroot/usr/lib/libQt5Gui.so /srv/storage/autobuild/run/instance-0/output-1/host/sparc-buildroot-linux-uclibc/sysroot/usr/lib/libQt5Widgets.so /srv/storage/autobuild/run/instance-0/output-1/host/sparc-buildroot-linux-uclibc/sysroot/usr/lib/libtiff.so -Wl,--end-group +/srv/storage/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/sparc-buildroot-linux-uclibc/9.3.0/../../../../sparc-buildroot-linux-uclibc/bin/ld: src/qcam/qcam.p/main_window.cpp.o: undefined reference to symbol '__atomic_fetch_add_4@@LIBATOMIC_1.0' +/srv/storage/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/sparc-buildroot-linux-uclibc/9.3.0/../../../../sparc-buildroot-linux-uclibc/bin/ld: /srv/storage/autobuild/run/instance-0/output-1/host/sparc-buildroot-linux-uclibc/sysroot/lib/libatomic.so.1: error adding symbols: DSO missing from command line + +Fixes: + - http://autobuild.buildroot.org/results/d0726b2253f1f3d006e057f3b32c646c4b9b5f7a + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://bugs.libcamera.org/show_bug.cgi?id=39] +--- + src/libcamera/meson.build | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build +index cc2b8669..af3533ad 100644 +--- a/src/libcamera/meson.build ++++ b/src/libcamera/meson.build +@@ -160,6 +160,7 @@ libcamera_dep = declare_dependency(sources : [ + libcamera_public_headers, + ], + include_directories : libcamera_includes, ++ dependencies : libcamera_deps, + link_with : libcamera) + + subdir('proxy/worker') +-- +2.30.2 diff --git a/package/libcamera/Config.in b/package/libcamera/Config.in new file mode 100644 index 00000000..92c17df8 --- /dev/null +++ b/package/libcamera/Config.in @@ -0,0 +1,77 @@ +config BR2_PACKAGE_LIBCAMERA_ARCH_SUPPORTS + bool + default y + # Invalid packing size of ControlValue struct on m68k + depends on !BR2_m68k + depends on !BR2_TOOLCHAIN_HAS_BINUTILS_BUG_27597 + +menuconfig BR2_PACKAGE_LIBCAMERA + bool "libcamera" + depends on BR2_PACKAGE_LIBCAMERA_ARCH_SUPPORTS + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_7 # C++17 + depends on !BR2_STATIC_LIBS # gnutls + depends on BR2_USE_WCHAR # gnutls + select BR2_PACKAGE_GNUTLS + select BR2_PACKAGE_LIBCAMERA_PIPELINE_UVCVIDEO if !BR2_PACKAGE_LIBCAMERA_HAS_PIPELINE + help + libcamera provides a software stack to support + complex devices that need heavy hardware image + processing operations. + + http://www.libcamera.org/ + +if BR2_PACKAGE_LIBCAMERA + +config BR2_PACKAGE_LIBCAMERA_V4L2 + bool "libcamera v4l2 compatibility layer" + help + libcamera v4l2 compatibility layer + +config BR2_PACKAGE_LIBCAMERA_HAS_PIPELINE + bool + +config BR2_PACKAGE_LIBCAMERA_PIPELINE_IPU3 + bool "ipu3 pipeline" + select BR2_PACKAGE_LIBCAMERA_HAS_PIPELINE + help + Pipeline for Intel IPU3. + +config BR2_PACKAGE_LIBCAMERA_PIPELINE_RASPBERRYPI + bool "raspberrypi pipeline" + depends on BR2_USE_WCHAR # boost (already enforced for gnutls) + select BR2_PACKAGE_BOOST + select BR2_PACKAGE_LIBCAMERA_HAS_PIPELINE + help + Pipeline for Raspberry Pi devices. + +config BR2_PACKAGE_LIBCAMERA_PIPELINE_RKISP1 + bool "rkisp1 pipeline" + select BR2_PACKAGE_LIBCAMERA_HAS_PIPELINE + help + Pipeline for Rockchip ISP1. + +config BR2_PACKAGE_LIBCAMERA_PIPELINE_SIMPLE + bool "simple pipeline" + select BR2_PACKAGE_LIBCAMERA_HAS_PIPELINE + help + Pipeline for simple pipelines. + +config BR2_PACKAGE_LIBCAMERA_PIPELINE_UVCVIDEO + bool "uvcvideo pipeline" + help + Pipeline for uvcvideo devices. + +config BR2_PACKAGE_LIBCAMERA_PIPELINE_VIMC + bool "vimc pipeline" + select BR2_PACKAGE_LIBCAMERA_HAS_PIPELINE + help + Pipeline for the vimc device. + +endif # BR2_PACKAGE_LIBCAMERA + +comment "libcamera needs a toolchain w/ C++, threads, wchar, dynamic library, gcc >= 7" + depends on BR2_PACKAGE_LIBCAMERA_ARCH_SUPPORTS + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_7 || BR2_STATIC_LIBS || !BR2_USE_WCHAR diff --git a/package/libcamera/libcamera.hash b/package/libcamera/libcamera.hash new file mode 100644 index 00000000..e2131f01 --- /dev/null +++ b/package/libcamera/libcamera.hash @@ -0,0 +1,12 @@ +sha256 e9c02a370a15188163f247210cdcba4427d5bcf7b681c7fea5cb1dde23f71a15 libcamera-ab72e6641c56e876f91edee57a8969982a3ab9b7-br1.tar.gz + +# license files +sha256 fd38b2c053c0cce46d9c5ef3545a6e34d157a240ba99c9b8dca5d37a8147da6c LICENSES/BSD-2-Clause.txt +sha256 e11af671c491efac2f94c1d752bea92f4308ca2450c7d11e582e4b48c40e4de1 LICENSES/BSD-3-Clause.txt +sha256 6a573fb2f9082662978cf21fb153096df0a1981deaea7dbc10a11046fe005d9f LICENSES/CC0-1.0.txt +sha256 ec3732087acf8c52429a020d6bba362ff578705bdb53365a21744485ec15b0e6 LICENSES/CC-BY-SA-4.0.txt +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSES/GPL-2.0-only.txt +sha256 606aa26338f69ce178f1cbc648b7574aec4b5bbaeb20f4df36ff49010cb8fbbd LICENSES/GPL-2.0-or-later.txt +sha256 1ccf09bf2f598308df4bed9cd8e9657dc5cd0973d2800318f2e241486e2edf3f LICENSES/LGPL-2.1-or-later.txt +sha256 3f9e477523febab58de8b716ccfbcf02e6ef1c8e7728953905e8558637abe2a9 LICENSES/Linux-syscall-note.txt +sha256 8f25018489d6fe0dec34a352314c38dc146247b7de65735790f4398a92afa84b LICENSES/MIT.txt diff --git a/package/libcamera/libcamera.mk b/package/libcamera/libcamera.mk new file mode 100644 index 00000000..391dea75 --- /dev/null +++ b/package/libcamera/libcamera.mk @@ -0,0 +1,95 @@ +################################################################################ +# +# libcamera +# +################################################################################ + +LIBCAMERA_SITE = https://git.linuxtv.org/libcamera.git +LIBCAMERA_VERSION = ab72e6641c56e876f91edee57a8969982a3ab9b7 +LIBCAMERA_SITE_METHOD = git +LIBCAMERA_DEPENDENCIES = \ + host-openssl \ + host-pkgconf \ + host-python3-jinja2 \ + host-python3-ply \ + host-python3-pyyaml \ + gnutls +LIBCAMERA_CONF_OPTS = \ + -Dandroid=disabled \ + -Ddocumentation=disabled \ + -Dtest=false \ + -Dwerror=false +LIBCAMERA_INSTALL_STAGING = YES +LIBCAMERA_LICENSE = \ + LGPL-2.1+ (library), \ + GPL-2.0+ (utils), \ + MIT (qcam/assets/feathericons), \ + BSD-2-Clause (raspberrypi), \ + GPL-2.0 with Linux-syscall-note or BSD-3-Clause (linux kernel headers), \ + CC0-1.0 (meson build system), \ + CC-BY-SA-4.0 (doc) +LIBCAMERA_LICENSE_FILES = \ + LICENSES/LGPL-2.1-or-later.txt \ + LICENSES/GPL-2.0-or-later.txt \ + LICENSES/MIT.txt \ + LICENSES/BSD-2-Clause.txt \ + LICENSES/GPL-2.0-only.txt \ + LICENSES/Linux-syscall-note.txt \ + LICENSES/BSD-3-Clause.txt \ + LICENSES/CC0-1.0.txt \ + LICENSES/CC-BY-SA-4.0.txt + +ifeq ($(BR2_TOOLCHAIN_GCC_AT_LEAST_7),y) +LIBCAMERA_CXXFLAGS = -faligned-new +endif + +ifeq ($(BR2_PACKAGE_LIBCAMERA_V4L2),y) +LIBCAMERA_CONF_OPTS += -Dv4l2=true +else +LIBCAMERA_CONF_OPTS += -Dv4l2=false +endif + +LIBCAMERA_PIPELINES-$(BR2_PACKAGE_LIBCAMERA_PIPELINE_IPU3) += ipu3 +ifeq ($(BR2_PACKAGE_LIBCAMERA_PIPELINE_RASPBERRYPI),y) +LIBCAMERA_PIPELINES-y += raspberrypi +LIBCAMERA_DEPENDENCIES += boost +endif +LIBCAMERA_PIPELINES-$(BR2_PACKAGE_LIBCAMERA_PIPELINE_RKISP1) += rkisp1 +LIBCAMERA_PIPELINES-$(BR2_PACKAGE_LIBCAMERA_PIPELINE_SIMPLE) += simple +LIBCAMERA_PIPELINES-$(BR2_PACKAGE_LIBCAMERA_PIPELINE_UVCVIDEO) += uvcvideo +LIBCAMERA_PIPELINES-$(BR2_PACKAGE_LIBCAMERA_PIPELINE_VIMC) += vimc + +LIBCAMERA_CONF_OPTS += -Dpipelines=$(subst $(space),$(comma),$(LIBCAMERA_PIPELINES-y)) + +# gstreamer-video-1.0, gstreamer-allocators-1.0 +ifeq ($(BR2_PACKAGE_GSTREAMER1)$(BR2_PACKAGE_GST1_PLUGINS_BASE),yy) +LIBCAMERA_CONF_OPTS += -Dgstreamer=enabled +LIBCAMERA_DEPENDENCIES += gstreamer1 gst1-plugins-base +endif + +ifeq ($(BR2_PACKAGE_QT5BASE_WIDGETS),y) +LIBCAMERA_CONF_OPTS += -Dqcam=enabled +LIBCAMERA_DEPENDENCIES += qt5base +ifeq ($(BR2_PACKAGE_QT5TOOLS_LINGUIST_TOOLS),y) +LIBCAMERA_DEPENDENCIES += qt5tools +endif +else +LIBCAMERA_CONF_OPTS += -Dqcam=disabled +endif + +ifeq ($(BR2_PACKAGE_TIFF),y) +LIBCAMERA_DEPENDENCIES += tiff +endif + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +LIBCAMERA_DEPENDENCIES += udev +endif + +ifeq ($(BR2_PACKAGE_LTTNG_LIBUST),y) +LIBCAMERA_CONF_OPTS += -Dtracing=enabled +LIBCAMERA_DEPENDENCIES += lttng-libust +else +LIBCAMERA_CONF_OPTS += -Dtracing=disabled +endif + +$(eval $(meson-package)) diff --git a/package/libcap-ng/Config.in b/package/libcap-ng/Config.in new file mode 100644 index 00000000..46f0b69c --- /dev/null +++ b/package/libcap-ng/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LIBCAP_NG + bool "libcap-ng" + help + The libcap-ng library is intended to make programming with + posix capabilities much easier than the traditional libcap + library. It includes utilities that can analyse all currently + running applications and print out any capabilities and + whether or not it has an open ended bounding set. + + http://people.redhat.com/sgrubb/libcap-ng/ diff --git a/package/libcap-ng/libcap-ng.hash b/package/libcap-ng/libcap-ng.hash new file mode 100644 index 00000000..f775ae6f --- /dev/null +++ b/package/libcap-ng/libcap-ng.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 52c083b77c2b0d8449dee141f9c3eba76e6d4c5ad44ef05df25891126cb85ae9 libcap-ng-0.8.2.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING +sha256 f18a0811fa0e220ccbc42f661545e77f0388631e209585ed582a1c693029c6aa COPYING.LIB diff --git a/package/libcap-ng/libcap-ng.mk b/package/libcap-ng/libcap-ng.mk new file mode 100644 index 00000000..4fb0cf47 --- /dev/null +++ b/package/libcap-ng/libcap-ng.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# libcap-ng +# +################################################################################ + +LIBCAP_NG_VERSION = 0.8.2 +LIBCAP_NG_SITE = http://people.redhat.com/sgrubb/libcap-ng +LIBCAP_NG_LICENSE = GPL-2.0+ (programs), LGPL-2.1+ (library) +LIBCAP_NG_LICENSE_FILES = COPYING COPYING.LIB +LIBCAP_NG_CPE_ID_VENDOR = libcap-ng_project +LIBCAP_NG_INSTALL_STAGING = YES + +LIBCAP_NG_CONF_ENV = ac_cv_prog_swig_found=no +LIBCAP_NG_CONF_OPTS = --without-python + +HOST_LIBCAP_NG_CONF_ENV = ac_cv_prog_swig_found=no +HOST_LIBCAP_NG_CONF_OPTS = --without-python + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libcap/Config.in b/package/libcap/Config.in new file mode 100644 index 00000000..e1971b7b --- /dev/null +++ b/package/libcap/Config.in @@ -0,0 +1,24 @@ +config BR2_PACKAGE_LIBCAP + bool "libcap" + depends on BR2_USE_MMU # fork() + help + This library implements the user-space interfaces to the + POSIX 1003.1e capabilities available in Linux kernels. These + capabilities are a partitioning of the all powerful root + privilege into a set of distinct privileges. + + https://sites.google.com/site/fullycapable/ + +if BR2_PACKAGE_LIBCAP + +config BR2_PACKAGE_LIBCAP_TOOLS + bool "install tools" + help + Install setcap, getcap, getpcaps and capsh tools. + + For these tools to run properly, you should enable, in your + kernel configuration, extended file attributes/security labels + support for the file system type used on target system (e.g. + CONFIG_EXT2_FS_XATTR and CONFIG_EXT2_FS_SECURITY for ext2). + +endif diff --git a/package/libcap/libcap.hash b/package/libcap/libcap.hash new file mode 100644 index 00000000..7499f246 --- /dev/null +++ b/package/libcap/libcap.hash @@ -0,0 +1,5 @@ +# https://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2/sha256sums.asc +sha256 4de9590ee09a87c282d558737ffb5b6175ccbfd26d580add10df44d0f047f6c2 libcap-2.48.tar.xz + +# Hash for license file: +sha256 088cabde4662b4121258d298b0b2967bc1abffa134457ed9bc4a359685ab92bc License diff --git a/package/libcap/libcap.mk b/package/libcap/libcap.mk new file mode 100644 index 00000000..79a130b4 --- /dev/null +++ b/package/libcap/libcap.mk @@ -0,0 +1,72 @@ +################################################################################ +# +# libcap +# +################################################################################ + +LIBCAP_VERSION = 2.48 +LIBCAP_SITE = https://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2 +LIBCAP_SOURCE = libcap-$(LIBCAP_VERSION).tar.xz +LIBCAP_LICENSE = GPL-2.0 or BSD-3-Clause +LIBCAP_LICENSE_FILES = License +LIBCAP_CPE_ID_VENDOR = libcap_project + +LIBCAP_DEPENDENCIES = host-libcap host-gperf +LIBCAP_INSTALL_STAGING = YES + +HOST_LIBCAP_DEPENDENCIES = host-gperf + +LIBCAP_MAKE_FLAGS = \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + BUILD_CC="$(HOSTCC)" \ + BUILD_CFLAGS="$(HOST_CFLAGS)" \ + lib=lib \ + prefix=/usr \ + SHARED=$(if $(BR2_STATIC_LIBS),,yes) \ + PTHREADS=$(if $(BR2_TOOLCHAIN_HAS_THREADS),yes,) + +LIBCAP_MAKE_DIRS = libcap + +ifeq ($(BR2_PACKAGE_LIBCAP_TOOLS),y) +LIBCAP_MAKE_DIRS += progs +endif + +define LIBCAP_BUILD_CMDS + $(foreach d,$(LIBCAP_MAKE_DIRS), \ + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D)/$(d) \ + $(LIBCAP_MAKE_FLAGS) all + ) +endef + +define LIBCAP_INSTALL_STAGING_CMDS + $(foreach d,$(LIBCAP_MAKE_DIRS), \ + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/$(d) $(LIBCAP_MAKE_FLAGS) \ + DESTDIR=$(STAGING_DIR) install + ) +endef + +define LIBCAP_INSTALL_TARGET_CMDS + $(foreach d,$(LIBCAP_MAKE_DIRS), \ + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/$(d) $(LIBCAP_MAKE_FLAGS) \ + DESTDIR=$(TARGET_DIR) install + ) +endef + +HOST_LIBCAP_MAKE_FLAGS = \ + DYNAMIC=yes \ + GOLANG=no \ + lib=lib \ + prefix=$(HOST_DIR) \ + RAISE_SETFCAP=no + +define HOST_LIBCAP_BUILD_CMDS + $(HOST_MAKE_ENV) $(HOST_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + $(HOST_LIBCAP_MAKE_FLAGS) +endef + +define HOST_LIBCAP_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) $(HOST_LIBCAP_MAKE_FLAGS) install +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/libcdaudio/0001-libcdaudio-enable-autoreconf.patch b/package/libcdaudio/0001-libcdaudio-enable-autoreconf.patch new file mode 100644 index 00000000..ab2296c0 --- /dev/null +++ b/package/libcdaudio/0001-libcdaudio-enable-autoreconf.patch @@ -0,0 +1,43 @@ +From 9c2873b1d9292bcf43c862b6777d41c40521424c Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Sun, 13 Jan 2019 22:27:42 +0100 +Subject: [PATCH] libcdaudio: enable autoreconf + +Fixes the following two autoreconf errors (by simple removing of the +two offending lines): + + configure.ac:20: error: automatic de-ANSI-fication support has been removed + + Makefile.am:2: error: automatic de-ANSI-fication support has been removed + +Signed-off-by: Peter Seiderer +--- + Makefile.am | 1 - + configure.ac | 1 - + 2 files changed, 2 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index f639dd8..a32cfe6 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -1,5 +1,4 @@ + ## Process this file with automake to produce Makefile.in +-AUTOMAKE_OPTIONS = ansi2knr + SUBDIRS = src + + bin_SCRIPTS = libcdaudio-config +diff --git a/configure.ac b/configure.ac +index bbdd42d..6699ceb 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -17,7 +17,6 @@ AM_CONFIG_HEADER(config.h) + AC_PROG_AWK + AC_PROG_CC + AC_PROG_CPP +-AM_C_PROTOTYPES + AM_PROG_CC_STDC + AC_PROG_INSTALL + AC_PROG_LN_S +-- +2.20.1 + diff --git a/package/libcdaudio/Config.in b/package/libcdaudio/Config.in new file mode 100644 index 00000000..3eca607f --- /dev/null +++ b/package/libcdaudio/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LIBCDAUDIO + bool "libcdaudio" + # binutils assertion failure + depends on !BR2_nios2 + help + libcdaudio is a library designed to provide functions to + control operation of a CD-ROM when playing audio CDs. It + also contains functions for CDDB and CD Index lookup. + + http://libcdaudio.sourceforge.net/ diff --git a/package/libcdaudio/libcdaudio.hash b/package/libcdaudio/libcdaudio.hash new file mode 100644 index 00000000..67df7c5e --- /dev/null +++ b/package/libcdaudio/libcdaudio.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 5fdaf9af5ac4f75c0215d000b82b128fd054a582f81cc4f039a1e7fe69335ebb libcdaudio-0.99.12p2.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/libcdaudio/libcdaudio.mk b/package/libcdaudio/libcdaudio.mk new file mode 100644 index 00000000..651289d7 --- /dev/null +++ b/package/libcdaudio/libcdaudio.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# libcdaudio +# +################################################################################ + +LIBCDAUDIO_VERSION = 0.99.12p2 +LIBCDAUDIO_SITE = http://downloads.sourceforge.net/project/libcdaudio/libcdaudio/$(LIBCDAUDIO_VERSION) +LIBCDAUDIO_INSTALL_STAGING = YES +LIBCDAUDIO_CONFIG_SCRIPTS = libcdaudio-config +LIBCDAUDIO_LICENSE = GPL-2.0+ +LIBCDAUDIO_LICENSE_FILES = COPYING + +# fix configure failure when the toolchain doesn't have C++ support +LIBCDAUDIO_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/libcddb/Config.in b/package/libcddb/Config.in new file mode 100644 index 00000000..f2bb8278 --- /dev/null +++ b/package/libcddb/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_LIBCDDB + bool "libcddb" + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + Libcddb is a C library to access data on a CDDB server + (freedb.org). It allows you to: + * search the database for possible CD matches; + * retrieve detailed information about a specific CD; + * submit new CD entries to the database. + + http://libcddb.sourceforge.net/index.html + +if BR2_PACKAGE_LIBCDDB + +config BR2_PACKAGE_LIBCDDB_INSTALL_CDDB_QUERY + bool "install cddb_query" + help + cddb_query is an optionnal libcddb test program. + +endif diff --git a/package/libcddb/libcddb.hash b/package/libcddb/libcddb.hash new file mode 100644 index 00000000..f3519c25 --- /dev/null +++ b/package/libcddb/libcddb.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 35ce0ee1741ea38def304ddfe84a958901413aa829698357f0bee5bb8f0a223b libcddb-1.3.2.tar.bz2 +sha256 7a4436f9ec37603356791c87de3bc444989befd2682d29efb3d97604e04c1852 COPYING diff --git a/package/libcddb/libcddb.mk b/package/libcddb/libcddb.mk new file mode 100644 index 00000000..952a8799 --- /dev/null +++ b/package/libcddb/libcddb.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# libcddb +# +################################################################################ + +LIBCDDB_VERSION = 1.3.2 +LIBCDDB_SOURCE = libcddb-$(LIBCDDB_VERSION).tar.bz2 +LIBCDDB_SITE = http://downloads.sourceforge.net/libcddb +LIBCDDB_LICENSE = LGPL-2.0+ +LIBCDDB_LICENSE_FILES = COPYING +LIBCDDB_INSTALL_STAGING = YES + +ifeq ($(BR2_ENABLE_LOCALE),) +LIBCDDB_DEPENDENCIES += libiconv +endif + +define LIBCDDB_REMOVE_CDDB_QUERY + rm -f $(TARGET_DIR)/usr/bin/cddb_query +endef + +ifeq ($(BR2_PACKAGE_LIBCDDB_INSTALL_CDDB_QUERY),) +LIBCDDB_POST_INSTALL_TARGET_HOOKS += LIBCDDB_REMOVE_CDDB_QUERY +endif + +$(eval $(autotools-package)) diff --git a/package/libcdio-paranoia/Config.in b/package/libcdio-paranoia/Config.in new file mode 100644 index 00000000..28c9ac9c --- /dev/null +++ b/package/libcdio-paranoia/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBCDIO_PARANOIA + bool "libcdio-paranoia" + depends on BR2_USE_MMU # libcdio + select BR2_PACKAGE_LIBCDIO + help + CD paranoia on top of libcdio + + http://www.gnu.org/software/libcdio/ diff --git a/package/libcdio-paranoia/libcdio-paranoia.hash b/package/libcdio-paranoia/libcdio-paranoia.hash new file mode 100644 index 00000000..18e6f33d --- /dev/null +++ b/package/libcdio-paranoia/libcdio-paranoia.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 33b1cf305ccfbfd03b43936975615000ce538b119989c4bec469577570b60e8a libcdio-paranoia-10.2+2.0.1.tar.bz2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/libcdio-paranoia/libcdio-paranoia.mk b/package/libcdio-paranoia/libcdio-paranoia.mk new file mode 100644 index 00000000..944bb14d --- /dev/null +++ b/package/libcdio-paranoia/libcdio-paranoia.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# libcdio-paranoia +# +################################################################################ + +LIBCDIO_PARANOIA_VERSION = 10.2+2.0.1 +LIBCDIO_PARANOIA_SOURCE = libcdio-paranoia-$(LIBCDIO_PARANOIA_VERSION).tar.bz2 +LIBCDIO_PARANOIA_SITE = $(BR2_GNU_MIRROR)/libcdio +LIBCDIO_PARANOIA_LICENSE = GPL-3.0+ +LIBCDIO_PARANOIA_LICENSE_FILES = COPYING +LIBCDIO_PARANOIA_INSTALL_STAGING = YES +LIBCDIO_PARANOIA_DEPENDENCIES = host-pkgconf libcdio +LIBCDIO_PARANOIA_CONF_OPTS = --disable-example-progs + +ifeq ($(BR2_INSTALL_LIBSTDCPP),) +LIBCDIO_PARANOIA_CONF_OPTS += --disable-cxx +endif + +$(eval $(autotools-package)) diff --git a/package/libcdio/Config.in b/package/libcdio/Config.in new file mode 100644 index 00000000..fdc001ec --- /dev/null +++ b/package/libcdio/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBCDIO + bool "libcdio" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + The GNU Compact Disc Input and Control library. + + http://www.gnu.org/software/libcdio/ diff --git a/package/libcdio/libcdio.hash b/package/libcdio/libcdio.hash new file mode 100644 index 00000000..07bd85ff --- /dev/null +++ b/package/libcdio/libcdio.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking signature +sha256 8550e9589dbd594bfac93b81ecf129b1dc9d0d51e90f9696f1b2f9b2af32712b libcdio-2.1.0.tar.bz2 + +# Hash for license file: +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/libcdio/libcdio.mk b/package/libcdio/libcdio.mk new file mode 100644 index 00000000..df26d9a7 --- /dev/null +++ b/package/libcdio/libcdio.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# libcdio +# +################################################################################ + +LIBCDIO_VERSION = 2.1.0 +LIBCDIO_SOURCE = libcdio-$(LIBCDIO_VERSION).tar.bz2 +LIBCDIO_SITE = $(BR2_GNU_MIRROR)/libcdio +LIBCDIO_INSTALL_STAGING = YES +LIBCDIO_LICENSE = GPL-3.0+ +LIBCDIO_LICENSE_FILES = COPYING +LIBCDIO_CPE_ID_VENDOR = gnu +LIBCDIO_CONF_OPTS = --disable-example-progs --disable-cddb + +ifeq ($(BR2_ENABLE_LOCALE),) +LIBCDIO_DEPENDENCIES += libiconv +endif + +ifeq ($(BR2_INSTALL_LIBSTDCPP),) +LIBCDIO_CONF_OPTS += --disable-cxx +endif + +ifeq ($(BR2_PACKAGE_NCURSES),y) +LIBCDIO_DEPENDENCIES += ncurses +else +LIBCDIO_CONF_OPTS += --without-cdda-player +endif + +$(eval $(autotools-package)) diff --git a/package/libcec/Config.in b/package/libcec/Config.in new file mode 100644 index 00000000..2dddc536 --- /dev/null +++ b/package/libcec/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_LIBCEC + bool "libcec" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_WCHAR + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 # C++11 + select BR2_PACKAGE_LIBPLATFORM + help + libcec allows you in combination with the right hardware to + control your home theater devices with your TV remote + control utilizing existing HDMI cabling. + + http://libcec.pulse-eight.com + +comment "libcec needs a toolchain w/ C++, wchar, threads, dynamic library, gcc >= 4.7" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_USE_WCHAR || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 || \ + BR2_STATIC_LIBS diff --git a/package/libcec/libcec.hash b/package/libcec/libcec.hash new file mode 100644 index 00000000..36b6bad8 --- /dev/null +++ b/package/libcec/libcec.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 bcd92c376993a5721d346edcc09eb17289451f9156b1d1d113c9663c2046315a libcec-4.0.7.tar.gz +sha256 0137261d24ce001fc5237aacddd267533e0f150ac23cf21acffea599f7358f7a COPYING diff --git a/package/libcec/libcec.mk b/package/libcec/libcec.mk new file mode 100644 index 00000000..7c37d05c --- /dev/null +++ b/package/libcec/libcec.mk @@ -0,0 +1,47 @@ +################################################################################ +# +# libcec +# +################################################################################ + +LIBCEC_VERSION = 4.0.7 +LIBCEC_SITE = $(call github,Pulse-Eight,libcec,libcec-$(LIBCEC_VERSION)) +LIBCEC_LICENSE = GPL-2.0+ +LIBCEC_LICENSE_FILES = COPYING + +LIBCEC_INSTALL_STAGING = YES +LIBCEC_DEPENDENCIES = host-pkgconf libplatform + +ifeq ($(BR2_PACKAGE_LOCKDEV),y) +LIBCEC_DEPENDENCIES += lockdev +endif + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +LIBCEC_DEPENDENCIES += udev +endif + +ifeq ($(BR2_PACKAGE_PYTHON)$(BR2_PACKAGE_PYTHON3),y) +LIBCEC_DEPENDENCIES += host-swig $(if $(BR2_PACKAGE_PYTHON3),python3,python) +endif + +ifeq ($(BR2_PACKAGE_RPI_USERLAND),y) +LIBCEC_DEPENDENCIES += rpi-userland +LIBCEC_CONF_OPTS += \ + -DCMAKE_C_FLAGS="$(TARGET_CFLAGS) -lvcos -lvchiq_arm" \ + -DCMAKE_CXX_FLAGS="$(TARGET_CXXFLAGS) \ + -I$(STAGING_DIR)/usr/include/interface/vmcs_host/linux \ + -I$(STAGING_DIR)/usr/include/interface/vcos/pthreads" +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXRANDR),y) +LIBCEC_DEPENDENCIES += xlib_libXrandr +endif + +# Disable information about how libCEC is compiled. +LIBCEC_CONF_OPTS += -DHAVE_GIT_BIN="" \ + -DHAVE_DATE_BIN="" \ + -DHAVE_WHOAMI_BIN="" \ + -DHAVE_HOSTNAME_BIN="" \ + -DHAVE_UNAME_BIN="" + +$(eval $(cmake-package)) diff --git a/package/libcgi/Config.in b/package/libcgi/Config.in new file mode 100644 index 00000000..33369079 --- /dev/null +++ b/package/libcgi/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBCGI + bool "libcgi" + help + LibCGI is a library written from scratch to easily make + CGI applications in C. + + There are a lot of functions like string manipulation, + session and cookie support, GET and POST methods manipulation + etc..., to help you to quickly write powerful CGI programs. + + https://github.com/rafaelsteil/libcgi/ diff --git a/package/libcgi/libcgi.hash b/package/libcgi/libcgi.hash new file mode 100644 index 00000000..8760f91c --- /dev/null +++ b/package/libcgi/libcgi.hash @@ -0,0 +1,8 @@ +# From https://github.com/rafaelsteil/libcgi/releases/download/v1.3.0/libcgi-1.3.0.tar.gz.md5 +md5 6efdc968bdf986832b7e220d1b914e57 libcgi-1.3.0.tar.gz +# From https://github.com/rafaelsteil/libcgi/releases/download/v1.3.0/libcgi-1.3.0.tar.gz.sha256 +sha256 d932f380b1a5dbfbddffaa76fac71bf505a9585d441c9ae86bfbf76033d9d8df libcgi-1.3.0.tar.gz + +# Hash for license file: +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 LICENSES/LGPL-2.1.txt +sha256 f32c31e26ec840753a8cd47cd2681e48be4cee853212d16a4b1d85ac4d677669 LICENSES/MIT.txt diff --git a/package/libcgi/libcgi.mk b/package/libcgi/libcgi.mk new file mode 100644 index 00000000..22163310 --- /dev/null +++ b/package/libcgi/libcgi.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libcgi +# +################################################################################ + +LIBCGI_VERSION = 1.3.0 +LIBCGI_SITE = https://github.com/rafaelsteil/libcgi/releases/download/v$(LIBCGI_VERSION) + +LIBCGI_INSTALL_STAGING = YES +LIBCGI_LICENSE = LGPL-2.1+, MIT (base64.c) +LIBCGI_LICENSE_FILES = LICENSES/LGPL-2.1.txt LICENSES/MIT.txt + +$(eval $(cmake-package)) diff --git a/package/libcgicc/0001-disable-documentation-option.patch b/package/libcgicc/0001-disable-documentation-option.patch new file mode 100644 index 00000000..a7b04a83 --- /dev/null +++ b/package/libcgicc/0001-disable-documentation-option.patch @@ -0,0 +1,50 @@ +Index: cgicc-3.2.9/Makefile.am +=================================================================== +--- cgicc-3.2.9.orig/Makefile.am 2010-02-25 16:34:06.000000000 +0100 ++++ cgicc-3.2.9/Makefile.am 2010-02-25 16:34:14.000000000 +0100 +@@ -8,9 +8,15 @@ + DEMO = + endif + ++if DOC ++DOCDIR = doc ++else ++DOC = ++endif ++ + ACLOCAL_AMFLAGS= + +-SUBDIRS = cgicc doc support $(DEMO) ++SUBDIRS = cgicc $(DOCDIR) support $(DEMO) + + CLEANFILES = *~ + +Index: cgicc-3.2.9/configure.ac +=================================================================== +--- cgicc-3.2.9.orig/configure.ac 2010-02-25 16:34:06.000000000 +0100 ++++ cgicc-3.2.9/configure.ac 2010-02-25 16:45:46.000000000 +0100 +@@ -17,9 +17,23 @@ + AC_PROG_CXX + AC_PROG_INSTALL + AC_PROG_LIBTOOL +-AC_CHECK_PROG(DOXYGEN, doxygen, doxygen, /bin/echo) + + ++AC_ARG_ENABLE(doc, ++ [ --enable-doc build doc [[default=yes]]], ++ [case "${enableval}" in ++ yes) cgicc_doc=yes ;; ++ no) cgicc_doc=no ;; ++ *) AC_MSG_ERROR(bad value ${enableval} for --enable-doc) ;; ++ esac], cgicc_doc=yes) ++ ++if test "$cgicc_doc" = yes; then ++ AC_CHECK_PROG(DOXYGEN, doxygen, doxygen) ++ if test -z "$DOXYGEN" ; then ++ AC_MSG_ERROR([Doxygen is required to build the documentation]) ++ fi ++fi ++AM_CONDITIONAL(DOC, test "$cgicc_doc" = yes) + + dnl Determine host system type + diff --git a/package/libcgicc/Config.in b/package/libcgicc/Config.in new file mode 100644 index 00000000..e1f6904b --- /dev/null +++ b/package/libcgicc/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBCGICC + bool "libcgicc" + depends on BR2_INSTALL_LIBSTDCPP + help + GNU cgicc is a C++ class library that greatly simplifies + the creation of CGI applications for the World Wide Web. + + http://www.cgicc.com + +comment "libcgicc needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/libcgicc/libcgicc.hash b/package/libcgicc/libcgicc.hash new file mode 100644 index 00000000..6fd19e30 --- /dev/null +++ b/package/libcgicc/libcgicc.hash @@ -0,0 +1,6 @@ +# Locally calculated after checking pgp signature +sha256 2a17b976248de03447f9e36d6ce18a80749990d8543e2dfeea09c413eb67f7f0 cgicc-3.2.19.tar.gz + +# Hash for license files: +sha256 a2e480f5e8afd7c587a3c0ac2ed3b73ed4b10fa3a553dea26e7b661c7cedda72 COPYING.LIB +sha256 0fd15977dc962abf3eced509b1cf5356f9784939742d67a635671141023a11da COPYING.DOC diff --git a/package/libcgicc/libcgicc.mk b/package/libcgicc/libcgicc.mk new file mode 100644 index 00000000..e9ce4043 --- /dev/null +++ b/package/libcgicc/libcgicc.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# libcgicc +# +################################################################################ + +LIBCGICC_VERSION = 3.2.19 +LIBCGICC_SITE = $(BR2_GNU_MIRROR)/cgicc +LIBCGICC_SOURCE = cgicc-$(LIBCGICC_VERSION).tar.gz +LIBCGICC_LICENSE = LGPL-3.0+ (library), GFDL-1.2+ (docs) +LIBCGICC_LICENSE_FILES = COPYING.LIB COPYING.DOC +LIBCGICC_INSTALL_STAGING = YES +LIBCGICC_AUTORECONF = YES +LIBCGICC_CONFIG_SCRIPTS = cgicc-config +LIBCGICC_CONF_OPTS = \ + --disable-demos \ + --disable-doc + +$(eval $(autotools-package)) diff --git a/package/libcgroup/0001-cgrulesengd-remove-umask-0.patch b/package/libcgroup/0001-cgrulesengd-remove-umask-0.patch new file mode 100644 index 00000000..1d9077a2 --- /dev/null +++ b/package/libcgroup/0001-cgrulesengd-remove-umask-0.patch @@ -0,0 +1,33 @@ +From 0d88b73d189ea3440ccaab00418d6469f76fa590 Mon Sep 17 00:00:00 2001 +From: Michal Hocko +Date: Wed, 18 Jul 2018 11:24:29 +0200 +Subject: [PATCH] cgrulesengd: remove umask(0) + +One of our partners has noticed that cgred daemon is creating a log file +(/var/log/cgred) with too wide permissions (0666) and that is seen as +a security bug because an untrusted user can write to otherwise +restricted area. CVE-2018-14348 has been assigned to this issue. + +Signed-off-by: Michal Hocko +Acked-by: Balbir Singh +[Retrieved from: +https://github.com/libcgroup/libcgroup/commit/0d88b73d189ea3440ccaab00418d6469f76fa590] +Signed-off-by: Fabrice Fontaine +--- + src/daemon/cgrulesengd.c | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/src/daemon/cgrulesengd.c b/src/daemon/cgrulesengd.c +index ea51f11..0d288f3 100644 +--- a/src/daemon/cgrulesengd.c ++++ b/src/daemon/cgrulesengd.c +@@ -889,9 +889,6 @@ int cgre_start_daemon(const char *logp, const int logf, + } else if (pid > 0) { + exit(EXIT_SUCCESS); + } +- +- /* Change the file mode mask. */ +- umask(0); + } else { + flog(LOG_DEBUG, "Not using daemon mode\n"); + pid = getpid(); diff --git a/package/libcgroup/Config.in b/package/libcgroup/Config.in new file mode 100644 index 00000000..03efa71e --- /dev/null +++ b/package/libcgroup/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_LIBCGROUP + bool "libcgroup" + depends on BR2_INSTALL_LIBSTDCPP + # libcgroup uses which is not included by default in uClibc + depends on BR2_TOOLCHAIN_USES_GLIBC + help + libcgroup is a library that abstracts the control + group file system in Linux. + + http://libcg.sourceforge.net/ + +if BR2_PACKAGE_LIBCGROUP + +config BR2_PACKAGE_LIBCGROUP_TOOLS + bool "install tools" + help + Include a set of command-line tools for managing cgroups. + +endif + +comment "libcgroup needs a glibc toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_USES_GLIBC diff --git a/package/libcgroup/libcgroup.hash b/package/libcgroup/libcgroup.hash new file mode 100644 index 00000000..11423e26 --- /dev/null +++ b/package/libcgroup/libcgroup.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 e4e38bdc7ef70645ce33740ddcca051248d56b53283c0dc6d404e17706f6fb51 libcgroup-0.41.tar.bz2 +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 COPYING diff --git a/package/libcgroup/libcgroup.mk b/package/libcgroup/libcgroup.mk new file mode 100644 index 00000000..e2a936ee --- /dev/null +++ b/package/libcgroup/libcgroup.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# libcgroup +# +################################################################################ + +LIBCGROUP_VERSION = 0.41 +LIBCGROUP_SOURCE = libcgroup-$(LIBCGROUP_VERSION).tar.bz2 +LIBCGROUP_SITE = http://downloads.sourceforge.net/project/libcg/libcgroup/v$(LIBCGROUP_VERSION) +LIBCGROUP_LICENSE = LGPL-2.1 +LIBCGROUP_LICENSE_FILES = COPYING +LIBCGROUP_CPE_ID_VENDOR = libcgroup_project +LIBCGROUP_DEPENDENCIES = host-bison host-flex +LIBCGROUP_INSTALL_STAGING = YES + +# 0001-cgrulesengd-remove-umask-0.patch +LIBCGROUP_IGNORE_CVES += CVE-2018-14348 + +# Undefining _FILE_OFFSET_BITS here because of a "bug" with glibc fts.h +# large file support. See https://bugzilla.redhat.com/show_bug.cgi?id=574992 +# for more information. +LIBCGROUP_CONF_ENV = \ + CXXFLAGS="$(TARGET_CXXFLAGS) -U_FILE_OFFSET_BITS" \ + CFLAGS="$(TARGET_CFLAGS) -U_FILE_OFFSET_BITS" + +LIBCGROUP_CONF_OPTS = \ + --disable-daemon \ + --disable-initscript-install + +ifeq ($(BR2_PACKAGE_LIBCGROUP_TOOLS),y) +LIBCGROUP_CONF_OPTS += --enable-tools +else +LIBCGROUP_CONF_OPTS += --disable-tools +endif + +ifeq ($(BR2_PACKAGE_LINUX_PAM),y) +LIBCGROUP_DEPENDENCIES += linux-pam +LIBCGROUP_CONF_OPTS += --enable-pam +else +LIBCGROUP_CONF_OPTS += --disable-pam +endif + +$(eval $(autotools-package)) diff --git a/package/libclc/Config.in b/package/libclc/Config.in new file mode 100644 index 00000000..797f090b --- /dev/null +++ b/package/libclc/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LIBCLC + bool "libclc" + depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS + help + libclc is an open source, BSD licensed implementation of + the library requirements of the OpenCL C programming language, + as specified by the OpenCL 1.1 Specification. + + http://libclc.llvm.org/ diff --git a/package/libclc/libclc.hash b/package/libclc/libclc.hash new file mode 100644 index 00000000..2af64bc8 --- /dev/null +++ b/package/libclc/libclc.hash @@ -0,0 +1,3 @@ +# locally calculated +sha256 54d7ae523aabf68d533011739d6c01546cae0c294442d0f44fd657c046cb707d libclc-d1cbc92e2ceee59963f5c3a576382e5bba31f060-br1.tar.gz +sha256 3c536c052db9afd997809e38785c9f2a9e54e2892330fa7c5b438e18a7413479 LICENSE.TXT diff --git a/package/libclc/libclc.mk b/package/libclc/libclc.mk new file mode 100644 index 00000000..6fe8e10a --- /dev/null +++ b/package/libclc/libclc.mk @@ -0,0 +1,46 @@ +################################################################################ +# +# libclc +# +################################################################################ + +# Use the latest commit from release_90 branch. +LIBCLC_VERSION = d1cbc92e2ceee59963f5c3a576382e5bba31f060 +LIBCLC_SITE = https://github.com/llvm-mirror/libclc +LIBCLC_SITE_METHOD = git +LIBCLC_LICENSE = Apache-2.0 with exceptions or MIT +LIBCLC_LICENSE_FILES = LICENSE.TXT + +LIBCLC_DEPENDENCIES = host-clang host-llvm +LIBCLC_INSTALL_STAGING = YES + +# C++ compiler is used to build a small tool (prepare-builtins) for the host. +# It must be built with the C++ compiler from the host. +# +# The headers are installed in /usr/share and not /usr/include, +# because they are needed at runtime on the target to build the OpenCL +# kernels. +LIBCLC_CONF_OPTS = \ + --with-llvm-config=$(HOST_DIR)/usr/bin/llvm-config \ + --prefix=/usr \ + --includedir=/usr/share \ + --pkgconfigdir=/usr/lib/pkgconfig \ + --with-cxx-compiler=$(HOSTCXX_NOCCACHE) + +define LIBCLC_CONFIGURE_CMDS + (cd $(@D); $(TARGET_CONFIGURE_OPTS) ./configure.py $(LIBCLC_CONF_OPTS)) +endef + +define LIBCLC_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define LIBCLC_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +define LIBCLC_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/libcli/Config.in b/package/libcli/Config.in new file mode 100644 index 00000000..b2829cad --- /dev/null +++ b/package/libcli/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LIBCLI + bool "libcli" + help + Libcli provides a shared library for including a Cisco-like + command-line interface into other software. It's a telnet + interface which supports command-line editing, history, + authentication and callbacks for a user-definable function + tree. + + https://github.com/dparrish/libcli diff --git a/package/libcli/libcli.hash b/package/libcli/libcli.hash new file mode 100644 index 00000000..a17a176f --- /dev/null +++ b/package/libcli/libcli.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 43efade6f3deb621e1e226b7854274a869fca57e12e74e61c5496d5dea7c445d libcli-1.10.4.tar.gz +sha256 376b54d4c5f4aa99421823fa4da93e3ab73096fce2400e89858632aa7da24a14 COPYING diff --git a/package/libcli/libcli.mk b/package/libcli/libcli.mk new file mode 100644 index 00000000..2dedc9d5 --- /dev/null +++ b/package/libcli/libcli.mk @@ -0,0 +1,44 @@ +################################################################################ +# +# libcli +# +################################################################################ + +LIBCLI_VERSION = 1.10.4 +LIBCLI_SITE = $(call github,dparrish,libcli,V$(LIBCLI_VERSION)) +LIBCLI_LICENSE = LGPL-2.1 +LIBCLI_LICENSE_FILES = COPYING +LIBCLI_INSTALL_STAGING = YES + +# We will pass optimisation level via CFLAGS so remove libcli default +LIBCLI_MAKE_ARGS += OPTIM= + +# We can't run the test harness +LIBCLI_MAKE_ARGS += TESTS= + +# Disable the static library for shared only build +ifeq ($(BR2_SHARED_LIBS),y) +LIBCLI_MAKE_ARGS += STATIC_LIB= +endif + +# Disable the shared library for static only build +ifeq ($(BR2_STATIC_LIBS),y) +LIBCLI_MAKE_ARGS += DYNAMIC_LIB= +endif + +define LIBCLI_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) \ + $(LIBCLI_MAKE_ARGS) +endef + +define LIBCLI_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) \ + $(LIBCLI_MAKE_ARGS) DESTDIR=$(STAGING_DIR) PREFIX=/usr install +endef + +define LIBCLI_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) \ + $(LIBCLI_MAKE_ARGS) DESTDIR=$(TARGET_DIR) PREFIX=/usr install +endef + +$(eval $(generic-package)) diff --git a/package/libcoap/Config.in b/package/libcoap/Config.in new file mode 100644 index 00000000..6e0c1905 --- /dev/null +++ b/package/libcoap/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBCOAP + bool "libcoap" + help + libcoap is a C implementation of a lightweight + application-protocol for devices that are constrained their + resources such as computing power, RF range, memory, bandwith, + or network packet sizes. This protocol, CoAP, is standardized + by the IETF as RFC 7252. For further information related to + CoAP, see . + + https://github.com/obgm/libcoap diff --git a/package/libcoap/libcoap.hash b/package/libcoap/libcoap.hash new file mode 100644 index 00000000..34720062 --- /dev/null +++ b/package/libcoap/libcoap.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 29a0394a265d3febee41e5e2dc03d34292a0aede37f5f80334e529ac0dab2321 libcoap-4.2.1.tar.gz +sha256 09dd86a017bad210527085008cbf706609c58210897b69845af14099577e7eb7 COPYING +sha256 c51e85271aca3fbdd79bb4ee45dcfd854724538dad83b70afbbdfc62415e3e7f LICENSE diff --git a/package/libcoap/libcoap.mk b/package/libcoap/libcoap.mk new file mode 100644 index 00000000..9a5e04d4 --- /dev/null +++ b/package/libcoap/libcoap.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# libcoap +# +################################################################################ + +LIBCOAP_VERSION = 4.2.1 +LIBCOAP_SITE = $(call github,obgm,libcoap,v$(LIBCOAP_VERSION)) +LIBCOAP_INSTALL_STAGING = YES +LIBCOAP_LICENSE = BSD-2-Clause +LIBCOAP_LICENSE_FILES = COPYING LICENSE +LIBCOAP_DEPENDENCIES = host-pkgconf +LIBCOAP_CONF_OPTS = --disable-examples --without-tinydtls +LIBCOAP_AUTORECONF = YES + +ifeq ($(BR2_PACKAGE_GNUTLS),y) +LIBCOAP_DEPENDENCIES += gnutls +LIBCOAP_CONF_OPTS += --enable-dtls --with-gnutls --without-openssl +else ifeq ($(BR2_PACKAGE_OPENSSL),y) +LIBCOAP_DEPENDENCIES += openssl +LIBCOAP_CONF_OPTS += --enable-dtls --without-gnutls --with-openssl +else +LIBCOAP_CONF_OPTS += --disable-dtls +endif + +$(eval $(autotools-package)) diff --git a/package/libcodec2/Config.in b/package/libcodec2/Config.in new file mode 100644 index 00000000..9a9eb865 --- /dev/null +++ b/package/libcodec2/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_LIBCODEC2 + bool "libcodec2" + help + Codec2 is an open source low bit rate speech codec designed + for communications quality speech between 700 and 3200 bit/s. + + http://rowetel.com/codec2.html + +if BR2_PACKAGE_LIBCODEC2 + +config BR2_PACKAGE_LIBCODEC2_EXAMPLES + bool "libcodec2_examples" + help + Install Codec2 examples. + +endif diff --git a/package/libcodec2/libcodec2.hash b/package/libcodec2/libcodec2.hash new file mode 100644 index 00000000..ec4f1f1a --- /dev/null +++ b/package/libcodec2/libcodec2.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 19181a446f4df3e6d616b50cabdac4485abb9cd3242cf312a0785f892ed4c76c libcodec2-0.9.2.tar.gz +sha256 9ebb6f82b7380a62ac74c5f0322c88e6744dedf2ebe1f54d6f088282b39844bf COPYING diff --git a/package/libcodec2/libcodec2.mk b/package/libcodec2/libcodec2.mk new file mode 100644 index 00000000..8410ffc9 --- /dev/null +++ b/package/libcodec2/libcodec2.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# libcodec2 +# +################################################################################ + +LIBCODEC2_VERSION = 0.9.2 +LIBCODEC2_SITE = $(call github,drowe67,codec2,v$(LIBCODEC2_VERSION)) +LIBCODEC2_LICENSE = LGPL-2.1 +LIBCODEC2_LICENSE_FILES = COPYING +LIBCODEC2_INSTALL_STAGING = YES +LIBCODEC2_SUPPORTS_IN_SOURCE_BUILD = NO +LIBCODEC2_CONF_OPTS = -DUNITTEST=OFF + +ifeq ($(BR2_PACKAGE_LIBCODEC2_EXAMPLES),y) +LIBCODEC2_CONF_OPTS += -DINSTALL_EXAMPLES=ON +endif + +$(eval $(cmake-package)) diff --git a/package/libcofi/Config.in b/package/libcofi/Config.in new file mode 100644 index 00000000..b9d22d43 --- /dev/null +++ b/package/libcofi/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_LIBCOFI + bool "libcofi" + depends on BR2_arm + # builds a shared library + depends on !BR2_STATIC_LIBS + help + A replacement for memcpy and memset functionality for the + Raspberry Pi with the intention of gaining greater + performance. + + https://github.com/simonjhall/copies-and-fills + +comment "libcofi needs a toolchain w/ dynamic library" + depends on BR2_arm + depends on BR2_STATIC_LIBS diff --git a/package/libcofi/libcofi.hash b/package/libcofi/libcofi.hash new file mode 100644 index 00000000..c5f6bb44 --- /dev/null +++ b/package/libcofi/libcofi.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 72ec89c19267612b316ec9c5835c07212b8f0a377c5b4c20b6e46e69a6e4a5e5 libcofi-7313fbe12b0593034d0a1b606bf33c7cf4ababce.tar.gz +sha256 1a8203e5d11f0841235cf30265b1ffb19c0d9c4a6d2889554cbeccaf9f09b327 README.md diff --git a/package/libcofi/libcofi.mk b/package/libcofi/libcofi.mk new file mode 100644 index 00000000..e611db6b --- /dev/null +++ b/package/libcofi/libcofi.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# libcofi +# +################################################################################ + +LIBCOFI_VERSION = 7313fbe12b0593034d0a1b606bf33c7cf4ababce +LIBCOFI_SITE = $(call github,simonjhall,copies-and-fills,$(LIBCOFI_VERSION)) +LIBCOFI_LICENSE = LGPL-2.1 +LIBCOFI_LICENSE_FILES = README.md + +define LIBCOFI_BUILD_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) +endef + +define LIBCOFI_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/libcofi_rpi.so $(TARGET_DIR)/usr/lib/libcofi_rpi.so +endef + +$(eval $(generic-package)) diff --git a/package/libconfig/Config.in b/package/libconfig/Config.in new file mode 100644 index 00000000..9541b30b --- /dev/null +++ b/package/libconfig/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LIBCONFIG + bool "libconfig" + help + Libconfig is a simple library for manipulating structured + configuration files. The file format is more compact and more + readable than XML. And unlike XML, it is type-aware, so it is + not necessary to do string parsing in application code. + + https://hyperrealm.github.io/libconfig/ diff --git a/package/libconfig/libconfig.hash b/package/libconfig/libconfig.hash new file mode 100644 index 00000000..d359301d --- /dev/null +++ b/package/libconfig/libconfig.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 545166d6cac037744381d1e9cc5a5405094e7bfad16a411699bcff40bbb31ee7 libconfig-1.7.3.tar.gz +sha256 d80c9d084ebfb50ea1ed91bfbc2410d6ce542097a32c43b00781b83adcb8c77f COPYING.LIB diff --git a/package/libconfig/libconfig.mk b/package/libconfig/libconfig.mk new file mode 100644 index 00000000..6cdf6031 --- /dev/null +++ b/package/libconfig/libconfig.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# libconfig +# +################################################################################ + +LIBCONFIG_VERSION = 1.7.3 +LIBCONFIG_SITE = https://github.com/hyperrealm/libconfig/releases/download/v$(LIBCONFIG_VERSION) +LIBCONFIG_LICENSE = LGPL-2.1+ +LIBCONFIG_LICENSE_FILES = COPYING.LIB +LIBCONFIG_INSTALL_STAGING = YES +LIBCONFIG_CONF_OPTS = --disable-examples --disable-tests + +ifneq ($(BR2_INSTALL_LIBSTDCPP),y) +LIBCONFIG_CONF_OPTS += --disable-cxx +endif + +$(eval $(autotools-package)) diff --git a/package/libconfuse/Config.in b/package/libconfuse/Config.in new file mode 100644 index 00000000..b96b8f28 --- /dev/null +++ b/package/libconfuse/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBCONFUSE + bool "libconfuse" + help + LibConfuse is a configuration file parser library written in + C. It supports sections and (lists of) values (strings, + integers, floats, booleans or other sections), as well as some + other features (such as single/double-quoted strings, + environment variable expansion, functions and nested include + statements. + + https://github.com/martinh/libconfuse/ diff --git a/package/libconfuse/libconfuse.hash b/package/libconfuse/libconfuse.hash new file mode 100644 index 00000000..bb968f7a --- /dev/null +++ b/package/libconfuse/libconfuse.hash @@ -0,0 +1,5 @@ +# From https://github.com/martinh/libconfuse/releases/download/v3.3/confuse-3.3.tar.xz.md5 +md5 a183cef2cecdd3783436ff8de500d274 confuse-3.3.tar.xz +# Locally computed +sha256 1dd50a0320e135a55025b23fcdbb3f0a81913b6d0b0a9df8cc2fdf3b3dc67010 confuse-3.3.tar.xz +sha256 dc3ff4b62f851dd2e94a151061ffeb7d28ddfc880a442068dc5283dbaa927306 LICENSE diff --git a/package/libconfuse/libconfuse.mk b/package/libconfuse/libconfuse.mk new file mode 100644 index 00000000..2beb0e4f --- /dev/null +++ b/package/libconfuse/libconfuse.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# libconfuse +# +################################################################################ + +LIBCONFUSE_VERSION = 3.3 +LIBCONFUSE_SOURCE = confuse-$(LIBCONFUSE_VERSION).tar.xz +LIBCONFUSE_SITE = https://github.com/martinh/libconfuse/releases/download/v$(LIBCONFUSE_VERSION) +LIBCONFUSE_INSTALL_STAGING = YES +LIBCONFUSE_CONF_OPTS = --disable-rpath +LIBCONFUSE_LICENSE = ISC +LIBCONFUSE_LICENSE_FILES = LICENSE +LIBCONFUSE_CPE_ID_VENDOR = libconfuse_project +LIBCONFUSE_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libcorrect/0001-CMakeLists.txt-conditionally-use-Wpedantic.patch b/package/libcorrect/0001-CMakeLists.txt-conditionally-use-Wpedantic.patch new file mode 100644 index 00000000..77e29ad8 --- /dev/null +++ b/package/libcorrect/0001-CMakeLists.txt-conditionally-use-Wpedantic.patch @@ -0,0 +1,42 @@ +From 8fc28b4c4c01581b25220fdbc1eeda196e399256 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 10 Oct 2018 09:28:00 +0200 +Subject: [PATCH] CMakeLists.txt: conditionally use -Wpedantic + +-Wpedantic is only provided by gcc >= 4.8. Since showing pedantic +warnings is not really mandatory, let's only use this option when the +compiler supports it. + +Signed-off-by: Thomas Petazzoni +Upstream: https://github.com/quiet/libcorrect/pull/25 +--- + CMakeLists.txt | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 193f311..e570198 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -3,13 +3,18 @@ project(Correct C) + include(CheckLibraryExists) + include(CheckIncludeFiles) + include(CheckCSourceCompiles) ++include(CheckCCompilerFlag) + + if(MSVC) + set(LIBM "") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4") + else(MSVC) + set(LIBM "m") +-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -std=c99 -Wpedantic -Wall") ++set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -std=c99 -Wall") ++check_c_compiler_flag(-Wpedantic COMPILER_SUPPORTS_WPEDANTIC) ++if(COMPILER_SUPPORTS_WPEDANTIC) ++set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpedantic") ++endif() + if(CMAKE_BUILD_TYPE STREQUAL "Debug") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3 -O0 -fsanitize=address") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-no_pie,") +-- +2.14.4 + diff --git a/package/libcorrect/0002-CMakeLists.txt-conditionally-use-fsanitize-address.patch b/package/libcorrect/0002-CMakeLists.txt-conditionally-use-fsanitize-address.patch new file mode 100644 index 00000000..82e4f13e --- /dev/null +++ b/package/libcorrect/0002-CMakeLists.txt-conditionally-use-fsanitize-address.patch @@ -0,0 +1,35 @@ +From 1a3bb66608b2f96407d14fe13b782626990060f1 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Tue, 20 Nov 2018 08:20:13 +0100 +Subject: [PATCH] CMakeLists.txt: conditionally use -fsanitize=address + +Check that compiler supports -fsanitize=address before using it + +Fixes: + - http://autobuild.buildroot.net/results/221d6a418e75b39fe645c3a56cee676518d2cff6 + +Signed-off-by: Fabrice Fontaine +--- + CMakeLists.txt | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 2e8e07e..c3f71ce 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -17,7 +17,11 @@ if(COMPILER_SUPPORTS_WPEDANTIC) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpedantic") + endif() + if(CMAKE_BUILD_TYPE STREQUAL "Debug") +- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3 -O0 -fsanitize=address") ++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3 -O0") ++ check_c_compiler_flag("-fsanitize=address -Werror" COMPILER_SUPPORTS_SANITIZE_ADDRESS) ++ if(COMPILER_SUPPORTS_SANITIZE_ADDRESS) ++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address") ++ endif() + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-no_pie,") + else() + if("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") +-- +2.14.1 + diff --git a/package/libcorrect/Config.in b/package/libcorrect/Config.in new file mode 100644 index 00000000..eba6dc43 --- /dev/null +++ b/package/libcorrect/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LIBCORRECT + bool "libcorrect" + depends on !BR2_STATIC_LIBS + help + A C library for Forward Error Correction, providing + convolutional codes and Reed-Solomon codes. It is part + of the Quiet Modem Project. + + https://github.com/quiet/libcorrect + +comment "libcorrect needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/libcorrect/libcorrect.hash b/package/libcorrect/libcorrect.hash new file mode 100644 index 00000000..20df38c1 --- /dev/null +++ b/package/libcorrect/libcorrect.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 79861750540fb3a1cc501ee217cb4d1febc4855f3fb82e5eb60906eec5379890 libcorrect-ce6c17f1f988765ae3695315d7cce1f2a2e6cf0d.tar.gz +sha256 135138cd4304aa637836758dc5edfb5f21b7d09ecc637d25288d206b151a5768 LICENSE diff --git a/package/libcorrect/libcorrect.mk b/package/libcorrect/libcorrect.mk new file mode 100644 index 00000000..0a84aa5c --- /dev/null +++ b/package/libcorrect/libcorrect.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# libcorrect +# +################################################################################ + +LIBCORRECT_VERSION = ce6c17f1f988765ae3695315d7cce1f2a2e6cf0d +LIBCORRECT_SITE = $(call github,quiet,libcorrect,$(LIBCORRECT_VERSION)) +LIBCORRECT_LICENSE = BSD-3-Clause +LIBCORRECT_LICENSE_FILES = LICENSE +LIBCORRECT_INSTALL_STAGING = YES + +$(eval $(cmake-package)) diff --git a/package/libcpprestsdk/Config.in b/package/libcpprestsdk/Config.in new file mode 100644 index 00000000..97f00e33 --- /dev/null +++ b/package/libcpprestsdk/Config.in @@ -0,0 +1,33 @@ +config BR2_PACKAGE_LIBCPPRESTSDK + bool "libcpprestsdk" + depends on BR2_ENABLE_LOCALE + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR # boost + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS # boost-atomic + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # exception_ptr + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + select BR2_PACKAGE_BOOST + select BR2_PACKAGE_BOOST_ATOMIC + select BR2_PACKAGE_BOOST_CHRONO + select BR2_PACKAGE_BOOST_DATE_TIME + select BR2_PACKAGE_BOOST_FILESYSTEM + select BR2_PACKAGE_BOOST_RANDOM + select BR2_PACKAGE_BOOST_REGEX + select BR2_PACKAGE_BOOST_THREAD + select BR2_PACKAGE_OPENSSL + help + The C++ REST SDK is a Microsoft project for cloud-based + client-server communication in native code using a modern + asynchronous C++ API design. This project aims to help C++ + developers connect to and interact with services. + + https://github.com/Microsoft/cpprestsdk + +comment "libcpprestsdk needs a toolchain w/ NPTL, C++, wchar, locale" + depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL || \ + !BR2_INSTALL_LIBSTDCPP || \ + !BR2_USE_WCHAR || !BR2_ENABLE_LOCALE + +comment "libcpprestsdk needs exception_ptr" + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 diff --git a/package/libcpprestsdk/libcpprestsdk.hash b/package/libcpprestsdk/libcpprestsdk.hash new file mode 100644 index 00000000..8e398d0c --- /dev/null +++ b/package/libcpprestsdk/libcpprestsdk.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 6bd74a637ff182144b6a4271227ea8b6b3ea92389f88b25b215e6f94fd4d41cb libcpprestsdk-2.10.18.tar.gz +sha256 5c191789f502ac87df83b57008d2fc3e47fbf31315381b5bc4309f6602d0fe97 license.txt diff --git a/package/libcpprestsdk/libcpprestsdk.mk b/package/libcpprestsdk/libcpprestsdk.mk new file mode 100644 index 00000000..68d4cf68 --- /dev/null +++ b/package/libcpprestsdk/libcpprestsdk.mk @@ -0,0 +1,55 @@ +################################################################################ +# +# libcpprestsdk +# +################################################################################ + +LIBCPPRESTSDK_VERSION = 2.10.18 +LIBCPPRESTSDK_SITE = $(call github,Microsoft,cpprestsdk,$(LIBCPPRESTSDK_VERSION)) +LIBCPPRESTSDK_LICENSE = MIT +LIBCPPRESTSDK_LICENSE_FILES = license.txt +LIBCPPRESTSDK_SUBDIR = Release +LIBCPPRESTSDK_INSTALL_STAGING = YES +LIBCPPRESTSDK_DEPENDENCIES += host-pkgconf boost openssl +LIBCPPRESTSDK_CONF_OPTS = -DWERROR=OFF -DBUILD_SAMPLES=OFF + +ifeq ($(BR2_STATIC_LIBS),y) +LIBCPPRESTSDK_CONF_OPTS += \ + -DBoost_USE_STATIC_LIBS=ON \ + -DBoost_USE_STATIC_RUNTIME=ON +endif + +LIBCPPRESTSDK_CXXFLAGS = $(TARGET_CXXFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +LIBCPPRESTSDK_CXXFLAGS += -latomic +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +LIBCPPRESTSDK_DEPENDENCIES += zlib +LIBCPPRESTSDK_CONF_OPTS += -DCPPREST_EXCLUDE_COMPRESSION=OFF +# brotli needs compression +ifeq ($(BR2_PACKAGE_BROTLI),y) +LIBCPPRESTSDK_DEPENDENCIES += brotli +LIBCPPRESTSDK_CONF_OPTS += -DCPPREST_EXCLUDE_BROTLI=OFF +else +LIBCPPRESTSDK_CONF_OPTS += -DCPPREST_EXCLUDE_BROTLI=ON +endif +else +LIBCPPRESTSDK_CONF_OPTS += -DCPPREST_EXCLUDE_COMPRESSION=ON +endif + +ifeq ($(BR2_PACKAGE_WEBSOCKETPP),y) +LIBCPPRESTSDK_DEPENDENCIES += websocketpp +LIBCPPRESTSDK_CONF_OPTS += -DCPPREST_EXCLUDE_WEBSOCKETS=OFF +else +LIBCPPRESTSDK_CONF_OPTS += -DCPPREST_EXCLUDE_WEBSOCKETS=ON +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y) +LIBCPPRESTSDK_CXXFLAGS += -O0 +endif + +LIBCPPRESTSDK_CONF_OPTS += -DCMAKE_CXX_FLAGS="$(LIBCPPRESTSDK_CXXFLAGS)" + +$(eval $(cmake-package)) diff --git a/package/libcrossguid/Config.in b/package/libcrossguid/Config.in new file mode 100644 index 00000000..49060bc8 --- /dev/null +++ b/package/libcrossguid/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_LIBCROSSGUID + bool "libcrossguid" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 # C++11 + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + help + Lightweight cross platform C++ GUID/UUID library + + https://github.com/graeme-hill/crossguid + +comment "libcrossguid needs a toolchain w/ C++, gcc >= 4.7" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 diff --git a/package/libcrossguid/libcrossguid.hash b/package/libcrossguid/libcrossguid.hash new file mode 100644 index 00000000..17dbe35c --- /dev/null +++ b/package/libcrossguid/libcrossguid.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 022c9f02cc36e865cd8fd0111a597ff2bd91988deeb348dbe2aba64aed1abd99 libcrossguid-8f399e8bd4252be9952f3dfa8199924cc8487ca4.tar.gz +sha256 779e58787f966a1552f68d5ec041513cef68785dae4a519dbda7bc0b86eda20e LICENSE diff --git a/package/libcrossguid/libcrossguid.mk b/package/libcrossguid/libcrossguid.mk new file mode 100644 index 00000000..46d9a9dc --- /dev/null +++ b/package/libcrossguid/libcrossguid.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# libcrossguid +# +################################################################################ + +LIBCROSSGUID_VERSION = 8f399e8bd4252be9952f3dfa8199924cc8487ca4 +LIBCROSSGUID_SITE = $(call github,graeme-hill,crossguid,$(LIBCROSSGUID_VERSION)) +LIBCROSSGUID_LICENSE = MIT +LIBCROSSGUID_LICENSE_FILES = LICENSE +LIBCROSSGUID_INSTALL_STAGING = YES +# only a static library +LIBCROSSGUID_INSTALL_TARGET = NO +LIBCROSSGUID_DEPENDENCIES = util-linux + +define LIBCROSSGUID_BUILD_CMDS + (cd $(@D); $(TARGET_CXX) $(TARGET_CXXFLAGS) -std=c++11 -DGUID_LIBUUID \ + -c guid.cpp -o guid.o) + (cd $(@D); $(TARGET_AR) rvs libcrossguid.a guid.o) +endef + +define LIBCROSSGUID_INSTALL_STAGING_CMDS + $(INSTALL) -D -m 644 $(@D)/libcrossguid.a \ + $(STAGING_DIR)/usr/lib/libcrossguid.a + $(INSTALL) -D -m 644 $(@D)/guid.h $(STAGING_DIR)/usr/include/guid.h +endef + +$(eval $(generic-package)) diff --git a/package/libcsv/Config.in b/package/libcsv/Config.in new file mode 100644 index 00000000..797c735b --- /dev/null +++ b/package/libcsv/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LIBCSV + bool "libcsv" + help + libcsv is a small, simple and fast CSV library written in + pure ANSI C89 that can read and write CSV data. It provides + a straight-forward interface using callback functions to + handle parsed fields and rows and can parse improperly + formatted CSV files. + + https://sourceforge.net/projects/libcsv/ diff --git a/package/libcsv/libcsv.hash b/package/libcsv/libcsv.hash new file mode 100644 index 00000000..33a521d2 --- /dev/null +++ b/package/libcsv/libcsv.hash @@ -0,0 +1,3 @@ +#locally computed +sha256 d9c0431cb803ceb9896ce74f683e6e5a0954e96ae1d9e4028d6e0f967bebd7e4 libcsv-3.0.3.tar.gz +sha256 6876b170378d38f65aadd271485f0a5c45beaa043a7d3de5e1636ec927922c83 COPYING.LESSER diff --git a/package/libcsv/libcsv.mk b/package/libcsv/libcsv.mk new file mode 100644 index 00000000..d0ce6433 --- /dev/null +++ b/package/libcsv/libcsv.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# libcsv +# +################################################################################ + +LIBCSV_VERSION = 3.0.3 +LIBCSV_SITE = http://sourceforge.net/projects/libcsv/files +LIBCSV_LICENSE = LGPL-2.1+ +LIBCSV_LICENSE_FILES = COPYING.LESSER +LIBCSV_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/libcue/Config.in b/package/libcue/Config.in new file mode 100644 index 00000000..69e64955 --- /dev/null +++ b/package/libcue/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBCUE + bool "libcue" + select BR2_PACKAGE_FLEX + help + CUE Sheet Parser Library + + https://github.com/lipnitsk/libcue diff --git a/package/libcue/libcue.hash b/package/libcue/libcue.hash new file mode 100644 index 00000000..b69fb7fa --- /dev/null +++ b/package/libcue/libcue.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 f27bc3ebb2e892cd9d32a7bee6d84576a60f955f29f748b9b487b173712f1200 libcue-2.2.1.tar.gz +sha256 c388d36583fa54e13b6d73ad924d0b68d073ed8a5771e17cb49104705df4504f LICENSE diff --git a/package/libcue/libcue.mk b/package/libcue/libcue.mk new file mode 100644 index 00000000..3edb4f3b --- /dev/null +++ b/package/libcue/libcue.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libcue +# +################################################################################ + +LIBCUE_VERSION = 2.2.1 +LIBCUE_SITE = $(call github,lipnitsk,libcue,v$(LIBCUE_VERSION)) +LIBCUE_LICENSE = GPL-2.0, BSD-2-Clause (rem.c) +LIBCUE_LICENSE_FILES = LICENSE +LIBCUE_DEPENDENCIES = host-bison host-flex flex +LIBCUE_INSTALL_STAGING = YES + +$(eval $(cmake-package)) diff --git a/package/libcuefile/0001-fix-static-link.patch b/package/libcuefile/0001-fix-static-link.patch new file mode 100644 index 00000000..6eb58909 --- /dev/null +++ b/package/libcuefile/0001-fix-static-link.patch @@ -0,0 +1,25 @@ +Fix static only build + +Make sure to build the shared library only if BUILD_SHARED_LIBS is +ON. Normally, CMake takes care of this automatically, but libcuefile +wants to build both the shared and static variants, so the normal +logic of CMake doesn't apply. + +Signed-off-by: Thomas Petazzoni + +Index: b/src/CMakeLists.txt +=================================================================== +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -4,7 +4,11 @@ + add_library(cuefile-static STATIC cd cdtext cue_parse cue_print cue_scan cuefile time toc toc_parse toc_print toc_scan) + set_target_properties(cuefile-static PROPERTIES OUTPUT_NAME cuefile CLEAN_DIRECT_OUTPUT 1) + ++if (BUILD_SHARED_LIBS) + add_library(cuefile-shared SHARED cd cdtext cue_parse cue_print cue_scan cuefile time toc toc_parse toc_print toc_scan) + set_target_properties(cuefile-shared PROPERTIES OUTPUT_NAME cuefile CLEAN_DIRECT_OUTPUT 1 VERSION 0.0.0 SOVERSION 0) + + install(TARGETS cuefile-static cuefile-shared LIBRARY DESTINATION "lib${LIB_SUFFIX}" ARCHIVE DESTINATION "lib${LIB_SUFFIX}") ++else (BUILD_SHARED_LIBS) ++install(TARGETS cuefile-static LIBRARY DESTINATION "lib${LIB_SUFFIX}" ARCHIVE DESTINATION "lib${LIB_SUFFIX}") ++endif (BUILD_SHARED_LIBS) diff --git a/package/libcuefile/Config.in b/package/libcuefile/Config.in new file mode 100644 index 00000000..416b3e14 --- /dev/null +++ b/package/libcuefile/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LIBCUEFILE + bool "libcuefile" + help + Cue File library from Musepack + + http://www.musepack.net/ diff --git a/package/libcuefile/libcuefile.hash b/package/libcuefile/libcuefile.hash new file mode 100644 index 00000000..47c0c2fd --- /dev/null +++ b/package/libcuefile/libcuefile.hash @@ -0,0 +1,7 @@ +# From https://www.musepack.net/index.php?pg=src +md5 1a6ac52e1080fd54f0f59372345f1e4e libcuefile_r475.tar.gz +# Calculated based on the hash above +sha256 b681ca6772b3f64010d24de57361faecf426ee6182f5969fcf29b3f649133fe7 libcuefile_r475.tar.gz + +# Hash for license file: +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/libcuefile/libcuefile.mk b/package/libcuefile/libcuefile.mk new file mode 100644 index 00000000..891c1eec --- /dev/null +++ b/package/libcuefile/libcuefile.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# libcuefile +# +################################################################################ + +LIBCUEFILE_VERSION = 475 +LIBCUEFILE_SITE = http://files.musepack.net/source +LIBCUEFILE_SOURCE = libcuefile_r$(LIBCUEFILE_VERSION).tar.gz +LIBCUEFILE_INSTALL_STAGING = YES +LIBCUEFILE_LICENSE = GPL-2.0+ +LIBCUEFILE_LICENSE_FILES = COPYING + +define LIBCUEFILE_INSTALL_STAGING_INCLUDES + cp -r $(@D)/include $(STAGING_DIR)/usr +endef + +define LIBCUEFILE_INSTALL_TARGET_INCLUDES + cp -r $(@D)/include $(TARGET_DIR)/usr +endef + +LIBCUEFILE_POST_INSTALL_STAGING_HOOKS += LIBCUEFILE_INSTALL_STAGING_INCLUDES +LIBCUEFILE_POST_INSTALL_TARGET_HOOKS += LIBCUEFILE_INSTALL_TARGET_INCLUDES + +$(eval $(cmake-package)) diff --git a/package/libcurl/Config.in b/package/libcurl/Config.in new file mode 100644 index 00000000..0674701e --- /dev/null +++ b/package/libcurl/Config.in @@ -0,0 +1,80 @@ +config BR2_PACKAGE_LIBCURL + bool "libcurl" + help + cURL is a tool for getting files from FTP, HTTP, Gopher, + Telnet, and Dict servers, using any of the supported + protocols. + + https://curl.se/ + +if BR2_PACKAGE_LIBCURL + +config BR2_PACKAGE_LIBCURL_CURL + bool "curl binary" + help + Install curl binary as well + +config BR2_PACKAGE_LIBCURL_VERBOSE + bool "verbose strings" + help + Enable verbose text strings + +config BR2_PACKAGE_LIBCURL_PROXY_SUPPORT + bool "proxy support" + default y + help + Enable proxy support. + +config BR2_PACKAGE_LIBCURL_COOKIES_SUPPORT + bool "cookies support" + default y + help + Enable support for cookies. + +config BR2_PACKAGE_LIBCURL_EXTRA_PROTOCOLS_FEATURES + bool "enable extra protocols and features" + default y + help + Enable the following extra protocols and features: + - LDAP / LDAPS + - POP3 / IMAP / SMTP + - Telnet + - TFTP + - RTSP + - SMB / CIFS + - DICT + - Gopher + +choice + prompt "SSL/TLS library to use" + +config BR2_PACKAGE_LIBCURL_OPENSSL + bool "OpenSSL" + depends on BR2_PACKAGE_OPENSSL + +config BR2_PACKAGE_LIBCURL_BEARSSL + bool "BearSSL" + depends on BR2_PACKAGE_BEARSSL + +config BR2_PACKAGE_LIBCURL_GNUTLS + bool "GnuTLS" + depends on BR2_PACKAGE_GNUTLS + +config BR2_PACKAGE_LIBCURL_LIBNSS + bool "NSS" + depends on BR2_PACKAGE_LIBNSS + +config BR2_PACKAGE_LIBCURL_MBEDTLS + bool "mbed TLS" + depends on BR2_PACKAGE_MBEDTLS + +config BR2_PACKAGE_LIBCURL_WOLFSSL + bool "WolfSSL" + depends on BR2_PACKAGE_WOLFSSL + +config BR2_PACKAGE_LIBCURL_TLS_NONE + bool "None" + +endchoice + +endif diff --git a/package/libcurl/libcurl.hash b/package/libcurl/libcurl.hash new file mode 100644 index 00000000..5e5776d1 --- /dev/null +++ b/package/libcurl/libcurl.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +# https://curl.se/download/curl-7.78.0.tar.xz.asc +# signed with key 27EDEAF22F3ABCEB50DB9A125CC908FDB71E12C2 +sha256 be42766d5664a739c3974ee3dfbbcbe978a4ccb1fe628bb1d9b59ac79e445fb5 curl-7.78.0.tar.xz +sha256 6fd1a1c008b5ef4c4741dd188c3f8af6944c14c25afa881eb064f98fb98358e7 COPYING diff --git a/package/libcurl/libcurl.mk b/package/libcurl/libcurl.mk new file mode 100644 index 00000000..4e3c6d45 --- /dev/null +++ b/package/libcurl/libcurl.mk @@ -0,0 +1,197 @@ +################################################################################ +# +# libcurl +# +################################################################################ + +LIBCURL_VERSION = 7.78.0 +LIBCURL_SOURCE = curl-$(LIBCURL_VERSION).tar.xz +LIBCURL_SITE = https://curl.se/download +LIBCURL_DEPENDENCIES = host-pkgconf \ + $(if $(BR2_PACKAGE_ZLIB),zlib) \ + $(if $(BR2_PACKAGE_RTMPDUMP),rtmpdump) +LIBCURL_LICENSE = curl +LIBCURL_LICENSE_FILES = COPYING +LIBCURL_CPE_ID_VENDOR = haxx +LIBCURL_CPE_ID_PRODUCT = libcurl +LIBCURL_INSTALL_STAGING = YES + +# We disable NTLM support because it uses fork(), which doesn't work +# on non-MMU platforms. Moreover, this authentication method is +# probably almost never used. See +# http://curl.se/docs/manpage.html#--ntlm. +# Likewise, there is no compiler on the target, so libcurl-option (to +# generate C code) isn't very useful +LIBCURL_CONF_OPTS = --disable-manual --disable-ntlm-wb \ + --enable-hidden-symbols --with-random=/dev/urandom --disable-curldebug \ + --disable-libcurl-option --disable-ldap --disable-ldaps + +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +LIBCURL_CONF_OPTS += --enable-threaded-resolver +else +LIBCURL_CONF_OPTS += --disable-threaded-resolver +endif + +ifeq ($(BR2_PACKAGE_LIBCURL_VERBOSE),y) +LIBCURL_CONF_OPTS += --enable-verbose +else +LIBCURL_CONF_OPTS += --disable-verbose +endif + +LIBCURL_CONFIG_SCRIPTS = curl-config + +ifeq ($(BR2_PACKAGE_LIBCURL_OPENSSL),y) +LIBCURL_DEPENDENCIES += openssl +# configure adds the cross openssl dir to LD_LIBRARY_PATH which screws up +# native stuff during the rest of configure when target == host. +# Fix it by setting LD_LIBRARY_PATH to something sensible so those libs +# are found first. +LIBCURL_CONF_ENV += LD_LIBRARY_PATH=$(if $(LD_LIBRARY_PATH),$(LD_LIBRARY_PATH):)/lib:/usr/lib +LIBCURL_CONF_OPTS += --with-ssl=$(STAGING_DIR)/usr \ + --with-ca-path=/etc/ssl/certs +else +LIBCURL_CONF_OPTS += --without-ssl +endif + +ifeq ($(BR2_PACKAGE_LIBCURL_BEARSSL),y) +LIBCURL_CONF_OPTS += --with-bearssl=$(STAGING_DIR)/usr +LIBCURL_DEPENDENCIES += bearssl +else +LIBCURL_CONF_OPTS += --without-bearssl +endif + +ifeq ($(BR2_PACKAGE_LIBCURL_GNUTLS),y) +LIBCURL_CONF_OPTS += --with-gnutls=$(STAGING_DIR)/usr \ + --with-ca-fallback +LIBCURL_DEPENDENCIES += gnutls +else +LIBCURL_CONF_OPTS += --without-gnutls +endif + +ifeq ($(BR2_PACKAGE_LIBCURL_LIBNSS),y) +LIBCURL_CONF_OPTS += --with-nss=$(STAGING_DIR)/usr +LIBCURL_CONF_ENV += CPPFLAGS="$(TARGET_CPPFLAGS) `$(PKG_CONFIG_HOST_BINARY) nspr nss --cflags`" +LIBCURL_DEPENDENCIES += libnss +else +LIBCURL_CONF_OPTS += --without-nss +endif + +ifeq ($(BR2_PACKAGE_LIBCURL_MBEDTLS),y) +LIBCURL_CONF_OPTS += --with-mbedtls=$(STAGING_DIR)/usr +LIBCURL_DEPENDENCIES += mbedtls +else +LIBCURL_CONF_OPTS += --without-mbedtls +endif + +ifeq ($(BR2_PACKAGE_LIBCURL_WOLFSSL),y) +LIBCURL_CONF_OPTS += --with-wolfssl=$(STAGING_DIR)/usr +LIBCURL_DEPENDENCIES += wolfssl +else +LIBCURL_CONF_OPTS += --without-wolfssl +endif + +ifeq ($(BR2_PACKAGE_C_ARES),y) +LIBCURL_DEPENDENCIES += c-ares +LIBCURL_CONF_OPTS += --enable-ares +else +LIBCURL_CONF_OPTS += --disable-ares +endif + +ifeq ($(BR2_PACKAGE_LIBIDN2),y) +LIBCURL_DEPENDENCIES += libidn2 +LIBCURL_CONF_OPTS += --with-libidn2 +else +LIBCURL_CONF_OPTS += --without-libidn2 +endif + +# Configure curl to support libssh2 +ifeq ($(BR2_PACKAGE_LIBSSH2),y) +LIBCURL_DEPENDENCIES += libssh2 +LIBCURL_CONF_OPTS += --with-libssh2 +else +LIBCURL_CONF_OPTS += --without-libssh2 +endif + +ifeq ($(BR2_PACKAGE_BROTLI),y) +LIBCURL_DEPENDENCIES += brotli +LIBCURL_CONF_OPTS += --with-brotli +else +LIBCURL_CONF_OPTS += --without-brotli +endif + +ifeq ($(BR2_PACKAGE_NGHTTP2),y) +LIBCURL_DEPENDENCIES += nghttp2 +LIBCURL_CONF_OPTS += --with-nghttp2 +else +LIBCURL_CONF_OPTS += --without-nghttp2 +endif + +ifeq ($(BR2_PACKAGE_LIBGSASL),y) +LIBCURL_DEPENDENCIES += libgsasl +LIBCURL_CONF_OPTS += --with-gsasl +else +LIBCURL_CONF_OPTS += --without-gsasl +endif + +ifeq ($(BR2_PACKAGE_LIBCURL_COOKIES_SUPPORT),y) +LIBCURL_CONF_OPTS += --enable-cookies +else +LIBCURL_CONF_OPTS += --disable-cookies +endif + +ifeq ($(BR2_PACKAGE_LIBCURL_PROXY_SUPPORT),y) +LIBCURL_CONF_OPTS += --enable-proxy +else +LIBCURL_CONF_OPTS += --disable-proxy +endif + +ifeq ($(BR2_PACKAGE_LIBCURL_EXTRA_PROTOCOLS_FEATURES),y) +LIBCURL_CONF_OPTS += \ + --enable-dict \ + --enable-gopher \ + --enable-imap \ + --enable-pop3 \ + --enable-rtsp \ + --enable-smb \ + --enable-smtp \ + --enable-telnet \ + --enable-tftp +else +LIBCURL_CONF_OPTS += \ + --disable-dict \ + --disable-gopher \ + --disable-imap \ + --disable-pop3 \ + --disable-rtsp \ + --disable-smb \ + --disable-smtp \ + --disable-telnet \ + --disable-tftp +endif + +define LIBCURL_FIX_DOT_PC + printf 'Requires: openssl\n' >>$(@D)/libcurl.pc.in +endef +LIBCURL_POST_PATCH_HOOKS += $(if $(BR2_PACKAGE_LIBCURL_OPENSSL),LIBCURL_FIX_DOT_PC) + +ifeq ($(BR2_PACKAGE_LIBCURL_CURL),) +define LIBCURL_TARGET_CLEANUP + rm -rf $(TARGET_DIR)/usr/bin/curl +endef +LIBCURL_POST_INSTALL_TARGET_HOOKS += LIBCURL_TARGET_CLEANUP +endif + +HOST_LIBCURL_DEPENDENCIES = host-openssl +HOST_LIBCURL_CONF_OPTS = \ + --disable-manual \ + --disable-ntlm-wb \ + --disable-curldebug \ + --with-ssl \ + --without-gnutls \ + --without-mbedtls \ + --without-nss + +HOST_LIBCURL_POST_PATCH_HOOKS += LIBCURL_FIX_DOT_PC + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libcutl/libcutl.hash b/package/libcutl/libcutl.hash new file mode 100644 index 00000000..1e0baa7f --- /dev/null +++ b/package/libcutl/libcutl.hash @@ -0,0 +1,6 @@ +# From https://www.codesynthesis.com/download/libcutl/1.10/libcutl-1.10.0.tar.bz2.sha1 +sha1 2885b79529f8caeb13687d722f5c114186f56956 libcutl-1.10.0.tar.bz2 + +# Locally Computed +sha256 125163c670e372b47d5626d54379ff8fbaded6ccd5db77ac0bf5912a4017121c libcutl-1.10.0.tar.bz2 +sha256 c7aa98c5af3b67174f16b12a1fed4332a51cd524b82c69e85baa4c2c412da239 LICENSE diff --git a/package/libcutl/libcutl.mk b/package/libcutl/libcutl.mk new file mode 100644 index 00000000..2b704ad3 --- /dev/null +++ b/package/libcutl/libcutl.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libcutl +# +################################################################################ + +LIBCUTL_VERSION_MAJOR = 1.10 +LIBCUTL_VERSION = $(LIBCUTL_VERSION_MAJOR).0 +LIBCUTL_SOURCE = libcutl-$(LIBCUTL_VERSION).tar.bz2 +LIBCUTL_SITE = https://www.codesynthesis.com/download/libcutl/$(LIBCUTL_VERSION_MAJOR) +LIBCUTL_INSTALL_STAGING = YES +LIBCUTL_LICENSE = MIT +LIBCUTL_LICENSE_FILES = LICENSE +HOST_LIBCUTL_CONF_ENV = CXXFLAGS="$(HOST_CXXFLAGS) -std=c++11" + +$(eval $(host-autotools-package)) diff --git a/package/libdaemon/0001-testd-use-unistd-h-instead-of-sys-unistd-h.patch b/package/libdaemon/0001-testd-use-unistd-h-instead-of-sys-unistd-h.patch new file mode 100644 index 00000000..c8f4270d --- /dev/null +++ b/package/libdaemon/0001-testd-use-unistd-h-instead-of-sys-unistd-h.patch @@ -0,0 +1,16 @@ +examples/testd.c: As the C POSIX library recommends include the +instead of . This removes an error when building libdaemon +against the musl C library. + +Signed-off-by: Jörg Krause +--- libdaemon-0.14.orig/examples/testd.c 2014-08-30 00:27:08.359832977 +0200 ++++ libdaemon-0.14/examples/testd.c 2014-08-30 00:27:25.439832670 +0200 +@@ -23,7 +23,7 @@ + #include + #include + #include +-#include ++#include + #include + + #include diff --git a/package/libdaemon/Config.in b/package/libdaemon/Config.in new file mode 100644 index 00000000..bfcedc19 --- /dev/null +++ b/package/libdaemon/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LIBDAEMON + bool "libdaemon" + # needs fork() + depends on BR2_USE_MMU + help + libdaemon is a lightweight C library that eases the + writing of UNIX daemons. + + http://0pointer.de/lennart/projects/libdaemon/ diff --git a/package/libdaemon/libdaemon.hash b/package/libdaemon/libdaemon.hash new file mode 100644 index 00000000..b5103218 --- /dev/null +++ b/package/libdaemon/libdaemon.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 fd23eb5f6f986dcc7e708307355ba3289abe03cc381fc47a80bca4a50aa6b834 libdaemon-0.14.tar.gz +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 LICENSE diff --git a/package/libdaemon/libdaemon.mk b/package/libdaemon/libdaemon.mk new file mode 100644 index 00000000..cdf0819e --- /dev/null +++ b/package/libdaemon/libdaemon.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# libdaemon +# +################################################################################ + +LIBDAEMON_VERSION = 0.14 +LIBDAEMON_SITE = http://0pointer.de/lennart/projects/libdaemon +LIBDAEMON_LICENSE = LGPL-2.1+ +LIBDAEMON_LICENSE_FILES = LICENSE +LIBDAEMON_CPE_ID_VENDOR = libdaemon_project + +LIBDAEMON_INSTALL_STAGING = YES +LIBDAEMON_CONF_ENV = ac_cv_func_setpgrp_void=no +LIBDAEMON_CONF_OPTS = --disable-lynx +LIBDAEMON_DEPENDENCIES = host-pkgconf + +$(eval $(autotools-package)) diff --git a/package/libdcadec/Config.in b/package/libdcadec/Config.in new file mode 100644 index 00000000..2687a181 --- /dev/null +++ b/package/libdcadec/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBDCADEC + bool "libdcadec" + help + dcadec is a free DTS Coherent Acoustics decoder with support + for HD extensions. + + https://github.com/foo86/dcadec diff --git a/package/libdcadec/libdcadec.hash b/package/libdcadec/libdcadec.hash new file mode 100644 index 00000000..d3a9ae7d --- /dev/null +++ b/package/libdcadec/libdcadec.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 ed9d207fde3e8d576f3af8b0d1235b3371e315175757173689104efcaebf0d44 libdcadec-0.2.0.tar.gz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LGPLv2.1 diff --git a/package/libdcadec/libdcadec.mk b/package/libdcadec/libdcadec.mk new file mode 100644 index 00000000..a3579ad6 --- /dev/null +++ b/package/libdcadec/libdcadec.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# libdcadec +# +################################################################################ + +LIBDCADEC_VERSION = 0.2.0 +LIBDCADEC_SITE = $(call github,foo86,dcadec,v$(LIBDCADEC_VERSION)) +LIBDCADEC_LICENSE = LGPL-2.1+ +LIBDCADEC_LICENSE_FILES = COPYING.LGPLv2.1 +LIBDCADEC_INSTALL_STAGING = YES + +ifeq ($(BR2_STATIC_LIBS),) +LIBDCADEC_SHARED = CONFIG_SHARED=1 +endif + +define LIBDCADEC_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(TARGET_CFLAGS) -std=gnu99" \ + $(LIBDCADEC_SHARED) -C $(@D) +endef + +define LIBDCADEC_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) \ + $(LIBDCADEC_SHARED) DESTDIR=$(STAGING_DIR) PREFIX=/usr install +endef + +define LIBDCADEC_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) \ + $(LIBDCADEC_SHARED) DESTDIR=$(TARGET_DIR) PREFIX=/usr install +endef + +$(eval $(generic-package)) diff --git a/package/libdmtx/Config.in b/package/libdmtx/Config.in new file mode 100644 index 00000000..20f46914 --- /dev/null +++ b/package/libdmtx/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBDMTX + bool "libdmtx" + help + libdmtx is a software library that enables programs to read + and write Data Matrix barcodes of the modern ECC200 variety. + + https://github.com/dmtx/libdmtx diff --git a/package/libdmtx/libdmtx.hash b/package/libdmtx/libdmtx.hash new file mode 100644 index 00000000..98eef9ae --- /dev/null +++ b/package/libdmtx/libdmtx.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 be0c5275695a732a5f434ded1fcc232aa63b1a6015c00044fe87f3a689b75f2e libdmtx-0.7.5.tar.gz +sha256 fcc277b7302645322c63de22b9b0bdae2df3dfa7d6cbc0d5bed7a4d3f1a9af79 LICENSE diff --git a/package/libdmtx/libdmtx.mk b/package/libdmtx/libdmtx.mk new file mode 100644 index 00000000..04e089f1 --- /dev/null +++ b/package/libdmtx/libdmtx.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# libdmtx +# +################################################################################ + +LIBDMTX_VERSION = 0.7.5 +LIBDMTX_SITE = $(call github,dmtx,libdmtx,v$(LIBDMTX_VERSION)) +LIBDMTX_LICENSE = BSD-2-Clause or Special Permission +LIBDMTX_LICENSE_FILES = LICENSE +LIBDMTX_INSTALL_STAGING = YES +# github tarball does not include configure +LIBDMTX_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/libdnet/0001-python-gcc.patch b/package/libdnet/0001-python-gcc.patch new file mode 100644 index 00000000..ea732e43 --- /dev/null +++ b/package/libdnet/0001-python-gcc.patch @@ -0,0 +1,20 @@ +--- a/python/dnet.c 2006-01-19 18:08:23.000000000 +1100 ++++ b/python/dnet.c 2008-09-03 16:30:47.000000000 +1000 +@@ -2726,7 +2726,7 @@ + PyObject *__pyx_3 = 0; + unsigned short __pyx_4; + Py_INCREF(__pyx_v_self); +- ((PyObject*)__pyx_v_next) = Py_None; Py_INCREF(((PyObject*)__pyx_v_next)); ++ __pyx_v_next = (struct __pyx_obj_4dnet_addr*)Py_None; Py_INCREF(((PyObject*)__pyx_v_next)); + + /* "/Users/dugsong/projects/libdnet/python/./dnet.pyx":634 */ + __pyx_1 = (((struct __pyx_obj_4dnet___addr_ip4_iter *)__pyx_v_self)->cur <= ((struct __pyx_obj_4dnet___addr_ip4_iter *)__pyx_v_self)->max); +@@ -2738,7 +2739,7 @@ + Py_DECREF(__pyx_2); __pyx_2 = 0; + if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_4dnet_addr)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; goto __pyx_L1;} + Py_DECREF(((PyObject *)__pyx_v_next)); +- ((PyObject *)__pyx_v_next) = __pyx_3; ++ __pyx_v_next = (struct __pyx_obj_4dnet_addr*)__pyx_3; + __pyx_3 = 0; + + /* "/Users/dugsong/projects/libdnet/python/./dnet.pyx":636 */ diff --git a/package/libdnet/0002-python-makefile.patch b/package/libdnet/0002-python-makefile.patch new file mode 100644 index 00000000..fb41e43e --- /dev/null +++ b/package/libdnet/0002-python-makefile.patch @@ -0,0 +1,16 @@ +--- + python/Makefile.am | 1 + + 1 file changed, 1 insertion(+) + +Index: libdnet-1.11/python/Makefile.am +=================================================================== +--- libdnet-1.11.orig/python/Makefile.am ++++ libdnet-1.11/python/Makefile.am +@@ -11,6 +11,7 @@ + pyrexc $(srcdir)/dnet.pyx + + python-build: $(srcdir)/dnet.c ++ CC="$(CC)" LDSHARED="$(CC) -shared" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" $(PYTHON) setup.py build_ext -I$(PYINCDIR) -L$(PYLIBDIR) + $(PYTHON) setup.py build + touch python-build + diff --git a/package/libdnet/Config.in b/package/libdnet/Config.in new file mode 100644 index 00000000..e7ba3a21 --- /dev/null +++ b/package/libdnet/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_LIBDNET + bool "libdnet" + help + libdnet - simplified interface to low-level networking + routines. + + http://libdnet.sourceforge.net/ + +if BR2_PACKAGE_LIBDNET + +config BR2_PACKAGE_LIBDNET_PYTHON + bool "libdnet python module" + depends on BR2_PACKAGE_PYTHON + help + dnet module for python + +comment "dnet module for python requires python package" + depends on !BR2_PACKAGE_PYTHON + +endif diff --git a/package/libdnet/libdnet.hash b/package/libdnet/libdnet.hash new file mode 100644 index 00000000..d2e82027 --- /dev/null +++ b/package/libdnet/libdnet.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 0eb78415c8f2564c2f1e8ad36e98473348d9c94852f796a226360c716cc7ca53 libdnet-1.11.tar.gz +sha256 1e94df12cb3701fa64e07eeb60284bb16a3544815d5a39860dacff7b86610584 LICENSE diff --git a/package/libdnet/libdnet.mk b/package/libdnet/libdnet.mk new file mode 100644 index 00000000..d1cc0bf1 --- /dev/null +++ b/package/libdnet/libdnet.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# libdnet +# +################################################################################ + +LIBDNET_VERSION = 1.11 +LIBDNET_SITE = http://downloads.sourceforge.net/project/libdnet/libdnet/libdnet-$(LIBDNET_VERSION) +LIBDNET_LICENSE = BSD-3-Clause +LIBDNET_LICENSE_FILES = LICENSE +LIBDNET_INSTALL_STAGING = YES +LIBDNET_AUTORECONF = YES +LIBDNET_CONF_OPTS = \ + --with-gnu-ld \ + --with-check=no +LIBDNET_CONFIG_SCRIPTS = dnet-config + +ifneq ($(BR2_PACKAGE_LIBDNET_PYTHON),) +LIBDNET_DEPENDENCIES = python +LIBDNET_CONF_OPTS += --with-python +LIBDNET_MAKE_OPTS = PYINCDIR=$(STAGING_DIR)/usr/include/python$(PYTHON_VERSION_MAJOR) PYLIBDIR=$(STAGING_DIR)/usr/lib +LIBDNET_INSTALL_TARGET_OPTS = $(LIBDNET_MAKE_OPTS) DESTDIR=$(TARGET_DIR) INSTALL_STRIP_FLAG=-s install-exec +LIBDNET_INSTALL_STAGING_OPTS = $(LIBDNET_MAKE_OPTS) DESTDIR=$(STAGING_DIR) install +endif + +# Needed for autoreconf to work properly +define LIBDNET_FIXUP_ACINCLUDE_M4 + ln -sf config/acinclude.m4 $(@D) +endef + +LIBDNET_POST_EXTRACT_HOOKS += LIBDNET_FIXUP_ACINCLUDE_M4 + +define LIBDNET_REMOVE_CONFIG_SCRIPT + $(RM) -f $(TARGET_DIR)/usr/bin/dnet-config +endef + +LIBDNET_POST_INSTALL_TARGET_HOOKS += LIBDNET_REMOVE_CONFIG_SCRIPT + +$(eval $(autotools-package)) diff --git a/package/libdri2/Config.in b/package/libdri2/Config.in new file mode 100644 index 00000000..fa3f76e8 --- /dev/null +++ b/package/libdri2/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_LIBDRI2 + bool "libdri2" + depends on BR2_TOOLCHAIN_HAS_THREADS # libdrm + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_LIBDRM + select BR2_PACKAGE_XLIB_LIBXDAMAGE + select BR2_PACKAGE_XLIB_LIBXEXT + select BR2_PACKAGE_XORGPROTO + help + Library for the DRI2 extension to the X Window System. + + https://github.com/robclark/libdri2 + +comment "libdri2 needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libdri2/libdri2.hash b/package/libdri2/libdri2.hash new file mode 100644 index 00000000..4cb360ff --- /dev/null +++ b/package/libdri2/libdri2.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 7c427f5c3fbda3d1df1dc77129e87605f4af1f3ad2adf2653c560d1703aa4395 libdri2-4f1eef3183df2b270c3d5cbef07343ee5127a6a4.tar.gz +sha256 4fac4d581d00f11c459d68b7cb970f3d4e5a5bbfb53784d85f59a90076280301 COPYING diff --git a/package/libdri2/libdri2.mk b/package/libdri2/libdri2.mk new file mode 100644 index 00000000..79f38c68 --- /dev/null +++ b/package/libdri2/libdri2.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# libdri2 +# +################################################################################ + +LIBDRI2_VERSION = 4f1eef3183df2b270c3d5cbef07343ee5127a6a4 +LIBDRI2_SITE = $(call github,robclark,libdri2,$(LIBDRI2_VERSION)) +LIBDRI2_DEPENDENCIES = xlib_libXext xlib_libXdamage xorgproto libdrm +LIBDRI2_LICENSE = MIT +LIBDRI2_LICENSE_FILES = COPYING + +LIBDRI2_INSTALL_STAGING = YES +LIBDRI2_AUTORECONF = YES +LIBDRI2_CONF_ENV = xorg_cv_malloc0_returns_null=true + +$(eval $(autotools-package)) diff --git a/package/libdrm/0001-meson.build-enable-static-build.patch b/package/libdrm/0001-meson.build-enable-static-build.patch new file mode 100644 index 00000000..28da7025 --- /dev/null +++ b/package/libdrm/0001-meson.build-enable-static-build.patch @@ -0,0 +1,169 @@ +From d58a32776e08e193c24f7bb192daf72b66fbe550 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Wed, 18 Jul 2018 21:35:18 +0200 +Subject: [PATCH] meson.build: enable static build + +Use meson library instead of shared_library to enable static build. + +Upstream suggested: https://lists.freedesktop.org/archives/dri-devel/2018-July/183886.html +Signed-off-by: Peter Seiderer +--- + amdgpu/meson.build | 2 +- + etnaviv/meson.build | 2 +- + exynos/meson.build | 2 +- + freedreno/meson.build | 2 +- + intel/meson.build | 2 +- + libkms/meson.build | 2 +- + meson.build | 2 +- + nouveau/meson.build | 2 +- + omap/meson.build | 2 +- + radeon/meson.build | 2 +- + tegra/meson.build | 2 +- + 11 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/amdgpu/meson.build b/amdgpu/meson.build +index f39d7bf..1b4b0be 100644 +--- a/amdgpu/meson.build ++++ b/amdgpu/meson.build +@@ -21,7 +21,7 @@ + + datadir_amdgpu = join_paths(get_option('prefix'), get_option('datadir'), 'libdrm') + +-libdrm_amdgpu = shared_library( ++libdrm_amdgpu = library( + 'drm_amdgpu', + [ + files( +diff --git a/etnaviv/meson.build b/etnaviv/meson.build +index ca2aa54..a0d994e 100644 +--- a/etnaviv/meson.build ++++ b/etnaviv/meson.build +@@ -19,7 +19,7 @@ + # SOFTWARE. + + +-libdrm_etnaviv = shared_library( ++libdrm_etnaviv = library( + 'drm_etnaviv', + [ + files( +diff --git a/exynos/meson.build b/exynos/meson.build +index 30d3640..fd14f3a 100644 +--- a/exynos/meson.build ++++ b/exynos/meson.build +@@ -18,7 +18,7 @@ + # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + # SOFTWARE. + +-libdrm_exynos = shared_library( ++libdrm_exynos = library( + 'drm_exynos', + [files('exynos_drm.c', 'exynos_fimg2d.c'), config_file], + c_args : warn_c_args, +diff --git a/freedreno/meson.build b/freedreno/meson.build +index 015b7fb..6c8a6a7 100644 +--- a/freedreno/meson.build ++++ b/freedreno/meson.build +@@ -39,7 +39,7 @@ if with_freedreno_kgsl + ) + endif + +-libdrm_freedreno = shared_library( ++libdrm_freedreno = library( + 'drm_freedreno', + [files_freedreno, config_file], + c_args : warn_c_args, +diff --git a/intel/meson.build b/intel/meson.build +index 53c7fce..14cabd3 100644 +--- a/intel/meson.build ++++ b/intel/meson.build +@@ -18,7 +18,7 @@ + # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + # SOFTWARE. + +-libdrm_intel = shared_library( ++libdrm_intel = library( + 'drm_intel', + [ + files( +diff --git a/libkms/meson.build b/libkms/meson.build +index 86d1a4e..9d21e4c 100644 +--- a/libkms/meson.build ++++ b/libkms/meson.build +@@ -41,7 +41,7 @@ if with_exynos + libkms_include += include_directories('../exynos') + endif + +-libkms = shared_library( ++libkms = library( + 'kms', + [files_libkms, config_file], + c_args : warn_c_args, +diff --git a/meson.build b/meson.build +index 3c8afb6..7aa5f8c 100644 +--- a/meson.build ++++ b/meson.build +@@ -279,7 +279,7 @@ add_project_arguments('-include', 'config.h', language : 'c') + inc_root = include_directories('.') + inc_drm = include_directories('include/drm') + +-libdrm = shared_library( ++libdrm = library( + 'drm', + [files( + 'xf86drm.c', 'xf86drmHash.c', 'xf86drmRandom.c', 'xf86drmSL.c', +diff --git a/nouveau/meson.build b/nouveau/meson.build +index 51c9a71..acba048 100644 +--- a/nouveau/meson.build ++++ b/nouveau/meson.build +@@ -19,7 +19,7 @@ + # SOFTWARE. + + +-libdrm_nouveau = shared_library( ++libdrm_nouveau = library( + 'drm_nouveau', + [files( 'nouveau.c', 'pushbuf.c', 'bufctx.c', 'abi16.c'), config_file], + c_args : warn_c_args, +diff --git a/omap/meson.build b/omap/meson.build +index e57b8f5..6cffb99 100644 +--- a/omap/meson.build ++++ b/omap/meson.build +@@ -18,7 +18,7 @@ + # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + # SOFTWARE. + +-libdrm_omap = shared_library( ++libdrm_omap = library( + 'drm_omap', + [files('omap_drm.c'), config_file], + include_directories : [inc_root, inc_drm], +diff --git a/radeon/meson.build b/radeon/meson.build +index b08c744..2f45ff7 100644 +--- a/radeon/meson.build ++++ b/radeon/meson.build +@@ -19,7 +19,7 @@ + # SOFTWARE. + + +-libdrm_radeon = shared_library( ++libdrm_radeon = library( + 'drm_radeon', + [ + files( +diff --git a/tegra/meson.build b/tegra/meson.build +index 1f5c74b..8d0cfa9 100644 +--- a/tegra/meson.build ++++ b/tegra/meson.build +@@ -18,7 +18,7 @@ + # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + # SOFTWARE. + +-libdrm_tegra = shared_library( ++libdrm_tegra = library( + 'drm_tegra', + [files('tegra.c'), config_file], + include_directories : [inc_root, inc_drm], +-- +2.18.0 + diff --git a/package/libdrm/0002-tests-meson.build-disable-nouveau-tests-for-static-b.patch b/package/libdrm/0002-tests-meson.build-disable-nouveau-tests-for-static-b.patch new file mode 100644 index 00000000..e2e18e12 --- /dev/null +++ b/package/libdrm/0002-tests-meson.build-disable-nouveau-tests-for-static-b.patch @@ -0,0 +1,43 @@ +From c9036706b9f724f09ac6288f82b53f2e76264ec7 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Mon, 25 Nov 2019 15:59:15 +0100 +Subject: [PATCH] tests/meson.build: disable nouveau tests for static build + +Signed-off-by: Peter Seiderer +--- +Notes: + + - the existing test/check for static build in meson.build does not + catch this case because e.g. the buildroot toolchain + br-arm-full-static-2019.05.1 provides an empty libdl.a + + 169 # Among others FreeBSD does not have a separate dl library. + 170 if not cc.has_function('dlsym') + 171 dep_dl = cc.find_library('dl', required : with_nouveau) + 172 else + 173 dep_dl = [] + 174 endif +--- + tests/meson.build | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/tests/meson.build b/tests/meson.build +index 6c8ddd9..f7cb5f0 100644 +--- a/tests/meson.build ++++ b/tests/meson.build +@@ -44,8 +44,11 @@ endif + if with_etnaviv + subdir('etnaviv') + endif ++lib_type = get_option('default_library') + if with_nouveau +- subdir('nouveau') ++ if lib_type != 'static' ++ subdir('nouveau') ++ endif + endif + + drmsl = executable( +-- +2.24.0 + diff --git a/package/libdrm/Config.in b/package/libdrm/Config.in new file mode 100644 index 00000000..3cb0e02a --- /dev/null +++ b/package/libdrm/Config.in @@ -0,0 +1,109 @@ +menuconfig BR2_PACKAGE_LIBDRM + bool "libdrm" + depends on BR2_TOOLCHAIN_HAS_THREADS # libpthread-stubs + select BR2_PACKAGE_LIBPTHREAD_STUBS + help + Direct Rendering Manager + + http://dri.freedesktop.org/libdrm/ + +if BR2_PACKAGE_LIBDRM + +config BR2_PACKAGE_LIBDRM_HAS_ATOMIC + bool + default y if BR2_PACKAGE_LIBATOMIC_OPS_ARCH_SUPPORTS || \ + BR2_TOOLCHAIN_HAS_SYNC_4 + +config BR2_PACKAGE_LIBDRM_ENABLE_ATOMIC + bool + select BR2_PACKAGE_LIBATOMIC_OPS if !BR2_TOOLCHAIN_HAS_SYNC_4 + +config BR2_PACKAGE_LIBDRM_INTEL + bool "intel" + depends on BR2_i386 || BR2_x86_64 + depends on BR2_PACKAGE_LIBDRM_HAS_ATOMIC + select BR2_PACKAGE_LIBDRM_ENABLE_ATOMIC + select BR2_PACKAGE_LIBPCIACCESS + help + Install intel graphics driver. + +config BR2_PACKAGE_LIBDRM_RADEON + bool "radeon" + depends on BR2_PACKAGE_LIBDRM_HAS_ATOMIC + select BR2_PACKAGE_LIBDRM_ENABLE_ATOMIC + help + Install AMD/ATI graphics driver. + +config BR2_PACKAGE_LIBDRM_AMDGPU + bool "amdgpu" + depends on BR2_USE_MMU # fork() + depends on BR2_PACKAGE_LIBDRM_HAS_ATOMIC + select BR2_PACKAGE_LIBDRM_ENABLE_ATOMIC + help + Install AMD GPU driver. + +config BR2_PACKAGE_LIBDRM_NOUVEAU + bool "nouveau" + depends on BR2_PACKAGE_LIBDRM_HAS_ATOMIC + select BR2_PACKAGE_LIBDRM_ENABLE_ATOMIC + help + Install NVIDIA graphics driver. + +config BR2_PACKAGE_LIBDRM_VMWGFX + bool "vmwgfx" + depends on BR2_i386 || BR2_x86_64 + help + Installs Vmware graphics driver. + +config BR2_PACKAGE_LIBDRM_OMAP + bool "omap (experimental)" + depends on BR2_arm + depends on BR2_PACKAGE_LIBDRM_HAS_ATOMIC + select BR2_PACKAGE_LIBDRM_ENABLE_ATOMIC + help + Install the TI OMAP driver using an experimental API. + +config BR2_PACKAGE_LIBDRM_ETNAVIV + bool "etnaviv (experimental)" + depends on BR2_PACKAGE_LIBDRM_HAS_ATOMIC + select BR2_PACKAGE_LIBDRM_ENABLE_ATOMIC + help + Install the Etnaviv/Vivante driver using an experimental API. + +config BR2_PACKAGE_LIBDRM_EXYNOS + bool "exynos (experimental)" + depends on BR2_arm + help + Install Samsung Exynos driver using an experimental API. + +config BR2_PACKAGE_LIBDRM_FREEDRENO + bool "freedreno" + depends on BR2_arm || BR2_aarch64 || BR2_aarch64_be + depends on BR2_PACKAGE_LIBDRM_HAS_ATOMIC + select BR2_PACKAGE_LIBDRM_ENABLE_ATOMIC + help + Install Qualcomm Snapdragon driver. + +config BR2_PACKAGE_LIBDRM_TEGRA + bool "tegra (experimental)" + depends on BR2_arm + depends on BR2_PACKAGE_LIBDRM_HAS_ATOMIC + select BR2_PACKAGE_LIBDRM_ENABLE_ATOMIC + help + Install NVIDIA Tegra driver using an experimental API. + +config BR2_PACKAGE_LIBDRM_VC4 + bool "vc4" + depends on BR2_aarch64 || BR2_arm + help + Install vc4 (Raspberry Pi) driver. + +config BR2_PACKAGE_LIBDRM_INSTALL_TESTS + bool "Install test programs" + help + This option allows to install the libdrm test programs. + +endif + +comment "libdrm needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libdrm/libdrm.hash b/package/libdrm/libdrm.hash new file mode 100644 index 00000000..48f6b694 --- /dev/null +++ b/package/libdrm/libdrm.hash @@ -0,0 +1,6 @@ +# From https://lists.freedesktop.org/archives/dri-devel/2021-January/293654.html +sha256 d66ad8b5c2441015ac1333e40137bb803c3bde3612ff040286fcc12158ea1bcb libdrm-2.4.104.tar.xz +sha512 0fdbef53e0e7c441c805c95ac55ca2c94f11e8fa18e36b4dc7534c22e2b5bc8eca7283fdf41785da753f98d0b589023111abdba70db7e79837729b1540253d6e libdrm-2.4.104.tar.xz + +# Hash for license file +sha256 2ece103921b7b5619198b9572fb9242db7bbfa6d3b33f9f93f22e1fb738ed8ac xf86drm.c diff --git a/package/libdrm/libdrm.mk b/package/libdrm/libdrm.mk new file mode 100644 index 00000000..8ccbd832 --- /dev/null +++ b/package/libdrm/libdrm.mk @@ -0,0 +1,117 @@ +################################################################################ +# +# libdrm +# +################################################################################ + +LIBDRM_VERSION = 2.4.104 +LIBDRM_SOURCE = libdrm-$(LIBDRM_VERSION).tar.xz +LIBDRM_SITE = https://dri.freedesktop.org/libdrm +LIBDRM_LICENSE = MIT +LIBDRM_LICENSE_FILES = xf86drm.c +LIBDRM_INSTALL_STAGING = YES + +LIBDRM_DEPENDENCIES = \ + libpthread-stubs \ + host-pkgconf + +LIBDRM_CONF_OPTS = \ + -Dcairo-tests=false \ + -Dman-pages=false + +ifeq ($(BR2_PACKAGE_LIBATOMIC_OPS),y) +LIBDRM_DEPENDENCIES += libatomic_ops +ifeq ($(BR2_sparc_v8)$(BR2_sparc_leon3),y) +LIBDRM_CFLAGS = $(TARGET_CFLAGS) -DAO_NO_SPARC_V9 +endif +endif + +ifeq ($(BR2_PACKAGE_LIBDRM_INTEL),y) +LIBDRM_CONF_OPTS += -Dintel=true +LIBDRM_DEPENDENCIES += libpciaccess +else +LIBDRM_CONF_OPTS += -Dintel=false +endif + +ifeq ($(BR2_PACKAGE_LIBDRM_RADEON),y) +LIBDRM_CONF_OPTS += -Dradeon=true +else +LIBDRM_CONF_OPTS += -Dradeon=false +endif + +ifeq ($(BR2_PACKAGE_LIBDRM_AMDGPU),y) +LIBDRM_CONF_OPTS += -Damdgpu=true +else +LIBDRM_CONF_OPTS += -Damdgpu=false +endif + +ifeq ($(BR2_PACKAGE_LIBDRM_NOUVEAU),y) +LIBDRM_CONF_OPTS += -Dnouveau=true +else +LIBDRM_CONF_OPTS += -Dnouveau=false +endif + +ifeq ($(BR2_PACKAGE_LIBDRM_VMWGFX),y) +LIBDRM_CONF_OPTS += -Dvmwgfx=true +else +LIBDRM_CONF_OPTS += -Dvmwgfx=false +endif + +ifeq ($(BR2_PACKAGE_LIBDRM_OMAP),y) +LIBDRM_CONF_OPTS += -Domap=true +else +LIBDRM_CONF_OPTS += -Domap=false +endif + +ifeq ($(BR2_PACKAGE_LIBDRM_ETNAVIV),y) +LIBDRM_CONF_OPTS += -Detnaviv=true +else +LIBDRM_CONF_OPTS += -Detnaviv=false +endif + +ifeq ($(BR2_PACKAGE_LIBDRM_EXYNOS),y) +LIBDRM_CONF_OPTS += -Dexynos=true +else +LIBDRM_CONF_OPTS += -Dexynos=false +endif + +ifeq ($(BR2_PACKAGE_LIBDRM_FREEDRENO),y) +LIBDRM_CONF_OPTS += -Dfreedreno=true +else +LIBDRM_CONF_OPTS += -Dfreedreno=false +endif + +ifeq ($(BR2_PACKAGE_LIBDRM_TEGRA),y) +LIBDRM_CONF_OPTS += -Dtegra=true +else +LIBDRM_CONF_OPTS += -Dtegra=false +endif + +ifeq ($(BR2_PACKAGE_LIBDRM_VC4),y) +LIBDRM_CONF_OPTS += -Dvc4=true +else +LIBDRM_CONF_OPTS += -Dvc4=false +endif + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +LIBDRM_CONF_OPTS += -Dudev=true +LIBDRM_DEPENDENCIES += udev +else +LIBDRM_CONF_OPTS += -Dudev=false +endif + +ifeq ($(BR2_PACKAGE_VALGRIND),y) +LIBDRM_CONF_OPTS += -Dvalgrind=true +LIBDRM_DEPENDENCIES += valgrind +else +LIBDRM_CONF_OPTS += -Dvalgrind=false +endif + +ifeq ($(BR2_PACKAGE_LIBDRM_INSTALL_TESTS),y) +LIBDRM_CONF_OPTS += -Dinstall-test-programs=true +ifeq ($(BR2_PACKAGE_CUNIT),y) +LIBDRM_DEPENDENCIES += cunit +endif +endif + +$(eval $(meson-package)) diff --git a/package/libdvbcsa/0001-altivec-powerpc64.patch b/package/libdvbcsa/0001-altivec-powerpc64.patch new file mode 100644 index 00000000..3605c146 --- /dev/null +++ b/package/libdvbcsa/0001-altivec-powerpc64.patch @@ -0,0 +1,33 @@ +Fix compile on powerpc64/powerpc64le w/ altivec + +Correct the type of some vectors passed to vec_slo() or vec_sro(), which only +takes a char vector. + +Signed-off-by: Sam Bobroff + +--- a/src/dvbcsa_bs_altivec.h 2016-11-28 14:33:34.410021500 +1100 ++++ b/src/dvbcsa_bs_altivec.h 2016-11-28 14:34:25.442238715 +1100 +@@ -64,7 +64,7 @@ + } + case 0x29: { + dvbcsa_bs_word_t x = vec_splat_u8(10); +- return (dvbcsa_bs_word_t)vec_add(vec_splat_u8(0x1),vec_rl(x,x)); ++ return (dvbcsa_bs_word_t)vec_add((dvbcsa_bs_word_t)vec_splat_u8(0x1),vec_rl(x,x)); + } + case 0x40: { + dvbcsa_bs_word_t x = vec_splat_u8(4); +@@ -99,10 +99,10 @@ + #define SHVAL_14 BS_VAL8(0e) + #define SHVAL_7 BS_VAL8(07) + +-#define BS_SHL(a, n) ({ dvbcsa_bs_word_t x = SHVAL_##n; vec_sll(vec_slo((a), x), x); }) +-#define BS_SHR(a, n) ({ dvbcsa_bs_word_t x = SHVAL_##n; vec_srl(vec_sro((a), x), x); }) +-#define BS_SHL8(a, n) ({ dvbcsa_bs_word_t x = vec_splat_u8(n*2); x = vec_add(x,x); x = vec_add(x,x); vec_slo((a), x); }) +-#define BS_SHR8(a, n) ({ dvbcsa_bs_word_t x = vec_splat_u8(n*2); x = vec_add(x,x); x = vec_add(x,x); vec_sro((a), x); }) ++#define BS_SHL(a, n) ({ vector unsigned char x = SHVAL_##n; vec_sll(vec_slo((a), x), x); }) ++#define BS_SHR(a, n) ({ vector unsigned char x = SHVAL_##n; vec_srl(vec_sro((a), x), x); }) ++#define BS_SHL8(a, n) ({ vector unsigned char x = vec_splat_u8(n*2); x = vec_add(x,x); x = vec_add(x,x); vec_slo((a), x); }) ++#define BS_SHR8(a, n) ({ vector unsigned char x = vec_splat_u8(n*2); x = vec_add(x,x); x = vec_add(x,x); vec_sro((a), x); }) + + #define BS_EXTRACT8(a, n) ((uint8_t*)&(a))[15 - (n)] + diff --git a/package/libdvbcsa/Config.in b/package/libdvbcsa/Config.in new file mode 100644 index 00000000..1253ffbb --- /dev/null +++ b/package/libdvbcsa/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBDVBCSA + bool "libdvbcsa" + help + libdvbcsa is a free implementation of the DVB Common + Scrambling Algorithm - DVB/CSA - with encryption and + decryption capabilities + + As libdvbcsa implements a standard, it is completely legal to + use it. + + http://www.videolan.org/developers/libdvbcsa.html diff --git a/package/libdvbcsa/libdvbcsa.hash b/package/libdvbcsa/libdvbcsa.hash new file mode 100644 index 00000000..55ad51b5 --- /dev/null +++ b/package/libdvbcsa/libdvbcsa.hash @@ -0,0 +1,7 @@ +# From http://download.videolan.org/pub/videolan/libdvbcsa/1.1.0/libdvbcsa-1.1.0.tar.gz.sha256 +sha256 4db78af5cdb2641dfb1136fe3531960a477c9e3e3b6ba19a2754d046af3f456d libdvbcsa-1.1.0.tar.gz +# From http://download.videolan.org/pub/videolan/libdvbcsa/1.1.0/libdvbcsa-1.1.0.tar.gz.sha1 +sha1 5f4640a7e93ae6494f24a881414e5c343f803365 libdvbcsa-1.1.0.tar.gz + +# Hash for license file: +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/libdvbcsa/libdvbcsa.mk b/package/libdvbcsa/libdvbcsa.mk new file mode 100644 index 00000000..8b733e74 --- /dev/null +++ b/package/libdvbcsa/libdvbcsa.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# libdvbcsa +# +################################################################################ + +LIBDVBCSA_VERSION = 1.1.0 +LIBDVBCSA_SITE = http://get.videolan.org/libdvbcsa/$(LIBDVBCSA_VERSION) +LIBDVBCSA_LICENSE = GPL-2.0+ +LIBDVBCSA_LICENSE_FILES = COPYING +LIBDVBCSA_INSTALL_STAGING = YES + +ifeq ($(BR2_X86_CPU_HAS_MMX),y) +LIBDVBCSA_CONF_OPTS += --enable-mmx +else +LIBDVBCSA_CONF_OPTS += --disable-mmx +endif + +ifeq ($(BR2_X86_CPU_HAS_SSE2),y) +LIBDVBCSA_CONF_OPTS += --enable-sse2 +else +LIBDVBCSA_CONF_OPTS += --disable-sse2 +endif + +ifeq ($(BR2_POWERPC_CPU_HAS_ALTIVEC),y) +LIBDVBCSA_CONF_OPTS += --enable-altivec +LIBDVBCSA_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -flax-vector-conversions" +else +LIBDVBCSA_CONF_OPTS += --disable-altivec +endif + +$(eval $(autotools-package)) diff --git a/package/libdvbpsi/Config.in b/package/libdvbpsi/Config.in new file mode 100644 index 00000000..e52079bb --- /dev/null +++ b/package/libdvbpsi/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LIBDVBPSI + bool "libdvbpsi" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + libdvbpsi is a simple library designed for decoding and + generation of MPEG TS and DVB PSI tables according to + standards ISO/IEC 13818 and ITU-T H.222.0. + + http://www.videolan.org/developers/libdvbpsi.html + +comment "libdvbpsi needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libdvbpsi/libdvbpsi.hash b/package/libdvbpsi/libdvbpsi.hash new file mode 100644 index 00000000..727b1cf4 --- /dev/null +++ b/package/libdvbpsi/libdvbpsi.hash @@ -0,0 +1,6 @@ +# From http://download.videolan.org/pub/libdvbpsi/1.3.3/libdvbpsi-1.3.3.tar.bz2.md5 +md5 9b556ab08bb62a8bec61f5c1649bc9a8 libdvbpsi-1.3.3.tar.bz2 +# From http://download.videolan.org/pub/libdvbpsi/1.3.3/libdvbpsi-1.3.3.tar.bz2.sha256 +sha256 02b5998bcf289cdfbd8757bedd5987e681309b0a25b3ffe6cebae599f7a00112 libdvbpsi-1.3.3.tar.bz2 +# Hash for license file: +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/libdvbpsi/libdvbpsi.mk b/package/libdvbpsi/libdvbpsi.mk new file mode 100644 index 00000000..5a07ad0c --- /dev/null +++ b/package/libdvbpsi/libdvbpsi.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libdvbpsi +# +################################################################################ + +LIBDVBPSI_VERSION = 1.3.3 +LIBDVBPSI_SITE = http://download.videolan.org/pub/libdvbpsi/$(LIBDVBPSI_VERSION) +LIBDVBPSI_SOURCE = libdvbpsi-$(LIBDVBPSI_VERSION).tar.bz2 +LIBDVBPSI_LICENSE = LGPL-2.1+ +LIBDVBPSI_LICENSE_FILES = COPYING +LIBDVBPSI_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/libdvbsi/Config.in b/package/libdvbsi/Config.in new file mode 100644 index 00000000..fa0dcea4 --- /dev/null +++ b/package/libdvbsi/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_LIBDVBSI + bool "libdvbsi" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + help + C++ parsing library for Service Information (SI) in DVB + systems. With libdvbsi++ you can convert raw DVB service + information to a set of C++ objects, removing the need to + parse data manually. + + http://www.saftware.de/ + +comment "libdvbsi++ needs a toolchain w/ C++, wchar, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libdvbsi/libdvbsi.hash b/package/libdvbsi/libdvbsi.hash new file mode 100644 index 00000000..5f731a19 --- /dev/null +++ b/package/libdvbsi/libdvbsi.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 a57949b842d94efedd895f2bd8e483c9f258e698092e35f1c3fdccb45b790953 libdvbsi++-0.3.9.tar.bz2 +sha256 6095e9ffa777dd22839f7801aa845b31c9ed07f3d6bf8a26dc5d2dec8ccc0ef3 COPYING diff --git a/package/libdvbsi/libdvbsi.mk b/package/libdvbsi/libdvbsi.mk new file mode 100644 index 00000000..65191b81 --- /dev/null +++ b/package/libdvbsi/libdvbsi.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libdvbsi +# +################################################################################ + +LIBDVBSI_VERSION = 0.3.9 +LIBDVBSI_SOURCE = libdvbsi++-$(LIBDVBSI_VERSION).tar.bz2 +LIBDVBSI_SITE = https://github.com/mtdcr/libdvbsi/releases/download/$(LIBDVBSI_VERSION) +LIBDVBSI_INSTALL_STAGING = YES +LIBDVBSI_LICENSE = LGPL-2.1 +LIBDVBSI_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/libdvdcss/Config.in b/package/libdvdcss/Config.in new file mode 100644 index 00000000..a8c3b84c --- /dev/null +++ b/package/libdvdcss/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBDVDCSS + bool "libdvdcss" + help + libdvdcss is a simple library designed for accessing DVDs like + a block device without having to bother about the decryption. + + http://www.videolan.org/developers/libdvdcss.html diff --git a/package/libdvdcss/libdvdcss.hash b/package/libdvdcss/libdvdcss.hash new file mode 100644 index 00000000..1e1b03ed --- /dev/null +++ b/package/libdvdcss/libdvdcss.hash @@ -0,0 +1,5 @@ +# From http://download.videolan.org/pub/videolan/libdvdcss/1.4.2/libdvdcss-1.4.2.tar.bz2.sha256 +sha256 78c2ed77ec9c0d8fbed7bf7d3abc82068b8864be494cfad165821377ff3f2575 libdvdcss-1.4.2.tar.bz2 + +# Hash for license file: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/libdvdcss/libdvdcss.mk b/package/libdvdcss/libdvdcss.mk new file mode 100644 index 00000000..0593d556 --- /dev/null +++ b/package/libdvdcss/libdvdcss.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libdvdcss +# +################################################################################ + +LIBDVDCSS_VERSION = 1.4.2 +LIBDVDCSS_SOURCE = libdvdcss-$(LIBDVDCSS_VERSION).tar.bz2 +LIBDVDCSS_SITE = http://www.videolan.org/pub/videolan/libdvdcss/$(LIBDVDCSS_VERSION) +LIBDVDCSS_INSTALL_STAGING = YES +LIBDVDCSS_LICENSE = GPL-2.0+ +LIBDVDCSS_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/libdvdnav/Config.in b/package/libdvdnav/Config.in new file mode 100644 index 00000000..77cba5f1 --- /dev/null +++ b/package/libdvdnav/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_LIBDVDNAV + bool "libdvdnav" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_LIBDVDREAD + help + libdvdnav is a library that allows easy use of sophisticated + DVD navigation features such as DVD menus, multiangle + playback and even interactive DVD games. + + https://www.videolan.org/developers/libdvdnav.html + +comment "libdvdnav needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libdvdnav/libdvdnav.hash b/package/libdvdnav/libdvdnav.hash new file mode 100644 index 00000000..04706b0b --- /dev/null +++ b/package/libdvdnav/libdvdnav.hash @@ -0,0 +1,9 @@ +# From http://download.videolan.org/pub/videolan/libdvdnav/6.1.0/libdvdnav-6.1.0.tar.bz2.md5 +md5 8817ac12c13644df6ba2091c2dcaeed3 libdvdnav-6.1.0.tar.bz2 +# From http://download.videolan.org/pub/videolan/libdvdnav/6.1.0/libdvdnav-6.1.0.tar.bz2.sha1 +sha1 b0597e9d11393e17b57f784c0dcba33a499e80b0 libdvdnav-6.1.0.tar.bz2 +# From http://download.videolan.org/pub/videolan/libdvdnav/6.1.0/libdvdnav-6.1.0.tar.bz2.sha256 +sha256 f697b15ea9f75e9f36bdf6ec3726308169f154e2b1e99865d0bbe823720cee5b libdvdnav-6.1.0.tar.bz2 + +# Hash for license file: +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/libdvdnav/libdvdnav.mk b/package/libdvdnav/libdvdnav.mk new file mode 100644 index 00000000..c5bebd49 --- /dev/null +++ b/package/libdvdnav/libdvdnav.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libdvdnav +# +################################################################################ + +LIBDVDNAV_VERSION = 6.1.0 +LIBDVDNAV_SOURCE = libdvdnav-$(LIBDVDNAV_VERSION).tar.bz2 +LIBDVDNAV_SITE = http://www.videolan.org/pub/videolan/libdvdnav/$(LIBDVDNAV_VERSION) +LIBDVDNAV_INSTALL_STAGING = YES +LIBDVDNAV_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -std=gnu99" +LIBDVDNAV_DEPENDENCIES = libdvdread host-pkgconf +LIBDVDNAV_LICENSE = GPL-2.0+ +LIBDVDNAV_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/libdvdread/Config.in b/package/libdvdread/Config.in new file mode 100644 index 00000000..35790541 --- /dev/null +++ b/package/libdvdread/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBDVDREAD + bool "libdvdread" + select BR2_PACKAGE_LIBDVDCSS + help + libdvdread provides a simple foundation for reading + DVD-Video images. + + https://www.videolan.org/developers/libdvdnav.html diff --git a/package/libdvdread/libdvdread.hash b/package/libdvdread/libdvdread.hash new file mode 100644 index 00000000..00066619 --- /dev/null +++ b/package/libdvdread/libdvdread.hash @@ -0,0 +1,9 @@ +# From http://download.videolan.org/pub/videolan/libdvdread/6.1.1/libdvdread-6.1.1.tar.bz2.md5 +md5 09c7423568fb679279fd2a2bc6b10b6e libdvdread-6.1.1.tar.bz2 +# From http://download.videolan.org/pub/videolan/libdvdread/6.1.1/libdvdread-6.1.1.tar.bz2.sha1 +sha1 d2e5056de89fb5fed478c0af5a72e8b781d0c396 libdvdread-6.1.1.tar.bz2 +# From http://download.videolan.org/pub/videolan/libdvdread/6.1.1/libdvdread-6.1.1.tar.bz2.sha256 +sha256 3e357309a17c5be3731385b9eabda6b7e3fa010f46022a06f104553bf8e21796 libdvdread-6.1.1.tar.bz2 + +# Hash for license file: +sha256 d6cb0e9e560f51085556949a84af12b79a00f10ab8b66c752537faf7cd665572 COPYING diff --git a/package/libdvdread/libdvdread.mk b/package/libdvdread/libdvdread.mk new file mode 100644 index 00000000..aa91d316 --- /dev/null +++ b/package/libdvdread/libdvdread.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# libdvdread +# +################################################################################ + +LIBDVDREAD_VERSION = 6.1.1 +LIBDVDREAD_SOURCE = libdvdread-$(LIBDVDREAD_VERSION).tar.bz2 +LIBDVDREAD_SITE = http://www.videolan.org/pub/videolan/libdvdread/$(LIBDVDREAD_VERSION) +LIBDVDREAD_INSTALL_STAGING = YES +LIBDVDREAD_LICENSE = GPL-2.0+ +LIBDVDREAD_LICENSE_FILES = COPYING +LIBDVDREAD_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) -std=gnu99" +LIBDVDREAD_CONF_OPTS = --with-libdvdcss +LIBDVDREAD_DEPENDENCIES = libdvdcss host-pkgconf + +$(eval $(autotools-package)) diff --git a/package/libeXosip2/0001-src-eXtls_dtls.c-fix-build-with-libressl.patch b/package/libeXosip2/0001-src-eXtls_dtls.c-fix-build-with-libressl.patch new file mode 100644 index 00000000..b153eee6 --- /dev/null +++ b/package/libeXosip2/0001-src-eXtls_dtls.c-fix-build-with-libressl.patch @@ -0,0 +1,34 @@ +From 178632fa5530a72f50376a60d59be2a07e65c28b Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 6 Mar 2021 15:20:51 +0100 +Subject: [PATCH] src/eXtls_dtls.c: fix build with libressl + +Build with libressl is broken since +https://git.savannah.nongnu.org/cgit/exosip.git/commit/?id=d7488b7bbf59870192372384ef338a44be23e888 +because libressl does not define SSL_set0_rbio + +Fixes: + - http://autobuild.buildroot.org/results/89d8d4ba99d6dcc1618cf6b5302c124a92d75be9 + +Signed-off-by: Fabrice Fontaine +[Upstream status: sent to amoizard@antisip.com] +--- + src/eXtl_dtls.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/eXtl_dtls.c b/src/eXtl_dtls.c +index 40fa658..8ac3a13 100644 +--- a/src/eXtl_dtls.c ++++ b/src/eXtl_dtls.c +@@ -70,7 +70,7 @@ + #define RANDOM "random.pem" + #define DHFILE "dh1024.pem" + +-#if OPENSSL_VERSION_NUMBER < 0x10100000L ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + + static void + SSL_set0_rbio (SSL * s, BIO * rbio) +-- +2.30.0 + diff --git a/package/libeXosip2/Config.in b/package/libeXosip2/Config.in new file mode 100644 index 00000000..9fbe9789 --- /dev/null +++ b/package/libeXosip2/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_LIBEXOSIP2 + bool "libeXosip2" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBOSIP2 + help + eXosip is a library that hides the complexity of using the + SIP protocol for multimedia session establishment. + This protocol is mainly to be used by VoIP telephony + applications (endpoints or conference server) but might be + also useful for any application that wish to establish + sessions like multiplayer games. + eXosip is based in libosip. + + http://savannah.nongnu.org/projects/exosip/ diff --git a/package/libeXosip2/libeXosip2.hash b/package/libeXosip2/libeXosip2.hash new file mode 100644 index 00000000..53e27e92 --- /dev/null +++ b/package/libeXosip2/libeXosip2.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 e3ae88df8573c9e08dbc24fe6195a118845e845109a8e291c91ecd6a2a3b7225 libexosip2-5.2.0.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/libeXosip2/libeXosip2.mk b/package/libeXosip2/libeXosip2.mk new file mode 100644 index 00000000..3ed637a3 --- /dev/null +++ b/package/libeXosip2/libeXosip2.mk @@ -0,0 +1,38 @@ +################################################################################ +# +# libexosip2 +# +################################################################################ + +LIBEXOSIP2_VERSION = 5.2.0 +# Since version 5.0, letter 'X' in library's name is in lower case +LIBEXOSIP2_SOURCE = libexosip2-$(LIBEXOSIP2_VERSION).tar.gz +LIBEXOSIP2_SITE = http://download.savannah.gnu.org/releases/exosip +LIBEXOSIP2_INSTALL_STAGING = YES +LIBEXOSIP2_LICENSE = GPL-2.0+ +LIBEXOSIP2_LICENSE_FILES = COPYING +LIBEXOSIP2_CPE_ID_VENDOR = gnu +LIBEXOSIP2_CPE_ID_PRODUCT = exosip + +LIBEXOSIP2_DEPENDENCIES = host-pkgconf libosip2 + +ifeq ($(BR2_arc),y) +# toolchain __arc__ define conflicts with libeXosip2 source +LIBEXOSIP2_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) -U__arc__" +endif + +ifeq ($(BR2_PACKAGE_C_ARES),y) +LIBEXOSIP2_DEPENDENCIES += c-ares +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +LIBEXOSIP2_DEPENDENCIES += openssl +LIBEXOSIP2_CONF_OPTS += --enable-openssl +else +LIBEXOSIP2_CONF_OPTS += --disable-openssl +endif + +LIBEXOSIP2_CONF_OPTS += \ + --enable-mt=$(if $(BR2_TOOLCHAIN_HAS_THREADS),yes,no) + +$(eval $(autotools-package)) diff --git a/package/libeastl/Config.in b/package/libeastl/Config.in new file mode 100644 index 00000000..76094345 --- /dev/null +++ b/package/libeastl/Config.in @@ -0,0 +1,27 @@ +config BR2_PACKAGE_LIBEASTL_ARCH_SUPPORTS + bool + default y if BR2_i386 + default y if BR2_x86_64 + default y if BR2_aarch64 + default y if BR2_powerpc + default y if BR2_powerpc64 + +config BR2_PACKAGE_LIBEASTL + bool "libeastl" + depends on BR2_PACKAGE_LIBEASTL_ARCH_SUPPORTS + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C++14 + help + EASTL stands for Electronic Arts Standard Template + Library. EASTL stands for Electronic Arts Standard Template + Library. It is a C++ template library of containers, + algorithms, and iterators useful for runtime and tool + development across multiple platforms. It is an extensive + and robust implementation that has an emphasis on high + performance. + + https://github.com/electronicarts/EASTL + +comment "libeastl needs a toolchain w/ C++, gcc >= 4.9" + depends on BR2_PACKAGE_LIBEASTL_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || !BR2_INSTALL_LIBSTDCPP diff --git a/package/libeastl/libeastl.hash b/package/libeastl/libeastl.hash new file mode 100644 index 00000000..2d8367c0 --- /dev/null +++ b/package/libeastl/libeastl.hash @@ -0,0 +1,2 @@ +sha256 9b3484553812b3ec3bad0857f7f675499c81f7cf4ac87e5f3b2acbe72e3a878a libeastl-45469730d641868ce05433fff2e199510c7d45c3.tar.gz +sha256 82c0243a1a62b8af01dab3bce6ed2b0852604bd508b85a561ba7d32480e598e3 LICENSE diff --git a/package/libeastl/libeastl.mk b/package/libeastl/libeastl.mk new file mode 100644 index 00000000..0559dd85 --- /dev/null +++ b/package/libeastl/libeastl.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# libeastl +# +################################################################################ + +LIBEASTL_VERSION = 45469730d641868ce05433fff2e199510c7d45c3 +LIBEASTL_SITE = $(call github,electronicarts,EASTL,$(LIBEASTL_VERSION)) +LIBEASTL_LICENSE = BSD-3-Clause +LIBEASTL_LICENSE_FILES = LICENSE +LIBEASTL_INSTALL_STAGING = YES + +$(eval $(cmake-package)) diff --git a/package/libebml/Config.in b/package/libebml/Config.in new file mode 100644 index 00000000..a00b8943 --- /dev/null +++ b/package/libebml/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LIBEBML + bool "libebml" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + help + Access library for the EBML (Extensible Binary Meta + Language, a binary derivative of XML) format. + + http://matroska.org + +comment "libebml needs a toolchain w/ C++, wchar" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR diff --git a/package/libebml/libebml.hash b/package/libebml/libebml.hash new file mode 100644 index 00000000..32ca1e3d --- /dev/null +++ b/package/libebml/libebml.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 41c7237ce05828fb220f62086018b080af4db4bb142f31bec0022c925889b9f2 libebml-1.4.2.tar.xz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 LICENSE.LGPL diff --git a/package/libebml/libebml.mk b/package/libebml/libebml.mk new file mode 100644 index 00000000..056cf888 --- /dev/null +++ b/package/libebml/libebml.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# libebml +# +################################################################################ + +LIBEBML_VERSION = 1.4.2 +LIBEBML_SOURCE = libebml-$(LIBEBML_VERSION).tar.xz +LIBEBML_SITE = http://dl.matroska.org/downloads/libebml +LIBEBML_INSTALL_STAGING = YES +LIBEBML_LICENSE = LGPL-2.1+ +LIBEBML_LICENSE_FILES = LICENSE.LGPL +LIBEBML_CPE_ID_VENDOR = matroska + +$(eval $(cmake-package)) diff --git a/package/libebur128/Config.in b/package/libebur128/Config.in new file mode 100644 index 00000000..0d68b39d --- /dev/null +++ b/package/libebur128/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_LIBEBUR128 + bool "libebur128" + # build system has no support to disable shared linking + # leading to a build error with a static-only toolchain + depends on !BR2_STATIC_LIBS + help + libebur128 is a library that implements the EBU R 128 standard + for loudness normalization. + + https://github.com/jiixyj/libebur128 + +comment "libebur128 needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/libebur128/libebur128.hash b/package/libebur128/libebur128.hash new file mode 100644 index 00000000..e2285bc7 --- /dev/null +++ b/package/libebur128/libebur128.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 2ee41a3a5ae3891601ae975d5ec2642b997d276ef647cf5c5b363b6127f7add8 libebur128-1.2.4.tar.gz +sha256 d6b4754bb67bdd08b97d5d11b2d7434997a371585a78fe77007149df3af8d09c COPYING diff --git a/package/libebur128/libebur128.mk b/package/libebur128/libebur128.mk new file mode 100644 index 00000000..97c1bdbb --- /dev/null +++ b/package/libebur128/libebur128.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# libebur128 +# +################################################################################ + +LIBEBUR128_VERSION = 1.2.4 +LIBEBUR128_SITE = $(call github,jiixyj,libebur128,v$(LIBEBUR128_VERSION)) +LIBEBUR128_LICENSE = MIT +LIBEBUR128_LICENSE_FILES = COPYING +LIBEBUR128_INSTALL_STAGING = YES + +$(eval $(cmake-package)) diff --git a/package/libedit/0001-check-bsd-functions-in-libbsd.patch b/package/libedit/0001-check-bsd-functions-in-libbsd.patch new file mode 100644 index 00000000..7438340d --- /dev/null +++ b/package/libedit/0001-check-bsd-functions-in-libbsd.patch @@ -0,0 +1,22 @@ +configure: on Linux, the BSD functions require linking against libbsd + +Signed-off-by: "Fabrice Fontaine" +(Rebased against 20170329-3.1) +Signed-off-by: "Yann E. MORIN" +(Rebased against 20150325-3.1) +Signed-off-by: Bernd Kuhls + +diff -durN libedit-20130712-3.1.orig/configure.ac libedit-20130712-3.1/configure.ac +--- libedit-20130712-3.1.orig/configure.ac 2013-07-12 20:39:22.000000000 +0200 ++++ libedit-20130712-3.1/configure.ac 2013-07-28 23:35:35.012676469 +0200 +@@ -117,6 +117,10 @@ + #AC_FUNC_REALLOC + AC_TYPE_SIGNAL + AC_FUNC_STAT ++ ++# Search for libbsd for *vis functions ++AC_CHECK_LIB([bsd], [vis]) ++ + AC_CHECK_FUNCS([endpwent isascii memchr memset re_comp regcomp strcasecmp strchr strcspn strdup strerror strrchr strstr strtol issetugid wcsdup strlcpy strlcat getline vis strvis strunvis __secure_getenv secure_getenv]) + + # strlcpy diff --git a/package/libedit/Config.in b/package/libedit/Config.in new file mode 100644 index 00000000..8ccf3edc --- /dev/null +++ b/package/libedit/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_LIBEDIT + bool "libedit" + depends on BR2_USE_WCHAR + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_NCURSES + help + The editline library (from BSD) provides generic line editing + and history functions. It slightly resembles GNU readline. + + The official homepage is at: + http://ftp.netbsd.org/pub/NetBSD/NetBSD-release-5-0/src/lib/libedit/ + + Jess Thrysoee maintains an autotoolified package, which we use + in Buildroot as it makes it much simpler than using the + upstream sources which require pmake. + + http://www.thrysoee.dk/editline + +comment "libedit needs a toolchain w/ wchar" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR diff --git a/package/libedit/libedit.hash b/package/libedit/libedit.hash new file mode 100644 index 00000000..d405e47b --- /dev/null +++ b/package/libedit/libedit.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 dbb82cb7e116a5f8025d35ef5b4f7d4a3cdd0a3909a146a39112095a2d229071 libedit-20191231-3.1.tar.gz +sha256 9da6c9c74987a36c84302982799d17d2f748ba1c1c0c471425716173c1d07649 COPYING diff --git a/package/libedit/libedit.mk b/package/libedit/libedit.mk new file mode 100644 index 00000000..cb18b97f --- /dev/null +++ b/package/libedit/libedit.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# libedit +# +################################################################################ + +LIBEDIT_VERSION = 20191231-3.1 +LIBEDIT_SITE = http://www.thrysoee.dk/editline +LIBEDIT_INSTALL_STAGING = YES +LIBEDIT_DEPENDENCIES = ncurses +LIBEDIT_LICENSE = BSD-3-Clause +LIBEDIT_LICENSE_FILES = COPYING + +# We're patching configure.ac +LIBEDIT_AUTORECONF = YES + +# musl is ISO 10646 compliant but doesn't define __STDC_ISO_10646__, +# so let's define it manually +ifeq ($(BR2_TOOLCHAIN_USES_MUSL),y) +LIBEDIT_CONF_OPTS += CFLAGS="$(TARGET_CFLAGS) -D__STDC_ISO_10646__=201103L" +endif + +# Note: libbsd required for *vis functions, but works only with a toolchain +# with __progname; otherwise, some features are disabled, as if libbsd was +# missing entirely. +ifeq ($(BR2_PACKAGE_LIBBSD),y) +LIBEDIT_DEPENDENCIES += libbsd +endif + +$(eval $(autotools-package)) diff --git a/package/libee/Config.in b/package/libee/Config.in new file mode 100644 index 00000000..9a3411ef --- /dev/null +++ b/package/libee/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_LIBEE + bool "libee" + select BR2_PACKAGE_LIBESTR + help + An Event Expression Library inspired by CEE. + + CEE is an upcoming standard used to describe network + events in a number of normalized formats. It's goal is + to unify they currently many different representations + that exist in the industry. + + The core idea of libee is to provide a small but hopefully + convenient API layer above the CEE standard. However, CEE + is not finished. At the time of this writing, CEE is under + heavy development and even some of its core data structures + (like the data dictionary and taxonmy) have not been fully + specified. + + http://www.libee.org diff --git a/package/libee/libee.hash b/package/libee/libee.hash new file mode 100644 index 00000000..5ad47e16 --- /dev/null +++ b/package/libee/libee.hash @@ -0,0 +1,5 @@ +# From http://www.libee.org/download/libee-0-4-1/ +md5 7bbf4160876c12db6193c06e2badedb2 libee-0.4.1.tar.gz + +# Hash for license file: +sha256 275fecbf835387e042ba96884f0f05356a485a6ea8449b2c5295cc11652ad439 COPYING diff --git a/package/libee/libee.mk b/package/libee/libee.mk new file mode 100644 index 00000000..9879eff3 --- /dev/null +++ b/package/libee/libee.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libee +# +################################################################################ + +LIBEE_VERSION = 0.4.1 +LIBEE_SITE = http://www.libee.org/download/files/download +LIBEE_LICENSE = LGPL-2.1+ +LIBEE_LICENSE_FILES = COPYING +LIBEE_DEPENDENCIES = libestr host-pkgconf +LIBEE_INSTALL_STAGING = YES + +LIBEE_MAKE = $(MAKE1) + +$(eval $(autotools-package)) diff --git a/package/libelectric-fence/0001-makefile-change.patch b/package/libelectric-fence/0001-makefile-change.patch new file mode 100644 index 00000000..6897e269 --- /dev/null +++ b/package/libelectric-fence/0001-makefile-change.patch @@ -0,0 +1,27 @@ +diff -Nrau electric-fence_2.2.6/Makefile new/Makefile +--- electric-fence_2.2.6/Makefile 2021-11-13 02:58:14.000000000 +0800 ++++ new/Makefile 2022-01-28 14:19:02.860945964 +0800 +@@ -12,8 +12,6 @@ + MAN_INSTALL_DIR= $(prefix)/share/man/man3 + + +-CC= cc +-AR= ar + INSTALL= install + + PACKAGE_SOURCE= README efence.3 Makefile efence.h \ +@@ -22,14 +20,6 @@ + OBJECTS= efence.o page.o print.o + + all: libefence.a libefence.so.0.0 tstheap eftest +- @ echo +- @ echo "Testing Electric Fence." +- @ echo "After the last test, it should print that the test has PASSED." +- ./eftest +- ./tstheap 3072 +- @ echo +- @ echo "Electric Fence confidence test PASSED." +- @ echo + + install: libefence.a libefence.3 libefence.so.0.0 + # $(INSTALL) -m 755 ef.sh $(BIN_INSTALL_DIR)/ef diff --git a/package/libelectric-fence/Config.in b/package/libelectric-fence/Config.in new file mode 100644 index 00000000..6f58404b --- /dev/null +++ b/package/libelectric-fence/Config.in @@ -0,0 +1,5 @@ +config BR2_PACKAGE_LIBELECTRIC_FENCE + bool "electric fence" + help + 2.2.6version from debian. + just work for -lefence diff --git a/package/libelectric-fence/libelectric-fence.mk b/package/libelectric-fence/libelectric-fence.mk new file mode 100644 index 00000000..b822da84 --- /dev/null +++ b/package/libelectric-fence/libelectric-fence.mk @@ -0,0 +1,42 @@ +################################################################################ +# +# libelectric-fence +# +################################################################################ + +LIBELECTRIC_FENCE_VERSION = 2.2.6 +LIBELECTRIC_FENCE_SITE = http://deb.debian.org/debian/pool/main/e/electric-fence +LIBELECTRIC_FENCE_SOURCE = electric-fence_$(LIBELECTRIC_FENCE_VERSION).tar.gz +LIBELECTRIC_FENCE_CFLAGS = $(TARGET_CFLAGS) + +#cp $(LIBELECTRIC_FENCE_PACKAGE_DIR)/*.patch $(LIBELECTRIC_FENCE_DL_DIR)/ +#cd $(LIBELECTRIC_FENCE_DL_DIR) && tar -zxf $(LIBELECTRIC_FENCE_SOURCE) && cp *.patch work/ && cd work && patch -p1 < *.patch && cd .. && mv work/* $(BUILD_DIR)/libelectric-fence-$(LIBELECTRIC_FENCE_VERSION)/ +define LIBELECTRIC_FENCE_EXTRACT_CMDS + echo $(BUILD_DIR) + cd $(LIBELECTRIC_FENCE_DL_DIR) && tar -zxf $(LIBELECTRIC_FENCE_SOURCE) && mv work/* $(BUILD_DIR)/libelectric-fence-$(LIBELECTRIC_FENCE_VERSION)/ +endef + +define LIBELECTRIC_FENCE_BUILD_CMDS + echo $(CC) + echo $(CROSS_COMPILER) + echo $(TARGET_CC) + echo $(HOST_CC) + $(TARGET_MAKE_ENV) $(MAKE) CC=$(TARGET_CC) AR=$(TARGET_AR) -C $(@D) +endef + +define LIBELECTRIC_FENCE_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) CC=$(TARGET_CC) AR=$(TARGET_AR) -C $(@D) DESTDIR=$(STAGING_DIR) install +endef + +define LIBELECTRIC_FENCE_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +define LIBELECTRIC_FENCE_REMOVE_LIBELECTRIC_FENCE_ENGINES + rm -rf $(TARGET_DIR)/usr/lib/libefence.so.0.0 + rm -rf $(TARGET_DIR)/usr/lib/libefence.so.0 + rm -rf $(TARGET_DIR)/usr/lib/libefence.so + rm -rf $(TARGET_DIR)/usr/lib/libefence.a +endef + +$(eval $(generic-package)) diff --git a/package/libenca/Config.in b/package/libenca/Config.in new file mode 100644 index 00000000..5e951ed8 --- /dev/null +++ b/package/libenca/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LIBENCA + bool "libenca" + help + Extremely Naive Charset Analyser + + http://cihar.com/software/enca/ diff --git a/package/libenca/libenca.hash b/package/libenca/libenca.hash new file mode 100644 index 00000000..6c874b16 --- /dev/null +++ b/package/libenca/libenca.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 3a487eca40b41021e2e4b7a6440b97d822e6532db5464471f572ecf77295e8b8 enca-1.19.tar.xz +sha256 87f1bd4a52b4029476b684fcdd51fed3c6b2540e462d3c2d3bfc9be4558b2825 COPYING diff --git a/package/libenca/libenca.mk b/package/libenca/libenca.mk new file mode 100644 index 00000000..63b68950 --- /dev/null +++ b/package/libenca/libenca.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# libenca +# +################################################################################ + +LIBENCA_VERSION = 1.19 +LIBENCA_SITE = http://dl.cihar.com/enca +LIBENCA_SOURCE = enca-$(LIBENCA_VERSION).tar.xz +LIBENCA_INSTALL_STAGING = YES +LIBENCA_LICENSE = GPL-2.0 +LIBENCA_LICENSE_FILES = COPYING +LIBENCA_DEPENDENCIES = $(if $(BR2_PACKAGE_LIBICONV),libiconv) + +LIBENCA_CONF_ENV += \ + ac_cv_file__dev_random=yes \ + ac_cv_file__dev_urandom=yes \ + ac_cv_file__dev_arandom=no \ + ac_cv_file__dev_srandom=no + +define LIBENCA_MAKE_HOST_TOOL + $(MAKE) -C $(@D)/tools $(HOST_CONFIGURE_OPTS) make_hash +endef + +LIBENCA_PRE_BUILD_HOOKS += LIBENCA_MAKE_HOST_TOOL + +$(eval $(autotools-package)) diff --git a/package/libepoxy/Config.in b/package/libepoxy/Config.in new file mode 100644 index 00000000..9da190b8 --- /dev/null +++ b/package/libepoxy/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LIBEPOXY + bool "libepoxy" + depends on BR2_PACKAGE_HAS_LIBEGL || BR2_PACKAGE_HAS_LIBGL + select BR2_PACKAGE_XUTIL_UTIL_MACROS + help + Epoxy is a library for handling OpenGL function pointer + management for you. + + https://github.com/anholt/libepoxy + +comment "libepoxy needs an OpenGL and/or OpenGL EGL backend" + depends on !BR2_PACKAGE_HAS_LIBEGL && !BR2_PACKAGE_HAS_LIBGL diff --git a/package/libepoxy/libepoxy.hash b/package/libepoxy/libepoxy.hash new file mode 100644 index 00000000..79876ad0 --- /dev/null +++ b/package/libepoxy/libepoxy.hash @@ -0,0 +1,5 @@ +# From http://ftp.gnome.org/pub/gnome/sources/libepoxy/1.5/libepoxy-1.5.5.sha256sum +sha256 261663db21bcc1cc232b07ea683252ee6992982276536924271535875f5b0556 libepoxy-1.5.5.tar.xz + +# Hashes for license files: +sha256 8d5144666f9c4df9bbd69b8900086d5979259152a1060421cdcc0fb9061a1c12 COPYING diff --git a/package/libepoxy/libepoxy.mk b/package/libepoxy/libepoxy.mk new file mode 100644 index 00000000..bb578fb0 --- /dev/null +++ b/package/libepoxy/libepoxy.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# libepoxy +# +################################################################################ + +LIBEPOXY_VERSION_MAJOR = 1.5 +LIBEPOXY_VERSION = $(LIBEPOXY_VERSION_MAJOR).5 +LIBEPOXY_SITE = http://ftp.gnome.org/pub/gnome/sources/libepoxy/$(LIBEPOXY_VERSION_MAJOR) +LIBEPOXY_SOURCE = libepoxy-$(LIBEPOXY_VERSION).tar.xz +LIBEPOXY_INSTALL_STAGING = YES +LIBEPOXY_DEPENDENCIES = host-pkgconf xutil_util-macros +LIBEPOXY_LICENSE = MIT +LIBEPOXY_LICENSE_FILES = COPYING +LIBEPOXY_CONF_OPTS += -Ddocs=false -Dtests=false + +ifeq ($(BR2_PACKAGE_HAS_LIBEGL),y) +LIBEPOXY_CONF_OPTS += -Degl=yes +LIBEPOXY_DEPENDENCIES += libegl +else +LIBEPOXY_CONF_OPTS += -Degl=no +endif + +ifeq ($(BR2_PACKAGE_HAS_LIBGL)$(BR2_PACKAGE_XLIB_LIBX11),yy) +LIBEPOXY_CONF_OPTS += -Dglx=yes -Dx11=true +LIBEPOXY_DEPENDENCIES += libgl xlib_libX11 +else +LIBEPOXY_CONF_OPTS += -Dglx=no -Dx11=false +endif + +$(eval $(meson-package)) diff --git a/package/liberation/Config.in b/package/liberation/Config.in new file mode 100644 index 00000000..8d6b3e78 --- /dev/null +++ b/package/liberation/Config.in @@ -0,0 +1,24 @@ +config BR2_PACKAGE_LIBERATION + bool "Liberation (Free fonts)" + help + The Liberation Fonts are intended to be replacements for the + three most commonly used fonts on Microsoft systems: + Times New Roman, Arial, and Courier New. + + https://github.com/liberationfonts/liberation-fonts + +if BR2_PACKAGE_LIBERATION + +config BR2_PACKAGE_LIBERATION_MONO + bool "mono fonts" + default y + +config BR2_PACKAGE_LIBERATION_SANS + bool "sans fonts" + default y + +config BR2_PACKAGE_LIBERATION_SERIF + bool "serif fonts" + default y + +endif diff --git a/package/liberation/liberation.hash b/package/liberation/liberation.hash new file mode 100644 index 00000000..6606142d --- /dev/null +++ b/package/liberation/liberation.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 14694930f28391675008c67b18889d1a7dfea74b16adf50394f8057b57eaf8e0 liberation-fonts-ttf-2.1.2.tar.gz +sha256 93fed46019c38bbe566b479d22148e2e8a1e85ada614accb0211c37b2c61c19b LICENSE diff --git a/package/liberation/liberation.mk b/package/liberation/liberation.mk new file mode 100644 index 00000000..522a038d --- /dev/null +++ b/package/liberation/liberation.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# liberation +# +################################################################################ + +LIBERATION_VERSION = 2.1.2 +LIBERATION_SITE = https://github.com/liberationfonts/liberation-fonts/files/5722233 +LIBERATION_SOURCE = liberation-fonts-ttf-$(LIBERATION_VERSION).tar.gz +LIBERATION_TARGET_DIR = $(TARGET_DIR)/usr/share/fonts/liberation +LIBERATION_LICENSE = OFL-1.1 +LIBERATION_LICENSE_FILES = LICENSE + +ifeq ($(BR2_PACKAGE_LIBERATION_MONO),y) +define LIBERATION_INSTALL_MONO + $(INSTALL) -m 644 $(@D)/LiberationMono*.ttf $(LIBERATION_TARGET_DIR) +endef +endif + +ifeq ($(BR2_PACKAGE_LIBERATION_SANS),y) +define LIBERATION_INSTALL_SANS + $(INSTALL) -m 644 $(@D)/LiberationSans*.ttf $(LIBERATION_TARGET_DIR) +endef +endif + +ifeq ($(BR2_PACKAGE_LIBERATION_SERIF),y) +define LIBERATION_INSTALL_SERIF + $(INSTALL) -m 644 $(@D)/LiberationSerif*.ttf $(LIBERATION_TARGET_DIR) +endef +endif + +define LIBERATION_INSTALL_TARGET_CMDS + mkdir -p $(LIBERATION_TARGET_DIR) + $(LIBERATION_INSTALL_MONO) + $(LIBERATION_INSTALL_SANS) + $(LIBERATION_INSTALL_SERIF) +endef + +$(eval $(generic-package)) diff --git a/package/libesmtp/Config.in b/package/libesmtp/Config.in new file mode 100644 index 00000000..db2dc8ec --- /dev/null +++ b/package/libesmtp/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LIBESMTP + bool "libesmtp" + depends on !BR2_STATIC_LIBS + help + Library for sending emails through SMTP. + + https://libesmtp.github.io + +comment "libesmtp needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/libesmtp/libesmtp.hash b/package/libesmtp/libesmtp.hash new file mode 100644 index 00000000..9e1ca22b --- /dev/null +++ b/package/libesmtp/libesmtp.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 d0a61a5c52d99fa7ce7d00ed0a07e341dbda67101dbed1ab0cdae3f37db4eb0b libesmtp-1.0.6.tar.bz2 +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING +sha256 f18a0811fa0e220ccbc42f661545e77f0388631e209585ed582a1c693029c6aa COPYING.LIB diff --git a/package/libesmtp/libesmtp.mk b/package/libesmtp/libesmtp.mk new file mode 100644 index 00000000..1f5cdec1 --- /dev/null +++ b/package/libesmtp/libesmtp.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# libesmtp +# +################################################################################ + +LIBESMTP_VERSION = 1.0.6 +LIBESMTP_SOURCE = libesmtp-$(LIBESMTP_VERSION).tar.bz2 +LIBESMTP_SITE = http://sources.buildroot.net/libesmtp +LIBESMTP_INSTALL_STAGING = YES +LIBESMTP_CONFIG_SCRIPTS = libesmtp-config +LIBESMTP_DEPENDENCIES = $(if $(BR2_PACKAGE_OPENSSL),openssl) +LIBESMTP_LICENSE = GPL-2.0+ (examples), LGPL-2.1+ (library) +LIBESMTP_LICENSE_FILES = COPYING COPYING.LIB +LIBESMTP_CPE_ID_VENDOR = libesmtp_project + +$(eval $(autotools-package)) diff --git a/package/libestr/Config.in b/package/libestr/Config.in new file mode 100644 index 00000000..b1ca2a54 --- /dev/null +++ b/package/libestr/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LIBESTR + bool "libestr" + help + Some essentials for string handling (and a bit more) + + http://libestr.adiscon.com/ diff --git a/package/libestr/libestr.hash b/package/libestr/libestr.hash new file mode 100644 index 00000000..6445d010 --- /dev/null +++ b/package/libestr/libestr.hash @@ -0,0 +1,5 @@ +# From http://libestr.adiscon.com/download/libestr-0-1-11/ +sha256 46632b2785ff4a231dcf241eeb0dcb5fc0c7d4da8ee49cf5687722cdbe8b2024 libestr-0.1.11.tar.gz + +# Hash for license file: +sha256 835b4793da5cbb8965fbd63905b55a4cb4310b7d1b882077d23066b08f901ff8 COPYING diff --git a/package/libestr/libestr.mk b/package/libestr/libestr.mk new file mode 100644 index 00000000..6ce22efa --- /dev/null +++ b/package/libestr/libestr.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libestr +# +################################################################################ + +LIBESTR_VERSION = 0.1.11 +LIBESTR_SITE = http://libestr.adiscon.com/files/download +LIBESTR_LICENSE = LGPL-2.1+ +LIBESTR_LICENSE_FILES = COPYING +LIBESTR_CPE_ID_VENDOR = adiscon +LIBESTR_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/libev/Config.in b/package/libev/Config.in new file mode 100644 index 00000000..71abe773 --- /dev/null +++ b/package/libev/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LIBEV + bool "libev" + help + Userspace library for handling asynchronous notifications + + http://software.schmorp.de/pkg/libev.html diff --git a/package/libev/libev.hash b/package/libev/libev.hash new file mode 100644 index 00000000..9ab341de --- /dev/null +++ b/package/libev/libev.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 2d5526fc8da4f072dd5c73e18fbb1666f5ef8ed78b73bba12e195cfdd810344e libev-4.27.tar.gz +sha256 c4dd1a5bc38b041a320b93c5d6c08f5c41a63f2ce718ee16cfcb757fad448199 LICENSE diff --git a/package/libev/libev.mk b/package/libev/libev.mk new file mode 100644 index 00000000..38b0530f --- /dev/null +++ b/package/libev/libev.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# libev +# +################################################################################ + +LIBEV_VERSION = 4.27 +LIBEV_SITE = http://dist.schmorp.de/libev/Attic +LIBEV_INSTALL_STAGING = YES +LIBEV_LICENSE = BSD-2-Clause or GPL-2.0+ +LIBEV_LICENSE_FILES = LICENSE + +# The 'compatibility' event.h header conflicts with libevent +# It's completely unnecessary for BR packages so remove it +define LIBEV_DISABLE_EVENT_H_INSTALL + $(SED) 's/ event.h//' $(@D)/Makefile.in +endef +LIBEV_POST_PATCH_HOOKS += LIBEV_DISABLE_EVENT_H_INSTALL + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libevdev/Config.in b/package/libevdev/Config.in new file mode 100644 index 00000000..91dd9db6 --- /dev/null +++ b/package/libevdev/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LIBEVDEV + bool "libevdev" + help + libevdev is a wrapper library for evdev devices + + http://freedesktop.org/wiki/Software/libevdev/ diff --git a/package/libevdev/libevdev.hash b/package/libevdev/libevdev.hash new file mode 100644 index 00000000..584a9941 --- /dev/null +++ b/package/libevdev/libevdev.hash @@ -0,0 +1,6 @@ +# From https://lists.freedesktop.org/archives/input-tools/2021-February/001557.html +sha256 63f4ea1489858a109080e0b40bd43e4e0903a1e12ea888d581db8c495747c2d0 libevdev-1.11.0.tar.xz +sha512 b3c6b4a1532c5142f3684b920dcdd497a5368aec516e8c389e2c8f9d1eaba16c907b2a7f2c82a3c3ff89bb4d0ae5503c736098c095f9f1bc98f0668e99bf639d libevdev-1.11.0.tar.xz + +# Hash for license files: +sha256 6f13de7ce28e4948ba95170e0723ee1254c1978ce1f127af82aeca597b567cb9 COPYING diff --git a/package/libevdev/libevdev.mk b/package/libevdev/libevdev.mk new file mode 100644 index 00000000..f6172809 --- /dev/null +++ b/package/libevdev/libevdev.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# libevdev +# +################################################################################ + +LIBEVDEV_VERSION = 1.11.0 +LIBEVDEV_SITE = http://www.freedesktop.org/software/libevdev +LIBEVDEV_SOURCE = libevdev-$(LIBEVDEV_VERSION).tar.xz +LIBEVDEV_LICENSE = MIT +LIBEVDEV_LICENSE_FILES = COPYING + +LIBEVDEV_DEPENDENCIES = $(BR2_PYTHON3_HOST_DEPENDENCY) + +LIBEVDEV_INSTALL_STAGING = YES + +LIBEVDEV_CONF_OPTS += \ + -Dtests=disabled \ + -Ddocumentation=disabled \ + -Dcoverity=false + +$(eval $(meson-package)) diff --git a/package/libevent/Config.in b/package/libevent/Config.in new file mode 100644 index 00000000..c32f29e5 --- /dev/null +++ b/package/libevent/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LIBEVENT + bool "libevent" + help + Userspace library for handling asynchronous notifications + + http://libevent.org diff --git a/package/libevent/libevent.hash b/package/libevent/libevent.hash new file mode 100644 index 00000000..77574e78 --- /dev/null +++ b/package/libevent/libevent.hash @@ -0,0 +1,4 @@ +# locally computed +sha1 cd55656a9b5bed630b08f05495230affb7996b21 libevent-2.1.12-stable.tar.gz +sha256 92e6de1be9ec176428fd2367677e61ceffc2ee1cb119035037a27d346b0403bb libevent-2.1.12-stable.tar.gz +sha256 ff02effc9b331edcdac387d198691bfa3e575e7d244ad10cb826aa51ef085670 LICENSE diff --git a/package/libevent/libevent.mk b/package/libevent/libevent.mk new file mode 100644 index 00000000..93ba88ca --- /dev/null +++ b/package/libevent/libevent.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# libevent +# +################################################################################ + +LIBEVENT_VERSION = 2.1.12 +LIBEVENT_SITE = https://github.com/libevent/libevent/releases/download/release-$(LIBEVENT_VERSION)-stable +LIBEVENT_SOURCE = libevent-$(LIBEVENT_VERSION)-stable.tar.gz +LIBEVENT_INSTALL_STAGING = YES +LIBEVENT_LICENSE = BSD-3-Clause, OpenBSD +LIBEVENT_LICENSE_FILES = LICENSE +LIBEVENT_CPE_ID_VENDOR = libevent_project +LIBEVENT_CONF_OPTS = \ + --disable-libevent-regress \ + --disable-samples +HOST_LIBEVENT_CONF_OPTS = \ + --disable-libevent-regress \ + --disable-samples \ + --disable-openssl + +define LIBEVENT_REMOVE_PYSCRIPT + rm $(TARGET_DIR)/usr/bin/event_rpcgen.py +endef + +# libevent installs a python script to target - get rid of it if we +# don't have python support enabled +ifneq ($(BR2_PACKAGE_PYTHON)$(BR2_PACKAGE_PYTHON3),y) +LIBEVENT_POST_INSTALL_TARGET_HOOKS += LIBEVENT_REMOVE_PYSCRIPT +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +LIBEVENT_DEPENDENCIES += host-pkgconf openssl +LIBEVENT_CONF_OPTS += --enable-openssl +else +LIBEVENT_CONF_OPTS += --disable-openssl +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libexif/0001-fixed-another-unsigned-integer-overflow.patch b/package/libexif/0001-fixed-another-unsigned-integer-overflow.patch new file mode 100644 index 00000000..77bdfe89 --- /dev/null +++ b/package/libexif/0001-fixed-another-unsigned-integer-overflow.patch @@ -0,0 +1,63 @@ +From ce03ad7ef4e8aeefce79192bf5b6f69fae396f0c Mon Sep 17 00:00:00 2001 +From: Marcus Meissner +Date: Mon, 8 Jun 2020 17:27:06 +0200 +Subject: [PATCH] fixed another unsigned integer overflow + +first fixed by google in android fork, +https://android.googlesource.com/platform/external/libexif/+/1e187b62682ffab5003c702657d6d725b4278f16%5E%21/#F0 + +(use a more generic overflow check method, also check second overflow instance.) + +https://security-tracker.debian.org/tracker/CVE-2020-0198 + +Downloaded from upstream commit: +https://github.com/libexif/libexif/commit/ce03ad7ef4e8aeefce79192bf5b6f69fae396f0c + +Signed-off-by: Bernd Kuhls +--- + libexif/exif-data.c | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +diff --git a/libexif/exif-data.c b/libexif/exif-data.c +index 8b280d3..b495726 100644 +--- a/libexif/exif-data.c ++++ b/libexif/exif-data.c +@@ -47,6 +47,8 @@ + #undef JPEG_MARKER_APP1 + #define JPEG_MARKER_APP1 0xe1 + ++#define CHECKOVERFLOW(offset,datasize,structsize) (( offset >= datasize) || (structsize > datasize) || (offset > datasize - structsize )) ++ + static const unsigned char ExifHeader[] = {0x45, 0x78, 0x69, 0x66, 0x00, 0x00}; + + struct _ExifDataPrivate +@@ -327,7 +329,7 @@ exif_data_load_data_thumbnail (ExifData *data, const unsigned char *d, + exif_log (data->priv->log, EXIF_LOG_CODE_DEBUG, "ExifData", "Bogus thumbnail offset (%u).", o); + return; + } +- if (s > ds - o) { ++ if (CHECKOVERFLOW(o,ds,s)) { + exif_log (data->priv->log, EXIF_LOG_CODE_DEBUG, "ExifData", "Bogus thumbnail size (%u), max would be %u.", s, ds-o); + return; + } +@@ -420,9 +422,9 @@ exif_data_load_data_content (ExifData *data, ExifIfd ifd, + } + + /* Read the number of entries */ +- if ((offset + 2 < offset) || (offset + 2 < 2) || (offset + 2 > ds)) { ++ if (CHECKOVERFLOW(offset, ds, 2)) { + exif_log (data->priv->log, EXIF_LOG_CODE_CORRUPT_DATA, "ExifData", +- "Tag data past end of buffer (%u > %u)", offset+2, ds); ++ "Tag data past end of buffer (%u+2 > %u)", offset, ds); + return; + } + n = exif_get_short (d + offset, data->priv->order); +@@ -431,7 +433,7 @@ exif_data_load_data_content (ExifData *data, ExifIfd ifd, + offset += 2; + + /* Check if we have enough data. */ +- if (offset + 12 * n > ds) { ++ if (CHECKOVERFLOW(offset, ds, 12*n)) { + n = (ds - offset) / 12; + exif_log (data->priv->log, EXIF_LOG_CODE_DEBUG, "ExifData", + "Short data; only loading %hu entries...", n); diff --git a/package/libexif/0002-fixed-a-incorrect-overflow-check.patch b/package/libexif/0002-fixed-a-incorrect-overflow-check.patch new file mode 100644 index 00000000..1946f782 --- /dev/null +++ b/package/libexif/0002-fixed-a-incorrect-overflow-check.patch @@ -0,0 +1,36 @@ +From 9266d14b5ca4e29b970fa03272318e5f99386e06 Mon Sep 17 00:00:00 2001 +From: Marcus Meissner +Date: Thu, 5 Nov 2020 09:50:08 +0100 +Subject: [PATCH] fixed a incorrect overflow check that could be optimized + away. + +inspired by: +https://android.googlesource.com/platform/external/libexif/+/8e7345f3bc0bad06ac369d6cbc1124c8ceaf7d4b + +https://source.android.com/security/bulletin/2020-11-01 + +CVE-2020-0452 + +Downloaded from upstream commit, rebased for 0.6.22: +https://github.com/libexif/libexif/commit/9266d14b5ca4e29b970fa03272318e5f99386e06 + +Signed-off-by: Bernd Kuhls +--- + libexif/exif-entry.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/libexif/exif-entry.c b/libexif/exif-entry.c +index 3fc0ff9..4b866ce 100644 +--- a/libexif/exif-entry.c ++++ b/libexif/exif-entry.c +@@ -1371,8 +1371,8 @@ exif_entry_get_value (ExifEntry *e, char *val, unsigned int maxlen) + { + unsigned char *utf16; + +- /* Sanity check the size to prevent overflow */ +- if (e->size+sizeof(uint16_t)+1 < e->size) break; ++ /* Sanity check the size to prevent overflow. Note EXIF files are 64kb at most. */ ++ if (e->size >= 65536 - sizeof(uint16_t)*2) break; + + /* The tag may not be U+0000-terminated , so make a local + U+0000-terminated copy before converting it */ diff --git a/package/libexif/Config.in b/package/libexif/Config.in new file mode 100644 index 00000000..8064c2e9 --- /dev/null +++ b/package/libexif/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LIBEXIF + bool "libexif" + help + Most digital cameras produce EXIF files, which are JPEG + files with extra tags that contain information about the + image. The EXIF library allows you to parse an EXIF file + and read the data from those tags. + + https://libexif.github.io diff --git a/package/libexif/libexif.hash b/package/libexif/libexif.hash new file mode 100644 index 00000000..1a2157b3 --- /dev/null +++ b/package/libexif/libexif.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 5048f1c8fc509cc636c2f97f4b40c293338b6041a5652082d5ee2cf54b530c56 libexif-0.6.22.tar.xz +sha256 36b6d3fa47916943fd5fec313c584784946047ec1337a78b440e5992cb595f89 COPYING diff --git a/package/libexif/libexif.mk b/package/libexif/libexif.mk new file mode 100644 index 00000000..9a25e90d --- /dev/null +++ b/package/libexif/libexif.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# libexif +# +################################################################################ + +LIBEXIF_VERSION = 0.6.22 +LIBEXIF_SOURCE = libexif-$(LIBEXIF_VERSION).tar.xz +LIBEXIF_SITE = \ + https://github.com/libexif/libexif/releases/download/libexif-$(subst .,_,$(LIBEXIF_VERSION))-release +LIBEXIF_INSTALL_STAGING = YES +LIBEXIF_DEPENDENCIES = host-pkgconf +LIBEXIF_LICENSE = LGPL-2.1+ +LIBEXIF_LICENSE_FILES = COPYING +LIBEXIF_CPE_ID_VENDOR = libexif_project +# 0001-fixed-another-unsigned-integer-overflow.patch +LIBEXIF_IGNORE_CVES += CVE-2020-0198 +# 0002-fixed-a-incorrect-overflow-check.patch +LIBEXIF_IGNORE_CVES += CVE-2020-0452 + +$(eval $(autotools-package)) diff --git a/package/libfastjson/Config.in b/package/libfastjson/Config.in new file mode 100644 index 00000000..a3a7c809 --- /dev/null +++ b/package/libfastjson/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_LIBFASTJSON + bool "libfastjson" + # uses the __sync_*_4 intrisics, or pthreads to emulate atomicity + depends on BR2_TOOLCHAIN_HAS_SYNC_4 || BR2_TOOLCHAIN_HAS_THREADS + help + Libfastjson - A fast json library for C + + Libfastjson is a fork from json-c. The aim of this project + is not to provide a slightly modified clone of json-c. + Its aim is to provide: + + - a small library with essential json handling functions + - sufficiently good json support (not 100% standards + compliant) + - be very fast in processing + + https://github.com/rsyslog/libfastjson/ diff --git a/package/libfastjson/libfastjson.hash b/package/libfastjson/libfastjson.hash new file mode 100644 index 00000000..218a738b --- /dev/null +++ b/package/libfastjson/libfastjson.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 881f954633aa76931e4c756ece0bda6fd8a673c6e66955a3db3b2bb9d6bbff72 libfastjson-0.99.9.tar.gz +sha256 b29370bbfa98816e1fca0901f18149d920736771bfd68b4ee0eb00c78b38d245 COPYING diff --git a/package/libfastjson/libfastjson.mk b/package/libfastjson/libfastjson.mk new file mode 100644 index 00000000..7ab978dc --- /dev/null +++ b/package/libfastjson/libfastjson.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# libfastjson +# +################################################################################ + +LIBFASTJSON_VERSION = 0.99.9 +LIBFASTJSON_SITE = $(call github,rsyslog,libfastjson,v$(LIBFASTJSON_VERSION)) +LIBFASTJSON_INSTALL_STAGING = YES +LIBFASTJSON_CONF_ENV = ac_cv_prog_cc_c99='-std=gnu99' +# From git +LIBFASTJSON_AUTORECONF = YES +LIBFASTJSON_LICENSE = MIT +LIBFASTJSON_LICENSE_FILES = COPYING +LIBFASTJSON_CPE_ID_VENDOR = rsyslog + +$(eval $(autotools-package)) diff --git a/package/libfcgi/0001-link-against-math.patch b/package/libfcgi/0001-link-against-math.patch new file mode 100644 index 00000000..efba6712 --- /dev/null +++ b/package/libfcgi/0001-link-against-math.patch @@ -0,0 +1,18 @@ +Link libfcgi against the math library. + +Signed-off-by: Thomas Claveirole +[Louis: rebase on top of 2.4.2] +Signed-off-by: Louis Rannou + +Index: b/libfcgi/Makefile.am +=================================================================== +--- a/libfcgi/Makefile.am ++++ b/libfcgi/Makefile.am +@@ -18,4 +18,5 @@ + os_@SYSTEM@.c + libfcgi_la_CC = @PTHREAD_CC@ + libfcgi_la_CFLAGS = @PTHREAD_CFLAGS@ ++libfcgi_la_LIBADD = -lm + libfcgi_la_LDFLAGS = @EXTRA_LIBS@ -no-undefined + + libfcgi___la_SOURCES = $(INCLUDE_FILES) \ diff --git a/package/libfcgi/0002-disable-examples.patch b/package/libfcgi/0002-disable-examples.patch new file mode 100644 index 00000000..4a9916f0 --- /dev/null +++ b/package/libfcgi/0002-disable-examples.patch @@ -0,0 +1,21 @@ +Common subdirectories: libfcgi-2.4.0.orig/cgi-fcgi and libfcgi-2.4.0/cgi-fcgi +Common subdirectories: libfcgi-2.4.0.orig/doc and libfcgi-2.4.0/doc +Common subdirectories: libfcgi-2.4.0.orig/examples and libfcgi-2.4.0/examples +Common subdirectories: libfcgi-2.4.0.orig/images and libfcgi-2.4.0/images +Common subdirectories: libfcgi-2.4.0.orig/include and libfcgi-2.4.0/include +Common subdirectories: libfcgi-2.4.0.orig/java and libfcgi-2.4.0/java +Common subdirectories: libfcgi-2.4.0.orig/libfcgi and libfcgi-2.4.0/libfcgi +diff -du libfcgi-2.4.0.orig/Makefile.am libfcgi-2.4.0/Makefile.am +--- libfcgi-2.4.0.orig/Makefile.am 2001-12-22 14:05:39.000000000 +0100 ++++ libfcgi-2.4.0/Makefile.am 2014-07-19 16:56:21.935216540 +0200 +@@ -4,7 +4,7 @@ + # $Id: Makefile.am,v 1.7 2001/12/22 13:05:39 robs Exp $ + # + +-SUBDIRS = libfcgi cgi-fcgi examples include ++SUBDIRS = libfcgi cgi-fcgi include + + include_HEADERS = fcgi_config.h + +Common subdirectories: libfcgi-2.4.0.orig/perl and libfcgi-2.4.0/perl +Common subdirectories: libfcgi-2.4.0.orig/Win32 and libfcgi-2.4.0/Win32 diff --git a/package/libfcgi/Config.in b/package/libfcgi/Config.in new file mode 100644 index 00000000..aceea3e8 --- /dev/null +++ b/package/libfcgi/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBFCGI + bool "libfcgi" + depends on BR2_USE_MMU # fork() + help + FCGI, a fastcgi developer library for C/C++ + + https://fastcgi-archives.github.io/ diff --git a/package/libfcgi/libfcgi.hash b/package/libfcgi/libfcgi.hash new file mode 100644 index 00000000..11046123 --- /dev/null +++ b/package/libfcgi/libfcgi.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 1fe83501edfc3a7ec96bb1e69db3fd5ea1730135bd73ab152186fd0b437013bc libfcgi-2.4.2.tar.gz +sha256 f0a8fe4513a43e8eebb24cdcf9d2e7efc52e4d8259178c6d76d3d84418397d81 LICENSE.TERMS diff --git a/package/libfcgi/libfcgi.mk b/package/libfcgi/libfcgi.mk new file mode 100644 index 00000000..ee61c22c --- /dev/null +++ b/package/libfcgi/libfcgi.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libfcgi +# +################################################################################ + +LIBFCGI_VERSION = 2.4.2 +LIBFCGI_SITE = $(call github,FastCGI-Archives,fcgi2,$(LIBFCGI_VERSION)) +LIBFCGI_LICENSE = OML +LIBFCGI_LICENSE_FILES = LICENSE.TERMS +LIBFCGI_CPE_ID_VENDOR = fastcgi +LIBFCGI_CPE_ID_PRODUCT = fcgi +LIBFCGI_INSTALL_STAGING = YES +LIBFCGI_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/libffi/0001-Fix-installation-location-of-libffi.patch b/package/libffi/0001-Fix-installation-location-of-libffi.patch new file mode 100644 index 00000000..6ac91237 --- /dev/null +++ b/package/libffi/0001-Fix-installation-location-of-libffi.patch @@ -0,0 +1,55 @@ +From 580f46a7bc6e9fea3a2227b5268cc3aed1d60e3b Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Thu, 7 Feb 2013 22:26:56 +0100 +Subject: [PATCH] Fix installation location of libffi +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The libffi is currently declared as toolexeclib_LTLIBRARIES. In many +cases, toolexeclib libraries will be installed in /usr/lib, so it +doesn't make any difference. + +However, with multilib toolchains, they get installed in a +subdirectory of /usr/lib/. For example, with a Sourcery CodeBench +PowerPC toolchain, if the e500mc multilib variant is used, the libffi +library gets installed in /usr/lib/te500mc/. This is due to the +following code in the configure script: + + multi_os_directory=`$CC -print-multi-os-directory` + case $multi_os_directory in + .) ;; # Avoid trailing /. + *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;; + esac + +Once the library is installed in /usr/lib/te500mc/, nothing works +because this installation location is inconsistent with the +installation location declared in libffi.pc. + +So, instead of using this bizarre toolexeclib_LTLIBRARIES, simply use +the more standard lib_LTLIBRARIES, which ensures that the libffi +library is always installed in /usr/lib. + +Signed-off-by: Thomas Petazzoni +[unfuzz for 3.2.1] +Signed-off-by: Jörg Krause +--- + Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index 0e40451..309474c 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -104,7 +104,7 @@ FLAGS_TO_PASS = $(AM_MAKEFLAGS) + + MAKEOVERRIDES= + +-toolexeclib_LTLIBRARIES = libffi.la ++lib_LTLIBRARIES = libffi.la + noinst_LTLIBRARIES = libffi_convenience.la + + libffi_la_SOURCES = src/prep_cif.c src/types.c \ +-- +2.5.3 + diff --git a/package/libffi/0002-Fix-use-of-compact-eh-frames-on-MIPS.patch b/package/libffi/0002-Fix-use-of-compact-eh-frames-on-MIPS.patch new file mode 100644 index 00000000..c19e395f --- /dev/null +++ b/package/libffi/0002-Fix-use-of-compact-eh-frames-on-MIPS.patch @@ -0,0 +1,45 @@ +From 31b6b6bc14197cd4183bdbd311fddeb36b5ae100 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=B6rg=20Krause?= +Date: Sat, 19 Sep 2015 22:53:29 +0200 +Subject: [PATCH] Fix use of compact eh frames on MIPS +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Newer MIPS toolchains use a different (compact) eh_frame format. +libffi don't like them, so we have to switch to the older format. + +This patch add -mno-compact-eh to CFLAGS when compiling for +Mips and compiler support it. + +Signed-off-by: Jérôme Pouiller +[unfuzz for 3.2.1] +Signed-off-by: Jörg Krause +--- + configure.ac | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/configure.ac b/configure.ac +index a7bf5ee..36cd0d4 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -469,6 +469,16 @@ esac + AM_CONDITIONAL(FFI_EXEC_TRAMPOLINE_TABLE, test x$FFI_EXEC_TRAMPOLINE_TABLE = x1) + AC_SUBST(FFI_EXEC_TRAMPOLINE_TABLE) + ++if test x$TARGET = xMIPS; then ++ save_CFLAGS="$CFLAGS" ++ CFLAGS=-mno-compact-eh ++ AC_MSG_CHECKING([whether the C compiler needs -mno-compact-eh]) ++ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], ++ [AC_MSG_RESULT([yes])]; [save_CFLAGS="$save_CFLAGS -mno-compact-eh"], ++ [AC_MSG_RESULT([no])]) ++ CFLAGS="$save_CFLAGS" ++fi ++ + if test x$TARGET = xX86_64; then + AC_CACHE_CHECK([toolchain supports unwind section type], + libffi_cv_as_x86_64_unwind_section_type, [ +-- +2.5.3 + diff --git a/package/libffi/0003-libffi-enable-hardfloat-in-the-MIPS-assembly-code.patch b/package/libffi/0003-libffi-enable-hardfloat-in-the-MIPS-assembly-code.patch new file mode 100644 index 00000000..168972a8 --- /dev/null +++ b/package/libffi/0003-libffi-enable-hardfloat-in-the-MIPS-assembly-code.patch @@ -0,0 +1,44 @@ +From 48bc37fabbc685b1e3293055bd33ca66c619305e Mon Sep 17 00:00:00 2001 +From: Vicente Olivert Riera +Date: Wed, 13 Jan 2016 14:49:59 +0000 +Subject: [PATCH] libffi: enable hardfloat in the MIPS assembly code + +This way it will be possible to build it for soft-float. This is only a +temporary fix. The package needs to be fixed properly. + +Signed-off-by: Vicente Olivert Riera +[Update for 3.3-rc0] +Signed-off-by: Fabrice Fontaine +--- + src/mips/n32.S | 1 + + src/mips/o32.S | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/src/mips/n32.S b/src/mips/n32.S +index c6985d3..dc842d5 100644 +--- a/src/mips/n32.S ++++ b/src/mips/n32.S +@@ -44,6 +44,7 @@ + #endif + #if !defined(__mips_isa_rev) || (__mips_isa_rev<6) + .set mips4 + #endif ++ .set hardfloat + .text + .align 2 + .globl ffi_call_N32 +diff --git a/src/mips/o32.S b/src/mips/o32.S +index eb27981..b653daf 100644 +--- a/src/mips/o32.S ++++ b/src/mips/o32.S +@@ -42,6 +42,7 @@ + #define RA_OFF (SIZEOF_FRAME - 1 * FFI_SIZEOF_ARG) + + .abicalls ++ .set hardfloat + .text + .align 2 + .globl ffi_call_O32 +-- +2.4.10 + diff --git a/package/libffi/0004-ffi_powerpc.h-fix-build-failure-with-powerpc7.patch b/package/libffi/0004-ffi_powerpc.h-fix-build-failure-with-powerpc7.patch new file mode 100644 index 00000000..7ee1f102 --- /dev/null +++ b/package/libffi/0004-ffi_powerpc.h-fix-build-failure-with-powerpc7.patch @@ -0,0 +1,51 @@ +From f9d8f11d60cdc656a801e0d8116101beb22e117b Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 24 Nov 2019 09:52:01 +0100 +Subject: [PATCH] ffi_powerpc.h: fix build failure with powerpc7 + +Sicne commit 73dd43afc8a447ba98ea02e9aad4c6898dc77fb0, build on powerpc7 +fails on: + +In file included from ../src/powerpc/ffi.c:33:0: +../src/powerpc/ffi_powerpc.h:61:9: error: '_Float128' is not supported on this target + typedef _Float128 float128; + ^~~~~~~~~ + +Fix this build failure by checking for __HAVE_FLOAT128 before using +_Float128, as _Float128 is enabled only on specific conditions, see +output/host/powerpc64-buildroot-linux-gnu/sysroot/usr/include/bits/floatn.h: + + /* Defined to 1 if the current compiler invocation provides a + floating-point type with the IEEE 754 binary128 format, and this glibc + includes corresponding *f128 interfaces for it. */ + #if defined _ARCH_PWR8 && defined __LITTLE_ENDIAN__ && (_CALL_ELF == 2) \ + && defined __FLOAT128__ && !defined __NO_LONG_DOUBLE_MATH + # define __HAVE_FLOAT128 1 + #else + # define __HAVE_FLOAT128 0 + #endif + +Fixes: + - http://autobuild.buildroot.org/results/5c9dd8fb3b6a128882b6250f197c80232d8a3b53 + +Signed-off-by: Fabrice Fontaine +--- + src/powerpc/ffi_powerpc.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/powerpc/ffi_powerpc.h b/src/powerpc/ffi_powerpc.h +index 5ee2a70..a5a786b 100644 +--- a/src/powerpc/ffi_powerpc.h ++++ b/src/powerpc/ffi_powerpc.h +@@ -57,7 +57,7 @@ typedef union + double d; + } ffi_dblfl; + +-#if defined(__FLOAT128_TYPE__) ++#if defined(__FLOAT128_TYPE__) && defined(__HAVE_FLOAT128) + typedef _Float128 float128; + #elif defined(__FLOAT128__) + typedef __float128 float128; +-- +2.24.0 + diff --git a/package/libffi/0005-powerpc-fix-build-failure-on-power7-and-older.patch b/package/libffi/0005-powerpc-fix-build-failure-on-power7-and-older.patch new file mode 100644 index 00000000..d0b91dda --- /dev/null +++ b/package/libffi/0005-powerpc-fix-build-failure-on-power7-and-older.patch @@ -0,0 +1,39 @@ +From 01a75ed76ea7e57f1b7a5c183e2b1e890e6aa0fd Mon Sep 17 00:00:00 2001 +From: Sergei Trofimovich +Date: Thu, 28 Nov 2019 12:42:41 +0000 +Subject: [PATCH] powerpc: fix build failure on power7 and older (#532) + +Build failure looks as: +``` +libtool: compile: powerpc-unknown-linux-gnu-gcc \ + -O2 -mcpu=powerpc -mtune=powerpc -pipe ... -c src/powerpc/ffi.c ... +In file included from src/powerpc/ffi.c:33: +src/powerpc/ffi_powerpc.h:65:9: error: '__int128' is not supported on this target + 65 | typedef __int128 float128; + | ^~~~~~~~ +``` + +The fix avoids using __int128 in favour of aligned char[16]. + +Closes: https://github.com/libffi/libffi/issues/531 +Signed-off-by: Sergei Trofimovich +[Retrieved from: +https://github.com/libffi/libffi/commit/01a75ed76ea7e57f1b7a5c183e2b1e890e6aa0fd] +Signed-off-by: Fabrice Fontaine +--- + src/powerpc/ffi_powerpc.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/powerpc/ffi_powerpc.h b/src/powerpc/ffi_powerpc.h +index 5ee2a709..8e2f2f0e 100644 +--- a/src/powerpc/ffi_powerpc.h ++++ b/src/powerpc/ffi_powerpc.h +@@ -62,7 +62,7 @@ typedef _Float128 float128; + #elif defined(__FLOAT128__) + typedef __float128 float128; + #else +-typedef __int128 float128; ++typedef char float128[16] __attribute__((aligned(16))); + #endif + + void FFI_HIDDEN ffi_closure_SYSV (void); diff --git a/package/libffi/0006-Address-platforms-with-no-__int128.patch b/package/libffi/0006-Address-platforms-with-no-__int128.patch new file mode 100644 index 00000000..012c6f0d --- /dev/null +++ b/package/libffi/0006-Address-platforms-with-no-__int128.patch @@ -0,0 +1,28 @@ +From 6663047f56c2932a6b10a790f4ac6666dd181326 Mon Sep 17 00:00:00 2001 +From: Anthony Green +Date: Fri, 29 Nov 2019 07:00:35 -0500 +Subject: [PATCH] Address platforms with no __int128. + +[Retrieved from: +https://github.com/libffi/libffi/commit/6663047f56c2932a6b10a790f4ac6666dd181326] +Signed-off-by: Fabrice Fontaine +--- + src/powerpc/ffi_linux64.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/powerpc/ffi_linux64.c b/src/powerpc/ffi_linux64.c +index de0d0337..73647701 100644 +--- a/src/powerpc/ffi_linux64.c ++++ b/src/powerpc/ffi_linux64.c +@@ -547,9 +547,9 @@ ffi_prep_args64 (extended_cif *ecif, unsigned long *const stack) + if (next_arg.ul == gpr_end.ul) + next_arg.ul = rest.ul; + if (vecarg_count < NUM_VEC_ARG_REGISTERS64 && i < nfixedargs) +- *vec_base.f128++ = **p_argv.f128; ++ memcpy (vec_base.f128++, *p_argv.f128, sizeof (float128)); + else +- *next_arg.f128 = **p_argv.f128; ++ memcpy (next_arg.f128, *p_argv.f128, sizeof (float128)); + if (++next_arg.f128 == gpr_end.f128) + next_arg.f128 = rest.f128; + vecarg_count++; diff --git a/package/libffi/0007-powerpc64-Use-memcpy-to-help-platforms-with-no-__int128.patch b/package/libffi/0007-powerpc64-Use-memcpy-to-help-platforms-with-no-__int128.patch new file mode 100644 index 00000000..53036707 --- /dev/null +++ b/package/libffi/0007-powerpc64-Use-memcpy-to-help-platforms-with-no-__int128.patch @@ -0,0 +1,42 @@ +From e50b9ef8b910fa642ef158f6642e60d54d7ad740 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sat, 7 Dec 2019 02:34:14 -0800 +Subject: [PATCH] powerpc64: Use memcpy to help platforms with no __int128. + (#534) + +Signed-off-by: Khem Raj +[Retrieved from: +https://github.com/libffi/libffi/commit/e50b9ef8b910fa642ef158f6642e60d54d7ad740] +Signed-off-by: Fabrice Fontaine +--- + src/powerpc/ffi_linux64.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/src/powerpc/ffi_linux64.c b/src/powerpc/ffi_linux64.c +index 73647701..4d50878e 100644 +--- a/src/powerpc/ffi_linux64.c ++++ b/src/powerpc/ffi_linux64.c +@@ -680,9 +680,9 @@ ffi_prep_args64 (extended_cif *ecif, unsigned long *const stack) + { + if (vecarg_count < NUM_VEC_ARG_REGISTERS64 + && i < nfixedargs) +- *vec_base.f128++ = *arg.f128++; ++ memcpy (vec_base.f128++, arg.f128, sizeof (float128)); + else +- *next_arg.f128 = *arg.f128++; ++ memcpy (next_arg.f128, arg.f128++, sizeof (float128)); + if (++next_arg.f128 == gpr_end.f128) + next_arg.f128 = rest.f128; + vecarg_count++; +@@ -986,9 +986,9 @@ ffi_closure_helper_LINUX64 (ffi_cif *cif, + do + { + if (pvec < end_pvec && i < nfixedargs) +- *to.f128 = *pvec++; ++ memcpy (to.f128, pvec++, sizeof (float128)); + else +- *to.f128 = *from.f128; ++ memcpy (to.f128, from.f128, sizeof (float128)); + to.f128++; + from.f128++; + } diff --git a/package/libffi/0008-loongarch-support.patch b/package/libffi/0008-loongarch-support.patch new file mode 100644 index 00000000..d2c07777 --- /dev/null +++ b/package/libffi/0008-loongarch-support.patch @@ -0,0 +1,4002 @@ +diff -Nprua libffi-3.3-bak/config.guess libffi-3.3/config.guess +--- libffi-3.3-bak/config.guess 2019-11-23 23:24:58.000000000 +0800 ++++ libffi-3.3/config.guess 2022-10-10 15:55:47.206208677 +0800 +@@ -982,6 +982,9 @@ EOF + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; ++ loongarch32:Linux:*:* | loongarch64:Linux:*:*) ++ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" ++ exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +diff -Nprua libffi-3.3-bak/config.sub libffi-3.3/config.sub +--- libffi-3.3-bak/config.sub 2019-11-23 23:24:58.000000000 +0800 ++++ libffi-3.3/config.sub 2022-10-10 15:55:47.206208677 +0800 +@@ -268,6 +268,7 @@ case $basic_machine in + | k1om \ + | le32 | le64 \ + | lm32 \ ++ | loongarch32 | loongarch64 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ +diff -Nprua libffi-3.3-bak/configure.host libffi-3.3/configure.host +--- libffi-3.3-bak/configure.host 2019-11-23 23:24:58.000000000 +0800 ++++ libffi-3.3/configure.host 2022-10-10 15:55:47.206208677 +0800 +@@ -134,6 +134,11 @@ case "${host}" in + SOURCES="ffi.c unix.S" + ;; + ++ loongarch64-*-*) ++ TARGET=LOONGARCH; TARGETDIR=loongarch ++ SOURCES="ffi.c sysv.S" ++ ;; ++ + m32r*-*-*) + TARGET=M32R; TARGETDIR=m32r + SOURCES="ffi.c sysv.S" +diff -Nprua libffi-3.3-bak/Makefile.am libffi-3.3/Makefile.am +--- libffi-3.3-bak/Makefile.am 2019-11-23 23:24:58.000000000 +0800 ++++ libffi-3.3/Makefile.am 2022-10-10 15:56:50.905545311 +0800 +@@ -54,6 +54,7 @@ noinst_HEADERS = \ + src/cris/ffitarget.h \ + src/frv/ffitarget.h \ + src/ia64/ffitarget.h src/ia64/ia64_flags.h \ ++ src/loongarch/ffitarget.h \ + src/m32r/ffitarget.h \ + src/m68k/ffitarget.h \ + src/m88k/ffitarget.h \ +@@ -82,7 +83,8 @@ EXTRA_libffi_la_SOURCES = src/aarch64/ff + src/arm/sysv.S src/arm/ffi.c src/arm/sysv_msvc_arm32.S \ + src/avr32/ffi.c src/avr32/sysv.S src/bfin/ffi.c \ + src/bfin/sysv.S src/cris/ffi.c src/cris/sysv.S src/frv/ffi.c \ +- src/frv/eabi.S src/ia64/ffi.c src/ia64/unix.S src/m32r/ffi.c \ ++ src/frv/eabi.S src/ia64/ffi.c src/ia64/unix.S src/loongarch/ffi.c \ ++ src/loongarch/sysv.S src/m32r/ffi.c \ + src/m32r/sysv.S src/m68k/ffi.c src/m68k/sysv.S src/m88k/ffi.c \ + src/m88k/obsd.S src/metag/ffi.c src/metag/sysv.S \ + src/microblaze/ffi.c src/microblaze/sysv.S src/mips/ffi.c \ +diff -Nprua libffi-3.3-bak/src/loongarch/ffi.c libffi-3.3/src/loongarch/ffi.c +--- libffi-3.3-bak/src/loongarch/ffi.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/src/loongarch/ffi.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,490 @@ ++/* ----------------------------------------------------------------------- ++ ffi.c - Copyright (c) 2015 Michael Knyszek ++ 2015 Andrew Waterman ++ 2018 Stef O'Rear ++ Based on MIPS N32/64 port ++ ++ LOONGARCH Foreign Function Interface ++ ++ 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. ++ ----------------------------------------------------------------------- */ ++ ++#include ++#include ++ ++#include ++#include ++ ++#define ABI_FLEN 64 ++#define ABI_FLOAT double ++ ++#define NARGREG 8 ++#define STKALIGN 16 ++#define MAXCOPYARG (2 * sizeof(double)) ++ ++typedef struct call_context ++{ ++ ABI_FLOAT fa[8]; ++ size_t a[8]; ++ /* used by the assembly code to in-place construct its own stack frame */ ++ char frame[16]; ++} call_context; ++ ++typedef struct call_builder ++{ ++ call_context *aregs; ++ int used_integer; ++ int used_float; ++ size_t *used_stack; ++} call_builder; ++ ++/* integer (not pointer) less than ABI XLEN */ ++/* FFI_TYPE_INT does not appear to be used */ ++#if __SIZEOF_POINTER__ == 8 ++#define IS_INT(type) ((type) >= FFI_TYPE_UINT8 && (type) <= FFI_TYPE_SINT64) ++#else ++#define IS_INT(type) ((type) >= FFI_TYPE_UINT8 && (type) <= FFI_TYPE_SINT32) ++#endif ++ ++#if ABI_FLEN ++typedef struct { ++ char as_elements, type1, offset2, type2; ++} float_struct_info; ++ ++#if ABI_FLEN >= 64 ++#define IS_FLOAT(type) ((type) >= FFI_TYPE_FLOAT && (type) <= FFI_TYPE_DOUBLE) ++#else ++#define IS_FLOAT(type) ((type) == FFI_TYPE_FLOAT) ++#endif ++ ++static ffi_type **flatten_struct(ffi_type *in, ffi_type **out, ffi_type **out_end) { ++ int i; ++ if (out == out_end) return out; ++ if (in->type != FFI_TYPE_STRUCT) { ++ *(out++) = in; ++ } else { ++ for (i = 0; in->elements[i]; i++) ++ out = flatten_struct(in->elements[i], out, out_end); ++ } ++ return out; ++} ++ ++/* Structs with at most two fields after flattening, one of which is of ++ floating point type, are passed in multiple registers if sufficient ++ registers are available. */ ++static float_struct_info struct_passed_as_elements(call_builder *cb, ffi_type *top) { ++ float_struct_info ret = {0, 0, 0, 0}; ++ ffi_type *fields[3]; ++ int num_floats, num_ints; ++ int num_fields = flatten_struct(top, fields, fields + 3) - fields; ++ ++ if (num_fields == 1) { ++ if (IS_FLOAT(fields[0]->type)) { ++ ret.as_elements = 1; ++ ret.type1 = fields[0]->type; ++ } ++ } else if (num_fields == 2) { ++ num_floats = IS_FLOAT(fields[0]->type) + IS_FLOAT(fields[1]->type); ++ num_ints = IS_INT(fields[0]->type) + IS_INT(fields[1]->type); ++ if (num_floats == 0 || num_floats + num_ints != 2) ++ return ret; ++ if (cb->used_float + num_floats > NARGREG || cb->used_integer + (2 - num_floats) > NARGREG) ++ return ret; ++ if (!IS_FLOAT(fields[0]->type) && !IS_FLOAT(fields[1]->type)) ++ return ret; ++ ++ ret.type1 = fields[0]->type; ++ ret.type2 = fields[1]->type; ++ ret.offset2 = FFI_ALIGN(fields[0]->size, fields[1]->alignment); ++ ret.as_elements = 1; ++ } ++ ++ return ret; ++} ++#endif ++ ++/* allocates a single register, float register, or XLEN-sized stack slot to a datum */ ++static void marshal_atom(call_builder *cb, int type, void *data) { ++ size_t value = 0; ++ switch (type) { ++ case FFI_TYPE_UINT8: value = *(uint8_t *)data; break; ++ case FFI_TYPE_SINT8: value = *(int8_t *)data; break; ++ case FFI_TYPE_UINT16: value = *(uint16_t *)data; break; ++ case FFI_TYPE_SINT16: value = *(int16_t *)data; break; ++ /* 32-bit quantities are always sign-extended in the ABI */ ++ case FFI_TYPE_UINT32: value = *(int32_t *)data; break; ++ case FFI_TYPE_SINT32: value = *(int32_t *)data; break; ++#if __SIZEOF_POINTER__ == 8 ++ case FFI_TYPE_UINT64: value = *(uint64_t *)data; break; ++ case FFI_TYPE_SINT64: value = *(int64_t *)data; break; ++#endif ++ case FFI_TYPE_POINTER: value = *(size_t *)data; break; ++ ++ /* float values may be recoded in an implementation-defined way ++ by hardware conforming to 2.1 or earlier, so use asm to ++ reinterpret floats as doubles */ ++#if ABI_FLEN >= 32 ++ case FFI_TYPE_FLOAT: ++ asm("" : "=f"(cb->aregs->fa[cb->used_float++]) : "0"(*(float *)data)); ++ return; ++#endif ++#if ABI_FLEN >= 64 ++ case FFI_TYPE_DOUBLE: ++ asm("" : "=f"(cb->aregs->fa[cb->used_float++]) : "0"(*(double *)data)); ++ return; ++#endif ++ default: FFI_ASSERT(0); break; ++ } ++ ++ if (cb->used_integer == NARGREG) { ++ *cb->used_stack++ = value; ++ } else { ++ cb->aregs->a[cb->used_integer++] = value; ++ } ++} ++ ++static void unmarshal_atom(call_builder *cb, int type, void *data) { ++ size_t value; ++ switch (type) { ++#if ABI_FLEN >= 32 ++ case FFI_TYPE_FLOAT: ++ asm("" : "=f"(*(float *)data) : "0"(cb->aregs->fa[cb->used_float++])); ++ return; ++#endif ++#if ABI_FLEN >= 64 ++ case FFI_TYPE_DOUBLE: ++ asm("" : "=f"(*(double *)data) : "0"(cb->aregs->fa[cb->used_float++])); ++ return; ++#endif ++ } ++ ++ if (cb->used_integer == NARGREG) { ++ value = *cb->used_stack++; ++ } else { ++ value = cb->aregs->a[cb->used_integer++]; ++ } ++ ++ switch (type) { ++ case FFI_TYPE_UINT8: *(uint8_t *)data = value; break; ++ case FFI_TYPE_SINT8: *(uint8_t *)data = value; break; ++ case FFI_TYPE_UINT16: *(uint16_t *)data = value; break; ++ case FFI_TYPE_SINT16: *(uint16_t *)data = value; break; ++ case FFI_TYPE_UINT32: *(uint32_t *)data = value; break; ++ case FFI_TYPE_SINT32: *(uint32_t *)data = value; break; ++#if __SIZEOF_POINTER__ == 8 ++ case FFI_TYPE_UINT64: *(uint64_t *)data = value; break; ++ case FFI_TYPE_SINT64: *(uint64_t *)data = value; break; ++#endif ++ case FFI_TYPE_POINTER: *(size_t *)data = value; break; ++ default: FFI_ASSERT(0); break; ++ } ++} ++ ++/* adds an argument to a call, or a not by reference return value */ ++static void marshal(call_builder *cb, ffi_type *type, int var, void *data) { ++ size_t realign[2]; ++ ++#if ABI_FLEN ++ if (!var && type->type == FFI_TYPE_STRUCT) { ++ float_struct_info fsi = struct_passed_as_elements(cb, type); ++ if (fsi.as_elements) { ++ marshal_atom(cb, fsi.type1, data); ++ if (fsi.offset2) ++ marshal_atom(cb, fsi.type2, ((char*)data) + fsi.offset2); ++ return; ++ } ++ } ++ ++ if (!var && cb->used_float < NARGREG && IS_FLOAT(type->type)) { ++ marshal_atom(cb, type->type, data); ++ return; ++ } ++ ++ double promoted; ++ if (var && type->type == FFI_TYPE_FLOAT) ++ { ++ /* C standard requires promoting float -> double for variable arg */ ++ promoted = *(float *)data; ++ type = &ffi_type_double; ++ data = &promoted; ++ } ++#endif ++ ++ if (type->size > 2 * __SIZEOF_POINTER__) { ++ /* pass by reference */ ++ marshal_atom(cb, FFI_TYPE_POINTER, &data); ++ } else if (IS_INT(type->type) || type->type == FFI_TYPE_POINTER) { ++ marshal_atom(cb, type->type, data); ++ } else { ++ /* overlong integers, soft-float floats, and structs without special ++ float handling are treated identically from this point on */ ++ ++ /* variadics are aligned even in registers */ ++ if (type->alignment > __SIZEOF_POINTER__) { ++ if (var) ++ cb->used_integer = FFI_ALIGN(cb->used_integer, 2); ++ cb->used_stack = (size_t *)FFI_ALIGN(cb->used_stack, 2*__SIZEOF_POINTER__); ++ } ++ ++ memcpy(realign, data, type->size); ++ if (type->size > 0) ++ marshal_atom(cb, FFI_TYPE_POINTER, realign); ++ if (type->size > __SIZEOF_POINTER__) ++ marshal_atom(cb, FFI_TYPE_POINTER, realign + 1); ++ } ++} ++ ++/* for arguments passed by reference returns the pointer, otherwise the arg is copied (up to MAXCOPYARG bytes) */ ++static void *unmarshal(call_builder *cb, ffi_type *type, int var, void *data) { ++ size_t realign[2]; ++ void *pointer; ++ ++#if ABI_FLEN ++ if (!var && type->type == FFI_TYPE_STRUCT) { ++ float_struct_info fsi = struct_passed_as_elements(cb, type); ++ if (fsi.as_elements) { ++ unmarshal_atom(cb, fsi.type1, data); ++ if (fsi.offset2) ++ unmarshal_atom(cb, fsi.type2, ((char*)data) + fsi.offset2); ++ return data; ++ } ++ } ++ ++ if (!var && cb->used_float < NARGREG && IS_FLOAT(type->type)) { ++ unmarshal_atom(cb, type->type, data); ++ return data; ++ } ++ ++ if (var && type->type == FFI_TYPE_FLOAT) ++ { ++ int m = cb->used_integer; ++ void *promoted = m < NARGREG ? cb->aregs->a + m:cb->used_stack + m - NARGREG + 1; ++ *(float*)promoted = *(double *)promoted; ++ } ++#endif ++ ++ if (type->size > 2 * __SIZEOF_POINTER__) { ++ /* pass by reference */ ++ unmarshal_atom(cb, FFI_TYPE_POINTER, (char*)&pointer); ++ return pointer; ++ } else if (IS_INT(type->type) || type->type == FFI_TYPE_POINTER) { ++ unmarshal_atom(cb, type->type, data); ++ return data; ++ } else { ++ /* overlong integers, soft-float floats, and structs without special ++ float handling are treated identically from this point on */ ++ ++ /* variadics are aligned even in registers */ ++ if (type->alignment > __SIZEOF_POINTER__) { ++ if (var) ++ cb->used_integer = FFI_ALIGN(cb->used_integer, 2); ++ cb->used_stack = (size_t *)FFI_ALIGN(cb->used_stack, 2*__SIZEOF_POINTER__); ++ } ++ ++ if (type->size > 0) ++ unmarshal_atom(cb, FFI_TYPE_POINTER, realign); ++ if (type->size > __SIZEOF_POINTER__) ++ unmarshal_atom(cb, FFI_TYPE_POINTER, realign + 1); ++ memcpy(data, realign, type->size); ++ return data; ++ } ++} ++ ++static int passed_by_ref(call_builder *cb, ffi_type *type, int var) { ++#if ABI_FLEN ++ if (!var && type->type == FFI_TYPE_STRUCT) { ++ float_struct_info fsi = struct_passed_as_elements(cb, type); ++ if (fsi.as_elements) return 0; ++ } ++#endif ++ ++ return type->size > 2 * __SIZEOF_POINTER__; ++} ++ ++/* Perform machine dependent cif processing */ ++ffi_status ffi_prep_cif_machdep(ffi_cif *cif) { ++ cif->loongarch_nfixedargs = cif->nargs; ++ return FFI_OK; ++} ++ ++/* Perform machine dependent cif processing when we have a variadic function */ ++ ++ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, unsigned int nfixedargs, unsigned int ntotalargs) { ++ cif->loongarch_nfixedargs = nfixedargs; ++ return FFI_OK; ++} ++ ++/* Low level routine for calling functions */ ++extern void ffi_call_asm (void *stack, struct call_context *regs, ++ void (*fn) (void), void *closure) FFI_HIDDEN; ++ ++static void ++ffi_call_int (ffi_cif *cif, void (*fn) (void), void *rvalue, void **avalue, ++ void *closure) ++{ ++ /* this is a conservative estimate, assuming a complex return value and ++ that all remaining arguments are long long / __int128 */ ++ size_t arg_bytes = cif->nargs <= 3 ? 0 : ++ FFI_ALIGN(2 * sizeof(size_t) * (cif->nargs - 3), STKALIGN); ++ size_t rval_bytes = 0; ++ if (rvalue == NULL && cif->rtype->size > 2*__SIZEOF_POINTER__) ++ rval_bytes = FFI_ALIGN(cif->rtype->size, STKALIGN); ++ size_t alloc_size = arg_bytes + rval_bytes + sizeof(call_context); ++ ++ /* the assembly code will deallocate all stack data at lower addresses ++ than the argument region, so we need to allocate the frame and the ++ return value after the arguments in a single allocation */ ++ size_t alloc_base; ++ /* Argument region must be 16-byte aligned */ ++ if (_Alignof(max_align_t) >= STKALIGN) { ++ /* since sizeof long double is normally 16, the compiler will ++ guarantee alloca alignment to at least that much */ ++ alloc_base = (size_t)alloca(alloc_size); ++ } else { ++ alloc_base = FFI_ALIGN(alloca(alloc_size + STKALIGN - 1), STKALIGN); ++ } ++ ++ if (rval_bytes) ++ rvalue = (void*)(alloc_base + arg_bytes); ++ ++ call_builder cb; ++ cb.used_float = cb.used_integer = 0; ++ cb.aregs = (call_context*)(alloc_base + arg_bytes + rval_bytes); ++ cb.used_stack = (void*)alloc_base; ++ ++ int return_by_ref = passed_by_ref(&cb, cif->rtype, 0); ++ if (return_by_ref) ++ marshal(&cb, &ffi_type_pointer, 0, &rvalue); ++ ++ int i; ++ for (i = 0; i < cif->nargs; i++) ++ marshal(&cb, cif->arg_types[i], i >= cif->loongarch_nfixedargs, avalue[i]); ++ ++ ffi_call_asm ((void *) alloc_base, cb.aregs, fn, closure); ++ ++ cb.used_float = cb.used_integer = 0; ++ if (!return_by_ref && rvalue) ++ unmarshal(&cb, cif->rtype, 0, rvalue); ++} ++ ++void ++ffi_call (ffi_cif *cif, void (*fn) (void), void *rvalue, void **avalue) ++{ ++ ffi_call_int(cif, fn, rvalue, avalue, NULL); ++} ++ ++void ++ffi_call_go (ffi_cif *cif, void (*fn) (void), void *rvalue, ++ void **avalue, void *closure) ++{ ++ ffi_call_int(cif, fn, rvalue, avalue, closure); ++} ++ ++extern void ffi_closure_asm(void) FFI_HIDDEN; ++ ++ffi_status ffi_prep_closure_loc(ffi_closure *closure, ffi_cif *cif, void (*fun)(ffi_cif*,void*,void**,void*), void *user_data, void *codeloc) ++{ ++ uint32_t *tramp = (uint32_t *) &closure->tramp[0]; ++ uint64_t fn = (uint64_t) (uintptr_t) ffi_closure_asm; ++ ++ if (cif->abi <= FFI_FIRST_ABI || cif->abi >= FFI_LAST_ABI) ++ return FFI_BAD_ABI; ++ ++ /* we will call ffi_closure_inner with codeloc, not closure, but as long ++ as the memory is readable it should work */ ++ ++ tramp[0] = 0x1800000c; /* pcaddi $t0, 0 (i.e. $t0 <- tramp) */ ++#ifdef _ABILP64 ++ tramp[1] = 0x28c0418d; /* ld.d $t1, $t0, 16 */ ++#elif defined _ABILPX32 ++ tramp[1] = 0x2880418d; /* ld.w $t1, $t0, 16 */ ++#endif ++ tramp[2] = 0x4c0001a0; /* jirl $zero, $t1, 0 */ ++ tramp[3] = 0x03400000; /* nop */ ++ tramp[4] = fn; ++ tramp[5] = fn >> 32; ++ ++ closure->cif = cif; ++ closure->fun = fun; ++ closure->user_data = user_data; ++ ++ __builtin___clear_cache(codeloc, codeloc + FFI_TRAMPOLINE_SIZE); ++ ++ return FFI_OK; ++} ++ ++extern void ffi_go_closure_asm (void) FFI_HIDDEN; ++ ++ffi_status ++ffi_prep_go_closure (ffi_go_closure *closure, ffi_cif *cif, ++ void (*fun) (ffi_cif *, void *, void **, void *)) ++{ ++ if (cif->abi <= FFI_FIRST_ABI || cif->abi >= FFI_LAST_ABI) ++ return FFI_BAD_ABI; ++ ++ closure->tramp = (void *) ffi_go_closure_asm; ++ closure->cif = cif; ++ closure->fun = fun; ++ ++ return FFI_OK; ++} ++ ++/* Called by the assembly code with aregs pointing to saved argument registers ++ and stack pointing to the stacked arguments. Return values passed in ++ registers will be reloaded from aregs. */ ++void FFI_HIDDEN ++ffi_closure_inner (ffi_cif *cif, ++ void (*fun) (ffi_cif *, void *, void **, void *), ++ void *user_data, ++ size_t *stack, call_context *aregs) ++{ ++ void **avalue = alloca(cif->nargs * sizeof(void*)); ++ /* storage for arguments which will be copied by unmarshal(). We could ++ theoretically avoid the copies in many cases and use at most 128 bytes ++ of memory, but allocating disjoint storage for each argument is ++ simpler. */ ++ char *astorage = alloca(cif->nargs * MAXCOPYARG); ++ void *rvalue; ++ call_builder cb; ++ int return_by_ref; ++ int i; ++ ++ cb.aregs = aregs; ++ cb.used_integer = cb.used_float = 0; ++ cb.used_stack = stack; ++ ++ return_by_ref = passed_by_ref(&cb, cif->rtype, 0); ++ if (return_by_ref) ++ unmarshal(&cb, &ffi_type_pointer, 0, &rvalue); ++ else ++ rvalue = alloca(cif->rtype->size); ++ ++ for (i = 0; i < cif->nargs; i++) ++ avalue[i] = unmarshal(&cb, cif->arg_types[i], ++ i >= cif->loongarch_nfixedargs, astorage + i*MAXCOPYARG); ++ ++ fun (cif, rvalue, avalue, user_data); ++ ++ if (!return_by_ref && cif->rtype->type != FFI_TYPE_VOID) { ++ cb.used_integer = cb.used_float = 0; ++ marshal(&cb, cif->rtype, 0, rvalue); ++ } ++} +diff -Nprua libffi-3.3-bak/src/loongarch/ffitarget.h libffi-3.3/src/loongarch/ffitarget.h +--- libffi-3.3-bak/src/loongarch/ffitarget.h 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/src/loongarch/ffitarget.h 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,69 @@ ++/* -----------------------------------------------------------------*-C-*- ++ ffitarget.h - 2014 Michael Knyszek ++ ++ Target configuration macros for LOONGARCH. ++ ++ 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. ++ ++ ----------------------------------------------------------------------- */ ++ ++#ifndef LIBFFI_TARGET_H ++#define LIBFFI_TARGET_H ++ ++#ifndef LIBFFI_H ++#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." ++#endif ++ ++#ifndef __loongarch__ ++#error "libffi was configured for a LOONGARCH target but this does not appear to be a LOONGARCH compiler." ++#endif ++ ++#ifndef LIBFFI_ASM ++ ++typedef unsigned long ffi_arg; ++typedef signed long ffi_sarg; ++ ++/* FFI_UNUSED_NN and loongarch_unused are to maintain ABI compatibility with a ++ distributed Berkeley patch from 2014, and can be removed at SONAME bump */ ++typedef enum ffi_abi { ++ FFI_FIRST_ABI = 0, ++ FFI_LP64, ++ FFI_UNUSED_1, ++ FFI_UNUSED_2, ++ FFI_UNUSED_3, ++ FFI_LAST_ABI, ++ ++ FFI_DEFAULT_ABI = FFI_LP64 ++} ffi_abi; ++ ++#endif /* LIBFFI_ASM */ ++ ++/* ---- Definitions for closures ----------------------------------------- */ ++ ++#define FFI_CLOSURES 1 ++#define FFI_GO_CLOSURES 1 ++#define FFI_TRAMPOLINE_SIZE 24 ++#define FFI_NATIVE_RAW_API 0 ++#define FFI_EXTRA_CIF_FIELDS unsigned loongarch_nfixedargs; unsigned loongarch_unused; ++#define FFI_TARGET_SPECIFIC_VARIADIC ++//#define FFI_TARGET_HAS_COMPLEX_TYPE 1 ++#endif ++ +diff -Nprua libffi-3.3-bak/src/loongarch/sysv.S libffi-3.3/src/loongarch/sysv.S +--- libffi-3.3-bak/src/loongarch/sysv.S 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/src/loongarch/sysv.S 2022-10-10 15:56:50.905545311 +0800 +@@ -0,0 +1,292 @@ ++/* ----------------------------------------------------------------------- ++ ffi.c - Copyright (c) 2015 Michael Knyszek ++ 2015 Andrew Waterman ++ 2018 Stef O'Rear ++ ++ LOONGARCH Foreign Function Interface ++ ++ 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. ++ ----------------------------------------------------------------------- */ ++ ++#define LIBFFI_ASM ++#include ++#include ++ ++/* Define aliases so that we can handle all ABIs uniformly */ ++ ++#if __SIZEOF_POINTER__ == 8 ++#define PTRS 8 ++#define LARG ld.d ++#define SARG st.d ++#else ++#define PTRS 4 ++#define LARG ld.w ++#define SARG st.w ++#endif ++ ++#ifdef __loongarch_hard_float ++# if defined __loongarch_single_float ++# define FLT float ++# define FLEN 4 ++# define FLD fld.w ++# define FST fst.w ++# error "need check" ++# else ++# define FLT double ++# define FLEN 8 ++# define FLARG fld.d ++# define FSARG fst.d ++# endif ++#else ++# define FLEN 0 ++# error "need check" ++#endif ++ ++#define FLTS 8 ++ ++ ++ .text ++ .globl ffi_call_asm ++ .type ffi_call_asm, @function ++ .hidden ffi_call_asm ++/* ++ struct call_context { ++ floatreg fa[8]; ++ intreg a[8]; ++ intreg pad[rv32 ? 2 : 0]; ++ intreg save_fp, save_ra; ++ } ++ void ffi_call_asm (size_t *stackargs, struct call_context *regargs, ++ void (*fn) (void), void *closure); ++*/ ++ ++#define FRAME_LEN (8 * FLTS + 8 * PTRS + 8 * 2) ++ ++ffi_call_asm: ++ .cfi_startproc ++ ++ /* ++ We are NOT going to set up an ordinary stack frame. In order to pass ++ the stacked args to the called function, we adjust our stack pointer to ++ a0, which is in the _caller's_ alloca area. We establish our own stack ++ frame at the end of the call_context. ++ ++ Anything below the arguments will be freed at this point, although we ++ preserve the call_context so that it can be read back in the caller. ++ */ ++ ++ .cfi_def_cfa 5, FRAME_LEN # interim CFA based on a1 ++ SARG $fp, $a1, FRAME_LEN - 2*PTRS ++ .cfi_offset 22, -2*PTRS ++ SARG $ra, $a1, FRAME_LEN - 1*PTRS ++ .cfi_offset 1, -1*PTRS ++ ++ addi.d $fp, $a1, FRAME_LEN ++ move $sp, $a0 ++ .cfi_def_cfa 22, 0 # our frame is fully set up ++ ++ # Load arguments ++ move $t1, $a2 ++ move $t2, $a3 ++ ++ FLARG $fa0, $fp, -FRAME_LEN+0*FLTS ++ FLARG $fa1, $fp, -FRAME_LEN+1*FLTS ++ FLARG $fa2, $fp, -FRAME_LEN+2*FLTS ++ FLARG $fa3, $fp, -FRAME_LEN+3*FLTS ++ FLARG $fa4, $fp, -FRAME_LEN+4*FLTS ++ FLARG $fa5, $fp, -FRAME_LEN+5*FLTS ++ FLARG $fa6, $fp, -FRAME_LEN+6*FLTS ++ FLARG $fa7, $fp, -FRAME_LEN+7*FLTS ++ ++ LARG $a0, $fp, -FRAME_LEN+8*FLTS+0*PTRS ++ LARG $a1, $fp, -FRAME_LEN+8*FLTS+1*PTRS ++ LARG $a2, $fp, -FRAME_LEN+8*FLTS+2*PTRS ++ LARG $a3, $fp, -FRAME_LEN+8*FLTS+3*PTRS ++ LARG $a4, $fp, -FRAME_LEN+8*FLTS+4*PTRS ++ LARG $a5, $fp, -FRAME_LEN+8*FLTS+5*PTRS ++ LARG $a6, $fp, -FRAME_LEN+8*FLTS+6*PTRS ++ LARG $a7, $fp, -FRAME_LEN+8*FLTS+7*PTRS ++ ++ /* Call */ ++ jirl $ra,$t1,0 ++ ++ /* Save return values - only a0/a1 (fa0/fa1) are used */ ++ FSARG $fa0, $fp, -FRAME_LEN+0*FLTS ++ FSARG $fa1, $fp, -FRAME_LEN+1*FLTS ++ ++ SARG $a0, $fp, -FRAME_LEN+8*FLTS+0*PTRS ++ SARG $a1, $fp, -FRAME_LEN+8*FLTS+1*PTRS ++ ++ /* Restore and return */ ++ addi.d $sp, $fp, -FRAME_LEN ++ .cfi_def_cfa 3, FRAME_LEN ++ LARG $ra, $fp, -1*PTRS ++ .cfi_restore 1 ++ LARG $fp, $fp, -2*PTRS ++ .cfi_restore 22 ++ jirl $r0, $ra, 0 ++ .cfi_endproc ++ .size ffi_call_asm, .-ffi_call_asm ++ ++ ++/* ++ ffi_closure_asm. Expects address of the passed-in ffi_closure in t1. ++ void ffi_closure_inner (ffi_cif *cif, ++ void (*fun) (ffi_cif *, void *, void **, void *), ++ void *user_data, ++ size_t *stackargs, struct call_context *regargs) ++*/ ++ ++ .globl ffi_closure_asm ++ .hidden ffi_closure_asm ++ .type ffi_closure_asm, @function ++ffi_closure_asm: ++ .cfi_startproc ++ ++ addi.d $sp, $sp, -FRAME_LEN ++ .cfi_def_cfa_offset FRAME_LEN ++ ++ /* make a frame */ ++ SARG $fp, $sp, FRAME_LEN - 2*PTRS ++ .cfi_offset 22, -2*PTRS ++ SARG $ra, $sp, FRAME_LEN - 1*PTRS ++ .cfi_offset 1, -1*PTRS ++ addi.d $fp, $sp, FRAME_LEN ++ ++ /* save arguments */ ++ FSARG $fa0, $sp, 0*FLTS ++ FSARG $fa1, $sp, 1*FLTS ++ FSARG $fa2, $sp, 2*FLTS ++ FSARG $fa3, $sp, 3*FLTS ++ FSARG $fa4, $sp, 4*FLTS ++ FSARG $fa5, $sp, 5*FLTS ++ FSARG $fa6, $sp, 6*FLTS ++ FSARG $fa7, $sp, 7*FLTS ++ ++ SARG $a0, $sp, 8*FLTS+0*PTRS ++ SARG $a1, $sp, 8*FLTS+1*PTRS ++ SARG $a2, $sp, 8*FLTS+2*PTRS ++ SARG $a3, $sp, 8*FLTS+3*PTRS ++ SARG $a4, $sp, 8*FLTS+4*PTRS ++ SARG $a5, $sp, 8*FLTS+5*PTRS ++ SARG $a6, $sp, 8*FLTS+6*PTRS ++ SARG $a7, $sp, 8*FLTS+7*PTRS ++ ++ /* enter C */ ++ LARG $a0, $t0, FFI_TRAMPOLINE_SIZE+0*PTRS ++ LARG $a1, $t0, FFI_TRAMPOLINE_SIZE+1*PTRS ++ LARG $a2, $t0, FFI_TRAMPOLINE_SIZE+2*PTRS ++ addi.d $a3, $sp, FRAME_LEN ++ move $a4, $sp ++ ++ bl ffi_closure_inner ++ ++ /* return values */ ++ FLARG $fa0, $sp, 0*FLTS ++ FLARG $fa1, $sp, 1*FLTS ++ ++ LARG $a0, $sp, 8*FLTS+0*PTRS ++ LARG $a1, $sp, 8*FLTS+1*PTRS ++ ++ /* restore and return */ ++ LARG $ra, $sp, FRAME_LEN-1*PTRS ++ .cfi_restore 1 ++ LARG $fp, $sp, FRAME_LEN-2*PTRS ++ .cfi_restore 22 ++ addi.d $sp, $sp, FRAME_LEN ++ .cfi_def_cfa_offset 0 ++ jirl $r0, $ra, 0 ++ .cfi_endproc ++ .size ffi_closure_asm, .-ffi_closure_asm ++ ++/* ++ ffi_go_closure_asm. Expects address of the passed-in ffi_go_closure in t2. ++ void ffi_closure_inner (ffi_cif *cif, ++ void (*fun) (ffi_cif *, void *, void **, void *), ++ void *user_data, ++ size_t *stackargs, struct call_context *regargs) ++*/ ++ ++ .globl ffi_go_closure_asm ++ .hidden ffi_go_closure_asm ++ .type ffi_go_closure_asm, @function ++ffi_go_closure_asm: ++ .cfi_startproc ++ ++ addi.d $sp, $sp, -FRAME_LEN ++ .cfi_def_cfa_offset FRAME_LEN ++ ++ /* make a frame */ ++ SARG $fp, $sp, FRAME_LEN - 2*PTRS ++ .cfi_offset 22, -2*PTRS ++ SARG $ra, $sp, FRAME_LEN - 1*PTRS ++ .cfi_offset 1, -1*PTRS ++ addi.d $fp, $sp, FRAME_LEN ++ ++ /* save arguments */ ++ FSARG $fa0, $sp, 0*FLTS ++ FSARG $fa1, $sp, 1*FLTS ++ FSARG $fa2, $sp, 2*FLTS ++ FSARG $fa3, $sp, 3*FLTS ++ FSARG $fa4, $sp, 4*FLTS ++ FSARG $fa5, $sp, 5*FLTS ++ FSARG $fa6, $sp, 6*FLTS ++ FSARG $fa7, $sp, 7*FLTS ++ ++ SARG $a0, $sp, 8*FLTS+0*PTRS ++ SARG $a1, $sp, 8*FLTS+1*PTRS ++ SARG $a2, $sp, 8*FLTS+2*PTRS ++ SARG $a3, $sp, 8*FLTS+3*PTRS ++ SARG $a4, $sp, 8*FLTS+4*PTRS ++ SARG $a5, $sp, 8*FLTS+5*PTRS ++ SARG $a6, $sp, 8*FLTS+6*PTRS ++ SARG $a7, $sp, 8*FLTS+7*PTRS ++ ++ /* enter C */ ++ LARG $a0, $t2, 1*PTRS ++ LARG $a1, $t2, 2*PTRS ++ move $a2, $t2 ++ addi.d $a3, $sp, FRAME_LEN ++ move $a4, $sp ++ ++ bl ffi_closure_inner ++ ++ /* return values */ ++ FLARG $fa0, $sp, 0*FLTS ++ FLARG $fa1, $sp, 1*FLTS ++ ++ LARG $a0, $sp, 8*FLTS+0*PTRS ++ LARG $a1, $sp, 8*FLTS+1*PTRS ++ ++ /* restore and return */ ++ LARG $ra, $sp, FRAME_LEN-1*PTRS ++ .cfi_restore 1 ++ LARG $fp, $sp, FRAME_LEN-2*PTRS ++ .cfi_restore 22 ++ addi.d $sp, $sp, FRAME_LEN ++ .cfi_def_cfa_offset 0 ++ jirl $r0, $ra, 0 ++ .cfi_endproc ++ .size ffi_go_closure_asm, .-ffi_go_closure_asm ++ ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",%progbits ++#endif +diff -Nprua libffi-3.3-bak/testsuite/libffi.call/many3.c libffi-3.3/testsuite/libffi.call/many3.c +--- libffi-3.3-bak/testsuite/libffi.call/many3.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.call/many3.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,106 @@ ++/* Area: ffi_call ++ Purpose: Check return value double, with many arguments ++ Limitations: none. ++ PR: none. ++ Originator: From the original ffitest.c */ ++ ++/* { dg-do run } */ ++#include "ffitest.h" ++ ++#include ++#include ++#include ++ ++typedef struct ++{ ++ unsigned ret; ++ unsigned one; ++ unsigned two; ++} s3i; ++ ++static double many(double f1, ++ double f2, ++ s3i arg, ++ double f3, ++ double f4, ++ long int i2, ++ double f5, ++ double f6, ++ long int i3, ++ double f7, ++ double f8, ++ long int i4, ++ double f9, ++ double f10, ++ long int i5, ++ double f11, ++ double f12, ++ long int i6, ++ double f13) ++{ ++ return ((double) (arg.ret + arg.one + arg.two + i2 + i3 + i4 + i5 + i6) + (f1/f2+f3/f4+f5/f6+f7/f8+f9/f10+f11/f12) * f13); ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[19]; ++ ffi_type s3i_type; ++ ffi_type *s3i_type_elements[4]; ++ s3i arg; ++ void *values[19]; ++ double fa[19]; ++ long int la[19]; ++ double f, ff; ++ int i; ++ ++ s3i_type.size = 0; ++ s3i_type.alignment = 0; ++ s3i_type.type = FFI_TYPE_STRUCT; ++ s3i_type.elements = s3i_type_elements; ++ s3i_type_elements[0] = &ffi_type_uint; ++ s3i_type_elements[1] = &ffi_type_uint; ++ s3i_type_elements[2] = &ffi_type_uint; ++ s3i_type_elements[3] = NULL; ++ ++ arg.ret = 3; ++ arg.one = 1; ++ arg.two = 2; ++ ++ for (i = 0; i < 19; i++) ++ { ++ if(i == 2) { ++ args[i] = &s3i_type; ++ values[i] = &arg; ++ continue; ++ } ++ if( (i - 2) % 3 == 0) { ++ args[i] = &ffi_type_slong; ++ la[i] = (long int) i; ++ values[i] = &la[i]; ++ } ++ else { ++ args[i] = &ffi_type_double; ++ fa[i] = (double) i; ++ values[i] = &fa[i]; ++ } ++ } ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 19, ++ &ffi_type_double, args) == FFI_OK); ++ ++ ffi_call(&cif, FFI_FN(many), &f, values); ++ ++ ff = many(fa[0], fa[1], arg, ++ fa[3], fa[4], la[5], ++ fa[6], fa[7], la[8], ++ fa[9], fa[10], la[11], ++ fa[12], fa[13], la[14], ++ fa[15], fa[16], la[17], ++ fa[18]); ++ if (fabs(f - ff) < FLT_EPSILON) ++ exit(0); ++ else ++ abort(); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.call/many4.c libffi-3.3/testsuite/libffi.call/many4.c +--- libffi-3.3-bak/testsuite/libffi.call/many4.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.call/many4.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,106 @@ ++/* Area: ffi_call ++ Purpose: Check return value double, with many arguments ++ Limitations: none. ++ PR: none. ++ Originator: From the original ffitest.c */ ++ ++/* { dg-do run } */ ++#include "ffitest.h" ++ ++#include ++#include ++#include ++ ++typedef struct ++{ ++ unsigned ret; ++ unsigned one; ++ unsigned two; ++} s3i; ++ ++static double many(double f1, ++ double f2, ++ long int i1, ++ double f3, ++ double f4, ++ long int i2, ++ double f5, ++ double f6, ++ long int i3, ++ s3i arg, ++ double f8, ++ long int i4, ++ double f9, ++ double f10, ++ long int i5, ++ double f11, ++ double f12, ++ long int i6, ++ double f13) ++{ ++ return ((double) (i1 + i2 + i3 + i4 + i5 + i6) + (f1/f2+f3/f4+f5/f6+(arg.ret + arg.one + arg.two)/f8+f9/f10+f11/f12) * f13); ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[19]; ++ ffi_type s3i_type; ++ ffi_type *s3i_type_elements[4]; ++ s3i arg; ++ void *values[19]; ++ double fa[19]; ++ long int la[19]; ++ double f, ff; ++ int i; ++ ++ s3i_type.size = 0; ++ s3i_type.alignment = 0; ++ s3i_type.type = FFI_TYPE_STRUCT; ++ s3i_type.elements = s3i_type_elements; ++ s3i_type_elements[0] = &ffi_type_uint; ++ s3i_type_elements[1] = &ffi_type_uint; ++ s3i_type_elements[2] = &ffi_type_uint; ++ s3i_type_elements[3] = NULL; ++ ++ arg.ret = 3; ++ arg.one = 1; ++ arg.two = 2; ++ ++ for (i = 0; i < 19; i++) ++ { ++ if(i == 9) { ++ args[i] = &s3i_type; ++ values[i] = &arg; ++ continue; ++ } ++ if( (i - 2) % 3 == 0) { ++ args[i] = &ffi_type_slong; ++ la[i] = (long int) i; ++ values[i] = &la[i]; ++ } ++ else { ++ args[i] = &ffi_type_double; ++ fa[i] = (double) i; ++ values[i] = &fa[i]; ++ } ++ } ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 19, ++ &ffi_type_double, args) == FFI_OK); ++ ++ ffi_call(&cif, FFI_FN(many), &f, values); ++ ++ ff = many(fa[0], fa[1], la[2], ++ fa[3], fa[4], la[5], ++ fa[6], fa[7], la[8], ++ arg, fa[10], la[11], ++ fa[12], fa[13], la[14], ++ fa[15], fa[16], la[17], ++ fa[18]); ++ if (fabs(f - ff) < FLT_EPSILON) ++ exit(0); ++ else ++ abort(); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.call/many5.c libffi-3.3/testsuite/libffi.call/many5.c +--- libffi-3.3-bak/testsuite/libffi.call/many5.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.call/many5.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,103 @@ ++/* Area: ffi_call ++ Purpose: Check return value double, with many arguments ++ Limitations: none. ++ PR: none. ++ Originator: From the original ffitest.c */ ++ ++/* { dg-do run } */ ++#include "ffitest.h" ++ ++#include ++#include ++#include ++ ++typedef struct ++{ ++ float one; ++ int two; ++} s3i; ++ ++static double many(double f1, ++ double f2, ++ long int i1, ++ double f3, ++ double f4, ++ long int i2, ++ double f5, ++ double f6, ++ long int i3, ++ s3i arg, ++ double f8, ++ long int i4, ++ double f9, ++ double f10, ++ long int i5, ++ double f11, ++ double f12, ++ long int i6, ++ double f13) ++{ ++ return ((double) (i1 + i2 + i3 + i4 + i5 + i6) + (f1/f2+f3/f4+f5/f6+(arg.one + arg.two)/f8+f9/f10+f11/f12) * f13); ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[19]; ++ ffi_type s3i_type; ++ ffi_type *s3i_type_elements[4]; ++ s3i arg; ++ void *values[19]; ++ double fa[19]; ++ long int la[19]; ++ double f, ff; ++ int i; ++ ++ s3i_type.size = 0; ++ s3i_type.alignment = 0; ++ s3i_type.type = FFI_TYPE_STRUCT; ++ s3i_type.elements = s3i_type_elements; ++ s3i_type_elements[0] = &ffi_type_float; ++ s3i_type_elements[1] = &ffi_type_sint; ++ s3i_type_elements[2] = NULL; ++ ++ arg.one = 1; ++ arg.two = 2; ++ ++ for (i = 0; i < 19; i++) ++ { ++ if(i == 9) { ++ args[i] = &s3i_type; ++ values[i] = &arg; ++ continue; ++ } ++ if( (i - 2) % 3 == 0) { ++ args[i] = &ffi_type_slong; ++ la[i] = (long int) i; ++ values[i] = &la[i]; ++ } ++ else { ++ args[i] = &ffi_type_double; ++ fa[i] = (double) i; ++ values[i] = &fa[i]; ++ } ++ } ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 19, ++ &ffi_type_double, args) == FFI_OK); ++ ++ ffi_call(&cif, FFI_FN(many), &f, values); ++ ++ ff = many(fa[0], fa[1], la[2], ++ fa[3], fa[4], la[5], ++ fa[6], fa[7], la[8], ++ arg, fa[10], la[11], ++ fa[12], fa[13], la[14], ++ fa[15], fa[16], la[17], ++ fa[18]); ++ if (fabs(f - ff) < FLT_EPSILON) ++ exit(0); ++ else ++ abort(); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.call/many6.c libffi-3.3/testsuite/libffi.call/many6.c +--- libffi-3.3-bak/testsuite/libffi.call/many6.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.call/many6.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,103 @@ ++/* Area: ffi_call ++ Purpose: Check return value double, with many arguments ++ Limitations: none. ++ PR: none. ++ Originator: From the original ffitest.c */ ++ ++/* { dg-do run } */ ++#include "ffitest.h" ++ ++#include ++#include ++#include ++ ++typedef struct ++{ ++ float one; ++ int two; ++} s3i; ++ ++static double many(double f1, ++ double f2, ++ s3i arg, ++ double f3, ++ double f4, ++ long int i2, ++ double f5, ++ double f6, ++ long int i3, ++ double f7, ++ double f8, ++ long int i4, ++ double f9, ++ double f10, ++ long int i5, ++ double f11, ++ double f12, ++ long int i6, ++ double f13) ++{ ++ return ((double) (arg.one + arg.two + i2 + i3 + i4 + i5 + i6) + (f1/f2+f3/f4+f5/f6+f7/f8+f9/f10+f11/f12) * f13); ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[19]; ++ ffi_type s3i_type; ++ ffi_type *s3i_type_elements[4]; ++ s3i arg; ++ void *values[19]; ++ double fa[19]; ++ long int la[19]; ++ double f, ff; ++ int i; ++ ++ s3i_type.size = 0; ++ s3i_type.alignment = 0; ++ s3i_type.type = FFI_TYPE_STRUCT; ++ s3i_type.elements = s3i_type_elements; ++ s3i_type_elements[0] = &ffi_type_float; ++ s3i_type_elements[1] = &ffi_type_sint; ++ s3i_type_elements[2] = NULL; ++ ++ arg.one = 1; ++ arg.two = 2; ++ ++ for (i = 0; i < 19; i++) ++ { ++ if(i == 2) { ++ args[i] = &s3i_type; ++ values[i] = &arg; ++ continue; ++ } ++ if( (i - 2) % 3 == 0) { ++ args[i] = &ffi_type_slong; ++ la[i] = (long int) i; ++ values[i] = &la[i]; ++ } ++ else { ++ args[i] = &ffi_type_double; ++ fa[i] = (double) i; ++ values[i] = &fa[i]; ++ } ++ } ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 19, ++ &ffi_type_double, args) == FFI_OK); ++ ++ ffi_call(&cif, FFI_FN(many), &f, values); ++ ++ ff = many(fa[0], fa[1], arg, ++ fa[3], fa[4], la[5], ++ fa[6], fa[7], la[8], ++ fa[9], fa[10], la[11], ++ fa[12], fa[13], la[14], ++ fa[15], fa[16], la[17], ++ fa[18]); ++ if (fabs(f - ff) < FLT_EPSILON) ++ exit(0); ++ else ++ abort(); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.call/many7.c libffi-3.3/testsuite/libffi.call/many7.c +--- libffi-3.3-bak/testsuite/libffi.call/many7.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.call/many7.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,106 @@ ++/* Area: ffi_call ++ Purpose: Check return value double, with many arguments ++ Limitations: none. ++ PR: none. ++ Originator: From the original ffitest.c */ ++ ++/* { dg-do run } */ ++#include "ffitest.h" ++ ++#include ++#include ++#include ++ ++typedef struct ++{ ++ unsigned ret; ++ unsigned one; ++ unsigned two; ++} s3i; ++ ++static double many(double f1, ++ double f2, ++ long int i1, ++ double f3, ++ double f4, ++ long int i2, ++ double f5, ++ s3i arg, ++ long int i3, ++ double f7, ++ double f8, ++ long int i4, ++ double f9, ++ double f10, ++ long int i5, ++ double f11, ++ double f12, ++ long int i6, ++ double f13) ++{ ++ return ((double) (i1 + i2 + i3 + i4 + i5 + i6) + (f1/f2+f3/f4+f5/(arg.ret + arg.one + arg.two)+f7/f8+f9/f10+f11/f12) * f13); ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[19]; ++ ffi_type s3i_type; ++ ffi_type *s3i_type_elements[4]; ++ s3i arg; ++ void *values[19]; ++ double fa[19]; ++ long int la[19]; ++ double f, ff; ++ int i; ++ ++ s3i_type.size = 0; ++ s3i_type.alignment = 0; ++ s3i_type.type = FFI_TYPE_STRUCT; ++ s3i_type.elements = s3i_type_elements; ++ s3i_type_elements[0] = &ffi_type_uint; ++ s3i_type_elements[1] = &ffi_type_uint; ++ s3i_type_elements[2] = &ffi_type_uint; ++ s3i_type_elements[3] = NULL; ++ ++ arg.ret = 3; ++ arg.one = 1; ++ arg.two = 2; ++ ++ for (i = 0; i < 19; i++) ++ { ++ if(i == 7) { ++ args[i] = &s3i_type; ++ values[i] = &arg; ++ continue; ++ } ++ if( (i - 2) % 3 == 0) { ++ args[i] = &ffi_type_slong; ++ la[i] = (long int) i; ++ values[i] = &la[i]; ++ } ++ else { ++ args[i] = &ffi_type_double; ++ fa[i] = (double) i; ++ values[i] = &fa[i]; ++ } ++ } ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 19, ++ &ffi_type_double, args) == FFI_OK); ++ ++ ffi_call(&cif, FFI_FN(many), &f, values); ++ ++ ff = many(fa[0], fa[1], la[2], ++ fa[3], fa[4], la[5], ++ fa[6], arg, la[8], ++ fa[9], fa[10], la[11], ++ fa[12], fa[13], la[14], ++ fa[15], fa[16], la[17], ++ fa[18]); ++ if (fabs(f - ff) < FLT_EPSILON) ++ exit(0); ++ else ++ abort(); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.call/many8.c libffi-3.3/testsuite/libffi.call/many8.c +--- libffi-3.3-bak/testsuite/libffi.call/many8.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.call/many8.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,92 @@ ++/* Area: ffi_call ++ Purpose: Check return value double, with many arguments ++ Limitations: none. ++ PR: none. ++ Originator: From the original ffitest.c */ ++ ++/* { dg-do run } */ ++#include "ffitest.h" ++ ++#include ++#include ++#include ++ ++typedef struct ++{ ++ char c1, c2; ++} Ss; ++ ++static int many( ++double a1, ++float a2, ++Ss a3, ++long double a4, ++float a5, ++short a6, ++int a7, ++float a8) ++{ ++return a1 + a2 + a3.c1 + a3.c2 + a4 + a5 + a6 + a7 + a8; ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[9]; ++ ffi_type Ss_type; ++ ffi_type *Ss_type_elements[4]; ++ ++ double a1 = 1; ++ float a2 = 2; ++ Ss a3 = {3, 4}; ++ long double a4 = 5; ++ float a5 = 6; ++ short a6 = 7; ++ int a7 = 8; ++ float a8 = 9; ++ ++ ffi_arg r1; ++ int r2; ++ ++ void *values[9]; ++ ++ Ss_type.size = 0; ++ Ss_type.alignment = 0; ++ Ss_type.type = FFI_TYPE_STRUCT; ++ Ss_type.elements = Ss_type_elements; ++ Ss_type_elements[0] = &ffi_type_uchar; ++ Ss_type_elements[1] = &ffi_type_uchar; ++ Ss_type_elements[2] = NULL; ++ ++ args[0] = &ffi_type_double; ++ args[1] = &ffi_type_float; ++ args[2] = &Ss_type; ++ args[3] = &ffi_type_longdouble; ++ args[4] = &ffi_type_float; ++ args[5] = &ffi_type_sshort; ++ args[6] = &ffi_type_sint; ++ args[7] = &ffi_type_float; ++ args[8] = NULL; ++ ++ values[0] = &a1; ++ values[1] = &a2; ++ values[2] = &a3; ++ values[3] = &a4; ++ values[4] = &a5; ++ values[5] = &a6; ++ values[6] = &a7; ++ values[7] = &a8; ++ values[8] = NULL; ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 8, ++ &ffi_type_sint, args) == FFI_OK); ++ ++ ffi_call(&cif, FFI_FN(many), &r1, values); ++ ++ r2 = many(a1,a2,a3,a4,a5,a6,a7,a8); ++ if ((int)r1 == r2) ++ exit(0); ++ else ++ abort(); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.call/struct11.c libffi-3.3/testsuite/libffi.call/struct11.c +--- libffi-3.3-bak/testsuite/libffi.call/struct11.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.call/struct11.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,72 @@ ++/* Area: ffi_call ++ Purpose: Check structures. ++ Limitations: none. ++ PR: none. ++ Originator: From the original ffitest.c */ ++ ++/* { dg-do run } */ ++#include "ffitest.h" ++ ++typedef struct ++{ ++ unsigned char uc; ++ double d; ++ unsigned int ui; ++} test_structure_1; ++ ++static test_structure_1 ABI_ATTR struct1(test_structure_1 ts, int *another_ret) ++{ ++ ts.uc++; ++ ts.d--; ++ ts.ui++; ++ *another_ret = 1; ++ return ts; ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[MAX_ARGS]; ++ void *values[MAX_ARGS]; ++ ffi_type ts1_type; ++ ffi_type *ts1_type_elements[4]; ++ int i = 0; ++ int *ptr = &i; ++ ++ test_structure_1 ts1_arg; ++ ++ /* This is a hack to get a properly aligned result buffer */ ++ test_structure_1 *ts1_result = ++ (test_structure_1 *) malloc (sizeof(test_structure_1)); ++ ++ ts1_type.size = 0; ++ ts1_type.alignment = 0; ++ ts1_type.type = FFI_TYPE_STRUCT; ++ ts1_type.elements = ts1_type_elements; ++ ts1_type_elements[0] = &ffi_type_uchar; ++ ts1_type_elements[1] = &ffi_type_double; ++ ts1_type_elements[2] = &ffi_type_uint; ++ ts1_type_elements[3] = NULL; ++ ++ args[0] = &ts1_type; ++ args[1] = &ffi_type_pointer; ++ values[0] = &ts1_arg; ++ values[1] = &ptr; ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, ABI_NUM, 2, ++ &ts1_type, args) == FFI_OK); ++ ++ ts1_arg.uc = '\x01'; ++ ts1_arg.d = 3.14159; ++ ts1_arg.ui = 555; ++ ++ ffi_call(&cif, FFI_FN(struct1), ts1_result, values); ++ ++ CHECK(ts1_result->ui == 556); ++ CHECK(ts1_result->d == 3.14159 - 1); ++ CHECK(i == 1); ++ ++ free (ts1_result); ++ exit(0); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.call/struct12.c libffi-3.3/testsuite/libffi.call/struct12.c +--- libffi-3.3-bak/testsuite/libffi.call/struct12.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.call/struct12.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,72 @@ ++/* Area: ffi_call ++ Purpose: Check structures. ++ Limitations: none. ++ PR: none. ++ Originator: From the original ffitest.c */ ++ ++/* { dg-do run } */ ++#include "ffitest.h" ++ ++typedef struct ++{ ++ unsigned char uc; ++ double d; ++ unsigned int ui; ++} test_structure_1; ++ ++static test_structure_1 ABI_ATTR struct1(int *another_ret, test_structure_1 ts) ++{ ++ ts.uc++; ++ ts.d--; ++ ts.ui++; ++ *another_ret = 1; ++ return ts; ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[MAX_ARGS]; ++ void *values[MAX_ARGS]; ++ ffi_type ts1_type; ++ ffi_type *ts1_type_elements[4]; ++ int i = 0; ++ int *ptr = &i; ++ ++ test_structure_1 ts1_arg; ++ ++ /* This is a hack to get a properly aligned result buffer */ ++ test_structure_1 *ts1_result = ++ (test_structure_1 *) malloc (sizeof(test_structure_1)); ++ ++ ts1_type.size = 0; ++ ts1_type.alignment = 0; ++ ts1_type.type = FFI_TYPE_STRUCT; ++ ts1_type.elements = ts1_type_elements; ++ ts1_type_elements[0] = &ffi_type_uchar; ++ ts1_type_elements[1] = &ffi_type_double; ++ ts1_type_elements[2] = &ffi_type_uint; ++ ts1_type_elements[3] = NULL; ++ ++ args[0] = &ffi_type_pointer; ++ args[1] = &ts1_type; ++ values[0] = &ptr; ++ values[1] = &ts1_arg; ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, ABI_NUM, 2, ++ &ts1_type, args) == FFI_OK); ++ ++ ts1_arg.uc = '\x01'; ++ ts1_arg.d = 3.14159; ++ ts1_arg.ui = 555; ++ ++ ffi_call(&cif, FFI_FN(struct1), ts1_result, values); ++ ++ CHECK(ts1_result->ui == 556); ++ CHECK(ts1_result->d == 3.14159 - 1); ++ CHECK(i == 1); ++ ++ free (ts1_result); ++ exit(0); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.call/struct13.c libffi-3.3/testsuite/libffi.call/struct13.c +--- libffi-3.3-bak/testsuite/libffi.call/struct13.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.call/struct13.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,76 @@ ++/* Area: ffi_call ++ Purpose: Check structures. ++ Limitations: none. ++ PR: none. ++ Originator: From the original ffitest.c */ ++ ++/* { dg-do run } */ ++#include "ffitest.h" ++ ++typedef struct ++{ ++ unsigned char uc; ++ double d; ++ unsigned int ui; ++} test_structure_1; ++ ++static test_structure_1 ABI_ATTR struct1(test_structure_1 ts, test_structure_1 ts1) ++{ ++ ts.uc++; ++ ts.d--; ++ ts.ui++; ++ CHECK (ts1.uc == 2); ++ CHECK (ts1.d == 4.0); ++ CHECK (ts1.ui == 100); ++ return ts; ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[MAX_ARGS]; ++ void *values[MAX_ARGS]; ++ ffi_type ts1_type; ++ ffi_type *ts1_type_elements[4]; ++ ++ test_structure_1 ts1_arg1, ts1_arg2; ++ ++ /* This is a hack to get a properly aligned result buffer */ ++ test_structure_1 *ts1_result = ++ (test_structure_1 *) malloc (sizeof(test_structure_1)); ++ ++ ts1_type.size = 0; ++ ts1_type.alignment = 0; ++ ts1_type.type = FFI_TYPE_STRUCT; ++ ts1_type.elements = ts1_type_elements; ++ ts1_type_elements[0] = &ffi_type_uchar; ++ ts1_type_elements[1] = &ffi_type_double; ++ ts1_type_elements[2] = &ffi_type_uint; ++ ts1_type_elements[3] = NULL; ++ ++ args[0] = &ts1_type; ++ values[0] = &ts1_arg1; ++ args[1] = &ts1_type; ++ values[1] = &ts1_arg2; ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, ABI_NUM, 2, ++ &ts1_type, args) == FFI_OK); ++ ++ ts1_arg1.uc = '\x01'; ++ ts1_arg1.d = 3.14159; ++ ts1_arg1.ui = 555; ++ ++ ts1_arg2.uc = 2; ++ ts1_arg2.d = 4.0; ++ ts1_arg2.ui = 100; ++ ++ ++ ffi_call(&cif, FFI_FN(struct1), ts1_result, values); ++ ++ CHECK(ts1_result->ui == 556); ++ CHECK(ts1_result->d == 3.14159 - 1); ++ ++ free (ts1_result); ++ exit(0); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.call/struct14.c libffi-3.3/testsuite/libffi.call/struct14.c +--- libffi-3.3-bak/testsuite/libffi.call/struct14.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.call/struct14.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,84 @@ ++/* Area: ffi_call ++ Purpose: Check structures. ++ Limitations: none. ++ PR: none. ++ Originator: From the original ffitest.c */ ++ ++/* { dg-do run } */ ++#include "ffitest.h" ++ ++typedef struct ++{ ++ unsigned char uc; ++ double d; ++ unsigned int ui; ++} test_structure_1; ++ ++static test_structure_1 ABI_ATTR struct1(test_structure_1 ts, test_structure_1 arg2, test_structure_1 arg3) ++{ ++ ts.uc++; ++ ts.d--; ++ ts.ui++; ++ CHECK (arg2.uc == 2); ++ CHECK (arg2.d == 4.0); ++ CHECK (arg2.ui == 100); ++ CHECK (arg3.uc == 5); ++ CHECK (arg3.d == 6.0); ++ CHECK (arg3.ui == 7); ++ return ts; ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[MAX_ARGS]; ++ void *values[MAX_ARGS]; ++ ffi_type ts1_type; ++ ffi_type *ts1_type_elements[4]; ++ ++ test_structure_1 ts1_arg1, ts1_arg2, ts1_arg3; ++ ++ /* This is a hack to get a properly aligned result buffer */ ++ test_structure_1 *ts1_result = ++ (test_structure_1 *) malloc (sizeof(test_structure_1)); ++ ++ ts1_type.size = 0; ++ ts1_type.alignment = 0; ++ ts1_type.type = FFI_TYPE_STRUCT; ++ ts1_type.elements = ts1_type_elements; ++ ts1_type_elements[0] = &ffi_type_uchar; ++ ts1_type_elements[1] = &ffi_type_double; ++ ts1_type_elements[2] = &ffi_type_uint; ++ ts1_type_elements[3] = NULL; ++ ++ args[0] = &ts1_type; ++ values[0] = &ts1_arg1; ++ args[1] = &ts1_type; ++ values[1] = &ts1_arg2; ++ args[2] = &ts1_type; ++ values[2] = &ts1_arg3; ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, ABI_NUM, 3, ++ &ts1_type, args) == FFI_OK); ++ ++ ts1_arg1.uc = '\x01'; ++ ts1_arg1.d = 3.14159; ++ ts1_arg1.ui = 555; ++ ++ ts1_arg2.uc = 2; ++ ts1_arg2.d = 4.0; ++ ts1_arg2.ui = 100; ++ ++ ts1_arg3.uc = 5; ++ ts1_arg3.d = 6.0; ++ ts1_arg3.ui = 7; ++ ++ ffi_call(&cif, FFI_FN(struct1), ts1_result, values); ++ ++ CHECK(ts1_result->ui == 556); ++ CHECK(ts1_result->d == 3.14159 - 1); ++ ++ free (ts1_result); ++ exit(0); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.call/struct15.c libffi-3.3/testsuite/libffi.call/struct15.c +--- libffi-3.3-bak/testsuite/libffi.call/struct15.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.call/struct15.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,60 @@ ++/* Area: ffi_call ++ Purpose: Check structures. ++ Limitations: none. ++ PR: none. ++ Originator: From the original ffitest.c */ ++ ++/* { dg-do run } */ ++#include "ffitest.h" ++ ++typedef struct ++{ ++ double d1; ++} test_structure_2; ++ ++static test_structure_2 ABI_ATTR struct2(test_structure_2 ts) ++{ ++ ts.d1--; ++ ++ return ts; ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[MAX_ARGS]; ++ void *values[MAX_ARGS]; ++ test_structure_2 ts2_arg; ++ ffi_type ts2_type; ++ ffi_type *ts2_type_elements[2]; ++ ++ /* This is a hack to get a properly aligned result buffer */ ++ test_structure_2 *ts2_result = ++ (test_structure_2 *) malloc (sizeof(test_structure_2)); ++ ++ ts2_type.size = 0; ++ ts2_type.alignment = 0; ++ ts2_type.type = FFI_TYPE_STRUCT; ++ ts2_type.elements = ts2_type_elements; ++ ts2_type_elements[0] = &ffi_type_double; ++ ts2_type_elements[1] = NULL; ++ ++ args[0] = &ts2_type; ++ values[0] = &ts2_arg; ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts2_type, args) == FFI_OK); ++ ++ ts2_arg.d1 = 5.55; ++ ++ printf ("%g\n", ts2_arg.d1); ++ ++ ffi_call(&cif, FFI_FN(struct2), ts2_result, values); ++ ++ printf ("%g\n", ts2_result->d1); ++ ++ CHECK(ts2_result->d1 == (double) 5.55 - 1); ++ ++ free (ts2_result); ++ exit(0); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.call/struct16.c libffi-3.3/testsuite/libffi.call/struct16.c +--- libffi-3.3-bak/testsuite/libffi.call/struct16.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.call/struct16.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,60 @@ ++/* Area: ffi_call ++ Purpose: Check structures. ++ Limitations: none. ++ PR: none. ++ Originator: From the original ffitest.c */ ++ ++/* { dg-do run } */ ++#include "ffitest.h" ++ ++typedef struct ++{ ++ float d1; ++} test_structure_2; ++ ++static test_structure_2 ABI_ATTR struct2(test_structure_2 ts) ++{ ++ ts.d1--; ++ ++ return ts; ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[MAX_ARGS]; ++ void *values[MAX_ARGS]; ++ test_structure_2 ts2_arg; ++ ffi_type ts2_type; ++ ffi_type *ts2_type_elements[2]; ++ ++ /* This is a hack to get a properly aligned result buffer */ ++ test_structure_2 *ts2_result = ++ (test_structure_2 *) malloc (sizeof(test_structure_2)); ++ ++ ts2_type.size = 0; ++ ts2_type.alignment = 0; ++ ts2_type.type = FFI_TYPE_STRUCT; ++ ts2_type.elements = ts2_type_elements; ++ ts2_type_elements[0] = &ffi_type_float; ++ ts2_type_elements[1] = NULL; ++ ++ args[0] = &ts2_type; ++ values[0] = &ts2_arg; ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts2_type, args) == FFI_OK); ++ ++ ts2_arg.d1 = 5.55; ++ ++ printf ("%g\n", ts2_arg.d1); ++ ++ ffi_call(&cif, FFI_FN(struct2), ts2_result, values); ++ ++ printf ("%g\n", ts2_result->d1); ++ ++ CHECK(ts2_result->d1 == (float) 5.55 - 1); ++ ++ free (ts2_result); ++ exit(0); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.call/struct17.c libffi-3.3/testsuite/libffi.call/struct17.c +--- libffi-3.3-bak/testsuite/libffi.call/struct17.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.call/struct17.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,60 @@ ++/* Area: ffi_call ++ Purpose: Check structures. ++ Limitations: none. ++ PR: none. ++ Originator: From the original ffitest.c */ ++ ++/* { dg-do run } */ ++#include "ffitest.h" ++ ++typedef struct ++{ ++ long double d1; ++} test_structure_2; ++ ++static test_structure_2 ABI_ATTR struct2(test_structure_2 ts) ++{ ++ ts.d1--; ++ ++ return ts; ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[MAX_ARGS]; ++ void *values[MAX_ARGS]; ++ test_structure_2 ts2_arg; ++ ffi_type ts2_type; ++ ffi_type *ts2_type_elements[2]; ++ ++ /* This is a hack to get a properly aligned result buffer */ ++ test_structure_2 *ts2_result = ++ (test_structure_2 *) malloc (sizeof(test_structure_2)); ++ ++ ts2_type.size = 0; ++ ts2_type.alignment = 0; ++ ts2_type.type = FFI_TYPE_STRUCT; ++ ts2_type.elements = ts2_type_elements; ++ ts2_type_elements[0] = &ffi_type_longdouble; ++ ts2_type_elements[1] = NULL; ++ ++ args[0] = &ts2_type; ++ values[0] = &ts2_arg; ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts2_type, args) == FFI_OK); ++ ++ ts2_arg.d1 = 5.55; ++ ++ printf ("%Lg\n", ts2_arg.d1); ++ ++ ffi_call(&cif, FFI_FN(struct2), ts2_result, values); ++ ++ printf ("%Lg\n", ts2_result->d1); ++ ++ CHECK(ts2_result->d1 == (long double) 5.55 - 1); ++ ++ free (ts2_result); ++ exit(0); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.call/struct18.c libffi-3.3/testsuite/libffi.call/struct18.c +--- libffi-3.3-bak/testsuite/libffi.call/struct18.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.call/struct18.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,67 @@ ++/* Area: ffi_call ++ Purpose: Check structures. ++ Limitations: none. ++ PR: none. ++ Originator: From the original ffitest.c */ ++ ++/* { dg-do run } */ ++#include "ffitest.h" ++ ++typedef struct ++{ ++ unsigned char uc; ++ long double d; ++ unsigned int ui; ++} test_structure_1; ++ ++static test_structure_1 ABI_ATTR struct1(test_structure_1 ts) ++{ ++ ts.uc++; ++ ts.d--; ++ ts.ui++; ++ ++ return ts; ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[MAX_ARGS]; ++ void *values[MAX_ARGS]; ++ ffi_type ts1_type; ++ ffi_type *ts1_type_elements[4]; ++ ++ test_structure_1 ts1_arg; ++ ++ /* This is a hack to get a properly aligned result buffer */ ++ test_structure_1 *ts1_result = ++ (test_structure_1 *) malloc (sizeof(test_structure_1)); ++ ++ ts1_type.size = 0; ++ ts1_type.alignment = 0; ++ ts1_type.type = FFI_TYPE_STRUCT; ++ ts1_type.elements = ts1_type_elements; ++ ts1_type_elements[0] = &ffi_type_uchar; ++ ts1_type_elements[1] = &ffi_type_longdouble; ++ ts1_type_elements[2] = &ffi_type_uint; ++ ts1_type_elements[3] = NULL; ++ ++ args[0] = &ts1_type; ++ values[0] = &ts1_arg; ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, ++ &ts1_type, args) == FFI_OK); ++ ++ ts1_arg.uc = '\x01'; ++ ts1_arg.d = 3.14159; ++ ts1_arg.ui = 555; ++ ++ ffi_call(&cif, FFI_FN(struct1), ts1_result, values); ++ ++ CHECK(ts1_result->ui == 556); ++ CHECK(ts1_result->d == (long double) 3.14159 - 1); ++ ++ free (ts1_result); ++ exit(0); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.call/struct19.c libffi-3.3/testsuite/libffi.call/struct19.c +--- libffi-3.3-bak/testsuite/libffi.call/struct19.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.call/struct19.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,111 @@ ++/* Area: ffi_call ++ Purpose: Test passing struct in variable argument lists. ++ Limitations: none. ++ PR: none. ++ Originator: ARM Ltd. */ ++ ++/* { dg-do run } */ ++/* { dg-output "" { xfail avr32*-*-* } } */ ++ ++#include "ffitest.h" ++#include ++ ++struct small_tag ++{ ++ unsigned char a; ++ long double b; ++}; ++ ++struct large_tag ++{ ++ unsigned a; ++ unsigned b; ++ unsigned c; ++ unsigned d; ++ unsigned e; ++}; ++ ++static int ++test_fn (int n, struct small_tag s1, struct large_tag l, struct small_tag s2) ++{ ++ printf ("%u %u %u %u %u %u %u %u %u\n", s1.a, (unsigned) s1.b, l.a, l.b, l.c, l.d, l.e, ++ s2.a, (unsigned) s2.b); ++ return n + 1; ++} ++ ++int ++main (void) ++{ ++ ffi_cif cif; ++ void* args[5]; ++ ffi_type* arg_types[5]; ++ ++ ffi_type s_type; ++ ffi_type *s_type_elements[3]; ++ ++ ffi_type l_type; ++ ffi_type *l_type_elements[6]; ++ ++ struct small_tag s1; ++ struct small_tag s2; ++ struct large_tag l1; ++ ++ int n; ++ ffi_arg res; ++ ++ s_type.size = 0; ++ s_type.alignment = 0; ++ s_type.type = FFI_TYPE_STRUCT; ++ s_type.elements = s_type_elements; ++ ++ s_type_elements[0] = &ffi_type_uchar; ++ s_type_elements[1] = &ffi_type_longdouble; ++ s_type_elements[2] = NULL; ++ ++ l_type.size = 0; ++ l_type.alignment = 0; ++ l_type.type = FFI_TYPE_STRUCT; ++ l_type.elements = l_type_elements; ++ ++ l_type_elements[0] = &ffi_type_uint; ++ l_type_elements[1] = &ffi_type_uint; ++ l_type_elements[2] = &ffi_type_uint; ++ l_type_elements[3] = &ffi_type_uint; ++ l_type_elements[4] = &ffi_type_uint; ++ l_type_elements[5] = NULL; ++ ++ arg_types[0] = &ffi_type_sint; ++ arg_types[1] = &s_type; ++ arg_types[2] = &l_type; ++ arg_types[3] = &s_type; ++ arg_types[4] = NULL; ++ ++ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &ffi_type_sint, arg_types) == FFI_OK); ++ ++ s1.a = 5; ++ s1.b = 6; ++ ++ l1.a = 10; ++ l1.b = 11; ++ l1.c = 12; ++ l1.d = 13; ++ l1.e = 14; ++ ++ s2.a = 7; ++ s2.b = 8; ++ ++ n = 41; ++ ++ args[0] = &n; ++ args[1] = &s1; ++ args[2] = &l1; ++ args[3] = &s2; ++ args[4] = NULL; ++ ++ ffi_call(&cif, FFI_FN(test_fn), &res, args); ++ /* { dg-output "5 6 10 11 12 13 14 7 8" } */ ++ printf("res: %d\n", (int) res); ++ /* { dg-output "\nres: 42" } */ ++ ++ return 0; ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.call/struct20.c libffi-3.3/testsuite/libffi.call/struct20.c +--- libffi-3.3-bak/testsuite/libffi.call/struct20.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.call/struct20.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,113 @@ ++/* Area: ffi_call ++ Purpose: Test passing struct in variable argument lists. ++ Limitations: none. ++ PR: none. ++ Originator: ARM Ltd. */ ++ ++/* { dg-do run } */ ++/* { dg-output "" { xfail avr32*-*-* } } */ ++ ++#include "ffitest.h" ++#include ++ ++struct small_tag ++{ ++ unsigned char a; ++ long double b; ++}; ++ ++struct large_tag ++{ ++ unsigned a; ++ unsigned b; ++ unsigned c; ++ unsigned d; ++ unsigned e; ++}; ++ ++static struct small_tag ++test_fn (int n, struct small_tag s1, struct large_tag l, struct small_tag s2) ++{ ++ printf ("%d %u %u %u %u %u %u %u %u %u\n", n, s1.a, (unsigned) s1.b, l.a, l.b, l.c, l.d, l.e, ++ s2.a, (unsigned) s2.b); ++ s1.a += s2.a; ++ s1.b += s2.b; ++ return s1; ++} ++ ++int ++main (void) ++{ ++ ffi_cif cif; ++ void* args[5]; ++ ffi_type* arg_types[5]; ++ ++ ffi_type s_type; ++ ffi_type *s_type_elements[3]; ++ ++ ffi_type l_type; ++ ffi_type *l_type_elements[6]; ++ ++ struct small_tag s1; ++ struct small_tag s2; ++ struct large_tag l1; ++ ++ int n; ++ struct small_tag res; ++ ++ s_type.size = 0; ++ s_type.alignment = 0; ++ s_type.type = FFI_TYPE_STRUCT; ++ s_type.elements = s_type_elements; ++ ++ s_type_elements[0] = &ffi_type_uchar; ++ s_type_elements[1] = &ffi_type_longdouble; ++ s_type_elements[2] = NULL; ++ ++ l_type.size = 0; ++ l_type.alignment = 0; ++ l_type.type = FFI_TYPE_STRUCT; ++ l_type.elements = l_type_elements; ++ ++ l_type_elements[0] = &ffi_type_uint; ++ l_type_elements[1] = &ffi_type_uint; ++ l_type_elements[2] = &ffi_type_uint; ++ l_type_elements[3] = &ffi_type_uint; ++ l_type_elements[4] = &ffi_type_uint; ++ l_type_elements[5] = NULL; ++ ++ arg_types[0] = &ffi_type_sint; ++ arg_types[1] = &s_type; ++ arg_types[2] = &l_type; ++ arg_types[3] = &s_type; ++ arg_types[4] = NULL; ++ ++ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &s_type, arg_types) == FFI_OK); ++ ++ s1.a = 5; ++ s1.b = 6; ++ ++ l1.a = 10; ++ l1.b = 11; ++ l1.c = 12; ++ l1.d = 13; ++ l1.e = 14; ++ ++ s2.a = 7; ++ s2.b = 8; ++ ++ n = 41; ++ ++ args[0] = &n; ++ args[1] = &s1; ++ args[2] = &l1; ++ args[3] = &s2; ++ args[4] = NULL; ++ ++ ffi_call(&cif, FFI_FN(test_fn), &res, args); ++ /* { dg-output "5 6 10 11 12 13 14 7 8" } */ ++ printf("res: %d %d\n", res.a, (unsigned) res.b); ++ /* { dg-output "\nres: 12 14" } */ ++ ++ return 0; ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.call/struct21.c libffi-3.3/testsuite/libffi.call/struct21.c +--- libffi-3.3-bak/testsuite/libffi.call/struct21.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.call/struct21.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,70 @@ ++/* Area: ffi_call ++ Purpose: Check structures. ++ Limitations: none. ++ PR: none. ++ Originator: From the original ffitest.c */ ++ ++/* { dg-do run } */ ++#include "ffitest.h" ++ ++typedef struct ++{ ++ unsigned char uc; ++ double d; ++ long double ld; ++ unsigned int ui; ++} test_structure_1; ++ ++static test_structure_1 ABI_ATTR struct1(test_structure_1 ts) ++{ ++ ts.uc++; ++ ts.d--; ++ ts.ui++; ++ ts.ld += ts.uc + ts.d + ts.ui; ++ return ts; ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[MAX_ARGS]; ++ void *values[MAX_ARGS]; ++ ffi_type ts1_type; ++ ffi_type *ts1_type_elements[5]; ++ ++ test_structure_1 ts1_arg; ++ ++ /* This is a hack to get a properly aligned result buffer */ ++ test_structure_1 *ts1_result = ++ (test_structure_1 *) malloc (sizeof(test_structure_1)); ++ ++ ts1_type.size = 0; ++ ts1_type.alignment = 0; ++ ts1_type.type = FFI_TYPE_STRUCT; ++ ts1_type.elements = ts1_type_elements; ++ ts1_type_elements[0] = &ffi_type_uchar; ++ ts1_type_elements[1] = &ffi_type_double; ++ ts1_type_elements[2] = &ffi_type_longdouble; ++ ts1_type_elements[3] = &ffi_type_uint; ++ ts1_type_elements[4] = NULL; ++ ++ args[0] = &ts1_type; ++ values[0] = &ts1_arg; ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, ++ &ts1_type, args) == FFI_OK); ++ ++ ts1_arg.uc = '\x01'; ++ ts1_arg.d = 3.14159; ++ ts1_arg.ld = 5.0; ++ ts1_arg.ui = 555; ++ ++ ffi_call(&cif, FFI_FN(struct1), ts1_result, values); ++ ++ CHECK(ts1_result->ui == 556); ++ CHECK(ts1_result->d == (double) 3.14159 - 1); ++ CHECK((double)ts1_result->ld == (ts1_arg.uc + 1) + (ts1_arg.d - 1) + (double)ts1_arg.ld + (ts1_arg.ui + 1)); ++ free (ts1_result); ++ exit(0); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.call/struct22.c libffi-3.3/testsuite/libffi.call/struct22.c +--- libffi-3.3-bak/testsuite/libffi.call/struct22.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.call/struct22.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,81 @@ ++/* Area: ffi_call ++ Purpose: Check structures. ++ Limitations: none. ++ PR: none. ++ Originator: From the original ffitest.c */ ++ ++/* { dg-do run } */ ++#include "ffitest.h" ++ ++struct Ls { ++ double d; ++ long double ld; ++ unsigned char c1, c2; ++ int i; ++ unsigned char c3; ++}; ++ ++static struct Ls ABI_ATTR ++struct1 (double a1, int a2, struct Ls a3, int a4, struct Ls a5) ++{ ++ int res = a1 + a2 + a3.d + a3.ld + a3.c1 + a3.c2 + a3.i + a3.c3 + a4 + a5.d + a5.ld + a5.c1 + a5.c2 + a5.i + a5.c3; ++ struct Ls ret = {res, res + 1, res + 2, res + 3, res + 4, res + 5}; ++ return ret; ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[MAX_ARGS]; ++ void *values[MAX_ARGS]; ++ ffi_type Ls_type; ++ ffi_type *Ls_type_elements[7]; ++ ++ double a1 = 1; ++ int a2 = 2; ++ struct Ls a3 = {3, 4, 5, 6, 7, 8}; ++ int a4 = 9; ++ struct Ls a5 = {10, 11, 12, 13, 14, 15}; ++ ++ struct Ls r1, r2; ++ ++ Ls_type.size = 0; ++ Ls_type.alignment = 0; ++ Ls_type.type = FFI_TYPE_STRUCT; ++ Ls_type.elements = Ls_type_elements; ++ Ls_type_elements[0] = &ffi_type_double; ++ Ls_type_elements[1] = &ffi_type_longdouble; ++ Ls_type_elements[2] = &ffi_type_uchar; ++ Ls_type_elements[3] = &ffi_type_uchar; ++ Ls_type_elements[4] = &ffi_type_sint; ++ Ls_type_elements[5] = &ffi_type_uchar; ++ Ls_type_elements[6] = NULL; ++ ++ args[0] = &ffi_type_double; ++ args[1] = &ffi_type_sint; ++ args[2] = &Ls_type; ++ args[3] = &ffi_type_sint; ++ args[4] = &Ls_type; ++ values[0] = &a1; ++ values[1] = &a2; ++ values[2] = &a3; ++ values[3] = &a4; ++ values[4] = &a5; ++ ++ r1 = struct1 (a1, a2, a3, a4, a5); ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, ABI_NUM, 5, ++ &Ls_type, args) == FFI_OK); ++ ++ ffi_call(&cif, FFI_FN(struct1), &r2, values); ++ ++ CHECK(r1.d == r2.d); ++ CHECK(r1.ld == r2.ld); ++ CHECK(r1.c1 == r2.c1); ++ CHECK(r1.c2 == r2.c2); ++ CHECK(r1.i == r2.i); ++ CHECK(r1.c3 == r2.c3); ++ ++ exit(0); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.call/va_2.c libffi-3.3/testsuite/libffi.call/va_2.c +--- libffi-3.3-bak/testsuite/libffi.call/va_2.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.call/va_2.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,106 @@ ++/* Area: ffi_call ++ Purpose: Check return value double, with many arguments ++ Limitations: none. ++ PR: none. ++ Originator: From the original ffitest.c */ ++ ++/* { dg-do run } */ ++#include "ffitest.h" ++ ++#include ++#include ++#include ++#include ++ ++typedef struct ++{ ++ char c1, c2; ++} Ss; ++ ++static int many(double a1, ...) ++{ ++ va_list ap; ++ float a2; ++ Ss a3; ++ long double a4; ++ float a5; ++ short a6; ++ int a7; ++ float a8; ++ int r; ++ ++ va_start (ap, a1); ++ a2 = va_arg (ap, double); ++ a3 = va_arg (ap, Ss); ++ a4 = va_arg (ap, long double); ++ a5 = va_arg (ap, double); ++ a6 = va_arg (ap, int); ++ a7 = va_arg (ap, int); ++ a8 = va_arg (ap, double); ++ va_end (ap); ++ ++r = a1 + a2 + a3.c1 + a3.c2 + a4 + a5 + a6 + a7 + a8; ++return r; ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[9]; ++ ffi_type Ss_type; ++ ffi_type *Ss_type_elements[4]; ++ ++ double a1 = 1; ++ float a2 = 2; ++ Ss a3 = {3, 4}; ++ long double a4 = 5; ++ float a5 = 6; ++ short a6 = 7; ++ int a7 = 8; ++ float a8 = 9; ++ ++ ffi_arg r1; ++ int r2; ++ ++ void *values[9]; ++ ++ Ss_type.size = 0; ++ Ss_type.alignment = 0; ++ Ss_type.type = FFI_TYPE_STRUCT; ++ Ss_type.elements = Ss_type_elements; ++ Ss_type_elements[0] = &ffi_type_uchar; ++ Ss_type_elements[1] = &ffi_type_uchar; ++ Ss_type_elements[2] = NULL; ++ ++ args[0] = &ffi_type_double; ++ args[1] = &ffi_type_float; ++ args[2] = &Ss_type; ++ args[3] = &ffi_type_longdouble; ++ args[4] = &ffi_type_float; ++ args[5] = &ffi_type_sshort; ++ args[6] = &ffi_type_sint; ++ args[7] = &ffi_type_float; ++ args[8] = NULL; ++ ++ values[0] = &a1; ++ values[1] = &a2; ++ values[2] = &a3; ++ values[3] = &a4; ++ values[4] = &a5; ++ values[5] = &a6; ++ values[6] = &a7; ++ values[7] = &a8; ++ values[8] = NULL; ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 8, ++ &ffi_type_sint, args) == FFI_OK); ++ ++ ffi_call(&cif, FFI_FN(many), &r1, values); ++ ++ r2 = many(a1,a2,a3,a4,a5,a6,a7,a8); ++ if ((int)r1 == r2) ++ exit(0); ++ else ++ abort(); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.call/va_struct4.c libffi-3.3/testsuite/libffi.call/va_struct4.c +--- libffi-3.3-bak/testsuite/libffi.call/va_struct4.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.call/va_struct4.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,121 @@ ++/* Area: ffi_call ++ Purpose: Test passing struct in variable argument lists. ++ Limitations: none. ++ PR: none. ++ Originator: ARM Ltd. */ ++ ++/* { dg-do run } */ ++/* { dg-output "" { xfail avr32*-*-* } } */ ++ ++#include "ffitest.h" ++#include ++ ++struct small_tag ++{ ++ unsigned char a; ++ long double b; ++}; ++ ++struct large_tag ++{ ++ unsigned a; ++ unsigned b; ++ unsigned c; ++ unsigned d; ++ unsigned e; ++}; ++ ++static int ++test_fn (int n, ...) ++{ ++ va_list ap; ++ struct small_tag s1; ++ struct small_tag s2; ++ struct large_tag l; ++ ++ va_start (ap, n); ++ s1 = va_arg (ap, struct small_tag); ++ l = va_arg (ap, struct large_tag); ++ s2 = va_arg (ap, struct small_tag); ++ printf ("%u %u %u %u %u %u %u %u %u\n", s1.a, (unsigned) s1.b, l.a, l.b, l.c, l.d, l.e, ++ s2.a, (unsigned) s2.b); ++ va_end (ap); ++ return n + 1; ++} ++ ++int ++main (void) ++{ ++ ffi_cif cif; ++ void* args[5]; ++ ffi_type* arg_types[5]; ++ ++ ffi_type s_type; ++ ffi_type *s_type_elements[3]; ++ ++ ffi_type l_type; ++ ffi_type *l_type_elements[6]; ++ ++ struct small_tag s1; ++ struct small_tag s2; ++ struct large_tag l1; ++ ++ int n; ++ ffi_arg res; ++ ++ s_type.size = 0; ++ s_type.alignment = 0; ++ s_type.type = FFI_TYPE_STRUCT; ++ s_type.elements = s_type_elements; ++ ++ s_type_elements[0] = &ffi_type_uchar; ++ s_type_elements[1] = &ffi_type_longdouble; ++ s_type_elements[2] = NULL; ++ ++ l_type.size = 0; ++ l_type.alignment = 0; ++ l_type.type = FFI_TYPE_STRUCT; ++ l_type.elements = l_type_elements; ++ ++ l_type_elements[0] = &ffi_type_uint; ++ l_type_elements[1] = &ffi_type_uint; ++ l_type_elements[2] = &ffi_type_uint; ++ l_type_elements[3] = &ffi_type_uint; ++ l_type_elements[4] = &ffi_type_uint; ++ l_type_elements[5] = NULL; ++ ++ arg_types[0] = &ffi_type_sint; ++ arg_types[1] = &s_type; ++ arg_types[2] = &l_type; ++ arg_types[3] = &s_type; ++ arg_types[4] = NULL; ++ ++ CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 4, &ffi_type_sint, arg_types) == FFI_OK); ++ ++ s1.a = 5; ++ s1.b = 6; ++ ++ l1.a = 10; ++ l1.b = 11; ++ l1.c = 12; ++ l1.d = 13; ++ l1.e = 14; ++ ++ s2.a = 7; ++ s2.b = 8; ++ ++ n = 41; ++ ++ args[0] = &n; ++ args[1] = &s1; ++ args[2] = &l1; ++ args[3] = &s2; ++ args[4] = NULL; ++ ++ ffi_call(&cif, FFI_FN(test_fn), &res, args); ++ /* { dg-output "5 6 10 11 12 13 14 7 8" } */ ++ printf("res: %d\n", (int) res); ++ /* { dg-output "\nres: 42" } */ ++ ++ return 0; ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.call/va_struct5.c libffi-3.3/testsuite/libffi.call/va_struct5.c +--- libffi-3.3-bak/testsuite/libffi.call/va_struct5.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.call/va_struct5.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,123 @@ ++/* Area: ffi_call ++ Purpose: Test passing struct in variable argument lists. ++ Limitations: none. ++ PR: none. ++ Originator: ARM Ltd. */ ++ ++/* { dg-do run } */ ++/* { dg-output "" { xfail avr32*-*-* } } */ ++ ++#include "ffitest.h" ++#include ++ ++struct small_tag ++{ ++ unsigned char a; ++ long double b; ++}; ++ ++struct large_tag ++{ ++ unsigned a; ++ unsigned b; ++ unsigned c; ++ unsigned d; ++ unsigned e; ++}; ++ ++static struct small_tag ++test_fn (int n, ...) ++{ ++ va_list ap; ++ struct small_tag s1; ++ struct small_tag s2; ++ struct large_tag l; ++ ++ va_start (ap, n); ++ s1 = va_arg (ap, struct small_tag); ++ l = va_arg (ap, struct large_tag); ++ s2 = va_arg (ap, struct small_tag); ++ printf ("%u %u %u %u %u %u %u %u %u\n", s1.a, (unsigned) s1.b, l.a, l.b, l.c, l.d, l.e, ++ s2.a, (unsigned) s2.b); ++ va_end (ap); ++ s1.a += s2.a; ++ s1.b += s2.b; ++ return s1; ++} ++ ++int ++main (void) ++{ ++ ffi_cif cif; ++ void* args[5]; ++ ffi_type* arg_types[5]; ++ ++ ffi_type s_type; ++ ffi_type *s_type_elements[3]; ++ ++ ffi_type l_type; ++ ffi_type *l_type_elements[6]; ++ ++ struct small_tag s1; ++ struct small_tag s2; ++ struct large_tag l1; ++ ++ int n; ++ struct small_tag res; ++ ++ s_type.size = 0; ++ s_type.alignment = 0; ++ s_type.type = FFI_TYPE_STRUCT; ++ s_type.elements = s_type_elements; ++ ++ s_type_elements[0] = &ffi_type_uchar; ++ s_type_elements[1] = &ffi_type_longdouble; ++ s_type_elements[2] = NULL; ++ ++ l_type.size = 0; ++ l_type.alignment = 0; ++ l_type.type = FFI_TYPE_STRUCT; ++ l_type.elements = l_type_elements; ++ ++ l_type_elements[0] = &ffi_type_uint; ++ l_type_elements[1] = &ffi_type_uint; ++ l_type_elements[2] = &ffi_type_uint; ++ l_type_elements[3] = &ffi_type_uint; ++ l_type_elements[4] = &ffi_type_uint; ++ l_type_elements[5] = NULL; ++ ++ arg_types[0] = &ffi_type_sint; ++ arg_types[1] = &s_type; ++ arg_types[2] = &l_type; ++ arg_types[3] = &s_type; ++ arg_types[4] = NULL; ++ ++ CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 4, &s_type, arg_types) == FFI_OK); ++ ++ s1.a = 5; ++ s1.b = 6; ++ ++ l1.a = 10; ++ l1.b = 11; ++ l1.c = 12; ++ l1.d = 13; ++ l1.e = 14; ++ ++ s2.a = 7; ++ s2.b = 8; ++ ++ n = 41; ++ ++ args[0] = &n; ++ args[1] = &s1; ++ args[2] = &l1; ++ args[3] = &s2; ++ args[4] = NULL; ++ ++ ffi_call(&cif, FFI_FN(test_fn), &res, args); ++ /* { dg-output "5 6 10 11 12 13 14 7 8" } */ ++ printf("res: %d %d\n", res.a, (unsigned) res.b); ++ /* { dg-output "\nres: 12 14" } */ ++ ++ return 0; ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.closures/cls_float_va.c libffi-3.3/testsuite/libffi.closures/cls_float_va.c +--- libffi-3.3-bak/testsuite/libffi.closures/cls_float_va.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.closures/cls_float_va.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,61 @@ ++/* Area: ffi_call, closure_call ++ Purpose: Test floats passed in variable argument lists. ++ Limitations: none. ++ PR: none. ++ Originator: Blake Chaffin 6/6/2007 */ ++ ++/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ ++/* { dg-output "" { xfail avr32*-*-* } } */ ++/* { dg-output "" { xfail mips-sgi-irix6* } } PR libffi/46660 */ ++ ++#include "ffitest.h" ++ ++static void ++cls_float_va_fn(ffi_cif* cif __UNUSED__, void* resp, ++ void** args, void* userdata __UNUSED__) ++{ ++ char* format = *(char**)args[0]; ++ float floatValue = *(float*)args[1]; ++ ++ *(ffi_arg*)resp = printf(format, floatValue); ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ void *code; ++ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); ++ void* args[3]; ++ ffi_type* arg_types[3]; ++ ++ char* format = "%.1f\n"; ++ float floatArg = 7; ++ ffi_arg res = 0; ++ ++ arg_types[0] = &ffi_type_pointer; ++ arg_types[1] = &ffi_type_float; ++ arg_types[2] = NULL; ++ ++ /* This printf call is variadic */ ++ CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2, &ffi_type_sint, ++ arg_types) == FFI_OK); ++ ++ args[0] = &format; ++ args[1] = &floatArg; ++ args[2] = NULL; ++ ++ ffi_call(&cif, FFI_FN(printf), &res, args); ++ /* { dg-output "7.0" } */ ++ printf("res: %d\n", (int) res); ++ /* { dg-output "\nres: 4" } */ ++ ++ CHECK(ffi_prep_closure_loc(pcl, &cif, cls_float_va_fn, NULL, ++ code) == FFI_OK); ++ ++ res = ((int(*)(char*, ...))(code))(format, floatArg); ++ /* { dg-output "\n7.0" } */ ++ printf("res: %d\n", (int) res); ++ /* { dg-output "\nres: 4" } */ ++ ++ exit(0); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/cls_complex_struct1_double.c libffi-3.3/testsuite/libffi.complex/cls_complex_struct1_double.c +--- libffi-3.3-bak/testsuite/libffi.complex/cls_complex_struct1_double.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/cls_complex_struct1_double.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,4 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_double.inc" ++#include "cls_complex_struct1.inc" +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/cls_complex_struct1_float.c libffi-3.3/testsuite/libffi.complex/cls_complex_struct1_float.c +--- libffi-3.3-bak/testsuite/libffi.complex/cls_complex_struct1_float.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/cls_complex_struct1_float.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,4 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_float.inc" ++#include "cls_complex_struct1.inc" +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/cls_complex_struct1.inc libffi-3.3/testsuite/libffi.complex/cls_complex_struct1.inc +--- libffi-3.3-bak/testsuite/libffi.complex/cls_complex_struct1.inc 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/cls_complex_struct1.inc 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,66 @@ ++/* -*-c-*- */ ++#include "ffitest.h" ++#include ++ ++typedef struct Cs { ++ _Complex T_C_TYPE x; ++} Cs; ++ ++Cs gc; ++ ++void ++closure_test_fn(Cs p) ++{ ++ printf("%.1f,%.1f\n", ++ T_CONV creal (p.x), T_CONV cimag (p.x)); ++ gc = p; ++} ++ ++void ++closure_test_gn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__, ++ void** args, void* userdata __UNUSED__) ++{ ++ closure_test_fn(*(Cs*)args[0]); ++} ++ ++int main(int argc __UNUSED__, char** argv __UNUSED__) ++{ ++ ffi_cif cif; ++ ++ void *code; ++ ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); ++ ffi_type *cl_arg_types[1]; ++ ++ ffi_type ts1_type; ++ ffi_type* ts1_type_elements[4]; ++ ++ Cs arg = { 1.0 + 11.0 * I}; ++ ++ ts1_type.size = 0; ++ ts1_type.alignment = 0; ++ ts1_type.type = FFI_TYPE_STRUCT; ++ ts1_type.elements = ts1_type_elements; ++ ++ ts1_type_elements[0] = &T_FFI_TYPE; ++ ts1_type_elements[1] = NULL; ++ ++ cl_arg_types[0] = &ts1_type; ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, ++ &ffi_type_void, cl_arg_types) == FFI_OK); ++ ++ CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_gn, NULL, code) == FFI_OK); ++ ++ gc.x = 0.0 + 0.0 * I; ++ ((void*(*)(Cs))(code))(arg); ++ /* { dg-output "1.0,11.0i\n" } */ ++ CHECK (gc.x == arg.x); ++ ++ gc.x = 0.0 + 0.0 * I; ++ closure_test_fn(arg); ++ /* { dg-output "1.0,11.0i\n" } */ ++ CHECK (gc.x == arg.x); ++ ++ return 0; ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/cls_complex_struct1_longdouble.c libffi-3.3/testsuite/libffi.complex/cls_complex_struct1_longdouble.c +--- libffi-3.3-bak/testsuite/libffi.complex/cls_complex_struct1_longdouble.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/cls_complex_struct1_longdouble.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,4 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_longdouble.inc" ++#include "cls_complex_struct1.inc" +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/return_complex_struct_double.c libffi-3.3/testsuite/libffi.complex/return_complex_struct_double.c +--- libffi-3.3-bak/testsuite/libffi.complex/return_complex_struct_double.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/return_complex_struct_double.c 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,4 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_double.inc" ++#include "return_complex_struct.inc" +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/return_complex_struct_float.c libffi-3.3/testsuite/libffi.complex/return_complex_struct_float.c +--- libffi-3.3-bak/testsuite/libffi.complex/return_complex_struct_float.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/return_complex_struct_float.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,4 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_float.inc" ++#include "return_complex_struct.inc" +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/return_complex_struct.inc libffi-3.3/testsuite/libffi.complex/return_complex_struct.inc +--- libffi-3.3-bak/testsuite/libffi.complex/return_complex_struct.inc 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/return_complex_struct.inc 2022-10-10 15:55:47.206208677 +0800 +@@ -0,0 +1,58 @@ ++/* -*-c-*- */ ++#include "ffitest.h" ++#include ++ ++typedef struct Cs { ++ _Complex T_C_TYPE x; ++} Cs; ++ ++static Cs return_c(_Complex T_C_TYPE c1, float fl2, unsigned int in3, _Complex T_C_TYPE c4) ++{ ++ Cs r = {c1 + fl2 + in3 + c4}; ++ return r; ++} ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[MAX_ARGS]; ++ void *values[MAX_ARGS]; ++ ++ Cs rc, rc2; ++ _Complex T_C_TYPE c1, c4; ++ float fl2; ++ unsigned int in3; ++ args[0] = &T_FFI_TYPE; ++ args[1] = &ffi_type_float; ++ args[2] = &ffi_type_uint; ++ args[3] = &T_FFI_TYPE; ++ values[0] = &c1; ++ values[1] = &fl2; ++ values[2] = &in3; ++ values[3] = &c4; ++ ++ ffi_type Cs_type; ++ ffi_type* Cs_type_elements[4]; ++ Cs_type.size = 0; ++ Cs_type.alignment = 0; ++ Cs_type.type = FFI_TYPE_STRUCT; ++ Cs_type.elements = Cs_type_elements; ++ ++ Cs_type_elements[0] = &T_FFI_TYPE; ++ Cs_type_elements[1] = NULL; ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, ++ &Cs_type, args) == FFI_OK); ++ c1 = 127.0 + 255.0 * I; ++ fl2 = 128.0; ++ in3 = 255; ++ c4 = 512.7 + 1024.1 * I; ++ ++ ffi_call(&cif, FFI_FN(return_c), &rc, values); ++ rc2 = return_c(c1, fl2, in3, c4); ++ printf ("%f,%fi vs %f,%fi\n", ++ T_CONV creal (rc.x), T_CONV cimag (rc.x), ++ T_CONV creal (rc2.x), T_CONV cimag (rc2.x)); ++ CHECK(rc.x == rc2.x); ++ exit(0); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/return_complex_struct_longdouble.c libffi-3.3/testsuite/libffi.complex/return_complex_struct_longdouble.c +--- libffi-3.3-bak/testsuite/libffi.complex/return_complex_struct_longdouble.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/return_complex_struct_longdouble.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,4 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_longdouble.inc" ++#include "return_complex_struct.inc" +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va1_double.c libffi-3.3/testsuite/libffi.complex/test_complex_non_va1_double.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va1_double.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_non_va1_double.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_double.inc" ++#include "test_complex_non_va1.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va1_float.c libffi-3.3/testsuite/libffi.complex/test_complex_non_va1_float.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va1_float.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_non_va1_float.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_float.inc" ++#include "test_complex_non_va1.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va1.inc libffi-3.3/testsuite/libffi.complex/test_complex_non_va1.inc +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va1.inc 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_non_va1.inc 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,71 @@ ++/* -*-c-*- */ ++#include "ffitest.h" ++#include ++#include ++ ++_Complex long double ++return_c(signed int a1, ++//... ++_Complex long double a2, ++_Complex T_C_TYPE a4, ++signed int a5, ++_Complex long double a6 ++) ++{ ++// va_list ap; ++// _Complex long double a2; ++// _Complex T_C_TYPE a4; ++// signed int a5; ++// _Complex long double a6; ++// va_start (ap, a1); ++// a2 = va_arg (ap, _Complex long double); ++// a4 = va_arg (ap, _Complex T_C_TYPE); ++// a5 = va_arg (ap, signed int); ++// a6 = va_arg (ap, _Complex long double); ++ ++ volatile _Complex long double r = a1 + a2 + a4 + a5 + a6; ++ return r; ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[MAX_ARGS]; ++ void *values[MAX_ARGS]; ++ ++ _Complex long double r1, r2; ++ ++ signed int a1; ++ _Complex long double a2; ++ _Complex T_C_TYPE a4; ++ signed int a5; ++ _Complex long double a6; ++ ++ args[0] = &ffi_type_sint; ++ args[1] = &ffi_type_complex_longdouble; ++ args[2] = &T_FFI_TYPE; ++ args[3] = &ffi_type_sint; ++ args[4] = &ffi_type_complex_longdouble; ++ values[0] = &a1; ++ values[1] = &a2; ++ values[2] = &a4; ++ values[3] = &a5; ++ values[4] = &a6; ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 5, ++ &ffi_type_complex_longdouble, args) == FFI_OK); ++// CHECK(ffi_prep_cif_var (&cif, FFI_DEFAULT_ABI, 1, 5, ++// &ffi_type_complex_longdouble, args) == FFI_OK); ++ ++ a1 = 5; ++ a2 = 127.0 + 255.0 * I; ++ a4 = 512.7 + 1024.1 * I; ++ a5 = 7; ++ a6 = 89 + 12 * I; ++ ++ ffi_call(&cif, FFI_FN(return_c), &r1, values); ++ r2 = return_c(a1, a2, a4, a5, a6); ++ CHECK(r1 == r2); ++ exit(0); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va1_longdouble.c libffi-3.3/testsuite/libffi.complex/test_complex_non_va1_longdouble.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va1_longdouble.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_non_va1_longdouble.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_longdouble.inc" ++#include "test_complex_non_va1.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va2_double.c libffi-3.3/testsuite/libffi.complex/test_complex_non_va2_double.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va2_double.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_non_va2_double.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_double.inc" ++#include "test_complex_non_va2.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va2_float.c libffi-3.3/testsuite/libffi.complex/test_complex_non_va2_float.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va2_float.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_non_va2_float.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_float.inc" ++#include "test_complex_non_va2.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va2.inc libffi-3.3/testsuite/libffi.complex/test_complex_non_va2.inc +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va2.inc 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_non_va2.inc 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,78 @@ ++/* -*-c-*- */ ++#include "ffitest.h" ++#include ++#include ++ ++_Complex float ++return_c(signed int a1, ++//... ++_Complex long double a2, ++signed int a3, ++_Complex T_C_TYPE a4, ++signed int a5, ++_Complex long double a6 ++) ++{ ++// va_list ap; ++// _Complex long double a2; ++// signed int a3; ++// _Complex T_C_TYPE a4; ++// signed int a5; ++// _Complex long double a6; ++// va_start (ap, a1); ++// a2 = va_arg (ap, _Complex long double); ++// a3 = va_arg (ap, signed int); ++// a4 = va_arg (ap, _Complex T_C_TYPE); ++// a5 = va_arg (ap, signed int); ++// a6 = va_arg (ap, _Complex long double); ++ ++ volatile _Complex long double r = a1 + a2 + a3 + a4 + a5 + a6; ++ return r; ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[MAX_ARGS]; ++ void *values[MAX_ARGS]; ++ ++ _Complex float r1, r2; ++ ++ signed int a1; ++ _Complex long double a2; ++ signed int a3; ++ _Complex T_C_TYPE a4; ++ signed int a5; ++ _Complex long double a6; ++ ++ args[0] = &ffi_type_sint; ++ args[1] = &ffi_type_complex_longdouble; ++ args[2] = &ffi_type_sint; ++ args[3] = &T_FFI_TYPE; ++ args[4] = &ffi_type_sint; ++ args[5] = &ffi_type_complex_longdouble; ++ values[0] = &a1; ++ values[1] = &a2; ++ values[2] = &a3; ++ values[3] = &a4; ++ values[4] = &a5; ++ values[5] = &a6; ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 6, ++ &ffi_type_complex_float, args) == FFI_OK); ++// CHECK(ffi_prep_cif_var (&cif, FFI_DEFAULT_ABI, 1, 6, ++// &ffi_type_complex_longdouble, args) == FFI_OK); ++ ++ a1 = 5; ++ a2 = 127.0 + 255.0 * I; ++ a3 = 6; ++ a4 = 512.7 + 1024.1 * I; ++ a5 = 7; ++ a6 = 89 + 12 * I; ++ ++ ffi_call(&cif, FFI_FN(return_c), &r1, values); ++ r2 = return_c(a1, a2, a3, a4, a5, a6); ++ CHECK(r1 == r2); ++ exit(0); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va2_longdouble.c libffi-3.3/testsuite/libffi.complex/test_complex_non_va2_longdouble.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va2_longdouble.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_non_va2_longdouble.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_longdouble.inc" ++#include "test_complex_non_va2.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va3_double.c libffi-3.3/testsuite/libffi.complex/test_complex_non_va3_double.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va3_double.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_non_va3_double.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_double.inc" ++#include "test_complex_non_va3.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va3_float.c libffi-3.3/testsuite/libffi.complex/test_complex_non_va3_float.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va3_float.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_non_va3_float.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_float.inc" ++#include "test_complex_non_va3.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va3.inc libffi-3.3/testsuite/libffi.complex/test_complex_non_va3.inc +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va3.inc 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_non_va3.inc 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,78 @@ ++/* -*-c-*- */ ++#include "ffitest.h" ++#include ++#include ++ ++_Complex float ++return_c(signed int a1, ++//... ++_Complex float a2, ++signed int a3, ++_Complex T_C_TYPE a4, ++signed int a5, ++_Complex long double a6 ++) ++{ ++// va_list ap; ++// _Complex long double a2; ++// signed int a3; ++// _Complex T_C_TYPE a4; ++// signed int a5; ++// _Complex long double a6; ++// va_start (ap, a1); ++// a2 = va_arg (ap, _Complex long double); ++// a3 = va_arg (ap, signed int); ++// a4 = va_arg (ap, _Complex T_C_TYPE); ++// a5 = va_arg (ap, signed int); ++// a6 = va_arg (ap, _Complex long double); ++ ++ volatile _Complex long double r = a1 + a2 + a3 + a4 + a5 + a6; ++ return r; ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[MAX_ARGS]; ++ void *values[MAX_ARGS]; ++ ++ _Complex float r1, r2; ++ ++ signed int a1; ++ _Complex float a2; ++ signed int a3; ++ _Complex T_C_TYPE a4; ++ signed int a5; ++ _Complex long double a6; ++ ++ args[0] = &ffi_type_sint; ++ args[1] = &ffi_type_complex_float; ++ args[2] = &ffi_type_sint; ++ args[3] = &T_FFI_TYPE; ++ args[4] = &ffi_type_sint; ++ args[5] = &ffi_type_complex_longdouble; ++ values[0] = &a1; ++ values[1] = &a2; ++ values[2] = &a3; ++ values[3] = &a4; ++ values[4] = &a5; ++ values[5] = &a6; ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 6, ++ &ffi_type_complex_float, args) == FFI_OK); ++// CHECK(ffi_prep_cif_var (&cif, FFI_DEFAULT_ABI, 1, 6, ++// &ffi_type_complex_longdouble, args) == FFI_OK); ++ ++ a1 = 5; ++ a2 = 127.0 + 255.0 * I; ++ a3 = 6; ++ a4 = 512.7 + 1024.1 * I; ++ a5 = 7; ++ a6 = 89 + 12 * I; ++ ++ ffi_call(&cif, FFI_FN(return_c), &r1, values); ++ r2 = return_c(a1, a2, a3, a4, a5, a6); ++ CHECK(r1 == r2); ++ exit(0); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va3_longdouble.c libffi-3.3/testsuite/libffi.complex/test_complex_non_va3_longdouble.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va3_longdouble.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_non_va3_longdouble.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_longdouble.inc" ++#include "test_complex_non_va3.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va_double.c libffi-3.3/testsuite/libffi.complex/test_complex_non_va_double.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va_double.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_non_va_double.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_double.inc" ++#include "test_complex_non_va.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va_float.c libffi-3.3/testsuite/libffi.complex/test_complex_non_va_float.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va_float.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_non_va_float.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_float.inc" ++#include "test_complex_non_va.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va.inc libffi-3.3/testsuite/libffi.complex/test_complex_non_va.inc +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va.inc 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_non_va.inc 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,78 @@ ++/* -*-c-*- */ ++#include "ffitest.h" ++#include ++#include ++ ++_Complex long double ++return_c(signed int a1, ++//... ++_Complex long double a2, ++signed int a3, ++_Complex T_C_TYPE a4, ++signed int a5, ++_Complex long double a6 ++) ++{ ++// va_list ap; ++// _Complex long double a2; ++// signed int a3; ++// _Complex T_C_TYPE a4; ++// signed int a5; ++// _Complex long double a6; ++// va_start (ap, a1); ++// a2 = va_arg (ap, _Complex long double); ++// a3 = va_arg (ap, signed int); ++// a4 = va_arg (ap, _Complex T_C_TYPE); ++// a5 = va_arg (ap, signed int); ++// a6 = va_arg (ap, _Complex long double); ++ ++ volatile _Complex long double r = a1 + a2 + a3 + a4 + a5 + a6; ++ return r; ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[MAX_ARGS]; ++ void *values[MAX_ARGS]; ++ ++ _Complex long double r1, r2; ++ ++ signed int a1; ++ _Complex long double a2; ++ signed int a3; ++ _Complex T_C_TYPE a4; ++ signed int a5; ++ _Complex long double a6; ++ ++ args[0] = &ffi_type_sint; ++ args[1] = &ffi_type_complex_longdouble; ++ args[2] = &ffi_type_sint; ++ args[3] = &T_FFI_TYPE; ++ args[4] = &ffi_type_sint; ++ args[5] = &ffi_type_complex_longdouble; ++ values[0] = &a1; ++ values[1] = &a2; ++ values[2] = &a3; ++ values[3] = &a4; ++ values[4] = &a5; ++ values[5] = &a6; ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 6, ++ &ffi_type_complex_longdouble, args) == FFI_OK); ++// CHECK(ffi_prep_cif_var (&cif, FFI_DEFAULT_ABI, 1, 6, ++// &ffi_type_complex_longdouble, args) == FFI_OK); ++ ++ a1 = 5; ++ a2 = 127.0 + 255.0 * I; ++ a3 = 6; ++ a4 = 512.7 + 1024.1 * I; ++ a5 = 7; ++ a6 = 89 + 12 * I; ++ ++ ffi_call(&cif, FFI_FN(return_c), &r1, values); ++ r2 = return_c(a1, a2, a3, a4, a5, a6); ++ CHECK(r1 == r2); ++ exit(0); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va_longdouble.c libffi-3.3/testsuite/libffi.complex/test_complex_non_va_longdouble.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_non_va_longdouble.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_non_va_longdouble.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_longdouble.inc" ++#include "test_complex_non_va.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_va1_double.c libffi-3.3/testsuite/libffi.complex/test_complex_va1_double.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_va1_double.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_va1_double.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_double.inc" ++#include "test_complex_va1.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_va1_float.c libffi-3.3/testsuite/libffi.complex/test_complex_va1_float.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_va1_float.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_va1_float.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_float.inc" ++#include "test_complex_va1.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_va1.inc libffi-3.3/testsuite/libffi.complex/test_complex_va1.inc +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_va1.inc 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_va1.inc 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,71 @@ ++/* -*-c-*- */ ++#include "ffitest.h" ++#include ++#include ++ ++_Complex long double ++return_c(signed int a1, ++... ++//_Complex long double a2, ++//_Complex T_C_TYPE a4, ++//signed int a5, ++//_Complex long double a6 ++) ++{ ++ va_list ap; ++ _Complex long double a2; ++ _Complex T_C_TYPE a4; ++ signed int a5; ++ _Complex long double a6; ++ va_start (ap, a1); ++ a2 = va_arg (ap, _Complex long double); ++ a4 = va_arg (ap, _Complex T_C_TYPE); ++ a5 = va_arg (ap, signed int); ++ a6 = va_arg (ap, _Complex long double); ++ ++ volatile _Complex long double r = a1 + a2 + a4 + a5 + a6; ++ return r; ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[MAX_ARGS]; ++ void *values[MAX_ARGS]; ++ ++ _Complex long double r1, r2; ++ ++ signed int a1; ++ _Complex long double a2; ++ _Complex T_C_TYPE a4; ++ signed int a5; ++ _Complex long double a6; ++ ++ args[0] = &ffi_type_sint; ++ args[1] = &ffi_type_complex_longdouble; ++ args[2] = &T_FFI_TYPE; ++ args[3] = &ffi_type_sint; ++ args[4] = &ffi_type_complex_longdouble; ++ values[0] = &a1; ++ values[1] = &a2; ++ values[2] = &a4; ++ values[3] = &a5; ++ values[4] = &a6; ++ ++ /* Initialize the cif */ ++// CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 5, ++// &ffi_type_complex_longdouble, args) == FFI_OK); ++ CHECK(ffi_prep_cif_var (&cif, FFI_DEFAULT_ABI, 1, 5, ++ &ffi_type_complex_longdouble, args) == FFI_OK); ++ ++ a1 = 5; ++ a2 = 127.0 + 255.0 * I; ++ a4 = 512.7 + 1024.1 * I; ++ a5 = 7; ++ a6 = 89 + 12 * I; ++ ++ ffi_call(&cif, FFI_FN(return_c), &r1, values); ++ r2 = return_c(a1, a2, a4, a5, a6); ++ CHECK(r1 == r2); ++ exit(0); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_va1_longdouble.c libffi-3.3/testsuite/libffi.complex/test_complex_va1_longdouble.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_va1_longdouble.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_va1_longdouble.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_longdouble.inc" ++#include "test_complex_va1.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_va2_double.c libffi-3.3/testsuite/libffi.complex/test_complex_va2_double.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_va2_double.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_va2_double.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_double.inc" ++#include "test_complex_va2.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_va2_float.c libffi-3.3/testsuite/libffi.complex/test_complex_va2_float.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_va2_float.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_va2_float.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_float.inc" ++#include "test_complex_va2.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_va2.inc libffi-3.3/testsuite/libffi.complex/test_complex_va2.inc +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_va2.inc 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_va2.inc 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,78 @@ ++/* -*-c-*- */ ++#include "ffitest.h" ++#include ++#include ++ ++_Complex float ++return_c(signed int a1, ++... ++//_Complex long double a2, ++//signed int a3, ++//_Complex T_C_TYPE a4, ++//signed int a5, ++//_Complex long double a6 ++) ++{ ++ va_list ap; ++ _Complex long double a2; ++ signed int a3; ++ _Complex T_C_TYPE a4; ++ signed int a5; ++ _Complex long double a6; ++ va_start (ap, a1); ++ a2 = va_arg (ap, _Complex long double); ++ a3 = va_arg (ap, signed int); ++ a4 = va_arg (ap, _Complex T_C_TYPE); ++ a5 = va_arg (ap, signed int); ++ a6 = va_arg (ap, _Complex long double); ++ ++ volatile _Complex long double r = a1 + a2 + a3 + a4 + a5 + a6; ++ return r; ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[MAX_ARGS]; ++ void *values[MAX_ARGS]; ++ ++ _Complex float r1, r2; ++ ++ signed int a1; ++ _Complex long double a2; ++ signed int a3; ++ _Complex T_C_TYPE a4; ++ signed int a5; ++ _Complex long double a6; ++ ++ args[0] = &ffi_type_sint; ++ args[1] = &ffi_type_complex_longdouble; ++ args[2] = &ffi_type_sint; ++ args[3] = &T_FFI_TYPE; ++ args[4] = &ffi_type_sint; ++ args[5] = &ffi_type_complex_longdouble; ++ values[0] = &a1; ++ values[1] = &a2; ++ values[2] = &a3; ++ values[3] = &a4; ++ values[4] = &a5; ++ values[5] = &a6; ++ ++ /* Initialize the cif */ ++// CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 6, ++// &ffi_type_complex_longdouble, args) == FFI_OK); ++ CHECK(ffi_prep_cif_var (&cif, FFI_DEFAULT_ABI, 1, 6, ++ &ffi_type_complex_float, args) == FFI_OK); ++ ++ a1 = 5; ++ a2 = 127.0 + 255.0 * I; ++ a3 = 6; ++ a4 = 512.7 + 1024.1 * I; ++ a5 = 7; ++ a6 = 89 + 12 * I; ++ ++ ffi_call(&cif, FFI_FN(return_c), &r1, values); ++ r2 = return_c(a1, a2, a3, a4, a5, a6); ++ CHECK(r1 == r2); ++ exit(0); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_va2_longdouble.c libffi-3.3/testsuite/libffi.complex/test_complex_va2_longdouble.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_va2_longdouble.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_va2_longdouble.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_longdouble.inc" ++#include "test_complex_va2.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_va3_double.c libffi-3.3/testsuite/libffi.complex/test_complex_va3_double.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_va3_double.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_va3_double.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_double.inc" ++#include "test_complex_va3.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_va3_float.c libffi-3.3/testsuite/libffi.complex/test_complex_va3_float.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_va3_float.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_va3_float.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_float.inc" ++#include "test_complex_va3.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_va3.inc libffi-3.3/testsuite/libffi.complex/test_complex_va3.inc +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_va3.inc 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_va3.inc 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,78 @@ ++/* -*-c-*- */ ++#include "ffitest.h" ++#include ++#include ++ ++_Complex float ++return_c(signed int a1, ++... ++//_Complex long double a2, ++//signed int a3, ++//_Complex T_C_TYPE a4, ++//signed int a5, ++//_Complex long double a6 ++) ++{ ++ va_list ap; ++ _Complex float a2; ++ signed int a3; ++ _Complex T_C_TYPE a4; ++ signed int a5; ++ _Complex long double a6; ++ va_start (ap, a1); ++ a2 = va_arg (ap, _Complex float); ++ a3 = va_arg (ap, signed int); ++ a4 = va_arg (ap, _Complex T_C_TYPE); ++ a5 = va_arg (ap, signed int); ++ a6 = va_arg (ap, _Complex long double); ++ ++ volatile _Complex long double r = a1 + a2 + a3 + a4 + a5 + a6; ++ return r; ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[MAX_ARGS]; ++ void *values[MAX_ARGS]; ++ ++ _Complex float r1, r2; ++ ++ signed int a1; ++ _Complex float a2; ++ signed int a3; ++ _Complex T_C_TYPE a4; ++ signed int a5; ++ _Complex long double a6; ++ ++ args[0] = &ffi_type_sint; ++ args[1] = &ffi_type_complex_float; ++ args[2] = &ffi_type_sint; ++ args[3] = &T_FFI_TYPE; ++ args[4] = &ffi_type_sint; ++ args[5] = &ffi_type_complex_longdouble; ++ values[0] = &a1; ++ values[1] = &a2; ++ values[2] = &a3; ++ values[3] = &a4; ++ values[4] = &a5; ++ values[5] = &a6; ++ ++ /* Initialize the cif */ ++// CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 6, ++// &ffi_type_complex_longdouble, args) == FFI_OK); ++ CHECK(ffi_prep_cif_var (&cif, FFI_DEFAULT_ABI, 1, 6, ++ &ffi_type_complex_float, args) == FFI_OK); ++ ++ a1 = 5; ++ a2 = 127.0 + 255.0 * I; ++ a3 = 6; ++ a4 = 512.7 + 1024.1 * I; ++ a5 = 7; ++ a6 = 89 + 12 * I; ++ ++ ffi_call(&cif, FFI_FN(return_c), &r1, values); ++ r2 = return_c(a1, a2, a3, a4, a5, a6); ++ CHECK(r1 == r2); ++ exit(0); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_va3_longdouble.c libffi-3.3/testsuite/libffi.complex/test_complex_va3_longdouble.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_va3_longdouble.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_va3_longdouble.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_longdouble.inc" ++#include "test_complex_va3.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_va_double.c libffi-3.3/testsuite/libffi.complex/test_complex_va_double.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_va_double.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_va_double.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_double.inc" ++#include "test_complex_va.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_va_float.c libffi-3.3/testsuite/libffi.complex/test_complex_va_float.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_va_float.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_va_float.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_float.inc" ++#include "test_complex_va.inc" ++ +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_va.inc libffi-3.3/testsuite/libffi.complex/test_complex_va.inc +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_va.inc 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_va.inc 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,78 @@ ++/* -*-c-*- */ ++#include "ffitest.h" ++#include ++#include ++ ++_Complex long double ++return_c(signed int a1, ++... ++//_Complex long double a2, ++//signed int a3, ++//_Complex T_C_TYPE a4, ++//signed int a5, ++//_Complex long double a6 ++) ++{ ++ va_list ap; ++ _Complex long double a2; ++ signed int a3; ++ _Complex T_C_TYPE a4; ++ signed int a5; ++ _Complex long double a6; ++ va_start (ap, a1); ++ a2 = va_arg (ap, _Complex long double); ++ a3 = va_arg (ap, signed int); ++ a4 = va_arg (ap, _Complex T_C_TYPE); ++ a5 = va_arg (ap, signed int); ++ a6 = va_arg (ap, _Complex long double); ++ ++ volatile _Complex long double r = a1 + a2 + a3 + a4 + a5 + a6; ++ return r; ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[MAX_ARGS]; ++ void *values[MAX_ARGS]; ++ ++ _Complex long double r1, r2; ++ ++ signed int a1; ++ _Complex long double a2; ++ signed int a3; ++ _Complex T_C_TYPE a4; ++ signed int a5; ++ _Complex long double a6; ++ ++ args[0] = &ffi_type_sint; ++ args[1] = &ffi_type_complex_longdouble; ++ args[2] = &ffi_type_sint; ++ args[3] = &T_FFI_TYPE; ++ args[4] = &ffi_type_sint; ++ args[5] = &ffi_type_complex_longdouble; ++ values[0] = &a1; ++ values[1] = &a2; ++ values[2] = &a3; ++ values[3] = &a4; ++ values[4] = &a5; ++ values[5] = &a6; ++ ++ /* Initialize the cif */ ++// CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 6, ++// &ffi_type_complex_longdouble, args) == FFI_OK); ++ CHECK(ffi_prep_cif_var (&cif, FFI_DEFAULT_ABI, 1, 6, ++ &ffi_type_complex_longdouble, args) == FFI_OK); ++ ++ a1 = 5; ++ a2 = 127.0 + 255.0 * I; ++ a3 = 6; ++ a4 = 512.7 + 1024.1 * I; ++ a5 = 7; ++ a6 = 89 + 12 * I; ++ ++ ffi_call(&cif, FFI_FN(return_c), &r1, values); ++ r2 = return_c(a1, a2, a3, a4, a5, a6); ++ CHECK(r1 == r2); ++ exit(0); ++} +diff -Nprua libffi-3.3-bak/testsuite/libffi.complex/test_complex_va_longdouble.c libffi-3.3/testsuite/libffi.complex/test_complex_va_longdouble.c +--- libffi-3.3-bak/testsuite/libffi.complex/test_complex_va_longdouble.c 1970-01-01 08:00:00.000000000 +0800 ++++ libffi-3.3/testsuite/libffi.complex/test_complex_va_longdouble.c 2022-10-10 15:55:47.210208632 +0800 +@@ -0,0 +1,5 @@ ++/* { dg-do run } */ ++ ++#include "complex_defs_longdouble.inc" ++#include "test_complex_va.inc" ++ diff --git a/package/libffi/Config.in b/package/libffi/Config.in new file mode 100644 index 00000000..6edf570b --- /dev/null +++ b/package/libffi/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_LIBFFI + bool "libffi" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + The libffi library provides a portable, high level + programming interface to various calling conventions. This + allows a programmer to call any function specified by a call + interface description at run-time. + + http://sourceware.org/libffi/ + +comment "libffi needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libffi/libffi.hash b/package/libffi/libffi.hash new file mode 100644 index 00000000..496ae0d9 --- /dev/null +++ b/package/libffi/libffi.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 3f2f86094f5cf4c36cfe850d2fe029d01f5c2c2296619407c8ba0d8207da9a6b libffi-3.3.tar.gz +# License files, locally calculated +sha256 deaf3a42effb551a5b140fa9afefed183a27f1341c6d1bf430d106a5e6931fc0 LICENSE diff --git a/package/libffi/libffi.mk b/package/libffi/libffi.mk new file mode 100644 index 00000000..c7705b9e --- /dev/null +++ b/package/libffi/libffi.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libffi +# +################################################################################ + +LIBFFI_VERSION = 3.3 +LIBFFI_SITE = $(call github,libffi,libffi,v$(LIBFFI_VERSION)) +LIBFFI_CPE_ID_UPDATE = rc0 +LIBFFI_LICENSE = MIT +LIBFFI_LICENSE_FILES = LICENSE +LIBFFI_INSTALL_STAGING = YES +LIBFFI_AUTORECONF = YES + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libfm-extra/Config.in b/package/libfm-extra/Config.in new file mode 100644 index 00000000..60e6fda3 --- /dev/null +++ b/package/libfm-extra/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_LIBFM_EXTRA + bool "libfm-extra" + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + select BR2_PACKAGE_LIBGLIB2 + help + The libfm-extra package contains a library and other files + required by menu-cache-gen libexec of menu-cache + + http://wiki.lxde.org/en/Libfm + +comment "libfm-extra needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libfm-extra/libfm-extra.hash b/package/libfm-extra/libfm-extra.hash new file mode 100644 index 00000000..e78fbab0 --- /dev/null +++ b/package/libfm-extra/libfm-extra.hash @@ -0,0 +1,7 @@ +# From https://sourceforge.net/projects/pcmanfm/files/PCManFM%20%2B%20Libfm%20%28tarball%20release%29/LibFM/ +md5 c15ecd2c9317e2c385cd3f046d0b61ba libfm-1.3.1.tar.xz +sha1 29539f50acd5c00a00362adffd532053b0688e66 libfm-1.3.1.tar.xz + +# Hash for license files: +sha256 d8c320ffc0030d1b096ae4732b50d2b811cf95e9a9b7377c1127b2563e0a0388 COPYING +sha256 c3a3d93e111462f2b0292b56a6a7b87d342fd7156741d8b81b8b08723be4597e src/extra/fm-xml-file.c diff --git a/package/libfm-extra/libfm-extra.mk b/package/libfm-extra/libfm-extra.mk new file mode 100644 index 00000000..b41e8654 --- /dev/null +++ b/package/libfm-extra/libfm-extra.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libfm-extra +# +################################################################################ + +LIBFM_EXTRA_VERSION = 1.3.1 +LIBFM_EXTRA_SOURCE = libfm-$(LIBFM_EXTRA_VERSION).tar.xz +LIBFM_EXTRA_SITE = http://sourceforge.net/projects/pcmanfm/files +LIBFM_EXTRA_DEPENDENCIES = libglib2 host-intltool +LIBFM_EXTRA_LICENSE = GPL-2.0+, LGPL-2.1+ +LIBFM_EXTRA_LICENSE_FILES = COPYING src/extra/fm-xml-file.c +LIBFM_EXTRA_INSTALL_STAGING = YES +LIBFM_EXTRA_CONF_OPTS = --with-extra-only --with-gtk=no + +$(eval $(autotools-package)) diff --git a/package/libfm/0001-modules-fix-cross-compilation.patch b/package/libfm/0001-modules-fix-cross-compilation.patch new file mode 100644 index 00000000..8b5f1cff --- /dev/null +++ b/package/libfm/0001-modules-fix-cross-compilation.patch @@ -0,0 +1,27 @@ +From 3bc935b732d1ff448727e90340e4be40ef6fc000 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 29 Apr 2018 20:22:29 +0200 +Subject: [PATCH] modules: fix cross-compilation + +Do not add -L$(libdir) to AM_LDFLAGS + +Signed-off-by: Fabrice Fontaine +--- + src/modules/Makefile.am | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/modules/Makefile.am b/src/modules/Makefile.am +index e61f4e01..01c15bd4 100644 +--- a/src/modules/Makefile.am ++++ b/src/modules/Makefile.am +@@ -11,7 +11,6 @@ AM_CPPFLAGS = \ + # tell libtool we compile module not library + AM_LDFLAGS = \ + -no-undefined -module -avoid-version -shared -export-dynamic \ +- -L$(libdir) \ + $(GIO_LIBS) + + # the module should be linked only with libfm, not libfm-gtk or whatever +-- +2.14.1 + diff --git a/package/libfm/Config.in b/package/libfm/Config.in new file mode 100644 index 00000000..16676fbf --- /dev/null +++ b/package/libfm/Config.in @@ -0,0 +1,30 @@ +config BR2_PACKAGE_LIBFM + bool "libfm" + depends on BR2_PACKAGE_XORG7 + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + depends on BR2_INSTALL_LIBSTDCPP # libgtk2 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # libgtk2 -> pango -> harfbuzz + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # libgtk2 -> pango -> harfbuzz + select BR2_PACKAGE_CAIRO + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBGTK2 if !BR2_PACKAGE_LIBGTK3_X11 + select BR2_PACKAGE_MENU_CACHE + help + A glib/gio-based library providing some file management + utilities and related-widgets missing in gtk+/glib. This is + the core of PCManFM. The library is desktop independent + (not LXDE specific) and has clean API. It can be used to + develop other applications requiring file management + functionality. For example, you can create your own file + manager with facilities provided by libfm. + + http://wiki.lxde.org/en/Libfm + +comment "libfm needs X.org and a toolchain w/ wchar, threads, C++, gcc >= 4.8" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_USE_WCHAR || !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 || \ + !BR2_TOOLCHAIN_HAS_THREADS || !BR2_PACKAGE_XORG7 diff --git a/package/libfm/libfm.hash b/package/libfm/libfm.hash new file mode 100644 index 00000000..d63a4361 --- /dev/null +++ b/package/libfm/libfm.hash @@ -0,0 +1,7 @@ +# From https://sourceforge.net/projects/pcmanfm/files/PCManFM%20%2B%20Libfm%20%28tarball%20release%29/LibFM/ +md5 c15ecd2c9317e2c385cd3f046d0b61ba libfm-1.3.1.tar.xz +sha1 29539f50acd5c00a00362adffd532053b0688e66 libfm-1.3.1.tar.xz + +# Hash for license files: +sha256 d8c320ffc0030d1b096ae4732b50d2b811cf95e9a9b7377c1127b2563e0a0388 COPYING +sha256 c3a3d93e111462f2b0292b56a6a7b87d342fd7156741d8b81b8b08723be4597e src/extra/fm-xml-file.c diff --git a/package/libfm/libfm.mk b/package/libfm/libfm.mk new file mode 100644 index 00000000..47f01b17 --- /dev/null +++ b/package/libfm/libfm.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# libfm +# +################################################################################ + +LIBFM_VERSION = 1.3.1 +LIBFM_SOURCE = libfm-$(LIBFM_VERSION).tar.xz +LIBFM_SITE = http://sourceforge.net/projects/pcmanfm/files +LIBFM_DEPENDENCIES = menu-cache libglib2 cairo +LIBFM_LICENSE = GPL-2.0+, LGPL-2.1+ +LIBFM_LICENSE_FILES = COPYING src/extra/fm-xml-file.c +LIBFM_INSTALL_STAGING = YES +# We're patching src/modules/Makefile.am +LIBFM_AUTORECONF = YES + +ifeq ($(BR2_PACKAGE_LIBEXIF),y) +LIBFM_CONF_OPTS += --enable-exif +LIBFM_DEPENDENCIES += libexif +else +LIBFM_CONF_OPTS += --disable-exif +endif + +ifeq ($(BR2_PACKAGE_LIBGTK3_X11),y) +LIBFM_CONF_OPTS += --with-gtk=3 +LIBFM_DEPENDENCIES += libgtk3 +else +LIBFM_CONF_OPTS += --with-gtk=2 +LIBFM_DEPENDENCIES += libgtk2 +endif + +$(eval $(autotools-package)) diff --git a/package/libfreefare/Config.in b/package/libfreefare/Config.in new file mode 100644 index 00000000..b330b225 --- /dev/null +++ b/package/libfreefare/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBFREEFARE + bool "libfreefare" + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_LIBNFC + help + Library for high level manipulation of MIFARE cards. + + http://nfc-tools.org/index.php?title=Libfreefare diff --git a/package/libfreefare/libfreefare.hash b/package/libfreefare/libfreefare.hash new file mode 100644 index 00000000..ed982c9d --- /dev/null +++ b/package/libfreefare/libfreefare.hash @@ -0,0 +1,5 @@ +# From https://github.com/nfc-tools/libfreefare/releases/download/libfreefare-0.4.0/libfreefare-0.4.0.tar.bz2 +sha256 bfa31d14a99a1247f5ed49195d6373de512e3eb75bf1627658b40cf7f876bc64 libfreefare-0.4.0.tar.bz2 + +# Hash for license file: +sha256 be6209dfd763a0ba77fbe990cfd2512804441d8b5f0cad927baa3341b50fcade COPYING diff --git a/package/libfreefare/libfreefare.mk b/package/libfreefare/libfreefare.mk new file mode 100644 index 00000000..16f15b34 --- /dev/null +++ b/package/libfreefare/libfreefare.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# libfreefare +# +################################################################################ + +LIBFREEFARE_VERSION = 0.4.0 +LIBFREEFARE_SOURCE = libfreefare-$(LIBFREEFARE_VERSION).tar.bz2 +# Do not use the github helper here, the generated tarball is *NOT* +# the same as the one uploaded by upstream for the release. +LIBFREEFARE_SITE = https://github.com/nfc-tools/libfreefare/releases/download/libfreefare-$(LIBFREEFARE_VERSION) +LIBFREEFARE_DEPENDENCIES = host-pkgconf libnfc openssl +LIBFREEFARE_LICENSE = LGPL-3.0+ with exception +LIBFREEFARE_LICENSE_FILES = COPYING +LIBFREEFARE_CONF_ENV += LIBS=`$(PKG_CONFIG_HOST_BINARY) --libs openssl` + +$(eval $(autotools-package)) diff --git a/package/libfreeglut/0001-Work-around-for-an-issue-which-cropped-up-with-the-release-of-gcc-10.patch b/package/libfreeglut/0001-Work-around-for-an-issue-which-cropped-up-with-the-release-of-gcc-10.patch new file mode 100644 index 00000000..e98e7153 --- /dev/null +++ b/package/libfreeglut/0001-Work-around-for-an-issue-which-cropped-up-with-the-release-of-gcc-10.patch @@ -0,0 +1,69 @@ +From b9998bbc1e1c329f6bf69c24606a2be7a4973b8c Mon Sep 17 00:00:00 2001 +From: jtsiomb +Date: Fri, 21 Feb 2020 22:25:31 +0000 +Subject: [PATCH] Work-around for an issue which cropped up with the release of + gcc-10. In their infinite wisdom, they decided to build with -fno-common as + default from now on, breaking every piece of C code which used to declare + common symbols in header files, as was the convention since the dawn of time. + We now have to duplicate all declarations to an arbitrary source file, and + change the header-file ones to prefix them with extern. + +git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1863 7f0cb862-5218-0410-a997-914c9d46530a +[Retrieved from: +https://github.com/dcnieho/FreeGLUT/commit/b9998bbc1e1c329f6bf69c24606a2be7a4973b8c] +Signed-off-by: Fabrice Fontaine +--- + freeglut/freeglut/src/fg_gl2.c | 14 ++++++++++++++ + freeglut/freeglut/src/fg_gl2.h | 14 +++++++------- + 2 files changed, 21 insertions(+), 7 deletions(-) + +diff --git a/src/fg_gl2.c b/src/fg_gl2.c +index 38b0acbb..54b4285b 100644 +--- a/src/fg_gl2.c ++++ b/src/fg_gl2.c +@@ -27,6 +27,20 @@ + #include "fg_internal.h" + #include "fg_gl2.h" + ++#ifndef GL_ES_VERSION_2_0 ++/* GLES2 has the corresponding entry points built-in, and these fgh-prefixed ++ * names are defined in fg_gl2.h header to reference them, for any other case, ++ * define them as function pointers here. ++ */ ++FGH_PFNGLGENBUFFERSPROC fghGenBuffers; ++FGH_PFNGLDELETEBUFFERSPROC fghDeleteBuffers; ++FGH_PFNGLBINDBUFFERPROC fghBindBuffer; ++FGH_PFNGLBUFFERDATAPROC fghBufferData; ++FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC fghEnableVertexAttribArray; ++FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC fghDisableVertexAttribArray; ++FGH_PFNGLVERTEXATTRIBPOINTERPROC fghVertexAttribPointer; ++#endif ++ + void FGAPIENTRY glutSetVertexAttribCoord3(GLint attrib) { + if (fgStructure.CurrentWindow != NULL) + fgStructure.CurrentWindow->Window.attribute_v_coord = attrib; +diff --git a/src/fg_gl2.h b/src/fg_gl2.h +index ab8ba5c7..fb3d4676 100644 +--- a/src/fg_gl2.h ++++ b/src/fg_gl2.h +@@ -67,13 +67,13 @@ typedef void (APIENTRY *FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); + typedef void (APIENTRY *FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint); + typedef void (APIENTRY *FGH_PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); + +-FGH_PFNGLGENBUFFERSPROC fghGenBuffers; +-FGH_PFNGLDELETEBUFFERSPROC fghDeleteBuffers; +-FGH_PFNGLBINDBUFFERPROC fghBindBuffer; +-FGH_PFNGLBUFFERDATAPROC fghBufferData; +-FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC fghEnableVertexAttribArray; +-FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC fghDisableVertexAttribArray; +-FGH_PFNGLVERTEXATTRIBPOINTERPROC fghVertexAttribPointer; ++extern FGH_PFNGLGENBUFFERSPROC fghGenBuffers; ++extern FGH_PFNGLDELETEBUFFERSPROC fghDeleteBuffers; ++extern FGH_PFNGLBINDBUFFERPROC fghBindBuffer; ++extern FGH_PFNGLBUFFERDATAPROC fghBufferData; ++extern FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC fghEnableVertexAttribArray; ++extern FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC fghDisableVertexAttribArray; ++extern FGH_PFNGLVERTEXATTRIBPOINTERPROC fghVertexAttribPointer; + + # endif + diff --git a/package/libfreeglut/Config.in b/package/libfreeglut/Config.in new file mode 100644 index 00000000..ccb2d5cd --- /dev/null +++ b/package/libfreeglut/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_LIBFREEGLUT + bool "libfreeglut" + depends on BR2_PACKAGE_HAS_LIBGL + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_LIBGLU + select BR2_PACKAGE_XLIB_LIBXI + select BR2_PACKAGE_XLIB_LIBXRANDR + select BR2_PACKAGE_XLIB_LIBXXF86VM + help + FreeGLUT is a free-software/open-source alternative to the + OpenGL Utility Toolkit (GLUT) library. GLUT (and hence + FreeGLUT) takes care of all the system-specific chores + required for creating windows, initializing OpenGL contexts, + and handling input events, to allow for trully portable OpenGL + programs. + + http://freeglut.sourceforge.net + +comment "libfreeglut depends on X.org and needs an OpenGL backend" + depends on !BR2_PACKAGE_XORG7 || !BR2_PACKAGE_HAS_LIBGL diff --git a/package/libfreeglut/libfreeglut.hash b/package/libfreeglut/libfreeglut.hash new file mode 100644 index 00000000..2771cbde --- /dev/null +++ b/package/libfreeglut/libfreeglut.hash @@ -0,0 +1,6 @@ +# From http://sourceforge.net/projects/freeglut/files/freeglut/3.2.1/ +md5 cd5c670c1086358598a6d4a9d166949d freeglut-3.2.1.tar.gz +sha1 7a62e0d2caad92ff745bc5037592b2753f0b2f20 freeglut-3.2.1.tar.gz +# Locally computed +sha256 d4000e02102acaf259998c870e25214739d1f16f67f99cb35e4f46841399da68 freeglut-3.2.1.tar.gz +sha256 b6593d5ec4c113a274abb85b10e8615895cb0ddb89f7912af5fe5aa8df38a275 COPYING diff --git a/package/libfreeglut/libfreeglut.mk b/package/libfreeglut/libfreeglut.mk new file mode 100644 index 00000000..379de312 --- /dev/null +++ b/package/libfreeglut/libfreeglut.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# libfreeglut +# +################################################################################ + +LIBFREEGLUT_VERSION = 3.2.1 +LIBFREEGLUT_SOURCE = freeglut-$(LIBFREEGLUT_VERSION).tar.gz +LIBFREEGLUT_SITE = http://downloads.sourceforge.net/freeglut +LIBFREEGLUT_LICENSE = MIT +LIBFREEGLUT_LICENSE_FILES = COPYING +LIBFREEGLUT_INSTALL_STAGING = YES +LIBFREEGLUT_DEPENDENCIES = \ + libgl \ + libglu \ + xlib_libXi \ + xlib_libXrandr \ + xlib_libXxf86vm + +LIBFREEGLUT_CONF_OPTS = -DFREEGLUT_BUILD_DEMOS=OFF + +# package depends on X.org which depends on !BR2_STATIC_LIBS +ifeq ($(BR2_SHARED_LIBS),y) +LIBFREEGLUT_CONF_OPTS += \ + -DFREEGLUT_BUILD_SHARED_LIBS=ON \ + -DFREEGLUT_BUILD_STATIC_LIBS=OFF +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +LIBFREEGLUT_CONF_OPTS += \ + -DFREEGLUT_BUILD_SHARED_LIBS=ON \ + -DFREEGLUT_BUILD_STATIC_LIBS=ON +endif + +$(eval $(cmake-package)) diff --git a/package/libfreeimage/0001-no-root-install.patch b/package/libfreeimage/0001-no-root-install.patch new file mode 100644 index 00000000..54756d8e --- /dev/null +++ b/package/libfreeimage/0001-no-root-install.patch @@ -0,0 +1,20 @@ +Makefile.gnu: allow non-root install by not enforcing root ownserhip + +Signed-off-by: Rémi Rérolle + +diff -ruN a/Makefile.gnu b/Makefile.gnu +--- a/Makefile.gnu 2015-04-09 16:34:02.315316841 +0200 ++++ b/Makefile.gnu 2015-04-09 16:34:28.875483201 +0200 +@@ -71,9 +71,9 @@ + + install: + install -d $(INCDIR) $(INSTALLDIR) +- install -m 644 -o root -g root $(HEADER) $(INCDIR) +- install -m 644 -o root -g root $(STATICLIB) $(INSTALLDIR) +- install -m 755 -o root -g root $(SHAREDLIB) $(INSTALLDIR) ++ install -m 644 $(HEADER) $(INCDIR) ++ install -m 644 $(STATICLIB) $(INSTALLDIR) ++ install -m 755 $(SHAREDLIB) $(INSTALLDIR) + ln -sf $(SHAREDLIB) $(INSTALLDIR)/$(VERLIBNAME) + ln -sf $(VERLIBNAME) $(INSTALLDIR)/$(LIBNAME) + # ldconfig diff --git a/package/libfreeimage/0002-fix-cpuid-x86.patch b/package/libfreeimage/0002-fix-cpuid-x86.patch new file mode 100644 index 00000000..98b0e9c6 --- /dev/null +++ b/package/libfreeimage/0002-fix-cpuid-x86.patch @@ -0,0 +1,67 @@ +Fix build issue caused by invalid register usage on x86 + +Patch taken from https://github.com/openexr/openexr/issues/128. + +Signed-off-by: Thomas Petazzoni + +Index: b/Source/OpenEXR/IlmImf/ImfSystemSpecific.cpp +=================================================================== +--- a/Source/OpenEXR/IlmImf/ImfSystemSpecific.cpp ++++ b/Source/OpenEXR/IlmImf/ImfSystemSpecific.cpp +@@ -40,21 +40,19 @@ + + namespace { + #if defined(IMF_HAVE_SSE2) && defined(__GNUC__) +- ++#include + // Helper functions for gcc + SSE enabled +- void cpuid(int n, int &eax, int &ebx, int &ecx, int &edx) ++ void cpuid(unsigned int n, unsigned int &eax, unsigned int &ebx, ++ unsigned int &ecx, unsigned int &edx) + { +- __asm__ __volatile__ ( +- "cpuid" +- : /* Output */ "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx) +- : /* Input */ "a"(n) +- : /* Clobber */); ++ __get_cpuid(n, &eax, &ebx, &ecx, &edx); + } + + #else // IMF_HAVE_SSE2 && __GNUC__ + + // Helper functions for generic compiler - all disabled +- void cpuid(int n, int &eax, int &ebx, int &ecx, int &edx) ++ void cpuid(unsigned int n, unsigned int &eax, unsigned int &ebx, ++ unsigned int &ecx, unsigned int &edx) + { + eax = ebx = ecx = edx = 0; + } +@@ -64,7 +62,7 @@ + + #ifdef OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX + +- void xgetbv(int n, int &eax, int &edx) ++ void xgetbv(unsigned int n, unsigned int &eax, unsigned int &edx) + { + __asm__ __volatile__ ( + "xgetbv" +@@ -75,7 +73,7 @@ + + #else // OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX + +- void xgetbv(int n, int &eax, int &edx) ++ void xgetbv(unsigned int n, unsigned int &eax, unsigned int &edx) + { + eax = edx = 0; + } +@@ -94,8 +92,8 @@ + f16c(false) + { + bool osxsave = false; +- int max = 0; +- int eax, ebx, ecx, edx; ++ unsigned int max = 0; ++ unsigned int eax, ebx, ecx, edx; + + cpuid(0, max, ebx, ecx, edx); + if (max > 0) diff --git a/package/libfreeimage/0003-fix-big-endian-os.patch b/package/libfreeimage/0003-fix-big-endian-os.patch new file mode 100644 index 00000000..e0d4e921 --- /dev/null +++ b/package/libfreeimage/0003-fix-big-endian-os.patch @@ -0,0 +1,64 @@ +fixed PluginBMP, PluginDDS for compilation under Big Endian OS + +Downloaded from upstream commit: +https://sourceforge.net/p/freeimage/svn/1809/ + +Signed-off-by: Bernd Kuhls + +diff -uNr FreeImage.orig/Source/FreeImage/PluginBMP.cpp FreeImage/Source/FreeImage/PluginBMP.cpp +--- FreeImage.orig/Source/FreeImage/PluginBMP.cpp 2016-06-15 12:35:30.000000000 +0200 ++++ FreeImage/Source/FreeImage/PluginBMP.cpp 2019-08-31 16:00:27.813378612 +0200 +@@ -518,7 +518,7 @@ + io->read_proc(FreeImage_GetPalette(dib), used_colors * sizeof(RGBQUAD), 1, handle); + #if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_RGB + RGBQUAD *pal = FreeImage_GetPalette(dib); +- for(int i = 0; i < used_colors; i++) { ++ for(unsigned int i = 0; i < used_colors; i++) { + INPLACESWAP(pal[i].rgbRed, pal[i].rgbBlue); + } + #endif +@@ -1419,7 +1419,7 @@ + + free(buffer); + #ifdef FREEIMAGE_BIGENDIAN +- } else if (bpp == 16) { ++ } else if (dst_bpp == 16) { + int padding = dst_pitch - dst_width * sizeof(WORD); + WORD pad = 0; + WORD pixel; +@@ -1440,7 +1440,7 @@ + } + #endif + #if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_RGB +- } else if (bpp == 24) { ++ } else if (dst_bpp == 24) { + int padding = dst_pitch - dst_width * sizeof(FILE_BGR); + DWORD pad = 0; + FILE_BGR bgr; +@@ -1461,7 +1461,7 @@ + } + } + } +- } else if (bpp == 32) { ++ } else if (dst_bpp == 32) { + FILE_BGRA bgra; + for(unsigned y = 0; y < dst_height; y++) { + BYTE *line = FreeImage_GetScanLine(dib, y); +diff -uNr FreeImage.orig/Source/FreeImage/PluginDDS.cpp FreeImage/Source/FreeImage/PluginDDS.cpp +--- FreeImage.orig/Source/FreeImage/PluginDDS.cpp 2018-07-31 17:04:58.000000000 +0200 ++++ FreeImage/Source/FreeImage/PluginDDS.cpp 2019-08-31 16:00:39.213465120 +0200 +@@ -356,14 +356,6 @@ + for(int i=0; i<11; i++) { + SwapLong(&header->surfaceDesc.dwReserved1[i]); + } +- SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwSize); +- SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwFlags); +- SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwFourCC); +- SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwRGBBitCount); +- SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwRBitMask); +- SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwGBitMask); +- SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwBBitMask); +- SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwRGBAlphaBitMask); + SwapLong(&header->surfaceDesc.ddsCaps.dwCaps1); + SwapLong(&header->surfaceDesc.ddsCaps.dwCaps2); + SwapLong(&header->surfaceDesc.ddsCaps.dwReserved[0]); diff --git a/package/libfreeimage/Config.in b/package/libfreeimage/Config.in new file mode 100644 index 00000000..9bffd035 --- /dev/null +++ b/package/libfreeimage/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_LIBFREEIMAGE + bool "libfreeimage" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS + depends on BR2_USE_WCHAR + # compiler issue: "Error: invalid register number `63'" + depends on !BR2_arc + help + FreeImage is an Open Source library project for developers who + would like to support popular graphics image formats like PNG, + BMP, JPEG, TIFF and others as needed by today's multimedia + applications. + + http://freeimage.sourceforge.net + +comment "libfreeimage needs a toolchain w/ C++, dynamic library, wchar" + depends on !BR2_arc + depends on BR2_STATIC_LIBS || !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR diff --git a/package/libfreeimage/libfreeimage.hash b/package/libfreeimage/libfreeimage.hash new file mode 100644 index 00000000..6d8ba204 --- /dev/null +++ b/package/libfreeimage/libfreeimage.hash @@ -0,0 +1,9 @@ +# From https://sourceforge.net/projects/freeimage/files/Source%20Distribution/3.18.0/ +md5 f8ba138a3be233a3eed9c456e42e2578 FreeImage3180.zip +sha1 38daa9d8f1bca2330a2eaa42ec66fbe6ede7dce9 FreeImage3180.zip + +# Locally computed +sha256 f41379682f9ada94ea7b34fe86bf9ee00935a3147be41b6569c9605a53e438fd FreeImage3180.zip +sha256 d51615a1a47f1ddbb027920d60d3fc30a00e1284c795a47857883e641349fadf license-gplv2.txt +sha256 084be110e3e8757d8e6945cda1fbc7e5073bbe688dc19b92c0d8440155d8e282 license-gplv3.txt +sha256 0bb9a3123297c73ae6e19c70459fb0e58f313f67ca63176fd43f8e77668b8243 license-fi.txt diff --git a/package/libfreeimage/libfreeimage.mk b/package/libfreeimage/libfreeimage.mk new file mode 100644 index 00000000..91299084 --- /dev/null +++ b/package/libfreeimage/libfreeimage.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# libfreeimage +# +################################################################################ + +LIBFREEIMAGE_VERSION = 3.18.0 +LIBFREEIMAGE_SITE = http://downloads.sourceforge.net/freeimage +LIBFREEIMAGE_SOURCE = FreeImage$(subst .,,$(LIBFREEIMAGE_VERSION)).zip +LIBFREEIMAGE_LICENSE = GPL-2.0 or GPL-3.0 or FreeImage Public License +LIBFREEIMAGE_LICENSE_FILES = license-gplv2.txt license-gplv3.txt license-fi.txt +LIBFREEIMAGE_CPE_ID_VENDOR = freeimage_project +LIBFREEIMAGE_CPE_ID_PRODUCT = freeimage +LIBFREEIMAGE_INSTALL_STAGING = YES + +define LIBFREEIMAGE_EXTRACT_CMDS + $(UNZIP) $(LIBFREEIMAGE_DL_DIR)/$(LIBFREEIMAGE_SOURCE) -d $(@D) + mv $(@D)/FreeImage/* $(@D) + rmdir $(@D)/FreeImage +endef + +define LIBFREEIMAGE_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) +endef + +define LIBFREEIMAGE_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install +endef + +define LIBFREEIMAGE_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/libfribidi/Config.in b/package/libfribidi/Config.in new file mode 100644 index 00000000..74d9c5b4 --- /dev/null +++ b/package/libfribidi/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBFRIBIDI + bool "libfribidi" + help + GNU FriBidi is an implementation of the Unicode + Bidirectional Algorithm (bidi). + + http://www.fribidi.org/ diff --git a/package/libfribidi/libfribidi.hash b/package/libfribidi/libfribidi.hash new file mode 100644 index 00000000..8e7eb49b --- /dev/null +++ b/package/libfribidi/libfribidi.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 7f1c687c7831499bcacae5e8675945a39bacbad16ecaa945e9454a32df653c01 fribidi-1.0.10.tar.xz +sha256 32434afcc8666ba060e111d715bfdb6c2d5dd8a35fa4d3ab8ad67d8f850d2f2b COPYING diff --git a/package/libfribidi/libfribidi.mk b/package/libfribidi/libfribidi.mk new file mode 100644 index 00000000..97e875b4 --- /dev/null +++ b/package/libfribidi/libfribidi.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# libfribidi +# +################################################################################ + +LIBFRIBIDI_VERSION = 1.0.10 +LIBFRIBIDI_SOURCE = fribidi-$(LIBFRIBIDI_VERSION).tar.xz +LIBFRIBIDI_SITE = https://github.com/fribidi/fribidi/releases/download/v$(LIBFRIBIDI_VERSION) +LIBFRIBIDI_LICENSE = LGPL-2.1+ +LIBFRIBIDI_LICENSE_FILES = COPYING +LIBFRIBIDI_CPE_ID_VENDOR = gnu +LIBFRIBIDI_CPE_ID_PRODUCT = fribidi +LIBFRIBIDI_INSTALL_STAGING = YES +LIBFRIBIDI_DEPENDENCIES = host-pkgconf + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libftdi/0001_pkgconfig_libusb.patch b/package/libftdi/0001_pkgconfig_libusb.patch new file mode 100644 index 00000000..389291de --- /dev/null +++ b/package/libftdi/0001_pkgconfig_libusb.patch @@ -0,0 +1,47 @@ +--- + configure.in | 35 +++++++++++------------------------ + 1 file changed, 11 insertions(+), 24 deletions(-) + +--- a/configure.in ++++ b/configure.in +@@ -8,30 +8,17 @@ + AM_PROG_LIBTOOL + AC_PROG_CXX + +-dnl check for libusb-config +-AC_CHECK_TOOL(HAVELIBUSB, libusb-config) +- +-if test ! -z "$HAVELIBUSB"; then +- LIBUSB_CFLAGS=`$HAVELIBUSB --cflags` +- LIBUSB_LIBS=`$HAVELIBUSB --libs` +- +- CFLAGS="$CFLAGS $LIBUSB_CFLAGS" +- LIBS="$LIBS $LIBUSB_LIBS" +-else +- AC_MSG_ERROR([*** libusb-config not found. You need a working libusb installation.]) +-fi +- +-dnl check for version of libusb +-AC_MSG_CHECKING([if libusb version is >= 0.1.7]) +-libusb_version_needed="1007" +-libusb_version=`$HAVELIBUSB --version | sed -e "s/libusb //" | awk 'BEGIN { FS = "."; } { printf "%d", ($''1 * 1000 + $''2) * 1000 + $''3;}'` ++dnl check for libusb ++PKG_CHECK_MODULES(LIBUSB, libusb >= 0.1.11) ++CFLAGS="$CFLAGS $LIBUSB_CFLAGS" ++LIBS="$LIBS $LIBUSB_LIBS" + +-if test $libusb_version -lt $libusb_version_needed; then +- AC_MSG_RESULT(no) +- AC_MSG_ERROR([*** libusb is too old ($libusb_version). You need a libusb installation newer or equal to 0.1.7.]) +-else +- AC_MSG_RESULT(yes) +-fi ++dnl Check for recent pkg-config which supports Requires.private ++case `$PKG_CONFIG --version` in ++0.?|0.1[0-7]) PKGCONFIG_REQUIRES="Requires"; ;; ++*) PKGCONFIG_REQUIRES="Requires.private"; ;; ++esac ++AC_SUBST(PKGCONFIG_REQUIRES) + + ENABLE_ASYNC_MODE=0 + AC_ARG_WITH(async-mode, diff --git a/package/libftdi/0002-libftdi.pc-requires-libusb-fix-static-build.patch b/package/libftdi/0002-libftdi.pc-requires-libusb-fix-static-build.patch new file mode 100644 index 00000000..ee47af60 --- /dev/null +++ b/package/libftdi/0002-libftdi.pc-requires-libusb-fix-static-build.patch @@ -0,0 +1,27 @@ +From d3d6ca63cb86727533d7d83c98e70002bb04f343 Mon Sep 17 00:00:00 2001 +From: Samuel Martin +Date: Wed, 21 Jan 2015 11:18:59 +0100 +Subject: [PATCH] libftdi.pc: requires libusb (fix static build) + +--- + libftdi.pc.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/libftdi.pc.in b/libftdi.pc.in +index 2061b91..57f0a09 100644 +--- a/libftdi.pc.in ++++ b/libftdi.pc.in +@@ -5,8 +5,8 @@ includedir=@includedir@ + + Name: libftdi + Description: Library to program and control the FTDI USB controller +-Requires: ++Requires: libusb + Version: @VERSION@ +-Libs: -L${libdir} -lftdi -lusb ++Libs: -L${libdir} -lftdi + Cflags: -I${includedir} + +-- +2.1.0 + diff --git a/package/libftdi/Config.in b/package/libftdi/Config.in new file mode 100644 index 00000000..fdeac28a --- /dev/null +++ b/package/libftdi/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_LIBFTDI + bool "libftdi" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_LIBUSB_COMPAT + help + Userspace access to FTDI USB interface chips + + http://www.intra2net.com/en/developer/libftdi/index.php + +if BR2_PACKAGE_LIBFTDI + +config BR2_PACKAGE_LIBFTDI_CPP + bool "C++ bindings" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + select BR2_PACKAGE_BOOST + help + C++ bindings for libftdi + +comment "libftdi C++ bindings need a toolchain w/ wchar, C++" + depends on !BR2_USE_WCHAR || !BR2_INSTALL_LIBSTDCPP + +endif # BR2_PACKAGE_LIBFTDI + +comment "libftdi needs a toolchain w/ threads, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/libftdi/libftdi.hash b/package/libftdi/libftdi.hash new file mode 100644 index 00000000..8271ab27 --- /dev/null +++ b/package/libftdi/libftdi.hash @@ -0,0 +1,7 @@ +# Locally computed (after checking the signature from http://www.intra2net.com/en/developer/libftdi/download.php) +sha256 3176d5b5986438f33f5208e690a8bfe90941be501cc0a72118ce3d338d4b838e libftdi-0.20.tar.gz + +# Hash for license files: +sha256 6bd354f4b9beca001b1b5395be48cef1d749a3ed27dddb8114bf09eb0ab2d88c LICENSE +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING.GPL +sha256 c340cbee4974bb96019e782f2279df016c92fb1e7f5299347e779d9acedbb991 COPYING.LIB diff --git a/package/libftdi/libftdi.mk b/package/libftdi/libftdi.mk new file mode 100644 index 00000000..25734262 --- /dev/null +++ b/package/libftdi/libftdi.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# libftdi +# +################################################################################ + +LIBFTDI_VERSION = 0.20 +LIBFTDI_SITE = http://www.intra2net.com/en/developer/libftdi/download +LIBFTDI_LICENSE = LGPL-2.1 (libftdi) +LIBFTDI_LICENSE_FILES = LICENSE COPYING.LIB +LIBFTDI_DEPENDENCIES = libusb-compat libusb +HOST_LIBFTDI_DEPENDENCIES = host-libusb-compat host-libusb +LIBFTDI_INSTALL_STAGING = YES +LIBFTDI_CONFIG_SCRIPTS = libftdi-config +LIBFTDI_AUTORECONF = YES + +LIBFTDI_CONF_OPTS = --without-examples + +# configure detect it automaticaly so we need to force it +ifeq ($(BR2_PACKAGE_LIBFTDI_CPP),y) +LIBFTDI_LICENSE += , GPL-2.0 with exception (ftdipp) +LIBFTDI_LICENSE_FILES += COPYING.GPL +LIBFTDI_DEPENDENCIES += boost +LIBFTDI_CONF_OPTS += --enable-libftdipp +else +LIBFTDI_CONF_OPTS += --disable-libftdipp +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libftdi1/0001-cmake-use-the-standard-CMake-flag-to-drive-the-share.patch b/package/libftdi1/0001-cmake-use-the-standard-CMake-flag-to-drive-the-share.patch new file mode 100644 index 00000000..8c45b881 --- /dev/null +++ b/package/libftdi1/0001-cmake-use-the-standard-CMake-flag-to-drive-the-share.patch @@ -0,0 +1,93 @@ +From 7e57ff280b55b45e74329b9988279e8831d32eab Mon Sep 17 00:00:00 2001 +From: Samuel Martin +Date: Sun, 25 Jan 2015 09:45:04 +0100 +Subject: [PATCH] cmake: use the standard CMake flag to drive the shared + object build + +Remove the STATICLIBS CMake option (and the code handling it) and let +the standard CMake flags drive the shared object build. + +Signed-off-by: Samuel Martin +[Fabrice: update for 1.5] +Signed-off-by: Fabrice Fontaine +--- + CMakeOptions.txt | 1 - + ftdipp/CMakeLists.txt | 14 +------------- + src/CMakeLists.txt | 13 +------------ + 3 files changed, 2 insertions(+), 26 deletions(-) + +diff --git a/CMakeOptions.txt b/CMakeOptions.txt +index 07b5887..b780ffd 100644 +--- a/CMakeOptions.txt ++++ b/CMakeOptions.txt +@@ -1,4 +1,3 @@ +-option ( STATICLIBS "Build static libraries" ON ) + option ( BUILD_TESTS "Build unit tests with Boost Unit Test framework" OFF ) + option ( DOCUMENTATION "Generate API documentation with Doxygen" OFF ) + option ( EXAMPLES "Build example programs" ON ) +diff --git a/ftdipp/CMakeLists.txt b/ftdipp/CMakeLists.txt +index fac5bcc..a06edf1 100644 +--- a/ftdipp/CMakeLists.txt ++++ b/ftdipp/CMakeLists.txt +@@ -12,7 +12,7 @@ include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR} + include_directories(${Boost_INCLUDE_DIRS}) + + # Shared library +-add_library(ftdipp1 SHARED ${cpp_sources}) ++add_library(ftdipp1 ${cpp_sources}) + + math(EXPR VERSION_FIXUP "${MAJOR_VERSION} + 1") # Compatibility with previous releases + set_target_properties(ftdipp1 PROPERTIES VERSION ${VERSION_FIXUP}.${MINOR_VERSION}.0 SOVERSION 3) +@@ -29,18 +29,6 @@ install ( TARGETS ftdipp1 + ARCHIVE DESTINATION lib${LIB_SUFFIX} + ) + +-# Static library +-if ( STATICLIBS ) +- add_library(ftdipp1-static STATIC ${cpp_sources}) +- set_target_properties(ftdipp1-static PROPERTIES OUTPUT_NAME "ftdipp1") +- set_target_properties(ftdipp1-static PROPERTIES CLEAN_DIRECT_OUTPUT 1) +- +- install ( TARGETS ftdipp1-static +- ARCHIVE DESTINATION lib${LIB_SUFFIX} +- COMPONENT staticlibs +- ) +-endif () +- + install ( FILES ${cpp_headers} + DESTINATION include/${PROJECT_NAME} + COMPONENT headers +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index 17b3617..ae4fc61 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -21,7 +21,7 @@ configure_file(ftdi_version_i.h.in "${CMAKE_CURRENT_BINARY_DIR}/ftdi_version_i.h + set(c_sources ${CMAKE_CURRENT_SOURCE_DIR}/ftdi.c ${CMAKE_CURRENT_SOURCE_DIR}/ftdi_stream.c CACHE INTERNAL "List of c sources" ) + set(c_headers ${CMAKE_CURRENT_SOURCE_DIR}/ftdi.h CACHE INTERNAL "List of c headers" ) + +-add_library(ftdi1 SHARED ${c_sources}) ++add_library(ftdi1 ${c_sources}) + + math(EXPR VERSION_FIXUP "${MAJOR_VERSION} + 1") # Compatibility with previous releases + set_target_properties(ftdi1 PROPERTIES VERSION ${VERSION_FIXUP}.${MINOR_VERSION}.0 SOVERSION 2) +@@ -38,17 +38,6 @@ install ( TARGETS ftdi1 + ARCHIVE DESTINATION lib${LIB_SUFFIX} + ) + +-if ( STATICLIBS ) +- add_library(ftdi1-static STATIC ${c_sources}) +- target_link_libraries(ftdi1-static ${LIBUSB_LIBRARIES}) +- set_target_properties(ftdi1-static PROPERTIES OUTPUT_NAME "ftdi1") +- set_target_properties(ftdi1-static PROPERTIES CLEAN_DIRECT_OUTPUT 1) +- install ( TARGETS ftdi1-static +- ARCHIVE DESTINATION lib${LIB_SUFFIX} +- COMPONENT staticlibs +- ) +-endif () +- + install ( FILES ${c_headers} + DESTINATION include/${PROJECT_NAME} + COMPONENT headers +-- +2.27.0 + diff --git a/package/libftdi1/0002-CMakeLists.txt-fix-paths-when-FTDIPP-is-set.patch b/package/libftdi1/0002-CMakeLists.txt-fix-paths-when-FTDIPP-is-set.patch new file mode 100644 index 00000000..14c248bb --- /dev/null +++ b/package/libftdi1/0002-CMakeLists.txt-fix-paths-when-FTDIPP-is-set.patch @@ -0,0 +1,46 @@ +From 3e68fd7da98a755403cf5719c3d7a3c2f4dcbb58 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Fri, 17 Jul 2020 21:04:45 +0200 +Subject: [PATCH] CMakeLists.txt: fix paths when FTDIPP is set + +Use the same project name (i.e. libftdi1 and not libftdipp1) when FTDIPP +is enabled as suggested by Aurelien Jarno in +http://developer.intra2net.com/mailarchive/html/libftdi/2020/msg00044.html + +Without this change, the libftdi1.pc config file defines the include +path as /usr/local/include/libftdipp1 while the ftdi.h file is actually +installed in /usr/local/include/libftdi1 + +This is an issue for example for libsigrok which will fail on: + +In file included from src/hardware/asix-sigma/protocol.c:27: +src/hardware/asix-sigma/protocol.h:28:10: fatal error: ftdi.h: No such file or directory + 28 | #include + | ^~~~~~~~ + +Fixes: + - http://autobuild.buildroot.org/results/1427f44e36752c337791597fab47a1889552a2fe + +Signed-off-by: Fabrice Fontaine +[Upstream status: +http://developer.intra2net.com/mailarchive/html/libftdi/2020/msg00045.html] +--- + CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 5aecafc..3b0b87c 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -136,7 +136,7 @@ endif () + + add_subdirectory(src) + if ( FTDIPP ) +- project(libftdipp1 C CXX) ++ project(libftdi1 C CXX) + add_subdirectory(ftdipp) + endif () + if ( PYTHON_BINDINGS ) +-- +2.27.0 + diff --git a/package/libftdi1/Config.in b/package/libftdi1/Config.in new file mode 100644 index 00000000..2d325735 --- /dev/null +++ b/package/libftdi1/Config.in @@ -0,0 +1,39 @@ +config BR2_PACKAGE_LIBFTDI1 + bool "libftdi1" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + help + Userspace access to FTDI USB interface chips (version 1.x) + + http://www.intra2net.com/en/developer/libftdi/index.php + +if BR2_PACKAGE_LIBFTDI1 + +config BR2_PACKAGE_LIBFTDI1_LIBFTDIPP1 + bool "libftdipp1" + depends on BR2_INSTALL_LIBSTDCPP # boost + depends on BR2_TOOLCHAIN_HAS_THREADS # boost + depends on BR2_USE_WCHAR # boost + select BR2_PACKAGE_BOOST + help + C++ bindings for libftdi + +comment "libftdipp1 needs a toolchain w/ C++, wchar" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR + +config BR2_PACKAGE_LIBFTDI1_PYTHON_BINDINGS + bool "python bindings" + depends on BR2_PACKAGE_PYTHON || BR2_PACKAGE_PYTHON3 + help + Python bindings for libftdi + +config BR2_PACKAGE_LIBFTDI1_FDTI_EEPROM + bool "ftdi_eeprom tool" + select BR2_PACKAGE_LIBCONFUSE + +endif # BR2_PACKAGE_LIBFTDI1 + +comment "libftdi1 needs a toolchain w/ threads, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/libftdi1/libftdi1.hash b/package/libftdi1/libftdi1.hash new file mode 100644 index 00000000..6b825e8d --- /dev/null +++ b/package/libftdi1/libftdi1.hash @@ -0,0 +1,8 @@ +# Locally computed after checking the signature +# https://www.intra2net.com/en/developer/libftdi/download/libftdi1-1.5.tar.bz2.sig +sha256 7c7091e9c86196148bd41177b4590dccb1510bfe6cea5bf7407ff194482eb049 libftdi1-1.5.tar.bz2 + +# Hash for license files: +sha256 524f46428bf72bb8c6acfeca4909551fd2e0bdbb5305406d38382f4056095c56 LICENSE +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING.GPL +sha256 b7993225104d90ddd8024fd838faf300bea5e83d91203eab98e29512acebd69c COPYING.LIB diff --git a/package/libftdi1/libftdi1.mk b/package/libftdi1/libftdi1.mk new file mode 100644 index 00000000..6688694b --- /dev/null +++ b/package/libftdi1/libftdi1.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# libftdi1 +# +################################################################################ + +LIBFTDI1_VERSION = 1.5 +LIBFTDI1_SOURCE = libftdi1-$(LIBFTDI1_VERSION).tar.bz2 +LIBFTDI1_SITE = http://www.intra2net.com/en/developer/libftdi/download +LIBFTDI1_INSTALL_STAGING = YES +LIBFTDI1_DEPENDENCIES = libusb +LIBFTDI1_LICENSE = LGPL-2.1 (libftdi1), MIT (libftdi1) +LIBFTDI1_LICENSE_FILES = LICENSE COPYING.LIB +LIBFTDI1_CONFIG_SCRIPTS = libftdi1-config +LIBFTDI1_CONF_OPTS = -DDOCUMENTATION=OFF -DEXAMPLES=OFF + +ifeq ($(BR2_PACKAGE_LIBFTDI1_LIBFTDIPP1),y) +LIBFTDI1_LICENSE += , GPL-2.0 with exception (libftdipp1) +LIBFTDI1_LICENSE_FILES += COPYING.GPL +LIBFTDI1_DEPENDENCIES += boost +LIBFTDI1_CONF_OPTS += -DFTDIPP=ON +else +LIBFTDI1_CONF_OPTS += -DFTDIPP=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBFTDI1_PYTHON_BINDINGS),y) +LIBFTDI1_DEPENDENCIES += $(if $(BR2_PACKAGE_PYTHON),python,python3) host-swig +LIBFTDI1_CONF_OPTS += -DPYTHON_BINDINGS=ON +else +LIBFTDI1_CONF_OPTS += -DPYTHON_BINDINGS=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBFTDI1_FDTI_EEPROM),y) +# ftdi_eeprom optionally depends on libintl +LIBFTDI1_LICENSE += , GPL-2.0 (ftdi_eeprom) +LIBFTDI1_LICENSE_FILES += COPYING.GPL +LIBFTDI1_DEPENDENCIES += libconfuse $(TARGET_NLS_DEPENDENCIES) +LIBFTDI1_CONF_OPTS += -DFTDI_EEPROM=ON +else +LIBFTDI1_CONF_OPTS += -DFTDI_EEPROM=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/libfuse/0001-fix-aarch64-build.patch b/package/libfuse/0001-fix-aarch64-build.patch new file mode 100644 index 00000000..3b88687f --- /dev/null +++ b/package/libfuse/0001-fix-aarch64-build.patch @@ -0,0 +1,22 @@ +Fix build on the AArch64 platform + +Upstream-Status: Submitted + +Signed-off-by: Riku Voipio + +--- a/include/fuse_kernel.h ++++ b/include/fuse_kernel.h +@@ -88,12 +88,7 @@ + #ifndef _LINUX_FUSE_H + #define _LINUX_FUSE_H + +-#include +-#define __u64 uint64_t +-#define __s64 int64_t +-#define __u32 uint32_t +-#define __s32 int32_t +-#define __u16 uint16_t ++#include + + /* + * Version negotiation: diff --git a/package/libfuse/Config.in b/package/libfuse/Config.in new file mode 100644 index 00000000..2b0e31a9 --- /dev/null +++ b/package/libfuse/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_LIBFUSE + bool "libfuse" + # Really doesn't like static, see fuse/lib/fuse.c + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + help + FUSE (Filesystem in UserSpacE) + + https://github.com/libfuse/libfuse + +comment "libfuse needs a toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/libfuse/libfuse.hash b/package/libfuse/libfuse.hash new file mode 100644 index 00000000..f5223259 --- /dev/null +++ b/package/libfuse/libfuse.hash @@ -0,0 +1,6 @@ +# Locally calculated after checking pgp signature +sha256 d0e69d5d608cc22ff4843791ad097f554dd32540ddc9bed7638cc6fea7c1b4b5 fuse-2.9.9.tar.gz + +# Hash for license files: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LIB diff --git a/package/libfuse/libfuse.mk b/package/libfuse/libfuse.mk new file mode 100644 index 00000000..2677e468 --- /dev/null +++ b/package/libfuse/libfuse.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# libfuse +# +################################################################################ + +LIBFUSE_VERSION = 2.9.9 +LIBFUSE_SOURCE = fuse-$(LIBFUSE_VERSION).tar.gz +LIBFUSE_SITE = https://github.com/libfuse/libfuse/releases/download/fuse-$(LIBFUSE_VERSION) +LIBFUSE_LICENSE = GPL-2.0, LGPL-2.1 +LIBFUSE_LICENSE_FILES = COPYING COPYING.LIB +LIBFUSE_CPE_ID_VENDOR = libfuse_project +LIBFUSE_INSTALL_STAGING = YES +LIBFUSE_DEPENDENCIES = $(if $(BR2_PACKAGE_LIBICONV),libiconv) +LIBFUSE_CONF_OPTS = \ + --disable-example \ + --enable-lib \ + --enable-util \ + UDEV_RULES_PATH=/lib/udev/rules.d + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +define LIBFUSE_INSTALL_UDEV + mkdir -p $(TARGET_DIR)/lib/udev/rules.d + cp $(STAGING_DIR)/lib/udev/rules.d/*-fuse.rules $(TARGET_DIR)/lib/udev/rules.d +endef + +LIBFUSE_POST_INSTALL_TARGET_HOOKS += LIBFUSE_INSTALL_UDEV +endif + +define LIBFUSE_INSTALL_TARGET_CMDS + cp -dpf $(STAGING_DIR)/usr/bin/fusermount $(TARGET_DIR)/usr/bin/ + cp -dpf $(STAGING_DIR)/usr/lib/libfuse.so* $(TARGET_DIR)/usr/lib/ +endef + +define LIBFUSE_DEVICES + /dev/fuse c 666 0 0 10 229 0 0 - +endef + +define LIBFUSE_PERMISSIONS + /usr/bin/fusermount f 4755 0 0 - - - - - +endef + +$(eval $(autotools-package)) diff --git a/package/libfuse3/Config.in b/package/libfuse3/Config.in new file mode 100644 index 00000000..584d3bf1 --- /dev/null +++ b/package/libfuse3/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_LIBFUSE3 + bool "libfuse3" + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + help + The reference implementation of the Linux FUSE + (Filesystem in Userspace) interface. + + https://github.com/libfuse/libfuse + +comment "libfuse3 needs a toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/libfuse3/libfuse3.hash b/package/libfuse3/libfuse3.hash new file mode 100644 index 00000000..0414264b --- /dev/null +++ b/package/libfuse3/libfuse3.hash @@ -0,0 +1,3 @@ +# Locally calculated sha256 checksums +sha256 bfcb2520fd83db29e9fefd57d3abd5285f38ad484739aeee8e03fbec9b2d984a libfuse3-3.10.4.tar.gz +sha256 b8832d9caaa075bbbd2aef24efa09f8b7ab66a832812d88c602da0c7b4397fad LICENSE diff --git a/package/libfuse3/libfuse3.mk b/package/libfuse3/libfuse3.mk new file mode 100644 index 00000000..fc747c5b --- /dev/null +++ b/package/libfuse3/libfuse3.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# libfuse3 +# +################################################################################ + +LIBFUSE3_VERSION = 3.10.4 +LIBFUSE3_SITE = $(call github,libfuse,libfuse,fuse-$(LIBFUSE3_VERSION)) +LIBFUSE3_LICENSE = LGPL-2.1 +LIBFUSE3_LICENSE_FILES = LICENSE +LIBFUSE3_CPE_ID_VENDOR = libfuse_project +LIBFUSE3_CPE_ID_PRODUCT = libfuse +LIBFUSE3_INSTALL_STAGING = YES +LIBFUSE3_DEPENDENCIES = $(if $(BR2_PACKAGE_LIBICONV),libiconv) +LIBFUSE3_CONF_OPTS = \ + -Dexamples=false \ + -Dudevrulesdir=/lib/udev/rules.d \ + -Duseroot=false \ + -Dtests=false + +define LIBFUSE3_DEVICES + /dev/fuse c 666 0 0 10 229 0 0 - +endef + +define LIBFUSE3_PERMISSIONS + /usr/bin/fusermount3 f 4755 0 0 - - - - - +endef + +define LIBFUSE3_LINUX_CONFIG_FIXUPS + $(call KCONFIG_ENABLE_OPT,CONFIG_FUSE_FS) +endef + +$(eval $(meson-package)) diff --git a/package/libg7221/Config.in b/package/libg7221/Config.in new file mode 100644 index 00000000..e057d289 --- /dev/null +++ b/package/libg7221/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBG7221 + bool "libg7221" + help + libg722_1 is a library for the ITU G.722.1 and Annex C + wideband speech codecs. + + http://www.soft-switch.org diff --git a/package/libg7221/libg7221.hash b/package/libg7221/libg7221.hash new file mode 100644 index 00000000..b2174e8b --- /dev/null +++ b/package/libg7221/libg7221.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 7f00d6a4f435a91ab3bc96e6c95aa1334bd416f80d98843b4f178067239ee832 libg7221-dbfc29d4806ecdace50379a2f4d68a992a6fec34-br1.tar.gz +sha256 26cc5f718279b45dbe34e25a2d29b2c8ca487bd9ab11b2d68c9318ff59d5c645 COPYING diff --git a/package/libg7221/libg7221.mk b/package/libg7221/libg7221.mk new file mode 100644 index 00000000..813af11c --- /dev/null +++ b/package/libg7221/libg7221.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libg7221 +# +################################################################################ + +LIBG7221_VERSION = dbfc29d4806ecdace50379a2f4d68a992a6fec34 +# we use the FreeSwitch fork because it contains pkgconf support +LIBG7221_SITE = https://freeswitch.org/stash/scm/sd/libg7221.git +LIBG7221_SITE_METHOD = git +LIBG7221_LICENSE = Polycom +LIBG7221_LICENSE_FILES = COPYING +LIBG7221_AUTORECONF = YES +LIBG7221_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/libgcrypt/0001-configure.ac-add-an-option-to-disable-tests.patch b/package/libgcrypt/0001-configure.ac-add-an-option-to-disable-tests.patch new file mode 100644 index 00000000..21ff20a4 --- /dev/null +++ b/package/libgcrypt/0001-configure.ac-add-an-option-to-disable-tests.patch @@ -0,0 +1,66 @@ +From 7fe1b8a53cc8c865c2a10dcd8f6cb4e51ccc6300 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 29 Jul 2019 12:19:10 +0200 +Subject: [PATCH] configure.ac: add an option to disable tests + +Add an option to allow the user to disable tests, this can be useful for +example when the toolchain does not provide thread. Indeed, in this +case, libgcrypt fails to build t-lock: + +t-lock.c: In function 'run_test': +t-lock.c:359:3: error: unknown type name 'pthread_t' + pthread_t rthread; + +Fixes: + - http://autobuild.buildroot.org/results/50a8ba572e3fafd3c6a39bd54bcfcaf78b5ad325 + +Signed-off-by: Fabrice Fontaine +--- + Makefile.am | 7 ++++++- + configure.ac | 10 ++++++++++ + 2 files changed, 16 insertions(+), 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index 7fa4fa4d..f0bd90e4 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -39,9 +39,14 @@ else + doc = + endif + ++if BUILD_TESTS ++tests = tests ++else ++tests = ++endif + + DIST_SUBDIRS = m4 compat mpi cipher random src doc tests +-SUBDIRS = compat mpi cipher random src $(doc) tests ++SUBDIRS = compat mpi cipher random src $(doc) $(tests) + + EXTRA_DIST = autogen.sh autogen.rc README.GIT LICENSES \ + ChangeLog-2011 build-aux/ChangeLog-2011 doc/ChangeLog-2011 \ +diff --git a/configure.ac b/configure.ac +index e8c8cd39..1a6b61e5 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2710,6 +2710,16 @@ AC_ARG_ENABLE([doc], AC_HELP_STRING([--disable-doc], + AM_CONDITIONAL([BUILD_DOC], [test "x$build_doc" != xno]) + + ++# ++# Option to disable building of tests ++# ++build_tests=yes ++AC_ARG_ENABLE([tests], AC_HELP_STRING([--disable-tests], ++ [do not build tests]), ++ build_tests=$enableval, build_tests=yes) ++AM_CONDITIONAL([BUILD_TESTS], [test "x$build_tests" != xno]) ++ ++ + # + # Provide information about the build. + # +-- +2.20.1 + diff --git a/package/libgcrypt/Config.in b/package/libgcrypt/Config.in new file mode 100644 index 00000000..d3e5d4f7 --- /dev/null +++ b/package/libgcrypt/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBGCRYPT + bool "libgcrypt" + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgpg-error + select BR2_PACKAGE_LIBGPG_ERROR + help + LibGCrypt is GNU's basic cryptographic library. + + http://www.gnu.org/software/libgcrypt/ diff --git a/package/libgcrypt/libgcrypt.hash b/package/libgcrypt/libgcrypt.hash new file mode 100644 index 00000000..26ec492e --- /dev/null +++ b/package/libgcrypt/libgcrypt.hash @@ -0,0 +1,7 @@ +# From https://www.gnupg.org/download/integrity_check.html +sha1 6b18f453fee677078586279d96fb88e5df7b3f35 libgcrypt-1.9.3.tar.bz2 +# Locally calculated after checking signature +# https://gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-1.9.3.tar.bz2.sig +# using key D8692123C4065DEA5E0F3AB5249B39D24F25E3B6 +sha256 97ebe4f94e2f7e35b752194ce15a0f3c66324e0ff6af26659bbfb5ff2ec328fd libgcrypt-1.9.3.tar.bz2 +sha256 ca0061fc1381a3ab242310e4b3f56389f28e3d460eb2fd822ed7a21c6f030532 COPYING.LIB diff --git a/package/libgcrypt/libgcrypt.mk b/package/libgcrypt/libgcrypt.mk new file mode 100644 index 00000000..26be5d2f --- /dev/null +++ b/package/libgcrypt/libgcrypt.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# libgcrypt +# +################################################################################ + +LIBGCRYPT_VERSION = 1.9.3 +LIBGCRYPT_SOURCE = libgcrypt-$(LIBGCRYPT_VERSION).tar.bz2 +LIBGCRYPT_LICENSE = LGPL-2.1+ +LIBGCRYPT_LICENSE_FILES = COPYING.LIB +LIBGCRYPT_SITE = https://gnupg.org/ftp/gcrypt/libgcrypt +LIBGCRYPT_INSTALL_STAGING = YES +LIBGCRYPT_DEPENDENCIES = libgpg-error +LIBGCRYPT_CONFIG_SCRIPTS = libgcrypt-config +LIBGCRYPT_CPE_ID_VENDOR = gnupg + +# Patching configure.ac and Makefile.am in 0001 +LIBGCRYPT_AUTORECONF = YES +LIBGCRYPT_CONF_OPTS = \ + --disable-tests \ + --with-gpg-error-prefix=$(STAGING_DIR)/usr + +# Libgcrypt doesn't support assembly for coldfire +ifeq ($(BR2_m68k_cf),y) +LIBGCRYPT_CONF_OPTS += --disable-asm +endif + +# Code doesn't build in thumb mode +ifeq ($(BR2_arm),y) +LIBGCRYPT_CONF_ENV += CFLAGS="$(patsubst -mthumb,,$(TARGET_CFLAGS))" +endif + +$(eval $(autotools-package)) diff --git a/package/libgdiplus/0001-Embed-the-license-texts-in-LICENSE-like-on-Mono-repo.patch b/package/libgdiplus/0001-Embed-the-license-texts-in-LICENSE-like-on-Mono-repo.patch new file mode 100644 index 00000000..02efc972 --- /dev/null +++ b/package/libgdiplus/0001-Embed-the-license-texts-in-LICENSE-like-on-Mono-repo.patch @@ -0,0 +1,1863 @@ +From 850660e11ab302961aaf5ef336ed02451ade9f5b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Alexander=20K=C3=B6plinger?= +Date: Thu, 21 Sep 2017 12:50:21 +0200 +Subject: [PATCH] Embed the license texts in LICENSE like on Mono repo + +Remove the MPL-1.1.html file. + +Upstream: ad0fb6f0a5e3e11f7e474456d53cc660f7808aed +Signed-off-by: Thomas Petazzoni +--- + LICENSE | 980 +++++++++++++++++++++++++++++++++++++++++++++++++++ + MPL-1.1.html | 840 ------------------------------------------- + Makefile.am | 2 +- + 3 files changed, 981 insertions(+), 841 deletions(-) + delete mode 100644 MPL-1.1.html + +diff --git a/LICENSE b/LICENSE +index f5b62b7..b3164bb 100644 +--- a/LICENSE ++++ b/LICENSE +@@ -2,3 +2,983 @@ Libgdiplus is licensed under the terms of the GNU Library GPL or the + Mozilla Public License 1.1. + + ++The Licenses ++============ ++ ++### GNU Library GPL ++ ++ GNU LESSER GENERAL PUBLIC LICENSE ++ Version 2.1, February 1999 ++ ++ Copyright (C) 1991, 1999 Free Software Foundation, Inc. ++ 51 Franklin Street, 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. ++ ++[This is the first released version of the Lesser GPL. It also counts ++ as the successor of the GNU Library Public License, version 2, hence ++ the version number 2.1.] ++ ++ Preamble ++ ++ The licenses for most software are designed to take away your ++freedom to share and change it. By contrast, the GNU General Public ++Licenses are intended to guarantee your freedom to share and change ++free software--to make sure the software is free for all its users. ++ ++ This license, the Lesser General Public License, applies to some ++specially designated software packages--typically libraries--of the ++Free Software Foundation and other authors who decide to use it. You ++can use it too, but we suggest you first think carefully about whether ++this license or the ordinary General Public License is the better ++strategy to use in any particular case, based on the explanations below. ++ ++ When we speak of free software, we are referring to freedom of use, ++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 and use pieces of ++it in new free programs; and that you are informed that you can do ++these things. ++ ++ To protect your rights, we need to make restrictions that forbid ++distributors to deny you these rights or to ask you to surrender these ++rights. These restrictions translate to certain responsibilities for ++you if you distribute copies of the library or if you modify it. ++ ++ For example, if you distribute copies of the library, whether gratis ++or for a fee, you must give the recipients all the rights that we gave ++you. You must make sure that they, too, receive or can get the source ++code. If you link other code with the library, you must provide ++complete object files to the recipients, so that they can relink them ++with the library after making changes to the library and recompiling ++it. And you must show them these terms so they know their rights. ++ ++ We protect your rights with a two-step method: (1) we copyright the ++library, and (2) we offer you this license, which gives you legal ++permission to copy, distribute and/or modify the library. ++ ++ To protect each distributor, we want to make it very clear that ++there is no warranty for the free library. Also, if the library is ++modified by someone else and passed on, the recipients should know ++that what they have is not the original version, so that the original ++author's reputation will not be affected by problems that might be ++introduced by others. ++ ++ Finally, software patents pose a constant threat to the existence of ++any free program. We wish to make sure that a company cannot ++effectively restrict the users of a free program by obtaining a ++restrictive license from a patent holder. Therefore, we insist that ++any patent license obtained for a version of the library must be ++consistent with the full freedom of use specified in this license. ++ ++ Most GNU software, including some libraries, is covered by the ++ordinary GNU General Public License. This license, the GNU Lesser ++General Public License, applies to certain designated libraries, and ++is quite different from the ordinary General Public License. We use ++this license for certain libraries in order to permit linking those ++libraries into non-free programs. ++ ++ When a program is linked with a library, whether statically or using ++a shared library, the combination of the two is legally speaking a ++combined work, a derivative of the original library. The ordinary ++General Public License therefore permits such linking only if the ++entire combination fits its criteria of freedom. The Lesser General ++Public License permits more lax criteria for linking other code with ++the library. ++ ++ We call this license the "Lesser" General Public License because it ++does Less to protect the user's freedom than the ordinary General ++Public License. It also provides other free software developers Less ++of an advantage over competing non-free programs. These disadvantages ++are the reason we use the ordinary General Public License for many ++libraries. However, the Lesser license provides advantages in certain ++special circumstances. ++ ++ For example, on rare occasions, there may be a special need to ++encourage the widest possible use of a certain library, so that it becomes ++a de-facto standard. To achieve this, non-free programs must be ++allowed to use the library. A more frequent case is that a free ++library does the same job as widely used non-free libraries. In this ++case, there is little to gain by limiting the free library to free ++software only, so we use the Lesser General Public License. ++ ++ In other cases, permission to use a particular library in non-free ++programs enables a greater number of people to use a large body of ++free software. For example, permission to use the GNU C Library in ++non-free programs enables many more people to use the whole GNU ++operating system, as well as its variant, the GNU/Linux operating ++system. ++ ++ Although the Lesser General Public License is Less protective of the ++users' freedom, it does ensure that the user of a program that is ++linked with the Library has the freedom and the wherewithal to run ++that program using a modified version of the Library. ++ ++ The precise terms and conditions for copying, distribution and ++modification follow. Pay close attention to the difference between a ++"work based on the library" and a "work that uses the library". The ++former contains code derived from the library, whereas the latter must ++be combined with the library in order to run. ++ ++ GNU LESSER GENERAL PUBLIC LICENSE ++ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ++ ++ 0. This License Agreement applies to any software library or other ++program which contains a notice placed by the copyright holder or ++other authorized party saying it may be distributed under the terms of ++this Lesser General Public License (also called "this License"). ++Each licensee is addressed as "you". ++ ++ A "library" means a collection of software functions and/or data ++prepared so as to be conveniently linked with application programs ++(which use some of those functions and data) to form executables. ++ ++ The "Library", below, refers to any such software library or work ++which has been distributed under these terms. A "work based on the ++Library" means either the Library or any derivative work under ++copyright law: that is to say, a work containing the Library or a ++portion of it, either verbatim or with modifications and/or translated ++straightforwardly into another language. (Hereinafter, translation is ++included without limitation in the term "modification".) ++ ++ "Source code" for a work means the preferred form of the work for ++making modifications to it. For a library, 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 library. ++ ++ Activities other than copying, distribution and modification are not ++covered by this License; they are outside its scope. The act of ++running a program using the Library is not restricted, and output from ++such a program is covered only if its contents constitute a work based ++on the Library (independent of the use of the Library in a tool for ++writing it). Whether that is true depends on what the Library does ++and what the program that uses the Library does. ++ ++ 1. You may copy and distribute verbatim copies of the Library's ++complete 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 distribute a copy of this License along with the ++Library. ++ ++ 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 Library or any portion ++of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. ++ ++ b) You must cause the files modified to carry prominent notices ++ stating that you changed the files and the date of any change. ++ ++ c) You must cause the whole of the work to be licensed at no ++ charge to all third parties under the terms of this License. ++ ++ d) If a facility in the modified Library refers to a function or a ++ table of data to be supplied by an application program that uses ++ the facility, other than as an argument passed when the facility ++ is invoked, then you must make a good faith effort to ensure that, ++ in the event an application does not supply such function or ++ table, the facility still operates, and performs whatever part of ++ its purpose remains meaningful. ++ ++ (For example, a function in a library to compute square roots has ++ a purpose that is entirely well-defined independent of the ++ application. Therefore, Subsection 2d requires that any ++ application-supplied function or table used by this function must ++ be optional: if the application does not supply it, the square ++ root function must still compute square roots.) ++ ++These requirements apply to the modified work as a whole. If ++identifiable sections of that work are not derived from the Library, ++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 Library, 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 Library. ++ ++In addition, mere aggregation of another work not based on the Library ++with the Library (or with a work based on the Library) on a volume of ++a storage or distribution medium does not bring the other work under ++the scope of this License. ++ ++ 3. You may opt to apply the terms of the ordinary GNU General Public ++License instead of this License to a given copy of the Library. To do ++this, you must alter all the notices that refer to this License, so ++that they refer to the ordinary GNU General Public License, version 2, ++instead of to this License. (If a newer version than version 2 of the ++ordinary GNU General Public License has appeared, then you can specify ++that version instead if you wish.) Do not make any other change in ++these notices. ++ ++ Once this change is made in a given copy, it is irreversible for ++that copy, so the ordinary GNU General Public License applies to all ++subsequent copies and derivative works made from that copy. ++ ++ This option is useful when you wish to copy part of the code of ++the Library into a program that is not a library. ++ ++ 4. You may copy and distribute the Library (or a portion or ++derivative of it, under Section 2) in object code or executable form ++under the terms of Sections 1 and 2 above provided that you 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. ++ ++ If distribution of 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 satisfies the requirement to ++distribute the source code, even though third parties are not ++compelled to copy the source along with the object code. ++ ++ 5. A program that contains no derivative of any portion of the ++Library, but is designed to work with the Library by being compiled or ++linked with it, is called a "work that uses the Library". Such a ++work, in isolation, is not a derivative work of the Library, and ++therefore falls outside the scope of this License. ++ ++ However, linking a "work that uses the Library" with the Library ++creates an executable that is a derivative of the Library (because it ++contains portions of the Library), rather than a "work that uses the ++library". The executable is therefore covered by this License. ++Section 6 states terms for distribution of such executables. ++ ++ When a "work that uses the Library" uses material from a header file ++that is part of the Library, the object code for the work may be a ++derivative work of the Library even though the source code is not. ++Whether this is true is especially significant if the work can be ++linked without the Library, or if the work is itself a library. The ++threshold for this to be true is not precisely defined by law. ++ ++ If such an object file uses only numerical parameters, data ++structure layouts and accessors, and small macros and small inline ++functions (ten lines or less in length), then the use of the object ++file is unrestricted, regardless of whether it is legally a derivative ++work. (Executables containing this object code plus portions of the ++Library will still fall under Section 6.) ++ ++ Otherwise, if the work is a derivative of the Library, you may ++distribute the object code for the work under the terms of Section 6. ++Any executables containing that work also fall under Section 6, ++whether or not they are linked directly with the Library itself. ++ ++ 6. As an exception to the Sections above, you may also combine or ++link a "work that uses the Library" with the Library to produce a ++work containing portions of the Library, and distribute that work ++under terms of your choice, provided that the terms permit ++modification of the work for the customer's own use and reverse ++engineering for debugging such modifications. ++ ++ You must give prominent notice with each copy of the work that the ++Library is used in it and that the Library and its use are covered by ++this License. You must supply a copy of this License. If the work ++during execution displays copyright notices, you must include the ++copyright notice for the Library among them, as well as a reference ++directing the user to the copy of this License. Also, you must do one ++of these things: ++ ++ a) Accompany the work with the complete corresponding ++ machine-readable source code for the Library including whatever ++ changes were used in the work (which must be distributed under ++ Sections 1 and 2 above); and, if the work is an executable linked ++ with the Library, with the complete machine-readable "work that ++ uses the Library", as object code and/or source code, so that the ++ user can modify the Library and then relink to produce a modified ++ executable containing the modified Library. (It is understood ++ that the user who changes the contents of definitions files in the ++ Library will not necessarily be able to recompile the application ++ to use the modified definitions.) ++ ++ b) Use a suitable shared library mechanism for linking with the ++ Library. A suitable mechanism is one that (1) uses at run time a ++ copy of the library already present on the user's computer system, ++ rather than copying library functions into the executable, and (2) ++ will operate properly with a modified version of the library, if ++ the user installs one, as long as the modified version is ++ interface-compatible with the version that the work was made with. ++ ++ c) Accompany the work with a written offer, valid for at ++ least three years, to give the same user the materials ++ specified in Subsection 6a, above, for a charge no more ++ than the cost of performing this distribution. ++ ++ d) If distribution of the work is made by offering access to copy ++ from a designated place, offer equivalent access to copy the above ++ specified materials from the same place. ++ ++ e) Verify that the user has already received a copy of these ++ materials or that you have already sent this user a copy. ++ ++ For an executable, the required form of the "work that uses the ++Library" must include any data and utility programs needed for ++reproducing the executable from it. However, as a special exception, ++the materials to be 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. ++ ++ It may happen that this requirement contradicts the license ++restrictions of other proprietary libraries that do not normally ++accompany the operating system. Such a contradiction means you cannot ++use both them and the Library together in an executable that you ++distribute. ++ ++ 7. You may place library facilities that are a work based on the ++Library side-by-side in a single library together with other library ++facilities not covered by this License, and distribute such a combined ++library, provided that the separate distribution of the work based on ++the Library and of the other library facilities is otherwise ++permitted, and provided that you do these two things: ++ ++ a) Accompany the combined library with a copy of the same work ++ based on the Library, uncombined with any other library ++ facilities. This must be distributed under the terms of the ++ Sections above. ++ ++ b) Give prominent notice with the combined library of the fact ++ that part of it is a work based on the Library, and explaining ++ where to find the accompanying uncombined form of the same work. ++ ++ 8. You may not copy, modify, sublicense, link with, or distribute ++the Library except as expressly provided under this License. Any ++attempt otherwise to copy, modify, sublicense, link with, or ++distribute the Library 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. ++ ++ 9. 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 Library or its derivative works. These actions are ++prohibited by law if you do not accept this License. Therefore, by ++modifying or distributing the Library (or any work based on the ++Library), you indicate your acceptance of this License to do so, and ++all its terms and conditions for copying, distributing or modifying ++the Library or works based on it. ++ ++ 10. Each time you redistribute the Library (or any work based on the ++Library), the recipient automatically receives a license from the ++original licensor to copy, distribute, link with or modify the Library ++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 with ++this License. ++ ++ 11. 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 Library at all. For example, if a patent ++license would not permit royalty-free redistribution of the Library 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 Library. ++ ++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. ++ ++ 12. If the distribution and/or use of the Library is restricted in ++certain countries either by patents or by copyrighted interfaces, the ++original copyright holder who places the Library 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. ++ ++ 13. The Free Software Foundation may publish revised and/or new ++versions of the Lesser 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 Library ++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 Library does not specify a ++license version number, you may choose any version ever published by ++the Free Software Foundation. ++ ++ 14. If you wish to incorporate parts of the Library into other free ++programs whose distribution conditions are incompatible with these, ++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 ++ ++ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO ++WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. ++EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR ++OTHER PARTIES PROVIDE THE LIBRARY "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 ++LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME ++THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. ++ ++ 16. 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 LIBRARY 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 ++LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries ++ ++ If you develop a new library, and you want it to be of the greatest ++possible use to the public, we recommend making it free software that ++everyone can redistribute and change. You can do so by permitting ++redistribution under these terms (or, alternatively, under the terms of the ++ordinary General Public License). ++ ++ To apply these terms, attach the following notices to the library. 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 library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ This library 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 ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with this library; if not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ ++Also add information on how to contact you by electronic and paper mail. ++ ++You should also get your employer (if you work as a programmer) or your ++school, if any, to sign a "copyright disclaimer" for the library, if ++necessary. Here is a sample; alter the names: ++ ++ Yoyodyne, Inc., hereby disclaims all copyright interest in the ++ library `Frob' (a library for tweaking knobs) written by James Random Hacker. ++ ++ , 1 April 1990 ++ Ty Coon, President of Vice ++ ++That's all there is to it! ++ ++ ++### Mozilla Public License 1.1 ++ ++ MOZILLA PUBLIC LICENSE ++ Version 1.1 ++ ++ --------------- ++ ++1. Definitions. ++ ++ 1.0.1. "Commercial Use" means distribution or otherwise making the ++ Covered Code available to a third party. ++ ++ 1.1. "Contributor" means each entity that creates or contributes to ++ the creation of Modifications. ++ ++ 1.2. "Contributor Version" means the combination of the Original ++ Code, prior Modifications used by a Contributor, and the Modifications ++ made by that particular Contributor. ++ ++ 1.3. "Covered Code" means the Original Code or Modifications or the ++ combination of the Original Code and Modifications, in each case ++ including portions thereof. ++ ++ 1.4. "Electronic Distribution Mechanism" means a mechanism generally ++ accepted in the software development community for the electronic ++ transfer of data. ++ ++ 1.5. "Executable" means Covered Code in any form other than Source ++ Code. ++ ++ 1.6. "Initial Developer" means the individual or entity identified ++ as the Initial Developer in the Source Code notice required by Exhibit ++ A. ++ ++ 1.7. "Larger Work" means a work which combines Covered Code or ++ portions thereof with code not governed by the terms of this License. ++ ++ 1.8. "License" means this document. ++ ++ 1.8.1. "Licensable" means having the right to grant, to the maximum ++ extent possible, whether at the time of the initial grant or ++ subsequently acquired, any and all of the rights conveyed herein. ++ ++ 1.9. "Modifications" means any addition to or deletion from the ++ substance or structure of either the Original Code or any previous ++ Modifications. When Covered Code is released as a series of files, a ++ Modification is: ++ A. Any addition to or deletion from the contents of a file ++ containing Original Code or previous Modifications. ++ ++ B. Any new file that contains any part of the Original Code or ++ previous Modifications. ++ ++ 1.10. "Original Code" means Source Code of computer software code ++ which is described in the Source Code notice required by Exhibit A as ++ Original Code, and which, at the time of its release under this ++ License is not already Covered Code governed by this License. ++ ++ 1.10.1. "Patent Claims" means any patent claim(s), now owned or ++ hereafter acquired, including without limitation, method, process, ++ and apparatus claims, in any patent Licensable by grantor. ++ ++ 1.11. "Source Code" means the preferred form of the Covered Code for ++ making modifications to it, including all modules it contains, plus ++ any associated interface definition files, scripts used to control ++ compilation and installation of an Executable, or source code ++ differential comparisons against either the Original Code or another ++ well known, available Covered Code of the Contributor's choice. The ++ Source Code can be in a compressed or archival form, provided the ++ appropriate decompression or de-archiving software is widely available ++ for no charge. ++ ++ 1.12. "You" (or "Your") means an individual or a legal entity ++ exercising rights under, and complying with all of the terms of, this ++ License or a future version of this License issued under Section 6.1. ++ For legal entities, "You" includes any entity which controls, is ++ controlled by, or is under common control with You. For purposes of ++ this definition, "control" means (a) the power, direct or indirect, ++ to cause the direction or management of such entity, whether by ++ contract or otherwise, or (b) ownership of more than fifty percent ++ (50%) of the outstanding shares or beneficial ownership of such ++ entity. ++ ++2. Source Code License. ++ ++ 2.1. The Initial Developer Grant. ++ The Initial Developer hereby grants You a world-wide, royalty-free, ++ non-exclusive license, subject to third party intellectual property ++ claims: ++ (a) under intellectual property rights (other than patent or ++ trademark) Licensable by Initial Developer to use, reproduce, ++ modify, display, perform, sublicense and distribute the Original ++ Code (or portions thereof) with or without Modifications, and/or ++ as part of a Larger Work; and ++ ++ (b) under Patents Claims infringed by the making, using or ++ selling of Original Code, to make, have made, use, practice, ++ sell, and offer for sale, and/or otherwise dispose of the ++ Original Code (or portions thereof). ++ ++ (c) the licenses granted in this Section 2.1(a) and (b) are ++ effective on the date Initial Developer first distributes ++ Original Code under the terms of this License. ++ ++ (d) Notwithstanding Section 2.1(b) above, no patent license is ++ granted: 1) for code that You delete from the Original Code; 2) ++ separate from the Original Code; or 3) for infringements caused ++ by: i) the modification of the Original Code or ii) the ++ combination of the Original Code with other software or devices. ++ ++ 2.2. Contributor Grant. ++ Subject to third party intellectual property claims, each Contributor ++ hereby grants You a world-wide, royalty-free, non-exclusive license ++ ++ (a) under intellectual property rights (other than patent or ++ trademark) Licensable by Contributor, to use, reproduce, modify, ++ display, perform, sublicense and distribute the Modifications ++ created by such Contributor (or portions thereof) either on an ++ unmodified basis, with other Modifications, as Covered Code ++ and/or as part of a Larger Work; and ++ ++ (b) under Patent Claims infringed by the making, using, or ++ selling of Modifications made by that Contributor either alone ++ and/or in combination with its Contributor Version (or portions ++ of such combination), to make, use, sell, offer for sale, have ++ made, and/or otherwise dispose of: 1) Modifications made by that ++ Contributor (or portions thereof); and 2) the combination of ++ Modifications made by that Contributor with its Contributor ++ Version (or portions of such combination). ++ ++ (c) the licenses granted in Sections 2.2(a) and 2.2(b) are ++ effective on the date Contributor first makes Commercial Use of ++ the Covered Code. ++ ++ (d) Notwithstanding Section 2.2(b) above, no patent license is ++ granted: 1) for any code that Contributor has deleted from the ++ Contributor Version; 2) separate from the Contributor Version; ++ 3) for infringements caused by: i) third party modifications of ++ Contributor Version or ii) the combination of Modifications made ++ by that Contributor with other software (except as part of the ++ Contributor Version) or other devices; or 4) under Patent Claims ++ infringed by Covered Code in the absence of Modifications made by ++ that Contributor. ++ ++3. Distribution Obligations. ++ ++ 3.1. Application of License. ++ The Modifications which You create or to which You contribute are ++ governed by the terms of this License, including without limitation ++ Section 2.2. The Source Code version of Covered Code may be ++ distributed only under the terms of this License or a future version ++ of this License released under Section 6.1, and You must include a ++ copy of this License with every copy of the Source Code You ++ distribute. You may not offer or impose any terms on any Source Code ++ version that alters or restricts the applicable version of this ++ License or the recipients' rights hereunder. However, You may include ++ an additional document offering the additional rights described in ++ Section 3.5. ++ ++ 3.2. Availability of Source Code. ++ Any Modification which You create or to which You contribute must be ++ made available in Source Code form under the terms of this License ++ either on the same media as an Executable version or via an accepted ++ Electronic Distribution Mechanism to anyone to whom you made an ++ Executable version available; and if made available via Electronic ++ Distribution Mechanism, must remain available for at least twelve (12) ++ months after the date it initially became available, or at least six ++ (6) months after a subsequent version of that particular Modification ++ has been made available to such recipients. You are responsible for ++ ensuring that the Source Code version remains available even if the ++ Electronic Distribution Mechanism is maintained by a third party. ++ ++ 3.3. Description of Modifications. ++ You must cause all Covered Code to which You contribute to contain a ++ file documenting the changes You made to create that Covered Code and ++ the date of any change. You must include a prominent statement that ++ the Modification is derived, directly or indirectly, from Original ++ Code provided by the Initial Developer and including the name of the ++ Initial Developer in (a) the Source Code, and (b) in any notice in an ++ Executable version or related documentation in which You describe the ++ origin or ownership of the Covered Code. ++ ++ 3.4. Intellectual Property Matters ++ (a) Third Party Claims. ++ If Contributor has knowledge that a license under a third party's ++ intellectual property rights is required to exercise the rights ++ granted by such Contributor under Sections 2.1 or 2.2, ++ Contributor must include a text file with the Source Code ++ distribution titled "LEGAL" which describes the claim and the ++ party making the claim in sufficient detail that a recipient will ++ know whom to contact. If Contributor obtains such knowledge after ++ the Modification is made available as described in Section 3.2, ++ Contributor shall promptly modify the LEGAL file in all copies ++ Contributor makes available thereafter and shall take other steps ++ (such as notifying appropriate mailing lists or newsgroups) ++ reasonably calculated to inform those who received the Covered ++ Code that new knowledge has been obtained. ++ ++ (b) Contributor APIs. ++ If Contributor's Modifications include an application programming ++ interface and Contributor has knowledge of patent licenses which ++ are reasonably necessary to implement that API, Contributor must ++ also include this information in the LEGAL file. ++ ++ (c) Representations. ++ Contributor represents that, except as disclosed pursuant to ++ Section 3.4(a) above, Contributor believes that Contributor's ++ Modifications are Contributor's original creation(s) and/or ++ Contributor has sufficient rights to grant the rights conveyed by ++ this License. ++ ++ 3.5. Required Notices. ++ You must duplicate the notice in Exhibit A in each file of the Source ++ Code. If it is not possible to put such notice in a particular Source ++ Code file due to its structure, then You must include such notice in a ++ location (such as a relevant directory) where a user would be likely ++ to look for such a notice. If You created one or more Modification(s) ++ You may add your name as a Contributor to the notice described in ++ Exhibit A. You must also duplicate this License in any documentation ++ for the Source Code where You describe recipients' rights or ownership ++ rights relating to Covered Code. You may choose to offer, and to ++ charge a fee for, warranty, support, indemnity or liability ++ obligations to one or more recipients of Covered Code. However, You ++ may do so only on Your own behalf, and not on behalf of the Initial ++ Developer or any Contributor. You must make it absolutely clear than ++ any such warranty, support, indemnity or liability obligation is ++ offered by You alone, and You hereby agree to indemnify the Initial ++ Developer and every Contributor for any liability incurred by the ++ Initial Developer or such Contributor as a result of warranty, ++ support, indemnity or liability terms You offer. ++ ++ 3.6. Distribution of Executable Versions. ++ You may distribute Covered Code in Executable form only if the ++ requirements of Section 3.1-3.5 have been met for that Covered Code, ++ and if You include a notice stating that the Source Code version of ++ the Covered Code is available under the terms of this License, ++ including a description of how and where You have fulfilled the ++ obligations of Section 3.2. The notice must be conspicuously included ++ in any notice in an Executable version, related documentation or ++ collateral in which You describe recipients' rights relating to the ++ Covered Code. You may distribute the Executable version of Covered ++ Code or ownership rights under a license of Your choice, which may ++ contain terms different from this License, provided that You are in ++ compliance with the terms of this License and that the license for the ++ Executable version does not attempt to limit or alter the recipient's ++ rights in the Source Code version from the rights set forth in this ++ License. If You distribute the Executable version under a different ++ license You must make it absolutely clear that any terms which differ ++ from this License are offered by You alone, not by the Initial ++ Developer or any Contributor. You hereby agree to indemnify the ++ Initial Developer and every Contributor for any liability incurred by ++ the Initial Developer or such Contributor as a result of any such ++ terms You offer. ++ ++ 3.7. Larger Works. ++ You may create a Larger Work by combining Covered Code with other code ++ not governed by the terms of this License and distribute the Larger ++ Work as a single product. In such a case, You must make sure the ++ requirements of this License are fulfilled for the Covered Code. ++ ++4. Inability to Comply Due to Statute or Regulation. ++ ++ If it is impossible for You to comply with any of the terms of this ++ License with respect to some or all of the Covered Code due to ++ statute, judicial order, or regulation then You must: (a) comply with ++ the terms of this License to the maximum extent possible; and (b) ++ describe the limitations and the code they affect. Such description ++ must be included in the LEGAL file described in Section 3.4 and must ++ be included with all distributions of the Source Code. Except to the ++ extent prohibited by statute or regulation, such description must be ++ sufficiently detailed for a recipient of ordinary skill to be able to ++ understand it. ++ ++5. Application of this License. ++ ++ This License applies to code to which the Initial Developer has ++ attached the notice in Exhibit A and to related Covered Code. ++ ++6. Versions of the License. ++ ++ 6.1. New Versions. ++ Netscape Communications Corporation ("Netscape") may publish revised ++ and/or new versions of the License from time to time. Each version ++ will be given a distinguishing version number. ++ ++ 6.2. Effect of New Versions. ++ Once Covered Code has been published under a particular version of the ++ License, You may always continue to use it under the terms of that ++ version. You may also choose to use such Covered Code under the terms ++ of any subsequent version of the License published by Netscape. No one ++ other than Netscape has the right to modify the terms applicable to ++ Covered Code created under this License. ++ ++ 6.3. Derivative Works. ++ If You create or use a modified version of this License (which you may ++ only do in order to apply it to code which is not already Covered Code ++ governed by this License), You must (a) rename Your license so that ++ the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", ++ "MPL", "NPL" or any confusingly similar phrase do not appear in your ++ license (except to note that your license differs from this License) ++ and (b) otherwise make it clear that Your version of the license ++ contains terms which differ from the Mozilla Public License and ++ Netscape Public License. (Filling in the name of the Initial ++ Developer, Original Code or Contributor in the notice described in ++ Exhibit A shall not of themselves be deemed to be modifications of ++ this License.) ++ ++7. DISCLAIMER OF WARRANTY. ++ ++ COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, ++ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, ++ WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF ++ DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. ++ THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE ++ IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, ++ YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE ++ COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER ++ OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ++ ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. ++ ++8. TERMINATION. ++ ++ 8.1. This License and the rights granted hereunder will terminate ++ automatically if You fail to comply with terms herein and fail to cure ++ such breach within 30 days of becoming aware of the breach. All ++ sublicenses to the Covered Code which are properly granted shall ++ survive any termination of this License. Provisions which, by their ++ nature, must remain in effect beyond the termination of this License ++ shall survive. ++ ++ 8.2. If You initiate litigation by asserting a patent infringement ++ claim (excluding declatory judgment actions) against Initial Developer ++ or a Contributor (the Initial Developer or Contributor against whom ++ You file such action is referred to as "Participant") alleging that: ++ ++ (a) such Participant's Contributor Version directly or indirectly ++ infringes any patent, then any and all rights granted by such ++ Participant to You under Sections 2.1 and/or 2.2 of this License ++ shall, upon 60 days notice from Participant terminate prospectively, ++ unless if within 60 days after receipt of notice You either: (i) ++ agree in writing to pay Participant a mutually agreeable reasonable ++ royalty for Your past and future use of Modifications made by such ++ Participant, or (ii) withdraw Your litigation claim with respect to ++ the Contributor Version against such Participant. If within 60 days ++ of notice, a reasonable royalty and payment arrangement are not ++ mutually agreed upon in writing by the parties or the litigation claim ++ is not withdrawn, the rights granted by Participant to You under ++ Sections 2.1 and/or 2.2 automatically terminate at the expiration of ++ the 60 day notice period specified above. ++ ++ (b) any software, hardware, or device, other than such Participant's ++ Contributor Version, directly or indirectly infringes any patent, then ++ any rights granted to You by such Participant under Sections 2.1(b) ++ and 2.2(b) are revoked effective as of the date You first made, used, ++ sold, distributed, or had made, Modifications made by that ++ Participant. ++ ++ 8.3. If You assert a patent infringement claim against Participant ++ alleging that such Participant's Contributor Version directly or ++ indirectly infringes any patent where such claim is resolved (such as ++ by license or settlement) prior to the initiation of patent ++ infringement litigation, then the reasonable value of the licenses ++ granted by such Participant under Sections 2.1 or 2.2 shall be taken ++ into account in determining the amount or value of any payment or ++ license. ++ ++ 8.4. In the event of termination under Sections 8.1 or 8.2 above, ++ all end user license agreements (excluding distributors and resellers) ++ which have been validly granted by You or any distributor hereunder ++ prior to termination shall survive termination. ++ ++9. LIMITATION OF LIABILITY. ++ ++ UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT ++ (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL ++ DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, ++ OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ++ ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY ++ CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, ++ WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER ++ COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN ++ INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF ++ LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY ++ RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW ++ PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE ++ EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO ++ THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. ++ ++10. U.S. GOVERNMENT END USERS. ++ ++ The Covered Code is a "commercial item," as that term is defined in ++ 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer ++ software" and "commercial computer software documentation," as such ++ terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 ++ C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), ++ all U.S. Government End Users acquire Covered Code with only those ++ rights set forth herein. ++ ++11. MISCELLANEOUS. ++ ++ This License represents the complete agreement concerning subject ++ matter hereof. If any provision of this License is held to be ++ unenforceable, such provision shall be reformed only to the extent ++ necessary to make it enforceable. This License shall be governed by ++ California law provisions (except to the extent applicable law, if ++ any, provides otherwise), excluding its conflict-of-law provisions. ++ With respect to disputes in which at least one party is a citizen of, ++ or an entity chartered or registered to do business in the United ++ States of America, any litigation relating to this License shall be ++ subject to the jurisdiction of the Federal Courts of the Northern ++ District of California, with venue lying in Santa Clara County, ++ California, with the losing party responsible for costs, including ++ without limitation, court costs and reasonable attorneys' fees and ++ expenses. The application of the United Nations Convention on ++ Contracts for the International Sale of Goods is expressly excluded. ++ Any law or regulation which provides that the language of a contract ++ shall be construed against the drafter shall not apply to this ++ License. ++ ++12. RESPONSIBILITY FOR CLAIMS. ++ ++ As between Initial Developer and the Contributors, each party is ++ responsible for claims and damages arising, directly or indirectly, ++ out of its utilization of rights under this License and You agree to ++ work with Initial Developer and Contributors to distribute such ++ responsibility on an equitable basis. Nothing herein is intended or ++ shall be deemed to constitute any admission of liability. ++ ++13. MULTIPLE-LICENSED CODE. ++ ++ Initial Developer may designate portions of the Covered Code as ++ "Multiple-Licensed". "Multiple-Licensed" means that the Initial ++ Developer permits you to utilize portions of the Covered Code under ++ Your choice of the NPL or the alternative licenses, if any, specified ++ by the Initial Developer in the file described in Exhibit A. ++ ++EXHIBIT A -Mozilla Public License. ++ ++ ``The contents of this file are subject to the Mozilla Public License ++ Version 1.1 (the "License"); you may not use this file except in ++ compliance with the License. You may obtain a copy of the License at ++ http://www.mozilla.org/MPL/ ++ ++ Software distributed under the License is distributed on an "AS IS" ++ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the ++ License for the specific language governing rights and limitations ++ under the License. ++ ++ The Original Code is ______________________________________. ++ ++ The Initial Developer of the Original Code is ________________________. ++ Portions created by ______________________ are Copyright (C) ______ ++ _______________________. All Rights Reserved. ++ ++ Contributor(s): ______________________________________. ++ ++ Alternatively, the contents of this file may be used under the terms ++ of the _____ license (the "[___] License"), in which case the ++ provisions of [______] License are applicable instead of those ++ above. If you wish to allow use of your version of this file only ++ under the terms of the [____] License and not to allow others to use ++ your version of this file under the MPL, indicate your decision by ++ deleting the provisions above and replace them with the notice and ++ other provisions required by the [___] License. If you do not delete ++ the provisions above, a recipient may use your version of this file ++ under either the MPL or the [___] License." ++ ++ [NOTE: The text of this Exhibit A may differ slightly from the text of ++ the notices in the Source Code files of the Original Code. You should ++ use the text of this Exhibit A rather than the text found in the ++ Original Code Source Code for Your Modifications.] +diff --git a/MPL-1.1.html b/MPL-1.1.html +deleted file mode 100644 +index 7729f6c..0000000 +--- a/MPL-1.1.html ++++ /dev/null +@@ -1,840 +0,0 @@ +- +- +- +- +- +- +- +- +- +- +- Mozilla Public License version 1.1 +- +- +- +- +- +- +- +-
    MOZILLA PUBLIC LICENSE +- +-
    Version 1.1 +- +-

    +- +-


    +- +- +- +-

    1. Definitions. +- +- +-

      1.0.1. "Commercial Use" means distribution or otherwise making +- +-the Covered Code available to a third party. +- +- +-

      1.1. ''Contributor'' means each entity that creates or contributes +- +-to the creation of Modifications. +- +- +-

      1.2. ''Contributor Version'' means the combination of the Original +- +-Code, prior Modifications used by a Contributor, and the Modifications +- +-made by that particular Contributor. +- +- +-

      1.3. ''Covered Code'' means the Original Code or Modifications +- +-or the combination of the Original Code and Modifications, in each case +- +-including portions thereof. +- +- +-

      1.4. ''Electronic Distribution Mechanism'' means a mechanism +- +-generally accepted in the software development community for the electronic +- +-transfer of data. +- +- +-

      1.5. ''Executable'' means Covered Code in any form other than +- +-Source Code. +- +- +-

      1.6. ''Initial Developer'' means the individual or entity identified +- +-as the Initial Developer in the Source Code notice required by Exhibit +- +-A. +- +- +-

      1.7. ''Larger Work'' means a work which combines Covered Code +- +-or portions thereof with code not governed by the terms of this License. +- +- +-

      1.8. ''License'' means this document. +- +- +-

      1.8.1. "Licensable" means having the right to grant, to the maximum +- +-extent possible, whether at the time of the initial grant or subsequently +- +-acquired, any and all of the rights conveyed herein. +- +- +-

      1.9. ''Modifications'' means any addition to or deletion from +- +-the substance or structure of either the Original Code or any previous +- +-Modifications. When Covered Code is released as a series of files, a Modification +- +-is: +- +-

        A. Any addition to or deletion from the contents of a file containing +- +-Original Code or previous Modifications. +- +-

        B. Any new file that contains any part of the Original Code or +- +-previous Modifications. +- +-
         

      +- +- +-1.10. ''Original Code'' means Source Code of computer software code +- +-which is described in the Source Code notice required by Exhibit A +- +-as Original Code, and which, at the time of its release under this License +- +-is not already Covered Code governed by this License. +- +- +-

      1.10.1. "Patent Claims" means any patent claim(s), now owned +- +-or hereafter acquired, including without limitation,  method, process, +- +-and apparatus claims, in any patent Licensable by grantor. +- +- +-

      1.11. ''Source Code'' means the preferred form of the Covered +- +-Code for making modifications to it, including all modules it contains, +- +-plus any associated interface definition files, scripts used to control +- +-compilation and installation of an Executable, or source code differential +- +-comparisons against either the Original Code or another well known, available +- +-Covered Code of the Contributor's choice. The Source Code can be in a compressed +- +-or archival form, provided the appropriate decompression or de-archiving +- +-software is widely available for no charge. +- +- +-

      1.12. "You'' (or "Your")  means an individual or a legal +- +-entity exercising rights under, and complying with all of the terms of, +- +-this License or a future version of this License issued under Section 6.1. +- +-For legal entities, "You'' includes any entity which controls, is controlled +- +-by, or is under common control with You. For purposes of this definition, +- +-"control'' means (a) the power, direct or indirect, to cause the direction +- +-or management of such entity, whether by contract or otherwise, or (b) +- +-ownership of more than fifty percent (50%) of the outstanding shares or +- +-beneficial ownership of such entity.

    +- +- +-2. Source Code License. +- +- +-
      2.1. The Initial Developer Grant. +- +-
      The Initial Developer hereby grants You a world-wide, royalty-free, +- +-non-exclusive license, subject to third party intellectual property claims: +- +-
        (a)  under intellectual property rights (other than +- +-patent or trademark) Licensable by Initial Developer to use, reproduce, +- +-modify, display, perform, sublicense and distribute the Original Code (or +- +-portions thereof) with or without Modifications, and/or as part of a Larger +- +-Work; and +- +-

        (b) under Patents Claims infringed by the making, using or selling +- +-of Original Code, to make, have made, use, practice, sell, and offer for +- +-sale, and/or otherwise dispose of the Original Code (or portions thereof). +- +-

          +- +-
             
          +- +-
        +- +-(c) the licenses granted in this Section 2.1(a) and (b) are effective +- +-on the date Initial Developer first distributes Original Code under the +- +-terms of this License. +- +-

        (d) Notwithstanding Section 2.1(b) above, no patent license is +- +-granted: 1) for code that You delete from the Original Code; 2) separate +- +-from the Original Code;  or 3) for infringements caused by: i) the +- +-modification of the Original Code or ii) the combination of the Original +- +-Code with other software or devices. +- +-
         

      +- +- +-2.2. Contributor Grant. +- +-
      Subject to third party intellectual property claims, each Contributor +- +-hereby grants You a world-wide, royalty-free, non-exclusive license +- +-
          +- +-
        (a)  under intellectual property rights (other than +- +-patent or trademark) Licensable by Contributor, to use, reproduce, modify, +- +-display, perform, sublicense and distribute the Modifications created by +- +-such Contributor (or portions thereof) either on an unmodified basis, with +- +-other Modifications, as Covered Code and/or as part of a Larger Work; and +- +-

        (b) under Patent Claims infringed by the making, using, or selling +- +-of  Modifications made by that Contributor either alone and/or in +- +-combination with its Contributor Version (or portions of such combination), +- +-to make, use, sell, offer for sale, have made, and/or otherwise dispose +- +-of: 1) Modifications made by that Contributor (or portions thereof); and +- +-2) the combination of  Modifications made by that Contributor with +- +-its Contributor Version (or portions of such combination). +- +-

        (c) the licenses granted in Sections 2.2(a) and 2.2(b) are effective +- +-on the date Contributor first makes Commercial Use of the Covered Code. +- +-

        (d)    Notwithstanding Section 2.2(b) above, no +- +-patent license is granted: 1) for any code that Contributor has deleted +- +-from the Contributor Version; 2)  separate from the Contributor Version;  +- +-3)  for infringements caused by: i) third party modifications of Contributor +- +-Version or ii)  the combination of Modifications made by that Contributor +- +-with other software  (except as part of the Contributor Version) or +- +-other devices; or 4) under Patent Claims infringed by Covered Code in the +- +-absence of Modifications made by that Contributor.

      +- +-
    +- +- +- +- +-


    3. Distribution Obligations. +- +- +-

      3.1. Application of License. +- +-
      The Modifications which You create or to which You contribute are governed +- +-by the terms of this License, including without limitation Section 2.2. +- +-The Source Code version of Covered Code may be distributed only under the +- +-terms of this License or a future version of this License released under +- +-Section 6.1, and You must include a copy of this License with every +- +-copy of the Source Code You distribute. You may not offer or impose any +- +-terms on any Source Code version that alters or restricts the applicable +- +-version of this License or the recipients' rights hereunder. However, You +- +-may include an additional document offering the additional rights described +- +-in Section 3.5. +- +- +-

      3.2. Availability of Source Code. +- +-
      Any Modification which You create or to which You contribute must be +- +-made available in Source Code form under the terms of this License either +- +-on the same media as an Executable version or via an accepted Electronic +- +-Distribution Mechanism to anyone to whom you made an Executable version +- +-available; and if made available via Electronic Distribution Mechanism, +- +-must remain available for at least twelve (12) months after the date it +- +-initially became available, or at least six (6) months after a subsequent +- +-version of that particular Modification has been made available to such +- +-recipients. You are responsible for ensuring that the Source Code version +- +-remains available even if the Electronic Distribution Mechanism is maintained +- +-by a third party. +- +- +-

      3.3. Description of Modifications. +- +-
      You must cause all Covered Code to which You contribute to contain +- +-a file documenting the changes You made to create that Covered Code and +- +-the date of any change. You must include a prominent statement that the +- +-Modification is derived, directly or indirectly, from Original Code provided +- +-by the Initial Developer and including the name of the Initial Developer +- +-in (a) the Source Code, and (b) in any notice in an Executable version +- +-or related documentation in which You describe the origin or ownership +- +-of the Covered Code. +- +- +-

      3.4. Intellectual Property Matters +- +-

        (a) Third Party Claims. +- +-
        If Contributor has knowledge that a license under a third party's intellectual +- +-property rights is required to exercise the rights granted by such Contributor +- +-under Sections 2.1 or 2.2, Contributor must include a text file with the +- +-Source Code distribution titled "LEGAL'' which describes the claim and +- +-the party making the claim in sufficient detail that a recipient will know +- +-whom to contact. If Contributor obtains such knowledge after the Modification +- +-is made available as described in Section 3.2, Contributor shall promptly +- +-modify the LEGAL file in all copies Contributor makes available thereafter +- +-and shall take other steps (such as notifying appropriate mailing lists +- +-or newsgroups) reasonably calculated to inform those who received the Covered +- +-Code that new knowledge has been obtained. +- +-

        (b) Contributor APIs. +- +-
        If Contributor's Modifications include an application programming interface +- +-and Contributor has knowledge of patent licenses which are reasonably necessary +- +-to implement that API, Contributor must also include this information in +- +-the LEGAL file. +- +-
         

      +- +-          (c)    +- +-Representations. +- +-
        Contributor represents that, except as disclosed pursuant to Section +- +-3.4(a) above, Contributor believes that Contributor's Modifications are +- +-Contributor's original creation(s) and/or Contributor has sufficient rights +- +-to grant the rights conveyed by this License.
      +- +- +- +- +-


      3.5. Required Notices. +- +-
      You must duplicate the notice in Exhibit A in each file of the +- +-Source Code.  If it is not possible to put such notice in a particular +- +-Source Code file due to its structure, then You must include such notice +- +-in a location (such as a relevant directory) where a user would be likely +- +-to look for such a notice.  If You created one or more Modification(s) +- +-You may add your name as a Contributor to the notice described in Exhibit +- +-A.  You must also duplicate this License in any documentation +- +-for the Source Code where You describe recipients' rights or ownership +- +-rights relating to Covered Code.  You may choose to offer, and to +- +-charge a fee for, warranty, support, indemnity or liability obligations +- +-to one or more recipients of Covered Code. However, You may do so only +- +-on Your own behalf, and not on behalf of the Initial Developer or any Contributor. +- +-You must make it absolutely clear than any such warranty, support, indemnity +- +-or liability obligation is offered by You alone, and You hereby agree to +- +-indemnify the Initial Developer and every Contributor for any liability +- +-incurred by the Initial Developer or such Contributor as a result of warranty, +- +-support, indemnity or liability terms You offer. +- +- +-

      3.6. Distribution of Executable Versions. +- +-
      You may distribute Covered Code in Executable form only if the requirements +- +-of Section 3.1-3.5 have been met for that Covered Code, and if You +- +-include a notice stating that the Source Code version of the Covered Code +- +-is available under the terms of this License, including a description of +- +-how and where You have fulfilled the obligations of Section 3.2. +- +-The notice must be conspicuously included in any notice in an Executable +- +-version, related documentation or collateral in which You describe recipients' +- +-rights relating to the Covered Code. You may distribute the Executable +- +-version of Covered Code or ownership rights under a license of Your choice, +- +-which may contain terms different from this License, provided that You +- +-are in compliance with the terms of this License and that the license for +- +-the Executable version does not attempt to limit or alter the recipient's +- +-rights in the Source Code version from the rights set forth in this License. +- +-If You distribute the Executable version under a different license You +- +-must make it absolutely clear that any terms which differ from this License +- +-are offered by You alone, not by the Initial Developer or any Contributor. +- +-You hereby agree to indemnify the Initial Developer and every Contributor +- +-for any liability incurred by the Initial Developer or such Contributor +- +-as a result of any such terms You offer. +- +- +-

      3.7. Larger Works. +- +-
      You may create a Larger Work by combining Covered Code with other code +- +-not governed by the terms of this License and distribute the Larger Work +- +-as a single product. In such a case, You must make sure the requirements +- +-of this License are fulfilled for the Covered Code.

    +- +- +-4. Inability to Comply Due to Statute or Regulation. +- +-
      If it is impossible for You to comply with any of the terms of this +- +-License with respect to some or all of the Covered Code due to statute, +- +-judicial order, or regulation then You must: (a) comply with the terms +- +-of this License to the maximum extent possible; and (b) describe the limitations +- +-and the code they affect. Such description must be included in the LEGAL +- +-file described in Section 3.4 and must be included with all distributions +- +-of the Source Code. Except to the extent prohibited by statute or regulation, +- +-such description must be sufficiently detailed for a recipient of ordinary +- +-skill to be able to understand it.
    +- +- +-5. Application of this License. +- +-
      This License applies to code to which the Initial Developer has attached +- +-the notice in Exhibit A and to related Covered Code.
    +- +- +-6. Versions of the License. +- +- +-
      6.1. New Versions. +- +-
      Netscape Communications Corporation (''Netscape'') may publish revised +- +-and/or new versions of the License from time to time. Each version will +- +-be given a distinguishing version number. +- +- +-

      6.2. Effect of New Versions. +- +-
      Once Covered Code has been published under a particular version of +- +-the License, You may always continue to use it under the terms of that +- +-version. You may also choose to use such Covered Code under the terms of +- +-any subsequent version of the License published by Netscape. No one other +- +-than Netscape has the right to modify the terms applicable to Covered Code +- +-created under this License. +- +- +-

      6.3. Derivative Works. +- +-
      If You create or use a modified version of this License (which you +- +-may only do in order to apply it to code which is not already Covered Code +- +-governed by this License), You must (a) rename Your license so that the +- +-phrases ''Mozilla'', ''MOZILLAPL'', ''MOZPL'', ''Netscape'', "MPL", ''NPL'' +- +-or any confusingly similar phrase do not appear in your license (except +- +-to note that your license differs from this License) and (b) otherwise +- +-make it clear that Your version of the license contains terms which differ +- +-from the Mozilla Public License and Netscape Public License. (Filling in +- +-the name of the Initial Developer, Original Code or Contributor in the +- +-notice described in Exhibit A shall not of themselves be deemed +- +-to be modifications of this License.)

    +- +- +-7. DISCLAIMER OF WARRANTY. +- +-
      COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS'' BASIS, WITHOUT +- +-WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, +- +-WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT +- +-FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY +- +-AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE +- +-PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER +- +-CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. +- +-THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. +- +-NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
    +- +- +-8. TERMINATION. +- +- +-
      8.1.  This License and the rights granted hereunder will +- +-terminate automatically if You fail to comply with terms herein and fail +- +-to cure such breach within 30 days of becoming aware of the breach. All +- +-sublicenses to the Covered Code which are properly granted shall survive +- +-any termination of this License. Provisions which, by their nature, must +- +-remain in effect beyond the termination of this License shall survive. +- +- +-

      8.2.  If You initiate litigation by asserting a patent infringement +- +-claim (excluding declatory judgment actions) against Initial Developer +- +-or a Contributor (the Initial Developer or Contributor against whom You +- +-file such action is referred to as "Participant")  alleging that: +- +-

      (a)  such Participant's Contributor Version directly or +- +-indirectly infringes any patent, then any and all rights granted by such +- +-Participant to You under Sections 2.1 and/or 2.2 of this License shall, +- +-upon 60 days notice from Participant terminate prospectively, unless if +- +-within 60 days after receipt of notice You either: (i)  agree in writing +- +-to pay Participant a mutually agreeable reasonable royalty for Your past +- +-and future use of Modifications made by such Participant, or (ii) withdraw +- +-Your litigation claim with respect to the Contributor Version against such +- +-Participant.  If within 60 days of notice, a reasonable royalty and +- +-payment arrangement are not mutually agreed upon in writing by the parties +- +-or the litigation claim is not withdrawn, the rights granted by Participant +- +-to You under Sections 2.1 and/or 2.2 automatically terminate at the expiration +- +-of the 60 day notice period specified above. +- +-

      (b)  any software, hardware, or device, other than such +- +-Participant's Contributor Version, directly or indirectly infringes any +- +-patent, then any rights granted to You by such Participant under Sections +- +-2.1(b) and 2.2(b) are revoked effective as of the date You first made, +- +-used, sold, distributed, or had made, Modifications made by that Participant. +- +- +-

      8.3.  If You assert a patent infringement claim against +- +-Participant alleging that such Participant's Contributor Version directly +- +-or indirectly infringes any patent where such claim is resolved (such as +- +-by license or settlement) prior to the initiation of patent infringement +- +-litigation, then the reasonable value of the licenses granted by such Participant +- +-under Sections 2.1 or 2.2 shall be taken into account in determining the +- +-amount or value of any payment or license. +- +- +-

      8.4.  In the event of termination under Sections 8.1 or +- +-8.2 above,  all end user license agreements (excluding distributors +- +-and resellers) which have been validly granted by You or any distributor +- +-hereunder prior to termination shall survive termination.

    +- +- +-9. LIMITATION OF LIABILITY. +- +-
      UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING +- +-NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, +- +-ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER +- +-OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, +- +-INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT +- +-LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE +- +-OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN +- +-IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. +- +-THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR +- +-PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE +- +-LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION +- +-OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION +- +-AND LIMITATION MAY NOT APPLY TO YOU.
    +- +- +-10. U.S. GOVERNMENT END USERS. +- +-
      The Covered Code is a ''commercial item,'' as that term is defined +- +-in 48 C.F.R. 2.101 (Oct. 1995), consisting of ''commercial computer software'' +- +-and ''commercial computer software documentation,'' as such terms are used +- +-in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and +- +-48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government +- +-End Users acquire Covered Code with only those rights set forth herein.
    +- +- +-11. MISCELLANEOUS. +- +-
      This License represents the complete agreement concerning subject matter +- +-hereof. If any provision of this License is held to be unenforceable, such +- +-provision shall be reformed only to the extent necessary to make it enforceable. +- +-This License shall be governed by California law provisions (except to +- +-the extent applicable law, if any, provides otherwise), excluding its conflict-of-law +- +-provisions. With respect to disputes in which at least one party is a citizen +- +-of, or an entity chartered or registered to do business in the United States +- +-of America, any litigation relating to this License shall be subject to +- +-the jurisdiction of the Federal Courts of the Northern District of California, +- +-with venue lying in Santa Clara County, California, with the losing party +- +-responsible for costs, including without limitation, court costs and reasonable +- +-attorneys' fees and expenses. The application of the United Nations Convention +- +-on Contracts for the International Sale of Goods is expressly excluded. +- +-Any law or regulation which provides that the language of a contract shall +- +-be construed against the drafter shall not apply to this License.
    +- +- +-12. RESPONSIBILITY FOR CLAIMS. +- +-
      As between Initial Developer and the Contributors, each party is responsible +- +-for claims and damages arising, directly or indirectly, out of its utilization +- +-of rights under this License and You agree to work with Initial Developer +- +-and Contributors to distribute such responsibility on an equitable basis. +- +-Nothing herein is intended or shall be deemed to constitute any admission +- +-of liability.
    +- +- +-13. MULTIPLE-LICENSED CODE. +- +-
      Initial Developer may designate portions of the Covered Code as “Multiple-Licensed”.  +- +-“Multiple-Licensed” means that the Initial Developer permits you to utilize +- +-portions of the Covered Code under Your choice of the MPL or the alternative +- +-licenses, if any, specified by the Initial Developer in the file described +- +-in Exhibit A.
    +- +- +- +- +-


    EXHIBIT A -Mozilla Public License. +- +-

      ``The contents of this file are subject to the Mozilla Public License +- +-Version 1.1 (the "License"); you may not use this file except in compliance +- +-with the License. You may obtain a copy of the License at +- +-
      http://www.mozilla.org/MPL/ +- +-

      Software distributed under the License is distributed on an "AS IS" +- +-basis, WITHOUT WARRANTY OF +- +-
      ANY KIND, either express or implied. See the License for the specific +- +-language governing rights and +- +-
      limitations under the License. +- +-

      The Original Code is ______________________________________. +- +-

      The Initial Developer of the Original Code is ________________________. +- +-Portions created by +- +-
       ______________________ are Copyright (C) ______ _______________________. +- +-All Rights +- +-
      Reserved. +- +-

      Contributor(s): ______________________________________. +- +-

      Alternatively, the contents of this file may be used under the terms +- +-of the _____ license (the  “[___] License”), in which case the provisions +- +-of [______] License are applicable  instead of those above.  +- +-If you wish to allow use of your version of this file only under the terms +- +-of the [____] License and not to allow others to use your version of this +- +-file under the MPL, indicate your decision by deleting  the provisions +- +-above and replace  them with the notice and other provisions required +- +-by the [___] License.  If you do not delete the provisions above, +- +-a recipient may use your version of this file under either the MPL or the +- +-[___] License." +- +-

      [NOTE: The text of this Exhibit A may differ slightly from the text +- +-of the notices in the Source Code files of the Original Code. You should +- +-use the text of this Exhibit A rather than the text found in the Original +- +-Code Source Code for Your Modifications.] +- +-

      +- +- +- +- +- +diff --git a/Makefile.am b/Makefile.am +index bb89e98..34a01d3 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -7,4 +7,4 @@ pkgconfig_DATA= libgdiplus.pc + + DISTCLEANFILES= libgdiplus.pc + +-EXTRA_DIST = libgdiplus.pc.in LICENSE MPL-1.1.html ++EXTRA_DIST = libgdiplus.pc.in LICENSE +-- +2.19.2 + diff --git a/package/libgdiplus/0002-Update-LICENSE-to-match-the-headers-of-the-source-fi.patch b/package/libgdiplus/0002-Update-LICENSE-to-match-the-headers-of-the-source-fi.patch new file mode 100644 index 00000000..3ddfe7c3 --- /dev/null +++ b/package/libgdiplus/0002-Update-LICENSE-to-match-the-headers-of-the-source-fi.patch @@ -0,0 +1,1018 @@ +From 7ac3970c792ffbbf53e4168e086fae33fab39ce3 Mon Sep 17 00:00:00 2001 +From: Frederik Carlier +Date: Tue, 17 Jul 2018 23:24:51 +0200 +Subject: [PATCH] Update LICENSE to match the headers of the source files + +Upstream: 947e525d1025200623f686d8efe4c0094c5d2380 +Signed-off-by: Thomas Petazzoni +--- + LICENSE | 998 +------------------------------------------------------- + 1 file changed, 14 insertions(+), 984 deletions(-) + +diff --git a/LICENSE b/LICENSE +index b3164bb..2342cc9 100644 +--- a/LICENSE ++++ b/LICENSE +@@ -1,984 +1,14 @@ +-Libgdiplus is licensed under the terms of the GNU Library GPL or the +-Mozilla Public License 1.1. +- +- +-The Licenses +-============ +- +-### GNU Library GPL +- +- GNU LESSER GENERAL PUBLIC LICENSE +- Version 2.1, February 1999 +- +- Copyright (C) 1991, 1999 Free Software Foundation, Inc. +- 51 Franklin Street, 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. +- +-[This is the first released version of the Lesser GPL. It also counts +- as the successor of the GNU Library Public License, version 2, hence +- the version number 2.1.] +- +- Preamble +- +- The licenses for most software are designed to take away your +-freedom to share and change it. By contrast, the GNU General Public +-Licenses are intended to guarantee your freedom to share and change +-free software--to make sure the software is free for all its users. +- +- This license, the Lesser General Public License, applies to some +-specially designated software packages--typically libraries--of the +-Free Software Foundation and other authors who decide to use it. You +-can use it too, but we suggest you first think carefully about whether +-this license or the ordinary General Public License is the better +-strategy to use in any particular case, based on the explanations below. +- +- When we speak of free software, we are referring to freedom of use, +-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 and use pieces of +-it in new free programs; and that you are informed that you can do +-these things. +- +- To protect your rights, we need to make restrictions that forbid +-distributors to deny you these rights or to ask you to surrender these +-rights. These restrictions translate to certain responsibilities for +-you if you distribute copies of the library or if you modify it. +- +- For example, if you distribute copies of the library, whether gratis +-or for a fee, you must give the recipients all the rights that we gave +-you. You must make sure that they, too, receive or can get the source +-code. If you link other code with the library, you must provide +-complete object files to the recipients, so that they can relink them +-with the library after making changes to the library and recompiling +-it. And you must show them these terms so they know their rights. +- +- We protect your rights with a two-step method: (1) we copyright the +-library, and (2) we offer you this license, which gives you legal +-permission to copy, distribute and/or modify the library. +- +- To protect each distributor, we want to make it very clear that +-there is no warranty for the free library. Also, if the library is +-modified by someone else and passed on, the recipients should know +-that what they have is not the original version, so that the original +-author's reputation will not be affected by problems that might be +-introduced by others. +- +- Finally, software patents pose a constant threat to the existence of +-any free program. We wish to make sure that a company cannot +-effectively restrict the users of a free program by obtaining a +-restrictive license from a patent holder. Therefore, we insist that +-any patent license obtained for a version of the library must be +-consistent with the full freedom of use specified in this license. +- +- Most GNU software, including some libraries, is covered by the +-ordinary GNU General Public License. This license, the GNU Lesser +-General Public License, applies to certain designated libraries, and +-is quite different from the ordinary General Public License. We use +-this license for certain libraries in order to permit linking those +-libraries into non-free programs. +- +- When a program is linked with a library, whether statically or using +-a shared library, the combination of the two is legally speaking a +-combined work, a derivative of the original library. The ordinary +-General Public License therefore permits such linking only if the +-entire combination fits its criteria of freedom. The Lesser General +-Public License permits more lax criteria for linking other code with +-the library. +- +- We call this license the "Lesser" General Public License because it +-does Less to protect the user's freedom than the ordinary General +-Public License. It also provides other free software developers Less +-of an advantage over competing non-free programs. These disadvantages +-are the reason we use the ordinary General Public License for many +-libraries. However, the Lesser license provides advantages in certain +-special circumstances. +- +- For example, on rare occasions, there may be a special need to +-encourage the widest possible use of a certain library, so that it becomes +-a de-facto standard. To achieve this, non-free programs must be +-allowed to use the library. A more frequent case is that a free +-library does the same job as widely used non-free libraries. In this +-case, there is little to gain by limiting the free library to free +-software only, so we use the Lesser General Public License. +- +- In other cases, permission to use a particular library in non-free +-programs enables a greater number of people to use a large body of +-free software. For example, permission to use the GNU C Library in +-non-free programs enables many more people to use the whole GNU +-operating system, as well as its variant, the GNU/Linux operating +-system. +- +- Although the Lesser General Public License is Less protective of the +-users' freedom, it does ensure that the user of a program that is +-linked with the Library has the freedom and the wherewithal to run +-that program using a modified version of the Library. +- +- The precise terms and conditions for copying, distribution and +-modification follow. Pay close attention to the difference between a +-"work based on the library" and a "work that uses the library". The +-former contains code derived from the library, whereas the latter must +-be combined with the library in order to run. +- +- GNU LESSER GENERAL PUBLIC LICENSE +- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +- +- 0. This License Agreement applies to any software library or other +-program which contains a notice placed by the copyright holder or +-other authorized party saying it may be distributed under the terms of +-this Lesser General Public License (also called "this License"). +-Each licensee is addressed as "you". +- +- A "library" means a collection of software functions and/or data +-prepared so as to be conveniently linked with application programs +-(which use some of those functions and data) to form executables. +- +- The "Library", below, refers to any such software library or work +-which has been distributed under these terms. A "work based on the +-Library" means either the Library or any derivative work under +-copyright law: that is to say, a work containing the Library or a +-portion of it, either verbatim or with modifications and/or translated +-straightforwardly into another language. (Hereinafter, translation is +-included without limitation in the term "modification".) +- +- "Source code" for a work means the preferred form of the work for +-making modifications to it. For a library, 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 library. +- +- Activities other than copying, distribution and modification are not +-covered by this License; they are outside its scope. The act of +-running a program using the Library is not restricted, and output from +-such a program is covered only if its contents constitute a work based +-on the Library (independent of the use of the Library in a tool for +-writing it). Whether that is true depends on what the Library does +-and what the program that uses the Library does. +- +- 1. You may copy and distribute verbatim copies of the Library's +-complete 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 distribute a copy of this License along with the +-Library. +- +- 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 Library or any portion +-of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. +- +- b) You must cause the files modified to carry prominent notices +- stating that you changed the files and the date of any change. +- +- c) You must cause the whole of the work to be licensed at no +- charge to all third parties under the terms of this License. +- +- d) If a facility in the modified Library refers to a function or a +- table of data to be supplied by an application program that uses +- the facility, other than as an argument passed when the facility +- is invoked, then you must make a good faith effort to ensure that, +- in the event an application does not supply such function or +- table, the facility still operates, and performs whatever part of +- its purpose remains meaningful. +- +- (For example, a function in a library to compute square roots has +- a purpose that is entirely well-defined independent of the +- application. Therefore, Subsection 2d requires that any +- application-supplied function or table used by this function must +- be optional: if the application does not supply it, the square +- root function must still compute square roots.) +- +-These requirements apply to the modified work as a whole. If +-identifiable sections of that work are not derived from the Library, +-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 Library, 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 Library. +- +-In addition, mere aggregation of another work not based on the Library +-with the Library (or with a work based on the Library) on a volume of +-a storage or distribution medium does not bring the other work under +-the scope of this License. +- +- 3. You may opt to apply the terms of the ordinary GNU General Public +-License instead of this License to a given copy of the Library. To do +-this, you must alter all the notices that refer to this License, so +-that they refer to the ordinary GNU General Public License, version 2, +-instead of to this License. (If a newer version than version 2 of the +-ordinary GNU General Public License has appeared, then you can specify +-that version instead if you wish.) Do not make any other change in +-these notices. +- +- Once this change is made in a given copy, it is irreversible for +-that copy, so the ordinary GNU General Public License applies to all +-subsequent copies and derivative works made from that copy. +- +- This option is useful when you wish to copy part of the code of +-the Library into a program that is not a library. +- +- 4. You may copy and distribute the Library (or a portion or +-derivative of it, under Section 2) in object code or executable form +-under the terms of Sections 1 and 2 above provided that you 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. +- +- If distribution of 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 satisfies the requirement to +-distribute the source code, even though third parties are not +-compelled to copy the source along with the object code. +- +- 5. A program that contains no derivative of any portion of the +-Library, but is designed to work with the Library by being compiled or +-linked with it, is called a "work that uses the Library". Such a +-work, in isolation, is not a derivative work of the Library, and +-therefore falls outside the scope of this License. +- +- However, linking a "work that uses the Library" with the Library +-creates an executable that is a derivative of the Library (because it +-contains portions of the Library), rather than a "work that uses the +-library". The executable is therefore covered by this License. +-Section 6 states terms for distribution of such executables. +- +- When a "work that uses the Library" uses material from a header file +-that is part of the Library, the object code for the work may be a +-derivative work of the Library even though the source code is not. +-Whether this is true is especially significant if the work can be +-linked without the Library, or if the work is itself a library. The +-threshold for this to be true is not precisely defined by law. +- +- If such an object file uses only numerical parameters, data +-structure layouts and accessors, and small macros and small inline +-functions (ten lines or less in length), then the use of the object +-file is unrestricted, regardless of whether it is legally a derivative +-work. (Executables containing this object code plus portions of the +-Library will still fall under Section 6.) +- +- Otherwise, if the work is a derivative of the Library, you may +-distribute the object code for the work under the terms of Section 6. +-Any executables containing that work also fall under Section 6, +-whether or not they are linked directly with the Library itself. +- +- 6. As an exception to the Sections above, you may also combine or +-link a "work that uses the Library" with the Library to produce a +-work containing portions of the Library, and distribute that work +-under terms of your choice, provided that the terms permit +-modification of the work for the customer's own use and reverse +-engineering for debugging such modifications. +- +- You must give prominent notice with each copy of the work that the +-Library is used in it and that the Library and its use are covered by +-this License. You must supply a copy of this License. If the work +-during execution displays copyright notices, you must include the +-copyright notice for the Library among them, as well as a reference +-directing the user to the copy of this License. Also, you must do one +-of these things: +- +- a) Accompany the work with the complete corresponding +- machine-readable source code for the Library including whatever +- changes were used in the work (which must be distributed under +- Sections 1 and 2 above); and, if the work is an executable linked +- with the Library, with the complete machine-readable "work that +- uses the Library", as object code and/or source code, so that the +- user can modify the Library and then relink to produce a modified +- executable containing the modified Library. (It is understood +- that the user who changes the contents of definitions files in the +- Library will not necessarily be able to recompile the application +- to use the modified definitions.) +- +- b) Use a suitable shared library mechanism for linking with the +- Library. A suitable mechanism is one that (1) uses at run time a +- copy of the library already present on the user's computer system, +- rather than copying library functions into the executable, and (2) +- will operate properly with a modified version of the library, if +- the user installs one, as long as the modified version is +- interface-compatible with the version that the work was made with. +- +- c) Accompany the work with a written offer, valid for at +- least three years, to give the same user the materials +- specified in Subsection 6a, above, for a charge no more +- than the cost of performing this distribution. +- +- d) If distribution of the work is made by offering access to copy +- from a designated place, offer equivalent access to copy the above +- specified materials from the same place. +- +- e) Verify that the user has already received a copy of these +- materials or that you have already sent this user a copy. +- +- For an executable, the required form of the "work that uses the +-Library" must include any data and utility programs needed for +-reproducing the executable from it. However, as a special exception, +-the materials to be 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. +- +- It may happen that this requirement contradicts the license +-restrictions of other proprietary libraries that do not normally +-accompany the operating system. Such a contradiction means you cannot +-use both them and the Library together in an executable that you +-distribute. +- +- 7. You may place library facilities that are a work based on the +-Library side-by-side in a single library together with other library +-facilities not covered by this License, and distribute such a combined +-library, provided that the separate distribution of the work based on +-the Library and of the other library facilities is otherwise +-permitted, and provided that you do these two things: +- +- a) Accompany the combined library with a copy of the same work +- based on the Library, uncombined with any other library +- facilities. This must be distributed under the terms of the +- Sections above. +- +- b) Give prominent notice with the combined library of the fact +- that part of it is a work based on the Library, and explaining +- where to find the accompanying uncombined form of the same work. +- +- 8. You may not copy, modify, sublicense, link with, or distribute +-the Library except as expressly provided under this License. Any +-attempt otherwise to copy, modify, sublicense, link with, or +-distribute the Library 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. +- +- 9. 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 Library or its derivative works. These actions are +-prohibited by law if you do not accept this License. Therefore, by +-modifying or distributing the Library (or any work based on the +-Library), you indicate your acceptance of this License to do so, and +-all its terms and conditions for copying, distributing or modifying +-the Library or works based on it. +- +- 10. Each time you redistribute the Library (or any work based on the +-Library), the recipient automatically receives a license from the +-original licensor to copy, distribute, link with or modify the Library +-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 with +-this License. +- +- 11. 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 Library at all. For example, if a patent +-license would not permit royalty-free redistribution of the Library 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 Library. +- +-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. +- +- 12. If the distribution and/or use of the Library is restricted in +-certain countries either by patents or by copyrighted interfaces, the +-original copyright holder who places the Library 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. +- +- 13. The Free Software Foundation may publish revised and/or new +-versions of the Lesser 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 Library +-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 Library does not specify a +-license version number, you may choose any version ever published by +-the Free Software Foundation. +- +- 14. If you wish to incorporate parts of the Library into other free +-programs whose distribution conditions are incompatible with these, +-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 +- +- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +-OTHER PARTIES PROVIDE THE LIBRARY "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 +-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +- +- 16. 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 LIBRARY 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 +-LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries +- +- If you develop a new library, and you want it to be of the greatest +-possible use to the public, we recommend making it free software that +-everyone can redistribute and change. You can do so by permitting +-redistribution under these terms (or, alternatively, under the terms of the +-ordinary General Public License). +- +- To apply these terms, attach the following notices to the library. 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 library is free software; you can redistribute it and/or +- modify it under the terms of the GNU Lesser General Public +- License as published by the Free Software Foundation; either +- version 2.1 of the License, or (at your option) any later version. +- +- This library 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 +- Lesser General Public License for more details. +- +- You should have received a copy of the GNU Lesser General Public +- License along with this library; if not, write to the Free Software +- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +- +-Also add information on how to contact you by electronic and paper mail. +- +-You should also get your employer (if you work as a programmer) or your +-school, if any, to sign a "copyright disclaimer" for the library, if +-necessary. Here is a sample; alter the names: +- +- Yoyodyne, Inc., hereby disclaims all copyright interest in the +- library `Frob' (a library for tweaking knobs) written by James Random Hacker. +- +- , 1 April 1990 +- Ty Coon, President of Vice +- +-That's all there is to it! +- +- +-### Mozilla Public License 1.1 +- +- MOZILLA PUBLIC LICENSE +- Version 1.1 +- +- --------------- +- +-1. Definitions. +- +- 1.0.1. "Commercial Use" means distribution or otherwise making the +- Covered Code available to a third party. +- +- 1.1. "Contributor" means each entity that creates or contributes to +- the creation of Modifications. +- +- 1.2. "Contributor Version" means the combination of the Original +- Code, prior Modifications used by a Contributor, and the Modifications +- made by that particular Contributor. +- +- 1.3. "Covered Code" means the Original Code or Modifications or the +- combination of the Original Code and Modifications, in each case +- including portions thereof. +- +- 1.4. "Electronic Distribution Mechanism" means a mechanism generally +- accepted in the software development community for the electronic +- transfer of data. +- +- 1.5. "Executable" means Covered Code in any form other than Source +- Code. +- +- 1.6. "Initial Developer" means the individual or entity identified +- as the Initial Developer in the Source Code notice required by Exhibit +- A. +- +- 1.7. "Larger Work" means a work which combines Covered Code or +- portions thereof with code not governed by the terms of this License. +- +- 1.8. "License" means this document. +- +- 1.8.1. "Licensable" means having the right to grant, to the maximum +- extent possible, whether at the time of the initial grant or +- subsequently acquired, any and all of the rights conveyed herein. +- +- 1.9. "Modifications" means any addition to or deletion from the +- substance or structure of either the Original Code or any previous +- Modifications. When Covered Code is released as a series of files, a +- Modification is: +- A. Any addition to or deletion from the contents of a file +- containing Original Code or previous Modifications. +- +- B. Any new file that contains any part of the Original Code or +- previous Modifications. +- +- 1.10. "Original Code" means Source Code of computer software code +- which is described in the Source Code notice required by Exhibit A as +- Original Code, and which, at the time of its release under this +- License is not already Covered Code governed by this License. +- +- 1.10.1. "Patent Claims" means any patent claim(s), now owned or +- hereafter acquired, including without limitation, method, process, +- and apparatus claims, in any patent Licensable by grantor. +- +- 1.11. "Source Code" means the preferred form of the Covered Code for +- making modifications to it, including all modules it contains, plus +- any associated interface definition files, scripts used to control +- compilation and installation of an Executable, or source code +- differential comparisons against either the Original Code or another +- well known, available Covered Code of the Contributor's choice. The +- Source Code can be in a compressed or archival form, provided the +- appropriate decompression or de-archiving software is widely available +- for no charge. +- +- 1.12. "You" (or "Your") means an individual or a legal entity +- exercising rights under, and complying with all of the terms of, this +- License or a future version of this License issued under Section 6.1. +- For legal entities, "You" includes any entity which controls, is +- controlled by, or is under common control with You. For purposes of +- this definition, "control" means (a) the power, direct or indirect, +- to cause the direction or management of such entity, whether by +- contract or otherwise, or (b) ownership of more than fifty percent +- (50%) of the outstanding shares or beneficial ownership of such +- entity. +- +-2. Source Code License. +- +- 2.1. The Initial Developer Grant. +- The Initial Developer hereby grants You a world-wide, royalty-free, +- non-exclusive license, subject to third party intellectual property +- claims: +- (a) under intellectual property rights (other than patent or +- trademark) Licensable by Initial Developer to use, reproduce, +- modify, display, perform, sublicense and distribute the Original +- Code (or portions thereof) with or without Modifications, and/or +- as part of a Larger Work; and +- +- (b) under Patents Claims infringed by the making, using or +- selling of Original Code, to make, have made, use, practice, +- sell, and offer for sale, and/or otherwise dispose of the +- Original Code (or portions thereof). +- +- (c) the licenses granted in this Section 2.1(a) and (b) are +- effective on the date Initial Developer first distributes +- Original Code under the terms of this License. +- +- (d) Notwithstanding Section 2.1(b) above, no patent license is +- granted: 1) for code that You delete from the Original Code; 2) +- separate from the Original Code; or 3) for infringements caused +- by: i) the modification of the Original Code or ii) the +- combination of the Original Code with other software or devices. +- +- 2.2. Contributor Grant. +- Subject to third party intellectual property claims, each Contributor +- hereby grants You a world-wide, royalty-free, non-exclusive license +- +- (a) under intellectual property rights (other than patent or +- trademark) Licensable by Contributor, to use, reproduce, modify, +- display, perform, sublicense and distribute the Modifications +- created by such Contributor (or portions thereof) either on an +- unmodified basis, with other Modifications, as Covered Code +- and/or as part of a Larger Work; and +- +- (b) under Patent Claims infringed by the making, using, or +- selling of Modifications made by that Contributor either alone +- and/or in combination with its Contributor Version (or portions +- of such combination), to make, use, sell, offer for sale, have +- made, and/or otherwise dispose of: 1) Modifications made by that +- Contributor (or portions thereof); and 2) the combination of +- Modifications made by that Contributor with its Contributor +- Version (or portions of such combination). +- +- (c) the licenses granted in Sections 2.2(a) and 2.2(b) are +- effective on the date Contributor first makes Commercial Use of +- the Covered Code. +- +- (d) Notwithstanding Section 2.2(b) above, no patent license is +- granted: 1) for any code that Contributor has deleted from the +- Contributor Version; 2) separate from the Contributor Version; +- 3) for infringements caused by: i) third party modifications of +- Contributor Version or ii) the combination of Modifications made +- by that Contributor with other software (except as part of the +- Contributor Version) or other devices; or 4) under Patent Claims +- infringed by Covered Code in the absence of Modifications made by +- that Contributor. +- +-3. Distribution Obligations. +- +- 3.1. Application of License. +- The Modifications which You create or to which You contribute are +- governed by the terms of this License, including without limitation +- Section 2.2. The Source Code version of Covered Code may be +- distributed only under the terms of this License or a future version +- of this License released under Section 6.1, and You must include a +- copy of this License with every copy of the Source Code You +- distribute. You may not offer or impose any terms on any Source Code +- version that alters or restricts the applicable version of this +- License or the recipients' rights hereunder. However, You may include +- an additional document offering the additional rights described in +- Section 3.5. +- +- 3.2. Availability of Source Code. +- Any Modification which You create or to which You contribute must be +- made available in Source Code form under the terms of this License +- either on the same media as an Executable version or via an accepted +- Electronic Distribution Mechanism to anyone to whom you made an +- Executable version available; and if made available via Electronic +- Distribution Mechanism, must remain available for at least twelve (12) +- months after the date it initially became available, or at least six +- (6) months after a subsequent version of that particular Modification +- has been made available to such recipients. You are responsible for +- ensuring that the Source Code version remains available even if the +- Electronic Distribution Mechanism is maintained by a third party. +- +- 3.3. Description of Modifications. +- You must cause all Covered Code to which You contribute to contain a +- file documenting the changes You made to create that Covered Code and +- the date of any change. You must include a prominent statement that +- the Modification is derived, directly or indirectly, from Original +- Code provided by the Initial Developer and including the name of the +- Initial Developer in (a) the Source Code, and (b) in any notice in an +- Executable version or related documentation in which You describe the +- origin or ownership of the Covered Code. +- +- 3.4. Intellectual Property Matters +- (a) Third Party Claims. +- If Contributor has knowledge that a license under a third party's +- intellectual property rights is required to exercise the rights +- granted by such Contributor under Sections 2.1 or 2.2, +- Contributor must include a text file with the Source Code +- distribution titled "LEGAL" which describes the claim and the +- party making the claim in sufficient detail that a recipient will +- know whom to contact. If Contributor obtains such knowledge after +- the Modification is made available as described in Section 3.2, +- Contributor shall promptly modify the LEGAL file in all copies +- Contributor makes available thereafter and shall take other steps +- (such as notifying appropriate mailing lists or newsgroups) +- reasonably calculated to inform those who received the Covered +- Code that new knowledge has been obtained. +- +- (b) Contributor APIs. +- If Contributor's Modifications include an application programming +- interface and Contributor has knowledge of patent licenses which +- are reasonably necessary to implement that API, Contributor must +- also include this information in the LEGAL file. +- +- (c) Representations. +- Contributor represents that, except as disclosed pursuant to +- Section 3.4(a) above, Contributor believes that Contributor's +- Modifications are Contributor's original creation(s) and/or +- Contributor has sufficient rights to grant the rights conveyed by +- this License. +- +- 3.5. Required Notices. +- You must duplicate the notice in Exhibit A in each file of the Source +- Code. If it is not possible to put such notice in a particular Source +- Code file due to its structure, then You must include such notice in a +- location (such as a relevant directory) where a user would be likely +- to look for such a notice. If You created one or more Modification(s) +- You may add your name as a Contributor to the notice described in +- Exhibit A. You must also duplicate this License in any documentation +- for the Source Code where You describe recipients' rights or ownership +- rights relating to Covered Code. You may choose to offer, and to +- charge a fee for, warranty, support, indemnity or liability +- obligations to one or more recipients of Covered Code. However, You +- may do so only on Your own behalf, and not on behalf of the Initial +- Developer or any Contributor. You must make it absolutely clear than +- any such warranty, support, indemnity or liability obligation is +- offered by You alone, and You hereby agree to indemnify the Initial +- Developer and every Contributor for any liability incurred by the +- Initial Developer or such Contributor as a result of warranty, +- support, indemnity or liability terms You offer. +- +- 3.6. Distribution of Executable Versions. +- You may distribute Covered Code in Executable form only if the +- requirements of Section 3.1-3.5 have been met for that Covered Code, +- and if You include a notice stating that the Source Code version of +- the Covered Code is available under the terms of this License, +- including a description of how and where You have fulfilled the +- obligations of Section 3.2. The notice must be conspicuously included +- in any notice in an Executable version, related documentation or +- collateral in which You describe recipients' rights relating to the +- Covered Code. You may distribute the Executable version of Covered +- Code or ownership rights under a license of Your choice, which may +- contain terms different from this License, provided that You are in +- compliance with the terms of this License and that the license for the +- Executable version does not attempt to limit or alter the recipient's +- rights in the Source Code version from the rights set forth in this +- License. If You distribute the Executable version under a different +- license You must make it absolutely clear that any terms which differ +- from this License are offered by You alone, not by the Initial +- Developer or any Contributor. You hereby agree to indemnify the +- Initial Developer and every Contributor for any liability incurred by +- the Initial Developer or such Contributor as a result of any such +- terms You offer. +- +- 3.7. Larger Works. +- You may create a Larger Work by combining Covered Code with other code +- not governed by the terms of this License and distribute the Larger +- Work as a single product. In such a case, You must make sure the +- requirements of this License are fulfilled for the Covered Code. +- +-4. Inability to Comply Due to Statute or Regulation. +- +- If it is impossible for You to comply with any of the terms of this +- License with respect to some or all of the Covered Code due to +- statute, judicial order, or regulation then You must: (a) comply with +- the terms of this License to the maximum extent possible; and (b) +- describe the limitations and the code they affect. Such description +- must be included in the LEGAL file described in Section 3.4 and must +- be included with all distributions of the Source Code. Except to the +- extent prohibited by statute or regulation, such description must be +- sufficiently detailed for a recipient of ordinary skill to be able to +- understand it. +- +-5. Application of this License. +- +- This License applies to code to which the Initial Developer has +- attached the notice in Exhibit A and to related Covered Code. +- +-6. Versions of the License. +- +- 6.1. New Versions. +- Netscape Communications Corporation ("Netscape") may publish revised +- and/or new versions of the License from time to time. Each version +- will be given a distinguishing version number. +- +- 6.2. Effect of New Versions. +- Once Covered Code has been published under a particular version of the +- License, You may always continue to use it under the terms of that +- version. You may also choose to use such Covered Code under the terms +- of any subsequent version of the License published by Netscape. No one +- other than Netscape has the right to modify the terms applicable to +- Covered Code created under this License. +- +- 6.3. Derivative Works. +- If You create or use a modified version of this License (which you may +- only do in order to apply it to code which is not already Covered Code +- governed by this License), You must (a) rename Your license so that +- the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", +- "MPL", "NPL" or any confusingly similar phrase do not appear in your +- license (except to note that your license differs from this License) +- and (b) otherwise make it clear that Your version of the license +- contains terms which differ from the Mozilla Public License and +- Netscape Public License. (Filling in the name of the Initial +- Developer, Original Code or Contributor in the notice described in +- Exhibit A shall not of themselves be deemed to be modifications of +- this License.) +- +-7. DISCLAIMER OF WARRANTY. +- +- COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, +- WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, +- WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF +- DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. +- THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE +- IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, +- YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE +- COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER +- OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF +- ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. +- +-8. TERMINATION. +- +- 8.1. This License and the rights granted hereunder will terminate +- automatically if You fail to comply with terms herein and fail to cure +- such breach within 30 days of becoming aware of the breach. All +- sublicenses to the Covered Code which are properly granted shall +- survive any termination of this License. Provisions which, by their +- nature, must remain in effect beyond the termination of this License +- shall survive. +- +- 8.2. If You initiate litigation by asserting a patent infringement +- claim (excluding declatory judgment actions) against Initial Developer +- or a Contributor (the Initial Developer or Contributor against whom +- You file such action is referred to as "Participant") alleging that: +- +- (a) such Participant's Contributor Version directly or indirectly +- infringes any patent, then any and all rights granted by such +- Participant to You under Sections 2.1 and/or 2.2 of this License +- shall, upon 60 days notice from Participant terminate prospectively, +- unless if within 60 days after receipt of notice You either: (i) +- agree in writing to pay Participant a mutually agreeable reasonable +- royalty for Your past and future use of Modifications made by such +- Participant, or (ii) withdraw Your litigation claim with respect to +- the Contributor Version against such Participant. If within 60 days +- of notice, a reasonable royalty and payment arrangement are not +- mutually agreed upon in writing by the parties or the litigation claim +- is not withdrawn, the rights granted by Participant to You under +- Sections 2.1 and/or 2.2 automatically terminate at the expiration of +- the 60 day notice period specified above. +- +- (b) any software, hardware, or device, other than such Participant's +- Contributor Version, directly or indirectly infringes any patent, then +- any rights granted to You by such Participant under Sections 2.1(b) +- and 2.2(b) are revoked effective as of the date You first made, used, +- sold, distributed, or had made, Modifications made by that +- Participant. +- +- 8.3. If You assert a patent infringement claim against Participant +- alleging that such Participant's Contributor Version directly or +- indirectly infringes any patent where such claim is resolved (such as +- by license or settlement) prior to the initiation of patent +- infringement litigation, then the reasonable value of the licenses +- granted by such Participant under Sections 2.1 or 2.2 shall be taken +- into account in determining the amount or value of any payment or +- license. +- +- 8.4. In the event of termination under Sections 8.1 or 8.2 above, +- all end user license agreements (excluding distributors and resellers) +- which have been validly granted by You or any distributor hereunder +- prior to termination shall survive termination. +- +-9. LIMITATION OF LIABILITY. +- +- UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT +- (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL +- DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, +- OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR +- ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY +- CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, +- WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER +- COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN +- INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF +- LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY +- RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW +- PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE +- EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO +- THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. +- +-10. U.S. GOVERNMENT END USERS. +- +- The Covered Code is a "commercial item," as that term is defined in +- 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer +- software" and "commercial computer software documentation," as such +- terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 +- C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), +- all U.S. Government End Users acquire Covered Code with only those +- rights set forth herein. +- +-11. MISCELLANEOUS. +- +- This License represents the complete agreement concerning subject +- matter hereof. If any provision of this License is held to be +- unenforceable, such provision shall be reformed only to the extent +- necessary to make it enforceable. This License shall be governed by +- California law provisions (except to the extent applicable law, if +- any, provides otherwise), excluding its conflict-of-law provisions. +- With respect to disputes in which at least one party is a citizen of, +- or an entity chartered or registered to do business in the United +- States of America, any litigation relating to this License shall be +- subject to the jurisdiction of the Federal Courts of the Northern +- District of California, with venue lying in Santa Clara County, +- California, with the losing party responsible for costs, including +- without limitation, court costs and reasonable attorneys' fees and +- expenses. The application of the United Nations Convention on +- Contracts for the International Sale of Goods is expressly excluded. +- Any law or regulation which provides that the language of a contract +- shall be construed against the drafter shall not apply to this +- License. +- +-12. RESPONSIBILITY FOR CLAIMS. +- +- As between Initial Developer and the Contributors, each party is +- responsible for claims and damages arising, directly or indirectly, +- out of its utilization of rights under this License and You agree to +- work with Initial Developer and Contributors to distribute such +- responsibility on an equitable basis. Nothing herein is intended or +- shall be deemed to constitute any admission of liability. +- +-13. MULTIPLE-LICENSED CODE. +- +- Initial Developer may designate portions of the Covered Code as +- "Multiple-Licensed". "Multiple-Licensed" means that the Initial +- Developer permits you to utilize portions of the Covered Code under +- Your choice of the NPL or the alternative licenses, if any, specified +- by the Initial Developer in the file described in Exhibit A. +- +-EXHIBIT A -Mozilla Public License. +- +- ``The contents of this file are subject to the Mozilla Public License +- Version 1.1 (the "License"); you may not use this file except in +- compliance with the License. You may obtain a copy of the License at +- http://www.mozilla.org/MPL/ +- +- Software distributed under the License is distributed on an "AS IS" +- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +- License for the specific language governing rights and limitations +- under the License. +- +- The Original Code is ______________________________________. +- +- The Initial Developer of the Original Code is ________________________. +- Portions created by ______________________ are Copyright (C) ______ +- _______________________. All Rights Reserved. +- +- Contributor(s): ______________________________________. +- +- Alternatively, the contents of this file may be used under the terms +- of the _____ license (the "[___] License"), in which case the +- provisions of [______] License are applicable instead of those +- above. If you wish to allow use of your version of this file only +- under the terms of the [____] License and not to allow others to use +- your version of this file under the MPL, indicate your decision by +- deleting the provisions above and replace them with the notice and +- other provisions required by the [___] License. If you do not delete +- the provisions above, a recipient may use your version of this file +- under either the MPL or the [___] License." +- +- [NOTE: The text of this Exhibit A may differ slightly from the text of +- the notices in the Source Code files of the Original Code. You should +- use the text of this Exhibit A rather than the text found in the +- Original Code Source Code for Your Modifications.] ++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. +\ No newline at end of file +-- +2.19.2 + diff --git a/package/libgdiplus/0003-gifcodec.c-Include-copy-of-GifQuantizeBuffer-functio.patch b/package/libgdiplus/0003-gifcodec.c-Include-copy-of-GifQuantizeBuffer-functio.patch new file mode 100644 index 00000000..80e944f0 --- /dev/null +++ b/package/libgdiplus/0003-gifcodec.c-Include-copy-of-GifQuantizeBuffer-functio.patch @@ -0,0 +1,414 @@ +From afde9145030ff4989f0d7933389c20244eaf8039 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Alexander=20K=C3=B6plinger?= +Date: Thu, 1 Aug 2019 17:08:36 +0200 +Subject: [PATCH] gifcodec.c: Include copy of GifQuantizeBuffer function from + giflib (#575) + +It was removed upstream so we need to include a copy of it. +The upstream code is licensed as MIT. + +Fixes https://github.com/mono/libgdiplus/issues/546 + +Signed-off-by: Heiko Thiery +--- + src/gifcodec.c | 377 +++++++++++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 369 insertions(+), 8 deletions(-) + +diff --git a/src/gifcodec.c b/src/gifcodec.c +index 6f8dedb..29a9899 100644 +--- a/src/gifcodec.c ++++ b/src/gifcodec.c +@@ -40,6 +40,374 @@ GUID gdip_gif_image_format_guid = {0xb96b3cb0U, 0x0728U, 0x11d3U, {0x9d, 0x7b, 0 + #include "gifcodec.h" + + ++/* START GifQuantizeBuffer copy from giflib ++ ++The giflib 5.2.0 release notes mention: ++ ++> The undocumented and deprecated GifQuantizeBuffer() entry point ++> has been moved to the util library to reduce libgif size and attack ++> surface. Applications needing this function are couraged to link the ++> util library or make their own copy. ++ ++Since the util library doesn't get installed in most distros we can't ++link against it and need to make our own copy called LibgdiplusGifQuantizeBuffer. ++This is taken from giflib 52b62de83d5facbbbde042b85bf3f61182e3bebd. ++ ++> The GIFLIB distribution is Copyright (c) 1997 Eric S. Raymond ++> ++> 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. ++ ++*/ ++ ++/***************************************************************************** ++ ++ quantize.c - quantize a high resolution image into lower one ++ ++ Based on: "Color Image Quantization for frame buffer Display", by ++ Paul Heckbert SIGGRAPH 1982 page 297-307. ++ ++ This doesn't really belong in the core library, was undocumented, ++ and was removed in 4.2. Then it turned out some client apps were ++ actually using it, so it was restored in 5.0. ++ ++SPDX-License-Identifier: MIT ++ ++******************************************************************************/ ++ ++#include ++#include ++#include "gif_lib.h" ++//#include "gif_lib_private.h" ++ ++//#define ABS(x) ((x) > 0 ? (x) : (-(x))) ++ ++#define COLOR_ARRAY_SIZE 32768 ++#define BITS_PER_PRIM_COLOR 5 ++#define MAX_PRIM_COLOR 0x1f ++ ++static int SortRGBAxis; ++ ++typedef struct QuantizedColorType { ++ GifByteType RGB[3]; ++ GifByteType NewColorIndex; ++ long Count; ++ struct QuantizedColorType *Pnext; ++} QuantizedColorType; ++ ++typedef struct NewColorMapType { ++ GifByteType RGBMin[3], RGBWidth[3]; ++ unsigned int NumEntries; /* # of QuantizedColorType in linked list below */ ++ unsigned long Count; /* Total number of pixels in all the entries */ ++ QuantizedColorType *QuantizedColors; ++} NewColorMapType; ++ ++static int SubdivColorMap(NewColorMapType * NewColorSubdiv, ++ unsigned int ColorMapSize, ++ unsigned int *NewColorMapSize); ++static int SortCmpRtn(const void *Entry1, const void *Entry2); ++ ++/****************************************************************************** ++ Quantize high resolution image into lower one. Input image consists of a ++ 2D array for each of the RGB colors with size Width by Height. There is no ++ Color map for the input. Output is a quantized image with 2D array of ++ indexes into the output color map. ++ Note input image can be 24 bits at the most (8 for red/green/blue) and ++ the output has 256 colors at the most (256 entries in the color map.). ++ ColorMapSize specifies size of color map up to 256 and will be updated to ++ real size before returning. ++ Also non of the parameter are allocated by this routine. ++ This function returns GIF_OK if successful, GIF_ERROR otherwise. ++******************************************************************************/ ++int ++LibgdiplusGifQuantizeBuffer(unsigned int Width, ++ unsigned int Height, ++ int *ColorMapSize, ++ GifByteType * RedInput, ++ GifByteType * GreenInput, ++ GifByteType * BlueInput, ++ GifByteType * OutputBuffer, ++ GifColorType * OutputColorMap) { ++ ++ unsigned int Index, NumOfEntries; ++ int i, j, MaxRGBError[3]; ++ unsigned int NewColorMapSize; ++ long Red, Green, Blue; ++ NewColorMapType NewColorSubdiv[256]; ++ QuantizedColorType *ColorArrayEntries, *QuantizedColor; ++ ++ ColorArrayEntries = (QuantizedColorType *)malloc( ++ sizeof(QuantizedColorType) * COLOR_ARRAY_SIZE); ++ if (ColorArrayEntries == NULL) { ++ return GIF_ERROR; ++ } ++ ++ for (i = 0; i < COLOR_ARRAY_SIZE; i++) { ++ ColorArrayEntries[i].RGB[0] = i >> (2 * BITS_PER_PRIM_COLOR); ++ ColorArrayEntries[i].RGB[1] = (i >> BITS_PER_PRIM_COLOR) & ++ MAX_PRIM_COLOR; ++ ColorArrayEntries[i].RGB[2] = i & MAX_PRIM_COLOR; ++ ColorArrayEntries[i].Count = 0; ++ } ++ ++ /* Sample the colors and their distribution: */ ++ for (i = 0; i < (int)(Width * Height); i++) { ++ Index = ((RedInput[i] >> (8 - BITS_PER_PRIM_COLOR)) << ++ (2 * BITS_PER_PRIM_COLOR)) + ++ ((GreenInput[i] >> (8 - BITS_PER_PRIM_COLOR)) << ++ BITS_PER_PRIM_COLOR) + ++ (BlueInput[i] >> (8 - BITS_PER_PRIM_COLOR)); ++ ColorArrayEntries[Index].Count++; ++ } ++ ++ /* Put all the colors in the first entry of the color map, and call the ++ * recursive subdivision process. */ ++ for (i = 0; i < 256; i++) { ++ NewColorSubdiv[i].QuantizedColors = NULL; ++ NewColorSubdiv[i].Count = NewColorSubdiv[i].NumEntries = 0; ++ for (j = 0; j < 3; j++) { ++ NewColorSubdiv[i].RGBMin[j] = 0; ++ NewColorSubdiv[i].RGBWidth[j] = 255; ++ } ++ } ++ ++ /* Find the non empty entries in the color table and chain them: */ ++ for (i = 0; i < COLOR_ARRAY_SIZE; i++) ++ if (ColorArrayEntries[i].Count > 0) ++ break; ++ QuantizedColor = NewColorSubdiv[0].QuantizedColors = &ColorArrayEntries[i]; ++ NumOfEntries = 1; ++ while (++i < COLOR_ARRAY_SIZE) ++ if (ColorArrayEntries[i].Count > 0) { ++ QuantizedColor->Pnext = &ColorArrayEntries[i]; ++ QuantizedColor = &ColorArrayEntries[i]; ++ NumOfEntries++; ++ } ++ QuantizedColor->Pnext = NULL; ++ ++ NewColorSubdiv[0].NumEntries = NumOfEntries; /* Different sampled colors */ ++ NewColorSubdiv[0].Count = ((long)Width) * Height; /* Pixels */ ++ NewColorMapSize = 1; ++ if (SubdivColorMap(NewColorSubdiv, *ColorMapSize, &NewColorMapSize) != ++ GIF_OK) { ++ free((char *)ColorArrayEntries); ++ return GIF_ERROR; ++ } ++ if (NewColorMapSize < *ColorMapSize) { ++ /* And clear rest of color map: */ ++ for (i = NewColorMapSize; i < *ColorMapSize; i++) ++ OutputColorMap[i].Red = OutputColorMap[i].Green = ++ OutputColorMap[i].Blue = 0; ++ } ++ ++ /* Average the colors in each entry to be the color to be used in the ++ * output color map, and plug it into the output color map itself. */ ++ for (i = 0; i < NewColorMapSize; i++) { ++ if ((j = NewColorSubdiv[i].NumEntries) > 0) { ++ QuantizedColor = NewColorSubdiv[i].QuantizedColors; ++ Red = Green = Blue = 0; ++ while (QuantizedColor) { ++ QuantizedColor->NewColorIndex = i; ++ Red += QuantizedColor->RGB[0]; ++ Green += QuantizedColor->RGB[1]; ++ Blue += QuantizedColor->RGB[2]; ++ QuantizedColor = QuantizedColor->Pnext; ++ } ++ OutputColorMap[i].Red = (Red << (8 - BITS_PER_PRIM_COLOR)) / j; ++ OutputColorMap[i].Green = (Green << (8 - BITS_PER_PRIM_COLOR)) / j; ++ OutputColorMap[i].Blue = (Blue << (8 - BITS_PER_PRIM_COLOR)) / j; ++ } ++ } ++ ++ /* Finally scan the input buffer again and put the mapped index in the ++ * output buffer. */ ++ MaxRGBError[0] = MaxRGBError[1] = MaxRGBError[2] = 0; ++ for (i = 0; i < (int)(Width * Height); i++) { ++ Index = ((RedInput[i] >> (8 - BITS_PER_PRIM_COLOR)) << ++ (2 * BITS_PER_PRIM_COLOR)) + ++ ((GreenInput[i] >> (8 - BITS_PER_PRIM_COLOR)) << ++ BITS_PER_PRIM_COLOR) + ++ (BlueInput[i] >> (8 - BITS_PER_PRIM_COLOR)); ++ Index = ColorArrayEntries[Index].NewColorIndex; ++ OutputBuffer[i] = Index; ++ if (MaxRGBError[0] < ABS(OutputColorMap[Index].Red - RedInput[i])) ++ MaxRGBError[0] = ABS(OutputColorMap[Index].Red - RedInput[i]); ++ if (MaxRGBError[1] < ABS(OutputColorMap[Index].Green - GreenInput[i])) ++ MaxRGBError[1] = ABS(OutputColorMap[Index].Green - GreenInput[i]); ++ if (MaxRGBError[2] < ABS(OutputColorMap[Index].Blue - BlueInput[i])) ++ MaxRGBError[2] = ABS(OutputColorMap[Index].Blue - BlueInput[i]); ++ } ++ ++#ifdef DEBUG ++ fprintf(stderr, ++ "Quantization L(0) errors: Red = %d, Green = %d, Blue = %d.\n", ++ MaxRGBError[0], MaxRGBError[1], MaxRGBError[2]); ++#endif /* DEBUG */ ++ ++ free((char *)ColorArrayEntries); ++ ++ *ColorMapSize = NewColorMapSize; ++ ++ return GIF_OK; ++} ++ ++/****************************************************************************** ++ Routine to subdivide the RGB space recursively using median cut in each ++ axes alternatingly until ColorMapSize different cubes exists. ++ The biggest cube in one dimension is subdivide unless it has only one entry. ++ Returns GIF_ERROR if failed, otherwise GIF_OK. ++*******************************************************************************/ ++static int ++SubdivColorMap(NewColorMapType * NewColorSubdiv, ++ unsigned int ColorMapSize, ++ unsigned int *NewColorMapSize) { ++ ++ unsigned int i, j, Index = 0; ++ QuantizedColorType *QuantizedColor, **SortArray; ++ ++ while (ColorMapSize > *NewColorMapSize) { ++ /* Find candidate for subdivision: */ ++ long Sum, Count; ++ int MaxSize = -1; ++ unsigned int NumEntries, MinColor, MaxColor; ++ for (i = 0; i < *NewColorMapSize; i++) { ++ for (j = 0; j < 3; j++) { ++ if ((((int)NewColorSubdiv[i].RGBWidth[j]) > MaxSize) && ++ (NewColorSubdiv[i].NumEntries > 1)) { ++ MaxSize = NewColorSubdiv[i].RGBWidth[j]; ++ Index = i; ++ SortRGBAxis = j; ++ } ++ } ++ } ++ ++ if (MaxSize == -1) ++ return GIF_OK; ++ ++ /* Split the entry Index into two along the axis SortRGBAxis: */ ++ ++ /* Sort all elements in that entry along the given axis and split at ++ * the median. */ ++ SortArray = (QuantizedColorType **)malloc( ++ sizeof(QuantizedColorType *) * ++ NewColorSubdiv[Index].NumEntries); ++ if (SortArray == NULL) ++ return GIF_ERROR; ++ for (j = 0, QuantizedColor = NewColorSubdiv[Index].QuantizedColors; ++ j < NewColorSubdiv[Index].NumEntries && QuantizedColor != NULL; ++ j++, QuantizedColor = QuantizedColor->Pnext) ++ SortArray[j] = QuantizedColor; ++ ++ /* ++ * Because qsort isn't stable, this can produce differing ++ * results for the order of tuples depending on platform ++ * details of how qsort() is implemented. ++ * ++ * We mitigate this problem by sorting on all three axes rather ++ * than only the one specied by SortRGBAxis; that way the instability ++ * can only become an issue if there are multiple color indices ++ * referring to identical RGB tuples. Older versions of this ++ * sorted on only the one axis. ++ */ ++ qsort(SortArray, NewColorSubdiv[Index].NumEntries, ++ sizeof(QuantizedColorType *), SortCmpRtn); ++ ++ /* Relink the sorted list into one: */ ++ for (j = 0; j < NewColorSubdiv[Index].NumEntries - 1; j++) ++ SortArray[j]->Pnext = SortArray[j + 1]; ++ SortArray[NewColorSubdiv[Index].NumEntries - 1]->Pnext = NULL; ++ NewColorSubdiv[Index].QuantizedColors = QuantizedColor = SortArray[0]; ++ free((char *)SortArray); ++ ++ /* Now simply add the Counts until we have half of the Count: */ ++ Sum = NewColorSubdiv[Index].Count / 2 - QuantizedColor->Count; ++ NumEntries = 1; ++ Count = QuantizedColor->Count; ++ while (QuantizedColor->Pnext != NULL && ++ (Sum -= QuantizedColor->Pnext->Count) >= 0 && ++ QuantizedColor->Pnext->Pnext != NULL) { ++ QuantizedColor = QuantizedColor->Pnext; ++ NumEntries++; ++ Count += QuantizedColor->Count; ++ } ++ /* Save the values of the last color of the first half, and first ++ * of the second half so we can update the Bounding Boxes later. ++ * Also as the colors are quantized and the BBoxes are full 0..255, ++ * they need to be rescaled. ++ */ ++ MaxColor = QuantizedColor->RGB[SortRGBAxis]; /* Max. of first half */ ++ /* coverity[var_deref_op] */ ++ MinColor = QuantizedColor->Pnext->RGB[SortRGBAxis]; /* of second */ ++ MaxColor <<= (8 - BITS_PER_PRIM_COLOR); ++ MinColor <<= (8 - BITS_PER_PRIM_COLOR); ++ ++ /* Partition right here: */ ++ NewColorSubdiv[*NewColorMapSize].QuantizedColors = ++ QuantizedColor->Pnext; ++ QuantizedColor->Pnext = NULL; ++ NewColorSubdiv[*NewColorMapSize].Count = Count; ++ NewColorSubdiv[Index].Count -= Count; ++ NewColorSubdiv[*NewColorMapSize].NumEntries = ++ NewColorSubdiv[Index].NumEntries - NumEntries; ++ NewColorSubdiv[Index].NumEntries = NumEntries; ++ for (j = 0; j < 3; j++) { ++ NewColorSubdiv[*NewColorMapSize].RGBMin[j] = ++ NewColorSubdiv[Index].RGBMin[j]; ++ NewColorSubdiv[*NewColorMapSize].RGBWidth[j] = ++ NewColorSubdiv[Index].RGBWidth[j]; ++ } ++ NewColorSubdiv[*NewColorMapSize].RGBWidth[SortRGBAxis] = ++ NewColorSubdiv[*NewColorMapSize].RGBMin[SortRGBAxis] + ++ NewColorSubdiv[*NewColorMapSize].RGBWidth[SortRGBAxis] - MinColor; ++ NewColorSubdiv[*NewColorMapSize].RGBMin[SortRGBAxis] = MinColor; ++ ++ NewColorSubdiv[Index].RGBWidth[SortRGBAxis] = ++ MaxColor - NewColorSubdiv[Index].RGBMin[SortRGBAxis]; ++ ++ (*NewColorMapSize)++; ++ } ++ ++ return GIF_OK; ++} ++ ++/**************************************************************************** ++ Routine called by qsort to compare two entries. ++*****************************************************************************/ ++ ++static int ++SortCmpRtn(const void *Entry1, ++ const void *Entry2) { ++ QuantizedColorType *entry1 = (*((QuantizedColorType **) Entry1)); ++ QuantizedColorType *entry2 = (*((QuantizedColorType **) Entry2)); ++ ++ /* sort on all axes of the color space! */ ++ int hash1 = entry1->RGB[SortRGBAxis] * 256 * 256 ++ + entry1->RGB[(SortRGBAxis+1) % 3] * 256 ++ + entry1->RGB[(SortRGBAxis+2) % 3]; ++ int hash2 = entry2->RGB[SortRGBAxis] * 256 * 256 ++ + entry2->RGB[(SortRGBAxis+1) % 3] * 256 ++ + entry2->RGB[(SortRGBAxis+2) % 3]; ++ ++ return hash1 - hash2; ++} ++ ++/* END GifQuantizeBuffer copy from giflib */ ++ + /* Data structure used for callback */ + typedef struct + { +@@ -851,14 +1219,7 @@ gdip_save_gif_image (void *stream, GpImage *image, BOOL from_file) + v += 4; + } + } +- if ( +-#if GIFLIB_MAJOR >= 5 +- GifQuantizeBuffer( +-#else +- QuantizeBuffer( +-#endif +- bitmap_data->width, bitmap_data->height, &cmap_size, +- red, green, blue, pixbuf, cmap->Colors) == GIF_ERROR) { ++ if (LibgdiplusGifQuantizeBuffer(bitmap_data->width, bitmap_data->height, &cmap_size, red, green, blue, pixbuf, cmap->Colors) == GIF_ERROR) { + goto error; + } + } +-- +2.20.1 + diff --git a/package/libgdiplus/Config.in b/package/libgdiplus/Config.in new file mode 100644 index 00000000..6ddf44fd --- /dev/null +++ b/package/libgdiplus/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_LIBGDIPLUS + bool "libgdiplus" + depends on BR2_PACKAGE_XORG7 + depends on BR2_USE_WCHAR # libglib2 -> gettext + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + select BR2_PACKAGE_XLIB_LIBXFT + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_CAIRO + select BR2_PACKAGE_LIBPNG + help + An Open Source implementation of the GDI+ API. + + https://github.com/mono/libgdiplus + +comment "libgdiplus needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_XORG7 + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libgdiplus/libgdiplus.hash b/package/libgdiplus/libgdiplus.hash new file mode 100644 index 00000000..d89b352d --- /dev/null +++ b/package/libgdiplus/libgdiplus.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 6a75e4a476695cd6a1475fd6b989423ecf73978fd757673669771d8a6e13f756 libgdiplus-5.6.tar.gz +sha256 81317bf837e02a116dc20b032fa1d0cbf9ec357621f141ff2c2daf26c17cbb5d LICENSE diff --git a/package/libgdiplus/libgdiplus.mk b/package/libgdiplus/libgdiplus.mk new file mode 100644 index 00000000..d120f6a3 --- /dev/null +++ b/package/libgdiplus/libgdiplus.mk @@ -0,0 +1,55 @@ +################################################################################ +# +# libgdiplus +# +################################################################################ + +LIBGDIPLUS_VERSION = 5.6 +LIBGDIPLUS_SITE = $(call github,mono,libgdiplus,$(LIBGDIPLUS_VERSION)) + +LIBGDIPLUS_LICENSE = MIT +LIBGDIPLUS_LICENSE_FILES = LICENSE + +LIBGDIPLUS_INSTALL_STAGING = YES + +# github tarball doesn't have configure +LIBGDIPLUS_AUTORECONF = YES + +LIBGDIPLUS_DEPENDENCIES = xlib_libXft libglib2 cairo libpng host-pkgconf + +ifeq ($(BR2_PACKAGE_GIFLIB),y) +LIBGDIPLUS_CONF_OPTS += --with-libgif +LIBGDIPLUS_DEPENDENCIES += giflib +else +LIBGDIPLUS_CONF_OPTS += --without-libgif +endif + +# there is a bug in the configure script that enables pango support +# when passing --without-pango, so let's just not use it +ifeq ($(BR2_PACKAGE_PANGO),y) +LIBGDIPLUS_CONF_OPTS += --with-pango +LIBGDIPLUS_DEPENDENCIES += pango +endif + +ifeq ($(BR2_PACKAGE_LIBEXIF),y) +LIBGDIPLUS_CONF_OPTS += --with-libexif +LIBGDIPLUS_DEPENDENCIES += libexif +else +LIBGDIPLUS_CONF_OPTS += --without-libexif +endif + +ifeq ($(BR2_PACKAGE_JPEG),y) +LIBGDIPLUS_CONF_OPTS += --with-libjpeg=$(STAGING_DIR)/usr +LIBGDIPLUS_DEPENDENCIES += jpeg +else +LIBGDIPLUS_CONF_OPTS += --without-libjpeg +endif + +ifeq ($(BR2_PACKAGE_TIFF),y) +LIBGDIPLUS_CONF_OPTS += --with-libtiff=$(STAGING_DIR)/usr +LIBGDIPLUS_DEPENDENCIES += tiff +else +LIBGDIPLUS_CONF_OPTS += --without-libtiff +endif + +$(eval $(autotools-package)) diff --git a/package/libgee/Config.in b/package/libgee/Config.in new file mode 100644 index 00000000..07c387c9 --- /dev/null +++ b/package/libgee/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_LIBGEE + bool "libgee" + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBGLIB2 + help + Libgee is an utility library providing GObject-based + interfaces and classes for commonly used data structures. + + https://wiki.gnome.org/Projects/Libgee + +comment "libgee needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libgee/libgee.hash b/package/libgee/libgee.hash new file mode 100644 index 00000000..c82651c6 --- /dev/null +++ b/package/libgee/libgee.hash @@ -0,0 +1,5 @@ +# From http://ftp.acc.umu.se/pub/gnome/sources/libgee/0.20/libgee-0.20.3.sha256sum +sha256 d0b5edefc88cbca5f1709d19fa62aef490922c6577a14ac4e7b085507911a5de libgee-0.20.3.tar.xz + +# Hash for license file: +sha256 5df07007198989c622f5d41de8d703e7bef3d0e79d62e24332ee739a452af62a COPYING diff --git a/package/libgee/libgee.mk b/package/libgee/libgee.mk new file mode 100644 index 00000000..4b2581e1 --- /dev/null +++ b/package/libgee/libgee.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# libgee +# +################################################################################ + +LIBGEE_VERSION_MAJOR = 0.20 +LIBGEE_VERSION = $(LIBGEE_VERSION_MAJOR).3 +LIBGEE_SITE = http://ftp.gnome.org/pub/gnome/sources/libgee/$(LIBGEE_VERSION_MAJOR) +LIBGEE_SOURCE = libgee-$(LIBGEE_VERSION).tar.xz +LIBGEE_DEPENDENCIES = host-pkgconf host-vala libglib2 +LIBGEE_INSTALL_STAGING = YES +LIBGEE_LICENSE = LGPL-2.1+ +LIBGEE_LICENSE_FILES = COPYING + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +LIBGEE_CONF_OPTS += --enable-introspection +LIBGEE_DEPENDENCIES += gobject-introspection +else +LIBGEE_CONF_OPTS += --disable-introspection +endif + +$(eval $(autotools-package)) diff --git a/package/libgeos/0001-CMakeLists.txt-add-BUILD_BENCHMARKS.patch b/package/libgeos/0001-CMakeLists.txt-add-BUILD_BENCHMARKS.patch new file mode 100644 index 00000000..94748dcd --- /dev/null +++ b/package/libgeos/0001-CMakeLists.txt-add-BUILD_BENCHMARKS.patch @@ -0,0 +1,37 @@ +From 16848d6da27140caf922f71a233f96a508fb061e Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 24 Jan 2021 12:38:37 +0100 +Subject: [PATCH] CMakeLists.txt: add BUILD_BENCHMARKS + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/libgeos/geos/pull/395] +--- + CMakeLists.txt | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index c8b39bac..8ca6b829 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -48,6 +48,7 @@ option(BUILD_SHARED_LIBS "Build GEOS with shared libraries" ON) + set(CMAKE_CXX_STANDARD 11 CACHE STRING "C++ standard version to use (default is 11)") + + ## GEOS custom variables ++option(BUILD_BENCHMARKS "Build GEOS benchmarks" ON) + cmake_dependent_option(GEOS_BUILD_DEVELOPER + "Build with compilation flags useful for development" ON + "GEOS_BUILD_FROM_GIT" OFF) +@@ -292,7 +293,9 @@ endif() + #----------------------------------------------------------------------------- + # Benchmarks + #----------------------------------------------------------------------------- +-add_subdirectory(benchmarks) ++if(BUILD_BENCHMARKS) ++ add_subdirectory(benchmarks) ++endif() + + #----------------------------------------------------------------------------- + # Utils +-- +2.29.2 + diff --git a/package/libgeos/Config.in b/package/libgeos/Config.in new file mode 100644 index 00000000..86a1cddc --- /dev/null +++ b/package/libgeos/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_LIBGEOS + bool "libgeos" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + depends on !BR2_TOOLCHAIN_HAS_BINUTILS_BUG_21464 + depends on !BR2_TOOLCHAIN_HAS_BINUTILS_BUG_27597 + help + GEOS (Geometry Engine - Open Source) is a C++ port of the + JTS Topology Suite (JTS). It aims to contain the complete + functionality of JTS in C++. This includes all the OpenGIS + Simple Features for SQL spatial predicate functions and + spatial operators, as well as specific JTS enhanced functions. + + https://trac.osgeo.org/geos + +comment "libgeos needs a toolchain w/ C++, wchar, not binutils bug 21464, 27597" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \ + BR2_TOOLCHAIN_HAS_BINUTILS_BUG_21464 || \ + BR2_TOOLCHAIN_HAS_BINUTILS_BUG_27597 diff --git a/package/libgeos/libgeos.hash b/package/libgeos/libgeos.hash new file mode 100644 index 00000000..5b5e44c7 --- /dev/null +++ b/package/libgeos/libgeos.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 bd8082cf12f45f27630193c78bdb5a3cba847b81e72b20268356c2a4fc065269 geos-3.9.0.tar.bz2 +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/libgeos/libgeos.mk b/package/libgeos/libgeos.mk new file mode 100644 index 00000000..a355732a --- /dev/null +++ b/package/libgeos/libgeos.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# libgeos +# +################################################################################ + +LIBGEOS_VERSION = 3.9.0 +LIBGEOS_SITE = http://download.osgeo.org/geos +LIBGEOS_SOURCE = geos-$(LIBGEOS_VERSION).tar.bz2 +LIBGEOS_LICENSE = LGPL-2.1 +LIBGEOS_LICENSE_FILES = COPYING +LIBGEOS_INSTALL_STAGING = YES +LIBGEOS_CONFIG_SCRIPTS = geos-config +LIBGEOS_CONF_OPTS = -DBUILD_BENCHMARKS=OFF + +LIBGEOS_CXXFLAGS = $(TARGET_CXXCFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_68485),y) +LIBGEOS_CXXFLAGS += -O0 +endif + +ifeq ($(BR2_arm)$(BR2_armeb),y) +LIBGEOS_CONF_OPTS += -DDISABLE_GEOS_INLINE=ON +endif + +LIBGEOS_CONF_OPTS += -DCMAKE_CXX_FLAGS="$(LIBGEOS_CXXFLAGS)" + +$(eval $(cmake-package)) diff --git a/package/libgeotiff/Config.in b/package/libgeotiff/Config.in new file mode 100644 index 00000000..7ed296fb --- /dev/null +++ b/package/libgeotiff/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_LIBGEOTIFF + bool "libgeotiff" + depends on BR2_INSTALL_LIBSTDCPP # proj + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 # proj + depends on BR2_TOOLCHAIN_HAS_THREADS # proj + depends on BR2_USE_WCHAR # proj + select BR2_PACKAGE_PROJ + select BR2_PACKAGE_TIFF + help + Libgeotiff is an open source library normally hosted on top of + libtiff for reading, and writing GeoTIFF information tags. + + https://github.com/OSGeo/libgeotiff + +comment "libgeotiff needs a toolchain w/ C++, gcc >= 4.7, threads, wchar" + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 || \ + !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR diff --git a/package/libgeotiff/libgeotiff.hash b/package/libgeotiff/libgeotiff.hash new file mode 100644 index 00000000..51adcc28 --- /dev/null +++ b/package/libgeotiff/libgeotiff.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 9311017e5284cffb86f2c7b7a9df1fb5ebcdc61c30468fb2e6bca36e4272ebca libgeotiff-1.6.0.tar.gz +sha256 6a22340b8293c50a34ce8e95589489bd3ec65bcb8b93e61cbda3daaafe498375 LICENSE diff --git a/package/libgeotiff/libgeotiff.mk b/package/libgeotiff/libgeotiff.mk new file mode 100644 index 00000000..c6fb61b4 --- /dev/null +++ b/package/libgeotiff/libgeotiff.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# libgeotiff +# +################################################################################ + +LIBGEOTIFF_VERSION = 1.6.0 +LIBGEOTIFF_SITE = http://download.osgeo.org/geotiff/libgeotiff +LIBGEOTIFF_LICENSE = X11-style, public domain +LIBGEOTIFF_LICENSE_FILES = LICENSE +LIBGEOTIFF_DEPENDENCIES = proj tiff host-pkgconf +LIBGEOTIFF_INSTALL_STAGING = YES + +ifeq ($(BR2_PACKAGE_ZLIB),y) +LIBGEOTIFF_DEPENDENCIES += zlib +LIBGEOTIFF_CONF_OPTS += --with-zlib +else +LIBGEOTIFF_CONF_OPTS += --without-zlib +endif + +ifeq ($(BR2_PACKAGE_JPEG),y) +LIBGEOTIFF_DEPENDENCIES += jpeg +LIBGEOTIFF_CONF_OPTS += --with-jpeg +else +LIBGEOTIFF_CONF_OPTS += --without-jpeg +endif + +$(eval $(autotools-package)) diff --git a/package/libgit2/Config.in b/package/libgit2/Config.in new file mode 100644 index 00000000..a6a9728f --- /dev/null +++ b/package/libgit2/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_LIBGIT2 + bool "libgit2" + depends on !BR2_STATIC_LIBS # libhttpparser + select BR2_PACKAGE_LIBHTTPPARSER + select BR2_PACKAGE_ZLIB + help + libgit2 is a portable, pure C implementation of the Git core + methods provided as a linkable library with a solid API, + allowing to build Git functionality into your application. + + https://github.com/libgit2/libgit2 + +comment "libgit2 needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/libgit2/libgit2.hash b/package/libgit2/libgit2.hash new file mode 100644 index 00000000..367ade3a --- /dev/null +++ b/package/libgit2/libgit2.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 ad73f845965cfd528e70f654e428073121a3fa0dc23caac81a1b1300277d4dba libgit2-1.1.0.tar.gz +sha256 afc8bde99ba630012107c25d3c42dde628ec5f0cd3f428131f7e3a0f7d58ff42 COPYING diff --git a/package/libgit2/libgit2.mk b/package/libgit2/libgit2.mk new file mode 100644 index 00000000..e5d17fa3 --- /dev/null +++ b/package/libgit2/libgit2.mk @@ -0,0 +1,47 @@ +################################################################################ +# +# libgit2 +# +################################################################################ + +LIBGIT2_VERSION = 1.1.0 +LIBGIT2_SITE = https://github.com/libgit2/libgit2/releases/download/v$(LIBGIT2_VERSION) +LIBGIT2_LICENSE = GPL-2.0 with linking exception, MIT (sha1), wildmatch license (wildmatch) +LIBGIT2_LICENSE_FILES = COPYING +LIBGIT2_CPE_ID_VENDOR = libgit2_project +LIBGIT2_INSTALL_STAGING = YES + +LIBGIT2_CONF_OPTS = \ + -DUSE_GSSAPI=OFF \ + -DBUILD_CLAR=OFF \ + -DUSE_ICONV=ON \ + -DREGEX_BACKEND=regcomp \ + -DUSE_HTTP_PARSER=system \ + -DTHREADSAFE=$(if $(BR2_TOOLCHAIN_HAS_THREADS),ON,OFF) + +LIBGIT2_DEPENDENCIES = zlib libhttpparser + +# If libiconv is available (for !locale toolchains), then we can use +# it for iconv support. Note that USE_ICONV=ON is still correct even +# without libiconv because (1) most toolchain have iconv support +# without libiconv and (2) even if USE_ICONV=ON but iconv support is +# not available, libgit2 simply avoids using iconv. +ifeq ($(BR2_PACKAGE_LIBICONV),y) +LIBGIT2_DEPENDENCIES += libiconv +endif + +ifeq ($(BR2_PACKAGE_LIBSSH2),y) +LIBGIT2_DEPENDENCIES += libssh2 +LIBGIT2_CONF_OPTS += -DUSE_SSH=ON +else +LIBGIT2_CONF_OPTS += -DUSE_SSH=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +LIBGIT2_DEPENDENCIES += openssl +LIBGIT2_CONF_OPTS += -DUSE_HTTPS=OpenSSL +else +LIBGIT2_CONF_OPTS += -DUSE_HTTPS=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/libglade/Config.in b/package/libglade/Config.in new file mode 100644 index 00000000..e269a075 --- /dev/null +++ b/package/libglade/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_LIBGLADE + bool "libglade" + depends on BR2_PACKAGE_LIBGTK2 + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_ATK + select BR2_PACKAGE_LIBXML2 + help + Libglade allows you to load glade interface files in a program + at runtime. It doesn't require GLADE to be used, but GLADE is + by far the easiest way to create the interface files. + + http://ftp.gnome.org/pub/GNOME/sources/libglade/ + +comment "libglade needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_LIBGTK2 + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libglade/libglade.hash b/package/libglade/libglade.hash new file mode 100644 index 00000000..b96c5814 --- /dev/null +++ b/package/libglade/libglade.hash @@ -0,0 +1,5 @@ +# From http://ftp.gnome.org/pub/GNOME/sources/libglade/2.6/libglade-2.6.4.sha256sum +sha256 64361e7647839d36ed8336d992fd210d3e8139882269bed47dc4674980165dec libglade-2.6.4.tar.bz2 + +# Hash for license file: +sha256 94b03f1a60a7fd5007149530626a895a6ef5a8b9342abfd56860c5f3956f5d23 COPYING diff --git a/package/libglade/libglade.mk b/package/libglade/libglade.mk new file mode 100644 index 00000000..32fa595f --- /dev/null +++ b/package/libglade/libglade.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# libglade +# +################################################################################ + +LIBGLADE_VERSION_MAJOR = 2.6 +LIBGLADE_VERSION = $(LIBGLADE_VERSION_MAJOR).4 +LIBGLADE_SOURCE = libglade-$(LIBGLADE_VERSION).tar.bz2 +LIBGLADE_SITE = http://ftp.gnome.org/pub/GNOME/sources/libglade/$(LIBGLADE_VERSION_MAJOR) +LIBGLADE_INSTALL_STAGING = YES +LIBGLADE_DEPENDENCIES = host-pkgconf libglib2 libgtk2 atk libxml2 +LIBGLADE_LICENSE = LGPL-2.0+ +LIBGLADE_LICENSE_FILES = COPYING + +define LIBGLADE_INSTALL_FIX + rm -rf $(TARGET_DIR)/usr/share/xml/libglade \ + $(TARGET_DIR)/usr/bin/libglade-convert +endef + +LIBGLADE_POST_INSTALL_TARGET_HOOKS += LIBGLADE_INSTALL_FIX + +$(eval $(autotools-package)) diff --git a/package/libglew/Config.in b/package/libglew/Config.in new file mode 100644 index 00000000..1d28c018 --- /dev/null +++ b/package/libglew/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_LIBGLEW + bool "libglew" + depends on BR2_PACKAGE_XORG7 + depends on BR2_PACKAGE_HAS_LIBGL + select BR2_PACKAGE_XLIB_LIBX11 + select BR2_PACKAGE_XLIB_LIBXEXT + select BR2_PACKAGE_XLIB_LIBXI + select BR2_PACKAGE_XLIB_LIBXMU + help + The OpenGL Extension Wrangler Library (GLEW) is a + cross-platform C/C++ extension loading library. GLEW provides + efficient run-time mechanisms for determining which OpenGL + extensions are supported on the target platform. OpenGL core + and extension functionality is exposed in a single header + file. + + https://github.com/nigels-com/glew + +comment "libglew depends on X.org and needs an OpenGL backend" + depends on !BR2_PACKAGE_XORG7 || !BR2_PACKAGE_HAS_LIBGL diff --git a/package/libglew/libglew.hash b/package/libglew/libglew.hash new file mode 100644 index 00000000..29e63fa3 --- /dev/null +++ b/package/libglew/libglew.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 d4fc82893cfb00109578d0a1a2337fb8ca335b3ceccf97b97e5cc7f08e4353e1 glew-2.2.0.tgz +sha256 8991cd11befec7c6a63662700f03c0cc42e864b6e77c7e70b80297c951a7f0ff LICENSE.txt diff --git a/package/libglew/libglew.mk b/package/libglew/libglew.mk new file mode 100644 index 00000000..c9c49e69 --- /dev/null +++ b/package/libglew/libglew.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# libglew +# +################################################################################ + +LIBGLEW_VERSION = 2.2.0 +LIBGLEW_SOURCE = glew-$(LIBGLEW_VERSION).tgz +LIBGLEW_SITE = https://github.com/nigels-com/glew/releases/download/glew-$(LIBGLEW_VERSION) +LIBGLEW_LICENSE = BSD-3-Clause, MIT +LIBGLEW_LICENSE_FILES = LICENSE.txt +LIBGLEW_INSTALL_STAGING = YES +LIBGLEW_DEPENDENCIES = libgl xlib_libX11 xlib_libXext xlib_libXi xlib_libXmu + +# using $TARGET_CONFIGURE_OPTS breaks compilation +define LIBGLEW_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + GLEW_NO_GLU="-DGLEW_NO_GLU" \ + GLEW_DEST="/usr" LIBDIR="/usr/lib" \ + AR="$(TARGET_AR)" CC="$(TARGET_CC)" \ + LD="$(TARGET_CC)" STRIP="$(TARGET_STRIP)" \ + POPT="$(TARGET_CFLAGS)" LDFLAGS.EXTRA="$(TARGET_LDFLAGS)" +endef + +define LIBGLEW_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + GLEW_NO_GLU="-DGLEW_NO_GLU" \ + GLEW_DEST="$(STAGING_DIR)/usr" LIBDIR="$(STAGING_DIR)/usr/lib" \ + $(TARGET_CONFIGURE_OPTS) install +endef + +define LIBGLEW_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + GLEW_NO_GLU="-DGLEW_NO_GLU" \ + GLEW_DEST="$(TARGET_DIR)/usr" LIBDIR="$(TARGET_DIR)/usr/lib" \ + $(TARGET_CONFIGURE_OPTS) install +endef + +$(eval $(generic-package)) diff --git a/package/libglfw/Config.in b/package/libglfw/Config.in new file mode 100644 index 00000000..06f43764 --- /dev/null +++ b/package/libglfw/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_LIBGLFW + bool "libglfw" + depends on BR2_PACKAGE_XORG7 + depends on BR2_PACKAGE_HAS_LIBGL + select BR2_PACKAGE_XLIB_LIBXCURSOR + select BR2_PACKAGE_XLIB_LIBXEXT + select BR2_PACKAGE_XLIB_LIBXI + select BR2_PACKAGE_XLIB_LIBXINERAMA + select BR2_PACKAGE_XLIB_LIBXRANDR + help + GLFW is an Open Source, multi-platform library for creating + windows with OpenGL contexts and receiving input and events. + + http://www.glfw.org + +comment "libglfw depends on X.org and needs an OpenGL backend" + depends on !BR2_PACKAGE_XORG7 || !BR2_PACKAGE_HAS_LIBGL diff --git a/package/libglfw/libglfw.hash b/package/libglfw/libglfw.hash new file mode 100644 index 00000000..c21a595b --- /dev/null +++ b/package/libglfw/libglfw.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 98768e12e615fbe9f3386f5bbfeb91b5a3b45a8c4c77159cef06b1f6ff749537 libglfw-3.3.2.tar.gz +sha256 149704059b5d0bf551637e50042dd4de9c2cae921021f6636298911e3a5f9462 LICENSE.md diff --git a/package/libglfw/libglfw.mk b/package/libglfw/libglfw.mk new file mode 100644 index 00000000..63d2a88b --- /dev/null +++ b/package/libglfw/libglfw.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# libglfw +# +################################################################################ + +LIBGLFW_VERSION = 3.3.2 +LIBGLFW_SITE = $(call github,glfw,glfw,$(LIBGLFW_VERSION)) +LIBGLFW_INSTALL_STAGING = YES +LIBGLFW_DEPENDENCIES = libgl xlib_libXcursor xlib_libXext \ + xlib_libXi xlib_libXinerama xlib_libXrandr +LIBGLFW_LICENSE = Zlib +LIBGLFW_LICENSE_FILES = LICENSE.md + +LIBGLFW_CONF_OPTS += \ + -DGLFW_BUILD_EXAMPLES=OFF \ + -DGLFW_BUILD_TESTS=OFF \ + -DGLFW_BUILD_DOCS=OFF + +ifeq ($(BR2_PACKAGE_XLIB_LIBXXF86VM),y) +LIBGLFW_DEPENDENCIES += xlib_libXxf86vm +endif + +$(eval $(cmake-package)) diff --git a/package/libglib2/0001-fix-compile-time-atomic-detection.patch b/package/libglib2/0001-fix-compile-time-atomic-detection.patch new file mode 100644 index 00000000..d84a1ab4 --- /dev/null +++ b/package/libglib2/0001-fix-compile-time-atomic-detection.patch @@ -0,0 +1,32 @@ +From d5c628a6179b99705fa05ab87437321b132c81bc Mon Sep 17 00:00:00 2001 +From: Brendan Heading +Date: Wed, 21 Jun 2017 16:36:15 -0400 +Subject: [PATCH] Fix compile time atomic detection + +Improved compile-time detection of atomic support in the compiler. + +Upstream-Status: 'Needs information' +See : https://gitlab.gnome.org/GNOME/glib/issues/1063 + +Signed-off-by: Brendan Heading +Signed-off-by: Adam Duskett +--- + glib/gthread-posix.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/glib/gthread-posix.c b/glib/gthread-posix.c +index 71a6b7b..d09d029 100644 +--- a/glib/gthread-posix.c ++++ b/glib/gthread-posix.c +@@ -73,7 +73,7 @@ + #endif + + /* clang defines __ATOMIC_SEQ_CST but doesn't support the GCC extension */ +-#if defined(HAVE_FUTEX) && defined(__ATOMIC_SEQ_CST) && !defined(__clang__) ++#if defined(HAVE_FUTEX) && defined(__ATOMIC_SEQ_CST) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) && !defined(__clang__) + #define USE_NATIVE_MUTEX + #endif + +-- +2.9.4 + diff --git a/package/libglib2/0002-allow-explicit-disabling-of-tests.patch b/package/libglib2/0002-allow-explicit-disabling-of-tests.patch new file mode 100644 index 00000000..c865c04e --- /dev/null +++ b/package/libglib2/0002-allow-explicit-disabling-of-tests.patch @@ -0,0 +1,37 @@ +From cdccbc6ec36243463613cb32d7058c26c3c51e16 Mon Sep 17 00:00:00 2001 +From: Adam Duskett +Date: Wed, 18 Sep 2019 09:50:00 -0700 +Subject: [PATCH] allow explicit disabling of tests + +Upstream won't build tests when cross-compiling. However; this means still +building the tests during a host build. Building the tests causes build +failures on older distributions such as CentOS 6 and Debian 7 because the +command `objcopy --add-symbol` is used when building the test +"test_resources2," which is not available with the older version of objcopy +provided by the distributions. + +Instead, remove the conditional checks which set build_tests and only check if +installed_tests_enabled is passed. + +Signed-off-by: Adam Duskett +Refresh for 2.62.2 +--- + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/meson.build b/meson.build +index 99806d0..3206603 100644 +--- a/meson.build ++++ b/meson.build +@@ -84,7 +84,7 @@ installed_tests_template = files('template.test.in') + installed_tests_template_tap = files('template-tap.test.in') + + # Don’t build the tests unless we can run them (either natively, in an exe wrapper, or by installing them for later use) +-build_tests = not meson.is_cross_build() or (meson.is_cross_build() and meson.has_exe_wrapper()) or installed_tests_enabled ++build_tests = installed_tests_enabled + + add_project_arguments('-D_GNU_SOURCE', language: 'c') + +-- +2.23.0 + diff --git a/package/libglib2/0003-remove-cpp-requirement.patch b/package/libglib2/0003-remove-cpp-requirement.patch new file mode 100644 index 00000000..11978e97 --- /dev/null +++ b/package/libglib2/0003-remove-cpp-requirement.patch @@ -0,0 +1,96 @@ +From 2f168951df1feebeac549ada1ea44ea092484c54 Mon Sep 17 00:00:00 2001 +From: Adam Duskett +Date: Mon, 16 Sep 2019 10:12:38 -0700 +Subject: [PATCH] remove cpp requirement + +The c++ test is necessary to ensure libglib doesn't accidentally use C++ +reserved keywords in public headers. Because this is just a test, it isn't +necessary to have a C++ compiler to build libglib2. + +Signed-off-by: Adam Duskett +Upstream status: Denied (Buildroot specific) +https://gitlab.gnome.org/GNOME/glib/issues/1748 +--- + glib/glibconfig.h.in | 1 - + meson.build | 18 +----------------- + tests/meson.build | 5 ----- + 3 files changed, 1 insertion(+), 23 deletions(-) + +diff --git a/glib/glibconfig.h.in b/glib/glibconfig.h.in +index 7ef8c48..128e65d 100644 +--- a/glib/glibconfig.h.in ++++ b/glib/glibconfig.h.in +@@ -117,7 +117,6 @@ typedef unsigned @glib_intptr_type_define@ guintptr; + @glib_vacopy@ + + @g_have_iso_c_varargs@ +-@g_have_iso_cxx_varargs@ + + /* gcc-2.95.x supports both gnu style and ISO varargs, but if -ansi + * is passed ISO vararg support is turned off, and there is no work +diff --git a/meson.build b/meson.build +index 4bbf4c2..ac59f4e 100644 +--- a/meson.build ++++ b/meson.build +@@ -1,4 +1,4 @@ +-project('glib', 'c', 'cpp', ++project('glib', 'c', + version : '2.66.8', + # NOTE: We keep this pinned at 0.49 because that's what Debian 10 ships + meson_version : '>= 0.49.2', +@@ -10,7 +10,6 @@ project('glib', 'c', 'cpp', + ) + + cc = meson.get_compiler('c') +-cxx = meson.get_compiler('cpp') + + cc_can_run = not meson.is_cross_build() or meson.has_exe_wrapper() + +@@ -1548,20 +1547,6 @@ if g_have_iso_c_varargs + #endif''') + endif + +-g_have_iso_cxx_varargs = cxx.compiles(''' +- void some_func (void) { +- int a(int p1, int p2, int p3); +- #define call_a(...) a(1,__VA_ARGS__) +- call_a(2,3); +- }''', name : 'ISO C99 varargs macros in C++') +- +-if g_have_iso_cxx_varargs +- glibconfig_conf.set('g_have_iso_cxx_varargs', ''' +-#ifdef __cplusplus +-# define G_HAVE_ISO_VARARGS 1 +-#endif''') +-endif +- + g_have_gnuc_varargs = cc.compiles(''' + void some_func (void) { + int a(int p1, int p2, int p3); +@@ -2167,7 +2152,6 @@ subdir('gobject') + subdir('gthread') + subdir('gmodule') + subdir('gio') +-subdir('fuzzing') + if build_tests + subdir('tests') + endif +diff --git a/tests/meson.build b/tests/meson.build +index e4ea226..7fd974c 100644 +--- a/tests/meson.build ++++ b/tests/meson.build +@@ -55,11 +55,6 @@ tests = { + 'source': 'module-test.c', + 'c_args': ['-DMODULE_TYPE="plugin"'], + }, +- 'cxx-test' : { +- 'source' : 'cxx-test.cpp', +- 'include_directories' : gmoduleinc, +- 'dependencies' : [libgio_dep], +- }, + } + + test_extra_programs = { +-- +2.23.0 + diff --git a/package/libglib2/0004-Add-Wno-format-nonliteral-to-compiler-arguments.patch b/package/libglib2/0004-Add-Wno-format-nonliteral-to-compiler-arguments.patch new file mode 100644 index 00000000..f792ceba --- /dev/null +++ b/package/libglib2/0004-Add-Wno-format-nonliteral-to-compiler-arguments.patch @@ -0,0 +1,28 @@ +From 9e0f11a4981737f98bac93a22b6f2ff1a3887b63 Mon Sep 17 00:00:00 2001 +From: Adam Duskett +Date: Tue, 9 Apr 2019 13:03:51 -0400 +Subject: [PATCH] Add '-Wno-format-nonliteral' to compiler arguments. + +This warning is a false positive on older versions of gcc. +See https://gitlab.gnome.org/GNOME/glib/issues/1744 for more details. + +Signed-off-by: Adam Duskett +--- + meson.build | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/meson.build b/meson.build +index 3c615b7..7cae4e8 100644 +--- a/meson.build ++++ b/meson.build +@@ -372,6 +372,7 @@ if cc.get_id() == 'gcc' or cc.get_id() == 'clang' + '-Wno-cast-function-type', ++ '-Wno-format-nonliteral', + # Due to function casts through (void*) we cannot support -Wpedantic: + # https://wiki.gnome.org/Projects/GLib/CompilerRequirements#Function_pointer_conversions. + '-Wno-pedantic', + '-Werror=declaration-after-statement', + '-Werror=format=2', +-- +2.20.1 + diff --git a/package/libglib2/Config.in b/package/libglib2/Config.in new file mode 100644 index 00000000..31f3649c --- /dev/null +++ b/package/libglib2/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_LIBGLIB2 + bool "libglib2" + depends on BR2_USE_WCHAR # gettext + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + select BR2_PACKAGE_LIBFFI + select BR2_PACKAGE_PCRE + select BR2_PACKAGE_PCRE_UCP + select BR2_PACKAGE_ZLIB + help + Low-level core library that forms the basis of GTK+ and GNOME. + + http://www.gtk.org/ + +comment "libglib2 needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libglib2/libglib2.hash b/package/libglib2/libglib2.hash new file mode 100644 index 00000000..4f69f1cc --- /dev/null +++ b/package/libglib2/libglib2.hash @@ -0,0 +1,4 @@ +# https://download.gnome.org/sources/glib/2.66/glib-2.66.8.sha256sum +sha256 97bc87dd91365589af5cbbfea2574833aea7a1b71840fd365ecd2852c76b9c8b glib-2.66.8.tar.xz +# License files, locally calculated +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/libglib2/libglib2.mk b/package/libglib2/libglib2.mk new file mode 100644 index 00000000..9ce40d91 --- /dev/null +++ b/package/libglib2/libglib2.mk @@ -0,0 +1,144 @@ +################################################################################ +# +# libglib2 +# +################################################################################ + +LIBGLIB2_VERSION_MAJOR = 2.66 +LIBGLIB2_VERSION = $(LIBGLIB2_VERSION_MAJOR).8 +LIBGLIB2_SOURCE = glib-$(LIBGLIB2_VERSION).tar.xz +LIBGLIB2_SITE = http://ftp.gnome.org/pub/gnome/sources/glib/$(LIBGLIB2_VERSION_MAJOR) +LIBGLIB2_LICENSE = LGPL-2.1+ +LIBGLIB2_LICENSE_FILES = COPYING +LIBGLIB2_CPE_ID_VENDOR = gnome +LIBGLIB2_CPE_ID_PRODUCT = glib +LIBGLIB2_INSTALL_STAGING = YES + +LIBGLIB2_CFLAGS = $(TARGET_CFLAGS) +LIBGLIB2_LDFLAGS = $(TARGET_LDFLAGS) $(TARGET_NLS_LIBS) + +# glib/valgrind.h contains inline asm not compatible with thumb1 +ifeq ($(BR2_ARM_INSTRUCTIONS_THUMB),y) +LIBGLIB2_CFLAGS += -marm +endif + +HOST_LIBGLIB2_CONF_OPTS = \ + -Ddtrace=false \ + -Dfam=false \ + -Dselinux=disabled \ + -Dsystemtap=false \ + -Dxattr=false \ + -Dinternal_pcre=false \ + -Dinstalled_tests=false \ + -Doss_fuzz=disabled + +LIBGLIB2_DEPENDENCIES = \ + host-pkgconf host-libglib2 \ + libffi pcre zlib $(TARGET_NLS_DEPENDENCIES) + +HOST_LIBGLIB2_DEPENDENCIES = \ + host-gettext \ + host-libffi \ + host-pcre \ + host-pkgconf \ + host-util-linux \ + host-zlib + +# We explicitly specify a giomodule-dir to avoid having a value +# containing ${libdir} in gio-2.0.pc. Indeed, a value depending on +# ${libdir} would be prefixed by the sysroot by pkg-config, causing a +# bogus installation path once combined with $(DESTDIR). +LIBGLIB2_CONF_OPTS = \ + -Dinternal_pcre=false \ + -Dgio_module_dir=/usr/lib/gio/modules \ + -Dinstalled_tests=false \ + -Doss_fuzz=disabled + +LIBGLIB2_MESON_EXTRA_PROPERTIES = \ + have_c99_vsnprintf=true \ + have_c99_snprintf=true \ + have_unix98_printf=true + +ifneq ($(BR2_ENABLE_LOCALE),y) +LIBGLIB2_DEPENDENCIES += libiconv +endif + +ifeq ($(BR2_PACKAGE_ELFUTILS),y) +LIBGLIB2_DEPENDENCIES += elfutils +endif + +ifeq ($(BR2_PACKAGE_LIBICONV),y) +LIBGLIB2_CONF_OPTS += -Diconv=external +LIBGLIB2_DEPENDENCIES += libiconv +endif + +ifeq ($(BR2_PACKAGE_LIBSELINUX),y) +LIBGLIB2_CONF_OPTS += -Dselinux=enabled +LIBGLIB2_DEPENDENCIES += libselinux +else +LIBGLIB2_CONF_OPTS += -Dselinux=disabled +endif + +# Purge gdb-related files +ifneq ($(BR2_PACKAGE_GDB),y) +define LIBGLIB2_REMOVE_GDB_FILES + rm -rf $(TARGET_DIR)/usr/share/glib-2.0/gdb +endef +endif + +ifeq ($(BR2_PACKAGE_UTIL_LINUX_LIBMOUNT),y) +LIBGLIB2_CONF_OPTS += -Dlibmount=enabled +ifeq ($(BR2_PACKAGE_UTIL_LINUX_LIBS),y) +LIBGLIB2_DEPENDENCIES += util-linux-libs +else +LIBGLIB2_DEPENDENCIES += util-linux +endif +else +LIBGLIB2_CONF_OPTS += -Dlibmount=disabled +endif + +# Purge useless binaries from target +define LIBGLIB2_REMOVE_DEV_FILES + rm -rf $(TARGET_DIR)/usr/lib/glib-2.0 + rm -rf $(addprefix $(TARGET_DIR)/usr/share/glib-2.0/,codegen gettext) + rm -f $(addprefix $(TARGET_DIR)/usr/bin/,gdbus-codegen glib-compile-schemas glib-compile-resources glib-genmarshal glib-gettextize glib-mkenums gobject-query gtester gtester-report) + $(LIBGLIB2_REMOVE_GDB_FILES) +endef + +LIBGLIB2_POST_INSTALL_TARGET_HOOKS += LIBGLIB2_REMOVE_DEV_FILES + +# Newer versions of libglib2 prefix glib-genmarshal, gobject-query, +# glib-mkenums, glib_compile_schemas, glib_compile_resources and gdbus-codegen +# with ${bindir}. Unfortunately, this will resolve to the host systems /bin/ +# directory, which will cause compilation issues if the host does not have these +# programs. By removing the ${bindir}/ prefix, these programs are resolved in +# PATH instead. +define LIBGLIB2_REMOVE_BINDIR_PREFIX_FROM_PC_FILE + $(SED) 's%$${bindir}/%%g' $(addprefix $(STAGING_DIR)/usr/lib/pkgconfig/, glib-2.0.pc gio-2.0.pc) +endef +LIBGLIB2_POST_INSTALL_TARGET_HOOKS += LIBGLIB2_REMOVE_BINDIR_PREFIX_FROM_PC_FILE + +# Remove schema sources/DTDs, we use staging ones to compile them. +# Do so at target finalization since other packages install additional +# ones and we want to deal with it in a single place. +define LIBGLIB2_REMOVE_TARGET_SCHEMAS + rm -f $(TARGET_DIR)/usr/share/glib-2.0/schemas/*.xml \ + $(TARGET_DIR)/usr/share/glib-2.0/schemas/*.dtd +endef + +# Compile schemas at target finalization since other packages install +# them as well, and better do it in a central place. +# It's used at run time so it doesn't matter defering it. +define LIBGLIB2_COMPILE_SCHEMAS + $(HOST_DIR)/bin/glib-compile-schemas \ + $(STAGING_DIR)/usr/share/glib-2.0/schemas \ + --targetdir=$(TARGET_DIR)/usr/share/glib-2.0/schemas +endef + +LIBGLIB2_TARGET_FINALIZE_HOOKS += LIBGLIB2_REMOVE_TARGET_SCHEMAS +LIBGLIB2_TARGET_FINALIZE_HOOKS += LIBGLIB2_COMPILE_SCHEMAS + +$(eval $(meson-package)) +$(eval $(host-meson-package)) + +LIBGLIB2_HOST_BINARY = $(HOST_DIR)/bin/glib-genmarshal diff --git a/package/libglob/Config.in b/package/libglob/Config.in new file mode 100644 index 00000000..7ae2bfd2 --- /dev/null +++ b/package/libglob/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LIBGLOB + bool "libglob" + help + OpenBSD implementation of glob(3). + + https://github.com/void-linux/libglob diff --git a/package/libglob/libglob.hash b/package/libglob/libglob.hash new file mode 100644 index 00000000..2d905368 --- /dev/null +++ b/package/libglob/libglob.hash @@ -0,0 +1,3 @@ +# Locally calculated: +sha256 4f1b204dad065689941c64828a92441fb316c9c7539b39525fa728125da65e22 libglob-1.0.tar.gz +sha256 4cd4bac6ef90d4a91ee6e52df30f241045fb1a27fb53541ef4a9f8e47e6103ca LICENSE diff --git a/package/libglob/libglob.mk b/package/libglob/libglob.mk new file mode 100644 index 00000000..90356b39 --- /dev/null +++ b/package/libglob/libglob.mk @@ -0,0 +1,48 @@ +################################################################################ +# +# libglob +# +################################################################################ + +LIBGLOB_VERSION = 1.0 +LIBGLOB_SITE = $(call github,voidlinux,libglob,$(LIBGLOB_VERSION)) +LIBGLOB_LICENSE = BSD-3-Clause +LIBGLOB_LICENSE_FILES = LICENSE +LIBGLOB_INSTALL_STAGING = YES + +ifeq ($(BR2_SHARED_LIBS)$(BR2_SHARED_STATIC_LIBS),y) +LIBGLOB_MAKE_TARGETS += libglob.so +# $1: destination directory +define LIBGLOB_INSTALL_SHARED + $(INSTALL) -m 0755 -D $(@D)/libglob.so.0.0.0 \ + $(1)/usr/lib/libglob.so.0.0.0 + ln -sf libglob.so.0.0.0 $(1)/usr/lib/libglob.so.0 + ln -sf libglob.so.0.0.0 $(1)/usr/lib/libglob.so +endef +endif + +ifeq ($(BR2_STATIC_LIBS)$(BR2_SHARED_STATIC_LIBS),y) +LIBGLOB_MAKE_TARGETS += libglob.a +# $1: destination directory +define LIBGLOB_INSTALL_STATIC + $(INSTALL) -m 0644 -D $(@D)/libglob.a $(1)/usr/lib/libglob.a +endef +endif + +define LIBGLOB_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + $(LIBGLOB_MAKE_TARGETS) +endef + +define LIBGLOB_INSTALL_STAGING_CMDS + $(INSTALL) -m 0644 -D $(@D)/glob.h \ + $(STAGING_DIR)/usr/include/libglob/glob.h + $(call LIBGLOB_INSTALL_SHARED,$(STAGING_DIR)) + $(call LIBGLOB_INSTALL_STATIC,$(STAGING_DIR)) +endef + +define LIBGLOB_INSTALL_TARGET_CMDS + $(call LIBGLOB_INSTALL_SHARED,$(TARGET_DIR)) +endef + +$(eval $(generic-package)) diff --git a/package/libglu/Config.in b/package/libglu/Config.in new file mode 100644 index 00000000..de8e1efb --- /dev/null +++ b/package/libglu/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LIBGLU + bool "libglu" + depends on BR2_PACKAGE_HAS_LIBGL + help + Mesa OpenGL Utility library + + http://cgit.freedesktop.org/mesa/glu/ + +comment "libglu needs an OpenGL backend" + depends on !BR2_PACKAGE_HAS_LIBGL diff --git a/package/libglu/libglu.hash b/package/libglu/libglu.hash new file mode 100644 index 00000000..b0202a13 --- /dev/null +++ b/package/libglu/libglu.hash @@ -0,0 +1,7 @@ +# From https://lists.freedesktop.org/archives/mesa-announce/2019-July/000530.html +md5 151aef599b8259efe9acd599c96ea2a3 glu-9.0.1.tar.xz +sha1 b6ffef562ba55d3f80146d4238589cb9b1de66f5 glu-9.0.1.tar.xz +sha256 fb5a4c2dd6ba6d1c21ab7c05129b0769544e1d68e1e3b0ffecb18e73c93055bc glu-9.0.1.tar.xz +sha512 8a6dae5b4bd63efb96d15f23ccda4ad9c2ffaa964897e5fa63d1e58360d8d4e6732c5efd2109dba04155d5fc457ab1718a65cf9b544ce0d452679ba988d04018 glu-9.0.1.tar.xz +# locally computed +sha256 84187ce0fd0153769675cb7f3301583eb27393f66b57c5604999a1d805a9184c include/GL/glu.h diff --git a/package/libglu/libglu.mk b/package/libglu/libglu.mk new file mode 100644 index 00000000..e18c7f14 --- /dev/null +++ b/package/libglu/libglu.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# libglu +# +################################################################################ + +LIBGLU_VERSION = 9.0.1 +LIBGLU_SITE = https://mesa.freedesktop.org/archive/glu +LIBGLU_SOURCE = glu-$(LIBGLU_VERSION).tar.xz +LIBGLU_LICENSE = SGI-B-2.0 +LIBGLU_LICENSE_FILES = include/GL/glu.h +LIBGLU_INSTALL_STAGING = YES +LIBGLU_DEPENDENCIES = libgl host-pkgconf + +$(eval $(autotools-package)) diff --git a/package/libgo_la/Config.in b/package/libgo_la/Config.in new file mode 100644 index 00000000..48fce9a2 --- /dev/null +++ b/package/libgo_la/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LIBGO_LA + bool "loongarch libgo temp version" + help + this libgo version not use thrid-party boost context + just add loongarch asm about jump make context code + diff --git a/package/libgo_la/libgo_la.mk b/package/libgo_la/libgo_la.mk new file mode 100644 index 00000000..d5410fa1 --- /dev/null +++ b/package/libgo_la/libgo_la.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# libgo_la +# +################################################################################ + +LIBGO_LA_SITE = $(TOPDIR)/package/libgo_la/libgo_la.tar.gz +LIBGO_LA_SITE_METHOD = file +LIBGO_LA_INSTALL_STAGING = YES +LIBGO_LA_INSTALL_TARGET = YES +LIBGO_LA_CONF_OPTS = -DBUILD_DYNAMIC=1 + +define LIBGO_LA_EXTRACT_CMDS + echo $(LIBGO_LA_SITE) + tar -zxf $(LIBGO_LA_SITE) -C $(@D)/ +endef + +$(eval $(cmake-package)) diff --git a/package/libgo_la/libgo_la.tar.gz b/package/libgo_la/libgo_la.tar.gz new file mode 100644 index 00000000..b8d53238 Binary files /dev/null and b/package/libgo_la/libgo_la.tar.gz differ diff --git a/package/libgpg-error/0001-configure.ac-fix-build-without-threads.patch b/package/libgpg-error/0001-configure.ac-fix-build-without-threads.patch new file mode 100644 index 00000000..5f5147e0 --- /dev/null +++ b/package/libgpg-error/0001-configure.ac-fix-build-without-threads.patch @@ -0,0 +1,54 @@ +From 77c89f62f106d88ef2b5963f4a13755c337c793d Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 15 Feb 2021 07:56:29 +0100 +Subject: [PATCH] configure.ac: fix build without threads + +Cross-compilation of libgpg-error fails on toolchain without threads +since commit 988211d3d4c1f3d5cfa6b460210f65ab636763b5, +9ee011259f819a3cf50fe7019fa4366dbc437e0e and +50e62b36ea01ed25d12c443088b85d4f41a2b3e1 + +Indeed, since that time, libgpg-error assumes that pthread.h is always +available resulting in the following error at configure time: + +checking for arm-unknown-linux-gnueabi-objdump... (cached) /tmp/instance-1/output-1/host/bin/arm-linux-objdump +conftest.c:1:10: fatal error: pthread.h: No such file or directory + 1 | #include + | ^~~~~~~~~~~ +compilation terminated. +configure: generated src/lock-obj-pub.native.h using arm-unknown-linux-gnueabi-objdump and gawk +checking whether to enable log_clock... no + +This error will in turn results in a build failure because +"Can't determine mutex size" is echoed by gen-lock-obj.sh: + +In file included from strsource-sym.c:27: +./gpg-error.h:1115:4: warning: missing terminating ' character + 1115 | Can't determine mutex size + | ^ + +Full build log: +http://autobuild.buildroot.org/results/334/3344c96e5627a9327b0eabe0b27f34490bbabc0d/build-end.log + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://dev.gnupg.org/T5296] +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index b9a2a3e..15d9fdc 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -599,7 +599,7 @@ if test x$cross_compiling = xyes; then + case $host in + *-*-linux*) + AC_CHECK_TOOL(OBJDUMP, [objdump]) +- if test -n "$OBJDUMP"; then ++ if test -n "$OBJDUMP" -a x"$gl_use_threads" != xno; then + lock_obj_h_generated=yes + if test ! -d src; then mkdir src; fi + LOCK_ABI_VERSION=1 host=$host host_alias=$host_alias \ +-- +2.30.0 + diff --git a/package/libgpg-error/Config.in b/package/libgpg-error/Config.in new file mode 100644 index 00000000..c29c0101 --- /dev/null +++ b/package/libgpg-error/Config.in @@ -0,0 +1,57 @@ +config BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS + bool + # see src/syscfg/ + default y if \ + BR2_aarch64 || BR2_aarch64_eb || BR2_arm || \ + BR2_armeb || BR2_i386 || BR2_mips || \ + BR2_mipsel || BR2_mips64 || BR2_mips64el || \ + BR2_m68k || BR2_nios2 || BR2_powerpc || \ + BR2_powerpc64 || BR2_powerpc64le || BR2_RISCV_64 || \ + BR2_RISCV_32 || BR2_s390x || BR2_sh4 || \ + BR2_sh4eb || BR2_sh4a || BR2_sh4aeb || \ + BR2_sparc || BR2_sparc64 || BR2_x86_64 || \ + BR2_loongarch64 + +config BR2_PACKAGE_LIBGPG_ERROR + bool "libgpg-error" + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS + help + Libgpg-error is a small library with error codes and + descriptions shared by most GnuPG related software. + + https://www.gnupg.org/related_software/libgpg-error + +config BR2_PACKAGE_LIBGPG_ERROR_SYSCFG + string + default "aarch64-unknown-linux-gnu" \ + if BR2_aarch64 || BR2_aarch64_eb + default "arm-unknown-linux-gnueabi" \ + if BR2_arm || BR2_armeb + default "i686-pc-linux-gnu" \ + if BR2_i386 + default "mips-unknown-linux-gnu" \ + if BR2_mips || BR2_mipsel + default "mips64el-unknown-linux-gnuabi64" \ + if BR2_mips64 || BR2_mips64el + default "m68k-unknown-linux-gnu" \ + if BR2_m68k + default "nios2-unknown-linux-gnu" \ + if BR2_nios2 + default "powerpc-unknown-linux-gnu" \ + if BR2_powerpc + default "powerpc64-unknown-linux-gnu" \ + if BR2_powerpc64 || BR2_powerpc64le + default "riscv32-unknown-linux-gnu" \ + if BR2_RISCV_32 + default "riscv64-unknown-linux-gnu" \ + if BR2_RISCV_64 + default "s390x-unknown-linux-gnu" \ + if BR2_s390x + default "sh4-unknown-linux-gnu" \ + if BR2_sh4 || BR2_sh4eb || BR2_sh4a || BR2_sh4aeb + default "sparc-unknown-linux-gnu" \ + if BR2_sparc + default "sparc64-unknown-linux-gnu" \ + if BR2_sparc64 + default "x86_64-unknown-linux-gnu" \ + if BR2_x86_64 diff --git a/package/libgpg-error/libgpg-error.hash b/package/libgpg-error/libgpg-error.hash new file mode 100644 index 00000000..315c0965 --- /dev/null +++ b/package/libgpg-error/libgpg-error.hash @@ -0,0 +1,10 @@ +# From https://www.gnupg.org/download/integrity_check.html +sha1 66d6270511a48bac0bf347330e7a12c62f3a1ab4 libgpg-error-1.41.tar.bz2 + +# Locally calculated after checking pgp signature +# https://gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.41.tar.bz2.sig +# using key D8692123C4065DEA5E0F3AB5249B39D24F25E3B6 +sha256 64b078b45ac3c3003d7e352a5e05318880a5778c42331ce1ef33d1a0d9922742 libgpg-error-1.41.tar.bz2 +# Locally calculated +sha256 231f7edcc7352d7734a96eef0b8030f77982678c516876fcb81e25b32d68564c COPYING +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 COPYING.LIB diff --git a/package/libgpg-error/libgpg-error.mk b/package/libgpg-error/libgpg-error.mk new file mode 100644 index 00000000..82fe8b86 --- /dev/null +++ b/package/libgpg-error/libgpg-error.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# libgpg-error +# +################################################################################ + +LIBGPG_ERROR_VERSION = 1.41 +LIBGPG_ERROR_SITE = https://www.gnupg.org/ftp/gcrypt/libgpg-error +LIBGPG_ERROR_SOURCE = libgpg-error-$(LIBGPG_ERROR_VERSION).tar.bz2 +LIBGPG_ERROR_LICENSE = GPL-2.0+, LGPL-2.1+ +LIBGPG_ERROR_LICENSE_FILES = COPYING COPYING.LIB +LIBGPG_ERROR_CPE_ID_VENDOR = gnupg +LIBGPG_ERROR_INSTALL_STAGING = YES +LIBGPG_ERROR_CONFIG_SCRIPTS = gpg-error-config +LIBGPG_ERROR_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) +LIBGPG_ERROR_CONF_OPTS = --disable-tests + +# We're patching configure.ac +LIBGPG_ERROR_AUTORECONF= YES + +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +LIBGPG_ERROR_CONF_OPTS += --enable-threads +else +LIBGPG_ERROR_CONF_OPTS += --disable-threads +endif + +$(eval $(autotools-package)) diff --git a/package/libgpgme/Config.in b/package/libgpgme/Config.in new file mode 100644 index 00000000..4aabd063 --- /dev/null +++ b/package/libgpgme/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_LIBGPGME + bool "libgpgme" + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgpg-error + depends on BR2_USE_MMU # libassuan + #gnupg is not needed to build, but at runtime. + select BR2_PACKAGE_GNUPG if !BR2_PACKAGE_GNUPG2 + select BR2_PACKAGE_LIBGPG_ERROR + select BR2_PACKAGE_LIBASSUAN + help + GnuPG Made Easy (GPGME) is a library designed to make access + to GnuPG easier for applications. + + http://www.gnupg.org/related_software/gpgme/ diff --git a/package/libgpgme/libgpgme.hash b/package/libgpgme/libgpgme.hash new file mode 100644 index 00000000..35767a27 --- /dev/null +++ b/package/libgpgme/libgpgme.hash @@ -0,0 +1,6 @@ +# Locally calculated after checking pgp signature +# https://gnupg.org/ftp/gcrypt/gpgme/gpgme-1.15.1.tar.bz2.sig +# using key D8692123C4065DEA5E0F3AB5249B39D24F25E3B6 +sha256 eebc3c1b27f1c8979896ff361ba9bb4778b508b2496c2fc10e3775a40b1de1ad gpgme-1.15.1.tar.bz2 +# Locally calculated +sha256 ca0061fc1381a3ab242310e4b3f56389f28e3d460eb2fd822ed7a21c6f030532 COPYING.LESSER diff --git a/package/libgpgme/libgpgme.mk b/package/libgpgme/libgpgme.mk new file mode 100644 index 00000000..95a41925 --- /dev/null +++ b/package/libgpgme/libgpgme.mk @@ -0,0 +1,46 @@ +################################################################################ +# +# libgpgme +# +################################################################################ + +LIBGPGME_VERSION = 1.15.1 +LIBGPGME_SITE = https://gnupg.org/ftp/gcrypt/gpgme +LIBGPGME_SOURCE = gpgme-$(LIBGPGME_VERSION).tar.bz2 +LIBGPGME_LICENSE = LGPL-2.1+ +LIBGPGME_LICENSE_FILES = COPYING.LESSER +LIBGPGME_CPE_ID_VENDOR = gnupg +LIBGPGME_CPE_ID_PRODUCT = gpgpme +LIBGPGME_INSTALL_STAGING = YES +LIBGPGME_DEPENDENCIES = libassuan libgpg-error +LIBGPGME_CONFIG_SCRIPTS = gpgme-config + +LIBGPGME_LANGUAGE_BINDINGS = cl +# C++ bindings require a C++11 capable gcc, and -Wsuggest-override support +ifeq ($(BR2_INSTALL_LIBSTDCPP)$(BR2_TOOLCHAIN_GCC_AT_LEAST_5),yy) +LIBGPGME_LANGUAGE_BINDINGS += cpp +endif + +LIBGPGME_CONF_OPTS = \ + --with-gpg-error-prefix=$(STAGING_DIR)/usr \ + --with-libassuan-prefix=$(STAGING_DIR)/usr \ + --disable-gpgsm-test \ + --disable-gpgconf-test \ + --disable-g13-test \ + --disable-gpg-test \ + --enable-languages=$(subst $(space),$(comma),$(LIBGPGME_LANGUAGE_BINDINGS)) + +# Handle argp-standalone or it errors out during build +ifeq ($(BR2_PACKAGE_ARGP_STANDALONE),y) +# musl libc does not define error_t in errno.h, but argp.h does. +# Assume we have error_t to avoid collision with the argp.h error_t. +LIBGPGME_CONF_ENV += LIBS="-largp" ac_cv_type_error_t=yes +LIBGPGME_DEPENDENCIES += argp-standalone +endif + +# MIPS N64 (re)introduced getdents64 in kernel version 3.10 +ifeq ($(BR2_MIPS_NABI64)x$(BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10),yx) +LIBGPGME_CONF_OPTS += --disable-linux-getdents +endif + +$(eval $(autotools-package)) diff --git a/package/libgphoto2/Config.in b/package/libgphoto2/Config.in new file mode 100644 index 00000000..184ca206 --- /dev/null +++ b/package/libgphoto2/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_LIBGPHOTO2 + bool "libgphoto2" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBTOOL + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_LIBXML2 + help + libgphoto2 is the core library designed to allow access to + digital camera by external programs. + + http://gphoto.org/proj/libgphoto2/ + +comment "libgphoto needs a toolchain w/ threads, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/libgphoto2/libgphoto2.hash b/package/libgphoto2/libgphoto2.hash new file mode 100644 index 00000000..e405735c --- /dev/null +++ b/package/libgphoto2/libgphoto2.hash @@ -0,0 +1,6 @@ +# https://sourceforge.net/projects/gphoto/files/libgphoto/2.5.26/ +sha1 38373ef7f76e90492ffca309094487fb1474f3fe libgphoto2-2.5.26.tar.bz2 + +# Locally calculated hash +sha256 7740fea3cbb78489071cdfec06c07fab528e69e27ac82734eae6a73eaeeabcd4 libgphoto2-2.5.26.tar.bz2 +sha256 ebc385a0b1d477be5177ed6d9129557aa59a3ad0f26ebe7dd97ee942a0fb68ee COPYING diff --git a/package/libgphoto2/libgphoto2.mk b/package/libgphoto2/libgphoto2.mk new file mode 100644 index 00000000..1d42ba86 --- /dev/null +++ b/package/libgphoto2/libgphoto2.mk @@ -0,0 +1,62 @@ +################################################################################ +# +# libgphoto2 +# +################################################################################ + +LIBGPHOTO2_VERSION = 2.5.26 +LIBGPHOTO2_SOURCE = libgphoto2-$(LIBGPHOTO2_VERSION).tar.bz2 +# Project is maintained on github but github tarball doesn't have +# configure, so use tarballs from SourceForge +LIBGPHOTO2_SITE = https://downloads.sourceforge.net/project/gphoto/libgphoto/$(LIBGPHOTO2_VERSION) +LIBGPHOTO2_LICENSE = LGPL-2.1+, GPL-2.0 (adc65), GPL-2.0+ (some camlibs), \ + LGPL-2.0 (sipix), LGPL-3.0+ (pentax), BSD-3-Clause (ax203/tinyjpeg) +# There is a single license file for the LGPL-2.1, no license files +# for other licenses +LIBGPHOTO2_LICENSE_FILES = COPYING +LIBGPHOTO2_INSTALL_STAGING = YES + +LIBGPHOTO2_DEPENDENCIES = libxml2 libusb libtool host-pkgconf + +LIBGPHOTO2_CONF_ENV = udevscriptdir=/lib/udev +LIBGPHOTO2_CONF_OPTS += --without-rpmbuild --disable-gp2ddb --disable-internal-docs + +ifeq ($(BR2_PACKAGE_LIBUSB_COMPAT),y) +# libusb-compat is not actually used, but it is detected, so add it +# here to guarantee reproducible builds +LIBGPHOTO2_DEPENDENCIES += libusb-compat +endif + +ifeq ($(BR2_PACKAGE_LIBCURL),y) +LIBGPHOTO2_DEPENDENCIES += libcurl +LIBGPHOTO2_CONF_OPTS += --with-libcurl=auto +else +LIBGPHOTO2_CONF_OPTS += --with-libcurl=no +endif + +ifeq ($(BR2_PACKAGE_LIBEXIF),y) +LIBGPHOTO2_DEPENDENCIES += libexif +LIBGPHOTO2_CONF_OPTS += --with-libexif=auto +else +LIBGPHOTO2_CONF_OPTS += --with-libexif=no +endif + +ifeq ($(BR2_PACKAGE_JPEG),y) +LIBGPHOTO2_DEPENDENCIES += jpeg +LIBGPHOTO2_CONF_OPTS += --with-jpeg +else +LIBGPHOTO2_CONF_OPTS += --without-jpeg +endif + +ifeq ($(BR2_PACKAGE_GD),y) +LIBGPHOTO2_DEPENDENCIES += gd +LIBGPHOTO2_CONF_OPTS += --with-gdlib=auto +else +LIBGPHOTO2_CONF_OPTS += --with-gdlib=no +endif + +ifeq ($(BR2_PACKAGE_LOCKDEV),y) +LIBGPHOTO2_DEPENDENCIES += lockdev +endif + +$(eval $(autotools-package)) diff --git a/package/libgpiod/0001-build-add-a-configure-switch-for-building-examples.patch b/package/libgpiod/0001-build-add-a-configure-switch-for-building-examples.patch new file mode 100644 index 00000000..a21c7670 --- /dev/null +++ b/package/libgpiod/0001-build-add-a-configure-switch-for-building-examples.patch @@ -0,0 +1,91 @@ +From 5e9e7223a3633ee82b557d21b1f18aa15becd450 Mon Sep 17 00:00:00 2001 +From: Bartosz Golaszewski +Date: Mon, 7 Dec 2020 20:38:30 +0100 +Subject: build: add a configure switch for building examples + +Example code for bindings is currently always built if bindings are +enabled. Make it conditional with a new configure switch. + +Signed-off-by: Bartosz Golaszewski +Reviewed-by: Andy Shevchenko +[Retrieved from: +https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/commit/?id=5e9e7223a3633ee82b557d21b1f18aa15becd450] +Signed-off-by: Fabrice Fontaine +--- + bindings/cxx/Makefile.am | 8 +++++++- + bindings/python/Makefile.am | 10 ++++++++-- + configure.ac | 6 ++++++ + 3 files changed, 21 insertions(+), 3 deletions(-) + +diff --git a/bindings/cxx/Makefile.am b/bindings/cxx/Makefile.am +index 5c40ceb..87463b0 100644 +--- a/bindings/cxx/Makefile.am ++++ b/bindings/cxx/Makefile.am +@@ -18,10 +18,16 @@ include_HEADERS = gpiod.hpp + pkgconfigdir = $(libdir)/pkgconfig + pkgconfig_DATA = libgpiodcxx.pc + +-SUBDIRS = . examples ++SUBDIRS = . + + if WITH_TESTS + + SUBDIRS += tests + + endif ++ ++if WITH_EXAMPLES ++ ++SUBDIRS += examples ++ ++endif +diff --git a/bindings/python/Makefile.am b/bindings/python/Makefile.am +index 124f152..5403bcb 100644 +--- a/bindings/python/Makefile.am ++++ b/bindings/python/Makefile.am +@@ -6,8 +6,6 @@ + # Copyright (C) 2017-2018 Bartosz Golaszewski + # + +-SUBDIRS = . examples +- + pyexec_LTLIBRARIES = gpiod.la + + gpiod_la_SOURCES = gpiodmodule.c +@@ -17,8 +15,16 @@ gpiod_la_CFLAGS += -Wall -Wextra -g -std=gnu89 $(PYTHON_CPPFLAGS) + gpiod_la_LDFLAGS = -module -avoid-version + gpiod_la_LIBADD = $(top_builddir)/lib/libgpiod.la $(PYTHON_LIBS) + ++SUBDIRS = . ++ + if WITH_TESTS + + SUBDIRS += tests + + endif ++ ++if WITH_EXAMPLES ++ ++SUBDIRS += examples ++ ++endif +diff --git a/configure.ac b/configure.ac +index 57c99a8..90a6324 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -155,6 +155,12 @@ then + fi + fi + ++AC_ARG_ENABLE([examples], ++ [AS_HELP_STRING([--enable-examples], [enable building code examples[default=no]])], ++ [if test "x$enableval" = xyes; then with_examples=true; fi], ++ [with_examples=false]) ++AM_CONDITIONAL([WITH_EXAMPLES], [test "x$with_examples" = xtrue]) ++ + AC_ARG_ENABLE([bindings-cxx], + [AS_HELP_STRING([--enable-bindings-cxx],[enable C++ bindings [default=no]])], + [if test "x$enableval" = xyes; then with_bindings_cxx=true; fi], +-- +cgit 1.2.3-1.el7 + diff --git a/package/libgpiod/Config.in b/package/libgpiod/Config.in new file mode 100644 index 00000000..293eef6c --- /dev/null +++ b/package/libgpiod/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_LIBGPIOD + bool "libgpiod" + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_8 + help + This is a C library that abstracts the GPIO character + device operations on linux. + + https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/ + +if BR2_PACKAGE_LIBGPIOD + +config BR2_PACKAGE_LIBGPIOD_TOOLS + bool "install tools" + help + Include a set of command-line tools for managing GPIOs. + +endif + +comment "libgpiod needs kernel headers >= 4.8" + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_8 diff --git a/package/libgpiod/libgpiod.hash b/package/libgpiod/libgpiod.hash new file mode 100644 index 00000000..f0803cab --- /dev/null +++ b/package/libgpiod/libgpiod.hash @@ -0,0 +1,4 @@ +# From https://www.kernel.org/pub/software/libs/libgpiod/sha256sums.asc +sha256 841be9d788f00bab08ef22c4be5c39866f0e46cb100a3ae49ed816ac9c5dddc7 libgpiod-1.6.3.tar.xz +# Hash for license file +sha256 ce64d5f7b49ea6d80fdb6d4cdee6839d1a94274f7493dc797c3b55b65ec8e9ed COPYING diff --git a/package/libgpiod/libgpiod.mk b/package/libgpiod/libgpiod.mk new file mode 100644 index 00000000..35d003fa --- /dev/null +++ b/package/libgpiod/libgpiod.mk @@ -0,0 +1,44 @@ +################################################################################ +# +# libgpiod +# +################################################################################ + +# Be careful when bumping versions. +# Dependency on kernel header versions may change. +LIBGPIOD_VERSION = 1.6.3 +LIBGPIOD_SOURCE = libgpiod-$(LIBGPIOD_VERSION).tar.xz +LIBGPIOD_SITE = https://www.kernel.org/pub/software/libs/libgpiod +LIBGPIOD_LICENSE = LGPL-2.1+ +LIBGPIOD_LICENSE_FILES = COPYING +LIBGPIOD_INSTALL_STAGING = YES +LIBGPIOD_DEPENDENCIES = host-pkgconf host-autoconf-archive +# We're patching configure.ac +LIBGPIOD_AUTORECONF = YES +LIBGPIOD_AUTORECONF_OPTS = --include=$(HOST_DIR)/share/autoconf-archive +LIBGPIOD_CONF_OPTS = --disable-tests --disable-examples + +ifeq ($(BR2_PACKAGE_LIBGPIOD_TOOLS),y) +LIBGPIOD_CONF_OPTS += --enable-tools +else +LIBGPIOD_CONF_OPTS += --disable-tools +endif + +ifeq ($(BR2_INSTALL_LIBSTDCPP),y) +LIBGPIOD_CONF_OPTS += --enable-bindings-cxx +else +LIBGPIOD_CONF_OPTS += --disable-bindings-cxx +endif + +ifeq ($(BR2_PACKAGE_PYTHON3),y) +LIBGPIOD_CONF_OPTS += --enable-bindings-python +LIBGPIOD_DEPENDENCIES += python3 +LIBGPIOD_CONF_ENV += \ + PYTHON=$(HOST_DIR)/bin/python3 \ + PYTHON_CPPFLAGS="`$(STAGING_DIR)/usr/bin/python3-config --includes`" \ + PYTHON_LIBS="`$(STAGING_DIR)/usr/bin/python3-config --ldflags`" +else +LIBGPIOD_CONF_OPTS += --disable-bindings-python +endif + +$(eval $(autotools-package)) diff --git a/package/libgsasl/Config.in b/package/libgsasl/Config.in new file mode 100644 index 00000000..228f8823 --- /dev/null +++ b/package/libgsasl/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_LIBGSASL + bool "libgsasl" + depends on BR2_USE_WCHAR + help + Simple Authentication and Security Layer framework Library. + GNU SASL is an implementation of the Simple Authentication and + Security Layer framework and a few common SASL mechanisms. + SASL is used by network servers (e.g., IMAP, SMTP) to request + authentication from clients, and in clients to authenticate + against servers. + + http://www.gnu.org/software/gsasl + +comment "libgsasl needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR diff --git a/package/libgsasl/libgsasl.hash b/package/libgsasl/libgsasl.hash new file mode 100644 index 00000000..75e5a317 --- /dev/null +++ b/package/libgsasl/libgsasl.hash @@ -0,0 +1,11 @@ +# From https://lists.gnu.org/archive/html/help-gsasl/2021-01/msg00007.html +sha1 a16ff428bbf28fcfa681c7edd2cd2bb087bcc4e7 libgsasl-1.10.0.tar.gz +sha224 20b37757fccb6a0f8b4c6fcb28f51a3b4b8a4b1fdb4736da07707a0b libgsasl-1.10.0.tar.gz + +# Locally calculated after checking pgp signature +sha256 f1b553384dedbd87478449775546a358d6f5140c15cccc8fb574136fdc77329f libgsasl-1.10.0.tar.gz + +# Hash for license files: +sha256 26e99818ca6ce79d8b2c461fabc72dc6e03483e6b0fd9692dcb07ab1b09bbac7 README +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LIB +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/libgsasl/libgsasl.mk b/package/libgsasl/libgsasl.mk new file mode 100644 index 00000000..e813a354 --- /dev/null +++ b/package/libgsasl/libgsasl.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# libgsasl +# +################################################################################ + +LIBGSASL_VERSION = 1.10.0 +LIBGSASL_SITE = $(BR2_GNU_MIRROR)/gsasl +LIBGSASL_LICENSE = LGPL-2.1+ (library), GPL-3.0+ (programs) +LIBGSASL_LICENSE_FILES = README COPYING.LIB COPYING +LIBGSASL_INSTALL_STAGING = YES + +ifeq ($(BR2_PACKAGE_LIBGCRYPT),y) +LIBGSASL_CONF_OPTS = --with-libgcrypt-prefix=$(STAGING_DIR)/usr +LIBGSASL_DEPENDENCIES += libgcrypt +else +LIBGSASL_CONF_OPTS = --without-libgcrypt +endif + +ifeq ($(BR2_PACKAGE_LIBIDN),y) +LIBGSASL_CONF_OPTS += --with-libidn-prefix=$(STAGING_DIR)/usr +LIBGSASL_DEPENDENCIES += libidn +else +LIBGSASL_CONF_OPTS += --without-stringprep +endif + +$(eval $(autotools-package)) diff --git a/package/libgsm/0001-misc-fixes-from-archlinux.patch b/package/libgsm/0001-misc-fixes-from-archlinux.patch new file mode 100644 index 00000000..86f4d42b --- /dev/null +++ b/package/libgsm/0001-misc-fixes-from-archlinux.patch @@ -0,0 +1,218 @@ +From e8f43832d401ad1e071e6860b2bf4a1e796d4356 Mon Sep 17 00:00:00 2001 +From: Adam Duskett +Date: Fri, 28 Jul 2017 08:18:22 -0400 +Subject: [PATCH] Misc fixes from Archlinux + +Patch from: + https://git.archlinux.org/svntogit/packages.git/plain/gsm/trunk/gsm.patch + +Signed-off-by: "Yann E. MORIN" +Signed-off-by: Adam Duskett +Refresh for 1.0.17 +--- + Makefile | 84 ++++++++++++++++++++++++++++++++-------------------------------- + 1 file changed, 42 insertions(+), 42 deletions(-) + +diff --git a/Makefile b/Makefile +index d5c0c90..ef61bd5 100644 +--- a/Makefile ++++ b/Makefile +@@ -44,7 +44,7 @@ WAV49 = -DWAV49 + # CCFLAGS = -c -O + + CC = gcc -ansi -pedantic +-CCFLAGS = -c -O2 -DNeedFunctionPrototypes=1 -Wall -Wno-comment ++CCFLAGS = -c -O2 -fPIC -DNeedFunctionPrototypes=1 -Wall -Wno-comment + + LD = $(CC) + +@@ -96,11 +96,11 @@ TOAST_INSTALL_MAN = $(TOAST_INSTALL_ROOT)/man/man1 + # Other tools + + SHELL = /bin/sh +-LN = ln ++LN = ln -s -f + BASENAME = basename + AR = ar + ARFLAGS = cr +-RMFLAGS = ++RMFLAGS = -f + FIND = find + COMPRESS = compress + COMPRESSFLAGS = +@@ -139,7 +139,7 @@ LFLAGS = $(LDFLAGS) $(LDINC) + + # Targets + +-LIBGSM = $(LIB)/libgsm.a ++LIBGSMSO = $(LIB)/libgsm.so + + TOAST = $(BIN)/toast + UNTOAST = $(BIN)/untoast +@@ -257,7 +257,7 @@ STUFF = ChangeLog \ + # Install targets + + GSM_INSTALL_TARGETS = \ +- $(GSM_INSTALL_LIB)/libgsm.a \ ++ $(GSM_INSTALL_LIB)/libgsm.so \ + $(GSM_INSTALL_INC)/gsm.h \ + $(GSM_INSTALL_MAN)/gsm.3 \ + $(GSM_INSTALL_MAN)/gsm_explode.3 \ +@@ -279,7 +279,7 @@ TOAST_INSTALL_TARGETS = \ + + # Target rules + +-all: $(LIBGSM) $(TOAST) $(TCAT) $(UNTOAST) ++all: $(LIBGSMSO) $(TOAST) $(TCAT) $(UNTOAST) + @-echo $(ROOT): Done. + + tst: $(TST)/lin2cod $(TST)/cod2lin $(TOAST) $(TST)/test-result +@@ -299,24 +299,23 @@ install: toastinstall gsminstall + + # The basic API: libgsm + +-$(LIBGSM): $(LIB) $(GSM_OBJECTS) +- -rm $(RMFLAGS) $(LIBGSM) +- $(AR) $(ARFLAGS) $(LIBGSM) $(GSM_OBJECTS) +- $(RANLIB) $(LIBGSM) +- ++$(LIBGSMSO): $(LIB) $(GSM_OBJECTS) ++ $(LD) -shared -Wl,-soname,libgsm.so.1 -o $@.1.0.13 $(GSM_OBJECTS) ++ $(LN) libgsm.so.1.0.13 $(LIBGSMSO).1 ++ $(LN) libgsm.so.1.0.13 $(LIBGSMSO) + + # Toast, Untoast and Tcat -- the compress-like frontends to gsm. + +-$(TOAST): $(BIN) $(TOAST_OBJECTS) $(LIBGSM) +- $(LD) $(LFLAGS) -o $(TOAST) $(TOAST_OBJECTS) $(LIBGSM) $(LDLIB) ++$(TOAST): $(BIN) $(TOAST_OBJECTS) $(LIBGSMSO) ++ $(LD) $(LFLAGS) -o $(TOAST) $(TOAST_OBJECTS) $(LIBGSMSO) $(LDLIB) + + $(UNTOAST): $(BIN) $(TOAST) + -rm $(RMFLAGS) $(UNTOAST) +- $(LN) $(TOAST) $(UNTOAST) ++ $(LN) toast $(UNTOAST) + + $(TCAT): $(BIN) $(TOAST) + -rm $(RMFLAGS) $(TCAT) +- $(LN) $(TOAST) $(TCAT) ++ $(LN) toast $(TCAT) + + + # The local bin and lib directories +@@ -351,53 +350,54 @@ toastuninstall: + fi + + $(TOAST_INSTALL_BIN)/toast: $(TOAST) +- -rm $@ ++ -rm $(RMFLAGS) $@ + cp $(TOAST) $@ + chmod 755 $@ + + $(TOAST_INSTALL_BIN)/untoast: $(TOAST_INSTALL_BIN)/toast +- -rm $@ +- ln $? $@ ++ -rm $(RMFLAGS) $@ ++ $(LN) toast $@ + + $(TOAST_INSTALL_BIN)/tcat: $(TOAST_INSTALL_BIN)/toast +- -rm $@ +- ln $? $@ ++ -rm $(RMFLAGS) $@ ++ $(LN) toast $@ + + $(TOAST_INSTALL_MAN)/toast.1: $(MAN)/toast.1 +- -rm $@ ++ -rm $(RMFLAGS) $@ + cp $? $@ + chmod 444 $@ + + $(GSM_INSTALL_MAN)/gsm.3: $(MAN)/gsm.3 +- -rm $@ ++ -rm $(RMFLAGS) $@ + cp $? $@ + chmod 444 $@ + + $(GSM_INSTALL_MAN)/gsm_option.3: $(MAN)/gsm_option.3 +- -rm $@ ++ -rm $(RMFLAGS) $@ + cp $? $@ + chmod 444 $@ + + $(GSM_INSTALL_MAN)/gsm_explode.3: $(MAN)/gsm_explode.3 +- -rm $@ ++ -rm $(RMFLAGS) $@ + cp $? $@ + chmod 444 $@ + + $(GSM_INSTALL_MAN)/gsm_print.3: $(MAN)/gsm_print.3 +- -rm $@ ++ -rm $(RMFLAGS) $@ + cp $? $@ + chmod 444 $@ + + $(GSM_INSTALL_INC)/gsm.h: $(INC)/gsm.h +- -rm $@ +- cp $? $@ +- chmod 444 $@ +- +-$(GSM_INSTALL_LIB)/libgsm.a: $(LIBGSM) +- -rm $@ ++ -rm $(RMFLAGS) $@ + cp $? $@ + chmod 444 $@ + ++$(GSM_INSTALL_LIB)/libgsm.so: $(LIBGSMSO) ++ -rm $(RMFLAGS) $@ $@.1 $@.1.0.13 ++ cp $?.1.0.13 $@.1.0.13 ++ chmod 755 $@.1.0.13 ++ $(LN) libgsm.so.1.0.13 $@ ++ $(LN) libgsm.so.1.0.13 $@.1 + + # Distribution + +@@ -425,7 +425,7 @@ semi-clean: + -print | xargs rm $(RMFLAGS) + + clean: semi-clean +- -rm $(RMFLAGS) $(LIBGSM) $(ADDTST)/add \ ++ -rm $(RMFLAGS) $(LIBGSMSO)* $(ADDTST)/add \ + $(TOAST) $(TCAT) $(UNTOAST) \ + $(ROOT)/gsm-1.0.tar.Z + +@@ -473,22 +473,22 @@ $(ADDTST)/add: $(ADDTST)/add_test.o + $(TST)/test-result: $(TST)/lin2cod $(TST)/cod2lin $(TOAST) $(TST)/run + ( cd $(TST); ./run ) + +-$(TST)/lin2txt: $(TST)/lin2txt.o $(LIBGSM) ++$(TST)/lin2txt: $(TST)/lin2txt.o $(LIBGSMSO) + $(LD) $(LFLAGS) -o $(TST)/lin2txt \ +- $(TST)/lin2txt.o $(LIBGSM) $(LDLIB) ++ $(TST)/lin2txt.o $(LIBGSMSO) $(LDLIB) + +-$(TST)/lin2cod: $(TST)/lin2cod.o $(LIBGSM) ++$(TST)/lin2cod: $(TST)/lin2cod.o $(LIBGSMSO) + $(LD) $(LFLAGS) -o $(TST)/lin2cod \ +- $(TST)/lin2cod.o $(LIBGSM) $(LDLIB) ++ $(TST)/lin2cod.o $(LIBGSMSO) $(LDLIB) + +-$(TST)/gsm2cod: $(TST)/gsm2cod.o $(LIBGSM) ++$(TST)/gsm2cod: $(TST)/gsm2cod.o $(LIBGSMSO) + $(LD) $(LFLAGS) -o $(TST)/gsm2cod \ +- $(TST)/gsm2cod.o $(LIBGSM) $(LDLIB) ++ $(TST)/gsm2cod.o $(LIBGSMSO) $(LDLIB) + +-$(TST)/cod2txt: $(TST)/cod2txt.o $(LIBGSM) ++$(TST)/cod2txt: $(TST)/cod2txt.o $(LIBGSMSO) + $(LD) $(LFLAGS) -o $(TST)/cod2txt \ +- $(TST)/cod2txt.o $(LIBGSM) $(LDLIB) ++ $(TST)/cod2txt.o $(LIBGSMSO) $(LDLIB) + +-$(TST)/cod2lin: $(TST)/cod2lin.o $(LIBGSM) ++$(TST)/cod2lin: $(TST)/cod2lin.o $(LIBGSMSO) + $(LD) $(LFLAGS) -o $(TST)/cod2lin \ +- $(TST)/cod2lin.o $(LIBGSM) $(LDLIB) ++ $(TST)/cod2lin.o $(LIBGSMSO) $(LDLIB) +-- +2.13.3 + diff --git a/package/libgsm/Config.in b/package/libgsm/Config.in new file mode 100644 index 00000000..c6edefe6 --- /dev/null +++ b/package/libgsm/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LIBGSM + bool "libgsm" + depends on !BR2_STATIC_LIBS + help + Shared libraries for GSM 06.10 lossy speech compression. + + http://www.quut.com/gsm + +comment "libgsm needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/libgsm/libgsm.hash b/package/libgsm/libgsm.hash new file mode 100644 index 00000000..88d2573f --- /dev/null +++ b/package/libgsm/libgsm.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 4903652f68a8c04d0041f0d19b1eb713ddcd2aa011c5e595b3b8bca2755270f6 gsm-1.0.19.tar.gz +sha256 81c68a3374937ed9b5e4929c709e81a2c4b35b5d1f450ecf8c473e2daea46ff6 COPYRIGHT diff --git a/package/libgsm/libgsm.mk b/package/libgsm/libgsm.mk new file mode 100644 index 00000000..e3ebee4b --- /dev/null +++ b/package/libgsm/libgsm.mk @@ -0,0 +1,45 @@ +################################################################################ +# +# libgsm +# +################################################################################ + +LIBGSM_VERSION = 1.0.19 +LIBGSM_SOURCE = gsm-$(LIBGSM_VERSION).tar.gz +LIBGSM_SITE = http://www.quut.com/gsm +LIBGSM_LICENSE = gsm +LIBGSM_LICENSE_FILES = COPYRIGHT +LIBGSM_INSTALL_STAGING = YES + +define LIBGSM_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) CC=$(TARGET_CC) -C $(@D) +endef + +# Install targets are not safe for parallel jobs. However, since there's +# just only a bunch of files to install, just do it manually. Note that, +# even though the package version is '1.0.16', the solib is generated as +# '1.0.13' and its SONAME is just '1'. +# +# For staging, we install all the .so symlinks, and the header. +define LIBGSM_INSTALL_STAGING_CMDS + $(INSTALL) -D -m 0644 $(@D)/inc/gsm.h $(STAGING_DIR)/usr/include/gsm.h + $(INSTALL) -D -m 0644 $(@D)/lib/libgsm.so.1.0.13 $(STAGING_DIR)/usr/lib/libgsm.so.1.0.13 + ln -sf libgsm.so.1.0.13 $(STAGING_DIR)/usr/lib/libgsm.so.1 + ln -sf libgsm.so.1.0.13 $(STAGING_DIR)/usr/lib/libgsm.so +endef + +# Install targets are not safe for parallel jobs. However, since there's +# just only a bunch of files to install, just do it manually. Note that, +# even though the package version is '1.0.16', the solib is versioned as +# '1.0.13' and its SONAME is just versioned with '1'. +# +# For target, we just need the library to be installed as its SONAME, and +# the programs. +define LIBGSM_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0644 $(@D)/lib/libgsm.so.1.0.13 $(TARGET_DIR)/usr/lib/libgsm.so.1 + $(INSTALL) -D -m 0755 $(@D)/bin/toast $(TARGET_DIR)/usr/bin/toast + $(INSTALL) -D -m 0755 $(@D)/bin/tcat $(TARGET_DIR)/usr/bin/tcat + $(INSTALL) -D -m 0755 $(@D)/bin/untoast $(TARGET_DIR)/usr/bin/untoast +endef + +$(eval $(generic-package)) diff --git a/package/libgta/Config.in b/package/libgta/Config.in new file mode 100644 index 00000000..894dced0 --- /dev/null +++ b/package/libgta/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LIBGTA + bool "libgta" + select BR2_PACKAGE_BZIP2 + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_XZ + help + Libgta is a portable library that implements the Generic + Tagged Array (GTA) file format. + + http://gta.nongnu.org diff --git a/package/libgta/libgta.hash b/package/libgta/libgta.hash new file mode 100644 index 00000000..d5fceb42 --- /dev/null +++ b/package/libgta/libgta.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 1d2ff713955eee28310de082a8fd8e236403c27dee3716ba1238c56e6643e4fb libgta-1.0.8.tar.xz +sha256 36b6d3fa47916943fd5fec313c584784946047ec1337a78b440e5992cb595f89 COPYING diff --git a/package/libgta/libgta.mk b/package/libgta/libgta.mk new file mode 100644 index 00000000..1189feef --- /dev/null +++ b/package/libgta/libgta.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# libgta +# +################################################################################ + +LIBGTA_VERSION = 1.0.8 +LIBGTA_SITE = http://download.savannah.nongnu.org/releases/gta +LIBGTA_SOURCE = libgta-$(LIBGTA_VERSION).tar.xz +LIBGTA_INSTALL_STAGING = YES +LIBGTA_DEPENDENCIES = host-pkgconf bzip2 xz zlib +LIBGTA_LICENSE = LGPL-2.1+ +LIBGTA_LICENSE_FILES = COPYING + +LIBGTA_CONF_OPTS += -DGTA_BUILD_DOCUMENTATION=OFF + +ifeq ($(BR2_STATIC_LIBS),) +LIBGTA_CONF_OPTS += -DGTA_BUILD_SHARED_LIB=ON +else +LIBGTA_CONF_OPTS += -DGTA_BUILD_SHARED_LIB=OFF +endif + +ifeq ($(BR2_SHARED_LIBS),) +LIBGTA_CONF_OPTS += -DGTA_BUILD_STATIC_LIB=ON +else +LIBGTA_CONF_OPTS += -DGTA_BUILD_STATIC_LIB=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/libgtk2/0001-reduce-dependencies.patch b/package/libgtk2/0001-reduce-dependencies.patch new file mode 100644 index 00000000..3250cae4 --- /dev/null +++ b/package/libgtk2/0001-reduce-dependencies.patch @@ -0,0 +1,117 @@ +Hack the configure.in file to add a "none" gdktarget which removes +dependencies on graphic backends such as X.org or DirectFB. Gtk does +not fully build in this mode, but it builds sufficiently to build the +host tools that are needed to build the target Gtk. + +Changes: + Ported to 2.24.18 + +Signed-off-by: Thomas Petazzoni +Signed-off-by: Spenser Gilliland +--- +Index: libgtk2-2.24.18/configure.ac +=================================================================== +--- libgtk2-2.24.18.orig/configure.ac 2013-05-13 07:02:44.000000000 -0500 ++++ libgtk2-2.24.18/configure.ac 2013-05-27 02:12:09.947030335 -0500 +@@ -258,12 +258,12 @@ + gdktarget=x11 + fi + +-AC_ARG_WITH(gdktarget, [ --with-gdktarget=[[x11/win32/quartz/directfb]] select non-default GDK target], ++AC_ARG_WITH(gdktarget, [ --with-gdktarget=[[x11/win32/quartz/directfb/none]] select non-default GDK target], + gdktarget=$with_gdktarget) + + AC_SUBST(gdktarget) + case $gdktarget in +- x11|win32|quartz|directfb) ;; ++ x11|win32|quartz|directfb|none) ;; + *) AC_MSG_ERROR([Invalid target for GDK: use x11, quartz, directfb or win32.]);; + esac + +@@ -372,11 +373,15 @@ + ## annoying to construct + PKG_CHECK_MODULES(BASE_DEPENDENCIES, + [glib-2.0 >= glib_required_version dnl +- atk >= atk_required_version dnl +- pango >= pango_required_version dnl +- cairo >= cairo_required_version dnl + gdk-pixbuf-2.0 >= gdk_pixbuf_required_version]) + ++if test "x$gdktarget" != "xnone"; then ++ PKG_CHECK_MODULES(BASE_DEPENDENCIES, ++ [atk >= atk_required_version dnl ++ pango >= pango_required_version dnl ++ cairo >= cairo_required_version]) ++fi ++ + ## In addition to checking that cairo is present, we also need to + ## check that the correct cairo backend is there. E.g. if the GDK + ## target is win32 we need the cairo-win32 backend and so on. +@@ -387,8 +392,11 @@ + if test "x$cairo_backend" = "xx11"; then + cairo_backend=xlib + fi +-PKG_CHECK_MODULES(CAIRO_BACKEND, +- [cairo-$cairo_backend >= cairo_required_version]) ++ ++if test "x$gdktarget" != "xnone"; then ++ PKG_CHECK_MODULES(CAIRO_BACKEND, ++ [cairo-$cairo_backend >= cairo_required_version]) ++fi + + PKG_CHECK_MODULES(GMODULE, [gmodule-2.0]) + +@@ -1279,6 +1287,7 @@ + AM_CONDITIONAL(USE_DIRECTFB, false) + fi + ++if test "x$gdktarget" != "xnone"; then + + # Check for Pango flags + +@@ -1324,6 +1333,8 @@ + GDK_PACKAGES="$PANGO_PACKAGES gio-2.0 gdk-pixbuf-2.0 cairo-$cairo_backend" + fi + ++fi # gdktarget != none ++ + GDK_DEP_LIBS="$GDK_EXTRA_LIBS `$PKG_CONFIG --libs $GDK_PACKAGES` $MATH_LIB" + GDK_DEP_CFLAGS="`$PKG_CONFIG --cflags gthread-2.0 $GDK_PACKAGES` $GDK_EXTRA_CFLAGS" + # +@@ -1341,6 +1352,7 @@ + AC_SUBST(GDK_DEP_LIBS) + AC_SUBST(GDK_DEP_CFLAGS) + ++if test "x$gdktarget" != "xnone"; then + + ######################################## + # Check for Accessibility Toolkit flags +@@ -1372,6 +1384,10 @@ + fi + + GTK_PACKAGES="atk cairo gdk-pixbuf-2.0 gio-2.0" ++else # gdktarget != none ++GTK_PACKAGES="gdk-pixbuf-2.0" ++fi # gdktarget != none ++ + if test "x$gdktarget" = "xx11"; then + GTK_PACKAGES="$GTK_PACKAGES pangoft2" + fi +@@ -1533,6 +1549,8 @@ + gtk_save_cppflags="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $GTK_DEP_CFLAGS $GDK_DEP_CFLAGS" + ++if test "x$gdktarget" != "xnone"; then ++ + AC_CHECK_HEADER(cairo-pdf.h,,AC_MSG_ERROR([ + *** Can't find cairo-pdf.h. You must build Cairo with the pdf + *** backend enabled.])) +@@ -1547,6 +1565,8 @@ + *** svg backend enabled.])) + fi + ++fi # gdktarget != none ++ + CPPFLAGS="$gtk_save_cppflags" + + diff --git a/package/libgtk2/Config.in b/package/libgtk2/Config.in new file mode 100644 index 00000000..7c5762a5 --- /dev/null +++ b/package/libgtk2/Config.in @@ -0,0 +1,43 @@ +config BR2_PACKAGE_LIBGTK2 + bool "libgtk2" + depends on BR2_PACKAGE_XORG7 + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + depends on BR2_INSTALL_LIBSTDCPP # pango + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # pango -> harfbuzz + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # pango -> harfbuzz + select BR2_PACKAGE_ATK + select BR2_PACKAGE_CAIRO + select BR2_PACKAGE_CAIRO_PS + select BR2_PACKAGE_CAIRO_PDF + select BR2_PACKAGE_CAIRO_SVG + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_PANGO + select BR2_PACKAGE_GDK_PIXBUF + select BR2_PACKAGE_FONTCONFIG + select BR2_PACKAGE_XLIB_LIBX11 + select BR2_PACKAGE_XLIB_LIBXEXT + select BR2_PACKAGE_XLIB_LIBXRENDER + help + The GTK+ version 2 graphical user interface library + + http://www.gtk.org/ + +if BR2_PACKAGE_LIBGTK2 + +config BR2_PACKAGE_LIBGTK2_DEMO + bool "Install libgtk2 demo program" + help + The GTK+ source base contains a gtk-demo program. This + option allows to install this program to the target. + +endif + +comment "libgtk2 needs a toolchain w/ wchar, threads, C++, gcc >= 4.8" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_PACKAGE_XORG7 + depends on !BR2_USE_WCHAR || !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 || \ + !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libgtk2/libgtk2.hash b/package/libgtk2/libgtk2.hash new file mode 100644 index 00000000..9b10a1f0 --- /dev/null +++ b/package/libgtk2/libgtk2.hash @@ -0,0 +1,5 @@ +# From http://ftp.gnome.org/pub/gnome/sources/gtk+/2.24/gtk+-2.24.33.sha256sum +sha256 ac2ac757f5942d318a311a54b0c80b5ef295f299c2a73c632f6bfb1ff49cc6da gtk+-2.24.33.tar.xz + +# Hash for license file: +sha256 d245807f90032872d1438d741ed21e2490e1175dc8aa3afa5ddb6c8e529b58e5 COPYING diff --git a/package/libgtk2/libgtk2.mk b/package/libgtk2/libgtk2.mk new file mode 100644 index 00000000..d30e1d9d --- /dev/null +++ b/package/libgtk2/libgtk2.mk @@ -0,0 +1,139 @@ +################################################################################ +# +# libgtk2 +# +################################################################################ + +LIBGTK2_VERSION_MAJOR = 2.24 +LIBGTK2_VERSION = $(LIBGTK2_VERSION_MAJOR).33 +LIBGTK2_SOURCE = gtk+-$(LIBGTK2_VERSION).tar.xz +LIBGTK2_SITE = http://ftp.gnome.org/pub/gnome/sources/gtk+/$(LIBGTK2_VERSION_MAJOR) +LIBGTK2_INSTALL_STAGING = YES +LIBGTK2_LICENSE = LGPL-2.0+ +LIBGTK2_LICENSE_FILES = COPYING +LIBGTK2_CPE_ID_VENDOR = gnome +LIBGTK2_CPE_ID_PRODUCT = gtk +# For 0001-reduce-dependencies.patch +LIBGTK2_AUTORECONF = YES + +LIBGTK2_CONF_ENV = \ + ac_cv_path_GTK_UPDATE_ICON_CACHE=$(HOST_DIR)/bin/gtk-update-icon-cache \ + ac_cv_path_GDK_PIXBUF_CSOURCE=$(HOST_DIR)/bin/gdk-pixbuf-csource \ + DB2HTML=false + +LIBGTK2_CONF_OPTS = --disable-glibtest --enable-explicit-deps=no + +LIBGTK2_DEPENDENCIES = host-pkgconf host-libgtk2 libglib2 cairo pango atk \ + gdk-pixbuf $(TARGET_NLS_DEPENDENCIES) + +LIBGTK2_MAKE_OPTS = LIBS=$(TARGET_NLS_LIBS) + +# Xorg dependencies +LIBGTK2_CONF_OPTS += \ + --with-x \ + --x-includes=$(STAGING_DIR)/usr/include/X11 \ + --x-libraries=$(STAGING_DIR)/usr/lib \ + --with-gdktarget=x11 +LIBGTK2_DEPENDENCIES += \ + fontconfig xlib_libX11 xlib_libXext xlib_libXrender + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +LIBGTK2_CONF_OPTS += --enable-introspection +LIBGTK2_DEPENDENCIES += gobject-introspection +else +LIBGTK2_CONF_OPTS += --disable-introspection +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXINERAMA),y) +LIBGTK2_CONF_OPTS += --enable-xinerama +LIBGTK2_DEPENDENCIES += xlib_libXinerama +else +LIBGTK2_CONF_OPTS += --disable-xinerama +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXI),y) +LIBGTK2_CONF_OPTS += --with-xinput=yes +LIBGTK2_DEPENDENCIES += xlib_libXi +else +LIBGTK2_CONF_OPTS += --with-xinput=no +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXRANDR),y) +LIBGTK2_DEPENDENCIES += xlib_libXrandr +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXCURSOR),y) +LIBGTK2_DEPENDENCIES += xlib_libXcursor +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXFIXES),y) +LIBGTK2_DEPENDENCIES += xlib_libXfixes +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXCOMPOSITE),y) +LIBGTK2_DEPENDENCIES += xlib_libXcomposite +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXDAMAGE),y) +LIBGTK2_DEPENDENCIES += xlib_libXdamage +endif + +ifeq ($(BR2_PACKAGE_LIBPNG),y) +LIBGTK2_DEPENDENCIES += libpng +else +LIBGTK2_CONF_OPTS += --without-libpng +endif + +ifeq ($(BR2_PACKAGE_JPEG),y) +LIBGTK2_DEPENDENCIES += jpeg +else +LIBGTK2_CONF_OPTS += --without-libjpeg +endif + +ifeq ($(BR2_PACKAGE_TIFF),y) +LIBGTK2_DEPENDENCIES += tiff +else +LIBGTK2_CONF_OPTS += --without-libtiff +endif + +ifeq ($(BR2_PACKAGE_CUPS),y) +LIBGTK2_CONF_OPTS += CUPS_CONFIG="$(STAGING_DIR)/usr/bin/cups-config" +LIBGTK2_DEPENDENCIES += cups +else +LIBGTK2_CONF_OPTS += --disable-cups +endif + +ifeq ($(BR2_PACKAGE_LIBGTK2_DEMO),) +define LIBGTK2_POST_INSTALL_TWEAKS + rm -rf $(TARGET_DIR)/usr/share/gtk-2.0/demo $(TARGET_DIR)/usr/bin/gtk-demo +endef + +LIBGTK2_POST_INSTALL_TARGET_HOOKS += LIBGTK2_POST_INSTALL_TWEAKS +endif + +# We do not build a full version of libgtk2 for the host, because that +# requires compiling Cairo, Pango, ATK and X.org for the +# host. Therefore, we patch it to remove dependencies, and we hack the +# build to only build gdk-pixbuf-from-source and +# gtk-update-icon-cache, which are the host tools needed to build Gtk +# for the target. + +HOST_LIBGTK2_DEPENDENCIES = host-libglib2 host-libpng host-gdk-pixbuf +HOST_LIBGTK2_CONF_OPTS = \ + --disable-static \ + --disable-glibtest \ + --without-libtiff \ + --without-libjpeg \ + --with-gdktarget=none \ + --disable-cups + +define HOST_LIBGTK2_BUILD_CMDS + $(HOST_MAKE_ENV) make -C $(@D)/gtk gtk-update-icon-cache +endef + +define HOST_LIBGTK2_INSTALL_CMDS + cp $(@D)/gtk/gtk-update-icon-cache $(HOST_DIR)/bin +endef + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libgtk3/0001-no-gtk-doc.patch b/package/libgtk3/0001-no-gtk-doc.patch new file mode 100644 index 00000000..e1d32080 --- /dev/null +++ b/package/libgtk3/0001-no-gtk-doc.patch @@ -0,0 +1,25 @@ +Same patch as for systemd in commit +http://git.buildroot.net/buildroot/commit/?id=7144f2f04b70553 + +Fix deactivation of gtk-doc + +The tarball contains the Makefile for building documentation with gtk-doc, +Unfortunately the AM_CONDITIONAL variable is not the correct one, which +results in an error when running autoreconf. + +This patch fixes this issue. + +Signed-off-by: Eric Le Bihan +Signed-off-by: Hadrien Boutteville + +--- a/gtk-doc.make ++++ b/gtk-doc.make +@@ -300,7 +300,7 @@ + # + # Require gtk-doc when making dist + # +-if HAVE_GTK_DOC ++if ENABLE_GTK_DOC + dist-check-gtkdoc: docs + else + dist-check-gtkdoc: diff --git a/package/libgtk3/0002-fix-introspection-check.patch b/package/libgtk3/0002-fix-introspection-check.patch new file mode 100644 index 00000000..450505c9 --- /dev/null +++ b/package/libgtk3/0002-fix-introspection-check.patch @@ -0,0 +1,28 @@ +Fix HAVE_INTROSPECTION does not appear in AM_CONDITIONAL + +During autoreconf GOBJECT_INTROSPECTION_CHECK could not be resolved because we +don't have introspection which provides its custom m4 macro. Reconfigure fails +with: + +gdk/Makefile.am:196: error: HAVE_INTROSPECTION does not appear in AM_CONDITIONAL +gtk/Makefile.am:1347: error: HAVE_INTROSPECTION does not appear in AM_CONDITIONAL + +We avoid to add a copy of introspection.m4 in the m4 directory of libgtk3 by +adding a check, as performed in Systemd. + +Signed-off-by: Hadrien Boutteville + +--- a/configure.ac ++++ b/configure.ac +@@ -1650,7 +1650,10 @@ + # GObject introspection + ################################################## + +-GOBJECT_INTROSPECTION_CHECK(introspection_required_version) ++m4_ifdef([GOBJECT_INTROSPECTION_CHECK], ++ [GOBJECT_INTROSPECTION_CHECK(introspection_required_version)], ++ [AM_CONDITIONAL([HAVE_INTROSPECTION], [false]) ++ enable_introspection=no]) + + ################################################## + # colord module diff --git a/package/libgtk3/0003-disable-atk-bridge.patch b/package/libgtk3/0003-disable-atk-bridge.patch new file mode 100644 index 00000000..42de83b5 --- /dev/null +++ b/package/libgtk3/0003-disable-atk-bridge.patch @@ -0,0 +1,45 @@ +Remove atk-bridge support. + +atk-bridge doesn't seem useful for now in Buildroot and requires to +add two new packages just for it: at-spi2-core and at-spi2-atk. + +Signed-off-by: Hadrien Boutteville + +--- a/configure.ac ++++ b/configure.ac +@@ -1364,11 +1364,7 @@ + # Check for Accessibility Toolkit flags + ######################################## + +-if test x$enable_x11_backend = xyes; then +- ATK_PACKAGES="atk atk-bridge-2.0" +-else +- ATK_PACKAGES="atk" +-fi ++ATK_PACKAGES="atk" + + PKG_CHECK_MODULES(ATK, $ATK_PACKAGES) + +--- a/gtk/a11y/gtkaccessibility.c ++++ b/gtk/a11y/gtkaccessibility.c +@@ -37,10 +37,6 @@ + #include + #include + +-#ifdef GDK_WINDOWING_X11 +-#include +-#endif +- + static gboolean gail_focus_watcher (GSignalInvocationHint *ihint, + guint n_param_values, + const GValue *param_values, +@@ -988,9 +984,5 @@ + _gtk_accessibility_override_atk_util (); + do_window_event_initialization (); + +-#ifdef GDK_WINDOWING_X11 +- atk_bridge_adaptor_init (NULL, NULL); +-#endif +- + atk_misc_instance = g_object_new (GTK_TYPE_MISC_IMPL, NULL); + } diff --git a/package/libgtk3/0004-Remove-Gdk-dependency-from-gtk-encode-symbolic-svg.patch b/package/libgtk3/0004-Remove-Gdk-dependency-from-gtk-encode-symbolic-svg.patch new file mode 100644 index 00000000..cea4259b --- /dev/null +++ b/package/libgtk3/0004-Remove-Gdk-dependency-from-gtk-encode-symbolic-svg.patch @@ -0,0 +1,105 @@ +From 4d09ff324419fe4e671233044e424378da53969b Mon Sep 17 00:00:00 2001 +From: Jussi Kukkonen +Date: Tue, 9 Jun 2015 14:20:30 +0300 +Subject: [PATCH] Remove Gdk-dependency from gtk-encode-symbolic-svg + +Building gtk-encode-symbolic-svg without building Gdk is useful +as only the icon tools are needed on the native build: this makes +native build much faster and requires much less dependencies. + +Upstream-Status: Pending + +Signed-off-by: Jussi Kukkonen +Signed-off-by: Gustavo Zacarias +--- +Patch status: taken from yocto, upstream pending + + gtk/encodesymbolic.c | 36 ++++++++++-------------------------- + 1 file changed, 10 insertions(+), 26 deletions(-) + +diff --git a/gtk/encodesymbolic.c b/gtk/encodesymbolic.c +index 9f7d015..1f07563 100644 +--- a/gtk/encodesymbolic.c ++++ b/gtk/encodesymbolic.c +@@ -19,7 +19,6 @@ + + #include + #include +-#include + #include + + #ifdef HAVE_UNISTD_H +@@ -43,30 +42,18 @@ static GdkPixbuf * + load_symbolic_svg (char *file_data, gsize file_len, + int width, + int height, +- const GdkRGBA *fg, +- const GdkRGBA *success_color, +- const GdkRGBA *warning_color, +- const GdkRGBA *error_color, ++ const char *css_fg, ++ const char *css_success, ++ const char *css_warning, ++ const char *css_error, + GError **error) + { + GInputStream *stream; + GdkPixbuf *pixbuf; +- gchar *css_fg; +- gchar *css_success; +- gchar *css_warning; +- gchar *css_error; + gchar *data; + gchar *svg_width, *svg_height; + gchar *escaped_file_data; + +- css_fg = gdk_rgba_to_string (fg); +- +- css_success = css_warning = css_error = NULL; +- +- css_warning = gdk_rgba_to_string (warning_color); +- css_error = gdk_rgba_to_string (error_color); +- css_success = gdk_rgba_to_string (success_color); +- + /* Fetch size from the original icon */ + stream = g_memory_input_stream_new_from_data (file_data, file_len, NULL); + pixbuf = gdk_pixbuf_new_from_stream (stream, NULL, error); +@@ -105,10 +92,6 @@ load_symbolic_svg (char *file_data, gsize file_len, + "", + NULL); + g_free (escaped_file_data); +- g_free (css_fg); +- g_free (css_warning); +- g_free (css_error); +- g_free (css_success); + g_free (svg_width); + g_free (svg_height); + +@@ -167,7 +150,8 @@ make_symbolic_pixbuf (char *file, + GError **error) + + { +- GdkRGBA r = { 1,0,0,1}, g = {0,1,0,1}; ++ const char r[] = "rgba(255,0,0,1)"; ++ const char g[] = "rgba(0,255,0,1)"; + GdkPixbuf *loaded; + GdkPixbuf *pixbuf; + int plane; +@@ -196,10 +180,10 @@ make_symbolic_pixbuf (char *file, + * the "rest", as all color fractions should add up to 1. + */ + loaded = load_symbolic_svg (file_data, file_len, width, height, +- &g, +- plane == 0 ? &r : &g, +- plane == 1 ? &r : &g, +- plane == 2 ? &r : &g, ++ g, ++ plane == 0 ? r : g, ++ plane == 1 ? r : g, ++ plane == 2 ? r : g, + error); + if (loaded == NULL) + return NULL; +-- +2.1.4 + diff --git a/package/libgtk3/Config.in b/package/libgtk3/Config.in new file mode 100644 index 00000000..093aacac --- /dev/null +++ b/package/libgtk3/Config.in @@ -0,0 +1,110 @@ +comment "libgtk3 needs a toolchain w/ wchar, threads, C++, gcc >= 4.8" + depends on BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_USE_WCHAR || !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 || \ + !BR2_TOOLCHAIN_HAS_THREADS + +comment "libgtk3 needs an OpenGL or an OpenGL-EGL/wayland backend" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_PACKAGE_HAS_LIBEGL_WAYLAND && \ + !BR2_PACKAGE_HAS_LIBGL + +config BR2_PACKAGE_LIBGTK3 + bool "libgtk3" + depends on BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS # host-libgtk3 -> host-librsvg + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + depends on BR2_INSTALL_LIBSTDCPP # pango + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # pango -> harfbuzz + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # pango -> harfbuzz + depends on BR2_PACKAGE_HAS_LIBEGL_WAYLAND || \ + BR2_PACKAGE_HAS_LIBGL + select BR2_PACKAGE_ATK + select BR2_PACKAGE_CAIRO + select BR2_PACKAGE_CAIRO_PS + select BR2_PACKAGE_CAIRO_PDF + select BR2_PACKAGE_CAIRO_SVG + select BR2_PACKAGE_LIBEPOXY + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_PANGO + select BR2_PACKAGE_GDK_PIXBUF + # At least one backend is required + select BR2_PACKAGE_LIBGTK3_BROADWAY if \ + !(BR2_PACKAGE_LIBGTK3_X11 || BR2_PACKAGE_LIBGTK3_WAYLAND) + help + The GTK+ version 3 graphical user interface library + + https://www.gtk.org/ + +if BR2_PACKAGE_LIBGTK3 + +config BR2_PACKAGE_LIBGTK3_BROADWAY + bool "Broadway GDK backend" + default y + help + This enables the Broadway backend for GDK, which provides + support for displaying GTK+ applications in a web browser, + using HTML5 and web sockets. + + For example, to run gtk3-demo on a target which IP address is + 192.168.0.1 and use it from a web browser, execute the + following commands: + + $ broadwayd -a 192.168.0.1 -p 8080 :2 & + $ export GDK_BACKEND=broadway + $ export BROADWAY_DISPLAY=:2 + $ gtk3-demo + + Then open a web browser at address http://192.168.0.1:8080. + Javascript and web sockets should be enabled. + +comment "Wayland GDK backend needs an OpenGL EGL backend provided by mesa3d w/ headers >= 3.17" + depends on !BR2_PACKAGE_MESA3D_OPENGL_EGL || \ + !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 + +config BR2_PACKAGE_LIBGTK3_WAYLAND + bool "Wayland GDK backend" + default y + depends on BR2_PACKAGE_HAS_LIBEGL_WAYLAND + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 + select BR2_PACKAGE_WAYLAND + select BR2_PACKAGE_WAYLAND_PROTOCOLS + select BR2_PACKAGE_LIBXKBCOMMON + help + This enables the Wayland backend for GDK. + +comment "X11 GDK backend needs an OpenGL provider" + depends on !BR2_PACKAGE_HAS_LIBGL + +config BR2_PACKAGE_LIBGTK3_X11 + bool "X11 GDK backend" + default y + depends on BR2_PACKAGE_XORG7 + depends on BR2_PACKAGE_HAS_LIBGL + select BR2_PACKAGE_FONTCONFIG + select BR2_PACKAGE_XLIB_LIBX11 + select BR2_PACKAGE_XLIB_LIBXEXT + select BR2_PACKAGE_XLIB_LIBXRENDER + select BR2_PACKAGE_XLIB_LIBXI + help + This enables the X11 backend for GDK. + +config BR2_PACKAGE_LIBGTK3_DEMO + bool "Install libgtk3 demo program" + select BR2_PACKAGE_SHARED_MIME_INFO + select BR2_PACKAGE_HICOLOR_ICON_THEME + help + The GTK+ source base contains a demo program. This + option allows to install this program to the target. + +config BR2_PACKAGE_LIBGTK3_TESTS + bool "Install libgtk3 tests" + help + The GTK+ source base contains tests. This option + allows to install them to the target. + +endif diff --git a/package/libgtk3/libgtk3.hash b/package/libgtk3/libgtk3.hash new file mode 100644 index 00000000..14939986 --- /dev/null +++ b/package/libgtk3/libgtk3.hash @@ -0,0 +1,5 @@ +# From https://download.gnome.org/sources/gtk+/3.24/gtk+-3.24.30.sha256sum +sha256 ba75bfff320ad1f4cfbee92ba813ec336322cc3c660d406aad014b07087a3ba9 gtk+-3.24.30.tar.xz + +# Hash for license file: +sha256 b7993225104d90ddd8024fd838faf300bea5e83d91203eab98e29512acebd69c COPYING diff --git a/package/libgtk3/libgtk3.mk b/package/libgtk3/libgtk3.mk new file mode 100644 index 00000000..80a2affd --- /dev/null +++ b/package/libgtk3/libgtk3.mk @@ -0,0 +1,202 @@ +################################################################################ +# +# libgtk3 +# +################################################################################ + +LIBGTK3_VERSION_MAJOR = 3.24 +LIBGTK3_VERSION = $(LIBGTK3_VERSION_MAJOR).30 +LIBGTK3_SOURCE = gtk+-$(LIBGTK3_VERSION).tar.xz +LIBGTK3_SITE = http://ftp.gnome.org/pub/gnome/sources/gtk+/$(LIBGTK3_VERSION_MAJOR) +LIBGTK3_LICENSE = LGPL-2.0+ +LIBGTK3_LICENSE_FILES = COPYING +LIBGTK3_CPE_ID_VENDOR = gnome +LIBGTK3_CPE_ID_PRODUCT = gtk +LIBGTK3_INSTALL_STAGING = YES +LIBGTK3_AUTORECONF = YES + +LIBGTK3_CONF_ENV = \ + ac_cv_path_GTK_UPDATE_ICON_CACHE=$(HOST_DIR)/bin/gtk-update-icon-cache \ + ac_cv_path_GDK_PIXBUF_CSOURCE=$(HOST_DIR)/bin/gdk-pixbuf-csource \ + PKG_CONFIG_FOR_BUILD=$(HOST_DIR)/bin/pkgconf + +LIBGTK3_CONF_OPTS = \ + --disable-glibtest \ + --enable-explicit-deps=no +HOST_LIBGTK3_CONF_OPTS = --disable-introspection + +# Override pkg-config pkgdatadir variable, it needs the prefix +LIBGTK3_MAKE_OPTS = \ + WAYLAND_PROTOCOLS_DATADIR=$(STAGING_DIR)/usr/share/wayland-protocols \ + LIBS=$(TARGET_NLS_LIBS) + +LIBGTK3_DEPENDENCIES = host-pkgconf host-libgtk3 atk libglib2 cairo pango \ + gdk-pixbuf libepoxy $(TARGET_NLS_DEPENDENCIES) + +ifeq ($(BR2_PACKAGE_LIBGTK3_X11),y) +LIBGTK3_DEPENDENCIES += fontconfig xlib_libX11 xlib_libXext xlib_libXrender xlib_libXi + +LIBGTK3_CONF_OPTS += \ + --enable-x11-backend \ + --x-includes=$(STAGING_DIR)/usr/include/X11 \ + --x-libraries=$(STAGING_DIR)/usr/lib +else +LIBGTK3_CONF_OPTS += --disable-x11-backend +endif + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +LIBGTK3_CONF_OPTS += --enable-introspection +LIBGTK3_DEPENDENCIES += gobject-introspection +else +LIBGTK3_CONF_OPTS += --disable-introspection +endif + +ifeq ($(BR2_PACKAGE_LIBGTK3_WAYLAND),y) +LIBGTK3_DEPENDENCIES += wayland wayland-protocols libxkbcommon +LIBGTK3_CONF_OPTS += --enable-wayland-backend +else +LIBGTK3_CONF_OPTS += --disable-wayland-backend +endif + +ifeq ($(BR2_PACKAGE_LIBGTK3_BROADWAY),y) +LIBGTK3_CONF_OPTS += --enable-broadway-backend +else +LIBGTK3_CONF_OPTS += --disable-broadway-backend +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXINERAMA),y) +LIBGTK3_CONF_OPTS += --enable-xinerama +LIBGTK3_DEPENDENCIES += xlib_libXinerama +else +LIBGTK3_CONF_OPTS += --disable-xinerama +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXRANDR),y) +LIBGTK3_CONF_OPTS += --enable-xrandr +LIBGTK3_DEPENDENCIES += xlib_libXrandr +else +LIBGTK3_CONF_OPTS += --disable-xrandr +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXCURSOR),y) +LIBGTK3_DEPENDENCIES += xlib_libXcursor +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXFIXES),y) +LIBGTK3_CONF_OPTS += --enable-xfixes +LIBGTK3_DEPENDENCIES += xlib_libXfixes +else +LIBGTK3_CONF_OPTS += --disable-xfixes +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXCOMPOSITE),y) +LIBGTK3_CONF_OPTS += --enable-xcomposite +LIBGTK3_DEPENDENCIES += xlib_libXcomposite +else +LIBGTK3_CONF_OPTS += --disable-xcomposite +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXDAMAGE),y) +LIBGTK3_CONF_OPTS += --enable-xdamage +LIBGTK3_DEPENDENCIES += xlib_libXdamage +else +LIBGTK3_CONF_OPTS += --disable-xdamage +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXKBFILE),y) +LIBGTK3_CONF_OPTS += --enable-xkb +LIBGTK3_DEPENDENCIES += xlib_libxkbfile +else +LIBGTK3_CONF_OPTS += --disable-xkb +endif + +ifeq ($(BR2_PACKAGE_CUPS),y) +LIBGTK3_CONF_OPTS += --enable-cups +LIBGTK3_CONF_ENV += ac_cv_path_CUPS_CONFIG=$(STAGING_DIR)/usr/bin/cups-config +LIBGTK3_DEPENDENCIES += cups +else +LIBGTK3_CONF_OPTS += --disable-cups +endif + +ifeq ($(BR2_PACKAGE_LIBGTK3_DEMO),y) +LIBGTK3_DEPENDENCIES += hicolor-icon-theme shared-mime-info +else +define LIBGTK3_REMOVE_DEMOS + $(RM) $(TARGET_DIR)/usr/bin/gtk3-demo \ + $(TARGET_DIR)/usr/bin/gtk3-demo-application +endef +LIBGTK3_POST_INSTALL_TARGET_HOOKS += LIBGTK3_REMOVE_DEMOS +endif + +ifeq ($(BR2_PACKAGE_LIBGTK3_TESTS),y) +LIBGTK3_CONF_OPTS += --enable-installed-tests +else +LIBGTK3_CONF_OPTS += --disable-installed-tests +endif + +define LIBGTK3_COMPILE_GLIB_SCHEMAS + $(HOST_DIR)/bin/glib-compile-schemas \ + $(TARGET_DIR)/usr/share/glib-2.0/schemas +endef + +LIBGTK3_POST_INSTALL_TARGET_HOOKS += LIBGTK3_COMPILE_GLIB_SCHEMAS + +# gtk+ >= 3.10 can build a native version of gtk-update-icon-cache if +# --enable-gtk2-dependency=no is set when invoking './configure'. +# +# Unfortunately, if the target toolchain is based on uClibc, the macro +# AM_GLIB_GNU_GETTEXT will detect the libintl built for the target and +# will add '-lintl' to the default list of libraries for the linker (used +# for both native and target builds). +# +# But no native version of libintl is available (the functions are +# provided by glibc). So gtk-update-icon-cache will not build. +# +# As a workaround, we build gtk-update-icon-cache on our own, set +# --enable-gtk2-dependency=yes and force './configure' to use our version. + +HOST_LIBGTK3_DEPENDENCIES = \ + host-libglib2 \ + host-libpng \ + host-gdk-pixbuf \ + host-pkgconf \ + host-librsvg + +HOST_LIBGTK3_CFLAGS = \ + `$(HOST_MAKE_ENV) $(PKG_CONFIG_HOST_BINARY) --cflags --libs gdk-pixbuf-2.0` \ + `$(HOST_MAKE_ENV) $(PKG_CONFIG_HOST_BINARY) --cflags --libs gio-2.0` + +define HOST_LIBGTK3_CONFIGURE_CMDS + echo "#define GETTEXT_PACKAGE \"gtk30\"" >> $(@D)/gtk/config.h + echo "#define HAVE_UNISTD_H 1" >> $(@D)/gtk/config.h + echo "#define HAVE_FTW_H 1" >> $(@D)/gtk/config.h +endef + +define HOST_LIBGTK3_BUILD_CMDS + $(HOSTCC) $(HOST_CFLAGS) $(HOST_LDFLAGS) \ + $(@D)/gtk/updateiconcache.c \ + $(HOST_LIBGTK3_CFLAGS) \ + -o $(@D)/gtk/gtk-update-icon-cache + $(HOSTCC) $(HOST_CFLAGS) $(HOST_LDFLAGS) \ + $(@D)/gtk/encodesymbolic.c \ + $(HOST_LIBGTK3_CFLAGS) \ + -o $(@D)/gtk/gtk-encode-symbolic-svg +endef + +define HOST_LIBGTK3_INSTALL_CMDS + $(INSTALL) -D -m 0755 $(@D)/gtk/gtk-update-icon-cache \ + $(HOST_DIR)/bin/gtk-update-icon-cache + $(INSTALL) -D -m 0755 $(@D)/gtk/gtk-encode-symbolic-svg \ + $(HOST_DIR)/bin/gtk-encode-symbolic-svg +endef + +# Create icon-theme.cache for each of the icon directories/themes +# It's not strictly necessary but speeds up lookups +define LIBGTK3_UPDATE_ICON_CACHE + find $(TARGET_DIR)/usr/share/icons -maxdepth 1 -mindepth 1 -type d \ + -exec $(HOST_DIR)/bin/gtk-update-icon-cache {} \; +endef +LIBGTK3_TARGET_FINALIZE_HOOKS += LIBGTK3_UPDATE_ICON_CACHE + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libgudev/Config.in b/package/libgudev/Config.in new file mode 100644 index 00000000..21606ac4 --- /dev/null +++ b/package/libgudev/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_LIBGUDEV + bool "libgudev" + depends on BR2_PACKAGE_HAS_UDEV + depends on BR2_USE_WCHAR # gettext + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBGLIB2 + help + This library provides GObject bindings for libudev. It was + originally part of udev-extras, then udev, then systemd. + It's now a project on its own. Required for building some + programs that use udev, when using systemd. + + https://wiki.gnome.org/Projects/libgudev + +comment "libgudev needs udev /dev handling and a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_PACKAGE_HAS_UDEV diff --git a/package/libgudev/libgudev.hash b/package/libgudev/libgudev.hash new file mode 100644 index 00000000..bee39460 --- /dev/null +++ b/package/libgudev/libgudev.hash @@ -0,0 +1,5 @@ +# From http://ftp.gnome.org/pub/GNOME/sources/libgudev/233/libgudev-233.sha256sum +sha256 587c4970eb23f4e2deee2cb1fb7838c94a78c578f41ce12cac0a3f4a80dabb03 libgudev-233.tar.xz + +# Hash for license file: +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/libgudev/libgudev.mk b/package/libgudev/libgudev.mk new file mode 100644 index 00000000..9aa64c2c --- /dev/null +++ b/package/libgudev/libgudev.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# libgudev +# +################################################################################ + +LIBGUDEV_VERSION = 233 +LIBGUDEV_SOURCE = libgudev-$(LIBGUDEV_VERSION).tar.xz +LIBGUDEV_SITE = http://ftp.gnome.org/pub/GNOME/sources/libgudev/$(LIBGUDEV_VERSION) +LIBGUDEV_INSTALL_STAGING = YES +LIBGUDEV_DEPENDENCIES = host-pkgconf udev libglib2 +LIBGUDEV_LICENSE = LGPL-2.1+ +LIBGUDEV_LICENSE_FILES = COPYING +LIBGUDEV_CONF_OPTS = --disable-umockdev + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +LIBGUDEV_CONF_OPTS += --enable-introspection +LIBGUDEV_DEPENDENCIES += gobject-introspection +else +LIBGUDEV_CONF_OPTS += --disable-introspection +endif + +$(eval $(autotools-package)) diff --git a/package/libhdhomerun/0001-dont-strip.patch b/package/libhdhomerun/0001-dont-strip.patch new file mode 100644 index 00000000..17a9ff49 --- /dev/null +++ b/package/libhdhomerun/0001-dont-strip.patch @@ -0,0 +1,18 @@ +Disable strip in Makefile. + +Patch downloaded from Gentoo: +https://gitweb.gentoo.org/repo/gentoo.git/tree/media-libs/libhdhomerun/files/dont-strip.patch + +Signed-off-by: Bernd Kuhls + +diff -Nur libhdhomerun/Makefile libhdhomerun.fix/Makefile +--- libhdhomerun/Makefile 2012-08-30 15:46:27.000000000 -0500 ++++ libhdhomerun.fix/Makefile 2013-03-24 14:47:08.740937164 -0500 +@@ -42,7 +42,6 @@ + + hdhomerun_config$(BINEXT) : hdhomerun_config.c $(LIBSRCS) + $(CC) $(CFLAGS) $+ $(LDFLAGS) -o $@ +- $(STRIP) $@ + + libhdhomerun$(LIBEXT) : $(LIBSRCS) + $(CC) $(CFLAGS) -fPIC -DDLL_EXPORT $(SHARED) $+ $(LDFLAGS) -o $@ diff --git a/package/libhdhomerun/Config.in b/package/libhdhomerun/Config.in new file mode 100644 index 00000000..9425c1b1 --- /dev/null +++ b/package/libhdhomerun/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LIBHDHOMERUN + bool "libhdhomerun" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + help + HDHomeRun is a network-attached digital television tuner + box, produced by the company SiliconDust USA, Inc. + + http://www.silicondust.com + +comment "libhdhomerun needs a toolchain w/ threads, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/libhdhomerun/libhdhomerun.hash b/package/libhdhomerun/libhdhomerun.hash new file mode 100644 index 00000000..d5ff494a --- /dev/null +++ b/package/libhdhomerun/libhdhomerun.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 cbaeb779c5a4e07db45310ef4271872bcb7c472402ebc3c58e224653c09400ed libhdhomerun_20200907.tgz +sha256 9b872a8a070b8ad329c4bd380fb1bf0000f564c75023ec8e1e6803f15364b9e9 LICENSE diff --git a/package/libhdhomerun/libhdhomerun.mk b/package/libhdhomerun/libhdhomerun.mk new file mode 100644 index 00000000..42d4de26 --- /dev/null +++ b/package/libhdhomerun/libhdhomerun.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# libhdhomerun +# +################################################################################ + +LIBHDHOMERUN_VERSION = 20200907 +LIBHDHOMERUN_SOURCE = libhdhomerun_$(LIBHDHOMERUN_VERSION).tgz +LIBHDHOMERUN_SITE = http://download.silicondust.com/hdhomerun +LIBHDHOMERUN_LICENSE = LGPL-2.1+ +LIBHDHOMERUN_LICENSE_FILES = LICENSE +LIBHDHOMERUN_INSTALL_STAGING = YES + +define LIBHDHOMERUN_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) \ + CROSS_COMPILE="$(TARGET_CROSS)" -C $(@D) +endef + +define LIBHDHOMERUN_INSTALL_STAGING_CMDS + $(INSTALL) -D -m 0755 $(@D)/libhdhomerun.so \ + $(STAGING_DIR)/usr/lib/libhdhomerun.so + mkdir -p $(STAGING_DIR)/usr/include/libhdhomerun/ + $(INSTALL) -m 0644 $(@D)/*.h \ + $(STAGING_DIR)/usr/include/libhdhomerun/ +endef + +define LIBHDHOMERUN_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/libhdhomerun.so \ + $(TARGET_DIR)/usr/lib/libhdhomerun.so +endef + +$(eval $(generic-package)) diff --git a/package/libhid/0001-dont-fiddle-with-debug-flags.patch b/package/libhid/0001-dont-fiddle-with-debug-flags.patch new file mode 100644 index 00000000..44a17287 --- /dev/null +++ b/package/libhid/0001-dont-fiddle-with-debug-flags.patch @@ -0,0 +1,19 @@ +MD_CONF_DEBUGGING changes CFLAGS and CXXFLAGS with a horrible magic so disable +it to prevent compilation errors. + +downloaded from +http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/dev-libs/libhid/files/libhid-0.2.16-gentoo.patch?revision=1.1&view=markup + +Signed-off-by: Bernd Kuhls + +diff -uNr libhid-0.2.16.org/configure.ac libhid-0.2.16/configure.ac +--- libhid-0.2.16.org/configure.ac 2007-04-01 22:32:10.000000000 +0200 ++++ libhid-0.2.16/configure.ac 2014-10-19 21:31:00.550091947 +0200 +@@ -78,7 +78,6 @@ + AC_C_BIGENDIAN + AC_C_STRINGIZE + +-MD_CONF_DEBUGGING + MD_CONF_COMPILER + AM_CONDITIONAL(OS_LINUX, test "$MD_OS" = "linux") + AM_CONDITIONAL(OS_BSD, test "$MD_OS" = "bsd") diff --git a/package/libhid/0002-no-newline-in-ldflags.patch b/package/libhid/0002-no-newline-in-ldflags.patch new file mode 100644 index 00000000..df845ee1 --- /dev/null +++ b/package/libhid/0002-no-newline-in-ldflags.patch @@ -0,0 +1,22 @@ +Fix improper usage of macro that introduces a wrong newline + +The MD_CONF_FLAGS() macro was used with a final newline that +introduces an invalid newline in the middle of the macro expansion +when defining LDFLAGS. + +Signed-off-by: Thomas Petazzoni + +Index: libhid-0.2.16/configure.ac +=================================================================== +--- libhid-0.2.16.orig/configure.ac 2007-04-01 22:32:10.000000000 +0200 ++++ libhid-0.2.16/configure.ac 2012-12-12 20:24:03.000000000 +0100 +@@ -102,8 +102,7 @@ + [], + [$OS_CFLAGS $LIBUSB_CFLAGS], + [], +- [$OS_LDFLAGS $LIBUSB_LIBS] +-) ++ [$OS_LDFLAGS $LIBUSB_LIBS]) + + MD_CONF_DB2MAN + diff --git a/package/libhid/0003-uclinux.patch b/package/libhid/0003-uclinux.patch new file mode 100644 index 00000000..cb3c4521 --- /dev/null +++ b/package/libhid/0003-uclinux.patch @@ -0,0 +1,27 @@ +Good old 'uclinux is also linux' + +Signed-off-by: Gustavo Zacarias + +diff -Nura libhid-0.2.16.orig/configure.ac libhid-0.2.16/configure.ac +--- libhid-0.2.16.orig/configure.ac 2014-06-22 09:35:50.277261742 -0300 ++++ libhid-0.2.16/configure.ac 2014-06-22 09:36:10.688951947 -0300 +@@ -80,6 +80,7 @@ + + MD_CONF_DEBUGGING + MD_CONF_COMPILER ++AM_CONDITIONAL(OS_LINUX, test "$MD_OS" = "uclinux") + AM_CONDITIONAL(OS_LINUX, test "$MD_OS" = "linux") + AM_CONDITIONAL(OS_BSD, test "$MD_OS" = "bsd") + AM_CONDITIONAL(OS_SOLARIS, test "$MD_OS" = "solaris") +diff -Nura libhid-0.2.16.orig/m4/md_check_os.m4 libhid-0.2.16/m4/md_check_os.m4 +--- libhid-0.2.16.orig/m4/md_check_os.m4 2014-06-22 09:35:50.275261675 -0300 ++++ libhid-0.2.16/m4/md_check_os.m4 2014-06-22 09:46:17.651475891 -0300 +@@ -3,7 +3,7 @@ + AC_CANONICAL_HOST + AC_MSG_CHECKING(for target OS) + case $host in +- *-linux*) ++ *-linux*|*-uclinux*) + AC_DEFINE(OS_LINUX, [], [define to 1 if building for Linux]) + AC_SUBST(OS_LINUX) + MD_OS=linux diff --git a/package/libhid/Config.in b/package/libhid/Config.in new file mode 100644 index 00000000..abf338fd --- /dev/null +++ b/package/libhid/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_LIBHID + bool "libhid" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_LIBUSB_COMPAT + help + Userspace library for accessing USB HID devices + + https://directory.fsf.org/wiki/Libhid + +comment "libhid needs a toolchain w/ threads, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/libhid/libhid.hash b/package/libhid/libhid.hash new file mode 100644 index 00000000..933ba22a --- /dev/null +++ b/package/libhid/libhid.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 f6809ab3b9c907cbb05ceba9ee6ca23a705f85fd71588518e14b3a7d9f2550e5 libhid-0.2.16.tar.gz +sha256 231f7edcc7352d7734a96eef0b8030f77982678c516876fcb81e25b32d68564c COPYING diff --git a/package/libhid/libhid.mk b/package/libhid/libhid.mk new file mode 100644 index 00000000..b2e890c3 --- /dev/null +++ b/package/libhid/libhid.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# libhid +# +################################################################################ + +LIBHID_VERSION = 0.2.16 +LIBHID_SITE = http://sources.buildroot.net +LIBHID_DEPENDENCIES = libusb-compat libusb +LIBHID_INSTALL_STAGING = YES +LIBHID_AUTORECONF = YES +LIBHID_LICENSE = GPL-2.0 +LIBHID_LICENSE_FILES = COPYING +# configure runs libusb-config for cflags/ldflags. Ensure it picks up +# the target version +LIBHID_CONF_ENV = PATH=$(STAGING_DIR)/usr/bin:$(BR_PATH) +LIBHID_CONF_OPTS = \ + --disable-swig \ + --disable-werror \ + --without-doxygen \ + --disable-package-config + +$(eval $(autotools-package)) diff --git a/package/libhtp/Config.in b/package/libhtp/Config.in new file mode 100644 index 00000000..98b9e2ad --- /dev/null +++ b/package/libhtp/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LIBHTP + bool "libhtp" + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + select BR2_PACKAGE_ZLIB + help + LibHTP is a security-aware parser for the HTTP protocol and + the related bits and pieces. + + https://github.com/OISF/libhtp diff --git a/package/libhtp/libhtp.hash b/package/libhtp/libhtp.hash new file mode 100644 index 00000000..91c20697 --- /dev/null +++ b/package/libhtp/libhtp.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 8365f338fdf5ef0f3b37f3cb4e2670d218c843eccc42aa87119819c0f018ef39 libhtp-0.5.38.tar.gz +sha256 87c93904e5434c81622ea690c2b90097b9f162aaa92a96542649a157dbf98d15 LICENSE diff --git a/package/libhtp/libhtp.mk b/package/libhtp/libhtp.mk new file mode 100644 index 00000000..982ffe81 --- /dev/null +++ b/package/libhtp/libhtp.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# libhtp +# +################################################################################ + +LIBHTP_VERSION = 0.5.38 +LIBHTP_SITE = $(call github,OISF,libhtp,$(LIBHTP_VERSION)) +LIBHTP_LICENSE = BSD-3-Clause +LIBHTP_LICENSE_FILES = LICENSE +LIBHTP_DEPENDENCIES = \ + $(if $(BR2_PACKAGE_LIBICONV),libiconv) \ + zlib +LIBHTP_INSTALL_STAGING = YES +# From git +LIBHTP_AUTORECONF = YES + +# Let our gcc/wrapper handle SSP +LIBHTP_CONF_ENV = NO_STACK_PROTECTOR=true + +$(eval $(autotools-package)) diff --git a/package/libhttpparser/Config.in b/package/libhttpparser/Config.in new file mode 100644 index 00000000..43563049 --- /dev/null +++ b/package/libhttpparser/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_LIBHTTPPARSER + bool "libhttpparser" + depends on !BR2_STATIC_LIBS + help + This is a parser for HTTP messages written in C. It + parses both requests and responses. The parser is + designed to be used in performance HTTP applications. + It does not make any syscalls nor allocations, it does + not buffer data, it can be interrupted at anytime. + Depending on your architecture, it only requires about + 40 bytes of data per message stream (in a web server + that is per connection). + + https://github.com/nodejs/http-parser + +comment "libhttpparser needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/libhttpparser/libhttpparser.hash b/package/libhttpparser/libhttpparser.hash new file mode 100644 index 00000000..6ab63e82 --- /dev/null +++ b/package/libhttpparser/libhttpparser.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 467b9e30fd0979ee301065e70f637d525c28193449e1b13fbcb1b1fab3ad224f libhttpparser-2.9.4.tar.gz +sha256 79e6ba8b687cb54786207342b9b6fcee0ac10218453ed9009b84d949b2233cc0 LICENSE-MIT diff --git a/package/libhttpparser/libhttpparser.mk b/package/libhttpparser/libhttpparser.mk new file mode 100644 index 00000000..5cf7f773 --- /dev/null +++ b/package/libhttpparser/libhttpparser.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# libhttpparser +# +################################################################################ + +LIBHTTPPARSER_VERSION = 2.9.4 +LIBHTTPPARSER_SITE = $(call github,nodejs,http-parser,v$(LIBHTTPPARSER_VERSION)) +LIBHTTPPARSER_INSTALL_STAGING = YES +LIBHTTPPARSER_LICENSE = MIT +LIBHTTPPARSER_LICENSE_FILES = LICENSE-MIT + +define LIBHTTPPARSER_BUILD_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) library package +endef + +define LIBHTTPPARSER_INSTALL_STAGING_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) PREFIX=$(STAGING_DIR)/usr install + $(INSTALL) -D -m 0644 $(@D)/libhttp_parser.a $(STAGING_DIR)/usr/lib/libhttp_parser.a +endef + +define LIBHTTPPARSER_INSTALL_TARGET_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) PREFIX=$(TARGET_DIR)/usr install +endef + +define HOST_LIBHTTPPARSER_BUILD_CMDS + $(MAKE) $(HOST_CONFIGURE_OPTS) -C $(@D) library package +endef + +define HOST_LIBHTTPPARSER_INSTALL_CMDS + $(MAKE) $(HOST_CONFIGURE_OPTS) -C $(@D) PREFIX=$(HOST_DIR) install +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/libhttpserver/0001-Compatibility-with-libmicrohttpd-0.9.71.patch b/package/libhttpserver/0001-Compatibility-with-libmicrohttpd-0.9.71.patch new file mode 100644 index 00000000..f982ee7a --- /dev/null +++ b/package/libhttpserver/0001-Compatibility-with-libmicrohttpd-0.9.71.patch @@ -0,0 +1,240 @@ +From cfcd8a8f73aa337e8f45d287a79cd9b8e5c51dcd Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Sun, 5 Jul 2020 11:42:23 +0200 +Subject: [PATCH] Compatibility with libmicrohttpd 0.9.71 + +From the libmicrohttpd 0.9.71 release notes: + +Furthermore, the release introduces an 'enum MHD_Result' instead of +defines for MHD_YES/MHD_NO. This is intended to make it easier to check +for certain API misuse bugs by providing better types (not everything is +an 'int'). While this does NOT change the binary API, this change +_will_ cause compiler warnings for all legacy code -- until 'int' is +replaced with 'enum MHD_Result' + +Patch sent upstream: https://github.com/etr/libhttpserver/pull/199 + +Signed-off-by: Bernd Kuhls +--- + src/http_request.cpp | 6 +++--- + src/httpserver/http_request.hpp | 6 +++--- + src/httpserver/http_utils.hpp | 4 ++++ + src/httpserver/webserver.hpp | 14 +++++++------- + src/webserver.cpp | 22 +++++++++++++--------- + 5 files changed, 30 insertions(+), 22 deletions(-) + +diff --git a/src/http_request.cpp b/src/http_request.cpp +index 5703663..be342c7 100644 +--- a/src/http_request.cpp ++++ b/src/http_request.cpp +@@ -88,7 +88,7 @@ const std::string http_request::get_connection_value(const std::string& key, enu + return header_c; + } + +-int http_request::build_request_header( ++MHD_Result http_request::build_request_header( + void *cls, + enum MHD_ValueKind kind, + const char *key, +@@ -189,7 +189,7 @@ const std::string http_request::get_querystring() const + return querystring; + } + +-int http_request::build_request_args( ++MHD_Result http_request::build_request_args( + void *cls, + enum MHD_ValueKind kind, + const char *key, +@@ -204,7 +204,7 @@ int http_request::build_request_args( + return MHD_YES; + } + +-int http_request::build_request_querystring( ++MHD_Result http_request::build_request_querystring( + void *cls, + enum MHD_ValueKind kind, + const char *key, +diff --git a/src/httpserver/http_request.hpp b/src/httpserver/http_request.hpp +index 139272b..62e5275 100644 +--- a/src/httpserver/http_request.hpp ++++ b/src/httpserver/http_request.hpp +@@ -247,15 +247,15 @@ class http_request + + unescaper_ptr unescaper = 0x0; + +- static int build_request_header(void *cls, enum MHD_ValueKind kind, ++ static MHD_Result build_request_header(void *cls, enum MHD_ValueKind kind, + const char *key, const char *value + ); + +- static int build_request_args(void *cls, enum MHD_ValueKind kind, ++ static MHD_Result build_request_args(void *cls, enum MHD_ValueKind kind, + const char *key, const char *value + ); + +- static int build_request_querystring(void *cls, enum MHD_ValueKind kind, ++ static MHD_Result build_request_querystring(void *cls, enum MHD_ValueKind kind, + const char *key, const char *value + ); + +diff --git a/src/httpserver/http_utils.hpp b/src/httpserver/http_utils.hpp +index 9ad89b4..a812197 100644 +--- a/src/httpserver/http_utils.hpp ++++ b/src/httpserver/http_utils.hpp +@@ -53,6 +53,10 @@ + + #define DEFAULT_MASK_VALUE 0xFFFF + ++#if MHD_VERSION < 0x00097002 ++typedef int MHD_Result; ++#endif ++ + namespace httpserver { + + typedef void(*unescaper_ptr)(std::string&); +diff --git a/src/httpserver/webserver.hpp b/src/httpserver/webserver.hpp +index 1ff472b..661b6ee 100644 +--- a/src/httpserver/webserver.hpp ++++ b/src/httpserver/webserver.hpp +@@ -195,14 +195,14 @@ class webserver + enum MHD_RequestTerminationCode toe + ); + +- static int answer_to_connection ++ static MHD_Result answer_to_connection + ( + void* cls, MHD_Connection* connection, + const char* url, const char* method, + const char* version, const char* upload_data, + size_t* upload_data_size, void** con_cls + ); +- static int post_iterator ++ static MHD_Result post_iterator + ( + void *cls, + enum MHD_ValueKind kind, +@@ -219,25 +219,25 @@ class webserver + void **con_cls, int upgrade_socket + ); + +- int requests_answer_first_step(MHD_Connection* connection, ++ MHD_Result requests_answer_first_step(MHD_Connection* connection, + struct details::modded_request* mr + ); + +- int requests_answer_second_step(MHD_Connection* connection, ++ MHD_Result requests_answer_second_step(MHD_Connection* connection, + const char* method, const char* version, const char* upload_data, + size_t* upload_data_size, struct details::modded_request* mr + ); + +- int finalize_answer(MHD_Connection* connection, ++ MHD_Result finalize_answer(MHD_Connection* connection, + struct details::modded_request* mr, const char* method + ); + +- int complete_request(MHD_Connection* connection, ++ MHD_Result complete_request(MHD_Connection* connection, + struct details::modded_request* mr, + const char* version, const char* method + ); + +- friend int policy_callback (void *cls, ++ friend MHD_Result policy_callback (void *cls, + const struct sockaddr* addr, socklen_t addrlen + ); + friend void error_log(void* cls, const char* fmt, va_list ap); +diff --git a/src/webserver.cpp b/src/webserver.cpp +index a3104e9..3340eb0 100644 +--- a/src/webserver.cpp ++++ b/src/webserver.cpp +@@ -75,6 +75,10 @@ + #define SOCK_CLOEXEC 02000000 + #endif + ++#if MHD_VERSION < 0x00097002 ++typedef int MHD_Result; ++#endif ++ + using namespace std; + + namespace httpserver +@@ -82,7 +86,7 @@ namespace httpserver + + using namespace http; + +-int policy_callback (void *, const struct sockaddr*, socklen_t); ++MHD_Result policy_callback (void *, const struct sockaddr*, socklen_t); + void error_log(void*, const char*, va_list); + void* uri_log(void*, const char*); + void access_log(webserver*, string); +@@ -421,7 +425,7 @@ void webserver::disallow_ip(const string& ip) + allowances.erase(ip); + } + +-int policy_callback (void *cls, const struct sockaddr* addr, socklen_t addrlen) ++MHD_Result policy_callback (void *cls, const struct sockaddr* addr, socklen_t addrlen) + { + if(!(static_cast(cls))->ban_system_enabled) return MHD_YES; + +@@ -468,7 +472,7 @@ size_t unescaper_func(void * cls, struct MHD_Connection *c, char *s) + return std::string(s).size(); + } + +-int webserver::post_iterator (void *cls, enum MHD_ValueKind kind, ++MHD_Result webserver::post_iterator (void *cls, enum MHD_ValueKind kind, + const char *key, + const char *filename, + const char *content_type, +@@ -522,7 +526,7 @@ const std::shared_ptr webserver::internal_error_page(details::mod + } + } + +-int webserver::requests_answer_first_step( ++MHD_Result webserver::requests_answer_first_step( + MHD_Connection* connection, + struct details::modded_request* mr + ) +@@ -574,7 +578,7 @@ int webserver::requests_answer_first_step( + return MHD_YES; + } + +-int webserver::requests_answer_second_step( ++MHD_Result webserver::requests_answer_second_step( + MHD_Connection* connection, const char* method, + const char* version, const char* upload_data, + size_t* upload_data_size, struct details::modded_request* mr +@@ -597,7 +601,7 @@ int webserver::requests_answer_second_step( + return MHD_YES; + } + +-int webserver::finalize_answer( ++MHD_Result webserver::finalize_answer( + MHD_Connection* connection, + struct details::modded_request* mr, + const char* method +@@ -731,10 +735,10 @@ int webserver::finalize_answer( + mr->dhrs->decorate_response(raw_response); + to_ret = mr->dhrs->enqueue_response(connection, raw_response); + MHD_destroy_response(raw_response); +- return to_ret; ++ return (MHD_Result) to_ret; + } + +-int webserver::complete_request( ++MHD_Result webserver::complete_request( + MHD_Connection* connection, + struct details::modded_request* mr, + const char* version, +@@ -750,7 +754,7 @@ int webserver::complete_request( + return finalize_answer(connection, mr, method); + } + +-int webserver::answer_to_connection(void* cls, MHD_Connection* connection, ++MHD_Result webserver::answer_to_connection(void* cls, MHD_Connection* connection, + const char* url, const char* method, + const char* version, const char* upload_data, + size_t* upload_data_size, void** con_cls +-- +2.26.2 + diff --git a/package/libhttpserver/Config.in b/package/libhttpserver/Config.in new file mode 100644 index 00000000..dcdf3056 --- /dev/null +++ b/package/libhttpserver/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_LIBHTTPSERVER + bool "libhttpserver" + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5 # C++11 PR59526 + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_LIBMICROHTTPD + help + libhttpserver is a C++ library for building high performance + RESTfuls web servers. libhttpserver is built upon + libmicrohttpd to provide a simple API for developers to + create HTTP services in C++. + + https://github.com/etr/libhttpserver + +comment "libhttpserver needs a toolchain w/ C++, threads, gcc >= 5" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_5 diff --git a/package/libhttpserver/libhttpserver.hash b/package/libhttpserver/libhttpserver.hash new file mode 100644 index 00000000..038e9f6b --- /dev/null +++ b/package/libhttpserver/libhttpserver.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 c830cb40b448a44cfc9000713aefff15d4ab1f6ebd6b47280a3cb64cb020f326 libhttpserver-0.18.1.tar.gz +sha256 5df07007198989c622f5d41de8d703e7bef3d0e79d62e24332ee739a452af62a COPYING.LESSER diff --git a/package/libhttpserver/libhttpserver.mk b/package/libhttpserver/libhttpserver.mk new file mode 100644 index 00000000..37943bc4 --- /dev/null +++ b/package/libhttpserver/libhttpserver.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# libhttpserver +# +################################################################################ + +LIBHTTPSERVER_VERSION = 0.18.1 +LIBHTTPSERVER_SITE = $(call github,etr,libhttpserver,$(LIBHTTPSERVER_VERSION)) +LIBHTTPSERVER_LICENSE = LGPL-2.1+ +LIBHTTPSERVER_LICENSE_FILES = COPYING.LESSER +LIBHTTPSERVER_INSTALL_STAGING = YES +LIBHTTPSERVER_CONF_OPTS = \ + --disable-examples \ + --enable-same-directory-build +LIBHTTPSERVER_AUTORECONF = YES +LIBHTTPSERVER_DEPENDENCIES = libmicrohttpd + +$(eval $(autotools-package)) diff --git a/package/libiberty/libiberty.hash b/package/libiberty/libiberty.hash new file mode 100644 index 00000000..0dafcea5 --- /dev/null +++ b/package/libiberty/libiberty.hash @@ -0,0 +1,5 @@ +# From ftp://gcc.gnu.org/pub/binutils/releases/sha512.sum +sha512 d326408f12a03d9a61a9de56584c2af12f81c2e50d2d7e835d51565df8314df01575724afa1e43bd0db45cfc9916b41519b67dfce03232aa4978704492a6994a binutils-2.32.tar.xz + +# Locally computed, same as binutils.hash +sha256 56bdea73b6145ef6ac5259b3da390b981d840c24cb03b8e1cbc678de7ecfa18d COPYING.LIB diff --git a/package/libiberty/libiberty.mk b/package/libiberty/libiberty.mk new file mode 100644 index 00000000..6235a8b9 --- /dev/null +++ b/package/libiberty/libiberty.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# libiberty +# +################################################################################ + +LIBIBERTY_VERSION = 2.32 +LIBIBERTY_SOURCE = binutils-$(LIBIBERTY_VERSION).tar.xz +LIBIBERTY_SITE = $(BR2_GNU_MIRROR)/binutils +HOST_LIBIBERTY_DL_SUBDIR = binutils + +# We're only building libiberty here, not the full binutils suite +LIBIBERTY_LICENSE = LGPL-2.1+ +LIBIBERTY_LICENSE_FILES = COPYING.LIB + +LIBIBERTY_SUBDIR = libiberty + +# We explicitly disable multilib, as we do in binutils. +# By default, libiberty installs nothing, so we must force it. +HOST_LIBIBERTY_CONF_OPTS = \ + --disable-multilib \ + --enable-install-libiberty + +# Some packages (e.g. host-gdb) will pick this library and build shared +# objects with it. But libiberty does not honour the --enable-shared and +# --disable-static flags; it only ever builds a static library no matter +# what. So we must force -fPIC in build flags. +HOST_LIBIBERTY_CONF_ENV = \ + CFLAGS="$(HOST_CFLAGS) -fPIC" \ + LDFLAGS="$(HOST_LDFLAGS) -fPIC" + +$(eval $(host-autotools-package)) diff --git a/package/libical/0001-no-tests.patch b/package/libical/0001-no-tests.patch new file mode 100644 index 00000000..324c04f6 --- /dev/null +++ b/package/libical/0001-no-tests.patch @@ -0,0 +1,19 @@ +Disable tests to avoid MMU dependency due to fork. + +Fixes +CMakeFiles/regression.dir/regression.c.o: In function `_test_file_locks': +/home/br/br4/output/build/libical-v1.0.1/src/test/regression.c:(.text+0x96d8): undefined reference to `_fork' + +Signed-off-by: Bernd Kuhls + +diff -uNr libical-1.0.1.org/src/CMakeLists.txt libical-1.0.1/src/CMakeLists.txt +--- libical-1.0.1.org/src/CMakeLists.txt 2014-10-09 17:07:05.000000000 +0200 ++++ libical-1.0.1/src/CMakeLists.txt 2015-04-25 17:41:22.657345548 +0200 +@@ -1,7 +1,6 @@ + add_subdirectory(libical) + add_subdirectory(libicalss) + add_subdirectory(libicalvcal) +-add_subdirectory(test) + + if(MSVC) + install(FILES diff --git a/package/libical/0002-icaltypes-c-icalreqstattype_from_string-copy-the-reqstattype.patch b/package/libical/0002-icaltypes-c-icalreqstattype_from_string-copy-the-reqstattype.patch new file mode 100644 index 00000000..0d74835e --- /dev/null +++ b/package/libical/0002-icaltypes-c-icalreqstattype_from_string-copy-the-reqstattype.patch @@ -0,0 +1,27 @@ +From 6b9438d746cec6e4e632d78c5244f4be6314d1c9 Mon Sep 17 00:00:00 2001 +From: Allen Winter +Date: Sun, 28 May 2017 12:51:10 -0400 +Subject: [PATCH] icaltypes.c - icalreqstattype_from_string(), copy the + reqstattype's debug string into its own memory in the ring buffer. + +Issue#253 +Signed-off-by: Fabrice Fontaine +[Retrieved (and backported) from: +https://github.com/libical/libical/commit/6b9438d746cec6e4e632d78c5244f4be6314d1c9] +--- + src/libical/icaltypes.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/libical/icaltypes.c b/src/libical/icaltypes.c +index 70c50d29..85c33545 100644 +--- a/src/libical/icaltypes.c ++++ b/src/libical/icaltypes.c +@@ -140,7 +140,7 @@ struct icalreqstattype icalreqstattype_from_string(const char *str) + + p2 = strchr(p1+1,';'); + if (p2 != 0 && *p2 != 0){ +- stat.debug = p2+1; ++ stat.debug = icalmemory_tmp_copy(p2+1); + } + + return stat; diff --git a/package/libical/Config.in b/package/libical/Config.in new file mode 100644 index 00000000..7c1d4a14 --- /dev/null +++ b/package/libical/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_LIBICAL + bool "libical" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS + depends on BR2_USE_WCHAR + select BR2_TARGET_TZ_INFO + help + libical is an Open Source (MPL/LGPL) implementation of the + IETF's iCalendar Calendaring and Scheduling protocols. + + http://libical.github.io/libical + +comment "libical needs a toolchain w/ C++, dynamic library, wchar" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \ + BR2_STATIC_LIBS diff --git a/package/libical/libical.hash b/package/libical/libical.hash new file mode 100644 index 00000000..7edb29bd --- /dev/null +++ b/package/libical/libical.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 089ce3c42d97fbd7a5d4b3c70adbdd82115dd306349c1f5c46a8fb3f8c949592 libical-1.0.1.tar.gz +sha256 c393726f82e6f21df5262110215f6a4382b32046d10afdcfcc49338aa7a191f2 LICENSE diff --git a/package/libical/libical.mk b/package/libical/libical.mk new file mode 100644 index 00000000..afbbfd98 --- /dev/null +++ b/package/libical/libical.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# libical +# +################################################################################ + +LIBICAL_VERSION = 1.0.1 +LIBICAL_SITE = https://github.com/libical/libical/releases/download/v$(LIBICAL_VERSION) +LIBICAL_INSTALL_STAGING = YES +LIBICAL_LICENSE = MPL-1.0 or LGPL-2.1 +LIBICAL_LICENSE_FILES = LICENSE +LIBICAL_CPE_ID_VENDOR = libical_project + +# 0002-icaltypes-c-icalreqstattype_from_string-copy-the-reqstattype.patch +LIBICAL_IGNORE_CVES += CVE-2016-9584 + +# building without this option is broken, it is used by +# Gentoo/alpinelinux as well +LIBICAL_CONF_OPTS = -DSHARED_ONLY=true +# never build time zone info, always use system's tzinfo +LIBICAL_CONF_OPTS += -DUSE_BUILTIN_TZDATA=false + +$(eval $(cmake-package)) diff --git a/package/libiconv/Config.in b/package/libiconv/Config.in new file mode 100644 index 00000000..c08a844b --- /dev/null +++ b/package/libiconv/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_LIBICONV + bool "libiconv" + depends on !BR2_ENABLE_LOCALE + help + unicode conversion library + + http://ftp.gnu.org/pub/gnu/libiconv + +if BR2_PACKAGE_LIBICONV + +config BR2_PACKAGE_LIBICONV_EXTRA_ENCODINGS + bool "extra encodings" + help + Provide support for a few extra encodings: + + European languages + CP{437,737,775,852,853,855,857,858,860,861,863,865,869,1125} + Semitic languages + CP864 + Japanese + EUC-JISX0213, Shift_JISX0213, ISO-2022-JP-3 + Chinese + BIG5-2003 (experimental) + Turkmen + TDS565 + Platform specifics + ATARIST, RISCOS-LATIN1 + +endif diff --git a/package/libiconv/libiconv.hash b/package/libiconv/libiconv.hash new file mode 100644 index 00000000..93ad555e --- /dev/null +++ b/package/libiconv/libiconv.hash @@ -0,0 +1,6 @@ +# Locally calculated after checking pgp signature +sha256 ccf536620a45458d26ba83887a983b96827001e92a13847b45e4925cc8913178 libiconv-1.15.tar.gz + +# Hash for license files: +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING +sha256 56bdea73b6145ef6ac5259b3da390b981d840c24cb03b8e1cbc678de7ecfa18d COPYING.LIB diff --git a/package/libiconv/libiconv.mk b/package/libiconv/libiconv.mk new file mode 100644 index 00000000..ec79a5d7 --- /dev/null +++ b/package/libiconv/libiconv.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# libiconv +# +################################################################################ + +LIBICONV_VERSION = 1.15 +LIBICONV_SITE = $(BR2_GNU_MIRROR)/libiconv +LIBICONV_INSTALL_STAGING = YES +LIBICONV_LICENSE = GPL-3.0+ (iconv program), LGPL-2.0+ (library) +LIBICONV_LICENSE_FILES = COPYING COPYING.LIB + +ifeq ($(BR2_PACKAGE_LIBICONV_EXTRA_ENCODINGS),y) +LIBICONV_CONF_OPTS = --enable-extra-encodings +endif + +# Don't build the preloadable library, as we don't need it (it's only +# for LD_PRELOAD to replace glibc's iconv, but we never build libiconv +# when glibc is used). And it causes problems for static only builds. +define LIBICONV_DISABLE_PRELOAD + $(SED) '/preload/d' $(@D)/Makefile.in +endef +LIBICONV_PRE_CONFIGURE_HOOKS += LIBICONV_DISABLE_PRELOAD + +$(eval $(autotools-package)) + +# Configurations where the toolchain supports locales and the libiconv +# package is enabled are incorrect, because the toolchain already +# provides libiconv functionality, and having both confuses packages. +ifeq ($(BR2_PACKAGE_LIBICONV)$(BR2_ENABLE_LOCALE),yy) +$(error Libiconv should never be enabled when the toolchain supports locales. Report this failure to Buildroot developers) +endif diff --git a/package/libid3tag/Config.in b/package/libid3tag/Config.in new file mode 100644 index 00000000..869b9f7f --- /dev/null +++ b/package/libid3tag/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBID3TAG + bool "libid3tag" + select BR2_PACKAGE_ZLIB + help + ID3 tag reading library from the MAD project. + + http://www.underbit.com/products/mad/ diff --git a/package/libid3tag/id3tag.pc b/package/libid3tag/id3tag.pc new file mode 100644 index 00000000..63d09eee --- /dev/null +++ b/package/libid3tag/id3tag.pc @@ -0,0 +1,12 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: id3tag +Description: ID3 tag reading library +Version: 0.15.1b +Requires: +Libs: -L${libdir} -lid3tag +Libs.private: -lz +Cflags: -I${includedir} diff --git a/package/libid3tag/libid3tag.hash b/package/libid3tag/libid3tag.hash new file mode 100644 index 00000000..9aa1d002 --- /dev/null +++ b/package/libid3tag/libid3tag.hash @@ -0,0 +1,7 @@ +# From http://snapshot.debian.org/archive/debian/20190310T213528Z/pool/main/libi/libid3tag/libid3tag_0.15.1b-14.dsc +sha256 63da4f6e7997278f8a3fef4c6a372d342f705051d1eeb6a46a86b03610e26151 libid3tag_0.15.1b.orig.tar.gz +sha256 f174cafe02bef25a9ad8cb7f9ce80119147297a7036f50878e85ac0d7ae09c62 libid3tag_0.15.1b-14.debian.tar.xz + +# Hash for license files: +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING +sha256 7f12ad28dc075763e91b91bfa60fad04062380011ddad8f6bac21dd7b1f44367 COPYRIGHT diff --git a/package/libid3tag/libid3tag.mk b/package/libid3tag/libid3tag.mk new file mode 100644 index 00000000..5d7b219b --- /dev/null +++ b/package/libid3tag/libid3tag.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# libid3tag +# +################################################################################ + +LIBID3TAG_VERSION = 0.15.1b +LIBID3TAG_PATCH = libid3tag_$(LIBID3TAG_VERSION)-14.debian.tar.xz +LIBID3TAG_SOURCE = libid3tag_$(LIBID3TAG_VERSION).orig.tar.gz +LIBID3TAG_SITE = \ + http://snapshot.debian.org/archive/debian/20190310T213528Z/pool/main/libi/libid3tag +LIBID3TAG_LICENSE = GPL-2.0+ +LIBID3TAG_LICENSE_FILES = COPYING COPYRIGHT +LIBID3TAG_INSTALL_STAGING = YES +LIBID3TAG_DEPENDENCIES = host-gperf zlib + +# debian/patches/10_utf16.dpatch +LIBID3TAG_IGNORE_CVES += CVE-2004-2779 CVE-2017-11551 + +# debian/patches/11_unknown_encoding.dpatch +LIBID3TAG_IGNORE_CVES += CVE-2017-11550 + +# Force autoreconf to be able to use a more recent libtool script, that +# is able to properly behave in the face of a missing C++ compiler. +LIBID3TAG_AUTORECONF = YES + +define LIBID3TAG_INSTALL_STAGING_PC + $(INSTALL) -D package/libid3tag/id3tag.pc \ + $(STAGING_DIR)/usr/lib/pkgconfig/id3tag.pc +endef + +LIBID3TAG_POST_INSTALL_STAGING_HOOKS += LIBID3TAG_INSTALL_STAGING_PC + +$(eval $(autotools-package)) diff --git a/package/libidn/Config.in b/package/libidn/Config.in new file mode 100644 index 00000000..20e0e2b5 --- /dev/null +++ b/package/libidn/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_LIBIDN + bool "libidn" + help + Libidn's purpose is to encode and decode internationalized + domain names. + + http://www.gnu.org/software/libidn/ + +if BR2_PACKAGE_LIBIDN + +config BR2_PACKAGE_LIBIDN_BINARY + bool "idn binary" + help + Install idn command line tool + +endif diff --git a/package/libidn/libidn.hash b/package/libidn/libidn.hash new file mode 100644 index 00000000..0255a639 --- /dev/null +++ b/package/libidn/libidn.hash @@ -0,0 +1,7 @@ +# Locally computed: +sha256 14b67108344d81ba844631640df77c9071d9fb0659b080326ff5424e86b14038 libidn-1.36.tar.gz + +# Hash for license files: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYINGv2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYINGv3 +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 COPYING.LESSERv3 diff --git a/package/libidn/libidn.mk b/package/libidn/libidn.mk new file mode 100644 index 00000000..c49bbe09 --- /dev/null +++ b/package/libidn/libidn.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# libidn +# +################################################################################ + +LIBIDN_VERSION = 1.36 +LIBIDN_SITE = $(BR2_GNU_MIRROR)/libidn +LIBIDN_INSTALL_STAGING = YES +LIBIDN_CONF_ENV = EMACS="no" MAKEINFO=true +LIBIDN_CONF_OPTS = --disable-java --enable-csharp=no +LIBIDN_DEPENDENCIES = host-pkgconf $(TARGET_NLS_DEPENDENCIES) $(if $(BR2_PACKAGE_LIBICONV),libiconv) +LIBIDN_LICENSE = GPL-2.0+, GPL-3.0+, LGPL-3.0+ +LIBIDN_LICENSE_FILES = COPYINGv2 COPYINGv3 COPYING.LESSERv3 +LIBIDN_CPE_ID_VENDOR = gnu + +define LIBIDN_REMOVE_BINARY + rm -f $(TARGET_DIR)/usr/bin/idn +endef + +ifneq ($(BR2_PACKAGE_LIBIDN_BINARY),y) +LIBIDN_POST_INSTALL_TARGET_HOOKS += LIBIDN_REMOVE_BINARY +endif + +define LIBIDN_REMOVE_EMACS_STUFF + rm -rf $(TARGET_DIR)/usr/share/emacs +endef + +LIBIDN_POST_INSTALL_TARGET_HOOKS += LIBIDN_REMOVE_EMACS_STUFF + +$(eval $(autotools-package)) diff --git a/package/libidn2/Config.in b/package/libidn2/Config.in new file mode 100644 index 00000000..38b13789 --- /dev/null +++ b/package/libidn2/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_LIBIDN2 + bool "libidn2" + help + Libidn2 is an implementation of the IDNA2008 + TR46 + specifications (RFC 5890, RFC 5891, RFC 5892, RFC 5893, + TR 46). + + http://www.gnu.org/software/libidn/ + +if BR2_PACKAGE_LIBIDN2 + +config BR2_PACKAGE_LIBIDN2_BINARY + bool "idn2 binary" + help + Install idn2 command line tool + +endif diff --git a/package/libidn2/libidn2.hash b/package/libidn2/libidn2.hash new file mode 100644 index 00000000..2d2fcdfd --- /dev/null +++ b/package/libidn2/libidn2.hash @@ -0,0 +1,8 @@ +# Calculated locally after checking signature +sha256 e1cb1db3d2e249a6a3eb6f0946777c2e892d5c5dc7bd91c74394fc3a01cab8b5 libidn2-2.3.0.tar.gz + +# Hash for license files: +sha256 73483f797a83373fca1b968c11785b98c4fc4803cdc7d3210811ca8b075d6d76 COPYING +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYINGv2 +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 COPYING.LESSERv3 +sha256 01d621eef165cf4d3d3dbb737aa0699178d94c6f18cf87e9dde6db3ca7790f46 COPYING.unicode diff --git a/package/libidn2/libidn2.mk b/package/libidn2/libidn2.mk new file mode 100644 index 00000000..4db302db --- /dev/null +++ b/package/libidn2/libidn2.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# libidn2 +# +################################################################################ + +LIBIDN2_VERSION = 2.3.0 +LIBIDN2_SITE = $(BR2_GNU_MIRROR)/libidn +LIBIDN2_LICENSE = GPL-2.0+ or LGPL-3.0+ (library) +LIBIDN2_LICENSE_FILES = COPYING COPYINGv2 COPYING.LESSERv3 COPYING.unicode +LIBIDN2_CPE_ID_VENDOR = gnu +LIBIDN2_DEPENDENCIES = \ + host-pkgconf \ + $(TARGET_NLS_DEPENDENCIES) \ + $(if $(BR2_PACKAGE_LIBICONV),libiconv) +LIBIDN2_INSTALL_STAGING = YES + +ifeq ($(BR2_PACKAGE_LIBUNISTRING),y) +LIBIDN2_DEPENDENCIES += libunistring +endif + +ifeq ($(BR2_PACKAGE_LIBIDN2_BINARY),) +define LIBIDN2_REMOVE_BINARY + rm -f $(TARGET_DIR)/usr/bin/idn2 +endef +LIBIDN2_POST_INSTALL_TARGET_HOOKS += LIBIDN2_REMOVE_BINARY +else +LIBIDN2_LICENSE += , GPL-3.0+ (program) +endif + +$(eval $(autotools-package)) diff --git a/package/libiec61850/0001-use-poll.h-instead-of-sys-poll.h.patch b/package/libiec61850/0001-use-poll.h-instead-of-sys-poll.h.patch new file mode 100644 index 00000000..a04473d2 --- /dev/null +++ b/package/libiec61850/0001-use-poll.h-instead-of-sys-poll.h.patch @@ -0,0 +1,33 @@ +From 4cad505fc98240eb66eaabfae61a9694f8158dda Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Tue, 7 Apr 2020 20:58:37 +0200 +Subject: [PATCH] use instead of + +The manpage of poll(2) states that the prototype of poll is defined +in . Use that header file instead of to allow +compilation against musl-libc. + +Upstream status: Pending +https://github.com/mz-automation/libiec61850/pull/228 + +Signed-off-by: Romain Naour +--- + hal/ethernet/linux/ethernet_linux.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hal/ethernet/linux/ethernet_linux.c b/hal/ethernet/linux/ethernet_linux.c +index c3ab2e2..9aa5c28 100644 +--- a/hal/ethernet/linux/ethernet_linux.c ++++ b/hal/ethernet/linux/ethernet_linux.c +@@ -23,7 +23,7 @@ + + #include + #include +-#include ++#include + #include + #include + #include +-- +2.21.1 + diff --git a/package/libiec61850/0002-serial_port_linux-Add-missing-include-sys-time.h.patch b/package/libiec61850/0002-serial_port_linux-Add-missing-include-sys-time.h.patch new file mode 100644 index 00000000..e1b8ca15 --- /dev/null +++ b/package/libiec61850/0002-serial_port_linux-Add-missing-include-sys-time.h.patch @@ -0,0 +1,32 @@ +From 661405eb6066b67dfe51d5ff9635e29f86bdd238 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Tue, 7 Apr 2020 21:02:54 +0200 +Subject: [PATCH] serial_port_linux: Add missing include sys/time.h + +POSIX says `struct timeval` is defined if is included. + +Adding this header allow to build against musl-libc. + +Upstream status: Pending +https://github.com/mz-automation/libiec61850/pull/228 + +Signed-off-by: Romain Naour +--- + hal/serial/linux/serial_port_linux.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hal/serial/linux/serial_port_linux.c b/hal/serial/linux/serial_port_linux.c +index e6308c0..15e5794 100644 +--- a/hal/serial/linux/serial_port_linux.c ++++ b/hal/serial/linux/serial_port_linux.c +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + + #include "hal_serial.h" + #include "hal_time.h" +-- +2.21.1 + diff --git a/package/libiec61850/0003-COTP-fixed-possible-heap-buffer-overflow-when-handling-message.patch b/package/libiec61850/0003-COTP-fixed-possible-heap-buffer-overflow-when-handling-message.patch new file mode 100644 index 00000000..88048555 --- /dev/null +++ b/package/libiec61850/0003-COTP-fixed-possible-heap-buffer-overflow-when-handling-message.patch @@ -0,0 +1,27 @@ +From 033ab5b6488250c8c3b838f25a7cbc3e099230bb Mon Sep 17 00:00:00 2001 +From: Michael Zillgith +Date: Wed, 12 Aug 2020 07:25:37 +0200 +Subject: [PATCH] - COTP: fixed possible heap buffer overflow when handling + message with invalid (zero) value in length field (#250) + +[Retrieved from: +https://github.com/mz-automation/libiec61850/commit/033ab5b6488250c8c3b838f25a7cbc3e099230bb] +Signed-off-by: Fabrice Fontaine +--- + src/mms/iso_cotp/cotp.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/mms/iso_cotp/cotp.c b/src/mms/iso_cotp/cotp.c +index cbb34b36..8c37d262 100644 +--- a/src/mms/iso_cotp/cotp.c ++++ b/src/mms/iso_cotp/cotp.c +@@ -720,6 +720,9 @@ CotpConnection_readToTpktBuffer(CotpConnection* self) + goto exit_waiting; + } + ++ if (self->packetSize <= bufPos) ++ goto exit_error; ++ + readBytes = readFromSocket(self, buffer + bufPos, self->packetSize - bufPos); + + if (readBytes < 0) diff --git a/package/libiec61850/Config.in b/package/libiec61850/Config.in new file mode 100644 index 00000000..0badc9ba --- /dev/null +++ b/package/libiec61850/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_LIBIEC61850 + bool "libiec61850" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + help + IEC 61850 is an international standard for + communication systems in Substation Automation Systems + (SAS) and management of Decentralized Energy Resources + (DER). It is seen as one of the communication standards + of the emerging Smart Grid. + + The project libIEC61850 provides a server and client + library for the IEC 61850/MMS, IEC 61850/GOOSE and IEC + 61850-9-2/Sampled Values communication protocols + written in C. It is available under the GPLv3 license. + + http://libiec61850.com + +comment "libiec61850 needs a toolchain w/ C++, threads, dynamic library" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/libiec61850/libiec61850.hash b/package/libiec61850/libiec61850.hash new file mode 100644 index 00000000..5739a5d8 --- /dev/null +++ b/package/libiec61850/libiec61850.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 d0630cd5b7ac67a2d286b0ad574ff1c9074c96be33b9d5a300cd69e89429abbe libiec61850-1.4.2.1.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/libiec61850/libiec61850.mk b/package/libiec61850/libiec61850.mk new file mode 100644 index 00000000..4f82451e --- /dev/null +++ b/package/libiec61850/libiec61850.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# libiec61850 +# +################################################################################ + +LIBIEC61850_VERSION = 1.4.2.1 +LIBIEC61850_SITE = $(call github,mz-automation,libiec61850,v$(LIBIEC61850_VERSION)) +LIBIEC61850_INSTALL_STAGING = YES +LIBIEC61850_LICENSE = GPL-3.0+ +LIBIEC61850_LICENSE_FILES = COPYING +LIBIEC61850_CPE_ID_VENDOR = mz-automation +LIBIEC61850_CONF_OPTS = -DBUILD_PYTHON_BINDINGS=OFF + +# 0003-COTP-fixed-possible-heap-buffer-overflow-when-handling-message.patch +LIBIEC61850_IGNORE_CVES += CVE-2020-15158 + +$(eval $(cmake-package)) diff --git a/package/libiio/Config.in b/package/libiio/Config.in new file mode 100644 index 00000000..0d89331c --- /dev/null +++ b/package/libiio/Config.in @@ -0,0 +1,98 @@ +config BR2_PACKAGE_LIBIIO + bool "libiio" + select BR2_PACKAGE_LIBIIO_LOCAL_BACKEND if !BR2_PACKAGE_LIBIIO_XML_BACKEND + help + Libiio is a library to ease the development of software + interfacing Linux Industrial I/O (IIO) devices. + + http://wiki.analog.com/resources/tools-software/linux-software/libiio + +if BR2_PACKAGE_LIBIIO + +config BR2_PACKAGE_LIBIIO_LOCAL_BACKEND + bool "Local backend" + default y + help + Enable the local backend of the library. + +config BR2_PACKAGE_LIBIIO_XML_BACKEND + bool "XML backend" + default y + select BR2_PACKAGE_LIBXML2 + help + Enable the XML backend of the library. + +config BR2_PACKAGE_LIBIIO_NETWORK_BACKEND + bool "Network backend" + default y + select BR2_PACKAGE_LIBIIO_XML_BACKEND + help + Enable the network backend of the library. + +config BR2_PACKAGE_LIBIIO_USB_BACKEND + bool "USB backend" + default y + depends on BR2_TOOLCHAIN_HAS_THREADS # from libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBIIO_XML_BACKEND + select BR2_PACKAGE_LIBUSB + help + Enable the USB backend of the library. + +comment "The USB backend needs a toolchain w/ threads, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + +config BR2_PACKAGE_LIBIIO_SERIAL_BACKEND + bool "Serial backend" + default y + select BR2_PACKAGE_LIBIIO_XML_BACKEND + select BR2_PACKAGE_LIBSERIALPORT + help + Enable the serial backend of the library. + +config BR2_PACKAGE_LIBIIO_IIOD + bool "IIO Daemon" + default y + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_LIBIIO_LOCAL_BACKEND + help + Install the IIO Daemon. + +config BR2_PACKAGE_LIBIIO_IIOD_USBD + bool "USB support in the IIO Daemon (FunctionFS)" + depends on BR2_PACKAGE_LIBIIO_IIOD + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18 # usb_functionfs_descs_head_v2 + select BR2_PACKAGE_LIBAIO + help + Add support for USB through FunctionFS with IIOD. + +comment "USB support in the IIO Daemon requires headers >= 3.18" + depends on BR2_PACKAGE_LIBIIO_IIOD + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18 + +comment "IIO Daemon needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_LIBIIO_TESTS + bool "Install test programs" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Install the test programs (iio_info, iio_genxml, iio_readdev). + +comment "IIO test programs need a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_LIBIIO_BINDINGS_CSHARP + bool "Install C# bindings" + depends on BR2_PACKAGE_MONO + help + Install the C# bindings. + +config BR2_PACKAGE_LIBIIO_BINDINGS_PYTHON + bool "Install Python bindings" + depends on BR2_PACKAGE_PYTHON || BR2_PACKAGE_PYTHON3 + help + Install the Python bindings. + +endif diff --git a/package/libiio/S99iiod b/package/libiio/S99iiod new file mode 100644 index 00000000..df2f7634 --- /dev/null +++ b/package/libiio/S99iiod @@ -0,0 +1,30 @@ +#!/bin/sh + +# Server-side demuxing by default +IIOD_OPTS=-D + +[ -r /etc/default/iiod ] && . /etc/default/iiod + +case "$1" in + start) + echo "Starting IIO Server Daemon" + start-stop-daemon -S -b -q -m -p /var/run/iiod.pid -x /usr/sbin/iiod -- $IIOD_OPTS + exit $? + ;; + + stop) + echo "Stopping IIO Server Daemon" + start-stop-daemon -K -q -p /var/run/iiod.pid 2>/dev/null + exit $? + ;; + + restart) + $0 stop + sleep 1 + $0 start + ;; + + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac diff --git a/package/libiio/libiio.hash b/package/libiio/libiio.hash new file mode 100644 index 00000000..dd85ffa6 --- /dev/null +++ b/package/libiio/libiio.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 81c414d5c47b715d9bc9275b9fabbfd9e9483e60c035f3001b5977932049595d libiio-0.19.tar.gz +sha256 102900208eef27b766380135906d431dba87edaa7ec6aa72e6ebd3dd67f3a97b COPYING.txt diff --git a/package/libiio/libiio.mk b/package/libiio/libiio.mk new file mode 100644 index 00000000..af5b27ba --- /dev/null +++ b/package/libiio/libiio.mk @@ -0,0 +1,97 @@ +################################################################################ +# +# libiio +# +################################################################################ + +LIBIIO_VERSION = 0.19 +LIBIIO_SITE = $(call github,analogdevicesinc,libiio,v$(LIBIIO_VERSION)) +LIBIIO_INSTALL_STAGING = YES +LIBIIO_LICENSE = LGPL-2.1+ +LIBIIO_LICENSE_FILES = COPYING.txt + +LIBIIO_CONF_OPTS = -DENABLE_IPV6=ON \ + -DWITH_LOCAL_BACKEND=$(if $(BR2_PACKAGE_LIBIIO_LOCAL_BACKEND),ON,OFF) \ + -DWITH_NETWORK_BACKEND=$(if $(BR2_PACKAGE_LIBIIO_NETWORK_BACKEND),ON,OFF) \ + -DWITH_MATLAB_BINDINGS_API=OFF \ + -DMATLAB_BINDINGS=OFF \ + -DINSTALL_UDEV_RULE=$(if $(BR2_PACKAGE_HAS_UDEV),ON,OFF) \ + -DWITH_TESTS=$(if $(BR2_PACKAGE_LIBIIO_TESTS),ON,OFF) \ + -DWITH_DOC=OFF + +ifeq ($(BR2_PACKAGE_LIBIIO_XML_BACKEND),y) +LIBIIO_DEPENDENCIES += libxml2 +LIBIIO_CONF_OPTS += -DWITH_XML_BACKEND=ON +else +LIBIIO_CONF_OPTS += -DWITH_XML_BACKEND=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBIIO_USB_BACKEND),y) +LIBIIO_DEPENDENCIES += libusb +LIBIIO_CONF_OPTS += -DWITH_USB_BACKEND=ON +else +LIBIIO_CONF_OPTS += -DWITH_USB_BACKEND=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBIIO_SERIAL_BACKEND),y) +LIBIIO_DEPENDENCIES += libserialport +LIBIIO_CONF_OPTS += -DWITH_SERIAL_BACKEND=ON +else +LIBIIO_CONF_OPTS += -DWITH_SERIAL_BACKEND=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBIIO_IIOD),y) +LIBIIO_DEPENDENCIES += host-flex host-bison +LIBIIO_CONF_OPTS += -DWITH_IIOD=ON +else +LIBIIO_CONF_OPTS += -DWITH_IIOD=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBIIO_IIOD_USBD),y) +LIBIIO_DEPENDENCIES += libaio +LIBIIO_CONF_OPTS += -DWITH_IIOD_USBD=ON +else +LIBIIO_CONF_OPTS += -DWITH_IIOD_USBD=OFF +endif + +# Avahi support in libiio requires avahi-client, which needs avahi-daemon and dbus +ifeq ($(BR2_PACKAGE_AVAHI_DAEMON)$(BR2_PACKAGE_DBUS),yy) +LIBIIO_DEPENDENCIES += avahi +endif + +ifeq ($(BR2_PACKAGE_LIBIIO_BINDINGS_PYTHON),y) +ifeq ($(BR2_PACKAGE_PYTHON),y) +LIBIIO_DEPENDENCIES += python +else ifeq ($(BR2_PACKAGE_PYTHON3),y) +LIBIIO_DEPENDENCIES += python3 +endif +LIBIIO_CONF_OPTS += -DPYTHON_BINDINGS=ON +else +LIBIIO_CONF_OPTS += -DPYTHON_BINDINGS=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBIIO_BINDINGS_CSHARP),y) +define LIBIIO_INSTALL_CSHARP_BINDINGS_TO_TARGET + $(HOST_DIR)/bin/gacutil -root $(TARGET_DIR)/usr/lib -i \ + $(TARGET_DIR)/usr/lib/cli/libiio-sharp-$(LIBIIO_VERSION)/libiio-sharp.dll +endef +define LIBIIO_INSTALL_CSHARP_BINDINGS_TO_STAGING + $(HOST_DIR)/bin/gacutil -root $(STAGING_DIR)/usr/lib -i \ + $(STAGING_DIR)/usr/lib/cli/libiio-sharp-$(LIBIIO_VERSION)/libiio-sharp.dll +endef +LIBIIO_POST_INSTALL_TARGET_HOOKS += LIBIIO_INSTALL_CSHARP_BINDINGS_TO_TARGET +LIBIIO_POST_INSTALL_STAGING_HOOKS += LIBIIO_INSTALL_CSHARP_BINDINGS_TO_STAGING +LIBIIO_DEPENDENCIES += mono +LIBIIO_CONF_OPTS += -DCSHARP_BINDINGS=ON +else +LIBIIO_CONF_OPTS += -DCSHARP_BINDINGS=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBIIO_IIOD),y) +define LIBIIO_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/libiio/S99iiod \ + $(TARGET_DIR)/etc/init.d/S99iiod +endef +endif + +$(eval $(cmake-package)) diff --git a/package/libilbc/Config.in b/package/libilbc/Config.in new file mode 100644 index 00000000..89d5db2f --- /dev/null +++ b/package/libilbc/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBILBC + bool "libilbc" + help + iLBC (internet Low Bitrate Codec) is a FREE speech codec + suitable for robust voice communication over IP. + + http://www.webrtc.org/license-rights/ilbc-freeware diff --git a/package/libilbc/libilbc.hash b/package/libilbc/libilbc.hash new file mode 100644 index 00000000..5f41a99c --- /dev/null +++ b/package/libilbc/libilbc.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 f97d8284776c95b31ed5d5441f13b519b8c7966b77a26aa06c29bb77e02cfe16 libilbc-829b08c7902ceb87a261279fabb36b6d523c6e07-br1.tar.gz +sha256 b7f4cbb4a12cd11a3d1aeda9bd17c99f59b054de4b3ee53045531cd2fa74dd2a gips_iLBClicense.pdf diff --git a/package/libilbc/libilbc.mk b/package/libilbc/libilbc.mk new file mode 100644 index 00000000..06d94eb3 --- /dev/null +++ b/package/libilbc/libilbc.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# libilbc +# +################################################################################ + +LIBILBC_VERSION = 829b08c7902ceb87a261279fabb36b6d523c6e07 +LIBILBC_SITE = https://freeswitch.org/stash/scm/sd/libilbc.git +LIBILBC_SITE_METHOD = git +LIBILBC_LICENSE = Global IP Sound iLBC Public License v2.0 +LIBILBC_LICENSE_FILES = gips_iLBClicense.pdf +LIBILBC_AUTORECONF = YES +LIBILBC_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/libimxvpuapi/Config.in b/package/libimxvpuapi/Config.in new file mode 100644 index 00000000..8b8b839c --- /dev/null +++ b/package/libimxvpuapi/Config.in @@ -0,0 +1,16 @@ +comment "libimxvpuapi needs an i.MX platform with VPU support" + depends on BR2_arm + depends on !BR2_PACKAGE_FREESCALE_IMX_HAS_VPU + +config BR2_PACKAGE_LIBIMXVPUAPI + bool "libimxvpuapi" + depends on BR2_arm # Only relevant for i.MX + depends on BR2_PACKAGE_FREESCALE_IMX_HAS_VPU + select BR2_PACKAGE_IMX_VPU + help + This library provides an API for using the iMX6 VPU video + engine. It is an alternative to Freescale's VPU + wrapper. Both the wrapper and this library are layered on + top of imx-vpu, the low-level iMX6 VPU interface. + + https://github.com/Freescale/libimxvpuapi diff --git a/package/libimxvpuapi/libimxvpuapi.hash b/package/libimxvpuapi/libimxvpuapi.hash new file mode 100644 index 00000000..6e0e5d60 --- /dev/null +++ b/package/libimxvpuapi/libimxvpuapi.hash @@ -0,0 +1,3 @@ +# locally computed hash +sha256 7151e10a24929935bada1d3d87626f17e411575b3a4ac0d86440999ad0100a55 libimxvpuapi-0.10.3.tar.gz +sha256 4bb33cc4cd956b56b779b501f18cae46a9e26f8c8500cca86ed758b8bc5e1788 LICENSE diff --git a/package/libimxvpuapi/libimxvpuapi.mk b/package/libimxvpuapi/libimxvpuapi.mk new file mode 100644 index 00000000..a2a3b211 --- /dev/null +++ b/package/libimxvpuapi/libimxvpuapi.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# libimxvpuapi +# +################################################################################ + +LIBIMXVPUAPI_VERSION = 0.10.3 +LIBIMXVPUAPI_SITE = $(call github,Freescale,libimxvpuapi,$(LIBIMXVPUAPI_VERSION)) +LIBIMXVPUAPI_LICENSE = LGPL-2.1+ +LIBIMXVPUAPI_LICENSE_FILES = LICENSE +LIBIMXVPUAPI_DEPENDENCIES = host-pkgconf host-python imx-vpu +LIBIMXVPUAPI_INSTALL_STAGING = YES +LIBIMXVPUAPI_NEEDS_EXTERNAL_WAF = YES + +$(eval $(waf-package)) diff --git a/package/libinput/Config.in b/package/libinput/Config.in new file mode 100644 index 00000000..14e4e70f --- /dev/null +++ b/package/libinput/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_LIBINPUT + bool "libinput" + depends on BR2_PACKAGE_HAS_UDEV + select BR2_PACKAGE_LIBEVDEV + select BR2_PACKAGE_MTDEV + help + libinput is a library to handle input devices in Wayland + compositors and to provide a generic X.Org input driver. + It provides device detection, device handling, input device + event processing and abstraction so minimize the amount of + custom input code compositors need to provide the common + set of functionality that users expect. + + http://freedesktop.org/wiki/Software/libinput/ + +comment "libinput needs udev /dev management" + depends on !BR2_PACKAGE_HAS_UDEV diff --git a/package/libinput/libinput.hash b/package/libinput/libinput.hash new file mode 100644 index 00000000..f2cea28e --- /dev/null +++ b/package/libinput/libinput.hash @@ -0,0 +1,6 @@ +# From https://lists.freedesktop.org/archives/wayland-devel/2020-November/041664.html +sha256 65923a06d5a8970e4a999c4668797b9b689614b62b1d44432ab1c87b65e39e29 libinput-1.16.4.tar.xz +sha512 a95a3bcf58a9298946d15f4f2fd93dc5807d3042f8797950a1ffd96d3c979b55a764f035a9f7680d0ea400b033698c322eb61a4387dbc280db6110ffd3e137ee libinput-1.16.4.tar.xz + +# License files +sha256 70d5b1dfe5a9c50a1f2ea91b1c2b1c85d876c5c92339585edbb85cf69e945e14 COPYING diff --git a/package/libinput/libinput.mk b/package/libinput/libinput.mk new file mode 100644 index 00000000..3b459d6f --- /dev/null +++ b/package/libinput/libinput.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# libinput +# +################################################################################ + +LIBINPUT_VERSION = 1.16.4 +LIBINPUT_SOURCE = libinput-$(LIBINPUT_VERSION).tar.xz +LIBINPUT_SITE = http://www.freedesktop.org/software/libinput +LIBINPUT_DEPENDENCIES = host-pkgconf libevdev mtdev udev +LIBINPUT_INSTALL_STAGING = YES +LIBINPUT_LICENSE = MIT +LIBINPUT_LICENSE_FILES = COPYING +# Tests need fork, so just disable them everywhere. +LIBINPUT_CONF_OPTS = -Dtests=false -Dlibwacom=false -Ddocumentation=false + +ifeq ($(BR2_PACKAGE_LIBGTK3),y) +LIBINPUT_CONF_OPTS += -Ddebug-gui=true +LIBINPUT_DEPENDENCIES += libgtk3 +else +LIBINPUT_CONF_OPTS += -Ddebug-gui=false +endif + +$(eval $(meson-package)) diff --git a/package/libiqrf/0001-cmake-handle-static-library-and-find-required-thread.patch b/package/libiqrf/0001-cmake-handle-static-library-and-find-required-thread.patch new file mode 100644 index 00000000..cfd7d545 --- /dev/null +++ b/package/libiqrf/0001-cmake-handle-static-library-and-find-required-thread.patch @@ -0,0 +1,45 @@ +From 46660112b76664473cc98b8ae6c863fd27c27d2d Mon Sep 17 00:00:00 2001 +From: Samuel Martin +Date: Fri, 29 Aug 2014 23:40:59 +0200 +Subject: [PATCH 1/1] cmake: handle static library and find required thread + module + +Signed-off-by: Samuel Martin +--- + CMakeLists.txt | 2 ++ + src/CMakeLists.txt | 4 +++- + 2 files changed, 5 insertions(+), 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 79f644c..7779a2a 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -6,7 +6,9 @@ enable_testing() + # use local module (for Findlibusb-1.0.cmake) + set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") + ++find_package(Threads REQUIRED) + find_package(libusb-1.0 REQUIRED) ++ + if (NOT LIBUSB_1_FOUND) + message(FATAL_ERROR "libusb-1.0 not installed. (try apt-get install libusb-1.0-0-dev)") + endif (NOT LIBUSB_1_FOUND) +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index 149d198..0597ccd 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -18,8 +18,10 @@ set (iqrf_sources + + include_directories ("${LIBUSB_1_INCLUDE_DIRS}") + +-add_library(iqrf SHARED ${iqrf_sources} ${iqrf_headers}) ++add_library(iqrf ${iqrf_sources} ${iqrf_headers}) ++ + target_link_libraries(iqrf ${LIBUSB_1_LIBRARIES}) ++target_link_libraries(iqrf ${CMAKE_THREAD_LIBS_INIT}) + + set_target_properties(iqrf PROPERTIES + VERSION "${iqrf_version_major}.${iqrf_version_minor}" +-- +2.1.0 + diff --git a/package/libiqrf/0002-use-only-c-language.patch b/package/libiqrf/0002-use-only-c-language.patch new file mode 100644 index 00000000..2f1c23c2 --- /dev/null +++ b/package/libiqrf/0002-use-only-c-language.patch @@ -0,0 +1,29 @@ +Use only the C language + +libirqf is written completely in C, but by default, CMake assumes that +both C and C++ are used, and therefore verifies that a C++ compiler is +installed. This may not necessarily be the case for a C-only package +in Buildroot. + +Signed-off-by: Thomas Petazzoni + +Index: b/src/CMakeLists.txt +=================================================================== +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -1,5 +1,3 @@ +-project(iqrf) +- + set (iqrf_version_major 0) + set (iqrf_version_minor 1) + set (iqrf_version_patch 2) +Index: b/CMakeLists.txt +=================================================================== +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1,3 +1,5 @@ ++project(iqrf C) ++ + cmake_minimum_required(VERSION 2.8.1) + enable_testing() + diff --git a/package/libiqrf/Config.in b/package/libiqrf/Config.in new file mode 100644 index 00000000..d86a7fd0 --- /dev/null +++ b/package/libiqrf/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_LIBIQRF + bool "libiqrf" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + help + This library implement specific protocol + which is used for communicating with iqrf devices + (http://iqrf.org) over usb. For usb access is used + libusb library. + + https://github.com/nandra/libiqrf + +comment "libiqrf needs a toolchain w/ threads, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/libiqrf/libiqrf.hash b/package/libiqrf/libiqrf.hash new file mode 100644 index 00000000..df749def --- /dev/null +++ b/package/libiqrf/libiqrf.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 8111031dd9dd6093a1927eb32dd7476fe22cfee9190043aa8e4c88003c104b16 libiqrf-0.1.2.tar.gz +sha256 11e0700d7c23604d86fa1e7c54c7caa778d79eeb0035be8f80b5a552224ef015 src/iqrf.c diff --git a/package/libiqrf/libiqrf.mk b/package/libiqrf/libiqrf.mk new file mode 100644 index 00000000..3f4e3e84 --- /dev/null +++ b/package/libiqrf/libiqrf.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libiqrf +# +################################################################################ + +LIBIQRF_VERSION = 0.1.2 +LIBIQRF_SITE = $(call github,nandra,libiqrf,v$(LIBIQRF_VERSION)) +LIBIQRF_INSTALL_STAGING = YES +LIBIQRF_DEPENDENCIES = libusb +LIBIQRF_LICENSE = LGPL-2.1+ +LIBIQRF_LICENSE_FILES = src/iqrf.c + +$(eval $(cmake-package)) diff --git a/package/libiscsi/Config.in b/package/libiscsi/Config.in new file mode 100644 index 00000000..932f8578 --- /dev/null +++ b/package/libiscsi/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_LIBISCSI + bool "libiscsi" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Libiscsi is a client-side library to implement the iSCSI + protocol that can be used to access resource of an iSCSI + Target. + + The library is fully async with regards to iscsi commands and + scsi tasks, but a sync layer is also provided for ease of use + for simpler applications. + + https://github.com/sahlberg/libiscsi + +comment "libiscsi needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libiscsi/libiscsi.hash b/package/libiscsi/libiscsi.hash new file mode 100644 index 00000000..b70bb423 --- /dev/null +++ b/package/libiscsi/libiscsi.hash @@ -0,0 +1,5 @@ +# Locally computed: +sha256 c7848ac722c8361d5064654bc6e926c2be61ef11dd3875020a63931836d806df libiscsi-1.19.0.tar.gz +sha256 88e3eccc48722b2a0eaff456dda94b8e8e123848d01f631969bec8e3c6c6eb85 COPYING +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENCE-GPL-2.txt +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 LICENCE-LGPL-2.1.txt diff --git a/package/libiscsi/libiscsi.mk b/package/libiscsi/libiscsi.mk new file mode 100644 index 00000000..c8b6ddd1 --- /dev/null +++ b/package/libiscsi/libiscsi.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# libiscsi +# +################################################################################ + +LIBISCSI_VERSION = 1.19.0 +LIBISCSI_SITE = $(call github,sahlberg,libiscsi,$(LIBISCSI_VERSION)) +LIBISCSI_LICENSE = GPL-2.0+, LGPL-2.1+ +LIBISCSI_LICENSE_FILES = COPYING LICENCE-GPL-2.txt LICENCE-LGPL-2.1.txt +LIBISCSI_INSTALL_STAGING = YES +LIBISCSI_AUTORECONF = YES + +LIBISCSI_CONF_OPTS = --disable-examples --disable-werror --disable-manpages \ + --disable-test-tool --disable-tests + +$(eval $(autotools-package)) diff --git a/package/libite/Config.in b/package/libite/Config.in new file mode 100644 index 00000000..80d29791 --- /dev/null +++ b/package/libite/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_LIBITE + bool "libite" + help + Libite is a lightweight library of frog DNA. It can be used + to fill the gaps in any dinosaur project. It holds useful + functions and macros developed by both Finit and the OpenBSD + project. Most notably the string functions: strlcpy(3), + strlcat(3) and the highly useful *BSD sys/queue.h and + sys/tree.h API's. + + Libite is the frog DNA missing in GNU libc. However, -lite + does not aim to become another GLIB! One noticeable gap in + GLIBC is the missing _SAFE macros in the BSD sys/queue.h API + - highly recommended when traversing lists to delete/free + nodes. + + https://github.com/troglobit/libite diff --git a/package/libite/libite.hash b/package/libite/libite.hash new file mode 100644 index 00000000..1a553d2b --- /dev/null +++ b/package/libite/libite.hash @@ -0,0 +1,8 @@ +# From https://github.com/troglobit/libite/releases/download/v2.2.0/libite-2.2.0.tar.xz.md5 +md5 8533ab27d0d4a7c745f11925907795a9 libite-2.2.0.tar.xz + +# Locally calculated +sha256 3fdeb48ea3d9220f91111ed7a68e1e68edfc70346d0108a49bab73a47a7dd761 libite-2.2.0.tar.xz +sha256 a8a7506c64ce46a58c17838b0f678f8c2567d71869402f97d19460ddec4882f5 LICENSE +sha256 89053891d46d04a21d4a492f68038703e179986baffa458201810f4222b57427 src/chomp.c +sha256 a7d29c148e057fae11a87febc3a51970a26433c35a08fc710be689394442d32d src/pidfile.c diff --git a/package/libite/libite.mk b/package/libite/libite.mk new file mode 100644 index 00000000..69a90d71 --- /dev/null +++ b/package/libite/libite.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libite +# +################################################################################ + +LIBITE_VERSION = 2.2.0 +LIBITE_SOURCE = libite-$(LIBITE_VERSION).tar.xz +LIBITE_SITE = https://github.com/troglobit/libite/releases/download/v$(LIBITE_VERSION) +LIBITE_LICENSE = MIT, X11, ISC, BSD-2-Clause +LIBITE_LICENSE_FILES = LICENSE src/chomp.c src/pidfile.c +LIBITE_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/libjpeg/libjpeg.hash b/package/libjpeg/libjpeg.hash new file mode 100644 index 00000000..4f0a677d --- /dev/null +++ b/package/libjpeg/libjpeg.hash @@ -0,0 +1,3 @@ +# locally computed hash +sha256 99cb50e48a4556bc571dadd27931955ff458aae32f68c4d9c39d624693f69c32 jpegsrc.v9d.tar.gz +sha256 3dc4e4a145c907a96bd6a0e40be3f722fecf061951909143cdff5365cba9c78c README diff --git a/package/libjpeg/libjpeg.mk b/package/libjpeg/libjpeg.mk new file mode 100644 index 00000000..6b55aba7 --- /dev/null +++ b/package/libjpeg/libjpeg.mk @@ -0,0 +1,36 @@ +################################################################################ +# +# libjpeg +# +################################################################################ + +LIBJPEG_VERSION = 9d +# 9d was released 2020-01-12, but the tarball was replaced upstream circa +# 2021-03, causing hash mismatch. Until there is a new version released, +# use our cached copy from s.b.o. +#LIBJPEG_SITE = http://www.ijg.org/files +LIBJPEG_SITE = http://sources.buildroot.org/libjpeg +LIBJPEG_SOURCE = jpegsrc.v$(LIBJPEG_VERSION).tar.gz +LIBJPEG_LICENSE = IJG +LIBJPEG_LICENSE_FILES = README +LIBJPEG_INSTALL_STAGING = YES +LIBJPEG_CPE_ID_VENDOR = ijg +LIBJPEG_PROVIDES = jpeg + +define LIBJPEG_REMOVE_USELESS_TOOLS + rm -f $(addprefix $(TARGET_DIR)/usr/bin/,cjpeg djpeg jpegtran rdjpgcom wrjpgcom) +endef + +LIBJPEG_POST_INSTALL_TARGET_HOOKS += LIBJPEG_REMOVE_USELESS_TOOLS + +define LIBJPEG_INSTALL_STAGING_PC + $(INSTALL) -D -m 0644 package/libjpeg/libjpeg.pc.in \ + $(STAGING_DIR)/usr/lib/pkgconfig/libjpeg.pc + version=`sed -e '/^PACKAGE_VERSION/!d;s/PACKAGE_VERSION = \(.*\)/\1/' $(@D)/Makefile` ; \ + $(SED) "s/@PACKAGE_VERSION@/$${version}/" $(STAGING_DIR)/usr/lib/pkgconfig/libjpeg.pc +endef + +LIBJPEG_POST_INSTALL_STAGING_HOOKS += LIBJPEG_INSTALL_STAGING_PC + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libjpeg/libjpeg.pc.in b/package/libjpeg/libjpeg.pc.in new file mode 100644 index 00000000..59220cac --- /dev/null +++ b/package/libjpeg/libjpeg.pc.in @@ -0,0 +1,10 @@ +prefix=/usr +exec_prefix=/usr +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: libjpeg +Description: A JPEG codec that provides the libjpeg API +Version: @PACKAGE_VERSION@ +Libs: -L${libdir} -ljpeg +Cflags: -I${includedir} diff --git a/package/libjson/0001-fix-broken-makefile.patch b/package/libjson/0001-fix-broken-makefile.patch new file mode 100644 index 00000000..8ceb0cac --- /dev/null +++ b/package/libjson/0001-fix-broken-makefile.patch @@ -0,0 +1,16 @@ +Fix the broken libjson makefile. + +Signed-off-by: Simon Dawson + +diff -Nurp a/makefile b/makefile +--- a/makefile 2012-05-30 10:15:42.000000000 +0100 ++++ b/makefile 2013-03-27 18:45:34.814670534 +0000 +@@ -170,7 +170,7 @@ include_path = $(prefix)/$(includedi + # Usage check + ifdef CXXFLAGS + ifdef BUILD_TYPE +- $(error CXXFLAGS and BUILD_TYPE are mutually exclusive) ++$(error CXXFLAGS and BUILD_TYPE are mutually exclusive) + endif + endif + diff --git a/package/libjson/Config.in b/package/libjson/Config.in new file mode 100644 index 00000000..50a99311 --- /dev/null +++ b/package/libjson/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBJSON + bool "libjson" + depends on BR2_INSTALL_LIBSTDCPP + help + A JSON reader and writer which is super-efficient and usually + runs circles around other JSON libraries. + + http://sourceforge.net/projects/libjson/ + +comment "libjson needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/libjson/libjson.hash b/package/libjson/libjson.hash new file mode 100644 index 00000000..3d9b26a5 --- /dev/null +++ b/package/libjson/libjson.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 07267a3951038ee2e02d26cc41bf8e275668c38f751240d3e78dc979182e7376 libjson_7.6.1.zip +sha256 bd62d605bef39ab7ae39f6fa333ba513edb93cfcd56c9c966f1d34e31ff7c69b License.txt diff --git a/package/libjson/libjson.mk b/package/libjson/libjson.mk new file mode 100644 index 00000000..73268c9c --- /dev/null +++ b/package/libjson/libjson.mk @@ -0,0 +1,49 @@ +################################################################################ +# +# libjson +# +################################################################################ + +LIBJSON_VERSION = 7.6.1 +LIBJSON_SITE = http://downloads.sourceforge.net/project/libjson +LIBJSON_SOURCE = libjson_$(LIBJSON_VERSION).zip +LIBJSON_INSTALL_STAGING = YES +LIBJSON_LICENSE = BSD-2-Clause +LIBJSON_LICENSE_FILES = License.txt + +LIBJSON_CXXFLAGS = $(TARGET_CFLAGS) -DNDEBUG -std=c++11 + +ifeq ($(BR2_STATIC_LIBS),y) +LIBJSON_MAKE_OPTS += SHARED=0 +else +LIBJSON_MAKE_OPTS += SHARED=1 +LIBJSON_CXXFLAGS += -fPIC +endif + +LIBJSON_MAKE_OPTS += BUILD_TYPE= CXXFLAGS="$(LIBJSON_CXXFLAGS)" + +define LIBJSON_EXTRACT_CMDS + $(UNZIP) -d $(@D) $(LIBJSON_DL_DIR)/$(LIBJSON_SOURCE) + mv $(@D)/libjson/* $(@D) + $(RM) -r $(@D)/libjson + $(SED) '/ldconfig/d' $(@D)/makefile +endef + +define LIBJSON_BUILD_CMDS + mkdir -p $(@D)/Objects_$(if $(BR2_STATIC_LIBS),static,shared) \ + $(@D)/_internal/Source/Dependencies + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) \ + $(LIBJSON_MAKE_OPTS) -C $(@D) +endef + +define LIBJSON_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) \ + $(LIBJSON_MAKE_OPTS) prefix=$(TARGET_DIR)/usr install -C $(@D) +endef + +define LIBJSON_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) \ + $(LIBJSON_MAKE_OPTS) prefix=$(STAGING_DIR)/usr install -C $(@D) +endef + +$(eval $(generic-package)) diff --git a/package/libkcapi/0001-Disable-use-of-__NR_io_getevents-when-not-defined.patch b/package/libkcapi/0001-Disable-use-of-__NR_io_getevents-when-not-defined.patch new file mode 100644 index 00000000..20aa75b7 --- /dev/null +++ b/package/libkcapi/0001-Disable-use-of-__NR_io_getevents-when-not-defined.patch @@ -0,0 +1,42 @@ +From 455c4938f5822c017c7ff79dd2dca638b6410923 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sun, 15 Nov 2020 18:05:48 -0800 +Subject: [PATCH] Disable use of __NR_io_getevents when not defined + +Architectures like riscv32 do not define this syscall, therefore return +ENOSYS on such architectures + +Upstream-Status: Pending +Signed-off-by: Khem Raj +Signed-off-by: Stephan Mueller +[Retrieved from: +https://github.com/smuellerDD/libkcapi/commit/455c4938f5822c017c7ff79dd2dca638b6410923] +Signed-off-by: Fabrice Fontaine +--- + lib/internal.h | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/lib/internal.h b/lib/internal.h +index 1237827..f765461 100644 +--- a/lib/internal.h ++++ b/lib/internal.h +@@ -325,10 +325,17 @@ static inline int io_submit(aio_context_t ctx, long n, struct iocb **iocb) + return syscall(__NR_io_submit, ctx, n, iocb); + } + +-static inline int io_getevents(aio_context_t ctx, long min, long max, +- struct io_event *events, struct timespec *timeout) ++static inline int io_getevents(__attribute__((unused)) aio_context_t ctx, ++ __attribute__((unused)) long min, ++ __attribute__((unused)) long max, ++ __attribute__((unused)) struct io_event *events, ++ __attribute__((unused)) struct timespec *timeout) + { ++#ifdef __NR_io_getevents + return syscall(__NR_io_getevents, ctx, min, max, events, timeout); ++#else ++ return -ENOSYS; ++#endif + } + + /************************************************************ diff --git a/package/libkcapi/Config.in b/package/libkcapi/Config.in new file mode 100644 index 00000000..8243f6b7 --- /dev/null +++ b/package/libkcapi/Config.in @@ -0,0 +1,31 @@ +config BR2_PACKAGE_LIBKCAPI + bool "libkcapi" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + help + Linux Kernel Crypto API userspace interface library + + http://www.chronox.de/libkcapi.html + +if BR2_PACKAGE_LIBKCAPI + +config BR2_PACKAGE_LIBKCAPI_ENCAPP + bool "build enc application" + +config BR2_PACKAGE_LIBKCAPI_HASHER + bool "build hasher application" + depends on !BR2_STATIC_LIBS # dlfcn.h + +comment "hasher application needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +config BR2_PACKAGE_LIBKCAPI_RNGAPP + bool "build rng read application" + +config BR2_PACKAGE_LIBKCAPI_SPEED + bool "build speed-test program" + +config BR2_PACKAGE_LIBKCAPI_TEST + bool "build test program" + depends on BR2_USE_MMU # fork() + +endif diff --git a/package/libkcapi/libkcapi.hash b/package/libkcapi/libkcapi.hash new file mode 100644 index 00000000..b3c2c749 --- /dev/null +++ b/package/libkcapi/libkcapi.hash @@ -0,0 +1,5 @@ +# Locally calculated +sha256 8a08dcbb4d05ede4357cdc9d61c7f2a7f2cd96b7ce2eb41b28e45b2e378267ad libkcapi-1.1.5.tar.xz +sha256 c6b8402a68999b0f84560ab43cdf60f9ff33c4a9a8ced6a40db9d3b787ba5b4a COPYING +sha256 e6d6a009505e345fe949e1310334fcb0747f28dae2856759de102ab66b722cb4 COPYING.gplv2 +sha256 13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239 COPYING.bsd diff --git a/package/libkcapi/libkcapi.mk b/package/libkcapi/libkcapi.mk new file mode 100644 index 00000000..60b3f943 --- /dev/null +++ b/package/libkcapi/libkcapi.mk @@ -0,0 +1,49 @@ +################################################################################ +# +# libkcapi +# +################################################################################ + +LIBKCAPI_VERSION = 1.1.5 +LIBKCAPI_SOURCE = libkcapi-$(LIBKCAPI_VERSION).tar.xz +LIBKCAPI_SITE = http://www.chronox.de/libkcapi +LIBKCAPI_AUTORECONF = YES +LIBKCAPI_INSTALL_STAGING = YES +LIBKCAPI_LICENSE = BSD-3-Clause (library), BSD-3-Clause or GPL-2.0 (programs) +LIBKCAPI_LICENSE_FILES = COPYING COPYING.gplv2 COPYING.bsd +LIBKCAPI_CONF_ENV = \ + ac_cv_path_DB2PDF="" \ + ac_cv_path_DB2PS="" \ + ac_cv_path_XMLTO="" + +ifeq ($(BR2_PACKAGE_LIBKCAPI_ENCAPP),y) +LIBKCAPI_CONF_OPTS += --enable-kcapi-encapp +else +LIBKCAPI_CONF_OPTS += --disable-kcapi-encapp +endif + +ifeq ($(BR2_PACKAGE_LIBKCAPI_HASHER),y) +LIBKCAPI_CONF_OPTS += --enable-kcapi-hasher +else +LIBKCAPI_CONF_OPTS += --disable-kcapi-hasher +endif + +ifeq ($(BR2_PACKAGE_LIBKCAPI_RNGAPP),y) +LIBKCAPI_CONF_OPTS += --enable-kcapi-rngapp +else +LIBKCAPI_CONF_OPTS += --disable-kcapi-rngapp +endif + +ifeq ($(BR2_PACKAGE_LIBKCAPI_SPEED),y) +LIBKCAPI_CONF_OPTS += --enable-kcapi-speed +else +LIBKCAPI_CONF_OPTS += --disable-kcapi-speed +endif + +ifeq ($(BR2_PACKAGE_LIBKCAPI_TEST),y) +LIBKCAPI_CONF_OPTS += --enable-kcapi-test +else +LIBKCAPI_CONF_OPTS += --disable-kcapi-test +endif + +$(eval $(autotools-package)) diff --git a/package/libkrb5/Config.in b/package/libkrb5/Config.in new file mode 100644 index 00000000..2e24c872 --- /dev/null +++ b/package/libkrb5/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_LIBKRB5 + bool "libkrb5" + # needs fork() + depends on BR2_USE_MMU + depends on !BR2_STATIC_LIBS + help + Kerberos is a system for authenticating users and services + on a network. Kerberos is a trusted third-party service. + That means that there is a third party (the Kerberos server) + that is trusted by all the entities on the network (users + and services, usually called "principals"). This is the MIT + reference implementation of Kerberos V5. + + https://web.mit.edu/kerberos/ + +comment "libkrb5 needs a toolchain w/ dynamic library" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS diff --git a/package/libkrb5/libkrb5.hash b/package/libkrb5/libkrb5.hash new file mode 100644 index 00000000..860f8287 --- /dev/null +++ b/package/libkrb5/libkrb5.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +sha256 66085e2f594751e77e82e0dbf7bbc344320fb48a9df2a633cfdd8f7d6da99fc8 krb5-1.18.4.tar.gz + +# Hash for license file: +sha256 7fba8b076bdc2cfef1d0813c5d4067d76d5be60c32d84de22d5d1cf451744feb NOTICE diff --git a/package/libkrb5/libkrb5.mk b/package/libkrb5/libkrb5.mk new file mode 100644 index 00000000..89f219d9 --- /dev/null +++ b/package/libkrb5/libkrb5.mk @@ -0,0 +1,77 @@ +################################################################################ +# +# libkrb5 +# +################################################################################ + +LIBKRB5_VERSION_MAJOR = 1.18 +LIBKRB5_VERSION = $(LIBKRB5_VERSION_MAJOR).4 +LIBKRB5_SITE = https://web.mit.edu/kerberos/dist/krb5/$(LIBKRB5_VERSION_MAJOR) +LIBKRB5_SOURCE = krb5-$(LIBKRB5_VERSION).tar.gz +LIBKRB5_SUBDIR = src +LIBKRB5_LICENSE = MIT +LIBKRB5_LICENSE_FILES = NOTICE +LIBKRB5_CPE_ID_VENDOR = mit +LIBKRB5_CPE_ID_PRODUCT = kerberos_5 +LIBKRB5_DEPENDENCIES = host-bison $(TARGET_NLS_DEPENDENCIES) +LIBKRB5_INSTALL_STAGING = YES + +# The configure script uses AC_TRY_RUN tests to check for those values, +# which doesn't work in a cross-compilation scenario. Therefore, +# we feed the configure script with the correct answer for those tests +LIBKRB5_CONF_ENV = \ + ac_cv_printf_positional=yes \ + ac_cv_func_regcomp=yes \ + krb5_cv_attr_constructor_destructor=yes,yes \ + LIBS=$(TARGET_NLS_LIBS) + +# Never use the host packages +LIBKRB5_CONF_OPTS = \ + --without-system-db \ + --without-system-et \ + --without-system-ss \ + --without-system-verto \ + --without-tcl \ + --disable-rpath + +ifeq ($(BR2_PACKAGE_OPENLDAP),y) +LIBKRB5_CONF_OPTS += --with-ldap +LIBKRB5_DEPENDENCIES += openldap +else +LIBKRB5_CONF_OPTS += --without-ldap +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +LIBKRB5_CONF_OPTS += \ + --enable-pkinit \ + --with-crypto-impl=openssl \ + --with-spake-openssl \ + --with-tls-impl=openssl +LIBKRB5_DEPENDENCIES += openssl +else +LIBKRB5_CONF_OPTS += \ + --disable-pkinit \ + --with-crypto-impl=builtin \ + --without-spake-openssl \ + --without-tls-impl +endif + +ifeq ($(BR2_PACKAGE_LIBEDIT),y) +LIBKRB5_CONF_OPTS += --with-libedit +LIBKRB5_DEPENDENCIES += host-pkgconf libedit +else +LIBKRB5_CONF_OPTS += --without-libedit +endif + +ifeq ($(BR2_PACKAGE_READLINE),y) +LIBKRB5_CONF_OPTS += --with-readline +LIBKRB5_DEPENDENCIES += readline +else +LIBKRB5_CONF_OPTS += --without-readline +endif + +ifneq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +LIBKRB5_CONF_OPTS += --disable-thread-support +endif + +$(eval $(autotools-package)) diff --git a/package/libksba/Config.in b/package/libksba/Config.in new file mode 100644 index 00000000..1f25d6db --- /dev/null +++ b/package/libksba/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBKSBA + bool "libksba" + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgpg-error + select BR2_PACKAGE_LIBGPG_ERROR + help + CMS and X.509 library + + https://www.gnupg.org/related_software/libksba/ diff --git a/package/libksba/libksba.hash b/package/libksba/libksba.hash new file mode 100644 index 00000000..c8c9d6bd --- /dev/null +++ b/package/libksba/libksba.hash @@ -0,0 +1,9 @@ +# Locally calculated after checking pgp signature +sha256 ae4af129216b2d7fdea0b5bf2a788cd458a79c983bb09a43f4d525cc87aba0ba libksba-1.5.0.tar.bz2 + +# Hash for license files: +sha256 4d7ff8486176da695f3c81da2ac7ce1b9e5331e0a1667d9ebfe44057088a4220 AUTHORS +sha256 6197b98c6bf69838c624809c509d84333de1bc847155168c0e84527446a27076 COPYING +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING.GPLv2 +sha256 0abbff814cd00e2b0b6d08395af2b419c1a92026c4b4adacbb65ccda45fa58cf COPYING.GPLv3 +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 COPYING.LGPLv3 diff --git a/package/libksba/libksba.mk b/package/libksba/libksba.mk new file mode 100644 index 00000000..bb02391a --- /dev/null +++ b/package/libksba/libksba.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# libksba +# +################################################################################ + +LIBKSBA_VERSION = 1.5.0 +LIBKSBA_SOURCE = libksba-$(LIBKSBA_VERSION).tar.bz2 +LIBKSBA_SITE = ftp://ftp.gnupg.org/gcrypt/libksba +LIBKSBA_LICENSE = LGPL-3.0+ or GPL-2.0+ (library, headers), GPL-3.0+ (manual, tests, build system) +LIBKSBA_LICENSE_FILES = AUTHORS COPYING COPYING.GPLv2 COPYING.GPLv3 COPYING.LGPLv3 +LIBKSBA_CPE_ID_VENDOR = libksba_project +LIBKSBA_INSTALL_STAGING = YES +LIBKSBA_DEPENDENCIES = libgpg-error +LIBKSBA_CONF_OPTS = --with-gpg-error-prefix=$(STAGING_DIR)/usr + +$(eval $(autotools-package)) diff --git a/package/libldns/Config.in b/package/libldns/Config.in new file mode 100644 index 00000000..696fec97 --- /dev/null +++ b/package/libldns/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LIBLDNS + bool "libldns" + select BR2_PACKAGE_OPENSSL + help + The goal of ldns is to simplify DNS programming, it supports + recent RFCs like the DNSSEC documents, and allows developers + to easily create software conforming to current RFCs, and + experimental software for current Internet Drafts. + + http://www.nlnetlabs.nl/projects/ldns diff --git a/package/libldns/libldns.hash b/package/libldns/libldns.hash new file mode 100644 index 00000000..c8fb39d4 --- /dev/null +++ b/package/libldns/libldns.hash @@ -0,0 +1,7 @@ +# From http://www.nlnetlabs.nl/downloads/ldns/ldns-1.7.1.tar.gz.sha1 +sha1 d075a08972c0f573101fb4a6250471daaa53cb3e ldns-1.7.1.tar.gz +# From http://www.nlnetlabs.nl/downloads/ldns/ldns-1.7.1.tar.gz.sha256 +sha256 8ac84c16bdca60e710eea75782356f3ac3b55680d40e1530d7cea474ac208229 ldns-1.7.1.tar.gz + +# Hash for license file: +sha256 9e0b1505c358d1a7c79555ee8bd1acbe2985dbc74dd81f3697cebf2161e922e6 LICENSE diff --git a/package/libldns/libldns.mk b/package/libldns/libldns.mk new file mode 100644 index 00000000..9c248bbc --- /dev/null +++ b/package/libldns/libldns.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# libldns +# +################################################################################ + +LIBLDNS_VERSION = 1.7.1 +LIBLDNS_SOURCE = ldns-$(LIBLDNS_VERSION).tar.gz +LIBLDNS_SITE = http://www.nlnetlabs.nl/downloads/ldns +LIBLDNS_LICENSE = BSD-3-Clause +LIBLDNS_LICENSE_FILES = LICENSE +LIBLDNS_CPE_ID_VENDOR = nlnetlabs +LIBLDNS_CPE_ID_PRODUCT = ldns +LIBLDNS_INSTALL_STAGING = YES +LIBLDNS_DEPENDENCIES = openssl +# --disable-dane-verify can be removed after openssl bump to 1.1.x +LIBLDNS_CONF_OPTS = \ + --with-ssl=$(STAGING_DIR)/usr \ + --enable-dane \ + --disable-dane-verify \ + --enable-ecdsa \ + --enable-gost \ + --enable-sha2 \ + --without-examples \ + --without-p5-dns-ldns \ + --without-pyldns \ + --without-pyldnsx + +ifeq ($(BR2_STATIC_LIBS),y) +LIBLDNS_DEPENDENCIES += host-pkgconf +# missing -lz breaks configure, add it using pkgconf +LIBLDNS_CONF_ENV += LIBS="`$(PKG_CONFIG_HOST_BINARY) --libs openssl`" +endif + +# the linktest make target fails with static linking, and we are only +# interested in the lib target anyway +LIBLDNS_MAKE_OPTS = lib + +$(eval $(autotools-package)) diff --git a/package/liblinear/0001-blas-don-t-overwrite-ar-options.patch b/package/liblinear/0001-blas-don-t-overwrite-ar-options.patch new file mode 100644 index 00000000..0c13e35c --- /dev/null +++ b/package/liblinear/0001-blas-don-t-overwrite-ar-options.patch @@ -0,0 +1,36 @@ +From cae4c3b80fee0f3637d70f6d33946888c8105637 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sat, 13 Dec 2014 17:16:58 +0100 +Subject: [PATCH 1/1] blas: don't overwrite ar options + +ar's rcv options get lost when AR is passed on +the command line. + +Signed-off-by: Romain Naour +Signed-off-by: Fabrice Fontaine +--- + blas/Makefile | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/blas/Makefile b/blas/Makefile +index 895fd24..78cec9a 100644 +--- a/blas/Makefile ++++ b/blas/Makefile +@@ -1,4 +1,4 @@ +-AR = ar rcv ++AR = ar + RANLIB = ranlib + + HEADERS = blas.h blasp.h +@@ -8,7 +8,7 @@ CFLAGS = $(OPTFLAGS) + FFLAGS = $(OPTFLAGS) + + blas: $(FILES) $(HEADERS) +- $(AR) blas.a $(FILES) ++ $(AR) rcv blas.a $(FILES) + $(RANLIB) blas.a + + clean: +-- +1.9.3 + diff --git a/package/liblinear/0002-build-static-lib.patch b/package/liblinear/0002-build-static-lib.patch new file mode 100644 index 00000000..98657d3c --- /dev/null +++ b/package/liblinear/0002-build-static-lib.patch @@ -0,0 +1,18 @@ +Makefile: add a rule to build a static library + +Signed-off-by: "Yann E. MORIN" +diff -durN liblinear-1.96.orig/Makefile liblinear-1.96/Makefile +--- liblinear-1.96.orig/Makefile 2014-11-15 07:50:23.000000000 +0100 ++++ liblinear-1.96/Makefile 2014-12-14 00:23:00.135893956 +0100 +@@ -16,6 +16,11 @@ + fi; \ + $(CXX) $${SHARED_LIB_FLAG} linear.o tron.o blas/blas.a -o liblinear.so.$(SHVER) + ++# Keeping blas/blas.a as a pre-requisite, to ensure all .o files are built ++static-lib: linear.o tron.o blas/blas.a ++ $(AR) rcv liblinear.a linear.o tron.o blas/*.o ++ $(RANLIB) liblinear.a ++ + train: tron.o linear.o train.c blas/blas.a + $(CXX) $(CFLAGS) -o train train.c tron.o linear.o $(LIBS) + diff --git a/package/liblinear/Config.in b/package/liblinear/Config.in new file mode 100644 index 00000000..cabcba05 --- /dev/null +++ b/package/liblinear/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBLINEAR + bool "liblinear" + depends on BR2_INSTALL_LIBSTDCPP + help + liblinear is a linear classifier for data with millions of + instances and features. + + http://www.csie.ntu.edu.tw/~cjlin/liblinear/ + +comment "liblinear needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/liblinear/liblinear.hash b/package/liblinear/liblinear.hash new file mode 100644 index 00000000..4430d299 --- /dev/null +++ b/package/liblinear/liblinear.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 881c7039c6cf93119c781fb56263de91617b3eca8c3951f2c19a3797de95c6ac liblinear-2.30.tar.gz +sha256 c366abf1cb3a003d8c6e6d9c111a23c432db1d001294f88d479b70b60d7c0af2 COPYRIGHT diff --git a/package/liblinear/liblinear.mk b/package/liblinear/liblinear.mk new file mode 100644 index 00000000..2d0fd001 --- /dev/null +++ b/package/liblinear/liblinear.mk @@ -0,0 +1,46 @@ +################################################################################ +# +# liblinear +# +################################################################################ + +LIBLINEAR_VERSION = 2.30 +LIBLINEAR_SITE = http://www.csie.ntu.edu.tw/~cjlin/liblinear +LIBLINEAR_LICENSE = BSD-3-Clause +LIBLINEAR_LICENSE_FILES = COPYRIGHT +LIBLINEAR_INSTALL_STAGING = YES +LIBLINEAR_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_SHARED_LIBS)$(BR2_SHARED_STATIC_LIBS),y) +# $1: destination directory +define LIBLINEAR_INSTALL_SHARED + $(INSTALL) -m 0644 -D $(@D)/liblinear.so.3 $(1)/usr/lib/liblinear.so.3 + ln -sf liblinear.so.3 $(1)/usr/lib/liblinear.so +endef +LIBLINEAR_CFLAGS += -fPIC +endif + +ifeq ($(BR2_STATIC_LIBS)$(BR2_SHARED_STATIC_LIBS),y) +# $1: destination directory +define LIBLINEAR_INSTALL_STATIC + $(INSTALL) -m 0644 -D $(@D)/liblinear.a $(1)/usr/lib/liblinear.a +endef +endif + +define LIBLINEAR_BUILD_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) CFLAGS="$(LIBLINEAR_CFLAGS)" -C $(@D) \ + $(if $(BR2_SHARED_LIBS)$(BR2_SHARED_STATIC_LIBS),lib) \ + $(if $(BR2_STATIC_LIBS)$(BR2_SHARED_STATIC_LIBS),static-lib) +endef + +define LIBLINEAR_INSTALL_STAGING_CMDS + $(INSTALL) -m 0644 -D $(@D)/linear.h $(STAGING_DIR)/usr/include/linear.h + $(call LIBLINEAR_INSTALL_SHARED,$(STAGING_DIR)) + $(call LIBLINEAR_INSTALL_STATIC,$(STAGING_DIR)) +endef + +define LIBLINEAR_INSTALL_TARGET_CMDS + $(call LIBLINEAR_INSTALL_SHARED,$(TARGET_DIR)) +endef + +$(eval $(generic-package)) diff --git a/package/libllcp/Config.in b/package/libllcp/Config.in new file mode 100644 index 00000000..5dc5c36a --- /dev/null +++ b/package/libllcp/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LIBLLCP + bool "libllcp" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_LIBNFC + help + Library extending libnfc with support for Logical Link Control + Protocol. + + https://github.com/nfc-tools/libllcp + +comment "libllcp needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libllcp/libllcp.hash b/package/libllcp/libllcp.hash new file mode 100644 index 00000000..e6f63017 --- /dev/null +++ b/package/libllcp/libllcp.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 4336533304a11ecb3041d211ccecd7759b7c7aad4f44037721803e2da1094d22 libllcp-05dfa8003433a7070bfd8ae02efdb0203bbf34aa.tar.gz +sha256 9ccf26cfe845e0eb8bb58053e47366e7ab6b697ae010f7650978d4b71b7d1fc1 COPYING diff --git a/package/libllcp/libllcp.mk b/package/libllcp/libllcp.mk new file mode 100644 index 00000000..ad4fca6b --- /dev/null +++ b/package/libllcp/libllcp.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# libllcp +# +################################################################################ + +LIBLLCP_VERSION = 05dfa8003433a7070bfd8ae02efdb0203bbf34aa +LIBLLCP_SITE = $(call github,nfc-tools,libllcp,$(LIBLLCP_VERSION)) +LIBLLCP_DEPENDENCIES = host-pkgconf libnfc +# There's no ./configure in the repository, so we need to autoreconf +LIBLLCP_AUTORECONF = YES +LIBLLCP_INSTALL_STAGING = YES +LIBLLCP_LICENSE = GPL-3.0+ +LIBLLCP_LICENSE_FILES = COPYING +# ensure graphviz isn't used +LIBLLCP_CONF_ENV = ac_cv_path_DOT= + +$(eval $(autotools-package)) diff --git a/package/liblo/Config.in b/package/liblo/Config.in new file mode 100644 index 00000000..705ac845 --- /dev/null +++ b/package/liblo/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBLO + bool "liblo" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + liblo is an implementation of the Open Sound Control + protocol for POSIX systems + + http://liblo.sourceforge.net/ + +comment "liblo needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/liblo/liblo.hash b/package/liblo/liblo.hash new file mode 100644 index 00000000..a3d34d79 --- /dev/null +++ b/package/liblo/liblo.hash @@ -0,0 +1,7 @@ +# From http://sourceforge.net/projects/liblo/files/liblo/0.31/ +sha1 d188a62df51e29fa98861daec1db0fdae400410d liblo-0.31.tar.gz +md5 14378c1e74c58e777fbb4fcf33ac5315 liblo-0.31.tar.gz + +# Locally computed +sha256 2b4f446e1220dcd624ecd8405248b08b7601e9a0d87a0b94730c2907dbccc750 liblo-0.31.tar.gz +sha256 5df07007198989c622f5d41de8d703e7bef3d0e79d62e24332ee739a452af62a COPYING diff --git a/package/liblo/liblo.mk b/package/liblo/liblo.mk new file mode 100644 index 00000000..27dba1f9 --- /dev/null +++ b/package/liblo/liblo.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# liblo +# +################################################################################ + +LIBLO_VERSION = 0.31 +LIBLO_SITE = http://downloads.sourceforge.net/project/liblo/liblo/$(LIBLO_VERSION) + +LIBLO_LICENSE = LGPL-2.1+ +LIBLO_LICENSE_FILES = COPYING +LIBLO_INSTALL_STAGING = YES + +# IPv6 support broken, issue known upstream +LIBLO_CONF_OPTS = --disable-ipv6 + +# Liblo uses atomic builtins, so we need to link with libatomic for +# the architectures who explicitly need libatomic. +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +LIBLO_CONF_ENV += LIBS="-latomic" +endif + +$(eval $(autotools-package)) diff --git a/package/liblockfile/0001-install.patch b/package/liblockfile/0001-install.patch new file mode 100644 index 00000000..bfa197c6 --- /dev/null +++ b/package/liblockfile/0001-install.patch @@ -0,0 +1,16 @@ +diff -ur liblockfile-1.06.1/Makefile.in liblockfile-1.06.1-patched/Makefile.in +--- liblockfile-1.06.1/Makefile.in 2001-03-16 22:08:33.000000000 -0600 ++++ liblockfile-1.06.1-patched/Makefile.in 2007-04-11 07:18:38.000000000 -0500 +@@ -60,11 +60,7 @@ + + install_common: + install -m 644 lockfile.h maillock.h $(ROOT)$(includedir) +- if [ "$(MAILGROUP)" != "" ]; then\ +- install -g $(MAILGROUP) -m 2755 dotlockfile $(ROOT)$(bindir);\ +- else \ +- install -g root -m 755 dotlockfile $(ROOT)$(bindir); \ +- fi ++ install -m 2755 dotlockfile $(ROOT)$(bindir);\ + install -m 644 *.1 $(ROOT)$(mandir)/man1 + install -m 644 *.3 $(ROOT)$(mandir)/man3 + diff --git a/package/liblockfile/Config.in b/package/liblockfile/Config.in new file mode 100644 index 00000000..83ffea86 --- /dev/null +++ b/package/liblockfile/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LIBLOCKFILE + bool "liblockfile" + help + NFS-safe locking library. + + https://github.com/miquels/liblockfile diff --git a/package/liblockfile/liblockfile.hash b/package/liblockfile/liblockfile.hash new file mode 100644 index 00000000..881ad992 --- /dev/null +++ b/package/liblockfile/liblockfile.hash @@ -0,0 +1,5 @@ +# From http://snapshot.debian.org/archive/debian/20151026T153523Z/pool/main/libl/liblockfile/liblockfile_1.09-6.dsc +sha256 16979eba05396365e1d6af7100431ae9d32f9bc063930d1de66298a0695f1b7f liblockfile_1.09.orig.tar.gz +sha256 d45eacb7c637c16d03c777c55989d98da494ae9584a0783fe6dbf0db60fa290f liblockfile_1.09-6.debian.tar.bz2 +# Locally computed +sha256 5fffcc11f94a05a7cff02ff792407737eb1cba840767cc1a71b67fbb19695dd3 COPYRIGHT diff --git a/package/liblockfile/liblockfile.mk b/package/liblockfile/liblockfile.mk new file mode 100644 index 00000000..07108682 --- /dev/null +++ b/package/liblockfile/liblockfile.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# liblockfile +# +################################################################################ + +LIBLOCKFILE_VERSION = 1.09 +LIBLOCKFILE_SOURCE = liblockfile_$(LIBLOCKFILE_VERSION).orig.tar.gz +LIBLOCKFILE_SITE = http://snapshot.debian.org/archive/debian/20151026T153523Z/pool/main/libl/liblockfile +LIBLOCKFILE_PATCH = liblockfile_$(LIBLOCKFILE_VERSION)-6.debian.tar.bz2 + +LIBLOCKFILE_LICENSE = LGPL-2.0+, GPL-2.0+ (dotlockfile) +LIBLOCKFILE_LICENSE_FILES = COPYRIGHT + +LIBLOCKFILE_INSTALL_STAGING = YES +LIBLOCKFILE_CONF_OPTS = --mandir=/usr/share/man + +define LIBLOCKFILE_INSTALL_STAGING_CMDS + mkdir -p $(addprefix $(STAGING_DIR)/usr/share/man/man,1 3) + rm -f $(STAGING_DIR)/usr/lib/liblockfile.so + $(TARGET_MAKE_ENV) $(MAKE) -C $(LIBLOCKFILE_DIR) ROOT=$(STAGING_DIR) install + ln -sf liblockfile.so $(STAGING_DIR)/usr/lib/liblockfile.so.1 +endef + +define LIBLOCKFILE_INSTALL_TARGET_CMDS + cp -a $(STAGING_DIR)/usr/lib/liblockfile.so* $(TARGET_DIR)/usr/lib +endef + +$(eval $(autotools-package)) diff --git a/package/liblog4c-localtime/0001-log4c.m4-fix-underquoted-definition-of-AM_PATH_LOG4C.patch b/package/liblog4c-localtime/0001-log4c.m4-fix-underquoted-definition-of-AM_PATH_LOG4C.patch new file mode 100644 index 00000000..1fe0798a --- /dev/null +++ b/package/liblog4c-localtime/0001-log4c.m4-fix-underquoted-definition-of-AM_PATH_LOG4C.patch @@ -0,0 +1,34 @@ +From b7290560082e91673431de79e1fa318c9fd90261 Mon Sep 17 00:00:00 2001 +From: Danomi Manchego +Date: Sat, 25 Oct 2014 19:42:38 +0200 +Subject: [PATCH 1/5] log4c.m4: fix "underquoted definition of AM_PATH_LOG4C" + warning + +When autoreconfiguring liblog4c-localtime, there is a warning from +autoconf caused by an underquoted definition of AM_PATH_LOG4C. This +patch fixes this warning. + +Submitted upstream: https://github.com/rcmadruga/log4c-localtime/pull/1 + +Signed-off-by: Danomi Manchego +Signed-off-by: Thomas Petazzoni +--- + log4c.m4 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/log4c.m4 b/log4c.m4 +index 551a90d..96424c0 100644 +--- a/log4c.m4 ++++ b/log4c.m4 +@@ -4,7 +4,7 @@ + dnl AM_PATH_LOG4C([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) + dnl Test for LOG4C, and define LOG4C_CFLAGS and LOG4C_LIBS + dnl +-AC_DEFUN(AM_PATH_LOG4C, ++AC_DEFUN([AM_PATH_LOG4C], + [dnl + dnl Get the cflags and libraries from the log4c-config script + dnl +-- +2.0.0 + diff --git a/package/liblog4c-localtime/0002-Fix-linking-error-without-pthread.patch b/package/liblog4c-localtime/0002-Fix-linking-error-without-pthread.patch new file mode 100644 index 00000000..5b679e38 --- /dev/null +++ b/package/liblog4c-localtime/0002-Fix-linking-error-without-pthread.patch @@ -0,0 +1,38 @@ +From 435b28cd90973cc03a533e75e90a46cd9f197dff Mon Sep 17 00:00:00 2001 +From: Peter Korsgaard +Date: Sat, 25 Oct 2014 19:44:01 +0200 +Subject: [PATCH 2/5] Fix linking error without pthread + +The rollingfile functionality only gets built if pthread support is +available, but a call to these functions from log4c_fini() was outside +the #if WITH_ROLLINGFILE conditional, causing linker errors when the +library is used. + +Submitted upstream: https://github.com/rcmadruga/log4c-localtime/pull/1 + +Signed-off-by: Peter Korsgaard +Signed-off-by: Thomas Petazzoni +--- + src/log4c/init.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/log4c/init.c b/src/log4c/init.c +index 99883ea..7dd9eb4 100644 +--- a/src/log4c/init.c ++++ b/src/log4c/init.c +@@ -267,10 +267,12 @@ extern int log4c_fini(void) + log4c_layout_factory = NULL; + } + ++#ifdef WITH_ROLLINGFILE + if (log4c_rollingpolicy_factory) { + sd_factory_delete(log4c_rollingpolicy_factory); + log4c_rollingpolicy_factory = NULL; + } ++#endif + + #ifdef __SD_DEBUG__ + if( getenv("SD_DEBUG")){ +-- +2.0.0 + diff --git a/package/liblog4c-localtime/0003-Fix-debug-mode-build-with-uClibc.patch b/package/liblog4c-localtime/0003-Fix-debug-mode-build-with-uClibc.patch new file mode 100644 index 00000000..4b9a45db --- /dev/null +++ b/package/liblog4c-localtime/0003-Fix-debug-mode-build-with-uClibc.patch @@ -0,0 +1,69 @@ +From acbaee34bcb1881db97969dd2c411446f32ca4cc Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sat, 25 Oct 2014 19:45:33 +0200 +Subject: [PATCH 3/5] Fix debug mode build with uClibc + +When --enable-debug is passed, liblog4c-localtime wants to use +. It takes the precaution of testing if __GLIBC__ is +defined. But unfortunately, the uClibc C library pretends to be +compatible with glibc by defining __GLIBC__, but it doesn't provide +mcheck.h. + +To better support this situation, we add an AC_CHECK_HEADERS() check +on mcheck.h, and then use HAVE_MCHECK_H were appropriate. + +Submitted upstream: https://github.com/rcmadruga/log4c-localtime/pull/1 + +Signed-off-by: Thomas Petazzoni +--- + configure.in | 2 +- + src/log4c/init.c | 6 +++--- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/configure.in b/configure.in +index 612ccbe..dbf11e9 100644 +--- a/configure.in ++++ b/configure.in +@@ -115,7 +115,7 @@ AM_CONDITIONAL(TEST, test x$enable_test = xyes) + AC_HEADER_STDC + AC_CHECK_HEADERS([fcntl.h inttypes.h langinfo.h limits.h stddef.h stdint.h \ + stdlib.h string.h sys/time.h syslog.h unistd.h stdarg.h varargs.h getopt.h \ +-pthread.h]) ++pthread.h mcheck.h]) + + # Checks for typedefs, structures, and compiler characteristics. + AC_C_CONST +diff --git a/src/log4c/init.c b/src/log4c/init.c +index 7dd9eb4..4b88210 100644 +--- a/src/log4c/init.c ++++ b/src/log4c/init.c +@@ -35,7 +35,7 @@ static const char version[] = "$Id$"; + #include + #include + +-#if defined(__LOG4C_DEBUG__) && defined(__GLIBC__) ++#if defined(__LOG4C_DEBUG__) && defined(HAVE_MCHECK_H) + #include + #endif + +@@ -100,7 +100,7 @@ extern int log4c_init(void) + sd_debug("log4c_init["); + + /* activate GLIBC allocation debugging */ +-#if defined(__LOG4C_DEBUG__) && defined(__GLIBC__) ++#if defined(__LOG4C_DEBUG__) && defined(HAVE_MCHECK_H) + mtrace(); + #endif + +@@ -280,7 +280,7 @@ extern int log4c_fini(void) + log4c_dump_all_instances(stderr); + } + #endif +-#if defined(__LOG4C_DEBUG__) && defined(__GLIBC__) ++#if defined(__LOG4C_DEBUG__) && defined(HAVE_MCHECK_H) + muntrace(); + #endif + +-- +2.0.0 + diff --git a/package/liblog4c-localtime/0004-Add-AC_CONFIG_MACRO_DIR-to-configure.in.patch b/package/liblog4c-localtime/0004-Add-AC_CONFIG_MACRO_DIR-to-configure.in.patch new file mode 100644 index 00000000..479eb398 --- /dev/null +++ b/package/liblog4c-localtime/0004-Add-AC_CONFIG_MACRO_DIR-to-configure.in.patch @@ -0,0 +1,30 @@ +From a2553c203d8b8257dea1d2e2139b220935587144 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sat, 25 Oct 2014 20:03:25 +0200 +Subject: [PATCH 4/5] Add AC_CONFIG_MACRO_DIR to configure.in + +Without AC_CONFIG_MACRO_DIR, when autoreconfiguring the package, it +cannot find AM_PATH_EXPAT which is defined in config/expat.m4. + +Submitted upstream: https://github.com/rcmadruga/log4c-localtime/pull/1 + +Signed-off-by: Thomas Petazzoni +--- + configure.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/configure.in b/configure.in +index dbf11e9..769b204 100644 +--- a/configure.in ++++ b/configure.in +@@ -5,6 +5,7 @@ AC_PREREQ(2.57) + AC_INIT + AC_CONFIG_SRCDIR([configure.in]) + AC_CONFIG_AUX_DIR(config) ++AC_CONFIG_MACRO_DIR([config]) + AM_CONFIG_HEADER(src/config.h) + + LOG4C_MAJOR_VERSION=1 +-- +2.0.0 + diff --git a/package/liblog4c-localtime/0005-Fix-C-support.patch b/package/liblog4c-localtime/0005-Fix-C-support.patch new file mode 100644 index 00000000..6ba25c36 --- /dev/null +++ b/package/liblog4c-localtime/0005-Fix-C-support.patch @@ -0,0 +1,61 @@ +From bdccec4c374a93480a7fd303d15e20810a5d5b7e Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sat, 25 Oct 2014 21:22:40 +0200 +Subject: [PATCH 5/5] Fix C++ support + +Autoreconf fails with the following message: + +tests/log4c/Makefile.am: error: C++ source seen but 'CXX' is undefined + +So this commit adds the AC_PROG_CXX macro to configure.in, and ensures +that the C++ test is only built if a C++ compiler is available. + +Submitted upstream: https://github.com/rcmadruga/log4c-localtime/pull/1 + +Signed-off-by: Thomas Petazzoni +--- + configure.in | 3 +++ + tests/log4c/Makefile.am | 6 +++++- + 2 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/configure.in b/configure.in +index 769b204..ce75800 100644 +--- a/configure.in ++++ b/configure.in +@@ -38,6 +38,7 @@ AC_DEFINE(_GNU_SOURCE,1,"POSIXandGNU extensions") + #. + AC_PROG_YACC + AC_PROG_CC ++AC_PROG_CXX + AC_PROG_CPP + AM_PROG_LEX + AC_PROG_AWK +@@ -47,6 +48,8 @@ AC_PROG_MAKE_SET + AC_PROG_RANLIB + AC_PROG_LIBTOOL + ++AM_CONDITIONAL([USE_CXX], [test "$ac_cv_prog_CXX" != "no"]) ++ + # platform idioms + case "$host" in + *-hp-hpux*) +diff --git a/tests/log4c/Makefile.am b/tests/log4c/Makefile.am +index f647f27..b1b4ed6 100644 +--- a/tests/log4c/Makefile.am ++++ b/tests/log4c/Makefile.am +@@ -3,7 +3,11 @@ INCLUDES = \ + -DSRCDIR="\"$(srcdir)\"" + + noinst_PROGRAMS = test_category test_rc bench bench_fwrite \ +- test_stream2 test_layout_r cpp_compile_test ++ test_stream2 test_layout_r ++ ++if USE_CXX ++noinst_PROGRAMS += cpp_compile_test ++endif + + if WITH_ROLLINGFILE + noinst_PROGRAMS += test_rollingfile_appender test_rollingfile_appender_mt +-- +2.0.0 + diff --git a/package/liblog4c-localtime/Config.in b/package/liblog4c-localtime/Config.in new file mode 100644 index 00000000..fd6cab83 --- /dev/null +++ b/package/liblog4c-localtime/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBLOG4C_LOCALTIME + bool "liblog4c-localtime" + select BR2_PACKAGE_EXPAT + help + Log4c is a library of C for flexible logging to files, syslog + and other destinations. + This version is with localtime patch, to make lib show times + in local timezone. + + https://github.com/rcmadruga/log4c-localtime + http://log4c.sourceforge.net/ diff --git a/package/liblog4c-localtime/liblog4c-localtime.hash b/package/liblog4c-localtime/liblog4c-localtime.hash new file mode 100644 index 00000000..d14b7959 --- /dev/null +++ b/package/liblog4c-localtime/liblog4c-localtime.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 a1f68d8251509c0171f8bfea42f9e2a5255a4185f7dcbe67f584aa09709b2496 liblog4c-localtime-1.0.tar.gz +sha256 a190dc9c8043755d90f8b0a75fa66b9e42d4af4c980bf5ddc633f0124db3cee7 COPYING diff --git a/package/liblog4c-localtime/liblog4c-localtime.mk b/package/liblog4c-localtime/liblog4c-localtime.mk new file mode 100644 index 00000000..4ec390d7 --- /dev/null +++ b/package/liblog4c-localtime/liblog4c-localtime.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# liblog4c-localtime +# +################################################################################ + +LIBLOG4C_LOCALTIME_VERSION = 1.0 +LIBLOG4C_LOCALTIME_SITE = $(call github,rcmadruga,log4c-localtime,v$(LIBLOG4C_LOCALTIME_VERSION)) +LIBLOG4C_LOCALTIME_INSTALL_STAGING = YES +LIBLOG4C_LOCALTIME_CONF_OPTS = --disable-expattest +LIBLOG4C_LOCALTIME_DEPENDENCIES = expat +LIBLOG4C_LOCALTIME_CONFIG_SCRIPTS = log4c-config +LIBLOG4C_LOCALTIME_LICENSE = LGPL-2.1 +LIBLOG4C_LOCALTIME_LICENSE_FILES = COPYING +LIBLOG4C_LOCALTIME_AUTORECONF = YES + +define LIBLOG4C_LOCALTIME_FIX_CONFIGURE_PERMS + chmod +x $(@D)/configure +endef + +LIBLOG4C_LOCALTIME_PRE_CONFIGURE_HOOKS += LIBLOG4C_LOCALTIME_FIX_CONFIGURE_PERMS + +$(eval $(autotools-package)) diff --git a/package/liblogging/Config.in b/package/liblogging/Config.in new file mode 100644 index 00000000..a39fdf8d --- /dev/null +++ b/package/liblogging/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBLOGGING + bool "liblogging" + help + Liblogging is an easy to use library for + logging. It offers an enhanced replacement + for the syslog() call, but retains its ease of use. + + https://www.rsyslog.com/liblogging/ diff --git a/package/liblogging/liblogging.hash b/package/liblogging/liblogging.hash new file mode 100644 index 00000000..618689b4 --- /dev/null +++ b/package/liblogging/liblogging.hash @@ -0,0 +1,5 @@ +# From http://www.liblogging.org/ +sha256 338c6174e5c8652eaa34f956be3451f7491a4416ab489aef63151f802b00bf93 liblogging-1.0.6.tar.gz + +# Hash for license file: +sha256 a5626f700d3ee92513673b5f43733af5b651d9e7a9157d4bd81ceb9c89ec04b0 COPYING diff --git a/package/liblogging/liblogging.mk b/package/liblogging/liblogging.mk new file mode 100644 index 00000000..24375b56 --- /dev/null +++ b/package/liblogging/liblogging.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# liblogging +# +################################################################################ + +LIBLOGGING_VERSION = 1.0.6 +LIBLOGGING_SITE = http://download.rsyslog.com/liblogging +LIBLOGGING_LICENSE = BSD-2-Clause +LIBLOGGING_LICENSE_FILES = COPYING +LIBLOGGING_CPE_ID_VENDOR = adiscon +LIBLOGGING_INSTALL_STAGING = YES +LIBLOGGING_CONF_OPTS = --enable-cached-man-pages + +ifeq ($(BR2_INIT_SYSTEMD),y) +LIBLOGGING_CONF_OPTS += --enable-journal +LIBLOGGING_DEPENDENCIES += systemd +else +LIBLOGGING_CONF_OPTS += --disable-journal +endif + +$(eval $(autotools-package)) diff --git a/package/libloki/0001-allow-to-install-to-a-specific-location-using-DESTDI.patch b/package/libloki/0001-allow-to-install-to-a-specific-location-using-DESTDI.patch new file mode 100644 index 00000000..d19306fd --- /dev/null +++ b/package/libloki/0001-allow-to-install-to-a-specific-location-using-DESTDI.patch @@ -0,0 +1,65 @@ +From 0b80e8beff68a0570fdc2d9281992060414475c1 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sat, 29 Apr 2017 22:13:54 +0200 +Subject: [PATCH] allow to install to a specific location using DESTDIR + +DESTDIR is the autotools standard variable where to copy +headers, libraries and binaries. It's not the same as "prefix". + +So while installing to Buildroot STAGING directory, use prefix=/usr +and DESTOR=$(STAGING_DIR). + +Signed-off-by: Romain Naour +Sigend-off-by: Corentin GUILLEVIC +--- + include/Makefile | 12 ++++++------ + src/Makefile | 10 +++++----- + 2 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/include/Makefile b/include/Makefile +index 26a8139..a8cf369 100644 +--- a/include/Makefile ++++ b/include/Makefile +@@ -2,10 +2,10 @@ include ../Makefile.common + + .PHONY: install + install: +- mkdir -p $(prefix)/include/loki +- mkdir -p $(prefix)/include/loki/flex +- mkdir -p $(prefix)/include/loki/yasli ++ mkdir -p $(DESTDIR)$(prefix)/include/loki ++ mkdir -p $(DESTDIR)$(prefix)/include/loki/flex ++ mkdir -p $(DESTDIR)$(prefix)/include/loki/yasli + +- install -m 644 loki/*.h $(prefix)/include/loki +- install -m 644 loki/flex/*.h $(prefix)/include/loki/flex +- install -m 644 loki/yasli/*.h $(prefix)/include/loki/yasli ++ install -m 644 loki/*.h $(DESTDIR)$(prefix)/include/loki ++ install -m 644 loki/flex/*.h $(DESTDIR)$(prefix)/include/loki/flex ++ install -m 644 loki/yasli/*.h $(DESTDIR)$(prefix)/include/loki/yasli +diff --git a/src/Makefile b/src/Makefile +index b272929..054285e 100644 +--- a/src/Makefile ++++ b/src/Makefile +@@ -74,13 +74,13 @@ INSTALL_DATA := $(INSTALL) -m 644 + install: install-static install-shared + + install-static: $(RESULT_DIR)$(STATIC_LIB) +- mkdir -p $(prefix)/lib +- $(INSTALL_DATA) $(RESULT_DIR)$(STATIC_LIB) $(prefix)/lib ++ mkdir -p $(DESTDIR)$(prefix)/lib ++ $(INSTALL_DATA) $(RESULT_DIR)$(STATIC_LIB) $(DESTDIR)$(prefix)/lib + + install-shared: $(RESULT_DIR)$(SHARED_LIB_VERSIONED) +- mkdir -p $(prefix)/lib +- $(INSTALL_DATA) $(RESULT_DIR)$(SHARED_LIB_VERSIONED) $(prefix)/lib +- cd $(prefix)/lib; ln -s $(SHARED_LIB_VERSIONED) $(SHARED_LIB_BASE) ++ mkdir -p $(DESTDIR)$(prefix)/lib ++ $(INSTALL_DATA) $(RESULT_DIR)$(SHARED_LIB_VERSIONED) $(DESTDIR)$(prefix)/lib ++ cd $(DESTDIR)$(prefix)/lib; ln -s $(SHARED_LIB_VERSIONED) $(SHARED_LIB_BASE) + + %.lo : %.cpp + $(CXX) -c $(CXXFLAGS) -fPIC $(CPPFLAGS) -o $@ $< +-- +2.9.3 + diff --git a/package/libloki/0002-use-ln-snf.patch b/package/libloki/0002-use-ln-snf.patch new file mode 100644 index 00000000..5b73d7f9 --- /dev/null +++ b/package/libloki/0002-use-ln-snf.patch @@ -0,0 +1,31 @@ +From 7fcaa080ef3fddb3f7dcfaf2984bc397d7c9e96c Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sat, 29 Apr 2017 22:27:26 +0200 +Subject: [PATCH] use ln -snf + +Otherwise the install step fail due to existing symlink. + +'libloki.so': File exists + +Signed-off-by: Romain Naour +Sigend-off-by: Corentin GUILLEVIC +--- + src/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/Makefile b/src/Makefile +index 054285e..2c169ab 100644 +--- a/src/Makefile ++++ b/src/Makefile +@@ -80,7 +80,7 @@ install-static: $(RESULT_DIR)$(STATIC_LIB) + install-shared: $(RESULT_DIR)$(SHARED_LIB_VERSIONED) + mkdir -p $(DESTDIR)$(prefix)/lib + $(INSTALL_DATA) $(RESULT_DIR)$(SHARED_LIB_VERSIONED) $(DESTDIR)$(prefix)/lib +- cd $(DESTDIR)$(prefix)/lib; ln -s $(SHARED_LIB_VERSIONED) $(SHARED_LIB_BASE) ++ cd $(DESTDIR)$(prefix)/lib; ln -snf $(SHARED_LIB_VERSIONED) $(SHARED_LIB_BASE) + + %.lo : %.cpp + $(CXX) -c $(CXXFLAGS) -fPIC $(CPPFLAGS) -o $@ $< +-- +2.9.3 + diff --git a/package/libloki/Config.in b/package/libloki/Config.in new file mode 100644 index 00000000..4ce4429a --- /dev/null +++ b/package/libloki/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LIBLOKI + bool "libloki" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + help + A C++ library of designs, containing flexible + implementations of common design patterns and idioms. + + http://sourceforge.net/projects/loki-lib + +comment "libloki needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libloki/libloki.hash b/package/libloki/libloki.hash new file mode 100644 index 00000000..52d67c88 --- /dev/null +++ b/package/libloki/libloki.hash @@ -0,0 +1,5 @@ +# From https://sourceforge.net/projects/loki-lib/files/Loki/Loki%200.1.7 +md5 33a24bcbb99fa2ec8fcbbab65649f3f6 loki-0.1.7.tar.bz2 +sha1 006c630217b1e1fd33015dc0597d2d743d8ee4e3 loki-0.1.7.tar.bz2 +# locally computed +sha256 07553754f6be2738559947db69b0718512665bf4a34015fa3a875b6eb1111198 loki-0.1.7.tar.bz2 diff --git a/package/libloki/libloki.mk b/package/libloki/libloki.mk new file mode 100644 index 00000000..07a9372d --- /dev/null +++ b/package/libloki/libloki.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# libloki +# +################################################################################ + +LIBLOKI_VERSION = 0.1.7 +LIBLOKI_SOURCE = loki-$(LIBLOKI_VERSION).tar.bz2 +LIBLOKI_SITE = https://sourceforge.net/projects/loki-lib/files/Loki/Loki%20$(LIBLOKI_VERSION) +LIBLOKI_LICENSE = MIT +LIBLOKI_INSTALL_STAGING = YES + +ifeq ($(BR2_STATIC_LIBS),y) +LIBLOKI_BUILD_TARGETS += build-static +LIBLOKI_INSTALL_TARGETS += install-static +else ifeq ($(BR2_SHARED_LIBS),y) +LIBLOKI_BUILD_TARGETS += build-shared +LIBLOKI_INSTALL_TARGETS += install-shared +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +LIBLOKI_BUILD_TARGETS += build-static build-shared +LIBLOKI_INSTALL_TARGETS += install-static install-shared +endif + +define LIBLOKI_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) \ + CXXFLAGS="$(TARGET_CXXFLAGS) -std=c++11" \ + -C $(@D) $(LIBLOKI_BUILD_TARGETS) +endef + +define LIBLOKI_INSTALL_STAGING_CMDS + $(MAKE) -C $(@D)/src DESTDIR=$(STAGING_DIR) $(LIBLOKI_INSTALL_TARGETS) + $(MAKE) -C $(@D)/include DESTDIR=$(STAGING_DIR) install +endef + +define LIBLOKI_INSTALL_TARGET_CMDS + $(MAKE) -C $(@D)/src DESTDIR=$(TARGET_DIR) $(LIBLOKI_INSTALL_TARGETS) +endef + +$(eval $(generic-package)) diff --git a/package/libmad/0001-mips-h-constraint-removal.patch b/package/libmad/0001-mips-h-constraint-removal.patch new file mode 100644 index 00000000..09585871 --- /dev/null +++ b/package/libmad/0001-mips-h-constraint-removal.patch @@ -0,0 +1,72 @@ +http://patchwork.openembedded.org/patch/921/ + +diff -ur libmad-0.15.1b-orig/fixed.h libmad-0.15.1b/fixed.h +--- libmad-0.15.1b-orig/fixed.h 2004-02-17 12:32:03.000000000 +1030 ++++ libmad-0.15.1b/fixed.h 2009-08-05 10:46:30.000000000 +0930 +@@ -299,6 +299,23 @@ + + # elif defined(FPM_MIPS) + ++/* Test for gcc >= maj.min, as per __GNUC_PREREQ in glibc */ ++#if defined (__GNUC__) && defined (__GNUC_MINOR__) ++#define __GNUC_PREREQ(maj, min) \ ++ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) ++#else ++#define __GNUC_PREREQ(maj, min) 0 ++#endif ++ ++#if __GNUC_PREREQ(4,4) ++ typedef unsigned int u64_di_t __attribute__ ((mode (DI))); ++# define MAD_F_MLX(hi, lo, x, y) \ ++ do { \ ++ u64_di_t __ll = (u64_di_t) (x) * (y); \ ++ hi = __ll >> 32; \ ++ lo = __ll; \ ++ } while (0) ++#else + /* + * This MIPS version is fast and accurate; the disposition of the least + * significant bit depends on OPT_ACCURACY via mad_f_scale64(). +@@ -328,6 +345,7 @@ + : "%r" ((x) >> 12), "r" ((y) >> 16)) + # define MAD_F_MLZ(hi, lo) ((mad_fixed_t) (lo)) + # endif ++#endif /* __GNU_PREREQ(4,4) */ + + # if defined(OPT_SPEED) + # define mad_f_scale64(hi, lo) \ +diff -ur libmad-0.15.1b-orig/mad.h libmad-0.15.1b/mad.h +--- libmad-0.15.1b-orig/mad.h 2004-02-17 13:25:44.000000000 +1030 ++++ libmad-0.15.1b/mad.h 2009-08-05 10:42:40.000000000 +0930 +@@ -344,6 +344,23 @@ + + # elif defined(FPM_MIPS) + ++/* Test for gcc >= maj.min, as per __GNUC_PREREQ in glibc */ ++#if defined (__GNUC__) && defined (__GNUC_MINOR__) ++#define __GNUC_PREREQ(maj, min) \ ++ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) ++#else ++#define __GNUC_PREREQ(maj, min) 0 ++#endif ++ ++#if __GNUC_PREREQ(4,4) ++ typedef unsigned int u64_di_t __attribute__ ((mode (DI))); ++# define MAD_F_MLX(hi, lo, x, y) \ ++ do { \ ++ u64_di_t __ll = (u64_di_t) (x) * (y); \ ++ hi = __ll >> 32; \ ++ lo = __ll; \ ++ } while (0) ++#else + /* + * This MIPS version is fast and accurate; the disposition of the least + * significant bit depends on OPT_ACCURACY via mad_f_scale64(). +@@ -373,6 +390,7 @@ + : "%r" ((x) >> 12), "r" ((y) >> 16)) + # define MAD_F_MLZ(hi, lo) ((mad_fixed_t) (lo)) + # endif ++#endif /* __GNU_PREREQ(4,4) */ + + # if defined(OPT_SPEED) + # define mad_f_scale64(hi, lo) \ diff --git a/package/libmad/0002-configure-ac-automake-foreign.patch b/package/libmad/0002-configure-ac-automake-foreign.patch new file mode 100644 index 00000000..828ad0c1 --- /dev/null +++ b/package/libmad/0002-configure-ac-automake-foreign.patch @@ -0,0 +1,16 @@ +configure.ac: don't require GNU-specific files when running automake + +Signed-off-by: Fabrice Fontaine + +diff -ur libmad-0.15.1b-orig/configure.ac libmad-0.15.1b/configure.ac +--- libmad-0.15.1b-orig/configure.ac 2019-01-17 21:24:52.259194527 +0100 ++++ libmad-0.15.1b/configure.ac 2019-01-17 21:25:32.779481058 +0100 +@@ -26,7 +26,7 @@ + + AC_CONFIG_SRCDIR([decoder.h]) + +-AM_INIT_AUTOMAKE ++AM_INIT_AUTOMAKE([foreign]) + + AM_CONFIG_HEADER([config.h]) + diff --git a/package/libmad/Config.in b/package/libmad/Config.in new file mode 100644 index 00000000..1d6bdd86 --- /dev/null +++ b/package/libmad/Config.in @@ -0,0 +1,51 @@ +config BR2_PACKAGE_LIBMAD + bool "libmad" + help + High-quality MPEG audio decoder. All computations are + performed with fixed-point integer arithmetic, making it ideal + for systems without a floating-point unit. + + http://www.underbit.com/products/mad/ + +if BR2_PACKAGE_LIBMAD + +choice + prompt "Speed vs. accuracy" + default BR2_PACKAGE_LIBMAD_OPTIMIZATION_DEFAULT + +config BR2_PACKAGE_LIBMAD_OPTIMIZATION_DEFAULT + bool "Default" + help + Keep optimizations balanced between speed and accuracy. + +config BR2_PACKAGE_LIBMAD_OPTIMIZATION_SPEED + bool "Optimize for speed over accuracy" + help + Compromise accuracy for speed. + +config BR2_PACKAGE_LIBMAD_OPTIMIZATION_ACCURACY + bool "Optimize for accuracy over speed" + help + Compromise speed for accuracy. + +endchoice + +config BR2_PACKAGE_LIBMAD_SSO + bool "Subband synthesis optimization" + help + Use the subband synthesis optimization, with reduced accuracy. + +config BR2_PACKAGE_LIBMAD_ASO + bool "Architecture-specific optimizations" + default y + # arm optimization needs classic arm instructions support + depends on !(BR2_arm && !BR2_ARM_CPU_HAS_ARM) + help + Use certain architecture-specific optimizations. + +config BR2_PACKAGE_LIBMAD_STRICT_ISO + bool "Strict ISO/IEC interpretations" + help + Use strict ISO/IEC interpretations. + +endif diff --git a/package/libmad/libmad.hash b/package/libmad/libmad.hash new file mode 100644 index 00000000..2be1a8a3 --- /dev/null +++ b/package/libmad/libmad.hash @@ -0,0 +1,6 @@ +# From http://snapshot.debian.org/archive/debian/20190310T213528Z/pool/main/libm/libmad/libmad_0.15.1b-10.dsc +sha256 bbfac3ed6bfbc2823d3775ebb931087371e142bb0e9bb1bee51a76a6e0078690 libmad_0.15.1b.orig.tar.gz +sha256 dfeabd5d2398bf902660edc31f87ad40600f0aa732b946f864d8ee6bbf56a99c libmad_0.15.1b-10.diff.gz + +# Hash for license file: +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/libmad/libmad.mk b/package/libmad/libmad.mk new file mode 100644 index 00000000..33134e26 --- /dev/null +++ b/package/libmad/libmad.mk @@ -0,0 +1,49 @@ +################################################################################ +# +# libmad +# +################################################################################ + +LIBMAD_VERSION = 0.15.1b +LIBMAD_PATCH = libmad_$(LIBMAD_VERSION)-10.diff.gz +LIBMAD_SOURCE = libmad_$(LIBMAD_VERSION).orig.tar.gz +LIBMAD_SITE = \ + http://snapshot.debian.org/archive/debian/20190310T213528Z/pool/main/libm/libmad +LIBMAD_INSTALL_STAGING = YES +LIBMAD_LICENSE = GPL-2.0+ +LIBMAD_LICENSE_FILES = COPYING + +define LIBMAD_APPLY_DEBIAN_PATCHES + if [ -d $(@D)/debian/patches ]; then \ + $(APPLY_PATCHES) $(@D) $(@D)/debian/patches *.patch; \ + fi +endef + +LIBMAD_POST_PATCH_HOOKS += LIBMAD_APPLY_DEBIAN_PATCHES + +# debian/patches/md_size.diff +LIBMAD_IGNORE_CVES += CVE-2017-8372 CVE-2017-8373 + +# debian/patches/length-check.patch +LIBMAD_IGNORE_CVES += CVE-2017-8374 + +# Force autoreconf to be able to use a more recent libtool script, that +# is able to properly behave in the face of a missing C++ compiler. +LIBMAD_AUTORECONF = YES + +define LIBMAD_INSTALL_STAGING_PC + $(INSTALL) -D package/libmad/mad.pc \ + $(STAGING_DIR)/usr/lib/pkgconfig/mad.pc +endef + +LIBMAD_POST_INSTALL_STAGING_HOOKS += LIBMAD_INSTALL_STAGING_PC + +LIBMAD_CONF_OPTS = \ + --disable-debugging \ + $(if $(BR2_PACKAGE_LIBMAD_OPTIMIZATION_SPEED),--enable-speed) \ + $(if $(BR2_PACKAGE_LIBMAD_OPTIMIZATION_ACCURACY),--enable-accuracy) \ + --$(if $(BR2_PACKAGE_LIBMAD_SSO),enable,disable)-sso \ + --$(if $(BR2_PACKAGE_LIBMAD_ASO),enable,disable)-aso \ + --$(if $(BR2_PACKAGE_LIBMAD_STRICT_ISO),enable,disable)-strict-iso + +$(eval $(autotools-package)) diff --git a/package/libmad/mad.pc b/package/libmad/mad.pc new file mode 100644 index 00000000..14af3886 --- /dev/null +++ b/package/libmad/mad.pc @@ -0,0 +1,11 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: mad +Description: MPEG Audio Decoder +Requires: +Version: 0.15.1b +Libs: -L${libdir} -lmad +Cflags: -I${includedir} diff --git a/package/libmatroska/Config.in b/package/libmatroska/Config.in new file mode 100644 index 00000000..ec0e8415 --- /dev/null +++ b/package/libmatroska/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_LIBMATROSKA + bool "libmatroska" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + select BR2_PACKAGE_LIBEBML + help + Extensible open standard audio/video container format access + library. + + http://matroska.org + +comment "libmatroska needs a toolchain w/ C++, wchar" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR diff --git a/package/libmatroska/libmatroska.hash b/package/libmatroska/libmatroska.hash new file mode 100644 index 00000000..4c3d754f --- /dev/null +++ b/package/libmatroska/libmatroska.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 bc4479aa8422ab07643df6a1fa5a19e4bed4badfd41ca77e081628620d1e1990 libmatroska-1.6.2.tar.xz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 LICENSE.LGPL diff --git a/package/libmatroska/libmatroska.mk b/package/libmatroska/libmatroska.mk new file mode 100644 index 00000000..91727ae9 --- /dev/null +++ b/package/libmatroska/libmatroska.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libmatroska +# +################################################################################ + +LIBMATROSKA_VERSION = 1.6.2 +LIBMATROSKA_SOURCE = libmatroska-$(LIBMATROSKA_VERSION).tar.xz +LIBMATROSKA_SITE = http://dl.matroska.org/downloads/libmatroska +LIBMATROSKA_INSTALL_STAGING = YES +LIBMATROSKA_LICENSE = LGPL-2.1+ +LIBMATROSKA_LICENSE_FILES = LICENSE.LGPL +LIBMATROSKA_CPE_ID_VENDOR = matroska +LIBMATROSKA_DEPENDENCIES = libebml host-pkgconf + +$(eval $(cmake-package)) diff --git a/package/libmaxminddb/Config.in b/package/libmaxminddb/Config.in new file mode 100644 index 00000000..1b8061b7 --- /dev/null +++ b/package/libmaxminddb/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_LIBMAXMINDDB + bool "libmaxminddb" + help + C library for the MaxMind DB file format + + The libmaxminddb library provides a C library for reading + MaxMind DB files, including the GeoIP2 databases from + MaxMind. This is a custom binary format designed to + facilitate fast lookups of IP addresses while allowing for + great flexibility in the type of data associated with an + address. + + The MaxMind DB format is an open format. The spec is + available at http://maxmind.github.io/MaxMind-DB/. This spec + is licensed under the Creative Commons + Attribution-ShareAlike 3.0 Unported License. + + http://maxmind.github.io/libmaxminddb diff --git a/package/libmaxminddb/libmaxminddb.hash b/package/libmaxminddb/libmaxminddb.hash new file mode 100644 index 00000000..b83a8d13 --- /dev/null +++ b/package/libmaxminddb/libmaxminddb.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 a5fdf6c7b4880fdc7620f8ace5bd5cbe9f65650c9493034b5b9fc7d83551a439 libmaxminddb-1.4.3.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE diff --git a/package/libmaxminddb/libmaxminddb.mk b/package/libmaxminddb/libmaxminddb.mk new file mode 100644 index 00000000..81593505 --- /dev/null +++ b/package/libmaxminddb/libmaxminddb.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# libmaxminddb +# +################################################################################ + +LIBMAXMINDDB_VERSION = 1.4.3 +LIBMAXMINDDB_SITE = \ + https://github.com/maxmind/libmaxminddb/releases/download/$(LIBMAXMINDDB_VERSION) +LIBMAXMINDDB_INSTALL_STAGING = YES +LIBMAXMINDDB_LICENSE = Apache-2.0 +LIBMAXMINDDB_LICENSE_FILES = LICENSE +LIBMAXMINDDB_CPE_ID_VENDOR = maxmind +LIBMAXMINDDB_CONF_OPTS = --disable-tests + +# mmdblookup binary depends on pthreads +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +LIBMAXMINDDB_CONF_OPTS += --enable-binaries +else +LIBMAXMINDDB_CONF_OPTS += --disable-binaries +endif + +$(eval $(autotools-package)) diff --git a/package/libmbim/Config.in b/package/libmbim/Config.in new file mode 100644 index 00000000..fd7dbb31 --- /dev/null +++ b/package/libmbim/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_LIBMBIM + bool "libmbim" + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + select BR2_PACKAGE_LIBGLIB2 + help + libmbim is a glib-based library for talking to WWAN modems and + devices which speak the Mobile Interface Broadband Model + (MBIM) protocol. + + http://www.freedesktop.org/wiki/Software/libmbim/ + +comment "libmbim needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libmbim/libmbim.hash b/package/libmbim/libmbim.hash new file mode 100644 index 00000000..7ce1a2e7 --- /dev/null +++ b/package/libmbim/libmbim.hash @@ -0,0 +1,4 @@ +# Locally computed: +sha256 dd488ee6176243a6adb27a5872897336272ea7bea33a3ad501ba268e5a58b285 libmbim-1.24.4.tar.xz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LIB diff --git a/package/libmbim/libmbim.mk b/package/libmbim/libmbim.mk new file mode 100644 index 00000000..4ce3ca89 --- /dev/null +++ b/package/libmbim/libmbim.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# libmbim +# +################################################################################ + +LIBMBIM_VERSION = 1.24.4 +LIBMBIM_SITE = https://www.freedesktop.org/software/libmbim +LIBMBIM_SOURCE = libmbim-$(LIBMBIM_VERSION).tar.xz +LIBMBIM_LICENSE = LGPL-2.0+ (library), GPL-2.0+ (programs) +LIBMBIM_LICENSE_FILES = COPYING COPYING.LIB +LIBMBIM_CPE_ID_VENDOR = freedesktop +LIBMBIM_INSTALL_STAGING = YES + +LIBMBIM_DEPENDENCIES = libglib2 + +# we don't want -Werror +LIBMBIM_CONF_OPTS = --enable-more-warnings=no + +# if libgudev available, request udev support +ifeq ($(BR2_PACKAGE_LIBGUDEV),y) +LIBMBIM_DEPENDENCIES += libgudev +LIBMBIM_CONF_OPTS += --with-udev +else +LIBMBIM_CONF_OPTS += --without-udev +endif + +$(eval $(autotools-package)) diff --git a/package/libmbus/Config.in b/package/libmbus/Config.in new file mode 100644 index 00000000..ae3e85cd --- /dev/null +++ b/package/libmbus/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBMBUS + bool "libmbus" + help + libmbus is a library for communicating with energy metering + devices. It supports TCP and RS232 M-bus gateways. + (M-bus standard: http://www.m-bus.com/) + + http://www.rscada.se/libmbus/ diff --git a/package/libmbus/libmbus.hash b/package/libmbus/libmbus.hash new file mode 100644 index 00000000..91fe15ce --- /dev/null +++ b/package/libmbus/libmbus.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 9fca42592da0ba75df66c6f885a4dbfa916d23e65e3d1ce6e38d940d2a2719a4 libmbus-0.8.0.tar.gz +sha256 ea171a4ae443eca7186f564db2c3cc8b84c1ac343f227f92cd52ec6a948f4a74 COPYING diff --git a/package/libmbus/libmbus.mk b/package/libmbus/libmbus.mk new file mode 100644 index 00000000..61f797b5 --- /dev/null +++ b/package/libmbus/libmbus.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# libmbus +# +################################################################################ + +LIBMBUS_VERSION = 0.8.0 +LIBMBUS_SITE = http://www.rscada.se/public-dist +LIBMBUS_INSTALL_STAGING = YES +LIBMBUS_LICENSE = BSD-3-Clause +LIBMBUS_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/libmcrypt/0001-nocxx.patch b/package/libmcrypt/0001-nocxx.patch new file mode 100644 index 00000000..b1c28713 --- /dev/null +++ b/package/libmcrypt/0001-nocxx.patch @@ -0,0 +1,15 @@ +libmcrypt doesn't use C++ so remove the check. + +Signed-off-by: Gustavo Zacarias + +diff -Nura libmcrypt-2.5.8.orig/configure.in libmcrypt-2.5.8/configure.in +--- libmcrypt-2.5.8.orig/configure.in 2013-01-07 12:20:44.332200669 -0300 ++++ libmcrypt-2.5.8/configure.in 2013-01-07 12:20:50.405390565 -0300 +@@ -19,7 +19,6 @@ + + AC_PROG_MAKE_SET + +-AC_PROG_CXX + AC_PROG_CC + AC_PROG_CPP + AC_PROG_INSTALL diff --git a/package/libmcrypt/Config.in b/package/libmcrypt/Config.in new file mode 100644 index 00000000..784d2c2a --- /dev/null +++ b/package/libmcrypt/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBMCRYPT + bool "libmcrypt" + help + libmcrypt is a library that provides uniform interface to + access several encryption algorithms. + + http://mcrypt.sourceforge.net/ diff --git a/package/libmcrypt/libmcrypt.hash b/package/libmcrypt/libmcrypt.hash new file mode 100644 index 00000000..30b57522 --- /dev/null +++ b/package/libmcrypt/libmcrypt.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 e4eb6c074bbab168ac47b947c195ff8cef9d51a211cdd18ca9c9ef34d27a373e libmcrypt-2.5.8.tar.gz +sha256 ca0061fc1381a3ab242310e4b3f56389f28e3d460eb2fd822ed7a21c6f030532 COPYING.LIB diff --git a/package/libmcrypt/libmcrypt.mk b/package/libmcrypt/libmcrypt.mk new file mode 100644 index 00000000..e93f0136 --- /dev/null +++ b/package/libmcrypt/libmcrypt.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# libmcrypt +# +################################################################################ + +LIBMCRYPT_VERSION = 2.5.8 +LIBMCRYPT_SITE = http://downloads.sourceforge.net/project/mcrypt/Libmcrypt/$(LIBMCRYPT_VERSION) +LIBMCRYPT_AUTORECONF = YES +LIBMCRYPT_INSTALL_STAGING = YES +LIBMCRYPT_LICENSE = LGPL-2.1 +LIBMCRYPT_LICENSE_FILES = COPYING.LIB +LIBMCRYPT_CONFIG_SCRIPTS = libmcrypt-config + +$(eval $(autotools-package)) diff --git a/package/libmdbx/Config.in b/package/libmdbx/Config.in new file mode 100644 index 00000000..d13f7393 --- /dev/null +++ b/package/libmdbx/Config.in @@ -0,0 +1,45 @@ +config BR2_PACKAGE_LIBMDBX + bool "libmdbx" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_4 + help + One of the fastest compact key-value ACID database + without WAL. libmdbx has a specific set of properties + and capabilities, focused on creating unique lightweight + solutions. + + libmdbx surpasses the legendary LMDB in terms of + reliability, features and performance. + + https://github.com/erthink/libmdbx + +if BR2_PACKAGE_LIBMDBX + +config BR2_PACKAGE_LIBMDBX_TOOLS + bool "install tools" + help + Install libmdbx tools for checking, dump, restore + and show statistics of databases. + +config BR2_PACKAGE_LIBMDBX_CXX + bool "C++ API" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 + help + Enable modern C++11/14/17/20 API for libmdbx. + +comment "libmdbx C++ support needs a toolchain w/ C++11, gcc >= 4.8 w/o bug#64735" + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 || \ + BR2_TOOLCHAIN_HAS_GCC_BUG_64735 + +endif + +comment "libmdbx needs MMU, a toolchain w/ threads, gcc >= 4.4 w/ 4-byte atomics" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_HAS_SYNC_4 || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_4 diff --git a/package/libmdbx/libmdbx.hash b/package/libmdbx/libmdbx.hash new file mode 100644 index 00000000..fcfb4a67 --- /dev/null +++ b/package/libmdbx/libmdbx.hash @@ -0,0 +1,5 @@ +# Hashes from: https://github.com/erthink/libmdbx/releases/ +sha256 d12bc7189b746beaa85514fcd1fcf26b957bb8feadb11662a0e20c4e79410d3f libmdbx-amalgamated-0.9.3.tar.gz + +# Locally calculated +sha256 310fe25c858a9515fc8c8d7d1f24a67c9496f84a91e0a0e41ea9975b1371e569 LICENSE diff --git a/package/libmdbx/libmdbx.mk b/package/libmdbx/libmdbx.mk new file mode 100644 index 00000000..baf5193e --- /dev/null +++ b/package/libmdbx/libmdbx.mk @@ -0,0 +1,42 @@ +################################################################################ +# +# libmdbx +# +################################################################################ + +LIBMDBX_VERSION = 0.9.3 +LIBMDBX_SOURCE = libmdbx-amalgamated-$(LIBMDBX_VERSION).tar.gz +LIBMDBX_SITE = https://github.com/erthink/libmdbx/releases/download/v$(LIBMDBX_VERSION) +LIBMDBX_SUPPORTS_IN_SOURCE_BUILD = NO +LIBMDBX_LICENSE = OLDAP-2.8 +LIBMDBX_LICENSE_FILES = LICENSE +LIBMDBX_REDISTRIBUTE = YES +LIBMDBX_STRIP_COMPONENTS = 0 +LIBMDBX_INSTALL_STAGING = YES + +# Set CMAKE_BUILD_TYPE to Release to remove -Werror and avoid a build failure +# with glibc < 2.12 +LIBMDBX_CONF_OPTS = \ + -DCMAKE_BUILD_TYPE=Release \ + -DMDBX_INSTALL_MANPAGES=OFF \ + -DBUILD_FOR_NATIVE_CPU=OFF \ + -DMDBX_BUILD_CXX=$(if $(BR2_PACKAGE_LIBMDBX_CXX),ON,OFF) \ + -DMDBX_BUILD_TOOLS=$(if $(BR2_PACKAGE_LIBMDBX_TOOLS),ON,OFF) + +ifeq ($(BR2_STATIC_LIBS)$(BR2_SHARED_STATIC_LIBS),y) +LIBMDBX_CONF_OPTS += -DMDBX_INSTALL_STATIC=ON +else +LIBMDBX_CONF_OPTS += -DMDBX_INSTALL_STATIC=OFF +endif + +ifeq ($(BR2_SHARED_LIBS)$(BR2_SHARED_STATIC_LIBS),y) +LIBMDBX_CONF_OPTS += \ + -DMDBX_BUILD_SHARED_LIBRARY=ON \ + -DMDBX_LINK_TOOLS_NONSTATIC=ON +else +LIBMDBX_CONF_OPTS += \ + -DMDBX_BUILD_SHARED_LIBRARY=OFF \ + -DMDBX_LINK_TOOLS_NONSTATIC=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/libmediaart/Config.in b/package/libmediaart/Config.in new file mode 100644 index 00000000..c11d6f49 --- /dev/null +++ b/package/libmediaart/Config.in @@ -0,0 +1,43 @@ +comment "libmediaart needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_LIBMEDIAART + bool "libmediaart" + depends on BR2_USE_MMU # glib2 + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + select BR2_PACKAGE_LIBGLIB2 + help + Library tasked with managing, extracting and handling media + art caches + + https://github.com/GNOME/libmediaart + +if BR2_PACKAGE_LIBMEDIAART + +choice + prompt "media art backend" + default BR2_PACKAGE_LIBMEDIAART_BACKEND_NONE + +config BR2_PACKAGE_LIBMEDIAART_BACKEND_NONE + bool "none" + help + With no backend, libmediaart will not be able to process MP3 + album art. + +config BR2_PACKAGE_LIBMEDIAART_BACKEND_GDK_PIXBUF + bool "gdk-pixbuf" + select BR2_PACKAGE_GDK_PIXBUF + +config BR2_PACKAGE_LIBMEDIAART_BACKEND_QT + bool "Qt" + depends on BR2_PACKAGE_QT5 + select BR2_PACKAGE_QT5BASE_GUI + +comment "Qt backend depends on Qt5" + depends on !BR2_PACKAGE_QT5 + +endchoice + +endif # BR2_PACKAGE_LIBMEDIAART diff --git a/package/libmediaart/libmediaart.hash b/package/libmediaart/libmediaart.hash new file mode 100644 index 00000000..d51c0562 --- /dev/null +++ b/package/libmediaart/libmediaart.hash @@ -0,0 +1,5 @@ +# Hash from: http://ftp.gnome.org/pub/gnome/sources/libmediaart/1.9/libmediaart-1.9.4.sha256sum: +sha256 a57be017257e4815389afe4f58fdacb6a50e74fd185452b23a652ee56b04813d libmediaart-1.9.4.tar.xz + +# Locally computed: +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LESSER diff --git a/package/libmediaart/libmediaart.mk b/package/libmediaart/libmediaart.mk new file mode 100644 index 00000000..0d110a43 --- /dev/null +++ b/package/libmediaart/libmediaart.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# libmediaart +# +################################################################################ + +LIBMEDIAART_VERSION_MAJOR = 1.9 +LIBMEDIAART_VERSION = $(LIBMEDIAART_VERSION_MAJOR).4 +LIBMEDIAART_SOURCE = libmediaart-$(LIBMEDIAART_VERSION).tar.xz +LIBMEDIAART_SITE = \ + http://ftp.gnome.org/pub/gnome/sources/libmediaart/$(LIBMEDIAART_VERSION_MAJOR) +LIBMEDIAART_LICENSE = LGPL-2.1+ +LIBMEDIAART_LICENSE_FILES = COPYING.LESSER +LIBMEDIAART_INSTALL_STAGING = YES +LIBMEDIAART_DEPENDENCIES = libglib2 +LIBMEDIAART_CONF_OPTS = --disable-unit-tests + +ifeq ($(BR2_PACKAGE_LIBMEDIAART_BACKEND_GDK_PIXBUF),y) +LIBMEDIAART_DEPENDENCIES += gdk-pixbuf +LIBMEDIAART_CONF_OPTS += \ + --enable-gdkpixbuf \ + --disable-qt +else ifeq ($(BR2_PACKAGE_LIBMEDIAART_BACKEND_QT),y) +# qt5 needs c++11 (since qt-5.7) +LIBMEDIAART_CONF_ENV += CXXFLAGS="$(TARGET_CXXFLAGS) -std=c++11" +LIBMEDIAART_DEPENDENCIES += qt5base +LIBMEDIAART_CONF_OPTS += \ + --disable-gdkpixbuf \ + --enable-qt +else ifeq ($(BR2_PACKAGE_LIBMEDIAART_BACKEND_NONE),y) +LIBMEDIAART_CONF_OPTS += \ + --disable-gdkpixbuf \ + --disable-qt +endif + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +LIBMEDIAART_CONF_OPTS += --enable-introspection +LIBMEDIAART_DEPENDENCIES += gobject-introspection +else +LIBMEDIAART_CONF_OPTS += --disable-introspection +endif + +$(eval $(autotools-package)) diff --git a/package/libmemcached/0001-disable-tests.patch b/package/libmemcached/0001-disable-tests.patch new file mode 100644 index 00000000..61283067 --- /dev/null +++ b/package/libmemcached/0001-disable-tests.patch @@ -0,0 +1,42 @@ +Disable the tests, cuts build time by half and avoids build issues +with extra dependencies. + +Signed-off-by: Gustavo Zacarias + +diff -Nura libmemcached-1.0.18.orig/Makefile.am libmemcached-1.0.18/Makefile.am +--- libmemcached-1.0.18.orig/Makefile.am 2014-07-19 09:24:45.246418899 -0300 ++++ libmemcached-1.0.18/Makefile.am 2014-07-19 09:25:12.701349345 -0300 +@@ -1,6 +1,6 @@ + # vim:ft=automake + +-ACLOCAL_AMFLAGS= -I m4 -I libtest/m4 ++ACLOCAL_AMFLAGS= -I m4 + AM_YFLAGS= -d + + # includes append to these: +@@ -45,8 +45,6 @@ + include libmemcached-1.0/include.am + else + +-include libtest/include.am +- + include libhashkit-1.0/include.am + include libmemcached-1.0/include.am + +@@ -76,7 +74,6 @@ + include libmemcachedinternal/util/include.am + include rpm/include.mk + include support/include.am +-include tests/include.am + include util/include.am + include win32/include.am + +@@ -103,7 +100,7 @@ + @echo "Files that need to be either removed or checked in:" + @bzr unknowns + +-clean-local: clean-libtest-check clean-docs-check clean-rpm ++clean-local: clean-docs-check clean-rpm + + + lcov: lcov-clean check diff --git a/package/libmemcached/0002-disable-sanitizer.patch b/package/libmemcached/0002-disable-sanitizer.patch new file mode 100644 index 00000000..108da225 --- /dev/null +++ b/package/libmemcached/0002-disable-sanitizer.patch @@ -0,0 +1,25 @@ +Disable sanitizer checks, they're busted. + +Signed-off-by: Gustavo Zacarias + +diff -Nura libmemcached-1.0.18.orig/m4/ax_harden_compiler_flags.m4 libmemcached-1.0.18/m4/ax_harden_compiler_flags.m4 +--- libmemcached-1.0.18.orig/m4/ax_harden_compiler_flags.m4 2014-11-13 08:07:09.011614311 -0300 ++++ libmemcached-1.0.18/m4/ax_harden_compiler_flags.m4 2014-11-13 08:07:52.406092440 -0300 +@@ -222,8 +222,6 @@ + # GCC 4.5 removed this. + # _APPEND_COMPILE_FLAGS_ERROR([-Wunreachable-code]) + +- _SET_SANITIZE_FLAGS +- + AS_IF([test "x$ax_enable_debug" = xno], + [AS_IF([test "x$ac_cv_vcs_checkout" = xyes], + [AS_IF([test "x${host_os}" != "xmingw"], +@@ -337,8 +335,6 @@ + _APPEND_COMPILE_FLAGS_ERROR([-fstack-protector-all]) + ])])])]) + +- _SET_SANITIZE_FLAGS +- + AS_IF([test "x$ac_cv_warnings_as_errors" = xyes], + [AX_APPEND_FLAG([-Werror])]) + AC_LANG_POP([C++]) diff --git a/package/libmemcached/0003-move-ac_config_aux_dir.patch b/package/libmemcached/0003-move-ac_config_aux_dir.patch new file mode 100644 index 00000000..790aa93d --- /dev/null +++ b/package/libmemcached/0003-move-ac_config_aux_dir.patch @@ -0,0 +1,25 @@ +Move AC_CONFIG_AUX_DIR up a few lines so the autotools can find it + +This patch is based on the same solution adopted by Debian: + + https://lists.debian.org/debian-release/2014/11/msg01231.html + +Signed-off-by: Vicente Olivert Riera + +diff -rup a/configure.ac b/configure.ac +--- a/configure.ac 2014-02-09 11:52:42.000000000 +0000 ++++ b/configure.ac 2015-01-06 15:07:10.003074775 +0000 +@@ -13,11 +13,12 @@ m4_include([version.m4]) + AC_PREREQ([2.61]) + AC_INIT([libmemcached],VERSION_NUMBER,[http://libmemcached.org/]) + ++AC_CONFIG_AUX_DIR([build-aux]) ++ + # Setup the compilers early on + AC_PROG_CC([cc gcc clang]) + AC_PROG_CXX([c++ g++ clang++]) + +-AC_CONFIG_AUX_DIR([build-aux]) + AC_CONFIG_MACRO_DIR([m4]) + + AC_CANONICAL_HOST diff --git a/package/libmemcached/0004-disable-doc-and-man.patch b/package/libmemcached/0004-disable-doc-and-man.patch new file mode 100644 index 00000000..96050958 --- /dev/null +++ b/package/libmemcached/0004-disable-doc-and-man.patch @@ -0,0 +1,37 @@ +From 6c01bd3562cc18fbafdf950bbeb73a399c1adcdd Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Tue, 12 May 2015 00:00:02 +0200 +Subject: [PATCH] disable doc and man + +WARNING: master file /home/naourr/git/buildroot/test/libmemcached-bfin/build/libmemcached-1.0.18/docs/index.rst not found + +Exception occurred: + File "/usr/lib/python2.7/site-packages/sphinx/environment.py", line 1213, in get_doctree + f = open(doctree_filename, 'rb') +IOError: [Errno 2] No such file or directory: '/home/naourr/buildroot-test/test/libmemcached-bfin/build/libmemcached-1.0.18/man/.doctrees/hashkit_create.doctree' +The full traceback has been saved in /tmp/sphinx-err-JCIsnB.log, if you want to report the issue to the developers. +Please also report this if it was a user error, so that a better error message can be provided next time. +Either send bugs to the mailing list at , +or report them in the tracker at . Thanks! + +Signed-off-by: Romain Naour +--- + Makefile.am | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 7f44102..cb7d058 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -55,8 +55,6 @@ endif + include libmemcachedutil-1.0/include.am + + include clients/include.am +-include docs/include.am +-include man/include.am + + if BUILD_LIBMEMCACHED_PROTOCOL + include example/include.am +-- +1.9.3 + diff --git a/package/libmemcached/0005-fix-pointer-comparaison.patch b/package/libmemcached/0005-fix-pointer-comparaison.patch new file mode 100644 index 00000000..c9f8dd19 --- /dev/null +++ b/package/libmemcached/0005-fix-pointer-comparaison.patch @@ -0,0 +1,30 @@ +Fix pointer comparaison + +opt_servers is a pointer, not a boolean, so testing against false to +know if the pointer is NULL no longer works with the more strict gcc +7.x checks. + +[Taken from http://pkgs.fedoraproject.org/cgit/rpms/libmemcached.git/plain/libmemcached-build.patch.] +Signed-off-by: Thomas Petazzoni + +diff -up ./clients/memflush.cc.old ./clients/memflush.cc +--- ./clients/memflush.cc.old 2017-02-12 10:12:59.615209225 +0100 ++++ ./clients/memflush.cc 2017-02-12 10:13:39.998382783 +0100 +@@ -39,7 +39,7 @@ int main(int argc, char *argv[]) + { + options_parse(argc, argv); + +- if (opt_servers == false) ++ if (!opt_servers) + { + char *temp; + +@@ -48,7 +48,7 @@ int main(int argc, char *argv[]) + opt_servers= strdup(temp); + } + +- if (opt_servers == false) ++ if (!opt_servers) + { + std::cerr << "No Servers provided" << std::endl; + exit(EXIT_FAILURE); diff --git a/package/libmemcached/Config.in b/package/libmemcached/Config.in new file mode 100644 index 00000000..4af2b3b0 --- /dev/null +++ b/package/libmemcached/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_LIBMEMCACHED + bool "libmemcached" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + help + libMemcached is an open source C/C++ client library and tools + for the memcached server. + It has been designed to be light on memory usage, thread safe, + and provide full access to server side methods. + + http://libmemcached.org/libMemcached.html + +comment "libmemcached needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libmemcached/libmemcached.hash b/package/libmemcached/libmemcached.hash new file mode 100644 index 00000000..77d7c478 --- /dev/null +++ b/package/libmemcached/libmemcached.hash @@ -0,0 +1,5 @@ +# From https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz/+md5 +md5 b3958716b4e53ddc5992e6c49d97e819 libmemcached-1.0.18.tar.gz + +# Hash for license file: +sha256 4e9032d0f539276db05519ee3d09ca6167d2134ec91c556e8c80ef3efe633fd2 COPYING diff --git a/package/libmemcached/libmemcached.mk b/package/libmemcached/libmemcached.mk new file mode 100644 index 00000000..24955266 --- /dev/null +++ b/package/libmemcached/libmemcached.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# libmemcached +# +################################################################################ + +LIBMEMCACHED_VERSION_MAJOR = 1.0 +LIBMEMCACHED_VERSION = $(LIBMEMCACHED_VERSION_MAJOR).18 +LIBMEMCACHED_SITE = http://launchpad.net/libmemcached/$(LIBMEMCACHED_VERSION_MAJOR)/$(LIBMEMCACHED_VERSION)/+download +LIBMEMCACHED_CONF_ENV = ac_cv_prog_cc_c99='-std=gnu99' \ + ax_cv_check_cflags__Werror__fmudflapth=no \ + ax_cv_check_cxxflags__Werror__fmudflapth=no +LIBMEMCACHED_CONF_OPTS = --disable-dtrace +LIBMEMCACHED_INSTALL_STAGING = YES +LIBMEMCACHED_DEPENDENCIES = $(if $(BR2_PACKAGE_LIBEVENT),libevent) +# For 0001-disable-tests.patch and 0002-disable-sanitizer.patch +LIBMEMCACHED_AUTORECONF = YES +LIBMEMCACHED_LICENSE = BSD-3-Clause +LIBMEMCACHED_LICENSE_FILES = COPYING + +ifeq ($(BR2_TOOLCHAIN_SUPPORTS_PIE),) +LIBMEMCACHED_CONF_ENV += \ + ax_cv_check_cflags__Werror__fPIE=no \ + ax_cv_check_cflags__Werror__pie=no \ + ax_cv_check_cxxflags__Werror__fPIE=no \ + ax_cv_check_cxxflags__Werror__pie=no +endif + +$(eval $(autotools-package)) diff --git a/package/libmhash/Config.in b/package/libmhash/Config.in new file mode 100644 index 00000000..774ff1b1 --- /dev/null +++ b/package/libmhash/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LIBMHASH + bool "libmhash" + help + Mhash is a free (under GNU Lesser GPL) library which provides + a uniform interface to a large number of hash algorithms. + These algorithms can be used to compute checksums, message + digests, and other signatures. + + http://mhash.sourceforge.net/ diff --git a/package/libmhash/libmhash.hash b/package/libmhash/libmhash.hash new file mode 100644 index 00000000..06c1fe48 --- /dev/null +++ b/package/libmhash/libmhash.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 56521c52a9033779154432d0ae47ad7198914785265e1f570cee21ab248dfef0 mhash-0.9.9.9.tar.bz2 +sha256 d245807f90032872d1438d741ed21e2490e1175dc8aa3afa5ddb6c8e529b58e5 COPYING diff --git a/package/libmhash/libmhash.mk b/package/libmhash/libmhash.mk new file mode 100644 index 00000000..f2da10e6 --- /dev/null +++ b/package/libmhash/libmhash.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libmhash +# +################################################################################ + +LIBMHASH_VERSION = 0.9.9.9 +LIBMHASH_SITE = http://downloads.sourceforge.net/project/mhash/mhash/$(LIBMHASH_VERSION) +LIBMHASH_SOURCE = mhash-$(LIBMHASH_VERSION).tar.bz2 +LIBMHASH_INSTALL_STAGING = YES +LIBMHASH_LICENSE = LGPL-2.0 +LIBMHASH_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/libmicrohttpd/Config.in b/package/libmicrohttpd/Config.in new file mode 100644 index 00000000..8477ef66 --- /dev/null +++ b/package/libmicrohttpd/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_LIBMICROHTTPD + bool "libmicrohttpd" + help + GNU libmicrohttpd is a small C library that makes it easy to + run an HTTP server as part of another application. + + http://www.gnu.org/software/libmicrohttpd/ + +if BR2_PACKAGE_LIBMICROHTTPD + +config BR2_PACKAGE_LIBMICROHTTPD_SSL + bool "https support" + depends on !BR2_STATIC_LIBS # gnutls + depends on BR2_USE_WCHAR + select BR2_PACKAGE_GNUTLS + help + Enable HTTPS (SSL) support. + +comment "libmicrohttpd https support needs a toolchain w/ wchar, dynamic library" + depends on !BR2_USE_WCHAR || BR2_STATIC_LIBS + +endif diff --git a/package/libmicrohttpd/libmicrohttpd.hash b/package/libmicrohttpd/libmicrohttpd.hash new file mode 100644 index 00000000..e92032a2 --- /dev/null +++ b/package/libmicrohttpd/libmicrohttpd.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 0ae825f8e0d7f41201fd44a0df1cf454c1cb0bc50fe9d59c26552260264c2ff8 libmicrohttpd-0.9.72.tar.gz +sha256 7399547209438c93f9b90297954698773d4846cea44cde5ca982c84c45952a3b COPYING diff --git a/package/libmicrohttpd/libmicrohttpd.mk b/package/libmicrohttpd/libmicrohttpd.mk new file mode 100644 index 00000000..6eee597c --- /dev/null +++ b/package/libmicrohttpd/libmicrohttpd.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# libmicrohttpd +# +################################################################################ + +LIBMICROHTTPD_VERSION = 0.9.72 +LIBMICROHTTPD_SITE = $(BR2_GNU_MIRROR)/libmicrohttpd +LIBMICROHTTPD_LICENSE_FILES = COPYING +LIBMICROHTTPD_CPE_ID_VENDOR = gnu +LIBMICROHTTPD_INSTALL_STAGING = YES +LIBMICROHTTPD_CONF_OPTS = --disable-curl --disable-examples +LIBMICROHTTPD_CFLAGS = $(TARGET_CFLAGS) -std=c99 + +LIBMICROHTTPD_CONF_ENV += CFLAGS="$(LIBMICROHTTPD_CFLAGS)" + +ifeq ($(BR2_PACKAGE_LIBMICROHTTPD_SSL),y) +LIBMICROHTTPD_LICENSE = LGPL-2.1+ +LIBMICROHTTPD_DEPENDENCIES += host-pkgconf gnutls +LIBMICROHTTPD_CONF_OPTS += --enable-https --with-gnutls=$(STAGING_DIR)/usr +else +LIBMICROHTTPD_LICENSE = LGPL-2.1+ or eCos +LIBMICROHTTPD_CONF_OPTS += --disable-https +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +LIBMICROHTTPD_CONF_OPTS += --with-threads=auto +else +LIBMICROHTTPD_CONF_OPTS += --with-threads=none +endif + +$(eval $(autotools-package)) diff --git a/package/libminiupnpc/Config.in b/package/libminiupnpc/Config.in new file mode 100644 index 00000000..a3410a02 --- /dev/null +++ b/package/libminiupnpc/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_LIBMINIUPNPC + bool "libminiupnpc" + depends on !BR2_BINFMT_FLAT + depends on !BR2_STATIC_LIBS + help + The UPnP protocol is supported by most home adsl/cable routers + and Microsoft Windows 2K/XP. The aim of the MiniUPnP project + is to bring a free software solution to support the "Internet + Gateway Device" part of the protocol. + + Miniupnpc aims at the simplest library possible, with the + smallest footprint and no dependencies to other libraries such + as XML parsers or HTTP implementations. All the code is pure + ANSI C. + + http://miniupnp.free.fr + +comment "libminiupnpc needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + depends on !BR2_BINFMT_FLAT diff --git a/package/libminiupnpc/libminiupnpc.hash b/package/libminiupnpc/libminiupnpc.hash new file mode 100644 index 00000000..758ea29f --- /dev/null +++ b/package/libminiupnpc/libminiupnpc.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 69f72fe355f911b807915f78dcfc0af772c0f22bc7ab1157e70f334e37db7d39 miniupnpc-2.1.20201016.tar.gz +sha256 0b476c395af6dd21eeb54c40a21d22e1c11a751fbd2dd17a41ce26e370be88d5 LICENSE diff --git a/package/libminiupnpc/libminiupnpc.mk b/package/libminiupnpc/libminiupnpc.mk new file mode 100644 index 00000000..551a6767 --- /dev/null +++ b/package/libminiupnpc/libminiupnpc.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# libminiupnpc +# +################################################################################ + +LIBMINIUPNPC_VERSION_MAJOR = 2.1 +LIBMINIUPNPC_VERSION_MINOR = 20201016 +LIBMINIUPNPC_VERSION = $(LIBMINIUPNPC_VERSION_MAJOR).$(LIBMINIUPNPC_VERSION_MINOR) +LIBMINIUPNPC_SOURCE = miniupnpc-$(LIBMINIUPNPC_VERSION).tar.gz +LIBMINIUPNPC_SITE = http://miniupnp.free.fr/files +LIBMINIUPNPC_INSTALL_STAGING = YES +LIBMINIUPNPC_LICENSE = BSD-3-Clause +LIBMINIUPNPC_LICENSE_FILES = LICENSE +LIBMINIUPNPC_CPE_ID_VENDOR = miniupnp_project +LIBMINIUPNPC_CPE_ID_PRODUCT = miniupnpc +LIBMINIUPNPC_CPE_ID_VERSION = $(LIBMINIUPNPC_VERSION_MAJOR) +LIBMINIUPNPC_CPE_ID_UPDATE = $(LIBMINIUPNPC_VERSION_MINOR) + +$(eval $(cmake-package)) diff --git a/package/libmms/Config.in b/package/libmms/Config.in new file mode 100644 index 00000000..11df6e51 --- /dev/null +++ b/package/libmms/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_LIBMMS + bool "libmms" + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + select BR2_PACKAGE_LIBGLIB2 + help + LibMMS is a common library for parsing mms:// and mmsh:// + type network streams. These are commonly used to stream + Windows Media Video content over the web. LibMMS itself is + only for receiving MMS stream, it doesn't handle sending at + all. + + http://launchpad.net/libmms + +comment "libmms needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libmms/libmms.hash b/package/libmms/libmms.hash new file mode 100644 index 00000000..f424e3af --- /dev/null +++ b/package/libmms/libmms.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 3c05e05aebcbfcc044d9e8c2d4646cd8359be39a3f0ba8ce4e72a9094bee704f libmms-0.6.4.tar.gz +sha256 d80c9d084ebfb50ea1ed91bfbc2410d6ce542097a32c43b00781b83adcb8c77f COPYING.LIB diff --git a/package/libmms/libmms.mk b/package/libmms/libmms.mk new file mode 100644 index 00000000..a4c40ad6 --- /dev/null +++ b/package/libmms/libmms.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# libmms +# +################################################################################ + +LIBMMS_VERSION = 0.6.4 +LIBMMS_SITE = http://downloads.sourceforge.net/project/libmms/libmms/$(LIBMMS_VERSION) +LIBMMS_INSTALL_STAGING = YES +LIBMMS_DEPENDENCIES = host-pkgconf libglib2 +LIBMMS_LICENSE = LGPL-2.1+ +LIBMMS_LICENSE_FILES = COPYING.LIB +LIBMMS_CPE_ID_VENDOR = libmms_project + +$(eval $(autotools-package)) diff --git a/package/libmng/0001-jpeg-9a.patch b/package/libmng/0001-jpeg-9a.patch new file mode 100644 index 00000000..5d651335 --- /dev/null +++ b/package/libmng/0001-jpeg-9a.patch @@ -0,0 +1,22 @@ +Adaptation from gentoo patch for libmng 2.0.3 +See https://bugs.gentoo.org/show_bug.cgi?id=520906 + +Signed-off-by: Gustavo Zacarias + +diff -Nura libmng-2.0.3.orig/libmng_types.h libmng-2.0.3/libmng_types.h +--- libmng-2.0.3.orig/libmng_types.h 2015-09-24 10:32:05.500984924 -0300 ++++ libmng-2.0.3/libmng_types.h 2015-09-24 10:33:11.145254771 -0300 +@@ -200,13 +200,6 @@ + #undef FAR /* possibly defined by zlib or lcms */ + #endif + #define JPEG_INTERNAL_OPTIONS /* for RGB_PIXELSIZE */ +-/* There has been a change in jpeg-9 : */ +-#if !defined(HAVE_BOOLEAN) && !defined(_WIN32) +-#define HAVE_BOOLEAN +-#endif +-#ifndef _WIN32 +-typedef int boolean; +-#endif + /* For jpegsrc.v09a: */ + #include + #include diff --git a/package/libmng/Config.in b/package/libmng/Config.in new file mode 100644 index 00000000..a0bd59c8 --- /dev/null +++ b/package/libmng/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LIBMNG + bool "libmng" + select BR2_PACKAGE_JPEG + select BR2_PACKAGE_ZLIB + help + The reference library for reading, displaying, writing and + examining Multiple-Image Network Graphics. + + http://sourceforge.net/projects/libmng/ diff --git a/package/libmng/libmng.hash b/package/libmng/libmng.hash new file mode 100644 index 00000000..02a493f4 --- /dev/null +++ b/package/libmng/libmng.hash @@ -0,0 +1,6 @@ +# From http://sourceforge.net/projects/libmng/files/libmng-devel/2.0.3/ +md5 e9e899adb1b681b17f14d91e261878c5 libmng-2.0.3.tar.xz +sha1 0f141482ffcef6f8cd4413f945a59310ac2e49af libmng-2.0.3.tar.xz + +# Hash for license file: +sha256 ba280734838eb3f22a85b92a7e62de357d4d4c325029dce723b0cb125c417c35 LICENSE diff --git a/package/libmng/libmng.mk b/package/libmng/libmng.mk new file mode 100644 index 00000000..090fe183 --- /dev/null +++ b/package/libmng/libmng.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# libmng +# +################################################################################ + +LIBMNG_VERSION = 2.0.3 +LIBMNG_SITE = http://downloads.sourceforge.net/project/libmng/libmng-devel/$(LIBMNG_VERSION) +LIBMNG_SOURCE = libmng-$(LIBMNG_VERSION).tar.xz +LIBMNG_DEPENDENCIES = jpeg zlib +LIBMNG_CONF_OPTS = --without-lcms +LIBMNG_INSTALL_STAGING = YES +LIBMNG_LICENSE = libmng license +LIBMNG_LICENSE_FILES = LICENSE + +ifeq ($(BR2_PACKAGE_LCMS2),y) +LIBMNG_DEPDENDENCIES += lcms2 +else +LIBMNG_CONF_OPTS += --without-lcms2 +endif + +$(eval $(autotools-package)) diff --git a/package/libmnl/Config.in b/package/libmnl/Config.in new file mode 100644 index 00000000..5acfb244 --- /dev/null +++ b/package/libmnl/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBMNL + bool "libmnl" + help + libmnl is a minimalistic user-space library oriented + to Netlink developers. + + http://netfilter.org/projects/libmnl/ diff --git a/package/libmnl/libmnl.hash b/package/libmnl/libmnl.hash new file mode 100644 index 00000000..e5bb2fa6 --- /dev/null +++ b/package/libmnl/libmnl.hash @@ -0,0 +1,6 @@ +# From ftp://ftp.netfilter.org/pub/libmnl/libmnl-1.0.4.tar.bz2.{md5sum,sha1sum} +md5 be9b4b5328c6da1bda565ac5dffadb2d libmnl-1.0.4.tar.bz2 +sha1 2db40dea612e88c62fd321906be40ab5f8f1685a libmnl-1.0.4.tar.bz2 + +# Hash for license file: +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/libmnl/libmnl.mk b/package/libmnl/libmnl.mk new file mode 100644 index 00000000..d3b33db2 --- /dev/null +++ b/package/libmnl/libmnl.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# libmnl +# +################################################################################ + +LIBMNL_VERSION = 1.0.4 +LIBMNL_SOURCE = libmnl-$(LIBMNL_VERSION).tar.bz2 +LIBMNL_SITE = http://netfilter.org/projects/libmnl/files +LIBMNL_INSTALL_STAGING = YES +LIBMNL_LICENSE = LGPL-2.1+ +LIBMNL_LICENSE_FILES = COPYING +LIBMNL_CPE_ID_VENDOR = netfilter + +$(eval $(autotools-package)) diff --git a/package/libmodbus/Config.in b/package/libmodbus/Config.in new file mode 100644 index 00000000..642b57cd --- /dev/null +++ b/package/libmodbus/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBMODBUS + bool "libmodbus" + help + libmodbus is a free software library to send/receive data + according to the Modbus protocol. This library is written in C + and supports RTU (serial) and TCP (Ethernet) communications. + + http://libmodbus.org diff --git a/package/libmodbus/libmodbus.hash b/package/libmodbus/libmodbus.hash new file mode 100644 index 00000000..2931f3f3 --- /dev/null +++ b/package/libmodbus/libmodbus.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 d7d9fa94a16edb094e5fdf5d87ae17a0dc3f3e3d687fead81835d9572cf87c16 libmodbus-3.1.6.tar.gz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LESSER diff --git a/package/libmodbus/libmodbus.mk b/package/libmodbus/libmodbus.mk new file mode 100644 index 00000000..52eb318a --- /dev/null +++ b/package/libmodbus/libmodbus.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# libmodbus +# +################################################################################ + +LIBMODBUS_VERSION = 3.1.6 +LIBMODBUS_SITE = http://libmodbus.org/releases +LIBMODBUS_LICENSE = LGPL-2.1+ +LIBMODBUS_LICENSE_FILES = COPYING.LESSER +LIBMODBUS_CPE_ID_VENDOR = libmodbus +LIBMODBUS_INSTALL_STAGING = YES +LIBMODBUS_CONF_OPTS = --without-documentation --disable-tests + +$(eval $(autotools-package)) diff --git a/package/libmodplug/Config.in b/package/libmodplug/Config.in new file mode 100644 index 00000000..cfc774a5 --- /dev/null +++ b/package/libmodplug/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LIBMODPLUG + bool "libmodplug" + depends on BR2_INSTALL_LIBSTDCPP + help + MOD music file decoder + + http://modplug-xmms.sourceforge.net/ + +comment "libmodplug needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/libmodplug/libmodplug.hash b/package/libmodplug/libmodplug.hash new file mode 100644 index 00000000..e75152e2 --- /dev/null +++ b/package/libmodplug/libmodplug.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 457ca5a6c179656d66c01505c0d95fafaead4329b9dbaa0f997d00a3508ad9de libmodplug-0.8.9.0.tar.gz +sha256 49942e7b3b175f549e751feb08b5270ca6f6c5fb7a1be9f9517db275ec32c92e COPYING diff --git a/package/libmodplug/libmodplug.mk b/package/libmodplug/libmodplug.mk new file mode 100644 index 00000000..98c38a3b --- /dev/null +++ b/package/libmodplug/libmodplug.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libmodplug +# +################################################################################ + +LIBMODPLUG_VERSION = 0.8.9.0 +LIBMODPLUG_SITE = http://downloads.sourceforge.net/project/modplug-xmms/libmodplug/$(LIBMODPLUG_VERSION) +LIBMODPLUG_INSTALL_STAGING = YES +LIBMODPLUG_LICENSE = Public Domain +LIBMODPLUG_LICENSE_FILES = COPYING +LIBMODPLUG_CPE_ID_VENDOR = konstanty_bialkowski + +$(eval $(autotools-package)) diff --git a/package/libmodsecurity/0001-configure.ac-drop-usage-of-git-at-configure-time.patch b/package/libmodsecurity/0001-configure.ac-drop-usage-of-git-at-configure-time.patch new file mode 100644 index 00000000..14767fb2 --- /dev/null +++ b/package/libmodsecurity/0001-configure.ac-drop-usage-of-git-at-configure-time.patch @@ -0,0 +1,79 @@ +From a2116312068b6b2c5732dfebde19b751cc81d4f3 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sun, 1 Aug 2021 23:21:35 +0200 +Subject: [PATCH] configure.ac: drop usage of git at configure time + +The usage of git is only to print some messages at configure time, +which is not very useful, and causes a significant number of warning +when regenerating the configure script. + +Signed-off-by: Thomas Petazzoni +--- + configure.ac | 23 ----------------------- + 1 file changed, 23 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 20163e1e..14e5892a 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3,7 +3,6 @@ + + # Get the hash of the last commit, to be used if it is not an + # official release. +-AC_DEFUN([MSC_GIT_HASH], m4_esyscmd_s(git log -1 --format="%h" --abbrev-commit)) + AC_DEFUN([MSC_MAJOR], m4_esyscmd_s(cat headers/modsecurity/modsecurity.h | grep "define MODSECURITY_MAJOR " | awk {'print $3'} | sed 's/\"//g')) + AC_DEFUN([MSC_MINOR], m4_esyscmd_s(cat headers/modsecurity/modsecurity.h | grep "define MODSECURITY_MINOR " | awk {'print $3'} | sed 's/\"//g')) + AC_DEFUN([MSC_PATCHLEVEL], m4_esyscmd_s(cat headers/modsecurity/modsecurity.h | grep "define MODSECURITY_PATCHLEVEL " | awk {'print $3'} | sed 's/\"//g')) +@@ -25,9 +24,6 @@ m4_define([msc_version], + m4_define([msc_version_with_patchlevel], + [msc_version_major.msc_version_minor.msc_version_patchlevel]) + +-m4_define([msc_version_git], +- [m4_esyscmd_s(git describe)]) +- + m4_define([msc_version_info], + [msc_version_c_plus_a:msc_version_patchlevel:msc_version_minor]) + +@@ -73,11 +69,6 @@ AC_MSG_ERROR([\ + + ]) + fi +-# Libinjection version +-AC_DEFUN([LIBINJECTION_VERSION], m4_esyscmd_s(cd "others/libinjection" && git describe && cd ../..)) +- +-# SecLang test version +-AC_DEFUN([SECLANG_TEST_VERSION], m4_esyscmd_s(cd "test/test-cases/secrules-language-tests" && git log -1 --format="%h" --abbrev-commit && cd ../../..)) + + + # Check for yajl +@@ -217,10 +208,6 @@ AC_SUBST([MSC_VERSION_WITH_PATCHLEVEL]) + MSC_VERSION=msc_version + AC_SUBST([MSC_VERSION]) + +-MSC_GIT_VERSION=msc_version_git +-AC_SUBST([MSC_GIT_VERSION]) +- +- + AC_ARG_ENABLE(debug-logs, + [AC_HELP_STRING([--disable-debug-logs],[Turn off the SecDebugLog feature])], + +@@ -412,16 +399,6 @@ AC_OUTPUT + + + # Print a fancy summary +-echo " " +-echo " " +-echo "ModSecurity - ${MSC_GIT_VERSION} for $PLATFORM" +-echo " " +-echo " Mandatory dependencies" +-echo -n " + libInjection ...." +-echo LIBINJECTION_VERSION +-echo -n " + SecLang tests ...." +-echo SECLANG_TEST_VERSION +- + echo " " + echo " Optional dependencies" + +-- +2.31.1 + diff --git a/package/libmodsecurity/0002-modsecurity.pc.in-add-lstdc.patch b/package/libmodsecurity/0002-modsecurity.pc.in-add-lstdc.patch new file mode 100644 index 00000000..6511e6f1 --- /dev/null +++ b/package/libmodsecurity/0002-modsecurity.pc.in-add-lstdc.patch @@ -0,0 +1,32 @@ +From 1a84881b280eb08852d5495c57e44351a40d3f91 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 26 Jul 2021 00:24:57 +0200 +Subject: [PATCH] modsecurity.pc.in: add -lstdc++ + +Add -lstdc++ to Libs.Private to avoid the following static build failure +with nginx: + +/home/buildroot/autobuild/instance-2/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/10.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: /home/buildroot/autobuild/instance-2/output-1/host/bin/../xtensa-buildroot-linux-uclibc/sysroot/usr/lib/libmodsecurity.a(libmodsecurity_la-transaction.o): in function `std::basic_streambuf >::sbumpc() [clone .isra.0]': +transaction.cc:(.text+0x40): undefined reference to `std::__cxx11::basic_string, std::allocator >::_M_dispose()' + +Fixes: + - http://autobuild.buildroot.org/results/e5a9eb8448980f1c5cafe97180b7d1f48ddf02ca + +Signed-off-by: Fabrice Fontaine +--- + modsecurity.pc.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/modsecurity.pc.in b/modsecurity.pc.in +index 96cdf5ca..7c895ddc 100644 +--- a/modsecurity.pc.in ++++ b/modsecurity.pc.in +@@ -8,4 +8,4 @@ Description: ModSecurity API + Version: @MSC_VERSION_WITH_PATCHLEVEL@ + Cflags: -I@includedir@ + Libs: -L@libdir@ -lmodsecurity +-Libs.private: @CURL_LDADD@ @GEOIP_LDADD@ @MAXMIND_LDADD@ @GLOBAL_LDADD@ @LIBXML2_LDADD@ @LMDB_LDADD@ @LUA_LDADD@ @PCRE_LDADD@ @SSDEEP_LDADD@ @YAJL_LDADD@ ++Libs.private: @CURL_LDADD@ @GEOIP_LDADD@ @MAXMIND_LDADD@ @GLOBAL_LDADD@ @LIBXML2_LDADD@ @LMDB_LDADD@ @LUA_LDADD@ @PCRE_LDADD@ @SSDEEP_LDADD@ @YAJL_LDADD@ -lstdc++ +-- +2.30.2 + diff --git a/package/libmodsecurity/0003-Revert-Fix-maxminddb-link-on-FreeBSD.patch b/package/libmodsecurity/0003-Revert-Fix-maxminddb-link-on-FreeBSD.patch new file mode 100644 index 00000000..9608e3d9 --- /dev/null +++ b/package/libmodsecurity/0003-Revert-Fix-maxminddb-link-on-FreeBSD.patch @@ -0,0 +1,28 @@ +From 6737dc133cb4811a000c02b4e0a92b72f0b220ee Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Fri, 16 Jul 2021 19:12:51 +0200 +Subject: [PATCH] Revert "Fix maxminddb link on FreeBSD" + +This reverts commit 785958f9b5089b918c7d054cbcc2fe4a3c7b3788. + +Signed-off-by: Fabrice Fontaine +--- + build/libmaxmind.m4 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/build/libmaxmind.m4 b/build/libmaxmind.m4 +index 656fc250..02820b5a 100644 +--- a/build/libmaxmind.m4 ++++ b/build/libmaxmind.m4 +@@ -10,7 +10,7 @@ dnl MAXMIND_VERSION + AC_DEFUN([PROG_MAXMIND], [ + + # Possible names for the maxmind library/package (pkg-config) +-MAXMIND_POSSIBLE_LIB_NAMES="maxminddb maxmind" ++MAXMIND_POSSIBLE_LIB_NAMES="libmaxminddb maxminddb maxmind" + + # Possible extensions for the library + MAXMIND_POSSIBLE_EXTENSIONS="so la sl dll dylib" +-- +2.30.2 + diff --git a/package/libmodsecurity/Config.in b/package/libmodsecurity/Config.in new file mode 100644 index 00000000..87f7a9c1 --- /dev/null +++ b/package/libmodsecurity/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_LIBMODSECURITY + bool "libmodsecurity" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_PCRE + help + Libmodsecurity is one component of the ModSecurity + v3 project. The library codebase serves as an + interface to ModSecurity Connectors taking in web + traffic and applying traditional ModSecurity + processing. In general, it provides the capability + to load/interpret rules written in the ModSecurity + SecRules format and apply them to HTTP content + provided by your application via Connectors. + + https://github.com/SpiderLabs/ModSecurity + +comment "libmodsecurity needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libmodsecurity/libmodsecurity.hash b/package/libmodsecurity/libmodsecurity.hash new file mode 100644 index 00000000..dff39569 --- /dev/null +++ b/package/libmodsecurity/libmodsecurity.hash @@ -0,0 +1,4 @@ +# From https://github.com/SpiderLabs/ModSecurity/releases/download/v3.0.5/modsecurity-v3.0.5.tar.gz.sha256 +sha256 751bf95a7a8d39c440d0c26ec1f73961550ca2eb2ac9e2e7a56dce2dd7b959e9 modsecurity-v3.0.5.tar.gz +# Localy calculated +sha256 c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 LICENSE diff --git a/package/libmodsecurity/libmodsecurity.mk b/package/libmodsecurity/libmodsecurity.mk new file mode 100644 index 00000000..66e7e522 --- /dev/null +++ b/package/libmodsecurity/libmodsecurity.mk @@ -0,0 +1,55 @@ +################################################################################ +# +# libmodsecurity +# +################################################################################ + +LIBMODSECURITY_VERSION = 3.0.5 +LIBMODSECURITY_SOURCE = modsecurity-v$(LIBMODSECURITY_VERSION).tar.gz +LIBMODSECURITY_SITE = https://github.com/SpiderLabs/ModSecurity/releases/download/v$(LIBMODSECURITY_VERSION) +LIBMODSECURITY_INSTALL_STAGING = YES +LIBMODSECURITY_LICENSE = Apache-2.0 +LIBMODSECURITY_LICENSE_FILES = LICENSE +LIBMODSECURITY_CPE_ID_VENDOR = trustwave +LIBMODSECURITY_CPE_ID_PRODUCT = modsecurity +# We're patching build/libmaxmind.m4 +LIBMODSECURITY_AUTORECONF = YES + +LIBMODSECURITY_DEPENDENCIES = pcre +LIBMODSECURITY_CONF_OPTS = \ + --with-pcre="$(STAGING_DIR)/usr/bin/pcre-config" \ + --disable-examples \ + --without-lmdb \ + --without-ssdeep \ + --without-lua \ + --without-yajl + +ifeq ($(BR2_PACKAGE_LIBXML2),y) +LIBMODSECURITY_DEPENDENCIES += libxml2 +LIBMODSECURITY_CONF_OPTS += --with-libxml="$(STAGING_DIR)/usr/bin/xml2-config" +else +LIBMODSECURITY_CONF_OPTS += --without-libxml +endif + +ifeq ($(BR2_PACKAGE_LIBCURL),y) +LIBMODSECURITY_DEPENDENCIES += libcurl +LIBMODSECURITY_CONF_OPTS += --with-curl="$(STAGING_DIR)/usr/bin/curl-config" +else +LIBMODSECURITY_CONF_OPTS += --without-curl +endif + +ifeq ($(BR2_PACKAGE_GEOIP),y) +LIBMODSECURITY_DEPENDENCIES += geoip +LIBMODSECURITY_CONF_OPTS += --with-geoip +else +LIBMODSECURITY_CONF_OPTS += --without-geoip +endif + +ifeq ($(BR2_PACKAGE_LIBMAXMINDDB),y) +LIBMODSECURITY_DEPENDENCIES += libmaxminddb +LIBMODSECURITY_CONF_OPTS += --with-maxmind +else +LIBMODSECURITY_CONF_OPTS += --without-maxmind +endif + +$(eval $(autotools-package)) diff --git a/package/libmpd/0001-Fix-build-on-archlinux-missing-include.patch b/package/libmpd/0001-Fix-build-on-archlinux-missing-include.patch new file mode 100644 index 00000000..be16eb97 --- /dev/null +++ b/package/libmpd/0001-Fix-build-on-archlinux-missing-include.patch @@ -0,0 +1,24 @@ +From 4f946c01000fd97100e4a534b47f9c7ace0403df Mon Sep 17 00:00:00 2001 +From: QC +Date: Thu, 9 Oct 2014 19:51:50 +0200 +Subject: [PATCH] Fix build on archlinux (missing include) + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/DaveDavenport/libmpd/commit/4f946c01000fd97100e4a534b47f9c7ace0403df] +--- + src/libmpd-internal.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/libmpd-internal.h b/src/libmpd-internal.h +index c84c3a4..30cdc85 100644 +--- a/src/libmpd-internal.h ++++ b/src/libmpd-internal.h +@@ -21,6 +21,7 @@ + #define __MPD_INTERNAL_LIB_ + + #include "libmpdclient.h" ++#include + struct _MpdData_real; + + typedef struct _MpdData_real { diff --git a/package/libmpd/Config.in b/package/libmpd/Config.in new file mode 100644 index 00000000..1e3b8600 --- /dev/null +++ b/package/libmpd/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_LIBMPD + bool "libmpd" + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + High-level client library for accessing Music Player Daemon. + LibMpd is a library that provides high-level, callback-based + access to Music Player Daemon (mpd). + + http://gmpcwiki.sarine.nl/index.php?title=Libmpd + +comment "libmpd needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libmpd/libmpd.hash b/package/libmpd/libmpd.hash new file mode 100644 index 00000000..c0e5c6b3 --- /dev/null +++ b/package/libmpd/libmpd.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 fe20326b0d10641f71c4673fae637bf9222a96e1712f71f170fca2fc34bf7a83 libmpd-11.8.17.tar.gz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/libmpd/libmpd.mk b/package/libmpd/libmpd.mk new file mode 100644 index 00000000..2aa7ff7e --- /dev/null +++ b/package/libmpd/libmpd.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# libmpd +# +################################################################################ + +LIBMPD_VERSION_MAJOR = 11.8 +LIBMPD_VERSION = $(LIBMPD_VERSION_MAJOR).17 +LIBMPD_SITE = http://download.sarine.nl/Programs/gmpc/$(LIBMPD_VERSION_MAJOR) +LIBMPD_INSTALL_STAGING = YES +LIBMPD_DEPENDENCIES = libglib2 +LIBMPD_LICENSE = GPL-2.0+ +LIBMPD_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/libmpdclient/Config.in b/package/libmpdclient/Config.in new file mode 100644 index 00000000..ba0df56e --- /dev/null +++ b/package/libmpdclient/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBMPDCLIENT + bool "libmpdclient" + help + A stable, documented, asynchronous API library for interfacing + MPD in the C, C++ & Objective C languages. + + http://www.musicpd.org/libs/libmpdclient/ diff --git a/package/libmpdclient/libmpdclient.hash b/package/libmpdclient/libmpdclient.hash new file mode 100644 index 00000000..882a588a --- /dev/null +++ b/package/libmpdclient/libmpdclient.hash @@ -0,0 +1,3 @@ +# Verified against http://www.musicpd.org/download/libmpdclient/2/libmpdclient-2.19.tar.xz.sig, sha256 locally computed +sha256 158aad4c2278ab08e76a3f2b0166c99b39fae00ee17231bd225c5a36e977a189 libmpdclient-2.19.tar.xz +sha256 9574c3b0a9c31723cc3d5f32af4655a015fff5ec6ec8115b7906cd7d9623cf32 COPYING diff --git a/package/libmpdclient/libmpdclient.mk b/package/libmpdclient/libmpdclient.mk new file mode 100644 index 00000000..a880980a --- /dev/null +++ b/package/libmpdclient/libmpdclient.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# libmpdclient +# +################################################################################ + +LIBMPDCLIENT_VERSION_MAJOR = 2 +LIBMPDCLIENT_VERSION = $(LIBMPDCLIENT_VERSION_MAJOR).19 +LIBMPDCLIENT_SOURCE = libmpdclient-$(LIBMPDCLIENT_VERSION).tar.xz +LIBMPDCLIENT_SITE = http://www.musicpd.org/download/libmpdclient/$(LIBMPDCLIENT_VERSION_MAJOR) +LIBMPDCLIENT_INSTALL_STAGING = YES +LIBMPDCLIENT_LICENSE = BSD-3-Clause +LIBMPDCLIENT_LICENSE_FILES = COPYING + +$(eval $(meson-package)) diff --git a/package/libmpeg2/0001-altivec.patch b/package/libmpeg2/0001-altivec.patch new file mode 100644 index 00000000..4928a62e --- /dev/null +++ b/package/libmpeg2/0001-altivec.patch @@ -0,0 +1,23 @@ +[PATCH] fix altivec.h detection + +Patch from Gentoo: + +http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/media-libs/libmpeg2/files/libmpeg2-0.5.1-altivec.patch?revision=1.1&view=markup + +Signed-off-by: Peter Korsgaard +--- a/configure.ac.bak 2010-05-25 17:12:14.756245990 +0000 ++++ b/configure.ac 2010-05-25 17:11:51.629581723 +0000 +@@ -79,11 +79,10 @@ + CFLAGS="$OPT_CFLAGS $TRY_CFLAGS $CFLAGS" + AC_MSG_CHECKING([if is needed]) + AC_TRY_COMPILE([], +- [typedef vector int t; +- vec_ld(0, (unsigned char *)0);], ++ [vector int t; t = vec_add(t,t);], + [have_altivec=yes; AC_MSG_RESULT(no)], + [AC_TRY_COMPILE([#include ], +- [typedef vector int t; vec_ld(0, (unsigned char *)0);], ++ [vector int t; t = vec_add(t,t);], + [AC_DEFINE([HAVE_ALTIVEC_H],, + [Define to 1 if you have the header.]) + have_altivec=yes; AC_MSG_RESULT(yes)], diff --git a/package/libmpeg2/0002-armv4l.patch b/package/libmpeg2/0002-armv4l.patch new file mode 100644 index 00000000..70d45ef9 --- /dev/null +++ b/package/libmpeg2/0002-armv4l.patch @@ -0,0 +1,24 @@ +Patch taken from gentoo. + +Signed-off-by: Gustavo Zacarias + +diff -urNp libmpeg2.orig/libmpeg2/motion_comp_arm_s.S libmpeg2/libmpeg2/motion_comp_arm_s.S +--- libmpeg2.orig/libmpeg2/motion_comp_arm_s.S 2008-07-09 21:16:05.000000000 +0200 ++++ libmpeg2/libmpeg2/motion_comp_arm_s.S 2009-11-20 19:55:22.000000000 +0100 +@@ -19,6 +19,16 @@ + @ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + ++@ Data preload is supported only by ARM V5TE and above ++ ++#if (defined (__ARM_ARCH_2__) || defined (__ARM_ARCH_3__) \ ++ || defined (__ARM_ARCH_3M__) || defined (__ARM_ARCH_4__) \ ++ || defined (__ARM_ARCH_4T__) || defined (__ARM_ARCH_5__) \ ++ || defined (__ARM_ARCH_5T__)) ++.macro pld reg ++.endm ++#endif ++ + .text + + @ ---------------------------------------------------------------- diff --git a/package/libmpeg2/0003-fix-arm-detection.patch b/package/libmpeg2/0003-fix-arm-detection.patch new file mode 100644 index 00000000..69ec4547 --- /dev/null +++ b/package/libmpeg2/0003-fix-arm-detection.patch @@ -0,0 +1,39 @@ +Improve the ARM detection to work on Thumb-only architecture + +The ARM-specific assembly code doesn't build on Thumb-only +architectures such as ARMv7-M, but the configure script assumes that +if the host tuple is arm*, then it can build and use the ARM optimized +code. + +This patch improves the configure.ac detection logic, by building one +of the instruction of the optimized assembly code, and using this to +decide whether or not the optimizations should be enabled. + +Signed-off-by: Thomas Petazzoni + +Index: b/configure.ac +=================================================================== +--- a/configure.ac ++++ b/configure.ac +@@ -101,8 +101,10 @@ + alpha*) + AC_DEFINE([ARCH_ALPHA],,[alpha architecture]);; + arm*) +- arm_conditional=: +- AC_DEFINE([ARCH_ARM],,[ARM architecture]);; ++ AC_TRY_LINK([], [asm(".syntax divided\nstmfd sp!,{r4-r11,lr}")], ++ [AC_DEFINE([ARCH_ARM],,[ARM architecture]) ++ use_arm_optimization=yes], ++ [use_arm_optimization=no]) + esac + elif test x"$CC" = x"tendracc"; then + dnl TenDRA portability checking compiler +@@ -122,7 +124,7 @@ + esac + fi + +-AM_CONDITIONAL(ARCH_ARM, ${arm_conditional}) ++AM_CONDITIONAL(ARCH_ARM, test "${use_arm_optimization}" = "yes") + + dnl Checks for libtool - this must be done after we set cflags + AC_LIBTOOL_WIN32_DLL diff --git a/package/libmpeg2/0004-fix-sparc.patch b/package/libmpeg2/0004-fix-sparc.patch new file mode 100644 index 00000000..d876b668 --- /dev/null +++ b/package/libmpeg2/0004-fix-sparc.patch @@ -0,0 +1,16 @@ +Do not use sparcv9 optimization flags for sparcv8 builds + +Signed-off-by: Waldemar Brodkorb + +diff -Nur libmpeg2-0.5.1.orig/configure.ac libmpeg2-0.5.1/configure.ac +--- libmpeg2-0.5.1.orig/configure.ac 2008-07-18 16:30:17.000000000 +0200 ++++ libmpeg2-0.5.1/configure.ac 2017-04-26 21:09:15.780838339 +0200 +@@ -95,7 +95,7 @@ + break + fi + done;; +- sparc-* | sparc64-*) ++ sparc64-*) + AC_DEFINE([ARCH_SPARC],,[sparc architecture]) + TRY_CFLAGS="$OPT_CFLAGS -mcpu=ultrasparc -mvis" + AC_TRY_CFLAGS([$TRY_CFLAGS $CFLAGS],[OPT_CFLAGS="$TRY_CFLAGS"]);; diff --git a/package/libmpeg2/Config.in b/package/libmpeg2/Config.in new file mode 100644 index 00000000..6d7ff678 --- /dev/null +++ b/package/libmpeg2/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_LIBMPEG2 + bool "libmpeg2" + help + MPEG1/MPEG2 video decoder library + + http://libmpeg2.sourceforge.net/ + +if BR2_PACKAGE_LIBMPEG2 + +config BR2_PACKAGE_LIBMPEG2_BINS + bool "mpeg2 binaries" + help + Install mpeg2dec, corrupt_mpeg2 and extract_mpeg2 programs as + well. + +endif diff --git a/package/libmpeg2/libmpeg2.hash b/package/libmpeg2/libmpeg2.hash new file mode 100644 index 00000000..615d0ea6 --- /dev/null +++ b/package/libmpeg2/libmpeg2.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 dee22e893cb5fc2b2b6ebd60b88478ab8556cb3b93f9a0d7ce8f3b61851871d4 libmpeg2-0.5.1.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/libmpeg2/libmpeg2.mk b/package/libmpeg2/libmpeg2.mk new file mode 100644 index 00000000..db9b2f8b --- /dev/null +++ b/package/libmpeg2/libmpeg2.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# libmpeg2 +# +################################################################################ + +LIBMPEG2_VERSION = 0.5.1 +LIBMPEG2_SITE = http://libmpeg2.sourceforge.net/files +LIBMPEG2_LICENSE = GPL-2.0+ +LIBMPEG2_LICENSE_FILES = COPYING +LIBMPEG2_INSTALL_STAGING = YES +LIBMPEG2_AUTORECONF = YES +LIBMPEG2_CONF_OPTS = --without-x --disable-directx + +ifeq ($(BR2_PACKAGE_SDL),y) +LIBMPEG2_CONF_ENV += ac_cv_prog_SDLCONFIG=$(STAGING_DIR)/usr/bin/sdl-config +LIBMPEG2_CONF_OPTS += --enable-sdl +LIBMPEG2_DEPENDENCIES += sdl +else +LIBMPEG2_CONF_OPTS += --disable-sdl +endif + +ifneq ($(BR2_PACKAGE_LIBMPEG2_BINS),y) +define LIBMPEG2_REMOVE_BINS + rm -f $(addprefix $(TARGET_DIR)/usr/bin/,\ + mpeg2dec corrupt_mpeg2 extract_mpeg2) +endef + +LIBMPEG2_POST_INSTALL_TARGET_HOOKS += LIBMPEG2_REMOVE_BINS +endif + +$(eval $(autotools-package)) diff --git a/package/libmspack/Config.in b/package/libmspack/Config.in new file mode 100644 index 00000000..e2b1a905 --- /dev/null +++ b/package/libmspack/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBMSPACK + bool "libmspack" + help + libmspack is a portable library for some loosely related + Microsoft compression formats + + https://www.cabextract.org.uk/libmspack diff --git a/package/libmspack/libmspack.hash b/package/libmspack/libmspack.hash new file mode 100644 index 00000000..b12e9b62 --- /dev/null +++ b/package/libmspack/libmspack.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 bac862dee6e0fc10d92c70212441d9f8ad9b0222edc9a708c3ead4adb1b24a8e libmspack-0.10.1alpha.tar.gz +sha256 a190dc9c8043755d90f8b0a75fa66b9e42d4af4c980bf5ddc633f0124db3cee7 COPYING.LIB diff --git a/package/libmspack/libmspack.mk b/package/libmspack/libmspack.mk new file mode 100644 index 00000000..f806192e --- /dev/null +++ b/package/libmspack/libmspack.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# libmspack +# +################################################################################ + +LIBMSPACK_VERSION_MAJOR = 0.10.1 +LIBMSPACK_VERSION_MINOR = alpha +LIBMSPACK_VERSION = $(LIBMSPACK_VERSION_MAJOR)$(LIBMSPACK_VERSION_MINOR) +LIBMSPACK_SITE = https://www.cabextract.org.uk/libmspack +LIBMSPACK_LICENSE = LGPL-2.1 +LIBMSPACK_LICENSE_FILES = COPYING.LIB +LIBMSPACK_CPE_ID_VENDOR = kyzer +LIBMSPACK_CPE_ID_VERSION = $(LIBMSPACK_VERSION_MAJOR) +LIBMSPACK_CPE_ID_UPDATE = $(LIBMSPACK_VERSION_MINOR) +LIBMSPACK_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/libnatpmp/Config.in b/package/libnatpmp/Config.in new file mode 100644 index 00000000..879e5ee1 --- /dev/null +++ b/package/libnatpmp/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_LIBNATPMP + bool "libnatpmp" + depends on !BR2_BINFMT_FLAT + depends on !BR2_STATIC_LIBS + help + libnatpmp is an attempt to make a portable and fully compliant + implementation of the NAT-PMP protocol for the client side. It + is based on non blocking sockets and all calls of the API are + asynchronous. It is therefore very easy to integrate the + NAT-PMP code to any event driven code. + + http://miniupnp.free.fr/libnatpmp.html + +comment "libnatpmp needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + depends on !BR2_BINFMT_FLAT diff --git a/package/libnatpmp/libnatpmp.hash b/package/libnatpmp/libnatpmp.hash new file mode 100644 index 00000000..baf9b353 --- /dev/null +++ b/package/libnatpmp/libnatpmp.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 e1aa9c4c4219bc06943d6b2130f664daee213fb262fcb94dd355815b8f4536b0 libnatpmp-20150609.tar.gz +sha256 e8d8277e1a101fcfedb0cd5a1cc76646522c0da69f3490dd5a4055fc87ea96a2 LICENSE diff --git a/package/libnatpmp/libnatpmp.mk b/package/libnatpmp/libnatpmp.mk new file mode 100644 index 00000000..36230277 --- /dev/null +++ b/package/libnatpmp/libnatpmp.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# libnatpmp +# +################################################################################ + +LIBNATPMP_VERSION = 20150609 +LIBNATPMP_SITE = http://miniupnp.free.fr/files +LIBNATPMP_INSTALL_STAGING = YES +LIBNATPMP_LICENSE = BSD-3-Clause +LIBNATPMP_LICENSE_FILES = LICENSE + +define LIBNATPMP_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + CC="$(TARGET_CC)" +endef + +define LIBNATPMP_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + PREFIX=$(STAGING_DIR) \ + HEADERS='declspec.h natpmp.h' \ + $(TARGET_CONFIGURE_OPTS) install +endef + +define LIBNATPMP_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + PREFIX=$(TARGET_DIR) \ + $(TARGET_CONFIGURE_OPTS) install +endef + +$(eval $(generic-package)) diff --git a/package/libndp/Config.in b/package/libndp/Config.in new file mode 100644 index 00000000..6639bb5e --- /dev/null +++ b/package/libndp/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBNDP + bool "libndp" + help + This package contains a library which provides a wrapper + for IPv6 Neighbor Discovery Protocol. It also provides a tool + named ndptool for sending and receiving NDP messages. + + https://github.com/jpirko/libndp diff --git a/package/libndp/libndp.hash b/package/libndp/libndp.hash new file mode 100644 index 00000000..8d4b6ef5 --- /dev/null +++ b/package/libndp/libndp.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 44be73630ee785ed9f571f9aaaeba0e1d375fa337fd841270034c813b5b0e6fd libndp-1.7.tar.gz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/libndp/libndp.mk b/package/libndp/libndp.mk new file mode 100644 index 00000000..eb1f7f0c --- /dev/null +++ b/package/libndp/libndp.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# libndp +# +################################################################################ + +LIBNDP_VERSION = 1.7 +LIBNDP_SITE = $(call github,jpirko,libndp,v$(LIBNDP_VERSION)) +LIBNDP_LICENSE = LGPL-2.1+ +LIBNDP_LICENSE_FILES = COPYING +LIBNDP_CPE_ID_VENDOR = libndp +LIBNDP_AUTORECONF = YES +LIBNDP_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/libnet/0001-support-musl-libc.patch b/package/libnet/0001-support-musl-libc.patch new file mode 100644 index 00000000..0704157b --- /dev/null +++ b/package/libnet/0001-support-musl-libc.patch @@ -0,0 +1,50 @@ +From ffd7fab744a9ad2893169a8fb6244074604d5d0d Mon Sep 17 00:00:00 2001 +From: rofl0r +Date: Tue, 12 Aug 2014 21:51:39 +0200 +Subject: [PATCH] Support musl libc, remove support for glibc < 2.1 + +The workarounds for glibc < 2.1 (was released february 1999) break the +build with musl libc. + +It is very unlikely that 2.0 or earlier is still in use, and if so, +1) that's a big security hole +2) code wouldnt compile anyway since noone tested build in the last decade +3) user of it wouldn't expect anyway to get bleeding edge sw built on it, + so he would just use the latest version that works for him. + +Closes #52 +--- + libnet/src/libnet_link_linux.c | 11 ----------- + 1 file changed, 11 deletions(-) + +diff --git a/libnet/src/libnet_link_linux.c b/libnet/src/libnet_link_linux.c +index 054458d..3c6df3c 100644 +--- a/src/libnet_link_linux.c ++++ b/src/libnet_link_linux.c +@@ -30,26 +30,15 @@ + #include + + #include +-#if (__GLIBC__) + #include + #include +-#else +-#include +-#include +-#endif + + #if (HAVE_PACKET_SOCKET) + #ifndef SOL_PACKET + #define SOL_PACKET 263 + #endif /* SOL_PACKET */ +-#if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1 + #include + #include /* the L2 protocols */ +-#else +-#include +-#include +-#include /* The L2 protocols */ +-#endif + #endif /* HAVE_PACKET_SOCKET */ + + #include "../include/libnet.h" diff --git a/package/libnet/Config.in b/package/libnet/Config.in new file mode 100644 index 00000000..7186972b --- /dev/null +++ b/package/libnet/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBNET + bool "libnet" + help + libnet provides a portable framework for low-level network + packet construction. + + http://sourceforge.net/projects/libnet-dev diff --git a/package/libnet/libnet.hash b/package/libnet/libnet.hash new file mode 100644 index 00000000..9f62aeda --- /dev/null +++ b/package/libnet/libnet.hash @@ -0,0 +1,5 @@ +# From https://sourceforge.net/projects/libnet-dev/files/ +sha1 dffff71c325584fdcf99b80567b60f8ad985e34c libnet-1.1.6.tar.gz +md5 710296fe424a49344e5fcc0d09e53317 libnet-1.1.6.tar.gz +# Locally computed +sha256 961355c8bac6de11ecb8f634111986712e80a88272c0bb0954fd1810e6f47cab doc/COPYING diff --git a/package/libnet/libnet.mk b/package/libnet/libnet.mk new file mode 100644 index 00000000..5c5071b9 --- /dev/null +++ b/package/libnet/libnet.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libnet +# +################################################################################ + +LIBNET_VERSION = 1.1.6 +LIBNET_SITE = http://sourceforge.net/projects/libnet-dev/files +LIBNET_INSTALL_STAGING = YES +# PF_PACKET is always available on Linux +LIBNET_CONF_OPTS = libnet_cv_have_packet_socket=yes +LIBNET_LICENSE = BSD-2-Clause, BSD-3-Clause +LIBNET_LICENSE_FILES = doc/COPYING +LIBNET_CPE_ID_VENDOR = libnet_project + +$(eval $(autotools-package)) diff --git a/package/libnetconf2/Config.in b/package/libnetconf2/Config.in new file mode 100644 index 00000000..0a735b5e --- /dev/null +++ b/package/libnetconf2/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_LIBNETCONF2 + bool "libnetconf2" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + depends on BR2_USE_MMU + select BR2_PACKAGE_LIBYANG + help + libnetconf2 is a NETCONF library in C intended for building + NETCONF clients and servers. + + https://github.com/CESNET/libnetconf2 + +comment "libnetconf2 needs a toolchain w/ threads, dynamic libraray" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libnetconf2/libnetconf2.hash b/package/libnetconf2/libnetconf2.hash new file mode 100644 index 00000000..a20e31e8 --- /dev/null +++ b/package/libnetconf2/libnetconf2.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 17aa551380ffcccc3bfd928edbcc170cbe85b0f336b361d5f03ede8f3e5f6348 libnetconf2-1.1.36.tar.gz +sha256 bd962ab457c8a8cb8faaaa36c11484680f3c9a47dbc336507817ae8935384064 LICENSE diff --git a/package/libnetconf2/libnetconf2.mk b/package/libnetconf2/libnetconf2.mk new file mode 100644 index 00000000..770188df --- /dev/null +++ b/package/libnetconf2/libnetconf2.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# libnetconf2 +# +################################################################################ + +LIBNETCONF2_VERSION = 1.1.36 +LIBNETCONF2_SITE = $(call github,CESNET,libnetconf2,v$(LIBNETCONF2_VERSION)) +LIBNETCONF2_INSTALL_STAGING = YES +LIBNETCONF2_LICENSE = BSD-3-Clause +LIBNETCONF2_LICENSE_FILES = LICENSE +LIBNETCONF2_DEPENDENCIES = libyang +HOST_LIBNETCONF2_DEPENDENCIES = host-libyang + +LIBNETCONF2_CONF_OPTS = \ + -DENABLE_BUILD_TESTS=OFF \ + -DENABLE_VALGRIND_TESTS=OFF + +ifeq ($(BR2_PACKAGE_LIBSSH_SERVER), y) +LIBNETCONF2_CONF_OPTS += -DENABLE_SSH=ON +LIBNETCONF2_DEPENDENCIES += libssh +else +LIBNETCONF2_CONF_OPTS += -DENABLE_SSH=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENSSL), y) +LIBNETCONF2_CONF_OPTS += -DENABLE_TLS=ON +LIBNETCONF2_DEPENDENCIES += openssl +else +LIBNETCONF2_CONF_OPTS += -DENABLE_TLS=OFF +endif + +HOST_LIBNETCONF2_CONF_OPTS = \ + -DENABLE_BUILD_TESTS=OFF \ + -DENABLE_VALGRIND_TESTS=OFF \ + -DENABLE_SSH=OFF \ + -DENABLE_TLS=OFF + +$(eval $(cmake-package)) +$(eval $(host-cmake-package)) diff --git a/package/libnetfilter_acct/Config.in b/package/libnetfilter_acct/Config.in new file mode 100644 index 00000000..ecfef6dc --- /dev/null +++ b/package/libnetfilter_acct/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBNETFILTER_ACCT + bool "libnetfilter_acct" + select BR2_PACKAGE_LIBMNL + help + libnetfilter_acct is the userspace library providing interface + to extended accounting infrastructure. + + http://www.netfilter.org/projects/libnetfilter_acct/ diff --git a/package/libnetfilter_acct/libnetfilter_acct.hash b/package/libnetfilter_acct/libnetfilter_acct.hash new file mode 100644 index 00000000..0d37c436 --- /dev/null +++ b/package/libnetfilter_acct/libnetfilter_acct.hash @@ -0,0 +1,6 @@ +# From ftp://ftp.netfilter.org/pub/libnetfilter_acct/libnetfilter_acct-1.0.3.tar.bz2.{md5sum,sha1sum} +md5 814b2972b2f5c740ff87510bc109168b libnetfilter_acct-1.0.3.tar.bz2 +sha1 4b9073e4aa989b0f000c8da1ab01b22fceed52b2 libnetfilter_acct-1.0.3.tar.bz2 + +# Hash for license file: +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/libnetfilter_acct/libnetfilter_acct.mk b/package/libnetfilter_acct/libnetfilter_acct.mk new file mode 100644 index 00000000..e791f6f1 --- /dev/null +++ b/package/libnetfilter_acct/libnetfilter_acct.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# libnetfilter_acct +# +################################################################################ + +LIBNETFILTER_ACCT_VERSION = 1.0.3 +LIBNETFILTER_ACCT_SOURCE = libnetfilter_acct-$(LIBNETFILTER_ACCT_VERSION).tar.bz2 +LIBNETFILTER_ACCT_SITE = http://www.netfilter.org/projects/libnetfilter_acct/files +LIBNETFILTER_ACCT_INSTALL_STAGING = YES +LIBNETFILTER_ACCT_DEPENDENCIES = host-pkgconf libmnl +LIBNETFILTER_ACCT_LICENSE = LGPL-2.1+ +LIBNETFILTER_ACCT_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/libnetfilter_conntrack/0001-libnetfilter_conntrack.pc.in-add-LIBMNL_LIBS-to-Libs.patch b/package/libnetfilter_conntrack/0001-libnetfilter_conntrack.pc.in-add-LIBMNL_LIBS-to-Libs.patch new file mode 100644 index 00000000..0b373d92 --- /dev/null +++ b/package/libnetfilter_conntrack/0001-libnetfilter_conntrack.pc.in-add-LIBMNL_LIBS-to-Libs.patch @@ -0,0 +1,38 @@ +From 93bbd7e56cefc8488a61892b3bf5df63a175d20d Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 12 Apr 2020 14:05:15 +0200 +Subject: [PATCH] libnetfilter_conntrack.pc.in: add LIBMNL_LIBS to Libs.Private + +Since version 1.0.8 and commit +c1c0f16c1fedb46547c2e104beeaaeac5933b214, libnetfilter_conntrack depends +on libmnl so add it to Libs.Private. + +Otherwise, applications such as dnsmasq will fail to link on: + +/home/buildroot/autobuild/instance-0/output-1/host/bin/arm-linux-gcc -Wl,-elf2flt -static -o dnsmasq cache.o rfc1035.o util.o option.o forward.o network.o dnsmasq.o dhcp.o lease.o rfc2131.o netlink.o dbus.o bpf.o helper.o tftp.o log.o conntrack.o dhcp6.o rfc3315.o dhcp-common.o outpacket.o radv.o slaac.o auth.o ipset.o domain.o dnssec.o blockdata.o tables.o loop.o inotify.o poll.o rrfilter.o edns0.o arp.o crypto.o dump.o ubus.o metrics.o -L/home/buildroot/autobuild/instance-0/output-1/host/bin/../arm-buildroot-uclinux-uclibcgnueabi/sysroot/usr/lib -lnetfilter_conntrack -L/home/buildroot/autobuild/instance-0/output-1/host/bin/../arm-buildroot-uclinux-uclibcgnueabi/sysroot/usr/lib -lnfnetlink +/home/buildroot/autobuild/instance-0/output-1/host/opt/ext-toolchain/arm-buildroot-uclinux-uclibcgnueabi/bin/ld.real: /home/buildroot/autobuild/instance-0/output-1/host/bin/../arm-buildroot-uclinux-uclibcgnueabi/sysroot/usr/lib/libnetfilter_conntrack.a(api.o): in function `nfct_fill_hdr.constprop.4': +api.c:(.text+0x34): undefined reference to `mnl_nlmsg_put_header' + +Fixes: + - http://autobuild.buildroot.org/results/3fdc2cba20162eb86eaa5c49a056fb40fb18a392 + +Signed-off-by: Fabrice Fontaine +[Upstream status: commit e94172f09e4d] +--- + libnetfilter_conntrack.pc.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libnetfilter_conntrack.pc.in b/libnetfilter_conntrack.pc.in +index 857f993..fbd7132 100644 +--- a/libnetfilter_conntrack.pc.in ++++ b/libnetfilter_conntrack.pc.in +@@ -12,5 +12,5 @@ Version: @VERSION@ + Requires: libnfnetlink + Conflicts: + Libs: -L${libdir} -lnetfilter_conntrack +-Libs.private: @LIBNFNETLINK_LIBS@ ++Libs.private: @LIBNFNETLINK_LIBS@ @LIBMNL_LIBS@ + Cflags: -I${includedir} +-- +2.25.1 + diff --git a/package/libnetfilter_conntrack/Config.in b/package/libnetfilter_conntrack/Config.in new file mode 100644 index 00000000..f9a407ff --- /dev/null +++ b/package/libnetfilter_conntrack/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LIBNETFILTER_CONNTRACK + bool "libnetfilter_conntrack" + select BR2_PACKAGE_LIBMNL + select BR2_PACKAGE_LIBNFNETLINK + help + libnetfilter_conntrack is a userspace library providing + a programming interface (API) to the in-kernel + connection tracking state table. + + http://www.netfilter.org/projects/libnetfilter_conntrack/ diff --git a/package/libnetfilter_conntrack/libnetfilter_conntrack.hash b/package/libnetfilter_conntrack/libnetfilter_conntrack.hash new file mode 100644 index 00000000..19520aa3 --- /dev/null +++ b/package/libnetfilter_conntrack/libnetfilter_conntrack.hash @@ -0,0 +1,5 @@ +# From ftp://ftp.netfilter.org/pub/libnetfilter_conntrack/libnetfilter_conntrack-1.0.8.tar.bz2.sha256sum +sha256 0cd13be008923528687af6c6b860f35392d49251c04ee0648282d36b1faec1cf libnetfilter_conntrack-1.0.8.tar.bz2 + +# Hash for license file: +sha256 91df39d1816bfb17a4dda2d3d2c83b1f6f2d38d53e53e41e8f97ad5ac46a0cad COPYING diff --git a/package/libnetfilter_conntrack/libnetfilter_conntrack.mk b/package/libnetfilter_conntrack/libnetfilter_conntrack.mk new file mode 100644 index 00000000..0a5a94be --- /dev/null +++ b/package/libnetfilter_conntrack/libnetfilter_conntrack.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libnetfilter_conntrack +# +################################################################################ + +LIBNETFILTER_CONNTRACK_VERSION = 1.0.8 +LIBNETFILTER_CONNTRACK_SOURCE = libnetfilter_conntrack-$(LIBNETFILTER_CONNTRACK_VERSION).tar.bz2 +LIBNETFILTER_CONNTRACK_SITE = http://www.netfilter.org/projects/libnetfilter_conntrack/files +LIBNETFILTER_CONNTRACK_INSTALL_STAGING = YES +LIBNETFILTER_CONNTRACK_DEPENDENCIES = host-pkgconf libnfnetlink libmnl +LIBNETFILTER_CONNTRACK_LICENSE = GPL-2.0+ +LIBNETFILTER_CONNTRACK_LICENSE_FILES = COPYING +LIBNETFILTER_CONNTRACK_CPE_ID_VENDOR = netfilter + +$(eval $(autotools-package)) diff --git a/package/libnetfilter_cthelper/0001-uclinux.patch b/package/libnetfilter_cthelper/0001-uclinux.patch new file mode 100644 index 00000000..7a6ca70b --- /dev/null +++ b/package/libnetfilter_cthelper/0001-uclinux.patch @@ -0,0 +1,26 @@ +From d028334281b218209412ec6e1dba56ca96320bd9 Mon Sep 17 00:00:00 2001 +From: Gustavo Zacarias +Date: Tue, 10 Sep 2013 16:08:29 -0300 +Subject: [PATCH] configure: uclinux is also linux + +Signed-off-by: Gustavo Zacarias +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index d52b1ce..9389b70 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -22,7 +22,7 @@ AC_DISABLE_STATIC + LT_INIT + CHECK_GCC_FVISIBILITY + case "$host" in +-*-*-linux*) ;; ++*-*-linux* | *-*-uclinux*) ;; + *) AC_MSG_ERROR([Linux only, dude!]);; + esac + +-- +1.8.1.5 + diff --git a/package/libnetfilter_cthelper/Config.in b/package/libnetfilter_cthelper/Config.in new file mode 100644 index 00000000..8d9b1dd4 --- /dev/null +++ b/package/libnetfilter_cthelper/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LIBNETFILTER_CTHELPER + bool "libnetfilter_cthelper" + select BR2_PACKAGE_LIBMNL + help + libnetfilter_cthelper is the userspace library that provides + the programming interface to the user-space helper + infrastructure available since Linux kernel 3.6. + + http://www.netfilter.org/projects/libnetfilter_cthelper/ diff --git a/package/libnetfilter_cthelper/libnetfilter_cthelper.hash b/package/libnetfilter_cthelper/libnetfilter_cthelper.hash new file mode 100644 index 00000000..42deade7 --- /dev/null +++ b/package/libnetfilter_cthelper/libnetfilter_cthelper.hash @@ -0,0 +1,6 @@ +# From ftp://ftp.netfilter.org/pub/libnetfilter_cthelper/libnetfilter_cthelper-1.0.0.tar.bz2.{md5sum,sha1sum} +md5 b2efab1a3a198a5add448960ba011acd libnetfilter_cthelper-1.0.0.tar.bz2 +sha1 5d0a82794bd46aafde20c16800edca23d563de66 libnetfilter_cthelper-1.0.0.tar.bz2 + +# Hash for license file: +sha256 91df39d1816bfb17a4dda2d3d2c83b1f6f2d38d53e53e41e8f97ad5ac46a0cad COPYING diff --git a/package/libnetfilter_cthelper/libnetfilter_cthelper.mk b/package/libnetfilter_cthelper/libnetfilter_cthelper.mk new file mode 100644 index 00000000..d74ea4d0 --- /dev/null +++ b/package/libnetfilter_cthelper/libnetfilter_cthelper.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# libnetfilter_cthelper +# +################################################################################ + +LIBNETFILTER_CTHELPER_VERSION = 1.0.0 +LIBNETFILTER_CTHELPER_SOURCE = libnetfilter_cthelper-$(LIBNETFILTER_CTHELPER_VERSION).tar.bz2 +LIBNETFILTER_CTHELPER_SITE = http://www.netfilter.org/projects/libnetfilter_cthelper/files +LIBNETFILTER_CTHELPER_INSTALL_STAGING = YES +LIBNETFILTER_CTHELPER_DEPENDENCIES = host-pkgconf libmnl +LIBNETFILTER_CTHELPER_AUTORECONF = YES +LIBNETFILTER_CTHELPER_LICENSE = GPL-2.0+ +LIBNETFILTER_CTHELPER_LICENSE_FILES = COPYING +LIBNETFILTER_CTHELPER_CPE_ID_VENDOR = netfilter + +$(eval $(autotools-package)) diff --git a/package/libnetfilter_cttimeout/0001-uclinux.patch b/package/libnetfilter_cttimeout/0001-uclinux.patch new file mode 100644 index 00000000..5d462d8f --- /dev/null +++ b/package/libnetfilter_cttimeout/0001-uclinux.patch @@ -0,0 +1,26 @@ +From d8d2ec14bc192f998afae2b71c69248e73518ddf Mon Sep 17 00:00:00 2001 +From: Gustavo Zacarias +Date: Tue, 10 Sep 2013 16:09:14 -0300 +Subject: [PATCH] configure: uclinux is also linux + +Signed-off-by: Gustavo Zacarias +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index d79e941..aeb6ad0 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -22,7 +22,7 @@ AC_DISABLE_STATIC + LT_INIT + CHECK_GCC_FVISIBILITY + case "$host" in +-*-*-linux*) ;; ++*-*-linux* | *-*-uclinux*) ;; + *) AC_MSG_ERROR([Linux only, dude!]);; + esac + +-- +1.8.1.5 + diff --git a/package/libnetfilter_cttimeout/Config.in b/package/libnetfilter_cttimeout/Config.in new file mode 100644 index 00000000..333919be --- /dev/null +++ b/package/libnetfilter_cttimeout/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT + bool "libnetfilter_cttimeout" + select BR2_PACKAGE_LIBMNL + help + libnetfilter_cttimeout is the userspace library that provides + the programming interface to the fine-grain + connection tracking timeout infrastructure. + + http://www.netfilter.org/projects/libnetfilter_cttimeout/ diff --git a/package/libnetfilter_cttimeout/libnetfilter_cttimeout.hash b/package/libnetfilter_cttimeout/libnetfilter_cttimeout.hash new file mode 100644 index 00000000..af5a281e --- /dev/null +++ b/package/libnetfilter_cttimeout/libnetfilter_cttimeout.hash @@ -0,0 +1,6 @@ +# From ftp://ftp.netfilter.org/pub/libnetfilter_cttimeout/libnetfilter_cttimeout-1.0.0.tar.bz2.{md5sum,sha1sum} +md5 7697437fc9ebb6f6b83df56a633db7f9 libnetfilter_cttimeout-1.0.0.tar.bz2 +sha1 24cba24b0371e80007be4ea0fa9d872df63b8a7a libnetfilter_cttimeout-1.0.0.tar.bz2 + +# Hash for license file: +sha256 91df39d1816bfb17a4dda2d3d2c83b1f6f2d38d53e53e41e8f97ad5ac46a0cad COPYING diff --git a/package/libnetfilter_cttimeout/libnetfilter_cttimeout.mk b/package/libnetfilter_cttimeout/libnetfilter_cttimeout.mk new file mode 100644 index 00000000..f5c5067b --- /dev/null +++ b/package/libnetfilter_cttimeout/libnetfilter_cttimeout.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# libnetfilter_cttimeout +# +################################################################################ + +LIBNETFILTER_CTTIMEOUT_VERSION = 1.0.0 +LIBNETFILTER_CTTIMEOUT_SOURCE = libnetfilter_cttimeout-$(LIBNETFILTER_CTTIMEOUT_VERSION).tar.bz2 +LIBNETFILTER_CTTIMEOUT_SITE = http://www.netfilter.org/projects/libnetfilter_cttimeout/files +LIBNETFILTER_CTTIMEOUT_INSTALL_STAGING = YES +LIBNETFILTER_CTTIMEOUT_DEPENDENCIES = host-pkgconf libmnl +LIBNETFILTER_CTTIMEOUT_AUTORECONF = YES +LIBNETFILTER_CTTIMEOUT_LICENSE = GPL-2.0+ +LIBNETFILTER_CTTIMEOUT_LICENSE_FILES = COPYING +LIBNETFILTER_CTTIMEOUT_CPE_ID_VENDOR = netfilter + +$(eval $(autotools-package)) diff --git a/package/libnetfilter_log/0001-uclinux.patch b/package/libnetfilter_log/0001-uclinux.patch new file mode 100644 index 00000000..75d4a1e9 --- /dev/null +++ b/package/libnetfilter_log/0001-uclinux.patch @@ -0,0 +1,26 @@ +From e36a2377e7ec50f6f675eb41f79edcda6ddebe5c Mon Sep 17 00:00:00 2001 +From: Gustavo Zacarias +Date: Tue, 10 Sep 2013 15:48:50 -0300 +Subject: [PATCH] configure: uclinux is also linux + +Signed-off-by: Gustavo Zacarias +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index e6e1317..189a753 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -20,7 +20,7 @@ AC_PROG_INSTALL + AC_PROG_LN_S + + case "$host" in +-*-*-linux*) ;; ++*-*-linux* | *-*-uclinux*) ;; + *) AC_MSG_ERROR([Linux only, dude!]);; + esac + +-- +1.8.1.5 + diff --git a/package/libnetfilter_log/0002-Add-include-needed-for-integer-type-definition.patch b/package/libnetfilter_log/0002-Add-include-needed-for-integer-type-definition.patch new file mode 100644 index 00000000..bc8bbb22 --- /dev/null +++ b/package/libnetfilter_log/0002-Add-include-needed-for-integer-type-definition.patch @@ -0,0 +1,27 @@ +From 7529487f70e244cd31ef84b037b1c32749c134a7 Mon Sep 17 00:00:00 2001 +From: Eric Leblond +Date: Sun, 4 Nov 2012 09:29:44 +0100 +Subject: Add include needed for integer type definition. + +[Retrieved from: +https://git.netfilter.org/libnetfilter_log/commit/?id=7529487f70e244cd31ef84b037b1c32749c134a7] +Signed-off-by: Fabrice Fontaine +--- + include/libnetfilter_log/libnetfilter_log.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/include/libnetfilter_log/libnetfilter_log.h b/include/libnetfilter_log/libnetfilter_log.h +index 6b0d3b0..a1331de 100644 +--- a/include/libnetfilter_log/libnetfilter_log.h ++++ b/include/libnetfilter_log/libnetfilter_log.h +@@ -9,6 +9,7 @@ + #ifndef __LIBNETFILTER_LOG_H + #define __LIBNETFILTER_LOG_H + ++#include + #include + + struct nflog_handle; +-- +cgit v1.2.3 + diff --git a/package/libnetfilter_log/0003-src-Use-stdint-types-everywhere.patch b/package/libnetfilter_log/0003-src-Use-stdint-types-everywhere.patch new file mode 100644 index 00000000..dfc59483 --- /dev/null +++ b/package/libnetfilter_log/0003-src-Use-stdint-types-everywhere.patch @@ -0,0 +1,489 @@ +From 42878e88e5b72d3120434564942417cae3723385 Mon Sep 17 00:00:00 2001 +From: Felix Janda +Date: Sat, 16 May 2015 14:01:00 +0200 +Subject: src: Use stdint types everywhere + +Signed-off-by: Felix Janda +Signed-off-by: Pablo Neira Ayuso + +[Retrieved from: +https://git.netfilter.org/libnetfilter_log/commit/?id=42878e88e5b72d3120434564942417cae3723385] +Signed-off-by: Fabrice Fontaine +--- + include/libnetfilter_log/libipulog.h | 5 +- + include/libnetfilter_log/libnetfilter_log.h | 39 ++++++------ + src/libipulog_compat.c | 10 ++-- + src/libnetfilter_log.c | 92 ++++++++++++++--------------- + utils/nfulnl_test.c | 6 +- + 5 files changed, 77 insertions(+), 75 deletions(-) + +diff --git a/include/libnetfilter_log/libipulog.h b/include/libnetfilter_log/libipulog.h +index 1093bdd..ee7890a 100644 +--- a/include/libnetfilter_log/libipulog.h ++++ b/include/libnetfilter_log/libipulog.h +@@ -2,6 +2,7 @@ + #define _LIBIPULOG_H + + #include ++#include + #include + #include + #include +@@ -33,9 +34,9 @@ typedef struct ulog_packet_msg { + struct ipulog_handle; + extern int ipulog_errno; + +-u_int32_t ipulog_group2gmask(u_int32_t group); ++uint32_t ipulog_group2gmask(uint32_t group); + +-struct ipulog_handle *ipulog_create_handle(u_int32_t gmask, u_int32_t rmem); ++struct ipulog_handle *ipulog_create_handle(uint32_t gmask, uint32_t rmem); + + void ipulog_destroy_handle(struct ipulog_handle *h); + +diff --git a/include/libnetfilter_log/libnetfilter_log.h b/include/libnetfilter_log/libnetfilter_log.h +index a1331de..7812877 100644 +--- a/include/libnetfilter_log/libnetfilter_log.h ++++ b/include/libnetfilter_log/libnetfilter_log.h +@@ -9,6 +9,7 @@ + #ifndef __LIBNETFILTER_LOG_H + #define __LIBNETFILTER_LOG_H + ++#include + #include + #include + +@@ -29,19 +30,19 @@ extern struct nflog_handle *nflog_open(void); + extern struct nflog_handle *nflog_open_nfnl(struct nfnl_handle *nfnlh); + extern int nflog_close(struct nflog_handle *h); + +-extern int nflog_bind_pf(struct nflog_handle *h, u_int16_t pf); +-extern int nflog_unbind_pf(struct nflog_handle *h, u_int16_t pf); ++extern int nflog_bind_pf(struct nflog_handle *h, uint16_t pf); ++extern int nflog_unbind_pf(struct nflog_handle *h, uint16_t pf); + + extern struct nflog_g_handle *nflog_bind_group(struct nflog_handle *h, +- u_int16_t num); ++ uint16_t num); + extern int nflog_unbind_group(struct nflog_g_handle *gh); + + extern int nflog_set_mode(struct nflog_g_handle *gh, +- u_int8_t mode, unsigned int len); +-extern int nflog_set_timeout(struct nflog_g_handle *gh, u_int32_t timeout); +-extern int nflog_set_flags(struct nflog_g_handle *gh, u_int16_t flags); +-extern int nflog_set_qthresh(struct nflog_g_handle *gh, u_int32_t qthresh); +-extern int nflog_set_nlbufsiz(struct nflog_g_handle *gh, u_int32_t nlbufsiz); ++ uint8_t mode, unsigned int len); ++extern int nflog_set_timeout(struct nflog_g_handle *gh, uint32_t timeout); ++extern int nflog_set_flags(struct nflog_g_handle *gh, uint16_t flags); ++extern int nflog_set_qthresh(struct nflog_g_handle *gh, uint32_t qthresh); ++extern int nflog_set_nlbufsiz(struct nflog_g_handle *gh, uint32_t nlbufsiz); + + extern int nflog_callback_register(struct nflog_g_handle *gh, + nflog_callback *cb, void *data); +@@ -50,23 +51,23 @@ extern int nflog_handle_packet(struct nflog_handle *h, char *buf, int len); + + extern struct nfulnl_msg_packet_hdr *nflog_get_msg_packet_hdr(struct nflog_data *nfad); + +-extern u_int16_t nflog_get_hwtype(struct nflog_data *nfad); +-extern u_int16_t nflog_get_msg_packet_hwhdrlen(struct nflog_data *nfad); ++extern uint16_t nflog_get_hwtype(struct nflog_data *nfad); ++extern uint16_t nflog_get_msg_packet_hwhdrlen(struct nflog_data *nfad); + extern char *nflog_get_msg_packet_hwhdr(struct nflog_data *nfad); + +-extern u_int32_t nflog_get_nfmark(struct nflog_data *nfad); ++extern uint32_t nflog_get_nfmark(struct nflog_data *nfad); + extern int nflog_get_timestamp(struct nflog_data *nfad, struct timeval *tv); +-extern u_int32_t nflog_get_indev(struct nflog_data *nfad); +-extern u_int32_t nflog_get_physindev(struct nflog_data *nfad); +-extern u_int32_t nflog_get_outdev(struct nflog_data *nfad); +-extern u_int32_t nflog_get_physoutdev(struct nflog_data *nfad); ++extern uint32_t nflog_get_indev(struct nflog_data *nfad); ++extern uint32_t nflog_get_physindev(struct nflog_data *nfad); ++extern uint32_t nflog_get_outdev(struct nflog_data *nfad); ++extern uint32_t nflog_get_physoutdev(struct nflog_data *nfad); + extern struct nfulnl_msg_packet_hw *nflog_get_packet_hw(struct nflog_data *nfad); + extern int nflog_get_payload(struct nflog_data *nfad, char **data); + extern char *nflog_get_prefix(struct nflog_data *nfad); +-extern int nflog_get_uid(struct nflog_data *nfad, u_int32_t *uid); +-extern int nflog_get_gid(struct nflog_data *nfad, u_int32_t *gid); +-extern int nflog_get_seq(struct nflog_data *nfad, u_int32_t *seq); +-extern int nflog_get_seq_global(struct nflog_data *nfad, u_int32_t *seq); ++extern int nflog_get_uid(struct nflog_data *nfad, uint32_t *uid); ++extern int nflog_get_gid(struct nflog_data *nfad, uint32_t *gid); ++extern int nflog_get_seq(struct nflog_data *nfad, uint32_t *seq); ++extern int nflog_get_seq_global(struct nflog_data *nfad, uint32_t *seq); + + enum { + NFLOG_XML_PREFIX = (1 << 0), +diff --git a/src/libipulog_compat.c b/src/libipulog_compat.c +index 64ca7f3..2d5b23a 100644 +--- a/src/libipulog_compat.c ++++ b/src/libipulog_compat.c +@@ -20,7 +20,7 @@ struct ipulog_handle + struct nlmsghdr *last_nlh; + #if 0 + int fd; +- u_int8_t blocking; ++ uint8_t blocking; + struct sockaddr_nl local; + struct sockaddr_nl peer; + #endif +@@ -72,7 +72,7 @@ const char *ipulog_strerror(int errcode) + } + + /* convert a netlink group (1-32) to a group_mask suitable for create_handle */ +-u_int32_t ipulog_group2gmask(u_int32_t group) ++uint32_t ipulog_group2gmask(uint32_t group) + { + if (group < 1 || group > 32) + { +@@ -83,8 +83,8 @@ u_int32_t ipulog_group2gmask(u_int32_t group) + } + + /* create a ipulog handle for the reception of packets sent to gmask */ +-struct ipulog_handle *ipulog_create_handle(u_int32_t gmask, +- u_int32_t rcvbufsize) ++struct ipulog_handle *ipulog_create_handle(uint32_t gmask, ++ uint32_t rcvbufsize) + { + int rv; + struct ipulog_handle *h; +@@ -155,7 +155,7 @@ next_msg: printf("next\n"); + h->upmsg.hook = hdr->hook; + + if (tb[NFULA_MARK-1]) +- h->upmsg.mark = ntohl(*(u_int32_t *)NFA_DATA(tb[NFULA_MARK-1])); ++ h->upmsg.mark = ntohl(*(uint32_t *)NFA_DATA(tb[NFULA_MARK-1])); + else + h->upmsg.mark = 0; + +diff --git a/src/libnetfilter_log.c b/src/libnetfilter_log.c +index 76ed436..e92576b 100644 +--- a/src/libnetfilter_log.c ++++ b/src/libnetfilter_log.c +@@ -72,7 +72,7 @@ struct nflog_g_handle + { + struct nflog_g_handle *next; + struct nflog_handle *h; +- u_int16_t id; ++ uint16_t id; + + nflog_callback *cb; + void *data; +@@ -111,7 +111,7 @@ static void add_gh(struct nflog_g_handle *gh) + gh->h->gh_list = gh; + } + +-static struct nflog_g_handle *find_gh(struct nflog_handle *h, u_int16_t group) ++static struct nflog_g_handle *find_gh(struct nflog_handle *h, uint16_t group) + { + struct nflog_g_handle *gh; + +@@ -124,8 +124,8 @@ static struct nflog_g_handle *find_gh(struct nflog_handle *h, u_int16_t group) + + /* build a NFULNL_MSG_CONFIG message */ + static int +-__build_send_cfg_msg(struct nflog_handle *h, u_int8_t command, +- u_int16_t groupnum, u_int8_t pf) ++__build_send_cfg_msg(struct nflog_handle *h, uint8_t command, ++ uint16_t groupnum, uint8_t pf) + { + union { + char buf[NFNL_HEADER_LEN +@@ -148,7 +148,7 @@ static int __nflog_rcv_pkt(struct nlmsghdr *nlh, struct nfattr *nfa[], + { + struct nfgenmsg *nfmsg = NLMSG_DATA(nlh); + struct nflog_handle *h = data; +- u_int16_t group = ntohs(nfmsg->res_id); ++ uint16_t group = ntohs(nfmsg->res_id); + struct nflog_g_handle *gh = find_gh(h, group); + struct nflog_data nfldata; + +@@ -359,7 +359,7 @@ int nflog_close(struct nflog_handle *h) + * + * \return integer inferior to 0 in case of failure + */ +-int nflog_bind_pf(struct nflog_handle *h, u_int16_t pf) ++int nflog_bind_pf(struct nflog_handle *h, uint16_t pf) + { + return __build_send_cfg_msg(h, NFULNL_CFG_CMD_PF_BIND, 0, pf); + } +@@ -373,7 +373,7 @@ int nflog_bind_pf(struct nflog_handle *h, u_int16_t pf) + * Unbinds the given nflog handle from processing packets belonging + * to the given protocol family. + */ +-int nflog_unbind_pf(struct nflog_handle *h, u_int16_t pf) ++int nflog_unbind_pf(struct nflog_handle *h, uint16_t pf) + { + return __build_send_cfg_msg(h, NFULNL_CFG_CMD_PF_UNBIND, 0, pf); + } +@@ -395,7 +395,7 @@ int nflog_unbind_pf(struct nflog_handle *h, u_int16_t pf) + * \return a nflog_g_handle pointing to the newly created group + */ + struct nflog_g_handle * +-nflog_bind_group(struct nflog_handle *h, u_int16_t num) ++nflog_bind_group(struct nflog_handle *h, uint16_t num) + { + struct nflog_g_handle *gh; + +@@ -461,7 +461,7 @@ int nflog_unbind_group(struct nflog_g_handle *gh) + * \return -1 on error; >= otherwise. + */ + int nflog_set_mode(struct nflog_g_handle *gh, +- u_int8_t mode, u_int32_t range) ++ uint8_t mode, uint32_t range) + { + union { + char buf[NFNL_HEADER_LEN +@@ -493,10 +493,10 @@ int nflog_set_mode(struct nflog_g_handle *gh, + * + * \return -1 in case of error and errno is explicity set. + */ +-int nflog_set_timeout(struct nflog_g_handle *gh, u_int32_t timeout) ++int nflog_set_timeout(struct nflog_g_handle *gh, uint32_t timeout) + { + union { +- char buf[NFNL_HEADER_LEN+NFA_LENGTH(sizeof(u_int32_t))]; ++ char buf[NFNL_HEADER_LEN+NFA_LENGTH(sizeof(uint32_t))]; + struct nlmsghdr nmh; + } u; + +@@ -518,10 +518,10 @@ int nflog_set_timeout(struct nflog_g_handle *gh, u_int32_t timeout) + * + * \return -1 in case of error and errno is explicity set. + */ +-int nflog_set_qthresh(struct nflog_g_handle *gh, u_int32_t qthresh) ++int nflog_set_qthresh(struct nflog_g_handle *gh, uint32_t qthresh) + { + union { +- char buf[NFNL_HEADER_LEN+NFA_LENGTH(sizeof(u_int32_t))]; ++ char buf[NFNL_HEADER_LEN+NFA_LENGTH(sizeof(uint32_t))]; + struct nlmsghdr nmh; + } u; + +@@ -547,10 +547,10 @@ int nflog_set_qthresh(struct nflog_g_handle *gh, u_int32_t qthresh) + * + * \return -1 in case of error and errno is explicity set. + */ +-int nflog_set_nlbufsiz(struct nflog_g_handle *gh, u_int32_t nlbufsiz) ++int nflog_set_nlbufsiz(struct nflog_g_handle *gh, uint32_t nlbufsiz) + { + union { +- char buf[NFNL_HEADER_LEN+NFA_LENGTH(sizeof(u_int32_t))]; ++ char buf[NFNL_HEADER_LEN+NFA_LENGTH(sizeof(uint32_t))]; + struct nlmsghdr nmh; + } u; + int status; +@@ -581,10 +581,10 @@ int nflog_set_nlbufsiz(struct nflog_g_handle *gh, u_int32_t nlbufsiz) + * + * \return -1 in case of error and errno is explicity set. + */ +-int nflog_set_flags(struct nflog_g_handle *gh, u_int16_t flags) ++int nflog_set_flags(struct nflog_g_handle *gh, uint16_t flags) + { + union { +- char buf[NFNL_HEADER_LEN+NFA_LENGTH(sizeof(u_int16_t))]; ++ char buf[NFNL_HEADER_LEN+NFA_LENGTH(sizeof(uint16_t))]; + struct nlmsghdr nmh; + } u; + +@@ -616,9 +616,9 @@ int nflog_set_flags(struct nflog_g_handle *gh, u_int16_t flags) + * The nfulnl_msg_packet_hdr structure is defined in libnetfilter_log.h as: + *\verbatim + struct nfulnl_msg_packet_hdr { +- u_int16_t hw_protocol; // hw protocol (network order) +- u_int8_t hook; // netfilter hook +- u_int8_t _pad; ++ uint16_t hw_protocol; // hw protocol (network order) ++ uint8_t hook; // netfilter hook ++ uint8_t _pad; + } __attribute__ ((packed)); + \endverbatim + */ +@@ -634,9 +634,9 @@ struct nfulnl_msg_packet_hdr *nflog_get_msg_packet_hdr(struct nflog_data *nfad) + * + * \return the hardware link layer type. + */ +-u_int16_t nflog_get_hwtype(struct nflog_data *nfad) ++uint16_t nflog_get_hwtype(struct nflog_data *nfad) + { +- return ntohs(nfnl_get_data(nfad->nfa, NFULA_HWTYPE, u_int16_t)); ++ return ntohs(nfnl_get_data(nfad->nfa, NFULA_HWTYPE, uint16_t)); + } + + /** +@@ -645,9 +645,9 @@ u_int16_t nflog_get_hwtype(struct nflog_data *nfad) + * + * \return the size of the hardware link layer header + */ +-u_int16_t nflog_get_msg_packet_hwhdrlen(struct nflog_data *nfad) ++uint16_t nflog_get_msg_packet_hwhdrlen(struct nflog_data *nfad) + { +- return ntohs(nfnl_get_data(nfad->nfa, NFULA_HWLEN, u_int16_t)); ++ return ntohs(nfnl_get_data(nfad->nfa, NFULA_HWLEN, uint16_t)); + } + + /** +@@ -667,9 +667,9 @@ char *nflog_get_msg_packet_hwhdr(struct nflog_data *nfad) + * + * \return the netfilter mark currently assigned to the logged packet. + */ +-u_int32_t nflog_get_nfmark(struct nflog_data *nfad) ++uint32_t nflog_get_nfmark(struct nflog_data *nfad) + { +- return ntohl(nfnl_get_data(nfad->nfa, NFULA_MARK, u_int32_t)); ++ return ntohl(nfnl_get_data(nfad->nfa, NFULA_MARK, uint32_t)); + } + + /** +@@ -707,9 +707,9 @@ int nflog_get_timestamp(struct nflog_data *nfad, struct timeval *tv) + * \warning all nflog_get_dev() functions return 0 if not set, since linux + * only allows ifindex >= 1, see net/core/dev.c:2600 (in 2.6.13.1) + */ +-u_int32_t nflog_get_indev(struct nflog_data *nfad) ++uint32_t nflog_get_indev(struct nflog_data *nfad) + { +- return ntohl(nfnl_get_data(nfad->nfa, NFULA_IFINDEX_INDEV, u_int32_t)); ++ return ntohl(nfnl_get_data(nfad->nfa, NFULA_IFINDEX_INDEV, uint32_t)); + } + + /** +@@ -720,9 +720,9 @@ u_int32_t nflog_get_indev(struct nflog_data *nfad) + * If the returned index is 0, the packet was locally generated or the + * physical input interface is no longer known (ie. POSTROUTING?). + */ +-u_int32_t nflog_get_physindev(struct nflog_data *nfad) ++uint32_t nflog_get_physindev(struct nflog_data *nfad) + { +- return ntohl(nfnl_get_data(nfad->nfa, NFULA_IFINDEX_PHYSINDEV, u_int32_t)); ++ return ntohl(nfnl_get_data(nfad->nfa, NFULA_IFINDEX_PHYSINDEV, uint32_t)); + } + + /** +@@ -733,9 +733,9 @@ u_int32_t nflog_get_physindev(struct nflog_data *nfad) + * returned index is 0, the packet is destined for localhost or the output + * interface is not yet known (ie. PREROUTING?). + */ +-u_int32_t nflog_get_outdev(struct nflog_data *nfad) ++uint32_t nflog_get_outdev(struct nflog_data *nfad) + { +- return ntohl(nfnl_get_data(nfad->nfa, NFULA_IFINDEX_OUTDEV, u_int32_t)); ++ return ntohl(nfnl_get_data(nfad->nfa, NFULA_IFINDEX_OUTDEV, uint32_t)); + } + + /** +@@ -749,9 +749,9 @@ u_int32_t nflog_get_outdev(struct nflog_data *nfad) + * \return The index of physical interface that the packet output will be + * routed out. + */ +-u_int32_t nflog_get_physoutdev(struct nflog_data *nfad) ++uint32_t nflog_get_physoutdev(struct nflog_data *nfad) + { +- return ntohl(nfnl_get_data(nfad->nfa, NFULA_IFINDEX_PHYSOUTDEV, u_int32_t)); ++ return ntohl(nfnl_get_data(nfad->nfa, NFULA_IFINDEX_PHYSOUTDEV, uint32_t)); + } + + /** +@@ -767,9 +767,9 @@ u_int32_t nflog_get_physoutdev(struct nflog_data *nfad) + * The nfulnl_msg_packet_hw structure is defined in libnetfilter_log.h as: + * \verbatim + struct nfulnl_msg_packet_hw { +- u_int16_t hw_addrlen; +- u_int16_t _pad; +- u_int8_t hw_addr[8]; ++ uint16_t hw_addrlen; ++ uint16_t _pad; ++ uint8_t hw_addr[8]; + } __attribute__ ((packed)); + \endverbatim + */ +@@ -817,12 +817,12 @@ char *nflog_get_prefix(struct nflog_data *nfad) + * + * \return the UID of the user that has genered the packet, if any. + */ +-int nflog_get_uid(struct nflog_data *nfad, u_int32_t *uid) ++int nflog_get_uid(struct nflog_data *nfad, uint32_t *uid) + { + if (!nfnl_attr_present(nfad->nfa, NFULA_UID)) + return -1; + +- *uid = ntohl(nfnl_get_data(nfad->nfa, NFULA_UID, u_int32_t)); ++ *uid = ntohl(nfnl_get_data(nfad->nfa, NFULA_UID, uint32_t)); + return 0; + } + +@@ -832,12 +832,12 @@ int nflog_get_uid(struct nflog_data *nfad, u_int32_t *uid) + * + * \return the GID of the user that has genered the packet, if any. + */ +-int nflog_get_gid(struct nflog_data *nfad, u_int32_t *gid) ++int nflog_get_gid(struct nflog_data *nfad, uint32_t *gid) + { + if (!nfnl_attr_present(nfad->nfa, NFULA_GID)) + return -1; + +- *gid = ntohl(nfnl_get_data(nfad->nfa, NFULA_GID, u_int32_t)); ++ *gid = ntohl(nfnl_get_data(nfad->nfa, NFULA_GID, uint32_t)); + return 0; + } + +@@ -849,12 +849,12 @@ int nflog_get_gid(struct nflog_data *nfad, u_int32_t *gid) + * + * \return the local nflog sequence number. + */ +-int nflog_get_seq(struct nflog_data *nfad, u_int32_t *seq) ++int nflog_get_seq(struct nflog_data *nfad, uint32_t *seq) + { + if (!nfnl_attr_present(nfad->nfa, NFULA_SEQ)) + return -1; + +- *seq = ntohl(nfnl_get_data(nfad->nfa, NFULA_SEQ, u_int32_t)); ++ *seq = ntohl(nfnl_get_data(nfad->nfa, NFULA_SEQ, uint32_t)); + return 0; + } + +@@ -866,12 +866,12 @@ int nflog_get_seq(struct nflog_data *nfad, u_int32_t *seq) + * + * \return the global nflog sequence number. + */ +-int nflog_get_seq_global(struct nflog_data *nfad, u_int32_t *seq) ++int nflog_get_seq_global(struct nflog_data *nfad, uint32_t *seq) + { + if (!nfnl_attr_present(nfad->nfa, NFULA_SEQ_GLOBAL)) + return -1; + +- *seq = ntohl(nfnl_get_data(nfad->nfa, NFULA_SEQ_GLOBAL, u_int32_t)); ++ *seq = ntohl(nfnl_get_data(nfad->nfa, NFULA_SEQ_GLOBAL, uint32_t)); + return 0; + } + +@@ -923,7 +923,7 @@ int nflog_snprintf_xml(char *buf, size_t rem, struct nflog_data *tb, int flags) + { + struct nfulnl_msg_packet_hdr *ph; + struct nfulnl_msg_packet_hw *hwph; +- u_int32_t mark, ifi; ++ uint32_t mark, ifi; + int size, offset = 0, len = 0, ret; + char *data; + +diff --git a/utils/nfulnl_test.c b/utils/nfulnl_test.c +index ae5da79..dd3091b 100644 +--- a/utils/nfulnl_test.c ++++ b/utils/nfulnl_test.c +@@ -9,9 +9,9 @@ + static int print_pkt(struct nflog_data *ldata) + { + struct nfulnl_msg_packet_hdr *ph = nflog_get_msg_packet_hdr(ldata); +- u_int32_t mark = nflog_get_nfmark(ldata); +- u_int32_t indev = nflog_get_indev(ldata); +- u_int32_t outdev = nflog_get_outdev(ldata); ++ uint32_t mark = nflog_get_nfmark(ldata); ++ uint32_t indev = nflog_get_indev(ldata); ++ uint32_t outdev = nflog_get_outdev(ldata); + char *prefix = nflog_get_prefix(ldata); + char *payload; + int payload_len = nflog_get_payload(ldata, &payload); +-- +cgit v1.2.3 + diff --git a/package/libnetfilter_log/0004-include-Sync-with-current-kernel-headers.patch b/package/libnetfilter_log/0004-include-Sync-with-current-kernel-headers.patch new file mode 100644 index 00000000..bb62411e --- /dev/null +++ b/package/libnetfilter_log/0004-include-Sync-with-current-kernel-headers.patch @@ -0,0 +1,112 @@ +From 614d8b6cfb969c6102ef320de22b1eb199efce2a Mon Sep 17 00:00:00 2001 +From: Felix Janda +Date: Sat, 16 May 2015 13:37:53 +0200 +Subject: include: Sync with current kernel headers + +Signed-off-by: Felix Janda +Signed-off-by: Pablo Neira Ayuso + +[Retrieved from: +https://git.netfilter.org/libnetfilter_log/commit/?id=614d8b6cfb969c6102ef320de22b1eb199efce2a] +Signed-off-by: Fabrice Fontaine +--- + include/libnetfilter_log/linux_nfnetlink_log.h | 51 +++++++++++++------------- + 1 file changed, 25 insertions(+), 26 deletions(-) + +diff --git a/include/libnetfilter_log/linux_nfnetlink_log.h b/include/libnetfilter_log/linux_nfnetlink_log.h +index 4c802c8..9f38277 100644 +--- a/include/libnetfilter_log/linux_nfnetlink_log.h ++++ b/include/libnetfilter_log/linux_nfnetlink_log.h +@@ -20,33 +20,31 @@ enum nfulnl_msg_types { + }; + + struct nfulnl_msg_packet_hdr { +- u_int16_t hw_protocol; /* hw protocol (network order) */ +- u_int8_t hook; /* netfilter hook */ +- u_int8_t _pad; +-} __attribute__ ((packed)); ++ __be16 hw_protocol; /* hw protocol (network order) */ ++ __u8 hook; /* netfilter hook */ ++ __u8 _pad; ++}; + + struct nfulnl_msg_packet_hw { +- u_int16_t hw_addrlen; +- u_int16_t _pad; +- u_int8_t hw_addr[8]; +-} __attribute__ ((packed)); ++ __be16 hw_addrlen; ++ __u16 _pad; ++ __u8 hw_addr[8]; ++}; + + struct nfulnl_msg_packet_timestamp { +- aligned_u64 sec; +- aligned_u64 usec; +-} __attribute__ ((packed)); +- +-#define NFULNL_PREFIXLEN 30 /* just like old log target */ ++ __aligned_be64 sec; ++ __aligned_be64 usec; ++}; + + enum nfulnl_attr_type { + NFULA_UNSPEC, + NFULA_PACKET_HDR, +- NFULA_MARK, /* u_int32_t nfmark */ ++ NFULA_MARK, /* __u32 nfmark */ + NFULA_TIMESTAMP, /* nfulnl_msg_packet_timestamp */ +- NFULA_IFINDEX_INDEV, /* u_int32_t ifindex */ +- NFULA_IFINDEX_OUTDEV, /* u_int32_t ifindex */ +- NFULA_IFINDEX_PHYSINDEV, /* u_int32_t ifindex */ +- NFULA_IFINDEX_PHYSOUTDEV, /* u_int32_t ifindex */ ++ NFULA_IFINDEX_INDEV, /* __u32 ifindex */ ++ NFULA_IFINDEX_OUTDEV, /* __u32 ifindex */ ++ NFULA_IFINDEX_PHYSINDEV, /* __u32 ifindex */ ++ NFULA_IFINDEX_PHYSOUTDEV, /* __u32 ifindex */ + NFULA_HWADDR, /* nfulnl_msg_packet_hw */ + NFULA_PAYLOAD, /* opaque data payload */ + NFULA_PREFIX, /* string prefix */ +@@ -71,23 +69,23 @@ enum nfulnl_msg_config_cmds { + }; + + struct nfulnl_msg_config_cmd { +- u_int8_t command; /* nfulnl_msg_config_cmds */ ++ __u8 command; /* nfulnl_msg_config_cmds */ + } __attribute__ ((packed)); + + struct nfulnl_msg_config_mode { +- u_int32_t copy_range; +- u_int8_t copy_mode; +- u_int8_t _pad; ++ __be32 copy_range; ++ __u8 copy_mode; ++ __u8 _pad; + } __attribute__ ((packed)); + + enum nfulnl_attr_config { + NFULA_CFG_UNSPEC, + NFULA_CFG_CMD, /* nfulnl_msg_config_cmd */ + NFULA_CFG_MODE, /* nfulnl_msg_config_mode */ +- NFULA_CFG_NLBUFSIZ, /* u_int32_t buffer size */ +- NFULA_CFG_TIMEOUT, /* u_int32_t in 1/100 s */ +- NFULA_CFG_QTHRESH, /* u_int32_t */ +- NFULA_CFG_FLAGS, /* u_int16_t */ ++ NFULA_CFG_NLBUFSIZ, /* __u32 buffer size */ ++ NFULA_CFG_TIMEOUT, /* __u32 in 1/100 s */ ++ NFULA_CFG_QTHRESH, /* __u32 */ ++ NFULA_CFG_FLAGS, /* __u16 */ + __NFULA_CFG_MAX + }; + #define NFULA_CFG_MAX (__NFULA_CFG_MAX -1) +@@ -95,6 +93,7 @@ enum nfulnl_attr_config { + #define NFULNL_COPY_NONE 0x00 + #define NFULNL_COPY_META 0x01 + #define NFULNL_COPY_PACKET 0x02 ++/* 0xff is reserved, don't use it for new copy modes. */ + + #define NFULNL_CFG_F_SEQ 0x0001 + #define NFULNL_CFG_F_SEQ_GLOBAL 0x0002 +-- +cgit v1.2.3 + diff --git a/package/libnetfilter_log/Config.in b/package/libnetfilter_log/Config.in new file mode 100644 index 00000000..927cd0aa --- /dev/null +++ b/package/libnetfilter_log/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBNETFILTER_LOG + bool "libnetfilter_log" + select BR2_PACKAGE_LIBNFNETLINK + help + libnetfilter_log is a userspace library providing interface + to packets that have been logged by the kernel packet filter. + + http://www.netfilter.org/projects/libnetfilter_log/ diff --git a/package/libnetfilter_log/libnetfilter_log.hash b/package/libnetfilter_log/libnetfilter_log.hash new file mode 100644 index 00000000..292538db --- /dev/null +++ b/package/libnetfilter_log/libnetfilter_log.hash @@ -0,0 +1,6 @@ +# From ftp://ftp.netfilter.org/pub/libnetfilter_log/libnetfilter_log-1.0.1.tar.bz2.{md5sum,sha1sum} +md5 2a4bb0654ae675a52d2e8d1c06090b94 libnetfilter_log-1.0.1.tar.bz2 +sha1 0b95bcb1ad15eea906fa3607cd6c2290bd48d5bd libnetfilter_log-1.0.1.tar.bz2 + +# Hash for license file: +sha256 91df39d1816bfb17a4dda2d3d2c83b1f6f2d38d53e53e41e8f97ad5ac46a0cad COPYING diff --git a/package/libnetfilter_log/libnetfilter_log.mk b/package/libnetfilter_log/libnetfilter_log.mk new file mode 100644 index 00000000..bcf755e0 --- /dev/null +++ b/package/libnetfilter_log/libnetfilter_log.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libnetfilter_log +# +################################################################################ + +LIBNETFILTER_LOG_VERSION = 1.0.1 +LIBNETFILTER_LOG_SOURCE = libnetfilter_log-$(LIBNETFILTER_LOG_VERSION).tar.bz2 +LIBNETFILTER_LOG_SITE = http://www.netfilter.org/projects/libnetfilter_log/files +LIBNETFILTER_LOG_INSTALL_STAGING = YES +LIBNETFILTER_LOG_DEPENDENCIES = host-pkgconf libnfnetlink +LIBNETFILTER_LOG_AUTORECONF = YES +LIBNETFILTER_LOG_LICENSE = GPL-2.0+ +LIBNETFILTER_LOG_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/libnetfilter_queue/Config.in b/package/libnetfilter_queue/Config.in new file mode 100644 index 00000000..e93e8ea3 --- /dev/null +++ b/package/libnetfilter_queue/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LIBNETFILTER_QUEUE + bool "libnetfilter_queue" + select BR2_PACKAGE_LIBNFNETLINK + select BR2_PACKAGE_LIBMNL + help + libnetfilter_queue is the userspace library that provides + the programming interface to the fine-grain + connection tracking timeout infrastructure. + + http://www.netfilter.org/projects/libnetfilter_queue/ diff --git a/package/libnetfilter_queue/libnetfilter_queue.hash b/package/libnetfilter_queue/libnetfilter_queue.hash new file mode 100644 index 00000000..098205c9 --- /dev/null +++ b/package/libnetfilter_queue/libnetfilter_queue.hash @@ -0,0 +1,5 @@ +# From http://netfilter.org/pub/libnetfilter_queue/libnetfilter_queue-1.0.5.tar.bz2.sha256sum +sha256 f9ff3c11305d6e03d81405957bdc11aea18e0d315c3e3f48da53a24ba251b9f5 libnetfilter_queue-1.0.5.tar.bz2 + +# Hash for license file: +sha256 91df39d1816bfb17a4dda2d3d2c83b1f6f2d38d53e53e41e8f97ad5ac46a0cad COPYING diff --git a/package/libnetfilter_queue/libnetfilter_queue.mk b/package/libnetfilter_queue/libnetfilter_queue.mk new file mode 100644 index 00000000..6cd35bae --- /dev/null +++ b/package/libnetfilter_queue/libnetfilter_queue.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# libnetfilter_queue +# +################################################################################ + +LIBNETFILTER_QUEUE_VERSION = 1.0.5 +LIBNETFILTER_QUEUE_SOURCE = libnetfilter_queue-$(LIBNETFILTER_QUEUE_VERSION).tar.bz2 +LIBNETFILTER_QUEUE_SITE = http://www.netfilter.org/projects/libnetfilter_queue/files +LIBNETFILTER_QUEUE_INSTALL_STAGING = YES +LIBNETFILTER_QUEUE_DEPENDENCIES = host-pkgconf libnfnetlink libmnl +LIBNETFILTER_QUEUE_AUTORECONF = YES +LIBNETFILTER_QUEUE_LICENSE = GPL-2.0+ +LIBNETFILTER_QUEUE_LICENSE_FILES = COPYING +LIBNETFILTER_QUEUE_CPE_ID_VENDOR = netfilter + +$(eval $(autotools-package)) diff --git a/package/libnfc/0001-autotools-make-example-build-optional.patch b/package/libnfc/0001-autotools-make-example-build-optional.patch new file mode 100644 index 00000000..ce01de74 --- /dev/null +++ b/package/libnfc/0001-autotools-make-example-build-optional.patch @@ -0,0 +1,69 @@ +From 874d9605aa9cd028aed149c2dd1bb410856477fb Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 21 Jun 2020 23:28:37 +0200 +Subject: [PATCH] autotools: make example build optional + +This patch makes example build optional for autotools build system. + +In order to keep the former behavior, example build is enabled by default. + +Signed-off-by: Samuel Martin +[Retrieved (and slightly updated to remove CMakeLists.txt) from: +https://git.buildroot.net/buildroot/tree/package/libnfc/0001-build-systems-make-example-build-optional.patch] +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/nfc-tools/libnfc/commit/874d9605aa9cd028aed149c2dd1bb410856477fb] +--- + Makefile.am | 8 +++++++- + configure.ac | 11 +++++++++++ + 2 files changed, 18 insertions(+), 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index d2f6fc8e..516ebee2 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -2,7 +2,13 @@ ACLOCAL_AMFLAGS = -I m4 + + AM_CFLAGS = $(LIBNFC_CFLAGS) + +-SUBDIRS = libnfc utils examples include contrib cmake test ++SUBDIRS = libnfc utils ++ ++if EXAMPLE_ENABLED ++SUBDIRS += examples ++endif ++ ++SUBDIRS += include contrib cmake test + + pkgconfigdir = $(libdir)/pkgconfig + pkgconfig_DATA = libnfc.pc +diff --git a/configure.ac b/configure.ac +index 280a6d08..46b65d33 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -157,6 +157,14 @@ then + fi + AM_CONDITIONAL(DOC_ENABLED, [test x"$enable_doc" = xyes]) + ++# Example build (default: yes) ++AC_ARG_ENABLE([example],AS_HELP_STRING([--enable-example],[Enable example build.]),[enable_example=$enableval],[enable_example="yes"]) ++ ++AC_MSG_CHECKING(for example build) ++AC_MSG_RESULT($enable_example) ++ ++AM_CONDITIONAL(EXAMPLE_ENABLED, [test x"$enable_example" = xyes]) ++ + # Dependencies + PKG_CONFIG_REQUIRES="" + +@@ -175,7 +183,10 @@ if test x$ac_cv_with_cutter = xyes -a x$ac_cv_use_cutter = xno; then + fi + AM_CONDITIONAL([WITH_CUTTER], [test "$ac_cv_use_cutter" != "no"]) + ++if test x"$enable_example" = "xyes" ++then + AC_CHECK_READLINE ++fi + + # Help us to write great code ;-) + CFLAGS="$CFLAGS -Wall -pedantic -Wextra" diff --git a/package/libnfc/Config.in b/package/libnfc/Config.in new file mode 100644 index 00000000..ead61e45 --- /dev/null +++ b/package/libnfc/Config.in @@ -0,0 +1,81 @@ +config BR2_PACKAGE_LIBNFC + bool "libnfc" + help + Public platform independent Near Field Communication (NFC) + library. + + http://www.libnfc.org/ + +if BR2_PACKAGE_LIBNFC + +config BR2_PACKAGE_LIBNFC_ACR122_PCSC + bool "acr122_pcsc driver" + depends on BR2_TOOLCHAIN_HAS_THREADS # pcsc-lite + depends on BR2_USE_MMU # pcsc-lite + depends on !BR2_STATIC_LIBS # pcsc-lite + select BR2_PACKAGE_PCSC_LITE + help + support for acr112_pcsc driver + +comment "acr122_pcsc driver needs a toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS + +config BR2_PACKAGE_LIBNFC_ACR122_USB + bool "acr122_usb driver" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_LIBUSB_COMPAT + help + support for acr122_usb driver + +comment "acr122_usb driver needs a toolchain w/ threads, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + +config BR2_PACKAGE_LIBNFC_ACR122S + bool "acr122s driver" + help + support for acr122s driver + +config BR2_PACKAGE_LIBNFC_ARYGON + bool "arygon driver" + default y + help + support for arygon driver + +config BR2_PACKAGE_LIBNFC_PN532_I2C + bool "pn532_i2c driver" + help + support for pn532_i2c driver + +config BR2_PACKAGE_LIBNFC_PN532_SPI + bool "pn532_spi driver" + help + support for pn532_spi driver + +config BR2_PACKAGE_LIBNFC_PN532_UART + bool "pn532_uart driver" + help + support for pn532_uart driver + +config BR2_PACKAGE_LIBNFC_PN53X_USB + bool "pn53x_usb driver" + default y + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_LIBUSB_COMPAT + help + support for pn53x_usb driver + +comment "pn53x_usb driver needs a toolchain w/ threads, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + +config BR2_PACKAGE_LIBNFC_EXAMPLES + bool "build libnfc examples" + select BR2_PACKAGE_READLINE + +endif diff --git a/package/libnfc/libnfc.hash b/package/libnfc/libnfc.hash new file mode 100644 index 00000000..8a346cbf --- /dev/null +++ b/package/libnfc/libnfc.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 6d9ad31c86408711f0a60f05b1933101c7497683c2e0d8917d1611a3feba3dd5 libnfc-1.8.0.tar.bz2 +sha256 9ccf26cfe845e0eb8bb58053e47366e7ab6b697ae010f7650978d4b71b7d1fc1 COPYING diff --git a/package/libnfc/libnfc.mk b/package/libnfc/libnfc.mk new file mode 100644 index 00000000..19715633 --- /dev/null +++ b/package/libnfc/libnfc.mk @@ -0,0 +1,63 @@ +################################################################################ +# +# libnfc +# +################################################################################ + +LIBNFC_VERSION = 1.8.0 +LIBNFC_SOURCE = libnfc-$(LIBNFC_VERSION).tar.bz2 +LIBNFC_SITE = https://github.com/nfc-tools/libnfc/releases/download/libnfc-$(LIBNFC_VERSION) +LIBNFC_LICENSE = LGPL-3.0+ +LIBNFC_LICENSE_FILES = COPYING +LIBNFC_AUTORECONF = YES +LIBNFC_INSTALL_STAGING = YES + +LIBNFC_DEPENDENCIES = host-pkgconf + +# N.B. The acr122 driver requires pcsc-lite. +ifeq ($(BR2_PACKAGE_LIBNFC_ACR122_PCSC),y) +LIBNFC_DRIVER_LIST += acr122_pcsc +LIBNFC_DEPENDENCIES += pcsc-lite +endif + +ifeq ($(BR2_PACKAGE_LIBNFC_ACR122_USB),y) +LIBNFC_DRIVER_LIST += acr122_usb +LIBNFC_DEPENDENCIES += libusb libusb-compat +endif + +ifeq ($(BR2_PACKAGE_LIBNFC_ACR122S),y) +LIBNFC_DRIVER_LIST += acr122s +endif + +ifeq ($(BR2_PACKAGE_LIBNFC_ARYGON),y) +LIBNFC_DRIVER_LIST += arygon +endif + +ifeq ($(BR2_PACKAGE_LIBNFC_PN532_I2C),y) +LIBNFC_DRIVER_LIST += pn532_i2c +endif + +ifeq ($(BR2_PACKAGE_LIBNFC_PN532_SPI),y) +LIBNFC_DRIVER_LIST += pn532_spi +endif + +ifeq ($(BR2_PACKAGE_LIBNFC_PN532_UART),y) +LIBNFC_DRIVER_LIST += pn532_uart +endif + +ifeq ($(BR2_PACKAGE_LIBNFC_PN53X_USB),y) +LIBNFC_DRIVER_LIST += pn53x_usb +LIBNFC_DEPENDENCIES += libusb libusb-compat +endif + +LIBNFC_CONF_OPTS = \ + --with-drivers=$(subst $(space),$(comma),$(strip $(LIBNFC_DRIVER_LIST))) + +ifeq ($(BR2_PACKAGE_LIBNFC_EXAMPLES),y) +LIBNFC_CONF_OPTS += --enable-example +LIBNFC_DEPENDENCIES += readline +else +LIBNFC_CONF_OPTS += --disable-example +endif + +$(eval $(autotools-package)) diff --git a/package/libnfnetlink/0001-uclinux.patch b/package/libnfnetlink/0001-uclinux.patch new file mode 100644 index 00000000..b1520128 --- /dev/null +++ b/package/libnfnetlink/0001-uclinux.patch @@ -0,0 +1,26 @@ +From 8e5a9d8f32c9646d01d8c84e979892dfd28a7f7c Mon Sep 17 00:00:00 2001 +From: Gustavo Zacarias +Date: Tue, 10 Sep 2013 15:35:22 -0300 +Subject: [PATCH] configure: uclinux is also linux + +Signed-off-by: Gustavo Zacarias +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 0926a1c..b979772 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -18,7 +18,7 @@ AC_DISABLE_STATIC + AM_PROG_LIBTOOL + + case "$host" in +-*-*-linux*) ;; ++*-*-linux* | *-*-uclinux*) ;; + *) AC_MSG_ERROR([Linux only, dude!]);; + esac + +-- +1.8.1.5 + diff --git a/package/libnfnetlink/0002-include-Sync-with-kernel-headers.patch b/package/libnfnetlink/0002-include-Sync-with-kernel-headers.patch new file mode 100644 index 00000000..f9e9c2e2 --- /dev/null +++ b/package/libnfnetlink/0002-include-Sync-with-kernel-headers.patch @@ -0,0 +1,114 @@ +From 7a1a07c0028a1c88cd7716a058697c552a563b24 Mon Sep 17 00:00:00 2001 +From: Felix Janda +Date: Sat, 16 May 2015 14:49:07 +0200 +Subject: include: Sync with kernel headers + +Signed-off-by: Felix Janda +Signed-off-by: Pablo Neira Ayuso + +[Retrieved from: +https://git.netfilter.org/libnfnetlink/commit/?id=7a1a07c0028a1c88cd7716a058697c552a563b24] +Signed-off-by: Fabrice Fontaine +--- + include/libnfnetlink/linux_nfnetlink.h | 44 ++++----------------------- + include/libnfnetlink/linux_nfnetlink_compat.h | 12 ++++---- + 2 files changed, 12 insertions(+), 44 deletions(-) + +diff --git a/include/libnfnetlink/linux_nfnetlink.h b/include/libnfnetlink/linux_nfnetlink.h +index 76a8550..44a38d6 100644 +--- a/include/libnfnetlink/linux_nfnetlink.h ++++ b/include/libnfnetlink/linux_nfnetlink.h +@@ -25,9 +25,9 @@ enum nfnetlink_groups { + /* General form of address family dependent message. + */ + struct nfgenmsg { +- u_int8_t nfgen_family; /* AF_xxx */ +- u_int8_t version; /* nfnetlink version */ +- u_int16_t res_id; /* resource id */ ++ __u8 nfgen_family; /* AF_xxx */ ++ __u8 version; /* nfnetlink version */ ++ __be16 res_id; /* resource id */ + }; + + #define NFNETLINK_V0 0 +@@ -46,40 +46,8 @@ struct nfgenmsg { + #define NFNL_SUBSYS_CTNETLINK_EXP 2 + #define NFNL_SUBSYS_QUEUE 3 + #define NFNL_SUBSYS_ULOG 4 +-#define NFNL_SUBSYS_COUNT 5 ++#define NFNL_SUBSYS_OSF 5 ++#define NFNL_SUBSYS_IPSET 6 ++#define NFNL_SUBSYS_COUNT 7 + +-#ifdef __KERNEL__ +- +-#include +-#include +-#include +- +-struct nfnl_callback +-{ +- int (*call)(struct sock *nl, struct sk_buff *skb, +- struct nlmsghdr *nlh, struct nlattr *cda[]); +- const struct nla_policy *policy; /* netlink attribute policy */ +- const u_int16_t attr_count; /* number of nlattr's */ +-}; +- +-struct nfnetlink_subsystem +-{ +- const char *name; +- __u8 subsys_id; /* nfnetlink subsystem ID */ +- __u8 cb_count; /* number of callbacks */ +- const struct nfnl_callback *cb; /* callback for individual types */ +-}; +- +-extern int nfnetlink_subsys_register(const struct nfnetlink_subsystem *n); +-extern int nfnetlink_subsys_unregister(const struct nfnetlink_subsystem *n); +- +-extern int nfnetlink_has_listeners(unsigned int group); +-extern int nfnetlink_send(struct sk_buff *skb, u32 pid, unsigned group, +- int echo); +-extern int nfnetlink_unicast(struct sk_buff *skb, u_int32_t pid, int flags); +- +-#define MODULE_ALIAS_NFNL_SUBSYS(subsys) \ +- MODULE_ALIAS("nfnetlink-subsys-" __stringify(subsys)) +- +-#endif /* __KERNEL__ */ + #endif /* _NFNETLINK_H */ +diff --git a/include/libnfnetlink/linux_nfnetlink_compat.h b/include/libnfnetlink/linux_nfnetlink_compat.h +index e145176..74b9e55 100644 +--- a/include/libnfnetlink/linux_nfnetlink_compat.h ++++ b/include/libnfnetlink/linux_nfnetlink_compat.h +@@ -1,6 +1,8 @@ + #ifndef _NFNETLINK_COMPAT_H + #define _NFNETLINK_COMPAT_H +-#ifndef __KERNEL__ ++ ++#include ++ + /* Old nfnetlink macros for userspace */ + + /* nfnetlink groups: Up to 32 maximum */ +@@ -18,10 +20,9 @@ + * ! nfnetlink use the same attributes methods. - J. Schulist. + */ + +-struct nfattr +-{ +- u_int16_t nfa_len; +- u_int16_t nfa_type; /* we use 15 bits for the type, and the highest ++struct nfattr { ++ __u16 nfa_len; ++ __u16 nfa_type; /* we use 15 bits for the type, and the highest + * bit to indicate whether the payload is nested */ + }; + +@@ -57,5 +58,4 @@ struct nfattr + + NLMSG_ALIGN(sizeof(struct nfgenmsg)))) + #define NFM_PAYLOAD(n) NLMSG_PAYLOAD(n, sizeof(struct nfgenmsg)) + +-#endif /* ! __KERNEL__ */ + #endif /* _NFNETLINK_COMPAT_H */ +-- +cgit v1.2.3 + diff --git a/package/libnfnetlink/0002-musl.patch b/package/libnfnetlink/0002-musl.patch new file mode 100644 index 00000000..bee7898a --- /dev/null +++ b/package/libnfnetlink/0002-musl.patch @@ -0,0 +1,32 @@ +Include to get the u_int* definitions + +This is needed to fix the build with the musl C library, and this +patch comes from +http://git.alpinelinux.org/cgit/aports/plain/main/libnfnetlink/musl-fix-includes.patch. + +It will no longer be needed with upcoming upstream releases of +libnfnetlink, since they have switched to use the types +instead. However this change was too invasive to backport. + +Signed-off-by: Thomas Petazzoni + +--- libnfnetlink-1.0.1.orig/include/libnfnetlink/linux_nfnetlink.h ++++ libnfnetlink-1.0.1/include/libnfnetlink/linux_nfnetlink.h +@@ -1,6 +1,6 @@ + #ifndef _NFNETLINK_H + #define _NFNETLINK_H +-#include ++#include + #include + + enum nfnetlink_groups { +--- libnfnetlink-1.0.1.orig/include/libnfnetlink/libnfnetlink.h ++++ libnfnetlink-1.0.1/include/libnfnetlink/libnfnetlink.h +@@ -15,6 +15,7 @@ + #define aligned_u64 unsigned long long __attribute__((aligned(8))) + #endif + ++#include + #include /* for sa_family_t */ + #include + #include diff --git a/package/libnfnetlink/Config.in b/package/libnfnetlink/Config.in new file mode 100644 index 00000000..fa247c59 --- /dev/null +++ b/package/libnfnetlink/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBNFNETLINK + bool "libnfnetlink" + help + libnfnetlink is the low-level library for netfilter related + kernel/userspace communication. + It provides a generic messaging infrastructure for in-kernel + netfilter subsystems (such as nfnetlink_log, nfnetlink_queue, + nfnetlink_conntrack) and their respective users + and/or management tools in userspace. + + http://www.netfilter.org/projects/libnfnetlink/ diff --git a/package/libnfnetlink/libnfnetlink.hash b/package/libnfnetlink/libnfnetlink.hash new file mode 100644 index 00000000..3392d239 --- /dev/null +++ b/package/libnfnetlink/libnfnetlink.hash @@ -0,0 +1,6 @@ +# From ftp://ftp.netfilter.org/pub/libnfnetlink/libnfnetlink-1.0.1.tar.bz2.{md5sum,sha1sum} +md5 98927583d2016a9fb1936fed992e2c5e libnfnetlink-1.0.1.tar.bz2 +sha1 27ae2dfbd976e28cb7a417f9e946c901f512dd9a libnfnetlink-1.0.1.tar.bz2 + +# Hash for license file: +sha256 91df39d1816bfb17a4dda2d3d2c83b1f6f2d38d53e53e41e8f97ad5ac46a0cad COPYING diff --git a/package/libnfnetlink/libnfnetlink.mk b/package/libnfnetlink/libnfnetlink.mk new file mode 100644 index 00000000..a5ad47b8 --- /dev/null +++ b/package/libnfnetlink/libnfnetlink.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libnfnetlink +# +################################################################################ + +LIBNFNETLINK_VERSION = 1.0.1 +LIBNFNETLINK_SOURCE = libnfnetlink-$(LIBNFNETLINK_VERSION).tar.bz2 +LIBNFNETLINK_SITE = http://www.netfilter.org/projects/libnfnetlink/files +LIBNFNETLINK_AUTORECONF = YES +LIBNFNETLINK_INSTALL_STAGING = YES +LIBNFNETLINK_LICENSE = GPL-2.0 +LIBNFNETLINK_LICENSE_FILES = COPYING +LIBNFNETLINK_CPE_ID_VENDOR = netfilter + +$(eval $(autotools-package)) diff --git a/package/libnfs/0001-Fix-include-sys-time.h.patch b/package/libnfs/0001-Fix-include-sys-time.h.patch new file mode 100644 index 00000000..15b28167 --- /dev/null +++ b/package/libnfs/0001-Fix-include-sys-time.h.patch @@ -0,0 +1,41 @@ +From 9df082012cba1dc32d83e5e8b0bdc0892f250058 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=B6rg=20Krause?= +Date: Mon, 5 Nov 2018 00:43:07 +0100 +Subject: [PATCH] Fix include sys/time.h +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +POSIX says `struct timeval` is defined if is included. + +Instead of the mess that is currently done based on the system on which +the stuff is being compiled, include it unconditionally. + +Reported upstream: +https://github.com/sahlberg/libnfs/issues/272 + +Signed-off-by: Jörg Krause +--- + include/nfsc/libnfs.h | 5 ----- + 1 file changed, 5 deletions(-) + +diff --git a/include/nfsc/libnfs.h b/include/nfsc/libnfs.h +index 09dcf1c..b6db58c 100755 +--- a/include/nfsc/libnfs.h ++++ b/include/nfsc/libnfs.h +@@ -24,12 +24,7 @@ + #define _LIBNFS_H_ + + #include +-#if defined(__ANDROID__) || defined(AROS) \ +- || ( defined(__APPLE__) && defined(__MACH__) ) + #include +-#else +-#include +-#endif + + #ifdef __cplusplus + extern "C" { +-- +2.19.1 + diff --git a/package/libnfs/Config.in b/package/libnfs/Config.in new file mode 100644 index 00000000..2a1ef03c --- /dev/null +++ b/package/libnfs/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBNFS + bool "libnfs" + depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC || BR2_TOOLCHAIN_HAS_THREADS # libtirpc + select BR2_PACKAGE_LIBTIRPC if !BR2_TOOLCHAIN_HAS_NATIVE_RPC + help + nfs userspace implementation. + + http://github.com/sahlberg/libnfs + +comment "libnfs needs a toolchain w/ threads" + depends on !(BR2_TOOLCHAIN_HAS_THREADS || BR2_TOOLCHAIN_HAS_NATIVE_RPC) diff --git a/package/libnfs/libnfs.hash b/package/libnfs/libnfs.hash new file mode 100644 index 00000000..bb92ebe6 --- /dev/null +++ b/package/libnfs/libnfs.hash @@ -0,0 +1,6 @@ +# Locally calculated +sha256 6ee77e9fe220e2d3e3b1f53cfea04fb319828cc7dbb97dd9df09e46e901d797d libnfs-4.0.0.tar.gz +sha256 edd960c0142b8ada98b43b6396b78f4e557b0bc70ac601a51e397ad04070e2c5 COPYING +sha256 d9406ced95457941032aa11d04623b8ab71f2827a3395ebef137aec475be35b1 LICENCE-BSD.txt +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 LICENCE-LGPL-2.1.txt +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENCE-GPL-3.txt diff --git a/package/libnfs/libnfs.mk b/package/libnfs/libnfs.mk new file mode 100644 index 00000000..5f950b5c --- /dev/null +++ b/package/libnfs/libnfs.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# libnfs +# +################################################################################ + +LIBNFS_VERSION = 4.0.0 +LIBNFS_SITE = $(call github,sahlberg,libnfs,libnfs-$(LIBNFS_VERSION)) +LIBNFS_INSTALL_STAGING = YES +LIBNFS_AUTORECONF = YES +LIBNFS_LICENSE = LGPL-2.1+ (library), BSD-2-Clause (protocol, .x files), GPL-3.0+ (examples) +LIBNFS_LICENSE_FILES = COPYING LICENCE-BSD.txt LICENCE-LGPL-2.1.txt LICENCE-GPL-3.txt +LIBNFS_DEPENDENCIES = host-pkgconf + +ifeq ($(BR2_PACKAGE_LIBTIRPC),y) +LIBNFS_DEPENDENCIES += libtirpc +endif + +$(eval $(autotools-package)) diff --git a/package/libnftnl/Config.in b/package/libnftnl/Config.in new file mode 100644 index 00000000..347223ce --- /dev/null +++ b/package/libnftnl/Config.in @@ -0,0 +1,25 @@ +comment "libnftnl needs a toolchain w/ headers >= 3.12" + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12 + +config BR2_PACKAGE_LIBNFTNL + bool "libnftnl" + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12 + select BR2_PACKAGE_LIBMNL + help + libnftnl is a userspace library providing a low-level + netlink programming interface (API) to the in-kernel + nf_tables subsystem. The library libnftnl has been + previously known as libnftables. This library is + currently used by nftables. + + http://netfilter.org/projects/libnftnl/index.html + +if BR2_PACKAGE_LIBNFTNL + +config BR2_PACKAGE_LIBNFTNL_JSON + bool "enable JSON support" + select BR2_PACKAGE_JANSSON + help + Enable JSON parsing support + +endif diff --git a/package/libnftnl/libnftnl.hash b/package/libnftnl/libnftnl.hash new file mode 100644 index 00000000..f22b02af --- /dev/null +++ b/package/libnftnl/libnftnl.hash @@ -0,0 +1,3 @@ +# From http://www.netfilter.org/projects/libnftnl/downloads.html +sha256 20dbc13f11004aea2c9e479cfb90359cb11fe3446c3140811c18e4ec1648ed8f libnftnl-1.1.7.tar.bz2 +sha256 98193898c663001eff2fdcfb676e210c13042bc1a05e8d570c363efa396f8e24 COPYING diff --git a/package/libnftnl/libnftnl.mk b/package/libnftnl/libnftnl.mk new file mode 100644 index 00000000..f4487bde --- /dev/null +++ b/package/libnftnl/libnftnl.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# libnftnl +# +################################################################################ + +LIBNFTNL_VERSION = 1.1.7 +LIBNFTNL_SITE = https://netfilter.org/projects/libnftnl/files +LIBNFTNL_SOURCE = libnftnl-$(LIBNFTNL_VERSION).tar.bz2 +LIBNFTNL_LICENSE = GPL-2.0+ +LIBNFTNL_LICENSE_FILES = COPYING +LIBNFTNL_INSTALL_STAGING = YES +LIBNFTNL_DEPENDENCIES = host-pkgconf libmnl + +ifeq ($(BR2_PACKAGE_LIBNFTNL_JSON),y) +LIBNFTNL_CONF_OPTS += --with-json-parsing +LIBNFTNL_DEPENDENCIES += jansson +else +LIBNFTNL_CONF_OPTS += --without-json-parsing +endif + +$(eval $(autotools-package)) diff --git a/package/libnice/Config.in b/package/libnice/Config.in new file mode 100644 index 00000000..1f62c0b5 --- /dev/null +++ b/package/libnice/Config.in @@ -0,0 +1,23 @@ +config BR2_PACKAGE_LIBNICE + bool "libnice" + depends on !BR2_STATIC_LIBS # gnutls + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_OPENSSL if !BR2_PACKAGE_GNUTLS + select BR2_PACKAGE_LIBGLIB2 + help + Libnice is an implementation of the IETF's Interactive + Connectivity Establishment (ICE) standard (RFC 5245) and the + Session Traversal Utilities for NAT (STUN) standard (RFC + 5389). + + It provides a GLib-based library, libnice and a Glib-free + library, libstun as well as GStreamer elements. + + http://nice.freedesktop.org/wiki/ + +comment "libnice needs a toolchain w/ wchar, threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS diff --git a/package/libnice/libnice.hash b/package/libnice/libnice.hash new file mode 100644 index 00000000..61be9517 --- /dev/null +++ b/package/libnice/libnice.hash @@ -0,0 +1,7 @@ +# Locally computed after checking pgp signature +sha256 06b678066f94dde595a4291588ed27acd085ee73775b8c4e8399e28c01eeefdf libnice-0.1.16.tar.gz + +# Hash for license files: +sha256 9246b2ee8b1db30cf03d5d9719ad8bb5edce1cadc85f8cfef319c23d24d950b5 COPYING +sha256 3b3c75ae6c663c4f93987647eb5463d33dc1602a1aded3ac479773f2c3928e3a COPYING.MPL +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 COPYING.LGPL diff --git a/package/libnice/libnice.mk b/package/libnice/libnice.mk new file mode 100644 index 00000000..82922509 --- /dev/null +++ b/package/libnice/libnice.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# libnice +# +################################################################################ + +LIBNICE_VERSION = 0.1.16 +LIBNICE_SITE = http://nice.freedesktop.org/releases +LIBNICE_LICENSE = MPL-1.1 or LGPL-2.1 +LIBNICE_LICENSE_FILES = COPYING COPYING.MPL COPYING.LGPL +LIBNICE_DEPENDENCIES = libglib2 host-pkgconf +LIBNICE_INSTALL_STAGING = YES +LIBNICE_CONF_OPTS = --without-gstreamer-0.10 + +ifeq ($(BR2_PACKAGE_GNUTLS),y) +LIBNICE_CONF_OPTS += --with-crypto-library=gnutls +LIBNICE_DEPENDENCIES += gnutls +else +LIBNICE_CONF_OPTS += \ + --with-crypto-library=openssl \ + --with-openssl=$(STAGING_DIR)/usr +LIBNICE_DEPENDENCIES += openssl +endif + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +LIBNICE_CONF_OPTS += --enable-introspection +LIBNICE_DEPENDENCIES += gobject-introspection +else +LIBNICE_CONF_OPTS += --disable-introspection +endif + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE),y) +LIBNICE_CONF_OPTS += --with-gstreamer +LIBNICE_DEPENDENCIES += gst1-plugins-base +else +LIBNICE_CONF_OPTS += --without-gstreamer +endif + +$(eval $(autotools-package)) diff --git a/package/libnids/0001-libpcap-use-pkg-config.patch b/package/libnids/0001-libpcap-use-pkg-config.patch new file mode 100644 index 00000000..8f8df478 --- /dev/null +++ b/package/libnids/0001-libpcap-use-pkg-config.patch @@ -0,0 +1,48 @@ +configure.in: use pkg-config for libpcap detection + +The detection of libpcap was based in ${prefix}, which doesn't make +sense in a cross-compilation context and can cause host leakage into +the target build. + +So instead, let's use pkg-config to detect libpcap, since it is anyway +already use in this configure.in to detect libglib. + +Signed-off-by: Thomas Petazzoni + +Index: b/configure.in +=================================================================== +--- a/configure.in ++++ b/configure.in +@@ -75,25 +75,13 @@ + fi + ;; + esac ], +-[ if test -f ${prefix}/include/pcap.h; then +- PCAP_CFLAGS="-I${prefix}/include" +- PCAPLIB="-L${exec_prefix}/lib -lpcap" +- elif test -f /usr/include/pcap/pcap.h; then +- PCAP_CFLAGS="-I/usr/include/pcap" +- PCAPLIB="-lpcap" +- else +- TMP=$LIBS +- LIBS="-lpcap $LIBS" +- AC_TRY_LINK([#include ], pcap_open_offline("",""), +- LIBPCAP_FOUND=1,LIBPCAP_FOUND=0) +- LIBS=$TMP +- if test $LIBPCAP_FOUND = 1 ; then +- PCAPLIB="-lpcap" +- else +- AC_ERROR(libpcap not found) +- fi +- fi +- AC_MSG_RESULT(yes) ] ++[ ++ PKG_PROG_PKG_CONFIG ++ PKG_CHECK_MODULES(LIBPCAP, libpcap) ++ AC_MSG_RESULT(yes) ++ PCAP_CFLAGS=${LIBPCAP_CFLAGS} ++ PCAPLIB=${LIBPCAP_LIBS} ++] + ) + AC_SUBST(PCAP_CFLAGS) + AC_SUBST(PCAPLIB) diff --git a/package/libnids/Config.in b/package/libnids/Config.in new file mode 100644 index 00000000..30528f4d --- /dev/null +++ b/package/libnids/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_LIBNIDS + bool "libnids" + select BR2_PACKAGE_LIBPCAP + help + Libnids is an implementation of an E-component of Network + Intrusion Detection System. + + libnids watches all local network traffic, and provides + convenient information on them to perform further analysis. + + Libnids offers IP defragmentation, TCP stream assembly, TCP + port scan detection. + + http://libnids.sourceforge.net/ diff --git a/package/libnids/libnids.hash b/package/libnids/libnids.hash new file mode 100644 index 00000000..4a2949c3 --- /dev/null +++ b/package/libnids/libnids.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 314b4793e0902fbf1fdb7fb659af37a3c1306ed1aad5d1c84de6c931b351d359 libnids-1.24.tar.gz +sha256 91df39d1816bfb17a4dda2d3d2c83b1f6f2d38d53e53e41e8f97ad5ac46a0cad COPYING diff --git a/package/libnids/libnids.mk b/package/libnids/libnids.mk new file mode 100644 index 00000000..3e36838c --- /dev/null +++ b/package/libnids/libnids.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# libnids +# +################################################################################ + +LIBNIDS_VERSION = 1.24 +LIBNIDS_SITE = https://sourceforge.net/projects/libnids/files/libnids/$(LIBNIDS_VERSION) +LIBNIDS_LICENSE = GPL-2.0 +LIBNIDS_LICENSE_FILES = COPYING +LIBNIDS_CPE_ID_VENDOR = libnids_project +LIBNIDS_INSTALL_STAGING = YES +LIBNIDS_DEPENDENCIES = host-pkgconf libpcap +LIBNIDS_AUTORECONF = YES + +# disable libnet if not available +# Tests in configure.in expect --with-libnet=$build_dir +# not an installation patch like in our context. +# We use with-libnet=yes to skip the unusual paths tests. +# But 'LNETLIB' gets left out, so we need to define it ourselves. +ifeq ($(BR2_PACKAGE_LIBNET),y) +LIBNIDS_DEPENDENCIES += libnet +LIBNIDS_CONF_OPTS += --enable-libnet --with-libnet=yes LNETLIB=-lnet +else +LIBNIDS_CONF_OPTS += --disable-libnet +endif + +# disable libglib2 if not available +# The test in configure.in is flawed: passing --enable-libglib would also +# disable it. Only when neither is passed will the autodetection test be +# executed. +ifeq ($(BR2_PACKAGE_LIBGLIB2),y) +LIBNIDS_DEPENDENCIES += libglib2 +else +LIBNIDS_CONF_OPTS += --disable-libglib +endif + +# hand-written Makefile.in, not using automake, needs a custom +# variable for the installation path. +LIBNIDS_INSTALL_STAGING_OPTS = install_prefix=$(STAGING_DIR) install +LIBNIDS_INSTALL_TARGET_OPTS = install_prefix=$(TARGET_DIR) install + +$(eval $(autotools-package)) diff --git a/package/libnl/0001-build-add-Libs.private-field-in-libnl-pkg-config-fil.patch b/package/libnl/0001-build-add-Libs.private-field-in-libnl-pkg-config-fil.patch new file mode 100644 index 00000000..845a5937 --- /dev/null +++ b/package/libnl/0001-build-add-Libs.private-field-in-libnl-pkg-config-fil.patch @@ -0,0 +1,30 @@ +From db0d59cd06f3ffd350379847c0885e1bfb85af0f Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sat, 7 Mar 2015 11:34:42 +0100 +Subject: [PATCH 2/2] build: add Libs.private field in libnl pkg-config file + +In order to support static linking, the libnl pkg-config file should +indicate in its Libs.private field the libraries that libnl-3.0.a +requires. The LIBS variable contains the appropriate list of +libraries: -lm in all cases, and -lpthread when pthread support is +enabled. This allows to statically link applications against libnl +properly. + +Signed-off-by: Thomas Petazzoni +--- + libnl-3.0.pc.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/libnl-3.0.pc.in b/libnl-3.0.pc.in +index b87e3dc..ddbc999 100644 +--- a/libnl-3.0.pc.in ++++ b/libnl-3.0.pc.in +@@ -7,4 +7,5 @@ Name: libnl + Description: Convenience library for netlink sockets + Version: @PACKAGE_VERSION@ + Libs: -L${libdir} -lnl-@MAJ_VERSION@ ++Libs.private: @LIBS@ + Cflags: -I${includedir}/libnl@MAJ_VERSION@ +-- +2.1.0 + diff --git a/package/libnl/0002-Add-musl-workaround-to-the-libc-compat.h-copy.patch b/package/libnl/0002-Add-musl-workaround-to-the-libc-compat.h-copy.patch new file mode 100644 index 00000000..57d1c874 --- /dev/null +++ b/package/libnl/0002-Add-musl-workaround-to-the-libc-compat.h-copy.patch @@ -0,0 +1,37 @@ +From be07fdbc9658de19304defa7538f219cd3f21ec0 Mon Sep 17 00:00:00 2001 +From: Baruch Siach +Date: Sun, 12 Mar 2017 08:52:20 +0200 +Subject: [PATCH] Add musl workaround to the libc-compat.h copy + +The libc-compat.h kernel header uses glibc specific macros to solve conflicts +with libc provided headers. This patch makes libc-compat.h work also for musl +libc. + +Future rebase note: when upstream updates libc-compat.h some additional macro +definitions will be needed. See the Buildroot iproute2 patch +package/iproute2/0001-Add-the-musl-workaround-to-the-libc-compat.h-copy.patch. + +Signed-off-by: Baruch Siach +--- +Upstream status: libc-compat.h is a local copy of a kernel headers. A proper +musl fix must go to the kernel first. +--- + include/linux-private/linux/libc-compat.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/include/linux-private/linux/libc-compat.h b/include/linux-private/linux/libc-compat.h +index 9bed5b6ae4d9..e2562a819464 100644 +--- a/include/linux-private/linux/libc-compat.h ++++ b/include/linux-private/linux/libc-compat.h +@@ -49,7 +49,7 @@ + #define _LIBC_COMPAT_H + + /* We have included glibc headers... */ +-#if defined(__GLIBC__) ++#if 1 + + /* Coordinate with glibc netinet/in.h header. */ + #if defined(_NETINET_IN_H) +-- +2.11.0 + diff --git a/package/libnl/Config.in b/package/libnl/Config.in new file mode 100644 index 00000000..1e29f574 --- /dev/null +++ b/package/libnl/Config.in @@ -0,0 +1,23 @@ +config BR2_PACKAGE_LIBNL + bool "libnl" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + A library for applications dealing with netlink socket. + + https://github.com/thom311/libnl + +if BR2_PACKAGE_LIBNL + +config BR2_PACKAGE_LIBNL_TOOLS + bool "install tools" + # uses + depends on !BR2_STATIC_LIBS + help + Install binary tools. + +comment "libnl tools needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS +endif + +comment "libnl needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libnl/libnl.hash b/package/libnl/libnl.hash new file mode 100644 index 00000000..d7cd5c95 --- /dev/null +++ b/package/libnl/libnl.hash @@ -0,0 +1,6 @@ +# From https://github.com/thom311/libnl/releases/download/libnl3_5_0/libnl-3.5.0.tar.gz.md5sum +md5 74ba57b1b1d6f9f92268aa8141d8e8e4 libnl-3.5.0.tar.gz +# From https://github.com/thom311/libnl/releases/download/libnl3_5_0/libnl-3.5.0.tar.gz.sha256sum +sha256 352133ec9545da76f77e70ccb48c9d7e5324d67f6474744647a7ed382b5e05fa libnl-3.5.0.tar.gz +# Locally calculated +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/libnl/libnl.mk b/package/libnl/libnl.mk new file mode 100644 index 00000000..fc9398b2 --- /dev/null +++ b/package/libnl/libnl.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# libnl +# +################################################################################ + +LIBNL_VERSION = 3.5.0 +LIBNL_SITE = https://github.com/thom311/libnl/releases/download/libnl$(subst .,_,$(LIBNL_VERSION)) +LIBNL_LICENSE = LGPL-2.1+ +LIBNL_LICENSE_FILES = COPYING +LIBNL_CPE_ID_VENDOR = libnl_project + +LIBNL_INSTALL_STAGING = YES +LIBNL_DEPENDENCIES = host-bison host-flex host-pkgconf + +ifeq ($(BR2_PACKAGE_LIBNL_TOOLS),y) +LIBNL_CONF_OPTS += --enable-cli +else +LIBNL_CONF_OPTS += --disable-cli +endif + +ifeq ($(BR2_PACKAGE_CHECK),y) +LIBNL_DEPENDENCIES += check +LIBNL_CONF_OPTS += --enable-unit-tests +else +LIBNL_CONF_OPTS += --disable-unit-tests +endif + +$(eval $(autotools-package)) diff --git a/package/libnpth/Config.in b/package/libnpth/Config.in new file mode 100644 index 00000000..71f9fcb3 --- /dev/null +++ b/package/libnpth/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_LIBNPTH + bool "libnpth" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + help + nPth is a library to provide the GNU Pth API and thus a + non-preemptive threads implementation. + + https://www.gnupg.org/related_software/npth/index.html + +comment "libnpth needs a toolchain w/ threads support" + depends on !BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU diff --git a/package/libnpth/libnpth.hash b/package/libnpth/libnpth.hash new file mode 100644 index 00000000..8d0b6bd5 --- /dev/null +++ b/package/libnpth/libnpth.hash @@ -0,0 +1,7 @@ +# Locally calculated after checking signature +# https://gnupg.org/ftp/gcrypt/npth/npth-1.6.tar.bz2.sig +# using key D8692123C4065DEA5E0F3AB5249B39D24F25E3B6 +sha256 1393abd9adcf0762d34798dc34fdcf4d0d22a8410721e76f1e3afcd1daa4e2d1 npth-1.6.tar.bz2 + +# Hash for license file: +sha256 ce64d5f7b49ea6d80fdb6d4cdee6839d1a94274f7493dc797c3b55b65ec8e9ed COPYING.LIB diff --git a/package/libnpth/libnpth.mk b/package/libnpth/libnpth.mk new file mode 100644 index 00000000..ecfef863 --- /dev/null +++ b/package/libnpth/libnpth.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libnpth +# +################################################################################ + +LIBNPTH_VERSION = 1.6 +LIBNPTH_SOURCE = npth-$(LIBNPTH_VERSION).tar.bz2 +LIBNPTH_SITE = https://www.gnupg.org/ftp/gcrypt/npth +LIBNPTH_LICENSE = LGPL-2.0+ +LIBNPTH_LICENSE_FILES = COPYING.LIB +LIBNPTH_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/libnpupnp/Config.in b/package/libnpupnp/Config.in new file mode 100644 index 00000000..cea5bd5c --- /dev/null +++ b/package/libnpupnp/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_LIBNPUPNP + bool "libnpupnp" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C++11 + select BR2_PACKAGE_EXPAT + select BR2_PACKAGE_LIBCURL + select BR2_PACKAGE_LIBMICROHTTPD + help + npupnp (new pupnp or not pupnp ?) is an UPnP library derived + from the venerable pupnp (https://github.com/pupnp/pupnp), + based on its 1.6.x branch (around 1.6.25). + + https://www.lesbonscomptes.com/upmpdcli/libnpupnp.html + +comment "libnpupnp needs a toolchain w/ C++, threads, gcc >= 4.9" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/libnpupnp/libnpupnp.hash b/package/libnpupnp/libnpupnp.hash new file mode 100644 index 00000000..8451812e --- /dev/null +++ b/package/libnpupnp/libnpupnp.hash @@ -0,0 +1,5 @@ +# Hash from: http://www.lesbonscomptes.com/upmpdcli/downloads/libnpupnp-4.1.4.tar.gz.sha256 +sha256 03506f02546e3b3d31b389e046c4691f020b82d315426ce79f1e2b1eb7958656 libnpupnp-4.1.4.tar.gz + +# Hash for license file: +sha256 c8b99423cad48bb44e2cf52a496361404290865eac259a82da6d1e4331ececb3 COPYING diff --git a/package/libnpupnp/libnpupnp.mk b/package/libnpupnp/libnpupnp.mk new file mode 100644 index 00000000..6c6fa2f1 --- /dev/null +++ b/package/libnpupnp/libnpupnp.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libnpupnp +# +################################################################################ + +LIBNPUPNP_VERSION = 4.1.4 +LIBNPUPNP_SITE = http://www.lesbonscomptes.com/upmpdcli/downloads +LIBNPUPNP_LICENSE = BSD-3-Clause +LIBNPUPNP_LICENSE_FILES = COPYING +LIBNPUPNP_INSTALL_STAGING = YES +LIBNPUPNP_DEPENDENCIES = expat libcurl libmicrohttpd + +$(eval $(autotools-package)) diff --git a/package/libnspr/Config.in b/package/libnspr/Config.in new file mode 100644 index 00000000..c1be7151 --- /dev/null +++ b/package/libnspr/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT + def_bool y + +if BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT + +config BR2_PACKAGE_LIBNSPR + bool "libnspr" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + help + NSPR is the Netscape Portable Runtime library which provides + a platform-neutral API for system level and libc like + functions. The library is used by the Mozilla project as well + as others. + + http://www.mozilla.org/projects/nspr/ + +comment "libnspr needs a toolchain w/ threads, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS + +endif diff --git a/package/libnspr/libnspr.hash b/package/libnspr/libnspr.hash new file mode 100644 index 00000000..f8f8fa76 --- /dev/null +++ b/package/libnspr/libnspr.hash @@ -0,0 +1,4 @@ +# From https://ftp.mozilla.org/pub/nspr/releases/v4.29/src/SHA256SUMS +sha256 22286bdb8059d74632cc7c2865c139e63953ecfb33bf4362ab58827e86e92582 nspr-4.29.tar.gz +# Locally calculated +sha256 fab3dd6bdab226f1c08630b1dd917e11fcb4ec5e1e020e2c16f83a0a13863e85 nspr/LICENSE diff --git a/package/libnspr/libnspr.mk b/package/libnspr/libnspr.mk new file mode 100644 index 00000000..6f072cb6 --- /dev/null +++ b/package/libnspr/libnspr.mk @@ -0,0 +1,55 @@ +################################################################################ +# +# libnspr +# +################################################################################ + +LIBNSPR_VERSION = 4.29 +LIBNSPR_SOURCE = nspr-$(LIBNSPR_VERSION).tar.gz +LIBNSPR_SITE = https://ftp.mozilla.org/pub/mozilla.org/nspr/releases/v$(LIBNSPR_VERSION)/src +LIBNSPR_SUBDIR = nspr +LIBNSPR_INSTALL_STAGING = YES +LIBNSPR_CONFIG_SCRIPTS = nspr-config +LIBNSPR_LICENSE = MPL-2.0 +LIBNSPR_LICENSE_FILES = nspr/LICENSE + +# Set the host CFLAGS and LDFLAGS so NSPR does not guess wrongly +LIBNSPR_CONF_ENV = \ + HOST_CFLAGS="-g -O2" \ + HOST_LDFLAGS="-lc" +# NSPR mixes up --build and --host +LIBNSPR_CONF_OPTS = --host=$(GNU_HOST_NAME) +LIBNSPR_CONF_OPTS += --$(if $(BR2_ARCH_IS_64),en,dis)able-64bit + +# ./nspr/pr/include/md/_linux.h tests only __GLIBC__ version to detect +# c-library features, list musl features here for now (taken from +# Alpine Linux). +ifeq ($(BR2_TOOLCHAIN_USES_MUSL),y) +LIBNSPR_CFLAGS += \ + -D_PR_POLL_AVAILABLE \ + -D_PR_HAVE_OFF64_T \ + -D_PR_INET6 \ + -D_PR_HAVE_INET_NTOP \ + -D_PR_HAVE_GETHOSTBYNAME2 \ + -D_PR_HAVE_GETADDRINFO \ + -D_PR_INET6_PROBE +endif + +LIBNSPR_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) $(LIBNSPR_CFLAGS)" + +ifeq ($(BR2_STATIC_LIBS),y) +LIBNSPR_MAKE_OPTS = SHARED_LIBRARY= +LIBNSPR_INSTALL_TARGET_OPTS = DESTDIR=$(TARGET_DIR) SHARED_LIBRARY= install +LIBNSPR_INSTALL_STAGING_OPTS = DESTDIR=$(STAGING_DIR) SHARED_LIBRARY= install +endif + +ifeq ($(BR2_SHARED_LIBS),y) +LIBNSPR_MAKE_OPTS = LIBRARY= +LIBNSPR_INSTALL_TARGET_OPTS = DESTDIR=$(TARGET_DIR) LIBRARY= install +LIBNSPR_INSTALL_STAGING_OPTS = DESTDIR=$(STAGING_DIR) LIBRARY= install +endif + +HOST_LIBNSPR_CONF_OPTS += --$(if $(filter %64,$(HOSTARCH)),en,dis)able-64bit + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libnss/Config.in b/package/libnss/Config.in new file mode 100644 index 00000000..2dd01972 --- /dev/null +++ b/package/libnss/Config.in @@ -0,0 +1,32 @@ +config BR2_PACKAGE_LIBNSS + bool "libnss" + depends on BR2_TOOLCHAIN_HAS_THREADS # libnspr + depends on BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT # libnspr + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_LIBNSPR + select BR2_PACKAGE_SQLITE + select BR2_PACKAGE_ZLIB + help + Network Security Services (NSS) is a set of libraries designed + to support development of security-enabled client and server + applications. Applications built with NSS can support SSL v2 + and v3, TLS, PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, + and X.509 v3 certificates. + + http://www.mozilla.org/projects/security/pki/nss/ + +if BR2_PACKAGE_LIBNSS + +config BR2_PACKAGE_LIBNSS_ARCH + string + default "aarch64" if BR2_aarch64_be + default "ppc" if BR2_powerpc + default "ppc64" if BR2_powerpc64 + default "ppc64le" if BR2_powerpc64le + default BR2_ARCH + +endif + +comment "libnss needs a toolchain w/ threads, dynamic library" + depends on BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/libnss/libnss.hash b/package/libnss/libnss.hash new file mode 100644 index 00000000..ad632f72 --- /dev/null +++ b/package/libnss/libnss.hash @@ -0,0 +1,4 @@ +# From https://ftp.mozilla.org/pub/security/nss/releases/NSS_3_61_RTM/src/SHA256SUMS +sha256 312e2d804b34ccf0fec70b57cf8cd6ac853f8ced60df53e30ebb0a7bcd0e1370 nss-3.61.tar.gz +# Locally calculated +sha256 a20c1a32d1f8102432360b42e932869f7c11c7cdbacf9cac554c422132af47f4 nss/COPYING diff --git a/package/libnss/libnss.mk b/package/libnss/libnss.mk new file mode 100644 index 00000000..3bc3197e --- /dev/null +++ b/package/libnss/libnss.mk @@ -0,0 +1,161 @@ +################################################################################ +# +# libnss +# +################################################################################ + +LIBNSS_VERSION = 3.61 +LIBNSS_SOURCE = nss-$(LIBNSS_VERSION).tar.gz +LIBNSS_SITE = https://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/NSS_$(subst .,_,$(LIBNSS_VERSION))_RTM/src +LIBNSS_DISTDIR = dist +LIBNSS_INSTALL_STAGING = YES +LIBNSS_DEPENDENCIES = libnspr sqlite zlib +LIBNSS_LICENSE = MPL-2.0 +LIBNSS_LICENSE_FILES = nss/COPYING + +LIBNSS_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85862),y) +LIBNSS_CFLAGS += -O0 +endif + +# Need to pass down TARGET_CFLAGS and TARGET_LDFLAGS +define LIBNSS_FIXUP_LINUX_MK + echo 'OS_CFLAGS += $(LIBNSS_CFLAGS)' >> $(@D)/nss/coreconf/Linux.mk + echo 'LDFLAGS += $(TARGET_LDFLAGS)' >> $(@D)/nss/coreconf/Linux.mk +endef + +LIBNSS_PRE_CONFIGURE_HOOKS += LIBNSS_FIXUP_LINUX_MK + +# --gc-sections triggers binutils ld segfault +# https://sourceware.org/bugzilla/show_bug.cgi?id=21180 +ifeq ($(BR2_microblaze),y) +define LIBNSS_DROP_GC_SECTIONS + sed -i 's:-Wl,--gc-sections::g' $(@D)/nss/coreconf/Linux.mk +endef + +LIBNSS_PRE_CONFIGURE_HOOKS += LIBNSS_DROP_GC_SECTIONS +endif + +LIBNSS_BUILD_VARS = \ + MOZILLA_CLIENT=1 \ + NSPR_INCLUDE_DIR=$(STAGING_DIR)/usr/include/nspr \ + NSPR_LIB_DIR=$(STAGING_DIR)/usr/lib \ + NS_USE_GCC=1 \ + NSS_DISABLE_GTESTS=1 \ + NSS_USE_SYSTEM_SQLITE=1 \ + NATIVE_CC="$(HOSTCC)" \ + OS_ARCH="Linux" \ + OS_RELEASE="2.6" \ + OS_TEST=$(BR2_PACKAGE_LIBNSS_ARCH) \ + NSS_ENABLE_WERROR=0 + +ifeq ($(BR2_POWERPC_CPU_HAS_ALTIVEC),) +# Disable Altivec if not supported +LIBNSS_BUILD_VARS += NSS_DISABLE_ALTIVEC=1 +endif + +ifeq ($(BR2_ARM_CPU_HAS_NEON),) +# Disable arm32-neon if neon is not supported +LIBNSS_BUILD_VARS += NSS_DISABLE_ARM32_NEON=1 +endif + +ifeq ($(BR2_ARCH_IS_64),y) +# MIPS64 n32 is treated as a 32-bit architecture by libnss. +# See: https://bugzilla.mozilla.org/show_bug.cgi?id=1010730 +ifeq ($(BR2_MIPS_NABI32),) +LIBNSS_BUILD_VARS += USE_64=1 +endif +endif + +define LIBNSS_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE1) -C $(@D)/nss coreconf \ + SOURCE_MD_DIR=$(@D)/$(LIBNSS_DISTDIR) \ + DIST=$(@D)/$(LIBNSS_DISTDIR) \ + CHECKLOC= \ + $(LIBNSS_BUILD_VARS) + $(TARGET_CONFIGURE_OPTS) $(MAKE1) -C $(@D)/nss lib/dbm all \ + SOURCE_MD_DIR=$(@D)/$(LIBNSS_DISTDIR) \ + DIST=$(@D)/$(LIBNSS_DISTDIR) \ + CHECKLOC= \ + $(LIBNSS_BUILD_VARS) NATIVE_FLAGS="$(HOST_CFLAGS) -DLINUX" +endef + +define LIBNSS_INSTALL_STAGING_CMDS + $(INSTALL) -m 755 -t $(STAGING_DIR)/usr/lib/ \ + $(@D)/$(LIBNSS_DISTDIR)/lib/*.so + $(INSTALL) -m 755 -d $(STAGING_DIR)/usr/include/nss + $(INSTALL) -m 644 -t $(STAGING_DIR)/usr/include/nss \ + $(@D)/$(LIBNSS_DISTDIR)/public/nss/* + $(INSTALL) -m 755 -t $(STAGING_DIR)/usr/lib/ \ + $(@D)/$(LIBNSS_DISTDIR)/lib/*.a + $(INSTALL) -D -m 0644 $(TOPDIR)/package/libnss/nss.pc.in \ + $(STAGING_DIR)/usr/lib/pkgconfig/nss.pc + $(SED) 's/@VERSION@/$(LIBNSS_VERSION)/g;' \ + $(STAGING_DIR)/usr/lib/pkgconfig/nss.pc +endef + +define LIBNSS_INSTALL_TARGET_CMDS + $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/lib/ \ + $(@D)/$(LIBNSS_DISTDIR)/lib/*.so + $(INSTALL) -m 755 -d $(TARGET_DIR)/usr/include/nss + $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/include/nss \ + $(@D)/$(LIBNSS_DISTDIR)/public/nss/* + $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/lib/ \ + $(@D)/$(LIBNSS_DISTDIR)/lib/*.a + $(INSTALL) -D -m 0644 $(TOPDIR)/package/libnss/nss.pc.in \ + $(TARGET_DIR)/usr/lib/pkgconfig/nss.pc + $(INSTALL) -D -m 755 $(@D)/$(LIBNSS_DISTDIR)/bin/certutil \ + $(TARGET_DIR)/usr/bin/certutil + $(SED) 's/@VERSION@/$(LIBNSS_VERSION)/g;' \ + $(TARGET_DIR)/usr/lib/pkgconfig/nss.pc +endef + +HOST_LIBNSS_BUILD_VARS = \ + MOZILLA_CLIENT=1 \ + NSPR_INCLUDE_DIR=$(HOST_DIR)/include/nspr \ + NSPR_LIB_DIR=$(HOST_DIR)/lib \ + NS_USE_GCC=1 \ + NSS_DISABLE_GTESTS=1 \ + NSS_USE_SYSTEM_SQLITE=1 \ + SQLITE_INCLUDE_DIR=$(HOST_DIR)/include \ + ZLIB_INCLUDE_DIR=$(HOST_DIR)/include \ + NSS_ENABLE_WERROR=0 + +HOST_LIBNSS_DEPENDENCIES = host-libnspr host-sqlite host-zlib + +ifneq ($(filter %64,$(HOSTARCH)),) +HOST_LIBNSS_BUILD_VARS += USE_64=1 +endif + +define HOST_LIBNSS_BUILD_CMDS + $(HOST_CONFIGURE_OPTS) $(MAKE1) -C $(@D)/nss coreconf \ + SOURCE_MD_DIR=$(@D)/$(LIBNSS_DISTDIR) \ + DIST=$(@D)/$(LIBNSS_DISTDIR) \ + CHECKLOC= \ + $(HOST_LIBNSS_BUILD_VARS) + $(HOST_CONFIGURE_OPTS) $(MAKE1) -C $(@D)/nss lib/dbm all \ + SOURCE_MD_DIR=$(@D)/$(LIBNSS_DISTDIR) \ + DIST=$(@D)/$(LIBNSS_DISTDIR) \ + CHECKLOC= \ + $(HOST_LIBNSS_BUILD_VARS) +endef + +define HOST_LIBNSS_INSTALL_CMDS + $(INSTALL) -m 755 -t $(HOST_DIR)/lib/ \ + $(@D)/$(LIBNSS_DISTDIR)/lib/*.so + $(INSTALL) -m 755 -d $(HOST_DIR)/include/nss + $(INSTALL) -m 644 -t $(HOST_DIR)/include/nss \ + $(@D)/$(LIBNSS_DISTDIR)/public/nss/* + $(INSTALL) -m 755 -t $(HOST_DIR)/lib/ \ + $(@D)/$(LIBNSS_DISTDIR)/lib/*.a + $(INSTALL) -D -m 0644 $(TOPDIR)/package/libnss/nss.pc.in \ + $(HOST_DIR)/lib/pkgconfig/nss.pc + $(SED) 's/@VERSION@/$(LIBNSS_VERSION)/g;' \ + $(HOST_DIR)/lib/pkgconfig/nss.pc + $(SED) '/^prefix/s,=.*,=$(HOST_DIR),g;' \ + $(HOST_DIR)/lib/pkgconfig/nss.pc +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/libnss/nss.pc.in b/package/libnss/nss.pc.in new file mode 100644 index 00000000..e27783f6 --- /dev/null +++ b/package/libnss/nss.pc.in @@ -0,0 +1,11 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include/nss + +Name: NSS +Description: Mozilla Network Security Services +Version: @VERSION@ +Requires: nspr +Libs: -L${libdir} -lnss3 -lnssutil3 -lsmime3 -lssl3 +Cflags: -I${includedir} diff --git a/package/liboauth/0001-Fixes-build-issue-with-OpenSSL-1.1.0.patch b/package/liboauth/0001-Fixes-build-issue-with-OpenSSL-1.1.0.patch new file mode 100644 index 00000000..945307bb --- /dev/null +++ b/package/liboauth/0001-Fixes-build-issue-with-OpenSSL-1.1.0.patch @@ -0,0 +1,156 @@ +From 5f1c949b1703367f7f06454fcff650bdb7bac840 Mon Sep 17 00:00:00 2001 +From: DJ Lucas +Date: Sun, 9 Sep 2018 15:46:15 +0200 +Subject: [PATCH] Fixes build issue with OpenSSL-1.1.0 + +Downloaded from +http://www.linuxfromscratch.org/patches/blfs/svn/liboauth-1.0.3-openssl-1.1.0-2.patch + +Patch was sent upstream: https://github.com/x42/liboauth/issues/9 + +Signed-off-by: Bernd Kuhls +--- + src/hash.c | 65 ++++++++++++++++++++++++++++++++++++++++++-------------------- + 1 file changed, 44 insertions(+), 21 deletions(-) + +diff --git a/src/hash.c b/src/hash.c +index 17ff5c8..b7958f7 100644 +--- a/src/hash.c ++++ b/src/hash.c +@@ -362,6 +362,11 @@ looser: + #include "oauth.h" // base64 encode fn's. + #include + ++#if OPENSSL_VERSION_NUMBER < 0x10100000 ++#define EVP_MD_CTX_new EVP_MD_CTX_create ++#define EVP_MD_CTX_free EVP_MD_CTX_destroy ++#endif ++ + char *oauth_sign_hmac_sha1 (const char *m, const char *k) { + return(oauth_sign_hmac_sha1_raw (m, strlen(m), k, strlen(k))); + } +@@ -386,7 +391,7 @@ char *oauth_sign_rsa_sha1 (const char *m, const char *k) { + unsigned char *sig = NULL; + unsigned char *passphrase = NULL; + unsigned int len=0; +- EVP_MD_CTX md_ctx; ++ EVP_MD_CTX *md_ctx; + + EVP_PKEY *pkey; + BIO *in; +@@ -399,24 +404,31 @@ char *oauth_sign_rsa_sha1 (const char *m, const char *k) { + return xstrdup("liboauth/OpenSSL: can not read private key"); + } + ++ md_ctx = EVP_MD_CTX_new(); ++ if (md_ctx == NULL) { ++ return xstrdup("liboauth/OpenSSL: failed to allocate EVP_MD_CTX"); ++ } ++ + len = EVP_PKEY_size(pkey); + sig = (unsigned char*)xmalloc((len+1)*sizeof(char)); + +- EVP_SignInit(&md_ctx, EVP_sha1()); +- EVP_SignUpdate(&md_ctx, m, strlen(m)); +- if (EVP_SignFinal (&md_ctx, sig, &len, pkey)) { ++ EVP_SignInit(md_ctx, EVP_sha1()); ++ EVP_SignUpdate(md_ctx, m, strlen(m)); ++ if (EVP_SignFinal (md_ctx, sig, &len, pkey)) { + char *tmp; + sig[len] = '\0'; + tmp = oauth_encode_base64(len,sig); + OPENSSL_free(sig); + EVP_PKEY_free(pkey); ++ EVP_MD_CTX_free(md_ctx); + return tmp; + } ++ EVP_MD_CTX_free(md_ctx); + return xstrdup("liboauth/OpenSSL: rsa-sha1 signing failed"); + } + + int oauth_verify_rsa_sha1 (const char *m, const char *c, const char *s) { +- EVP_MD_CTX md_ctx; ++ EVP_MD_CTX *md_ctx; + EVP_PKEY *pkey; + BIO *in; + X509 *cert = NULL; +@@ -437,13 +449,18 @@ int oauth_verify_rsa_sha1 (const char *m, const char *c, const char *s) { + return -2; + } + ++ md_ctx = EVP_MD_CTX_new(); ++ if (md_ctx == NULL) { ++ return -2; ++ } ++ + b64d= (unsigned char*) xmalloc(sizeof(char)*strlen(s)); + slen = oauth_decode_base64(b64d, s); + +- EVP_VerifyInit(&md_ctx, EVP_sha1()); +- EVP_VerifyUpdate(&md_ctx, m, strlen(m)); +- err = EVP_VerifyFinal(&md_ctx, b64d, slen, pkey); +- EVP_MD_CTX_cleanup(&md_ctx); ++ EVP_VerifyInit(md_ctx, EVP_sha1()); ++ EVP_VerifyUpdate(md_ctx, m, strlen(m)); ++ err = EVP_VerifyFinal(md_ctx, b64d, slen, pkey); ++ EVP_MD_CTX_free(pkey); + EVP_PKEY_free(pkey); + xfree(b64d); + return (err); +@@ -455,35 +472,41 @@ int oauth_verify_rsa_sha1 (const char *m, const char *c, const char *s) { + */ + char *oauth_body_hash_file(char *filename) { + unsigned char fb[BUFSIZ]; +- EVP_MD_CTX ctx; ++ EVP_MD_CTX *ctx; + size_t len=0; + unsigned char *md; + FILE *F= fopen(filename, "r"); + if (!F) return NULL; + +- EVP_MD_CTX_init(&ctx); +- EVP_DigestInit(&ctx,EVP_sha1()); ++ ctx = EVP_MD_CTX_new(); ++ if (ctx == NULL) { ++ return xstrdup("liboauth/OpenSSL: failed to allocate EVP_MD_CTX"); ++ } ++ EVP_DigestInit(ctx,EVP_sha1()); + while (!feof(F) && (len=fread(fb,sizeof(char),BUFSIZ, F))>0) { +- EVP_DigestUpdate(&ctx, fb, len); ++ EVP_DigestUpdate(ctx, fb, len); + } + fclose(F); + len=0; + md=(unsigned char*) xcalloc(EVP_MD_size(EVP_sha1()),sizeof(unsigned char)); +- EVP_DigestFinal(&ctx, md,(unsigned int*) &len); +- EVP_MD_CTX_cleanup(&ctx); ++ EVP_DigestFinal(ctx, md,(unsigned int*) &len); ++ EVP_MD_CTX_free(ctx); + return oauth_body_hash_encode(len, md); + } + + char *oauth_body_hash_data(size_t length, const char *data) { +- EVP_MD_CTX ctx; ++ EVP_MD_CTX *ctx; + size_t len=0; + unsigned char *md; + md=(unsigned char*) xcalloc(EVP_MD_size(EVP_sha1()),sizeof(unsigned char)); +- EVP_MD_CTX_init(&ctx); +- EVP_DigestInit(&ctx,EVP_sha1()); +- EVP_DigestUpdate(&ctx, data, length); +- EVP_DigestFinal(&ctx, md,(unsigned int*) &len); +- EVP_MD_CTX_cleanup(&ctx); ++ ctx = EVP_MD_CTX_new(); ++ if (ctx == NULL) { ++ return xstrdup("liboauth/OpenSSL: failed to allocate EVP_MD_CTX"); ++ } ++ EVP_DigestInit(ctx,EVP_sha1()); ++ EVP_DigestUpdate(ctx, data, length); ++ EVP_DigestFinal(ctx, md,(unsigned int*) &len); ++ EVP_MD_CTX_free(ctx); + return oauth_body_hash_encode(len, md); + } + +-- +2.14.4 + diff --git a/package/liboauth/Config.in b/package/liboauth/Config.in new file mode 100644 index 00000000..4ed0efa6 --- /dev/null +++ b/package/liboauth/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBOAUTH + bool "liboauth" + select BR2_PACKAGE_OPENSSL + help + liboauth is a collection of c functions implementing the oAuth + Core 1.0 Rev A standard API. liboauth provides basic functions + to escape and encode parameters according to oAuth specs and + offers high-level functions to sign requests or verify + signatures. + + http://liboauth.sourceforge.net/ diff --git a/package/liboauth/liboauth.hash b/package/liboauth/liboauth.hash new file mode 100644 index 00000000..5fa0353d --- /dev/null +++ b/package/liboauth/liboauth.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 0df60157b052f0e774ade8a8bac59d6e8d4b464058cc55f9208d72e41156811f liboauth-1.0.3.tar.gz +sha256 c30608672733bf3abd2ccf6f3206be8d91b7ee58b007b2fdbcfbc61c655e7fb7 COPYING.MIT diff --git a/package/liboauth/liboauth.mk b/package/liboauth/liboauth.mk new file mode 100644 index 00000000..bd54330d --- /dev/null +++ b/package/liboauth/liboauth.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# liboauth +# +################################################################################ + +LIBOAUTH_VERSION = 1.0.3 +LIBOAUTH_SITE = http://downloads.sourceforge.net/project/liboauth +LIBOAUTH_INSTALL_STAGING = YES +LIBOAUTH_DEPENDENCIES += host-pkgconf openssl +LIBOAUTH_LICENSE = MIT +LIBOAUTH_LICENSE_FILES = COPYING.MIT + +ifeq ($(BR2_PACKAGE_LIBCURL),y) +LIBOAUTH_DEPENDENCIES += libcurl +else +LIBOAUTH_CONF_OPTS += --disable-libcurl +endif + +$(eval $(autotools-package)) diff --git a/package/libodb-boost/Config.in b/package/libodb-boost/Config.in new file mode 100644 index 00000000..ada87738 --- /dev/null +++ b/package/libodb-boost/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_LIBODB_BOOST + bool "libodb-boost" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_BOOST + select BR2_PACKAGE_LIBODB + help + This package contains the common ODB runtime library. Every + application that includes code generated by the ODB compiler + will need to link to this library. + + https://www.codesynthesis.com/products/odb/ + +comment "libodb-boost needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_PACKAGE_BOOST diff --git a/package/libodb-boost/libodb-boost.hash b/package/libodb-boost/libodb-boost.hash new file mode 100644 index 00000000..622067c3 --- /dev/null +++ b/package/libodb-boost/libodb-boost.hash @@ -0,0 +1,6 @@ +# From https://www.codesynthesis.com/projects/libcutl/ +sha1 f813702b2856732e199ae34e3393b8cecff878ef libodb-boost-2.4.0.tar.bz2 + +# Locally computed +sha256 b41bd4aaa3f3c9563cfa41bae19bda1bbcc3652e4430b4ebb1819eef2ffcadf4 libodb-boost-2.4.0.tar.bz2 +sha256 841105a470fc283851c63941510ffd403c726d1910b688f7df95914ab8b1b5a3 LICENSE diff --git a/package/libodb-boost/libodb-boost.mk b/package/libodb-boost/libodb-boost.mk new file mode 100644 index 00000000..bac5f1e7 --- /dev/null +++ b/package/libodb-boost/libodb-boost.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# libodb-boost +# +################################################################################ + +LIBODB_BOOST_VERSION_MAJOR = 2.4 +LIBODB_BOOST_VERSION = $(LIBODB_BOOST_VERSION_MAJOR).0 +LIBODB_BOOST_SOURCE = libodb-boost-$(LIBODB_BOOST_VERSION).tar.bz2 +LIBODB_BOOST_SITE = https://www.codesynthesis.com/download/odb/$(LIBODB_BOOST_VERSION_MAJOR) +LIBODB_BOOST_INSTALL_STAGING = YES +LIBODB_BOOST_LICENSE = GPL-2.0 +LIBODB_BOOST_LICENSE_FILES = LICENSE +LIBODB_BOOST_DEPENDENCIES = boost libodb +LIBODB_BOOST_CONF_ENV = CXXFLAGS="$(TARGET_CXXFLAGS) -std=c++11" + +$(eval $(autotools-package)) diff --git a/package/libodb-mysql/0001-fix-syntax-issue-while-checking-ldflags.patch b/package/libodb-mysql/0001-fix-syntax-issue-while-checking-ldflags.patch new file mode 100644 index 00000000..a4ef3cc1 --- /dev/null +++ b/package/libodb-mysql/0001-fix-syntax-issue-while-checking-ldflags.patch @@ -0,0 +1,35 @@ +From 3af12d8d0f749751e487955c24260049e7a8eec6 Mon Sep 17 00:00:00 2001 +From: Kamel Bouhara +Date: Wed, 13 May 2020 16:58:22 +0200 +Subject: [PATCH] fix syntax issue while checking ldflags + +Signed-off-by: Kamel Bouhara +--- + configure | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/configure b/configure +index def5883..2d783f6 100755 +--- a/configure ++++ b/configure +@@ -17574,7 +17574,7 @@ libmysqlclient_paths="none /usr/lib/mysql /usr/lib64/mysql" + + for path in $libmysqlclient_paths; do + +-if test x"path" != xnone; then ++if test x"$path" != xnone; then + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -L$path" + fi +@@ -17753,7 +17753,7 @@ if test x"$libmysqlclient_found" = xyes; then + break; + fi + +-if test x"path" != xnone; then ++if test x"$path" != xnone; then + LDFLAGS="$save_LDFLAGS" + fi + +-- +2.26.2 + diff --git a/package/libodb-mysql/0002-mariadb-FTBFS-fix.patch b/package/libodb-mysql/0002-mariadb-FTBFS-fix.patch new file mode 100644 index 00000000..01caaafd --- /dev/null +++ b/package/libodb-mysql/0002-mariadb-FTBFS-fix.patch @@ -0,0 +1,51 @@ +From 552474a477989d0d3514f126b8e314dccc27878c Mon Sep 17 00:00:00 2001 +From: Kamel Bouhara +Date: Wed, 1 Jul 2020 08:58:24 +0200 +Subject: [PATCH] mariadb FTBFS fix + +From: https://sources.debian.org/patches/libodb-mysql/2.4.0-4/mariadb_FTBFS_fix.patch/ + +Description: fix FTBFS with recent MariaDB versions +Don't include internal an header, only the main one. +Bug-Debian: https://bugs.debian.org/919374 +Forwarded: no +Author: Laszlo Boszormenyi (GCS) + +Signed-off-by: Kamel Bouhara +--- + odb/mysql/mysql-types.hxx | 4 ++-- + odb/mysql/version.hxx | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/odb/mysql/mysql-types.hxx b/odb/mysql/mysql-types.hxx +index 1254ccd..0e8f9a8 100644 +--- a/odb/mysql/mysql-types.hxx ++++ b/odb/mysql/mysql-types.hxx +@@ -11,9 +11,9 @@ typedef char my_bool; + typedef struct st_mysql_bind MYSQL_BIND; + + #ifdef LIBODB_MYSQL_INCLUDE_SHORT +-# include ++# include + #else +-# include ++# include + #endif + + #endif // ODB_MYSQL_MYSQL_TYPES_HXX +diff --git a/odb/mysql/version.hxx b/odb/mysql/version.hxx +index 05b4ba5..e711c2e 100644 +--- a/odb/mysql/version.hxx ++++ b/odb/mysql/version.hxx +@@ -12,7 +12,7 @@ + #ifdef LIBODB_MYSQL_INCLUDE_SHORT + # include + #else +-# include ++# include + #endif + + #include +-- +2.26.2 + diff --git a/package/libodb-mysql/Config.in b/package/libodb-mysql/Config.in new file mode 100644 index 00000000..d606165f --- /dev/null +++ b/package/libodb-mysql/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_LIBODB_MYSQL + bool "libodb-mysql" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_MYSQL + select BR2_PACKAGE_LIBODB + help + This package contains the MySQL ODB runtime library. Every + application that includes code generated for the MySQL + database will need to link to this library. + + https://www.codesynthesis.com/products/odb/ + +comment "libodb-mysql needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_PACKAGE_MYSQL diff --git a/package/libodb-mysql/libodb-mysql.hash b/package/libodb-mysql/libodb-mysql.hash new file mode 100644 index 00000000..1c35041a --- /dev/null +++ b/package/libodb-mysql/libodb-mysql.hash @@ -0,0 +1,4 @@ +sha1 2021a67577354f1d6bed50c0b257c1920760eda7 libodb-mysql-2.4.0.tar.bz2 + +sha256 ce2fcdb6ab4a02fc0aff263a891c56949fa41b89e65d7a40d8b656d3ebf0d9bc libodb-mysql-2.4.0.tar.bz2 +sha256 841105a470fc283851c63941510ffd403c726d1910b688f7df95914ab8b1b5a3 LICENSE diff --git a/package/libodb-mysql/libodb-mysql.mk b/package/libodb-mysql/libodb-mysql.mk new file mode 100644 index 00000000..88b6f4cb --- /dev/null +++ b/package/libodb-mysql/libodb-mysql.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# libodb-mysql +# +################################################################################ + +LIBODB_MYSQL_VERSION_MAJOR = 2.4 +LIBODB_MYSQL_VERSION = $(LIBODB_MYSQL_VERSION_MAJOR).0 +LIBODB_MYSQL_SOURCE = libodb-mysql-$(LIBODB_MYSQL_VERSION).tar.bz2 +LIBODB_MYSQL_SITE = https://www.codesynthesis.com/download/odb/$(LIBODB_MYSQL_VERSION_MAJOR) +LIBODB_MYSQL_INSTALL_STAGING = YES +LIBODB_MYSQL_LICENSE = GPL-2.0 +LIBODB_MYSQL_LICENSE_FILES = LICENSE +LIBODB_MYSQL_DEPENDENCIES = libodb mysql +LIBODB_MYSQL_CONF_ENV = \ + CXXFLAGS="$(TARGET_CXXFLAGS) -std=c++11" \ + LIBS=`$(STAGING_DIR)/usr/bin/mysql_config --libs` + +$(eval $(autotools-package)) diff --git a/package/libodb-pgsql/Config.in b/package/libodb-pgsql/Config.in new file mode 100644 index 00000000..2ff63d88 --- /dev/null +++ b/package/libodb-pgsql/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_LIBODB_PGSQL + bool "libodb-pgsql" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_POSTGRESQL + select BR2_PACKAGE_LIBODB + help + This package contains the PostgreSQL ODB runtime library. + Every application that includes code generated for the + PostgreSQL database will need to link to this library. + + https://www.codesynthesis.com/products/odb/ + +comment "libodb-pgsql needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_PACKAGE_POSTGRESQL diff --git a/package/libodb-pgsql/libodb-pgsql.hash b/package/libodb-pgsql/libodb-pgsql.hash new file mode 100644 index 00000000..5799f092 --- /dev/null +++ b/package/libodb-pgsql/libodb-pgsql.hash @@ -0,0 +1,6 @@ +# From https://www.codesynthesis.com/download/odb/2.4/libodb-pgsql-2.4.0.tar.bz2.sha1 +sha1 4628d5e296da01dbaf8658fd402b4f709f30ea2d libodb-pgsql-2.4.0.tar.bz2 + +# Locally Computed +sha256 778a4d38bd1161e1f0b368815514c3335da20c7584e3d07613526dcce53523bc libodb-pgsql-2.4.0.tar.bz2 +sha256 841105a470fc283851c63941510ffd403c726d1910b688f7df95914ab8b1b5a3 LICENSE diff --git a/package/libodb-pgsql/libodb-pgsql.mk b/package/libodb-pgsql/libodb-pgsql.mk new file mode 100644 index 00000000..01411688 --- /dev/null +++ b/package/libodb-pgsql/libodb-pgsql.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# libodb-pgsql +# +################################################################################ + +LIBODB_PGSQL_VERSION_MAJOR = 2.4 +LIBODB_PGSQL_VERSION = $(LIBODB_PGSQL_VERSION_MAJOR).0 +LIBODB_PGSQL_SOURCE = libodb-pgsql-$(LIBODB_PGSQL_VERSION).tar.bz2 +LIBODB_PGSQL_SITE = https://www.codesynthesis.com/download/odb/$(LIBODB_PGSQL_VERSION_MAJOR) +LIBODB_PGSQL_LICENSE = GPL-2.0 +LIBODB_PGSQL_LICENSE_FILES = LICENSE +LIBODB_PGSQL_INSTALL_STAGING = YES +LIBODB_PGSQL_DEPENDENCIES = postgresql libodb +LIBODB_PGSQL_CONF_ENV = CXXFLAGS="$(TARGET_CXXFLAGS) -std=c++11" + +$(eval $(autotools-package)) diff --git a/package/libodb/Config.in b/package/libodb/Config.in new file mode 100644 index 00000000..8312f473 --- /dev/null +++ b/package/libodb/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_LIBODB + bool "libodb" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_INSTALL_LIBSTDCPP + help + This package contains the common ODB runtime library. Every + application that includes code generated by the ODB compiler + will need to link to this library. + + https://www.codesynthesis.com/products/odb/ + +comment "libodb needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libodb/libodb.hash b/package/libodb/libodb.hash new file mode 100644 index 00000000..cea5b9ed --- /dev/null +++ b/package/libodb/libodb.hash @@ -0,0 +1,6 @@ +# From https://www.codesynthesis.com/projects/libcutl/ +sha1 42bd2a8023e338e004711e755eb30bd122b844a6 libodb-2.4.0.tar.bz2 + +# Locally Computed +sha256 66a1bb4e8bb6ef60cc79334f8028c4d4de98d87f2ff6f8123b4cfb7751ce0007 libodb-2.4.0.tar.bz2 +sha256 841105a470fc283851c63941510ffd403c726d1910b688f7df95914ab8b1b5a3 LICENSE diff --git a/package/libodb/libodb.mk b/package/libodb/libodb.mk new file mode 100644 index 00000000..11ca9de8 --- /dev/null +++ b/package/libodb/libodb.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libodb +# +################################################################################ + +LIBODB_VERSION_MAJOR = 2.4 +LIBODB_VERSION = $(LIBODB_VERSION_MAJOR).0 +LIBODB_SOURCE = libodb-$(LIBODB_VERSION).tar.bz2 +LIBODB_SITE = https://www.codesynthesis.com/download/odb/$(LIBODB_VERSION_MAJOR) +LIBODB_INSTALL_STAGING = YES +LIBODB_LICENSE = GPL-2.0 +LIBODB_LICENSE_FILES = LICENSE +LIBODB_CONF_ENV = CXXFLAGS="$(TARGET_CXXFLAGS) -std=c++11" + +$(eval $(autotools-package)) diff --git a/package/libogg/Config.in b/package/libogg/Config.in new file mode 100644 index 00000000..bf719ff4 --- /dev/null +++ b/package/libogg/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LIBOGG + bool "libogg" + help + Ogg is a multimedia container format, and the native file + and stream format for the Xiph.org multimedia codecs. As + with all Xiph.org technology is it an open format free for + anyone to use. + + http://xiph.org/ogg/ diff --git a/package/libogg/libogg.hash b/package/libogg/libogg.hash new file mode 100644 index 00000000..5d95c85d --- /dev/null +++ b/package/libogg/libogg.hash @@ -0,0 +1,7 @@ +# From: http://www.xiph.org/downloads/ +md5 eadef24aad6e3e8379ba0d14971fd64a libogg-1.3.4.tar.xz +sha1 f07499a35566aa62affb5ca989f62eed5b8092c3 libogg-1.3.4.tar.xz +sha256 c163bc12bc300c401b6aa35907ac682671ea376f13ae0969a220f7ddf71893fe libogg-1.3.4.tar.xz + +# Hash for license file: +sha256 d2ab5758336489da61c12cc5bb757da5339c4ae9001f9bb0562b4370249af814 COPYING diff --git a/package/libogg/libogg.mk b/package/libogg/libogg.mk new file mode 100644 index 00000000..08e5f87b --- /dev/null +++ b/package/libogg/libogg.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libogg +# +################################################################################ + +LIBOGG_VERSION = 1.3.4 +LIBOGG_SOURCE = libogg-$(LIBOGG_VERSION).tar.xz +LIBOGG_SITE = http://downloads.xiph.org/releases/ogg +LIBOGG_LICENSE = BSD-3-Clause +LIBOGG_LICENSE_FILES = COPYING + +LIBOGG_INSTALL_STAGING = YES +LIBOGG_DEPENDENCIES = host-pkgconf + +$(eval $(autotools-package)) diff --git a/package/libolm/Config.in b/package/libolm/Config.in new file mode 100644 index 00000000..a863216d --- /dev/null +++ b/package/libolm/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LIBOLM + bool "libolm" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11 + help + libolm is an implementation of the Double Ratchet + cryptographic ratchet in C++ + + https://gitlab.matrix.org/matrix-org/olm + +comment "libolm needs a toolchain w/ C++, gcc >= 4.8" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 diff --git a/package/libolm/libolm.hash b/package/libolm/libolm.hash new file mode 100644 index 00000000..c080c7ea --- /dev/null +++ b/package/libolm/libolm.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 d947d9570345e68696668cb855f1a6a7141b7b89cbcc15a08b1fae18535c4c45 olm-3.2.1.tar.gz +sha256 0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594 LICENSE diff --git a/package/libolm/libolm.mk b/package/libolm/libolm.mk new file mode 100644 index 00000000..034b3449 --- /dev/null +++ b/package/libolm/libolm.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libolm +# +################################################################################ + +LIBOLM_VERSION = 3.2.1 +LIBOLM_SOURCE = olm-$(LIBOLM_VERSION).tar.gz +LIBOLM_SITE = https://gitlab.matrix.org/matrix-org/olm/-/archive/$(LIBOLM_VERSION) +LIBOLM_LICENSE = Apache-2.0 +LIBOLM_LICENSE_FILES = LICENSE +LIBOLM_INSTALL_STAGING = YES + +LIBOLM_CONF_OPTS = -DOLM_TESTS=OFF + +$(eval $(cmake-package)) diff --git a/package/libopenh264/0001-Add-USE_STACK_PROTECTOR-option.patch b/package/libopenh264/0001-Add-USE_STACK_PROTECTOR-option.patch new file mode 100644 index 00000000..3758cd66 --- /dev/null +++ b/package/libopenh264/0001-Add-USE_STACK_PROTECTOR-option.patch @@ -0,0 +1,100 @@ +From 1e7435751c055723b7103dd1d5bb68530e1a2678 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Tue, 8 Oct 2019 20:18:18 +0200 +Subject: [PATCH] Add USE_STACK_PROTECTOR option + +-fstack-protector-all is not supported on all linux toolchains so add an +option to disable it (and enable it by default to keep current behavior) + +Fixes: + - http://autobuild.buildroot.org/results/377818cf8c1f2632cabdccb32bf4e7f06c0fdbbd + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/cisco/openh264/pull/3175] +--- + Makefile | 1 + + build/platform-android.mk | 5 ++++- + build/platform-bsd.mk | 5 ++++- + build/platform-darwin.mk | 5 ++++- + build/platform-linux.mk | 5 ++++- + 5 files changed, 17 insertions(+), 4 deletions(-) + +diff --git a/Makefile b/Makefile +index 74ff029d..c2061f6a 100644 +--- a/Makefile ++++ b/Makefile +@@ -34,6 +34,7 @@ GTEST_VER=release-1.8.1 + CCASFLAGS=$(CFLAGS) + STATIC_LDFLAGS=-lstdc++ + STRIP ?= strip ++USE_STACK_PROTECTOR = Yes + + SHAREDLIB_MAJORVERSION=5 + FULL_VERSION := 2.0.0 +diff --git a/build/platform-android.mk b/build/platform-android.mk +index 6f6ce347..06534301 100644 +--- a/build/platform-android.mk ++++ b/build/platform-android.mk +@@ -44,7 +44,10 @@ SYSROOT = $(NDKROOT)/platforms/android-$(NDKLEVEL)/arch-$(ARCH) + CXX = $(TOOLCHAINPREFIX)g++ + CC = $(TOOLCHAINPREFIX)gcc + AR = $(TOOLCHAINPREFIX)ar +-CFLAGS += -DANDROID_NDK -fpic --sysroot=$(SYSROOT) -MMD -MP -fstack-protector-all ++CFLAGS += -DANDROID_NDK -fpic --sysroot=$(SYSROOT) -MMD -MP ++ifeq ($(USE_STACK_PROTECTOR), Yes) ++CFLAGS +=-fstack-protector-all ++endif + CFLAGS += -isystem $(NDKROOT)/sysroot/usr/include -isystem $(NDKROOT)/sysroot/usr/include/$(TOOLCHAIN_NAME) -D__ANDROID_API__=$(NDKLEVEL) + CXXFLAGS += -fno-rtti -fno-exceptions + LDFLAGS += --sysroot=$(SYSROOT) +diff --git a/build/platform-bsd.mk b/build/platform-bsd.mk +index e60d2cc0..2e0bf2cc 100644 +--- a/build/platform-bsd.mk ++++ b/build/platform-bsd.mk +@@ -3,7 +3,10 @@ SHAREDLIBSUFFIX = so + SHAREDLIBSUFFIXFULLVER=$(SHAREDLIBSUFFIX).$(FULL_VERSION) + SHAREDLIBSUFFIXMAJORVER=$(SHAREDLIBSUFFIX).$(SHAREDLIB_MAJORVERSION) + SHLDFLAGS = -Wl,-soname,$(LIBPREFIX)$(PROJECT_NAME).$(SHAREDLIBSUFFIXMAJORVER) +-CFLAGS += -fPIC -fstack-protector-all ++CFLAGS += -fPIC ++ifeq ($(USE_STACK_PROTECTOR), Yes) ++CFLAGS += -fstack-protector-all ++endif + LDFLAGS += -lpthread + STATIC_LDFLAGS += -lpthread -lm + ifeq ($(ASM_ARCH), x86) +diff --git a/build/platform-darwin.mk b/build/platform-darwin.mk +index 6c7b2443..718c8e2f 100644 +--- a/build/platform-darwin.mk ++++ b/build/platform-darwin.mk +@@ -10,7 +10,10 @@ SHLDFLAGS = -dynamiclib -twolevel_namespace -undefined dynamic_lookup \ + $(SHAREDLIB_DIR)/$(LIBPREFIX)$(PROJECT_NAME).$(SHAREDLIBSUFFIXMAJORVER) + SHARED = -dynamiclib + SHARED += -current_version $(CURRENT_VERSION) -compatibility_version $(COMPATIBILITY_VERSION) +-CFLAGS += -Wall -fPIC -MMD -MP -fstack-protector-all ++CFLAGS += -Wall -fPIC -MMD -MP ++ifeq ($(USE_STACK_PROTECTOR), Yes) ++CFLAGS += -fstack-protector-all ++endif + ifeq ($(ASM_ARCH), x86) + ASMFLAGS += -DPREFIX + ifeq ($(ARCH), x86_64) +diff --git a/build/platform-linux.mk b/build/platform-linux.mk +index 44fe2424..b5c006b2 100644 +--- a/build/platform-linux.mk ++++ b/build/platform-linux.mk +@@ -3,7 +3,10 @@ SHAREDLIBSUFFIX = so + SHAREDLIBSUFFIXFULLVER=$(SHAREDLIBSUFFIX).$(FULL_VERSION) + SHAREDLIBSUFFIXMAJORVER=$(SHAREDLIBSUFFIX).$(SHAREDLIB_MAJORVERSION) + SHLDFLAGS = -Wl,-soname,$(LIBPREFIX)$(PROJECT_NAME).$(SHAREDLIBSUFFIXMAJORVER) +-CFLAGS += -Wall -fno-strict-aliasing -fPIC -MMD -MP -fstack-protector-all ++CFLAGS += -Wall -fno-strict-aliasing -fPIC -MMD -MP ++ifeq ($(USE_STACK_PROTECTOR), Yes) ++CFLAGS += -fstack-protector-all ++endif + LDFLAGS += -lpthread + STATIC_LDFLAGS += -lpthread -lm + AR_OPTS = crD $@ +-- +2.23.0 + diff --git a/package/libopenh264/0002-fix-mips-build.patch b/package/libopenh264/0002-fix-mips-build.patch new file mode 100644 index 00000000..c4927d56 --- /dev/null +++ b/package/libopenh264/0002-fix-mips-build.patch @@ -0,0 +1,73 @@ +From 9d5981eecde2133b9d6099eb99f96b1c29c3e520 Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Mon, 13 Apr 2020 12:03:01 +0200 +Subject: [PATCH] fix mips build + +In total three PR were sent upstream to fix mips builds: +https://github.com/cisco/openh264/pull/3185 +https://github.com/cisco/openh264/pull/3217 +https://github.com/cisco/openh264/pull/3225 + +Buildroot used the first version +https://git.buildroot.net/buildroot/commit/package/libopenh264?id=e8d0df569e1844f7ba28918a53ee38027b325b8f +downloaded from https://github.com/cisco/openh264/pull/3185 + +During discussion the gcc option '-march=loongson3a' was changed to +'-Wa,-mloongson-mmi,-mloongson-ext': +https://github.com/cisco/openh264/pull/3185#discussion_r337818960 + +This causes build errors with gcc version 8.3.0 (Buildroot 2020.02) + +tmp/cctgEQaw.s:662: Error: opcode not supported on this processor: loongson3a (mips64r2) `bc .L22' +/tmp/cctgEQaw.s:1679: Error: opcode not supported on this processor: loongson3a (mips64r2) `bc .L27' +/tmp/cctgEQaw.s:2218: Error: opcode not supported on this processor: loongson3a (mips64r2) `jrc $31' + +This patch partly reverts the change to fix mips build. + +$ /home/bernd/buildroot/br5/output/host/bin/mips64el-linux-gcc -v + +Using built-in specs. +COLLECT_GCC=/home/bernd/buildroot/br5/output/host/opt/ext-toolchain/bin/mips64el-linux-gcc.br_real +COLLECT_LTO_WRAPPER=/home/bernd/buildroot/br5/output/host/opt/ext-toolchain/bin/../libexec/gcc/mips64el-buildroot-linux-gnu/8.3.0/lto-wrapper +Target: mips64el-buildroot-linux-gnu +Configured with: ./configure --prefix=/opt/br-mips64r6-n64-el-hf-2020.02 --sysconfdir=/opt/br-mips64r6-n64-el-hf-2020.02/etc --enable-static --target=mips64el-buildroot-linux-gnu --with-sysroot=/opt/br-mips64r6-n64-el-hf-2020.02/mips64el-buildroot-linux-gnu/sysroot --enable-__cxa_atexit --with-gnu-ld --disable-libssp --disable-multilib --disable-decimal-float --with-gmp=/opt/br-mips64r6-n64-el-hf-2020.02 --with-mpc=/opt/br-mips64r6-n64-el-hf-2020.02 --with-mpfr=/opt/br-mips64r6-n64-el-hf-2020.02 --with-pkgversion='Buildroot 2020.02' --with-bugurl=http://bugs.buildroot.net/ --disable-libquadmath --enable-tls --enable-threads --without-isl --without-cloog --with-arch=mips64r6 --with-abi=64 --with-nan=2008 --enable-languages=c,c++ --with-build-time-tools=/opt/br-mips64r6-n64-el-hf-2020.02/mips64el-buildroot-linux-gnu/bin --enable-shared --disable-libgomp +Thread model: posix +gcc version 8.3.0 (Buildroot 2020.02) + +Patch sent upstream: https://github.com/cisco/openh264/pull/3267 + +Signed-off-by: Bernd Kuhls +--- + build/arch.mk | 2 +- + build/mips-simd-check.sh | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/build/arch.mk b/build/arch.mk +index 1bf318ab..c6570ed4 100644 +--- a/build/arch.mk ++++ b/build/arch.mk +@@ -41,7 +41,7 @@ ASMFLAGS += -I$(SRC_PATH)codec/common/mips/ + ifeq ($(ENABLE_MMI), Yes) + ENABLE_MMI = $(shell $(SRC_PATH)build/mips-simd-check.sh $(CC) mmi) + ifeq ($(ENABLE_MMI), Yes) +-CFLAGS += -DHAVE_MMI -Wa,-mloongson-mmi,-mloongson-ext ++CFLAGS += -DHAVE_MMI -march=loongson3a + endif + endif + #msa +diff --git a/build/mips-simd-check.sh b/build/mips-simd-check.sh +index 5efffbef..d0d72f9e 100755 +--- a/build/mips-simd-check.sh ++++ b/build/mips-simd-check.sh +@@ -15,7 +15,7 @@ TMPO=$(mktemp tmp.XXXXXX.o) + if [ $2 == "mmi" ] + then + echo "void main(void){ __asm__ volatile(\"punpcklhw \$f0, \$f0, \$f0\"); }" > $TMPC +- $1 -Wa,-mloongson-mmi $TMPC -o $TMPO &> /dev/null ++ $1 -march=loongson3a $TMPC -o $TMPO &> /dev/null + if test -s $TMPO + then + echo "Yes" +-- +2.25.0 + diff --git a/package/libopenh264/0003-codec-common-inc-asmdefs_mmi.h-fix-mips32-build.patch b/package/libopenh264/0003-codec-common-inc-asmdefs_mmi.h-fix-mips32-build.patch new file mode 100644 index 00000000..e11b1d13 --- /dev/null +++ b/package/libopenh264/0003-codec-common-inc-asmdefs_mmi.h-fix-mips32-build.patch @@ -0,0 +1,89 @@ +From c505f81e336088b6729a5407a03459f488353288 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 24 May 2021 22:54:01 +0200 +Subject: [PATCH] codec/common/inc/asmdefs_mmi.h: fix mips32 build + +Fix the following build failure on mips32 which is raised since version +2.0.0 and +https://github.com/cisco/openh264/commit/b13e5bceb18ebb93d0313b46aab4af6f480ca933: + +codec/common/mips/copy_mb_mmi.c: In function 'WelsCopy16x16_mmi': +./codec/common/inc/asmdefs_mmi.h:293:21: error: '_ABI64' undeclared (first use in this function) + 293 | if (_MIPS_SIM == _ABI64) \ + | ^~~~~~ + +Fixes: + - http://autobuild.buildroot.org/results/cba3e9d0fd061cc3a92cb732bcdc2c7b66dbf6cb + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/cisco/openh264/pull/3384] +--- + codec/common/inc/asmdefs_mmi.h | 17 +++++++++++------ + 1 file changed, 11 insertions(+), 6 deletions(-) + +diff --git a/codec/common/inc/asmdefs_mmi.h b/codec/common/inc/asmdefs_mmi.h +index 69a7ae39..5d1aed93 100644 +--- a/codec/common/inc/asmdefs_mmi.h ++++ b/codec/common/inc/asmdefs_mmi.h +@@ -288,9 +288,9 @@ + /** + * backup register + */ ++#if defined(_ABI64) && _MIPS_SIM == _ABI64 + #define BACKUP_REG \ + double __attribute__((aligned(16))) __back_temp[8]; \ +- if (_MIPS_SIM == _ABI64) \ + __asm__ volatile ( \ + "gssqc1 $f25, $f24, 0x00(%[temp]) \n\t" \ + "gssqc1 $f27, $f26, 0x10(%[temp]) \n\t" \ +@@ -299,8 +299,10 @@ + : \ + : [temp]"r"(__back_temp) \ + : "memory" \ +- ); \ +- else \ ++ ); ++#else ++#define BACKUP_REG \ ++ double __attribute__((aligned(16))) __back_temp[8]; \ + __asm__ volatile ( \ + "gssqc1 $f22, $f20, 0x00(%[temp]) \n\t" \ + "gssqc1 $f26, $f24, 0x10(%[temp]) \n\t" \ +@@ -309,12 +311,13 @@ + : [temp]"r"(__back_temp) \ + : "memory" \ + ); ++#endif + + /** + * recover register + */ ++#if defined(_ABI64) && _MIPS_SIM == _ABI64 + #define RECOVER_REG \ +- if (_MIPS_SIM == _ABI64) \ + __asm__ volatile ( \ + "gslqc1 $f25, $f24, 0x00(%[temp]) \n\t" \ + "gslqc1 $f27, $f26, 0x10(%[temp]) \n\t" \ +@@ -323,8 +326,9 @@ + : \ + : [temp]"r"(__back_temp) \ + : "memory" \ +- ); \ +- else \ ++ ); ++#else ++#define RECOVER_REG \ + __asm__ volatile ( \ + "gslqc1 $f22, $f20, 0x00(%[temp]) \n\t" \ + "gslqc1 $f26, $f24, 0x10(%[temp]) \n\t" \ +@@ -333,6 +337,7 @@ + : [temp]"r"(__back_temp) \ + : "memory" \ + ); ++#endif + + # define OK 1 + # define NOTOK 0 +-- +2.30.2 + diff --git a/package/libopenh264/Config.in b/package/libopenh264/Config.in new file mode 100644 index 00000000..2b77578a --- /dev/null +++ b/package/libopenh264/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_LIBOPENH264_ARCH_SUPPORTS + bool + default y if BR2_arm || BR2_armeb || BR2_aarch64 || BR2_i386 || \ + BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el || \ + BR2_x86_64 + +config BR2_PACKAGE_LIBOPENH264 + bool "libopenh264" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_PACKAGE_LIBOPENH264_ARCH_SUPPORTS + help + OpenH264 is a codec library which supports H.264 encoding and + decoding. + + http://www.openh264.org + +comment "libopenh264 needs a toolchain w/ C++, dynamic library, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS + depends on BR2_PACKAGE_LIBOPENH264_ARCH_SUPPORTS diff --git a/package/libopenh264/libopenh264.hash b/package/libopenh264/libopenh264.hash new file mode 100644 index 00000000..0689ab96 --- /dev/null +++ b/package/libopenh264/libopenh264.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 af173e90fce65f80722fa894e1af0d6b07572292e76de7b65273df4c0a8be678 libopenh264-2.1.1.tar.gz +sha256 dd5c1c9668512530fa5a96e4c29ac4033d70a7eeb0eed7a42fddb6dd794ebdbb LICENSE diff --git a/package/libopenh264/libopenh264.mk b/package/libopenh264/libopenh264.mk new file mode 100644 index 00000000..0c175799 --- /dev/null +++ b/package/libopenh264/libopenh264.mk @@ -0,0 +1,55 @@ +################################################################################ +# +# libopenh264 +# +################################################################################ + +LIBOPENH264_VERSION = 2.1.1 +LIBOPENH264_SITE = $(call github,cisco,openh264,v$(LIBOPENH264_VERSION)) +LIBOPENH264_LICENSE = BSD-2-Clause +LIBOPENH264_LICENSE_FILES = LICENSE +LIBOPENH264_CPE_ID_VENDOR = cisco +LIBOPENH264_CPE_ID_PRODUCT = openh264 +LIBOPENH264_INSTALL_STAGING = YES + +ifeq ($(BR2_aarch64),y) +LIBOPENH264_ARCH = aarch64 +else ifeq ($(BR2_arm)$(BR2_armeb),y) +LIBOPENH264_ARCH = arm +else ifeq ($(BR2_i386),y) +LIBOPENH264_ARCH = x86 +LIBOPENH264_DEPENDENCIES += host-nasm +else ifeq ($(BR2_mips)$(BR2_mipsel),y) +LIBOPENH264_ARCH = mips +else ifeq ($(BR2_mips64)$(BR2_mips64el),y) +LIBOPENH264_ARCH = mips64 +else ifeq ($(BR2_x86_64),y) +LIBOPENH264_ARCH = x86_64 +LIBOPENH264_DEPENDENCIES += host-nasm +endif + +# ENABLE64BIT is really only used for x86-64, other 64 bits +# architecture don't need it. +LIBOPENH264_MAKE_OPTS = \ + ARCH=$(LIBOPENH264_ARCH) \ + ENABLE64BIT=$(if $(BR2_x86_64),Yes,No) \ + USE_STACK_PROTECTOR=No + +define LIBOPENH264_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + $(LIBOPENH264_MAKE_OPTS) +endef + +define LIBOPENH264_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + $(LIBOPENH264_MAKE_OPTS) \ + DESTDIR=$(STAGING_DIR) PREFIX=/usr install +endef + +define LIBOPENH264_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + $(LIBOPENH264_MAKE_OPTS) \ + DESTDIR=$(TARGET_DIR) PREFIX=/usr install +endef + +$(eval $(generic-package)) diff --git a/package/libopenssl b/package/libopenssl new file mode 120000 index 00000000..63cc4ff5 --- /dev/null +++ b/package/libopenssl @@ -0,0 +1 @@ +libopenssl1 \ No newline at end of file diff --git a/package/libopenssl1/0001-Dont-waste-time-building-manpages-if-we-re-not-going.patch b/package/libopenssl1/0001-Dont-waste-time-building-manpages-if-we-re-not-going.patch new file mode 100644 index 00000000..6527bc23 --- /dev/null +++ b/package/libopenssl1/0001-Dont-waste-time-building-manpages-if-we-re-not-going.patch @@ -0,0 +1,33 @@ +From d8f104bffb0c4acb8c5fcdf49628f7d02ed48f7f Mon Sep 17 00:00:00 2001 +From: Mike Frysinger +Date: Sat, 16 May 2015 18:53:51 +0200 +Subject: [PATCH] Dont waste time building manpages if we're not going to use + em. + +Signed-off-by: Ryan Barnett +[Gustavo: update for parallel-build] + +[rebased on openssl-1.1.0h] +Signed-off-by: Peter Seiderer +[rebased on openssl-1.1.1i] +Signed-off-by: Bernd Kuhls +--- + Configurations/unix-Makefile.tmpl | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl +index 40cf2c3..777d9ca 100644 +--- a/Configurations/unix-Makefile.tmpl ++++ b/Configurations/unix-Makefile.tmpl +@@ -491,7 +491,7 @@ list-tests: + @echo "Tests are not supported with your chosen Configure options" + @ : {- output_on() if !$disabled{tests}; "" -} + +-install: install_sw install_ssldirs install_docs ++install: install_sw install_ssldirs + + uninstall: uninstall_docs uninstall_sw + +-- +2.16.3 + diff --git a/package/libopenssl1/0002-Reproducible-build-do-not-leak-compiler-path.patch b/package/libopenssl1/0002-Reproducible-build-do-not-leak-compiler-path.patch new file mode 100644 index 00000000..820c2add --- /dev/null +++ b/package/libopenssl1/0002-Reproducible-build-do-not-leak-compiler-path.patch @@ -0,0 +1,29 @@ +From b70be8c65365a8fc564226360d45adbbb29fc0af Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Tue, 24 Oct 2017 16:58:32 +0200 +Subject: [PATCH] Reproducible build: do not leak compiler path + +Signed-off-by: Peter Seiderer + +[Rebased on openssl-1.1.1.a] +Signed-off-by: Peter Seiderer +--- + crypto/build.info | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/crypto/build.info b/crypto/build.info +index 2c619c6..49ca6ab 100644 +--- a/crypto/build.info ++++ b/crypto/build.info +@@ -10,7 +10,7 @@ EXTRA= ../ms/uplink-x86.pl ../ms/uplink.c ../ms/applink.c \ + ppccpuid.pl pariscid.pl alphacpuid.pl arm64cpuid.pl armv4cpuid.pl + + DEPEND[cversion.o]=buildinf.h +-GENERATE[buildinf.h]=../util/mkbuildinf.pl "$(CC) $(LIB_CFLAGS) $(CPPFLAGS_Q)" "$(PLATFORM)" ++GENERATE[buildinf.h]=../util/mkbuildinf.pl "$$(basename $(CC)) $(LIB_CFLAGS) $(CPPFLAGS_Q)" "$(PLATFORM)" + DEPEND[buildinf.h]=../configdata.pm + + GENERATE[uplink-x86.s]=../ms/uplink-x86.pl $(PERLASM_SCHEME) +-- +2.20.1 + diff --git a/package/libopenssl1/0003-Introduce-the-OPENSSL_NO_MADVISE-to-disable-call-to-.patch b/package/libopenssl1/0003-Introduce-the-OPENSSL_NO_MADVISE-to-disable-call-to-.patch new file mode 100644 index 00000000..c51a3cd6 --- /dev/null +++ b/package/libopenssl1/0003-Introduce-the-OPENSSL_NO_MADVISE-to-disable-call-to-.patch @@ -0,0 +1,27 @@ +From 1281ffc7959bd2070563e17a52ee4424196d885c Mon Sep 17 00:00:00 2001 +From: Patrick Havelange +Date: Wed, 23 Jan 2019 12:21:21 +0100 +Subject: [PATCH] Introduce the OPENSSL_NO_MADVISE to disable call to madvise() + +Upstream: https://github.com/openssl/openssl/pull/8089 +Signed-off-by: Patrick Havelange +--- + crypto/mem_sec.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/crypto/mem_sec.c b/crypto/mem_sec.c +index 9e0f670..32c7282 100644 +--- a/crypto/mem_sec.c ++++ b/crypto/mem_sec.c +@@ -485,7 +485,7 @@ static int sh_init(size_t size, int minsize) + if (mlock(sh.arena, sh.arena_size) < 0) + ret = 2; + #endif +-#ifdef MADV_DONTDUMP ++#if defined(MADV_DONTDUMP) && !defined(OPENSSL_NO_MADVISE) + if (madvise(sh.arena, sh.arena_size, MADV_DONTDUMP) < 0) + ret = 2; + #endif +-- +2.17.1 + diff --git a/package/libopenssl1/0004-Configure-use-ELFv2-ABI-on-some-ppc64-big-endian-sys.patch b/package/libopenssl1/0004-Configure-use-ELFv2-ABI-on-some-ppc64-big-endian-sys.patch new file mode 100644 index 00000000..b5070ad7 --- /dev/null +++ b/package/libopenssl1/0004-Configure-use-ELFv2-ABI-on-some-ppc64-big-endian-sys.patch @@ -0,0 +1,37 @@ +From b57cc2e4ee21babacbffc243626de72c248068ea Mon Sep 17 00:00:00 2001 +From: Andy Polyakov +Date: Sun, 5 May 2019 18:30:55 +0200 +Subject: [PATCH] Configure: use ELFv2 ABI on some ppc64 big endian systems + +If _CALL_ELF is defined to be 2, it's an ELFv2 system. +Conditionally switch to the v2 perlasm scheme. + +Reviewed-by: Paul Dale +Reviewed-by: Richard Levitte +(Merged from https://github.com/openssl/openssl/pull/8883) +[vfazio: fixup for 1.1.1d] +Signed-off-by: Vincent Fazio +[rebased on openssl-1.1.1i] +Signed-off-by: Bernd Kuhls +--- + Configure | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/Configure b/Configure +index 5a699836f3..f9152b1702 100755 +--- a/Configure ++++ b/Configure +@@ -1417,6 +1417,10 @@ my %predefined_CXX = $config{CXX} + ? compiler_predefined($config{CROSS_COMPILE}.$config{CXX}) + : (); + ++if ($target eq "linux-ppc64" && !$disabled{asm}) { ++ $target{perlasm_scheme} = "linux64v2" if ($predefined_C{_CALL_ELF} == 2); ++} ++ + # Check for makedepend capabilities. + if (!$disabled{makedepend}) { + if ($config{target} =~ /^(VC|vms)-/) { +-- +2.25.0 + diff --git a/package/libopenssl1/0005-crypto-perlasm-ppc-xlate.pl-add-linux64v2-flavour.patch b/package/libopenssl1/0005-crypto-perlasm-ppc-xlate.pl-add-linux64v2-flavour.patch new file mode 100644 index 00000000..30bddc23 --- /dev/null +++ b/package/libopenssl1/0005-crypto-perlasm-ppc-xlate.pl-add-linux64v2-flavour.patch @@ -0,0 +1,64 @@ +From 07a0bbdd179a52907485fd793f0df31c097447af Mon Sep 17 00:00:00 2001 +From: Andy Polyakov +Date: Sun, 5 May 2019 18:25:50 +0200 +Subject: [PATCH] crypto/perlasm/ppc-xlate.pl: add linux64v2 flavour +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This is a big endian ELFv2 configuration. ELFv2 was already being +used for little endian, and big endian was traditionally ELFv1 +but there are practical configurations that use ELFv2 with big +endian nowadays (Adélie Linux, Void Linux, possibly Gentoo, etc.) + +Reviewed-by: Paul Dale +Reviewed-by: Richard Levitte +(Merged from https://github.com/openssl/openssl/pull/8883) +Signed-off-by: Vincent Fazio +--- + crypto/perlasm/ppc-xlate.pl | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/crypto/perlasm/ppc-xlate.pl b/crypto/perlasm/ppc-xlate.pl +index d220c6245b..eec82b8d48 100755 +--- a/crypto/perlasm/ppc-xlate.pl ++++ b/crypto/perlasm/ppc-xlate.pl +@@ -49,7 +49,7 @@ my $globl = sub { + /osx/ && do { $name = "_$name"; + last; + }; +- /linux.*(32|64le)/ ++ /linux.*(32|64(le|v2))/ + && do { $ret .= ".globl $name"; + if (!$$type) { + $ret .= "\n.type $name,\@function"; +@@ -80,7 +80,7 @@ my $globl = sub { + }; + my $text = sub { + my $ret = ($flavour =~ /aix/) ? ".csect\t.text[PR],7" : ".text"; +- $ret = ".abiversion 2\n".$ret if ($flavour =~ /linux.*64le/); ++ $ret = ".abiversion 2\n".$ret if ($flavour =~ /linux.*64(le|v2)/); + $ret; + }; + my $machine = sub { +@@ -186,7 +186,7 @@ my $vmr = sub { + + # Some ABIs specify vrsave, special-purpose register #256, as reserved + # for system use. +-my $no_vrsave = ($flavour =~ /aix|linux64le/); ++my $no_vrsave = ($flavour =~ /aix|linux64(le|v2)/); + my $mtspr = sub { + my ($f,$idx,$ra) = @_; + if ($idx == 256 && $no_vrsave) { +@@ -318,7 +318,7 @@ while($line=<>) { + if ($label) { + my $xlated = ($GLOBALS{$label} or $label); + print "$xlated:"; +- if ($flavour =~ /linux.*64le/) { ++ if ($flavour =~ /linux.*64(le|v2)/) { + if ($TYPES{$label} =~ /function/) { + printf "\n.localentry %s,0\n",$xlated; + } +-- +2.25.0 + diff --git a/package/libopenssl1/Config.in b/package/libopenssl1/Config.in new file mode 100644 index 00000000..723fd282 --- /dev/null +++ b/package/libopenssl1/Config.in @@ -0,0 +1,43 @@ +if BR2_PACKAGE_LIBOPENSSL + +# 4xx PowerPC cores seem to have trouble with openssl's ASM +# optimizations +config BR2_PACKAGE_LIBOPENSSL_TARGET_ARCH_LINUX_PPC + bool + default y if BR2_powerpc + depends on !BR2_powerpc_401 + depends on !BR2_powerpc_403 + depends on !BR2_powerpc_405 + depends on !BR2_powerpc_405fp + depends on !BR2_powerpc_440 + depends on !BR2_powerpc_440fp + +config BR2_PACKAGE_LIBOPENSSL_TARGET_ARCH + string + # Doesn't work for thumb-only (Cortex-M?) + default "linux-armv4" if BR2_ARM_CPU_HAS_ARM + default "linux-aarch64" if BR2_aarch64 + default "linux-ppc" if BR2_PACKAGE_LIBOPENSSL_TARGET_ARCH_LINUX_PPC + default "linux-ppc64" if BR2_powerpc64 + default "linux-ppc64le" if BR2_powerpc64le + default "linux-x86" if BR2_i386 + default "linux-x86_64" if BR2_x86_64 + # no-asm is needed with generic architectures such as + # linux-generic{32,64}, see + # https://github.com/openssl/openssl/issues/9839 + default "linux-generic64 no-asm" if BR2_ARCH_IS_64 && !BR2_MIPS_NABI32 + default "linux-generic32 no-asm" + +config BR2_PACKAGE_LIBOPENSSL_BIN + bool "openssl binary" + help + Install the openssl binary and the associated helper scripts + to the target file system. This is a command line tool for + doing various cryptographic stuff. + +config BR2_PACKAGE_LIBOPENSSL_ENGINES + bool "openssl additional engines" + help + Install additional encryption engine libraries. + +endif # BR2_PACKAGE_LIBOPENSSL diff --git a/package/libopenssl1/libopenssl.hash b/package/libopenssl1/libopenssl.hash new file mode 100644 index 00000000..d546a0db --- /dev/null +++ b/package/libopenssl1/libopenssl.hash @@ -0,0 +1,6 @@ +# From https://www.openssl.org/source/openssl-1.1.1k.tar.gz.sha256 +sha256 892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5 openssl-1.1.1k.tar.gz +sha256 6c13d2bf38fdf31eac3ce2a347073673f5d63263398f1f69d0df4a41253e4b3e openssl-3.0.8.tar.gz + +# License files +sha256 c32913b33252e71190af2066f08115c69bc9fddadf3bf29296e20c835389841c LICENSE diff --git a/package/libopenssl1/libopenssl.mk b/package/libopenssl1/libopenssl.mk new file mode 100644 index 00000000..5efba6c0 --- /dev/null +++ b/package/libopenssl1/libopenssl.mk @@ -0,0 +1,159 @@ +################################################################################ +# +# libopenssl +# +################################################################################ + +LIBOPENSSL_VERSION = 1.1.1k +#LIBOPENSSL_VERSION = 3.0.8 +LIBOPENSSL_SITE = https://www.openssl.org/source +LIBOPENSSL_SOURCE = openssl-$(LIBOPENSSL_VERSION).tar.gz +LIBOPENSSL_LICENSE = OpenSSL or SSLeay +LIBOPENSSL_LICENSE_FILES = LICENSE +LIBOPENSSL_INSTALL_STAGING = YES +LIBOPENSSL_DEPENDENCIES = zlib +HOST_LIBOPENSSL_DEPENDENCIES = host-zlib +LIBOPENSSL_TARGET_ARCH = $(call qstrip,$(BR2_PACKAGE_LIBOPENSSL_TARGET_ARCH)) +LIBOPENSSL_CFLAGS = $(TARGET_CFLAGS) +LIBOPENSSL_PROVIDES = openssl +LIBOPENSSL_CPE_ID_VENDOR = $(LIBOPENSSL_PROVIDES) +LIBOPENSSL_CPE_ID_PRODUCT = $(LIBOPENSSL_PROVIDES) + +ifeq ($(BR2_m68k_cf),y) +# relocation truncated to fit: R_68K_GOT16O +LIBOPENSSL_CFLAGS += -mxgot +# resolves an assembler "out of range error" with blake2 and sha512 algorithms +LIBOPENSSL_CFLAGS += -DOPENSSL_SMALL_FOOTPRINT +endif + +ifeq ($(BR2_USE_MMU),) +LIBOPENSSL_CFLAGS += -DHAVE_FORK=0 -DOPENSSL_NO_MADVISE +endif + +ifeq ($(BR2_PACKAGE_HAS_CRYPTODEV),y) +LIBOPENSSL_DEPENDENCIES += cryptodev +endif + +# fixes the following build failures: +# +# - musl +# ./libcrypto.so: undefined reference to `getcontext' +# ./libcrypto.so: undefined reference to `setcontext' +# ./libcrypto.so: undefined reference to `makecontext' +# +# - uclibc: +# crypto/async/arch/../arch/async_posix.h:32:5: error: unknown type name 'ucontext_t' +# + +ifeq ($(BR2_TOOLCHAIN_USES_MUSL),y) +LIBOPENSSL_CFLAGS += -DOPENSSL_NO_ASYNC +endif +ifeq ($(BR2_TOOLCHAIN_HAS_UCONTEXT),) +LIBOPENSSL_CFLAGS += -DOPENSSL_NO_ASYNC +endif + +define HOST_LIBOPENSSL_CONFIGURE_CMDS + (cd $(@D); \ + $(HOST_CONFIGURE_OPTS) \ + ./config \ + --prefix=$(HOST_DIR) \ + --openssldir=$(HOST_DIR)/etc/ssl \ + no-tests \ + no-fuzz-libfuzzer \ + no-fuzz-afl \ + shared \ + zlib-dynamic \ + ) + $(SED) "s#-O[0-9sg]#$(HOST_CFLAGS)#" $(@D)/Makefile +endef + +define LIBOPENSSL_CONFIGURE_CMDS + (cd $(@D); \ + $(TARGET_CONFIGURE_ARGS) \ + $(TARGET_CONFIGURE_OPTS) \ + ./Configure \ + $(LIBOPENSSL_TARGET_ARCH) \ + --prefix=/usr \ + --openssldir=/etc/ssl \ + $(if $(BR2_TOOLCHAIN_HAS_LIBATOMIC),-latomic) \ + $(if $(BR2_TOOLCHAIN_HAS_THREADS),threads,no-threads) \ + $(if $(BR2_STATIC_LIBS),no-shared,shared) \ + $(if $(BR2_PACKAGE_HAS_CRYPTODEV),enable-devcryptoeng) \ + no-rc5 \ + enable-camellia \ + enable-mdc2 \ + no-tests \ + no-fuzz-libfuzzer \ + no-fuzz-afl \ + $(if $(BR2_STATIC_LIBS),zlib,zlib-dynamic) \ + $(if $(BR2_STATIC_LIBS),no-dso) \ + ) + $(SED) "s#-march=[-a-z0-9] ##" -e "s#-mcpu=[-a-z0-9] ##g" $(@D)/Makefile + $(SED) "s#-O[0-9sg]#$(LIBOPENSSL_CFLAGS)#" $(@D)/Makefile + $(SED) "s# build_tests##" $(@D)/Makefile +endef + +# libdl is not available in a static build, and this is not implied by no-dso +ifeq ($(BR2_STATIC_LIBS),y) +define LIBOPENSSL_FIXUP_STATIC_MAKEFILE + $(SED) 's#-ldl##g' $(@D)/Makefile +endef +LIBOPENSSL_POST_CONFIGURE_HOOKS += LIBOPENSSL_FIXUP_STATIC_MAKEFILE +endif + +define HOST_LIBOPENSSL_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define LIBOPENSSL_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define LIBOPENSSL_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install +endef + +define HOST_LIBOPENSSL_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) install +endef + +define LIBOPENSSL_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install + rm -rf $(TARGET_DIR)/usr/lib/ssl + rm -f $(TARGET_DIR)/usr/bin/c_rehash +endef + +# libdl has no business in a static build +ifeq ($(BR2_STATIC_LIBS),y) +define LIBOPENSSL_FIXUP_STATIC_PKGCONFIG + $(SED) 's#-ldl##' $(STAGING_DIR)/usr/lib/pkgconfig/libcrypto.pc + $(SED) 's#-ldl##' $(STAGING_DIR)/usr/lib/pkgconfig/libssl.pc + $(SED) 's#-ldl##' $(STAGING_DIR)/usr/lib/pkgconfig/openssl.pc +endef +LIBOPENSSL_POST_INSTALL_STAGING_HOOKS += LIBOPENSSL_FIXUP_STATIC_PKGCONFIG +endif + +ifeq ($(BR2_PACKAGE_PERL),) +define LIBOPENSSL_REMOVE_PERL_SCRIPTS + $(RM) -f $(TARGET_DIR)/etc/ssl/misc/{CA.pl,tsget} +endef +LIBOPENSSL_POST_INSTALL_TARGET_HOOKS += LIBOPENSSL_REMOVE_PERL_SCRIPTS +endif + +ifeq ($(BR2_PACKAGE_LIBOPENSSL_BIN),) +define LIBOPENSSL_REMOVE_BIN + $(RM) -f $(TARGET_DIR)/usr/bin/openssl + $(RM) -f $(TARGET_DIR)/etc/ssl/misc/{CA.*,c_*} +endef +LIBOPENSSL_POST_INSTALL_TARGET_HOOKS += LIBOPENSSL_REMOVE_BIN +endif + +ifneq ($(BR2_PACKAGE_LIBOPENSSL_ENGINES),y) +define LIBOPENSSL_REMOVE_LIBOPENSSL_ENGINES + rm -rf $(TARGET_DIR)/usr/lib/engines-1.1 +endef +LIBOPENSSL_POST_INSTALL_TARGET_HOOKS += LIBOPENSSL_REMOVE_LIBOPENSSL_ENGINES +endif + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/libopenssl3/Config.in b/package/libopenssl3/Config.in new file mode 100644 index 00000000..617e3039 --- /dev/null +++ b/package/libopenssl3/Config.in @@ -0,0 +1,43 @@ +if BR2_PACKAGE_LIBOPENSSL + +# 4xx PowerPC cores seem to have trouble with openssl's ASM +# optimizations +config BR2_PACKAGE_LIBOPENSSL_TARGET_ARCH_LINUX_PPC + bool + default y if BR2_powerpc + depends on !BR2_powerpc_401 + depends on !BR2_powerpc_403 + depends on !BR2_powerpc_405 + depends on !BR2_powerpc_405fp + depends on !BR2_powerpc_440 + depends on !BR2_powerpc_440fp + +config BR2_PACKAGE_LIBOPENSSL_TARGET_ARCH + string + # Doesn't work for thumb-only (Cortex-M?) + default "linux-armv4" if BR2_ARM_CPU_HAS_ARM + default "linux-aarch64" if BR2_aarch64 + default "linux-ppc" if BR2_PACKAGE_LIBOPENSSL_TARGET_ARCH_LINUX_PPC + default "linux-ppc64" if BR2_powerpc64 + default "linux-ppc64le" if BR2_powerpc64le + default "linux-x86" if BR2_i386 + default "linux-x86_64" if BR2_x86_64 + # no-asm is needed with generic architectures such as + # linux-generic{32,64}, see + # https://github.com/openssl/openssl/issues/9839 + default "linux-generic64 no-asm" if BR2_ARCH_IS_64 && !BR2_MIPS_NABI32 + default "linux-generic32 no-asm" + +config BR2_PACKAGE_LIBOPENSSL_BIN + bool "openssl binary" + help + Install the openssl binary and the associated helper scripts + to the target file system. This is a command line tool for + doing various cryptographic stuff. + +config BR2_PACKAGE_LIBOPENSSL_ENGINES + bool "openssl additional engines" + help + Install additional encryption engine libraries. + +endif # BR2_PACKAGE_LIBOPENSSL3 diff --git a/package/libopenssl3/libopenssl.hash b/package/libopenssl3/libopenssl.hash new file mode 100644 index 00000000..d546a0db --- /dev/null +++ b/package/libopenssl3/libopenssl.hash @@ -0,0 +1,6 @@ +# From https://www.openssl.org/source/openssl-1.1.1k.tar.gz.sha256 +sha256 892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5 openssl-1.1.1k.tar.gz +sha256 6c13d2bf38fdf31eac3ce2a347073673f5d63263398f1f69d0df4a41253e4b3e openssl-3.0.8.tar.gz + +# License files +sha256 c32913b33252e71190af2066f08115c69bc9fddadf3bf29296e20c835389841c LICENSE diff --git a/package/libopenssl3/libopenssl.mk3 b/package/libopenssl3/libopenssl.mk3 new file mode 100644 index 00000000..41d2bb48 --- /dev/null +++ b/package/libopenssl3/libopenssl.mk3 @@ -0,0 +1,158 @@ +################################################################################ +# +# libopenssl3 +# +################################################################################ + +LIBOPENSSL_VERSION = 3.0.8 +LIBOPENSSL_SITE = https://www.openssl.org/source +LIBOPENSSL_SOURCE = openssl-$(LIBOPENSSL_VERSION).tar.gz +LIBOPENSSL_LICENSE = OpenSSL or SSLeay +LIBOPENSSL_LICENSE_FILES = LICENSE +LIBOPENSSL_INSTALL_STAGING = YES +LIBOPENSSL_DEPENDENCIES = zlib +HOST_LIBOPENSSL_DEPENDENCIES = host-zlib +LIBOPENSSL_TARGET_ARCH = $(call qstrip,$(BR2_PACKAGE_LIBOPENSSL_TARGET_ARCH)) +LIBOPENSSL_CFLAGS = $(TARGET_CFLAGS) +LIBOPENSSL_PROVIDES = openssl +LIBOPENSSL_CPE_ID_VENDOR = $(LIBOPENSSL_PROVIDES) +LIBOPENSSL_CPE_ID_PRODUCT = $(LIBOPENSSL_PROVIDES) + +ifeq ($(BR2_m68k_cf),y) +# relocation truncated to fit: R_68K_GOT16O +LIBOPENSSL_CFLAGS += -mxgot +# resolves an assembler "out of range error" with blake2 and sha512 algorithms +LIBOPENSSL_CFLAGS += -DOPENSSL_SMALL_FOOTPRINT +endif + +ifeq ($(BR2_USE_MMU),) +LIBOPENSSL_CFLAGS += -DHAVE_FORK=0 -DOPENSSL_NO_MADVISE +endif + +ifeq ($(BR2_PACKAGE_HAS_CRYPTODEV),y) +LIBOPENSSL_DEPENDENCIES += cryptodev +endif + +# fixes the following build failures: +# +# - musl +# ./libcrypto.so: undefined reference to `getcontext' +# ./libcrypto.so: undefined reference to `setcontext' +# ./libcrypto.so: undefined reference to `makecontext' +# +# - uclibc: +# crypto/async/arch/../arch/async_posix.h:32:5: error: unknown type name 'ucontext_t' +# + +ifeq ($(BR2_TOOLCHAIN_USES_MUSL),y) +LIBOPENSSL_CFLAGS += -DOPENSSL_NO_ASYNC +endif +ifeq ($(BR2_TOOLCHAIN_HAS_UCONTEXT),) +LIBOPENSSL_CFLAGS += -DOPENSSL_NO_ASYNC +endif + +define HOST_LIBOPENSSL_CONFIGURE_CMDS + (cd $(@D); \ + $(HOST_CONFIGURE_OPTS) \ + ./config \ + --prefix=$(HOST_DIR) \ + --openssldir=$(HOST_DIR)/etc/ssl \ + no-tests \ + no-fuzz-libfuzzer \ + no-fuzz-afl \ + shared \ + zlib-dynamic \ + ) + $(SED) "s#-O[0-9sg]#$(HOST_CFLAGS)#" $(@D)/Makefile +endef + +define LIBOPENSSL_CONFIGURE_CMDS + (cd $(@D); \ + $(TARGET_CONFIGURE_ARGS) \ + $(TARGET_CONFIGURE_OPTS) \ + ./Configure \ + $(LIBOPENSSL_TARGET_ARCH) \ + --prefix=/usr \ + --openssldir=/etc/ssl \ + $(if $(BR2_TOOLCHAIN_HAS_LIBATOMIC),-latomic) \ + $(if $(BR2_TOOLCHAIN_HAS_THREADS),threads,no-threads) \ + $(if $(BR2_STATIC_LIBS),no-shared,shared) \ + $(if $(BR2_PACKAGE_HAS_CRYPTODEV),enable-devcryptoeng) \ + no-rc5 \ + enable-camellia \ + enable-mdc2 \ + no-tests \ + no-fuzz-libfuzzer \ + no-fuzz-afl \ + $(if $(BR2_STATIC_LIBS),zlib,zlib-dynamic) \ + $(if $(BR2_STATIC_LIBS),no-dso) \ + ) + $(SED) "s#-march=[-a-z0-9] ##" -e "s#-mcpu=[-a-z0-9] ##g" $(@D)/Makefile + $(SED) "s#-O[0-9sg]#$(LIBOPENSSL_CFLAGS)#" $(@D)/Makefile + $(SED) "s# build_tests##" $(@D)/Makefile +endef + +# libdl is not available in a static build, and this is not implied by no-dso +ifeq ($(BR2_STATIC_LIBS),y) +define LIBOPENSSL_FIXUP_STATIC_MAKEFILE + $(SED) 's#-ldl##g' $(@D)/Makefile +endef +LIBOPENSSL_POST_CONFIGURE_HOOKS += LIBOPENSSL_FIXUP_STATIC_MAKEFILE +endif + +define HOST_LIBOPENSSL_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define LIBOPENSSL_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define LIBOPENSSL_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install +endef + +define HOST_LIBOPENSSL_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) install +endef + +define LIBOPENSSL_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install + rm -rf $(TARGET_DIR)/usr/lib/ssl + rm -f $(TARGET_DIR)/usr/bin/c_rehash +endef + +# libdl has no business in a static build +ifeq ($(BR2_STATIC_LIBS),y) +define LIBOPENSSL_FIXUP_STATIC_PKGCONFIG + $(SED) 's#-ldl##' $(STAGING_DIR)/usr/lib/pkgconfig/libcrypto.pc + $(SED) 's#-ldl##' $(STAGING_DIR)/usr/lib/pkgconfig/libssl.pc + $(SED) 's#-ldl##' $(STAGING_DIR)/usr/lib/pkgconfig/openssl.pc +endef +LIBOPENSSL_POST_INSTALL_STAGING_HOOKS += LIBOPENSSL_FIXUP_STATIC_PKGCONFIG +endif + +ifeq ($(BR2_PACKAGE_PERL),) +define LIBOPENSSL_REMOVE_PERL_SCRIPTS + $(RM) -f $(TARGET_DIR)/etc/ssl/misc/{CA.pl,tsget} +endef +LIBOPENSSL_POST_INSTALL_TARGET_HOOKS += LIBOPENSSL_REMOVE_PERL_SCRIPTS +endif + +ifeq ($(BR2_PACKAGE_LIBOPENSSL_BIN),) +define LIBOPENSSL_REMOVE_BIN + $(RM) -f $(TARGET_DIR)/usr/bin/openssl + $(RM) -f $(TARGET_DIR)/etc/ssl/misc/{CA.*,c_*} +endef +LIBOPENSSL_POST_INSTALL_TARGET_HOOKS += LIBOPENSSL_REMOVE_BIN +endif + +ifneq ($(BR2_PACKAGE_LIBOPENSSL_ENGINES),y) +define LIBOPENSSL_REMOVE_LIBOPENSSL_ENGINES + rm -rf $(TARGET_DIR)/usr/lib/engines-1.1 +endef +LIBOPENSSL_POST_INSTALL_TARGET_HOOKS += LIBOPENSSL_REMOVE_LIBOPENSSL_ENGINES +endif + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/liboping/0001-ping_host_add-Decrease-buffer-size-to-make-GCC-s-truncation-check-happy.patch b/package/liboping/0001-ping_host_add-Decrease-buffer-size-to-make-GCC-s-truncation-check-happy.patch new file mode 100644 index 00000000..b0aca8a7 --- /dev/null +++ b/package/liboping/0001-ping_host_add-Decrease-buffer-size-to-make-GCC-s-truncation-check-happy.patch @@ -0,0 +1,31 @@ +From 18ca43507b351f339ff23062541ee8d58e813a53 Mon Sep 17 00:00:00 2001 +From: Florian Forster +Date: Sun, 29 Jul 2018 14:34:19 +0200 +Subject: [PATCH] ping_host_add: Decrease buffer size to make GCC's truncation + check happy. + +Fixes: #38 +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/octo/liboping/commit/18ca43507b351f339ff23062541ee8d58e813a53] +--- + src/liboping.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/src/liboping.c b/src/liboping.c +index 5253e8c..2470988 100644 +--- a/src/liboping.c ++++ b/src/liboping.c +@@ -1636,10 +1636,8 @@ int ping_host_add (pingobj_t *obj, const char *host) + } + else + { +- char errmsg[PING_ERRMSG_LEN]; +- +- snprintf (errmsg, PING_ERRMSG_LEN, "Unknown `ai_family': %i", ai_ptr->ai_family); +- errmsg[PING_ERRMSG_LEN - 1] = '\0'; ++ char errmsg[64]; ++ snprintf (errmsg, sizeof(errmsg), "Unknown `ai_family': %d", ai_ptr->ai_family); + + dprintf ("%s", errmsg); + ping_set_error (obj, "getaddrinfo", errmsg); diff --git a/package/liboping/Config.in b/package/liboping/Config.in new file mode 100644 index 00000000..1d2de318 --- /dev/null +++ b/package/liboping/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBOPING + bool "liboping" + help + liboping is a C library to generate ICMP echo requests, + better known as "ping packets". + + http://noping.cc/ diff --git a/package/liboping/liboping.hash b/package/liboping/liboping.hash new file mode 100644 index 00000000..926b234f --- /dev/null +++ b/package/liboping/liboping.hash @@ -0,0 +1,5 @@ +# From http://noping.cc/#download +sha256 eb38aa93f93e8ab282d97e2582fbaea88b3f889a08cbc9dbf20059c3779d5cd8 liboping-1.10.0.tar.bz2 + +# Hash for license file: +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/liboping/liboping.mk b/package/liboping/liboping.mk new file mode 100644 index 00000000..a4541cb3 --- /dev/null +++ b/package/liboping/liboping.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# liboping +# +################################################################################ + +LIBOPING_VERSION = 1.10.0 +LIBOPING_SITE = http://noping.cc/files +LIBOPING_SOURCE = liboping-$(LIBOPING_VERSION).tar.bz2 +LIBOPING_INSTALL_STAGING = YES +LIBOPING_CONF_OPTS = --without-perl-bindings +LIBOPING_LICENSE = LGPL-2.1+, GPL-2.0 +LIBOPING_LICENSE_FILES = COPYING +LIBOPING_CPE_ID_VENDOR = noping + +ifeq ($(BR2_PACKAGE_NCURSES),y) +LIBOPING_DEPENDENCIES += ncurses +LIBOPING_CONF_OPTS += --with-ncurses +else +LIBOPING_CONF_OPTS += --without-ncurses +endif + +$(eval $(autotools-package)) diff --git a/package/libopusenc/Config.in b/package/libopusenc/Config.in new file mode 100644 index 00000000..4b29f9b8 --- /dev/null +++ b/package/libopusenc/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBOPUSENC + bool "libopusenc" + select BR2_PACKAGE_OPUS + help + The libopusenc library provides a high-level API for + encoding opus audio files and live streams. + + http://opus-codec.org diff --git a/package/libopusenc/libopusenc.hash b/package/libopusenc/libopusenc.hash new file mode 100644 index 00000000..bdb4cf8f --- /dev/null +++ b/package/libopusenc/libopusenc.hash @@ -0,0 +1,3 @@ +# From http://downloads.xiph.org/releases/opus/SHA256SUMS.txt +sha256 8298db61a8d3d63e41c1a80705baa8ce9ff3f50452ea7ec1c19a564fe106cbb9 libopusenc-0.2.1.tar.gz +sha256 93b17ab56b8230127fea532be0dcb4e6d71e66ab5e8ce5d6ae8785d7288b164f COPYING diff --git a/package/libopusenc/libopusenc.mk b/package/libopusenc/libopusenc.mk new file mode 100644 index 00000000..3b4dc0e7 --- /dev/null +++ b/package/libopusenc/libopusenc.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libopusenc +# +################################################################################ + +LIBOPUSENC_VERSION = 0.2.1 +LIBOPUSENC_SITE = https://downloads.xiph.org/releases/opus +LIBOPUSENC_LICENSE = BSD-3-Clause +LIBOPUSENC_LICENSE_FILES = COPYING +LIBOPUSENC_INSTALL_STAGING = YES +LIBOPUSENC_DEPENDENCIES = host-pkgconf opus + +LIBOPUSENC_CONF_OPTS = --disable-examples + +$(eval $(autotools-package)) diff --git a/package/libosip2/Config.in b/package/libosip2/Config.in new file mode 100644 index 00000000..5b1d3d26 --- /dev/null +++ b/package/libosip2/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LIBOSIP2 + bool "libosip2" + help + GNU SIP (Session Initiation Protocol) + This library aims to provide multimedia and telecom software + developers an easy and powerful interface to initiate and + control SIP based sessions in their applications. + SIP is a open standard replacement from IETF for H323. + + http://www.gnu.org/software/osip/ diff --git a/package/libosip2/libosip2.hash b/package/libosip2/libosip2.hash new file mode 100644 index 00000000..400158cd --- /dev/null +++ b/package/libosip2/libosip2.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +sha256 4fb48b2ea568bb41c6244b0df2bb7175849ca93e84be53ceb268fdf9351bb375 libosip2-5.2.0.tar.gz + +# Hash for license file: +sha256 8d9e95ed0e48df46dc758eb0d86df611f771eab4eed94bebb77dca87f1c897de COPYING diff --git a/package/libosip2/libosip2.mk b/package/libosip2/libosip2.mk new file mode 100644 index 00000000..b86a7247 --- /dev/null +++ b/package/libosip2/libosip2.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# libosip2 +# +################################################################################ + +LIBOSIP2_VERSION = 5.2.0 +LIBOSIP2_SITE = $(BR2_GNU_MIRROR)/osip +LIBOSIP2_INSTALL_STAGING = YES +LIBOSIP2_LICENSE = LGPL-2.1+ +LIBOSIP2_LICENSE_FILES = COPYING +LIBOSIP2_CPE_ID_VENDOR = gnu +LIBOSIP2_CPE_ID_PRODUCT = osip + +ifeq ($(BR2_arc),y) +# toolchain __arc__ define conflicts with libosip2 source +LIBOSIP2_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) -U__arc__" +endif + +LIBOSIP2_CONF_OPTS = \ + --enable-mt=$(if $(BR2_TOOLCHAIN_HAS_THREADS),yes,no) + +$(eval $(autotools-package)) diff --git a/package/libostree/Config.in b/package/libostree/Config.in new file mode 100644 index 00000000..14ae4da4 --- /dev/null +++ b/package/libostree/Config.in @@ -0,0 +1,24 @@ +config BR2_PACKAGE_LIBOSTREE + bool "libostree" + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgpgme, libgpg-error + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_USE_MMU # e2fsprogs, libglib2, libgpgme + # doesn't build with musl due to lack of TEMP_FAILURE_RETRY() + depends on !BR2_TOOLCHAIN_USES_MUSL + select BR2_PACKAGE_E2FSPROGS + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBGPG_ERROR + select BR2_PACKAGE_LIBGPGME + select BR2_PACKAGE_XZ + help + OSTree is an upgrade system for Linux-based operating + systems. + + https://ostree.readthedocs.io/en/latest/ + +comment "libostree needs a uClibc or glibc toolchain w/ threads, dynamic library, wchar" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS \ + || !BR2_USE_WCHAR || BR2_TOOLCHAIN_USES_MUSL + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS + depends on BR2_USE_MMU diff --git a/package/libostree/libostree.hash b/package/libostree/libostree.hash new file mode 100644 index 00000000..751feb6b --- /dev/null +++ b/package/libostree/libostree.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 fdaa5992d0a6f62157152355449ac8476c50df6602be398e9ad10438cc1e679b libostree-2020.8.tar.xz +sha256 b7993225104d90ddd8024fd838faf300bea5e83d91203eab98e29512acebd69c COPYING diff --git a/package/libostree/libostree.mk b/package/libostree/libostree.mk new file mode 100644 index 00000000..7c887ebe --- /dev/null +++ b/package/libostree/libostree.mk @@ -0,0 +1,95 @@ +################################################################################ +# +# libostree +# +################################################################################ + +LIBOSTREE_VERSION = 2020.8 +LIBOSTREE_SOURCE = libostree-$(LIBOSTREE_VERSION).tar.xz +LIBOSTREE_SITE = https://github.com/ostreedev/ostree/releases/download/v$(LIBOSTREE_VERSION) + +LIBOSTREE_LICENSE = LGPL-2.0+ +LIBOSTREE_LICENSE_FILES = COPYING +LIBOSTREE_DEPENDENCIES = e2fsprogs host-bison host-pkgconf libglib2 libgpg-error libgpgme xz +LIBOSTREE_INSTALL_STAGING = YES + +LIBOSTREE_CONF_ENV = \ + GPG_ERROR_CONFIG=$(STAGING_DIR)/usr/bin/gpg-error-config +LIBOSTREE_CONF_OPTS += \ + --with-gpgme-prefix=$(STAGING_DIR)/usr \ + --disable-gtk-doc \ + --disable-gtk-doc-html \ + --disable-gtk-doc-pdf \ + --disable-man + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +LIBOSTREE_DEPENDENCIES += gobject-introspection +LIBOSTREE_CONF_OPTS += --enable-introspection +LIBOSTREE_MAKE_OPTS = INTROSPECTION_SCANNER_ENV= +else +LIBOSTREE_CONF_OPTS += --disable-introspection +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +LIBOSTREE_CONF_OPTS += --with-openssl +LIBOSTREE_DEPENDENCIES += openssl +else +LIBOSTREE_CONF_OPTS += --without-openssl +endif + +# Avahi support needs libavahi-client, which is built by avahi if avahi-daemon +# and dbus is selected. Since there is no BR2_PACKAGE_LIBAVAHI_CLIENT config +# option yet, use the avahi-daemon and dbus config symbols to check for +# libavahi-client. +ifeq ($(BR2_PACKAGE_AVAHI_DAEMON)$(BR2_PACKAGE_DBUS),yy) +LIBOSTREE_CONF_OPTS += --with-avahi +LIBOSTREE_DEPENDENCIES += avahi +else +LIBOSTREE_CONF_OPTS += --without-avahi +endif + +#cURL support depends on libsoup +ifeq ($(BR2_PACKAGE_LIBSOUP),y) +LIBOSTREE_CONF_OPTS += --with-soup +LIBOSTREE_DEPENDENCIES += libsoup +ifeq ($(BR2_PACKAGE_LIBCURL),y) +LIBOSTREE_CONF_OPTS += --with-curl +LIBOSTREE_DEPENDENCIES += libcurl +else +LIBOSTREE_CONF_OPTS += --without-curl +endif +else +LIBOSTREE_CONF_OPTS += --without-soup --without-curl +endif + +ifeq ($(BR2_PACKAGE_LIBARCHIVE),y) +LIBOSTREE_CONF_OPTS += --with-libarchive +LIBOSTREE_DEPENDENCIES += libarchive +else +LIBOSTREE_CONF_OPTS += --without-libarchive +endif + +ifeq ($(BR2_PACKAGE_LIBFUSE),y) +LIBOSTREE_CONF_OPTS += --enable-rofiles-fuse +LIBOSTREE_DEPENDENCIES += libfuse +else +LIBOSTREE_CONF_OPTS += --disable-rofiles-fuse +endif + +ifeq ($(BR2_PACKAGE_LIBSELINUX),y) +LIBOSTREE_CONF_OPTS += --with-selinux +LIBOSTREE_DEPENDENCIES += libselinux +else +LIBOSTREE_CONF_OPTS += --without-selinux +endif + +ifeq ($(BR2_INIT_SYSTEMD),y) +LIBOSTREE_CONF_OPTS += \ + --with-libsystemd \ + --with-systemdsystemunitdir=/usr/lib/systemd/system +LIBOSTREE_DEPENDENCIES += systemd +else +LIBOSTREE_CONF_OPTS += --without-libsystemd +endif + +$(eval $(autotools-package)) diff --git a/package/libp11/Config.in b/package/libp11/Config.in new file mode 100644 index 00000000..4d7ff568 --- /dev/null +++ b/package/libp11/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LIBP11 + bool "libp11" + depends on !BR2_STATIC_LIBS # dlopen + select BR2_PACKAGE_OPENSSL + help + OpenSSL engine for PKCS#11 modules. Part of the OpenSC + project. + + https://github.com/OpenSC/OpenSC/wiki + +comment "libp11 needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/libp11/Config.in.host b/package/libp11/Config.in.host new file mode 100644 index 00000000..8da081f8 --- /dev/null +++ b/package/libp11/Config.in.host @@ -0,0 +1,7 @@ +config BR2_PACKAGE_HOST_LIBP11 + bool "host libp11" + help + OpenSSL engine for PKCS#11 modules. Part of the OpenSC + project. + + https://github.com/OpenSC/OpenSC/wiki diff --git a/package/libp11/libp11.hash b/package/libp11/libp11.hash new file mode 100644 index 00000000..52d73d42 --- /dev/null +++ b/package/libp11/libp11.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 57d47a12a76fd92664ae30032cf969284ebac1dfc25bf824999d74b016d51366 libp11-0.4.11.tar.gz +sha256 d80c9d084ebfb50ea1ed91bfbc2410d6ce542097a32c43b00781b83adcb8c77f COPYING diff --git a/package/libp11/libp11.mk b/package/libp11/libp11.mk new file mode 100644 index 00000000..45a718ee --- /dev/null +++ b/package/libp11/libp11.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# libp11 +# +################################################################################ + +LIBP11_VERSION = 0.4.11 +LIBP11_SITE = https://github.com/OpenSC/libp11/releases/download/libp11-$(LIBP11_VERSION) +LIBP11_DEPENDENCIES = openssl host-pkgconf +LIBP11_INSTALL_STAGING = YES +LIBP11_LICENSE = LGPL-2.1+ +LIBP11_LICENSE_FILES = COPYING + +# pkg-config returns a libcrypto enginesdir prefixed with the sysroot, +# so let's rip it out. +LIBP11_CONF_OPTS = \ + --with-enginesdir=`$(PKG_CONFIG_HOST_BINARY) --variable enginesdir libcrypto | xargs readlink -f | sed 's%^$(STAGING_DIR)%%'` + +ifeq ($(BR2_PACKAGE_P11_KIT),y) +LIBP11_CONF_OPTS += --with-pkcs11-module=/usr/lib/p11-kit-proxy.so +endif + +HOST_LIBP11_DEPENDENCIES = host-pkgconf host-openssl + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libpagekite/Config.in b/package/libpagekite/Config.in new file mode 100644 index 00000000..0ecf4f97 --- /dev/null +++ b/package/libpagekite/Config.in @@ -0,0 +1,24 @@ +config BR2_PACKAGE_LIBPAGEKITE + bool "libpagekite" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_LIBEV + select BR2_PACKAGE_OPENSSL + help + PageKite is a protocol for dynamic, tunneled reverse proxying + of arbitrary TCP byte streams. It is particularly well suited + for making a HTTP server on a device without a public IP + address visible to the wider Internet, but can also be used + for a variety of other things, including SSH access. + + libpagekite is a tight, fast implementation of the PageKite + protocol in C, suitable for high-performance or embedded + applications. + + In addition to the libpagekite library, this package installs + the pagekitec, sshkite and httpkite tools. + + https://pagekite.net + https://github.com/pagekite/libpagekite + +comment "libpagekite needs a toolchain with threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libpagekite/libpagekite.hash b/package/libpagekite/libpagekite.hash new file mode 100644 index 00000000..8716b991 --- /dev/null +++ b/package/libpagekite/libpagekite.hash @@ -0,0 +1,7 @@ +# Locally calculated +sha256 c812815aae6f100212b7d6f662370a0634151fabb59f028126a59c4083a6d26d libpagekite-0.91.190530.tar.gz + +# License files, locally calculated +sha256 ba443b9c9d4273d06aae3e147e9ad1ec199cc9c23455f486a039536d47f57eed doc/COPYING.md +sha256 4a271d0bb6bb6e0bac880efddb46da73e6df3dcf0d9ca08a945a232f8ab882ef doc/LICENSE-2.0.txt +sha256 8e0f770cabe772d67d36469f6bf413afd2dcfa6ac37acfc65f770cf3a134106d doc/AGPLv3.txt diff --git a/package/libpagekite/libpagekite.mk b/package/libpagekite/libpagekite.mk new file mode 100644 index 00000000..60b62f5c --- /dev/null +++ b/package/libpagekite/libpagekite.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# libpagekite +# +################################################################################ + +LIBPAGEKITE_VERSION = 0.91.190530 +LIBPAGEKITE_SITE = $(call github,pagekite,libpagekite,v$(LIBPAGEKITE_VERSION)) + +# pkrelay is AGPL-3.0+ but is not built +LIBPAGEKITE_LICENSE = Apache-2.0 or AGPL-3.0+ +LIBPAGEKITE_LICENSE_FILES = doc/COPYING.md doc/LICENSE-2.0.txt doc/AGPLv3.txt + +LIBPAGEKITE_DEPENDENCIES = host-pkgconf libev openssl +LIBPAGEKITE_INSTALL_STAGING = YES + +# Sources from git, no configure included +LIBPAGEKITE_AUTORECONF = YES + +LIBPAGEKITE_CONF_OPTS = \ + --with-openssl \ + --without-tests \ + --with-os-libev \ + --without-java \ + --without-agpl-relay \ + --without-ds-logfmt + +$(eval $(autotools-package)) diff --git a/package/libpam-nfc/Config.in b/package/libpam-nfc/Config.in new file mode 100644 index 00000000..ce3a3eeb --- /dev/null +++ b/package/libpam-nfc/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBPAM_NFC + bool "libpam-nfc" + select BR2_PACKAGE_LIBNFC + help + NFC-based PAM authentification module. + + https://github.com/nfc-tools/pam_nfc diff --git a/package/libpam-nfc/libpam-nfc.hash b/package/libpam-nfc/libpam-nfc.hash new file mode 100644 index 00000000..27896ef4 --- /dev/null +++ b/package/libpam-nfc/libpam-nfc.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 f44273944f1ecc78b10b65147328860836b60fe4bb8c39819e32199f2870d48b libpam-nfc-bb762e0e649195110e015ffb605c4375e927c437.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/libpam-nfc/libpam-nfc.mk b/package/libpam-nfc/libpam-nfc.mk new file mode 100644 index 00000000..d4f6d446 --- /dev/null +++ b/package/libpam-nfc/libpam-nfc.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# libpam-nfc +# +################################################################################ + +LIBPAM_NFC_VERSION = bb762e0e649195110e015ffb605c4375e927c437 +LIBPAM_NFC_SITE = $(call github,nfc-tools,pam_nfc,$(LIBPAM_NFC_VERSION)) +LIBPAM_NFC_LICENSE = GPL-2.0 +LIBPAM_NFC_LICENSE_FILES = COPYING +LIBPAM_NFC_DEPENDENCIES = linux-pam libnfc +# Fetching from github, we need to generate the configure script +LIBPAM_NFC_AUTORECONF = YES +LIBPAM_NFC_INSTALL_STAGING = YES + +LIBPAM_NFC_CONF_OPTS = \ + --with-pam-dir=/lib/security + +# libpam breaks with parallel build, but is very fast to build. +LIBPAM_NFC_MAKE = $(MAKE1) + +$(eval $(autotools-package)) diff --git a/package/libpam-radius-auth/Config.in b/package/libpam-radius-auth/Config.in new file mode 100644 index 00000000..a0dec148 --- /dev/null +++ b/package/libpam-radius-auth/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LIBPAM_RADIUS_AUTH + bool "libpam-radius-auth" + help + This is the PAM to RADIUS authentication module. It allows + any PAM-capable machine to become a RADIUS client for + authentication and accounting requests. You will need a + RADIUS server to perform the actual authentication. + + http://freeradius.org/pam_radius_auth/ diff --git a/package/libpam-radius-auth/libpam-radius-auth.hash b/package/libpam-radius-auth/libpam-radius-auth.hash new file mode 100644 index 00000000..3e8dc025 --- /dev/null +++ b/package/libpam-radius-auth/libpam-radius-auth.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking PGP signature +sha256 742d79fc39824726c098e746bd3dc3484f983f5ee082c621c1e848b2c3725305 pam_radius-1.4.0.tar.gz + +# Hash for license file: +sha256 67f82e045cf7acfef853ea0f426575a8359161a0a325e19f02b529a87c4b6c34 LICENSE diff --git a/package/libpam-radius-auth/libpam-radius-auth.mk b/package/libpam-radius-auth/libpam-radius-auth.mk new file mode 100644 index 00000000..184e48d3 --- /dev/null +++ b/package/libpam-radius-auth/libpam-radius-auth.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# libpam-radius-auth +# +################################################################################ + +LIBPAM_RADIUS_AUTH_VERSION = 1.4.0 +LIBPAM_RADIUS_AUTH_SITE = ftp://ftp.freeradius.org/pub/radius +LIBPAM_RADIUS_AUTH_SOURCE = pam_radius-$(LIBPAM_RADIUS_AUTH_VERSION).tar.gz +LIBPAM_RADIUS_AUTH_DEPENDENCIES = linux-pam +LIBPAM_RADIUS_AUTH_INSTALL_STAGING = YES +LIBPAM_RADIUS_AUTH_LICENSE = GPL-2.0+ +LIBPAM_RADIUS_AUTH_LICENSE_FILES = LICENSE +# While autoconf is used for configuration, the Makefile is +# hand-written, so we need to pass CC, LD, CFLAGS at build time. +LIBPAM_RADIUS_AUTH_MAKE_ENV = $(TARGET_CONFIGURE_OPTS) + +define LIBPAM_RADIUS_AUTH_INSTALL_STAGING_CMDS + mkdir -p $(STAGING_DIR)/lib/security/ + cp -dpfr $(@D)/pam_radius_auth.so* $(STAGING_DIR)/lib/security/ +endef + +define LIBPAM_RADIUS_AUTH_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/lib/security/ + cp -dpfr $(@D)/pam_radius_auth.so* $(TARGET_DIR)/lib/security/ +endef + +$(eval $(autotools-package)) diff --git a/package/libpam-tacplus/0001-Add-an-option-to-disable-Werror.patch b/package/libpam-tacplus/0001-Add-an-option-to-disable-Werror.patch new file mode 100644 index 00000000..80da2f35 --- /dev/null +++ b/package/libpam-tacplus/0001-Add-an-option-to-disable-Werror.patch @@ -0,0 +1,55 @@ +From 88c78901503d50d0a62d85c96994ca4d67ab61e0 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Fri, 13 Nov 2020 20:50:27 +0100 +Subject: [PATCH] Add an option to disable -Werror + +Allow the user to disable -Werror to avoid the following build failure +with gcc 4.8: + +libtac/lib/magic.c:138:13: error: ignoring return value of 'read', declared with attribute warn_unused_result [-Werror=unused-result] + (void) read(rfd, &seed, sizeof(seed)); + ^ + +Fixes: + - http://autobuild.buildroot.org/results/5c17226f12eba104d907693ec37fc101cc6d447f + +Signed-off-by: Fabrice Fontaine +--- + Makefile.am | 6 +++++- + configure.ac | 3 +++ + 2 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index 0be3cdb..4a137e9 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -8,7 +8,11 @@ + + ACLOCAL_AMFLAGS = -I config + AUTOMAKE_OPTIONS = subdir-objects +-AM_CFLAGS = -Wall -Wextra -Werror ++AM_CFLAGS = -Wall -Wextra ++ ++if ENABLE_WERROR ++AM_CFLAGS += -Werror ++endif + + if TACC + bin_PROGRAMS = tacc +diff --git a/configure.ac b/configure.ac +index d0c5eba..dd8a966 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -100,6 +100,9 @@ AC_SUBST(pamdir) + AC_ARG_ENABLE(doc, AS_HELP_STRING([--disable-doc], [do not build docs])) + AM_CONDITIONAL(DOC, test "x$enable_doc" != "xno") + ++AC_ARG_ENABLE(werror, AS_HELP_STRING([--disable-werror], [do not build with -Werror])) ++AM_CONDITIONAL(ENABLE_WERROR, test "x$enable_werror" != "xno") ++ + dnl -------------------------------------------------------------------- + dnl Switch for run-time debugging + AC_ARG_ENABLE(runtime-debugging, [AS_HELP_STRING([--enable-runtime-debugging], +-- +2.28.0 + diff --git a/package/libpam-tacplus/Config.in b/package/libpam-tacplus/Config.in new file mode 100644 index 00000000..2d80809d --- /dev/null +++ b/package/libpam-tacplus/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LIBPAM_TACPLUS + bool "libpam-tacplus" + help + TACACS+ protocol client library and PAM module in C. This + PAM module support authentication, authorization (account + management) and accounting (session management)performed + using TACACS+ protocol designed by Cisco. + + https://github.com/jeroennijhof/pam_tacplus diff --git a/package/libpam-tacplus/libpam-tacplus.hash b/package/libpam-tacplus/libpam-tacplus.hash new file mode 100644 index 00000000..084a3e54 --- /dev/null +++ b/package/libpam-tacplus/libpam-tacplus.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 73961800dc0d5e422751ad4c9f09b1863ab33e381e0bdb2a1d0343dcfc30e44e libpam-tacplus-1.6.1.tar.gz +sha256 b2b961f07e97c4fb78074276da304ea36b85dc299aae5efb79080cedaea3d5ac COPYING diff --git a/package/libpam-tacplus/libpam-tacplus.mk b/package/libpam-tacplus/libpam-tacplus.mk new file mode 100644 index 00000000..ff0dce9c --- /dev/null +++ b/package/libpam-tacplus/libpam-tacplus.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# libpam-tacplus +# +################################################################################ + +LIBPAM_TACPLUS_VERSION = 1.6.1 +LIBPAM_TACPLUS_SITE = $(call github,jeroennijhof,pam_tacplus,v$(LIBPAM_TACPLUS_VERSION)) +LIBPAM_TACPLUS_LICENSE = GPL-2.0+ +LIBPAM_TACPLUS_LICENSE_FILES = COPYING +LIBPAM_TACPLUS_CPE_ID_VENDOR = pam_tacplus_project +LIBPAM_TACPLUS_CPE_ID_PRODUCT = pam_tacplus +LIBPAM_TACPLUS_DEPENDENCIES = \ + linux-pam \ + $(if $(BR2_PACKAGE_OPENSSL),openssl) +# Fetching from github, we need to generate the configure script +# 0001-Add-an-option-to-disable-Werror.patch +LIBPAM_TACPLUS_AUTORECONF = YES +LIBPAM_TACPLUS_INSTALL_STAGING = YES +LIBPAM_TACPLUS_CONF_ENV = \ + ax_cv_check_cflags___fstack_protector_all=$(if $(BR2_TOOLCHAIN_HAS_SSP),yes,no) +LIBPAM_TACPLUS_CONF_OPTS = --disable-werror + +$(eval $(autotools-package)) diff --git a/package/libpcap/Config.in b/package/libpcap/Config.in new file mode 100644 index 00000000..a5f64bdc --- /dev/null +++ b/package/libpcap/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBPCAP + bool "libpcap" + select BR2_PACKAGE_BLUEZ5_UTILS_HEADERS if BR2_PACKAGE_BLUEZ5_UTILS + help + A system-independent library for user-level network packet + capture. + + http://www.tcpdump.org/ diff --git a/package/libpcap/libpcap.hash b/package/libpcap/libpcap.hash new file mode 100644 index 00000000..84c8e405 --- /dev/null +++ b/package/libpcap/libpcap.hash @@ -0,0 +1,6 @@ +# Locally calculated after checking pgp signature +# https://www.tcpdump.org/release/libpcap-1.10.1.tar.gz.sig +sha256 ed285f4accaf05344f90975757b3dbfe772ba41d1c401c2648b7fa45b711bdd4 libpcap-1.10.1.tar.gz + +# Hash for license file: +sha256 8a54594d257e14a5260ac770f1633516cb51e3fc28c40136ce2697014eda7afd LICENSE diff --git a/package/libpcap/libpcap.mk b/package/libpcap/libpcap.mk new file mode 100644 index 00000000..1e02ec56 --- /dev/null +++ b/package/libpcap/libpcap.mk @@ -0,0 +1,52 @@ +################################################################################ +# +# libpcap +# +################################################################################ + +LIBPCAP_VERSION = 1.10.1 +LIBPCAP_SITE = https://www.tcpdump.org/release +LIBPCAP_LICENSE = BSD-3-Clause +LIBPCAP_LICENSE_FILES = LICENSE +LIBPCAP_CPE_ID_VENDOR = tcpdump +LIBPCAP_INSTALL_STAGING = YES +LIBPCAP_DEPENDENCIES = host-flex host-bison host-pkgconf + +# ac_cv_prog_cc_c99 is required for BR2_USE_WCHAR=n because the C99 test +# provided by autoconf relies on wchar_t. +LIBPCAP_CONF_ENV = \ + ac_cv_header_linux_wireless_h=yes \ + ac_cv_prog_cc_c99=-std=gnu99 \ + CFLAGS="$(LIBPCAP_CFLAGS)" +LIBPCAP_CFLAGS = $(TARGET_CFLAGS) +LIBPCAP_CONF_OPTS = --disable-yydebug --with-pcap=linux --without-dag \ + --without-dpdk +# Disable dbus to break recursive dependencies +LIBPCAP_CONF_OPTS += --disable-dbus +LIBPCAP_CONFIG_SCRIPTS = pcap-config + +# Omit -rpath from pcap-config output +define LIBPCAP_CONFIG_REMOVE_RPATH + $(SED) 's/^V_RPATH_OPT=.*/V_RPATH_OPT=""/g' $(@D)/pcap-config +endef +LIBPCAP_POST_BUILD_HOOKS = LIBPCAP_CONFIG_REMOVE_RPATH + +ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS_HEADERS),y) +LIBPCAP_DEPENDENCIES += bluez5_utils-headers +else +LIBPCAP_CONF_OPTS += --disable-bluetooth +endif + +ifeq ($(BR2_PACKAGE_LIBNL),y) +LIBPCAP_DEPENDENCIES += libnl +LIBPCAP_CONF_OPTS += --with-libnl +else +LIBPCAP_CONF_OPTS += --without-libnl +endif + +# microblaze/sparc/sparc64 need -fPIC instead of -fpic +ifeq ($(BR2_microblaze)$(BR2_sparc)$(BR2_sparc64),y) +LIBPCAP_CFLAGS += -fPIC +endif + +$(eval $(autotools-package)) diff --git a/package/libpciaccess/0001-pciaccess.pc.in-add-Libs.Private.patch b/package/libpciaccess/0001-pciaccess.pc.in-add-Libs.Private.patch new file mode 100644 index 00000000..e520dd03 --- /dev/null +++ b/package/libpciaccess/0001-pciaccess.pc.in-add-Libs.Private.patch @@ -0,0 +1,28 @@ +From e1f9fc0a11559c1200005c4bfe34cd217ec117b4 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Fri, 25 Oct 2019 19:03:32 +0200 +Subject: [PATCH] pciaccess.pc.in: add Libs.Private + +Add Libs.Private in pciaccess.pc.in so applications that wants to link +statically with pciaccess will know that they have to link with its +dependencies such as -lz + +Signed-off-by: Fabrice Fontaine +[Upstream status: +https://gitlab.freedesktop.org/xorg/lib/libpciaccess/merge_requests/10] +--- + pciaccess.pc.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/pciaccess.pc.in b/pciaccess.pc.in +index 706c5f7..c2da3d9 100644 +--- a/pciaccess.pc.in ++++ b/pciaccess.pc.in +@@ -8,3 +8,4 @@ Description: Library providing generic access to the PCI bus and devices. + Version: @PACKAGE_VERSION@ + Cflags: -I${includedir} + Libs: -L${libdir} -lpciaccess ++Libs.Private: @PCIACCESS_LIBS@ +-- +2.23.0 + diff --git a/package/libpciaccess/Config.in b/package/libpciaccess/Config.in new file mode 100644 index 00000000..1f5d5e6b --- /dev/null +++ b/package/libpciaccess/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBPCIACCESS + bool "libpciaccess" + help + X.Org libpciaccess + + Generic PCI access library + + https://gitlab.freedesktop.org/xorg/lib/libpciaccess diff --git a/package/libpciaccess/libpciaccess.hash b/package/libpciaccess/libpciaccess.hash new file mode 100644 index 00000000..23823bb0 --- /dev/null +++ b/package/libpciaccess/libpciaccess.hash @@ -0,0 +1,7 @@ +# From https://lists.x.org/archives/xorg-announce/2019-July/003014.html +md5 b34e2cbdd6aa8f9cc3fa613fd401a6d6 libpciaccess-0.16.tar.bz2 +sha1 ffaa13f2df5f822da1089b55223b217c142ef919 libpciaccess-0.16.tar.bz2 +sha256 214c9d0d884fdd7375ec8da8dcb91a8d3169f263294c9a90c575bf1938b9f489 libpciaccess-0.16.tar.bz2 +sha512 2f250048a270dfc0823d4bdd613aa272c58a80eaafd922850f56c4b6f7a45a263ed4cf521b52b49f04484ea44ebefb7407d079aa058318a5751ffb181e38fed1 libpciaccess-0.16.tar.bz2 +# Hash for license file: +sha256 47012fd746980d1712ac4f3841ab6164bda1d2b84880760e45dbe1e1dc07f608 COPYING diff --git a/package/libpciaccess/libpciaccess.mk b/package/libpciaccess/libpciaccess.mk new file mode 100644 index 00000000..d9a3a4e4 --- /dev/null +++ b/package/libpciaccess/libpciaccess.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# libpciaccess +# +################################################################################ + +LIBPCIACCESS_VERSION = 0.16 +LIBPCIACCESS_SOURCE = libpciaccess-$(LIBPCIACCESS_VERSION).tar.bz2 +LIBPCIACCESS_SITE = http://xorg.freedesktop.org/releases/individual/lib +LIBPCIACCESS_LICENSE = MIT +LIBPCIACCESS_LICENSE_FILES = COPYING +LIBPCIACCESS_INSTALL_STAGING = YES + +ifeq ($(BR2_PACKAGE_ZLIB),y) +LIBPCIACCESS_CONF_OPTS += --with-zlib +LIBPCIACCESS_DEPENDENCIES += zlib +else +LIBPCIACCESS_CONF_OPTS += --without-zlib +endif + +$(eval $(autotools-package)) diff --git a/package/libpfm4/Config.in b/package/libpfm4/Config.in new file mode 100644 index 00000000..441c6dee --- /dev/null +++ b/package/libpfm4/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBPFM4 + bool "libpfm4" + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + help + A helper library to help encode Performance Events to use with + Operating system kernels performance monitoring interfaces. + + http://perfmon2.sourceforge.net/ + +comment "libpfm4 needs a toolchain w/ NPTL" + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL diff --git a/package/libpfm4/libpfm4.hash b/package/libpfm4/libpfm4.hash new file mode 100644 index 00000000..bdc7806a --- /dev/null +++ b/package/libpfm4/libpfm4.hash @@ -0,0 +1,6 @@ +# From http://sourceforge.net/projects/perfmon2/files/libpfm4/: +sha1 112bced9a67d565ff0ce6c2bb90452516d1183e5 libpfm-4.11.0.tar.gz +md5 4811c1d99b95752b4ba53b89a9389ec3 libpfm-4.11.0.tar.gz +# Locally calculated +sha256 5da5f8872bde14b3634c9688d980f68bda28b510268723cc12973eedbab9fecc libpfm-4.11.0.tar.gz +sha256 beef323d68fc5db9c67b20e8e9de7ccde371d20cdbcdd686804055b18b926d90 COPYING diff --git a/package/libpfm4/libpfm4.mk b/package/libpfm4/libpfm4.mk new file mode 100644 index 00000000..2144766d --- /dev/null +++ b/package/libpfm4/libpfm4.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# libpfm4 +# +################################################################################ + +LIBPFM4_VERSION = 4.11.0 +LIBPFM4_SOURCE = libpfm-$(LIBPFM4_VERSION).tar.gz +LIBPFM4_SITE = http://downloads.sourceforge.net/project/perfmon2/libpfm4 +LIBPFM4_LICENSE = libpfm4 license +LIBPFM4_LICENSE_FILES = COPYING +LIBPFM4_INSTALL_STAGING = YES + +LIBPFM4_FLAGS = SYS=Linux ARCH=$(BR2_ARCH) \ + CC="$(TARGET_CC)" LDCONFIG=true \ + CONFIG_PFMLIB_SHARED=$(if $(BR2_STATIC_LIBS),n,y) \ + DBG= \ + EXAMPLE_DIRS= + +define LIBPFM4_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(LIBPFM4_FLAGS) +endef + +define LIBPFM4_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(LIBPFM4_FLAGS) PREFIX=$(STAGING_DIR)/usr install +endef + +define LIBPFM4_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(LIBPFM4_FLAGS) PREFIX=$(TARGET_DIR)/usr install +endef + +$(eval $(generic-package)) diff --git a/package/libphidget/Config.in b/package/libphidget/Config.in new file mode 100644 index 00000000..ab1e3e31 --- /dev/null +++ b/package/libphidget/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_LIBPHIDGET + bool "libphidget" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_LIBUSB + help + The libphidget library provides an API for controlling + Phidgets USB devices. The library translates API function + calls to libusb function calls to control attached Phidgets + devices that provide GPIO's, DAC's, accelerometers, servo + motors, and other capabilities either singly or on combo + devices. + + To use libphidget for controlling locally attached devices you + need to set up the userspace USB device tree /dev/bus/usb. See + file udev/99-phidgets.rules. + + The libphidget library also contains an API for sending + commands to a local or remote phidgetwebservice using HTTP. + The phidgetwebservice then translates HTTP requests to + libphidget API function calls to control locally attached + Phidgets devices. + + http://phidgets.com/ + +comment "libphidget needs a toolchain w/ threads, dynamic library, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/libphidget/libphidget.hash b/package/libphidget/libphidget.hash new file mode 100644 index 00000000..120d6373 --- /dev/null +++ b/package/libphidget/libphidget.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 f6da13dc0db057c1a87e0a831e3f5507cd26a32f3ced40f2c0ad783fc244bcd5 libphidget_2.1.8.20170607.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/libphidget/libphidget.mk b/package/libphidget/libphidget.mk new file mode 100644 index 00000000..d84a8b91 --- /dev/null +++ b/package/libphidget/libphidget.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libphidget +# +################################################################################ + +LIBPHIDGET_VERSION = 2.1.8.20170607 +LIBPHIDGET_SOURCE = libphidget_$(LIBPHIDGET_VERSION).tar.gz +LIBPHIDGET_SITE = https://www.phidgets.com/downloads/phidget21/libraries/linux/libphidget +LIBPHIDGET_DEPENDENCIES = libusb +LIBPHIDGET_CONF_OPTS = --disable-ldconfig +LIBPHIDGET_INSTALL_STAGING = YES +LIBPHIDGET_LICENSE = LGPL-3.0 +LIBPHIDGET_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/libpjsip/Config.in b/package/libpjsip/Config.in new file mode 100644 index 00000000..727d2ec3 --- /dev/null +++ b/package/libpjsip/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_LIBPJSIP + bool "libpjsip" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_LIBSRTP + help + PJSIP is a free and open source multimedia communication + library written in C language implementing standard based + protocols such as: SIP, SDP, RTP, STUN, TURN, and ICE. + + http://www.pjsip.org + +comment "libpjsip needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libpjsip/libpjsip.hash b/package/libpjsip/libpjsip.hash new file mode 100644 index 00000000..68c22088 --- /dev/null +++ b/package/libpjsip/libpjsip.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 936a4c5b98601b52325463a397ddf11ab4106c6a7b04f8dc7cdd377efbb597de pjproject-2.10.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/libpjsip/libpjsip.mk b/package/libpjsip/libpjsip.mk new file mode 100644 index 00000000..8feec9bc --- /dev/null +++ b/package/libpjsip/libpjsip.mk @@ -0,0 +1,167 @@ +################################################################################ +# +# libpjsip +# +################################################################################ + +LIBPJSIP_VERSION = 2.10 +LIBPJSIP_SOURCE = pjproject-$(LIBPJSIP_VERSION).tar.gz +LIBPJSIP_SITE = $(call github,pjsip,pjproject,$(LIBPJSIP_VERSION)) +# https://github.com/pjsip/pjproject/archive/2.10.tar.gz + +LIBPJSIP_DEPENDENCIES = libsrtp +LIBPJSIP_LICENSE = GPL-2.0+ +LIBPJSIP_LICENSE_FILES = COPYING +LIBPJSIP_CPE_ID_VENDOR = pjsip +LIBPJSIP_CPE_ID_PRODUCT = pjsip +LIBPJSIP_INSTALL_STAGING = YES +LIBPJSIP_MAKE = $(MAKE1) + +LIBPJSIP_CFLAGS = $(TARGET_CFLAGS) -DPJ_HAS_IPV6=1 + +# relocation truncated to fit: R_68K_GOT16O +ifeq ($(BR2_m68k_cf),y) +LIBPJSIP_CFLAGS += -mxgot +endif + +LIBPJSIP_CONF_ENV = \ + LD="$(TARGET_CC)" \ + CFLAGS="$(LIBPJSIP_CFLAGS)" + +LIBPJSIP_CONF_OPTS = \ + --disable-resample \ + --disable-g7221-codec \ + --disable-ilbc-codec \ + --disable-libwebrtc \ + --disable-ext-sound \ + --disable-g711-codec \ + --disable-l16-codec \ + --disable-g722-codec \ + --disable-ipp \ + --disable-silk \ + --with-external-srtp + +# Note: aconfigure.ac is broken: --enable-epoll or --disable-epoll will +# both enable it. But that's OK, epoll is better than the alternative, +# so we want to use it. +LIBPJSIP_CONF_OPTS += --enable-epoll + +ifeq ($(BR2_PACKAGE_ALSA_LIB_MIXER),y) +LIBPJSIP_DEPENDENCIES += alsa-lib +LIBPJSIP_CONF_OPTS += --enable-sound +else +LIBPJSIP_CONF_OPTS += --disable-sound +endif + +ifeq ($(BR2_PACKAGE_BCG729),y) +LIBPJSIP_DEPENDENCIES += bcg729 +LIBPJSIP_CONF_OPTS += --with-bcg729=$(STAGING_DIR)/usr +else +LIBPJSIP_CONF_OPTS += --disable-bcg729 +endif + +ifeq ($(BR2_PACKAGE_FFMPEG),y) +LIBPJSIP_DEPENDENCIES += ffmpeg +LIBPJSIP_CONF_OPTS += --with-ffmpeg=$(STAGING_DIR)/usr +else +LIBPJSIP_CONF_OPTS += --disable-ffmpeg +endif + +ifeq ($(BR2_PACKAGE_LIBGSM),y) +LIBPJSIP_CONF_OPTS += \ + --enable-gsm-codec \ + --with-external-gsm +LIBPJSIP_DEPENDENCIES += libgsm +else +LIBPJSIP_CONF_OPTS += \ + --disable-gsm-codec +endif + +ifeq ($(BR2_PACKAGE_LIBOPENH264),y) +LIBPJSIP_DEPENDENCIES += libopenh264 +LIBPJSIP_CONF_OPTS += --with-openh264=$(STAGING_DIR)/usr +else +LIBPJSIP_CONF_OPTS += --disable-openh264 +endif + +ifeq ($(BR2_PACKAGE_LIBOPENSSL),y) +LIBPJSIP_DEPENDENCIES += libopenssl +LIBPJSIP_CONF_OPTS += --with-ssl=$(STAGING_DIR)/usr +else ifeq ($(BR2_PACKAGE_GNUTLS),y) +LIBPJSIP_DEPENDENCIES += gnutls +LIBPJSIP_CONF_OPTS += --with-gnutls=$(STAGING_DIR)/usr +else +LIBPJSIP_CONF_OPTS += --disable-ssl +endif + +ifeq ($(BR2_PACKAGE_LIBSAMPLERATE),y) +LIBPJSIP_DEPENDENCIES += libsamplerate +LIBPJSIP_CONF_OPTS += --enable-libsamplerate +else +LIBPJSIP_CONF_OPTS += --disable-libsamplerate +endif + +ifeq ($(BR2_PACKAGE_LIBV4L),y) +# --enable-v4l2 is broken (check for libv4l2 will be omitted) +LIBPJSIP_DEPENDENCIES += libv4l +else +LIBPJSIP_CONF_OPTS += --disable-v4l2 +endif + +ifeq ($(BR2_PACKAGE_LIBYUV),y) +LIBPJSIP_DEPENDENCIES += libyuv +LIBPJSIP_CONF_OPTS += \ + --enable-libyuv \ + --with-external-yuv +else +LIBPJSIP_CONF_OPTS += --disable-libyuv +endif + +ifeq ($(BR2_PACKAGE_OPENCORE_AMR),y) +LIBPJSIP_DEPENDENCIES += opencore-amr +LIBPJSIP_CONF_OPTS += --with-opencore-amr=$(STAGING_DIR)/usr +else +LIBPJSIP_CONF_OPTS += --disable-opencore-amr +endif + +ifeq ($(BR2_PACKAGE_OPUS),y) +LIBPJSIP_DEPENDENCIES += opus +LIBPJSIP_CONF_OPTS += --with-opus=$(STAGING_DIR)/usr +else +LIBPJSIP_CONF_OPTS += --disable-opus +endif + +ifeq ($(BR2_PACKAGE_PORTAUDIO),y) +LIBPJSIP_DEPENDENCIES += portaudio +LIBPJSIP_CONF_OPTS += --with-external-pa +else +LIBPJSIP_CONF_OPTS += --without-external-pa +endif + +ifeq ($(BR2_PACKAGE_SDL2),y) +LIBPJSIP_DEPENDENCIES += sdl2 +LIBPJSIP_CONF_OPTS += --with-sdl=$(STAGING_DIR)/usr +else +LIBPJSIP_CONF_OPTS += --disable-sdl +endif + +ifeq ($(BR2_PACKAGE_SPEEX)$(BR2_PACKAGE_SPEEXDSP),yy) +LIBPJSIP_CONF_OPTS += \ + --enable-speex-aec \ + --enable-speex-codec \ + --with-external-speex +LIBPJSIP_DEPENDENCIES += speex speexdsp +else +LIBPJSIP_CONF_OPTS += \ + --disable-speex-aec \ + --disable-speex-codec +endif + +ifeq ($(BR2_PACKAGE_UTIL_LINUX_LIBUUID),y) +LIBPJSIP_DEPENDENCIES += util-linux +endif + +# disable build of test binaries +LIBPJSIP_MAKE_OPTS = lib + +$(eval $(autotools-package)) diff --git a/package/libplatform/Config.in b/package/libplatform/Config.in new file mode 100644 index 00000000..ade6baf2 --- /dev/null +++ b/package/libplatform/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBPLATFORM + bool + help + Platform support library used by libCEC and binary add-ons for + Kodi + + https://github.com/Pulse-Eight/platform diff --git a/package/libplatform/libplatform.hash b/package/libplatform/libplatform.hash new file mode 100644 index 00000000..f08435da --- /dev/null +++ b/package/libplatform/libplatform.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 209daeb87af4ca92199887eb151b2a459bb81566cdaa092644e0889afb64bf6a libplatform-1c9d14fa996af33760a2c700caebd2bd9ae527c9.tar.gz +sha256 80fc66febbb2393c9d518e3eefa4ad9aae15a9b6a84174c0e443ea79eeea5131 src/os.h diff --git a/package/libplatform/libplatform.mk b/package/libplatform/libplatform.mk new file mode 100644 index 00000000..ca57a07d --- /dev/null +++ b/package/libplatform/libplatform.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# libplatform +# +################################################################################ + +LIBPLATFORM_VERSION = 1c9d14fa996af33760a2c700caebd2bd9ae527c9 +LIBPLATFORM_SITE = $(call github,Pulse-Eight,platform,$(LIBPLATFORM_VERSION)) +LIBPLATFORM_LICENSE = GPL-2.0+ +LIBPLATFORM_LICENSE_FILES = src/os.h +LIBPLATFORM_INSTALL_STAGING = YES + +$(eval $(cmake-package)) diff --git a/package/libplist/Config.in b/package/libplist/Config.in new file mode 100644 index 00000000..5a246b4e --- /dev/null +++ b/package/libplist/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LIBPLIST + bool "libplist" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + help + libplist is a client for manipulating Apple Property List + (.plist) files + + http://www.libimobiledevice.org/ + +comment "libplist needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libplist/libplist.hash b/package/libplist/libplist.hash new file mode 100644 index 00000000..58054d0b --- /dev/null +++ b/package/libplist/libplist.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 4b33f9af3f9208d54a3c3e1a8c149932513f451c98d1dd696fe42c06e30b7f03 libplist-2.1.0.tar.gz +sha256 7619c753cac95d4740220223bde48a032606fcaccde5e546f9bc444c81ab356d COPYING diff --git a/package/libplist/libplist.mk b/package/libplist/libplist.mk new file mode 100644 index 00000000..42da4fac --- /dev/null +++ b/package/libplist/libplist.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# libplist +# +################################################################################ + +LIBPLIST_VERSION = 2.1.0 +LIBPLIST_SITE = $(call github,libimobiledevice,libplist,$(LIBPLIST_VERSION)) +LIBPLIST_INSTALL_STAGING = YES +LIBPLIST_LICENSE = LGPL-2.1+ +LIBPLIST_LICENSE_FILES = COPYING +LIBPLIST_CPE_ID_VENDOR = libimobiledevice +# github tarball does not include configure +LIBPLIST_AUTORECONF = YES + +# Disable building Python bindings, because it requires host-cython, which +# is not packaged in Buildroot at all. +LIBPLIST_CONF_OPTS = --without-cython + +$(eval $(autotools-package)) diff --git a/package/libpng/0001-Disable-pngfix-and-png-fix-itxt.patch b/package/libpng/0001-Disable-pngfix-and-png-fix-itxt.patch new file mode 100644 index 00000000..d232e4d6 --- /dev/null +++ b/package/libpng/0001-Disable-pngfix-and-png-fix-itxt.patch @@ -0,0 +1,47 @@ +From 60c3ee917c8e7a4760b1ef7c3dc2b44a615150d3 Mon Sep 17 00:00:00 2001 +From: Gustavo Zacarias +Date: Thu, 26 May 2016 16:26:18 -0300 +Subject: [PATCH] Disable pngfix and png-fix-itxt + +Disable the new pngfix and png-fix-itxt tools: they take up space, fail +to build on some oddball toolchain configurations and aren't +expected/needed in a non-interactive embedded system. + +[Julien: update for 1.6.25] +Signed-off-by: Julien Boibessot + +Signed-off-by: Gustavo Zacarias +--- + Makefile.am | 2 +- + Makefile.in | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 7212951..3430dca 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -18,7 +18,7 @@ check_PROGRAMS += timepng + endif + + # Utilities - installed +-bin_PROGRAMS= pngfix png-fix-itxt ++bin_PROGRAMS= + + # This ensures that pnglibconf.h gets built at the start of 'make all' or + # 'make check', but it does not add dependencies to the individual programs, +diff --git a/Makefile.in b/Makefile.in +index a66f6aa..4e67782 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -104,7 +104,7 @@ check_PROGRAMS = pngtest$(EXEEXT) pngunknown$(EXEEXT) \ + pngstest$(EXEEXT) pngvalid$(EXEEXT) pngimage$(EXEEXT) \ + pngcp$(EXEEXT) $(am__EXEEXT_1) + @HAVE_CLOCK_GETTIME_TRUE@am__append_1 = timepng +-bin_PROGRAMS = pngfix$(EXEEXT) png-fix-itxt$(EXEEXT) ++bin_PROGRAMS = + @PNG_ARM_NEON_TRUE@am__append_2 = arm/arm_init.c\ + @PNG_ARM_NEON_TRUE@ arm/filter_neon.S arm/filter_neon_intrinsics.c + +-- +2.7.3 + diff --git a/package/libpng/Config.in b/package/libpng/Config.in new file mode 100644 index 00000000..b0a36460 --- /dev/null +++ b/package/libpng/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBPNG + bool "libpng" + select BR2_PACKAGE_ZLIB + help + Library for handling PNG (Portable Network Graphics) + images. + + http://www.libpng.org/ diff --git a/package/libpng/libpng.hash b/package/libpng/libpng.hash new file mode 100644 index 00000000..e86b8c65 --- /dev/null +++ b/package/libpng/libpng.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/libpng/files/libpng16/1.6.37/ +md5 015e8e15db1eecde5f2eb9eb5b6e59e9 libpng-1.6.37.tar.xz +sha1 3ab93fabbf4c27e1c4724371df408d9a1bd3f656 libpng-1.6.37.tar.xz +# Locally computed: +sha256 505e70834d35383537b6491e7ae8641f1a4bed1876dbfe361201fc80868d88ca libpng-1.6.37.tar.xz +sha256 bf5e22b9dce8464064ae17a48ea1133c3369ac9e1d80ef9e320e5219aa14ea9b LICENSE diff --git a/package/libpng/libpng.mk b/package/libpng/libpng.mk new file mode 100644 index 00000000..e4e629bb --- /dev/null +++ b/package/libpng/libpng.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# libpng +# +################################################################################ + +LIBPNG_VERSION = 1.6.37 +LIBPNG_SERIES = 16 +LIBPNG_SOURCE = libpng-$(LIBPNG_VERSION).tar.xz +LIBPNG_SITE = http://downloads.sourceforge.net/project/libpng/libpng$(LIBPNG_SERIES)/$(LIBPNG_VERSION) +LIBPNG_LICENSE = Libpng-2.0 +LIBPNG_LICENSE_FILES = LICENSE +LIBPNG_CPE_ID_VENDOR = libpng +LIBPNG_INSTALL_STAGING = YES +LIBPNG_DEPENDENCIES = host-pkgconf zlib +HOST_LIBPNG_DEPENDENCIES = host-pkgconf host-zlib +LIBPNG_CONFIG_SCRIPTS = libpng$(LIBPNG_SERIES)-config libpng-config + +ifeq ($(BR2_ARM_CPU_HAS_NEON)$(BR2_aarch64),y) +LIBPNG_CONF_OPTS += --enable-arm-neon +else +LIBPNG_CONF_OPTS += --disable-arm-neon +endif + +ifeq ($(BR2_X86_CPU_HAS_SSE2),y) +LIBPNG_CONF_OPTS += --enable-intel-sse +else +LIBPNG_CONF_OPTS += --disable-intel-sse +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libpqxx/Config.in b/package/libpqxx/Config.in new file mode 100644 index 00000000..d06451d7 --- /dev/null +++ b/package/libpqxx/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_LIBPQXX + bool "libpqxx" + depends on BR2_PACKAGE_POSTGRESQL + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C++11 + depends on BR2_INSTALL_LIBSTDCPP + help + libpqxx is the official C++ client API for PostgreSQL, the + enterprise-strength open-source relational database. + + http://pqxx.org/development/libpqxx/ + +comment "libpqxx needs toolchain w/ C++, gcc >= 4.9, threads" + depends on BR2_PACKAGE_POSTGRESQL + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || \ + !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libpqxx/libpqxx.hash b/package/libpqxx/libpqxx.hash new file mode 100644 index 00000000..8e316493 --- /dev/null +++ b/package/libpqxx/libpqxx.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 86921fdb0fe54495a79d5af2c96f2c771098c31e9b352d0834230fd2799ad362 libpqxx-6.4.5.tar.gz +sha256 36c48c1ca1b0a68639d919196b5d92c971858ad8e24da24385ba1c65cc5eac38 COPYING diff --git a/package/libpqxx/libpqxx.mk b/package/libpqxx/libpqxx.mk new file mode 100644 index 00000000..9de7df3e --- /dev/null +++ b/package/libpqxx/libpqxx.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libpqxx +# +################################################################################ + +LIBPQXX_VERSION = 6.4.5 +LIBPQXX_SITE = $(call github,jtv,libpqxx,$(LIBPQXX_VERSION)) +LIBPQXX_INSTALL_STAGING = YES +LIBPQXX_DEPENDENCIES = postgresql +LIBPQXX_LICENSE = BSD-3-Clause +LIBPQXX_LICENSE_FILES = COPYING + +LIBPQXX_CONF_ENV += ac_cv_path_PG_CONFIG=$(STAGING_DIR)/usr/bin/pg_config + +$(eval $(autotools-package)) diff --git a/package/libpri/Config.in b/package/libpri/Config.in new file mode 100644 index 00000000..de2d96fc --- /dev/null +++ b/package/libpri/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_LIBPRI + bool "libpri" + depends on BR2_USE_MMU # fork() + depends on BR2_LINUX_KERNEL + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_DAHDI_LINUX + select BR2_PACKAGE_DAHDI_TOOLS + help + libpri is an open source library that encapsulates the + protocols used to communicate over ISDN Primary Rate + Interfaces (T1, E1, J1). + + http://www.asterisk.org/downloads/libpri + +comment "libpri needs a kernel to be built" + depends on BR2_USE_MMU + depends on !BR2_LINUX_KERNEL + +comment "libpri needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libpri/libpri.hash b/package/libpri/libpri.hash new file mode 100644 index 00000000..47c4a003 --- /dev/null +++ b/package/libpri/libpri.hash @@ -0,0 +1,7 @@ +# sha1 and sha256 from http://downloads.asterisk.org/pub/telephony/libpri/releases/ +sha1 63536f3300fb007dfd5fe8064406992ca938bd9a libpri-1.5.0.tar.gz +sha256 ee224bc4aa65c54546bd09675c3f0b71817ce9e277332bce86989d8dcd556a24 libpri-1.5.0.tar.gz + +# License files, locally calculated +sha256 fa5fc1d1eec39532ea517518eeefd7b6e3c14341a55e5880a0e2a49eee47a5b7 LICENSE +sha256 53b8b3aea4faec23fd9dbd4936044aca80c9b00343e6e58ee3303cec19512b33 README diff --git a/package/libpri/libpri.mk b/package/libpri/libpri.mk new file mode 100644 index 00000000..e1fa2abc --- /dev/null +++ b/package/libpri/libpri.mk @@ -0,0 +1,53 @@ +################################################################################ +# +# libpri +# +################################################################################ + +LIBPRI_VERSION = 1.5.0 +LIBPRI_SITE = http://downloads.asterisk.org/pub/telephony/libpri/releases + +LIBPRI_LICENSE = GPL-2.0 with OpenH323 exception +LIBPRI_LICENSE_FILES = LICENSE README + +LIBPRI_DEPENDENCIES = dahdi-linux dahdi-tools +LIBPRI_INSTALL_STAGING = YES + +# The Makefile default rule will always try to generate both libraries. +# So we need to explicitly build only what we can. +ifneq ($(BR2_SHARED_LIBS),y) +LIBPRI_LIBS = libpri.a +define LIBPRI_INSTALL_A + $(INSTALL) -D -m 0644 $(@D)/libpri.a $(1)/usr/lib/libpri.a +endef +endif + +ifneq ($(BR2_STATIC_LIBS),y) +LIBPRI_LIBS += libpri.so.1.4 +define LIBPRI_INSTALL_SO + $(INSTALL) -D -m 0644 $(@D)/libpri.so.1.4 $(1)/usr/lib/libpri.so.1.4 + ln -sf libpri.so.1.4 $(1)/usr/lib/libpri.so +endef +endif + +LIBPRI_UTILS = pridump pritest rosetest testprilib + +define LIBPRI_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(TARGET_CFLAGS) -fPIC" -C $(@D) \ + $(LIBPRI_LIBS) $(LIBPRI_UTILS) +endef + +define LIBPRI_INSTALL_STAGING_CMDS + $(call LIBPRI_INSTALL_A,$(STAGING_DIR)) + $(call LIBPRI_INSTALL_SO,$(STAGING_DIR)) + $(INSTALL) -D -m 0644 $(@D)/libpri.h $(STAGING_DIR)/usr/include/libpri.h +endef + +define LIBPRI_INSTALL_TARGET_CMDS + $(foreach u,$(LIBPRI_UTILS),\ + $(INSTALL) -D -m 0755 $(@D)/$(u) $(TARGET_DIR)/usr/sbin/$(u)$(sep)) + $(call LIBPRI_INSTALL_SO,$(TARGET_DIR)) +endef + +$(eval $(generic-package)) diff --git a/package/libpthread-stubs/Config.in b/package/libpthread-stubs/Config.in new file mode 100644 index 00000000..a4ce1cb0 --- /dev/null +++ b/package/libpthread-stubs/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBPTHREAD_STUBS + bool "libpthread-stubs" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + This library provides weak aliases for pthread functions not + provided in libc or otherwise available by default. + + http://xcb.freedesktop.org/ + +comment "libpthread-stubs needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libpthread-stubs/libpthread-stubs.hash b/package/libpthread-stubs/libpthread-stubs.hash new file mode 100644 index 00000000..fb33618b --- /dev/null +++ b/package/libpthread-stubs/libpthread-stubs.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 e4d05911a3165d3b18321cc067fdd2f023f06436e391c6a28dff618a78d2e733 libpthread-stubs-0.4.tar.bz2 +sha256 78c20706e799f2b8f445e71d3d2ade6ba23b3388fd6cbeed7d71796623febde8 COPYING diff --git a/package/libpthread-stubs/libpthread-stubs.mk b/package/libpthread-stubs/libpthread-stubs.mk new file mode 100644 index 00000000..9cf69707 --- /dev/null +++ b/package/libpthread-stubs/libpthread-stubs.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# libpthread-stubs +# +################################################################################ + +LIBPTHREAD_STUBS_VERSION = 0.4 +LIBPTHREAD_STUBS_SOURCE = libpthread-stubs-$(LIBPTHREAD_STUBS_VERSION).tar.bz2 +LIBPTHREAD_STUBS_SITE = http://xcb.freedesktop.org/dist +LIBPTHREAD_STUBS_LICENSE = MIT +LIBPTHREAD_STUBS_LICENSE_FILES = COPYING + +LIBPTHREAD_STUBS_INSTALL_STAGING = YES + +ifeq ($(BR2_STATIC_LIBS),y) +LIBPTHREAD_STUBS_CONF_ENV += LDFLAGS="$(TARGET_LDFLAGS) -pthread" +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libpthsem/0001-fix-build-on-linux-3.x-host.patch b/package/libpthsem/0001-fix-build-on-linux-3.x-host.patch new file mode 100644 index 00000000..21fff4e7 --- /dev/null +++ b/package/libpthsem/0001-fix-build-on-linux-3.x-host.patch @@ -0,0 +1,28 @@ +From 2d0450bfa3fb7003098da1a7fe24c3ae140912dc Mon Sep 17 00:00:00 2001 +From: Gregory Hermant +Date: Mon, 22 Oct 2012 15:11:53 +0200 +Subject: [PATCH] pthsem build on Linux 3.x host + + +Signed-off-by: Michael Markstaller +Signed-off-by: Gregory Hermant +--- + acinclude.m4 | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/acinclude.m4 b/acinclude.m4 +index 03b42de..fea9bc8 100644 +--- a/acinclude.m4 ++++ b/acinclude.m4 +@@ -892,6 +892,8 @@ case $PLATFORM in + case "x`uname -r`" in + changequote(, )dnl + x2.[23456789]* ) ;; ++changequote(, )dnl ++ x3.* ) ;; + changequote([, ]) + * ) braindead=yes ;; + esac +-- +1.7.9.5 + diff --git a/package/libpthsem/Config.in b/package/libpthsem/Config.in new file mode 100644 index 00000000..c2856c52 --- /dev/null +++ b/package/libpthsem/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_LIBPTHSEM + bool "libpthsem" + depends on BR2_USE_MMU # fork() + help + GNU pth is a user mode multi threading library. pthsem is an + extend version, with support for semaphores added. + + http://www.auto.tuwien.ac.at/~mkoegler/pth/ + +if BR2_PACKAGE_LIBPTHSEM + +config BR2_PACKAGE_LIBPTHSEM_COMPAT + bool "libpth compatibility" + help + This option enables the compatibility with the original + libpth library. + +endif diff --git a/package/libpthsem/libpthsem.hash b/package/libpthsem/libpthsem.hash new file mode 100644 index 00000000..9da4b882 --- /dev/null +++ b/package/libpthsem/libpthsem.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 4024cafdd5d4bce2b1778a6be5491222c3f6e7ef1e43971264c451c0012c5c01 pthsem_2.0.8.tar.gz +sha256 f1b95d3728077d1a3efe7fc17928b1953b1224f6caf9c528e30e570158b7520d COPYING diff --git a/package/libpthsem/libpthsem.mk b/package/libpthsem/libpthsem.mk new file mode 100644 index 00000000..dfe25af3 --- /dev/null +++ b/package/libpthsem/libpthsem.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# libpthsem +# +################################################################################ + +LIBPTHSEM_VERSION = 2.0.8 +LIBPTHSEM_SOURCE = pthsem_$(LIBPTHSEM_VERSION).tar.gz +LIBPTHSEM_SITE = http://www.auto.tuwien.ac.at/~mkoegler/pth +LIBPTHSEM_LICENSE = LGPL-2.1+ +LIBPTHSEM_LICENSE_FILES = COPYING +LIBPTHSEM_AUTORECONF = YES +LIBPTHSEM_INSTALL_STAGING = YES +LIBPTHSEM_CONFIG_SCRIPTS = pthsem-config + +# Force the setjmp/longjmp detection, because the test being done in +# the AC_CHECK_SJLJ macro is not cross-compilation safe: it checks the +# running kernel with 'uname -r', and checks the C library version by +# looking at /usr/include/features.h. In terms of kernel version, it +# assumes any version later than 2.2.x is fine, except that it doesn't +# recognize 4.x as a valid kernel version, recognizing such systems as +# "braindead" and therefore falling back to the 'sjljlx' value for +# ac_cv_check_sjlj. In terms of C library version, it wants +# __GLIBC_MINOR to be at least 1. Since both conditions are true for +# all Buildroot systems, we can simply force the setjmp/longjmp +# detection to ssjlj. +LIBPTHSEM_CONF_ENV += \ + ac_cv_check_sjlj=ssjlj + +ifeq ($(BR2_PACKAGE_LIBPTHSEM_COMPAT),y) +LIBPTHSEM_CONF_OPTS += --enable-compat +LIBPTHSEM_CONFIG_SCRIPTS += pth-config +else +LIBPTHSEM_CONF_OPTS += --disable-compat +endif + +$(eval $(autotools-package)) diff --git a/package/libpwquality/Config.in b/package/libpwquality/Config.in new file mode 100644 index 00000000..23e15157 --- /dev/null +++ b/package/libpwquality/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_LIBPWQUALITY + bool "libpwquality" + select BR2_PACKAGE_CRACKLIB + help + This is a library for password quality checks and generation + of random passwords that pass the checks. This library uses + the cracklib and cracklib dictionaries to perform some of + the checks. + + https://github.com/libpwquality/libpwquality + +if BR2_PACKAGE_LIBPWQUALITY + +config BR2_PACKAGE_LIBPWQUALITY_TOOLS + bool "install tools" + help + Install libpwquality command line tools generating/checking + passwords. + +endif diff --git a/package/libpwquality/libpwquality.hash b/package/libpwquality/libpwquality.hash new file mode 100644 index 00000000..1469bc0b --- /dev/null +++ b/package/libpwquality/libpwquality.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 d43baf23dc6887fe8f8e9b75cabaabc5f4bbbaa0f9eff44278d276141752a545 libpwquality-1.4.4.tar.bz2 +sha256 aa44d09f651bf99b56253187c7778a240740c767d28453ab7fdc9804c842baee COPYING diff --git a/package/libpwquality/libpwquality.mk b/package/libpwquality/libpwquality.mk new file mode 100644 index 00000000..7c0c5df3 --- /dev/null +++ b/package/libpwquality/libpwquality.mk @@ -0,0 +1,44 @@ +################################################################################ +# +# libpwquality +# +################################################################################ + +LIBPWQUALITY_VERSION = 1.4.4 +LIBPWQUALITY_SOURCE = libpwquality-$(LIBPWQUALITY_VERSION).tar.bz2 +LIBPWQUALITY_SITE = https://github.com/libpwquality/libpwquality/releases/download/libpwquality-$(LIBPWQUALITY_VERSION) +LIBPWQUALITY_LICENSE = BSD-3-Clause or GPL-2.0+ +LIBPWQUALITY_INSTALL_STAGING = YES +LIBPWQUALITY_DEPENDENCIES = cracklib +LIBPWQUALITY_LICENSE_FILES = COPYING + +ifeq ($(BR2_PACKAGE_PYTHON),y) +LIBPWQUALITY_CONF_OPTS += --enable-python-bindings +LIBPWQUALITY_DEPENDENCIES += python +LIBPWQUALITY_MAKE_ENV += $(PKG_PYTHON_DISTUTILS_ENV) +else +LIBPWQUALITY_CONF_OPTS += --disable-python-bindings +endif + +ifeq ($(BR2_PACKAGE_LINUX_PAM),y) +LIBPWQUALITY_CONF_OPTS += --enable-pam +LIBPWQUALITY_DEPENDENCIES += linux-pam +else +LIBPWQUALITY_CONF_OPTS += --disable-pam +endif + +# Static link with cracklib requires -lz if zlib is enabled +ifeq ($(BR2_STATIC_LIBS)$(BR2_PACKAGE_ZLIB),yy) +LIBPWQUALITY_CONF_ENV += LIBS="-lz" +endif + +ifeq ($(BR2_PACKAGE_LIBPWQUALITY_TOOLS),) +define LIBPWQUALITY_REMOVE_TOOLS + rm -f $(TARGET_DIR)/usr/bin/pwmake + rm -f $(TARGET_DIR)/usr/bin/pwscore +endef + +LIBPWQUALITY_POST_INSTALL_TARGET_HOOKS += LIBPWQUALITY_REMOVE_TOOLS +endif + +$(eval $(autotools-package)) diff --git a/package/libqmi/Config.in b/package/libqmi/Config.in new file mode 100644 index 00000000..f1d111b7 --- /dev/null +++ b/package/libqmi/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_LIBQMI + bool "libqmi" + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + select BR2_PACKAGE_LIBGLIB2 + help + libqmi is a glib-based library for talking to WWAN modems and + devices which speak the Qualcomm MSM Interface (QMI) protocol. + + http://www.freedesktop.org/wiki/Software/libqmi/ + +comment "libqmi needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libqmi/libqmi.hash b/package/libqmi/libqmi.hash new file mode 100644 index 00000000..1304a072 --- /dev/null +++ b/package/libqmi/libqmi.hash @@ -0,0 +1,4 @@ +# Locally computed: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LIB +sha256 a71963bb1097a42665287e40a9a36f95b8f9d6d6a4b7a5de22d660328af97cb9 libqmi-1.26.6.tar.xz diff --git a/package/libqmi/libqmi.mk b/package/libqmi/libqmi.mk new file mode 100644 index 00000000..1be9cf45 --- /dev/null +++ b/package/libqmi/libqmi.mk @@ -0,0 +1,52 @@ +################################################################################ +# +# libqmi +# +################################################################################ + +LIBQMI_VERSION = 1.26.6 +LIBQMI_SITE = http://www.freedesktop.org/software/libqmi +LIBQMI_SOURCE = libqmi-$(LIBQMI_VERSION).tar.xz +LIBQMI_LICENSE = LGPL-2.0+ (library), GPL-2.0+ (programs) +LIBQMI_LICENSE_FILES = COPYING COPYING.LIB +LIBQMI_CPE_ID_VENDOR = libqmi_project +LIBQMI_INSTALL_STAGING = YES + +LIBQMI_DEPENDENCIES = libglib2 + +LIBQMI_CONF_OPTS = --disable-Werror + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +LIBQMI_DEPENDENCIES += gobject-introspection +LIBQMI_CONF_OPTS += --enable-introspection +else +LIBQMI_CONF_OPTS += --disable-introspection +endif + +# if libgudev available, request udev support for a better +# qmi-firmware-update experience +ifeq ($(BR2_PACKAGE_LIBGUDEV),y) +LIBQMI_DEPENDENCIES += libgudev +LIBQMI_CONF_OPTS += --with-udev +else +LIBQMI_CONF_OPTS += --without-udev +endif + +# if libmbim available, request QMI-over-MBIM support +ifeq ($(BR2_PACKAGE_LIBMBIM),y) +LIBQMI_DEPENDENCIES += libmbim +LIBQMI_CONF_OPTS += --enable-mbim-qmux +else +LIBQMI_CONF_OPTS += --disable-mbim-qmux +endif + +# if ModemManager available, enable MM runtime check in +# qmi-firmware-update (note that we don't need to build-depend on +# anything else) +ifeq ($(BR2_PACKAGE_MODEM_MANAGER),y) +LIBQMI_CONF_OPTS += --enable-mm-runtime-check +else +LIBQMI_CONF_OPTS += --disable-mm-runtime-check +endif + +$(eval $(autotools-package)) diff --git a/package/libqrencode/Config.in b/package/libqrencode/Config.in new file mode 100644 index 00000000..b8666262 --- /dev/null +++ b/package/libqrencode/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_LIBQRENCODE + bool "libqrencode" + help + libqrencode is a C library for encoding data in a QR Code + symbol, a kind of 2D symbology that can be scanned by handy + terminals such as a mobile phone with CCD. The capacity of + QR Code is up to 7000 digits or 4000 characters, and is + highly robust. + + http://fukuchi.org/works/qrencode/index.html + +if BR2_PACKAGE_LIBQRENCODE + +config BR2_PACKAGE_LIBQRENCODE_TOOLS + bool "libqrencode tools" + select BR2_PACKAGE_LIBPNG + help + Build command-line tools + +endif #BR2_PACKAGE_LIBQRENCODE diff --git a/package/libqrencode/libqrencode.hash b/package/libqrencode/libqrencode.hash new file mode 100644 index 00000000..ffcc5373 --- /dev/null +++ b/package/libqrencode/libqrencode.hash @@ -0,0 +1,5 @@ +# From http://fukuchi.org/works/qrencode/qrencode-4.1.1.tar.gz.sha +sha512 209bb656ae3f391b03c7b3ceb03e34f7320b0105babf48b619e7a299528b8828449e0e7696f0b5db0d99170a81709d0518e34835229a748701e7df784e58a9ce qrencode-4.1.1.tar.gz + +# Hash for license file: +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 COPYING diff --git a/package/libqrencode/libqrencode.mk b/package/libqrencode/libqrencode.mk new file mode 100644 index 00000000..0062a96a --- /dev/null +++ b/package/libqrencode/libqrencode.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# libqrencode +# +################################################################################ + +LIBQRENCODE_VERSION = 4.1.1 +LIBQRENCODE_SOURCE = qrencode-$(LIBQRENCODE_VERSION).tar.gz +LIBQRENCODE_SITE = http://fukuchi.org/works/qrencode +LIBQRENCODE_DEPENDENCIES = host-pkgconf +LIBQRENCODE_INSTALL_STAGING = YES +LIBQRENCODE_LICENSE = LGPL-2.1+ +LIBQRENCODE_LICENSE_FILES = COPYING + +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +LIBQRENCODE_CONF_ENV += LIBS='-pthread' +else +LIBQRENCODE_CONF_OPTS += --disable-thread-safety +endif + +ifeq ($(BR2_PACKAGE_LIBPNG),y) +LIBQRENCODE_CONF_OPTS += --with-png +LIBQRENCODE_DEPENDENCIES += libpng +else +LIBQRENCODE_CONF_OPTS += --without-png +endif + +ifeq ($(BR2_PACKAGE_LIBQRENCODE_TOOLS),y) +LIBQRENCODE_CONF_OPTS += --with-tools=yes +else +LIBQRENCODE_CONF_OPTS += --with-tools=no +endif + +$(eval $(autotools-package)) diff --git a/package/libraw/0001-Add-Libs.private-to-libraw.pc.patch b/package/libraw/0001-Add-Libs.private-to-libraw.pc.patch new file mode 100644 index 00000000..a90af231 --- /dev/null +++ b/package/libraw/0001-Add-Libs.private-to-libraw.pc.patch @@ -0,0 +1,67 @@ +From ad911cbc3c16397cf9d326c30571a4d1edaaa03f Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Wed, 2 Jun 2021 07:45:40 +0200 +Subject: [PATCH] Add Libs.private to libraw.pc + +Add Libs.private to libraw.pc to avoid the following static build +failure when enabling libraw with jasper support in imagemagick: + +/home/giuliobenetti/autobuild/run/instance-1/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-buildroot-linux-uclibcgnueabi/9.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: /home/giuliobenetti/autobuild/run/instance-1/output-1/host/bin/../arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libjasper.a(jpg_enc.c.o): in function `jpg_encode': +jpg_enc.c:(.text+0x1f4): undefined reference to `jpeg_stdio_dest' + +-ljpeg must be added after -ljasper because jasper depends on jpeg + +Fixes: + - http://autobuild.buildroot.org/results/88e43a1ea2059a684e50b0f5f2af407e8c6df2e1 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/LibRaw/LibRaw/pull/406] +--- + configure.ac | 2 ++ + libraw.pc.in | 1 + + libraw_r.pc.in | 1 + + 3 files changed, 4 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 4ab2f313..7bf5fdfd 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -57,6 +57,7 @@ if test x$jpeg = xtrue; then + AC_CHECK_HEADERS([jpeglib.h], [ + CPPFLAGS="$CPPFLAGS -DUSE_JPEG -DUSE_JPEG8" + LIBS="$LIBS -ljpeg" ++ AC_SUBST([PACKAGE_LIBS_PRIVATE],"-ljpeg $PACKAGE_LIBS_PRIVATE") + ], AC_MSG_WARN([no jpeg headers found])) + ], + AC_MSG_WARN([libjpeg not found]) +@@ -78,6 +79,7 @@ if test x$jasper = xtrue; then + AC_CHECK_HEADERS([jasper/jasper.h], [ + CPPFLAGS="$CPPFLAGS -DUSE_JASPER" + LIBS="$LIBS -ljasper" ++ AC_SUBST([PACKAGE_LIBS_PRIVATE],"-ljasper $PACKAGE_LIBS_PRIVATE") + ], AC_MSG_WARN([no jasper headers found])) + ], + AC_MSG_WARN([libjasper not found]) +diff --git a/libraw.pc.in b/libraw.pc.in +index 1bab18b8..c95fbc48 100644 +--- a/libraw.pc.in ++++ b/libraw.pc.in +@@ -8,4 +8,5 @@ Description: Raw image decoder library (non-thread-safe) + Requires: @PACKAGE_REQUIRES@ + Version: @PACKAGE_VERSION@ + Libs: -L${libdir} -lraw -lstdc++@PC_OPENMP@ ++Libs.private: @PACKAGE_LIBS_PRIVATE@ + Cflags: -I${includedir}/libraw -I${includedir} +diff --git a/libraw_r.pc.in b/libraw_r.pc.in +index e8427271..92bbbffa 100644 +--- a/libraw_r.pc.in ++++ b/libraw_r.pc.in +@@ -8,4 +8,5 @@ Description: Raw image decoder library (thread-safe) + Requires: @PACKAGE_REQUIRES@ + Version: @PACKAGE_VERSION@ + Libs: -L${libdir} -lraw_r -lstdc++@PC_OPENMP@ ++Libs.private: @PACKAGE_LIBS_PRIVATE@ + Cflags: -I${includedir}/libraw -I${includedir} +-- +2.30.2 + diff --git a/package/libraw/Config.in b/package/libraw/Config.in new file mode 100644 index 00000000..631123c2 --- /dev/null +++ b/package/libraw/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LIBRAW + bool "libraw" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_INSTALL_LIBSTDCPP + help + libraw is a raw image manipulation library + + http://www.libraw.org/ + +comment "libraw needs a toolchain w/ C++" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/libraw/libraw.hash b/package/libraw/libraw.hash new file mode 100644 index 00000000..f2a01c27 --- /dev/null +++ b/package/libraw/libraw.hash @@ -0,0 +1,5 @@ +# Locally calculated +sha256 dc1b486c2003435733043e4e05273477326e51c3ea554c6864a4eafaff1004a6 LibRaw-0.20.2.tar.gz +sha256 eea173a556abac0370461e57e12aab266894ea6be3874c2be05fd87871f75449 LICENSE.LGPL +sha256 0e3098d2d54a12434715f6679ea408d57da5e8d613c385c58ecc6fe5d30cc81f LICENSE.CDDL +sha256 313415f7f48f6cd3cc78856626aab4bbe97dbb1e9a11db9c25396ca8d0e76cd9 README.md diff --git a/package/libraw/libraw.mk b/package/libraw/libraw.mk new file mode 100644 index 00000000..fc02c791 --- /dev/null +++ b/package/libraw/libraw.mk @@ -0,0 +1,54 @@ +################################################################################ +# +# libraw +# +################################################################################ + +LIBRAW_VERSION = 0.20.2 +LIBRAW_SOURCE = LibRaw-$(LIBRAW_VERSION).tar.gz +LIBRAW_SITE = http://www.libraw.org/data +LIBRAW_INSTALL_STAGING = YES +LIBRAW_CONF_OPTS += \ + --disable-examples \ + --disable-openmp +LIBRAW_LICENSE = LGPL-2.1 or CDDL-1.0 +LIBRAW_LICENSE_FILES = LICENSE.LGPL LICENSE.CDDL README.md +LIBRAW_CPE_ID_VENDOR = libraw +LIBRAW_DEPENDENCIES = host-pkgconf +# https://github.com/LibRaw/LibRaw/issues/353 +LIBRAW_AUTORECONF = YES +LIBRAW_CXXFLAGS = $(TARGET_CXXFLAGS) +LIBRAW_CONF_ENV = CXXFLAGS="$(LIBRAW_CXXFLAGS)" + +ifeq ($(BR2_PACKAGE_JASPER),y) +LIBRAW_CONF_OPTS += --enable-jasper +LIBRAW_DEPENDENCIES += jasper +# glibc prior to 2.18 only defines constants such as SIZE_MAX or +# INT_FAST32_MAX for C++ code if __STDC_LIMIT_MACROS is defined +LIBRAW_CXXFLAGS += -D__STDC_LIMIT_MACROS +else +LIBRAW_CONF_OPTS += --disable-jasper +endif + +ifeq ($(BR2_PACKAGE_JPEG),y) +LIBRAW_CONF_OPTS += --enable-jpeg +LIBRAW_DEPENDENCIES += jpeg +else +LIBRAW_CONF_OPTS += --disable-jpeg +endif + +ifeq ($(BR2_PACKAGE_LCMS2),y) +LIBRAW_CONF_OPTS += --enable-lcms +LIBRAW_DEPENDENCIES += lcms2 host-pkgconf +else +LIBRAW_CONF_OPTS += --disable-lcms +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +LIBRAW_CONF_OPTS += --enable-zlib +LIBRAW_DEPENDENCIES += zlib +else +LIBRAW_CONF_OPTS += --disable-zlib +endif + +$(eval $(autotools-package)) diff --git a/package/libraw1394/Config.in b/package/libraw1394/Config.in new file mode 100644 index 00000000..7a64959a --- /dev/null +++ b/package/libraw1394/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBRAW1394 + bool "libraw1394" + help + libraw1394 provides direct access to the IEEE 1394 bus through + the Linux 1394 subsystem's raw1394 user space interface. + + http://sourceforge.net/projects/libraw1394/ diff --git a/package/libraw1394/libraw1394.hash b/package/libraw1394/libraw1394.hash new file mode 100644 index 00000000..9a44ab7d --- /dev/null +++ b/package/libraw1394/libraw1394.hash @@ -0,0 +1,4 @@ +# From https://www.kernel.org/pub/linux/libs/ieee1394/sha256sums.asc +sha256 03ccc69761d22c7deb1127fc301010dd13e70e44bb7134b8ff0d07590259a55e libraw1394-2.1.2.tar.xz +# Locally computed +sha256 5bbcbb737e60fe9deba08ecbd00920cfcc3403ba2e534c64fdeea49d6bb87509 COPYING.LIB diff --git a/package/libraw1394/libraw1394.mk b/package/libraw1394/libraw1394.mk new file mode 100644 index 00000000..7aa4a3ae --- /dev/null +++ b/package/libraw1394/libraw1394.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libraw1394 +# +################################################################################ + +LIBRAW1394_VERSION = 2.1.2 +LIBRAW1394_SOURCE = libraw1394-$(LIBRAW1394_VERSION).tar.xz +LIBRAW1394_SITE = $(BR2_KERNEL_MIRROR)/linux/libs/ieee1394 +LIBRAW1394_INSTALL_STAGING = YES +LIBRAW1394_LICENSE = LGPL-2.1+ +LIBRAW1394_LICENSE_FILES = COPYING.LIB + +$(eval $(autotools-package)) diff --git a/package/librelp/Config.in b/package/librelp/Config.in new file mode 100644 index 00000000..c0ae5fbe --- /dev/null +++ b/package/librelp/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LIBRELP + bool "librelp" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Reliable Event Logging Protocol library + + https://www.rsyslog.com/librelp/ + +comment "librelp needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/librelp/librelp.hash b/package/librelp/librelp.hash new file mode 100644 index 00000000..88665bcf --- /dev/null +++ b/package/librelp/librelp.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 24ee9e843960d1400a44ffaedb0b1ec91463df8f8acca869cc027ed25ee6bf33 librelp-1.9.0.tar.gz +sha256 1ed76f935566e93e3c3c0d9f8fad22eb6d8bbe406e2eb8470a4a2764d9fd9685 COPYING diff --git a/package/librelp/librelp.mk b/package/librelp/librelp.mk new file mode 100644 index 00000000..06f0bd3d --- /dev/null +++ b/package/librelp/librelp.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# librelp +# +################################################################################ + +LIBRELP_VERSION = 1.9.0 +LIBRELP_SITE = http://download.rsyslog.com/librelp +LIBRELP_LICENSE = GPL-3.0+ +LIBRELP_LICENSE_FILES = COPYING +LIBRELP_CPE_ID_VENDOR = rsyslog +LIBRELP_INSTALL_STAGING = YES + +ifeq ($(BR2_PACKAGE_GNUTLS),y) +LIBRELP_DEPENDENCIES += gnutls host-pkgconf +LIBRELP_CONF_OPTS += --enable-tls +else +LIBRELP_CONF_OPTS += --disable-tls +endif + +ifeq ($(BR2_PACKAGE_HAS_OPENSSL),y) +LIBRELP_DEPENDENCIES += openssl host-pkgconf +LIBRELP_CONF_OPTS += --enable-tls-openssl +else +LIBRELP_CONF_OPTS += --disable-tls-openssl +endif + +$(eval $(autotools-package)) diff --git a/package/libreplaygain/Config.in b/package/libreplaygain/Config.in new file mode 100644 index 00000000..d0045b2f --- /dev/null +++ b/package/libreplaygain/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LIBREPLAYGAIN + bool "libreplaygain" + help + Replay Gain library from Musepack + + http://www.musepack.net/ diff --git a/package/libreplaygain/libreplaygain.hash b/package/libreplaygain/libreplaygain.hash new file mode 100644 index 00000000..63e5dca5 --- /dev/null +++ b/package/libreplaygain/libreplaygain.hash @@ -0,0 +1,6 @@ +# From https://www.musepack.net/index.php?pg=src +md5 e27b3b1249b7fbae92d656d9e3d26633 libreplaygain_r475.tar.gz +# Calculated based on the hash above +sha256 8258bf785547ac2cda43bb195e07522f0a3682f55abe97753c974609ec232482 libreplaygain_r475.tar.gz +# Locally computed +sha256 511e7b63ce6530b93932d19da3471a6672586339bc131b2699ad4e9b0ee6c9bb src/gain_analysis.c diff --git a/package/libreplaygain/libreplaygain.mk b/package/libreplaygain/libreplaygain.mk new file mode 100644 index 00000000..ff0950c4 --- /dev/null +++ b/package/libreplaygain/libreplaygain.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libreplaygain +# +################################################################################ + +LIBREPLAYGAIN_VERSION = r475 +LIBREPLAYGAIN_SITE = http://files.musepack.net/source +LIBREPLAYGAIN_SOURCE = libreplaygain_$(LIBREPLAYGAIN_VERSION).tar.gz +# upstream doesn't ship configure +LIBREPLAYGAIN_AUTORECONF = YES +LIBREPLAYGAIN_INSTALL_STAGING = YES +LIBREPLAYGAIN_LICENSE = LGPL-2.1+ +LIBREPLAYGAIN_LICENSE_FILES = src/gain_analysis.c + +$(eval $(autotools-package)) diff --git a/package/libressl/Config.in b/package/libressl/Config.in new file mode 100644 index 00000000..600829cb --- /dev/null +++ b/package/libressl/Config.in @@ -0,0 +1,9 @@ +if BR2_PACKAGE_LIBRESSL + +config BR2_PACKAGE_LIBRESSL_BIN + bool "openssl binary" + help + Install the openssl binary to the target file system. This is + a command line tool for doing various cryptographic stuff. + +endif diff --git a/package/libressl/libressl.hash b/package/libressl/libressl.hash new file mode 100644 index 00000000..9f216bf2 --- /dev/null +++ b/package/libressl/libressl.hash @@ -0,0 +1,4 @@ +# From https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/SHA256 +sha256 798a65fd61d385e09d559810cdfa46512f8def5919264cfef241a7b086ce7cfe libressl-3.2.5.tar.gz +# Locally computed +sha256 5c63613f008f16a9c0025c096bbd736cecf720494d121b5c5203e0ec6e5955b1 COPYING diff --git a/package/libressl/libressl.mk b/package/libressl/libressl.mk new file mode 100644 index 00000000..d09df8f4 --- /dev/null +++ b/package/libressl/libressl.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# libressl +# +################################################################################ + +LIBRESSL_VERSION = 3.2.5 +LIBRESSL_SITE = https://ftp.openbsd.org/pub/OpenBSD/LibreSSL +LIBRESSL_LICENSE = ISC (new additions), OpenSSL or SSLeay (original OpenSSL code) +LIBRESSL_LICENSE_FILES = COPYING +LIBRESSL_CPE_ID_VENDOR = openbsd +LIBRESSL_INSTALL_STAGING = YES +LIBRESSL_CONF_OPTS = -DOPENSSLDIR="/etc/ssl" + +ifeq ($(BR2_PACKAGE_LIBRESSL_BIN),) +define LIBRESSL_REMOVE_BIN + $(RM) -f $(TARGET_DIR)/usr/bin/openssl +endef +LIBRESSL_POST_INSTALL_TARGET_HOOKS += LIBRESSL_REMOVE_BIN +endif + +$(eval $(cmake-package)) diff --git a/package/libroxml/0001-src-roxml_mem.h-add-missing-extern.patch b/package/libroxml/0001-src-roxml_mem.h-add-missing-extern.patch new file mode 100644 index 00000000..6f63d7b5 --- /dev/null +++ b/package/libroxml/0001-src-roxml_mem.h-add-missing-extern.patch @@ -0,0 +1,37 @@ +From b16f6813011519ce247b0af9a4b78486daefad54 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Wed, 26 Aug 2020 22:54:50 +0200 +Subject: [PATCH] src/roxml_mem.h: add missing extern + +Add missing extern to head_cell otherwise the build with gcc 10 (with +-fno-common being default) will fail on: + +/bin/bash ./libtool --tag=CC --mode=link /home/peko/autobuild/instance-0/output-1/host/bin/arm-buildroot-linux-gnueabihf-gcc -DIGNORE_EMPTY_TEXT_NODES -DCONFIG_XML_CONTENT -DCONFIG_XML_NAV -DCONFIG_XML_BUFF -DCONFIG_XML_COMMIT -DCONFIG_XML_EDIT -DCONFIG_XML_FILE -DCONFIG_XML_XPATH -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -pthread -version-info 0:0:0 -o libroxml.la -rpath /usr/lib src/libroxml_la-roxml_core.lo src/libroxml_la-roxml_parser.lo src/libroxml_la-roxml_buff.lo src/libroxml_la-roxml_nav.lo src/libroxml_la-roxml_content.lo src/libroxml_la-roxml_mem.lo src/libroxml_la-roxml_stub.lo src/libroxml_la-roxml_commit.lo src/libroxml_la-roxml_edit.lo src/libroxml_la-roxml_file.lo src/libroxml_la-roxml_xpath.lo -pthread +libtool: link: /home/peko/autobuild/instance-0/output-1/host/bin/arm-buildroot-linux-gnueabihf-gcc -shared -fPIC -DPIC src/.libs/libroxml_la-roxml_core.o src/.libs/libroxml_la-roxml_parser.o src/.libs/libroxml_la-roxml_buff.o src/.libs/libroxml_la-roxml_nav.o src/.libs/libroxml_la-roxml_content.o src/.libs/libroxml_la-roxml_mem.o src/.libs/libroxml_la-roxml_stub.o src/.libs/libroxml_la-roxml_commit.o src/.libs/libroxml_la-roxml_edit.o src/.libs/libroxml_la-roxml_file.o src/.libs/libroxml_la-roxml_xpath.o -O2 -pthread -pthread -pthread -Wl,-soname -Wl,libroxml.so.0 -o .libs/libroxml.so.0.0.0 +/home/peko/autobuild/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: src/.libs/libroxml_la-roxml_mem.o:(.data+0x0): multiple definition of `head_cell'; src/.libs/libroxml_la-roxml_content.o:(.bss+0x0): first defined here + +Fixes: + - http://autobuild.buildroot.org/results/b6ac3664d61ad826515b57c4d057b6f001b5167d + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/blunderer/libroxml/pull/79] +--- + src/roxml_mem.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/roxml_mem.h b/src/roxml_mem.h +index aff6137..34a5070 100644 +--- a/src/roxml_mem.h ++++ b/src/roxml_mem.h +@@ -14,7 +14,7 @@ + + #include "roxml_internal.h" + +-memory_cell_t head_cell; ++extern memory_cell_t head_cell; + + /** \brief alloc memory function + * +-- +2.28.0 + diff --git a/package/libroxml/Config.in b/package/libroxml/Config.in new file mode 100644 index 00000000..2fcf2f2a --- /dev/null +++ b/package/libroxml/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LIBROXML + bool "roxml" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + libroxml is a light and powerful xml parsing library with + xpath handling. Roxml is a binary using libroxml to explore + xml file from shell scripts. + + http://www.libroxml.net + +comment "libroxml needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libroxml/libroxml.hash b/package/libroxml/libroxml.hash new file mode 100644 index 00000000..2e01a549 --- /dev/null +++ b/package/libroxml/libroxml.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 ed6d68d1bceabf98e5e76907411e2e4d93b2dbd48479ab41dede851f59dad6a3 libroxml-3.0.2.tar.gz +sha256 fe11466c265ad0a6c3896ea113af9403c0a8372b1fdd78712db64f0f1bac6387 License.txt diff --git a/package/libroxml/libroxml.mk b/package/libroxml/libroxml.mk new file mode 100644 index 00000000..7e2488ae --- /dev/null +++ b/package/libroxml/libroxml.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# libroxml +# +################################################################################ + +LIBROXML_VERSION = 3.0.2 +LIBROXML_SITE = http://download.libroxml.net/pool/v3.x +LIBROXML_INSTALL_STAGING = YES +LIBROXML_LICENSE = LGPL-2.1+ with static link exception +LIBROXML_LICENSE_FILES = License.txt + +LIBROXML_CONF_OPTS = --disable-silent-rules + +# libroxml forgets to compile/link with -pthread, even though it uses +# thread functions breaking static linking +LIBROXML_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -pthread" LIBS="-pthread" + +$(eval $(autotools-package)) diff --git a/package/librsvg/Config.in b/package/librsvg/Config.in new file mode 100644 index 00000000..3272ecd7 --- /dev/null +++ b/package/librsvg/Config.in @@ -0,0 +1,30 @@ +config BR2_PACKAGE_LIBRSVG + bool "librsvg" + depends on BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + depends on BR2_INSTALL_LIBSTDCPP # pango + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # pango -> harfbuzz + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # pango -> harfbuzz + select BR2_PACKAGE_CAIRO + select BR2_PACKAGE_CAIRO_PNG + select BR2_PACKAGE_CAIRO_SCRIPT + select BR2_PACKAGE_GDK_PIXBUF + select BR2_PACKAGE_HOST_RUSTC + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_PANGO + help + The rsvg library is an efficient renderer for Scalable + Vector Graphics (SVG) pictures. + + https://wiki.gnome.org/Projects/LibRsvg + +comment "librsvg needs a toolchain w/ wchar, threads, C++, gcc >= 4.8" + depends on BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 || \ + !BR2_INSTALL_LIBSTDCPP diff --git a/package/librsvg/librsvg.hash b/package/librsvg/librsvg.hash new file mode 100644 index 00000000..cb558f14 --- /dev/null +++ b/package/librsvg/librsvg.hash @@ -0,0 +1,5 @@ +# From https://ftp.gnome.org/pub/gnome/sources/librsvg/2.50/librsvg-2.50.5.sha256sum +sha256 32701574c234fed352520c6d0bd5081f728184bc1a9b9c87d423dd27c32b9272 librsvg-2.50.5.tar.xz + +# Locally computed +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LIB diff --git a/package/librsvg/librsvg.mk b/package/librsvg/librsvg.mk new file mode 100644 index 00000000..5f3d6883 --- /dev/null +++ b/package/librsvg/librsvg.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# librsvg +# +################################################################################ + +LIBRSVG_VERSION_MAJOR = 2.50 +LIBRSVG_VERSION = $(LIBRSVG_VERSION_MAJOR).5 +LIBRSVG_SITE = http://ftp.gnome.org/pub/gnome/sources/librsvg/$(LIBRSVG_VERSION_MAJOR) +LIBRSVG_SOURCE = librsvg-$(LIBRSVG_VERSION).tar.xz +LIBRSVG_INSTALL_STAGING = YES +LIBRSVG_CONF_ENV = \ + LIBS=$(TARGET_NLS_LIBS) \ + RUST_TARGET=$(RUSTC_TARGET_NAME) +LIBRSVG_CONF_OPTS = --disable-pixbuf-loader --disable-tools +HOST_LIBRSVG_CONF_OPTS = --enable-introspection=no +LIBRSVG_DEPENDENCIES = cairo host-gdk-pixbuf gdk-pixbuf host-rustc libglib2 libxml2 pango \ + $(TARGET_NLS_DEPENDENCIES) +HOST_LIBRSVG_DEPENDENCIES = host-cairo host-gdk-pixbuf host-libglib2 host-libxml2 host-pango host-rustc +LIBRSVG_LICENSE = LGPL-2.1+ +LIBRSVG_LICENSE_FILES = COPYING.LIB +LIBRSVG_CPE_ID_VENDOR = gnome + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +LIBRSVG_CONF_OPTS += --enable-introspection +LIBRSVG_DEPENDENCIES += gobject-introspection +else +LIBRSVG_CONF_OPTS += --disable-introspection +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/librsync/Config.in b/package/librsync/Config.in new file mode 100644 index 00000000..652f0cb2 --- /dev/null +++ b/package/librsync/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBRSYNC + bool "librsync" + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_BZIP2 + select BR2_PACKAGE_POPT + help + librsync implements the rolling-checksum algorithm of + remote file synchronization that was popularized by the + rsync utility and is used in rproxy. + + https://github.com/librsync/librsync diff --git a/package/librsync/librsync.hash b/package/librsync/librsync.hash new file mode 100644 index 00000000..c8ca61e5 --- /dev/null +++ b/package/librsync/librsync.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 ef8ce23df38d5076d25510baa2cabedffbe0af460d887d86c2413a1c2b0c676f librsync-2.3.2.tar.gz +sha256 5bbcbb737e60fe9deba08ecbd00920cfcc3403ba2e534c64fdeea49d6bb87509 COPYING diff --git a/package/librsync/librsync.mk b/package/librsync/librsync.mk new file mode 100644 index 00000000..97f5c607 --- /dev/null +++ b/package/librsync/librsync.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# librsync +# +################################################################################ + +LIBRSYNC_VERSION = 2.3.2 +LIBRSYNC_SITE = https://github.com/librsync/librsync/releases/download/v$(LIBRSYNC_VERSION) +LIBRSYNC_LICENSE = LGPL-2.1+ +LIBRSYNC_LICENSE_FILES = COPYING +LIBRSYNC_CPE_ID_VENDOR = librsync_project +LIBRSYNC_INSTALL_STAGING = YES +LIBRSYNC_DEPENDENCIES = host-pkgconf zlib bzip2 popt + +$(eval $(cmake-package)) diff --git a/package/librtas/Config.in b/package/librtas/Config.in new file mode 100644 index 00000000..11660eb2 --- /dev/null +++ b/package/librtas/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_LIBRTAS + bool "librtas" + depends on BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le + depends on BR2_TOOLCHAIN_USES_GLIBC + help + The librtas package provides an interface for Run-Time + Abstraction Services (RTAS) calls on PAPR platforms. + The libraries allow users to examine and manipulate hardware, + and parse RTAS events. + + http://librtas.sourceforge.net/ + +comment "librtas needs a glibc toolchain" + depends on BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le + depends on !BR2_TOOLCHAIN_USES_GLIBC diff --git a/package/librtas/librtas.hash b/package/librtas/librtas.hash new file mode 100644 index 00000000..de0c0a47 --- /dev/null +++ b/package/librtas/librtas.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 b47b2a6f140347ac265e2c66ddf68293f6cdcc7c0c9a78c6e21ff52846465415 librtas-2.0.2.tar.gz +sha256 592987e8510228d546540b84a22444bde98e48d03078d3b2eefcd889bec5ce8c COPYING.LESSER diff --git a/package/librtas/librtas.mk b/package/librtas/librtas.mk new file mode 100644 index 00000000..c92a9e2f --- /dev/null +++ b/package/librtas/librtas.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# librtas +# +################################################################################ + +LIBRTAS_VERSION = 2.0.2 +LIBRTAS_SITE = $(call github,ibm-power-utilities,librtas,v$(LIBRTAS_VERSION)) +LIBRTAS_LICENSE = LGPL-2.1+ +LIBRTAS_LICENSE_FILES = COPYING.LESSER +LIBRTAS_INSTALL_STAGING = YES +# From git +LIBRTAS_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/librtlsdr/0001-disable_shared_library_target_in_build.patch b/package/librtlsdr/0001-disable_shared_library_target_in_build.patch new file mode 100644 index 00000000..2fb63465 --- /dev/null +++ b/package/librtlsdr/0001-disable_shared_library_target_in_build.patch @@ -0,0 +1,130 @@ +From 9a1c2587d4ef18e2026811deabd024eb7577d9ce Mon Sep 17 00:00:00 2001 +From: Gwenhael Goavec-Merou +Date: Fri, 15 May 2020 16:14:48 +0200 +Subject: [PATCH] disable shared library target in build + +Disable shared library target if BUILD_SHARED_LIBS if OFF. + +Patch retrieved from +https://git.buildroot.net/buildroot/tree/package/librtlsdr/0001-disable_shared_library_target_in_build.patch?h=2020.02.x + +Patch has been updated to work with master and to be able to keep current +behavior of building shared and static version of library if +BUILD_SHARED_LIBS and BUILD_STATIC_LIBS are both set. +Moreover, if BUILD_STATIC_LIBS is OFF, only shared version of library +will be install. + +[Upstream status: http://lists.osmocom.org/pipermail/osmocom-sdr/2020-May/002075.html] + +Signed-off-by: Yuvaraj Patil +Signed-off-by: Fabrice Fontaine +Signed-off-by: Gwenhael Goavec-Merou +Signed-off-by: Titouan Christophe +--- + src/CMakeLists.txt | 30 +++++++++++++++++++++--------- + 1 file changed, 21 insertions(+), 9 deletions(-) + +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index de93044..13b7b1a 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -18,6 +18,8 @@ + ######################################################################## + # Setup shared library variant + ######################################################################## ++option(BUILD_SHARED_LIBS "Build shared library" ON) ++if(BUILD_SHARED_LIBS) + add_library(rtlsdr SHARED librtlsdr.c + tuner_e4k.c tuner_fc0012.c tuner_fc0013.c tuner_fc2580.c tuner_r82xx.c) + target_link_libraries(rtlsdr PkgConfig::LIBUSB) +@@ -30,10 +32,14 @@ set_target_properties(rtlsdr PROPERTIES OUTPUT_NAME rtlsdr) + set_target_properties(rtlsdr PROPERTIES SOVERSION ${MAJOR_VERSION}) + set_target_properties(rtlsdr PROPERTIES VERSION ${LIBVER}) + generate_export_header(rtlsdr) ++list(APPEND rtlsdr_lib rtlsdr) ++endif() + + ######################################################################## + # Setup static library variant + ######################################################################## ++option(BUILD_STATIC_LIBS "Build static library" ON) ++if(BUILD_STATIC_LIBS) + add_library(rtlsdr_static STATIC librtlsdr.c + tuner_e4k.c tuner_fc0012.c tuner_fc0013.c tuner_fc2580.c tuner_r82xx.c) + target_link_libraries(rtlsdr_static PkgConfig::LIBUSB) +@@ -47,6 +53,8 @@ if(NOT WIN32) + set_target_properties(rtlsdr_static PROPERTIES OUTPUT_NAME rtlsdr) + endif() + generate_export_header(rtlsdr_static) ++list(APPEND rtlsdr_lib rtlsdr_static) ++endif() + + ######################################################################## + # Set up Windows DLL resource files +@@ -90,37 +98,37 @@ add_executable(rtl_eeprom rtl_eeprom.c) + add_executable(rtl_adsb rtl_adsb.c) + add_executable(rtl_power rtl_power.c) + add_executable(rtl_biast rtl_biast.c) +-set(INSTALL_TARGETS rtlsdr rtlsdr_static rtl_sdr rtl_tcp rtl_test rtl_fm rtl_eeprom rtl_adsb rtl_power rtl_biast) ++set(INSTALL_TARGETS ${rtlsdr_lib} rtl_sdr rtl_tcp rtl_test rtl_fm rtl_eeprom rtl_adsb rtl_power rtl_biast) + +-target_link_libraries(rtl_sdr rtlsdr convenience_static ++target_link_libraries(rtl_sdr ${rtlsdr_lib} convenience_static + ${LIBUSB_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT} + ) +-target_link_libraries(rtl_tcp rtlsdr convenience_static ++target_link_libraries(rtl_tcp ${rtlsdr_lib} convenience_static + ${LIBUSB_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT} + ) +-target_link_libraries(rtl_test rtlsdr convenience_static ++target_link_libraries(rtl_test ${rtlsdr_lib} convenience_static + ${LIBUSB_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT} + ) +-target_link_libraries(rtl_fm rtlsdr convenience_static ++target_link_libraries(rtl_fm ${rtlsdr_lib} convenience_static + ${LIBUSB_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT} + ) +-target_link_libraries(rtl_eeprom rtlsdr convenience_static ++target_link_libraries(rtl_eeprom ${rtlsdr_lib} convenience_static + ${LIBUSB_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT} + ) +-target_link_libraries(rtl_adsb rtlsdr convenience_static ++target_link_libraries(rtl_adsb ${rtlsdr_lib} convenience_static + ${LIBUSB_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT} + ) +-target_link_libraries(rtl_power rtlsdr convenience_static ++target_link_libraries(rtl_power ${rtlsdr_lib} convenience_static + ${LIBUSB_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT} + ) +-target_link_libraries(rtl_biast rtlsdr convenience_static ++target_link_libraries(rtl_biast ${rtlsdr_lib} convenience_static + ${LIBUSB_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT} + ) +@@ -156,12 +164,16 @@ endif() + ######################################################################## + # Install built library files & utilities + ######################################################################## ++if(BUILD_SHARED_LIBS) + install(TARGETS rtlsdr EXPORT RTLSDR-export + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # .so/.dylib file + ) ++endif() ++if(BUILD_STATIC_LIBS) + install(TARGETS rtlsdr_static EXPORT RTLSDR-export + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} # .so/.dylib file + ) ++endif() + install(TARGETS rtl_sdr rtl_tcp rtl_test rtl_fm rtl_eeprom rtl_adsb rtl_power rtl_biast + DESTINATION ${CMAKE_INSTALL_BINDIR} + ) +-- +2.25.3 + diff --git a/package/librtlsdr/0002-cmake-Modules-Version.cmake-don-t-use-Git-version-if.patch b/package/librtlsdr/0002-cmake-Modules-Version.cmake-don-t-use-Git-version-if.patch new file mode 100644 index 00000000..9c808edd --- /dev/null +++ b/package/librtlsdr/0002-cmake-Modules-Version.cmake-don-t-use-Git-version-if.patch @@ -0,0 +1,47 @@ +From feb5d9c6b7bcec788f9b01781c205e31fff260e7 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 11 Aug 2020 23:07:08 +0200 +Subject: [PATCH] cmake/Modules/Version.cmake: don't use Git version if not in + a Git repo + +If the librtlsdr code comes from a tarball, it doesn't have any .git/ +metadata, and therefore even if Git (as a tool) is found, the logic in +cmake/Modules/Version.cmake fails finding a version through Git: + +-- Extracting version information from git describe... +fatal: Not a git repository (or any of the parent directories): .git + +As a consequence, the VERSION variable is empty, which later causes +cmake to bail out with: + +CMake Error at /home/test/autobuild/run/instance-1/output-1/host/share/cmake-3.15/Modules/WriteBasicConfigVersionFile.cmake:43 (message): + No VERSION specified for WRITE_BASIC_CONFIG_VERSION_FILE() +Call Stack (most recent call first): + /home/test/autobuild/run/instance-1/output-1/host/share/cmake-3.15/Modules/CMakePackageConfigHelpers.cmake:225 (write_basic_config_version_file) + CMakeLists.txt:173 (write_basic_package_version_file) + +To avoid this, we only use Git to determine the version if the cmake +project top-level source directory has a .git/ folder. + +Upstream: https://github.com/librtlsdr/librtlsdr/pull/75 +Signed-off-by: Thomas Petazzoni +--- + cmake/Modules/Version.cmake | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/cmake/Modules/Version.cmake b/cmake/Modules/Version.cmake +index 2d4e76d..6f67fa4 100644 +--- a/cmake/Modules/Version.cmake ++++ b/cmake/Modules/Version.cmake +@@ -32,7 +32,7 @@ set(PATCH_VERSION ${VERSION_INFO_PATCH_VERSION}) + ######################################################################## + find_package(Git QUIET) + +-if(GIT_FOUND) ++if(GIT_FOUND AND EXISTS ${CMAKE_SOURCE_DIR}/.git) + message(STATUS "Extracting version information from git describe...") + execute_process( + COMMAND ${GIT_EXECUTABLE} describe --always --abbrev=4 --long +-- +2.26.2 + diff --git a/package/librtlsdr/Config.in b/package/librtlsdr/Config.in new file mode 100644 index 00000000..2f22c5b1 --- /dev/null +++ b/package/librtlsdr/Config.in @@ -0,0 +1,34 @@ +config BR2_PACKAGE_LIBRTLSDR + bool "librtlsdr" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + help + Library and command line programs for accessing + RTL2832U SDR dongles. + + http://sdr.osmocom.org/trac/wiki/rtl-sdr/ + +if BR2_PACKAGE_LIBRTLSDR + +config BR2_PACKAGE_LIBRTLSDR_DETACH_DRIVER + bool "Detach kernel driver" + default y + help + Enable this option if you would like librtlsdr to + automatically detach any kernel driver associated to the + RTL2832U USB device on startup if one is loaded. + +config BR2_PACKAGE_LIBRTLSDR_ZEROCOPY + bool "Enable usbfs zero-copy support" + default y + help + This option allows to use kernel usbfs mmap instead + of buffers in userspace. If you experiment crash with + kernel < 5.6, disable this option. + +endif + +comment "librtlsdr needs a toolchain w/ threads, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/librtlsdr/librtlsdr.hash b/package/librtlsdr/librtlsdr.hash new file mode 100644 index 00000000..e4b0871d --- /dev/null +++ b/package/librtlsdr/librtlsdr.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 f09ff5ba2fa1780071321ba22885b9d1a16ac9d4b944a97e39b6921960439301 librtlsdr-ed0317e6a58c098874ac58b769cf2e609c18d9a5.tar.gz +# License file, locally calculated +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/librtlsdr/librtlsdr.mk b/package/librtlsdr/librtlsdr.mk new file mode 100644 index 00000000..7796d109 --- /dev/null +++ b/package/librtlsdr/librtlsdr.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# librtlsdr +# +################################################################################ + +LIBRTLSDR_VERSION = ed0317e6a58c098874ac58b769cf2e609c18d9a5 +LIBRTLSDR_SITE = $(call github,steve-m,librtlsdr,$(LIBRTLSDR_VERSION)) +LIBRTLSDR_LICENSE = GPL-2.0+ +LIBRTLSDR_LICENSE_FILES = COPYING +LIBRTLSDR_INSTALL_STAGING = YES +LIBRTLSDR_DEPENDENCIES = libusb + +# BUILD_SHARED_LIBS is handled in pkg-cmake.mk as it is a generic cmake variable +ifeq ($(BR2_STATIC_LIBS),y) +LIBRTLSDR_CONF_OPTS += -DBUILD_STATIC_LIBS=ON +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +LIBRTLSDR_CONF_OPTS += -DBUILD_STATIC_LIBS=ON +else ifeq ($(BR2_SHARED_LIBS),y) +LIBRTLSDR_CONF_OPTS += -DBUILD_STATIC_LIBS=OFF +endif + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +LIBRTLSDR_CONF_OPTS += -DINSTALL_UDEV_RULES=ON +endif + +ifeq ($(BR2_PACKAGE_LIBRTLSDR_DETACH_DRIVER),y) +LIBRTLSDR_CONF_OPTS += -DDETACH_KERNEL_DRIVER=1 +endif + +ifeq ($(BR2_PACKAGE_LIBRTLSDR_ZEROCOPY),y) +LIBRTLSDR_CONF_OPTS += -DENABLE_ZEROCOPY=ON +else +LIBRTLSDR_CONF_OPTS += -DENABLE_ZEROCOPY=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/libsamplerate/Config.in b/package/libsamplerate/Config.in new file mode 100644 index 00000000..b394fdb0 --- /dev/null +++ b/package/libsamplerate/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LIBSAMPLERATE + bool "libsamplerate" + help + Secret Rabbit Code (aka libsamplerate) is a Sample Rate + Converter for audio. One example of where such a thing would + be useful is converting audio from the CD sample rate of + 44.1kHz to the 48kHz sample rate used by DAT players. + + http://www.mega-nerd.com/SRC/ diff --git a/package/libsamplerate/libsamplerate.hash b/package/libsamplerate/libsamplerate.hash new file mode 100644 index 00000000..73722563 --- /dev/null +++ b/package/libsamplerate/libsamplerate.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 0a7eb168e2f21353fb6d84da152e4512126f7dc48ccb0be80578c565413444c1 libsamplerate-0.1.9.tar.gz +# Locally computed +sha256 2c1f76ce2effdddb425018405d5690c0b1ab4e6976e35296b0a6db65c5e1a55d COPYING diff --git a/package/libsamplerate/libsamplerate.mk b/package/libsamplerate/libsamplerate.mk new file mode 100644 index 00000000..146d57d1 --- /dev/null +++ b/package/libsamplerate/libsamplerate.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# libsamplerate +# +################################################################################ + +LIBSAMPLERATE_VERSION = 0.1.9 +LIBSAMPLERATE_SITE = http://www.mega-nerd.com/SRC +LIBSAMPLERATE_INSTALL_STAGING = YES +LIBSAMPLERATE_DEPENDENCIES = host-pkgconf +LIBSAMPLERATE_CONF_OPTS = --disable-fftw --program-transform-name='' +LIBSAMPLERATE_LICENSE = BSD-2-Clause +LIBSAMPLERATE_LICENSE_FILES = COPYING +LIBSAMPLERATE_CPE_ID_VENDOR = libsamplerate_project + +ifeq ($(BR2_PACKAGE_ALSA_LIB),y) +LIBSAMPLERATE_DEPENDENCIES += alsa-lib +endif + +ifeq ($(BR2_PACKAGE_LIBSNDFILE),y) +LIBSAMPLERATE_DEPENDENCIES += libsndfile +endif + +$(eval $(autotools-package)) diff --git a/package/libscrypt/0001-Allow-adding-options-to-CFLAGS-and-LDFLAGS-variables.patch b/package/libscrypt/0001-Allow-adding-options-to-CFLAGS-and-LDFLAGS-variables.patch new file mode 100644 index 00000000..a023a6fe --- /dev/null +++ b/package/libscrypt/0001-Allow-adding-options-to-CFLAGS-and-LDFLAGS-variables.patch @@ -0,0 +1,34 @@ +From 097c5d9248f4afd34c73de5aba01a143ef784257 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Stefan=20S=C3=B8rensen?= +Date: Tue, 14 Mar 2017 09:23:51 +0100 +Subject: [PATCH] Allow adding options to CFLAGS and LDFLAGS variables +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This also removes a number of hard-coded CFLAGS, leaving it up to the +user to pass appropriate optimization/hardening flags. + +Signed-off-by: Stefan Sørensen +--- + Makefile | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Makefile b/Makefile +index 7022a4a..3098a9a 100644 +--- a/Makefile ++++ b/Makefile +@@ -5,8 +5,8 @@ MAKE_DIR ?= install -d + INSTALL_DATA ?= install + + CC?=gcc +-CFLAGS?=-O2 -Wall -g -D_FORTIFY_SOURCE=2 -fstack-protector -fPIC +-LDFLAGS?=-Wl,-z,now -Wl,-z,relro -Wl,-soname,libscrypt.so.0 -Wl,--version-script=libscrypt.version ++override CFLAGS+=-fPIC ++override LDFLAGS+=-Wl,-z,now -Wl,-z,relro -Wl,-soname,libscrypt.so.0 -Wl,--version-script=libscrypt.version + CFLAGS_EXTRA?=-Wl,-rpath=. + + all: reference +-- +2.7.4 + diff --git a/package/libscrypt/Config.in b/package/libscrypt/Config.in new file mode 100644 index 00000000..b467fd6e --- /dev/null +++ b/package/libscrypt/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LIBSCRYPT + bool "libscrypt" + # Unconditionally builds a shared library + depends on !BR2_STATIC_LIBS + help + This is a library that implements the secure password + hashing function "scrypt". + + http://www.lolware.net/libscrypt.html + +comment "libscrypt needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/libscrypt/libscrypt.hash b/package/libscrypt/libscrypt.hash new file mode 100644 index 00000000..fda63d1c --- /dev/null +++ b/package/libscrypt/libscrypt.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 68e377e79745c10d489b759b970e52d819dbb80dd8ca61f8c975185df3f457d3 libscrypt-1.21.tar.gz +sha256 aacbfd9e19e5b38ea09616cebf0751ef0cc7b6a19ea0fd78f4b0598b2c503394 LICENSE diff --git a/package/libscrypt/libscrypt.mk b/package/libscrypt/libscrypt.mk new file mode 100644 index 00000000..fa89ed31 --- /dev/null +++ b/package/libscrypt/libscrypt.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# libscrypt +# +################################################################################ + +LIBSCRYPT_VERSION = 1.21 +LIBSCRYPT_SITE = $(call github,technion,libscrypt,v$(LIBSCRYPT_VERSION)) +LIBSCRYPT_LICENSE = BSD-2-Clause +LIBSCRYPT_LICENSE_FILES = LICENSE +LIBSCRYPT_INSTALL_STAGING = YES + +define LIBSCRYPT_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) +endef + +define LIBSCRYPT_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) PREFIX=/usr \ + DESTDIR=$(STAGING_DIR) install +endef + +define LIBSCRYPT_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) PREFIX=/usr \ + DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/libseccomp/Config.in b/package/libseccomp/Config.in new file mode 100644 index 00000000..d3b4bb81 --- /dev/null +++ b/package/libseccomp/Config.in @@ -0,0 +1,28 @@ +config BR2_PACKAGE_LIBSECCOMP_ARCH_SUPPORTS + bool + default y if BR2_aarch64 + default y if BR2_arm || BR2_armeb + default y if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el + default y if BR2_i386 || BR2_x86_64 + default y if BR2_powerpc64 || BR2_powerpc + +config BR2_PACKAGE_LIBSECCOMP + bool "libseccomp" + depends on BR2_PACKAGE_LIBSECCOMP_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12 + help + High level interface to the Linux Kernel's seccomp filter + + The libseccomp library provides an easy to use, platform + independent, interface to the Linux Kernel's syscall filtering + mechanism: seccomp. The libseccomp API is designed to abstract + away the underlying BPF based syscall filter language and + present a more conventional function-call based filtering + interface that should be familiar to, and easily adopted by + application developers. + + https://github.com/seccomp/libseccomp + +comment "libseccomp needs a toolchain w/ headers >= 3.12" + depends on BR2_PACKAGE_LIBSECCOMP_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12 diff --git a/package/libseccomp/libseccomp.hash b/package/libseccomp/libseccomp.hash new file mode 100644 index 00000000..2d07c1c1 --- /dev/null +++ b/package/libseccomp/libseccomp.hash @@ -0,0 +1,4 @@ +# From https://github.com/seccomp/libseccomp/releases/tag/v2.4.4 +sha256 4e79738d1ef3c9b7ca9769f1f8b8d84fc17143c2c1c432e53b9c64787e0ff3eb libseccomp-2.4.4.tar.gz +# Locally calculated +sha256 102900208eef27b766380135906d431dba87edaa7ec6aa72e6ebd3dd67f3a97b LICENSE diff --git a/package/libseccomp/libseccomp.mk b/package/libseccomp/libseccomp.mk new file mode 100644 index 00000000..e7512730 --- /dev/null +++ b/package/libseccomp/libseccomp.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libseccomp +# +################################################################################ + +LIBSECCOMP_VERSION = 2.4.4 +LIBSECCOMP_SITE = https://github.com/seccomp/libseccomp/releases/download/v$(LIBSECCOMP_VERSION) +LIBSECCOMP_LICENSE = LGPL-2.1 +LIBSECCOMP_LICENSE_FILES = LICENSE +LIBSECCOMP_CPE_ID_VENDOR = libseccomp_project +LIBSECCOMP_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/libsecret/Config.in b/package/libsecret/Config.in new file mode 100644 index 00000000..04a3e46f --- /dev/null +++ b/package/libsecret/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_LIBSECRET + bool "libsecret" + depends on BR2_USE_WCHAR # gettext dep in libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + select BR2_PACKAGE_LIBGLIB2 + help + libsecret is a library for storing and retrieving passwords + and other secrets. It communicates with the "Secret Service" + using DBus. gnome-keyring and ksecretservice are both + implementations of a Secret Service. + + https://wiki.gnome.org/Projects/Libsecret + +comment "libsecret needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libsecret/libsecret.hash b/package/libsecret/libsecret.hash new file mode 100644 index 00000000..792ec838 --- /dev/null +++ b/package/libsecret/libsecret.hash @@ -0,0 +1,5 @@ +# From https://download.gnome.org/sources/libsecret/0.20/libsecret-0.20.4.sha256sum +sha256 325a4c54db320c406711bf2b55e5cb5b6c29823426aa82596a907595abb39d28 libsecret-0.20.4.tar.xz + +# Hash for license file: +sha256 a1a33180d02960ab1c5de36cf20b1a2f0fe9888d83826ad263da5db52f1b183b COPYING diff --git a/package/libsecret/libsecret.mk b/package/libsecret/libsecret.mk new file mode 100644 index 00000000..4d14c231 --- /dev/null +++ b/package/libsecret/libsecret.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# libsecret +# +################################################################################ + +LIBSECRET_VERSION_MAJOR = 0.20 +LIBSECRET_VERSION = $(LIBSECRET_VERSION_MAJOR).4 +LIBSECRET_SITE = http://ftp.gnome.org/pub/GNOME/sources/libsecret/$(LIBSECRET_VERSION_MAJOR) +LIBSECRET_SOURCE = libsecret-$(LIBSECRET_VERSION).tar.xz +LIBSECRET_INSTALL_STAGING = YES +LIBSECRET_DEPENDENCIES = libglib2 $(TARGET_NLS_DEPENDENCIES) +LIBSECRET_CONF_ENV = LIBS=$(TARGET_NLS_LIBS) +LIBSECRET_CONF_OPTS = \ + --disable-manpages \ + --disable-strict \ + --disable-coverage \ + --enable-vala=no +LIBSECRET_LICENSE = LGPL-2.1+ +LIBSECRET_LICENSE_FILES = COPYING + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +LIBSECRET_CONF_OPTS += --enable-introspection=yes +LIBSECRET_DEPENDENCIES += gobject-introspection +else +LIBSECRET_CONF_OPTS += --enable-introspection=no +endif + +ifeq ($(BR2_PACKAGE_LIBGCRYPT),y) +LIBSECRET_DEPENDENCIES += libgcrypt +LIBSECRET_CONF_OPTS += --enable-gcrypt \ + --with-libgcrypt-prefix=$(STAGING_DIR)/usr +else +LIBSECRET_CONF_OPTS += --disable-gcrypt +endif + +$(eval $(autotools-package)) diff --git a/package/libselinux/0001-fix-musl-build.patch b/package/libselinux/0001-fix-musl-build.patch new file mode 100644 index 00000000..44189e64 --- /dev/null +++ b/package/libselinux/0001-fix-musl-build.patch @@ -0,0 +1,38 @@ +From 78f7f09028fdd6a5e8e4e4b584749621eaef412f Mon Sep 17 00:00:00 2001 +From: Yann E. MORIN" +Date: Sat, 7 Dec 2019 17:24:50 -0800 +Subject: [PATCH] fix undefined macros in musl + +musl does not define glibc-specific macros, so use a simple version of +the macro when it is not defined. + +This is very inefficient, however, but copying the code from glibc is +not really possible because it is LGPL while libselinux in Public +Domain, and we want to avoid license propagation, so this macro is +completely written from scratch, and non-optimal. + +Signed-off-by: "Yann E. MORIN" +[Updated for 3.0] +Signed-off-by: Adam Duskett +diff --git a/src/booleans.c b/src/booleans.c +index ffa8d26..8569002 100644 +--- a/src/booleans.c ++++ b/src/booleans.c +@@ -65,6 +65,14 @@ int security_get_boolean_names(char ***names, int *len) + goto bad; + } + ++/* Simple (but inefficient) version of _D_ALLOC_NAMLEN when ++ * building with a C library that misses it (e.g. musl). ++ * Note: glibc does a strlen on (d)->d_name, so assume it is safe. ++ */ ++#ifndef _D_ALLOC_NAMLEN ++#define _D_ALLOC_NAMLEN(d) (strlen((d)->d_name)+1) ++#endif ++ + for (i = 0; i < *len; i++) { + n[i] = strdup(namelist[i]->d_name); + if (!n[i]) { +-- +2.23.0 + diff --git a/package/libselinux/0002-Do-not-use-PYCEXT-and-rely-on-the-installed-file-nam.patch b/package/libselinux/0002-Do-not-use-PYCEXT-and-rely-on-the-installed-file-nam.patch new file mode 100644 index 00000000..cbd98a61 --- /dev/null +++ b/package/libselinux/0002-Do-not-use-PYCEXT-and-rely-on-the-installed-file-nam.patch @@ -0,0 +1,50 @@ +From c26495025ab1a2597e5433b67a3bf793d3ce1e08 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Fri, 25 Oct 2019 13:37:14 +0200 +Subject: [PATCH] Do not use PYCEXT, and rely on the installed file name + +PYCEXT is computed by asking the Python intrepreter what is the +file extension used for native Python modules. + +Unfortunately, when cross-compiling, the host Python doesn't give the +proper result: it gives the result matching the build machine, and not +the target machine. Due to this, the symlink has an incorrect name, +and doesn't point to the .so file that was actually built/installed. + +To address this and keep things simple, this patch just changes the ln +invocation to rely on the name of the _selinux*.so Python module that +was installed. + +Signed-off-by: Antoine Tenart +[Refreshed for 3.1] +Signed-off-by: Thomas Petazzoni +[Refreshed for 3.0] +Signed-off-by: Adam Duskett +--- + src/Makefile | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/src/Makefile b/src/Makefile +index 190016e2af34..7ee22fd35da3 100644 +--- a/src/Makefile ++++ b/src/Makefile +@@ -15,7 +15,6 @@ INCLUDEDIR ?= $(PREFIX)/include + PYINC ?= $(shell $(PKG_CONFIG) --cflags $(PYPREFIX)) + PYLIBS ?= $(shell $(PKG_CONFIG) --libs $(PYPREFIX)) + PYTHONLIBDIR ?= $(shell $(PYTHON) -c "from distutils.sysconfig import *; print(get_python_lib(plat_specific=1, prefix='$(PREFIX)'))") +-PYCEXT ?= $(shell $(PYTHON) -c 'import importlib.machinery;print(importlib.machinery.EXTENSION_SUFFIXES[0])') + RUBYINC ?= $(shell $(RUBY) -e 'puts "-I" + RbConfig::CONFIG["rubyarchhdrdir"] + " -I" + RbConfig::CONFIG["rubyhdrdir"]') + RUBYLIBS ?= $(shell $(RUBY) -e 'puts "-L" + RbConfig::CONFIG["libdir"] + " -L" + RbConfig::CONFIG["archlibdir"] + " " + RbConfig::CONFIG["LIBRUBYARG_SHARED"]') + RUBYINSTALL ?= $(shell $(RUBY) -e 'puts RbConfig::CONFIG["vendorarchdir"]') +@@ -176,7 +175,7 @@ install: all + install-pywrap: pywrap + $(PYTHON) setup.py install --prefix=$(PREFIX) `test -n "$(DESTDIR)" && echo --root $(DESTDIR)` $(PYTHON_SETUP_ARGS) + install -m 644 $(SWIGPYOUT) $(DESTDIR)$(PYTHONLIBDIR)/selinux/__init__.py +- ln -sf --relative $(DESTDIR)$(PYTHONLIBDIR)/selinux/_selinux$(PYCEXT) $(DESTDIR)$(PYTHONLIBDIR)/_selinux$(PYCEXT) ++ ln -sf --relative $(DESTDIR)$(PYTHONLIBDIR)/selinux/_selinux*.so $(DESTDIR)$(PYTHONLIBDIR)/ + + install-rubywrap: rubywrap + test -d $(DESTDIR)$(RUBYINSTALL) || install -m 755 -d $(DESTDIR)$(RUBYINSTALL) +-- +2.26.2 + diff --git a/package/libselinux/0003-libselinux-rename-gettid-to-something-which-never-conflicts.patch b/package/libselinux/0003-libselinux-rename-gettid-to-something-which-never-conflicts.patch new file mode 100644 index 00000000..2a23e98f --- /dev/null +++ b/package/libselinux/0003-libselinux-rename-gettid-to-something-which-never-conflicts.patch @@ -0,0 +1,71 @@ +From 398d2ceef92cb1baac18e6b34a1a8e1bf41296cd Mon Sep 17 00:00:00 2001 +From: Nicolas Iooss +Date: Tue, 16 Feb 2021 22:13:28 +0100 +Subject: [PATCH] libselinux: rename gettid() to something which never + conflicts with the libc + +Musl recently added a wrapper for gettid() syscall. There is no way to +detect this new version in a reliable way, so rename our gettid() +wrapper to a non-conflicting name. + +Introduce a new function which, when using a libc known to provide a +wrapper for gettid(), calls it, and which, otherwise, performs the +syscall directly. + +Anyway this function is only used on systems where /proc/thread-self +does not exist, which are therefore running Linux<3.17. + +Fixes: https://github.com/SELinuxProject/selinux/issues/282 +Signed-off-by: Nicolas Iooss +Acked-by: Petr Lautrbach +[Retrieved from: +https://github.com/SELinuxProject/selinux/commit/398d2ceef92cb1baac18e6b34a1a8e1bf41296cd] +Signed-off-by: Fabrice Fontaine +--- + src/procattr.c | 18 ++++++++++-------- + 1 file changed, 10 insertions(+), 8 deletions(-) + +diff --git a/src/procattr.c b/src/procattr.c +index 1aa67ac53..840570525 100644 +--- a/src/procattr.c ++++ b/src/procattr.c +@@ -25,21 +25,23 @@ static __thread char destructor_initialized; + /* Bionic and glibc >= 2.30 declare gettid() system call wrapper in unistd.h and + * has a definition for it */ + #ifdef __BIONIC__ +- #define OVERRIDE_GETTID 0 ++ #define HAVE_GETTID 1 + #elif !defined(__GLIBC_PREREQ) +- #define OVERRIDE_GETTID 1 ++ #define HAVE_GETTID 0 + #elif !__GLIBC_PREREQ(2,30) +- #define OVERRIDE_GETTID 1 ++ #define HAVE_GETTID 0 + #else +- #define OVERRIDE_GETTID 0 ++ #define HAVE_GETTID 1 + #endif + +-#if OVERRIDE_GETTID +-static pid_t gettid(void) ++static pid_t selinux_gettid(void) + { ++#if HAVE_GETTID ++ return gettid(); ++#else + return syscall(__NR_gettid); +-} + #endif ++} + + static void procattr_thread_destructor(void __attribute__((unused)) *unused) + { +@@ -94,7 +96,7 @@ static int openattr(pid_t pid, const char *attr, int flags) + if (fd >= 0 || errno != ENOENT) + goto out; + free(path); +- tid = gettid(); ++ tid = selinux_gettid(); + rc = asprintf(&path, "/proc/self/task/%d/attr/%s", tid, attr); + } else { + errno = EINVAL; diff --git a/package/libselinux/Config.in b/package/libselinux/Config.in new file mode 100644 index 00000000..62070c8d --- /dev/null +++ b/package/libselinux/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_LIBSELINUX + bool "libselinux" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_LIBSEPOL + select BR2_PACKAGE_PCRE + select BR2_PACKAGE_MUSL_FTS if !BR2_TOOLCHAIN_USES_GLIBC + help + libselinux is the runtime SELinux library that provides + interfaces (e.g. library functions for the SELinux kernel + APIs like getcon(), other support functions like + getseuserbyname()) to SELinux-aware applications. libselinux + may use the shared libsepol to manipulate the binary policy + if necessary (e.g. to downgrade the policy format to an + older version supported by the kernel) when loading policy. + + http://selinuxproject.org/page/Main_Page + +comment "libselinux needs a toolchain w/ threads, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/libselinux/libselinux.hash b/package/libselinux/libselinux.hash new file mode 100644 index 00000000..1101b405 --- /dev/null +++ b/package/libselinux/libselinux.hash @@ -0,0 +1,5 @@ +# From: https://github.com/SELinuxProject/selinux/wiki/Releases +sha256 ea5dcbb4d859e3f999c26a13c630da2f16dff9462e3cc8cb7b458ac157d112e7 libselinux-3.1.tar.gz + +# Hash for license file +sha256 86657b4c0fe868d7cbd977cb04c63b6c667e08fa51595a7bc846ad4bed8fc364 LICENSE diff --git a/package/libselinux/libselinux.mk b/package/libselinux/libselinux.mk new file mode 100644 index 00000000..fdd13aa9 --- /dev/null +++ b/package/libselinux/libselinux.mk @@ -0,0 +1,137 @@ +################################################################################ +# +# libselinux +# +################################################################################ + +LIBSELINUX_VERSION = 3.1 +LIBSELINUX_SITE = https://github.com/SELinuxProject/selinux/releases/download/20200710 +LIBSELINUX_LICENSE = Public Domain +LIBSELINUX_LICENSE_FILES = LICENSE +LIBSELINUX_CPE_ID_VENDOR = selinuxproject + +LIBSELINUX_DEPENDENCIES = $(BR2_COREUTILS_HOST_DEPENDENCY) libsepol pcre + +LIBSELINUX_INSTALL_STAGING = YES + +# Set SHLIBDIR to /usr/lib so it has the same value than LIBDIR, as a result +# we won't have to use a relative path in 0002-revert-ln-relative.patch +LIBSELINUX_MAKE_OPTS = \ + $(TARGET_CONFIGURE_OPTS) \ + ARCH=$(KERNEL_ARCH) \ + SHLIBDIR=/usr/lib + +LIBSELINUX_MAKE_INSTALL_TARGETS = install + +ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),) +LIBSELINUX_DEPENDENCIES += musl-fts +LIBSELINUX_MAKE_OPTS += FTS_LDLIBS=-lfts +endif + +ifeq ($(BR2_PACKAGE_PYTHON3),y) +LIBSELINUX_DEPENDENCIES += python3 host-swig + +LIBSELINUX_MAKE_OPTS += \ + $(PKG_PYTHON_DISTUTILS_ENV) \ + PYTHON=python$(PYTHON3_VERSION_MAJOR) + +LIBSELINUX_MAKE_INSTALL_TARGETS += install-pywrap + +# dependencies are broken and result in file truncation errors at link +# time if the Python bindings are built through the same make +# invocation as the rest of the library. +define LIBSELINUX_BUILD_PYTHON_BINDINGS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + $(LIBSELINUX_MAKE_OPTS) swigify pywrap +endef +endif # python3 + +# Filter out D_FILE_OFFSET_BITS=64. This fixes errors caused by glibc 2.22. We +# set CFLAGS, CPPFLAGS and LDFLAGS here because we want to win over the +# CFLAGS/CPPFLAGS/LDFLAGS definitions passed by $(PKG_PYTHON_DISTUTILS_ENV) +# when the python binding is enabled. +LIBSELINUX_MAKE_OPTS += \ + CFLAGS="$(filter-out -D_FILE_OFFSET_BITS=64,$(TARGET_CFLAGS))" \ + CPPFLAGS="$(filter-out -D_FILE_OFFSET_BITS=64,$(TARGET_CPPFLAGS))" \ + LDFLAGS="$(TARGET_LDFLAGS) -lpcre -lpthread" + +define LIBSELINUX_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + $(LIBSELINUX_MAKE_OPTS) all + $(LIBSELINUX_BUILD_PYTHON_BINDINGS) +endef + +define LIBSELINUX_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + $(LIBSELINUX_MAKE_OPTS) DESTDIR=$(STAGING_DIR) \ + $(LIBSELINUX_MAKE_INSTALL_TARGETS) +endef + +define LIBSELINUX_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + $(LIBSELINUX_MAKE_OPTS) DESTDIR=$(TARGET_DIR) \ + $(LIBSELINUX_MAKE_INSTALL_TARGETS) + if ! grep -q "selinuxfs" $(TARGET_DIR)/etc/fstab; then \ + echo "none /sys/fs/selinux selinuxfs noauto 0 0" >> $(TARGET_DIR)/etc/fstab ; fi +endef + +HOST_LIBSELINUX_DEPENDENCIES = \ + host-libsepol host-pcre host-swig host-python3 + +HOST_LIBSELINUX_MAKE_OPTS = \ + $(HOST_CONFIGURE_OPTS) \ + PREFIX=$(HOST_DIR) \ + SHLIBDIR=$(HOST_DIR)/lib \ + LDFLAGS="$(HOST_LDFLAGS) -lpcre -lpthread" \ + $(HOST_PKG_PYTHON_DISTUTILS_ENV) \ + PYTHON=python$(PYTHON3_VERSION_MAJOR) + +define HOST_LIBSELINUX_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE1) -C $(@D) \ + $(HOST_LIBSELINUX_MAKE_OPTS) all + # Generate python interface wrapper + $(HOST_MAKE_ENV) $(MAKE1) -C $(@D) \ + $(HOST_LIBSELINUX_MAKE_OPTS) swigify pywrap +endef + +define HOST_LIBSELINUX_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) \ + $(HOST_LIBSELINUX_MAKE_OPTS) install + # Install python interface wrapper + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) \ + $(HOST_LIBSELINUX_MAKE_OPTS) install-pywrap +endef + +define LIBSELINUX_LINUX_CONFIG_FIXUPS + $(call KCONFIG_ENABLE_OPT,CONFIG_AUDIT) + $(call KCONFIG_ENABLE_OPT,CONFIG_DEFAULT_SECURITY_SELINUX) + $(call KCONFIG_ENABLE_OPT,CONFIG_INET) + $(call KCONFIG_ENABLE_OPT,CONFIG_NET) + $(call KCONFIG_ENABLE_OPT,CONFIG_SECURITY) + $(call KCONFIG_ENABLE_OPT,CONFIG_SECURITY_NETWORK) + $(call KCONFIG_ENABLE_OPT,CONFIG_SECURITY_SELINUX) + $(call KCONFIG_SET_OPT,CONFIG_LSM,"selinux") + $(if $(BR2_TARGET_ROOTFS_EROFS), + $(call KCONFIG_ENABLE_OPT,CONFIG_EROFS_FS_XATTR) + $(call KCONFIG_ENABLE_OPT,CONFIG_EROFS_FS_SECURITY)) + $(if $(BR2_TARGET_ROOTFS_EXT2), + $(call KCONFIG_ENABLE_OPT,CONFIG_EXT2_FS_XATTR) + $(call KCONFIG_ENABLE_OPT,CONFIG_EXT2_FS_SECURITY)) + $(if $(BR2_TARGET_ROOTFS_EXT2_3), + $(call KCONFIG_ENABLE_OPT,CONFIG_EXT3_FS_SECURITY)) + $(if $(BR2_TARGET_ROOTFS_EXT2_4), + $(call KCONFIG_ENABLE_OPT,CONFIG_EXT4_FS_SECURITY)) + $(if $(BR2_TARGET_ROOTFS_F2FS), + $(call KCONFIG_ENABLE_OPT,CONFIG_F2FS_FS_XATTR) + $(call KCONFIG_ENABLE_OPT,CONFIG_F2FS_FS_SECURITY)) + $(if $(BR2_TARGET_ROOTFS_JFFS2), + $(call KCONFIG_ENABLE_OPT,CONFIG_JFS_SECURITY)) + $(if $(BR2_TARGET_ROOTFS_SQUASHFS), + $(call KCONFIG_ENABLE_OPT,CONFIG_SQUASHFS_XATTR)) + $(if $(BR2_TARGET_ROOTFS_UBIFS), + $(call KCONFIG_ENABLE_OPT,CONFIG_UBIFS_FS_XATTR) + $(call KCONFIG_ENABLE_OPT,CONFIG_UBIFS_FS_SECURITY)) +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/libsemanage/Config.in b/package/libsemanage/Config.in new file mode 100644 index 00000000..3c7050ee --- /dev/null +++ b/package/libsemanage/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_LIBSEMANAGE + bool "libsemanage" + depends on BR2_PACKAGE_AUDIT_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_AUDIT + select BR2_PACKAGE_LIBSELINUX + select BR2_PACKAGE_BZIP2 + help + libsemanage is the policy management library. It uses + libsepol for binary policy manipulation and libselinux for + interacting with the SELinux system. It also exec's helper + programs for loading policy and for checking whether the + file_contexts configuration is valid (load_policy and + setfiles from policycoreutils) presently, although this may + change at least for the bootstrapping case (for rpm). + + http://selinuxproject.org/page/Main_Page + +comment "libsemanage needs a toolchain w/ threads, dynamic library" + depends on BR2_PACKAGE_AUDIT_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/libsemanage/libsemanage.hash b/package/libsemanage/libsemanage.hash new file mode 100644 index 00000000..a977ddab --- /dev/null +++ b/package/libsemanage/libsemanage.hash @@ -0,0 +1,5 @@ +# From: https://github.com/SELinuxProject/selinux/wiki/Releases +sha256 22d6c75526e40d1781c30bcf29abf97171bdfe6780923f11c8e1c76a75a21ff8 libsemanage-3.1.tar.gz + +# Hash for license file +sha256 6095e9ffa777dd22839f7801aa845b31c9ed07f3d6bf8a26dc5d2dec8ccc0ef3 COPYING diff --git a/package/libsemanage/libsemanage.mk b/package/libsemanage/libsemanage.mk new file mode 100644 index 00000000..48e2bbbc --- /dev/null +++ b/package/libsemanage/libsemanage.mk @@ -0,0 +1,58 @@ +################################################################################ +# +# libsemanage +# +################################################################################ + +LIBSEMANAGE_VERSION = 3.1 +LIBSEMANAGE_SITE = https://github.com/SELinuxProject/selinux/releases/download/20200710 +LIBSEMANAGE_LICENSE = LGPL-2.1+ +LIBSEMANAGE_LICENSE_FILES = COPYING +LIBSEMANAGE_DEPENDENCIES = host-bison host-flex audit libselinux bzip2 +LIBSEMANAGE_CPE_ID_VENDOR = selinuxproject +LIBSEMANAGE_INSTALL_STAGING = YES + +LIBSEMANAGE_MAKE_OPTS = $(TARGET_CONFIGURE_OPTS) + +define LIBSEMANAGE_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(LIBSEMANAGE_MAKE_OPTS) all +endef + +define LIBSEMANAGE_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(LIBSEMANAGE_MAKE_OPTS) DESTDIR=$(STAGING_DIR) install +endef + +define LIBSEMANAGE_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(LIBSEMANAGE_MAKE_OPTS) DESTDIR=$(TARGET_DIR) install +endef + +HOST_LIBSEMANAGE_DEPENDENCIES = \ + host-bison \ + host-audit \ + host-libsepol \ + host-libselinux \ + host-bzip2 \ + host-swig \ + host-python3 + +HOST_LIBSEMANAGE_MAKE_OPTS += \ + $(HOST_CONFIGURE_OPTS) \ + PREFIX=$(HOST_DIR) \ + SWIG_LIB="$(HOST_DIR)/share/swig/$(SWIG_VERSION)/" \ + DEFAULT_SEMANAGE_CONF_LOCATION=$(HOST_DIR)/etc/selinux/semanage.conf \ + PYINC="-I$(HOST_DIR)/include/python$(PYTHON3_VERSION_MAJOR)/" \ + PYTHONLIBDIR="$(HOST_DIR)/lib/python$(PYTHON3_VERSION_MAJOR)/" \ + PYLIBVER="python$(PYTHON3_VERSION_MAJOR)" + +define HOST_LIBSEMANAGE_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) $(HOST_LIBSEMANAGE_MAKE_OPTS) all + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) $(HOST_LIBSEMANAGE_MAKE_OPTS) swigify pywrap +endef + +define HOST_LIBSEMANAGE_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) $(HOST_LIBSEMANAGE_MAKE_OPTS) install + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) $(HOST_LIBSEMANAGE_MAKE_OPTS) install-pywrap +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/libsepol/0001-support-static-only.patch b/package/libsepol/0001-support-static-only.patch new file mode 100644 index 00000000..b3eb608f --- /dev/null +++ b/package/libsepol/0001-support-static-only.patch @@ -0,0 +1,47 @@ +From 2140db697c7f1da2a0a3f7bbcb14c1a0dade84e5 Mon Sep 17 00:00:00 2001 +From: Adam Duskett +Date: Mon, 9 Oct 2017 16:28:12 -0400 +Subject: [PATCH] Add support for static-only build + +Instead of unconditionally building shared libraries, this patch +improves the libsepol build system with a "STATIC" variable, which +when defined to some non-empty value, will disable the build of shared +libraries. It allows to support cases where the target architecture +does not have support for shared libraries. + +Signed-off-by: Thomas Petazzoni +Signed-off-by: Adam Duskett +Signed-off-by: Fabrice Fontaine +[Update for 2.8] +--- + src/Makefile | 13 ++++++++++--- + 1 file changed, 10 insertions(+), 3 deletions(-) + +diff -durNw libsepol-2.7.orig/src/Makefile libsepol-2.7/src/Makefile +--- libsepol-2.7.orig/src/Makefile 2018-01-15 21:07:51.285183415 +0100 ++++ libsepol-2.7/src/Makefile 2018-01-15 21:08:56.515182717 +0100 +@@ -39,7 +39,12 @@ + LN=gln + endif + +-all: $(LIBA) $(LIBSO) $(LIBPC) ++ALL_TARGETS = $(LIBA) $(LIBPC) ++ifeq ($(STATIC),) ++ALL_TARGETS += $(LIBSO) ++endif ++ ++all: $(ALL_TARGETS) + + + $(LIBA): $(OBJS) +@@ -81,8 +86,10 @@ + install: all + test -d $(DESTDIR)$(LIBDIR) || install -m 755 -d $(DESTDIR)$(LIBDIR) + install -m 644 $(LIBA) $(DESTDIR)$(LIBDIR) ++ifeq ($(STATIC),) + test -d $(DESTDIR)$(SHLIBDIR) || install -m 755 -d $(DESTDIR)$(SHLIBDIR) + install -m 755 $(LIBSO) $(DESTDIR)$(SHLIBDIR) ++endif + test -d $(DESTDIR)$(LIBDIR)/pkgconfig || install -m 755 -d $(DESTDIR)$(LIBDIR)/pkgconfig + install -m 644 $(LIBPC) $(DESTDIR)$(LIBDIR)/pkgconfig + $(LN) -sf --relative $(DESTDIR)$(SHLIBDIR)/$(LIBSO) $(DESTDIR)$(LIBDIR)/$(TARGET) diff --git a/package/libsepol/Config.in b/package/libsepol/Config.in new file mode 100644 index 00000000..6c66809c --- /dev/null +++ b/package/libsepol/Config.in @@ -0,0 +1,37 @@ +config BR2_PACKAGE_LIBSEPOL + bool "libsepol" + depends on BR2_TOOLCHAIN_HAS_THREADS # pthread + help + Libsepol is the binary policy manipulation library. It doesn't + depend upon or use any of the other SELinux components. + + http://selinuxproject.org/page/Main_Page + +if BR2_PACKAGE_LIBSEPOL + +config BR2_PACKAGE_LIBSEPOL_POLICY_VERSION + int "Policy version" + default 32 if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_5 + default 31 if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_13 + default 30 if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_3 + default 29 if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14 + default 28 if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5 + default 26 if BR2_TOOLCHAIN_HEADERS_AT_LEAST_2_6 + default 25 + help + The maximum SELinux policy version your kernel supports. + + Here's a handy table to help you choose: + kernel version SElinux policy max version + < 2.6.x 25 + >= 2.6 < 3.5 26 + >= 3.5 < 3.14 28 (27 and 28 were added at the same time) + >= 3.14 < 4.3 29 + >= 4.3 < 4.13 30 + >= 4.13 < 5.5 31 + >= 5.5 32 + +endif + +comment "libsepol needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libsepol/libsepol.hash b/package/libsepol/libsepol.hash new file mode 100644 index 00000000..1759d3ba --- /dev/null +++ b/package/libsepol/libsepol.hash @@ -0,0 +1,5 @@ +# From: https://github.com/SELinuxProject/selinux/wiki/Releases +sha256 ae6778d01443fdd38cd30eeee846494e19f4d407b09872580372f4aa4bf8a3cc libsepol-3.1.tar.gz + +# Hash for license file +sha256 6095e9ffa777dd22839f7801aa845b31c9ed07f3d6bf8a26dc5d2dec8ccc0ef3 COPYING diff --git a/package/libsepol/libsepol.mk b/package/libsepol/libsepol.mk new file mode 100644 index 00000000..a4398bdc --- /dev/null +++ b/package/libsepol/libsepol.mk @@ -0,0 +1,53 @@ +################################################################################ +# +# libsepol +# +################################################################################ + +LIBSEPOL_VERSION = 3.1 +LIBSEPOL_SITE = https://github.com/SELinuxProject/selinux/releases/download/20200710 +LIBSEPOL_LICENSE = LGPL-2.1+ +LIBSEPOL_LICENSE_FILES = COPYING +LIBSEPOL_CPE_ID_VENDOR = selinuxproject + +LIBSEPOL_INSTALL_STAGING = YES +LIBSEPOL_DEPENDENCIES = host-flex +HOST_LIBSEPOL_DEPENDENCIES = $(BR2_COREUTILS_HOST_DEPENDENCY) host-flex + +LIBSEPOL_MAKE_FLAGS = $(TARGET_CONFIGURE_OPTS) + +ifeq ($(BR2_STATIC_LIBS),y) +LIBSEPOL_MAKE_FLAGS += STATIC=1 +endif + +define LIBSEPOL_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(LIBSEPOL_MAKE_FLAGS) +endef + +# Set SHLIBDIR to /usr/lib so it has the same value than LIBDIR, as a result +# we won't have to use a relative path in 0002-revert-ln-relative.patch +define LIBSEPOL_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install $(LIBSEPOL_MAKE_FLAGS) \ + DESTDIR=$(STAGING_DIR) SHLIBDIR=/usr/lib +endef + +define LIBSEPOL_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install $(LIBSEPOL_MAKE_FLAGS) \ + DESTDIR=$(TARGET_DIR) SHLIBDIR=/usr/lib +endef + +HOST_LIBSEPOL_MAKE_ENV = \ + $(HOST_MAKE_ENV) \ + PREFIX=$(HOST_DIR) \ + SHLIBDIR=$(HOST_DIR)/lib + +define HOST_LIBSEPOL_BUILD_CMDS + $(HOST_LIBSEPOL_MAKE_ENV) $(MAKE) -C $(@D) $(HOST_CONFIGURE_OPTS) +endef + +define HOST_LIBSEPOL_INSTALL_CMDS + $(HOST_LIBSEPOL_MAKE_ENV) $(MAKE) -C $(@D) install $(HOST_CONFIGURE_OPTS) +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/libserial/0001-SerialPort.cpp-fix-build-when-size_t-is-an-unsigned-.patch b/package/libserial/0001-SerialPort.cpp-fix-build-when-size_t-is-an-unsigned-.patch new file mode 100644 index 00000000..a01da53a --- /dev/null +++ b/package/libserial/0001-SerialPort.cpp-fix-build-when-size_t-is-an-unsigned-.patch @@ -0,0 +1,39 @@ +From 2e4cf095afdcf843e93d1bdea9dbd961558f09bd Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 13 Jan 2019 21:01:19 +0100 +Subject: [PATCH] SerialPort.cpp: fix build when size_t is an unsigned int + +size_t can be defined as an unsigned int instead of long unsigned int so +replace 1UL to (size_t)1 when calling max function + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/crayzeewulf/libserial/pull/126] +--- + src/SerialPort.cpp | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/SerialPort.cpp b/src/SerialPort.cpp +index e354fcb..75e762e 100644 +--- a/src/SerialPort.cpp ++++ b/src/SerialPort.cpp +@@ -2208,7 +2208,7 @@ namespace LibSerial + + // Local variables. + size_t number_of_bytes_read = 0 ; +- size_t number_of_bytes_remaining = std::max(numberOfBytes, 1UL) ; ++ size_t number_of_bytes_remaining = std::max(numberOfBytes, (size_t)1) ; + size_t maximum_number_of_bytes = dataBuffer.max_size() ; + + // Clear the data buffer and reserve enough space in the buffer to store the incoming data. +@@ -2302,7 +2302,7 @@ namespace LibSerial + + // Local variables. + size_t number_of_bytes_read = 0 ; +- size_t number_of_bytes_remaining = std::max(numberOfBytes, 1UL) ; ++ size_t number_of_bytes_remaining = std::max(numberOfBytes, (size_t)1) ; + size_t maximum_number_of_bytes = dataString.max_size() ; + + // Clear the data buffer and reserve enough space in the buffer to store the incoming data. +-- +2.14.1 + diff --git a/package/libserial/0002-SerialPort.cpp-don-t-use-high-baudrates-when-not-ava.patch b/package/libserial/0002-SerialPort.cpp-don-t-use-high-baudrates-when-not-ava.patch new file mode 100644 index 00000000..4f97f598 --- /dev/null +++ b/package/libserial/0002-SerialPort.cpp-don-t-use-high-baudrates-when-not-ava.patch @@ -0,0 +1,53 @@ +From fc0f031563146b91d255c752a61624f6dd3c14d4 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Tue, 15 Jan 2019 08:33:27 +0100 +Subject: [PATCH] SerialPort.cpp: don't use high baudrates when not available + +On certain architectures (namely Sparc), the maximum baud rate exposed +by the kernel headers is B2000000. Therefore, the current libserial +code doesn't build for the Sparc and Sparc64 architectures due to +this. + +In order to address this problem, this patch tests the value of +__MAX_BAUD. If it's higher than B2000000 then we assume we're on an +architecture that supports all baud rates up to B4000000. Otherwise, +we simply don't support the baud rates above B2000000. + +Fixes build failures such as: + +SerialPort.cpp: In member function 'int LibSerial::SerialPort::Implementation::GetBitRate(const LibSerial::BaudRate&) const': +SerialPort.cpp:1226:14: error: 'BAUD_2000000' is not a member of 'LibSerial::BaudRate' + case BaudRate::BAUD_2000000: + +Fixes: + - http://autobuild.buildroot.org/results/63ba95b6786464fa8e75af64593010df84530079 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/crayzeewulf/libserial/pull/127] +--- + src/SerialPort.cpp | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/SerialPort.cpp b/src/SerialPort.cpp +index e3240eb..18daac0 100644 +--- a/src/SerialPort.cpp ++++ b/src/SerialPort.cpp +@@ -1223,6 +1223,7 @@ namespace LibSerial + baud_rate_as_int = 1500000 ; + break ; + ++#if __MAX_BAUD > B2000000 + case BaudRate::BAUD_2000000: + baud_rate_as_int = 2000000 ; + break ; +@@ -1242,6 +1243,7 @@ namespace LibSerial + case BaudRate::BAUD_4000000: + baud_rate_as_int = 4000000 ; + break ; ++#endif /* __MAX_BAUD */ + default: + // If an incorrect baud rate was specified, throw an exception. + throw std::runtime_error(ERR_MSG_INVALID_BAUD_RATE) ; +-- +2.14.1 + diff --git a/package/libserial/Config.in b/package/libserial/Config.in new file mode 100644 index 00000000..d54ae4d8 --- /dev/null +++ b/package/libserial/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_LIBSERIAL + bool "libserial" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5 # C++14 + depends on BR2_TOOLCHAIN_HAS_THREADS # boost + depends on BR2_USE_WCHAR # boost + select BR2_PACKAGE_BOOST + help + Simplified serial port programming in C++ under POSIX + operating systems. + + http://libserial.sourceforge.net/ + +comment "libserial needs a toolchain w/ C++, gcc >= 5, threads, wchar" + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_5 || \ + !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR diff --git a/package/libserial/libserial.hash b/package/libserial/libserial.hash new file mode 100644 index 00000000..30005e39 --- /dev/null +++ b/package/libserial/libserial.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 063142d6bfe08898316e9a6055f2ddeedef56de06f7cfc8dcdfecc6efabf4bdd libserial-1.0.0.tar.gz +sha256 c42fdfe17c192cfdb900e22d40ef246db1b473f99165e405eda62b41be27f4bf LICENSE.txt diff --git a/package/libserial/libserial.mk b/package/libserial/libserial.mk new file mode 100644 index 00000000..bac0382b --- /dev/null +++ b/package/libserial/libserial.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# libserial +# +################################################################################ + +LIBSERIAL_VERSION = 1.0.0 +LIBSERIAL_SITE = $(call github,crayzeewulf,libserial,v$(LIBSERIAL_VERSION)) +LIBSERIAL_INSTALL_STAGING = YES +LIBSERIAL_LICENSE = BSD-3-Clause +LIBSERIAL_LICENSE_FILES = LICENSE.txt +LIBSERIAL_DEPENDENCIES = boost +# From git +LIBSERIAL_AUTORECONF = YES + +LIBSERIAL_CONF_ENV = ac_cv_prog_DOCBOOK2PDF=no +LIBSERIAL_CONF_OPTS = \ + --disable-tests \ + --without-python + +$(eval $(autotools-package)) diff --git a/package/libserialport/0001-uclinux-detection.patch b/package/libserialport/0001-uclinux-detection.patch new file mode 100644 index 00000000..7d7199c1 --- /dev/null +++ b/package/libserialport/0001-uclinux-detection.patch @@ -0,0 +1,26 @@ +From faab9aa5879fab93556b7a3a6f24070eeb3cbf15 Mon Sep 17 00:00:00 2001 +From: Paul Cercueil +Date: Mon, 29 Aug 2016 11:11:01 +0200 +Subject: [PATCH] Fix Linux files not compiled in with a toolchain for ucLinux + +Signed-off-by: Paul Cercueil +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index f6b66e8..de6f5b9 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -74,7 +74,7 @@ AC_DEFINE_UNQUOTED([SP_LIB_VERSION_REVISION], [$SP_LIB_VERSION_REVISION], [.]) + AC_DEFINE_UNQUOTED([SP_LIB_VERSION_AGE], [$SP_LIB_VERSION_AGE], [.]) + AC_DEFINE_UNQUOTED([SP_LIB_VERSION_STRING], ["$SP_LIB_VERSION"], [.]) + +-AM_CONDITIONAL([LINUX], [test -z "${host_os##linux*}"]) ++AM_CONDITIONAL([LINUX], [test -z "${host_os##linux*}" || test -z "${host_os##uclinux*}"]) + AM_CONDITIONAL([WIN32], [test -z "${host_os##mingw*}" || test -z "${host_os##cygwin*}"]) + AM_CONDITIONAL([MACOSX], [test -z "${host_os##darwin*}"]) + AM_CONDITIONAL([FREEBSD], [test -z "${host_os##freebsd*}"]) +-- +2.8.1 + diff --git a/package/libserialport/Config.in b/package/libserialport/Config.in new file mode 100644 index 00000000..d8218309 --- /dev/null +++ b/package/libserialport/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LIBSERIALPORT + bool "libserialport" + help + Libserialport is a minimal, cross-platform shared + library written in C that is intended to take care + of the OS-specific details when writing software + that uses serial ports. + + http://sigrok.org/wiki/Libserialport diff --git a/package/libserialport/libserialport.hash b/package/libserialport/libserialport.hash new file mode 100644 index 00000000..39f0c8f1 --- /dev/null +++ b/package/libserialport/libserialport.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 4a2af9d9c3ff488e92fb75b4ba38b35bcf9b8a66df04773eba2a7bbf1fa7529d libserialport-0.1.1.tar.gz +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 COPYING diff --git a/package/libserialport/libserialport.mk b/package/libserialport/libserialport.mk new file mode 100644 index 00000000..84d7a531 --- /dev/null +++ b/package/libserialport/libserialport.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# libserialport +# +################################################################################ + +LIBSERIALPORT_VERSION = 0.1.1 +LIBSERIALPORT_SITE = http://sigrok.org/download/source/libserialport +LIBSERIALPORT_LICENSE = LGPL-3.0+ +LIBSERIALPORT_LICENSE_FILES = COPYING +LIBSERIALPORT_INSTALL_STAGING = YES +LIBSERIALPORT_DEPENDENCIES = host-pkgconf +LIBSERIALPORT_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/libsexy/Config.in b/package/libsexy/Config.in new file mode 100644 index 00000000..a2a2cc82 --- /dev/null +++ b/package/libsexy/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBSEXY + bool "libsexy" + depends on BR2_PACKAGE_LIBGTK2 + select BR2_PACKAGE_LIBXML2 + help + libsexy is a collection of GTK+ widgets that extend the + functionality of such standard widgets as GtkEntry and + GtkLabel by subclassing them and working around the + limitations of the widgets. + + https://blog.chipx86.com/tag/libsexy/ diff --git a/package/libsexy/libsexy.hash b/package/libsexy/libsexy.hash new file mode 100644 index 00000000..6f47e8ba --- /dev/null +++ b/package/libsexy/libsexy.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 8c4101a8cda5fccbba85ba1a15f46f2cf75deaa8b3c525ce5b135b9e1a8fe49e libsexy-0.1.11.tar.gz +sha256 a190dc9c8043755d90f8b0a75fa66b9e42d4af4c980bf5ddc633f0124db3cee7 COPYING diff --git a/package/libsexy/libsexy.mk b/package/libsexy/libsexy.mk new file mode 100644 index 00000000..b0792641 --- /dev/null +++ b/package/libsexy/libsexy.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libsexy +# +################################################################################ + +LIBSEXY_VERSION = 0.1.11 +LIBSEXY_SITE = http://releases.chipx86.com/libsexy/libsexy +LIBSEXY_DEPENDENCIES = libgtk2 libxml2 +LIBSEXY_INSTALL_STAGING = YES +LIBSEXY_LICENSE = LGPL-2.1+ +LIBSEXY_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/libsha1/Config.in b/package/libsha1/Config.in new file mode 100644 index 00000000..5467a6c4 --- /dev/null +++ b/package/libsha1/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LIBSHA1 + bool "libsha1" + help + libsha1 is a tiny library providing SHA1 implementation, + created for facilitating X server compilation on devices + when larger libraries containing SHA1 implementations + (OpenSSL, Mozilla NSS) are not needed. + + https://github.com/dottedmag/libsha1 diff --git a/package/libsha1/libsha1.hash b/package/libsha1/libsha1.hash new file mode 100644 index 00000000..5a2b0ed1 --- /dev/null +++ b/package/libsha1/libsha1.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 ef4c75007ac41c3dc09e0225943c789ba2b9c632a6cd7b548e0519477ac2f768 libsha1-0.3.tar.gz +sha256 4c387926596bfeacc5b72ebeb96ab36c299a07568e18592c727a6c11dd512c20 COPYING diff --git a/package/libsha1/libsha1.mk b/package/libsha1/libsha1.mk new file mode 100644 index 00000000..4d80f3aa --- /dev/null +++ b/package/libsha1/libsha1.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# libsha1 +# +################################################################################ + +LIBSHA1_VERSION = 0.3 +LIBSHA1_SITE = $(call github,dottedmag,libsha1,$(LIBSHA1_VERSION)) +LIBSHA1_LICENSE = BSD-3-Clause or GPL +LIBSHA1_LICENSE_FILES = COPYING + +LIBSHA1_INSTALL_STAGING = YES + +# We're getting the source code from GitHub, so there is no generated +# configure script in the tarball. +LIBSHA1_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/libshairplay/Config.in b/package/libshairplay/Config.in new file mode 100644 index 00000000..1cfbdfe4 --- /dev/null +++ b/package/libshairplay/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_LIBSHAIRPLAY + bool "libshairplay" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # avahi + depends on !BR2_STATIC_LIBS # avahi + select BR2_PACKAGE_AVAHI + select BR2_PACKAGE_AVAHI_DAEMON + select BR2_PACKAGE_AVAHI_LIBDNSSD_COMPATIBILITY # runtime + help + libshairplay is a client library that emulates an airplay + server. + + https://github.com/juhovh/shairplay + +comment "libshairplay needs a toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/libshairplay/libshairplay.hash b/package/libshairplay/libshairplay.hash new file mode 100644 index 00000000..9b12b5a5 --- /dev/null +++ b/package/libshairplay/libshairplay.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 49ac0e0470ec6367f720c7b79a09165138f57b60f5949a2d9c38be5823d13294 libshairplay-ce80e005908f41d0e6fde1c4a21e9cb8ee54007b.tar.gz +sha256 0ac7d61c52aff5717c02250ca0adf0ef35019e2c0838a3479b8fce597aea6fde LICENSE diff --git a/package/libshairplay/libshairplay.mk b/package/libshairplay/libshairplay.mk new file mode 100644 index 00000000..4b2883cd --- /dev/null +++ b/package/libshairplay/libshairplay.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# libshairplay +# +################################################################################ + +LIBSHAIRPLAY_VERSION = ce80e005908f41d0e6fde1c4a21e9cb8ee54007b +LIBSHAIRPLAY_SITE = $(call github,juhovh,shairplay,$(LIBSHAIRPLAY_VERSION)) +LIBSHAIRPLAY_INSTALL_STAGING = YES +LIBSHAIRPLAY_AUTORECONF = YES +LIBSHAIRPLAY_LICENSE = MIT, BSD-3-Clause, LGPL-2.1+ +LIBSHAIRPLAY_LICENSE_FILES = LICENSE +LIBSHAIRPLAY_DEPENDENCIES = host-pkgconf $(if $(BR2_PACKAGE_LIBAO),libao) + +$(eval $(autotools-package)) diff --git a/package/libshout/0001-configure.ac-add-an-option-to-disable-tools.patch b/package/libshout/0001-configure.ac-add-an-option-to-disable-tools.patch new file mode 100644 index 00000000..5c20db72 --- /dev/null +++ b/package/libshout/0001-configure.ac-add-an-option-to-disable-tools.patch @@ -0,0 +1,51 @@ +From 148b56bf894192cef6dd133715e295260b934a71 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Fri, 5 Mar 2021 15:50:32 +0100 +Subject: [PATCH] configure.ac: add an option to disable tools + +Signed-off-by: Fabrice Fontaine +[Upstream status: +https://gitlab.xiph.org/xiph/icecast-libshout/-/issues/2331] +--- + Makefile.am | 5 ++++- + configure.ac | 5 +++++ + 2 files changed, 9 insertions(+), 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index ea855cf..79241f1 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -3,10 +3,13 @@ + AUTOMAKE_OPTIONS = 1.6 foreign + ACLOCAL_AMFLAGS = -I m4 + +-SUBDIRS = include src doc win32 tools ++SUBDIRS = include src doc win32 + if HAVE_EXAMPLES + SUBDIRS += examples + endif ++if HAVE_TOOLS ++SUBDIRS += tools ++endif + + EXTRA_DIST = INSTALL m4/shout.m4 m4/acx_pthread.m4 \ + m4/ogg.m4 m4/vorbis.m4 m4/xiph_compiler.m4 m4/xiph_net.m4 \ +diff --git a/configure.ac b/configure.ac +index 264b9b0..34f971c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -100,6 +100,11 @@ AC_ARG_ENABLE([examples], + AS_HELP_STRING([--disable-examples],[Do not build example code])) + AM_CONDITIONAL([HAVE_EXAMPLES],[test "${enable_examples}" != "no"]) + ++dnl Allow tools not to be build ++AC_ARG_ENABLE([tools], ++ AS_HELP_STRING([--disable-tools],[Do not build tools])) ++AM_CONDITIONAL([HAVE_TOOLS],[test "${enable_tools}" != "no"]) ++ + dnl Module checks + XIPH_NET + +-- +2.30.0 + diff --git a/package/libshout/Config.in b/package/libshout/Config.in new file mode 100644 index 00000000..f8749b91 --- /dev/null +++ b/package/libshout/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBSHOUT + bool "libshout" + select BR2_PACKAGE_LIBOGG + select BR2_PACKAGE_LIBVORBIS + help + Libshout is a library for communicating with and sending data + to an icecast server. It handles the socket connection, the + timing of the data, and prevents bad data from getting to the + icecast server. + + http://icecast.org/download/ diff --git a/package/libshout/libshout.hash b/package/libshout/libshout.hash new file mode 100644 index 00000000..ae43e0a9 --- /dev/null +++ b/package/libshout/libshout.hash @@ -0,0 +1,8 @@ +# From https://ftp.osuosl.org/pub/xiph/releases/libshout/SHA512SUMS +sha512 290844185da16961f03434d3e341573dd6cb0139e5fa81902903021b641382d2629302d7c356bc591b35656754e07f4e44a8d9e782e092b17a051b9ae8f54341 libshout-2.4.5.tar.gz + +# From https://ftp.osuosl.org/pub/xiph/releases/libshout/SHA256SUMS +sha256 d9e568668a673994ebe3f1eb5f2bee06e3236a5db92b8d0c487e1c0f886a6890 libshout-2.4.5.tar.gz + +# Hash for license file +sha256 7a4436f9ec37603356791c87de3bc444989befd2682d29efb3d97604e04c1852 COPYING diff --git a/package/libshout/libshout.mk b/package/libshout/libshout.mk new file mode 100644 index 00000000..57d26390 --- /dev/null +++ b/package/libshout/libshout.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# libshout +# +################################################################################ + +LIBSHOUT_VERSION = 2.4.5 +LIBSHOUT_SITE = https://downloads.xiph.org/releases/libshout +LIBSHOUT_LICENSE = LGPL-2.0+ +LIBSHOUT_LICENSE_FILES = COPYING +LIBSHOUT_INSTALL_STAGING = YES +LIBSHOUT_DEPENDENCIES = host-pkgconf libogg libvorbis +# We're patching configure.ac +LIBSHOUT_AUTORECONF = YES +LIBSHOUT_CONF_OPTS = \ + --disable-examples \ + --disable-tools + +ifeq ($(BR2_PACKAGE_LIBTHEORA),y) +LIBSHOUT_CONF_OPTS += --enable-theora +LIBSHOUT_DEPENDENCIES += libtheora +else +LIBSHOUT_CONF_OPTS += --disable-theora +endif + +ifeq ($(BR2_PACKAGE_SPEEX),y) +LIBSHOUT_CONF_OPTS += --enable-speex +LIBSHOUT_DEPENDENCIES += speex +else +LIBSHOUT_CONF_OPTS += --disable-speex +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +LIBSHOUT_CONF_OPTS += --with-openssl +LIBSHOUT_DEPENDENCIES += openssl +else ifeq ($(BR2_PACKAGE_LIBRESSL),y) +LIBSHOUT_CONF_OPTS += --with-openssl=$(STAGING_DIR)/lib +LIBSHOUT_DEPENDENCIES += libressl +else +LIBSHOUT_CONF_OPTS += --without-openssl +endif + +$(eval $(autotools-package)) diff --git a/package/libsidplay2/0001-sidplay2-libs-2.1.1.patch b/package/libsidplay2/0001-sidplay2-libs-2.1.1.patch new file mode 100644 index 00000000..7c6813bb --- /dev/null +++ b/package/libsidplay2/0001-sidplay2-libs-2.1.1.patch @@ -0,0 +1,227 @@ +From 38493fceb39ac33e12c9c69d78f5584413b479f4 Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Wed, 1 Mar 2017 10:03:40 +0100 +Subject: [PATCH] Various fixes to compile libsidplay2 with newer gcc compilers + +Downloaded from +http://tsubasa.googlecode.com/svn/trunk/tsubasa/sidplay2-libs/sidplay2-libs-2.1.1.diff + +Signed-off-by: Bernd Kuhls +[Thomas: adjusted to avoid the need to autoreconf, which doesn't work +properly on this package.] +Signed-off-by: Thomas Petazzoni +--- + builders/hardsid-builder/src/hardsid-builder.cpp | 1 + + builders/resid-builder/src/resid-builder.cpp | 1 + + builders/resid-builder/src/resid.cpp | 1 + + configure | 2 +- + libsidplay/configure | 5 +++-- + libsidplay/include/sidplay/SmartPtr.h | 28 ++++++++++++------------ + libsidplay/include/sidplay/sidendian.h | 18 +++++++++------ + libsidutils/include/sidplay/utils/SidUsage.h | 2 +- + 8 files changed, 33 insertions(+), 25 deletions(-) + +diff --git a/builders/hardsid-builder/src/hardsid-builder.cpp b/builders/hardsid-builder/src/hardsid-builder.cpp +index f54d0a9..9375e40 100644 +--- a/builders/hardsid-builder/src/hardsid-builder.cpp ++++ b/builders/hardsid-builder/src/hardsid-builder.cpp +@@ -47,6 +47,7 @@ + ***************************************************************************/ + + #include ++#include + #include "config.h" + + #ifdef HAVE_EXCEPTIONS +diff --git a/builders/resid-builder/src/resid-builder.cpp b/builders/resid-builder/src/resid-builder.cpp +index e6e4eaa..4c7650f 100644 +--- a/builders/resid-builder/src/resid-builder.cpp ++++ b/builders/resid-builder/src/resid-builder.cpp +@@ -37,6 +37,7 @@ + ***************************************************************************/ + + #include ++#include + + #include "config.h" + #ifdef HAVE_EXCEPTIONS +diff --git a/builders/resid-builder/src/resid.cpp b/builders/resid-builder/src/resid.cpp +index 8c27850..d3123c5 100644 +--- a/builders/resid-builder/src/resid.cpp ++++ b/builders/resid-builder/src/resid.cpp +@@ -16,6 +16,7 @@ + * * + ***************************************************************************/ + ++#include + #include "config.h" + + #ifdef HAVE_EXCEPTIONS +diff --git a/configure b/configure +index 1200eaf..77948b4 100755 +--- a/configure ++++ b/configure +@@ -1227,7 +1227,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + + #Variables + pwd=`pwd` +-builders='${libdir}'/sidplay/builders ++builders='${libdir}'/ + ac_configure_args="$ac_configure_args --disable-library-checks" + + ac_aux_dir= +diff --git a/libsidplay/configure b/libsidplay/configure +index 05a8ea6..3d93956 100755 +--- a/libsidplay/configure ++++ b/libsidplay/configure +@@ -23466,8 +23466,9 @@ _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ +-#include +- #include ++#include ++ #include ++ using namespace std; + int + main () + { +diff --git a/libsidplay/include/sidplay/SmartPtr.h b/libsidplay/include/sidplay/SmartPtr.h +index c0cbb1a..15efd10 100644 +--- a/libsidplay/include/sidplay/SmartPtr.h ++++ b/libsidplay/include/sidplay/SmartPtr.h +@@ -17,16 +17,16 @@ class SmartPtrBase_sidtt + doFree = bufOwner; + if ( bufferLen >= 1 ) + { +- pBufCurrent = ( bufBegin = buffer ); +- bufEnd = bufBegin + bufferLen; +- bufLen = bufferLen; +- status = true; ++ this->pBufCurrent = ( this->bufBegin = buffer ); ++ this->bufEnd = this->bufBegin + bufferLen; ++ this->bufLen = bufferLen; ++ this->status = true; + } + else + { +- pBufCurrent = ( bufBegin = ( bufEnd = 0 )); +- bufLen = 0; +- status = false; ++ this->pBufCurrent = ( this->bufBegin = ( this->bufEnd = 0 )); ++ this->bufLen = 0; ++ this->status = false; + } + } + +@@ -211,16 +211,16 @@ class SmartPtr_sidtt : public SmartPtrBase_sidtt + { + if ( bufferLen >= 1 ) + { +- pBufCurrent = ( bufBegin = buffer ); +- bufEnd = bufBegin + bufferLen; +- bufLen = bufferLen; +- status = true; ++ this->pBufCurrent = ( this->bufBegin = buffer ); ++ this->bufEnd = this->bufBegin + bufferLen; ++ this->bufLen = bufferLen; ++ this->status = true; + } + else + { +- pBufCurrent = bufBegin = bufEnd = 0; +- bufLen = 0; +- status = false; ++ this->pBufCurrent = this->bufBegin = this->bufEnd = 0; ++ this->bufLen = 0; ++ this->status = false; + } + } + }; +diff --git a/libsidplay/include/sidplay/sidendian.h b/libsidplay/include/sidplay/sidendian.h +index 9fa8582..6115282 100644 +--- a/libsidplay/include/sidplay/sidendian.h ++++ b/libsidplay/include/sidplay/sidendian.h +@@ -16,6 +16,10 @@ + ***************************************************************************/ + /*************************************************************************** + * $Log: sidendian.h,v $ ++ * Revision 1.6 2005/11/20 11:02:06 s_a_white ++ * Work around for bug in gcc 4 (optimiser breaks if variable never has a ++ * direct assignment). ++ * + * Revision 1.5 2001/07/03 22:44:13 s_a_white + * Added endian_16 to convert a 16 bit value to an array of 8s. + * +@@ -141,7 +145,7 @@ inline void endian_16swap8 (uint_least16_t &word) + // Convert high-byte and low-byte to 16-bit word. + inline uint_least16_t endian_16 (uint8_t hi, uint8_t lo) + { +- uint_least16_t word; ++ uint_least16_t word = 0; + endian_16lo8 (word, lo); + endian_16hi8 (word, hi); + return word; +@@ -165,7 +169,7 @@ inline void endian_16 (uint8_t ptr[2], uint_least16_t word) + + inline void endian_16 (char ptr[2], uint_least16_t word) + { +- endian_16 ((uint8_t *) ptr, word); ++ endian_16 ((uint8_t *) ptr, word); + } + + // Convert high-byte and low-byte to 16-bit little endian word. +@@ -334,7 +338,7 @@ inline void endian_32swap16 (uint_least32_t &dword) + // Swap word endian. + inline void endian_32swap8 (uint_least32_t &dword) + { +- uint_least16_t lo, hi; ++ uint_least16_t lo = 0, hi = 0; + lo = endian_32lo16 (dword); + hi = endian_32hi16 (dword); + endian_16swap8 (lo); +@@ -346,8 +350,8 @@ inline void endian_32swap8 (uint_least32_t &dword) + // Convert high-byte and low-byte to 32-bit word. + inline uint_least32_t endian_32 (uint8_t hihi, uint8_t hilo, uint8_t hi, uint8_t lo) + { +- uint_least32_t dword; +- uint_least16_t word; ++ uint_least32_t dword = 0; ++ uint_least16_t word = 0; + endian_32lo8 (dword, lo); + endian_32hi8 (dword, hi); + endian_16lo8 (word, hilo); +@@ -374,7 +378,7 @@ inline void endian_little32 (uint8_t ptr[4], uint_least32_t dword) + defined(SID_WORDS_LITTLEENDIAN) + *((uint_least32_t *) ptr) = dword; + #else +- uint_least16_t word; ++ uint_least16_t word = 0; + ptr[0] = endian_32lo8 (dword); + ptr[1] = endian_32hi8 (dword); + word = endian_32hi16 (dword); +@@ -401,7 +405,7 @@ inline void endian_big32 (uint8_t ptr[4], uint_least32_t dword) + defined(SID_WORDS_BIGENDIAN) + *((uint_least32_t *) ptr) = dword; + #else +- uint_least16_t word; ++ uint_least16_t word = 0; + word = endian_32hi16 (dword); + ptr[1] = endian_16lo8 (word); + ptr[0] = endian_16hi8 (word); +diff --git a/libsidutils/include/sidplay/utils/SidUsage.h b/libsidutils/include/sidplay/utils/SidUsage.h +index 2afb0f3..0496eea 100755 +--- a/libsidutils/include/sidplay/utils/SidUsage.h ++++ b/libsidutils/include/sidplay/utils/SidUsage.h +@@ -33,7 +33,7 @@ struct sid2_usage_t: public sid_usage_t + uint_least16_t length; // usage scan length + + // Copy common parts of basic usage to extended usage. +- sid2_usage_t &sid2_usage_t::operator= (const sid_usage_t &usage) ++ sid2_usage_t &operator= (const sid_usage_t &usage) + { + *((sid_usage_t *) this) = usage; + return *this; +-- +2.7.4 + diff --git a/package/libsidplay2/0002-pkg-config.patch b/package/libsidplay2/0002-pkg-config.patch new file mode 100644 index 00000000..ce37e942 --- /dev/null +++ b/package/libsidplay2/0002-pkg-config.patch @@ -0,0 +1,25 @@ +Include correct libdir in pkgconfig files + +Downloaded from +https://sources.debian.net/src/sidplay-libs/2.1.1-14/debian/patches/pkg-config.patch/ + +Signed-off-by: Bernd Kuhls + +--- sidplay-libs-2.1.1.orig/libsidplay/unix/libsidplay2.pc.in ++++ sidplay-libs-2.1.1/libsidplay/unix/libsidplay2.pc.in +@@ -7,5 +7,5 @@ builders=@builders@ + Name: @PACKAGE@ + Description: C64 cycle exact stereo sidplayer library. + Version: @VERSION@ +-Libs: ${libdir}/libsidplay2.la ++Libs: -L${libdir} -lsidplay2 + Cflags: -DHAVE_UNIX -I${includedir} +--- sidplay-libs-2.1.1.orig/libsidutils/unix/libsidutils.pc.in ++++ sidplay-libs-2.1.1/libsidutils/unix/libsidutils.pc.in +@@ -6,5 +6,5 @@ includedir=@includedir@ + Name: @PACKAGE@ + Description: Utils for supporting the libsidplay2 library. + Version: @VERSION@ +-Libs: ${libdir}/libsidutils.la ++Libs: -L${libdir} -lsidutils + Cflags: -DHAVE_UNIX -I${includedir} diff --git a/package/libsidplay2/0003-gcc6.patch b/package/libsidplay2/0003-gcc6.patch new file mode 100644 index 00000000..53601f6d --- /dev/null +++ b/package/libsidplay2/0003-gcc6.patch @@ -0,0 +1,44 @@ +Fix build with gcc6 + +gcc6 triggers an error during build: + +xsid.cpp:101:1: error: narrowing conversion of ''\200'' from 'char' to 'int8_t {aka signed char}' inside { } [-Wnarrowing] + }; + ^ +xsid.cpp:101:1: error: narrowing conversion of ''\224'' from 'char' to 'int8_t {aka signed char}' inside { } [-Wnarrowing] +xsid.cpp:101:1: error: narrowing conversion of ''\251'' from 'char' to 'int8_t {aka signed char}' inside { } [-Wnarrowing] +xsid.cpp:101:1: error: narrowing conversion of ''\274'' from 'char' to 'int8_t {aka signed char}' inside { } [-Wnarrowing] +xsid.cpp:101:1: error: narrowing conversion of ''\316'' from 'char' to 'int8_t {aka signed char}' inside { } [-Wnarrowing] +xsid.cpp:101:1: error: narrowing conversion of ''\341'' from 'char' to 'int8_t {aka signed char}' inside { } [-Wnarrowing] +xsid.cpp:101:1: error: narrowing conversion of ''\362'' from 'char' to 'int8_t {aka signed char}' inside { } [-Wnarrowing] + +To fix the problem change the array type from int8_t to char as proposed +by Khem Raj: +http://lists.busybox.net/pipermail/buildroot/2016-August/169540.html + +Signed-off-by: Bernd Kuhls + +diff -uNr sidplay-libs-2.1.1.org/libsidplay/src/xsid/xsid.cpp sidplay-libs-2.1.1/libsidplay/src/xsid/xsid.cpp +--- sidplay-libs-2.1.1.org/libsidplay/src/xsid/xsid.cpp 2004-06-14 22:08:02.000000000 +0200 ++++ sidplay-libs-2.1.1/libsidplay/src/xsid/xsid.cpp 2016-08-12 18:10:20.000000000 +0200 +@@ -94,7 +94,7 @@ + '\x08', '\x19', '\x2a', '\x3b', '\x4c', '\x5d', '\x6e', '\x7f' + }; + */ +-const int8_t XSID::sampleConvertTable[16] = ++const char XSID::sampleConvertTable[16] = + { + '\x80', '\x94', '\xa9', '\xbc', '\xce', '\xe1', '\xf2', '\x03', + '\x1b', '\x2a', '\x3b', '\x49', '\x58', '\x66', '\x73', '\x7f' +diff -uNr sidplay-libs-2.1.1.org/libsidplay/src/xsid/xsid.h sidplay-libs-2.1.1/libsidplay/src/xsid/xsid.h +--- sidplay-libs-2.1.1.org/libsidplay/src/xsid/xsid.h 2004-06-14 22:08:02.000000000 +0200 ++++ sidplay-libs-2.1.1/libsidplay/src/xsid/xsid.h 2016-08-12 18:11:01.000000000 +0200 +@@ -238,7 +238,7 @@ + uint8_t sidData0x18; + bool _sidSamples; + int8_t sampleOffset; +- static const int8_t sampleConvertTable[16]; ++ static const char sampleConvertTable[16]; + bool wasRunning; + + private: diff --git a/package/libsidplay2/Config.in b/package/libsidplay2/Config.in new file mode 100644 index 00000000..1bbe49ba --- /dev/null +++ b/package/libsidplay2/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_LIBSIDPLAY2 + bool "libsidplay2" + depends on BR2_INSTALL_LIBSTDCPP + help + Sidplay 2 is the second in the Sidplay series originally + developed by Michael Schwendt. This version is written by + Simon White and is cycle accurate for improved sound + reproduction. Sidplay 2 is capable of playing all C64 mono and + stereo file formats. + + http://sourceforge.net/projects/sidplay2 + +comment "libsidplay2 needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/libsidplay2/libsidplay2.hash b/package/libsidplay2/libsidplay2.hash new file mode 100644 index 00000000..5342135a --- /dev/null +++ b/package/libsidplay2/libsidplay2.hash @@ -0,0 +1,4 @@ +# From http://sourceforge.net/projects/sidplay2/files/sidplay2/sidplay-libs-2.1.1/ +sha1 8af6350866edc30b0d331e075fa97292f6f645a5 sidplay-libs-2.1.1.tar.gz +# Locally computed +sha256 b8a2f73f743dc1a51aff23f1aacbca4b868564db52496fa3c0caba755bfd1eaf libsidplay/COPYING diff --git a/package/libsidplay2/libsidplay2.mk b/package/libsidplay2/libsidplay2.mk new file mode 100644 index 00000000..20af7726 --- /dev/null +++ b/package/libsidplay2/libsidplay2.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libsidplay2 +# +################################################################################ + +LIBSIDPLAY2_VERSION = 2.1.1 +LIBSIDPLAY2_SOURCE = sidplay-libs-$(LIBSIDPLAY2_VERSION).tar.gz +LIBSIDPLAY2_SITE = http://downloads.sourceforge.net/project/sidplay2/sidplay2/sidplay-libs-$(LIBSIDPLAY2_VERSION) +LIBSIDPLAY2_LICENSE = GPL-2.0+ +LIBSIDPLAY2_LICENSE_FILES = libsidplay/COPYING +LIBSIDPLAY2_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/libsigc/Config.in b/package/libsigc/Config.in new file mode 100644 index 00000000..4bd762ef --- /dev/null +++ b/package/libsigc/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_LIBSIGC + bool "libsigc++" + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11 + depends on BR2_INSTALL_LIBSTDCPP + help + libsigc++ implements a typesafe callback system for standard + C++. It allows you to define signals and to connect those + signals to any callback function, either global or a member + function, regardless of whether it is static or virtual. + + http://libsigc.sourceforge.net/ + +comment "libsigc++ needs a toolchain w/ C++, gcc >= 4.8" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 diff --git a/package/libsigc/libsigc.hash b/package/libsigc/libsigc.hash new file mode 100644 index 00000000..bc3880f7 --- /dev/null +++ b/package/libsigc/libsigc.hash @@ -0,0 +1,5 @@ +# From http://ftp.gnome.org/pub/gnome/sources/libsigc++/2.10/libsigc++-2.10.0.sha256sum +sha256 f843d6346260bfcb4426259e314512b99e296e8ca241d771d21ac64f28298d81 libsigc++-2.10.0.tar.xz + +# Locally calculated +sha256 5bbcbb737e60fe9deba08ecbd00920cfcc3403ba2e534c64fdeea49d6bb87509 COPYING diff --git a/package/libsigc/libsigc.mk b/package/libsigc/libsigc.mk new file mode 100644 index 00000000..d7cbd36d --- /dev/null +++ b/package/libsigc/libsigc.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# libsigc +# +################################################################################ + +LIBSIGC_VERSION_MAJOR = 2.10 +LIBSIGC_VERSION = $(LIBSIGC_VERSION_MAJOR).0 +LIBSIGC_SOURCE = libsigc++-$(LIBSIGC_VERSION).tar.xz +LIBSIGC_SITE = http://ftp.gnome.org/pub/GNOME/sources/libsigc++/$(LIBSIGC_VERSION_MAJOR) +LIBSIGC_DEPENDENCIES = host-m4 +LIBSIGC_INSTALL_STAGING = YES +LIBSIGC_LICENSE = LGPL-2.1+ +LIBSIGC_LICENSE_FILES = COPYING + +define LIBSIGC_INSTALL_TARGET_FIXUP + rm -rf $(TARGET_DIR)/usr/share/devhelp/books/libsigc++* +endef + +LIBSIGC_POST_INSTALL_TARGET_HOOKS += LIBSIGC_INSTALL_TARGET_FIXUP + +$(eval $(autotools-package)) diff --git a/package/libsigrok/Config.in b/package/libsigrok/Config.in new file mode 100644 index 00000000..69531e62 --- /dev/null +++ b/package/libsigrok/Config.in @@ -0,0 +1,46 @@ +config BR2_PACKAGE_LIBSIGROK + bool "libsigrok" + # libglib2 + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU + depends on BR2_ENABLE_LOCALE + depends on !BR2_STATIC_LIBS # libzip + # std=c11 + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 + select BR2_PACKAGE_LIBZIP + select BR2_PACKAGE_LIBGLIB2 + help + Libsigrok is a shared library written in C, which provides + the basic hardware access drivers for logic analyzers and + other supported devices, as well as input/output file format + support. + + This library is a part of the sigrok software suite. + + http://sigrok.org/wiki/Libsigrok + +if BR2_PACKAGE_LIBSIGROK + +config BR2_PACKAGE_LIBSIGROKCXX + bool "build C++ bindings" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # glibmm + depends on BR2_HOST_GCC_AT_LEAST_4_9 # host-doxygen + select BR2_PACKAGE_GLIBMM + select BR2_PACKAGE_HOST_DOXYGEN + help + Build libsigrok C++ bindings as well. + +comment "C++ bindings need a toolchain w/ C++, gcc >= 4.9, host gcc >= 4.9" + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || \ + !BR2_HOST_GCC_AT_LEAST_4_9 + +endif + +comment "libsigrok needs a toolchain w/ wchar, locale, threads, dynamic library, gcc >= 4.7" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS \ + || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 || BR2_STATIC_LIBS \ + || !BR2_ENABLE_LOCALE diff --git a/package/libsigrok/libsigrok.hash b/package/libsigrok/libsigrok.hash new file mode 100644 index 00000000..0898a2fb --- /dev/null +++ b/package/libsigrok/libsigrok.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 4d341f90b6220d3e8cb251dacf726c41165285612248f2c52d15df4590a1ce3c libsigrok-0.5.2.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/libsigrok/libsigrok.mk b/package/libsigrok/libsigrok.mk new file mode 100644 index 00000000..8e7c355f --- /dev/null +++ b/package/libsigrok/libsigrok.mk @@ -0,0 +1,65 @@ +################################################################################ +# +# libsigrok +# +################################################################################ + +LIBSIGROK_VERSION = 0.5.2 +LIBSIGROK_SITE = http://sigrok.org/download/source/libsigrok +LIBSIGROK_LICENSE = GPL-3.0+ +LIBSIGROK_LICENSE_FILES = COPYING +LIBSIGROK_INSTALL_STAGING = YES +LIBSIGROK_DEPENDENCIES = libglib2 libzip host-pkgconf +LIBSIGROK_CONF_OPTS = --disable-java --disable-python + +ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS),y) +LIBSIGROK_CONF_OPTS += --with-libbluez +LIBSIGROK_DEPENDENCIES += bluez5_utils +else +LIBSIGROK_CONF_OPTS += --without-libbluez +endif + +ifeq ($(BR2_PACKAGE_HIDAPI),y) +LIBSIGROK_CONF_OPTS += --with-libhidapi +LIBSIGROK_DEPENDENCIES += hidapi +else +LIBSIGROK_CONF_OPTS += --without-libhidapi +endif + +ifeq ($(BR2_PACKAGE_LIBSERIALPORT),y) +LIBSIGROK_CONF_OPTS += --with-libserialport +LIBSIGROK_DEPENDENCIES += libserialport +else +LIBSIGROK_CONF_OPTS += --without-libserialport +endif + +ifeq ($(BR2_PACKAGE_LIBFTDI1),y) +LIBSIGROK_CONF_OPTS += --with-libftdi +LIBSIGROK_DEPENDENCIES += libftdi1 +else +LIBSIGROK_CONF_OPTS += --without-libftdi +endif + +ifeq ($(BR2_PACKAGE_LIBUSB),y) +LIBSIGROK_CONF_OPTS += --with-libusb +LIBSIGROK_DEPENDENCIES += libusb +else +LIBSIGROK_CONF_OPTS += --without-libusb +endif + +ifeq ($(BR2_PACKAGE_GLIBMM),y) +LIBSIGROK_DEPENDENCIES += glibmm +endif + +ifeq ($(BR2_PACKAGE_LIBSIGROKCXX),y) +LIBSIGROK_CONF_OPTS += --enable-cxx +# host-doxygen is used by C++ bindings to parse libsigrok symbols +LIBSIGROK_DEPENDENCIES += \ + glibmm \ + host-doxygen \ + $(if $(BR2_PACKAGE_PYTHON3),host-python3,host-python) +else +LIBSIGROK_CONF_OPTS += --disable-cxx +endif + +$(eval $(autotools-package)) diff --git a/package/libsigrokdecode/0001-configure-ac-Add-support-for-Python-3-9.patch b/package/libsigrokdecode/0001-configure-ac-Add-support-for-Python-3-9.patch new file mode 100644 index 00000000..804e931d --- /dev/null +++ b/package/libsigrokdecode/0001-configure-ac-Add-support-for-Python-3-9.patch @@ -0,0 +1,28 @@ +From 9b0ad5177bd692f7556a4756bdbd2da81d9c34ce Mon Sep 17 00:00:00 2001 +From: =?utf8?q?Dan=20Hor=C3=A1k?= +Date: Tue, 4 Aug 2020 09:19:44 +0200 +Subject: [PATCH] configure.ac: Add support for Python 3.9. + +[Retrieved from: +https://sigrok.org/gitweb/?p=libsigrokdecode.git;a=commit;h=9b0ad5177bd692f7556a4756bdbd2da81d9c34ce] +Signed-off-by: Fabrice Fontaine +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index f9958b3..2917cb3 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -100,7 +100,7 @@ SR_PKG_CHECK_SUMMARY([srd_pkglibs_summary]) + # first, since usually only that variant will add "-lpython3.8". + # https://docs.python.org/3/whatsnew/3.8.html#debug-build-uses-the-same-abi-as-release-build + SR_PKG_CHECK([python3], [SRD_PKGLIBS], +- [python-3.8-embed], [python-3.8 >= 3.8], [python-3.7 >= 3.7], [python-3.6 >= 3.6], [python-3.5 >= 3.5], [python-3.4 >= 3.4], [python-3.3 >= 3.3], [python-3.2 >= 3.2], [python3 >= 3.2]) ++ [python-3.9-embed], [python-3.8-embed], [python-3.8 >= 3.8], [python-3.7 >= 3.7], [python-3.6 >= 3.6], [python-3.5 >= 3.5], [python-3.4 >= 3.4], [python-3.3 >= 3.3], [python-3.2 >= 3.2], [python3 >= 3.2]) + AS_IF([test "x$sr_have_python3" = xno], + [AC_MSG_ERROR([Cannot find Python 3 development headers.])]) + +-- +2.24.0.rc2 + diff --git a/package/libsigrokdecode/Config.in b/package/libsigrokdecode/Config.in new file mode 100644 index 00000000..28cbb5ca --- /dev/null +++ b/package/libsigrokdecode/Config.in @@ -0,0 +1,27 @@ +config BR2_PACKAGE_LIBSIGROKDECODE + bool "libsigrokdecode" + depends on !BR2_PACKAGE_PYTHON # python3 + depends on BR2_USE_WCHAR # libglib2/python3 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2/python3 + depends on BR2_USE_MMU # libglib2/python3 + depends on !BR2_STATIC_LIBS # python3 + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_PYTHON3 + help + Libsigrokdecode is a shared library written in C, which + provides (streaming) protocol decoding functionality. Say + yes here if you want to add this functionality to your + buildroot-generated sigrok suite. + + This library is a part of the sigrok software suite. + + http://sigrok.org/wiki/Libsigrokdecode + +comment "libsigrokdecode needs a toolchain w/ wchar, threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_PACKAGE_PYTHON + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS + +comment "libsigrokdecode is not compatible with python" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_PYTHON diff --git a/package/libsigrokdecode/libsigrokdecode.hash b/package/libsigrokdecode/libsigrokdecode.hash new file mode 100644 index 00000000..44e03ad3 --- /dev/null +++ b/package/libsigrokdecode/libsigrokdecode.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 c50814aa6743cd8c4e88c84a0cdd8889d883c3be122289be90c63d7d67883fc0 libsigrokdecode-0.5.3.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/libsigrokdecode/libsigrokdecode.mk b/package/libsigrokdecode/libsigrokdecode.mk new file mode 100644 index 00000000..18f2cbfe --- /dev/null +++ b/package/libsigrokdecode/libsigrokdecode.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libsigrokdecode +# +################################################################################ + +LIBSIGROKDECODE_VERSION = 0.5.3 +LIBSIGROKDECODE_SITE = http://sigrok.org/download/source/libsigrokdecode +LIBSIGROKDECODE_LICENSE = GPL-3.0+ +LIBSIGROKDECODE_LICENSE_FILES = COPYING +LIBSIGROKDECODE_INSTALL_STAGING = YES +LIBSIGROKDECODE_DEPENDENCIES = host-pkgconf libglib2 python3 +# We're patching configure.ac +LIBSIGROKDECODE_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/libsigsegv/Config.in b/package/libsigsegv/Config.in new file mode 100644 index 00000000..8e89ff5a --- /dev/null +++ b/package/libsigsegv/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBSIGSEGV_ARCH_SUPPORTS + bool + default y if BR2_TOOLCHAIN_HAS_UCONTEXT + +config BR2_PACKAGE_LIBSIGSEGV + bool "libsigsegv" + depends on BR2_PACKAGE_LIBSIGSEGV_ARCH_SUPPORTS + help + Library for handling page faults in user mode. + + http://www.gnu.org/software/libsigsegv/ diff --git a/package/libsigsegv/libsigsegv.hash b/package/libsigsegv/libsigsegv.hash new file mode 100644 index 00000000..c827e6b8 --- /dev/null +++ b/package/libsigsegv/libsigsegv.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +# https://ftp.gnu.org/gnu/libsigsegv/libsigsegv-2.13.tar.gz.sig +sha256 be78ee4176b05f7c75ff03298d84874db90f4b6c9d5503f0da1226b3a3c48119 libsigsegv-2.13.tar.gz +# Locally calculated +sha256 8f2983e9a940367f48999881c14775db725ee643bce1e2f1ba195eb629a33cde COPYING diff --git a/package/libsigsegv/libsigsegv.mk b/package/libsigsegv/libsigsegv.mk new file mode 100644 index 00000000..87a5d7a1 --- /dev/null +++ b/package/libsigsegv/libsigsegv.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libsigsegv +# +################################################################################ + +LIBSIGSEGV_VERSION = 2.13 +LIBSIGSEGV_SITE = $(BR2_GNU_MIRROR)/libsigsegv +LIBSIGSEGV_INSTALL_STAGING = YES +LIBSIGSEGV_CONF_ENV = sv_cv_fault_posix=yes +LIBSIGSEGV_LICENSE = GPL-2.0+ +LIBSIGSEGV_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/libsilk/Config.in b/package/libsilk/Config.in new file mode 100644 index 00000000..10fe03ad --- /dev/null +++ b/package/libsilk/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LIBSILK + bool "libsilk" + help + SILK is an audio compression format and audio codec. + + http://tools.ietf.org/html/draft-vos-silk-01 diff --git a/package/libsilk/libsilk.hash b/package/libsilk/libsilk.hash new file mode 100644 index 00000000..14f66762 --- /dev/null +++ b/package/libsilk/libsilk.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 ac79eb4c154af25c0ab25e12d60d3b4165c399903fe88d82e066cf6d9827503e libsilk-4268a02240c35c6055b0f237c46b09b2dcf79e45-br1.tar.gz +sha256 62a5963f034024665641f4a9888b208f1e39aa7e29e87c9634fdcf07d3073baf COPYING diff --git a/package/libsilk/libsilk.mk b/package/libsilk/libsilk.mk new file mode 100644 index 00000000..eba70852 --- /dev/null +++ b/package/libsilk/libsilk.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libsilk +# +################################################################################ + +LIBSILK_VERSION = 4268a02240c35c6055b0f237c46b09b2dcf79e45 +# we use the FreeSwitch fork because it contains pkgconf support +LIBSILK_SITE = https://freeswitch.org/stash/scm/sd/libsilk.git +LIBSILK_SITE_METHOD = git +LIBSILK_LICENSE = BSD-3-Clause +LIBSILK_LICENSE_FILES = COPYING +LIBSILK_AUTORECONF = YES +LIBSILK_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/libsndfile/0001-double64_init-Check-psf-sf.channels-against-upper-bo.patch b/package/libsndfile/0001-double64_init-Check-psf-sf.channels-against-upper-bo.patch new file mode 100644 index 00000000..59ba8f85 --- /dev/null +++ b/package/libsndfile/0001-double64_init-Check-psf-sf.channels-against-upper-bo.patch @@ -0,0 +1,39 @@ +From 85c877d5072866aadbe8ed0c3e0590fbb5e16788 Mon Sep 17 00:00:00 2001 +From: Fabian Greffrath +Date: Thu, 28 Sep 2017 12:15:04 +0200 +Subject: [PATCH] double64_init: Check psf->sf.channels against upper bound + +This prevents division by zero later in the code. + +While the trivial case to catch this (i.e. sf.channels < 1) has already +been covered, a crafted file may report a number of channels that is +so high (i.e. > INT_MAX/sizeof(double)) that it "somehow" gets +miscalculated to zero (if this makes sense) in the determination of the +blockwidth. Since we only support a limited number of channels anyway, +make sure to check here as well. + +CVE-2017-14634 + +Closes: https://github.com/erikd/libsndfile/issues/318 +Signed-off-by: Erik de Castro Lopo +Signed-off-by: Peter Korsgaard +--- + src/double64.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/double64.c b/src/double64.c +index b318ea86..78dfef7f 100644 +--- a/src/double64.c ++++ b/src/double64.c +@@ -91,7 +91,7 @@ int + double64_init (SF_PRIVATE *psf) + { static int double64_caps ; + +- if (psf->sf.channels < 1) ++ if (psf->sf.channels < 1 || psf->sf.channels > SF_MAX_CHANNELS) + { psf_log_printf (psf, "double64_init : internal error : channels = %d\n", psf->sf.channels) ; + return SFE_INTERNAL ; + } ; +-- +2.11.0 + diff --git a/package/libsndfile/0002-Check-MAX_CHANNELS-in-sndfile-deinterleave.patch b/package/libsndfile/0002-Check-MAX_CHANNELS-in-sndfile-deinterleave.patch new file mode 100644 index 00000000..3b828de6 --- /dev/null +++ b/package/libsndfile/0002-Check-MAX_CHANNELS-in-sndfile-deinterleave.patch @@ -0,0 +1,36 @@ +From aaea680337267bfb6d2544da878890ee7f1c5077 Mon Sep 17 00:00:00 2001 +From: "Brett T. Warden" +Date: Tue, 28 Aug 2018 12:01:17 -0700 +Subject: [PATCH] Check MAX_CHANNELS in sndfile-deinterleave + +Allocated buffer has space for only 16 channels. Verify that input file +meets this limit. + +Fixes #397 + +Signed-off-by: Peter Korsgaard +--- + programs/sndfile-deinterleave.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/programs/sndfile-deinterleave.c b/programs/sndfile-deinterleave.c +index 53660310..225b4d54 100644 +--- a/programs/sndfile-deinterleave.c ++++ b/programs/sndfile-deinterleave.c +@@ -89,6 +89,13 @@ main (int argc, char **argv) + exit (1) ; + } ; + ++ if (sfinfo.channels > MAX_CHANNELS) ++ { printf ("\nError : Input file '%s' has too many (%d) channels. Limit is %d.\n", ++ argv [1], sfinfo.channels, MAX_CHANNELS) ; ++ exit (1) ; ++ } ; ++ ++ + state.channels = sfinfo.channels ; + sfinfo.channels = 1 ; + +-- +2.11.0 + diff --git a/package/libsndfile/0003-a-ulaw-fix-multiple-buffer-overflows-432.patch b/package/libsndfile/0003-a-ulaw-fix-multiple-buffer-overflows-432.patch new file mode 100644 index 00000000..536bad26 --- /dev/null +++ b/package/libsndfile/0003-a-ulaw-fix-multiple-buffer-overflows-432.patch @@ -0,0 +1,96 @@ +From 8ddc442d539ca775d80cdbc7af17a718634a743f Mon Sep 17 00:00:00 2001 +From: Hugo Lefeuvre +Date: Mon, 24 Dec 2018 06:43:48 +0100 +Subject: [PATCH] a/ulaw: fix multiple buffer overflows (#432) + +i2ulaw_array() and i2alaw_array() fail to handle ptr [count] = INT_MIN +properly, leading to buffer underflow. INT_MIN is a special value +since - INT_MIN cannot be represented as int. + +In this case round - INT_MIN to INT_MAX and proceed as usual. + +f2ulaw_array() and f2alaw_array() fail to handle ptr [count] = NaN +properly, leading to null pointer dereference. + +In this case, arbitrarily set the buffer value to 0. + +This commit fixes #429 (CVE-2018-19661 and CVE-2018-19662) and +fixes #344 (CVE-2017-17456 and CVE-2017-17457). + +Signed-off-by: Peter Korsgaard +--- + src/alaw.c | 9 +++++++-- + src/ulaw.c | 9 +++++++-- + 2 files changed, 14 insertions(+), 4 deletions(-) + +diff --git a/src/alaw.c b/src/alaw.c +index 063fd1a2..4220224c 100644 +--- a/src/alaw.c ++++ b/src/alaw.c +@@ -19,6 +19,7 @@ + #include "sfconfig.h" + + #include ++#include + + #include "sndfile.h" + #include "common.h" +@@ -326,7 +327,9 @@ s2alaw_array (const short *ptr, int count, unsigned char *buffer) + static inline void + i2alaw_array (const int *ptr, int count, unsigned char *buffer) + { while (--count >= 0) +- { if (ptr [count] >= 0) ++ { if (ptr [count] == INT_MIN) ++ buffer [count] = alaw_encode [INT_MAX >> (16 + 4)] ; ++ else if (ptr [count] >= 0) + buffer [count] = alaw_encode [ptr [count] >> (16 + 4)] ; + else + buffer [count] = 0x7F & alaw_encode [- ptr [count] >> (16 + 4)] ; +@@ -346,7 +349,9 @@ f2alaw_array (const float *ptr, int count, unsigned char *buffer, float normfact + static inline void + d2alaw_array (const double *ptr, int count, unsigned char *buffer, double normfact) + { while (--count >= 0) +- { if (ptr [count] >= 0) ++ { if (!isfinite (ptr [count])) ++ buffer [count] = 0 ; ++ else if (ptr [count] >= 0) + buffer [count] = alaw_encode [lrint (normfact * ptr [count])] ; + else + buffer [count] = 0x7F & alaw_encode [- lrint (normfact * ptr [count])] ; +diff --git a/src/ulaw.c b/src/ulaw.c +index e50b4cb5..b6070ade 100644 +--- a/src/ulaw.c ++++ b/src/ulaw.c +@@ -19,6 +19,7 @@ + #include "sfconfig.h" + + #include ++#include + + #include "sndfile.h" + #include "common.h" +@@ -827,7 +828,9 @@ s2ulaw_array (const short *ptr, int count, unsigned char *buffer) + static inline void + i2ulaw_array (const int *ptr, int count, unsigned char *buffer) + { while (--count >= 0) +- { if (ptr [count] >= 0) ++ { if (ptr [count] == INT_MIN) ++ buffer [count] = ulaw_encode [INT_MAX >> (16 + 2)] ; ++ else if (ptr [count] >= 0) + buffer [count] = ulaw_encode [ptr [count] >> (16 + 2)] ; + else + buffer [count] = 0x7F & ulaw_encode [-ptr [count] >> (16 + 2)] ; +@@ -847,7 +850,9 @@ f2ulaw_array (const float *ptr, int count, unsigned char *buffer, float normfact + static inline void + d2ulaw_array (const double *ptr, int count, unsigned char *buffer, double normfact) + { while (--count >= 0) +- { if (ptr [count] >= 0) ++ { if (!isfinite (ptr [count])) ++ buffer [count] = 0 ; ++ else if (ptr [count] >= 0) + buffer [count] = ulaw_encode [lrint (normfact * ptr [count])] ; + else + buffer [count] = 0x7F & ulaw_encode [- lrint (normfact * ptr [count])] ; +-- +2.11.0 + diff --git a/package/libsndfile/0004-src-wav.c-Fix-heap-read-overflow.patch b/package/libsndfile/0004-src-wav.c-Fix-heap-read-overflow.patch new file mode 100644 index 00000000..2e730ca3 --- /dev/null +++ b/package/libsndfile/0004-src-wav.c-Fix-heap-read-overflow.patch @@ -0,0 +1,35 @@ +From 42132c543358cee9f7c3e9e9b15bb6c1063a608e Mon Sep 17 00:00:00 2001 +From: Erik de Castro Lopo +Date: Tue, 1 Jan 2019 20:11:46 +1100 +Subject: [PATCH] src/wav.c: Fix heap read overflow + +This is CVE-2018-19758. + +Closes: https://github.com/erikd/libsndfile/issues/435 +[Retrieved (and backported) from: +https://github.com/erikd/libsndfile/commit/42132c543358cee9f7c3e9e9b15bb6c1063a608e] +Signed-off-by: Fabrice Fontaine +--- + src/wav.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/src/wav.c b/src/wav.c +index 9d71aadb..5c825f2a 100644 +--- a/src/wav.c ++++ b/src/wav.c +@@ -1,5 +1,5 @@ + /* +-** Copyright (C) 1999-2016 Erik de Castro Lopo ++** Copyright (C) 1999-2019 Erik de Castro Lopo + ** Copyright (C) 2004-2005 David Viens + ** + ** This program is free software; you can redistribute it and/or modify +@@ -1146,6 +1146,8 @@ wav_write_header (SF_PRIVATE *psf, int calc_length) + psf_binheader_writef (psf, "44", BHW4 (0), BHW4 (0)) ; /* SMTPE format */ + psf_binheader_writef (psf, "44", BHW4 (psf->instrument->loop_count), BHW4 (0)) ; + ++ /* Loop count is signed 16 bit number so we limit it range to something sensible. */ ++ psf->instrument->loop_count &= 0x7fff ; + for (tmp = 0 ; tmp < psf->instrument->loop_count ; tmp++) + { int type ; + diff --git a/package/libsndfile/0005-wav_write_header-don-t-read-past-the-array-end.patch b/package/libsndfile/0005-wav_write_header-don-t-read-past-the-array-end.patch new file mode 100644 index 00000000..e9585178 --- /dev/null +++ b/package/libsndfile/0005-wav_write_header-don-t-read-past-the-array-end.patch @@ -0,0 +1,33 @@ +From 6d7ce94c020cc720a6b28719d1a7879181790008 Mon Sep 17 00:00:00 2001 +From: Emilio Pozuelo Monfort +Date: Tue, 5 Mar 2019 11:27:17 +0100 +Subject: [PATCH] wav_write_header: don't read past the array end + +If loop_count is bigger than the array, truncate it to the array +length (and not to 32k). + +CVE-2019-3832 +[Retrieved from: +https://github.com/erikd/libsndfile/commit/6d7ce94c020cc720a6b28719d1a7879181790008] +Signed-off-by: Fabrice Fontaine +--- + src/wav.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/src/wav.c b/src/wav.c +index 5c825f2a..104bd0a7 100644 +--- a/src/wav.c ++++ b/src/wav.c +@@ -1146,8 +1146,10 @@ wav_write_header (SF_PRIVATE *psf, int calc_length) + psf_binheader_writef (psf, "44", BHW4 (0), BHW4 (0)) ; /* SMTPE format */ + psf_binheader_writef (psf, "44", BHW4 (psf->instrument->loop_count), BHW4 (0)) ; + +- /* Loop count is signed 16 bit number so we limit it range to something sensible. */ +- psf->instrument->loop_count &= 0x7fff ; ++ /* Make sure we don't read past the loops array end. */ ++ if (psf->instrument->loop_count > ARRAY_LEN (psf->instrument->loops)) ++ psf->instrument->loop_count = ARRAY_LEN (psf->instrument->loops) ; ++ + for (tmp = 0 ; tmp < psf->instrument->loop_count ; tmp++) + { int type ; + diff --git a/package/libsndfile/0006-src-aiff.c-Fix-a-buffer-read-overflow.patch b/package/libsndfile/0006-src-aiff.c-Fix-a-buffer-read-overflow.patch new file mode 100644 index 00000000..68b9e8ed --- /dev/null +++ b/package/libsndfile/0006-src-aiff.c-Fix-a-buffer-read-overflow.patch @@ -0,0 +1,29 @@ +From f833c53cb596e9e1792949f762e0b33661822748 Mon Sep 17 00:00:00 2001 +From: Erik de Castro Lopo +Date: Tue, 23 May 2017 20:15:24 +1000 +Subject: [PATCH] src/aiff.c: Fix a buffer read overflow + +Secunia Advisory SA76717. + +Found by: Laurent Delosieres, Secunia Research at Flexera Software + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/erikd/libsndfile/commit/f833c53cb596e9e1792949f762e0b33661822748] +--- + src/aiff.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/aiff.c b/src/aiff.c +index 5b5f9f53..45864b76 100644 +--- a/src/aiff.c ++++ b/src/aiff.c +@@ -1759,7 +1759,7 @@ aiff_read_chanmap (SF_PRIVATE * psf, unsigned dword) + psf_binheader_readf (psf, "j", dword - bytesread) ; + + if (map_info->channel_map != NULL) +- { size_t chanmap_size = psf->sf.channels * sizeof (psf->channel_map [0]) ; ++ { size_t chanmap_size = SF_MIN (psf->sf.channels, layout_tag & 0xffff) * sizeof (psf->channel_map [0]) ; + + free (psf->channel_map) ; + diff --git a/package/libsndfile/0007-FLAC-Fix-a-buffer-read-overrun.patch b/package/libsndfile/0007-FLAC-Fix-a-buffer-read-overrun.patch new file mode 100644 index 00000000..b000143b --- /dev/null +++ b/package/libsndfile/0007-FLAC-Fix-a-buffer-read-overrun.patch @@ -0,0 +1,68 @@ +From fd0484aba8e51d16af1e3a880f9b8b857b385eb3 Mon Sep 17 00:00:00 2001 +From: Erik de Castro Lopo +Date: Wed, 12 Apr 2017 19:45:30 +1000 +Subject: [PATCH] FLAC: Fix a buffer read overrun + +Buffer read overrun occurs when reading a FLAC file that switches +from 2 channels to one channel mid-stream. Only option is to +abort the read. + +Closes: https://github.com/erikd/libsndfile/issues/230 + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/erikd/libsndfile/commit/fd0484aba8e51d16af1e3a880f9b8b857b385eb3] +--- + src/common.h | 1 + + src/flac.c | 13 +++++++++++++ + src/sndfile.c | 1 + + 3 files changed, 15 insertions(+) + +diff --git a/src/common.h b/src/common.h +index 0bd810c3..e2669b6a 100644 +--- a/src/common.h ++++ b/src/common.h +@@ -725,6 +725,7 @@ enum + SFE_FLAC_INIT_DECODER, + SFE_FLAC_LOST_SYNC, + SFE_FLAC_BAD_SAMPLE_RATE, ++ SFE_FLAC_CHANNEL_COUNT_CHANGED, + SFE_FLAC_UNKOWN_ERROR, + + SFE_WVE_NOT_WVE, +diff --git a/src/flac.c b/src/flac.c +index 84de0e26..986a7b8f 100644 +--- a/src/flac.c ++++ b/src/flac.c +@@ -434,6 +434,19 @@ sf_flac_meta_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC_ + + switch (metadata->type) + { case FLAC__METADATA_TYPE_STREAMINFO : ++ if (psf->sf.channels > 0 && psf->sf.channels != (int) metadata->data.stream_info.channels) ++ { psf_log_printf (psf, "Error: FLAC stream changed from %d to %d channels\n" ++ "Nothing to be but to error out.\n" , ++ psf->sf.channels, metadata->data.stream_info.channels) ; ++ psf->error = SFE_FLAC_CHANNEL_COUNT_CHANGED ; ++ return ; ++ } ; ++ ++ if (psf->sf.channels > 0 && psf->sf.samplerate != (int) metadata->data.stream_info.sample_rate) ++ { psf_log_printf (psf, "Warning: FLAC stream changed sample rates from %d to %d.\n" ++ "Carrying on as if nothing happened.", ++ psf->sf.samplerate, metadata->data.stream_info.sample_rate) ; ++ } ; + psf->sf.channels = metadata->data.stream_info.channels ; + psf->sf.samplerate = metadata->data.stream_info.sample_rate ; + psf->sf.frames = metadata->data.stream_info.total_samples ; +diff --git a/src/sndfile.c b/src/sndfile.c +index 41875610..e2a87be8 100644 +--- a/src/sndfile.c ++++ b/src/sndfile.c +@@ -245,6 +245,7 @@ ErrorStruct SndfileErrors [] = + { SFE_FLAC_INIT_DECODER , "Error : problem with initialization of the flac decoder." }, + { SFE_FLAC_LOST_SYNC , "Error : flac decoder lost sync." }, + { SFE_FLAC_BAD_SAMPLE_RATE, "Error : flac does not support this sample rate." }, ++ { SFE_FLAC_CHANNEL_COUNT_CHANGED, "Error : flac channel changed mid stream." }, + { SFE_FLAC_UNKOWN_ERROR , "Error : unknown error in flac decoder." }, + + { SFE_WVE_NOT_WVE , "Error : not a WVE file." }, diff --git a/package/libsndfile/0008-src-flac.c-Fix-a-buffer-read-overflow.patch b/package/libsndfile/0008-src-flac.c-Fix-a-buffer-read-overflow.patch new file mode 100644 index 00000000..f716e268 --- /dev/null +++ b/package/libsndfile/0008-src-flac.c-Fix-a-buffer-read-overflow.patch @@ -0,0 +1,54 @@ +From ef1dbb2df1c0e741486646de40bd638a9c4cd808 Mon Sep 17 00:00:00 2001 +From: Erik de Castro Lopo +Date: Fri, 14 Apr 2017 15:19:16 +1000 +Subject: [PATCH] src/flac.c: Fix a buffer read overflow + +A file (generated by a fuzzer) which increased the number of channels +from one frame to the next could cause a read beyond the end of the +buffer provided by libFLAC. Only option is to abort the read. + +Closes: https://github.com/erikd/libsndfile/issues/231 + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/erikd/libsndfile/commit/ef1dbb2df1c0e741486646de40bd638a9c4cd808] +--- + src/flac.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/src/flac.c b/src/flac.c +index 5a4f8c21..e4f9aaa0 100644 +--- a/src/flac.c ++++ b/src/flac.c +@@ -169,6 +169,14 @@ flac_buffer_copy (SF_PRIVATE *psf) + const int32_t* const *buffer = pflac->wbuffer ; + unsigned i = 0, j, offset, channels, len ; + ++ if (psf->sf.channels != (int) frame->header.channels) ++ { psf_log_printf (psf, "Error: FLAC frame changed from %d to %d channels\n" ++ "Nothing to do but to error out.\n" , ++ psf->sf.channels, frame->header.channels) ; ++ psf->error = SFE_FLAC_CHANNEL_COUNT_CHANGED ; ++ return 0 ; ++ } ; ++ + /* + ** frame->header.blocksize is variable and we're using a constant blocksize + ** of FLAC__MAX_BLOCK_SIZE. +@@ -202,7 +210,6 @@ flac_buffer_copy (SF_PRIVATE *psf) + return 0 ; + } ; + +- + len = SF_MIN (pflac->len, frame->header.blocksize) ; + + if (pflac->remain % channels != 0) +@@ -436,7 +443,7 @@ sf_flac_meta_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC_ + { case FLAC__METADATA_TYPE_STREAMINFO : + if (psf->sf.channels > 0 && psf->sf.channels != (int) metadata->data.stream_info.channels) + { psf_log_printf (psf, "Error: FLAC stream changed from %d to %d channels\n" +- "Nothing to be but to error out.\n" , ++ "Nothing to do but to error out.\n" , + psf->sf.channels, metadata->data.stream_info.channels) ; + psf->error = SFE_FLAC_CHANNEL_COUNT_CHANGED ; + return ; diff --git a/package/libsndfile/0009-src-flac-c-Fix-another-memory-leak.patch b/package/libsndfile/0009-src-flac-c-Fix-another-memory-leak.patch new file mode 100644 index 00000000..788b9b51 --- /dev/null +++ b/package/libsndfile/0009-src-flac-c-Fix-another-memory-leak.patch @@ -0,0 +1,32 @@ +From cd7da8dbf6ee4310d21d9e44b385d6797160d9e8 Mon Sep 17 00:00:00 2001 +From: Erik de Castro Lopo +Date: Wed, 12 Apr 2017 20:19:34 +1000 +Subject: [PATCH] src/flac.c: Fix another memory leak + +When the FLAC decoder was passed a malformed file, the associated +`FLAC__StreamDecoder` object was not getting released. + +Closes: https://github.com/erikd/libsndfile/issues/233 + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/erikd/libsndfile/commit/cd7da8dbf6ee4310d21d9e44b385d6797160d9e8] +--- + src/flac.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/flac.c b/src/flac.c +index 986a7b8f..5a4f8c21 100644 +--- a/src/flac.c ++++ b/src/flac.c +@@ -841,7 +841,9 @@ flac_read_header (SF_PRIVATE *psf) + + psf_log_printf (psf, "End\n") ; + +- if (psf->error == 0) ++ if (psf->error != 0) ++ FLAC__stream_decoder_delete (pflac->fsd) ; ++ else + { FLAC__uint64 position ; + + FLAC__stream_decoder_get_decode_position (pflac->fsd, &position) ; diff --git a/package/libsndfile/0010-src-common-c-Fix-heap-buffer-overflows-when-writing-strings-in.patch b/package/libsndfile/0010-src-common-c-Fix-heap-buffer-overflows-when-writing-strings-in.patch new file mode 100644 index 00000000..91aa36c9 --- /dev/null +++ b/package/libsndfile/0010-src-common-c-Fix-heap-buffer-overflows-when-writing-strings-in.patch @@ -0,0 +1,92 @@ +From cf7a8182c2642c50f1cf90dddea9ce96a8bad2e8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=B6rn=20Heusipp?= +Date: Wed, 14 Jun 2017 12:25:40 +0200 +Subject: [PATCH] src/common.c: Fix heap buffer overflows when writing strings + in binheader + +Fixes the following problems: + 1. Case 's' only enlarges the buffer by 16 bytes instead of size bytes. + 2. psf_binheader_writef() enlarges the header buffer (if needed) prior to the + big switch statement by an amount (16 bytes) which is enough for all cases + where only a single value gets added. Cases 's', 'S', 'p' however + additionally write an arbitrary length block of data and again enlarge the + buffer to the required amount. However, the required space calculation does + not take into account the size of the length field which gets output before + the data. + 3. Buffer size requirement calculation in case 'S' does not account for the + padding byte ("size += (size & 1) ;" happens after the calculation which + uses "size"). + 4. Case 'S' can overrun the header buffer by 1 byte when no padding is + involved + ("memcpy (&(psf->header.ptr [psf->header.indx]), strptr, size + 1) ;" while + the buffer is only guaranteed to have "size" space available). + 5. "psf->header.ptr [psf->header.indx] = 0 ;" in case 'S' always writes 1 byte + beyond the space which is guaranteed to be allocated in the header buffer. + 6. Case 's' can overrun the provided source string by 1 byte if padding is + involved ("memcpy (&(psf->header.ptr [psf->header.indx]), strptr, size) ;" + where "size" is "strlen (strptr) + 1" (which includes the 0 terminator, + plus optionally another 1 which is padding and not guaranteed to be + readable via the source string pointer). + +Closes: https://github.com/erikd/libsndfile/issues/292 + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/erikd/libsndfile/commit/cf7a8182c2642c50f1cf90dddea9ce96a8bad2e8] +--- + src/common.c | 15 +++++++-------- + 1 file changed, 7 insertions(+), 8 deletions(-) + +diff --git a/src/common.c b/src/common.c +index 1a6204ca..6b2a2ee9 100644 +--- a/src/common.c ++++ b/src/common.c +@@ -681,16 +681,16 @@ psf_binheader_writef (SF_PRIVATE *psf, const char *format, ...) + /* Write a C string (guaranteed to have a zero terminator). */ + strptr = va_arg (argptr, char *) ; + size = strlen (strptr) + 1 ; +- size += (size & 1) ; + +- if (psf->header.indx + (sf_count_t) size >= psf->header.len && psf_bump_header_allocation (psf, 16)) ++ if (psf->header.indx + 4 + (sf_count_t) size + (sf_count_t) (size & 1) > psf->header.len && psf_bump_header_allocation (psf, 4 + size + (size & 1))) + return count ; + + if (psf->rwf_endian == SF_ENDIAN_BIG) +- header_put_be_int (psf, size) ; ++ header_put_be_int (psf, size + (size & 1)) ; + else +- header_put_le_int (psf, size) ; ++ header_put_le_int (psf, size + (size & 1)) ; + memcpy (&(psf->header.ptr [psf->header.indx]), strptr, size) ; ++ size += (size & 1) ; + psf->header.indx += size ; + psf->header.ptr [psf->header.indx - 1] = 0 ; + count += 4 + size ; +@@ -703,16 +703,15 @@ psf_binheader_writef (SF_PRIVATE *psf, const char *format, ...) + */ + strptr = va_arg (argptr, char *) ; + size = strlen (strptr) ; +- if (psf->header.indx + (sf_count_t) size > psf->header.len && psf_bump_header_allocation (psf, size)) ++ if (psf->header.indx + 4 + (sf_count_t) size + (sf_count_t) (size & 1) > psf->header.len && psf_bump_header_allocation (psf, 4 + size + (size & 1))) + return count ; + if (psf->rwf_endian == SF_ENDIAN_BIG) + header_put_be_int (psf, size) ; + else + header_put_le_int (psf, size) ; +- memcpy (&(psf->header.ptr [psf->header.indx]), strptr, size + 1) ; ++ memcpy (&(psf->header.ptr [psf->header.indx]), strptr, size + (size & 1)) ; + size += (size & 1) ; + psf->header.indx += size ; +- psf->header.ptr [psf->header.indx] = 0 ; + count += 4 + size ; + break ; + +@@ -724,7 +723,7 @@ psf_binheader_writef (SF_PRIVATE *psf, const char *format, ...) + size = (size & 1) ? size : size + 1 ; + size = (size > 254) ? 254 : size ; + +- if (psf->header.indx + (sf_count_t) size > psf->header.len && psf_bump_header_allocation (psf, size)) ++ if (psf->header.indx + 1 + (sf_count_t) size > psf->header.len && psf_bump_header_allocation (psf, 1 + size)) + return count ; + + header_put_byte (psf, size) ; diff --git a/package/libsndfile/Config.in b/package/libsndfile/Config.in new file mode 100644 index 00000000..4ccf9376 --- /dev/null +++ b/package/libsndfile/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBSNDFILE + bool "libsndfile" + help + Libsndfile is a C library for reading and writing files + containing sampled sound (such as MS Windows WAV and the + Apple/SGI AIFF format) through one standard library interface. + + http://www.mega-nerd.com/libsndfile/ diff --git a/package/libsndfile/libsndfile.hash b/package/libsndfile/libsndfile.hash new file mode 100644 index 00000000..c744a767 --- /dev/null +++ b/package/libsndfile/libsndfile.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 1ff33929f042fa333aed1e8923aa628c3ee9e1eb85512686c55092d1e5a9dfa9 libsndfile-1.0.28.tar.gz +# Locally calculated +sha256 ad01ea5cd2755f6048383c8d54c88459cd6fcb17757c5c8892f8c5ea060f6140 COPYING diff --git a/package/libsndfile/libsndfile.mk b/package/libsndfile/libsndfile.mk new file mode 100644 index 00000000..eb154261 --- /dev/null +++ b/package/libsndfile/libsndfile.mk @@ -0,0 +1,45 @@ +################################################################################ +# +# libsndfile +# +################################################################################ + +LIBSNDFILE_VERSION = 1.0.28 +LIBSNDFILE_SITE = http://www.mega-nerd.com/libsndfile/files +LIBSNDFILE_INSTALL_STAGING = YES +LIBSNDFILE_LICENSE = LGPL-2.1+ +LIBSNDFILE_LICENSE_FILES = COPYING +LIBSNDFILE_CPE_ID_VENDOR = libsndfile_project + +# 0001-double64_init-Check-psf-sf.channels-against-upper-bo.patch +LIBSNDFILE_IGNORE_CVES += CVE-2017-14634 +# 0002-Check-MAX_CHANNELS-in-sndfile-deinterleave.patch +LIBSNDFILE_IGNORE_CVES += CVE-2018-13139 CVE-2018-19432 +# 0003-a-ulaw-fix-multiple-buffer-overflows-432.patch +LIBSNDFILE_IGNORE_CVES += \ + CVE-2017-14245 CVE-2017-14246 CVE-2017-17456 CVE-2017-17457 \ + CVE-2018-19661 CVE-2018-19662 +# disputed, https://github.com/erikd/libsndfile/issues/398 +LIBSNDFILE_IGNORE_CVES += CVE-2018-13419 +# 0004-src-wav.c-Fix-heap-read-overflow.patch +LIBSNDFILE_IGNORE_CVES += CVE-2018-19758 +# 0005-wav_write_header-don-t-read-past-the-array-end.patch +LIBSNDFILE_IGNORE_CVES += CVE-2019-3832 +# 0006-src-aiff.c-Fix-a-buffer-read-overflow.patch +LIBSNDFILE_IGNORE_CVES += CVE-2017-6892 +# 0007-FLAC-Fix-a-buffer-read-overrun.patch +LIBSNDFILE_IGNORE_CVES += CVE-2017-8361 +# 0008-src-flac.c-Fix-a-buffer-read-overflow.patch +LIBSNDFILE_IGNORE_CVES += CVE-2017-8362 CVE-2017-8365 +# 0009-src-flac-c-Fix-another-memory-leak.patch +LIBSNDFILE_IGNORE_CVES += CVE-2017-8363 +# 0010-src-common-c-Fix-heap-buffer-overflows-when-writing-strings-in.patch +LIBSNDFILE_IGNORE_CVES += CVE-2017-12562 + +LIBSNDFILE_CONF_OPTS = \ + --disable-sqlite \ + --disable-alsa \ + --disable-external-libs \ + --disable-full-suite + +$(eval $(autotools-package)) diff --git a/package/libsoc/Config.in b/package/libsoc/Config.in new file mode 100644 index 00000000..2aaeb1fe --- /dev/null +++ b/package/libsoc/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBSOC + bool "libsoc" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + libsoc is a C library for interfacing with common SoC + peripherals through generic kernel interfaces + + https://github.com/jackmitch/libsoc + +comment "libsoc needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libsoc/libsoc.hash b/package/libsoc/libsoc.hash new file mode 100644 index 00000000..2e7c8295 --- /dev/null +++ b/package/libsoc/libsoc.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 8df626bde365b94a805e1c323104c63a7429ec64c9df815cd1d9b9c4b317e066 libsoc-0.8.2.tar.gz +sha256 782dafc98788c358fb20e530c8fde3186cdb60f5e18fe6d348fe84ee9f65ddb0 LICENCE diff --git a/package/libsoc/libsoc.mk b/package/libsoc/libsoc.mk new file mode 100644 index 00000000..bbc33143 --- /dev/null +++ b/package/libsoc/libsoc.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# libsoc +# +################################################################################ + +LIBSOC_VERSION = 0.8.2 +LIBSOC_SITE = $(call github,jackmitch,libsoc,$(LIBSOC_VERSION)) +LIBSOC_LICENSE = LGPL-2.1 +LIBSOC_LICENSE_FILES = LICENCE +LIBSOC_AUTORECONF = YES +LIBSOC_INSTALL_STAGING = YES +LIBSOC_DEPENDENCIES = host-pkgconf + +# Install Python 2 bindings +ifeq ($(BR2_PACKAGE_PYTHON),y) +LIBSOC_DEPENDENCIES += python +LIBSOC_CONF_OPTS += --enable-python=2 +# Install Python 3 bindings +else ifeq ($(BR2_PACKAGE_PYTHON3),y) +LIBSOC_DEPENDENCIES += python3 +LIBSOC_CONF_OPTS += --enable-python=3 +else +LIBSOC_CONF_OPTS += --disable-python +endif + +$(eval $(autotools-package)) diff --git a/package/libsocketcan/Config.in b/package/libsocketcan/Config.in new file mode 100644 index 00000000..97903db7 --- /dev/null +++ b/package/libsocketcan/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LIBSOCKETCAN + bool "libsocketcan" + help + SocketCAN library to control CAN devices from C code. + + http://git.pengutronix.de/?p=tools/libsocketcan.git;a=summary diff --git a/package/libsocketcan/libsocketcan.hash b/package/libsocketcan/libsocketcan.hash new file mode 100644 index 00000000..c2ad2355 --- /dev/null +++ b/package/libsocketcan/libsocketcan.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 be8280124707701935e6294d366e2474158b758fa4b2e3cae571d5b256d2fe34 libsocketcan-0.0.12.tar.bz2 +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 LICENSE diff --git a/package/libsocketcan/libsocketcan.mk b/package/libsocketcan/libsocketcan.mk new file mode 100644 index 00000000..0261b33c --- /dev/null +++ b/package/libsocketcan/libsocketcan.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libsocketcan +# +################################################################################ + +LIBSOCKETCAN_VERSION = 0.0.12 +LIBSOCKETCAN_SITE = http://www.pengutronix.de/software/libsocketcan/download +LIBSOCKETCAN_SOURCE = libsocketcan-$(LIBSOCKETCAN_VERSION).tar.bz2 +LIBSOCKETCAN_INSTALL_STAGING = YES +LIBSOCKETCAN_LICENSE = LGPL-2.1+ +LIBSOCKETCAN_LICENSE_FILES = LICENSE + +$(eval $(autotools-package)) diff --git a/package/libsodium/Config.in b/package/libsodium/Config.in new file mode 100644 index 00000000..518b0532 --- /dev/null +++ b/package/libsodium/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_LIBSODIUM + bool "libsodium" + help + A modern and easy-to-use crypto library. + + http://libsodium.org/ + +if BR2_PACKAGE_LIBSODIUM + +config BR2_PACKAGE_LIBSODIUM_FULL + bool "all functions" + default y + help + Build all seldom used and obsolete functions. Without + this option, only the minimal set of normally used + functions is built. + +endif diff --git a/package/libsodium/libsodium.hash b/package/libsodium/libsodium.hash new file mode 100644 index 00000000..bc7b02d6 --- /dev/null +++ b/package/libsodium/libsodium.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking Minisign signature +# https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz.minisig +sha256 6f504490b342a4f8a4c4a02fc9b866cbef8622d5df4e5452b46be121e46636c1 libsodium-1.0.18.tar.gz +sha256 dea1855c9809f3faf22aa4a1fba20ec8af5a5587f23115012e5b98279cedc4af LICENSE diff --git a/package/libsodium/libsodium.mk b/package/libsodium/libsodium.mk new file mode 100644 index 00000000..a8e0f791 --- /dev/null +++ b/package/libsodium/libsodium.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# libsodium +# +################################################################################ + +LIBSODIUM_VERSION = 1.0.18 +LIBSODIUM_SITE = https://download.libsodium.org/libsodium/releases +LIBSODIUM_LICENSE = ISC +LIBSODIUM_LICENSE_FILES = LICENSE +LIBSODIUM_INSTALL_STAGING = YES + +ifeq ($(BR2_TOOLCHAIN_SUPPORTS_PIE),) +LIBSODIUM_CONF_OPTS += --disable-pie +endif + +ifeq ($(BR2_PACKAGE_LIBSODIUM_FULL),y) +LIBSODIUM_CONF_OPTS += --disable-minimal +else +LIBSODIUM_CONF_OPTS += --enable-minimal +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libsoil/0001-fix-makefile.patch b/package/libsoil/0001-fix-makefile.patch new file mode 100644 index 00000000..310d2644 --- /dev/null +++ b/package/libsoil/0001-fix-makefile.patch @@ -0,0 +1,40 @@ +Various makefile fixes to allow cross compilation + +Partly ported from +http://anonscm.debian.org/cgit/pkg-games/libsoil.git/tree/debian/patches/linking_correctly.patch + +Signed-off-by: Bernd Kuhls + +diff -uNr soil.org/projects/makefile/alternate_Makefile.txt soil/projects/makefile/alternate_Makefile.txt +--- soil.org/projects/makefile/alternate_Makefile.txt 2008-07-07 18:13:28.000000000 +0200 ++++ soil/projects/makefile/alternate_Makefile.txt 2015-11-07 11:15:04.140106336 +0100 +@@ -1,8 +1,8 @@ + MAKE = make +-CC = gcc +-INSTALL_FILE = install -p -o root -g root -m 644 +-INSTALL_DIR = install -p -o root -g root -d +-LN = ln -s ++CC = $(GCC) ++INSTALL_FILE = $(INSTALL) -m 644 ++INSTALL_DIR = $(INSTALL) -d ++LN = ln -sf + RM = rm -fv + CFLAGS += -c -O2 -Wall + LDFLAGS += +@@ -23,13 +23,13 @@ + all: $(OFILES) lib + + %.o: %.c +- $(CC) $(CFLAGS) $< -o $@ ++ $(CC) $(CFLAGS) -c -fPIC $< -o $@ + + lib: $(OFILES) + # create static library +- ar -cvq $(LIBNAME).a $(OFILES) ++ $(AR) -cvq $(LIBNAME).a $(OFILES) + # create shared library +- gcc -shared -Wl,-soname,$(LIBNAME).so.$(MAJOR) -o $(LIBNAME).so.$(VERSION) $(OFILES) ++ $(CC) -shared -Wl,-soname,$(LIBNAME).so.$(MAJOR) -o $(LIBNAME).so.$(VERSION) $(OFILES) -lGL -lm + + install: + $(INSTALL_DIR) $(DESTDIR)/$(INCLUDEDIR) diff --git a/package/libsoil/Config.in b/package/libsoil/Config.in new file mode 100644 index 00000000..aea0cc35 --- /dev/null +++ b/package/libsoil/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LIBSOIL + bool "libsoil" + depends on BR2_PACKAGE_HAS_LIBGL + depends on !BR2_STATIC_LIBS + help + SOIL is a tiny C library used primarily for uploading + textures into OpenGL. + + http://www.lonesock.net/soil.html + +comment "libsoil needs an OpenGL backend and a toolchain w/ dynamic library" + depends on !BR2_PACKAGE_HAS_LIBGL || BR2_STATIC_LIBS diff --git a/package/libsoil/libsoil.hash b/package/libsoil/libsoil.hash new file mode 100644 index 00000000..2596cd6b --- /dev/null +++ b/package/libsoil/libsoil.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 a2305b8d64f6d636e36d669bbdb0ca5445d1345c754b3d61d3f037dad2e5f701 soil.zip +sha256 a53f0508cafb544aa0b11c241c1000055bd9d827d19712f4de08898e36f29728 src/stb_image_aug.c +sha256 449ba815b6f610660515246d029f5d08b45178fe8f9f9f520939edad85a7935e src/image_helper.c diff --git a/package/libsoil/libsoil.mk b/package/libsoil/libsoil.mk new file mode 100644 index 00000000..2945edd8 --- /dev/null +++ b/package/libsoil/libsoil.mk @@ -0,0 +1,50 @@ +################################################################################ +# +# libsoil +# +################################################################################ + +LIBSOIL_VERSION = 20080707 +LIBSOIL_SOURCE = soil.zip +LIBSOIL_SITE = http://www.lonesock.net/files +LIBSOIL_INSTALL_STAGING = YES +LIBSOIL_DEPENDENCIES = libgl +LIBSOIL_LICENSE = Public Domain, MIT +LIBSOIL_LICENSE_FILES = src/stb_image_aug.c src/image_helper.c +LIBSOIL_MAKEFILE = ../projects/makefile/alternate_Makefile.txt + +define LIBSOIL_EXTRACT_CMDS + $(UNZIP) -d $(@D) $(LIBSOIL_DL_DIR)/$(LIBSOIL_SOURCE) + mv $(@D)/Simple\ OpenGL\ Image\ Library/* $(@D) +endef + +# gnu patch < v2.5.9 doesn't correctly handle spaces in file names, +# and we want to patch the 'alternate Makefile.txt' file, so rename +# the file (and patch the renamed file) for compatibility with older +# distributions +define REMOVE_SPACE_FROM_FILENAME + cd $(@D)/projects/makefile/ && \ + mv "alternate Makefile.txt" alternate_Makefile.txt +endef +LIBSOIL_POST_EXTRACT_HOOKS += REMOVE_SPACE_FROM_FILENAME + +define LIBSOIL_BUILD_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) -f $(LIBSOIL_MAKEFILE) \ + -C $(@D)/src +endef + +define LIBSOIL_INSTALL_STAGING_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) -f $(LIBSOIL_MAKEFILE) \ + DESTDIR=$(STAGING_DIR) install \ + INSTALL=$(INSTALL) \ + -C $(@D)/src +endef + +define LIBSOIL_INSTALL_TARGET_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) -f $(LIBSOIL_MAKEFILE) \ + DESTDIR=$(TARGET_DIR) install \ + INSTALL=$(INSTALL) \ + -C $(@D)/src +endef + +$(eval $(generic-package)) diff --git a/package/libsoundtouch/Config.in b/package/libsoundtouch/Config.in new file mode 100644 index 00000000..fdbc0757 --- /dev/null +++ b/package/libsoundtouch/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LIBSOUNDTOUCH + bool "libsoundtouch" + depends on BR2_INSTALL_LIBSTDCPP + help + SoundTouch is an open-source audio processing library for + changing the Tempo, Pitch and Playback Rates of audio streams + or audio files. + + http://www.surina.net/soundtouch + +comment "libsoundtouch needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/libsoundtouch/libsoundtouch.hash b/package/libsoundtouch/libsoundtouch.hash new file mode 100644 index 00000000..fe6a108e --- /dev/null +++ b/package/libsoundtouch/libsoundtouch.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 f1ce96bac35779d3b752f4cc8696975b3d58f3deb9db47ffc45862767c2a2bdd libsoundtouch-2.2.tar.gz +sha256 6b73f6327136a924821ec044bbd9f17cf8677faf2f2a2b1366a9fff6188c9688 COPYING.TXT diff --git a/package/libsoundtouch/libsoundtouch.mk b/package/libsoundtouch/libsoundtouch.mk new file mode 100644 index 00000000..8a0e807d --- /dev/null +++ b/package/libsoundtouch/libsoundtouch.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libsoundtouch +# +################################################################################ + +LIBSOUNDTOUCH_VERSION = 2.2 +LIBSOUNDTOUCH_SITE = $(call gitlab,soundtouch,soundtouch,$(LIBSOUNDTOUCH_VERSION)) +LIBSOUNDTOUCH_LICENSE = LGPL-2.1+ +LIBSOUNDTOUCH_LICENSE_FILES = COPYING.TXT +LIBSOUNDTOUCH_AUTORECONF = YES +LIBSOUNDTOUCH_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/libsoup/0001-Revert-tld-parser-use-Python-3.patch b/package/libsoup/0001-Revert-tld-parser-use-Python-3.patch new file mode 100644 index 00000000..c27ee986 --- /dev/null +++ b/package/libsoup/0001-Revert-tld-parser-use-Python-3.patch @@ -0,0 +1,27 @@ +From 015926c80fa3e9704f05cbc1ad17f0a877f8de09 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sat, 1 Sep 2018 15:39:04 +0200 +Subject: [PATCH] Revert "tld-parser: use Python 3" + +This reverts commit 4b924e573da307436169d5ef7e04c0ab85b36ef9. The +script runs just fine with Python 2.x, there is no reason to enforce +using Python 3.x. + +Signed-off-by: Thomas Petazzoni +--- + libsoup/tld-parser.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libsoup/tld-parser.py b/libsoup/tld-parser.py +index a743471a..5d9d2ba5 100755 +--- a/libsoup/tld-parser.py ++++ b/libsoup/tld-parser.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python3 ++#!/usr/bin/env python + + # Generate tld rules + # Copyright (C) 2012 Red Hat, Inc. +-- +2.14.4 + diff --git a/package/libsoup/Config.in b/package/libsoup/Config.in new file mode 100644 index 00000000..f6f8fde9 --- /dev/null +++ b/package/libsoup/Config.in @@ -0,0 +1,38 @@ +config BR2_PACKAGE_LIBSOUP + bool "libsoup" + depends on BR2_USE_WCHAR # glib2 and gnutls + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_SQLITE + help + libsoup is an HTTP client/server library. It uses GObject + and the GLib main loop, to integrate well with GNOME + applications. + + https://wiki.gnome.org/Projects/libsoup + +if BR2_PACKAGE_LIBSOUP + +config BR2_PACKAGE_LIBSOUP_GNOME + bool "libsoup-gnome" + help + Build libsoup-gnome library. + +config BR2_PACKAGE_LIBSOUP_SSL + bool "https support" + depends on !BR2_STATIC_LIBS # glib-networking, gnutls + select BR2_PACKAGE_GLIB_NETWORKING + select BR2_PACKAGE_GNUTLS + help + Enable HTTPS (SSL) support. + +comment "libsoup https support needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +endif + +comment "libsoup needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libsoup/libsoup.hash b/package/libsoup/libsoup.hash new file mode 100644 index 00000000..666bbc27 --- /dev/null +++ b/package/libsoup/libsoup.hash @@ -0,0 +1,4 @@ +# From https://ftp.gnome.org/pub/GNOME/sources/libsoup/2.62/libsoup-2.62.3.sha256sum +sha256 d312ade547495c2093ff8bda61f9b9727a98cfdae339f3263277dd39c0451172 libsoup-2.62.3.tar.xz +# Locally calculated +sha256 b7993225104d90ddd8024fd838faf300bea5e83d91203eab98e29512acebd69c COPYING diff --git a/package/libsoup/libsoup.mk b/package/libsoup/libsoup.mk new file mode 100644 index 00000000..44808225 --- /dev/null +++ b/package/libsoup/libsoup.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# libsoup +# +################################################################################ + +LIBSOUP_VERSION_MAJOR = 2.62 +LIBSOUP_VERSION = $(LIBSOUP_VERSION_MAJOR).3 +LIBSOUP_SOURCE = libsoup-$(LIBSOUP_VERSION).tar.xz +LIBSOUP_SITE = http://ftp.gnome.org/pub/gnome/sources/libsoup/$(LIBSOUP_VERSION_MAJOR) +LIBSOUP_LICENSE = LGPL-2.0+ +LIBSOUP_LICENSE_FILES = COPYING +LIBSOUP_CPE_ID_VENDOR = gnome +LIBSOUP_INSTALL_STAGING = YES +LIBSOUP_CONF_ENV = ac_cv_path_GLIB_GENMARSHAL=$(LIBGLIB2_HOST_BINARY) +LIBSOUP_CONF_OPTS = --disable-glibtest --enable-vala=no --with-gssapi=no +LIBSOUP_DEPENDENCIES = host-pkgconf host-libglib2 \ + libglib2 libxml2 sqlite host-intltool + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +LIBSOUP_CONF_OPTS += --with-introspection +LIBSOUP_DEPENDENCIES += gobject-introspection +else +LIBSOUP_CONF_OPTS += --without-introspection +endif + +ifeq ($(BR2_PACKAGE_LIBSOUP_GNOME),y) +LIBSOUP_CONF_OPTS += --with-gnome +else +LIBSOUP_CONF_OPTS += --without-gnome +endif + +ifeq ($(BR2_PACKAGE_LIBSOUP_SSL),y) +LIBSOUP_DEPENDENCIES += glib-networking +else +LIBSOUP_CONF_OPTS += --disable-tls-check +endif + +$(eval $(autotools-package)) diff --git a/package/libsoxr/0001-Add-Libs.private-for-static-linking.patch b/package/libsoxr/0001-Add-Libs.private-for-static-linking.patch new file mode 100644 index 00000000..be96c6e6 --- /dev/null +++ b/package/libsoxr/0001-Add-Libs.private-for-static-linking.patch @@ -0,0 +1,43 @@ +From 7d2d1039f303b6322ecb72eebae39b699fd28d19 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=B6rg=20Krause?= +Date: Fri, 22 Feb 2019 01:31:11 +0100 +Subject: [PATCH] Add Libs.private in soxr.pc.in for static linking +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +If libsoxr is build statically against libavutil other applications +needs to know that they must link with `-lavutil` when building in a +static context. + +Signed-off-by: Jörg Krause +--- + CMakeLists.txt | 1 + + src/soxr.pc.in | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index ee48f6c..714bd4d 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -139,6 +139,7 @@ if (WITH_AVFFT OR (CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" AND SIMD32_FOUND AND WI + if (AVUTIL_FOUND) + include_directories (${AVUTIL_INCLUDE_DIRS}) + set (LIBS ${LIBS} ${AVUTIL_LIBRARIES}) ++ set (PKGCONF_LIBS_PRIV ${PKGCONF_LIBS_PRIV} -lavutil) + endif () + endif () + +diff --git a/src/soxr.pc.in b/src/soxr.pc.in +index 69d225b..6c530a6 100644 +--- a/src/soxr.pc.in ++++ b/src/soxr.pc.in +@@ -2,4 +2,5 @@ Name: ${PROJECT_NAME} + Description: ${DESCRIPTION_SUMMARY} + Version: ${PROJECT_VERSION} + Libs: -L${LIB_INSTALL_DIR} -l${PROJECT_NAME} ++Libs.private: ${PKGCONF_LIBS_PRIV} + Cflags: -I${INCLUDE_INSTALL_DIR} +-- +2.20.1 + diff --git a/package/libsoxr/Config.in b/package/libsoxr/Config.in new file mode 100644 index 00000000..ae1ea102 --- /dev/null +++ b/package/libsoxr/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_LIBSOXR + bool "libsoxr" + help + The SoX Resampler library `libsoxr' performs one-dimensional + sample-rate conversion. It may be used, for example, to + resample PCM-encoded audio. + + It aims to give fast and high quality results for any constant + (rational or irrational) resampling ratio. Phase-response, + preserved bandwidth, aliasing, and rejection level parameters + are all configurable; alternatively, simple `preset' + configurations may be selected. An experimental, variable-rate + resampling mode of operation is also included. + + http://sourceforge.net/projects/soxr/ diff --git a/package/libsoxr/libsoxr.hash b/package/libsoxr/libsoxr.hash new file mode 100644 index 00000000..1ea0c3ac --- /dev/null +++ b/package/libsoxr/libsoxr.hash @@ -0,0 +1,7 @@ +# From http://sourceforge.net/projects/soxr/files/ +sha1 32ea46b1a8c0c15f835422892d02fce8286aec3c soxr-0.1.3-Source.tar.xz +md5 3f16f4dcb35b471682d4321eda6f6c08 soxr-0.1.3-Source.tar.xz +# Locally calculated +sha256 b111c15fdc8c029989330ff559184198c161100a59312f5dc19ddeb9b5a15889 soxr-0.1.3-Source.tar.xz +sha256 dc98676341fdcd29d9f279c9679d6a75288785b174ded8d1b2e316c366166135 LICENCE +sha256 f2f118b9029ec1871b953639ecc46651b2fc7b62e295e6cf3ef2ac4c9a058b33 COPYING.LGPL diff --git a/package/libsoxr/libsoxr.mk b/package/libsoxr/libsoxr.mk new file mode 100644 index 00000000..b34962c4 --- /dev/null +++ b/package/libsoxr/libsoxr.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# libsoxr +# +################################################################################ + +LIBSOXR_VERSION = 0.1.3 +LIBSOXR_SOURCE = soxr-$(LIBSOXR_VERSION)-Source.tar.xz +LIBSOXR_SITE = http://downloads.sourceforge.net/project/soxr +LIBSOXR_LICENSE = LGPL-2.1+ +LIBSOXR_LICENSE_FILES = LICENCE COPYING.LGPL +LIBSOXR_INSTALL_STAGING = YES +LIBSOXR_CONF_OPTS = -DWITH_OPENMP=OFF + +ifeq ($(call qstrip,$(BR2_ENDIAN)),BIG) +LIBSOXR_CONF_OPTS += -DHAVE_WORDS_BIGENDIAN=1 +else +LIBSOXR_CONF_OPTS += -DHAVE_WORDS_BIGENDIAN=0 +endif + +ifeq ($(BR2_PACKAGE_FFMPEG),y) +LIBSOXR_DEPENDENCIES += ffmpeg +endif + +$(eval $(cmake-package)) diff --git a/package/libspatialindex/0001-allow-building-static-libs.patch b/package/libspatialindex/0001-allow-building-static-libs.patch new file mode 100644 index 00000000..09435cc1 --- /dev/null +++ b/package/libspatialindex/0001-allow-building-static-libs.patch @@ -0,0 +1,32 @@ +From caee28d84685071da3ff3a4ea57ff0b6ae64fc87 Mon Sep 17 00:00:00 2001 +From: SpaceIm <30052553+SpaceIm@users.noreply.github.com> +Date: Sat, 28 Mar 2020 19:08:40 +0100 +Subject: [PATCH] allow building static libs (#183) + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/libspatialindex/libspatialindex/commit/caee28d84685071da3ff3a4ea57ff0b6ae64fc87] +--- + CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index c34ee8d..3bfac51 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -43,7 +43,6 @@ SET(SIDX_VERSION_MINOR "9") + SET(SIDX_VERSION_PATCH "3") + SET(SIDX_LIB_VERSION "6.1.1") + SET(SIDX_LIB_SOVERSION "6") +-SET(BUILD_SHARED_LIBS ON) + + + set(SIDX_VERSION_STRING "${SIDX_VERSION_MAJOR}.${SIDX_VERSION_MINOR}.${SIDX_VERSION_PATCH}") +@@ -52,6 +51,7 @@ set(SIDX_VERSION_STRING "${SIDX_VERSION_MAJOR}.${SIDX_VERSION_MINOR}.${SIDX_VERS + # libspatialindex general cmake options + #------------------------------------------------------------------------------ + ++option(BUILD_SHARED_LIBS "Build shared libraries" ON) + option(SIDX_BUILD_TESTS "Enables integrated test suites" OFF) + + diff --git a/package/libspatialindex/0002-CMakeLists.txt-fix-CMAKE_BUILD_TYPE.patch b/package/libspatialindex/0002-CMakeLists.txt-fix-CMAKE_BUILD_TYPE.patch new file mode 100644 index 00000000..fe94020f --- /dev/null +++ b/package/libspatialindex/0002-CMakeLists.txt-fix-CMAKE_BUILD_TYPE.patch @@ -0,0 +1,30 @@ +From 26d417b9f981cf9a6df42d89fd297539b96180cb Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Fri, 24 Apr 2020 18:03:31 +0200 +Subject: [PATCH] CMakeLists.txt: fix CMAKE_BUILD_TYPE (#188) + +The user is unable to override CMAKE_BUILD_TYPE since version 1.9.1 and +https://github.com/libspatialindex/libspatialindex/commit/e3bcccf38d9f100b59ccf29f7e1cfa174969decd + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/libspatialindex/libspatialindex/commit/26d417b9f981cf9a6df42d89fd297539b96180cb] +--- + CMakeLists.txt | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 191ac72..84676a2 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -93,8 +93,10 @@ INCLUDE (CheckIncludeFiles) + + # note we default to RelWithDebInfo mode + if(NOT MSVC_IDE) ++ if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING + "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel" FORCE) ++ endif() + message(STATUS "Setting libspatialindex build type - ${CMAKE_BUILD_TYPE}") + endif() + diff --git a/package/libspatialindex/Config.in b/package/libspatialindex/Config.in new file mode 100644 index 00000000..e9d925dc --- /dev/null +++ b/package/libspatialindex/Config.in @@ -0,0 +1,31 @@ +config BR2_PACKAGE_LIBSPATIALINDEX + bool "libspatialindex" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 # C++11 + help + The purpose of libspatialindex is to provide: + + * An extensible framework that will support robust spatial + indexing methods. + + * Support for sophisticated spatial queries. Range, point + location, nearest neighbor and k-nearest neighbor as well + as parametric queries (defined by spatial constraints) + should be easy to deploy and run. + + * Easy to use interfaces for inserting, deleting and updating + information. + + * Wide variety of customization capabilities. Basic index and + storage characteristics like the page size, node capacity, + minimum fan-out, splitting algorithm, etc. should be easy + to customize. + + * Index persistence. Internal memory and external memory + structures should be supported. Clustered and non-clustered + indices should be easy to be persisted. + + https://libspatialindex.github.io + +comment "libspatialindex needs a toolchain w/ C++, gcc >= 4.7" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 diff --git a/package/libspatialindex/libspatialindex.hash b/package/libspatialindex/libspatialindex.hash new file mode 100644 index 00000000..ca679db9 --- /dev/null +++ b/package/libspatialindex/libspatialindex.hash @@ -0,0 +1,5 @@ +# From https://github.com/libspatialindex/libspatialindex/releases/download/1.9.3/spatialindex-src-1.9.3.tar.bz2.sha512sum +sha512 7922807a2f7026542a014d3d7943da5410429b291cf469267ffea5b8075eab2a94e68b6c013425615d221b930fd319c403f3bf43404c9b1d2c92d0e2baae3066 spatialindex-src-1.9.3.tar.bz2 + +# Hash for license file +sha256 b63ebfaca9d7ce582580f3e11acabc9d2e37c46ce234533f7fa8a6c7278898a0 COPYING diff --git a/package/libspatialindex/libspatialindex.mk b/package/libspatialindex/libspatialindex.mk new file mode 100644 index 00000000..0ff313d8 --- /dev/null +++ b/package/libspatialindex/libspatialindex.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# libspatialindex +# +################################################################################ + +LIBSPATIALINDEX_VERSION = 1.9.3 +LIBSPATIALINDEX_SITE = \ + https://github.com/libspatialindex/libspatialindex/releases/download/$(LIBSPATIALINDEX_VERSION) +LIBSPATIALINDEX_SOURCE = spatialindex-src-$(LIBSPATIALINDEX_VERSION).tar.bz2 +LIBSPATIALINDEX_INSTALL_STAGING = YES +LIBSPATIALINDEX_LICENSE = MIT +LIBSPATIALINDEX_LICENSE_FILES = COPYING + +LIBSPATIALINDEX_CXXFLAGS = $(TARGET_CXXFLAGS) +LIBSPATIALINDEX_CONF_OPTS = \ + -DSIDX_BUILD_TESTS=OFF \ + -DCMAKE_CXX_FLAGS="$(LIBSPATIALINDEX_CXXFLAGS)" + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_68485),y) +LIBSPATIALINDEX_CXXFLAGS += -O0 +endif + +$(eval $(cmake-package)) diff --git a/package/libsquish/0001-Makefile-add-f-option-for-ln-to-remove-existing-dest.patch b/package/libsquish/0001-Makefile-add-f-option-for-ln-to-remove-existing-dest.patch new file mode 100644 index 00000000..ab9e64f0 --- /dev/null +++ b/package/libsquish/0001-Makefile-add-f-option-for-ln-to-remove-existing-dest.patch @@ -0,0 +1,32 @@ +From 1e541293ac19c49f886220b64de6006c5c700144 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sat, 12 Jan 2019 12:50:54 +0100 +Subject: [PATCH] Makefile: add -f option for ln to remove existing destination + files + +While reinstalling the library, all symlinks are present. +Ask ln to remove them with -f. + +Signed-off-by: Romain Naour +--- + Makefile | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Makefile b/Makefile +index fd7d6c8..2683819 100644 +--- a/Makefile ++++ b/Makefile +@@ -25,8 +25,8 @@ install: $(LIB) $(LIBA) libsquish.pc + $(INSTALL_FILE) $(LIBA) $(INSTALL_DIR)/$(LIB_PATH) + ifneq ($(USE_SHARED),0) + $(INSTALL_FILE) $(LIB) $(INSTALL_DIR)/$(LIB_PATH) +- ln -s $(LIB) $(INSTALL_DIR)/$(LIB_PATH)/$(SOLIB) +- ln -s $(LIB) $(INSTALL_DIR)/$(LIB_PATH)/libsquish.so ++ ln -sf $(LIB) $(INSTALL_DIR)/$(LIB_PATH)/$(SOLIB) ++ ln -sf $(LIB) $(INSTALL_DIR)/$(LIB_PATH)/libsquish.so + $(INSTALL_DIRECTORY) $(INSTALL_DIR)/$(LIB_PATH)/pkgconfig + $(INSTALL_FILE) libsquish.pc $(INSTALL_DIR)/$(LIB_PATH)/pkgconfig + endif +-- +2.14.5 + diff --git a/package/libsquish/Config.in b/package/libsquish/Config.in new file mode 100644 index 00000000..e93e97e5 --- /dev/null +++ b/package/libsquish/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LIBSQUISH + bool "libsquish" + depends on BR2_INSTALL_LIBSTDCPP + help + The libSquish library compresses images with the DXT standard + (also known as S3TC). This standard is mainly used by OpenGL + and DirectX for the lossy compression of RGBA textures. + + http://sourceforge.net/projects/libsquish + +comment "libsquish needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/libsquish/libsquish.hash b/package/libsquish/libsquish.hash new file mode 100644 index 00000000..06c96e97 --- /dev/null +++ b/package/libsquish/libsquish.hash @@ -0,0 +1,5 @@ +# From http://sourceforge.net/projects/libsquish/files +sha1 51844b9a8bc815a27e2cc0ffbede5fee3ef75110 libsquish-1.15.tgz +md5 c02645800131e55b519ff8dbe7284f93 libsquish-1.15.tgz +# Locally calculated +sha256 a6b8c383bf3ab28460d6507484d605dd722e03971606f0cd3032a3af682b63a5 LICENSE.txt diff --git a/package/libsquish/libsquish.mk b/package/libsquish/libsquish.mk new file mode 100644 index 00000000..75d2cbd1 --- /dev/null +++ b/package/libsquish/libsquish.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# libsquish +# +################################################################################ + +LIBSQUISH_VERSION = 1.15 +LIBSQUISH_SOURCE = libsquish-$(LIBSQUISH_VERSION).tgz +LIBSQUISH_SITE = http://downloads.sourceforge.net/project/libsquish +LIBSQUISH_INSTALL_STAGING = YES +LIBSQUISH_STRIP_COMPONENTS = 0 +LIBSQUISH_LICENSE = MIT +LIBSQUISH_LICENSE_FILES = LICENSE.txt + +ifeq ($(BR2_STATIC_LIBS),y) +LIBSQUISH_MAKE_ENV = USE_SHARED=0 +else +LIBSQUISH_MAKE_ENV = USE_SHARED=1 +endif + +define LIBSQUISH_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(LIBSQUISH_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define LIBSQUISH_INSTALL_STAGING_CMDS + mkdir -p $(STAGING_DIR)/usr/include + mkdir -p $(STAGING_DIR)/usr/lib + $(TARGET_CONFIGURE_OPTS) $(LIBSQUISH_MAKE_ENV) $(MAKE) -C $(@D) \ + install PREFIX=/usr INSTALL_DIR=$(STAGING_DIR)/usr + $(INSTALL) -D -m 644 $(@D)/libsquish.pc $(STAGING_DIR)/usr/lib/pkgconfig/libsquish.pc +endef + +define LIBSQUISH_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/usr/include + mkdir -p $(TARGET_DIR)/usr/lib + $(TARGET_CONFIGURE_OPTS) $(LIBSQUISH_MAKE_ENV) $(MAKE) -C $(@D) \ + install PREFIX=/usr INSTALL_DIR=$(TARGET_DIR)/usr +endef + +$(eval $(generic-package)) diff --git a/package/libsrtp/Config.in b/package/libsrtp/Config.in new file mode 100644 index 00000000..ce37712f --- /dev/null +++ b/package/libsrtp/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBSRTP + bool "libsrtp" + help + This package provides an implementation of the Secure + Real-time Transport Protocol (SRTP), the Universal Security + Transform (UST), and a supporting cryptographic kernel. + + https://github.com/cisco/libsrtp diff --git a/package/libsrtp/libsrtp.hash b/package/libsrtp/libsrtp.hash new file mode 100644 index 00000000..d4b7b54d --- /dev/null +++ b/package/libsrtp/libsrtp.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 44fd7497bce78767e96b54a11bca520adb2ad32effd515f04bce602b60a1a50b libsrtp-2.2.0.tar.gz +sha256 8e19d42a1eec9561f3f347253ddf2e385c55f392f025bb0fd41b88dbf38db5ae LICENSE diff --git a/package/libsrtp/libsrtp.mk b/package/libsrtp/libsrtp.mk new file mode 100644 index 00000000..5cbd9795 --- /dev/null +++ b/package/libsrtp/libsrtp.mk @@ -0,0 +1,36 @@ +################################################################################ +# +# libsrtp +# +################################################################################ + +LIBSRTP_VERSION = 2.2.0 +LIBSRTP_SITE = $(call github,cisco,libsrtp,v$(LIBSRTP_VERSION)) +LIBSRTP_INSTALL_STAGING = YES +LIBSRTP_LICENSE = BSD-3-Clause +LIBSRTP_LICENSE_FILES = LICENSE +LIBSRTP_CPE_ID_VENDOR = cisco + +ifeq ($(BR2_STATIC_LIBS),y) +LIBSRTP_MAKE_OPTS = libsrtp2.a +else ifeq ($(BR2_SHARED_LIBS),y) +LIBSRTP_MAKE_OPTS = shared_library +else +LIBSRTP_MAKE_OPTS = libsrtp2.a shared_library +endif + +# While libsrtp is not using pkg-config itself, it checks if +# pkg-config is available to determine whether it should install +# libsrtp.pc. Since installing it seems useful, let's depend on +# host-pkgconf to make sure pkg-config is installed. +LIBSRTP_DEPENDENCIES = host-pkgconf + +# openssl handling needs libdl support +ifeq ($(BR2_PACKAGE_OPENSSL)x$(BR2_STATIC_LIBS),yx) +LIBSRTP_DEPENDENCIES += openssl +LIBSRTP_CONF_OPTS += --enable-openssl +else +LIBSRTP_CONF_OPTS += --disable-openssl +endif + +$(eval $(autotools-package)) diff --git a/package/libss7/Config.in b/package/libss7/Config.in new file mode 100644 index 00000000..bdf5fbe3 --- /dev/null +++ b/package/libss7/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_LIBSS7 + bool "libss7" + depends on BR2_USE_MMU # dahdi-tools <- perl + depends on BR2_LINUX_KERNEL + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_DAHDI_LINUX + select BR2_PACKAGE_DAHDI_TOOLS + help + libss7 is an open source library that encapsulates the + protocols used to communicate using Signaling System 7 + over ISDN (T1, E1). + + http://www.asterisk.org/downloads/libss7 + +comment "libss7 needs a kernel to be built" + depends on !BR2_LINUX_KERNEL + +comment "libss7 needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libss7/libss7.hash b/package/libss7/libss7.hash new file mode 100644 index 00000000..8e1d6635 --- /dev/null +++ b/package/libss7/libss7.hash @@ -0,0 +1,6 @@ +# Hashes from http://downloads.asterisk.org/pub/telephony/libss7/releases/ +sha1 7112a0717293fc273d5d488e1387ad28abe4e9b3 libss7-2.0.0.tar.gz +sha256 5af00853cfb2bc6bcf050947804db132ae6872db0cd2ab24b5378828f78eda52 libss7-2.0.0.tar.gz + +# License file, locally calculated +sha256 fa5fc1d1eec39532ea517518eeefd7b6e3c14341a55e5880a0e2a49eee47a5b7 LICENSE diff --git a/package/libss7/libss7.mk b/package/libss7/libss7.mk new file mode 100644 index 00000000..151b6a61 --- /dev/null +++ b/package/libss7/libss7.mk @@ -0,0 +1,56 @@ +################################################################################ +# +# libss7 +# +################################################################################ + +LIBSS7_VERSION = 2.0.0 +LIBSS7_SITE = http://downloads.asterisk.org/pub/telephony/libss7/releases + +LIBSS7_LICENSE = GPL-2.0 +LIBSS7_LICENSE_FILES = LICENSE + +LIBSS7_DEPENDENCIES = dahdi-linux dahdi-tools +LIBSS7_INSTALL_STAGING = YES + +# The Makefile default rule will always try to generate both libraries. +# So we need to explicitly build only what we can. +ifneq ($(BR2_SHARED_LIBS),y) +LIBSS7_LIBS = libss7.a +define LIBSS7_INSTALL_A + $(INSTALL) -D -m 0644 $(@D)/libss7.a $(1)/usr/lib/libss7.a +endef +endif + +ifneq ($(BR2_STATIC_LIBS),y) +LIBSS7_LIBS += libss7.so.2.0 +define LIBSS7_INSTALL_SO + $(INSTALL) -D -m 0644 $(@D)/libss7.so.2.0 $(1)/usr/lib/libss7.so.2.0 + ln -sf libss7.so.2.0 $(1)/usr/lib/libss7.so +endef +endif + +# The Makefile erroneously looks for host headers to decide what utilities +# to build, and thus misses the test utilities. So we explicitly build them +# as they can be useful to validate that the hardware does work. +LIBSS7_UTILS = parser_debug ss7test ss7linktest + +define LIBSS7_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(TARGET_CFLAGS) -fPIC" -C $(@D) \ + $(LIBSS7_LIBS) $(LIBSS7_UTILS) +endef + +define LIBSS7_INSTALL_STAGING_CMDS + $(call LIBSS7_INSTALL_A,$(STAGING_DIR)) + $(call LIBSS7_INSTALL_SO,$(STAGING_DIR)) + $(INSTALL) -D -m 0644 $(@D)/libss7.h $(STAGING_DIR)/usr/include/libss7.h +endef + +define LIBSS7_INSTALL_TARGET_CMDS + $(foreach u,$(LIBSS7_UTILS),\ + $(INSTALL) -D -m 0755 $(@D)/$(u) $(TARGET_DIR)/usr/sbin/$(u)$(sep)) + $(call LIBSS7_INSTALL_SO,$(TARGET_DIR)) +endef + +$(eval $(generic-package)) diff --git a/package/libssh/Config.in b/package/libssh/Config.in new file mode 100644 index 00000000..cde73a0d --- /dev/null +++ b/package/libssh/Config.in @@ -0,0 +1,45 @@ +config BR2_PACKAGE_LIBSSH + bool "libssh" + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_OPENSSL if !(BR2_PACKAGE_MBEDTLS || BR2_PACKAGE_LIBGCRYPT) + help + libssh is a multiplatform C library implementing the SSHv2 + and SSHv1 protocol on client and server side. With libssh, + you can remotely execute programs, transfer files, use a + secure and transparent tunnel for your remote applications. + + http://www.libssh.org/ + +if BR2_PACKAGE_LIBSSH + +config BR2_PACKAGE_LIBSSH_SERVER + bool "server" + help + Enable libssh server support + +choice + prompt "Crypto Backend" + help + Select crypto library to be used in libssh. + +config BR2_PACKAGE_LIBSSH_MBEDTLS + bool "mbedtls" + depends on BR2_PACKAGE_MBEDTLS + +config BR2_PACKAGE_LIBSSH_LIBGCRYPT + bool "gcrypt" + depends on BR2_PACKAGE_LIBGCRYPT + +config BR2_PACKAGE_LIBSSH_OPENSSL + bool "openssl" + depends on BR2_PACKAGE_OPENSSL + +endchoice + +endif + +comment "libssh needs a toolchain w/ dynamic library, threads" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libssh/libssh.hash b/package/libssh/libssh.hash new file mode 100644 index 00000000..bc6fa3f1 --- /dev/null +++ b/package/libssh/libssh.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +# https://www.libssh.org/files/0.9/libssh-0.9.5.tar.xz.asc +# with key 8DFF53E18F2ABC8D8F3C92237EE0FC4DCC014E3D +sha256 acffef2da98e761fc1fd9c4fddde0f3af60ab44c4f5af05cd1b2d60a3fa08718 libssh-0.9.5.tar.xz +sha256 1656186e951db1c010a8485481fa94587f7e53a26d24976bef97945ad0c4df5a COPYING diff --git a/package/libssh/libssh.mk b/package/libssh/libssh.mk new file mode 100644 index 00000000..eeb5d848 --- /dev/null +++ b/package/libssh/libssh.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# libssh +# +################################################################################ + +LIBSSH_VERSION_MAJOR = 0.9 +LIBSSH_VERSION = $(LIBSSH_VERSION_MAJOR).5 +LIBSSH_SOURCE = libssh-$(LIBSSH_VERSION).tar.xz +LIBSSH_SITE = https://www.libssh.org/files/$(LIBSSH_VERSION_MAJOR) +LIBSSH_LICENSE = LGPL-2.1 +LIBSSH_LICENSE_FILES = COPYING +LIBSSH_CPE_ID_VENDOR = libssh +LIBSSH_INSTALL_STAGING = YES +LIBSSH_SUPPORTS_IN_SOURCE_BUILD = NO +LIBSSH_CONF_OPTS = \ + -DWITH_STACK_PROTECTOR=OFF \ + -DWITH_EXAMPLES=OFF + +ifeq ($(BR2_PACKAGE_LIBSSH_SERVER),y) +LIBSSH_CONF_OPTS += -DWITH_SERVER=ON +else +LIBSSH_CONF_OPTS += -DWITH_SERVER=OFF +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +LIBSSH_CONF_OPTS += -DWITH_ZLIB=ON +LIBSSH_DEPENDENCIES += zlib +else +LIBSSH_CONF_OPTS += -DWITH_ZLIB=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBSSH_MBEDTLS),y) +LIBSSH_CONF_OPTS += -DWITH_MBEDTLS=ON +LIBSSH_DEPENDENCIES += mbedtls +else ifeq ($(BR2_PACKAGE_LIBSSH_LIBGCRYPT),y) +LIBSSH_CONF_OPTS += -DWITH_GCRYPT=ON +LIBSSH_DEPENDENCIES += libgcrypt +else ifeq ($(BR2_PACKAGE_LIBSSH_OPENSSL),y) +LIBSSH_DEPENDENCIES += openssl +endif + +$(eval $(cmake-package)) diff --git a/package/libssh2/0001-drop-custom-buildconf-script.patch b/package/libssh2/0001-drop-custom-buildconf-script.patch new file mode 100644 index 00000000..bf187b26 --- /dev/null +++ b/package/libssh2/0001-drop-custom-buildconf-script.patch @@ -0,0 +1,97 @@ +From 39a2a444a32896bd2dab37c9b247ccfd11ff4693 Mon Sep 17 00:00:00 2001 +From: "Yann E. MORIN" +Date: Mon, 30 Oct 2017 19:29:12 +0100 +Subject: [PATCH] buildsystem: drop custom buildconf script, rely on autoreconf + +The buildconf script is currently required, because we need to copy a +header around, because it is used both from the library and the examples +sources. + +However, having a custom 'buildconf'-like script is not needed if we can +ensure that the header / exists by the time it is needed. For That, we +can just append the src/ directory to the headers search path for the +examples. + +And then it means we no longer need to generate the same header twice, +so we remove the second one from configure.ac. + +Now, we can just call "autoreconf -fi" to generate the autotools files, +instead of relying on the canned sequence in "buildconf", since +autoreconf has now long known what to do at the correct moment (future +versions of autotools, automake, autopoint, autoheader etc... may +require an other ordering, or other intermediate steps, etc...). + +Eventually, get rid of buildconf now it is no longer needed. In fact, we +really keep it for legacy, but have it just call autoreconf (and print a +nice user-friendly warning). + +Update gitignore accordingly, too. + +Signed-off-by: "Yann E. MORIN" +Cc: Sam Voss +[Fabrice: Remove .gitignore so patch applies on 1.9.0] +Signed-off-by: Fabrice Fontaine +--- + .gitignore | 2 ++ + buildconf | 24 +++++------------------- + configure.ac | 2 +- + example/.gitignore | 2 -- + example/Makefile.am | 2 +- + 5 files changed, 9 insertions(+), 23 deletions(-) + +diff --git a/buildconf b/buildconf +index 558dcb66..728b3397 100755 +--- a/buildconf ++++ b/buildconf +@@ -1,22 +1,8 @@ + #!/bin/sh + +-LIBTOOLIZE="libtoolize" ++echo "***" >&2 ++echo "*** Do not use buildconf. Instead, just use: autoreconf -fi" >&2 ++echo "*** Doing it for you now, but buildconf may disapear in the future." >&2 ++echo "***" >&2 + +-if [ "x`which $LIBTOOLIZE`" = "x" ]; then +- LIBTOOLIZE="glibtoolize" +-fi +- +-if [ "x`which $LIBTOOLIZE`" = "x" ]; then +- echo "Neither libtoolize nor glibtoolize could be found!" +- exit 1 +-fi +- +-${LIBTOOLIZE} --copy --automake --force +-${ACLOCAL:-aclocal} -I m4 $ACLOCAL_FLAGS +-${AUTOHEADER:-autoheader} +-# copy the private libssh2_config.h.in to the examples dir so that +-# it can be included without pointing the include path to the private +-# source dir +-cp src/libssh2_config.h.in example/libssh2_config.h.in +-${AUTOCONF:-autoconf} +-${AUTOMAKE:-automake} --add-missing --copy ++${AUTORECONF:-autoreconf} -fi "${@}" +diff --git a/configure.ac b/configure.ac +index c6ff7535..6939d0d6 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2,7 +2,7 @@ + AC_INIT(libssh2, [-], libssh2-devel@cool.haxx.se) + AC_CONFIG_MACRO_DIR([m4]) + AC_CONFIG_SRCDIR([src]) +-AC_CONFIG_HEADERS([src/libssh2_config.h example/libssh2_config.h]) ++AC_CONFIG_HEADERS([src/libssh2_config.h]) + AM_MAINTAINER_MODE + m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) + +diff --git a/example/Makefile.am b/example/Makefile.am +index 5cf5f071..41f65b12 100644 +--- a/example/Makefile.am ++++ b/example/Makefile.am +@@ -13,5 +13,5 @@ if HAVE_SYS_UN_H + noinst_PROGRAMS += x11 + endif + +-AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/example ++AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/example -I../src + LDADD = $(top_builddir)/src/libssh2.la diff --git a/package/libssh2/0002-acinclude.m4-add-mbedtls-to-LIBS.patch b/package/libssh2/0002-acinclude.m4-add-mbedtls-to-LIBS.patch new file mode 100644 index 00000000..a70b1fe8 --- /dev/null +++ b/package/libssh2/0002-acinclude.m4-add-mbedtls-to-LIBS.patch @@ -0,0 +1,35 @@ +From f4846473f0f0ec313f8ed7ff4cd9f59c1741465d Mon Sep 17 00:00:00 2001 +From: Baruch Siach +Date: Tue, 20 Mar 2018 20:21:53 +0200 +Subject: [PATCH] acinclude.m4: add mbedtls to LIBS + +This is useful for static builds so that the Libs.private field in +libssh2.pc contains correct info for the benefit of pkg-config users. +Static link with libssh2 requires this information. + +Signed-off-by: Baruch Siach +[Fabrice: Replace $LIBMBEDCRYTO by -lmdedcrypto to avoid adding a full +library path to libssh2.pc as it raises build failures on some packages +such as xerces] +Signed-off-by: Fabrice Fontaine +--- +Upstream status: https://github.com/libssh2/libssh2/pull/242 + + acinclude.m4 | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/acinclude.m4 b/acinclude.m4 +index c0e89a1a0c98..02c70845d27c 100644 +--- a/acinclude.m4 ++++ b/acinclude.m4 +@@ -441,6 +441,7 @@ m4_case([$1], + [mbedtls], [ + LIBSSH2_LIB_HAVE_LINKFLAGS([mbedcrypto], [], [#include ], [ + AC_DEFINE(LIBSSH2_MBEDTLS, 1, [Use $1]) ++ LIBS="$LIBS -lmbedcrypto" + found_crypto="$1" + support_clear_memory=yes + ]) +-- +2.16.2 + diff --git a/package/libssh2/0003-packet-c-improve-message-parsing.patch b/package/libssh2/0003-packet-c-improve-message-parsing.patch new file mode 100644 index 00000000..2b735200 --- /dev/null +++ b/package/libssh2/0003-packet-c-improve-message-parsing.patch @@ -0,0 +1,127 @@ +From dedcbd106f8e52d5586b0205bc7677e4c9868f9c Mon Sep 17 00:00:00 2001 +From: Will Cosgrove +Date: Fri, 30 Aug 2019 09:57:38 -0700 +Subject: [PATCH] packet.c: improve message parsing (#402) + +* packet.c: improve parsing of packets + +file: packet.c + +notes: +Use _libssh2_get_string API in SSH_MSG_DEBUG/SSH_MSG_DISCONNECT. Additional uint32 bounds check in SSH_MSG_GLOBAL_REQUEST. +[Retrieved from: +https://github.com/libssh2/libssh2/commit/dedcbd106f8e52d5586b0205bc7677e4c9868f9c] +Signed-off-by: Fabrice Fontaine +--- + src/packet.c | 68 ++++++++++++++++++++++------------------------------ + 1 file changed, 29 insertions(+), 39 deletions(-) + +diff --git a/src/packet.c b/src/packet.c +index 38ab6294..2e01bfc5 100644 +--- a/src/packet.c ++++ b/src/packet.c +@@ -419,8 +419,8 @@ _libssh2_packet_add(LIBSSH2_SESSION * session, unsigned char *data, + size_t datalen, int macstate) + { + int rc = 0; +- char *message = NULL; +- char *language = NULL; ++ unsigned char *message = NULL; ++ unsigned char *language = NULL; + size_t message_len = 0; + size_t language_len = 0; + LIBSSH2_CHANNEL *channelp = NULL; +@@ -472,33 +472,23 @@ _libssh2_packet_add(LIBSSH2_SESSION * session, unsigned char *data, + + case SSH_MSG_DISCONNECT: + if(datalen >= 5) { +- size_t reason = _libssh2_ntohu32(data + 1); ++ uint32_t reason = 0; ++ struct string_buf buf; ++ buf.data = (unsigned char *)data; ++ buf.dataptr = buf.data; ++ buf.len = datalen; ++ buf.dataptr++; /* advance past type */ + +- if(datalen >= 9) { +- message_len = _libssh2_ntohu32(data + 5); ++ _libssh2_get_u32(&buf, &reason); ++ _libssh2_get_string(&buf, &message, &message_len); ++ _libssh2_get_string(&buf, &language, &language_len); + +- if(message_len < datalen-13) { +- /* 9 = packet_type(1) + reason(4) + message_len(4) */ +- message = (char *) data + 9; +- +- language_len = +- _libssh2_ntohu32(data + 9 + message_len); +- language = (char *) data + 9 + message_len + 4; +- +- if(language_len > (datalen-13-message_len)) { +- /* bad input, clear info */ +- language = message = NULL; +- language_len = message_len = 0; +- } +- } +- else +- /* bad size, clear it */ +- message_len = 0; +- } + if(session->ssh_msg_disconnect) { +- LIBSSH2_DISCONNECT(session, reason, message, +- message_len, language, language_len); ++ LIBSSH2_DISCONNECT(session, reason, (const char *)message, ++ message_len, (const char *)language, ++ language_len); + } ++ + _libssh2_debug(session, LIBSSH2_TRACE_TRANS, + "Disconnect(%d): %s(%s)", reason, + message, language); +@@ -539,24 +529,24 @@ _libssh2_packet_add(LIBSSH2_SESSION * session, unsigned char *data, + int always_display = data[1]; + + if(datalen >= 6) { +- message_len = _libssh2_ntohu32(data + 2); +- +- if(message_len <= (datalen - 10)) { +- /* 6 = packet_type(1) + display(1) + message_len(4) */ +- message = (char *) data + 6; +- language_len = _libssh2_ntohu32(data + 6 + +- message_len); +- +- if(language_len <= (datalen - 10 - message_len)) +- language = (char *) data + 10 + message_len; +- } ++ struct string_buf buf; ++ buf.data = (unsigned char *)data; ++ buf.dataptr = buf.data; ++ buf.len = datalen; ++ buf.dataptr += 2; /* advance past type & always display */ ++ ++ _libssh2_get_string(&buf, &message, &message_len); ++ _libssh2_get_string(&buf, &language, &language_len); + } + + if(session->ssh_msg_debug) { +- LIBSSH2_DEBUG(session, always_display, message, +- message_len, language, language_len); ++ LIBSSH2_DEBUG(session, always_display, ++ (const char *)message, ++ message_len, (const char *)language, ++ language_len); + } + } ++ + /* + * _libssh2_debug will actually truncate this for us so + * that it's not an inordinate about of data +@@ -579,7 +569,7 @@ _libssh2_packet_add(LIBSSH2_SESSION * session, unsigned char *data, + uint32_t len = 0; + unsigned char want_reply = 0; + len = _libssh2_ntohu32(data + 1); +- if(datalen >= (6 + len)) { ++ if((len <= (UINT_MAX - 6)) && (datalen >= (6 + len))) { + want_reply = data[5 + len]; + _libssh2_debug(session, + LIBSSH2_TRACE_CONN, diff --git a/package/libssh2/Config.in b/package/libssh2/Config.in new file mode 100644 index 00000000..90c38813 --- /dev/null +++ b/package/libssh2/Config.in @@ -0,0 +1,32 @@ +config BR2_PACKAGE_LIBSSH2 + bool "libssh2" + select BR2_PACKAGE_OPENSSL if !(BR2_PACKAGE_MBEDTLS || BR2_PACKAGE_LIBGCRYPT) + help + libssh2 is a client-side C library implementing the SSH2 + protocol as defined by Internet Drafts: SECSH-TRANS(22), + SECSH-USERAUTH(25), SECSH-CONNECTION(23), SECSH-ARCH(20), + SECSH-FILEXFER(06)*, SECSH-DHGEX(04), and SECSH-NUMBERS(10) + + http://www.libssh2.org/ + +if BR2_PACKAGE_LIBSSH2 + +choice + prompt "Crypto Backend" + help + Select crypto library to be used in libssh2. + +config BR2_PACKAGE_LIBSSH2_MBEDTLS + bool "mbedtls" + depends on BR2_PACKAGE_MBEDTLS + +config BR2_PACKAGE_LIBSSH2_LIBGCRYPT + bool "gcrypt" + depends on BR2_PACKAGE_LIBGCRYPT + +config BR2_PACKAGE_LIBSSH2_OPENSSL + bool "openssl" + depends on BR2_PACKAGE_OPENSSL + +endchoice +endif diff --git a/package/libssh2/libssh2.hash b/package/libssh2/libssh2.hash new file mode 100644 index 00000000..8e048ff5 --- /dev/null +++ b/package/libssh2/libssh2.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 d5fb8bd563305fd1074dda90bd053fb2d29fc4bce048d182f96eaa466dfadafd libssh2-1.9.0.tar.gz +sha256 e15ed284a15e80115467d6d7f030f0d89d8fabbecd78fb6e0f861f0cfc128fd9 COPYING diff --git a/package/libssh2/libssh2.mk b/package/libssh2/libssh2.mk new file mode 100644 index 00000000..6147583a --- /dev/null +++ b/package/libssh2/libssh2.mk @@ -0,0 +1,56 @@ +################################################################################ +# +# libssh2 +# +################################################################################ + +LIBSSH2_VERSION = 1.9.0 +LIBSSH2_SITE = https://www.libssh2.org/download +LIBSSH2_LICENSE = BSD +LIBSSH2_LICENSE_FILES = COPYING +LIBSSH2_CPE_ID_VENDOR = libssh2 +LIBSSH2_INSTALL_STAGING = YES +LIBSSH2_CONF_OPTS = --disable-examples-build + +# 0003-packet-c-improve-message-parsing.patch +LIBSSH2_IGNORE_CVES += CVE-2019-17498 + +# patch touching configure.ac and acinclude.m4 +LIBSSH2_AUTORECONF = YES + +ifeq ($(BR2_PACKAGE_LIBSSH2_MBEDTLS),y) +LIBSSH2_DEPENDENCIES += mbedtls +LIBSSH2_CONF_OPTS += --with-libmbedcrypto-prefix=$(STAGING_DIR)/usr \ + --with-crypto=mbedtls +else ifeq ($(BR2_PACKAGE_LIBSSH2_LIBGCRYPT),y) +LIBSSH2_DEPENDENCIES += libgcrypt +LIBSSH2_CONF_OPTS += --with-libgcrypt-prefix=$(STAGING_DIR)/usr \ + --with-crypto=libgcrypt +# configure.ac forgets to link to dependent libraries of gcrypt breaking static +# linking +LIBSSH2_CONF_ENV += LIBS="`$(STAGING_DIR)/usr/bin/libgcrypt-config --libs`" +else ifeq ($(BR2_PACKAGE_LIBSSH2_OPENSSL),y) +LIBSSH2_DEPENDENCIES += host-pkgconf openssl +LIBSSH2_CONF_OPTS += --with-libssl-prefix=$(STAGING_DIR)/usr \ + --with-crypto=openssl +# configure.ac forgets to link to dependent libraries of openssl breaking static +# linking +LIBSSH2_CONF_ENV += LIBS=`$(PKG_CONFIG_HOST_BINARY) --libs openssl` +endif + +# Add zlib support if enabled +ifeq ($(BR2_PACKAGE_ZLIB),y) +LIBSSH2_DEPENDENCIES += zlib +LIBSSH2_CONF_OPTS += --with-libz \ + --with-libz-prefix=$(STAGING_DIR)/usr +else +LIBSSH2_CONF_OPTS += --without-libz +endif + +HOST_LIBSSH2_DEPENDENCIES += host-openssl +HOST_LIBSSH2_CONF_OPTS += --with-openssl \ + --with-libssl-prefix=$(HOST_DIR) \ + --without-libgcrypt + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libstrophe/0001-make-autoreconfable.patch b/package/libstrophe/0001-make-autoreconfable.patch new file mode 100644 index 00000000..76ca6f25 --- /dev/null +++ b/package/libstrophe/0001-make-autoreconfable.patch @@ -0,0 +1,20 @@ +Make the package autoreconfigurable + +Signed-off-by: Denis Bodor +[Gustavo: update for 0.8.8] + +diff -Nura libstrophe-0.8.8.orig/m4/.empty libstrophe-0.8.8/m4/.empty +--- libstrophe-0.8.8.orig/m4/.empty 1969-12-31 21:00:00.000000000 -0300 ++++ libstrophe-0.8.8/m4/.empty 2015-09-23 19:29:37.893688227 -0300 +@@ -0,0 +1,2 @@ ++ ++ +diff -Nura libstrophe-0.8.8.orig/Makefile.am libstrophe-0.8.8/Makefile.am +--- libstrophe-0.8.8.orig/Makefile.am 2015-09-23 19:26:10.960492781 -0300 ++++ libstrophe-0.8.8/Makefile.am 2015-09-23 19:29:17.265970964 -0300 +@@ -1,4 +1,4 @@ +-AUTOMAKE_OPTIONS = subdir-objects ++AUTOMAKE_OPTIONS = subdir-objects foreign + + ACLOCAL_AMFLAGS = -I m4 + AM_CFLAGS = -g -Wall diff --git a/package/libstrophe/Config.in b/package/libstrophe/Config.in new file mode 100644 index 00000000..5fdb918d --- /dev/null +++ b/package/libstrophe/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_LIBSTROPHE + bool "libstrophe" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_LIBXML2 if !BR2_PACKAGE_EXPAT + help + libstrophe is a lightweight XMPP client library written in C. + It has minimal dependencies and is configurable for various + environments. It runs well on both Linux, Unix, and Windows + based platforms. + + https://github.com/strophe/libstrophe + +comment "libstrophe needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libstrophe/libstrophe.hash b/package/libstrophe/libstrophe.hash new file mode 100644 index 00000000..d5f15166 --- /dev/null +++ b/package/libstrophe/libstrophe.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 5bf0bbc555cb6059008f1b748370d4d2ee1e1fabd3eeab68475263556405ba39 libstrophe-0.10.1.tar.gz +sha256 82476f36ffd5e895a176013c0812166ba7b7d99f3d536fc7f5ed2e33e9f74a08 MIT-LICENSE.txt +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 GPL-LICENSE.txt diff --git a/package/libstrophe/libstrophe.mk b/package/libstrophe/libstrophe.mk new file mode 100644 index 00000000..e078eb25 --- /dev/null +++ b/package/libstrophe/libstrophe.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# libstrophe +# +################################################################################ + +LIBSTROPHE_VERSION = 0.10.1 +LIBSTROPHE_SITE = $(call github,strophe,libstrophe,$(LIBSTROPHE_VERSION)) +LIBSTROPHE_DEPENDENCIES = openssl host-pkgconf +# Doesn't ship configure +LIBSTROPHE_AUTORECONF = YES +LIBSTROPHE_LICENSE = MIT or GPL-3.0 +LIBSTROPHE_LICENSE_FILES = MIT-LICENSE.txt GPL-LICENSE.txt +LIBSTROPHE_INSTALL_STAGING = YES + +ifeq ($(BR2_PACKAGE_EXPAT),y) +LIBSTROPHE_CONF_OPTS += --without-libxml2 +LIBSTROPHE_DEPENDENCIES += expat +else +LIBSTROPHE_CONF_OPTS += --with-libxml2 +LIBSTROPHE_DEPENDENCIES += libxml2 +endif + +$(eval $(autotools-package)) diff --git a/package/libsvg-cairo/Config.in b/package/libsvg-cairo/Config.in new file mode 100644 index 00000000..9577c69b --- /dev/null +++ b/package/libsvg-cairo/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBSVG_CAIRO + bool "libsvg-cairo" + select BR2_PACKAGE_CAIRO + select BR2_PACKAGE_CAIRO_SVG + select BR2_PACKAGE_LIBSVG + help + Libsvg-cairo provides the ability to render SVG content from + files or buffers. All rendering is performed using the cairo + rendering library. + + http://cairographics.org diff --git a/package/libsvg-cairo/libsvg-cairo.hash b/package/libsvg-cairo/libsvg-cairo.hash new file mode 100644 index 00000000..7240ee57 --- /dev/null +++ b/package/libsvg-cairo/libsvg-cairo.hash @@ -0,0 +1,6 @@ +# From http://cairographics.org/snapshots/libsvg-cairo-0.1.6.tar.gz.md5 +md5 d79da7b3a60ad8c8e4b902c9b3563047 libsvg-cairo-0.1.6.tar.gz + +# Locally calculated +sha256 a380be6a78ec2938100ce904363815a94068fca372c666b8cc82aa8711a0215c libsvg-cairo-0.1.6.tar.gz +sha256 d80c9d084ebfb50ea1ed91bfbc2410d6ce542097a32c43b00781b83adcb8c77f COPYING diff --git a/package/libsvg-cairo/libsvg-cairo.mk b/package/libsvg-cairo/libsvg-cairo.mk new file mode 100644 index 00000000..f7a105e0 --- /dev/null +++ b/package/libsvg-cairo/libsvg-cairo.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libsvg-cairo +# +################################################################################ + +LIBSVG_CAIRO_VERSION = 0.1.6 +LIBSVG_CAIRO_SITE = http://cairographics.org/snapshots +LIBSVG_CAIRO_DEPENDENCIES = cairo libsvg +LIBSVG_CAIRO_INSTALL_STAGING = YES +LIBSVG_CAIRO_LICENSE = LGPL-2.1+ +LIBSVG_CAIRO_LICENSE_FILES = COPYING + +LIBSVG_CAIRO_CONF_OPTS = --without-x + +$(eval $(autotools-package)) diff --git a/package/libsvg/0001-fix-expat-static-declaration.patch b/package/libsvg/0001-fix-expat-static-declaration.patch new file mode 100644 index 00000000..58ef2867 --- /dev/null +++ b/package/libsvg/0001-fix-expat-static-declaration.patch @@ -0,0 +1,33 @@ +Newer expat versions use different declarations of the following functions: + +static void _svg_parser_sax_start_element (); +static void _svg_parser_sax_end_element (); +static void _svg_parser_sax_characters (); + +We need to patch the libsvg source to not follow into a build error like + "static declaration of 'foo' follows non-static declaration" +and use the functions from the expat library instead from the libsvg source. + +Patch based on +http://oe-lite.org/redmine/projects/xorg/repository/revisions/c4df7951e846e1be718f37f2455696a1d0861f3d/entry/recipes/cairo/libsvg-0.1.4/gcc4_and_expat.patch + +Signed-off-by: Carsten Schoenert + +diff -bur libsvg-0.1.4~orig/src/svg_parser_expat.c libsvg-0.1.4/src/svg_parser_expat.c +--- libsvg-0.1.4~orig/src/svg_parser_expat.c 2005-02-14 11:26:26.000000000 -0600 ++++ libsvg-0.1.4/src/svg_parser_expat.c 2006-02-10 21:58:20.000000000 -0600 +@@ -30,6 +30,7 @@ + #include "svgint.h" + #include "svg_hash.h" + ++#ifndef LIBSVG_EXPAT + static void + _svg_parser_sax_start_element (void *closure, + const XML_Char *name, +@@ -43,6 +44,7 @@ + _svg_parser_sax_characters (void *closure, + const XML_Char *ch, + int len); ++#endif + + static void diff --git a/package/libsvg/0002-Fix-undefined-symbol-png_set_gray_1_2_4_to_8.patch b/package/libsvg/0002-Fix-undefined-symbol-png_set_gray_1_2_4_to_8.patch new file mode 100644 index 00000000..d0bbeab0 --- /dev/null +++ b/package/libsvg/0002-Fix-undefined-symbol-png_set_gray_1_2_4_to_8.patch @@ -0,0 +1,32 @@ +From 213e5749947fad08d985eda8d06839efedda78ef Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Thu, 5 Mar 2015 21:42:52 +0100 +Subject: [PATCH] Fix undefined symbol png_set_gray_1_2_4_to_8 + +Since libpng-1.4.0 the function png_set_gray_1_2_4_to_8() was +removed, the replacement function is called +png_set_expand_gray_1_2_4_to_8() (see [1]). + +[1] http://libpng.sourceforge.net/ANNOUNCE-1.4.0.txt + +Signed-off-by: Peter Seiderer +--- + src/svg_image.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/svg_image.c b/src/svg_image.c +index cd8a95a..f256943 100755 +--- a/src/svg_image.c ++++ b/src/svg_image.c +@@ -271,7 +271,7 @@ _svg_image_read_png (const char *filename, + + /* expand gray bit depth if needed */ + if (color_type == PNG_COLOR_TYPE_GRAY && depth < 8) +- png_set_gray_1_2_4_to_8 (png); ++ png_set_expand_gray_1_2_4_to_8 (png); + + /* transform transparency to alpha */ + if (png_get_valid(png, info, PNG_INFO_tRNS)) +-- +2.1.4 + diff --git a/package/libsvg/Config.in b/package/libsvg/Config.in new file mode 100644 index 00000000..741ef10c --- /dev/null +++ b/package/libsvg/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LIBSVG + bool "libsvg" + select BR2_PACKAGE_LIBPNG + select BR2_PACKAGE_JPEG + select BR2_PACKAGE_LIBXML2 if !BR2_PACKAGE_EXPAT + help + Libsvg provides a parser for SVG content in files or buffers. + Libsvg does not do any rendering, but instead provides a + function-based interface that can be used by various rendering + engines. + + http://cairographics.org/snapshots/ diff --git a/package/libsvg/libsvg.hash b/package/libsvg/libsvg.hash new file mode 100644 index 00000000..c314c580 --- /dev/null +++ b/package/libsvg/libsvg.hash @@ -0,0 +1,6 @@ +# From http://cairographics.org/snapshots/libsvg-0.1.4.tar.gz.md5 +md5 ce0715e3013f78506795fba16e8455d3 libsvg-0.1.4.tar.gz + +# Locally calculated +sha256 4c3bf9292e676a72b12338691be64d0f38cd7f2ea5e8b67fbbf45f1ed404bc8f libsvg-0.1.4.tar.gz +sha256 d245807f90032872d1438d741ed21e2490e1175dc8aa3afa5ddb6c8e529b58e5 COPYING diff --git a/package/libsvg/libsvg.mk b/package/libsvg/libsvg.mk new file mode 100644 index 00000000..45d730db --- /dev/null +++ b/package/libsvg/libsvg.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# libsvg +# +################################################################################ + +LIBSVG_VERSION = 0.1.4 +LIBSVG_SITE = http://cairographics.org/snapshots +LIBSVG_DEPENDENCIES = host-pkgconf libpng jpeg +LIBSVG_INSTALL_STAGING = YES +LIBSVG_LICENSE = LGPL-2.0+ +LIBSVG_LICENSE_FILES = COPYING + +# libsvg needs at last a XML parser +ifeq ($(BR2_PACKAGE_EXPAT),y) +LIBSVG_CONF_OPTS += --with-expat +LIBSVG_DEPENDENCIES += expat +else +LIBSVG_CONF_OPTS += --with-libxml2 +LIBSVG_DEPENDENCIES += libxml2 +endif + +$(eval $(autotools-package)) diff --git a/package/libsvgtiny/0001-disable-debug-printfs.patch b/package/libsvgtiny/0001-disable-debug-printfs.patch new file mode 100644 index 00000000..72ed21cc --- /dev/null +++ b/package/libsvgtiny/0001-disable-debug-printfs.patch @@ -0,0 +1,125 @@ +svntiny: svntiny_gradient.c: only print debugging if GRADIENT_DEBUG is enabled + +Signed-off-by: Peter Korsgaard +--- + src/svgtiny_gradient.c | 23 ++++++++++++++++++++++- + 1 file changed, 22 insertions(+), 1 deletion(-) + +Index: libsvgtiny/src/svgtiny_gradient.c +=================================================================== +--- libsvgtiny.orig/src/svgtiny_gradient.c ++++ libsvgtiny/src/svgtiny_gradient.c +@@ -30,8 +30,9 @@ void svgtiny_find_gradient(const char *i + { + xmlNode *gradient; + ++#ifdef GRADIENT_DEBUG + fprintf(stderr, "svgtiny_find_gradient: id \"%s\"\n", id); +- ++#endif + state->linear_gradient_stop_count = 0; + state->gradient_x1 = "0%"; + state->gradient_y1 = "0%"; +@@ -47,13 +48,17 @@ void svgtiny_find_gradient(const char *i + + gradient = svgtiny_find_element_by_id( + (xmlNode *) state->document, id); ++#ifdef GRADIENT_DEBUG + fprintf(stderr, "gradient %p\n", (void *) gradient); ++#endif + if (!gradient) { + fprintf(stderr, "gradient \"%s\" not found\n", id); + return; + } + ++#ifdef GRADIENT_DEBUG + fprintf(stderr, "gradient name \"%s\"\n", gradient->name); ++#endif + if (strcmp((const char *) gradient->name, "linearGradient") == 0) { + svgtiny_parse_linear_gradient(gradient, state); + } +@@ -98,8 +103,10 @@ svgtiny_code svgtiny_parse_linear_gradie + return svgtiny_OUT_OF_MEMORY; + svgtiny_parse_transform(s, &a, &b, &c, &d, &e, &f); + free(s); ++#ifdef GRADIENT_DEBUG + fprintf(stderr, "transform %g %g %g %g %g %g\n", + a, b, c, d, e, f); ++#endif + state->gradient_transform.a = a; + state->gradient_transform.b = b; + state->gradient_transform.c = c; +@@ -143,7 +150,9 @@ svgtiny_code svgtiny_parse_linear_gradie + } + + if (offset != -1 && color != svgtiny_TRANSPARENT) { ++#ifdef GRADIENT_DEBUG + fprintf(stderr, "stop %g %x\n", offset, color); ++#endif + state->gradient_stop[i].offset = offset; + state->gradient_stop[i].color = color; + i++; +@@ -220,9 +229,11 @@ svgtiny_code svgtiny_add_path_linear_gra + #endif + + /* compute gradient vector */ ++#ifdef GRADIENT_DEBUG + fprintf(stderr, "x1 %s, y1 %s, x2 %s, y2 %s\n", + state->gradient_x1, state->gradient_y1, + state->gradient_x2, state->gradient_y2); ++#endif + if (!state->gradient_user_space_on_use) { + gradient_x0 = object_x0 + + svgtiny_parse_length(state->gradient_x1, +@@ -297,9 +308,11 @@ svgtiny_code svgtiny_add_path_linear_gra + + /* invert gradient transform for applying to vertices */ + svgtiny_invert_matrix(&state->gradient_transform.a, trans); ++#ifdef GRADIENT_DEBUG + fprintf(stderr, "inverse transform %g %g %g %g %g %g\n", + trans[0], trans[1], trans[2], trans[3], + trans[4], trans[5]); ++#endif + + /* compute points on the path for triangle vertices */ + /* r, r0, r1 are distance along gradient vector */ +@@ -372,8 +385,10 @@ svgtiny_code svgtiny_add_path_linear_gra + steps = ceilf(fabsf(r1 - r0) / 0.05); + if (steps == 0) + steps = 1; ++#ifdef GRADIENT_DEBUG + fprintf(stderr, "r0 %g, r1 %g, steps %i\n", + r0, r1, steps); ++#endif + + /* loop through intermediate points */ + for (z = 1; z != steps; z++) { +@@ -398,7 +413,9 @@ svgtiny_code svgtiny_add_path_linear_gra + r = ((x_trans - gradient_x0) * gradient_dx + + (y_trans - gradient_y0) * gradient_dy) / + gradient_norm_squared; ++#ifdef GRADIENT_DEBUG + fprintf(stderr, "(%g %g [%g]) ", x, y, r); ++#endif + point = svgtiny_list_push(pts); + if (!point) { + svgtiny_list_free(pts); +@@ -412,14 +429,18 @@ svgtiny_code svgtiny_add_path_linear_gra + min_pt = svgtiny_list_size(pts) - 1; + } + } ++#ifdef GRADIENT_DEBUG + fprintf(stderr, "\n"); ++#endif + + /* next segment start point is this segment end point */ + x0 = x1; + y0 = y1; + } ++#ifdef GRADIENT_DEBUG + fprintf(stderr, "pts size %i, min_pt %i, min_r %.3f\n", + svgtiny_list_size(pts), min_pt, min_r); ++#endif + + /* render triangles */ + stop_count = state->linear_gradient_stop_count; diff --git a/package/libsvgtiny/0002-Remove-Werror.patch b/package/libsvgtiny/0002-Remove-Werror.patch new file mode 100644 index 00000000..c8b0c0b9 --- /dev/null +++ b/package/libsvgtiny/0002-Remove-Werror.patch @@ -0,0 +1,44 @@ +Remove -Werror from Makefile + +glibc-2.20 includes some changes to the include/features.h file +introduced by this commit: + + https://sourceware.org/git/?p=glibc.git;a=commit;h=ade40b10ff5fa59a318cf55b9d8414b758e8df78 + +Those changes make libsvgtiny fail because some warnings are thrown and +the build system is using the -Werror option. We disable this to be able +to build it, or otherwise we will see errors like this one: + +GPERF: src/colors.gperf +COMPILE: build-Linux-Linux-release-lib-static/src_colors.c +In file included from +/br/output/host/usr/mipsel-buildroot-linux-gnu/sysroot/usr/include/string.h:25:0, + from src/colors.gperf:16: +/br/output/host/usr/mipsel-buildroot-linux-gnu/sysroot/usr/include/features.h:148:3: +error: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use +_DEFAULT_SOURCE" [-Werror=cpp] + +and this one: + +In file included from src/colors.gperf:18:0: +/home/ldap/vriera/work/mips-buildroots/mips32/output/build/libsvgtiny-12121/src/svgtiny_internal.h:71:0: +error: "strndup" redefined [-Werror] + +Signed-off-by: Vicente Olivert Riera + +diff -rup a/Makefile b/Makefile +--- a/Makefile 2010-01-03 23:37:39.000000000 +0000 ++++ b/Makefile 2014-12-11 11:35:37.241903884 +0000 +@@ -13,12 +13,6 @@ TESTRUNNER := $(ECHO) + WARNFLAGS := -Wall -W -Wundef -Wpointer-arith -Wcast-align \ + -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes \ + -Wmissing-declarations -Wnested-externs -pedantic +-# BeOS/Haiku/AmigaOS4 standard library headers create warnings +-ifneq ($(TARGET),beos) +- ifneq ($(TARGET),AmigaOS) +- WARNFLAGS := $(WARNFLAGS) -Werror +- endif +-endif + CFLAGS := -D_BSD_SOURCE -I$(CURDIR)/include/ \ + -I$(CURDIR)/src $(WARNFLAGS) $(CFLAGS) + ifneq ($(GCCVER),2) diff --git a/package/libsvgtiny/0003-Hopefully-silence-warnings-about-inlines-and-non-inlines-calling-one.patch b/package/libsvgtiny/0003-Hopefully-silence-warnings-about-inlines-and-non-inlines-calling-one.patch new file mode 100644 index 00000000..9285477d --- /dev/null +++ b/package/libsvgtiny/0003-Hopefully-silence-warnings-about-inlines-and-non-inlines-calling-one.patch @@ -0,0 +1,36 @@ +From 21b4836ac9d6c6725590a925daa5d17eda9843e9 Mon Sep 17 00:00:00 2001 +From: Daniel Silverstone +Date: Sat, 26 Apr 2014 16:24:54 +0100 +Subject: Hopefully silence warnings about inlines and non inlines calling one + another. + +[Retrieved from: +https://source.netsurf-browser.org/libsvgtiny.git/commit/src?id=21b4836ac9d6c6725590a925daa5d17eda9843e9] +Signed-off-by: Fabrice Fontaine +--- + src/colors.gperf | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/src/colors.gperf b/src/colors.gperf +index 89152d2..96d5b9e 100644 +--- a/src/colors.gperf ++++ b/src/colors.gperf +@@ -16,6 +16,15 @@ + #include + #include "svgtiny.h" + #include "svgtiny_internal.h" ++ ++/* This unusual define shennanigan is to try and prevent the gperf ++ * generated function from being inlined. This is pointless given ++ * it (a) is in a separate .c file and (b) has external linkage. ++ */ ++#ifdef __inline ++#undef __inline ++#define __inline ++#endif + %} + + struct svgtiny_named_color; +-- +cgit v1.2.1 + diff --git a/package/libsvgtiny/0004-Build-Include-gperf-generated-code-directly.patch b/package/libsvgtiny/0004-Build-Include-gperf-generated-code-directly.patch new file mode 100644 index 00000000..c17426ff --- /dev/null +++ b/package/libsvgtiny/0004-Build-Include-gperf-generated-code-directly.patch @@ -0,0 +1,97 @@ +From 4390f1c84e8fee51fc22468821e6fc158e783053 Mon Sep 17 00:00:00 2001 +From: Michael Drake +Date: Thu, 20 Apr 2017 10:51:07 +0100 +Subject: Build: Include gperf-generated code directly. + +Previously we built the generated code separatly and then linked to +it. However, this caused problems with certain compilers and gperf +versions. This change includes the generated code directly in +svgtiny.c instead, which is the only place its used. + +[Retrieved from: +https://source.netsurf-browser.org/libsvgtiny.git/commit/src?id=4390f1c84e8fee51fc22468821e6fc158e783053] +Signed-off-by: Fabrice Fontaine +--- + src/Makefile | 13 +++++++------ + src/colors.gperf | 8 -------- + src/svgtiny.c | 3 +++ + src/svgtiny_internal.h | 5 ----- + 4 files changed, 10 insertions(+), 19 deletions(-) + +(limited to 'src') + +diff --git a/src/Makefile b/src/Makefile +index a979720..fb8a72f 100644 +--- a/src/Makefile ++++ b/src/Makefile +@@ -1,13 +1,14 @@ + # Sources + DIR_SOURCES := svgtiny.c svgtiny_gradient.c svgtiny_list.c + +-SOURCES := $(SOURCES) $(BUILDDIR)/src_colors.c ++SOURCES := $(SOURCES) + +-$(BUILDDIR)/src_colors.c: src/colors.gperf ++$(DIR)autogenerated_colors.c: src/colors.gperf + $(VQ)$(ECHO) " GPERF: $<" +- $(Q)gperf --output-file=$@.tmp $< +-# Hack for GCC 4.2 compatibility (gperf 3.0.4 solves this properly) +- $(Q)$(SED) -e 's/#ifdef __GNUC_STDC_INLINE__/#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__/' $@.tmp >$@ +- $(Q)$(RM) $@.tmp ++ $(Q)gperf --output-file=$@ $< ++ ++PRE_TARGETS := $(DIR)autogenerated_colors.c ++ ++CLEAN_ITEMS := $(DIR)autogenerated_colors.c + + include $(NSBUILD)/Makefile.subdir +diff --git a/src/colors.gperf b/src/colors.gperf +index 96d5b9e..a836787 100644 +--- a/src/colors.gperf ++++ b/src/colors.gperf +@@ -17,14 +17,6 @@ + #include "svgtiny.h" + #include "svgtiny_internal.h" + +-/* This unusual define shennanigan is to try and prevent the gperf +- * generated function from being inlined. This is pointless given +- * it (a) is in a separate .c file and (b) has external linkage. +- */ +-#ifdef __inline +-#undef __inline +-#define __inline +-#endif + %} + + struct svgtiny_named_color; +diff --git a/src/svgtiny.c b/src/svgtiny.c +index 4661a58..bbefb88 100644 +--- a/src/svgtiny.c ++++ b/src/svgtiny.c +@@ -20,6 +20,9 @@ + #include "svgtiny.h" + #include "svgtiny_internal.h" + ++/* Source file generated by `gperf`. */ ++#include "autogenerated_colors.c" ++ + #ifndef M_PI + #define M_PI 3.14159265358979323846 + #endif +diff --git a/src/svgtiny_internal.h b/src/svgtiny_internal.h +index 158d230..6bf5d64 100644 +--- a/src/svgtiny_internal.h ++++ b/src/svgtiny_internal.h +@@ -102,9 +102,4 @@ void *svgtiny_list_get(struct svgtiny_list *list, + void *svgtiny_list_push(struct svgtiny_list *list); + void svgtiny_list_free(struct svgtiny_list *list); + +-/* colors.gperf */ +-const struct svgtiny_named_color * +- svgtiny_color_lookup(register const char *str, +- register unsigned int len); +- + #endif +-- +cgit v1.2.1 + diff --git a/package/libsvgtiny/Config.in b/package/libsvgtiny/Config.in new file mode 100644 index 00000000..836dec21 --- /dev/null +++ b/package/libsvgtiny/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LIBSVGTINY + bool "libsvgtiny" + select BR2_PACKAGE_LIBXML2 + help + Libsvgtiny is an implementation of SVG Tiny, written in C. + It is currently in development for use with NetSurf and is + intended to be suitable for use in other projects too. + + http://www.netsurf-browser.org/projects/libsvgtiny/ diff --git a/package/libsvgtiny/libsvgtiny.hash b/package/libsvgtiny/libsvgtiny.hash new file mode 100644 index 00000000..ba4b4cae --- /dev/null +++ b/package/libsvgtiny/libsvgtiny.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 917850350d014c953f2af0fb92f0eeb25652619710922d467c98f8109fb92baf libsvgtiny-ea9d99fc8b231c22d06168135e181d61f4eb2f06-br1.tar.gz +sha256 92b965c77be71661cae51425a6b40a5ca274f44cc13c723c90fb471a9a26a828 README diff --git a/package/libsvgtiny/libsvgtiny.mk b/package/libsvgtiny/libsvgtiny.mk new file mode 100644 index 00000000..55ce4327 --- /dev/null +++ b/package/libsvgtiny/libsvgtiny.mk @@ -0,0 +1,47 @@ +################################################################################ +# +# libsvgtiny +# +################################################################################ + +LIBSVGTINY_SITE = http://git.netsurf-browser.org/libsvgtiny.git +LIBSVGTINY_SITE_METHOD = git +LIBSVGTINY_VERSION = ea9d99fc8b231c22d06168135e181d61f4eb2f06 +LIBSVGTINY_INSTALL_STAGING = YES +LIBSVGTINY_DEPENDENCIES = \ + libxml2 host-gperf host-pkgconf host-netsurf-buildsystem +LIBSVGTINY_LICENSE = MIT +LIBSVGTINY_LICENSE_FILES = README + +# The libsvgtiny build system cannot build both the shared and static +# libraries. So when the Buildroot configuration requests to build +# both the shared and static variants, we build only the shared one. +ifeq ($(BR2_SHARED_LIBS)$(BR2_SHARED_STATIC_LIBS),y) +LIBSVGTINY_COMPONENT_TYPE = lib-shared +else +LIBSVGTINY_COMPONENT_TYPE = lib-static +endif + +define LIBSVGTINY_CONFIGURE_CMDS + ln -sf $(HOST_DIR)/share/netsurf-buildsystem $(@D)/build +endef + +# Use $(MAKE1) since parallel build fails +define LIBSVGTINY_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE1) -C $(@D) PREFIX=/usr \ + COMPONENT_TYPE=$(LIBSVGTINY_COMPONENT_TYPE) +endef + +define LIBSVGTINY_INSTALL_STAGING_CMDS + $(TARGET_CONFIGURE_OPTS) \ + $(MAKE1) -C $(@D) PREFIX=/usr DESTDIR=$(STAGING_DIR) \ + COMPONENT_TYPE=$(LIBSVGTINY_COMPONENT_TYPE) install +endef + +define LIBSVGTINY_INSTALL_TARGET_CMDS + $(TARGET_CONFIGURE_OPTS) \ + $(MAKE1) -C $(@D) PREFIX=/usr DESTDIR=$(TARGET_DIR) \ + COMPONENT_TYPE=$(LIBSVGTINY_COMPONENT_TYPE) install +endef + +$(eval $(generic-package)) diff --git a/package/libsysfs/Config.in b/package/libsysfs/Config.in new file mode 100644 index 00000000..2cbebaa5 --- /dev/null +++ b/package/libsysfs/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBSYSFS + bool "libsysfs" + help + These are a set of utilities built upon sysfs, a filesystem in + Linux 2.6 kernels that exposes a system's device tree. + + http://linux-diag.sourceforge.net/Sysfsutils.html diff --git a/package/libsysfs/libsysfs.hash b/package/libsysfs/libsysfs.hash new file mode 100644 index 00000000..5d32300a --- /dev/null +++ b/package/libsysfs/libsysfs.hash @@ -0,0 +1,4 @@ +# Locally computed: +sha256 e865de2c1f559fff0d3fc936e660c0efaf7afe662064f2fb97ccad1ec28d208a sysfsutils-2.1.0.tar.gz +sha256 88ced477f0659c5a4df22df3b65de2f12ea3a9c7b5e4750fdc757bc11e97aa79 cmd/GPL +sha256 4eb1c0ea980e7e4c7fac34e025be0423f5e7ca7df501e1da7ef31f32f14d6cf9 lib/LGPL diff --git a/package/libsysfs/libsysfs.mk b/package/libsysfs/libsysfs.mk new file mode 100644 index 00000000..6cff8bf5 --- /dev/null +++ b/package/libsysfs/libsysfs.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libsysfs +# +################################################################################ + +LIBSYSFS_VERSION = 2.1.0 +LIBSYSFS_SITE = http://downloads.sourceforge.net/project/linux-diag/sysfsutils/$(LIBSYSFS_VERSION) +LIBSYSFS_SOURCE = sysfsutils-$(LIBSYSFS_VERSION).tar.gz +LIBSYSFS_INSTALL_STAGING = YES +LIBSYSFS_LICENSE = GPL-2.0 (utilities), LGPL-2.1+ (library) +LIBSYSFS_LICENSE_FILES = cmd/GPL lib/LGPL +LIBSYSFS_CPE_ID_VENDOR = sysfsutils_project +LIBSYSFS_CPE_ID_PRODUCT = sysfsutils + +$(eval $(autotools-package)) diff --git a/package/libtasn1/0001-fuzz-Makefile.am-do-not-force-static.patch b/package/libtasn1/0001-fuzz-Makefile.am-do-not-force-static.patch new file mode 100644 index 00000000..1f1abc7d --- /dev/null +++ b/package/libtasn1/0001-fuzz-Makefile.am-do-not-force-static.patch @@ -0,0 +1,35 @@ +From cf1b20f3d881a1cfbf8cae1f615f45a5a4fbb3b4 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Wed, 22 Apr 2020 18:35:55 +0200 +Subject: [PATCH] fuzz/Makefile.am: do not force static + +Don't force static when linking corpus2arry to libtasn1 otherwise the +build will fail if libtasn1 has been built only as a shared library: + + CCLD corpus2array +/home/fabrice/buildroot/output/host/lib/gcc/arm-buildroot-linux-musleabihf/8.4.0/../../../../arm-buildroot-linux-musleabihf/bin/ld: attempted static link of dynamic object `../lib/.libs/libtasn1.so' +collect2: error: ld returned 1 exit status + +Signed-off-by: Fabrice Fontaine +[Upstream status: +https://gitlab.com/gnutls/libtasn1/-/merge_requests/61] +--- + fuzz/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/fuzz/Makefile.am b/fuzz/Makefile.am +index c6310d1..1fb7152 100644 +--- a/fuzz/Makefile.am ++++ b/fuzz/Makefile.am +@@ -26,7 +26,7 @@ AM_CFLAGS = $(WERROR_CFLAGS) $(WARN_CFLAGS) $(CODE_COVERAGE_CFLAGS) + AM_CPPFLAGS = -I$(top_builddir)/lib/includes -I$(top_srcdir)/lib/includes -I$(srcdir) \ + -I$(top_builddir)/lib/gl -I$(top_srcdir)/lib/gl -DSRCDIR=\"$(abs_srcdir)\" \ + $(CODE_COVERAGE_CPPFLAGS) +-AM_LDFLAGS = -no-install -static ++AM_LDFLAGS = -no-install + + LDADD = ../lib/gl/libgnu.la ../lib/libtasn1.la $(FUZZ_LIBS) $(CODE_COVERAGE_LIBS) + +-- +2.25.1 + diff --git a/package/libtasn1/Config.in b/package/libtasn1/Config.in new file mode 100644 index 00000000..181fc698 --- /dev/null +++ b/package/libtasn1/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LIBTASN1 + bool "libtasn1" + help + ASN.1 library + + http://www.gnu.org/software/libtasn1 diff --git a/package/libtasn1/libtasn1.hash b/package/libtasn1/libtasn1.hash new file mode 100644 index 00000000..fc3610b9 --- /dev/null +++ b/package/libtasn1/libtasn1.hash @@ -0,0 +1,7 @@ +# Locally calculated after checking pgp signature +# https://ftp.gnu.org/gnu/libtasn1/libtasn1-4.17.0.tar.gz.sig +sha256 ece7551cea7922b8e10d7ebc70bc2248d1fdd73351646a2d6a8d68a9421c45a5 libtasn1-4.17.0.tar.gz +# Locally calculated +sha256 7446831f659f7ebfd8d497acc7f05dfa8e31c6cb6ba1b45df33d4895ab80f5a6 COPYING +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 doc/COPYING +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 doc/COPYING.LESSER diff --git a/package/libtasn1/libtasn1.mk b/package/libtasn1/libtasn1.mk new file mode 100644 index 00000000..d9d14fde --- /dev/null +++ b/package/libtasn1/libtasn1.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# libtasn1 +# +################################################################################ + +LIBTASN1_VERSION = 4.17.0 +LIBTASN1_SITE = $(BR2_GNU_MIRROR)/libtasn1 +LIBTASN1_DEPENDENCIES = host-bison host-pkgconf +LIBTASN1_LICENSE = GPL-3.0+ (tests, tools), LGPL-2.1+ (library) +LIBTASN1_LICENSE_FILES = COPYING doc/COPYING doc/COPYING.LESSER +LIBTASN1_CPE_ID_VENDOR = gnu +LIBTASN1_INSTALL_STAGING = YES + +# We're patching fuzz/Makefile.am +LIBTASN1_AUTORECONF = YES + +# 'missing' fallback logic botched so disable it completely +LIBTASN1_CONF_ENV = MAKEINFO="true" + +LIBTASN1_CONF_OPTS = CFLAGS="$(TARGET_CFLAGS) -std=gnu99" + +$(eval $(autotools-package)) diff --git a/package/libtelnet/0001-fix-compilation-without-zlib.patch b/package/libtelnet/0001-fix-compilation-without-zlib.patch new file mode 100644 index 00000000..6b793e8f --- /dev/null +++ b/package/libtelnet/0001-fix-compilation-without-zlib.patch @@ -0,0 +1,42 @@ +From 1670ca128118be1d914fc89223e94c4cff1bbf03 Mon Sep 17 00:00:00 2001 +From: Jan Heylen +Date: Wed, 25 Oct 2017 06:45:49 +0200 +Subject: [PATCH] Fix compilation without zlib + +libtelnet source code uses '#if defived(HAVE_ZLIB)' as conditional flag for +optional compression support. But the configure(.ac) script does not play well +with this: it will define 'HAVE_ZLIB' to either 1 (zlib present) or 0 +(zlib not present). For the C preprocessor, both cases mean 'defined'. + +As a result, compilation will fail when trying to include zlib.h, which is +missing. + +Signed-off-by: Jan Heylen +Signed-off-by: Thomas De Schampheleire +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Upstream-status: upstream has changed to cmake iso autotools (but not yet +released) [1] and a pull request exists to fix several issues with that, +including correct handling of zlib detection [2]. + +[1] https://github.com/seanmiddleditch/libtelnet/commit/4860d10da44929554895c0ef83274f38de68e958 +[2] https://github.com/seanmiddleditch/libtelnet/pull/54 + +diff --git a/configure.ac b/configure.ac +index 021b48f..c4dac8b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -33,7 +33,7 @@ AC_HEADER_STDC + PKG_CHECK_MODULES([zlib], + [zlib], + [AC_DEFINE([HAVE_ZLIB], [1], [Define to 1 if you have zlib.])], +- [AC_DEFINE([HAVE_ZLIB], [0], [Define to 1 if you have zlib.])]) ++ [AC_MSG_NOTICE([not enabling zlib support])]) + + # Checks for header files. + +-- +2.7.4 + diff --git a/package/libtelnet/Config.in b/package/libtelnet/Config.in new file mode 100644 index 00000000..59456a32 --- /dev/null +++ b/package/libtelnet/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LIBTELNET + bool "libtelnet" + help + libtelnet provides safe and correct handling of the core + TELNET protocol. In addition to the base TELNET protocol, + libtelnet also implements the Q method of TELNET option + negotiation. libtelnet can be used for writing servers, + clients, or proxies. + + https://github.com/seanmiddleditch/libtelnet diff --git a/package/libtelnet/libtelnet.hash b/package/libtelnet/libtelnet.hash new file mode 100644 index 00000000..afbb29e4 --- /dev/null +++ b/package/libtelnet/libtelnet.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 d2f01a9dc0cc01777844b6d27f0f836dad9a4b9a32a31c7bbde0762480262f25 libtelnet-0.23.tar.gz +sha256 b1faf309467bc1d0aab9b42d6e86a614e78f8fe3580e289966b5b9f9a8f94d99 COPYING diff --git a/package/libtelnet/libtelnet.mk b/package/libtelnet/libtelnet.mk new file mode 100644 index 00000000..863d7a61 --- /dev/null +++ b/package/libtelnet/libtelnet.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# libtelnet +# +################################################################################ + +LIBTELNET_VERSION = 0.23 +LIBTELNET_SITE = https://github.com/seanmiddleditch/libtelnet/releases/download/$(LIBTELNET_VERSION) +LIBTELNET_INSTALL_STAGING = YES +LIBTELNET_CONF_OPTS = --disable-util +LIBTELNET_DEPENDENCIES = host-pkgconf +LIBTELNET_LICENSE = Public domain +LIBTELNET_LICENSE_FILES = COPYING + +# for 0001-fix-compilation-without-zlib.patch +LIBTELNET_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/libtextstyle/libtextstyle.hash b/package/libtextstyle/libtextstyle.hash new file mode 100644 index 00000000..5c5aee85 --- /dev/null +++ b/package/libtextstyle/libtextstyle.hash @@ -0,0 +1,6 @@ +# From https://lists.gnu.org/archive/html/info-gnu/2019-05/msg00011.html +sha1 62f4a6a2fd5f80bfd0e66c497a04094fa3e07b90 gettext-0.20.1.tar.xz + +# Locally calculated +sha256 53f02fbbec9e798b0faaf7c73272f83608e835c6288dd58be6c9bb54624a3800 gettext-0.20.1.tar.xz +sha256 e79e9c8a0c85d735ff98185918ec94ed7d175efc377012787aebcf3b80f0d90b COPYING diff --git a/package/libtextstyle/libtextstyle.mk b/package/libtextstyle/libtextstyle.mk new file mode 100644 index 00000000..a5afad04 --- /dev/null +++ b/package/libtextstyle/libtextstyle.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# libtextstyle +# +################################################################################ + +# Please keep in sync with package/gettext-gnu/gettext-gnu.mk +LIBTEXTSTYLE_VERSION = 0.20.1 +LIBTEXTSTYLE_SITE = $(BR2_GNU_MIRROR)/gettext +LIBTEXTSTYLE_SOURCE = gettext-$(LIBTEXTSTYLE_VERSION).tar.xz +LIBTEXTSTYLE_INSTALL_STAGING = YES +LIBTEXTSTYLE_LICENSE = GPL-3.0+ +LIBTEXTSTYLE_LICENSE_FILES = COPYING +HOST_LIBTEXTSTYLE_DL_SUBDIR = gettext-gnu +HOST_LIBTEXTSTYLE_SUBDIR = libtextstyle + +# gettext-tools require libtextstyle.m4 +define HOST_LIBTEXTSTYLE_INSTALL_M4 + $(INSTALL) -D -m 0755 $(@D)/libtextstyle/m4/libtextstyle.m4 \ + $(ACLOCAL_HOST_DIR)/libtextstyle.m4 +endef +HOST_LIBTEXTSTYLE_POST_INSTALL_HOOKS += HOST_LIBTEXTSTYLE_INSTALL_M4 + +$(eval $(host-autotools-package)) diff --git a/package/libtheora/0001-link-libtheoradec.patch b/package/libtheora/0001-link-libtheoradec.patch new file mode 100644 index 00000000..c38d32bb --- /dev/null +++ b/package/libtheora/0001-link-libtheoradec.patch @@ -0,0 +1,21 @@ +libtheoraenc.so needs to be linked to libtheoradec.so in order to avoid + +symbol 'th_comment_query_count': can't resolve symbol in lib '/usr/lib/libtheoraenc.so.1' + +when starting Freeswitch. + +Patch downloaded from +http://www.sisyphus.ru/en/srpm/Sisyphus/libtheora/patches/0 + +Signed-off-by: Bernd Kuhls + +--- libtheora/lib/Makefile.am ++++ libtheora/lib/Makefile.am +@@ -153,6 +153,7 @@ libtheoraenc_la_SOURCES = \ + libtheoraenc_la_LDFLAGS = \ + -version-info @THENC_LIB_CURRENT@:@THENC_LIB_REVISION@:@THENC_LIB_AGE@ \ + @THEORAENC_LDFLAGS@ $(OGG_LIBS) ++libtheoraenc_la_LIBADD = libtheoradec.la + + libtheora_la_SOURCES = \ + $(decoder_sources) \ diff --git a/package/libtheora/0002-fix-autoreconf.patch b/package/libtheora/0002-fix-autoreconf.patch new file mode 100644 index 00000000..dd3f4732 --- /dev/null +++ b/package/libtheora/0002-fix-autoreconf.patch @@ -0,0 +1,46 @@ +Fix broken autoreconf + +Downloaded from upstream git +https://git.xiph.org/?p=theora.git;a=commitdiff;h=28cc6dbd9b2a141df94f60993256a5fca368fa54 + +Signed-off-by: Bernd Kuhls + + +From: Tim Terriberry +Date: Fri, 20 May 2011 20:41:50 +0000 (+0000) +Subject: Make autoreconf -i -f work. +X-Git-Url: https://git.xiph.org/?p=theora.git;a=commitdiff_plain;h=28cc6dbd9b2a141df94f60993256a5fca368fa54 + +Make autoreconf -i -f work. + +Patch from David Schleef. + +svn path=/trunk/theora/; revision=17990 +--- + +diff --git a/Makefile.am b/Makefile.am +index 89fd753..1783857 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -4,6 +4,8 @@ + #AUTOMAKE_OPTIONS = foreign 1.7 dist-zip dist-bzip2 + AUTOMAKE_OPTIONS = foreign 1.11 dist-zip dist-xz + ++ACLOCAL_AMFLAGS=-I m4 ++ + if THEORA_ENABLE_EXAMPLES + EXAMPLES_DIR = examples + else +diff --git a/configure.ac b/configure.ac +index 1cbec1a..456b603 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -68,7 +68,7 @@ AC_LIBTOOL_WIN32_DLL + AM_PROG_LIBTOOL + + dnl Add parameters for aclocal +-AC_SUBST(ACLOCAL_AMFLAGS, "-I m4") ++AC_CONFIG_MACRO_DIR([m4]) + + dnl Check for doxygen + AC_ARG_ENABLE([doc], diff --git a/package/libtheora/Config.in b/package/libtheora/Config.in new file mode 100644 index 00000000..eee9e9b1 --- /dev/null +++ b/package/libtheora/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LIBTHEORA + bool "libtheora" + select BR2_PACKAGE_LIBOGG + select BR2_PACKAGE_LIBVORBIS + help + A library for the free and open video compression format + "Theora" from the Xiph.org Foundation. + + http://www.theora.org/ diff --git a/package/libtheora/libtheora.hash b/package/libtheora/libtheora.hash new file mode 100644 index 00000000..45376dda --- /dev/null +++ b/package/libtheora/libtheora.hash @@ -0,0 +1,6 @@ +# From http://downloads.xiph.org/releases/theora/SHA256SUMS +sha256 f36da409947aa2b3dcc6af0a8c2e3144bc19db2ed547d64e9171c59c66561c61 libtheora-1.1.1.tar.xz + +# Locally calculated +sha256 8417fad7da775735564e209484a2e011e0fa201e94f01fdbee6e4977e478e6fc COPYING +sha256 654a0238f789f4435c4818f50005b141d013c5a09a31d861efc1d0d67ba975a4 LICENSE diff --git a/package/libtheora/libtheora.mk b/package/libtheora/libtheora.mk new file mode 100644 index 00000000..f408e6cc --- /dev/null +++ b/package/libtheora/libtheora.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# libtheora +# +################################################################################ + +LIBTHEORA_VERSION = 1.1.1 +LIBTHEORA_SOURCE = libtheora-$(LIBTHEORA_VERSION).tar.xz +LIBTHEORA_SITE = http://downloads.xiph.org/releases/theora +LIBTHEORA_INSTALL_STAGING = YES +# We're patching Makefile.am +LIBTHEORA_AUTORECONF = YES +LIBTHEORA_LICENSE = BSD-3-Clause +LIBTHEORA_LICENSE_FILES = COPYING LICENSE + +LIBTHEORA_CONF_OPTS = \ + --disable-oggtest \ + --disable-vorbistest \ + --disable-sdltest \ + --disable-examples \ + --disable-spec + +LIBTHEORA_DEPENDENCIES = libogg libvorbis host-pkgconf + +$(eval $(autotools-package)) diff --git a/package/libtirpc/0001-Automatically-generate-XDR-header-files-from-.x-sour.patch b/package/libtirpc/0001-Automatically-generate-XDR-header-files-from-.x-sour.patch new file mode 100644 index 00000000..2712f53c --- /dev/null +++ b/package/libtirpc/0001-Automatically-generate-XDR-header-files-from-.x-sour.patch @@ -0,0 +1,1001 @@ +From 001e3f26dc80b8f21bed7d9b5872fe10e8b4af04 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sat, 10 Nov 2012 17:29:53 +0100 +Subject: [PATCH] Automatically generate XDR header files from .x sources using + rpcgen + +[Gustavo: update after dropping non-IPv6 support] +Signed-off-by: Thomas Petazzoni +[yann.morin.1998@free.fr: update for 0.3.1] +Signed-off-by: "Yann E. MORIN" +[baruch: use external rpcgen] +Signed-off-by: Baruch Siach +--- + Makefile.am | 16 +- + src/Makefile.am | 2 +- + tirpc/rpc/rpcb_prot.h | 797 ------------------------------------------ + tirpc/rpcsvc/crypt.h | 109 ------ + 4 files changed, 14 insertions(+), 910 deletions(-) + delete mode 100644 tirpc/rpc/rpcb_prot.h + delete mode 100644 tirpc/rpcsvc/crypt.h + +diff --git a/Makefile.am b/Makefile.am +index 3f6063771faf..368fb8a1aed2 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -1,6 +1,9 @@ + SUBDIRS = src man doc + ACLOCAL_AMFLAGS = -I m4 + ++GENFILES = tirpc/rpcsvc/crypt.h \ ++ tirpc/rpc/rpcb_prot.h ++ + noinst_HEADERS = tirpc/reentrant.h \ + tirpc/getpeereid.h \ + tirpc/libc_private.h \ +@@ -8,7 +11,6 @@ noinst_HEADERS = tirpc/reentrant.h \ + + nobase_include_HEADERS = tirpc/netconfig.h \ + tirpc/rpcsvc/crypt.x \ +- tirpc/rpcsvc/crypt.h \ + tirpc/rpc/xdr.h \ + tirpc/rpc/types.h \ + tirpc/rpc/svc_soc.h \ +@@ -21,7 +23,6 @@ nobase_include_HEADERS = tirpc/netconfig.h \ + tirpc/rpc/rpcent.h \ + tirpc/rpc/rpc_com.h \ + tirpc/rpc/rpcb_prot.x \ +- tirpc/rpc/rpcb_prot.h \ + tirpc/rpc/rpcb_clnt.h \ + tirpc/rpc/raw.h \ + tirpc/rpc/pmap_rmt.h \ +@@ -48,5 +49,14 @@ endif + pkgconfigdir=$(libdir)/pkgconfig + pkgconfig_DATA = libtirpc.pc + +-CLEANFILES = cscope.* *~ ++nobase_nodist_include_HEADERS = $(GENFILES) ++BUILT_SOURCES = $(GENFILES) ++ ++$(GENFILES): %.h: %.x ++ mkdir -p $(dir $@) ++ rpcgen -h -o $@ $< ++ ++force: ++ ++CLEANFILES = cscope.* *~ $(GENFILES) + DISTCLEANFILES = Makefile.in libtirpc*.tar.gz +diff --git a/src/Makefile.am b/src/Makefile.am +index 2af40f16d03a..0b7e23835c36 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -8,7 +8,7 @@ + noinst_HEADERS = rpc_com.h debug.h + + AM_CPPFLAGS = -I$(top_srcdir)/tirpc -include config.h -DPORTMAP -DINET6 \ +- -D_GNU_SOURCE -Wall -pipe ++ -D_GNU_SOURCE -Wall -pipe -I$(top_builddir)/tirpc + + lib_LTLIBRARIES = libtirpc.la + +diff --git a/tirpc/rpc/rpcb_prot.h b/tirpc/rpc/rpcb_prot.h +deleted file mode 100644 +index 7ae48b805370..000000000000 +--- a/tirpc/rpc/rpcb_prot.h ++++ /dev/null +@@ -1,797 +0,0 @@ +-/* +- * Please do not edit this file. +- * It was generated using rpcgen. +- */ +- +-#ifndef _RPCB_PROT_H_RPCGEN +-#define _RPCB_PROT_H_RPCGEN +- +-#include +- +-#ifndef IXDR_GET_INT32 +-#define IXDR_GET_INT32(buf) IXDR_GET_LONG((buf)) +-#endif +-#ifndef IXDR_PUT_INT32 +-#define IXDR_PUT_INT32(buf, v) IXDR_PUT_LONG((buf), (v)) +-#endif +-#ifndef IXDR_GET_U_INT32 +-#define IXDR_GET_U_INT32(buf) IXDR_GET_U_LONG((buf)) +-#endif +-#ifndef IXDR_PUT_U_INT32 +-#define IXDR_PUT_U_INT32(buf, v) IXDR_PUT_U_LONG((buf), (v)) +-#endif +-/* +- * $FreeBSD: src/include/rpc/rpcb_prot.x,v 1.3 2002/03/13 10:29:06 obrien Exp $ +- * +- * Copyright (c) 2009, Sun Microsystems, Inc. +- * All rights reserved. +- * +- * Redistribution and use in source and binary forms, with or without +- * modification, are permitted provided that the following conditions are met: +- * - Redistributions of source code must retain the above copyright notice, +- * this list of conditions and the following disclaimer. +- * - 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. +- * - Neither the name of Sun Microsystems, Inc. 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. +- */ +-/* +- * Copyright (c) 1988 by Sun Microsystems, Inc. +- */ +-/* from rpcb_prot.x */ +- +-/* #pragma ident "@(#)rpcb_prot.x 1.5 94/04/29 SMI" */ +- +-#ifndef _KERNEL +- +- +-/* +- * The following procedures are supported by the protocol in version 3: +- * +- * RPCBPROC_NULL() returns () +- * takes nothing, returns nothing +- * +- * RPCBPROC_SET(rpcb) returns (bool_t) +- * TRUE is success, FALSE is failure. Registers the tuple +- * [prog, vers, address, owner, netid]. +- * Finds out owner and netid information on its own. +- * +- * RPCBPROC_UNSET(rpcb) returns (bool_t) +- * TRUE is success, FALSE is failure. Un-registers tuple +- * [prog, vers, netid]. addresses is ignored. +- * If netid is NULL, unregister all. +- * +- * RPCBPROC_GETADDR(rpcb) returns (string). +- * 0 is failure. Otherwise returns the universal address where the +- * triple [prog, vers, netid] is registered. Ignore address and owner. +- * +- * RPCBPROC_DUMP() RETURNS (rpcblist_ptr) +- * used to dump the entire rpcbind maps +- * +- * RPCBPROC_CALLIT(rpcb_rmtcallargs) +- * RETURNS (rpcb_rmtcallres); +- * Calls the procedure on the remote machine. If it is not registered, +- * this procedure is quiet; i.e. it does not return error information!!! +- * This routine only passes null authentication parameters. +- * It has no interface to xdr routines for RPCBPROC_CALLIT. +- * +- * RPCBPROC_GETTIME() returns (int). +- * Gets the remote machines time +- * +- * RPCBPROC_UADDR2TADDR(strint) RETURNS (struct netbuf) +- * Returns the netbuf address from universal address. +- * +- * RPCBPROC_TADDR2UADDR(struct netbuf) RETURNS (string) +- * Returns the universal address from netbuf address. +- * +- * END OF RPCBIND VERSION 3 PROCEDURES +- */ +-/* +- * Except for RPCBPROC_CALLIT, the procedures above are carried over to +- * rpcbind version 4. Those below are added or modified for version 4. +- * NOTE: RPCBPROC_BCAST HAS THE SAME FUNCTIONALITY AND PROCEDURE NUMBER +- * AS RPCBPROC_CALLIT. +- * +- * RPCBPROC_BCAST(rpcb_rmtcallargs) +- * RETURNS (rpcb_rmtcallres); +- * Calls the procedure on the remote machine. If it is not registered, +- * this procedure IS quiet; i.e. it DOES NOT return error information!!! +- * This routine should be used for broadcasting and nothing else. +- * +- * RPCBPROC_GETVERSADDR(rpcb) returns (string). +- * 0 is failure. Otherwise returns the universal address where the +- * triple [prog, vers, netid] is registered. Ignore address and owner. +- * Same as RPCBPROC_GETADDR except that if the given version number +- * is not available, the address is not returned. +- * +- * RPCBPROC_INDIRECT(rpcb_rmtcallargs) +- * RETURNS (rpcb_rmtcallres); +- * Calls the procedure on the remote machine. If it is not registered, +- * this procedure is NOT quiet; i.e. it DOES return error information!!! +- * as any normal application would expect. +- * +- * RPCBPROC_GETADDRLIST(rpcb) returns (rpcb_entry_list_ptr). +- * Same as RPCBPROC_GETADDR except that it returns a list of all the +- * addresses registered for the combination (prog, vers) (for all +- * transports). +- * +- * RPCBPROC_GETSTAT(void) returns (rpcb_stat_byvers) +- * Returns the statistics about the kind of requests received by rpcbind. +- */ +- +-/* +- * A mapping of (program, version, network ID) to address +- */ +- +-struct rpcb { +- rpcprog_t r_prog; +- rpcvers_t r_vers; +- char *r_netid; +- char *r_addr; +- char *r_owner; +-}; +-typedef struct rpcb rpcb; +-#ifdef __cplusplus +-extern "C" bool_t xdr_rpcb(XDR *, rpcb*); +-#elif __STDC__ +-extern bool_t xdr_rpcb(XDR *, rpcb*); +-#else /* Old Style C */ +-bool_t xdr_rpcb(); +-#endif /* Old Style C */ +- +- +-typedef rpcb RPCB; +- +- +-/* +- * A list of mappings +- * +- * Below are two definitions for the rpcblist structure. This is done because +- * xdr_rpcblist() is specified to take a struct rpcblist **, rather than a +- * struct rpcblist * that rpcgen would produce. One version of the rpcblist +- * structure (actually called rp__list) is used with rpcgen, and the other is +- * defined only in the header file for compatibility with the specified +- * interface. +- */ +- +-struct rp__list { +- rpcb rpcb_map; +- struct rp__list *rpcb_next; +-}; +-typedef struct rp__list rp__list; +-#ifdef __cplusplus +-extern "C" bool_t xdr_rp__list(XDR *, rp__list*); +-#elif __STDC__ +-extern bool_t xdr_rp__list(XDR *, rp__list*); +-#else /* Old Style C */ +-bool_t xdr_rp__list(); +-#endif /* Old Style C */ +- +- +-typedef rp__list *rpcblist_ptr; +-#ifdef __cplusplus +-extern "C" bool_t xdr_rpcblist_ptr(XDR *, rpcblist_ptr*); +-#elif __STDC__ +-extern bool_t xdr_rpcblist_ptr(XDR *, rpcblist_ptr*); +-#else /* Old Style C */ +-bool_t xdr_rpcblist_ptr(); +-#endif /* Old Style C */ +- +- +-typedef struct rp__list rpcblist; +-typedef struct rp__list RPCBLIST; +- +-#ifndef __cplusplus +-struct rpcblist { +- RPCB rpcb_map; +- struct rpcblist *rpcb_next; +-}; +-#endif +- +-#ifdef __cplusplus +-extern "C" { +-#endif +-extern bool_t xdr_rpcblist(XDR *, rpcblist**); +-#ifdef __cplusplus +-} +-#endif +- +- +-/* +- * Arguments of remote calls +- */ +- +-struct rpcb_rmtcallargs { +- rpcprog_t prog; +- rpcvers_t vers; +- rpcproc_t proc; +- struct { +- u_int args_len; +- char *args_val; +- } args; +-}; +-typedef struct rpcb_rmtcallargs rpcb_rmtcallargs; +-#ifdef __cplusplus +-extern "C" bool_t xdr_rpcb_rmtcallargs(XDR *, rpcb_rmtcallargs*); +-#elif __STDC__ +-extern bool_t xdr_rpcb_rmtcallargs(XDR *, rpcb_rmtcallargs*); +-#else /* Old Style C */ +-bool_t xdr_rpcb_rmtcallargs(); +-#endif /* Old Style C */ +- +- +-/* +- * Client-side only representation of rpcb_rmtcallargs structure. +- * +- * The routine that XDRs the rpcb_rmtcallargs structure must deal with the +- * opaque arguments in the "args" structure. xdr_rpcb_rmtcallargs() needs to +- * be passed the XDR routine that knows the args' structure. This routine +- * doesn't need to go over-the-wire (and it wouldn't make sense anyway) since +- * the application being called already knows the args structure. So we use a +- * different "XDR" structure on the client side, r_rpcb_rmtcallargs, which +- * includes the args' XDR routine. +- */ +-struct r_rpcb_rmtcallargs { +- rpcprog_t prog; +- rpcvers_t vers; +- rpcproc_t proc; +- struct { +- u_int args_len; +- char *args_val; +- } args; +- xdrproc_t xdr_args; /* encodes args */ +-}; +- +- +-/* +- * Results of the remote call +- */ +- +-struct rpcb_rmtcallres { +- char *addr; +- struct { +- u_int results_len; +- char *results_val; +- } results; +-}; +-typedef struct rpcb_rmtcallres rpcb_rmtcallres; +-#ifdef __cplusplus +-extern "C" bool_t xdr_rpcb_rmtcallres(XDR *, rpcb_rmtcallres*); +-#elif __STDC__ +-extern bool_t xdr_rpcb_rmtcallres(XDR *, rpcb_rmtcallres*); +-#else /* Old Style C */ +-bool_t xdr_rpcb_rmtcallres(); +-#endif /* Old Style C */ +- +- +-/* +- * Client-side only representation of rpcb_rmtcallres structure. +- */ +-struct r_rpcb_rmtcallres { +- char *addr; +- struct { +- u_int32_t results_len; +- char *results_val; +- } results; +- xdrproc_t xdr_res; /* decodes results */ +-}; +- +-/* +- * rpcb_entry contains a merged address of a service on a particular +- * transport, plus associated netconfig information. A list of rpcb_entrys +- * is returned by RPCBPROC_GETADDRLIST. See netconfig.h for values used +- * in r_nc_* fields. +- */ +- +-struct rpcb_entry { +- char *r_maddr; +- char *r_nc_netid; +- u_int r_nc_semantics; +- char *r_nc_protofmly; +- char *r_nc_proto; +-}; +-typedef struct rpcb_entry rpcb_entry; +-#ifdef __cplusplus +-extern "C" bool_t xdr_rpcb_entry(XDR *, rpcb_entry*); +-#elif __STDC__ +-extern bool_t xdr_rpcb_entry(XDR *, rpcb_entry*); +-#else /* Old Style C */ +-bool_t xdr_rpcb_entry(); +-#endif /* Old Style C */ +- +- +-/* +- * A list of addresses supported by a service. +- */ +- +-struct rpcb_entry_list { +- rpcb_entry rpcb_entry_map; +- struct rpcb_entry_list *rpcb_entry_next; +-}; +-typedef struct rpcb_entry_list rpcb_entry_list; +-#ifdef __cplusplus +-extern "C" bool_t xdr_rpcb_entry_list(XDR *, rpcb_entry_list*); +-#elif __STDC__ +-extern bool_t xdr_rpcb_entry_list(XDR *, rpcb_entry_list*); +-#else /* Old Style C */ +-bool_t xdr_rpcb_entry_list(); +-#endif /* Old Style C */ +- +- +-typedef rpcb_entry_list *rpcb_entry_list_ptr; +-#ifdef __cplusplus +-extern "C" bool_t xdr_rpcb_entry_list_ptr(XDR *, rpcb_entry_list_ptr*); +-#elif __STDC__ +-extern bool_t xdr_rpcb_entry_list_ptr(XDR *, rpcb_entry_list_ptr*); +-#else /* Old Style C */ +-bool_t xdr_rpcb_entry_list_ptr(); +-#endif /* Old Style C */ +- +- +-/* +- * rpcbind statistics +- */ +- +-#define rpcb_highproc_2 RPCBPROC_CALLIT +-#define rpcb_highproc_3 RPCBPROC_TADDR2UADDR +-#define rpcb_highproc_4 RPCBPROC_GETSTAT +-#define RPCBSTAT_HIGHPROC 13 +-#define RPCBVERS_STAT 3 +-#define RPCBVERS_4_STAT 2 +-#define RPCBVERS_3_STAT 1 +-#define RPCBVERS_2_STAT 0 +- +-/* Link list of all the stats about getport and getaddr */ +- +-struct rpcbs_addrlist { +- rpcprog_t prog; +- rpcvers_t vers; +- int success; +- int failure; +- char *netid; +- struct rpcbs_addrlist *next; +-}; +-typedef struct rpcbs_addrlist rpcbs_addrlist; +-#ifdef __cplusplus +-extern "C" bool_t xdr_rpcbs_addrlist(XDR *, rpcbs_addrlist*); +-#elif __STDC__ +-extern bool_t xdr_rpcbs_addrlist(XDR *, rpcbs_addrlist*); +-#else /* Old Style C */ +-bool_t xdr_rpcbs_addrlist(); +-#endif /* Old Style C */ +- +- +-/* Link list of all the stats about rmtcall */ +- +-struct rpcbs_rmtcalllist { +- rpcprog_t prog; +- rpcvers_t vers; +- rpcproc_t proc; +- int success; +- int failure; +- int indirect; +- char *netid; +- struct rpcbs_rmtcalllist *next; +-}; +-typedef struct rpcbs_rmtcalllist rpcbs_rmtcalllist; +-#ifdef __cplusplus +-extern "C" bool_t xdr_rpcbs_rmtcalllist(XDR *, rpcbs_rmtcalllist*); +-#elif __STDC__ +-extern bool_t xdr_rpcbs_rmtcalllist(XDR *, rpcbs_rmtcalllist*); +-#else /* Old Style C */ +-bool_t xdr_rpcbs_rmtcalllist(); +-#endif /* Old Style C */ +- +- +-typedef int rpcbs_proc[RPCBSTAT_HIGHPROC]; +-#ifdef __cplusplus +-extern "C" bool_t xdr_rpcbs_proc(XDR *, rpcbs_proc); +-#elif __STDC__ +-extern bool_t xdr_rpcbs_proc(XDR *, rpcbs_proc); +-#else /* Old Style C */ +-bool_t xdr_rpcbs_proc(); +-#endif /* Old Style C */ +- +- +-typedef rpcbs_addrlist *rpcbs_addrlist_ptr; +-#ifdef __cplusplus +-extern "C" bool_t xdr_rpcbs_addrlist_ptr(XDR *, rpcbs_addrlist_ptr*); +-#elif __STDC__ +-extern bool_t xdr_rpcbs_addrlist_ptr(XDR *, rpcbs_addrlist_ptr*); +-#else /* Old Style C */ +-bool_t xdr_rpcbs_addrlist_ptr(); +-#endif /* Old Style C */ +- +- +-typedef rpcbs_rmtcalllist *rpcbs_rmtcalllist_ptr; +-#ifdef __cplusplus +-extern "C" bool_t xdr_rpcbs_rmtcalllist_ptr(XDR *, rpcbs_rmtcalllist_ptr*); +-#elif __STDC__ +-extern bool_t xdr_rpcbs_rmtcalllist_ptr(XDR *, rpcbs_rmtcalllist_ptr*); +-#else /* Old Style C */ +-bool_t xdr_rpcbs_rmtcalllist_ptr(); +-#endif /* Old Style C */ +- +- +-struct rpcb_stat { +- rpcbs_proc info; +- int setinfo; +- int unsetinfo; +- rpcbs_addrlist_ptr addrinfo; +- rpcbs_rmtcalllist_ptr rmtinfo; +-}; +-typedef struct rpcb_stat rpcb_stat; +-#ifdef __cplusplus +-extern "C" bool_t xdr_rpcb_stat(XDR *, rpcb_stat*); +-#elif __STDC__ +-extern bool_t xdr_rpcb_stat(XDR *, rpcb_stat*); +-#else /* Old Style C */ +-bool_t xdr_rpcb_stat(); +-#endif /* Old Style C */ +- +- +-/* +- * One rpcb_stat structure is returned for each version of rpcbind +- * being monitored. +- */ +- +-typedef rpcb_stat rpcb_stat_byvers[RPCBVERS_STAT]; +-#ifdef __cplusplus +-extern "C" bool_t xdr_rpcb_stat_byvers(XDR *, rpcb_stat_byvers); +-#elif __STDC__ +-extern bool_t xdr_rpcb_stat_byvers(XDR *, rpcb_stat_byvers); +-#else /* Old Style C */ +-bool_t xdr_rpcb_stat_byvers(); +-#endif /* Old Style C */ +- +- +-/* +- * We don't define netbuf in RPCL, since it would contain structure member +- * names that would conflict with the definition of struct netbuf in +- * . Instead we merely declare the XDR routine xdr_netbuf() here, +- * and implement it ourselves in rpc/rpcb_prot.c. +- */ +-#ifdef __cplusplus +-extern "C" bool_t xdr_netbuf(XDR *, struct netbuf *); +- +-#else /* __STDC__ */ +-extern bool_t xdr_netbuf(XDR *, struct netbuf *); +- +-#endif +- +-#define RPCBVERS_3 RPCBVERS +-#define RPCBVERS_4 RPCBVERS4 +- +-#define _PATH_RPCBINDSOCK "/var/run/rpcbind.sock" +- +-#else /* ndef _KERNEL */ +-#ifdef __cplusplus +-extern "C" { +-#endif +- +-/* +- * A mapping of (program, version, network ID) to address +- */ +-struct rpcb { +- rpcprog_t r_prog; /* program number */ +- rpcvers_t r_vers; /* version number */ +- char *r_netid; /* network id */ +- char *r_addr; /* universal address */ +- char *r_owner; /* owner of the mapping */ +-}; +-typedef struct rpcb RPCB; +- +-/* +- * A list of mappings +- */ +-struct rpcblist { +- RPCB rpcb_map; +- struct rpcblist *rpcb_next; +-}; +-typedef struct rpcblist RPCBLIST; +-typedef struct rpcblist *rpcblist_ptr; +- +-/* +- * Remote calls arguments +- */ +-struct rpcb_rmtcallargs { +- rpcprog_t prog; /* program number */ +- rpcvers_t vers; /* version number */ +- rpcproc_t proc; /* procedure number */ +- u_int32_t arglen; /* arg len */ +- caddr_t args_ptr; /* argument */ +- xdrproc_t xdr_args; /* XDR routine for argument */ +-}; +-typedef struct rpcb_rmtcallargs rpcb_rmtcallargs; +- +-/* +- * Remote calls results +- */ +-struct rpcb_rmtcallres { +- char *addr_ptr; /* remote universal address */ +- u_int32_t resultslen; /* results length */ +- caddr_t results_ptr; /* results */ +- xdrproc_t xdr_results; /* XDR routine for result */ +-}; +-typedef struct rpcb_rmtcallres rpcb_rmtcallres; +- +-struct rpcb_entry { +- char *r_maddr; +- char *r_nc_netid; +- unsigned int r_nc_semantics; +- char *r_nc_protofmly; +- char *r_nc_proto; +-}; +-typedef struct rpcb_entry rpcb_entry; +- +-/* +- * A list of addresses supported by a service. +- */ +- +-struct rpcb_entry_list { +- rpcb_entry rpcb_entry_map; +- struct rpcb_entry_list *rpcb_entry_next; +-}; +-typedef struct rpcb_entry_list rpcb_entry_list; +- +-typedef rpcb_entry_list *rpcb_entry_list_ptr; +- +-/* +- * rpcbind statistics +- */ +- +-#define rpcb_highproc_2 RPCBPROC_CALLIT +-#define rpcb_highproc_3 RPCBPROC_TADDR2UADDR +-#define rpcb_highproc_4 RPCBPROC_GETSTAT +-#define RPCBSTAT_HIGHPROC 13 +-#define RPCBVERS_STAT 3 +-#define RPCBVERS_4_STAT 2 +-#define RPCBVERS_3_STAT 1 +-#define RPCBVERS_2_STAT 0 +- +-/* Link list of all the stats about getport and getaddr */ +- +-struct rpcbs_addrlist { +- rpcprog_t prog; +- rpcvers_t vers; +- int success; +- int failure; +- char *netid; +- struct rpcbs_addrlist *next; +-}; +-typedef struct rpcbs_addrlist rpcbs_addrlist; +- +-/* Link list of all the stats about rmtcall */ +- +-struct rpcbs_rmtcalllist { +- rpcprog_t prog; +- rpcvers_t vers; +- rpcproc_t proc; +- int success; +- int failure; +- int indirect; +- char *netid; +- struct rpcbs_rmtcalllist *next; +-}; +-typedef struct rpcbs_rmtcalllist rpcbs_rmtcalllist; +- +-typedef int rpcbs_proc[RPCBSTAT_HIGHPROC]; +- +-typedef rpcbs_addrlist *rpcbs_addrlist_ptr; +- +-typedef rpcbs_rmtcalllist *rpcbs_rmtcalllist_ptr; +- +-struct rpcb_stat { +- rpcbs_proc info; +- int setinfo; +- int unsetinfo; +- rpcbs_addrlist_ptr addrinfo; +- rpcbs_rmtcalllist_ptr rmtinfo; +-}; +-typedef struct rpcb_stat rpcb_stat; +- +-/* +- * One rpcb_stat structure is returned for each version of rpcbind +- * being monitored. +- */ +- +-typedef rpcb_stat rpcb_stat_byvers[RPCBVERS_STAT]; +- +-#ifdef __cplusplus +-} +-#endif +- +-#endif /* ndef _KERNEL */ +- +-#define RPCBPROG ((u_int32_t)100000) +-#define RPCBVERS ((u_int32_t)3) +- +-#ifdef __cplusplus +-#define RPCBPROC_SET ((u_int32_t)1) +-extern "C" bool_t * rpcbproc_set_3(rpcb *, CLIENT *); +-extern "C" bool_t * rpcbproc_set_3_svc(rpcb *, struct svc_req *); +-#define RPCBPROC_UNSET ((u_int32_t)2) +-extern "C" bool_t * rpcbproc_unset_3(rpcb *, CLIENT *); +-extern "C" bool_t * rpcbproc_unset_3_svc(rpcb *, struct svc_req *); +-#define RPCBPROC_GETADDR ((u_int32_t)3) +-extern "C" char ** rpcbproc_getaddr_3(rpcb *, CLIENT *); +-extern "C" char ** rpcbproc_getaddr_3_svc(rpcb *, struct svc_req *); +-#define RPCBPROC_DUMP ((u_int32_t)4) +-extern "C" rpcblist_ptr * rpcbproc_dump_3(void *, CLIENT *); +-extern "C" rpcblist_ptr * rpcbproc_dump_3_svc(void *, struct svc_req *); +-#define RPCBPROC_CALLIT ((u_int32_t)5) +-extern "C" rpcb_rmtcallres * rpcbproc_callit_3(rpcb_rmtcallargs *, CLIENT *); +-extern "C" rpcb_rmtcallres * rpcbproc_callit_3_svc(rpcb_rmtcallargs *, struct svc_req *); +-#define RPCBPROC_GETTIME ((u_int32_t)6) +-extern "C" u_int * rpcbproc_gettime_3(void *, CLIENT *); +-extern "C" u_int * rpcbproc_gettime_3_svc(void *, struct svc_req *); +-#define RPCBPROC_UADDR2TADDR ((u_int32_t)7) +-extern "C" struct netbuf * rpcbproc_uaddr2taddr_3(char **, CLIENT *); +-extern "C" struct netbuf * rpcbproc_uaddr2taddr_3_svc(char **, struct svc_req *); +-#define RPCBPROC_TADDR2UADDR ((u_int32_t)8) +-extern "C" char ** rpcbproc_taddr2uaddr_3(struct netbuf *, CLIENT *); +-extern "C" char ** rpcbproc_taddr2uaddr_3_svc(struct netbuf *, struct svc_req *); +- +-#elif __STDC__ +-#define RPCBPROC_SET ((u_int32_t)1) +-extern bool_t * rpcbproc_set_3(rpcb *, CLIENT *); +-extern bool_t * rpcbproc_set_3_svc(rpcb *, struct svc_req *); +-#define RPCBPROC_UNSET ((u_int32_t)2) +-extern bool_t * rpcbproc_unset_3(rpcb *, CLIENT *); +-extern bool_t * rpcbproc_unset_3_svc(rpcb *, struct svc_req *); +-#define RPCBPROC_GETADDR ((u_int32_t)3) +-extern char ** rpcbproc_getaddr_3(rpcb *, CLIENT *); +-extern char ** rpcbproc_getaddr_3_svc(rpcb *, struct svc_req *); +-#define RPCBPROC_DUMP ((u_int32_t)4) +-extern rpcblist_ptr * rpcbproc_dump_3(void *, CLIENT *); +-extern rpcblist_ptr * rpcbproc_dump_3_svc(void *, struct svc_req *); +-#define RPCBPROC_CALLIT ((u_int32_t)5) +-extern rpcb_rmtcallres * rpcbproc_callit_3(rpcb_rmtcallargs *, CLIENT *); +-extern rpcb_rmtcallres * rpcbproc_callit_3_svc(rpcb_rmtcallargs *, struct svc_req *); +-#define RPCBPROC_GETTIME ((u_int32_t)6) +-extern u_int * rpcbproc_gettime_3(void *, CLIENT *); +-extern u_int * rpcbproc_gettime_3_svc(void *, struct svc_req *); +-#define RPCBPROC_UADDR2TADDR ((u_int32_t)7) +-extern struct netbuf * rpcbproc_uaddr2taddr_3(char **, CLIENT *); +-extern struct netbuf * rpcbproc_uaddr2taddr_3_svc(char **, struct svc_req *); +-#define RPCBPROC_TADDR2UADDR ((u_int32_t)8) +-extern char ** rpcbproc_taddr2uaddr_3(struct netbuf *, CLIENT *); +-extern char ** rpcbproc_taddr2uaddr_3_svc(struct netbuf *, struct svc_req *); +- +-#else /* Old Style C */ +-#define RPCBPROC_SET ((u_int32_t)1) +-extern bool_t * rpcbproc_set_3(); +-extern bool_t * rpcbproc_set_3_svc(); +-#define RPCBPROC_UNSET ((u_int32_t)2) +-extern bool_t * rpcbproc_unset_3(); +-extern bool_t * rpcbproc_unset_3_svc(); +-#define RPCBPROC_GETADDR ((u_int32_t)3) +-extern char ** rpcbproc_getaddr_3(); +-extern char ** rpcbproc_getaddr_3_svc(); +-#define RPCBPROC_DUMP ((u_int32_t)4) +-extern rpcblist_ptr * rpcbproc_dump_3(); +-extern rpcblist_ptr * rpcbproc_dump_3_svc(); +-#define RPCBPROC_CALLIT ((u_int32_t)5) +-extern rpcb_rmtcallres * rpcbproc_callit_3(); +-extern rpcb_rmtcallres * rpcbproc_callit_3_svc(); +-#define RPCBPROC_GETTIME ((u_int32_t)6) +-extern u_int * rpcbproc_gettime_3(); +-extern u_int * rpcbproc_gettime_3_svc(); +-#define RPCBPROC_UADDR2TADDR ((u_int32_t)7) +-extern struct netbuf * rpcbproc_uaddr2taddr_3(); +-extern struct netbuf * rpcbproc_uaddr2taddr_3_svc(); +-#define RPCBPROC_TADDR2UADDR ((u_int32_t)8) +-extern char ** rpcbproc_taddr2uaddr_3(); +-extern char ** rpcbproc_taddr2uaddr_3_svc(); +-#endif /* Old Style C */ +-#define RPCBVERS4 ((u_int32_t)4) +- +-#ifdef __cplusplus +-extern "C" bool_t * rpcbproc_set_4(rpcb *, CLIENT *); +-extern "C" bool_t * rpcbproc_set_4_svc(rpcb *, struct svc_req *); +-extern "C" bool_t * rpcbproc_unset_4(rpcb *, CLIENT *); +-extern "C" bool_t * rpcbproc_unset_4_svc(rpcb *, struct svc_req *); +-extern "C" char ** rpcbproc_getaddr_4(rpcb *, CLIENT *); +-extern "C" char ** rpcbproc_getaddr_4_svc(rpcb *, struct svc_req *); +-extern "C" rpcblist_ptr * rpcbproc_dump_4(void *, CLIENT *); +-extern "C" rpcblist_ptr * rpcbproc_dump_4_svc(void *, struct svc_req *); +-#define RPCBPROC_BCAST ((u_int32_t)RPCBPROC_CALLIT) +-extern "C" rpcb_rmtcallres * rpcbproc_bcast_4(rpcb_rmtcallargs *, CLIENT *); +-extern "C" rpcb_rmtcallres * rpcbproc_bcast_4_svc(rpcb_rmtcallargs *, struct svc_req *); +-extern "C" u_int * rpcbproc_gettime_4(void *, CLIENT *); +-extern "C" u_int * rpcbproc_gettime_4_svc(void *, struct svc_req *); +-extern "C" struct netbuf * rpcbproc_uaddr2taddr_4(char **, CLIENT *); +-extern "C" struct netbuf * rpcbproc_uaddr2taddr_4_svc(char **, struct svc_req *); +-extern "C" char ** rpcbproc_taddr2uaddr_4(struct netbuf *, CLIENT *); +-extern "C" char ** rpcbproc_taddr2uaddr_4_svc(struct netbuf *, struct svc_req *); +-#define RPCBPROC_GETVERSADDR ((u_int32_t)9) +-extern "C" char ** rpcbproc_getversaddr_4(rpcb *, CLIENT *); +-extern "C" char ** rpcbproc_getversaddr_4_svc(rpcb *, struct svc_req *); +-#define RPCBPROC_INDIRECT ((u_int32_t)10) +-extern "C" rpcb_rmtcallres * rpcbproc_indirect_4(rpcb_rmtcallargs *, CLIENT *); +-extern "C" rpcb_rmtcallres * rpcbproc_indirect_4_svc(rpcb_rmtcallargs *, struct svc_req *); +-#define RPCBPROC_GETADDRLIST ((u_int32_t)11) +-extern "C" rpcb_entry_list_ptr * rpcbproc_getaddrlist_4(rpcb *, CLIENT *); +-extern "C" rpcb_entry_list_ptr * rpcbproc_getaddrlist_4_svc(rpcb *, struct svc_req *); +-#define RPCBPROC_GETSTAT ((u_int32_t)12) +-extern "C" rpcb_stat * rpcbproc_getstat_4(void *, CLIENT *); +-extern "C" rpcb_stat * rpcbproc_getstat_4_svc(void *, struct svc_req *); +- +-#elif __STDC__ +-extern bool_t * rpcbproc_set_4(rpcb *, CLIENT *); +-extern bool_t * rpcbproc_set_4_svc(rpcb *, struct svc_req *); +-extern bool_t * rpcbproc_unset_4(rpcb *, CLIENT *); +-extern bool_t * rpcbproc_unset_4_svc(rpcb *, struct svc_req *); +-extern char ** rpcbproc_getaddr_4(rpcb *, CLIENT *); +-extern char ** rpcbproc_getaddr_4_svc(rpcb *, struct svc_req *); +-extern rpcblist_ptr * rpcbproc_dump_4(void *, CLIENT *); +-extern rpcblist_ptr * rpcbproc_dump_4_svc(void *, struct svc_req *); +-#define RPCBPROC_BCAST ((u_int32_t)RPCBPROC_CALLIT) +-extern rpcb_rmtcallres * rpcbproc_bcast_4(rpcb_rmtcallargs *, CLIENT *); +-extern rpcb_rmtcallres * rpcbproc_bcast_4_svc(rpcb_rmtcallargs *, struct svc_req *); +-extern u_int * rpcbproc_gettime_4(void *, CLIENT *); +-extern u_int * rpcbproc_gettime_4_svc(void *, struct svc_req *); +-extern struct netbuf * rpcbproc_uaddr2taddr_4(char **, CLIENT *); +-extern struct netbuf * rpcbproc_uaddr2taddr_4_svc(char **, struct svc_req *); +-extern char ** rpcbproc_taddr2uaddr_4(struct netbuf *, CLIENT *); +-extern char ** rpcbproc_taddr2uaddr_4_svc(struct netbuf *, struct svc_req *); +-#define RPCBPROC_GETVERSADDR ((u_int32_t)9) +-extern char ** rpcbproc_getversaddr_4(rpcb *, CLIENT *); +-extern char ** rpcbproc_getversaddr_4_svc(rpcb *, struct svc_req *); +-#define RPCBPROC_INDIRECT ((u_int32_t)10) +-extern rpcb_rmtcallres * rpcbproc_indirect_4(rpcb_rmtcallargs *, CLIENT *); +-extern rpcb_rmtcallres * rpcbproc_indirect_4_svc(rpcb_rmtcallargs *, struct svc_req *); +-#define RPCBPROC_GETADDRLIST ((u_int32_t)11) +-extern rpcb_entry_list_ptr * rpcbproc_getaddrlist_4(rpcb *, CLIENT *); +-extern rpcb_entry_list_ptr * rpcbproc_getaddrlist_4_svc(rpcb *, struct svc_req *); +-#define RPCBPROC_GETSTAT ((u_int32_t)12) +-extern rpcb_stat * rpcbproc_getstat_4(void *, CLIENT *); +-extern rpcb_stat * rpcbproc_getstat_4_svc(void *, struct svc_req *); +- +-#else /* Old Style C */ +-extern bool_t * rpcbproc_set_4(); +-extern bool_t * rpcbproc_set_4_svc(); +-extern bool_t * rpcbproc_unset_4(); +-extern bool_t * rpcbproc_unset_4_svc(); +-extern char ** rpcbproc_getaddr_4(); +-extern char ** rpcbproc_getaddr_4_svc(); +-extern rpcblist_ptr * rpcbproc_dump_4(); +-extern rpcblist_ptr * rpcbproc_dump_4_svc(); +-#define RPCBPROC_BCAST ((u_int32_t)RPCBPROC_CALLIT) +-extern rpcb_rmtcallres * rpcbproc_bcast_4(); +-extern rpcb_rmtcallres * rpcbproc_bcast_4_svc(); +-extern u_int * rpcbproc_gettime_4(); +-extern u_int * rpcbproc_gettime_4_svc(); +-extern struct netbuf * rpcbproc_uaddr2taddr_4(); +-extern struct netbuf * rpcbproc_uaddr2taddr_4_svc(); +-extern char ** rpcbproc_taddr2uaddr_4(); +-extern char ** rpcbproc_taddr2uaddr_4_svc(); +-#define RPCBPROC_GETVERSADDR ((u_int32_t)9) +-extern char ** rpcbproc_getversaddr_4(); +-extern char ** rpcbproc_getversaddr_4_svc(); +-#define RPCBPROC_INDIRECT ((u_int32_t)10) +-extern rpcb_rmtcallres * rpcbproc_indirect_4(); +-extern rpcb_rmtcallres * rpcbproc_indirect_4_svc(); +-#define RPCBPROC_GETADDRLIST ((u_int32_t)11) +-extern rpcb_entry_list_ptr * rpcbproc_getaddrlist_4(); +-extern rpcb_entry_list_ptr * rpcbproc_getaddrlist_4_svc(); +-#define RPCBPROC_GETSTAT ((u_int32_t)12) +-extern rpcb_stat * rpcbproc_getstat_4(); +-extern rpcb_stat * rpcbproc_getstat_4_svc(); +-#endif /* Old Style C */ +- +-#endif /* !_RPCB_PROT_H_RPCGEN */ +diff --git a/tirpc/rpcsvc/crypt.h b/tirpc/rpcsvc/crypt.h +deleted file mode 100644 +index da1f9ccb56ea..000000000000 +--- a/tirpc/rpcsvc/crypt.h ++++ /dev/null +@@ -1,109 +0,0 @@ +-/* +- * Please do not edit this file. +- * It was generated using rpcgen. +- */ +- +-#ifndef _CRYPT_H_RPCGEN +-#define _CRYPT_H_RPCGEN +- +-#include +- +-#ifndef IXDR_GET_INT32 +-#define IXDR_GET_INT32(buf) IXDR_GET_LONG((buf)) +-#endif +-#ifndef IXDR_PUT_INT32 +-#define IXDR_PUT_INT32(buf, v) IXDR_PUT_LONG((buf), (v)) +-#endif +-#ifndef IXDR_GET_U_INT32 +-#define IXDR_GET_U_INT32(buf) IXDR_GET_U_LONG((buf)) +-#endif +-#ifndef IXDR_PUT_U_INT32 +-#define IXDR_PUT_U_INT32(buf, v) IXDR_PUT_U_LONG((buf), (v)) +-#endif +- +-enum des_dir { +- ENCRYPT_DES = 0, +- DECRYPT_DES = 1, +-}; +-typedef enum des_dir des_dir; +-#ifdef __cplusplus +-extern "C" bool_t xdr_des_dir(XDR *, des_dir*); +-#elif __STDC__ +-extern bool_t xdr_des_dir(XDR *, des_dir*); +-#else /* Old Style C */ +-bool_t xdr_des_dir(); +-#endif /* Old Style C */ +- +- +-enum des_mode { +- CBC_DES = 0, +- ECB_DES = 1, +-}; +-typedef enum des_mode des_mode; +-#ifdef __cplusplus +-extern "C" bool_t xdr_des_mode(XDR *, des_mode*); +-#elif __STDC__ +-extern bool_t xdr_des_mode(XDR *, des_mode*); +-#else /* Old Style C */ +-bool_t xdr_des_mode(); +-#endif /* Old Style C */ +- +- +-struct desargs { +- u_char des_key[8]; +- des_dir des_dir; +- des_mode des_mode; +- u_char des_ivec[8]; +- struct { +- u_int desbuf_len; +- char *desbuf_val; +- } desbuf; +-}; +-typedef struct desargs desargs; +-#ifdef __cplusplus +-extern "C" bool_t xdr_desargs(XDR *, desargs*); +-#elif __STDC__ +-extern bool_t xdr_desargs(XDR *, desargs*); +-#else /* Old Style C */ +-bool_t xdr_desargs(); +-#endif /* Old Style C */ +- +- +-struct desresp { +- struct { +- u_int desbuf_len; +- char *desbuf_val; +- } desbuf; +- u_char des_ivec[8]; +- int stat; +-}; +-typedef struct desresp desresp; +-#ifdef __cplusplus +-extern "C" bool_t xdr_desresp(XDR *, desresp*); +-#elif __STDC__ +-extern bool_t xdr_desresp(XDR *, desresp*); +-#else /* Old Style C */ +-bool_t xdr_desresp(); +-#endif /* Old Style C */ +- +- +-#define CRYPT_PROG ((u_int32_t)600100029) +-#define CRYPT_VERS ((u_int32_t)1) +- +-#ifdef __cplusplus +-#define DES_CRYPT ((u_int32_t)1) +-extern "C" desresp * des_crypt_1(desargs *, CLIENT *); +-extern "C" desresp * des_crypt_1_svc(desargs *, struct svc_req *); +- +-#elif __STDC__ +-#define DES_CRYPT ((u_int32_t)1) +-extern desresp * des_crypt_1(desargs *, CLIENT *); +-extern desresp * des_crypt_1_svc(desargs *, struct svc_req *); +- +-#else /* Old Style C */ +-#define DES_CRYPT ((u_int32_t)1) +-extern desresp * des_crypt_1(); +-extern desresp * des_crypt_1_svc(); +-#endif /* Old Style C */ +- +-#endif /* !_CRYPT_H_RPCGEN */ +-- +2.17.0 + diff --git a/package/libtirpc/0002-Add-more-XDR-files-needed-to-build-rpcbind-on-top-of.patch b/package/libtirpc/0002-Add-more-XDR-files-needed-to-build-rpcbind-on-top-of.patch new file mode 100644 index 00000000..7f53ffca --- /dev/null +++ b/package/libtirpc/0002-Add-more-XDR-files-needed-to-build-rpcbind-on-top-of.patch @@ -0,0 +1,1653 @@ +From baeca7ea594fe9faa1d40d35e76066c6002ca638 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sat, 10 Nov 2012 17:45:03 +0100 +Subject: [PATCH] Add more XDR files needed to build rpcbind on top of libtirpc + +Signed-off-by: Thomas Petazzoni +[yann.morin.1998@free.fr: update for 0.3.1] +Signed-off-by: "Yann E. MORIN" +--- + Makefile.am | 6 + + tirpc/rpcsvc/mount.x | 257 ++++++++++ + tirpc/rpcsvc/nfs_prot.x | 1266 +++++++++++++++++++++++++++++++++++++++++++++++ + tirpc/rpcsvc/rquota.x | 67 +++ + 4 files changed, 1596 insertions(+) + create mode 100644 tirpc/rpcsvc/mount.x + create mode 100644 tirpc/rpcsvc/nfs_prot.x + create mode 100644 tirpc/rpcsvc/rquota.x + +diff --git a/Makefile.am b/Makefile.am +index aa5908e..4999066 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -2,6 +2,9 @@ SUBDIRS = src man doc rpcgen + ACLOCAL_AMFLAGS = -I m4 + + GENFILES = tirpc/rpcsvc/crypt.h \ ++ tirpc/rpcsvc/mount.h \ ++ tirpc/rpcsvc/nfs_prot.h \ ++ tirpc/rpcsvc/rquota.h \ + tirpc/rpc/rpcb_prot.h + + noinst_HEADERS = tirpc/reentrant.h \ +@@ -11,6 +14,9 @@ noinst_HEADERS = tirpc/reentrant.h \ + + nobase_include_HEADERS = tirpc/netconfig.h \ + tirpc/rpcsvc/crypt.x \ ++ tirpc/rpcsvc/mount.x \ ++ tirpc/rpcsvc/nfs_prot.x \ ++ tirpc/rpcsvc/rquota.x \ + tirpc/rpc/xdr.h \ + tirpc/rpc/types.h \ + tirpc/rpc/svc_soc.h \ +diff --git a/tirpc/rpcsvc/mount.x b/tirpc/rpcsvc/mount.x +new file mode 100644 +index 0000000..f68a06f +--- /dev/null ++++ b/tirpc/rpcsvc/mount.x +@@ -0,0 +1,257 @@ ++/* ++ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for ++ * unrestricted use provided that this legend is included on all tape ++ * media and as a part of the software program in whole or part. Users ++ * may copy or modify Sun RPC without charge, but are not authorized ++ * to license or distribute it to anyone else except as part of a product or ++ * program developed by the user. ++ * ++ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE ++ * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR ++ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. ++ * ++ * Sun RPC is provided with no support and without any obligation on the ++ * part of Sun Microsystems, Inc. to assist in its use, correction, ++ * modification or enhancement. ++ * ++ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE ++ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC ++ * OR ANY PART THEREOF. ++ * ++ * In no event will Sun Microsystems, Inc. be liable for any lost revenue ++ * or profits or other special, indirect and consequential damages, even if ++ * Sun has been advised of the possibility of such damages. ++ * ++ * Sun Microsystems, Inc. ++ * 2550 Garcia Avenue ++ * Mountain View, California 94043 ++ */ ++ ++/* ++ * Protocol description for the mount program ++ */ ++ ++#ifndef RPC_HDR ++%#ifndef lint ++%/*static char sccsid[] = "from: @(#)mount.x 1.2 87/09/18 Copyr 1987 Sun Micro";*/ ++%/*static char sccsid[] = "from: @(#)mount.x 2.1 88/08/01 4.0 RPCSRC";*/ ++%static const char rcsid[] = ++% "$FreeBSD: src/include/rpcsvc/mount.x,v 1.6 1999/08/27 23:45:08 peter Exp $"; ++%#endif /* not lint */ ++#endif ++ ++const MNTPATHLEN = 1024; /* maximum bytes in a pathname argument */ ++const MNTNAMLEN = 255; /* maximum bytes in a name argument */ ++const FHSIZE = 32; /* size in bytes of a file handle */ ++#ifdef WANT_NFS3 ++const FHSIZE3 = 64; /* size in bytes of a file handle (v3) */ ++#endif ++ ++/* ++ * The fhandle is the file handle that the server passes to the client. ++ * All file operations are done using the file handles to refer to a file ++ * or a directory. The file handle can contain whatever information the ++ * server needs to distinguish an individual file. ++ */ ++typedef opaque fhandle[FHSIZE]; ++#ifdef WANT_NFS3 ++typedef opaque fhandle3; ++#endif ++ ++/* ++ * If a status of zero is returned, the call completed successfully, and ++ * a file handle for the directory follows. A non-zero status indicates ++ * some sort of error. The status corresponds with UNIX error numbers. ++ */ ++union fhstatus switch (unsigned fhs_status) { ++case 0: ++ fhandle fhs_fhandle; ++default: ++ void; ++}; ++ ++#ifdef WANT_NFS3 ++/* ++ * Status codes returned by the version 3 mount call. ++ */ ++enum mountstat3 { ++ MNT3_OK = 0, /* no error */ ++ MNT3ERR_PERM = 1, /* Not owner */ ++ MNT3ERR_NOENT = 2, /* No such file or directory */ ++ MNT3ERR_IO = 5, /* I/O error */ ++ MNT3ERR_ACCES = 13, /* Permission denied */ ++ MNT3ERR_NOTDIR = 20, /* Not a directory */ ++ MNT3ERR_INVAL = 22, /* Invalid argument */ ++ MNT3ERR_NAMETOOLONG = 63, /* Filename too long */ ++ MNT3ERR_NOTSUPP = 10004, /* Operation not supported */ ++ MNT3ERR_SERVERFAULT = 10006 /* A failure on the server */ ++}; ++ ++struct mountres3_ok { ++ fhandle3 fhandle; ++ int auth_flavors<>; ++}; ++ ++union mountres3 switch (mountstat3 fhs_status) { ++case 0: ++ mountres3_ok mountinfo; ++default: ++ void; ++}; ++#endif ++ ++/* ++ * The type dirpath is the pathname of a directory ++ */ ++typedef string dirpath; ++ ++/* ++ * The type name is used for arbitrary names (hostnames, groupnames) ++ */ ++typedef string name; ++ ++/* ++ * A list of who has what mounted ++ */ ++typedef struct mountbody *mountlist; ++struct mountbody { ++ name ml_hostname; ++ dirpath ml_directory; ++ mountlist ml_next; ++}; ++ ++/* ++ * A list of netgroups ++ */ ++typedef struct groupnode *groups; ++struct groupnode { ++ name gr_name; ++ groups gr_next; ++}; ++ ++/* ++ * A list of what is exported and to whom ++ */ ++typedef struct exportnode *exports; ++struct exportnode { ++ dirpath ex_dir; ++ groups ex_groups; ++ exports ex_next; ++}; ++ ++program MOUNTPROG { ++ /* ++ * Version one of the mount protocol communicates with version two ++ * of the NFS protocol. Version three communicates with ++ * version three of the NFS protocol. The only connecting ++ * point is the fhandle structure, which is the same for both ++ * protocols. ++ */ ++ version MOUNTVERS { ++ /* ++ * Does no work. It is made available in all RPC services ++ * to allow server reponse testing and timing ++ */ ++ void ++ MOUNTPROC_NULL(void) = 0; ++ ++ /* ++ * If fhs_status is 0, then fhs_fhandle contains the ++ * file handle for the directory. This file handle may ++ * be used in the NFS protocol. This procedure also adds ++ * a new entry to the mount list for this client mounting ++ * the directory. ++ * Unix authentication required. ++ */ ++ fhstatus ++ MOUNTPROC_MNT(dirpath) = 1; ++ ++ /* ++ * Returns the list of remotely mounted filesystems. The ++ * mountlist contains one entry for each hostname and ++ * directory pair. ++ */ ++ mountlist ++ MOUNTPROC_DUMP(void) = 2; ++ ++ /* ++ * Removes the mount list entry for the directory ++ * Unix authentication required. ++ */ ++ void ++ MOUNTPROC_UMNT(dirpath) = 3; ++ ++ /* ++ * Removes all of the mount list entries for this client ++ * Unix authentication required. ++ */ ++ void ++ MOUNTPROC_UMNTALL(void) = 4; ++ ++ /* ++ * Returns a list of all the exported filesystems, and which ++ * machines are allowed to import it. ++ */ ++ exports ++ MOUNTPROC_EXPORT(void) = 5; ++ ++ /* ++ * Identical to MOUNTPROC_EXPORT above ++ */ ++ exports ++ MOUNTPROC_EXPORTALL(void) = 6; ++ } = 1; ++#ifdef WANT_NFS3 ++ version MOUNTVERS3 { ++ /* ++ * Does no work. It is made available in all RPC services ++ * to allow server reponse testing and timing ++ */ ++ void ++ MOUNTPROC_NULL(void) = 0; ++ ++ /* ++ * If mountres3.fhs_status is MNT3_OK, then ++ * mountres3.mountinfo contains the file handle for ++ * the directory and a list of acceptable ++ * authentication flavors. This file handle may only ++ * be used in the NFS version 3 protocol. This ++ * procedure also results in the server adding a new ++ * entry to its mount list recording that this client ++ * has mounted the directory. AUTH_UNIX authentication ++ * or better is required. ++ */ ++ mountres3 ++ MOUNTPROC_MNT(dirpath) = 1; ++ ++ /* ++ * Returns the list of remotely mounted filesystems. The ++ * mountlist contains one entry for each hostname and ++ * directory pair. ++ */ ++ mountlist ++ MOUNTPROC_DUMP(void) = 2; ++ ++ /* ++ * Removes the mount list entry for the directory ++ * Unix authentication required. ++ */ ++ void ++ MOUNTPROC_UMNT(dirpath) = 3; ++ ++ /* ++ * Removes all of the mount list entries for this client ++ * Unix authentication required. ++ */ ++ void ++ MOUNTPROC_UMNTALL(void) = 4; ++ ++ /* ++ * Returns a list of all the exported filesystems, and which ++ * machines are allowed to import it. ++ */ ++ exports ++ MOUNTPROC_EXPORT(void) = 5; ++ } = 3; ++#endif ++} = 100005; +diff --git a/tirpc/rpcsvc/nfs_prot.x b/tirpc/rpcsvc/nfs_prot.x +new file mode 100644 +index 0000000..01564f8 +--- /dev/null ++++ b/tirpc/rpcsvc/nfs_prot.x +@@ -0,0 +1,1266 @@ ++/* ++ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for ++ * unrestricted use provided that this legend is included on all tape ++ * media and as a part of the software program in whole or part. Users ++ * may copy or modify Sun RPC without charge, but are not authorized ++ * to license or distribute it to anyone else except as part of a product or ++ * program developed by the user. ++ * ++ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE ++ * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR ++ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. ++ * ++ * Sun RPC is provided with no support and without any obligation on the ++ * part of Sun Microsystems, Inc. to assist in its use, correction, ++ * modification or enhancement. ++ * ++ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE ++ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC ++ * OR ANY PART THEREOF. ++ * ++ * In no event will Sun Microsystems, Inc. be liable for any lost revenue ++ * or profits or other special, indirect and consequential damages, even if ++ * Sun has been advised of the possibility of such damages. ++ * ++ * Sun Microsystems, Inc. ++ * 2550 Garcia Avenue ++ * Mountain View, California 94043 ++ */ ++ ++#ifndef RPC_HDR ++%#ifndef lint ++%/*static char sccsid[] = "from: @(#)nfs_prot.x 1.2 87/10/12 Copyr 1987 Sun Micro";*/ ++%/*static char sccsid[] = "from: @(#)nfs_prot.x 2.1 88/08/01 4.0 RPCSRC";*/ ++%static const char rcsid[] = ++% "$FreeBSD: src/include/rpcsvc/nfs_prot.x,v 1.7 1999/08/27 23:45:08 peter Exp $"; ++%#endif /* not lint */ ++#endif ++ ++const NFS_PORT = 2049; ++const NFS_MAXDATA = 8192; ++const NFS_MAXPATHLEN = 1024; ++const NFS_MAXNAMLEN = 255; ++const NFS_FHSIZE = 32; ++const NFS_COOKIESIZE = 4; ++const NFS_FIFO_DEV = -1; /* size kludge for named pipes */ ++ ++/* ++ * File types ++ */ ++const NFSMODE_FMT = 0170000; /* type of file */ ++const NFSMODE_DIR = 0040000; /* directory */ ++const NFSMODE_CHR = 0020000; /* character special */ ++const NFSMODE_BLK = 0060000; /* block special */ ++const NFSMODE_REG = 0100000; /* regular */ ++const NFSMODE_LNK = 0120000; /* symbolic link */ ++const NFSMODE_SOCK = 0140000; /* socket */ ++const NFSMODE_FIFO = 0010000; /* fifo */ ++ ++/* ++ * Error status ++ */ ++enum nfsstat { ++ NFS_OK= 0, /* no error */ ++ NFSERR_PERM=1, /* Not owner */ ++ NFSERR_NOENT=2, /* No such file or directory */ ++ NFSERR_IO=5, /* I/O error */ ++ NFSERR_NXIO=6, /* No such device or address */ ++ NFSERR_ACCES=13, /* Permission denied */ ++ NFSERR_EXIST=17, /* File exists */ ++ NFSERR_NODEV=19, /* No such device */ ++ NFSERR_NOTDIR=20, /* Not a directory*/ ++ NFSERR_ISDIR=21, /* Is a directory */ ++ NFSERR_FBIG=27, /* File too large */ ++ NFSERR_NOSPC=28, /* No space left on device */ ++ NFSERR_ROFS=30, /* Read-only file system */ ++ NFSERR_NAMETOOLONG=63, /* File name too long */ ++ NFSERR_NOTEMPTY=66, /* Directory not empty */ ++ NFSERR_DQUOT=69, /* Disc quota exceeded */ ++ NFSERR_STALE=70, /* Stale NFS file handle */ ++ NFSERR_WFLUSH=99 /* write cache flushed */ ++}; ++ ++/* ++ * File types ++ */ ++enum ftype { ++ NFNON = 0, /* non-file */ ++ NFREG = 1, /* regular file */ ++ NFDIR = 2, /* directory */ ++ NFBLK = 3, /* block special */ ++ NFCHR = 4, /* character special */ ++ NFLNK = 5, /* symbolic link */ ++ NFSOCK = 6, /* unix domain sockets */ ++ NFBAD = 7, /* unused */ ++ NFFIFO = 8 /* named pipe */ ++}; ++ ++/* ++ * File access handle ++ */ ++struct nfs_fh { ++ opaque data[NFS_FHSIZE]; ++}; ++ ++/* ++ * Timeval ++ */ ++struct nfstime { ++ unsigned seconds; ++ unsigned useconds; ++}; ++ ++ ++/* ++ * File attributes ++ */ ++struct fattr { ++ ftype type; /* file type */ ++ unsigned mode; /* protection mode bits */ ++ unsigned nlink; /* # hard links */ ++ unsigned uid; /* owner user id */ ++ unsigned gid; /* owner group id */ ++ unsigned size; /* file size in bytes */ ++ unsigned blocksize; /* prefered block size */ ++ unsigned rdev; /* special device # */ ++ unsigned blocks; /* Kb of disk used by file */ ++ unsigned fsid; /* device # */ ++ unsigned fileid; /* inode # */ ++ nfstime atime; /* time of last access */ ++ nfstime mtime; /* time of last modification */ ++ nfstime ctime; /* time of last change */ ++}; ++ ++/* ++ * File attributes which can be set ++ */ ++struct sattr { ++ unsigned mode; /* protection mode bits */ ++ unsigned uid; /* owner user id */ ++ unsigned gid; /* owner group id */ ++ unsigned size; /* file size in bytes */ ++ nfstime atime; /* time of last access */ ++ nfstime mtime; /* time of last modification */ ++}; ++ ++ ++typedef string filename; ++typedef string nfspath; ++ ++/* ++ * Reply status with file attributes ++ */ ++union attrstat switch (nfsstat status) { ++case NFS_OK: ++ fattr attributes; ++default: ++ void; ++}; ++ ++struct sattrargs { ++ nfs_fh file; ++ sattr attributes; ++}; ++ ++/* ++ * Arguments for directory operations ++ */ ++struct diropargs { ++ nfs_fh dir; /* directory file handle */ ++ filename name; /* name (up to NFS_MAXNAMLEN bytes) */ ++}; ++ ++struct diropokres { ++ nfs_fh file; ++ fattr attributes; ++}; ++ ++/* ++ * Results from directory operation ++ */ ++union diropres switch (nfsstat status) { ++case NFS_OK: ++ diropokres diropres; ++default: ++ void; ++}; ++ ++union readlinkres switch (nfsstat status) { ++case NFS_OK: ++ nfspath data; ++default: ++ void; ++}; ++ ++/* ++ * Arguments to remote read ++ */ ++struct readargs { ++ nfs_fh file; /* handle for file */ ++ unsigned offset; /* byte offset in file */ ++ unsigned count; /* immediate read count */ ++ unsigned totalcount; /* total read count (from this offset)*/ ++}; ++ ++/* ++ * Status OK portion of remote read reply ++ */ ++struct readokres { ++ fattr attributes; /* attributes, need for pagin*/ ++ opaque data; ++}; ++ ++union readres switch (nfsstat status) { ++case NFS_OK: ++ readokres reply; ++default: ++ void; ++}; ++ ++/* ++ * Arguments to remote write ++ */ ++struct writeargs { ++ nfs_fh file; /* handle for file */ ++ unsigned beginoffset; /* beginning byte offset in file */ ++ unsigned offset; /* current byte offset in file */ ++ unsigned totalcount; /* total write count (to this offset)*/ ++ opaque data; ++}; ++ ++struct createargs { ++ diropargs where; ++ sattr attributes; ++}; ++ ++struct renameargs { ++ diropargs from; ++ diropargs to; ++}; ++ ++struct linkargs { ++ nfs_fh from; ++ diropargs to; ++}; ++ ++struct symlinkargs { ++ diropargs from; ++ nfspath to; ++ sattr attributes; ++}; ++ ++ ++typedef opaque nfscookie[NFS_COOKIESIZE]; ++ ++/* ++ * Arguments to readdir ++ */ ++struct readdirargs { ++ nfs_fh dir; /* directory handle */ ++ nfscookie cookie; ++ unsigned count; /* number of directory bytes to read */ ++}; ++ ++struct entry { ++ unsigned fileid; ++ filename name; ++ nfscookie cookie; ++ entry *nextentry; ++}; ++ ++struct dirlist { ++ entry *entries; ++ bool eof; ++}; ++ ++union readdirres switch (nfsstat status) { ++case NFS_OK: ++ dirlist reply; ++default: ++ void; ++}; ++ ++struct statfsokres { ++ unsigned tsize; /* preferred transfer size in bytes */ ++ unsigned bsize; /* fundamental file system block size */ ++ unsigned blocks; /* total blocks in file system */ ++ unsigned bfree; /* free blocks in fs */ ++ unsigned bavail; /* free blocks avail to non-superuser */ ++}; ++ ++union statfsres switch (nfsstat status) { ++case NFS_OK: ++ statfsokres reply; ++default: ++ void; ++}; ++ ++#ifdef WANT_NFS3 ++ ++/* ++ * NFSv3 constants and types ++ */ ++const NFS3_FHSIZE = 64; /* maximum size in bytes of a file handle */ ++const NFS3_COOKIEVERFSIZE = 8; /* size of a cookie verifier for READDIR */ ++const NFS3_CREATEVERFSIZE = 8; /* size of the verifier used for CREATE */ ++const NFS3_WRITEVERFSIZE = 8; /* size of the verifier used for WRITE */ ++ ++typedef unsigned hyper uint64; ++typedef hyper int64; ++typedef unsigned long uint32; ++typedef long int32; ++typedef string filename3<>; ++typedef string nfspath3<>; ++typedef uint64 fileid3; ++typedef uint64 cookie3; ++typedef opaque cookieverf3[NFS3_COOKIEVERFSIZE]; ++typedef opaque createverf3[NFS3_CREATEVERFSIZE]; ++typedef opaque writeverf3[NFS3_WRITEVERFSIZE]; ++typedef uint32 uid3; ++typedef uint32 gid3; ++typedef uint64 size3; ++typedef uint64 offset3; ++typedef uint32 mode3; ++typedef uint32 count3; ++ ++/* ++ * Error status (v3) ++ */ ++enum nfsstat3 { ++ NFS3_OK = 0, ++ NFS3ERR_PERM = 1, ++ NFS3ERR_NOENT = 2, ++ NFS3ERR_IO = 5, ++ NFS3ERR_NXIO = 6, ++ NFS3ERR_ACCES = 13, ++ NFS3ERR_EXIST = 17, ++ NFS3ERR_XDEV = 18, ++ NFS3ERR_NODEV = 19, ++ NFS3ERR_NOTDIR = 20, ++ NFS3ERR_ISDIR = 21, ++ NFS3ERR_INVAL = 22, ++ NFS3ERR_FBIG = 27, ++ NFS3ERR_NOSPC = 28, ++ NFS3ERR_ROFS = 30, ++ NFS3ERR_MLINK = 31, ++ NFS3ERR_NAMETOOLONG = 63, ++ NFS3ERR_NOTEMPTY = 66, ++ NFS3ERR_DQUOT = 69, ++ NFS3ERR_STALE = 70, ++ NFS3ERR_REMOTE = 71, ++ NFS3ERR_BADHANDLE = 10001, ++ NFS3ERR_NOT_SYNC = 10002, ++ NFS3ERR_BAD_COOKIE = 10003, ++ NFS3ERR_NOTSUPP = 10004, ++ NFS3ERR_TOOSMALL = 10005, ++ NFS3ERR_SERVERFAULT = 10006, ++ NFS3ERR_BADTYPE = 10007, ++ NFS3ERR_JUKEBOX = 10008 ++}; ++ ++/* ++ * File types (v3) ++ */ ++enum ftype3 { ++ NF3REG = 1, /* regular file */ ++ NF3DIR = 2, /* directory */ ++ NF3BLK = 3, /* block special */ ++ NF3CHR = 4, /* character special */ ++ NF3LNK = 5, /* symbolic link */ ++ NF3SOCK = 6, /* unix domain sockets */ ++ NF3FIFO = 7 /* named pipe */ ++}; ++ ++struct specdata3 { ++ uint32 specdata1; ++ uint32 specdata2; ++}; ++ ++/* ++ * File access handle (v3) ++ */ ++struct nfs_fh3 { ++ opaque data; ++}; ++ ++/* ++ * Timeval (v3) ++ */ ++struct nfstime3 { ++ uint32 seconds; ++ uint32 nseconds; ++}; ++ ++ ++/* ++ * File attributes (v3) ++ */ ++struct fattr3 { ++ ftype3 type; /* file type */ ++ mode3 mode; /* protection mode bits */ ++ uint32 nlink; /* # hard links */ ++ uid3 uid; /* owner user id */ ++ gid3 gid; /* owner group id */ ++ size3 size; /* file size in bytes */ ++ size3 used; /* prefered block size */ ++ specdata3 rdev; /* special device # */ ++ uint64 fsid; /* device # */ ++ fileid3 fileid; /* inode # */ ++ nfstime3 atime; /* time of last access */ ++ nfstime3 mtime; /* time of last modification */ ++ nfstime3 ctime; /* time of last change */ ++}; ++ ++union post_op_attr switch (bool attributes_follow) { ++case TRUE: ++ fattr3 attributes; ++case FALSE: ++ void; ++}; ++ ++struct wcc_attr { ++ size3 size; ++ nfstime3 mtime; ++ nfstime3 ctime; ++}; ++ ++union pre_op_attr switch (bool attributes_follow) { ++case TRUE: ++ wcc_attr attributes; ++case FALSE: ++ void; ++}; ++ ++struct wcc_data { ++ pre_op_attr before; ++ post_op_attr after; ++}; ++ ++union post_op_fh3 switch (bool handle_follows) { ++case TRUE: ++ nfs_fh3 handle; ++case FALSE: ++ void; ++}; ++ ++/* ++ * File attributes which can be set (v3) ++ */ ++enum time_how { ++ DONT_CHANGE = 0, ++ SET_TO_SERVER_TIME = 1, ++ SET_TO_CLIENT_TIME = 2 ++}; ++ ++union set_mode3 switch (bool set_it) { ++case TRUE: ++ mode3 mode; ++default: ++ void; ++}; ++ ++union set_uid3 switch (bool set_it) { ++case TRUE: ++ uid3 uid; ++default: ++ void; ++}; ++ ++union set_gid3 switch (bool set_it) { ++case TRUE: ++ gid3 gid; ++default: ++ void; ++}; ++ ++union set_size3 switch (bool set_it) { ++case TRUE: ++ size3 size; ++default: ++ void; ++}; ++ ++union set_atime switch (time_how set_it) { ++case SET_TO_CLIENT_TIME: ++ nfstime3 atime; ++default: ++ void; ++}; ++ ++union set_mtime switch (time_how set_it) { ++case SET_TO_CLIENT_TIME: ++ nfstime3 mtime; ++default: ++ void; ++}; ++ ++struct sattr3 { ++ set_mode3 mode; ++ set_uid3 uid; ++ set_gid3 gid; ++ set_size3 size; ++ set_atime atime; ++ set_mtime mtime; ++}; ++ ++/* ++ * Arguments for directory operations (v3) ++ */ ++struct diropargs3 { ++ nfs_fh3 dir; /* directory file handle */ ++ filename3 name; /* name (up to NFS_MAXNAMLEN bytes) */ ++}; ++ ++/* ++ * Arguments to getattr (v3). ++ */ ++struct GETATTR3args { ++ nfs_fh3 object; ++}; ++ ++struct GETATTR3resok { ++ fattr3 obj_attributes; ++}; ++ ++union GETATTR3res switch (nfsstat3 status) { ++case NFS3_OK: ++ GETATTR3resok resok; ++default: ++ void; ++}; ++ ++/* ++ * Arguments to setattr (v3). ++ */ ++union sattrguard3 switch (bool check) { ++case TRUE: ++ nfstime3 obj_ctime; ++case FALSE: ++ void; ++}; ++ ++struct SETATTR3args { ++ nfs_fh3 object; ++ sattr3 new_attributes; ++ sattrguard3 guard; ++}; ++ ++struct SETATTR3resok { ++ wcc_data obj_wcc; ++}; ++ ++struct SETATTR3resfail { ++ wcc_data obj_wcc; ++}; ++ ++union SETATTR3res switch (nfsstat3 status) { ++case NFS3_OK: ++ SETATTR3resok resok; ++default: ++ SETATTR3resfail resfail; ++}; ++ ++/* ++ * Arguments to lookup (v3). ++ */ ++struct LOOKUP3args { ++ diropargs3 what; ++}; ++ ++struct LOOKUP3resok { ++ nfs_fh3 object; ++ post_op_attr obj_attributes; ++ post_op_attr dir_attributes; ++}; ++ ++struct LOOKUP3resfail { ++ post_op_attr dir_attributes; ++}; ++ ++union LOOKUP3res switch (nfsstat3 status) { ++case NFS3_OK: ++ LOOKUP3resok resok; ++default: ++ LOOKUP3resfail resfail; ++}; ++ ++/* ++ * Arguments to access (v3). ++ */ ++const ACCESS3_READ = 0x0001; ++const ACCESS3_LOOKUP = 0x0002; ++const ACCESS3_MODIFY = 0x0004; ++const ACCESS3_EXTEND = 0x0008; ++const ACCESS3_DELETE = 0x0010; ++const ACCESS3_EXECUTE = 0x0020; ++ ++struct ACCESS3args { ++ nfs_fh3 object; ++ uint32 access; ++}; ++ ++struct ACCESS3resok { ++ post_op_attr obj_attributes; ++ uint32 access; ++}; ++ ++struct ACCESS3resfail { ++ post_op_attr obj_attributes; ++}; ++ ++union ACCESS3res switch (nfsstat3 status) { ++case NFS3_OK: ++ ACCESS3resok resok; ++default: ++ ACCESS3resfail resfail; ++}; ++ ++/* ++ * Arguments to readlink (v3). ++ */ ++struct READLINK3args { ++ nfs_fh3 symlink; ++}; ++ ++struct READLINK3resok { ++ post_op_attr symlink_attributes; ++ nfspath3 data; ++}; ++ ++struct READLINK3resfail { ++ post_op_attr symlink_attributes; ++}; ++ ++union READLINK3res switch (nfsstat3 status) { ++case NFS3_OK: ++ READLINK3resok resok; ++default: ++ READLINK3resfail resfail; ++}; ++ ++/* ++ * Arguments to read (v3). ++ */ ++struct READ3args { ++ nfs_fh3 file; ++ offset3 offset; ++ count3 count; ++}; ++ ++struct READ3resok { ++ post_op_attr file_attributes; ++ count3 count; ++ bool eof; ++ opaque data<>; ++}; ++ ++struct READ3resfail { ++ post_op_attr file_attributes; ++}; ++ ++/* XXX: solaris 2.6 uses ``nfsstat'' here */ ++union READ3res switch (nfsstat3 status) { ++case NFS3_OK: ++ READ3resok resok; ++default: ++ READ3resfail resfail; ++}; ++ ++/* ++ * Arguments to write (v3). ++ */ ++enum stable_how { ++ UNSTABLE = 0, ++ DATA_SYNC = 1, ++ FILE_SYNC = 2 ++}; ++ ++struct WRITE3args { ++ nfs_fh3 file; ++ offset3 offset; ++ count3 count; ++ stable_how stable; ++ opaque data<>; ++}; ++ ++struct WRITE3resok { ++ wcc_data file_wcc; ++ count3 count; ++ stable_how committed; ++ writeverf3 verf; ++}; ++ ++struct WRITE3resfail { ++ wcc_data file_wcc; ++}; ++ ++union WRITE3res switch (nfsstat3 status) { ++case NFS3_OK: ++ WRITE3resok resok; ++default: ++ WRITE3resfail resfail; ++}; ++ ++/* ++ * Arguments to create (v3). ++ */ ++enum createmode3 { ++ UNCHECKED = 0, ++ GUARDED = 1, ++ EXCLUSIVE = 2 ++}; ++ ++union createhow3 switch (createmode3 mode) { ++case UNCHECKED: ++case GUARDED: ++ sattr3 obj_attributes; ++case EXCLUSIVE: ++ createverf3 verf; ++}; ++ ++struct CREATE3args { ++ diropargs3 where; ++ createhow3 how; ++}; ++ ++struct CREATE3resok { ++ post_op_fh3 obj; ++ post_op_attr obj_attributes; ++ wcc_data dir_wcc; ++}; ++ ++struct CREATE3resfail { ++ wcc_data dir_wcc; ++}; ++ ++union CREATE3res switch (nfsstat3 status) { ++case NFS3_OK: ++ CREATE3resok resok; ++default: ++ CREATE3resfail resfail; ++}; ++ ++/* ++ * Arguments to mkdir (v3). ++ */ ++struct MKDIR3args { ++ diropargs3 where; ++ sattr3 attributes; ++}; ++ ++struct MKDIR3resok { ++ post_op_fh3 obj; ++ post_op_attr obj_attributes; ++ wcc_data dir_wcc; ++}; ++ ++struct MKDIR3resfail { ++ wcc_data dir_wcc; ++}; ++ ++union MKDIR3res switch (nfsstat3 status) { ++case NFS3_OK: ++ MKDIR3resok resok; ++default: ++ MKDIR3resfail resfail; ++}; ++ ++/* ++ * Arguments to symlink (v3). ++ */ ++struct symlinkdata3 { ++ sattr3 symlink_attributes; ++ nfspath3 symlink_data; ++}; ++ ++struct SYMLINK3args { ++ diropargs3 where; ++ symlinkdata3 symlink; ++}; ++ ++struct SYMLINK3resok { ++ post_op_fh3 obj; ++ post_op_attr obj_attributes; ++ wcc_data dir_wcc; ++}; ++ ++struct SYMLINK3resfail { ++ wcc_data dir_wcc; ++}; ++ ++union SYMLINK3res switch (nfsstat3 status) { ++case NFS3_OK: ++ SYMLINK3resok resok; ++default: ++ SYMLINK3resfail resfail; ++}; ++ ++/* ++ * Arguments to mknod (v3). ++ */ ++struct devicedata3 { ++ sattr3 dev_attributes; ++ specdata3 spec; ++}; ++ ++union mknoddata3 switch (ftype3 type) { ++case NF3CHR: ++case NF3BLK: ++ devicedata3 device; ++case NF3SOCK: ++case NF3FIFO: ++ sattr3 pipe_attributes; ++default: ++ void; ++}; ++ ++struct MKNOD3args { ++ diropargs3 where; ++ mknoddata3 what; ++}; ++ ++struct MKNOD3resok { ++ post_op_fh3 obj; ++ post_op_attr obj_attributes; ++ wcc_data dir_wcc; ++}; ++ ++struct MKNOD3resfail { ++ wcc_data dir_wcc; ++}; ++ ++union MKNOD3res switch (nfsstat3 status) { ++case NFS3_OK: ++ MKNOD3resok resok; ++default: ++ MKNOD3resfail resfail; ++}; ++ ++/* ++ * Arguments to remove (v3). ++ */ ++struct REMOVE3args { ++ diropargs3 object; ++}; ++ ++struct REMOVE3resok { ++ wcc_data dir_wcc; ++}; ++ ++struct REMOVE3resfail { ++ wcc_data dir_wcc; ++}; ++ ++union REMOVE3res switch (nfsstat3 status) { ++case NFS3_OK: ++ REMOVE3resok resok; ++default: ++ REMOVE3resfail resfail; ++}; ++ ++/* ++ * Arguments to rmdir (v3). ++ */ ++struct RMDIR3args { ++ diropargs3 object; ++}; ++ ++struct RMDIR3resok { ++ wcc_data dir_wcc; ++}; ++ ++struct RMDIR3resfail { ++ wcc_data dir_wcc; ++}; ++ ++union RMDIR3res switch (nfsstat3 status) { ++case NFS3_OK: ++ RMDIR3resok resok; ++default: ++ RMDIR3resfail resfail; ++}; ++ ++/* ++ * Arguments to rename (v3). ++ */ ++struct RENAME3args { ++ diropargs3 from; ++ diropargs3 to; ++}; ++ ++struct RENAME3resok { ++ wcc_data fromdir_wcc; ++ wcc_data todir_wcc; ++}; ++ ++struct RENAME3resfail { ++ wcc_data fromdir_wcc; ++ wcc_data todir_wcc; ++}; ++ ++union RENAME3res switch (nfsstat3 status) { ++case NFS3_OK: ++ RENAME3resok resok; ++default: ++ RENAME3resfail resfail; ++}; ++ ++/* ++ * Arguments to link (v3). ++ */ ++struct LINK3args { ++ nfs_fh3 file; ++ diropargs3 link; ++}; ++ ++struct LINK3resok { ++ post_op_attr file_attributes; ++ wcc_data linkdir_wcc; ++}; ++ ++struct LINK3resfail { ++ post_op_attr file_attributes; ++ wcc_data linkdir_wcc; ++}; ++ ++union LINK3res switch (nfsstat3 status) { ++case NFS3_OK: ++ LINK3resok resok; ++default: ++ LINK3resfail resfail; ++}; ++ ++/* ++ * Arguments to readdir (v3). ++ */ ++struct READDIR3args { ++ nfs_fh3 dir; ++ cookie3 cookie; ++ cookieverf3 cookieverf; ++ count3 count; ++}; ++ ++struct entry3 { ++ fileid3 fileid; ++ filename3 name; ++ cookie3 cookie; ++ entry3 *nextentry; ++}; ++ ++struct dirlist3 { ++ entry3 *entries; ++ bool eof; ++}; ++ ++struct READDIR3resok { ++ post_op_attr dir_attributes; ++ cookieverf3 cookieverf; ++ dirlist3 reply; ++}; ++ ++struct READDIR3resfail { ++ post_op_attr dir_attributes; ++}; ++ ++union READDIR3res switch (nfsstat3 status) { ++case NFS3_OK: ++ READDIR3resok resok; ++default: ++ READDIR3resfail resfail; ++}; ++ ++/* ++ * Arguments to readdirplus (v3). ++ */ ++struct READDIRPLUS3args { ++ nfs_fh3 dir; ++ cookie3 cookie; ++ cookieverf3 cookieverf; ++ count3 dircount; ++ count3 maxcount; ++}; ++ ++struct entryplus3 { ++ fileid3 fileid; ++ filename3 name; ++ cookie3 cookie; ++ post_op_attr name_attributes; ++ post_op_fh3 name_handle; ++ entryplus3 *nextentry; ++}; ++ ++struct dirlistplus3 { ++ entryplus3 *entries; ++ bool eof; ++}; ++ ++struct READDIRPLUS3resok { ++ post_op_attr dir_attributes; ++ cookieverf3 cookieverf; ++ dirlistplus3 reply; ++}; ++ ++struct READDIRPLUS3resfail { ++ post_op_attr dir_attributes; ++}; ++ ++union READDIRPLUS3res switch (nfsstat3 status) { ++case NFS3_OK: ++ READDIRPLUS3resok resok; ++default: ++ READDIRPLUS3resfail resfail; ++}; ++ ++/* ++ * Arguments to fsstat (v3). ++ */ ++struct FSSTAT3args { ++ nfs_fh3 fsroot; ++}; ++ ++struct FSSTAT3resok { ++ post_op_attr obj_attributes; ++ size3 tbytes; ++ size3 fbytes; ++ size3 abytes; ++ size3 tfiles; ++ size3 ffiles; ++ size3 afiles; ++ uint32 invarsec; ++}; ++ ++struct FSSTAT3resfail { ++ post_op_attr obj_attributes; ++}; ++ ++union FSSTAT3res switch (nfsstat3 status) { ++case NFS3_OK: ++ FSSTAT3resok resok; ++default: ++ FSSTAT3resfail resfail; ++}; ++ ++/* ++ * Arguments to fsinfo (v3). ++ */ ++const FSF3_LINK = 0x0001; ++const FSF3_SYMLINK = 0x0002; ++const FSF3_HOMOGENEOUS = 0x0008; ++const FSF3_CANSETTIME = 0x0010; ++ ++struct FSINFO3args { ++ nfs_fh3 fsroot; ++}; ++ ++struct FSINFO3resok { ++ post_op_attr obj_attributes; ++ uint32 rtmax; ++ uint32 rtpref; ++ uint32 rtmult; ++ uint32 wtmax; ++ uint32 wtpref; ++ uint32 wtmult; ++ uint32 dtpref; ++ size3 maxfilesize; ++ nfstime3 time_delta; ++ uint32 properties; ++}; ++ ++struct FSINFO3resfail { ++ post_op_attr obj_attributes; ++}; ++ ++union FSINFO3res switch (nfsstat3 status) { ++case NFS3_OK: ++ FSINFO3resok resok; ++default: ++ FSINFO3resfail resfail; ++}; ++ ++/* ++ * Arguments to pathconf (v3). ++ */ ++struct PATHCONF3args { ++ nfs_fh3 object; ++}; ++ ++struct PATHCONF3resok { ++ post_op_attr obj_attributes; ++ uint32 linkmax; ++ uint32 name_max; ++ bool no_trunc; ++ bool chown_restricted; ++ bool case_insensitive; ++ bool case_preserving; ++}; ++ ++struct PATHCONF3resfail { ++ post_op_attr obj_attributes; ++}; ++ ++union PATHCONF3res switch (nfsstat3 status) { ++case NFS3_OK: ++ PATHCONF3resok resok; ++default: ++ PATHCONF3resfail resfail; ++}; ++ ++/* ++ * Arguments to commit (v3). ++ */ ++struct COMMIT3args { ++ nfs_fh3 file; ++ offset3 offset; ++ count3 count; ++}; ++ ++struct COMMIT3resok { ++ wcc_data file_wcc; ++ writeverf3 verf; ++}; ++ ++struct COMMIT3resfail { ++ wcc_data file_wcc; ++}; ++ ++union COMMIT3res switch (nfsstat3 status) { ++case NFS3_OK: ++ COMMIT3resok resok; ++default: ++ COMMIT3resfail resfail; ++}; ++ ++#endif /* WANT_NFS3 */ ++ ++/* ++ * Remote file service routines ++ */ ++program NFS_PROGRAM { ++ version NFS_VERSION { ++ void ++ NFSPROC_NULL(void) = 0; ++ ++ attrstat ++ NFSPROC_GETATTR(nfs_fh) = 1; ++ ++ attrstat ++ NFSPROC_SETATTR(sattrargs) = 2; ++ ++ void ++ NFSPROC_ROOT(void) = 3; ++ ++ diropres ++ NFSPROC_LOOKUP(diropargs) = 4; ++ ++ readlinkres ++ NFSPROC_READLINK(nfs_fh) = 5; ++ ++ readres ++ NFSPROC_READ(readargs) = 6; ++ ++ void ++ NFSPROC_WRITECACHE(void) = 7; ++ ++ attrstat ++ NFSPROC_WRITE(writeargs) = 8; ++ ++ diropres ++ NFSPROC_CREATE(createargs) = 9; ++ ++ nfsstat ++ NFSPROC_REMOVE(diropargs) = 10; ++ ++ nfsstat ++ NFSPROC_RENAME(renameargs) = 11; ++ ++ nfsstat ++ NFSPROC_LINK(linkargs) = 12; ++ ++ nfsstat ++ NFSPROC_SYMLINK(symlinkargs) = 13; ++ ++ diropres ++ NFSPROC_MKDIR(createargs) = 14; ++ ++ nfsstat ++ NFSPROC_RMDIR(diropargs) = 15; ++ ++ readdirres ++ NFSPROC_READDIR(readdirargs) = 16; ++ ++ statfsres ++ NFSPROC_STATFS(nfs_fh) = 17; ++ } = 2; ++} = 100003; ++#ifdef WANT_NFS3 ++program NFS3_PROGRAM { ++ version NFS_V3 { ++ void ++ NFSPROC3_NULL(void) = 0; ++ ++ GETATTR3res ++ NFSPROC3_GETATTR(GETATTR3args) = 1; ++ ++ SETATTR3res ++ NFSPROC3_SETATTR(SETATTR3args) = 2; ++ ++ LOOKUP3res ++ NFSPROC3_LOOKUP(LOOKUP3args) = 3; ++ ++ ACCESS3res ++ NFSPROC3_ACCESS(ACCESS3args) = 4; ++ ++ READLINK3res ++ NFSPROC3_READLINK(READLINK3args) = 5; ++ ++ READ3res ++ NFSPROC3_READ(READ3args) = 6; ++ ++ WRITE3res ++ NFSPROC3_WRITE(WRITE3args) = 7; ++ ++ CREATE3res ++ NFSPROC3_CREATE(CREATE3args) = 8; ++ ++ MKDIR3res ++ NFSPROC3_MKDIR(MKDIR3args) = 9; ++ ++ SYMLINK3res ++ NFSPROC3_SYMLINK(SYMLINK3args) = 10; ++ ++ MKNOD3res ++ NFSPROC3_MKNOD(MKNOD3args) = 11; ++ ++ REMOVE3res ++ NFSPROC3_REMOVE(REMOVE3args) = 12; ++ ++ RMDIR3res ++ NFSPROC3_RMDIR(RMDIR3args) = 13; ++ ++ RENAME3res ++ NFSPROC3_RENAME(RENAME3args) = 14; ++ ++ LINK3res ++ NFSPROC3_LINK(LINK3args) = 15; ++ ++ READDIR3res ++ NFSPROC3_READDIR(READDIR3args) = 16; ++ ++ READDIRPLUS3res ++ NFSPROC3_READDIRPLUS(READDIRPLUS3args) = 17; ++ ++ FSSTAT3res ++ NFSPROC3_FSSTAT(FSSTAT3args) = 18; ++ ++ FSINFO3res ++ NFSPROC3_FSINFO(FSINFO3args) = 19; ++ ++ PATHCONF3res ++ NFSPROC3_PATHCONF(PATHCONF3args) = 20; ++ ++ COMMIT3res ++ NFSPROC3_COMMIT(COMMIT3args) = 21; ++ } = 3; ++} = 100003; ++#endif ++ +diff --git a/tirpc/rpcsvc/rquota.x b/tirpc/rpcsvc/rquota.x +new file mode 100644 +index 0000000..72864d1 +--- /dev/null ++++ b/tirpc/rpcsvc/rquota.x +@@ -0,0 +1,67 @@ ++/* ++ * Remote quota protocol ++ * Requires unix authentication ++ */ ++ ++#ifndef RPC_HDR ++%#ifndef lint ++%/*static char sccsid[] = "from: @(#)rquota.x 1.2 87/09/20 Copyr 1987 Sun Micro";*/ ++%/*static char sccsid[] = "from: @(#)rquota.x 2.1 88/08/01 4.0 RPCSRC";*/ ++%static const char rcsid[] = ++% "$FreeBSD: src/include/rpcsvc/rquota.x,v 1.6 1999/08/27 23:45:10 peter Exp $"; ++%#endif /* not lint */ ++#endif ++ ++const RQ_PATHLEN = 1024; ++ ++struct getquota_args { ++ string gqa_pathp; /* path to filesystem of interest */ ++ int gqa_uid; /* inquire about quota for uid */ ++}; ++ ++/* ++ * remote quota structure ++ */ ++struct rquota { ++ int rq_bsize; /* block size for block counts */ ++ bool rq_active; /* indicates whether quota is active */ ++ unsigned int rq_bhardlimit; /* absolute limit on disk blks alloc */ ++ unsigned int rq_bsoftlimit; /* preferred limit on disk blks */ ++ unsigned int rq_curblocks; /* current block count */ ++ unsigned int rq_fhardlimit; /* absolute limit on allocated files */ ++ unsigned int rq_fsoftlimit; /* preferred file limit */ ++ unsigned int rq_curfiles; /* current # allocated files */ ++ unsigned int rq_btimeleft; /* time left for excessive disk use */ ++ unsigned int rq_ftimeleft; /* time left for excessive files */ ++}; ++ ++enum gqr_status { ++ Q_OK = 1, /* quota returned */ ++ Q_NOQUOTA = 2, /* noquota for uid */ ++ Q_EPERM = 3 /* no permission to access quota */ ++}; ++ ++union getquota_rslt switch (gqr_status status) { ++case Q_OK: ++ rquota gqr_rquota; /* valid if status == Q_OK */ ++case Q_NOQUOTA: ++ void; ++case Q_EPERM: ++ void; ++}; ++ ++program RQUOTAPROG { ++ version RQUOTAVERS { ++ /* ++ * Get all quotas ++ */ ++ getquota_rslt ++ RQUOTAPROC_GETQUOTA(getquota_args) = 1; ++ ++ /* ++ * Get active quotas only ++ */ ++ getquota_rslt ++ RQUOTAPROC_GETACTIVEQUOTA(getquota_args) = 2; ++ } = 1; ++} = 100011; +-- +1.9.1 + diff --git a/package/libtirpc/Config.in b/package/libtirpc/Config.in new file mode 100644 index 00000000..2e9c939f --- /dev/null +++ b/package/libtirpc/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBTIRPC + bool "libtirpc" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Libtirpc is a port of Sun's Transport-Independent RPC + library to Linux. + + http://sourceforge.net/projects/libtirpc/ + +comment "libtirpc needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libtirpc/libtirpc.hash b/package/libtirpc/libtirpc.hash new file mode 100644 index 00000000..56c1d9de --- /dev/null +++ b/package/libtirpc/libtirpc.hash @@ -0,0 +1,5 @@ +# From sourceforge's info on download page: +sha1 51d75be0e5acc094a888f40042b23e128d163cb5 libtirpc-1.3.2.tar.bz2 +# Locally computed +sha256 e24eb88b8ce7db3b7ca6eb80115dd1284abc5ec32a8deccfed2224fc2532b9fd libtirpc-1.3.2.tar.bz2 +sha256 17cf6098f95bdbb269f0bbc68e76c88fe20487ca7ec53f454923ab4256ecd2e7 COPYING diff --git a/package/libtirpc/libtirpc.mk b/package/libtirpc/libtirpc.mk new file mode 100644 index 00000000..2678c144 --- /dev/null +++ b/package/libtirpc/libtirpc.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# libtirpc +# +################################################################################ + +LIBTIRPC_VERSION = 1.3.2 +LIBTIRPC_SOURCE = libtirpc-$(LIBTIRPC_VERSION).tar.bz2 +LIBTIRPC_SITE = http://downloads.sourceforge.net/project/libtirpc/libtirpc/$(LIBTIRPC_VERSION) +LIBTIRPC_LICENSE = BSD-3-Clause +LIBTIRPC_LICENSE_FILES = COPYING +LIBTIRPC_CPE_ID_VENDOR = libtirpc_project + +LIBTIRPC_DEPENDENCIES = host-nfs-utils +LIBTIRPC_INSTALL_STAGING = YES +LIBTIRPC_AUTORECONF = YES + +# getrpcby{number,name} are only provided if 'GQ' is defined +LIBTIRPC_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -DGQ" + +LIBTIRPC_CONF_OPTS = --disable-gssapi + +define HOST_LIBTIRPC_INSTALL_CMDS + $(INSTALL) -D -m 0644 $(@D)/tirpc/rpc/types.h $(HOST_DIR)/include/rpc/types.h + $(INSTALL) -D -m 0644 $(@D)/tirpc/netconfig.h $(HOST_DIR)/include/netconfig.h +endef + +$(eval $(autotools-package)) +# We are only copying headers; no need for the autotools infrastructure +$(eval $(host-generic-package)) diff --git a/package/libtomcrypt/0001-fix-CVE-2019-17362.patch b/package/libtomcrypt/0001-fix-CVE-2019-17362.patch new file mode 100644 index 00000000..91e21458 --- /dev/null +++ b/package/libtomcrypt/0001-fix-CVE-2019-17362.patch @@ -0,0 +1,29 @@ +From 25c26a3b7a9ad8192ccc923e15cf62bf0108ef94 Mon Sep 17 00:00:00 2001 +From: werew +Date: Thu, 3 Oct 2019 19:57:10 +0200 +Subject: [PATCH] Fixes #507 + +Fix a vulnerability in der_decode_utf8_string as specified here: +https://github.com/libtom/libtomcrypt/issues/507 + +[for import into Buildroot] +Signed-off-by: Thomas De Schampheleire + + +--- + src/pk/asn1/der/utf8/der_decode_utf8_string.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/pk/asn1/der/utf8/der_decode_utf8_string.c b/src/pk/asn1/der/utf8/der_decode_utf8_string.c +index 94555b99f..d3ed82bea 100644 +--- a/src/pk/asn1/der/utf8/der_decode_utf8_string.c ++++ b/src/pk/asn1/der/utf8/der_decode_utf8_string.c +@@ -65,7 +65,7 @@ int der_decode_utf8_string(const unsigned char *in, unsigned long inlen, + /* count number of bytes */ + for (z = 0; (tmp & 0x80) && (z <= 4); z++, tmp = (tmp << 1) & 0xFF); + +- if (z > 4 || (x + (z - 1) > inlen)) { ++ if (z == 1 || z > 4 || (x + (z - 1) > inlen)) { + return CRYPT_INVALID_PACKET; + } + diff --git a/package/libtomcrypt/Config.in b/package/libtomcrypt/Config.in new file mode 100644 index 00000000..2459cd21 --- /dev/null +++ b/package/libtomcrypt/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBTOMCRYPT + bool "libtomcrypt" + select BR2_PACKAGE_LIBTOMMATH + help + LibTomCrypt is a fairly comprehensive, modular and portable + cryptographic toolkit that provides developers with a vast + array of well known published block ciphers, one-way hash + functions, chaining modes, pseudo-random number generators, + public key cryptography and a plethora of other routines. + + https://www.libtom.net diff --git a/package/libtomcrypt/libtomcrypt.hash b/package/libtomcrypt/libtomcrypt.hash new file mode 100644 index 00000000..3820f8d7 --- /dev/null +++ b/package/libtomcrypt/libtomcrypt.hash @@ -0,0 +1,5 @@ +# Locally computed +sha256 96ad4c3b8336050993c5bc2cf6c057484f2b0f9f763448151567fbab5e767b84 crypt-1.18.2.tar.xz + +# Hash for license file: +sha256 8f196cb13afd271f5e267fd29543fc454596382ad580e7592709492843996ac8 LICENSE diff --git a/package/libtomcrypt/libtomcrypt.mk b/package/libtomcrypt/libtomcrypt.mk new file mode 100644 index 00000000..35886057 --- /dev/null +++ b/package/libtomcrypt/libtomcrypt.mk @@ -0,0 +1,36 @@ +################################################################################ +# +# libtomcrypt +# +################################################################################ + +LIBTOMCRYPT_VERSION = 1.18.2 +LIBTOMCRYPT_SITE = https://github.com/libtom/libtomcrypt/releases/download/v$(LIBTOMCRYPT_VERSION) +LIBTOMCRYPT_SOURCE = crypt-$(LIBTOMCRYPT_VERSION).tar.xz +LIBTOMCRYPT_LICENSE = WTFPL +LIBTOMCRYPT_LICENSE_FILES = LICENSE +LIBTOMCRYPT_CPE_ID_VENDOR = libtom +LIBTOMCRYPT_INSTALL_STAGING = YES +LIBTOMCRYPT_INSTALL_TARGET = NO # only static library +LIBTOMCRYPT_DEPENDENCIES = libtommath + +# 0001-fix-CVE-2019-17362.patch +LIBTOMCRYPT_IGNORE_CVES += CVE-2019-17362 + +LIBTOMCRYPT_CFLAGS = -I./src/headers $(TARGET_CFLAGS) -DLTC_SOURCE -DLTM_DESC + +ifeq ($(BR2_STATIC_LIBS),) +LIBTOMCRYPT_CFLAGS += -fPIC +endif + +define LIBTOMCRYPT_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) CFLAGS="$(LIBTOMCRYPT_CFLAGS)" +endef + +define LIBTOMCRYPT_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR="$(STAGING_DIR)" \ + PREFIX=/usr NODOCS=1 INSTALL_USER=$(shell id -u) \ + INSTALL_GROUP=$(shell id -g) install +endef + +$(eval $(generic-package)) diff --git a/package/libtommath/0001-Build-test-bn_mp_set_double-c-on-more-platforms.patch b/package/libtommath/0001-Build-test-bn_mp_set_double-c-on-more-platforms.patch new file mode 100644 index 00000000..c25002ba --- /dev/null +++ b/package/libtommath/0001-Build-test-bn_mp_set_double-c-on-more-platforms.patch @@ -0,0 +1,44 @@ +From 4e90f3185aea9160c28f3eaec5625b67fc0f67db Mon Sep 17 00:00:00 2001 +From: Daniel Green +Date: Sun, 9 Feb 2020 11:06:53 -0500 +Subject: [PATCH] Build+test bn_mp_set_double.c on more platforms + +Not all platforms/environments/architectures that support enough of +IEEE 754 for the purposes of mp_set_double() actually support enough +to legitimately define __STDC_IEC_559__, so only relying on that is +too strict. Fixes https://github.com/libtom/libtommath/issues/159 + +Signed-off-by: Fabrice Fontaine +[Retrieved (and backported) from: +https://github.com/libtom/libtommath/commit/4e90f3185aea9160c28f3eaec5625b67fc0f67db] +--- + demo/test.c | 2 +- + bn_mp_set_double.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/demo/test.c b/demo/test.c +index 998f14b3..f719709d 100644 +--- a/demo/test.c ++++ b/demo/test.c +@@ -522,7 +522,7 @@ static int test_mp_invmod(void) + + } + +-#if defined(__STDC_IEC_559__) || defined(__GCC_IEC_559) ++#if defined(__STDC_IEC_559__) || defined(__GCC_IEC_559) || defined(__x86_64__) || defined(_M_X64) || defined(_M_AMD64) || defined(__i386__) || defined(_M_X86) || defined(__aarch64__) || defined(__arm__) + static int test_mp_set_double(void) + { + int i; +diff --git a/mp_set_double.c b/mp_set_double.c +index 78550c8f..cdc644d9 100644 +--- a/bn_mp_set_double.c ++++ b/bn_mp_set_double.c +@@ -3,7 +3,7 @@ + /* LibTomMath, multiple-precision integer library -- Tom St Denis */ + /* SPDX-License-Identifier: Unlicense */ + +-#if defined(__STDC_IEC_559__) || defined(__GCC_IEC_559) ++#if defined(__STDC_IEC_559__) || defined(__GCC_IEC_559) || defined(__x86_64__) || defined(_M_X64) || defined(_M_AMD64) || defined(__i386__) || defined(_M_X86) || defined(__aarch64__) || defined(__arm__) + mp_err mp_set_double(mp_int *a, double b) + { + uint64_t frac; diff --git a/package/libtommath/Config.in b/package/libtommath/Config.in new file mode 100644 index 00000000..b2ffc722 --- /dev/null +++ b/package/libtommath/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBTOMMATH + bool "libtommath" + help + LibTomMath is a free open source portable number theoretic + multiple-precision integer library written entirely in C. + + http://www.libtom.net diff --git a/package/libtommath/libtommath.hash b/package/libtommath/libtommath.hash new file mode 100644 index 00000000..fa1af5ec --- /dev/null +++ b/package/libtommath/libtommath.hash @@ -0,0 +1,5 @@ +# Locally computed +sha256 b7c75eecf680219484055fcedd686064409254ae44bc31a96c5032843c0e18b1 ltm-1.2.0.tar.xz + +# Hashes for license files: +sha256 2fa64b163659f41965c9815882a8296d3d03ff546b76153e11445f9bdecf955a LICENSE diff --git a/package/libtommath/libtommath.mk b/package/libtommath/libtommath.mk new file mode 100644 index 00000000..bd3957d6 --- /dev/null +++ b/package/libtommath/libtommath.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# libtommath +# +################################################################################ + +LIBTOMMATH_VERSION = 1.2.0 +LIBTOMMATH_SITE = https://github.com/libtom/libtommath/releases/download/v$(LIBTOMMATH_VERSION) +LIBTOMMATH_SOURCE = ltm-$(LIBTOMMATH_VERSION).tar.xz +LIBTOMMATH_LICENSE = Unlicense +LIBTOMMATH_LICENSE_FILES = LICENSE +LIBTOMMATH_INSTALL_STAGING = YES +LIBTOMMATH_INSTALL_TARGET = NO # only static library + +define LIBTOMMATH_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) CFLAGS="-I./ -fPIC $(TARGET_CFLAGS)" +endef + +define LIBTOMMATH_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR="$(STAGING_DIR)" PREFIX=/usr install +endef + +$(eval $(generic-package)) diff --git a/package/libtool/Config.in b/package/libtool/Config.in new file mode 100644 index 00000000..8192c770 --- /dev/null +++ b/package/libtool/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBTOOL + bool "libtool" + help + Library that hides the complexity of using shared/static + libraries on different platforms behind a consistent, portable + interface. + + http://www.gnu.org/software/libtool/ diff --git a/package/libtool/libtool.hash b/package/libtool/libtool.hash new file mode 100644 index 00000000..e2adfa18 --- /dev/null +++ b/package/libtool/libtool.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +sha256 7c87a8c2c8c0fc9cd5019e402bed4292462d00a718a7cd5f11218153bf28b26f libtool-2.4.6.tar.xz +# License files, locally calculated +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 libltdl/COPYING.LIB diff --git a/package/libtool/libtool.mk b/package/libtool/libtool.mk new file mode 100644 index 00000000..6342e70a --- /dev/null +++ b/package/libtool/libtool.mk @@ -0,0 +1,56 @@ +################################################################################ +# +# libtool +# +################################################################################ + +LIBTOOL_VERSION = 2.4.6 +LIBTOOL_SOURCE = libtool-$(LIBTOOL_VERSION).tar.xz +LIBTOOL_SITE = $(BR2_GNU_MIRROR)/libtool +LIBTOOL_CPE_ID_VENDOR = gnu + +# For the target variant, we only want to build/install libltdl +LIBTOOL_SUBDIR = libltdl +HOST_LIBTOOL_SUBDIR = . + +LIBTOOL_INSTALL_STAGING = YES + +LIBTOOL_CONF_OPTS = --enable-ltdl-install + +LIBTOOL_DEPENDENCIES = host-m4 +HOST_LIBTOOL_DEPENDENCIES = host-m4 + +LIBTOOL_LICENSE = LGPL-2.1+ +LIBTOOL_LICENSE_FILES = $(LIBTOOL_SUBDIR)/COPYING.LIB +HOST_LIBTOOL_LICENSE = GPL-2.0+ (libtool), LGPL-2.1+ (libltdl) +HOST_LIBTOOL_LICENSE_FILES = COPYING $(LIBTOOL_SUBDIR)/COPYING.LIB + +HOST_LIBTOOL_CONF_ENV = MAKEINFO=true +HOST_LIBTOOL_LIBTOOL_PATCH = NO + +# We have a patch that affects libtool.m4, which triggers an autoreconf +# in the build step. Normally we would set AUTORECONF = YES, but this +# doesn't work for host-libtool because that creates a circular +# dependency. Instead, touch the generated files so autoreconf is not +# triggered in the build step. Note that aclocal.m4 has to be touched +# first since the rest depends on it. Note that we don't need the changes +# in libtool.m4 in our configure script, because we're not actually +# running it on the target. +# For the target, we would normally be able to use AUTORECONF, but it +# fails on libltdl/Makefile.inc. Rather than trying to fix that failure, +# just use the same hack as on the host. +define LIBTOOL_AVOID_AUTORECONF_HOOK + find $(@D) -name aclocal.m4 -exec touch '{}' \; + find $(@D) -name config-h.in -exec touch '{}' \; + find $(@D) -name configure -exec touch '{}' \; + find $(@D) -name Makefile.in -exec touch '{}' \; +endef +LIBTOOL_PRE_CONFIGURE_HOOKS += LIBTOOL_AVOID_AUTORECONF_HOOK +HOST_LIBTOOL_PRE_CONFIGURE_HOOKS += LIBTOOL_AVOID_AUTORECONF_HOOK + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) + +# variables used by other packages +LIBTOOL = $(HOST_DIR)/bin/libtool +LIBTOOLIZE = $(HOST_DIR)/bin/libtoolize diff --git a/package/libtorrent-rasterbar/Config.in b/package/libtorrent-rasterbar/Config.in new file mode 100644 index 00000000..fe9a9fc0 --- /dev/null +++ b/package/libtorrent-rasterbar/Config.in @@ -0,0 +1,26 @@ +comment "libtorrent-rasterbar needs a toolchain w/ C++, threads, wchar, gcc >= 4.9" + depends on BR2_TOOLCHAIN_SUPPORTS_VARIADIC_MI_THUNK + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_USE_WCHAR || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + +comment "libtorrent-rasterbar needs exception_ptr" + depends on BR2_TOOLCHAIN_SUPPORTS_VARIADIC_MI_THUNK + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 + +config BR2_PACKAGE_LIBTORRENT_RASTERBAR + bool "libtorrent-rasterbar" + depends on BR2_INSTALL_LIBSTDCPP # boost + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C++11 + depends on BR2_TOOLCHAIN_HAS_THREADS # boost + depends on BR2_TOOLCHAIN_SUPPORTS_VARIADIC_MI_THUNK + depends on BR2_USE_WCHAR # boost + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # exception_ptr + select BR2_PACKAGE_BOOST + select BR2_PACKAGE_BOOST_SYSTEM + select BR2_PACKAGE_OPENSSL + help + libtorrent is a feature complete C++ bittorrent implementation + focusing on efficiency and scalability. + + https://www.libtorrent.org/ diff --git a/package/libtorrent-rasterbar/libtorrent-rasterbar.hash b/package/libtorrent-rasterbar/libtorrent-rasterbar.hash new file mode 100644 index 00000000..8198a1ff --- /dev/null +++ b/package/libtorrent-rasterbar/libtorrent-rasterbar.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 c3744ac9fa41f6e6ebf79538a2ea678df76a2cbbaf3ac6ae2c05455314e5cce8 libtorrent-rasterbar-1.2.12.tar.gz +sha256 f3a5dd1558cce616b12edad521427ec8976ce2bb0af33f7f359cfa648bf55ad8 COPYING diff --git a/package/libtorrent-rasterbar/libtorrent-rasterbar.mk b/package/libtorrent-rasterbar/libtorrent-rasterbar.mk new file mode 100644 index 00000000..7f60252e --- /dev/null +++ b/package/libtorrent-rasterbar/libtorrent-rasterbar.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# libtorrent-rasterbar +# +################################################################################ + +LIBTORRENT_RASTERBAR_VERSION = 1.2.12 +LIBTORRENT_RASTERBAR_SITE = \ + https://github.com/arvidn/libtorrent/releases/download/v$(LIBTORRENT_RASTERBAR_VERSION) +LIBTORRENT_RASTERBAR_LICENSE = BSD-3-Clause +LIBTORRENT_RASTERBAR_LICENSE_FILES = COPYING +LIBTORRENT_RASTERBAR_CPE_ID_VENDOR = libtorrent +LIBTORRENT_RASTERBAR_CPE_ID_PRODUCT = libtorrent +LIBTORRENT_RASTERBAR_DEPENDENCIES = host-pkgconf boost openssl +LIBTORRENT_RASTERBAR_INSTALL_STAGING = YES +LIBTORRENT_RASTERBAR_CONF_OPTS = \ + --with-boost-libdir=$(STAGING_DIR)/usr/lib \ + --disable-invariant-checks +LIBTORRENT_RASTERBAR_CXXFLAGS = $(TARGET_CXXFLAGS) -std=c++11 + +# Internal error, aborting at dwarf2cfi.c:2802 in connect_traces +# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58864 +ifeq ($(BR2_m68k_cf),y) +LIBTORRENT_RASTERBAR_CXXFLAGS += -fno-defer-pop +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y) +LIBTORRENT_RASTERBAR_CXXFLAGS += -O0 +endif + +LIBTORRENT_RASTERBAR_CONF_OPTS += CXXFLAGS="$(LIBTORRENT_RASTERBAR_CXXFLAGS)" + +ifeq ($(BR2_ENABLE_LOCALE)$(BR2_PACKAGE_LIBICONV),y) +LIBTORRENT_RASTERBAR_DEPENDENCIES += $(if $(BR2_PACKAGE_LIBICONV),libiconv) +LIBTORRENT_RASTERBAR_CONF_OPTS += --with-libiconv +else +LIBTORRENT_RASTERBAR_CONF_OPTS += --without-libiconv +endif + +$(eval $(autotools-package)) diff --git a/package/libtorrent/0001-libtorrent.pc.in-add-Libs.Private.patch b/package/libtorrent/0001-libtorrent.pc.in-add-Libs.Private.patch new file mode 100644 index 00000000..7d363d29 --- /dev/null +++ b/package/libtorrent/0001-libtorrent.pc.in-add-Libs.Private.patch @@ -0,0 +1,30 @@ +From a86219e725441eb87321fa3e24531dafa54ee674 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 20 Oct 2019 20:23:19 +0200 +Subject: [PATCH] libtorrent.pc.in: add Libs.Private + +Add Libs.Private: -lz so applications that want to link statically with +libtorrent (such as rtorrent) will know that they must link with -lz + +Fixes: + - http://autobuild.buildroot.org/results/075598e1699c2ac20a4dfbcb5695bbb7343f9a86 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/rakshasa/libtorrent/pull/202] +--- + libtorrent.pc.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/libtorrent.pc.in b/libtorrent.pc.in +index cf6612bc..6108f7e9 100644 +--- a/libtorrent.pc.in ++++ b/libtorrent.pc.in +@@ -7,4 +7,5 @@ Name: libtorrent + Description: A BitTorrent library + Version: @VERSION@ + Libs: -L${libdir} -ltorrent ++Libs.Private: -lz + Cflags: -I${includedir} +-- +2.23.0 + diff --git a/package/libtorrent/Config.in b/package/libtorrent/Config.in new file mode 100644 index 00000000..4787f9c6 --- /dev/null +++ b/package/libtorrent/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_LIBTORRENT + bool "libtorrent" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_HAS_SYNC_1 && BR2_TOOLCHAIN_HAS_SYNC_4 + select BR2_PACKAGE_ZLIB + help + BitTorrent library written in C++ for *nix + + https://github.com/rakshasa/libtorrent + +comment "libtorrent needs a toolchain w/ C++, threads" + depends on BR2_TOOLCHAIN_HAS_SYNC_1 && BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libtorrent/libtorrent.hash b/package/libtorrent/libtorrent.hash new file mode 100644 index 00000000..3a4fe89a --- /dev/null +++ b/package/libtorrent/libtorrent.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 ed115a28f4ae8cfcd33b94a597c076ca74fd549867a26e4fac9505c27288e983 libtorrent-0.13.8.tar.gz +sha256 204d8eff92f95aac4df6c8122bc1505f468f3a901e5a4cc08940e0ede1938994 COPYING diff --git a/package/libtorrent/libtorrent.mk b/package/libtorrent/libtorrent.mk new file mode 100644 index 00000000..c8310cab --- /dev/null +++ b/package/libtorrent/libtorrent.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# libtorrent +# +################################################################################ + +LIBTORRENT_VERSION = 0.13.8 +LIBTORRENT_SITE = http://rtorrent.net/downloads +LIBTORRENT_DEPENDENCIES = host-pkgconf zlib +LIBTORRENT_CONF_OPTS = --enable-aligned \ + --disable-instrumentation \ + --with-zlib=$(STAGING_DIR)/usr +LIBTORRENT_INSTALL_STAGING = YES +LIBTORRENT_LICENSE = GPL-2.0 +LIBTORRENT_LICENSE_FILES = COPYING + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +LIBTORRENT_CONF_OPTS += --enable-openssl +LIBTORRENT_DEPENDENCIES += openssl +else +LIBTORRENT_CONF_OPTS += --disable-openssl +endif + +$(eval $(autotools-package)) diff --git a/package/libtpl/Config.in b/package/libtpl/Config.in new file mode 100644 index 00000000..0286e033 --- /dev/null +++ b/package/libtpl/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LIBTPL + bool "libtpl" + help + Easily store and retrieve binary data in C + + http://troydhanson.github.io/tpl/ diff --git a/package/libtpl/libtpl.hash b/package/libtpl/libtpl.hash new file mode 100644 index 00000000..74ca68fb --- /dev/null +++ b/package/libtpl/libtpl.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 0b3750bf62f56be4c42f83c89d8449b24f1c5f1605a104801d70f2f3c06fb2ff libtpl-1.6.1.tar.gz +sha256 8554ddb5779f1ad2f3ea6db1d0df622e63fca11f44bfc3c8b3c207ea0482c746 LICENSE diff --git a/package/libtpl/libtpl.mk b/package/libtpl/libtpl.mk new file mode 100644 index 00000000..ead87a6b --- /dev/null +++ b/package/libtpl/libtpl.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# libtpl +# +################################################################################ + +LIBTPL_VERSION = 1.6.1 +LIBTPL_SITE = $(call github,troydhanson,tpl,v$(LIBTPL_VERSION)) +LIBTPL_INSTALL_STAGING = YES +LIBTPL_LICENSE = BSD-like +LIBTPL_LICENSE_FILES = LICENSE + +LIBTPL_AUTORECONF = YES + +define LIBTPL_CREATE_MISSING_FILES + touch $(@D)/NEWS $(@D)/AUTHORS $(@D)/ChangeLog $(@D)/COPYING +endef +LIBTPL_POST_EXTRACT_HOOKS += LIBTPL_CREATE_MISSING_FILES + +$(eval $(autotools-package)) diff --git a/package/libubootenv/0001-src-CMakeLists.txt-do-not-force-the-build-of-a-share.patch b/package/libubootenv/0001-src-CMakeLists.txt-do-not-force-the-build-of-a-share.patch new file mode 100644 index 00000000..2a234af7 --- /dev/null +++ b/package/libubootenv/0001-src-CMakeLists.txt-do-not-force-the-build-of-a-share.patch @@ -0,0 +1,54 @@ +From 5448ca9d92f7fa197060323a82a5f060ce7c31e7 Mon Sep 17 00:00:00 2001 +From: Pierre-Jean Texier +Date: Wed, 22 May 2019 10:26:27 +0200 +Subject: [PATCH] src/CMakeLists.txt: do not force the build of a shared + library + +By definition, projects using CMake which can build either static or shared +libraries use a BUILD_SHARED_LIBS flag to allow selecting between both. +So, let CMake rely on the standard BUILD_SHARED_LIBS variable to decide +whether a static or shared library should be built. + +however, we can control the behaviour as follows: + + $. cmake -DBUILD_SHARED_LIBS=OFF ... + + $. cmake -DBUILS_SHARED_LIBS=ON ... + +With Yocto/OE, just add the following option into the libubootenv recipe : + +EXTRA_OECMAKE = "-DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON" + +Signed-off-by: Pierre-Jean Texier +[Upstream status: http://patchwork.ozlabs.org/patch/1103437/] +--- + src/CMakeLists.txt | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index a04dd11..3a2115d 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -12,17 +12,15 @@ SET(include_HEADERS + + include(GNUInstallDirs) # for the CMAKE_INSTALL_LIBDIR variable + +-add_library(ubootenv SHARED ${libubootenv_SOURCES} ${include_HEADERS}) ++add_library(ubootenv ${libubootenv_SOURCES} ${include_HEADERS}) + SET_TARGET_PROPERTIES(ubootenv PROPERTIES VERSION ${VERSION} SOVERSION ${SOVERSION}) + +-ADD_LIBRARY(ubootenv_static STATIC ${libubootenv_SOURCES} ${include_HEADERS}) +-SET_TARGET_PROPERTIES(ubootenv_static PROPERTIES OUTPUT_NAME ubootenv) + add_executable(fw_printenv fw_printenv.c) + add_executable(fw_setenv fw_setenv.c) + target_link_libraries(fw_printenv ubootenv z) + target_link_libraries(fw_setenv ubootenv z) + +-install (TARGETS ubootenv ubootenv_static DESTINATION ${CMAKE_INSTALL_LIBDIR}) ++install (TARGETS ubootenv DESTINATION ${CMAKE_INSTALL_LIBDIR}) + install (FILES libuboot.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + install (TARGETS fw_printenv DESTINATION ${CMAKE_INSTALL_BINDIR}) + install (TARGETS fw_setenv DESTINATION ${CMAKE_INSTALL_BINDIR}) +-- +2.25.1 + diff --git a/package/libubootenv/Config.in b/package/libubootenv/Config.in new file mode 100644 index 00000000..9be52c45 --- /dev/null +++ b/package/libubootenv/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBUBOOTENV + bool "libubootenv" + select BR2_PACKAGE_ZLIB + help + libubootenv is a library that provides a hardware independent + way to access to U-Boot environment. + + The package provides the fw_printenv / fw_setenv utilities, + new tools build from the library and not from U-Boot. + + https://github.com/sbabic/libubootenv/ diff --git a/package/libubootenv/libubootenv.hash b/package/libubootenv/libubootenv.hash new file mode 100644 index 00000000..a655ed23 --- /dev/null +++ b/package/libubootenv/libubootenv.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 4c52dd908b69f18cdd5721b3f24573fb276e61115f66edb74906d766ca60399f libubootenv-0.3.1.tar.gz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 Licenses/lgpl-2.1.txt diff --git a/package/libubootenv/libubootenv.mk b/package/libubootenv/libubootenv.mk new file mode 100644 index 00000000..61516710 --- /dev/null +++ b/package/libubootenv/libubootenv.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libubootenv +# +################################################################################ + +LIBUBOOTENV_VERSION = 0.3.1 +LIBUBOOTENV_SITE = $(call github,sbabic,libubootenv,v$(LIBUBOOTENV_VERSION)) +LIBUBOOTENV_LICENSE = LGPL-2.1 +LIBUBOOTENV_LICENSE_FILES = Licenses/lgpl-2.1.txt +LIBUBOOTENV_INSTALL_STAGING = YES +LIBUBOOTENV_DEPENDENCIES = zlib + +$(eval $(cmake-package)) diff --git a/package/libubox/0001-blobmsg-fix-array-out-of-bounds-GCC-10-warning.patch b/package/libubox/0001-blobmsg-fix-array-out-of-bounds-GCC-10-warning.patch new file mode 100644 index 00000000..09128db9 --- /dev/null +++ b/package/libubox/0001-blobmsg-fix-array-out-of-bounds-GCC-10-warning.patch @@ -0,0 +1,47 @@ +From eb7eb6393d47a918c420f5b287946dbd6c0d5f57 Mon Sep 17 00:00:00 2001 +From: =?utf8?q?Petr=20=C5=A0tetiar?= +Date: Wed, 25 Dec 2019 10:27:59 +0100 +Subject: [PATCH] blobmsg: fix array out of bounds GCC 10 warning +MIME-Version: 1.0 +Content-Type: text/plain; charset=utf8 +Content-Transfer-Encoding: 8bit + +Fixes following warning reported by GCC 10.0.0 20191203: + + blobmsg.c:234:2: error: 'strcpy' offset 6 from the object at 'attr' is out of the bounds of referenced subobject 'name' with type 'uint8_t[0]' {aka 'unsigned char[0]'} at offset 6 [-Werror=array-bounds] + 234 | strcpy((char *) hdr->name, (const char *)name); + | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + In file included from blobmsg.c:16: + blobmsg.h:42:10: note: subobject 'name' declared here + 42 | uint8_t name[]; + | ^~~~ + +Reported-by: Khem Raj +Signed-off-by: Petr Å tetiar +[Retrieved from: +https://git.openwrt.org/?p=project/libubox.git;a=commit;h=eb7eb6393d47a918c420f5b287946dbd6c0d5f57] +Signed-off-by: Fabrice Fontaine +--- + blobmsg.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/blobmsg.c b/blobmsg.c +index 48dba81..37821c3 100644 +--- a/blobmsg.c ++++ b/blobmsg.c +@@ -240,7 +240,10 @@ blobmsg_new(struct blob_buf *buf, int type, const char *name, int payload_len, v + attr->id_len |= be32_to_cpu(BLOB_ATTR_EXTENDED); + hdr = blob_data(attr); + hdr->namelen = cpu_to_be16(namelen); +- strcpy((char *) hdr->name, (const char *)name); ++ ++ memcpy(hdr->name, name, namelen); ++ hdr->name[namelen] = '\0'; ++ + pad_end = *data = blobmsg_data(attr); + pad_start = (char *) &hdr->name[namelen]; + if (pad_start < pad_end) +-- +2.20.1 + diff --git a/package/libubox/Config.in b/package/libubox/Config.in new file mode 100644 index 00000000..25ef4bb8 --- /dev/null +++ b/package/libubox/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_LIBUBOX + bool "libubox" + depends on !BR2_STATIC_LIBS + help + This library originates from the OpenWrt project to + handle the configuration file infrastructure, but can + also be used for the same purposes in projects other + than OpenWrt. + + http://nbd.name/gitweb.cgi?p=luci2/libubox.git;a=summary + +comment "libubox needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/libubox/libubox.mk b/package/libubox/libubox.mk new file mode 100644 index 00000000..d3e3b709 --- /dev/null +++ b/package/libubox/libubox.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# libubox +# +################################################################################ + +LIBUBOX_VERSION = 723730214732862de7e892bae2f7a7889e66bf1b +LIBUBOX_SITE = git://git.openwrt.org/project/libubox.git +LIBUBOX_LICENSE = ISC, BSD-3-Clause +LIBUBOX_INSTALL_STAGING = YES +LIBUBOX_DEPENDENCIES = $(if $(BR2_PACKAGE_JSON_C),json-c) + +ifeq ($(BR2_USE_MMU)$(BR2_PACKAGE_LUA_5_1),yy) +LIBUBOX_DEPENDENCIES += lua +LIBUBOX_CONF_OPTS += -DBUILD_LUA=ON \ + -DLUAPATH=/usr/lib/lua/5.1 \ + -DLUA_CFLAGS=-I$(STAGING_DIR)/usr/include +else +LIBUBOX_CONF_OPTS += -DBUILD_LUA=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/libuci/Config.in b/package/libuci/Config.in new file mode 100644 index 00000000..2f4ad404 --- /dev/null +++ b/package/libuci/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_LIBUCI + bool "libuci" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_LIBUBOX + help + This library originates from the OpenWrt project to + handle the configuration file infrastructure, but can + also be used for the same purposes in projects other + than OpenWrt. + + This package will also install CLI tool uci. + + http://wiki.openwrt.org/doc/techref/uci + +comment "libuci needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/libuci/libuci.hash b/package/libuci/libuci.hash new file mode 100644 index 00000000..b808810c --- /dev/null +++ b/package/libuci/libuci.hash @@ -0,0 +1,2 @@ +# Locally computed +sha256 1ee875910bdf751807f10d44f6b6b7f9ec71c12d4c407a80bae5cb654d2ba4cc libuci-49ec6efbdac4819033d34f08927d795f83a3932d-br1.tar.gz diff --git a/package/libuci/libuci.mk b/package/libuci/libuci.mk new file mode 100644 index 00000000..fc832879 --- /dev/null +++ b/package/libuci/libuci.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# libuci +# +################################################################################ + +LIBUCI_VERSION = 49ec6efbdac4819033d34f08927d795f83a3932d +LIBUCI_SITE = git://git.openwrt.org/project/uci.git +LIBUCI_LICENSE = LGPL-2.1, GPL-2.0 (tools) +LIBUCI_CPE_ID_VENDOR = openwrt +LIBUCI_INSTALL_STAGING = YES +LIBUCI_DEPENDENCIES = libubox + +# Fixed in commit 19e29ffc15dbd958e8e6a648ee0982c68353516f, older than LIBUCI_VERSION +LIBUCI_IGNORE_CVES += CVE-2019-15513 + +ifeq ($(BR2_PACKAGE_LUA_5_1),y) +LIBUCI_DEPENDENCIES += lua +LIBUCI_CONF_OPTS += -DBUILD_LUA=ON \ + -DLUAPATH=/usr/lib/lua/5.1 \ + -DLUA_CFLAGS=-I$(STAGING_DIR)/usr/include +LIBUCI_LICENSE += , GPL-2.0 (lua bindings) +else +LIBUCI_CONF_OPTS += -DBUILD_LUA=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/libucl/Config.in b/package/libucl/Config.in new file mode 100644 index 00000000..a94701e1 --- /dev/null +++ b/package/libucl/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_LIBUCL + bool "libucl" + help + Universal configuration library parser + + Libucl is a parser and C API to parse and generate ucl + objects. Libucl consist of several groups of functions: + parser, emitting, conversion, generation, iteration, + validation, and utility. These functions can be used to work + with several formats: JSON, compact JSON, configuration + (nginx like), and YAML. Libucl has clear design that should + be very convenient for reading and writing and makes for an + ideal parser with high performance. + + https://github.com/vstakhov/libucl diff --git a/package/libucl/libucl.hash b/package/libucl/libucl.hash new file mode 100644 index 00000000..8d4a796e --- /dev/null +++ b/package/libucl/libucl.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 a6397e179672f0e8171a0f9a2cfc37e01432b357fd748b13f4394436689d24ef libucl-0.8.1.tar.gz +sha256 1bf976835764c1d827e07472a0a75adb098682df56681878af05fc0db7439b03 COPYING diff --git a/package/libucl/libucl.mk b/package/libucl/libucl.mk new file mode 100644 index 00000000..9f0378ad --- /dev/null +++ b/package/libucl/libucl.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# libucl +# +################################################################################ + +LIBUCL_VERSION = 0.8.1 +LIBUCL_SITE = $(call github,vstakhov,libucl,$(LIBUCL_VERSION)) +LIBUCL_INSTALL_STAGING = YES +LIBUCL_AUTORECONF = YES +LIBUCL_LICENSE = BSD-2-Clause +LIBUCL_LICENSE_FILES = COPYING +LIBUCL_DEPENDENCIES = host-pkgconf + +ifeq ($(BR2_PACKAGE_LIBCURL),y) +LIBUCL_DEPENDENCIES += libcurl +LIBUCL_CONF_OPTS += --enable-urls +else +LIBUCL_CONF_OPTS += --disable-urls +endif + +$(eval $(autotools-package)) diff --git a/package/libudfread/Config.in b/package/libudfread/Config.in new file mode 100644 index 00000000..8d425705 --- /dev/null +++ b/package/libudfread/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LIBUDFREAD + bool "libudfread" + help + UDF reader + + https://code.videolan.org/videolan/libudfread diff --git a/package/libudfread/libudfread.hash b/package/libudfread/libudfread.hash new file mode 100644 index 00000000..14d24b5d --- /dev/null +++ b/package/libudfread/libudfread.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 529ffa189a6b9fbe08c77430bd18201007b9b20b3153ad92ebd5e1cc515e7151 libudfread-1.1.1.tar.bz2 +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/libudfread/libudfread.mk b/package/libudfread/libudfread.mk new file mode 100644 index 00000000..6803a918 --- /dev/null +++ b/package/libudfread/libudfread.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# libudfread +# +################################################################################ + +LIBUDFREAD_VERSION = 1.1.1 +LIBUDFREAD_SOURCE = libudfread-$(LIBUDFREAD_VERSION).tar.bz2 +LIBUDFREAD_SITE = https://code.videolan.org/videolan/libudfread/-/archive/$(LIBUDFREAD_VERSION) +LIBUDFREAD_AUTORECONF = YES +LIBUDFREAD_INSTALL_STAGING = YES +LIBUDFREAD_LICENSE = LGPL-2.1+ +LIBUDFREAD_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/libuecc/Config.in b/package/libuecc/Config.in new file mode 100644 index 00000000..b7cd0450 --- /dev/null +++ b/package/libuecc/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LIBUECC + bool "libuecc" + depends on !BR2_STATIC_LIBS + help + Very small Elliptic Curve Cryptography library + + http://git.universe-factory.net/libuecc + +comment "libuecc needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/libuecc/libuecc.hash b/package/libuecc/libuecc.hash new file mode 100644 index 00000000..bfc9aaf3 --- /dev/null +++ b/package/libuecc/libuecc.hash @@ -0,0 +1,5 @@ +# from https://projects.universe-factory.net/projects/fastd/files +md5 5cd543cb8e7bce83a22c07a0579c95a1 libuecc-7.tar.xz +# computed locally +sha256 b94aef08eab5359d0facaa7ead2ce81b193eef0c61379d9835213ebc0a46257a libuecc-7.tar.xz +sha256 ec4d9fcc3a37a7998a9ea4decf38f4c0c91a44fd05bb17638c52fe16f2b12e23 COPYRIGHT diff --git a/package/libuecc/libuecc.mk b/package/libuecc/libuecc.mk new file mode 100644 index 00000000..aad26e5a --- /dev/null +++ b/package/libuecc/libuecc.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libuecc +# +################################################################################ + +LIBUECC_VERSION = 7 +LIBUECC_SITE = https://projects.universe-factory.net/attachments/download/85 +LIBUECC_SOURCE = libuecc-$(LIBUECC_VERSION).tar.xz +LIBUECC_LICENSE = BSD-2-Clause +LIBUECC_LICENSE_FILES = COPYRIGHT +LIBUECC_INSTALL_STAGING = YES + +$(eval $(cmake-package)) diff --git a/package/libuev/Config.in b/package/libuev/Config.in new file mode 100644 index 00000000..bb50099c --- /dev/null +++ b/package/libuev/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LIBUEV + bool "libuev" + help + Simple event loop for Linux. + + https://github.com/troglobit/libuev diff --git a/package/libuev/libuev.hash b/package/libuev/libuev.hash new file mode 100644 index 00000000..fece0e9b --- /dev/null +++ b/package/libuev/libuev.hash @@ -0,0 +1,4 @@ +# From https://github.com/troglobit/libuev/releases/download/v2.3.1/libuev-2.3.1.tar.xz.md5 +md5 ec601f69f69477858fa023a75da23793 libuev-2.3.1.tar.xz +# License files +sha256 3c2bf3fdd85687242ba6f2b02b6ce5176aba15b5e1a2ccb8b608439197ec4641 LICENSE diff --git a/package/libuev/libuev.mk b/package/libuev/libuev.mk new file mode 100644 index 00000000..c7b73b42 --- /dev/null +++ b/package/libuev/libuev.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# libuev +# +################################################################################ + +LIBUEV_VERSION = 2.3.1 +LIBUEV_SOURCE = libuev-$(LIBUEV_VERSION).tar.xz +LIBUEV_SITE = https://github.com/troglobit/libuev/releases/download/v$(LIBUEV_VERSION) +LIBUEV_LICENSE = MIT +LIBUEV_LICENSE_FILES = LICENSE +LIBUEV_INSTALL_STAGING = YES +LIBUEV_CONF_OPTS = --disable-examples + +$(eval $(autotools-package)) diff --git a/package/libuhttpd/Config.in b/package/libuhttpd/Config.in new file mode 100644 index 00000000..1ab39c58 --- /dev/null +++ b/package/libuhttpd/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBUHTTPD + bool "libuhttpd" + select BR2_PACKAGE_LIBEV + help + A lightweight and fully asynchronous HTTP server + library based on libev + + https://github.com/zhaojh329/libuhttpd diff --git a/package/libuhttpd/libuhttpd.hash b/package/libuhttpd/libuhttpd.hash new file mode 100644 index 00000000..68f1f217 --- /dev/null +++ b/package/libuhttpd/libuhttpd.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 9939cd5f9aaad2c118bc04417fb2d21994fb1cdca7fff475a0930a1374635af0 libuhttpd-3.9.0.tar.gz +sha256 99efed4bbc0b62f96f999ef23399e38234fb91651af734fd389a52b033a85b55 LICENSE diff --git a/package/libuhttpd/libuhttpd.mk b/package/libuhttpd/libuhttpd.mk new file mode 100644 index 00000000..a90fe666 --- /dev/null +++ b/package/libuhttpd/libuhttpd.mk @@ -0,0 +1,46 @@ +################################################################################ +# +# libuhttpd +# +################################################################################ + +LIBUHTTPD_VERSION = 3.9.0 +LIBUHTTPD_SITE = https://github.com/zhaojh329/libuhttpd/releases/download/v$(LIBUHTTPD_VERSION) +LIBUHTTPD_LICENSE = MIT +LIBUHTTPD_LICENSE_FILES = LICENSE +LIBUHTTPD_INSTALL_STAGING = YES +LIBUHTTPD_DEPENDENCIES = libev + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +LIBUHTTPD_DEPENDENCIES += openssl +LIBUHTTPD_CONF_OPTS += \ + -DUHTTPD_SSL_SUPPORT=ON \ + -DUHTTPD_USE_MBEDTLS=OFF \ + -DUHTTPD_USE_OPENSSL=ON \ + -DUHTTPD_USE_WOLFSSL=OFF +else ifeq ($(BR2_PACKAGE_WOLFSSL),y) +LIBUHTTPD_DEPENDENCIES += wolfssl +LIBUHTTPD_CONF_OPTS += \ + -DUHTTPD_SSL_SUPPORT=ON \ + -DUHTTPD_USE_MBEDTLS=OFF \ + -DUHTTPD_USE_OPENSSL=OFF \ + -DUHTTPD_USE_WOLFSSL=ON +else ifeq ($(BR2_PACKAGE_MBEDTLS),y) +LIBUHTTPD_DEPENDENCIES += mbedtls +LIBUHTTPD_CONF_OPTS += \ + -DUHTTPD_SSL_SUPPORT=ON \ + -DUHTTPD_USE_MBEDTLS=ON \ + -DUHTTPD_USE_OPENSSL=OFF \ + -DUHTTPD_USE_WOLFSSL=OFF +else +LIBUHTTPD_CONF_OPTS += -DUHTTPD_SSL_SUPPORT=OFF +endif + +# BUILD_SHARED_LIBS is handled in pkg-cmake.mk as it is a generic cmake variable +ifeq ($(BR2_SHARED_STATIC_LIBS),y) +LIBUHTTPD_CONF_OPTS += -DBUILD_STATIC_LIBS=ON +else ifeq ($(BR2_SHARED_LIBS),y) +LIBUHTTPD_CONF_OPTS += -DBUILD_STATIC_LIBS=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/libuio/0001-configure-remove-po-Makefile.in.patch b/package/libuio/0001-configure-remove-po-Makefile.in.patch new file mode 100644 index 00000000..067465cc --- /dev/null +++ b/package/libuio/0001-configure-remove-po-Makefile.in.patch @@ -0,0 +1,26 @@ +From c5fa0b778e1c2a7d03ff6e661bdfa2faef878f68 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Fri, 1 Jul 2016 17:56:30 +0200 +Subject: [PATCH] configure: remove po/Makefile.in + +The file po/Makefile.in is automatically added to AC_OUTPUT while using gettexize + +Signed-off-by: Romain Naour +--- + configure.ac | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/configure.ac b/configure.ac +index f7fb40f..a25e463 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -55,5 +55,4 @@ dnl last but not least + AC_OUTPUT([Makefile + libuio.dox + libuio-uninstalled.pc +- libuio.pc +- po/Makefile.in]) ++ libuio.pc]) +-- +2.5.5 + diff --git a/package/libuio/0002-fix-build-with-musl.patch b/package/libuio/0002-fix-build-with-musl.patch new file mode 100644 index 00000000..6e5b168c --- /dev/null +++ b/package/libuio/0002-fix-build-with-musl.patch @@ -0,0 +1,57 @@ +From c378ee112857128002754c616acb6841ee32aaf6 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sat, 2 Jul 2016 10:52:28 +0200 +Subject: [PATCH] fix build with musl + +limits.h header is missing in attr.c, base.c and helper.c to provide +PATH_MAX. + +Fixes: +http://autobuild.buildroot.net/results/702/7023104e6018ea46c54073ddbe5119d0f66ae5a3 + +Signed-off-by: Romain Naour +--- + attr.c | 1 + + base.c | 1 + + helper.c | 1 + + 3 files changed, 3 insertions(+) + +diff --git a/attr.c b/attr.c +index 4245140..7512f4e 100644 +--- a/attr.c ++++ b/attr.c +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + #include + #include + #include +diff --git a/base.c b/base.c +index 14ebcee..4ce7301 100644 +--- a/base.c ++++ b/base.c +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + #include + #include + #include +diff --git a/helper.c b/helper.c +index 170f084..1fb0b4c 100644 +--- a/helper.c ++++ b/helper.c +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + #include + #include + #include +-- +2.5.5 + diff --git a/package/libuio/Config.in b/package/libuio/Config.in new file mode 100644 index 00000000..97be1e3d --- /dev/null +++ b/package/libuio/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBUIO + bool "libuio" + select BR2_PACKAGE_ARGP_STANDALONE if BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_MUSL + help + libuio is a light-weight C programming library to handle UIO + (Userspace I/O) device discovery and binding task. + + http://github.com/Linutronix/libuio diff --git a/package/libuio/libuio.hash b/package/libuio/libuio.hash new file mode 100644 index 00000000..54fb02b1 --- /dev/null +++ b/package/libuio/libuio.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 1494375bd493ef1a1b868ce2cbc7d29f3f9f692c21f70689eae28566e56f2c15 libuio-ca28ff0f69d89a789a47552c72db5a43d280710b.tar.gz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/libuio/libuio.mk b/package/libuio/libuio.mk new file mode 100644 index 00000000..b6e8e7e7 --- /dev/null +++ b/package/libuio/libuio.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# libuio +# +################################################################################ + +# v0.2.8 +LIBUIO_VERSION = ca28ff0f69d89a789a47552c72db5a43d280710b +LIBUIO_SITE = $(call github,Linutronix,libuio,$(LIBUIO_VERSION)) +LIBUIO_LICENSE = LGPL-2.1 (library), GPL-2.0 (programs) +LIBUIO_LICENSE_FILES = COPYING +LIBUIO_CONF_OPTS = --with-glib=no --without-werror +LIBUIO_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) host-pkgconf +LIBUIO_LIBS = $(TARGET_NLS_LIBS) +LIBUIO_INSTALL_STAGING = YES + +# Fetched from github, no pre-generated configure script provided +LIBUIO_GETTEXTIZE = YES +LIBUIO_AUTORECONF = YES + +# Avoid build issue when makeinfo is missing +LIBUIO_CONF_ENV += MAKEINFO=true + +ifeq ($(BR2_PACKAGE_ARGP_STANDALONE),y) +LIBUIO_DEPENDENCIES += argp-standalone +LIBUIO_LIBS += -largp +endif + +LIBUIO_CONF_ENV += LIBS="$(LIBUIO_LIBS)" + +$(eval $(autotools-package)) diff --git a/package/libunistring/Config.in b/package/libunistring/Config.in new file mode 100644 index 00000000..88fc6580 --- /dev/null +++ b/package/libunistring/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LIBUNISTRING + bool "libunistring" + depends on BR2_USE_WCHAR + help + The libunistring library provides functions for manipulating + Unicode strings and for manipulating C strings according to + the Unicode standard. + + http://www.gnu.org/software/libunistring/ + +comment "libunistring needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR diff --git a/package/libunistring/libunistring.hash b/package/libunistring/libunistring.hash new file mode 100644 index 00000000..2e4595b1 --- /dev/null +++ b/package/libunistring/libunistring.hash @@ -0,0 +1,6 @@ +# Locally calculated after checking pgp signature +# https://ftp.gnu.org/gnu/libunistring/libunistring-0.9.10.tar.xz.sig +sha256 eb8fb2c3e4b6e2d336608377050892b54c3c983b646c561836550863003c05d7 libunistring-0.9.10.tar.xz +# Locally calculated +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING +sha256 a853c2ffec17057872340eee242ae4d96cbf2b520ae27d903e1b2fef1a5f9d1c COPYING.LIB diff --git a/package/libunistring/libunistring.mk b/package/libunistring/libunistring.mk new file mode 100644 index 00000000..1ed7ecf9 --- /dev/null +++ b/package/libunistring/libunistring.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libunistring +# +################################################################################ + +LIBUNISTRING_VERSION = 0.9.10 +LIBUNISTRING_SITE = $(BR2_GNU_MIRROR)/libunistring +LIBUNISTRING_SOURCE = libunistring-$(LIBUNISTRING_VERSION).tar.xz +LIBUNISTRING_INSTALL_STAGING = YES +LIBUNISTRING_LICENSE = LGPL-3.0+ or GPL-2.0 +LIBUNISTRING_LICENSE_FILES = COPYING COPYING.LIB +LIBUNISTRING_CPE_ID_VENDOR = gnu + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libunwind/0001-Add-AO_REQUIRE_CAS-to-fix-build-on-ARM-v6.patch b/package/libunwind/0001-Add-AO_REQUIRE_CAS-to-fix-build-on-ARM-v6.patch new file mode 100644 index 00000000..2a37ed77 --- /dev/null +++ b/package/libunwind/0001-Add-AO_REQUIRE_CAS-to-fix-build-on-ARM-v6.patch @@ -0,0 +1,56 @@ +From 24484e80b3e329c9edee1995e102f8612eedb79c Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 13 May 2014 23:32:27 +0200 +Subject: [PATCH] Add AO_REQUIRE_CAS to fix build on ARM < v6 + +ARM earlier than ARMv6, such as ARMv4 and ARMv5 do not provide +optimize atomic operations in libatomic_ops. Since libunwind is using +such operations, it should define AO_REQUIRE_CAS before including + so that libatomic_ops knows it should use emulated +atomic operations instead (even though they are obviously a lot more +expensive). + +Also, while real atomic operations are all inline functions and +therefore linking against libatomic_ops was not required, the emulated +atomic operations actually require linking against libatomic_ops, so +the commented AC_CHECK_LIB test in acinclude.m4 is uncommented to make +sure we link against libatomic_ops. + +Signed-off-by: Thomas Petazzoni +--- + acinclude.m4 | 8 +------- + include/libunwind_i.h | 1 + + 2 files changed, 2 insertions(+), 7 deletions(-) + +diff --git a/acinclude.m4 b/acinclude.m4 +index 497f7c2..9c15af1 100644 +--- a/acinclude.m4 ++++ b/acinclude.m4 +@@ -22,11 +22,5 @@ fi]) + AC_DEFUN([CHECK_ATOMIC_OPS], + [dnl Check whether the system has the atomic_ops package installed. + AC_CHECK_HEADERS(atomic_ops.h) +-# +-# Don't link against libatomic_ops for now. We don't want libunwind +-# to depend on libatomic_ops.so. Fortunately, none of the platforms +-# we care about so far need libatomic_ops.a (everything is done via +-# inline macros). +-# +-# AC_CHECK_LIB(atomic_ops, main) ++ AC_CHECK_LIB(atomic_ops, main) + ]) +diff --git a/include/libunwind_i.h b/include/libunwind_i.h +index 23f615e..deabdfd 100644 +--- a/include/libunwind_i.h ++++ b/include/libunwind_i.h +@@ -95,6 +95,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + (pthread_mutex_unlock != NULL ? pthread_mutex_unlock (l) : 0) + + #ifdef HAVE_ATOMIC_OPS_H ++# define AO_REQUIRE_CAS + # include + static inline int + cmpxchg_ptr (void *addr, void *old, void *new) +-- +1.9.2 + diff --git a/package/libunwind/Config.in b/package/libunwind/Config.in new file mode 100644 index 00000000..5284b586 --- /dev/null +++ b/package/libunwind/Config.in @@ -0,0 +1,36 @@ +# libunwind is only available for a certain subset of the +# architectures (as visible in the list of architectures supported +# with the glibc C library below). +# +# In addition to this, on some architectures libunwind requires the +# *context() function from the C library, which are only available on +# certain architectures in uClibc, and not available at all on +# musl. But on some other architectures, libunwind works without using +# the *context() functions, which allows it to be built with musl. +config BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS + bool + default y if BR2_TOOLCHAIN_USES_GLIBC && \ + (BR2_ARM_CPU_HAS_ARM || BR2_aarch64 || BR2_mips || BR2_mipsel || \ + BR2_mips64 || BR2_mips64el || BR2_powerpc || BR2_sh || \ + BR2_i386 || BR2_x86_64) + default y if BR2_TOOLCHAIN_USES_UCLIBC && \ + (BR2_ARM_CPU_HAS_ARM || BR2_mips || BR2_mipsel || \ + BR2_mips64 || BR2_mips64el || BR2_x86_64) + default y if BR2_TOOLCHAIN_USES_MUSL && \ + (BR2_ARM_CPU_HAS_ARM || BR2_aarch64 || BR2_x86_64) + +config BR2_PACKAGE_LIBUNWIND + bool "libunwind" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS + # forcefully links against libgcc_s, only available in dynamic + # linking configurations + depends on !BR2_STATIC_LIBS + help + C API to determine the call-chain of a program. + + http://www.nongnu.org/libunwind/index.html + +comment "libunwind needs a toolchain w/ threads, dynamic library" + depends on BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/libunwind/libunwind.hash b/package/libunwind/libunwind.hash new file mode 100644 index 00000000..de00c599 --- /dev/null +++ b/package/libunwind/libunwind.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +sha256 90337653d92d4a13de590781371c604f9031cdb50520366aa1e3a91e1efb1017 libunwind-1.5.0.tar.gz + +# Hash for license file +sha256 6a0dbbdaec2b3136b7bf045586f4212bdf74e7af688bf9dfe9154607cf5ec156 COPYING diff --git a/package/libunwind/libunwind.mk b/package/libunwind/libunwind.mk new file mode 100644 index 00000000..abdec867 --- /dev/null +++ b/package/libunwind/libunwind.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# libunwind +# +################################################################################ + +LIBUNWIND_VERSION = 1.5.0 +LIBUNWIND_SITE = http://download.savannah.gnu.org/releases/libunwind +LIBUNWIND_INSTALL_STAGING = YES +LIBUNWIND_LICENSE_FILES = COPYING +LIBUNWIND_LICENSE = MIT +LIBUNWIND_AUTORECONF = YES + +LIBUNWIND_CONF_OPTS = \ + --disable-tests \ + $(if $(BR2_INSTALL_LIBSTDCPP),--enable-cxx-exceptions,--disable-cxx-exceptions) + +ifeq ($(BR2_PACKAGE_LIBATOMIC_OPS),y) +LIBUNWIND_DEPENDENCIES = libatomic_ops +endif + +$(eval $(autotools-package)) diff --git a/package/libupnp/Config.in b/package/libupnp/Config.in new file mode 100644 index 00000000..7c6c3760 --- /dev/null +++ b/package/libupnp/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_LIBUPNP + bool "libupnp" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + The portable SDK for UPnP(tm) Devices (libupnp) provides + developers with an API and open source code for building + control points, devices, and bridges that are compliant with + Version 1.0 of the Universal Plug and Play Device Architecture + Specification + + http://pupnp.sourceforge.net/ + +comment "libupnp needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libupnp/libupnp.hash b/package/libupnp/libupnp.hash new file mode 100644 index 00000000..e4858fdc --- /dev/null +++ b/package/libupnp/libupnp.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 3168f676352e2a6e45afd6ea063721ed674c99f555394903fbd23f7f54f0a503 libupnp-1.14.6.tar.bz2 +sha256 c8b99423cad48bb44e2cf52a496361404290865eac259a82da6d1e4331ececb3 COPYING diff --git a/package/libupnp/libupnp.mk b/package/libupnp/libupnp.mk new file mode 100644 index 00000000..e8ece465 --- /dev/null +++ b/package/libupnp/libupnp.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# libupnp +# +################################################################################ + +LIBUPNP_VERSION = 1.14.6 +LIBUPNP_SOURCE = libupnp-$(LIBUPNP_VERSION).tar.bz2 +LIBUPNP_SITE = \ + http://downloads.sourceforge.net/project/pupnp/release-$(LIBUPNP_VERSION) +LIBUPNP_CONF_ENV = ac_cv_lib_compat_ftime=no +LIBUPNP_INSTALL_STAGING = YES +LIBUPNP_LICENSE = BSD-3-Clause +LIBUPNP_LICENSE_FILES = COPYING +LIBUPNP_CPE_ID_VENDOR = libupnp_project +LIBUPNP_DEPENDENCIES = host-pkgconf + +# Bind the internal miniserver socket with reuseaddr to allow clean restarts. +LIBUPNP_CONF_OPTS += \ + --disable-samples \ + --enable-reuseaddr + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +LIBUPNP_CONF_OPTS += --enable-open-ssl +LIBUPNP_DEPENDENCIES += openssl +else +LIBUPNP_CONF_OPTS += --disable-open-ssl +endif + +$(eval $(autotools-package)) diff --git a/package/libupnpp/Config.in b/package/libupnpp/Config.in new file mode 100644 index 00000000..41afa930 --- /dev/null +++ b/package/libupnpp/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_LIBUPNPP + bool "libupnpp" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS # libnpupnp + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + select BR2_PACKAGE_EXPAT + select BR2_PACKAGE_LIBCURL + select BR2_PACKAGE_LIBNPUPNP + help + The libupnpp C++ library wraps libupnp for easier use by + upmpdcli and upplay. + + http://www.lesbonscomptes.com/upmpdcli/ + +comment "libupnpp needs a toolchain w/ C++, threads, gcc >= 4.9" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/libupnpp/libupnpp.hash b/package/libupnpp/libupnpp.hash new file mode 100644 index 00000000..ae79cfe8 --- /dev/null +++ b/package/libupnpp/libupnpp.hash @@ -0,0 +1,5 @@ +# Hash from: http://www.lesbonscomptes.com/upmpdcli/downloads/libupnpp-0.20.2.tar.gz.sha256 +sha256 48c2cc7b5a3eef55f4dddda88d8676ed11f7e88f1d6680c8458512067a0e0a11 libupnpp-0.20.2.tar.gz + +# Hash for license file: +sha256 00a89b0d18aacd4114decf79122db87bf35bddaf2bc50e383c9c9f4c263390b2 COPYING diff --git a/package/libupnpp/libupnpp.mk b/package/libupnpp/libupnpp.mk new file mode 100644 index 00000000..4ee98b01 --- /dev/null +++ b/package/libupnpp/libupnpp.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libupnpp +# +################################################################################ + +LIBUPNPP_VERSION = 0.20.2 +LIBUPNPP_SITE = http://www.lesbonscomptes.com/upmpdcli/downloads +LIBUPNPP_LICENSE = LGPL-2.1+ +LIBUPNPP_LICENSE_FILES = COPYING +LIBUPNPP_INSTALL_STAGING = YES +LIBUPNPP_DEPENDENCIES = host-pkgconf expat libcurl libnpupnp + +$(eval $(autotools-package)) diff --git a/package/liburcu/0001-Only-blacklist-ARM-gcc-4.8.0-and-4.8.1.patch b/package/liburcu/0001-Only-blacklist-ARM-gcc-4.8.0-and-4.8.1.patch new file mode 100644 index 00000000..658e1721 --- /dev/null +++ b/package/liburcu/0001-Only-blacklist-ARM-gcc-4.8.0-and-4.8.1.patch @@ -0,0 +1,40 @@ +From 54d8fe7ae40902d6d38e670f4024092f53c14e1f Mon Sep 17 00:00:00 2001 +From: Samuel Martin +Date: Sat, 8 Mar 2014 13:19:14 +0100 +Subject: [PATCH] Only blacklist ARM gcc 4.8.0 and 4.8.1 + +Since many ARM toolchain providers include the bug fix for PR58854 in +their latest releases based on gcc-4.8.2, then only blacklist gcc 4.8.0 +and 4.8.1. + +Signed-off-by: Samuel Martin +--- + urcu/compiler.h | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/include/urcu/compiler.h b/include/urcu/compiler.h +index 1e30903..56115f1 100644 +--- a/include/urcu/compiler.h ++++ b/include/urcu/compiler.h +@@ -118,10 +118,17 @@ + + __GNUC_PATCHLEVEL__) + + /* ++ * Official gcc releases from 4.8.0 to 4.8.2 have the following bug, ++ * however, many arm toolchain providers have the included the fix for ++ * their latest 4.8.2 releases. ++ * So, we only blacklist gcc 4.8.0 and 4.8.1. ++ * Unfortunately, this bug is not easy to test, so we rely on the ++ * knowledge of the user on its compiler. ++ * + * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58854 + */ + # ifdef __ARMEL__ +-# if URCU_GCC_VERSION >= 40800 && URCU_GCC_VERSION <= 40802 ++# if URCU_GCC_VERSION >= 40800 && URCU_GCC_VERSION <= 40801 + # error Your gcc version produces clobbered frame accesses + # endif + # endif +-- +1.9.0 + diff --git a/package/liburcu/Config.in b/package/liburcu/Config.in new file mode 100644 index 00000000..5dc85289 --- /dev/null +++ b/package/liburcu/Config.in @@ -0,0 +1,30 @@ +config BR2_PACKAGE_LIBURCU_ARCH_SUPPORTS + bool + default y + depends on BR2_arm || BR2_armeb || BR2_aarch64 || BR2_aarch64_be || \ + BR2_i386 || BR2_mips || BR2_mips64 || BR2_mipsel || \ + BR2_mips64el || BR2_nios2 || BR2_powerpc || BR2_powerpc64 || \ + BR2_powerpc64le || BR2_riscv || BR2_sparc64 || BR2_s390x || BR2_x86_64 + depends on BR2_USE_MMU # fork() in test + +config BR2_PACKAGE_LIBURCU + bool "liburcu" + depends on BR2_PACKAGE_LIBURCU_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Userspace implementation of the Read-Copy-Update (RCU) + synchronization mechanism. This library is mainly used by + the LTTng tracing infrastructure, but can be used for other + purposes as well. + + On ARM, because of bug: + http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58854 + liburcu cannot be built using gcc 4.8.0, 4.8.1 or 4.8.2 + without the following bug fix: + http://gcc.gnu.org/viewcvs/gcc?view=revision&revision=204665 + + http://lttng.org/urcu + +comment "liburcu needs a toolchain w/ threads" + depends on BR2_PACKAGE_LIBURCU_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/liburcu/liburcu.hash b/package/liburcu/liburcu.hash new file mode 100644 index 00000000..da7d12a7 --- /dev/null +++ b/package/liburcu/liburcu.hash @@ -0,0 +1,8 @@ +# http://www.lttng.org/files/urcu/userspace-rcu-0.12.1.tar.bz2.sha256 +sha256 bbfaead0345642b97e0de90f889dfbab4b2643a6a5e5c6bb59cd0d26fc0bcd0e userspace-rcu-0.12.1.tar.bz2 + +# Hash for license files +sha256 36b6d3fa47916943fd5fec313c584784946047ec1337a78b440e5992cb595f89 lgpl-2.1.txt +sha256 8ef8121eddd2fc0779d94331a1d0f1ead9c796343d845e564cd8c8c4ae3d6f6e lgpl-relicensing.txt +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 gpl-2.0.txt +sha256 e8c070cb093be4b2eaf938a5f1c11621163b2d9cfa2790460cf925d81e442fa7 LICENSE diff --git a/package/liburcu/liburcu.mk b/package/liburcu/liburcu.mk new file mode 100644 index 00000000..fa2ad0de --- /dev/null +++ b/package/liburcu/liburcu.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# liburcu +# +################################################################################ + +LIBURCU_VERSION = 0.12.1 +LIBURCU_SITE = http://lttng.org/files/urcu +LIBURCU_SOURCE = userspace-rcu-$(LIBURCU_VERSION).tar.bz2 +LIBURCU_LICENSE = LGPL-2.1+ (library), MIT-like (few source files listed in LICENSE), GPL-2.0+ (test), GPL-3.0 (few *.m4 files) +LIBURCU_LICENSE_FILES = lgpl-2.1.txt lgpl-relicensing.txt gpl-2.0.txt LICENSE + +LIBURCU_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/liburiparser/Config.in b/package/liburiparser/Config.in new file mode 100644 index 00000000..b39e3907 --- /dev/null +++ b/package/liburiparser/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBURIPARSER + bool "liburiparser" + help + uriparser is a strictly RFC 3986 compliant URI parsing and + handling library written in C. + + https://uriparser.github.io diff --git a/package/liburiparser/liburiparser.hash b/package/liburiparser/liburiparser.hash new file mode 100644 index 00000000..feb59458 --- /dev/null +++ b/package/liburiparser/liburiparser.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 b7cdabe5611408fc2c3a10f8beecb881a0c7e93ff669c578cd9e3e6d64b8f87b uriparser-0.9.4.tar.bz2 +sha256 287f09e6546a9610f949f89e8fb937cacfeabd7bfaa8c8a0c18312193bf04ad3 COPYING diff --git a/package/liburiparser/liburiparser.mk b/package/liburiparser/liburiparser.mk new file mode 100644 index 00000000..4ba1e051 --- /dev/null +++ b/package/liburiparser/liburiparser.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# liburiparser +# +################################################################################ + +LIBURIPARSER_VERSION = 0.9.4 +LIBURIPARSER_SOURCE = uriparser-$(LIBURIPARSER_VERSION).tar.bz2 +LIBURIPARSER_SITE = https://github.com/uriparser/uriparser/releases/download/uriparser-$(LIBURIPARSER_VERSION) +LIBURIPARSER_LICENSE = BSD-3-Clause +LIBURIPARSER_LICENSE_FILES = COPYING +LIBURIPARSER_CPE_ID_VENDOR = uriparser_project +LIBURIPARSER_CPE_ID_PRODUCT = uriparser +LIBURIPARSER_INSTALL_STAGING = YES +LIBURIPARSER_CONF_OPTS = -DURIPARSER_BUILD_DOCS=OFF -DURIPARSER_BUILD_TESTS=OFF + +ifeq ($(BR2_SHARED_LIBS)$(BR2_SHARED_STATIC_LIBS),y) +LIBURIPARSER_CONF_OPTS += -DBUILD_SHARED_LIBS=ON +else +LIBURIPARSER_CONF_OPTS += -DBUILD_SHARED_LIBS=OFF +endif + +ifeq ($(BR2_USE_WCHAR),) +LIBURIPARSER_CONF_OPTS += -DURIPARSER_BUILD_WCHAR_T=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/libusb-compat/0001-fix-a-build-issue-on-linux.patch b/package/libusb-compat/0001-fix-a-build-issue-on-linux.patch new file mode 100644 index 00000000..d2e26b32 --- /dev/null +++ b/package/libusb-compat/0001-fix-a-build-issue-on-linux.patch @@ -0,0 +1,32 @@ +From af07587e8775c25450cda8ba9e9a8b1a58072634 Mon Sep 17 00:00:00 2001 +From: Bartosz Golaszewski +Date: Mon, 3 Jul 2017 15:55:00 +0200 +Subject: [PATCH] fix a build issue on linux + +On linux PATH_MAX is defined in linux/limits.h. If we include usb.h +without previously having indirectly included it, the build fails. + +Signed-off-by: Bartosz Golaszewski +--- + libusb/usb.h | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/libusb/usb.h b/libusb/usb.h +index d2c30aa..7ad9a66 100644 +--- a/libusb/usb.h ++++ b/libusb/usb.h +@@ -41,6 +41,11 @@ typedef unsigned __int32 uint32_t; + #include + #endif + ++/* On linux PATH_MAX is defined in linux/limits.h. */ ++#if defined(__linux__) ++#include ++#endif ++ + /* + * USB spec information + * +-- +2.9.3 + diff --git a/package/libusb-compat/Config.in b/package/libusb-compat/Config.in new file mode 100644 index 00000000..076d7b8d --- /dev/null +++ b/package/libusb-compat/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LIBUSB_COMPAT + bool "libusb-compat" + depends on BR2_PACKAGE_LIBUSB + help + libusb-0.1 compatibility layer for libusb-1.0. + + http://libusb.info/ diff --git a/package/libusb-compat/libusb-compat.hash b/package/libusb-compat/libusb-compat.hash new file mode 100644 index 00000000..3acf3c34 --- /dev/null +++ b/package/libusb-compat/libusb-compat.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 8259f8d5b084fe43c47823a939e955e0ba21942b8d112266c39d228cc14764d6 libusb-compat-0.1.7.tar.bz2 +sha256 5df07007198989c622f5d41de8d703e7bef3d0e79d62e24332ee739a452af62a COPYING diff --git a/package/libusb-compat/libusb-compat.mk b/package/libusb-compat/libusb-compat.mk new file mode 100644 index 00000000..7c87b3c9 --- /dev/null +++ b/package/libusb-compat/libusb-compat.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# libusb-compat +# +################################################################################ + +LIBUSB_COMPAT_VERSION_MAJOR = 0.1 +LIBUSB_COMPAT_VERSION = $(LIBUSB_COMPAT_VERSION_MAJOR).7 +LIBUSB_COMPAT_SOURCE = libusb-compat-$(LIBUSB_COMPAT_VERSION).tar.bz2 +LIBUSB_COMPAT_SITE = https://github.com/libusb/libusb-compat-0.1/releases/download/v$(LIBUSB_COMPAT_VERSION) +LIBUSB_COMPAT_DEPENDENCIES = host-pkgconf libusb +HOST_LIBUSB_COMPAT_DEPENDENCIES = host-pkgconf host-libusb +LIBUSB_COMPAT_INSTALL_STAGING = YES +LIBUSB_COMPAT_CONFIG_SCRIPTS = libusb-config +LIBUSB_COMPAT_LICENSE = LGPL-2.1+ +LIBUSB_COMPAT_LICENSE_FILES = COPYING + +ifeq ($(BR2_STATIC_LIBS),) +LIBUSB_COMPAT_CONF_ENV += \ + LIBUSB_1_0_SONAME=`LC_ALL=C readelf -d $(STAGING_DIR)/usr/lib/libusb-1.0.so \ + |sed -r -e '/\(SONAME\)/!d; s/.*\[(.+)\]$$/\1/'` +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libusb/0001-linux_usbfs-Fix-parsing-of-descriptors-for-multi-con.patch b/package/libusb/0001-linux_usbfs-Fix-parsing-of-descriptors-for-multi-con.patch new file mode 100644 index 00000000..601b322e --- /dev/null +++ b/package/libusb/0001-linux_usbfs-Fix-parsing-of-descriptors-for-multi-con.patch @@ -0,0 +1,62 @@ +From 623e2a995d156e115c91f56a3ec691bdc333df8b Mon Sep 17 00:00:00 2001 +From: Chris Dickens +Date: Sun, 13 Dec 2020 15:49:19 -0800 +Subject: [PATCH 1/1] linux_usbfs: Fix parsing of descriptors for + multi-configuration devices + +Commit e2be556bd2 ("linux_usbfs: Parse config descriptors during device +initialization") introduced a regression for devices with multiple +configurations. The logic that verifies the reported length of the +configuration descriptors failed to count the length of the +configuration descriptor itself and would truncate the actual length by +9 bytes, leading to a parsing error for subsequent descriptors. + +Closes #825 + +Signed-off-by: Chris Dickens +(cherry picked from commit f6d2cb561402c3b6d3627c0eb89e009b503d9067) +Signed-off-by: John Keeping +--- + libusb/os/linux_usbfs.c | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +diff --git a/libusb/os/linux_usbfs.c b/libusb/os/linux_usbfs.c +index fb2ed53..4d2dc8d 100644 +--- a/libusb/os/linux_usbfs.c ++++ b/libusb/os/linux_usbfs.c +@@ -641,7 +641,12 @@ static int seek_to_next_config(struct libusb_context *ctx, + uint8_t *buffer, size_t len) + { + struct usbi_descriptor_header *header; +- int offset = 0; ++ int offset; ++ ++ /* Start seeking past the config descriptor */ ++ offset = LIBUSB_DT_CONFIG_SIZE; ++ buffer += LIBUSB_DT_CONFIG_SIZE; ++ len -= LIBUSB_DT_CONFIG_SIZE; + + while (len > 0) { + if (len < 2) { +@@ -718,7 +723,7 @@ static int parse_config_descriptors(struct libusb_device *dev) + } + + if (priv->sysfs_dir) { +- /* ++ /* + * In sysfs wTotalLength is ignored, instead the kernel returns a + * config descriptor with verified bLength fields, with descriptors + * with an invalid bLength removed. +@@ -727,8 +732,7 @@ static int parse_config_descriptors(struct libusb_device *dev) + int offset; + + if (num_configs > 1 && idx < num_configs - 1) { +- offset = seek_to_next_config(ctx, buffer + LIBUSB_DT_CONFIG_SIZE, +- remaining - LIBUSB_DT_CONFIG_SIZE); ++ offset = seek_to_next_config(ctx, buffer, remaining); + if (offset < 0) + return offset; + sysfs_config_len = (uint16_t)offset; +-- +2.30.1 + diff --git a/package/libusb/Config.in b/package/libusb/Config.in new file mode 100644 index 00000000..5a04ac12 --- /dev/null +++ b/package/libusb/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_LIBUSB + bool "libusb" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # _Thread_local + help + Userspace library for accessing USB devices + + http://libusb.info/ + +if BR2_PACKAGE_LIBUSB + +config BR2_PACKAGE_LIBUSB_EXAMPLES + bool "build libusb examples" + +endif + +comment "libusb needs a toolchain w/ threads, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/libusb/libusb.hash b/package/libusb/libusb.hash new file mode 100644 index 00000000..6169a186 --- /dev/null +++ b/package/libusb/libusb.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 7efd2685f7b327326dcfb85cee426d9b871fd70e22caa15bb68d595ce2a2b12a libusb-1.0.24.tar.bz2 +sha256 5df07007198989c622f5d41de8d703e7bef3d0e79d62e24332ee739a452af62a COPYING diff --git a/package/libusb/libusb.mk b/package/libusb/libusb.mk new file mode 100644 index 00000000..28efcade --- /dev/null +++ b/package/libusb/libusb.mk @@ -0,0 +1,38 @@ +################################################################################ +# +# libusb +# +################################################################################ + +LIBUSB_VERSION_MAJOR = 1.0 +LIBUSB_VERSION = $(LIBUSB_VERSION_MAJOR).24 +LIBUSB_SOURCE = libusb-$(LIBUSB_VERSION).tar.bz2 +LIBUSB_SITE = https://github.com/libusb/libusb/releases/download/v$(LIBUSB_VERSION) +LIBUSB_LICENSE = LGPL-2.1+ +LIBUSB_LICENSE_FILES = COPYING +LIBUSB_CPE_ID_VENDOR = libusb +LIBUSB_DEPENDENCIES = host-pkgconf +LIBUSB_INSTALL_STAGING = YES + +# Avoid the discovery of udev for the host variant +HOST_LIBUSB_CONF_OPTS = --disable-udev +HOST_LIBUSB_DEPENDENCIES = host-pkgconf + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +LIBUSB_DEPENDENCIES += udev +else +LIBUSB_CONF_OPTS += --disable-udev +endif + +ifeq ($(BR2_PACKAGE_LIBUSB_EXAMPLES),y) +LIBUSB_CONF_OPTS += --enable-examples-build +define LIBUSB_INSTALL_TARGET_EXAMPLES + $(foreach example,listdevs xusb fxload hotplugtest testlibusb dpfp dpfp_threaded sam3u_benchmark, + $(INSTALL) -D -m0755 $(@D)/examples/$(example) $(TARGET_DIR)/usr/bin/$(example) + ) +endef +LIBUSB_POST_INSTALL_TARGET_HOOKS += LIBUSB_INSTALL_TARGET_EXAMPLES +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libusbgx/0001-Add-include-of-sys-sysmacro.h.patch b/package/libusbgx/0001-Add-include-of-sys-sysmacro.h.patch new file mode 100644 index 00000000..0f47454f --- /dev/null +++ b/package/libusbgx/0001-Add-include-of-sys-sysmacro.h.patch @@ -0,0 +1,98 @@ +From 45c14ef4d5d7ced0fbf984208de44ced6d5ed898 Mon Sep 17 00:00:00 2001 +From: Gwenhael Goavec-Merou +Date: Mon, 10 Sep 2018 15:52:09 +0200 +Subject: [PATCH] libusbgx: fix build with glibc-2.28 since + is no more included by + +Since https://sourceware.org/ml/libc-alpha/2015-11/msg00253.html sys/sysmacros.h +must be explicitly included. +Without sys/sysmacros.h and with glibc-2.28 build fails with error like: +src/.libs/libusbgx.so: undefined reference to minor' src/.libs/libusbgx.so: undefined reference tomajor' +src/.libs/libusbgx.so: undefined reference to `makedev' + +Signed-off-by: Sid Spry +Signed-off-by: Gwenhael Goavec-Merou +--- + examples/gadget-acm-ecm.c | 1 + + examples/gadget-import.c | 1 + + examples/gadget-ms.c | 1 + + examples/show-gadgets.c | 1 + + examples/show-udcs.c | 1 + + include/usbg/usbg_internal_libconfig.h | 1 + + 6 files changed, 6 insertions(+) + +diff --git a/examples/gadget-acm-ecm.c b/examples/gadget-acm-ecm.c +index 1c5e2ca..29360da 100644 +--- a/examples/gadget-acm-ecm.c ++++ b/examples/gadget-acm-ecm.c +@@ -20,6 +20,7 @@ + + #include + #include ++#include + #include + #include + +diff --git a/examples/gadget-import.c b/examples/gadget-import.c +index e684fdb..63df449 100644 +--- a/examples/gadget-import.c ++++ b/examples/gadget-import.c +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + #include + + int main(int argc, char **argv) +diff --git a/examples/gadget-ms.c b/examples/gadget-ms.c +index 478c370..a5c6681 100644 +--- a/examples/gadget-ms.c ++++ b/examples/gadget-ms.c +@@ -23,6 +23,7 @@ + + #include + #include ++#include + #include + #include + #include +diff --git a/examples/show-gadgets.c b/examples/show-gadgets.c +index 707d448..a2a21c8 100644 +--- a/examples/show-gadgets.c ++++ b/examples/show-gadgets.c +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + #include + #include + #include +diff --git a/examples/show-udcs.c b/examples/show-udcs.c +index 66e950f..2f5cc45 100644 +--- a/examples/show-udcs.c ++++ b/examples/show-udcs.c +@@ -23,6 +23,7 @@ + + #include + #include ++#include + #include + + int main(void) +diff --git a/include/usbg/usbg_internal_libconfig.h b/include/usbg/usbg_internal_libconfig.h +index ac51758..3fa55c0 100644 +--- a/include/usbg/usbg_internal_libconfig.h ++++ b/include/usbg/usbg_internal_libconfig.h +@@ -12,6 +12,7 @@ + #ifndef USBG_INTERNAL_LIBCONFIG_H + #define USBG_INTERNAL_LIBCONFIG_H + ++#include + #include + #ifdef __cplusplus + extern "C" { +-- +2.16.4 + diff --git a/package/libusbgx/Config.in b/package/libusbgx/Config.in new file mode 100644 index 00000000..fcebf3cf --- /dev/null +++ b/package/libusbgx/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LIBUSBGX + bool "libusbgx" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_LIBCONFIG + help + libusbgx is a C library encapsulating the kernel USB + gadget-configfs userspace API functionality. + + https://github.com/libusbgx/libusbgx + +comment "libusbgx needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libusbgx/libusbgx.hash b/package/libusbgx/libusbgx.hash new file mode 100644 index 00000000..dd43ec7b --- /dev/null +++ b/package/libusbgx/libusbgx.hash @@ -0,0 +1,4 @@ +# Locally computed: +sha256 b15abc89a0ef82c6a650cc1d58b5ba50f7ce076db392add84caabcd86c608ee2 libusbgx-0.2.0.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LGPL diff --git a/package/libusbgx/libusbgx.mk b/package/libusbgx/libusbgx.mk new file mode 100644 index 00000000..516ad259 --- /dev/null +++ b/package/libusbgx/libusbgx.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# libusbgx +# +################################################################################ + +LIBUSBGX_VERSION = 0.2.0 +LIBUSBGX_SITE = $(call github,libusbgx,libusbgx,libusbgx-v$(LIBUSBGX_VERSION)) +LIBUSBGX_LICENSE = GPL-2.0+ (examples), LGPL-2.1+ (library) +LIBUSBGX_LICENSE_FILES = COPYING COPYING.LGPL +LIBUSBGX_DEPENDENCIES = host-pkgconf libconfig +LIBUSBGX_AUTORECONF = YES +LIBUSBGX_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/libuv/Config.in b/package/libuv/Config.in new file mode 100644 index 00000000..cdd73a67 --- /dev/null +++ b/package/libuv/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_LIBUV + bool "libuv" + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # pthread_barrier_* + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + help + libuv is a multi-platform support library with a focus + on asynchronous I/O. + + https://github.com/libuv/libuv + +comment "libuv needs a toolchain w/ NPTL, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIBS + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 diff --git a/package/libuv/libuv.hash b/package/libuv/libuv.hash new file mode 100644 index 00000000..c682affa --- /dev/null +++ b/package/libuv/libuv.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 70fe1c9ba4f2c509e8166c0ca2351000237da573bb6c82092339207a9715ba6b libuv-1.40.0.tar.gz +sha256 6d20216ae022fbeed23916f48508fd807ece3d8464992330643b0e64e5c0c24b LICENSE diff --git a/package/libuv/libuv.mk b/package/libuv/libuv.mk new file mode 100644 index 00000000..403a0490 --- /dev/null +++ b/package/libuv/libuv.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# libuv +# +################################################################################ + +# When bumping libuv, check if a new version of uvw is available +# and bump it too. +LIBUV_VERSION = 1.40.0 +LIBUV_SITE = $(call github,libuv,libuv,v$(LIBUV_VERSION)) +LIBUV_DEPENDENCIES = host-pkgconf +LIBUV_INSTALL_STAGING = YES +LIBUV_AUTORECONF = YES +LIBUV_LICENSE = BSD-2-Clause, BSD-3-Clause, ISC, MIT +LIBUV_LICENSE_FILES = LICENSE +LIBUV_CPE_ID_VENDOR = libuv + +# Upstream needs tests to be run sequentially. This is the default in +# automake 1.11 and before, but not starting in 1.12. To maintain +# sequentiality in 1.12 and later, the automake option 'serial-tests' +# must be used, Unfortunately, it is not recognised by 1.11 and +# before. So upstream only adds it conditionally. We use automake +# 1.14, so we need it. +define LIBUV_FIXUP_AUTOGEN + echo "m4_define([UV_EXTRA_AUTOMAKE_FLAGS], [serial-tests])" \ + >$(@D)/m4/libuv-extra-automake-flags.m4 +endef +LIBUV_POST_PATCH_HOOKS += LIBUV_FIXUP_AUTOGEN + +$(eval $(autotools-package)) diff --git a/package/libuwsc/0001-CMakeLists.txt-add-BUILD_EXAMPLE.patch b/package/libuwsc/0001-CMakeLists.txt-add-BUILD_EXAMPLE.patch new file mode 100644 index 00000000..197dd1de --- /dev/null +++ b/package/libuwsc/0001-CMakeLists.txt-add-BUILD_EXAMPLE.patch @@ -0,0 +1,34 @@ +From bb71b21eb9407479ad729b3c858b0fc350fae335 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 21 Feb 2021 19:39:59 +0100 +Subject: [PATCH] CMakeLists.txt: add BUILD_EXAMPLE + +Allow the user to disable example + +Signed-off-by: Fabrice Fontaine +[yann.morin.1998@free.fr: backport from upstream] +Signed-off-by: Yann E. MORIN +--- + CMakeLists.txt | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 110d933..c52ab79 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -2,7 +2,11 @@ cmake_minimum_required(VERSION 2.8) + + project(libuwsc C) + ++option(BUILD_EXAMPLE "Build example" ON) ++ + list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules/") + + add_subdirectory(src) +-add_subdirectory(example) ++if(BUILD_EXAMPLE) ++ add_subdirectory(example) ++endif() +-- +2.25.1 + diff --git a/package/libuwsc/Config.in b/package/libuwsc/Config.in new file mode 100644 index 00000000..ae99b6d2 --- /dev/null +++ b/package/libuwsc/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LIBUWSC + bool "libuwsc" + select BR2_PACKAGE_LIBEV + help + A Lightweight and fully asynchronous WebSocket client + library based on libev. + + https://github.com/zhaojh329/libuwsc diff --git a/package/libuwsc/libuwsc.hash b/package/libuwsc/libuwsc.hash new file mode 100644 index 00000000..f99dfb4c --- /dev/null +++ b/package/libuwsc/libuwsc.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 a06b7324671e181ffe3165e93e6f94c7ac1380f69e32a52e80c8da7016acd60d libuwsc-3.3.5.tar.gz +sha256 99efed4bbc0b62f96f999ef23399e38234fb91651af734fd389a52b033a85b55 LICENSE diff --git a/package/libuwsc/libuwsc.mk b/package/libuwsc/libuwsc.mk new file mode 100644 index 00000000..cad35152 --- /dev/null +++ b/package/libuwsc/libuwsc.mk @@ -0,0 +1,53 @@ +################################################################################ +# +# libuwsc +# +################################################################################ + +LIBUWSC_VERSION = 3.3.5 +LIBUWSC_SITE = https://github.com/zhaojh329/libuwsc/releases/download/v$(LIBUWSC_VERSION) +LIBUWSC_LICENSE = MIT +LIBUWSC_LICENSE_FILES = LICENSE +LIBUWSC_INSTALL_STAGING = YES +LIBUWSC_DEPENDENCIES = libev + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +LIBUWSC_DEPENDENCIES += openssl +LIBUWSC_CONF_OPTS += \ + -DUWSC_SSL_SUPPORT=ON \ + -DUWSC_USE_MBEDTLS=OFF \ + -DUWSC_USE_OPENSSL=ON \ + -DUWSC_USE_WOLFSSL=OFF +else ifeq ($(BR2_PACKAGE_WOLFSSL),y) +LIBUWSC_DEPENDENCIES += wolfssl +LIBUWSC_CONF_OPTS += \ + -DUWSC_SSL_SUPPORT=ON \ + -DUWSC_USE_MBEDTLS=OFF \ + -DUWSC_USE_OPENSSL=OFF \ + -DUWSC_USE_WOLFSSL=ON +else ifeq ($(BR2_PACKAGE_MBEDTLS),y) +LIBUWSC_DEPENDENCIES += mbedtls +LIBUWSC_CONF_OPTS += \ + -DUWSC_SSL_SUPPORT=ON \ + -DUWSC_USE_MBEDTLS=ON \ + -DUWSC_USE_OPENSSL=OFF \ + -DUWSC_USE_WOLFSSL=OFF +else +LIBUWSC_CONF_OPTS += -DUWSC_SSL_SUPPORT=OFF +endif + +ifeq ($(BR2_PACKAGE_LUA):$(BR2_STATIC_LIBS),y:) +LIBUWSC_DEPENDENCIES += lua +LIBUWSC_CONF_OPTS += -DUWSC_LUA_SUPPORT=ON +else +LIBUWSC_CONF_OPTS += -DUWSC_LUA_SUPPORT=OFF +endif + +# BUILD_SHARED_LIBS is handled in pkg-cmake.mk as it is a generic cmake variable +ifeq ($(BR2_SHARED_STATIC_LIBS),y) +LIBUWSC_CONF_OPTS += -DBUILD_STATIC_LIBS=ON +else ifeq ($(BR2_SHARED_LIBS),y) +LIBUWSC_CONF_OPTS += -DBUILD_STATIC_LIBS=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/libv4l/0001-keymap.h-add-missing-includes-to-fix-musl-build.patch b/package/libv4l/0001-keymap.h-add-missing-includes-to-fix-musl-build.patch new file mode 100644 index 00000000..238f8fc3 --- /dev/null +++ b/package/libv4l/0001-keymap.h-add-missing-includes-to-fix-musl-build.patch @@ -0,0 +1,68 @@ +From baba68cdcb44fc11d0ba8ce2c13eb5b06bbd9b33 Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Wed, 30 Oct 2019 07:15:23 +0100 +Subject: [PATCH] keymap.h: add missing includes to fix musl build + +Needed to fix these build errors: + +In file included from keymap.c:13:0: +keymap.h:23:2: error: unknown type name 'u_int32_t' + u_int32_t scancode; + +keymap.h:36:1: error: unknown type name 'error_t' + error_t parse_keymap(char *fname, struct keymap **keymap, bool verbose); + +Signed-off-by: Bernd Kuhls +--- +Patch was not sent upstream due to broken mailing list setup: + +: host vger.kernel.org[209.132.180.67] said: 553 + 5.7.1 Hello [xx.xx.xx.xx], for your MAIL FROM address + policy analysis reported: Your address is not + liked source for email (in reply to MAIL FROM command) + +Hello [xx.xx.xx.xx], for your MAIL FROM address + policy analysis reported: Your address is not liked source for email + + utils/common/keymap.h | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/utils/common/keymap.h b/utils/common/keymap.h +index f2b29632..bb1edce9 100644 +--- a/utils/common/keymap.h ++++ b/utils/common/keymap.h +@@ -1,4 +1,8 @@ + /* SPDX-License-Identifier: GPL-2.0 */ ++ ++#include ++#include ++ + #ifndef __KEYMAP_H + #define __KEYMAP_H + +diff -uNr v4l-utils-1.18.0.orig/utils/ir-ctl/keymap.h v4l-utils-1.18.0/utils/ir-ctl/keymap.h +--- v4l-utils-1.18.0.orig/utils/ir-ctl/keymap.h 2019-09-22 11:22:54.000000000 +0200 ++++ v4l-utils-1.18.0/utils/ir-ctl/keymap.h 2019-10-30 07:06:18.250548011 +0100 +@@ -1,4 +1,8 @@ + /* SPDX-License-Identifier: GPL-2.0 */ ++ ++#include ++#include ++ + #ifndef __KEYMAP_H + #define __KEYMAP_H + +diff -uNr v4l-utils-1.18.0.orig/utils/keytable/keymap.h v4l-utils-1.18.0/utils/keytable/keymap.h +--- v4l-utils-1.18.0.orig/utils/keytable/keymap.h 2019-09-22 11:22:54.000000000 +0200 ++++ v4l-utils-1.18.0/utils/keytable/keymap.h 2019-10-30 07:06:56.218816126 +0100 +@@ -1,4 +1,8 @@ + /* SPDX-License-Identifier: GPL-2.0 */ ++ ++#include ++#include ++ + #ifndef __KEYMAP_H + #define __KEYMAP_H + +-- +2.20.1 diff --git a/package/libv4l/Config.in b/package/libv4l/Config.in new file mode 100644 index 00000000..57ddde1d --- /dev/null +++ b/package/libv4l/Config.in @@ -0,0 +1,42 @@ +config BR2_PACKAGE_LIBV4L + bool "libv4l" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0 # media headers + select BR2_PACKAGE_ARGP_STANDALONE if BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_MUSL + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + libv4l is a collection of libraries which adds a thin + abstraction layer on top of video4linux2 devices. libv4l + consists of 3 different libraries: libv4lconvert, libv4l1 and + libv4l2. + + http://linuxtv.org/wiki/index.php/V4l-utils + +if BR2_PACKAGE_LIBV4L + +comment "libv4l JPEG support not enabled" + depends on !BR2_PACKAGE_JPEG + +config BR2_PACKAGE_LIBV4L_UTILS + bool "v4l-utils tools" + help + v4l-utils is a collection of various video4linux and DVB + utilities. + Enable this if you want to build the following tools: + - cx18-ctl + - dvb-fe-tool, dvbv5-zap, dvbv5-scan, dvb-format-convert + - decode_tm6000 + - ir-keytable + - media-ctl + - v4l2-compliance + - v4l2-ctl, cx18-ctl, ivtv-ctl + - v4l2-sysfs-path + - rds-ctl + - qv4l2 (if Qt is enabled) + +endif + +comment "libv4l needs a toolchain w/ threads, C++ and headers >= 3.0" + depends on !BR2_TOOLCHAIN_HAS_THREADS \ + || !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0 diff --git a/package/libv4l/libv4l.hash b/package/libv4l/libv4l.hash new file mode 100644 index 00000000..e45dd576 --- /dev/null +++ b/package/libv4l/libv4l.hash @@ -0,0 +1,9 @@ +# Locally calculated after checking signature +# https://linuxtv.org/downloads/v4l-utils/v4l-utils-1.20.0.tar.bz2.asc +# with key 05D0169C26E41593418129DF199A64FADFB500FF +sha256 956118713f7ccb405c55c7088a6a2490c32d54300dd9a30d8d5008c28d3726f7 v4l-utils-1.20.0.tar.bz2 + +# Locally calculated +sha256 391e4da1c54a422a78d83be7bf84b2dfb8bacdd8ad256fa4374e128655584a8a COPYING +sha256 5a7f623a50e384aaf6d2ced068339ddf93d0a50d3a0ecbe86f125b07804ecc78 COPYING.libv4l +sha256 34229b5aadfb768d0d083987cba54203a920904a3ec8320823c6125b9831acd1 lib/libv4l1/libv4l1-kernelcode-license.txt diff --git a/package/libv4l/libv4l.mk b/package/libv4l/libv4l.mk new file mode 100644 index 00000000..7b61823c --- /dev/null +++ b/package/libv4l/libv4l.mk @@ -0,0 +1,87 @@ +################################################################################ +# +# libv4l +# +################################################################################ + +LIBV4L_VERSION = 1.20.0 +LIBV4L_SOURCE = v4l-utils-$(LIBV4L_VERSION).tar.bz2 +LIBV4L_SITE = https://linuxtv.org/downloads/v4l-utils +LIBV4L_INSTALL_STAGING = YES +LIBV4L_DEPENDENCIES = host-pkgconf +LIBV4L_CONF_OPTS = --disable-doxygen-doc --disable-qvidcap +# needed to get utils/qv4l link flags right +LIBV4L_AUTORECONF = YES +# add host-gettext for AM_ICONV macro +LIBV4L_DEPENDENCIES += host-gettext + +# fix uclibc-ng configure/compile +LIBV4L_CONF_ENV = ac_cv_prog_cc_c99='-std=gnu99' + +# v4l-utils components have different licences, see v4l-utils.spec for details +LIBV4L_LICENSE = GPL-2.0+ (utilities), LGPL-2.1+ (libraries) +LIBV4L_LICENSE_FILES = COPYING COPYING.libv4l lib/libv4l1/libv4l1-kernelcode-license.txt + +ifeq ($(BR2_PACKAGE_ALSA_LIB),y) +LIBV4L_DEPENDENCIES += alsa-lib +endif + +ifeq ($(BR2_PACKAGE_ARGP_STANDALONE),y) +LIBV4L_DEPENDENCIES += argp-standalone +LIBV4L_LIBS += -largp +endif + +LIBV4L_DEPENDENCIES += $(if $(BR2_PACKAGE_LIBICONV),libiconv) + +ifeq ($(BR2_PACKAGE_JPEG),y) +LIBV4L_DEPENDENCIES += jpeg +LIBV4L_CONF_OPTS += --with-jpeg +else +LIBV4L_CONF_OPTS += --without-jpeg +endif + +ifeq ($(BR2_PACKAGE_HAS_LIBGL),y) +LIBV4L_DEPENDENCIES += libgl +endif + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +LIBV4L_CONF_OPTS += --with-udevdir=/usr/lib/udev +LIBV4L_DEPENDENCIES += udev +endif + +ifeq ($(BR2_PACKAGE_LIBGLU),y) +LIBV4L_DEPENDENCIES += libglu +endif + +ifeq ($(BR2_PACKAGE_LIBV4L_UTILS),y) +LIBV4L_CONF_OPTS += --enable-v4l-utils +LIBV4L_DEPENDENCIES += $(TARGET_NLS_DEPENDENCIES) + +# IR BPF decoder support needs toolchain with linux-headers >= 3.18 +# libelf and clang support +LIBV4L_CONF_OPTS += --disable-bpf + +ifeq ($(BR2_PACKAGE_QT5BASE)$(BR2_PACKAGE_QT5BASE_GUI)$(BR2_PACKAGE_QT5BASE_WIDGETS),yyy) +LIBV4L_CONF_OPTS += --enable-qv4l2 +LIBV4L_DEPENDENCIES += qt5base +# protect against host version detection of moc-qt5/rcc-qt5/uic-qt5 +LIBV4L_CONF_ENV += \ + ac_cv_prog_MOC=$(HOST_DIR)/bin/moc \ + ac_cv_prog_RCC=$(HOST_DIR)/bin/rcc \ + ac_cv_prog_UIC=$(HOST_DIR)/bin/uic +# qt5 needs c++11 (since qt-5.7) +LIBV4L_CONF_ENV += CXXFLAGS="$(TARGET_CXXFLAGS) -std=c++11" +else +LIBV4L_CONF_OPTS += --disable-qv4l2 +endif +else +LIBV4L_CONF_OPTS += --disable-v4l-utils +endif + +ifeq ($(BR2_PACKAGE_SDL2_IMAGE),y) +LIBV4L_DEPENDENCIES += sdl2_image +endif + +LIBV4L_CONF_ENV += LIBS="$(LIBV4L_LIBS)" + +$(eval $(autotools-package)) diff --git a/package/libva-intel-driver/Config.in b/package/libva-intel-driver/Config.in new file mode 100644 index 00000000..53c5b366 --- /dev/null +++ b/package/libva-intel-driver/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_LIBVA_INTEL_DRIVER + bool "libva-intel-driver" + depends on BR2_i386 || BR2_x86_64 + depends on BR2_TOOLCHAIN_HAS_THREADS # libdrm/libpthread-stubs + depends on !BR2_STATIC_LIBS # libva + select BR2_PACKAGE_LIBVA + select BR2_PACKAGE_LIBDRM + select BR2_PACKAGE_LIBDRM_INTEL + select BR2_PACKAGE_XLIB_LIBX11 if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBXEXT if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBXFIXES if BR2_PACKAGE_XORG7 + help + VA-API back-end driver for Intel graphics chips + + https://01.org/vaapi + +comment "libva intel driver needs a toolchain w/ threads, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS + depends on BR2_i386 || BR2_x86_64 diff --git a/package/libva-intel-driver/libva-intel-driver.hash b/package/libva-intel-driver/libva-intel-driver.hash new file mode 100644 index 00000000..4bf82774 --- /dev/null +++ b/package/libva-intel-driver/libva-intel-driver.hash @@ -0,0 +1,5 @@ +# From https://github.com/intel/intel-vaapi-driver/releases +sha1 c998e06f13238c6419bb38ede9a13e453312737b intel-vaapi-driver-2.4.1.tar.bz2 +# Locally computed +sha256 0081fce08eb3a83f7d99c3b853c8fdfa0af437b8f5b0fb7c66faeb83bcbe0c19 intel-vaapi-driver-2.4.1.tar.bz2 +sha256 c86a782ee845b52472dae9b9d79fb915d333628ac0efe49cdce63644814931de COPYING diff --git a/package/libva-intel-driver/libva-intel-driver.mk b/package/libva-intel-driver/libva-intel-driver.mk new file mode 100644 index 00000000..ad801dc9 --- /dev/null +++ b/package/libva-intel-driver/libva-intel-driver.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# libva-intel-driver +# +################################################################################ + +LIBVA_INTEL_DRIVER_VERSION = 2.4.1 +LIBVA_INTEL_DRIVER_SOURCE = intel-vaapi-driver-$(LIBVA_INTEL_DRIVER_VERSION).tar.bz2 +LIBVA_INTEL_DRIVER_SITE = \ + https://github.com/intel/intel-vaapi-driver/releases/download/$(LIBVA_INTEL_DRIVER_VERSION) +LIBVA_INTEL_DRIVER_LICENSE = MIT +LIBVA_INTEL_DRIVER_LICENSE_FILES = COPYING +LIBVA_INTEL_DRIVER_DEPENDENCIES = host-pkgconf libdrm libva + +ifeq ($(BR2_PACKAGE_XORG7),y) +LIBVA_INTEL_DRIVER_DEPENDENCIES += xlib_libX11 xlib_libXext xlib_libXfixes +LIBVA_INTEL_DRIVER_CONF_OPTS += --enable-x11 +else +LIBVA_INTEL_DRIVER_CONF_OPTS += --disable-x11 +endif + +ifeq ($(BR2_PACKAGE_WAYLAND),y) +LIBVA_INTEL_DRIVER_DEPENDENCIES += wayland +LIBVA_INTEL_DRIVER_CONF_OPTS += --enable-wayland +else +LIBVA_INTEL_DRIVER_CONF_OPTS += --disable-wayland +endif + +$(eval $(autotools-package)) diff --git a/package/libva-utils/Config.in b/package/libva-utils/Config.in new file mode 100644 index 00000000..597419f7 --- /dev/null +++ b/package/libva-utils/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_LIBVA_UTILS + bool "libva-utils" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS # libva + depends on BR2_TOOLCHAIN_HAS_THREADS # libva + select BR2_PACKAGE_LIBVA + help + Libva-utils is a collection of tests for VA-API (Video + Acceleration API) + + https://01.org/vaapi + +comment "libva-utils needs a toolchain w/ C++, threads, dynamic library" + depends on !BR2_INSTALL_LIBSTDCPP || \ + BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libva-utils/libva-utils.hash b/package/libva-utils/libva-utils.hash new file mode 100644 index 00000000..349fcc42 --- /dev/null +++ b/package/libva-utils/libva-utils.hash @@ -0,0 +1,5 @@ +# From https://github.com/intel/libva-utils/releases/download/2.10.0/libva-utils-2.10.0.tar.bz2.sha1sum +sha1 083a31354d2d49a4b9b8d4bccd6e7b77fc447154 libva-utils-2.10.0.tar.bz2 +# Locally computed +sha256 33f06929faa395f55ec816432679219c56d70850bf465c848f0418e8a4f0352b libva-utils-2.10.0.tar.bz2 +sha256 c6220c9f87832c27abcb8a32eafdd2823e13ce146b3ea63d5deae2a76798ef50 COPYING diff --git a/package/libva-utils/libva-utils.mk b/package/libva-utils/libva-utils.mk new file mode 100644 index 00000000..4634ba4e --- /dev/null +++ b/package/libva-utils/libva-utils.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# libva-utils +# +################################################################################ + +LIBVA_UTILS_VERSION = 2.10.0 +LIBVA_UTILS_SOURCE = libva-utils-$(LIBVA_UTILS_VERSION).tar.bz2 +LIBVA_UTILS_SITE = https://github.com/intel/libva-utils/releases/download/$(LIBVA_UTILS_VERSION) +LIBVA_UTILS_LICENSE = MIT +LIBVA_UTILS_LICENSE_FILES = COPYING +LIBVA_UTILS_DEPENDENCIES = host-pkgconf libva + +$(eval $(autotools-package)) diff --git a/package/libva/Config.in b/package/libva/Config.in new file mode 100644 index 00000000..e4e351f9 --- /dev/null +++ b/package/libva/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_LIBVA + bool "libva" + depends on BR2_TOOLCHAIN_HAS_THREADS # libdrm/libpthread-stubs + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_LIBDRM + select BR2_PACKAGE_XLIB_LIBX11 if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBXEXT if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBXFIXES if BR2_PACKAGE_XORG7 + help + The main motivation for VA-API (Video Acceleration API) is to + enable hardware accelerated video decode/encode at various + entry-points (VLD, IDCT, Motion Compensation etc.) for the + prevailing coding standards today (MPEG-2, MPEG-4 ASP/H.263, + MPEG-4 AVC/H.264, and VC-1/VMW3). + + https://01.org/vaapi + +comment "libva needs a toolchain w/ threads, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/libva/libva.hash b/package/libva/libva.hash new file mode 100644 index 00000000..80f7d3c0 --- /dev/null +++ b/package/libva/libva.hash @@ -0,0 +1,5 @@ +# From https://github.com/intel/libva/releases/download/2.10.0/libva-2.10.0.tar.bz2.sha1sum +sha1 c33459efcab503eea89379bb627ef8a8f497b5b4 libva-2.10.0.tar.bz2 +# Locally computed +sha256 fa81e35b50d9818fce5ec9eeeeff08a24a8864ceeb9a5c8e7ae4446eacfc0236 libva-2.10.0.tar.bz2 +sha256 c86a782ee845b52472dae9b9d79fb915d333628ac0efe49cdce63644814931de COPYING diff --git a/package/libva/libva.mk b/package/libva/libva.mk new file mode 100644 index 00000000..0ec6b128 --- /dev/null +++ b/package/libva/libva.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# libva +# +################################################################################ + +LIBVA_VERSION = 2.10.0 +LIBVA_SOURCE = libva-$(LIBVA_VERSION).tar.bz2 +LIBVA_SITE = https://github.com/intel/libva/releases/download/$(LIBVA_VERSION) +LIBVA_LICENSE = MIT +LIBVA_LICENSE_FILES = COPYING +LIBVA_INSTALL_STAGING = YES +LIBVA_DEPENDENCIES = host-pkgconf libdrm + +# libdrm is a hard-dependency +LIBVA_CONF_OPTS = \ + --enable-drm \ + --with-drivers-path="/usr/lib/va" + +ifeq ($(BR2_PACKAGE_XORG7),y) +LIBVA_DEPENDENCIES += xlib_libX11 xlib_libXext xlib_libXfixes +LIBVA_CONF_OPTS += --enable-x11 +ifeq ($(BR2_PACKAGE_HAS_LIBGL),y) +LIBVA_DEPENDENCIES += libgl +LIBVA_CONF_OPTS += --enable-glx +endif +else +LIBVA_CONF_OPTS += --disable-glx --disable-x11 +endif + +ifeq ($(BR2_PACKAGE_WAYLAND),y) +LIBVA_DEPENDENCIES += wayland +LIBVA_CONF_ENV += ac_cv_path_WAYLAND_SCANNER=$(HOST_DIR)/usr/bin/wayland-scanner +LIBVA_CONF_OPTS += --enable-wayland +else +LIBVA_CONF_OPTS += --disable-wayland +endif + +$(eval $(autotools-package)) diff --git a/package/libvdpau/Config.in b/package/libvdpau/Config.in new file mode 100644 index 00000000..b5430abb --- /dev/null +++ b/package/libvdpau/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_LIBVDPAU + bool "libvdpau" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBX11 + select BR2_PACKAGE_XLIB_LIBXEXT + help + VDPAU is the Video Decode and Presentation API for UNIX. + It provides an interface to video decode acceleration and + presentation hardware present in modern GPUs. + + http://freedesktop.org/wiki/Software/VDPAU + +comment "libvdpau needs a toolchain w/ threads, C++" + depends on BR2_PACKAGE_XORG7 + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP diff --git a/package/libvdpau/libvdpau.hash b/package/libvdpau/libvdpau.hash new file mode 100644 index 00000000..0833d41b --- /dev/null +++ b/package/libvdpau/libvdpau.hash @@ -0,0 +1,5 @@ +# From https://lists.x.org/archives/xorg-announce/2019-August/003021.html +sha256 b5a52eeac9417edbc396f26c40591ba5df0cd18285f68d84614ef8f06196e50e libvdpau-1.3.tar.bz2 +sha512 c06c23062816e8b207d38d9d53df43a1b193bb9836b48bd6d79a63d76522e87d383c446285b9877fe9c99faa0d290da8a49ccbb58eefa138cc38d0929a8e1330 libvdpau-1.3.tar.bz2 +# Locally computed +sha256 ce4af7294872ff07f6e82ae5f1f5eba926215b1e2fb6d55d64759de082458d61 COPYING diff --git a/package/libvdpau/libvdpau.mk b/package/libvdpau/libvdpau.mk new file mode 100644 index 00000000..63aecaf7 --- /dev/null +++ b/package/libvdpau/libvdpau.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# libvdpau +# +################################################################################ + +LIBVDPAU_VERSION = 1.3 +LIBVDPAU_SOURCE = libvdpau-$(LIBVDPAU_VERSION).tar.bz2 +LIBVDPAU_SITE = \ + https://gitlab.freedesktop.org/vdpau/libvdpau/-/archive/$(LIBVDPAU_VERSION) +LIBVDPAU_LICENSE = MIT +LIBVDPAU_LICENSE_FILES = COPYING +LIBVDPAU_INSTALL_STAGING = YES + +LIBVDPAU_DEPENDENCIES = host-pkgconf xlib_libX11 xlib_libXext + +LIBVDPAU_CONF_OPTS = \ + -Ddocumentation=false \ + -Dmoduledir=/usr/lib/vdpau + +ifeq ($(BR2_PACKAGE_XORGPROTO),y) +LIBVDPAU_DEPENDENCIES += xorgproto +LIBVDPAU_CONF_OPTS += -Ddri2=true +else +LIBVDPAU_CONF_OPTS += -Ddri2=false +endif + +$(eval $(meson-package)) diff --git a/package/libvips/Config.in b/package/libvips/Config.in new file mode 100644 index 00000000..70d01f0e --- /dev/null +++ b/package/libvips/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_LIBVIPS + bool "libvips" + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # fork() + # C++ support is required to build libvips + # https://github.com/jcupitt/libvips/issues/231 + depends on BR2_INSTALL_LIBSTDCPP + select BR2_PACKAGE_EXPAT + select BR2_PACKAGE_LIBGLIB2 + help + libvips is a 2D image processing library. Compared to + similar libraries, libvips runs quickly and uses little + memory. + + http://www.vips.ecs.soton.ac.uk/ + +comment "libvips needs a toolchain w/ wchar, threads, C++" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_INSTALL_LIBSTDCPP diff --git a/package/libvips/libvips.hash b/package/libvips/libvips.hash new file mode 100644 index 00000000..ba40e6db --- /dev/null +++ b/package/libvips/libvips.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 c5e4dd5a5c6a777c129037d19ca606769b3f1d405fcc9c8eeda906a61491f790 vips-8.8.3.tar.gz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/libvips/libvips.mk b/package/libvips/libvips.mk new file mode 100644 index 00000000..6d965059 --- /dev/null +++ b/package/libvips/libvips.mk @@ -0,0 +1,114 @@ +################################################################################ +# +# libvips +# +################################################################################ + +LIBVIPS_VERSION = 8.8.3 +LIBVIPS_SOURCE = vips-$(LIBVIPS_VERSION).tar.gz +LIBVIPS_SITE = https://github.com/libvips/libvips/releases/download/v$(LIBVIPS_VERSION) +LIBVIPS_LICENSE = LGPL-2.1+ +LIBVIPS_LICENSE_FILES = COPYING +LIBVIPS_CPE_ID_VENDOR = libvips_project + +# Sparc64 compile fails, for all optimization levels except -O0. To +# fix the problem, use -O0 with no optimization instead. Bug reported +# upstream at https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69038. +ifeq ($(BR2_sparc64),y) +LIBVIPS_CXXFLAGS += -O0 +endif + +LIBVIPS_CONF_ENV += CXXFLAGS="$(TARGET_CXXFLAGS) $(LIBVIPS_CXXFLAGS)" \ + LIBS=$(TARGET_NLS_LIBS) + +LIBVIPS_CONF_OPTS = \ + --without-dmalloc \ + --without-gsf \ + --without-magick \ + --without-orc \ + --without-lcms \ + --without-OpenEXR \ + --without-openslide \ + --without-matio \ + --without-cfitsio \ + --without-libwebp \ + --without-pangoft2 \ + --without-x \ + --without-zip \ + --without-python +LIBVIPS_INSTALL_STAGING = YES +LIBVIPS_DEPENDENCIES = \ + host-pkgconf expat libglib2 \ + $(TARGET_NLS_DEPENDENCIES) + +ifeq ($(BR2_PACKAGE_GIFLIB),y) +LIBVIPS_CONF_OPTS += --with-giflib +LIBVIPS_DEPENDENCIES += giflib +else +LIBVIPS_CONF_OPTS += --without-giflib +endif + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +LIBVIPS_CONF_OPTS += --enable-introspection +LIBVIPS_DEPENDENCIES += gobject-introspection +else +LIBVIPS_CONF_OPTS += --disable-introspection +endif + +ifeq ($(BR2_PACKAGE_JPEG),y) +LIBVIPS_CONF_OPTS += --with-jpeg +LIBVIPS_DEPENDENCIES += jpeg +else +LIBVIPS_CONF_OPTS += --without-jpeg +endif + +ifeq ($(BR2_PACKAGE_LIBPNG),y) +LIBVIPS_CONF_OPTS += --with-png +LIBVIPS_DEPENDENCIES += libpng +else +LIBVIPS_CONF_OPTS += --without-png +endif + +ifeq ($(BR2_PACKAGE_LIBRSVG),y) +LIBVIPS_CONF_OPTS += --with-rsvg +LIBVIPS_DEPENDENCIES += librsvg +else +LIBVIPS_CONF_OPTS += --without-rsvg +endif + +ifeq ($(BR2_PACKAGE_POPPLER),y) +LIBVIPS_CONF_OPTS += --with-poppler +LIBVIPS_DEPENDENCIES += poppler +else +LIBVIPS_CONF_OPTS += --without-poppler +endif + +ifeq ($(BR2_PACKAGE_TIFF),y) +LIBVIPS_CONF_OPTS += --with-tiff +LIBVIPS_DEPENDENCIES += tiff +else +LIBVIPS_CONF_OPTS += --without-tiff +endif + +ifeq ($(BR2_PACKAGE_FFTW_DOUBLE),y) +LIBVIPS_CONF_OPTS += --with-fftw +LIBVIPS_DEPENDENCIES += fftw-double +else +LIBVIPS_CONF_OPTS += --without-fftw +endif + +ifeq ($(BR2_PACKAGE_LIBEXIF),y) +LIBVIPS_CONF_OPTS += --with-libexif +LIBVIPS_DEPENDENCIES += libexif +else +LIBVIPS_CONF_OPTS += --without-libexif +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +LIBVIPS_CONF_OPTS += --with-zlib +LIBVIPS_DEPENDENCIES += zlib +else +LIBVIPS_CONF_OPTS += --without-zlib +endif + +$(eval $(autotools-package)) diff --git a/package/libvncserver/Config.in b/package/libvncserver/Config.in new file mode 100644 index 00000000..2d5bf8a1 --- /dev/null +++ b/package/libvncserver/Config.in @@ -0,0 +1,30 @@ +config BR2_PACKAGE_LIBVNCSERVER + bool "libvncserver" + depends on BR2_USE_MMU # VNCommand.c uses fork() + # binutils issue (bad expression) + depends on !BR2_nios2 + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_LZO + help + libvncserver is a VNC server/client library. + + https://libvnc.github.io/ + +if BR2_PACKAGE_LIBVNCSERVER + +config BR2_PACKAGE_LIBVNCSERVER_TIGHTPNG + bool "TightPNG encoding support" + select BR2_PACKAGE_JPEG + select BR2_PACKAGE_LIBPNG + help + TightPNG encoding speeds up HTML5 based VNC clients like + noVNC. + + http://wiki.qemu.org/VNC_Tight_PNG + +endif + +comment "libvncserver needs a toolchain w/ dynamic library" + depends on BR2_USE_MMU + depends on !BR2_nios + depends on BR2_STATIC_LIBS diff --git a/package/libvncserver/libvncserver.hash b/package/libvncserver/libvncserver.hash new file mode 100644 index 00000000..8e61a3d0 --- /dev/null +++ b/package/libvncserver/libvncserver.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 0ae5bb9175dc0a602fe85c1cf591ac47ee5247b87f2bf164c16b05f87cbfa81a LibVNCServer-0.9.13.tar.gz +sha256 4d23c8c814e5baf007d854f01d8502e77dc56a41144934e003fb32c4e052d20f COPYING diff --git a/package/libvncserver/libvncserver.mk b/package/libvncserver/libvncserver.mk new file mode 100644 index 00000000..ead809d1 --- /dev/null +++ b/package/libvncserver/libvncserver.mk @@ -0,0 +1,79 @@ +################################################################################ +# +# libvncserver +# +################################################################################ + +LIBVNCSERVER_VERSION = 0.9.13 +LIBVNCSERVER_SOURCE = LibVNCServer-$(LIBVNCSERVER_VERSION).tar.gz +LIBVNCSERVER_SITE = https://github.com/LibVNC/libvncserver/archive +LIBVNCSERVER_LICENSE = GPL-2.0+ +LIBVNCSERVER_LICENSE_FILES = COPYING +LIBVNCSERVER_CPE_ID_VENDOR = libvncserver_project +LIBVNCSERVER_INSTALL_STAGING = YES +LIBVNCSERVER_DEPENDENCIES = host-pkgconf lzo +LIBVNCSERVER_CONF_OPTS = -DWITH_LZO=ON + +# only used for examples +LIBVNCSERVER_CONF_OPTS += \ + -DWITH_FFMPEG=OFF \ + -DWITH_GTK=OFF \ + -DWITH_SDL=OFF + +ifneq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +LIBVNCSERVER_CONF_OPTS += -DWITH_THREADS=ON +else +LIBVNCSERVER_CONF_OPTS += -DWITH_THREADS=OFF +endif + +# openssl supports needs NPTL thread support +ifeq ($(BR2_PACKAGE_OPENSSL)$(BR2_TOOLCHAIN_HAS_THREADS_NPTL),yy) +LIBVNCSERVER_CONF_OPTS += -DWITH_OPENSSL=ON +LIBVNCSERVER_DEPENDENCIES += openssl +else +LIBVNCSERVER_CONF_OPTS += -DWITH_OPENSSL=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBGCRYPT),y) +LIBVNCSERVER_CONF_OPTS += -DWITH_GCRYPT=ON +LIBVNCSERVER_DEPENDENCIES += libgcrypt +else +LIBVNCSERVER_CONF_OPTS += -DWITH_GCRYPT=OFF +endif + +ifeq ($(BR2_PACKAGE_GNUTLS)$(BR2_PACKAGE_LIBGCRYPT),yy) +LIBVNCSERVER_CONF_OPTS += -DWITH_GNUTLS=ON +LIBVNCSERVER_DEPENDENCIES += gnutls +else +LIBVNCSERVER_CONF_OPTS += -DWITH_GNUTLS=OFF +endif + +ifeq ($(BR2_PACKAGE_JPEG),y) +LIBVNCSERVER_CONF_OPTS += -DWITH_JPEG=ON +LIBVNCSERVER_DEPENDENCIES += jpeg +else +LIBVNCSERVER_CONF_OPTS += -DWITH_JPEG=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBPNG),y) +LIBVNCSERVER_CONF_OPTS += -DWITH_PNG=ON +LIBVNCSERVER_DEPENDENCIES += libpng +else +LIBVNCSERVER_CONF_OPTS += -DWITH_PNG=OFF +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +LIBVNCSERVER_CONF_OPTS += -DWITH_SYSTEMD=ON +LIBVNCSERVER_DEPENDENCIES += systemd +else +LIBVNCSERVER_CONF_OPTS += -DWITH_SYSTEMD=OFF +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +LIBVNCSERVER_CONF_OPTS += -DWITH_ZLIB=ON +LIBVNCSERVER_DEPENDENCIES += zlib +else +LIBVNCSERVER_CONF_OPTS += -DWITH_ZLIB=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/libvorbis/Config.in b/package/libvorbis/Config.in new file mode 100644 index 00000000..1b7cd6c3 --- /dev/null +++ b/package/libvorbis/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_LIBVORBIS + bool "libvorbis" + select BR2_PACKAGE_LIBOGG + help + Library for the Vorbis open source audio decoder + Ogg Vorbis is a fully open, non-proprietary, + patent-and-royalty-free, general-purpose compressed audio + format for mid to high quality (8kHz-48.0kHz, 16+ bit, + polyphonic) audio and music at fixed and variable bitrates + from 16 to 128 kbps/channel. + + This places Vorbis in the same competitive class as audio + representations such as MPEG-4 (AAC), and similar to, but + higher performance than MPEG-1/2 audio layer 3, MPEG-4 audio + (TwinVQ), WMA and PAC. + + https://xiph.org/vorbis/ diff --git a/package/libvorbis/libvorbis.hash b/package/libvorbis/libvorbis.hash new file mode 100644 index 00000000..2e44ba33 --- /dev/null +++ b/package/libvorbis/libvorbis.hash @@ -0,0 +1,4 @@ +# From http://www.xiph.org/downloads/ +sha256 b33cc4934322bcbf6efcbacf49e3ca01aadbea4114ec9589d1b1e9d20f72954b libvorbis-1.3.7.tar.xz +# License files, locally calculated +sha256 ec1815db59fcd302846df949d7424876cb2e2dc5ed1606c5fb0b36787b1cf43a COPYING diff --git a/package/libvorbis/libvorbis.mk b/package/libvorbis/libvorbis.mk new file mode 100644 index 00000000..c1baa185 --- /dev/null +++ b/package/libvorbis/libvorbis.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# libvorbis +# +################################################################################ + +LIBVORBIS_VERSION = 1.3.7 +LIBVORBIS_SOURCE = libvorbis-$(LIBVORBIS_VERSION).tar.xz +LIBVORBIS_SITE = https://downloads.xiph.org/releases/vorbis +LIBVORBIS_INSTALL_STAGING = YES +LIBVORBIS_CONF_OPTS = --disable-oggtest +LIBVORBIS_DEPENDENCIES = host-pkgconf libogg +LIBVORBIS_LICENSE = BSD-3-Clause +LIBVORBIS_LICENSE_FILES = COPYING +LIBVORBIS_CPE_ID_VENDOR = xiph.org + +$(eval $(autotools-package)) diff --git a/package/libvpx/0001-vpx_mem-vpx_mem.h-Fix-compilation-with-uClibc.patch b/package/libvpx/0001-vpx_mem-vpx_mem.h-Fix-compilation-with-uClibc.patch new file mode 100644 index 00000000..12960a62 --- /dev/null +++ b/package/libvpx/0001-vpx_mem-vpx_mem.h-Fix-compilation-with-uClibc.patch @@ -0,0 +1,30 @@ +From 90845a3a263e0f37b9c756c0b01377b9d1a225c9 Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Sun, 31 Jul 2016 10:37:05 +0200 +Subject: [PATCH] vpx_mem/vpx_mem.h: do not include + +The header does not exist in most C libraries, and including +it causes build failures. + +Signed-off-by: Bernd Kuhls +--- + vpx_mem/vpx_mem.h | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/vpx_mem/vpx_mem.h b/vpx_mem/vpx_mem.h +index c14f288..82df745 100644 +--- a/vpx_mem/vpx_mem.h ++++ b/vpx_mem/vpx_mem.h +@@ -12,9 +12,6 @@ + #define VPX_VPX_MEM_VPX_MEM_H_ + + #include "vpx_config.h" +-#if defined(__uClinux__) +-#include +-#endif + + #include + #include +-- +2.8.1 + diff --git a/package/libvpx/Config.in b/package/libvpx/Config.in new file mode 100644 index 00000000..6b0400c0 --- /dev/null +++ b/package/libvpx/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBVPX + bool "libvpx" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + A high-quality, open video format that's freely available to + everyone. Supports the VP8 and VP9 formats. + + http://webmproject.org + +comment "libvpx needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libvpx/libvpx.hash b/package/libvpx/libvpx.hash new file mode 100644 index 00000000..57ee7179 --- /dev/null +++ b/package/libvpx/libvpx.hash @@ -0,0 +1,4 @@ +# Locally computed: +sha256 d279c10e4b9316bf11a570ba16c3d55791e1ad6faa4404c67422eb631782c80a libvpx-1.9.0.tar.gz +sha256 8267348d5af1262c11d1a08de2f5afc77457755f1ac658627dd9acf71011d615 LICENSE +sha256 cc3273e0694ea5896145e0677699b53471b03ea43021ddc50e7923fbb9f5023c PATENTS diff --git a/package/libvpx/libvpx.mk b/package/libvpx/libvpx.mk new file mode 100644 index 00000000..3093242d --- /dev/null +++ b/package/libvpx/libvpx.mk @@ -0,0 +1,58 @@ +################################################################################ +# +# libvpx +# +################################################################################ + +LIBVPX_VERSION = 1.9.0 +LIBVPX_SITE = $(call github,webmproject,libvpx,v$(LIBVPX_VERSION)) +LIBVPX_LICENSE = BSD-3-Clause +LIBVPX_LICENSE_FILES = LICENSE PATENTS +LIBVPX_CPE_ID_VENDOR = webmproject +LIBVPX_INSTALL_STAGING = YES + +# ld is being used with cc options. therefore, pretend ld is cc. +LIBVPX_CONF_ENV = \ + LD="$(TARGET_CC)" \ + CROSS=$(GNU_TARGET_NAME) + +LIBVPX_CONF_OPTS = \ + --disable-examples \ + --disable-docs \ + --disable-unit-tests + +# vp9/ratectrl_rtc.cc +ifeq ($(BR2_INSTALL_LIBSTDCPP),y) +LIBVPX_CONF_OPTS += --enable-vp9-encoder +else +LIBVPX_CONF_OPTS += --disable-vp9-encoder +endif + +# This is not a true autotools package. It is based on the ffmpeg build system +define LIBVPX_CONFIGURE_CMDS + (cd $(LIBVPX_SRCDIR) && rm -rf config.cache && \ + $(TARGET_CONFIGURE_OPTS) \ + $(TARGET_CONFIGURE_ARGS) \ + $(LIBVPX_CONF_ENV) \ + ./configure \ + --target=generic-gnu \ + --enable-pic \ + --prefix=/usr \ + $(SHARED_STATIC_LIBS_OPTS) \ + $(LIBVPX_CONF_OPTS) \ + ) +endef + +define LIBVPX_BUILD_CMDS + $(TARGET_MAKE_ENV) $(LIBVPX_MAKE_ENV) $(MAKE) -C $(@D) all +endef + +define LIBVPX_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(LIBVPX_MAKE_ENV) $(MAKE) DESTDIR="$(STAGING_DIR)" -C $(@D) install +endef + +define LIBVPX_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(LIBVPX_MAKE_ENV) $(MAKE) DESTDIR="$(TARGET_DIR)" -C $(@D) install +endef + +$(eval $(generic-package)) diff --git a/package/libwebsock/0001-Switch-to-use-pkg-config-to-detect-libevent-and-open.patch b/package/libwebsock/0001-Switch-to-use-pkg-config-to-detect-libevent-and-open.patch new file mode 100644 index 00000000..ea3fd007 --- /dev/null +++ b/package/libwebsock/0001-Switch-to-use-pkg-config-to-detect-libevent-and-open.patch @@ -0,0 +1,81 @@ +From a6c35dbab5a2a75c176e031122ee64152e50e5d3 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Thu, 1 Jan 2015 12:23:43 +0100 +Subject: [PATCH] Switch to use pkg-config to detect libevent and openssl + +Switching to pkg-config fixes a number of problems when detecting the +libraries. For example the detection of libpthread was failing, +because libevent_threads was added to LIBS before libevent itself, +causing the libpthread test to fail due to missing symbols. pkg-config +is anyway nowadays the preferred way for detecting libraries. It also +has the benefit of working properly in static library situations. + +Signed-off-by: Thomas Petazzoni +--- + configure.ac | 36 ++++++++++++------------------------ + 1 file changed, 12 insertions(+), 24 deletions(-) + +diff --git a/configure.ac b/configure.ac +index d4109ce..fc1cadc 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -27,35 +27,20 @@ AC_FUNC_MALLOC + AC_FUNC_REALLOC + AC_CHECK_FUNCS([memset socket strstr]) + +-AC_CHECK_HEADERS([event2/thread.h], [ +- LIBS="-levent_pthreads ${LIBS}" +- ], [ +- echo "libevent_pthreads required, failing" +- exit -1 +- ]) +-AC_CHECK_LIB(pthread, pthread_create, [LIBS="-lpthread ${LIBS}"], [ ++AC_CHECK_LIB(pthread, pthread_create, [PTHREAD_LIBS="-lpthread"], [ + echo "pthreads required, failing" + exit -1 + ]) +-AC_CHECK_LIB(event, event_base_dispatch, [], [ +- echo "libevent required, failing" +- exit -1 +- ]) ++ ++PKG_CHECK_MODULES([EVENT], [libevent]) ++PKG_CHECK_MODULES([EVENT_PTHREAD], [libevent_pthreads]) + + AS_IF([test "x$with_ssl" != "xno"], + [ +- AC_CHECK_LIB([ssl], [SSL_CTX_new], +- [ +- LIBS="-lssl ${LIBS}" +- AC_CHECK_LIB([event_openssl], [bufferevent_openssl_socket_new], [ +- LIBS="-levent_openssl ${LIBS}" +- have_ssl=yes +- ], [have_ssl=no]) +- ], +- [have_ssl=no]) +- ], +- [have_ssl=no]) +- ++ PKG_CHECK_MODULES([SSL], [openssl], [have_ssl=yes], [have_ssl=no]) ++ AS_IF([test "x${have_ssl}" = "xyes"], ++ [PKG_CHECK_MODULES([EVENT_OPENSSL], [libevent_openssl], [have_ssl=yes], [have_ssl=no])])]) ++ + AS_IF([test "x$have_ssl" = "xyes"], + [ + AC_DEFINE([WEBSOCK_HAVE_SSL], [1], [Define if building SSL support]) +@@ -63,8 +48,11 @@ AS_IF([test "x$have_ssl" = "xyes"], + [AS_IF([test "x$with_ssl" = "xyes"], + [AC_MSG_ERROR([SSL support requested but not found]) + ])]) +- ++ + AM_CONDITIONAL([HAVE_SSL], [test "x$have_ssl" = "xyes"]) ++ ++LIBS="${EVENT_LIBS} ${EVENT_PTHREAD_LIBS} ${PTHREAD_LIBS} ${SSL_LIBS} ${EVENT_OPENSSL_LIBS}" ++ + AC_DEFINE_UNQUOTED([WEBSOCK_PACKAGE_VERSION], ["$PACKAGE_VERSION"], [libwebsock version]) + AC_DEFINE_UNQUOTED([WEBSOCK_PACKAGE_STRING], ["$PACKAGE_STRING"], [libwebsock package string]) + AC_DEFINE_UNQUOTED([WEBSOCK_PACKAGE_NAME], ["$PACKAGE_NAME"], [libwebsock package name]) +-- +2.1.0 + diff --git a/package/libwebsock/0002-fix-ssl.patch b/package/libwebsock/0002-fix-ssl.patch new file mode 100644 index 00000000..f5775387 --- /dev/null +++ b/package/libwebsock/0002-fix-ssl.patch @@ -0,0 +1,21 @@ +config: fix SSL detection + +The @WEBSOCK_HAVE_SSL@ is replaced at configure time with either a 1 or 0. +The rest of the code is simply checking to see if WEBSOCK_HAVE_SSL is +defined at all. Using a #undef WEBSOCK_HAVE_SSL will cause configure +to either comment it out or change the line to +"#define WEBSOCK_HAVE_SSL 1". + +Signed-off-by: Clayton Shotwell + +diff -durN a/src/websock_config.h.in b/src/websock_config.h.in +--- a/src/websock_config.h.in ++++ b/src/websock_config.h.in +@@ -4,6 +4,6 @@ + #define WEBSOCK_PACKAGE_STRING @WEBSOCK_PACKAGE_STRING@ + #define WEBSOCK_PACKAGE_VERSION @WEBSOCK_PACKAGE_VERSION@ + #define WEBSOCK_PACKAGE_NAME @WEBSOCK_PACKAGE_NAME@ +-#define WEBSOCK_HAVE_SSL @WEBSOCK_HAVE_SSL@ ++#undef WEBSOCK_HAVE_SSL + + #endif diff --git a/package/libwebsock/0003-fix-incorrect-inline.patch b/package/libwebsock/0003-fix-incorrect-inline.patch new file mode 100644 index 00000000..043df45b --- /dev/null +++ b/package/libwebsock/0003-fix-incorrect-inline.patch @@ -0,0 +1,66 @@ +utf: do not define decode() to be inline + +Currently, decode() is prototyped in utf.h, its body is in utf.c and it +is called from util.c. + +However, decode() is defined to be inline, which can not work since, +when compiling util.c, the body of decode() is out-of-scope for that +compilation unit. + +Furthermore, decode() uses a utf8d, which is a static defined in utf.c . +So utf8d is not visible when compiling util.c either. + +This means that the definition of decode() along with utf8d is basically +wrong, and is now failing with gcc-5.x, with warnings like so: + + libtool: compile: /home/ymorin/dev/buildroot/O/host/usr/bin/arm-linux-gcc -DHAVE_CONFIG_H -I. -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Wall -Wmissing-prototypes -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -c utf.c -fPIC -DPIC -o .libs/libwebsock_la-utf.o + utf.c:36:12: warning: ‘utf8d’ is static but used in inline function ‘decode’ which is not static + *state = utf8d[256 + *state*16 + type]; + ^ + utf.c:30:19: warning: ‘utf8d’ is static but used in inline function ‘decode’ which is not static + uint32_t type = utf8d[byte]; + ^ + libtool: compile: /home/ymorin/dev/buildroot/O/host/usr/bin/arm-linux-gcc -DHAVE_CONFIG_H -I. -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Wall -Wmissing-prototypes -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -c util.c -fPIC -DPIC -o .libs/libwebsock_la-util.o + In file included from websock.h:73:0, + from util.c:20: + utf.h:25:17: warning: inline function ‘decode’ declared but never defined + uint32_t inline decode(uint32_t *state, uint32_t *codep, uint32_t byte); + ^ + +This results in decode() to be omitted from libwebsock.so, and thus link +failures when another program wants to link with -lwebsock. + +The simplest solution is to not inline decode() at all. + +Signed-off-by: "Yann E. MORIN" + +--- +Note: an alternative would be to move both decode() and utf8d into +decode.h nad ditch decode.c if decode really must be inline. This is +left as an execise for an interested party. But since upstream hasn't +seen a single commit in more than a year now... :-( + +diff -durN a/src/utf.c b/src/utf.c +--- a/src/utf.c 2014-07-15 01:43:20.000000000 +0200 ++++ b/src/utf.c 2015-08-22 22:29:38.667393786 +0200 +@@ -24,7 +24,7 @@ + 1,3,1,1,1,1,1,3,1,3,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // s7..s8 + }; + +-uint32_t inline ++uint32_t + decode(uint32_t* state, uint32_t* codep, uint32_t byte) + { + uint32_t type = utf8d[byte]; +diff -durN a/src/utf.h b/src/utf.h +--- a/src/utf.h 2014-07-15 01:43:20.000000000 +0200 ++++ b/src/utf.h 2015-08-22 22:29:10.439227396 +0200 +@@ -22,7 +22,7 @@ + + #include + +-uint32_t inline decode(uint32_t *state, uint32_t *codep, uint32_t byte); ++uint32_t decode(uint32_t *state, uint32_t *codep, uint32_t byte); + + + #endif /* UTF_H_ */ diff --git a/package/libwebsock/Config.in b/package/libwebsock/Config.in new file mode 100644 index 00000000..14651cf4 --- /dev/null +++ b/package/libwebsock/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_LIBWEBSOCK + bool "libwebsock" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_LIBEVENT + help + C library for easy WebSockets servers. + + This library allows a developer to quickly develop WebSocket + servers by focusing on the actual logic of your WebSocket + implementation instead of the details of the WebSocket + protocol or even specifics of C sockets. + + https://github.com/payden/libwebsock + +comment "libwebsock needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libwebsock/libwebsock.hash b/package/libwebsock/libwebsock.hash new file mode 100644 index 00000000..11b4f55f --- /dev/null +++ b/package/libwebsock/libwebsock.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 34cf8376446e2371c9af47394043a30dc16af7ed5437d56bc6135c5dfda9ed22 libwebsock-3c1615eeadb0b582b63851073bfe3e5132f31ebc.tar.gz +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 COPYING.lesser diff --git a/package/libwebsock/libwebsock.mk b/package/libwebsock/libwebsock.mk new file mode 100644 index 00000000..df3af3b0 --- /dev/null +++ b/package/libwebsock/libwebsock.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# libwebsock +# +################################################################################ + +LIBWEBSOCK_VERSION = 3c1615eeadb0b582b63851073bfe3e5132f31ebc +LIBWEBSOCK_SITE = $(call github,payden,libwebsock,$(LIBWEBSOCK_VERSION)) +LIBWEBSOCK_DEPENDENCIES = libevent host-pkgconf +LIBWEBSOCK_AUTORECONF = YES +LIBWEBSOCK_INSTALL_STAGING = YES +LIBWEBSOCK_LICENSE = LGPL-3.0 +LIBWEBSOCK_LICENSE_FILES = COPYING.lesser + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +LIBWEBSOCK_DEPENDENCIES += openssl +LIBWEBSOCK_CONF_OPTS += --with-ssl +else +LIBWEBSOCK_CONF_OPTS += --without-ssl +endif + +$(eval $(autotools-package)) diff --git a/package/libwebsockets/Config.in b/package/libwebsockets/Config.in new file mode 100644 index 00000000..d7b529ca --- /dev/null +++ b/package/libwebsockets/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_LIBWEBSOCKETS + bool "libwebsockets" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_ZLIB + help + Libwebsockets is a lightweight pure C library built to use + minimal CPU and memory resources, and provide fast throughput + in both directions. + + https://libwebsockets.org/ + +comment "libwebsockets needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/libwebsockets/libwebsockets.hash b/package/libwebsockets/libwebsockets.hash new file mode 100644 index 00000000..1761a765 --- /dev/null +++ b/package/libwebsockets/libwebsockets.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 6ece1f422c6d38aabedec2476f2ac12e9aede8691b08137068ad85545ce3ff78 libwebsockets-4.0.21.tar.gz +sha256 5756db345eb9c21cb06dd7cb69c38ec234657a233f9a186b4f5fa453681bd394 LICENSE diff --git a/package/libwebsockets/libwebsockets.mk b/package/libwebsockets/libwebsockets.mk new file mode 100644 index 00000000..c25686d3 --- /dev/null +++ b/package/libwebsockets/libwebsockets.mk @@ -0,0 +1,76 @@ +################################################################################ +# +# libwebsockets +# +################################################################################ + +LIBWEBSOCKETS_VERSION = 4.0.21 +LIBWEBSOCKETS_SITE = $(call github,warmcat,libwebsockets,v$(LIBWEBSOCKETS_VERSION)) +LIBWEBSOCKETS_LICENSE = MIT with exceptions +LIBWEBSOCKETS_LICENSE_FILES = LICENSE +LIBWEBSOCKETS_DEPENDENCIES = zlib +LIBWEBSOCKETS_INSTALL_STAGING = YES +LIBWEBSOCKETS_CONF_OPTS = \ + -DLWS_WITHOUT_TESTAPPS=ON \ + -DLWS_IPV6=ON \ + -DLWS_UNIX_SOCK=ON \ + -DLWS_WITHOUT_EXTENSIONS=OFF + +# If LWS_MAX_SMP=1, then there is no code related to pthreads compiled +# in the library. If unset, LWS_MAX_SMP defaults to 32 and a small +# amount of pthread mutex code is built into the library. +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),) +LIBWEBSOCKETS_CONF_OPTS += -DLWS_MAX_SMP=1 +else +LIBWEBSOCKETS_CONF_OPTS += -DLWS_MAX_SMP= +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +LIBWEBSOCKETS_DEPENDENCIES += openssl host-openssl +LIBWEBSOCKETS_CONF_OPTS += -DLWS_WITH_SSL=ON +else +LIBWEBSOCKETS_CONF_OPTS += -DLWS_WITH_SSL=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBEV),y) +LIBWEBSOCKETS_DEPENDENCIES += libev +LIBWEBSOCKETS_CONF_OPTS += \ + -DLWS_WITH_LIBEV=ON \ + -DLWS_WITH_LIBEVENT=OFF +else ifeq ($(BR2_PACKAGE_LIBEVENT),y) +LIBWEBSOCKETS_DEPENDENCIES += libevent +LIBWEBSOCKETS_CONF_OPTS += \ + -DLWS_WITH_LIBEV=OFF \ + -DLWS_WITH_LIBEVENT=ON +else +LIBWEBSOCKETS_CONF_OPTS += \ + -DLWS_WITH_LIBEV=OFF \ + -DLWS_WITH_LIBEVENT=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBGLIB2),y) +LIBWEBSOCKETS_DEPENDENCIES += libglib2 +LIBWEBSOCKETS_CONF_OPTS += -DLWS_WITH_GLIB=ON +else +LIBWEBSOCKETS_CONF_OPTS += -DLWS_WITH_GLIB=OFF +endif + +ifeq ($(BR2_PACKAGE_UTIL_LINUX_LIBMOUNT),y) +LIBWEBSOCKETS_DEPENDENCIES += util-linux +LIBWEBSOCKETS_CONF_OPTS += -DLWS_WITH_FSMOUNT=ON +else +LIBWEBSOCKETS_CONF_OPTS += -DLWS_WITH_FSMOUNT=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBUV),y) +LIBWEBSOCKETS_DEPENDENCIES += libuv +LIBWEBSOCKETS_CONF_OPTS += -DLWS_WITH_LIBUV=ON +else +LIBWEBSOCKETS_CONF_OPTS += -DLWS_WITH_LIBUV=OFF +endif + +ifeq ($(BR2_SHARED_LIBS),y) +LIBWEBSOCKETS_CONF_OPTS += -DLWS_WITH_STATIC=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/libwpe/0001-meson-Use-a-partial-dependency-to-pass-EGL-module-fl.patch b/package/libwpe/0001-meson-Use-a-partial-dependency-to-pass-EGL-module-fl.patch new file mode 100644 index 00000000..e74ebe12 --- /dev/null +++ b/package/libwpe/0001-meson-Use-a-partial-dependency-to-pass-EGL-module-fl.patch @@ -0,0 +1,45 @@ +From 81bfedfa02fd864f3e4b295091d49c3eb20bb372 Mon Sep 17 00:00:00 2001 +From: Adrian Perez de Castro +Date: Wed, 16 Sep 2020 00:01:37 +0300 +Subject: [PATCH] meson: Use a partial dependency to pass EGL module flags + +Make Meson try to always find an "egl" dependency, if found extract +the include directories and compiler flags from ir using a partial +dependency, otherwise check that at least EGL/eglplatform.h is +available when the pkg-config module is not found. + +Fixes #70 + +Signed-off-by: Adrian Perez de Castro +[Upstrem status: https://github.com/WebPlatformForEmbedded/libwpe/pull/71] + +--- + meson.build | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +diff --git a/meson.build b/meson.build +index 5c88aed..a05f4ab 100644 +--- a/meson.build ++++ b/meson.build +@@ -57,8 +57,16 @@ dependencies = [ + ] + + cc = meson.get_compiler('c') +-if not cc.has_header('EGL/eglplatform.h') +- dependencies += dependency('egl') ++egl_dep = dependency('egl', required: false) ++if egl_dep.found() ++ dependencies += egl_dep.partial_dependency( ++ compile_args: true, ++ includes: true, ++ ) ++else ++ assert(cc.has_header('EGL/eglplatform.h'), ++ 'Required heaer not found' ++ ) + endif + + if not cc.has_function('dlopen') +-- +2.28.0 + diff --git a/package/libwpe/Config.in b/package/libwpe/Config.in new file mode 100644 index 00000000..c11c8539 --- /dev/null +++ b/package/libwpe/Config.in @@ -0,0 +1,13 @@ +comment "libwpe needs a toolchain w/ C++, dynamic library and an OpenEGL-capable backend" + depends on !BR2_PACKAGE_HAS_LIBEGL || !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS + +config BR2_PACKAGE_LIBWPE + bool "libwpe" + depends on !BR2_STATIC_LIBS # dlfcn.h + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_HAS_LIBEGL + select BR2_PACKAGE_LIBXKBCOMMON + help + Base library for the WPE WebKit port. + + https://wpewebkit.org/ diff --git a/package/libwpe/libwpe.hash b/package/libwpe/libwpe.hash new file mode 100644 index 00000000..36cdf566 --- /dev/null +++ b/package/libwpe/libwpe.hash @@ -0,0 +1,7 @@ +# From https://wpewebkit.org/releases/libwpe-1.8.0.tar.xz.sums +md5 328ea59dd8dee9107a49353536d00844 libwpe-1.8.0.tar.xz +sha1 3c893b1e8118a06f082d98373e279a8f8e33750d libwpe-1.8.0.tar.xz +sha256 a6f00a7d091cbd4db57fe7ee3b4c12c6350921d654ed79812800a26c888481d2 libwpe-1.8.0.tar.xz + +# Hashes for license files: +sha256 35bef295cedbbf179eaee14328002587a0e7dc08ebf3f15ea080a6f2815f0d7b COPYING diff --git a/package/libwpe/libwpe.mk b/package/libwpe/libwpe.mk new file mode 100644 index 00000000..5843e84d --- /dev/null +++ b/package/libwpe/libwpe.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# libwpe +# +################################################################################ + +LIBWPE_VERSION = 1.8.0 +LIBWPE_SITE = https://wpewebkit.org/releases +LIBWPE_SOURCE = libwpe-$(LIBWPE_VERSION).tar.xz +LIBWPE_INSTALL_STAGING = YES +LIBWPE_LICENSE = BSD-2-Clause +LIBWPE_LICENSE_FILES = COPYING +LIBWPE_DEPENDENCIES = libegl libxkbcommon + +LIBWPE_CFLAGS = $(TARGET_CFLAGS) +LIBWPE_CXXFLAGS = $(TARGET_CXXFLAGS) + +# Workaround for https://github.com/raspberrypi/userland/issues/316 +ifeq ($(BR2_PACKAGE_RPI_USERLAND),y) +LIBWPE_CFLAGS += -D_GNU_SOURCE +LIBWPE_CXXFLAGS += -D_GNU_SOURCE +endif + +$(eval $(meson-package)) diff --git a/package/libxkbcommon/Config.in b/package/libxkbcommon/Config.in new file mode 100644 index 00000000..994eaedd --- /dev/null +++ b/package/libxkbcommon/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LIBXKBCOMMON + bool "libxkbcommon" + select BR2_PACKAGE_LIBXCB if BR2_PACKAGE_XORG7 + help + xkbcommon is a keymap compiler and support library which + processes a reduced subset of keymaps as defined by the XKB + specification. + + http://xkbcommon.org/ + +source "package/libxkbcommon_rules/Config.in" diff --git a/package/libxkbcommon/libxkbcommon.hash b/package/libxkbcommon/libxkbcommon.hash new file mode 100644 index 00000000..b7147cd4 --- /dev/null +++ b/package/libxkbcommon/libxkbcommon.hash @@ -0,0 +1,6 @@ +# From https://lists.freedesktop.org/archives/wayland-devel/2020-November/041660.html +#sha256 a2202f851e072b84e64a395212cbd976ee18a8ee602008b0bad02a13247dbc52 libxkbcommon-1.0.3.tar.xz +sha256 106cec5263f9100a7e79b5f7220f889bc78e7d7ffc55d2b6fdb1efefb8024031 libxkbcommon-1.4.0.tar.xz + +# License file: +sha256 086caee279449369d41c1157911ec7696e707b93feba7280de757d3c470b2dfb LICENSE diff --git a/package/libxkbcommon/libxkbcommon.mk b/package/libxkbcommon/libxkbcommon.mk new file mode 100644 index 00000000..992c4652 --- /dev/null +++ b/package/libxkbcommon/libxkbcommon.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# libxkbcommon +# +################################################################################ + +LIBXKBCOMMON_VERSION = 1.4.0 +LIBXKBCOMMON_SITE = http://xkbcommon.org/download +LIBXKBCOMMON_SOURCE = libxkbcommon-$(LIBXKBCOMMON_VERSION).tar.xz +LIBXKBCOMMON_LICENSE = MIT/X11 +LIBXKBCOMMON_LICENSE_FILES = LICENSE +LIBXKBCOMMON_INSTALL_STAGING = YES +LIBXKBCOMMON_DEPENDENCIES = host-bison host-flex +LIBXKBCOMMON_CONF_OPTS = \ + -Denable-docs=false \ + -Denable-wayland=false \ + -Denable-xkbregistry=false + +ifeq ($(BR2_PACKAGE_XORG7),y) +LIBXKBCOMMON_CONF_OPTS += -Denable-x11=true +LIBXKBCOMMON_DEPENDENCIES += libxcb +else +LIBXKBCOMMON_CONF_OPTS += -Denable-x11=false +endif + +$(eval $(meson-package)) diff --git a/package/libxkbcommon_rules/Config.in b/package/libxkbcommon_rules/Config.in new file mode 100644 index 00000000..7ca12382 --- /dev/null +++ b/package/libxkbcommon_rules/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_LIBXKBCOMMON_RULES + bool "libxkbcommon rules" + depends on BR2_PACKAGE_LIBXKBCOMMON + default y + help + xkbcommon is a keymap compiler and support library which + processes a reduced subset of keymaps as defined by the XKB + specification. + + and if you want to use xkb successfully + you should add xkb rules in /etc/(not only this path but default install in here) + + http://xkbcommon.org/ diff --git a/package/libxkbcommon_rules/libxkbcommon_rules.mk b/package/libxkbcommon_rules/libxkbcommon_rules.mk new file mode 100644 index 00000000..a4411a4d --- /dev/null +++ b/package/libxkbcommon_rules/libxkbcommon_rules.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# libxkbcommon_rules +# +################################################################################ + +LIBXKBCOMMON_RULES_BUILD_DIR_NAME = libxkbcommon_rules +LIBXKBCOMMON_RULES_SITE = $(TOPDIR)/package/libxkbcommon_rules/xkb.tar.gz +LIBXKBCOMMON_RULES_METHOD = file +LIBXKBCOMMON_RULES_DEPENDENCIES = libxkbcommon + +define LIBXKBCOMMON_RULES_EXTRACT_CMDS + tar -zxf $(LIBXKBCOMMON_RULES_SITE) -C $(BUILD_DIR)/$(LIBXKBCOMMON_RULES_BUILD_DIR_NAME) +endef + +define LIBXKBCOMMON_RULES_CONFIGURE_CMDS + echo "nothing to do" +endef + +define LIBXKBCOMMON_RULES_BUILD_CMDS + echo "nothing to do" +endef + +define LIBXKBCOMMON_RULES_INSTALL_TARGET_CMDS + cd $(BUILD_DIR)/$(LIBXKBCOMMON_RULES_BUILD_DIR_NAME) && cp -r xkb $(TOPDIR)/output/target/etc/ +endef + +$(eval $(generic-package)) diff --git a/package/libxkbcommon_rules/xkb.tar.gz b/package/libxkbcommon_rules/xkb.tar.gz new file mode 100644 index 00000000..56caeb25 Binary files /dev/null and b/package/libxkbcommon_rules/xkb.tar.gz differ diff --git a/package/libxml-parser-perl/libxml-parser-perl.hash b/package/libxml-parser-perl/libxml-parser-perl.hash new file mode 100644 index 00000000..7aeec70b --- /dev/null +++ b/package/libxml-parser-perl/libxml-parser-perl.hash @@ -0,0 +1,3 @@ +# locally computed hash +sha256 d331332491c51cccfb4cb94ffc44f9cd73378e618498d4a37df9e043661c515d XML-Parser-2.46.tar.gz +sha256 6a2e768443ed00f09d3d4bc4dd14451035eac13c6864d68d8e2f76edf5a044f2 README diff --git a/package/libxml-parser-perl/libxml-parser-perl.mk b/package/libxml-parser-perl/libxml-parser-perl.mk new file mode 100644 index 00000000..37cef2e4 --- /dev/null +++ b/package/libxml-parser-perl/libxml-parser-perl.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# libxml-parser-perl +# +################################################################################ + +LIBXML_PARSER_PERL_VERSION = 2.46 +LIBXML_PARSER_PERL_SOURCE = XML-Parser-$(LIBXML_PARSER_PERL_VERSION).tar.gz +LIBXML_PARSER_PERL_SITE = $(BR2_CPAN_MIRROR)/authors/id/T/TO/TODDR +HOST_LIBXML_PARSER_PERL_DEPENDENCIES = host-expat +LIBXML_PARSER_PERL_LICENSE = Artistic or GPL-1.0+ +LIBXML_PARSER_PERL_LICENSE_FILES = README +LIBXML_PARSER_PERL_RUN_PERL = `which perl` + +HOST_LIBXML_PARSER_PERL_CONFIGURE_OPTS = \ + $(HOST_CONFIGURE_OPTS) \ + LD="$(HOSTCC)" + +define HOST_LIBXML_PARSER_PERL_CONFIGURE_CMDS + (cd $(@D) ; \ + $(HOST_LIBXML_PARSER_PERL_CONFIGURE_OPTS) \ + $(LIBXML_PARSER_PERL_RUN_PERL) Makefile.PL \ + PREFIX=$(HOST_DIR) \ + EXPATLIBPATH=$(HOST_DIR)/lib \ + EXPATINCPATH=$(HOST_DIR)/include \ + INSTALLDIRS=site \ + INSTALLSITELIB=$(HOST_DIR)/lib/perl \ + INSTALLSITEARCH=$(HOST_DIR)/lib/perl \ + ) +endef + +define HOST_LIBXML_PARSER_PERL_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) $(HOST_LIBXML_PARSER_PERL_CONFIGURE_OPTS) -C $(@D) +endef + +define HOST_LIBXML_PARSER_PERL_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) install +endef + +$(eval $(host-generic-package)) diff --git a/package/libxml2/Config.in b/package/libxml2/Config.in new file mode 100644 index 00000000..ebd63fe5 --- /dev/null +++ b/package/libxml2/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LIBXML2 + bool "libxml2" + help + XML C Parser + + http://xmlsoft.org/ diff --git a/package/libxml2/libxml2.hash b/package/libxml2/libxml2.hash new file mode 100644 index 00000000..ce6c3c48 --- /dev/null +++ b/package/libxml2/libxml2.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 c8d6681e38c56f172892c85ddc0852e1fd4b53b4209e7f4ebf17f7e2eae71d92 libxml2-2.9.12.tar.gz +# License files, locally calculated +sha256 c5c63674f8a83c4d2e385d96d1c670a03cb871ba2927755467017317878574bd COPYING diff --git a/package/libxml2/libxml2.mk b/package/libxml2/libxml2.mk new file mode 100644 index 00000000..5d688aca --- /dev/null +++ b/package/libxml2/libxml2.mk @@ -0,0 +1,58 @@ +################################################################################ +# +# libxml2 +# +################################################################################ + +LIBXML2_VERSION = 2.9.12 +LIBXML2_SITE = http://xmlsoft.org/sources +LIBXML2_INSTALL_STAGING = YES +LIBXML2_LICENSE = MIT +LIBXML2_LICENSE_FILES = COPYING +LIBXML2_CPE_ID_VENDOR = xmlsoft +LIBXML2_CONFIG_SCRIPTS = xml2-config + +# relocation truncated to fit: R_68K_GOT16O +ifeq ($(BR2_m68k_cf),y) +LIBXML2_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) -mxgot" +endif + +LIBXML2_CONF_OPTS = --with-gnu-ld --without-python --without-debug + +HOST_LIBXML2_DEPENDENCIES = host-pkgconf +LIBXML2_DEPENDENCIES = host-pkgconf + +HOST_LIBXML2_CONF_OPTS = --without-zlib --without-lzma --without-python + +ifeq ($(BR2_PACKAGE_ZLIB),y) +LIBXML2_DEPENDENCIES += zlib +LIBXML2_CONF_OPTS += --with-zlib=$(STAGING_DIR)/usr +else +LIBXML2_CONF_OPTS += --without-zlib +endif + +ifeq ($(BR2_PACKAGE_XZ),y) +LIBXML2_DEPENDENCIES += xz +LIBXML2_CONF_OPTS += --with-lzma +else +LIBXML2_CONF_OPTS += --without-lzma +endif + +LIBXML2_DEPENDENCIES += $(if $(BR2_PACKAGE_LIBICONV),libiconv) + +ifeq ($(BR2_ENABLE_LOCALE)$(BR2_PACKAGE_LIBICONV),y) +LIBXML2_CONF_OPTS += --with-iconv +else +LIBXML2_CONF_OPTS += --without-iconv +endif + +define LIBXML2_CLEANUP_XML2CONF + rm -f $(TARGET_DIR)/usr/lib/xml2Conf.sh +endef +LIBXML2_POST_INSTALL_TARGET_HOOKS += LIBXML2_CLEANUP_XML2CONF + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) + +# libxml2 for the host +LIBXML2_HOST_BINARY = $(HOST_DIR)/bin/xmllint diff --git a/package/libxmlpp/Config.in b/package/libxmlpp/Config.in new file mode 100644 index 00000000..3249a843 --- /dev/null +++ b/package/libxmlpp/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_LIBXMLPP + bool "libxml++" + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C++11 + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR # glibmm -> libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glibmm -> libglib2 + depends on BR2_USE_MMU # glibmm -> libglib2 + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_GLIBMM + help + libxml++ is a C++ wrapper for the libxml XML parser library. + + https://libxmlplusplus.github.io/libxmlplusplus/ + +comment "libxml++ needs a toolchain w/ C++, wchar, threads, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || !BR2_USE_WCHAR \ + ||!BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_MMU diff --git a/package/libxmlpp/libxmlpp.hash b/package/libxmlpp/libxmlpp.hash new file mode 100644 index 00000000..7a59880e --- /dev/null +++ b/package/libxmlpp/libxmlpp.hash @@ -0,0 +1,5 @@ +# From http://ftp.gnome.org/pub/GNOME/sources/libxml++/3.2/libxml++-3.2.0.sha256sum +sha256 b786fae7fd7820d356698069a787d107995c3efcbef50d8f4efd3766ab768e4f libxml++-3.2.0.tar.xz + +# Hash for license file +sha256 a190dc9c8043755d90f8b0a75fa66b9e42d4af4c980bf5ddc633f0124db3cee7 COPYING diff --git a/package/libxmlpp/libxmlpp.mk b/package/libxmlpp/libxmlpp.mk new file mode 100644 index 00000000..98cba2a5 --- /dev/null +++ b/package/libxmlpp/libxmlpp.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libxmlpp +# +################################################################################ + +LIBXMLPP_VERSION_MAJOR = 3.2 +LIBXMLPP_VERSION = $(LIBXMLPP_VERSION_MAJOR).0 +LIBXMLPP_LICENSE = LGPL-2.1 (library), LGPL-2.0+ (examples) +LIBXMLPP_LICENSE_FILES = COPYING +LIBXMLPP_SOURCE = libxml++-$(LIBXMLPP_VERSION).tar.xz +LIBXMLPP_SITE = http://ftp.gnome.org/pub/GNOME/sources/libxml++/$(LIBXMLPP_VERSION_MAJOR) +LIBXMLPP_INSTALL_STAGING = YES +LIBXMLPP_DEPENDENCIES = libxml2 glibmm host-pkgconf + +$(eval $(autotools-package)) diff --git a/package/libxmlrpc/0001-use-correct-curl-config.patch b/package/libxmlrpc/0001-use-correct-curl-config.patch new file mode 100644 index 00000000..f2f1c557 --- /dev/null +++ b/package/libxmlrpc/0001-use-correct-curl-config.patch @@ -0,0 +1,70 @@ +Use correct curl-config program + +Instead of calling directly curl-config in src/Makefile (which ends up +calling the wrong curl-config: the one in the PATH instead of the one +pointed at by the environment variables at configure time), let's +define a CURL_CONFIG variable that contains the path to the proper +curl-config program, and use it where appropriate. + +Signed-off-by: Thomas Petazzoni + +Index: b/src/Makefile +=================================================================== +--- a/src/Makefile ++++ b/src/Makefile +@@ -57,7 +57,7 @@ + TRANSPORT_MODS += $(BLDDIR)/lib/curl_transport/xmlrpc_curl_transport + TRANSPORT_MODS += $(BLDDIR)/lib/curl_transport/curltransaction + TRANSPORT_MODS += $(BLDDIR)/lib/curl_transport/curlmulti +- TRANSPORT_LIBDEP += $(shell curl-config --libs) ++ TRANSPORT_LIBDEP += $(shell $CURL_CONFIG --libs) + TRANSPORT_INCLUDES += -Isrcdir/lib/curl_transport + endif + ifeq ($(MUST_BUILD_LIBWWW_CLIENT),yes) +Index: b/config.mk.in +=================================================================== +--- a/config.mk.in ++++ b/config.mk.in +@@ -32,6 +32,7 @@ + LSOCKET = @LSOCKET@ + WININET_LDADD = @WININET_LDADD@ + WININET_LIBDIR = @WININET_LIBDIR@ ++CURL_CONFIG = @CURL_CONFIG@ + CURL_LDADD = @CURL_LDADD@ + CURL_LIBDIR = @CURL_LIBDIR@ + LIBWWW_LDADD = @LIBWWW_LDADD@ +Index: b/configure.in +=================================================================== +--- a/configure.in ++++ b/configure.in +@@ -550,6 +550,8 @@ + dnl So we don't do any check now. If we find out there's a problem with + dnl older Curls, we will revisit that. + ++ AC_SUBST(CURL_CONFIG) ++ + CURL_LDADD=$($CURL_CONFIG --libs) + AC_SUBST(CURL_LDADD) + +Index: b/lib/curl_transport/Makefile +=================================================================== +--- a/lib/curl_transport/Makefile ++++ b/lib/curl_transport/Makefile +@@ -29,7 +29,7 @@ + + $(SRCDIR)/common.mk: srcdir blddir + +-CURL_VERSION := $(shell curl-config --vernum) ++CURL_VERSION := $(shell $(CURL_CONFIG) --vernum) + + # Some time at or before Curl 7.12, became an empty file + # (no-op). Some time after Curl 7.18, ceased to exist. +@@ -43,7 +43,7 @@ + CFLAGS_LOCAL += -DNEED_CURL_TYPES_H + endif + +-CURL_INCLUDES := $(shell curl-config --cflags) ++CURL_INCLUDES := $(shell $(CURL_CONFIG) --cflags) + # We expect that curl-config --cflags just gives us -I options, because + # we need just the -I options for 'make dep'. Plus, it's scary to think + # of what any other compiler flag would do to our compile. diff --git a/package/libxmlrpc/Config.in b/package/libxmlrpc/Config.in new file mode 100644 index 00000000..d24a7916 --- /dev/null +++ b/package/libxmlrpc/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_LIBXMLRPC + bool "libxmlrpc" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_LIBCURL + help + XML-RPC is a quick-and-easy way to make procedure calls over + the Internet. It converts the procedure call into an XML + document, sends it to a remote server using HTTP, and gets + back the response as XML. + + http://xmlrpc-c.sourceforge.net/ + +comment "libxmlrpc needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libxmlrpc/libxmlrpc.hash b/package/libxmlrpc/libxmlrpc.hash new file mode 100644 index 00000000..70347732 --- /dev/null +++ b/package/libxmlrpc/libxmlrpc.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 84d20ae33f927582f821d61c0b9194aefbf1d7924590a13fa9da5ae1698aded9 xmlrpc-c-1.51.07.tgz +sha256 db7a6d3f187b218c3534010a83424c6bcdef88e6a0b6b1aa3a8762238bd642e6 doc/COPYING diff --git a/package/libxmlrpc/libxmlrpc.mk b/package/libxmlrpc/libxmlrpc.mk new file mode 100644 index 00000000..0871b6e7 --- /dev/null +++ b/package/libxmlrpc/libxmlrpc.mk @@ -0,0 +1,55 @@ +################################################################################ +# +# libxmlrpc +# +################################################################################ + +LIBXMLRPC_VERSION = 1.51.07 +LIBXMLRPC_SOURCE = xmlrpc-c-$(LIBXMLRPC_VERSION).tgz +LIBXMLRPC_SITE = http://downloads.sourceforge.net/project/xmlrpc-c/Xmlrpc-c%20Super%20Stable/$(LIBXMLRPC_VERSION) +LIBXMLRPC_LICENSE = BSD-3-Clause (xml-rpc main code and abyss web server), BSD like (lib/expat), Python 1.5.2 license (parts of xmlrpc_base64.c) +LIBXMLRPC_LICENSE_FILES = doc/COPYING +LIBXMLRPC_INSTALL_STAGING = YES +LIBXMLRPC_DEPENDENCIES = libcurl host-autoconf +LIBXMLRPC_CONFIG_SCRIPTS = xmlrpc-c-config +LIBXMLRPC_MAKE = $(MAKE1) + +# Using autoconf, not automake, so we cannot use AUTORECONF = YES. +define LIBXMLRPC_RUN_AUTOCONF + cd $(@D); $(AUTOCONF) +endef + +LIBXMLRPC_PRE_CONFIGURE_HOOKS += LIBXMLRPC_RUN_AUTOCONF + +LIBXMLRPC_CONF_OPTS = \ + $(if $(BR2_USE_WCHAR),,ac_cv_header_wchar_h=no) \ + $(if $(BR2_INSTALL_LIBSTDCPP),,--disable-cplusplus) \ + have_curl_config=$(STAGING_DIR)/usr/bin/curl-config \ + CURL_CONFIG=$(STAGING_DIR)/usr/bin/curl-config + +# Our package uses autoconf, but not automake, so we need to pass +# those variables at compile time as well. +LIBXMLRPC_MAKE_OPTS = \ + CC_FOR_BUILD="$(HOSTCC)" \ + LD_FOR_BUILD="$(HOSTLD)" \ + CFLAGS_FOR_BUILD="$(HOST_CFLAGS)" \ + LDFLAGS_FOR_BUILD="$(HOST_LDFLAGS)" + +ifeq ($(BR2_STATIC_LIBS),y) +LIBXMLRPC_STATIC_OPTS = SHARED_LIB_TYPE=NONE MUST_BUILD_SHLIB=N +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +LIBXMLRPC_DEPENDENCIES += host-pkgconf openssl +LIBXMLRPC_CONF_OPTS += --enable-abyss-openssl +else +LIBXMLRPC_CONF_OPTS += --disable-abyss-openssl +endif + +LIBXMLRPC_MAKE_OPTS += $(LIBXMLRPC_STATIC_OPTS) +LIBXMLRPC_INSTALL_STAGING_OPTS = $(LIBXMLRPC_STATIC_OPTS) \ + DESTDIR=$(STAGING_DIR) install +LIBXMLRPC_INSTALL_TARGET_OPTS = $(LIBXMLRPC_STATIC_OPTS) \ + DESTDIR=$(TARGET_DIR) install + +$(eval $(autotools-package)) diff --git a/package/libxslt/0001-Fix-xml2-config-check-in-configure-script.patch b/package/libxslt/0001-Fix-xml2-config-check-in-configure-script.patch new file mode 100644 index 00000000..3848dcb2 --- /dev/null +++ b/package/libxslt/0001-Fix-xml2-config-check-in-configure-script.patch @@ -0,0 +1,31 @@ +From 90c34c8bb90e095a8a8fe8b2ce368bd9ff1837cc Mon Sep 17 00:00:00 2001 +From: Nick Wellnhofer +Date: Fri, 15 Nov 2019 11:53:11 +0100 +Subject: [PATCH] Fix xml2-config check in configure script + +A 'print' option has never been supported. After a recent change to +libxml2, invalid options cause xml2-config to fail. + +[Retrieved from: +https://gitlab.gnome.org/GNOME/libxslt/-/commit/90c34c8bb90e095a8a8fe8b2ce368bd9ff1837cc] +Signed-off-by: Fabrice Fontaine +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 3da57b18..585b9d7c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -548,7 +548,7 @@ dnl make sure xml2-config is executable, + dnl test version and init our variables + dnl + +-if test "x$LIBXML_LIBS" = "x" && ${XML_CONFIG} --libs print > /dev/null 2>&1 ++if test "x$LIBXML_LIBS" = "x" && ${XML_CONFIG} --libs > /dev/null 2>&1 + then + AC_MSG_CHECKING(for libxml libraries >= $LIBXML_REQUIRED_VERSION) + XMLVERS=`$XML_CONFIG --version` +-- +GitLab + diff --git a/package/libxslt/Config.in b/package/libxslt/Config.in new file mode 100644 index 00000000..dfe5b99f --- /dev/null +++ b/package/libxslt/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_LIBXSLT + bool "libxslt" + select BR2_PACKAGE_LIBXML2 + help + Install the xslt library which is used + to transform XML files to other XML files. + + XSLT is designed for use as part of XSL, + which is a stylesheet language for XML. + In addition to XSLT, XSL includes an XML vocabulary + for specifying formatting. + XSL specifies the styling of an XML document by using XSLT + to describe how the document is transformed into another + XML document that uses the formatting vocabulary. + + http://xmlsoft.org/xslt/ diff --git a/package/libxslt/libxslt.hash b/package/libxslt/libxslt.hash new file mode 100644 index 00000000..25aa3083 --- /dev/null +++ b/package/libxslt/libxslt.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +sha256 98b1bd46d6792925ad2dfe9a87452ea2adebf69dcb9919ffd55bf926a7f93f7f libxslt-1.1.34.tar.gz + +# Hash for license file: +sha256 7e48e290b6bfccc2ec1b297023a1d77f2fd87417f71fbb9f50aabef40a851819 COPYING diff --git a/package/libxslt/libxslt.mk b/package/libxslt/libxslt.mk new file mode 100644 index 00000000..d0f79d25 --- /dev/null +++ b/package/libxslt/libxslt.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# libxslt +# +################################################################################ + +LIBXSLT_VERSION = 1.1.34 +LIBXSLT_SITE = http://xmlsoft.org/sources +LIBXSLT_INSTALL_STAGING = YES +LIBXSLT_LICENSE = MIT +LIBXSLT_LICENSE_FILES = COPYING +LIBXSLT_CPE_ID_VENDOR = xmlsoft +# We're patching configure.ac +LIBXSLT_AUTORECONF = YES + +LIBXSLT_CONF_OPTS = \ + --with-gnu-ld \ + --without-debug \ + --without-python \ + --with-libxml-prefix=$(STAGING_DIR)/usr +LIBXSLT_CONFIG_SCRIPTS = xslt-config +LIBXSLT_DEPENDENCIES = host-pkgconf libxml2 + +# If we have enabled libgcrypt then use it, else disable crypto support. +ifeq ($(BR2_PACKAGE_LIBGCRYPT),y) +LIBXSLT_DEPENDENCIES += libgcrypt +LIBXSLT_CONF_ENV += LIBGCRYPT_CONFIG=$(STAGING_DIR)/usr/bin/libgcrypt-config +else +LIBXSLT_CONF_OPTS += --without-crypto +endif + +HOST_LIBXSLT_CONF_OPTS = --without-debug --without-python --without-crypto + +HOST_LIBXSLT_DEPENDENCIES = host-pkgconf host-libxml2 + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libyaml/Config.in b/package/libyaml/Config.in new file mode 100644 index 00000000..00a48b20 --- /dev/null +++ b/package/libyaml/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LIBYAML + bool "libyaml" + help + LibYAML is a YAML 1.1 parser and emitter written in C. + + http://pyyaml.org/wiki/LibYAML diff --git a/package/libyaml/libyaml.hash b/package/libyaml/libyaml.hash new file mode 100644 index 00000000..0de9e527 --- /dev/null +++ b/package/libyaml/libyaml.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 c642ae9b75fee120b2d96c712538bd2cf283228d2337df2cf2988e3c02678ef4 yaml-0.2.5.tar.gz +sha256 c40112449f254b9753045925248313e9270efa36d226b22d82d4cc6c43c57f29 License diff --git a/package/libyaml/libyaml.mk b/package/libyaml/libyaml.mk new file mode 100644 index 00000000..cf3d44ca --- /dev/null +++ b/package/libyaml/libyaml.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# libyaml +# +################################################################################ + +LIBYAML_VERSION = 0.2.5 +LIBYAML_SOURCE = yaml-$(LIBYAML_VERSION).tar.gz +LIBYAML_SITE = http://pyyaml.org/download/libyaml +LIBYAML_INSTALL_STAGING = YES +LIBYAML_LICENSE = MIT +LIBYAML_LICENSE_FILES = License +LIBYAML_CPE_ID_VENDOR = pyyaml + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/libyang/Config.in b/package/libyang/Config.in new file mode 100644 index 00000000..fec1160a --- /dev/null +++ b/package/libyang/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_LIBYANG + bool "libyang" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_PCRE + select BR2_PACKAGE_PCRE_UCP + help + Libyang is YANG data modeling language parser and toolkit + written (and providing API) in C. + + https://github.com/CESNET/libyang + +comment "libyang needs a toolchain w/ threads, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/libyang/libyang.hash b/package/libyang/libyang.hash new file mode 100644 index 00000000..bc9e948c --- /dev/null +++ b/package/libyang/libyang.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 c4498a77a7c12a28c9911f993eeafbf2badd2ecea58bb74781bd61cfc635e4c9 libyang-1.0.215.tar.gz +sha256 f942fe693e03e4e3ff67a351c00dc8f468a042e0d7273b0aa6bc53060b568112 LICENSE diff --git a/package/libyang/libyang.mk b/package/libyang/libyang.mk new file mode 100644 index 00000000..ee24256b --- /dev/null +++ b/package/libyang/libyang.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# libyang +# +################################################################################ + +LIBYANG_VERSION = 1.0.215 +LIBYANG_SITE = $(call github,CESNET,libyang,v$(LIBYANG_VERSION)) +LIBYANG_LICENSE = BSD-3-Clause +LIBYANG_LICENSE_FILES = LICENSE +LIBYANG_INSTALL_STAGING = YES +LIBYANG_CPE_ID_VENDOR = cesnet +LIBYANG_SUPPORTS_IN_SOURCE_BUILD = NO +LIBYANG_DEPENDENCIES = pcre +HOST_LIBYANG_DEPENDENCIES = host-pcre + +LIBYANG_CONF_OPTS = \ + -DENABLE_VALGRIND_TESTS=OFF \ + -DGEN_PYTHON_BINDINGS=OFF \ + -DENABLE_LYD_PRIV=ON + +HOST_LIBYANG_CONF_OPTS = \ + -DENABLE_VALGRIND_TESTS=OFF \ + -DGEN_PYTHON_BINDINGS=OFF + +$(eval $(cmake-package)) +$(eval $(host-cmake-package)) diff --git a/package/libyuv/0001-i386-sse2.patch b/package/libyuv/0001-i386-sse2.patch new file mode 100644 index 00000000..b8ecb34d --- /dev/null +++ b/package/libyuv/0001-i386-sse2.patch @@ -0,0 +1,16 @@ +Fix compilation on non-sse2 platforms + +Signed-off-by: Bernd Kuhls + +diff -uNr libyuv-1411.org/include/libyuv/scale_row.h libyuv-1411/include/libyuv/scale_row.h +--- libyuv-1411.org/include/libyuv/scale_row.h 2015-05-22 23:39:21.000000000 +0200 ++++ libyuv-1411/include/libyuv/scale_row.h 2015-05-25 12:35:17.000000000 +0200 +@@ -33,7 +33,7 @@ + + // The following are available on all x86 platforms: + #if !defined(LIBYUV_DISABLE_X86) && \ +- (defined(_M_IX86) || defined(__x86_64__) || defined(__i386__)) ++ (defined(_M_IX86) || defined(__x86_64__) || (defined(__i386__) && defined(__SSE2__))) + #define HAS_FIXEDDIV1_X86 + #define HAS_FIXEDDIV_X86 + #define HAS_SCALEADDROWS_SSE2 diff --git a/package/libyuv/Config.in b/package/libyuv/Config.in new file mode 100644 index 00000000..355ceb0f --- /dev/null +++ b/package/libyuv/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LIBYUV + bool "libyuv" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS + help + libyuv is an open source project that includes YUV scaling + and conversion functionality. + + https://chromium.googlesource.com/libyuv/libyuv/ + +comment "libyuv needs a toolchain w/ C++, dynamic library" + depends on !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS diff --git a/package/libyuv/libyuv.hash b/package/libyuv/libyuv.hash new file mode 100644 index 00000000..4b70e63a --- /dev/null +++ b/package/libyuv/libyuv.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 7bb4118ef050ca3e9a27f49b7d21e068922bf57cf973f2c7b1476cadf73ac66a libyuv-413a8d8041f1cc5a350a47c0d81cc721e64f9fd0-br1.tar.gz +sha256 2b2cc1180c7e6988328ad2033b04b80117419db9c4c584918bbb3cfec7e9364f LICENSE diff --git a/package/libyuv/libyuv.mk b/package/libyuv/libyuv.mk new file mode 100644 index 00000000..b3843cec --- /dev/null +++ b/package/libyuv/libyuv.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# libyuv +# +################################################################################ + +LIBYUV_VERSION = 413a8d8041f1cc5a350a47c0d81cc721e64f9fd0 +LIBYUV_SITE = https://chromium.googlesource.com/libyuv/libyuv +LIBYUV_SITE_METHOD = git +LIBYUV_LICENSE = BSD-3-Clause +LIBYUV_LICENSE_FILES = LICENSE +LIBYUV_INSTALL_STAGING = YES +LIBYUV_DEPENDENCIES = $(if $(BR2_PACKAGE_JPEG),jpeg) + +$(eval $(cmake-package)) diff --git a/package/libzip/0001-Add-FindGnuTLS-cmake-from-3-17-3.patch b/package/libzip/0001-Add-FindGnuTLS-cmake-from-3-17-3.patch new file mode 100644 index 00000000..30bc2010 --- /dev/null +++ b/package/libzip/0001-Add-FindGnuTLS-cmake-from-3-17-3.patch @@ -0,0 +1,103 @@ +From 73f6f8ebff678a0847e6b197b574082cc285b528 Mon Sep 17 00:00:00 2001 +From: Thomas Klausner +Date: Sat, 25 Jul 2020 12:03:29 +0200 +Subject: [PATCH] Add FindGnuTLS.cmake from 3.17.3. + +Addresses #199 + +[Retrieved from: +https://github.com/nih-at/libzip/commit/73f6f8ebff678a0847e6b197b574082cc285b528] +Signed-off-by: Fabrice Fontaine +--- + cmake-compat/FindGnuTLS.cmake | 82 +++++++++++++++++++++++++++++++++++ + 1 file changed, 82 insertions(+) + create mode 100644 cmake-compat/FindGnuTLS.cmake + +diff --git a/cmake-compat/FindGnuTLS.cmake b/cmake-compat/FindGnuTLS.cmake +new file mode 100644 +index 00000000..819f0001 +--- /dev/null ++++ b/cmake-compat/FindGnuTLS.cmake +@@ -0,0 +1,82 @@ ++# Distributed under the OSI-approved BSD 3-Clause License. See accompanying ++# file Copyright.txt or https://cmake.org/licensing for details. ++ ++#[=======================================================================[.rst: ++FindGnuTLS ++---------- ++ ++Find the GNU Transport Layer Security library (gnutls) ++ ++IMPORTED Targets ++^^^^^^^^^^^^^^^^ ++ ++This module defines :prop_tgt:`IMPORTED` target ``GnuTLS::GnuTLS``, if ++gnutls has been found. ++ ++Result Variables ++^^^^^^^^^^^^^^^^ ++ ++``GNUTLS_FOUND`` ++ System has gnutls ++``GNUTLS_INCLUDE_DIR`` ++ The gnutls include directory ++``GNUTLS_LIBRARIES`` ++ The libraries needed to use gnutls ++``GNUTLS_DEFINITIONS`` ++ Compiler switches required for using gnutls ++``GNUTLS_VERSION`` ++ version of gnutls. ++#]=======================================================================] ++ ++# Note that this doesn't try to find the gnutls-extra package. ++ ++ ++if (GNUTLS_INCLUDE_DIR AND GNUTLS_LIBRARY) ++ # in cache already ++ set(gnutls_FIND_QUIETLY TRUE) ++endif () ++ ++if (NOT WIN32) ++ # try using pkg-config to get the directories and then use these values ++ # in the find_path() and find_library() calls ++ # also fills in GNUTLS_DEFINITIONS, although that isn't normally useful ++ find_package(PkgConfig QUIET) ++ PKG_CHECK_MODULES(PC_GNUTLS QUIET gnutls) ++ set(GNUTLS_DEFINITIONS ${PC_GNUTLS_CFLAGS_OTHER}) ++ set(GNUTLS_VERSION ${PC_GNUTLS_VERSION}) ++ # keep for backward compatibility ++ set(GNUTLS_VERSION_STRING ${PC_GNUTLS_VERSION}) ++endif () ++ ++find_path(GNUTLS_INCLUDE_DIR gnutls/gnutls.h ++ HINTS ++ ${PC_GNUTLS_INCLUDEDIR} ++ ${PC_GNUTLS_INCLUDE_DIRS} ++ ) ++ ++find_library(GNUTLS_LIBRARY NAMES gnutls libgnutls ++ HINTS ++ ${PC_GNUTLS_LIBDIR} ++ ${PC_GNUTLS_LIBRARY_DIRS} ++ ) ++ ++mark_as_advanced(GNUTLS_INCLUDE_DIR GNUTLS_LIBRARY) ++ ++include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) ++FIND_PACKAGE_HANDLE_STANDARD_ARGS(GnuTLS ++ REQUIRED_VARS GNUTLS_LIBRARY GNUTLS_INCLUDE_DIR ++ VERSION_VAR GNUTLS_VERSION_STRING) ++ ++if(GNUTLS_FOUND) ++ set(GNUTLS_LIBRARIES ${GNUTLS_LIBRARY}) ++ set(GNUTLS_INCLUDE_DIRS ${GNUTLS_INCLUDE_DIR}) ++ ++ if(NOT TARGET GnuTLS::GnuTLS) ++ add_library(GnuTLS::GnuTLS UNKNOWN IMPORTED) ++ set_target_properties(GnuTLS::GnuTLS PROPERTIES ++ INTERFACE_INCLUDE_DIRECTORIES "${GNUTLS_INCLUDE_DIRS}" ++ INTERFACE_COMPILE_DEFINITIONS "${GNUTLS_DEFINITIONS}" ++ IMPORTED_LINK_INTERFACE_LANGUAGES "C" ++ IMPORTED_LOCATION "${GNUTLS_LIBRARIES}") ++ endif() ++endif() diff --git a/package/libzip/0002-Include-limits.h-for-INT_MAX.patch b/package/libzip/0002-Include-limits.h-for-INT_MAX.patch new file mode 100644 index 00000000..c488f052 --- /dev/null +++ b/package/libzip/0002-Include-limits.h-for-INT_MAX.patch @@ -0,0 +1,27 @@ +From fd89e242d16128dedef08f47d99ae56aa19b0591 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=C3=98rjan=20Malde?= +Date: Wed, 15 Jul 2020 12:16:16 +0200 +Subject: [PATCH] Include limits.h for INT_MAX + +[Retrieved from: +https://github.com/nih-at/libzip/commit/fd89e242d16128dedef08f47d99ae56aa19b0591] +Signed-off-by: Paul Cercueil +--- + lib/zip_crypto_openssl.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/lib/zip_crypto_openssl.c b/lib/zip_crypto_openssl.c +index 1cb00479..60f92758 100644 +--- a/lib/zip_crypto_openssl.c ++++ b/lib/zip_crypto_openssl.c +@@ -38,6 +38,7 @@ + #include "zip_crypto.h" + + #include ++#include + + #if OPENSSL_VERSION_NUMBER < 0x1010000fL || defined(LIBRESSL_VERSION_NUMBER) + #define USE_OPENSSL_1_0_API +-- +2.28.0 + diff --git a/package/libzip/Config.in b/package/libzip/Config.in new file mode 100644 index 00000000..a603d9ab --- /dev/null +++ b/package/libzip/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_LIBZIP + bool "libzip" + depends on !BR2_STATIC_LIBS # dlsym() + select BR2_PACKAGE_MUSL_FTS if !BR2_TOOLCHAIN_USES_GLIBC + select BR2_PACKAGE_ZLIB + help + C library for reading, creating, and modifying zip archives. + This package also contains zipcmp, ziptorrent and zipmerge + utilities. + + https://libzip.org/ + +comment "libzip needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/libzip/libzip.hash b/package/libzip/libzip.hash new file mode 100644 index 00000000..a298b9ab --- /dev/null +++ b/package/libzip/libzip.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 a60473ffdb7b4260c08bfa19c2ccea0438edac11193c3afbbb1f17fbcf6c6132 libzip-1.7.3.tar.xz +sha256 deae392de70503672793ee784d603bfa8069dcd5974a325dfbf91160f3a147d6 LICENSE diff --git a/package/libzip/libzip.mk b/package/libzip/libzip.mk new file mode 100644 index 00000000..4a028f97 --- /dev/null +++ b/package/libzip/libzip.mk @@ -0,0 +1,58 @@ +################################################################################ +# +# libzip +# +################################################################################ + +LIBZIP_VERSION = 1.7.3 +LIBZIP_SITE = https://libzip.org/download +LIBZIP_SOURCE = libzip-$(LIBZIP_VERSION).tar.xz +LIBZIP_LICENSE = BSD-3-Clause +LIBZIP_LICENSE_FILES = LICENSE +LIBZIP_CPE_ID_VENDOR = libzip +LIBZIP_INSTALL_STAGING = YES +LIBZIP_DEPENDENCIES = zlib +HOST_LIBZIP_DEPENDENCIES = host-zlib + +ifeq ($(BR2_PACKAGE_BZIP2),y) +LIBZIP_DEPENDENCIES += bzip2 +LIBZIP_CONF_OPTS += -DENABLE_BZIP2=ON +else +LIBZIP_CONF_OPTS += -DENABLE_BZIP2=OFF +endif + +ifeq ($(BR2_PACKAGE_GNUTLS),y) +LIBZIP_DEPENDENCIES += gnutls +LIBZIP_CONF_OPTS += -DENABLE_GNUTLS=ON +else +LIBZIP_CONF_OPTS += -DENABLE_GNUTLS=OFF +endif + +ifeq ($(BR2_PACKAGE_MBEDTLS),y) +LIBZIP_DEPENDENCIES += mbedtls +LIBZIP_CONF_OPTS += -DENABLE_MBEDTLS=ON +else +LIBZIP_CONF_OPTS += -DENABLE_MBEDTLS=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +LIBZIP_DEPENDENCIES += openssl +LIBZIP_CONF_OPTS += -DENABLE_OPENSSL=ON +else +LIBZIP_CONF_OPTS += -DENABLE_OPENSSL=OFF +endif + +ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),) +LIBZIP_DEPENDENCIES += musl-fts +LIBZIP_CONF_OPTS += -DCMAKE_EXE_LINKER_FLAGS=-lfts +endif + +ifeq ($(BR2_PACKAGE_XZ),y) +LIBZIP_DEPENDENCIES += xz +LIBZIP_CONF_OPTS += -DENABLE_LZMA=ON +else +LIBZIP_CONF_OPTS += -DENABLE_LZMA=OFF +endif + +$(eval $(cmake-package)) +$(eval $(host-cmake-package)) diff --git a/package/libzlib/libzlib.hash b/package/libzlib/libzlib.hash new file mode 100644 index 00000000..e3736b10 --- /dev/null +++ b/package/libzlib/libzlib.hash @@ -0,0 +1,4 @@ +# From http://www.zlib.net/ +sha256 4ff941449631ace0d4d203e3483be9dbc9da454084111f97ea0a2114e19bf066 zlib-1.2.11.tar.xz +# License files, locally calculated +sha256 7960b6b1cc63e619abb77acaea5427159605afee8c8b362664f4effc7d7f7d15 README diff --git a/package/libzlib/libzlib.mk b/package/libzlib/libzlib.mk new file mode 100644 index 00000000..a10fc748 --- /dev/null +++ b/package/libzlib/libzlib.mk @@ -0,0 +1,80 @@ +################################################################################ +# +# libzlib +# +################################################################################ + +LIBZLIB_VERSION = 1.2.11 +LIBZLIB_SOURCE = zlib-$(LIBZLIB_VERSION).tar.xz +LIBZLIB_SITE = http://www.zlib.net +LIBZLIB_LICENSE = Zlib +LIBZLIB_LICENSE_FILES = README +LIBZLIB_INSTALL_STAGING = YES +LIBZLIB_PROVIDES = zlib +LIBZLIB_CPE_ID_VENDOR = gnu +LIBZLIB_CPE_ID_PRODUCT = zlib + +# It is not possible to build only a shared version of zlib, so we build both +# shared and static, unless we only want the static libs, and we eventually +# selectively remove what we do not want +ifeq ($(BR2_STATIC_LIBS),y) +LIBZLIB_PIC = +LIBZLIB_SHARED = --static +else +LIBZLIB_PIC = -fPIC +LIBZLIB_SHARED = --shared +endif + +define LIBZLIB_CONFIGURE_CMDS + (cd $(@D); rm -rf config.cache; \ + $(TARGET_CONFIGURE_ARGS) \ + $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(TARGET_CFLAGS) $(LIBZLIB_PIC)" \ + ./configure \ + $(LIBZLIB_SHARED) \ + --prefix=/usr \ + ) +endef + +define HOST_LIBZLIB_CONFIGURE_CMDS + (cd $(@D); rm -rf config.cache; \ + $(HOST_CONFIGURE_ARGS) \ + $(HOST_CONFIGURE_OPTS) \ + ./configure \ + --prefix="$(HOST_DIR)" \ + --sysconfdir="$(HOST_DIR)/etc" \ + ) +endef + +define LIBZLIB_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) -C $(@D) +endef + +define HOST_LIBZLIB_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE1) -C $(@D) +endef + +define LIBZLIB_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) -C $(@D) DESTDIR=$(STAGING_DIR) LDCONFIG=true install +endef + +define LIBZLIB_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) -C $(@D) DESTDIR=$(TARGET_DIR) LDCONFIG=true install +endef + +# We don't care removing the .a from target, since it not used at link +# time to build other packages, and it is anyway removed later before +# assembling the filesystem images anyway. +ifeq ($(BR2_SHARED_LIBS),y) +define LIBZLIB_RM_STATIC_STAGING + rm -f $(STAGING_DIR)/usr/lib/libz.a +endef +LIBZLIB_POST_INSTALL_STAGING_HOOKS += LIBZLIB_RM_STATIC_STAGING +endif + +define HOST_LIBZLIB_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE1) -C $(@D) LDCONFIG=true install +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/lightning/0001-include-Makefile.am-don-t-install-lightning.h-twice.patch b/package/lightning/0001-include-Makefile.am-don-t-install-lightning.h-twice.patch new file mode 100644 index 00000000..fb5299c2 --- /dev/null +++ b/package/lightning/0001-include-Makefile.am-don-t-install-lightning.h-twice.patch @@ -0,0 +1,38 @@ +From 604c931bc673c507254a84c0f423c9ec8ce6e3a1 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Thu, 10 Oct 2019 20:36:46 +0200 +Subject: [PATCH] include/Makefile.am: don't install lightning.h twice + +Commit 17164ed32d8f3530153b9cad67a4399c65f24512 added lightning.h to +nodist_include_HEADERS without removing it from include_HEADERS + +This raises the following error on one of the buildroot autobuilders: +/usr/bin/install -c -m 644 lightning.h '/home/test/autobuild/run/instance-3/output-1/target/usr/include' +/usr/bin/install -c -m 644 lightning.h '/home/test/autobuild/run/instance-3/output-1/target/usr/include' +/usr/bin/install: cannot create regular file `/home/test/autobuild/run/instance-3/output-1/target/usr/include/lightning.h': File exists + +Fix this by removing lightning.h from include_HEADERS + +Fixes: + - http://autobuild.buildroot.org/results/05ebc75598627d2a08e08e194f51cb8464f97b95 + +Signed-off-by: Fabrice Fontaine +--- + include/Makefile.am | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/include/Makefile.am b/include/Makefile.am +index e754dd3..8f91594 100644 +--- a/include/Makefile.am ++++ b/include/Makefile.am +@@ -14,7 +14,6 @@ + # License for more details. + # + +-include_HEADERS = lightning.h + SUBDIRS = \ + lightning + +-- +2.23.0 + diff --git a/package/lightning/Config.in b/package/lightning/Config.in new file mode 100644 index 00000000..a0542edc --- /dev/null +++ b/package/lightning/Config.in @@ -0,0 +1,32 @@ +comment "lightning needs a toolchain w/ dynamic library" + depends on BR2_sparc || BR2_i386 || BR2_x86_64 || BR2_mips || \ + BR2_mipsel || BR2_arm || BR2_powerpc || BR2_RISCV_64 + depends on BR2_STATIC_LIBS + +config BR2_PACKAGE_LIGHTNING + bool "lightning" + depends on BR2_sparc || BR2_i386 || BR2_x86_64 || BR2_mips || \ + BR2_mipsel || BR2_arm || BR2_powerpc || BR2_RISCV_64 + depends on !BR2_STATIC_LIBS + help + GNU lightning is a library that generates + assembly language code at run-time. + + https://www.gnu.org/software/lightning/ + +if BR2_PACKAGE_LIGHTNING + +config BR2_PACKAGE_LIGHTNING_DISASSEMBLER + bool "enable disassembler" + depends on !BR2_nios2 # binutils + depends on BR2_USE_WCHAR # binutils + select BR2_PACKAGE_BINUTILS + select BR2_PACKAGE_ZLIB + help + Enable the GNU lightning disassembler. + +comment "lightning disassembler needs a toolchain w/ wchar" + depends on !BR2_nios2 + depends on !BR2_USE_WCHAR + +endif diff --git a/package/lightning/lightning.hash b/package/lightning/lightning.hash new file mode 100644 index 00000000..bd20c85c --- /dev/null +++ b/package/lightning/lightning.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 ed856b866dc6f68678dc1151579118fab1c65fad687cf847fc2d94ca045efdc9 lightning-2.1.3.tar.gz +sha256 a853c2ffec17057872340eee242ae4d96cbf2b520ae27d903e1b2fef1a5f9d1c COPYING.LESSER diff --git a/package/lightning/lightning.mk b/package/lightning/lightning.mk new file mode 100644 index 00000000..3bd17bef --- /dev/null +++ b/package/lightning/lightning.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# lightning +# +################################################################################ + +LIGHTNING_VERSION = 2.1.3 +LIGHTNING_SITE = $(BR2_GNU_MIRROR)/lightning +LIGHTNING_LICENSE = LGPL-3.0+ +LIGHTNING_LICENSE_FILES = COPYING.LESSER +LIGHTNING_INSTALL_STAGING = YES +# We're patching include/Makefile.am +LIGHTNING_AUTORECONF = YES + +ifeq ($(BR2_PACKAGE_LIGHTNING_DISASSEMBLER),y) +LIGHTNING_DEPENDENCIES += binutils zlib +LIGHTNING_CONF_OPTS += --enable-disassembler +endif + +$(eval $(autotools-package)) diff --git a/package/lighttpd/0001-Fix-default-config-file.patch b/package/lighttpd/0001-Fix-default-config-file.patch new file mode 100644 index 00000000..47a85977 --- /dev/null +++ b/package/lighttpd/0001-Fix-default-config-file.patch @@ -0,0 +1,85 @@ +Modify the default lighttpd configuration file to have one a starting conf + + * Changed the log path to /var/log and logs filenames + * Disable IPv6 + * Do not setuid to a user that doesn't exist on the system + * Change the network backend to writev since linux-sendfile fails on buildroot + +Signed-off-by: Maxime Ripard +Signed-off-by: Simon Dawson +[Gustavo: update for 1.4.37] +Signed-off-by: Gustavo Zacarias + +diff -Nura lighttpd-1.4.37.orig/doc/config/conf.d/access_log.conf lighttpd-1.4.37/doc/config/conf.d/access_log.conf +--- lighttpd-1.4.37.orig/doc/config/conf.d/access_log.conf 2015-09-01 14:38:48.684673663 -0300 ++++ lighttpd-1.4.37/doc/config/conf.d/access_log.conf 2015-09-01 14:38:53.975855142 -0300 +@@ -9,7 +9,7 @@ + ## + ## Default access log. + ## +-accesslog.filename = log_root + "/access.log" ++accesslog.filename = log_root + "/lighttpd-access.log" + + ## + ## The default format produces CLF compatible output. +diff -Nura lighttpd-1.4.37.orig/doc/config/lighttpd.conf lighttpd-1.4.37/doc/config/lighttpd.conf +--- lighttpd-1.4.37.orig/doc/config/lighttpd.conf 2015-09-01 14:38:48.684673663 -0300 ++++ lighttpd-1.4.37/doc/config/lighttpd.conf 2015-09-01 14:39:40.256442492 -0300 +@@ -13,8 +13,8 @@ + ## if you add a variable here. Add the corresponding variable in the + ## chroot example aswell. + ## +-var.log_root = "/var/log/lighttpd" +-var.server_root = "/srv/www" ++var.log_root = "/var/log" ++var.server_root = "/var/www" + var.state_dir = "/run" + var.home_dir = "/var/lib/lighttpd" + var.conf_dir = "/etc/lighttpd" +@@ -90,7 +90,7 @@ + ## + ## Use IPv6? + ## +-server.use-ipv6 = "enable" ++# server.use-ipv6 = "enable" + + ## + ## bind to a specific IP +@@ -101,8 +101,8 @@ + ## Run as a different username/groupname. + ## This requires root permissions during startup. + ## +-server.username = "lighttpd" +-server.groupname = "lighttpd" ++server.username = "www-data" ++server.groupname = "www-data" + + ## + ## Enable lighttpd to serve requests on sockets received from systemd +@@ -118,7 +118,7 @@ + ## + ## Document root + ## +-server.document-root = server_root + "/htdocs" ++server.document-root = server_root + + ## + ## The value for the "Server:" response field. +@@ -144,7 +144,7 @@ + ## + ## Path to the error log file + ## +-server.errorlog = log_root + "/error.log" ++server.errorlog = log_root + "/lighttpd-error.log" + + ## + ## If you want to log to syslog you have to unset the +@@ -195,7 +195,7 @@ + ## sendfile - is recommended for small files. + ## writev - is recommended for sending many large files + ## +-server.network-backend = "sendfile" ++server.network-backend = "writev" + + ## + ## As lighttpd is a single-threaded server, its main resource limit is diff --git a/package/lighttpd/Config.in b/package/lighttpd/Config.in new file mode 100644 index 00000000..e9a5aa34 --- /dev/null +++ b/package/lighttpd/Config.in @@ -0,0 +1,67 @@ +comment "lighttpd needs a toolchain w/ dynamic library" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS + +config BR2_PACKAGE_LIGHTTPD + bool "lighttpd" + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS + help + lighttpd a secure, fast, compliant and very flexible + web-server which has been optimized for high-performance + environments. It has a very low memory footprint compared to + other webservers and takes care of cpu-load. Its advanced + feature-set (FastCGI, CGI, Auth, Output-Compression, + URL-Rewriting and many more) make lighttpd the perfect + webserver-software for every server that is suffering load + problems. + + https://www.lighttpd.net/ + +if BR2_PACKAGE_LIGHTTPD + +config BR2_PACKAGE_LIGHTTPD_OPENSSL + bool "openssl support" + select BR2_PACKAGE_OPENSSL + help + Enable OpenSSL support for lighttpd. + +config BR2_PACKAGE_LIGHTTPD_PAM + bool "pam authentication support" + default y + depends on BR2_PACKAGE_LINUX_PAM + help + Enable PAM authentication support for lighttpd. + +config BR2_PACKAGE_LIGHTTPD_ZLIB + bool "zlib support" + select BR2_PACKAGE_ZLIB + help + Enable zlib support for lighttpd mod_compress. + +config BR2_PACKAGE_LIGHTTPD_BZIP2 + bool "bzip2 support" + select BR2_PACKAGE_BZIP2 + help + Enable bzip2 support for lighttpd mod_compress. + +config BR2_PACKAGE_LIGHTTPD_PCRE + bool "pcre support" + select BR2_PACKAGE_PCRE + help + Enable PCRE support. Needed to support mod_rewrite + +config BR2_PACKAGE_LIGHTTPD_WEBDAV + bool "webdav support" + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_SQLITE + help + Enable webdav support. Needed to support mod_webdav + +config BR2_PACKAGE_LIGHTTPD_LUA + bool "lua support" + depends on BR2_PACKAGE_LUA + help + Enable Lua support. Needed to support mod_magnet + +endif diff --git a/package/lighttpd/S50lighttpd b/package/lighttpd/S50lighttpd new file mode 100644 index 00000000..b3518cd2 --- /dev/null +++ b/package/lighttpd/S50lighttpd @@ -0,0 +1,43 @@ +#!/bin/sh +# +# Starts lighttpd. +# +NAME=lighttpd +DAEMON=/usr/sbin/$NAME +PID_FILE="/var/run/$NAME.pid" +CONF_FILE="/etc/$NAME/$NAME.conf" + +[ -r /etc/default/$NAME ] && . /etc/default/$NAME + +start() { + printf "Starting lighttpd: " + start-stop-daemon -S -q -p $PID_FILE --exec $DAEMON -- -f $CONF_FILE + echo "OK" +} +stop() { + printf "Stopping lighttpd: " + start-stop-daemon -K -q -p $PID_FILE + echo "OK" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? + diff --git a/package/lighttpd/lighttpd.hash b/package/lighttpd/lighttpd.hash new file mode 100644 index 00000000..0a7cdfe3 --- /dev/null +++ b/package/lighttpd/lighttpd.hash @@ -0,0 +1,4 @@ +# From https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.58.sha256sum +sha256 267feffda13a190ebdce7b15172d8be16da98008457f30fddecd72832d126d0e lighttpd-1.4.58.tar.xz +# Locally calculated +sha256 5c98cad2fbaf5c5e2562bcbab401a7c557c1bb1bac9914ecc63730925052fb13 COPYING diff --git a/package/lighttpd/lighttpd.mk b/package/lighttpd/lighttpd.mk new file mode 100644 index 00000000..028ff17a --- /dev/null +++ b/package/lighttpd/lighttpd.mk @@ -0,0 +1,107 @@ +################################################################################ +# +# lighttpd +# +################################################################################ + +LIGHTTPD_VERSION_MAJOR = 1.4 +LIGHTTPD_VERSION = $(LIGHTTPD_VERSION_MAJOR).58 +LIGHTTPD_SOURCE = lighttpd-$(LIGHTTPD_VERSION).tar.xz +LIGHTTPD_SITE = http://download.lighttpd.net/lighttpd/releases-$(LIGHTTPD_VERSION_MAJOR).x +LIGHTTPD_LICENSE = BSD-3-Clause +LIGHTTPD_LICENSE_FILES = COPYING +LIGHTTPD_CPE_ID_VENDOR = lighttpd +LIGHTTPD_DEPENDENCIES = host-pkgconf +LIGHTTPD_CONF_OPTS = \ + --without-wolfssl \ + --libdir=/usr/lib/lighttpd \ + --libexecdir=/usr/lib + +ifeq ($(BR2_PACKAGE_LIGHTTPD_OPENSSL),y) +LIGHTTPD_DEPENDENCIES += openssl +LIGHTTPD_CONF_OPTS += --with-openssl +else +LIGHTTPD_CONF_OPTS += --without-openssl +endif + +ifeq ($(BR2_PACKAGE_LIGHTTPD_PAM),y) +LIGHTTPD_DEPENDENCIES += linux-pam +LIGHTTPD_CONF_OPTS += --with-pam +else +LIGHTTPD_CONF_OPTS += --without-pam +endif + +ifeq ($(BR2_PACKAGE_LIGHTTPD_ZLIB),y) +LIGHTTPD_DEPENDENCIES += zlib +LIGHTTPD_CONF_OPTS += --with-zlib +else +LIGHTTPD_CONF_OPTS += --without-zlib +endif + +ifeq ($(BR2_PACKAGE_LIGHTTPD_BZIP2),y) +LIGHTTPD_DEPENDENCIES += bzip2 +LIGHTTPD_CONF_OPTS += --with-bzip2 +else +LIGHTTPD_CONF_OPTS += --without-bzip2 +endif + +ifeq ($(BR2_PACKAGE_LIGHTTPD_PCRE),y) +LIGHTTPD_CONF_ENV = PCRECONFIG=$(STAGING_DIR)/usr/bin/pcre-config +LIGHTTPD_DEPENDENCIES += pcre +LIGHTTPD_CONF_OPTS += --with-pcre +else +LIGHTTPD_CONF_OPTS += --without-pcre +endif + +ifeq ($(BR2_PACKAGE_LIGHTTPD_WEBDAV),y) +LIGHTTPD_DEPENDENCIES += libxml2 sqlite +LIGHTTPD_CONF_OPTS += --with-webdav-props +ifeq ($(BR2_PACKAGE_UTIL_LINUX_LIBUUID),y) +LIGHTTPD_CONF_OPTS += --with-webdav-locks +LIGHTTPD_DEPENDENCIES += util-linux +else +LIGHTTPD_CONF_OPTS += --without-webdav-locks +endif +else +LIGHTTPD_CONF_OPTS += --without-webdav-props --without-webdav-locks +endif + +ifeq ($(BR2_PACKAGE_LIGHTTPD_LUA),y) +LIGHTTPD_DEPENDENCIES += lua +LIGHTTPD_CONF_OPTS += --with-lua +else +LIGHTTPD_CONF_OPTS += --without-lua +endif + +define LIGHTTPD_INSTALL_CONFIG + $(INSTALL) -d -m 0755 $(TARGET_DIR)/etc/lighttpd/conf.d + $(INSTALL) -d -m 0755 $(TARGET_DIR)/var/www + $(INSTALL) -D -m 0644 $(@D)/doc/config/lighttpd.conf \ + $(TARGET_DIR)/etc/lighttpd/lighttpd.conf + $(INSTALL) -D -m 0644 $(@D)/doc/config/modules.conf \ + $(TARGET_DIR)/etc/lighttpd/modules.conf + $(INSTALL) -D -m 0644 $(@D)/doc/config/conf.d/access_log.conf \ + $(TARGET_DIR)/etc/lighttpd/conf.d/access_log.conf + $(INSTALL) -D -m 0644 $(@D)/doc/config/conf.d/debug.conf \ + $(TARGET_DIR)/etc/lighttpd/conf.d/debug.conf + $(INSTALL) -D -m 0644 $(@D)/doc/config/conf.d/dirlisting.conf \ + $(TARGET_DIR)/etc/lighttpd/conf.d/dirlisting.conf + $(INSTALL) -D -m 0644 $(@D)/doc/config/conf.d/mime.conf \ + $(TARGET_DIR)/etc/lighttpd/conf.d/mime.conf +endef + +LIGHTTPD_POST_INSTALL_TARGET_HOOKS += LIGHTTPD_INSTALL_CONFIG + +define LIGHTTPD_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/lighttpd/S50lighttpd \ + $(TARGET_DIR)/etc/init.d/S50lighttpd +endef + +define LIGHTTPD_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0644 $(@D)/doc/systemd/lighttpd.service \ + $(TARGET_DIR)/usr/lib/systemd/system/lighttpd.service + $(INSTALL) -D -m 644 package/lighttpd/lighttpd_tmpfiles.conf \ + $(TARGET_DIR)/usr/lib/tmpfiles.d/lighttpd.conf +endef + +$(eval $(autotools-package)) diff --git a/package/lighttpd/lighttpd_tmpfiles.conf b/package/lighttpd/lighttpd_tmpfiles.conf new file mode 100644 index 00000000..a24f3f7f --- /dev/null +++ b/package/lighttpd/lighttpd_tmpfiles.conf @@ -0,0 +1,2 @@ +f /var/log/lighttpd-access.log 0640 www-data www-data - +f /var/log/lighttpd-error.log 0640 www-data www-data - diff --git a/package/linenoise/Config.in b/package/linenoise/Config.in new file mode 100644 index 00000000..8e4ab91d --- /dev/null +++ b/package/linenoise/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LINENOISE + bool "linenoise" + help + A small self-contained alternative to readline and libedit + + https://github.com/antirez/linenoise diff --git a/package/linenoise/linenoise.hash b/package/linenoise/linenoise.hash new file mode 100644 index 00000000..a1cabd9e --- /dev/null +++ b/package/linenoise/linenoise.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 f5054a4fe120d43d85427cf58af93e56b9bb80389d507a9bec9b75531a340014 linenoise-1.0.tar.gz +sha256 efe1692aa5b869edaa0ac88f95eb0276c1125304ffc636a299db3ebbab47f62b LICENSE diff --git a/package/linenoise/linenoise.mk b/package/linenoise/linenoise.mk new file mode 100644 index 00000000..f51e2871 --- /dev/null +++ b/package/linenoise/linenoise.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# linenoise +# +################################################################################ + +LINENOISE_VERSION = 1.0 +LINENOISE_SITE = $(call github,antirez,linenoise,$(LINENOISE_VERSION)) +LINENOISE_LICENSE = BSD-2-Clause +LINENOISE_LICENSE_FILES = LICENSE +LINENOISE_INSTALL_STAGING = YES +# Static library only, nothing to install on target +LINENOISE_INSTALL_TARGET = NO + +define LINENOISE_BUILD_CMDS + cd $(@D); $(TARGET_CC) $(TARGET_CFLAGS) -c linenoise.c + cd $(@D); $(TARGET_AR) rcu liblinenoise.a linenoise.o + cd $(@D); $(TARGET_CC) $(TARGET_LDFLAGS) -o linenoise_example example.c -L. -llinenoise +endef + +define LINENOISE_INSTALL_STAGING_CMDS + $(INSTALL) -m 644 -D $(@D)/linenoise.h $(STAGING_DIR)/usr/include/linenoise.h + $(INSTALL) -m 644 -D $(@D)/liblinenoise.a $(STAGING_DIR)/usr/lib/liblinenoise.a + $(INSTALL) -m 755 -D $(@D)/linenoise_example $(STAGING_DIR)/usr/bin/linenoise_example +endef + +$(eval $(generic-package)) diff --git a/package/linknx/0001-configure-ac-tweak-CPPUNIT-conditional.patch b/package/linknx/0001-configure-ac-tweak-CPPUNIT-conditional.patch new file mode 100644 index 00000000..733e2927 --- /dev/null +++ b/package/linknx/0001-configure-ac-tweak-CPPUNIT-conditional.patch @@ -0,0 +1,47 @@ +From 8e7da14647dada5eee8f583b0814bffb31d1b91e Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 21 Apr 2019 23:17:34 +0200 +Subject: [PATCH] configure.ac: tweak CPPUNIT conditional + +Following review of buildroot's patch +(http://patchwork.ozlabs.org/patch/1088520), tweak CPPUNIT to move call +to AM_CONDITIONAL outside condition + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/linknx/linknx/commit/8e7da14647dada5eee8f583b0814bffb31d1b91e] +--- + configure.ac | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 51d8ae66..4d9d8efa 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -135,22 +135,20 @@ if test x"$WITH_CPPUNIT" != xno; then + AC_DEFINE([HAVE_CPPUNIT], [1], [cppunit]) + AC_SUBST(CPPUNIT_CFLAGS) + AC_SUBST(CPPUNIT_LIBS) +- AM_CONDITIONAL(CPPUNIT, true) ++ found_cppunit=yes + ],[ + AC_MSG_RESULT([no]) +- AM_CONDITIONAL(CPPUNIT, false) + ]) + else + PKG_CHECK_MODULES(CPPUNIT, $CPPUNITPC >= 1.9.6, [ + AC_DEFINE([HAVE_CPPUNIT], [1], [cppunit]) + AC_SUBST(CPPUNIT_CFLAGS) + AC_SUBST(CPPUNIT_LIBS) +- AM_CONDITIONAL([CPPUNIT], true) +- ],[AM_CONDITIONAL([CPPUNIT], false)]) ++ found_cppunit=yes ++ ]) + fi +-else +- AM_CONDITIONAL([CPPUNIT], false) + fi ++AM_CONDITIONAL([CPPUNIT], [test x"$found_cppunit" = xyes]) + + dnl ######################################################################### + dnl Check if using log4cpp diff --git a/package/linknx/0002-src-Makefile.am-fix-linking-with-log4cpp.patch b/package/linknx/0002-src-Makefile.am-fix-linking-with-log4cpp.patch new file mode 100644 index 00000000..4f1a8e43 --- /dev/null +++ b/package/linknx/0002-src-Makefile.am-fix-linking-with-log4cpp.patch @@ -0,0 +1,37 @@ +From 048b9ae8f3c07be217f1738c35ab995ab6394453 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 8 Mar 2020 10:02:07 +0100 +Subject: [PATCH] src/Makefile.am: fix linking with log4cpp + +linknx fails to build with log4cpp because LOG4CPP_CFLAGS (which +contains -pthread) is added to AM_CPPFLAGS (which is not used at link +time) instead of AM_CXXFLAGS: + +/home/buildroot/autobuild/instance-0/output/host/bin/mipsel-linux-g++ -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -o linknx linknx.o logger.o ruleserver.o objectcontroller.o eibclient.o threads.o timermanager.o persistentstorage.o xmlserver.o smsgateway.o emailgateway.o knxconnection.o services.o suncalc.o luacondition.o ioport.o ../ticpp/libticpp.a -L/home/buildroot/autobuild/instance-0/output/host/mipsel-buildroot-linux-gnu/sysroot/usr/bin/../../usr/lib -lpthsem -L/home/buildroot/autobuild/instance-0/output/host/bin/../mipsel-buildroot-linux-gnu/sysroot/usr/lib -llog4cpp -lm +/home/buildroot/autobuild/instance-0/output/host/mipsel-buildroot-linux-gnu/sysroot/usr/bin/../../usr/lib/liblog4cpp.so: undefined reference to `pthread_key_create' + +So move LOG4CPP_CFLAGS to AM_CXXFLAGS + +Fixes: + - http://autobuild.buildroot.org/results/1863f8f27041bc15ca68e786ba3b8e4764c40574 + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/linknx/linknx/commit/048b9ae8f3c07be217f1738c35ab995ab6394453] +--- + src/Makefile.am | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/Makefile.am b/src/Makefile.am +index 6e0dc03b..5065c248 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -6,6 +6,7 @@ else + B64_CFLAGS= + B64_LIBS= + endif +-AM_CPPFLAGS=-I$(top_srcdir)/include -I$(top_srcdir)/ticpp $(B64_CFLAGS) $(PTH_CPPFLAGS) $(LIBCURL_CPPFLAGS) $(LOG4CPP_CFLAGS) $(LUA_CFLAGS) $(MYSQL_CFLAGS) $(ESMTP_CFLAGS) ++AM_CPPFLAGS=-I$(top_srcdir)/include -I$(top_srcdir)/ticpp $(B64_CFLAGS) $(PTH_CPPFLAGS) $(LIBCURL_CPPFLAGS) $(LUA_CFLAGS) $(MYSQL_CFLAGS) $(ESMTP_CFLAGS) ++AM_CXXFLAGS=$(LOG4CPP_CFLAGS) + linknx_LDADD=$(top_srcdir)/ticpp/libticpp.a $(LIBICONV) $(B64_LIBS) $(PTH_LDFLAGS) $(PTH_LIBS) $(LIBCURL) $(LOG4CPP_LIBS) $(LUA_LIBS) $(MYSQL_LIBS) $(ESMTP_LIBS) -lm + linknx_SOURCES=linknx.cpp logger.cpp ruleserver.cpp objectcontroller.cpp eibclient.c threads.cpp timermanager.cpp persistentstorage.cpp xmlserver.cpp smsgateway.cpp emailgateway.cpp knxconnection.cpp services.cpp suncalc.cpp luacondition.cpp ioport.cpp ruleserver.h objectcontroller.h threads.h timermanager.h persistentstorage.h xmlserver.h smsgateway.h emailgateway.h knxconnection.h services.h suncalc.h luacondition.h ioport.h logger.h diff --git a/package/linknx/Config.in b/package/linknx/Config.in new file mode 100644 index 00000000..3b62ce2f --- /dev/null +++ b/package/linknx/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_LINKNX + bool "linknx" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_MMU # libpthsem + select BR2_PACKAGE_LIBPTHSEM + select BR2_PACKAGE_ARGP_STANDALONE \ + if BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_MUSL + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + Linknx is an automation platform providing high level + functionalities to EIB/KNX installation. + + http://linknx.sourceforge.net/ + https://github.com/linknx/linknx + +comment "linknx needs a toolchain w/ C++" + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/linknx/linknx.hash b/package/linknx/linknx.hash new file mode 100644 index 00000000..86ec5228 --- /dev/null +++ b/package/linknx/linknx.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 00c53776c2e871295459ede922402d8ad0208367d2364781fdb92ddafad94d3d linknx-0.0.1.38.tar.gz +sha256 c03cea027b4b40e4402fabd08557736727ec3d5bc54ad64ab6472de432198cad LICENSE diff --git a/package/linknx/linknx.mk b/package/linknx/linknx.mk new file mode 100644 index 00000000..dbee0742 --- /dev/null +++ b/package/linknx/linknx.mk @@ -0,0 +1,56 @@ +################################################################################ +# +# linknx +# +################################################################################ + +LINKNX_VERSION = 0.0.1.38 +LINKNX_SITE = $(call github,linknx,linknx,$(LINKNX_VERSION)) +LINKNX_LICENSE = GPL-2.0+ +LINKNX_LICENSE_FILES = LICENSE +LINKNX_INSTALL_STAGING = YES +# We're patching configure.ac +LINKNX_AUTORECONF = YES +LINKNX_CONF_OPTS = \ + --without-cppunit \ + --without-pth-test \ + --with-pth=$(STAGING_DIR)/usr \ + --disable-smtp + +# add host-gettext for AM_ICONV macro +LINKNX_DEPENDENCIES = \ + host-gettext \ + host-pkgconf \ + libpthsem \ + $(if $(BR2_PACKAGE_ARGP_STANDALONE),argp-standalone) \ + $(if $(BR2_PACKAGE_LIBICONV),libiconv) + +ifeq ($(BR2_PACKAGE_LIBCURL),y) +LINKNX_CONF_OPTS += --with-libcurl=$(STAGING_DIR)/usr +LINKNX_DEPENDENCIES += libcurl +else +LINKNX_CONF_OPTS += --without-libcurl +endif + +ifeq ($(BR2_PACKAGE_LOG4CPP),y) +LINKNX_CONF_OPTS += --with-log4cpp +LINKNX_DEPENDENCIES += log4cpp +else +LINKNX_CONF_OPTS += --without-log4cpp +endif + +ifeq ($(BR2_PACKAGE_LUA),y) +LINKNX_CONF_OPTS += --with-lua +LINKNX_DEPENDENCIES += lua +else +LINKNX_CONF_OPTS += --without-lua +endif + +ifeq ($(BR2_PACKAGE_MYSQL),y) +LINKNX_CONF_OPTS += --with-mysql=$(STAGING_DIR)/usr +LINKNX_DEPENDENCIES += mysql +else +LINKNX_CONF_OPTS += --without-mysql +endif + +$(eval $(autotools-package)) diff --git a/package/links/Config.in b/package/links/Config.in new file mode 100644 index 00000000..713f53da --- /dev/null +++ b/package/links/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_LINKS + bool "links" + depends on BR2_USE_MMU # fork() + help + Graphics and text mode WWW browser (kind of like lynx). + + http://links.twibright.com/ + +if BR2_PACKAGE_LINKS + +config BR2_PACKAGE_LINKS_GRAPHICS + bool "use graphics" + depends on BR2_PACKAGE_DIRECTFB || BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBXT if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_LIBPNG + help + Enable graphics output for DirectFB or X11. + Otherwise links will be text-mode only. + +endif diff --git a/package/links/links.hash b/package/links/links.hash new file mode 100644 index 00000000..f941c2cd --- /dev/null +++ b/package/links/links.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 285eed8591c7781ec26213df82786665aaa1b9286782e8a7a1a7e2a6e1630d63 links-2.21.tar.bz2 +sha256 92deeb70791366630095d4e0714fe37d6e2bd5db0e6ef498ebb8de328f45b253 COPYING diff --git a/package/links/links.mk b/package/links/links.mk new file mode 100644 index 00000000..5213e02b --- /dev/null +++ b/package/links/links.mk @@ -0,0 +1,101 @@ +################################################################################ +# +# links +# +################################################################################ + +LINKS_VERSION = 2.21 +LINKS_SOURCE = links-$(LINKS_VERSION).tar.bz2 +LINKS_SITE = http://links.twibright.com/download +LINKS_DEPENDENCIES = host-pkgconf +LINKS_LICENSE = GPL-2.0+ +LINKS_LICENSE_FILES = COPYING +LINKS_CPE_ID_VENDOR = twibright + +ifeq ($(BR2_PACKAGE_LINKS_GRAPHICS),y) +LINKS_CONF_OPTS += --enable-graphics +LINKS_DEPENDENCIES += libpng +ifeq ($(BR2_PACKAGE_XLIB_LIBXT),y) +LINKS_CONF_OPTS += \ + --with-x \ + --x-includes=$(STAGING_DIR)/usr/include \ + --x-libraries=$(STAGING_DIR)/usr/lib +LINKS_DEPENDENCIES += xlib_libXt +else +LINKS_CONF_OPTS += --without-x +endif +ifeq ($(BR2_PACKAGE_DIRECTFB),y) +LINKS_CONF_ENV = ac_cv_path_DIRECTFB_CONFIG=$(STAGING_DIR)/usr/bin/directfb-config +ifeq ($(BR2_STATIC_LIBS),y) +LINKS_CONF_ENV += LIBS=-lstdc++ +endif +LINKS_CONF_OPTS += --with-directfb +LINKS_DEPENDENCIES += directfb +else +LINKS_CONF_OPTS += --without-directfb +endif +ifeq ($(BR2_PACKAGE_JPEG),y) +LINKS_CONF_OPTS += --with-libjpeg +LINKS_DEPENDENCIES += jpeg +else +LINKS_CONF_OPTS += --without-libjpeg +endif +ifeq ($(BR2_PACKAGE_LIBRSVG),y) +LINKS_CONF_OPTS += --with-librsvg +LINKS_DEPENDENCIES += librsvg +else +LINKS_CONF_OPTS += --without-librsvg +endif +ifeq ($(BR2_PACKAGE_TIFF),y) +LINKS_CONF_OPTS += --with-libtiff +LINKS_DEPENDENCIES += tiff +else +LINKS_CONF_OPTS += --without-libtiff +endif +else +LINKS_CONF_OPTS += --disable-graphics +endif + +ifeq ($(BR2_PACKAGE_BZIP2),y) +LINKS_CONF_OPTS += --with-bzip2 +LINKS_DEPENDENCIES += bzip2 +else +LINKS_CONF_OPTS += --without-bzip2 +endif + +ifeq ($(BR2_PACKAGE_GPM),y) +LINKS_CONF_OPTS += --with-gpm +LINKS_DEPENDENCIES += gpm +else +LINKS_CONF_OPTS += --without-gpm +endif + +ifeq ($(BR2_PACKAGE_LIBEVENT),y) +LINKS_CONF_OPTS += --with-libevent +LINKS_DEPENDENCIES += libevent +else +LINKS_CONF_OPTS += --without-libevent +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +LINKS_CONF_OPTS += --with-ssl --enable-ssl-pkgconfig +LINKS_DEPENDENCIES += openssl +else +LINKS_CONF_OPTS += --without-ssl +endif + +ifeq ($(BR2_PACKAGE_XZ),y) +LINKS_CONF_OPTS += --with-lzma +LINKS_DEPENDENCIES += xz +else +LINKS_CONF_OPTS += --without-lzma +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +LINKS_CONF_OPTS += --with-zlib +LINKS_DEPENDENCIES += zlib +else +LINKS_CONF_OPTS += --without-zlib +endif + +$(eval $(autotools-package)) diff --git a/package/linphone/0001-src-core-paths-paths.cpp-fix-powerpc-build.patch b/package/linphone/0001-src-core-paths-paths.cpp-fix-powerpc-build.patch new file mode 100644 index 00000000..1655fa59 --- /dev/null +++ b/package/linphone/0001-src-core-paths-paths.cpp-fix-powerpc-build.patch @@ -0,0 +1,35 @@ +From d5d528e7562f358b9564e64cea0678020c51479a Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 15 Mar 2020 18:56:19 +0100 +Subject: [PATCH] src/core/paths/paths.cpp: fix powerpc build + +Fix the following build failure on powerpc: + +/home/test/autobuild/run/instance-2/output-1/build/linphone-4.3.1/src/core/paths/paths.cpp:32:3: error: #error "Unsupported system." + #error "Unsupported system." + ^~~~~ + +Fixes: + - http://autobuild.buildroot.org/results/d90bca02c2771df8dfbf39892d529fb5f9069656 + +Signed-off-by: Fabrice Fontaine +--- + src/core/paths/paths.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/paths/paths.cpp b/src/core/paths/paths.cpp +index 0442282fe..2c6508a51 100644 +--- a/src/core/paths/paths.cpp ++++ b/src/core/paths/paths.cpp +@@ -26,7 +26,7 @@ + #include "paths-android.h" + #elif defined(_WIN32) + #include "paths-windows.h" +-#elif defined(__linux) ++#elif defined(__linux) || defined(__linux__) + #include "paths-linux.h" + #else + #error "Unsupported system." +-- +2.25.1 + diff --git a/package/linphone/Config.in b/package/linphone/Config.in new file mode 100644 index 00000000..3fe25c16 --- /dev/null +++ b/package/linphone/Config.in @@ -0,0 +1,41 @@ +config BR2_PACKAGE_LINPHONE + bool "linphone" + depends on BR2_USE_MMU + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS # belle-sip, mediastreamer + depends on BR2_TOOLCHAIN_HAS_THREADS # belr, belle-sip, mediastreamer + # belr, belle-sip, mediastreamer + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 + depends on BR2_USE_WCHAR # belle-sip + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5 # mediastreamer + select BR2_PACKAGE_BELLE_SIP + select BR2_PACKAGE_BELR + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_MEDIASTREAMER + select BR2_PACKAGE_SQLITE + help + Linphone is an internet phone or Voice Over IP phone (VoIP). + + With linphone you can communicate freely with people over + the internet, with voice, video, and text instant messaging. + Linphone makes use of the SIP protocol, an open standard + for internet telephony. You can use Linphone with any SIP + VoIP operator, including our free SIP audio/video service. + linphone is free-software (or open-source), you can download + and redistribute it freely. + Linphone is available for desktop computers: Linux, Windows, + MacOSX, and for mobile phones: Android, iPhone, Blackberry. + + Linphone support in Buildroot is limited to the commandline + client, linphonec, and video support is not enabled. + + http://www.linphone.org/ + +comment "linphone needs a toolchain w/ threads, C++, dynamic library, wchar, gcc >= 5" + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS || \ + !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_5 + +comment "linphone needs a toolchain not affected by GCC bug 64735" + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 diff --git a/package/linphone/linphone.hash b/package/linphone/linphone.hash new file mode 100644 index 00000000..6d456ac9 --- /dev/null +++ b/package/linphone/linphone.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 9956f6785a787041328da000cee5fcc1e41d6f17956ffe5e0402fac0f9a9676b linphone-4.4.8.tar.gz +# Locally computed +sha256 1b3782ccad7b8614100cda30d3faf42fc39f2e97932908c543005053b654ca68 LICENSE.txt diff --git a/package/linphone/linphone.mk b/package/linphone/linphone.mk new file mode 100644 index 00000000..bb79e2f7 --- /dev/null +++ b/package/linphone/linphone.mk @@ -0,0 +1,42 @@ +################################################################################ +# +# linphone +# +################################################################################ + +LINPHONE_VERSION = 4.4.8 +LINPHONE_SITE = \ + https://gitlab.linphone.org/BC/public/liblinphone/-/archive/$(LINPHONE_VERSION) +LINPHONE_CONF_OPTS = \ + -DENABLE_ADVANCED_IM=OFF \ + -DENABLE_CXX_WRAPPER=OFF \ + -DENABLE_DB_STORAGE=OFF \ + -DENABLE_LIME=OFF \ + -DENABLE_LIME_X3DH=OFF \ + -DENABLE_STRICT=OFF \ + -DENABLE_TOOLS=OFF \ + -DENABLE_TUTORIALS=OFF \ + -DENABLE_UNIT_TESTS=OFF \ + -DENABLE_VCARD=OFF \ + -DENABLE_VIDEO=OFF \ + -DGIT_EXECUTABLE=OFF +LINPHONE_INSTALL_STAGING = YES +LINPHONE_DEPENDENCIES = \ + belle-sip \ + belr \ + libxml2 \ + mediastreamer \ + sqlite \ + $(if $(BR2_PACKAGE_ZLIB),zlib) +LINPHONE_LICENSE = GPL-3.0+ +LINPHONE_LICENSE_FILES = LICENSE.txt + +ifeq ($(BR2_STATIC_LIBS),y) +LINPHONE_CONF_OPTS += -DENABLE_STATIC=ON -DENABLE_SHARED=OFF +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +LINPHONE_CONF_OPTS += -DENABLE_STATIC=ON -DENABLE_SHARED=ON +else ifeq ($(BR2_SHARED_LIBS),y) +LINPHONE_CONF_OPTS += -DENABLE_STATIC=OFF -DENABLE_SHARED=ON +endif + +$(eval $(cmake-package)) diff --git a/package/linux-backports/Config.in b/package/linux-backports/Config.in new file mode 100644 index 00000000..251d202f --- /dev/null +++ b/package/linux-backports/Config.in @@ -0,0 +1,54 @@ +comment "linux-backports needs a Linux kernel to be built" + depends on !BR2_LINUX_KERNEL + +config BR2_PACKAGE_LINUX_BACKPORTS + bool "linux-backports" + depends on BR2_LINUX_KERNEL + help + The linux-backports package includes many Linux drivers from + recent kernels, backported to older ones. + + This version of linux-backports supports kernels starting + from 3.10. + + https://backports.wiki.kernel.org + +if BR2_PACKAGE_LINUX_BACKPORTS + +choice + prompt "Linux kernel driver backports configuration" + default BR2_PACKAGE_LINUX_BACKPORTS_USE_DEFCONFIG + +config BR2_PACKAGE_LINUX_BACKPORTS_USE_DEFCONFIG + bool "Using an in-tree defconfig file" + +config BR2_PACKAGE_LINUX_BACKPORTS_USE_CUSTOM_CONFIG + bool "Using a custom (def)config file" + +endchoice + +config BR2_PACKAGE_LINUX_BACKPORTS_DEFCONFIG + string "Defconfig name" + depends on BR2_PACKAGE_LINUX_BACKPORTS_USE_DEFCONFIG + help + Name of the backports defconfig file to use, without the + leading defconfig-. The defconfig is located in defconfigs/ + directory in the backports tree. + +config BR2_PACKAGE_LINUX_BACKPORTS_CUSTOM_CONFIG_FILE + string "Configuration file path" + depends on BR2_PACKAGE_LINUX_BACKPORTS_USE_CUSTOM_CONFIG + help + Path to the backports configuration file + + Note: this can be a defconfig file or a complete .config + file, which can later be saved back with make + linux-update-(def)config. + +config BR2_PACKAGE_LINUX_BACKPORTS_CONFIG_FRAGMENT_FILES + string "Additional configuration fragment files" + help + A space-separated list of configuration fragment files, that + will be merged to the main linux-backports configuration file. + +endif # BR2_PACKAGE_LINUX_BACKPORTS diff --git a/package/linux-backports/linux-backports.hash b/package/linux-backports/linux-backports.hash new file mode 100644 index 00000000..3e103424 --- /dev/null +++ b/package/linux-backports/linux-backports.hash @@ -0,0 +1,6 @@ +# From: https://www.kernel.org/pub/linux/kernel/projects/backports/stable/v5.8/sha256sums.asc +sha256 19b4174d89bf11ee221458e11f1e8dace26558498774b823051156f522d2036b backports-5.8-1.tar.xz +# Locally computed +sha256 fb5a425bd3b3cd6071a3a9aff9909a859e7c1158d54d32e07658398cd67eb6a0 COPYING +sha256 8e378ab93586eb55135d3bc119cce787f7324f48394777d00c34fa3d0be3303f LICENSES/exceptions/Linux-syscall-note +sha256 f6b78c087c3ebdf0f3c13415070dd480a3f35d8fc76f3d02180a407c1c812f79 LICENSES/preferred/GPL-2.0 diff --git a/package/linux-backports/linux-backports.mk b/package/linux-backports/linux-backports.mk new file mode 100644 index 00000000..068dcffc --- /dev/null +++ b/package/linux-backports/linux-backports.mk @@ -0,0 +1,117 @@ +################################################################################ +# +# linux-backports +# +################################################################################ + +LINUX_BACKPORTS_VERSION_MAJOR = 5.8 +LINUX_BACKPORTS_VERSION = $(LINUX_BACKPORTS_VERSION_MAJOR)-1 +LINUX_BACKPORTS_SOURCE = backports-$(LINUX_BACKPORTS_VERSION).tar.xz +LINUX_BACKPORTS_SITE = $(BR2_KERNEL_MIRROR)/linux/kernel/projects/backports/stable/v$(LINUX_BACKPORTS_VERSION_MAJOR) +LINUX_BACKPORTS_LICENSE = GPL-2.0 +LINUX_BACKPORTS_LICENSE_FILES = \ + COPYING \ + LICENSES/exceptions/Linux-syscall-note \ + LICENSES/preferred/GPL-2.0 + +# flex and bison are needed to generate kconfig parser. We use the +# same logic as the linux kernel (we add host dependencies only if +# host does not have them). See linux/linux.mk and +# support/dependencies/check-host-bison-flex.mk. +LINUX_BACKPORTS_DEPENDENCIES = \ + $(BR2_BISON_HOST_DEPENDENCY) \ + $(BR2_FLEX_HOST_DEPENDENCY) + +ifeq ($(BR2_PACKAGE_LINUX_BACKPORTS_USE_DEFCONFIG),y) +LINUX_BACKPORTS_KCONFIG_FILE = $(LINUX_BACKPORTS_DIR)/defconfigs/$(call qstrip,$(BR2_PACKAGE_LINUX_BACKPORTS_DEFCONFIG)) +else ifeq ($(BR2_PACKAGE_LINUX_BACKPORTS_USE_CUSTOM_CONFIG),y) +LINUX_BACKPORTS_KCONFIG_FILE = $(call qstrip,$(BR2_PACKAGE_LINUX_BACKPORTS_CUSTOM_CONFIG_FILE)) +endif + +LINUX_BACKPORTS_KCONFIG_FRAGMENT_FILES = $(call qstrip,$(BR2_PACKAGE_LINUX_BACKPORTS_CONFIG_FRAGMENT_FILES)) +LINUX_BACKPORTS_KCONFIG_OPTS = $(LINUX_BACKPORTS_MAKE_OPTS) + +# linux-backports' build system expects the config options to be present +# in the environment, and it is so when using their custom buildsystem, +# because they are set in the main Makefile, which then calls a second +# Makefile. +# +# In our case, we do not use that first Makefile. So, we parse the +# .config file, filter-out comment lines and put the rest as command +# line variables. +# +# LINUX_BACKPORTS_MAKE_OPTS is used by the kconfig-package infra, while +# LINUX_BACKPORTS_MODULE_MAKE_OPTS is used by the kernel-module infra. +# +LINUX_BACKPORTS_MAKE_OPTS = \ + LEX=flex \ + YACC=bison \ + BACKPORT_DIR=$(@D) \ + KLIB_BUILD=$(LINUX_DIR) \ + KLIB=$(TARGET_DIR)/lib/modules/$(LINUX_VERSION_PROBED) \ + INSTALL_MOD_DIR=backports \ + `sed -r -e '/^\#/d;' $(@D)/.config` + +LINUX_BACKPORTS_MODULE_MAKE_OPTS = $(LINUX_BACKPORTS_MAKE_OPTS) + +# This file is not automatically generated by 'oldconfig' that we use in +# the kconfig-package infrastructure. In the linux buildsystem, it is +# generated by running silentoldconfig, but that's not the case for +# linux-backports: it uses a hand-crafted rule to generate that file. +define LINUX_BACKPORTS_KCONFIG_FIXUP_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(LINUX_BACKPORTS_MAKE_OPTS) backport-include/backport/autoconf.h +endef + +# Checks to give errors that the user can understand +ifeq ($(BR_BUILDING),y) + +ifeq ($(BR2_PACKAGE_LINUX_BACKPORTS_USE_DEFCONFIG),y) +ifeq ($(call qstrip,$(BR2_PACKAGE_LINUX_BACKPORTS_DEFCONFIG)),) +$(error No linux-backports defconfig name specified, check your BR2_PACKAGE_LINUX_BACKPORTS_DEFCONFIG setting) +endif +endif + +ifeq ($(BR2_PACKAGE_LINUX_BACKPORTS_USE_CUSTOM_CONFIG),y) +ifeq ($(call qstrip,$(BR2_PACKAGE_LINUX_BACKPORTS_CUSTOM_CONFIG_FILE)),) +$(error No linux-backports configuration file specified, check your BR2_PACKAGE_LINUX_BACKPORTS_CUSTOM_CONFIG_FILE setting) +endif +endif + +endif # BR_BUILDING + +$(eval $(kernel-module)) +$(eval $(kconfig-package)) + +# linux-backports' own .config file needs options from the kernel's own +# .config file. The dependencies handling in the infrastructure does not +# allow to express this kind of dependencies. Besides, linux.mk might +# not have been parsed yet, so the Linux build dir LINUX_DIR is not yet +# known. Thus, we use a "secondary expansion" so the rule is re-evaluated +# after all Makefiles are parsed, and thus at that time we will have the +# LINUX_DIR variable set to the proper value. Moreover, since linux-4.19, +# the kernel's build system internally touches its .config file, so we +# can't use it as a stamp file. We use the LINUX_KCONFIG_STAMP_DOTCONFIG +# instead. +# +# Furthermore, we want to check the kernel version, since linux-backports +# only supports kernels >= 3.10. To avoid overriding linux-backports' +# KCONFIG_STAMP_DOTCONFIG rule defined in the kconfig-package infra, we +# use an intermediate stamp-file. +# +# Finally, it must also come after the call to kconfig-package, so we get +# LINUX_BACKPORTS_DIR properly defined (because the target part of the +# rule is not re-evaluated). +# +$(LINUX_BACKPORTS_DIR)/$(LINUX_BACKPORTS_KCONFIG_STAMP_DOTCONFIG): $(LINUX_BACKPORTS_DIR)/.stamp_check_kernel_version + +.SECONDEXPANSION: +$(LINUX_BACKPORTS_DIR)/.stamp_check_kernel_version: $$(LINUX_DIR)/$$(LINUX_KCONFIG_STAMP_DOTCONFIG) + $(Q)KVER=$(LINUX_VERSION_PROBED); \ + KVER_MAJOR=`echo $${KVER} | sed 's/^\([0-9]*\)\..*/\1/'`; \ + KVER_MINOR=`echo $${KVER} | sed 's/^[0-9]*\.\([0-9]*\).*/\1/'`; \ + if [ $${KVER_MAJOR} -lt 3 -o \( $${KVER_MAJOR} -eq 3 -a $${KVER_MINOR} -lt 10 \) ]; then \ + printf "Linux version '%s' is too old for linux-backports (needs 3.10 or later)\n" \ + "$${KVER}"; \ + exit 1; \ + fi + $(Q)touch $(@) diff --git a/package/linux-firmware/Config.in b/package/linux-firmware/Config.in new file mode 100644 index 00000000..a41310ff --- /dev/null +++ b/package/linux-firmware/Config.in @@ -0,0 +1,499 @@ +config BR2_PACKAGE_LINUX_FIRMWARE + bool "linux-firmware" + help + This package provides various binary firmware files (closed + binary blobs) for such devices like LAN, WLAN cards etc. + + https://git.kernel.org/?p=linux/kernel/git/firmware/linux-firmware.git + +if BR2_PACKAGE_LINUX_FIRMWARE + +menu "Audio firmware" + +config BR2_PACKAGE_LINUX_FIRMWARE_INTEL_SST_DSP + bool "Intel SST DSP" + help + Firmware files for Intel Baytrail SST DSP audio. + +endmenu # Audio + +menu "Video firmware" + +config BR2_PACKAGE_LINUX_FIRMWARE_AMDGPU + bool "AMD GPU video card firmware" + help + Firmware files for AMD GPU video cards. + +config BR2_PACKAGE_LINUX_FIRMWARE_I915 + bool "Intel i915 video card firmware" + help + Firmware files for the Intel i915 video cards. + +config BR2_PACKAGE_LINUX_FIRMWARE_RADEON + bool "AMD Radeon video card firmware" + help + Firmware files for AMD Radeon video cards. + +config BR2_PACKAGE_LINUX_FIRMWARE_QCOM_VENUS + bool "Qualcomm Venus video codec accelerator" + help + Firmware files for Qualcomm Venus video codec accelerator + +config BR2_PACKAGE_LINUX_FIRMWARE_QCOM_ADRENO + bool "Qualcomm Adreno GPU firmware" + help + Firmware files for Qualcomm Adreno GPU firmware + +config BR2_PACKAGE_LINUX_FIRMWARE_MFC_V8 + bool "Samsung MFC video encoder/decoder v8 firmware" + help + Firmware files for Samsung MFC video encoder/decoder driver v8 + +endmenu # Video + +menu "Bluetooth firmware" + +config BR2_PACKAGE_LINUX_FIRMWARE_IBT + bool "Intel Wireless Bluetooth" + help + Firmware files for Intel 3160/7260/7265/8260/8265 Wireless + bluetooth support. + +config BR2_PACKAGE_LINUX_FIRMWARE_MEDIATEK_MT7650 + bool "MediaTek MT7650" + help + Firmware files for MediaTek MT7650 bluetooth support + +config BR2_PACKAGE_LINUX_FIRMWARE_QUALCOMM_6174A_BT + bool "Qualcomm Atheros Rome 6174A Bluetooth" + help + Firmware files for QCA Rome 6174A bluetooth support. + +config BR2_PACKAGE_LINUX_FIRMWARE_AR3011 + bool "Qualcomm Atheros 3011" + help + Firmware files for Atheros bluetooth chipset AR3011. + +config BR2_PACKAGE_LINUX_FIRMWARE_AR3012_USB + bool "Qualcomm Atheros 3012 (USB)" + help + Firmware files for Atheros bluetooth chipset AR3012 on USB. + +config BR2_PACKAGE_LINUX_FIRMWARE_TI_CC2560 + bool "TI CC2560" + help + Firmware files for Bluetooth modules CC2560 and CC2560A + +endmenu # Bluetooth + +menu "WiFi firmware" + +config BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_6002 + bool "Atheros 6002" + help + Firmware files for the Atheros AR6002 chip + +config BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_6003 + bool "Atheros 6003" + help + Firmware files for the Atheros AR6003 chip + +config BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_6004 + bool "Atheros 6004" + help + Firmware files for the Atheros AR6004 chip + +config BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_7010 + bool "Atheros 7010" + help + Firmware files for the Atheros 7010 module + +config BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_9170 + bool "Atheros 9170" + help + Firmware files for the Atheros 9170 module + +config BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_9271 + bool "Atheros 9271" + help + Firmware files for the Atheros 9271 module + +config BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_10K_QCA9377 + bool "Atheros 10k (QCA9377)" + help + Firmware files for the Atheros QCA9377 module + +config BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_10K_QCA998X + bool "Atheros 10k (QCA998X)" + help + Firmware files for the Atheros QCA988X module + +config BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM43XX + bool "Broadcom BRCM bcm43xx" + help + Firmware files for the Broadcom bcm43xx SoftMAC and FullMAC. + +config BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM43XXX + bool "Broadcom BRCM bcm43xxx" + help + Firmware files for the Broadcom bcm43xxx, SoftMAC and FullMAC. + +config BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM4366B1 + bool "Broadcom 4366b1" + help + Firmware file for the Broadcom 4366b1 FullMAC chip. + +config BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM4366C0 + bool "Broadcom 4366c0" + help + Firmware file for the Broadcom 4366c0 FullMAC chip. + +config BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_22260 + bool "Intel iwlwifi 22260" + help + Firmware files for the Intel Wifi 22260 devices supported by + the iwlwifi kernel driver. + +config BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160 + bool "Intel iwlwifi 3160" + help + Firmware files for the Intel Wifi 3160 devices supported by + the iwlwifi kernel driver. + +config BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3168 + bool "Intel iwlwifi 3168" + help + Firmware files for the Intel Wifi 3168 devices supported by + the iwlwifi kernel driver. + +config BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_5000 + bool "Intel iwlwifi 5000" + help + Firmware files for the Intel Wifi 5000 devices supported by + the iwlwifi kernel driver. + +config BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_6000G2A + bool "Intel iwlwifi 6000G2A" + help + Firmware files for the Intel Wifi 6000G2A devices supported by + the iwlwifi kernel driver. + +config BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_6000G2B + bool "Intel iwlwifi 6000G2B" + help + Firmware files for the Intel Wifi 6000G2B devices supported by + the iwlwifi kernel driver. + +config BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_7260 + bool "Intel iwlwifi 7260" + help + Firmware files for the Intel Wifi 7260 devices supported by + the iwlwifi kernel driver. + +config BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_7265 + bool "Intel iwlwifi 7265" + help + Firmware files for the Intel Wifi 7265 devices supported by + the iwlwifi kernel driver. + +config BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_7265D + bool "Intel iwlwifi 7265D" + # needed for old kernel versions, where the non-D and D + # firmwares were the same + select BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_7265 + help + Firmware files for the Intel Wifi 7265D devices supported by + the iwlwifi kernel driver. + +config BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_8000C + bool "Intel iwlwifi 8000C" + help + Firmware files for the Intel Wifi 8000C devices supported by + the iwlwifi kernel driver. + +config BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_8265 + bool "Intel iwlwifi 8265" + help + Firmware files for the Intel Wifi 8265 devices supported by + the iwlwifi kernel driver. + +config BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_9XXX + bool "Intel iwlwifi 9xxx" + help + Firmware files for the Intel Wifi 9xxx devices supported by + the iwlwifi kernel driver. + +config BR2_PACKAGE_LINUX_FIRMWARE_LIBERTAS_SD8686_V8 + bool "Libertas SD 8686 v8" + help + Firmware files (version 8) for the Marvell SD8686 module + +config BR2_PACKAGE_LINUX_FIRMWARE_LIBERTAS_SD8686_V9 + bool "Libertas SD 8686 v9" + help + Firmware files (version 9) for the Marvell SD8686 module + +config BR2_PACKAGE_LINUX_FIRMWARE_LIBERTAS_SD8688 + bool "Libertas SD 8688" + help + Firmware files for the Marvell SD8688 module + +config BR2_PACKAGE_LINUX_FIRMWARE_LIBERTAS_USB8388_V9 + bool "Libertas USB 8388 v9" + help + Firmware files (version 9) for the Marvell USB8388 module + +config BR2_PACKAGE_LINUX_FIRMWARE_LIBERTAS_USB8388_OLPC + bool "Libertas USB 8388 OLPC" + help + Firmware files (OLPC mesh capable version) for the Marvell + USB8388 module. + +config BR2_PACKAGE_LINUX_FIRMWARE_LIBERTAS_USB_THINFIRM + bool "Libertas USB Thin Firmware" + help + Firmware files (soft MAC) for the Marvell USB modules + +config BR2_PACKAGE_LINUX_FIRMWARE_MWIFIEX_SD8787 + bool "Marvell Wifi-Ex 8787 SDIO" + help + Firmware files for the Marvell Wifi-Ex 8787 module on SDIO. + +config BR2_PACKAGE_LINUX_FIRMWARE_MWIFIEX_SD8797 + bool "Marvell Wifi-Ex 8797 SDIO" + help + Firmware files for the Marvell Wifi-Ex 8797 module on SDIO. + +config BR2_PACKAGE_LINUX_FIRMWARE_MWIFIEX_USB8797 + bool "Marvell Wifi-Ex 8797 USB" + help + Firmware files for the Marvell Wifi-Ex 8797 module on USB. + +config BR2_PACKAGE_LINUX_FIRMWARE_MWIFIEX_USB8801 + bool "Marvell Wifi-Ex 8801 USB" + help + Firmware files for the Marvell Wifi-Ex 8801 module on USB. + +config BR2_PACKAGE_LINUX_FIRMWARE_MWIFIEX_SD8887 + bool "Marvell Wifi-Ex 8887 SDIO" + help + Firmware files for the Marvell Wifi-Ex 8887 module on SDIO. + +config BR2_PACKAGE_LINUX_FIRMWARE_MWIFIEX_SD8897 + bool "Marvell Wifi-Ex 8897 SDIO" + help + Firmware files for the Marvell Wifi-Ex 8897 module on SDIO. + +config BR2_PACKAGE_LINUX_FIRMWARE_MWIFIEX_USB8897 + bool "Marvell Wifi-Ex 8897 USB" + help + Firmware files for the Marvell Wifi-Ex 8897 module on USB. + +config BR2_PACKAGE_LINUX_FIRMWARE_MWIFIEX_PCIE8897 + bool "Marvell Wifi-Ex 8897 PCI-E" + help + Firmware files for the Marvell Wifi-Ex 8897 module on PCI-E. + +config BR2_PACKAGE_LINUX_FIRMWARE_MEDIATEK_MT7601U + bool "MediaTek MT7601U" + help + MediaTek MT7601U + +config BR2_PACKAGE_LINUX_FIRMWARE_MEDIATEK_MT7610E + bool "MediaTek MT7610E" + help + MediaTek MT7610E + +config BR2_PACKAGE_LINUX_FIRMWARE_MEDIATEK_MT76X2E + bool "MediaTek MT76x2e" + help + MediaTek MT76x2e + +config BR2_PACKAGE_LINUX_FIRMWARE_QUALCOMM_6174 + bool "Qualcomm Atheros 6174" + help + Firmware files for the Qualcomm Atheros QCA6174 chip + +config BR2_PACKAGE_LINUX_FIRMWARE_RALINK_RT61 + bool "Ralink rt2501/rt61" + help + Ralink rt2501/rt61 + +config BR2_PACKAGE_LINUX_FIRMWARE_RALINK_RT73 + bool "Ralink rt73" + help + Ralink rt73 + +config BR2_PACKAGE_LINUX_FIRMWARE_RALINK_RT2XX + bool "Ralink rt27xx/rt28xx/rt30xx" + help + Ralink rt27xx/rt28xx/rt30xx + +config BR2_PACKAGE_LINUX_FIRMWARE_RTL_81XX + bool "Realtek 81xx" + help + Realtek 8188/8192 + +config BR2_PACKAGE_LINUX_FIRMWARE_RTL_87XX + bool "Realtek 87xx" + help + Realtek 8712/8723/8723be + +config BR2_PACKAGE_LINUX_FIRMWARE_RTL_88XX + bool "Realtek 88xx" + help + Realtek rtl8821ae + +config BR2_PACKAGE_LINUX_FIRMWARE_RTL_RTW88 + bool "Realtek rtw88" + help + Firmware images supported by Realtek's wireless + driver rtw88. + +config BR2_PACKAGE_LINUX_FIRMWARE_REDPINE_RS9113 + bool "Redpine rs9113" + help + Firmware files for WLAN and Bluetooth modules rs9113 + +config BR2_PACKAGE_LINUX_FIRMWARE_TI_WL127X + bool "TI wl127x" + help + Firmware files for WLAN and Bluetooth modules wl1271 and + wl1273 + +config BR2_PACKAGE_LINUX_FIRMWARE_TI_WL128X + bool "TI wl128x" + help + Firmware files for WLAN and Bluetooth modules wl128x + +config BR2_PACKAGE_LINUX_FIRMWARE_TI_WL18XX + bool "TI wl18xx" + help + Firmware files for WLAN and Bluetooth modules wl18xx + +config BR2_PACKAGE_LINUX_FIRMWARE_QUALCOMM_WIL6210 + bool "Qualcomm Atheros wil6210" + help + Firmware files for Qualcomm Atheros 11ad family of chips + +endmenu + +menu "Ethernet firmware" + +config BR2_PACKAGE_LINUX_FIRMWARE_BROADCOM_TIGON3 + bool "Broadcom NetXtreme/Tigon3" + help + Firmware files for Broadcom Tigon3 ethernet cards + (tigon) + +config BR2_PACKAGE_LINUX_FIRMWARE_BNX2X + bool "Broadcom NetXtremeII" + help + Firmware files for Broadcom NetXtreme 10Gb ethernet cards + (bnx2x) + +config BR2_PACKAGE_LINUX_FIRMWARE_CXGB4_T4 + bool "Chelsio T4" + help + Firmware files for Chelsio T4 1Gb and 10Gb ethernet cards + (cxgb4) + +config BR2_PACKAGE_LINUX_FIRMWARE_CXGB4_T5 + bool "Chelsio T5" + help + Firmware files for Chelsio T5 1Gb and 10Gb ethernet cards + (cxgb4) + +config BR2_PACKAGE_LINUX_FIRMWARE_INTEL_E100 + bool "Intel e100 825xx" + help + Firmware files for Intel 825xx handled by driver e100 + (e100) + +config BR2_PACKAGE_LINUX_FIRMWARE_MICROCHIP_VSC85XX_PHY + bool "Microchip VSC85xx PHYs" + help + Firmware files for Microchip/Microsemi VSC85xx networking + PHYs (VSC8504, VSC8552, VSC8572, VSC8574, VSC856X, VSC8575, + VSC8582 and VSC8584) + +config BR2_PACKAGE_LINUX_FIRMWARE_QLOGIC_4X + bool "QLogic FastLinQ 4xxxx" + help + Firmware files for QLogic FastLinQ 4xxxx ethernet devices + (qede) + +config BR2_PACKAGE_LINUX_FIRMWARE_RTL_8169 + bool "Realtek 8169" + help + Firmware files for Realtek 8169 gigabit ethernet cards + +endmenu + +menu "DVB firmware" + +config BR2_PACKAGE_LINUX_FIRMWARE_AS102 + bool "Abilis Systems as102" + help + Firmware file for Abilis Systems single DVB-T receiver as102 + +config BR2_PACKAGE_LINUX_FIRMWARE_DIB0700 + bool "DiBcom dib0700" + help + Firmware file for dib0700-based USB DVB tuner driver + +config BR2_PACKAGE_LINUX_FIRMWARE_ITETECH_IT9135 + bool "ITEtech it9135" + help + Firmware files for ITEtech it9135 (Ax and Bx) DVB-T USB tuner + +config BR2_PACKAGE_LINUX_FIRMWARE_H5_DRXK + bool "Terratec H5 DRX-K" + help + Firmware file for Terratec H5 DRX-K based DVB tuner driver + +config BR2_PACKAGE_LINUX_FIRMWARE_XCx000 + bool "Xceive/Cresta xc4000/xc5000/xc500c" + help + Firmware file for xc4000/xc5000/xc5000c based DVB tuner driver + +endmenu + +menu "Fibre Channel Adapter Firmware" + +config BR2_PACKAGE_LINUX_FIRMWARE_QLOGIC_2XXX + bool "QLogic 2xxx Fibre Channel Adapters" + help + Firmware files for ql2xxx adapters + +endmenu + +menu "Intel QuickAssist Firmware" + +config BR2_PACKAGE_LINUX_FIRMWARE_QAT_DH895XCC + bool "Support for DH895xCC" + help + Firmware files for Intel DH895xCC devices + +config BR2_PACKAGE_LINUX_FIRMWARE_QAT_C3XXX + bool "Support for C3XXX" + help + Firmware files for Intel C3XXX devices + +config BR2_PACKAGE_LINUX_FIRMWARE_QAT_C62X + bool "Support for C62X" + help + Firmware files for Intel C62X devices + +endmenu + +menu "USB to Serial Firmware" + +config BR2_PACKAGE_LINUX_FIRMWARE_USB_SERIAL_TI + bool "USB TI 3410/5052 Serial Firmware" + help + Firmware files for TI 3410/5052 + +endmenu + +endif diff --git a/package/linux-firmware/linux-firmware.hash b/package/linux-firmware/linux-firmware.hash new file mode 100644 index 00000000..12af68f2 --- /dev/null +++ b/package/linux-firmware/linux-firmware.hash @@ -0,0 +1,35 @@ +# Locally calculated +sha256 f97d6d884026c5e3641909946713dcfea580c307d47830d37d42bfcc9a93870a linux-firmware-20201022-br1.tar.gz +sha256 8116433f4004fc0c24d72b3d9e497808b724aa0e5e1cd63fc1bf66b715b1e2e9 LICENCE.Abilis +sha256 8d5847d2971241d4d6a51c16e206379de53a6d4e203fa6f8e1c1e9279c7c4ad0 LICENSE.amdgpu +sha256 2d6062d63b91eb750bf741498691604f75184b9fee97608ec537cd09bd6a42b4 LICENCE.Marvell +sha256 802b7014b26c606cf6248ae8b0ab1ce6d2d1b0db236d38dd269e676cd70710f2 LICENCE.atheros_firmware +sha256 3b5eb392b2d9d8c46d6aae26d06c187e5ea3029b12d13bc2b8deb8b3ce6bfa53 ath10k/QCA6174/hw3.0/notice_ath10k_firmware-4.txt +sha256 631065703055d11b099477c508508f20a80b202aad548a7726564bfa59a96c91 ath10k/QCA6174/hw2.1/notice_ath10k_firmware-5.txt +sha256 8ce5c6ea0542bf4aac31fc3ae16a39792ad22d0eae4543063fac56fb3380f021 ath10k/QCA6174/hw3.0/notice_ath10k_firmware-6.txt +sha256 b16056fc91b82a0e3e8de8f86c2dac98201aa9dc3cbd33e8d38f1b087fcec30d LICENCE.broadcom_bcm43xx +sha256 a5777f9e80aca0603b0648454de996168b1c530322550ccda94d6d78bcf6c061 LICENCE.chelsio_firmware +sha256 60fbc9cccb455e1a3306c97db942d6f24fa93664be61d54c497637e6d0e2ae83 LICENCE.fw_sst_0f28 +sha256 5181b0b51efc79d5acb2c9bb92042878fdbad97a92114d4ab5e32e2b5b52fce4 LICENCE.ibt_firmware +sha256 0e0c11073ba3c832097da38e0905da36b8a3526f219407977b13b71c6675be7d LICENCE.it913x +sha256 e295020afd7597dc1b3bbe50a84a7e432d9cb92bc053c1c5e657b50d2517627b LICENCE.iwlwifi_firmware +sha256 0fc67bd715b3395f3f2af464781910e9e69c4ba23da304352229b42dc9e986c3 LICENCE.microchip +sha256 2051d5bf0755a0668f8c3d9a0d1c41d4b8cc411aba70f720fda71ae9e3b4d25c LICENCE.qat_firmware +sha256 4071a11d878dbc0ac6d9e71203d03b151638f9d7a8bc47a54c3cb964100d5822 LICENCE.qla2xxx +sha256 d7bec70668ddd4aae8fb4aa32870e54b49fcdb0b9b007aa9f54b53a1ac7461bd LICENCE.ralink-firmware.txt +sha256 8568352b57f3574f9d5b2753cdb7c6e5eb2b79e82fbb9c9ba6566947467ef508 LICENCE.ralink_a_mediatek_company_firmware +sha256 a61351665b4f264f6c631364f85b907d8f8f41f8b369533ef4021765f9f3b62e LICENCE.rtlwifi_firmware.txt +sha256 106bef96470001e877fcf7ba0337fa6766a317650eb47fcaeb743eeebd62c4ff LICENCE.ti-connectivity +sha256 8ea9f4aee5f53ad877041ff089e8c95d34d615ce19a3111e5e1ea70d990ed7ff LICENCE.xc4000 +sha256 30ec8a66503dc73f83937564ae70ca23aa03259e64727ff4195b5b6f695e782f LICENCE.xc5000 +sha256 f8822049f32fef2e90a197bd8cf259f476db75d549456bdca8567616a9c07ace LICENCE.xc5000c +sha256 a064cbf83e10d72579d236a1e36032681adb8e442943ff75b57020a82992a5ed LICENSE.QualcommAtheros_ar3k +sha256 337a55102138d7baa143ee4a4c6c91693e0113fece35d380b2a12109e8c23b3f LICENSE.QualcommAtheros_ath10k +sha256 630fd46c95d3ac6544590c2265ba7348fbc930fb386261a1c04dcd9f403645b8 LICENSE.dib0700 +sha256 8542aeabf2761935122d693561e16766ce1bcc2b0d003204f9040b7d6d929f2e LICENSE.i915 +sha256 be904cd28cb292b80cdb6cf412ab0d9159d431671e987ad433c1f62e0988a9bc LICENSE.qcom +sha256 fc6223d4bfe9f2f9e2eddc44b9fe5721d0caf49f01cb08d602906add686d8c6f LICENSE.radeon +sha256 2bdd2e716f05d9737d3f9a20f9a3a3c0caee0e866100ddb0673f1178e42f92b9 LICENSE.sdma_firmware +sha256 18313654864adbb76514e21566528ce57eff42a2a7a66d5823f1f91e895816ea WHENCE +sha256 fa43e1b9a13b341a07adca9dbe73d0f9072d7966fdfe811c01f0dd2872d7309a qcom/NOTICE.txt +sha256 bef9c828e84f21e7835b4de7daf954a327e1ff777871b58e116039b684c0d604 LICENCE.e100 diff --git a/package/linux-firmware/linux-firmware.mk b/package/linux-firmware/linux-firmware.mk new file mode 100644 index 00000000..42b0392a --- /dev/null +++ b/package/linux-firmware/linux-firmware.mk @@ -0,0 +1,706 @@ +################################################################################ +# +# linux-firmware +# +################################################################################ + +LINUX_FIRMWARE_VERSION = 20201022 +LINUX_FIRMWARE_SITE = http://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git +LINUX_FIRMWARE_SITE_METHOD = git + +LINUX_FIRMWARE_CPE_ID_VENDOR = kernel + +# Intel SST DSP +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_INTEL_SST_DSP),y) +LINUX_FIRMWARE_FILES += intel/fw_sst_0f28.bin-48kHz_i2s_master +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.fw_sst_0f28 +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_AMDGPU),y) +LINUX_FIRMWARE_DIRS += amdgpu +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENSE.amdgpu +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_I915),y) +LINUX_FIRMWARE_DIRS += i915 +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENSE.i915 +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_RADEON),y) +LINUX_FIRMWARE_DIRS += radeon +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENSE.radeon +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_QCOM_VENUS),y) +LINUX_FIRMWARE_DIRS += qcom/venus-1.8 qcom/venus-4.2 +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENSE.qcom qcom/NOTICE.txt +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_QCOM_ADRENO),y) +LINUX_FIRMWARE_FILES += qcom/a* +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENSE.qcom qcom/NOTICE.txt +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_MFC_V8),y) +LINUX_FIRMWARE_FILES += \ + s5p-mfc.fw \ + s5p-mfc-v6.fw \ + s5p-mfc-v6-v2.fw \ + s5p-mfc-v7.fw \ + s5p-mfc-v8.fw +# No license file; the license is in the file WHENCE +# which is installed unconditionally +endif + +# Intel Wireless Bluetooth +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_IBT),y) +LINUX_FIRMWARE_FILES += intel/ibt-* +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.ibt_firmware +endif + +# Qualcomm Atheros Rome 6174A Bluetooth +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_QUALCOMM_6174A_BT),y) +LINUX_FIRMWARE_FILES += qca/rampatch_usb_00000302.bin qca/nvm_usb_00000302.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENSE.qcom +endif + +# rt2501/rt61 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_RALINK_RT61),y) +LINUX_FIRMWARE_FILES += rt2561.bin rt2561s.bin rt2661.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.ralink-firmware.txt +endif + +# rt73 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_RALINK_RT73),y) +LINUX_FIRMWARE_FILES += rt73.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.ralink-firmware.txt +endif + +# rt2xx +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_RALINK_RT2XX),y) +LINUX_FIRMWARE_FILES += rt2860.bin rt2870.bin rt3071.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.ralink-firmware.txt +endif + +# rtl81xx +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_RTL_81XX),y) +LINUX_FIRMWARE_FILES += \ + rtlwifi/rtl8192cfw.bin rtlwifi/rtl8192cfwU.bin \ + rtlwifi/rtl8192cfwU_B.bin rtlwifi/rtl8192cufw.bin \ + rtlwifi/rtl8192defw.bin rtlwifi/rtl8192sefw.bin \ + rtlwifi/rtl8188efw.bin rtlwifi/rtl8188eufw.bin \ + rtlwifi/rtl8192cufw_A.bin \ + rtlwifi/rtl8192cufw_B.bin rtlwifi/rtl8192cufw_TMSC.bin \ + rtlwifi/rtl8192eefw.bin rtlwifi/rtl8192eu_ap_wowlan.bin \ + rtlwifi/rtl8192eu_nic.bin rtlwifi/rtl8192eu_wowlan.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.rtlwifi_firmware.txt +endif + +# rtl87xx +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_RTL_87XX),y) +LINUX_FIRMWARE_FILES += \ + rtlwifi/rtl8712u.bin rtlwifi/rtl8723fw.bin \ + rtlwifi/rtl8723fw_B.bin rtlwifi/rtl8723befw.bin \ + rtlwifi/rtl8723aufw_A.bin rtlwifi/rtl8723aufw_B.bin \ + rtlwifi/rtl8723aufw_B_NoBT.bin rtlwifi/rtl8723befw.bin \ + rtlwifi/rtl8723bs_ap_wowlan.bin rtlwifi/rtl8723bs_bt.bin \ + rtlwifi/rtl8723bs_nic.bin rtlwifi/rtl8723bs_wowlan.bin \ + rtlwifi/rtl8723bu_ap_wowlan.bin rtlwifi/rtl8723bu_nic.bin \ + rtlwifi/rtl8723bu_wowlan.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.rtlwifi_firmware.txt +endif + +# rtl88xx +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_RTL_88XX),y) +LINUX_FIRMWARE_FILES += \ + rtlwifi/rtl8821aefw.bin \ + rtlwifi/rtl8821aefw_wowlan.bin \ + rtlwifi/rtl8821aefw_29.bin rtlwifi/rtl8822befw.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.rtlwifi_firmware.txt +endif + +# rtw88 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_RTL_RTW88),y) +LINUX_FIRMWARE_FILES += \ + rtw88/rtw8723d_fw.bin \ + rtw88/rtw8822b_fw.bin \ + rtw88/rtw8822c_fw.bin \ + rtw88/rtw8822c_wow_fw.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.rtlwifi_firmware.txt +endif + +# ar3011 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_AR3011),y) +LINUX_FIRMWARE_FILES += ath3k-1.fw +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.atheros_firmware +endif + +# ar3012 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_AR3012_USB),y) +LINUX_FIRMWARE_FILES += \ + ar3k/AthrBT_0x01020001.dfu \ + ar3k/ramps_0x01020001_26.dfu \ + ar3k/AthrBT_0x01020200.dfu \ + ar3k/ramps_0x01020200_26.dfu \ + ar3k/ramps_0x01020200_40.dfu \ + ar3k/AthrBT_0x31010000.dfu \ + ar3k/ramps_0x31010000_40.dfu \ + ar3k/AthrBT_0x11020000.dfu \ + ar3k/ramps_0x11020000_40.dfu \ + ar3k/ramps_0x01020201_26.dfu \ + ar3k/ramps_0x01020201_40.dfu \ + ar3k/AthrBT_0x41020000.dfu \ + ar3k/ramps_0x41020000_40.dfu \ + ar3k/AthrBT_0x11020100.dfu \ + ar3k/ramps_0x11020100_40.dfu \ + ar3k/AthrBT_0x31010100.dfu \ + ar3k/ramps_0x31010100_40.dfu \ + ar3k/AthrBT_0x01020201.dfu +LINUX_FIRMWARE_ALL_LICENSE_FILES += \ + LICENCE.atheros_firmware LICENSE.QualcommAtheros_ar3k +endif + +# ar6002 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_6002),y) +LINUX_FIRMWARE_FILES += ath6k/AR6002 +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.atheros_firmware +endif + +# ar6003 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_6003),y) +LINUX_FIRMWARE_FILES += ath6k/AR6003 +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.atheros_firmware +endif + +# ar6004 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_6004),y) +LINUX_FIRMWARE_FILES += ath6k/AR6004 +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.atheros_firmware +endif + +# ar7010 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_7010),y) +LINUX_FIRMWARE_FILES += ar7010.fw ar7010_1_1.fw htc_7010.fw ath9k_htc/htc_7010-1.4.0.fw +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.atheros_firmware +endif + +# ar9170 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_9170),y) +LINUX_FIRMWARE_FILES += ar9170-1.fw ar9170-2.fw carl9170-1.fw +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.atheros_firmware +endif + +# ar9271 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_9271),y) +LINUX_FIRMWARE_FILES += ar9271.fw htc_9271.fw ath9k_htc/htc_9271-1.4.0.fw +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.atheros_firmware +endif + +# ath10k +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_10K_QCA9377),y) +LINUX_FIRMWARE_FILES += ath10k/QCA9377/hw1.0/board-2.bin \ + ath10k/QCA9377/hw1.0/board.bin \ + ath10k/QCA9377/hw1.0/firmware-5.bin \ + ath10k/QCA9377/hw1.0/firmware-6.bin \ + ath10k/QCA9377/hw1.0/firmware-sdio-5.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.atheros_firmware +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_10K_QCA998X),y) +LINUX_FIRMWARE_FILES += ath10k/QCA988X/hw2.0/board.bin \ + ath10k/QCA988X/hw2.0/firmware-4.bin \ + ath10k/QCA988X/hw2.0/firmware-5.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.atheros_firmware +endif + +# sd8686 v8 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_LIBERTAS_SD8686_V8),y) +LINUX_FIRMWARE_FILES += libertas/sd8686_v8.bin libertas/sd8686_v8_helper.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.Marvell +endif + +# sd8686 v9 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_LIBERTAS_SD8686_V9),y) +LINUX_FIRMWARE_FILES += libertas/sd8686_v9.bin libertas/sd8686_v9_helper.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.Marvell +endif + +# sd8688 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_LIBERTAS_SD8688),y) +LINUX_FIRMWARE_FILES += mrvl/sd8688.bin mrvl/sd8688_helper.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.Marvell +endif + +# usb8388 v9 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_LIBERTAS_USB8388_V9),y) +LINUX_FIRMWARE_FILES += libertas/usb8388_v9.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.Marvell +endif + +# usb8388 olpc +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_LIBERTAS_USB8388_OLPC),y) +LINUX_FIRMWARE_FILES += libertas/usb8388_olpc.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.Marvell +endif + +# lbtf usb +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_LIBERTAS_USB_THINFIRM),y) +LINUX_FIRMWARE_FILES += lbtf_usb.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.Marvell +endif + +# sd8787 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_MWIFIEX_SD8787),y) +LINUX_FIRMWARE_FILES += mrvl/sd8787_uapsta.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.Marvell +endif + +# sd8797 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_MWIFIEX_SD8797),y) +LINUX_FIRMWARE_FILES += mrvl/sd8797_uapsta.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.Marvell +endif + +# usb8797 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_MWIFIEX_USB8797),y) +LINUX_FIRMWARE_FILES += mrvl/usb8797_uapsta.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.Marvell +endif + +# usb8801 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_MWIFIEX_USB8801),y) +LINUX_FIRMWARE_FILES += mrvl/usb8801_uapsta.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.Marvell +endif + +# sd8887 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_MWIFIEX_SD8887),y) +LINUX_FIRMWARE_FILES += mrvl/sd8887_uapsta.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.Marvell +endif + +# sd8897 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_MWIFIEX_SD8897),y) +LINUX_FIRMWARE_FILES += mrvl/sd8897_uapsta.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.Marvell +endif + +# usb8897 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_MWIFIEX_USB8897),y) +LINUX_FIRMWARE_FILES += mrvl/usb8897_uapsta.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.Marvell +endif + +# pcie8897 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_MWIFIEX_PCIE8897),y) +LINUX_FIRMWARE_FILES += mrvl/pcie8897_uapsta.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.Marvell +endif + +# MT7601 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_MEDIATEK_MT7601U),y) +LINUX_FIRMWARE_FILES += mt7601u.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.ralink_a_mediatek_company_firmware +endif + +# MT7610 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_MEDIATEK_MT7610E),y) +LINUX_FIRMWARE_FILES += mediatek/mt7610e.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.ralink_a_mediatek_company_firmware +endif + +# MT7650 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_MEDIATEK_MT7650),y) +LINUX_FIRMWARE_FILES += mt7650.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.ralink_a_mediatek_company_firmware +endif + +# MT76x2e +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_MEDIATEK_MT76X2E),y) +LINUX_FIRMWARE_FILES += mt7662.bin mt7662_rom_patch.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.ralink_a_mediatek_company_firmware +endif + +# qca6174 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_QUALCOMM_6174),y) +LINUX_FIRMWARE_FILES += ath10k/QCA6174 +LINUX_FIRMWARE_ALL_LICENSE_FILES += \ + LICENSE.QualcommAtheros_ath10k \ + ath10k/QCA6174/hw2.1/notice_ath10k_firmware-5.txt \ + ath10k/QCA6174/hw3.0/notice_ath10k_firmware-4.txt \ + ath10k/QCA6174/hw3.0/notice_ath10k_firmware-6.txt +endif + +# CC2560(A) +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_TI_CC2560),y) +LINUX_FIRMWARE_FILES += \ + ti-connectivity/TIInit_6.2.31.bts \ + ti-connectivity/TIInit_6.6.15.bts +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.ti-connectivity +endif + +# wl127x +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_TI_WL127X),y) +LINUX_FIRMWARE_FILES += \ + ti-connectivity/wl1271-fw-2.bin \ + ti-connectivity/wl1271-fw-ap.bin \ + ti-connectivity/wl1271-fw.bin \ + ti-connectivity/wl127x-fw-3.bin \ + ti-connectivity/wl127x-fw-plt-3.bin \ + ti-connectivity/wl127x-nvs.bin \ + ti-connectivity/wl127x-fw-4-mr.bin \ + ti-connectivity/wl127x-fw-4-plt.bin \ + ti-connectivity/wl127x-fw-4-sr.bin \ + ti-connectivity/wl127x-fw-5-mr.bin \ + ti-connectivity/wl127x-fw-5-plt.bin \ + ti-connectivity/wl127x-fw-5-sr.bin \ + ti-connectivity/TIInit_7.2.31.bts +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.ti-connectivity +endif + +# wl128x +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_TI_WL128X),y) +LINUX_FIRMWARE_FILES += \ + ti-connectivity/wl128x-fw-3.bin \ + ti-connectivity/wl128x-fw-ap.bin \ + ti-connectivity/wl128x-fw-plt-3.bin \ + ti-connectivity/wl128x-fw.bin \ + ti-connectivity/wl128x-nvs.bin \ + ti-connectivity/wl127x-nvs.bin \ + ti-connectivity/wl128x-fw-4-mr.bin \ + ti-connectivity/wl128x-fw-4-plt.bin \ + ti-connectivity/wl128x-fw-4-sr.bin \ + ti-connectivity/wl128x-fw-5-mr.bin \ + ti-connectivity/wl128x-fw-5-plt.bin \ + ti-connectivity/wl128x-fw-5-sr.bin \ + ti-connectivity/TIInit_7.2.31.bts +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.ti-connectivity +endif + +# wl18xx +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_TI_WL18XX),y) +LINUX_FIRMWARE_FILES += \ + ti-connectivity/wl18xx-fw.bin \ + ti-connectivity/wl18xx-fw-2.bin \ + ti-connectivity/wl18xx-fw-3.bin \ + ti-connectivity/wl18xx-fw-4.bin \ + ti-connectivity/wl127x-nvs.bin \ + ti-connectivity/TIInit_7.2.31.bts +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.ti-connectivity +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_QUALCOMM_WIL6210),y) +LINUX_FIRMWARE_FILES += wil6210.* +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENSE.QualcommAtheros_ath10k +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_22260),y) +LINUX_FIRMWARE_FILES += iwlwifi-cc-a0-*.ucode +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.iwlwifi_firmware +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160),y) +LINUX_FIRMWARE_FILES += iwlwifi-3160-*.ucode +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.iwlwifi_firmware +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3168),y) +LINUX_FIRMWARE_FILES += iwlwifi-3168-*.ucode +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.iwlwifi_firmware +endif + +# iwlwifi 5000. Multiple files are available (iwlwifi-5000-1.ucode, +# iwlwifi-5000-2.ucode, iwlwifi-5000-5.ucode), corresponding to +# different versions of the firmware API. For now, we only install the +# most recent one. +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_5000),y) +LINUX_FIRMWARE_FILES += iwlwifi-5000-5.ucode +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.iwlwifi_firmware +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_6000G2A),y) +LINUX_FIRMWARE_FILES += iwlwifi-6000g2a-6.ucode +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.iwlwifi_firmware +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_6000G2B),y) +LINUX_FIRMWARE_FILES += iwlwifi-6000g2b-6.ucode +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.iwlwifi_firmware +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_7260),y) +LINUX_FIRMWARE_FILES += iwlwifi-7260-*.ucode +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.iwlwifi_firmware +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_7265),y) +LINUX_FIRMWARE_FILES += iwlwifi-7265-*.ucode +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.iwlwifi_firmware +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_7265D),y) +LINUX_FIRMWARE_FILES += iwlwifi-7265D-*.ucode +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.iwlwifi_firmware +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_8000C),y) +LINUX_FIRMWARE_FILES += iwlwifi-8000C-*.ucode +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.iwlwifi_firmware +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_8265),y) +LINUX_FIRMWARE_FILES += iwlwifi-8265-*.ucode +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.iwlwifi_firmware +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_9XXX),y) +LINUX_FIRMWARE_FILES += iwlwifi-9???-*.ucode +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.iwlwifi_firmware +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_BROADCOM_TIGON3),y) +LINUX_FIRMWARE_FILES += tigon/* +# No license file; the license is in the file WHENCE +# which is installed unconditionally +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_BNX2X),y) +LINUX_FIRMWARE_FILES += bnx2x/* +# No license file; the license is in the file WHENCE +# which is installed unconditionally +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_CXGB4_T4),y) +LINUX_FIRMWARE_FILES += cxgb4/t4fw*.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.chelsio_firmware +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_CXGB4_T5),y) +LINUX_FIRMWARE_FILES += cxgb4/t5fw*.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.chelsio_firmware +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_INTEL_E100),y) +LINUX_FIRMWARE_FILES += e100/*.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.e100 +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_MICROCHIP_VSC85XX_PHY),y) +LINUX_FIRMWARE_FILES += microchip/mscc_vsc85*.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.microchip +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_QLOGIC_4X),y) +LINUX_FIRMWARE_FILES += \ + qed/qed_init_values_zipped-*.bin +# No license file; the license is in the file WHENCE +# which is installed unconditionally +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_RTL_8169),y) +LINUX_FIRMWARE_FILES += \ + rtl_nic/rtl8105e-1.fw \ + rtl_nic/rtl8106e-1.fw \ + rtl_nic/rtl8106e-2.fw \ + rtl_nic/rtl8107e-1.fw \ + rtl_nic/rtl8107e-2.fw \ + rtl_nic/rtl8125a-3.fw \ + rtl_nic/rtl8168d-1.fw \ + rtl_nic/rtl8168d-2.fw \ + rtl_nic/rtl8168e-1.fw \ + rtl_nic/rtl8168e-2.fw \ + rtl_nic/rtl8168e-3.fw \ + rtl_nic/rtl8168f-1.fw \ + rtl_nic/rtl8168f-2.fw \ + rtl_nic/rtl8168fp-3.fw \ + rtl_nic/rtl8168g-2.fw \ + rtl_nic/rtl8168g-3.fw \ + rtl_nic/rtl8168h-1.fw \ + rtl_nic/rtl8168h-2.fw \ + rtl_nic/rtl8402-1.fw \ + rtl_nic/rtl8411-1.fw \ + rtl_nic/rtl8411-2.fw +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_XCx000),y) +LINUX_FIRMWARE_FILES += \ + dvb-fe-xc4000-1.4.1.fw \ + dvb-fe-xc5000-1.6.114.fw \ + dvb-fe-xc5000c-4.1.30.7.fw +LINUX_FIRMWARE_ALL_LICENSE_FILES += \ + LICENCE.xc4000 \ + LICENCE.xc5000 \ + LICENCE.xc5000c +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_AS102),y) +LINUX_FIRMWARE_FILES += as102_data1_st.hex as102_data2_st.hex +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.Abilis +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_DIB0700),y) +LINUX_FIRMWARE_FILES += dvb-usb-dib0700-1.20.fw +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENSE.dib0700 +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_ITETECH_IT9135),y) +LINUX_FIRMWARE_FILES += dvb-usb-it9135-01.fw dvb-usb-it9135-02.fw +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.it913x +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_H5_DRXK),y) +LINUX_FIRMWARE_FILES += dvb-usb-terratec-h5-drxk.fw +# No license file; the license is in the file WHENCE +# which is installed unconditionally +endif + +# brcm43xx +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM43XX),y) +LINUX_FIRMWARE_FILES += \ + brcm/bcm43xx-0.fw brcm/bcm43xx_hdr-0.fw \ + brcm/bcm4329-fullmac-4.bin brcm/brcmfmac4329-sdio.bin \ + brcm/brcmfmac4330-sdio.bin brcm/brcmfmac4334-sdio.bin \ + brcm/brcmfmac4335-sdio.bin brcm/brcmfmac4339-sdio.bin \ + brcm/brcmfmac4350-pcie.bin brcm/brcmfmac4354-sdio.bin \ + brcm/brcmfmac4356-pcie.bin brcm/brcmfmac4371-pcie.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.broadcom_bcm43xx +endif + +# brcm43xxx +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM43XXX),y) +LINUX_FIRMWARE_FILES += \ + brcm/brcmfmac43143.bin brcm/brcmfmac43143-sdio.bin \ + brcm/brcmfmac43236b.bin brcm/brcmfmac43241b0-sdio.bin \ + brcm/brcmfmac43241b4-sdio.bin brcm/brcmfmac43241b5-sdio.bin \ + brcm/brcmfmac43242a.bin brcm/brcmfmac43340-sdio.bin \ + brcm/brcmfmac43362-sdio.bin brcm/brcmfmac43430-sdio.bin \ + brcm/brcmfmac43430a0-sdio.bin brcm/brcmfmac43455-sdio.bin \ + brcm/brcmfmac43569.bin brcm/brcmfmac43570-pcie.bin \ + brcm/brcmfmac43602-pcie.ap.bin brcm/brcmfmac43602-pcie.bin \ + brcm/brcmfmac43430-sdio.raspberrypi,3-model-b.txt \ + brcm/brcmfmac43455-sdio.raspberrypi,3-model-b-plus.txt \ + brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.txt +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.broadcom_bcm43xx +endif + +# brcm4366b1 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM4366B1),y) +LINUX_FIRMWARE_FILES += brcm/brcmfmac4366b-pcie.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.broadcom_bcm43xx +endif + +# brcm4366c0 +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM4366C0),y) +LINUX_FIRMWARE_FILES += brcm/brcmfmac4366c-pcie.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.broadcom_bcm43xx +endif + +# ql2xxx +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_QLOGIC_2XXX),y) +LINUX_FIRMWARE_FILES += \ + ql2100_fw.bin ql2200_fw.bin ql2300_fw.bin ql2322_fw.bin \ + ql2400_fw.bin ql2500_fw.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.qla2xxx +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_REDPINE_RS9113),y) +LINUX_FIRMWARE_FILES += \ + rsi/rs9113_ap_bt_dual_mode.rps \ + rsi/rs9113_wlan_bt_dual_mode.rps \ + rsi/rs9113_wlan_qspi.rps +# No license file; the license is in the file WHENCE +# which is installed unconditionally +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_QAT_DH895XCC),y) +LINUX_FIRMWARE_FILES += qat_895xcc.bin qat_895xcc_mmp.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.qat_firmware +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_QAT_C3XXX),y) +LINUX_FIRMWARE_FILES += qat_c3xxx.bin qat_c3xxx_mmp.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.qat_firmware +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_QAT_C62X),y) +LINUX_FIRMWARE_FILES += qat_c62x.bin qat_c62x_mmp.bin +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.qat_firmware +endif + +ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_USB_SERIAL_TI),y) +LINUX_FIRMWARE_FILES += ti_3410.fw ti_5052.fw \ + mts_cdma.fw mts_gsm.fw mts_edge.fw mts_mt9234mu.fw mts_mt9234zba.fw \ + moxa/moxa-1110.fw moxa/moxa-1130.fw moxa/moxa-1131.fw \ + moxa/moxa-1150.fw moxa/moxa-1151.fw +# Some firmware's license is in the file WHENCE +# which is installed unconditionally +LINUX_FIRMWARE_ALL_LICENSE_FILES += LICENCE.moxa +endif + +ifneq ($(LINUX_FIRMWARE_FILES),) +define LINUX_FIRMWARE_INSTALL_FILES + cd $(@D) && \ + $(TAR) cf install.tar $(sort $(LINUX_FIRMWARE_FILES)) && \ + $(TAR) xf install.tar -C $(TARGET_DIR)/lib/firmware +endef +endif + +ifneq ($(LINUX_FIRMWARE_DIRS),) +# We need to rm-rf the destination directory to avoid copying +# into it in itself, should we re-install the package. +define LINUX_FIRMWARE_INSTALL_DIRS + $(foreach d,$(LINUX_FIRMWARE_DIRS), \ + rm -rf $(TARGET_DIR)/lib/firmware/$(d); \ + mkdir -p $(dir $(TARGET_DIR)/lib/firmware/$(d)); \ + cp -a $(@D)/$(d) $(TARGET_DIR)/lib/firmware/$(d)$(sep)) +endef +endif + +ifneq ($(LINUX_FIRMWARE_FILES)$(LINUX_FIRMWARE_DIRS),) + +# Most firmware files are under a proprietary license, so no need to +# repeat it for every selections above. Those firmwares that have more +# lax licensing terms may still add them on a per-case basis. +LINUX_FIRMWARE_LICENSE += Proprietary + +# This file contains some licensing information about all the firmware +# files found in the linux-firmware package, so we always add it, even +# for firmwares that have their own licensing terms. +LINUX_FIRMWARE_ALL_LICENSE_FILES += WHENCE + +# Some license files may be listed more than once, so we have to remove +# duplicates +LINUX_FIRMWARE_LICENSE_FILES = $(sort $(LINUX_FIRMWARE_ALL_LICENSE_FILES)) + +endif + +# Some firmware are distributed as a symlink, for drivers to load them using a +# defined name other than the real one. Since 9cfefbd7fbda ("Remove duplicate +# symlinks") those symlink aren't distributed in linux-firmware but are created +# automatically by its copy-firmware.sh script during the installation, which +# parses the WHENCE file where symlinks are described. We follow the same logic +# here, adding symlink only for firmwares installed in the target directory. +# +# For testing the presence of firmwares in the target directory we first make +# sure we canonicalize the pointed-to file, to cover the symlinks of the form +# a/foo -> ../b/foo where a/ (the directory where to put the symlink) does +# not yet exist. +define LINUX_FIRMWARE_CREATE_SYMLINKS + cd $(TARGET_DIR)/lib/firmware/ ; \ + sed -r -e '/^Link: (.+) -> (.+)$$/!d; s//\1 \2/' $(@D)/WHENCE | \ + while read f d; do \ + if test -f $$(readlink -m $$(dirname $$f)/$$d); then \ + mkdir -p $$(dirname $$f) || exit 1; \ + ln -sf $$d $$f || exit 1; \ + fi ; \ + done +endef + +define LINUX_FIRMWARE_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/lib/firmware + $(LINUX_FIRMWARE_INSTALL_FILES) + $(LINUX_FIRMWARE_INSTALL_DIRS) + $(LINUX_FIRMWARE_CREATE_SYMLINKS) +endef + +$(eval $(generic-package)) diff --git a/package/linux-fusion/0001-fix-for-linux-4-and-above.patch b/package/linux-fusion/0001-fix-for-linux-4-and-above.patch new file mode 100644 index 00000000..689d9bf1 --- /dev/null +++ b/package/linux-fusion/0001-fix-for-linux-4-and-above.patch @@ -0,0 +1,25 @@ +Fix build for linux >= 4.x + +Instead of relying on testing for '3' as the linux kernel major verison, +check that it is 2.x to include the proper Makefile, otherwise forcibly +include the .26 Makefile, that is good for 3.x and 4.x too. + +Signed-off-by: "Yann E. MORIN" + +diff -durN linux-fusion-9.0.2.orig/Makefile linux-fusion-9.0.2/Makefile +--- linux-fusion-9.0.2.orig/Makefile 2013-07-15 11:58:03.000000000 +0200 ++++ linux-fusion-9.0.2/Makefile 2015-06-06 19:03:04.059842652 +0200 +@@ -62,10 +62,10 @@ + CPPFLAGS += -DHAVE_LINUX_CONFIG_H + endif + +-ifeq ($(K_VERSION),3) +- KMAKEFILE = Makefile-2.6 +-else ++ifeq ($(K_VERSION),2) + KMAKEFILE = Makefile-2.$(K_PATCHLEVEL) ++else ++ KMAKEFILE = Makefile-2.6 + endif + + check-version = $(shell expr \( $(K_VERSION) \* 65536 + $(K_PATCHLEVEL) \* 256 + $(K_SUBLEVEL) \) \>= \( $(1) \* 65536 + $(2) \* 256 + $(3) \)) diff --git a/package/linux-fusion/0002-Fix-mismatched-conversion-spec-and-value-in-printk.patch b/package/linux-fusion/0002-Fix-mismatched-conversion-spec-and-value-in-printk.patch new file mode 100644 index 00000000..a3f8bb78 --- /dev/null +++ b/package/linux-fusion/0002-Fix-mismatched-conversion-spec-and-value-in-printk.patch @@ -0,0 +1,29 @@ +From debb9cafe9b7cc2b286399ecc8e3210480061c70 Mon Sep 17 00:00:00 2001 +From: Marc Gonzalez +Date: Mon, 11 Jan 2016 15:42:16 +0100 +Subject: [PATCH] Fix mismatched conversion spec and value in printk + +linux/drivers/char/fusion/fusiondev.c:775:38: warning: +format '%ld' expects argument of type 'long int', but argument 7 has type 'int' + +Subtracting two pointers yields a ptrdiff_t value, and ptrdiff_t is not +necessarily an alias for long int. Cast the value to long int. + +Signed-off-by: Marc Gonzalez +--- + linux/drivers/char/fusion/fusiondev.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/linux/drivers/char/fusion/fusiondev.c b/linux/drivers/char/fusion/fusiondev.c +index 7003407f7e1e..dfb5f8ecb81a 100644 +--- a/linux/drivers/char/fusion/fusiondev.c ++++ b/linux/drivers/char/fusion/fusiondev.c +@@ -775,7 +775,7 @@ call_ioctl(FusionDev * dev, Fusionee * fusionee, + printk( KERN_ERR "fusion: FUSION_CALL_EXECUTE3 with errorneous call (failed on previous ioctl call), " + "call id %d, flags 0x%08x, arg %d, length %u, serial %u, %ld\n", + execute3.call_id, execute3.flags, execute3.call_arg, execute3.length, execute3.ret_length, +- (execute3_bin - (FusionCallExecute3 *) arg) ); ++ (long int)(execute3_bin - (FusionCallExecute3 *) arg) ); + return -EIO; + } + diff --git a/package/linux-fusion/0003-Fix-fusion-Unknown-symbol-tasklist_lock-err-0.patch b/package/linux-fusion/0003-Fix-fusion-Unknown-symbol-tasklist_lock-err-0.patch new file mode 100644 index 00000000..b14ec9d9 --- /dev/null +++ b/package/linux-fusion/0003-Fix-fusion-Unknown-symbol-tasklist_lock-err-0.patch @@ -0,0 +1,38 @@ +From 9fcd5003c0363af140a06aba94e62c9e1ea0381e Mon Sep 17 00:00:00 2001 +From: Marc Gonzalez +Date: Mon, 11 Jan 2016 16:45:30 +0100 +Subject: [PATCH] Fix fusion: Unknown symbol tasklist_lock (err 0) + +Commit 28f6569ab7d0 renamed TREE_PREEMPT_RCU to PREEMPT_RCU in 3.19 +As a result, the code incorrectly falls back to using tasklist_lock +(which was made private in 2.6.18) + +Always use rcu_read_lock on modern kernels. + +Signed-off-by: Marc Gonzalez +--- + linux/drivers/char/fusion/fusionee.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/linux/drivers/char/fusion/fusionee.c b/linux/drivers/char/fusion/fusionee.c +index ef067f5bc831..70cd0a665f98 100644 +--- a/linux/drivers/char/fusion/fusionee.c ++++ b/linux/drivers/char/fusion/fusionee.c +@@ -925,7 +925,7 @@ fusionee_kill(FusionDev * dev, + if (f != fusionee && (!target || target == f->id)) { + struct task_struct *p; + +-#if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU) || defined(CONFIG_TINY_RCU) || defined(rcu_read_lock) ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + rcu_read_lock(); + #else + read_lock(&tasklist_lock); +@@ -946,7 +946,7 @@ fusionee_kill(FusionDev * dev, + } + } + +-#if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU) || defined(CONFIG_TINY_RCU) || defined(rcu_read_unlock) ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + rcu_read_unlock(); + #else + read_unlock(&tasklist_lock); diff --git a/package/linux-fusion/0004-Port-one-one_udp.c-to-Linux-4.1.patch b/package/linux-fusion/0004-Port-one-one_udp.c-to-Linux-4.1.patch new file mode 100644 index 00000000..3ee4dac4 --- /dev/null +++ b/package/linux-fusion/0004-Port-one-one_udp.c-to-Linux-4.1.patch @@ -0,0 +1,118 @@ +From be288b60278c78eccfd347aacf4d3dd8771215a9 Mon Sep 17 00:00:00 2001 +From: Marc Gonzalez +Date: Tue, 12 Jan 2016 14:01:42 +0100 +Subject: [PATCH] Port one/one_udp.c to Linux 4.1 + +Kernel commit c0371da6047a replaced msg_iov and msg_iovlen with msg_iter +in struct msghdr since 3.19 + +one/one_udp.c: In function 'ksocket_send_iov': +one/one_udp.c:186:9: error: 'struct msghdr' has no member named 'msg_iov' +one/one_udp.c:187:9: error: 'struct msghdr' has no member named 'msg_iovlen' + +one/one_udp.c: In function 'ksocket_receive': +one/one_udp.c:221:9: error: 'struct msghdr' has no member named 'msg_iov' +one/one_udp.c:222:9: error: 'struct msghdr' has no member named 'msg_iovlen' + +The iov_iter interface +https://lwn.net/Articles/625077/ + +Kernel commit d8725c86aeba dropped the len parameter in sock_sendmsg +since 4.1 + +one/one_udp.c: In function 'ksocket_send_iov': +one/one_udp.c:192:13: error: too many arguments to function 'sock_sendmsg' + +Signed-off-by: Marc Gonzalez + +Kernel commit 2da62906b1e29 dropped the size parameter in sock_recvmsg +since 4.7 + +In function 'ksocket_receive' +one/one_udp.c:235:13: error: too many arguments to function 'sock_recvmsg' + +Signed-off-by: Matthew Shyu +--- + one/one_udp.c | 34 +++++++++++++++++++--------------- + 1 file changed, 19 insertions(+), 15 deletions(-) + +diff --git a/one/one_udp.c b/one/one_udp.c +index 26b9e6a..9b59529 100644 +--- a/one/one_udp.c ++++ b/one/one_udp.c +@@ -161,7 +161,7 @@ ksocket_send_iov( struct socket *sock, + const struct iovec *iov, + size_t iov_count ) + { +- struct msghdr msg; ++ struct msghdr msg = { addr, sizeof *addr }; + mm_segment_t oldfs; + int size = 0; + size_t len = 0; +@@ -178,18 +178,20 @@ ksocket_send_iov( struct socket *sock, + for (i=0; i/dev/null 2>&1 ; then \ + echo "Your kernel version is too old and does not have the gpio tools." ; \ + echo "At least kernel 4.8 must be used." ; \ + exit 1 ; \ + fi + + $(TARGET_MAKE_ENV) $(MAKE1) -C $(LINUX_DIR)/tools \ + $(GPIO_MAKE_OPTS) \ + gpio +endef + +define GPIO_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) -C $(LINUX_DIR)/tools \ + $(GPIO_MAKE_OPTS) \ + DESTDIR=$(TARGET_DIR) \ + gpio_install +endef diff --git a/package/linux-tools/linux-tool-hv.mk.in b/package/linux-tools/linux-tool-hv.mk.in new file mode 100644 index 00000000..e638fecf --- /dev/null +++ b/package/linux-tools/linux-tool-hv.mk.in @@ -0,0 +1,61 @@ +################################################################################ +# +# hv_fcopy_daemon +# +################################################################################ + +LINUX_TOOLS += hv + +# The programs to build, as known by the kernel: +HV_PROGS_$(BR2_PACKAGE_LINUX_TOOLS_HV_KVP_DAEMON) += hv_kvp_daemon +HV_PROGS_$(BR2_PACKAGE_LINUX_TOOLS_HV_FCOPY_DAEMON) += hv_fcopy_daemon +HV_PROGS_$(BR2_PACKAGE_LINUX_TOOLS_HV_VSS_DAEMON) += hv_vss_daemon + +# Give each tools the name most distros install them as: +HV_hv_kvp_daemon = hypervkvpd +HV_hv_fcopy_daemon = hypervfcopyd +HV_hv_vss_daemon = hypervvssd + +HV_MAKE_OPTS = CC="$(TARGET_CC)" CFLAGS="$(filter-out -g%,$(TARGET_CFLAGS))" + +define HV_BUILD_CMDS + $(Q)for prog in $(HV_PROGS_y); do \ + if test ! -f $(LINUX_DIR)/tools/hv/$${prog}.c ; then \ + printf "Your kernel version is too old and does not have the HyperV %s tool." "$${prog}" ; \ + exit 1 ; \ + fi; \ + done + + $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools/hv \ + $(HV_MAKE_OPTS) \ + $(HV_PROGS_y) +endef + +ifeq ($(BR2_PACKAGE_LINUX_TOOLS_HV_KVP_DAEMON),y) +define HV_KVP_HELPER + @mkdir -p $(TARGET_DIR)/usr/libexec/hypervkvpd + $(Q)ln -sf /bin/true $(TARGET_DIR)/usr/libexec/hypervkvpd/hv_set_ifconfig +endef +endif + +define HV_INSTALL_TARGET_CMDS + $(foreach prog,$(HV_PROGS_y), \ + $(INSTALL) -m 0755 -D $(LINUX_DIR)/tools/hv/$(prog) \ + $(TARGET_DIR)/usr/sbin/$(HV_$(prog)) + ) + $(HV_KVP_HELPER) +endef + +define HV_INSTALL_INIT_SYSTEMD + $(foreach prog,$(HV_PROGS_y), \ + $(INSTALL) -m 0644 -D package/linux-tools/$(HV_$(prog)).service \ + $(TARGET_DIR)/usr/lib/systemd/system/$(HV_$(prog)).service + ) +endef + +define HV_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/linux-tools/S10hyperv \ + $(TARGET_DIR)/etc/init.d/S10hyperv + $(SED) 's/@PROGS@/$(foreach prog,$(HV_PROGS_y),$(HV_$(prog)))/' \ + $(TARGET_DIR)/etc/init.d/S10hyperv +endef diff --git a/package/linux-tools/linux-tool-iio.mk.in b/package/linux-tools/linux-tool-iio.mk.in new file mode 100644 index 00000000..a8cc89e8 --- /dev/null +++ b/package/linux-tools/linux-tool-iio.mk.in @@ -0,0 +1,29 @@ +################################################################################ +# +# iio +# +################################################################################ + +LINUX_TOOLS += iio + +IIO_MAKE_OPTS = $(LINUX_MAKE_FLAGS) + +define IIO_BUILD_CMDS + $(Q)if ! grep install $(LINUX_DIR)/tools/iio/Makefile >/dev/null 2>&1 ; then \ + echo "Your kernel version is too old and does not have install section in the iio tools." ; \ + echo "At least kernel 4.7 must be used." ; \ + exit 1 ; \ + fi + + $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools/iio \ + $(IIO_MAKE_OPTS) +endef + +# DESTDIR used since kernel version 4.14 +define IIO_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools/iio \ + $(IIO_MAKE_OPTS) \ + INSTALL_ROOT=$(TARGET_DIR) \ + DESTDIR=$(TARGET_DIR) \ + install +endef diff --git a/package/linux-tools/linux-tool-pci.mk.in b/package/linux-tools/linux-tool-pci.mk.in new file mode 100644 index 00000000..4ef0368a --- /dev/null +++ b/package/linux-tools/linux-tool-pci.mk.in @@ -0,0 +1,27 @@ +################################################################################ +# +# pci +# +################################################################################ + +LINUX_TOOLS += pci + +PCI_MAKE_OPTS = $(LINUX_MAKE_FLAGS) + +define PCI_BUILD_CMDS + $(Q)if ! grep install $(LINUX_DIR)/tools/pci/Makefile >/dev/null 2>&1 ; then \ + echo "Your kernel version is too old and does not have install section in the pci tools." ; \ + echo "At least kernel 4.20 must be used." ; \ + exit 1 ; \ + fi + + $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools/pci \ + $(PCI_MAKE_OPTS) +endef + +define PCI_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools/pci \ + $(PCI_MAKE_OPTS) \ + DESTDIR=$(TARGET_DIR) \ + install +endef diff --git a/package/linux-tools/linux-tool-perf.mk.in b/package/linux-tools/linux-tool-perf.mk.in new file mode 100644 index 00000000..efa747cf --- /dev/null +++ b/package/linux-tools/linux-tool-perf.mk.in @@ -0,0 +1,173 @@ +################################################################################ +# +# perf +# +################################################################################ + +LINUX_TOOLS += perf + +PERF_DEPENDENCIES = host-flex host-bison + +ifeq ($(KERNEL_ARCH),x86_64) +PERF_ARCH=x86 +else +PERF_ARCH=$(KERNEL_ARCH) +endif + +PERF_MAKE_FLAGS = \ + $(LINUX_MAKE_FLAGS) \ + JOBS=$(PARALLEL_JOBS) \ + ARCH=$(PERF_ARCH) \ + DESTDIR=$(TARGET_DIR) \ + prefix=/usr \ + WERROR=0 \ + NO_GTK2=1 \ + NO_LIBPERL=1 \ + NO_LIBPYTHON=1 \ + NO_LIBBIONIC=1 + +# We need to pass an argument to ld for setting the emulation when +# building for MIPS architecture, otherwise the default one will always +# be used and the compilation for most variants will fail. +ifeq ($(BR2_mips),y) +PERF_MAKE_FLAGS += LD="$(TARGET_LD) -m elf32btsmip" +else ifeq ($(BR2_mipsel),y) +PERF_MAKE_FLAGS += LD="$(TARGET_LD) -m elf32ltsmip" +else ifeq ($(BR2_mips64),y) +ifeq ($(BR2_MIPS_NABI32),y) +PERF_MAKE_FLAGS += LD="$(TARGET_LD) -m elf32btsmipn32" +else +PERF_MAKE_FLAGS += LD="$(TARGET_LD) -m elf64btsmip" +endif +else ifeq ($(BR2_mips64el),y) +ifeq ($(BR2_MIPS_NABI32),y) +PERF_MAKE_FLAGS += LD="$(TARGET_LD) -m elf32ltsmipn32" +else +PERF_MAKE_FLAGS += LD="$(TARGET_LD) -m elf64ltsmip" +endif +endif + +# The call to backtrace() function fails for ARC, because for some +# reason the unwinder from libgcc returns early. Thus the usage of +# backtrace() should be disabled in perf explicitly: at build time +# backtrace() appears to be available, but it fails at runtime: the +# backtrace will contain only several functions from the top of stack, +# instead of the complete backtrace. +ifeq ($(BR2_arc),y) +PERF_MAKE_FLAGS += NO_BACKTRACE=1 +endif + +ifeq ($(BR2_PACKAGE_LINUX_TOOLS_PERF_TUI),y) +PERF_DEPENDENCIES += slang +else +PERF_MAKE_FLAGS += NO_NEWT=1 NO_SLANG=1 +endif + +ifeq ($(BR2_PACKAGE_AUDIT),y) +PERF_DEPENDENCIES += audit +else +PERF_MAKE_FLAGS += NO_LIBAUDIT=1 +endif + +ifeq ($(BR2_PACKAGE_ZSTD),y) +PERF_DEPENDENCIES += zstd +endif + +ifeq ($(BR2_PACKAGE_LIBUNWIND),y) +PERF_DEPENDENCIES += libunwind +else +PERF_MAKE_FLAGS += NO_LIBUNWIND=1 +endif + +ifeq ($(BR2_PACKAGE_NUMACTL),y) +PERF_DEPENDENCIES += numactl +else +PERF_MAKE_FLAGS += NO_LIBNUMA=1 +endif + +ifeq ($(BR2_PACKAGE_ELFUTILS),y) +PERF_DEPENDENCIES += elfutils +else +PERF_MAKE_FLAGS += NO_LIBELF=1 NO_DWARF=1 +endif + +ifeq ($(BR2_PACKAGE_BINUTILS),y) +PERF_DEPENDENCIES += binutils +else +PERF_MAKE_FLAGS += NO_DEMANGLE=1 +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +PERF_DEPENDENCIES += openssl +else +PERF_MAKE_FLAGS += NO_LIBCRYPTO=1 +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +PERF_DEPENDENCIES += zlib +else +PERF_MAKE_FLAGS += NO_ZLIB=1 +endif + +# lzma is provided by xz +ifeq ($(BR2_PACKAGE_XZ),y) +PERF_DEPENDENCIES += xz +else +PERF_MAKE_FLAGS += NO_LZMA=1 +endif + +# We really do not want to build the perf documentation, because it +# has stringent requirement on the documentation generation tools, +# like xmlto and asciidoc), which may be lagging behind on some +# distributions. +# We name it 'GNUmakefile' so that GNU make will use it instead of +# the existing 'Makefile'. +define PERF_DISABLE_DOCUMENTATION + if [ -f $(LINUX_DIR)/tools/perf/Documentation/Makefile ]; then \ + printf "%%:\n\t@:\n" >$(LINUX_DIR)/tools/perf/Documentation/GNUmakefile; \ + fi +endef +LINUX_POST_PATCH_HOOKS += PERF_DISABLE_DOCUMENTATION + +# O must be redefined here to overwrite the one used by Buildroot for +# out of tree build. We build perf in $(LINUX_DIR)/tools/perf/ and not just +# $(LINUX_DIR) so that it isn't built in the root directory of the kernel +# sources. +define PERF_BUILD_CMDS + $(Q)if test ! -f $(LINUX_DIR)/tools/perf/Makefile ; then \ + echo "Your kernel version is too old and does not have the perf tool." ; \ + echo "At least kernel 2.6.31 must be used." ; \ + exit 1 ; \ + fi + $(Q)if test "$(BR2_PACKAGE_ELFUTILS)" = "" ; then \ + if ! grep -q NO_LIBELF $(LINUX_DIR)/tools/perf/Makefile* ; then \ + if ! test -r $(LINUX_DIR)/tools/perf/config/Makefile ; then \ + echo "The perf tool in your kernel cannot be built without libelf." ; \ + echo "Either upgrade your kernel to >= 3.7, or enable the elfutils package." ; \ + exit 1 ; \ + fi \ + fi \ + fi + $(Q)if test "$(BR2_PACKAGE_LINUX_TOOLS_PERF_TUI)" = "y" ; then \ + if ! grep -q NO_SLANG $(LINUX_DIR)/tools/perf/Makefile* ; then \ + echo "The perf tool in your kernel cannot be build with the TUI." ; \ + echo "Either upgrade your kernel to >= 3.10, or disable the TUI." ; \ + exit 1 ; \ + fi \ + fi + $(TARGET_MAKE_ENV) $(MAKE1) $(PERF_MAKE_FLAGS) \ + -C $(LINUX_DIR)/tools/perf O=$(LINUX_DIR)/tools/perf/ +endef + +# After installation, we remove the Perl and Python scripts from the +# target. +define PERF_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) $(PERF_MAKE_FLAGS) \ + -C $(LINUX_DIR)/tools/perf O=$(LINUX_DIR)/tools/perf/ install + $(RM) -rf $(TARGET_DIR)/usr/libexec/perf-core/scripts/ + $(RM) -rf $(TARGET_DIR)/usr/libexec/perf-core/tests/ +endef + +define PERF_LINUX_CONFIG_FIXUPS + $(call KCONFIG_ENABLE_OPT,CONFIG_PERF_EVENTS) +endef diff --git a/package/linux-tools/linux-tool-selftests.mk.in b/package/linux-tools/linux-tool-selftests.mk.in new file mode 100644 index 00000000..c4e5bf0f --- /dev/null +++ b/package/linux-tools/linux-tool-selftests.mk.in @@ -0,0 +1,46 @@ +################################################################################ +# +# selftests +# +################################################################################ + +LINUX_TOOLS += selftests + +ifeq ($(KERNEL_ARCH),x86_64) +SELFTESTS_ARCH=x86 +else +ifeq ($(KERNEL_ARCH),i386) +SELFTESTS_ARCH=x86 +else +SELFTESTS_ARCH=$(KERNEL_ARCH) +endif +endif + +SELFTESTS_DEPENDENCIES = libcap-ng popt + +SELFTESTS_MAKE_FLAGS = \ + $(LINUX_MAKE_FLAGS) \ + ARCH=$(SELFTESTS_ARCH) + +# O must be redefined here to overwrite the one used by Buildroot for +# out of tree build. We build the selftests in $(LINUX_DIR)/tools/selftests and +# not just $(LINUX_DIR) so that it isn't built in the root directory of the kernel +# sources. +# +# The headers_install step here is important as some kernel selftests use a +# hardcoded CFLAGS to find kernel headers e.g: +# CFLAGS += -I../../../../usr/include/ +# The headers_install target will install the kernel headers locally inside +# the Linux build dir +define SELFTESTS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) -C $(LINUX_DIR) $(SELFTESTS_MAKE_FLAGS) \ + headers_install + $(TARGET_MAKE_ENV) $(MAKE1) -C $(LINUX_DIR)/tools/testing/selftests \ + $(SELFTESTS_MAKE_FLAGS) O=$(LINUX_DIR)/tools/testing/selftests +endef + +define SELFTESTS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) -C $(LINUX_DIR)/tools/testing/selftests \ + $(SELFTESTS_MAKE_FLAGS) O=$(LINUX_DIR)/tools/testing/selftests \ + INSTALL_PATH=$(TARGET_DIR)/usr/lib/kselftests install +endef diff --git a/package/linux-tools/linux-tool-tmon.mk.in b/package/linux-tools/linux-tool-tmon.mk.in new file mode 100644 index 00000000..15931c31 --- /dev/null +++ b/package/linux-tools/linux-tool-tmon.mk.in @@ -0,0 +1,37 @@ +################################################################################ +# +# tmon +# +################################################################################ + +LINUX_TOOLS += tmon + +TMON_DEPENDENCIES = host-pkgconf ncurses +TMON_MAKE_OPTS = $(LINUX_MAKE_FLAGS) \ + CC=$(TARGET_CC) \ + PKG_CONFIG_PATH=$(STAGING_DIR)/usr/lib/pkgconfig + +ifeq ($(BR2_TOOLCHAIN_HAS_SSP),) +define TMON_DISABLE_STACK_PROTECTOR + $(SED) 's%-fstack-protector%%' $(LINUX_DIR)/tools/thermal/tmon/Makefile +endef +endif + +define TMON_BUILD_CMDS + $(Q)if ! grep install $(LINUX_DIR)/tools/thermal/tmon/Makefile >/dev/null 2>&1 ; then \ + echo "Your kernel version is too old and does not have the tmon tool." ; \ + echo "At least kernel 3.13 must be used." ; \ + exit 1 ; \ + fi + $(TMON_DISABLE_STACK_PROTECTOR) + $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools \ + $(TMON_MAKE_OPTS) \ + tmon +endef + +define TMON_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(LINUX_DIR)/tools \ + $(TMON_MAKE_OPTS) \ + INSTALL_ROOT=$(TARGET_DIR) \ + tmon_install +endef diff --git a/package/linux-tools/linux-tools.mk b/package/linux-tools/linux-tools.mk new file mode 100644 index 00000000..81b1fbc1 --- /dev/null +++ b/package/linux-tools/linux-tools.mk @@ -0,0 +1,74 @@ +################################################################################ +# +# linux-tools +# +################################################################################ + +# Vampirising sources from the kernel tree, so no source nor site specified. +# Instead, we directly build in the sources of the linux package. We can do +# that, because we're not building in the same location and the same files. +# +# So, all tools refer to $(LINUX_DIR) instead of $(@D). + +# Note: we need individual tools makefiles to be included *before* we build +# the list of build and install hooks below to guarantee that each tool has +# a chance to register itself once, and only once. Therefore, the makefiles +# are named linux-tool-*.mk.in, so they won't be picked up by the top-level +# Makefile, but can be included here, guaranteeing the single inclusion and +# the proper ordering. + +include $(sort $(wildcard package/linux-tools/*.mk.in)) + +# We only need the kernel to be extracted, not actually built +LINUX_TOOLS_PATCH_DEPENDENCIES = linux + +# Install Linux kernel tools in the staging directory since some tools +# may install shared libraries and headers (e.g. cpupower). +LINUX_TOOLS_INSTALL_STAGING = YES + +LINUX_TOOLS_DEPENDENCIES += $(foreach tool,$(LINUX_TOOLS),\ + $(if $(BR2_PACKAGE_LINUX_TOOLS_$(call UPPERCASE,$(tool))),\ + $($(call UPPERCASE,$(tool))_DEPENDENCIES))) + +LINUX_TOOLS_POST_BUILD_HOOKS += $(foreach tool,$(LINUX_TOOLS),\ + $(if $(BR2_PACKAGE_LINUX_TOOLS_$(call UPPERCASE,$(tool))),\ + $(call UPPERCASE,$(tool))_BUILD_CMDS)) + +LINUX_TOOLS_POST_INSTALL_STAGING_HOOKS += $(foreach tool,$(LINUX_TOOLS),\ + $(if $(BR2_PACKAGE_LINUX_TOOLS_$(call UPPERCASE,$(tool))),\ + $(call UPPERCASE,$(tool))_INSTALL_STAGING_CMDS)) + +LINUX_TOOLS_POST_INSTALL_TARGET_HOOKS += $(foreach tool,$(LINUX_TOOLS),\ + $(if $(BR2_PACKAGE_LINUX_TOOLS_$(call UPPERCASE,$(tool))),\ + $(call UPPERCASE,$(tool))_INSTALL_TARGET_CMDS)) + +define LINUX_TOOLS_LINUX_CONFIG_FIXUPS + $(foreach tool,$(LINUX_TOOLS),\ + $(if $(BR2_PACKAGE_LINUX_TOOLS_$(call UPPERCASE,$(tool))),\ + $($(call UPPERCASE,$(tool))_LINUX_CONFIG_FIXUPS)) + ) +endef + +define LINUX_TOOLS_INSTALL_INIT_SYSTEMD + $(foreach tool,$(LINUX_TOOLS),\ + $(if $(BR2_PACKAGE_LINUX_TOOLS_$(call UPPERCASE,$(tool))),\ + $($(call UPPERCASE,$(tool))_INSTALL_INIT_SYSTEMD)) + ) +endef + +define LINUX_TOOLS_INSTALL_INIT_SYSV + $(foreach tool,$(LINUX_TOOLS),\ + $(if $(BR2_PACKAGE_LINUX_TOOLS_$(call UPPERCASE,$(tool))),\ + $($(call UPPERCASE,$(tool))_INSTALL_INIT_SYSV)) + ) +endef + +define LINUX_TOOLS_INSTALL_INIT_OPENRC + $(foreach tool,$(LINUX_TOOLS),\ + $(if $(BR2_PACKAGE_LINUX_TOOLS_$(call UPPERCASE,$(tool))),\ + $(or $($(call UPPERCASE,$(tool))_INSTALL_INIT_OPENRC),\ + $($(call UPPERCASE,$(tool))_INSTALL_INIT_SYSV))) + ) +endef + +$(eval $(generic-package)) diff --git a/package/linux-zigbee/0001-test-serial-Remove-test-serial.patch b/package/linux-zigbee/0001-test-serial-Remove-test-serial.patch new file mode 100644 index 00000000..8cd9d754 --- /dev/null +++ b/package/linux-zigbee/0001-test-serial-Remove-test-serial.patch @@ -0,0 +1,54 @@ +From 98187a5238939edc889fdaad93b00628b55d1e08 Mon Sep 17 00:00:00 2001 +From: Maxime Hadjinlian +Date: Sat, 3 May 2014 19:43:20 +0200 +Subject: [PATCH] test-serial: Remove test-serial + +This folders only contains python tests scripts which would force us to +enable a dependency to host-python which seems kind of silly since +theses are only tests scripts. + +Signed-off-by: Maxime Hadjinlian +--- + Makefile.am | 2 +- + configure.ac | 6 ------ + 2 files changed, 1 insertion(+), 7 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 265f0d7..e7bb1a1 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -2,7 +2,7 @@ include $(top_srcdir)/Makefile.common + + ACLOCAL_AMFLAGS = -I m4 + +-SUBDIRS = lib addrdb src tests test-serial ++SUBDIRS = lib addrdb src tests + + include_HEADERS = include/ieee802154.h include/nl802154.h + noinst_HEADERS = include/libcommon.h include/addrdb.h include/logging.h +diff --git a/configure.ac b/configure.ac +index 17658af..506b289 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -77,11 +77,6 @@ AC_PROG_LIBTOOL + AM_PROG_LEX + AC_PROG_YACC + AC_SUBST(LIBTOOL_DEPS) +-# Currently the scripts works with python2.x only +-# Check for this at first +-AC_PATH_PROG(PYTHON, python2 python2.7 python2.6 python2.5 python) +-AM_PATH_PYTHON(,, [:]) +-py_CHECK_MAJOR_VERSION([PYTHON_VERSION], [2]) + AM_MISSING_PROG(HELP2MAN, help2man, $missing_dir) + + # Checks for libraries. +@@ -135,6 +130,5 @@ AC_CONFIG_FILES([ + addrdb/Makefile + src/Makefile + tests/Makefile +- test-serial/Makefile + ]) + AC_OUTPUT +-- +1.9.2 + diff --git a/package/linux-zigbee/0002-addrdb-coord-config-parse.y-add-missing-time.h-inclu.patch b/package/linux-zigbee/0002-addrdb-coord-config-parse.y-add-missing-time.h-inclu.patch new file mode 100644 index 00000000..0ce4381c --- /dev/null +++ b/package/linux-zigbee/0002-addrdb-coord-config-parse.y-add-missing-time.h-inclu.patch @@ -0,0 +1,43 @@ +From 8cc60d618f81f2eeaa926cd60ed9b55ee6cda6ea Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Mon, 8 Aug 2016 15:42:46 +0200 +Subject: [PATCH] addrdb/coord-config-parse.y: add missing include +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The %union definition uses the time_t structure. In order to use this +structure, the header has to be included. Otherwise, the build +breaks with some C libraries, such as musl: + +In file included from coord-config-lex.l:23:0: +coord-config-parse.y:107:2: error: unknown type name ‘time_t’ + time_t timestamp; + ^ + +This patch includes using the '%code requires' directive of +Yacc. + +Signed-off-by: Thomas Petazzoni +--- + addrdb/coord-config-parse.y | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/addrdb/coord-config-parse.y b/addrdb/coord-config-parse.y +index 2e10a88..85ee058 100644 +--- a/addrdb/coord-config-parse.y ++++ b/addrdb/coord-config-parse.y +@@ -102,6 +102,10 @@ + + %} + ++%code requires { ++#include ++} ++ + %union { + unsigned long number; + time_t timestamp; +-- +2.7.4 + diff --git a/package/linux-zigbee/Config.in b/package/linux-zigbee/Config.in new file mode 100644 index 00000000..ff2b0f7c --- /dev/null +++ b/package/linux-zigbee/Config.in @@ -0,0 +1,55 @@ +comment "linux-zigbee needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU + +config BR2_PACKAGE_LINUX_ZIGBEE + bool "linux-zigbee" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_THREADS # libnl + select BR2_PACKAGE_LIBNL + help + IEEE 802.15.4 is a standard for communication in small + low-rate wireless personal area networks (WPAN). While + 802.15.4 is a MAC- and PHY- layer standard only, several + common protocols commonly sit on top of it such as ZigBee, + MiWi, and 6LoWPAN. The goal of this project is to create an + implementation of 802.15.4 and several of the protocols + which run on top of it (primarily 6LoWPAN) for Linux. + + It's worth noting that the name linux-zigbee is somewhat of + a misnomer. While this project was originally started to + create a ZigBee implementation for Linux, licensing + restrictions put in place by the ZigBee Alliance make it + impossible for an implementation of ZigBee to ever become + part of the Linux kernel. Once this licensing issue was + discovered, this project's primary focus shifted to IEEE + 802.15.4 and 6LoWPAN. Other higher-layer standards may be + added at a future time. + + The 802.15.4 stack contains kernel components, which are + part of the mainline Linux kernel, and userspace components, + available in this package. + + http://sourceforge.net/apps/trac/linux-zigbee/ + +if BR2_PACKAGE_LINUX_ZIGBEE + +config BR2_PACKAGE_LINUX_ZIGBEE_TESTS + bool "tests programs" + help + Enable this option to install the Linux-ZigBee test programs + to the target. + +config BR2_PACKAGE_LINUX_ZIGBEE_OLD_KERNEL_COMPAT + bool "compatibility with older kernels" + help + Enable this option to get compatibility of the Linux-ZigBee + userspace tools with old kernels. Recent kernels know the + 802.15.4 line discipline as N_IEEE802154 with the value 25, + but some older kernels had it with the values 22 or 19. + +config BR2_PACKAGE_LINUX_ZIGBEE_LEASEFILE + string "path for persistent lease storage" + default "/var/run/izcoordinator.leases" + +endif diff --git a/package/linux-zigbee/linux-zigbee.hash b/package/linux-zigbee/linux-zigbee.hash new file mode 100644 index 00000000..f3370388 --- /dev/null +++ b/package/linux-zigbee/linux-zigbee.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 92fbefdf18d45147c2b78ca2ce2d899d4d1da5a3391a4ff6c51a5b14c6d6f87c lowpan-tools-0.3.1.tar.gz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/linux-zigbee/linux-zigbee.mk b/package/linux-zigbee/linux-zigbee.mk new file mode 100644 index 00000000..53089e16 --- /dev/null +++ b/package/linux-zigbee/linux-zigbee.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# linux-zigbee +# +################################################################################ + +LINUX_ZIGBEE_VERSION = 0.3.1 +LINUX_ZIGBEE_SOURCE = lowpan-tools-$(LINUX_ZIGBEE_VERSION).tar.gz +LINUX_ZIGBEE_SITE = \ + http://downloads.sourceforge.net/project/linux-zigbee/linux-zigbee-sources/$(LINUX_ZIGBEE_VERSION) +LINUX_ZIGBEE_LICENSE = GPL-2.0 +LINUX_ZIGBEE_LICENSE_FILES = COPYING +LINUX_ZIGBEE_DEPENDENCIES = libnl host-pkgconf host-flex host-bison + +# We patch configure.ac/Makefile.am +LINUX_ZIGBEE_AUTORECONF = YES + +LINUX_ZIGBEE_CONF_OPTS = \ + --disable-manpages \ + --disable-werror \ + --with-leasefile="$(call qstrip,$(BR2_PACKAGE_LINUX_ZIGBEE_LEASEFILE))" + +ifeq ($(BR2_PACKAGE_LINUX_ZIGBEE_TESTS),y) +LINUX_ZIGBEE_CONF_OPTS += --with-zbtestdir='/usr/sbin/' +else +LINUX_ZIGBEE_CONF_OPTS += --with-zbtestdir='' +endif + +ifeq ($(BR2_PACKAGE_LINUX_ZIGBEE_OLD_KERNEL_COMPAT),y) +LINUX_ZIGBEE_CONF_OPTS += --enable-kernel-compat +endif + +$(eval $(autotools-package)) diff --git a/package/linuxconsoletools/0001-conditional-build.patch b/package/linuxconsoletools/0001-conditional-build.patch new file mode 100644 index 00000000..9f462a64 --- /dev/null +++ b/package/linuxconsoletools/0001-conditional-build.patch @@ -0,0 +1,58 @@ +Selectively build groups of tools (inputattach, +joystick tools and/or force-feedback tools). + +Signed-off-by: Koen Martens + +diff -Naur a/utils/Makefile b/utils/Makefile +--- a/utils/Makefile 2016-04-19 23:28:36.000000000 +0200 ++++ b/utils/Makefile 2017-06-19 08:54:20.152184000 +0200 +@@ -27,8 +27,26 @@ + + CFLAGS ?= -g -O2 -Wall + +-PROGRAMS = inputattach jstest jscal fftest ffmvforce ffset \ +- ffcfstress jscal-restore jscal-store evdev-joystick ++PROGRAMS = ++ ++ifdef ENABLE_INPUTATTACH ++PROGRAMS += inputattach ++endif ++ ++ifdef ENABLE_JOYSTICK ++PROGRAMS += jstest ++PROGRAMS += jscal ++PROGRAMS += jscal-restore ++PROGRAMS += jscal-store ++PROGRAMS += evdev-joystick ++endif ++ ++ifdef ENABLE_FORCEFEEDBACK ++PROGRAMS += fftest ++PROGRAMS += ffmvforce ++PROGRAMS += ffset ++PROGRAMS += ffcfstress ++endif + + PREFIX ?= /usr/local + +@@ -79,13 +97,20 @@ + 80-stelladaptor-joystick.rules: 80-stelladaptor-joystick.rules.in + sed "s^@@PREFIX@@^$(PREFIX)^g" < $^ > $@ + ++INSTALL_DEP = compile ++ifdef ENABLE_JOYSTICK ++INSTALL_DEP += 80-stelladaptor-joystick.rules ++endif ++ + install: compile 80-stelladaptor-joystick.rules + install -d $(DESTDIR)$(PREFIX)/bin + install $(PROGRAMS) $(DESTDIR)$(PREFIX)/bin ++ifdef ENABLE_JOYSTICK + install -d $(DESTDIR)$(PREFIX)/share/joystick + install extract filter ident $(DESTDIR)$(PREFIX)/share/joystick + install -d $(DESTDIR)/lib/udev/rules.d + install js-set-enum-leds $(DESTDIR)/lib/udev + install -m 644 80-stelladaptor-joystick.rules $(DESTDIR)/lib/udev/rules.d ++endif + + .PHONY: compile clean distclean install diff --git a/package/linuxconsoletools/Config.in b/package/linuxconsoletools/Config.in new file mode 100644 index 00000000..614099fd --- /dev/null +++ b/package/linuxconsoletools/Config.in @@ -0,0 +1,40 @@ +config BR2_PACKAGE_LINUXCONSOLETOOLS + bool "linuxconsoletools" + select BR2_PACKAGE_LINUXCONSOLETOOLS_INPUTATTACH if \ + !BR2_PACKAGE_LINUXCONSOLETOOLS_JOYSTICK && \ + !BR2_PACKAGE_LINUXCONSOLETOOLS_FORCEFEEDBACK + help + Linuxconsoletools contains the inputattach utility + to attach legacy serial devices to the Linux kernel + input layer and joystick utilities to calibrate and + test joysticks and joypads. + + http://sf.net/projects/linuxconsole/ + +if BR2_PACKAGE_LINUXCONSOLETOOLS + +config BR2_PACKAGE_LINUXCONSOLETOOLS_INPUTATTACH + bool "inputattach" + default y + help + The inputattach utility attaches legacy serial devices + to the Linux kernel input layer. + +config BR2_PACKAGE_LINUXCONSOLETOOLS_JOYSTICK + bool "joystick utilities" + help + Joystick utilities (jstest, jscal, jscal-store, + jscal-restore, evdev-joystick). + +config BR2_PACKAGE_LINUXCONSOLETOOLS_FORCEFEEDBACK + bool "force-feedback utilities" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_SDL2 + help + Build force-feedback driver utilities (fftest, + ffmvforce, ffset, ffcfstress). + +comment "force-feedback utilities need a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +endif diff --git a/package/linuxconsoletools/linuxconsoletools.hash b/package/linuxconsoletools/linuxconsoletools.hash new file mode 100644 index 00000000..caacf70e --- /dev/null +++ b/package/linuxconsoletools/linuxconsoletools.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 95d112f06393806116341d593bda002c8bc44119c1538407623268fed90d8c34 linuxconsoletools-1.7.0.tar.bz2 +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/linuxconsoletools/linuxconsoletools.mk b/package/linuxconsoletools/linuxconsoletools.mk new file mode 100644 index 00000000..f26d874d --- /dev/null +++ b/package/linuxconsoletools/linuxconsoletools.mk @@ -0,0 +1,41 @@ +################################################################################ +# +# linuxconsoletools +# +################################################################################ + +LINUXCONSOLETOOLS_VERSION = 1.7.0 +LINUXCONSOLETOOLS_SOURCE = linuxconsoletools-$(LINUXCONSOLETOOLS_VERSION).tar.bz2 +LINUXCONSOLETOOLS_SITE = https://downloads.sourceforge.net/project/linuxconsole +LINUXCONSOLETOOLS_LICENSE = GPL-2.0+ +LINUXCONSOLETOOLS_LICENSE_FILES = COPYING + +ifeq ($(BR2_PACKAGE_LINUXCONSOLETOOLS_INPUTATTACH),y) +LINUXCONSOLETOOLS_MAKE_OPTS += ENABLE_INPUTATTACH=1 +endif + +ifeq ($(BR2_PACKAGE_LINUXCONSOLETOOLS_JOYSTICK),y) +LINUXCONSOLETOOLS_MAKE_OPTS += ENABLE_JOYSTICK=1 +endif + +ifeq ($(BR2_PACKAGE_LINUXCONSOLETOOLS_FORCEFEEDBACK),y) +LINUXCONSOLETOOLS_MAKE_OPTS += \ + ENABLE_FORCEFEEDBACK=1 \ + CFLAGS="$(TARGET_CFLAGS) -std=gnu99" +LINUXCONSOLETOOLS_DEPENDENCIES += sdl2 host-pkgconf +endif + +define LINUXCONSOLETOOLS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + $(LINUXCONSOLETOOLS_MAKE_OPTS) +endef + +define LINUXCONSOLETOOLS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + $(LINUXCONSOLETOOLS_MAKE_OPTS) \ + DESTDIR="$(TARGET_DIR)" \ + PREFIX=/usr \ + install +endef + +$(eval $(generic-package)) diff --git a/package/linuxptp/0001-missing.h-drop-clock_nanosleep-replacement.patch b/package/linuxptp/0001-missing.h-drop-clock_nanosleep-replacement.patch new file mode 100644 index 00000000..54ef963a --- /dev/null +++ b/package/linuxptp/0001-missing.h-drop-clock_nanosleep-replacement.patch @@ -0,0 +1,49 @@ +From 947bf03ec3d9eaa0bfc0269eed86b9364e94bc1a Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sun, 5 Aug 2018 15:25:53 +0200 +Subject: [PATCH] missing.h: drop clock_nanosleep() replacement + +Since uClibc-ng commits 68628fe7d463541bf3c33da6b214e63c0cc9feed +("librt: declare clock_nanosleep not only for NPTL") and +ddbb03e77ac1a48740688814b82f45c97ee81f37 ("librt: clock_nanosleep +could be even used without threads"), clock_nanosleep() is always +provided by uClibc, regardless of the thread implementation (none, +linuxthreads, nptl). These commits will be part of the upcoming 1.0.31 +release of uClibc-ng. + +Thanks to this, we can drop the replacement clock_nanosleep() +implementation added by linuxptp. Without this, linuxptp fails to +build with: + +missing.h:117:19: error: static declaration of 'clock_nanosleep' follows non-static declaration + static inline int clock_nanosleep(clockid_t clock_id, int flags, + ^~~~~~~~~~~~~~~ +In file included from clockadj.h:24:0, + from clockadj.c:24: + +Signed-off-by: Thomas Petazzoni +--- + missing.h | 7 ------- + 1 file changed, 7 deletions(-) + +diff --git a/missing.h b/missing.h +index 2f7adb9..60f89a3 100644 +--- a/missing.h ++++ b/missing.h +@@ -129,13 +129,6 @@ enum { + + #define TFD_TIMER_ABSTIME (1 << 0) + +-static inline int clock_nanosleep(clockid_t clock_id, int flags, +- const struct timespec *request, +- struct timespec *remain) +-{ +- return syscall(__NR_clock_nanosleep, clock_id, flags, request, remain); +-} +- + static inline int timerfd_create(int clockid, int flags) + { + return syscall(__NR_timerfd_create, clockid, flags); +-- +2.14.4 + diff --git a/package/linuxptp/Config.in b/package/linuxptp/Config.in new file mode 100644 index 00000000..c88b7a06 --- /dev/null +++ b/package/linuxptp/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_LINUXPTP + bool "linuxptp" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + The Linux PTP Project is the Precision Time Protocol + implementation according to IEEE standard 1588 for Linux. + + The dual design goals are to provide a robust implementation + of the standard and to use the most relevant and modern + Application Programming Interfaces (API) offered by the + Linux kernel. Supporting legacy APIs and other platforms is + not a goal. + + http://linuxptp.sourceforge.net/ + +comment "linuxptp needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/linuxptp/S65ptp4l b/package/linuxptp/S65ptp4l new file mode 100644 index 00000000..1b9e3c93 --- /dev/null +++ b/package/linuxptp/S65ptp4l @@ -0,0 +1,57 @@ +#!/bin/sh +# +# Start linuxptp +# + +DAEMON="ptp4l" + +PIDFILE="/var/run/$DAEMON.pid" + +PTP4L_ARGS="-f /etc/linuxptp.cfg" + +# shellcheck source=/dev/null +[ -r "/etc/default/ptp4l" ] && . "/etc/default/ptp4l" + +start() { + printf "Starting linuxptp daemon: " + start-stop-daemon -S -b -q -m -p $PIDFILE \ + -x /usr/sbin/$DAEMON -- $PTP4L_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return $status +} + +stop() { + printf "Stopping linuxptp daemon: " + start-stop-daemon -K -q -p $PIDFILE + status=$? + if [ "$status" -eq 0 ]; then + rm -f "$PIDFILE" + echo "OK" + else + echo "FAIL" + fi + return $status +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + stop + start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/linuxptp/S66phc2sys b/package/linuxptp/S66phc2sys new file mode 100644 index 00000000..fd1ec59b --- /dev/null +++ b/package/linuxptp/S66phc2sys @@ -0,0 +1,57 @@ +#!/bin/sh +# +# Start linuxptp +# + +DAEMON="phc2sys" + +PIDFILE="/var/run/$DAEMON.pid" + +PHC2SYS_ARGS="-a -r -S 1.0" + +# shellcheck source=/dev/null +[ -r "/etc/default/phc2sys" ] && . "/etc/default/phc2sys" + +start() { + printf "Starting linuxptp system clock synchronization: " + start-stop-daemon -S -b -q -m -p $PIDFILE \ + -x /usr/sbin/$DAEMON -- $PHC2SYS_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return $status +} + +stop() { + printf "Stopping linuxptp system clock synchronization: " + start-stop-daemon -K -q -p $PIDFILE + status=$? + if [ "$status" -eq 0 ]; then + rm -f "$PIDFILE" + echo "OK" + else + echo "FAIL" + fi + return $status +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + stop + start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/linuxptp/linuxptp.cfg b/package/linuxptp/linuxptp.cfg new file mode 100644 index 00000000..f9d02e8d --- /dev/null +++ b/package/linuxptp/linuxptp.cfg @@ -0,0 +1,19 @@ +# LinuxPTP configuration file for synchronizing the system clock to +# a remote PTP master in slave-only mode. +# +# By default synchronize time in slave-only mode using UDP and hardware time +# stamps on eth0. If the difference to master is >1.0 second correct by +# stepping the clock instead of adjusting the frequency. +# +# If you change the configuration don't forget to update the phc2sys +# parameters accordingly in linuxptp-system-clock.service (systemd) +# or the linuxptp SysV init script. + +[global] +slaveOnly 1 +delay_mechanism Auto +network_transport UDPv4 +time_stamping hardware +step_threshold 1.0 + +[eth0] diff --git a/package/linuxptp/linuxptp.hash b/package/linuxptp/linuxptp.hash new file mode 100644 index 00000000..a5479b0e --- /dev/null +++ b/package/linuxptp/linuxptp.hash @@ -0,0 +1,9 @@ +# From https://sourceforge.net/projects/linuxptp/files/v3.1.1/ +sha1 f905eabc6fd0f03c6a353f9c4ba188a3bd1b774c linuxptp-3.1.1.tgz +md5 3b79ab5e77c5b5cf06bc1c8350d405bb linuxptp-3.1.1.tgz + +# Locally computed: +sha256 94d6855f9b7f2d8e9b0ca6d384e3fae6226ce6fc012dbad02608bdef3be1c0d9 linuxptp-3.1.1.tgz + +# Hash for license file: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/linuxptp/linuxptp.mk b/package/linuxptp/linuxptp.mk new file mode 100644 index 00000000..048dd0b8 --- /dev/null +++ b/package/linuxptp/linuxptp.mk @@ -0,0 +1,50 @@ +################################################################################ +# +# linuxptp +# +################################################################################ + +LINUXPTP_VERSION = 3.1.1 +LINUXPTP_SOURCE = linuxptp-$(LINUXPTP_VERSION).tgz +LINUXPTP_SITE = http://downloads.sourceforge.net/linuxptp +LINUXPTP_LICENSE = GPL-2.0+ +LINUXPTP_LICENSE_FILES = COPYING +LINUXPTP_CPE_ID_VENDOR = linuxptp_project + +LINUXPTP_MAKE_ENV = \ + $(TARGET_MAKE_ENV) \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + KBUILD_OUTPUT=$(STAGING_DIR) + +LINUXPTP_MAKE_OPTS = \ + prefix=/usr \ + EXTRA_CFLAGS="$(TARGET_CFLAGS)" \ + EXTRA_LDFLAGS="$(TARGET_LDFLAGS)" + +define LINUXPTP_BUILD_CMDS + $(LINUXPTP_MAKE_ENV) $(MAKE) $(LINUXPTP_MAKE_OPTS) -C $(@D) all +endef + +define LINUXPTP_INSTALL_TARGET_CMDS + $(LINUXPTP_MAKE_ENV) $(MAKE) $(LINUXPTP_MAKE_OPTS) \ + DESTDIR=$(TARGET_DIR) -C $(@D) install + + $(INSTALL) -D -m 644 $(LINUXPTP_PKGDIR)/linuxptp.cfg \ + $(TARGET_DIR)/etc/linuxptp.cfg +endef + +define LINUXPTP_INSTALL_INIT_SYSV + $(INSTALL) -m 755 -D $(LINUXPTP_PKGDIR)/S65ptp4l \ + $(TARGET_DIR)/etc/init.d/S65ptp4l + $(INSTALL) -m 755 -D $(LINUXPTP_PKGDIR)/S66phc2sys \ + $(TARGET_DIR)/etc/init.d/S66phc2sys +endef + +define LINUXPTP_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 $(LINUXPTP_PKGDIR)/ptp4l.service \ + $(TARGET_DIR)/usr/lib/systemd/system/ptp4l.service + $(INSTALL) -D -m 644 $(LINUXPTP_PKGDIR)/phc2sys.service \ + $(TARGET_DIR)/usr/lib/systemd/system/phc2sys.service +endef + +$(eval $(generic-package)) diff --git a/package/linuxptp/phc2sys.service b/package/linuxptp/phc2sys.service new file mode 100644 index 00000000..63b0ca23 --- /dev/null +++ b/package/linuxptp/phc2sys.service @@ -0,0 +1,10 @@ +[Unit] +Description=Precision Time Protocol system clock synchronization +After=ptp4l.service + +[Service] +ExecStart=/usr/sbin/phc2sys -s /dev/ptp0 -c CLOCK_REALTIME -w -S 1.0 +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/package/linuxptp/ptp4l.service b/package/linuxptp/ptp4l.service new file mode 100644 index 00000000..07f0b68f --- /dev/null +++ b/package/linuxptp/ptp4l.service @@ -0,0 +1,13 @@ +[Unit] +Description=Precision Time Protocol daemon +After=syslog.target network.target +Before=time-sync.target +Wants=time-sync.target +Wants=phc2sys.service + +[Service] +ExecStart=/usr/sbin/ptp4l -f /etc/linuxptp.cfg +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/package/liquid-dsp/Config.in b/package/liquid-dsp/Config.in new file mode 100644 index 00000000..59ee7edb --- /dev/null +++ b/package/liquid-dsp/Config.in @@ -0,0 +1,24 @@ +comment "liquid-dsp requires a glibc or musl toolchain w/ dynamic library" + depends on !(BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_MUSL) || BR2_STATIC_LIBS + +config BR2_PACKAGE_LIQUID_DSP + bool "liquid-dsp" + depends on BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_MUSL + depends on !BR2_STATIC_LIBS + help + Liquid-DSP is a free and open-source signal processing + library for software-defined radios written in C. Its + purpose is to provide a set of extensible DSP modules that + do no rely on external dependencies or cumbersome + frameworks. + + http://liquidsdr.org/ + +if BR2_PACKAGE_LIQUID_DSP + +config BR2_PACKAGE_LIQUID_DSP_FAST + bool "optimize for speed over accuracy" + help + Optimize for speed over accuracy. + +endif diff --git a/package/liquid-dsp/liquid-dsp.hash b/package/liquid-dsp/liquid-dsp.hash new file mode 100644 index 00000000..31bcd687 --- /dev/null +++ b/package/liquid-dsp/liquid-dsp.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 85093624ef9cb90ead64c836d2f42690197edace1a86257d6524c4e4dc870483 liquid-dsp-1.3.2.tar.gz +sha256 4df7126196efba1283deb99e3269418dde4ab0ad1fde80a55051153451eb4df2 LICENSE diff --git a/package/liquid-dsp/liquid-dsp.mk b/package/liquid-dsp/liquid-dsp.mk new file mode 100644 index 00000000..9745893b --- /dev/null +++ b/package/liquid-dsp/liquid-dsp.mk @@ -0,0 +1,47 @@ +################################################################################ +# +# liquid-dsp +# +################################################################################ + +LIQUID_DSP_VERSION = 1.3.2 +LIQUID_DSP_SITE = $(call github,jgaeddert,liquid-dsp,v$(LIQUID_DSP_VERSION)) +LIQUID_DSP_LICENSE = MIT +LIQUID_DSP_LICENSE_FILES = LICENSE +LIQUID_DSP_INSTALL_STAGING = YES +LIQUID_DSP_AUTORECONF = YES + +LIQUID_DSP_CONF_ENV = \ + ax_cv_have_mmx_ext=$(if $(BR2_X86_CPU_HAS_MMX),yes,no) \ + ax_cv_have_sse_ext=$(if $(BR2_X86_CPU_HAS_SSE),yes,no) \ + ax_cv_have_sse2_ext=$(if $(BR2_X86_CPU_HAS_SSE2),yes,no) \ + ax_cv_have_sse3_ext=$(if $(BR2_X86_CPU_HAS_SSE3),yes,no) \ + ax_cv_have_ssse3_ext=$(if $(BR2_X86_CPU_HAS_SSSE3),yes,no) \ + ax_cv_have_sse41_ext=$(if $(BR2_X86_CPU_HAS_SSE4),yes,no) \ + ax_cv_have_sse42_ext=$(if $(BR2_X86_CPU_HAS_SSE42),yes,no) \ + ax_cv_have_avx_ext=$(if $(BR2_X86_CPU_HAS_AVX),yes,no) + +LIQUID_DSP_CFLAGS = $(TARGET_CFLAGS) +LIQUID_DSP_LDFLAGS = $(TARGET_LDFLAGS) + +# Speed over accuracy trade off +ifeq ($(BR2_PACKAGE_LIQUID_DSP_FAST),y) +LIQUID_DSP_CFLAGS += -ffast-math +endif + +# use FFTW instead of built-in FFT +ifeq ($(BR2_PACKAGE_FFTW_SINGLE),y) +LIQUID_DSP_LDFLAGS += -lfftw3f +LIQUID_DSP_DEPENDENCIES += fftw-single +endif + +# disable altivec, it has build issues +ifeq ($(BR2_powerpc)$(BR2_powerpc64)$(BR2_powerpc64le),y) +LIQUID_DSP_CONF_OPTS += --enable-simdoverride +endif + +LIQUID_DSP_CONF_OPTS += \ + CFLAGS="$(LIQUID_DSP_CFLAGS)" \ + LDFLAGS="$(LIQUID_DSP_LDFLAGS)" + +$(eval $(autotools-package)) diff --git a/package/lirc-tools/0001-Fix-build-without-Python.patch b/package/lirc-tools/0001-Fix-build-without-Python.patch new file mode 100644 index 00000000..b1940eac --- /dev/null +++ b/package/lirc-tools/0001-Fix-build-without-Python.patch @@ -0,0 +1,63 @@ +From 71f329d997d949d3c12d62d2f1473a1c99ee49b0 Mon Sep 17 00:00:00 2001 +From: Baruch Siach +Date: Sun, 27 Aug 2017 21:30:37 +0300 +Subject: [PATCH] Fix build without Python + +Don't define HAVE_PYTHON35 when PYTHON_LIBS is empty. + +Also, don't build Python dependent code when HAVE_PYTHON35 is not +defined. + +This fixes build failures like: + +Makefile:1616: recipe for target 'python-pkg/dist/lirc-0.10.0.tar.gz' failed +make[3]: *** [python-pkg/dist/lirc-0.10.0.tar.gz] Error 1 +python-pkg/lirc/_client.c:1:20: fatal error: Python.h: No such file or directory + #include + ^ + +Signed-off-by: Baruch Siach +--- +Upstream status: commit 74a2bcab6b + + Makefile.am | 2 ++ + configure.ac | 3 ++- + 2 files changed, 4 insertions(+), 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index 9f3dd14340cc..d8164fcd44cf 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -104,6 +104,7 @@ dist_py_pkg_doc_DATA = python-pkg/doc/Doxyfile \ + + libpython = $(libdir)/python$(PYTHON_VERSION) + pydir = $(libpython)/site-packages/lirc ++if HAVE_PYTHON35 + py_LTLIBRARIES = python-pkg/lib/_client.la + python_pkg_lib__client_la_SOURCES = \ + python-pkg/lirc/_client.c +@@ -116,6 +117,7 @@ python_pkg_lib__client_la_LDFLAGS = \ + $(PYTHON_LIBS) + python_pkg_lib__client_la_LIBADD = \ + lib/liblirc_client.la ++endif + + pylint: .phony + $(MAKE) -C tools pylint +diff --git a/configure.ac b/configure.ac +index 4108688433f8..07d901deafdf 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -50,7 +50,8 @@ test -z "$PYTHON_LIBS" && \ + test -n "$PYTHON_LIBS" || \ + AC_MSG_WARN([No python package found (missing devel package?)]) + python_version_nodots=$(echo $PYTHON_VERSION | tr -d '.') +-AM_CONDITIONAL(HAVE_PYTHON35, [test $python_version_nodots -ge 35]) ++AM_CONDITIONAL(HAVE_PYTHON35, [test -n "$PYTHON_LIBS" && \ ++ test $python_version_nodots -ge 35]) + CFLAGS="$CFLAGS $PYTHON_CFLAGS" + + +-- +2.14.1 + diff --git a/package/lirc-tools/0002-Fix-python-client-cross-compile.patch b/package/lirc-tools/0002-Fix-python-client-cross-compile.patch new file mode 100644 index 00000000..02deefaf --- /dev/null +++ b/package/lirc-tools/0002-Fix-python-client-cross-compile.patch @@ -0,0 +1,47 @@ +From 13c4ffcfde07f659a836fba4a604dc1c5024bb90 Mon Sep 17 00:00:00 2001 +From: Baruch Siach +Date: Tue, 29 Aug 2017 11:37:36 +0300 +Subject: [PATCH] Fix python client cross compile + +The setup.py setuptools wrapper needs to use a version of python built +specifically for cross compiling to cross compile successfully. Allow +setting that in the environment using the SETUPTOOLS_ENV variable. + +Fixes the following build failure: + +/usr/bin/ld: skipping incompatible .../lirc-tools-0.10.0/lib/.libs/liblirc_client.so when searching for -llirc_client +/usr/bin/ld: cannot find -llirc_client +collect2: error: ld returned 1 exit status +error: command '/usr/bin/gcc' failed with exit status 1 +Makefile:1578: recipe for target 'all-local' failed + +Signed-off-by: Baruch Siach +--- +Upstream status: https://sourceforge.net/p/lirc/tickets/308/ + + Makefile.am | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/Makefile.am b/Makefile.am +index d8164fcd44cf..a16be4278ae2 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -131,6 +131,7 @@ pep8: $(py_PYTHON) + if HAVE_PYTHON35 + all-local: + cd python-pkg; \ ++ $(SETUPTOOLS_ENV) \ + CFLAGS="-I$(abs_top_srcdir)/lib -I$(abs_builddir)/lib" \ + LDFLAGS=-L$(abs_builddir)/lib/.libs $(PYTHON) setup.py \ + $(if $(VERBOSE),,-q) build +@@ -179,6 +180,7 @@ $(abs_builddir)/python-pkg/setup.py: + $(PYTHON_TARBALL): $(abs_builddir)/python-pkg/setup.py + cp $(top_builddir)/VERSION $(abs_builddir)/python-pkg + cd $(abs_builddir)/python-pkg; CFLAGS=-I$(abs_top_srcdir)/lib \ ++ $(SETUPTOOLS_ENV) \ + LDFLAGS=-L$(abs_builddir)/lib/.libs $(PYTHON) setup.py -q sdist + + $(top_builddir)/python-pkg/VERSION: VERSION +-- +2.14.1 + diff --git a/package/lirc-tools/0003-python-pkg-Fix-lirc-version-detection-when-cross-com.patch b/package/lirc-tools/0003-python-pkg-Fix-lirc-version-detection-when-cross-com.patch new file mode 100644 index 00000000..04fbfe6e --- /dev/null +++ b/package/lirc-tools/0003-python-pkg-Fix-lirc-version-detection-when-cross-com.patch @@ -0,0 +1,51 @@ +From 732fd31610a6790a927ea9ed6d660796a1641254 Mon Sep 17 00:00:00 2001 +From: Baruch Siach +Date: Thu, 7 Sep 2017 08:12:01 +0200 +Subject: [PATCH] build: Fix lirc version detection when cross compiling. + +The setup.py script that runs on the host can't use the client library +built for target. So setup.py falls back to a wrong hard-coded VERSION +value. + +Instead of importing the target library, use exec() to read +lirc/config.py directly for its VERSION value. + +Fixes build failure: + +/usr/bin/install -c -m 644 ./python-pkg/dist/lirc-0.10.0.tar.gz \ + '.../output/host/arm-buildroot-linux-musleabihf/sysroot/usr/share/lirc' +/usr/bin/install: cannot stat './python-pkg/dist/lirc-0.10.0.tar.gz': \ + No such file or directory + +Signed-off-by: Baruch Siach +--- +Upstream status: commit 732fd31610a6 + + python-pkg/setup.py | 9 +++------ + 1 file changed, 3 insertions(+), 6 deletions(-) + +diff --git a/python-pkg/setup.py b/python-pkg/setup.py +index e9b33690f828..a2d92e0432aa 100644 +--- a/python-pkg/setup.py ++++ b/python-pkg/setup.py +@@ -6,14 +6,11 @@ import subprocess + import os.path + import os + +-try: +- import lirc.config +- VERSION = lirc.config.VERSION.replace('-devel','') +-except ImportError: +- VERSION='0.0.0' +- + from setuptools import setup, Extension + ++exec(open("lirc/config.py").read()) ++VERSION = VERSION.replace('-devel','') ++ + if 'CFLAGS' in os.environ: + cflags = os.environ['CFLAGS'].split() + if 'LDFLAGS' in os.environ: +-- +2.14.1 + diff --git a/package/lirc-tools/0004-plugins-devinput.c-fix-build-with-musl-1.2.0.patch b/package/lirc-tools/0004-plugins-devinput.c-fix-build-with-musl-1.2.0.patch new file mode 100644 index 00000000..e4c02cf4 --- /dev/null +++ b/package/lirc-tools/0004-plugins-devinput.c-fix-build-with-musl-1.2.0.patch @@ -0,0 +1,42 @@ +From 74909db0342c7aff29e15972c9928f3bef56d5a6 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Tue, 21 Apr 2020 12:14:13 +0200 +Subject: [PATCH] plugins/devinput.c: fix build with musl 1.2.0 + +time element is deprecated on new input_event structure in kernel's +input.h [1] + +[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit?id=152194fe9c3f + +Signed-off-by: Fabrice Fontaine +--- + plugins/devinput.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/plugins/devinput.c b/plugins/devinput.c +index 77828b44..e5a52e42 100644 +--- a/plugins/devinput.c ++++ b/plugins/devinput.c +@@ -51,6 +51,10 @@ + #define LONG(x) ((x) / BITS_PER_LONG) + #define test_bit(bit, array) ((array[LONG(bit)] >> OFF(bit)) & 1) + ++#ifndef input_event_sec ++#define input_event_sec time.tv_sec ++#define input_event_usec time.tv_usec ++#endif + + static const logchannel_t logchannel = LOG_DRIVER; + +@@ -458,7 +462,7 @@ char* devinput_rec(struct ir_remote* remotes) + return 0; + } + +- log_trace("time %ld.%06ld type %d code %d value %d", event.time.tv_sec, event.time.tv_usec, event.type, ++ log_trace("time %ld.%06ld type %d code %d value %d", event.input_event_sec, event.input_event_usec, event.type, + event.code, event.value); + + value = (unsigned)event.value; +-- +2.25.1 + diff --git a/package/lirc-tools/Config.in b/package/lirc-tools/Config.in new file mode 100644 index 00000000..6eaf8288 --- /dev/null +++ b/package/lirc-tools/Config.in @@ -0,0 +1,24 @@ +config BR2_PACKAGE_LIRC_TOOLS + bool "lirc-tools" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_INSTALL_LIBSTDCPP + # dlopen() + depends on !BR2_STATIC_LIBS + help + LIRC is a package that supports receiving and sending IR + signals of the most common IR remote controls. It contains a + daemon that decodes and sends IR signals, a mouse daemon + that translates IR signals to mouse movements and a couple + of user programs that allow to control your computer with a + remote control. + + It requires the kernel LIRC interface driver, make sure to + enable the kernel drivers to support your hardware. + + http://www.lirc.org/ + +comment "lirc-tools needs a toolchain w/ threads, dynamic library, C++" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS \ + || !BR2_INSTALL_LIBSTDCPP diff --git a/package/lirc-tools/S25lircd b/package/lirc-tools/S25lircd new file mode 100644 index 00000000..7a0ec2f6 --- /dev/null +++ b/package/lirc-tools/S25lircd @@ -0,0 +1,38 @@ +#!/bin/sh +# +# Start lirc +# +# Support for remotes - Add remotes to /etc/lirc/lircd.conf.d/ +# + +start() { + printf "Starting lirc: " + mkdir -p /var/run/lirc + ln -sf /var/run/lirc/lircd /dev/lircd + start-stop-daemon -b -S -q -m -p /var/run/lirc.pid --exec /usr/sbin/lircd -- -n -O /etc/lirc/lirc_options.conf + echo "OK" +} + +stop() { + printf "Stopping lirc: " + start-stop-daemon -K -q -p /var/run/lirc.pid + echo "OK" +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + stop + start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/lirc-tools/lirc-tools.hash b/package/lirc-tools/lirc-tools.hash new file mode 100644 index 00000000..8d9a79d2 --- /dev/null +++ b/package/lirc-tools/lirc-tools.hash @@ -0,0 +1,6 @@ +# hash from https://sourceforge.net/projects/lirc/files/LIRC/0.10.1/ +sha1 9d6f6d18ac566a96ef4ca1d6909a4e8bc517d48a lirc-0.10.1.tar.bz2 +md5 86c3f8e4efaba10571addb8313d1e040 lirc-0.10.1.tar.bz2 +# Locally computed +sha256 8b753c60df2a7f5dcda2db72c38e448ca300c3b4f6000c1501fcb0bd5df414f2 lirc-0.10.1.tar.bz2 +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/lirc-tools/lirc-tools.mk b/package/lirc-tools/lirc-tools.mk new file mode 100644 index 00000000..d66f4e99 --- /dev/null +++ b/package/lirc-tools/lirc-tools.mk @@ -0,0 +1,58 @@ +################################################################################ +# +# lirc-tools +# +################################################################################ + +LIRC_TOOLS_VERSION = 0.10.1 +LIRC_TOOLS_SOURCE = lirc-$(LIRC_TOOLS_VERSION).tar.bz2 +LIRC_TOOLS_SITE = http://downloads.sourceforge.net/project/lirc/LIRC/$(LIRC_TOOLS_VERSION) +LIRC_TOOLS_LICENSE = GPL-2.0+ +LIRC_TOOLS_LICENSE_FILES = COPYING +LIRC_TOOLS_DEPENDENCIES = host-libxslt host-pkgconf host-python3 +LIRC_TOOLS_INSTALL_STAGING = YES +# Patching configure.ac and Makefile.am +LIRC_TOOLS_AUTORECONF = YES + +LIRC_TOOLS_CONF_ENV = XSLTPROC=yes HAVE_WORKING_POLL=yes +LIRC_TOOLS_CONF_OPTS = --without-x --enable-devinput --enable-uinput + +ifeq ($(BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4),y) +LIRC_TOOLS_CONF_ENV += \ + DEVINPUT_HEADER=$(STAGING_DIR)/usr/include/linux/input-event-codes.h +else +LIRC_TOOLS_CONF_ENV += \ + DEVINPUT_HEADER=$(STAGING_DIR)/usr/include/linux/input.h +endif + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +LIRC_TOOLS_DEPENDENCIES += udev +endif + +ifeq ($(BR2_PACKAGE_ALSA_LIB),y) +LIRC_TOOLS_DEPENDENCIES += alsa-lib +endif + +ifeq ($(BR2_PACKAGE_LIBUSB_COMPAT),y) +LIRC_TOOLS_DEPENDENCIES += libusb-compat +endif + +ifeq ($(BR2_PACKAGE_PORTAUDIO),y) +LIRC_TOOLS_DEPENDENCIES += portaudio +endif + +ifeq ($(BR2_PACKAGE_LIBFTDI1),y) +LIRC_TOOLS_DEPENDENCIES += libftdi1 +endif + +ifeq ($(BR2_PACKAGE_PYTHON3),y) +LIRC_TOOLS_DEPENDENCIES += python3 host-python3-setuptools +LIRC_TOOLS_MAKE_ENV += SETUPTOOLS_ENV='$(PKG_PYTHON_SETUPTOOLS_ENV)' +endif + +define LIRC_TOOLS_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/lirc-tools/S25lircd \ + $(TARGET_DIR)/etc/init.d/S25lircd +endef + +$(eval $(autotools-package)) diff --git a/package/lite/0001-dfbspy-stat.patch b/package/lite/0001-dfbspy-stat.patch new file mode 100644 index 00000000..5ca73691 --- /dev/null +++ b/package/lite/0001-dfbspy-stat.patch @@ -0,0 +1,53 @@ +From upstream git (git://git.directfb.org/git/directfb/libs/LiTE.git) + +From ffe0ce78327a63ddb1265328ea9b5b03acdca019 Mon Sep 17 00:00:00 2001 +From: Denis Oliver Kropp +Date: Fri, 1 Apr 2011 20:20:26 +0200 +Subject: [PATCH] dfbspy: Build fix for dfbspy example. + +--- + examples/dfbspy.c | 20 ++++++++++---------- + 1 files changed, 10 insertions(+), 10 deletions(-) + +diff --git a/examples/dfbspy.c b/examples/dfbspy.c +index 5f36f0b..c7f9725 100644 +--- a/examples/dfbspy.c ++++ b/examples/dfbspy.c +@@ -89,9 +89,9 @@ read_stat( FusionStat *stat, int world ) + + /**************************************************************************************************/ + +-#define CALC(x) stat.x = (int)(((s.x - last_stat.x) * 1000 / (float) diff) + 0.5f) ++#define CALC(x) stats.x = (int)(((s.x - last_stat.x) * 1000 / (float) diff) + 0.5f) + +-static FusionStat last_stat, stat; ++static FusionStat last_stat, stats; + static long long last_millis; + + static int +@@ -145,14 +145,14 @@ static const struct { + void (*update)( LiteLabel *label, void *ctx ); + void *ctx; + } list[] = { +- { "lease/purchase", update_number, &stat.lease_purchase }, +- { "cede", update_number, &stat.cede }, +- { "attach", update_number, &stat.attach }, +- { "detach", update_number, &stat.detach }, +- { "ref up", update_number, &stat.ref_up }, +- { "ref down", update_number, &stat.ref_down }, +- { "prevail/swoop", update_number, &stat.prevail_swoop }, +- { "dismiss", update_number, &stat.dismiss } ++ { "lease/purchase", update_number, &stats.lease_purchase }, ++ { "cede", update_number, &stats.cede }, ++ { "attach", update_number, &stats.attach }, ++ { "detach", update_number, &stats.detach }, ++ { "ref up", update_number, &stats.ref_up }, ++ { "ref down", update_number, &stats.ref_down }, ++ { "prevail/swoop", update_number, &stats.prevail_swoop }, ++ { "dismiss", update_number, &stats.dismiss } + }; + + #define NUM_LIST (sizeof(list)/sizeof(list[0])) +-- +1.7.6.3 + diff --git a/package/lite/0002-no-tests.patch b/package/lite/0002-no-tests.patch new file mode 100644 index 00000000..3a471865 --- /dev/null +++ b/package/lite/0002-no-tests.patch @@ -0,0 +1,11 @@ +--- a/Makefile.in.orig 2008-07-07 13:07:12.000000000 +0200 ++++ b/Makefile.in 2008-07-07 13:07:05.000000000 +0200 +@@ -202,7 +202,7 @@ + target_vendor = @target_vendor@ + top_builddir = @top_builddir@ + top_srcdir = @top_srcdir@ +-SUBDIRS = data fonts lite leck examples tests ++SUBDIRS = data fonts lite leck examples + EXTRA_DIST = TODO lite.pc.in leck.pc.in + pkgconfigdir = $(libdir)/pkgconfig + pkgconfig_DATA = lite.pc leck.pc diff --git a/package/lite/0003-pkg-config.patch b/package/lite/0003-pkg-config.patch new file mode 100644 index 00000000..cdd24162 --- /dev/null +++ b/package/lite/0003-pkg-config.patch @@ -0,0 +1,22 @@ +From 7982cccbb6ad58f3802bb266467290200d130a48 Mon Sep 17 00:00:00 2001 +From: Ville Syrjala +Date: Sat, 27 Nov 2010 01:14:25 +0200 +Subject: [PATCH] Too many '\' characters in the .pc file + +--- + lite.pc.in | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/lite.pc.in b/lite.pc.in +index 48eb969..3a21eaa 100644 +--- a/lite.pc.in ++++ b/lite.pc.in +@@ -9,4 +9,4 @@ Description: "LiTE" is a Toolkit Engine + Requires: directfb >= @DFB_REQUIRED_VERSION@ + Version: @VERSION@ + Libs: -L${libdir} -llite +-Cflags: -I${includedir} -DLITEFONTDIR=\\\"@LITEFONTDIR@\\\" ++Cflags: -I${includedir} -DLITEFONTDIR=\"@LITEFONTDIR@\" +-- +1.7.1 + diff --git a/package/lite/Config.in b/package/lite/Config.in new file mode 100644 index 00000000..62cd21e5 --- /dev/null +++ b/package/lite/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LITE + bool "LiTE (toolbox engine)" + depends on BR2_PACKAGE_DIRECTFB + help + LiTE stands for LiTE is a Toolbox Engine. + Its role is to facilitate the functions of DirectFB so that a + toolbox could be written on top of DirectFB with less effort. + As such LiTE has abstractions for the underlying graphics and + event systems. + + See http://www.directfb.org/wiki/index.php/LiTE:Architecture diff --git a/package/lite/lite.hash b/package/lite/lite.hash new file mode 100644 index 00000000..13a494b7 --- /dev/null +++ b/package/lite/lite.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 1b784cf595c3d5313e3705db210119f77d48826dbc7fcf6328af83a1270c2264 LiTE-0.8.10.tar.gz +sha256 512d2d21b6b3384ba64781abb0208a1b87740bc31e2df48e2b206ddb7e4d5779 COPYING diff --git a/package/lite/lite.mk b/package/lite/lite.mk new file mode 100644 index 00000000..ddb55d46 --- /dev/null +++ b/package/lite/lite.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# lite +# +################################################################################ + +LITE_VERSION = 0.8.10 +LITE_SOURCE = LiTE-$(LITE_VERSION).tar.gz +LITE_SITE = http://www.directfb.org/downloads/Libs +LITE_INSTALL_STAGING = YES +LITE_INSTALL_STAGING_OPTS = DESTDIR=$(STAGING_DIR) LDFLAGS=-L$(STAGING_DIR)/usr/lib install +LITE_CONF_ENV = DFB_CFLAGS=-I$(STAGING_DIR)/usr/include/directfb +LITE_DEPENDENCIES = directfb +LITE_LICENSE = LGPL-2.1+ +LITE_LICENSE_FILES = COPYING + +define LITE_FINALIZE_INSTALL + $(INSTALL) -d $(TARGET_DIR)/usr/share/LiTE/examples/ + $(INSTALL) -d $(TARGET_DIR)/usr/share/fonts/truetype/ + $(INSTALL) -m0644 $(@D)/data/*.png $(TARGET_DIR)/usr/share/LiTE/ + $(INSTALL) -m0644 $(@D)/examples/*.png $(TARGET_DIR)/usr/share/LiTE/examples/ + $(INSTALL) -m0644 $(@D)/fonts/*.ttf $(TARGET_DIR)/usr/share/fonts/truetype/ +endef + +LITE_POST_INSTALL_TARGET_HOOKS += LITE_FINALIZE_INSTALL + +$(eval $(autotools-package)) diff --git a/package/live555/0001-Add-a-pkg-config-file-for-the-shared-libraries.patch b/package/live555/0001-Add-a-pkg-config-file-for-the-shared-libraries.patch new file mode 100644 index 00000000..a2ae1c18 --- /dev/null +++ b/package/live555/0001-Add-a-pkg-config-file-for-the-shared-libraries.patch @@ -0,0 +1,66 @@ +From: Benjamin Drung +Date: Sat, 16 Sep 2017 11:22:03 +0200 +Subject: Add a pkg-config file for the shared libraries + +This patch was downloaded from Debian +https://sources.debian.org/src/liblivemedia/2018.08.05-1/debian/patches/0002-Add-a-pkg-config-file-for-the-shared-libraries.patch/ + +The local/ part of PREXIX and LIBDIR was removed to fit into buildroot. + +A similar version of this patch is part of the vlc source repo: +http://git.videolan.org/?p=vlc.git;a=blob;f=contrib/src/live555/add-pkgconfig-file.patch;hb=HEAD + +Upstream status: Rejected +http://lists.live555.com/pipermail/live-devel/2013-January/016374.html +http://lists.live555.com/pipermail/live-devel/2013-January/016375.html + +Signed-off-by: Bernd Kuhls +--- + Makefile.head | 3 +++ + Makefile.tail | 7 ++++++- + live555.pc.in | 9 +++++++++ + 3 files changed, 18 insertions(+), 1 deletion(-) + create mode 100644 live555.pc.in + +diff --git a/Makefile.head b/Makefile.head +index 458c54c..1571037 100644 +--- a/Makefile.head ++++ b/Makefile.head +@@ -1 +1,4 @@ ++PREFIX = /usr ++LIBDIR = /usr/lib ++VERSION = $(shell grep LIVEMEDIA_LIBRARY_VERSION_STRING liveMedia/include/liveMedia_version.hh | sed 's/.*"\([^"]*\)".*/\1/') + ##### Change the following for your environment: +diff --git a/Makefile.tail b/Makefile.tail +index fc594ea..a20a527 100644 +--- a/Makefile.tail ++++ b/Makefile.tail +@@ -22,7 +22,12 @@ all: + @echo + @echo "For more information about this source code (including your obligations under the LGPL), please see our FAQ at http://live555.com/liveMedia/faq.html" + +-install: ++install_shared_libraries: ++ install -d $(DESTDIR)$(LIBDIR)/pkgconfig ++ sed "s#@PREFIX@#$(PREFIX)#;s#@LIBDIR@#$(LIBDIR)#;s#@VERSION@#$(VERSION)#" live555.pc.in > $(DESTDIR)$(LIBDIR)/pkgconfig/live555.pc ++ chmod 644 $(DESTDIR)$(LIBDIR)/pkgconfig/live555.pc ++ ++install: $(INSTALL2) + cd $(LIVEMEDIA_DIR) ; $(MAKE) install + cd $(GROUPSOCK_DIR) ; $(MAKE) install + cd $(USAGE_ENVIRONMENT_DIR) ; $(MAKE) install +diff --git a/live555.pc.in b/live555.pc.in +new file mode 100644 +index 0000000..3736944 +--- /dev/null ++++ b/live555.pc.in +@@ -0,0 +1,9 @@ ++prefix=@PREFIX@ ++libdir=@LIBDIR@ ++includedir=${prefix}/include ++ ++Name: live555 ++Description: multimedia RTSP streaming library ++Version: @VERSION@ ++Cflags: -I${includedir}/liveMedia -I${includedir}/groupsock -I${includedir}/BasicUsageEnvironment -I${includedir}/UsageEnvironment ++Libs: -L${libdir} -lliveMedia -lgroupsock -lBasicUsageEnvironment -lUsageEnvironment diff --git a/package/live555/Config.in b/package/live555/Config.in new file mode 100644 index 00000000..dbd9dfd3 --- /dev/null +++ b/package/live555/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LIVE555 + bool "live555" + depends on BR2_INSTALL_LIBSTDCPP + help + LIVE555 Streaming Media forms a set of C++ libraries for + multimedia streaming, using open standard protocols + (RTP/RTCP, RTSP, SIP). + + http://www.live555.com/liveMedia/ + +comment "live555 needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/live555/live555.hash b/package/live555/live555.hash new file mode 100644 index 00000000..d4fa93d0 --- /dev/null +++ b/package/live555/live555.hash @@ -0,0 +1,5 @@ +# From http://www.live555.com/liveMedia/public/live555-latest-md5.txt +md5 3c1992b0e9b871bcad7491a3da541781 live.2021.05.03.tar.gz +# Locally generated +sha256 ae73241f9cc4ab740d60737c0438d62a7635af3822de5d84acf275793de42029 live.2021.05.03.tar.gz +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 COPYING.LESSER diff --git a/package/live555/live555.mk b/package/live555/live555.mk new file mode 100644 index 00000000..effd4517 --- /dev/null +++ b/package/live555/live555.mk @@ -0,0 +1,74 @@ +################################################################################ +# +# live555 +# +################################################################################ + +LIVE555_VERSION = 2021.05.03 +LIVE555_SOURCE = live.$(LIVE555_VERSION).tar.gz +LIVE555_SITE = http://www.live555.com/liveMedia/public +# There is a COPYING file with the GPL-3.0 license text, but none of +# the source files appear to be released under GPL-3.0, and the +# project web site says it's licensed under the LGPL: +# http://live555.com/liveMedia/faq.html#copyright-and-license +LIVE555_LICENSE = LGPL-3.0+ +LIVE555_LICENSE_FILES = COPYING.LESSER +LIVE555_CPE_ID_VENDOR = live555 +LIVE555_CPE_ID_PRODUCT = streaming_media +LIVE555_INSTALL_STAGING = YES + +LIVE555_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_STATIC_LIBS),y) +LIVE555_CONFIG_TARGET = linux +LIVE555_LIBRARY_LINK = $(TARGET_AR) cr +else +LIVE555_CONFIG_TARGET = linux-with-shared-libraries +LIVE555_LIBRARY_LINK = $(TARGET_CC) -o +LIVE555_CFLAGS += -fPIC +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +LIVE555_DEPENDENCIES += host-pkgconf openssl +LIVE555_CONSOLE_LIBS = `$(PKG_CONFIG_HOST_BINARY) --libs openssl` +# passed to ar for static linking, which gets confused by -L

      +ifneq ($(BR2_STATIC_LIBS),y) +LIVE555_LIVEMEDIA_LIBS = $(LIVE555_CONSOLE_LIBS) +endif +else +LIVE555_CFLAGS += -DNO_OPENSSL +endif + +ifndef ($(BR2_ENABLE_LOCALE),y) +LIVE555_CFLAGS += -DLOCALE_NOT_USED +endif + +define LIVE555_CONFIGURE_CMDS + echo 'COMPILE_OPTS = $$(INCLUDES) -I. -DSOCKLEN_T=socklen_t $(LIVE555_CFLAGS)' >> $(@D)/config.$(LIVE555_CONFIG_TARGET) + echo 'C_COMPILER = $(TARGET_CC)' >> $(@D)/config.$(LIVE555_CONFIG_TARGET) + echo 'CPLUSPLUS_COMPILER = $(TARGET_CXX)' >> $(@D)/config.$(LIVE555_CONFIG_TARGET) + + echo 'LINK = $(TARGET_CXX) -o' >> $(@D)/config.$(LIVE555_CONFIG_TARGET) + echo 'LINK_OPTS = -L. $(TARGET_LDFLAGS)' >> $(@D)/config.$(LIVE555_CONFIG_TARGET) + echo 'PREFIX = /usr' >> $(@D)/config.$(LIVE555_CONFIG_TARGET) + # Must have a whitespace at the end of LIBRARY_LINK, otherwise static link + # fails + echo 'LIBRARY_LINK = $(LIVE555_LIBRARY_LINK) ' >> $(@D)/config.$(LIVE555_CONFIG_TARGET) + echo 'LIBS_FOR_CONSOLE_APPLICATION = $(LIVE555_CONSOLE_LIBS)' >> $(@D)/config.$(LIVE555_CONFIG_TARGET) + echo 'LIBS_FOR_LIVEMEDIA_LIB = $(LIVE555_LIVEMEDIA_LIBS)' >> $(@D)/config.$(LIVE555_CONFIG_TARGET) + (cd $(@D); ./genMakefiles $(LIVE555_CONFIG_TARGET)) +endef + +define LIVE555_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) all +endef + +define LIVE555_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) DESTDIR=$(STAGING_DIR) -C $(@D) install +endef + +define LIVE555_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) DESTDIR=$(TARGET_DIR) PREFIX=/usr -C $(@D) install +endef + +$(eval $(generic-package)) diff --git a/package/ljlinenoise/Config.in b/package/ljlinenoise/Config.in new file mode 100644 index 00000000..964183f1 --- /dev/null +++ b/package/ljlinenoise/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_LJLINENOISE + bool "ljlinenoise" + # ljsyscall is specifically for LuaJIT, not Lua. + depends on BR2_PACKAGE_LUAJIT + select BR2_PACKAGE_LJSYSCALL # runtime + help + ljlinenoise is a pure LuaJIT port of linenoise, + a small alternative to readline and libedit. + + https://fperrad.frama.io/ljlinenoise/ + +comment "ljlinenoise needs LuaJIT" + depends on !BR2_PACKAGE_LUAJIT diff --git a/package/ljlinenoise/ljlinenoise.hash b/package/ljlinenoise/ljlinenoise.hash new file mode 100644 index 00000000..647f11d8 --- /dev/null +++ b/package/ljlinenoise/ljlinenoise.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 7a6c4142b0096106f498d7ee4bea5bf5086c076d1f071893441b8e5c0665fb47 ljlinenoise-0.1.3-1.src.rock +sha256 9b17730cb34ea591fb39688e70bd2be9c13d11b9db1c813b4ae68e3da9b7093e ljlinenoise-0.1.3/COPYRIGHT diff --git a/package/ljlinenoise/ljlinenoise.mk b/package/ljlinenoise/ljlinenoise.mk new file mode 100644 index 00000000..f021d938 --- /dev/null +++ b/package/ljlinenoise/ljlinenoise.mk @@ -0,0 +1,11 @@ +################################################################################ +# +# ljlinenoise +# +################################################################################ + +LJLINENOISE_VERSION = 0.1.3-1 +LJLINENOISE_LICENSE = MIT +LJLINENOISE_LICENSE_FILES = $(LJLINENOISE_SUBDIR)/COPYRIGHT + +$(eval $(luarocks-package)) diff --git a/package/ljsyscall/Config.in b/package/ljsyscall/Config.in new file mode 100644 index 00000000..313f24df --- /dev/null +++ b/package/ljsyscall/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LJSYSCALL + bool "ljsyscall" + # ljsyscall is specifically for LuaJIT, not Lua. + depends on BR2_PACKAGE_LUAJIT + help + An FFI implementation of the Linux and NetBSD kernel ABIs for + LuaJIT. + + http://www.myriabit.com/ljsyscall/ + +comment "ljsyscall needs LuaJIT" + depends on !BR2_PACKAGE_LUAJIT diff --git a/package/ljsyscall/ljsyscall.hash b/package/ljsyscall/ljsyscall.hash new file mode 100644 index 00000000..6fd7f6a5 --- /dev/null +++ b/package/ljsyscall/ljsyscall.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 6e29503609bd966fed33dec1a1571b36bbdbc37bf1a828af6722ed0ead192ff1 ljsyscall-0.12.tar.gz +sha256 c8e21d8e74afbe26c2c8e69b42327d3b48e602117f9ef7b22c31ddca6f46b1f2 COPYRIGHT diff --git a/package/ljsyscall/ljsyscall.mk b/package/ljsyscall/ljsyscall.mk new file mode 100644 index 00000000..12dfbcb4 --- /dev/null +++ b/package/ljsyscall/ljsyscall.mk @@ -0,0 +1,44 @@ +################################################################################ +# +# ljsyscall +# +################################################################################ + +LJSYSCALL_VERSION = 0.12 +LJSYSCALL_SITE = $(call github,justincormack,ljsyscall,v$(LJSYSCALL_VERSION)) +LJSYSCALL_LICENSE = MIT +LJSYSCALL_LICENSE_FILES = COPYRIGHT + +# dispatch all architectures of LuaJIT +ifeq ($(BR2_i386),y) +LJSYSCALL_ARCH = x86 +else ifeq ($(BR2_x86_64),y) +LJSYSCALL_ARCH = x64 +else ifeq ($(BR2_powerpc),y) +LJSYSCALL_ARCH = ppc +else ifeq ($(BR2_arm)$(BR2_armeb),y) +LJSYSCALL_ARCH = arm +else ifeq ($(BR2_aarch64),y) +LJSYSCALL_ARCH = arm64 +else ifeq ($(BR2_mips)$(BR2_mipsel),y) +LJSYSCALL_ARCH = mips +else +LJSYSCALL_ARCH = $(BR2_ARCH) +endif + +LJSYSCALL_TARGET_DIR = $(TARGET_DIR)/usr/share/lua/$(LUAINTERPRETER_ABIVER) + +define LJSYSCALL_INSTALL_TARGET_CMDS + $(INSTALL) -d $(LJSYSCALL_TARGET_DIR)/syscall + $(INSTALL) -m 0644 -t $(LJSYSCALL_TARGET_DIR)/ $(@D)/syscall.lua + $(INSTALL) -m 0644 -t $(LJSYSCALL_TARGET_DIR)/syscall $(@D)/syscall/*.lua + + $(INSTALL) -d $(LJSYSCALL_TARGET_DIR)/syscall/linux/$(LJSYSCALL_ARCH) + $(INSTALL) -m 0644 -t $(LJSYSCALL_TARGET_DIR)/syscall/linux/ $(@D)/syscall/linux/*.lua + $(INSTALL) -m 0644 -t $(LJSYSCALL_TARGET_DIR)/syscall/linux/$(LJSYSCALL_ARCH) $(@D)/syscall/linux/$(LJSYSCALL_ARCH)/*.lua + + $(INSTALL) -d $(LJSYSCALL_TARGET_DIR)/syscall/shared + $(INSTALL) -m 0644 -t $(LJSYSCALL_TARGET_DIR)/syscall/shared/ $(@D)/syscall/shared/*.lua +endef + +$(eval $(generic-package)) diff --git a/package/lksctp-tools/Config.in b/package/lksctp-tools/Config.in new file mode 100644 index 00000000..9c95ef5e --- /dev/null +++ b/package/lksctp-tools/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_LKSCTP_TOOLS + bool "lksctp-tools" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS # dlopen() + help + The lksctp-tools project provides a Linux user space library + for SCTP (libsctp) including C language header files + (netinet/sctp.h) for accessing SCTP specific application + programming interfaces not provided by the standard sockets, + and also some helper utilities around SCTP. + + http://lksctp.sourceforge.net/ + +comment "lksctp-tools needs a toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/lksctp-tools/lksctp-tools.hash b/package/lksctp-tools/lksctp-tools.hash new file mode 100644 index 00000000..7c8ef604 --- /dev/null +++ b/package/lksctp-tools/lksctp-tools.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/lksctp/files/lksctp-tools/ +md5 68e9b8fa4d4e331029b247b72d46d7a5 lksctp-tools-1.0.17.tar.gz +sha1 941b0b5c39e364a971f514bba66120435660e518 lksctp-tools-1.0.17.tar.gz +# Locally computed +sha256 dee5f35e583183abb9212938643ecb2d858fd89e2e286f4b1d903f65d49d6c76 COPYING.lib +sha256 cc2a6651c315b233ebc110b49ea3c6452eff9a28f8bc051ffd2bb92a8dcfa3d2 COPYING diff --git a/package/lksctp-tools/lksctp-tools.mk b/package/lksctp-tools/lksctp-tools.mk new file mode 100644 index 00000000..5ac794e8 --- /dev/null +++ b/package/lksctp-tools/lksctp-tools.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# lksctp-tools +# +################################################################################ + +LKSCTP_TOOLS_VERSION = 1.0.17 +LKSCTP_TOOLS_SITE = http://downloads.sourceforge.net/project/lksctp/lksctp-tools +LKSCTP_TOOLS_INSTALL_STAGING = YES +# configure not shipped +LKSCTP_TOOLS_AUTORECONF = YES +LKSCTP_TOOLS_LICENSE = LGPL-2.1 (library), GPL-2.0+ (programs) +LKSCTP_TOOLS_LICENSE_FILES = COPYING.lib COPYING +LKSCTP_TOOLS_CONF_OPTS = --disable-tests + +# Cleanup installed target source code +define LKSCTP_TOOLS_CLEANUP_TARGET + rm -rf $(TARGET_DIR)/usr/share/lksctp-tools +endef +LKSCTP_TOOLS_POST_INSTALL_TARGET_HOOKS += LKSCTP_TOOLS_CLEANUP_TARGET + +$(eval $(autotools-package)) diff --git a/package/lld/Config.in.host b/package/lld/Config.in.host new file mode 100644 index 00000000..f016f344 --- /dev/null +++ b/package/lld/Config.in.host @@ -0,0 +1,10 @@ +config BR2_PACKAGE_HOST_LLD + bool "host lld" + depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS # llvm + help + LLD is a linker from the LLVM project that is a drop-in + replacement for system linkers, and runs much faster than + them. It also provides features that are useful for + toolchain developers. + + https://lld.llvm.org/ diff --git a/package/lld/lld.hash b/package/lld/lld.hash new file mode 100644 index 00000000..2144cc56 --- /dev/null +++ b/package/lld/lld.hash @@ -0,0 +1,3 @@ +# locally calculated +sha256 86262bad3e2fd784ba8c5e2158d7aa36f12b85f2515e95bc81d65d75bb9b0c82 lld-9.0.1.src.tar.xz +sha256 f7891568956e34643eb6a0db1462db30820d40d7266e2a78063f2fe233ece5a0 LICENSE.TXT diff --git a/package/lld/lld.mk b/package/lld/lld.mk new file mode 100644 index 00000000..cd1a03c1 --- /dev/null +++ b/package/lld/lld.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# lld +# +################################################################################ + +# LLVM, Clang and lld should be version bumped together +LLD_VERSION = 9.0.1 +LLD_SITE = https://github.com/llvm/llvm-project/releases/download/llvmorg-$(LLD_VERSION) +LLD_SOURCE = lld-$(LLD_VERSION).src.tar.xz +LLD_LICENSE = Apache-2.0 with exceptions +LLD_LICENSE_FILES = LICENSE.TXT +LLD_SUPPORTS_IN_SOURCE_BUILD = NO +HOST_LLD_DEPENDENCIES = host-llvm + +# LLVM > 9.0 will soon require C++14 support, building llvm <= 9.0 using a +# toolchain using gcc < 5.1 gives an error but actually still works. Setting +# this option makes it still build with gcc >= 4.8. +# https://reviews.llvm.org/D57264 +HOST_LLD_CONF_OPTS += -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON + +# build as static libs as is done in llvm & clang +HOST_LLD_CONF_OPTS += -DBUILD_SHARED_LIBS=OFF + +# GCC looks for tools in a different path from LLD's default installation path +define HOST_LLD_CREATE_SYMLINKS + mkdir -p $(HOST_DIR)/$(GNU_TARGET_NAME)/bin + ln -sf $(HOST_DIR)/bin/lld $(HOST_DIR)/$(GNU_TARGET_NAME)/bin/lld + ln -sf $(HOST_DIR)/bin/lld $(HOST_DIR)/$(GNU_TARGET_NAME)/bin/ld.lld +endef + +HOST_LLD_POST_INSTALL_HOOKS += HOST_LLD_CREATE_SYMLINKS + +$(eval $(host-cmake-package)) diff --git a/package/lldpd/Config.in b/package/lldpd/Config.in new file mode 100644 index 00000000..9a9517b5 --- /dev/null +++ b/package/lldpd/Config.in @@ -0,0 +1,73 @@ +config BR2_PACKAGE_LLDPD + bool "lldpd" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBEVENT + help + lldpd is a 802.1ab implementation (LLDP) to help you locate + neighbors of all your equipments. + + LLDP allows you to know exactly on which port is a server + (and reciprocally). + + LLDP is an industry standard protocol designed to supplant + proprietary Link-Layer protocols such as EDP or CDP. The + goal of LLDP is to provide an inter-vendor compatible + mechanism to deliver Link-Layer notifications to adjacent + network devices. + + lldpd is an ISC-licensed implementation of LLDP for various + Unixes. It also supports some proprietary protocols. + + https://vincentbernat.github.io/lldpd/ + +if BR2_PACKAGE_LLDPD + +config BR2_PACKAGE_LLDPD_CDP + bool "CDP" + default y + help + Enable Cisco Discovery Protocol + +config BR2_PACKAGE_LLDPD_FDP + bool "FDP" + default y + help + Enable Foundry Discovery Protocol + +config BR2_PACKAGE_LLDPD_EDP + bool "EDP" + default y + help + Enable Extreme Discovery Protocol + +config BR2_PACKAGE_LLDPD_SONMP + bool "SONMP" + default y + help + Enable SynOptics Network Management + +config BR2_PACKAGE_LLDPD_LLDPMED + bool "LLDP-MED" + default y + help + Enable LLDP-MED extension + +config BR2_PACKAGE_LLDPD_DOT1 + bool "DOT1" + default y + help + Enable Dot1 extension (VLAN stuff) + +config BR2_PACKAGE_LLDPD_DOT3 + bool "DOT3" + default y + help + Enable Dot3 extension (PHY stuff) + +config BR2_PACKAGE_LLDPD_CUSTOM_TLV + bool "Custom TLV" + default y + help + Enable Custom TLV support + +endif diff --git a/package/lldpd/S60lldpd b/package/lldpd/S60lldpd new file mode 100644 index 00000000..3dfa6c1a --- /dev/null +++ b/package/lldpd/S60lldpd @@ -0,0 +1,25 @@ +#!/bin/sh +# +# Controls lldpd. +# + +case $1 in + start) + printf "Starting lldpd: " + start-stop-daemon -S -q -p /var/run/lldpd.pid --exec /usr/sbin/lldpd + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + stop) + printf "Stopping lldpd: " + start-stop-daemon -K -q -p /var/run/lldpd.pid + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + restart) + $0 stop + $0 start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 + ;; +esac diff --git a/package/lldpd/lldpd.hash b/package/lldpd/lldpd.hash new file mode 100644 index 00000000..6e809b27 --- /dev/null +++ b/package/lldpd/lldpd.hash @@ -0,0 +1,5 @@ +# Locally computed after checking gpg key +# https://media.luffy.cx/files/lldpd/lldpd-1.0.9.tar.gz.gpg +# using key AEF2348766F371C689A7360095A42FE8353525F9 +sha256 6b64eb3125952b1e33472198b054e8aa0dee45f45d3d4be22789090a474949f5 lldpd-1.0.9.tar.gz +sha256 0e96a5aea65f16e2239231ce4ab90497f8bc3bb8fe6abe9299aade4726ff7c8d LICENSE diff --git a/package/lldpd/lldpd.mk b/package/lldpd/lldpd.mk new file mode 100644 index 00000000..b88dd002 --- /dev/null +++ b/package/lldpd/lldpd.mk @@ -0,0 +1,69 @@ +################################################################################ +# +# lldpd +# +################################################################################ + +LLDPD_VERSION = 1.0.9 +LLDPD_SITE = https://media.luffy.cx/files/lldpd +LLDPD_DEPENDENCIES = \ + $(if $(BR2_PACKAGE_CHECK),check) \ + host-pkgconf \ + $(if $(BR2_PACKAGE_LIBCAP),libcap) \ + libevent \ + $(if $(BR2_PACKAGE_VALGRIND),valgrind) +LLDPD_LICENSE = ISC +LLDPD_LICENSE_FILES = LICENSE +LLDPD_CPE_ID_VENDOR = lldpd_project + +# Detection of c99 support in configure fails without WCHAR. To enable +# automatic detection of c99 support by configure, we need to enable +# WCHAR in toolchain. But actually we do not need WCHAR at lldpd +# runtime. So requesting WCHAR in toolchain just for automatic detection +# will be overkill. To solve this, explicitly -specify c99 here. +LLDPD_CONF_ENV = ac_cv_prog_cc_c99=-std=gnu99 + +LLDPD_CONF_OPTS = \ + --without-embedded-libevent \ + --without-seccomp \ + --without-libbsd \ + --disable-hardening \ + --disable-privsep \ + $(if $(BR2_PACKAGE_LLDPD_CDP),--enable-cdp,--disable-cdp) \ + $(if $(BR2_PACKAGE_LLDPD_FDP),--enable-fdp,--disable-fdp) \ + $(if $(BR2_PACKAGE_LLDPD_EDP),--enable-edp,--disable-edp) \ + $(if $(BR2_PACKAGE_LLDPD_SONMP),--enable-sonmp,--disable-sonmp) \ + $(if $(BR2_PACKAGE_LLDPD_LLDPMED),--enable-lldpmed,--disable-lldpmed) \ + $(if $(BR2_PACKAGE_LLDPD_DOT1),--enable-dot1,--disable-dot1) \ + $(if $(BR2_PACKAGE_LLDPD_DOT3),--enable-dot3,--disable-dot3) \ + $(if $(BR2_PACKAGE_LLDPD_CUSTOM_TLV),--enable-custom,--disable-custom) + +ifeq ($(BR2_PACKAGE_LIBXML2),y) +LLDPD_CONF_OPTS += --with-xml +LLDPD_DEPENDENCIES += libxml2 +else +LLDPD_CONF_OPTS += --without-xml +endif + +ifeq ($(BR2_PACKAGE_NETSNMP),y) +LLDPD_CONF_OPTS += --with-snmp +LLDPD_DEPENDENCIES += netsnmp +LLDPD_CONF_ENV += \ + ac_cv_path_NETSNMP_CONFIG=$(STAGING_DIR)/usr/bin/net-snmp-config +else +LLDPD_CONF_OPTS += --without-snmp +endif + +ifeq ($(BR2_PACKAGE_READLINE),y) +LLDPD_CONF_OPTS += --with-readline +LLDPD_DEPENDENCIES += readline +else +LLDPD_CONF_OPTS += --without-readline +endif + +define LLDPD_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/lldpd/S60lldpd \ + $(TARGET_DIR)/etc/init.d/S60lldpd +endef + +$(eval $(autotools-package)) diff --git a/package/llvm/0001-nfc-Fix-missing-include.patch b/package/llvm/0001-nfc-Fix-missing-include.patch new file mode 100644 index 00000000..62111ca1 --- /dev/null +++ b/package/llvm/0001-nfc-Fix-missing-include.patch @@ -0,0 +1,24 @@ +From b498303066a63a203d24f739b2d2e0e56dca70d1 Mon Sep 17 00:00:00 2001 +From: serge-sans-paille +Date: Tue, 10 Nov 2020 14:55:25 +0100 +Subject: [PATCH] [nfc] Fix missing include + +[Retrieved (and backported) from: +https://github.com/llvm/llvm-project/commit/b498303066a63a203d24f739b2d2e0e56dca70d1] +Signed-off-by: Fabrice Fontaine +--- + llvm/utils/benchmark/src/benchmark_register.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/utils/benchmark/src/benchmark_register.h b/utils/benchmark/src/benchmark_register.h +index 0705e219f2fa2..4caa5ad4da079 100644 +--- a/utils/benchmark/src/benchmark_register.h ++++ b/utils/benchmark/src/benchmark_register.h +@@ -1,6 +1,7 @@ + #ifndef BENCHMARK_REGISTER_H + #define BENCHMARK_REGISTER_H + ++#include + #include + + #include "check.h" diff --git a/package/llvm/Config.in b/package/llvm/Config.in new file mode 100644 index 00000000..1d21d879 --- /dev/null +++ b/package/llvm/Config.in @@ -0,0 +1,60 @@ +config BR2_PACKAGE_LLVM_ARCH_SUPPORTS + bool + default y if BR2_i386 + default y if BR2_x86_64 + default y if BR2_aarch64 + default y if BR2_arm || BR2_armeb + +config BR2_PACKAGE_LLVM_TARGET_ARCH + string + default "AArch64" if BR2_aarch64 + default "ARM" if BR2_arm || BR2_armeb + default "X86" if BR2_i386 || BR2_x86_64 + +config BR2_PACKAGE_LLVM + bool "llvm" + depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # std::shared_future + depends on !BR2_STATIC_LIBS + depends on BR2_USE_WCHAR # std::wstring + help + The LLVM Project is a collection of modular and reusable + compiler and toolchain technologies. + + http://llvm.org + +if BR2_PACKAGE_LLVM + +config BR2_PACKAGE_LLVM_AMDGPU + bool "AMDGPU backend" + help + Build AMDGPU target. Select this option if you are going + to install mesa3d with llvm and use Gallium Radeon driver. + +config BR2_PACKAGE_LLVM_RTTI + bool "enable rtti" + help + Build LLVM with run-time type information. LLVM can be built + without rtti, but turning it off changes the ABI of C++ + programs. + + This features is needed to build the Gallium Nouveau driver + or the Clover OpenCL state tracker when llvm support is + enabled. + + https://llvm.org/docs/HowToSetUpLLVMStyleRTTI.html + +endif + +comment "llvm needs a toolchain w/ wchar, threads, C++, gcc >= 4.8, dynamic library" + depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 \ + || BR2_STATIC_LIBS || !BR2_USE_WCHAR + +comment "llvm needs a toolchain not affected by GCC bug 64735" + depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 diff --git a/package/llvm/llvm.hash b/package/llvm/llvm.hash new file mode 100644 index 00000000..6bf27557 --- /dev/null +++ b/package/llvm/llvm.hash @@ -0,0 +1,3 @@ +# locally calculated +sha256 00a1ee1f389f81e9979f3a640a01c431b3021de0d42278f6508391a2f0b81c9a llvm-9.0.1.src.tar.xz +sha256 8d85c1057d742e597985c7d4e6320b015a9139385cff4cbae06ffc0ebe89afee LICENSE.TXT diff --git a/package/llvm/llvm.mk b/package/llvm/llvm.mk new file mode 100644 index 00000000..7d60fe7f --- /dev/null +++ b/package/llvm/llvm.mk @@ -0,0 +1,298 @@ +################################################################################ +# +# llvm +# +################################################################################ + +# LLVM, Clang and lld should be version bumped together +LLVM_VERSION = 9.0.1 +LLVM_SITE = https://github.com/llvm/llvm-project/releases/download/llvmorg-$(LLVM_VERSION) +LLVM_SOURCE = llvm-$(LLVM_VERSION).src.tar.xz +LLVM_LICENSE = Apache-2.0 with exceptions +LLVM_LICENSE_FILES = LICENSE.TXT +LLVM_CPE_ID_VENDOR = llvm +LLVM_SUPPORTS_IN_SOURCE_BUILD = NO +LLVM_INSTALL_STAGING = YES + +# LLVM >= 9.0 can use python3 to build. +HOST_LLVM_DEPENDENCIES = host-python3 +LLVM_DEPENDENCIES = host-llvm + +# LLVM >= 9.0 will soon require C++14 support, building llvm 8.x using a +# toolchain using gcc < 5.1 gives an error but actually still works. Setting +# this option makes it still build with gcc >= 4.8. +# https://reviews.llvm.org/D57264 +HOST_LLVM_CONF_OPTS += -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON +LLVM_CONF_OPTS += -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON + +# Don't build clang libcxx libcxxabi lldb compiler-rt lld polly as llvm subprojects +# This flag assumes that projects are checked out side-by-side and not nested +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_PROJECTS="" +LLVM_CONF_OPTS += -DLLVM_ENABLE_PROJECTS="" + +HOST_LLVM_CONF_OPTS += -DLLVM_CCACHE_BUILD=$(if $(BR2_CCACHE),ON,OFF) +LLVM_CONF_OPTS += -DLLVM_CCACHE_BUILD=$(if $(BR2_CCACHE),ON,OFF) + +# This option prevents AddLLVM.cmake from adding $ORIGIN/../lib to +# binaries. Otherwise, llvm-config (host variant installed in STAGING) +# will try to use target's libc. +HOST_LLVM_CONF_OPTS += -DCMAKE_INSTALL_RPATH="$(HOST_DIR)/lib" + +# Get target architecture +LLVM_TARGET_ARCH = $(call qstrip,$(BR2_PACKAGE_LLVM_TARGET_ARCH)) + +# Build backend for target architecture. This include backends like AMDGPU. +LLVM_TARGETS_TO_BUILD = $(LLVM_TARGET_ARCH) +HOST_LLVM_CONF_OPTS += -DLLVM_TARGETS_TO_BUILD="$(subst $(space),;,$(LLVM_TARGETS_TO_BUILD))" +LLVM_CONF_OPTS += -DLLVM_TARGETS_TO_BUILD="$(subst $(space),;,$(LLVM_TARGETS_TO_BUILD))" + +# LLVM target to use for native code generation. This is required for JIT generation. +# It must be set to LLVM_TARGET_ARCH for host and target, otherwise we get +# "No available targets are compatible for this triple" with llvmpipe when host +# and target architectures are different. +HOST_LLVM_CONF_OPTS += -DLLVM_TARGET_ARCH=$(LLVM_TARGET_ARCH) +LLVM_CONF_OPTS += -DLLVM_TARGET_ARCH=$(LLVM_TARGET_ARCH) + +# Build AMDGPU backend +# We need to build AMDGPU backend for both host and target because +# llvm-config --targets built (host variant installed in STAGING) will +# output only $(LLVM_TARGET_ARCH) if not, and mesa3d won't build as +# it thinks AMDGPU backend is not installed on the target. +ifeq ($(BR2_PACKAGE_LLVM_AMDGPU),y) +LLVM_TARGETS_TO_BUILD += AMDGPU +endif + +# Use native llvm-tblgen from host-llvm (needed for cross-compilation) +LLVM_CONF_OPTS += -DLLVM_TABLEGEN=$(HOST_DIR)/bin/llvm-tblgen + +# Use native llvm-config from host-llvm (needed for cross-compilation) +LLVM_CONF_OPTS += -DLLVM_CONFIG_PATH=$(HOST_DIR)/bin/llvm-config + +# BUILD_SHARED_LIBS has a misleading name. It is in fact an option for +# LLVM developers to build all LLVM libraries as separate shared libraries. +# For normal use of LLVM, it is recommended to build a single +# shared library, which is achieved by BUILD_SHARED_LIBS=OFF and +# LLVM_BUILD_LLVM_DYLIB=ON. +HOST_LLVM_CONF_OPTS += -DBUILD_SHARED_LIBS=OFF +LLVM_CONF_OPTS += -DBUILD_SHARED_LIBS=OFF + +# Generate libLLVM.so. This library contains a default set of LLVM components +# that can be overwritten with "LLVM_DYLIB_COMPONENTS". The default contains +# most of LLVM and is defined in "tools/llvm-shlib/CMakelists.txt". +HOST_LLVM_CONF_OPTS += -DLLVM_BUILD_LLVM_DYLIB=ON +LLVM_CONF_OPTS += -DLLVM_BUILD_LLVM_DYLIB=ON + +# LLVM_BUILD_LLVM_DYLIB to ON. We need to enable this option for the +# host as llvm-config for the host will be used in STAGING_DIR by packages +# linking against libLLVM and if this option is not selected, then llvm-config +# does not work properly. For example, it assumes that LLVM is built statically +# and cannot find libLLVM.so. +HOST_LLVM_CONF_OPTS += -DLLVM_LINK_LLVM_DYLIB=ON +LLVM_CONF_OPTS += -DLLVM_LINK_LLVM_DYLIB=ON + +LLVM_CONF_OPTS += -DCMAKE_CROSSCOMPILING=1 + +# Disabled for the host since no host-libedit. +# Fall back to "Simple fgets-based implementation" of llvm line editor. +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBEDIT=OFF +LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBEDIT=OFF + +# We want to install llvm libraries and modules. +HOST_LLVM_CONF_OPTS += -DLLVM_INSTALL_TOOLCHAIN_ONLY=OFF +LLVM_CONF_OPTS += -DLLVM_INSTALL_TOOLCHAIN_ONLY=OFF + +# We build from a release archive without vcs files. +HOST_LLVM_CONF_OPTS += -DLLVM_APPEND_VC_REV=OFF +LLVM_CONF_OPTS += -DLLVM_APPEND_VC_REV=OFF + +# No backtrace package in Buildroot. +# https://documentation.backtrace.io +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_BACKTRACES=OFF +LLVM_CONF_OPTS += -DLLVM_ENABLE_BACKTRACES=OFF + +# Enable signal handlers overrides support. +HOST_LLVM_CONF_OPTS += -DENABLE_CRASH_OVERRIDES=ON +LLVM_CONF_OPTS += -DENABLE_CRASH_OVERRIDES=ON + +# Disable ffi for now. +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_FFI=OFF +LLVM_CONF_OPTS += -DLLVM_ENABLE_FFI=OFF + +# Disable terminfo database (needs ncurses libtinfo.so) +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_TERMINFO=OFF +LLVM_CONF_OPTS += -DLLVM_ENABLE_TERMINFO=OFF + +# Enable thread support +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_THREADS=ON +LLVM_CONF_OPTS += -DLLVM_ENABLE_THREADS=ON + +# Enable optional host-zlib support for LLVM Machine Code (llvm-mc) to add +# compression/uncompression capabilities. +# Not needed on the target. +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_ZLIB=ON +HOST_LLVM_DEPENDENCIES += host-zlib +LLVM_CONF_OPTS += -DLLVM_ENABLE_ZLIB=OFF + +# libxml2 can be disabled as it is used for LLVM Windows builds where COFF +# files include manifest info +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBXML2=OFF +LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBXML2=OFF + +# Disable optional Z3Prover since there is no such package in Buildroot. +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_Z3_SOLVER=OFF +LLVM_CONF_OPTS += -DLLVM_ENABLE_Z3_SOLVER=OFF + +# We don't use llvm for static only build, so enable PIC +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_PIC=ON +LLVM_CONF_OPTS += -DLLVM_ENABLE_PIC=ON + +# Default is Debug build, which requires considerably more disk space and +# build time. Release build is selected for host and target because the linker +# can run out of memory in Debug mode. +HOST_LLVM_CONF_OPTS += -DCMAKE_BUILD_TYPE=Release +LLVM_CONF_OPTS += -DCMAKE_BUILD_TYPE=Release + +# Disable C++1y (ISO C++ 2014 standard) +# Disable C++1z (ISO C++ 2017 standard) +# Compile llvm with the C++11 (ISO C++ 2011 standard) which is the fallback. +HOST_LLVM_CONF_OPTS += \ + -DLLVM_ENABLE_CXX1Y=OFF \ + -DLLVM_ENABLE_CXX1Z=OFF +LLVM_CONF_OPTS += \ + -DLLVM_ENABLE_CXX1Y=OFF \ + -DLLVM_ENABLE_CXX1Z=OFF + +# Disabled, requires sys/ndir.h header +# Disable debug in module +HOST_LLVM_CONF_OPTS += \ + -DLLVM_ENABLE_MODULES=OFF \ + -DLLVM_ENABLE_MODULE_DEBUGGING=OFF +LLVM_CONF_OPTS += \ + -DLLVM_ENABLE_MODULES=OFF \ + -DLLVM_ENABLE_MODULE_DEBUGGING=OFF + +# Don't change the standard library to libc++. +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBCXX=OFF +LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBCXX=OFF + +# Don't use lld as a linker. +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_LLD=OFF +LLVM_CONF_OPTS += -DLLVM_ENABLE_LLD=OFF + +# Generate code for the target. LLVM selects a target by looking at the +# toolchain tuple +HOST_LLVM_CONF_OPTS += -DLLVM_DEFAULT_TARGET_TRIPLE=$(GNU_TARGET_NAME) +LLVM_CONF_OPTS += -DLLVM_DEFAULT_TARGET_TRIPLE=$(GNU_TARGET_NAME) + +# LLVM_HOST_TRIPLE has a misleading name, it is in fact the triple of the +# system where llvm is going to run on. We need to specify triple for native +# code generation on the target. +# This solves "No available targets are compatible for this triple" with llvmpipe +LLVM_CONF_OPTS += -DLLVM_HOST_TRIPLE=$(GNU_TARGET_NAME) + +# Building the Go and OCaml bindings is yet unsupported. +HOST_LLVM_CONF_OPTS += \ + -DLLVM_ENABLE_BINDINGS=OFF + +# Builds a release host tablegen that gets used during the LLVM build. +HOST_LLVM_CONF_OPTS += -DLLVM_OPTIMIZED_TABLEGEN=ON + +# Keep llvm utility binaries for the host. llvm-tblgen is built anyway as +# CMakeLists.txt has add_subdirectory(utils/TableGen) unconditionally. +HOST_LLVM_CONF_OPTS += \ + -DLLVM_BUILD_UTILS=ON \ + -DLLVM_INCLUDE_UTILS=ON \ + -DLLVM_INSTALL_UTILS=ON +LLVM_CONF_OPTS += \ + -DLLVM_BUILD_UTILS=OFF \ + -DLLVM_INCLUDE_UTILS=OFF \ + -DLLVM_INSTALL_UTILS=OFF + +HOST_LLVM_CONF_OPTS += \ + -DLLVM_INCLUDE_TOOLS=ON \ + -DLLVM_BUILD_TOOLS=ON + +# We need to activate LLVM_INCLUDE_TOOLS, otherwise it does not generate +# libLLVM.so +LLVM_CONF_OPTS += \ + -DLLVM_INCLUDE_TOOLS=ON \ + -DLLVM_BUILD_TOOLS=OFF + +ifeq ($(BR2_PACKAGE_LLVM_RTTI),y) +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_RTTI=ON +LLVM_CONF_OPTS += -DLLVM_ENABLE_RTTI=ON +else +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_RTTI=OFF +LLVM_CONF_OPTS += -DLLVM_ENABLE_RTTI=OFF +endif + +# Compiler-rt not in the source tree. +# llvm runtime libraries are not in the source tree. +# Polly is not in the source tree. +HOST_LLVM_CONF_OPTS += \ + -DLLVM_BUILD_EXTERNAL_COMPILER_RT=OFF \ + -DLLVM_BUILD_RUNTIME=OFF \ + -DLLVM_INCLUDE_RUNTIMES=OFF \ + -DLLVM_POLLY_BUILD=OFF +LLVM_CONF_OPTS += \ + -DLLVM_BUILD_EXTERNAL_COMPILER_RT=OFF \ + -DLLVM_BUILD_RUNTIME=OFF \ + -DLLVM_INCLUDE_RUNTIMES=OFF \ + -DLLVM_POLLY_BUILD=OFF + +HOST_LLVM_CONF_OPTS += \ + -DLLVM_ENABLE_WARNINGS=ON \ + -DLLVM_ENABLE_PEDANTIC=ON \ + -DLLVM_ENABLE_WERROR=OFF +LLVM_CONF_OPTS += \ + -DLLVM_ENABLE_WARNINGS=ON \ + -DLLVM_ENABLE_PEDANTIC=ON \ + -DLLVM_ENABLE_WERROR=OFF + +HOST_LLVM_CONF_OPTS += \ + -DLLVM_BUILD_EXAMPLES=OFF \ + -DLLVM_BUILD_DOCS=OFF \ + -DLLVM_BUILD_TESTS=OFF \ + -DLLVM_ENABLE_DOXYGEN=OFF \ + -DLLVM_ENABLE_OCAMLDOC=OFF \ + -DLLVM_ENABLE_SPHINX=OFF \ + -DLLVM_INCLUDE_EXAMPLES=OFF \ + -DLLVM_INCLUDE_DOCS=OFF \ + -DLLVM_INCLUDE_GO_TESTS=OFF \ + -DLLVM_INCLUDE_TESTS=OFF +LLVM_CONF_OPTS += \ + -DLLVM_BUILD_EXAMPLES=OFF \ + -DLLVM_BUILD_DOCS=OFF \ + -DLLVM_BUILD_TESTS=OFF \ + -DLLVM_ENABLE_DOXYGEN=OFF \ + -DLLVM_ENABLE_OCAMLDOC=OFF \ + -DLLVM_ENABLE_SPHINX=OFF \ + -DLLVM_INCLUDE_EXAMPLES=OFF \ + -DLLVM_INCLUDE_DOCS=OFF \ + -DLLVM_INCLUDE_GO_TESTS=OFF \ + -DLLVM_INCLUDE_TESTS=OFF + +# Copy llvm-config (host variant) to STAGING_DIR +# llvm-config (host variant) returns include and lib directories +# for the host if it's installed in host/bin: +# output/host/bin/llvm-config --includedir +# output/host/include +# When installed in STAGING_DIR, llvm-config returns include and lib +# directories from STAGING_DIR. +# output/staging/usr/bin/llvm-config --includedir +# output/staging/usr/include +define HOST_LLVM_COPY_LLVM_CONFIG_TO_STAGING_DIR + $(INSTALL) -D -m 0755 $(HOST_DIR)/bin/llvm-config \ + $(STAGING_DIR)/usr/bin/llvm-config +endef +HOST_LLVM_POST_INSTALL_HOOKS = HOST_LLVM_COPY_LLVM_CONFIG_TO_STAGING_DIR + +# By default llvm-tblgen is built and installed on the target but it is +# not necessary. Also erase LLVMHello.so from /usr/lib +define LLVM_DELETE_LLVM_TBLGEN_TARGET + rm -f $(TARGET_DIR)/usr/bin/llvm-tblgen $(TARGET_DIR)/usr/lib/LLVMHello.so +endef +LLVM_POST_INSTALL_TARGET_HOOKS = LLVM_DELETE_LLVM_TBLGEN_TARGET + +$(eval $(cmake-package)) +$(eval $(host-cmake-package)) diff --git a/package/lm-sensors/0001-static-build.patch b/package/lm-sensors/0001-static-build.patch new file mode 100644 index 00000000..63edd44f --- /dev/null +++ b/package/lm-sensors/0001-static-build.patch @@ -0,0 +1,81 @@ +Add support for static only build + +This patch adds support for a BUILD_SHARED_LIB variable that allows to +enable/disable the build of the shared library, in order to support +static-only builds. + +Signed-off-by: Thomas Petazzoni + +Index: b/Makefile +=================================================================== +--- a/Makefile ++++ b/Makefile +@@ -85,6 +85,9 @@ + # Build and install static library + BUILD_STATIC_LIB := 1 + ++# Build and install shared library ++BUILD_SHARED_LIB := 1 ++ + # Set these to add preprocessor or compiler flags, or use + # environment variables + # CFLAGS := +Index: b/lib/Module.mk +=================================================================== +--- a/lib/Module.mk ++++ b/lib/Module.mk +@@ -43,8 +43,14 @@ + LIBSTLIBNAME := libsensors.a + LIBSHSONAME := libsensors.so.$(LIBMAINVER) + ++ifeq ($(BUILD_SHARED_LIB),1) + LIBTARGETS := $(MODULE_DIR)/$(LIBSHLIBNAME) \ + $(MODULE_DIR)/$(LIBSHSONAME) $(MODULE_DIR)/$(LIBSHBASENAME) ++LIBDEP_FOR_PROGS := $(LIBSHBASENAME) ++else ++LIBDEP_FOR_PROGS := $(LIBSTLIBNAME) ++endif ++ + ifeq ($(BUILD_STATIC_LIB),1) + LIBTARGETS += $(MODULE_DIR)/$(LIBSTLIBNAME) + endif +@@ -131,9 +137,11 @@ + ifeq ($(BUILD_STATIC_LIB),1) + $(INSTALL) -m 644 $(LIB_DIR)/$(LIBSTLIBNAME) $(DESTDIR)$(LIBDIR) + endif ++ifeq ($(BUILD_SHARED_LIB),1) + $(INSTALL) -m 755 $(LIB_DIR)/$(LIBSHLIBNAME) $(DESTDIR)$(LIBDIR) + $(LN) $(LIBSHLIBNAME) $(DESTDIR)$(LIBDIR)/$(LIBSHSONAME) + $(LN) $(LIBSHSONAME) $(DESTDIR)$(LIBDIR)/$(LIBSHBASENAME) ++endif + @if [ -z "$(DESTDIR)" -a "$(LIBDIR)" != "/usr/lib" -a "$(LIBDIR)" != "/lib" ] ; then \ + if [ -e "/usr/lib/$(LIBSHSONAME)" -o -e "/usr/lib/$(LIBSHBASENAME)" ] ; then \ + echo '******************************************************************************' ; \ +Index: b/prog/sensord/Module.mk +=================================================================== +--- a/prog/sensord/Module.mk ++++ b/prog/sensord/Module.mk +@@ -41,7 +41,7 @@ + REMOVESENSORDBIN := $(patsubst $(MODULE_DIR)/%,$(DESTDIR)$(SBINDIR)/%,$(PROGSENSORDTARGETS)) + REMOVESENSORDMAN := $(patsubst $(MODULE_DIR)/%,$(DESTDIR)$(PROGSENSORDMAN8DIR)/%,$(PROGSENSORDMAN8FILES)) + +-$(PROGSENSORDTARGETS): $(PROGSENSORDSOURCES:.c=.ro) lib/$(LIBSHBASENAME) ++$(PROGSENSORDTARGETS): $(PROGSENSORDSOURCES:.c=.ro) lib/$(LIBDEP_FOR_PROGS) + $(CC) $(EXLDFLAGS) -o $@ $(PROGSENSORDSOURCES:.c=.ro) -Llib -lsensors -lrrd + + all-prog-sensord: $(PROGSENSORDTARGETS) +Index: b/prog/sensors/Module.mk +=================================================================== +--- a/prog/sensors/Module.mk ++++ b/prog/sensors/Module.mk +@@ -39,8 +39,8 @@ + + LIBICONV := $(shell if /sbin/ldconfig -p | grep -q '/libiconv\.so$$' ; then echo \-liconv; else echo; fi) + +-$(PROGSENSORSTARGETS): $(PROGSENSORSSOURCES:.c=.ro) lib/$(LIBSHBASENAME) +- $(CC) $(EXLDFLAGS) -o $@ $(PROGSENSORSSOURCES:.c=.ro) $(LIBICONV) -Llib -lsensors ++$(PROGSENSORSTARGETS): $(PROGSENSORSSOURCES:.c=.ro) lib/$(LIBDEP_FOR_PROGS) ++ $(CC) $(EXLDFLAGS) -o $@ $(PROGSENSORSSOURCES:.c=.ro) $(LIBICONV) -Llib -lsensors -lm + + all-prog-sensors: $(PROGSENSORSTARGETS) + user :: all-prog-sensors diff --git a/package/lm-sensors/0002-no-host-ldconfig.patch b/package/lm-sensors/0002-no-host-ldconfig.patch new file mode 100644 index 00000000..51f7f6af --- /dev/null +++ b/package/lm-sensors/0002-no-host-ldconfig.patch @@ -0,0 +1,29 @@ +Remove usage of host ldconfig + +To know whether the libiconv library is available, lm-sensors is using +the host ldconfig, which is obviously wrong in cross-compilation. + +Moreover, the lm-sensors program making use of the iconv_*() API +already does it when __UCLIBC__ is *not* defined. In this case, the +iconv_*() functions are already part of the C library, so there is no +need to link against a separate library. Therefore, this patch simply +removes the libiconv handling. + +Signed-off-by: Thomas Petazzoni + +Index: b/prog/sensors/Module.mk +=================================================================== +--- a/prog/sensors/Module.mk ++++ b/prog/sensors/Module.mk +@@ -37,10 +37,8 @@ + REMOVESENSORSBIN := $(patsubst $(MODULE_DIR)/%,$(DESTDIR)$(BINDIR)/%,$(PROGSENSORSTARGETS)) + REMOVESENSORSMAN := $(patsubst $(MODULE_DIR)/%,$(DESTDIR)$(PROGSENSORSMAN1DIR)/%,$(PROGSENSORSMAN1FILES)) + +-LIBICONV := $(shell if /sbin/ldconfig -p | grep -q '/libiconv\.so$$' ; then echo \-liconv; else echo; fi) +- + $(PROGSENSORSTARGETS): $(PROGSENSORSSOURCES:.c=.ro) lib/$(LIBDEP_FOR_PROGS) +- $(CC) $(EXLDFLAGS) -o $@ $(PROGSENSORSSOURCES:.c=.ro) $(LIBICONV) -Llib -lsensors -lm ++ $(CC) $(EXLDFLAGS) -o $@ $(PROGSENSORSSOURCES:.c=.ro) -Llib -lsensors -lm + + all-prog-sensors: $(PROGSENSORSTARGETS) + user :: all-prog-sensors diff --git a/package/lm-sensors/Config.in b/package/lm-sensors/Config.in new file mode 100644 index 00000000..a2e02759 --- /dev/null +++ b/package/lm-sensors/Config.in @@ -0,0 +1,57 @@ +config BR2_PACKAGE_LM_SENSORS + bool "lm-sensors" + help + Lm-sensors is a hardware health monitoring package for + Linux. It allows you to access information from + temperature, voltage, and fan speed sensors. It + works with most newer systems. + + https://hwmon.wiki.kernel.org + +if BR2_PACKAGE_LM_SENSORS +comment "lm-sensors tools" + +config BR2_PACKAGE_LM_SENSORS_SENSORS + bool "sensors" + default y + help + Sensors is used to show the current readings of all sensor + chips. + +config BR2_PACKAGE_LM_SENSORS_FANCONTROL + bool "fancontrol" + help + Script for temperature driven fan control + +config BR2_PACKAGE_LM_SENSORS_ISADUMP + bool "isadump" + depends on BR2_i386 || BR2_x86_64 + help + Isadump is a small helper program to examine registers + visible through the ISA bus. + +config BR2_PACKAGE_LM_SENSORS_ISASET + bool "isaset" + depends on BR2_i386 || BR2_x86_64 + help + Isaset is a small helper program to set register visible + through the ISA bus. + +config BR2_PACKAGE_LM_SENSORS_PWMCONFIG + bool "pwmconfig" + help + Pwmconfig searches your sensors for pulse width modulation + (PWM) controls, and tests each one to see if it controls a fan + on your motherboard. + +config BR2_PACKAGE_LM_SENSORS_SENSORS_DETECT + bool "sensors-detect" + depends on BR2_PACKAGE_PERL + help + Sensors-detect is an interactive program for detecting + available hardware monitoring chips. + +comment "sensors-detect needs perl" + depends on !BR2_PACKAGE_PERL + +endif diff --git a/package/lm-sensors/lm-sensors.hash b/package/lm-sensors/lm-sensors.hash new file mode 100644 index 00000000..0ca07b7e --- /dev/null +++ b/package/lm-sensors/lm-sensors.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 0591f9fa0339f0d15e75326d0365871c2d4e2ed8aa1ff759b3a55d3734b7d197 lm-sensors-3-6-0.tar.gz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LGPL diff --git a/package/lm-sensors/lm-sensors.mk b/package/lm-sensors/lm-sensors.mk new file mode 100644 index 00000000..8975efaf --- /dev/null +++ b/package/lm-sensors/lm-sensors.mk @@ -0,0 +1,52 @@ +################################################################################ +# +# lm-sensors +# +################################################################################ + +LM_SENSORS_VERSION = 3-6-0 +LM_SENSORS_SITE = $(call github,lm-sensors,lm-sensors,V$(LM_SENSORS_VERSION)) +LM_SENSORS_INSTALL_STAGING = YES +LM_SENSORS_DEPENDENCIES = host-bison host-flex +LM_SENSORS_LICENSE = LGPL-2.1+ (libsensors), GPL-2.0+ (programs) +LM_SENSORS_LICENSE_FILES = COPYING.LGPL COPYING + +LM_SENSORS_BINS_ = bin/sensors-conf-convert +LM_SENSORS_BINS_$(BR2_PACKAGE_LM_SENSORS_SENSORS) += bin/sensors +LM_SENSORS_BINS_$(BR2_PACKAGE_LM_SENSORS_FANCONTROL) += sbin/fancontrol +LM_SENSORS_BINS_$(BR2_PACKAGE_LM_SENSORS_ISADUMP) += sbin/isadump +LM_SENSORS_BINS_$(BR2_PACKAGE_LM_SENSORS_ISASET) += sbin/isaset +LM_SENSORS_BINS_$(BR2_PACKAGE_LM_SENSORS_PWMCONFIG) += sbin/pwmconfig +LM_SENSORS_BINS_$(BR2_PACKAGE_LM_SENSORS_SENSORS_DETECT) += sbin/sensors-detect + +LM_SENSORS_MAKE_OPTS = \ + $(TARGET_CONFIGURE_OPTS) \ + PREFIX=/usr + +ifeq ($(BR2_STATIC_LIBS),y) +LM_SENSORS_MAKE_OPTS += BUILD_SHARED_LIB=0 EXLDFLAGS=-static +else +LM_SENSORS_MAKE_OPTS += BUILD_SHARED_LIB=1 +endif + +ifeq ($(BR2_SHARED_LIBS),y) +LM_SENSORS_MAKE_OPTS += BUILD_STATIC_LIB=0 +else +LM_SENSORS_MAKE_OPTS += BUILD_STATIC_LIB=1 +endif + +define LM_SENSORS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(LM_SENSORS_MAKE_OPTS) -C $(@D) +endef + +define LM_SENSORS_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(LM_SENSORS_MAKE_OPTS) DESTDIR=$(STAGING_DIR) install + rm -f $(addprefix $(STAGING_DIR)/usr/,$(LM_SENSORS_BINS_) $(LM_SENSORS_BINS_y)) +endef + +define LM_SENSORS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(LM_SENSORS_MAKE_OPTS) DESTDIR=$(TARGET_DIR) install + rm -f $(addprefix $(TARGET_DIR)/usr/,$(LM_SENSORS_BINS_)) +endef + +$(eval $(generic-package)) diff --git a/package/lmbench/0001-scripts-build-use-bin-bash-as-shell.patch b/package/lmbench/0001-scripts-build-use-bin-bash-as-shell.patch new file mode 100644 index 00000000..b7e1dc64 --- /dev/null +++ b/package/lmbench/0001-scripts-build-use-bin-bash-as-shell.patch @@ -0,0 +1,28 @@ +From 02a538c2b4b54b41d23dbd7668714ea4d2016131 Mon Sep 17 00:00:00 2001 +From: Markus Mayer +Date: Thu, 13 Jun 2019 12:27:04 -0700 +Subject: [PATCH] scripts/build: use /bin/bash as shell + +scripts/build makes use of the "+=" operator which is not supported by +/bin/sh. We switch to /bin/bash in order to avoid errors of the form + + ../scripts/build: 21: ../scripts/build: LDLIBS+= -lm: not found + +Signed-off-by: Markus Mayer +--- + scripts/build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/scripts/build b/scripts/build +index 34a1371d0056..60b755cd2320 100755 +--- a/scripts/build ++++ b/scripts/build +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + + CC=${CC-`../scripts/compiler`} + MAKE=${MAKE-`../scripts/make`} +-- +2.17.1 + diff --git a/package/lmbench/0002-src-Makefile-add-lmbench-to-list-of-executables.patch b/package/lmbench/0002-src-Makefile-add-lmbench-to-list-of-executables.patch new file mode 100644 index 00000000..f5067a6b --- /dev/null +++ b/package/lmbench/0002-src-Makefile-add-lmbench-to-list-of-executables.patch @@ -0,0 +1,29 @@ +From c158a02561c64d0cd236f86db24cc20d0378eb72 Mon Sep 17 00:00:00 2001 +From: Markus Mayer +Date: Thu, 13 Jun 2019 12:28:54 -0700 +Subject: [PATCH] src/Makefile: add lmbench to list of executables + +We want to install the lmbench script along with the other executables, +so we add it to the appropriate list. + +Signed-off-by: Markus Mayer +--- + src/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/Makefile b/src/Makefile +index 4962815b5fe7..70dbc6794898 100644 +--- a/src/Makefile ++++ b/src/Makefile +@@ -98,7 +98,7 @@ EXES = $O/bw_file_rd $O/bw_mem $O/bw_mmap_rd $O/bw_pipe $O/bw_tcp \ + $O/lat_select $O/lat_pipe $O/lat_rpc $O/lat_syscall $O/lat_tcp \ + $O/lat_udp $O/lat_mmap $O/mhz $O/lat_proc $O/lat_pagefault \ + $O/lat_connect $O/lat_fs $O/lat_sig $O/lat_mem_rd $O/lat_ctx \ +- $O/lat_sem \ ++ $O/lat_sem $O/lmbench \ + $O/memsize $O/lat_unix $O/lmdd $O/timing_o $O/enough \ + $O/msleep $O/loop_o $O/lat_fifo $O/lmhttp $O/lat_http \ + $O/lat_fcntl $O/disk $O/lat_unix_connect $O/flushdisk \ +-- +2.17.1 + diff --git a/package/lmbench/0003-TOO_LONG-100-usec-to-prevent-memsize-from-timingout-.patch b/package/lmbench/0003-TOO_LONG-100-usec-to-prevent-memsize-from-timingout-.patch new file mode 100644 index 00000000..6c3e7370 --- /dev/null +++ b/package/lmbench/0003-TOO_LONG-100-usec-to-prevent-memsize-from-timingout-.patch @@ -0,0 +1,28 @@ +From d85b61666aa2728f68b69d02bfb162c432df709f Mon Sep 17 00:00:00 2001 +From: vgupta +Date: Sat, 3 Mar 2012 10:02:24 +0000 +Subject: [PATCH] TOO_LONG 100 usec to prevent memsize from timingout @80Mhz + +git-svn-id: http://sjvm-subversion02.internal.synopsys.com/svn/OSS/ARC_Linux/tests/lmbench-3.0-a9@157318 4eed8e25-bc12-0410-818a-f70ee6866280 + +Signed-off-by: Vineet Gupta +--- + src/memsize.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/memsize.c b/src/memsize.c +index eb25a0924872..b333cf8cbd32 100644 +--- a/src/memsize.c ++++ b/src/memsize.c +@@ -15,7 +15,7 @@ char *id = "$Id$\n"; + #define CHK(x) if ((x) == -1) { perror("x"); exit(1); } + + #ifndef TOO_LONG +-#define TOO_LONG 10 /* usecs */ ++#define TOO_LONG 100 /* usecs */ + #endif + + int alarm_triggered = 0; +-- +2.25.1 + diff --git a/package/lmbench/0004-Fix-garbage-pointer-for-lat_rpc-S-localhost.patch b/package/lmbench/0004-Fix-garbage-pointer-for-lat_rpc-S-localhost.patch new file mode 100644 index 00000000..619ec386 --- /dev/null +++ b/package/lmbench/0004-Fix-garbage-pointer-for-lat_rpc-S-localhost.patch @@ -0,0 +1,25 @@ +From 3830453a06269912d2772fe8c31bae44f27bb131 Mon Sep 17 00:00:00 2001 +From: Vineet Gupta +Date: Fri, 8 May 2015 11:35:58 +0530 +Subject: [PATCH] Fix garbage pointer for lat_rpc -S localhost + +Signed-off-by: Vineet Gupta +--- + src/lat_rpc.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/lat_rpc.c b/src/lat_rpc.c +index 9c021926d761..ff4380ff38f3 100644 +--- a/src/lat_rpc.c ++++ b/src/lat_rpc.c +@@ -101,6 +101,7 @@ main(int ac, char **av) + char *usage = "-s\n OR [-p ] [-P parallel] [-W ] [-N ] serverhost\n OR -S serverhost\n"; + + state.msize = 1; ++ state.server = NULL; + + while (( c = getopt(ac, av, "sS:m:p:P:W:N:")) != EOF) { + switch(c) { +-- +2.25.1 + diff --git a/package/lmbench/Config.in b/package/lmbench/Config.in new file mode 100644 index 00000000..33778e4d --- /dev/null +++ b/package/lmbench/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_LMBENCH + bool "lmbench" + depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC || BR2_TOOLCHAIN_HAS_THREADS # libtirpc + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBTIRPC if !BR2_TOOLCHAIN_HAS_NATIVE_RPC + help + LMbench is a suite of simple, portable, + ANSI/C microbenchmarks for UNIX/POSIX. + + http://sourceforge.net/projects/lmbench/ + +comment "lmbench needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !(BR2_TOOLCHAIN_HAS_THREADS || BR2_TOOLCHAIN_HAS_NATIVE_RPC) diff --git a/package/lmbench/lmbench.hash b/package/lmbench/lmbench.hash new file mode 100644 index 00000000..25c150f4 --- /dev/null +++ b/package/lmbench/lmbench.hash @@ -0,0 +1,4 @@ +# Locally computed: +sha256 cbd5777d15f44eab7666dcac418054c3c09df99826961a397d9acf43d8a2a551 lmbench-3.0-a9.tgz +sha256 91df39d1816bfb17a4dda2d3d2c83b1f6f2d38d53e53e41e8f97ad5ac46a0cad COPYING +sha256 3be7a155efa448db90071a95fbf81796f8f90edf9204f0463cfd23402dc90a72 COPYING-2 diff --git a/package/lmbench/lmbench.mk b/package/lmbench/lmbench.mk new file mode 100644 index 00000000..2f3b19b5 --- /dev/null +++ b/package/lmbench/lmbench.mk @@ -0,0 +1,42 @@ +################################################################################ +# +# lmbench +# +################################################################################ + +LMBENCH_VERSION = 3.0-a9 +LMBENCH_SOURCE = lmbench-$(LMBENCH_VERSION).tgz +LMBENCH_SITE = http://downloads.sourceforge.net/project/lmbench/development/lmbench-$(LMBENCH_VERSION) +LMBENCH_LICENSE = lmbench license (based on GPL-2.0) +LMBENCH_LICENSE_FILES = COPYING COPYING-2 + +LMBENCH_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_PACKAGE_LIBTIRPC),y) +LMBENCH_DEPENDENCIES += host-pkgconf libtirpc +LMBENCH_CFLAGS += `$(PKG_CONFIG_HOST_BINARY) --cflags libtirpc` +LMBENCH_LDLIBS = `$(PKG_CONFIG_HOST_BINARY) --libs libtirpc` +endif + +LMBENCH_POST_PATCH_HOOKS += UPDATE_CONFIG_HOOK + +define LMBENCH_CONFIGURE_CMDS + sed -i 's/CFLAGS=/CFLAGS+=/g' $(@D)/src/Makefile + sed -i 's/LDLIBS=/LDLIBS+=/g' $(@D)/scripts/build + sed -i '/cd .*doc/d' $(@D)/src/Makefile + sed -i '/include/d' $(@D)/src/Makefile + touch $@ +endef + +# Note: there is a second stage 'make' invocation from the 'scripts/build' +# script. So the variables override below don't take direct effect in +# src/Makefile. +define LMBENCH_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) CFLAGS="$(LMBENCH_CFLAGS)" LDLIBS="$(LMBENCH_LDLIBS)" OS=$(ARCH) CC="$(TARGET_CC)" -C $(@D)/src +endef + +define LMBENCH_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) CFLAGS="$(TARGET_CFLAGS)" OS=$(ARCH) CC="$(TARGET_CC)" BASE=$(TARGET_DIR)/usr -C $(@D)/src install +endef + +$(eval $(generic-package)) diff --git a/package/localedef/2.32-37-g760e1d287825fa91d4d5a0cc921340c740d803e2/0001-HACK-only-build-and-install-localedef.patch b/package/localedef/2.32-37-g760e1d287825fa91d4d5a0cc921340c740d803e2/0001-HACK-only-build-and-install-localedef.patch new file mode 100644 index 00000000..d327008c --- /dev/null +++ b/package/localedef/2.32-37-g760e1d287825fa91d4d5a0cc921340c740d803e2/0001-HACK-only-build-and-install-localedef.patch @@ -0,0 +1,65 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Michael Olbrich +Date: Mon, 21 May 2018 16:45:02 +0200 +Subject: [PATCH] HACK: only build and install localedef + +Signed-off-by: Michael Olbrich + +Upstream: https://git.pengutronix.de/cgit/ptxdist/plain/patches/localedef-glibc-2.27/0001-HACK-only-build-and-install-localedef.patch?id=47116f66f411d4dadfce42c2fdd6d41b351ccfd4 +Signed-off-by: Peter Seiderer +--- + Rules | 14 ++++++++++---- + locale/Makefile | 6 +++--- + 2 files changed, 13 insertions(+), 7 deletions(-) + +diff --git a/Rules b/Rules +index 16afa6acaa..6c208db788 100644 +--- a/Rules ++++ b/Rules +@@ -190,10 +190,16 @@ binaries-shared-notests = $(filter-out $(binaries-pie) $(binaries-static), \ + $(binaries-all-notests)) + + ifneq "$(strip $(binaries-shared-notests))" "" +-$(addprefix $(objpfx),$(binaries-shared-notests)): %: %.o \ +- $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ +- $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) +- $(+link) ++$(addprefix $(objpfx),$(binaries-shared-notests)): %: %.o ++ $(CC) -o $@ \ ++ $(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \ ++ $(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \ ++ $(filter-out $(addprefix $(csu-objpfx),start.o \ ++ $(start-installed-name))\ ++ $(+preinit) \ ++ $(link-extra-libs) \ ++ $(common-objpfx)libc% $(+postinit),$^) \ ++ $(link-extra-libs) + endif + + ifneq "$(strip $(binaries-shared-tests))" "" +diff --git a/locale/Makefile b/locale/Makefile +index 764e751c36..c28322d71f 100644 +--- a/locale/Makefile ++++ b/locale/Makefile +@@ -32,15 +32,15 @@ categories = ctype messages monetary numeric time paper name \ + address telephone measurement identification collate + aux = $(categories:%=lc-%) $(categories:%=C-%) SYS_libc C_name \ + xlocale localename global-locale coll-lookup +-others = localedef locale ++others = localedef + #others-static = localedef locale +-install-bin = localedef locale ++install-bin = localedef + extra-objs = $(localedef-modules:=.o) $(localedef-aux:=.o) \ + $(locale-modules:=.o) $(lib-modules:=.o) + generated += C-translit.h + before-compile += $(objpfx)C-translit.h + +-extra-libs = libBrokenLocale ++#extra-libs = libBrokenLocale + extra-libs-others = $(extra-libs) + + libBrokenLocale-routines = broken_cur_max +-- +2.21.0 + diff --git a/package/localedef/2.32-37-g760e1d287825fa91d4d5a0cc921340c740d803e2/0002-relax-dependency-on-GCC-to-4.8-and-binutils-to-2.24.patch b/package/localedef/2.32-37-g760e1d287825fa91d4d5a0cc921340c740d803e2/0002-relax-dependency-on-GCC-to-4.8-and-binutils-to-2.24.patch new file mode 100644 index 00000000..a6e87cc3 --- /dev/null +++ b/package/localedef/2.32-37-g760e1d287825fa91d4d5a0cc921340c740d803e2/0002-relax-dependency-on-GCC-to-4.8-and-binutils-to-2.24.patch @@ -0,0 +1,64 @@ +From 313e04bfbd281f9b46fdde097aacb59d501820a3 Mon Sep 17 00:00:00 2001 +From: Matt Weber +Date: Thu, 6 Feb 2020 14:36:21 -0600 +Subject: [PATCH] relax dependency on GCC to 4.8 and binutils to 2.24 + +The glibc package has been updating the toolchain version +dependency since 2.28.x. The dependencies don't currently +apply to the localedef build of the package, so this +patchset relaxes the restriction such that builds can still +occur on older host machines. + +Here's a related post from 2018 for a similar patchset. +http://lists.busybox.net/pipermail/buildroot/2018-December/237949.html + +Timeline of relevant commits that adjust the dependency upstream. +GCC 4.9+ + https://sourceware.org/git/?p=glibc.git;a=commit;h=4add86749a31f302674599b69d2eea691d69341a +Binutils 2.25+ + https://sourceware.org/git/?p=glibc.git;a=commit;h=073e8fa7739ed453d6854b834f290c263a6cdb9f + https://sourceware.org/git/?p=glibc.git;a=commit;h=b4396163aa8666f970aaf43eaca25f3a92b18c1b +GCC 5+ + https://sourceware.org/git/?p=glibc.git;a=commit;h=192963be49678b48f60218f1f794991cdd9fe472 +GCC 6.2+ + https://sourceware.org/git/?p=glibc.git;a=commit;h=4dcbbc3b28aaeafe23e1a30db84055aa6f6fa987 + +Signed-off-by: Matthew Weber +--- + configure | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/configure b/configure +index 6d26b824..9ac2e5e9 100755 +--- a/configure ++++ b/configure +@@ -4601,7 +4601,7 @@ $as_echo_n "checking version of $AS... " >&6; } + ac_prog_version=`$AS --version 2>&1 | sed -n 's/^.*GNU assembler.* \([0-9]*\.[0-9.]*\).*$/\1/p'` + case $ac_prog_version in + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; +- 2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*) ++ 2.1[0-9][0-9]*|2.2[4-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*) + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; + +@@ -4731,7 +4731,7 @@ $as_echo_n "checking version of $LD... " >&6; } + ac_prog_version=`$LD --version 2>&1 | sed -n 's/^.*GNU ld.* \([0-9][0-9]*\.[0-9.]*\).*$/\1/p'` + case $ac_prog_version in + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; +- 2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*) ++ 2.1[0-9][0-9]*|2.2[4-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*) + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; + +@@ -5140,7 +5140,7 @@ int + main () + { + +-#if !defined __GNUC__ || __GNUC__ < 6 || (__GNUC__ == 6 && __GNUC_MINOR__ < 2) ++#if !defined __GNUC__ || __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8) + #error insufficient compiler + #endif + ; +-- +2.18.0 + diff --git a/package/localedef/2.32-37-g760e1d287825fa91d4d5a0cc921340c740d803e2/0003-Fix-GCC-11-Warray-parameter-warning-for-__sigsetjmp-.patch b/package/localedef/2.32-37-g760e1d287825fa91d4d5a0cc921340c740d803e2/0003-Fix-GCC-11-Warray-parameter-warning-for-__sigsetjmp-.patch new file mode 100644 index 00000000..888d27fe --- /dev/null +++ b/package/localedef/2.32-37-g760e1d287825fa91d4d5a0cc921340c740d803e2/0003-Fix-GCC-11-Warray-parameter-warning-for-__sigsetjmp-.patch @@ -0,0 +1,155 @@ +From 44f1469daff3a0bfe67fb5839243f114ace3bad8 Mon Sep 17 00:00:00 2001 +From: Joseph Myers +Date: Mon, 5 Oct 2020 16:46:46 +0000 +Subject: [PATCH 3/4] Fix GCC 11 -Warray-parameter warning for __sigsetjmp (bug + 26647) + +This patch fixes part of bug 26647 (-Werror=array-parameter error +building with GCC 11 because of __sigsetjmp being declared using an +array parameter in one header and a pointer parameter in another). + +The fix is to split the struct __jmp_buf_tag definition out to a +separate bits/types/ header so it can be included in pthread.h, so +that pthread.h can declare __sigsetjmp with the type contents visible, +so can use an array (as in setjmp.h) rather than a pointer in the +declaration. + +Note that several other build failures with GCC 11 remain. This does +not fix the jmp_buf-related -Wstringop-overflow errors (also discussed +in bug 26647), or -Warray-parameter errors for other functions (bug +26686), or -Warray-bounds errors (bug 26687). + +Tested, with older compilers, natively for x86_64 and with +build-many-glibc.py for aarch64-linux-gnu. Tested with +build-many-glibcs.py with GCC mainline for aarch64-linux-gnu that this +gets past the -Warray-parameter issue for __sigsetjmp (with the next +build failure being the other one discussed in bug 26647). + +[Upstream: https://github.com/bminor/glibc/commit/19302b27bdacfe87e861ff46fc0fbad60dd6602d.patch] +Signed-off-by: Peter Seiderer +--- + include/bits/types/struct___jmp_buf_tag.h | 1 + + setjmp/Makefile | 3 +- + setjmp/bits/types/struct___jmp_buf_tag.h | 37 +++++++++++++++++++++++ + setjmp/setjmp.h | 15 +-------- + sysdeps/nptl/pthread.h | 5 +-- + 5 files changed, 44 insertions(+), 17 deletions(-) + create mode 100644 include/bits/types/struct___jmp_buf_tag.h + create mode 100644 setjmp/bits/types/struct___jmp_buf_tag.h + +diff --git a/include/bits/types/struct___jmp_buf_tag.h b/include/bits/types/struct___jmp_buf_tag.h +new file mode 100644 +index 00000000..e3250150 +--- /dev/null ++++ b/include/bits/types/struct___jmp_buf_tag.h +@@ -0,0 +1 @@ ++#include +diff --git a/setjmp/Makefile b/setjmp/Makefile +index dcac5693..603f61d7 100644 +--- a/setjmp/Makefile ++++ b/setjmp/Makefile +@@ -22,7 +22,8 @@ subdir := setjmp + + include ../Makeconfig + +-headers := setjmp.h bits/setjmp.h bits/setjmp2.h ++headers := setjmp.h bits/setjmp.h bits/setjmp2.h \ ++ bits/types/struct___jmp_buf_tag.h + + routines := setjmp sigjmp bsd-setjmp bsd-_setjmp \ + longjmp __longjmp jmp-unwind +diff --git a/setjmp/bits/types/struct___jmp_buf_tag.h b/setjmp/bits/types/struct___jmp_buf_tag.h +new file mode 100644 +index 00000000..9d8634f1 +--- /dev/null ++++ b/setjmp/bits/types/struct___jmp_buf_tag.h +@@ -0,0 +1,37 @@ ++/* Define struct __jmp_buf_tag. ++ Copyright (C) 1991-2020 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library 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 ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#ifndef __jmp_buf_tag_defined ++#define __jmp_buf_tag_defined 1 ++ ++#include /* Get `__jmp_buf'. */ ++#include ++ ++/* Calling environment, plus possibly a saved signal mask. */ ++struct __jmp_buf_tag ++ { ++ /* NOTE: The machine-dependent definitions of `__sigsetjmp' ++ assume that a `jmp_buf' begins with a `__jmp_buf' and that ++ `__mask_was_saved' follows it. Do not move these members ++ or add others before it. */ ++ __jmp_buf __jmpbuf; /* Calling environment. */ ++ int __mask_was_saved; /* Saved the signal mask? */ ++ __sigset_t __saved_mask; /* Saved signal mask. */ ++ }; ++ ++#endif +diff --git a/setjmp/setjmp.h b/setjmp/setjmp.h +index 4e3443c3..c6c59f40 100644 +--- a/setjmp/setjmp.h ++++ b/setjmp/setjmp.h +@@ -27,20 +27,7 @@ + __BEGIN_DECLS + + #include /* Get `__jmp_buf'. */ +-#include +- +-/* Calling environment, plus possibly a saved signal mask. */ +-struct __jmp_buf_tag +- { +- /* NOTE: The machine-dependent definitions of `__sigsetjmp' +- assume that a `jmp_buf' begins with a `__jmp_buf' and that +- `__mask_was_saved' follows it. Do not move these members +- or add others before it. */ +- __jmp_buf __jmpbuf; /* Calling environment. */ +- int __mask_was_saved; /* Saved the signal mask? */ +- __sigset_t __saved_mask; /* Saved signal mask. */ +- }; +- ++#include + + typedef struct __jmp_buf_tag jmp_buf[1]; + +diff --git a/sysdeps/nptl/pthread.h b/sysdeps/nptl/pthread.h +index 8a403cbf..d4194da7 100644 +--- a/sysdeps/nptl/pthread.h ++++ b/sysdeps/nptl/pthread.h +@@ -28,6 +28,7 @@ + #include + #include + #include ++#include + + + /* Detach state. */ +@@ -730,8 +731,8 @@ extern void __pthread_unwind_next (__pthread_unwind_buf_t *__buf) + #endif + + /* Function used in the macros. */ +-struct __jmp_buf_tag; +-extern int __sigsetjmp (struct __jmp_buf_tag *__env, int __savemask) __THROWNL; ++extern int __sigsetjmp (struct __jmp_buf_tag __env[1], ++ int __savemask) __THROWNL; + + + /* Mutex handling. */ +-- +2.31.1 + diff --git a/package/localedef/2.32-37-g760e1d287825fa91d4d5a0cc921340c740d803e2/0004-Avoid-Wstringop-overflow-warning-in-pthread_cleanup_.patch b/package/localedef/2.32-37-g760e1d287825fa91d4d5a0cc921340c740d803e2/0004-Avoid-Wstringop-overflow-warning-in-pthread_cleanup_.patch new file mode 100644 index 00000000..83f3f15e --- /dev/null +++ b/package/localedef/2.32-37-g760e1d287825fa91d4d5a0cc921340c740d803e2/0004-Avoid-Wstringop-overflow-warning-in-pthread_cleanup_.patch @@ -0,0 +1,125 @@ +From ea50889c35fb73ed9e140d800303aae9148c2888 Mon Sep 17 00:00:00 2001 +From: Joseph Myers +Date: Fri, 30 Oct 2020 22:25:42 +0000 +Subject: [PATCH 4/4] Avoid -Wstringop-overflow warning in pthread_cleanup_push + macros + +GCC 11 introduces a -Wstringop-overflow warning for calls to functions +with an array argument passed as a pointer to memory not large enough +for that array. This includes the __sigsetjmp calls from +pthread_cleanup_push macros, because those use a structure in +__pthread_unwind_buf_t, which has a common initial subsequence with +jmp_buf but does not include the saved signal mask; this is OK in this +case because the second argument to __sigsetjmp is 0 so the signal +mask is not accessed. + +To avoid this warning, use a function alias __sigsetjmp_cancel with +first argument an array of exactly the type used in the calls to the +function, if using GCC 11 or later. With older compilers, continue to +use __sigsetjmp with a cast, to avoid any issues with compilers +predating the returns_twice attribute not applying the same special +handling to __sigsetjmp_cancel as to __sigsetjmp. + +Tested with build-many-glibcs.py for arm-linux-gnueabi that this fixes +the testsuite build failures. + +[Upstream: https://github.com/bminor/glibc/commit/548f467fa14ffe7d955beeb31b30e2aeae4467e0.patch] +Signed-off-by: Peter Seiderer +--- + misc/sys/cdefs.h | 8 ++++++++ + sysdeps/nptl/pthread.h | 37 +++++++++++++++++++++++++++---------- + 2 files changed, 35 insertions(+), 10 deletions(-) + +diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h +index 38221d0b..ce877487 100644 +--- a/misc/sys/cdefs.h ++++ b/misc/sys/cdefs.h +@@ -556,4 +556,12 @@ _Static_assert (0, "IEEE 128-bits long double requires redirection on this platf + # define __attr_access(x) + #endif + ++/* Specify that a function such as setjmp or vfork may return ++ twice. */ ++#if __GNUC_PREREQ (4, 1) ++# define __attribute_returns_twice__ __attribute__ ((__returns_twice__)) ++#else ++# define __attribute_returns_twice__ /* Ignore. */ ++#endif ++ + #endif /* sys/cdefs.h */ +diff --git a/sysdeps/nptl/pthread.h b/sysdeps/nptl/pthread.h +index d4194da7..3a34d823 100644 +--- a/sysdeps/nptl/pthread.h ++++ b/sysdeps/nptl/pthread.h +@@ -512,13 +512,15 @@ extern void pthread_testcancel (void); + + /* Cancellation handling with integration into exception handling. */ + ++struct __cancel_jmp_buf_tag ++{ ++ __jmp_buf __cancel_jmp_buf; ++ int __mask_was_saved; ++}; ++ + typedef struct + { +- struct +- { +- __jmp_buf __cancel_jmp_buf; +- int __mask_was_saved; +- } __cancel_jmp_buf[1]; ++ struct __cancel_jmp_buf_tag __cancel_jmp_buf[1]; + void *__pad[4]; + } __pthread_unwind_buf_t __attribute__ ((__aligned__)); + +@@ -658,8 +660,8 @@ __pthread_cleanup_routine (struct __pthread_cleanup_frame *__frame) + __pthread_unwind_buf_t __cancel_buf; \ + void (*__cancel_routine) (void *) = (routine); \ + void *__cancel_arg = (arg); \ +- int __not_first_call = __sigsetjmp ((struct __jmp_buf_tag *) (void *) \ +- __cancel_buf.__cancel_jmp_buf, 0); \ ++ int __not_first_call = __sigsetjmp_cancel (__cancel_buf.__cancel_jmp_buf, \ ++ 0); \ + if (__glibc_unlikely (__not_first_call)) \ + { \ + __cancel_routine (__cancel_arg); \ +@@ -693,8 +695,8 @@ extern void __pthread_unregister_cancel (__pthread_unwind_buf_t *__buf) + __pthread_unwind_buf_t __cancel_buf; \ + void (*__cancel_routine) (void *) = (routine); \ + void *__cancel_arg = (arg); \ +- int __not_first_call = __sigsetjmp ((struct __jmp_buf_tag *) (void *) \ +- __cancel_buf.__cancel_jmp_buf, 0); \ ++ int __not_first_call = __sigsetjmp_cancel (__cancel_buf.__cancel_jmp_buf, \ ++ 0); \ + if (__glibc_unlikely (__not_first_call)) \ + { \ + __cancel_routine (__cancel_arg); \ +@@ -730,9 +732,24 @@ extern void __pthread_unwind_next (__pthread_unwind_buf_t *__buf) + ; + #endif + +-/* Function used in the macros. */ ++/* Function used in the macros. Calling __sigsetjmp, with its first ++ argument declared as an array, results in a -Wstringop-overflow ++ warning from GCC 11 because struct pthread_unwind_buf is smaller ++ than jmp_buf. The calls from the macros have __SAVEMASK set to 0, ++ so nothing beyond the common prefix is used and this warning is a ++ false positive. Use an alias with its first argument declared to ++ use the type in the macros if possible to avoid this warning. */ ++#if __GNUC_PREREQ (11, 0) ++extern int __REDIRECT_NTHNL (__sigsetjmp_cancel, ++ (struct __cancel_jmp_buf_tag __env[1], ++ int __savemask), ++ __sigsetjmp) __attribute_returns_twice__; ++#else ++# define __sigsetjmp_cancel(env, savemask) \ ++ __sigsetjmp ((struct __jmp_buf_tag *) (void *) (env), (savemask)) + extern int __sigsetjmp (struct __jmp_buf_tag __env[1], + int __savemask) __THROWNL; ++#endif + + + /* Mutex handling. */ +-- +2.31.1 + diff --git a/package/localedef/2.32-37-g760e1d287825fa91d4d5a0cc921340c740d803e2/localedef.hash b/package/localedef/2.32-37-g760e1d287825fa91d4d5a0cc921340c740d803e2/localedef.hash new file mode 100644 index 00000000..b1d5243f --- /dev/null +++ b/package/localedef/2.32-37-g760e1d287825fa91d4d5a0cc921340c740d803e2/localedef.hash @@ -0,0 +1,7 @@ +# Locally calculated (fetched from Github) +sha256 f4710e9a435a7b83e1d23dd75434f0d36b898eba9b4249c946c32b467d852fd4 glibc-2.32-37-g760e1d287825fa91d4d5a0cc921340c740d803e2.tar.gz + +# Hashes for license files +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LIB +sha256 b33d0bd9f685b46853548814893a6135e74430d12f6d94ab3eba42fc591f83bc LICENSES diff --git a/package/localedef/localedef.hash b/package/localedef/localedef.hash new file mode 100644 index 00000000..5316f03b --- /dev/null +++ b/package/localedef/localedef.hash @@ -0,0 +1,2 @@ +# This hash file is not used; instead, update the +# hash files in the per-version sub-directories. diff --git a/package/localedef/localedef.mk b/package/localedef/localedef.mk new file mode 100644 index 00000000..57ab5a34 --- /dev/null +++ b/package/localedef/localedef.mk @@ -0,0 +1,56 @@ +################################################################################ +# +# localedef +# +################################################################################ + +# Use the same VERSION and SITE as target glibc +# As in glibc.mk, generate version string using: +# git describe --match 'glibc-*' --abbrev=40 origin/release/MAJOR.MINOR/master | cut -d '-' -f 2- +LOCALEDEF_VERSION = 2.32-37-g760e1d287825fa91d4d5a0cc921340c740d803e2 +LOCALEDEF_SOURCE = glibc-$(LOCALEDEF_VERSION).tar.gz +LOCALEDEF_SITE = $(call github,bminor,glibc,$(LOCALEDEF_VERSION)) +HOST_LOCALEDEF_DL_SUBDIR = glibc + +HOST_LOCALEDEF_DEPENDENCIES = \ + $(BR2_MAKE_HOST_DEPENDENCY) \ + $(BR2_PYTHON3_HOST_DEPENDENCY) \ + host-bison \ + host-gawk + +HOST_LOCALEDEF_CONF_ENV += ac_cv_prog_MAKE="$(BR2_MAKE)" + +# Even though we use the autotools-package infrastructure, we have to override +# the default configure commands for since we have to build out-of-tree, but we +# can't use the same 'symbolic link to configure' used with the gcc packages. +define HOST_LOCALEDEF_CONFIGURE_CMDS + mkdir -p $(@D)/build + # Do the configuration + (cd $(@D)/build; \ + $(HOST_LOCALEDEF_CONF_ENV) \ + $(HOST_CONFIGURE_OPTS) \ + $(SHELL) $(@D)/configure \ + libc_cv_forced_unwind=yes \ + libc_cv_ssp=no \ + --target=$(GNU_HOST_NAME) \ + --host=$(GNU_HOST_NAME) \ + --build=$(GNU_HOST_NAME) \ + --prefix=/usr \ + --with-pkgversion="Buildroot" \ + --without-cvs \ + --disable-profile \ + --without-gd \ + --enable-obsolete-rpc) +endef + +define HOST_LOCALEDEF_BUILD_CMDS + $(HOST_MAKE_ENV) $(BR2_MAKE1) $(HOST_LOCALEDEF_MAKE_OPTS) \ + -C $(@D)/build locale/others +endef + +# The makefile does not implement an install target for localedef +define HOST_LOCALEDEF_INSTALL_CMDS + $(INSTALL) -D -m 0755 $(@D)/build/locale/localedef $(HOST_DIR)/bin/localedef +endef + +$(eval $(host-autotools-package)) diff --git a/package/lockdev/0001-Makefile-install-static-library-and-headers-separate.patch b/package/lockdev/0001-Makefile-install-static-library-and-headers-separate.patch new file mode 100644 index 00000000..d5a498a1 --- /dev/null +++ b/package/lockdev/0001-Makefile-install-static-library-and-headers-separate.patch @@ -0,0 +1,44 @@ +From 0dcd2368c3e23a5cc1cc4a979d9c241ed9302236 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sun, 4 Jan 2015 16:06:07 +0100 +Subject: [PATCH] Makefile: install static library and headers separately + +Signed-off-by: Romain Naour +--- + Makefile | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/Makefile b/Makefile +index e27dcbd..ecf52d1 100644 +--- a/Makefile ++++ b/Makefile +@@ -45,12 +45,10 @@ perl-lib: static + cd LockDev && make OPTIMIZE="-O2 -g -Wall" + cd LockDev && make test + +-.PHONY: install install_dev install_dbg install_doc install_run +-install: install_dev install_dbg install_doc install_run ++.PHONY: install install_dev install_dbg install_doc install_run install_static ++install: install_dev install_dbg install_doc install_run install_static + +-install_dev: ${static} src/lockdev.h +- install -m755 -d ${libdir} +- install -m644 ${static} ${libdir} ++install_dev: src/lockdev.h + install -m755 -d ${incdir} + install -m644 src/lockdev.h ${incdir} + install -m644 src/ttylock.h ${incdir} +@@ -69,6 +67,10 @@ install_doc: docs/lockdev.3 + install -m755 -d ${mandir}/man3 + install -m644 docs/lockdev.3 ${mandir}/man3 + ++install_static: ${static} ++ install -m755 -d ${libdir} ++ install -m644 ${static} ${libdir} ++ + install_run: ${shared} + install -m755 -d ${libdir} + install -m644 ${shared} ${libdir} +-- +1.9.3 + diff --git a/package/lockdev/Config.in b/package/lockdev/Config.in new file mode 100644 index 00000000..4b386f4a --- /dev/null +++ b/package/lockdev/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LOCKDEV + bool "lockdev" + help + Library for locking devices. + + No upstream site, primary site is Debian. diff --git a/package/lockdev/lockdev.hash b/package/lockdev/lockdev.hash new file mode 100644 index 00000000..e32466df --- /dev/null +++ b/package/lockdev/lockdev.hash @@ -0,0 +1,5 @@ +# From http://snapshot.debian.org/archive/debian/20141023T043132Z/pool/main/l/lockdev/lockdev_1.0.3-1.6.dsc +sha256 ccae635d7ac3fdd50897eceb250872b3d9a191d298f213e7f0c836910d869f82 lockdev_1.0.3.orig.tar.gz +sha256 a5405c6ee5e97e45eeb1c81330a7e9f444a58bda5e6771fa30007516c115007e lockdev_1.0.3-1.6.diff.gz +# Locally calculated +sha256 5bbcbb737e60fe9deba08ecbd00920cfcc3403ba2e534c64fdeea49d6bb87509 LICENSE diff --git a/package/lockdev/lockdev.mk b/package/lockdev/lockdev.mk new file mode 100644 index 00000000..e491b132 --- /dev/null +++ b/package/lockdev/lockdev.mk @@ -0,0 +1,58 @@ +################################################################################ +# +# lockdev +# +################################################################################ + +LOCKDEV_VERSION_MAJOR = 1 +LOCKDEV_VERSION = $(LOCKDEV_VERSION_MAJOR).0.3 +LOCKDEV_SOURCE = lockdev_$(LOCKDEV_VERSION).orig.tar.gz +LOCKDEV_PATCH = lockdev_$(LOCKDEV_VERSION)-1.6.diff.gz +LOCKDEV_SITE = http://snapshot.debian.org/archive/debian/20141023T043132Z/pool/main/l/lockdev +LOCKDEV_LICENSE = LGPL-2.1 +LOCKDEV_LICENSE_FILES = LICENSE +LOCKDEV_INSTALL_STAGING = YES + +ifeq ($(BR2_STATIC_LIBS),y) +LOCKDEV_BUILD_ARGS = static +LOCKDEV_INSTALL_ARGS = install_static +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +LOCKDEV_BUILD_ARGS = static shared +LOCKDEV_INSTALL_ARGS = install_run install_static +else # BR2_SHARED_LIBS +LOCKDEV_BUILD_ARGS = shared +LOCKDEV_INSTALL_ARGS = install_run +endif + +# Make the code believe we are using a C library compatible with +# glibc, which for the purpose of lockdev is actually true. +ifeq ($(BR2_TOOLCHAIN_USES_MUSL),y) +LOCKDEV_BUILD_ARGS += CFLAGS="$(TARGET_CFLAGS) -D__GNU_LIBRARY__" +endif + +ifeq ($(BR2_SHARED_STATIC_LIBS)$(BR2_SHARED_LIBS),y) +define LOCKDEV_CREATE_LINKS_STAGING + ln -sf liblockdev.$(LOCKDEV_VERSION).so $(STAGING_DIR)/usr/lib/liblockdev.so + ln -sf liblockdev.$(LOCKDEV_VERSION).so $(STAGING_DIR)/usr/lib/liblockdev.so.$(LOCKDEV_VERSION_MAJOR) +endef + +define LOCKDEV_CREATE_LINKS_TARGET + ln -sf liblockdev.$(LOCKDEV_VERSION).so $(TARGET_DIR)/usr/lib/liblockdev.so.$(LOCKDEV_VERSION_MAJOR) +endef +endif + +define LOCKDEV_BUILD_CMDS + $(MAKE1) $(TARGET_CONFIGURE_OPTS) -C $(@D) $(LOCKDEV_BUILD_ARGS) +endef + +define LOCKDEV_INSTALL_STAGING_CMDS + $(MAKE1) basedir=$(STAGING_DIR)/usr -C $(@D) $(LOCKDEV_INSTALL_ARGS) install_dev + $(LOCKDEV_CREATE_LINKS_STAGING) +endef + +define LOCKDEV_INSTALL_TARGET_CMDS + $(MAKE1) basedir=$(TARGET_DIR)/usr -C $(@D) $(LOCKDEV_INSTALL_ARGS) + $(LOCKDEV_CREATE_LINKS_TARGET) +endef + +$(eval $(generic-package)) diff --git a/package/lockfile-progs/0001-sus3v-legacy.patch b/package/lockfile-progs/0001-sus3v-legacy.patch new file mode 100644 index 00000000..8cf552ef --- /dev/null +++ b/package/lockfile-progs/0001-sus3v-legacy.patch @@ -0,0 +1,11 @@ +--- /lockfile-progs.orig.c 2007-10-11 10:32:09.000000000 -0300 ++++ /lockfile-progs.c 2007-10-11 10:32:28.000000000 -0300 +@@ -93,7 +93,7 @@ + { NULL, 0, NULL, 0 } + }; + +- char *cmd_name = rindex(argv[0], '/'); ++ char *cmd_name = strrchr(argv[0], '/'); + int mail_cmd_p = 0; + + if(cmd_name != NULL) { diff --git a/package/lockfile-progs/Config.in b/package/lockfile-progs/Config.in new file mode 100644 index 00000000..de101a9a --- /dev/null +++ b/package/lockfile-progs/Config.in @@ -0,0 +1,5 @@ +config BR2_PACKAGE_LOCKFILE_PROGS + bool "lockfile programs" + select BR2_PACKAGE_LIBLOCKFILE + help + Build lockfile utility programs. diff --git a/package/lockfile-progs/lockfile-progs.hash b/package/lockfile-progs/lockfile-progs.hash new file mode 100644 index 00000000..fc3d4b68 --- /dev/null +++ b/package/lockfile-progs/lockfile-progs.hash @@ -0,0 +1,5 @@ +# From https://snapshot.debian.org/archive/debian/20180903T205652Z/pool/main/l/lockfile-progs/lockfile-progs_0.1.18.tar.gz +sha256 a42995a4b97e6188efc90fcc1a761163c4b2cff5c81b936f85c84301ddb05ce6 lockfile-progs_0.1.18.tar.gz + +# Hash for license file +sha256 dcc100d4161cc0b7177545ab6e47216f84857cda3843847c792a25289852dcaa COPYING diff --git a/package/lockfile-progs/lockfile-progs.mk b/package/lockfile-progs/lockfile-progs.mk new file mode 100644 index 00000000..d2f8f611 --- /dev/null +++ b/package/lockfile-progs/lockfile-progs.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# lockfile-progs +# +################################################################################ + +LOCKFILE_PROGS_VERSION = 0.1.18 +LOCKFILE_PROGS_SOURCE = lockfile-progs_$(LOCKFILE_PROGS_VERSION).tar.gz +LOCKFILE_PROGS_SITE = http://snapshot.debian.org/archive/debian/20180903T205652Z/pool/main/l/lockfile-progs +LOCKFILE_PROGS_DEPENDENCIES = liblockfile +LOCKFILE_PROGS_LICENSE = GPL-2.0 +LOCKFILE_PROGS_LICENSE_FILES = COPYING + +LOCKFILE_PROGS_BINS = \ + $(addprefix lockfile-,check create remove touch) \ + $(addprefix mail-,lock touchlock unlock) + +define LOCKFILE_PROGS_BUILD_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) +endef + +define LOCKFILE_PROGS_INSTALL_TARGET_CMDS + for i in $(LOCKFILE_PROGS_BINS); do \ + $(INSTALL) -D -m 755 $(@D)/bin/$$i $(TARGET_DIR)/usr/bin/$$i || exit 1; \ + done +endef + +$(eval $(generic-package)) diff --git a/package/log4cplus/0001-configure-ac-check-for-libraries-in-C-mode.patch b/package/log4cplus/0001-configure-ac-check-for-libraries-in-C-mode.patch new file mode 100644 index 00000000..6226a621 --- /dev/null +++ b/package/log4cplus/0001-configure-ac-check-for-libraries-in-C-mode.patch @@ -0,0 +1,62 @@ +From 4446516eb4fc8613d26669f5683f9d5d7c36ee67 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Wed, 18 Dec 2019 21:26:58 +0100 +Subject: [PATCH] configure.ac: check for libraries in C mode + +Fixes check for libraries failures, e.g. (from config.log): + + arc-buildroot-linux-uclibc-g++ -o conftest -Os -Wall -fdiagnostics-show-caret -ftrack-macro-expansion -fdiagnostics-color=auto -Wextra -pedantic -Wstrict-aliasing -Wstrict-overflow -Woverloaded-virtual -Wold-style-cast -Wc++14-compat -Wundef -Wshadow -Wformat -Wnoexcept -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wno-variadic-macros -fvisibility=hidden conftest.cpp -latomic + conftest.cpp:28:6: error: new declaration 'char __atomic_fetch_and_4()' ambiguates built-in declaration 'unsigned int __atomic_fetch_and_4(volatile void*, unsigned int, int)' [-fpermissive] + 28 | char __atomic_fetch_and_4 (); + | ^~~~~~~~~~~~~~~~~~~~ + conftest.cpp: In function 'int main()': + conftest.cpp:32:30: error: too few arguments to function 'unsigned int __atomic_fetch_and_4(volatile void*, unsigned int, int)' + 32 | return __atomic_fetch_and_4 (); + | ^ + +Resulting in: + + checking for library containing __atomic_fetch_and_4... no + +instead (after the fix applied): + + checking for library containing __atomic_fetch_and_4... -latomic + +Signed-off-by: Peter Seiderer +[Retrieved from: +https://github.com/log4cplus/log4cplus/commit/4446516eb4fc8613d26669f5683f9d5d7c36ee67] +Signed-off-by: Fabrice Fontaine +--- + configure.ac | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 72fbd870a..64eff1936 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -412,6 +412,7 @@ LOG4CPLUS_DEFINE_MACRO_IF([LOG4CPLUS_HAVE_VAR_ATTRIBUTE_INIT_PRIORITY], + + dnl Checks for libraries. + ++AC_LANG_PUSH([C]) + AC_SEARCH_LIBS([__atomic_fetch_and_4], [atomic]) + AC_SEARCH_LIBS([strerror], [cposix]) + dnl On some systems libcompat exists only as a static library which +@@ -422,6 +423,7 @@ AC_SEARCH_LIBS([setsockopt], [socket network net]) + AS_IF([test "x$with_iconv" = "xyes"], + [AC_SEARCH_LIBS([iconv_open], [iconv], [], + [AC_SEARCH_LIBS([libiconv_open], [iconv])])]) ++AC_LANG_POP([C]) + + dnl Windows/MinGW specific. + +@@ -497,7 +499,9 @@ dnl Multi threaded library. + AS_VAR_APPEND([LIBS], [" $PTHREAD_LIBS"]) + + dnl required on HP-UX ++ AC_LANG_PUSH([C]) + AC_SEARCH_LIBS([sem_init], [rt]) ++ AC_LANG_POP([C]) + + AS_CASE([$ax_cv_cxx_compiler_vendor], + [gnu|clang], diff --git a/package/log4cplus/Config.in b/package/log4cplus/Config.in new file mode 100644 index 00000000..cd5476a0 --- /dev/null +++ b/package/log4cplus/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_LOG4CPLUS + bool "log4cplus" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11 + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # std::future + help + log4cplus is a simple to use C++ logging API providing + thread-safe, flexible, and arbitrarily granular control + over log management and configuration. It is modelled + after the Java log4j API. + + http://sourceforge.net/projects/log4cplus + +comment "log4cplus needs a toolchain w/ C++, wchar, threads, gcc >= 4.8" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_HAS_THREADS || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + +comment "log4cplus needs a toolchain not affected by GCC bug 64735" + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 diff --git a/package/log4cplus/log4cplus.hash b/package/log4cplus/log4cplus.hash new file mode 100644 index 00000000..43ff401d --- /dev/null +++ b/package/log4cplus/log4cplus.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 6046f0867ce4734f298418c7b7db0d35c27403090bb751d98e6e76aa4935f1af log4cplus-2.0.5.tar.xz +sha256 91d7e42ff80e74c4c94e5ad353375fa0358cd0abbf43f5fe957097cdbd4e2c4d LICENSE diff --git a/package/log4cplus/log4cplus.mk b/package/log4cplus/log4cplus.mk new file mode 100644 index 00000000..8a613efa --- /dev/null +++ b/package/log4cplus/log4cplus.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# log4cplus +# +################################################################################ + +LOG4CPLUS_VERSION = 2.0.5 +LOG4CPLUS_SOURCE = log4cplus-$(LOG4CPLUS_VERSION).tar.xz +LOG4CPLUS_SITE = http://downloads.sourceforge.net/project/log4cplus/log4cplus-stable/$(LOG4CPLUS_VERSION) +LOG4CPLUS_LICENSE = Apache-2.0, BSD-2-Clause, BSD-like (threadpool) +LOG4CPLUS_LICENSE_FILES = LICENSE +LOG4CPLUS_INSTALL_STAGING = YES +# We're patching configure.ac +LOG4CPLUS_AUTORECONF = YES + +ifeq ($(BR2_GCC_ENABLE_LTO),y) +LOG4CPLUS_CONF_OPTS += --enable-lto +else +LOG4CPLUS_CONF_OPTS += --disable-lto +endif + +ifeq ($(BR2_PACKAGE_QT5BASE),y) +LOG4CPLUS_DEPENDENCIES += host-pkgconf qt5base +LOG4CPLUS_CONF_OPTS += --with-qt5 +else +LOG4CPLUS_CONF_OPTS += --without-qt5 +endif + +$(eval $(autotools-package)) diff --git a/package/log4cpp/Config.in b/package/log4cpp/Config.in new file mode 100644 index 00000000..090bf565 --- /dev/null +++ b/package/log4cpp/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_LOG4CPP + bool "log4cpp" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Log4cpp is library of C++ classes for flexible logging to + files, syslog, IDSA and other destinations. It is modeled + after the Log4j Java library, staying as close to their API + as is reasonable. + + http://log4cpp.sourceforge.net/ + +comment "log4cpp needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/log4cpp/log4cpp.hash b/package/log4cpp/log4cpp.hash new file mode 100644 index 00000000..f79aabee --- /dev/null +++ b/package/log4cpp/log4cpp.hash @@ -0,0 +1,6 @@ +# From http://sourceforge.net/projects/log4cpp/files/log4cpp-1.1.x%20%28new%29/log4cpp-1.1/ +md5 b9e2cee932da987212f2c74b767b4d8b log4cpp-1.1.3.tar.gz +sha1 74f0fea7931dc1bc4e5cd34a6318cd2a51322041 log4cpp-1.1.3.tar.gz +# Locally computed +sha256 2cbbea55a5d6895c9f0116a9a9ce3afb86df383cd05c9d6c1a4238e5e5c8f51d log4cpp-1.1.3.tar.gz +sha256 a190dc9c8043755d90f8b0a75fa66b9e42d4af4c980bf5ddc633f0124db3cee7 log4cpp/COPYING diff --git a/package/log4cpp/log4cpp.mk b/package/log4cpp/log4cpp.mk new file mode 100644 index 00000000..8664a543 --- /dev/null +++ b/package/log4cpp/log4cpp.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# log4cpp +# +################################################################################ + +LOG4CPP_VERSION_MAJOR = 1.1 +LOG4CPP_VERSION = $(LOG4CPP_VERSION_MAJOR).3 +LOG4CPP_SITE = http://downloads.sourceforge.net/project/log4cpp/log4cpp-1.1.x%20%28new%29/log4cpp-$(LOG4CPP_VERSION_MAJOR) +LOG4CPP_SUBDIR = log4cpp +# The "or later" is indicated in the HTML documentation +LOG4CPP_LICENSE = LGPL-2.1+ +LOG4CPP_LICENSE_FILES = log4cpp/COPYING +LOG4CPP_INSTALL_STAGING = YES +LOG4CPP_CONF_OPTS = --enable-doxygen=no --enable-dot=no +# needed to fix broken configure script +LOG4CPP_AUTORECONF = YES +LOG4CPP_AUTORECONF_OPTS = -I m4 + +# The default _CONFIG_SCRIPTS handling does not apply +define LOG4CPP_STAGING_CONFIG_SCRIPT_FIXUP + $(SED) 's,prefix="/usr",prefix="$(STAGING_DIR)/usr",' \ + -e 's,exec_prefix="/usr",prefix="$(STAGING_DIR)/usr",' \ + $(STAGING_DIR)/usr/bin/log4cpp-config +endef + +LOG4CPP_POST_INSTALL_STAGING_HOOKS += LOG4CPP_STAGING_CONFIG_SCRIPT_FIXUP + +define LOG4CPP_TARGET_CONFIG_SCRIPT_REMOVE + $(RM) $(TARGET_DIR)/usr/bin/log4cpp-config +endef + +LOG4CPP_POST_INSTALL_TARGET_HOOKS += LOG4CPP_TARGET_CONFIG_SCRIPT_REMOVE + +$(eval $(autotools-package)) diff --git a/package/log4cxx/0001-fix-build-without-wchar.patch b/package/log4cxx/0001-fix-build-without-wchar.patch new file mode 100644 index 00000000..fc0e7be5 --- /dev/null +++ b/package/log4cxx/0001-fix-build-without-wchar.patch @@ -0,0 +1,55 @@ +From 1fa70eaf24d75e84625f22779ec347fd29bf1ae6 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Thu, 24 Sep 2020 08:47:37 +0200 +Subject: [PATCH] fix build without wchar + +Disable wencode without wchar or the build will fail on: + +odbcappender.cpp: In static member function 'static void log4cxx::db::ODBCAppender::encode(wchar_t**, const LogString&, log4cxx::helpers::Pool&)': +odbcappender.cpp:362:22: error: 'wencode' is not a member of 'log4cxx::helpers::Transcoder' + *dest = Transcoder::wencode(src, p); + ^~~~~~~ + +Fixes: + - http://autobuild.buildroot.org/results/bab5329fdeb894471bfd5192ce04d3fbd2f9be5c + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/apache/logging-log4cxx/commit/f171f818c798d48631d5b45851e4593953f31d9c] +--- + src/main/cpp/odbcappender.cpp | 2 ++ + src/main/include/log4cxx/db/odbcappender.h | 2 ++ + 2 files changed, 4 insertions(+) + +diff --git a/src/main/cpp/odbcappender.cpp b/src/main/cpp/odbcappender.cpp +index 6bfa519e..218df132 100644 +--- a/src/main/cpp/odbcappender.cpp ++++ b/src/main/cpp/odbcappender.cpp +@@ -357,10 +357,12 @@ void ODBCAppender::setSql(const LogString& s) + } + } + ++#if LOG4CXX_WCHAR_T_API || LOG4CXX_LOGCHAR_IS_WCHAR_T || defined(WIN32) || defined(_WIN32) + void ODBCAppender::encode(wchar_t** dest, const LogString& src, Pool& p) + { + *dest = Transcoder::wencode(src, p); + } ++#endif + + void ODBCAppender::encode(unsigned short** dest, + const LogString& src, Pool& p) +diff --git a/src/main/include/log4cxx/db/odbcappender.h b/src/main/include/log4cxx/db/odbcappender.h +index a26bc35b..fdc144ff 100644 +--- a/src/main/include/log4cxx/db/odbcappender.h ++++ b/src/main/include/log4cxx/db/odbcappender.h +@@ -300,8 +300,10 @@ class LOG4CXX_EXPORT ODBCAppender : public AppenderSkeleton + private: + ODBCAppender(const ODBCAppender&); + ODBCAppender& operator=(const ODBCAppender&); ++#if LOG4CXX_WCHAR_T_API || LOG4CXX_LOGCHAR_IS_WCHAR_T || defined(WIN32) || defined(_WIN32) + static void encode(wchar_t** dest, const LogString& src, + log4cxx::helpers::Pool& p); ++#endif + static void encode(unsigned short** dest, const LogString& src, + log4cxx::helpers::Pool& p); + }; // class ODBCAppender diff --git a/package/log4cxx/Config.in b/package/log4cxx/Config.in new file mode 100644 index 00000000..bf739a43 --- /dev/null +++ b/package/log4cxx/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_LOG4CXX + bool "log4cxx" + # apr really needs shared library support + depends on !BR2_STATIC_LIBS + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # apr + select BR2_PACKAGE_APR + select BR2_PACKAGE_APR_UTIL + help + Apache log4cxx is a logging framework for C++ patterned + after Apache log4j. + + https://logging.apache.org/log4cxx/ + +comment "log4cxx needs a toolchain w/ C++, threads, dynamic library" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS + depends on BR2_USE_MMU diff --git a/package/log4cxx/log4cxx.hash b/package/log4cxx/log4cxx.hash new file mode 100644 index 00000000..535a0c4a --- /dev/null +++ b/package/log4cxx/log4cxx.hash @@ -0,0 +1,4 @@ +# From https://www.apache.org/dist/logging/log4cxx/0.11.0/apache-log4cxx-0.11.0.tar.gz.sha512 +sha512 f8aa37c9c094e7a4d6ca92dff13c032f69f1e078c51ea55e284fcb931c13256b08950af3ea6eaf7a12282240f6073e9acab19bfe217f88dbd62a5d2360f3fbdd apache-log4cxx-0.11.0.tar.gz +# Locally computed +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE diff --git a/package/log4cxx/log4cxx.mk b/package/log4cxx/log4cxx.mk new file mode 100644 index 00000000..0ddea946 --- /dev/null +++ b/package/log4cxx/log4cxx.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# log4cxx +# +################################################################################ + +LOG4CXX_VERSION = 0.11.0 +LOG4CXX_SITE = http://archive.apache.org/dist/logging/log4cxx/$(LOG4CXX_VERSION) +LOG4CXX_SOURCE = apache-log4cxx-$(LOG4CXX_VERSION).tar.gz +LOG4CXX_INSTALL_STAGING = YES +LOG4CXX_LICENSE = Apache-2.0 +LOG4CXX_LICENSE_FILES = LICENSE +# error: required file './compile' not found +LOG4CXX_AUTORECONF = YES + +LOG4CXX_CONF_OPTS = \ + --with-apr=$(STAGING_DIR)/usr/bin/apr-1-config \ + --with-apr-util=$(STAGING_DIR)/usr/bin/apu-1-config \ + --disable-dot \ + --disable-doxygen \ + --disable-html-docs + +LOG4CXX_DEPENDENCIES = apr apr-util + +$(eval $(autotools-package)) diff --git a/package/logrotate/Config.in b/package/logrotate/Config.in new file mode 100644 index 00000000..eea9ec2a --- /dev/null +++ b/package/logrotate/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_LOGROTATE + bool "logrotate" + depends on BR2_USE_WCHAR + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_POPT + help + A simple program to rotate logs. + + https://github.com/logrotate/logrotate + +comment "logrotate needs a toolchain w/ wchar" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR diff --git a/package/logrotate/logrotate.conf b/package/logrotate/logrotate.conf new file mode 100644 index 00000000..6d829dc9 --- /dev/null +++ b/package/logrotate/logrotate.conf @@ -0,0 +1,14 @@ +compress + +include /etc/logrotate.d + +/var/log/messages /var/log/auth.log /var/log/user.log { + rotate 7 + daily + delaycompress + missingok + sharedscripts + postrotate + /usr/bin/killall -HUP syslogd + endscript +} diff --git a/package/logrotate/logrotate.hash b/package/logrotate/logrotate.hash new file mode 100644 index 00000000..2af46d60 --- /dev/null +++ b/package/logrotate/logrotate.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING +sha256 841f81bf09d0014e4a2e11af166bb33fcd8429cc0c2d4a7d3d9ceb3858cfccc5 logrotate-3.18.0.tar.xz diff --git a/package/logrotate/logrotate.mk b/package/logrotate/logrotate.mk new file mode 100644 index 00000000..4d1344c2 --- /dev/null +++ b/package/logrotate/logrotate.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# logrotate +# +################################################################################ + +LOGROTATE_VERSION = 3.18.0 +LOGROTATE_SOURCE = logrotate-3.18.0.tar.xz +LOGROTATE_SITE = https://github.com/logrotate/logrotate/releases/download/$(LOGROTATE_VERSION) +LOGROTATE_LICENSE = GPL-2.0+ +LOGROTATE_LICENSE_FILES = COPYING +LOGROTATE_CPE_ID_VENDOR = logrotate_project +LOGROTATE_DEPENDENCIES = popt host-pkgconf +LOGROTATE_SELINUX_MODULES = logrotate +LOGROTATE_CONF_ENV = LIBS="`$(PKG_CONFIG_HOST_BINARY) --libs popt`" + +ifeq ($(BR2_PACKAGE_LIBSELINUX),y) +LOGROTATE_CONF_OPTS += --with-selinux +LOGROTATE_DEPENDENCIES += libselinux +else +LOGROTATE_CONF_OPTS += --without-selinux +endif + +ifeq ($(BR2_PACKAGE_ACL),y) +LOGROTATE_DEPENDENCIES += acl +LOGROTATE_CONF_OPTS += --with-acl +else +LOGROTATE_CONF_OPTS += --without-acl +endif + +define LOGROTATE_INSTALL_TARGET_CONF + $(INSTALL) -m 0644 package/logrotate/logrotate.conf $(TARGET_DIR)/etc/logrotate.conf + $(INSTALL) -d -m 0755 $(TARGET_DIR)/etc/logrotate.d +endef +LOGROTATE_POST_INSTALL_TARGET_HOOKS += LOGROTATE_INSTALL_TARGET_CONF + +$(eval $(autotools-package)) diff --git a/package/logsurfer/Config.in b/package/logsurfer/Config.in new file mode 100644 index 00000000..43e2f519 --- /dev/null +++ b/package/logsurfer/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LOGSURFER + bool "logsurfer" + depends on BR2_USE_MMU # fork() + help + Logsurfer is a program for monitoring system logs in + real-time, and reporting on the occurrence of events. + + http://www.crypt.gen.nz/logsurfer/ diff --git a/package/logsurfer/logsurfer.hash b/package/logsurfer/logsurfer.hash new file mode 100644 index 00000000..539a41a3 --- /dev/null +++ b/package/logsurfer/logsurfer.hash @@ -0,0 +1,3 @@ +# From https://www.crypt.gen.nz/logsurfer/ +md5 4c26a74d813ccf766117c95c644aa601 logsurfer-1.8.tar.gz +sha256 74a36e8530a884031b4ae2344a46b9aaa07a1ee36d143802f6b64f817c5bd1af logsurfer-1.8.tar.gz diff --git a/package/logsurfer/logsurfer.mk b/package/logsurfer/logsurfer.mk new file mode 100644 index 00000000..8eb9dc8f --- /dev/null +++ b/package/logsurfer/logsurfer.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# logsurfer +# +################################################################################ + +LOGSURFER_VERSION = 1.8 +LOGSURFER_SITE = http://downloads.sourceforge.net/project/logsurfer/logsurfer/logsurfer-$(LOGSURFER_VERSION) + +define LOGSURFER_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/src/logsurfer \ + $(TARGET_DIR)/usr/bin/logsurfer +endef + +$(eval $(autotools-package)) diff --git a/package/loongson_build_essential/Config.in b/package/loongson_build_essential/Config.in new file mode 100644 index 00000000..49d76e42 --- /dev/null +++ b/package/loongson_build_essential/Config.in @@ -0,0 +1,26 @@ +config BR2_PACKAGE_LOONGSON_BUILD_ESSENTIAL + bool "loongson build essential package from loongnix-lne" + help + Native compile package + +if BR2_PACKAGE_LOONGSON_BUILD_ESSENTIAL + +choice + prompt "build essential libs" + help + Select build essential libs. + +config BR2_PACKAGE_LOONGSON_BUILD_ESSENTIAL_FULL + bool "install build-essential" + +config BR2_PACKAGE_LOONGSON_BUILD_ESSENTIAL_CMAKE + bool "install build-essential&cmake" + +config BR2_PACKAGE_LOONGSON_BUILD_ESSENTIAL_CMAKE_GDB + bool "install build-essential&cmake&gdb" + select BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + select BR2_PACKAGE_BASH + +endchoice + +endif diff --git a/package/loongson_build_essential/loongson-build-essential.tar.gz b/package/loongson_build_essential/loongson-build-essential.tar.gz new file mode 100644 index 00000000..1496900b Binary files /dev/null and b/package/loongson_build_essential/loongson-build-essential.tar.gz differ diff --git a/package/loongson_build_essential/loongson_build_essential.mk b/package/loongson_build_essential/loongson_build_essential.mk new file mode 100644 index 00000000..ac61128c --- /dev/null +++ b/package/loongson_build_essential/loongson_build_essential.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# loongson_build_essential +# +################################################################################ + +ifeq ($(BR2_PACKAGE_LOONGSON_BUILD_ESSENTIAL_CMAKE),y) +LOONGSON_BUILD_ESSENTIAL_SITE = $(TOPDIR)/package/loongson_build_essential/loongson-build-essential-cmake.tar.gz +else ifeq ($(BR2_PACKAGE_LOONGSON_BUILD_ESSENTIAL_CMAKE_GDB),y) +LOONGSON_BUILD_ESSENTIAL_SITE = $(TOPDIR)/package/loongson_build_essential/loongson-build-essential-cmake-gdb.tar.gz +else +LOONGSON_BUILD_ESSENTIAL_SITE = $(TOPDIR)/package/loongson_build_essential/loongson-build-essential.tar.gz +endif +LOONGSON_BUILD_ESSENTIAL_SITE_METHOD = file + +define LOONGSON_BUILD_ESSENTIAL_EXTRACT_CMDS + echo "extract $(LOONGSON_BUILD_ESSENTIAL_SITE)" + tar -xzf $(LOONGSON_BUILD_ESSENTIAL_SITE) -C $(@D)/ +endef + +define LOONGSON_BUILD_ESSENTIAL_INSTALL_TARGET_CMDS + echo "do nothing" +endef + +$(eval $(generic-package)) diff --git a/package/loongson_kernel/Config.in b/package/loongson_kernel/Config.in new file mode 100644 index 00000000..2a263ef2 --- /dev/null +++ b/package/loongson_kernel/Config.in @@ -0,0 +1,25 @@ +config BR2_PACKAGE_LOONGSON_KERNEL + bool "Loongson Linux Kernel" + help + Enable this option if you want to put a Linux kernel(uImage) + in /boot dir + +config BR2_PACKAGE_LOONGSON_KERNEL_HOSTSITE + string "uImage Host site" + depends on BR2_PACKAGE_LOONGSON_KERNEL + default "10.120.1.5" + +config BR2_PACKAGE_LOONGSON_KERNEL_USER + string "uImage Host User" + depends on BR2_PACKAGE_LOONGSON_KERNEL + default "ftpuser" + +config BR2_PACKAGE_LOONGSON_KERNEL_PASSWORD + string "uImage Host password" + depends on BR2_PACKAGE_LOONGSON_KERNEL + default "1234" + +config BR2_PACKAGE_LOONGSON_KERNEL_PATH + string "uImage file path in host site" + depends on BR2_PACKAGE_LOONGSON_KERNEL + diff --git a/package/loongson_kernel/loongson_kernel.mk b/package/loongson_kernel/loongson_kernel.mk new file mode 100644 index 00000000..65b18a7a --- /dev/null +++ b/package/loongson_kernel/loongson_kernel.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# LoongsonGD Linux kernel target +# +################################################################################ + +LOONGSON_KERNEL_SITE = $(TOPDIR)/package/loongson_kernel/loongson_kernel.tar.gz +LOONGSON_KERNEL_SITE_METHOD = file + +define LOONGSON_KERNEL_EXTRACT_CMDS + tar -xzf $(LOONGSON_KERNEL_SITE) -C $(@D)/ + cd $(@D) && ./loongson_kernel.sh $(BR2_PACKAGE_LOONGSON_KERNEL_HOSTSITE) $(BR2_PACKAGE_LOONGSON_KERNEL_USER) $(BR2_PACKAGE_LOONGSON_KERNEL_PASSWORD) $(BR2_PACKAGE_LOONGSON_KERNEL_PATH) +endef + +define LOONGSON_KERNEL_INSTALL_TARGET_CMDS + echo "install LSGD Kernel" + mkdir -p $(TARGET_DIR)/boot + cd $(@D) && cp uImage $(TARGET_DIR)/boot +endef + +$(eval $(generic-package)) diff --git a/package/loongson_kernel/loongson_kernel.tar.gz b/package/loongson_kernel/loongson_kernel.tar.gz new file mode 100644 index 00000000..a6e400bc Binary files /dev/null and b/package/loongson_kernel/loongson_kernel.tar.gz differ diff --git a/package/loongson_resize/Config.in b/package/loongson_resize/Config.in new file mode 100644 index 00000000..53d58920 --- /dev/null +++ b/package/loongson_resize/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LOONGSON_RESIZE + bool "loongson system resize rootfs" + depends on BR2_INIT_SYSTEMD || BR2_INIT_BUSYBOX + select BR2_PACKAGE_PARTED + select BR2_PACKAGE_E2FSPROGS_RESIZE2FS + help + Resize rootfs when first startup, if device parted, + rootfs should in last part, otherwise cannot resize + rootfs partition + diff --git a/package/loongson_resize/loongson_resize.mk b/package/loongson_resize/loongson_resize.mk new file mode 100644 index 00000000..d2f0b475 --- /dev/null +++ b/package/loongson_resize/loongson_resize.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# loongson_resize +# +################################################################################ + +LOONGSON_RESIZE_SITE = $(TOPDIR)/package/loongson_resize/loongson_resize.tar.gz +LOONGSON_RESIZE_SITE_METHOD = file + +define LOONGSON_RESIZE_EXTRACT_CMDS + echo $(LOONGSON_RESIZE_SITE) + tar -zxf $(LOONGSON_RESIZE_SITE) -C $(@D)/ +endef + +define LOONGSON_RESIZE_INSTALL_STAGING_CMDS + echo "nothing to do" +endef + +define LOONGSON_RESIZE_INSTALL_TARGET_CMDS + echo "install loongson resize init.d/profile.d" + mkdir -p $(TARGET_DIR)/etc/profile.d + cd $(@D) && chmod a+x ./resizerootfs.sh && cp resizerootfs.sh $(TARGET_DIR)/etc/profile.d + mkdir -p $(TARGET_DIR)/etc/init.d + cd $(@D) && chmod a+x ./S01resizerootfs && cp S01resizerootfs $(TARGET_DIR)/etc/init.d +endef + +$(eval $(generic-package)) diff --git a/package/loongson_resize/loongson_resize.tar.gz b/package/loongson_resize/loongson_resize.tar.gz new file mode 100644 index 00000000..da333fd0 Binary files /dev/null and b/package/loongson_resize/loongson_resize.tar.gz differ diff --git a/package/lpc3250loader/Config.in.host b/package/lpc3250loader/Config.in.host new file mode 100644 index 00000000..946820a5 --- /dev/null +++ b/package/lpc3250loader/Config.in.host @@ -0,0 +1,7 @@ +config BR2_PACKAGE_HOST_LPC3250LOADER + bool "host lpc3250loader" + help + lpc3250loader is a tool to load/burn programs (in particular + kickstart and S1L) on an LPC3250 platform. + + https://github.com/alexandrebelloni/lpc3250loader diff --git a/package/lpc3250loader/lpc3250loader.hash b/package/lpc3250loader/lpc3250loader.hash new file mode 100644 index 00000000..9a27863b --- /dev/null +++ b/package/lpc3250loader/lpc3250loader.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 267de7541c92e5b007b93c660a41188976d531a3757f4ffd9b7142d3994da7d1 lpc3250loader-1.0.tar.gz +sha256 9a817497240e8e92f09ccfec7568a74673dc30ec008b541c8706663677b4e7a9 LPC3250loader.py diff --git a/package/lpc3250loader/lpc3250loader.mk b/package/lpc3250loader/lpc3250loader.mk new file mode 100644 index 00000000..ee153fef --- /dev/null +++ b/package/lpc3250loader/lpc3250loader.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# lpc3250loader +# +################################################################################ + +HOST_LPC3250LOADER_VERSION = 1.0 +HOST_LPC3250LOADER_SITE = $(call github,alexandrebelloni,lpc3250loader,$(HOST_LPC3250LOADER_VERSION)) +LPC3250LOADER_LICENSE = GPL-2.0+ +LPC3250LOADER_LICENSE_FILES = LPC3250loader.py + +define HOST_LPC3250LOADER_INSTALL_CMDS + $(INSTALL) -m 0755 -D $(@D)/LPC3250loader.py \ + $(HOST_DIR)/bin/LPC3250loader.py +endef + +$(eval $(host-generic-package)) diff --git a/package/lpeg/Config.in b/package/lpeg/Config.in new file mode 100644 index 00000000..0a7ea47d --- /dev/null +++ b/package/lpeg/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LPEG + bool "lpeg" + help + LPeg is a new pattern-matching library for Lua, + based on Parsing Expression Grammars (PEGs). + + http://www.inf.puc-rio.br/~roberto/lpeg.html diff --git a/package/lpeg/lpeg.hash b/package/lpeg/lpeg.hash new file mode 100644 index 00000000..7a20f063 --- /dev/null +++ b/package/lpeg/lpeg.hash @@ -0,0 +1,2 @@ +# computed by luarocks/buildroot +sha256 e0d0d687897f06588558168eeb1902ac41a11edd1b58f1aa61b99d0ea0abbfbc lpeg-1.0.2-1.src.rock diff --git a/package/lpeg/lpeg.mk b/package/lpeg/lpeg.mk new file mode 100644 index 00000000..cdb2e81a --- /dev/null +++ b/package/lpeg/lpeg.mk @@ -0,0 +1,10 @@ +################################################################################ +# +# lpeg +# +################################################################################ + +LPEG_VERSION = 1.0.2-1 +LPEG_LICENSE = MIT + +$(eval $(luarocks-package)) diff --git a/package/lpty/Config.in b/package/lpty/Config.in new file mode 100644 index 00000000..ee2d4c20 --- /dev/null +++ b/package/lpty/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LPTY + bool "lpty" + help + A simple facility for lua to control other programs via + PTYs. + + http://www.tset.de/lpty/ diff --git a/package/lpty/lpty.hash b/package/lpty/lpty.hash new file mode 100644 index 00000000..6b21d75a --- /dev/null +++ b/package/lpty/lpty.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 cf263ece9b50a78a7fb2277e3546fbbf0bf6858f41821932d92f2e3d8a065091 lpty-1.0.1-1.src.rock +sha256 c5a128a73cad5f6e111ebd8f4a9fa3500562c57912972eb15627db9610d43dec lpty-1.0.1-1/doc/LICENSE diff --git a/package/lpty/lpty.mk b/package/lpty/lpty.mk new file mode 100644 index 00000000..5a691256 --- /dev/null +++ b/package/lpty/lpty.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# lpty +# +################################################################################ + +LPTY_VERSION = 1.0.1-1 +LPTY_SUBDIR = lpty-$(LPTY_VERSION) +LPTY_LICENSE = MIT +LPTY_LICENSE_FILES = $(LPTY_SUBDIR)/doc/LICENSE + +$(eval $(luarocks-package)) diff --git a/package/lrandom/Config.in b/package/lrandom/Config.in new file mode 100644 index 00000000..a8a0a837 --- /dev/null +++ b/package/lrandom/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LRANDOM + bool "lrandom" + help + A library for generating random numbers + based on the Mersenne Twister + + http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/#lrandom diff --git a/package/lrandom/lrandom.hash b/package/lrandom/lrandom.hash new file mode 100644 index 00000000..111635e5 --- /dev/null +++ b/package/lrandom/lrandom.hash @@ -0,0 +1,2 @@ +# computed by luarocks/buildroot +sha256 9b77af41202feb38b09cb4a99cd49680ea9dbc9df3e640f801be378dd286eab8 lrandom-20180729-1.src.rock diff --git a/package/lrandom/lrandom.mk b/package/lrandom/lrandom.mk new file mode 100644 index 00000000..c78e15ff --- /dev/null +++ b/package/lrandom/lrandom.mk @@ -0,0 +1,11 @@ +################################################################################ +# +# lrandom +# +################################################################################ + +LRANDOM_VERSION = 20180729-1 +LRANDOM_SUBDIR = lrandom-100 +LRANDOM_LICENSE = MIT + +$(eval $(luarocks-package)) diff --git a/package/lrzip/Config.in b/package/lrzip/Config.in new file mode 100644 index 00000000..885b84db --- /dev/null +++ b/package/lrzip/Config.in @@ -0,0 +1,24 @@ +config BR2_PACKAGE_LRZIP + bool "lrzip" + depends on BR2_USE_MMU # fork() + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_INSTALL_LIBSTDCPP + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_LZO + select BR2_PACKAGE_BZIP2 + help + A compression utility that excels at compressing large files + (usually > 10-50 MB). Larger files and/or more free RAM means + that the utility will be able to more effectively compress + your files (ie: faster / smaller size), especially if the + filesize(s) exceed 100 MB. You can either choose to optimise + for speed (fast compression / decompression) or size, + but not both. + + https://github.com/ckolivas/lrzip + +comment "lrzip needs a toolchain w/ wchar, threads, C++" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_INSTALL_LIBSTDCPP diff --git a/package/lrzip/lrzip.hash b/package/lrzip/lrzip.hash new file mode 100644 index 00000000..3e188c41 --- /dev/null +++ b/package/lrzip/lrzip.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 4d31c429491f1378e868afe06867f68f8b1332fdca0758de24cc4da22103acfb lrzip-7f3bf46203bf45ea115d8bd9f310ea219be88af4.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/lrzip/lrzip.mk b/package/lrzip/lrzip.mk new file mode 100644 index 00000000..7419bb1e --- /dev/null +++ b/package/lrzip/lrzip.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# lrzip +# +################################################################################ + +LRZIP_VERSION = 7f3bf46203bf45ea115d8bd9f310ea219be88af4 +LRZIP_SITE = $(call github,ckolivas,lrzip,$(LRZIP_VERSION)) +LRZIP_AUTORECONF = YES +LRZIP_LICENSE = GPL-2.0+ +LRZIP_LICENSE_FILES = COPYING +LRZIP_DEPENDENCIES = zlib lzo bzip2 + +ifeq ($(BR2_i386)$(BR2_x86_64),y) +LRZIP_DEPENDENCIES += host-nasm +LRZIP_CONF_OPTS += --enable-asm +else +LRZIP_CONF_OPTS += --disable-asm +endif + +$(eval $(autotools-package)) diff --git a/package/lrzsz/Config.in b/package/lrzsz/Config.in new file mode 100644 index 00000000..1b5da148 --- /dev/null +++ b/package/lrzsz/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_LRZSZ + bool "lrzsz" + # It could technically build in a static-only environment, but + # it unconditionally redefines the error() and error_at_line() + # functions, which clashes with the definition from + # uClibc. Since the autotools packaging dates back from 1998, + # lots of work is needed to fix it, and do some proper tests + # on the availability of such functions. + depends on !BR2_STATIC_LIBS + help + Portable and fast implementation of the X/Y/Zmodem protocols. + + http://www.ohse.de/uwe/software/lrzsz.html + +comment "lrzsz needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/lrzsz/lrzsz.hash b/package/lrzsz/lrzsz.hash new file mode 100644 index 00000000..cd8dd6f4 --- /dev/null +++ b/package/lrzsz/lrzsz.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 c28b36b14bddb014d9e9c97c52459852f97bd405f89113f30bee45ed92728ff1 lrzsz-0.12.20.tar.gz +sha256 dcc100d4161cc0b7177545ab6e47216f84857cda3843847c792a25289852dcaa COPYING diff --git a/package/lrzsz/lrzsz.mk b/package/lrzsz/lrzsz.mk new file mode 100644 index 00000000..45c88619 --- /dev/null +++ b/package/lrzsz/lrzsz.mk @@ -0,0 +1,36 @@ +################################################################################ +# +# lrzsz +# +################################################################################ + +LRZSZ_VERSION = 0.12.20 +LRZSZ_SITE = http://www.ohse.de/uwe/releases +LRZSZ_CONF_OPTS = --disable-timesync +LRZSZ_LICENSE = GPL-2.0+ +LRZSZ_LICENSE_FILES = COPYING +LRZSZ_CPE_ID_VENDOR = lrzsz_project +LRZSZ_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) +LRZSZ_CONF_ENV = LIBS=$(TARGET_NLS_LIBS) + +define LRZSZ_POST_CONFIGURE_HOOKS + $(SED) "s/-lnsl//;" $(@D)/src/Makefile + $(SED) "s~\(#define ENABLE_SYSLOG.*\)~/* \1 */~;" $(@D)/config.h +endef + +define LRZSZ_BUILD_HOOKS + $(TARGET_MAKE_ENV) $(MAKE) CROSS_COMPILE="$(TARGET_CROSS)" prefix="$(TARGET_DIR)" -C $(@D) +endef + +define LRZSZ_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/src/lrz $(TARGET_DIR)/usr/bin/rz + $(INSTALL) -m 0755 -D $(@D)/src/lsz $(TARGET_DIR)/usr/bin/sz + ln -sf rz $(TARGET_DIR)/usr/bin/lrz + ln -sf sz $(TARGET_DIR)/usr/bin/lsz + ln -sf rz $(TARGET_DIR)/usr/bin/rb + ln -sf sz $(TARGET_DIR)/usr/bin/sb + ln -sf rz $(TARGET_DIR)/usr/bin/rx + ln -sf sz $(TARGET_DIR)/usr/bin/sx +endef + +$(eval $(autotools-package)) diff --git a/package/ls-modload/Config.in b/package/ls-modload/Config.in new file mode 100644 index 00000000..27e25b9f --- /dev/null +++ b/package/ls-modload/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_LS_MODLOAD + bool "loongson buildroot system auto load module" + depends on BR2_INIT_BUSYBOX + help + this will do modprobe in /etc/init.d script + +config BR2_PACKAGE_LS_MODLOAD_ALL + bool "auto load all modules" + depends on BR2_PACKAGE_LS_MODLOAD + help + this will do modprobe all modules in /lib/modules/`uname -r`/modules.dep, + if BR2_PACKAGE_LS_LOADMODULE_ALL not set, modprobe will load modules + in /etc/modules + +config BR2_PACKAGE_LS_MODLOAD_DELAY + bool "modules load delay 5s after boot" + depends on BR2_PACKAGE_LS_MODLOAD + default n + help + if run a process after boot and need fast + can delay load module + diff --git a/package/ls-modload/ls-modload.mk b/package/ls-modload/ls-modload.mk new file mode 100644 index 00000000..3994b1d9 --- /dev/null +++ b/package/ls-modload/ls-modload.mk @@ -0,0 +1,50 @@ +################################################################################ +# +# boot_run +# +################################################################################ + +LS_MODLOAD_SITE = $(TOPDIR)/package/ls-modload/ls-modload.tar.gz +LS_MODLOAD_SITE_METHOD = file + +define LS_MODLOAD_EXTRACT_CMDS + echo $(LS_MODLOAD_SITE) + tar -zxf $(LS_MODLOAD_SITE) -C $(@D)/ +endef + +ifeq ($(BR2_PACKAGE_LS_MODLOAD_DELAY),y) +define LS_MODLOAD_DELAY_LOAD_SETUP + cd $(@D) && $(SED) 's/#sleep 5/sleep 5/g' module_load_install.sh +endef +endif + +ifeq ($(BR2_PACKAGE_LS_MODLOAD_ALL),y) + +define LS_MODLOAD_BUILD_CMDS + echo "create module_load_install.sh" + cd $(@D) && cp module_load_all.sh module_load_install.sh + $(LS_MODLOAD_DELAY_LOAD_SETUP) +endef + +else +define LS_MODLOAD_BUILD_CMDS + echo "create module_load_install.sh" + cd $(@D) && cp module_load.sh module_load_install.sh + $(LS_MODLOAD_DELAY_LOAD_SETUP) +endef + +endif + +define LS_MODLOAD_INSTALL_STAGING_CMDS + echo "nothing to do" +endef + +define LS_MODLOAD_INSTALL_TARGET_CMDS + echo "install boot_run.service and boot_run.sh" + mkdir -p $(TARGET_DIR)/etc/init.d + cd $(@D) && chmod a+x ./S09modload && cp S09modload $(TARGET_DIR)/etc/init.d + mkdir -p $(TARGET_DIR)/root/init_shell + cd $(@D) && chmod a+x module_load_install.sh && cp module_load_install.sh $(TARGET_DIR)/root/init_shell/module_load.sh +endef + +$(eval $(generic-package)) diff --git a/package/ls-modload/ls-modload.tar.gz b/package/ls-modload/ls-modload.tar.gz new file mode 100644 index 00000000..9c49f4f9 Binary files /dev/null and b/package/ls-modload/ls-modload.tar.gz differ diff --git a/package/ls-usb-mount/Config.in b/package/ls-usb-mount/Config.in new file mode 100644 index 00000000..dae3fe9d --- /dev/null +++ b/package/ls-usb-mount/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_LS_USB_MOUNT + bool "loongson buildroot system auto mount usb in busybox" + depends on BR2_INIT_BUSYBOX + default n + help + just for init process as busybox to auto mount busybox + +config BR2_PACKAGE_LS_USB_MOUNT_DELAY + bool "modules load delay 5s after boot" + depends on BR2_PACKAGE_LS_USB_MOUNT + default n + help + if run a process after boot and need fast + can delay load module + diff --git a/package/ls-usb-mount/ls-usb-mount.mk b/package/ls-usb-mount/ls-usb-mount.mk new file mode 100644 index 00000000..a38aad8c --- /dev/null +++ b/package/ls-usb-mount/ls-usb-mount.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# ls-usb-mount +# +################################################################################ + +LS_USB_MOUNT_SITE = $(TOPDIR)/package/ls-usb-mount/ls-usb-mount.tar.gz +LS_USB_MOUNT_SITE_METHOD = file + +define LS_USB_MOUNT_EXTRACT_CMDS + echo $(LS_USB_MOUNT_SITE) + tar -zxf $(LS_USB_MOUNT_SITE) -C $(@D)/ +endef + +ifeq ($(BR2_PACKAGE_LS_USB_MOUNT_DELAY),y) +define LS_USB_MOUNT_DELAY_LOAD_SETUP + cd $(@D) && $(SED) 's/#sleep 5/sleep 5/g' usb_probe.sh +endef +endif + +define LS_USB_MOUNT_BUILD_CMDS + echo "create module_load_install.sh" + cd $(@D) && cp usb_probe_ori.sh usb_probe.sh + $(LS_USB_MOUNT_DELAY_LOAD_SETUP) +endef + +define LS_USB_MOUNT_INSTALL_STAGING_CMDS + echo "nothing to do" +endef + +define LS_USB_MOUNT_INSTALL_TARGET_CMDS + echo "install usb auto mount shell" + mkdir -p $(TARGET_DIR)/etc/init.d + cd $(@D) && chmod a+x ./S89_usb_mount && cp S89_usb_mount $(TARGET_DIR)/etc/init.d + mkdir -p $(TARGET_DIR)/root/init_shell + cd $(@D) && chmod a+x usb_probe.sh && cp usb_probe.sh $(TARGET_DIR)/root/init_shell/ +endef + +$(eval $(generic-package)) diff --git a/package/ls-usb-mount/ls-usb-mount.tar.gz b/package/ls-usb-mount/ls-usb-mount.tar.gz new file mode 100644 index 00000000..60875e08 Binary files /dev/null and b/package/ls-usb-mount/ls-usb-mount.tar.gz differ diff --git a/package/ls2_sys_config_tool/Config.in b/package/ls2_sys_config_tool/Config.in new file mode 100644 index 00000000..43941f2c --- /dev/null +++ b/package/ls2_sys_config_tool/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LS2_SYS_CONFIG_TOOL + bool "ls2k(embedded system) sys config tool" + default y + help + this is a sofeware for loongson-gd embedded board(just like ls2k) + help user to setup board + can update uboot kernel rootfs diff --git a/package/ls2_sys_config_tool/ls2_sys_config_tool.mk b/package/ls2_sys_config_tool/ls2_sys_config_tool.mk new file mode 100644 index 00000000..a6810622 --- /dev/null +++ b/package/ls2_sys_config_tool/ls2_sys_config_tool.mk @@ -0,0 +1,82 @@ +################################################################################ +# +# ls2_sys_config_tool +# +################################################################################ + +LS2_SYS_CONFIG_TOOL_VERSION = origin/master +LS2_SYS_CONFIG_TOOL_SITE = http://10.120.1.5:3000/base/sys_config_tool +LS2_SYS_CONFIG_TOOL_SITE_METHOD = git +LS2_SYS_CONFIG_TOOL_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_PACKAGE_LS2_SYS_CONFIG_TOOL_QT),y) +LS2_SYS_CONFIG_TOOL_DEPENDENCIES = qt5base +endif + +#define LS2_SYS_CONFIG_TOOL_EXTRACT_CMDS + +#endef + +#$(TARGET_MAKE_ENV) $(MAKE) CC=$(TARGET_CC) AR=$(TARGET_AR) -C $(@D) + +ifeq ($(BR2_PACKAGE_LS2_SYS_CONFIG_TOOL_QT),y) +define LS2_SYS_CONFIG_TOOL_BUILD_QT_VER_CMDS + cd $(@D)/Qtver/LS2_SYS_CONFIG_TOOL/ && $(HOST_DIR)/bin/qmake LS2_SYS_CONFIG_TOOL.pro && $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/Qtver/LS2_SYS_CONFIG_TOOL/ +endef +define LS2_SYS_CONFIG_TOOL_INSTALL_QT_VER_CMDS + echo "install Qt version sofeware" && cd $(@D)/Qtver/LS2_SYS_CONFIG_TOOL/ && cp LS2_SYS_CONFIG_TOOL $(TARGET_DIR)/root/loongson_test_case/ +endef +else +define LS2_SYS_CONFIG_TOOL_BUILD_QT_VER_CMDS + echo "not build Qt version" +endef +define LS2_SYS_CONFIG_TOOL_INSTALL_QT_VER_CMDS + echo "not install Qt version" +endef +endif + +ifeq ($(BR2_PACKAGE_LS2_SYS_CONFIG_TOOL_QT_AUTO_START),y) + +ifeq ($(BR2_PACKAGE_BOOT_RUN),y) +define LS2_SYS_CONFIG_TOOL_INSTALL_AUTO_EXEC_AFTER_BOOT_CMDS + echo "auto run in boot in /root/boot_run.sh" +endef +else +define LS2_SYS_CONFIG_TOOL_INSTALL_AUTO_EXEC_AFTER_BOOT_CMDS + echo "install auto boot Qt version sofeware service" && cd $(TOPDIR)/package/LS2_SYS_CONFIG_TOOL/ && cp LS2_SYS_CONFIG_TOOL.service $(TARGET_DIR)/usr/lib/systemd/system/ && cd $(TARGET_DIR)/usr/lib/systemd/system/ && mkdir -p multi-user.target.wants && cd $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants && ln -s -f ../LS2_SYS_CONFIG_TOOL.service LS2_SYS_CONFIG_TOOL.service +endef +endif + +else +define LS2_SYS_CONFIG_TOOL_INSTALL_AUTO_EXEC_AFTER_BOOT_CMDS + echo "nothing to do" +endef +endif + +define LS2_SYS_CONFIG_TOOL_BUILD_CMDS + echo "first build cmd version software" + cd $(@D)/cmd_version && $(MAKE) clean && $(TARGET_MAKE_ENV) $(MAKE) CC=$(TARGET_CC) BUILD_TYPE=3 && cp sys_config_tool update_uboot + cd $(@D)/cmd_version && $(MAKE) clean && $(TARGET_MAKE_ENV) $(MAKE) CC=$(TARGET_CC) BUILD_TYPE=2 && cp sys_config_tool update_system + cd $(@D)/cmd_version && $(MAKE) clean && $(TARGET_MAKE_ENV) $(MAKE) CC=$(TARGET_CC) + echo "second build qt version software" + $(LS2_SYS_CONFIG_TOOL_BUILD_QT_VER_CMDS) +endef + +define LS2_SYS_CONFIG_TOOL_INSTALL_STAGING_CMDS + echo "nothing to do" +endef + +define LS2_SYS_CONFIG_TOOL_INSTALL_TARGET_CMDS + echo "install cmd version sofeware" + cd $(TARGET_DIR)/ && mkdir -p ./root/ls2_sys_config_tool/file + cd $(@D)/file && cp -r download_system_tftp $(TARGET_DIR)/root/ls2_sys_config_tool/file/download_system + cd $(@D)/file && cp -r install_system $(TARGET_DIR)/root/ls2_sys_config_tool/file/ + cd $(@D)/file && cp -r fstab $(TARGET_DIR)/root/ls2_sys_config_tool/file/ + cd $(@D)/cmd_version && cp sys_config_tool $(TARGET_DIR)/root/ls2_sys_config_tool/ + cd $(@D)/cmd_version && cp update_system $(TARGET_DIR)/root/ls2_sys_config_tool/ + cd $(@D)/cmd_version && cp update_uboot $(TARGET_DIR)/root/ls2_sys_config_tool/ + $(LS2_SYS_CONFIG_TOOL_INSTALL_QT_VER_CMDS) + $(LS2_SYS_CONFIG_TOOL_INSTALL_AUTO_EXEC_AFTER_BOOT_CMDS) +endef + +$(eval $(generic-package)) diff --git a/package/ls3_system_tool/Config.in b/package/ls3_system_tool/Config.in new file mode 100644 index 00000000..a58438cf --- /dev/null +++ b/package/ls3_system_tool/Config.in @@ -0,0 +1,27 @@ +config BR2_PACKAGE_LS3_SYSTEM_TOOL + bool "ls3 system tool loongson" + help + this is a sofeware or sofeware set work loongson gd board + help user to test their's board + if you can't build it because you not build in loongson gd net + git source unsee in eth + you can contact oujintao@loongson.cn for help + +config BR2_PACKAGE_LS3_SYSTEM_TOOL_QT + bool "build Qt version" + depends on BR2_PACKAGE_LS3_SYSTEM_TOOL + depends on BR2_PACKAGE_QT5 + depends on BR2_PACKAGE_QT5BASE + help + if your system contain Qt + it will build a Qt version test case for you + +config BR2_PACKAGE_LS3_SYSTEM_TOOL_QT_AUTO_START + bool "Qt version auto run after boot" + depends on BR2_PACKAGE_LS3_SYSTEM_TOOL_QT + depends on BR2_INIT_SYSTEMD || (BR2_INIT_BUSYBOX && BR2_PACKAGE_BOOT_RUN) + default n + help + if your system contain Qt and select build this software Qt version + it will set a service which run after boot system to let software exec + diff --git a/package/ls3_system_tool/ls3_system_tool.mk b/package/ls3_system_tool/ls3_system_tool.mk new file mode 100644 index 00000000..542c59a0 --- /dev/null +++ b/package/ls3_system_tool/ls3_system_tool.mk @@ -0,0 +1,99 @@ +################################################################################ +# +# ls3_system_tool +# +################################################################################ + +LS3_SYSTEM_TOOL_VERSION = origin/master +LS3_SYSTEM_TOOL_SITE = http://10.120.1.5:3000/base/ls3_system_tool +LS3_SYSTEM_TOOL_SITE_METHOD = git +LS3_SYSTEM_TOOL_GIT_SUBMODULES = YES +LS3_SYSTEM_TOOL_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_PACKAGE_LS3_SYSTEM_TOOL_QT),y) +LS3_SYSTEM_TOOL_DEPENDENCIES = qt5base +endif + +#define LS3_SYSTEM_TOOL_EXTRACT_CMDS + +#endef + +#$(TARGET_MAKE_ENV) $(MAKE) CC=$(TARGET_CC) AR=$(TARGET_AR) -C $(@D) + +define LS3_SYSTEM_TOOL_BUILD_SINGLE_TEST_CASE + cd $(@D)/test_case_single && ./build_single_test.sh $(TARGET_CC) $(TARGET_CXX) +endef + +ifeq ($(BR2_PACKAGE_LS3_SYSTEM_TOOL_QT),y) +define LS3_SYSTEM_TOOL_BUILD_QT_VER_CMDS + mkdir -p $(@D)/Qtver/build && cd $(@D)/Qtver/build && $(HOST_DIR)/bin/qmake ../ls_system_tool/ls_system_tool.pro && $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/Qtver/build +endef +define LS3_SYSTEM_TOOL_INSTALL_QT_VER_CMDS + echo "install Qt version sofeware" && cd $(@D)/Qtver/build/ && cp ls_system_tool $(TARGET_DIR)/usr/bin/ls_system_tool_qt +endef +else +define LS3_SYSTEM_TOOL_BUILD_QT_VER_CMDS + echo "not build Qt version" +endef +define LS3_SYSTEM_TOOL_INSTALL_QT_VER_CMDS + echo "not install Qt version" +endef +endif + +define LS3_SYSTEM_TOOL_INSTALL_SINGLE_TEST_CASE + cd $(TARGET_DIR)/ && mkdir -p ./root/loongson_test_case && cd $(@D)/test_case_single/out/loongson_test_case && cp -r * $(TARGET_DIR)/root/loongson_test_case/ +endef + +ifeq ($(BR2_PACKAGE_LS3_SYSTEM_TOOL_QT_AUTO_START),y) + +ifeq ($(BR2_PACKAGE_BOOT_RUN),y) +define LS3_SYSTEM_TOOL_INSTALL_AUTO_EXEC_AFTER_BOOT_CMDS + echo "auto run in boot in /root/boot_run.sh" +endef +else +define LS3_SYSTEM_TOOL_INSTALL_AUTO_EXEC_AFTER_BOOT_CMDS + echo "install auto boot Qt version sofeware service" && cd $(TOPDIR)/package/ls3_system_tool/ && cp ls3_system_tool.service $(TARGET_DIR)/usr/lib/systemd/system/ && cd $(TARGET_DIR)/usr/lib/systemd/system/ && mkdir -p multi-user.target.wants && cd $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants && ln -s -f ../ls3_system_tool.service ls3_system_tool.service +endef +endif + +else +define LS3_SYSTEM_TOOL_INSTALL_AUTO_EXEC_AFTER_BOOT_CMDS + echo "nothing to do" +endef +endif + +# echo "first cmake all single test case" +# cd $(@D) && mkdir -p build && cd ./build && cmake -D CMAKE_C_COMPILER=$(TARGET_CC) ../ +# $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/build/ +# cd $(@D) && export CC=$(TARGET_CC); export $(TARGET_MAKE_ENV); export ARCH=$(BR2_ARCH); export CROSS_COMPILE=$(BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX)-; ./compile_ob_cp.sh && ./install_single_test.sh + +define LS3_SYSTEM_TOOL_BUILD_CMDS + $(LS3_SYSTEM_TOOL_BUILD_SINGLE_TEST_CASE) + echo "build cmd version sofeware" + cd $(@D) && export $(TARGET_MAKE_ENV); export CC=$(TARGET_CC); export ARCH=$(BR2_ARCH); export CROSS_COMPILE=$(BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX)-; ./build.sh rebuild + $(LS3_SYSTEM_TOOL_BUILD_QT_VER_CMDS) +endef + +define LS3_SYSTEM_TOOL_INSTALL_STAGING_CMDS + echo "nothing to do" +endef + +# echo "install all single test case" +# cd $(TARGET_DIR)/ && mkdir -p ./root/loongson_test_case +# cd $(@D) && cd out/loongson_test_case/ && cp -r * $(TARGET_DIR)/root/loongson_test_case/ +# echo "install test-server(all test case test tool)" +# mkdir -p $(TARGET_DIR)/root/loongson-test-server +# cd $(@D)/test-server-project && cp test-server $(TARGET_DIR)/root/loongson-test-server +# #cd $(@D)/test-server-project && cp can_client $(TARGET_DIR)/root/loongson-test-server + +define LS3_SYSTEM_TOOL_INSTALL_TARGET_CMDS + $(LS3_SYSTEM_TOOL_INSTALL_SINGLE_TEST_CASE) + cd $(@D) && ./package_output.sh + cd $(@D)/ls_system_tool_install && cp ls_system_tool $(TARGET_DIR)/usr/bin/ + mkdir -p $(TARGET_DIR)/opt/ls_system_config + cd $(@D)/ls_system_tool_install && cp -a shell $(TARGET_DIR)/opt/ls_system_config/ + $(LS3_SYSTEM_TOOL_INSTALL_QT_VER_CMDS) + $(LS3_SYSTEM_TOOL_INSTALL_AUTO_EXEC_AFTER_BOOT_CMDS) +endef + +$(eval $(generic-package)) diff --git a/package/ls3_system_tool/ls3_system_tool.service b/package/ls3_system_tool/ls3_system_tool.service new file mode 100644 index 00000000..4dbae67d --- /dev/null +++ b/package/ls3_system_tool/ls3_system_tool.service @@ -0,0 +1,13 @@ +[Unit] +Description=ls3_system_tool(ls_system_tool_qt) Qt version exec +After=getty@.service + +[Service] +Type=oneshot +ExecStart=sleep 5.5 +ExecStart=ls_system_tool_qt +TimeoutSec=0 +RemainAfterExit=no + +[Install] +WantedBy=multi-user.target diff --git a/package/ls_default_eth_config/Config.in b/package/ls_default_eth_config/Config.in new file mode 100644 index 00000000..864eae2f --- /dev/null +++ b/package/ls_default_eth_config/Config.in @@ -0,0 +1,48 @@ +config BR2_PACKAGE_LS_DEFAULT_ETH_CONFIG + bool "loongson default config eth dev" + depends on BR2_PACKAGE_NETWORK_MANAGER || BR2_PACKAGE_IFUPDOWN_SCRIPTS + default n + help + if want to set deafult eth dev ip + can select this option + and custom BR2_PACKAGE_LS_DEFAULT_ETH_NAME and BR2_PACKAGE_LS_DEFAULT_ETH_IP value +if BR2_PACKAGE_LS_DEFAULT_ETH_CONFIG + +config BR2_PACKAGE_LS_DEFAULT_ETH_NAME + string "eth dev name list" + depends on BR2_PACKAGE_LS_DEFAULT_ETH_CONFIG + default "eth0" + help + this work by BR2_PACKAGE_LS_DEFAULT_ETH_IP + just set up board default eth dev ip after system boot + e.g. + default value + will let board eth0 dev ip set to be 192.168.10 after boot + if use NetworkManger to set + you can use nmtui to change this defconfig + if use Network (ifupdown scripts package) + you can change /etc/network/interfaces file + if you want to set two or more dev ip + you can set this value like + eth0 eht1 + +config BR2_PACKAGE_LS_DEFAULT_ETH_IP + string "eth dev ip list" + depends on BR2_PACKAGE_LS_DEFAULT_ETH_CONFIG + default "192.168.1.10" + help + this work by BR2_PACKAGE_LS_DEFAULT_ETH_NAME + just set up board default eth dev ip after system boot + e.g. + default value + will let board eth0 dev ip set to be 192.168.10 after boot + if use NetworkManger to set + you can use nmtui to change this defconfig + if use Network (ifupdown scripts package) + you can change /etc/network/interfaces file + if you want to set two or more dev ip + you can set this value like + 192.168.1.10 192.168.2.11 + +endif + diff --git a/package/ls_default_eth_config/ls_default_eth_config.mk b/package/ls_default_eth_config/ls_default_eth_config.mk new file mode 100644 index 00000000..f001d7a9 --- /dev/null +++ b/package/ls_default_eth_config/ls_default_eth_config.mk @@ -0,0 +1,61 @@ +################################################################################ +# +# LS_DEFAULT_ETH_CONFIG +# +################################################################################ + +LS_DEFAULT_ETH_CONFIG_SITE = $(TOPDIR)/package/ls_default_eth_config/ls_default_eth_config.tar.gz +LS_DEFAULT_ETH_CONFIG_SITE_METHOD = file + +define LS_DEFAULT_ETH_CONFIG_EXTRACT_CMDS + echo $(LS_DEFAULT_ETH_CONFIG_SITE) + tar -zxf $(LS_DEFAULT_ETH_CONFIG_SITE) -C $(@D)/ +endef + +ifeq ($(BR2_PACKAGE_IFUPDOWN_SCRIPTS),y) + +BOOT_RUN_DEPENDENCIES = ifupdown-scripts + +define BUILD_LS_DEFAULT_ETH_CONFIG_GEN + echo "generate new interface"; + cd $(@D) && ./gen_interfaces.sh $(BR2_PACKAGE_LS_DEFAULT_ETH_NAME) $(BR2_PACKAGE_LS_DEFAULT_ETH_IP) +endef + +define INSTALL_LS_DEFAULT_ETH_CONFIG_GEN + echo "install interface" + cd $(@D) && cp interfaces $(TARGET_DIR)/etc/network/ +endef + +endif + +ifeq ($(BR2_PACKAGE_NETWORK_MANAGER),y) + +BOOT_RUN_DEPENDENCIES = systemd network-manager + +define BUILD_LS_DEFAULT_ETH_CONFIG_GEN + echo "generate new keep-nmcli.sh" + cd $(@D) && ./gen-keep-nmcli.sh $(BR2_PACKAGE_LS_DEFAULT_ETH_NAME) $(BR2_PACKAGE_LS_DEFAULT_ETH_IP) +endef + +define INSTALL_LS_DEFAULT_ETH_CONFIG_GEN + echo "install keep-nmcli.sh and keep-nmcli.service" + cd $(@D) && cp keep-nmcli.sh $(TARGET_DIR)/root/ + cd $(@D) && cp keep-nmcli.service $(TARGET_DIR)/usr/lib/systemd/system/ + cd $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants && ln -sf ../keep-nmcli.service keep-nmcli.service +endef + +endif + +define LS_DEFAULT_ETH_CONFIG_BUILD_CMDS + $(BUILD_LS_DEFAULT_ETH_CONFIG_GEN) +endef + +define LS_DEFAULT_ETH_CONFIG_INSTALL_STAGING_CMDS + echo "nothing to do" +endef + +define LS_DEFAULT_ETH_CONFIG_INSTALL_TARGET_CMDS + $(INSTALL_LS_DEFAULT_ETH_CONFIG_GEN) +endef + +$(eval $(generic-package)) diff --git a/package/ls_default_eth_config/ls_default_eth_config.tar.gz b/package/ls_default_eth_config/ls_default_eth_config.tar.gz new file mode 100644 index 00000000..9e35abc3 Binary files /dev/null and b/package/ls_default_eth_config/ls_default_eth_config.tar.gz differ diff --git a/package/lshw/0001-Fix-musl-build-basename-is-in-libgen.h.patch b/package/lshw/0001-Fix-musl-build-basename-is-in-libgen.h.patch new file mode 100644 index 00000000..0917260d --- /dev/null +++ b/package/lshw/0001-Fix-musl-build-basename-is-in-libgen.h.patch @@ -0,0 +1,101 @@ +From 6bc5abf99ef01e5aeea4f5bce5f5bff7f1b8ddd9 Mon Sep 17 00:00:00 2001 +From: Sergio Prado +Date: Sat, 4 Jul 2020 20:02:53 -0300 +Subject: [PATCH] Fix musl build: basename() is in libgen.h. + +Also, its argument is not const, so add const_cast. + +Signed-off-by: Arnout Vandecappelle (Essensium/Mind) +Signed-off-by: Sergio Prado +--- + src/core/sysfs.cc | 19 ++++++++++--------- + 1 file changed, 10 insertions(+), 9 deletions(-) + +diff --git a/src/core/sysfs.cc b/src/core/sysfs.cc +index 32d65642f157..c2fa84fe8d0f 100644 +--- a/src/core/sysfs.cc ++++ b/src/core/sysfs.cc +@@ -16,6 +16,7 @@ + #include + #include + #include ++#include + + + __ID("@(#) $Id$"); +@@ -100,7 +101,7 @@ static string sysfs_getbustype(const string & path) + { + devname = + string(fs.path + "/bus/") + string(namelist[i]->d_name) + +- "/devices/" + basename(path.c_str()); ++ "/devices/" + basename(const_cast(path.c_str())); + + if (samefile(devname, path)) + return string(namelist[i]->d_name); +@@ -140,7 +141,7 @@ static string sysfstobusinfo(const string & path) + + if (bustype == "usb") + { +- string name = basename(path.c_str()); ++ string name = basename(const_cast(path.c_str())); + if (matches(name, "^[0-9]+-[0-9]+(\\.[0-9]+)*:[0-9]+\\.[0-9]+$")) + { + size_t colon = name.rfind(":"); +@@ -151,7 +152,7 @@ static string sysfstobusinfo(const string & path) + + if (bustype == "virtio") + { +- string name = basename(path.c_str()); ++ string name = basename(const_cast(path.c_str())); + if (name.compare(0, 6, "virtio") == 0) + return "virtio@" + name.substr(6); + else +@@ -159,10 +160,10 @@ static string sysfstobusinfo(const string & path) + } + + if (bustype == "vio") +- return string("vio@") + basename(path.c_str()); ++ return string("vio@") + basename(const_cast(path.c_str())); + + if (bustype == "ccw") +- return string("ccw@") + basename(path.c_str()); ++ return string("ccw@") + basename(const_cast(path.c_str())); + + if (bustype == "ccwgroup") + { +@@ -240,7 +241,7 @@ string entry::driver() const + string driverlink = This->devpath + "/driver"; + if (!exists(driverlink)) + return ""; +- return basename(readlink(driverlink).c_str()); ++ return basename(const_cast(readlink(driverlink).c_str())); + } + + +@@ -328,7 +329,7 @@ string entry::name_in_class(const string & classname) const + + string entry::name() const + { +- return basename(This->devpath.c_str()); ++ return basename(const_cast(This->devpath.c_str())); + } + + +@@ -340,12 +341,12 @@ entry entry::parent() const + + string entry::classname() const + { +- return basename(dirname(This->devpath).c_str()); ++ return basename(const_cast(dirname(This->devpath).c_str())); + } + + bool entry::isvirtual() const + { +- return string(basename(dirname(dirname(This->devpath)).c_str())) == "virtual"; ++ return string(basename(const_cast(dirname(dirname(This->devpath)).c_str()))) == "virtual"; + } + + string entry::string_attr(const string & name, const string & def) const +-- +2.17.1 + diff --git a/package/lshw/0002-Fix-musl-build-wrong-usage-of-LONG_BIT.patch b/package/lshw/0002-Fix-musl-build-wrong-usage-of-LONG_BIT.patch new file mode 100644 index 00000000..dd8bdb5b --- /dev/null +++ b/package/lshw/0002-Fix-musl-build-wrong-usage-of-LONG_BIT.patch @@ -0,0 +1,38 @@ +From 246b9e07f22d551fae0718315273760c087b79ca Mon Sep 17 00:00:00 2001 +From: Sergio Prado +Date: Sat, 4 Jul 2020 20:28:26 -0300 +Subject: [PATCH] Fix musl build: wrong usage of LONG_BIT + +LONG_BIT is not a sysconf value, it is either 32 or 64. Using it as +a sysconf value will give weird results. + +Originally it was sysconf(_SC_LONG_BIT) (before it was "fixed" by the +gentoo guys). But this is useless: it will always return a value +equal to LONG_BIT: it's either compiled 32-bit or 64-bit so a runtime +lookup doesn't make sense. For this reason, musl has removed the +definition of _SC_LONG_BIT. + +Signed-off-by: Sergio Prado +Signed-off-by: Arnout Vandecappelle (Essensium/Mind) +--- + src/core/abi.cc | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/src/core/abi.cc b/src/core/abi.cc +index adff7b55acfa..76c664c03ce7 100644 +--- a/src/core/abi.cc ++++ b/src/core/abi.cc +@@ -20,9 +20,7 @@ __ID("@(#) $Id: mem.cc 1352 2006-05-27 23:54:13Z ezix $"); + bool scan_abi(hwNode & system) + { + // are we compiled as 32- or 64-bit process ? +- long sc = sysconf(LONG_BIT); +- if(sc==-1) sc = sysconf(_SC_LONG_BIT); +- if(sc!=-1) system.setWidth(sc); ++ system.setWidth(LONG_BIT); + + pushd(PROC_SYS); + +-- +2.17.1 + diff --git a/package/lshw/Config.in b/package/lshw/Config.in new file mode 100644 index 00000000..5e0e47b6 --- /dev/null +++ b/package/lshw/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_LSHW + bool "lshw" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + select BR2_PACKAGE_HWDATA # runtime + select BR2_PACKAGE_HWDATA_PCI_IDS + select BR2_PACKAGE_HWDATA_USB_IDS + help + lshw (Hardware Lister) is a small tool to provide + detailed information on the hardware configuration of the + machine. + + http://ezix.org/project/wiki/HardwareLiSter + +comment "lshw needs a toolchain w/ C++, wchar" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR diff --git a/package/lshw/lshw.hash b/package/lshw/lshw.hash new file mode 100644 index 00000000..0b60b3b5 --- /dev/null +++ b/package/lshw/lshw.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 9bb347ac87142339a366a1759ac845e3dbb337ec000aa1b99b50ac6758a80f80 lshw-B.02.19.2.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/lshw/lshw.mk b/package/lshw/lshw.mk new file mode 100644 index 00000000..9f1ff893 --- /dev/null +++ b/package/lshw/lshw.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# lshw +# +################################################################################ + +LSHW_VERSION = 02.19.2 +LSHW_SITE = http://ezix.org/software/files +LSHW_SOURCE = lshw-B.$(LSHW_VERSION).tar.gz +LSHW_LICENSE = GPL-2.0 +LSHW_LICENSE_FILES = COPYING + +LSHW_MAKE_OPTS = CC="$(TARGET_CC)" CXX="$(TARGET_CXX)" AR="$(TARGET_AR)" \ + RPM_OPT_FLAGS="$(TARGET_CFLAGS)" all +LSHW_MAKE_ENV = \ + $(TARGET_MAKE_ENV) \ + LIBS=$(TARGET_NLS_LIBS) +LSHW_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) + +define LSHW_BUILD_CMDS + $(LSHW_MAKE_ENV) $(MAKE) -C $(@D)/src $(LSHW_MAKE_OPTS) +endef + +define LSHW_INSTALL_TARGET_CMDS + $(LSHW_MAKE_ENV) $(MAKE) -C $(@D)/src DESTDIR=$(TARGET_DIR) \ + $(LSHW_MAKE_OPTS) install + $(RM) -rf $(TARGET_DIR)/usr/share/lshw +endef + +$(eval $(generic-package)) diff --git a/package/lsof/0001-makefile.patch b/package/lsof/0001-makefile.patch new file mode 100644 index 00000000..65b1b2e2 --- /dev/null +++ b/package/lsof/0001-makefile.patch @@ -0,0 +1,14 @@ +diff -ru lsof_4.81.orig/lsof_4.81_src/lib/Makefile.skel lsof_4.81/lsof_4.81_src/lib/Makefile.skel +--- a/lib/Makefile.skel 2001-02-13 03:12:22.000000000 +0100 ++++ b/lib/Makefile.skel 2006-11-29 13:51:44.000000000 +0100 +@@ -21,8 +21,8 @@ + all: ${LIB} + + ${LIB}: ${OBJ} +- ${AR} +- ${RANLIB} ++ ${AR} cr ${LIB} ${OBJ} ++ ${RANLIB} ${LIB} + + clean: FRC + rm -f ${LIB} ${OBJ} errs Makefile.bak a.out core diff --git a/package/lsof/0002-remove-susvlegacy-funcs.patch b/package/lsof/0002-remove-susvlegacy-funcs.patch new file mode 100644 index 00000000..fca66aee --- /dev/null +++ b/package/lsof/0002-remove-susvlegacy-funcs.patch @@ -0,0 +1,12 @@ +diff -rdup lsof_4.81.orig/lsof_4.81_src/dialects/linux/machine.h lsof_4.81/lsof_4.81_src/dialects/linux/machine.h +--- a/dialects/linux/machine.h 2007-04-24 18:20:58.000000000 +0200 ++++ b/dialects/linux/machine.h 2007-05-15 12:17:03.000000000 +0200 +@@ -616,6 +616,6 @@ + * zeromem is a macro that uses bzero or memset. + */ + +-#define zeromem(a, l) bzero(a, l) ++#define zeromem(a, l) memset(a, 0, l) + + #endif /* !defined(LSOF_MACHINE_H) */ + diff --git a/package/lsof/0003-override-cflags.patch b/package/lsof/0003-override-cflags.patch new file mode 100644 index 00000000..135e599a --- /dev/null +++ b/package/lsof/0003-override-cflags.patch @@ -0,0 +1,13 @@ +--- lsof_4.84/Configure 2008-10-21 18:21:45.000000000 +0200 ++++ lsof_4.84/Configure 2010-11-03 14:00:00.000000000 +0100 +@@ -5206,6 +5206,10 @@ + cp $LSOF_MKFC ${LSOF_LIB}/$LSOF_LIBMKF + fi # } + cat ./dialects/$LSOF_DIALECT_DIR/$LSOF_REST >> $LSOF_MKFC ++if test "X$LSOF_CFLAGS_OVERRIDE" != "X" # { ++then ++ sed -i -e 's/^CFLAGS=/override CFLAGS=/' $LSOF_MKFC ++fi # } + if test "X$LSOF_LIB_NO" = "X" # { + then + diff --git a/package/lsof/Config.in b/package/lsof/Config.in new file mode 100644 index 00000000..48ceb39a --- /dev/null +++ b/package/lsof/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LSOF + bool "lsof" + depends on BR2_USE_MMU # fork() + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + lsof (LiSt Open Files) + The lsof tool lists information about files opened by + processes. + + https://github.com/lsof-org/lsof diff --git a/package/lsof/lsof.hash b/package/lsof/lsof.hash new file mode 100644 index 00000000..c7432ffb --- /dev/null +++ b/package/lsof/lsof.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 3df912bd966fc24dc73ddea3e36a61d79270b21b085936a4caabca56e5b486a2 lsof-4.93.2.tar.gz +sha256 32a728188b19bf86917659d904ab29d0a294b4506e1c98b8b7f1c70ab4975fe1 dialects/linux/dproto.h diff --git a/package/lsof/lsof.mk b/package/lsof/lsof.mk new file mode 100644 index 00000000..6aa829c2 --- /dev/null +++ b/package/lsof/lsof.mk @@ -0,0 +1,50 @@ +################################################################################ +# +# lsof +# +################################################################################ + +LSOF_VERSION = 4.93.2 +LSOF_SITE = $(call github,lsof-org,lsof,$(LSOF_VERSION)) +LSOF_LICENSE = lsof license +# License is repeated in each file, this is a relatively small one. +# It is also defined in 00README, but that contains a lot of other cruft. +LSOF_LICENSE_FILES = dialects/linux/dproto.h + +ifeq ($(BR2_PACKAGE_LIBTIRPC),y) +LSOF_DEPENDENCIES += libtirpc +endif + +ifeq ($(BR2_USE_WCHAR),) +define LSOF_CONFIGURE_WCHAR_FIXUPS + $(SED) 's,^#define[[:space:]]*HASWIDECHAR.*,#undef HASWIDECHAR,' \ + $(@D)/machine.h +endef +endif + +ifeq ($(BR2_ENABLE_LOCALE),) +define LSOF_CONFIGURE_LOCALE_FIXUPS + $(SED) 's,^#define[[:space:]]*HASSETLOCALE.*,#undef HASSETLOCALE,' \ + $(@D)/machine.h +endef +endif + +define LSOF_CONFIGURE_CMDS + (cd $(@D) ; \ + echo n | $(TARGET_CONFIGURE_OPTS) DEBUG="$(TARGET_CFLAGS)" \ + LSOF_INCLUDE="$(STAGING_DIR)/usr/include" LSOF_CFLAGS_OVERRIDE=1 \ + LINUX_CLIB=-DGLIBCV=2 LSOF_CFGL="$(TARGET_LDFLAGS)" \ + ./Configure linux) + $(LSOF_CONFIGURE_WCHAR_FIXUPS) + $(LSOF_CONFIGURE_LOCALE_FIXUPS) +endef + +define LSOF_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) DEBUG="$(TARGET_CFLAGS)" -C $(@D) +endef + +define LSOF_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 755 $(@D)/lsof $(TARGET_DIR)/usr/bin/lsof +endef + +$(eval $(generic-package)) diff --git a/package/lsqlite3/Config.in b/package/lsqlite3/Config.in new file mode 100644 index 00000000..932657e5 --- /dev/null +++ b/package/lsqlite3/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LSQLITE3 + bool "lsqlite3" + select BR2_PACKAGE_SQLITE + help + A binding for Lua to the SQLite3 database library. + + http://lua.sqlite.org/ diff --git a/package/lsqlite3/lsqlite3.hash b/package/lsqlite3/lsqlite3.hash new file mode 100644 index 00000000..8ed98982 --- /dev/null +++ b/package/lsqlite3/lsqlite3.hash @@ -0,0 +1,2 @@ +# computed by luarocks/buildroot +sha256 fdae3c03390ab4e4b7db3a13d09b79ffe19318739b752d17914adcdb3d2ef9ff lsqlite3-0.9.5-1.src.rock diff --git a/package/lsqlite3/lsqlite3.mk b/package/lsqlite3/lsqlite3.mk new file mode 100644 index 00000000..bbf6a1db --- /dev/null +++ b/package/lsqlite3/lsqlite3.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# lsqlite3 +# +################################################################################ + +LSQLITE3_VERSION = 0.9.5-1 +LSQLITE3_SUBDIR = lsqlite3_fsl09y +LSQLITE3_LICENSE = MIT +LSQLITE3_DEPENDENCIES = sqlite + +$(eval $(luarocks-package)) diff --git a/package/lsscsi/Config.in b/package/lsscsi/Config.in new file mode 100644 index 00000000..1c856863 --- /dev/null +++ b/package/lsscsi/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LSSCSI + bool "lsscsi" + help + lsscsi - list SCSI devices (or hosts) and their attributes + + http://sg.danny.cz/scsi/lsscsi.html diff --git a/package/lsscsi/lsscsi.hash b/package/lsscsi/lsscsi.hash new file mode 100644 index 00000000..d444c7e0 --- /dev/null +++ b/package/lsscsi/lsscsi.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 12bf1973014803c6fd6d547e7594a4c049f0eef3bf5d22190d4be29d7c09f3ca lsscsi-0.31.tgz +sha256 dcc100d4161cc0b7177545ab6e47216f84857cda3843847c792a25289852dcaa COPYING diff --git a/package/lsscsi/lsscsi.mk b/package/lsscsi/lsscsi.mk new file mode 100644 index 00000000..e9a52553 --- /dev/null +++ b/package/lsscsi/lsscsi.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# lsscsi +# +################################################################################ + +LSSCSI_VERSION = 0.31 +LSSCSI_SOURCE = lsscsi-$(LSSCSI_VERSION).tgz +LSSCSI_SITE = http://sg.danny.cz/scsi +LSSCSI_LICENSE = GPL-2.0+ +LSSCSI_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/lsuio/Config.in b/package/lsuio/Config.in new file mode 100644 index 00000000..675a318c --- /dev/null +++ b/package/lsuio/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LSUIO + bool "lsuio" + help + list available userspace I/O (UIO) devices + + http://www.osadl.org/UIO.uio.0.html diff --git a/package/lsuio/lsuio.hash b/package/lsuio/lsuio.hash new file mode 100644 index 00000000..2df6d074 --- /dev/null +++ b/package/lsuio/lsuio.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 c88b3850248b2d3419e025abd7b9b0991c8bd33a2d4983f9608408a29900bfb5 lsuio-0.2.0.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/lsuio/lsuio.mk b/package/lsuio/lsuio.mk new file mode 100644 index 00000000..193de15a --- /dev/null +++ b/package/lsuio/lsuio.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# lsuio +# +################################################################################ + +LSUIO_VERSION = 0.2.0 +LSUIO_SITE = http://www.osadl.org/projects/downloads/UIO/user +LSUIO_LICENSE = GPL-2.0 +LSUIO_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/ltp-testsuite/0001-lapi-Add-sysinfo.h-to-fix-build-with-MUSL-libc.patch b/package/ltp-testsuite/0001-lapi-Add-sysinfo.h-to-fix-build-with-MUSL-libc.patch new file mode 100644 index 00000000..2893026c --- /dev/null +++ b/package/ltp-testsuite/0001-lapi-Add-sysinfo.h-to-fix-build-with-MUSL-libc.patch @@ -0,0 +1,211 @@ +From ac3e262cba81889c0bb04ce87a50a1709f2726e7 Mon Sep 17 00:00:00 2001 +From: Petr Vorel +Date: Thu, 1 Oct 2020 23:28:39 +0200 +Subject: [PATCH] lapi: Add sysinfo.h to fix build with MUSL libc +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The reason is to avoid indirect include when using +some network headers: or others -> +-> + +This indirect include causes on MUSL redefinition of struct sysinfo when +included both and some of UAPI headers: + +In file included from x86_64-buildroot-linux-musl/sysroot/usr/include/linux/kernel.h:5, + from x86_64-buildroot-linux-musl/sysroot/usr/include/linux/netlink.h:5, + from ../include/tst_netlink.h:14, + from tst_crypto.c:13: +x86_64-buildroot-linux-musl/sysroot/usr/include/linux/sysinfo.h:8:8: error: redefinition of ‘struct sysinfo’ + struct sysinfo { + ^~~~~~~ +In file included from ../include/tst_safe_macros.h:15, + from ../include/tst_test.h:93, + from tst_crypto.c:11: +x86_64-buildroot-linux-musl/sysroot/usr/include/sys/sysinfo.h:10:8: note: originally defined here + +Signed-off-by: Petr Vorel + +[ upstream status: https://patchwork.ozlabs.org/project/ltp/patch/20201001231256.6930-1-petr.vorel@gmail.com/ + +But this patch is not going to get upstreamed because it got fixed in Linux kernel: +a85cbe6159ff "uapi: move constants from to " + +This patch was also backported to stable and LTS versions, +which we use since buildroot 54584d233b "{linux, linux-headers}: bump +5.{4, 10}.x 4.{4, 9, 14, 19} series". +We just wait for all musl based toolchains to be rebuilt. ] +--- + include/lapi/sysinfo.h | 22 +++++++++++++++++++ + include/tst_safe_macros.h | 2 +- + lib/safe_macros.c | 2 +- + lib/tst_memutils.c | 2 +- + testcases/kernel/mem/mtest01/mtest01.c | 2 +- + testcases/kernel/syscalls/madvise/madvise06.c | 2 +- + testcases/kernel/syscalls/sysinfo/sysinfo01.c | 2 +- + testcases/kernel/syscalls/sysinfo/sysinfo02.c | 2 +- + testcases/kernel/syscalls/sysinfo/sysinfo03.c | 2 +- + 9 files changed, 30 insertions(+), 8 deletions(-) + create mode 100644 include/lapi/sysinfo.h + +diff --git a/include/lapi/sysinfo.h b/include/lapi/sysinfo.h +new file mode 100644 +index 000000000..d0e0e93d7 +--- /dev/null ++++ b/include/lapi/sysinfo.h +@@ -0,0 +1,22 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later ++/* ++ * Copyright (c) 2020 Petr Vorel ++ */ ++ ++#ifndef SYSINFO_H__ ++ ++/* ++ * Don't use as it breaks build MUSL toolchain. ++ * Use instead. ++ * ++ * Some kernel UAPI headers do indirect include: ++ * or others -> -> ++ * ++ * This indirect include causes on MUSL redefinition of struct sysinfo when ++ * included both and some of UAPI headers: ++ */ ++#include ++ ++#define SYSINFO_H__ ++ ++#endif /* SYSINFO_H__ */ +diff --git a/include/tst_safe_macros.h b/include/tst_safe_macros.h +index ee3df4142..3cb1623f9 100644 +--- a/include/tst_safe_macros.h ++++ b/include/tst_safe_macros.h +@@ -12,7 +12,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +diff --git a/lib/safe_macros.c b/lib/safe_macros.c +index a5b6bc504..20d01d304 100644 +--- a/lib/safe_macros.c ++++ b/lib/safe_macros.c +@@ -11,7 +11,6 @@ + #include + #include + #include +-#include + #include + #include + #include +@@ -23,6 +22,7 @@ + #include + #include "test.h" + #include "safe_macros.h" ++#include "lapi/sysinfo.h" + + char *safe_basename(const char *file, const int lineno, + void (*cleanup_fn) (void), char *path) +diff --git a/lib/tst_memutils.c b/lib/tst_memutils.c +index dd09db490..085392365 100644 +--- a/lib/tst_memutils.c ++++ b/lib/tst_memutils.c +@@ -5,11 +5,11 @@ + + #include + #include +-#include + #include + + #define TST_NO_DEFAULT_MAIN + #include "tst_test.h" ++#include "lapi/sysinfo.h" + + #define BLOCKSIZE (16 * 1024 * 1024) + +diff --git a/testcases/kernel/mem/mtest01/mtest01.c b/testcases/kernel/mem/mtest01/mtest01.c +index 9676ea4b5..33b2ac822 100644 +--- a/testcases/kernel/mem/mtest01/mtest01.c ++++ b/testcases/kernel/mem/mtest01/mtest01.c +@@ -20,7 +20,6 @@ + */ + + #include +-#include + #include + #include + #include +@@ -29,6 +28,7 @@ + #include + + #include "lapi/abisize.h" ++#include "lapi/sysinfo.h" + #include "tst_test.h" + + #define FIVE_HUNDRED_MB (500ULL*1024*1024) +diff --git a/testcases/kernel/syscalls/madvise/madvise06.c b/testcases/kernel/syscalls/madvise/madvise06.c +index 962554163..aa4d3bc91 100644 +--- a/testcases/kernel/syscalls/madvise/madvise06.c ++++ b/testcases/kernel/syscalls/madvise/madvise06.c +@@ -41,7 +41,7 @@ + #include + #include + #include +-#include ++#include "lapi/sysinfo.h" + #include "tst_test.h" + + #define CHUNK_SZ (400*1024*1024L) +diff --git a/testcases/kernel/syscalls/sysinfo/sysinfo01.c b/testcases/kernel/syscalls/sysinfo/sysinfo01.c +index 2ea44a2be..a95066bf5 100644 +--- a/testcases/kernel/syscalls/sysinfo/sysinfo01.c ++++ b/testcases/kernel/syscalls/sysinfo/sysinfo01.c +@@ -69,9 +69,9 @@ + #include + #include + #include +-#include + + #include "test.h" ++#include "lapi/sysinfo.h" + + void setup(); + void cleanup(); +diff --git a/testcases/kernel/syscalls/sysinfo/sysinfo02.c b/testcases/kernel/syscalls/sysinfo/sysinfo02.c +index 678b8f1d3..5ce65d20e 100644 +--- a/testcases/kernel/syscalls/sysinfo/sysinfo02.c ++++ b/testcases/kernel/syscalls/sysinfo/sysinfo02.c +@@ -65,10 +65,10 @@ + #include + #include + #include +-#include + #include + + #include "test.h" ++#include "lapi/sysinfo.h" + + #define INVALID_ADDRESS ((uintptr_t)-1) + +diff --git a/testcases/kernel/syscalls/sysinfo/sysinfo03.c b/testcases/kernel/syscalls/sysinfo/sysinfo03.c +index af7cb6421..3b61a05b1 100644 +--- a/testcases/kernel/syscalls/sysinfo/sysinfo03.c ++++ b/testcases/kernel/syscalls/sysinfo/sysinfo03.c +@@ -13,9 +13,9 @@ + + */ + +-#include + #include "lapi/namespaces_constants.h" + #include "lapi/posix_clocks.h" ++#include "lapi/sysinfo.h" + #include "tst_test.h" + + static int offsets[] = { +-- +2.30.0 + diff --git a/package/ltp-testsuite/Config.in b/package/ltp-testsuite/Config.in new file mode 100644 index 00000000..32e1b6ad --- /dev/null +++ b/package/ltp-testsuite/Config.in @@ -0,0 +1,26 @@ +config BR2_PACKAGE_LTP_TESTSUITE_ARCH_SUPPORTS + bool + # Needs __sync*() built-ins for 4-byte data, except on a few + # architectures for which a specific implementation is + # provided in ltp-testsuite + default y if BR2_TOOLCHAIN_HAS_SYNC_4 + default y if BR2_arc + # does not build on nios2, cachectl.h issue + depends on !BR2_nios2 + +config BR2_PACKAGE_LTP_TESTSUITE + bool "ltp-testsuite" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_PACKAGE_LTP_TESTSUITE_ARCH_SUPPORTS + select BR2_PACKAGE_LIBTIRPC if !BR2_TOOLCHAIN_HAS_NATIVE_RPC + select BR2_PACKAGE_MUSL_FTS if !BR2_TOOLCHAIN_USES_GLIBC + help + The Linux Test Project provides a huge testsuite for Linux. + + http://linux-test-project.github.io + +comment "ltp-testsuite needs a toolchain w/ NPTL" + depends on BR2_PACKAGE_LTP_TESTSUITE_ARCH_SUPPORTS + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL diff --git a/package/ltp-testsuite/ltp-testsuite.hash b/package/ltp-testsuite/ltp-testsuite.hash new file mode 100644 index 00000000..f0b2c897 --- /dev/null +++ b/package/ltp-testsuite/ltp-testsuite.hash @@ -0,0 +1,4 @@ +# From: https://github.com/linux-test-project/ltp/releases/download/20210121/ltp-full-20210121.tar.xz.sha1 +sha1 ac9c1c711aed4319c5fbd0b665d36f75236a4ec2 ltp-full-20210121.tar.xz +# Locally computed +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/ltp-testsuite/ltp-testsuite.mk b/package/ltp-testsuite/ltp-testsuite.mk new file mode 100644 index 00000000..43ee134d --- /dev/null +++ b/package/ltp-testsuite/ltp-testsuite.mk @@ -0,0 +1,94 @@ +################################################################################ +# +# ltp-testsuite +# +################################################################################ + +LTP_TESTSUITE_VERSION = 20210121 +LTP_TESTSUITE_SOURCE = ltp-full-$(LTP_TESTSUITE_VERSION).tar.xz +LTP_TESTSUITE_SITE = https://github.com/linux-test-project/ltp/releases/download/$(LTP_TESTSUITE_VERSION) + +LTP_TESTSUITE_LICENSE = GPL-2.0, GPL-2.0+ +LTP_TESTSUITE_LICENSE_FILES = COPYING + +LTP_TESTSUITE_CONF_OPTS += \ + --with-realtime-testsuite --with-open-posix-testsuite \ + --disable-metadata + +ifeq ($(BR2_LINUX_KERNEL),y) +LTP_TESTSUITE_DEPENDENCIES += linux +LTP_TESTSUITE_MAKE_ENV += $(LINUX_MAKE_FLAGS) +LTP_TESTSUITE_CONF_OPTS += --with-linux-dir=$(LINUX_DIR) +else +LTP_TESTSUITE_CONF_OPTS += --without-modules +endif + +# We change the prefix to a custom one, otherwise we get scripts and +# directories directly in /usr, such as /usr/runalltests.sh +LTP_TESTSUITE_CONF_OPTS += --prefix=/usr/lib/ltp-testsuite + +# Needs libcap with file attrs which needs attr, so both required +ifeq ($(BR2_PACKAGE_LIBCAP)$(BR2_PACKAGE_ATTR),yy) +LTP_TESTSUITE_DEPENDENCIES += libcap +else +LTP_TESTSUITE_CONF_ENV += ac_cv_lib_cap_cap_compare=no +endif + +# No explicit enable/disable options +ifeq ($(BR2_PACKAGE_NUMACTL),y) +LTP_TESTSUITE_DEPENDENCIES += numactl +else +LTP_TESTSUITE_CONF_ENV += have_numa_headers=no +endif + +# ltp-testsuite uses , which isn't compatible with largefile +# support. +LTP_TESTSUITE_CFLAGS = $(filter-out -D_FILE_OFFSET_BITS=64,$(TARGET_CFLAGS)) +LTP_TESTSUITE_CPPFLAGS = $(filter-out -D_FILE_OFFSET_BITS=64,$(TARGET_CPPFLAGS)) +LTP_TESTSUITE_LIBS = + +ifeq ($(BR2_PACKAGE_LIBTIRPC),y) +LTP_TESTSUITE_DEPENDENCIES += libtirpc host-pkgconf +LTP_TESTSUITE_CFLAGS += "`$(PKG_CONFIG_HOST_BINARY) --cflags libtirpc`" +LTP_TESTSUITE_LIBS += "`$(PKG_CONFIG_HOST_BINARY) --libs libtirpc`" +endif + +ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),) +LTP_TESTSUITE_DEPENDENCIES += musl-fts +LTP_TESTSUITE_LIBS += -lfts +endif + +LTP_TESTSUITE_CONF_ENV += \ + CFLAGS="$(LTP_TESTSUITE_CFLAGS)" \ + CPPFLAGS="$(LTP_TESTSUITE_CPPFLAGS)" \ + LIBS="$(LTP_TESTSUITE_LIBS)" \ + SYSROOT="$(STAGING_DIR)" + +# uclibc: bessel support normally not enabled +LTP_TESTSUITE_UNSUPPORTED_TEST_CASES_$(BR2_TOOLCHAIN_USES_UCLIBC) += \ + testcases/misc/math/float/bessel/ \ + testcases/misc/math/float/float_bessel.c + +LTP_TESTSUITE_UNSUPPORTED_TEST_CASES_$(BR2_TOOLCHAIN_USES_MUSL) += \ + testcases/kernel/sched/process_stress/process.c \ + testcases/kernel/syscalls/confstr/confstr01.c \ + testcases/kernel/syscalls/fmtmsg/fmtmsg01.c \ + testcases/kernel/syscalls/getcontext/getcontext01.c \ + testcases/kernel/syscalls/rt_tgsigqueueinfo/rt_tgsigqueueinfo01.c \ + testcases/kernel/syscalls/timer_create/timer_create01.c \ + testcases/kernel/syscalls/timer_create/timer_create03.c \ + utils/benchmark/ebizzy-0.3 + +# ldd command build system tries to build a shared library unconditionally. +LTP_TESTSUITE_UNSUPPORTED_TEST_CASES_$(BR2_STATIC_LIBS) += \ + testcases/commands/ldd + +define LTP_TESTSUITE_REMOVE_UNSUPPORTED_TESTCASES + $(foreach f,$(LTP_TESTSUITE_UNSUPPORTED_TEST_CASES_y), + rm -rf $(@D)/$(f) + ) +endef + +LTP_TESTSUITE_POST_PATCH_HOOKS += LTP_TESTSUITE_REMOVE_UNSUPPORTED_TESTCASES + +$(eval $(autotools-package)) diff --git a/package/ltrace/0001-arm-plt.patch b/package/ltrace/0001-arm-plt.patch new file mode 100644 index 00000000..f130ce84 --- /dev/null +++ b/package/ltrace/0001-arm-plt.patch @@ -0,0 +1,30 @@ +From 04377d28135e351c8d096c4392a493e937416815 Mon Sep 17 00:00:00 2001 +From: Alexandre Belloni +Date: Thu, 24 Jul 2014 23:15:20 +0200 +Subject: [PATCH] Allow building with uclibc toolchains + +Unfortunately, uclicbc doesn't define SHT_ARM_ATTRIBUTES in elf.h + +Signed-off-by: Alexandre Belloni +--- + sysdeps/linux-gnu/arm/plt.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/sysdeps/linux-gnu/arm/plt.c b/sysdeps/linux-gnu/arm/plt.c +index 9e9e37f0c5b0..a0a5795eb9cb 100644 +--- a/sysdeps/linux-gnu/arm/plt.c ++++ b/sysdeps/linux-gnu/arm/plt.c +@@ -28,6 +28,10 @@ + #include "library.h" + #include "ltrace-elf.h" + ++#ifndef SHT_ARM_ATTRIBUTES ++#define SHT_ARM_ATTRIBUTES 0x70000003 ++#endif ++ + static int + get_hardfp(uint64_t abi_vfp_args) + { +-- +1.9.1 + diff --git a/package/ltrace/0002-sparc-add-missing-library.h-include.patch b/package/ltrace/0002-sparc-add-missing-library.h-include.patch new file mode 100644 index 00000000..01f1f2ed --- /dev/null +++ b/package/ltrace/0002-sparc-add-missing-library.h-include.patch @@ -0,0 +1,36 @@ +From 4e58f53b7886420d002e5919f279acd6d7c4afd1 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 22 Dec 2015 21:47:45 +0100 +Subject: [PATCH] sparc: add missing library.h include +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Fixes the following build failure on sparc: + +plt.c: In function ‘sym2addr’: +plt.c:33:12: error: dereferencing pointer to incomplete type + return sym->enter_addr; + ^ +plt.c:34:1: warning: control reaches end of non-void function [-Wreturn-type] + +Signed-off-by: Thomas Petazzoni +--- + sysdeps/linux-gnu/sparc/plt.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/sysdeps/linux-gnu/sparc/plt.c b/sysdeps/linux-gnu/sparc/plt.c +index 3d2e589..959eed1 100644 +--- a/sysdeps/linux-gnu/sparc/plt.c ++++ b/sysdeps/linux-gnu/sparc/plt.c +@@ -21,6 +21,7 @@ + #include + #include "proc.h" + #include "common.h" ++#include "library.h" + + GElf_Addr + arch_plt_sym_val(struct ltelf *lte, size_t ndx, GElf_Rela * rela) { +-- +2.6.4 + diff --git a/package/ltrace/Config.in b/package/ltrace/Config.in new file mode 100644 index 00000000..ce5a85ed --- /dev/null +++ b/package/ltrace/Config.in @@ -0,0 +1,33 @@ +config BR2_PACKAGE_LTRACE_ARCH_SUPPORTS + bool + default y if BR2_aarch64 + default y if BR2_arm + default y if BR2_i386 + default y if BR2_mips + default y if BR2_mipsel + default y if BR2_powerpc + default y if BR2_sparc + default y if BR2_x86_64 + default y if BR2_xtensa + +config BR2_PACKAGE_LTRACE + bool "ltrace" + depends on BR2_USE_WCHAR # elfutils + depends on !BR2_STATIC_LIBS # elfutils + depends on BR2_TOOLCHAIN_HAS_THREADS # elfutils + depends on BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC # elfutils + depends on BR2_PACKAGE_LTRACE_ARCH_SUPPORTS + select BR2_PACKAGE_ELFUTILS + help + Debugging program which runs a specified command until it + exits. While the command is executing, ltrace intercepts and + records the dynamic library calls which are called by the + executed process and the signals received by that process. + + http://ltrace.org + +comment "ltrace needs a uClibc or glibc toolchain w/ wchar, dynamic library, threads" + depends on BR2_PACKAGE_LTRACE_ARCH_SUPPORTS + depends on !BR2_USE_WCHAR || BR2_STATIC_LIBS \ + || !BR2_TOOLCHAIN_HAS_THREADS \ + || !(BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC) diff --git a/package/ltrace/ltrace.hash b/package/ltrace/ltrace.hash new file mode 100644 index 00000000..a677ed35 --- /dev/null +++ b/package/ltrace/ltrace.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 4aecf69e4a33331aed1e50ce4907e73a98cbccc4835febc3473863474304d547 ltrace-82c66409c7a93ca6ad2e4563ef030dfb7e6df4d4.tar.gz +sha256 e6d6a009505e345fe949e1310334fcb0747f28dae2856759de102ab66b722cb4 COPYING diff --git a/package/ltrace/ltrace.mk b/package/ltrace/ltrace.mk new file mode 100644 index 00000000..b3bd90da --- /dev/null +++ b/package/ltrace/ltrace.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# ltrace +# +################################################################################ + +# This github version has some extra fixes on top of https://ltrace.org/ +# in particular the following commit to avoid a crash: +# 192e0a6 void struct members are now ignored +LTRACE_VERSION = 82c66409c7a93ca6ad2e4563ef030dfb7e6df4d4 +LTRACE_SITE = $(call github,dkogan,ltrace,$(LTRACE_VERSION)) +LTRACE_DEPENDENCIES = elfutils +LTRACE_CONF_OPTS = --disable-werror +LTRACE_LICENSE = GPL-2.0 +LTRACE_LICENSE_FILES = COPYING +LTRACE_AUTORECONF = YES + +# ltrace can use libunwind only if libc has backtrace() support +# We don't normally do so for uClibc and we can't know if it's external +# Also ltrace with libunwind support is broken for MIPS so we disable it +ifeq ($(BR2_PACKAGE_LIBUNWIND),y) +ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC)$(BR2_mips)$(BR2_mipsel),) +# --with-elfutils only selects unwinding support backend. elfutils is a +# mandatory dependency regardless. +LTRACE_CONF_OPTS += --with-libunwind=yes --with-elfutils=no +LTRACE_DEPENDENCIES += libunwind +else +LTRACE_CONF_OPTS += --with-libunwind=no +endif +endif + +$(eval $(autotools-package)) diff --git a/package/ltris/0001-fix-build-with-gcc-4.8.patch b/package/ltris/0001-fix-build-with-gcc-4.8.patch new file mode 100644 index 00000000..d6bbf6a9 --- /dev/null +++ b/package/ltris/0001-fix-build-with-gcc-4.8.patch @@ -0,0 +1,20 @@ +Fix build with gcc 4.8 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://sourceforge.net/p/lgames/patches/28] +Index: ltris/src/bowl.c +=================================================================== +--- ltris/src/bowl.c (révision 421) ++++ ltris/src/bowl.c (copie de travail) +@@ -828,9 +828,10 @@ + */ + void bowl_init_block_masks() + { ++ int i; + int masksize = sizeof(block_masks[0].mask); // same for all + +- for (int i = 0; i < 7; i++) { ++ for (i = 0; i < 7; i++) { + block_masks[i].rx = 2; + block_masks[i].ry = 2; + memset(block_masks[i].mask, 0, masksize ); diff --git a/package/ltris/Config.in b/package/ltris/Config.in new file mode 100644 index 00000000..7d9dc04a --- /dev/null +++ b/package/ltris/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_LTRIS + bool "LTris" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_SDL + help + LTris is a tetris clone, using SDL. It optionally requires + SDL_mixer for audio support. A display with minimum 640x480 + resolution and a keyboard are recommended. + + http://lgames.sourceforge.net/index.php?project=LTris + +if BR2_PACKAGE_LTRIS + +config BR2_PACKAGE_LTRIS_AUDIO + bool "audio support" + default y + select BR2_PACKAGE_SDL_MIXER + help + Activates audio support in LTris. Will add SDL_mixer. + +endif diff --git a/package/ltris/ltris.hash b/package/ltris/ltris.hash new file mode 100644 index 00000000..f696e3af --- /dev/null +++ b/package/ltris/ltris.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 a7bc6c5fc6539b88505077a1b4580edc9b179ce0a6b829c58fbd9416cf456195 ltris-1.2.tar.gz +sha256 67f82e045cf7acfef853ea0f426575a8359161a0a325e19f02b529a87c4b6c34 COPYING diff --git a/package/ltris/ltris.mk b/package/ltris/ltris.mk new file mode 100644 index 00000000..9b596134 --- /dev/null +++ b/package/ltris/ltris.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# ltris +# +################################################################################ + +LTRIS_SITE = http://downloads.sourceforge.net/lgames/ltris +LTRIS_VERSION = 1.2 +LTRIS_LICENSE = GPL-2.0+ +LTRIS_LICENSE_FILES = COPYING + +LTRIS_DEPENDENCIES = sdl $(TARGET_NLS_DEPENDENCIES) +LTRIS_LIBS = $(TARGET_NLS_LIBS) + +LTRIS_CONF_ENV = \ + SDL_CONFIG="$(STAGING_DIR)/usr/bin/sdl-config" \ + LIBS="$(LTRIS_LIBS)" + +ifeq ($(BR2_PACKAGE_LTRIS_AUDIO),y) +LTRIS_DEPENDENCIES += sdl_mixer host-pkgconf +LTRIS_CONF_OPTS += --enable-sound +# configure script does NOT use pkg-config to figure out how to link +# with sdl_mixer, breaking static linking as sdl_mixer can use libmad +LTRIS_LIBS += `$(PKG_CONFIG_HOST_BINARY) --libs SDL_mixer` +else +LTRIS_CONF_OPTS += --disable-sound +endif + +$(eval $(autotools-package)) diff --git a/package/lttng-babeltrace/0001-tests-lib-Makefile.am-remove-unneeded-static-flag.patch b/package/lttng-babeltrace/0001-tests-lib-Makefile.am-remove-unneeded-static-flag.patch new file mode 100644 index 00000000..b903d872 --- /dev/null +++ b/package/lttng-babeltrace/0001-tests-lib-Makefile.am-remove-unneeded-static-flag.patch @@ -0,0 +1,36 @@ +From 27e37d2621317d25e08ba0683bf8540b05b9347d Mon Sep 17 00:00:00 2001 +From: Philippe Proulx +Date: Fri, 28 Oct 2016 02:09:20 -0400 +Subject: [PATCH] tests/lib/Makefile.am: remove unneeded -static flag + +Having those -static flags breaks the build in shared-only builds. + +Signed-off-by: Philippe Proulx +[Philippe: grabbed from this pull request: + https://github.com/efficios/babeltrace/pull/49 +] +--- + tests/lib/Makefile.am | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/tests/lib/Makefile.am b/tests/lib/Makefile.am +index 33ada16..c685e77 100644 +--- a/tests/lib/Makefile.am ++++ b/tests/lib/Makefile.am +@@ -31,13 +31,11 @@ check_SCRIPTS = test_seek_big_trace \ + test_ctf_writer_complete + + if ENABLE_DEBUG_INFO +-test_dwarf_LDFLAGS = -static + test_dwarf_LDADD = $(LIBTAP) \ + $(top_builddir)/lib/libbabeltrace.la \ + $(top_builddir)/lib/libdebug-info.la + test_dwarf_SOURCES = test_dwarf.c + +-test_bin_info_LDFLAGS = -static + test_bin_info_LDADD = $(LIBTAP) \ + $(top_builddir)/lib/libbabeltrace.la \ + $(top_builddir)/lib/libdebug-info.la +-- +2.9.3 + diff --git a/package/lttng-babeltrace/Config.in b/package/lttng-babeltrace/Config.in new file mode 100644 index 00000000..ba6b5543 --- /dev/null +++ b/package/lttng-babeltrace/Config.in @@ -0,0 +1,35 @@ +config BR2_PACKAGE_LTTNG_BABELTRACE + bool "lttng-babeltrace" + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_POPT + help + The Babeltrace project provides trace read and write + libraries, as well as a trace converter application. Plugins + can be created for any trace format to allow its conversion + to/from another trace format. + + Babeltrace is the reference implementation of the Common + Trace Format (see ). Babeltrace + can decode and display LTTng traces, since the latter are + written using the CTF format. + + To get support for debugging information, enable the + elfutils package. + + Having this tool on the target is not mandatory. You can + transfer the binary trace output from the target to your + development workstation, and use babeltrace here. + + See the lttng-babeltrace host utility to install Babeltrace + on the host. + + http://diamon.org/babeltrace + +comment "lttng-babeltrace needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/lttng-babeltrace/Config.in.host b/package/lttng-babeltrace/Config.in.host new file mode 100644 index 00000000..71b9c7d9 --- /dev/null +++ b/package/lttng-babeltrace/Config.in.host @@ -0,0 +1,14 @@ +config BR2_PACKAGE_HOST_LTTNG_BABELTRACE + bool "host lttng-babeltrace" + help + The Babeltrace project provides trace read and write + libraries, as well as a trace converter application. Plugins + can be created for any trace format to allow its conversion + to/from another trace format. + + Babeltrace is the reference implementation of the Common + Trace Format (see ). Babeltrace + can decode and display LTTng traces, since the latter are + written using the CTF format. + + http://diamon.org/babeltrace diff --git a/package/lttng-babeltrace/lttng-babeltrace.hash b/package/lttng-babeltrace/lttng-babeltrace.hash new file mode 100644 index 00000000..7c114ac7 --- /dev/null +++ b/package/lttng-babeltrace/lttng-babeltrace.hash @@ -0,0 +1,7 @@ +# From http://www.efficios.com/files/babeltrace/babeltrace-1.5.7.tar.bz2.sha256 +sha256 215331e025ffd39c665a34231b9429180e48aca78f79fb972d0bf1322d2b807b babeltrace-1.5.7.tar.bz2 + +# Hash for license files +sha256 2f801b7c2494850c3d91da820eb230502dc0192c9d0db024db37ec08d0be1434 mit-license.txt +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 gpl-2.0.txt +sha256 12d4222ac628fe4092cba8ed90bc5227a4dedd0b94973273cecbc393325bf1c2 LICENSE diff --git a/package/lttng-babeltrace/lttng-babeltrace.mk b/package/lttng-babeltrace/lttng-babeltrace.mk new file mode 100644 index 00000000..363d7f5b --- /dev/null +++ b/package/lttng-babeltrace/lttng-babeltrace.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# lttng-babeltrace +# +################################################################################ + +LTTNG_BABELTRACE_SITE = http://www.efficios.com/files/babeltrace +LTTNG_BABELTRACE_VERSION = 1.5.7 +LTTNG_BABELTRACE_SOURCE = babeltrace-$(LTTNG_BABELTRACE_VERSION).tar.bz2 +LTTNG_BABELTRACE_LICENSE = MIT, LGPL-2.1 (include/babeltrace/list.h), GPL-2.0 (test code) +LTTNG_BABELTRACE_LICENSE_FILES = mit-license.txt gpl-2.0.txt LICENSE +LTTNG_BABELTRACE_DEPENDENCIES = popt util-linux libglib2 host-pkgconf +# The host-elfutils dependency is optional, but since we don't have +# options for host packages, just build support for it +# unconditionally. +HOST_LTTNG_BABELTRACE_DEPENDENCIES = \ + host-popt host-util-linux host-libglib2 host-pkgconf host-elfutils +HOST_LTTNG_BABELTRACE_CONF_OPTS += --enable-debug-info + +# We're patching tests/lib/Makefile.am +LTTNG_BABELTRACE_AUTORECONF = YES + +ifeq ($(BR2_PACKAGE_ELFUTILS),y) +LTTNG_BABELTRACE_DEPENDENCIES += elfutils +LTTNG_BABELTRACE_CONF_OPTS += --enable-debug-info +LTTNG_BABELTRACE_CONF_ENV += bt_cv_lib_elfutils=yes +else +LTTNG_BABELTRACE_CONF_OPTS += --disable-debug-info +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/lttng-libust/Config.in b/package/lttng-libust/Config.in new file mode 100644 index 00000000..8472cab7 --- /dev/null +++ b/package/lttng-libust/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_LTTNG_LIBUST + bool "lttng-libust" + depends on BR2_USE_WCHAR # uses wchar_t + # liburcu only works on some architectures and requires threads support" + depends on BR2_PACKAGE_LIBURCU_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_LIBURCU + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + help + Userspace tracing library for the LTTng 2.x tracing + infrastructure. It allows userspace programs to create + custom trace events that are integrated with all other + events gathered by LTTng. + + http://lttng.org + +comment "lttng-libust needs a toolchain w/ dynamic library, wchar, threads" + depends on BR2_PACKAGE_LIBURCU_ARCH_SUPPORTS + depends on BR2_STATIC_LIBS || !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/lttng-libust/lttng-libust.hash b/package/lttng-libust/lttng-libust.hash new file mode 100644 index 00000000..62a65897 --- /dev/null +++ b/package/lttng-libust/lttng-libust.hash @@ -0,0 +1,5 @@ +# From https://lttng.org/files/lttng-ust/lttng-ust-2.12.0.tar.bz2.sha256 +sha256 1983edb525f3f27e3494088d8d5389b4c71af66bbfe63c6f1df2ad95aa44a528 lttng-ust-2.12.0.tar.bz2 + +# Hash for license file +sha256 74125a84c2166300776980166e29de40d5f98d1a75e487f0bbc0c03b4cd2342e COPYING diff --git a/package/lttng-libust/lttng-libust.mk b/package/lttng-libust/lttng-libust.mk new file mode 100644 index 00000000..2d52fa6e --- /dev/null +++ b/package/lttng-libust/lttng-libust.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# lttng-libust +# +################################################################################ + +LTTNG_LIBUST_SITE = http://lttng.org/files/lttng-ust +LTTNG_LIBUST_VERSION = 2.12.0 +LTTNG_LIBUST_SOURCE = lttng-ust-$(LTTNG_LIBUST_VERSION).tar.bz2 +LTTNG_LIBUST_LICENSE = LGPL-2.1, MIT (system headers), GPL-2.0 (liblttng-ust-ctl/ustctl.c used by lttng-sessiond) +LTTNG_LIBUST_LICENSE_FILES = COPYING +LTTNG_LIBUST_INSTALL_STAGING = YES +LTTNG_LIBUST_DEPENDENCIES = liburcu util-linux +LTTNG_LIBUST_CONF_OPTS = \ + --disable-man-pages \ + --disable-examples \ + --with-lttng-system-rundir=/run/lttng + +ifeq ($(BR2_PACKAGE_PYTHON),y) +LTTNG_LIBUST_DEPENDENCIES += python +LTTNG_LIBUST_CONF_OPTS += --enable-python-agent +else ifeq ($(BR2_PACKAGE_PYTHON3),y) +LTTNG_LIBUST_DEPENDENCIES += python3 +LTTNG_LIBUST_CONF_OPTS += --enable-python-agent +else +LTTNG_LIBUST_CONF_ENV = am_cv_pathless_PYTHON="none" +LTTNG_LIBUST_CONF_OPTS += --disable-python-agent +endif + +ifeq ($(BR2_PACKAGE_NUMACTL),y) +LTTNG_LIBUST_DEPENDENCIES += numactl +LTTNG_LIBUST_CONF_OPTS += --enable-numa +else +LTTNG_LIBUST_CONF_OPTS += --disable-numa +endif + +$(eval $(autotools-package)) diff --git a/package/lttng-modules/Config.in b/package/lttng-modules/Config.in new file mode 100644 index 00000000..e8ba9bad --- /dev/null +++ b/package/lttng-modules/Config.in @@ -0,0 +1,37 @@ +config BR2_PACKAGE_LTTNG_MODULES + bool "lttng-modules" + depends on BR2_LINUX_KERNEL + help + Linux kernel modules for the LTTng 2.x kernel tracing + infrastructure. + + Make sure your target kernel has the following config + options enabled: + + * CONFIG_MODULES: loadable module support + * CONFIG_KALLSYMS: this is necessary until the few + required missing symbols are exported to GPL + modules from mainline + * CONFIG_HIGH_RES_TIMERS: needed for LTTng 2.x + clock source + * CONFIG_TRACEPOINTS: kernel tracepoint instrumentation + (enabled as a side-effect of any of the + perf/ftrace/blktrace instrumentation features) + + The following kernel configuration options will + affect the features available from LTTng: + + * CONFIG_HAVE_SYSCALL_TRACEPOINTS: system call tracing + * CONFIG_PERF_EVENTS: performance counters + * CONFIG_EVENT_TRACING: needed to allow block layer tracing + * CONFIG_KPROBES: dynamic probes + * CONFIG_KRETPROBES: dynamic function entry/return probes + * CONFIG_KALLSYMS_ALL: state dump of mapping between block + device number and name + + The packaged version is compatible with Linux 2.6.38 to 3.16. + + http://lttng.org + +comment "lttng-modules needs a Linux kernel to be built" + depends on !BR2_LINUX_KERNEL diff --git a/package/lttng-modules/lttng-modules.hash b/package/lttng-modules/lttng-modules.hash new file mode 100644 index 00000000..f04247ab --- /dev/null +++ b/package/lttng-modules/lttng-modules.hash @@ -0,0 +1,8 @@ +# From https://lttng.org/files/lttng-modules/lttng-modules-2.11.0.tar.bz2.sha256 +sha256 98af92d8c2e00f4eb63bc637a6967103cf6997434493f36e7a535a491e4fad5f lttng-modules-2.11.0.tar.bz2 + +# Hash for license files +sha256 36b6d3fa47916943fd5fec313c584784946047ec1337a78b440e5992cb595f89 lgpl-2.1.txt +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 gpl-2.0.txt +sha256 2f801b7c2494850c3d91da820eb230502dc0192c9d0db024db37ec08d0be1434 mit-license.txt +sha256 6334b377a5bd56b56a1e8a495830f2d28ed1b5cbedc7493aec9fba979efcdfe1 LICENSE diff --git a/package/lttng-modules/lttng-modules.mk b/package/lttng-modules/lttng-modules.mk new file mode 100644 index 00000000..b8f9be86 --- /dev/null +++ b/package/lttng-modules/lttng-modules.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# lttng-modules +# +################################################################################ + +LTTNG_MODULES_VERSION = 2.11.0 +LTTNG_MODULES_SITE = http://lttng.org/files/lttng-modules +LTTNG_MODULES_SOURCE = lttng-modules-$(LTTNG_MODULES_VERSION).tar.bz2 +LTTNG_MODULES_LICENSE = LGPL-2.1/GPL-2.0 (kernel modules), MIT (lib/bitfield.h, lib/prio_heap/*) +LTTNG_MODULES_LICENSE_FILES = lgpl-2.1.txt gpl-2.0.txt mit-license.txt LICENSE +LTTNG_MODULES_MODULE_MAKE_OPTS = CONFIG_LTTNG=m CONFIG_LTTNG_CLOCK_PLUGIN_TEST=m + +$(eval $(kernel-module)) +$(eval $(generic-package)) diff --git a/package/lttng-tools/0001-configure.ac-add-disable-tests.patch b/package/lttng-tools/0001-configure.ac-add-disable-tests.patch new file mode 100644 index 00000000..f569c7ec --- /dev/null +++ b/package/lttng-tools/0001-configure.ac-add-disable-tests.patch @@ -0,0 +1,37 @@ +From 8c3a5d0921090e2fc3c4e2561509d23eb9ffa6dd Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Fri, 2 Apr 2021 21:07:07 +0200 +Subject: [PATCH] configure.ac: add --disable-tests + +Allow the user to explicitly disable tests + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/lttng/lttng-tools/pull/162] +--- + configure.ac | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 04f9cef4..372cdf3d 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -862,6 +862,8 @@ AC_ARG_ENABLE([bin-lttng-sessiond], AS_HELP_STRING([--disable-bin-lttng-sessiond + [Disable the build of lttng-sessiond binaries])) + AC_ARG_ENABLE([extras], AS_HELP_STRING([--disable-extras], + [Disable the build of the extra components])) ++AC_ARG_ENABLE([tests], AS_HELP_STRING([--disable-tests], ++ [Disable the build of the test components])) + + + # Always build libconfig since it a dependency of libcommon +@@ -1027,6 +1029,7 @@ AM_CONDITIONAL([BUILD_BIN_LTTNG_SESSIOND], [test x$enable_bin_lttng_sessiond != + + # Export the tests and extras build conditions. + AS_IF([\ ++test "x$enable_tests" != "xno" && \ + test "x$enable_bin_lttng" != "xno" && \ + test "x$enable_bin_lttng_consumerd" != "xno" && \ + test "x$enable_bin_lttng_crash" != "xno" && \ +-- +2.30.2 + diff --git a/package/lttng-tools/Config.in b/package/lttng-tools/Config.in new file mode 100644 index 00000000..9c86cc26 --- /dev/null +++ b/package/lttng-tools/Config.in @@ -0,0 +1,32 @@ +config BR2_PACKAGE_LTTNG_TOOLS + bool "lttng-tools" + # liburcu only works on some architectures and requires thread support + depends on BR2_PACKAGE_LIBURCU_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS # uses dlfcn + select BR2_PACKAGE_LIBURCU + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_POPT + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + help + Userspace utilities for the LTTng 2.x tracing + infrastructure. + + Those utilities are required on the target system to start + and stop tracing sessions. Analysis of the trace can be done + on the host machine using the babeltrace utility. This + utility is automatically built by Buildroot in + $(O)/host/bin/babeltrace, as a dependency of + lttng-tools. However, there is also a lttng-babeltrace + package for the target, if babeltrace on the target is + interesting. + + If userspace tracing is desired, you need to enable + lttng-libust. + + http://lttng.org + +comment "lttng-tools needs a toolchain w/ threads, dynamic library" + depends on BR2_PACKAGE_LIBURCU_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/lttng-tools/lttng-tools.hash b/package/lttng-tools/lttng-tools.hash new file mode 100644 index 00000000..a94ecc4a --- /dev/null +++ b/package/lttng-tools/lttng-tools.hash @@ -0,0 +1,10 @@ +# From https://lttng.org/files/lttng-tools/lttng-tools-2.12.3.tar.bz2.sha256 +sha256 2890da230edd523fcf497e9eb28133b7606d64fa01bcbffadbfcba42104db153 lttng-tools-2.12.3.tar.bz2 + +# Locally computed +sha256 068e55c7dbe597400199aee75ac5e71bdb2ca88c4c9a4cfa8e1fbc61f933eda5 LICENSE +sha256 6313108c23efffa36948f8b2cff1560a5935373b527b0e1a837cc77e6ed1bacd LICENSES/BSD-2-Clause +sha256 7a83b1aeb460458db9a4bd521d7f237c45b1650f6e60ea5ffc71e49472454de3 LICENSES/BSD-3-Clause +sha256 6841c85b94f9dab319356e3aaf9e969fcedad51d3aaadf665bf86f34f4186b62 LICENSES/GPL-2.0 +sha256 d72921266bc8452a8789f8a04a82755373990d00b7e0b0f1a8edb8f854e94d1c LICENSES/LGPL-2.1 +sha256 323c587d0ccf10e376f8bf9a7f31fb4ca6078105194b42e0b1e0ee2bc9bde71f LICENSES/MIT diff --git a/package/lttng-tools/lttng-tools.mk b/package/lttng-tools/lttng-tools.mk new file mode 100644 index 00000000..fdc5c33b --- /dev/null +++ b/package/lttng-tools/lttng-tools.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# lttng-tools +# +################################################################################ + +LTTNG_TOOLS_VERSION = 2.12.3 +LTTNG_TOOLS_SITE = https://lttng.org/files/lttng-tools +LTTNG_TOOLS_SOURCE = lttng-tools-$(LTTNG_TOOLS_VERSION).tar.bz2 +LTTNG_TOOLS_INSTALL_STAGING = YES +LTTNG_TOOLS_LICENSE = GPL-2.0, LGPL-2.1 (include/lttng/*, src/lib/lttng-ctl/*) +LTTNG_TOOLS_LICENSE_FILES = LICENSE $(addprefix LICENSES/,BSD-2-Clause BSD-3-Clause GPL-2.0 LGPL-2.1 MIT) +LTTNG_TOOLS_DEPENDENCIES = liburcu libxml2 popt util-linux +# We're patching configure.ac +LTTNG_TOOLS_AUTORECONF = YES +LTTNG_TOOLS_CONF_OPTS = \ + --disable-man-pages \ + --disable-tests \ + --with-lttng-system-rundir=/run/lttng + +ifeq ($(BR2_PACKAGE_LTTNG_LIBUST),y) +LTTNG_TOOLS_CONF_OPTS += --with-lttng-ust +LTTNG_TOOLS_DEPENDENCIES += lttng-libust +else +LTTNG_TOOLS_CONF_OPTS += --without-lttng-ust +endif + +$(eval $(autotools-package)) diff --git a/package/lua-basexx/Config.in b/package/lua-basexx/Config.in new file mode 100644 index 00000000..2f3bb1de --- /dev/null +++ b/package/lua-basexx/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LUA_BASEXX + bool "lua-basexx" + help + A Lua library which provides base2(bitfield), base16(hex), + base32(crockford/rfc), base64(rfc/url), base85(z85) decoding + and encoding. + + https://github.com/aiq/basexx diff --git a/package/lua-basexx/lua-basexx.hash b/package/lua-basexx/lua-basexx.hash new file mode 100644 index 00000000..aee636c3 --- /dev/null +++ b/package/lua-basexx/lua-basexx.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 ff5379b1f5b396103b8bb589ab3dd94d0a727c8e7a48dcfe1c73e2f07af6a8df basexx-0.4.0-1.src.rock +sha256 a1826a43c9e04f9e9b2e5d26d636c656812483bcd513618eec9d72cee69d446b basexx-0.4.0/LICENSE diff --git a/package/lua-basexx/lua-basexx.mk b/package/lua-basexx/lua-basexx.mk new file mode 100644 index 00000000..5aa5ecf2 --- /dev/null +++ b/package/lua-basexx/lua-basexx.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# lua-basexx +# +################################################################################ + +LUA_BASEXX_VERSION = 0.4.0-1 +LUA_BASEXX_NAME_UPSTREAM = basexx +LUA_BASEXX_LICENSE = MIT +LUA_BASEXX_LICENSE_FILES = $(LUA_BASEXX_SUBDIR)/LICENSE + +$(eval $(luarocks-package)) diff --git a/package/lua-binaryheap/Config.in b/package/lua-binaryheap/Config.in new file mode 100644 index 00000000..fa0b304a --- /dev/null +++ b/package/lua-binaryheap/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LUA_BINARYHEAP + bool "lua-binaryheap" + help + Binary heap implementation in pure Lua. + + https://github.com/Tieske/binaryheap.lua diff --git a/package/lua-binaryheap/lua-binaryheap.hash b/package/lua-binaryheap/lua-binaryheap.hash new file mode 100644 index 00000000..3713ea33 --- /dev/null +++ b/package/lua-binaryheap/lua-binaryheap.hash @@ -0,0 +1,2 @@ +# computed by luarocks/buildroot +sha256 ecce14dedfa7a1938aa2383c83036b98461876934f169384a2cec6bb46462d87 binaryheap-0.4-1.src.rock diff --git a/package/lua-binaryheap/lua-binaryheap.mk b/package/lua-binaryheap/lua-binaryheap.mk new file mode 100644 index 00000000..56958e6f --- /dev/null +++ b/package/lua-binaryheap/lua-binaryheap.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# lua-binaryheap +# +################################################################################ + +LUA_BINARYHEAP_VERSION = 0.4-1 +LUA_BINARYHEAP_NAME_UPSTREAM = binaryheap +LUA_BINARYHEAP_SUBDIR = binaryheap.lua-version_0v4 +LUA_BINARYHEAP_LICENSE = MIT + +$(eval $(luarocks-package)) diff --git a/package/lua-bit32/Config.in b/package/lua-bit32/Config.in new file mode 100644 index 00000000..f896940d --- /dev/null +++ b/package/lua-bit32/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LUA_BIT32 + bool "lua-bit32" + help + bit32 is the native Lua 5.2 bit manipulation library, in the + version from Lua 5.3; it is compatible with Lua 5.1, 5.2 and + 5.3. + + http://www.lua.org/manual/5.2/manual.html#6.7 diff --git a/package/lua-bit32/lua-bit32.hash b/package/lua-bit32/lua-bit32.hash new file mode 100644 index 00000000..9a4f64b6 --- /dev/null +++ b/package/lua-bit32/lua-bit32.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 0e273427f2b877270f9cec5642ebe2670242926ba9638d4e6df7e4e1263ca12c bit32-5.3.5.1-1.src.rock +sha256 1b24f475812c979684fb3469f6faccbdc7c33c9d39421728aa0d78deda5a89a5 lua-compat-5.3-0.10/LICENSE diff --git a/package/lua-bit32/lua-bit32.mk b/package/lua-bit32/lua-bit32.mk new file mode 100644 index 00000000..0fa5048d --- /dev/null +++ b/package/lua-bit32/lua-bit32.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# lua-bit32 +# +################################################################################ + +LUA_BIT32_VERSION = 5.3.5.1-1 +LUA_BIT32_NAME_UPSTREAM = bit32 +LUA_BIT32_SUBDIR = lua-compat-5.3-0.10 +LUA_BIT32_LICENSE = MIT +LUA_BIT32_LICENSE_FILES = $(LUA_BIT32_SUBDIR)/LICENSE + +$(eval $(luarocks-package)) diff --git a/package/lua-cjson/Config.in b/package/lua-cjson/Config.in new file mode 100644 index 00000000..9474b317 --- /dev/null +++ b/package/lua-cjson/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_LUA_CJSON + bool "lua-cjson" + help + The Lua CJSON module provides JSON support for Lua. + It features: + - Fast, standards compliant encoding/parsing routines + - Full support for JSON with UTF-8, including decoding + surrogate pairs + - Optional run-time support for common exceptions to the JSON + specification (infinity, NaN, ...) + - No dependencies on other libraries + + (C-module) + + http://www.kyne.com.au/~mark/software/lua-cjson.php diff --git a/package/lua-cjson/lua-cjson.hash b/package/lua-cjson/lua-cjson.hash new file mode 100644 index 00000000..2a23eb3d --- /dev/null +++ b/package/lua-cjson/lua-cjson.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 455fa7d07d8ac9d61f68f538958f8e28972256f38b0a1c2740873daf809d1837 lua-cjson-2.1.0.6-1.src.rock +sha256 9576e82ef5013fbe80b3bd446a7d9ddd47328baa2186c31d3d885e2a9a8cd31e lua-cjson/LICENSE diff --git a/package/lua-cjson/lua-cjson.mk b/package/lua-cjson/lua-cjson.mk new file mode 100644 index 00000000..e029dab5 --- /dev/null +++ b/package/lua-cjson/lua-cjson.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# lua-cjson +# +################################################################################ + +LUA_CJSON_VERSION = 2.1.0.6-1 +LUA_CJSON_SUBDIR = lua-cjson +LUA_CJSON_LICENSE = MIT +LUA_CJSON_LICENSE_FILES = $(LUA_CJSON_SUBDIR)/LICENSE + +$(eval $(luarocks-package)) diff --git a/package/lua-coat/Config.in b/package/lua-coat/Config.in new file mode 100644 index 00000000..f34f6b97 --- /dev/null +++ b/package/lua-coat/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LUA_COAT + bool "lua-coat" + help + Yet Another Lua Object-Oriented Model. + + https://fperrad.frama.io/lua-Coat/ diff --git a/package/lua-coat/lua-coat.hash b/package/lua-coat/lua-coat.hash new file mode 100644 index 00000000..491ba296 --- /dev/null +++ b/package/lua-coat/lua-coat.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 24d0e894d743f46c09a282e4dd272d2a6004557608b618c1c9d9f464dd65af02 lua-coat-0.9.2-1.src.rock +sha256 81b5f657812ccfd63f19c9af1389b5fe6b26f079a4841c5d074940c47bf7cb1e lua-Coat-0.9.2/COPYRIGHT diff --git a/package/lua-coat/lua-coat.mk b/package/lua-coat/lua-coat.mk new file mode 100644 index 00000000..6555e66c --- /dev/null +++ b/package/lua-coat/lua-coat.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# lua-coat +# +################################################################################ + +LUA_COAT_VERSION = 0.9.2-1 +LUA_COAT_NAME_UPSTREAM = lua-Coat +LUA_COAT_LICENSE = MIT +LUA_COAT_LICENSE_FILES = $(LUA_COAT_SUBDIR)/COPYRIGHT + +$(eval $(luarocks-package)) diff --git a/package/lua-coatpersistent/Config.in b/package/lua-coatpersistent/Config.in new file mode 100644 index 00000000..4e8e6432 --- /dev/null +++ b/package/lua-coatpersistent/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LUA_COATPERSISTENT + bool "lua-coatpersistent" + depends on BR2_PACKAGE_LSQLITE3 || BR2_PACKAGE_LUASQL_SQLITE3 + select BR2_PACKAGE_DADO # runtime + select BR2_PACKAGE_LUA_COAT # runtime + help + An ORM for lua-Coat. + + https://fperrad.frama.io/lua-CoatPersistent/ + +comment "lua-coatpersistent needs lsqlite3 or luasql-sqlite3" + depends on !BR2_PACKAGE_LSQLITE3 && !BR2_PACKAGE_LUASQL_SQLITE3 diff --git a/package/lua-coatpersistent/lua-coatpersistent.hash b/package/lua-coatpersistent/lua-coatpersistent.hash new file mode 100644 index 00000000..a15379e1 --- /dev/null +++ b/package/lua-coatpersistent/lua-coatpersistent.hash @@ -0,0 +1,4 @@ +# computed by luarocks/buildroot +sha256 e718ee36a17312108f266e8412f840db150afd89e8587d36e685673fff65f142 lua-coatpersistent-lsqlite3-0.2.2-1.src.rock +sha256 5d36d6a8b413a2d56a466a45314291a0265c514a179e741b3fc95f4dd901abe6 lua-coatpersistent-luasql-0.2.2-1.src.rock +sha256 f8ed30644056ceff4315e694a1c1af4af4f08ec0adabae353ab8f3f5289ffbf3 lua-CoatPersistent-0.2.2/COPYRIGHT diff --git a/package/lua-coatpersistent/lua-coatpersistent.mk b/package/lua-coatpersistent/lua-coatpersistent.mk new file mode 100644 index 00000000..68c60838 --- /dev/null +++ b/package/lua-coatpersistent/lua-coatpersistent.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# lua-coatpersistent +# +################################################################################ + +LUA_COATPERSISTENT_VERSION_UPSTREAM = 0.2.2 +ifeq ($(BR2_PACKAGE_LSQLITE3),y) +LUA_COATPERSISTENT_VERSION = lsqlite3-$(LUA_COATPERSISTENT_VERSION_UPSTREAM)-1 +else +LUA_COATPERSISTENT_VERSION = luasql-$(LUA_COATPERSISTENT_VERSION_UPSTREAM)-1 +endif +LUA_COATPERSISTENT_SUBDIR = lua-CoatPersistent-$(LUA_COATPERSISTENT_VERSION_UPSTREAM) +LUA_COATPERSISTENT_LICENSE = MIT +LUA_COATPERSISTENT_LICENSE_FILES = $(LUA_COATPERSISTENT_SUBDIR)/COPYRIGHT + +$(eval $(luarocks-package)) diff --git a/package/lua-codegen/Config.in b/package/lua-codegen/Config.in new file mode 100644 index 00000000..fbcf5ca4 --- /dev/null +++ b/package/lua-codegen/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LUA_CODEGEN + bool "lua-codegen" + help + A template engine. + + https://fperrad.frama.io/lua-CodeGen diff --git a/package/lua-codegen/lua-codegen.hash b/package/lua-codegen/lua-codegen.hash new file mode 100644 index 00000000..0b49a5a7 --- /dev/null +++ b/package/lua-codegen/lua-codegen.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 c09126d7f5d0fa9c867ee9108eb5961dab111320ee35e5f842317f6058e922ec lua-codegen-0.3.3-1.src.rock +sha256 f09265c450c3a59558ecc552ea4ba61e5a74dec995738eec545d121718833a80 lua-CodeGen-0.3.3/COPYRIGHT diff --git a/package/lua-codegen/lua-codegen.mk b/package/lua-codegen/lua-codegen.mk new file mode 100644 index 00000000..caa9008e --- /dev/null +++ b/package/lua-codegen/lua-codegen.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# lua-codegen +# +################################################################################ + +LUA_CODEGEN_VERSION = 0.3.3-1 +LUA_CODEGEN_NAME_UPSTREAM = lua-CodeGen +LUA_CODEGEN_LICENSE = MIT +LUA_CODEGEN_LICENSE_FILES = $(LUA_CODEGEN_SUBDIR)/COPYRIGHT + +$(eval $(luarocks-package)) diff --git a/package/lua-compat53/Config.in b/package/lua-compat53/Config.in new file mode 100644 index 00000000..de468fcf --- /dev/null +++ b/package/lua-compat53/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LUA_COMPAT53 + bool "lua-compat53" + depends on BR2_PACKAGE_LUAINTERPRETER_ABI_VERSION_5_1 + help + Compatibility module providing Lua-5.3-style APIs for Lua 5.2 + and 5.1. + + https://github.com/keplerproject/lua-compat-5.3 diff --git a/package/lua-compat53/lua-compat53.hash b/package/lua-compat53/lua-compat53.hash new file mode 100644 index 00000000..07783820 --- /dev/null +++ b/package/lua-compat53/lua-compat53.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 e513e75ba0ef4923a1ec0d4f0beb5972a11cc9bd7ac1b0953b5e4f037b259c92 compat53-0.8-1.src.rock +sha256 1b24f475812c979684fb3469f6faccbdc7c33c9d39421728aa0d78deda5a89a5 lua-compat-5.3-0.8/LICENSE diff --git a/package/lua-compat53/lua-compat53.mk b/package/lua-compat53/lua-compat53.mk new file mode 100644 index 00000000..0e8f1c36 --- /dev/null +++ b/package/lua-compat53/lua-compat53.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# lua-compat53 +# +################################################################################ + +LUA_COMPAT53_VERSION_UPSTREAM = 0.8 +LUA_COMPAT53_VERSION = $(LUA_COMPAT53_VERSION_UPSTREAM)-1 +LUA_COMPAT53_NAME_UPSTREAM = compat53 +LUA_COMPAT53_SUBDIR = lua-compat-5.3-$(LUA_COMPAT53_VERSION_UPSTREAM) +LUA_COMPAT53_LICENSE = MIT +LUA_COMPAT53_LICENSE_FILES = $(LUA_COMPAT53_SUBDIR)/LICENSE + +$(eval $(luarocks-package)) diff --git a/package/lua-cqueues/Config.in b/package/lua-cqueues/Config.in new file mode 100644 index 00000000..60f02284 --- /dev/null +++ b/package/lua-cqueues/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LUA_CQUEUES + bool "lua-cqueues" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_OPENSSL + help + Continuation Queues: Embeddable asynchronous networking, + threading, and notification framework for Lua on Unix. + + http://25thandclement.com/~william/projects/cqueues.html + +comment "lua-cqueues needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/lua-cqueues/lua-cqueues.hash b/package/lua-cqueues/lua-cqueues.hash new file mode 100644 index 00000000..5803a60d --- /dev/null +++ b/package/lua-cqueues/lua-cqueues.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 9e112edd246da5cfca264314b70325a0b63665cb87a00e45ee3ae4f194000d52 lua-cqueues-20200726.tar.gz +sha256 5f4b1f94047790eadf8fd0f9a8e3bd2895bea4c9a2c0f8bf7cd8c8e57caa5219 LICENSE diff --git a/package/lua-cqueues/lua-cqueues.mk b/package/lua-cqueues/lua-cqueues.mk new file mode 100644 index 00000000..6d842eca --- /dev/null +++ b/package/lua-cqueues/lua-cqueues.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# lua-cqueues +# +################################################################################ + +LUA_CQUEUES_VERSION = 20200726 +LUA_CQUEUES_SITE = $(call github,wahern,cqueues,rel-$(LUA_CQUEUES_VERSION)) +LUA_CQUEUES_LICENSE = MIT +LUA_CQUEUES_LICENSE_FILES = LICENSE +LUA_CQUEUES_DEPENDENCIES = luainterpreter openssl host-m4 + +LUA_CQUEUES_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_68485),y) +LUA_CQUEUES_CFLAGS += -O0 +endif + +define LUA_CQUEUES_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(LUA_CQUEUES_CFLAGS)" -C $(@D) \ + prefix="$(STAGING_DIR)/usr" all$(LUAINTERPRETER_ABIVER) +endef + +define LUA_CQUEUES_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) $(TARGET_CONFIGURE_OPTS) -C $(@D) \ + DESTDIR="$(TARGET_DIR)" prefix=/usr install$(LUAINTERPRETER_ABIVER) +endef + +$(eval $(generic-package)) diff --git a/package/lua-csnappy/Config.in b/package/lua-csnappy/Config.in new file mode 100644 index 00000000..fb00a130 --- /dev/null +++ b/package/lua-csnappy/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LUA_CSNAPPY + bool "lua-csnappy" + help + lua-csnappy is a binding of the csnappy library + which implements the Google's Snappy (de)compressor. + + https://fperrad.frama.io/lua-csnappy/ diff --git a/package/lua-csnappy/lua-csnappy.hash b/package/lua-csnappy/lua-csnappy.hash new file mode 100644 index 00000000..43790f2b --- /dev/null +++ b/package/lua-csnappy/lua-csnappy.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 4fc373ba714cb8b428e9971f1725d82de6a43dfea361a0b7894e4762238dc95c lua-csnappy-0.1.5-1.src.rock +sha256 8865da757dbc6fe3c8cee4d88bdfd82c1e0e789974a4d0d52db75a985025c1f0 lua-csnappy-0.1.5/COPYRIGHT diff --git a/package/lua-csnappy/lua-csnappy.mk b/package/lua-csnappy/lua-csnappy.mk new file mode 100644 index 00000000..cba0a060 --- /dev/null +++ b/package/lua-csnappy/lua-csnappy.mk @@ -0,0 +1,11 @@ +################################################################################ +# +# lua-csnappy +# +################################################################################ + +LUA_CSNAPPY_VERSION = 0.1.5-1 +LUA_CSNAPPY_LICENSE = BSD-3-Clause +LUA_CSNAPPY_LICENSE_FILES = $(LUA_CSNAPPY_SUBDIR)/COPYRIGHT + +$(eval $(luarocks-package)) diff --git a/package/lua-curl/Config.in b/package/lua-curl/Config.in new file mode 100644 index 00000000..88cdaf10 --- /dev/null +++ b/package/lua-curl/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LUA_CURL + bool "lua-curl" + select BR2_PACKAGE_LIBCURL + help + Lua binding to libcurl. + + https://lua-curl.github.io/ diff --git a/package/lua-curl/lua-curl.hash b/package/lua-curl/lua-curl.hash new file mode 100644 index 00000000..5210ceb0 --- /dev/null +++ b/package/lua-curl/lua-curl.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 b6b860cd416ad883f2c7c2e1696aceda60c96036f660fb8c0236a5cc3d961c04 lua-curl-0.3.12-1.src.rock +sha256 0f92f4c4665aadffb023de44b16022282040fe4409d5cd3148f1812dec30cdff Lua-cURLv3-0.3.12/LICENSE diff --git a/package/lua-curl/lua-curl.mk b/package/lua-curl/lua-curl.mk new file mode 100644 index 00000000..37fbf30c --- /dev/null +++ b/package/lua-curl/lua-curl.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# lua-curl +# +################################################################################ + +LUA_CURL_VERSION_UPSTREAM = 0.3.12 +LUA_CURL_VERSION = $(LUA_CURL_VERSION_UPSTREAM)-1 +LUA_CURL_SUBDIR = Lua-cURLv3-$(LUA_CURL_VERSION_UPSTREAM) +LUA_CURL_LICENSE = MIT +LUA_CURL_LICENSE_FILES = $(LUA_CURL_SUBDIR)/LICENSE +LUA_CURL_DEPENDENCIES = libcurl + +$(eval $(luarocks-package)) diff --git a/package/lua-datafile/Config.in b/package/lua-datafile/Config.in new file mode 100644 index 00000000..e65406ed --- /dev/null +++ b/package/lua-datafile/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LUA_DATAFILE + bool "lua-datafile" + help + datafile is a library for avoiding hardcoded paths + when loading resource files in Lua modules. + + https://github.com/hishamhm/datafile diff --git a/package/lua-datafile/lua-datafile.hash b/package/lua-datafile/lua-datafile.hash new file mode 100644 index 00000000..c43b2b14 --- /dev/null +++ b/package/lua-datafile/lua-datafile.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 4f7d58c50267b5ebd2145e52aaa5fb63fbf63a74ae765f08e2d0dddd570b6b6a datafile-0.6-1.src.rock +sha256 0443ddabab14f69d4c5e2641860343784a0ccbe5ae7a3743f20de9a13991da66 datafile/LICENSE diff --git a/package/lua-datafile/lua-datafile.mk b/package/lua-datafile/lua-datafile.mk new file mode 100644 index 00000000..5d30fdcf --- /dev/null +++ b/package/lua-datafile/lua-datafile.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# lua-datafile +# +################################################################################ + +LUA_DATAFILE_VERSION = 0.6-1 +LUA_DATAFILE_NAME_UPSTREAM = datafile +LUA_DATAFILE_SUBDIR = datafile +LUA_DATAFILE_LICENSE = MIT +LUA_DATAFILE_LICENSE_FILES = $(LUA_DATAFILE_SUBDIR)/LICENSE + +$(eval $(luarocks-package)) diff --git a/package/lua-ev/Config.in b/package/lua-ev/Config.in new file mode 100644 index 00000000..1e89c270 --- /dev/null +++ b/package/lua-ev/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LUA_EV + bool "lua-ev" + select BR2_PACKAGE_LIBEV + help + Get access to the libev library from Lua. + + https://github.com/brimworks/lua-ev diff --git a/package/lua-ev/lua-ev.hash b/package/lua-ev/lua-ev.hash new file mode 100644 index 00000000..eb4f4cf7 --- /dev/null +++ b/package/lua-ev/lua-ev.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 4e26e05830955fdd882a1b48b535be94356582eea310327f839f830cd9250d3a lua-ev-339426fbe528f11cb3cd1af69a88f06bba367981.tar.gz +sha256 c224cc31feec52e33b621ccdbc245e21316a20a134a4cd8706438a3b3382e8ac README diff --git a/package/lua-ev/lua-ev.mk b/package/lua-ev/lua-ev.mk new file mode 100644 index 00000000..39394875 --- /dev/null +++ b/package/lua-ev/lua-ev.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# lua-ev +# +################################################################################ + +LUA_EV_VERSION = 339426fbe528f11cb3cd1af69a88f06bba367981 +LUA_EV_SITE = $(call github,brimworks,lua-ev,$(LUA_EV_VERSION)) +LUA_EV_DEPENDENCIES = luainterpreter libev +LUA_EV_LICENSE = MIT +LUA_EV_LICENSE_FILES = README +LUA_EV_CONF_OPTS = -DINSTALL_CMOD="/usr/lib/lua/$(LUAINTERPRETER_ABIVER)" + +$(eval $(cmake-package)) diff --git a/package/lua-fifo/Config.in b/package/lua-fifo/Config.in new file mode 100644 index 00000000..5715b6bd --- /dev/null +++ b/package/lua-fifo/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LUA_FIFO + bool "lua-fifo" + help + A lua library/'class' that implements a FIFO. + + https://github.com/daurnimator/fifo.lua diff --git a/package/lua-fifo/lua-fifo.hash b/package/lua-fifo/lua-fifo.hash new file mode 100644 index 00000000..7d885f41 --- /dev/null +++ b/package/lua-fifo/lua-fifo.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 53dea24ad658614a0254dcb10296a1a0fc5357315ada5724d6362f54c32b4c20 fifo-0.2-0.src.rock +sha256 8b4423dd4f55a69da1454b7a48346a54fd5b6e0408b38fde25cd29c0922962b6 fifo.lua-0.2/LICENSE diff --git a/package/lua-fifo/lua-fifo.mk b/package/lua-fifo/lua-fifo.mk new file mode 100644 index 00000000..8b15fc1f --- /dev/null +++ b/package/lua-fifo/lua-fifo.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# lua-fifo +# +################################################################################ + +LUA_FIFO_VERSION_UPSTREAM = 0.2 +LUA_FIFO_VERSION = $(LUA_FIFO_VERSION_UPSTREAM)-0 +LUA_FIFO_NAME_UPSTREAM = fifo +LUA_FIFO_SUBDIR = fifo.lua-$(LUA_FIFO_VERSION_UPSTREAM) +LUA_FIFO_LICENSE = MIT +LUA_FIFO_LICENSE_FILES = $(LUA_FIFO_SUBDIR)/LICENSE + +$(eval $(luarocks-package)) diff --git a/package/lua-flu/Config.in b/package/lua-flu/Config.in new file mode 100644 index 00000000..9b55ce5a --- /dev/null +++ b/package/lua-flu/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_LUA_FLU + bool "lua-flu" + depends on !BR2_STATIC_LIBS # libfuse + depends on BR2_TOOLCHAIN_HAS_THREADS # libfuse + depends on BR2_USE_MMU # libfuse + depends on !BR2_PACKAGE_LUA_5_4 + select BR2_PACKAGE_ATTR + select BR2_PACKAGE_LIBFUSE + help + Flu is a Lua binding for FUSE, which is a library allowing + creation of filesystem drivers run in userspace. Flu is a high + level binding, using basic Lua types rather than userdata + whenever possible. + + http://piratery.net/flu/ + +comment "lua-flu needs a toolchain w/ threads, dynamic library, Lua <= 5.3" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS || BR2_PACKAGE_LUA_5_4 diff --git a/package/lua-flu/lua-flu.hash b/package/lua-flu/lua-flu.hash new file mode 100644 index 00000000..63f414d3 --- /dev/null +++ b/package/lua-flu/lua-flu.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 221ba8f8d3abbf12d5fc217dbb965605391892eb314eff1cd9c7beca90fe9887 flu-20181218-1.src.rock +sha256 409f7c274eb26874a382241d675a360ba6b2659742c5941e680d71a41dd35913 doub-flu-63f077a988cd/doc/LICENSE.txt diff --git a/package/lua-flu/lua-flu.mk b/package/lua-flu/lua-flu.mk new file mode 100644 index 00000000..4c7b7654 --- /dev/null +++ b/package/lua-flu/lua-flu.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# lua-flu +# +################################################################################ + +LUA_FLU_VERSION = 20181218-1 +LUA_FLU_NAME_UPSTREAM = Flu +LUA_FLU_SUBDIR = doub-flu-63f077a988cd +LUA_FLU_LICENSE = MIT +LUA_FLU_LICENSE_FILES = $(LUA_FLU_SUBDIR)/doc/LICENSE.txt +LUA_FLU_DEPENDENCIES = attr libfuse + +$(eval $(luarocks-package)) diff --git a/package/lua-gd/0001-Protect-declaration-of-LgdImageCreateFromPng-with-GD.patch b/package/lua-gd/0001-Protect-declaration-of-LgdImageCreateFromPng-with-GD.patch new file mode 100644 index 00000000..17a1fe50 --- /dev/null +++ b/package/lua-gd/0001-Protect-declaration-of-LgdImageCreateFromPng-with-GD.patch @@ -0,0 +1,34 @@ +From 78afd1c5f1ceaed05b78ac42c297d87a493295fd Mon Sep 17 00:00:00 2001 +From: spacewander +Date: Tue, 31 Oct 2017 15:48:30 +0800 +Subject: [PATCH] Protect declaration of LgdImageCreateFromPng* with GD_PNG + feature test macro + +If GD_PNG is false, neither LgdImageCreateFromPng nor +LgdImageCreateFromPngPtr would be implemented. We should avoid declaring +them too. + +Fetch from: https://github.com/ittner/lua-gd/pull/8 +Signed-off-by: Francois Perrad +--- + luagd.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/luagd.c b/luagd.c +index 9730ff7..98bc03e 100644 +--- a/luagd.c ++++ b/luagd.c +@@ -2168,8 +2168,10 @@ static const luaL_Reg LgdFunctions[] = + { "createFromGif", LgdImageCreateFromGif }, + { "createFromGifStr", LgdImageCreateFromGifPtr }, + #endif ++#ifdef GD_PNG + { "createFromPng", LgdImageCreateFromPng }, + { "createFromPngStr", LgdImageCreateFromPngPtr }, ++#endif + { "createFromGd", LgdImageCreateFromGd }, + { "createFromGdStr", LgdImageCreateFromGdPtr }, + { "createFromGd2", LgdImageCreateFromGd2 }, +-- +2.17.1 + diff --git a/package/lua-gd/Config.in b/package/lua-gd/Config.in new file mode 100644 index 00000000..dd21bba4 --- /dev/null +++ b/package/lua-gd/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LUA_GD + bool "lua-gd" + select BR2_PACKAGE_GD + help + GD (graphics library) bindings for Lua. + + https://ittner.github.io/lua-gd/ diff --git a/package/lua-gd/lua-gd.hash b/package/lua-gd/lua-gd.hash new file mode 100644 index 00000000..512573b4 --- /dev/null +++ b/package/lua-gd/lua-gd.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 928fa036b37595d773db1999c9ff43195c4290f0722298fa5b0c3e619c678525 lua-gd-2ce8e478a8591afd71e607506bc8c64b161bbd30.tar.gz +sha256 b0ca41d88ddb0ca785436d37b08b8f413055755eb6bfd3ea0a6ff3214303aa43 COPYING diff --git a/package/lua-gd/lua-gd.mk b/package/lua-gd/lua-gd.mk new file mode 100644 index 00000000..099df31f --- /dev/null +++ b/package/lua-gd/lua-gd.mk @@ -0,0 +1,47 @@ +################################################################################ +# +# lua-gd +# +################################################################################ + +LUA_GD_VERSION = 2ce8e478a8591afd71e607506bc8c64b161bbd30 +LUA_GD_SITE = $(call github,ittner,lua-gd,$(LUA_GD_VERSION)) +LUA_GD_LICENSE = MIT +LUA_GD_LICENSE_FILES = COPYING +LUA_GD_DEPENDENCIES = luainterpreter gd + +ifeq ($(BR2_PACKAGE_FONTCONFIG),y) +LUA_GD_FEATURES += -DGD_FONTCONFIG +endif + +ifeq ($(BR2_PACKAGE_FREETYPE),y) +LUA_GD_FEATURES += -DGD_FREETYPE +endif + +ifeq ($(BR2_PACKAGE_JPEG),y) +LUA_GD_FEATURES += -DGD_JPEG +endif + +ifeq ($(BR2_PACKAGE_LIBPNG),y) +LUA_GD_FEATURES += -DGD_PNG +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXPM),y) +LUA_GD_FEATURES += -DGD_XPM +endif + +# VERSION follows the scheme described on https://ittner.github.io/lua-gd/manual.html#intro, +# the current version of the binding is 3. +define LUA_GD_BUILD_CMDS + $(MAKE) -C $(@D) gd.so \ + GDFEATURES="$(LUA_GD_FEATURES)" \ + CC=$(TARGET_CC) \ + CFLAGS="$(TARGET_CFLAGS) -fPIC -DVERSION=\\\"$(GD_VERSION)r3\\\"" \ + LFLAGS="-shared -lgd" +endef + +define LUA_GD_INSTALL_TARGET_CMDS + $(INSTALL) -m 755 -D $(@D)/gd.so $(TARGET_DIR)/usr/lib/lua/$(LUAINTERPRETER_ABIVER)/gd.so +endef + +$(eval $(generic-package)) diff --git a/package/lua-http/Config.in b/package/lua-http/Config.in new file mode 100644 index 00000000..e4d359ad --- /dev/null +++ b/package/lua-http/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_LUA_HTTP + bool "lua-http" + depends on BR2_TOOLCHAIN_HAS_THREADS # luaossl & lua-cqueues + select BR2_PACKAGE_LPEG # runtime + select BR2_PACKAGE_LUA_BASEXX # runtime + select BR2_PACKAGE_LUA_BINARYHEAP # runtime + select BR2_PACKAGE_LUA_COMPAT53 if BR2_PACKAGE_LUAINTERPRETER_ABI_VERSION_5_1 # runtime + select BR2_PACKAGE_LUA_CQUEUES # runtime + select BR2_PACKAGE_LUA_FIFO # runtime + select BR2_PACKAGE_LUA_LPEG_PATTERNS # runtime + select BR2_PACKAGE_LUABITOP if BR2_PACKAGE_LUA_5_1 # runtime + select BR2_PACKAGE_LUAOSSL # runtime + help + HTTP library for Lua. + + https://github.com/daurnimator/lua-http + +comment "lua-http needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/lua-http/lua-http.hash b/package/lua-http/lua-http.hash new file mode 100644 index 00000000..491167ee --- /dev/null +++ b/package/lua-http/lua-http.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 dbe1b29ff89fb937059e4398c9a628361d97d856acc87fd8cd85cb9340cde328 http-0.4-0.src.rock +sha256 1b486781068bcfd373f8c54f8d78eeab76d900bdf32e589e8330a4c563c2874b lua-http-0.4/LICENSE.md diff --git a/package/lua-http/lua-http.mk b/package/lua-http/lua-http.mk new file mode 100644 index 00000000..7fbb0903 --- /dev/null +++ b/package/lua-http/lua-http.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# lua-http +# +################################################################################ + +LUA_HTTP_VERSION_UPSTREAM = 0.4 +LUA_HTTP_VERSION = $(LUA_HTTP_VERSION_UPSTREAM)-0 +LUA_HTTP_NAME_UPSTREAM = http +LUA_HTTP_SUBDIR = lua-http-$(LUA_HTTP_VERSION_UPSTREAM) +LUA_HTTP_LICENSE = MIT +LUA_HTTP_LICENSE_FILES = $(LUA_HTTP_SUBDIR)/LICENSE.md + +$(eval $(luarocks-package)) diff --git a/package/lua-iconv/Config.in b/package/lua-iconv/Config.in new file mode 100644 index 00000000..e76019d6 --- /dev/null +++ b/package/lua-iconv/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LUA_ICONV + bool "lua-iconv" + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + Lua binding to the POSIX 'iconv' library + + http://ittner.github.io/lua-iconv/ diff --git a/package/lua-iconv/lua-iconv.hash b/package/lua-iconv/lua-iconv.hash new file mode 100644 index 00000000..8015599e --- /dev/null +++ b/package/lua-iconv/lua-iconv.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 fb66e785e15376c2d2817f1f1b27d10272b877eacc998c727a10f081a7d768fa lua-iconv-7-1.src.rock +sha256 30227b9571827f3dfcdeb3830594fc415459d64ad7271e9954178d3ef58a9bd4 lua-iconv-7/COPYING diff --git a/package/lua-iconv/lua-iconv.mk b/package/lua-iconv/lua-iconv.mk new file mode 100644 index 00000000..ea8e0dd8 --- /dev/null +++ b/package/lua-iconv/lua-iconv.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# lua-iconv +# +################################################################################ + +LUA_ICONV_VERSION = 7-1 +LUA_ICONV_LICENSE = MIT +LUA_ICONV_LICENSE_FILES = $(LUA_ICONV_SUBDIR)/COPYING +LUA_ICONV_DEPENDENCIES = $(if $(BR2_PACKAGE_LIBICONV),libiconv) + +$(eval $(luarocks-package)) diff --git a/package/lua-livr-extra/Config.in b/package/lua-livr-extra/Config.in new file mode 100644 index 00000000..08506229 --- /dev/null +++ b/package/lua-livr-extra/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LUA_LIVR_EXTRA + bool "lua-livr-extra" + select BR2_PACKAGE_LUA_LIVR # runtime + help + more LIVR rules. + + https://fperrad.frama.io/lua-LIVR-extra diff --git a/package/lua-livr-extra/lua-livr-extra.hash b/package/lua-livr-extra/lua-livr-extra.hash new file mode 100644 index 00000000..cb7cf898 --- /dev/null +++ b/package/lua-livr-extra/lua-livr-extra.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 42fef357db3e05e32112ddebcd4296f040a825dfac77ff2fa03aedbdcdaac729 lua-livr-extra-0.1.1-1.src.rock +sha256 96751dc604608ecf2357d1599bc2d2e9f56382793a6c218dc98d460759adbf07 lua-LIVR-extra-0.1.1/COPYRIGHT diff --git a/package/lua-livr-extra/lua-livr-extra.mk b/package/lua-livr-extra/lua-livr-extra.mk new file mode 100644 index 00000000..0a6378db --- /dev/null +++ b/package/lua-livr-extra/lua-livr-extra.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# lua-livr-extra +# +################################################################################ + +LUA_LIVR_EXTRA_VERSION = 0.1.1-1 +LUA_LIVR_EXTRA_NAME_UPSTREAM = lua-LIVR-extra +LUA_LIVR_EXTRA_LICENSE = MIT +LUA_LIVR_EXTRA_LICENSE_FILES = $(LUA_LIVR_EXTRA_SUBDIR)/COPYRIGHT + +$(eval $(luarocks-package)) diff --git a/package/lua-livr/Config.in b/package/lua-livr/Config.in new file mode 100644 index 00000000..76fd1c75 --- /dev/null +++ b/package/lua-livr/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LUA_LIVR + bool "lua-livr" + help + Lightweight validator supporting Language Independent + Validation Rules Specification (LIVR). + + https://fperrad.frama.io/lua-LIVR diff --git a/package/lua-livr/lua-livr.hash b/package/lua-livr/lua-livr.hash new file mode 100644 index 00000000..a891420b --- /dev/null +++ b/package/lua-livr/lua-livr.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 a3890301ed5f393b585cab26ac944eddc9df41bfa2ab87c11785925193453493 lua-livr-0.2.1-1.src.rock +sha256 8f09089acf52cfabcc2a44ec3a492dc261e0ae9df3c618f43b33805e696e02d8 lua-LIVR-0.2.1/COPYRIGHT diff --git a/package/lua-livr/lua-livr.mk b/package/lua-livr/lua-livr.mk new file mode 100644 index 00000000..25034b89 --- /dev/null +++ b/package/lua-livr/lua-livr.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# lua-livr +# +################################################################################ + +LUA_LIVR_VERSION = 0.2.1-1 +LUA_LIVR_NAME_UPSTREAM = lua-LIVR +LUA_LIVR_LICENSE = MIT +LUA_LIVR_LICENSE_FILES = $(LUA_LIVR_SUBDIR)/COPYRIGHT + +$(eval $(luarocks-package)) diff --git a/package/lua-lpeg-patterns/Config.in b/package/lua-lpeg-patterns/Config.in new file mode 100644 index 00000000..08c063a0 --- /dev/null +++ b/package/lua-lpeg-patterns/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LUA_LPEG_PATTERNS + bool "lua-lpeg-patterns" + select BR2_PACKAGE_LPEG # runtime + help + a collection of LPEG patterns. + + https://github.com/daurnimator/lpeg_patterns diff --git a/package/lua-lpeg-patterns/lua-lpeg-patterns.hash b/package/lua-lpeg-patterns/lua-lpeg-patterns.hash new file mode 100644 index 00000000..3fad73ca --- /dev/null +++ b/package/lua-lpeg-patterns/lua-lpeg-patterns.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 0e6d33543689e83911e2cb47965752e00412cbdfca888812ccbde9ec95259c56 lpeg_patterns-0.5-0.src.rock +sha256 5b0346f2b2432e5f05e8e4ad31503cf84ddf802dacde9e8c3e529efaa4be3348 lpeg_patterns-0.5/LICENSE.md diff --git a/package/lua-lpeg-patterns/lua-lpeg-patterns.mk b/package/lua-lpeg-patterns/lua-lpeg-patterns.mk new file mode 100644 index 00000000..290af8c1 --- /dev/null +++ b/package/lua-lpeg-patterns/lua-lpeg-patterns.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# lua-lpeg-patterns +# +################################################################################ + +LUA_LPEG_PATTERNS_VERSION = 0.5-0 +LUA_LPEG_PATTERNS_NAME_UPSTREAM = lpeg_patterns +LUA_LPEG_PATTERNS_ROCKSPEC = $(LUA_LPEG_PATTERNS_NAME_UPSTREAM)-$(LUA_LPEG_PATTERNS_VERSION).rockspec +LUA_LPEG_PATTERNS_SOURCE = $(LUA_LPEG_PATTERNS_NAME_UPSTREAM)-$(LUA_LPEG_PATTERNS_VERSION).src.rock +LUA_LPEG_PATTERNS_LICENSE = MIT +LUA_LPEG_PATTERNS_LICENSE_FILES = $(LUA_LPEG_PATTERNS_SUBDIR)/LICENSE.md + +$(eval $(luarocks-package)) diff --git a/package/lua-lunitx/Config.in b/package/lua-lunitx/Config.in new file mode 100644 index 00000000..ea900e63 --- /dev/null +++ b/package/lua-lunitx/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LUA_LUNITX + bool "lua-lunitx" + help + Lunitx is a unit testing framework for lua, written in lua. + + https://github.com/dcurrie/lunit diff --git a/package/lua-lunitx/lua-lunitx.hash b/package/lua-lunitx/lua-lunitx.hash new file mode 100644 index 00000000..b97b93f0 --- /dev/null +++ b/package/lua-lunitx/lua-lunitx.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 2299facf4977f9b663e1ad402098139116a87a693c3df66e1f6b89e2cf47646f lunitx-0.8-1.src.rock +sha256 3fcfcd6010d73bc2b22505b6a91779022a82661809a3e4e0a0bdd7b3463def8f lunit/LICENSE diff --git a/package/lua-lunitx/lua-lunitx.mk b/package/lua-lunitx/lua-lunitx.mk new file mode 100644 index 00000000..e12cf072 --- /dev/null +++ b/package/lua-lunitx/lua-lunitx.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# lua-lunitx +# +################################################################################ + +LUA_LUNITX_VERSION = 0.8-1 +LUA_LUNITX_NAME_UPSTREAM = lunitx +LUA_LUNITX_SUBDIR = lunit +LUA_LUNITX_LICENSE = MIT +LUA_LUNITX_LICENSE_FILES = $(LUA_LUNITX_SUBDIR)/LICENSE + +$(eval $(luarocks-package)) diff --git a/package/lua-lyaml/Config.in b/package/lua-lyaml/Config.in new file mode 100644 index 00000000..ef2d3823 --- /dev/null +++ b/package/lua-lyaml/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LUA_LYAML + bool "lua-lyaml" + select BR2_PACKAGE_LIBYAML + help + This is a Lua binding for the fast libYAML C library for + converting between `%YAML 1.1` and Lua tables, with a + flexible Lua language API to load and save YAML documents. + + http://github.com/gvvaughan/lyaml diff --git a/package/lua-lyaml/lua-lyaml.hash b/package/lua-lyaml/lua-lyaml.hash new file mode 100644 index 00000000..af3d0ae6 --- /dev/null +++ b/package/lua-lyaml/lua-lyaml.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 9bb489cefae48b150d66f6bab4141d8d5831fcb7465bfc52a9845fa01efc63b0 lua-lyaml-6.2.7.tar.gz +sha256 81e4ea1d897e259b31111adc2d3c185fe23e435942ff3e9de8c8c9c5d01247d0 LICENSE diff --git a/package/lua-lyaml/lua-lyaml.mk b/package/lua-lyaml/lua-lyaml.mk new file mode 100644 index 00000000..77980f53 --- /dev/null +++ b/package/lua-lyaml/lua-lyaml.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# lua-lyaml +# +################################################################################ + +LUA_LYAML_VERSION = 6.2.7 +LUA_LYAML_NAME_UPSTREAM = lyaml +LUA_LYAML_SITE = $(call github,gvvaughan,$(LUA_LYAML_NAME_UPSTREAM),v$(LUA_LYAML_VERSION)) +LUA_LYAML_LICENSE = MIT +LUA_LYAML_LICENSE_FILES = LICENSE +LUA_LYAML_DEPENDENCIES = libyaml luainterpreter host-lua + +define LUA_LYAML_BUILD_CMDS + (cd $(@D); \ + $(LUA_RUN) build-aux/luke \ + version="'$(LUA_LYAML_VERSION)'" \ + CC="$(TARGET_CC)" \ + CFLAGS="$(TARGET_CFLAGS)" \ + LUA_INCDIR=$(STAGING_DIR)/usr/include \ + YAML_DIR=$(STAGING_DIR)/usr \ + ) +endef + +define LUA_LYAML_INSTALL_TARGET_CMDS + (cd $(@D); \ + $(LUA_RUN) build-aux/luke install \ + INST_LIBDIR="$(TARGET_DIR)/usr/lib/lua/$(LUAINTERPRETER_ABIVER)" \ + INST_LUADIR="$(TARGET_DIR)/usr/share/lua/$(LUAINTERPRETER_ABIVER)" \ + ) +endef + +$(eval $(generic-package)) diff --git a/package/lua-markdown/Config.in b/package/lua-markdown/Config.in new file mode 100644 index 00000000..c53dc460 --- /dev/null +++ b/package/lua-markdown/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LUA_MARKDOWN + bool "lua-markdown" + help + A pure-lua implementation of the Markdown text-to-html + markup system. + + https://github.com/mpeterv/markdown diff --git a/package/lua-markdown/lua-markdown.hash b/package/lua-markdown/lua-markdown.hash new file mode 100644 index 00000000..682b4f84 --- /dev/null +++ b/package/lua-markdown/lua-markdown.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 bed84231bb48322f8e614b4392181c52c36bc71340f9273e0c3bd72dc922bc07 markdown-0.33-1.src.rock +sha256 c13c5634db49d16c87f164ce0b79fb7e1b313c8b66818ebf1c970747a429b39b markdown/LICENSE diff --git a/package/lua-markdown/lua-markdown.mk b/package/lua-markdown/lua-markdown.mk new file mode 100644 index 00000000..d35f8be8 --- /dev/null +++ b/package/lua-markdown/lua-markdown.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# lua-markdown +# +################################################################################ + +LUA_MARKDOWN_VERSION = 0.33-1 +LUA_MARKDOWN_NAME_UPSTREAM = Markdown +LUA_MARKDOWN_SUBDIR = markdown +LUA_MARKDOWN_LICENSE = MIT +LUA_MARKDOWN_LICENSE_FILES = $(LUA_MARKDOWN_SUBDIR)/LICENSE + +$(eval $(luarocks-package)) diff --git a/package/lua-messagepack/Config.in b/package/lua-messagepack/Config.in new file mode 100644 index 00000000..7ec098f9 --- /dev/null +++ b/package/lua-messagepack/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LUA_MESSAGEPACK + bool "lua-messagepack" + help + A pure Lua implementation of the MessagePack serialization + format. + + https://fperrad.frama.io/lua-MessagePack/ diff --git a/package/lua-messagepack/lua-messagepack.hash b/package/lua-messagepack/lua-messagepack.hash new file mode 100644 index 00000000..a550a190 --- /dev/null +++ b/package/lua-messagepack/lua-messagepack.hash @@ -0,0 +1,4 @@ +# computed by luarocks/buildroot +sha256 cbb1b7b12834b7f49fd20621446ec4d76eff67d324b8182b7988324b10830a43 lua-messagepack-0.5.2-1.src.rock +sha256 b3b3d8c3d28a4d4f26404cdb7d7d9329e2e831ea2dd2c6b119d958ed113579b2 lua-messagepack-lua53-0.5.2-1.src.rock +sha256 709fd93a7dd6f8e941e7f0cb9e3eeba1f4de375302f1b19e14bb51aff23c5970 lua-MessagePack-0.5.2/COPYRIGHT diff --git a/package/lua-messagepack/lua-messagepack.mk b/package/lua-messagepack/lua-messagepack.mk new file mode 100644 index 00000000..33d460b4 --- /dev/null +++ b/package/lua-messagepack/lua-messagepack.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# lua-messagepack +# +################################################################################ + +LUA_MESSAGEPACK_VERSION_UPSTREAM = 0.5.2 +LUA_MESSAGEPACK_VERSION = $(LUA_MESSAGEPACK_VERSION_UPSTREAM)-1 +ifeq ($(BR2_PACKAGE_LUA_5_3)$(BR2_PACKAGE_LUA_5_4),y) +LUA_MESSAGEPACK_NAME_UPSTREAM = lua-MessagePack-lua53 +else +LUA_MESSAGEPACK_NAME_UPSTREAM = lua-MessagePack +endif +LUA_MESSAGEPACK_SUBDIR = lua-MessagePack-$(LUA_MESSAGEPACK_VERSION_UPSTREAM) +LUA_MESSAGEPACK_LICENSE = MIT +LUA_MESSAGEPACK_LICENSE_FILES = $(LUA_MESSAGEPACK_SUBDIR)/COPYRIGHT + +$(eval $(luarocks-package)) diff --git a/package/lua-msgpack-native/Config.in b/package/lua-msgpack-native/Config.in new file mode 100644 index 00000000..8af508dd --- /dev/null +++ b/package/lua-msgpack-native/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LUA_MSGPACK_NATIVE + bool "lua-msgpack-native" + depends on BR2_PACKAGE_LUA_5_1 || BR2_PACKAGE_LUAJIT + help + This is a native, C language implementation of msgpack + (http://msgpack.org) library/protocol for Lua language + + https://github.com/kengonakajima/lua-msgpack-native + +comment "lua-msgpack-native needs Lua 5.1 or LuaJIT" + depends on !BR2_PACKAGE_LUA_5_1 + depends on !BR2_PACKAGE_LUAJIT diff --git a/package/lua-msgpack-native/lua-msgpack-native.hash b/package/lua-msgpack-native/lua-msgpack-native.hash new file mode 100644 index 00000000..2a49e9f3 --- /dev/null +++ b/package/lua-msgpack-native/lua-msgpack-native.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 025cf91d509fa3985869d18ef9b8eaeb875ff3c9fcf6467beeed6eab3bb35c93 lua-msgpack-native-41a91b994c70389dc9daa1a15678741d8ec41749.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE.txt diff --git a/package/lua-msgpack-native/lua-msgpack-native.mk b/package/lua-msgpack-native/lua-msgpack-native.mk new file mode 100644 index 00000000..4a7e672c --- /dev/null +++ b/package/lua-msgpack-native/lua-msgpack-native.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# lua-msgpack-native +# +################################################################################ + +LUA_MSGPACK_NATIVE_VERSION = 41a91b994c70389dc9daa1a15678741d8ec41749 +LUA_MSGPACK_NATIVE_SITE = $(call github,kengonakajima,lua-msgpack-native,$(LUA_MSGPACK_NATIVE_VERSION)) +LUA_MSGPACK_NATIVE_DEPENDENCIES = luainterpreter +LUA_MSGPACK_NATIVE_LICENSE = Apache-2.0 +LUA_MSGPACK_NATIVE_LICENSE_FILES = LICENSE.txt + +# lua-msgpack-native uses the old Lua 5.0 API with luaL_reg, but it is +# no longer provided by LuaJit 2.1, so we have to alias luaL_reg to +# luaL_Reg. +define LUA_MSGPACK_NATIVE_BUILD_CMDS + $(TARGET_CC) $(TARGET_CFLAGS) -DluaL_reg=luaL_Reg -fPIC \ + -shared -o $(@D)/msgpack.so $(@D)/mp.c +endef + +define LUA_MSGPACK_NATIVE_INSTALL_TARGET_CMDS + $(INSTALL) -m 755 -D $(@D)/msgpack.so \ + $(TARGET_DIR)/usr/lib/lua/$(LUAINTERPRETER_ABIVER)/msgpack.so +endef + +$(eval $(generic-package)) diff --git a/package/lua-periphery/Config.in b/package/lua-periphery/Config.in new file mode 100644 index 00000000..e40abd71 --- /dev/null +++ b/package/lua-periphery/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LUA_PERIPHERY + bool "lua-periphery" + help + A library for GPIO, SPI, I2C, MMIO, and Serial peripheral I/O + interface access in userspace Linux with Lua. + + https://github.com/vsergeev/lua-periphery diff --git a/package/lua-periphery/lua-periphery.hash b/package/lua-periphery/lua-periphery.hash new file mode 100644 index 00000000..b87cfbbc --- /dev/null +++ b/package/lua-periphery/lua-periphery.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 ff8a4d08f02356586fadfe47f01859ba28539cc42013836f79a032bf4ccc78b3 lua-periphery-1.1.1-1.src.rock +sha256 7c60847b46f718e9651d1eca2f56bf6be09608cf08d130446a521eb8288c98e1 lua-periphery/LICENSE diff --git a/package/lua-periphery/lua-periphery.mk b/package/lua-periphery/lua-periphery.mk new file mode 100644 index 00000000..af5abe70 --- /dev/null +++ b/package/lua-periphery/lua-periphery.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# lua-periphery +# +################################################################################ + +LUA_PERIPHERY_VERSION = 1.1.1-1 +LUA_PERIPHERY_SUBDIR = lua-periphery +LUA_PERIPHERY_LICENSE = MIT +LUA_PERIPHERY_LICENSE_FILES = $(LUA_PERIPHERY_SUBDIR)/LICENSE + +$(eval $(luarocks-package)) diff --git a/package/lua-resty-http/Config.in b/package/lua-resty-http/Config.in new file mode 100644 index 00000000..7f90b51b --- /dev/null +++ b/package/lua-resty-http/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LUA_RESTY_HTTP + bool "lua-resty-http" + help + Lua HTTP client cosocket driver for OpenResty / ngx_lua. + + https://github.com/ledgetech/lua-resty-http diff --git a/package/lua-resty-http/lua-resty-http.hash b/package/lua-resty-http/lua-resty-http.hash new file mode 100644 index 00000000..4aacc097 --- /dev/null +++ b/package/lua-resty-http/lua-resty-http.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 df913a055ddc2f029017602732c7a497225f4e0df1bcc6858e13f9f4d9524184 lua-resty-http-0.15-0.src.rock +sha256 407e4b1412d8afa317dc703a1d318866c3de87d78899402125cbd90548c6057d lua-resty-http/LICENSE diff --git a/package/lua-resty-http/lua-resty-http.mk b/package/lua-resty-http/lua-resty-http.mk new file mode 100644 index 00000000..61f33c2b --- /dev/null +++ b/package/lua-resty-http/lua-resty-http.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# lua-resty-http +# +################################################################################ + +LUA_RESTY_HTTP_VERSION = 0.15-0 +LUA_RESTY_HTTP_SUBDIR = lua-resty-http +LUA_RESTY_HTTP_LICENSE = BSD-2-Clause +LUA_RESTY_HTTP_LICENSE_FILES = $(LUA_RESTY_HTTP_SUBDIR)/LICENSE + +$(eval $(luarocks-package)) diff --git a/package/lua-rotas/Config.in b/package/lua-rotas/Config.in new file mode 100644 index 00000000..565efce9 --- /dev/null +++ b/package/lua-rotas/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LUA_ROTAS + bool "lua-rotas" + help + a web server router. + + https://fperrad.frama.io/lua-Rotas diff --git a/package/lua-rotas/lua-rotas.hash b/package/lua-rotas/lua-rotas.hash new file mode 100644 index 00000000..6f8d0df4 --- /dev/null +++ b/package/lua-rotas/lua-rotas.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 be47e72ec703ffc319fe4fd539b531bbe8a8c0c52e0cc9774273028f1599a0cf lua-rotas-0.2.0-1.src.rock +sha256 4a7fdc0e44509d79c9bf18560cfb98368f70bb3832abe07e3cdba5c06466b0bb lua-Rotas-0.2.0/COPYRIGHT diff --git a/package/lua-rotas/lua-rotas.mk b/package/lua-rotas/lua-rotas.mk new file mode 100644 index 00000000..6ace963a --- /dev/null +++ b/package/lua-rotas/lua-rotas.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# lua-rotas +# +################################################################################ + +LUA_ROTAS_VERSION = 0.2.0-1 +LUA_ROTAS_NAME_UPSTREAM = lua-Rotas +LUA_ROTAS_LICENSE = MIT +LUA_ROTAS_LICENSE_FILES = $(LUA_ROTAS_SUBDIR)/COPYRIGHT + +$(eval $(luarocks-package)) diff --git a/package/lua-sailor/Config.in b/package/lua-sailor/Config.in new file mode 100644 index 00000000..c973c876 --- /dev/null +++ b/package/lua-sailor/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_LUA_SAILOR + bool "lua-sailor" + select BR2_PACKAGE_CGILUA # runtime + select BR2_PACKAGE_LBASE64 # runtime + select BR2_PACKAGE_LUA_DATAFILE # runtime + select BR2_PACKAGE_LUA_VALUA # runtime + select BR2_PACKAGE_LUAFILESYSTEM # runtime + select BR2_PACKAGE_WSAPI_XAVANTE # runtime + select BR2_PACKAGE_XAVANTE # runtime + help + Sailor is a web framework written in Lua that follows the MVC + design pattern. + + http://sailorproject.org/ diff --git a/package/lua-sailor/lua-sailor.hash b/package/lua-sailor/lua-sailor.hash new file mode 100644 index 00000000..aec00afe --- /dev/null +++ b/package/lua-sailor/lua-sailor.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 4f7f43a7cf6c62712a521ebaf5f53aaf230039c7fb06480ae168c3aa036120bf sailor-0.5-4.src.rock +sha256 3a19bc44e1a653b39bcb1b91cc8058ac6b1cd1caf7e6cef93517fd559b189065 sailor/LICENSE diff --git a/package/lua-sailor/lua-sailor.mk b/package/lua-sailor/lua-sailor.mk new file mode 100644 index 00000000..f88e0359 --- /dev/null +++ b/package/lua-sailor/lua-sailor.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# lua-sailor +# +################################################################################ + +LUA_SAILOR_VERSION = 0.5-4 +LUA_SAILOR_NAME_UPSTREAM = Sailor +LUA_SAILOR_SUBDIR = sailor +LUA_SAILOR_LICENSE = MIT +LUA_SAILOR_LICENSE_FILES = $(LUA_SAILOR_SUBDIR)/LICENSE + +$(eval $(luarocks-package)) diff --git a/package/lua-sdl2/0001-Do-not-reference-host-directory-for-headers.patch b/package/lua-sdl2/0001-Do-not-reference-host-directory-for-headers.patch new file mode 100644 index 00000000..f4b06e0b --- /dev/null +++ b/package/lua-sdl2/0001-Do-not-reference-host-directory-for-headers.patch @@ -0,0 +1,29 @@ +From 07309a49ad6c3e18c8c84fe54f1fdb9e103c4cc5 Mon Sep 17 00:00:00 2001 +From: Francois Perrad +Date: Sun, 22 Oct 2017 13:00:01 +0200 +Subject: [PATCH] Do not reference host directory for headers + +Signed-off-by: Francois Perrad +--- + cmake/FindSDL2.cmake | 5 ----- + 1 file changed, 5 deletions(-) + +diff --git a/cmake/FindSDL2.cmake b/cmake/FindSDL2.cmake +index 5cf4115..5e17919 100644 +--- a/cmake/FindSDL2.cmake ++++ b/cmake/FindSDL2.cmake +@@ -73,11 +73,6 @@ find_path(SDL2_INCLUDE_DIR SDL.h + PATH_SUFFIXES include/SDL2 include + ) + +-# On FreeBSD SDL depends on libiconv and SDL_stdinc.h includes iconv.h, which is +-# located in ${LOCALBASE}/include. Append {LOCALBASE}/include to +-# the SDL_INCLUDE_DIR, thus allow to build SDL apps out of box. +-list(APPEND SDL2_INCLUDE_DIR /usr/local/include) +- + find_library(SDL_LIBRARY_TEMP + NAMES SDL2 SDL2-2.0 + HINTS +-- +2.13.6 + diff --git a/package/lua-sdl2/0002-CMakeLists-do-not-require-C.patch b/package/lua-sdl2/0002-CMakeLists-do-not-require-C.patch new file mode 100644 index 00000000..eb03ca58 --- /dev/null +++ b/package/lua-sdl2/0002-CMakeLists-do-not-require-C.patch @@ -0,0 +1,58 @@ +From 5732174debfe027f7620af55c283060201f0ad03 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Thu, 2 Nov 2017 22:54:51 +0100 +Subject: [PATCH] CMakeLists: do not require C++ + +The project doesn't use C++, so don't let CMake check for a C++ +compiler by explicitly specifying that this is a C-only project. + +Submitted-upstream: https://github.com/Tangent128/luasdl2/pull/69 +Signed-off-by: Thomas Petazzoni +--- + common/CMakeLists.txt | 2 +- + examples/CMakeLists.txt | 2 +- + tutorials/CMakeLists.txt | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt +index 9e19709..8cfb748 100644 +--- a/common/CMakeLists.txt ++++ b/common/CMakeLists.txt +@@ -15,7 +15,7 @@ + # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-project(common) ++project(common C) + + set( + SOURCES +diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt +index 572b3b7..4e3af4d 100644 +--- a/examples/CMakeLists.txt ++++ b/examples/CMakeLists.txt +@@ -16,7 +16,7 @@ + # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + # + +-project(examples) ++project(examples C) + + # Option to enable / disable examples installation + option(WITH_DOCS "Installation of documentation and examples" On) +diff --git a/tutorials/CMakeLists.txt b/tutorials/CMakeLists.txt +index adefbc9..6ec069e 100644 +--- a/tutorials/CMakeLists.txt ++++ b/tutorials/CMakeLists.txt +@@ -16,7 +16,7 @@ + # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + # + +-project(tutorials) ++project(tutorials C) + + # Option to enable / disable examples installation + option(WITH_DOCS "Installation of tutorials" On) +-- +2.13.6 + diff --git a/package/lua-sdl2/Config.in b/package/lua-sdl2/Config.in new file mode 100644 index 00000000..d0c1b91e --- /dev/null +++ b/package/lua-sdl2/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_LUA_SDL2 + bool "lua-sdl2" + depends on !BR2_STATIC_LIBS + depends on !BR2_PACKAGE_LUA_5_4 + select BR2_PACKAGE_SDL2 + help + Lua-SDL2 is a pure C binding of SDL2 to Lua 5.1, Lua 5.2, + Lua 5.3, and LuaJIT. + + https://github.com/Tangent128/luasdl2 + +comment "lua-sdl2 needs a toolchain w/ dynamic library, Lua <= 5.3" + depends on BR2_STATIC_LIBS || BR2_PACKAGE_LUA_5_4 diff --git a/package/lua-sdl2/lua-sdl2.hash b/package/lua-sdl2/lua-sdl2.hash new file mode 100644 index 00000000..e3680a92 --- /dev/null +++ b/package/lua-sdl2/lua-sdl2.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 cee7875106062fbc00cf8acb3b2738e336e2327df73ede011968cb060c094bfb lua-sdl2-2.0.5-6.0.tar.gz +sha256 4f56a5b6943a8ff9611a39e7d4d88dba9ad314dcdf56c62a1425798a6e624494 LICENSE diff --git a/package/lua-sdl2/lua-sdl2.mk b/package/lua-sdl2/lua-sdl2.mk new file mode 100644 index 00000000..43fa2668 --- /dev/null +++ b/package/lua-sdl2/lua-sdl2.mk @@ -0,0 +1,47 @@ +################################################################################ +# +# lua-sdl2 +# +################################################################################ + +LUA_SDL2_VERSION = 2.0.5-6.0 +LUA_SDL2_SITE = $(call github,Tangent128,luasdl2,v$(LUA_SDL2_VERSION)) +LUA_SDL2_LICENSE = ISC +LUA_SDL2_LICENSE_FILES = LICENSE +LUA_SDL2_DEPENDENCIES = luainterpreter sdl2 + +ifeq ($(BR2_PACKAGE_LUAJIT),y) +LUA_SDL2_LUAVER = JIT +else ifeq ($(BR2_PACKAGE_LUA_5_3),y) +LUA_SDL2_LUAVER = 53 +else +LUA_SDL2_LUAVER = 51 +endif + +LUA_SDL2_CONF_OPTS += -DWITH_LUAVER=$(LUA_SDL2_LUAVER) -DLUA_INCLUDE_DIR=$(STAGING_DIR)/usr/include + +ifeq ($(BR2_PACKAGE_SDL2_IMAGE),y) +LUA_SDL2_DEPENDENCIES += sdl2_image +else +LUA_SDL2_CONF_OPTS += -DWITH_IMAGE=Off +endif + +ifeq ($(BR2_PACKAGE_SDL2_MIXER),y) +LUA_SDL2_DEPENDENCIES += sdl2_mixer +else +LUA_SDL2_CONF_OPTS += -DWITH_MIXER=Off +endif + +ifeq ($(BR2_PACKAGE_SDL2_NET),y) +LUA_SDL2_DEPENDENCIES += sdl2_net +else +LUA_SDL2_CONF_OPTS += -DWITH_NET=Off +endif + +ifeq ($(BR2_PACKAGE_SDL2_TTF),y) +LUA_SDL2_DEPENDENCIES += sdl2_ttf +else +LUA_SDL2_CONF_OPTS += -DWITH_TTF=Off +endif + +$(eval $(cmake-package)) diff --git a/package/lua-silva/Config.in b/package/lua-silva/Config.in new file mode 100644 index 00000000..1ddc3fad --- /dev/null +++ b/package/lua-silva/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LUA_SILVA + bool "lua-silva" + help + your string matcher expert. + + https://fperrad.frama.io/lua-Silva diff --git a/package/lua-silva/lua-silva.hash b/package/lua-silva/lua-silva.hash new file mode 100644 index 00000000..7bb04da9 --- /dev/null +++ b/package/lua-silva/lua-silva.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 89cfdf6c67b69ff5e18591fb79cfe10c7e5f4923494ed92f426f44e475a9b522 lua-silva-0.1.6-1.src.rock +sha256 166beeb47e49a35b3ff8c6af91a399046a9cc5e29a8072618b4ca90f5b7a6c95 lua-Silva-0.1.6/COPYRIGHT diff --git a/package/lua-silva/lua-silva.mk b/package/lua-silva/lua-silva.mk new file mode 100644 index 00000000..949e2d36 --- /dev/null +++ b/package/lua-silva/lua-silva.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# lua-silva +# +################################################################################ + +LUA_SILVA_VERSION = 0.1.6-1 +LUA_SILVA_NAME_UPSTREAM = lua-Silva +LUA_SILVA_LICENSE = MIT +LUA_SILVA_LICENSE_FILES = $(LUA_SILVA_SUBDIR)/COPYRIGHT + +$(eval $(luarocks-package)) diff --git a/package/lua-std-debug/Config.in b/package/lua-std-debug/Config.in new file mode 100644 index 00000000..948f2427 --- /dev/null +++ b/package/lua-std-debug/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LUA_STD_DEBUG + bool "lua-std-debug" + help + Manage an overall debug state, and associated hint + substates. + + http://lua-stdlib.github.io/_debug diff --git a/package/lua-std-debug/lua-std-debug.hash b/package/lua-std-debug/lua-std-debug.hash new file mode 100644 index 00000000..3e94b40a --- /dev/null +++ b/package/lua-std-debug/lua-std-debug.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 7f6b84283d4b78dafee17e7765dd5f1f8e75c3314169977f4dda0e7873616ce2 std._debug-1.0.1-1.src.rock +sha256 034abdbbe9a13899c813509776d1e04af81bc58c2982b704c8b3663549504a31 _debug-1.0.1/LICENSE.md diff --git a/package/lua-std-debug/lua-std-debug.mk b/package/lua-std-debug/lua-std-debug.mk new file mode 100644 index 00000000..e044d6cb --- /dev/null +++ b/package/lua-std-debug/lua-std-debug.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# lua-std-debug +# +################################################################################ + +LUA_STD_DEBUG_VERSION_UPSTREAM = 1.0.1 +LUA_STD_DEBUG_VERSION = $(LUA_STD_DEBUG_VERSION_UPSTREAM)-1 +LUA_STD_DEBUG_NAME_UPSTREAM = std._debug +LUA_STD_DEBUG_SUBDIR = _debug-$(LUA_STD_DEBUG_VERSION_UPSTREAM) +LUA_STD_DEBUG_ROCKSPEC = $(LUA_STD_DEBUG_NAME_UPSTREAM)-$(LUA_STD_DEBUG_VERSION).rockspec +LUA_STD_DEBUG_SOURCE = $(LUA_STD_DEBUG_NAME_UPSTREAM)-$(LUA_STD_DEBUG_VERSION).src.rock +LUA_STD_DEBUG_LICENSE = MIT +LUA_STD_DEBUG_LICENSE_FILES = $(LUA_STD_DEBUG_SUBDIR)/LICENSE.md + +$(eval $(luarocks-package)) diff --git a/package/lua-std-normalize/Config.in b/package/lua-std-normalize/Config.in new file mode 100644 index 00000000..35d0a113 --- /dev/null +++ b/package/lua-std-normalize/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_LUA_STD_NORMALIZE + bool "lua-std-normalize" + select BR2_PACKAGE_LUA_STD_DEBUG # runtime + help + This module can inject deterministic versions of core Lua + functions that do not behave identically across all + supported Lua implementations into your module's lexical + environment. Each function is as thin and fast a version as + is possible in each Lua implementation, evaluating to the + Lua C implementation with no overhead when semantics allow. + + https://lua-stdlib.github.io/normalize diff --git a/package/lua-std-normalize/lua-std-normalize.hash b/package/lua-std-normalize/lua-std-normalize.hash new file mode 100644 index 00000000..84cdfca4 --- /dev/null +++ b/package/lua-std-normalize/lua-std-normalize.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 3a040b6ca43297367c527e12c1aab37acab86289f9415ffb130544c48b17f802 std.normalize-2.0.3-1.src.rock +sha256 9c9094f0cea86c2c62b893e59a78d5eaed69df0d7da24e122ef9753baeef0f04 normalize-2.0.3/LICENSE.md diff --git a/package/lua-std-normalize/lua-std-normalize.mk b/package/lua-std-normalize/lua-std-normalize.mk new file mode 100644 index 00000000..0eb215bf --- /dev/null +++ b/package/lua-std-normalize/lua-std-normalize.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# lua-std-normalize +# +################################################################################ + +LUA_STD_NORMALIZE_VERSION_UPSTREAM = 2.0.3 +LUA_STD_NORMALIZE_VERSION = $(LUA_STD_NORMALIZE_VERSION_UPSTREAM)-1 +LUA_STD_NORMALIZE_NAME_UPSTREAM = std.normalize +LUA_STD_NORMALIZE_SUBDIR = normalize-$(LUA_STD_NORMALIZE_VERSION_UPSTREAM) +LUA_STD_NORMALIZE_LICENSE = MIT +LUA_STD_NORMALIZE_LICENSE_FILES = $(LUA_STD_NORMALIZE_SUBDIR)/LICENSE.md + +$(eval $(luarocks-package)) diff --git a/package/lua-stdlib/Config.in b/package/lua-stdlib/Config.in new file mode 100644 index 00000000..1843826c --- /dev/null +++ b/package/lua-stdlib/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LUA_STDLIB + bool "lua-stdlib" + help + lua-stdlib is a library of modules for common programming + tasks, including list, table and functional operations, + objects, pickling, pretty-printing and command-line option + parsing. + + https://github.com/lua-stdlib/lua-stdlib/ diff --git a/package/lua-stdlib/lua-stdlib.hash b/package/lua-stdlib/lua-stdlib.hash new file mode 100644 index 00000000..68f4d241 --- /dev/null +++ b/package/lua-stdlib/lua-stdlib.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 67eadaccbb2b6037ea70129f9616da49eaeeaf1477652a8e2cc77740286531cf stdlib-41.2.2-1.src.rock +sha256 d3177e0cd97e6ef7c459aa2c6a85f53d9b4ff091f7f296d4ed8bfaf713b6fea2 lua-stdlib-release-v41.2.2/COPYING diff --git a/package/lua-stdlib/lua-stdlib.mk b/package/lua-stdlib/lua-stdlib.mk new file mode 100644 index 00000000..bf90116e --- /dev/null +++ b/package/lua-stdlib/lua-stdlib.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# lua-stdlib +# +################################################################################ + +LUA_STDLIB_VERSION_UPSTREAM = 41.2.2 +LUA_STDLIB_VERSION = $(LUA_STDLIB_VERSION_UPSTREAM)-1 +LUA_STDLIB_NAME_UPSTREAM = stdlib +LUA_STDLIB_SUBDIR = lua-stdlib-release-v$(LUA_STDLIB_VERSION_UPSTREAM) +LUA_STDLIB_LICENSE = MIT +LUA_STDLIB_LICENSE_FILES = $(LUA_STDLIB_SUBDIR)/COPYING + +$(eval $(luarocks-package)) diff --git a/package/lua-testmore/Config.in b/package/lua-testmore/Config.in new file mode 100644 index 00000000..3cbed384 --- /dev/null +++ b/package/lua-testmore/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LUA_TESTMORE + bool "lua-testmore" + help + an Unit Testing Framework. + + https://fperrad.frama.io/lua-TestMore/ diff --git a/package/lua-testmore/lua-testmore.hash b/package/lua-testmore/lua-testmore.hash new file mode 100644 index 00000000..752fc17f --- /dev/null +++ b/package/lua-testmore/lua-testmore.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 4875103611683b13fdd0bc3658c0cbe302b4db491043a03ea002726810d371c5 lua-testmore-0.3.5-2.src.rock +sha256 0fa63370a149eda33e25987dd63bd096a616a3e47d2cfc45ca2fd66e8d2bfb35 lua-TestMore-0.3.5/COPYRIGHT diff --git a/package/lua-testmore/lua-testmore.mk b/package/lua-testmore/lua-testmore.mk new file mode 100644 index 00000000..5d6dc053 --- /dev/null +++ b/package/lua-testmore/lua-testmore.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# lua-testmore +# +################################################################################ + +LUA_TESTMORE_VERSION = 0.3.5-2 +LUA_TESTMORE_NAME_UPSTREAM = lua-TestMore +LUA_TESTMORE_LICENSE = MIT +LUA_TESTMORE_LICENSE_FILES = $(LUA_TESTMORE_SUBDIR)/COPYRIGHT + +$(eval $(luarocks-package)) diff --git a/package/lua-utf8/Config.in b/package/lua-utf8/Config.in new file mode 100644 index 00000000..313fa4e4 --- /dev/null +++ b/package/lua-utf8/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LUA_UTF8 + bool "lua-utf8" + help + This module adds UTF-8 support to Lua. + It's compatible with Lua "string" module. + + http://github.com/starwing/luautf8 diff --git a/package/lua-utf8/lua-utf8.hash b/package/lua-utf8/lua-utf8.hash new file mode 100644 index 00000000..135574f3 --- /dev/null +++ b/package/lua-utf8/lua-utf8.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 88c456bc0f00d28201b33551d83fa6e5c3ae6025aebec790c37afb317290e4fa luautf8-0.1.3-1.src.rock +sha256 74506285923bcc3e58aaca1b774db26461021783d02b2dc26bafcaa02ef7a00b luautf8-0.1.3/LICENSE diff --git a/package/lua-utf8/lua-utf8.mk b/package/lua-utf8/lua-utf8.mk new file mode 100644 index 00000000..52aaf5c7 --- /dev/null +++ b/package/lua-utf8/lua-utf8.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# lua-utf8 +# +################################################################################ + +LUA_UTF8_VERSION = 0.1.3-1 +LUA_UTF8_NAME_UPSTREAM = luautf8 +LUA_UTF8_LICENSE = MIT +LUA_UTF8_LICENSE_FILES = $(LUA_UTF8_SUBDIR)/LICENSE + +$(eval $(luarocks-package)) diff --git a/package/lua-valua/Config.in b/package/lua-valua/Config.in new file mode 100644 index 00000000..96b37965 --- /dev/null +++ b/package/lua-valua/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LUA_VALUA + bool "lua-valua" + help + This module provides tools for validating values, very useful + in forms, but also usable elsewhere. It works in appended + chains. Create a new validation object and start chaining + your test functions. + + https://github.com/sailorproject/valua diff --git a/package/lua-valua/lua-valua.hash b/package/lua-valua/lua-valua.hash new file mode 100644 index 00000000..71d43e4f --- /dev/null +++ b/package/lua-valua/lua-valua.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 bff39692fd2ac3590fd814aa1b1ca33e5d5971092955309aa8424b02b88ce1a3 valua-0.3-1.src.rock +sha256 3444c2e739c88e41e327c6cd15e4a50fea8988570642bad6e6a43d50a7f7961f valua/LICENSE diff --git a/package/lua-valua/lua-valua.mk b/package/lua-valua/lua-valua.mk new file mode 100644 index 00000000..8cb0bf52 --- /dev/null +++ b/package/lua-valua/lua-valua.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# lua-valua +# +################################################################################ + +LUA_VALUA_VERSION = 0.3-1 +LUA_VALUA_NAME_UPSTREAM = valua +LUA_VALUA_SUBDIR = valua +LUA_VALUA_LICENSE = MIT +LUA_VALUA_LICENSE_FILES = $(LUA_VALUA_SUBDIR)/LICENSE + +$(eval $(luarocks-package)) diff --git a/package/lua/5.1.5/0001-root-path.patch b/package/lua/5.1.5/0001-root-path.patch new file mode 100644 index 00000000..fd0da6eb --- /dev/null +++ b/package/lua/5.1.5/0001-root-path.patch @@ -0,0 +1,30 @@ +Adjust installation location to /usr. + +Signed-off-by: Francois Perrad + +Index: b/etc/lua.pc +=================================================================== +--- a/etc/lua.pc ++++ b/etc/lua.pc +@@ -8,7 +8,7 @@ + R= 5.1.5 + + # grep '^INSTALL_.*=' ../Makefile | sed 's/INSTALL_TOP/prefix/' +-prefix= /usr/local ++prefix= /usr + INSTALL_BIN= ${prefix}/bin + INSTALL_INC= ${prefix}/include + INSTALL_LIB= ${prefix}/lib +Index: b/src/luaconf.h +=================================================================== +--- a/src/luaconf.h ++++ b/src/luaconf.h +@@ -94,7 +94,7 @@ + ".\\?.dll;" LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll" + + #else +-#define LUA_ROOT "/usr/local/" ++#define LUA_ROOT "/usr/" + #define LUA_LDIR LUA_ROOT "share/lua/5.1/" + #define LUA_CDIR LUA_ROOT "lib/lua/5.1/" + #define LUA_PATH_DEFAULT \ diff --git a/package/lua/5.1.5/0002-shared-libs-for-lua.patch b/package/lua/5.1.5/0002-shared-libs-for-lua.patch new file mode 100644 index 00000000..3f863a53 --- /dev/null +++ b/package/lua/5.1.5/0002-shared-libs-for-lua.patch @@ -0,0 +1,78 @@ +Add the compilation of a shared library. +Compile the lua binary with the shared library. +And install the shared library. +The variable BUILDMODE allows to switch between static and dynamic mode. + +Signed-off-by: Francois Perrad + +Index: b/Makefile +=================================================================== +--- a/Makefile ++++ b/Makefile +@@ -44,6 +44,7 @@ + TO_BIN= lua luac + TO_INC= lua.h luaconf.h lualib.h lauxlib.h ../etc/lua.hpp + TO_LIB= liblua.a ++TO_SOLIB = liblua.so.$(R) + TO_MAN= lua.1 luac.1 + + # Lua version and release. +@@ -61,6 +62,8 @@ + install: dummy + cd src && $(MKDIR) $(INSTALL_BIN) $(INSTALL_INC) $(INSTALL_LIB) $(INSTALL_MAN) $(INSTALL_LMOD) $(INSTALL_CMOD) + cd src && $(INSTALL_EXEC) $(TO_BIN) $(INSTALL_BIN) ++ test -f src/$(TO_SOLIB) && cd src && $(INSTALL_EXEC) $(TO_SOLIB) $(INSTALL_LIB) || : ++ test -f src/$(TO_SOLIB) && ln -sf $(TO_SOLIB) $(INSTALL_LIB)/liblua.so || : + cd src && $(INSTALL_DATA) $(TO_INC) $(INSTALL_INC) + cd src && $(INSTALL_DATA) $(TO_LIB) $(INSTALL_LIB) + cd doc && $(INSTALL_DATA) $(TO_MAN) $(INSTALL_MAN) +Index: b/src/Makefile +=================================================================== +--- a/src/Makefile ++++ b/src/Makefile +@@ -23,6 +23,7 @@ + PLATS= aix ansi bsd freebsd generic linux macosx mingw posix solaris + + LUA_A= liblua.a ++LUA_SO= liblua.so + CORE_O= lapi.o lcode.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o \ + lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o \ + lundump.o lvm.o lzio.o +@@ -36,8 +37,13 @@ + LUAC_O= luac.o print.o + + ALL_O= $(CORE_O) $(LIB_O) $(LUA_O) $(LUAC_O) ++ifneq (dynamic,$(BUILDMODE)) + ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) ++else ++ALL_T= $(LUA_A) $(LUA_SO) $(LUA_T) $(LUAC_T) ++endif + ALL_A= $(LUA_A) ++ALL_SO= $(LUA_SO) + + default: $(PLAT) + +@@ -47,12 +53,23 @@ + + a: $(ALL_A) + ++so: $(ALL_SO) ++ + $(LUA_A): $(CORE_O) $(LIB_O) + $(AR) $@ $(CORE_O) $(LIB_O) # DLL needs all object files + $(RANLIB) $@ + ++$(LUA_SO): $(CORE_O) $(LIB_O) ++ $(CC) -o $@.$(PKG_VERSION) -shared -Wl,-soname="$@.$(PKG_VERSION)" $? ++ ln -fs $@.$(PKG_VERSION) $@ ++ ++ifneq (dynamic,$(BUILDMODE)) + $(LUA_T): $(LUA_O) $(LUA_A) + $(CC) -o $@ $(MYLDFLAGS) $(LUA_O) $(LUA_A) $(LIBS) ++else ++$(LUA_T): $(LUA_O) $(LUA_SO) ++ $(CC) -o $@ -L. $(MYLDFLAGS) $(LUA_O) -llua $(LIBS) ++endif + + $(LUAC_T): $(LUAC_O) $(LUA_A) + $(CC) -o $@ $(MYLDFLAGS) $(LUAC_O) $(LUA_A) $(LIBS) diff --git a/package/lua/5.1.5/0011-linenoise.patch b/package/lua/5.1.5/0011-linenoise.patch new file mode 100644 index 00000000..488c080a --- /dev/null +++ b/package/lua/5.1.5/0011-linenoise.patch @@ -0,0 +1,24 @@ +Add support of linenoise (replace readline) + +see discussion, http://lua-users.org/lists/lua-l/2010-03/msg00879.html + +Signed-off-by: Francois Perrad + +Index: b/src/luaconf.h +=================================================================== +--- a/src/luaconf.h ++++ b/src/luaconf.h +@@ -279,6 +279,13 @@ + if (lua_strlen(L,idx) > 0) /* non-empty line? */ \ + add_history(lua_tostring(L, idx)); /* add it to history */ + #define lua_freeline(L,b) ((void)L, free(b)) ++#elif defined(LUA_USE_LINENOISE) ++#include ++#define lua_readline(L,b,p) ((void)L, ((b)=linenoise(p)) != NULL) ++#define lua_saveline(L,idx) \ ++ if (lua_strlen(L,idx) > 0) /* non-empty line? */ \ ++ linenoiseHistoryAdd(lua_tostring(L, idx)); /* add it to history */ ++#define lua_freeline(L,b) ((void)L, free(b)) + #else + #define lua_readline(L,b,p) \ + ((void)L, fputs(p, stdout), fflush(stdout), /* show prompt */ \ diff --git a/package/lua/5.1.5/0012-fix-reader-at-eoz.patch b/package/lua/5.1.5/0012-fix-reader-at-eoz.patch new file mode 100644 index 00000000..17a28ba4 --- /dev/null +++ b/package/lua/5.1.5/0012-fix-reader-at-eoz.patch @@ -0,0 +1,46 @@ +When loading a file, Lua may call the reader function again after it returned end of input. + +Fetch from: http://www.lua.org/bugs.html#5.1.5-2 + +Signed-off-by: Francois Perrad + +Index: b/src/lzio.c +=================================================================== +--- a/src/lzio.c ++++ b/src/lzio.c +@@ -22,10 +22,14 @@ + size_t size; + lua_State *L = z->L; + const char *buff; ++ if (z->eoz) return EOZ; + lua_unlock(L); + buff = z->reader(L, z->data, &size); + lua_lock(L); +- if (buff == NULL || size == 0) return EOZ; ++ if (buff == NULL || size == 0) { ++ z->eoz = 1; /* avoid calling reader function next time */ ++ return EOZ; ++ } + z->n = size - 1; + z->p = buff; + return char2int(*(z->p++)); +@@ -51,6 +55,7 @@ + z->data = data; + z->n = 0; + z->p = NULL; ++ z->eoz = 0; + } + + +Index: b/src/lzio.h +=================================================================== +--- a/src/lzio.h ++++ b/src/lzio.h +@@ -59,6 +59,7 @@ + lua_Reader reader; + void* data; /* additional data */ + lua_State *L; /* Lua state (for reader) */ ++ int eoz; /* true if reader has no more data */ + }; + + diff --git a/package/lua/5.1.5/lua.hash b/package/lua/5.1.5/lua.hash new file mode 100644 index 00000000..22ff8b7d --- /dev/null +++ b/package/lua/5.1.5/lua.hash @@ -0,0 +1,6 @@ +# Hashes from: http://www.lua.org/ftp/ +md5 2e115fe26e435e33b0d5c022e4490567 lua-5.1.5.tar.gz +sha1 b3882111ad02ecc6b972f8c1241647905cb2e3fc lua-5.1.5.tar.gz + +# Locally computed +sha256 ee5e3e82af1e1b543c4f216e399d7c8cfee797711913f349e385101c4ae60a79 COPYRIGHT diff --git a/package/lua/5.3.6/0001-root-path.patch b/package/lua/5.3.6/0001-root-path.patch new file mode 100644 index 00000000..a44c55c9 --- /dev/null +++ b/package/lua/5.3.6/0001-root-path.patch @@ -0,0 +1,17 @@ +Adjust installation location to /usr. + +Signed-off-by: Francois Perrad + +Index: b/src/luaconf.h +=================================================================== +--- a/src/luaconf.h ++++ b/src/luaconf.h +@@ -200,7 +200,7 @@ + + #else /* }{ */ + +-#define LUA_ROOT "/usr/local/" ++#define LUA_ROOT "/usr/" + #define LUA_LDIR LUA_ROOT "share/lua/" LUA_VDIR "/" + #define LUA_CDIR LUA_ROOT "lib/lua/" LUA_VDIR "/" + #define LUA_PATH_DEFAULT \ diff --git a/package/lua/5.3.6/0002-shared-libs-for-lua.patch b/package/lua/5.3.6/0002-shared-libs-for-lua.patch new file mode 100644 index 00000000..493828c9 --- /dev/null +++ b/package/lua/5.3.6/0002-shared-libs-for-lua.patch @@ -0,0 +1,78 @@ +Add the compilation of a shared library. +Compile the lua binary with the shared library. +And install the shared library. +The variable BUILDMODE allows to switch between static and dynamic mode. + +Signed-off-by: Francois Perrad + +Index: b/Makefile +=================================================================== +--- a/Makefile ++++ b/Makefile +@@ -42,6 +42,7 @@ + TO_BIN= lua luac + TO_INC= lua.h luaconf.h lualib.h lauxlib.h lua.hpp + TO_LIB= liblua.a ++TO_SOLIB = liblua.so.$(R) + TO_MAN= lua.1 luac.1 + + # Lua version and release. +@@ -60,6 +61,8 @@ + install: dummy + cd src && $(MKDIR) $(INSTALL_BIN) $(INSTALL_INC) $(INSTALL_LIB) $(INSTALL_MAN) $(INSTALL_LMOD) $(INSTALL_CMOD) + cd src && $(INSTALL_EXEC) $(TO_BIN) $(INSTALL_BIN) ++ test -f src/$(TO_SOLIB) && cd src && $(INSTALL_EXEC) $(TO_SOLIB) $(INSTALL_LIB) || : ++ test -f src/$(TO_SOLIB) && ln -sf $(TO_SOLIB) $(INSTALL_LIB)/liblua.so || : + cd src && $(INSTALL_DATA) $(TO_INC) $(INSTALL_INC) + cd src && $(INSTALL_DATA) $(TO_LIB) $(INSTALL_LIB) + cd doc && $(INSTALL_DATA) $(TO_MAN) $(INSTALL_MAN) +Index: b/src/Makefile +=================================================================== +--- a/src/Makefile ++++ b/src/Makefile +@@ -29,6 +29,7 @@ + PLATS= aix bsd c89 freebsd generic linux macosx mingw posix solaris + + LUA_A= liblua.a ++LUA_SO= liblua.so + CORE_O= lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o \ + lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o \ + ltm.o lundump.o lvm.o lzio.o +@@ -43,8 +44,13 @@ + LUAC_O= luac.o + + ALL_O= $(BASE_O) $(LUA_O) $(LUAC_O) ++ifneq (dynamic,$(BUILDMODE)) + ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) ++else ++ALL_T= $(LUA_A) $(LUA_SO) $(LUA_T) $(LUAC_T) ++endif + ALL_A= $(LUA_A) ++ALL_SO= $(LUA_SO) + + # Targets start here. + default: $(PLAT) +@@ -55,12 +61,23 @@ + + a: $(ALL_A) + ++so: $(ALL_SO) ++ + $(LUA_A): $(BASE_O) + $(AR) $@ $(BASE_O) + $(RANLIB) $@ + ++$(LUA_SO): $(CORE_O) $(LIB_O) ++ $(CC) -o $@.$(PKG_VERSION) -shared -Wl,-soname="$@.$(PKG_VERSION)" $? ++ ln -fs $@.$(PKG_VERSION) $@ ++ ++ifneq (dynamic,$(BUILDMODE)) + $(LUA_T): $(LUA_O) $(LUA_A) + $(CC) -o $@ $(LDFLAGS) $(LUA_O) $(LUA_A) $(LIBS) ++else ++$(LUA_T): $(LUA_O) $(LUA_SO) ++ $(CC) -o $@ -L. $(LDFLAGS) $(LUA_O) -llua $(LIBS) ++endif + + $(LUAC_T): $(LUAC_O) $(LUA_A) + $(CC) -o $@ $(LDFLAGS) $(LUAC_O) $(LUA_A) $(LIBS) diff --git a/package/lua/5.3.6/0003-linenoise.patch b/package/lua/5.3.6/0003-linenoise.patch new file mode 100644 index 00000000..574e6c8f --- /dev/null +++ b/package/lua/5.3.6/0003-linenoise.patch @@ -0,0 +1,24 @@ +Add support of linenoise (replace readline) + +see discussion, http://lua-users.org/lists/lua-l/2010-03/msg00879.html + +Signed-off-by: Francois Perrad + +Index: b/src/lua.c +=================================================================== +--- a/src/lua.c ++++ b/src/lua.c +@@ -85,6 +85,13 @@ + #define lua_saveline(L,line) ((void)L, add_history(line)) + #define lua_freeline(L,b) ((void)L, free(b)) + ++#elif defined(LUA_USE_LINENOISE) ++ ++#include ++#define lua_readline(L,b,p) ((void)L, ((b)=linenoise(p)) != NULL) ++#define lua_saveline(L,line) ((void)L, linenoiseHistoryAdd(line)) ++#define lua_freeline(L,b) ((void)L, free(b)) ++ + #else /* }{ */ + + #define lua_readline(L,b,p) \ diff --git a/package/lua/5.3.6/lua.hash b/package/lua/5.3.6/lua.hash new file mode 100644 index 00000000..74849b31 --- /dev/null +++ b/package/lua/5.3.6/lua.hash @@ -0,0 +1,6 @@ +# Hashes from: http://www.lua.org/ftp/ +md5 83f23dbd5230140a3770d5f54076948d lua-5.3.6.tar.gz +sha1 f27d20d6c81292149bc4308525a9d6733c224fa5 lua-5.3.6.tar.gz + +# Locally computed +sha256 2ddff2161e0c4487d744943565538743c0721485873092f6809d072a983b06ef doc/readme.html diff --git a/package/lua/5.4.2/0001-root-path.patch b/package/lua/5.4.2/0001-root-path.patch new file mode 100644 index 00000000..8e82c1ce --- /dev/null +++ b/package/lua/5.4.2/0001-root-path.patch @@ -0,0 +1,17 @@ +Adjust installation location to /usr. + +Signed-off-by: Francois Perrad + +Index: b/src/luaconf.h +=================================================================== +--- a/src/luaconf.h ++++ b/src/luaconf.h +@@ -212,7 +212,7 @@ + + #else /* }{ */ + +-#define LUA_ROOT "/usr/local/" ++#define LUA_ROOT "/usr/" + #define LUA_LDIR LUA_ROOT "share/lua/" LUA_VDIR "/" + #define LUA_CDIR LUA_ROOT "lib/lua/" LUA_VDIR "/" + diff --git a/package/lua/5.4.2/0002-shared-libs-for-lua.patch b/package/lua/5.4.2/0002-shared-libs-for-lua.patch new file mode 100644 index 00000000..4ff20442 --- /dev/null +++ b/package/lua/5.4.2/0002-shared-libs-for-lua.patch @@ -0,0 +1,78 @@ +Add the compilation of a shared library. +Compile the lua binary with the shared library. +And install the shared library. +The variable BUILDMODE allows to switch between static and dynamic mode. + +Signed-off-by: Francois Perrad + +Index: b/Makefile +=================================================================== +--- a/Makefile ++++ b/Makefile +@@ -42,6 +42,7 @@ + TO_BIN= lua luac + TO_INC= lua.h luaconf.h lualib.h lauxlib.h lua.hpp + TO_LIB= liblua.a ++TO_SOLIB = liblua.so.$(R) + TO_MAN= lua.1 luac.1 + + # Lua version and release. +@@ -57,6 +58,8 @@ + install: dummy + cd src && $(MKDIR) $(INSTALL_BIN) $(INSTALL_INC) $(INSTALL_LIB) $(INSTALL_MAN) $(INSTALL_LMOD) $(INSTALL_CMOD) + cd src && $(INSTALL_EXEC) $(TO_BIN) $(INSTALL_BIN) ++ test -f src/$(TO_SOLIB) && cd src && $(INSTALL_EXEC) $(TO_SOLIB) $(INSTALL_LIB) || : ++ test -f src/$(TO_SOLIB) && ln -sf $(TO_SOLIB) $(INSTALL_LIB)/liblua.so || : + cd src && $(INSTALL_DATA) $(TO_INC) $(INSTALL_INC) + cd src && $(INSTALL_DATA) $(TO_LIB) $(INSTALL_LIB) + cd doc && $(INSTALL_DATA) $(TO_MAN) $(INSTALL_MAN) +Index: b/src/Makefile +=================================================================== +--- a/src/Makefile ++++ b/src/Makefile +@@ -33,6 +33,7 @@ + PLATS= guess aix bsd c89 freebsd generic linux linux-readline macosx mingw posix solaris + + LUA_A= liblua.a ++LUA_SO= liblua.so + CORE_O= lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o + LIB_O= lauxlib.o lbaselib.o lcorolib.o ldblib.o liolib.o lmathlib.o loadlib.o loslib.o lstrlib.o ltablib.o lutf8lib.o linit.o + BASE_O= $(CORE_O) $(LIB_O) $(MYOBJS) +@@ -44,8 +45,13 @@ + LUAC_O= luac.o + + ALL_O= $(BASE_O) $(LUA_O) $(LUAC_O) ++ifneq (dynamic,$(BUILDMODE)) + ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) ++else ++ALL_T= $(LUA_A) $(LUA_SO) $(LUA_T) $(LUAC_T) ++endif + ALL_A= $(LUA_A) ++ALL_SO= $(LUA_SO) + + # Targets start here. + default: $(PLAT) +@@ -56,12 +62,23 @@ + + a: $(ALL_A) + ++so: $(ALL_SO) ++ + $(LUA_A): $(BASE_O) + $(AR) $@ $(BASE_O) + $(RANLIB) $@ + ++$(LUA_SO): $(CORE_O) $(LIB_O) ++ $(CC) -o $@.$(PKG_VERSION) -shared -Wl,-soname="$@.$(PKG_VERSION)" $? ++ ln -fs $@.$(PKG_VERSION) $@ ++ ++ifneq (dynamic,$(BUILDMODE)) + $(LUA_T): $(LUA_O) $(LUA_A) + $(CC) -o $@ $(LDFLAGS) $(LUA_O) $(LUA_A) $(LIBS) ++else ++$(LUA_T): $(LUA_O) $(LUA_SO) ++ $(CC) -o $@ -L. $(LDFLAGS) $(LUA_O) -llua $(LIBS) ++endif + + $(LUAC_T): $(LUAC_O) $(LUA_A) + $(CC) -o $@ $(LDFLAGS) $(LUAC_O) $(LUA_A) $(LIBS) diff --git a/package/lua/5.4.2/0011-linenoise.patch b/package/lua/5.4.2/0011-linenoise.patch new file mode 100644 index 00000000..e842e5b1 --- /dev/null +++ b/package/lua/5.4.2/0011-linenoise.patch @@ -0,0 +1,25 @@ +Add support of linenoise (replace readline) + +see discussion, http://lua-users.org/lists/lua-l/2010-03/msg00879.html + +Signed-off-by: Francois Perrad + +Index: b/src/lua.c +=================================================================== +--- a/src/lua.c ++++ b/src/lua.c +@@ -401,6 +401,14 @@ + #define lua_saveline(L,line) ((void)L, add_history(line)) + #define lua_freeline(L,b) ((void)L, free(b)) + ++#elif defined(LUA_USE_LINENOISE) ++ ++#include ++#define lua_initreadline(L) ((void)L) ++#define lua_readline(L,b,p) ((void)L, ((b)=linenoise(p)) != NULL) ++#define lua_saveline(L,line) ((void)L, linenoiseHistoryAdd(line)) ++#define lua_freeline(L,b) ((void)L, free(b)) ++ + #else /* }{ */ + + #define lua_initreadline(L) ((void)L) diff --git a/package/lua/5.4.2/lua.hash b/package/lua/5.4.2/lua.hash new file mode 100644 index 00000000..f916c8e4 --- /dev/null +++ b/package/lua/5.4.2/lua.hash @@ -0,0 +1,6 @@ +# Hashes from: https://www.lua.org/ftp/ +md5 49c92d6a49faba342c35c52e1ac3f81e lua-5.4.2.tar.gz +sha1 96d4a21393c94bed286b8dc0568f4bdde8730b22 lua-5.4.2.tar.gz + +# Locally computed +sha256 17bd5781d5dfa8c946fea639984fcbcb499d8bb3056a3c2cb5c15c3da5d1c207 doc/readme.html diff --git a/package/lua/Config.in b/package/lua/Config.in new file mode 100644 index 00000000..5d4cee5d --- /dev/null +++ b/package/lua/Config.in @@ -0,0 +1,70 @@ +config BR2_PACKAGE_LUA + bool "lua" + select BR2_PACKAGE_HAS_LUAINTERPRETER + help + Lua is a powerful, fast, light-weight, embeddable scripting + language. + + http://www.lua.org/ + +if BR2_PACKAGE_LUA + +config BR2_PACKAGE_PROVIDES_LUAINTERPRETER + default "lua" + +choice + prompt "Lua Version" + default BR2_PACKAGE_LUA_5_3 + help + Select the version of Lua API/ABI you wish to use. + +config BR2_PACKAGE_LUA_5_1 + bool "Lua 5.1.x" + select BR2_PACKAGE_LUAINTERPRETER_ABI_VERSION_5_1 + +config BR2_PACKAGE_LUA_5_3 + bool "Lua 5.3.x" + select BR2_PACKAGE_LUAINTERPRETER_ABI_VERSION_5_3 + +config BR2_PACKAGE_LUA_5_4 + bool "Lua 5.4.x" + select BR2_PACKAGE_LUAINTERPRETER_ABI_VERSION_5_4 + +endchoice + +if BR2_PACKAGE_LUA_5_3 || BR2_PACKAGE_LUA_5_4 +config BR2_PACKAGE_LUA_32BITS + bool "Use 32 bit numbers" + default y if !BR2_ARCH_IS_64 + help + Use a 32 bit data type for numbers / integers instead of the + default 64 bit type. This option is particularly attractive + for small machines and embedded systems. + +endif + +choice + prompt "Lua command-line editing" + default BR2_PACKAGE_LUA_EDITING_NONE + +config BR2_PACKAGE_LUA_EDITING_NONE + bool "none" + help + None. + +config BR2_PACKAGE_LUA_READLINE + bool "readline support" + select BR2_PACKAGE_READLINE + select BR2_PACKAGE_NCURSES + help + Enables command-line editing in the Lua interpreter. + +config BR2_PACKAGE_LUA_LINENOISE + bool "linenoise support" + select BR2_PACKAGE_LINENOISE + help + Enables command-line editing in the Lua interpreter. + +endchoice + +endif diff --git a/package/lua/lua.mk b/package/lua/lua.mk new file mode 100644 index 00000000..e3a415a0 --- /dev/null +++ b/package/lua/lua.mk @@ -0,0 +1,113 @@ +################################################################################ +# +# lua +# +################################################################################ + +ifeq ($(BR2_PACKAGE_LUA_5_4),y) +LUA_VERSION = 5.4.2 +else ifeq ($(BR2_PACKAGE_LUA_5_3),y) +LUA_VERSION = 5.3.6 +else +LUA_VERSION = 5.1.5 +endif +LUA_SITE = https://www.lua.org/ftp +LUA_INSTALL_STAGING = YES +LUA_LICENSE = MIT +ifeq ($(BR2_PACKAGE_LUA_5_3)$(BR2_PACKAGE_LUA_5_4),y) +LUA_LICENSE_FILES = doc/readme.html +else +LUA_LICENSE_FILES = COPYRIGHT +endif +LUA_CPE_ID_VENDOR = lua + +LUA_PROVIDES = luainterpreter + +LUA_CFLAGS = -Wall -fPIC -DLUA_USE_POSIX + +ifeq ($(BR2_PACKAGE_LUA_5_4),y) +LUA_CFLAGS += -DLUA_COMPAT_5_3 +else ifeq ($(BR2_PACKAGE_LUA_5_3),y) +LUA_CFLAGS += -DLUA_COMPAT_5_2 +endif + +ifeq ($(BR2_STATIC_LIBS),y) +LUA_BUILDMODE = static +else +LUA_BUILDMODE = dynamic +LUA_CFLAGS += -DLUA_USE_DLOPEN +LUA_MYLIBS += -ldl +endif + +ifeq ($(BR2_PACKAGE_LUA_READLINE),y) +LUA_DEPENDENCIES = readline ncurses +LUA_MYLIBS += -lreadline -lhistory -lncurses +LUA_CFLAGS += -DLUA_USE_READLINE +else +ifeq ($(BR2_PACKAGE_LUA_LINENOISE),y) +LUA_DEPENDENCIES = linenoise +LUA_MYLIBS += -llinenoise +LUA_CFLAGS += -DLUA_USE_LINENOISE +endif +endif + +ifeq ($(BR2_PACKAGE_LUA_32BITS),y) +define LUA_32BITS_LUACONF + $(SED) 's/\/\* #define LUA_32BITS \*\//#define LUA_32BITS/' $(@D)/src/luaconf.h +endef + +LUA_POST_PATCH_HOOKS += LUA_32BITS_LUACONF +endif + +define HOST_LUA_LUACONF + $(SED) 's|#define LUA_ROOT.*|#define LUA_ROOT "$(HOST_DIR)/usr/"|' $(@D)/src/luaconf.h +endef +HOST_LUA_POST_PATCH_HOOKS += HOST_LUA_LUACONF + +HOST_LUA_CFLAGS = -Wall -fPIC -DLUA_USE_DLOPEN -DLUA_USE_POSIX +ifeq ($(BR2_PACKAGE_LUA_5_3),y) +HOST_LUA_CFLAGS += -DLUA_COMPAT_5_2 +endif +HOST_LUA_MYLIBS = -ldl + +define LUA_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) \ + CC="$(TARGET_CC)" RANLIB="$(TARGET_RANLIB)" \ + CFLAGS="$(TARGET_CFLAGS) $(LUA_CFLAGS)" \ + MYLIBS="$(LUA_MYLIBS)" AR="$(TARGET_CROSS)ar rcu" \ + MYLDFLAGS="$(TARGET_LDFLAGS)" \ + BUILDMODE=$(LUA_BUILDMODE) \ + PKG_VERSION=$(LUA_VERSION) -C $(@D)/src all + sed -e "s/@VERSION@/$(LUA_VERSION)/;s/@ABI@/$(LUAINTERPRETER_ABIVER)/;s/@MYLIBS@/$(LUA_MYLIBS)/" \ + package/lua/lua.pc.in > $(@D)/lua.pc +endef + +define HOST_LUA_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) \ + CFLAGS="$(HOST_LUA_CFLAGS)" \ + MYLDFLAGS="$(HOST_LDFLAGS)" \ + MYLIBS="$(HOST_LUA_MYLIBS)" \ + BUILDMODE=dynamic \ + PKG_VERSION=$(LUA_VERSION) -C $(@D)/src all + sed -e "s/@VERSION@/$(LUA_VERSION)/;s/@ABI@/$(LUAINTERPRETER_ABIVER)/;s/@MYLIBS@/$(HOST_LUA_MYLIBS)/" \ + package/lua/lua.pc.in > $(@D)/lua.pc +endef + +define LUA_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) INSTALL_TOP="$(STAGING_DIR)/usr" -C $(@D) install + $(INSTALL) -m 0644 -D $(@D)/lua.pc \ + $(STAGING_DIR)/usr/lib/pkgconfig/lua.pc +endef + +define LUA_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) INSTALL_TOP="$(TARGET_DIR)/usr" -C $(@D) install +endef + +define HOST_LUA_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE) INSTALL_TOP="$(HOST_DIR)" -C $(@D) install + $(INSTALL) -m 0644 -D $(@D)/lua.pc \ + $(HOST_DIR)/lib/pkgconfig/lua.pc +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/lua/lua.pc.in b/package/lua/lua.pc.in new file mode 100644 index 00000000..0a61d5e6 --- /dev/null +++ b/package/lua/lua.pc.in @@ -0,0 +1,26 @@ +# lua.pc -- pkg-config data for Lua + +V= @ABI@ +R= @VERSION@ + +prefix= /usr +INSTALL_BIN= ${prefix}/bin +INSTALL_INC= ${prefix}/include +INSTALL_LIB= ${prefix}/lib +INSTALL_MAN= ${prefix}/man/man1 +INSTALL_LMOD= ${prefix}/share/lua/${V} +INSTALL_CMOD= ${prefix}/lib/lua/${V} + +# canonical vars +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: Lua +Description: An Extensible Extension Language +Version: ${R} +Requires: +Libs: -L${libdir} -llua -lm @MYLIBS@ +Cflags: -I${includedir} + +# (end of lua.pc) diff --git a/package/luabitop/Config.in b/package/luabitop/Config.in new file mode 100644 index 00000000..656b1c73 --- /dev/null +++ b/package/luabitop/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LUABITOP + bool "luabitop" + depends on BR2_PACKAGE_LUA_5_1 + help + Lua BitOp is a C extension module for Lua 5.1/5.2 which adds + bitwise operations on numbers. + + http://bitop.luajit.org + +comment "luabitop needs Lua 5.1" + depends on !BR2_PACKAGE_LUA_5_1 diff --git a/package/luabitop/luabitop.hash b/package/luabitop/luabitop.hash new file mode 100644 index 00000000..02757a6b --- /dev/null +++ b/package/luabitop/luabitop.hash @@ -0,0 +1,4 @@ +# computed by luarocks/buildroot +sha256 fc7a8065a57462ee13bed7f95b0ab13f94ecd1bf846108c61ccf2c75548af26e luabitop-1.0.2-1.src.rock +# Locally calcuated +sha256 25e331120d0c2f95fa2ac6e439ca920f0a4362c366a4c7382d843113743a3ba5 LuaBitOp-1.0.2/README diff --git a/package/luabitop/luabitop.mk b/package/luabitop/luabitop.mk new file mode 100644 index 00000000..a36a2fea --- /dev/null +++ b/package/luabitop/luabitop.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# luabitop +# +################################################################################ + +LUABITOP_VERSION = 1.0.2-1 +LUABITOP_NAME_UPSTREAM = LuaBitOp +LUABITOP_LICENSE = MIT +LUABITOP_LICENSE_FILES = $(LUABITOP_SUBDIR)/README + +$(eval $(luarocks-package)) diff --git a/package/luadbi-sqlite3/Config.in b/package/luadbi-sqlite3/Config.in new file mode 100644 index 00000000..600c5526 --- /dev/null +++ b/package/luadbi-sqlite3/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LUADBI_SQLITE3 + bool "luadbi-sqlite3" + select BR2_PACKAGE_SQLITE + select BR2_PACKAGE_LUADBI # runtime + help + LuaDBI is a database interface library for Lua. + And this is the SQLite3 backend. + + https://github.com/mwild1/luadbi diff --git a/package/luadbi-sqlite3/luadbi-sqlite3.hash b/package/luadbi-sqlite3/luadbi-sqlite3.hash new file mode 100644 index 00000000..3e865df3 --- /dev/null +++ b/package/luadbi-sqlite3/luadbi-sqlite3.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 c5b043db43941a3c6e43d3e3699236846ed6d03a6c4cb12fa1a497f965138d9f luadbi-sqlite3-0.7.2-1.src.rock +sha256 988d73cc2e56f972e8177091e084855fc2904d0fafcfe5c4e02864f25ce2b928 luadbi/COPYING diff --git a/package/luadbi-sqlite3/luadbi-sqlite3.mk b/package/luadbi-sqlite3/luadbi-sqlite3.mk new file mode 100644 index 00000000..4ae2b5cf --- /dev/null +++ b/package/luadbi-sqlite3/luadbi-sqlite3.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# luadbi-sqlite3 +# +################################################################################ + +LUADBI_SQLITE3_VERSION = 0.7.2-1 +LUADBI_SQLITE3_SUBDIR = luadbi +LUADBI_SQLITE3_LICENSE = MIT +LUADBI_SQLITE3_LICENSE_FILES = $(LUADBI_SQLITE3_SUBDIR)/COPYING +LUADBI_SQLITE3_DEPENDENCIES = sqlite + +$(eval $(luarocks-package)) diff --git a/package/luadbi/Config.in b/package/luadbi/Config.in new file mode 100644 index 00000000..2e290585 --- /dev/null +++ b/package/luadbi/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LUADBI + bool "luadbi" + help + LuaDBI is a database interface library for Lua. + It is designed to provide a RDBMS agnostic API for handling + database operations. LuaDBI also provides support for + prepared statement handles, placeholders and bind parameters + for all database operations. + + https://github.com/mwild1/luadbi diff --git a/package/luadbi/luadbi.hash b/package/luadbi/luadbi.hash new file mode 100644 index 00000000..07a9cc21 --- /dev/null +++ b/package/luadbi/luadbi.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 9ebbbaf4ea1f48628341e9ff3c1de10a57200c02453734f41b8016b0fc7b4956 luadbi-0.7.2-1.src.rock +sha256 988d73cc2e56f972e8177091e084855fc2904d0fafcfe5c4e02864f25ce2b928 luadbi/COPYING diff --git a/package/luadbi/luadbi.mk b/package/luadbi/luadbi.mk new file mode 100644 index 00000000..fbae6b31 --- /dev/null +++ b/package/luadbi/luadbi.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# luadbi +# +################################################################################ + +LUADBI_VERSION = 0.7.2-1 +LUADBI_SUBDIR = luadbi +LUADBI_LICENSE = MIT +LUADBI_LICENSE_FILES = $(LUADBI_SUBDIR)/COPYING + +$(eval $(luarocks-package)) diff --git a/package/luaexpat/0001-restore-getcurrentbytecount.patch b/package/luaexpat/0001-restore-getcurrentbytecount.patch new file mode 100644 index 00000000..6cf21926 --- /dev/null +++ b/package/luaexpat/0001-restore-getcurrentbytecount.patch @@ -0,0 +1,40 @@ +From 77cb691f781918908dfe34785f00a5ff75d5cc20 Mon Sep 17 00:00:00 2001 +From: Francois Perrad +Date: Sat, 16 Feb 2019 15:56:00 +0100 +Subject: [PATCH] restore getcurrentbytecount + +see https://github.com/tomasguisasola/luaexpat/issues/3 + +Fetch from: https://github.com/tomasguisasola/luaexpat/commit/0926f2d705109b7d35b721344264b39c1169e0de + +Signed-off-by: Francois Perrad +--- + src/lxplib.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/luaexpat-1.3.3/src/lxplib.c b/luaexpat-1.3.3/src/lxplib.c +index 7726913..35bec3c 100644 +--- a/luaexpat-1.3.3/src/lxplib.c ++++ b/luaexpat-1.3.3/src/lxplib.c +@@ -538,11 +538,18 @@ static int lxp_stop (lua_State *L) { + return 1; + } + ++static int lxp_getcurrentbytecount (lua_State* L) { ++ lxp_userdata *xpu = checkparser(L, 1); ++ lua_pushinteger(L, XML_GetCurrentByteCount(xpu->parser)); ++ return 1; ++} ++ + static const luaL_Reg lxp_meths[] = { + {"parse", lxp_parse}, + {"close", lxp_close}, + {"__gc", parser_gc}, + {"pos", lxp_pos}, ++ {"getcurrentbytecount", lxp_getcurrentbytecount}, + {"setencoding", lxp_setencoding}, + {"getcallbacks", getcallbacks}, + {"getbase", getbase}, +-- +2.17.1 + diff --git a/package/luaexpat/Config.in b/package/luaexpat/Config.in new file mode 100644 index 00000000..2322dc43 --- /dev/null +++ b/package/luaexpat/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LUAEXPAT + bool "luaexpat" + select BR2_PACKAGE_EXPAT + help + LuaExpat is a SAX XML parser based on the Expat library. + + http://www.keplerproject.org/luaexpat/ diff --git a/package/luaexpat/luaexpat.hash b/package/luaexpat/luaexpat.hash new file mode 100644 index 00000000..dd1cf40e --- /dev/null +++ b/package/luaexpat/luaexpat.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 b55908fcd7df490a59aab25284460add8283f1c6b94ab584900fe3e49775172a luaexpat-1.3.3-1.src.rock +sha256 7f5cb0c1750babcbb09637b7f0ff34972d51cf23b7f413bef902b47aa65febcd luaexpat-1.3.3/LICENSE diff --git a/package/luaexpat/luaexpat.mk b/package/luaexpat/luaexpat.mk new file mode 100644 index 00000000..8c86b24f --- /dev/null +++ b/package/luaexpat/luaexpat.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# luaexpat +# +################################################################################ + +LUAEXPAT_VERSION = 1.3.3-1 +LUAEXPAT_LICENSE = MIT +LUAEXPAT_LICENSE_FILES = $(LUAEXPAT_SUBDIR)/LICENSE +LUAEXPAT_DEPENDENCIES = expat + +$(eval $(luarocks-package)) diff --git a/package/luaexpatutils/Config.in b/package/luaexpatutils/Config.in new file mode 100644 index 00000000..28a7b095 --- /dev/null +++ b/package/luaexpatutils/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LUAEXPATUTILS + bool "luaexpatutils" + select BR2_PACKAGE_LUAEXPAT + help + lxp.doc is a module that provides useful features for working + with XML formats in LOM format as used by the LuaExpat project + from Kepler. + + https://github.com/stevedonovan/LuaExpatUtils diff --git a/package/luaexpatutils/luaexpatutils.hash b/package/luaexpatutils/luaexpatutils.hash new file mode 100644 index 00000000..fe32eea1 --- /dev/null +++ b/package/luaexpatutils/luaexpatutils.hash @@ -0,0 +1,2 @@ +# Locally calculated +sha256 9b50bef94a6ddb6e6d4fffd5392f5c53d15e1a048966b559c4f8eda5e84d4517 luaexpatutils-88c228365b084224c911d34aff06002634b38b50.tar.gz diff --git a/package/luaexpatutils/luaexpatutils.mk b/package/luaexpatutils/luaexpatutils.mk new file mode 100644 index 00000000..9bfc6547 --- /dev/null +++ b/package/luaexpatutils/luaexpatutils.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# luaexpatutils +# +################################################################################ + +LUAEXPATUTILS_VERSION = 88c228365b084224c911d34aff06002634b38b50 +LUAEXPATUTILS_SITE = $(call github,stevedonovan,LuaExpatUtils,$(LUAEXPATUTILS_VERSION)) +LUAEXPATUTILS_LICENSE = Public Domain +LUAEXPATUTILS_DEPENDENCIES = luaexpat + +define LUAEXPATUTILS_INSTALL_TARGET_CMDS + $(INSTALL) -m 0644 -D $(@D)/lua/doc.lua \ + $(TARGET_DIR)/usr/share/lua/$(LUAINTERPRETER_ABIVER)/lxp/doc.lua +endef + +$(eval $(generic-package)) diff --git a/package/luafilesystem/Config.in b/package/luafilesystem/Config.in new file mode 100644 index 00000000..7c130f8d --- /dev/null +++ b/package/luafilesystem/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LUAFILESYSTEM + bool "luafilesystem" + help + LuaFileSystem offers a portable way to access + the underlying directory structure and file attributes. + + http://keplerproject.github.com/luafilesystem/ diff --git a/package/luafilesystem/luafilesystem.hash b/package/luafilesystem/luafilesystem.hash new file mode 100644 index 00000000..747b9848 --- /dev/null +++ b/package/luafilesystem/luafilesystem.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 576270a55752894254c2cba0d49d73595d37ec4ea8a75e557fdae7aff80e19cf luafilesystem-1.8.0-1.src.rock +sha256 beb2c9eed6466d572c3888028a77421206053a3c023429cbd69e5015badba842 luafilesystem/LICENSE diff --git a/package/luafilesystem/luafilesystem.mk b/package/luafilesystem/luafilesystem.mk new file mode 100644 index 00000000..b8b07176 --- /dev/null +++ b/package/luafilesystem/luafilesystem.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# luafilesystem +# +################################################################################ + +LUAFILESYSTEM_VERSION = 1.8.0-1 +LUAFILESYSTEM_SUBDIR = luafilesystem +LUAFILESYSTEM_LICENSE = MIT +LUAFILESYSTEM_LICENSE_FILES = $(LUAFILESYSTEM_SUBDIR)/LICENSE + +$(eval $(luarocks-package)) diff --git a/package/luainterpreter/Config.in b/package/luainterpreter/Config.in new file mode 100644 index 00000000..873fb345 --- /dev/null +++ b/package/luainterpreter/Config.in @@ -0,0 +1,25 @@ +config BR2_PACKAGE_HAS_LUAINTERPRETER + bool + +config BR2_PACKAGE_PROVIDES_LUAINTERPRETER + string + depends on BR2_PACKAGE_HAS_LUAINTERPRETER + +config BR2_PACKAGE_LUAINTERPRETER_ABI_VERSION + string + default "5.1" if BR2_PACKAGE_LUAINTERPRETER_ABI_VERSION_5_1 + default "5.3" if BR2_PACKAGE_LUAINTERPRETER_ABI_VERSION_5_3 + default "5.4" if BR2_PACKAGE_LUAINTERPRETER_ABI_VERSION_5_4 + +config BR2_PACKAGE_LUAINTERPRETER_ABI_VERSION_5_1 + bool + +config BR2_PACKAGE_LUAINTERPRETER_ABI_VERSION_5_3 + bool + +config BR2_PACKAGE_LUAINTERPRETER_ABI_VERSION_5_4 + bool + +config BR2_PACKAGE_PROVIDES_HOST_LUAINTERPRETER + string + default "host-lua" diff --git a/package/luainterpreter/luainterpreter.mk b/package/luainterpreter/luainterpreter.mk new file mode 100644 index 00000000..9d9f85a5 --- /dev/null +++ b/package/luainterpreter/luainterpreter.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# luainterpreter +# +################################################################################ + +LUAINTERPRETER_ABIVER = $(call qstrip,$(BR2_PACKAGE_LUAINTERPRETER_ABI_VERSION)) + +# Lua packages often install documentation, clean that up globally +define LUAINTERPRETER_REMOVE_DOC + rm -rf $(TARGET_DIR)/usr/share/lua/$(LUAINTERPRETER_ABIVER)/doc +endef + +LUAINTERPRETER_TARGET_FINALIZE_HOOKS += LUAINTERPRETER_REMOVE_DOC + +$(eval $(virtual-package)) +$(eval $(host-virtual-package)) + +LUA_RUN = $(HOST_DIR)/bin/lua diff --git a/package/luajit/0001-no-bin-symlink.patch b/package/luajit/0001-no-bin-symlink.patch new file mode 100644 index 00000000..d32ec5ad --- /dev/null +++ b/package/luajit/0001-no-bin-symlink.patch @@ -0,0 +1,26 @@ +Do not use a symlink for the binary, simply name it luajit + +Signed-off-by: Thomas Petazzoni + +Index: b/Makefile +=================================================================== +--- a/Makefile ++++ b/Makefile +@@ -44,8 +44,7 @@ + INSTALL_MAN= $(INSTALL_SHARE)/man/man1 + INSTALL_PKGCONFIG= $(INSTALL_LIB)/pkgconfig + +-INSTALL_TNAME= luajit-$(VERSION) +-INSTALL_TSYMNAME= luajit ++INSTALL_TNAME= luajit + INSTALL_ANAME= libluajit-$(ABIVER).a + INSTALL_SOSHORT1= libluajit-$(ABIVER).so + INSTALL_SOSHORT2= libluajit-$(ABIVER).so.$(MAJVER) +@@ -60,7 +59,6 @@ + INSTALL_SHORT1= $(INSTALL_LIB)/$(INSTALL_SOSHORT1) + INSTALL_SHORT2= $(INSTALL_LIB)/$(INSTALL_SOSHORT2) + INSTALL_T= $(INSTALL_BIN)/$(INSTALL_TNAME) +-INSTALL_TSYM= $(INSTALL_BIN)/$(INSTALL_TSYMNAME) + INSTALL_PC= $(INSTALL_PKGCONFIG)/$(INSTALL_PCNAME) + + INSTALL_DIRS= $(INSTALL_BIN) $(INSTALL_LIB) $(INSTALL_INC) $(INSTALL_MAN) \ diff --git a/package/luajit/0002-install-inc.patch b/package/luajit/0002-install-inc.patch new file mode 100644 index 00000000..5f6547fc --- /dev/null +++ b/package/luajit/0002-install-inc.patch @@ -0,0 +1,17 @@ +Install includes like lua's ones + +Signed-off-by: Francois Perrad + +Index: b/Makefile +=================================================================== +--- a/Makefile ++++ b/Makefile +@@ -33,7 +33,7 @@ + INSTALL_BIN= $(DPREFIX)/bin + INSTALL_LIB= $(DPREFIX)/$(MULTILIB) + INSTALL_SHARE= $(DPREFIX)/share +-INSTALL_INC= $(DPREFIX)/include/luajit-$(MAJVER).$(MINVER) ++INSTALL_INC= $(DPREFIX)/include + + INSTALL_LJLIBD= $(INSTALL_SHARE)/luajit-$(VERSION) + INSTALL_JITLIB= $(INSTALL_LJLIBD)/jit diff --git a/package/luajit/Config.in b/package/luajit/Config.in new file mode 100644 index 00000000..eb3eb019 --- /dev/null +++ b/package/luajit/Config.in @@ -0,0 +1,45 @@ +config BR2_PACKAGE_LUAJIT_ARCH_SUPPORTS + bool + default y if BR2_i386 || \ + (BR2_x86_64 && BR2_HOSTARCH='x86_64') || \ + BR2_powerpc || BR2_arm || BR2_armeb || BR2_aarch64 || \ + ((BR2_mips || BR2_mipsel) && !BR2_MIPS_SOFT_FLOAT && \ + !BR2_MIPS_CPU_MIPS32R6 && !BR2_MIPS_CPU_MIPS64R6) + # -m32 flag is used for 32bit builds and host-luajit has + # limited architecture support + depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86" + +config BR2_PACKAGE_LUAJIT + bool "luajit" + depends on !BR2_STATIC_LIBS # dlopen + # Luajit is only available for some target architectures, and + # has some complexity wrt 32/64. See luajit.mk for details. + depends on BR2_PACKAGE_LUAJIT_ARCH_SUPPORTS + # luajit.mk uses the "-m32" compiler option to build 32bit + # binaries, so check if that option is supported. See + # luajit.mk for details. + select BR2_PACKAGE_HAS_LUAINTERPRETER + select BR2_PACKAGE_LUAINTERPRETER_ABI_VERSION_5_1 + select BR2_HOSTARCH_NEEDS_IA32_COMPILER if !BR2_ARCH_IS_64 + help + LuaJIT implements the full set of language features defined + by Lua 5.1. The virtual machine (VM) is API- and + ABI-compatible to the standard Lua interpreter and can be + deployed as a drop-in replacement. + + https://github.com/moonjit/moonjit + +if BR2_PACKAGE_LUAJIT + +config BR2_PACKAGE_PROVIDES_LUAINTERPRETER + default "luajit" + +config BR2_PACKAGE_LUAJIT_COMPAT52 + bool "Lua 5.2 compatibility" + help + Compile with Lua 5.2 compatibility. + +endif + +comment "luajit needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/luajit/luajit.hash b/package/luajit/luajit.hash new file mode 100644 index 00000000..532ec0b2 --- /dev/null +++ b/package/luajit/luajit.hash @@ -0,0 +1,5 @@ +# Locally calculated +sha256 c3de8e29aa617fc594c043f57636ab9ad71af2b4a3a513932b05f5cdaa4320b2 luajit-2.1.2.tar.gz + +# Locally calculated +sha256 aa64a7706ded773011b933f4230d7b35ba662598197f82ac2c7bca62abdaa4d7 COPYRIGHT diff --git a/package/luajit/luajit.mk b/package/luajit/luajit.mk new file mode 100644 index 00000000..defa21dd --- /dev/null +++ b/package/luajit/luajit.mk @@ -0,0 +1,78 @@ +################################################################################ +# +# luajit +# +################################################################################ + +LUAJIT_VERSION = 2.1.2 +LUAJIT_SITE = $(call github,moonjit,moonjit,$(LUAJIT_VERSION)) +LUAJIT_LICENSE = MIT +LUAJIT_LICENSE_FILES = COPYRIGHT + +LUAJIT_INSTALL_STAGING = YES + +LUAJIT_PROVIDES = luainterpreter + +ifeq ($(BR2_PACKAGE_LUAJIT_COMPAT52),y) +LUAJIT_XCFLAGS += -DLUAJIT_ENABLE_LUA52COMPAT +endif + +# The luajit build procedure requires the host compiler to have the +# same bitness as the target compiler. Therefore, on a x86 build +# machine, we can't build luajit for x86_64, which is checked in +# Config.in. When the target is a 32 bits target, we pass -m32 to +# ensure that even on 64 bits build machines, a compiler of the same +# bitness is used. Of course, this assumes that the 32 bits multilib +# libraries are installed. +ifeq ($(BR2_ARCH_IS_64),y) +LUAJIT_HOST_CC = $(HOSTCC) +else +LUAJIT_HOST_CC = $(HOSTCC) -m32 +endif + +# We unfortunately can't use TARGET_CONFIGURE_OPTS, because the luajit +# build system uses non conventional variable names. +define LUAJIT_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) PREFIX="/usr" \ + STATIC_CC="$(TARGET_CC)" \ + DYNAMIC_CC="$(TARGET_CC) -fPIC" \ + TARGET_LD="$(TARGET_CC)" \ + TARGET_AR="$(TARGET_AR) rcus" \ + TARGET_STRIP=true \ + TARGET_CFLAGS="$(TARGET_CFLAGS)" \ + TARGET_LDFLAGS="$(TARGET_LDFLAGS)" \ + HOST_CC="$(LUAJIT_HOST_CC)" \ + HOST_CFLAGS="$(HOST_CFLAGS)" \ + HOST_LDFLAGS="$(HOST_LDFLAGS)" \ + BUILDMODE=dynamic \ + XCFLAGS=$(LUAJIT_XCFLAGS) \ + -C $(@D) amalg +endef + +define LUAJIT_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) PREFIX="/usr" DESTDIR="$(STAGING_DIR)" LDCONFIG=true -C $(@D) install +endef + +define LUAJIT_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) PREFIX="/usr" DESTDIR="$(TARGET_DIR)" LDCONFIG=true -C $(@D) install +endef + +define LUAJIT_INSTALL_SYMLINK + ln -fs luajit $(TARGET_DIR)/usr/bin/lua +endef +LUAJIT_POST_INSTALL_TARGET_HOOKS += LUAJIT_INSTALL_SYMLINK + +# host-efl package needs host-luajit to be linked dynamically. +define HOST_LUAJIT_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) PREFIX="$(HOST_DIR)" BUILDMODE=dynamic \ + TARGET_LDFLAGS="$(HOST_LDFLAGS)" \ + XCFLAGS=$(LUAJIT_XCFLAGS) \ + -C $(@D) amalg +endef + +define HOST_LUAJIT_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE) PREFIX="$(HOST_DIR)" LDCONFIG=true -C $(@D) install +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/luajson/Config.in b/package/luajson/Config.in new file mode 100644 index 00000000..c9321bb7 --- /dev/null +++ b/package/luajson/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_LUAJSON + bool "luajson" + select BR2_PACKAGE_LPEG # runtime + help + LuaJSON is a customizable JSON decoder/encoder + using LPEG for parsing. + + http://github.com/harningt/luajson diff --git a/package/luajson/luajson.hash b/package/luajson/luajson.hash new file mode 100644 index 00000000..3b7885aa --- /dev/null +++ b/package/luajson/luajson.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 28a5928cf2e4fd79fa9a9aceaef5ebf1dccb1146489b7de4c2726f561700f01c luajson-1.3.4-1.src.rock +sha256 87565fca189b70f2e119b2a99e5e92a7aaab9f2eb05228b56b88e6c2e2f98bcd luajson/LICENSE diff --git a/package/luajson/luajson.mk b/package/luajson/luajson.mk new file mode 100644 index 00000000..81a9f811 --- /dev/null +++ b/package/luajson/luajson.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# luajson +# +################################################################################ + +LUAJSON_VERSION = 1.3.4-1 +LUAJSON_SUBDIR = luajson +LUAJSON_LICENSE = MIT +LUAJSON_LICENSE_FILES = $(LUAJSON_SUBDIR)/LICENSE + +$(eval $(luarocks-package)) diff --git a/package/lualdap/Config.in b/package/lualdap/Config.in new file mode 100644 index 00000000..ef3e9320 --- /dev/null +++ b/package/lualdap/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_LUALDAP + bool "lualdap" + depends on !BR2_STATIC_LIBS + depends on !BR2_PACKAGE_LUA_5_4 + depends on BR2_USE_WCHAR # openldap + depends on BR2_USE_MMU # openldap + select BR2_PACKAGE_OPENLDAP + help + LuaLDAP is a simple interface from Lua to an LDAP client, + in fact it is a bind to OpenLDAP client. + + https://github.com/lualdap/lualdap + +comment "lualdap needs a toolchain w/ wchar, dynamic library, Lua <= 5.3" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || BR2_STATIC_LIBS || BR2_PACKAGE_LUA_5_4 diff --git a/package/lualdap/lualdap.hash b/package/lualdap/lualdap.hash new file mode 100644 index 00000000..77eced43 --- /dev/null +++ b/package/lualdap/lualdap.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 3e028faa6a5798cf2f3d50b9853b9b3fb6eb562b62010747bd5b6f50b57bb1cc lualdap-1.2.5.tar.gz +sha256 7afd8bed6c96a2ba1d1fa9f03ea04c140065462dbd37d7fb66cc7c3c6722aa89 LICENSE.md diff --git a/package/lualdap/lualdap.mk b/package/lualdap/lualdap.mk new file mode 100644 index 00000000..6ab33026 --- /dev/null +++ b/package/lualdap/lualdap.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# lualdap +# +################################################################################ + +LUALDAP_VERSION = 1.2.5 +LUALDAP_SITE = $(call github,lualdap,lualdap,v$(LUALDAP_VERSION)) +LUALDAP_LICENSE = MIT +LUALDAP_LICENSE_FILES = LICENSE.md +LUALDAP_DEPENDENCIES = luainterpreter openldap + +define LUALDAP_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) -C $(@D) \ + CC=$(TARGET_CC) \ + LUA_LIB=-llua \ + LUA_LIBDIR="$(STAGING_DIR)/usr/lib" \ + LUA_INCDIR="$(STAGING_DIR)/usr/include" \ + LDAP_LIBDIR="$(STAGING_DIR)/usr/lib" \ + LDAP_INCDIR="$(STAGING_DIR)/usr/include" \ + LBER_LIBDIR="$(STAGING_DIR)/usr/lib" \ + LBER_INCDIR="$(STAGING_DIR)/usr/include" \ + src/lualdap.so +endef + +define LUALDAP_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) -C $(@D) \ + DESTDIR="$(TARGET_DIR)" \ + INST_LIBDIR="/usr/lib/lua/$(LUAINTERPRETER_ABIVER)/" \ + install +endef + +$(eval $(generic-package)) diff --git a/package/lualogging/Config.in b/package/lualogging/Config.in new file mode 100644 index 00000000..79e352a7 --- /dev/null +++ b/package/lualogging/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LUALOGGING + bool "lualogging" + help + LuaLogging provides a simple API to use logging features in + Lua. Its design was based on log4j. LuaLogging currently + supports, through the use of appenders, console, file, rolling + file, email, socket and SQL outputs. + + https://github.com/keplerproject/lualogging diff --git a/package/lualogging/lualogging.hash b/package/lualogging/lualogging.hash new file mode 100644 index 00000000..6cd82ab2 --- /dev/null +++ b/package/lualogging/lualogging.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 54501b7b84c28fa0c0d310ebfceb6e30be3396bd8aa9caaef7ddfbb0ac0976bc lualogging-1.4.0-1.src.rock +sha256 895d1a80efc5fc60236b70c4bf60bdec409c56c75b4ebe4c2da9cb20a1a11908 lualogging/COPYRIGHT diff --git a/package/lualogging/lualogging.mk b/package/lualogging/lualogging.mk new file mode 100644 index 00000000..26df9e33 --- /dev/null +++ b/package/lualogging/lualogging.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# lualogging +# +################################################################################ + +LUALOGGING_VERSION = 1.4.0-1 +LUALOGGING_SUBDIR = lualogging +LUALOGGING_LICENSE = MIT +LUALOGGING_LICENSE_FILES = $(LUALOGGING_SUBDIR)/COPYRIGHT + +$(eval $(luarocks-package)) diff --git a/package/luaossl/Config.in b/package/luaossl/Config.in new file mode 100644 index 00000000..d8763e76 --- /dev/null +++ b/package/luaossl/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_LUAOSSL + bool "luaossl" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_OPENSSL + help + luaossl is a comprehensive binding to OpenSSL for Lua 5.1, + 5.2, and later. + + It includes support for certificate and key management, + key generation, signature verification, and deep bindings + to the distinguished name, alternative name, and X.509v3 + extension interfaces. It also binds OpenSSL's bignum, message + digest, HMAC, cipher, and CSPRNG interfaces. + + http://25thandclement.com/~william/projects/luaossl.html + +comment "luaossl needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/luaossl/luaossl.hash b/package/luaossl/luaossl.hash new file mode 100644 index 00000000..c8fa7942 --- /dev/null +++ b/package/luaossl/luaossl.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 ea6d624e557939e30b93355dd1dc11465e81aa38a5542ab3c04b48608ac3cd78 luaossl-20200709-0.src.rock +sha256 7bd585fba3ae52943e0915e4c8ca049acde9f1e5cea101ef6b294427c8f0ee7d luaossl-rel-20200709/LICENSE diff --git a/package/luaossl/luaossl.mk b/package/luaossl/luaossl.mk new file mode 100644 index 00000000..d241bce8 --- /dev/null +++ b/package/luaossl/luaossl.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# luaossl +# +################################################################################ + +LUAOSSL_VERSION_UPSTREAM = 20200709 +LUAOSSL_VERSION = $(LUAOSSL_VERSION_UPSTREAM)-0 +LUAOSSL_SUBDIR = luaossl-rel-$(LUAOSSL_VERSION_UPSTREAM) +LUAOSSL_LICENSE = MIT +LUAOSSL_LICENSE_FILES = $(LUAOSSL_SUBDIR)/LICENSE +LUAOSSL_DEPENDENCIES = openssl + +$(eval $(luarocks-package)) diff --git a/package/luaposix/Config.in b/package/luaposix/Config.in new file mode 100644 index 00000000..85943f99 --- /dev/null +++ b/package/luaposix/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_LUAPOSIX + bool "luaposix" + # "bit32" is included in Lua 5.2+. luajit has an equivalent + # "bit" module, but since it has a different name, luaposix + # doesn't find it. + select BR2_PACKAGE_LUA_BIT32 if BR2_PACKAGE_LUAINTERPRETER_ABI_VERSION_5_1 # runtime + help + This is a POSIX binding for LuaJIT, Lua 5.1 through 5.4; + like most libraries it simply binds to C APIs on the + underlying system, so it won't work on non-POSIX systems. + However, it does try to detect the level of POSIX conformance + of the underlying system and bind only available APIs. + + https://github.com/luaposix/luaposix diff --git a/package/luaposix/luaposix.hash b/package/luaposix/luaposix.hash new file mode 100644 index 00000000..54617853 --- /dev/null +++ b/package/luaposix/luaposix.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 a4edf2f715feff65acb009e8d1689e57ec665eb79bc36a6649fae55eafd56809 luaposix-35.0.tar.gz +sha256 e5d496c903dc3989bb2f6f175cda52d26e3494ad1fdd67ae1c3b3e5f76ffb86f LICENSE diff --git a/package/luaposix/luaposix.mk b/package/luaposix/luaposix.mk new file mode 100644 index 00000000..d04881df --- /dev/null +++ b/package/luaposix/luaposix.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# luaposix +# +################################################################################ + +LUAPOSIX_VERSION = 35.0 +LUAPOSIX_SITE = $(call github,luaposix,luaposix,v$(LUAPOSIX_VERSION)) +LUAPOSIX_LICENSE = MIT +LUAPOSIX_LICENSE_FILES = LICENSE +LUAPOSIX_DEPENDENCIES = luainterpreter host-lua + +define LUAPOSIX_BUILD_CMDS + (cd $(@D); \ + $(LUA_RUN) build-aux/luke \ + CC="$(TARGET_CC)" \ + CFLAGS="$(TARGET_CFLAGS)" \ + LUA_INCDIR=$(STAGING_DIR)/usr/include \ + ) +endef + +define LUAPOSIX_INSTALL_TARGET_CMDS + (cd $(@D); \ + $(LUA_RUN) build-aux/luke install \ + INST_LIBDIR="$(TARGET_DIR)/usr/lib/lua/$(LUAINTERPRETER_ABIVER)" \ + INST_LUADIR="$(TARGET_DIR)/usr/share/lua/$(LUAINTERPRETER_ABIVER)" \ + ) +endef + +$(eval $(generic-package)) diff --git a/package/luarocks/buildroot.lua b/package/luarocks/buildroot.lua new file mode 100644 index 00000000..67dac33a --- /dev/null +++ b/package/luarocks/buildroot.lua @@ -0,0 +1,411 @@ + +--- Module implementing the LuaRocks "buildroot" command. +local buildroot = {} + +local dir = require("luarocks.dir") +local fs = require("luarocks.fs") +local util = require("luarocks.util") +local queries = require("luarocks.queries") +local search = require("luarocks.search") +local download = require("luarocks.download") +local fetch = require("luarocks.fetch") + +function buildroot.add_to_parser(parser) + local cmd = parser:command("buildroot", [[ +This addon generates Buildroot package files of a rock. +First argument is the name of a rock, the second argument is optional +and needed when Buildroot uses another name (usually prefixed by lua-). +Files are generated with the source content of the rock and more +especially the rockspec. So, the rock is downloaded and unpacked. +]], util.see_also()) + :summary("generate buildroot package files of a rock.") + + cmd:argument("rockname", "the name of a rock to be fetched and unpacked.") + cmd:argument("brname", "the name used by Buildroot.") + :args("?") +end + +local function brname (name) + return name:upper():gsub('-', '_') +end + +local function brlicense (license) + if license:match('MIT/X') then + return 'MIT' + end + return license +end + +local function wrap (txt, max) + local lines = {} + local line = '' + for word in txt:gmatch('(%S+)') do + if line:len() + word:len() > max - 1 then + lines[#lines+1] = line + line = '' + end + if line == '' then + line = word + else + line = line .. ' ' .. word + end + end + lines[#lines+1] = line + return lines +end + +local function has_c_files (rockspec) + for _, mod in pairs(rockspec.build.modules or {}) do + if type(mod) == 'string' then + if mod:match'%.c$' then + return true + end + elseif type(mod) == 'table' then + local sources = mod.sources + if type(sources) == 'string' and sources:match'%.c$' then + return true + end + for _, src in ipairs(sources or mod) do + if src:match'%.c$' then + return true + end + end + end + end + return false +end + +local function get_main_modules (rockspec) + local t = {} + for name in pairs(rockspec.build.modules or {}) do + if not name:match('%.') then + t[#t+1] = name + end + end + if #t == 0 then + for name in pairs(rockspec.build.modules or {}) do + t[#t+1] = name + end + end + if #t == 0 then + t[#t+1] = rockspec.package:gsub('%-', '') + end + table.sort(t) + return t +end + +local function get_external_dependencies (rockspec) + local t = {} + for k in pairs(rockspec.external_dependencies or {}) do + k = k:lower() + if fs.is_dir('package/' .. k) then + t[#t+1] = k + else + t[#t+1] = 'lib' .. k + if not fs.is_dir('package/lib' .. k) then + util.printout('unkwown external dependency: ' .. k) + end + end + end + table.sort(t) + return t +end + +local function get_dependencies (rockspec) + local t = {} + for i = 1, #rockspec.dependencies do + local dep = tostring(rockspec.dependencies[i]):match('^(%S+)') + if dep ~= 'lua' then + dep = dep:gsub('_', '-') + if fs.is_dir('package/lua-' .. dep) then + t[#t+1] = 'lua-' .. dep + else + t[#t+1] = dep + if not fs.is_dir('package/' .. dep) then + util.printout('unkwown dependency: ' .. dep) + end + end + end + end + table.sort(t) + return t +end + +function get_digest (file) + local absname = fs.absolute_name(file) + local pipe = io.popen('sha256sum ' .. fs.Q(absname)) + local line = pipe:read('*l') + pipe:close() + local computed = line and line:match('(' .. ('%x'):rep(64) .. ')') + if computed then + return computed + else + return nil, "Failed to compute SHA256 hash for file " .. absname + end +end + +local function generate_config (rockspec, lcname) + local ucname = brname(lcname) + local only_luajit = rockspec.package:match('^lj') + local summary = rockspec.description.summary + if not summary then + summary = '???' + elseif not summary:match('%.%s*$') then + summary = summary:gsub('%s*$', '.') + end + local homepage = rockspec.description.homepage or '???' + local external_dependencies = get_external_dependencies(rockspec) + local dependencies = get_dependencies(rockspec) + local fname = 'package/' .. lcname .. '/Config.in' + local f = assert(io.open(fname, 'w')) + util.printout('write ' .. fname) + f:write('config BR2_PACKAGE_' .. ucname .. '\n') + f:write('\tbool "' .. lcname .. '"\n') + if only_luajit then + f:write('\tdepends on BR2_PACKAGE_LUAJIT\n') + end + for i = 1, #external_dependencies do + f:write('\tselect BR2_PACKAGE_' .. brname(external_dependencies[i]) .. '\n') + end + for i = 1, #dependencies do + f:write('\tselect BR2_PACKAGE_' .. brname(dependencies[i]) .. ' # runtime\n') + end + f:write('\thelp\n') + f:write('\t ' .. table.concat(wrap(summary, 62), '\n\t ') .. '\n') + f:write('\n\t ' .. homepage .. '\n') + if only_luajit then + f:write('\ncomment "' .. lcname .. ' needs LuaJIT"\n') + f:write('\tdepends on !BR2_PACKAGE_LUAJIT\n') + end + f:close() +end + +local function generate_mk (rockspec, lcname, licenses) + local function escape (s) + return s:gsub('-', '%%-'):gsub('%.', '%%.') + end + + local ucname = brname(lcname) + local need_name_upstream = false + local need_version_upstream = false + local name_upstream = rockspec.package + local version = rockspec.version + local version_upstream = version:match('^([^-]+)-') + local revision = version:match('-(%d+)$') + local license = rockspec.description.license + local subdir = rockspec.source.dir + if subdir then + local root = subdir:match('^(.-)-' .. escape(version) .. '$') + if root then + subdir = root .. '-$(' .. ucname .. '_VERSION)' + end + root = subdir:match('^(.--[Vv])' .. escape(version_upstream) .. '$') + if root then + need_version_upstream = true + subdir = root .. '$(' .. ucname .. '_VERSION_UPSTREAM)' + end + root = subdir:match('^(.-)-' .. escape(version_upstream) .. '$') + if root then + if root == lcname then + subdir = nil + elseif root == name_upstream then + subdir = nil + need_name_upstream = true + else + need_version_upstream = true + subdir = root .. '-$(' .. ucname .. '_VERSION_UPSTREAM)' + end + end + end + local external_dependencies = get_external_dependencies(rockspec) + local fname = 'package/' .. lcname .. '/' .. lcname .. '.mk' + local f = assert(io.open(fname, 'w')) + util.printout('write ' .. fname) + f:write('################################################################################\n') + f:write('#\n') + f:write('# ' .. lcname .. '\n') + f:write('#\n') + f:write('################################################################################\n') + f:write('\n') + if need_version_upstream then + f:write(ucname .. '_VERSION_UPSTREAM = ' .. version_upstream .. '\n') + f:write(ucname .. '_VERSION = $(' .. ucname .. '_VERSION_UPSTREAM)-' .. revision .. '\n') + else + f:write(ucname .. '_VERSION = ' .. version .. '\n') + end + if lcname ~= name_upstream:lower() or need_name_upstream then + f:write(ucname .. '_NAME_UPSTREAM = ' .. name_upstream .. '\n') + end + if subdir then + f:write(ucname .. '_SUBDIR = ' .. subdir .. '\n') + end + if license then + f:write(ucname .. '_LICENSE = ' .. brlicense(license) .. '\n') + end + if #licenses == 1 then + f:write(ucname .. '_LICENSE_FILES = $(' .. ucname .. '_SUBDIR)/' .. licenses[1] .. '\n') + elseif #licenses > 1 then + f:write(ucname .. '_LICENSE_FILES =') + for i = 1, #licenses do + local file = licenses[i] + f:write(' \\\n\t$(' .. ucname .. '_SUBDIR)/' .. file) + end + f:write('\n') + end + if #external_dependencies > 0 then + f:write(ucname .. '_DEPENDENCIES = ' .. table.concat(external_dependencies, ' ') .. '\n') + end + f:write('\n$(eval $(luarocks-package))\n') + f:close() +end + +local function generate_hash (rockspec, lcname, rock_file, licenses, digest) + local subdir = rockspec.source.dir + local fname = 'package/' .. lcname .. '/' .. lcname .. '.hash' + local f = assert(io.open(fname, 'w')) + util.printout('write ' .. fname) + f:write('# computed by luarocks/buildroot\n') + f:write('sha256 ' .. digest[rock_file] .. ' ' .. rock_file .. '\n') + for i = 1, #licenses do + local file = licenses[i] + f:write('sha256 ' .. digest[file] .. ' ' .. subdir .. '/' .. file .. '\n') + end + f:close() +end + +local function generate_test (rockspec, lcname) + local ucname = brname(lcname) + local classname = rockspec.package:gsub('%-', ''):gsub('%.', '') + classname = classname:sub(1, 1):upper() .. classname:sub(2) + local modnames = get_main_modules(rockspec) + local fname = 'support/testing/tests/package/test_' .. ucname:lower() .. '.py' + local f = assert(io.open(fname, 'w')) + util.printout('write ' .. fname) + f:write('from tests.package.test_lua import TestLuaBase\n') + f:write('\n') + f:write('\n') + f:write('class TestLua' .. classname .. '(TestLuaBase):\n') + f:write(' config = TestLuaBase.config + \\\n') + f:write(' """\n') + f:write(' BR2_PACKAGE_LUA=y\n') + f:write(' BR2_PACKAGE_' .. ucname .. '=y\n') + f:write(' """\n') + f:write('\n') + f:write(' def test_run(self):\n') + f:write(' self.login()\n') + for i = 1, #modnames do + f:write(' self.module_test("' .. modnames[i] .. '")\n') + end + f:write('\n') + f:write('\n') + f:write('class TestLuajit' .. classname .. '(TestLuaBase):\n') + f:write(' config = TestLuaBase.config + \\\n') + f:write(' """\n') + f:write(' BR2_PACKAGE_LUAJIT=y\n') + f:write(' BR2_PACKAGE_' .. ucname .. '=y\n') + f:write(' """\n') + f:write('\n') + f:write(' def test_run(self):\n') + f:write(' self.login()\n') + for i = 1, #modnames do + f:write(' self.module_test("' .. modnames[i] .. '")\n') + end + f:close() +end + +--- Driver function for the "buildroot" command. +-- @return boolean: true if successful +function buildroot.command(args) + local rockname = assert(args.rockname) + local fsname = args.brname or rockname + + local query = queries.new(rockname:lower(), nil, nil, false, 'src') + local url, err = search.find_suitable_rock(query) + if not url then + return nil, "Could not find a result named " .. tostring(query) .. ": " .. err + end + local rock_file = dir.base_name(url) + + local temp_dir, err = fs.make_temp_dir(rockname) + if not temp_dir then + return nil, "Failed creating temporary dir: " .. err + end + local ok, err = fs.change_dir(temp_dir) + if not ok then return nil, err end + + ok = fs.download(url, rock_file, true) + if not ok then + return nil, "Failed downloading " .. url + end + + local digest = {} + digest[rock_file], err = get_digest(rock_file) + if not digest[rock_file] then return nil, err end + ok, err = fs.unzip(rock_file) + if not ok then return nil, err end + + local rockspec_file = rock_file:gsub('%.src%.rock$', '.rockspec') + local rockspec, err = fetch.load_rockspec(rockspec_file) + if not rockspec then + return nil, "Error loading rockspec: " .. err + end + if rockspec.source.file then + ok, err = fs.unpack_archive(rockspec.source.file) + if not ok then return nil, err end + end + + if rockspec.source.dir ~= '.' then + fs.copy(rockspec.local_abs_filename, rockspec.source.dir, 'read') + end + + local build_type = rockspec.build.type + if build_type ~= 'none' and build_type ~= 'builtin' and build_type ~= 'module' then + util.printout('[' .. rockspec.package .. "] build_type '" .. build_type .. "' not supported") + end + + local licenses = {} + ok, err = fs.change_dir(rockspec.source.dir) + if not ok then return nil, err end + local files = fs.find() + for i = 1, #files do + local v = files[i] + if v == 'COPYING' + or v == 'COPYRIGHT' + or v:match('^LICENSE') then + licenses[#licenses+1] = v + digest[v], err = get_digest(v) + if not digest[v] then return nil, err end + end + end + if #licenses == 0 then + for i = 1, #files do + local v = files[i] + if v:match('^doc/LICENSE') + or v:match('^doc/license') + or v:match('^doc/us/license') then + licenses[#licenses+1] = v + digest[v], err = get_digest(v) + if not digest[v] then return nil, err end + end + end + end + fs.pop_dir() + table.sort(licenses) + + fs.pop_dir() + ok, err = fs.make_dir('package/' .. fsname:lower()) + if not ok then return nil, err end + + generate_config(rockspec, fsname:lower()) + generate_mk(rockspec, fsname:lower(), licenses) + generate_hash(rockspec, fsname:lower(), rock_file, licenses, digest) + if has_c_files(rockspec) then + ok, err = fs.make_dir('support/testing/tests/package') + if not ok then return nil, err end + generate_test(rockspec, fsname:lower()) + end + + return true +end + +return buildroot diff --git a/package/luarocks/luarocks.hash b/package/luarocks/luarocks.hash new file mode 100644 index 00000000..4a3ec0cf --- /dev/null +++ b/package/luarocks/luarocks.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 701d0cc0c7e97cc2cf2c2f4068fce45e52a8854f5dc6c9e49e2014202eec9a4f luarocks-3.5.0.tar.gz +sha256 542ad0ee9b8ba582437ca7b4d0959c9b9432f25d2067f144d017188a7a84dd2f COPYING diff --git a/package/luarocks/luarocks.mk b/package/luarocks/luarocks.mk new file mode 100644 index 00000000..dd11b738 --- /dev/null +++ b/package/luarocks/luarocks.mk @@ -0,0 +1,53 @@ +################################################################################ +# +# luarocks +# +################################################################################ + +LUAROCKS_VERSION = 3.5.0 +LUAROCKS_SITE = http://luarocks.org/releases +LUAROCKS_LICENSE = MIT +LUAROCKS_LICENSE_FILES = COPYING + +HOST_LUAROCKS_DEPENDENCIES = host-luainterpreter + +LUAROCKS_CONFIG_DIR = $(HOST_DIR)/etc +LUAROCKS_CONFIG_FILE_DEFAULT = $(LUAROCKS_CONFIG_DIR)/luarocks/config-$(LUAINTERPRETER_ABIVER).lua +LUAROCKS_CONFIG_FILE = $(LUAROCKS_CONFIG_DIR)/luarocks/config.lua +HOST_LUAROCKS_CONFIG_FILE = $(LUAROCKS_CONFIG_DIR)/luarocks/host-config.lua + +define LUAROCKS_ADDON_EXTRACT + $(INSTALL) -D -m 0644 package/luarocks/buildroot.lua $(@D)/src/luarocks/cmd/external/buildroot.lua +endef +HOST_LUAROCKS_POST_EXTRACT_HOOKS += LUAROCKS_ADDON_EXTRACT + +HOST_LUAROCKS_CONF_OPTS = \ + --prefix=$(HOST_DIR) \ + --sysconfdir=$(LUAROCKS_CONFIG_DIR) \ + --with-lua=$(HOST_DIR) + +define HOST_LUAROCKS_CONFIGURE_CMDS + cd $(@D) && ./configure $(HOST_LUAROCKS_CONF_OPTS) +endef + +define HOST_LUAROCKS_INSTALL_CMDS + rm -f $(LUAROCKS_CONFIG_FILE_DEFAULT) + $(MAKE1) -C $(@D) install + cp $(LUAROCKS_CONFIG_FILE_DEFAULT) $(LUAROCKS_CONFIG_FILE) + echo "-- BR cross-compilation" >> $(LUAROCKS_CONFIG_FILE) + echo "gcc_rpath = false" >> $(LUAROCKS_CONFIG_FILE) + echo "wrap_bin_scripts = false" >> $(LUAROCKS_CONFIG_FILE) + cp $(LUAROCKS_CONFIG_FILE_DEFAULT) $(HOST_LUAROCKS_CONFIG_FILE) + rm -f $(LUAROCKS_CONFIG_FILE_DEFAULT) +endef + +$(eval $(host-generic-package)) + +define LUAROCKS_FINALIZE_TARGET + rm -rf $(TARGET_DIR)/usr/lib/luarocks +endef + +# Apply to global variable directly, as pkg-generic does not +ifneq ($(BR2_PACKAGE_LUAJIT)$(BR2_PACKAGE_LUA),) +TARGET_FINALIZE_HOOKS += LUAROCKS_FINALIZE_TARGET +endif diff --git a/package/luasec/Config.in b/package/luasec/Config.in new file mode 100644 index 00000000..d22fd57a --- /dev/null +++ b/package/luasec/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LUASEC + bool "luasec" + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_LUASOCKET # runtime + help + A binding for OpenSSL library to provide TLS/SSL communication + over LuaSocket. + + https://github.com/brunoos/luasec/wiki diff --git a/package/luasec/luasec.hash b/package/luasec/luasec.hash new file mode 100644 index 00000000..c50da8b9 --- /dev/null +++ b/package/luasec/luasec.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 b87c7d3bc5f07f5ad6fcf90f32f182d9a4a3f5f6b07e19221a86e89179ebd702 luasec-0.9-1.src.rock +sha256 4e1b2e7a46c756febf3ea76440fb5456c17e6c0312fd0135bd4649f4a2cd0d41 luasec/LICENSE diff --git a/package/luasec/luasec.mk b/package/luasec/luasec.mk new file mode 100644 index 00000000..42d29224 --- /dev/null +++ b/package/luasec/luasec.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# luasec +# +################################################################################ + +LUASEC_VERSION = 0.9-1 +LUASEC_SUBDIR = luasec +LUASEC_LICENSE = MIT +LUASEC_LICENSE_FILES = $(LUASEC_SUBDIR)/LICENSE +LUASEC_DEPENDENCIES = openssl + +$(eval $(luarocks-package)) diff --git a/package/luasocket/Config.in b/package/luasocket/Config.in new file mode 100644 index 00000000..45263030 --- /dev/null +++ b/package/luasocket/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LUASOCKET + bool "luasocket" + help + LuaSocket is the most comprehensive networking support library + for the Lua language. + It provides easy access to TCP, UDP, DNS, SMTP, + FTP, HTTP, MIME and much more. + + http://luaforge.net/projects/luasocket/ diff --git a/package/luasocket/luasocket.hash b/package/luasocket/luasocket.hash new file mode 100644 index 00000000..843647b2 --- /dev/null +++ b/package/luasocket/luasocket.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 453fc1d0e9b6a44bbada4290d565f840a5e96ba2d1b47562ba38bd9c7e82195a luasocket-3.0rc1-1.src.rock +sha256 8e8c6314d9e78fe452ee355167f2c40cfbee8207e14dcb5ddd4a2655cb5c6aad luasocket-3.0-rc1/LICENSE diff --git a/package/luasocket/luasocket.mk b/package/luasocket/luasocket.mk new file mode 100644 index 00000000..20927fc1 --- /dev/null +++ b/package/luasocket/luasocket.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# luasocket +# +################################################################################ + +LUASOCKET_VERSION = 3.0rc1-1 +LUASOCKET_SUBDIR = luasocket-3.0-rc1 +LUASOCKET_LICENSE = MIT +LUASOCKET_LICENSE_FILES = $(LUASOCKET_SUBDIR)/LICENSE + +$(eval $(luarocks-package)) diff --git a/package/luasql-sqlite3/Config.in b/package/luasql-sqlite3/Config.in new file mode 100644 index 00000000..3a1fc6ba --- /dev/null +++ b/package/luasql-sqlite3/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LUASQL_SQLITE3 + bool "luasql-sqlite3" + select BR2_PACKAGE_SQLITE + help + LuaSQL is a simple interface from Lua to a DBMS. + + http://keplerproject.github.io/luasql/ diff --git a/package/luasql-sqlite3/luasql-sqlite3.hash b/package/luasql-sqlite3/luasql-sqlite3.hash new file mode 100644 index 00000000..5406d945 --- /dev/null +++ b/package/luasql-sqlite3/luasql-sqlite3.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 502faabc5e06c1d7c1ddb9a0550eb19220020c86b9f1e26a2cc2001e1343b35d luasql-sqlite3-2.4.0-1.src.rock +sha256 c8bb3a3947379addb89412e578d0aae95ca37dc6e48a17e128f40e512d10b025 luasql/doc/us/license.html diff --git a/package/luasql-sqlite3/luasql-sqlite3.mk b/package/luasql-sqlite3/luasql-sqlite3.mk new file mode 100644 index 00000000..69fc956c --- /dev/null +++ b/package/luasql-sqlite3/luasql-sqlite3.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# luasql-sqlite3 +# +################################################################################ + +LUASQL_SQLITE3_VERSION = 2.4.0-1 +LUASQL_SQLITE3_SUBDIR = luasql +LUASQL_SQLITE3_LICENSE = MIT +LUASQL_SQLITE3_LICENSE_FILES = $(LUASQL_SQLITE3_SUBDIR)/doc/us/license.html +LUASQL_SQLITE3_DEPENDENCIES = sqlite + +$(eval $(luarocks-package)) diff --git a/package/luasyslog/0001-remove-AX_LUA_LIBS.patch b/package/luasyslog/0001-remove-AX_LUA_LIBS.patch new file mode 100644 index 00000000..23569ff5 --- /dev/null +++ b/package/luasyslog/0001-remove-AX_LUA_LIBS.patch @@ -0,0 +1,27 @@ +From 84296c5eae651b45ebfa233199b7ddc009a5dad3 Mon Sep 17 00:00:00 2001 +From: Francois Perrad +Date: Fri, 21 Jun 2019 14:58:54 +0200 +Subject: [PATCH] remove AX_LUA_LIBS + +AX_LUA_LIBS fails with LuaJIT + +Signed-off-by: Francois Perrad +--- + configure.ac | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 9ac6c95..d7fc518 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -32,7 +32,6 @@ AC_PATH_PROG([LUAROCKS], [luarocks], [:]) + AX_PROG_LUA([5.1],[6.0]) + + dnl Check for libraries +-AX_LUA_LIBS + + dnl Check for functions + AC_HEADER_STDC +-- +2.20.1 + diff --git a/package/luasyslog/Config.in b/package/luasyslog/Config.in new file mode 100644 index 00000000..ca098cb4 --- /dev/null +++ b/package/luasyslog/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_LUASYSLOG + bool "luasyslog" + select BR2_PACKAGE_LUALOGGING # runtime + help + syslog appender for LuaLogging. + + https://github.com/ntd/luasyslog diff --git a/package/luasyslog/luasyslog.hash b/package/luasyslog/luasyslog.hash new file mode 100644 index 00000000..bcb6a7e0 --- /dev/null +++ b/package/luasyslog/luasyslog.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 7f7dad64117407f2484ff5b53e90804f923a99fcbde5872e54f6aba53f482da0 luasyslog-2.2.0.tar.gz +sha256 833457938f5155e65dabda12a5c9d4b6fd7fb92dd7ead584c1c30cfb0c84adf4 COPYING diff --git a/package/luasyslog/luasyslog.mk b/package/luasyslog/luasyslog.mk new file mode 100644 index 00000000..049e068a --- /dev/null +++ b/package/luasyslog/luasyslog.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# luasyslog +# +################################################################################ + +LUASYSLOG_VERSION = 2.2.0 +LUASYSLOG_SITE = $(call github,ntd,luasyslog,$(LUASYSLOG_VERSION)) +LUASYSLOG_DEPENDENCIES = host-luarocks luainterpreter +LUASYSLOG_LICENSE = MIT +LUASYSLOG_LICENSE_FILES = COPYING +# fetching from github +# 0001-remove-AX_LUA_LIBS.patch touches configure.ac +LUASYSLOG_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/lugaru/0001-ImageIO-fix-invalid-conversion.patch b/package/lugaru/0001-ImageIO-fix-invalid-conversion.patch new file mode 100644 index 00000000..6096477c --- /dev/null +++ b/package/lugaru/0001-ImageIO-fix-invalid-conversion.patch @@ -0,0 +1,35 @@ +From 73e56ba8e91b6bae59220e6f25c1b7c15817edb5 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sun, 12 Feb 2017 21:17:44 +0100 +Subject: [PATCH] ImageIO: fix invalid conversion + +Fixes: +Source/Utils/ImageIO.cpp:125:27: error: invalid conversion from 'int' to 'boolean' [-fpermissive] + cinfo.quantize_colors = 0; + ^ + +quantize_colors type is bool, so it must be initialized to TRUE or FALSE. + +Patch status: upsteam + +Signed-off-by: Romain Naour +--- + Source/Utils/ImageIO.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Source/Utils/ImageIO.cpp b/Source/Utils/ImageIO.cpp +index 706c201..c19a63e 100644 +--- a/Source/Utils/ImageIO.cpp ++++ b/Source/Utils/ImageIO.cpp +@@ -122,7 +122,7 @@ static bool load_jpg(const char* file_name, ImageRec& tex) + (void)jpeg_read_header(&cinfo, TRUE); + + cinfo.out_color_space = JCS_RGB; +- cinfo.quantize_colors = 0; ++ cinfo.quantize_colors = FALSE; + (void)jpeg_calc_output_dimensions(&cinfo); + (void)jpeg_start_decompress(&cinfo); + +-- +2.9.3 + diff --git a/package/lugaru/0002-Fix-mismatched-usage-length-build-fail-on-g.patch b/package/lugaru/0002-Fix-mismatched-usage-length-build-fail-on-g.patch new file mode 100644 index 00000000..9c362a98 --- /dev/null +++ b/package/lugaru/0002-Fix-mismatched-usage-length-build-fail-on-g.patch @@ -0,0 +1,58 @@ +From 5a0c9f6358169b447840acdb721250ce932cb180 Mon Sep 17 00:00:00 2001 +From: Martin Erik Werner +Date: Wed, 8 Mar 2017 22:51:16 +0100 +Subject: [PATCH] Fix mismatched usage length, build fail on g++ +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The length of const option::Descriptor usage[] is intended to be +inferred based on the initialisation in Source/main.cpp, however, the +extern declaration in Source/Game.hpp hard-codes it to 13. + +Remove the hard-coded 13 in the extern declaration, in favour of the +inferred length. + +This also fixes the follwoing build failure with g++ (Debian 4.9.2-10) +4.9.2: +(...)/Source/main.cpp:602:5: error: uninitialized const member ‘option::Descriptor::index’ + }; + ^ +(...)/Source/main.cpp:602:5: warning: missing initializer for member ‘option::Descriptor::index’ [-Wmissing-field-initializers] +(...)/Source/main.cpp:602:5: error: uninitialized const member ‘option::Descriptor::type’ +(...)/Source/main.cpp:602:5: warning: missing initializer for member ‘option::Descriptor::type’ [-Wmissing-field-initializers] +(...)/Source/main.cpp:602:5: error: uninitialized const member ‘option::Descriptor::shortopt’ +(...)/Source/main.cpp:602:5: warning: missing initializer for member ‘option::Descriptor::shortopt’ [-Wmissing-field-initializers] +(...)/Source/main.cpp:602:5: error: uninitialized const member ‘option::Descriptor::longopt’ +(...)/Source/main.cpp:602:5: warning: missing initializer for member ‘option::Descriptor::longopt’ [-Wmissing-field-initializers] +(...)/Source/main.cpp:602:5: error: uninitialized const member ‘option::Descriptor::check_arg’ +(...)/Source/main.cpp:602:5: warning: missing initializer for member ‘option::Descriptor::check_arg’ [-Wmissing-field-initializers] +(...)/Source/main.cpp:602:5: warning: missing initializer for member ‘option::Descriptor::help’ [-Wmissing-field-initializers] +CMakeFiles/lugaru.dir/build.make:54: recipe for target 'CMakeFiles/lugaru.dir/Source/main.cpp.o' failed + +Signed-off-by: Martin Erik Werner + +[Romain: backport to v1.2] +Signed-off-by: Romain Naour + +(cherry picked from commit dd685fe9080c2853422d8272792691358ea07dfc) +--- + Source/Game.hpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Source/Game.hpp b/Source/Game.hpp +index 51232cc..9bb6adb 100644 +--- a/Source/Game.hpp ++++ b/Source/Game.hpp +@@ -234,7 +234,7 @@ enum optionIndex + /* Number of options + 1 */ + const int commandLineOptionsNumber = 10; + +-extern const option::Descriptor usage[13]; ++extern const option::Descriptor usage[]; + + extern option::Option commandLineOptions[commandLineOptionsNumber]; + extern option::Option* commandLineOptionsBuffer; +-- +2.9.4 + diff --git a/package/lugaru/Config.in b/package/lugaru/Config.in new file mode 100644 index 00000000..4454ebcd --- /dev/null +++ b/package/lugaru/Config.in @@ -0,0 +1,38 @@ +config BR2_PACKAGE_LUGARU + bool "lugaru" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_HAS_LIBGL # libglu + depends on BR2_PACKAGE_OPENAL_ARCH_SUPPORTS + depends on BR2_PACKAGE_XORG7 # SDL2 OpenGL (GLX) + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # openal + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # openal + depends on BR2_USE_MMU # SDL2 OpenGL (GLX) + depends on !BR2_STATIC_LIBS # SDL2 + select BR2_PACKAGE_JPEG + select BR2_PACKAGE_LIBGLU # GL/glu.h + select BR2_PACKAGE_LIBPNG + select BR2_PACKAGE_LIBVORBIS + select BR2_PACKAGE_OPENAL + select BR2_PACKAGE_SDL2 + select BR2_PACKAGE_SDL2_OPENGL + select BR2_PACKAGE_ZLIB + help + Lugaru (pronounced Loo-GAH-roo) is a cross-platform + third-person action game. The main character, Turner, is an + anthropomorphic rebel bunny rabbit with impressive combat + skills. In his quest to find those responsible for + slaughtering his village, he uncovers a far-reaching + conspiracy involving the corrupt leaders of the rabbit + republic and the starving wolves from a nearby den. Turner + takes it upon himself to fight against their plot and save + his fellow rabbits from slavery. + + https://osslugaru.gitlab.io/ + +comment "lugaru needs X11 and a toolchain w/ C++, OpenGL backend, gcc >= 4.9, NPTL, dynamic library" + depends on BR2_PACKAGE_OPENAL_ARCH_SUPPORTS + depends on BR2_PACKAGE_XORG7 + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_PACKAGE_HAS_LIBGL || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || !BR2_TOOLCHAIN_HAS_THREADS_NPTL || \ + BR2_STATIC_LIBS diff --git a/package/lugaru/lugaru.hash b/package/lugaru/lugaru.hash new file mode 100644 index 00000000..a08edb46 --- /dev/null +++ b/package/lugaru/lugaru.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 f3ea477caf78911c69939fbdc163f9f6517c7ef2267e716a0e050be1a166ef97 lugaru-1.2.tar.xz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING.txt +sha256 df020520630390de59394235a90a17c5d52d3b80ef76e2edf6d0690cd8b7fd7c CONTENT-LICENSE.txt diff --git a/package/lugaru/lugaru.mk b/package/lugaru/lugaru.mk new file mode 100644 index 00000000..53797f40 --- /dev/null +++ b/package/lugaru/lugaru.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# lugaru +# +################################################################################ + +LUGARU_VERSION = 1.2 +LUGARU_SITE = https://bitbucket.org/osslugaru/lugaru/downloads +LUGARU_SOURCE = lugaru-$(LUGARU_VERSION).tar.xz + +LUGARU_LICENSE = GPL-2.0+, CC-BY-SA-3.0 (Wolfire and Slib assets), \ + CC-BY-SA-4.0 (OSS Lugaru, Jendraz and Philtron R. assets) +LUGARU_LICENSE_FILES = COPYING.txt CONTENT-LICENSE.txt + +LUGARU_DEPENDENCIES = host-pkgconf jpeg libgl libglu libpng libvorbis \ + openal sdl2 zlib + +# Avoid incompatible posix_memalign declaration on x86 and x86_64 with +# musl. +# https://gcc.gnu.org/ml/gcc-patches/2015-05/msg01425.html +ifeq ($(BR2_TOOLCHAIN_USES_MUSL):$(BR2_i386)$(BR2_x86_64),y:y) +define LUGARU_REMOVE_PEDANTIC + $(SED) 's% -pedantic%%' $(@D)/CMakeLists.txt +endef +LUGARU_POST_PATCH_HOOKS += LUGARU_REMOVE_PEDANTIC +endif + +LUGARU_CONF_OPTS = -DSYSTEM_INSTALL=ON + +$(eval $(cmake-package)) diff --git a/package/luksmeta/Config.in b/package/luksmeta/Config.in new file mode 100644 index 00000000..ddc9b6f3 --- /dev/null +++ b/package/luksmeta/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_LUKSMETA + bool "luksmeta" + depends on BR2_TOOLCHAIN_HAS_THREADS # cryptsetup -> lvm2 + depends on BR2_USE_MMU # cryptsetup -> lvm2 + depends on !BR2_STATIC_LIBS # cryptsetup -> lvm2 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # cryptsetup -> json-c + select BR2_PACKAGE_CRYPTSETUP + help + LUKSMeta is a simple library and utility for storing + metadata in the LUKSv1 header. + + https://github.com/latchset/luksmeta + +comment "luksmeta needs a toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/luksmeta/luksmeta.hash b/package/luksmeta/luksmeta.hash new file mode 100644 index 00000000..7e252294 --- /dev/null +++ b/package/luksmeta/luksmeta.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 2ca0c35b551b331ba1444fc9d36e8c48ff8cae53dd4e6155b028e8904edc202a luksmeta-9.tar.bz2 +sha256 4b72eb6b5a336cd3ec837cc2d6347c23bf7574168db6b4802267700b93021abf COPYING diff --git a/package/luksmeta/luksmeta.mk b/package/luksmeta/luksmeta.mk new file mode 100644 index 00000000..129713ae --- /dev/null +++ b/package/luksmeta/luksmeta.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# luksmeta +# +################################################################################ + +LUKSMETA_VERSION = 9 +LUKSMETA_SOURCE = luksmeta-$(LUKSMETA_VERSION).tar.bz2 +LUKSMETA_SITE = https://github.com/latchset/luksmeta/releases/download/v$(LUKSMETA_VERSION) +LUKSMETA_LICENSE = LGPL-2.1+ +LUKSMETA_LICENSE_FILES = COPYING +LUKSMETA_DEPENDENCIES = host-pkgconf cryptsetup +LUKSMETA_CONF_ENV = ac_cv_prog_A2X="" +LUKSMETA_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/lutok/Config.in b/package/lutok/Config.in new file mode 100644 index 00000000..abeaa401 --- /dev/null +++ b/package/lutok/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_LUTOK + bool "lutok" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_PACKAGE_LUAJIT + help + Lutok is a lightweight C++ API library for Lua. + + https://github.com/jmmv/lutok + +comment "lutok needs a toolchain w/ C++ and full Lua" + depends on !BR2_INSTALL_LIBSTDCPP || BR2_PACKAGE_LUAJIT diff --git a/package/lutok/lutok.hash b/package/lutok/lutok.hash new file mode 100644 index 00000000..5ae9b1f4 --- /dev/null +++ b/package/lutok/lutok.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 2cec51efa0c8d65ace8b21eaa08384b77abc5087b46e785f78de1c21fb754cd5 lutok-0.4.tar.gz +sha256 9343913f8ef8a91ceaf148fdcdb70bb8a45b9df9dac2ef71308053dcb312ade9 COPYING diff --git a/package/lutok/lutok.mk b/package/lutok/lutok.mk new file mode 100644 index 00000000..41abddb0 --- /dev/null +++ b/package/lutok/lutok.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# lutok +# +################################################################################ + +LUTOK_VERSION = 0.4 +LUTOK_SITE = https://github.com/jmmv/lutok/releases/download/lutok-$(LUTOK_VERSION) +LUTOK_INSTALL_STAGING = YES +LUTOK_DEPENDENCIES = host-pkgconf lua +# --without-atf disables the atf-based lutok tests +LUTOK_CONF_OPTS = --without-doxygen --without-atf +LUTOK_LICENSE = BSD-3-Clause +LUTOK_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/luv/Config.in b/package/luv/Config.in new file mode 100644 index 00000000..3be204ca --- /dev/null +++ b/package/luv/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_LUV + bool "luv" + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # libuv + depends on BR2_USE_MMU # libuv + depends on !BR2_STATIC_LIBS # libuv + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # libuv + depends on !BR2_PACKAGE_LUA_5_4 + select BR2_PACKAGE_LIBUV + help + libuv bindings for LuaJIT and Lua. + + https://github.com/luvit/luv + +comment "luv needs a toolchain w/ NPTL, dynamic library, Lua <= 5.3" + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIBS || BR2_PACKAGE_LUA_5_4 + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 diff --git a/package/luv/luv.hash b/package/luv/luv.hash new file mode 100644 index 00000000..7e902bd0 --- /dev/null +++ b/package/luv/luv.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 f2e7eb372574f25c6978c1dc74280d22efdcd7df2dda4a286c7fe7dceda26445 luv-1.36.0-0.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE.txt diff --git a/package/luv/luv.mk b/package/luv/luv.mk new file mode 100644 index 00000000..a63baf32 --- /dev/null +++ b/package/luv/luv.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# luv +# +################################################################################ + +LUV_VERSION = 1.36.0-0 +LUV_SITE = https://github.com/luvit/luv/releases/download/$(LUV_VERSION) +LUV_LICENSE = Apache-2.0 +LUV_LICENSE_FILES = LICENSE.txt +LUV_DEPENDENCIES = libuv +LUV_INSTALL_STAGING = YES + +LUV_CONF_OPTS += \ + -DBUILD_MODULE=OFF \ + -DWITH_SHARED_LIBUV=ON \ + -DLUA_BUILD_TYPE=System + +ifeq ($(BR2_PACKAGE_LUAJIT),y) +LUV_DEPENDENCIES += luajit +LUV_CONF_OPTS += \ + -DWITH_LUA_ENGINE=LuaJIT +else +LUV_DEPENDENCIES += lua +LUV_CONF_OPTS += \ + -DWITH_LUA_ENGINE=Lua +endif + +$(eval $(cmake-package)) diff --git a/package/luvi/Config.in b/package/luvi/Config.in new file mode 100644 index 00000000..c9fd4173 --- /dev/null +++ b/package/luvi/Config.in @@ -0,0 +1,33 @@ +config BR2_PACKAGE_LUVI + bool "luvi" + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # libuv + depends on BR2_USE_MMU # libuv + depends on !BR2_STATIC_LIBS # libuv + depends on BR2_PACKAGE_LUAJIT + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # libuv + select BR2_PACKAGE_LIBUV + select BR2_PACKAGE_LUV + help + A project in-between luv and luvit. The goal of this is to + make building luvit and derivatives much easier. + + luvi extends LuaJIT with asynchronous I/O and several optional + modules to run Lua applications and build self-contained + binaries on systems that don't have a compiler. + + The luvi core can be extended with several Lua modules by + adding its bundled Lua binding libraries. + To get the Lua module... + * 'rex' select PCRE (BR2_PACKAGE_PCRE) + * 'ssl' select OpenSSL (BR2_PACKAGE_OPENSSL) + * 'zlib' select zlib (BR2_PACKAGE_ZLIB) + + https://github.com/luvit/luvi + +comment "luvi needs a toolchain w/ NPTL, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIBS + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + +comment "luvi needs LuaJIT" + depends on !BR2_PACKAGE_LUAJIT diff --git a/package/luvi/luvi.hash b/package/luvi/luvi.hash new file mode 100644 index 00000000..f08883c0 --- /dev/null +++ b/package/luvi/luvi.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 ec4eff7aaf2f36879a5fc8eb86706818a75faf07a18451a6fb44e05bbe00817f luvi-src-v2.11.0.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE.txt diff --git a/package/luvi/luvi.mk b/package/luvi/luvi.mk new file mode 100644 index 00000000..d6384cb4 --- /dev/null +++ b/package/luvi/luvi.mk @@ -0,0 +1,64 @@ +################################################################################ +# +# luvi +# +################################################################################ + +LUVI_VERSION = 2.11.0 +LUVI_SOURCE = luvi-src-v$(LUVI_VERSION).tar.gz +LUVI_SITE = https://github.com/luvit/luvi/releases/download/v$(LUVI_VERSION) +LUVI_LICENSE = Apache-2.0 +LUVI_LICENSE_FILES = LICENSE.txt +LUVI_DEPENDENCIES = libuv luajit luv host-luajit + +# Dispatch all architectures of LuaJIT +ifeq ($(BR2_i386),y) +LUVI_TARGET_ARCH = x86 +else ifeq ($(BR2_x86_64),y) +LUVI_TARGET_ARCH = x64 +else ifeq ($(BR2_powerpc),y) +LUVI_TARGET_ARCH = ppc +else ifeq ($(BR2_arm)$(BR2_armeb),y) +LUVI_TARGET_ARCH = arm +else ifeq ($(BR2_aarch64),y) +LUVI_TARGET_ARCH = arm64 +else ifeq ($(BR2_mips),y) +LUVI_TARGET_ARCH = mips +else ifeq ($(BR2_mipsel),y) +LUVI_TARGET_ARCH = mipsel +else +LUVI_TARGET_ARCH = $(BR2_ARCH) +endif + +# Bundled lua bindings have to be linked statically into the luvi executable +LUVI_CONF_OPTS = \ + -DBUILD_SHARED_LIBS=OFF \ + -DWithSharedLibluv=ON \ + -DTARGET_ARCH=$(LUVI_TARGET_ARCH) \ + -DLUA_PATH=$(HOST_DIR)/share/luajit-$(LUAJIT_VERSION)/?.lua + +# Add "rex" module (PCRE via bundled lrexlib) +ifeq ($(BR2_PACKAGE_PCRE),y) +LUVI_DEPENDENCIES += pcre +LUVI_CONF_OPTS += -DWithPCRE=ON -DWithSharedPCRE=ON +else +LUVI_CONF_OPTS += -DWithPCRE=OFF -DWithSharedPCRE=OFF +endif + +# Add "ssl" module (via bundled lua-openssl) +ifeq ($(BR2_PACKAGE_OPENSSL),y) +LUVI_DEPENDENCIES += openssl +LUVI_CONF_OPTS += -DWithOpenSSL=ON -DWithOpenSSLASM=ON -DWithSharedOpenSSL=ON +else +LUVI_CONF_OPTS += -DWithOpenSSL=OFF -DWithOpenSSLASM=OFF -DWithSharedOpenSSL=OFF +endif + +# Add "zlib" module (via bundled lua-zlib) +ifeq ($(BR2_PACKAGE_ZLIB),y) +LUVI_DEPENDENCIES += zlib +LUVI_CONF_OPTS += -DWithZLIB=ON -DWithSharedZLIB=ON +else +LUVI_CONF_OPTS += -DWithZLIB=OFF -DWithSharedZLIB=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/lvgl_kit/Config.in b/package/lvgl_kit/Config.in new file mode 100644 index 00000000..3315e782 --- /dev/null +++ b/package/lvgl_kit/Config.in @@ -0,0 +1,42 @@ +config BR2_PACKAGE_LVGL_KIT + bool "lvgl demo sofeware" + select BR2_PACKAGE_LIBDRM + select BR2_PACKAGE_LIBXKBCOMMON + help + lvgl v8.2 demo sofeware transplant by loongson(GD). + just use libxkbcommon and libdrm. + work in linux + rootfs(which not X). + it just a demo sofeware not any func in this sofeware. + you can input lvgl_demo in shell to work it. + +config BR2_PACKAGE_TOUCH_SCREEN_MAP_VALUE + bool "touch screen xy map logic enable" + default n + depends on BR2_PACKAGE_LVGL_KIT + help + if board use screen report the xy value bigger than screen pixel. + may be you need check this property. + and write down the max report value in BR2_PACKAGE_TOUCH_SCREEN_MAP_VALUE_X(Y). + and it will create file which path is /etc/lvgl_config. + and file have two property + abs_x_calu_max=xxx + abs_y_calu_max=xxx + xxx from BR2_PACKAGE_TOUCH_SCREEN_MAP_VALUE_X(Y) + e.g. + abs_x_calu_max=16384 + abs_y_calu_max=16384 + if touch screen report value is one to one screen pixel you need check this property. + +config BR2_PACKAGE_TOUCH_SCREEN_MAP_VALUE_X + string "touch screen x map max value" + default "16384" + depends on BR2_PACKAGE_TOUCH_SCREEN_MAP_VALUE + help + this property is touch screen report x max value + +config BR2_PACKAGE_TOUCH_SCREEN_MAP_VALUE_Y + string "touch screen y map max value" + default "16384" + depends on BR2_PACKAGE_TOUCH_SCREEN_MAP_VALUE + help + this property is touch screen report y max value diff --git a/package/lvgl_kit/lvgl_kit.mk b/package/lvgl_kit/lvgl_kit.mk new file mode 100644 index 00000000..da7ee17b --- /dev/null +++ b/package/lvgl_kit/lvgl_kit.mk @@ -0,0 +1,54 @@ +################################################################################ +# +# lvgl_kit +# +################################################################################ + +LVGL_KIT_VERSION = origin/master +LVGL_KIT_SITE = http://10.120.1.5:3000/tao89959/lvgl-8.2 +LVGL_KIT_SITE_METHOD = git +LVGL_KIT_GIT_SUBMODULES = YES +LVGL_KIT_CFLAGS = $(TARGET_CFLAGS) + +LVGL_KIT_DEPENDENCIES = libdrm libxkbcommon + +#$(TARGET_MAKE_ENV) $(MAKE) CC=$(TARGET_CC) AR=$(TARGET_AR) -C $(@D) + +ABS_X_CALU_MAP = $(BR2_PACKAGE_TOUCH_SCREEN_MAP_VALUE_X) +ABS_Y_CALU_MAP = $(BR2_PACKAGE_TOUCH_SCREEN_MAP_VALUE_Y) + +ifeq ($(BR2_PACKAGE_TOUCH_SCREEN_MAP_VALUE),y) +define BUILD_ABOUT_TOUCH_MAP_CMDS + echo "create lvgl_config" && cd $(@D) && echo abs_x_calu_max=$(ABS_X_CALU_MAP) >> lvgl_config && echo abs_y_calu_max=$(ABS_Y_CALU_MAP) >> lvgl_config +endef +else +define BUILD_ABOUT_TOUCH_MAP_CMDS + echo "not thing to do about touch abs map" +endef +endif + +ifeq ($(BR2_PACKAGE_TOUCH_SCREEN_MAP_VALUE),y) +define INSTALL_ABOUT_TOUCH_MAP_CMDS + cd $(@D) && cp lvgl_config $(TARGET_DIR)/etc/ +endef +else +define INSTALL_ABOUT_TOUCH_MAP_CMDS + echo "not thing to do about touch abs map" +endef +endif + +define LVGL_KIT_BUILD_CMDS + cd $(@D)/LVGL && export $(TARGET_MAKE_ENV); export CC=$(TARGET_CC); ./build.sh custom $(TARGET_CC) + $(BUILD_ABOUT_TOUCH_MAP_CMDS) +endef + +define LVGL_KIT_INSTALL_STAGING_CMDS + echo "nothing to do" +endef + +define LVGL_KIT_INSTALL_TARGET_CMDS + cd $(@D)/LVGL/build/bin/ && cp demo $(TARGET_DIR)/usr/bin/lvgl-demo + $(INSTALL_ABOUT_TOUCH_MAP_CMDS) +endef + +$(eval $(generic-package)) diff --git a/package/lvm2/0001-configure-Introduce-enable-symvers-option.patch b/package/lvm2/0001-configure-Introduce-enable-symvers-option.patch new file mode 100644 index 00000000..7ef15331 --- /dev/null +++ b/package/lvm2/0001-configure-Introduce-enable-symvers-option.patch @@ -0,0 +1,278 @@ +From 94d71c49eb1682a73465eb162b0a059561168bb2 Mon Sep 17 00:00:00 2001 +From: Marcin Niestroj +Date: Fri, 20 Jul 2018 14:26:44 +0200 +Subject: [PATCH] configure: Introduce --enable-symvers option + +Only few libc (e.g. glibc) libraries support full symbol version +resolution in runtime. There are lot of standard libraries that do not +support that, such as dietlibc, musl and uclibc. Hence there is no +reason to generate symbol versions when compiling against them. + +Additionally libdevmapper.so was broken when compiled against +uclibc. Runtime linker loader caused calling dm_task_get_info_base() +function recursively, leading to segmentation fault. + +Introduce --enable-symvers[=STYLE] option, which allows to choose +between gnu and disabled symbol versioning. By default gnu symbol +versioning is used to provide backward compatibility. +__GNUC__ check is replaced now with GNU_SYMVER, which is generated by +configure script. Additionally ld version script is included only in +case of gnu option, which slightly reduces output size. + +Providing --disable-symvers to configure script when building against +uclibc library fixes segmentation fault error described above, due to +lack of several versions of the same symbol in libdevmapper.so +library. + +Signed-off-by: Marcin Niestroj +--- + configure | 32 ++++++++++++++++++++++++++++++-- + configure.ac | 28 +++++++++++++++++++++++++--- + include/configure.h.in | 3 +++ + lib/misc/lib.h | 10 +++++----- + libdm/datastruct/bitset.c | 5 +---- + libdm/ioctl/libdm-iface.c | 2 +- + libdm/libdm-deptree.c | 2 +- + libdm/libdm-stats.c | 2 +- + 8 files changed, 67 insertions(+), 17 deletions(-) + +diff --git a/configure b/configure +index 7d945dfa8..94cd6b1ea 100755 +--- a/configure ++++ b/configure +@@ -975,6 +975,7 @@ enable_fsadm + enable_blkdeactivate + enable_dmeventd + enable_selinux ++enable_symvers + enable_nls + with_localedir + with_confdir +@@ -1725,6 +1726,9 @@ Optional Features: + --disable-blkdeactivate disable blkdeactivate + --enable-dmeventd enable the device-mapper event daemon + --disable-selinux disable selinux support ++ --enable-symvers[=STYLE] ++ enables symbol versioning of the shared library ++ [default=gnu] + --enable-nls enable Native Language Support + + Optional Packages: +@@ -3156,7 +3160,6 @@ if test -z "$CFLAGS"; then : + fi + case "$host_os" in + linux*) +- CLDFLAGS="$CLDFLAGS -Wl,--version-script,.export.sym" + # equivalent to -rdynamic + ELDFLAGS="-Wl,--export-dynamic" + # FIXME Generate list and use --dynamic-list=.dlopen.sym +@@ -3178,7 +3181,6 @@ case "$host_os" in + ;; + darwin*) + CFLAGS="$CFLAGS -no-cpp-precomp -fno-common" +- CLDFLAGS="$CLDFLAGS" + ELDFLAGS= + CLDWHOLEARCHIVE="-all_load" + CLDNOWHOLEARCHIVE= +@@ -14401,6 +14403,32 @@ done + LIBS=$lvm_saved_libs + fi + ++################################################################################ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable symbol versioning" >&5 ++$as_echo_n "checking whether to enable symbol versioning... " >&6; } ++# Check whether --enable-symvers was given. ++if test "${enable_symvers+set}" = set; then : ++ enableval=$enable_symvers; ++ case "$enableval" in ++ gnu|no) ;; ++ *) as_fn_error $? "Unknown argument to enable/disable symvers" "$LINENO" 5 ;; ++ esac ++else ++ enable_symvers=gnu ++fi ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_symvers" >&5 ++$as_echo "$enable_symvers" >&6; } ++ ++if test x$GCC = xyes && test x$enable_symvers = xgnu ; then ++ ++$as_echo "#define GNU_SYMVER 1" >>confdefs.h ++ ++ case "$host_os" in ++ linux*) CLDFLAGS="$CLDFLAGS -Wl,--version-script,.export.sym" ;; ++ esac ++fi ++ + ################################################################################ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable internationalisation" >&5 + $as_echo_n "checking whether to enable internationalisation... " >&6; } +diff --git a/configure.ac b/configure.ac +index e427708cd..2e8712f92 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -30,13 +30,11 @@ AC_CANONICAL_TARGET([]) + AS_IF([test -z "$CFLAGS"], [COPTIMISE_FLAG="-O2"]) + case "$host_os" in + linux*) +- CLDFLAGS="$CLDFLAGS -Wl,--version-script,.export.sym" + # equivalent to -rdynamic + ELDFLAGS="-Wl,--export-dynamic" + # FIXME Generate list and use --dynamic-list=.dlopen.sym + CLDWHOLEARCHIVE="-Wl,-whole-archive" + CLDNOWHOLEARCHIVE="-Wl,-no-whole-archive" +- LDDEPS="$LDDEPS .export.sym" + LIB_SUFFIX=so + DEVMAPPER=yes + BUILD_LVMETAD=no +@@ -52,7 +50,6 @@ case "$host_os" in + ;; + darwin*) + CFLAGS="$CFLAGS -no-cpp-precomp -fno-common" +- CLDFLAGS="$CLDFLAGS" + ELDFLAGS= + CLDWHOLEARCHIVE="-all_load" + CLDNOWHOLEARCHIVE= +@@ -1656,6 +1653,31 @@ package as well (which may be called readline-devel or something similar).]) + LIBS=$lvm_saved_libs + fi + ++################################################################################ ++dnl -- Symbol versioning ++AC_MSG_CHECKING(whether to enable symbol versioning) ++AC_ARG_ENABLE(symvers, ++ AC_HELP_STRING([--enable-symvers[[[=STYLE]]]], ++ [enables symbol versioning of the shared library [default=gnu]]), ++ [ ++ case "$enableval" in ++ gnu|no) ;; ++ *) AC_MSG_ERROR(Unknown argument to enable/disable symvers) ;; ++ esac], ++ enable_symvers=gnu) ++AC_MSG_RESULT($enable_symvers) ++ ++if test x$GCC = xyes && test x$enable_symvers = xgnu ; then ++ AC_DEFINE(GNU_SYMVER, 1, ++ [Define to use GNU versioning in the shared library.]) ++ case "$host_os" in ++ linux*) ++ CLDFLAGS="$CLDFLAGS -Wl,--version-script,.export.sym" ++ LDDEPS="$LDDEPS .export.sym" ++ ;; ++ esac ++fi ++ + ################################################################################ + dnl -- Internationalisation stuff + AC_MSG_CHECKING(whether to enable internationalisation) +diff --git a/include/configure.h.in b/include/configure.h.in +index 15fd150ed..7a07a10ef 100644 +--- a/include/configure.h.in ++++ b/include/configure.h.in +@@ -147,6 +147,9 @@ + /* Path to fsadm binary. */ + #undef FSADM_PATH + ++/* Define to use GNU versioning in the shared library. */ ++#undef GNU_SYMVER ++ + /* Define to 1 if you have the `alarm' function. */ + #undef HAVE_ALARM + +diff --git a/lib/misc/lib.h b/lib/misc/lib.h +index d7fa5c721..7cf98f932 100644 +--- a/lib/misc/lib.h ++++ b/lib/misc/lib.h +@@ -41,16 +41,16 @@ + * macro DM_EXPORT_SYMBOL to export the function and bind it to the + * specified version string. + * +- * Since versioning is only available when compiling with GCC the entire +- * compatibility version should be enclosed in '#if defined(__GNUC__)', +- * for example: ++ * Since versioning is only available when compiling with GCC ++ * and GLIBC the entire compatibility version should be enclosed ++ * in '#if defined(GNU_SYMVER)', for example: + * + * int dm_foo(int bar) + * { + * return bar; + * } + * +- * #if defined(__GNUC__) ++ * #if defined(GNU_SYMVER) + * // Backward compatible dm_foo() version 1.02.104 + * int dm_foo_v1_02_104(void); + * int dm_foo_v1_02_104(void) +@@ -67,7 +67,7 @@ + * versions of library symbols prior to the introduction of symbol + * versioning: it must never be used for new symbols. + */ +-#if defined(__GNUC__) ++#if defined(GNU_SYMVER) + #define DM_EXPORT_SYMBOL(func, ver) \ + __asm__(".symver " #func "_v" #ver ", " #func "@DM_" #ver ) + #define DM_EXPORT_SYMBOL_BASE(func) \ +diff --git a/libdm/datastruct/bitset.c b/libdm/datastruct/bitset.c +index b0826e1eb..2ec3f8f84 100644 +--- a/libdm/datastruct/bitset.c ++++ b/libdm/datastruct/bitset.c +@@ -242,7 +242,7 @@ bad: + return NULL; + } + +-#if defined(__GNUC__) ++#if defined(GNU_SYMVER) + /* + * Maintain backward compatibility with older versions that did not + * accept a 'min_num_bits' argument to dm_bitset_parse_list(). +@@ -253,7 +253,4 @@ dm_bitset_t dm_bitset_parse_list_v1_02_129(const char *str, struct dm_pool *mem) + return dm_bitset_parse_list(str, mem, 0); + } + DM_EXPORT_SYMBOL(dm_bitset_parse_list, 1_02_129); +- +-#else /* if defined(__GNUC__) */ +- + #endif +diff --git a/libdm/ioctl/libdm-iface.c b/libdm/ioctl/libdm-iface.c +index 769b69c1b..28e2eadee 100644 +--- a/libdm/ioctl/libdm-iface.c ++++ b/libdm/ioctl/libdm-iface.c +@@ -2145,7 +2145,7 @@ void dm_lib_exit(void) + _version_checked = 0; + } + +-#if defined(__GNUC__) ++#if defined(GNU_SYMVER) + /* + * Maintain binary backward compatibility. + * Version script mechanism works with 'gcc' compatible compilers only. +diff --git a/libdm/libdm-deptree.c b/libdm/libdm-deptree.c +index ab0545659..00651c0b2 100644 +--- a/libdm/libdm-deptree.c ++++ b/libdm/libdm-deptree.c +@@ -3797,7 +3797,7 @@ void dm_tree_node_set_callback(struct dm_tree_node *dnode, + dnode->callback_data = data; + } + +-#if defined(__GNUC__) ++#if defined(GNU_SYMVER) + /* + * Backward compatible implementations. + * +diff --git a/libdm/libdm-stats.c b/libdm/libdm-stats.c +index 94ad380e0..76efbbe35 100644 +--- a/libdm/libdm-stats.c ++++ b/libdm/libdm-stats.c +@@ -5065,7 +5065,7 @@ int dm_stats_start_filemapd(int fd, uint64_t group_id, const char *path, + * current dm_stats_create_region() version. + */ + +-#if defined(__GNUC__) ++#if defined(GNU_SYMVER) + int dm_stats_create_region_v1_02_106(struct dm_stats *dms, uint64_t *region_id, + uint64_t start, uint64_t len, int64_t step, + int precise, const char *program_id, +-- +2.18.0 + diff --git a/package/lvm2/0002-udev-remove-unsupported-options-event-timeout-rule.patch b/package/lvm2/0002-udev-remove-unsupported-options-event-timeout-rule.patch new file mode 100644 index 00000000..f162ec58 --- /dev/null +++ b/package/lvm2/0002-udev-remove-unsupported-options-event-timeout-rule.patch @@ -0,0 +1,33 @@ +From 125f27ac37bc9b93cc96f64052b9681b3d479ee1 Mon Sep 17 00:00:00 2001 +From: Peter Rajnoha +Date: Tue, 13 Aug 2019 15:18:30 +0200 +Subject: [PATCH] udev: remove unsupported OPTIONS+="event_timeout" rule + +The OPTIONS+="event_timeout" is Unsupported since systemd/udev version 216, +that is ~5 years ago. + +Since systemd/udev version 243, there's a new message printed if unsupported +OPTIONS value is used: + + Invalid value for OPTIONS key, ignoring: 'event_timeout=180' + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1740666 + +Signed-off-by: Pascal de Bruijn +--- +diff --git a/udev/11-dm-lvm.rules.in b/udev/11-dm-lvm.rules.in +index 91cb991..7c58994 100644 +--- a/udev/11-dm-lvm.rules.in ++++ b/udev/11-dm-lvm.rules.in +@@ -37,8 +37,6 @@ ENV{DM_SUBSYSTEM_UDEV_FLAG0}!="1", ENV{DM_NOSCAN}=="1", ENV{DM_UDEV_DISABLE_OTHE + + ENV{DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG}=="1", GOTO="lvm_end" + +-OPTIONS+="event_timeout=180" +- + # Do not create symlinks for inappropriate subdevices. + ENV{DM_LV_NAME}=="pvmove?*|?*_vorigin", GOTO="lvm_disable" + ENV{DM_LV_LAYER}=="?*", GOTO="lvm_disable" +-- +2.9.3 + diff --git a/package/lvm2/Config.in b/package/lvm2/Config.in new file mode 100644 index 00000000..2d4d6a2b --- /dev/null +++ b/package/lvm2/Config.in @@ -0,0 +1,71 @@ +config BR2_PACKAGE_LVM2 + bool "lvm2 & device mapper" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # needs fork() + depends on !BR2_STATIC_LIBS # It fails to build statically + select BR2_PACKAGE_LIBAIO + help + This is LVM2, the rewrite of The Linux Logical Volume Manager. + LVM supports enterprise level volume management of disk and + disk subsystems by grouping arbitrary disks into volume + groups. The total capacity of volume groups can be allocated + to logical volumes, which are accessed as regular block + devices. + + The Linux Kernel Device Mapper is the LVM + (Linux Logical Volume Management) Team's implementation of a + minimalistic kernel-space driver that handles volume + management, while keeping knowledge of the underlying device + layout in user-space. This makes it useful for not only LVM, + but EVMS, software raid, and other drivers that create + "virtual" block devices. + + http://www.sourceware.org/lvm2/ + +if BR2_PACKAGE_LVM2 + +config BR2_PACKAGE_LVM2_STANDARD_INSTALL + bool "standard install instead of only dmsetup" + default y + # http://lists.busybox.net/pipermail/buildroot/2016-August/170592.html + depends on !BR2_TOOLCHAIN_USES_MUSL + help + Install the standard suite of lvm2 programs. When this option + is not set, only dmsetup is installed. + +comment "lvm2 standard install needs a glibc or uClibc toolchain" + depends on BR2_TOOLCHAIN_USES_MUSL + +config BR2_PACKAGE_LVM2_APP_LIBRARY + bool "install application library" + # http://lists.busybox.net/pipermail/buildroot/2016-August/170592.html + depends on !BR2_TOOLCHAIN_USES_MUSL + select BR2_PACKAGE_LVM2_STANDARD_INSTALL + help + Install application library (liblvm2app). + +comment "lvm2 application library needs a glibc or uClibc toolchain" + depends on BR2_TOOLCHAIN_USES_MUSL + +config BR2_PACKAGE_LVM2_LVMETAD + bool "install lvmetad" + depends on !BR2_TOOLCHAIN_USES_MUSL # lvm2-app-library + select BR2_PACKAGE_LVM2_APP_LIBRARY + help + Install lvmetad + + The lvmetad daemon caches LVM metadata so that LVM commands + can read metadata from the cache rather than scanning disks. + This can be an advantage because scanning disks is time + consuming and may interfere with the normal work of the + system. lvmetad can be a disadvantage when disk event + notifications from the system are unreliable. + +comment "lvmetad daemon needs a glibc or uClibc toolchain" + depends on BR2_TOOLCHAIN_USES_MUSL + +endif + +comment "lvm2 needs a toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/lvm2/lvm2.hash b/package/lvm2/lvm2.hash new file mode 100644 index 00000000..9a581527 --- /dev/null +++ b/package/lvm2/lvm2.hash @@ -0,0 +1,5 @@ +# From http://sources.redhat.com/pub/lvm2/sha512.sum +sha512 f421505551aec2a09bc862f2fcc1ee825bc4d94c53a01d13265631e99308d60fbca40112be5bc7824cce3ef223c0775d2f6c345f6a3f227229a0566c903841bf LVM2.2.02.185.tgz +# Locally computed sha256 checksums +sha256 e76fbcd2fb97cf202da330301327754d2db5c58b5b4bebd3a8a749393e7603d1 COPYING +sha256 5df07007198989c622f5d41de8d703e7bef3d0e79d62e24332ee739a452af62a COPYING.LIB diff --git a/package/lvm2/lvm2.mk b/package/lvm2/lvm2.mk new file mode 100644 index 00000000..19e8757e --- /dev/null +++ b/package/lvm2/lvm2.mk @@ -0,0 +1,92 @@ +################################################################################ +# +# lvm2 +# +################################################################################ + +LVM2_VERSION = 2.02.185 +LVM2_SOURCE = LVM2.$(LVM2_VERSION).tgz +LVM2_SITE = http://sources.redhat.com/pub/lvm2 +LVM2_INSTALL_STAGING = YES +LVM2_LICENSE = GPL-2.0, LGPL-2.1 +LVM2_LICENSE_FILES = COPYING COPYING.LIB +LVM2_CPE_ID_PRODUCT = redhat + +# Make sure that binaries and libraries are installed with write +# permissions for the owner. We disable NLS because it's broken, and +# the package anyway doesn't provide any translation files. +LVM2_CONF_OPTS += \ + --enable-write_install \ + --enable-pkgconfig \ + --enable-cmdlib \ + --enable-dmeventd \ + --disable-nls \ + --disable-symvers + +LVM2_DEPENDENCIES += host-pkgconf libaio + +# LVM2 uses autoconf, but not automake, and the build system does not +# take into account the toolchain passed at configure time. +LVM2_MAKE_ENV = $(TARGET_CONFIGURE_OPTS) + +# package/readline is GPL-3.0+, so not license compatible +LVM2_CONF_OPTS += --disable-readline + +LVM2_INSTALL_STAGING_OPTS = DESTDIR=$(STAGING_DIR) +LVM2_INSTALL_TARGET_OPTS = DESTDIR=$(TARGET_DIR) + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +LVM2_CONF_OPTS += --enable-udev_rules +endif + +ifeq ($(BR2_PACKAGE_LIBSELINUX),y) +LVM2_CONF_OPTS += --enable-selinux +LVM2_DEPENDENCIES += libselinux +else +LVM2_CONF_OPTS += --disable-selinux +endif + +ifeq ($(BR2_PACKAGE_LVM2_STANDARD_INSTALL),) +LVM2_MAKE_OPTS = device-mapper +LVM2_INSTALL_STAGING_OPTS += install_device-mapper +LVM2_INSTALL_TARGET_OPTS += install_device-mapper +else +LVM2_INSTALL_STAGING_OPTS += install +LVM2_INSTALL_TARGET_OPTS += install +endif + +ifeq ($(BR2_PACKAGE_LVM2_APP_LIBRARY),y) +LVM2_CONF_OPTS += --enable-applib +else +LVM2_CONF_OPTS += --disable-applib +endif + +ifeq ($(BR2_PACKAGE_LVM2_LVMETAD),y) +LVM2_CONF_OPTS += --enable-lvmetad +else +LVM2_CONF_OPTS += --disable-lvmetad +endif + +ifeq ($(BR2_INIT_SYSTEMD),y) +LVM2_INSTALL_TARGET_OPTS += install_systemd_units install_systemd_generators +endif + +ifeq ($(BR2_TOOLCHAIN_SUPPORTS_PIE),) +LVM2_CONF_ENV += ac_cv_flag_HAVE_PIE=no +endif + +HOST_LVM2_DEPENDENCIES = host-pkgconf host-libaio +HOST_LVM2_CONF_OPTS = \ + --enable-write_install \ + --enable-pkgconfig \ + --disable-cmdlib \ + --disable-dmeventd \ + --disable-applib \ + --disable-fsadm \ + --disable-readline \ + --disable-selinux +HOST_LVM2_MAKE_OPTS = device-mapper +HOST_LVM2_INSTALL_OPTS = install_device-mapper + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/lxc/Config.in b/package/lxc/Config.in new file mode 100644 index 00000000..72b67511 --- /dev/null +++ b/package/lxc/Config.in @@ -0,0 +1,24 @@ +config BR2_PACKAGE_LXC + bool "lxc" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + # build system forcefully builds a shared library + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 # C++11 + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0 # setns() system call + depends on !BR2_TOOLCHAIN_USES_UCLIBC # no fexecve + help + Linux Containers (LXC), provides the ability to group and + isolate of a set of processes in a jail by virtualizing and + accounting the kernel resources. It is similar to + Linux-Vserver or Openvz. + + https://linuxcontainers.org/ + +comment "lxc needs a glibc or musl toolchain w/ threads, headers >= 3.0, dynamic library, gcc >= 4.7" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS \ + || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 \ + || !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0 \ + || BR2_STATIC_LIBS \ + || BR2_TOOLCHAN_USES_UCLIBC diff --git a/package/lxc/lxc.hash b/package/lxc/lxc.hash new file mode 100644 index 00000000..85cdecce --- /dev/null +++ b/package/lxc/lxc.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 9165dabc0bb6ef7f2fda2009aee90b20fbefe77ed8008347e9f06048eba1e463 lxc-4.0.6.tar.gz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 LICENSE.GPL2 +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 LICENSE.LGPL2.1 diff --git a/package/lxc/lxc.mk b/package/lxc/lxc.mk new file mode 100644 index 00000000..24a1f3c5 --- /dev/null +++ b/package/lxc/lxc.mk @@ -0,0 +1,54 @@ +################################################################################ +# +# lxc +# +################################################################################ + +LXC_VERSION = 4.0.6 +LXC_SITE = https://linuxcontainers.org/downloads/lxc +LXC_LICENSE = GPL-2.0 (some tools), LGPL-2.1+ +LXC_LICENSE_FILES = LICENSE.GPL2 LICENSE.LGPL2.1 +LXC_CPE_ID_VENDOR = linuxcontainers +LXC_DEPENDENCIES = host-pkgconf +LXC_INSTALL_STAGING = YES + +LXC_CONF_OPTS = \ + --disable-apparmor \ + --disable-examples \ + --with-distro=buildroot \ + --disable-werror \ + $(if $(BR2_PACKAGE_BASH),,--disable-bash) + +ifeq ($(BR2_PACKAGE_BASH_COMPLETION),y) +LXC_DEPENDENCIES += bash-completion +endif + +ifeq ($(BR2_PACKAGE_LIBCAP),y) +LXC_CONF_OPTS += --enable-capabilities +LXC_DEPENDENCIES += libcap +else +LXC_CONF_OPTS += --disable-capabilities +endif + +ifeq ($(BR2_PACKAGE_LIBSECCOMP),y) +LXC_CONF_OPTS += --enable-seccomp +LXC_DEPENDENCIES += libseccomp +else +LXC_CONF_OPTS += --disable-seccomp +endif + +ifeq ($(BR2_PACKAGE_LIBSELINUX),y) +LXC_CONF_OPTS += --enable-selinux +LXC_DEPENDENCIES += libselinux +else +LXC_CONF_OPTS += --disable-selinux +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +LXC_CONF_OPTS += --enable-openssl +LXC_DEPENDENCIES += openssl +else +LXC_CONF_OPTS += --disable-openssl +endif + +$(eval $(autotools-package)) diff --git a/package/lynx/Config.in b/package/lynx/Config.in new file mode 100644 index 00000000..a338f836 --- /dev/null +++ b/package/lynx/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LYNX + bool "lynx" + depends on BR2_USE_MMU + select BR2_PACKAGE_SLANG if !BR2_PACKAGE_NCURSES + select BR2_PACKAGE_OPENSSL if !BR2_PACKAGE_GNUTLS + help + The Text Web-Browser. + + http://lynx.invisible-island.net/ diff --git a/package/lynx/lynx.hash b/package/lynx/lynx.hash new file mode 100644 index 00000000..76d7614a --- /dev/null +++ b/package/lynx/lynx.hash @@ -0,0 +1,3 @@ +# Locally calculated: +sha256 387f193d7792f9cfada14c60b0e5c0bff18f227d9257a39483e14fa1aaf79595 lynx2.8.9rel.1.tar.bz2 +sha256 8406a30ff3134ec23cf752d1ceda92ddaabbe41b4f2dc07ea3cfa139de12d6d6 COPYING diff --git a/package/lynx/lynx.mk b/package/lynx/lynx.mk new file mode 100644 index 00000000..d115682d --- /dev/null +++ b/package/lynx/lynx.mk @@ -0,0 +1,53 @@ +################################################################################ +# +# lynx +# +################################################################################ + +LYNX_VERSION = 2.8.9rel.1 +LYNX_SOURCE = lynx$(LYNX_VERSION).tar.bz2 +LYNX_SITE = ftp://ftp.invisible-island.net/lynx/tarballs +LYNX_LICENSE = GPL-2.0 +LYNX_LICENSE_FILES = COPYING + +LYNX_DEPENDENCIES = host-pkgconf $(TARGET_NLS_DEPENDENCIES) + +ifeq ($(BR2_REPRODUCIBLE),y) +# configuration info leaks build paths +LYNX_CONF_OPTS += --disable-config-info +# disable build timestamp +LYNX_CFLAGS += -DNO_BUILDSTAMP +endif + +ifeq ($(BR2_PACKAGE_NCURSES),y) +LYNX_DEPENDENCIES += ncurses +LYNX_CONF_OPTS += --with-screen=ncurses$(if $(BR2_PACKAGE_NCURSES_WCHAR),w) +else ifeq ($(BR2_PACKAGE_SLANG),y) +LYNX_DEPENDENCIES += slang +LYNX_CONF_OPTS += --with-screen=slang +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +LYNX_DEPENDENCIES += openssl +LYNX_CONF_OPTS += --with-ssl=$(STAGING_DIR)/usr +LYNX_LIBS += `$(PKG_CONFIG_HOST_BINARY) --libs openssl` +else ifeq ($(BR2_PACKAGE_GNUTLS),y) +LYNX_DEPENDENCIES += gnutls +LYNX_CONF_OPTS += --with-gnutls +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +LYNX_DEPENDENCIES += zlib +LYNX_CONF_OPTS += --with-zlib +else +LYNX_CONF_OPTS += --without-zlib +endif + +ifeq ($(BR2_PACKAGE_LIBIDN),y) +LYNX_DEPENDENCIES += libidn +LYNX_LIBS += `$(PKG_CONFIG_HOST_BINARY) --libs libidn` +endif + +LYNX_CONF_ENV = LIBS="$(LYNX_LIBS)" CFLAGS="$(TARGET_CFLAGS) $(LYNX_CFLAGS)" + +$(eval $(autotools-package)) diff --git a/package/lz4/0001-Fix-potential-memory-corruption-with-negative-memmov.patch b/package/lz4/0001-Fix-potential-memory-corruption-with-negative-memmov.patch new file mode 100644 index 00000000..57e4e38f --- /dev/null +++ b/package/lz4/0001-Fix-potential-memory-corruption-with-negative-memmov.patch @@ -0,0 +1,26 @@ +From 8301a21773ef61656225e264f4f06ae14462bca7 Mon Sep 17 00:00:00 2001 +From: Jasper Lievisse Adriaanse +Date: Fri, 26 Feb 2021 15:21:20 +0100 +Subject: [PATCH] Fix potential memory corruption with negative memmove() size + +Signed-off-by: Peter Korsgaard +--- + lib/lz4.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/lz4.c b/lib/lz4.c +index 5f524d0..c2f504e 100644 +--- a/lib/lz4.c ++++ b/lib/lz4.c +@@ -1749,7 +1749,7 @@ LZ4_decompress_generic( + const size_t dictSize /* note : = 0 if noDict */ + ) + { +- if (src == NULL) { return -1; } ++ if ((src == NULL) || (outputSize < 0)) { return -1; } + + { const BYTE* ip = (const BYTE*) src; + const BYTE* const iend = ip + srcSize; +-- +2.20.1 + diff --git a/package/lz4/Config.in b/package/lz4/Config.in new file mode 100644 index 00000000..06a4e93d --- /dev/null +++ b/package/lz4/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_LZ4 + bool "lz4" + help + LZ4 is a very fast lossless compression algorithm, providing + compression speed at 400 MB/s per core, scalable with + multi-cores CPU. It also features an extremely fast decoder, + with speed in multiple GB/s per core, typically reaching RAM + speed limits on multi-core systems. + + http://www.lz4.org/ + +if BR2_PACKAGE_LZ4 + +config BR2_PACKAGE_LZ4_PROGS + bool "install programs" + help + lz4, lz4c, unlz4 and lz4cat binaries + +endif diff --git a/package/lz4/lz4.hash b/package/lz4/lz4.hash new file mode 100644 index 00000000..0b03089e --- /dev/null +++ b/package/lz4/lz4.hash @@ -0,0 +1,4 @@ +# sha256 locally computed +sha256 030644df4611007ff7dc962d981f390361e6c97a34e5cbc393ddfbe019ffe2c1 lz4-1.9.3.tar.gz +sha256 d15d99c8dc6b0ec22174c0e563a95bc40f9363ca7f9d9d793bb5c5a8e8d0af71 lib/LICENSE +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 programs/COPYING diff --git a/package/lz4/lz4.mk b/package/lz4/lz4.mk new file mode 100644 index 00000000..9b9b6198 --- /dev/null +++ b/package/lz4/lz4.mk @@ -0,0 +1,67 @@ +################################################################################ +# +# lz4 +# +################################################################################ + +LZ4_VERSION = 1.9.3 +LZ4_SITE = $(call github,lz4,lz4,v$(LZ4_VERSION)) +LZ4_INSTALL_STAGING = YES +LZ4_LICENSE = BSD-2-Clause (library), GPL-2.0+ (programs) +LZ4_LICENSE_FILES = lib/LICENSE programs/COPYING +LZ4_CPE_ID_VENDOR = yann_collet + +# CVE-2014-4715 is misclassified (by our CVE tracker) as affecting version +# 1.9.2, while in fact this issue has been fixed since lz4-r130: +# https://github.com/lz4/lz4/commit/140e6e72ddb6fc5f7cd28ce0c8ec3812ef4a9c08 +# See https://github.com/lz4/lz4/issues/818 +LZ4_IGNORE_CVES += CVE-2014-4715 + +# 0001-Fix-potential-memory-corruption-with-negative-memmov.patch +LZ4_IGNORE_CVES += CVE-2021-3520 + +ifeq ($(BR2_STATIC_LIBS),y) +LZ4_MAKE_OPTS += BUILD_SHARED=no +else ifeq ($(BR2_SHARED_LIBS),y) +LZ4_MAKE_OPTS += BUILD_STATIC=no +endif + +define HOST_LZ4_BUILD_CMDS + $(HOST_MAKE_ENV) $(HOST_CONFIGURE_OPTS) $(MAKE) -C $(@D) lib + $(HOST_MAKE_ENV) $(HOST_CONFIGURE_OPTS) $(MAKE) -C $(@D) lz4 +endef + +define HOST_LZ4_INSTALL_CMDS + $(HOST_MAKE_ENV) $(HOST_CONFIGURE_OPTS) $(MAKE) PREFIX=$(HOST_DIR) \ + install -C $(@D) +endef + +LZ4_DIRS = lib + +ifeq ($(BR2_PACKAGE_LZ4_PROGS),y) +LZ4_DIRS += programs +endif + +define LZ4_BUILD_CMDS + $(foreach dir,$(LZ4_DIRS),\ + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) $(LZ4_MAKE_OPTS) \ + -C $(@D)/$(dir) + ) +endef + +define LZ4_INSTALL_STAGING_CMDS + $(foreach dir,$(LZ4_DIRS),\ + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) DESTDIR=$(STAGING_DIR) \ + PREFIX=/usr $(LZ4_MAKE_OPTS) -C $(@D)/$(dir) install + ) +endef + +define LZ4_INSTALL_TARGET_CMDS + $(foreach dir,$(LZ4_DIRS),\ + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) DESTDIR=$(TARGET_DIR) \ + PREFIX=/usr $(LZ4_MAKE_OPTS) -C $(@D)/$(dir) install + ) +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/lzip/Config.in b/package/lzip/Config.in new file mode 100644 index 00000000..d406e771 --- /dev/null +++ b/package/lzip/Config.in @@ -0,0 +1,15 @@ +comment "lzip needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + +config BR2_PACKAGE_LZIP + bool "lzip" + depends on BR2_INSTALL_LIBSTDCPP + help + Lzip is a lossless data compressor with a user interface + similar to the one of gzip or bzip2. + Lzip is about as fast as gzip, compresses most files more than + bzip2, and is better than both from a data recovery + perspective. Lzip is a clean implementation of the LZMA + algorithm. + + http://www.nongnu.org/lzip/lzip.html diff --git a/package/lzip/lzip.hash b/package/lzip/lzip.hash new file mode 100644 index 00000000..35ff7a44 --- /dev/null +++ b/package/lzip/lzip.hash @@ -0,0 +1,4 @@ +# From https://lists.nongnu.org/archive/html/lzip-bug/2019-01/msg00010.html +sha256 e48b5039d3164d670791f9c5dbaa832bf2df080cb1fbb4f33aa7b3300b670d8b lzip-1.21.tar.gz +# Locally calculated +sha256 3d77c1a58fbde5ddba612d1fe09965e20a3804953eca12e8c1892298bb8a5eef COPYING diff --git a/package/lzip/lzip.mk b/package/lzip/lzip.mk new file mode 100644 index 00000000..2a9a079c --- /dev/null +++ b/package/lzip/lzip.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# lzip +# +################################################################################ + +LZIP_VERSION = 1.21 +LZIP_SITE = http://download.savannah.gnu.org/releases/lzip +LZIP_LICENSE = GPL-2.0+ +LZIP_LICENSE_FILES = COPYING + +define LZIP_CONFIGURE_CMDS + (cd $(@D); $(TARGET_MAKE_ENV) ./configure --prefix=/usr \ + $(TARGET_CONFIGURE_OPTS) ) +endef + +define HOST_LZIP_CONFIGURE_CMDS + (cd $(@D); $(HOST_MAKE_ENV) ./configure --prefix=$(HOST_DIR) \ + $(HOST_CONFIGURE_OPTS) CC="$(HOSTCC_NOCCACHE)" CXX="$(HOSTCXX_NOCCACHE)") +endef + +define LZIP_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define HOST_LZIP_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define LZIP_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +define HOST_LZIP_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) install +endef + +# It's not autotools-based +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/lzlib/Config.in b/package/lzlib/Config.in new file mode 100644 index 00000000..59a2e6d5 --- /dev/null +++ b/package/lzlib/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_LZLIB + bool "lzlib" + depends on BR2_PACKAGE_LUA + select BR2_PACKAGE_ZLIB + help + This package provides a library to access zlib library + functions and also to read/write gzip files using an + interface similar to the base io package. + + https://github.com/LuaDist/lzlib diff --git a/package/lzlib/lzlib.hash b/package/lzlib/lzlib.hash new file mode 100644 index 00000000..4bb4c52c --- /dev/null +++ b/package/lzlib/lzlib.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 cbb0cac5825e940b4ea2f31a336d2aaf6db39847d456920afd8e443804420dbb lzlib-0.4.3.tar.gz +sha256 f817d4a37077e94e9adf379f46ba5cc0b68775d7add2bbd5b2ca68ba140ad5bb lzlib.c diff --git a/package/lzlib/lzlib.mk b/package/lzlib/lzlib.mk new file mode 100644 index 00000000..74624d50 --- /dev/null +++ b/package/lzlib/lzlib.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# lzlib +# +################################################################################ + +LZLIB_VERSION = 0.4.3 +LZLIB_SITE = $(call github,LuaDist,lzlib,$(LZLIB_VERSION)) +LZLIB_DEPENDENCIES = lua zlib +LZLIB_LICENSE = MIT +LZLIB_LICENSE_FILES = lzlib.c +LZLIB_CONF_OPTS = -DINSTALL_CMOD="/usr/lib/lua/$(LUAINTERPRETER_ABIVER)" \ + -DINSTALL_LMOD="/usr/share/lua/$(LUAINTERPRETER_ABIVER)" + +$(eval $(cmake-package)) diff --git a/package/lzma/0001-Remove-static-from-LDFLAGS.patch b/package/lzma/0001-Remove-static-from-LDFLAGS.patch new file mode 100644 index 00000000..9a33e44b --- /dev/null +++ b/package/lzma/0001-Remove-static-from-LDFLAGS.patch @@ -0,0 +1,68 @@ +From 1b33f6d13e5c25a2500ee312068c08a3d3811a5f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Vincent=20Stehl=C3=A9?= +Date: Wed, 3 Dec 2014 21:32:02 +0100 +Subject: [PATCH] Remove -static from LDFLAGS +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Buildroot does not enable static libraries by default for host builds. Having +-static hardcoded in the LDFLAGS breaks the build, so remove it. + +Signed-off-by: Vincent Stehlé +--- + src/lzmadec/Makefile.am | 1 - + src/lzmadec/Makefile.in | 1 - + src/lzmainfo/Makefile.am | 1 - + src/lzmainfo/Makefile.in | 1 - + 4 files changed, 4 deletions(-) + +diff --git a/src/lzmadec/Makefile.am b/src/lzmadec/Makefile.am +index 7322b2a..13edec8 100644 +--- a/src/lzmadec/Makefile.am ++++ b/src/lzmadec/Makefile.am +@@ -2,6 +2,5 @@ bin_PROGRAMS = lzmadec + lzmadec_SOURCES = lzmadec.c + lzmadec_LDADD = @top_builddir@/src/liblzmadec/liblzmadec.la + AM_CPPFLAGS = -I@top_srcdir@/src/liblzmadec +-AM_LDFLAGS = -static + + dist_man_MANS = lzmadec.1 +diff --git a/src/lzmadec/Makefile.in b/src/lzmadec/Makefile.in +index 5af9240..4ed1de1 100644 +--- a/src/lzmadec/Makefile.in ++++ b/src/lzmadec/Makefile.in +@@ -185,7 +185,6 @@ top_srcdir = @top_srcdir@ + lzmadec_SOURCES = lzmadec.c + lzmadec_LDADD = @top_builddir@/src/liblzmadec/liblzmadec.la + AM_CPPFLAGS = -I@top_srcdir@/src/liblzmadec +-AM_LDFLAGS = -static + dist_man_MANS = lzmadec.1 + all: all-am + +diff --git a/src/lzmainfo/Makefile.am b/src/lzmainfo/Makefile.am +index b5b01ec..e280bff 100644 +--- a/src/lzmainfo/Makefile.am ++++ b/src/lzmainfo/Makefile.am +@@ -2,6 +2,5 @@ bin_PROGRAMS = lzmainfo + lzmainfo_SOURCES = lzmainfo.c + lzmainfo_LDADD = @top_builddir@/src/liblzmadec/liblzmadec.la + AM_CPPFLAGS = -I@top_srcdir@/src/liblzmadec +-AM_LDFLAGS = -static + + dist_man_MANS = lzmainfo.1 +diff --git a/src/lzmainfo/Makefile.in b/src/lzmainfo/Makefile.in +index 6a2127a..f1f3441 100644 +--- a/src/lzmainfo/Makefile.in ++++ b/src/lzmainfo/Makefile.in +@@ -185,7 +185,6 @@ top_srcdir = @top_srcdir@ + lzmainfo_SOURCES = lzmainfo.c + lzmainfo_LDADD = @top_builddir@/src/liblzmadec/liblzmadec.la + AM_CPPFLAGS = -I@top_srcdir@/src/liblzmadec +-AM_LDFLAGS = -static + dist_man_MANS = lzmainfo.1 + all: all-am + +-- +2.1.3 + diff --git a/package/lzma/lzma.hash b/package/lzma/lzma.hash new file mode 100644 index 00000000..6055d7d9 --- /dev/null +++ b/package/lzma/lzma.hash @@ -0,0 +1,5 @@ +# Locally calculated +sha256 02aa57f995d15b7acb7c2496d88a39fb0124ea00bf027cc61dd24eddb5942dff lzma-4.32.7.tar.xz +sha256 231f7edcc7352d7734a96eef0b8030f77982678c516876fcb81e25b32d68564c COPYING.GPLv2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING.GPLv3 +sha256 6095e9ffa777dd22839f7801aa845b31c9ed07f3d6bf8a26dc5d2dec8ccc0ef3 COPYING.LGPLv2.1 diff --git a/package/lzma/lzma.mk b/package/lzma/lzma.mk new file mode 100644 index 00000000..095382d1 --- /dev/null +++ b/package/lzma/lzma.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# lzma +# +################################################################################ + +LZMA_VERSION = 4.32.7 +LZMA_SOURCE = lzma-$(LZMA_VERSION).tar.xz +LZMA_SITE = http://tukaani.org/lzma +LZMA_LICENSE = LGPL-2.1+ (lzmadec library, lzmainfo, LzmaDecode), GPL-2.0+ (lzma program, lzgrep and lzmore scripts), GPL-3.0+ (tests) +LZMA_LICENSE_FILES = COPYING.GPLv2 COPYING.GPLv3 COPYING.LGPLv2.1 + +$(eval $(host-autotools-package)) + +LZMA = $(HOST_DIR)/bin/lzma diff --git a/package/lzo/Config.in b/package/lzo/Config.in new file mode 100644 index 00000000..1b6f80bd --- /dev/null +++ b/package/lzo/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_LZO + bool "lzo" + help + Portable lossless data compression library written in ANSI C. + + http://www.oberhumer.com/opensource/lzo/ diff --git a/package/lzo/lzo.hash b/package/lzo/lzo.hash new file mode 100644 index 00000000..39a2dd49 --- /dev/null +++ b/package/lzo/lzo.hash @@ -0,0 +1,5 @@ +# From http://www.oberhumer.com/opensource/lzo/ +sha1 4924676a9bae5db58ef129dc1cebce3baa3c4b5d lzo-2.10.tar.gz +# Locally computed +sha256 c0f892943208266f9b6543b3ae308fab6284c5c90e627931446fb49b4221a072 lzo-2.10.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/lzo/lzo.mk b/package/lzo/lzo.mk new file mode 100644 index 00000000..0682d8d0 --- /dev/null +++ b/package/lzo/lzo.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# lzo +# +################################################################################ + +LZO_VERSION = 2.10 +LZO_SITE = http://www.oberhumer.com/opensource/lzo/download +LZO_LICENSE = GPL-2.0+ +LZO_LICENSE_FILES = COPYING +LZO_CPE_ID_VENDOR = lzo_project +LZO_INSTALL_STAGING = YES +LZO_SUPPORTS_IN_SOURCE_BUILD = NO + +ifeq ($(BR2_SHARED_LIBS)$(BR2_SHARED_STATIC_LIBS),y) +LZO_CONF_OPTS += -DENABLE_SHARED=ON +else +LZO_CONF_OPTS += -DENABLE_SHARED=OFF +endif + +ifeq ($(BR2_STATIC_LIBS)$(BR2_SHARED_STATIC_LIBS),y) +LZO_CONF_OPTS += -DENABLE_STATIC=ON +else +LZO_CONF_OPTS += -DENABLE_STATIC=OFF +endif + +HOST_LZO_CONF_OPTS += -DENABLE_SHARED=ON -DENABLE_STATIC=OFF + +$(eval $(cmake-package)) +$(eval $(host-cmake-package)) diff --git a/package/lzop/0001-build-with-gcc6.patch b/package/lzop/0001-build-with-gcc6.patch new file mode 100644 index 00000000..774ee54a --- /dev/null +++ b/package/lzop/0001-build-with-gcc6.patch @@ -0,0 +1,37 @@ +From: Jaap Crezee +Date: Sat, 25 june 2016 13:13:00 +0200 +Subject: [PATCH 1/1] fix compilation host-lzop with gcc-6 + +This patch allows host-lzop to be compiled with host systems containing gcc-6 + +Upstream patch found here: +https://build.opensuse.org/package/view_file/Archiving/lzop/lzop-1.03-gcc6.patch?expand=1 + +Signed-off-by: Jaap Crezee + +--- a/src/miniacc.h.orig 2016-02-10 16:09:23.247315866 +0100 ++++ b/src/miniacc.h 2016-02-10 16:12:14.973297054 +0100 +@@ -4469,12 +4469,12 @@ + #if defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0150) + #elif 1 && (ACC_CC_SUNPROC) && !defined(ACCCHK_CFG_PEDANTIC) + #else +- ACCCHK_ASSERT((1 << (8*SIZEOF_INT-1)) < 0) ++ ACCCHK_ASSERT((int)(1u << (8*SIZEOF_INT-1)) < 0) + #endif + ACCCHK_ASSERT((1u << (8*SIZEOF_INT-1)) > 0) + #if 1 && (ACC_CC_SUNPROC) && !defined(ACCCHK_CFG_PEDANTIC) + #else +- ACCCHK_ASSERT((1l << (8*SIZEOF_LONG-1)) < 0) ++ ACCCHK_ASSERT((long)(1ul << (8*SIZEOF_LONG-1)) < 0) + #endif + ACCCHK_ASSERT((1ul << (8*SIZEOF_LONG-1)) > 0) + #if defined(acc_int16e_t) +@@ -4703,7 +4703,7 @@ + #elif 1 && (ACC_CC_LCC || ACC_CC_LCCWIN32) && !defined(ACCCHK_CFG_PEDANTIC) + #elif 1 && (ACC_CC_SUNPROC) && !defined(ACCCHK_CFG_PEDANTIC) + #elif !(ACC_BROKEN_INTEGRAL_PROMOTION) && (SIZEOF_INT > 1) +- ACCCHK_ASSERT( (((unsigned char)128) << (int)(8*sizeof(int)-8)) < 0) ++ ACCCHK_ASSERT( (int)((unsigned int)((unsigned char)128) << (int)(8*sizeof(int)-8)) < 0) + #endif + #if (ACC_CC_BORLANDC && (__BORLANDC__ >= 0x0530) && (__BORLANDC__ < 0x0560)) + # pragma option pop diff --git a/package/lzop/0002-use-static-inlines-as-the-external-inline-definition.patch b/package/lzop/0002-use-static-inlines-as-the-external-inline-definition.patch new file mode 100644 index 00000000..f6d076a9 --- /dev/null +++ b/package/lzop/0002-use-static-inlines-as-the-external-inline-definition.patch @@ -0,0 +1,102 @@ +From ecccbcf66da53779d88e38e2af7f82eff8dde7f8 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sun, 16 Aug 2015 10:35:47 -0700 +Subject: [PATCH] use static inlines as the external inline definition has + changed with gcc5 + +[Patch from https://raw.githubusercontent.com/openembedded/openembedded-core/master/meta/recipes-support/lzop/lzop/0001-use-static-inlines-as-the-external-inline-definition.patch] +Signed-off-by: Khem Raj +Signed-off-by: Peter Korsgaard +--- +Upstream-Status: Pending + + src/miniacc.h | 24 ++++++++---------------- + 1 file changed, 8 insertions(+), 16 deletions(-) + +diff --git a/src/miniacc.h b/src/miniacc.h +index 09e6f0c..cae98d1 100644 +--- a/src/miniacc.h ++++ b/src/miniacc.h +@@ -2880,8 +2880,7 @@ typedef void (__acc_cdecl_sighandler *acc_sighandler_t)(acc_signo_t); + #if !(ACC_CFG_NO_INLINE_ASM) && (__acc_HAVE_forceinline) + #if (ACC_ARCH_POWERPC && ACC_ABI_BIG_ENDIAN) && (ACC_CC_GNUC) + #if !defined(ACC_UA_GET_LE16) +-extern __acc_forceinline unsigned long __ACC_UA_GET_LE16(__acc_ua_volatile const void* pp); +-extern __acc_forceinline unsigned long __ACC_UA_GET_LE16(__acc_ua_volatile const void* pp) { ++static __acc_forceinline unsigned long __ACC_UA_GET_LE16(__acc_ua_volatile const void* pp) { + __acc_ua_volatile const acc_uint16e_t* p = (__acc_ua_volatile const acc_uint16e_t*) pp; + unsigned long v; + __asm__ __volatile__("lhbrx %0,0,%1" : "=r" (v) : "r" (p), "m" (*p)); +@@ -2890,8 +2889,7 @@ extern __acc_forceinline unsigned long __ACC_UA_GET_LE16(__acc_ua_volatile const + #define ACC_UA_GET_LE16(p) __ACC_UA_GET_LE16(p) + #endif + #if !defined(ACC_UA_SET_LE16) +-extern __acc_forceinline void __ACC_UA_SET_LE16(__acc_ua_volatile void* pp, unsigned long v); +-extern __acc_forceinline void __ACC_UA_SET_LE16(__acc_ua_volatile void* pp, unsigned long v) { ++static __acc_forceinline void __ACC_UA_SET_LE16(__acc_ua_volatile void* pp, unsigned long v) { + __acc_ua_volatile acc_uint16e_t* p = (__acc_ua_volatile acc_uint16e_t*) pp; + __asm__ __volatile__("sthbrx %2,0,%1" : "=m" (*p) : "r" (p), "r" (v)); + } +@@ -2916,8 +2914,7 @@ extern __acc_forceinline void __ACC_UA_SET_LE16(__acc_ua_volatile void* pp, unsi + #if !(ACC_CFG_NO_INLINE_ASM) && (__acc_HAVE_forceinline) + #if (ACC_ARCH_POWERPC && ACC_ABI_BIG_ENDIAN) && (ACC_CC_GNUC) + #if !defined(ACC_UA_GET_LE32) +-extern __acc_forceinline unsigned long __ACC_UA_GET_LE32(__acc_ua_volatile const void* pp); +-extern __acc_forceinline unsigned long __ACC_UA_GET_LE32(__acc_ua_volatile const void* pp) { ++static __acc_forceinline unsigned long __ACC_UA_GET_LE32(__acc_ua_volatile const void* pp) { + __acc_ua_volatile const acc_uint32e_t* p = (__acc_ua_volatile const acc_uint32e_t*) pp; + unsigned long v; + __asm__ __volatile__("lwbrx %0,0,%1" : "=r" (v) : "r" (p), "m" (*p)); +@@ -2926,8 +2923,7 @@ extern __acc_forceinline unsigned long __ACC_UA_GET_LE32(__acc_ua_volatile const + #define ACC_UA_GET_LE32(p) __ACC_UA_GET_LE32(p) + #endif + #if !defined(ACC_UA_SET_LE32) +-extern __acc_forceinline void __ACC_UA_SET_LE32(__acc_ua_volatile void* pp, unsigned long v); +-extern __acc_forceinline void __ACC_UA_SET_LE32(__acc_ua_volatile void* pp, unsigned long v) { ++static __acc_forceinline void __ACC_UA_SET_LE32(__acc_ua_volatile void* pp, unsigned long v) { + __acc_ua_volatile acc_uint32e_t* p = (__acc_ua_volatile acc_uint32e_t*) pp; + __asm__ __volatile__("stwbrx %2,0,%1" : "=m" (*p) : "r" (p), "r" (v)); + } +@@ -3307,8 +3303,7 @@ typedef void (__acc_cdecl_sighandler *acc_sighandler_t)(acc_signo_t); + #if !(ACC_CFG_NO_INLINE_ASM) && (__acc_HAVE_forceinline) + #if (ACC_ARCH_POWERPC && ACC_ABI_BIG_ENDIAN) && (ACC_CC_GNUC) + #if !defined(ACC_UA_GET_LE16) +-extern __acc_forceinline unsigned long __ACC_UA_GET_LE16(__acc_ua_volatile const void* pp); +-extern __acc_forceinline unsigned long __ACC_UA_GET_LE16(__acc_ua_volatile const void* pp) { ++static __acc_forceinline unsigned long __ACC_UA_GET_LE16(__acc_ua_volatile const void* pp) { + __acc_ua_volatile const acc_uint16e_t* p = (__acc_ua_volatile const acc_uint16e_t*) pp; + unsigned long v; + __asm__ __volatile__("lhbrx %0,0,%1" : "=r" (v) : "r" (p), "m" (*p)); +@@ -3317,8 +3312,7 @@ extern __acc_forceinline unsigned long __ACC_UA_GET_LE16(__acc_ua_volatile const + #define ACC_UA_GET_LE16(p) __ACC_UA_GET_LE16(p) + #endif + #if !defined(ACC_UA_SET_LE16) +-extern __acc_forceinline void __ACC_UA_SET_LE16(__acc_ua_volatile void* pp, unsigned long v); +-extern __acc_forceinline void __ACC_UA_SET_LE16(__acc_ua_volatile void* pp, unsigned long v) { ++static __acc_forceinline void __ACC_UA_SET_LE16(__acc_ua_volatile void* pp, unsigned long v) { + __acc_ua_volatile acc_uint16e_t* p = (__acc_ua_volatile acc_uint16e_t*) pp; + __asm__ __volatile__("sthbrx %2,0,%1" : "=m" (*p) : "r" (p), "r" (v)); + } +@@ -3343,8 +3337,7 @@ extern __acc_forceinline void __ACC_UA_SET_LE16(__acc_ua_volatile void* pp, unsi + #if !(ACC_CFG_NO_INLINE_ASM) && (__acc_HAVE_forceinline) + #if (ACC_ARCH_POWERPC && ACC_ABI_BIG_ENDIAN) && (ACC_CC_GNUC) + #if !defined(ACC_UA_GET_LE32) +-extern __acc_forceinline unsigned long __ACC_UA_GET_LE32(__acc_ua_volatile const void* pp); +-extern __acc_forceinline unsigned long __ACC_UA_GET_LE32(__acc_ua_volatile const void* pp) { ++static __acc_forceinline unsigned long __ACC_UA_GET_LE32(__acc_ua_volatile const void* pp) { + __acc_ua_volatile const acc_uint32e_t* p = (__acc_ua_volatile const acc_uint32e_t*) pp; + unsigned long v; + __asm__ __volatile__("lwbrx %0,0,%1" : "=r" (v) : "r" (p), "m" (*p)); +@@ -3353,8 +3346,7 @@ extern __acc_forceinline unsigned long __ACC_UA_GET_LE32(__acc_ua_volatile const + #define ACC_UA_GET_LE32(p) __ACC_UA_GET_LE32(p) + #endif + #if !defined(ACC_UA_SET_LE32) +-extern __acc_forceinline void __ACC_UA_SET_LE32(__acc_ua_volatile void* pp, unsigned long v); +-extern __acc_forceinline void __ACC_UA_SET_LE32(__acc_ua_volatile void* pp, unsigned long v) { ++static __acc_forceinline void __ACC_UA_SET_LE32(__acc_ua_volatile void* pp, unsigned long v) { + __acc_ua_volatile acc_uint32e_t* p = (__acc_ua_volatile acc_uint32e_t*) pp; + __asm__ __volatile__("stwbrx %2,0,%1" : "=m" (*p) : "r" (p), "r" (v)); + } +-- +2.5.0 + diff --git a/package/lzop/Config.in b/package/lzop/Config.in new file mode 100644 index 00000000..236f21d3 --- /dev/null +++ b/package/lzop/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LZOP + bool "lzop" + select BR2_PACKAGE_LZO + help + lzop is a file compressor which is very similar to gzip. + lzop uses the LZO data compression library for compression + services. + + http://www.lzop.org/ diff --git a/package/lzop/lzop.hash b/package/lzop/lzop.hash new file mode 100644 index 00000000..8496ac21 --- /dev/null +++ b/package/lzop/lzop.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 c1425b8c77d49f5a679d5a126c90ea6ad99585a55e335a613cae59e909dbb2c9 lzop-1.03.tar.gz +sha256 70439f6e2b47057a408d2390ed6663b9875f5a08066a06a060a357ef1df89a8c COPYING diff --git a/package/lzop/lzop.mk b/package/lzop/lzop.mk new file mode 100644 index 00000000..55157c4d --- /dev/null +++ b/package/lzop/lzop.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# lzop +# +################################################################################ + +LZOP_VERSION = 1.03 +LZOP_SITE = http://www.lzop.org/download +LZOP_LICENSE = GPL-2.0+ +LZOP_LICENSE_FILES = COPYING +LZOP_DEPENDENCIES = lzo +HOST_LZOP_DEPENDENCIES = host-lzo + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) + +LZOP = $(HOST_DIR)/bin/lzop diff --git a/package/m4/0001-fflush-adjust-to-glibc-2.28-libio.h-removal.patch b/package/m4/0001-fflush-adjust-to-glibc-2.28-libio.h-removal.patch new file mode 100644 index 00000000..5c5c11b9 --- /dev/null +++ b/package/m4/0001-fflush-adjust-to-glibc-2.28-libio.h-removal.patch @@ -0,0 +1,166 @@ +From 4af4a4a71827c0bc5e0ec67af23edef4f15cee8e Mon Sep 17 00:00:00 2001 +From: Paul Eggert +Date: Mon, 5 Mar 2018 10:56:29 -0800 +Subject: [PATCH] fflush: adjust to glibc 2.28 libio.h removal +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Problem reported by Daniel P. Berrangé in: +https://lists.gnu.org/r/bug-gnulib/2018-03/msg00000.html +* lib/fbufmode.c (fbufmode): +* lib/fflush.c (clear_ungetc_buffer_preserving_position) +(disable_seek_optimization, rpl_fflush): +* lib/fpending.c (__fpending): +* lib/fpurge.c (fpurge): +* lib/freadable.c (freadable): +* lib/freadahead.c (freadahead): +* lib/freading.c (freading): +* lib/freadptr.c (freadptr): +* lib/freadseek.c (freadptrinc): +* lib/fseeko.c (fseeko): +* lib/fseterr.c (fseterr): +* lib/fwritable.c (fwritable): +* lib/fwriting.c (fwriting): +Check _IO_EOF_SEEN instead of _IO_ftrylockfile. +* lib/stdio-impl.h (_IO_IN_BACKUP) [_IO_EOF_SEEN]: +Define if not already defined. + +[yann.morin.1998@free.fr: partially backport from upstream gnulib] +Signed-off-by: "Yann E. MORIN" + +--- + lib/fflush.c | 6 +++--- + lib/fpending.c | 2 +- + lib/fpurge.c | 2 +- + lib/freadahead.c | 2 +- + lib/freading.c | 2 +- + lib/fseeko.c | 4 ++-- + lib/stdio-impl.h | 6 ++++++ + 7 files changed, 15 insertions(+), 9 deletions(-) + +diff --git a/lib/fflush.c b/build-aux/gnulib/lib/fflush.c +index 983ade0ff..a6edfa105 100644 +--- a/lib/fflush.c ++++ b/lib/fflush.c +@@ -33,7 +33,7 @@ + #undef fflush + + +-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + + /* Clear the stream's ungetc buffer, preserving the value of ftello (fp). */ + static void +@@ -72,7 +72,7 @@ clear_ungetc_buffer (FILE *fp) + + #endif + +-#if ! (defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */) ++#if ! (defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */) + + # if (defined __sferror || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT + /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ +@@ -148,7 +148,7 @@ rpl_fflush (FILE *stream) + if (stream == NULL || ! freading (stream)) + return fflush (stream); + +-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + + clear_ungetc_buffer_preserving_position (stream); + +diff --git a/lib/fpending.c b/build-aux/gnulib/lib/fpending.c +index c84e3a5b4..789f50e4e 100644 +--- a/lib/fpending.c ++++ b/lib/fpending.c +@@ -32,7 +32,7 @@ __fpending (FILE *fp) + /* Most systems provide FILE as a struct and the necessary bitmask in + , because they need it for implementing getc() and putc() as + fast macros. */ +-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + return fp->_IO_write_ptr - fp->_IO_write_base; + #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ +diff --git a/lib/fpurge.c b/build-aux/gnulib/lib/fpurge.c +index b1d417c7a..3aedcc373 100644 +--- a/lib/fpurge.c ++++ b/lib/fpurge.c +@@ -62,7 +62,7 @@ fpurge (FILE *fp) + /* Most systems provide FILE as a struct and the necessary bitmask in + , because they need it for implementing getc() and putc() as + fast macros. */ +-# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + fp->_IO_read_end = fp->_IO_read_ptr; + fp->_IO_write_ptr = fp->_IO_write_base; + /* Avoid memory leak when there is an active ungetc buffer. */ +diff --git a/lib/freadahead.c b/build-aux/gnulib/lib/freadahead.c +index c2ecb5b28..23ec76ee5 100644 +--- a/lib/freadahead.c ++++ b/lib/freadahead.c +@@ -30,7 +30,7 @@ extern size_t __sreadahead (FILE *); + size_t + freadahead (FILE *fp) + { +-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + if (fp->_IO_write_ptr > fp->_IO_write_base) + return 0; + return (fp->_IO_read_end - fp->_IO_read_ptr) +diff --git a/lib/freading.c b/build-aux/gnulib/lib/freading.c +index 73c28acdd..c24d0c88a 100644 +--- a/lib/freading.c ++++ b/lib/freading.c +@@ -31,7 +31,7 @@ freading (FILE *fp) + /* Most systems provide FILE as a struct and the necessary bitmask in + , because they need it for implementing getc() and putc() as + fast macros. */ +-# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + return ((fp->_flags & _IO_NO_WRITES) != 0 + || ((fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) == 0 + && fp->_IO_read_base != NULL)); +diff --git a/lib/fseeko.c b/build-aux/gnulib/lib/fseeko.c +index 0101ab55f..193f4e8ce 100644 +--- a/lib/fseeko.c ++++ b/lib/fseeko.c +@@ -47,7 +47,7 @@ fseeko (FILE *fp, off_t offset, int whence) + #endif + + /* These tests are based on fpurge.c. */ +-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + if (fp->_IO_read_end == fp->_IO_read_ptr + && fp->_IO_write_ptr == fp->_IO_write_base + && fp->_IO_save_base == NULL) +@@ -123,7 +123,7 @@ fseeko (FILE *fp, off_t offset, int whence) + return -1; + } + +-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + fp->_flags &= ~_IO_EOF_SEEN; + fp->_offset = pos; + #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ +diff --git a/lib/stdio-impl.h b/build-aux/gnulib/lib/stdio-impl.h +index 78d896e9f..05c5752a2 100644 +--- a/lib/stdio-impl.h ++++ b/lib/stdio-impl.h +@@ -18,6 +18,12 @@ + the same implementation of stdio extension API, except that some fields + have different naming conventions, or their access requires some casts. */ + ++/* Glibc 2.28 made _IO_IN_BACKUP private. For now, work around this ++ problem by defining it ourselves. FIXME: Do not rely on glibc ++ internals. */ ++#if !defined _IO_IN_BACKUP && defined _IO_EOF_SEEN ++# define _IO_IN_BACKUP 0x100 ++#endif + + /* BSD stdio derived implementations. */ + +-- +2.14.1 + diff --git a/package/m4/0002-fflush-be-more-paranoid-about-libio.h-change.patch b/package/m4/0002-fflush-be-more-paranoid-about-libio.h-change.patch new file mode 100644 index 00000000..a820ca8c --- /dev/null +++ b/package/m4/0002-fflush-be-more-paranoid-about-libio.h-change.patch @@ -0,0 +1,151 @@ +From 74d9d6a293d7462dea8f83e7fc5ac792e956a0ad Mon Sep 17 00:00:00 2001 +From: Paul Eggert +Date: Thu, 8 Mar 2018 16:42:45 -0800 +Subject: [PATCH 2/2] fflush: be more paranoid about libio.h change + +Suggested by Eli Zaretskii in: +https://lists.gnu.org/r/emacs-devel/2018-03/msg00270.html +* lib/fbufmode.c (fbufmode): +* lib/fflush.c (clear_ungetc_buffer_preserving_position) +(disable_seek_optimization, rpl_fflush): +* lib/fpending.c (__fpending): +* lib/fpurge.c (fpurge): +* lib/freadable.c (freadable): +* lib/freadahead.c (freadahead): +* lib/freading.c (freading): +* lib/freadptr.c (freadptr): +* lib/freadseek.c (freadptrinc): +* lib/fseeko.c (fseeko): +* lib/fseterr.c (fseterr): +* lib/fwritable.c (fwritable): +* lib/fwriting.c (fwriting): +Look at _IO_ftrylockfile as well as at _IO_EOF_SEEN. +--- + lib/fflush.c | 9 ++++++--- + lib/fpending.c | 3 ++- + lib/fpurge.c | 3 ++- + lib/freadahead.c | 3 ++- + lib/freading.c | 3 ++- + lib/fseeko.c | 6 ++++-- + 6 files changed, 18 insertions(+), 9 deletions(-) + +[yann.morin.1998@free.fr: partially backport from upstream gnulib] +Signed-off-by: "Yann E. MORIN" + +diff --git a/lib/fflush.c b/build-aux/gnulib/lib/fflush.c +index a6edfa105..a140b7ad9 100644 +--- a/lib/fflush.c ++++ b/lib/fflush.c +@@ -33,7 +33,8 @@ + #undef fflush + + +-#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 ++/* GNU libc, BeOS, Haiku, Linux libc5 */ + + /* Clear the stream's ungetc buffer, preserving the value of ftello (fp). */ + static void +@@ -72,7 +73,8 @@ clear_ungetc_buffer (FILE *fp) + + #endif + +-#if ! (defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */) ++#if ! (defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1) ++/* GNU libc, BeOS, Haiku, Linux libc5 */ + + # if (defined __sferror || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT + /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ +@@ -148,7 +150,8 @@ rpl_fflush (FILE *stream) + if (stream == NULL || ! freading (stream)) + return fflush (stream); + +-#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 ++ /* GNU libc, BeOS, Haiku, Linux libc5 */ + + clear_ungetc_buffer_preserving_position (stream); + +diff --git a/lib/fpending.c b/build-aux/gnulib/lib/fpending.c +index 789f50e4e..7bc235ded 100644 +--- a/lib/fpending.c ++++ b/lib/fpending.c +@@ -32,7 +32,8 @@ __fpending (FILE *fp) + /* Most systems provide FILE as a struct and the necessary bitmask in + , because they need it for implementing getc() and putc() as + fast macros. */ +-#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 ++ /* GNU libc, BeOS, Haiku, Linux libc5 */ + return fp->_IO_write_ptr - fp->_IO_write_base; + #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ +diff --git a/lib/fpurge.c b/build-aux/gnulib/lib/fpurge.c +index 3aedcc373..554790b56 100644 +--- a/lib/fpurge.c ++++ b/lib/fpurge.c +@@ -62,7 +62,8 @@ fpurge (FILE *fp) + /* Most systems provide FILE as a struct and the necessary bitmask in + , because they need it for implementing getc() and putc() as + fast macros. */ +-# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++# if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 ++ /* GNU libc, BeOS, Haiku, Linux libc5 */ + fp->_IO_read_end = fp->_IO_read_ptr; + fp->_IO_write_ptr = fp->_IO_write_base; + /* Avoid memory leak when there is an active ungetc buffer. */ +diff --git a/lib/freadahead.c b/build-aux/gnulib/lib/freadahead.c +index 23ec76ee5..ed3dd0ebd 100644 +--- a/lib/freadahead.c ++++ b/lib/freadahead.c +@@ -30,7 +30,8 @@ extern size_t __sreadahead (FILE *); + size_t + freadahead (FILE *fp) + { +-#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 ++ /* GNU libc, BeOS, Haiku, Linux libc5 */ + if (fp->_IO_write_ptr > fp->_IO_write_base) + return 0; + return (fp->_IO_read_end - fp->_IO_read_ptr) +diff --git a/lib/freading.c b/build-aux/gnulib/lib/freading.c +index c24d0c88a..790f92ca3 100644 +--- a/lib/freading.c ++++ b/lib/freading.c +@@ -31,7 +31,8 @@ freading (FILE *fp) + /* Most systems provide FILE as a struct and the necessary bitmask in + , because they need it for implementing getc() and putc() as + fast macros. */ +-# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++# if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 ++ /* GNU libc, BeOS, Haiku, Linux libc5 */ + return ((fp->_flags & _IO_NO_WRITES) != 0 + || ((fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) == 0 + && fp->_IO_read_base != NULL)); +diff --git a/lib/fseeko.c b/build-aux/gnulib/lib/fseeko.c +index 193f4e8ce..e5c5172e7 100644 +--- a/lib/fseeko.c ++++ b/lib/fseeko.c +@@ -47,7 +47,8 @@ fseeko (FILE *fp, off_t offset, int whence) + #endif + + /* These tests are based on fpurge.c. */ +-#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 ++ /* GNU libc, BeOS, Haiku, Linux libc5 */ + if (fp->_IO_read_end == fp->_IO_read_ptr + && fp->_IO_write_ptr == fp->_IO_write_base + && fp->_IO_save_base == NULL) +@@ -123,7 +124,8 @@ fseeko (FILE *fp, off_t offset, int whence) + return -1; + } + +-#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 ++ /* GNU libc, BeOS, Haiku, Linux libc5 */ + fp->_flags &= ~_IO_EOF_SEEN; + fp->_offset = pos; + #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ +-- +2.14.1 + diff --git a/package/m4/0003-c-stack-stop-using-SIGSTKSZ.patch b/package/m4/0003-c-stack-stop-using-SIGSTKSZ.patch new file mode 100644 index 00000000..f262fc81 --- /dev/null +++ b/package/m4/0003-c-stack-stop-using-SIGSTKSZ.patch @@ -0,0 +1,106 @@ +c-stack: stop using SIGSTKSZ + +It’s been proposed to stop making SIGSTKSZ an integer constant: +https://sourceware.org/pipermail/libc-alpha/2020-September/118028.html +Also, using SIGSTKSZ in #if did not conform to current POSIX. +Also, avoiding SIGSTKSZ makes the code simpler and easier to grok. +* lib/c-stack.c (SIGSTKSZ): Remove. +(alternate_signal_stack): Now a 64 KiB array, for simplicity. +All uses changed. + +[Retrieved (and backported) from: +https://git.savannah.gnu.org/cgit/gnulib.git/patch/?id=f9e2b20a12a230efa30f1d479563ae07d276a94b] +Signed-off-by: Fabrice Fontaine + +diff -Nura m4-1.4.18.orig/lib/c-stack.c m4-1.4.18/lib/c-stack.c +--- m4-1.4.18.orig/lib/c-stack.c 2021-04-11 19:12:14.086494029 +0200 ++++ m4-1.4.18/lib/c-stack.c 2021-04-11 19:48:46.316862760 +0200 +@@ -50,15 +50,16 @@ + #if ! HAVE_STACK_T && ! defined stack_t + typedef struct sigaltstack stack_t; + #endif +-#ifndef SIGSTKSZ +-# define SIGSTKSZ 16384 +-#elif HAVE_LIBSIGSEGV && SIGSTKSZ < 16384 +-/* libsigsegv 2.6 through 2.8 have a bug where some architectures use +- more than the Linux default of an 8k alternate stack when deciding +- if a fault was caused by stack overflow. */ +-# undef SIGSTKSZ +-# define SIGSTKSZ 16384 +-#endif ++ ++/* Storage for the alternate signal stack. ++ 64 KiB is not too large for Gnulib-using apps, and is large enough ++ for all known platforms. Smaller sizes may run into trouble. ++ For example, libsigsegv 2.6 through 2.8 have a bug where some ++ architectures use more than the Linux default of an 8 KiB alternate ++ stack when deciding if a fault was caused by stack overflow. */ ++static max_align_t alternate_signal_stack[(64 * 1024 ++ + sizeof (max_align_t) - 1) ++ / sizeof (max_align_t)]; + + #include + #include +@@ -128,19 +129,6 @@ + #if (HAVE_SIGALTSTACK && HAVE_DECL_SIGALTSTACK \ + && HAVE_STACK_OVERFLOW_HANDLING) || HAVE_LIBSIGSEGV + +-/* Storage for the alternate signal stack. */ +-static union +-{ +- char buffer[SIGSTKSZ]; +- +- /* These other members are for proper alignment. There's no +- standard way to guarantee stack alignment, but this seems enough +- in practice. */ +- long double ld; +- long l; +- void *p; +-} alternate_signal_stack; +- + static void + null_action (int signo __attribute__ ((unused))) + { +@@ -205,8 +193,8 @@ + + /* Always install the overflow handler. */ + if (stackoverflow_install_handler (overflow_handler, +- alternate_signal_stack.buffer, +- sizeof alternate_signal_stack.buffer)) ++ alternate_signal_stack, ++ sizeof alternate_signal_stack)) + { + errno = ENOTSUP; + return -1; +@@ -279,14 +267,14 @@ + stack_t st; + struct sigaction act; + st.ss_flags = 0; ++ st.ss_sp = alternate_signal_stack; ++ st.ss_size = sizeof alternate_signal_stack; + # if SIGALTSTACK_SS_REVERSED + /* Irix mistakenly treats ss_sp as the upper bound, rather than + lower bound, of the alternate stack. */ +- st.ss_sp = alternate_signal_stack.buffer + SIGSTKSZ - sizeof (void *); +- st.ss_size = sizeof alternate_signal_stack.buffer - sizeof (void *); +-# else +- st.ss_sp = alternate_signal_stack.buffer; +- st.ss_size = sizeof alternate_signal_stack.buffer; ++ st.ss_size -= sizeof (void *); ++ char *ss_sp = st.ss_sp; ++ st.ss_sp = ss_sp + st.ss_size; + # endif + r = sigaltstack (&st, NULL); + if (r != 0) +diff -Nura m4-1.4.18.orig/lib/c-stack.h m4-1.4.18/lib/c-stack.h +--- m4-1.4.18.orig/lib/c-stack.h 2021-04-11 19:12:14.098494042 +0200 ++++ m4-1.4.18/lib/c-stack.h 2021-04-11 19:17:42.138848378 +0200 +@@ -34,7 +34,7 @@ + A null ACTION acts like an action that does nothing. + + ACTION must be async-signal-safe. ACTION together with its callees +- must not require more than SIGSTKSZ bytes of stack space. Also, ++ must not require more than 64 KiB bytes of stack space. Also, + ACTION should not call longjmp, because this implementation does + not guarantee that it is safe to return to the original stack. + diff --git a/package/m4/m4.hash b/package/m4/m4.hash new file mode 100644 index 00000000..e665fc14 --- /dev/null +++ b/package/m4/m4.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 f2c1e86ca0a404ff281631bdc8377638992744b175afb806e25871a24a934e07 m4-1.4.18.tar.xz +# License files, locally calculated +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/m4/m4.mk b/package/m4/m4.mk new file mode 100644 index 00000000..849e7f4a --- /dev/null +++ b/package/m4/m4.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# m4 +# +################################################################################ + +M4_VERSION = 1.4.18 +M4_SOURCE = m4-$(M4_VERSION).tar.xz +M4_SITE = $(BR2_GNU_MIRROR)/m4 +M4_LICENSE = GPL-3.0+ +M4_LICENSE_FILES = COPYING +HOST_M4_CONF_OPTS = --disable-static + +$(eval $(host-autotools-package)) diff --git a/package/macchanger/0001-Fix-missing-include-for-caddr_t.patch b/package/macchanger/0001-Fix-missing-include-for-caddr_t.patch new file mode 100644 index 00000000..cf5ade8c --- /dev/null +++ b/package/macchanger/0001-Fix-missing-include-for-caddr_t.patch @@ -0,0 +1,35 @@ +From 4eeb901b7aadb167e44f476fd665f7fedf491e51 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=B6rg=20Krause?= +Date: Fri, 6 May 2016 09:28:36 +0200 +Subject: [PATCH] Fix missing include for caddr_t +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +caddr_t is defined in . This header file must be included to fix +build with the musl C library: + +netinfo.c: In function 'mc_net_info_get_permanent_mac': +netinfo.c:116:28: error: 'caddr_t' undeclared (first use in this function) + req.ifr_data = (caddr_t)epa; + +Signed-off-by: Jörg Krause +--- + src/netinfo.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/netinfo.c b/src/netinfo.c +index 3525123..1aa3293 100644 +--- a/src/netinfo.c ++++ b/src/netinfo.c +@@ -28,6 +28,7 @@ + #include + #include + #include ++#include + + #include + #include +-- +2.8.2 + diff --git a/package/macchanger/Config.in b/package/macchanger/Config.in new file mode 100644 index 00000000..e1a03e12 --- /dev/null +++ b/package/macchanger/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_MACCHANGER + bool "macchanger" + help + A GNU/Linux utility for viewing/manipulating the MAC address + of network interfaces + + http://www.gnu.org/software/macchanger diff --git a/package/macchanger/macchanger.hash b/package/macchanger/macchanger.hash new file mode 100644 index 00000000..dbcfa6cf --- /dev/null +++ b/package/macchanger/macchanger.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 dae2717c270fd5f62d790dbf80c19793c651b1b26b62c101b82d5fdf25a845bf macchanger-1.7.0.tar.gz +# Locally computed +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/macchanger/macchanger.mk b/package/macchanger/macchanger.mk new file mode 100644 index 00000000..f2cbce49 --- /dev/null +++ b/package/macchanger/macchanger.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# macchanger +# +################################################################################ + +MACCHANGER_VERSION = 1.7.0 +MACCHANGER_SITE = https://github.com/alobbs/macchanger/releases/download/$(MACCHANGER_VERSION) +MACCHANGER_LICENSE = GPL-2.0+ +MACCHANGER_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/madplay/0001-switch-to-new-alsa-api.patch b/package/madplay/0001-switch-to-new-alsa-api.patch new file mode 100644 index 00000000..60d7bd37 --- /dev/null +++ b/package/madplay/0001-switch-to-new-alsa-api.patch @@ -0,0 +1,173 @@ +Switch madplay to the new API. This is done thanks to a patch written +by Micha Nelissen and available at +http://article.gmane.org/gmane.comp.audio.mad.devel/729. + +--- madplay-0.15.2b/audio_alsa.c 2008-10-18 15:10:16.000000000 +0200 ++++ madplay-0.15.2b/audio_alsa.c.new 2008-10-18 15:03:27.000000000 +0200 +@@ -28,31 +28,30 @@ + + #include + +-#define ALSA_PCM_OLD_HW_PARAMS_API +-#define ALSA_PCM_OLD_SW_PARAMS_API + #include + + #include + + #include "audio.h" + +-char *buf = NULL; +-int paused = 0; ++#define BUFFER_TIME_MAX 500000 + +-int rate = -1; +-int channels = -1; +-int bitdepth = -1; +-int sample_size = -1; +- +-int buffer_time = 500000; +-int period_time = 100000; +-char *defaultdev = "plughw:0,0"; ++unsigned char *buf = NULL; ++int paused = 0; ++ ++unsigned int rate = 0; ++unsigned int channels = -1; ++unsigned int bitdepth = -1; ++unsigned int sample_size = -1; ++ ++unsigned int buffer_time; ++unsigned int period_time; ++char *defaultdev = "plughw:0,0"; + + snd_pcm_hw_params_t *alsa_hwparams; + snd_pcm_sw_params_t *alsa_swparams; + +-snd_pcm_sframes_t buffer_size; +-snd_pcm_sframes_t period_size; ++snd_pcm_uframes_t buffer_size; + + snd_pcm_format_t alsa_format = -1; + snd_pcm_access_t alsa_access = SND_PCM_ACCESS_MMAP_INTERLEAVED; +@@ -66,14 +65,20 @@ + snd_pcm_hw_params_t *params, + snd_pcm_access_t access) + { +- int err, dir; +- ++ int err; ++ + /* choose all parameters */ + err = snd_pcm_hw_params_any(handle,params); + if (err < 0) { + printf("Access type not available for playback: %s\n", snd_strerror(err)); + return err; + } ++ /* set the access type */ ++ err = snd_pcm_hw_params_set_access(handle, params, alsa_access); ++ if (err < 0) { ++ printf("Sample format not available for playback: %s\n", snd_strerror(err)); ++ return err; ++ } + /* set the sample format */ + err = snd_pcm_hw_params_set_format(handle, params, alsa_format); + if (err < 0) { +@@ -87,29 +92,38 @@ + return err; + } + /* set the stream rate */ +- err = snd_pcm_hw_params_set_rate_near(handle, params, rate, 0); ++ err = snd_pcm_hw_params_set_rate(handle, params, rate, 0); + if (err < 0) { + printf("Rate %iHz not available for playback: %s\n", rate, snd_strerror(err)); + return err; + } +- if (err != rate) { +- printf("Rate doesn't match (requested %iHz, get %iHz)\n", rate, err); +- return -EINVAL; +- } ++ err = snd_pcm_hw_params_get_buffer_time_max(params, &buffer_time, NULL); ++ if (err < 0) { ++ printf("Unable to retrieve buffer time: %s\n", snd_strerror(err)); ++ return err; ++ } ++ if (buffer_time > BUFFER_TIME_MAX) ++ buffer_time = BUFFER_TIME_MAX; + /* set buffer time */ +- err = snd_pcm_hw_params_set_buffer_time_near(handle, params, buffer_time, &dir); ++ err = snd_pcm_hw_params_set_buffer_time_near(handle, params, &buffer_time, 0); + if (err < 0) { + printf("Unable to set buffer time %i for playback: %s\n", buffer_time, snd_strerror(err)); + return err; + } +- buffer_size = snd_pcm_hw_params_get_buffer_size(params); ++ if (period_time * 4 > buffer_time) ++ period_time = buffer_time / 4; + /* set period time */ +- err = snd_pcm_hw_params_set_period_time_near(handle, params, period_time, &dir); ++ err = snd_pcm_hw_params_set_period_time_near(handle, params, &period_time, NULL); + if (err < 0) { + printf("Unable to set period time %i for playback: %s\n", period_time, snd_strerror(err)); + return err; + } +- period_size = snd_pcm_hw_params_get_period_size(params, &dir); ++ /* retrieve buffer size */ ++ err = snd_pcm_hw_params_get_buffer_size(params, &buffer_size); ++ if (err < 0) { ++ printf("Unable to retrieve buffer size: %s\n", snd_strerror(err)); ++ return err; ++ } + /* write the parameters to device */ + err = snd_pcm_hw_params(handle, params); + if (err < 0) { +@@ -123,6 +137,7 @@ + int set_swparams(snd_pcm_t *handle, + snd_pcm_sw_params_t *params) + { ++ unsigned int start_threshold; + int err; + + /* get current swparams */ +@@ -136,13 +151,7 @@ + if (err < 0) { + printf("Unable to set start threshold mode for playback: %s\n", snd_strerror(err)); + return err; +- } +- /* allow transfer when at least period_size samples can be processed */ +- err = snd_pcm_sw_params_set_avail_min(handle, params, period_size); +- if (err < 0) { +- printf("Unable to set avail min for playback: %s\n", snd_strerror(err)); +- return err; +- } ++ } + /* align all transfers to 1 samples */ + err = snd_pcm_sw_params_set_xfer_align(handle, params, 1); + if (err < 0) { +@@ -190,7 +199,7 @@ + rate = config->speed; + + if ( bitdepth == 0 ) +- config->precision = bitdepth = 32; ++ config->precision = bitdepth = 16; + + switch (bitdepth) + { +@@ -241,7 +250,7 @@ + return -1; + } + +- buf = malloc(buffer_size); ++ buf = malloc(buffer_size * sample_size); + if (buf == NULL) { + audio_error="unable to allocate output buffer table"; + return -1; +@@ -279,7 +288,7 @@ + int play(struct audio_play *play) + { + int err, len; +- char *ptr; ++ unsigned char *ptr; + + ptr = buf; + len = play->nsamples; + diff --git a/package/madplay/0002-configure-ac-automake-foreign.patch b/package/madplay/0002-configure-ac-automake-foreign.patch new file mode 100644 index 00000000..38d16309 --- /dev/null +++ b/package/madplay/0002-configure-ac-automake-foreign.patch @@ -0,0 +1,16 @@ +configure.ac: don't require GNU-specific files when running automake + +Signed-off-by: Fabrice Fontaine + +diff -durN madplay-0.15.2b-orig/configure.ac madplay-0.15.2b/configure.ac +--- madplay-0.15.2b-orig/configure.ac 2019-02-14 21:34:01.507212449 +0100 ++++ madplay-0.15.2b/configure.ac 2019-02-14 21:34:23.439336353 +0100 +@@ -26,7 +26,7 @@ + + AC_CONFIG_SRCDIR([madplay.c]) + +-AM_INIT_AUTOMAKE ++AM_INIT_AUTOMAKE([foreign]) + + AM_CONFIG_HEADER([config.h]) + diff --git a/package/madplay/0003-configure-ac-use-pkg-config-to-find-id3tag.patch b/package/madplay/0003-configure-ac-use-pkg-config-to-find-id3tag.patch new file mode 100644 index 00000000..47645edd --- /dev/null +++ b/package/madplay/0003-configure-ac-use-pkg-config-to-find-id3tag.patch @@ -0,0 +1,23 @@ +configure.ac: use pkg-config to find id3tag + +Signed-off-by: Fabrice Fontaine + +diff -durN madplay-0.15.2b-orig/configure.ac madplay-0.15.2b/configure.ac +--- madplay-0.15.2b-orig/configure.ac 2019-02-14 21:34:01.507212449 +0100 ++++ madplay-0.15.2b/configure.ac 2019-02-15 23:24:00.079876087 +0100 +@@ -182,12 +182,13 @@ + *** environment variable to specify its installed location, e.g. -L.]) + ]) + +-AC_CHECK_LIB(id3tag, id3_tag_parse, :, [ ++PKG_CHECK_MODULES(ID3TAG, id3tag, [ ++ CFLAGS="$CFLAGS $ID3TAG_CFLAGS" LIBS="$LIBS $ID3TAG_LIBS"], [ + AC_MSG_ERROR([libid3tag was not found + *** You must first install libid3tag before you can build this package. + *** If libid3tag is already installed, you may need to use the LDFLAGS + *** environment variable to specify its installed location, e.g. -L.]) +-], [-lz]) ++]) + + AC_FUNC_VPRINTF + AC_CHECK_FUNCS(madvise localeconv) diff --git a/package/madplay/0004-configure-ac-call-AM_MKINSTALLDIRS.patch b/package/madplay/0004-configure-ac-call-AM_MKINSTALLDIRS.patch new file mode 100644 index 00000000..7d3fb8dd --- /dev/null +++ b/package/madplay/0004-configure-ac-call-AM_MKINSTALLDIRS.patch @@ -0,0 +1,23 @@ +configure.ac: call AM_MKINSTALLDIRS to substitute @MKINSTALLDIRS@ + +MKINSTALLDIRS is obsolete and doesn't get automatically called. + +Force call AM_MKINSTALLDIRS() macro to substitute every @MKINSTALLDIRS@ +occurence in *.in files. + +Signed-off-by: Giulio Benetti + +diff -urpN madplay-0.15.2b.orig/configure.ac madplay-0.15.2b/configure.ac +--- madplay-0.15.2b.orig/configure.ac 2019-04-16 12:06:03.781018755 +0200 ++++ madplay-0.15.2b/configure.ac 2019-04-16 12:07:48.399162610 +0200 +@@ -146,6 +146,10 @@ ALL_LINGUAS="en es fr hr no" + AM_GNU_GETTEXT([use-libtool]) + AM_GNU_GETTEXT_VERSION(0.14.1) + ++dnl Substitute MKINSTALLDIRS ++ ++AM_MKINSTALLDIRS() ++ + dnl Checks for header files. + + AC_HEADER_STDC diff --git a/package/madplay/Config.in b/package/madplay/Config.in new file mode 100644 index 00000000..a3373057 --- /dev/null +++ b/package/madplay/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_MADPLAY + bool "madplay" + select BR2_PACKAGE_LIBMAD + select BR2_PACKAGE_LIBID3TAG + help + Command-line front-end to libmad, a high-quality MPEG audio + decoder. It currently supports MPEG-1 and the MPEG-2 + extension to lower sampling frequencies, as well as the de + facto MPEG 2.5 format. All three audio layers - Layer I, + Layer II, and Layer III (i.e. MP3) - are fully implemented. + + http://www.underbit.com/products/mad/ + +if BR2_PACKAGE_MADPLAY + +config BR2_PACKAGE_MADPLAY_ALSA + bool + default y + depends on BR2_PACKAGE_ALSA_LIB + +endif diff --git a/package/madplay/madplay.hash b/package/madplay/madplay.hash new file mode 100644 index 00000000..22770297 --- /dev/null +++ b/package/madplay/madplay.hash @@ -0,0 +1,4 @@ +# Locally computed: +sha256 5a79c7516ff7560dffc6a14399a389432bc619c905b13d3b73da22fa65acede0 madplay-0.15.2b.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING +sha256 915bfd70548f31d11f9b4ffb21f343d1196af96c79d6aaac5663ea46c39dd3a3 COPYRIGHT diff --git a/package/madplay/madplay.mk b/package/madplay/madplay.mk new file mode 100644 index 00000000..e1a78bd7 --- /dev/null +++ b/package/madplay/madplay.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# madplay +# +################################################################################ + +MADPLAY_VERSION = 0.15.2b +MADPLAY_SITE = http://downloads.sourceforge.net/project/mad/madplay/$(MADPLAY_VERSION) +MADPLAY_LICENSE = GPL-2.0+ +MADPLAY_LICENSE_FILES = COPYING COPYRIGHT +MADPLAY_DEPENDENCIES = host-pkgconf libmad libid3tag $(TARGET_NLS_DEPENDENCIES) + +# Force autoreconf to be able to use a more recent libtool script, that +# is able to properly behave in the face of a missing C++ compiler. +# Also 0003-configure-ac-use-pkg-config-to-find-id3tag.patch +MADPLAY_AUTORECONF = YES + +# Check if ALSA is built, then we should configure after alsa-lib so +# ./configure can find alsa-lib. +ifeq ($(BR2_PACKAGE_MADPLAY_ALSA),y) +MADPLAY_CONF_OPTS += --with-alsa +MADPLAY_DEPENDENCIES += alsa-lib +MADPLAY_CONF_ENV += LIBS="`$(PKG_CONFIG_HOST_BINARY) --libs alsa`" +endif + +$(eval $(autotools-package)) diff --git a/package/make/0001-configure.ac-Support-GLIBC-glob-interface-version-2.patch b/package/make/0001-configure.ac-Support-GLIBC-glob-interface-version-2.patch new file mode 100644 index 00000000..62e67f85 --- /dev/null +++ b/package/make/0001-configure.ac-Support-GLIBC-glob-interface-version-2.patch @@ -0,0 +1,31 @@ +From 48c8a116a914a325a0497721f5d8b58d5bba34d4 Mon Sep 17 00:00:00 2001 +From: Paul Smith +Date: Sun, 19 Nov 2017 15:09:16 -0500 +Subject: [PATCH] * configure.ac: Support GLIBC glob interface version 2 + +Signed-off-by: Baruch Siach +--- +Upstream status: commit 48c8a116a914a3 + + configure.ac | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 8c72568cf276..4710832ae568 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -404,10 +404,9 @@ AC_CACHE_CHECK([if system libc has GNU glob], [make_cv_sys_gnu_glob], + #include + #include + +-#define GLOB_INTERFACE_VERSION 1 + #if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1 + # include +-# if _GNU_GLOB_INTERFACE_VERSION == GLOB_INTERFACE_VERSION ++# if _GNU_GLOB_INTERFACE_VERSION == 1 || _GNU_GLOB_INTERFACE_VERSION == 2 + gnu glob + # endif + #endif], +-- +2.16.2 + diff --git a/package/make/0001-glob-Do-not-assume-glibc-glob-internals.patch b/package/make/0001-glob-Do-not-assume-glibc-glob-internals.patch new file mode 100644 index 00000000..33ded3c5 --- /dev/null +++ b/package/make/0001-glob-Do-not-assume-glibc-glob-internals.patch @@ -0,0 +1,70 @@ +From 193f1e81edd6b1b56b0eb0ff8aa4b41c7b4257b4 Mon Sep 17 00:00:00 2001 +From: Paul Eggert +Date: Sun, 24 Sep 2017 09:12:58 -0400 +Subject: [PATCH] glob: Do not assume glibc glob internals. + +It has been proposed that glibc glob start using gl_lstat, +which the API allows it to do. GNU 'make' should not get in +the way of this. See: +https://sourceware.org/ml/libc-alpha/2017-09/msg00409.html + +* dir.c (local_lstat): New function, like local_stat. +(dir_setup_glob): Use it to initialize gl_lstat too, as the API +requires. + +Signed-off-by: Samuel Mendoza-Jonas +(from upstream commit 193f1e81edd6b1b56b0eb0ff8aa4b41c7b4257b4) +--- + dir.c | 29 +++++++++++++++++++++++++++-- + 1 file changed, 27 insertions(+), 2 deletions(-) + +diff --git a/dir.c b/dir.c +index adbb8a9..c343e4c 100644 +--- a/dir.c ++++ b/dir.c +@@ -1299,15 +1299,40 @@ local_stat (const char *path, struct stat *buf) + } + #endif + ++/* Similarly for lstat. */ ++#if !defined(lstat) && !defined(WINDOWS32) || defined(VMS) ++# ifndef VMS ++# ifndef HAVE_SYS_STAT_H ++int lstat (const char *path, struct stat *sbuf); ++# endif ++# else ++ /* We are done with the fake lstat. Go back to the real lstat */ ++# ifdef lstat ++# undef lstat ++# endif ++# endif ++# define local_lstat lstat ++#elif defined(WINDOWS32) ++/* Windows doesn't support lstat(). */ ++# define local_lstat local_stat ++#else ++static int ++local_lstat (const char *path, struct stat *buf) ++{ ++ int e; ++ EINTRLOOP (e, lstat (path, buf)); ++ return e; ++} ++#endif ++ + void + dir_setup_glob (glob_t *gl) + { + gl->gl_opendir = open_dirstream; + gl->gl_readdir = read_dirstream; + gl->gl_closedir = free; ++ gl->gl_lstat = local_lstat; + gl->gl_stat = local_stat; +- /* We don't bother setting gl_lstat, since glob never calls it. +- The slot is only there for compatibility with 4.4 BSD. */ + } + + void +-- +2.21.0 + diff --git a/package/make/Config.in b/package/make/Config.in new file mode 100644 index 00000000..e8aa912f --- /dev/null +++ b/package/make/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_MAKE + bool "make" + depends on BR2_USE_MMU # fork() + help + A tool which controls the generation of executables and other + non-source files of a program from the program's source files. + + While Buildroot no longer supports building a toolchain for + the target, we keep a make package that is for example + useful to run the uClibc test suite on the target. + + http://www.gnu.org/software/make/ diff --git a/package/make/make.hash b/package/make/make.hash new file mode 100644 index 00000000..242cb956 --- /dev/null +++ b/package/make/make.hash @@ -0,0 +1,6 @@ +# From http://lists.gnu.org/archive/html/info-gnu/2016-06/msg00005.html +md5 15b012617e7c44c0ed482721629577ac make-4.2.1.tar.bz2 +# Locally calculated after checking signature +sha256 d6e262bf3601b42d2b1e4ef8310029e1dcf20083c5446b4b7aa67081fdffc589 make-4.2.1.tar.bz2 +# Locally computed +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/make/make.mk b/package/make/make.mk new file mode 100644 index 00000000..f289c5c3 --- /dev/null +++ b/package/make/make.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# make +# +################################################################################ + +MAKE_VERSION = 4.2.1 +MAKE_SOURCE = make-$(MAKE_VERSION).tar.bz2 +MAKE_SITE = $(BR2_GNU_MIRROR)/make +MAKE_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) host-pkgconf +MAKE_LICENSE = GPL-3.0+ +MAKE_LICENSE_FILES = COPYING +MAKE_CPE_ID_VENDOR = gnu + +# Patching configure.ac +MAKE_AUTORECONF = YES + +MAKE_CONF_OPTS = --without-guile + +# Disable the 'load' operation for static builds since it needs dlopen +ifeq ($(BR2_STATIC_LIBS),y) +MAKE_CONF_OPTS += --disable-load +endif + +HOST_MAKE_DEPENDENCIES = host-pkgconf +HOST_MAKE_CONF_OPTS = --without-guile + +# Configure host-make binary to be 'host-make' to ensure it isn't +# accidently used by packages when they invoke recursive / sub-make. +HOST_MAKE_CONF_OPTS += --program-prefix=host- + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/makedevs/README b/package/makedevs/README new file mode 100644 index 00000000..70844bf8 --- /dev/null +++ b/package/makedevs/README @@ -0,0 +1,35 @@ +When building a target filesystem, it is desirable to not have to +become root and then run 'mknod' a thousand times. Using a device +table you can create device nodes and directories "on the fly". + +You can do all sorts of interesting things with a device table file. +For example, if you want to adjust the permissions on a particular +file you can just add an entry like: + + /sbin/foobar f 2755 0 0 - - - - - + +and (assuming the file /sbin/foobar exists) it will be made setuid +root (regardless of what its permissions are on the host filesystem. + +Furthermore, you can use a single table entry to create a many device +minors. For example, if I wanted to create /dev/hda and +/dev/hda[0-15] I could just use the following two table entries: + + /dev/hda b 640 0 0 3 0 0 0 - + /dev/hda b 640 0 0 3 1 1 1 15 + +Device table entries take the form of: + + + +where name is the file name, type can be one of: + + f: A regular file + d: Directory + c: Character special device file + b: Block special device file + p: Fifo (named pipe) + +uid is the user id for the target file, gid is the group id for the +target file. The rest of the entries (major, minor, etc) apply only +to device special files. diff --git a/package/makedevs/makedevs.c b/package/makedevs/makedevs.c new file mode 100644 index 00000000..c57b964f --- /dev/null +++ b/package/makedevs/makedevs.c @@ -0,0 +1,647 @@ +/* vi: set sw=4 ts=4: */ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 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 Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + */ + +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef __APPLE__ +#include /* major() and minor() */ +#endif +#include +#ifdef EXTENDED_ATTRIBUTES +#include +#endif /* EXTENDED_ATTRIBUTES */ + +const char *bb_applet_name; +uid_t recursive_uid; +gid_t recursive_gid; +unsigned int recursive_mode; +#define PASSWD_PATH "etc/passwd" /* MUST be relative */ +#define GROUP_PATH "etc/group" /* MUST be relative */ + +void bb_verror_msg(const char *s, va_list p) +{ + fflush(stdout); + fprintf(stderr, "%s: ", bb_applet_name); + vfprintf(stderr, s, p); +} + +void bb_error_msg(const char *s, ...) +{ + va_list p; + + va_start(p, s); + bb_verror_msg(s, p); + va_end(p); + putc('\n', stderr); +} + +void bb_error_msg_and_die(const char *s, ...) +{ + va_list p; + + va_start(p, s); + bb_verror_msg(s, p); + va_end(p); + putc('\n', stderr); + exit(1); +} + +void bb_vperror_msg(const char *s, va_list p) +{ + int err=errno; + if(s == 0) s = ""; + bb_verror_msg(s, p); + if (*s) s = ": "; + fprintf(stderr, "%s%s\n", s, strerror(err)); +} + +void bb_perror_msg(const char *s, ...) +{ + va_list p; + + va_start(p, s); + bb_vperror_msg(s, p); + va_end(p); +} + +void bb_perror_msg_and_die(const char *s, ...) +{ + va_list p; + + va_start(p, s); + bb_vperror_msg(s, p); + va_end(p); + exit(1); +} + +FILE *bb_xfopen(const char *path, const char *mode) +{ + FILE *fp; + if ((fp = fopen(path, mode)) == NULL) + bb_perror_msg_and_die("%s", path); + return fp; +} + +enum { + FILEUTILS_PRESERVE_STATUS = 1, + FILEUTILS_DEREFERENCE = 2, + FILEUTILS_RECUR = 4, + FILEUTILS_FORCE = 8, + FILEUTILS_INTERACTIVE = 16 +}; +int bb_make_directory (char *path, long mode, int flags) +{ + mode_t mask; + const char *fail_msg; + char *s = path; + char c; + struct stat st; + + mask = umask(0); + if (mode == -1) { + umask(mask); + mode = (S_IXUSR | S_IXGRP | S_IXOTH | + S_IWUSR | S_IWGRP | S_IWOTH | + S_IRUSR | S_IRGRP | S_IROTH) & ~mask; + } else { + umask(mask & ~0300); + } + + do { + c = 0; + + if (flags & FILEUTILS_RECUR) { /* Get the parent. */ + /* Bypass leading non-'/'s and then subsequent '/'s. */ + while (*s) { + if (*s == '/') { + do { + ++s; + } while (*s == '/'); + c = *s; /* Save the current char */ + *s = 0; /* and replace it with nul. */ + break; + } + ++s; + } + } + + if (mkdir(path, 0777) < 0) { + /* If we failed for any other reason than the directory + * already exists, output a diagnostic and return -1.*/ + if ((errno != EEXIST && errno != EISDIR) + || !(flags & FILEUTILS_RECUR) + || (stat(path, &st) < 0 || !S_ISDIR(st.st_mode))) { + fail_msg = "create"; + umask(mask); + break; + } + /* Since the directory exists, don't attempt to change + * permissions if it was the full target. Note that + * this is not an error conditon. */ + if (!c) { + umask(mask); + return 0; + } + } + + if (!c) { + /* Done. If necessary, updated perms on the newly + * created directory. Failure to update here _is_ + * an error.*/ + umask(mask); + if ((mode != -1) && (chmod(path, mode) < 0)){ + fail_msg = "set permissions of"; + break; + } + return 0; + } + + /* Remove any inserted nul from the path (recursive mode). */ + *s = c; + + } while (1); + + bb_perror_msg ("Cannot %s directory `%s'", fail_msg, path); + return -1; +} + +const char * const bb_msg_memory_exhausted = "memory exhausted"; + +void *xmalloc(size_t size) +{ + void *ptr = malloc(size); + if (ptr == NULL && size != 0) + bb_error_msg_and_die(bb_msg_memory_exhausted); + return ptr; +} + +void *xcalloc(size_t nmemb, size_t size) +{ + void *ptr = calloc(nmemb, size); + if (ptr == NULL && nmemb != 0 && size != 0) + bb_error_msg_and_die(bb_msg_memory_exhausted); + return ptr; +} + +void *xrealloc(void *ptr, size_t size) +{ + ptr = realloc(ptr, size); + if (ptr == NULL && size != 0) + bb_error_msg_and_die(bb_msg_memory_exhausted); + return ptr; +} + +char *private_get_line_from_file(FILE *file, int c) +{ +#define GROWBY (80) /* how large we will grow strings by */ + + int ch; + int idx = 0; + char *linebuf = NULL; + int linebufsz = 0; + + while ((ch = getc(file)) != EOF) { + /* grow the line buffer as necessary */ + if (idx > linebufsz - 2) { + linebuf = xrealloc(linebuf, linebufsz += GROWBY); + } + linebuf[idx++] = (char)ch; + if (!ch) return linebuf; + if (c<2 && ch == '\n') { + if (c) { + --idx; + } + break; + } + } + if (linebuf) { + if (ferror(file)) { + free(linebuf); + return NULL; + } + linebuf[idx] = 0; + } + return linebuf; +} + +char *bb_get_chomped_line_from_file(FILE *file) +{ + return private_get_line_from_file(file, 1); +} + +long my_getpwnam(const char *name) +{ + struct passwd *myuser; + FILE *stream; + + stream = bb_xfopen(PASSWD_PATH, "r"); + while(1) { + errno = 0; + myuser = fgetpwent(stream); + if (myuser == NULL) + bb_error_msg_and_die("unknown user name: %s", name); + if (errno) + bb_perror_msg_and_die("fgetpwent"); + if (!strcmp(name, myuser->pw_name)) + break; + } + fclose(stream); + + return myuser->pw_uid; +} + +long my_getgrnam(const char *name) +{ + struct group *mygroup; + FILE *stream; + + stream = bb_xfopen(GROUP_PATH, "r"); + while(1) { + errno = 0; + mygroup = fgetgrent(stream); + if (mygroup == NULL) + bb_error_msg_and_die("unknown group name: %s", name); + if (errno) + bb_perror_msg_and_die("fgetgrent"); + if (!strcmp(name, mygroup->gr_name)) + break; + } + fclose(stream); + + return mygroup->gr_gid; +} + +unsigned long get_ug_id(const char *s, long (*my_getxxnam)(const char *)) +{ + unsigned long r; + char *p; + + r = strtoul(s, &p, 10); + if (*p || (s == p)) { + r = my_getxxnam(s); + } + + return r; +} + +char * last_char_is(const char *s, int c) +{ + char *sret = (char *)s; + if (sret) { + sret = strrchr(sret, c); + if(sret != NULL && *(sret+1) != 0) + sret = NULL; + } + return sret; +} + +void bb_xasprintf(char **string_ptr, const char *format, ...) +{ + va_list p; + int r; + + va_start(p, format); + r = vasprintf(string_ptr, format, p); + va_end(p); + + if (r < 0) { + bb_perror_msg_and_die("bb_xasprintf"); + } +} + +char *concat_path_file(const char *path, const char *filename) +{ + char *outbuf; + char *lc; + + if (!path) + path = ""; + lc = last_char_is(path, '/'); + while (*filename == '/') + filename++; + bb_xasprintf(&outbuf, "%s%s%s", path, (lc==NULL ? "/" : ""), filename); + + return outbuf; +} + +#ifdef EXTENDED_ATTRIBUTES +int bb_set_xattr(const char *fpath, const char *xattr) +{ + cap_t cap, cap_file, cap_new; + char *cap_file_text, *cap_new_text; + ssize_t length; + + cap = cap_from_text(xattr); + if (cap == NULL) + bb_perror_msg_and_die("cap_from_text failed for %s", xattr); + + cap_file = cap_get_file(fpath); + if (cap_file == NULL) { + /* if no capability was set before, we initialize cap_file */ + if (errno != ENODATA) + bb_perror_msg_and_die("cap_get_file failed on %s", fpath); + + cap_file = cap_init(); + if (!cap_file) + bb_perror_msg_and_die("cap_init failed"); + } + + if ((cap_file_text = cap_to_text(cap_file, &length)) == NULL) + bb_perror_msg_and_die("cap_to_name failed on %s", fpath); + + bb_xasprintf(&cap_new_text, "%s %s", cap_file_text, xattr); + + if ((cap_new = cap_from_text(cap_new_text)) == NULL) + bb_perror_msg_and_die("cap_from_text failed on %s", cap_new_text); + + if (cap_set_file(fpath, cap_new) == -1) + bb_perror_msg_and_die("cap_set_file failed for %s (xattr = %s)", fpath, xattr); + + cap_free(cap); + cap_free(cap_file); + cap_free(cap_file_text); + cap_free(cap_new); + cap_free(cap_new_text); + + return 0; +} +#endif /* EXTENDED_ATTRIBUTES */ + +void bb_show_usage(void) +{ + fprintf(stderr, "%s: [-d device_table] rootdir\n\n", bb_applet_name); + fprintf(stderr, "Creates a batch of special files as specified in a device table.\n"); + fprintf(stderr, "Device table entries take the form of:\n"); + fprintf(stderr, "name type mode user group major minor start increment count\n\n"); + fprintf(stderr, "Where name is the file name, type can be one of:\n"); + fprintf(stderr, " f A regular file\n"); + fprintf(stderr, " d Directory\n"); + fprintf(stderr, " r Directory recursively\n"); + fprintf(stderr, " c Character special device file\n"); + fprintf(stderr, " b Block special device file\n"); + fprintf(stderr, " p Fifo (named pipe)\n"); + fprintf(stderr, "uid is the user id for the target file, gid is the group id for the\n"); + fprintf(stderr, "target file. The rest of the entries (major, minor, etc) apply to\n"); + fprintf(stderr, "to device special files. A '-' may be used for blank entries.\n\n"); + fprintf(stderr, "For example:\n"); + fprintf(stderr, " \n"); + fprintf(stderr, "/dev d 755 0 0 - - - - -\n"); + fprintf(stderr, "/dev/console c 666 0 0 5 1 - - -\n"); + fprintf(stderr, "/dev/null c 666 0 0 1 3 0 0 -\n"); + fprintf(stderr, "/dev/zero c 666 0 0 1 5 0 0 -\n"); + fprintf(stderr, "/dev/hda b 640 0 0 3 0 0 0 -\n"); + fprintf(stderr, "/dev/hda b 640 0 0 3 1 1 1 15\n"); + fprintf(stderr, "/dev/rtp b 640 0 0 250 0 0 1 5\n"); + fprintf(stderr, "/dev/gps b 640 0 0 251 0 1 1 5\n"); + fprintf(stderr, "/dev/uio b 640 0 0 252 0 1 2 5\n"); + fprintf(stderr, "/dev/uio b 640 0 0 252 1 6 2 5\n\n"); + fprintf(stderr, "Will Produce:\n"); + fprintf(stderr, "/dev\n"); + fprintf(stderr, "/dev/console\n"); + fprintf(stderr, "/dev/null\n"); + fprintf(stderr, "/dev/zero\n"); + fprintf(stderr, "/dev/hda\n"); + fprintf(stderr, "/dev/hda[1-15] with minor numbers [1-15]\n"); + fprintf(stderr, "/dev/rtp[0-4] with minor numbers [0-4]\n"); + fprintf(stderr, "/dev/gps[1-5] with minor numbers [0-4]\n"); + fprintf(stderr, "/dev/uio[1-5] with minor numbers 0,2,4,6,8\n"); + fprintf(stderr, "/dev/uio[6-10] with minor numbers 1,3,5,7,9\n"); + exit(1); +} + +int bb_recursive(const char *fpath, const struct stat *sb, + int tflag, struct FTW *ftwbuf){ + + if (chown(fpath, recursive_uid, recursive_gid) == -1) { + bb_perror_msg("chown failed for %s", fpath); + return -1; + } + if (recursive_mode != -1) { + if (chmod(fpath, recursive_mode) < 0) { + bb_perror_msg("chmod failed for %s", fpath); + return -1; + } + } + + return 0; +} + +int main(int argc, char **argv) +{ + int opt; + FILE *table = stdin; + char *rootdir = NULL; + char *full_name = NULL; + char *line = NULL; + int linenum = 0; + int ret = EXIT_SUCCESS; + + bb_applet_name = basename(argv[0]); + + while ((opt = getopt(argc, argv, "d:")) != -1) { + switch(opt) { + case 'd': + table = bb_xfopen((line=optarg), "r"); + break; + default: + bb_show_usage(); + } + } + + if (optind >= argc || (rootdir=argv[optind])==NULL) { + bb_error_msg_and_die("root directory not speficied"); + } + + if (chdir(rootdir) != 0) { + bb_perror_msg_and_die("Couldnt chdir to %s", rootdir); + } + + umask(0); + + printf("rootdir=%s\n", rootdir); + if (line) { + printf("table='%s'\n", line); + } else { + printf("table=\n"); + } + + while ((line = bb_get_chomped_line_from_file(table))) { + char type; + unsigned int mode = 0755; + unsigned int major = 0; + unsigned int minor = 0; + unsigned int count = 0; + unsigned int increment = 0; + unsigned int start = 0; + char xattr[255]; + char name[4096]; + char user[41]; + char group[41]; + uid_t uid; + gid_t gid; + + linenum++; + + if (1 == sscanf(line, " |xattr %254s", xattr)) { +#ifdef EXTENDED_ATTRIBUTES + if (!full_name) + bb_error_msg_and_die("line %d should be after a file\n", linenum); + + if (bb_set_xattr(full_name, xattr) < 0) + bb_error_msg_and_die("can't set cap %s on file %s\n", xattr, full_name); +#else + bb_error_msg_and_die("line %d not supported: '%s'\nDid you forget to enable " + "BR2_ROOTFS_DEVICE_TABLE_SUPPORTS_EXTENDED_ATTRIBUTES?\n", + linenum, line); +#endif /* EXTENDED_ATTRIBUTES */ + continue; + } + + if ((2 > sscanf(line, "%4095s %c %o %40s %40s %u %u %u %u %u", name, + &type, &mode, user, group, &major, + &minor, &start, &increment, &count)) || + ((major | minor | start | count | increment) > 0xfffff)) + { + if (*line=='\0' || *line=='#' || isspace(*line)) + continue; + bb_error_msg("line %d invalid: '%s'\n", linenum, line); + ret = EXIT_FAILURE; + continue; + } + if (name[0] == '#') { + continue; + } + if (*group) { + gid = get_ug_id(group, my_getgrnam); + } else { + gid = getgid(); + } + if (*user) { + uid = get_ug_id(user, my_getpwnam); + } else { + uid = getuid(); + } + + /* + * free previous full name + * we don't de-allocate full_name at the end of the parsing, + * because we may need it if the next line is an xattr. + */ + free(full_name); + full_name = concat_path_file(rootdir, name); + + if (type == 'd') { + bb_make_directory(full_name, mode | S_IFDIR, FILEUTILS_RECUR); + if (chown(full_name, uid, gid) == -1) { + bb_perror_msg("line %d: chown failed for %s", linenum, full_name); + ret = EXIT_FAILURE; + goto loop; + } + if ((mode != -1) && (chmod(full_name, mode) < 0)){ + bb_perror_msg("line %d: chmod failed for %s", linenum, full_name); + ret = EXIT_FAILURE; + goto loop; + } + } else if (type == 'f' || type == 'F') { + struct stat st; + if ((stat(full_name, &st) < 0 || !S_ISREG(st.st_mode))) { + if (type == 'F') { + continue; /*Ignore optional files*/ + } + bb_perror_msg("line %d: regular file '%s' does not exist", linenum, full_name); + ret = EXIT_FAILURE; + goto loop; + } + if (chown(full_name, uid, gid) == -1) { + bb_perror_msg("line %d: chown failed for %s", linenum, full_name); + ret = EXIT_FAILURE; + goto loop; + } + if ((mode != -1) && (chmod(full_name, mode) < 0)){ + bb_perror_msg("line %d: chmod failed for %s", linenum, full_name); + ret = EXIT_FAILURE; + goto loop; + } + } else if (type == 'r') { + recursive_uid = uid; + recursive_gid = gid; + recursive_mode = mode; + if (nftw(full_name, bb_recursive, 20, FTW_MOUNT | FTW_PHYS) < 0) { + bb_perror_msg("line %d: recursive failed for %s", linenum, full_name); + ret = EXIT_FAILURE; + goto loop; + } + } else + { + dev_t rdev; + unsigned i; + char *full_name_inc; + + if (type == 'p') { + mode |= S_IFIFO; + } + else if (type == 'c') { + mode |= S_IFCHR; + } + else if (type == 'b') { + mode |= S_IFBLK; + } else { + bb_error_msg("line %d: Unsupported file type %c", linenum, type); + ret = EXIT_FAILURE; + goto loop; + } + + full_name_inc = xmalloc(strlen(full_name) + sizeof(int)*3 + 2); + if (count) + count--; + for (i = start; i <= start + count; i++) { + sprintf(full_name_inc, count ? "%s%u" : "%s", full_name, i); + rdev = makedev(major, minor + (i - start) * increment); + if (mknod(full_name_inc, mode, rdev) < 0) { + bb_perror_msg("line %d: can't create node %s", linenum, full_name_inc); + ret = EXIT_FAILURE; + } else if (chown(full_name_inc, uid, gid) < 0) { + bb_perror_msg("line %d: can't chown %s", linenum, full_name_inc); + ret = EXIT_FAILURE; + } else if (chmod(full_name_inc, mode) < 0) { + bb_perror_msg("line %d: can't chmod %s", linenum, full_name_inc); + ret = EXIT_FAILURE; + } + } + free(full_name_inc); + } +loop: + free(line); + } + fclose(table); + + return ret; +} diff --git a/package/makedevs/makedevs.mk b/package/makedevs/makedevs.mk new file mode 100644 index 00000000..9b0f4461 --- /dev/null +++ b/package/makedevs/makedevs.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# makedevs +# +################################################################################ + +MAKEDEVS_LICENSE = GPL-2.0 + +HOST_MAKEDEVS_CFLAGS = $(HOST_CFLAGS) +HOST_MAKEDEVS_LDFLAGS = $(HOST_LDFLAGS) + +ifeq ($(BR2_ROOTFS_DEVICE_TABLE_SUPPORTS_EXTENDED_ATTRIBUTES),y) +HOST_MAKEDEVS_DEPENDENCIES += host-libcap +HOST_MAKEDEVS_CFLAGS += -DEXTENDED_ATTRIBUTES +HOST_MAKEDEVS_LDFLAGS += -lcap +endif + +define HOST_MAKEDEVS_EXTRACT_CMDS + cp $(HOST_MAKEDEVS_PKGDIR)/makedevs.c $(@D) +endef + +define HOST_MAKEDEVS_BUILD_CMDS + $(HOSTCC) $(HOST_MAKEDEVS_CFLAGS) $(@D)/makedevs.c \ + -o $(@D)/makedevs $(HOST_MAKEDEVS_LDFLAGS) +endef + +define HOST_MAKEDEVS_INSTALL_CMDS + $(INSTALL) -D -m 755 $(@D)/makedevs $(HOST_DIR)/bin/makedevs +endef + +$(eval $(host-generic-package)) diff --git a/package/makedumpfile/0001-PATCH-Define-PN_XNUM-if-missing.patch b/package/makedumpfile/0001-PATCH-Define-PN_XNUM-if-missing.patch new file mode 100644 index 00000000..162e893c --- /dev/null +++ b/package/makedumpfile/0001-PATCH-Define-PN_XNUM-if-missing.patch @@ -0,0 +1,25 @@ +From: Petr Tesarik +Subject: [PATCH] Define PN_XNUM if missing +Upstream: never, build fix for old distros + +Older elfutils did not define this constant. + +Signed-off-by: Petr Tesarik +Signed-off-by: Alexander Egorenkov +--- + elf_info.h | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/elf_info.h ++++ b/elf_info.h +@@ -19,6 +19,10 @@ + #include + #include + ++#ifndef PN_XNUM ++#define PN_XNUM 0xffff ++#endif ++ + #define KEXEC_CORE_NOTE_NAME "CORE" + #define KEXEC_CORE_NOTE_NAME_BYTES sizeof(KEXEC_CORE_NOTE_NAME) + diff --git a/package/makedumpfile/0002-makedumpfile.h-fix-build-on-sparc64.patch b/package/makedumpfile/0002-makedumpfile.h-fix-build-on-sparc64.patch new file mode 100644 index 00000000..defc1019 --- /dev/null +++ b/package/makedumpfile/0002-makedumpfile.h-fix-build-on-sparc64.patch @@ -0,0 +1,35 @@ +From 2c132ac5e6656723821acdb0ee57b34c42851fed Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Thu, 4 Feb 2021 20:15:56 +0100 +Subject: [PATCH] makedumpfile.h: fix build on sparc64 + +Fix the following build failure on sparc64: + +/home/giuliobenetti/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/sparc64-buildroot-linux-gnu/9.3.0/../../../../sparc64-buildroot-linux-gnu/bin/ld: /tmp/ccylTux8.o: in function `find_kaslr_offsets': +/home/giuliobenetti/autobuild/run/instance-0/output-1/build/makedumpfile-1.6.8/makedumpfile.c:4017: undefined reference to `get_kaslr_offset' + +Fixes: + - http://autobuild.buildroot.org/results/1421f54f7599bba62c0a4bd5c65ce21c8cc7ee1a + +Signed-off-by: Fabrice Fontaine +[Upstream status: +http://lists.infradead.org/pipermail/kexec/2021-February/021996.html] +--- + makedumpfile.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/makedumpfile.h b/makedumpfile.h +index 97a5554..dfc1a77 100644 +--- a/makedumpfile.h ++++ b/makedumpfile.h +@@ -1139,6 +1139,7 @@ unsigned long long vaddr_to_paddr_sparc64(unsigned long vaddr); + #define get_machdep_info() TRUE + #define get_phys_base() get_phys_base_sparc64() + #define get_versiondep_info() get_versiondep_info_sparc64() ++#define get_kaslr_offset(X) stub_false() + #define vaddr_to_paddr(X) vaddr_to_paddr_sparc64(X) + #define paddr_to_vaddr(X) paddr_to_vaddr_general(X) + #define is_phys_addr(X) stub_true_ul(X) +-- +2.29.2 + diff --git a/package/makedumpfile/Config.in b/package/makedumpfile/Config.in new file mode 100644 index 00000000..d5af38b5 --- /dev/null +++ b/package/makedumpfile/Config.in @@ -0,0 +1,30 @@ +config BR2_PACKAGE_MAKEDUMPFILE_ARCH_SUPPORTS + bool + default y if BR2_aarch64 || BR2_aarch64_be + default y if BR2_arm || BR2_armeb + default y if BR2_i386 || BR2_x86_64 + default y if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le + default y if BR2_s390x + default y if BR2_sparc64 + +comment "makedumpfile needs a uClibc or glibc toolchain w/ wchar, dynamic library, threads" + depends on BR2_PACKAGE_MAKEDUMPFILE_ARCH_SUPPORTS + depends on !BR2_USE_WCHAR || BR2_STATIC_LIBS \ + || !BR2_TOOLCHAIN_HAS_THREADS \ + || !(BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC) + +config BR2_PACKAGE_MAKEDUMPFILE + bool "makedumpfile" + depends on BR2_PACKAGE_MAKEDUMPFILE_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS # dlopen + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC + select BR2_PACKAGE_BZIP2 + select BR2_PACKAGE_ELFUTILS + select BR2_PACKAGE_XZ + select BR2_PACKAGE_ZLIB + help + Makes a small dumpfile of kdump. + + https://github.com/makedumpfile/makedumpfile diff --git a/package/makedumpfile/makedumpfile.hash b/package/makedumpfile/makedumpfile.hash new file mode 100644 index 00000000..1b2df008 --- /dev/null +++ b/package/makedumpfile/makedumpfile.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 85d79b7090e9a8ce0d426795d3bc1de2858def7e12954d9bc6ae03de160b694c makedumpfile-1.6.8.tar.gz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/makedumpfile/makedumpfile.mk b/package/makedumpfile/makedumpfile.mk new file mode 100644 index 00000000..99fb3a71 --- /dev/null +++ b/package/makedumpfile/makedumpfile.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# makedumpfile +# +################################################################################ + +MAKEDUMPFILE_VERSION = 1.6.8 +MAKEDUMPFILE_SITE = $(call github,makedumpfile,makedumpfile,$(MAKEDUMPFILE_VERSION)) +MAKEDUMPFILE_DEPENDENCIES = bzip2 elfutils xz zlib +MAKEDUMPFILE_LICENSE = GPL-2.0 +MAKEDUMPFILE_LICENSE_FILES = COPYING + +ifeq ($(BR2_powerpc),y) +MAKEDUMPFILE_TARGET = powerpc32 +else +MAKEDUMPFILE_TARGET = $(BR2_ARCH) +endif + +MAKEDUMPFILE_MAKE_OPTS = \ + TARGET=$(MAKEDUMPFILE_TARGET) \ + LINKTYPE=dynamic + +ifeq ($(BR2_PACKAGE_LZO),y) +MAKEDUMPFILE_DEPENDENCIES += lzo +MAKEDUMPFILE_MAKE_OPTS += USELZO=on +endif + +ifeq ($(BR2_PACKAGE_SNAPPY),y) +MAKEDUMPFILE_DEPENDENCIES += snappy +MAKEDUMPFILE_MAKE_OPTS += USESNAPPY=on +endif + +define MAKEDUMPFILE_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + $(MAKEDUMPFILE_MAKE_OPTS) +endef + +define MAKEDUMPFILE_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) install \ + DESTDIR="$(TARGET_DIR)" +endef + +$(eval $(generic-package)) diff --git a/package/mali-t76x/Config.in b/package/mali-t76x/Config.in new file mode 100644 index 00000000..2533f100 --- /dev/null +++ b/package/mali-t76x/Config.in @@ -0,0 +1,28 @@ +config BR2_PACKAGE_MALI_T76X + bool "mali-t76x" + depends on BR2_TOOLCHAIN_USES_GLIBC + depends on BR2_ARM_EABIHF + depends on BR2_arm + select BR2_PACKAGE_MESA3D_HEADERS + select BR2_PACKAGE_HAS_LIBEGL + select BR2_PACKAGE_HAS_LIBGLES + help + Install the binary user-space components for the ARM Mali + Midgard T76X GPU. This package requires a kernel with the + ARM Mali Midgard GPU Kernel Drivers enabled. + + http://malideveloper.arm.com/resources/drivers/ + +if BR2_PACKAGE_MALI_T76X + +config BR2_PACKAGE_PROVIDES_LIBEGL + default "mali-t76x" + +config BR2_PACKAGE_PROVIDES_LIBGLES + default "mali-t76x" + +endif + +comment "mali-t76x needs a glibc toolchain with armhf enabled" + depends on BR2_arm + depends on !BR2_TOOLCHAIN_USES_GLIBC || !BR2_ARM_EABIHF diff --git a/package/mali-t76x/egl.pc b/package/mali-t76x/egl.pc new file mode 100644 index 00000000..3de3c3ff --- /dev/null +++ b/package/mali-t76x/egl.pc @@ -0,0 +1,11 @@ +prefix=/usr/ +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: egl +Description: ARM Mali implementation of EGL +Version: 1.5 +Requires: +Libs: -L${libdir} -lEGL -lGLESv2 +Cflags: -I${includedir} -DEGL_NO_X11 diff --git a/package/mali-t76x/glesv2.pc b/package/mali-t76x/glesv2.pc new file mode 100644 index 00000000..6521a386 --- /dev/null +++ b/package/mali-t76x/glesv2.pc @@ -0,0 +1,11 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: glesv2 +Description: ARM Mali implementation of OpenGL ESv2 +Version: 2.0 +Requires: +Libs: -L${libdir} -lGLESv2 -lGLESv1_CM +Cflags: -I${includedir} -DEGL_NO_X11 diff --git a/package/mali-t76x/mali-t76x.hash b/package/mali-t76x/mali-t76x.hash new file mode 100644 index 00000000..a754b980 --- /dev/null +++ b/package/mali-t76x/mali-t76x.hash @@ -0,0 +1,2 @@ +# Locally computed: +sha256 5a0b00438edc8066b374481d3332a43c07ec2bd3bc73265983a968970f754902 mali-t76x_r5p0-06rel0_linux_1+fbdev.tar.gz diff --git a/package/mali-t76x/mali-t76x.mk b/package/mali-t76x/mali-t76x.mk new file mode 100644 index 00000000..387685c0 --- /dev/null +++ b/package/mali-t76x/mali-t76x.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# mali-t76x +# +################################################################################ + +MALI_T76X_VERSION = r5p0-06rel0 +MALI_T76X_SOURCE = mali-t76x_$(MALI_T76X_VERSION)_linux_1+fbdev.tar.gz +MALI_T76X_SITE = http://malideveloper.arm.com/downloads/drivers/binary/$(MALI_T76X_VERSION) +MALI_T76X_DEPENDENCIES = mesa3d-headers +MALI_T76X_INSTALL_STAGING = YES +MALI_T76X_PROVIDES = libegl libgles + +define MALI_T76X_INSTALL_STAGING_CMDS + $(INSTALL) -m 755 $(@D)/*.so $(STAGING_DIR)/usr/lib/ + + $(INSTALL) -D -m 0644 package/mali-t76x/egl.pc \ + $(STAGING_DIR)/usr/lib/pkgconfig/egl.pc + $(INSTALL) -D -m 0644 package/mali-t76x/glesv2.pc \ + $(STAGING_DIR)/usr/lib/pkgconfig/glesv2.pc +endef + +define MALI_T76X_INSTALL_TARGET_CMDS + $(INSTALL) -m 755 $(@D)/*.so $(TARGET_DIR)/usr/lib/ +endef + +$(eval $(generic-package)) diff --git a/package/mariadb/0001-add-extra-check-for-librt.patch b/package/mariadb/0001-add-extra-check-for-librt.patch new file mode 100644 index 00000000..0dd4c546 --- /dev/null +++ b/package/mariadb/0001-add-extra-check-for-librt.patch @@ -0,0 +1,31 @@ +From 960c74ec60962f707bd41724edaa2640c0324400 Mon Sep 17 00:00:00 2001 +From: Ryan Coe +Date: Thu, 27 Oct 2016 20:33:21 -0700 +Subject: [PATCH] add extra check for librt + +https://jira.mariadb.org/browse/MDEV-10841 + +Signed-off-by: Ryan Coe +[Rebased on mariadb-10.3.30] +Signed-off-by: Peter Seiderer +--- + configure.cmake | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/configure.cmake b/configure.cmake +index 1b85c31b..4a1cd847 100644 +--- a/configure.cmake ++++ b/configure.cmake +@@ -134,6 +134,9 @@ IF(UNIX) + IF(NOT LIBRT) + MY_SEARCH_LIBS(clock_gettime rt LIBRT) + ENDIF() ++ IF(NOT LIBRT) ++ MY_SEARCH_LIBS(posix_spawn_file_actions_addclose rt LIBRT) ++ ENDIF() + set(THREADS_PREFER_PTHREAD_FLAG ON) + FIND_PACKAGE(Threads) + +-- +2.32.0 + diff --git a/package/mariadb/S97mysqld b/package/mariadb/S97mysqld new file mode 100644 index 00000000..54594a9e --- /dev/null +++ b/package/mariadb/S97mysqld @@ -0,0 +1,85 @@ +#!/bin/sh +# +# mysql +# + +MYSQL_LIB="/var/lib/mysql" +MYSQL_RUN="/run/mysql" +MYSQL_PIDFILE="$MYSQL_RUN/mysqld.pid" +MYSQL_LOG="/var/log/mysql" +MYSQL_LOGFILE="$MYSQL_LOG/mysqld.log" +MYSQL_BIN="/usr/bin" + +wait_for_ready() { + WAIT_DELAY=5 + while [ $WAIT_DELAY -gt 0 ]; do + if $MYSQL_BIN/mysqladmin ping > /dev/null 2>&1; then + return 0 + fi + sleep 1 + : $((WAIT_DELAY -= 1)) + done + return 1 +} + +start() { + # stderr is redirected to prevent a warning + # if mysql lib directory doesn't exist + if [ `ls -1 $MYSQL_LIB 2> /dev/null | wc -l` = 0 ] ; then + printf "Creating mysql system tables ... " + $MYSQL_BIN/mysql_install_db --basedir=/usr \ + --datadir=$MYSQL_LIB > /dev/null 2>&1 + if [ $? != 0 ]; then + echo "FAIL" + exit 1 + fi + chown -R mysql:mysql $MYSQL_LIB + echo "OK" + fi + + # mysqld runs as user mysql, but /run is only writable by root + # so create a subdirectory for mysql. + install -d -o mysql -g root -m 0755 $MYSQL_RUN + + # Also create logging directory as user mysql. + install -d -o mysql -g root -m 0755 $MYSQL_LOG + + # We don't use start-stop-daemon because mysqld has its own + # wrapper script. + printf "Starting mysql ... " + $MYSQL_BIN/mysqld_safe --pid-file=$MYSQL_PIDFILE --user=mysql \ + --log-error=$MYSQL_LOGFILE > /dev/null 2>&1 & + wait_for_ready + [ $? = 0 ] && echo "OK" || echo "FAIL" +} + +stop() { + printf "Stopping mysql ... " + if [ -f $MYSQL_PIDFILE ]; then + kill `cat $MYSQL_PIDFILE` > /dev/null 2>&1 + [ $? = 0 ] && echo "OK" || echo "FAIL" + else + echo "FAIL" + fi +} + +restart() { + stop + sleep 1 + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + ;; +esac diff --git a/package/mariadb/mariadb.hash b/package/mariadb/mariadb.hash new file mode 100644 index 00000000..4025be31 --- /dev/null +++ b/package/mariadb/mariadb.hash @@ -0,0 +1,7 @@ +# From https://downloads.mariadb.org/mariadb/10.3.30 +sha256 bd8735c65bdb7ebcd5d779fb9d3de3f2fcd319ad6482278d73dfe7301ad4ae1b mariadb-10.3.30.tar.gz +sha512 742c30b3ebc0b6d36b98d4e7a7fb511098142e72d8f42cbfa73a0bdea2059be17e790fbda4732329bbd99e4b50b13cf18e8122964a473e0b62170ab869eca8fc mariadb-10.3.30.tar.gz + +# Hash for license files +sha256 a4665c1189fe31e0bbc27e9b55439df7dad6e99805407fe58d78da7aabe678f8 README.md +sha256 240a15a1d0f34d3abca462cdb7e5fb89470967563f16b0e71169e51c1e74cf2b COPYING diff --git a/package/mariadb/mariadb.mk b/package/mariadb/mariadb.mk new file mode 100644 index 00000000..374b3dc3 --- /dev/null +++ b/package/mariadb/mariadb.mk @@ -0,0 +1,147 @@ +################################################################################ +# +# mariadb +# +################################################################################ + +MARIADB_VERSION = 10.3.30 +MARIADB_SITE = https://downloads.mariadb.org/interstitial/mariadb-$(MARIADB_VERSION)/source +MARIADB_LICENSE = GPL-2.0 (server), GPL-2.0 with FLOSS exception (GPL client library), LGPL-2.0 (LGPL client library) +# Tarball no longer contains LGPL license text +# https://jira.mariadb.org/browse/MDEV-12297 +MARIADB_LICENSE_FILES = README.md COPYING +MARIADB_CPE_ID_VENDOR = mariadb +MARIADB_INSTALL_STAGING = YES +MARIADB_PROVIDES = mysql + +MARIADB_DEPENDENCIES = \ + host-mariadb \ + ncurses \ + openssl \ + zlib \ + libaio \ + libxml2 + +# use bundled GPL-2.0+ licensed readline as package/readline is GPL-3.0+ +MARIADB_CONF_OPTS += -DWITH_READLINE=ON + +# We won't need unit tests +MARIADB_CONF_OPTS += -DWITH_UNIT_TESTS=0 + +# Mroonga needs libstemmer. Some work still needs to be done before it can be +# included in buildroot. Disable it for now. +MARIADB_CONF_OPTS += -DWITHOUT_MROONGA=1 + +# This value is determined automatically during straight compile by compiling +# and running a test code. You cannot do that during cross-compile. However the +# stack grows downward in most if not all modern systems. The only exception I +# am aware of is PA-RISC which is not supported by buildroot. Therefore it makes +# sense to hardcode the value. If an arch is added the stack of which grows up +# one should expect unpredictable behavior at run time. +MARIADB_CONF_OPTS += -DSTACK_DIRECTION=-1 + +# Jemalloc was added for TokuDB. Since its configure script seems somewhat broken +# when it comes to cross-compilation we shall disable it and also disable TokuDB. +MARIADB_CONF_OPTS += -DWITH_JEMALLOC=no -DWITHOUT_TOKUDB=1 + +# RocksDB fails to build in some configurations with the following build error: +# ./output/build/mariadb-10.2.17/storage/rocksdb/rocksdb/utilities/backupable/backupable_db.cc:327:38: +# error: field 'result' has incomplete type 'std::promise' +# std::promise result; +# +# To work around the issue, we disable RocksDB +MARIADB_CONF_OPTS += -DWITHOUT_ROCKSDB=1 + +# Make it explicit that we are cross-compiling +MARIADB_CONF_OPTS += -DCMAKE_CROSSCOMPILING=1 + +# Explicitly disable dtrace to avoid detection of a host version +MARIADB_CONF_OPTS += -DENABLE_DTRACE=0 + +ifeq ($(BR2_PACKAGE_MARIADB_SERVER),y) +ifeq ($(BR2_PACKAGE_MARIADB_SERVER_EMBEDDED),y) +MARIADB_CONF_OPTS += -DWITH_EMBEDDED_SERVER=ON +else +MARIADB_CONF_OPTS += -DWITH_EMBEDDED_SERVER=OFF +endif +else +MARIADB_CONF_OPTS += -DWITHOUT_SERVER=ON +endif + +MARIADB_CXXFLAGS = $(TARGET_CXXFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +MARIADB_CXXFLAGS += -latomic +endif + +MARIADB_CONF_OPTS += \ + -DCMAKE_CXX_FLAGS="$(MARIADB_CXXFLAGS)" \ + -DINSTALL_DOCDIR=share/doc/mariadb-$(MARIADB_VERSION) \ + -DINSTALL_DOCREADMEDIR=share/doc/mariadb-$(MARIADB_VERSION) \ + -DINSTALL_MANDIR=share/man \ + -DINSTALL_MYSQLSHAREDIR=share/mysql \ + -DINSTALL_MYSQLTESTDIR=share/mysql/test \ + -DINSTALL_PLUGINDIR=lib/mysql/plugin \ + -DINSTALL_SBINDIR=sbin \ + -DINSTALL_SCRIPTDIR=bin \ + -DINSTALL_SQLBENCHDIR=share/mysql/bench \ + -DINSTALL_SUPPORTFILESDIR=share/mysql \ + -DMYSQL_DATADIR=/var/lib/mysql \ + -DMYSQL_UNIX_ADDR=$(MYSQL_SOCKET) + +HOST_MARIADB_DEPENDENCIES = host-openssl +HOST_MARIADB_CONF_OPTS += -DWITH_SSL=system + +# Some helpers must be compiled for host in order to crosscompile mariadb for +# the target. They are then included by import_executables.cmake which is +# generated during the build of the host helpers. It is not necessary to build +# the whole host package, only the "import_executables" target. +# -DIMPORT_EXECUTABLES=$(HOST_MARIADB_BUILDDIR)/import_executables.cmake +# must then be passed to cmake during target build. +# see also https://mariadb.com/kb/en/mariadb/cross-compiling-mariadb/ +HOST_MARIADB_MAKE_OPTS = import_executables + +MARIADB_CONF_OPTS += \ + -DIMPORT_EXECUTABLES=$(HOST_MARIADB_BUILDDIR)/import_executables.cmake + +# Don't install host-mariadb. We just need to build import_executable +# Therefore only run 'true' and do nothing, not even the default action. +HOST_MARIADB_INSTALL_CMDS = true + +ifeq ($(BR2_PACKAGE_MARIADB_SERVER),y) +define MARIADB_USERS + mysql -1 mysql -1 * /var/lib/mysql - - MySQL Server +endef + +define MARIADB_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/mariadb/S97mysqld \ + $(TARGET_DIR)/etc/init.d/S97mysqld +endef + +define MARIADB_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/mariadb/mysqld.service \ + $(TARGET_DIR)/usr/lib/systemd/system/mysqld.service +endef +endif + +# We don't need mysql_config or mariadb_config on the target as it's +# only useful in staging. We also don't need the test suite on the target. +define MARIADB_POST_INSTALL + mkdir -p $(TARGET_DIR)/var/lib/mysql + $(RM) $(TARGET_DIR)/usr/bin/mysql_config + $(RM) $(TARGET_DIR)/usr/bin/mariadb_config + $(RM) -r $(TARGET_DIR)/usr/share/mysql/test +endef + +MARIADB_POST_INSTALL_TARGET_HOOKS += MARIADB_POST_INSTALL + +# overwrite cross-compiled mariadb_config executable by an native one +define MARIADB_POST_STAGING_INSTALL + $(HOSTCC) -I$(@D)/libmariadb/include \ + -o $(STAGING_DIR)/usr/bin/mariadb_config \ + $(@D)/libmariadb/mariadb_config/mariadb_config.c +endef +MARIADB_POST_INSTALL_STAGING_HOOKS += MARIADB_POST_STAGING_INSTALL + +$(eval $(cmake-package)) +$(eval $(host-cmake-package)) diff --git a/package/mariadb/mysqld.service b/package/mariadb/mysqld.service new file mode 100644 index 00000000..d9ea74eb --- /dev/null +++ b/package/mariadb/mysqld.service @@ -0,0 +1,14 @@ +[Unit] +Description=MySQL database server + +[Service] +ExecStartPre=/bin/sh -c 'test "`ls -1 /var/lib/mysql | wc -l`" != "0" || mysql_install_db --basedir=/usr --datadir=/var/lib/mysql && chown -R mysql:mysql /var/lib/mysql' +ExecStartPre=install -d -o mysql -g root -m 0755 /var/log/mysql +ExecStart=/usr/bin/mysqld_safe --log-error=/var/log/mysql/mysqld.log +Restart=always +User=mysql +RuntimeDirectory=mysql +RuntimeDirectoryMode=0755 + +[Install] +WantedBy=multi-user.target diff --git a/package/matchbox-common/Config.in b/package/matchbox-common/Config.in new file mode 100644 index 00000000..3717a551 --- /dev/null +++ b/package/matchbox-common/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_MATCHBOX_COMMON + bool "matchbox-common" + depends on BR2_PACKAGE_MATCHBOX_PANEL || BR2_PACKAGE_MATCHBOX_DESKTOP + select BR2_PACKAGE_MATCHBOX_LIB + help + Common desktop folders and matchbox-session script. + + http://git.yoctoproject.org/cgit/cgit.cgi/matchbox-common/ + +config BR2_PACKAGE_MATCHBOX_COMMON_PDA + bool "PDA style app folder" + depends on BR2_PACKAGE_MATCHBOX_COMMON diff --git a/package/matchbox-common/matchbox-common.hash b/package/matchbox-common/matchbox-common.hash new file mode 100644 index 00000000..b4aa42a1 --- /dev/null +++ b/package/matchbox-common/matchbox-common.hash @@ -0,0 +1,4 @@ +# From http://downloads.yoctoproject.org/releases/matchbox/matchbox-common/0.9/matchbox-common-0.9.1.tar.bz2.md5 +md5 8e8ba0ee170a9ac78fdc583b00ccf76b matchbox-common-0.9.1.tar.bz2 +# Locally computed +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/matchbox-common/matchbox-common.mk b/package/matchbox-common/matchbox-common.mk new file mode 100644 index 00000000..fd54c27e --- /dev/null +++ b/package/matchbox-common/matchbox-common.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# matchbox-common +# +################################################################################ + +MATCHBOX_COMMON_VERSION_MAJOR = 0.9 +MATCHBOX_COMMON_VERSION = $(MATCHBOX_COMMON_VERSION_MAJOR).1 +MATCHBOX_COMMON_SOURCE = matchbox-common-$(MATCHBOX_COMMON_VERSION).tar.bz2 +MATCHBOX_COMMON_SITE = http://downloads.yoctoproject.org/releases/matchbox/matchbox-common/$(MATCHBOX_COMMON_VERSION_MAJOR) +MATCHBOX_COMMON_LICENSE = GPL-2.0+ +MATCHBOX_COMMON_LICENSE_FILES = COPYING +MATCHBOX_COMMON_DEPENDENCIES = matchbox-lib + +ifeq ($(strip $(BR2_PACKAGE_MATCHBOX_COMMON_PDA)),y) +MATCHBOX_COMMON_CONF_OPTS += --enable-pda-folders +else +MATCHBOX_COMMON_CONF_OPTS += --disable-pda-folders +endif + +$(eval $(autotools-package)) diff --git a/package/matchbox-desktop/Config.in b/package/matchbox-desktop/Config.in new file mode 100644 index 00000000..9d3e522a --- /dev/null +++ b/package/matchbox-desktop/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_MATCHBOX_DESKTOP + bool "matchbox-desktop" + select BR2_PACKAGE_MATCHBOX_LIB + select BR2_PACKAGE_ZLIB + help + A PDA style application launcher or 'item browser'. + + http://git.yoctoproject.org/cgit/cgit.cgi/matchbox-desktop diff --git a/package/matchbox-desktop/matchbox-desktop.hash b/package/matchbox-desktop/matchbox-desktop.hash new file mode 100644 index 00000000..0673e8e1 --- /dev/null +++ b/package/matchbox-desktop/matchbox-desktop.hash @@ -0,0 +1,4 @@ +# From http://downloads.yoctoproject.org/releases/matchbox/matchbox-desktop/0.9/matchbox-desktop-0.9.1.tar.bz2.md5 +md5 3335a30b1a1aacfb39f23b505254765c matchbox-desktop-0.9.1.tar.bz2 +# Locally computed +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/matchbox-desktop/matchbox-desktop.mk b/package/matchbox-desktop/matchbox-desktop.mk new file mode 100644 index 00000000..9054dd80 --- /dev/null +++ b/package/matchbox-desktop/matchbox-desktop.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# matchbox-desktop +# +################################################################################ + +MATCHBOX_DESKTOP_VERSION_MAJOR = 0.9 +MATCHBOX_DESKTOP_VERSION = $(MATCHBOX_DESKTOP_VERSION_MAJOR).1 +MATCHBOX_DESKTOP_SOURCE = matchbox-desktop-$(MATCHBOX_DESKTOP_VERSION).tar.bz2 +MATCHBOX_DESKTOP_SITE = http://downloads.yoctoproject.org/releases/matchbox/matchbox-desktop/$(MATCHBOX_DESKTOP_VERSION_MAJOR) +MATCHBOX_DESKTOP_LICENSE = GPL-2.0+ +MATCHBOX_DESKTOP_LICENSE_FILES = COPYING +MATCHBOX_DESKTOP_DEPENDENCIES = matchbox-lib zlib + +# The bundled configure script does not properly replace LIBADD_DL, so +# we force an autoreconf even if we don't have any patches touching +# configure.ac/Makefile.am. +MATCHBOX_DESKTOP_AUTORECONF = YES + +ifeq ($(BR2_PACKAGE_STARTUP_NOTIFICATION),y) +MATCHBOX_DESKTOP_CONF_OPTS += --enable-startup-notification +MATCHBOX_DESKTOP_DEPENDENCIES += startup-notification +else +MATCHBOX_DESKTOP_CONF_OPTS += --disable-startup-notification +endif + +$(eval $(autotools-package)) diff --git a/package/matchbox-fakekey/Config.in b/package/matchbox-fakekey/Config.in new file mode 100644 index 00000000..0a8f6281 --- /dev/null +++ b/package/matchbox-fakekey/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_MATCHBOX_FAKEKEY + bool "matchbox-fakekey" + select BR2_PACKAGE_MATCHBOX_LIB + select BR2_PACKAGE_XLIB_LIBXTST + help + Library for simulating key press events under X11. + + http://git.yoctoproject.org/cgit/cgit.cgi/libfakekey/ diff --git a/package/matchbox-fakekey/matchbox-fakekey.hash b/package/matchbox-fakekey/matchbox-fakekey.hash new file mode 100644 index 00000000..516e0b63 --- /dev/null +++ b/package/matchbox-fakekey/matchbox-fakekey.hash @@ -0,0 +1,4 @@ +# From http://downloads.yoctoproject.org/releases/matchbox/libfakekey/0.1/libfakekey-0.1.tar.bz2.md5 +md5 83dbde4d77e8baf0176fe4291d8a2303 libfakekey-0.1.tar.bz2 +# Locally computed +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/matchbox-fakekey/matchbox-fakekey.mk b/package/matchbox-fakekey/matchbox-fakekey.mk new file mode 100644 index 00000000..e607c48c --- /dev/null +++ b/package/matchbox-fakekey/matchbox-fakekey.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# matchbox-fakekey +# +################################################################################ + +MATCHBOX_FAKEKEY_VERSION = 0.1 +MATCHBOX_FAKEKEY_SOURCE = libfakekey-$(MATCHBOX_FAKEKEY_VERSION).tar.bz2 +MATCHBOX_FAKEKEY_SITE = http://downloads.yoctoproject.org/releases/matchbox/libfakekey/$(MATCHBOX_FAKEKEY_VERSION) +MATCHBOX_FAKEKEY_LICENSE = GPL-2.0+ +MATCHBOX_FAKEKEY_LICENSE_FILES = COPYING +MATCHBOX_FAKEKEY_INSTALL_STAGING = YES +MATCHBOX_FAKEKEY_DEPENDENCIES = matchbox-lib xlib_libXtst +MATCHBOX_FAKEKEY_CONF_OPTS = --enable-expat + +define MATCHBOX_FAKEKEY_POST_CONFIGURE_FIXES + $(SED) 's:^SUBDIRS = fakekey src tests.*:SUBDIRS = fakekey src:g' \ + $(@D)/Makefile +endef + +MATCHBOX_FAKEKEY_POST_CONFIGURE_HOOKS += MATCHBOX_FAKEKEY_POST_CONFIGURE_FIXES + +$(eval $(autotools-package)) diff --git a/package/matchbox-keyboard/Config.in b/package/matchbox-keyboard/Config.in new file mode 100644 index 00000000..b6753f3b --- /dev/null +++ b/package/matchbox-keyboard/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_MATCHBOX_KEYBOARD + bool "matchbox-keyboard" + select BR2_PACKAGE_XLIB_LIBXTST + select BR2_PACKAGE_XLIB_LIBXFT if !BR2_PACKAGE_CAIRO + select BR2_PACKAGE_MATCHBOX_FAKEKEY + select BR2_PACKAGE_MATCHBOX_LIB + help + Virtual Keyboard + + http://git.yoctoproject.org/cgit/cgit.cgi/matchbox-keyboard/ diff --git a/package/matchbox-keyboard/matchbox-keyboard.hash b/package/matchbox-keyboard/matchbox-keyboard.hash new file mode 100644 index 00000000..c65fbecf --- /dev/null +++ b/package/matchbox-keyboard/matchbox-keyboard.hash @@ -0,0 +1,4 @@ +# From http://downloads.yoctoproject.org/releases/matchbox/matchbox-keyboard/0.1/matchbox-keyboard-0.1.tar.bz2.md5 +md5 50940321d59fee23b38a4941100abf25 matchbox-keyboard-0.1.tar.bz2 +# Locally computed +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/matchbox-keyboard/matchbox-keyboard.mk b/package/matchbox-keyboard/matchbox-keyboard.mk new file mode 100644 index 00000000..23ab5ad7 --- /dev/null +++ b/package/matchbox-keyboard/matchbox-keyboard.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# matchbox-keyboard +# +################################################################################ + +MATCHBOX_KEYBOARD_VERSION = 0.1 +MATCHBOX_KEYBOARD_SOURCE = matchbox-keyboard-$(MATCHBOX_KEYBOARD_VERSION).tar.bz2 +MATCHBOX_KEYBOARD_SITE = http://downloads.yoctoproject.org/releases/matchbox/matchbox-keyboard/$(MATCHBOX_KEYBOARD_VERSION) +MATCHBOX_KEYBOARD_LICENSE = GPL-2.0+ +MATCHBOX_KEYBOARD_LICENSE_FILES = COPYING +MATCHBOX_KEYBOARD_DEPENDENCIES = host-pkgconf matchbox-lib matchbox-fakekey expat + +# Workaround bug in configure script +MATCHBOX_KEYBOARD_CONF_ENV = expat=yes + +define MATCHBOX_KEYBOARD_POST_INSTALL_FIXES + $(INSTALL) -D -m 0755 package/matchbox-keyboard/mb-applet-kbd-wrapper.sh \ + $(TARGET_DIR)/usr/bin/mb-applet-kbd-wrapper.sh +endef + +MATCHBOX_KEYBOARD_POST_INSTALL_TARGET_HOOKS += MATCHBOX_KEYBOARD_POST_INSTALL_FIXES + +ifeq ($(BR2_PACKAGE_CAIRO),y) +MATCHBOX_KEYBOARD_CONF_OPTS += --enable-cairo +MATCHBOX_KEYBOARD_DEPENDENCIES += cairo +else +MATCHBOX_KEYBOARD_CONF_OPTS += --disable-cairo +MATCHBOX_KEYBOARD_DEPENDENCIES += xlib_libXft +endif + +$(eval $(autotools-package)) diff --git a/package/matchbox-keyboard/mb-applet-kbd-wrapper.sh b/package/matchbox-keyboard/mb-applet-kbd-wrapper.sh new file mode 100644 index 00000000..be202b5d --- /dev/null +++ b/package/matchbox-keyboard/mb-applet-kbd-wrapper.sh @@ -0,0 +1,8 @@ +#!/bin/sh +# + +killall matchbox-keyboard +if [ ! $? -eq 0 ] +then + matchbox-keyboard & +fi diff --git a/package/matchbox-lib/0001-index-is-legacy.patch b/package/matchbox-lib/0001-index-is-legacy.patch new file mode 100644 index 00000000..b486fb18 --- /dev/null +++ b/package/matchbox-lib/0001-index-is-legacy.patch @@ -0,0 +1,35 @@ +index() is a legacy function, not implemented in some uClibc +configurations. + +Signed-off-by: Thomas Petazzoni +--- + libmb/mbexp.c | 2 +- + libmb/mbmenu.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +Index: libmatchbox-1.9/libmb/mbexp.c +=================================================================== +--- libmatchbox-1.9.orig/libmb/mbexp.c ++++ libmatchbox-1.9/libmb/mbexp.c +@@ -492,7 +492,7 @@ + + /* get the family */ + +- if (index(spec, ',') != NULL || index(spec, '-') != NULL) ++ if (strchr(spec, ',') != NULL || strchr(spec, '-') != NULL) + has_comma_delim = True; + + while (!got_family) { +Index: libmatchbox-1.9/libmb/mbmenu.c +=================================================================== +--- libmatchbox-1.9.orig/libmb/mbmenu.c ++++ libmatchbox-1.9/libmb/mbmenu.c +@@ -433,7 +433,7 @@ + { + s = p; + found = NULL; +- while(index("/\0", *p) == NULL) p++; ++ while(strchr("/\0", *p) == NULL) p++; + if (*p != '\0') { *p = '\0'; p++; }; + + item = current->items; diff --git a/package/matchbox-lib/0002-libpng15.patch b/package/matchbox-lib/0002-libpng15.patch new file mode 100644 index 00000000..3d68573b --- /dev/null +++ b/package/matchbox-lib/0002-libpng15.patch @@ -0,0 +1,26 @@ +Support for libpng 1.5+ shamelessly taken from Gentoo. + +Signed-off-by: Gustavo Zacarias + +--- a/libmb/mbpixbuf.c ++++ b/libmb/mbpixbuf.c +@@ -247,7 +247,7 @@ + return NULL; + } + +- if ( setjmp( png_ptr->jmpbuf ) ) { ++ if ( setjmp( png_jmpbuf(png_ptr) ) ) { + png_destroy_read_struct( &png_ptr, &info_ptr, NULL); + fclose(fd); + return NULL; +@@ -269,8 +269,8 @@ + ( color_type == PNG_COLOR_TYPE_GRAY_ALPHA )) + png_set_gray_to_rgb(png_ptr); + +- if ( info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA +- || info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA ++ if ( color_type == PNG_COLOR_TYPE_RGB_ALPHA ++ || color_type == PNG_COLOR_TYPE_GRAY_ALPHA + ) + *has_alpha = 1; + else diff --git a/package/matchbox-lib/0003-include-setjmp-h.patch b/package/matchbox-lib/0003-include-setjmp-h.patch new file mode 100644 index 00000000..72e1e45d --- /dev/null +++ b/package/matchbox-lib/0003-include-setjmp-h.patch @@ -0,0 +1,17 @@ +matchbox-lib: include setjmp.h + +Based on this upstream patch: + + http://git.yoctoproject.org/cgit/cgit.cgi/libmatchbox/commit/?id=9315bcce1f01e7d6c00161442d61d3c676794d9d + +Signed-off-by: Vicente Olivert Riera +--- libmatchbox-1.9/libmb/mbpixbuf.c.orig 2014-02-21 12:45:46.867035956 +0000 ++++ libmatchbox-1.9/libmb/mbpixbuf.c 2014-02-21 12:46:43.482949583 +0000 +@@ -22,6 +22,7 @@ + + #include + #include "mbpixbuf.h" ++#include + + #define BYTE_ORD_24_RGB 0 + #define BYTE_ORD_24_RBG 1 diff --git a/package/matchbox-lib/Config.in b/package/matchbox-lib/Config.in new file mode 100644 index 00000000..98cdae73 --- /dev/null +++ b/package/matchbox-lib/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_MATCHBOX_LIB + bool "matchbox-lib" + select BR2_PACKAGE_XLIB_LIBXEXT + help + Matchbox common functionality library. + + http://git.yoctoproject.org/cgit/cgit.cgi/libmatchbox diff --git a/package/matchbox-lib/matchbox-lib.hash b/package/matchbox-lib/matchbox-lib.hash new file mode 100644 index 00000000..d48fb320 --- /dev/null +++ b/package/matchbox-lib/matchbox-lib.hash @@ -0,0 +1,4 @@ +# From http://downloads.yoctoproject.org/releases/matchbox/libmatchbox/1.9/libmatchbox-1.9.tar.bz2.md5 +md5 9f73e7515cc4679171a5db180dc1343b libmatchbox-1.9.tar.bz2 +# Locally computed +sha256 a190dc9c8043755d90f8b0a75fa66b9e42d4af4c980bf5ddc633f0124db3cee7 COPYING diff --git a/package/matchbox-lib/matchbox-lib.mk b/package/matchbox-lib/matchbox-lib.mk new file mode 100644 index 00000000..55418676 --- /dev/null +++ b/package/matchbox-lib/matchbox-lib.mk @@ -0,0 +1,59 @@ +################################################################################ +# +# matchbox-lib +# +################################################################################ + +MATCHBOX_LIB_VERSION = 1.9 +MATCHBOX_LIB_SOURCE = libmatchbox-$(MATCHBOX_LIB_VERSION).tar.bz2 +MATCHBOX_LIB_SITE = http://downloads.yoctoproject.org/releases/matchbox/libmatchbox/$(MATCHBOX_LIB_VERSION) +MATCHBOX_LIB_LICENSE = LGPL-2.1+ +MATCHBOX_LIB_LICENSE_FILES = COPYING +MATCHBOX_LIB_INSTALL_STAGING = YES +MATCHBOX_LIB_DEPENDENCIES = host-pkgconf xlib_libXext +MATCHBOX_LIB_CONF_OPTS = --disable-doxygen-docs +MATCHBOX_LIB_CONF_ENV = LIBS="-lX11" + +define MATCHBOX_LIB_POST_INSTALL_FIXES + $(SED) 's:-I$(STAGING_DIR)/:-I/:g' \ + -e 's:-I/usr/include\( \|$$\)::g' \ + $(STAGING_DIR)/usr/lib/pkgconfig/libmb.pc +endef + +MATCHBOX_LIB_POST_INSTALL_STAGING_HOOKS += MATCHBOX_LIB_POST_INSTALL_FIXES + +ifeq ($(BR2_PACKAGE_XLIB_LIBXCOMPOSITE),y) +ifeq ($(BR2_PACKAGE_XLIB_LIBXPM),y) +MATCHBOX_LIB_DEPENDENCIES += xlib_libXpm +endif +endif + +ifeq ($(BR2_PACKAGE_JPEG),y) +MATCHBOX_LIB_CONF_OPTS += --enable-jpeg +MATCHBOX_LIB_DEPENDENCIES += jpeg +else +MATCHBOX_LIB_CONF_OPTS += --disable-jpeg +endif + +ifeq ($(BR2_PACKAGE_LIBPNG),y) +MATCHBOX_LIB_CONF_OPTS += --enable-png +MATCHBOX_LIB_DEPENDENCIES += libpng +else +MATCHBOX_LIB_CONF_OPTS += --disable-png +endif + +ifeq ($(BR2_PACKAGE_PANGO)$(BR2_PACKAGE_XLIB_LIBXFT)$(BR2_PACKAGE_XLIB_LIBXRENDER),yyy) +MATCHBOX_LIB_CONF_OPTS += --enable-pango +MATCHBOX_LIB_DEPENDENCIES += pango +else +MATCHBOX_LIB_CONF_OPTS += --disable-pango +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXFT),y) +MATCHBOX_LIB_CONF_OPTS += --enable-xft +MATCHBOX_LIB_DEPENDENCIES += xlib_libXft +else +MATCHBOX_LIB_CONF_OPTS += --disable-xft +endif + +$(eval $(autotools-package)) diff --git a/package/matchbox-panel/0001-index-is-legacy.patch b/package/matchbox-panel/0001-index-is-legacy.patch new file mode 100644 index 00000000..925c326e --- /dev/null +++ b/package/matchbox-panel/0001-index-is-legacy.patch @@ -0,0 +1,20 @@ +Replace the legacy index() with strchr() + +Signed-off-by: Thomas Petazzoni +--- + applets/mb-applet-menu-launcher.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: matchbox-panel-0.9.3/applets/mb-applet-menu-launcher.c +=================================================================== +--- matchbox-panel-0.9.3.orig/applets/mb-applet-menu-launcher.c ++++ matchbox-panel-0.9.3/applets/mb-applet-menu-launcher.c +@@ -280,7 +280,7 @@ + DBG("\tkey %s ", key); + if (*(++p) == '"') { p++; tc = sc; } /* skip "'s */ + val = p; +- while(index(tc,*p) == NULL) ++ while(strchr(tc,*p) == NULL) + { + if (*p == '\\' && *(p+1) == '"') p++; /* skip \" */ + p++; diff --git a/package/matchbox-panel/0002-mb-applet-wireless.patch b/package/matchbox-panel/0002-mb-applet-wireless.patch new file mode 100644 index 00000000..93633b36 --- /dev/null +++ b/package/matchbox-panel/0002-mb-applet-wireless.patch @@ -0,0 +1,34 @@ +mb-applet-wireless: fix undefined reference to `log' and `lrint' + +mb-applet-wireless.o: In function `update_wireless': +.. matchbox-panel-0.9.3/applets/mb-applet-wireless.c:143: undefined reference to `log' +.. matchbox-panel-0.9.3/applets/mb-applet-wireless.c:143: undefined reference to `lrint' + +Signed-off-by: Jean-Paul Etienne +Signed-off-by: Arnout Vandecappelle (Essensium/Mind) +[arnout: add description and Signed-off-by] +--- +diff -rup matchbox-panel-0.9.3.orig/applets/Makefile.in matchbox-panel-0.9.3/applets/Makefile.in +--- matchbox-panel-0.9.3.orig/applets/Makefile.in 2015-01-23 00:16:47.594850985 +0100 ++++ matchbox-panel-0.9.3/applets/Makefile.in 2015-01-23 00:15:18.458694947 +0100 +@@ -198,7 +198,7 @@ WANT_SMALL_ICONS_FALSE = @WANT_SMALL_ICO + WANT_SMALL_ICONS_TRUE = @WANT_SMALL_ICONS_TRUE@ + WANT_WIFI_FALSE = @WANT_WIFI_FALSE@ + WANT_WIFI_TRUE = @WANT_WIFI_TRUE@ +-WIRELESS_LIBS = @WIRELESS_LIBS@ ++WIRELESS_LIBS = @WIRELESS_LIBS@ -lm + XGETTEXT = @XGETTEXT@ + ac_ct_CC = @ac_ct_CC@ + ac_ct_STRIP = @ac_ct_STRIP@ +diff -rup matchbox-panel-0.9.3.orig/applets/mb-applet-wireless.c matchbox-panel-0.9.3/applets/mb-applet-wireless.c +--- matchbox-panel-0.9.3.orig/applets/mb-applet-wireless.c 2015-01-23 00:16:31.531822865 +0100 ++++ matchbox-panel-0.9.3/applets/mb-applet-wireless.c 2015-01-23 00:03:43.067563827 +0100 +@@ -50,6 +50,8 @@ + + #endif + ++#include ++ + #ifdef MB_HAVE_PNG + #define IMG_EXT "png" + #else diff --git a/package/matchbox-panel/0003-mb-applet-battery.patch b/package/matchbox-panel/0003-mb-applet-battery.patch new file mode 100644 index 00000000..585eb391 --- /dev/null +++ b/package/matchbox-panel/0003-mb-applet-battery.patch @@ -0,0 +1,21 @@ +mb-applet-battery: don't declare line_parse as static + +Fix this build failure: + mb-applet-battery.c: In function 'read_apm': + mb-applet-battery.c:181:2: error: invalid storage class for function 'line_parse' + +Reported-by: Arnout Vandecappelle +Signed-off-by: "Yann E. MORIN" + +diff -durN matchbox-panel-0.9.3.orig/applets/mb-applet-battery.c matchbox-panel-0.9.3/applets/mb-applet-battery.c +--- matchbox-panel-0.9.3.orig/applets/mb-applet-battery.c 2006-02-07 23:27:24.000000000 +0100 ++++ matchbox-panel-0.9.3/applets/mb-applet-battery.c 2015-05-02 17:13:00.843578796 +0200 +@@ -177,7 +177,7 @@ + unsigned long present_rate; + }; + +- static int ++ int + line_parse(char *line, struct entry *e) + { + char *ptr; diff --git a/package/matchbox-panel/Config.in b/package/matchbox-panel/Config.in new file mode 100644 index 00000000..1fc38336 --- /dev/null +++ b/package/matchbox-panel/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_MATCHBOX_PANEL + bool "matchbox-panel" + select BR2_PACKAGE_MATCHBOX_LIB + help + A flexible always present 'window bar' for holding + application launchers. + + http://git.yoctoproject.org/cgit/cgit.cgi/matchbox-panel/ diff --git a/package/matchbox-panel/matchbox-panel.hash b/package/matchbox-panel/matchbox-panel.hash new file mode 100644 index 00000000..5e72b9ec --- /dev/null +++ b/package/matchbox-panel/matchbox-panel.hash @@ -0,0 +1,4 @@ +# From http://downloads.yoctoproject.org/releases/matchbox/matchbox-panel/0.9/matchbox-panel-0.9.3.tar.bz2.md5 +md5 56d1807636f3919e22e51896ab7ccd2e matchbox-panel-0.9.3.tar.bz2 +# Locally computed +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/matchbox-panel/matchbox-panel.mk b/package/matchbox-panel/matchbox-panel.mk new file mode 100644 index 00000000..aaa72368 --- /dev/null +++ b/package/matchbox-panel/matchbox-panel.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# matchbox-panel +# +################################################################################ + +MATCHBOX_PANEL_VERSION_MAJOR = 0.9 +MATCHBOX_PANEL_VERSION = $(MATCHBOX_PANEL_VERSION_MAJOR).3 +MATCHBOX_PANEL_SOURCE = matchbox-panel-$(MATCHBOX_PANEL_VERSION).tar.bz2 +MATCHBOX_PANEL_SITE = http://downloads.yoctoproject.org/releases/matchbox/matchbox-panel/$(MATCHBOX_PANEL_VERSION_MAJOR) +MATCHBOX_PANEL_LICENSE = GPL-2.0+ +MATCHBOX_PANEL_LICENSE_FILES = COPYING +MATCHBOX_PANEL_DEPENDENCIES = matchbox-lib $(TARGET_NLS_DEPENDENCIES) +MATCHBOX_PANEL_CONF_ENV = LIBS=$(TARGET_NLS_LIBS) +MATCHBOX_PANEL_CONF_OPTS = --enable-expat --enable-dnotify + +ifeq ($(BR2_PACKAGE_MATCHBOX_STARTUP_MONITOR),y) +MATCHBOX_PANEL_CONF_OPTS += --enable-startup-notification +MATCHBOX_PANEL_DEPENDENCIES += matchbox-startup-monitor +else +MATCHBOX_PANEL_CONF_OPTS += --disable-startup-notification +endif + +# Using ACPI is only possible on x86 (32- or 64-bit) or AArch64 +ifeq ($(BR2_aarch64)$(BR2_i386)$(BR2_x86_64),y) +MATCHBOX_PANEL_CONF_OPTS += --enable-acpi-linux +else +MATCHBOX_PANEL_CONF_OPTS += --disable-acpi-linux +endif + +ifeq ($(BR2_PACKAGE_WIRELESS_TOOLS_LIB),y) +MATCHBOX_PANEL_DEPENDENCIES += wireless_tools +endif + +$(eval $(autotools-package)) diff --git a/package/matchbox-startup-monitor/0001-true-false.patch b/package/matchbox-startup-monitor/0001-true-false.patch new file mode 100644 index 00000000..c92a0776 --- /dev/null +++ b/package/matchbox-startup-monitor/0001-true-false.patch @@ -0,0 +1,21 @@ +mbmonitor uses TRUE / FALSE without defining them + +Signed-off-by: Peter Korsgaard +--- + mbmonitor.c | 3 +++ + 1 file changed, 3 insertions(+) + +Index: mb-applet-startup-monitor-0.1/mbmonitor.c +=================================================================== +--- mb-applet-startup-monitor-0.1.orig/mbmonitor.c ++++ mb-applet-startup-monitor-0.1/mbmonitor.c +@@ -43,6 +43,9 @@ + #define POLLTIME 10 + #define HOURGLASS_N_FRAMES 8 + ++#define FALSE 0 ++#define TRUE 1 ++ + typedef struct LaunchList LaunchList; + + struct LaunchList diff --git a/package/matchbox-startup-monitor/Config.in b/package/matchbox-startup-monitor/Config.in new file mode 100644 index 00000000..be2fab4c --- /dev/null +++ b/package/matchbox-startup-monitor/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_MATCHBOX_STARTUP_MONITOR + bool "matchbox-startup-monitor" + select BR2_PACKAGE_MATCHBOX_LIB + select BR2_PACKAGE_STARTUP_NOTIFICATION + help + Matchbox Panel Startup Monitor Applet. + + http://git.yoctoproject.org/cgit.cgi/mb-applet-startup-monitor/ diff --git a/package/matchbox-startup-monitor/matchbox-startup-monitor.hash b/package/matchbox-startup-monitor/matchbox-startup-monitor.hash new file mode 100644 index 00000000..c1b5098e --- /dev/null +++ b/package/matchbox-startup-monitor/matchbox-startup-monitor.hash @@ -0,0 +1,4 @@ +# From http://downloads.yoctoproject.org/releases/matchbox/mb-applet-startup-monitor/0.1/mb-applet-startup-monitor-0.1.tar.bz2.md5 +md5 ea4b3c1ebee3f731b77a2d4bf8e9aa3c mb-applet-startup-monitor-0.1.tar.bz2 +# Locally computed +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/matchbox-startup-monitor/matchbox-startup-monitor.mk b/package/matchbox-startup-monitor/matchbox-startup-monitor.mk new file mode 100644 index 00000000..c80e7533 --- /dev/null +++ b/package/matchbox-startup-monitor/matchbox-startup-monitor.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# matchbox-startup-monitor +# +################################################################################ + +MATCHBOX_STARTUP_MONITOR_VERSION = 0.1 +MATCHBOX_STARTUP_MONITOR_SOURCE = mb-applet-startup-monitor-$(MATCHBOX_STARTUP_MONITOR_VERSION).tar.bz2 +MATCHBOX_STARTUP_MONITOR_SITE = http://downloads.yoctoproject.org/releases/matchbox/mb-applet-startup-monitor/$(MATCHBOX_STARTUP_MONITOR_VERSION) +MATCHBOX_STARTUP_MONITOR_LICENSE = GPL-2.0+ +MATCHBOX_STARTUP_MONITOR_LICENSE_FILES = COPYING +MATCHBOX_STARTUP_MONITOR_DEPENDENCIES = matchbox-lib startup-notification + +$(eval $(autotools-package)) diff --git a/package/matchbox/0001-defaulttheme.patch b/package/matchbox/0001-defaulttheme.patch new file mode 100644 index 00000000..b4da6640 --- /dev/null +++ b/package/matchbox/0001-defaulttheme.patch @@ -0,0 +1,47 @@ +[PATCH] fix mbtheme build issue when png support is disabled + +DEFAULTTHEME{,NAME} is not defined when png support is disabled, leading +to compile errors in mbtheme.c: + +mbtheme.c: In function 'show_parse_error': +mbtheme.c:2422:28: error: 'DEFAULTTHEME' undeclared (first use in this function) +mbtheme.c:2422:28: note: each undeclared identifier is reported only once for each function it appears in +mbtheme.c: In function 'mbtheme_init': +mbtheme.c:2448:30: error: 'DEFAULTTHEME' undeclared (first use in this function) +mbtheme.c:2470:25: error: 'DEFAULTTHEMENAME' undeclared (first use in this function) + +Fix it by unconditionally defining them as the values used are the same +in png / !png cases anyway. + +Signed-off-by: Peter Korsgaard +--- + src/structs.h | 9 --------- + 1 file changed, 9 deletions(-) + +Index: matchbox-window-manager-1.2/src/structs.h +=================================================================== +--- matchbox-window-manager-1.2.orig/src/structs.h ++++ matchbox-window-manager-1.2/src/structs.h +@@ -81,8 +81,6 @@ + + #define GENERIC_ICON PKGDATADIR "/mbnoapp.xpm" + +-#ifdef MB_HAVE_PNG +- + #define DEFAULT_THEME DATADIR "/themes/Default/matchbox/theme.xml" + + #define DEFAULTTHEME DATADIR "/themes/Default/matchbox/theme.xml" +@@ -91,13 +89,6 @@ + + #define DEFAULTTHEMENAME "Default" + +-#else +- +-#define DEFAULT_THEME DATADIR "/themes/Default/matchbox/theme.xml" +-#define DEFAULT_THEME_NAME "Default" +- +-#endif +- + #define CONFDEFAULTS PKGDATADIR "/defaults" + + /* Simple Macros */ diff --git a/package/matchbox/0002-src-Fix-build-with-gcc-10.patch b/package/matchbox/0002-src-Fix-build-with-gcc-10.patch new file mode 100644 index 00000000..1556c6be --- /dev/null +++ b/package/matchbox/0002-src-Fix-build-with-gcc-10.patch @@ -0,0 +1,47 @@ +From 844f61069896fe3f549ab425d731c061028f697c Mon Sep 17 00:00:00 2001 +From: Adrian Bunk +Date: Tue, 12 May 2020 09:44:05 +0300 +Subject: src: Fix build with gcc 10 + +gcc 10 enables -fno-common by default which fails without these typedefs + +Signed-off-by: Adrian Bunk +Signed-off-by: Richard Purdie + +[Retrieved from: +http://git.yoctoproject.org/cgit/cgit.cgi/matchbox-window-manager/commit/?id=844f61069896fe3f549ab425d731c061028f697c] +Signed-off-by: Fabrice Fontaine +--- + src/mbtheme.h | 2 +- + src/structs.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/mbtheme.h b/src/mbtheme.h +index aa9a7c5..ad03bde 100644 +--- a/src/mbtheme.h ++++ b/src/mbtheme.h +@@ -46,7 +46,7 @@ typedef struct _mb_theme_param + + } MBThemeParam; + +-enum { ++typedef enum { + LAYER_GRADIENT_HORIZ = 1, + LAYER_GRADIENT_VERT, + LAYER_LABEL, +diff --git a/src/structs.h b/src/structs.h +index 24985e7..8f53e72 100644 +--- a/src/structs.h ++++ b/src/structs.h +@@ -148,7 +148,7 @@ + + /* Atoms, if you change these check ewmh_init() first */ + +-enum { ++typedef enum { + WM_STATE = 0, + WM_CHANGE_STATE, + WM_PROTOCOLS, +-- +cgit v1.2.2-1-g5e49 + diff --git a/package/matchbox/Config.in b/package/matchbox/Config.in new file mode 100644 index 00000000..9d212902 --- /dev/null +++ b/package/matchbox/Config.in @@ -0,0 +1,35 @@ +menuconfig BR2_PACKAGE_MATCHBOX + bool "matchbox" + depends on BR2_PACKAGE_XORG7 + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_FONTCONFIG + select BR2_PACKAGE_EXPAT + select BR2_PACKAGE_MATCHBOX_LIB + help + Matchbox is an Open Source base environment for the X Window + System running on non-desktop embedded platforms such as + handhelds, set-top boxes, kiosks and anything else for which + screen space, input mechanisms or system resources are + limited. + + https://www.yoctoproject.org/tools-resources/projects/matchbox + +if BR2_PACKAGE_MATCHBOX + +config BR2_PACKAGE_MATCHBOX_SM + bool "session manager" + select BR2_PACKAGE_XLIB_LIBSM + help + Enable support for the Session Manager. + +comment "matchbox utilities" + +source "package/matchbox-common/Config.in" +source "package/matchbox-desktop/Config.in" +source "package/matchbox-fakekey/Config.in" +source "package/matchbox-keyboard/Config.in" +source "package/matchbox-lib/Config.in" +source "package/matchbox-panel/Config.in" +source "package/matchbox-startup-monitor/Config.in" + +endif diff --git a/package/matchbox/matchbox.hash b/package/matchbox/matchbox.hash new file mode 100644 index 00000000..fdb8f7d1 --- /dev/null +++ b/package/matchbox/matchbox.hash @@ -0,0 +1,6 @@ +# From http://downloads.yoctoproject.org/releases/matchbox/matchbox-window-manager/1.2/matchbox-window-manager-1.2.tar.bz2.md5 +md5 3e158dcf57823b55c926d95b245500fb matchbox-window-manager-1.2.tar.bz2 + +# Locally computed +sha256 81a23a4af797cf350759fd5ac738797015a66dd5dba2f3d9f3c6908506c1ceff matchbox-window-manager-1.2.tar.bz2 +sha256 231f7edcc7352d7734a96eef0b8030f77982678c516876fcb81e25b32d68564c COPYING diff --git a/package/matchbox/matchbox.mk b/package/matchbox/matchbox.mk new file mode 100644 index 00000000..4d30a42c --- /dev/null +++ b/package/matchbox/matchbox.mk @@ -0,0 +1,46 @@ +################################################################################ +# +# matchbox +# +################################################################################ + +MATCHBOX_VERSION = 1.2 +MATCHBOX_SOURCE = matchbox-window-manager-$(MATCHBOX_VERSION).tar.bz2 +MATCHBOX_SITE = http://downloads.yoctoproject.org/releases/matchbox/matchbox-window-manager/$(MATCHBOX_VERSION) +MATCHBOX_LICENSE = GPL-2.0+ +MATCHBOX_LICENSE_FILES = COPYING + +MATCHBOX_DEPENDENCIES = expat matchbox-lib +MATCHBOX_CONF_OPTS = \ + --enable-expat \ + --disable-gconf \ + --disable-composite \ + --disable-standalone \ + --disable-standalone-xft + +# Workaround bug in configure script +MATCHBOX_CONF_ENV = expat=yes + +ifeq ($(BR2_PACKAGE_STARTUP_NOTIFICATION),y) +MATCHBOX_CONF_OPTS += --enable-startup-notification +MATCHBOX_DEPENDENCIES += startup-notification +else +MATCHBOX_CONF_OPTS += --disable-startup-notification +endif + +ifeq ($(BR2_PACKAGE_MATCHBOX_SM),y) +MATCHBOX_CONF_OPTS += --enable-session +MATCHBOX_DEPENDENCIES += xlib_libSM +else +MATCHBOX_CONF_OPTS += --disable-session +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXCURSOR),y) +MATCHBOX_DEPENDENCIES += xlib_libXcursor +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXFIXES),y) +MATCHBOX_DEPENDENCIES += xlib_libXfixes +endif + +$(eval $(autotools-package)) diff --git a/package/matio/Config.in b/package/matio/Config.in new file mode 100644 index 00000000..9e2ea680 --- /dev/null +++ b/package/matio/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_MATIO + bool "matio" + select BR2_PACKAGE_ZLIB + help + matio is an C library for reading and writing MATLAB MAT + files. + + https://sourceforge.net/projects/matio diff --git a/package/matio/matio.hash b/package/matio/matio.hash new file mode 100644 index 00000000..55e57338 --- /dev/null +++ b/package/matio/matio.hash @@ -0,0 +1,4 @@ +# From https://sourceforge.net/projects/matio/files/matio/1.5.18/ +sha512 c43e562a101348d64139a056f28bce37c59c6667d701200255ccf9d8b6adf7a92ae9c11c8d921ec8a652cdc81c5de9ab247907279c54c52905adfd65bc3fb90f matio-1.5.18.tar.gz +# Locally computed +sha256 19494e9c9154a5e3f834e99d65fab0653b84280df7c98d1886a98d2bd28369c1 COPYING diff --git a/package/matio/matio.mk b/package/matio/matio.mk new file mode 100644 index 00000000..0ebba134 --- /dev/null +++ b/package/matio/matio.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# matio +# +################################################################################ + +MATIO_VERSION = 1.5.18 +MATIO_SITE = http://downloads.sourceforge.net/project/matio/matio/$(MATIO_VERSION) +MATIO_LICENSE = BSD-2-Clause +MATIO_LICENSE_FILES = COPYING +MATIO_CPE_ID_VENDOR = matio_project +MATIO_DEPENDENCIES = zlib +MATIO_INSTALL_STAGING = YES + +# va_copy() +MATIO_CONF_ENV = ac_cv_va_copy=yes + +# mat73 require hdf5 (not available), extented-sparse take 2KB +MATIO_CONF_OPTS = --disable-mat73 --enable-extended-sparse + +$(eval $(autotools-package)) diff --git a/package/mbedtls/0001-bn_mul.h-fix-x86-PIC-inline-ASM-compilation-with-GCC.patch b/package/mbedtls/0001-bn_mul.h-fix-x86-PIC-inline-ASM-compilation-with-GCC.patch new file mode 100644 index 00000000..60bf53f6 --- /dev/null +++ b/package/mbedtls/0001-bn_mul.h-fix-x86-PIC-inline-ASM-compilation-with-GCC.patch @@ -0,0 +1,74 @@ +From a0ae2ba37ca479c6edddec8634b25686be965e0d Mon Sep 17 00:00:00 2001 +From: Peter Korsgaard +Date: Mon, 27 Aug 2018 22:50:57 +0200 +Subject: [PATCH] bn_mul.h: fix x86 PIC inline ASM compilation with GCC < 5 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Fixes #1910 + +With ebx added to the MULADDC_STOP clobber list to fix #1550, the inline +assembly fails to build with GCC < 5 in PIC mode with the following error: + +include/mbedtls/bn_mul.h:46:13: error: PIC register clobbered by ‘ebx’ in ‘asm’ + +This is because older GCC versions treated the x86 ebx register (which is +used for the GOT) as a fixed reserved register when building as PIC. + +This is fixed by an improved register allocator in GCC 5+. From the release +notes: + +Register allocation improvements: Reuse of the PIC hard register, instead of +using a fixed register, was implemented on x86/x86-64 targets. This +improves generated PIC code performance as more hard registers can be used. + +https://www.gnu.org/software/gcc/gcc-5/changes.html + +As a workaround, detect this situation and disable the inline assembly, +similar to the MULADDC_CANNOT_USE_R7 logic. + +Signed-off-by: Peter Korsgaard +Upstream: https://github.com/ARMmbed/mbedtls/pull/1986 +--- + include/mbedtls/bn_mul.h | 18 +++++++++++++++++- + 1 file changed, 17 insertions(+), 1 deletion(-) + +diff --git a/include/mbedtls/bn_mul.h b/include/mbedtls/bn_mul.h +index b587317d9..74a2d29be 100644 +--- a/include/mbedtls/bn_mul.h ++++ b/include/mbedtls/bn_mul.h +@@ -50,13 +50,29 @@ + #if defined(__GNUC__) && \ + ( !defined(__ARMCC_VERSION) || __ARMCC_VERSION >= 6000000 ) + ++/* ++ * GCC < 5.0 treated the x86 ebx (which is used for the GOT) as a ++ * fixed reserved register when building as PIC, leading to errors ++ * like: bn_mul.h:46:13: error: PIC register clobbered by ‘ebx’ in ‘asm’ ++ * ++ * This is fixed by an improved register allocator in GCC 5+. From the ++ * release notes: ++ * Register allocation improvements: Reuse of the PIC hard register, ++ * instead of using a fixed register, was implemented on x86/x86-64 ++ * targets. This improves generated PIC code performance as more hard ++ * registers can be used. ++ */ ++#if defined(__GNUC__) && __GNUC__ < 5 && defined(__PIC__) ++#define MULADDC_CANNOT_USE_EBX ++#endif ++ + /* + * Disable use of the i386 assembly code below if option -O0, to disable all + * compiler optimisations, is passed, detected with __OPTIMIZE__ + * This is done as the number of registers used in the assembly code doesn't + * work with the -O0 option. + */ +-#if defined(__i386__) && defined(__OPTIMIZE__) ++#if defined(__i386__) && defined(__OPTIMIZE__) && !defined(MULADDC_CANNOT_USE_EBX) + + #define MULADDC_INIT \ + asm( \ +-- +2.11.0 + diff --git a/package/mbedtls/Config.in b/package/mbedtls/Config.in new file mode 100644 index 00000000..a39ba65d --- /dev/null +++ b/package/mbedtls/Config.in @@ -0,0 +1,32 @@ +config BR2_PACKAGE_MBEDTLS + bool "mbedtls" + help + mbed TLS (formerly known as PolarSSL) makes it trivially easy + for developers to include cryptographic and SSL/TLS + capabilities in their (embedded) products, facilitating this + functionality with a minimal coding footprint. + + https://tls.mbed.org/ + +if BR2_PACKAGE_MBEDTLS + +config BR2_PACKAGE_MBEDTLS_PROGRAMS + bool "mbedtls programs" + depends on BR2_USE_MMU # fork() + help + This option enables the installation and the build of + mbed TLS companion programs. + +config BR2_PACKAGE_MBEDTLS_COMPRESSION + bool "enable compression support" + select BR2_PACKAGE_ZLIB + help + Enable support for compression of the content data before it + enters the secure channel as described in RFC 3749. + + Warning: TLS compression may make you vulnerable to the + CRIME attack. You should not enable it unless you know for + sure CRIME and similar attacks are not applicable to your + particular situation. + +endif diff --git a/package/mbedtls/mbedtls.hash b/package/mbedtls/mbedtls.hash new file mode 100644 index 00000000..b93da164 --- /dev/null +++ b/package/mbedtls/mbedtls.hash @@ -0,0 +1,4 @@ +# From https://github.com/ARMmbed/mbedtls/releases/tag/v2.16.11: +sha256 c18e7e9abf95e69e425260493720470021384a1728417042060a35d0b7b18b41 mbedtls-2.16.11.tar.gz +# Locally calculated +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 apache-2.0.txt diff --git a/package/mbedtls/mbedtls.mk b/package/mbedtls/mbedtls.mk new file mode 100644 index 00000000..9207daf1 --- /dev/null +++ b/package/mbedtls/mbedtls.mk @@ -0,0 +1,73 @@ +################################################################################ +# +# mbedtls +# +################################################################################ + +MBEDTLS_VERSION = 2.16.11 +MBEDTLS_SITE = $(call github,ARMmbed,mbedtls,v$(MBEDTLS_VERSION)) +MBEDTLS_CONF_OPTS = \ + -DENABLE_PROGRAMS=$(if $(BR2_PACKAGE_MBEDTLS_PROGRAMS),ON,OFF) \ + -DENABLE_TESTING=OFF +MBEDTLS_INSTALL_STAGING = YES +MBEDTLS_LICENSE = Apache-2.0 +MBEDTLS_LICENSE_FILES = apache-2.0.txt +MBEDTLS_CPE_ID_VENDOR = arm +MBEDTLS_CPE_ID_PRODUCT = mbed_tls + +# This is mandatory for hiawatha +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +define MBEDTLS_ENABLE_THREADING + $(SED) "s://#define MBEDTLS_THREADING_C:#define MBEDTLS_THREADING_C:" \ + $(@D)/include/mbedtls/config.h + $(SED) "s://#define MBEDTLS_THREADING_PTHREAD:#define MBEDTLS_THREADING_PTHREAD:" \ + $(@D)/include/mbedtls/config.h +endef +MBEDTLS_POST_PATCH_HOOKS += MBEDTLS_ENABLE_THREADING +ifeq ($(BR2_STATIC_LIBS),y) +MBEDTLS_CONF_OPTS += -DLINK_WITH_PTHREAD=ON +endif +endif + +ifeq ($(BR2_STATIC_LIBS),y) +MBEDTLS_CONF_OPTS += \ + -DUSE_SHARED_MBEDTLS_LIBRARY=OFF -DUSE_STATIC_MBEDTLS_LIBRARY=ON +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +MBEDTLS_CONF_OPTS += \ + -DUSE_SHARED_MBEDTLS_LIBRARY=ON -DUSE_STATIC_MBEDTLS_LIBRARY=ON +else ifeq ($(BR2_SHARED_LIBS),y) +MBEDTLS_CONF_OPTS += \ + -DUSE_SHARED_MBEDTLS_LIBRARY=ON -DUSE_STATIC_MBEDTLS_LIBRARY=OFF +endif + +ifeq ($(BR2_PACKAGE_MBEDTLS_COMPRESSION),y) +MBEDTLS_CONF_OPTS += -DENABLE_ZLIB_SUPPORT=ON +MBEDTLS_DEPENDENCIES += zlib +define MBEDTLS_ENABLE_ZLIB + $(SED) "s://#define MBEDTLS_ZLIB_SUPPORT:#define MBEDTLS_ZLIB_SUPPORT:" \ + $(@D)/include/mbedtls/config.h +endef +MBEDTLS_POST_PATCH_HOOKS += MBEDTLS_ENABLE_ZLIB +else +MBEDTLS_CONF_OPTS += -DENABLE_ZLIB_SUPPORT=OFF +endif + +define MBEDTLS_DISABLE_ASM + $(SED) '/^#define MBEDTLS_AESNI_C/d' \ + $(@D)/include/mbedtls/config.h + $(SED) '/^#define MBEDTLS_HAVE_ASM/d' \ + $(@D)/include/mbedtls/config.h + $(SED) '/^#define MBEDTLS_PADLOCK_C/d' \ + $(@D)/include/mbedtls/config.h +endef + +# ARM in thumb mode breaks debugging with asm optimizations +# Microblaze asm optimizations are broken in general +# MIPS R6 asm is not yet supported +ifeq ($(BR2_ENABLE_DEBUG)$(BR2_ARM_INSTRUCTIONS_THUMB)$(BR2_ARM_INSTRUCTIONS_THUMB2),yy) +MBEDTLS_POST_CONFIGURE_HOOKS += MBEDTLS_DISABLE_ASM +else ifeq ($(BR2_microblaze)$(BR2_MIPS_CPU_MIPS32R6)$(BR2_MIPS_CPU_MIPS64R6),y) +MBEDTLS_POST_CONFIGURE_HOOKS += MBEDTLS_DISABLE_ASM +endif + +$(eval $(cmake-package)) diff --git a/package/mbpfan/Config.in b/package/mbpfan/Config.in new file mode 100644 index 00000000..231faa2b --- /dev/null +++ b/package/mbpfan/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_MBPFAN + bool "mbpfan" + depends on BR2_USE_MMU + help + Mbpfan is a daemon for MacBook laptops which monitors the + CPU temperature with the coretemp module, and sets the fan + speeds with the applesmc module. + + https://github.com/linux-on-mac/mbpfan diff --git a/package/mbpfan/mbpfan.hash b/package/mbpfan/mbpfan.hash new file mode 100644 index 00000000..eafd313b --- /dev/null +++ b/package/mbpfan/mbpfan.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 52a3a79d99f775fe90917a0958e527ea14ff5b83d010164bd91f7cc3ce046b6a mbpfan-2.2.1.tar.gz +sha256 589ed823e9a84c56feb95ac58e7cf384626b9cbf4fda2a907bc36e103de1bad2 COPYING diff --git a/package/mbpfan/mbpfan.mk b/package/mbpfan/mbpfan.mk new file mode 100644 index 00000000..2455b0a4 --- /dev/null +++ b/package/mbpfan/mbpfan.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# mbpfan +# +################################################################################ + +MBPFAN_VERSION = 2.2.1 +MBPFAN_SITE = $(call github,linux-on-mac,mbpfan,v$(MBPFAN_VERSION)) +MBPFAN_LICENSE = GPL-3.0+ +MBPFAN_LICENSE_FILES = COPYING + +define MBPFAN_BUILD_CMDS + $(TARGET_MAKE_ENV) CFLAGS="$(TARGET_CFLAGS)" \ + LDFLAGS="$(TARGET_LDFLAGS)" \ + $(MAKE) CC="$(TARGET_CC)" -C $(@D) +endef + +define MBPFAN_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0644 $(@D)/mbpfan.conf \ + $(TARGET_DIR)/etc/mbpfan.conf + $(INSTALL) -m 0755 $(@D)/bin/mbpfan $(TARGET_DIR)/usr/sbin/mbpfan +endef + +define MBPFAN_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 $(@D)/mbpfan.service \ + $(TARGET_DIR)/usr/lib/systemd/system/mbpfan.service +endef + +$(eval $(generic-package)) diff --git a/package/mbuffer/Config.in b/package/mbuffer/Config.in new file mode 100644 index 00000000..2c0b24d1 --- /dev/null +++ b/package/mbuffer/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_MBUFFER + bool "mbuffer" + depends on !BR2_STATIC_LIBS # dlopen() + depends on BR2_TOOLCHAIN_HAS_THREADS + help + mbuffer is a tool for buffering data streams with a large set + of unique features. + + http://www.maier-komor.de/mbuffer.html + +comment "mbuffer needs a toolchain w/ dynamic library, threads" + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/mbuffer/mbuffer.hash b/package/mbuffer/mbuffer.hash new file mode 100644 index 00000000..73a8d3cf --- /dev/null +++ b/package/mbuffer/mbuffer.hash @@ -0,0 +1,8 @@ +# From http://www.maier-komor.de/mbuffer.html +md5 e2b4f3b0d0944c08d52c167841bde3c0 mbuffer-20200929.tgz + +# Locally computed after checking signature upstream +sha256 53a6e3c14e9a049f18a09840653dd84f18e7ec7560f2dcf2b61c0ab5f0ead4e8 mbuffer-20200929.tgz + +# Hash for license file +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE diff --git a/package/mbuffer/mbuffer.mk b/package/mbuffer/mbuffer.mk new file mode 100644 index 00000000..90a72ce6 --- /dev/null +++ b/package/mbuffer/mbuffer.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# mbuffer +# +################################################################################ + +MBUFFER_VERSION = 20200929 +MBUFFER_SOURCE = mbuffer-$(MBUFFER_VERSION).tgz +MBUFFER_SITE = http://www.maier-komor.de/software/mbuffer +MBUFFER_LICENSE = GPL-3.0+ +MBUFFER_LICENSE_FILES = LICENSE +MBUFFER_CONF_OPTS = --disable-debug + +# we don't need tests & co. so we specify a target +# so that the others don't get built, e.g idev.so +MBUFFER_MAKE_OPTS += mbuffer + +$(eval $(autotools-package)) diff --git a/package/mc/Config.in b/package/mc/Config.in new file mode 100644 index 00000000..61f351c4 --- /dev/null +++ b/package/mc/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_MC + bool "mc" + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2, slang + select BR2_PACKAGE_LIBGLIB2 + # mc prefers slang, but can use ncurses too + select BR2_PACKAGE_SLANG if !BR2_PACKAGE_NCURSES + help + GNU Midnight Commander is a visual file manager, licensed + under GNU General Public License. It can use either SLang + (preferred) or ncurses for screen handling; if neither is + enabled SLang will be automatically chosen. + + https://www.midnight-commander.org + +comment "mc needs a toolchain w/ threads, wchar" + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR + depends on BR2_USE_MMU diff --git a/package/mc/mc.hash b/package/mc/mc.hash new file mode 100644 index 00000000..208d0bed --- /dev/null +++ b/package/mc/mc.hash @@ -0,0 +1,4 @@ +# Hash from http://ftp.midnight-commander.org/mc-4.8.25.sha256 +sha256 ffc19617f20ebb23330acd3998b7fd559a042d172fa55746d53d246697b2548a mc-4.8.25.tar.xz +# sha256 locally computed: +sha256 5576bbec76296e1c8e081f7037ebd01bdada388635f58d844a2f20d37bbe4284 COPYING diff --git a/package/mc/mc.mk b/package/mc/mc.mk new file mode 100644 index 00000000..00f34f81 --- /dev/null +++ b/package/mc/mc.mk @@ -0,0 +1,47 @@ +################################################################################ +# +# mc +# +################################################################################ + +MC_VERSION = 4.8.25 +MC_SOURCE = mc-$(MC_VERSION).tar.xz +MC_SITE = http://ftp.midnight-commander.org +MC_LICENSE = GPL-3.0+ +MC_LICENSE_FILES = COPYING +MC_DEPENDENCIES = libglib2 host-pkgconf $(TARGET_NLS_DEPENDENCIES) +MC_CONF_ENV = LIBS=$(TARGET_NLS_LIBS) + +ifeq ($(BR2_PACKAGE_GPM),y) +MC_CONF_OPTS += --with-gpm-mouse +MC_DEPENDENCIES += gpm +else +MC_CONF_OPTS += --without-gpm-mouse +endif + +ifeq ($(BR2_PACKAGE_LIBSSH2),y) +MC_CONF_OPTS += --enable-vfs-sftp +MC_DEPENDENCIES += libssh2 +else +MC_CONF_OPTS += --disable-vfs-sftp +endif + +# mc prefers slang, so use that if enabled, otherwise +# fallback to using ncurses. +# Either or both will be enabled, but we prefer slang. +ifeq ($(BR2_PACKAGE_SLANG),y) +MC_DEPENDENCIES += slang +MC_CONF_OPTS += --with-screen=slang +else +MC_DEPENDENCIES += ncurses +MC_CONF_OPTS += --with-screen=ncurses +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBX11),y) +MC_CONF_OPTS += --with-x +MC_DEPENDENCIES += xlib_libX11 +else +MC_CONF_OPTS += --without-x +endif + +$(eval $(autotools-package)) diff --git a/package/mcelog/Config.in b/package/mcelog/Config.in new file mode 100644 index 00000000..55ebb7c8 --- /dev/null +++ b/package/mcelog/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_MCELOG + bool "mcelog" + depends on BR2_i386 || BR2_x86_64 + depends on BR2_USE_MMU # fork() + help + mcelog processes machine checks (in particular memory and + CPU hardware errors) on modern x86 Linux systems. + + http://www.mcelog.org/ diff --git a/package/mcelog/mcelog.hash b/package/mcelog/mcelog.hash new file mode 100644 index 00000000..49f29e24 --- /dev/null +++ b/package/mcelog/mcelog.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 d21dfddaaa8e6f4ebd59ce353165c8d8079d0d5ed563492a0415af2248d8b3a5 mcelog-172.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE diff --git a/package/mcelog/mcelog.mk b/package/mcelog/mcelog.mk new file mode 100644 index 00000000..92458254 --- /dev/null +++ b/package/mcelog/mcelog.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# mcelog +# +################################################################################ + +MCELOG_VERSION = 172 +MCELOG_SITE = $(call github,andikleen,mcelog,v$(MCELOG_VERSION)) +MCELOG_LICENSE = GPL-2.0 +MCELOG_LICENSE_FILES = LICENSE +MCELOG_SELINUX_MODULES = mcelog + +define MCELOG_BUILD_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) all +endef + +define MCELOG_INSTALL_TARGET_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +define MCELOG_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0644 $(@D)/mcelog.service \ + $(TARGET_DIR)/usr/lib/systemd/system/mcelog.service +endef + +$(eval $(generic-package)) diff --git a/package/mcrypt/0001-CVE-2012-4409.patch b/package/mcrypt/0001-CVE-2012-4409.patch new file mode 100644 index 00000000..97c658bb --- /dev/null +++ b/package/mcrypt/0001-CVE-2012-4409.patch @@ -0,0 +1,25 @@ +From 3efb40e17ce4f76717ae17a1ce1e1f747ddf59fd Mon Sep 17 00:00:00 2001 +From: Alon Bar-Lev +Date: Sat, 22 Dec 2012 22:37:06 +0200 +Subject: [PATCH] cleanup: buffer overflow + +--- + src/extra.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/src/extra.c b/src/extra.c +index 3082f82..c7a1ac0 100644 +--- a/src/extra.c ++++ b/src/extra.c +@@ -241,6 +241,8 @@ int check_file_head(FILE * fstream, char *algorithm, char *mode, + if (m_getbit(6, flags) == 1) { /* if the salt bit is set */ + if (m_getbit(0, sflag) != 0) { /* if the first bit is set */ + *salt_size = m_setbit(0, sflag, 0); ++ if (*salt_size > sizeof(tmp_buf)) ++ err_quit(_("Salt is too long\n")); + if (*salt_size > 0) { + fread(tmp_buf, 1, *salt_size, + fstream); +-- +1.7.8.6 + diff --git a/package/mcrypt/0002-CVE-2012-4426.patch b/package/mcrypt/0002-CVE-2012-4426.patch new file mode 100644 index 00000000..708d4a57 --- /dev/null +++ b/package/mcrypt/0002-CVE-2012-4426.patch @@ -0,0 +1,35 @@ +Patch taken from gentoo. + +Signed-off-by: Gustavo Zacarias + +--- a/src/errors.c ++++ b/src/errors.c +@@ -25,24 +25,24 @@ + + void err_quit(char *errmsg) + { +- fprintf(stderr, errmsg); ++ fprintf(stderr, "%s", errmsg); + exit(-1); + } + + void err_warn(char *errmsg) + { + if (quiet <= 1) +- fprintf(stderr, errmsg); ++ fprintf(stderr, "%s", errmsg); + } + + void err_info(char *errmsg) + { + if (quiet == 0) +- fprintf(stderr, errmsg); ++ fprintf(stderr, "%s", errmsg); + } + + void err_crit(char *errmsg) + { + if (quiet <= 2) +- fprintf(stderr, errmsg); ++ fprintf(stderr, "%s", errmsg); + } diff --git a/package/mcrypt/0003-CVE-2012-4527.patch b/package/mcrypt/0003-CVE-2012-4527.patch new file mode 100644 index 00000000..a8cf6f44 --- /dev/null +++ b/package/mcrypt/0003-CVE-2012-4527.patch @@ -0,0 +1,99 @@ +Fix for CVE-2012-4527. +Authored by Attila Bogar and Jean-Michel Vourgère + +Signed-off-by: Gustavo Zacarias + +diff -Nura mcrypt-2.6.8.orig/src/mcrypt.c mcrypt-2.6.8/src/mcrypt.c +--- mcrypt-2.6.8.orig/src/mcrypt.c 2013-01-14 19:15:49.465925072 -0300 ++++ mcrypt-2.6.8/src/mcrypt.c 2013-01-14 19:28:13.711478000 -0300 +@@ -44,7 +44,9 @@ + static char rcsid[] = + "$Id: mcrypt.c,v 1.2 2007/11/07 17:10:21 nmav Exp $"; + +-char tmperr[128]; ++/* Temporary error message can contain one file name and 1k of text */ ++#define ERRWIDTH ((PATH_MAX)+1024) ++char tmperr[ERRWIDTH]; + unsigned int stream_flag = FALSE; + char *keymode = NULL; + char *mode = NULL; +@@ -482,7 +484,7 @@ + #ifdef HAVE_STAT + if (stream_flag == FALSE) { + if (is_normal_file(file[i]) == FALSE) { +- sprintf(tmperr, ++ snprintf(tmperr, ERRWIDTH, + _ + ("%s: %s is not a regular file. Skipping...\n"), + program_name, file[i]); +@@ -501,7 +503,7 @@ + dinfile = file[i]; + if ((isatty(fileno((FILE *) (stdin))) == 1) + && (stream_flag == TRUE) && (force == 0)) { /* not a tty */ +- sprintf(tmperr, ++ snprintf(tmperr, ERRWIDTH, + _ + ("%s: Encrypted data will not be read from a terminal.\n"), + program_name); +@@ -520,7 +522,7 @@ + einfile = file[i]; + if ((isatty(fileno((FILE *) (stdout))) == 1) + && (stream_flag == TRUE) && (force == 0)) { /* not a tty */ +- sprintf(tmperr, ++ snprintf(tmperr, ERRWIDTH, + _ + ("%s: Encrypted data will not be written to a terminal.\n"), + program_name); +@@ -544,7 +546,7 @@ + strcpy(outfile, einfile); + /* if file has already the .nc ignore it */ + if (strstr(outfile, ".nc") != NULL) { +- sprintf(tmperr, ++ snprintf(tmperr, ERRWIDTH, + _ + ("%s: file %s has the .nc suffix... skipping...\n"), + program_name, outfile); +@@ -590,10 +592,10 @@ + + if (x == 0) { + if (stream_flag == FALSE) { +- sprintf(tmperr, _("File %s was decrypted.\n"), dinfile); ++ snprintf(tmperr, ERRWIDTH, _("File %s was decrypted.\n"), dinfile); + err_warn(tmperr); + } else { +- sprintf(tmperr, _("Stdin was decrypted.\n")); ++ snprintf(tmperr, ERRWIDTH, _("Stdin was decrypted.\n")); + err_warn(tmperr); + } + #ifdef HAVE_STAT +@@ -610,7 +612,7 @@ + + } else { + if (stream_flag == FALSE) { +- sprintf(tmperr, ++ snprintf(tmperr, ERRWIDTH, + _ + ("File %s was NOT decrypted successfully.\n"), + dinfile); +@@ -636,10 +638,10 @@ + + if (x == 0) { + if (stream_flag == FALSE) { +- sprintf(tmperr, _("File %s was encrypted.\n"), einfile); ++ snprintf(tmperr, ERRWIDTH, _("File %s was encrypted.\n"), einfile); + err_warn(tmperr); + } else { +- sprintf(tmperr, _("Stdin was encrypted.\n")); ++ snprintf(tmperr, ERRWIDTH, _("Stdin was encrypted.\n")); + err_warn(tmperr); + } + #ifdef HAVE_STAT +@@ -655,7 +657,7 @@ + + } else { + if (stream_flag == FALSE) { +- sprintf(tmperr, ++ snprintf(tmperr, ERRWIDTH, + _ + ("File %s was NOT encrypted successfully.\n"), + einfile); diff --git a/package/mcrypt/0004-no-rpath.patch b/package/mcrypt/0004-no-rpath.patch new file mode 100644 index 00000000..a0813bcf --- /dev/null +++ b/package/mcrypt/0004-no-rpath.patch @@ -0,0 +1,17 @@ +Patch out rpath hardcoding since it completely ignores --disable-rpath +and other configure ways. + +Signed-off-by: Gustavo Zacarias + +diff -Nura mcrypt-2.6.8.orig/config.rpath mcrypt-2.6.8/config.rpath +--- mcrypt-2.6.8.orig/config.rpath 2013-01-07 13:05:22.626883480 -0300 ++++ mcrypt-2.6.8/config.rpath 2013-01-07 13:12:47.196090608 -0300 +@@ -153,7 +153,7 @@ + # here allows them to be overridden if necessary. + # Unlike libtool, we use -rpath here, not --rpath, since the documented + # option of GNU ld is called -rpath, not --rpath. +- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' ++ hardcode_libdir_flag_spec= + case "$host_os" in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken diff --git a/package/mcrypt/Config.in b/package/mcrypt/Config.in new file mode 100644 index 00000000..e3b9541f --- /dev/null +++ b/package/mcrypt/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_MCRYPT + bool "mcrypt" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBMCRYPT + select BR2_PACKAGE_LIBMHASH + help + MCrypt is a replacement for the old crypt() package and + crypt(1) command, with extensions. + It allows developers to use a wide range of encryption + functions, without making drastic changes to their code. + + http://mcrypt.sourceforge.net/ diff --git a/package/mcrypt/mcrypt.hash b/package/mcrypt/mcrypt.hash new file mode 100644 index 00000000..c6c8871f --- /dev/null +++ b/package/mcrypt/mcrypt.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 5145aa844e54cca89ddab6fb7dd9e5952811d8d787c4f4bf27eb261e6c182098 mcrypt-2.6.8.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/mcrypt/mcrypt.mk b/package/mcrypt/mcrypt.mk new file mode 100644 index 00000000..a04b9737 --- /dev/null +++ b/package/mcrypt/mcrypt.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# mcrypt +# +################################################################################ + +MCRYPT_VERSION = 2.6.8 +MCRYPT_SITE = http://downloads.sourceforge.net/project/mcrypt/MCrypt/$(MCRYPT_VERSION) +MCRYPT_DEPENDENCIES = libmcrypt libmhash \ + $(if $(BR2_PACKAGE_ZLIB),zlib) \ + $(if $(BR2_PACKAGE_LIBICONV),libiconv) \ + $(TARGET_NLS_DEPENDENCIES) +MCRYPT_CONF_OPTS = --with-libmcrypt-prefix=$(STAGING_DIR)/usr +MCRYPT_LICENSE = GPL-3.0 +MCRYPT_LICENSE_FILES = COPYING + +# 0001-CVE-2012-4409.patch +MCRYPT_IGNORE_CVES += CVE-2012-4409 +# 0002-CVE-2012-4426.patch +MCRYPT_IGNORE_CVES += CVE-2012-4426 +# 0003-CVE-2012-4527.patch +MCRYPT_IGNORE_CVES += CVE-2012-4527 + +$(eval $(autotools-package)) diff --git a/package/mdadm/0001-add-install-targets-for-mdadm-and-mdmon.patch b/package/mdadm/0001-add-install-targets-for-mdadm-and-mdmon.patch new file mode 100644 index 00000000..15df7557 --- /dev/null +++ b/package/mdadm/0001-add-install-targets-for-mdadm-and-mdmon.patch @@ -0,0 +1,32 @@ +From a1a9243671b1e23123f57e879890325154b8e00d Mon Sep 17 00:00:00 2001 +From: Christophe Vu-Brugier +Date: Wed, 6 Mar 2013 16:03:14 +0100 +Subject: [PATCH] Add install targets for mdadm and mdmon + + +Signed-off-by: Christophe Vu-Brugier +--- + Makefile | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index 315455b..27d8eeb 100644 +--- a/Makefile ++++ b/Makefile +@@ -231,8 +231,12 @@ $(MON_OBJS) : $(INCL) mdmon.h + sha1.o : sha1.c sha1.h md5.h + $(CC) $(CFLAGS) -DHAVE_STDINT_H -o sha1.o -c sha1.c + +-install : mdadm mdmon install-man install-udev ++install : install-mdadm install-mdmon install-man install-udev ++ ++install-mdadm : + $(INSTALL) -D $(STRIP) -m 755 mdadm $(DESTDIR)$(BINDIR)/mdadm ++ ++install-mdmon : + $(INSTALL) -D $(STRIP) -m 755 mdmon $(DESTDIR)$(BINDIR)/mdmon + + install-static : mdadm.static install-man +-- +1.7.10.4 + diff --git a/package/mdadm/0002-mdadm.h-include-sysmacros.h-unconditionally.patch b/package/mdadm/0002-mdadm.h-include-sysmacros.h-unconditionally.patch new file mode 100644 index 00000000..c8944c84 --- /dev/null +++ b/package/mdadm/0002-mdadm.h-include-sysmacros.h-unconditionally.patch @@ -0,0 +1,35 @@ +From 6c781ad75d92c6f65832810c44afcba1b2dffc41 Mon Sep 17 00:00:00 2001 +From: Baruch Siach +Date: Tue, 6 Aug 2019 16:01:15 +0300 +Subject: [PATCH] mdadm.h: include sysmacros.h unconditionally + +musl libc now also requires sys/sysmacros.h for the major/minor macros. +All supported libc implementations carry sys/sysmacros.h, including +diet-libc, klibc, and uclibc-ng. + +Cc: Hauke Mehrtens +Signed-off-by: Baruch Siach +--- +Upstream status: https://marc.info/?l=linux-raid&m=156509677018508 + + mdadm.h | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/mdadm.h b/mdadm.h +index c36d7fdb10f6..d61a9ca82dc1 100644 +--- a/mdadm.h ++++ b/mdadm.h +@@ -45,10 +45,8 @@ extern __off64_t lseek64 __P ((int __fd, __off64_t __offset, int __whence)); + #include + #include + #include +-#ifdef __GLIBC__ + /* Newer glibc requires sys/sysmacros.h directly for makedev() */ + #include +-#endif + #ifdef __dietlibc__ + #include + /* dietlibc has deprecated random and srandom!! */ +-- +2.20.1 + diff --git a/package/mdadm/Config.in b/package/mdadm/Config.in new file mode 100644 index 00000000..8c6bb08a --- /dev/null +++ b/package/mdadm/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_MDADM + bool "mdadm" + depends on !BR2_STATIC_LIBS # dlfcn.h + depends on BR2_USE_MMU # fork() + help + Utility for managing Linux Software RAID arrays. + + https://raid.wiki.kernel.org/index.php/A_guide_to_mdadm + +comment "mdadm needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + depends on BR2_USE_MMU diff --git a/package/mdadm/mdadm.hash b/package/mdadm/mdadm.hash new file mode 100644 index 00000000..b15cb4e0 --- /dev/null +++ b/package/mdadm/mdadm.hash @@ -0,0 +1,4 @@ +# From https://www.kernel.org/pub/linux/utils/raid/mdadm/sha256sums.asc +sha256 ab7688842908d3583a704d491956f31324c3a5fc9f6a04653cb75d19f1934f4a mdadm-4.1.tar.xz +# Locally calculated +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/mdadm/mdadm.mk b/package/mdadm/mdadm.mk new file mode 100644 index 00000000..17178271 --- /dev/null +++ b/package/mdadm/mdadm.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# mdadm +# +################################################################################ + +MDADM_VERSION = 4.1 +MDADM_SOURCE = mdadm-$(MDADM_VERSION).tar.xz +MDADM_SITE = $(BR2_KERNEL_MIRROR)/linux/utils/raid/mdadm +MDADM_LICENSE = GPL-2.0+ +MDADM_LICENSE_FILES = COPYING + +MDADM_BUILD_OPTS = $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(TARGET_CFLAGS) -DNO_COROSYNC -DNO_DLM" \ + CPPFLAGS="$(TARGET_CPPFLAGS) -DBINDIR=\\\"/sbin\\\"" \ + CHECK_RUN_DIR=0 + +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),) +MDADM_BUILD_OPTS += USE_PTHREADS= +endif + +define MDADM_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(MDADM_BUILD_OPTS) mdadm mdmon +endef + +define MDADM_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + DESTDIR=$(TARGET_DIR) \ + install-mdadm install-mdmon +endef + +$(eval $(generic-package)) diff --git a/package/mdevd/Config.in b/package/mdevd/Config.in new file mode 100644 index 00000000..04609403 --- /dev/null +++ b/package/mdevd/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_MDEVD + bool "mdevd" + depends on BR2_USE_MMU # skalibs + select BR2_PACKAGE_SKALIBS + help + mdevd is a small daemon managing kernel hotplug events, + similarly to udevd. + + http://skarnet.org/software/mdevd/ diff --git a/package/mdevd/mdevd.hash b/package/mdevd/mdevd.hash new file mode 100644 index 00000000..c3b8fcc9 --- /dev/null +++ b/package/mdevd/mdevd.hash @@ -0,0 +1,3 @@ +# Locally generated +sha256 be89ab072c4de822a06e26579dcca10e85ae5fd5be23ba903415b4de8fe0fb6a mdevd-0.1.3.0.tar.gz +sha256 31b60c66aba1fa0a7f8847339ac35c28638e25ff96da700d995533ad810e3995 COPYING diff --git a/package/mdevd/mdevd.mk b/package/mdevd/mdevd.mk new file mode 100644 index 00000000..e2924009 --- /dev/null +++ b/package/mdevd/mdevd.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# mdevd +# +################################################################################ + +MDEVD_VERSION = 0.1.3.0 +MDEVD_SITE = http://skarnet.org/software/mdevd +MDEVD_LICENSE = ISC +MDEVD_LICENSE_FILES = COPYING +MDEVD_INSTALL_STAGING = YES +MDEVD_DEPENDENCIES = skalibs + +MDEVD_CONF_OPTS = \ + --prefix=/usr \ + --with-sysdeps=$(STAGING_DIR)/usr/lib/skalibs/sysdeps \ + --with-include=$(STAGING_DIR)/usr/include \ + --with-dynlib=$(STAGING_DIR)/usr/lib \ + --with-lib=$(STAGING_DIR)/usr/lib/skalibs \ + $(if $(BR2_STATIC_LIBS),,--disable-allstatic) \ + $(SHARED_STATIC_LIBS_OPTS) + +define MDEVD_CONFIGURE_CMDS + (cd $(@D); $(TARGET_CONFIGURE_OPTS) ./configure $(MDEVD_CONF_OPTS)) +endef + +define MDEVD_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define MDEVD_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +define MDEVD_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/mdio/Config.in b/package/mdio/Config.in new file mode 100644 index 00000000..cc4799e2 --- /dev/null +++ b/package/mdio/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_MDIO + bool "mdio software" + default y + help + this selection will generate mdio sofeware to /usr/bin + if selected + this sofeware ori code just form net + if found what other package can generate mdio + you can not select this diff --git a/package/mdio/mdio.mk b/package/mdio/mdio.mk new file mode 100644 index 00000000..1aea50cc --- /dev/null +++ b/package/mdio/mdio.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# mdio +# +################################################################################ + +MDIO_SITE = $(TOPDIR)/dl/mdio/mdio.tar.gz +MDIO_SITE_METHOD = file + +define MDIO_EXTRACT_CMDS + tar -zxf $(MDIO_SITE) -C $(@D) +endef + +define MDIO_BUILD_CMDS + cd $(@D) && $(TARGET_CC) mdio.c -o mdio +endef + +define MDIO_INSTALL_TARGET_CMDS + cd $(@D) && cp mdio $(TARGET_DIR)/usr/bin +endef + +$(eval $(generic-package)) diff --git a/package/mediastreamer/0001-src-videofilters-nowebcam.c-fix-build-without-ffmpeg.patch b/package/mediastreamer/0001-src-videofilters-nowebcam.c-fix-build-without-ffmpeg.patch new file mode 100644 index 00000000..8e7812c3 --- /dev/null +++ b/package/mediastreamer/0001-src-videofilters-nowebcam.c-fix-build-without-ffmpeg.patch @@ -0,0 +1,55 @@ +From 342f59f1603f759b6dd90754f8dba14d08947f55 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Thu, 27 Feb 2020 16:18:35 +0100 +Subject: [PATCH] src/videofilters/nowebcam.c: fix build without ffmpeg or jpeg + +jpeg2yuv is only defined if ffmpeg or turbojpeg is available + +Signed-off-by: Fabrice Fontaine +--- + CMakeLists.txt | 3 +++ + src/videofilters/nowebcam.c | 4 ++++ + 2 files changed, 7 insertions(+) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 0efc1a5f..6668db2b 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -336,7 +336,10 @@ if(ENABLE_JPEG) + if(NOT TURBOJPEG_FOUND) + message(WARNING "Could not find libturbo-jpeg, mediastreamer2 will be compiled without LibJpeg-Turbo") + set(ENABLE_JPEG OFF CACHE BOOL "Enable JPEG support" FORCE) ++ add_definitions(-DNO_JPEG) + endif() ++else() ++ add_definitions(-DNO_JPEG) + endif() + if(ENABLE_QRCODE) + find_package(Zxing) +diff --git a/src/videofilters/nowebcam.c b/src/videofilters/nowebcam.c +index a2344dcd..afb0d7b1 100644 +--- a/src/videofilters/nowebcam.c ++++ b/src/videofilters/nowebcam.c +@@ -107,7 +107,9 @@ static mblk_t *_ms_load_jpeg_as_yuv(const char *jpgpath, MSVideoSize *reqsize) { + if (err != st_sizel) { + ms_error("Could not read as much as wanted !"); + } ++#if !(defined(NO_FFMPEG) && defined(NO_JPEG)) + m = jpeg2yuv(jpgbuf, st_sizel, reqsize); ++#endif + ms_free(jpgbuf); + if (m == NULL) { + CloseHandle(fd); +@@ -140,7 +142,9 @@ static mblk_t *_ms_load_jpeg_as_yuv(const char *jpgpath, MSVideoSize *reqsize) { + if (err != statbuf.st_size) { + ms_error("Could not read as much as wanted: %i<>%li !", err, (long)statbuf.st_size); + } ++#if !(defined(NO_FFMPEG) && defined(NO_JPEG)) + m = jpeg2yuv(jpgbuf,statbuf.st_size,reqsize); ++#endif + ms_free(jpgbuf); + if (m == NULL) { + close(fd); +-- +2.25.0 + diff --git a/package/mediastreamer/0002-Use-AV_INPUT_BUFFER_PADDING_SIZE-to-determine-paddin.patch b/package/mediastreamer/0002-Use-AV_INPUT_BUFFER_PADDING_SIZE-to-determine-paddin.patch new file mode 100644 index 00000000..fc66e9a9 --- /dev/null +++ b/package/mediastreamer/0002-Use-AV_INPUT_BUFFER_PADDING_SIZE-to-determine-paddin.patch @@ -0,0 +1,44 @@ +From 84b1919124884232e0fa30b30458470db27c73fc Mon Sep 17 00:00:00 2001 +From: James Cowgill +Date: Sat, 18 Aug 2018 12:56:38 +0200 +Subject: [PATCH] Use AV_INPUT_BUFFER_PADDING_SIZE to determine padding + size + +Hardcoding the value for FF_INPUT_BUFFER_PADDING_SIZE is not safe +because upstream FFmpeg might change it (as they did in FFmpeg 4.0). + +Instead, use FFmpeg's AV_INPUT_BUFFER_PADDING_SIZE if available and +only hardcode a value if FFmpeg is disabled (in which case the value +doesn't particularly matter anyway). For compatibility with older +FFmpeg versions, define AV_INPUT_BUFFER_PADDING_SIZE if hasn't been +defined yet. + +Downloaded from +https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=901735 + +Signed-off-by: Bernd Kuhls +[Fabrice: updated for 4.3.1] +Signed-off-by: Fabrice Fontaine +--- + src/utils/ffmpeg-priv.h | 4 ++++ + src/videofilters/nowebcam.c | 4 ++-- + 2 files changed, 6 insertions(+), 2 deletions(-) + +diff --git a/src/utils/ffmpeg-priv.h b/src/utils/ffmpeg-priv.h +index c0745a9a..d59ea0e1 100644 +--- a/src/utils/ffmpeg-priv.h ++++ b/src/utils/ffmpeg-priv.h +@@ -102,6 +102,10 @@ static inline int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, + #endif + #endif + ++#ifndef AV_INPUT_BUFFER_PADDING_SIZE ++#define AV_INPUT_BUFFER_PADDING_SIZE FF_INPUT_BUFFER_PADDING_SIZE ++#endif ++ + #ifndef HAVE_FUN_avcodec_encode_video2 + int avcodec_encode_video2 (AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr); + #endif +-- +2.18.0 + diff --git a/package/mediastreamer/Config.in b/package/mediastreamer/Config.in new file mode 100644 index 00000000..471d8ad9 --- /dev/null +++ b/package/mediastreamer/Config.in @@ -0,0 +1,26 @@ +config BR2_PACKAGE_MEDIASTREAMER + bool "mediastreamer" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS # ortp + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # ortp + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5 # C++14 + select BR2_PACKAGE_MBEDTLS + select BR2_PACKAGE_ORTP + help + Mediastreamer is a powerful and lightweighted streaming + engine specialized for voice/video telephony applications. + + It is the library that is responsible for all the receiving + and sending of multimedia streams in linphone, including + voice/video capture, encoding and decoding, and rendering. + + http://www.linphone.org/technical-corner/mediastreamer2 + +comment "mediastreamer needs a toolchain w/ threads, C++, dynamic library, gcc >= 5" + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_5 + +comment "mediastreamer needs a toolchain not affected by GCC bug 64735" + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 diff --git a/package/mediastreamer/mediastreamer.hash b/package/mediastreamer/mediastreamer.hash new file mode 100644 index 00000000..dfa469d8 --- /dev/null +++ b/package/mediastreamer/mediastreamer.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 64bdfe9dd6bfa64b492b21a45ad4bb36d67626a7f3b3ab2084a708864f129e84 mediastreamer-4.4.8.tar.gz +sha256 1b3782ccad7b8614100cda30d3faf42fc39f2e97932908c543005053b654ca68 LICENSE.txt diff --git a/package/mediastreamer/mediastreamer.mk b/package/mediastreamer/mediastreamer.mk new file mode 100644 index 00000000..5d66a098 --- /dev/null +++ b/package/mediastreamer/mediastreamer.mk @@ -0,0 +1,179 @@ +################################################################################ +# +# mediastreamer +# +################################################################################ + +MEDIASTREAMER_VERSION = 4.4.8 +MEDIASTREAMER_SITE = \ + https://gitlab.linphone.org/BC/public/mediastreamer2/-/archive/$(MEDIASTREAMER_VERSION) +MEDIASTREAMER_LICENSE = GPL-3.0+ +MEDIASTREAMER_LICENSE_FILES = LICENSE.txt +MEDIASTREAMER_INSTALL_STAGING = YES +MEDIASTREAMER_DEPENDENCIES = ortp +MEDIASTREAMER_CONF_OPTS = \ + -DENABLE_DOC=OFF \ + -DENABLE_GL=OFF \ + -DENABLE_GLX=OFF \ + -DENABLE_MKV=OFF \ + -DENABLE_SOUND=OFF \ + -DENABLE_STRICT=OFF \ + -DENABLE_TOOLS=OFF \ + -DENABLE_UNIT_TESTS=OFF \ + -DENABLE_ZRTP=OFF + +ifeq ($(BR2_PACKAGE_ALSA_LIB_MIXER)$(BR2_PACKAGE_ALSA_LIB_PCM),yy) +MEDIASTREAMER_CONF_OPTS += \ + -DENABLE_ALSA=ON \ + -DENABLE_SOUND=ON +MEDIASTREAMER_DEPENDENCIES += alsa-lib +else +MEDIASTREAMER_CONF_OPTS += -DENABLE_ALSA=OFF +endif + +ifeq ($(BR2_PACKAGE_BCG729),y) +MEDIASTREAMER_CONF_OPTS += -DENABLE_G729=ON +MEDIASTREAMER_DEPENDENCIES += bcg729 +else +MEDIASTREAMER_CONF_OPTS += -DENABLE_G729=OFF +endif + +ifeq ($(BR2_PACKAGE_JPEG_TURBO),y) +MEDIASTREAMER_CONF_OPTS += -DENABLE_JPEG=ON +MEDIASTREAMER_DEPENDENCIES += jpeg +else +MEDIASTREAMER_CONF_OPTS += -DENABLE_JPEG=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBGSM),y) +MEDIASTREAMER_CONF_OPTS += -DENABLE_GSM=ON +MEDIASTREAMER_DEPENDENCIES += libgsm +else +MEDIASTREAMER_CONF_OPTS += -DENABLE_GSM=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBPCAP),y) +MEDIASTREAMER_CONF_OPTS += -DENABLE_PCAP=ON +MEDIASTREAMER_DEPENDENCIES += libpcap +else +MEDIASTREAMER_CONF_OPTS += -DENABLE_PCAP=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBSRTP),y) +MEDIASTREAMER_CONF_OPTS += -DENABLE_SRTP=ON +MEDIASTREAMER_DEPENDENCIES += libsrtp +else +MEDIASTREAMER_CONF_OPTS += -DENABLE_SRTP=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBVPX),y) +MEDIASTREAMER_CONF_OPTS += -DENABLE_VPX=ON +MEDIASTREAMER_DEPENDENCIES += libvpx +else +MEDIASTREAMER_CONF_OPTS += -DENABLE_VPX=OFF +endif + +ifeq ($(BR2_PACKAGE_OPUS),y) +MEDIASTREAMER_CONF_OPTS += -DENABLE_OPUS=ON +MEDIASTREAMER_DEPENDENCIES += opus +else +MEDIASTREAMER_CONF_OPTS += -DENABLE_OPUS=OFF +endif + +# portaudio backend needs speexdsp as well +ifeq ($(BR2_PACKAGE_PORTAUDIO)$(BR2_PACKAGE_SPEEXDSP),yy) +MEDIASTREAMER_CONF_OPTS += \ + -DENABLE_PORTAUDIO=ON \ + -DENABLE_SOUND=ON +MEDIASTREAMER_DEPENDENCIES += portaudio +else +MEDIASTREAMER_CONF_OPTS += -DENABLE_PORTAUDIO=OFF +endif + +ifeq ($(BR2_PACKAGE_PULSEAUDIO),y) +MEDIASTREAMER_CONF_OPTS += \ + -DENABLE_PULSEAUDIO=ON \ + -DENABLE_SOUND=ON +MEDIASTREAMER_DEPENDENCIES += pulseaudio +else +MEDIASTREAMER_CONF_OPTS += -DENABLE_PULSEAUDIO=OFF +endif + +ifeq ($(BR2_PACKAGE_SPEEX),y) +MEDIASTREAMER_CONF_OPTS += -DENABLE_SPEEX_CODEC=ON +MEDIASTREAMER_DEPENDENCIES += speex +else +MEDIASTREAMER_CONF_OPTS += -DENABLE_SPEEX_CODEC=OFF +endif + +ifeq ($(BR2_PACKAGE_SPEEXDSP),y) +MEDIASTREAMER_CONF_OPTS += -DENABLE_SPEEX_DSP=ON +MEDIASTREAMER_DEPENDENCIES += speexdsp +else +MEDIASTREAMER_CONF_OPTS += -DENABLE_SPEEX_DSP=OFF +endif + +ifeq ($(BR2_PACKAGE_SPEEX)$(BR2_PACKAGE_SPEEXDSP),yy) +MEDIASTREAMER_CONF_OPTS += -DENABLE_RESAMPLE=ON +else +MEDIASTREAMER_CONF_OPTS += -DENABLE_RESAMPLE=OFF +endif + +ifeq ($(BR2_PACKAGE_FFMPEG_SWSCALE),y) +MEDIASTREAMER_CONF_OPTS += -DENABLE_FFMPEG=ON +MEDIASTREAMER_DEPENDENCIES += ffmpeg +else +MEDIASTREAMER_CONF_OPTS += -DENABLE_FFMPEG=OFF +endif + +ifeq ($(BR2_PACKAGE_SDL),y) +MEDIASTREAMER_CONF_OPTS += -DENABLE_SDL=ON +MEDIASTREAMER_DEPENDENCIES += sdl +else +MEDIASTREAMER_CONF_OPTS += -DENABLE_SDL=OFF +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBX11),y) +MEDIASTREAMER_CONF_OPTS += -DENABLE_X11=ON +MEDIASTREAMER_DEPENDENCIES += xlib_libX11 +else +MEDIASTREAMER_CONF_OPTS += -DENABLE_X11=OFF +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXV),y) +MEDIASTREAMER_CONF_OPTS += -DENABLE_XV=ON +MEDIASTREAMER_DEPENDENCIES += xlib_libXv +else +MEDIASTREAMER_CONF_OPTS += -DENABLE_XV=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBTHEORA),y) +MEDIASTREAMER_CONF_OPTS += -DENABLE_THEORA=ON +MEDIASTREAMER_DEPENDENCIES += libtheora +else +MEDIASTREAMER_CONF_OPTS += -DENABLE_THEORA=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBV4L),y) +MEDIASTREAMER_CONF_OPTS += -DENABLE_V4L=ON +MEDIASTREAMER_DEPENDENCIES += libv4l +else +MEDIASTREAMER_CONF_OPTS += -DENABLE_V4L=OFF +endif + +ifeq ($(BR2_PACKAGE_ZXING_CPP),y) +MEDIASTREAMER_CONF_OPTS += -DENABLE_QRCODE=ON +MEDIASTREAMER_DEPENDENCIES += zxing-cpp +else +MEDIASTREAMER_CONF_OPTS += -DENABLE_QRCODE=OFF +endif + +ifeq ($(BR2_STATIC_LIBS),y) +MEDIASTREAMER_CONF_OPTS += -DENABLE_SHARED=OFF -DENABLE_STATIC=ON +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +MEDIASTREAMER_CONF_OPTS += -DENABLE_SHARED=ON -DENABLE_STATIC=ON +else ifeq ($(BR2_SHARED_LIBS),y) +MEDIASTREAMER_CONF_OPTS += -DENABLE_SHARED=ON -DENABLE_STATIC=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/memcached/Config.in b/package/memcached/Config.in new file mode 100644 index 00000000..93bf02d6 --- /dev/null +++ b/package/memcached/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_MEMCACHED + bool "memcached" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBEVENT + help + Memcached is an in-memory key-value store for small chunks + of arbitrary data (strings, objects) from results of + database calls, API calls, or page rendering. + + http://www.memcached.org/ + +comment "memcached needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU diff --git a/package/memcached/memcached.hash b/package/memcached/memcached.hash new file mode 100644 index 00000000..a86a6f9f --- /dev/null +++ b/package/memcached/memcached.hash @@ -0,0 +1,6 @@ +# From http://www.memcached.org/files/memcached-1.6.9.tar.gz.sha1 +sha1 42ae062094fdf083cfe7b21ff377c781011c2be1 memcached-1.6.9.tar.gz + +# Locally computed +sha256 d5a62ce377314dbffdb37c4467e7763e3abae376a16171e613cbe69956f092d1 memcached-1.6.9.tar.gz +sha256 bc887c4ad8051fe690ace9528fe37a2e0bb362e6d963331d82e845ca9b585a0c COPYING diff --git a/package/memcached/memcached.mk b/package/memcached/memcached.mk new file mode 100644 index 00000000..1c695411 --- /dev/null +++ b/package/memcached/memcached.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# memcached +# +################################################################################ + +MEMCACHED_VERSION = 1.6.9 +MEMCACHED_SITE = http://www.memcached.org/files +MEMCACHED_DEPENDENCIES = libevent +MEMCACHED_CONF_ENV = ac_cv_prog_cc_c99='-std=gnu99' +MEMCACHED_CONF_OPTS = --disable-coverage +MEMCACHED_LICENSE = BSD-3-Clause +MEMCACHED_LICENSE_FILES = COPYING +MEMCACHED_CPE_ID_VENDOR = memcached + +ifeq ($(BR2_ENDIAN),"BIG") +MEMCACHED_CONF_ENV += ac_cv_c_endian=big +else +MEMCACHED_CONF_ENV += ac_cv_c_endian=little +endif + +$(eval $(autotools-package)) diff --git a/package/memstat/0001-PATH_MAX.patch b/package/memstat/0001-PATH_MAX.patch new file mode 100644 index 00000000..0c3617a6 --- /dev/null +++ b/package/memstat/0001-PATH_MAX.patch @@ -0,0 +1,14 @@ +Add missing #include for PATH_MAX + +Signed-off-by: Maarten ter Huurne + +--- memstat-0.8.org/memstat.c 2009-06-08 14:38:05.000000000 +0200 ++++ memstat-0.8/memstat.c 2014-09-12 03:55:43.096035374 +0200 +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + + /* blacklist devices that just map physical memory */ + char *blacklist[] = { "/dev/mem", diff --git a/package/memstat/Config.in b/package/memstat/Config.in new file mode 100644 index 00000000..b7906124 --- /dev/null +++ b/package/memstat/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_MEMSTAT + bool "memstat" + help + Memstat lists all the processes, executables, and shared + libraries that are using up virtual memory. It's helpful to + see how the shared memory is used and which 'old' libs are + loaded. + + http://sourceforge.net/projects/memstattool diff --git a/package/memstat/memstat.hash b/package/memstat/memstat.hash new file mode 100644 index 00000000..9a30e342 --- /dev/null +++ b/package/memstat/memstat.hash @@ -0,0 +1,4 @@ +# From http://sourceforge.net/projects/memstattool/files/ +sha1 26071dbc30a2796c0503c7d8060a548ca36f8df9 memstat_1.0.tar.gz +# Locally computed +sha256 5e5db2a2fab637bbbc5d2400141fcb9f1b4b55540d025c2dc54378dc497cb524 debian/copyright diff --git a/package/memstat/memstat.mk b/package/memstat/memstat.mk new file mode 100644 index 00000000..e11b4ae6 --- /dev/null +++ b/package/memstat/memstat.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# memstat +# +################################################################################ + +MEMSTAT_VERSION = 1.0 +MEMSTAT_SITE = http://downloads.sourceforge.net/project/memstattool +MEMSTAT_SOURCE = memstat_$(MEMSTAT_VERSION).tar.gz +MEMSTAT_LICENSE = GPL +MEMSTAT_LICENSE_FILES = debian/copyright + +define MEMSTAT_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) CC="$(TARGET_CC)" LD="$(TARGET_LD)" CFLAGS="$(TARGET_CFLAGS)" \ + -C $(@D) memstat +endef + +define MEMSTAT_INSTALL_TARGET_CMDS + $(INSTALL) -D $(@D)/memstat.conf -m 0644 \ + $(TARGET_DIR)/etc/memstat.conf + $(INSTALL) -D $(@D)/memstat $(TARGET_DIR)/usr/bin/memstat +endef + +$(eval $(generic-package)) diff --git a/package/memtest86/Config.in b/package/memtest86/Config.in new file mode 100644 index 00000000..79c01610 --- /dev/null +++ b/package/memtest86/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_MEMTEST86 + bool "memtest86" + depends on BR2_i386 || BR2_x86_64 + help + Memtest86+ is a bootable standalone memory test program. + + Buildroot does not support packages with a '+' sign in their + name, which explains why it is named memtest86 and not + memtest86+. + + Memtest86+ is a utility designed to test whether your memory + is in working order. It repeatedly writes an enormous amount + of different patterns to all memory locations and reads them + back again and verifies whether the result of the read is the + same as what was written to memory. + + Memtest86+ will only work on 32-bit or 64-bit x86 targets. + It boots as an i486 program and autodetects hardware. It can + be added to the grub2 boot menu by adding the following + lines to the bottom of /boot/grub/grub.cfg - note the use of + linux16. + + menuentry "Memtest86+" { + linux16 /boot/memtest86+.bin + } + + Other boot loaders will have similar requirements. + + http://www.memtest.org diff --git a/package/memtest86/memtest86.hash b/package/memtest86/memtest86.hash new file mode 100644 index 00000000..559ae0ac --- /dev/null +++ b/package/memtest86/memtest86.hash @@ -0,0 +1,3 @@ +# locally computed using sha256sum +sha256 142127b7953fbd829b1057fb64a78d3340c2b771484230a7347e94530a0d9039 memtest86+-5.01.tar.gz +sha256 2e15e2174b86640d7fbfcb62b51d9182062d9db71d66a46e5b01d736c68150ea README diff --git a/package/memtest86/memtest86.mk b/package/memtest86/memtest86.mk new file mode 100644 index 00000000..eb071cc2 --- /dev/null +++ b/package/memtest86/memtest86.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# memtest86 +# +################################################################################ + +MEMTEST86_VERSION = 5.01 +MEMTEST86_SOURCE = memtest86+-$(MEMTEST86_VERSION).tar.gz +MEMTEST86_SITE = http://www.memtest.org/download/$(MEMTEST86_VERSION) +MEMTEST86_LICENSE = GPL-2.0 +MEMTEST86_LICENSE_FILES = README + +# memtest86+ is sensitive to toolchain changes, use the shipped binary version +define MEMTEST86_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/precomp.bin $(TARGET_DIR)/boot/memtest86+.bin +endef + +$(eval $(generic-package)) diff --git a/package/memtester/Config.in b/package/memtester/Config.in new file mode 100644 index 00000000..b9887726 --- /dev/null +++ b/package/memtester/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_MEMTESTER + bool "memtester" + help + A userspace utility for testing the memory subsystem for + faults. + + http://pyropus.ca/software/memtester/ diff --git a/package/memtester/memtester.hash b/package/memtester/memtester.hash new file mode 100644 index 00000000..7d7820e7 --- /dev/null +++ b/package/memtester/memtester.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 8ed52b0d06d4aeb61954994146e2a5b2d20448a8f3ce3ee995120e6dbde2ae37 memtester-4.5.0.tar.gz +sha256 dcc100d4161cc0b7177545ab6e47216f84857cda3843847c792a25289852dcaa COPYING diff --git a/package/memtester/memtester.mk b/package/memtester/memtester.mk new file mode 100644 index 00000000..ec515f63 --- /dev/null +++ b/package/memtester/memtester.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# memtester +# +################################################################################ + +MEMTESTER_VERSION = 4.5.0 +MEMTESTER_SITE = http://pyropus.ca/software/memtester/old-versions +MEMTESTER_LICENSE = GPL-2.0 +MEMTESTER_LICENSE_FILES = COPYING +MEMTESTER_CPE_ID_VENDOR = pryopus + +MEMTESTER_TARGET_INSTALL_OPTS = INSTALLPATH=$(TARGET_DIR)/usr + +define MEMTESTER_BUILD_CMDS + $(SED) "s%^cc%$(TARGET_CC) $(TARGET_CFLAGS)%" $(@D)/conf-cc + $(SED) "s%^cc%$(TARGET_CC) $(TARGET_LDFLAGS)%" $(@D)/conf-ld + $(MAKE) -C $(@D) +endef + +define MEMTESTER_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(MEMTESTER_TARGET_INSTALL_OPTS) -C $(@D) install +endef + +$(eval $(generic-package)) diff --git a/package/memtool/Config.in b/package/memtool/Config.in new file mode 100644 index 00000000..63099d0d --- /dev/null +++ b/package/memtool/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_MEMTOOL + bool "memtool" + help + Development tool to modify memory mapped registers. + + memtool allows one to read and write memory mapped registers + via /dev/mem. The commands are inspired by the respective + commands of the barebox bootloader. This is handy during + driver development to inspect and modify register + settings. It can also be used to modify regular files and + character devices (e.g. to paint to /dev/fb0). + + http://www.pengutronix.de/software/memtool/index_en.html diff --git a/package/memtool/memtool.hash b/package/memtool/memtool.hash new file mode 100644 index 00000000..da4880bd --- /dev/null +++ b/package/memtool/memtool.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 87cb7175266ff3a00a9c1f541c4c6c93693ffbe8dcc0d97a60d13c45ff860900 memtool-2018.03.0.tar.xz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/memtool/memtool.mk b/package/memtool/memtool.mk new file mode 100644 index 00000000..75e37831 --- /dev/null +++ b/package/memtool/memtool.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# memtool +# +################################################################################ + +MEMTOOL_VERSION = 2018.03.0 +MEMTOOL_SITE = http://public.pengutronix.de/software/memtool +MEMTOOL_SOURCE = memtool-$(MEMTOOL_VERSION).tar.xz +MEMTOOL_LICENSE = GPL-2.0 +MEMTOOL_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/mender-artifact/Config.in.host b/package/mender-artifact/Config.in.host new file mode 100644 index 00000000..c7be0ed2 --- /dev/null +++ b/package/mender-artifact/Config.in.host @@ -0,0 +1,18 @@ +config BR2_PACKAGE_HOST_MENDER_ARTIFACT + bool "host mender-artifact" + depends on BR2_PACKAGE_HOST_GO_HOST_ARCH_SUPPORTS + help + The mender-artifact tool is a CLI implementation of the + Mender artifacts library. + + A Mender artifact can be recognized by its .mender suffix. + Mender artifacts can contain binaries, metadata, checksums, + signatures and scripts that are used during a deployment. + The artifact format acts as a wrapper, and uses the tar + format to bundle several files into one. + + In its simplest form, an artifact contains just a rootfs + image, along with its checksum, id and device type + compatibility. + + https://github.com/mendersoftware/mender-artifact diff --git a/package/mender-artifact/mender-artifact.hash b/package/mender-artifact/mender-artifact.hash new file mode 100644 index 00000000..a9fba297 --- /dev/null +++ b/package/mender-artifact/mender-artifact.hash @@ -0,0 +1,36 @@ +# Locally computed: +sha256 c085479a6e2ae598687a15b646bfaaa68e5d76d08382bdcc4a27a9b4021d6540 mender-artifact-3.4.0.tar.gz +sha256 08b0209abb7e87bb1d21aca8a40693b7d29406d1edffd443f17c59d5d68f6467 LIC_FILES_CHKSUM.sha256 + +# License hash extracted from LIC_FILES_CHKSUM.sha256 using the +# following command: +# +# sed '/^[A-Za-z0-9_]/s/^/sha256 /' LIC_FILES_CHKSUM.sha256 + +# Apache 2.0 licenses. +sha256 32714818ad6f98ee0185a52e23a475d89122e3efd2b2c26c733781c28e798c99 LICENSE +sha256 32714818ad6f98ee0185a52e23a475d89122e3efd2b2c26c733781c28e798c99 vendor/github.com/mendersoftware/mendertesting/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 vendor/github.com/minio/sha256-simd/LICENSE +sha256 b40930bbcf80744c86c46a12bc9da056641d722716c378f5659b9e555ef833e1 vendor/gopkg.in/yaml.v2/LICENSE +# +# BSD 2 Clause licenses. +sha256 8d427fd87bc9579ea368fde3d49f9ca22eac857f91a9dec7e3004bdfab7dee86 vendor/github.com/pkg/errors/LICENSE +# +# BSD 3 Clause licenses. +sha256 2eb550be6801c1ea434feba53bf6d12e7c71c90253e0a9de4a4f46cf88b56477 vendor/github.com/pmezard/go-difflib/LICENSE +sha256 2d36597f7117c38b006835ae7f537487207d8ec407aa9d9980794b2030cbc067 vendor/golang.org/x/sys/LICENSE +sha256 2d36597f7117c38b006835ae7f537487207d8ec407aa9d9980794b2030cbc067 vendor/golang.org/x/crypto/LICENSE +sha256 a284e538f3e5649ae6a8f32da2bbd18e9daabf2c1ebbfb99ed92e797b159be1a vendor/github.com/remyoudompheng/go-liblzma/LICENSE +sha256 16f848582e4b276a7392cd34496b7a33d6f65c0e190c163ff3a056a7c61219ce vendor/github.com/klauspost/compress/LICENSE +sha256 75e1ca97a84a9da6051dee0114333388216f2c4a5a028296b882ff3d57274735 vendor/github.com/russross/blackfriday/v2/LICENSE.txt +# +# ISC licenses. +sha256 1b93a317849ee09d3d7e4f1d20c2b78ddb230b4becb12d7c224c927b9d470251 vendor/github.com/davecgh/go-spew/LICENSE +# +# MIT licenses. +sha256 dad2b0b2cc2dbdbf95ad5d800ef7588956e74dc2479014829d42be295125c25d vendor/github.com/stretchr/testify/LICENSE +sha256 da277af11b85227490377fbcac6afccc68be560c4fff36ac05ca62de55345fd7 vendor/github.com/urfave/cli/LICENSE +sha256 51a0c9ec7f8b7634181b8d4c03e5b5d204ac21d6e72f46c313973424664b2e6b vendor/github.com/sirupsen/logrus/LICENSE +sha256 7709cc030f078b17809884f92f33a2016944e1180312dc3f1371b02313d313ed vendor/github.com/klauspost/pgzip/LICENSE +sha256 a55959c4e3e8917bfa857359bb641115336276a6cc97408fd8197e079fb18470 vendor/github.com/cpuguy83/go-md2man/v2/LICENSE.md +sha256 c8024e31c1de453fea90f22a221968835cc7af9d520274a2576c9ec9976055b0 vendor/github.com/shurcooL/sanitized_anchor_name/LICENSE diff --git a/package/mender-artifact/mender-artifact.mk b/package/mender-artifact/mender-artifact.mk new file mode 100644 index 00000000..b2310d5b --- /dev/null +++ b/package/mender-artifact/mender-artifact.mk @@ -0,0 +1,48 @@ +################################################################################ +# +# host-mender-artifact +# +################################################################################ + +HOST_MENDER_ARTIFACT_VERSION = 3.4.0 +HOST_MENDER_ARTIFACT_SITE = $(call github,mendersoftware,mender-artifact,$(HOST_MENDER_ARTIFACT_VERSION)) +HOST_MENDER_ARTIFACT_LICENSE = Apache2.0, BSD-2-Clause, BSD-3-Clause, ISC, MIT +HOST_MENDER_ARTIFACT_LICENSE_FILES = \ + LICENSE \ + LIC_FILES_CHKSUM.sha256 \ + vendor/github.com/mendersoftware/mendertesting/LICENSE \ + vendor/github.com/minio/sha256-simd/LICENSE \ + vendor/gopkg.in/yaml.v2/LICENSE \ + vendor/github.com/pkg/errors/LICENSE \ + vendor/github.com/pmezard/go-difflib/LICENSE \ + vendor/golang.org/x/sys/LICENSE \ + vendor/golang.org/x/crypto/LICENSE \ + vendor/github.com/remyoudompheng/go-liblzma/LICENSE \ + vendor/github.com/klauspost/compress/LICENSE \ + vendor/github.com/russross/blackfriday/v2/LICENSE.txt \ + vendor/github.com/davecgh/go-spew/LICENSE \ + vendor/github.com/stretchr/testify/LICENSE \ + vendor/github.com/urfave/cli/LICENSE \ + vendor/github.com/sirupsen/logrus/LICENSE \ + vendor/github.com/klauspost/pgzip/LICENSE \ + vendor/github.com/cpuguy83/go-md2man/v2/LICENSE.md \ + vendor/github.com/shurcooL/sanitized_anchor_name/LICENSE + +HOST_MENDER_ARTIFACT_DEPENDENCIES = host-xz + +# By default, go will attempt to download needed modules before building, which +# is not desirable. This behavior also causes permission issues when cleaning, +# as go downloads modules as read-only by default. Because mender-artifact +# includes the modules in the vendor directory, mod=vendor prevents the package +# from downloading the go modules during the build process and prevents +# permission issues when cleaning. +HOST_MENDER_ARTIFACT_GO_ENV = GOFLAGS="-mod=vendor" + +HOST_MENDER_ARTIFACT_LDFLAGS = -X main.Version=$(HOST_MENDER_ARTIFACT_VERSION) + +HOST_MENDER_ARTIFACT_BUILD_TARGETS = cli/mender-artifact + +HOST_MENDER_ARTIFACT_BIN_NAME = mender-artifact +HOST_MENDER_ARTIFACT_INSTALL_BINS = $(HOST_MENDER_ARTIFACT_BIN_NAME) + +$(eval $(host-golang-package)) diff --git a/package/mender-grubenv/Config.in b/package/mender-grubenv/Config.in new file mode 100644 index 00000000..28b4bb70 --- /dev/null +++ b/package/mender-grubenv/Config.in @@ -0,0 +1,43 @@ +config BR2_PACKAGE_MENDER_GRUBENV + bool "mender-grubenv" + depends on BR2_TARGET_GRUB2_ARCH_SUPPORTS + depends on BR2_PACKAGE_MENDER # runtime + # grubenv provides it's own fw_printenv. + depends on !BR2_PACKAGE_UBOOT_TOOLS_FWPRINTENV + depends on BR2_TARGET_GRUB2 + help + Contains the boot scripts and tools used by Mender to + integrate with the GRUB bootloader. + + The following Grub modules must be selected for this package: + loadenv hashsum echo halt gcry_sha256 test + + https://github.com/mendersoftware/grub-mender-grubenv + +if BR2_PACKAGE_MENDER_GRUBENV + +config BR2_PACKAGE_MENDER_GRUBENV_DEFINES + string "path to grubenv defines" + help + Specify a path to the mender grubenv defines file. + If no path is specified, the example file in the source + directory will be used. + + The example file in the source directory sets the following: + mender_rootfsa_part=2 + mender_rootfsb_part=3 + mender_kernel_root_base=/dev/mmcblk0p + mender_grub_storage_device=hd0 + kernel_imagetype=bzImage + +endif + +comment "mender-grubenv needs a grub2 bootloader" + depends on BR2_TARGET_GRUB2_ARCH_SUPPORTS + depends on BR2_PACKAGE_MENDER + depends on !BR2_TARGET_GRUB2 + +comment "mender-grubenv does not work with uboot-tools fw_printenv" + depends on BR2_TARGET_GRUB2_ARCH_SUPPORTS + depends on BR2_PACKAGE_MENDER + depends on BR2_PACKAGE_UBOOT_TOOLS_FWPRINTENV diff --git a/package/mender-grubenv/mender-grubenv.hash b/package/mender-grubenv/mender-grubenv.hash new file mode 100644 index 00000000..1b1eaa75 --- /dev/null +++ b/package/mender-grubenv/mender-grubenv.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 e50cc18a844e3fd1edef7af9224733b0338a34d51f1186ee19803ef7af1a5065 mender-grubenv-1.3.0.tar.gz +sha256 98ed35b5a138f58164b5c0dbccd9d7f01ef4d84b9dba01e896f0a3241c50c0f7 LICENSE diff --git a/package/mender-grubenv/mender-grubenv.mk b/package/mender-grubenv/mender-grubenv.mk new file mode 100644 index 00000000..6e38557e --- /dev/null +++ b/package/mender-grubenv/mender-grubenv.mk @@ -0,0 +1,65 @@ +################################################################################ +# +# mender-grubenv +# +################################################################################ + +MENDER_GRUBENV_VERSION = 1.3.0 +MENDER_GRUBENV_SITE = $(call github,mendersoftware,grub-mender-grubenv,$(MENDER_GRUBENV_VERSION)) +MENDER_GRUBENV_LICENSE = Apache-2.0 +MENDER_GRUBENV_LICENSE_FILES = LICENSE +# Grub2 must be built first so this package can overwrite the config files +# provided by grub. +MENDER_GRUBENV_DEPENDENCIES = grub2 +MENDER_GRUBENV_INSTALL_IMAGES = YES + +ifeq ($(BR2_TARGET_GRUB2_I386_PC)$(BR2_TARGET_GRUB2_ARM_UBOOT),y) +MENDER_GRUBENV_ENV_DIR = /boot/grub +else +MENDER_GRUBENV_ENV_DIR = /boot/EFI/BOOT +endif + +MENDER_GRUBENV_MAKE_ENV = \ + $(TARGET_CONFIGURE_OPTS) \ + $(TARGET_MAKE_ENV) \ + ENV_DIR=$(MENDER_GRUBENV_ENV_DIR) + +MENDER_GRUBENV_DEFINES = \ + $(or $(call qstrip,$(BR2_PACKAGE_MENDER_GRUBENV_DEFINES)),\ + $(@D)/mender_grubenv_defines.example) + +# These grub modules must be built in for the grub scripts to work properly. +# Without them, the system will not boot. +MENDER_GRUBENV_MANDATORY_MODULES=loadenv hashsum echo halt gcry_sha256 test +MENDER_GRUBENV_MODULES_MISSING = \ + $(filter-out $(call qstrip,$(BR2_TARGET_GRUB2_BUILTIN_MODULES)),\ + $(MENDER_GRUBENV_MANDATORY_MODULES)) + +ifeq ($(BR2_PACKAGE_MENDER_GRUBENV)$(BR_BUILDING),yy) +ifneq ($(MENDER_GRUBENV_MODULES_MISSING),) +$(error The following missing grub2 modules must be enabled for mender-grubenv \ + to work: $(MENDER_GRUBENV_MODULES_MISSING)) +endif +endif + +define MENDER_GRUBENV_CONFIGURE_CMDS + $(INSTALL) -m 0644 $(MENDER_GRUBENV_DEFINES) $(@D)/mender_grubenv_defines +endef + +define MENDER_GRUBENV_BUILD_CMDS + $(MENDER_GRUBENV_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define MENDER_GRUBENV_INSTALL_TARGET_CMDS + $(MENDER_GRUBENV_MAKE_ENV) $(MAKE) DESTDIR=$(TARGET_DIR) -C $(@D) install +endef + +# Overwrite the default grub2 config files with the ones in this package. +define MENDER_GRUBENV_INSTALL_IMAGES_CMDS + mkdir -p $(BINARIES_DIR)/efi-part/EFI/BOOT + cp -dpfr $(TARGET_DIR)/boot/EFI/BOOT/grub.cfg \ + $(TARGET_DIR)/boot/EFI/BOOT/mender_grubenv* \ + $(BINARIES_DIR)/efi-part/EFI/BOOT +endef + +$(eval $(generic-package)) diff --git a/package/mender/Config.in b/package/mender/Config.in new file mode 100644 index 00000000..5cb3a3f2 --- /dev/null +++ b/package/mender/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_MENDER + bool "mender" + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_XZ + select BR2_PACKAGE_UBOOT_TOOLS if BR2_TARGET_UBOOT # runtime + select BR2_PACKAGE_UBOOT_TOOLS_FWPRINTENV if BR2_TARGET_UBOOT # runtime + help + Mender is an open source over-the-air (OTA) software updater + for embedded Linux devices. Mender comprises a client + running at the embedded device, as well as a server that + manages deployments across many devices. + + https://github.com/mendersoftware/mender + +comment "mender needs a toolchain w/ threads" + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/mender/S42mender b/package/mender/S42mender new file mode 100644 index 00000000..108fecfe --- /dev/null +++ b/package/mender/S42mender @@ -0,0 +1,56 @@ +#!/bin/sh +# +# Starts mender service. +# + +start() { + # If /var/lib/mender is a symlink to /var/run/mender, and + # - the filesystem is RO (i.e. we can not rm the symlink), + # create the directory pointed to by the symlink. + # - the filesystem is RW (i.e. we can rm the symlink), + # replace the symlink with an actual directory + if [ -L /var/lib/mender \ + -a "$(readlink /var/lib/mender)" = "/var/run/mender" ] + then + if rm -f /var/lib/mender >/dev/null 2>&1; then + mkdir -p /var/lib/mender + else + echo "No persistent location to store mender data. Data will be lost" + echo "at reboot. Are you sure this is what you want to do?" + mkdir -p "$(readlink /var/lib/mender)" + fi + fi + + printf "Starting mender service: " + umask 077 + + start-stop-daemon -S -q -b -m -p /var/run/mender.pid \ + --exec /usr/bin/mender -- -daemon + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +stop() { + printf "Stopping mender service: " + start-stop-daemon -K -q -p /var/run/mender.pid + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/mender/artifact_info b/package/mender/artifact_info new file mode 100644 index 00000000..1c84b088 --- /dev/null +++ b/package/mender/artifact_info @@ -0,0 +1 @@ +artifact_name=BUILDROOT_ARTIFACT diff --git a/package/mender/device_type b/package/mender/device_type new file mode 100644 index 00000000..a097ef2b --- /dev/null +++ b/package/mender/device_type @@ -0,0 +1 @@ +device_type=BUILDROOT_DEVICE diff --git a/package/mender/mender-client.service b/package/mender/mender-client.service new file mode 100644 index 00000000..2a5f476e --- /dev/null +++ b/package/mender/mender-client.service @@ -0,0 +1,24 @@ +[Unit] +Description=Mender OTA update service +After=systemd-resolved.service + +[Service] +Type=idle +User=root +Group=root +ExecStartPre=/bin/sh -c '\ +if [ -L /var/lib/mender \ + -a "$(readlink /var/lib/mender)" = "/var/run/mender" ]; then \ + if rm -f /var/lib/mender >/dev/null 2>&1; then \ + mkdir -p /var/lib/mender; \ + else \ + echo "No persistent location to store mender data. Data will be lost" \ + echo "at reboot. Are you sure this is what you want to do?"; \ + mkdir -p "$(readlink /var/lib/mender)"; \ + fi; \ +fi' +ExecStart=/usr/bin/mender -daemon +Restart=on-abort + +[Install] +WantedBy=multi-user.target diff --git a/package/mender/mender.conf b/package/mender/mender.conf new file mode 100644 index 00000000..f89118ac --- /dev/null +++ b/package/mender/mender.conf @@ -0,0 +1,10 @@ +{ + "InventoryPollIntervalSeconds": 1800, + "UpdatePollIntervalSeconds": 1800, + "RetryPollIntervalSeconds": 300, + "RootfsPartA": "/dev/mmcblk0p2", + "RootfsPartB": "/dev/mmcblk0p3", + "ServerCertificate": "/etc/mender/server.crt", + "ServerURL": "https://docker.mender.io", + "TenantToken": "dummy" +} diff --git a/package/mender/mender.hash b/package/mender/mender.hash new file mode 100644 index 00000000..f1eef656 --- /dev/null +++ b/package/mender/mender.hash @@ -0,0 +1,39 @@ +# Locally computed: +sha256 d7c885a34f7b7f9969970132411225895c136e22be0caaa6dd3e08ca4bb71ff9 2.3.0.tar.gz + +# Vendor licenses +# Generated with sed '/^[A-Za-z0-9_]/s/^/sha256 /' LIC_FILES_CHKSUM.sha256 + +# Apache-2.0 license. +sha256 32714818ad6f98ee0185a52e23a475d89122e3efd2b2c26c733781c28e798c99 LICENSE +sha256 32714818ad6f98ee0185a52e23a475d89122e3efd2b2c26c733781c28e798c99 vendor/github.com/mendersoftware/mendertesting/LICENSE +sha256 32714818ad6f98ee0185a52e23a475d89122e3efd2b2c26c733781c28e798c99 vendor/github.com/mendersoftware/mender-artifact/LICENSE +# +# BSD 2 Clause license. +sha256 8d427fd87bc9579ea368fde3d49f9ca22eac857f91a9dec7e3004bdfab7dee86 vendor/github.com/pkg/errors/LICENSE +# +# BSD 3 Clause license. +sha256 2eb550be6801c1ea434feba53bf6d12e7c71c90253e0a9de4a4f46cf88b56477 vendor/github.com/pmezard/go-difflib/LICENSE +sha256 2d36597f7117c38b006835ae7f537487207d8ec407aa9d9980794b2030cbc067 vendor/golang.org/x/crypto/LICENSE +sha256 2d36597f7117c38b006835ae7f537487207d8ec407aa9d9980794b2030cbc067 vendor/golang.org/x/sys/LICENSE +sha256 2d36597f7117c38b006835ae7f537487207d8ec407aa9d9980794b2030cbc067 vendor/golang.org/x/net/LICENSE +sha256 0634b008cee55ca01f0888d2f5aba2d34e66c3f52c31a4e16a5d5d33d0c2a03e vendor/github.com/bmatsuo/lmdb-go/LICENSE.md +sha256 2d36597f7117c38b006835ae7f537487207d8ec407aa9d9980794b2030cbc067 vendor/golang.org/x/text/LICENSE +sha256 87640bc4df2ceb1559f268a3db1ba859ab780f7ba5b1b4545173d4680a3d918b vendor/github.com/remyoudompheng/go-liblzma/LICENSE +# +# ISC license. +sha256 1b93a317849ee09d3d7e4f1d20c2b78ddb230b4becb12d7c224c927b9d470251 vendor/github.com/davecgh/go-spew/LICENSE +# +# MIT license. +sha256 51a0c9ec7f8b7634181b8d4c03e5b5d204ac21d6e72f46c313973424664b2e6b vendor/github.com/sirupsen/logrus/LICENSE +sha256 dad2b0b2cc2dbdbf95ad5d800ef7588956e74dc2479014829d42be295125c25d vendor/github.com/stretchr/testify/LICENSE +sha256 402f39eed8a1851385d0703999aa9f23d067c2ea3e15c63c074e389cbf8f8f8f vendor/github.com/stretchr/testify/LICENCE.txt +sha256 fde7d610b9b95fc5a6304055c4dae951025b630aaa42a24e95ebf76675ae832c vendor/github.com/stretchr/objx/LICENSE.md +sha256 ffa15bdce332058a03a1d923910864fb6e58bf6df66a0e3914284725b327183e vendor/github.com/ungerik/go-sysfs/LICENSE +sha256 da277af11b85227490377fbcac6afccc68be560c4fff36ac05ca62de55345fd7 vendor/github.com/urfave/cli/LICENSE +# +# OpenLDAP Public License +sha256 310fe25c858a9515fc8c8d7d1f24a67c9496f84a91e0a0e41ea9975b1371e569 vendor/github.com/bmatsuo/lmdb-go/LICENSE.mdb.md + +# sha256 of all the vendor licenses combined +sha256 39f8e574fa6d082b650a5d6159045cdec7c4662da6ccbd67271079904353b8d5 LIC_FILES_CHKSUM.sha256 diff --git a/package/mender/mender.mk b/package/mender/mender.mk new file mode 100644 index 00000000..0224e84a --- /dev/null +++ b/package/mender/mender.mk @@ -0,0 +1,89 @@ +################################################################################ +# +# mender +# +################################################################################ + +MENDER_VERSION = 2.3.0 +MENDER_SITE = https://github.com/mendersoftware/mender/archive +MENDER_SOURCE = $(MENDER_VERSION).tar.gz +MENDER_LICENSE = Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC, MIT, OLDAP-2.8 + +# Vendor license paths generated with: +# awk '{print $2}' LIC_FILES_CHKSUM.sha256 | grep vendor +MENDER_LICENSE_FILES = \ + LICENSE \ + LIC_FILES_CHKSUM.sha256 \ + vendor/github.com/mendersoftware/mendertesting/LICENSE \ + vendor/github.com/mendersoftware/mender-artifact/LICENSE \ + vendor/github.com/pkg/errors/LICENSE \ + vendor/github.com/pmezard/go-difflib/LICENSE \ + vendor/golang.org/x/crypto/LICENSE \ + vendor/golang.org/x/sys/LICENSE \ + vendor/golang.org/x/net/LICENSE \ + vendor/github.com/bmatsuo/lmdb-go/LICENSE.md \ + vendor/golang.org/x/text/LICENSE \ + vendor/github.com/remyoudompheng/go-liblzma/LICENSE \ + vendor/github.com/davecgh/go-spew/LICENSE \ + vendor/github.com/sirupsen/logrus/LICENSE \ + vendor/github.com/stretchr/testify/LICENSE \ + vendor/github.com/stretchr/testify/LICENCE.txt \ + vendor/github.com/stretchr/objx/LICENSE.md \ + vendor/github.com/ungerik/go-sysfs/LICENSE \ + vendor/github.com/urfave/cli/LICENSE \ + vendor/github.com/bmatsuo/lmdb-go/LICENSE.mdb.md + +MENDER_DEPENDENCIES = xz + +MENDER_LDFLAGS = -X github.com/mendersoftware/mender/conf.Version=$(MENDER_VERSION) + +MENDER_UPDATE_MODULES_FILES = \ + directory \ + script \ + single-file \ + $(if $(BR2_PACKAGE_DOCKER_CLI),docker) \ + $(if $(BR2_PACKAGE_RPM),rpm) + +define MENDER_INSTALL_CONFIG_FILES + $(INSTALL) -d -m 755 $(TARGET_DIR)/etc/mender/scripts + echo -n "3" > $(TARGET_DIR)/etc/mender/scripts/version + + $(INSTALL) -D -m 0644 $(MENDER_PKGDIR)/mender.conf \ + $(TARGET_DIR)/etc/mender/mender.conf + $(INSTALL) -D -m 0644 $(MENDER_PKGDIR)/server.crt \ + $(TARGET_DIR)/etc/mender/server.crt + + $(INSTALL) -D -m 0755 $(@D)/support/mender-device-identity \ + $(TARGET_DIR)/usr/share/mender/identity/mender-device-identity + $(foreach f,hostinfo network os rootfs-type, \ + $(INSTALL) -D -m 0755 $(@D)/support/mender-inventory-$(f) \ + $(TARGET_DIR)/usr/share/mender/inventory/mender-inventory-$(f) + ) + + $(INSTALL) -D -m 0755 $(MENDER_PKGDIR)/artifact_info \ + $(TARGET_DIR)/etc/mender/artifact_info + + $(INSTALL) -D -m 0755 $(MENDER_PKGDIR)/device_type \ + $(TARGET_DIR)/etc/mender/device_type + + mkdir -p $(TARGET_DIR)/var/lib + ln -snf /var/run/mender $(TARGET_DIR)/var/lib/mender + $(foreach f,$(MENDER_UPDATE_MODULES_FILES), \ + $(INSTALL) -D -m 0755 $(@D)/support/modules/$(notdir $(f)) \ + $(TARGET_DIR)/usr/share/mender/modules/v3/$(notdir $(f)) + ) +endef + +MENDER_POST_INSTALL_TARGET_HOOKS += MENDER_INSTALL_CONFIG_FILES + +define MENDER_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0644 $(MENDER_PKGDIR)/mender-client.service \ + $(TARGET_DIR)/usr/lib/systemd/system/mender-client.service +endef + +define MENDER_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 $(MENDER_PKGDIR)/S42mender \ + $(TARGET_DIR)/etc/init.d/S42mender +endef + +$(eval $(golang-package)) diff --git a/package/mender/readme.txt b/package/mender/readme.txt new file mode 100644 index 00000000..c884524a --- /dev/null +++ b/package/mender/readme.txt @@ -0,0 +1,154 @@ +=== Notes on using Mender on Buildroot +====================================== + +Mender is an open source over-the-air (OTA) software updater for +embedded Linux devices. Mender comprises a client running at the +embedded device, as well as a server that manages deployments across +many devices. There is also various tooling around the Mender project, +such as 'mender-artifact' which is used to create Mender Artifacts +that are compatible with the Mender client and server. + +Mender aims to address this challenge with a robust and easy to use +updater for embedded Linux devices, which is open source and available +to anyone. + +Robustness is ensured with atomic image-based deployments using a dual +A/B rootfs partition layout. This makes it always possible to roll +back to a working state, even when losing power at any time during the +update process. + +The official documentation is a good resource to get an in depth +understanding of how Mender works: + + https://docs.mender.io + +In Buildroot the following packages are provided: + +- BR2_PACKAGE_MENDER + - This will install the client on target rootfs +- BR2_PACKAGE_HOST_MENDER_ARTIFACT + - This will install the 'mender-artifact' tool in host rootfs. + +To fully utilize atomic image-based deployments using the A/B update +strategy, additional integration is required in the bootloader. This +integration is board specific. + +Currently supported bootloaders are GRUB and U-boot, and for reference +integrations please visit: + + https://github.com/mendersoftware/buildroot-mender + +Default configurations files +---------------------------- + +Buildroot comes with a default configuration and there a couple of +files that need your attention: + +- /etc/mender/mender.conf + - main configuration file for the Mender client + - https://docs.mender.io/client-configuration/configuration-file/configuration-options + +- /etc/mender/artifact_info + - The name of the image or update that will be built. This is what the + device will report that it is running, and different updates must have + different names + +- /var/lib/mender/device_type + - A string that defines the type of device + +Mender server configuration +--------------------------- + +The Mender server can be setup in different ways, and how you +configure the Mender client differs slightly depending on which server +environment is used. + +- Mender demo environment + +This is if you have followed the Getting started documentation where +you launch a Mender server locally and to configure your environment +to connect to this local server you need to provide the IP address of +the server on the local network. + +By default the demo environment will connect to 'docker.mender.io' and +'s3.docker.mender.io' and we need to make sure that these are resolved +to the local IP address of the running server by adding the following +entry to '/etc/hosts' + + docker.mender.io s3.docker.mender.io + +This is required because the communication between client and server +is utilizing TLS and the provided demo server certificate (server.crt) +is only valid for 'docker.mender.io' and 's3.docker.mender.io' +domains. + +- Hosted Mender + +To authenticate the Mender client with the Hosted Mender server you +need a tenant token. + +To get your tenant token: + +- log in to https://hosted.mender.io +- click your email at the top right and then “My organization” +- press the “COPY TO CLIPBOARD” +- assign content of clipboard to TenantToken + +Example mender.conf options for Hosted Mender: + + { + ... + "ServerURL": "https://hosted.mender.io", + "TenantToken": "" + ... + } + + +Creating Mender Artifacts +------------------------- + +To create Mender Artifacts based on Buildroot build output you must +include BR2_PACKAGE_HOST_MENDER_ARTIFACT in your configuration, and +then you would typically create the Mender Artifact in a post image +script (BR2_ROOTFS_POST_IMAGE_SCRIPT). Below is an example of such a +script: + + #!/bin/sh + + set -e + set -x + + device_type=$(cat ${TARGET_DIR}/var/lib/mender/device_type | sed 's/[^=]*=//') + artifact_name=$(cat ${TARGET_DIR}/etc/mender/artifact_info | sed 's/[^=]*=//') + + if [ -z "${device_type}" ] || [ -z "${artifact_name}" ]; then + echo "missing files required by Mender" + exit 1 + fi + + ${HOST_DIR}/usr/bin/mender-artifact write rootfs-image \ + --update ${BINARIES_DIR}/rootfs.ext4 \ + --output-path ${BINARIES_DIR}/${artifact_name}.mender \ + --artifact-name ${artifact_name} \ + --device-type ${device_type} + +As you can see some properties are extracted from target rootfs, and +this is because these values are used for compatibility checks, +meaning that the information must be present in both rootfs and in +Mender Artifact meta data. + +- device_type - must be an exact match between rootfs and Mender + Artifact meta-data to apply update. You can set an + array of devices here as well, e.g if your image is + compatible with multiple hardware revisions + +- artifact_name - must be an exact match between rootfs and Mender + Artifact meta-data to apply update. + +Configuring Mender with certificates +------------------------------------ + +Mender uses TLS to communicate with the management server, and if you +use a CA-signed certificate on the server, you must include +BR2_PACKAGE_CA_CERTIFICATES in your configuration to authenticate TLS +connections. diff --git a/package/mender/server.crt b/package/mender/server.crt new file mode 100644 index 00000000..79a57e15 --- /dev/null +++ b/package/mender/server.crt @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIBfTCCASOgAwIBAgIJAJOS76a0qWuZMAoGCCqGSM49BAMCMBsxGTAXBgNVBAMM +EGRvY2tlci5tZW5kZXIuaW8wHhcNMTYxMjE0MTk1MjQ2WhcNMjYxMjEyMTk1MjQ2 +WjAbMRkwFwYDVQQDDBBkb2NrZXIubWVuZGVyLmlvMFkwEwYHKoZIzj0CAQYIKoZI +zj0DAQcDQgAE7AVYis6MWGPGQYU1/tlLEnskRifDIhvkRb8Y4nQPekRkLkiBYYT3 +iJ46wHrnejbHaLstU9GRdKWOmOuU6HGdO6NQME4wHQYDVR0OBBYEFGOIU4q++Vz8 +9HuT1jg9V+wFeJcyMB8GA1UdIwQYMBaAFGOIU4q++Vz89HuT1jg9V+wFeJcyMAwG +A1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIhAPLnEeWPNeN7eDCEYRitBfyO +X1yf2kzOm4ohBE5GY9gzAiBCq7HOSkzQDkelmQCCCpGXf/UwYNgQJjSoeGfk0j1a +TQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIBhDCCASmgAwIBAgIJALQrf4QDot4IMAoGCCqGSM49BAMCMB4xHDAaBgNVBAMM +E3MzLmRvY2tlci5tZW5kZXIuaW8wHhcNMTYxMjE0MTk1MjQ2WhcNMjYxMjEyMTk1 +MjQ2WjAeMRwwGgYDVQQDDBNzMy5kb2NrZXIubWVuZGVyLmlvMFkwEwYHKoZIzj0C +AQYIKoZIzj0DAQcDQgAEEc/Y3T+l3DvINePkpvVZORMIdHVs29jgsl48ia7z/NRX +HlKtKxVGJyFN5Y7sBZeLgBYH3F4Bo3KfmxI7ad0tI6NQME4wHQYDVR0OBBYEFIUm +cip00QZYpe4ULflbGNJan+Y9MB8GA1UdIwQYMBaAFIUmcip00QZYpe4ULflbGNJa +n+Y9MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSQAwRgIhANHij9VZBDHOUPaC +pFiagnWnYL2HBR72W1xTKQbrLLTXAiEAvpwA4HzSnGmLd3010+jqQuMRHArN5WaX +h0fy7niBbIQ= +-----END CERTIFICATE----- diff --git a/package/menu-cache/0001-Support-gcc10-compilation.patch b/package/menu-cache/0001-Support-gcc10-compilation.patch new file mode 100644 index 00000000..5ef5d177 --- /dev/null +++ b/package/menu-cache/0001-Support-gcc10-compilation.patch @@ -0,0 +1,109 @@ +From 1ce739649b4d66339a03fc0ec9ee7a2f7c141780 Mon Sep 17 00:00:00 2001 +From: Mamoru TASAKA +Date: Fri, 24 Jan 2020 13:33:00 +0900 +Subject: [PATCH] Support gcc10 compilation + +gcc10 now defaults to -fno-common, and with gcc10 menu-cache compilation fails like + +/bin/ld: menu-merge.o:menu-cache-gen/menu-tags.h:167: multiple definition of `DirDirs'; main.o:menu-cache-gen/menu-tags.h:167: first defined here +/bin/ld: menu-merge.o:menu-cache-gen/menu-tags.h:164: multiple definition of `AppDirs'; main.o:menu-cache-gen/menu-tags.h:164: first defined here +/bin/ld: menu-merge.o:menu-cache-gen/menu-tags.h:52: multiple definition of `menuTag_Layout'; main.o:menu-cache-gen/menu-tags.h:52: first defined here +.... + +This patch fixes compilation with gcc10: properly declaring variables in header with "extern", and also removing some unneeded variables in header files. + +[Retrieved from: +https://github.com/lxde/menu-cache/pull/19/commits/1ce739649b4d66339a03fc0ec9ee7a2f7c141780] +Signed-off-by: Fabrice Fontaine +--- + menu-cache-gen/menu-tags.h | 55 ++++++++++++-------------------------- + 1 file changed, 17 insertions(+), 38 deletions(-) + +diff --git a/menu-cache-gen/menu-tags.h b/menu-cache-gen/menu-tags.h +index f3fd7d3..f71c0bc 100644 +--- a/menu-cache-gen/menu-tags.h ++++ b/menu-cache-gen/menu-tags.h +@@ -22,38 +22,17 @@ + #include + #include + +-FmXmlFileTag menuTag_Menu; +-FmXmlFileTag menuTag_AppDir; +-FmXmlFileTag menuTag_DefaultAppDirs; +-FmXmlFileTag menuTag_DirectoryDir; +-FmXmlFileTag menuTag_DefaultDirectoryDirs; +-FmXmlFileTag menuTag_Include; +-FmXmlFileTag menuTag_Exclude; +-FmXmlFileTag menuTag_Filename; +-FmXmlFileTag menuTag_Or; +-FmXmlFileTag menuTag_And; +-FmXmlFileTag menuTag_Not; +-FmXmlFileTag menuTag_Category; +-FmXmlFileTag menuTag_MergeFile; +-FmXmlFileTag menuTag_MergeDir; +-FmXmlFileTag menuTag_DefaultMergeDirs; +-FmXmlFileTag menuTag_Directory; +-FmXmlFileTag menuTag_Name; +-FmXmlFileTag menuTag_Deleted; +-FmXmlFileTag menuTag_NotDeleted; +-FmXmlFileTag menuTag_OnlyUnallocated; +-FmXmlFileTag menuTag_NotOnlyUnallocated; +-FmXmlFileTag menuTag_All; +-FmXmlFileTag menuTag_LegacyDir; +-FmXmlFileTag menuTag_KDELegacyDirs; +-FmXmlFileTag menuTag_Move; +-FmXmlFileTag menuTag_Old; +-FmXmlFileTag menuTag_New; +-FmXmlFileTag menuTag_Layout; +-FmXmlFileTag menuTag_DefaultLayout; +-FmXmlFileTag menuTag_Menuname; +-FmXmlFileTag menuTag_Separator; +-FmXmlFileTag menuTag_Merge; ++extern FmXmlFileTag menuTag_AppDir; ++extern FmXmlFileTag menuTag_DirectoryDir; ++extern FmXmlFileTag menuTag_Include; ++extern FmXmlFileTag menuTag_Exclude; ++extern FmXmlFileTag menuTag_Filename; ++extern FmXmlFileTag menuTag_Or; ++extern FmXmlFileTag menuTag_And; ++extern FmXmlFileTag menuTag_Not; ++extern FmXmlFileTag menuTag_Category; ++extern FmXmlFileTag menuTag_All; ++extern FmXmlFileTag menuTag_LegacyDir; + + typedef enum { + MERGE_NONE, /* starting value */ +@@ -152,19 +131,19 @@ typedef struct { + } MenuRule; + + /* requested language(s) */ +-char **languages; ++extern char **languages; + + /* list of menu files to monitor */ +-GSList *MenuFiles; ++extern GSList *MenuFiles; + + /* list of menu dirs to monitor */ +-GSList *MenuDirs; ++extern GSList *MenuDirs; + + /* list of available app dirs */ +-GSList *AppDirs; ++extern GSList *AppDirs; + + /* list of available dir dirs */ +-GSList *DirDirs; ++extern GSList *DirDirs; + + /* parse and merge menu files */ + MenuMenu *get_merged_menu(const char *file, FmXmlFile **xmlfile, GError **error); +@@ -177,7 +156,7 @@ gboolean save_menu_cache(MenuMenu *layout, const char *menuname, const char *fil + void _free_layout_items(GList *data); + + /* verbosity level */ +-gint verbose; ++extern gint verbose; + + #define DBG if (verbose) g_debug + #define VDBG if (verbose > 1) g_debug diff --git a/package/menu-cache/Config.in b/package/menu-cache/Config.in new file mode 100644 index 00000000..e61ca447 --- /dev/null +++ b/package/menu-cache/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_MENU_CACHE + bool "menu-cache" + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBFM_EXTRA + help + Small library from LXDE project used for application menu + integration + + http://wiki.lxde.org/ + +comment "menu-cache needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/menu-cache/menu-cache.hash b/package/menu-cache/menu-cache.hash new file mode 100644 index 00000000..a46a7070 --- /dev/null +++ b/package/menu-cache/menu-cache.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/lxde/files/menu-cache/1.1/ +md5 99999a0bca48b980105208760c8fd893 menu-cache-1.1.0.tar.xz +sha1 01e6035aa1fe76d7047bdec235254aa5ce17394a menu-cache-1.1.0.tar.xz + +# Hash for license file: +sha256 7459fbad62653e4061dbfde3b0cad7c72777838beb10d2d11d969fac6226e7de COPYING diff --git a/package/menu-cache/menu-cache.mk b/package/menu-cache/menu-cache.mk new file mode 100644 index 00000000..c2b8c3b7 --- /dev/null +++ b/package/menu-cache/menu-cache.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# menu-cache +# +################################################################################ + +MENU_CACHE_VERSION_MAJOR = 1.1 +MENU_CACHE_VERSION = $(MENU_CACHE_VERSION_MAJOR).0 +MENU_CACHE_SOURCE = menu-cache-$(MENU_CACHE_VERSION).tar.xz +MENU_CACHE_SITE = http://sourceforge.net/projects/lxde/files/menu-cache/$(MENU_CACHE_VERSION_MAJOR) +MENU_CACHE_DEPENDENCIES = libfm-extra libglib2 +MENU_CACHE_LICENSE = LGPL-2.1 +MENU_CACHE_LICENSE_FILES = COPYING +MENU_CACHE_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/mesa3d-demos/0001-demos-makes-opengl-an-optional-component.patch b/package/mesa3d-demos/0001-demos-makes-opengl-an-optional-component.patch new file mode 100644 index 00000000..b328fca8 --- /dev/null +++ b/package/mesa3d-demos/0001-demos-makes-opengl-an-optional-component.patch @@ -0,0 +1,88 @@ +From bb0ffae7164d296d32da24fa5499534de259169a Mon Sep 17 00:00:00 2001 +From: Spenser Gilliland +Date: Sat, 24 Feb 2018 11:36:17 +0100 +Subject: [PATCH] demos: makes opengl an optional component + +Signed-off-by: Spenser Gilliland +[Romain: convert to git patch, rebase on 8.4.0] +Signed-off-by: Romain Naour +--- + configure.ac | 12 +++++++++++- + src/egl/opengl/Makefile.am | 2 ++ + src/util/Makefile.am | 2 ++ + 3 files changed, 15 insertions(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 0b5e9a76..24298c44 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -51,6 +51,14 @@ m4_ifndef([PKG_PROG_PKG_CONFIG], + ACLOCAL="aclocal -I/other/macro/dir" before running autoreconf.])]) + PKG_PROG_PKG_CONFIG() + ++AC_ARG_ENABLE([gl], ++ [AS_HELP_STRING([--enable-gl], ++ [enable GL library @<:@default=no@:>@])], ++ [gl_enabled="$enableval"], ++ [gl_enabled=auto]) ++ ++if test "x$gl_enabled" != "xno"; then ++ + dnl Get the pkg-config definitions for libGL. We include a fallback + dnl path for GL implementation that don't provide a .pc file + PKG_CHECK_MODULES(GL, [gl], [], [ +@@ -112,6 +120,8 @@ PKG_CHECK_MODULES(GLU, [glu], [], + DEMO_CFLAGS="$DEMO_CFLAGS $GLU_CFLAGS" + DEMO_LIBS="$DEMO_LIBS $GLU_LIBS" + ++fi ++ + AC_ARG_ENABLE([egl], + [AS_HELP_STRING([--enable-egl], + [enable EGL library @<:@default=auto@:>@])], +@@ -302,7 +312,7 @@ AC_SUBST([MESA_GLAPI]) + AC_SUBST([WAYLAND_CFLAGS]) + AC_SUBST([WAYLAND_LIBS]) + +- ++AM_CONDITIONAL(HAVE_GL, test "x$gl_enabled" = "xyes") + AM_CONDITIONAL(HAVE_EGL, test "x$egl_enabled" = "xyes") + AM_CONDITIONAL(HAVE_GLESV1, test "x$glesv1_enabled" = "xyes") + AM_CONDITIONAL(HAVE_GLESV2, test "x$glesv2_enabled" = "xyes") +diff --git a/src/egl/opengl/Makefile.am b/src/egl/opengl/Makefile.am +index 6d184ff6..219ab850 100644 +--- a/src/egl/opengl/Makefile.am ++++ b/src/egl/opengl/Makefile.am +@@ -56,6 +56,7 @@ endif + endif + + if HAVE_EGL ++if HAVE_GL + bin_PROGRAMS = \ + eglinfo + noinst_PROGRAMS = \ +@@ -64,6 +65,7 @@ noinst_PROGRAMS = \ + $(EGL_X11_DEMOS) \ + $(EGL_WL_DEMOS) + endif ++endif + + egltri_x11_SOURCES = egltri.c + eglgears_x11_SOURCES = eglgears.c +diff --git a/src/util/Makefile.am b/src/util/Makefile.am +index 759a293a..012b9c75 100644 +--- a/src/util/Makefile.am ++++ b/src/util/Makefile.am +@@ -27,7 +27,9 @@ AM_CFLAGS = \ + AM_LDFLAGS = \ + $(DEMO_LIBS) + ++if HAVE_GL + noinst_LTLIBRARIES = libutil.la ++endif + + if HAVE_GLUT + AM_CFLAGS += \ +-- +2.14.3 + diff --git a/package/mesa3d-demos/Config.in b/package/mesa3d-demos/Config.in new file mode 100644 index 00000000..b716cf57 --- /dev/null +++ b/package/mesa3d-demos/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_MESA3D_DEMOS + bool "mesa3d-demos" + depends on BR2_PACKAGE_HAS_LIBGL || BR2_PACKAGE_HAS_LIBGLES \ + || BR2_PACKAGE_HAS_LIBEGL || BR2_PACKAGE_HAS_LIBOPENVG + select BR2_PACKAGE_LIBGLEW if BR2_PACKAGE_XORG7 && BR2_PACKAGE_HAS_LIBGL + select BR2_PACKAGE_LIBGLU if BR2_PACKAGE_XORG7 && BR2_PACKAGE_HAS_LIBGL + select BR2_PACKAGE_XLIB_LIBX11 if BR2_PACKAGE_XORG7 && BR2_PACKAGE_HAS_LIBGL + select BR2_PACKAGE_XLIB_LIBXEXT if BR2_PACKAGE_XORG7 && BR2_PACKAGE_HAS_LIBGL + help + OpenGL demos from the Mesa 3D project. + + http://mesa3d.org diff --git a/package/mesa3d-demos/mesa3d-demos.hash b/package/mesa3d-demos/mesa3d-demos.hash new file mode 100644 index 00000000..8a771df2 --- /dev/null +++ b/package/mesa3d-demos/mesa3d-demos.hash @@ -0,0 +1,5 @@ +# From https://lists.freedesktop.org/archives/mesa-dev/2018-February/186542.html +md5 6b65a02622765522176d00f553086fa3 mesa-demos-8.4.0.tar.bz2 +sha1 57ba892e919fa22ce3db9f25e7331a6fa33c652c mesa-demos-8.4.0.tar.bz2 +sha256 01e99c94a0184e63e796728af89bfac559795fb2a0d6f506fa900455ca5fff7d mesa-demos-8.4.0.tar.bz2 +sha512 b72d03cad36e0535ff18dcfb222ec4200064b9264f6da51a6e5f03b0dd912abe188bc1d600b6698de3ce6f63b28d2ce01565886ca8e7079edc4967fbf2fb0957 mesa-demos-8.4.0.tar.bz2 diff --git a/package/mesa3d-demos/mesa3d-demos.mk b/package/mesa3d-demos/mesa3d-demos.mk new file mode 100644 index 00000000..e9aa44dc --- /dev/null +++ b/package/mesa3d-demos/mesa3d-demos.mk @@ -0,0 +1,80 @@ +################################################################################ +# +# mesa3d-demos +# +################################################################################ + +MESA3D_DEMOS_VERSION = 8.4.0 +MESA3D_DEMOS_SOURCE = mesa-demos-$(MESA3D_DEMOS_VERSION).tar.bz2 +MESA3D_DEMOS_SITE = ftp://ftp.freedesktop.org/pub/mesa/demos +# 0001-demos-makes-opengl-an-optional-component.patch +MESA3D_DEMOS_AUTORECONF = YES +MESA3D_DEMOS_DEPENDENCIES = host-pkgconf +MESA3D_DEMOS_LICENSE = MIT + +MESA3D_DEMOS_CONF_OPTS += \ + --disable-gles1 + +ifeq ($(BR2_PACKAGE_XORG7)$(BR2_PACKAGE_HAS_LIBGL),yy) +MESA3D_DEMOS_DEPENDENCIES += libgl libglew libglu xlib_libX11 xlib_libXext +MESA3D_DEMOS_CONF_OPTS += --enable-gl --enable-x11 +else +MESA3D_DEMOS_CONF_OPTS += --disable-gl --disable-x11 +endif + +ifeq ($(BR2_PACKAGE_HAS_LIBEGL),y) +MESA3D_DEMOS_DEPENDENCIES += libegl +MESA3D_DEMOS_CONF_OPTS += --enable-egl +else +MESA3D_DEMOS_CONF_OPTS += --disable-egl +endif + +ifeq ($(BR2_PACKAGE_HAS_LIBGLES),y) +MESA3D_DEMOS_DEPENDENCIES += libgles +MESA3D_DEMOS_CONF_OPTS += --enable-gles2 +else +MESA3D_DEMOS_CONF_OPTS += --disable-gles2 +endif + +ifeq ($(BR2_PACKAGE_HAS_LIBOPENVG),y) +MESA3D_DEMOS_DEPENDENCIES += libopenvg +MESA3D_DEMOS_CONF_OPTS += --enable-vg +else +MESA3D_DEMOS_CONF_OPTS += --disable-vg +endif + +ifeq ($(BR2_PACKAGE_MESA3D_OPENGL_EGL),y) +MESA3D_DEMOS_DEPENDENCIES += mesa3d +MESA3D_DEMOS_CONF_OPTS += --enable-gbm +else +MESA3D_DEMOS_CONF_OPTS += --disable-gbm +endif + +ifeq ($(BR2_PACKAGE_FREETYPE),y) +MESA3D_DEMOS_DEPENDENCIES += freetype +MESA3D_DEMOS_CONF_OPTS += --enable-freetype2 +else +MESA3D_DEMOS_CONF_OPTS += --disable-freetype2 +endif + +ifeq ($(BR2_PACKAGE_LIBFREEGLUT),y) +MESA3D_DEMOS_DEPENDENCIES += libfreeglut +MESA3D_DEMOS_CONF_OPTS += --with-glut=$(STAGING_DIR)/usr +# osmesa support depends on glut +ifeq ($(BR2_PACKAGE_MESA3D_OSMESA_CLASSIC),y) +MESA3D_DEMOS_CONF_OPTS += --enable-osmesa +else +MESA3D_DEMOS_CONF_OPTS += --disable-osmesa +endif +else +MESA3D_DEMOS_CONF_OPTS += --without-glut --disable-osmesa +endif + +ifeq ($(BR2_PACKAGE_WAYLAND),y) +MESA3D_DEMOS_DEPENDENCIES += wayland +MESA3D_DEMOS_CONF_OPTS += --enable-wayland +else +MESA3D_DEMOS_CONF_OPTS += --disable-wayland +endif + +$(eval $(autotools-package)) diff --git a/package/mesa3d-headers/Config.in b/package/mesa3d-headers/Config.in new file mode 100644 index 00000000..c4efab67 --- /dev/null +++ b/package/mesa3d-headers/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_MESA3D_HEADERS + bool + help + Mesa 3D, an open-source implementation of the OpenGL + specification. + + This package only installs headers needed by other packages. + + http://mesa3d.org diff --git a/package/mesa3d-headers/dri.pc b/package/mesa3d-headers/dri.pc new file mode 100644 index 00000000..bd9a33b6 --- /dev/null +++ b/package/mesa3d-headers/dri.pc @@ -0,0 +1,10 @@ +prefix=/usr +libdir=${prefix}/lib +includedir=${prefix}/include + +dridriverdir=/usr/lib/dri + +Name: dri +Description: Direct Rendering Infrastructure +Version: @VERSION@ +Cflags: -I${includedir} diff --git a/package/mesa3d-headers/mesa3d-headers.hash b/package/mesa3d-headers/mesa3d-headers.hash new file mode 120000 index 00000000..137d0bea --- /dev/null +++ b/package/mesa3d-headers/mesa3d-headers.hash @@ -0,0 +1 @@ +../mesa3d/mesa3d.hash \ No newline at end of file diff --git a/package/mesa3d-headers/mesa3d-headers.mk b/package/mesa3d-headers/mesa3d-headers.mk new file mode 100644 index 00000000..2a03beb2 --- /dev/null +++ b/package/mesa3d-headers/mesa3d-headers.mk @@ -0,0 +1,77 @@ +################################################################################ +# +# mesa3d-headers +# +################################################################################ + +# mesa3d-headers is inherently incompatible with mesa3d, so error out +# if both are enabled. +ifeq ($(BR2_PACKAGE_MESA3D)$(BR2_PACKAGE_MESA3D_HEADERS),yy) +$(error mesa3d-headers enabled, but mesa3d enabled too) +endif + +# Not possible to directly refer to mesa3d variables, because of +# first/second expansion trickery... +MESA3D_HEADERS_VERSION = 20.3.5 +MESA3D_HEADERS_SOURCE = mesa-$(MESA3D_HEADERS_VERSION).tar.xz +MESA3D_HEADERS_SITE = https://mesa.freedesktop.org/archive +MESA3D_HEADERS_DL_SUBDIR = mesa3d +MESA3D_HEADERS_LICENSE = MIT, SGI, Khronos +MESA3D_HEADERS_LICENSE_FILES = docs/license.rst +MESA3D_HEADERS_CPE_ID_VENDOR = mesa3d +MESA3D_HEADERS_CPE_ID_PRODUCT = mesa + +# Only installs header files +MESA3D_HEADERS_INSTALL_STAGING = YES +MESA3D_HEADERS_INSTALL_TARGET = NO + +MESA3D_HEADERS_DIRS = KHR + +ifeq ($(BR2_PACKAGE_HAS_LIBGL),y) + +MESA3D_HEADERS_DIRS += GL + +ifeq ($(BR2_PACKAGE_XORG7),y) + +# Not using $(SED) because we do not want to work in-place, and $(SED) +# contains -i. +define MESA3D_HEADERS_BUILD_DRI_PC + sed -e 's:@VERSION@:$(MESA3D_HEADERS_VERSION):' \ + package/mesa3d-headers/dri.pc \ + >$(@D)/src/mesa/drivers/dri/dri.pc +endef + +define MESA3D_HEADERS_INSTALL_DRI_PC + $(INSTALL) -D -m 0644 $(@D)/include/GL/internal/dri_interface.h \ + $(STAGING_DIR)/usr/include/GL/internal/dri_interface.h + $(INSTALL) -D -m 0644 $(@D)/src/mesa/drivers/dri/dri.pc \ + $(STAGING_DIR)/usr/lib/pkgconfig/dri.pc +endef + +endif # Xorg + +endif # OpenGL + +ifeq ($(BR2_PACKAGE_HAS_LIBEGL),y) +MESA3D_HEADERS_DIRS += EGL +endif + +ifeq ($(BR2_PACKAGE_HAS_LIBGLES),y) +MESA3D_HEADERS_DIRS += GLES GLES2 +endif + +ifeq ($(BR2_PACKAGE_HAS_LIBOPENCL),y) +MESA3D_HEADERS_DIRS += CL +endif + +define MESA3D_HEADERS_BUILD_CMDS + $(MESA3D_HEADERS_BUILD_DRI_PC) +endef + +define MESA3D_HEADERS_INSTALL_STAGING_CMDS + $(foreach d,$(MESA3D_HEADERS_DIRS),\ + cp -dpfr $(@D)/include/$(d) $(STAGING_DIR)/usr/include/ || exit 1$(sep)) + $(MESA3D_HEADERS_INSTALL_DRI_PC) +endef + +$(eval $(generic-package)) diff --git a/package/mesa3d/0001-c99_math-import-isinf-for-uclibc-based-toolchains.patch b/package/mesa3d/0001-c99_math-import-isinf-for-uclibc-based-toolchains.patch new file mode 100644 index 00000000..5acbaa4d --- /dev/null +++ b/package/mesa3d/0001-c99_math-import-isinf-for-uclibc-based-toolchains.patch @@ -0,0 +1,30 @@ +From 705490763fcc052defa2d49a5c5200775cd12c54 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Wed, 4 Mar 2020 08:27:24 +0100 +Subject: [PATCH] c99_math: import isinf for uclibc based toolchains + +The same fix as for glibc >= 2.23 is needed for uclibc +based toolchains. + +[Upstream suggested: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4042] +Signed-off-by: Peter Seiderer +--- + include/c99_math.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/include/c99_math.h b/include/c99_math.h +index e906c26aa54..c8a73a2d2c7 100644 +--- a/include/c99_math.h ++++ b/include/c99_math.h +@@ -190,7 +190,7 @@ fpclassify(double x) + * undefines those functions, which in glibc 2.23, are defined as macros rather + * than functions as in glibc 2.22. + */ +-#if __cplusplus >= 201103L && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 23)) ++#if __cplusplus >= 201103L && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 23) || defined(__UCLIBC__)) + #include + + using std::fpclassify; +-- +2.25.1 + diff --git a/package/mesa3d/0002-meson-Set-proper-value-for-LIBCLC_INCLUDEDIR.patch b/package/mesa3d/0002-meson-Set-proper-value-for-LIBCLC_INCLUDEDIR.patch new file mode 100644 index 00000000..e3c70c3f --- /dev/null +++ b/package/mesa3d/0002-meson-Set-proper-value-for-LIBCLC_INCLUDEDIR.patch @@ -0,0 +1,41 @@ +From 7b46756a99aca7f27a45c3b99460f088570f6f53 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Wed, 17 Apr 2019 23:07:42 +0200 +Subject: [PATCH] meson: Set proper value for LIBCLC_INCLUDEDIR + +LIBCLC_INCLUDEDIR is the location where mesa3d OpenCL implementation +will look for OpenCL "headers" on the target, when building the OpenCL +kernels. + +The value returned by pkg-config for includedir is relevant when +cross-compiling, on the build machine. But in this specific case, we +really need a value that is valid on the target. + +Those headers are installed by the libclc package in /usr/share so +that they are not removed by Buildroot target-finalize logic. + +Based on the patch for autotools provided by Valentin Korenblit. + +Signed-off-by: Romain Naour +Signed-off-by: Bernd Kuhls +[rebased for 20.2.0 & 20.3.0] +--- + src/gallium/frontends/clover/meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/gallium/frontends/clover/meson.build b/src/gallium/frontends/clover/meson.build +index 62ac5f5278d..ecdeb39669c 100644 +--- a/src/gallium/frontends/clover/meson.build ++++ b/src/gallium/frontends/clover/meson.build +@@ -27,7 +27,7 @@ + '-DCL_USE_DEPRECATED_OPENCL_2_0_APIS', + '-DCL_USE_DEPRECATED_OPENCL_2_1_APIS', + '-DCL_USE_DEPRECATED_OPENCL_2_2_APIS', +- '-DLIBCLC_INCLUDEDIR="@0@/"'.format(dep_clc.get_variable(pkgconfig : 'includedir')), ++ '-DLIBCLC_INCLUDEDIR="/usr/share"', + '-DLIBCLC_LIBEXECDIR="@0@/"'.format(dep_clc.get_variable(pkgconfig : 'libexecdir')) + ] + clover_spirv_cpp_args = [] +-- +2.20.1 + diff --git a/package/mesa3d/0003-vc4-add-meson-option-to-disable-optional-neon-suppor.patch b/package/mesa3d/0003-vc4-add-meson-option-to-disable-optional-neon-suppor.patch new file mode 100644 index 00000000..39e40236 --- /dev/null +++ b/package/mesa3d/0003-vc4-add-meson-option-to-disable-optional-neon-suppor.patch @@ -0,0 +1,84 @@ +From e3b47c1b84964c62b3e1fa782f1ffa4be0ae62f9 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Mon, 9 Mar 2020 13:01:14 +0100 +Subject: [PATCH] vc4: add meson option to disable optional neon support + +Not all toolchains are able to compile the runtime +optional vc4 neon support, so add an meson option +to force disabling it at compile time. + +[Upstream: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4114] +Signed-off-by: Peter Seiderer +Signed-off-by: Bernd Kuhls +[rebased for 20.2.0 & 20.3.0] +--- + meson_options.txt | 7 +++++++ + src/gallium/drivers/vc4/meson.build | 4 ++-- + src/gallium/drivers/vc4/vc4_tiling.h | 4 ++-- + 3 files changed, 11 insertions(+), 4 deletions(-) + +diff --git a/meson_options.txt b/meson_options.txt +index a39596a6f19..0f6b6c62b55 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -123,6 +123,13 @@ option( + choices : ['auto', 'true', 'false', 'enabled', 'disabled'], + description : 'enable gallium va frontend.', + ) ++option( ++ 'gallium-vc4-neon', ++ type : 'combo', ++ value : 'auto', ++ choices : ['auto', 'disabled'], ++ description : 'enable gallium vc4 optional neon support.', ++) + option( + 'va-libs-path', + type : 'string', +diff --git a/src/gallium/drivers/vc4/meson.build b/src/gallium/drivers/vc4/meson.build +index 5ce5af5f6b4..e3f7d8d62ae 100644 +--- a/src/gallium/drivers/vc4/meson.build ++++ b/src/gallium/drivers/vc4/meson.build +@@ -84,7 +84,7 @@ files_libvc4 = files( + vc4_c_args = [] + + libvc4_neon = [] +-if host_machine.cpu_family() == 'arm' ++if host_machine.cpu_family() == 'arm' and get_option('gallium-vc4-neon') != 'disabled' + libvc4_neon = static_library( + 'vc4_neon', + 'vc4_tiling_lt_neon.c', +@@ -93,7 +93,7 @@ if host_machine.cpu_family() == 'arm' + ], + c_args : '-mfpu=neon', + ) +- vc4_c_args += '-DUSE_ARM_ASM' ++ vc4_c_args += '-DVC4_TILING_LT_NEON' + endif + + if dep_simpenrose.found() +diff --git a/src/gallium/drivers/vc4/vc4_tiling.h b/src/gallium/drivers/vc4/vc4_tiling.h +index 66767e7f1f8..7446f1c3d0c 100644 +--- a/src/gallium/drivers/vc4/vc4_tiling.h ++++ b/src/gallium/drivers/vc4/vc4_tiling.h +@@ -89,7 +89,7 @@ vc4_load_lt_image(void *dst, uint32_t dst_stride, + void *src, uint32_t src_stride, + int cpp, const struct pipe_box *box) + { +-#ifdef USE_ARM_ASM ++#ifdef VC4_TILING_LT_NEON + if (util_cpu_caps.has_neon) { + vc4_load_lt_image_neon(dst, dst_stride, src, src_stride, + cpp, box); +@@ -105,7 +105,7 @@ vc4_store_lt_image(void *dst, uint32_t dst_stride, + void *src, uint32_t src_stride, + int cpp, const struct pipe_box *box) + { +-#ifdef USE_ARM_ASM ++#ifdef VC4_TILING_LT_NEON + if (util_cpu_caps.has_neon) { + vc4_store_lt_image_neon(dst, dst_stride, src, src_stride, + cpp, box); +-- +2.25.1 + diff --git a/package/mesa3d/0004-src-util-rand_xor-Include-stddef.h-to-fix-build-erro.patch b/package/mesa3d/0004-src-util-rand_xor-Include-stddef.h-to-fix-build-erro.patch new file mode 100644 index 00000000..538aa74e --- /dev/null +++ b/package/mesa3d/0004-src-util-rand_xor-Include-stddef.h-to-fix-build-erro.patch @@ -0,0 +1,40 @@ +From fdc8b5a205e2116408aeb9fd305e57f656e2e89d Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Sun, 9 Aug 2020 17:06:26 +0200 +Subject: [PATCH] src/util/rand_xor: Include stddef.h to fix build error +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Fixes + +In file included from ../src/util/rand_xor.c:29: +output/host/x86_64-buildroot-linux-uclibc/sysroot/usr/include/sys/random.h:27:35: + error: unknown type name ‘size_t’ + extern int getrandom(void *__buf, size_t count, unsigned int flags) + +seen with gcc version 8.3.0 (Buildroot 2020.02) and uClibc. + +Patch sent upstream: +https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6248 + +Signed-off-by: Bernd Kuhls +--- + src/util/rand_xor.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/util/rand_xor.c b/src/util/rand_xor.c +index 81b64f1ea71..fcb481487fa 100644 +--- a/src/util/rand_xor.c ++++ b/src/util/rand_xor.c +@@ -25,6 +25,7 @@ + #include "detect_os.h" + + #if !DETECT_OS_WINDOWS ++#include + #if defined(HAVE_GETRANDOM) + #include + #endif +-- +2.27.0 + diff --git a/package/mesa3d/Config.in b/package/mesa3d/Config.in new file mode 100644 index 00000000..1104071e --- /dev/null +++ b/package/mesa3d/Config.in @@ -0,0 +1,476 @@ +menuconfig BR2_PACKAGE_MESA3D + bool "mesa3d" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_SYNC_1 + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + select BR2_PACKAGE_EXPAT + select BR2_PACKAGE_LIBDRM + select BR2_PACKAGE_WAYLAND_PROTOCOLS if BR2_PACKAGE_WAYLAND + select BR2_PACKAGE_ZLIB + help + Mesa 3D, an open-source implementation of the OpenGL + specification. + + http://mesa3d.org + +if BR2_PACKAGE_MESA3D + +# Some Gallium driver needs libelf when built with LLVM support +config BR2_PACKAGE_MESA3D_NEEDS_ELFUTILS + bool + +config BR2_PACKAGE_MESA3D_LLVM + bool "llvm support" + depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # std::shared_future + depends on !BR2_STATIC_LIBS + depends on BR2_USE_WCHAR # std::wstring + select BR2_PACKAGE_LLVM + +comment "llvm support needs a toolchain w/ wchar, threads, C++, gcc >= 4.8, dynamic library" + depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 \ + || BR2_STATIC_LIBS || !BR2_USE_WCHAR + +comment "llvm support needs a toolchain not affected by GCC bug 64735" + depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 + +# clang and libclc dependencies are satisfied by +# BR2_PACKAGE_MESA3D_LLVM +config BR2_PACKAGE_MESA3D_OPENCL + bool "OpenCL support" + depends on BR2_PACKAGE_MESA3D_LLVM + depends on BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600 || \ + BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_RADEONSI + select BR2_PACKAGE_LLVM_RTTI + select BR2_PACKAGE_CLANG + select BR2_PACKAGE_LIBCLC + select BR2_PACKAGE_HAS_LIBOPENCL + +# inform the .mk file of gallium, dri or vulkan driver selection +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + bool + select BR2_PACKAGE_MESA3D_DRIVER + +config BR2_PACKAGE_MESA3D_DRI_DRIVER + bool + select BR2_PACKAGE_MESA3D_DRIVER + select BR2_PACKAGE_MESA3D_GBM if \ + !BR2_PACKAGE_MESA3D_OPENGL_GLX && \ + !BR2_PACKAGE_MESA3D_OPENGL_EGL && \ + !BR2_PACKAGE_MESA3D_OSMESA_CLASSIC + select BR2_PACKAGE_XLIB_LIBXSHMFENCE if \ + (BR2_PACKAGE_XORG7 && BR2_TOOLCHAIN_HAS_SYNC_4 && \ + !BR2_RISCV_32) + +config BR2_PACKAGE_MESA3D_VULKAN_DRIVER + bool + select BR2_PACKAGE_MESA3D_DRIVER + +config BR2_PACKAGE_MESA3D_DRIVER + bool + +# Gallium xa state tracker. +# Quote from mesa3d meson.build: "XA state tracker requires at least +# one of the following gallium drivers: nouveau, freedreno, i915, svga. +config BR2_PACKAGE_MESA3D_NEEDS_XA + bool + +# Quote from mesa3d meson.build: "kmsro driver requires one or more +# renderonly drivers (vc4, etnaviv, freedreno)". +config BR2_PACKAGE_MESA3D_GALLIUM_KMSRO + bool + +# OpenGL GLX and Gallium VDPAU both needs X11 +config BR2_PACKAGE_MESA3D_NEEDS_X11 + bool + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_LIBXCB + select BR2_PACKAGE_XLIB_LIBX11 + select BR2_PACKAGE_XLIB_LIBXDAMAGE + select BR2_PACKAGE_XLIB_LIBXEXT + select BR2_PACKAGE_XLIB_LIBXFIXES + select BR2_PACKAGE_XLIB_LIBXRANDR + select BR2_PACKAGE_XLIB_LIBXXF86VM + select BR2_PACKAGE_XORGPROTO + +comment "Gallium drivers" + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_ETNAVIV + bool "Gallium Etnaviv driver" + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_LIBDRM_ETNAVIV + select BR2_PACKAGE_MESA3D_GALLIUM_KMSRO + help + Mesa driver for Vivante GPUs. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_FREEDRENO + bool "Gallium freedreno driver" + depends on BR2_arm || BR2_aarch64 || BR2_aarch64_be # libdrm-freedreno + # libdrm's freedreno option depends on LIBDRM_HAS_ATOMIC. Propagating + # that dependency here causes a circular dependency that Kconfig + # can't see is just spurious. However, that dependency is about + # the toolchain having sync4 primitives, which is always a given + # for arm/aarch64. + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_LIBDRM_FREEDRENO + select BR2_PACKAGE_MESA3D_GALLIUM_KMSRO + help + Mesa driver for Freedreno GPUs. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_I915 + bool "Gallium i915 driver" + depends on BR2_i386 || BR2_x86_64 + depends on !BR2_PACKAGE_MESA3D_DRI_DRIVER_I915 + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_LIBDRM_INTEL + help + Support for i915-based Intel GPUs. + +comment "Gallium i915: Only one i915 provider can be built" + depends on BR2_i386 || BR2_x86_64 + depends on BR2_PACKAGE_MESA3D_DRI_DRIVER_I915 + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_IRIS + bool "Gallium iris driver" + depends on BR2_i386 || BR2_x86_64 + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + help + Mesa driver for iris-based Intel GPUs. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_KMSRO + bool "Gallium KMSRO driver" + depends on BR2_PACKAGE_MESA3D_GALLIUM_KMSRO + help + Support various sorts of KMS displays with the + renderonly layer used to attach a GPU. + +comment "Gallium KMSRO needs one or more renderonly drivers" + depends on !BR2_PACKAGE_MESA3D_GALLIUM_KMSRO + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_LIMA + bool "Gallium lima driver" + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_MESA3D_GALLIUM_KMSRO + help + Mesa driver for ARM Mali Utgard GPUs. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU + bool "Gallium nouveau driver" + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_LIBDRM_NOUVEAU + select BR2_PACKAGE_MESA3D_NEEDS_XA + select BR2_PACKAGE_LLVM_RTTI if BR2_PACKAGE_MESA3D_LLVM + help + Supports all Nvidia GPUs. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_PANFROST + bool "Gallium panfrost driver" + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_MESA3D_GALLIUM_KMSRO + help + Mesa driver for ARM Mali Midgard and Bifrost GPUs. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R300 + bool "Gallium Radeon R300 driver" + depends on BR2_i386 || BR2_x86_64 + # lbdrm's radeon option depends on LIBDRM_HAS_ATOMIC. Propagating + # that dependency here causes a circular dependency that Kconfig + # can't see is just spurious. However, that dependency is about + # the toolchain having sync4 primitives, which is always a given + # for x86. + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_LIBDRM_RADEON + help + Driver for ATI/AMD Radeon R300/R400/R500 GPUs. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600 + bool "Gallium Radeon R600 driver" + depends on BR2_i386 || BR2_x86_64 + depends on !BR2_PACKAGE_MESA3D_LLVM || \ + (BR2_PACKAGE_MESA3D_LLVM && (BR2_TOOLCHAIN_USES_UCLIBC || \ + BR2_TOOLCHAIN_USES_GLIBC)) # elfutils + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_LIBDRM_RADEON + select BR2_PACKAGE_LLVM_AMDGPU if BR2_PACKAGE_MESA3D_LLVM + select BR2_PACKAGE_ELFUTILS if BR2_PACKAGE_MESA3D_LLVM + select BR2_PACKAGE_MESA3D_NEEDS_ELFUTILS if BR2_PACKAGE_MESA3D_LLVM + help + Driver for ATI/AMD Radeon R600/R700/HD5000/HD6000 GPUs. + +# R600 needs libelf when Mesa3D is built with LLVM support +# musl is not currently compatible with elfutils +comment "R600 driver needs a uClibc or glibc toolchain when llvm is enabled" + depends on BR2_PACKAGE_MESA3D_LLVM + depends on !(BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC) + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_RADEONSI + bool "Gallium Radeon SI driver" + depends on BR2_USE_MMU # libdrm + depends on BR2_i386 || BR2_x86_64 + depends on BR2_PACKAGE_MESA3D_LLVM + depends on BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC # elfutils + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_LIBDRM_AMDGPU + select BR2_PACKAGE_LIBDRM_RADEON + select BR2_PACKAGE_LLVM_AMDGPU + select BR2_PACKAGE_ELFUTILS + select BR2_PACKAGE_MESA3D_NEEDS_ELFUTILS + help + Driver for ATI/AMD Radeon HD7000/HD8000/Rx200 GPUs. + +# Radeon SI needs libelf +# musl is not currently compatible with elfutils +comment "Radeon SI driver needs a uClibc or glibc toolchain" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_MESA3D_LLVM + depends on !(BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC) + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_SVGA + bool "Gallium vmware svga driver" + depends on BR2_i386 || BR2_x86_64 + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_LIBDRM_VMWGFX + select BR2_PACKAGE_MESA3D_NEEDS_XA + help + This is a virtual GPU driver for VMWare virtual machines. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_SWRAST + bool "Gallium swrast driver" + depends on !BR2_PACKAGE_MESA3D_DRI_DRIVER_SWRAST + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + help + This is a software opengl implementation using the Gallium3D + infrastructure. + +comment "Gallium swrast: Only one swrast provider can be built" + depends on BR2_PACKAGE_MESA3D_DRI_DRIVER_SWRAST + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_TEGRA + bool "Gallium tegra driver" + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU + select BR2_PACKAGE_LIBDRM_NOUVEAU + select BR2_PACKAGE_MESA3D_NEEDS_XA + help + Adds support for Nvidia Tegra GPUs, requires nouveau. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_V3D + bool "Gallium v3d driver" + depends on (BR2_arm && BR2_ARM_CPU_HAS_NEON) || BR2_aarch64 + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_MESA3D_GALLIUM_KMSRO + select BR2_PACKAGE_LIBDRM_VC4 + select BR2_PACKAGE_MESA3D_OPENGL_EGL + help + Driver for Broadcom VC6 (rpi4) GPUs (needs kmsro and vc4). + + It requires a kernel 4.18+ with DRM V3D support enabled: + + - CONFIG_DRM_V3D + - CONFIG_DRM_VC4 + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_VC4 + bool "Gallium vc4 driver" + depends on BR2_arm || BR2_aarch64 + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_MESA3D_GALLIUM_KMSRO + select BR2_PACKAGE_LIBDRM_VC4 + select BR2_PACKAGE_MESA3D_OPENGL_EGL + help + Driver for Broadcom VC4 (rpi2/3) GPUs. + It requires a vanilla 4.5+ kernel with drm vc4 (open) support. + +config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_VIRGL + bool "Gallium virgl driver" + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER + select BR2_PACKAGE_MESA3D_OPENGL_EGL + help + virgl is the 3D acceleration backend for the virtio-gpu + shipping with qemu. + +config BR2_PACKAGE_MESA3D_VDPAU + bool "Gallium VDPAU state tracker" + depends on BR2_PACKAGE_XORG7 + depends on BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU \ + || BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R300 \ + || BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600 \ + || BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_RADEONSI + select BR2_PACKAGE_MESA3D_NEEDS_X11 + select BR2_PACKAGE_LIBVDPAU + help + VDPAU state tracker (needs r300, r600, radeonsi or nouveau + gallium drivers). + +comment "Gallium VDPAU state tracker needs X.org and gallium drivers r300, r600, radeonsi or nouveau" + depends on !BR2_PACKAGE_XORG7 || \ + !(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU \ + || BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R300 \ + || BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600 \ + || BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_RADEONSI) + +config BR2_PACKAGE_MESA3D_XVMC + bool "Gallium XvMC state tracker" + depends on BR2_i386 || BR2_x86_64 + depends on BR2_PACKAGE_XORG7 + depends on BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU \ + || BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600 + select BR2_PACKAGE_MESA3D_NEEDS_X11 + select BR2_PACKAGE_XLIB_LIBXV + select BR2_PACKAGE_XLIB_LIBXVMC + help + XvMC state tracker (needs r600 or nouveau gallium drivers). + +comment "Gallium XvMC state tracker needs X.org and gallium drivers r600 or nouveau" + depends on BR2_i386 || BR2_x86_64 + depends on !BR2_PACKAGE_XORG7 || \ + !(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU \ + || BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600) + +comment "DRI drivers" + +config BR2_PACKAGE_MESA3D_DRI_DRIVER_SWRAST + bool "DRI swrast driver" + select BR2_PACKAGE_MESA3D_DRI_DRIVER + help + This is a software opengl implementation using the DRI + infrastructure. + +config BR2_PACKAGE_MESA3D_DRI_DRIVER_I915 + bool "DRI i915 driver" + depends on BR2_i386 || BR2_x86_64 + select BR2_PACKAGE_MESA3D_DRI_DRIVER + select BR2_PACKAGE_LIBDRM_INTEL + help + Support for i915-based Intel GPUs. + +config BR2_PACKAGE_MESA3D_DRI_DRIVER_I965 + bool "DRI i965 driver" + depends on BR2_i386 || BR2_x86_64 + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 # memfd.h + select BR2_PACKAGE_MESA3D_DRI_DRIVER + select BR2_PACKAGE_LIBDRM_INTEL + help + Support for i965-based Intel GPUs. + +comment "DRI i965 driver needs a toolchain w/ headers >= 3.17" + depends on BR2_i386 || BR2_x86_64 + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 + +config BR2_PACKAGE_MESA3D_DRI_DRIVER_NOUVEAU + bool "DRI nouveau driver" + select BR2_PACKAGE_MESA3D_DRI_DRIVER + select BR2_PACKAGE_LIBDRM_NOUVEAU + help + Support for Nvidia-based GPUs. + +config BR2_PACKAGE_MESA3D_DRI_DRIVER_RADEON + bool "DRI radeon r100 driver" + depends on BR2_i386 || BR2_x86_64 + # libdrm's radeon option depends on LIBDRM_HAS_ATOMIC. Propagating + # that dependency here causes a circular dependency that Kconfig + # can't see is just spurious. However, that dependency is about + # the toolchain having sync4 primitives, which is always a given + # for i386 and x86_64. + select BR2_PACKAGE_MESA3D_DRI_DRIVER + select BR2_PACKAGE_LIBDRM_RADEON + help + Legacy Radeon driver for R100 series GPUs. + +comment "Vulkan drivers" + +config BR2_PACKAGE_MESA3D_VULKAN_DRIVER_INTEL + bool "Vulkan Intel driver" + depends on BR2_i386 || BR2_x86_64 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # libxshmfence + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 # memfd.h + depends on BR2_TOOLCHAIN_USES_GLIBC # ifunc, static_assert + depends on BR2_PACKAGE_XORG7 # xorgproto + select BR2_PACKAGE_MESA3D_VULKAN_DRIVER + select BR2_PACKAGE_XORGPROTO + select BR2_PACKAGE_XLIB_LIBXSHMFENCE + help + Vulkan driver for Intel hardware from Ivy Bridge onward. + +comment "intel vulkan depends on X.org and needs a glibc toolchain w/ headers >= 3.17" + depends on BR2_i386 || BR2_x86_64 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 || \ + !BR2_TOOLCHAIN_USES_GLIBC || !BR2_PACKAGE_XORG7 + +comment "Off-screen Rendering" + +config BR2_PACKAGE_MESA3D_OSMESA_CLASSIC + bool "OSMesa (classic) library" + help + The OSMesa classic API provides functions for + making off-screen renderings. + +if BR2_PACKAGE_MESA3D_DRIVER + +comment "OpenGL API Support" + +config BR2_PACKAGE_MESA3D_GBM + bool "gbm" + depends on BR2_PACKAGE_MESA3D_DRI_DRIVER \ + || (BR2_PACKAGE_MESA3D_GALLIUM_DRIVER && BR2_PACKAGE_MESA3D_OPENGL_EGL) + help + Enable Generic Buffer Management (gbm) + +comment "gbm support needs a dri driver or a gallium driver w/ EGL support." + depends on !BR2_PACKAGE_MESA3D_DRI_DRIVER \ + && !(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER && BR2_PACKAGE_MESA3D_OPENGL_EGL) + +config BR2_PACKAGE_MESA3D_OPENGL_GLX + bool "OpenGL GLX" + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_HAS_LIBGL + select BR2_PACKAGE_MESA3D_NEEDS_X11 + help + Enable GLX graphic acceleration (OpenGL + X11). + +comment "OpenGL GLX support needs X11" + depends on !BR2_PACKAGE_XORG7 + +config BR2_PACKAGE_MESA3D_OPENGL_EGL + bool "OpenGL EGL" + select BR2_PACKAGE_HAS_LIBEGL + select BR2_PACKAGE_HAS_LIBEGL_WAYLAND + select BR2_PACKAGE_MESA3D_GBM + help + Use the Khronos EGL APIs. EGL is a window manager for OpenGL + applications similar to GLX, for X, and WGL, for Windows. + +config BR2_PACKAGE_MESA3D_OPENGL_ES + bool "OpenGL ES" + select BR2_PACKAGE_HAS_LIBGLES + help + Use the Khronos OpenGL ES APIs. This is commonly used on + embedded systems and represents a subset of the OpenGL API. + +endif # BR2_PACKAGE_MESA3D_DRIVER + +config BR2_PACKAGE_PROVIDES_LIBGL + default "mesa3d" if BR2_PACKAGE_MESA3D_OPENGL_GLX + +config BR2_PACKAGE_PROVIDES_LIBEGL + default "mesa3d" if BR2_PACKAGE_MESA3D_OPENGL_EGL + +config BR2_PACKAGE_PROVIDES_LIBGLES + default "mesa3d" if BR2_PACKAGE_MESA3D_OPENGL_ES + +config BR2_PACKAGE_PROVIDES_LIBOPENCL + default "mesa3d" if BR2_PACKAGE_MESA3D_OPENCL + +endif # BR2_PACKAGE_MESA3D + +comment "mesa3d needs a toolchain w/ C++, NPTL, dynamic library" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS_NPTL || \ + BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_SYNC_1 diff --git a/package/mesa3d/mesa3d.hash b/package/mesa3d/mesa3d.hash new file mode 100644 index 00000000..3d357582 --- /dev/null +++ b/package/mesa3d/mesa3d.hash @@ -0,0 +1,6 @@ +# From https://lists.freedesktop.org/archives/mesa-announce/2021-March/000623.html +sha256 909a72df63dfa3c0844ccf44a26ac028d148297ed333ab51560893923d7691ce mesa-20.3.5.tar.xz +sha512 481e710ed80d8f215a8d541cfe51b960862c2403c2b9e7e6932c8236b8decb5d478871d6c73559d6d795ada143803764f3a93b2329588c80f62e2e5ec98c78a9 mesa-20.3.5.tar.xz + +# License +sha256 1361129baa4519b6ed27a1bf4aeee33a58b060bf7bb9b6ea415ecede04e35e46 docs/license.rst diff --git a/package/mesa3d/mesa3d.mk b/package/mesa3d/mesa3d.mk new file mode 100644 index 00000000..36ea72f8 --- /dev/null +++ b/package/mesa3d/mesa3d.mk @@ -0,0 +1,264 @@ +################################################################################ +# +# mesa3d +# +################################################################################ + +# When updating the version, please also update mesa3d-headers +MESA3D_VERSION = 20.3.5 +MESA3D_SOURCE = mesa-$(MESA3D_VERSION).tar.xz +MESA3D_SITE = https://mesa.freedesktop.org/archive +MESA3D_LICENSE = MIT, SGI, Khronos +MESA3D_LICENSE_FILES = docs/license.rst +MESA3D_CPE_ID_VENDOR = mesa3d +MESA3D_CPE_ID_PRODUCT = mesa + +MESA3D_INSTALL_STAGING = YES + +MESA3D_PROVIDES = + +MESA3D_DEPENDENCIES = \ + host-bison \ + host-flex \ + host-python3-mako \ + expat \ + libdrm \ + zlib + +MESA3D_CONF_OPTS = \ + -Dgallium-omx=disabled \ + -Dpower8=disabled + +# Codesourcery ARM 2014.05 fail to link libmesa_dri_drivers.so with --as-needed linker +# flag due to a linker bug between binutils 2.24 and 2.25 (2.24.51.20140217). +ifeq ($(BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM),y) +MESA3D_CONF_OPTS += -Db_asneeded=false +endif + +ifeq ($(BR2_PACKAGE_MESA3D_LLVM),y) +MESA3D_DEPENDENCIES += host-llvm llvm +MESA3D_MESON_EXTRA_BINARIES += llvm-config='$(STAGING_DIR)/usr/bin/llvm-config' +MESA3D_CONF_OPTS += -Dllvm=enabled +else +# Avoid automatic search of llvm-config +MESA3D_CONF_OPTS += -Dllvm=disabled +endif + +# Disable opencl-icd: OpenCL lib will be named libOpenCL instead of +# libMesaOpenCL and CL headers are installed +ifeq ($(BR2_PACKAGE_MESA3D_OPENCL),y) +MESA3D_PROVIDES += libopencl +MESA3D_DEPENDENCIES += clang libclc +MESA3D_CONF_OPTS += -Dgallium-opencl=standalone +else +MESA3D_CONF_OPTS += -Dgallium-opencl=disabled +endif + +ifeq ($(BR2_PACKAGE_MESA3D_NEEDS_ELFUTILS),y) +MESA3D_DEPENDENCIES += elfutils +endif + +ifeq ($(BR2_PACKAGE_MESA3D_OPENGL_GLX),y) +# Disable-mangling not yet supported by meson build system. +# glx: +# dri : dri based GLX requires at least one DRI driver || dri based GLX requires shared-glapi +# xlib : xlib conflicts with any dri driver +# gallium-xlib : Gallium-xlib based GLX requires at least one gallium driver || Gallium-xlib based GLX requires softpipe or llvmpipe || gallium-xlib conflicts with any dri driver. +MESA3D_CONF_OPTS += -Dglx=dri +ifeq ($(BR2_PACKAGE_MESA3D_NEEDS_XA),y) +MESA3D_CONF_OPTS += -Dgallium-xa=enabled +else +MESA3D_CONF_OPTS += -Dgallium-xa=disabled +endif +else +MESA3D_CONF_OPTS += \ + -Dglx=disabled \ + -Dgallium-xa=disabled +endif + +ifeq ($(BR2_ARM_CPU_HAS_NEON),y) +MESA3D_CONF_OPTS += -Dgallium-vc4-neon=auto +else +MESA3D_CONF_OPTS += -Dgallium-vc4-neon=disabled +endif + +# Drivers + +#Gallium Drivers +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_ETNAVIV) += etnaviv +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_FREEDRENO) += freedreno +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_I915) += i915 +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_IRIS) += iris +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_KMSRO) += kmsro +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_LIMA) += lima +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU) += nouveau +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_PANFROST) += panfrost +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R300) += r300 +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600) += r600 +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_RADEONSI) += radeonsi +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_SVGA) += svga +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_SWRAST) += swrast +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_TEGRA) += tegra +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_V3D) += v3d +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_VC4) += vc4 +MESA3D_GALLIUM_DRIVERS-$(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_VIRGL) += virgl +# DRI Drivers +MESA3D_DRI_DRIVERS-$(BR2_PACKAGE_MESA3D_DRI_DRIVER_SWRAST) += swrast +MESA3D_DRI_DRIVERS-$(BR2_PACKAGE_MESA3D_DRI_DRIVER_I915) += i915 +MESA3D_DRI_DRIVERS-$(BR2_PACKAGE_MESA3D_DRI_DRIVER_I965) += i965 +MESA3D_DRI_DRIVERS-$(BR2_PACKAGE_MESA3D_DRI_DRIVER_NOUVEAU) += nouveau +MESA3D_DRI_DRIVERS-$(BR2_PACKAGE_MESA3D_DRI_DRIVER_RADEON) += r100 +# Vulkan Drivers +MESA3D_VULKAN_DRIVERS-$(BR2_PACKAGE_MESA3D_VULKAN_DRIVER_INTEL) += intel + +ifeq ($(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER),) +MESA3D_CONF_OPTS += \ + -Dgallium-drivers= \ + -Dgallium-extra-hud=false +else +MESA3D_CONF_OPTS += \ + -Dshared-glapi=enabled \ + -Dgallium-drivers=$(subst $(space),$(comma),$(MESA3D_GALLIUM_DRIVERS-y)) \ + -Dgallium-extra-hud=true +endif + +ifeq ($(BR2_PACKAGE_MESA3D_DRI_DRIVER),) +MESA3D_CONF_OPTS += \ + -Ddri-drivers= -Ddri3=disabled +else +ifeq ($(BR2_PACKAGE_XLIB_LIBXSHMFENCE),y) +MESA3D_DEPENDENCIES += xlib_libxshmfence +MESA3D_CONF_OPTS += -Ddri3=enabled +else +MESA3D_CONF_OPTS += -Ddri3=disabled +endif +MESA3D_CONF_OPTS += \ + -Dshared-glapi=enabled \ + -Dglx-direct=true \ + -Ddri-drivers=$(subst $(space),$(comma),$(MESA3D_DRI_DRIVERS-y)) +endif + +ifeq ($(BR2_PACKAGE_MESA3D_VULKAN_DRIVER),) +MESA3D_CONF_OPTS += \ + -Dvulkan-drivers= +else +MESA3D_DEPENDENCIES += xlib_libxshmfence +MESA3D_CONF_OPTS += \ + -Ddri3=enabled \ + -Dvulkan-drivers=$(subst $(space),$(comma),$(MESA3D_VULKAN_DRIVERS-y)) +endif + +# APIs + +ifeq ($(BR2_PACKAGE_MESA3D_OSMESA_CLASSIC),y) +MESA3D_CONF_OPTS += -Dosmesa=classic +else +MESA3D_CONF_OPTS += -Dosmesa=none +endif + +# Always enable OpenGL: +# - Building OpenGL ES without OpenGL is not supported, so always keep opengl enabled. +MESA3D_CONF_OPTS += -Dopengl=true + +# libva and mesa3d have a circular dependency +# we do not need libva support in mesa3d, therefore disable this option +MESA3D_CONF_OPTS += -Dgallium-va=disabled + +# libGL is only provided for a full xorg stack +ifeq ($(BR2_PACKAGE_MESA3D_OPENGL_GLX),y) +MESA3D_PROVIDES += libgl +else +define MESA3D_REMOVE_OPENGL_HEADERS + rm -rf $(STAGING_DIR)/usr/include/GL/ +endef + +MESA3D_POST_INSTALL_STAGING_HOOKS += MESA3D_REMOVE_OPENGL_HEADERS +endif + +ifeq ($(BR2_PACKAGE_MESA3D_NEEDS_X11),y) +MESA3D_DEPENDENCIES += \ + xlib_libX11 \ + xlib_libXext \ + xlib_libXdamage \ + xlib_libXfixes \ + xlib_libXrandr \ + xlib_libXxf86vm \ + xorgproto \ + libxcb +MESA3D_PLATFORMS += x11 +endif +ifeq ($(BR2_PACKAGE_WAYLAND),y) +MESA3D_DEPENDENCIES += wayland wayland-protocols +MESA3D_PLATFORMS += wayland +endif + +MESA3D_CONF_OPTS += \ + -Dplatforms=$(subst $(space),$(comma),$(MESA3D_PLATFORMS)) + +ifeq ($(BR2_PACKAGE_MESA3D_GBM),y) +MESA3D_CONF_OPTS += \ + -Dgbm=enabled +else +MESA3D_CONF_OPTS += \ + -Dgbm=disabled +endif + +ifeq ($(BR2_PACKAGE_MESA3D_OPENGL_EGL),y) +MESA3D_PROVIDES += libegl +MESA3D_CONF_OPTS += \ + -Degl=enabled +else +MESA3D_CONF_OPTS += \ + -Degl=disabled +endif + +ifeq ($(BR2_PACKAGE_MESA3D_OPENGL_ES),y) +MESA3D_PROVIDES += libgles +MESA3D_CONF_OPTS += -Dgles1=enabled -Dgles2=enabled +else +MESA3D_CONF_OPTS += -Dgles1=disabled -Dgles2=disabled +endif + +ifeq ($(BR2_PACKAGE_MESA3D_XVMC),y) +MESA3D_DEPENDENCIES += xlib_libXv xlib_libXvMC +MESA3D_CONF_OPTS += -Dgallium-xvmc=enabled +else +MESA3D_CONF_OPTS += -Dgallium-xvmc=disabled +endif + +ifeq ($(BR2_PACKAGE_VALGRIND),y) +MESA3D_CONF_OPTS += -Dvalgrind=enabled +MESA3D_DEPENDENCIES += valgrind +else +MESA3D_CONF_OPTS += -Dvalgrind=disabled +endif + +ifeq ($(BR2_PACKAGE_LIBUNWIND),y) +MESA3D_CONF_OPTS += -Dlibunwind=enabled +MESA3D_DEPENDENCIES += libunwind +else +MESA3D_CONF_OPTS += -Dlibunwind=disabled +endif + +ifeq ($(BR2_PACKAGE_MESA3D_VDPAU),y) +MESA3D_DEPENDENCIES += libvdpau +MESA3D_CONF_OPTS += -Dgallium-vdpau=enabled +else +MESA3D_CONF_OPTS += -Dgallium-vdpau=disabled +endif + +ifeq ($(BR2_PACKAGE_LM_SENSORS),y) +MESA3D_CONF_OPTS += -Dlmsensors=enabled +MESA3D_DEPENDENCIES += lm-sensors +else +MESA3D_CONF_OPTS += -Dlmsensors=disabled +endif + +ifeq ($(BR2_PACKAGE_ZSTD),y) +MESA3D_CONF_OPTS += -Dzstd=enabled +MESA3D_DEPENDENCIES += zstd +else +MESA3D_CONF_OPTS += -Dzstd=disabled +endif + +$(eval $(meson-package)) diff --git a/package/meson-tools/0001-amlbootenc-gxl-remove-non-std-C-convention-in-for.patch b/package/meson-tools/0001-amlbootenc-gxl-remove-non-std-C-convention-in-for.patch new file mode 100644 index 00000000..243c59b5 --- /dev/null +++ b/package/meson-tools/0001-amlbootenc-gxl-remove-non-std-C-convention-in-for.patch @@ -0,0 +1,50 @@ +From 7c5475187d1bdf861360ffd8bc1aaea84a341db3 Mon Sep 17 00:00:00 2001 +From: Dagg Stompler +Date: Fri, 11 Sep 2020 12:28:52 +0300 +Subject: [PATCH] amlbootenc-gxl: remove non std C convention in for + +not all compilers have c99 or gnu99 enabled, so try not to use a +non std C convention in for call loops + +Signed-off-by: Dagg Stompler +--- + amlbootenc-gxl.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/amlbootenc-gxl.c b/amlbootenc-gxl.c +index 3695e13..233563d 100644 +--- a/amlbootenc-gxl.c ++++ b/amlbootenc-gxl.c +@@ -51,6 +51,7 @@ static int boot_enc(const char *input, const char *output) + ._unknown3 = 0x02000000, + .sig2 = AMLOGIC_C_SIGNATURE, + }; ++ int i; + + assert(sizeof(hdr) == 0x100); + +@@ -130,10 +131,10 @@ static int boot_enc(const char *input, const char *output) + memcpy(hdr.iv, (uint8_t[]){ 0x14, 0x82, 0x5b, 0x1b, 0x10, 0xc1, 0x49, 0x0d, 0x8f, 0x13, 0x0a, 0x99, 0x15, 0x50, 0x1d, 0x37 }, 16); + } + #else +- for (int i = 0; i < sizeof(hdr.key); i++) { ++ for (i = 0; i < sizeof(hdr.key); i++) { + hdr.key[i] = rand(); + } +- for (int i = 0; i < sizeof(hdr.iv); i++) { ++ for (i = 0; i < sizeof(hdr.iv); i++) { + hdr.iv[i] = rand(); + } + #endif +@@ -151,7 +152,7 @@ static int boot_enc(const char *input, const char *output) + AES_cbc_encrypt(src_buf, buf + hdr.first_offset, hdr.block_size, &aes_key, iv, AES_ENCRYPT); + SHA256_Update(&sha256_ctx, buf + hdr.first_offset, hdr.block_size); + +- for (int i = 1; i < hdr.payload_size / hdr.block_size; i++) { ++ for (i = 1; i < hdr.payload_size / hdr.block_size; i++) { + memset(src_buf, 0, hdr.block_size); + fread(src_buf, 1, hdr.block_size, fin); + AES_cbc_encrypt(src_buf, buf + hdr.data_offset + (i - 1) * hdr.block_size, hdr.block_size, &aes_key, iv, AES_ENCRYPT); +-- +2.28.0 + diff --git a/package/meson-tools/Config.in.host b/package/meson-tools/Config.in.host new file mode 100644 index 00000000..677b206b --- /dev/null +++ b/package/meson-tools/Config.in.host @@ -0,0 +1,9 @@ +config BR2_PACKAGE_HOST_MESON_TOOLS + bool "host meson-tools" + help + meson-tools is a collection of tools for use with the + Amlogic Meson family of ARM based SoCs. It allows management + of signatures which are required for booting amlogic based + boards with u-boot. + + https://github.com/afaerber/meson-tools diff --git a/package/meson-tools/meson-tools.hash b/package/meson-tools/meson-tools.hash new file mode 100644 index 00000000..7b2c0d2f --- /dev/null +++ b/package/meson-tools/meson-tools.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 10d707b2f741df03ff5000f2a82c6f577036ce1cd34d9278b22b92cb616b6fce meson-tools-0a02e2d34413f4bf9b15946352bc8c8ee13a5843.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/meson-tools/meson-tools.mk b/package/meson-tools/meson-tools.mk new file mode 100644 index 00000000..037faf3e --- /dev/null +++ b/package/meson-tools/meson-tools.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# meson-tools +# +################################################################################ + +HOST_MESON_TOOLS_VERSION = 0a02e2d34413f4bf9b15946352bc8c8ee13a5843 +HOST_MESON_TOOLS_SITE = $(call github,afaerber,meson-tools,$(HOST_MESON_TOOLS_VERSION)) +HOST_MESON_TOOLS_LICENSE = GPL-2.0+ +HOST_MESON_TOOLS_LICENSE_FILES = COPYING +HOST_MESON_TOOLS_DEPENDENCIES = host-openssl + +HOST_MESON_TOOLS_PROGS = amlbootsig unamlbootsig amlinfo + +define HOST_MESON_TOOLS_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) $(HOST_CONFIGURE_OPTS) \ + LDFLAGS="$(HOST_LDFLAGS) -lssl -lcrypto" +endef + +define HOST_MESON_TOOLS_INSTALL_CMDS + $(foreach f,$(HOST_MESON_TOOLS_PROGS), \ + $(INSTALL) -D -m 0755 $(@D)/$(f) $(HOST_DIR)/bin/$(f) + ) +endef + +$(eval $(host-generic-package)) diff --git a/package/meson/0001-Prefer-ext-static-libs-when-default-library-static.patch b/package/meson/0001-Prefer-ext-static-libs-when-default-library-static.patch new file mode 100644 index 00000000..26399158 --- /dev/null +++ b/package/meson/0001-Prefer-ext-static-libs-when-default-library-static.patch @@ -0,0 +1,45 @@ +From ea85465e608178080c3b4d51af9765a8c7c0dae3 Mon Sep 17 00:00:00 2001 +From: Matt Weber +Date: Sat, 26 Oct 2019 09:17:29 -0500 +Subject: [PATCH] Prefer ext static libs when --default-library=static + +This patch adds a case in the library pattern logic to prefer static +libraries when the Meson Core option for "default_library" is set to +solely static. + +The existing library search order makes sense for cases of shared and +shared / static mixed. However if using a prebuilt cross-toolchain, +they usually provide both a static and shared version of sysroot +libraries. This presents a problem in a complete static build where +there won't be shared libraries at runtime and during build time there +are failures like "ld: attempted static link of dynamic object". + +Bug: +https://github.com/mesonbuild/meson/issues/6108 + +Fixes: +http://autobuild.buildroot.net/results/db1740b4777f436324218c52bc7b08e5c21b667d/ +http://autobuild.buildroot.net/results/c17/c17bbb12d9deadd64a441b36e324cfbbe8aba5be/ + +Signed-off-by: Matthew Weber +--- + mesonbuild/compilers/mixins/clike.py | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/mesonbuild/compilers/mixins/clike.py b/mesonbuild/compilers/mixins/clike.py +index 47e97d261..729c98acc 100644 +--- a/mesonbuild/compilers/mixins/clike.py ++++ b/mesonbuild/compilers/mixins/clike.py +@@ -940,6 +940,9 @@ class CLikeCompiler: + elif env.machines[self.for_machine].is_cygwin(): + shlibext = ['dll', 'dll.a'] + prefixes = ['cyg'] + prefixes ++ elif env.coredata.get_builtin_option('default_library') == 'static': ++ # Linux/BSDs ++ shlibext = ['a'] + else: + # Linux/BSDs + shlibext = ['so'] +-- +2.25.1 + diff --git a/package/meson/0002-mesonbuild-dependencies-base.py-add-pkg_config_stati.patch b/package/meson/0002-mesonbuild-dependencies-base.py-add-pkg_config_stati.patch new file mode 100644 index 00000000..eda17cad --- /dev/null +++ b/package/meson/0002-mesonbuild-dependencies-base.py-add-pkg_config_stati.patch @@ -0,0 +1,41 @@ +From 8622d37587169c1e4a4206a9462868ede057f0e8 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 15 Feb 2020 15:13:59 +0100 +Subject: [PATCH] mesonbuild/dependencies/base.py: add pkg_config_static + +Allow the user to always call pkg-config with --static thanks to a +pkg_config_static property. This will allow to fix static build failures +with libglib2: + +FAILED: gio/gio +/home/naourr/work/instance-0/output-1/host/bin/arm-linux-gcc -o gio/gio 'gio/6ae6c9e@@gio@exe/gio-tool.c.o' 'gio/6ae6c9e@@gio@exe/gio-tool-cat.c.o' 'gio/6ae6c9e@@gio@exe/gio-tool-copy.c.o' 'gio/6ae6c9e@@gio@exe/gio-tool-info.c.o' 'gio/6ae6c9e@@gio@exe/gio-tool-list.c.o' 'gio/6ae6c9e@@gio@exe/gio-tool-mime.c.o' 'gio/6ae6c9e@@gio@exe/gio-tool-mkdir.c.o' 'gio/6ae6c9e@@gio@exe/gio-tool-monitor.c.o' 'gio/6ae6c9e@@gio@exe/gio-tool-mount.c.o' 'gio/6ae6c9e@@gio@exe/gio-tool-move.c.o' 'gio/6ae6c9e@@gio@exe/gio-tool-open.c.o' 'gio/6ae6c9e@@gio@exe/gio-tool-rename.c.o' 'gio/6ae6c9e@@gio@exe/gio-tool-remove.c.o' 'gio/6ae6c9e@@gio@exe/gio-tool-save.c.o' 'gio/6ae6c9e@@gio@exe/gio-tool-set.c.o' 'gio/6ae6c9e@@gio@exe/gio-tool-trash.c.o' 'gio/6ae6c9e@@gio@exe/gio-tool-tree.c.o' -Wl,--as-needed -Wl,--no-undefined -Wl,-O1 -static -Wl,--start-group gio/libgio-2.0.a glib/libglib-2.0.a gobject/libgobject-2.0.a gmodule/libgmodule-2.0.a -pthread /home/naourr/work/instance-0/output-1/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libz.a /home/naourr/work/instance-0/output-1/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libmount.a /home/naourr/work/instance-0/output-1/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libpcre.a -lm /home/naourr/work/instance-0/output-1/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libffi.a -Wl,--end-group '-Wl,-rpath,$ORIGIN/:$ORIGIN/../glib:$ORIGIN/../gobject:$ORIGIN/../gmodule' -Wl,-rpath-link,/home/naourr/work/instance-0/output-1/build/libglib2-2.62.4/build/gio -Wl,-rpath-link,/home/naourr/work/instance-0/output-1/build/libglib2-2.62.4/build/glib -Wl,-rpath-link,/home/naourr/work/instance-0/output-1/build/libglib2-2.62.4/build/gobject -Wl,-rpath-link,/home/naourr/work/instance-0/output-1/build/libglib2-2.62.4/build/gmodule +/home/naourr/work/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-buildroot-linux-uclibcgnueabi/8.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: /home/naourr/work/instance-0/output-1/host/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libmount.a(la-fs.o): in function `__mnt_fs_set_source_ptr': +fs.c:(.text+0x5ec): undefined reference to `blkid_parse_tag_string' + +Fixes: + - http://autobuild.buildroot.org/results/0d36952def63cb69628697fa6408aeb6ce10cb5b + +Signed-off-by: Fabrice Fontaine +[Romain: Fix if condition, pkg_config_static is a string not a boolean] +Signed-off-by: Romain Naour +--- + mesonbuild/dependencies/base.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py +index 23701da95..83e51626d 100644 +--- a/mesonbuild/dependencies/base.py ++++ b/mesonbuild/dependencies/base.py +@@ -849,7 +849,8 @@ class PkgConfigDependency(ExternalDependency): + def _set_libs(self): + env = None + libcmd = [self.name, '--libs'] +- if self.static: ++ if self.static or \ ++ (self.env.properties[self.for_machine].get('pkg_config_static', None) == 'true'): + libcmd.append('--static') + # Force pkg-config to output -L fields even if they are system + # paths so we can do manual searching with cc.find_library() later. +-- +2.25.1 + diff --git a/package/meson/cross-compilation.conf.in b/package/meson/cross-compilation.conf.in new file mode 100644 index 00000000..37b49eea --- /dev/null +++ b/package/meson/cross-compilation.conf.in @@ -0,0 +1,31 @@ +# Note: Buildroot's and Meson's terminologies differ about the meaning +# of 'build', 'host' and 'target': +# - Buildroot's 'host' is Meson's 'build' +# - Buildroot's 'target' is Meson's 'host' + +[binaries] +c = '@TARGET_CROSS@gcc' +cpp = '@TARGET_CROSS@g++' +ar = '@TARGET_CROSS@ar' +strip = '@TARGET_CROSS@strip' +pkgconfig = '@HOST_DIR@/bin/pkgconf' +g-ir-compiler = '@STAGING_DIR@/usr/bin/g-ir-compiler' +g-ir-scanner = '@STAGING_DIR@/usr/bin/g-ir-scanner' + +[built-in options] +c_args = [@TARGET_CFLAGS@] +c_link_args = [@TARGET_LDFLAGS@] +cpp_args = [@TARGET_CXXFLAGS@] +cpp_link_args = [@TARGET_LDFLAGS@] + +[properties] +needs_exe_wrapper = true +sys_root = '@STAGING_DIR@' +pkg_config_libdir = '@STAGING_DIR@/usr/lib/pkgconfig:@STAGING_DIR@/usr/share/pkgconfig' +pkg_config_static = '@STATIC@' + +[host_machine] +system = 'linux' +cpu_family = '@TARGET_ARCH@' +cpu = '@TARGET_CPU@' +endian = '@TARGET_ENDIAN@' diff --git a/package/meson/meson.hash b/package/meson/meson.hash new file mode 100644 index 00000000..e07b914b --- /dev/null +++ b/package/meson/meson.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +# https://github.com/mesonbuild/meson/releases/download/0.56.0/meson-0.56.2.tar.gz.asc +sha256 3cb8bdb91383f7f8da642f916e4c44066a29262caa499341e2880f010edb87f4 meson-0.56.2.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 COPYING diff --git a/package/meson/meson.mk b/package/meson/meson.mk new file mode 100644 index 00000000..7e39883d --- /dev/null +++ b/package/meson/meson.mk @@ -0,0 +1,60 @@ +################################################################################ +# +# meson +# +################################################################################ + +MESON_VERSION = 0.56.2 +MESON_SITE = https://github.com/mesonbuild/meson/releases/download/$(MESON_VERSION) +MESON_LICENSE = Apache-2.0 +MESON_LICENSE_FILES = COPYING +MESON_SETUP_TYPE = setuptools + +HOST_MESON_DEPENDENCIES = host-ninja +HOST_MESON_NEEDS_HOST_PYTHON = python3 + +HOST_MESON_TARGET_ENDIAN = $(call qstrip,$(call LOWERCASE,$(BR2_ENDIAN))) +HOST_MESON_TARGET_CPU = $(GCC_TARGET_CPU) + +# https://mesonbuild.com/Reference-tables.html#cpu-families +ifeq ($(BR2_arcle)$(BR2_arceb),y) +HOST_MESON_TARGET_CPU_FAMILY = arc +else ifeq ($(BR2_arm)$(BR2_armeb),y) +HOST_MESON_TARGET_CPU_FAMILY = arm +else ifeq ($(BR2_aarch64)$(BR2_aarch64_be),y) +HOST_MESON_TARGET_CPU_FAMILY = aarch64 +else ifeq ($(BR2_i386),y) +HOST_MESON_TARGET_CPU_FAMILY = x86 +else ifeq ($(BR2_m68k),y) +HOST_MESON_TARGET_CPU_FAMILY = m68k +else ifeq ($(BR2_microblazeel)$(BR2_microblazebe),y) +HOST_MESON_TARGET_CPU_FAMILY = microblaze +else ifeq ($(BR2_mips)$(BR2_mipsel),y) +HOST_MESON_TARGET_CPU_FAMILY = mips +else ifeq ($(BR2_mips64)$(BR2_mips64el),y) +HOST_MESON_TARGET_CPU_FAMILY = mips64 +else ifeq ($(BR2_powerpc),y) +HOST_MESON_TARGET_CPU_FAMILY = ppc +else ifeq ($(BR2_powerpc64)$(BR2_powerpc64le),y) +HOST_MESON_TARGET_CPU_FAMILY = ppc64 +else ifeq ($(BR2_riscv),y) +HOST_MESON_TARGET_CPU_FAMILY = riscv64 +else ifeq ($(BR2_sh4)$(BR2_sh4eb)$(BR2_sh4a)$(BR2_sh4aeb),y) +HOST_MESON_TARGET_CPU_FAMILY = sh4 +else ifeq ($(BR2_sparc),y) +HOST_MESON_TARGET_CPU_FAMILY = sparc +else ifeq ($(BR2_sparc64),y) +HOST_MESON_TARGET_CPU_FAMILY = sparc64 +else ifeq ($(BR2_x86_64),y) +HOST_MESON_TARGET_CPU_FAMILY = x86_64 +else +HOST_MESON_TARGET_CPU_FAMILY = $(ARCH) +endif + +# Avoid interpreter shebang longer than 128 chars +define HOST_MESON_SET_INTERPRETER + $(SED) '1s:.*:#!/usr/bin/env python3:' $(HOST_DIR)/bin/meson +endef +HOST_MESON_POST_INSTALL_HOOKS += HOST_MESON_SET_INTERPRETER + +$(eval $(host-python-package)) diff --git a/package/metacity/0001-add-libm-reference.patch b/package/metacity/0001-add-libm-reference.patch new file mode 100644 index 00000000..62850172 --- /dev/null +++ b/package/metacity/0001-add-libm-reference.patch @@ -0,0 +1,51 @@ +Upstream fix to link metacity itself against libm + +The upstream fix is modified to also include the changes on the +configure script directly, so that autoreconfiguring is not +needed. Autoreconfiguring cannot be done easily on metacity, due to +missing AM_GCONF_SOURCE_2 and AM_NLS macros. + +http://git.gnome.org/browse/metacity/commit/configure.in?id=9cb0b6ff520ea69bdff6c328a21787202aee1bcc + +Signed-off-by: Thomas Petazzoni + +From 9cb0b6ff520ea69bdff6c328a21787202aee1bcc Mon Sep 17 00:00:00 2001 +From: Götz Waschk +Date: Wed, 22 Oct 2008 12:08:48 +0000 +Subject: add libm reference. Closes #557357. + +2008-10-22 Götz Waschk + + * configure.in: add libm reference. Closes #557357. + + +svn path=/trunk/; revision=3984 +--- +(limited to 'configure.in') + +Index: b/configure.in +=================================================================== +--- a/configure.in ++++ b/configure.in +@@ -413,7 +413,7 @@ + AC_DEFINE(HAVE_XSYNC, , [Have the Xsync extension library]) + fi + +-METACITY_LIBS="$METACITY_LIBS $XSYNC_LIBS $RANDR_LIBS $SHAPE_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS" ++METACITY_LIBS="$METACITY_LIBS $XSYNC_LIBS $RANDR_LIBS $SHAPE_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lm" + METACITY_MESSAGE_LIBS="$METACITY_MESSAGE_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS" + METACITY_WINDOW_DEMO_LIBS="$METACITY_WINDOW_DEMO_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS" + METACITY_PROPS_LIBS="$METACITY_PROPS_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS" +Index: b/configure +=================================================================== +--- a/configure ++++ b/configure +@@ -29509,7 +29509,7 @@ + + fi + +-METACITY_LIBS="$METACITY_LIBS $XSYNC_LIBS $RANDR_LIBS $SHAPE_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS" ++METACITY_LIBS="$METACITY_LIBS $XSYNC_LIBS $RANDR_LIBS $SHAPE_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lm" + METACITY_MESSAGE_LIBS="$METACITY_MESSAGE_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS" + METACITY_WINDOW_DEMO_LIBS="$METACITY_WINDOW_DEMO_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS" + METACITY_PROPS_LIBS="$METACITY_PROPS_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS" diff --git a/package/metacity/0002-gconf.patch b/package/metacity/0002-gconf.patch new file mode 100644 index 00000000..939ef7ef --- /dev/null +++ b/package/metacity/0002-gconf.patch @@ -0,0 +1,30 @@ +[PATCH] fix build with --disable-gconf + +src/core/prefs.c still contain a call to gconf_client_set_bool() when +built with --disable-gconf, breaking the build. + +Signed-off-by: Peter Korsgaard +--- + src/core/prefs.c | 2 ++ + 1 file changed, 2 insertions(+) + +Index: metacity-2.25.1/src/core/prefs.c +=================================================================== +--- metacity-2.25.1.orig/src/core/prefs.c ++++ metacity-2.25.1/src/core/prefs.c +@@ -2949,6 +2949,7 @@ + void + meta_prefs_set_compositing_manager (gboolean whether) + { ++#if HAVE_GCONF + GError *err = NULL; + + gconf_client_set_bool (default_client, +@@ -2962,6 +2963,7 @@ + err->message); + g_error_free (err); + } ++#endif + } + + #ifndef HAVE_GCONF diff --git a/package/metacity/0003-mag-add-libm-reference.patch b/package/metacity/0003-mag-add-libm-reference.patch new file mode 100644 index 00000000..d47d8075 --- /dev/null +++ b/package/metacity/0003-mag-add-libm-reference.patch @@ -0,0 +1,45 @@ +Upstream patch to fix link against libm + +The upstream patch is modified to also include the necessary +Makefile.in, which avoids the need for autoreconfiguring the +package. Autoreconfiguring the package unfortunately doesn't work, due +to AM_GCONF_SOURCE_2 and AM_NLS macros being missing. + +http://git.gnome.org/browse/metacity/commit/src/tools/Makefile.am?id=13d0d52eb885598885b6ff4b73c795c8f29c2a6b + +Signed-off-by: Thomas Petazzoni + +From 13d0d52eb885598885b6ff4b73c795c8f29c2a6b Mon Sep 17 00:00:00 2001 +From: Matthias Clasen +Date: Sun, 02 May 2010 14:50:42 +0000 +Subject: fails to link with pedantic linkers + +--- +(limited to 'src/tools/Makefile.am') + +Index: b/src/tools/Makefile.am +=================================================================== +--- a/src/tools/Makefile.am ++++ b/src/tools/Makefile.am +@@ -26,7 +26,7 @@ + + metacity_message_LDADD= @METACITY_MESSAGE_LIBS@ + metacity_window_demo_LDADD= @METACITY_WINDOW_DEMO_LIBS@ +-metacity_mag_LDADD= @METACITY_WINDOW_DEMO_LIBS@ ++metacity_mag_LDADD= @METACITY_WINDOW_DEMO_LIBS@ -lm + metacity_grayscale_LDADD = @METACITY_WINDOW_DEMO_LIBS@ + + EXTRA_DIST=$(icon_DATA) +Index: b/src/tools/Makefile.in +=================================================================== +--- a/src/tools/Makefile.in ++++ b/src/tools/Makefile.in +@@ -281,7 +281,7 @@ + + metacity_message_LDADD = @METACITY_MESSAGE_LIBS@ + metacity_window_demo_LDADD = @METACITY_WINDOW_DEMO_LIBS@ +-metacity_mag_LDADD = @METACITY_WINDOW_DEMO_LIBS@ ++metacity_mag_LDADD = @METACITY_WINDOW_DEMO_LIBS@ -lm + metacity_grayscale_LDADD = @METACITY_WINDOW_DEMO_LIBS@ + EXTRA_DIST = $(icon_DATA) + all: all-am diff --git a/package/metacity/Config.in b/package/metacity/Config.in new file mode 100644 index 00000000..fc106a26 --- /dev/null +++ b/package/metacity/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_METACITY + bool "metacity" + depends on BR2_PACKAGE_LIBGTK2 + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBX11 + # Metacity configure.ac pretends it can be built without + # Composite, but in reality, it doesn't build. + select BR2_PACKAGE_XLIB_LIBXCOMPOSITE + select BR2_PACKAGE_XLIB_LIBXFIXES + select BR2_PACKAGE_XLIB_LIBXRENDER + select BR2_PACKAGE_XLIB_LIBXDAMAGE + # We do not directly depend on Xft, but they are needed to get + # Xft support in Pango, which we require. + select BR2_PACKAGE_XLIB_LIBXFT + help + Metacity is a window manager for the X Window System. + + https://wiki.gnome.org/Projects/Metacity diff --git a/package/metacity/Xsession b/package/metacity/Xsession new file mode 100755 index 00000000..7225921a --- /dev/null +++ b/package/metacity/Xsession @@ -0,0 +1,6 @@ +#!/bin/sh +export GDK_USE_XFT=1 +export LANG="en_US.UTF-8" +export LC_ALL="en_US.UTF-8" +/usr/bin/X11/rxvt -bg black -fg gray90 & +exec /bin/metacity diff --git a/package/metacity/metacity.hash b/package/metacity/metacity.hash new file mode 100644 index 00000000..583db0f2 --- /dev/null +++ b/package/metacity/metacity.hash @@ -0,0 +1,5 @@ +# From http://ftp.gnome.org/pub/gnome/sources/metacity/2.25/metacity-2.25.1.sha256sum +sha256 fb2ede4ac02d7da08d3c3323fb76afaf945c8cccc07cb2d3a4b7f44fb49f1c47 metacity-2.25.1.tar.bz2 + +# Locally computed +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/metacity/metacity.mk b/package/metacity/metacity.mk new file mode 100644 index 00000000..f5a6d4af --- /dev/null +++ b/package/metacity/metacity.mk @@ -0,0 +1,44 @@ +################################################################################ +# +# metacity +# +################################################################################ + +# newer versions need libcanberra-gtk and gnome-doc-utils +METACITY_VERSION_MAJOR = 2.25 +METACITY_VERSION = $(METACITY_VERSION_MAJOR).1 +METACITY_SOURCE = metacity-$(METACITY_VERSION).tar.bz2 +METACITY_SITE = http://ftp.gnome.org/pub/gnome/sources/metacity/$(METACITY_VERSION_MAJOR) +METACITY_LICENSE = GPL-2.0+ +METACITY_LICENSE_FILES = COPYING + +METACITY_CONF_OPTS = \ + --x-includes=$(STAGING_DIR)/usr/include/X11 \ + --x-libraries=$(STAGING_DIR)/usr/lib \ + --disable-glibtest \ + --disable-gconf \ + --disable-sm \ + --disable-startup-notification + +METACITY_DEPENDENCIES = libgtk2 \ + xlib_libX11 \ + host-libxml-parser-perl \ + xlib_libXcomposite \ + xlib_libXfixes \ + xlib_libXrender \ + xlib_libXdamage \ + $(TARGET_NLS_DEPENDENCIES) + +METACITY_CONF_ENV = LIBS=$(TARGET_NLS_LIBS) + +ifeq ($(BR2_PACKAGE_XLIB_LIBXCURSOR),y) +METACITY_DEPENDENCIES += xlib_libXcursor +endif + +define METACITY_INSTALL_XSESSION + $(INSTALL) -D package/metacity/Xsession $(TARGET_DIR)/etc/X11/Xsession +endef + +METACITY_POST_INSTALL_TARGET_HOOKS += METACITY_INSTALL_XSESSION + +$(eval $(autotools-package)) diff --git a/package/mfgtools/0001-lnx_def.h-fix-conflicting-declaration-of-__time64_t.patch b/package/mfgtools/0001-lnx_def.h-fix-conflicting-declaration-of-__time64_t.patch new file mode 100644 index 00000000..7d0d3974 --- /dev/null +++ b/package/mfgtools/0001-lnx_def.h-fix-conflicting-declaration-of-__time64_t.patch @@ -0,0 +1,27 @@ +From 1af7bc09451e0b779f7bfb0dcc58ffb3abe9c584 Mon Sep 17 00:00:00 2001 +From: Gary Bisson +Date: Tue, 11 Feb 2020 15:30:12 +0100 +Subject: [PATCH] lnx_def.h: fix conflicting declaration of __time64_t + +Signed-off-by: Gary Bisson +--- + MfgToolLib/lnx_def.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/MfgToolLib/lnx_def.h b/MfgToolLib/lnx_def.h +index c6869dd..a38bb99 100644 +--- a/MfgToolLib/lnx_def.h ++++ b/MfgToolLib/lnx_def.h +@@ -124,7 +124,9 @@ typedef unsigned long * ULONG_PTR; + typedef char * LPOLESTR; + typedef void * HDEVINFO; + typedef unsigned long long ULONGLONG; ++#ifndef __time64_t + typedef long long __time64_t; ++#endif + typedef long long __int64; + typedef unsigned long DWORD_PTR; + typedef unsigned int UINT; +-- +2.25.0 + diff --git a/package/mfgtools/Config.in.host b/package/mfgtools/Config.in.host new file mode 100644 index 00000000..2b506c8f --- /dev/null +++ b/package/mfgtools/Config.in.host @@ -0,0 +1,15 @@ +config BR2_PACKAGE_HOST_MFGTOOLS + bool "host mfgtools" + depends on BR2_arm + depends on BR2_HOST_GCC_AT_LEAST_4_9 # host-libusb + help + This package contains the Freescale manufacturing tool. + It is designed to program firmware to i.MX boards during + production. The communication is done over USB using the + Freescale UTP protocol. + + https://github.com/codeauroraforum/mfgtools + +comment "host mfgtools needs a toolchain w/ host gcc >= 4.9" + depends on BR2_arm + depends on !BR2_HOST_GCC_AT_LEAST_4_9 diff --git a/package/mfgtools/mfgtools.hash b/package/mfgtools/mfgtools.hash new file mode 100644 index 00000000..0b215f52 --- /dev/null +++ b/package/mfgtools/mfgtools.hash @@ -0,0 +1,4 @@ +# locally computed +sha256 055d71227d18883d6e8bc9e854c076015f9a7749820a94272e19071bf0b25c89 mfgtools-0.02.tar.gz +sha256 2655559a6bb1179eae514f5c7166f4ede4f2453efa9cf4dc3c045cab5d57dede LICENSE +sha256 0963b6e5086bf454265b0f57821a02b681d1211e40ad74c310231cb4d94815c9 README.txt diff --git a/package/mfgtools/mfgtools.mk b/package/mfgtools/mfgtools.mk new file mode 100644 index 00000000..48ce5dda --- /dev/null +++ b/package/mfgtools/mfgtools.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# mfgtools +# +################################################################################ + +MFGTOOLS_VERSION = 0.02 +MFGTOOLS_SITE = $(call github,codeauroraforum,mfgtools,v$(MFGTOOLS_VERSION)) +MFGTOOLS_SUBDIR = MfgToolLib +MFGTOOLS_LICENSE = BSD-3-Clause or CPOL +MFGTOOLS_LICENSE_FILES = LICENSE README.txt +HOST_MFGTOOLS_DEPENDENCIES = host-libusb + +HOST_MFGTOOLS_CFLAGS = \ + $(HOST_CFLAGS) $(HOST_LDFLAGS) -std=c++11 -lpthread \ + -L$(@D)/MfgToolLib -lMfgToolLib -I$(@D)/MfgToolLib \ + -lusb-1.0 -I$(HOST_DIR)/include/libusb-1.0 \ + -fpermissive -Wno-write-strings + +define HOST_MFGTOOLS_CLI_BUILD + $(HOST_CONFIGURE_OPTS) $(MAKE) CC="$(HOSTCXX)" \ + CFLAGS="$(HOST_MFGTOOLS_CFLAGS)" -C $(@D)/TestPrgm +endef + +HOST_MFGTOOLS_POST_BUILD_HOOKS += HOST_MFGTOOLS_CLI_BUILD + +define HOST_MFGTOOLS_INSTALL_CMDS + $(INSTALL) -D -m 755 $(@D)/MfgToolLib/libMfgToolLib.so \ + $(HOST_DIR)/lib/libMfgToolLib.so + $(INSTALL) -D -m 755 $(@D)/TestPrgm/mfgtoolcli \ + $(HOST_DIR)/bin/mfgtoolcli +endef + +$(eval $(host-cmake-package)) diff --git a/package/mfgtools/readme.txt b/package/mfgtools/readme.txt new file mode 100644 index 00000000..320e6ec4 --- /dev/null +++ b/package/mfgtools/readme.txt @@ -0,0 +1,69 @@ +MfgTools Howto +============== + +1. Build your mfgtool image + +Make sure to enable the following Buildroot options: + +BR2_PACKAGE_FREESCALE_IMX=y +BR2_PACKAGE_IMX_UUC=y +BR2_TARGET_ROOTFS_CPIO=y +BR2_TARGET_ROOTFS_CPIO_GZIP=y +BR2_TARGET_ROOTFS_CPIO_UIMAGE=y + +Also modify your kernel configuration to have: + +CONFIG_USB_GADGET=y +CONFIG_USB_MASS_STORAGE=y +CONFIG_FSL_UTP=y +CONFIG_MMC_BLOCK_MINORS=16 + +2. Go into the output and create the necessary folders + +$ cd output +$ mkdir -p "Profiles/Linux/OS Firmware/firmware" + +3. Create your XML update script named ucl2.xml + +You can find a sample XML at: + +$ wget https://storage.googleapis.com/boundarydevices.com/ucl2.xml \ + -O Profiles/Linux/OS\ Firmware/ucl2.xml + +4. Copy the U-Boot, Kernel and initramfs images to the appropriate +folder + +$ cp images/u-boot.imx images/zImage images/imx6q-sabrelite.dtb \ + images/rootfs.cpio.uboot Profiles/Linux/OS\ Firmware/firmware/ + +5. Copy the prebuilt binaries to be flashed + +Depending on your ucl2.xml file, the sample doesn't flash anything. + +6. Run the MfgTools client: + +$ ./host/bin/mfgtoolcli -l mmc -s uboot_defconfig=imx \ + -s dtbname=imx6q-sabrelite.dtb -s initramfs=rootfs.cpio.uboot \ + -s mmc=1 -p 1 + +For more information about the tools options, please read the +"Manufacturing Tool V2 Quick Start Guide.docx" documentation contained +in every mfgtools package from NXP website[1]. + +Note: All the above commands require your Linux host user to have +permissions to access the USB devices. Please make sure to have udev +rules that allow the user to communicate with the BootROM IDs +(Freescale USB recovery) as well as the one used for the UTP Linux +image (0x066F:0x37FF). Using 'sudo' in front of the mfgtoolcli +command would also grant you the necessary permission but it is *not* +recommended. + +Also, if your U-Boot environment doesn't include mfgtools bootargs, +make sure to set the following: + +setenv bootargs "console=${console},${baudrate} g_mass_storage.stall=0 \ + g_mass_storage.removable=1 g_mass_storage.idVendor=0x066F \ + g_mass_storage.idProduct=0x37FF g_mass_storage.iSerialNumber=\"\" \ + g_mass_storage.file=/fat" + +[1] http://www.nxp.com/products/software-and-tools/software-development-tools/i.mx-software-and-tools/i.mx-6-series-software-and-development-tool-resources:IMX6_SW diff --git a/package/mfoc/Config.in b/package/mfoc/Config.in new file mode 100644 index 00000000..1267cf04 --- /dev/null +++ b/package/mfoc/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_MFOC + bool "mfoc" + select BR2_PACKAGE_LIBNFC + help + Mifare Classic Offline Cracker + + https://github.com/nfc-tools/mfoc diff --git a/package/mfoc/mfoc.hash b/package/mfoc/mfoc.hash new file mode 100644 index 00000000..2358bfd3 --- /dev/null +++ b/package/mfoc/mfoc.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 2dfd8ffa4a8b357807680d190a91c8cf3db54b4211a781edc1108af401dbaad7 mfoc-0.10.7.tar.gz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/mfoc/mfoc.mk b/package/mfoc/mfoc.mk new file mode 100644 index 00000000..c4a78521 --- /dev/null +++ b/package/mfoc/mfoc.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# mfoc +# +################################################################################ + +MFOC_VERSION = 0.10.7 +MFOC_SITE = $(call github,nfc-tools,mfoc,mfoc-$(MFOC_VERSION)) +MFOC_LICENSE = GPL-2.0 +MFOC_LICENSE_FILES = COPYING +MFOC_DEPENDENCIES = libnfc +# Fetching from github, we need to generate the configure script +MFOC_AUTORECONF = YES +MFOC_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/mg/0001-src-def.h-fix-build-with-gcc-10.patch b/package/mg/0001-src-def.h-fix-build-with-gcc-10.patch new file mode 100644 index 00000000..d88e2f44 --- /dev/null +++ b/package/mg/0001-src-def.h-fix-build-with-gcc-10.patch @@ -0,0 +1,38 @@ +From 29c83c917bd4f5d0c37ff0ab5da1a85762bd5530 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 5 Sep 2020 14:50:20 +0200 +Subject: [PATCH] src/def.h: fix build with gcc 10 + +Define hlp as extern to avoid the following build failure with gcc 10 +(which defaults to -fno-common): + + CCLD mg +/home/buildroot/autobuild/run/instance-1/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: mg-bell.o:(.bss+0x0): multiple definition of `hlp'; mg-basic.o:(.bss+0x0): first defined here + +Fixes: + - http://autobuild.buildroot.org/results/aacc02abf41e120e0d0b22faa38642e6d149d73f + +[backport of upstream 29c83c917bd4f5d0c37ff0ab5da1a85762bd5530] +Signed-off-by: Fabrice Fontaine +[yann.morin.1998@free.fr: backport actual patch after MR was accepted] +Signed-off-by: Yann E. MORIN +--- + src/def.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/def.h b/src/def.h +index e4c049c..cd59725 100644 +--- a/src/def.h ++++ b/src/def.h +@@ -650,7 +650,7 @@ int excline(char *); + char *skipwhite(char *); + + /* help.c X */ +-const char *hlp; ++extern const char *hlp; + int desckey(int, int); + int wallchart(int, int); + int help_help(int, int); +-- +2.28.0 + diff --git a/package/mg/Config.in b/package/mg/Config.in new file mode 100644 index 00000000..11e5bdb2 --- /dev/null +++ b/package/mg/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_MG + bool "mg" + depends on BR2_USE_MMU # fork() + help + Emacs-like text editor (130 kiB) + + Mg is a MicroEMACS clone with the goal of being compatible + with GNU Emacs, because there should never be any reason to + learn more than one Emacs flavor. + + Unlike many other editors it does not require ncurses, only a + standard C library, making it suitable for really small and + embedded systems. + + This version is based on mg2a from OpenBSD, with more features + and, in particular, no requirement on ncurses or termcap. + + https://github.com/troglobit/mg/ diff --git a/package/mg/mg.hash b/package/mg/mg.hash new file mode 100644 index 00000000..758a5232 --- /dev/null +++ b/package/mg/mg.hash @@ -0,0 +1,5 @@ +# From https://github.com/troglobit/mg/releases/tag/v3.4 +md5 6b79855d54770bcb23e5457ebde8296c mg-3.4.tar.gz +# Locally computed: +sha256 1a620cf5b2dd4b00006d6c929ac8e2a70eeab5f807a0d6e5334b878aa182b713 mg-3.4.tar.gz +sha256 7e12e5df4bae12cb21581ba157ced20e1986a0508dd10d0e8a4ab9a4cf94e85c UNLICENSE diff --git a/package/mg/mg.mk b/package/mg/mg.mk new file mode 100644 index 00000000..e3b79da0 --- /dev/null +++ b/package/mg/mg.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# mg +# +################################################################################ + +MG_VERSION = 3.4 +MG_SITE = https://github.com/troglobit/mg/releases/download/v$(MG_VERSION) +MG_LICENSE = Public Domain +MG_LICENSE_FILES = UNLICENSE + +ifeq ($(BR2_PACKAGE_NCURSES),y) +MG_DEPENDENCIES += ncurses +MG_CONF_OPTS += --with-curses +else +MG_CONF_OPTS += --without-curses +endif + +$(eval $(autotools-package)) diff --git a/package/micropython-lib/Config.in b/package/micropython-lib/Config.in new file mode 100644 index 00000000..76557b22 --- /dev/null +++ b/package/micropython-lib/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_MICROPYTHON_LIB + bool "micropython-lib" + depends on BR2_PACKAGE_MICROPYTHON + select BR2_PACKAGE_PCRE # runtime + help + Core Python libraries ported to MicroPython. + + http://micropython.org diff --git a/package/micropython-lib/micropython-lib.hash b/package/micropython-lib/micropython-lib.hash new file mode 100644 index 00000000..cbdda238 --- /dev/null +++ b/package/micropython-lib/micropython-lib.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 66e15380eb109613263beb6825b8eecb9191088270c1a59e8c7d922dd57183c7 micropython-lib-1.9.3.tar.gz +sha256 baed4196a4310c576c2010f0a49f987a49e63856df7cd45af11cb3571df4bf74 LICENSE diff --git a/package/micropython-lib/micropython-lib.mk b/package/micropython-lib/micropython-lib.mk new file mode 100644 index 00000000..78ac0d3b --- /dev/null +++ b/package/micropython-lib/micropython-lib.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# micropython-lib +# +################################################################################ + +MICROPYTHON_LIB_VERSION = 1.9.3 +MICROPYTHON_LIB_SITE = $(call github,micropython,micropython-lib,v$(MICROPYTHON_LIB_VERSION)) +MICROPYTHON_LIB_LICENSE = Python-2.0 (some modules), MIT (everything else) +MICROPYTHON_LIB_LICENSE_FILES = LICENSE + +define MICROPYTHON_LIB_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + PREFIX=$(TARGET_DIR)/usr/lib/micropython \ + install +endef + +$(eval $(generic-package)) diff --git a/package/micropython/Config.in b/package/micropython/Config.in new file mode 100644 index 00000000..b5dc4727 --- /dev/null +++ b/package/micropython/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_MICROPYTHON + bool "micropython" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_LIBFFI + help + Micro Python is a lean and fast implementation of the Python + 3 programming language that is optimised to run on a + microcontroller. + + http://micropython.org + +comment "micropython needs a toolchain w/ threads, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/micropython/micropython.hash b/package/micropython/micropython.hash new file mode 100644 index 00000000..5dfbb745 --- /dev/null +++ b/package/micropython/micropython.hash @@ -0,0 +1,3 @@ +#locally computed +sha256 31466dacebeb3af60dc80a071a07c3e15b657219a826e0b6ac741f9f22472f23 micropython-1.13.tar.gz +sha256 4b8a8884a60cd72749f9ef40328b85b40d13c22594c01352e0a55392141e0f89 LICENSE diff --git a/package/micropython/micropython.mk b/package/micropython/micropython.mk new file mode 100644 index 00000000..010ac35e --- /dev/null +++ b/package/micropython/micropython.mk @@ -0,0 +1,52 @@ +################################################################################ +# +# micropython +# +################################################################################ + +MICROPYTHON_VERSION = 1.13 +MICROPYTHON_SITE = $(call github,micropython,micropython,v$(MICROPYTHON_VERSION)) +MICROPYTHON_LICENSE = MIT +MICROPYTHON_LICENSE_FILES = LICENSE +MICROPYTHON_DEPENDENCIES = host-pkgconf libffi $(BR2_PYTHON3_HOST_DEPENDENCY) + +# Set GIT_DIR so package won't use buildroot's version number +MICROPYTHON_MAKE_ENV = \ + $(TARGET_MAKE_ENV) \ + GIT_DIR=. + +# Use fallback implementation for exception handling on architectures that don't +# have explicit support. +ifeq ($(BR2_i386)$(BR2_x86_64)$(BR2_arm)$(BR2_armeb),) +MICROPYTHON_CFLAGS = -DMICROPY_GCREGS_SETJMP=1 +endif + +# xtensa has problems with nlr_push, use setjmp based implementation instead +ifeq ($(BR2_xtensa),y) +MICROPYTHON_CFLAGS = -DMICROPY_NLR_SETJMP=1 +endif + +# When building from a tarball we don't have some of the dependencies that are in +# the git repository as submodules +MICROPYTHON_MAKE_OPTS += \ + MICROPY_PY_BTREE=0 \ + MICROPY_PY_USSL=0 \ + CROSS_COMPILE=$(TARGET_CROSS) \ + CFLAGS_EXTRA=$(MICROPYTHON_CFLAGS) \ + CWARN= + +define MICROPYTHON_BUILD_CMDS + $(MICROPYTHON_MAKE_ENV) $(MAKE) -C $(@D)/mpy-cross + $(MICROPYTHON_MAKE_ENV) $(MAKE) -C $(@D)/ports/unix \ + $(MICROPYTHON_MAKE_OPTS) +endef + +define MICROPYTHON_INSTALL_TARGET_CMDS + $(MICROPYTHON_MAKE_ENV) $(MAKE) -C $(@D)/ports/unix \ + $(MICROPYTHON_MAKE_OPTS) \ + DESTDIR=$(TARGET_DIR) \ + PREFIX=/usr \ + install +endef + +$(eval $(generic-package)) diff --git a/package/midori/0001-fix-bug-1492932.patch b/package/midori/0001-fix-bug-1492932.patch new file mode 100644 index 00000000..27ad283a --- /dev/null +++ b/package/midori/0001-fix-bug-1492932.patch @@ -0,0 +1,44 @@ +Fix for https://bugs.launchpad.net/midori/+bug/1492932 +Patch status: upstream + +Signed-off-by: Gustavo Zacarias + +--- a/midori/midori-browser.c 2015-07-11 16:03:43 +0000 ++++ b/midori/midori-browser.c 2015-09-25 21:30:31 +0000 +@@ -5953,11 +5953,6 @@ + G_CALLBACK (midori_browser_destroy_cb), NULL); + gtk_window_set_role (GTK_WINDOW (browser), "browser"); + gtk_window_set_icon_name (GTK_WINDOW (browser), MIDORI_STOCK_WEB_BROWSER); +- #if GTK_CHECK_VERSION (3, 4, 0) +- #ifndef HAVE_GRANITE +- gtk_window_set_hide_titlebar_when_maximized (GTK_WINDOW (browser), TRUE); +- #endif +- #endif + vbox = gtk_vbox_new (FALSE, 0); + /* gtk_container_add (GTK_CONTAINER (browser), vbox); + gtk_widget_show (vbox); */ + +--- a/midori/midori-view.c 2015-07-06 21:26:46 +0000 ++++ b/midori/midori-view.c 2015-09-25 21:30:31 +0000 +@@ -3495,9 +3495,6 @@ + } + else + gtk_window_set_icon_name (GTK_WINDOW (window), icon_name); +- #if GTK_CHECK_VERSION (3, 4, 0) +- gtk_window_set_hide_titlebar_when_maximized (GTK_WINDOW (window), TRUE); +- #endif + gtk_widget_set_size_request (GTK_WIDGET (inspector_view), 700, 100); + #if GTK_CHECK_VERSION (3, 0, 0) + scrolled = gtk_scrolled_window_new (NULL, NULL); + +--- a/midori/midori-window.vala 2015-08-16 00:14:26 +0000 ++++ b/midori/midori-window.vala 2015-09-25 21:30:31 +0000 +@@ -28,7 +28,6 @@ + toolbar.show_arrow = true; + #if HAVE_GTK3 + toolbar.get_style_context ().add_class ("primary-toolbar"); +- hide_titlebar_when_maximized = true; + #endif + toolbar.popup_context_menu.connect ((x, y, button) => { + return button == 3 && context_menu (toolbar); }); + diff --git a/package/midori/0002-gcr-for-x11-only.patch b/package/midori/0002-gcr-for-x11-only.patch new file mode 100644 index 00000000..85e76976 --- /dev/null +++ b/package/midori/0002-gcr-for-x11-only.patch @@ -0,0 +1,32 @@ +GCR support only works/is useful with X11 support. + +Reported upstream: https://bugs.launchpad.net/midori/+bug/1515985 + +Signed-off-by: Gustavo Zacarias + +diff -Nura midori-0.5.11.orig/CMakeLists.txt midori-0.5.11/CMakeLists.txt +--- midori-0.5.11.orig/CMakeLists.txt 2015-11-12 13:41:02.045898814 -0300 ++++ midori-0.5.11/CMakeLists.txt 2015-11-12 14:00:09.765545018 -0300 +@@ -175,18 +175,14 @@ + set(PKGS ${PKGS} zeitgeist-2.0) + endif() + +-if (WIN32) +- add_definitions("-DGCR_VERSION=\"No\"") +-else () +- if (USE_GTK3) +- pkg_check_modules(GCR REQUIRED gcr-3>=2.32) +- else () +- pkg_check_modules(GCR REQUIRED gcr-base-3>=2.32) +- endif () ++if (USE_GTK3 AND X11) ++ pkg_check_modules(GCR REQUIRED gcr-3>=2.32) + add_definitions("-DGCR_VERSION=\"${GCR_VERSION}\"") + add_definitions("-DHAVE_GCR") + set(OPTS_INCLUDE_DIRS ${OPTS_INCLUDE_DIRS} ${GCR_INCLUDE_DIRS}) + set(OPTS_LIBRARIES ${OPTS_LIBRARIES} ${GCR_LIBRARIES}) ++else () ++ add_definitions("-DGCR_VERSION=\"No\"") + endif () + + if (HALF_BRO_INCOM_WEBKIT2) diff --git a/package/midori/Config.in b/package/midori/Config.in new file mode 100644 index 00000000..e2cc2ac6 --- /dev/null +++ b/package/midori/Config.in @@ -0,0 +1,31 @@ +comment "midori needs libgtk3 and a glibc toolchain w/ C++, gcc >= 7, host gcc >= 4.9" + depends on BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS + depends on BR2_PACKAGE_WEBKITGTK_ARCH_SUPPORTS + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_PACKAGE_LIBGTK3 || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_7 || \ + !BR2_HOST_GCC_AT_LEAST_4_9 || \ + !BR2_TOOLCHAIN_USES_GLIBC + +config BR2_PACKAGE_MIDORI + bool "midori" + depends on BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS # host-librsvg + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgcrypt, gcr, gnupg2 + depends on BR2_PACKAGE_LIBGTK3 + depends on BR2_HOST_GCC_AT_LEAST_4_9 # webkitgtk + depends on BR2_INSTALL_LIBSTDCPP # webkitgtk + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_7 # webkitgtk + depends on BR2_TOOLCHAIN_USES_GLIBC # webkitgtk + depends on BR2_PACKAGE_WEBKITGTK_ARCH_SUPPORTS + # GCR can only be used with the X11 backend + select BR2_PACKAGE_GCR if BR2_PACKAGE_LIBGTK3_X11 + select BR2_PACKAGE_GRANITE + select BR2_PACKAGE_LIBSOUP + select BR2_PACKAGE_LIBSOUP_GNOME + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_SQLITE + select BR2_PACKAGE_WEBKITGTK + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + Midori is a lightweight web browser based on WebKit + + http://www.midori-browser.org/ diff --git a/package/midori/midori.hash b/package/midori/midori.hash new file mode 100644 index 00000000..d8fd1b7a --- /dev/null +++ b/package/midori/midori.hash @@ -0,0 +1,5 @@ +# From download link @ http://midori-browser.org/download/source/ +sha1 64c86935028feb5f89d799c2acacaad67764da6f midori_0.5.11_all_.tar.bz2 + +# Locally computed +sha256 5df07007198989c622f5d41de8d703e7bef3d0e79d62e24332ee739a452af62a COPYING diff --git a/package/midori/midori.mk b/package/midori/midori.mk new file mode 100644 index 00000000..eebec815 --- /dev/null +++ b/package/midori/midori.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# midori +# +################################################################################ + +MIDORI_VERSION = 0.5.11 +MIDORI_SOURCE = midori_$(MIDORI_VERSION)_all_.tar.bz2 +MIDORI_SITE = http://midori-browser.org/downloads +MIDORI_LICENSE = LGPL-2.1+ +MIDORI_LICENSE_FILES = COPYING +MIDORI_CPE_ID_VENDOR = midori-browser +MIDORI_DEPENDENCIES = \ + host-intltool \ + host-librsvg \ + host-pkgconf \ + host-vala \ + host-python \ + $(if $(BR2_PACKAGE_LIBGTK3_X11),gcr) \ + granite \ + libgtk3 \ + libsoup \ + libxml2 \ + sqlite \ + webkitgtk \ + $(TARGET_NLS_DEPENDENCIES) \ + $(if $(BR2_PACKAGE_LIBICONV),libiconv) + +MIDORI_CONF_OPTS = \ + -DHALF_BRO_INCOM_WEBKIT2=ON \ + -DUSE_GRANITE=ON \ + -DUSE_GTK3=ON \ + -DUSE_ZEITGEIST=OFF + +$(eval $(cmake-package)) diff --git a/package/mii-diag/0001-strchr.patch b/package/mii-diag/0001-strchr.patch new file mode 100644 index 00000000..fcfeb3c7 --- /dev/null +++ b/package/mii-diag/0001-strchr.patch @@ -0,0 +1,23 @@ +Use the strrchr() function instead of the deprecated rindex() +function. + +--- mii-diag-2.11.orig/mii-diag.c.orig 2008-06-25 11:08:52.000000000 +1000 ++++ mii-diag-2.11.orig/mii-diag.c 2005-03-27 03:56:33.000000000 +1000 +@@ -174,7 +174,7 @@ + { + int c, errflag = 0; + char **spp, *ifname; +- char *progname = rindex(argv[0], '/') ? rindex(argv[0], '/')+1 : argv[0]; ++ char *progname = strrchr(argv[0], '/') ? strrchr(argv[0], '/')+1 : argv[0]; + + while ((c = getopt_long(argc, argv, shortopts, longopts, 0)) != EOF) + switch (c) { +@@ -310,7 +310,7 @@ + str = endstr+1; + else { + fprintf(stderr, "Invalid driver parameter '%s'.\n", str); +- str = index(str, ','); ++ str = strchr(str, ','); + } + } else if (endstr[0] == ',') { + data32[i] = newval; diff --git a/package/mii-diag/Config.in b/package/mii-diag/Config.in new file mode 100644 index 00000000..37f3647b --- /dev/null +++ b/package/mii-diag/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_MII_DIAG + bool "mii-diag" + help + mii-diag allows you to manipulate the MII registers of + network cards. + + https://launchpad.net/ubuntu/+source/mii-diag diff --git a/package/mii-diag/mii-diag.hash b/package/mii-diag/mii-diag.hash new file mode 100644 index 00000000..2af3f960 --- /dev/null +++ b/package/mii-diag/mii-diag.hash @@ -0,0 +1,4 @@ +# From http://snapshot.debian.org/archive/debian/20141023T043132Z/pool/main/m/mii-diag/mii-diag_2.11-3.dsc +sha256 c690e87e6010607593c1cc2ccd5c481eb3be179387220ad445d8ab83d73ad41c mii-diag_2.11.orig.tar.gz +sha256 b49fd3e7c0c446a949c3ca246cc441824d7ef5a61530f884756a82b0b2997190 mii-diag_2.11-3.diff.gz +sha256 c83cf866874d6171fbea4e3786370483beb6d2898ac2ea91123b144effec7fcb mii-diag.c diff --git a/package/mii-diag/mii-diag.mk b/package/mii-diag/mii-diag.mk new file mode 100644 index 00000000..a7c64832 --- /dev/null +++ b/package/mii-diag/mii-diag.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# mii-diag +# +################################################################################ + +MII_DIAG_VERSION = 2.11 +MII_DIAG_SOURCE = mii-diag_$(MII_DIAG_VERSION).orig.tar.gz +MII_DIAG_PATCH = mii-diag_$(MII_DIAG_VERSION)-3.diff.gz +MII_DIAG_SITE = http://snapshot.debian.org/archive/debian/20141023T043132Z/pool/main/m/mii-diag +MII_DIAG_LICENSE = GPL # No version specified +MII_DIAG_LICENSE_FILES = mii-diag.c +MII_DIAG_CPE_ID_VENDOR = debian + +MII_DIAG_MAKE_OPTS = $(TARGET_CONFIGURE_OPTS) + +define MII_DIAG_DEBIAN_PATCHES + if [ -d $(@D)/debian/patches ]; then \ + $(APPLY_PATCHES) $(@D) $(@D)/debian/patches \*.patch; \ + fi +endef + +MII_DIAG_POST_PATCH_HOOKS = MII_DIAG_DEBIAN_PATCHES + +define MII_DIAG_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(MII_DIAG_MAKE_OPTS) -C $(@D) mii-diag +endef + +define MII_DIAG_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) DESTDIR=$(TARGET_DIR) -C $(@D) install-mii-diag +endef + +$(eval $(generic-package)) diff --git a/package/mimic/0001-Fix-linking-on-gcc-10.2.0-or-newer.patch b/package/mimic/0001-Fix-linking-on-gcc-10.2.0-or-newer.patch new file mode 100644 index 00000000..ea02bf58 --- /dev/null +++ b/package/mimic/0001-Fix-linking-on-gcc-10.2.0-or-newer.patch @@ -0,0 +1,27 @@ +From 77b36eaeb2c38eba571b8db7e9bb0fd507774e6d Mon Sep 17 00:00:00 2001 +From: Kris Gesling +Date: Tue, 11 May 2021 09:15:22 +0930 +Subject: [PATCH] Fix linking on gcc 10.2.0 or newer + +Co-authored-by: MichaelSabal + +[Retrieved from: +https://github.com/MycroftAI/mimic1/commit/77b36eaeb2c38eba571b8db7e9bb0fd507774e6d] +Signed-off-by: Fabrice Fontaine +--- + lang/cmu_indic_lang/cmu_indic_lang.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lang/cmu_indic_lang/cmu_indic_lang.h b/lang/cmu_indic_lang/cmu_indic_lang.h +index 75ee46c..83e2afa 100644 +--- a/lang/cmu_indic_lang/cmu_indic_lang.h ++++ b/lang/cmu_indic_lang/cmu_indic_lang.h +@@ -51,7 +51,7 @@ void cmu_indic_lang_init(cst_voice *v); + extern const cst_phoneset cmu_indic_phoneset; + extern const cst_cart cmu_indic_phrasing_cart; + +-const cst_regex * const cst_rx_not_indic; ++extern const cst_regex * const cst_rx_not_indic; + + #ifdef __cplusplus + } /* extern "C" */ diff --git a/package/mimic/Config.in b/package/mimic/Config.in new file mode 100644 index 00000000..79641d37 --- /dev/null +++ b/package/mimic/Config.in @@ -0,0 +1,41 @@ +comment "mimic needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR + +config BR2_PACKAGE_MIMIC + bool "mimic" + depends on BR2_USE_WCHAR + help + Mimic is a fast, lightweight Text-to-speech engine developed + by Mycroft A.I. and VocaliD, based on Carnegie Mellon + University's Flite (Festival-Lite) software. Mimic takes in + text and reads it out loud to create a high quality voice. + + https://github.com/MycroftAI/mimic + +if BR2_PACKAGE_MIMIC + +choice + prompt "audio backend" + default BR2_PACKAGE_MIMIC_AUDIO_BACKEND_NONE + +config BR2_PACKAGE_MIMIC_AUDIO_BACKEND_NONE + bool "none" + help + With no backend, mimic will only be able to produce .wav + files. + +config BR2_PACKAGE_MIMIC_AUDIO_BACKEND_ALSA + bool "alsa" + depends on BR2_PACKAGE_ALSA_LIB + +config BR2_PACKAGE_MIMIC_AUDIO_BACKEND_PORTAUDIO + bool "alsa via portaudio" + depends on BR2_PACKAGE_PORTAUDIO + +config BR2_PACKAGE_MIMIC_AUDIO_BACKEND_PULSEAUDIO + bool "pulseaudio" + depends on BR2_PACKAGE_PULSEAUDIO + +endchoice + +endif # BR2_PACKAGE_MIMIC diff --git a/package/mimic/mimic.hash b/package/mimic/mimic.hash new file mode 100644 index 00000000..10780d41 --- /dev/null +++ b/package/mimic/mimic.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 725003c9972d5b67c49d5ea6a89cb26b63414ff2c7adbbaf9200cf9eb55f80eb mimic-1.1.0.tar.gz +sha256 c423c1c6d260091d80ee4c00f386a10fea39963a3f1530f2c245f15dd20324ee COPYING diff --git a/package/mimic/mimic.mk b/package/mimic/mimic.mk new file mode 100644 index 00000000..2d246561 --- /dev/null +++ b/package/mimic/mimic.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# mimic +# +################################################################################ + +MIMIC_VERSION = 1.1.0 +MIMIC_SITE = $(call github,MycroftAI,mimic,$(MIMIC_VERSION)) +MIMIC_LICENSE = MIT +MIMIC_LICENSE_FILES = COPYING + +MIMIC_DEPENDENCIES = host-pkgconf + +ifeq ($(BR2_PACKAGE_MIMIC_AUDIO_BACKEND_ALSA),y) +MIMIC_AUDIO_BACKEND = alsa +MIMIC_DEPENDENCIES += alsa-lib +else ifeq ($(BR2_PACKAGE_MIMIC_AUDIO_BACKEND_PORTAUDIO),y) +MIMIC_AUDIO_BACKEND = portaudio +MIMIC_DEPENDENCIES += portaudio +else ifeq ($(BR2_PACKAGE_MIMIC_AUDIO_BACKEND_PULSEAUDIO),y) +MIMIC_AUDIO_BACKEND = pulseaudio +MIMIC_DEPENDENCIES += pulseaudio +else ifeq ($(BR2_PACKAGE_MIMIC_AUDIO_BACKEND_NONE),y) +MIMIC_AUDIO_BACKEND = none +endif + +MIMIC_CONF_OPTS += --with-audio=$(MIMIC_AUDIO_BACKEND) + +$(eval $(autotools-package)) diff --git a/package/minetest-game/Config.in b/package/minetest-game/Config.in new file mode 100644 index 00000000..cf92ea52 --- /dev/null +++ b/package/minetest-game/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_MINETEST_GAME + bool "minetest-game" + depends on BR2_PACKAGE_MINETEST + help + The main subgame for the Minetest engine. + + https://github.com/minetest/minetest_game diff --git a/package/minetest-game/minetest-game.hash b/package/minetest-game/minetest-game.hash new file mode 100644 index 00000000..1d22b62f --- /dev/null +++ b/package/minetest-game/minetest-game.hash @@ -0,0 +1,35 @@ +# Locally calculated +sha256 06c6c1d4b97af211dd0fa518a3e68a205f594e9816a4b2477e48d4d21d278e2d minetest-game-5.3.0.tar.gz + +sha256 f8a254e8d5f6b3ca3873f990986e86c864f943aa5dc9bf56808c5f4bfa509db0 LICENSE.txt +sha256 ed2afed388c470e08edc1104e4ff6d12b68a32a76b8c52d760a99d4d2d7716f3 mods/beds/license.txt +sha256 559749ba0d269b768e1b85bdac0f8b7a0cf100ecb3edd0df8529fe57cd4bfc0d mods/binoculars/license.txt +sha256 9e9dbe5236ba70d0337f9879b988c19c6a7b0c902eed202f775200b8bee6980d mods/boats/license.txt +sha256 e642798b595fb41901ae695326da9a167b0bd6b4055edec2396672f5f01bb16c mods/bones/license.txt +sha256 baf438bc48b7da1b8fc03d37d134473e1c1f33ffe2e926fa650e6d0c64872785 mods/bucket/license.txt +sha256 01370a00e7b2157a07ee21fa4dac9cc108c7449442f612a3e55cfe18b5b03c2b mods/butterflies/license.txt +sha256 6196d390ee0b6331766219aa82f31613fffb62476c03cf960190ab8c232b8822 mods/carts/license.txt +sha256 b6c3aca8da2f6c272fe431740dda0a349cff419f1f72e55c6de677379fc04169 mods/creative/license.txt +sha256 f78424e0872260d3f3af98e74faf1bbe6b9387cd5464b7ae931d1fc1cc93223c mods/default/license.txt +sha256 c0c652890fc80af8eefedbcfe1cd0d16b13b14cd1c7105c9c2bc9abe8cf1620c mods/doors/license.txt +sha256 33d0b8726dd27c8f0c96d6dfd611e0e980bbdbb8075fac7476d055518319ec1c mods/dungeon_loot/license.txt +sha256 011ebc82e96df3b825777e7531cb5d34cfce1f6ca27b7d3c80793c033d7c4f4e mods/dye/license.txt +sha256 29a05b102726b9a3115f7ec06d5188dac7b1c005d8cf1c4d6dc2d5544405a45c mods/env_sounds/license.txt +sha256 bdb104cdbe72a27407ade35144a8d1d52dd60c3ca626b5a87555b9d5d5c8af98 mods/farming/license.txt +sha256 61f826be9adee70ef0e37f3bf4891fecc4b027a21637b32981b98220723d6f37 mods/fire/license.txt +sha256 01370a00e7b2157a07ee21fa4dac9cc108c7449442f612a3e55cfe18b5b03c2b mods/fireflies/license.txt +sha256 d92ac36a0235f4c02f8cfe2137d7d632bd53374c44ead97f20c152dddf475837 mods/flowers/license.txt +sha256 ffbac006d197fcb8e36e9cdda638053ac80eef4e6446bbe36cb94bd28f54ba0b mods/game_commands/license.txt +sha256 857f64cd62c13e27f25363584342fe049885b16c6b2392f1ebd7c3a7fb6ca436 mods/give_initial_stuff/license.txt +sha256 dcbab8d7dc4137789958d19471807b37447fd303bced310d7d76d901eefca8ff mods/map/license.txt +sha256 65133ccf7fb7bf8ffe5e9bc148b193af7362bba925b15ab507da28494156297a mods/player_api/license.txt +sha256 0066e63d682d54a014ad3359794365a1abb87562d2b1e5e32093976d88c295b4 mods/screwdriver/license.txt +sha256 b903866d052774e4127952690ce62ca26aa5bc4c2ddd48fceae501fa0d24ed74 mods/sethome/license.txt +sha256 478b9944a446b4d88496d10736ddcd8ad5a3ca52f8b75f747315583d4012cb3c mods/sfinv/license.txt +sha256 e361fc900d9203859391d35c38c3284c91600d23c1617076c641ff7e9fe10b15 mods/spawn/license.txt +sha256 eab4c0cb318bb83c13362047a5a0fc5cb650a4e561ceb5a9124e5a1253cbc21a mods/stairs/license.txt +sha256 e8593deed04ed4199ce9303db900f32276e0b629fd7f0089074d13370c12d00a mods/tnt/license.txt +sha256 a0814bccd28157a160049efeac03864ff4c4dd6a34bc9cfcd3cc62de66fb156a mods/vessels/license.txt +sha256 e9ebf1b4b170e64a0ea6e246edd03689aeb859d6560b8372a8081c004b30cb65 mods/walls/license.txt +sha256 551b19e2c8b18c143301e090a1ceb5dc5d4ca243cad846de179d693439910816 mods/wool/license.txt +sha256 c71155c9a68a5242223c5f814c1b9b1270492729b0ff0add770b6418bccf17c9 mods/xpanes/license.txt diff --git a/package/minetest-game/minetest-game.mk b/package/minetest-game/minetest-game.mk new file mode 100644 index 00000000..7f1927b7 --- /dev/null +++ b/package/minetest-game/minetest-game.mk @@ -0,0 +1,49 @@ +################################################################################ +# +# minetest_game +# +################################################################################ + +MINETEST_GAME_VERSION = 5.3.0 +MINETEST_GAME_SITE = $(call github,minetest,minetest_game,$(MINETEST_GAME_VERSION)) +MINETEST_GAME_LICENSE = LGPL-2.1+ (code), CC-BY-SA-2.0, CC-BY-SA-3.0, \ + CC-BY-SA-4.0, MIT, CC0 1.0, CC-BY-2.0 (mods) +MINETEST_GAME_LICENSE_FILES = LICENSE.txt \ + mods/beds/license.txt \ + mods/binoculars/license.txt \ + mods/boats/license.txt \ + mods/bones/license.txt \ + mods/bucket/license.txt \ + mods/butterflies/license.txt \ + mods/carts/license.txt \ + mods/creative/license.txt \ + mods/default/license.txt \ + mods/doors/license.txt \ + mods/dungeon_loot/license.txt \ + mods/dye/license.txt \ + mods/env_sounds/license.txt \ + mods/farming/license.txt \ + mods/fire/license.txt \ + mods/fireflies/license.txt \ + mods/flowers/license.txt \ + mods/game_commands/license.txt \ + mods/give_initial_stuff/license.txt \ + mods/map/license.txt \ + mods/player_api/license.txt \ + mods/screwdriver/license.txt \ + mods/sethome/license.txt \ + mods/sfinv/license.txt \ + mods/spawn/license.txt \ + mods/stairs/license.txt \ + mods/tnt/license.txt \ + mods/vessels/license.txt \ + mods/walls/license.txt \ + mods/wool/license.txt \ + mods/xpanes/license.txt + +define MINETEST_GAME_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/usr/share/minetest/games/minetest_game + cp -dpfr $(@D)/* $(TARGET_DIR)/usr/share/minetest/games/minetest_game +endef + +$(eval $(generic-package)) diff --git a/package/minetest/Config.in b/package/minetest/Config.in new file mode 100644 index 00000000..b8ee175d --- /dev/null +++ b/package/minetest/Config.in @@ -0,0 +1,64 @@ +config BR2_PACKAGE_MINETEST + bool "minetest" + depends on BR2_INSTALL_LIBSTDCPP # irrlicht + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C++11 + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_PACKAGE_XORG7 # irrlicht + depends on BR2_PACKAGE_HAS_LIBGL # irrlicht + depends on BR2_PACKAGE_LUAJIT + select BR2_PACKAGE_IRRLICHT + select BR2_PACKAGE_GMP + select BR2_PACKAGE_JSONCPP + select BR2_PACKAGE_SQLITE + select BR2_PACKAGE_ZLIB + # At least one option must be enabled + select BR2_PACKAGE_MINETEST_CLIENT if !BR2_PACKAGE_MINETEST_SERVER + help + Minetest is a near-infinite-world block sandbox game and a + game engine, inspired by InfiniMiner, Minecraft, and the + like. + + http://www.minetest.net + +if BR2_PACKAGE_MINETEST + +config BR2_PACKAGE_MINETEST_CLIENT + bool "minetest client" + select BR2_PACKAGE_BZIP2 + select BR2_PACKAGE_LIBPNG + select BR2_PACKAGE_JPEG + select BR2_PACKAGE_XLIB_LIBXXF86VM + help + Build Minetest client. + +config BR2_PACKAGE_MINETEST_SERVER + bool "minetest server" + help + Build Minetest server. + +config BR2_PACKAGE_MINETEST_SOUND + bool "enable sound" + depends on BR2_PACKAGE_MINETEST_CLIENT + depends on BR2_PACKAGE_OPENAL_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # openal + select BR2_PACKAGE_LIBVORBIS + select BR2_PACKAGE_OPENAL + +comment "sound support needs a toolchain w/ threads NPTL" + depends on BR2_PACKAGE_MINETEST_CLIENT + depends on BR2_PACKAGE_OPENAL_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL + +endif + +comment "minetest needs a toolchain w/ C++, gcc >= 4.9, threads" + depends on BR2_PACKAGE_LUAJIT_ARCH_SUPPORTS + depends on !BR2_INSTALL_LIBSTDCPP \ + || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 \ + || !BR2_TOOLCHAIN_HAS_THREADS + +comment "minetest needs X11 and an OpenGL provider" + depends on (BR2_INSTALL_LIBSTDCPP \ + && BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 \ + && BR2_TOOLCHAIN_HAS_THREADS) + depends on !BR2_PACKAGE_HAS_LIBGL || !BR2_PACKAGE_XORG7 diff --git a/package/minetest/minetest.hash b/package/minetest/minetest.hash new file mode 100644 index 00000000..3459c9d1 --- /dev/null +++ b/package/minetest/minetest.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 65dc2049f24c93fa544500f310a61e289c1b8fa47bf60877b746a2c27a7238d6 minetest-5.3.0.tar.gz + +sha256 d2a488e385226c5b865219c6acc2aa98ba2e01e74dd0ac9dd8c0663bbbe31eb1 LICENSE.txt diff --git a/package/minetest/minetest.mk b/package/minetest/minetest.mk new file mode 100644 index 00000000..d120353a --- /dev/null +++ b/package/minetest/minetest.mk @@ -0,0 +1,93 @@ +################################################################################ +# +# minetest +# +################################################################################ + +MINETEST_VERSION = 5.3.0 +MINETEST_SITE = $(call github,minetest,minetest,$(MINETEST_VERSION)) +MINETEST_LICENSE = LGPL-2.1+ (code), CC-BY-SA-3.0 (textures and sounds) +MINETEST_LICENSE_FILES = LICENSE.txt + +MINETEST_DEPENDENCIES = gmp irrlicht jsoncpp luajit sqlite zlib + +MINETEST_CONF_OPTS = \ + -DDEFAULT_RUN_IN_PLACE=OFF \ + -DENABLE_GLES=OFF \ + -DENABLE_LUAJIT=ON \ + -DENABLE_CURSES=OFF \ + -DAPPLY_LOCALE_BLACKLIST=OFF \ + -DENABLE_SYSTEM_GMP=ON \ + -DENABLE_SYSTEM_JSONCPP=ON \ + -DBUILD_UNITTESTS=OFF + +ifeq ($(BR2_PACKAGE_MINETEST_CLIENT),y) +MINETEST_DEPENDENCIES += bzip2 jpeg libgl libpng xlib_libXxf86vm +MINETEST_CONF_OPTS += -DBUILD_CLIENT=ON +else +MINETEST_CONF_OPTS += -DBUILD_CLIENT=OFF +endif + +ifeq ($(BR2_PACKAGE_MINETEST_SERVER),y) +MINETEST_CONF_OPTS += -DBUILD_SERVER=ON +else +MINETEST_CONF_OPTS += -DBUILD_SERVER=OFF +endif + +ifeq ($(BR2_PACKAGE_MINETEST_SOUND),y) +MINETEST_DEPENDENCIES += libvorbis openal +MINETEST_CONF_OPTS += -DENABLE_SOUND=ON +else +MINETEST_CONF_OPTS += -DENABLE_SOUND=OFF +endif + +ifeq ($(BR2_PACKAGE_FREETYPE),y) +MINETEST_DEPENDENCIES += freetype +MINETEST_CONF_OPTS += -DENABLE_FREETYPE=ON +else +MINETEST_CONF_OPTS += -DENABLE_FREETYPE=OFF +endif + +ifeq ($(BR2_PACKAGE_HIREDIS),y) +MINETEST_DEPENDENCIES += hiredis +MINETEST_CONF_OPTS += -DENABLE_REDIS=ON +else +MINETEST_CONF_OPTS += -DENABLE_REDIS=OFF +endif + +ifeq ($(BR2_PACKAGE_LEVELDB),y) +MINETEST_DEPENDENCIES += leveldb +MINETEST_CONF_OPTS += -DENABLE_LEVELDB=ON +else +MINETEST_CONF_OPTS += -DENABLE_LEVELDB=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBCURL),y) +MINETEST_DEPENDENCIES += libcurl +MINETEST_CONF_OPTS += -DENABLE_CURL=ON +else +MINETEST_CONF_OPTS += -DENABLE_CURL=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBSPATIALINDEX),y) +MINETEST_DEPENDENCIES += libspatialindex +MINETEST_CONF_OPTS += -DENABLE_SPATIAL=ON +else +MINETEST_CONF_OPTS += -DENABLE_SPATIAL=OFF +endif + +ifeq ($(BR2_PACKAGE_POSTGRESQL),y) +MINETEST_DEPENDENCIES += postgresql +MINETEST_CONF_OPTS += -DENABLE_POSTGRESQL=ON +else +MINETEST_CONF_OPTS += -DENABLE_POSTGRESQL=OFF +endif + +ifeq ($(BR2_SYSTEM_ENABLE_NLS),y) +MINETEST_DEPENDENCIES += $(TARGET_NLS_DEPENDENCIES) +MINETEST_CONF_OPTS += -DENABLE_GETTEXT=ON +else +MINETEST_CONF_OPTS += -DENABLE_GETTEXT=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/mini-snmpd/0001-linux.c-fix-musl-build.patch b/package/mini-snmpd/0001-linux.c-fix-musl-build.patch new file mode 100644 index 00000000..8e8bb090 --- /dev/null +++ b/package/mini-snmpd/0001-linux.c-fix-musl-build.patch @@ -0,0 +1,46 @@ +From 73fa408f51ec25121075aaccac9c9db1c68567cd Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Thu, 12 Mar 2020 10:02:18 +0100 +Subject: [PATCH] linux.c: fix musl build + +Remove include on linux/if_link.h to avoid the following build failure +with musl: + +In file included from /home/buildroot/autobuild/instance-2/output-1/host/i586-buildroot-linux-musl/sysroot/usr/include/linux/kernel.h:4, + from /home/buildroot/autobuild/instance-2/output-1/host/i586-buildroot-linux-musl/sysroot/usr/include/linux/netlink.h:4, + from /home/buildroot/autobuild/instance-2/output-1/host/i586-buildroot-linux-musl/sysroot/usr/include/linux/if_link.h:5, + from linux.c:21: +/home/buildroot/autobuild/instance-2/output-1/host/i586-buildroot-linux-musl/sysroot/usr/include/linux/sysinfo.h:7:8: error: redefinition of 'struct sysinfo' + struct sysinfo { + ^~~~~~~ +In file included from linux.c:19: +/home/buildroot/autobuild/instance-2/output-1/host/i586-buildroot-linux-musl/sysroot/usr/include/sys/sysinfo.h:10:8: note: originally defined here + struct sysinfo { + ^~~~~~~ + CC mini_snmpd-globals.o + +Fixes: + - http://autobuild.buildroot.org/results/6903a0f685076b4a2c2824de6158da40e9e712d8 + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/troglobit/mini-snmpd/commit/73fa408f51ec25121075aaccac9c9db1c68567cd] +--- + linux.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/linux.c b/linux.c +index a657912..86a7085 100644 +--- a/linux.c ++++ b/linux.c +@@ -18,7 +18,6 @@ + #include + #include + #include +-#include + #include + #include + #include +-- +2.25.1 + diff --git a/package/mini-snmpd/Config.in b/package/mini-snmpd/Config.in new file mode 100644 index 00000000..1f61cddb --- /dev/null +++ b/package/mini-snmpd/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_MINI_SNMPD + bool "mini-snmpd" + help + Mini SNMPd is a minimal implementation targeted at small or + embedded UNIX systems with limited resources + + http://troglobit.com/mini-snmpd.html diff --git a/package/mini-snmpd/mini-snmpd b/package/mini-snmpd/mini-snmpd new file mode 100644 index 00000000..0ca9901d --- /dev/null +++ b/package/mini-snmpd/mini-snmpd @@ -0,0 +1,2 @@ +# Require client authentication, thus SNMP version 2c +EXTRA_PARAMS=-a diff --git a/package/mini-snmpd/mini-snmpd.hash b/package/mini-snmpd/mini-snmpd.hash new file mode 100644 index 00000000..2d668092 --- /dev/null +++ b/package/mini-snmpd/mini-snmpd.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 de00c475a3c70c56f3ee97cd683cb71009d3521d60b1f589c5a91b4671ede9f3 mini-snmpd-1.6.tar.gz +sha256 8a43b895972a24567297f44f35dab0f5f9ed3b7db6dac0bf6094075b27ab9d56 COPYING diff --git a/package/mini-snmpd/mini-snmpd.mk b/package/mini-snmpd/mini-snmpd.mk new file mode 100644 index 00000000..1f6e5c19 --- /dev/null +++ b/package/mini-snmpd/mini-snmpd.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# mini-snmpd +# +################################################################################ + +MINI_SNMPD_VERSION = 1.6 +MINI_SNMPD_SITE = $(call github,troglobit,mini-snmpd,v$(MINI_SNMPD_VERSION)) +MINI_SNMPD_LICENSE = GPL-2.0 +MINI_SNMPD_LICENSE_FILES = COPYING +MINI_SNMPD_CPE_ID_VENDOR = minisnmpd_project +MINI_SNMPD_CPE_ID_PRODUCT = minisnmpd +MINI_SNMPD_AUTORECONF = YES +MINI_SNMPD_DEPENDENCIES = host-pkgconf + +define MINI_SNMPD_INSTALL_ETC_DEFAULT + $(INSTALL) -D -m 644 package/mini-snmpd/mini-snmpd \ + $(TARGET_DIR)/etc/default/mini-snmpd +endef + +MINI_SNMPD_POST_INSTALL_TARGET_HOOKS += MINI_SNMPD_INSTALL_ETC_DEFAULT + +$(eval $(autotools-package)) diff --git a/package/minicom/Config.in b/package/minicom/Config.in new file mode 100644 index 00000000..efc4f1b7 --- /dev/null +++ b/package/minicom/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_MINICOM + bool "minicom" + depends on BR2_USE_WCHAR + depends on BR2_USE_MMU # fork + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + select BR2_PACKAGE_NCURSES + help + Minicom is a menu driven communications program. It emulates + ANSI and VT102 terminals. It has a dialing directory and auto + zmodem download. + + https://salsa.debian.org/minicom-team/minicom + +comment "minicom needs a toolchain w/ wchar" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR diff --git a/package/minicom/minicom.hash b/package/minicom/minicom.hash new file mode 100644 index 00000000..42a4499c --- /dev/null +++ b/package/minicom/minicom.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 38cea30913a20349326ff3f1763ee1512b7b41601c24f065f365e18e9db0beba minicom-2.8.tar.bz2 +sha256 cf80a758014eefbf068afffe3d462fc34ff4f528527524d8e100329c42094e15 COPYING diff --git a/package/minicom/minicom.mk b/package/minicom/minicom.mk new file mode 100644 index 00000000..b81ee521 --- /dev/null +++ b/package/minicom/minicom.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# minicom +# +################################################################################ + +MINICOM_VERSION = 2.8 +MINICOM_SOURCE = minicom-$(MINICOM_VERSION).tar.bz2 +MINICOM_SITE = \ + https://salsa.debian.org/minicom-team/minicom/-/archive/$(MINICOM_VERSION) +MINICOM_LICENSE = GPL-2.0+ +MINICOM_LICENSE_FILES = COPYING +MINICOM_CPE_ID_VENDOR = minicom_project +MINICOM_AUTORECONF = YES + +MINICOM_DEPENDENCIES = ncurses $(if $(BR2_ENABLE_LOCALE),,libiconv) \ + $(TARGET_NLS_DEPENDENCIES) host-pkgconf +# add host-gettext for AM_ICONV macro +MINICOM_DEPENDENCIES += host-gettext + +MINICOM_CONF_OPTS = \ + --enable-dfl-port=/dev/ttyS1 \ + --enable-lock-dir=/var/lock + +$(eval $(autotools-package)) diff --git a/package/minidlna/Config.in b/package/minidlna/Config.in new file mode 100644 index 00000000..0083c9d8 --- /dev/null +++ b/package/minidlna/Config.in @@ -0,0 +1,26 @@ +config BR2_PACKAGE_MINIDLNA + bool "minidlna" + depends on !BR2_STATIC_LIBS + depends on BR2_USE_WCHAR # flac + depends on BR2_USE_MMU # fork + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS + select BR2_PACKAGE_FFMPEG + select BR2_PACKAGE_FLAC + select BR2_PACKAGE_LIBVORBIS # selects libogg + select BR2_PACKAGE_LIBOGG + select BR2_PACKAGE_LIBID3TAG # selects zlib + select BR2_PACKAGE_LIBEXIF + select BR2_PACKAGE_JPEG + select BR2_PACKAGE_SQLITE + help + MiniDLNA (aka ReadyDLNA) is server software with the aim of + being fully compliant with DLNA/UPnP-AV clients. + + http://minidlna.sourceforge.net/ + +comment "minidlna needs a toolchain w/ dynamic library, threads, wchar" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR || \ + BR2_STATIC_LIBS diff --git a/package/minidlna/S60minidlnad b/package/minidlna/S60minidlnad new file mode 100644 index 00000000..9b158afd --- /dev/null +++ b/package/minidlna/S60minidlnad @@ -0,0 +1,43 @@ +#!/bin/sh +# +# minidlnad Starts minidlnad. +# + +start() { + printf "Starting minidlna: " + umask 077 + start-stop-daemon -S -q -p /var/run/minidlna/minidlna.pid \ + --exec /usr/sbin/minidlnad -- "$@" + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +stop() { + printf "Stopping minidlna: " + start-stop-daemon -K -q -p /var/run/minidlna/minidlna.pid + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +restart() { + stop + # Sleep needed for minidlna to restart properly + sleep 1 + start "$@" +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + force-reload) + restart -R + ;; + *) + echo "Usage: $0 {start|stop|restart|force-reload}" + exit 1 +esac + +exit $? diff --git a/package/minidlna/minidlna.hash b/package/minidlna/minidlna.hash new file mode 100644 index 00000000..175fe673 --- /dev/null +++ b/package/minidlna/minidlna.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/minidlna/files/minidlna/1.3.0/ +sha1 6563a881884879b2aef52611934e08bb42985964 minidlna-1.3.0.tar.gz +# Locally computed +sha256 47d9b06b4c48801a4c1112ec23d24782728b5495e95ec2195bbe5c81bc2d3c63 minidlna-1.3.0.tar.gz +sha256 79146b7f558e56510b9a714ff75318c05ab93aeccfd6597497b9bce212cf92ea COPYING +sha256 94876d7886116e176e702b4902bd9f19731a6883db5f229ac2a7058a22aa6529 LICENCE.miniupnpd diff --git a/package/minidlna/minidlna.mk b/package/minidlna/minidlna.mk new file mode 100644 index 00000000..86a2bb36 --- /dev/null +++ b/package/minidlna/minidlna.mk @@ -0,0 +1,38 @@ +################################################################################ +# +# minidlna +# +################################################################################ + +MINIDLNA_VERSION = 1.3.0 +MINIDLNA_SITE = https://downloads.sourceforge.net/project/minidlna/minidlna/$(MINIDLNA_VERSION) +MINIDLNA_LICENSE = GPL-2.0, BSD-3-Clause +MINIDLNA_LICENSE_FILES = COPYING LICENCE.miniupnpd +MINIDLNA_CPE_ID_VENDOR = readymedia_project +MINIDLNA_CPE_ID_PRODUCT = readymedia + +MINIDLNA_DEPENDENCIES = \ + $(TARGET_NLS_DEPENDENCIES) \ + ffmpeg flac libvorbis libogg libid3tag libexif jpeg sqlite \ + host-xutil_makedepend + +MINIDLNA_CONF_OPTS = \ + --disable-static + +define MINIDLNA_INSTALL_CONF + $(INSTALL) -D -m 644 $(@D)/minidlna.conf $(TARGET_DIR)/etc/minidlna.conf +endef + +MINIDLNA_POST_INSTALL_TARGET_HOOKS += MINIDLNA_INSTALL_CONF + +define MINIDLNA_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/minidlna/S60minidlnad \ + $(TARGET_DIR)/etc/init.d/S60minidlnad +endef + +define MINIDLNA_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0644 package/minidlna/minidlnad.service \ + $(TARGET_DIR)/usr/lib/systemd/system/minidlnad.service +endef + +$(eval $(autotools-package)) diff --git a/package/minidlna/minidlnad.service b/package/minidlna/minidlnad.service new file mode 100644 index 00000000..4e968d38 --- /dev/null +++ b/package/minidlna/minidlnad.service @@ -0,0 +1,11 @@ +[Unit] +Description=minidlna server +After=network.target + +[Service] +Type=forking +ExecStart=/usr/sbin/minidlnad +PIDFile=/run/minidlna/minidlna.pid + +[Install] +WantedBy=multi-user.target diff --git a/package/minigui5/Config.in b/package/minigui5/Config.in new file mode 100644 index 00000000..cdcc68b7 --- /dev/null +++ b/package/minigui5/Config.in @@ -0,0 +1,37 @@ +config BR2_PACKAGE_MINIGUI5 + bool "MINIGUI" + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C++11, GCC_BUG_57694 + depends on !BR2_STATIC_LIBS + depends on BR2_mips64el || BR2_mipsel || BR2_loongarch64 + select BR2_PACKAGE_ICU + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_JPEG + select BR2_PACKAGE_LIBPNG + select BR2_PACKAGE_FREETYPE + select BR2_PACKAGE_HARFBUZZ + select BR2_PACKAGE_LIBDRM + select BR2_PACKAGE_MTDEV + select BR2_PACKAGE_KMOD + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBBLKID + select BR2_PACKAGE_HAS_UDEV + select BR2_PACKAGE_LIBEVDEV + select BR2_PACKAGE_LIBINPUT + select BR2_PACKAGE_SQLITE + select BR2_PACKAGE_SQLITE_STAT4 + select BR2_PACKAGE_SQLITE_ENABLE_COLUMN_METADATA + select BR2_PACKAGE_SQLITE_ENABLE_FTS3 + select BR2_PACKAGE_SQLITE_ENABLE_JSON1 + select BR2_PACKAGE_SQLITE_ENABLE_UNLOCK_NOTIFY + select BR2_PACKAGE_SQLITE_SECURE_DELETE + select BR2_PACKAGE_SQLITE_NO_SYNC + select BR2_PACKAGE_LIBELECTRIC_FENCE + select BR2_PACKAGE_PIXMAN + help + This option enables the minigui5 framework. + this lib will install whitout compiler + now will support mipsel mips64el and LA64 + it will disable chipmunk by buildroot which version is 7.0.2 + and use chipmunk 5.3.2 to overlay rootfs + diff --git a/package/minigui5/minigui5-loongarch64.tar.gz b/package/minigui5/minigui5-loongarch64.tar.gz new file mode 100644 index 00000000..6296f4b9 Binary files /dev/null and b/package/minigui5/minigui5-loongarch64.tar.gz differ diff --git a/package/minigui5/minigui5-mips64el.tar.gz b/package/minigui5/minigui5-mips64el.tar.gz new file mode 100644 index 00000000..f0c33ee6 Binary files /dev/null and b/package/minigui5/minigui5-mips64el.tar.gz differ diff --git a/package/minigui5/minigui5-mipsel.tar.gz b/package/minigui5/minigui5-mipsel.tar.gz new file mode 100644 index 00000000..c39f4d8c Binary files /dev/null and b/package/minigui5/minigui5-mipsel.tar.gz differ diff --git a/package/minigui5/minigui5-mipsel_49.tar.gz b/package/minigui5/minigui5-mipsel_49.tar.gz new file mode 100644 index 00000000..0b1bffb8 Binary files /dev/null and b/package/minigui5/minigui5-mipsel_49.tar.gz differ diff --git a/package/minigui5/minigui5.mk b/package/minigui5/minigui5.mk new file mode 100644 index 00000000..515274cf --- /dev/null +++ b/package/minigui5/minigui5.mk @@ -0,0 +1,46 @@ +################################################################################ +# +# minigui5 +# +################################################################################ + +ifeq ($(BR2_mipsel),y) + +ifeq ($(BR2_TOOLCHAIN_EXTERNAL_GCC_4_9),y) +MINIGUI5_SITE = $(TOPDIR)/package/minigui5/minigui5-$(BR2_ARCH)_49.tar.gz +else +MINIGUI5_SITE = $(TOPDIR)/package/minigui5/minigui5-$(BR2_ARCH)_49.tar.gz +endif + +else +MINIGUI5_SITE = $(TOPDIR)/package/minigui5/minigui5-$(BR2_ARCH)_49.tar.gz +endif +MINIGUI5_SITE_METHOD = file +MINIGUI5_DEPENDENCIES = zlib icu libpng jpeg freetype harfbuzz libdrm mtdev kmod udev libinput sqlite pixman + +MINIGUI5_INSTALL_STAGING = YES +MINIGUI5_INSTALL_TARGET = YES + +MINIGUI5_EX_PATH = $(BUILD_DIR)/minigui5-install + +define MINIGUI5_EXTRACT_CMDS + echo "see "$(BR2_TOOLCHAIN_EXTERNAL_GCC_4_9) + echo "see "$(MINIGUI5_SITE) + tar -zxf $(MINIGUI5_SITE) -C $(BUILD_DIR)/ +endef + +define MINIGUI5_CONFIGURE_CMDS + echo "nothing to do" +endef + +define MINIGUI5_BUILD_CMDS + echo "nothing to do" +endef + +define MINIGUI5_INSTALL_TARGET_CMDS + cd $(MINIGUI5_EX_PATH) && cp ./etc/* $(TOPDIR)/output/target/etc && mkdir -p $(TOPDIR)/output/target/usr/local/share && cp ./lib/* $(TOPDIR)/output/target/usr/lib && cp -a ./share/* $(TOPDIR)/output/target/usr/local/share && cp -a ./minigui-sample/ $(TOPDIR)/output/target/home +endef +# Must be last so can override all options set by Buildroot + +$(eval $(generic-package)) + diff --git a/package/minimodem/Config.in b/package/minimodem/Config.in new file mode 100644 index 00000000..7d4efb69 --- /dev/null +++ b/package/minimodem/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_MINIMODEM + bool "minimodem" + select BR2_PACKAGE_FFTW + select BR2_PACKAGE_FFTW_SINGLE + select BR2_PACKAGE_LIBSNDFILE if !BR2_PACKAGE_ALSA_LIB_PCM && !BR2_PACKAGE_PULSEAUDIO + help + Minimodem is a command-line program which decodes (or + generates) audio modem tones at any specified baud rate, + using various framing protocols. It acts a general-purpose + software FSK modem, and includes support for various + standard FSK protocols such as Bell103, Bell202, RTTY, + TTY/TDD NOAA SAME, and Caller-ID. + + http://www.whence.com/minimodem/ diff --git a/package/minimodem/minimodem.hash b/package/minimodem/minimodem.hash new file mode 100644 index 00000000..084a5606 --- /dev/null +++ b/package/minimodem/minimodem.hash @@ -0,0 +1,2 @@ +sha256 f8cca4db8e3f284d67f843054d6bb4d88a3db5e77b26192410e41e9a06f4378e minimodem-0.24.tar.gz +sha256 c298178753129680ef6d3112f0f8b61acc405c86c1997dfe59735257988f8b33 COPYING diff --git a/package/minimodem/minimodem.mk b/package/minimodem/minimodem.mk new file mode 100644 index 00000000..9b9ee158 --- /dev/null +++ b/package/minimodem/minimodem.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# minimodem +# +################################################################################ + +MINIMODEM_VERSION = 0.24 +MINIMODEM_SITE = http://www.whence.com/minimodem +MINIMODEM_LICENSE = GPL-3.0+ +MINIMODEM_LICENSE_FILES = COPYING + +MINIMODEM_DEPENDENCIES = fftw-single host-pkgconf + +ifeq ($(BR2_PACKAGE_ALSA_LIB_PCM),y) +MINIMODEM_DEPENDENCIES += alsa-lib +MINIMODEM_CONF_OPTS += --with-alsa +else +MINIMODEM_CONF_OPTS += --without-alsa +endif + +ifeq ($(BR2_PACKAGE_PULSEAUDIO),y) +MINIMODEM_DEPENDENCIES += pulseaudio +MINIMODEM_CONF_OPTS += --with-pulseaudio +else +MINIMODEM_CONF_OPTS += --without-pulseaudio +endif + +ifeq ($(BR2_PACKAGE_LIBSNDFILE),y) +MINIMODEM_DEPENDENCIES += libsndfile +MINIMODEM_CONF_OPTS += --with-sndfile +else +MINIMODEM_CONF_OPTS += --without-sndfile +endif + +$(eval $(autotools-package)) diff --git a/package/minissdpd/Config.in b/package/minissdpd/Config.in new file mode 100644 index 00000000..226cff0a --- /dev/null +++ b/package/minissdpd/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_MINISSDPD + bool "minissdpd" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBNFNETLINK + help + SSDP managing daemon. Designed to work with miniupnpc, + miniupnpd, minidlna, etc. + + http://miniupnp.free.fr/ diff --git a/package/minissdpd/S50minissdpd b/package/minissdpd/S50minissdpd new file mode 100644 index 00000000..6235e06b --- /dev/null +++ b/package/minissdpd/S50minissdpd @@ -0,0 +1,47 @@ +#!/bin/sh + +NAME=minissdpd +PIDFILE=/var/run/$NAME.pid +DAEMON=/usr/sbin/$NAME +CFGFILE=/etc/default/$NAME + +IFACE=eth0 + +# Read configuration variable file if it is present +if [ -f $CFGFILE ]; then + . $CFGFILE +fi + +DAEMON_ARGS="-i $IFACE" + +start() { + printf "Starting $NAME: " + start-stop-daemon -S -q -m -b -p $PIDFILE --exec $DAEMON -- $DAEMON_ARGS + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +stop() { + printf "Stopping $NAME: " + start-stop-daemon -K -q -p $PIDFILE + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/minissdpd/minissdpd.hash b/package/minissdpd/minissdpd.hash new file mode 100644 index 00000000..385a5a0c --- /dev/null +++ b/package/minissdpd/minissdpd.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 177ab1907cc0fd20c8cafd13ca8674c7ec1828aa6101da9bb066408ccada7350 minissdpd-1.5.20200928.tar.gz +sha256 00c8368dd1574b025df65f24f61c32d1297ff9b6dc695fda964b1b1efc7a53d3 LICENSE diff --git a/package/minissdpd/minissdpd.mk b/package/minissdpd/minissdpd.mk new file mode 100644 index 00000000..214af763 --- /dev/null +++ b/package/minissdpd/minissdpd.mk @@ -0,0 +1,38 @@ +################################################################################ +# +# minissdpd +# +################################################################################ + +MINISSDPD_VERSION = 1.5.20200928 +MINISSDPD_SITE = http://miniupnp.free.fr/files +MINISSDPD_LICENSE = BSD-3-Clause +MINISSDPD_LICENSE_FILES = LICENSE +MINISSDPD_CPE_ID_VENDOR = miniupnp_project +MINISSDPD_DEPENDENCIES = libnfnetlink + +define MINISSDPD_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(TARGET_CFLAGS) -D_GNU_SOURCE" \ + -C $(@D) +endef + +define MINISSDPD_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + PREFIX=$(TARGET_DIR) install +endef + +# Use dedicated init scripts for systemV and systemd instead of using +# minissdpd.init.d.script as it is not compatible with buildroot init system +define MINISSDPD_INSTALL_INIT_SYSV + $(RM) $(TARGET_DIR)/etc/init.d/minissdpd + $(INSTALL) -D -m 0755 package/minissdpd/S50minissdpd \ + $(TARGET_DIR)/etc/init.d/S50minissdpd +endef + +define MINISSDPD_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/minissdpd/minissdpd.service \ + $(TARGET_DIR)/usr/lib/systemd/system/minissdpd.service +endef + +$(eval $(generic-package)) diff --git a/package/minissdpd/minissdpd.service b/package/minissdpd/minissdpd.service new file mode 100644 index 00000000..59ed9c86 --- /dev/null +++ b/package/minissdpd/minissdpd.service @@ -0,0 +1,12 @@ +[Unit] +Description=SSDP managing daemon +After=network.target + +[Service] +Environment="IFACE=eth0" +EnvironmentFile=/etc/default/minissdpd +ExecStart=/usr/sbin/minissdpd -i $IFACE +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/package/minizip/Config.in b/package/minizip/Config.in new file mode 100644 index 00000000..e4d185d9 --- /dev/null +++ b/package/minizip/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_MINIZIP + bool "minizip" + depends on BR2_USE_WCHAR + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + Enables to extract files from a .zip archive file. + It is compatible with PKZip 2.04g, WinZip, InfoZip, + MimarSinan Codex Suite 2002 tools, and compatible sofware. + + https://github.com/nmoinvaz/minizip + +config BR2_PACKAGE_MINIZIP_DEMOS + bool "minizip" + depends on BR2_PACKAGE_MINIZIP + help + Enable minizip binary tool. + +comment "minizip needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR diff --git a/package/minizip/minizip.hash b/package/minizip/minizip.hash new file mode 100644 index 00000000..f150770a --- /dev/null +++ b/package/minizip/minizip.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 c2889690b1a1f55898d37d3fb51f05183a4861fb7d53ab702c6a5777bf232b75 minizip-2.10.6.tar.gz +sha256 675181c03fc1302a1c8554c00f7be9bb420c5dbc9dcc2013433cec144413de03 LICENSE diff --git a/package/minizip/minizip.mk b/package/minizip/minizip.mk new file mode 100644 index 00000000..53f33fb9 --- /dev/null +++ b/package/minizip/minizip.mk @@ -0,0 +1,74 @@ +################################################################################ +# +# minizip +# +################################################################################ + +MINIZIP_VERSION = 2.10.6 +MINIZIP_SITE = $(call github,nmoinvaz,minizip,$(MINIZIP_VERSION)) +MINIZIP_DEPENDENCIES = host-pkgconf +MINIZIP_INSTALL_STAGING = YES +MINIZIP_CONF_OPTS = \ + $(if $(BR2_PACKAGE_MINIZIP_DEMOS),-DMZ_BUILD_TEST=ON) \ + -DMZ_COMPAT=OFF \ + -DMZ_FETCH_LIBS=OFF +MINIZIP_LICENSE = Zlib +MINIZIP_LICENSE_FILES = LICENSE +MINIZIP_CPE_ID_VENDOR = minizip_project + +ifeq ($(BR2_PACKAGE_BZIP2),y) +MINIZIP_DEPENDENCIES += bzip2 +MINIZIP_CONF_OPTS += -DMZ_BZIP2=ON +else +MINIZIP_CONF_OPTS += -DMZ_BZIP2=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBICONV),y) +MINIZIP_DEPENDENCIES += libiconv +MINIZIP_CONF_OPTS += -DMZ_ICONV=ON +else +MINIZIP_CONF_OPTS += -DMZ_ICONV=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBBSD),y) +MINIZIP_DEPENDENCIES += libbsd +MINIZIP_CONF_OPTS += -DMZ_LIBBSD=ON +else +MINIZIP_CONF_OPTS += -DMZ_LIBBSD=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +MINIZIP_DEPENDENCIES += openssl +MINIZIP_CONF_OPTS += \ + -DMZ_OPENSSL=ON \ + -DMZ_PKCRYPT=ON \ + -DMZ_WZAES=ON +else +MINIZIP_CONF_OPTS += \ + -DMZ_OPENSSL=OFF \ + -DMZ_PKCRYPT=OFF \ + -DMZ_WZAES=OFF +endif + +ifeq ($(BR2_PACKAGE_XZ),y) +MINIZIP_DEPENDENCIES += xz +MINIZIP_CONF_OPTS += -DMZ_LZMA=ON +else +MINIZIP_CONF_OPTS += -DMZ_LZMA=OFF +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +MINIZIP_DEPENDENCIES += zlib +MINIZIP_CONF_OPTS += -DMZ_ZLIB=ON +else +MINIZIP_CONF_OPTS += -DMZ_ZLIB=OFF +endif + +ifeq ($(BR2_PACKAGE_ZSTD),y) +MINIZIP_DEPENDENCIES += zstd +MINIZIP_CONF_OPTS += -DMZ_ZSTD=ON +else +MINIZIP_CONF_OPTS += -DMZ_ZSTD=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/miraclecast/Config.in b/package/miraclecast/Config.in new file mode 100644 index 00000000..57bd57a9 --- /dev/null +++ b/package/miraclecast/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_MIRACLECAST + bool "miraclecast" + depends on BR2_PACKAGE_SYSTEMD + depends on BR2_TOOLCHAIN_USES_GLIBC + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_GSTREAMER1 + select BR2_PACKAGE_READLINE + help + The MiracleCast project provides software to connect external + monitors to your system via Wifi. It is compatible to the + Wifi-Display specification also known as Miracast. MiracleCast + implements the Display-Source as well as Display-Sink side. + + https://github.com/albfan/miraclecast + +comment "miraclecast needs systemd and a glibc toolchain w/ threads and wchar" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_USES_GLIBC || !BR2_USE_WCHAR \ + || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_PACKAGE_SYSTEMD diff --git a/package/miraclecast/miraclecast.hash b/package/miraclecast/miraclecast.hash new file mode 100644 index 00000000..1ec0b27f --- /dev/null +++ b/package/miraclecast/miraclecast.hash @@ -0,0 +1,6 @@ +# Locally calculated +sha256 e11440f782519663db367285dd54b53eb5feb78682dac42bd90230222de9f0fd miraclecast-c94be167c85c6ec8badd7ac79e3dea2e0b73225c.tar.gz +sha256 66bdcc8bcbd1d5ee336c4c8e8749ea538e17b0c0e22b0f705025deb1e912a6d3 COPYING +sha256 8e136a0e16783d79792e6a57a1422a40acea2e18affb5e2cecb858382f8b0a6c LICENSE_gdhcp +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 LICENSE_htable +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 LICENSE_lgpl diff --git a/package/miraclecast/miraclecast.mk b/package/miraclecast/miraclecast.mk new file mode 100644 index 00000000..f75191b2 --- /dev/null +++ b/package/miraclecast/miraclecast.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# miraclecast +# +################################################################################ + +MIRACLECAST_VERSION = c94be167c85c6ec8badd7ac79e3dea2e0b73225c +MIRACLECAST_SITE = $(call github,albfan,miraclecast,$(MIRACLECAST_VERSION)) +MIRACLECAST_LICENSE = LGPL-2.1+, GPL-2.0 (gdhcp) +MIRACLECAST_LICENSE_FILES = COPYING LICENSE_gdhcp LICENSE_htable LICENSE_lgpl +MIRACLECAST_DEPENDENCIES = host-pkgconf systemd gstreamer1 \ + readline libglib2 +# Straight out the repository, no ./configure +MIRACLECAST_AUTORECONF = YES + +define MIRACLECAST_INSTALL_DBUS_POLICY + $(INSTALL) -m 0644 -D \ + $(@D)/res/org.freedesktop.miracle.conf \ + $(TARGET_DIR)/etc/dbus-1/system.d/org.freedesktop.miracle.conf +endef +MIRACLECAST_POST_INSTALL_TARGET_HOOKS += MIRACLECAST_INSTALL_DBUS_POLICY + +$(eval $(autotools-package)) diff --git a/package/mjpegtools/0001-PROGRAM_NOPIC-apparently-causes-problems-on-some-x86_64-systems.patch b/package/mjpegtools/0001-PROGRAM_NOPIC-apparently-causes-problems-on-some-x86_64-systems.patch new file mode 100644 index 00000000..f5de8ee9 --- /dev/null +++ b/package/mjpegtools/0001-PROGRAM_NOPIC-apparently-causes-problems-on-some-x86_64-systems.patch @@ -0,0 +1,73 @@ +From e69557bea18eb7c3069c9527cc30f7cd91be27b7 Mon Sep 17 00:00:00 2001 +From: sms00 +Date: Thu, 28 Nov 2013 22:39:41 +0000 +Subject: [PATCH] PROGRAM_NOPIC apparently causes problems on some x86_64 + systems, has little to no performance effect on x86_64 systems and even on + x86 systems most programs are I/O bound anyhow. So remove the 4 uses of the + flag + +git-svn-id: https://svn.code.sf.net/p/mjpeg/Code/trunk/mjpeg_play@3359 3be20b7b-d6de-45d7-9b51-1db703c412de + +[Retrieved (and backported by removing INSTALL updates) from: +https://github.com/jaystevens/mjpegtools/commit/e69557bea18eb7c3069c9527cc30f7cd91be27b7] +Signed-off-by: Fabrice Fontaine +--- + y4mdenoise/Makefile.am | 4 +- + y4munsharp/Makefile.am | 2 +- + y4mutils/Makefile.am | 2 +- + yuvscaler/Makefile.am | 2 +- + 5 files changed, 26 insertions(+), 94 deletions(-) + +diff --git a/y4mdenoise/Makefile.am b/y4mdenoise/Makefile.am +index dee9064f..d7fa76e2 100644 +--- a/y4mdenoise/Makefile.am ++++ b/y4mdenoise/Makefile.am +@@ -4,8 +4,8 @@ MAINTAINERCLEANFILES = Makefile.in + + EXTRA_DIST = implementation.html + +-AM_CFLAGS = -DNDEBUG -finline-functions @PROGRAM_NOPIC@ +-AM_CXXFLAGS = -DNDEBUG -finline-functions @PROGRAM_NOPIC@ ++AM_CFLAGS = -DNDEBUG -finline-functions ++AM_CXXFLAGS = -DNDEBUG -finline-functions + + INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/utils + +diff --git a/y4munsharp/Makefile.am b/y4munsharp/Makefile.am +index a7f98acc..f99ff5cf 100644 +--- a/y4munsharp/Makefile.am ++++ b/y4munsharp/Makefile.am +@@ -4,7 +4,7 @@ MAINTAINERCLEANFILES = Makefile.in + + INCLUDES = -I $(top_srcdir)/utils -I $(top_srcdir) + +-y4munharp_CFLAGS=@PROGRAM_NOPIC@ ++y4munharp_CFLAGS= + + bin_PROGRAMS = y4munsharp + +diff --git a/y4mutils/Makefile.am b/y4mutils/Makefile.am +index f3b0a671..7b8b1881 100644 +--- a/y4mutils/Makefile.am ++++ b/y4mutils/Makefile.am +@@ -2,7 +2,7 @@ + + MAINTAINERCLEANFILES = Makefile.in + +-AM_CFLAGS = @PROGRAM_NOPIC@ ++AM_CFLAGS = + AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/utils + + LIBMJPEGUTILS = $(top_builddir)/utils/libmjpegutils.la +diff --git a/yuvscaler/Makefile.am b/yuvscaler/Makefile.am +index 1fe4d757..6d2adaca 100644 +--- a/yuvscaler/Makefile.am ++++ b/yuvscaler/Makefile.am +@@ -18,6 +18,6 @@ noinst_HEADERS = \ + + EXTRA_DIST = yuvscaler_implementation.txt + +-yuvscaler_CFLAGS=@PROGRAM_NOPIC@ ++yuvscaler_CFLAGS= + yuvscaler_SOURCES = yuvscaler.c yuvscaler_resample.c yuvscaler_bicubic.c + yuvscaler_LDADD = $(LIBMJPEGUTILS) $(LIBM_LIBS) diff --git a/package/mjpegtools/Config.in b/package/mjpegtools/Config.in new file mode 100644 index 00000000..968f9e7d --- /dev/null +++ b/package/mjpegtools/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_MJPEGTOOLS + bool "mjpegtools" + depends on BR2_USE_MMU # fork + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_JPEG + help + The mjpegtools programs are a set of tools + that can do recording of videos and playback, + simple cut-and-paste editing and the MPEG + compression of audio and video under Linux. + + http://mjpeg.sourceforge.net + +config BR2_PACKAGE_MJPEGTOOLS_SIMD_SUPPORT + bool + default y if BR2_X86_CPU_HAS_MMX + default y if BR2_POWERPC_CPU_HAS_ALTIVEC + +comment "mjpegtools needs a toolchain w/ C++, threads" + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/mjpegtools/mjpegtools.hash b/package/mjpegtools/mjpegtools.hash new file mode 100644 index 00000000..76e9403f --- /dev/null +++ b/package/mjpegtools/mjpegtools.hash @@ -0,0 +1,5 @@ +# From http://sourceforge.net/projects/mjpeg/files/mjpegtools/2.1.0/ +md5 57bf5dd78976ca9bac972a6511b236f3 mjpegtools-2.1.0.tar.gz +sha1 b9effa86280e23d67369e842e5cb645948583097 mjpegtools-2.1.0.tar.gz +# Locally computed +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/mjpegtools/mjpegtools.mk b/package/mjpegtools/mjpegtools.mk new file mode 100644 index 00000000..e2c6b7d8 --- /dev/null +++ b/package/mjpegtools/mjpegtools.mk @@ -0,0 +1,65 @@ +################################################################################ +# +# mjpegtools +# +################################################################################ + +MJPEGTOOLS_VERSION = 2.1.0 +MJPEGTOOLS_SITE = http://sourceforge.net/projects/mjpeg/files/mjpegtools/$(MJPEGTOOLS_VERSION) +MJPEGTOOLS_DEPENDENCIES = host-pkgconf jpeg +MJPEGTOOLS_INSTALL_STAGING = YES +MJPEGTOOLS_LICENSE = GPL-2.0+ +MJPEGTOOLS_LICENSE_FILES = COPYING +# We're patching Makefile.am +MJPEGTOOLS_AUTORECONF = YES + +ifeq ($(BR2_PACKAGE_MJPEGTOOLS_SIMD_SUPPORT),y) +MJPEGTOOLS_CONF_OPTS += --enable-simd-accel +else +MJPEGTOOLS_CONF_OPTS += --disable-simd-accel +endif + +ifeq ($(BR2_PACKAGE_LIBPNG),y) +MJPEGTOOLS_CONF_OPTS += --with-libpng +MJPEGTOOLS_DEPENDENCIES += libpng +else +MJPEGTOOLS_CONF_OPTS += --without-libpng +endif + +# expects X11 backend in sdl +ifeq ($(BR2_PACKAGE_SDL_X11),y) +MJPEGTOOLS_CONF_OPTS += --with-libsdl +MJPEGTOOLS_DEPENDENCIES += sdl +else +MJPEGTOOLS_CONF_OPTS += --without-libsdl +endif + +ifeq ($(BR2_PACKAGE_SDL_GFX),y) +MJPEGTOOLS_CONF_OPTS += --with-sdlgfx +MJPEGTOOLS_DEPENDENCIES += sdl_gfx +else +MJPEGTOOLS_CONF_OPTS += --without-sdlgfx +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBX11),y) +MJPEGTOOLS_CONF_OPTS += --with-x +MJPEGTOOLS_DEPENDENCIES += xlib_libX11 +else +MJPEGTOOLS_CONF_OPTS += --without-x +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXXF86DGA),y) +MJPEGTOOLS_CONF_OPTS += --with-dga +MJPEGTOOLS_DEPENDENCIES += xlib_libXxf86dga +else +MJPEGTOOLS_CONF_OPTS += --without-dga +endif + +ifeq ($(BR2_PACKAGE_LIBGTK2),y) +MJPEGTOOLS_CONF_OPTS += --with-gtk +MJPEGTOOLS_DEPENDENCIES += libgtk2 +else +MJPEGTOOLS_CONF_OPTS += --without-gtk +endif + +$(eval $(autotools-package)) diff --git a/package/mjpg-streamer/Config.in b/package/mjpg-streamer/Config.in new file mode 100644 index 00000000..59f4208c --- /dev/null +++ b/package/mjpg-streamer/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_MJPG_STREAMER + bool "mjpg-streamer" + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16 # V4L2_EVENT_SOURCE_CHANGE + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS # plugins need dlopen() + select BR2_PACKAGE_JPEG + help + MJPG-streamer takes JPGs from Linux-UVC compatible webcams, + filesystem or other input plugins and streams them as + M-JPEG via HTTP to webbrowsers, VLC and other software. + + https://github.com/jacksonliam/mjpg-streamer + +comment "mjpg-streamer needs a toolchain w/ threads, headers >= 3.16, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16 || BR2_STATIC_LIBS diff --git a/package/mjpg-streamer/mjpg-streamer.hash b/package/mjpg-streamer/mjpg-streamer.hash new file mode 100644 index 00000000..63dcdb9f --- /dev/null +++ b/package/mjpg-streamer/mjpg-streamer.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 5b427b07c03c2c0468cc782daf1510d315141170246828fcbb7c07f927879973 mjpg-streamer-5a6e0a2db163e6ae9461552b59079870d0959340.tar.gz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 mjpg-streamer-experimental/LICENSE diff --git a/package/mjpg-streamer/mjpg-streamer.mk b/package/mjpg-streamer/mjpg-streamer.mk new file mode 100644 index 00000000..46f3f501 --- /dev/null +++ b/package/mjpg-streamer/mjpg-streamer.mk @@ -0,0 +1,49 @@ +################################################################################ +# +# mjpg-streamer +# +################################################################################ + +MJPG_STREAMER_VERSION = 5a6e0a2db163e6ae9461552b59079870d0959340 +MJPG_STREAMER_SITE = $(call github,jacksonliam,mjpg-streamer,$(MJPG_STREAMER_VERSION)) +MJPG_STREAMER_SUBDIR = mjpg-streamer-experimental +MJPG_STREAMER_LICENSE = GPL-2.0+ +MJPG_STREAMER_LICENSE_FILES = $(MJPG_STREAMER_SUBDIR)/LICENSE +MJPG_STREAMER_DEPENDENCIES = jpeg + +ifeq ($(BR2_PACKAGE_LIBGPHOTO2),y) +MJPG_STREAMER_CONF_OPTS += -DPLUGIN_INPUT_PTP2=ON +MJPG_STREAMER_DEPENDENCIES += host-pkgconf libgphoto2 +else +MJPG_STREAMER_CONF_OPTS += -DPLUGIN_INPUT_PTP2=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBV4L),y) +MJPG_STREAMER_DEPENDENCIES += libv4l +endif + +ifeq ($(BR2_PACKAGE_OPENCV3_LIB_HIGHGUI)$(BR2_PACKAGE_OPENCV3_LIB_IMGPROC)$(BR2_PACKAGE_OPENCV3_LIB_VIDEOIO),yyy) +MJPG_STREAMER_CONF_OPTS += \ + -DPLUGIN_INPUT_OPENCV=ON \ + -DPLUGIN_CVFILTER_CPP=OFF \ + -DPLUGIN_CVFILTER_PY=OFF +MJPG_STREAMER_DEPENDENCIES += host-pkgconf opencv3 +else +MJPG_STREAMER_CONF_OPTS += -DPLUGIN_INPUT_OPENCV=OFF +endif + +ifeq ($(BR2_PACKAGE_PROTOBUF_C)$(BR2_PACKAGE_ZEROMQ),yy) +MJPG_STREAMER_CONF_OPTS += -DPLUGIN_OUTPUT_ZMQSERVER=ON +MJPG_STREAMER_DEPENDENCIES += host-pkgconf protobuf-c zeromq +else +MJPG_STREAMER_CONF_OPTS += -DPLUGIN_OUTPUT_ZMQSERVER=OFF +endif + +ifeq ($(BR2_PACKAGE_SDL),y) +MJPG_STREAMER_CONF_OPTS += -DPLUGIN_OUTPUT_VIEWER=ON +MJPG_STREAMER_DEPENDENCIES += host-pkgconf sdl +else +MJPG_STREAMER_CONF_OPTS += -DPLUGIN_OUTPUT_VIEWER=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/mkpasswd/Config.in.host b/package/mkpasswd/Config.in.host new file mode 100644 index 00000000..93774bdf --- /dev/null +++ b/package/mkpasswd/Config.in.host @@ -0,0 +1,2 @@ +config BR2_PACKAGE_HOST_MKPASSWD + bool "host mkpasswd" diff --git a/package/mkpasswd/config.h b/package/mkpasswd/config.h new file mode 100644 index 00000000..f3450741 --- /dev/null +++ b/package/mkpasswd/config.h @@ -0,0 +1,95 @@ +/* Program version */ +#define VERSION "5.0.26" + +/* Configurable features */ + +/* Always hide legal disclaimers */ +#undef ALWAYS_HIDE_DISCL + +/* Default server */ +#define DEFAULTSERVER "whois.arin.net" + +/* Configuration file */ +/* +#define CONFIG_FILE "/etc/whois.conf" +*/ + + +/* autoconf in cpp macros */ +#ifdef linux +# define ENABLE_NLS +#endif + +#ifdef __FreeBSD__ +/* which versions? */ +# define HAVE_GETOPT_LONG +# define HAVE_GETADDRINFO +# define ENABLE_NLS +# ifndef LOCALEDIR +# define LOCALEDIR "/usr/local/share/locale" +# endif +#endif + +/* needs unistd.h */ +#if defined _POSIX_C_SOURCE && _POSIX_C_SOURCE >= 200112L +# define HAVE_GETADDRINFO +# define HAVE_REGEXEC +#endif + +#if defined __APPLE__ && defined __MACH__ +# define HAVE_GETOPT_LONG +# define HAVE_GETADDRINFO +#endif + +#if defined __GLIBC__ +# define HAVE_GETOPT_LONG +# if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1 +# define HAVE_GETADDRINFO +# endif +# if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 7 +# define HAVE_SHA_CRYPT +# endif +#endif + +/* Unknown versions of Solaris */ +#if defined __SVR4 && defined __sun +# define HAVE_SHA_CRYPT +# define HAVE_SOLARIS_CRYPT_GENSALT +#endif + +/* FIXME: which systems lack this? */ +#define HAVE_GETTIMEOFDAY +/* FIXME: disabled because it does not parse addresses with a netmask length. + * The code using it needs to be either fixed or removed. +#define HAVE_INET_PTON +*/ + +/* + * Please send patches to correctly ignore old releases which lack a RNG + * and add more systems which have one. + */ +#ifdef RANDOM_DEVICE +#elif defined __GLIBC__ \ + || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ \ + /* AIX >= 5.2? */ \ + || defined _AIX52 \ + /* HP-UX >= B.11.11.09? */ \ + || defined __hpux \ + /* OS X: */ \ + || (defined __APPLE__ && defined __MACH__) \ + /* Solaris >= 9 (this is >= 7): */ \ + || (defined __SVR4 && defined __sun && defined SUSv2) \ + /* Tru64 UNIX >= 5.1B? */ \ + || defined __osf +# define RANDOM_DEVICE "/dev/urandom" +#endif + +#ifdef ENABLE_NLS +# ifndef NLS_CAT_NAME +# define NLS_CAT_NAME "whois" +# endif +# ifndef LOCALEDIR +# define LOCALEDIR "/usr/share/locale" +# endif +#endif + diff --git a/package/mkpasswd/mkpasswd.c b/package/mkpasswd/mkpasswd.c new file mode 100644 index 00000000..fd162304 --- /dev/null +++ b/package/mkpasswd/mkpasswd.c @@ -0,0 +1,461 @@ +/* + * Copyright (C) 2001-2008 Marco d'Itri + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* for crypt, snprintf and strcasecmp */ +#define _XOPEN_SOURCE +#define _BSD_SOURCE + +/* System library */ +#include +#include +#include +#include "config.h" +#ifdef HAVE_GETOPT_LONG +#include +#endif +#include +#include +#include +#include +#ifdef HAVE_XCRYPT +#include +#include +#endif +#ifdef HAVE_LINUX_CRYPT_GENSALT +#define _OW_SOURCE +#include +#endif +#ifdef HAVE_GETTIMEOFDAY +#include +#endif + +/* glibc without crypt() */ +#ifndef _XOPEN_CRYPT +#include +#endif + +/* Application-specific */ +#include "utils.h" + +/* Global variables */ +#ifdef HAVE_GETOPT_LONG +static const struct option longopts[] = { + {"method", optional_argument, NULL, 'm'}, + /* for backward compatibility with versions < 4.7.25 (< 20080321): */ + {"hash", optional_argument, NULL, 'H'}, + {"help", no_argument, NULL, 'h'}, + {"password-fd", required_argument, NULL, 'P'}, + {"stdin", no_argument, NULL, 's'}, + {"salt", required_argument, NULL, 'S'}, + {"rounds", required_argument, NULL, 'R'}, + {"version", no_argument, NULL, 'V'}, + {NULL, 0, NULL, 0 } +}; +#else +extern char *optarg; +extern int optind; +#endif + +static const char valid_salts[] = "abcdefghijklmnopqrstuvwxyz" +"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./"; + +struct crypt_method { + const char *method; /* short name used by the command line option */ + const char *prefix; /* salt prefix */ + const unsigned int minlen; /* minimum salt length */ + const unsigned int maxlen; /* maximum salt length */ + const unsigned int rounds; /* supports a variable number of rounds */ + const char *desc; /* long description for the methods list */ +}; + +static const struct crypt_method methods[] = { + /* method prefix minlen, maxlen rounds description */ + { "des", "", 2, 2, 0, + N_("standard 56 bit DES-based crypt(3)") }, + { "md5", "$1$", 8, 8, 0, "MD5" }, +#if defined OpenBSD || defined FreeBSD || (defined __SVR4 && defined __sun) + { "bf", "$2a$", 22, 22, 1, "Blowfish" }, +#endif +#if defined HAVE_LINUX_CRYPT_GENSALT + { "bf", "$2a$", 22, 22, 1, "Blowfish, system-specific on 8-bit chars" }, + /* algorithm 2y fixes CVE-2011-2483 */ + { "bfy", "$2y$", 22, 22, 1, "Blowfish, correct handling of 8-bit chars" }, +#endif +#if defined FreeBSD + { "nt", "$3$", 0, 0, 0, "NT-Hash" }, +#endif +#if defined HAVE_SHA_CRYPT + /* http://people.redhat.com/drepper/SHA-crypt.txt */ + { "sha-256", "$5$", 8, 16, 1, "SHA-256" }, + { "sha-512", "$6$", 8, 16, 1, "SHA-512" }, +#endif + /* http://www.crypticide.com/dropsafe/article/1389 */ + /* + * Actually the maximum salt length is arbitrary, but Solaris by default + * always uses 8 characters: + * http://cvs.opensolaris.org/source/xref/onnv/onnv-gate/ \ + * usr/src/lib/crypt_modules/sunmd5/sunmd5.c#crypt_gensalt_impl + */ +#if defined __SVR4 && defined __sun + { "sunmd5", "$md5$", 8, 8, 1, "SunMD5" }, +#endif + { NULL, NULL, 0, 0, 0, NULL } +}; + +void generate_salt(char *const buf, const unsigned int len); +void *get_random_bytes(const int len); +void display_help(int error); +void display_version(void); +void display_methods(void); + +int main(int argc, char *argv[]) +{ + int ch, i; + int password_fd = -1; + unsigned int salt_minlen = 0; + unsigned int salt_maxlen = 0; + unsigned int rounds_support = 0; + const char *salt_prefix = NULL; + const char *salt_arg = NULL; + unsigned int rounds = 0; + char *salt = NULL; + char rounds_str[30]; + char *password = NULL; + +#ifdef ENABLE_NLS + setlocale(LC_ALL, ""); + bindtextdomain(NLS_CAT_NAME, LOCALEDIR); + textdomain(NLS_CAT_NAME); +#endif + + /* prepend options from environment */ + argv = merge_args(getenv("MKPASSWD_OPTIONS"), argv, &argc); + + while ((ch = GETOPT_LONGISH(argc, argv, "hH:m:5P:R:sS:V", longopts, 0)) + > 0) { + switch (ch) { + case '5': + optarg = (char *) "md5"; + /* fall through */ + case 'm': + case 'H': + if (!optarg || strcaseeq("help", optarg)) { + display_methods(); + exit(0); + } + for (i = 0; methods[i].method != NULL; i++) + if (strcaseeq(methods[i].method, optarg)) { + salt_prefix = methods[i].prefix; + salt_minlen = methods[i].minlen; + salt_maxlen = methods[i].maxlen; + rounds_support = methods[i].rounds; + break; + } + if (!salt_prefix) { + fprintf(stderr, _("Invalid method '%s'.\n"), optarg); + exit(1); + } + break; + case 'P': + { + char *p; + password_fd = strtol(optarg, &p, 10); + if (p == NULL || *p != '\0' || password_fd < 0) { + fprintf(stderr, _("Invalid number '%s'.\n"), optarg); + exit(1); + } + } + break; + case 'R': + { + char *p; + rounds = strtol(optarg, &p, 10); + if (p == NULL || *p != '\0' || rounds < 0) { + fprintf(stderr, _("Invalid number '%s'.\n"), optarg); + exit(1); + } + } + break; + case 's': + password_fd = 0; + break; + case 'S': + salt_arg = optarg; + break; + case 'V': + display_version(); + exit(0); + case 'h': + display_help(EXIT_SUCCESS); + default: + fprintf(stderr, _("Try '%s --help' for more information.\n"), + argv[0]); + exit(1); + } + } + argc -= optind; + argv += optind; + + if (argc == 2 && !salt_arg) { + password = argv[0]; + salt_arg = argv[1]; + } else if (argc == 1) { + password = argv[0]; + } else if (argc == 0) { + } else { + display_help(EXIT_FAILURE); + } + + /* default: DES password */ + if (!salt_prefix) { + salt_minlen = methods[0].minlen; + salt_maxlen = methods[0].maxlen; + salt_prefix = methods[0].prefix; + } + + if (streq(salt_prefix, "$2a$") || streq(salt_prefix, "$2y$")) { + /* OpenBSD Blowfish and derivatives */ + if (rounds <= 5) + rounds = 5; + /* actually for 2a/2y it is the logarithm of the number of rounds */ + snprintf(rounds_str, sizeof(rounds_str), "%02u$", rounds); + } else if (rounds_support && rounds) + snprintf(rounds_str, sizeof(rounds_str), "rounds=%u$", rounds); + else + rounds_str[0] = '\0'; + + if (salt_arg) { + unsigned int c = strlen(salt_arg); + if (c < salt_minlen || c > salt_maxlen) { + if (salt_minlen == salt_maxlen) + fprintf(stderr, ngettext( + "Wrong salt length: %d byte when %d expected.\n", + "Wrong salt length: %d bytes when %d expected.\n", c), + c, salt_maxlen); + else + fprintf(stderr, ngettext( + "Wrong salt length: %d byte when %d <= n <= %d" + " expected.\n", + "Wrong salt length: %d bytes when %d <= n <= %d" + " expected.\n", c), + c, salt_minlen, salt_maxlen); + exit(1); + } + while (c-- > 0) { + if (strchr(valid_salts, salt_arg[c]) == NULL) { + fprintf(stderr, _("Illegal salt character '%c'.\n"), + salt_arg[c]); + exit(1); + } + } + + salt = NOFAIL(malloc(strlen(salt_prefix) + strlen(rounds_str) + + strlen(salt_arg) + 1)); + *salt = '\0'; + strcat(salt, salt_prefix); + strcat(salt, rounds_str); + strcat(salt, salt_arg); + } else { +#ifdef HAVE_SOLARIS_CRYPT_GENSALT +#error "This code path is untested on Solaris. Please send a patch." + salt = crypt_gensalt(salt_prefix, NULL); + if (!salt) + perror(stderr, "crypt_gensalt"); +#elif defined HAVE_LINUX_CRYPT_GENSALT + void *entropy = get_random_bytes(64); + + salt = crypt_gensalt(salt_prefix, rounds, entropy, 64); + if (!salt) { + fprintf(stderr, "crypt_gensalt failed.\n"); + exit(2); + } + free(entropy); +#else + unsigned int salt_len = salt_maxlen; + + if (salt_minlen != salt_maxlen) { /* salt length can vary */ + srand(time(NULL) + getpid()); + salt_len = rand() % (salt_maxlen - salt_minlen + 1) + salt_minlen; + } + + salt = NOFAIL(malloc(strlen(salt_prefix) + strlen(rounds_str) + + salt_len + 1)); + *salt = '\0'; + strcat(salt, salt_prefix); + strcat(salt, rounds_str); + generate_salt(salt + strlen(salt), salt_len); +#endif + } + + if (password) { + } else if (password_fd != -1) { + FILE *fp; + char *p; + + if (isatty(password_fd)) + fprintf(stderr, _("Password: ")); + password = NOFAIL(malloc(128)); + fp = fdopen(password_fd, "r"); + if (!fp) { + perror("fdopen"); + exit(2); + } + if (!fgets(password, 128, fp)) { + perror("fgets"); + exit(2); + } + + p = strpbrk(password, "\n\r"); + if (p) + *p = '\0'; + } else { + password = getpass(_("Password: ")); + if (!password) { + perror("getpass"); + exit(2); + } + } + + { + const char *result; + result = crypt(password, salt); + /* xcrypt returns "*0" on errors */ + if (!result || result[0] == '*') { + fprintf(stderr, "crypt failed.\n"); + exit(2); + } + /* yes, using strlen(salt_prefix) on salt. It's not + * documented whether crypt_gensalt may change the prefix */ + if (!strneq(result, salt, strlen(salt_prefix))) { + fprintf(stderr, _("Method not supported by crypt(3).\n")); + exit(2); + } + printf("%s\n", result); + } + + exit(0); +} + +#ifdef RANDOM_DEVICE +void* get_random_bytes(const int count) +{ + char *buf; + int fd; + + buf = NOFAIL(malloc(count)); + fd = open(RANDOM_DEVICE, O_RDONLY); + if (fd < 0) { + perror("open(" RANDOM_DEVICE ")"); + exit(2); + } + if (read(fd, buf, count) != count) { + if (count < 0) + perror("read(" RANDOM_DEVICE ")"); + else + fprintf(stderr, "Short read of %s.\n", RANDOM_DEVICE); + exit(2); + } + close(fd); + + return buf; +} +#endif + +#ifdef RANDOM_DEVICE + +void generate_salt(char *const buf, const unsigned int len) +{ + unsigned int i; + + unsigned char *entropy = get_random_bytes(len * sizeof(unsigned char)); + for (i = 0; i < len; i++) + buf[i] = valid_salts[entropy[i] % (sizeof valid_salts - 1)]; + buf[i] = '\0'; +} + +#else /* RANDOM_DEVICE */ + +void generate_salt(char *const buf, const unsigned int len) +{ + unsigned int i; + +# ifdef HAVE_GETTIMEOFDAY + struct timeval tv; + + gettimeofday(&tv, NULL); + srand(tv.tv_sec ^ tv.tv_usec); + +# else /* HAVE_GETTIMEOFDAY */ +# warning "This system lacks a strong enough random numbers generator!" + + /* + * The possible values of time over one year are 31536000, which is + * two orders of magnitude less than the allowed entropy range (2^32). + */ + srand(time(NULL) + getpid()); + +# endif /* HAVE_GETTIMEOFDAY */ + + for (i = 0; i < len; i++) + buf[i] = valid_salts[rand() % (sizeof valid_salts - 1)]; + buf[i] = '\0'; +} + +#endif /* RANDOM_DEVICE */ + +void display_help(int error) +{ + fprintf((EXIT_SUCCESS == error) ? stdout : stderr, + _("Usage: mkpasswd [OPTIONS]... [PASSWORD [SALT]]\n" + "Crypts the PASSWORD using crypt(3).\n\n")); + fprintf(stderr, _( +" -m, --method=TYPE select method TYPE\n" +" -5 like --method=md5\n" +" -S, --salt=SALT use the specified SALT\n" +" -R, --rounds=NUMBER use the specified NUMBER of rounds\n" +" -P, --password-fd=NUM read the password from file descriptor NUM\n" +" instead of /dev/tty\n" +" -s, --stdin like --password-fd=0\n" +" -h, --help display this help and exit\n" +" -V, --version output version information and exit\n" +"\n" +"If PASSWORD is missing then it is asked interactively.\n" +"If no SALT is specified, a random one is generated.\n" +"If TYPE is 'help', available methods are printed.\n" +"\n" +"Report bugs to %s.\n"), ""); + exit(error); +} + +void display_version(void) +{ + printf("mkpasswd %s\n\n", VERSION); + puts("Copyright (C) 2001-2008 Marco d'Itri\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."); +} + +void display_methods(void) +{ + unsigned int i; + + printf(_("Available methods:\n")); + for (i = 0; methods[i].method != NULL; i++) + printf("%s\t%s\n", methods[i].method, methods[i].desc); +} + diff --git a/package/mkpasswd/mkpasswd.mk b/package/mkpasswd/mkpasswd.mk new file mode 100644 index 00000000..c1117ef6 --- /dev/null +++ b/package/mkpasswd/mkpasswd.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# mkpasswd +# +################################################################################ + +# source included in buildroot, taken from +# https://github.com/rfc1036/whois/blob/master/ +# at revision 5a0f08500fa51608b6d3b73ee338be38c692eadb +HOST_MKPASSWD_LICENSE = GPL-2.0+ + +define HOST_MKPASSWD_EXTRACT_CMDS + cp $(HOST_MKPASSWD_PKGDIR)/*.c $(HOST_MKPASSWD_PKGDIR)/*.h $(@D) +endef + +define HOST_MKPASSWD_BUILD_CMDS + $(HOSTCC) $(HOST_CFLAGS) $(HOST_LDFLAGS) \ + $(@D)/mkpasswd.c $(@D)/utils.c \ + -o $(@D)/mkpasswd -lcrypt +endef + +define HOST_MKPASSWD_INSTALL_CMDS + $(INSTALL) -D -m 755 $(@D)/mkpasswd $(HOST_DIR)/bin/mkpasswd +endef + +$(eval $(host-generic-package)) + +MKPASSWD = $(HOST_DIR)/bin/mkpasswd diff --git a/package/mkpasswd/utils.c b/package/mkpasswd/utils.c new file mode 100644 index 00000000..254bf2ac --- /dev/null +++ b/package/mkpasswd/utils.c @@ -0,0 +1,96 @@ +/* + * Copyright 1999-2008 by Marco d'Itri . + * + * do_nofail and merge_args come from the module-init-tools package. + * Copyright 2001 by Rusty Russell. + * Copyright 2002, 2003 by Rusty Russell, IBM Corporation. + * + * 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 Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +/* for strdup */ +#define _XOPEN_SOURCE 500 + +/* System library */ +#include +#include +#include +#include +#include + +/* Application-specific */ +#include "utils.h" + +void *do_nofail(void *ptr, const char *file, const int line) +{ + if (ptr) + return ptr; + + err_quit("Memory allocation failure at %s:%d.", file, line); +} + +/* Prepend options from a string. */ +char **merge_args(char *args, char *argv[], int *argc) +{ + char *arg, *argstring; + char **newargs = NULL; + unsigned int i, num_env = 0; + + if (!args) + return argv; + + argstring = NOFAIL(strdup(args)); + for (arg = strtok(argstring, " "); arg; arg = strtok(NULL, " ")) { + num_env++; + newargs = NOFAIL(realloc(newargs, + sizeof(newargs[0]) * (num_env + *argc + 1))); + newargs[num_env] = arg; + } + + if (!newargs) + return argv; + + /* Append commandline args */ + newargs[0] = argv[0]; + for (i = 1; i <= *argc; i++) + newargs[num_env + i] = argv[i]; + + *argc += num_env; + return newargs; +} + +/* Error routines */ +void err_sys(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + fprintf(stderr, ": %s\n", strerror(errno)); + va_end(ap); + exit(2); +} + +void err_quit(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + fputs("\n", stderr); + va_end(ap); + exit(2); +} + diff --git a/package/mkpasswd/utils.h b/package/mkpasswd/utils.h new file mode 100644 index 00000000..0f226aee --- /dev/null +++ b/package/mkpasswd/utils.h @@ -0,0 +1,56 @@ +#ifndef WHOIS_UTILS_H +#define WHOIS_UTILS_H + +/* Convenience macros */ +#define streq(a, b) (strcmp(a, b) == 0) +#define strcaseeq(a, b) (strcasecmp(a, b) == 0) +#define strneq(a, b, n) (strncmp(a, b, n) == 0) +#define strncaseeq(a, b, n) (strncasecmp(a, b, n) == 0) + +#define NOFAIL(ptr) do_nofail((ptr), __FILE__, __LINE__) + +/* Portability macros */ +#ifdef __GNUC__ +# define NORETURN __attribute__((noreturn)) +#else +# define NORETURN +#endif + +#ifndef AI_IDN +# define AI_IDN 0 +#endif + +#ifndef AI_ADDRCONFIG +# define AI_ADDRCONFIG 0 +#endif + +#ifdef HAVE_GETOPT_LONG +# define GETOPT_LONGISH(c, v, o, l, i) getopt_long(c, v, o, l, i) +#else +# define GETOPT_LONGISH(c, v, o, l, i) getopt(c, v, o) +#endif + +#ifdef ENABLE_NLS +# include +# include +# define _(a) (gettext(a)) +# ifdef gettext_noop +# define N_(a) gettext_noop(a) +# else +# define N_(a) (a) +# endif +#else +# define _(a) (a) +# define N_(a) (a) +# define ngettext(a, b, c) ((c==1) ? (a) : (b)) +#endif + + +/* Prototypes */ +void *do_nofail(void *ptr, const char *file, const int line); +char **merge_args(char *args, char *argv[], int *argc); + +void err_quit(const char *fmt, ...) NORETURN; +void err_sys(const char *fmt, ...) NORETURN; + +#endif diff --git a/package/mkpimage/mkpimage.c b/package/mkpimage/mkpimage.c new file mode 100644 index 00000000..d7fe1b1b --- /dev/null +++ b/package/mkpimage/mkpimage.c @@ -0,0 +1,376 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define VALIDATION_WORD 0x31305341 + +#define BRANCH_INST 0xea /* ARM opcode for "b" (unconditional branch) */ + +#define MAX_V0IMAGE_SIZE (60 * 1024 - 4) +/* Max size without authentication is 224 KB, due to memory used by + * the ROM boot code as a workspace out of the 256 KB of OCRAM */ +#define MAX_V1IMAGE_SIZE (224 * 1024 - 4) + +static int add_barebox_header; + +struct socfpga_header { + uint8_t validation_word[4]; + uint8_t version; + uint8_t flags; + union { + struct { + uint8_t program_length[2]; + uint8_t spare[2]; + uint8_t checksum[2]; + uint8_t start_vector[4]; + } v0; + struct { + uint8_t header_length[2]; + uint8_t program_length[4]; + uint8_t entry_offset[4]; + uint8_t spare[2]; + uint8_t checksum[2]; + } v1; + }; +}; + +static uint32_t bb_header[] = { + 0xea00007e, /* b 0x200 */ + 0xeafffffe, /* 1: b 1b */ + 0xeafffffe, /* 1: b 1b */ + 0xeafffffe, /* 1: b 1b */ + 0xeafffffe, /* 1: b 1b */ + 0xeafffffe, /* 1: b 1b */ + 0xeafffffe, /* 1: b 1b */ + 0xeafffffe, /* 1: b 1b */ + 0x65726162, /* 'bare' */ + 0x00786f62, /* 'box\0' */ + 0x00000000, /* padding */ + 0x00000000, /* padding */ + 0x00000000, /* padding */ + 0x00000000, /* padding */ + 0x00000000, /* padding */ + 0x00000000, /* padding */ + 0x00000000, /* socfpga header */ + 0x00000000, /* socfpga header */ + 0x00000000, /* socfpga header */ + 0xea00006b, /* entry. b 0x200 (offset may be adjusted) */ +}; + +static int read_full(int fd, void *buf, size_t size) +{ + size_t insize = size; + int now; + int total = 0; + + while (size) { + now = read(fd, buf, size); + if (now == 0) + return total; + if (now < 0) + return now; + total += now; + size -= now; + buf += now; + } + + return insize; +} + +static int write_full(int fd, void *buf, size_t size) +{ + size_t insize = size; + int now; + + while (size) { + now = write(fd, buf, size); + if (now <= 0) + return now; + size -= now; + buf += now; + } + + return insize; +} + +static const uint32_t crc_table[256] = { + 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, + 0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, + 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, 0x4c11db70, 0x48d0c6c7, + 0x4593e01e, 0x4152fda9, 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, + 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, + 0x709f7b7a, 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, + 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58, 0xbaea46ef, + 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, + 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb, + 0xceb42022, 0xca753d95, 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, + 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0, + 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, + 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13, 0x054bf6a4, + 0x0808d07d, 0x0cc9cdca, 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, + 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, + 0x571d7dd1, 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, + 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc, + 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, + 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, 0xe0b41de7, 0xe4750050, + 0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, + 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34, + 0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, + 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, 0x4f040d56, 0x4bc510e1, + 0x46863638, 0x42472b8f, 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, + 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, + 0x3f9b762c, 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, + 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e, 0xf5ee4bb9, + 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, + 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, + 0xcda1f604, 0xc960ebb3, 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, + 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71, + 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, + 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, 0x4e8ee645, 0x4a4ffbf2, + 0x470cdd2b, 0x43cdc09c, 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, + 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, + 0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, + 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a, + 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, + 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, 0xe3a1cbc1, 0xe760d676, + 0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, + 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662, + 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, + 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4 +}; + +uint32_t crc32(uint32_t crc, void *_buf, int length) +{ + uint8_t *buf = _buf; + + while (length--) + crc = crc << 8 ^ crc_table[(crc >> 24 ^ *(buf++)) & 0xff]; + + return crc; +} + +/* Create an ARM relative branch instuction + * branch is where the instruction will be placed and dest points to where + * it should branch too. */ +static void branch(uint8_t *branch, uint8_t *dest) +{ + int offset = dest - branch - 8; /* PC is offset +8 bytes on ARM */ + + branch[0] = (offset >> 2) & 0xff; /* instruction uses offset/4 */ + branch[1] = (offset >> 10) & 0xff; + branch[2] = (offset >> 18) & 0xff; + branch[3] = BRANCH_INST; +} + +/* start_addr is where the socfpga header's start instruction should branch to. + * It should be relative to the start of buf */ +static int add_socfpga_header(void *buf, size_t size, unsigned start_addr, unsigned version) +{ + struct socfpga_header *header = buf + 0x40; + void *entry; + uint8_t *bufp, *sumendp; + uint32_t *crc; + unsigned checksum; + + if (size & 0x3) { + fprintf(stderr, "%s: size must be multiple of 4\n", __func__); + return -EINVAL; + } + + /* Absolute address of entry point in buf */ + entry = buf + start_addr; + if (version == 0) { + sumendp = &header->v0.checksum[0]; + } else { + sumendp = &header->v1.checksum[0]; + + /* The ROM loader can't handle a negative offset */ + if (entry < (void*)header) { + /* add a trampoline branch inst after end of the header */ + uint8_t *trampoline = (void*)(header + 1); + branch(trampoline, entry); + + /* and then make the trampoline the entry point */ + entry = trampoline; + } + /* Calculate start address as offset relative to start of header */ + start_addr = entry - (void*)header; + } + + header->validation_word[0] = VALIDATION_WORD & 0xff; + header->validation_word[1] = (VALIDATION_WORD >> 8) & 0xff; + header->validation_word[2] = (VALIDATION_WORD >> 16) & 0xff; + header->validation_word[3] = (VALIDATION_WORD >> 24) & 0xff; + header->version = version; + header->flags = 0; + + if (version == 0) { + header->v0.program_length[0] = (size >> 2) & 0xff; /* length in words */ + header->v0.program_length[1] = (size >> 10) & 0xff; + header->v0.spare[0] = 0; + header->v0.spare[1] = 0; + branch(header->v0.start_vector, entry); + } else { + header->v1.header_length[0] = (sizeof(*header) >> 0) & 0xff; + header->v1.header_length[1] = (sizeof(*header) >> 8) & 0xff; + header->v1.program_length[0] = (size >> 0) & 0xff; + header->v1.program_length[1] = (size >> 8) & 0xff; + header->v1.program_length[2] = (size >> 16) & 0xff; + header->v1.program_length[3] = (size >> 24) & 0xff; + header->v1.entry_offset[0] = (start_addr >> 0) & 0xff; + header->v1.entry_offset[1] = (start_addr >> 8) & 0xff; + header->v1.entry_offset[2] = (start_addr >> 16) & 0xff; + header->v1.entry_offset[3] = (start_addr >> 24) & 0xff; + header->v1.spare[0] = 0; + header->v1.spare[1] = 0; + } + + /* Sum from beginning of header to start of checksum field */ + checksum = 0; + for (bufp = (uint8_t*)header; bufp < sumendp; bufp++) + checksum += *bufp; + + if (version == 0) { + header->v0.checksum[0] = checksum & 0xff;; + header->v0.checksum[1] = (checksum >> 8) & 0xff;; + } else { + header->v1.checksum[0] = checksum & 0xff;; + header->v1.checksum[1] = (checksum >> 8) & 0xff;; + } + + crc = buf + size - sizeof(uint32_t); + + *crc = crc32(0xffffffff, buf, size - sizeof(uint32_t)); + *crc ^= 0xffffffff; + + return 0; +} + +static void usage(const char *prgname) +{ + fprintf(stderr, "usage: %s [-hb] [-v version] -o \n", prgname); +} + +int main(int argc, char *argv[]) +{ + int opt, ret; + const char *outfile = NULL, *infile; + struct stat s; + void *buf; + int fd; + int max_image_size, min_image_size = 80; + int addsize = 0, pad; + unsigned int version = 0; + + while ((opt = getopt(argc, argv, "o:hbv:")) != -1) { + switch (opt) { + case 'v': + version = atoi(optarg); + if (version > 1) { + printf("Versions supported: 0 or 1\n"); + usage(argv[0]); + exit(1); + } + break; + case 'b': + add_barebox_header = 1; + min_image_size = 0; + addsize = 512; + break; + case 'h': + usage(argv[0]); + exit(0); + case 'o': + outfile = optarg; + break; + default: + usage(argv[0]); + exit(1); + } + } + if (version == 0) { + max_image_size = MAX_V0IMAGE_SIZE; + } else { + max_image_size = MAX_V1IMAGE_SIZE; + } + max_image_size -= addsize; + + if (optind == argc || !outfile) { + usage(argv[0]); + exit(1); + } + infile = argv[optind]; + + ret = stat(infile, &s); + if (ret) { + perror("stat"); + exit(1); + } + + if (s.st_size < min_image_size) { + fprintf(stderr, "input image too small. Minimum is %d bytes\n", + min_image_size); + exit(1); + } + + if (s.st_size > max_image_size) { + fprintf(stderr, "input image too big. Maximum is %d bytes, got %ld bytes\n", + max_image_size, s.st_size); + exit(1); + } + + fd = open(infile, O_RDONLY); + if (fd == -1) { + perror("open infile"); + exit(1); + } + + pad = s.st_size & 0x3; + if (pad) + pad = 4 - pad; + + buf = calloc(s.st_size + 4 + addsize + pad, 1); + if (!buf) { + perror("malloc"); + exit(1); + } + + ret = read_full(fd, buf + addsize, s.st_size); + if (ret < 0) { + perror("read infile"); + exit(1); + } + + close(fd); + + if (add_barebox_header) { + memcpy(buf, bb_header, sizeof(bb_header)); + } + + ret = add_socfpga_header(buf, s.st_size + 4 + addsize + pad, addsize, + version); + if (ret) + exit(1); + + fd = open(outfile, O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (fd < 0) { + perror("open outfile"); + exit(1); + } + + ret = write_full(fd, buf, s.st_size + 4 + addsize + pad); + if (ret < 0) { + perror("write outfile"); + exit(1); + } + + exit(0); +} diff --git a/package/mkpimage/mkpimage.mk b/package/mkpimage/mkpimage.mk new file mode 100644 index 00000000..71500f00 --- /dev/null +++ b/package/mkpimage/mkpimage.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# mkpimage +# +################################################################################ + +HOST_MKPIMAGE_LICENSE = GPL-2.0 + +# source included in the package +# came from barebox's repository: +# https://git.pengutronix.de/cgit/barebox/tree/scripts/socfpga_mkimage.c?id=55d29525146dcd280987dfd565bfd34f08858fb3 +define HOST_MKPIMAGE_EXTRACT_CMDS + cp $(HOST_MKPIMAGE_PKGDIR)/mkpimage.c $(@D) +endef + +define HOST_MKPIMAGE_BUILD_CMDS + $(HOSTCC) $(HOST_CFLAGS) $(HOST_LDFLAGS) \ + $(@D)/mkpimage.c -o $(@D)/mkpimage +endef + +define HOST_MKPIMAGE_INSTALL_CMDS + $(INSTALL) -D -m 0755 $(@D)/mkpimage $(HOST_DIR)/bin/mkpimage +endef + +$(eval $(host-generic-package)) diff --git a/package/mksh/Config.in b/package/mksh/Config.in new file mode 100644 index 00000000..e6ccc906 --- /dev/null +++ b/package/mksh/Config.in @@ -0,0 +1,25 @@ +config BR2_PACKAGE_MKSH + bool "mksh" + depends on BR2_USE_MMU # fork() + help + The MirBSD Korn Shell, + + mksh is a successor of pdksh but not affiliated with the + pdksh developers or contributors. mksh is not affiliated + with the AT&T Korn Shell, its past or present owners, + other than that both attempt to implement the Korn Shell + programming language. + + mksh targets users who desire a compact, fast, reliable, + secure shell not cut off modern extensions; a shell with + Unicode support; an actively developed, current, and + portable product; one with developers that listen to + their users' requests and implement them if they + actually make sense. + + mksh aims to replace pdksh in all but very rare use cases + (such as support for checking the Unix mbox) and in all + operating environments + (thus including patches from pdksh on e.g. Debian). + + http://mirbsd.de/mksh diff --git a/package/mksh/mksh.hash b/package/mksh/mksh.hash new file mode 100644 index 00000000..d81deccb --- /dev/null +++ b/package/mksh/mksh.hash @@ -0,0 +1,4 @@ +# From http://www.mirbsd.org/mksh.htm#build +sha256 77ae1665a337f1c48c61d6b961db3e52119b38e58884d1c89684af31f87bc506 mksh-R59c.tgz +# Locally computed +sha256 abf44a61ec777c98f8ae7e08e4fe25fe258e0c470215e2eeb22816f6bae72c80 mksh.1 diff --git a/package/mksh/mksh.mk b/package/mksh/mksh.mk new file mode 100644 index 00000000..386b1bd0 --- /dev/null +++ b/package/mksh/mksh.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# mksh +# +################################################################################ + +MKSH_VERSION = 59c +MKSH_SOURCE = mksh-R$(MKSH_VERSION).tgz +MKSH_SITE = https://www.mirbsd.org/MirOS/dist/mir/mksh +# For MirOS License see https://www.mirbsd.org/TaC-mksh.txt +MKSH_LICENSE = MirOS, ISC +MKSH_LICENSE_FILES = mksh.1 + +define MKSH_BUILD_CMDS + cd $(@D) && $(TARGET_MAKE_ENV) \ + TARGET_OS=Linux $(TARGET_CONFIGURE_OPTS) \ + sh ./Build.sh +endef + +define MKSH_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/mksh $(TARGET_DIR)/bin/mksh +endef + +# Add /bin/mksh to /etc/shells otherwise some login tools like dropbear +# can reject the user connection. See man shells. +define MKSH_ADD_MKSH_TO_SHELLS + grep -qsE '^/bin/mksh$$' $(TARGET_DIR)/etc/shells \ + || echo "/bin/mksh" >> $(TARGET_DIR)/etc/shells +endef +MKSH_TARGET_FINALIZE_HOOKS += MKSH_ADD_MKSH_TO_SHELLS + +$(eval $(generic-package)) diff --git a/package/mmc-utils/0001-mmc_cmds.c-fix-build-with-gcc-4.9.patch b/package/mmc-utils/0001-mmc_cmds.c-fix-build-with-gcc-4.9.patch new file mode 100644 index 00000000..7725f9ca --- /dev/null +++ b/package/mmc-utils/0001-mmc_cmds.c-fix-build-with-gcc-4.9.patch @@ -0,0 +1,37 @@ +From 6208cc78f6efd1fafc4f5bc6a487247a383df80f Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 28 Sep 2019 20:44:52 +0200 +Subject: [PATCH] mmc_cmds.c: fix build with gcc 4.9 + +Fix following error with gcc 4.9: + +mmc_cmds.c:1918:9: error: missing braces around initializer [-Werror=missing-braces] + struct rpmb_frame frame_status = {0}; + +Fixes: + - http://autobuild.buildroot.org/results/bf3b6f9f6ef39b99842b3c92495b7bf359c68158 + +Signed-off-by: Fabrice Fontaine +[Upstream status: sent to linux-mmc@vger.kernel.org] +--- + mmc_cmds.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/mmc_cmds.c b/mmc_cmds.c +index fb37189..6b09f26 100644 +--- a/mmc_cmds.c ++++ b/mmc_cmds.c +@@ -1915,7 +1915,9 @@ static int do_rpmb_op(int fd, + u_int16_t rpmb_type; + struct mmc_ioc_multi_cmd *mioc; + struct mmc_ioc_cmd *ioc; +- struct rpmb_frame frame_status = {0}; ++ struct rpmb_frame frame_status; ++ ++ memset(&frame_status, 0, sizeof(frame_status)); + + if (!frame_in || !frame_out || !out_cnt) + return -EINVAL; +-- +2.23.0 + diff --git a/package/mmc-utils/Config.in b/package/mmc-utils/Config.in new file mode 100644 index 00000000..850aeac4 --- /dev/null +++ b/package/mmc-utils/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_MMC_UTILS + bool "mmc-utils" + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0 + help + MMC utils + + https://git.kernel.org/cgit/linux/kernel/git/cjb/mmc-utils.git + +comment "mmc-utils needs a toolchain w/ headers >= 3.0" + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0 diff --git a/package/mmc-utils/mmc-utils.hash b/package/mmc-utils/mmc-utils.hash new file mode 100644 index 00000000..e8b28266 --- /dev/null +++ b/package/mmc-utils/mmc-utils.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 ffc8f77233d1bd39ce4ec68835ad94aa6762624e4e96fb60102e87ba82db083e mmc-utils-d40ec535b9d4e4c974e8c2fbfb422cd0348cc5e8-br1.tar.gz +sha256 c3165393bcd710624e2909327a6fbeb736c47bdbe66de1c1a364ac7324d3e4d6 mmc.h diff --git a/package/mmc-utils/mmc-utils.mk b/package/mmc-utils/mmc-utils.mk new file mode 100644 index 00000000..8c264a45 --- /dev/null +++ b/package/mmc-utils/mmc-utils.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# mmc-utils +# +################################################################################ + +MMC_UTILS_VERSION = d40ec535b9d4e4c974e8c2fbfb422cd0348cc5e8 +MMC_UTILS_SITE = git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc-utils.git +MMC_UTILS_LICENSE = GPL-2.0 +MMC_UTILS_LICENSE_FILES = mmc.h + +# override AM_CFLAGS as the project Makefile uses it to pass +# -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2, and the latter conflicts +# with the _FORTIFY_SOURCE that we pass when hardening options are +# enabled. +define MMC_UTILS_BUILD_CMDS + $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) AM_CFLAGS= +endef + +define MMC_UTILS_INSTALL_TARGET_CMDS + $(MAKE) -C $(@D) prefix=/usr DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/moarvm/Config.in b/package/moarvm/Config.in new file mode 100644 index 00000000..c370a0f2 --- /dev/null +++ b/package/moarvm/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_MOARVM + bool "moarvm" + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # libuv + depends on !BR2_STATIC_LIBS # libuv + depends on BR2_USE_MMU # libuv + depends on BR2_PACKAGE_LIBATOMIC_OPS_ARCH_SUPPORTS # libatomic_ops + # needs AO_fetch_compare_and_swap, not implemented for sparcv8/sparcv9 + depends on !BR2_sparc64 && !BR2_sparc + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # libuv + select BR2_PACKAGE_LIBUV + select BR2_PACKAGE_LIBTOMMATH + select BR2_PACKAGE_LIBATOMIC_OPS + # dyncall does not work on MIPS; libffi needs to be used. + # See: https://github.com/MoarVM/MoarVM/issues/222 + # dyncall does not work also on powerpc64 and powerpc64le + select BR2_PACKAGE_LIBFFI if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el || BR2_powerpc64 || BR2_powerpc64le + help + Short for "Metamodel On A Runtime", MoarVM is a virtual + machine built especially for Rakudo Perl 6 and the NQP + Compiler Toolchain. + + http://moarvm.com + +comment "moarvm needs a toolchain w/ NPTL, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIBS + depends on BR2_USE_MMU + depends on BR2_PACKAGE_LIBATOMIC_OPS_ARCH_SUPPORTS + depends on !BR2_sparc64 && !BR2_sparc + depends on BR2_TOOLCHAIN_HAS_SYNC_4 diff --git a/package/moarvm/moarvm.hash b/package/moarvm/moarvm.hash new file mode 100644 index 00000000..abe96c3d --- /dev/null +++ b/package/moarvm/moarvm.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 08914f1c464151ebc678cf0d360c9e479a036178fa7c9ddfd34aa4d556d03ea2 MoarVM-2020.12.tar.gz +sha256 c53c6b96081b0a5b9b2fb4d0133d55c20e5e00e4c127ade62f03434ee7b3d2de Artistic2.txt diff --git a/package/moarvm/moarvm.mk b/package/moarvm/moarvm.mk new file mode 100644 index 00000000..1f414044 --- /dev/null +++ b/package/moarvm/moarvm.mk @@ -0,0 +1,52 @@ +################################################################################ +# +# moarvm +# +################################################################################ + +MOARVM_VERSION = 2020.12 +MOARVM_SITE = http://moarvm.com/releases +MOARVM_SOURCE = MoarVM-$(MOARVM_VERSION).tar.gz +MOARVM_LICENSE = Artistic-2.0 +MOARVM_LICENSE_FILES = Artistic2.txt +MOARVM_INSTALL_STAGING = YES +MOARVM_DEPENDENCIES = host-pkgconf libuv libtommath libatomic_ops + +MOARVM_CONF_OPTS = \ + --build=$(GNU_HOST_NAME) \ + --host=$(GNU_TARGET_NAME) \ + --ar="$(TARGET_AR)" \ + --cc="$(TARGET_CC)" \ + --ld="$(TARGET_CC)" \ + --prefix="/usr" \ + --pkgconfig=$(PKG_CONFIG_HOST_BINARY) \ + --has-libuv \ + --has-libtommath \ + --has-libatomic + +ifeq ($(BR2_PACKAGE_LIBFFI),y) +MOARVM_CONF_OPTS += --has-libffi +MOARVM_DEPENDENCIES += libffi +endif + +ifeq ($(BR2_ENDIAN),"BIG") +MOARVM_CONF_OPTS += --big-endian +endif + +define MOARVM_CONFIGURE_CMDS + (cd $(@D); $(TARGET_MAKE_ENV) perl Configure.pl $(MOARVM_CONF_OPTS)) +endef + +define MOARVM_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define MOARVM_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install +endef + +define MOARVM_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/mobile-broadband-provider-info/Config.in b/package/mobile-broadband-provider-info/Config.in new file mode 100644 index 00000000..dda71056 --- /dev/null +++ b/package/mobile-broadband-provider-info/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO + bool "mobile-broadband-provider-info" + help + Mobile broadband provider database. + + http://live.gnome.org/NetworkManager/MobileBroadband/ServiceProviders diff --git a/package/mobile-broadband-provider-info/mobile-broadband-provider-info.hash b/package/mobile-broadband-provider-info/mobile-broadband-provider-info.hash new file mode 100644 index 00000000..bbdfd1f0 --- /dev/null +++ b/package/mobile-broadband-provider-info/mobile-broadband-provider-info.hash @@ -0,0 +1,4 @@ +# http://ftp.acc.umu.se/pub/GNOME/sources/mobile-broadband-provider-info/20190618/mobile-broadband-provider-info-20190618.sha256sum +sha256 c22d64a565d1975b9eecb6ed2eeaef18634bc6f385c8137d05e845d8fb3cce5b mobile-broadband-provider-info-20190618.tar.xz +# Locally computed +sha256 3d510b215a33087b9ceb9592da21575ea1f9f98bd4d983a38e65fe851a552174 COPYING diff --git a/package/mobile-broadband-provider-info/mobile-broadband-provider-info.mk b/package/mobile-broadband-provider-info/mobile-broadband-provider-info.mk new file mode 100644 index 00000000..2986f92f --- /dev/null +++ b/package/mobile-broadband-provider-info/mobile-broadband-provider-info.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# mobile-broadband-provider-info +# +################################################################################ + +MOBILE_BROADBAND_PROVIDER_INFO_VERSION = 20190618 +MOBILE_BROADBAND_PROVIDER_INFO_SITE = http://ftp.gnome.org/pub/GNOME/sources/mobile-broadband-provider-info/$(MOBILE_BROADBAND_PROVIDER_INFO_VERSION) +MOBILE_BROADBAND_PROVIDER_INFO_SOURCE = mobile-broadband-provider-info-$(MOBILE_BROADBAND_PROVIDER_INFO_VERSION).tar.xz +MOBILE_BROADBAND_PROVIDER_INFO_LICENSE = Public domain +MOBILE_BROADBAND_PROVIDER_INFO_LICENSE_FILES = COPYING +MOBILE_BROADBAND_PROVIDER_INFO_INSTALL_STAGING = YES +MOBILE_BROADBAND_PROVIDER_INFO_DEPENDENCIES = host-pkgconf host-libxslt + +$(eval $(autotools-package)) diff --git a/package/modem-manager/Config.in b/package/modem-manager/Config.in new file mode 100644 index 00000000..c4c72377 --- /dev/null +++ b/package/modem-manager/Config.in @@ -0,0 +1,32 @@ +config BR2_PACKAGE_MODEM_MANAGER + bool "modem-manager" + depends on BR2_USE_WCHAR # libglib2 and gnutls + depends on BR2_TOOLCHAIN_HAS_THREADS # dbus, libglib2 + depends on BR2_USE_MMU # dbus + select BR2_PACKAGE_DBUS # runtime dependency + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBGUDEV if BR2_PACKAGE_HAS_UDEV + help + ModemManager is a DBus-activated daemon which controls mobile + broadband (2G/3G/4G) devices and connections. + + http://www.freedesktop.org/wiki/Software/ModemManager/ + +if BR2_PACKAGE_MODEM_MANAGER + +config BR2_PACKAGE_MODEM_MANAGER_LIBMBIM + bool "MBIM support" + select BR2_PACKAGE_LIBMBIM + help + This option enables support for MBIM protocol + +config BR2_PACKAGE_MODEM_MANAGER_LIBQMI + bool "QMI support" + select BR2_PACKAGE_LIBQMI + help + This option enables support for QMI protocol +endif + +comment "modemmanager needs a toolchain w/ wchar, threads" + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU diff --git a/package/modem-manager/S44modem-manager b/package/modem-manager/S44modem-manager new file mode 100644 index 00000000..416c1e2e --- /dev/null +++ b/package/modem-manager/S44modem-manager @@ -0,0 +1,43 @@ +#!/bin/sh +# +# Starts ModemManager +# + +# Allow a few customizations from a config file +test -r /etc/default/ModemManager && . /etc/default/ModemManager + +PIDFILE=/var/run/ModemManager.pid + +start() { + printf "Starting ModemManager: " + umask 077 + start-stop-daemon -S -q -b -m -p $PIDFILE \ + --exec /usr/sbin/ModemManager -- $MODEMMANAGER_ARGS + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +stop() { + printf "Stopping ModemManager: " + start-stop-daemon -K -q -p $PIDFILE + [ $? = 0 ] && { echo "OK"; rm -f $PIDFILE; } || echo "FAIL" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $ret diff --git a/package/modem-manager/modem-manager.hash b/package/modem-manager/modem-manager.hash new file mode 100644 index 00000000..c12464ac --- /dev/null +++ b/package/modem-manager/modem-manager.hash @@ -0,0 +1,5 @@ +# Locally computed +sha256 fe1a26ba51b4bda7abd09ad4dadedd87d8b8154809fc9d88e94f75fdfff19295 ModemManager-1.14.8.tar.xz +sha256 b464e4925d955a6ca86dd08616e763b26ae46d7fd37dbe281678e34065b1e430 ModemManager-1.18.12.tar.xz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LIB diff --git a/package/modem-manager/modem-manager.mk b/package/modem-manager/modem-manager.mk new file mode 100644 index 00000000..7791ac75 --- /dev/null +++ b/package/modem-manager/modem-manager.mk @@ -0,0 +1,49 @@ +################################################################################ +# +# modem-manager +# +################################################################################ + +MODEM_MANAGER_VERSION = 1.18.12 +MODEM_MANAGER_SOURCE = ModemManager-$(MODEM_MANAGER_VERSION).tar.xz +MODEM_MANAGER_SITE = http://www.freedesktop.org/software/ModemManager +MODEM_MANAGER_LICENSE = GPL-2.0+ (programs, plugins), LGPL-2.0+ (libmm-glib) +MODEM_MANAGER_LICENSE_FILES = COPYING COPYING.LIB +MODEM_MANAGER_DEPENDENCIES = host-pkgconf libglib2 $(TARGET_NLS_DEPENDENCIES) +MODEM_MANAGER_INSTALL_STAGING = YES +MODEM_MANAGER_CONF_OPTS = --disable-more-warnings + +ifeq ($(BR2_PACKAGE_MODEM_MANAGER_LIBQMI),y) +MODEM_MANAGER_DEPENDENCIES += libqmi +MODEM_MANAGER_CONF_OPTS += --with-qmi +else +MODEM_MANAGER_CONF_OPTS += --without-qmi +endif + +ifeq ($(BR2_PACKAGE_LIBGUDEV),y) +MODEM_MANAGER_DEPENDENCIES += libgudev +MODEM_MANAGER_CONF_OPTS += --with-udev +else +MODEM_MANAGER_CONF_OPTS += --without-udev +endif + +ifeq ($(BR2_PACKAGE_MODEM_MANAGER_LIBMBIM),y) +MODEM_MANAGER_DEPENDENCIES += libmbim +MODEM_MANAGER_CONF_OPTS += --with-mbim +else +MODEM_MANAGER_CONF_OPTS += --without-mbim +endif + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +MODEM_MANAGER_DEPENDENCIES += gobject-introspection +MODEM_MANAGER_CONF_OPTS += --enable-introspection +else +MODEM_MANAGER_CONF_OPTS += --disable-introspection +endif + +define MODEM_MANAGER_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/modem-manager/S44modem-manager \ + $(TARGET_DIR)/etc/init.d/S44modem-manager +endef + +$(eval $(autotools-package)) diff --git a/package/modplugtools/Config.in b/package/modplugtools/Config.in new file mode 100644 index 00000000..33acad63 --- /dev/null +++ b/package/modplugtools/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_MODPLUGTOOLS + bool "modplugtools" + depends on BR2_INSTALL_LIBSTDCPP # libmodplug + select BR2_PACKAGE_LIBAO + select BR2_PACKAGE_LIBMODPLUG + help + This installs the 'modplug123' command line tool to play + music files in the tracker formats supported by libmodplug: + MOD, S3M, XM etc. Audio output is handled by libao. + + http://modplug-xmms.sourceforge.net/ + +comment "modplugtools needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/modplugtools/modplugtools.hash b/package/modplugtools/modplugtools.hash new file mode 100644 index 00000000..848d6403 --- /dev/null +++ b/package/modplugtools/modplugtools.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 0122d44ea0513b928cf9d463acc886d08a2664579aa96ddeeb270d5c81193a4e modplugtools-0.5.3.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/modplugtools/modplugtools.mk b/package/modplugtools/modplugtools.mk new file mode 100644 index 00000000..59a2a522 --- /dev/null +++ b/package/modplugtools/modplugtools.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# modplugtools +# +################################################################################ + +MODPLUGTOOLS_VERSION = 0.5.3 +MODPLUGTOOLS_SITE = http://downloads.sourceforge.net/project/modplug-xmms/modplug-tools +MODPLUGTOOLS_LICENSE = GPL-3.0 +MODPLUGTOOLS_LICENSE_FILES = COPYING + +MODPLUGTOOLS_DEPENDENCIES = libao libmodplug + +# Only build the 'mp123' subdir, which contains 'modplug123' that plays through +# various backends via libao. This excludes the 'mpplay' subdir, which contains +# 'modplugplay' that can play only through the deprecated OSS interface. +MODPLUGTOOLS_MAKE_OPTS = SUBDIRS=mp123 +MODPLUGTOOLS_INSTALL_TARGET_OPTS = SUBDIRS=mp123 DESTDIR=$(TARGET_DIR) install + +$(eval $(autotools-package)) diff --git a/package/mongodb/0001-ssl_manager.cpp-fix-build-with-gcc-7-and-fpermissive.patch b/package/mongodb/0001-ssl_manager.cpp-fix-build-with-gcc-7-and-fpermissive.patch new file mode 100644 index 00000000..b4b17466 --- /dev/null +++ b/package/mongodb/0001-ssl_manager.cpp-fix-build-with-gcc-7-and-fpermissive.patch @@ -0,0 +1,55 @@ +From 362be06fc16a5ad0f9e9aa90cc763c5242e8e35c Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 9 Feb 2019 12:41:45 +0100 +Subject: [PATCH] ssl_manager.cpp: fix build with gcc 7 and -fpermissive + +Change prototype of DERToken::parse function from +parse(ConstDataRange cdr, size_t* outLength); +to parse(ConstDataRange cdr, uint64_t* outLength); + +Otherwise, we got the following error: + +src/mongo/util/net/ssl_manager.cpp: In static member function 'static mongo::StatusWith mongo::{anonymous}::DERToken::parse(mongo::ConstDataRange, size_t*)': +src/mongo/util/net/ssl_manager.cpp:575:79: error: invalid conversion from 'size_t* {aka unsigned int*}' to 'long unsigned int*' [-fpermissive] + if (mongoUnsignedAddOverflow64(tagAndLengthByteCount, derLength, outLength) || + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/mongodb/mongo/pull/1296] +--- + src/mongo/util/net/ssl_manager.cpp | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/mongo/util/net/ssl_manager.cpp b/src/mongo/util/net/ssl_manager.cpp +index b93ebe84a4..3511eb5d99 100644 +--- a/src/mongo/util/net/ssl_manager.cpp ++++ b/src/mongo/util/net/ssl_manager.cpp +@@ -782,7 +782,7 @@ public: + * + * Returns a DERToken which consists of the (tag, length, value) tuple. + */ +- static StatusWith parse(ConstDataRange cdr, size_t* outLength); ++ static StatusWith parse(ConstDataRange cdr, uint64_t* outLength); + + private: + DERType _type{DERType::EndOfContent}; +@@ -799,7 +799,7 @@ struct DataType::Handler { + size_t length, + size_t* advanced, + std::ptrdiff_t debug_offset) { +- size_t outLength; ++ uint64_t outLength; + + auto swPair = DERToken::parse(ConstDataRange(ptr, length), &outLength); + +@@ -844,7 +844,7 @@ StatusWith readDERString(ConstDataRangeCursor& cdc) { + } + + +-StatusWith DERToken::parse(ConstDataRange cdr, size_t* outLength) { ++StatusWith DERToken::parse(ConstDataRange cdr, uint64_t* outLength) { + const size_t kTagLength = 1; + const size_t kTagLengthAndInitialLengthByteLength = kTagLength + 1; + +-- +2.14.1 + diff --git a/package/mongodb/Config.in b/package/mongodb/Config.in new file mode 100644 index 00000000..493c5924 --- /dev/null +++ b/package/mongodb/Config.in @@ -0,0 +1,41 @@ +# from https://docs.mongodb.com/manual/installation/#supported-platforms +config BR2_PACKAGE_MONGODB_ARCH_SUPPORTS + bool + # ARM needs LDREX/STREX, so ARMv6+ + default y if BR2_arm && !BR2_ARM_CPU_ARMV4 && !BR2_ARM_CPU_ARMV5 + default y if BR2_aarch64 || BR2_x86_64 + +config BR2_PACKAGE_MONGODB + bool "mongodb" + depends on BR2_PACKAGE_MONGODB_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_USES_GLIBC # needs glibc malloc_usable_size + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_7 # C++17 + select BR2_PACKAGE_BOOST + select BR2_PACKAGE_BOOST_FILESYSTEM + select BR2_PACKAGE_BOOST_IOSTREAMS + select BR2_PACKAGE_BOOST_PROGRAM_OPTIONS + select BR2_PACKAGE_BOOST_SYSTEM + select BR2_PACKAGE_PCRE + select BR2_PACKAGE_PCRE_UTF # runtime + select BR2_PACKAGE_SNAPPY + select BR2_PACKAGE_SQLITE + select BR2_PACKAGE_YAML_CPP + select BR2_PACKAGE_ZLIB + help + MongoDB is a cross-platform document-oriented database + (NoSQL). + + It uses JSON-like documents with dynamic schemas (BSON), + making the integration of data in certain types of + applications easier and faster. + + https://www.mongodb.org/ + +comment "mongodb needs a glibc toolchain w/ wchar, threads, C++, gcc >= 7" + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_USES_GLIBC || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_7 + depends on BR2_PACKAGE_MONGODB_ARCH_SUPPORTS diff --git a/package/mongodb/mongodb.hash b/package/mongodb/mongodb.hash new file mode 100644 index 00000000..3b2580cc --- /dev/null +++ b/package/mongodb/mongodb.hash @@ -0,0 +1,4 @@ +# Locally computed: +sha256 ab5a8b6e967614a8ad67c0ca87124c4f380d4a476508973a7995d54ed902b02e mongodb-src-r4.2.11.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 APACHE-2.0.txt +sha256 09d99ca61eb07873d5334077acba22c33e7f7d0a9fa08c92734e0ac8430d6e27 LICENSE-Community.txt diff --git a/package/mongodb/mongodb.mk b/package/mongodb/mongodb.mk new file mode 100644 index 00000000..377484a0 --- /dev/null +++ b/package/mongodb/mongodb.mk @@ -0,0 +1,103 @@ +################################################################################ +# +# mongodb +# +################################################################################ + +MONGODB_VERSION = 4.2.11 +MONGODB_SITE = https://fastdl.mongodb.org/src +MONGODB_SOURCE = mongodb-src-r$(MONGODB_VERSION).tar.gz + +MONGODB_LICENSE = Apache-2.0 (drivers), SSPL (database) +MONGODB_LICENSE_FILES = APACHE-2.0.txt LICENSE-Community.txt + +MONGODB_CPE_ID_VENDOR = mongodb + +MONGODB_DEPENDENCIES = \ + boost \ + host-python3-cheetah \ + host-python3-psutil \ + host-python3-pyyaml \ + host-python3-regex \ + host-python3-requests \ + host-scons \ + pcre \ + snappy \ + sqlite \ + yaml-cpp \ + zlib + +MONGODB_SCONS_TARGETS = mongod mongos + +MONGODB_SCONS_ENV = CC="$(TARGET_CC)" CXX="$(TARGET_CXX)" \ + -j"$(PARALLEL_JOBS)" + +MONGODB_SCONS_OPTS = \ + --disable-minimum-compiler-version-enforcement \ + --disable-warnings-as-errors \ + --use-system-boost \ + --use-system-pcre \ + --use-system-snappy \ + --use-system-sqlite \ + --use-system-yaml \ + --use-system-zlib + +# need to pass mongo version when not building from git repo +MONGODB_SCONS_OPTS += MONGO_VERSION=$(MONGODB_VERSION)- + +# WiredTiger database storage engine only supported on 64 bits +ifeq ($(BR2_ARCH_IS_64),y) +MONGODB_SCONS_OPTS += --wiredtiger=on +else +MONGODB_SCONS_OPTS += --wiredtiger=off +endif + +# JavaScript scripting engine and tcmalloc supported only on +# x86/x86-64 systems. Mongo target is a shell interface that +# depends on the javascript engine, so it will also only be +# built on x86/x86-64 systems. +ifeq ($(BR2_i386)$(BR2_x86_64),y) +MONGODB_SCONS_OPTS += --js-engine=mozjs --allocator=tcmalloc +MONGODB_SCONS_TARGETS += mongo +else +MONGODB_SCONS_OPTS += --js-engine=none --allocator=system +endif + +ifeq ($(BR2_PACKAGE_LIBCURL),y) +MONGODB_DEPENDENCIES += libcurl +MONGODB_SCONS_OPTS += \ + --enable-free-mon=on \ + --enable-http-client=on +else +MONGODB_SCONS_OPTS += \ + --enable-free-mon=off \ + --enable-http-client=off +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +MONGODB_DEPENDENCIES += openssl +MONGODB_SCONS_OPTS += \ + --ssl=on \ + --ssl-provider=openssl +else +MONGODB_SCONS_OPTS += --ssl=off +endif + +define MONGODB_BUILD_CMDS + (cd $(@D); \ + $(HOST_DIR)/bin/python3 $(SCONS) \ + $(MONGODB_SCONS_ENV) \ + $(MONGODB_SCONS_OPTS) \ + $(MONGODB_SCONS_TARGETS)) +endef + +define MONGODB_INSTALL_TARGET_CMDS + (cd $(@D); \ + $(HOST_DIR)/bin/python3 $(SCONS) \ + $(MONGODB_SCONS_ENV) \ + $(MONGODB_SCONS_OPTS) \ + --prefix=$(TARGET_DIR)/usr \ + install) +endef + +$(eval $(generic-package)) diff --git a/package/mongoose/Config.in b/package/mongoose/Config.in new file mode 100644 index 00000000..22b385d4 --- /dev/null +++ b/package/mongoose/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_MONGOOSE + bool "mongoose" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + help + Mongoose is an embedded networking library, which can turn + anything into a web server + + https://github.com/cesanta/mongoose + +comment "mongoose needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/mongoose/mongoose.hash b/package/mongoose/mongoose.hash new file mode 100644 index 00000000..809f160c --- /dev/null +++ b/package/mongoose/mongoose.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 8c5024a4e5b5a0c7fdae3c24ebc68e2b3ccfaba08cf25c2e76fc7f14f92fd4a5 mongoose-7.2.tar.gz +sha256 9553d057f2ba980642f2c18d87ed38896cff1c9612d77d684a73a11fe1443b05 LICENSE diff --git a/package/mongoose/mongoose.mk b/package/mongoose/mongoose.mk new file mode 100644 index 00000000..2c5df1d0 --- /dev/null +++ b/package/mongoose/mongoose.mk @@ -0,0 +1,38 @@ +################################################################################ +# +# mongoose +# +################################################################################ + +MONGOOSE_VERSION = 7.2 +MONGOOSE_SITE = $(call github,cesanta,mongoose,$(MONGOOSE_VERSION)) +MONGOOSE_LICENSE = GPL-2.0 +MONGOOSE_LICENSE_FILES = LICENSE +MONGOOSE_CPE_ID_VENDOR = cesenta +MONGOOSE_INSTALL_STAGING = YES +# static library +MONGOOSE_INSTALL_TARGET = NO + +MONGOOSE_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +MONGOOSE_DEPENDENCIES += openssl +MONGOOSE_CFLAGS += -DMG_ENABLE_OPENSSL=1 +else ifeq ($(BR2_PACKAGE_MBEDTLS),y) +MONGOOSE_DEPENDENCIES += mbedtls +MONGOOSE_CFLAGS += -DMG_ENABLE_MBEDTLS=1 +endif + +define MONGOOSE_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CC) -c $(@D)/mongoose.c $(MONGOOSE_CFLAGS) -o $(@D)/mongoose.o + $(TARGET_MAKE_ENV) $(TARGET_AR) rcs $(@D)/libmongoose.a $(@D)/mongoose.o +endef + +define MONGOOSE_INSTALL_STAGING_CMDS + $(INSTALL) -D -m 644 $(@D)/libmongoose.a \ + $(STAGING_DIR)/usr/lib/libmongoose.a + $(INSTALL) -D -m 644 $(@D)/mongoose.h \ + $(STAGING_DIR)/usr/include/mongoose.h +endef + +$(eval $(generic-package)) diff --git a/package/mongrel2/0001-Do-not-run-tests.patch b/package/mongrel2/0001-Do-not-run-tests.patch new file mode 100644 index 00000000..557c27ed --- /dev/null +++ b/package/mongrel2/0001-Do-not-run-tests.patch @@ -0,0 +1,43 @@ +From 3cbef2195533f357c8a80c2840108662461273b7 Mon Sep 17 00:00:00 2001 +From: Lionel Orry +Date: Wed, 27 Mar 2013 14:48:19 +0100 +Subject: [PATCH 4/4] Do not run tests. + +This patch is specific to cross-compiled environments and avoids running +the tests on the host. It is not meant to be applied upstream. + +Signed-off-by: Lionel Orry +--- + Makefile | 2 +- + tools/m2sh/Makefile | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Makefile b/Makefile +index 7dc4089..ca72630 100644 +--- a/Makefile ++++ b/Makefile +@@ -16,7 +16,7 @@ TEST_SRC=$(wildcard tests/*_tests.c) + TESTS=$(patsubst %.c,%,${TEST_SRC}) + MAKEOPTS=OPTFLAGS="${NOEXTCFLAGS} ${OPTFLAGS}" OPTLIBS="${OPTLIBS}" LIBS="${LIBS}" DESTDIR="${DESTDIR}" PREFIX="${PREFIX}" + +-all: bin/mongrel2 tests m2sh procer ++all: bin/mongrel2 m2sh procer filters config_modules + + dev: CFLAGS=-g -Wall -Isrc -Wall -Wextra $(OPTFLAGS) -D_FILE_OFFSET_BITS=64 + dev: all +diff --git a/tools/m2sh/Makefile b/tools/m2sh/Makefile +index b50d8a0..334e4da 100644 +--- a/tools/m2sh/Makefile ++++ b/tools/m2sh/Makefile +@@ -9,7 +9,7 @@ TESTS=$(patsubst %.c,%,${TEST_SRC}) + LIB_SRC=$(filter-out src/m2sh.c,${SOURCES}) + LIB_OBJ=$(filter-out src/m2sh.o,${OBJECTS}) + +-all: ../lemon/lemon tests build/m2sh ++all: ../lemon/lemon build/m2sh + + dev: CFLAGS=-g -Wall -Wextra -Isrc -I../../src $(OPTFLAGS) + dev: all +-- +1.8.1.4 + diff --git a/package/mongrel2/0002-Fix-Makefiles-for-cross-compilation.patch b/package/mongrel2/0002-Fix-Makefiles-for-cross-compilation.patch new file mode 100644 index 00000000..1961f128 --- /dev/null +++ b/package/mongrel2/0002-Fix-Makefiles-for-cross-compilation.patch @@ -0,0 +1,78 @@ +From 298356c44a7df2b34c4e307c531d2010e2cb4b79 Mon Sep 17 00:00:00 2001 +From: Lionel Orry +Date: Wed, 27 Mar 2013 15:56:56 +0100 +Subject: [PATCH] Fix Makefiles for cross-compilation + +The CFLAGS handling in mongrel2 is really messy and it is hard to make +it behave correctly with cross-compiling environments. This patch +restricts the Makefiles syntax to GNU Make, but help cross-compiling. + +This is not meant to be applied upstream. + +Signed-off-by: Lionel Orry +[Fabrice: refresh for 1.12.2] +Signed-off-by: Fabrice Fontaine +--- + Makefile | 2 +- + tools/config_modules/Makefile | 2 +- + tools/filters/Makefile | 2 +- + tools/m2sh/Makefile | 2 +- + tools/procer/Makefile | 2 +- + 5 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/Makefile b/Makefile +index 4e89c33..2f549a8 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,5 +1,5 @@ + CFLAGS?=-g -O2 +-CFLAGS += -Wall -Wextra -Wno-implicit-fallthrough -Wno-unused-const-variable -I./src -DNDEBUG -D_FILE_OFFSET_BITS=64 -pthread ++override CFLAGS += -Wall -Wextra -Wno-implicit-fallthrough -Wno-unused-const-variable -I./src -DNDEBUG -D_FILE_OFFSET_BITS=64 -pthread + CFLAGS += ${OPTFLAGS} + LIBS+=-lzmq -ldl -lsqlite3 -lmbedtls -lmbedx509 -lmbedcrypto + PREFIX?=/usr/local +diff --git a/tools/config_modules/Makefile b/tools/config_modules/Makefile +index c2680d1..ada3169 100644 +--- a/tools/config_modules/Makefile ++++ b/tools/config_modules/Makefile +@@ -1,5 +1,5 @@ + PREFIX?=/usr/local +-CFLAGS=-I../../src -I../../src/mbedtls/include $(OPTFLAGS) -fPIC -shared -nostartfiles -L../../build ++override CFLAGS=-I../../src -I../../src/mbedtls/include $(OPTFLAGS) -fPIC -shared -nostartfiles -L../../build + LDFLAGS=$(OPTLIBS) + + MONGO_SRC = mongo-c-driver/src/bson.c \ +diff --git a/tools/filters/Makefile b/tools/filters/Makefile +index 6505ad5..a968ef6 100644 +--- a/tools/filters/Makefile ++++ b/tools/filters/Makefile +@@ -1,5 +1,5 @@ + PREFIX?=/usr/local +-CFLAGS=-I../../src -I../../src/mbedtls/include $(OPTFLAGS) -g -fPIC -shared -nostartfiles -L../../build ++override CFLAGS=-I../../src -I../../src/mbedtls/include $(OPTFLAGS) -g -fPIC -shared -nostartfiles -L../../build + LDFLAGS=$(OPTLIBS) + + all: null.so rewrite.so sendfile.so +diff --git a/tools/m2sh/Makefile b/tools/m2sh/Makefile +index b50d8a0..cc00062 100644 +--- a/tools/m2sh/Makefile ++++ b/tools/m2sh/Makefile +@@ -1,4 +1,4 @@ +-CFLAGS=-DNDEBUG -DNO_LINENOS -pthread -g -I../../src -Isrc -Wall $(OPTFLAGS) ++override CFLAGS=-DNDEBUG -DNO_LINENOS -pthread -g -I../../src -Isrc -Wall $(OPTFLAGS) + LIBS=-lzmq -lsqlite3 ../../build/libm2.a $(OPTLIBS) + + PREFIX?=/usr/local +diff --git a/tools/procer/Makefile b/tools/procer/Makefile +index bb9aa31..d377f7f 100644 +--- a/tools/procer/Makefile ++++ b/tools/procer/Makefile +@@ -1,4 +1,4 @@ +-CFLAGS=-DNDEBUG -pthread -g -I../../src -Wall $(OPTFLAGS) ++override CFLAGS=-DNDEBUG -pthread -g -I../../src -Wall $(OPTFLAGS) + PREFIX?=/usr/local + LIBS?=-lzmq + SOURCES=$(wildcard *.c) +-- +2.27.0 + diff --git a/package/mongrel2/0003-fix-multiple-definition-error-when-building-with-gcc10.patch b/package/mongrel2/0003-fix-multiple-definition-error-when-building-with-gcc10.patch new file mode 100644 index 00000000..e1b57884 --- /dev/null +++ b/package/mongrel2/0003-fix-multiple-definition-error-when-building-with-gcc10.patch @@ -0,0 +1,25 @@ +From c51815b10c39c6e802bd1b56549f1d479b480fcc Mon Sep 17 00:00:00 2001 +From: Andrew Sun +Date: Sat, 18 Jul 2020 09:11:11 -0400 +Subject: [PATCH] fix multiple definition error when building with gcc10 + +[Retrieved from: +https://github.com/mongrel2/mongrel2/pull/343/commits/c51815b10c39c6e802bd1b56549f1d479b480fcc] +Signed-off-by: Fabrice Fontaine +--- + src/unixy.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/unixy.h b/src/unixy.h +index 045e7c28..4225220c 100644 +--- a/src/unixy.h ++++ b/src/unixy.h +@@ -38,7 +38,7 @@ + #include + #include + +-char *m2program; ++extern char *m2program; + + int Unixy_chroot(bstring path); + diff --git a/package/mongrel2/0004-Support-urandom-inside-chroot.patch b/package/mongrel2/0004-Support-urandom-inside-chroot.patch new file mode 100644 index 00000000..468ddb83 --- /dev/null +++ b/package/mongrel2/0004-Support-urandom-inside-chroot.patch @@ -0,0 +1,113 @@ +From 330e8c8352eb0ed3c178ac6e0102403c0a835492 Mon Sep 17 00:00:00 2001 +From: Jason Miller +Date: Thu, 5 Jul 2018 20:53:51 -0700 +Subject: [PATCH] Support urandom inside chroot + +This adds a new default entropy function that uses a /dev/urandom stream +opened before the chroot. If initializing that fails, it fallsback on +HAVEGE only if HAVEGE is supported by the mbedTLS. + +This should remove the hard requirement on HAVEGE + +resolves #326 +resolves #327 + +[Upstream status: https://github.com/mongrel2/mongrel2/pull/328] +Signed-off-by: Fabrice Fontaine +--- + src/mongrel2.c | 7 ------- + src/server.c | 36 +++++++++++++++++++++++------------- + 2 files changed, 23 insertions(+), 20 deletions(-) + +diff --git a/src/mongrel2.c b/src/mongrel2.c +index da632d95..48ece8a5 100644 +--- a/src/mongrel2.c ++++ b/src/mongrel2.c +@@ -404,13 +404,6 @@ void taskmain(int argc, char **argv) + rc = attempt_chroot_drop(srv); + check(rc == 0, "Major failure in chroot/droppriv, aborting."); + +- // set up rng after chroot +- // TODO: once mbedtls is updated, we can move this back into Server_create +- if(srv->use_ssl) { +- rc = Server_init_rng(srv); +- check(rc == 0, "Failed to initialize rng for server %s", bdata(srv->uuid)); +- } +- + final_setup(); + + taskcreate(tickertask, NULL, TICKER_TASK_STACK); +diff --git a/src/server.c b/src/server.c +index 45761db4..e44e199b 100644 +--- a/src/server.c ++++ b/src/server.c +@@ -149,35 +149,45 @@ static int Server_load_ciphers(Server *srv, bstring ssl_ciphers_val) + return -1; + } + ++static int urandom_entropy_func(void *data, unsigned char *output, size_t len) ++{ ++ FILE* urandom = (FILE *)data; ++ size_t rc = fread(output, 1, len, urandom); ++ ++ if (rc != len) return MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; ++ ++ return 0; ++} ++ + int Server_init_rng(Server *srv) + { + int rc; +- unsigned char buf[MBEDTLS_ENTROPY_BLOCK_SIZE]; + void *ctx = NULL; + +- mbedtls_entropy_init( &srv->entropy ); ++ FILE *urandom = fopen("/dev/urandom","r"); + +- // test the entropy source +- rc = mbedtls_entropy_func(&srv->entropy, buf, MBEDTLS_ENTROPY_BLOCK_SIZE); +- +- if(rc == 0) { ++ if(urandom != NULL) { + ctx = calloc(sizeof(mbedtls_ctr_drbg_context), 1); + + mbedtls_ctr_drbg_init((mbedtls_ctr_drbg_context *)ctx); + rc = mbedtls_ctr_drbg_seed((mbedtls_ctr_drbg_context *)ctx, +- mbedtls_entropy_func, &srv->entropy, NULL, 0); ++ urandom_entropy_func, urandom, NULL, 0); + check(rc == 0, "Init rng failed: ctr_drbg_init returned %d\n", rc); + + srv->rng_func = mbedtls_ctr_drbg_random; + srv->rng_ctx = ctx; + } else { +- log_warn("entropy source unavailable. falling back to havege rng"); + ++#if defined(MBEDTLS_HAVEGE_C) ++ log_warn("entropy source unavailable. falling back to havege rng"); + ctx = calloc(sizeof(mbedtls_havege_state), 1); + mbedtls_havege_init((mbedtls_havege_state *)ctx); +- + srv->rng_func = mbedtls_havege_random; + srv->rng_ctx = ctx; ++#else ++ log_err("Unable to initialize urandom entropy source, and mbedTLS compiled without HAVEGE"); ++ goto error; ++#endif + } + + return 0; +@@ -278,10 +288,10 @@ Server *Server_create(bstring uuid, bstring default_host, + + // TODO: once mbedtls supports opening urandom early and keeping it open, + // put the rng initialization back here (before chroot) +- //if(use_ssl) { +- // rc = Server_init_rng(srv); +- // check(rc == 0, "Failed to initialize rng for server %s", bdata(uuid)); +- //} ++ if(use_ssl) { ++ rc = Server_init_rng(srv); ++ check(rc == 0, "Failed to initialize rng for server %s", bdata(uuid)); ++ } + + if(blength(chroot) > 0) { + srv->chroot = bstrcpy(chroot); check_mem(srv->chroot); diff --git a/package/mongrel2/Config.in b/package/mongrel2/Config.in new file mode 100644 index 00000000..60fee6f9 --- /dev/null +++ b/package/mongrel2/Config.in @@ -0,0 +1,33 @@ +# mongrel2 uses {get,make,swap}context() functions, which are +# available in glibc for all architectures and in uClibc only for a +# subset of the architectures +config BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS + bool + default y if BR2_TOOLCHAIN_USES_GLIBC + default y if BR2_TOOLCHAIN_USES_UCLIBC && \ + (BR2_arm || BR2_armeb || BR2_i386 || BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el || BR2_sparc || BR2_x86_64) + +comment "mongrel2 needs a uClibc or glibc toolchain w/ C++, threads, dynamic library" + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS || \ + !BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS + +config BR2_PACKAGE_MONGREL2 + bool "mongrel2" + depends on BR2_INSTALL_LIBSTDCPP # zeromq + depends on BR2_TOOLCHAIN_HAS_THREADS # zeromq + depends on !BR2_STATIC_LIBS # uses dlopen() + depends on BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS + select BR2_PACKAGE_MBEDTLS + select BR2_PACKAGE_SQLITE + select BR2_PACKAGE_ZEROMQ + help + Mongrel2 is an application, language, and network architecture + agnostic web server that focuses on web applications using + modern browser technologies. + + Mongrel2 supports 17 languages and platforms, HTTP, Flash + sockets, WebSockets, Long Polling, and many ways to deploy + and hack on it. + + http://www.mongrel2.org diff --git a/package/mongrel2/mongrel2.hash b/package/mongrel2/mongrel2.hash new file mode 100644 index 00000000..ea3a1cb4 --- /dev/null +++ b/package/mongrel2/mongrel2.hash @@ -0,0 +1,6 @@ +# From https://mongrel2.org +sha1 6f81fa747a1e198d1a655c3677b6de686a5a51f7 mongrel2-v1.12.2.tar.bz2 + +# Locally computed +sha256 3bffeae198c37a1efc9c12f77d5f1eb61cdf62b35d661babc2527dd030aa7d8f mongrel2-v1.12.2.tar.bz2 +sha256 eb6e2a2baa637d06f6aa762886fbc8939934eb5fdb0b3a5b3882f2a61e9a4357 LICENSE diff --git a/package/mongrel2/mongrel2.mk b/package/mongrel2/mongrel2.mk new file mode 100644 index 00000000..cbe7e3fb --- /dev/null +++ b/package/mongrel2/mongrel2.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# mongrel2 +# +################################################################################ + +MONGREL2_VERSION = 1.12.2 +MONGREL2_SOURCE = mongrel2-v$(MONGREL2_VERSION).tar.bz2 +# Do not use the github helper here, the generated tarball is *NOT* the same +# as the one uploaded by upstream for the release. +MONGREL2_SITE = https://github.com/mongrel2/mongrel2/releases/download/v$(MONGREL2_VERSION) +MONGREL2_LICENSE = BSD-3-Clause +MONGREL2_LICENSE_FILES = LICENSE +MONGREL2_DEPENDENCIES = mbedtls sqlite zeromq + +define MONGREL2_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) \ + PREFIX=/usr all +endef + +define MONGREL2_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) \ + PREFIX=/usr DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/monit/0001-no-force-static.patch b/package/monit/0001-no-force-static.patch new file mode 100644 index 00000000..edb619b5 --- /dev/null +++ b/package/monit/0001-no-force-static.patch @@ -0,0 +1,20 @@ +Do not force building a statically-linked binary + +Statically-linked binary do not work well with glibc, because it +still dlopen()s the NSS libraries. + +Reported-by: Peter Kümmel +Signed-off-by: "Yann E. MORIN" + +diff -durN monit-5.7.orig/Makefile.am monit-5.7/Makefile.am +--- monit-5.7.orig/Makefile.am 2014-02-20 09:00:42.000000000 +0100 ++++ monit-5.7/Makefile.am 2014-09-05 12:49:43.711104001 +0200 +@@ -85,7 +85,7 @@ + src/process/sysdep_@ARCH@.c + + monit_LDADD = libmonit/libmonit.la +-monit_LDFLAGS = -static $(EXTLDFLAGS) ++monit_LDFLAGS = $(EXTLDFLAGS) + + man_MANS = monit.1 + diff --git a/package/monit/Config.in b/package/monit/Config.in new file mode 100644 index 00000000..9f80858f --- /dev/null +++ b/package/monit/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_MONIT + bool "monit" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + help + Monit is a free open source utility for managing and + monitoring, processes, programs, files, directories and + filesystems on a UNIX system. Monit conducts automatic + maintenance and repair and can execute meaningful causal + actions in error situations. + + http://mmonit.com/monit/ + +comment "monit needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/monit/monit.hash b/package/monit/monit.hash new file mode 100644 index 00000000..26d665c0 --- /dev/null +++ b/package/monit/monit.hash @@ -0,0 +1,4 @@ +# From https://mmonit.com/monit/dist/monit-5.26.0.tar.gz.sha256: +sha256 87fc4568a3af9a2be89040efb169e3a2e47b262f99e78d5ddde99dd89f02f3c2 monit-5.26.0.tar.gz +# Locally computed +sha256 d5a4f52b1a5e1e7fe14e01a76aac8b08dc6bbea15466058f271456c97aac1ada COPYING diff --git a/package/monit/monit.mk b/package/monit/monit.mk new file mode 100644 index 00000000..b9e131a3 --- /dev/null +++ b/package/monit/monit.mk @@ -0,0 +1,38 @@ +################################################################################ +# +# monit +# +################################################################################ + +MONIT_VERSION = 5.26.0 +MONIT_SITE = http://mmonit.com/monit/dist +MONIT_LICENSE = AGPL-3.0 with OpenSSL exception +MONIT_LICENSE_FILES = COPYING +MONIT_CPE_ID_VENDOR = mmonit +# +# Touching Makefile.am: +MONIT_AUTORECONF = YES + +MONIT_CONF_ENV = \ + libmonit_cv_setjmp_available=yes \ + libmonit_cv_vsnprintf_c99_conformant=yes + +MONIT_CONF_OPTS += \ + --without-pam \ + --with-largefiles + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +MONIT_CONF_OPTS += --with-ssl=$(STAGING_DIR)/usr +MONIT_DEPENDENCIES += openssl +else +MONIT_CONF_OPTS += --without-ssl +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +MONIT_CONF_OPTS += --with-zlib +MONIT_DEPENDENCIES += zlib +else +MONIT_CONF_OPTS += --without-zlib +endif + +$(eval $(autotools-package)) diff --git a/package/monkey/Config.in b/package/monkey/Config.in new file mode 100644 index 00000000..32a95ee6 --- /dev/null +++ b/package/monkey/Config.in @@ -0,0 +1,24 @@ +config BR2_PACKAGE_MONKEY + bool "monkey" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS # dlopen() + depends on BR2_USE_MMU # fork() + help + Monkey Server is a fast and lightweight web server for Linux + platforms. + + http://monkey-project.com/ + +if BR2_PACKAGE_MONKEY + +config BR2_PACKAGE_MONKEY_SSL + bool "enable SSL/TLS" + select BR2_PACKAGE_MBEDTLS + help + Enable build of the SSL/TLS plugin. + +endif + +comment "monkey needs an toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/monkey/monkey.hash b/package/monkey/monkey.hash new file mode 100644 index 00000000..27ff8064 --- /dev/null +++ b/package/monkey/monkey.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 c988d9f4f577a789aa244e5a0f99ebfd46ebddc328656f319acf64edc9fd5199 monkey-f54856ce250c4e25735434dc75717a4b7fbfc45b.tar.gz +sha256 0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594 LICENSE diff --git a/package/monkey/monkey.mk b/package/monkey/monkey.mk new file mode 100644 index 00000000..2cb1a5f2 --- /dev/null +++ b/package/monkey/monkey.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# monkey +# +################################################################################ + +MONKEY_VERSION = f54856ce250c4e25735434dc75717a4b7fbfc45b +MONKEY_SITE = $(call github,monkey,monkey,$(MONKEY_VERSION)) +MONKEY_LICENSE = Apache-2.0 +MONKEY_LICENSE_FILES = LICENSE + +MONKEY_CONF_OPTS = \ + -DMK_PATH_WWW=/var/www \ + -DWITHOUT_HEADERS=ON + +ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y) +MONKEY_CONF_OPTS += -DMK_UCLIB=ON -DMK_BACKTRACE=OFF +endif + +ifeq ($(BR2_TOOLCHAIN_USES_MUSL),y) +MONKEY_CONF_OPTS += -DMK_MUSL=ON -DMK_BACKTRACE=OFF +endif + +ifeq ($(BR2_ENABLE_DEBUG),y) +MONKEY_CONF_OPTS += -DMK_DEBUG=ON +endif + +ifeq ($(BR2_PACKAGE_MONKEY_SSL),y) +MONKEY_CONF_OPTS += -DMK_PLUGIN_TLS=ON -DMK_MBEDTLS_SHARED=ON +MONKEY_DEPENDENCIES += mbedtls +endif + +$(eval $(cmake-package)) diff --git a/package/mono-gtksharp3/0001-Fixes-MONO_PROFILE_ENTER_LEAVE-undeclared.patch b/package/mono-gtksharp3/0001-Fixes-MONO_PROFILE_ENTER_LEAVE-undeclared.patch new file mode 100644 index 00000000..6596849a --- /dev/null +++ b/package/mono-gtksharp3/0001-Fixes-MONO_PROFILE_ENTER_LEAVE-undeclared.patch @@ -0,0 +1,28 @@ +From c1b9bd4214b78dc426bc6e6a07c23a8ab4ab50ea Mon Sep 17 00:00:00 2001 +From: Jordi Mas +Date: Tue, 12 Mar 2019 12:24:19 +0100 +Subject: [PATCH] Fixes MONO_PROFILE_ENTER_LEAVE undeclared when compiling with + newer versions of Mono (#266) + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/mono/gtk-sharp/commit/c1b9bd4214b78dc426bc6e6a07c23a8ab4ab50ea] +--- + gtk/gui-thread-check/profiler/gui-thread-check.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/gtk/gui-thread-check/profiler/gui-thread-check.c b/gtk/gui-thread-check/profiler/gui-thread-check.c +index 11838e3b0..9f45fe6b2 100644 +--- a/gtk/gui-thread-check/profiler/gui-thread-check.c ++++ b/gtk/gui-thread-check/profiler/gui-thread-check.c +@@ -86,6 +86,10 @@ simple_method_enter (MonoProfiler *prof, MonoMethod *method) + } + } + ++#ifndef MONO_PROFILE_ENTER_LEAVE ++#define MONO_PROFILE_ENTER_LEAVE (1 << 12) ++#endif ++ + void + mono_profiler_startup (const char *desc) + { diff --git a/package/mono-gtksharp3/0002-Mono-compilation-error-branch.patch b/package/mono-gtksharp3/0002-Mono-compilation-error-branch.patch new file mode 100644 index 00000000..0d52401b --- /dev/null +++ b/package/mono-gtksharp3/0002-Mono-compilation-error-branch.patch @@ -0,0 +1,25 @@ +From fe18352a4bc9f0cf3b6cf63b8cc03c5d6e41863b Mon Sep 17 00:00:00 2001 +From: plprevost +Date: Wed, 12 May 2021 16:46:16 +0200 +Subject: [PATCH] refs issue:#298 Fix mono compilation errors + +[Retrieved from: +https://github.com/mono/gtk-sharp/pull/299/commits/fe18352a4bc9f0cf3b6cf63b8cc03c5d6e41863b] +Signed-off-by: Fabrice Fontaine +--- + sample/test/TestRange.cs | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sample/test/TestRange.cs b/sample/test/TestRange.cs +index 82fb81105..8727c9a77 100644 +--- a/sample/test/TestRange.cs ++++ b/sample/test/TestRange.cs +@@ -8,7 +8,7 @@ + + using System; + +-using Gtk; ++using Gtk; using Range = Gtk.Range; + + namespace WidgetViewer { + diff --git a/package/mono-gtksharp3/Config.in b/package/mono-gtksharp3/Config.in new file mode 100644 index 00000000..570b62c3 --- /dev/null +++ b/package/mono-gtksharp3/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_MONO_GTKSHARP3 + bool "gtk# 3" + depends on BR2_PACKAGE_LIBGTK3 + help + Gtk# is a .NET language binding for the GTK+ toolkit. + This package provides version 3 of the bindings. + + http://www.mono-project.com/docs/gui/gtksharp/ diff --git a/package/mono-gtksharp3/mono-gtksharp3.hash b/package/mono-gtksharp3/mono-gtksharp3.hash new file mode 100644 index 00000000..706d9851 --- /dev/null +++ b/package/mono-gtksharp3/mono-gtksharp3.hash @@ -0,0 +1,5 @@ +# sha256 from https://download.gnome.org/sources/gtk-sharp/2.99/gtk-sharp-2.99.3.sha256sum +sha256 6440f571416267ae0cb5698071d087b31e3084693fa2c829b1db37ca7ea2c3a2 gtk-sharp-2.99.3.tar.xz + +# Locally computed +sha256 4b96eca92e6964e89c2faf6a810c9a0214daf6be651fa848fdfbb8cef80c04b1 COPYING diff --git a/package/mono-gtksharp3/mono-gtksharp3.mk b/package/mono-gtksharp3/mono-gtksharp3.mk new file mode 100644 index 00000000..126aabed --- /dev/null +++ b/package/mono-gtksharp3/mono-gtksharp3.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# gtksharp3 +# +################################################################################ + +MONO_GTKSHARP3_VERSION_MAJOR = 2.99 +MONO_GTKSHARP3_VERSION = $(MONO_GTKSHARP3_VERSION_MAJOR).3 +MONO_GTKSHARP3_SITE = http://ftp.gnome.org/pub/gnome/sources/gtk-sharp/$(MONO_GTKSHARP3_VERSION_MAJOR) +MONO_GTKSHARP3_SOURCE = gtk-sharp-$(MONO_GTKSHARP3_VERSION).tar.xz +MONO_GTKSHARP3_LICENSE = LGPL-2.0, MIT (cairo) +MONO_GTKSHARP3_LICENSE_FILES = COPYING +MONO_GTKSHARP3_INSTALL_STAGING = YES +MONO_GTKSHARP3_DEPENDENCIES = mono libgtk3 +MONO_GTKSHARP3_CONF_OPTS += CSC=$(HOST_DIR)/bin/mcs + +$(eval $(autotools-package)) diff --git a/package/mono/Config.in b/package/mono/Config.in new file mode 100644 index 00000000..44b8cf85 --- /dev/null +++ b/package/mono/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_HOST_MONO_ARCH_SUPPORTS + bool + default y if BR2_HOSTARCH = "x86_64" + default y if BR2_HOSTARCH = "x86" + +config BR2_PACKAGE_MONO_ARCH_SUPPORTS + bool + default y if (BR2_arm || BR2_armeb || BR2_i386 || \ + BR2_powerpc || BR2_x86_64) + depends on BR2_PACKAGE_HOST_MONO_ARCH_SUPPORTS + depends on BR2_PACKAGE_LIBATOMIC_OPS_ARCH_SUPPORTS + +config BR2_PACKAGE_MONO + bool "mono" + depends on BR2_PACKAGE_MONO_ARCH_SUPPORTS + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_LIBATOMIC_OPS + help + An open source, cross-platform, implementation of C# + and the CLR that is binary compatible with Microsoft.NET. + + http://download.mono-project.com/sources/mono/ + +comment "mono needs a toolchain w/ C++, threads, dynamic library" + depends on BR2_PACKAGE_MONO_ARCH_SUPPORTS + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/mono/mono.hash b/package/mono/mono.hash new file mode 100644 index 00000000..2477e923 --- /dev/null +++ b/package/mono/mono.hash @@ -0,0 +1,5 @@ +# sha256 locally computed +sha256 51de5c02ad511333f93ff585bca54c8784de35af4ff27b759d16b46c4402cdac mono-6.12.0.90.tar.xz +sha256 923c7053ad0d430cd9b0b69a0ccf3abb7170a1ce50ecbf01915b565a35823d10 LICENSE +sha256 fc488f3ec9f36856bea8cce5cdde1449176341ef93a3962b691970f8981799f4 mcs/COPYING +sha256 2c3c3ef532828bcd42bb3127349625a25291ff5ae7e6f8d42e0fe9b5be836a99 external/Newtonsoft.Json/Tools/7-zip/copying.txt diff --git a/package/mono/mono.mk b/package/mono/mono.mk new file mode 100644 index 00000000..27f78862 --- /dev/null +++ b/package/mono/mono.mk @@ -0,0 +1,66 @@ +################################################################################ +# +# mono +# +################################################################################ + +MONO_VERSION = 6.12.0.90 +MONO_SITE = http://download.mono-project.com/sources/mono +MONO_SOURCE = mono-$(MONO_VERSION).tar.xz +MONO_LICENSE = GPL-2.0 or MIT (compiler, tools), MIT (libs) or commercial +MONO_LICENSE_FILES = LICENSE mcs/COPYING \ + external/Newtonsoft.Json/Tools/7-zip/copying.txt +MONO_CPE_ID_VENDOR = mono-project +MONO_INSTALL_STAGING = YES + +## Mono native + +# patching configure.ac +MONO_AUTORECONF = YES + +MONO_COMMON_CONF_OPTS = --with-mcs-docs=no \ + --with-ikvm-native=no \ + --enable-minimal=profiler,debug \ + --enable-static \ + --disable-btls \ + --disable-system-aot + +# Disable managed code (mcs folder) from building +MONO_CONF_OPTS = $(MONO_COMMON_CONF_OPTS) --disable-mcs-build + +# The libraries have been built by the host-mono build. Since they are +# architecture-independent, we simply copy them to the target. +define MONO_INSTALL_LIBS + rsync -av --exclude=*.so --exclude=*.mdb \ + $(HOST_DIR)/lib/mono $(TARGET_DIR)/usr/lib/ +endef + +MONO_POST_INSTALL_TARGET_HOOKS += MONO_INSTALL_LIBS + +ifeq ($(BR2_PACKAGE_LIBICONV),y) +MONO_DEPENDENCIES += libiconv +endif + +MONO_DEPENDENCIES += \ + host-mono \ + $(if $(BR2_PACKAGE_LIBUNWIND),libunwind) \ + libatomic_ops + +## Mono managed + +HOST_MONO_CONF_OPTS = $(MONO_COMMON_CONF_OPTS) --disable-libraries + +# ensure monolite is used +HOST_MONO_MAKE_OPTS += EXTERNAL_MCS=false + +HOST_MONO_DEPENDENCIES = host-monolite host-gettext host-python3 + +define HOST_MONO_SETUP_MONOLITE + rm -rf $(@D)/mcs/class/lib/monolite + (cd $(@D)/mcs/class/lib; ln -s $(HOST_DIR)/lib/monolite monolite) +endef + +HOST_MONO_POST_CONFIGURE_HOOKS += HOST_MONO_SETUP_MONOLITE + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/monolite/monolite.hash b/package/monolite/monolite.hash new file mode 100644 index 00000000..b008d42e --- /dev/null +++ b/package/monolite/monolite.hash @@ -0,0 +1,2 @@ +# sha256 locally computed +sha256 0ac314f75ca2bc4455785f12ceb50da89b6dac90162f9f46afbbb988a8752d4b monolite-linux-1A5E0066-58DC-428A-B21C-0AD6CDAE2789-latest.tar.gz diff --git a/package/monolite/monolite.mk b/package/monolite/monolite.mk new file mode 100644 index 00000000..b0042aab --- /dev/null +++ b/package/monolite/monolite.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# monolite +# +################################################################################ + +MONOLITE_VERSION = 1A5E0066-58DC-428A-B21C-0AD6CDAE2789 +MONOLITE_SITE = http://download.mono-project.com/monolite +MONOLITE_SOURCE = monolite-linux-$(MONOLITE_VERSION)-latest.tar.gz +MONOLITE_LICENSE = LGPL-2.0 or commercial + +define HOST_MONOLITE_INSTALL_CMDS + mkdir -p $(HOST_DIR)/lib/monolite-linux/$(MONOLITE_VERSION) + cp -r $(@D)/* $(HOST_DIR)/lib/monolite-linux/$(MONOLITE_VERSION) +endef + +$(eval $(host-generic-package)) diff --git a/package/mosh/Config.in b/package/mosh/Config.in new file mode 100644 index 00000000..5b90358c --- /dev/null +++ b/package/mosh/Config.in @@ -0,0 +1,34 @@ +comment "mosh needs a toolchain w/ C++, threads, dynamic library, wchar, gcc >= 4.8" + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP \ + || BR2_STATIC_LIBS || !BR2_USE_WCHAR \ + || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS + +config BR2_PACKAGE_MOSH + bool "mosh" + depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS + depends on BR2_INSTALL_LIBSTDCPP # protobuf + depends on BR2_TOOLCHAIN_HAS_THREADS # protobuf + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # protobuf + depends on !BR2_STATIC_LIBS # protobuf + depends on BR2_USE_WCHAR + select BR2_PACKAGE_PROTOBUF + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_NETTLE if !BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_ZLIB + # runtime dependency + select BR2_PACKAGE_OPENSSH if !BR2_PACKAGE_DROPBEAR_CLIENT + help + Remote terminal application that supports intermittent + connectivity, allows roaming, and provides speculative local + echo and line editing of user keystrokes. + + Mosh requires that the remote machine has a locale setting + matching the one on the client. + + When using mosh with dropbear on a remote machine, the + client needs mosh with a version above 1.3.0 and the + --no-ssh-pty option needs to be passed when starting the + connection. + + https://mosh.org diff --git a/package/mosh/mosh.hash b/package/mosh/mosh.hash new file mode 100644 index 00000000..baffe1f1 --- /dev/null +++ b/package/mosh/mosh.hash @@ -0,0 +1,5 @@ +# From https://mailman.mit.edu/pipermail/mosh-users/2017-July/000357.html +sha256 da600573dfa827d88ce114e0fed30210689381bbdcff543c931e4d6a2e851216 mosh-1.3.2.tar.gz +# Locally calculcated +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING +sha256 8042495ddc8d99b883335d53552554eccf825fc1f0ba487d0f8e6656baaa8199 COPYING.iOS diff --git a/package/mosh/mosh.mk b/package/mosh/mosh.mk new file mode 100644 index 00000000..f9e33579 --- /dev/null +++ b/package/mosh/mosh.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# mosh +# +################################################################################ + +MOSH_VERSION = 1.3.2 +MOSH_SITE = https://mosh.org +MOSH_DEPENDENCIES = zlib ncurses protobuf host-pkgconf +MOSH_LICENSE = GPL-3.0+ with exception +MOSH_LICENSE_FILES = COPYING COPYING.iOS + +# protobuf needs c++11 (since 3.6.0) +MOSH_CONF_ENV += CXXFLAGS="$(TARGET_CXXFLAGS) -std=c++11" + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +MOSH_CONF_OPTS += --with-crypto-library=openssl +MOSH_DEPENDENCIES += openssl +else +MOSH_CONF_OPTS += --with-crypto-library=nettle +MOSH_DEPENDENCIES += nettle +endif + +# help the detection of the SSP support: mosh configure.ac doesn't do +# a link test, so it doesn't detect when the toolchain doesn't have +# libssp. +ifeq ($(BR2_TOOLCHAIN_HAS_SSP),) +MOSH_CONF_ENV += \ + ax_cv_check_cflags__Werror___fstack_protector_all=no \ + ax_cv_check_cxxflags__Werror___fstack_protector_all=no +endif + +$(eval $(autotools-package)) diff --git a/package/mosquitto/Config.in b/package/mosquitto/Config.in new file mode 100644 index 00000000..b4effa36 --- /dev/null +++ b/package/mosquitto/Config.in @@ -0,0 +1,34 @@ +config BR2_PACKAGE_MOSQUITTO + bool "mosquitto" + help + Eclipse Mosquitto is an open source (EPL/EDL licensed) message + broker that implements the MQTT protocol versions 5.0, 3.1.1 + and 3.1. Mosquitto is lightweight and is suitable for use on + all devices from low power single board computers to full + servers. + + The MQTT protocol provides a lightweight method of carrying + out messaging using a publish/subscribe model. This makes it + suitable for Internet of Things messaging such as with low + power sensors or mobile devices such as phones, + embedded computers or microcontrollers. + + The Mosquitto project also provides a C library for + implementing MQTT clients, and the very popular mosquitto_pub + and mosquitto_sub command line MQTT clients. + + http://mosquitto.org/ + +config BR2_PACKAGE_MOSQUITTO_BROKER + bool "install the mosquitto broker" + default y + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS # include + depends on BR2_PACKAGE_MOSQUITTO + help + Build and install the mosquitto broker onto target. + +comment "mosquitto broker needs a toolchain w/ dynamic library" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS + depends on BR2_PACKAGE_MOSQUITTO diff --git a/package/mosquitto/S50mosquitto b/package/mosquitto/S50mosquitto new file mode 100644 index 00000000..5241a071 --- /dev/null +++ b/package/mosquitto/S50mosquitto @@ -0,0 +1,35 @@ +#!/bin/sh + +start() { + printf "Starting mosquitto: " + start-stop-daemon -S -q -m -b -p /var/run/mosquitto.pid \ + --exec /usr/sbin/mosquitto \ + -- -c /etc/mosquitto/mosquitto.conf + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +stop() { + printf "Stopping mosquitto: " + start-stop-daemon -K -q -p /var/run/mosquitto.pid + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/mosquitto/mosquitto.hash b/package/mosquitto/mosquitto.hash new file mode 100644 index 00000000..baa2a90c --- /dev/null +++ b/package/mosquitto/mosquitto.hash @@ -0,0 +1,8 @@ +# Locally calculated after checking gpg signature +# from https://mosquitto.org/files/source/mosquitto-2.0.11.tar.gz.asc +sha256 7b36a7198bce85cf31b132f5c6ee36dcf5dadf86fb768501eb1e11ce95d4f78a mosquitto-2.0.11.tar.gz + +# License files +sha256 d3c4ccace4e5d3cc89d34cf2a0bc85b8596bfc0a32b815d0d77f9b7c41b5350c LICENSE.txt +sha256 0becf16567beb77fa252b7664631dd177c8f9a1889e48995b45379c7130e5303 epl-v20 +sha256 e8cf7d54ea46c19aba793983889b7f7425e1ebfcaaccec764a7db091646e203c edl-v10 diff --git a/package/mosquitto/mosquitto.mk b/package/mosquitto/mosquitto.mk new file mode 100644 index 00000000..52f9c987 --- /dev/null +++ b/package/mosquitto/mosquitto.mk @@ -0,0 +1,131 @@ +################################################################################ +# +# mosquitto +# +################################################################################ + +MOSQUITTO_VERSION = 2.0.11 +MOSQUITTO_SITE = https://mosquitto.org/files/source +MOSQUITTO_LICENSE = EPL-2.0 or EDLv1.0 +MOSQUITTO_LICENSE_FILES = LICENSE.txt epl-v20 edl-v10 +MOSQUITTO_CPE_ID_VENDOR = eclipse +MOSQUITTO_INSTALL_STAGING = YES + +MOSQUITTO_MAKE_OPTS = \ + CLIENT_STATIC_LDADD="$(MOSQUITTO_STATIC_LIBS)" \ + UNAME=Linux \ + STRIP=true \ + prefix=/usr \ + WITH_WRAP=no \ + WITH_DOCS=no + +ifeq ($(BR2_SHARED_LIBS),y) +MOSQUITTO_MAKE_OPTS += WITH_STATIC_LIBRARIES=no +else +MOSQUITTO_MAKE_OPTS += WITH_STATIC_LIBRARIES=yes +endif + +ifeq ($(BR2_STATIC_LIBS),y) +MOSQUITTO_MAKE_OPTS += WITH_SHARED_LIBRARIES=no +else +MOSQUITTO_MAKE_OPTS += WITH_SHARED_LIBRARIES=yes +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +MOSQUITTO_MAKE_OPTS += WITH_SYSTEMD=yes +MOSQUITTO_DEPENDENCIES += systemd +endif + +# adns uses getaddrinfo_a +ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),y) +MOSQUITTO_MAKE_OPTS += WITH_ADNS=yes +else +MOSQUITTO_MAKE_OPTS += WITH_ADNS=no +endif + +# threaded API uses pthread_setname_np +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS_NPTL),y) +MOSQUITTO_MAKE_OPTS += WITH_THREADING=yes +else +MOSQUITTO_MAKE_OPTS += WITH_THREADING=no +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +MOSQUITTO_DEPENDENCIES += host-pkgconf openssl +MOSQUITTO_MAKE_OPTS += WITH_TLS=yes +MOSQUITTO_STATIC_LIBS += `$(PKG_CONFIG_HOST_BINARY) --libs openssl` +else +MOSQUITTO_MAKE_OPTS += WITH_TLS=no +endif + +ifeq ($(BR2_PACKAGE_CJSON),y) +MOSQUITTO_DEPENDENCIES += cjson +MOSQUITTO_MAKE_OPTS += WITH_CJSON=yes +MOSQUITTO_STATIC_LIBS += -lcjson +else +MOSQUITTO_MAKE_OPTS += WITH_CJSON=no +endif + +ifeq ($(BR2_PACKAGE_C_ARES),y) +MOSQUITTO_DEPENDENCIES += c-ares +MOSQUITTO_MAKE_OPTS += WITH_SRV=yes +else +MOSQUITTO_MAKE_OPTS += WITH_SRV=no +endif + +ifeq ($(BR2_PACKAGE_LIBWEBSOCKETS),y) +MOSQUITTO_DEPENDENCIES += libwebsockets +MOSQUITTO_MAKE_OPTS += WITH_WEBSOCKETS=yes +else +MOSQUITTO_MAKE_OPTS += WITH_WEBSOCKETS=no +endif + +# C++ support is only used to create a wrapper library +ifneq ($(BR2_INSTALL_LIBSTDCPP),y) +define MOSQUITTO_DISABLE_CPP + $(SED) '/-C cpp/d' $(@D)/lib/Makefile +endef + +MOSQUITTO_POST_PATCH_HOOKS += MOSQUITTO_DISABLE_CPP +endif + +MOSQUITTO_MAKE_DIRS = lib client +ifeq ($(BR2_PACKAGE_MOSQUITTO_BROKER),y) +MOSQUITTO_MAKE_DIRS += src +endif + +define MOSQUITTO_BUILD_CMDS + $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) DIRS="$(MOSQUITTO_MAKE_DIRS)" \ + $(MOSQUITTO_MAKE_OPTS) +endef + +define MOSQUITTO_INSTALL_STAGING_CMDS + $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) DIRS="$(MOSQUITTO_MAKE_DIRS)" \ + $(MOSQUITTO_MAKE_OPTS) DESTDIR=$(STAGING_DIR) install +endef + +define MOSQUITTO_INSTALL_TARGET_CMDS + $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) DIRS="$(MOSQUITTO_MAKE_DIRS)" \ + $(MOSQUITTO_MAKE_OPTS) DESTDIR=$(TARGET_DIR) install + rm -f $(TARGET_DIR)/etc/mosquitto/*.example + $(INSTALL) -D -m 0644 $(@D)/mosquitto.conf \ + $(TARGET_DIR)/etc/mosquitto/mosquitto.conf +endef + +ifeq ($(BR2_PACKAGE_MOSQUITTO_BROKER),y) +define MOSQUITTO_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/mosquitto/S50mosquitto \ + $(TARGET_DIR)/etc/init.d/S50mosquitto +endef + +define MOSQUITTO_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 $(@D)/service/systemd/mosquitto.service.notify \ + $(TARGET_DIR)/usr/lib/systemd/system/mosquitto.service +endef + +define MOSQUITTO_USERS + mosquitto -1 nobody -1 * - - - Mosquitto user +endef +endif + +$(eval $(generic-package)) diff --git a/package/most/Config.in b/package/most/Config.in new file mode 100644 index 00000000..194d2bd3 --- /dev/null +++ b/package/most/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_MOST + bool "most" + depends on BR2_USE_MMU # slang + select BR2_PACKAGE_SLANG + help + most is a powerful pager, including features like multi + document support, hex view and unpack on-the-fly. + + Note: this program depends on the slang library which is + rather large to be used just for this pager. + + https://www.jedsoft.org/most/ diff --git a/package/most/most.hash b/package/most/most.hash new file mode 100644 index 00000000..151caadc --- /dev/null +++ b/package/most/most.hash @@ -0,0 +1,6 @@ +# From https://www.jedsoft.org/releases/most/ +sha1 db811669a6b22c15478c957b439b5e4483ce1c95 most-5.1.0.tar.gz +# Locally computed +sha256 db805d1ffad3e85890802061ac8c90e3c89e25afb184a794e03715a3ed190501 most-5.1.0.tar.gz +sha256 1b2a567f289f66a143c56353e7b3d4fa5862514a5e3c5cfdf8b02ee5e5aaa953 COPYING +sha256 47ad1c3f9b94d6ec42d9bee6c5df980c5c2daa5b9d22113545ae6a3f21ca2f52 COPYRIGHT diff --git a/package/most/most.mk b/package/most/most.mk new file mode 100644 index 00000000..28d82cdd --- /dev/null +++ b/package/most/most.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# most +# +################################################################################ + +MOST_SITE = http://www.jedsoft.org/releases/most +MOST_VERSION = 5.1.0 +MOST_LICENSE = GPL-2.0+ +MOST_LICENSE_FILES = COPYING COPYRIGHT +MOST_DEPENDENCIES = slang + +MOST_CONF_OPTS = --with-slang=$(STAGING_DIR)/usr +MOST_MAKE = $(MAKE1) + +define MOST_REMOVE_LOCAL_SLANG_CHECK + $(SED) 's/ slangversion / /g' $(@D)/src/Makefile.in +endef +MOST_POST_PATCH_HOOKS += MOST_REMOVE_LOCAL_SLANG_CHECK + +define MOST_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/src/objs/most $(TARGET_DIR)/usr/bin/most +endef + +$(eval $(autotools-package)) diff --git a/package/motion/0001-configure.ac-remove-po-Makefile.in.patch b/package/motion/0001-configure.ac-remove-po-Makefile.in.patch new file mode 100644 index 00000000..9b514baf --- /dev/null +++ b/package/motion/0001-configure.ac-remove-po-Makefile.in.patch @@ -0,0 +1,29 @@ +From 0e05d4116678de3a7d913177a8fc63f10e58ad24 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 18 Jan 2020 00:00:21 +0100 +Subject: [PATCH] configure.ac: remove po/Makefile.in + +The file po/Makefile.in is automatically added to AC_OUTPUT while using +gettexize + +Signed-off-by: Fabrice Fontaine +[Upstream status: not upstreamable] +--- + configure.ac | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 3876adb..221dacf 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -471,7 +471,6 @@ LDFLAGS="$TEMP_LDFLAGS" + AC_CONFIG_FILES([ + Makefile + src/Makefile +- po/Makefile.in + man/Makefile + data/camera1-dist.conf + data/camera2-dist.conf +-- +2.24.1 + diff --git a/package/motion/Config.in b/package/motion/Config.in new file mode 100644 index 00000000..7a2e5dbe --- /dev/null +++ b/package/motion/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_MOTION + bool "motion" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_JPEG + select BR2_PACKAGE_LIBMICROHTTPD + help + Motion is a program that monitors the video signal from + cameras. It is able to detect if a significant part of + the picture has changed; in other words, it can detect motion. + + libv4l has to be selected to be able to use a local camera. + + https://motion-project.github.io + +comment "motion needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/motion/S99motion b/package/motion/S99motion new file mode 100644 index 00000000..36bfc238 --- /dev/null +++ b/package/motion/S99motion @@ -0,0 +1,37 @@ +#!/bin/sh + +NAME=motion +PIDFILE=/var/run/$NAME.pid +DAEMON=/usr/bin/$NAME + +start() { + printf "Starting $NAME: " + start-stop-daemon -S -q -m -b -p $PIDFILE --exec $DAEMON + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +stop() { + printf "Stopping $NAME: " + start-stop-daemon -K -q -p $PIDFILE + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac + +exit $? diff --git a/package/motion/motion.hash b/package/motion/motion.hash new file mode 100644 index 00000000..96ab1c43 --- /dev/null +++ b/package/motion/motion.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 dafa4264b2d8e4778f8be5871f09b6c0ec710d5a836182c583469c18db944d70 motion-4.3.2.tar.gz +sha256 91df39d1816bfb17a4dda2d3d2c83b1f6f2d38d53e53e41e8f97ad5ac46a0cad doc/COPYING diff --git a/package/motion/motion.mk b/package/motion/motion.mk new file mode 100644 index 00000000..29b70fd8 --- /dev/null +++ b/package/motion/motion.mk @@ -0,0 +1,71 @@ +################################################################################ +# +# motion +# +################################################################################ + +MOTION_VERSION = 4.3.2 +MOTION_SITE = $(call github,Motion-Project,motion,release-$(MOTION_VERSION)) +MOTION_LICENSE = GPL-2.0 +MOTION_LICENSE_FILES = doc/COPYING +MOTION_DEPENDENCIES = host-pkgconf jpeg libmicrohttpd $(TARGET_NLS_DEPENDENCIES) +# From git +MOTION_AUTORECONF = YES +MOTION_GETTEXTIZE = YES + +MOTION_CONF_OPTS += --without-optimizecpu + +ifeq ($(BR2_PACKAGE_FFMPEG_SWSCALE),y) +MOTION_DEPENDENCIES += ffmpeg +MOTION_CONF_OPTS += --with-ffmpeg +else +MOTION_CONF_OPTS += --without-ffmpeg +endif + +ifeq ($(BR2_PACKAGE_MYSQL),y) +MOTION_DEPENDENCIES += mysql +MOTION_CONF_OPTS += --with-mysql +else +MOTION_CONF_OPTS += --without-mysql +endif + +ifeq ($(BR2_PACKAGE_POSTGRESQL),y) +MOTION_DEPENDENCIES += postgresql +MOTION_CONF_OPTS += --with-pgsql +else +MOTION_CONF_OPTS += --without-pgsql +endif + +ifeq ($(BR2_PACKAGE_SQLITE),y) +MOTION_DEPENDENCIES += sqlite +MOTION_CONF_OPTS += --with-sqlite3 +else +MOTION_CONF_OPTS += --without-sqlite3 +endif + +ifeq ($(BR2_PACKAGE_WEBP_MUX),y) +MOTION_DEPENDENCIES += webp +MOTION_CONF_OPTS += --with-webp +else +MOTION_CONF_OPTS += --without-webp +endif + +# Do not use default install target as it installs many unneeded files and +# directories: docs, examples and init scripts +define MOTION_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0644 $(@D)/data/motion-dist.conf \ + $(TARGET_DIR)/etc/motion/motion.conf + $(INSTALL) -D -m 0755 $(@D)/src/motion $(TARGET_DIR)/usr/bin/motion +endef + +define MOTION_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/motion/S99motion \ + $(TARGET_DIR)/etc/init.d/S99motion +endef + +define MOTION_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/motion/motion.service \ + $(TARGET_DIR)/usr/lib/systemd/system/motion.service +endef + +$(eval $(autotools-package)) diff --git a/package/motion/motion.service b/package/motion/motion.service new file mode 100644 index 00000000..c788cd64 --- /dev/null +++ b/package/motion/motion.service @@ -0,0 +1,10 @@ +[Unit] +Description=Motion camera monitoring system +After=network.target + +[Service] +ExecStart=/usr/bin/motion +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/package/mp4v2/0001-Fix-GCC7-build.patch b/package/mp4v2/0001-Fix-GCC7-build.patch new file mode 100644 index 00000000..4e39be4a --- /dev/null +++ b/package/mp4v2/0001-Fix-GCC7-build.patch @@ -0,0 +1,33 @@ +From 855e9674232808ff3be7191b697dfb56917db21f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?S=C3=A9rgio=20M=2E=20Basto?= +Date: Wed, 8 Feb 2017 00:56:32 +0000 +Subject: [PATCH] Fix GCC7 build + +if (*pSlash != '\0') { + +As it stands the body of that if will always execute and when there are +no encoding parameters ppEncodingParams will be returned as a pointer to +an empty string rather than as a null pointer + +Signed-off-by: Peter Korsgaard +[Upstream status: https://github.com/TechSmith/mp4v2/pull/36] +--- + src/rtphint.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/rtphint.cpp b/src/rtphint.cpp +index e07309d..1eb01f5 100644 +--- a/src/rtphint.cpp ++++ b/src/rtphint.cpp +@@ -339,7 +339,7 @@ void MP4RtpHintTrack::GetPayload( + pSlash = strchr(pSlash, '/'); + if (pSlash != NULL) { + pSlash++; +- if (pSlash != '\0') { ++ if (*pSlash != '\0') { + length = (uint32_t)strlen(pRtpMap) - (pSlash - pRtpMap); + *ppEncodingParams = (char *)MP4Calloc(length + 1); + strncpy(*ppEncodingParams, pSlash, length); +-- +2.11.0 + diff --git a/package/mp4v2/0002-src-mp4track.cpp-replace-nullptr-by-NULL.patch b/package/mp4v2/0002-src-mp4track.cpp-replace-nullptr-by-NULL.patch new file mode 100644 index 00000000..72bae463 --- /dev/null +++ b/package/mp4v2/0002-src-mp4track.cpp-replace-nullptr-by-NULL.patch @@ -0,0 +1,50 @@ +From 78cf76b5d661e37e958163c37c0ad95940c09591 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 30 May 2020 11:42:19 +0200 +Subject: [PATCH] src/mp4track.cpp: replace nullptr by NULL + +Commit 15ec11166ba9ee7b77631d0d9234522f656cfd66 added code that uses +nullptr. nullptr is C++11, it will break the build with gcc < 5. + +Semantically, NULL and nullptr are different, so should not be mixed. +In this situaiton, m_File.FindAtom() indeed does not return nullptr, +but NULL (on error, that is). + +Switch back to comparing against NULL. + +Fixes: + - http://autobuild.buildroot.org/results/14937c96a82fb3d10e5d83bd7b2905b846fb09f9 + +Signed-off-by: Fabrice Fontaine +[Upstream status: not sent yet] +--- + src/mp4track.cpp | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/mp4track.cpp b/src/mp4track.cpp +index 4b8fc9d..42489eb 100644 +--- a/src/mp4track.cpp ++++ b/src/mp4track.cpp +@@ -908,16 +908,16 @@ File* MP4Track::GetSampleFile( MP4SampleId sampleId ) + MP4FtypAtom *pFtypAtom = reinterpret_cast( m_File.FindAtom( "ftyp" ) ); + + // MOV spec does not require "ftyp" atom... +- if ( pFtypAtom == nullptr ) ++ if ( pFtypAtom == NULL ) + { +- return nullptr; ++ return NULL; + } + else + { + // ... but most often it is present with a "qt " value + const char *majorBrand = pFtypAtom->majorBrand.GetValue(); + if ( ::strcmp( pFtypAtom->majorBrand.GetValue(), "qt " ) == 0 ) +- return nullptr; ++ return NULL; + } + throw new Exception( "invalid stsd entry", __FILE__, __LINE__, __FUNCTION__ ); + } +-- +2.26.2 + diff --git a/package/mp4v2/0003-Static-cast-to-unsigned-int-for-cases.patch b/package/mp4v2/0003-Static-cast-to-unsigned-int-for-cases.patch new file mode 100644 index 00000000..6c9b13be --- /dev/null +++ b/package/mp4v2/0003-Static-cast-to-unsigned-int-for-cases.patch @@ -0,0 +1,99 @@ +From a5ca35b044bbf13c0b16f0066bf24646604bb218 Mon Sep 17 00:00:00 2001 +From: "Jason A. Donenfeld" +Date: Thu, 6 Aug 2020 15:22:04 +0200 +Subject: [PATCH] Static cast to unsigned int for cases + +Signed-off-by: Jason A. Donenfeld +[Retrieved from: +https://gitweb.gentoo.org/repo/gentoo.git/tree/media-libs/libmp4v2/files/libmp4v2-2.0.0-unsigned-int-cast.patch] +Signed-off-by: Fabrice Fontaine +--- + libutil/Utility.cpp | 2 +- + util/mp4art.cpp | 2 +- + util/mp4chaps.cpp | 2 +- + util/mp4file.cpp | 2 +- + util/mp4subtitle.cpp | 2 +- + util/mp4track.cpp | 2 +- + 6 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/libutil/Utility.cpp b/libutil/Utility.cpp +index 76cdd12..d6739d4 100644 +--- a/libutil/Utility.cpp ++++ b/libutil/Utility.cpp +@@ -493,7 +493,7 @@ Utility::process_impl() + if( codes.find( code ) == codes.end() ) + continue; + +- switch( code ) { ++ switch( static_cast( code ) ) { + case 'z': + _optimize = true; + break; +diff --git a/util/mp4art.cpp b/util/mp4art.cpp +index add935e..6e7f531 100644 +--- a/util/mp4art.cpp ++++ b/util/mp4art.cpp +@@ -376,7 +376,7 @@ ArtUtility::utility_option( int code, bool& handled ) + { + handled = true; + +- switch( code ) { ++ switch( static_cast ( code ) ) { + case LC_ART_ANY: + _artFilter = numeric_limits::max(); + break; +diff --git a/util/mp4chaps.cpp b/util/mp4chaps.cpp +index 98400f8..ccc8b70 100644 +--- a/util/mp4chaps.cpp ++++ b/util/mp4chaps.cpp +@@ -632,7 +632,7 @@ ChapterUtility::utility_option( int code, bool& handled ) + { + handled = true; + +- switch( code ) { ++ switch( static_cast ( code ) ) { + case 'A': + case LC_CHPT_ANY: + _ChapterType = MP4ChapterTypeAny; +diff --git a/util/mp4file.cpp b/util/mp4file.cpp +index c27844b..b127cd1 100644 +--- a/util/mp4file.cpp ++++ b/util/mp4file.cpp +@@ -189,7 +189,7 @@ FileUtility::utility_option( int code, bool& handled ) + { + handled = true; + +- switch( code ) { ++ switch( static_cast( code ) ) { + case LC_LIST: + _action = &FileUtility::actionList; + break; +diff --git a/util/mp4subtitle.cpp b/util/mp4subtitle.cpp +index 7462153..19d977d 100644 +--- a/util/mp4subtitle.cpp ++++ b/util/mp4subtitle.cpp +@@ -164,7 +164,7 @@ SubtitleUtility::utility_option( int code, bool& handled ) + { + handled = true; + +- switch( code ) { ++ switch( static_cast( code ) ) { + case LC_LIST: + _action = &SubtitleUtility::actionList; + break; +diff --git a/util/mp4track.cpp b/util/mp4track.cpp +index d550506..cd63d7e 100644 +--- a/util/mp4track.cpp ++++ b/util/mp4track.cpp +@@ -788,7 +788,7 @@ TrackUtility::utility_option( int code, bool& handled ) + { + handled = true; + +- switch( code ) { ++ switch( static_cast( code ) ) { + case LC_TRACK_WILDCARD: + _trackMode = TM_WILDCARD; + break; +-- +2.28.0 + diff --git a/package/mp4v2/Config.in b/package/mp4v2/Config.in new file mode 100644 index 00000000..172d1baa --- /dev/null +++ b/package/mp4v2/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_MP4V2 + bool "mp4v2" + depends on BR2_INSTALL_LIBSTDCPP + help + The MP4v2 library provides functions to read, create, and + modify mp4 files. + + https://github.com/TechSmith/mp4v2/ + +if BR2_PACKAGE_MP4V2 + +config BR2_PACKAGE_MP4V2_UTIL + bool "Install mp4 command line tools" + help + Enable to install the mp4 command line tools mp4art, + mp4chaps, mp4extract, mp4info, mp4subtitle, mp4tags, and + mp4trackdump. + +endif + +comment "mp4v2 needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/mp4v2/mp4v2.hash b/package/mp4v2/mp4v2.hash new file mode 100644 index 00000000..85fce493 --- /dev/null +++ b/package/mp4v2/mp4v2.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 e3ad6c2dc451b0875dbe34bfe7f51f4fe278b391434c886083e6d3ecd5fa08c2 mp4v2-4.1.3.tar.gz +sha256 15e38684c940176e2fc76331a2299d2ab5115ac997078f768ef31b896af69fc5 COPYING diff --git a/package/mp4v2/mp4v2.mk b/package/mp4v2/mp4v2.mk new file mode 100644 index 00000000..478d10d4 --- /dev/null +++ b/package/mp4v2/mp4v2.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# mp4v2 +# +################################################################################ + +MP4V2_VERSION = 4.1.3 +MP4V2_SITE = \ + $(call github,TechSmith,mp4v2,Release-ThirdParty-MP4v2-$(MP4V2_VERSION)) +MP4V2_INSTALL_STAGING = YES +MP4V2_LICENSE = MPL-1.1 +MP4V2_LICENSE_FILES = COPYING + +# help2man expects to be able to run utilities on the build machine to +# grab --help output which doesn't work when cross compiling, so +# disable it +MP4V2_CONF_ENV = ac_cv_prog_FOUND_HELP2MAN=no + +ifeq ($(BR2_PACKAGE_MP4V2_UTIL),y) +MP4V2_CONF_OPTS += --enable-util +else +MP4V2_CONF_OPTS += --disable-util +endif + +$(eval $(autotools-package)) diff --git a/package/mpc/Config.in b/package/mpc/Config.in new file mode 100644 index 00000000..83770133 --- /dev/null +++ b/package/mpc/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_MPC + bool "mpc" + select BR2_PACKAGE_MPFR + select BR2_PACKAGE_GMP + help + Mpc is a C library for the arithmetic of complex numbers with + arbitrarily high precision and correct rounding of the result. + It is built upon and follows the same principles as Mpfr. + + http://www.multiprecision.org/ diff --git a/package/mpc/mpc.hash b/package/mpc/mpc.hash new file mode 100644 index 00000000..fa98f673 --- /dev/null +++ b/package/mpc/mpc.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 6985c538143c1208dcb1ac42cedad6ff52e267b47e5f970183a3e75125b43c2e mpc-1.1.0.tar.gz +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 COPYING.LESSER diff --git a/package/mpc/mpc.mk b/package/mpc/mpc.mk new file mode 100644 index 00000000..0e84bc27 --- /dev/null +++ b/package/mpc/mpc.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# mpc +# +################################################################################ + +MPC_VERSION = 1.1.0 +MPC_SITE = $(BR2_GNU_MIRROR)/mpc +MPC_LICENSE = LGPL-3.0+ +MPC_LICENSE_FILES = COPYING.LESSER +MPC_INSTALL_STAGING = YES +MPC_DEPENDENCIES = gmp mpfr +HOST_MPC_DEPENDENCIES = host-gmp host-mpfr + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/mpd-mpc/Config.in b/package/mpd-mpc/Config.in new file mode 100644 index 00000000..1debc839 --- /dev/null +++ b/package/mpd-mpc/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_MPD_MPC + bool "mpd-mpc" + select BR2_PACKAGE_LIBMPDCLIENT + help + A minimalist command line interface to MPD. + + http://www.musicpd.org/clients/mpc/ diff --git a/package/mpd-mpc/mpd-mpc.hash b/package/mpd-mpc/mpd-mpc.hash new file mode 100644 index 00000000..9c55bcf0 --- /dev/null +++ b/package/mpd-mpc/mpd-mpc.hash @@ -0,0 +1,3 @@ +# Locally calculated after checking pgp signature +sha256 4f40ccbe18f5095437283cfc525a97815e983cbfd3a29e48ff610fa4f1bf1296 mpc-0.33.tar.xz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/mpd-mpc/mpd-mpc.mk b/package/mpd-mpc/mpd-mpc.mk new file mode 100644 index 00000000..6eebc63c --- /dev/null +++ b/package/mpd-mpc/mpd-mpc.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# mpd-mpc +# +################################################################################ + +MPD_MPC_VERSION_MAJOR = 0 +MPD_MPC_VERSION = $(MPD_MPC_VERSION_MAJOR).33 +MPD_MPC_SITE = http://www.musicpd.org/download/mpc/$(MPD_MPC_VERSION_MAJOR) +MPD_MPC_SOURCE = mpc-$(MPD_MPC_VERSION).tar.xz +MPD_MPC_LICENSE = GPL-2.0+ +MPD_MPC_LICENSE_FILES = COPYING +MPD_MPC_DEPENDENCIES = host-pkgconf libmpdclient + +$(eval $(meson-package)) diff --git a/package/mpd/0001-src-event-meson.build-add-atomic-dependency-for-spar.patch b/package/mpd/0001-src-event-meson.build-add-atomic-dependency-for-spar.patch new file mode 100644 index 00000000..81bd981d --- /dev/null +++ b/package/mpd/0001-src-event-meson.build-add-atomic-dependency-for-spar.patch @@ -0,0 +1,39 @@ +From cb190801706da046823c74f89472af83ff947ce1 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 17 Aug 2019 22:25:06 +0200 +Subject: [PATCH] src/event/meson.build: add atomic dependency for sparc + +Linking with libatomic is needed on sparc otherwise build fails on: +/usr/lfs/v0/rc-buildroot-test/scripts/instance-0/output/host/opt/ext-toolchain/bin/../lib/gcc/sparc-buildroot-linux-uclibc/7.4.0/../../../../sparc-buildroot-linux-uclibc/bin/ld: src/event/libevent.a(MaskMonitor.cxx.o): undefined reference to symbol '__atomic_fetch_or_4@@LIBATOMIC_1.0' + +Fixes: + - http://autobuild.buildroot.org/results/7a9fdb7e323892fb6ed85a2441054303e889c089 + +Signed-off-by: Fabrice Fontaine +[Upstream status: not sent (the same kind of patch for ncmpc was +refused: https://github.com/MusicPlayerDaemon/ncmpc/pull/45)] +--- + src/event/meson.build | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/event/meson.build b/src/event/meson.build +index bc13bbcd2..88370c03a 100644 +--- a/src/event/meson.build ++++ b/src/event/meson.build +@@ -21,9 +21,13 @@ event = static_library( + ], + ) + ++# Needed on sparc ++atomic_dep = c_compiler.find_library('atomic', required: false) ++ + event_dep = declare_dependency( + link_with: event, + dependencies: [ ++ atomic_dep, + thread_dep, + system_dep, + boost_dep, +-- +2.20.1 + diff --git a/package/mpd/Config.in b/package/mpd/Config.in new file mode 100644 index 00000000..7a259755 --- /dev/null +++ b/package/mpd/Config.in @@ -0,0 +1,407 @@ +menuconfig BR2_PACKAGE_MPD + bool "mpd" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR # flac + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork + depends on BR2_TOOLCHAIN_HAS_ATOMIC + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_8 # C++17 + depends on BR2_HOST_GCC_AT_LEAST_8 # C++17 + select BR2_PACKAGE_BOOST + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + MPD is a flexible, powerful, server-side application + for playing music. Through plugins and libraries + it can play a variety of sound files while being + controlled by its network protocol. + + http://www.musicpd.org + +if BR2_PACKAGE_MPD + +comment "Archive plugins" + +config BR2_PACKAGE_MPD_BZIP2 + bool "bzip2" + select BR2_PACKAGE_BZIP2 + help + Enable bzip2 archive support. + +config BR2_PACKAGE_MPD_SQLITE + bool "sqlite" + select BR2_PACKAGE_SQLITE + help + Enable sqlite database support. + If you don't use sqlite it will use an ASCII database. + +config BR2_PACKAGE_MPD_ZZIP + bool "zzip" + select BR2_PACKAGE_ZZIPLIB + help + Enable ZIP archive support. + +comment "Commercial services" + +config BR2_PACKAGE_MPD_QOBUZ + bool "qobuz" + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS + select BR2_PACKAGE_MPD_CURL + select BR2_PACKAGE_LIBGCRYPT + select BR2_PACKAGE_YAJL + help + Play songs from the commercial streaming service Qobuz. + +config BR2_PACKAGE_MPD_SOUNDCLOUD + bool "soundcloud" + select BR2_PACKAGE_MPD_CURL + select BR2_PACKAGE_YAJL + help + Enable soundcloud.com playlist support. + +config BR2_PACKAGE_MPD_TIDAL + bool "tidal" + select BR2_PACKAGE_MPD_CURL + select BR2_PACKAGE_YAJL + help + Play songs from the commercial streaming service TIDAL. + +comment "Converter plugins" + +config BR2_PACKAGE_MPD_LIBSAMPLERATE + bool "libsamplerate" + select BR2_PACKAGE_LIBSAMPLERATE + help + Enable libsamplerate input support. + Select this for software sample rate conversion. + +config BR2_PACKAGE_MPD_LIBSOXR + bool "libsoxr" + select BR2_PACKAGE_LIBSOXR + help + Enable libsoxr resampler support. + The SoX Resampler library performs software sample-rate + conversion. + +comment "Decoder plugins" + +config BR2_PACKAGE_MPD_DSD + bool "dsd" + help + Enable Digital Speech Decoder (DSD) support to play audio + files encoded in a digital speech format. + +config BR2_PACKAGE_MPD_FAAD2 + bool "faad2" + select BR2_PACKAGE_FAAD2 + help + Enable faad2 input support. + Select this if you want to play back MP4/AAC files. + +config BR2_PACKAGE_MPD_FFMPEG + bool "ffmpeg" + depends on BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS + select BR2_PACKAGE_FFMPEG + help + Enable ffmpeg input support. + Select this if you want to play back files supported by + ffmpeg. + +config BR2_PACKAGE_MPD_FLAC + bool "flac" + select BR2_PACKAGE_FLAC + help + Enable flac input/streaming support. + Select this if you want to play back FLAC files. + +config BR2_PACKAGE_MPD_FLUIDSYNTH + bool "fluidsynth" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_FLUIDSYNTH + help + Enable fluidsynth MIDI decoder support. + +comment "fluidsynth support needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +config BR2_PACKAGE_MPD_LIBSNDFILE + bool "libsndfile" + select BR2_PACKAGE_LIBSNDFILE + help + Enable libsndfile input/streaming support. + Select this if you want to play back WAV files. + +config BR2_PACKAGE_MPD_MAD + bool "mad" + default y + select BR2_PACKAGE_LIBID3TAG + select BR2_PACKAGE_LIBMAD + help + Enable mad input support. + Select this if you want to play back MP3 files. + +config BR2_PACKAGE_MPD_MODPLUG + bool "modplug" + select BR2_PACKAGE_LIBMODPLUG + help + Enable Modplug decoder support. + +config BR2_PACKAGE_MPD_MPG123 + bool "mpg123" + select BR2_PACKAGE_LIBID3TAG + select BR2_PACKAGE_MPG123 + help + Enable mpg123 input support. + Select this if you want to play back MP3 files. + +config BR2_PACKAGE_MPD_MUSEPACK + bool "musepack" + select BR2_PACKAGE_LIBCUEFILE + select BR2_PACKAGE_LIBREPLAYGAIN + select BR2_PACKAGE_MUSEPACK + help + Enable musepack input support. + Select this if you want to play back MPC files. + +config BR2_PACKAGE_MPD_OPUS + bool "opus" + select BR2_PACKAGE_OPUS + select BR2_PACKAGE_LIBOGG + help + Enable opus input support. + Select this if you want to play back OPUS encoded files. + +config BR2_PACKAGE_MPD_SIDPLAY + bool "sidplay" + select BR2_PACKAGE_LIBSIDPLAY2 + help + Enable C64 SID support. + +config BR2_PACKAGE_MPD_TREMOR + bool "tremor" + depends on !BR2_PACKAGE_MPD_VORBIS + select BR2_PACKAGE_LIBOGG + select BR2_PACKAGE_TREMOR + help + Enable vorbis input support. + Select this if you want to play back OGG files on softfloat + targets. + +config BR2_PACKAGE_MPD_VORBIS + bool "vorbis" + select BR2_PACKAGE_LIBOGG + select BR2_PACKAGE_LIBVORBIS + help + Enable vorbis input/streaming support. + Select this if you want to play back OGG files on hardfloat + targets. + +config BR2_PACKAGE_MPD_WAVPACK + bool "wavpack" + select BR2_PACKAGE_WAVPACK + help + Enable wavpack input support. + Select this if you want to play back WV files. + +comment "Encoder plugins" + +config BR2_PACKAGE_MPD_LAME + bool "lame" + select BR2_PACKAGE_LAME + help + Enable lame (mp3) encoding support. + +config BR2_PACKAGE_MPD_TWOLAME + bool "twolame" + select BR2_PACKAGE_TWOLAME + help + Enable TwoLAME mp2 encoding. + +comment "Input plugins" + +config BR2_PACKAGE_MPD_CDIO_PARANOIA + bool "cdio-paranoia" + select BR2_PACKAGE_LIBCDIO_PARANOIA + help + Enable cdio-paranoia support. + +config BR2_PACKAGE_MPD_CURL + bool "curl" + select BR2_PACKAGE_LIBCURL + help + Enable curl streaming (http) support. + +config BR2_PACKAGE_MPD_LIBMMS + bool "mms" + select BR2_PACKAGE_LIBMMS + help + Enable MMS support. + +config BR2_PACKAGE_MPD_LIBNFS + bool "nfs" + # libnfs -> libtirpc + depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC || BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_LIBNFS + help + Enable Network File System (NFS) support. + +comment "nfs support needs a toolchain w/ threads support" + depends on !(BR2_TOOLCHAIN_HAS_THREADS || BR2_TOOLCHAIN_HAS_NATIVE_RPC) + +comment "samba support needs a glibc toolchain w/ dynamic library, RPC" + depends on !BR2_nios2 + depends on !BR2_TOOLCHAIN_USES_GLIBC || BR2_STATIC_LIBS || \ + !BR2_TOOLCHAIN_HAS_NATIVE_RPC + +config BR2_PACKAGE_MPD_LIBSMBCLIENT + bool "samba" + depends on !BR2_nios2 # samba + depends on BR2_TOOLCHAIN_USES_GLIBC + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + select BR2_PACKAGE_SAMBA4 + help + Enable Samba support. + +comment "Output plugins" + +config BR2_PACKAGE_MPD_ALSA + bool "alsa" + default y + select BR2_PACKAGE_ALSA_LIB + select BR2_PACKAGE_ALSA_LIB_PCM + select BR2_PACKAGE_ALSA_LIB_MIXER + help + Enable alsa output support. + +config BR2_PACKAGE_MPD_AO + bool "ao" + select BR2_PACKAGE_LIBAO + help + Enable libao output support. + +config BR2_PACKAGE_MPD_HTTPD_OUTPUT + bool "httpd output" + help + Enable httpd output support. + +config BR2_PACKAGE_MPD_JACK2 + bool "jack2" + depends on !BR2_STATIC_LIBS # jack2 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + select BR2_PACKAGE_JACK2 + help + Enable jack output support. + +comment "jack support needs a toolchain w/ dynamic library" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_STATIC_LIBS + +config BR2_PACKAGE_MPD_OPENAL + bool "openal" + depends on BR2_PACKAGE_OPENAL_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + select BR2_PACKAGE_OPENAL + help + Enable OpenAL output support. + +comment "openal support needs a toolchain w/ NPTL" + depends on BR2_PACKAGE_OPENAL_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL + +config BR2_PACKAGE_MPD_OSS + bool "oss" + help + Enable OSS (Open Sound System) output support. + +config BR2_PACKAGE_MPD_PULSEAUDIO + bool "pulseaudio" + depends on BR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + depends on BR2_USE_MMU + select BR2_PACKAGE_PULSEAUDIO + help + Enable pulseaudio output support. + +comment "pulseaudio support needs a toolchain w/ threads, wchar, dynamic library" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS || !BR2_USE_WCHAR + +config BR2_PACKAGE_MPD_SHOUTCAST + bool "shoutcast" + select BR2_PACKAGE_LIBSHOUT + help + Enable shoutcast streaming output support. + +comment "Miscellaneous plugins" + +config BR2_PACKAGE_MPD_AVAHI_SUPPORT + bool "avahi (zeroconf) support" + depends on !BR2_STATIC_LIBS # avahi + select BR2_PACKAGE_AVAHI + select BR2_PACKAGE_AVAHI_DAEMON + select BR2_PACKAGE_AVAHI_LIBDNSSD_COMPATIBILITY + help + Enable Avahi (zeroconf) support. + Select this for multicast DNS/DNS-SD service discovery + support. This allows MPD to publish service information on a + local network. + +comment "avahi support needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +config BR2_PACKAGE_MPD_LIBMPDCLIENT + bool "libmpdclient" + select BR2_PACKAGE_LIBMPDCLIENT + help + Enable libmpdclient support. + +config BR2_PACKAGE_MPD_NEIGHBOR_DISCOVERY_SUPPORT + bool "neighbor discovery support" + depends on BR2_PACKAGE_MPD_LIBSMBCLIENT || BR2_PACKAGE_MPD_UPNP + help + Enable support for neighbor discovery. + This option can be used in conjunction with the smbclient + plugin to provide a list of SMB/CIFS servers or with the + UPnP plugin to provide a list of UPnP servers on the local + network. The neighbor plugin needs configuration in + mpd.conf. For further information take a look at the MPD + documentation. + +config BR2_PACKAGE_MPD_TCP + bool "tcp sockets" + default y + help + Enable MPD to listen on tcp sockets. + + You want this on if MPD and the client(s) work + on different machines (the usual scenario). + +config BR2_PACKAGE_MPD_UPNP + bool "UPnP" + select BR2_PACKAGE_EXPAT + select BR2_PACKAGE_LIBUPNP + select BR2_PACKAGE_MPD_CURL + help + Enable MPD UPnP client support. + +comment "Tag plugins" + +config BR2_PACKAGE_MPD_ID3TAG + bool "id3tag" + select BR2_PACKAGE_LIBID3TAG + help + Enable ID3 support. + +endif + +comment "mpd needs a toolchain w/ C++, threads, wchar, gcc >= 7, host gcc >= 7" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_ATOMIC + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_8 || \ + !BR2_HOST_GCC_AT_LEAST_8 diff --git a/package/mpd/S95mpd b/package/mpd/S95mpd new file mode 100644 index 00000000..a258930b --- /dev/null +++ b/package/mpd/S95mpd @@ -0,0 +1,33 @@ +#!/bin/sh + +# Sanity checks +test -f /etc/mpd.conf || exit 0 + +start() { + printf "Starting mpd: " + start-stop-daemon --start --quiet --background --exec /usr/bin/mpd \ + && echo "OK" || echo "FAIL" +} + +stop() { + printf "Stopping mpd: " + start-stop-daemon --stop --quiet --pidfile /var/run/mpd.pid \ + && echo "OK" || echo "FAIL" +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + stop + sleep 1 + start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac diff --git a/package/mpd/mpd.conf b/package/mpd/mpd.conf new file mode 100644 index 00000000..5956b75e --- /dev/null +++ b/package/mpd/mpd.conf @@ -0,0 +1,32 @@ +# +# Sample configuration file for mpd +# This is a minimal configuration, see the manpage for more options +# + +# Directory where the music is stored +music_directory "/var/lib/mpd/music" + +# Directory where user-made playlists are stored (RW) +playlist_directory "/var/lib/mpd/playlists" + +# Database file (RW) +db_file "/var/lib/mpd/database" + +# Log file (RW) +log_file "/var/log/mpd.log" + +# Process ID file (RW) +pid_file "/var/run/mpd.pid" + +# State file (RW) +state_file "/var/lib/mpd/state" + +# User id to run the daemon as +#user "nobody" + +# TCP socket binding +bind_to_address "any" +#bind_to_address "localhost" + +# Unix socket to listen on +bind_to_address "/var/lib/mpd/socket" diff --git a/package/mpd/mpd.hash b/package/mpd/mpd.hash new file mode 100644 index 00000000..4c3b4982 --- /dev/null +++ b/package/mpd/mpd.hash @@ -0,0 +1,3 @@ +# Locally calculated after checking pgp signature +sha256 2be149a4895c3cb613477f8cf1193593e3d8a1d38a75ffa7d32da8c8316a4d5e mpd-0.22.6.tar.xz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/mpd/mpd.mk b/package/mpd/mpd.mk new file mode 100644 index 00000000..06dc7e15 --- /dev/null +++ b/package/mpd/mpd.mk @@ -0,0 +1,343 @@ +################################################################################ +# +# mpd +# +################################################################################ + +MPD_VERSION_MAJOR = 0.22 +MPD_VERSION = $(MPD_VERSION_MAJOR).6 +MPD_SOURCE = mpd-$(MPD_VERSION).tar.xz +MPD_SITE = http://www.musicpd.org/download/mpd/$(MPD_VERSION_MAJOR) +MPD_DEPENDENCIES = host-pkgconf boost +MPD_LICENSE = GPL-2.0+ +MPD_LICENSE_FILES = COPYING +MPD_CONF_OPTS = \ + -Daudiofile=disabled \ + -Ddocumentation=disabled + +# Zeroconf support depends on libdns_sd from avahi. +ifeq ($(BR2_PACKAGE_MPD_AVAHI_SUPPORT),y) +MPD_DEPENDENCIES += avahi +MPD_CONF_OPTS += -Dzeroconf=avahi +else +MPD_CONF_OPTS += -Dzeroconf=disabled +endif + +# MPD prefers libicu for utf8 collation instead of libglib2. +ifeq ($(BR2_PACKAGE_ICU),y) +MPD_DEPENDENCIES += icu +MPD_CONF_OPTS += -Dicu=enabled +else +MPD_CONF_OPTS += -Dicu=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_ALSA),y) +MPD_DEPENDENCIES += alsa-lib +MPD_CONF_OPTS += -Dalsa=enabled +else +MPD_CONF_OPTS += -Dalsa=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_AO),y) +MPD_DEPENDENCIES += libao +MPD_CONF_OPTS += -Dao=enabled +else +MPD_CONF_OPTS += -Dao=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_BZIP2),y) +MPD_DEPENDENCIES += bzip2 +MPD_CONF_OPTS += -Dbzip2=enabled +else +MPD_CONF_OPTS += -Dbzip2=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_CDIO_PARANOIA),y) +MPD_DEPENDENCIES += libcdio-paranoia +MPD_CONF_OPTS += -Dcdio_paranoia=enabled +else +MPD_CONF_OPTS += -Dcdio_paranoia=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_CURL),y) +MPD_DEPENDENCIES += libcurl +MPD_CONF_OPTS += -Dcurl=enabled +else +MPD_CONF_OPTS += -Dcurl=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_DSD),y) +MPD_CONF_OPTS += -Ddsd=true +else +MPD_CONF_OPTS += -Ddsd=false +endif + +ifeq ($(BR2_PACKAGE_MPD_FAAD2),y) +MPD_DEPENDENCIES += faad2 +MPD_CONF_OPTS += -Dfaad=enabled +else +MPD_CONF_OPTS += -Dfaad=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_FFMPEG),y) +MPD_DEPENDENCIES += ffmpeg +MPD_CONF_OPTS += -Dffmpeg=enabled +else +MPD_CONF_OPTS += -Dffmpeg=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_FLAC),y) +MPD_DEPENDENCIES += flac +MPD_CONF_OPTS += -Dflac=enabled +else +MPD_CONF_OPTS += -Dflac=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_FLUIDSYNTH),y) +MPD_DEPENDENCIES += fluidsynth +MPD_CONF_OPTS += -Dfluidsynth=enabled +else +MPD_CONF_OPTS += -Dfluidsynth=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_HTTPD_OUTPUT),y) +MPD_CONF_OPTS += -Dhttpd=true +else +MPD_CONF_OPTS += -Dhttpd=false +endif + +ifeq ($(BR2_PACKAGE_MPD_ID3TAG),y) +MPD_DEPENDENCIES += libid3tag +MPD_CONF_OPTS += -Did3tag=enabled +else +MPD_CONF_OPTS += -Did3tag=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_JACK2),y) +MPD_DEPENDENCIES += jack2 +MPD_CONF_OPTS += -Djack=enabled +else +MPD_CONF_OPTS += -Djack=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_LAME),y) +MPD_DEPENDENCIES += lame +MPD_CONF_OPTS += -Dlame=enabled +else +MPD_CONF_OPTS += -Dlame=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_LIBMPDCLIENT),y) +MPD_DEPENDENCIES += libmpdclient +MPD_CONF_OPTS += -Dlibmpdclient=enabled +else +MPD_CONF_OPTS += -Dlibmpdclient=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_LIBMMS),y) +MPD_DEPENDENCIES += libmms +MPD_CONF_OPTS += -Dmms=enabled +else +MPD_CONF_OPTS += -Dmms=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_LIBNFS),y) +MPD_DEPENDENCIES += libnfs +MPD_CONF_OPTS += -Dnfs=enabled +else +MPD_CONF_OPTS += -Dnfs=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_LIBSMBCLIENT),y) +MPD_DEPENDENCIES += samba4 +MPD_CONF_OPTS += -Dsmbclient=enabled +else +MPD_CONF_OPTS += -Dsmbclient=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_LIBSAMPLERATE),y) +MPD_DEPENDENCIES += libsamplerate +MPD_CONF_OPTS += -Dlibsamplerate=enabled +else +MPD_CONF_OPTS += -Dlibsamplerate=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_LIBSNDFILE),y) +MPD_DEPENDENCIES += libsndfile +MPD_CONF_OPTS += -Dsndfile=enabled +else +MPD_CONF_OPTS += -Dsndfile=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_LIBSOXR),y) +MPD_DEPENDENCIES += libsoxr +MPD_CONF_OPTS += -Dsoxr=enabled +else +MPD_CONF_OPTS += -Dsoxr=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_MAD),y) +MPD_DEPENDENCIES += libid3tag libmad +MPD_CONF_OPTS += -Dmad=enabled +else +MPD_CONF_OPTS += -Dmad=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_MODPLUG),y) +MPD_DEPENDENCIES += libmodplug +MPD_CONF_OPTS += -Dmodplug=enabled +else +MPD_CONF_OPTS += -Dmodplug=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_MPG123),y) +MPD_DEPENDENCIES += libid3tag mpg123 +MPD_CONF_OPTS += -Dmpg123=enabled +else +MPD_CONF_OPTS += -Dmpg123=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_MUSEPACK),y) +MPD_DEPENDENCIES += musepack +MPD_CONF_OPTS += -Dmpcdec=enabled +else +MPD_CONF_OPTS += -Dmpcdec=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_NEIGHBOR_DISCOVERY_SUPPORT),y) +MPD_CONF_OPTS += -Dneighbor=true +else +MPD_CONF_OPTS += -Dneighbor=false +endif + +ifeq ($(BR2_PACKAGE_MPD_OPENAL),y) +MPD_DEPENDENCIES += openal +MPD_CONF_OPTS += -Dopenal=enabled +else +MPD_CONF_OPTS += -Dopenal=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_OPUS),y) +MPD_DEPENDENCIES += opus libogg +MPD_CONF_OPTS += -Dopus=enabled +else +MPD_CONF_OPTS += -Dopus=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_OSS),y) +MPD_CONF_OPTS += -Doss=enabled +else +MPD_CONF_OPTS += -Doss=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_PULSEAUDIO),y) +MPD_DEPENDENCIES += pulseaudio +MPD_CONF_OPTS += -Dpulse=enabled +else +MPD_CONF_OPTS += -Dpulse=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_QOBUZ),y) +MPD_DEPENDENCIES += libgcrypt yajl +MPD_CONF_OPTS += -Dqobuz=enabled +else +MPD_CONF_OPTS += -Dqobuz=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_SHOUTCAST),y) +MPD_DEPENDENCIES += libshout +MPD_CONF_OPTS += -Dshout=enabled +else +MPD_CONF_OPTS += -Dshout=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_SIDPLAY),y) +MPD_DEPENDENCIES += libsidplay2 +MPD_CONF_OPTS += -Dsidplay=enabled +else +MPD_CONF_OPTS += -Dsidplay=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_SOUNDCLOUD),y) +MPD_DEPENDENCIES += yajl +MPD_CONF_OPTS += -Dsoundcloud=enabled +else +MPD_CONF_OPTS += -Dsoundcloud=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_SQLITE),y) +MPD_DEPENDENCIES += sqlite +MPD_CONF_OPTS += -Dsqlite=enabled +else +MPD_CONF_OPTS += -Dsqlite=disabled +endif + +ifneq ($(BR2_PACKAGE_MPD_TCP),y) +MPD_CONF_OPTS += -Dtcp=true +endif + +ifeq ($(BR2_PACKAGE_MPD_TIDAL),y) +MPD_DEPENDENCIES += yajl +MPD_CONF_OPTS += -Dtidal=enabled +else +MPD_CONF_OPTS += -Dtidal=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_TREMOR),y) +MPD_DEPENDENCIES += tremor +MPD_CONF_OPTS += -Dtremor=enabled +else +MPD_CONF_OPTS += -Dtremor=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_TWOLAME),y) +MPD_DEPENDENCIES += twolame +MPD_CONF_OPTS += -Dtwolame=enabled +else +MPD_CONF_OPTS += -Dtwolame=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_UPNP),y) +MPD_DEPENDENCIES += \ + expat \ + libupnp +MPD_CONF_OPTS += -Dupnp=enabled +else +MPD_CONF_OPTS += -Dupnp=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_VORBIS),y) +MPD_DEPENDENCIES += libvorbis +MPD_CONF_OPTS += -Dvorbis=enabled -Dvorbisenc=enabled +else +MPD_CONF_OPTS += -Dvorbis=disabled -Dvorbisenc=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_WAVPACK),y) +MPD_DEPENDENCIES += wavpack +MPD_CONF_OPTS += -Dwavpack=enabled +else +MPD_CONF_OPTS += -Dwavpack=disabled +endif + +ifeq ($(BR2_PACKAGE_MPD_ZZIP),y) +MPD_DEPENDENCIES += zziplib +MPD_CONF_OPTS += -Dzzip=enabled +else +MPD_CONF_OPTS += -Dzzip=disabled +endif + +define MPD_INSTALL_EXTRA_FILES + $(INSTALL) -m 0644 -D package/mpd/mpd.conf $(TARGET_DIR)/etc/mpd.conf + mkdir -p $(TARGET_DIR)/var/lib/mpd/music + mkdir -p $(TARGET_DIR)/var/lib/mpd/playlists +endef + +MPD_POST_INSTALL_TARGET_HOOKS += MPD_INSTALL_EXTRA_FILES + +define MPD_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/mpd/S95mpd \ + $(TARGET_DIR)/etc/init.d/S95mpd +endef + +$(eval $(meson-package)) diff --git a/package/mpdecimal/0001-Add-minimal-support-for-enable-disable-shared-static.patch b/package/mpdecimal/0001-Add-minimal-support-for-enable-disable-shared-static.patch new file mode 100644 index 00000000..60d6b4bb --- /dev/null +++ b/package/mpdecimal/0001-Add-minimal-support-for-enable-disable-shared-static.patch @@ -0,0 +1,147 @@ +From c349964887901848fb4cd5db53a5bcb6dae27aaa Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sun, 23 Nov 2014 10:16:33 +0100 +Subject: [PATCH] Add minimal support for --{enable,disable}-{shared,static} + +mpdecimal uses autoconf, but not automake or libtool, so this commit +adds some basic handling of --{enable,disable}-{shared,static}, so +that building the shared library can be disabled in pure static +library contexts. + +Signed-off-by: Thomas Petazzoni +[Fabrice: update for 2.5.0 (add libmpdec++)] +Signed-off-by: Fabrice Fontaine +--- + Makefile.in | 6 ++++++ + configure.ac | 13 +++++++++++++ + libmpdec/Makefile.in | 11 ++++++++++- + 3 files changed, 29 insertions(+), 1 deletion(-) + +diff --git a/Makefile.in b/Makefile.in +index 2c91891..0c44f36 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -9,6 +9,8 @@ LIBSTATIC = @LIBSTATIC@ + LIBSONAME = @LIBSONAME@ + LIBSHARED = @LIBSHARED@ + INSTALL = @INSTALL@ ++BUILD_SHARED = @BUILD_SHARED@ ++BUILD_STATIC = @BUILD_STATIC@ + + prefix = @prefix@ + exec_prefix = @exec_prefix@ +@@ -32,9 +34,13 @@ install: FORCE + $(INSTALL) -d -m 755 $(DESTDIR)$(includedir) + $(INSTALL) -m 644 libmpdec/mpdecimal.h $(DESTDIR)$(includedir) + $(INSTALL) -d -m 755 $(DESTDIR)$(libdir) ++ifeq ($(BUILD_STATIC),yes) + $(INSTALL) -m 644 libmpdec/$(LIBSTATIC) $(DESTDIR)$(libdir) ++endif ++ifeq ($(BUILD_SHARED),yes) + $(INSTALL) -m 755 libmpdec/$(LIBSHARED) $(DESTDIR)$(libdir) + cd $(DESTDIR)$(libdir) && ln -sf $(LIBSHARED) $(LIBSONAME) && ln -sf $(LIBSHARED) $(LIBNAME) ++endif + $(INSTALL) -d -m 755 $(DESTDIR)$(docdir) + cp -R doc/* $(DESTDIR)$(docdir) + +@@ -74,9 +80,13 @@ install_libcxx: install_lib + $(INSTALL) -d -m 755 $(DESTDIR)$(includedir) + $(INSTALL) -m 644 libmpdec++/decimal.hh $(DESTDIR)$(includedir) + $(INSTALL) -d -m 755 $(DESTDIR)$(libdir) ++ifeq ($(BUILD_STATIC),yes) + $(INSTALL) -m 644 libmpdec++/$(LIBSTATIC_CXX) $(DESTDIR)$(libdir) ++endif ++ifeq ($(BUILD_SHARED),yes) + $(INSTALL) -m 755 libmpdec++/$(LIBSHARED_CXX) $(DESTDIR)$(libdir) + cd $(DESTDIR)$(libdir) && ln -sf $(LIBSHARED_CXX) $(LIBSONAME_CXX) && ln -sf $(LIBSHARED_CXX) $(LIBNAME_CXX) ++endif + cp -R doc/libmpdec++ $(DESTDIR)$(docdir) + + +diff --git a/configure.ac b/configure.ac +index 7ee8f86..2b3e505 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -88,6 +88,19 @@ CFLAGS="$saved_cflags" + AC_PROG_INSTALL + AC_SUBST(INSTALL) + ++AC_ARG_ENABLE([shared], ++ [AS_HELP_STRING([--enable-shared], [build shared library])], ++ [BUILD_SHARED=$enableval], ++ [BUILD_SHARED=yes]) ++ ++AC_ARG_ENABLE([static], ++ [AS_HELP_STRING([--enable-static], [build static library])], ++ [BUILD_STATIC=$enableval], ++ [BUILD_STATIC=yes]) ++ ++AC_SUBST(BUILD_SHARED) ++AC_SUBST(BUILD_STATIC) ++ + # _FORTIFY_SOURCE wrappers for memmove and bcopy are incorrect: + # http://sourceware.org/ml/libc-alpha/2010-12/msg00009.html + AC_MSG_CHECKING(for glibc _FORTIFY_SOURCE/memmove bug) +diff --git a/libmpdec/Makefile.in b/libmpdec/Makefile.in +index d9619a3..985c73c 100644 +--- a/libmpdec/Makefile.in ++++ b/libmpdec/Makefile.in +@@ -7,6 +7,8 @@ + LIBSTATIC = @LIBSTATIC@ + LIBSONAME = @LIBSONAME@ + LIBSHARED = @LIBSHARED@ ++BUILD_SHARED = @BUILD_SHARED@ ++BUILD_STATIC = @BUILD_STATIC@ + + CC = @CC@ + LD = @LD@ +@@ -32,8 +34,15 @@ ifeq ($(MAKECMDGOALS), profile_use) + MPD_LDFLAGS += $(MPD_PUSE) + endif + ++ifeq ($(BUILD_SHARED),yes) ++TARGETS += $(LIBSHARED) ++endif ++ ++ifeq ($(BUILD_STATIC),yes) ++TARGETS += $(LIBSTATIC) ++endif + +-default: $(LIBSTATIC) $(LIBSHARED) ++default: $(TARGETS) + + + OBJS := basearith.o context.o constants.o convolute.o crt.o mpdecimal.o \ +diff --git a/libmpdec/Makefile.in b/libmpdec/Makefile.in +index d9619a3..985c73c 100644 +--- a/libmpdec++/Makefile.in ++++ b/libmpdec++/Makefile.in +@@ -13,6 +13,8 @@ LIBSTATIC_CXX = @LIBSTATIC_CXX@ + LIBNAME_CXX = @LIBNAME_CXX@ + LIBSONAME_CXX = @LIBSONAME_CXX@ + LIBSHARED_CXX = @LIBSHARED_CXX@ ++BUILD_SHARED = @BUILD_SHARED@ ++BUILD_STATIC = @BUILD_STATIC@ + + CXX = @CXX@ + LDXX = @LDXX@ +@@ -39,8 +41,15 @@ ifeq ($(MAKECMDGOALS), profile_use) + MPD_LDXXFLAGS += $(MPD_PUSE) + endif + ++ifeq ($(BUILD_SHARED),yes) ++TARGETS += $(LIBSHARED_CXX) ++endif ++ ++ifeq ($(BUILD_STATIC),yes) ++TARGETS += $(LIBSTATIC_CXX) ++endif + +-default: $(LIBSTATIC_CXX) $(LIBSHARED_CXX) ++default: $(TARGETS) + + + OBJS := decimal.o +-- +2.1.0 + diff --git a/package/mpdecimal/Config.in b/package/mpdecimal/Config.in new file mode 100644 index 00000000..929d4151 --- /dev/null +++ b/package/mpdecimal/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_MPDECIMAL + bool "mpdecimal" + help + mpdecimal is a package for correctly-rounded arbitrary + precision decimal floating point arithmetic. Starting from + version 2.4, mpdecimal includes only the libmpdec + library. Further mpdecimal development will focus + exclusively on libmpdec. + + http://www.bytereef.org/mpdecimal/ diff --git a/package/mpdecimal/mpdecimal.hash b/package/mpdecimal/mpdecimal.hash new file mode 100644 index 00000000..c931ee4a --- /dev/null +++ b/package/mpdecimal/mpdecimal.hash @@ -0,0 +1,4 @@ +# From http://www.bytereef.org/mpdecimal/download.html +sha256 15417edc8e12a57d1d9d75fa7e3f22b158a3b98f44db9d694cfd2acde8dfa0ca mpdecimal-2.5.0.tar.gz +# Locally computed +sha256 b07528d8b1dbf1e2d2741052996f0876e23342ce2d30d0effa39c5457716c25a LICENSE.txt diff --git a/package/mpdecimal/mpdecimal.mk b/package/mpdecimal/mpdecimal.mk new file mode 100644 index 00000000..fa310a22 --- /dev/null +++ b/package/mpdecimal/mpdecimal.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# mpdecimal +# +################################################################################ + +MPDECIMAL_SITE = http://www.bytereef.org/software/mpdecimal/releases +MPDECIMAL_VERSION = 2.5.0 +MPDECIMAL_INSTALL_STAGING = YES +MPDECIMAL_LICENSE = BSD-2-Clause +MPDECIMAL_LICENSE_FILES = LICENSE.txt +MPDECIMAL_CONF_OPTS = LD="$(TARGET_CC)" +MPDECIMAL_AUTORECONF = YES + +# On i386, by default, mpdecimal tries to uses which is not +# available in musl/uclibc. So in this case, we tell mpdecimal to use +# the generic 32 bits code, which is anyway the one used on ARM, +# PowerPC, etc. +ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),) +ifeq ($(BR2_i386),y) +MPDECIMAL_CONF_ENV += MACHINE=ansi32 +endif +endif + +ifeq ($(BR2_INSTALL_LIBSTDCPP),y) +MPDECIMAL_CONF_OPTS += --enable-cxx +else +MPDECIMAL_CONF_OPTS += --disable-cxx +endif + +$(eval $(autotools-package)) diff --git a/package/mpfr/Config.in b/package/mpfr/Config.in new file mode 100644 index 00000000..e02511f8 --- /dev/null +++ b/package/mpfr/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_MPFR + bool "mpfr" + select BR2_PACKAGE_GMP + help + C library for multiple-precision floating-point computations + with exact rounding. + + http://www.mpfr.org/ diff --git a/package/mpfr/mpfr.hash b/package/mpfr/mpfr.hash new file mode 100644 index 00000000..ea44b8c2 --- /dev/null +++ b/package/mpfr/mpfr.hash @@ -0,0 +1,5 @@ +# From http://lists.gnu.org/archive/html/info-gnu/2019-01/msg00019.html +sha256 1d3be708604eae0e42d578ba93b390c2a145f17743a744d8f3f8c2ad5855a38a mpfr-4.0.2.tar.xz + +# Hash for license file +sha256 e3a994d82e644b03a792a930f574002658412f62407f5fee083f2555c5f23118 COPYING.LESSER diff --git a/package/mpfr/mpfr.mk b/package/mpfr/mpfr.mk new file mode 100644 index 00000000..837aff3a --- /dev/null +++ b/package/mpfr/mpfr.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# mpfr +# +################################################################################ + +MPFR_VERSION = 4.0.2 +MPFR_SITE = http://www.mpfr.org/mpfr-$(MPFR_VERSION) +MPFR_SOURCE = mpfr-$(MPFR_VERSION).tar.xz +MPFR_LICENSE = LGPL-3.0+ +MPFR_LICENSE_FILES = COPYING.LESSER +MPFR_CPE_ID_VENDOR = gnu +MPFR_INSTALL_STAGING = YES +MPFR_DEPENDENCIES = gmp +HOST_MPFR_DEPENDENCIES = host-gmp +MPFR_MAKE_OPTS = RANLIB=$(TARGET_RANLIB) + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/mpg123/Config.in b/package/mpg123/Config.in new file mode 100644 index 00000000..73ca1c74 --- /dev/null +++ b/package/mpg123/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_MPG123 + bool "mpg123" + depends on BR2_USE_MMU # fork - in the application + help + Fast, free and portable MPEG audio player for Unix. It + supports MPEG 1.0/2.0 layers 1, 2 and 3. + + http://www.mpg123.de/ diff --git a/package/mpg123/mpg123.hash b/package/mpg123/mpg123.hash new file mode 100644 index 00000000..e5fb09b4 --- /dev/null +++ b/package/mpg123/mpg123.hash @@ -0,0 +1,7 @@ +# From https://sourceforge.net/projects/mpg123/files/mpg123/1.25.15/ +sha1 286fcb83afad3ecbfea60434d3ee1b6d7f41bb7c mpg123-1.25.15.tar.bz2 +md5 9a050d4b3573661c606f8095a3f34ca3 mpg123-1.25.15.tar.bz2 +# Locally calculated +sha256 503a76d82d97f1a6513bbeb284e460a99fb17ef80f23a661d8fc026ce6adcbbc mpg123-1.25.15.tar.bz2 +# License file +sha256 f40e0dd86b27b52e429b693a87b3ca63ae0a98a4d142e77207aa6bdf1db7a295 COPYING diff --git a/package/mpg123/mpg123.mk b/package/mpg123/mpg123.mk new file mode 100644 index 00000000..fbb011c2 --- /dev/null +++ b/package/mpg123/mpg123.mk @@ -0,0 +1,84 @@ +################################################################################ +# +# mpg123 +# +################################################################################ + +MPG123_VERSION = 1.25.15 +MPG123_SOURCE = mpg123-$(MPG123_VERSION).tar.bz2 +MPG123_SITE = http://downloads.sourceforge.net/project/mpg123/mpg123/$(MPG123_VERSION) +MPG123_INSTALL_STAGING = YES +MPG123_LICENSE = LGPL-2.1 +MPG123_LICENSE_FILES = COPYING +MPG123_CPE_ID_VENDOR = mpg123 +MPG123_DEPENDENCIES = host-pkgconf + +MPG123_CPU = $(if $(BR2_SOFT_FLOAT),generic_nofpu,generic_fpu) + +ifeq ($(BR2_aarch64),y) +MPG123_CPU = aarch64 +endif + +ifeq ($(BR2_arm),y) +ifeq ($(or $(BR2_ARM_CPU_HAS_NEON),$(BR2_ARM_CPU_HAS_VFPV2)),y) +MPG123_CPU = arm_fpu +else +MPG123_CPU = arm_nofpu +endif +endif + +ifeq ($(BR2_i386),y) +MPG123_CPU = x86 +endif + +ifeq ($(BR2_powerpc),y) +ifeq ($(BR2_POWERPC_CPU_HAS_ALTIVEC),y) +MPG123_CPU = altivec +endif +ifeq ($(BR2_SOFT_FLOAT),y) +MPG123_CPU = ppc_nofpu +endif +endif # powerpc + +ifeq ($(BR2_x86_64),y) +MPG123_CPU = x86-64 +endif + +MPG123_CONF_OPTS += --with-cpu=$(MPG123_CPU) + +MPG123_AUDIO = dummy oss + +ifeq ($(BR2_PACKAGE_PORTAUDIO),y) +MPG123_AUDIO += portaudio +MPG123_CONF_OPTS += --with-default-audio=portaudio +MPG123_DEPENDENCIES += portaudio +# configure script does NOT use pkg-config to figure out how to link +# with portaudio, breaking static linking as portaudio uses pthreads +MPG123_CONF_ENV += LIBS="`$(PKG_CONFIG_HOST_BINARY) --libs portaudio-2.0`" +endif + +ifeq ($(BR2_PACKAGE_SDL),y) +MPG123_AUDIO += sdl +MPG123_CONF_OPTS += --with-default-audio=sdl +MPG123_DEPENDENCIES += sdl +endif + +ifeq ($(BR2_PACKAGE_ALSA_LIB),y) +MPG123_AUDIO += alsa +MPG123_CONF_OPTS += --with-default-audio=alsa +MPG123_DEPENDENCIES += alsa-lib +# configure script does NOT use pkg-config to figure out how to link +# with alsa, breaking static linking as alsa uses pthreads +MPG123_CONF_ENV += LIBS="`$(PKG_CONFIG_HOST_BINARY) --libs alsa`" +endif + +MPG123_CONF_OPTS += --with-audio=$(subst $(space),$(comma),$(MPG123_AUDIO)) + +# output modules are loaded with dlopen() +ifeq ($(BR2_STATIC_LIBS),y) +MPG123_CONF_OPTS += --disable-modules +else +MPG123_CONF_OPTS += --enable-modules +endif + +$(eval $(autotools-package)) diff --git a/package/mpir/0001-mpn-arm-udiv.asm-workaround-binutils-bug-14887.patch b/package/mpir/0001-mpn-arm-udiv.asm-workaround-binutils-bug-14887.patch new file mode 100644 index 00000000..6a6f467d --- /dev/null +++ b/package/mpir/0001-mpn-arm-udiv.asm-workaround-binutils-bug-14887.patch @@ -0,0 +1,40 @@ +From d858ce52d1971cb4e8500b0ebc0472fdae4686ec Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sun, 7 May 2017 23:12:04 +0200 +Subject: [PATCH] mpn/arm/udiv.asm: workaround binutils bug #14887 + +Old binutils versions are affected by bug #14887, +https://sourceware.org/bugzilla/show_bug.cgi?id=14887, which causes a +build failure when a register specification is surrounded by +whitespaces. Removing those whitespaces works around the issue. + +Signed-off-by: Thomas Petazzoni +--- + mpn/arm/udiv.asm | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/mpn/arm/udiv.asm b/mpn/arm/udiv.asm +index 25197a6..ed11eb3 100644 +--- a/mpn/arm/udiv.asm ++++ b/mpn/arm/udiv.asm +@@ -50,7 +50,7 @@ L(oop): divstep(n1,n0,d) + teq r12, #0 + bne L(oop) + +- str n1, [ rem_ptr ] C store remainder ++ str n1, [rem_ptr] C store remainder + adc r0, n0, n0 C quotient: add last carry from divstep + mov pc, lr + +@@ -89,7 +89,7 @@ L(oop2): + addcs n0, n0, #1 C adjust quotient + + L(_even_divisor): +- str n1, [ rem_ptr ] C store remainder ++ str n1, [rem_ptr] C store remainder + mov r0, n0 C quotient + ldmfd sp!, { r8, pc } + EPILOGUE(mpn_udiv_qrnnd) +-- +2.7.4 + diff --git a/package/mpir/Config.in b/package/mpir/Config.in new file mode 100644 index 00000000..da4cc9f4 --- /dev/null +++ b/package/mpir/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_MPIR + bool "mpir" + select BR2_PACKAGE_GMP + help + MPIR is a highly optimised library for bignum arithmetic + forked from the GMP bignum library. + + http://www.mpir.org/ diff --git a/package/mpir/mpir.hash b/package/mpir/mpir.hash new file mode 100644 index 00000000..71d0c19d --- /dev/null +++ b/package/mpir/mpir.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 52f63459cf3f9478859de29e00357f004050ead70b45913f2c2269d9708675bb mpir-3.0.0.tar.bz2 +sha256 9ccf26cfe845e0eb8bb58053e47366e7ab6b697ae010f7650978d4b71b7d1fc1 COPYING.LIB diff --git a/package/mpir/mpir.mk b/package/mpir/mpir.mk new file mode 100644 index 00000000..91f704d3 --- /dev/null +++ b/package/mpir/mpir.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# mpir +# +################################################################################ + +MPIR_VERSION = 3.0.0 +MPIR_SITE = http://www.mpir.org +MPIR_SOURCE = mpir-$(MPIR_VERSION).tar.bz2 +MPIR_LICENSE = LGPL-3.0+ +MPIR_LICENSE_FILES = COPYING.LIB +MPIR_INSTALL_STAGING = YES +MPIR_DEPENDENCIES = gmp host-yasm + +ifeq ($(BR2_MIPS_NABI32),y) +MPIR_CONF_OPTS += ABI=n32 +endif + +ifeq ($(BR2_MIPS_NABI64),y) +MPIR_CONF_OPTS += ABI=64 +endif + +# The optimized ARM assembly code uses ARM-only (i.e not Thumb1/2 +# compatible) instructions. +ifeq ($(BR2_arm)$(BR2_armeb):$(BR2_ARM_CPU_HAS_ARM),y:) +MPIR_CONF_ENV += MPN_PATH="generic" +endif + +# Optimized mips32/mips64 code not suitable for mips32r6/mips64r6 +ifeq ($(BR2_MIPS_CPU_MIPS32R6)$(BR2_MIPS_CPU_MIPS64R6),y) +MPIR_CONF_ENV += MPN_PATH="generic" +endif + +# Optimized powerpc64 code is not suitable for powerpc64le +ifeq ($(BR2_powerpc64le),y) +MPIR_CONF_ENV += MPN_PATH="generic" +endif + +$(eval $(autotools-package)) diff --git a/package/mpv/0001-fix-powerpc64-altivec.patch b/package/mpv/0001-fix-powerpc64-altivec.patch new file mode 100644 index 00000000..45983fec --- /dev/null +++ b/package/mpv/0001-fix-powerpc64-altivec.patch @@ -0,0 +1,32 @@ +Subject: [PATCH] Work around bool type redefinition by altivec + +On powerpc64le, the SDL header may include altivec.h and this +(combined with -std=c99) will cause a compile failure due to bool +being redefined as a vector type. + +Adjust the compiler flags to add -std=gnu99 (which is compatible with +altivec) when using gcc. The generic flag '-std=c99' is left in place for other +compilers (in the gcc case it is overridden by the (later) gnu flag). + +Signed-off-by: Sam Bobroff +--- + waftools/detections/compiler.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/waftools/detections/compiler.py b/waftools/detections/compiler.py +index 5bbba87..50836a2 100644 +--- a/waftools/detections/compiler.py ++++ b/waftools/detections/compiler.py +@@ -43,7 +43,8 @@ def __add_gcc_flags__(ctx): + "-Wno-switch", "-Wparentheses", "-Wpointer-arith", + "-Wno-pointer-sign", + # GCC bug 66425 +- "-Wno-unused-result"] ++ "-Wno-unused-result", ++ "-std=gnu99"] + + def __add_clang_flags__(ctx): + ctx.env.CFLAGS += ["-Wno-logical-op-parentheses", "-fcolor-diagnostics", +-- +2.10.0.297.gf6727b0 + diff --git a/package/mpv/Config.in b/package/mpv/Config.in new file mode 100644 index 00000000..812491e3 --- /dev/null +++ b/package/mpv/Config.in @@ -0,0 +1,35 @@ +config BR2_PACKAGE_MPV + bool "mpv" + depends on BR2_INSTALL_LIBSTDCPP # libass + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # libass + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C11/stdatomic.h + depends on BR2_TOOLCHAIN_HAS_ATOMIC + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + select BR2_PACKAGE_FFMPEG + select BR2_PACKAGE_FFMPEG_SWSCALE + select BR2_PACKAGE_LIBASS + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_WAYLAND_PROTOCOLS if BR2_PACKAGE_WAYLAND + # Select xkbcommon for wayland to avoid being mysterious + select BR2_PACKAGE_LIBXKBCOMMON if BR2_PACKAGE_WAYLAND + # Select all necessary X11 dependencies if X.org is enabled + select BR2_PACKAGE_XLIB_LIBX11 if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBXEXT if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBXINERAMA if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBXSCRNSAVER if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBXRANDR if BR2_PACKAGE_XORG7 + help + mpv is a fork of mplayer2 and MPlayer. It shares some features + with the former projects while introducing many more. + + https://mpv.io/ + +comment "mpv needs a toolchain w/ C++, threads, gcc >= 4.9" + depends on BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_ATOMIC + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/mpv/mpv.hash b/package/mpv/mpv.hash new file mode 100644 index 00000000..0c7eb5f8 --- /dev/null +++ b/package/mpv/mpv.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 100a116b9f23bdcda3a596e9f26be3a69f166a4f1d00910d1789b6571c46f3a9 mpv-0.33.1.tar.gz +sha256 a99d7b0625a0566271aad6de694e52eafd566db024f9516720d526c680d3ee30 LICENSE.GPL diff --git a/package/mpv/mpv.mk b/package/mpv/mpv.mk new file mode 100644 index 00000000..30f37705 --- /dev/null +++ b/package/mpv/mpv.mk @@ -0,0 +1,215 @@ +################################################################################ +# +# mpv +# +################################################################################ + +MPV_VERSION = 0.33.1 +MPV_SITE = $(call github,mpv-player,mpv,v$(MPV_VERSION)) +MPV_DEPENDENCIES = \ + host-pkgconf ffmpeg libass zlib \ + $(if $(BR2_PACKAGE_LIBICONV),libiconv) +MPV_LICENSE = GPL-2.0+ +MPV_LICENSE_FILES = LICENSE.GPL +MPV_CPE_ID_VENDOR = mpv + +MPV_NEEDS_EXTERNAL_WAF = YES + +# Some of these options need testing and/or tweaks +MPV_CONF_OPTS = \ + --prefix=/usr \ + --disable-android \ + --disable-caca \ + --disable-cocoa \ + --disable-coreaudio \ + --disable-cuda-hwaccel \ + --disable-opensles \ + --disable-rubberband \ + --disable-uchardet \ + --disable-vapoursynth + +ifeq ($(BR2_REPRODUCIBLE),y) +MPV_CONF_OPTS += --disable-build-date +endif + +ifeq ($(BR2_STATIC_LIBS),y) +MPV_CONF_OPTS += --disable-libmpv-shared --enable-libmpv-static +else +MPV_CONF_OPTS += --enable-libmpv-shared --disable-libmpv-static +endif + +# ALSA support requires pcm+mixer +ifeq ($(BR2_PACKAGE_ALSA_LIB_MIXER)$(BR2_PACKAGE_ALSA_LIB_PCM),yy) +MPV_CONF_OPTS += --enable-alsa +MPV_DEPENDENCIES += alsa-lib +else +MPV_CONF_OPTS += --disable-alsa +endif + +# GBM support is provided by mesa3d when EGL=y +ifeq ($(BR2_PACKAGE_MESA3D_OPENGL_EGL),y) +MPV_CONF_OPTS += --enable-gbm +MPV_DEPENDENCIES += mesa3d +else +MPV_CONF_OPTS += --disable-gbm +endif + +# jack support +# It also requires 64-bit sync intrinsics +ifeq ($(BR2_TOOLCHAIN_HAS_SYNC_8)$(BR2_PACKAGE_JACK2),yy) +MPV_CONF_OPTS += --enable-jack +MPV_DEPENDENCIES += jack2 +else +MPV_CONF_OPTS += --disable-jack +endif + +# jpeg support +ifeq ($(BR2_PACKAGE_JPEG),y) +MPV_CONF_OPTS += --enable-jpeg +MPV_DEPENDENCIES += jpeg +else +MPV_CONF_OPTS += --disable-jpeg +endif + +# lcms2 support +ifeq ($(BR2_PACKAGE_LCMS2),y) +MPV_CONF_OPTS += --enable-lcms2 +MPV_DEPENDENCIES += lcms2 +else +MPV_CONF_OPTS += --disable-lcms2 +endif + +# libarchive support +ifeq ($(BR2_PACKAGE_LIBARCHIVE),y) +MPV_CONF_OPTS += --enable-libarchive +MPV_DEPENDENCIES += libarchive +else +MPV_CONF_OPTS += --disable-libarchive +endif + +# bluray support +ifeq ($(BR2_PACKAGE_LIBBLURAY),y) +MPV_CONF_OPTS += --enable-libbluray +MPV_DEPENDENCIES += libbluray +else +MPV_CONF_OPTS += --disable-libbluray +endif + +# libcdio-paranoia +ifeq ($(BR2_PACKAGE_LIBCDIO_PARANOIA),y) +MPV_CONF_OPTS += --enable-cdda +MPV_DEPENDENCIES += libcdio-paranoia +else +MPV_CONF_OPTS += --disable-cdda +endif + +# libdvdnav +ifeq ($(BR2_PACKAGE_LIBDVDNAV),y) +MPV_CONF_OPTS += --enable-dvdnav +MPV_DEPENDENCIES += libdvdnav +else +MPV_CONF_OPTS += --disable-dvdnav +endif + +# libdrm +ifeq ($(BR2_PACKAGE_LIBDRM),y) +MPV_CONF_OPTS += --enable-drm +MPV_DEPENDENCIES += libdrm +else +MPV_CONF_OPTS += --disable-drm +endif + +# libvdpau +ifeq ($(BR2_PACKAGE_LIBVDPAU),y) +MPV_CONF_OPTS += --enable-vdpau +MPV_DEPENDENCIES += libvdpau +else +MPV_CONF_OPTS += --disable-vdpau +endif + +# LUA support, only for lua51/lua52/luajit +# This enables the controller (OSD) together with libass +ifeq ($(BR2_PACKAGE_LUA_5_1)$(BR2_PACKAGE_LUAJIT),y) +MPV_CONF_OPTS += --enable-lua +MPV_DEPENDENCIES += luainterpreter +else +MPV_CONF_OPTS += --disable-lua +endif + +# OpenGL support +ifeq ($(BR2_PACKAGE_HAS_LIBGL),y) +MPV_CONF_OPTS += --enable-gl +MPV_DEPENDENCIES += libgl +else +MPV_CONF_OPTS += --disable-gl +endif + +# pulseaudio support +ifeq ($(BR2_PACKAGE_PULSEAUDIO),y) +MPV_CONF_OPTS += --enable-pulse +MPV_DEPENDENCIES += pulseaudio +else +MPV_CONF_OPTS += --disable-pulse +endif + +# SDL support +# Sdl2 requires 64-bit sync intrinsics +ifeq ($(BR2_TOOLCHAIN_HAS_SYNC_8)$(BR2_PACKAGE_SDL2),yy) +MPV_CONF_OPTS += --enable-sdl2 +MPV_DEPENDENCIES += sdl2 +else +MPV_CONF_OPTS += --disable-sdl2 +endif + +# Raspberry Pi support +ifeq ($(BR2_PACKAGE_RPI_USERLAND),y) +MPV_CONF_OPTS += --enable-rpi --enable-gl +MPV_DEPENDENCIES += rpi-userland +else +MPV_CONF_OPTS += --disable-rpi +endif + +# va-api support +# This requires one or more of the egl-drm, wayland, x11 backends +# For now we support wayland and x11 +ifeq ($(BR2_PACKAGE_LIBVA),y) +ifneq ($(BR2_PACKAGE_WAYLAND)$(BR2_PACKAGE_XORG7),) +MPV_CONF_OPTS += --enable-vaapi +MPV_DEPENDENCIES += libva +else +MPV_CONF_OPTS += --disable-vaapi +endif +else +MPV_CONF_OPTS += --disable-vaapi +endif + +# wayland support +ifeq ($(BR2_PACKAGE_WAYLAND),y) +MPV_CONF_OPTS += --enable-wayland +MPV_DEPENDENCIES += libxkbcommon wayland wayland-protocols +else +MPV_CONF_OPTS += --disable-wayland +endif + +# Base X11 support. Config.in ensures that if BR2_PACKAGE_XORG7 is +# enabled, xlib_libX11, xlib_libXext, xlib_libXinerama, +# xlib_libXrandr, xlib_libXScrnSaver. +ifeq ($(BR2_PACKAGE_XORG7),y) +MPV_CONF_OPTS += --enable-x11 +MPV_DEPENDENCIES += xlib_libX11 xlib_libXext xlib_libXinerama xlib_libXrandr xlib_libXScrnSaver +# XVideo +ifeq ($(BR2_PACKAGE_XLIB_LIBXV),y) +MPV_CONF_OPTS += --enable-xv +MPV_DEPENDENCIES += xlib_libXv +else +MPV_CONF_OPTS += --disable-xv +endif +else +MPV_CONF_OPTS += --disable-x11 +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +MPV_CONF_ENV += LDFLAGS="$(TARGET_LDFLAGS) -latomic" +endif + +$(eval $(waf-package)) diff --git a/package/mraa/0001-include-Declare-gVERSION-global-as-extern.patch b/package/mraa/0001-include-Declare-gVERSION-global-as-extern.patch new file mode 100644 index 00000000..b3a1f5a0 --- /dev/null +++ b/package/mraa/0001-include-Declare-gVERSION-global-as-extern.patch @@ -0,0 +1,29 @@ +From dbb5961f106ec42cd70689d933674c9c37aedfe1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Bj=C3=B6rn=20Esser?= +Date: Mon, 13 Apr 2020 20:12:11 +0200 +Subject: [PATCH] include: Declare gVERSION global as 'extern'. + +Fixes build with '-fno-common'. + +[Retrieved from: +https://github.com/eclipse/mraa/pull/1012/commits/dbb5961f106ec42cd70689d933674c9c37aedfe1] +Signed-off-by: Fabrice Fontaine +--- + include/version.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/include/version.h b/include/version.h +index 47366ef6f..3a567a1d5 100644 +--- a/include/version.h ++++ b/include/version.h +@@ -11,8 +11,8 @@ + extern "C" { + #endif + +-const char* gVERSION; +-const char* gVERSION_SHORT; ++extern const char* gVERSION; ++extern const char* gVERSION_SHORT; + + #ifdef __cplusplus + } diff --git a/package/mraa/0002-CMakeLists.txt-add-BUILDCPP-option.patch b/package/mraa/0002-CMakeLists.txt-add-BUILDCPP-option.patch new file mode 100644 index 00000000..fbadfe79 --- /dev/null +++ b/package/mraa/0002-CMakeLists.txt-add-BUILDCPP-option.patch @@ -0,0 +1,193 @@ +From cb88e4dd1fbbb9d24e625dba2768b88ed99da309 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 13 Jun 2020 22:51:37 +0200 +Subject: [PATCH] CMakeLists.txt: add BUILDCPP option + +C++ is a mandatory dependency since version 1.4.0 and +https://github.com/eclipse/mraa/commit/122cab1f1e53b7c9c7cd82905b962071f9bad9dc + +As a result, build on embedded toolchains that do not support C++ fails +on: + +CMake Error at CMakeLists.txt:2 (project): + The CMAKE_CXX_COMPILER: + + /home/naourr/work/instance-1/output-1/per-package/mraa/host/bin/arm-linux-g++ + + is not a full path to an existing compiler tool. + +Fixes: + - http://autobuild.buildroot.org/results/31086422e03611c16ab59c4418e3669b580bc0c0 + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/eclipse/mraa/commit/cb88e4dd1fbbb9d24e625dba2768b88ed99da309] +--- + CMakeLists.txt | 69 +++++++++++++++++++---------------- + src/java/CMakeLists.txt | 4 +- + src/javascript/CMakeLists.txt | 34 +++++++++-------- + 3 files changed, 59 insertions(+), 48 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 250d9106e..90c0dc920 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1,5 +1,5 @@ + cmake_minimum_required (VERSION 2.8.11) +-project (mraa C CXX) ++project (mraa C) + + FIND_PACKAGE (Threads REQUIRED) + +@@ -11,6 +11,8 @@ else () + set (CMAKE_C_STANDARD 99) + endif () + ++option (BUILDCPP "Enable C++ (needed by FTDI4222 and tests)" ON) ++ + ############################################################################### + # Detect supported warning flags + # Modified from work By Dan Liew (fpbench - MIT) +@@ -33,15 +35,18 @@ set (MRAA_C_WARNING_FLAGS + -Werror=missing-parameter-type + ) + +-# Warning flags for the C++ compiler only +-set (MRAA_CXX_WARNING_FLAGS +- -Wnon-virtual-dtor +- -Woverloaded-virtual +- -Wreorder +-) +- + include (CheckCCompilerFlag) +-include (CheckCXXCompilerFlag) ++if (BUILDCPP) ++ # Warning flags for the C++ compiler only ++ set (MRAA_CXX_WARNING_FLAGS ++ -Wnon-virtual-dtor ++ -Woverloaded-virtual ++ -Wreorder ++ ) ++ ++ enable_language (CXX) ++ include (CheckCXXCompilerFlag) ++endif () + function (MRAA_SANITIZE_FLAG_NAME OUTPUT_VAR FLAG) + string (REPLACE "-" "_" SANITIZED_FLAG_NAME "${FLAG}") + string (REPLACE "/" "_" SANITIZED_FLAG_NAME "${SANITIZED_FLAG_NAME}") +@@ -62,28 +67,30 @@ foreach (flag ${MRAA_BOTH_WARNING_FLAGS} ${MRAA_C_WARNING_FLAGS}) + endif () + endforeach () + +-# Globally set C++ compiler warning flags that are supported and emit +-# a warning about unsupported flags +-foreach (flag ${MRAA_BOTH_WARNING_FLAGS} ${MRAA_CXX_WARNING_FLAGS}) +- MRAA_SANITIZE_FLAG_NAME (SANITIZED_FLAG_NAME "${flag}") +- CHECK_CXX_COMPILER_FLAG ("${flag}" HAS_CXX_${SANITIZED_FLAG_NAME}) +- if (HAS_CXX_${SANITIZED_FLAG_NAME}) +- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}") +- else () +- message (WARNING "C++ compiler does not support flag \"${flag}\"") +- endif () +-endforeach () +- +-# This function adds the c++11 flag to a c++ target (if supported) +-function(use_cxx_11 targetname) +- include(CheckCXXCompilerFlag) +- CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) +- if (COMPILER_SUPPORTS_CXX11) +- set_target_properties(${targetname} PROPERTIES COMPILE_FLAGS "-std=c++11") +- else() +- message(FATAL_ERROR "Target '${targetname}' requires c++11 which is not supported by this compiler") +- endif() +-endfunction() ++if (BUILDCPP) ++ # Globally set C++ compiler warning flags that are supported and emit ++ # a warning about unsupported flags ++ foreach (flag ${MRAA_BOTH_WARNING_FLAGS} ${MRAA_CXX_WARNING_FLAGS}) ++ MRAA_SANITIZE_FLAG_NAME (SANITIZED_FLAG_NAME "${flag}") ++ CHECK_CXX_COMPILER_FLAG ("${flag}" HAS_CXX_${SANITIZED_FLAG_NAME}) ++ if (HAS_CXX_${SANITIZED_FLAG_NAME}) ++ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}") ++ else () ++ message (WARNING "C++ compiler does not support flag \"${flag}\"") ++ endif () ++ endforeach () ++ ++ # This function adds the c++11 flag to a c++ target (if supported) ++ function(use_cxx_11 targetname) ++ include(CheckCXXCompilerFlag) ++ CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) ++ if (COMPILER_SUPPORTS_CXX11) ++ set_target_properties(${targetname} PROPERTIES COMPILE_FLAGS "-std=c++11") ++ else() ++ message(FATAL_ERROR "Target '${targetname}' requires c++11 which is not supported by this compiler") ++ endif() ++ endfunction() ++endif() + + # Set CMAKE_INSTALL_LIBDIR if not defined + include(GNUInstallDirs) +diff --git a/src/java/CMakeLists.txt b/src/java/CMakeLists.txt +index 231c755fa..cfa72a0df 100644 +--- a/src/java/CMakeLists.txt ++++ b/src/java/CMakeLists.txt +@@ -16,7 +16,9 @@ include_directories ( + set_source_files_properties (mraajava.i PROPERTIES SWIG_FLAGS ";-package;mraa;-I${CMAKE_BINARY_DIR}/src") + set_source_files_properties (mraajava.i PROPERTIES CPLUSPLUS ON) + +-set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -DJAVACALLBACK") ++if (BUILDCPP) ++ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -DJAVACALLBACK") ++endif() + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DJAVACALLBACK") + + if (NOT DEFINED ENV{JAVA_HOME_NATIVE}) +diff --git a/src/javascript/CMakeLists.txt b/src/javascript/CMakeLists.txt +index 25fd36275..99a96b49d 100644 +--- a/src/javascript/CMakeLists.txt ++++ b/src/javascript/CMakeLists.txt +@@ -36,25 +36,27 @@ set_target_properties (mraajs PROPERTIES + ) + + message (STATUS "INFO - swig Version ${SWIG_VERSION}") +-message (STATUS "INFO - CXX compiler Version ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}") ++if (BUILDCPP) ++ message (STATUS "INFO - CXX compiler Version ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}") + +-if (${V8_VERSION_MAJOR} GREATER 3) +- message (STATUS "INFO - Using V8 version > 3 so requiring C++11 compiler") +- # Node 0.12.x V8 engine major version is '3'. +- # Node 2.1.0 V8 engine major version is '4'. +- set_property (TARGET mraajs PROPERTY CXX_STANDARD 11) +- set_property (TARGET mraajs PROPERTY CXX_STANDARD_REQUIRED ON) +- if (CMAKE_VERSION VERSION_LESS "3.1") +- message (WARNING "Need to use CMAKE version 3.1+, but it is ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}, using a workaround.") +- if (CMAKE_COMPILER_IS_GNUCXX) +- if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7") +- message (FATAL_ERROR "GNU gcc compiler is also too old (need 4.7+, but ${CMAKE_CXX_COMPILER_VERSION}) and does not support C++11 standard.") ++ if (${V8_VERSION_MAJOR} GREATER 3) ++ message (STATUS "INFO - Using V8 version > 3 so requiring C++11 compiler") ++ # Node 0.12.x V8 engine major version is '3'. ++ # Node 2.1.0 V8 engine major version is '4'. ++ set_property (TARGET mraajs PROPERTY CXX_STANDARD 11) ++ set_property (TARGET mraajs PROPERTY CXX_STANDARD_REQUIRED ON) ++ if (CMAKE_VERSION VERSION_LESS "3.1") ++ message (WARNING "Need to use CMAKE version 3.1+, but it is ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}, using a workaround.") ++ if (CMAKE_COMPILER_IS_GNUCXX) ++ if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7") ++ message (FATAL_ERROR "GNU gcc compiler is also too old (need 4.7+, but ${CMAKE_CXX_COMPILER_VERSION}) and does not support C++11 standard.") ++ endif () ++ set (MRAA_CXX11_WORKAROUND_OPTION "-std=gnu++11") ++ else () ++ set (MRAA_CXX11_WORKAROUND_OPTION "-std=c++11") + endif () +- set (MRAA_CXX11_WORKAROUND_OPTION "-std=gnu++11") +- else () +- set (MRAA_CXX11_WORKAROUND_OPTION "-std=c++11") ++ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MRAA_CXX11_WORKAROUND_OPTION} ") + endif () +- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MRAA_CXX11_WORKAROUND_OPTION} ") + endif () + endif () + diff --git a/package/mraa/Config.in b/package/mraa/Config.in new file mode 100644 index 00000000..c845fe9f --- /dev/null +++ b/package/mraa/Config.in @@ -0,0 +1,23 @@ +config BR2_PACKAGE_MRAA_ARCH_SUPPORTS + bool + default y if BR2_aarch64 || BR2_aarch64_be + default y if BR2_arm || BR2_armeb + default y if BR2_i386 || BR2_x86_64 + default y if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el + +config BR2_PACKAGE_MRAA + bool "mraa" + depends on BR2_PACKAGE_MRAA_ARCH_SUPPORTS + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS + help + mraa is a C/C++ library with bindings to javascript & python + to interface with the IO on Galileo, Edison & other + platforms, with a structured and sane API where port + names/numbering matches the board that you are on. + + http://iotdk.intel.com/docs/master/mraa + +comment "mraa needs a toolchain w/ threads, dynamic library" + depends on BR2_PACKAGE_MRAA_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/mraa/mraa.hash b/package/mraa/mraa.hash new file mode 100644 index 00000000..f29a5ce8 --- /dev/null +++ b/package/mraa/mraa.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 5351ce9eb654014d8ea7f43bdb2d17e6d1955536938a2ea0d467f4008e614345 mraa-2.1.0.tar.gz +sha256 fac52622ed3badd86b34857b21777ab90296d6ccbc2ac0fd457c09fdeefa9ef1 COPYING diff --git a/package/mraa/mraa.mk b/package/mraa/mraa.mk new file mode 100644 index 00000000..910339b3 --- /dev/null +++ b/package/mraa/mraa.mk @@ -0,0 +1,44 @@ +################################################################################ +# +# mraa +# +################################################################################ + +MRAA_VERSION = 2.1.0 +MRAA_SITE = $(call github,eclipse,mraa,v$(MRAA_VERSION)) +MRAA_LICENSE = MIT +MRAA_LICENSE_FILES = COPYING +MRAA_INSTALL_STAGING = YES + +ifeq ($(BR2_i386),y) +MRAA_ARCH = i386 +else ifeq ($(BR2_x86_64),y) +MRAA_ARCH = x86_64 +else ifeq ($(BR2_arm)$(BR2_armeb),y) +MRAA_ARCH = arm +else ifeq ($(BR2_aarch64)$(BR2_aarch64_be),y) +MRAA_ARCH = aarch64 +else ifeq ($(BR2_mips)$(BR2_mipsel)$(BR2_mips64)$(BR2_mips64el),y) +MRAA_ARCH = mips +endif + +# USBPLAT only makes sense with FTDI4222, which requires the ftd2xx library, +# which doesn't exist in buildroot +# Disable C++ as it is used only by FTDI4222 and tests +MRAA_CONF_OPTS += \ + -DBUILDARCH=$(MRAA_ARCH) \ + -DBUILDCPP=OFF \ + -DBUILDSWIG=OFF \ + -DUSBPLAT=OFF \ + -DFTDI4222=OFF \ + -DENABLEEXAMPLES=OFF \ + -DBUILDTESTS=OFF + +ifeq ($(BR2_PACKAGE_JSON_C),y) +MRAA_CONF_OPTS += -DJSONPLAT=ON +MRAA_DEPENDENCIES += json-c +else +MRAA_CONF_OPTS += -DJSONPLAT=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/mrouted/Config.in b/package/mrouted/Config.in new file mode 100644 index 00000000..f8dd173c --- /dev/null +++ b/package/mrouted/Config.in @@ -0,0 +1,26 @@ +config BR2_PACKAGE_MROUTED + bool "mrouted" + depends on BR2_USE_MMU # fork() + help + An implementation of the DVMRP multicast routing protocol. + Unlike PIM a DVMRP router has a distance vector protocol (like + RIP) built-in to figure out the reverse-path to the multicast + source. This package comes with mrouted and mroutectl. Where + the latter is used to query status and control operation. + + Note: at least two interfaces with MULTICAST flag is requried. + + http://github.com/troglobit/mrouted + +if BR2_PACKAGE_MROUTED + +config BR2_PACKAGE_MROUTED_RSRR + bool "enable RSRR for RSVP" + help + Routing Support for Resource Reservation, currently used by + RSVP. This is an EXPERIMENTAL feature. + + For details, see: + http://tools.ietf.org/html/draft-ietf-rsvp-routing-02 + +endif diff --git a/package/mrouted/S41mrouted b/package/mrouted/S41mrouted new file mode 100755 index 00000000..7dca2582 --- /dev/null +++ b/package/mrouted/S41mrouted @@ -0,0 +1,62 @@ +#!/bin/sh + +DAEMON="mrouted" +PIDFILE="/var/run/$DAEMON.pid" + +MROUTED_ARGS="-w 30" + +# shellcheck source=/dev/null +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON" + +start() { + printf 'Starting %s: ' "$DAEMON" + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon -S -q -p "$PIDFILE" -x "/sbin/$DAEMON" \ + -- $MROUTED_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +# SIGHUP makes mrouted reload its configuration +reload() { + printf 'Reloading %s: ' "$DAEMON" + start-stop-daemon -K -s HUP -q -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +case "$1" in + start|stop|restart|reload) + "$1";; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/mrouted/mrouted.hash b/package/mrouted/mrouted.hash new file mode 100644 index 00000000..18829302 --- /dev/null +++ b/package/mrouted/mrouted.hash @@ -0,0 +1,6 @@ +# From https://github.com/troglobit/mrouted/releases/download/4.2/mrouted-4.2.tar.gz.md5 +md5 b921f9e152e039efdac745438ef8362c mrouted-4.2.tar.gz + +# Locally calculated +sha256 689541334ea951286054b771640e9d0f26b6a3242ff7f3894a3ef1b680811b34 mrouted-4.2.tar.gz +sha256 834f45ed282fd010f354ecc0a50538af519a1cfcc4d2866de3be06982fa9ed29 LICENSE diff --git a/package/mrouted/mrouted.mk b/package/mrouted/mrouted.mk new file mode 100644 index 00000000..95da0c62 --- /dev/null +++ b/package/mrouted/mrouted.mk @@ -0,0 +1,38 @@ +################################################################################ +# +# mrouted +# +################################################################################ + +MROUTED_VERSION = 4.2 +MROUTED_SITE = \ + https://github.com/troglobit/mrouted/releases/download/$(MROUTED_VERSION) +MROUTED_DEPENDENCIES = host-bison +MROUTED_LICENSE = BSD-3-Clause +MROUTED_LICENSE_FILES = LICENSE +MROUTED_CPE_ID_VENDOR = troglobit + +ifeq ($(BR2_PACKAGE_MROUTED_RSRR),y) +MROUTED_CONF_OPTS += --enable-rsrr +else +MROUTED_CONF_OPTS += --disable-rsrr +endif + +define MROUTED_INSTALL_INIT_SYSV + $(INSTALL) -m 755 -D package/mrouted/S41mrouted \ + $(TARGET_DIR)/etc/init.d/S41mrouted +endef + +define MROUTED_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 $(@D)/mrouted.service \ + $(TARGET_DIR)/usr/lib/systemd/system/mrouted.service +endef + +# We will asume that CONFIG_NET and CONFIG_INET are already +# set in the kernel configuration provided by the user. +define MROUTED_LINUX_CONFIG_FIXUPS + $(call KCONFIG_ENABLE_OPT,CONFIG_IP_MULTICAST) + $(call KCONFIG_ENABLE_OPT,CONFIG_IP_MROUTE) +endef + +$(eval $(autotools-package)) diff --git a/package/mrp/Config.in b/package/mrp/Config.in new file mode 100644 index 00000000..0ca18a4e --- /dev/null +++ b/package/mrp/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_MRP + bool "mrp" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_0 + select BR2_PACKAGE_LIBEV + select BR2_PACKAGE_LIBMNL + select BR2_PACKAGE_LIBNL + help + This is the userspace application that configures the kernel + to run MRP protocol. The userspace application is made of 2 + applications, one daemon and a client. + + https://github.com/microchip-ung/mrp + +comment "mrp needs a toolchain w/ threads, kernel headers >= 5.0" + depends on !BR2_TOOLCHAIN_HAS_THREADS \ + || !BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_0 diff --git a/package/mrp/S65mrp b/package/mrp/S65mrp new file mode 100644 index 00000000..0ce1f80f --- /dev/null +++ b/package/mrp/S65mrp @@ -0,0 +1,55 @@ +#!/bin/sh +# +# Start mrp +# + +DAEMON="mrp_server" + +PIDFILE="/var/run/$DAEMON.pid" + +# shellcheck source=/dev/null +[ -r "/etc/default/mrp_server" ] && . "/etc/default/mrp_server" + +start() { + printf "Starting mrp daemon: " + start-stop-daemon -S -b -q -m -p $PIDFILE \ + -x /usr/bin/$DAEMON + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return $status +} + +stop() { + printf "Stopping mrp daemon: " + start-stop-daemon -K -q -p $PIDFILE + status=$? + if [ "$status" -eq 0 ]; then + rm -f "$PIDFILE" + echo "OK" + else + echo "FAIL" + fi + return $status +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + stop + start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/mrp/mrp.hash b/package/mrp/mrp.hash new file mode 100644 index 00000000..02a848c7 --- /dev/null +++ b/package/mrp/mrp.hash @@ -0,0 +1,3 @@ +# locally calculated +sha256 1a6c76d058bb425a7ec8b69a65de797650961161ec016b51ac8a1965e1ac304f mrp-1.1.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE diff --git a/package/mrp/mrp.mk b/package/mrp/mrp.mk new file mode 100644 index 00000000..7e31e442 --- /dev/null +++ b/package/mrp/mrp.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# mrp +# +################################################################################ + +MRP_VERSION = 1.1 +MRP_SITE = $(call github,microchip-ung,mrp,v$(MRP_VERSION)) +MRP_DEPENDENCIES = libev libmnl libnl +MRP_LICENSE = GPL-2.0 +MRP_LICENSE_FILES = LICENSE + +define MRP_INSTALL_INIT_SYSV + $(INSTALL) -m 755 -D $(MRP_PKGDIR)/S65mrp \ + $(TARGET_DIR)/etc/init.d/S65mrp +endef + +define MRP_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 $(MRP_PKGDIR)/mrp.service \ + $(TARGET_DIR)/usr/lib/systemd/system/mrp.service +endef + +$(eval $(cmake-package)) diff --git a/package/mrp/mrp.service b/package/mrp/mrp.service new file mode 100644 index 00000000..05006a70 --- /dev/null +++ b/package/mrp/mrp.service @@ -0,0 +1,10 @@ +[Unit] +Description=Media Redundancy Protocol +After=network.target + +[Service] +ExecStart=/usr/bin/mrp +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/package/msgpack/Config.in b/package/msgpack/Config.in new file mode 100644 index 00000000..b7ae35a0 --- /dev/null +++ b/package/msgpack/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_MSGPACK + bool "msgpack" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + help + MessagePack is an efficient binary serialization format. + + It lets you exchange data among multiple languages like JSON + but it's faster and smaller. + + http://msgpack.org/ + +comment "msgpack needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_SYNC_4 diff --git a/package/msgpack/msgpack.hash b/package/msgpack/msgpack.hash new file mode 100644 index 00000000..3829a702 --- /dev/null +++ b/package/msgpack/msgpack.hash @@ -0,0 +1,4 @@ +# Locally computed: +sha256 464f46744a6be778626d11452c4db3c2d09461080c6db42e358e21af19d542f6 msgpack-3.2.1.tar.gz +sha256 664550b43996452a5a2c7471bb0ff77185a58c69ccafa60f983dc4c162e1ee22 COPYING +sha256 c9bff75738922193e67fa726fa225535870d2aa1059f91452c411736284ad566 LICENSE_1_0.txt diff --git a/package/msgpack/msgpack.mk b/package/msgpack/msgpack.mk new file mode 100644 index 00000000..81670ded --- /dev/null +++ b/package/msgpack/msgpack.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# msgpack +# +################################################################################ + +MSGPACK_VERSION = 3.2.1 +MSGPACK_SITE = $(call github,msgpack,msgpack-c,cpp-$(MSGPACK_VERSION)) +MSGPACK_LICENSE = BSL-1.0 +MSGPACK_LICENSE_FILES = COPYING LICENSE_1_0.txt +MSGPACK_INSTALL_STAGING = YES +MSGPACK_CONF_OPTS = -DMSGPACK_BUILD_EXAMPLES=OFF -DMSGPACK_BUILD_TESTS=OFF + +ifeq ($(BR2_STATIC_LIBS),y) +MSGPACK_CONF_OPTS += -DMSGPACK_ENABLE_SHARED=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/msmtp/Config.in b/package/msmtp/Config.in new file mode 100644 index 00000000..c83525d5 --- /dev/null +++ b/package/msmtp/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_MSMTP + bool "msmtp" + help + msmtp is an SMTP client. In the default mode, it transmits a + mail to an SMTP server (for example at a free mail provider) + which takes care of further delivery. + + https://marlam.de/msmtp/ diff --git a/package/msmtp/msmtp.hash b/package/msmtp/msmtp.hash new file mode 100644 index 00000000..1e73d924 --- /dev/null +++ b/package/msmtp/msmtp.hash @@ -0,0 +1,7 @@ +# Locally calculated after checking signature +# https://marlam.de/msmtp/releases/msmtp-1.8.14.tar.xz.sig +# with key 2F61B4828BBA779AECB3F32703A2A4AB1E32FD34 +sha256 d56f065d711486e9c234618515a02a48a48dab4051b34f3e108fbecb6fb773b4 msmtp-1.8.14.tar.xz + +# Hash for license file: +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/msmtp/msmtp.mk b/package/msmtp/msmtp.mk new file mode 100644 index 00000000..3db36f4c --- /dev/null +++ b/package/msmtp/msmtp.mk @@ -0,0 +1,54 @@ +################################################################################ +# +# msmtp +# +################################################################################ + +MSMTP_VERSION = 1.8.14 +MSMTP_SITE = https://marlam.de/msmtp/releases +MSMTP_SOURCE = msmtp-$(MSMTP_VERSION).tar.xz +MSMTP_DEPENDENCIES = host-pkgconf +MSMTP_CONF_OPTS = --disable-gai-idn +MSMTP_LICENSE = GPL-3.0+ +MSMTP_LICENSE_FILES = COPYING +MSMTP_CPE_ID_VENDOR = marlam + +# msmtpd needs fork +ifeq ($(BR2_USE_MMU),y) +MSMTP_CONF_OPTS += --with-msmtpd +else +MSMTP_CONF_OPTS += --without-msmtpd +endif + +ifeq ($(BR2_PACKAGE_LIBGSASL),y) +MSMTP_CONF_OPTS += --with-libgsasl +MSMTP_DEPENDENCIES += libgsasl +else +MSMTP_CONF_OPTS += --without-libgsasl +endif + +ifeq ($(BR2_PACKAGE_LIBIDN2),y) +MSMTP_CONF_OPTS += --with-libidn +MSMTP_DEPENDENCIES += libidn2 +else +MSMTP_CONF_OPTS += --without-libidn +endif + +ifeq ($(BR2_PACKAGE_LIBSECRET),y) +MSMTP_CONF_OPTS += --with-libsecret +MSMTP_DEPENDENCIES += libsecret +else +MSMTP_CONF_OPTS += --without-libsecret +endif + +ifeq ($(BR2_PACKAGE_GNUTLS),y) +MSMTP_CONF_OPTS += --with-tls=gnutls +MSMTP_DEPENDENCIES += gnutls +else ifeq ($(BR2_PACKAGE_OPENSSL),y) +MSMTP_CONF_OPTS += --with-tls=openssl +MSMTP_DEPENDENCIES += openssl +else +MSMTP_CONF_OPTS += --with-tls=no +endif + +$(eval $(autotools-package)) diff --git a/package/msr-tools/Config.in b/package/msr-tools/Config.in new file mode 100644 index 00000000..dde19f78 --- /dev/null +++ b/package/msr-tools/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_MSR_TOOLS + bool "msr-tools" + depends on BR2_i386 || BR2_x86_64 + help + The MSR Tools project provides utilities to access x86 + processor MSRs and CPU ID directly. + + Those tools access the hardware through the + /dev/cpu//msr and /dev/cpu//cpuid devices. This + necessitates msr and cpuid support in the kernel, which + means you need a kernel compiled with configuration options + CONFIG_X86_CPUID and CONFIG_X86_MSR enabled. + + https://01.org/msr-tools diff --git a/package/msr-tools/msr-tools.hash b/package/msr-tools/msr-tools.hash new file mode 100644 index 00000000..51ec1c79 --- /dev/null +++ b/package/msr-tools/msr-tools.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 9b87245ee091a798184e447066e9e0d7709b7c81f5e6ad55f2b958c1aa50c4a3 msr-tools-1.3.tar.gz +sha256 98398b08cd0dab9a04115b049758d4a7917af3c74389a4576d26c8a240d38a73 cpuid.c diff --git a/package/msr-tools/msr-tools.mk b/package/msr-tools/msr-tools.mk new file mode 100644 index 00000000..bfe1a07a --- /dev/null +++ b/package/msr-tools/msr-tools.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# msr-tools +# +################################################################################ + +MSR_TOOLS_VERSION = 1.3 +MSR_TOOLS_SITE = $(call github,01org,msr-tools,msr-tools-$(MSR_TOOLS_VERSION)) +MSR_TOOLS_LICENSE = GPL-2.0 +MSR_TOOLS_LICENSE_FILES = cpuid.c + +define MSR_TOOLS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) +endef + +define MSR_TOOLS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) install \ + sbindir="$(TARGET_DIR)/usr/sbin" +endef + +$(eval $(generic-package)) diff --git a/package/mtd/Config.in b/package/mtd/Config.in new file mode 100644 index 00000000..590ca7f5 --- /dev/null +++ b/package/mtd/Config.in @@ -0,0 +1,211 @@ +config BR2_PACKAGE_MTD + bool "mtd, jffs2 and ubi/ubifs tools" + help + Build mtd, jffs2 and ubi/ubifs tools + + http://www.linux-mtd.infradead.org/ + +if BR2_PACKAGE_MTD + +# The two hidden options below match mtd configure script options +# --enable-jffs and --enable-ubifs + +config BR2_PACKAGE_MTD_JFFS_UTILS + bool + select BR2_PACKAGE_LZO + select BR2_PACKAGE_ZLIB + +config BR2_PACKAGE_MTD_UBIFS_UTILS + bool + select BR2_PACKAGE_LZO + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + select BR2_PACKAGE_ZLIB + +comment "MTD tools selection" + +config BR2_PACKAGE_MTD_DOCFDISK + bool "docfdisk" + +config BR2_PACKAGE_MTD_DOC_LOADBIOS + bool "doc_loadbios" + +config BR2_PACKAGE_MTD_FLASHCP + bool "flashcp" + default y + +config BR2_PACKAGE_MTD_FLASH_ERASE + bool "flash_erase" + default y + +config BR2_PACKAGE_MTD_FLASH_LOCK + bool "flash_lock" + default y + +config BR2_PACKAGE_MTD_FLASH_OTP_DUMP + bool "flash_otp_dump" + +config BR2_PACKAGE_MTD_FLASH_OTP_INFO + bool "flash_otp_info" + +config BR2_PACKAGE_MTD_FLASH_OTP_LOCK + bool "flash_otp_lock" + +config BR2_PACKAGE_MTD_FLASH_OTP_WRITE + bool "flash_otp_write" + +config BR2_PACKAGE_MTD_FLASH_UNLOCK + bool "flash_unlock" + default y + +config BR2_PACKAGE_MTD_FTL_CHECK + bool "ftl_check" + +config BR2_PACKAGE_MTD_FTL_FORMAT + bool "ftl_format" + +config BR2_PACKAGE_MTD_JFFS2DUMP + bool "jffs2dump" + select BR2_PACKAGE_MTD_JFFS_UTILS + +config BR2_PACKAGE_MTD_MKFSJFFS2 + bool "mkfs.jffs2" + select BR2_PACKAGE_MTD_JFFS_UTILS + +config BR2_PACKAGE_MTD_MKFSUBIFS + bool "mkfs.ubifs" + select BR2_PACKAGE_MTD_UBIFS_UTILS + +config BR2_PACKAGE_MTD_MTD_DEBUG + bool "mtd_debug" + default y + +config BR2_PACKAGE_MTD_MTDPART + bool "mtdpart" + +config BR2_PACKAGE_MTD_NANDDUMP + bool "nanddump" + default y + +config BR2_PACKAGE_MTD_NANDTEST + bool "nandtest" + default y + +config BR2_PACKAGE_MTD_NANDWRITE + bool "nandwrite" + default y + +config BR2_PACKAGE_MTD_NFTLDUMP + bool "nftldump" + +config BR2_PACKAGE_MTD_NFTL_FORMAT + bool "nftl_format" + +config BR2_PACKAGE_MTD_RECV_IMAGE + bool "recv_image" + +config BR2_PACKAGE_MTD_RFDDUMP + bool "rfddump" + +config BR2_PACKAGE_MTD_RFDFORMAT + bool "rfdformat" + +config BR2_PACKAGE_MTD_SERVE_IMAGE + bool "serve_image" + +config BR2_PACKAGE_MTD_SUMTOOL + bool "sumtool" + select BR2_PACKAGE_MTD_JFFS_UTILS + +config BR2_PACKAGE_MTD_MTDINFO + bool "mtdinfo" + default y + +config BR2_PACKAGE_MTD_UBIATTACH + bool "ubiattach" + default y + +config BR2_PACKAGE_MTD_UBICRC32 + bool "ubicrc32" + default y + +config BR2_PACKAGE_MTD_UBIDETACH + bool "ubidetach" + default y + +config BR2_PACKAGE_MTD_UBIFORMAT + bool "ubiformat" + default y + +config BR2_PACKAGE_MTD_UBIMKVOL + bool "ubimkvol" + default y + +config BR2_PACKAGE_MTD_UBINFO + bool "ubinfo" + default y + +config BR2_PACKAGE_MTD_UBINIZE + bool "ubinize" + default y + +config BR2_PACKAGE_MTD_UBIRENAME + bool "ubirename" + default y + +config BR2_PACKAGE_MTD_UBIRMVOL + bool "ubirmvol" + default y + +config BR2_PACKAGE_MTD_UBIRSVOL + bool "ubirsvol" + default y + +config BR2_PACKAGE_MTD_UBIUPDATEVOL + bool "ubiupdatevol" + default y + +config BR2_PACKAGE_MTD_UBIBLOCK + bool "ubiblock" + default y + +config BR2_PACKAGE_MTD_TESTS + bool "MTD test tools" + depends on BR2_USE_MMU # fork() in fstests + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Build and install tools for testing MTD devices and drivers. + +if BR2_PACKAGE_MTD_TESTS + +config BR2_PACKAGE_MTD_FLASH_READTEST + bool "flash_readtest" + +config BR2_PACKAGE_MTD_FLASH_SPEED + bool "flash_speed" + +config BR2_PACKAGE_MTD_FLASH_STRESS + bool "flash_stress" + +config BR2_PACKAGE_MTD_FLASH_TORTURE + bool "flash_torture" + +config BR2_PACKAGE_MTD_INTEGCK + bool "integck" + +config BR2_PACKAGE_MTD_NANDBITERRS + bool "nandbiterrs" + +config BR2_PACKAGE_MTD_NANDPAGETEST + bool "nandpagetest" + +config BR2_PACKAGE_MTD_NANDSUBPAGETEST + bool "nandsubpagetest" + +endif + +comment "MTD test tools need a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS + +endif diff --git a/package/mtd/Config.in.host b/package/mtd/Config.in.host new file mode 100644 index 00000000..37522661 --- /dev/null +++ b/package/mtd/Config.in.host @@ -0,0 +1,6 @@ +config BR2_PACKAGE_HOST_MTD + bool "host mtd, jffs2 and ubi/ubifs tools" + help + Build mtd, jffs2 and ubi/ubifs tools + + http://www.linux-mtd.infradead.org/ diff --git a/package/mtd/mtd.hash b/package/mtd/mtd.hash new file mode 100644 index 00000000..fda5a6ea --- /dev/null +++ b/package/mtd/mtd.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +# ftp://ftp.infradead.org/pub/mtd-utils/mtd-utils-2.1.2.tar.bz2.asc +sha256 8ad4c5f34716d40646aa28724a2f5616d325a6f119254f914e26976f1f76e9d6 mtd-utils-2.1.2.tar.bz2 +sha256 dcc100d4161cc0b7177545ab6e47216f84857cda3843847c792a25289852dcaa COPYING diff --git a/package/mtd/mtd.mk b/package/mtd/mtd.mk new file mode 100644 index 00000000..c4fa56d2 --- /dev/null +++ b/package/mtd/mtd.mk @@ -0,0 +1,136 @@ +################################################################################ +# +# mtd +# +################################################################################ + +MTD_VERSION = 2.1.2 +MTD_SOURCE = mtd-utils-$(MTD_VERSION).tar.bz2 +MTD_SITE = ftp://ftp.infradead.org/pub/mtd-utils +MTD_LICENSE = GPL-2.0 +MTD_LICENSE_FILES = COPYING +MTD_CPE_ID_VENDOR = mtd-utils_project +MTD_CPE_ID_PRODUCT = mtd-utils +MTD_INSTALL_STAGING = YES + +ifeq ($(BR2_PACKAGE_MTD_JFFS_UTILS),y) +MTD_DEPENDENCIES += zlib lzo host-pkgconf +MTD_CONF_OPTS += --with-jffs +else +MTD_CONF_OPTS += --without-jffs +endif + +ifeq ($(BR2_PACKAGE_MTD_UBIFS_UTILS),y) +MTD_DEPENDENCIES += util-linux zlib lzo host-pkgconf +MTD_CONF_OPTS += --with-ubifs +# crypto needs linux/hash_info.h +ifeq ($(BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12)$(BR2_PACKAGE_OPENSSL),yy) +MTD_DEPENDENCIES += openssl +MTD_CONF_OPTS += --with-crypto +else +MTD_CONF_OPTS += --without-crypto +endif +ifeq ($(BR2_PACKAGE_ZSTD),y) +MTD_DEPENDENCIES += zstd +MTD_CONF_OPTS += --with-zstd +else +MTD_CONF_OPTS += --without-zstd +endif +else +MTD_CONF_OPTS += --without-ubifs +endif + +ifeq ($(BR2_PACKAGE_MTD_TESTS),y) +MTD_CONF_OPTS += --enable-tests --enable-install-tests +else +MTD_CONF_OPTS += --disable-tests --disable-install-tests +endif + +# If extended attributes are required, the acl package must +# also be enabled which will also include the attr package. +ifeq ($(BR2_PACKAGE_ACL),y) +MTD_DEPENDENCIES += acl +MTD_CONF_OPTS += --with-xattr +else +MTD_CONF_OPTS += --without-xattr +endif + +HOST_MTD_DEPENDENCIES = host-acl host-zlib host-lzo host-util-linux host-zstd +HOST_MTD_CONF_OPTS = \ + --with-jffs \ + --with-ubifs \ + --without-crypto \ + --disable-tests + +MKFS_JFFS2 = $(HOST_DIR)/sbin/mkfs.jffs2 +SUMTOOL = $(HOST_DIR)/sbin/sumtool + +MTD_TARGETS_$(BR2_PACKAGE_MTD_DOCFDISK) += docfdisk +MTD_TARGETS_$(BR2_PACKAGE_MTD_DOC_LOADBIOS) += doc_loadbios +MTD_TARGETS_$(BR2_PACKAGE_MTD_FLASHCP) += flashcp +MTD_TARGETS_$(BR2_PACKAGE_MTD_FLASH_ERASE) += flash_erase +MTD_TARGETS_$(BR2_PACKAGE_MTD_FLASH_LOCK) += flash_lock +MTD_TARGETS_$(BR2_PACKAGE_MTD_FLASH_OTP_DUMP) += flash_otp_dump +MTD_TARGETS_$(BR2_PACKAGE_MTD_FLASH_OTP_INFO) += flash_otp_info +MTD_TARGETS_$(BR2_PACKAGE_MTD_FLASH_OTP_LOCK) += flash_otp_lock +MTD_TARGETS_$(BR2_PACKAGE_MTD_FLASH_OTP_WRITE) += flash_otp_write +MTD_TARGETS_$(BR2_PACKAGE_MTD_FLASH_UNLOCK) += flash_unlock +MTD_TARGETS_$(BR2_PACKAGE_MTD_FTL_CHECK) += ftl_check +MTD_TARGETS_$(BR2_PACKAGE_MTD_FTL_FORMAT) += ftl_format +MTD_TARGETS_$(BR2_PACKAGE_MTD_JFFS2DUMP) += jffs2dump +MTD_TARGETS_$(BR2_PACKAGE_MTD_MKFSJFFS2) += mkfs.jffs2 +MTD_TARGETS_$(BR2_PACKAGE_MTD_MTD_DEBUG) += mtd_debug +MTD_TARGETS_$(BR2_PACKAGE_MTD_MTDPART) += mtdpart +MTD_TARGETS_$(BR2_PACKAGE_MTD_NANDDUMP) += nanddump +MTD_TARGETS_$(BR2_PACKAGE_MTD_NANDTEST) += nandtest +MTD_TARGETS_$(BR2_PACKAGE_MTD_NANDWRITE) += nandwrite +MTD_TARGETS_$(BR2_PACKAGE_MTD_NFTLDUMP) += nftldump +MTD_TARGETS_$(BR2_PACKAGE_MTD_NFTL_FORMAT) += nftl_format +MTD_TARGETS_$(BR2_PACKAGE_MTD_RECV_IMAGE) += recv_image +MTD_TARGETS_$(BR2_PACKAGE_MTD_RFDDUMP) += rfddump +MTD_TARGETS_$(BR2_PACKAGE_MTD_RFDFORMAT) += rfdformat +MTD_TARGETS_$(BR2_PACKAGE_MTD_SERVE_IMAGE) += serve_image +MTD_TARGETS_$(BR2_PACKAGE_MTD_SUMTOOL) += sumtool +MTD_TARGETS_$(BR2_PACKAGE_MTD_MTDINFO) += mtdinfo +MTD_TARGETS_$(BR2_PACKAGE_MTD_UBIATTACH) += ubiattach +MTD_TARGETS_$(BR2_PACKAGE_MTD_UBICRC32) += ubicrc32 +MTD_TARGETS_$(BR2_PACKAGE_MTD_UBIDETACH) += ubidetach +MTD_TARGETS_$(BR2_PACKAGE_MTD_UBIFORMAT) += ubiformat +MTD_TARGETS_$(BR2_PACKAGE_MTD_UBIMKVOL) += ubimkvol +MTD_TARGETS_$(BR2_PACKAGE_MTD_UBINFO) += ubinfo +MTD_TARGETS_$(BR2_PACKAGE_MTD_UBINIZE) += ubinize +MTD_TARGETS_$(BR2_PACKAGE_MTD_UBIRENAME) += ubirename +MTD_TARGETS_$(BR2_PACKAGE_MTD_UBIRMVOL) += ubirmvol +MTD_TARGETS_$(BR2_PACKAGE_MTD_UBIRSVOL) += ubirsvol +MTD_TARGETS_$(BR2_PACKAGE_MTD_UBIUPDATEVOL) += ubiupdatevol +MTD_TARGETS_$(BR2_PACKAGE_MTD_UBIBLOCK) += ubiblock +MTD_TARGETS_$(BR2_PACKAGE_MTD_MKFSUBIFS) += mkfs.ubifs +MTD_TARGETS_$(BR2_PACKAGE_MTD_FLASH_READTEST) += flash_readtest +MTD_TARGETS_$(BR2_PACKAGE_MTD_FLASH_SPEED) += flash_speed +MTD_TARGETS_$(BR2_PACKAGE_MTD_FLASH_STRESS) += flash_stress +MTD_TARGETS_$(BR2_PACKAGE_MTD_FLASH_TORTURE) += flash_torture +MTD_TARGETS_$(BR2_PACKAGE_MTD_INTEGCK) += integck +MTD_TARGETS_$(BR2_PACKAGE_MTD_NANDBITERRS) += nandbiterrs +MTD_TARGETS_$(BR2_PACKAGE_MTD_NANDPAGETEST) += nandpagetest +MTD_TARGETS_$(BR2_PACKAGE_MTD_NANDSUBPAGETEST) += nandsubpagetest + +define MTD_INSTALL_TARGET_CMDS + $(foreach f,$(MTD_TARGETS_y), \ + $(INSTALL) -D -m 0755 $(@D)/$(f) $(TARGET_DIR)/usr/sbin/$(notdir $(f)) + ) +endef + +# Those libraries are not installed by "make install", but are needed +# by other packages, such as swupdate. +define MTD_INSTALL_LIBS + $(INSTALL) -D -m 0755 $(@D)/include/libmtd.h $(STAGING_DIR)/usr/include/mtd/libmtd.h + $(INSTALL) -D -m 0755 $(@D)/include/libubi.h $(STAGING_DIR)/usr/include/mtd/libubi.h + $(INSTALL) -D -m 0755 $(@D)/include/mtd/ubi-media.h $(STAGING_DIR)/usr/include/mtd/ubi-media.h + $(INSTALL) -D -m 0755 $(@D)/libmtd.a $(STAGING_DIR)/usr/lib/libmtd.a + $(INSTALL) -D -m 0755 $(@D)/libubi.a $(STAGING_DIR)/usr/lib/libubi.a +endef + +MTD_POST_INSTALL_STAGING_HOOKS += MTD_INSTALL_LIBS + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/mtdev/Config.in b/package/mtdev/Config.in new file mode 100644 index 00000000..afdd7dca --- /dev/null +++ b/package/mtdev/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_MTDEV + bool "mtdev" + help + The mtdev is a stand-alone library which transforms all + variants of kernel MT events to the slotted type B protocol. + + http://bitmath.org/code/mtdev/ diff --git a/package/mtdev/mtdev.hash b/package/mtdev/mtdev.hash new file mode 100644 index 00000000..355e50ff --- /dev/null +++ b/package/mtdev/mtdev.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 15d7b28da8ac71d8bc8c9287c2045fd174267bc740bec10cfda332dc1204e0e0 mtdev-1.1.6.tar.bz2 +sha256 795bfe74daae59a97d3a0c8ec0ba0f08c243adf94a3aa7981a4136fce31d55b4 COPYING diff --git a/package/mtdev/mtdev.mk b/package/mtdev/mtdev.mk new file mode 100644 index 00000000..71918581 --- /dev/null +++ b/package/mtdev/mtdev.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# mtdev +# +################################################################################ + +MTDEV_VERSION = 1.1.6 +MTDEV_SOURCE = mtdev-$(MTDEV_VERSION).tar.bz2 +MTDEV_SITE = http://bitmath.org/code/mtdev + +MTDEV_LICENSE = MIT +MTDEV_LICENSE_FILES = COPYING +MTDEV_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/mtools/Config.in b/package/mtools/Config.in new file mode 100644 index 00000000..43e14e2c --- /dev/null +++ b/package/mtools/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_MTOOLS + bool "mtools" + depends on BR2_USE_WCHAR + depends on BR2_USE_MMU # fork() + # runtime UTF conversion support + select BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY if BR2_TOOLCHAIN_USES_GLIBC + help + Mtools is a collection of utilities to access MS-DOS disks + from Unix without mounting them. It supports Win'95 style + long file names, OS/2 Xdf disks and 2m disks (store up to + 1992k on a high density 3 1/2 disk). + + http://www.gnu.org/software/mtools/ + +comment "mtools needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR + depends on BR2_USE_MMU diff --git a/package/mtools/Config.in.host b/package/mtools/Config.in.host new file mode 100644 index 00000000..42cb6f80 --- /dev/null +++ b/package/mtools/Config.in.host @@ -0,0 +1,9 @@ +config BR2_PACKAGE_HOST_MTOOLS + bool "host mtools" + help + Mtools is a collection of utilities to access MS-DOS disks + from Unix without mounting them. It supports Win'95 style long + file names, OS/2 Xdf disks and 2m disks (store up to 1992k on + a high density 3 1/2 disk). + + http://www.gnu.org/software/mtools/ diff --git a/package/mtools/mtools.hash b/package/mtools/mtools.hash new file mode 100644 index 00000000..86cfe693 --- /dev/null +++ b/package/mtools/mtools.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +sha256 d09cff66d7277ad36a7573fc3e9803bfa558cdda83baabaafbf7761317462283 mtools-4.0.26.tar.lz + +# Locally calculated +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/mtools/mtools.mk b/package/mtools/mtools.mk new file mode 100644 index 00000000..6d63a565 --- /dev/null +++ b/package/mtools/mtools.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# mtools +# +################################################################################ + +MTOOLS_VERSION = 4.0.26 +MTOOLS_SOURCE = mtools-$(MTOOLS_VERSION).tar.lz +MTOOLS_SITE = $(BR2_GNU_MIRROR)/mtools +MTOOLS_LICENSE = GPL-3.0+ +MTOOLS_LICENSE_FILES = COPYING +MTOOLS_CONF_OPTS = --without-x +# info documentation not needed +MTOOLS_CONF_ENV = \ + ac_cv_func_setpgrp_void=yes \ + ac_cv_lib_bsd_gethostbyname=no \ + ac_cv_lib_bsd_main=no \ + ac_cv_path_INSTALL_INFO= + +HOST_MTOOLS_CONF_ENV = \ + ac_cv_lib_bsd_gethostbyname=no \ + ac_cv_lib_bsd_main=no \ + ac_cv_path_INSTALL_INFO= + +# link with iconv if enabled +ifeq ($(BR2_PACKAGE_LIBICONV),y) +MTOOLS_DEPENDENCIES += libiconv +MTOOLS_CONF_ENV += LIBS=-liconv +endif + +# Package does not build in parallel due to improper make rules +MTOOLS_MAKE = $(MAKE1) + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/mtr/Config.in b/package/mtr/Config.in new file mode 100644 index 00000000..ec83e25c --- /dev/null +++ b/package/mtr/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_MTR + bool "mtr" + depends on BR2_USE_MMU # fork() + help + mtr combines the functionality of the 'traceroute' and 'ping' + programs in a single network diagnostic tool. + + http://www.bitwizard.nl/mtr/ diff --git a/package/mtr/mtr.hash b/package/mtr/mtr.hash new file mode 100644 index 00000000..7771e091 --- /dev/null +++ b/package/mtr/mtr.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 3a1ab330104ddee3135af3cfa567b9608001c5deecbf200c08b545ed6d7a4c8f mtr-0.93.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/mtr/mtr.mk b/package/mtr/mtr.mk new file mode 100644 index 00000000..26348253 --- /dev/null +++ b/package/mtr/mtr.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# mtr +# +################################################################################ + +MTR_VERSION = 0.93 +MTR_SITE = $(call github,traviscross,mtr,v$(MTR_VERSION)) +MTR_AUTORECONF = YES +MTR_CONF_OPTS = --without-gtk +MTR_DEPENDENCIES = host-pkgconf $(if $(BR2_PACKAGE_NCURSES),ncurses) +MTR_LICENSE = GPL-2.0 +MTR_LICENSE_FILES = COPYING +MTR_SELINUX_MODULES = netutils + +$(eval $(autotools-package)) diff --git a/package/multicat/Config.in b/package/multicat/Config.in new file mode 100644 index 00000000..85f306d5 --- /dev/null +++ b/package/multicat/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_MULTICAT + bool "multicat" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_BITSTREAM + help + Simple and efficient multicast and transport stream + manipulation. + + http://www.videolan.org/projects/multicat.html + +comment "multicat needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/multicat/multicat.hash b/package/multicat/multicat.hash new file mode 100644 index 00000000..9cf84bc5 --- /dev/null +++ b/package/multicat/multicat.hash @@ -0,0 +1,6 @@ +# From https://get.videolan.org/multicat/2.3/multicat-2.3.tar.bz2.md5 +md5 cf4e4bc07d72eda110050d755db14620 multicat-2.3.tar.bz2 +# From https://get.videolan.org/multicat/2.3/multicat-2.3.tar.bz2.sha256 +sha256 2be162e9e8b2e6f6aa7686431f102db6c72c8288bd82dbc67ffed631f4a3361e multicat-2.3.tar.bz2 +# locally calculated +sha256 94f68aec169fb6c9937eade757251714d38a56812be5dbfc3973914a71ad8d2d COPYING diff --git a/package/multicat/multicat.mk b/package/multicat/multicat.mk new file mode 100644 index 00000000..1d31ec86 --- /dev/null +++ b/package/multicat/multicat.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# multicat +# +################################################################################ + +MULTICAT_VERSION = 2.3 +MULTICAT_SOURCE = multicat-$(MULTICAT_VERSION).tar.bz2 +MULTICAT_SITE = https://get.videolan.org/multicat/$(MULTICAT_VERSION) +MULTICAT_LICENSE = GPL-2.0+ +MULTICAT_LICENSE_FILES = COPYING + +MULTICAT_DEPENDENCIES = bitstream + +# Makefile does not use LDFLAGS. Use LDLIBS for that instead. +MULTICAT_MAKE_ENV = $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) \ + LDLIBS="$(TARGET_LDFLAGS)" + +define MULTICAT_BUILD_CMDS + $(MULTICAT_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define MULTICAT_INSTALL_TARGET_CMDS + $(MULTICAT_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) PREFIX=/usr install +endef + +$(eval $(generic-package)) diff --git a/package/multipath-tools/0001-kpartx-libmultipath-use-pkg-config-to-get-path-to-he.patch b/package/multipath-tools/0001-kpartx-libmultipath-use-pkg-config-to-get-path-to-he.patch new file mode 100644 index 00000000..0d46f12a --- /dev/null +++ b/package/multipath-tools/0001-kpartx-libmultipath-use-pkg-config-to-get-path-to-he.patch @@ -0,0 +1,69 @@ +From 922855e245c8bdadc0d24b5b706549b18fb5f079 Mon Sep 17 00:00:00 2001 +From: Alexander Egorenkov +Date: Sat, 21 Nov 2020 11:08:56 +0100 +Subject: [PATCH] kpartx, libmultipath: use pkg-config to get path to + headers + +Use pkg-config in Makefile to find path to devmapper and udev headers +to enable cross-compilation. + +Signed-off-by: Alexander Egorenkov +--- + kpartx/Makefile | 2 +- + libmultipath/Makefile | 12 ++++++------ + 2 files changed, 7 insertions(+), 7 deletions(-) + +diff --git a/kpartx/Makefile b/kpartx/Makefile +index 2906a984..29573890 100644 +--- a/kpartx/Makefile ++++ b/kpartx/Makefile +@@ -8,7 +8,7 @@ LDFLAGS += $(BIN_LDFLAGS) + + LIBDEPS += -ldevmapper + +-ifneq ($(call check_func,dm_task_set_cookie,/usr/include/libdevmapper.h),0) ++ifneq ($(call check_func,dm_task_set_cookie,$(shell $(PKG_CONFIG) --variable=includedir devmapper)/libdevmapper.h),0) + CFLAGS += -DLIBDM_API_COOKIE + endif + +diff --git a/libmultipath/Makefile b/libmultipath/Makefile +index 62ba16e8..3ad9130c 100644 +--- a/libmultipath/Makefile ++++ b/libmultipath/Makefile +@@ -20,27 +20,27 @@ ifdef SYSTEMD + endif + endif + +-ifneq ($(call check_func,dm_task_no_flush,/usr/include/libdevmapper.h),0) ++ifneq ($(call check_func,dm_task_no_flush,$(shell $(PKG_CONFIG) --variable=includedir devmapper)/libdevmapper.h),0) + CFLAGS += -DLIBDM_API_FLUSH -D_GNU_SOURCE + endif + +-ifneq ($(call check_func,dm_task_get_errno,/usr/include/libdevmapper.h),0) ++ifneq ($(call check_func,dm_task_get_errno,$(shell $(PKG_CONFIG) --variable=includedir devmapper)/libdevmapper.h),0) + CFLAGS += -DLIBDM_API_GET_ERRNO + endif + +-ifneq ($(call check_func,dm_task_set_cookie,/usr/include/libdevmapper.h),0) ++ifneq ($(call check_func,dm_task_set_cookie,$(shell $(PKG_CONFIG) --variable=includedir devmapper)/libdevmapper.h),0) + CFLAGS += -DLIBDM_API_COOKIE + endif + +-ifneq ($(call check_func,udev_monitor_set_receive_buffer_size,/usr/include/libudev.h),0) ++ifneq ($(call check_func,udev_monitor_set_receive_buffer_size,$(shell $(PKG_CONFIG) --variable=includedir libudev)/libudev.h),0) + CFLAGS += -DLIBUDEV_API_RECVBUF + endif + +-ifneq ($(call check_func,dm_task_deferred_remove,/usr/include/libdevmapper.h),0) ++ifneq ($(call check_func,dm_task_deferred_remove,$(shell $(PKG_CONFIG) --variable=includedir devmapper)/libdevmapper.h),0) + CFLAGS += -DLIBDM_API_DEFERRED + endif + +-ifneq ($(call check_func,dm_hold_control_dev,/usr/include/libdevmapper.h),0) ++ifneq ($(call check_func,dm_hold_control_dev,$(shell $(PKG_CONFIG) --variable=includedir devmapper)/libdevmapper.h),0) + CFLAGS += -DLIBDM_API_HOLD_CONTROL + endif + +-- +2.29.2 + diff --git a/package/multipath-tools/0002-Makefile.inc-Enable-systemd-if-ENABLE_SYSTEMD-is-def.patch b/package/multipath-tools/0002-Makefile.inc-Enable-systemd-if-ENABLE_SYSTEMD-is-def.patch new file mode 100644 index 00000000..133094a7 --- /dev/null +++ b/package/multipath-tools/0002-Makefile.inc-Enable-systemd-if-ENABLE_SYSTEMD-is-def.patch @@ -0,0 +1,35 @@ +From 8370da992c752e4238de7a8b02ce0e179353c959 Mon Sep 17 00:00:00 2001 +From: Alexander Egorenkov +Date: Sun, 6 Sep 2020 10:37:41 +0200 +Subject: [PATCH] Makefile.inc: Enable systemd if ENABLE_SYSTEMD is defined + +systemd is disabled by default, to activate it set ENABLE_SYSTEMD. + +Signed-off-by: Alexander Egorenkov +--- + Makefile.inc | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/Makefile.inc b/Makefile.inc +index d4d1e0dd..32bc1846 100644 +--- a/Makefile.inc ++++ b/Makefile.inc +@@ -35,6 +35,7 @@ ifndef RUN + endif + endif + ++ifdef ENABLE_SYSTEMD + ifndef SYSTEMD + ifeq ($(shell pkg-config --modversion libsystemd >/dev/null 2>&1 && echo 1), 1) + SYSTEMD = $(shell pkg-config --modversion libsystemd) +@@ -45,6 +46,7 @@ ifndef SYSTEMD + endif + endif + endif ++endif + + ifndef SYSTEMDPATH + SYSTEMDPATH=usr/lib +-- +2.28.0 + diff --git a/package/multipath-tools/Config.in b/package/multipath-tools/Config.in new file mode 100644 index 00000000..fc4b01b2 --- /dev/null +++ b/package/multipath-tools/Config.in @@ -0,0 +1,32 @@ +comment "multipath-tools needs udev and a uClibc or glibc toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_TOOLCHAIN_USES_MUSL + depends on BR2_PACKAGE_LIBURCU_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS || !BR2_PACKAGE_HAS_UDEV + +config BR2_PACKAGE_MULTIPATH_TOOLS + bool "multipath-tools" + depends on !BR2_STATIC_LIBS + depends on !BR2_TOOLCHAIN_USES_MUSL + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_PACKAGE_LIBURCU_ARCH_SUPPORTS + depends on BR2_PACKAGE_HAS_UDEV + select BR2_PACKAGE_JSON_C + select BR2_PACKAGE_LIBURCU + select BR2_PACKAGE_LIBAIO + select BR2_PACKAGE_LVM2 + select BR2_PACKAGE_LVM2_STANDARD_INSTALL + select BR2_PACKAGE_READLINE + help + This package provides the following binaries to drive + the Device Mapper multipathing driver: + * multipath - Device mapper target autoconfig. + * multipathd - Multipath daemon. + * mpathpersist - Manages SCSI persistent reservations on + dm multipath devices. + * kpartx - Create device maps from partition tables. + + https://github.com/openSUSE/multipath-tools diff --git a/package/multipath-tools/S60multipathd b/package/multipath-tools/S60multipathd new file mode 100644 index 00000000..ff995e93 --- /dev/null +++ b/package/multipath-tools/S60multipathd @@ -0,0 +1,47 @@ +#!/bin/sh + +DAEMON="multipathd" +PIDFILE="/var/run/$DAEMON.pid" + +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON" + +start() { + printf 'Starting %s: ' "$DAEMON" + start-stop-daemon -b -m -S -q -p "$PIDFILE" -x "/sbin/$DAEMON" + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + rm -f "$PIDFILE" + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +case "$1" in + start|stop|restart) + "$1";; + reload) + restart;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/multipath-tools/multipath-tools.hash b/package/multipath-tools/multipath-tools.hash new file mode 100644 index 00000000..fc94b3f7 --- /dev/null +++ b/package/multipath-tools/multipath-tools.hash @@ -0,0 +1,7 @@ +# Locally computed: +sha256 0549ebe39fd3950ec49c16304da408c2bfe1b18d386d8e6647b5bcb60363c8aa multipath-tools-0.8.5.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSES/GPL-2.0 +sha256 3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986 LICENSES/GPL-3.0 +sha256 b7993225104d90ddd8024fd838faf300bea5e83d91203eab98e29512acebd69c LICENSES/LGPL-2.0 +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 LICENSES/LGPL-2.1 +sha256 afa9db94ff46f8d011251273f547ba958da6a0150a2b797b10fa8c8cfa74bbda README.md diff --git a/package/multipath-tools/multipath-tools.mk b/package/multipath-tools/multipath-tools.mk new file mode 100644 index 00000000..877ed672 --- /dev/null +++ b/package/multipath-tools/multipath-tools.mk @@ -0,0 +1,50 @@ +################################################################################ +# +# multipath-tools +# +################################################################################ + +MULTIPATH_TOOLS_VERSION = 0.8.5 +MULTIPATH_TOOLS_SITE = $(call github,opensvc,multipath-tools,$(MULTIPATH_TOOLS_VERSION)) + +MULTIPATH_TOOLS_LICENSE = \ + LGPL-2.0 (default), \ + LGPL-2.1+ (libmpathcmd), \ + GPL-2.0+ (libmultipath), \ + GPL-3.0+ (libdmmp) +MULTIPATH_TOOLS_LICENSE_FILES = \ + LICENSES/GPL-2.0 \ + LICENSES/GPL-3.0 \ + LICENSES/LGPL-2.0 \ + LICENSES/LGPL-2.1 \ + README.md + +MULTIPATH_TOOLS_DEPENDENCIES = lvm2 json-c readline udev liburcu libaio host-pkgconf +MULTIPATH_TOOLS_MAKE_OPTS = \ + LIB="lib" \ + RUN="run" \ + OPTFLAGS="" \ + STACKPROT="" \ + WARNFLAGS="" + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +MULTIPATH_TOOLS_DEPENDENCIES += systemd +MULTIPATH_TOOLS_MAKE_OPTS += ENABLE_SYSTEMD=1 +endif + +define MULTIPATH_TOOLS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + $(MULTIPATH_TOOLS_MAKE_OPTS) +endef + +define MULTIPATH_TOOLS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) install \ + $(MULTIPATH_TOOLS_MAKE_OPTS) DESTDIR="$(TARGET_DIR)" +endef + +define MULTIPATH_TOOLS_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 package/multipath-tools/S60multipathd \ + $(TARGET_DIR)/etc/init.d/S60multipathd +endef + +$(eval $(generic-package)) diff --git a/package/murata-cyw-fw/Config.in b/package/murata-cyw-fw/Config.in new file mode 100644 index 00000000..75304775 --- /dev/null +++ b/package/murata-cyw-fw/Config.in @@ -0,0 +1,97 @@ +config BR2_PACKAGE_MURATA_CYW_FW + bool "murata-cyw-fw" + help + Murata Wireless firmware, NVRAM and Bluetooth HCD patch files. + + https://github.com/murata-wireless/cyw-fmac-fw + https://github.com/murata-wireless/cyw-fmac-nvram + https://github.com/murata-wireless/cyw-bt-patch + +if BR2_PACKAGE_MURATA_CYW_FW + +config BR2_PACKAGE_MURATA_CYW_FW_CYW43012 + bool "CYW43012 (1LV)" + help + Murata Wireless CYW43012 (1LV) module firmware files. + +config BR2_PACKAGE_MURATA_CYW_FW_CYW43340 + bool "CYW43340/CYW43341 (1BW)" + help + Murata Wireless CYW43340/CYW43341 (1BW) module firmware files. + +config BR2_PACKAGE_MURATA_CYW_FW_CYW43362 + bool "CYW43362 (SN8000)" + help + Murata Wireless CYW43362 (SN8000) module firmware files. + +config BR2_PACKAGE_MURATA_CYW_FW_CYW4339 + bool "CYW4339 (1CK/ZP)" + help + Murata Wireless CYW4339 (1CK/ZP) module firmware files. + +choice + prompt "CYW4339 module" if BR2_PACKAGE_MURATA_CYW_FW_CYW4339 + +config BR2_PACKAGE_MURATA_CYW_FW_CYW4339_1CK + bool "1CK" + +config BR2_PACKAGE_MURATA_CYW_FW_CYW4339_ZP + bool "ZP" + +endchoice + +config BR2_PACKAGE_MURATA_CYW_FW_CYW43430 + bool "CYW43430/CYW4343W/CYW43364 (1DX/1FX/1LN)" + help + Murata Wireless CYW43430/CYW4343W/CYW43364 (1DX/1FX/1LN) + module firmware files. + +choice + prompt "CYW43430/CYW4343W/CYW43364 module" if BR2_PACKAGE_MURATA_CYW_FW_CYW43430 + +config BR2_PACKAGE_MURATA_CYW_FW_CYW43430_1DX + bool "1DX" + +config BR2_PACKAGE_MURATA_CYW_FW_CYW43430_1FX + bool "1FX" + +config BR2_PACKAGE_MURATA_CYW_FW_CYW43430_1LN + bool "1LN" + +endchoice + +config BR2_PACKAGE_MURATA_CYW_FW_CYW43455 + bool "CYW43455 (1HK/1LC/1MW)" + help + Murata Wireless CYW43455 (1HK/1LC/1MW) module firmware files. + +choice + prompt "CYW43455 module" if BR2_PACKAGE_MURATA_CYW_FW_CYW43455 + +config BR2_PACKAGE_MURATA_CYW_FW_CYW43455_1HK + bool "1HK" + +config BR2_PACKAGE_MURATA_CYW_FW_CYW43455_1LC + bool "1LC" + +config BR2_PACKAGE_MURATA_CYW_FW_CYW43455_1MW + bool "1MW" + +endchoice + +config BR2_PACKAGE_MURATA_CYW_FW_CYW4354 + bool "CYW4354 (1BB)" + help + Murata Wireless CYW4354 (1BB) module firmware files. + +config BR2_PACKAGE_MURATA_CYW_FW_CYW4356 + bool "CYW4356 (1CX)" + help + Murata Wireless CYW4356 (1CX) module firmware files. + +config BR2_PACKAGE_MURATA_CYW_FW_CYW4359 + bool "CYW4359 (1FD)" + help + Murata Wireless CYW4359 (1FD) module firmware files. + +endif diff --git a/package/murata-cyw-fw/murata-cyw-fw.hash b/package/murata-cyw-fw/murata-cyw-fw.hash new file mode 100644 index 00000000..c1afb229 --- /dev/null +++ b/package/murata-cyw-fw/murata-cyw-fw.hash @@ -0,0 +1,5 @@ +# Locally calculated +sha256 c3ecf357786d6db6f3283c0ea36ec067b1728f801fd8871694aed1502a82e9bc murata-cyw-fw-8d87950bfad28c65926695b7357bd8995b60016a.tar.gz +sha256 03c140ae04f9c2036678262d6457b9c4b4a9ebb523c5e681af6d57b97c11da37 cyw-fmac-nvram-d27f1bf105fa1e5b828e355793b88d4b66188411.tar.gz +sha256 8f23ebb9a262112b62ace1e1bedcdeb00523d9a45e8d48a829d4ca35db4f0280 cyw-bt-patch-748462f0b02ec4aeb500bedd60780ac51c37be31.tar.gz +sha256 3a892759b73e8b459f1a750954b316118b0061fd9d1868d11fa258c104ee7e0c LICENCE.cypress diff --git a/package/murata-cyw-fw/murata-cyw-fw.mk b/package/murata-cyw-fw/murata-cyw-fw.mk new file mode 100644 index 00000000..b99168b8 --- /dev/null +++ b/package/murata-cyw-fw/murata-cyw-fw.mk @@ -0,0 +1,98 @@ +################################################################################ +# +# murata-cyw-fw +# +################################################################################ + +MURATA_CYW_FW_VERSION = 8d87950bfad28c65926695b7357bd8995b60016a +MURATA_CYW_FW_VERSION_NVRAM = d27f1bf105fa1e5b828e355793b88d4b66188411 +MURATA_CYW_FW_VERSION_BT_PATCH = 748462f0b02ec4aeb500bedd60780ac51c37be31 +MURATA_CYW_FW_SITE = $(call github,murata-wireless,cyw-fmac-fw,$(MURATA_CYW_FW_VERSION)) +MURATA_CYW_FW_EXTRA_DOWNLOADS = \ + $(call github,murata-wireless,cyw-fmac-nvram,$(MURATA_CYW_FW_VERSION_NVRAM))/cyw-fmac-nvram-$(MURATA_CYW_FW_VERSION_NVRAM).tar.gz \ + $(call github,murata-wireless,cyw-bt-patch,$(MURATA_CYW_FW_VERSION_BT_PATCH))/cyw-bt-patch-$(MURATA_CYW_FW_VERSION_BT_PATCH).tar.gz +MURATA_CYW_FW_LICENSE = PROPRIETARY +MURATA_CYW_FW_LICENSE_FILES = LICENCE.cypress +MURATA_CYW_FW_REDISTRIBUTE = NO + +define MURATA_CYW_FW_EXTRACT_NVRAM_PATCH + $(foreach tar,$(notdir $(MURATA_CYW_FW_EXTRA_DOWNLOADS)), \ + $(call suitable-extractor,$(tar)) $(MURATA_CYW_FW_DL_DIR)/$(tar) | \ + $(TAR) --strip-components=1 -C $(@D) $(TAR_OPTIONS) - + ) +endef +MURATA_CYW_FW_POST_EXTRACT_HOOKS += MURATA_CYW_FW_EXTRACT_NVRAM_PATCH + +MURATA_CYW_FW_FILES_$(BR2_PACKAGE_MURATA_CYW_FW_CYW43012) += \ + brcmfmac43012-sdio.bin \ + brcmfmac43012-sdio.1LV.clm_blob \ + brcmfmac43012-sdio.1LV.txt \ + CYW43012C0.1LV.hcd +MURATA_CYW_FW_FILES_$(BR2_PACKAGE_MURATA_CYW_FW_CYW43340) += \ + brcmfmac43340-sdio.bin \ + brcmfmac43340-sdio.1BW.txt \ + CYW43341B0.1BW.hcd +MURATA_CYW_FW_FILES_$(BR2_PACKAGE_MURATA_CYW_FW_CYW43362) += \ + brcmfmac43362-sdio.bin \ + brcmfmac43362-sdio.SN8000.txt +MURATA_CYW_FW_FILES_$(BR2_PACKAGE_MURATA_CYW_FW_CYW4339) += \ + brcmfmac4339-sdio.bin +MURATA_CYW_FW_FILES_$(BR2_PACKAGE_MURATA_CYW_FW_CYW4339_1CK) += \ + brcmfmac4339-sdio.1CK.txt +MURATA_CYW_FW_FILES_$(BR2_PACKAGE_MURATA_CYW_FW_CYW4339_ZP) += \ + brcmfmac4339-sdio.ZP.txt \ + CYW4335C0.ZP.hcd +MURATA_CYW_FW_FILES_$(BR2_PACKAGE_MURATA_CYW_FW_CYW43430) += \ + brcmfmac43430-sdio.bin +MURATA_CYW_FW_FILES_$(BR2_PACKAGE_MURATA_CYW_FW_CYW43430_1DX) += \ + brcmfmac43430-sdio.1DX.clm_blob \ + brcmfmac43430-sdio.1DX.txt \ + CYW43430A1.1DX.hcd +MURATA_CYW_FW_FILES_$(BR2_PACKAGE_MURATA_CYW_FW_CYW43430_1FX) += \ + brcmfmac43430-sdio.1FX.clm_blob \ + brcmfmac43430-sdio.1FX.txt +MURATA_CYW_FW_FILES_$(BR2_PACKAGE_MURATA_CYW_FW_CYW43430_1LN) += \ + brcmfmac43430-sdio.1LN.clm_blob \ + brcmfmac43430-sdio.1LN.txt +MURATA_CYW_FW_FILES_$(BR2_PACKAGE_MURATA_CYW_FW_CYW43455) += \ + brcmfmac43455-sdio.bin +MURATA_CYW_FW_FILES_$(BR2_PACKAGE_MURATA_CYW_FW_CYW43455_1HK) += \ + brcmfmac43455-sdio.1HK.clm_blob \ + brcmfmac43455-sdio.1HK.txt +MURATA_CYW_FW_FILES_$(BR2_PACKAGE_MURATA_CYW_FW_CYW43455_1LC) += \ + brcmfmac43455-sdio.1LC.clm_blob \ + brcmfmac43455-sdio.1LC.txt +MURATA_CYW_FW_FILES_$(BR2_PACKAGE_MURATA_CYW_FW_CYW43455_1MW) += \ + brcmfmac43455-sdio.1MW.clm_blob \ + brcmfmac43455-sdio.1MW.txt \ + CYW4345C0.1MW.hcd +MURATA_CYW_FW_FILES_$(BR2_PACKAGE_MURATA_CYW_FW_CYW4354) += \ + brcmfmac4354-sdio.bin \ + brcmfmac4354-sdio.1BB.clm_blob \ + brcmfmac4354-sdio.1BB.txt \ + CYW4350C0.1BB.hcd +MURATA_CYW_FW_FILES_$(BR2_PACKAGE_MURATA_CYW_FW_CYW4356) += \ + brcmfmac4356-pcie.bin \ + brcmfmac4356-pcie.1CX.clm_blob \ + brcmfmac4356-pcie.1CX.txt \ + CYW4354A2.1CX.hcd +MURATA_CYW_FW_FILES_$(BR2_PACKAGE_MURATA_CYW_FW_CYW4359) += \ + brcmfmac4359-pcie.bin \ + brcmfmac4359-pcie.1FD.clm_blob + +# Helper that assumes filename with model has two dots (CHIP.MODEL.EXT), +# but filename without model has only single dot (CHIP.EXT). +murata-cyw-fw-strip-model = $(shell echo -n $(1) | sed 's/\..*\./\./') + +# Helper that strips model name and renames Bluetooth patch files to the ones +# expected by Linux kernel. +murata-cyw-fw-file-rename = $(call murata-cyw-fw-strip-model,$(patsubst CYW%,BCM%,$(f))) + +define MURATA_CYW_FW_INSTALL_TARGET_CMDS + $(foreach f,$(MURATA_CYW_FW_FILES_y), \ + $(INSTALL) -m 0644 -D $(@D)/$(f) \ + $(TARGET_DIR)/lib/firmware/brcm/$(call murata-cyw-fw-file-rename,$(f)) + ) +endef + +$(eval $(generic-package)) diff --git a/package/musepack/0001-shared.patch b/package/musepack/0001-shared.patch new file mode 100644 index 00000000..d8c788db --- /dev/null +++ b/package/musepack/0001-shared.patch @@ -0,0 +1,24 @@ +Fixup installation of shared mpcdec library. +Based on gentoo patch. + +Signed-off-by: Gustavo Zacarias +--- + +diff -Nura musepack_src_r475.orig/libmpcdec/CMakeLists.txt musepack_src_r475/libmpcdec/CMakeLists.txt +--- musepack_src_r475.orig/libmpcdec/CMakeLists.txt 2010-08-21 12:55:01.000000000 -0300 ++++ musepack_src_r475/libmpcdec/CMakeLists.txt 2011-08-17 15:53:06.126873408 -0300 +@@ -1,7 +1,12 @@ + include_directories(${libmpc_SOURCE_DIR}/include) + if(SHARED) +- add_library(mpcdec SHARED huffman mpc_decoder mpc_reader streaminfo mpc_bits_reader mpc_demux requant synth_filter ${libmpc_SOURCE_DIR}/common/crc32) ++ add_library(mpcdec_shared SHARED huffman mpc_decoder mpc_reader streaminfo mpc_bits_reader mpc_demux requant synth_filter ${libmpc_SOURCE_DIR}/common/crc32) ++ set_target_properties(mpcdec_shared PROPERTIES OUTPUT_NAME mpcdec CLEAN_DIRECT_OUTPUT 1 VERSION 7.0.1 SOVERSION 7) ++ target_link_libraries(mpcdec_shared m) ++ install(TARGETS mpcdec_shared LIBRARY DESTINATION "lib${LIB_SUFFIX}" ARCHIVE DESTINATION "lib${LIB_SUFFIX}") + else(SHARED) + add_library(mpcdec_static STATIC huffman mpc_decoder mpc_reader streaminfo mpc_bits_reader mpc_demux requant synth_filter ${libmpc_SOURCE_DIR}/common/crc32) ++ set_target_properties(mpcdec_static PROPERTIES OUTPUT_NAME mpcdec CLEAN_DIRECT_OUTPUT 1) ++ target_link_libraries(mpcdec_static m) ++ install(TARGETS mpcdec_static LIBRARY DESTINATION "lib${LIB_SUFFIX}" ARCHIVE DESTINATION "lib${LIB_SUFFIX}") + endif(SHARED) +- diff --git a/package/musepack/0002-cmake-use-the-standard-CMake-flag-to-drive-the-share.patch b/package/musepack/0002-cmake-use-the-standard-CMake-flag-to-drive-the-share.patch new file mode 100644 index 00000000..4bfeca0a --- /dev/null +++ b/package/musepack/0002-cmake-use-the-standard-CMake-flag-to-drive-the-share.patch @@ -0,0 +1,43 @@ +From d2f01ba6fa2a065156fad686d1849309c661e527 Mon Sep 17 00:00:00 2001 +From: Samuel Martin +Date: Sun, 31 Aug 2014 12:07:31 +0200 +Subject: [PATCH 2/2] cmake: use the standard CMake flag to drive the shared + object build + +If BUILD_SHARED_LIBS is set and SHARED undefined, then drive SHARED with +the BUILD_SHARED_LIBS value. + +Signed-off-by: Samuel Martin +--- + CMakeLists.txt | 15 ++++++++++----- + 1 file changed, 10 insertions(+), 5 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index b13f78c..db75510 100755 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -7,11 +7,16 @@ project(libmpc C) + set(CMAKE_VERBOSE_MAKEFILE false) + TEST_BIG_ENDIAN(MPC_ENDIANNESS) + +-if(WIN32) +- option(SHARED "Use shared libmpcdec" OFF) +-else(WIN32) +- option(SHARED "Use shared libmpcdec" ON) +-endif(WIN32) ++# Use the standard CMake flag to drive the shared object build. ++if(DEFINED BUILD_SHARED_LIBS AND NOT DEFINED SHARED) ++ set(SHARED ${BUILD_SHARED_LIBS}) ++else() ++ if(WIN32) ++ option(SHARED "Use shared libmpcdec" OFF) ++ else(WIN32) ++ option(SHARED "Use shared libmpcdec" ON) ++ endif(WIN32) ++endif() + + add_definitions(-DFAST_MATH -DCVD_FASTLOG) + +-- +2.1.0 + diff --git a/package/musepack/0003-include-fpu-control-with-glibc-only.patch b/package/musepack/0003-include-fpu-control-with-glibc-only.patch new file mode 100644 index 00000000..6f501557 --- /dev/null +++ b/package/musepack/0003-include-fpu-control-with-glibc-only.patch @@ -0,0 +1,26 @@ +Include only on glibc systems + +The header provides _FPU_*() macros, which the +Init_FPU() function uses only on i386, and only when they are +defined. Since is not available, this causes a build +failure with C libraries such as musl. By simply including + explicitly on glibc systems, we avoid the build +failure, since mpcenc.c already conditionally uses the +macros only if they are defined. + +Signed-off-by: Bernd Kuhls +[Thomas: better commit log.] +Signed-off-by: Thomas Petazzoni + +diff -uNr musepack_src_r475.org/mpcenc/mpcenc.h musepack_src_r475/mpcenc/mpcenc.h +--- musepack_src_r475.org/mpcenc/mpcenc.h 2009-02-23 19:15:46.000000000 +0100 ++++ musepack_src_r475/mpcenc/mpcenc.h 2016-01-30 09:29:08.000000000 +0100 +@@ -50,7 +51,7 @@ + # include + #endif + +-#if defined __linux__ ++#if defined __GLIBC__ + # include + #elif defined __FreeBSD__ + # include diff --git a/package/musepack/0004-missing-sys-select.patch b/package/musepack/0004-missing-sys-select.patch new file mode 100644 index 00000000..1e3a4b11 --- /dev/null +++ b/package/musepack/0004-missing-sys-select.patch @@ -0,0 +1,21 @@ +Add missing include + +This header is needed when types like fd_set are used. This fixes a +build issue occuring on the musl C library. + +Signed-off-by: Bernd Kuhls +[Thomas: better commit log.] +Signed-off-by: Thomas Petazzoni + +Index: b/mpcenc/mpcenc.h +=================================================================== +--- a/mpcenc/mpcenc.h ++++ b/mpcenc/mpcenc.h +@@ -34,6 +34,7 @@ + //// portable system includes ////////////////////////////////////// + #include + #include ++#include + + //// system dependent system includes ////////////////////////////// + // low level I/O, where are prototypes and constants? diff --git a/package/musepack/0005-fix-build-with-gcc-10.patch b/package/musepack/0005-fix-build-with-gcc-10.patch new file mode 100644 index 00000000..012dbab5 --- /dev/null +++ b/package/musepack/0005-fix-build-with-gcc-10.patch @@ -0,0 +1,30 @@ +fix build with gcc 10 + +Define __Cc, __Dc and Res_bit as extern to avoid the following build +failure with gcc 10 (which defaults to -fno-common): + +/nvme/rc-buildroot-test/scripts/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: CMakeFiles/mpcdec_shared.dir/requant.o:(.rodata+0x0): multiple definition of `__Dc'; CMakeFiles/mpcdec_shared.dir/mpc_decoder.o:(.rodata+0x430): first defined here +/nvme/rc-buildroot-test/scripts/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: CMakeFiles/mpcdec_shared.dir/requant.o:(.rodata+0x28): multiple definition of `__Cc'; CMakeFiles/mpcdec_shared.dir/mpc_decoder.o:(.rodata+0x458): first defined here +/nvme/rc-buildroot-test/scripts/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: CMakeFiles/mpcdec_shared.dir/requant.o:(.rodata+0x74): multiple definition of `Res_bit'; CMakeFiles/mpcdec_shared.dir/mpc_decoder.o:(.rodata+0x4a4): first defined here + +Fixes: + - http://autobuild.buildroot.org/results/9971da8c59484a6a26eb79d6e157461a47855dbf + +Signed-off-by: Fabrice Fontaine + +diff -Naur musepack_src_r475.orig/libmpcdec/requant.h musepack_src_r475/libmpcdec/requant.h +--- musepack_src_r475.orig/libmpcdec/requant.h 2020-09-10 08:31:50.696105246 +0200 ++++ musepack_src_r475/libmpcdec/requant.h 2020-09-10 08:32:52.944106476 +0200 +@@ -47,9 +47,9 @@ + + + /* C O N S T A N T S */ +-const mpc_uint8_t Res_bit [18]; ///< Bits per sample for chosen quantizer +-const MPC_SAMPLE_FORMAT __Cc [1 + 18]; ///< Requantization coefficients +-const mpc_int16_t __Dc [1 + 18]; ///< Requantization offset ++extern const mpc_uint8_t Res_bit [18]; ///< Bits per sample for chosen quantizer ++extern const MPC_SAMPLE_FORMAT __Cc [1 + 18]; ///< Requantization coefficients ++extern const mpc_int16_t __Dc [1 + 18]; ///< Requantization offset + + #define Cc (__Cc + 1) + #define Dc (__Dc + 1) diff --git a/package/musepack/Config.in b/package/musepack/Config.in new file mode 100644 index 00000000..f368764b --- /dev/null +++ b/package/musepack/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_MUSEPACK + bool "musepack" + select BR2_PACKAGE_LIBCUEFILE + select BR2_PACKAGE_LIBREPLAYGAIN + help + Musepack is an audio compression format with a strong + emphasis on high quality. It's not lossless, but it is + designed for transparency, so that you won't be able to hear + differences between the original wave file and the much + smaller MPC file. + + http://www.musepack.net/ diff --git a/package/musepack/musepack.hash b/package/musepack/musepack.hash new file mode 100644 index 00000000..b811edd9 --- /dev/null +++ b/package/musepack/musepack.hash @@ -0,0 +1,7 @@ +# From https://www.musepack.net/index.php?pg=src +md5 754d67be67f713e54baf70fcfdb2817e musepack_src_r475.tar.gz +# Calculated based on the hash above +sha256 a4b1742f997f83e1056142d556a8c20845ba764b70365ff9ccf2e3f81c427b2b musepack_src_r475.tar.gz +# Locally computed +sha256 141f551d8e4f037b7f6bc9136b7d3116c7ae9ec8da10c4f14c07c6dc34bc9aa5 libmpcdec/COPYING +sha256 0da88639aebbd614151ee52294fa13789f8cd28d9f2e0a56998b89b5c21ddc2b libmpcenc/quant.c diff --git a/package/musepack/musepack.mk b/package/musepack/musepack.mk new file mode 100644 index 00000000..fc66c684 --- /dev/null +++ b/package/musepack/musepack.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# musepack +# +################################################################################ + +MUSEPACK_VERSION = r475 +MUSEPACK_SITE = http://files.musepack.net/source +MUSEPACK_SOURCE = musepack_src_$(MUSEPACK_VERSION).tar.gz +MUSEPACK_DEPENDENCIES = libcuefile libreplaygain +MUSEPACK_INSTALL_STAGING = YES +MUSEPACK_MAKE = $(MAKE1) +MUSEPACK_LICENSE = BSD-3-Clause (*mpcdec), LGPL-2.1+ (*mpcenc) +MUSEPACK_LICENSE_FILES = libmpcdec/COPYING libmpcenc/quant.c + +$(eval $(cmake-package)) diff --git a/package/musl-compat-headers/Config.in b/package/musl-compat-headers/Config.in new file mode 100644 index 00000000..c672f9ca --- /dev/null +++ b/package/musl-compat-headers/Config.in @@ -0,0 +1,2 @@ +config BR2_PACKAGE_MUSL_COMPAT_HEADERS + bool diff --git a/package/musl-compat-headers/cdefs.h b/package/musl-compat-headers/cdefs.h new file mode 100644 index 00000000..6fe7aa43 --- /dev/null +++ b/package/musl-compat-headers/cdefs.h @@ -0,0 +1,51 @@ +/* Copyright (C) 2016 Yann E. MORIN + * + * This file is in the Public Domain. + * + * For jurisdictions in which the Public Domain does not exist + * or it is not otherwise applicable, this file is licensed CC0 + * (Creative Commons Zero). + */ + +/* This file contains definitions for non-standard macros defined by + * glibc, but quite commonly used in packages. + * + * Because they are non-standard, musl does not define those macros. + * It does not provide cdefs.h either. + * + * This file is a compatibility header written from scratch, to be + * installed when the C library is musl. + * + * Not all macros from the glibc's cdefs.h are available, only the + * most commonly used ones. + * + * Please refer to the glibc documentation and source code for + * explanations about those macros. + */ + +#ifndef BUILDROOT_SYS_CDEFS_H +#define BUILDROOT_SYS_CDEFS_H + +/* Function prototypes. */ +#undef __P +#define __P(arg) arg + +/* C declarations in C++ mode. */ +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS +# define __END_DECLS +#endif + +/* Don't throw exceptions in C functions. */ +#ifndef __cplusplus +# define __THROW __attribute__ ((__nothrow__)) +# define __NTH(f) __attribute__ ((__nothrow__)) f +#else +# define __THROW +# define __NTH(f) f +#endif + +#endif /* ifndef BUILDROOT_SYS_CDEFS_H */ diff --git a/package/musl-compat-headers/musl-compat-headers.hash b/package/musl-compat-headers/musl-compat-headers.hash new file mode 100644 index 00000000..f8e2a6c5 --- /dev/null +++ b/package/musl-compat-headers/musl-compat-headers.hash @@ -0,0 +1,2 @@ +# Locally calculated +sha256 c13407edd0e33be73cae72514cb234f8612e1c0e54401c9448daffd3a240158b queue.h?rev=1.70 diff --git a/package/musl-compat-headers/musl-compat-headers.mk b/package/musl-compat-headers/musl-compat-headers.mk new file mode 100644 index 00000000..1cfa8948 --- /dev/null +++ b/package/musl-compat-headers/musl-compat-headers.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# musl-compat-headers +# +################################################################################ + +# No main site, just using extra downloads +MUSL_COMPAT_HEADERS_QUEUE_H = http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/sys/queue.h?rev=1.70 + +MUSL_COMPAT_HEADERS_EXTRA_DOWNLOADS = $(MUSL_COMPAT_HEADERS_QUEUE_H) + +MUSL_COMPAT_HEADERS_LICENSE = BSD-3-Clause, Public Domain or CC0 +MUSL_COMPAT_HEADERS_LICENSE_FILES = queue.h cdefs.h + +MUSL_COMPAT_HEADERS_ADD_TOOLCHAIN_DEPENDENCY = NO + +# Only installs headers +MUSL_COMPAT_HEADERS_INSTALL_TARGET = NO +MUSL_COMPAT_HEADERS_INSTALL_STAGING = YES + +# Copying both headers so legal-info finds them (they are _LICENSE_FILES) +define MUSL_COMPAT_HEADERS_EXTRACT_CMDS + $(INSTALL) -m 0644 -D $(MUSL_COMPAT_HEADERS_DL_DIR)/$(notdir $(MUSL_COMPAT_HEADERS_QUEUE_H)) $(@D)/queue.h + $(INSTALL) -m 0644 -D $(MUSL_COMPAT_HEADERS_PKGDIR)/cdefs.h $(@D)/cdefs.h +endef + +define MUSL_COMPAT_HEADERS_INSTALL_STAGING_CMDS + $(INSTALL) -D -m 0644 $(@D)/queue.h \ + $(STAGING_DIR)/usr/include/sys/queue.h + $(INSTALL) -D -m 0644 $(@D)/cdefs.h \ + $(STAGING_DIR)/usr/include/sys/cdefs.h +endef + +$(eval $(generic-package)) diff --git a/package/musl-fts/Config.in b/package/musl-fts/Config.in new file mode 100644 index 00000000..358bf271 --- /dev/null +++ b/package/musl-fts/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_MUSL_FTS + bool "musl-fts" + depends on !BR2_TOOLCHAIN_USES_GLIBC + help + The musl-fts package implements the fts(3) functions + fts_open, fts_read, fts_children, fts_set and fts_close, + which are missing in musl and uClibc-ng C libraries. + + https://github.com/void-linux/musl-fts diff --git a/package/musl-fts/musl-fts.hash b/package/musl-fts/musl-fts.hash new file mode 100644 index 00000000..8838c847 --- /dev/null +++ b/package/musl-fts/musl-fts.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 49ae567a96dbab22823d045ffebe0d6b14b9b799925e9ca9274d47d26ff482a6 musl-fts-1.2.7.tar.gz +sha256 55af87e4017668f54467a3380e7ebbac5e672d8c763bfe95e6fc882a6fdc4046 COPYING diff --git a/package/musl-fts/musl-fts.mk b/package/musl-fts/musl-fts.mk new file mode 100644 index 00000000..dd7f1f9e --- /dev/null +++ b/package/musl-fts/musl-fts.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# musl-fts +# +################################################################################ + +MUSL_FTS_VERSION = 1.2.7 +MUSL_FTS_SITE = $(call github,void-linux,musl-fts,v$(MUSL_FTS_VERSION)) +MUSL_FTS_AUTORECONF = YES +MUSL_FTS_LICENSE = BSD-3-Clause +MUSL_FTS_LICENSE_FILES = COPYING +# pkg-config needed for autoreconf +MUSL_FTS_DEPENDENCIES = host-pkgconf +MUSL_FTS_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/musl/0001-avoid-kernel-if_ether.h.patch b/package/musl/0001-avoid-kernel-if_ether.h.patch new file mode 100644 index 00000000..8efbcc84 --- /dev/null +++ b/package/musl/0001-avoid-kernel-if_ether.h.patch @@ -0,0 +1,30 @@ +From 3984adc4976de7553f51e0cf4de1e18c373b332b Mon Sep 17 00:00:00 2001 +From: Baruch Siach +Date: Thu, 15 Dec 2016 15:10:19 +0200 +Subject: [PATCH] Avoid redefinition of struct ethhdr + +This is a workaround to the if_ether.h conflict between musl and the kernel. +Both define struct ethhdr. + +Signed-off-by: Baruch Siach +--- + include/netinet/if_ether.h | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/include/netinet/if_ether.h b/include/netinet/if_ether.h +index 11ee65823f93..cfe1949d3371 100644 +--- a/include/netinet/if_ether.h ++++ b/include/netinet/if_ether.h +@@ -1,6 +1,9 @@ + #ifndef _NETINET_IF_ETHER_H + #define _NETINET_IF_ETHER_H + ++/* Suppress kernel if_ether.h header inclusion */ ++#define _LINUX_IF_ETHER_H ++ + #include + #include + +-- +2.10.2 + diff --git a/package/musl/0002-package-musl-Make-scheduler-functions-Linux-compatib.patch b/package/musl/0002-package-musl-Make-scheduler-functions-Linux-compatib.patch new file mode 100644 index 00000000..7c3acf9f --- /dev/null +++ b/package/musl/0002-package-musl-Make-scheduler-functions-Linux-compatib.patch @@ -0,0 +1,76 @@ +From 407c96fc790d0d11ca9603a2a533216c745b5051 Mon Sep 17 00:00:00 2001 +From: Stefan Nickl +Date: Mon, 13 May 2019 22:33:21 +0200 +Subject: [PATCH] Make scheduler functions Linux-compatible + +Let sched_getscheduler(), sched_setscheduler(), sched_getparam(), +sched_setparam() invoke the Linux syscalls of the same name instead +of returning -ENOSYS. + +Signed-off-by: Stefan Nickl +--- + src/sched/sched_getparam.c | 3 +-- + src/sched/sched_getscheduler.c | 3 +-- + src/sched/sched_setparam.c | 3 +-- + src/sched/sched_setscheduler.c | 3 +-- + 4 files changed, 4 insertions(+), 8 deletions(-) + +diff --git a/src/sched/sched_getparam.c b/src/sched/sched_getparam.c +index 76f10e4..65be107 100644 +--- a/src/sched/sched_getparam.c ++++ b/src/sched/sched_getparam.c +@@ -1,8 +1,7 @@ + #include +-#include + #include "syscall.h" + + int sched_getparam(pid_t pid, struct sched_param *param) + { +- return __syscall_ret(-ENOSYS); ++ return syscall(SYS_sched_getparam, pid, param); + } +diff --git a/src/sched/sched_getscheduler.c b/src/sched/sched_getscheduler.c +index 394e508..4c922f6 100644 +--- a/src/sched/sched_getscheduler.c ++++ b/src/sched/sched_getscheduler.c +@@ -1,8 +1,7 @@ + #include +-#include + #include "syscall.h" + + int sched_getscheduler(pid_t pid) + { +- return __syscall_ret(-ENOSYS); ++ return syscall(SYS_sched_getscheduler, pid); + } +diff --git a/src/sched/sched_setparam.c b/src/sched/sched_setparam.c +index 18623ee..f699faf 100644 +--- a/src/sched/sched_setparam.c ++++ b/src/sched/sched_setparam.c +@@ -1,8 +1,7 @@ + #include +-#include + #include "syscall.h" + + int sched_setparam(pid_t pid, const struct sched_param *param) + { +- return __syscall_ret(-ENOSYS); ++ return syscall(SYS_sched_setparam, pid, param); + } +diff --git a/src/sched/sched_setscheduler.c b/src/sched/sched_setscheduler.c +index 4435f21..e678221 100644 +--- a/src/sched/sched_setscheduler.c ++++ b/src/sched/sched_setscheduler.c +@@ -1,8 +1,7 @@ + #include +-#include + #include "syscall.h" + + int sched_setscheduler(pid_t pid, int sched, const struct sched_param *param) + { +- return __syscall_ret(-ENOSYS); ++ return syscall(SYS_sched_setscheduler, pid, sched, param); + } +-- +2.21.0 + diff --git a/package/musl/Config.in b/package/musl/Config.in new file mode 100644 index 00000000..69da615b --- /dev/null +++ b/package/musl/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_MUSL + bool + default y + depends on BR2_TOOLCHAIN_USES_MUSL + select BR2_PACKAGE_LINUX_HEADERS + # SSP broken on i386/ppc: http://www.openwall.com/lists/musl/2016/12/04/2 + select BR2_TOOLCHAIN_HAS_SSP if BR2_PACKAGE_HOST_BINUTILS_SUPPORTS_CFI \ + && !(BR2_i386 || BR2_powerpc) + # Compatibility headers: cdefs.h, queue.h + select BR2_PACKAGE_MUSL_COMPAT_HEADERS + help + https://www.musl-libc.org/ diff --git a/package/musl/musl.hash b/package/musl/musl.hash new file mode 100644 index 00000000..4ab18ceb --- /dev/null +++ b/package/musl/musl.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature from +# https://musl.libc.org/releases/musl-1.2.2.tar.gz.asc +sha256 9b969322012d796dc23dda27a35866034fa67d8fb67e0e2c45c913c3d43219dd musl-1.2.2.tar.gz +sha256 f9bc4423732350eb0b3f7ed7e91d530298476f8fec0c6c427a1c04ade22655af COPYRIGHT diff --git a/package/musl/musl.mk b/package/musl/musl.mk new file mode 100644 index 00000000..d4f26b50 --- /dev/null +++ b/package/musl/musl.mk @@ -0,0 +1,65 @@ +################################################################################ +# +# musl +# +################################################################################ + +MUSL_VERSION = 1.2.2 +MUSL_SITE = http://www.musl-libc.org/releases +MUSL_LICENSE = MIT +MUSL_LICENSE_FILES = COPYRIGHT +MUSL_CPE_ID_VENDOR = musl-libc + +# Before musl is configured, we must have the first stage +# cross-compiler and the kernel headers +MUSL_DEPENDENCIES = host-gcc-initial linux-headers + +# musl does not provide an implementation for sys/queue.h or sys/cdefs.h. +# So, add the musl-compat-headers package that will install those files, +# into the staging directory: +# sys/queue.h: header from NetBSD +# sys/cdefs.h: minimalist header bundled in Buildroot +MUSL_DEPENDENCIES += musl-compat-headers + +# musl is part of the toolchain so disable the toolchain dependency +MUSL_ADD_TOOLCHAIN_DEPENDENCY = NO + +MUSL_INSTALL_STAGING = YES + +# Thumb build is broken, build in ARM mode, since all architectures +# that support Thumb1 also support ARM. +ifeq ($(BR2_ARM_INSTRUCTIONS_THUMB),y) +MUSL_EXTRA_CFLAGS += -marm +endif + +define MUSL_CONFIGURE_CMDS + (cd $(@D); \ + $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(filter-out -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64,$(TARGET_CFLAGS)) $(MUSL_EXTRA_CFLAGS)" \ + CPPFLAGS="$(filter-out -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64,$(TARGET_CPPFLAGS))" \ + ./configure \ + --target=$(GNU_TARGET_NAME) \ + --host=$(GNU_TARGET_NAME) \ + --prefix=/usr \ + --libdir=/lib \ + --disable-gcc-wrapper \ + --enable-static \ + $(if $(BR2_STATIC_LIBS),--disable-shared,--enable-shared)) +endef + +define MUSL_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define MUSL_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + DESTDIR=$(STAGING_DIR) install-libs install-tools install-headers +endef + +define MUSL_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + DESTDIR=$(TARGET_DIR) install-libs + $(RM) $(addprefix $(TARGET_DIR)/lib/,crt1.o crtn.o crti.o rcrt1.o Scrt1.o) +endef + +$(eval $(generic-package)) diff --git a/package/mutt/0001-Ensure-IMAP-connection-is-closed-after-a-connection-error.patch b/package/mutt/0001-Ensure-IMAP-connection-is-closed-after-a-connection-error.patch new file mode 100644 index 00000000..7afc7360 --- /dev/null +++ b/package/mutt/0001-Ensure-IMAP-connection-is-closed-after-a-connection-error.patch @@ -0,0 +1,48 @@ +From 04b06aaa3e0cc0022b9b01dbca2863756ebbf59a Mon Sep 17 00:00:00 2001 +From: Kevin McCarthy +Date: Mon, 16 Nov 2020 10:20:21 -0800 +Subject: [PATCH] Ensure IMAP connection is closed after a connection error. + +During connection, if the server provided an illegal initial response, +Mutt "bailed", but did not actually close the connection. The calling +code unfortunately relied on the connection status to decide to +continue with authentication, instead of checking the "bail" return +value. + +This could result in authentication credentials being sent over an +unencrypted connection, without $ssl_force_tls being consulted. + +Fix this by strictly closing the connection on any invalid response +during connection. The fix is intentionally small, to ease +backporting. A better fix would include removing the 'err_close_conn' +label, and perhaps adding return value checking in the caller (though +this change obviates the need for that). + +This addresses CVE-2020-28896. Thanks to Gabriel Salles-Loustau for +reporting the problem, and providing test cases to reproduce. + +[Retrieved from: +https://gitlab.com/muttmua/mutt/-/commit/04b06aaa3e0cc0022b9b01dbca2863756ebbf59a] +Signed-off-by: Fabrice Fontaine +--- + imap/imap.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/imap/imap.c b/imap/imap.c +index b24e8a3f..b13dd54d 100644 +--- a/imap/imap.c ++++ b/imap/imap.c +@@ -561,9 +561,9 @@ int imap_open_connection (IMAP_DATA* idata) + + #if defined(USE_SSL) + err_close_conn: +- imap_close_connection (idata); + #endif + bail: ++ imap_close_connection (idata); + FREE (&idata->capstr); + return -1; + } +-- +GitLab + diff --git a/package/mutt/0002-CVE-2021-3181-1.patch b/package/mutt/0002-CVE-2021-3181-1.patch new file mode 100644 index 00000000..cbb12cf2 --- /dev/null +++ b/package/mutt/0002-CVE-2021-3181-1.patch @@ -0,0 +1,40 @@ +From 4a2becbdb4422aaffe3ce314991b9d670b7adf17 Mon Sep 17 00:00:00 2001 +From: Kevin McCarthy +Date: Sun, 17 Jan 2021 10:40:37 -0800 +Subject: [PATCH] Fix memory leak parsing group addresses without a display + name. + +When there was a group address terminator with no previous +addresses (including the group display-name), an address would be +allocated but not attached to the address list. + +Change this to only allocate when last exists. + +It would be more correct to not allocate at all unless we are inside a +group list, but I will address that in a separate commit to master. + +[Retrieved from: +https://git.launchpad.net/ubuntu/+source/mutt/plain/debian/patches/CVE-2021-3181-1.patch?h=import/1.14.6-1ubuntu0.2] +Signed-off-by: Peter Korsgaard +--- + rfc822.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +Index: mutt-1.14.6/rfc822.c +=================================================================== +--- mutt-1.14.6.orig/rfc822.c ++++ mutt-1.14.6/rfc822.c +@@ -491,11 +491,10 @@ ADDRESS *rfc822_parse_adrlist (ADDRESS * + #endif + + /* add group terminator */ +- cur = rfc822_new_address (); + if (last) + { +- last->next = cur; +- last = cur; ++ last->next = rfc822_new_address (); ++ last = last->next; + } + + phraselen = 0; diff --git a/package/mutt/0003-CVE-2021-3181-2.patch b/package/mutt/0003-CVE-2021-3181-2.patch new file mode 100644 index 00000000..c3184a40 --- /dev/null +++ b/package/mutt/0003-CVE-2021-3181-2.patch @@ -0,0 +1,53 @@ +From 939b02b33ae29bc0d642570c1dcfd4b339037d19 Mon Sep 17 00:00:00 2001 +From: Kevin McCarthy +Date: Sun, 17 Jan 2021 10:53:19 -0800 +Subject: [PATCH] Don't allocate a group terminator unless we are in a + group-list. + +This will reduce memory allocation for garbage/spam address lists. + +It also makes no sense to store a terminator when there wasn't a +display-name indicating the start of a group. + +[Retrieved from: +https://git.launchpad.net/ubuntu/+source/mutt/plain/debian/patches/CVE-2021-3181-2.patch?h=import/1.14.6-1ubuntu0.2] +Signed-off-by: Peter Korsgaard +--- + rfc822.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +Index: mutt-1.14.6/rfc822.c +=================================================================== +--- mutt-1.14.6.orig/rfc822.c ++++ mutt-1.14.6/rfc822.c +@@ -378,7 +378,7 @@ add_addrspec (ADDRESS **top, ADDRESS **l + + ADDRESS *rfc822_parse_adrlist (ADDRESS *top, const char *s) + { +- int ws_pending, nl; ++ int ws_pending, nl, in_group = 0; + #ifdef EXACT_ADDRESS + const char *begin; + #endif +@@ -455,6 +455,7 @@ ADDRESS *rfc822_parse_adrlist (ADDRESS * + terminate_buffer (phrase, phraselen); + cur->mailbox = safe_strdup (phrase); + cur->group = 1; ++ in_group = 1; + + if (last) + last->next = cur; +@@ -491,11 +492,12 @@ ADDRESS *rfc822_parse_adrlist (ADDRESS * + #endif + + /* add group terminator */ +- if (last) ++ if (last && in_group) + { + last->next = rfc822_new_address (); + last = last->next; + } ++ in_group = 0; + + phraselen = 0; + commentlen = 0; diff --git a/package/mutt/0004-CVE-2021-3181-3.patch b/package/mutt/0004-CVE-2021-3181-3.patch new file mode 100644 index 00000000..42d0cbae --- /dev/null +++ b/package/mutt/0004-CVE-2021-3181-3.patch @@ -0,0 +1,30 @@ +From d4305208955c5cdd9fe96dfa61e7c1e14e176a14 Mon Sep 17 00:00:00 2001 +From: Kevin McCarthy +Date: Sun, 17 Jan 2021 11:05:36 -0800 +Subject: [PATCH] Add group terminator if it is left off. + +If there is no terminating ";" add one to the list, to make the text +re-rendering correct. + +[Retrieved from: +https://git.launchpad.net/ubuntu/+source/mutt/plain/debian/patches/CVE-2021-3181-3.patch?h=import/1.14.6-1ubuntu0.2] +Signed-off-by: Peter Korsgaard +--- + rfc822.c | 4 ++++ + 1 file changed, 4 insertions(+) + +Index: mutt-1.14.6/rfc822.c +=================================================================== +--- mutt-1.14.6.orig/rfc822.c ++++ mutt-1.14.6/rfc822.c +@@ -560,6 +560,10 @@ ADDRESS *rfc822_parse_adrlist (ADDRESS * + last->val = mutt_substrdup (begin, s - nl < begin ? begin : s - nl); + #endif + ++ /* add group terminator, if it was left off */ ++ if (last && in_group) ++ last->next = rfc822_new_address (); ++ + return top; + } + diff --git a/package/mutt/0005-Fix-seqset-iterator-when-it-ends-in-a-comma.patch b/package/mutt/0005-Fix-seqset-iterator-when-it-ends-in-a-comma.patch new file mode 100644 index 00000000..b7a51ddc --- /dev/null +++ b/package/mutt/0005-Fix-seqset-iterator-when-it-ends-in-a-comma.patch @@ -0,0 +1,40 @@ +From 7c4779ac24d2fb68a2a47b58c7904118f40965d5 Mon Sep 17 00:00:00 2001 +From: Kevin McCarthy +Date: Mon, 3 May 2021 13:11:30 -0700 +Subject: [PATCH] Fix seqset iterator when it ends in a comma. + +If the seqset ended with a comma, the substr_end marker would be just +before the trailing nul. In the next call, the loop to skip the +marker would iterate right past the end of string too. + +The fix is simple: place the substr_end marker and skip past it +immediately. + +Signed-off-by: Peter Korsgaard +[Peter: fixes CVE-2021-32055] +--- + imap/util.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/imap/util.c b/imap/util.c +index c529fd8f..488e8396 100644 +--- a/imap/util.c ++++ b/imap/util.c +@@ -1036,13 +1036,11 @@ int mutt_seqset_iterator_next (SEQSET_ITERATOR *iter, unsigned int *next) + if (iter->substr_cur == iter->eostr) + return 1; + +- while (!*(iter->substr_cur)) +- iter->substr_cur++; + iter->substr_end = strchr (iter->substr_cur, ','); + if (!iter->substr_end) + iter->substr_end = iter->eostr; + else +- *(iter->substr_end) = '\0'; ++ *(iter->substr_end++) = '\0'; + + range_sep = strchr (iter->substr_cur, ':'); + if (range_sep) +-- +2.20.1 + diff --git a/package/mutt/Config.in b/package/mutt/Config.in new file mode 100644 index 00000000..d85c1a7f --- /dev/null +++ b/package/mutt/Config.in @@ -0,0 +1,27 @@ +config BR2_PACKAGE_MUTT + bool "mutt" + depends on BR2_USE_WCHAR + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_NCURSES + help + Mutt is a sophisticated text-based Mail User Agent (MUA) + + http://www.mutt.org/ + +if BR2_PACKAGE_MUTT + +config BR2_PACKAGE_MUTT_IMAP + bool "imap" + help + IMAP support + +config BR2_PACKAGE_MUTT_POP3 + bool "pop3" + help + POP3 support + +endif # BR2_PACKAGE_MUTT + +comment "mutt needs a toolchain w/ wchar" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR diff --git a/package/mutt/mutt.hash b/package/mutt/mutt.hash new file mode 100644 index 00000000..23e5dd0f --- /dev/null +++ b/package/mutt/mutt.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 e4f507b133253cb5eef27996b8668956cdf9caac622cf8adad13f0f9a4eda864 mutt-1.14.7.tar.gz +sha256 732f24b69a6c71cd8e01e4672bb8e12cc1cbb88a50a4665e6ca4fd95000a57ee GPL diff --git a/package/mutt/mutt.mk b/package/mutt/mutt.mk new file mode 100644 index 00000000..9557983a --- /dev/null +++ b/package/mutt/mutt.mk @@ -0,0 +1,121 @@ +################################################################################ +# +# mutt +# +################################################################################ + +MUTT_VERSION = 1.14.7 +MUTT_SITE = https://bitbucket.org/mutt/mutt/downloads +MUTT_LICENSE = GPL-2.0+ +MUTT_LICENSE_FILES = GPL +MUTT_CPE_ID_VENDOR = mutt +MUTT_DEPENDENCIES = ncurses +MUTT_CONF_OPTS = --disable-doc --disable-smtp + +# 0001-Ensure-IMAP-connection-is-closed-after-a-connection-error.patch +MUTT_IGNORE_CVES += CVE-2020-28896 + +# 0002-CVE-2021-3181-1.patch +# 0003-CVE-2021-3181-2.patch +# 0004-CVE-2021-3181-3.patch +MUTT_IGNORE_CVES += CVE-2021-3181 + +ifeq ($(BR2_PACKAGE_LIBICONV),y) +MUTT_DEPENDENCIES += libiconv +MUTT_CONF_OPTS += --enable-iconv +endif + +# Both options can't be selected at the same time so prefer libidn2 +ifeq ($(BR2_PACKAGE_LIBIDN2),y) +MUTT_DEPENDENCIES += libidn2 +MUTT_CONF_OPTS += --with-idn2 --without-idn +else ifeq ($(BR2_PACKAGE_LIBIDN),y) +MUTT_DEPENDENCIES += libidn +MUTT_CONF_OPTS += --with-idn --without-idn2 +else +MUTT_CONF_OPTS += --without-idn --without-idn2 +endif + +ifeq ($(BR2_PACKAGE_LIBGPGME),y) +MUTT_DEPENDENCIES += libgpgme +MUTT_CONF_OPTS += \ + --enable-gpgme \ + --with-gpgme-prefix=$(STAGING_DIR)/usr +else +MUTT_CONF_OPTS += --disable-gpgme +endif + +ifeq ($(BR2_PACKAGE_MUTT_IMAP),y) +MUTT_CONF_OPTS += --enable-imap +else +MUTT_CONF_OPTS += --disable-imap +endif + +ifeq ($(BR2_PACKAGE_MUTT_POP3),y) +MUTT_CONF_OPTS += --enable-pop +else +MUTT_CONF_OPTS += --disable-pop +endif + +# SSL support is only used by imap or pop3 module +ifneq ($(BR2_PACKAGE_MUTT_IMAP)$(BR2_PACKAGE_MUTT_POP3),) +ifeq ($(BR2_PACKAGE_OPENSSL),y) +MUTT_DEPENDENCIES += openssl +MUTT_CONF_OPTS += \ + --without-gnutls \ + --with-ssl=$(STAGING_DIR)/usr +else ifeq ($(BR2_PACKAGE_GNUTLS),y) +MUTT_DEPENDENCIES += gnutls +MUTT_CONF_OPTS += \ + --with-gnutls=$(STAGING_DIR)/usr \ + --without-ssl +else +MUTT_CONF_OPTS += \ + --without-gnutls \ + --without-ssl +endif +else +MUTT_CONF_OPTS += \ + --without-gnutls \ + --without-ssl +endif + +ifeq ($(BR2_PACKAGE_SQLITE),y) +MUTT_DEPENDENCIES += sqlite +MUTT_CONF_OPTS += --with-sqlite3 +else +MUTT_CONF_OPTS += --without-sqlite3 +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +MUTT_DEPENDENCIES += zlib +MUTT_CONF_OPTS += --with-zlib=$(STAGING_DIR)/usr +else +MUTT_CONF_OPTS += --without-zlib +endif + +# Avoid running tests to check for: +# - target system is *BSD +# - C99 conformance (snprintf, vsnprintf) +# - behaviour of the regex library +# - if mail spool directory is world/group writable +# - we have a working libiconv +MUTT_CONF_ENV += \ + mutt_cv_bsdish=no \ + mutt_cv_c99_snprintf=yes \ + mutt_cv_c99_vsnprintf=yes \ + mutt_cv_regex_broken=no \ + mutt_cv_worldwrite=yes \ + mutt_cv_groupwrite=yes \ + mutt_cv_iconv_good=yes \ + mutt_cv_iconv_nontrans=no + +MUTT_CONF_OPTS += --with-mailpath=/var/mail + +define MUTT_VAR_MAIL + mkdir -p $(TARGET_DIR)/var + ln -sf /tmp $(TARGET_DIR)/var/mail +endef +MUTT_POST_INSTALL_TARGET_HOOKS += MUTT_VAR_MAIL + +$(eval $(autotools-package)) diff --git a/package/mxml/Config.in b/package/mxml/Config.in new file mode 100644 index 00000000..d3202b4b --- /dev/null +++ b/package/mxml/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_MXML + bool "Mini-XML" + help + Lightweight XML Library + + http://www.minixml.org diff --git a/package/mxml/mxml.hash b/package/mxml/mxml.hash new file mode 100644 index 00000000..70f82cad --- /dev/null +++ b/package/mxml/mxml.hash @@ -0,0 +1,4 @@ +# Locally computed +sha256 b894f6c64964f2e77902564c17ba00f5d077a7a24054e7c1937903b0bd42c974 mxml-3.2.tar.gz +sha256 c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 LICENSE +sha256 ed63aec4c75b9c21a5156b40052138032269bd27fd6f4bc0c51389807cdc7db9 NOTICE diff --git a/package/mxml/mxml.mk b/package/mxml/mxml.mk new file mode 100644 index 00000000..85930ab3 --- /dev/null +++ b/package/mxml/mxml.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# mxml +# +################################################################################ + +MXML_VERSION = 3.2 +MXML_SITE = https://github.com/michaelrsweet/mxml/releases/download/v$(MXML_VERSION) +MXML_LICENSE = Apache-2.0 with exceptions +MXML_LICENSE_FILES = LICENSE NOTICE +MXML_INSTALL_STAGING = YES + +MXML_INSTALL_STAGING_OPTS = DSTROOT=$(STAGING_DIR) install +MXML_INSTALL_TARGET_OPTS = DSTROOT=$(TARGET_DIR) install + +$(eval $(autotools-package)) diff --git a/package/mxsldr/Config.in.host b/package/mxsldr/Config.in.host new file mode 100644 index 00000000..7c49f020 --- /dev/null +++ b/package/mxsldr/Config.in.host @@ -0,0 +1,14 @@ +config BR2_PACKAGE_HOST_MXSLDR + bool "host mxsldr" + depends on BR2_arm || BR2_armeb + depends on BR2_HOST_GCC_AT_LEAST_4_9 # host-libusb + help + This package contains tools to download and execute code on + Freescale i.MX23 and i.MX28 SoC's through the Serial + Download Protocol. + + https://gitlab.denx.de/denx/mxsldr + +comment "host mxsldr needs a toolchain w/ host gcc >= 4.9" + depends on BR2_arm || BR2_armeb + depends on !BR2_HOST_GCC_AT_LEAST_4_9 diff --git a/package/mxsldr/mxsldr.mk b/package/mxsldr/mxsldr.mk new file mode 100644 index 00000000..239b40ad --- /dev/null +++ b/package/mxsldr/mxsldr.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# mxsldr +# +################################################################################ + +MXSLDR_VERSION = 2793a657ab7a22487d21c1b020957806f8ae8383 +MXSLDR_SITE = git://git.denx.de/mxsldr.git +MXSLDR_LICENSE = GPL-2.0+ +MXSLDR_LICENSE_FILES = COPYING +HOST_MXSLDR_DEPENDENCIES = host-libusb host-pkgconf + +define HOST_MXSLDR_BUILD_CMDS + $(HOST_CONFIGURE_OPTS) $(MAKE) -C $(@D) +endef + +define HOST_MXSLDR_INSTALL_CMDS + $(INSTALL) -m 0755 -D $(@D)/mxsldr $(HOST_DIR)/bin/mxsldr +endef + +$(eval $(host-generic-package)) diff --git a/package/mysql/Config.in b/package/mysql/Config.in new file mode 100644 index 00000000..ef4a9531 --- /dev/null +++ b/package/mysql/Config.in @@ -0,0 +1,84 @@ +config BR2_PACKAGE_MYSQL + bool "mysql support" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Select the desired mysql provider. + +if BR2_PACKAGE_MYSQL + +choice + prompt "mysql variant" + default BR2_PACKAGE_ORACLE_MYSQL + help + Select either the oracle mysql server or the mariadb server + +config BR2_PACKAGE_MARIADB + bool "mariadb" + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_ATOMIC || BR2_TOOLCHAIN_HAS_SYNC_8 + select BR2_PACKAGE_LIBAIO + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_HAS_MYSQL + help + MariaDB is one of the most popular database servers in the + world. It's made by the original developers of MySQL and + guaranteed to stay open source. + + http://www.mariadb.org/ + +comment "mariadb needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_ATOMIC || BR2_TOOLCHAIN_HAS_SYNC_8 + +config BR2_PACKAGE_ORACLE_MYSQL + bool "oracle mysql" + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_HAS_MYSQL + help + The MySQL Open Source Database System + + http://www.mysql.com/ + +endchoice + +if BR2_PACKAGE_MARIADB + +config BR2_PACKAGE_MARIADB_SERVER + bool "mariadb server" + help + Install the mariadb server on the target. + +config BR2_PACKAGE_MARIADB_SERVER_EMBEDDED + bool "mariadb embedded server" + depends on BR2_PACKAGE_MARIADB_SERVER + help + Install the mariadb embedded server on the target. + +endif + +if BR2_PACKAGE_ORACLE_MYSQL + +config BR2_PACKAGE_ORACLE_MYSQL_SERVER + bool "oracle mysql server" + help + Install the MySQL server on the target. + +endif + +config BR2_PACKAGE_HAS_MYSQL + bool + +config BR2_PACKAGE_PROVIDES_MYSQL + string + default "mariadb" if BR2_PACKAGE_MARIADB + default "oracle-mysql" if BR2_PACKAGE_ORACLE_MYSQL + +endif + +comment "mysql needs a toolchain w/ C++, threads" + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/mysql/mysql.mk b/package/mysql/mysql.mk new file mode 100644 index 00000000..d6556256 --- /dev/null +++ b/package/mysql/mysql.mk @@ -0,0 +1,7 @@ +################################################################################ +# +# mysql +# +################################################################################ + +$(eval $(virtual-package)) diff --git a/package/nano/Config.in b/package/nano/Config.in new file mode 100644 index 00000000..b0b7a3e7 --- /dev/null +++ b/package/nano/Config.in @@ -0,0 +1,24 @@ +config BR2_PACKAGE_NANO + bool "nano" + depends on BR2_USE_WCHAR + # full version uses fork() + select BR2_PACKAGE_NANO_TINY if !BR2_USE_MMU + select BR2_PACKAGE_NCURSES + help + A nice ncurses-based editor. Started out as a clone of pico. + Great editor for new users. + + https://www.nano-editor.org/ + +if BR2_PACKAGE_NANO + +config BR2_PACKAGE_NANO_TINY + bool "optimize for size" + default y + help + Disable all features for the sake of size. + +endif + +comment "nano needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR diff --git a/package/nano/nano.hash b/package/nano/nano.hash new file mode 100644 index 00000000..4498414f --- /dev/null +++ b/package/nano/nano.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +# https://www.nano-editor.org/dist/v5/nano-5.5.tar.xz.asc +# using key BFD009061E535052AD0DF2150D28D4D2A0ACE884 +sha256 390b81bf9b41ff736db997aede4d1f60b4453fbd75a519a4ddb645f6fd687e4a nano-5.5.tar.xz +sha256 fc82ca8b6fdb18d4e3e85cfd8ab58d1bcd3f1b29abe782895abd91d64763f8e7 COPYING diff --git a/package/nano/nano.mk b/package/nano/nano.mk new file mode 100644 index 00000000..d47c749e --- /dev/null +++ b/package/nano/nano.mk @@ -0,0 +1,41 @@ +################################################################################ +# +# nano +# +################################################################################ + +NANO_VERSION_MAJOR = 5 +NANO_VERSION = $(NANO_VERSION_MAJOR).5 +NANO_SITE = https://www.nano-editor.org/dist/v$(NANO_VERSION_MAJOR) +NANO_SOURCE = nano-$(NANO_VERSION).tar.xz +NANO_LICENSE = GPL-3.0+ +NANO_LICENSE_FILES = COPYING +NANO_DEPENDENCIES = ncurses + +ifeq ($(BR2_PACKAGE_NCURSES_WCHAR),y) +NANO_CONF_ENV += ac_cv_prog_NCURSESW_CONFIG=$(STAGING_DIR)/usr/bin/$(NCURSES_CONFIG_SCRIPTS) +else +NANO_CONF_ENV += ac_cv_prog_NCURSESW_CONFIG=false +NANO_MAKE_ENV += CURSES_LIB="-lncurses" +endif + +ifeq ($(BR2_PACKAGE_NANO_TINY),y) +NANO_CONF_OPTS += \ + --enable-tiny \ + --disable-libmagic \ + --disable-color \ + --disable-nanorc +define NANO_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 $(@D)/src/nano $(TARGET_DIR)/usr/bin/nano +endef +else +NANO_CONF_OPTS += --disable-tiny +ifeq ($(BR2_PACKAGE_FILE),y) +NANO_DEPENDENCIES += file +NANO_CONF_OPTS += --enable-libmagic --enable-color --enable-nanorc +else +NANO_CONF_OPTS += --disable-libmagic --disable-libmagic --disable-color +endif # BR2_PACKAGE_FILE +endif # BR2_PACKAGE_NANO_TINY + +$(eval $(autotools-package)) diff --git a/package/nanocom/0001-fix-build-with-gcc-10.patch b/package/nanocom/0001-fix-build-with-gcc-10.patch new file mode 100644 index 00000000..8fcc5465 --- /dev/null +++ b/package/nanocom/0001-fix-build-with-gcc-10.patch @@ -0,0 +1,36 @@ +fix build with gcc 10 + +Define curr_state as extern in nanocom.h to avoid the following build +failure with gcc 10 (which defaults to -fno-common): + +/home/buildroot/autobuild/instance-3/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: /tmp/ccLQeiek.o:(.bss+0x7c): multiple definition of `curr_state'; /tmp/ccse155z.o:(.bss+0x0): first defined here + +Fixes: + - http://autobuild.buildroot.org/results/4af4710cb9bbb1bc770b9824339dd7dbf8a80b05 + +Signed-off-by: Fabrice Fontaine + +diff -Naurp nanocom-1.0.orig/nanocom.c nanocom-1.0/nanocom.c +--- nanocom-1.0.orig/nanocom.c 2020-09-04 14:50:15.973320870 +0200 ++++ nanocom-1.0/nanocom.c 2020-09-04 14:53:49.429325087 +0200 +@@ -20,6 +20,8 @@ Based upon microcom by Anca and Lucian J + + #include "nanocom.h" + ++state curr_state; ++ + int crnl_mapping; //0 - no mapping, 1 mapping + + char device[MAX_DEVICE_NAME]; /* serial device name */ +diff -Naurp nanocom-1.0.orig/nanocom.h nanocom-1.0/nanocom.h +--- nanocom-1.0.orig/nanocom.h 2020-09-04 14:50:15.973320870 +0200 ++++ nanocom-1.0/nanocom.h 2020-09-04 14:51:12.269321982 +0200 +@@ -73,7 +73,7 @@ typedef struct { + char echo_type; /*r for remote, l for local and n for none*/ + } state; + +-state curr_state; ++extern state curr_state; + + #endif /* NANOCOM_H */ + diff --git a/package/nanocom/Config.in b/package/nanocom/Config.in new file mode 100644 index 00000000..bc0a0586 --- /dev/null +++ b/package/nanocom/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_NANOCOM + bool "nanocom" + help + Nanocom is based upon microcom (http://microcom.port5.com/) + but removes the scripting and logging features while + introducing support for setting local/remote echo, parity + and stop bits. It also follows a more standard command line + style using the getopt function. Internally much of the + code has been rewritten and reformatted, the menu system in + particular is almost entirely different. + + http://nanocom.sourceforge.net/ diff --git a/package/nanocom/nanocom.hash b/package/nanocom/nanocom.hash new file mode 100644 index 00000000..df35a37b --- /dev/null +++ b/package/nanocom/nanocom.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 5cb26e3e232cfc4a7cb16da432db532b775c5ebdb887ac9d39df5632f2c9a5e5 nanocom.tar.gz +sha256 e6d6a009505e345fe949e1310334fcb0747f28dae2856759de102ab66b722cb4 COPYING diff --git a/package/nanocom/nanocom.mk b/package/nanocom/nanocom.mk new file mode 100644 index 00000000..7893cc6b --- /dev/null +++ b/package/nanocom/nanocom.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# nanocom +# +################################################################################ + +NANOCOM_VERSION = 1.0 +NANOCOM_SOURCE = nanocom.tar.gz +NANOCOM_SITE = http://downloads.sourceforge.net/project/nanocom/nanocom/v$(NANOCOM_VERSION) +NANOCOM_STRIP_COMPONENTS = 0 +NANOCOM_LICENSE = GPL-2.0+ +NANOCOM_LICENSE_FILES = COPYING + +define NANOCOM_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) CC="$(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_LDFLAGS)" -C $(@D) +endef + +define NANOCOM_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/nanocom $(TARGET_DIR)/usr/bin/nanocom +endef + +$(eval $(generic-package)) diff --git a/package/nanomsg/Config.in b/package/nanomsg/Config.in new file mode 100644 index 00000000..0cab8b47 --- /dev/null +++ b/package/nanomsg/Config.in @@ -0,0 +1,23 @@ +config BR2_PACKAGE_NANOMSG + bool "nanomsg" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + nanomsg is a socket library that provides several common + communication patterns. It aims to make the networking layer + fast, scalable, and easy to use. Implemented in C, it works + on a wide range of operating systems with no further + dependencies. + + http://nanomsg.org/ + +if BR2_PACKAGE_NANOMSG + +config BR2_PACKAGE_NANOMSG_TOOLS + bool "Build nanomsg tools" + help + Build nanomsg tools + +endif + +comment "nanomsg needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/nanomsg/nanomsg.hash b/package/nanomsg/nanomsg.hash new file mode 100644 index 00000000..062ac9f6 --- /dev/null +++ b/package/nanomsg/nanomsg.hash @@ -0,0 +1,5 @@ +# Locally computed +sha256 218b31ae1534ab897cb5c419973603de9ca1a5f54df2e724ab4a188eb416df5a nanomsg-1.1.5.tar.gz + +# Hash for license file: +sha256 4e51f6a04312ea7c5f4f0e92d91b6415c1eeb09bdaf86a6fd11d93499457c07a COPYING diff --git a/package/nanomsg/nanomsg.mk b/package/nanomsg/nanomsg.mk new file mode 100644 index 00000000..b86e8c12 --- /dev/null +++ b/package/nanomsg/nanomsg.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# nanomsg +# +################################################################################ + +NANOMSG_VERSION = 1.1.5 +NANOMSG_SITE = $(call github,nanomsg,nanomsg,$(NANOMSG_VERSION)) +NANOMSG_INSTALL_STAGING = YES +NANOMSG_LICENSE = MIT +NANOMSG_LICENSE_FILES = COPYING +NANOMSG_CONF_OPTS = -DNN_ENABLE_DOC=OFF -DNN_TESTS=OFF + +ifeq ($(BR2_STATIC_LIBS),y) +NANOMSG_CONF_OPTS += -DNN_STATIC_LIB=ON +endif + +ifeq ($(BR2_PACKAGE_NANOMSG_TOOLS),y) +NANOMSG_CONF_OPTS += -DNN_TOOLS=ON +else +NANOMSG_CONF_OPTS += -DNN_TOOLS=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/nasm/nasm.hash b/package/nasm/nasm.hash new file mode 100644 index 00000000..86c67d6b --- /dev/null +++ b/package/nasm/nasm.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 3caf6729c1073bf96629b57cee31eeb54f4f8129b01902c73428836550b30a3f nasm-2.15.05.tar.xz +sha256 1563996c52e220e15ef2418e67d39488255aa8c28c89e617074d3afe3ee329e0 LICENSE diff --git a/package/nasm/nasm.mk b/package/nasm/nasm.mk new file mode 100644 index 00000000..ecb08893 --- /dev/null +++ b/package/nasm/nasm.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# nasm +# +################################################################################ + +NASM_VERSION = 2.15.05 +NASM_SOURCE = nasm-$(NASM_VERSION).tar.xz +NASM_SITE = https://www.nasm.us/pub/nasm/releasebuilds/$(NASM_VERSION) +NASM_LICENSE = BSD-2-Clause +NASM_LICENSE_FILES = LICENSE +NASM_CPE_ID_VENDOR = nasm +NASM_CPE_ID_PRODUCT = netwide_assembler + +$(eval $(host-autotools-package)) diff --git a/package/nbd/Config.in b/package/nbd/Config.in new file mode 100644 index 00000000..ad9fb5cc --- /dev/null +++ b/package/nbd/Config.in @@ -0,0 +1,35 @@ +config BR2_PACKAGE_NBD + bool "nbd" + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU + select BR2_PACKAGE_LIBGLIB2 + help + NBD is a set of utilities to configure network block devices, + allowing access to remote block devices over TCP/IP network. + + http://nbd.sf.net/ + +if BR2_PACKAGE_NBD + +config BR2_PACKAGE_NBD_CLIENT + bool "nbd client" + default y + help + The client part of NBD. + +config BR2_PACKAGE_NBD_SERVER + bool "nbd server" + help + The server part of NBD. + +config BR2_PACKAGE_NBD_TRDUMP + bool "nbd trdump" + help + Utility to dump server logs in human-readable form. + +endif + +comment "nbd needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/nbd/nbd.hash b/package/nbd/nbd.hash new file mode 100644 index 00000000..f0df35bc --- /dev/null +++ b/package/nbd/nbd.hash @@ -0,0 +1,7 @@ +# From http://sourceforge.net/projects/nbd/files/nbd/3.21/ +md5 c51c4c500fe1ed84c3d5d5dd2ca71d23 nbd-3.21.tar.xz +sha1 88c3296d43d20d7bda97e0f1bab0243a4f6fa880 nbd-3.21.tar.xz + +# Locally calculated +sha256 e7688af39d91733bbcd2db08062c44fe503d004e51528740139c44aff6a6bef9 nbd-3.21.tar.xz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/nbd/nbd.mk b/package/nbd/nbd.mk new file mode 100644 index 00000000..0a7f08b2 --- /dev/null +++ b/package/nbd/nbd.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# nbd +# +################################################################################ + +NBD_VERSION = 3.21 +NBD_SOURCE = nbd-$(NBD_VERSION).tar.xz +NBD_SITE = http://downloads.sourceforge.net/project/nbd/nbd/$(NBD_VERSION) +NBD_CONF_OPTS = --enable-lfs +NBD_DEPENDENCIES = host-pkgconf libglib2 +NBD_LICENSE = GPL-2.0 +NBD_LICENSE_FILES = COPYING +NBD_CPE_ID_VENDOR = network_block_device_project +NBD_CPE_ID_PRODUCT = network_block_device + +ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y) +# We have linux/falloc.h +# but uClibc lacks fallocate(2) which is a glibc-ism +NBD_CONF_ENV = ac_cv_header_linux_falloc_h=no +endif + +ifneq ($(BR2_PACKAGE_NBD_CLIENT),y) +NBD_TOREMOVE += /usr/sbin/nbd-client +endif +ifneq ($(BR2_PACKAGE_NBD_SERVER),y) +NBD_TOREMOVE += /usr/bin/nbd-server +endif +ifneq ($(BR2_PACKAGE_NBD_TRDUMP),y) +NBD_TOREMOVE += /usr/bin/nbd-trdump +endif + +define NBD_CLEANUP_AFTER_INSTALL + rm -f $(addprefix $(TARGET_DIR), $(NBD_TOREMOVE)) +endef + +NBD_POST_INSTALL_TARGET_HOOKS += NBD_CLEANUP_AFTER_INSTALL + +$(eval $(autotools-package)) diff --git a/package/ncdu/Config.in b/package/ncdu/Config.in new file mode 100644 index 00000000..0e440344 --- /dev/null +++ b/package/ncdu/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_NCDU + bool "ncdu" + depends on BR2_USE_MMU # system() + select BR2_PACKAGE_NCURSES + help + ncdu is a disk usage analyzer with an ncurses interface + + http://dev.yorhel.nl/ncdu diff --git a/package/ncdu/ncdu.hash b/package/ncdu/ncdu.hash new file mode 100644 index 00000000..be2b6e07 --- /dev/null +++ b/package/ncdu/ncdu.hash @@ -0,0 +1,5 @@ +# From https://dev.yorhel.nl/ncdu +sha256 b02ddc4dbf1db139cc6fbbe2f54a282770380f0ca5c17089855eab52a9ea3fb0 ncdu-1.15.1.tar.gz + +# computed locally +sha256 978f49428f21714c973706030c0ef09983cc1e2889a1b7b521dbf8860870cf05 COPYING diff --git a/package/ncdu/ncdu.mk b/package/ncdu/ncdu.mk new file mode 100644 index 00000000..532f145b --- /dev/null +++ b/package/ncdu/ncdu.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# ncdu +# +################################################################################ + +NCDU_VERSION = 1.15.1 +NCDU_SITE = http://dev.yorhel.nl/download + +NCDU_DEPENDENCIES = ncurses + +NCDU_LICENSE = MIT +NCDU_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/ncftp/0001-fix-gcc-10.patch b/package/ncftp/0001-fix-gcc-10.patch new file mode 100644 index 00000000..8ff9c44c --- /dev/null +++ b/package/ncftp/0001-fix-gcc-10.patch @@ -0,0 +1,24 @@ +Fix build with gcc 10 + +Add missing extern to gBm to fix the following build failure with +-fno-common which is enabled by default with gcc 10: + +/usr/lfs/hdd_v1/rc-buildroot-test/scripts/instance-0/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: bookmark.o:(.bss+0x10): multiple definition of `gBm'; gpshare.o:(.bss+0x24): first defined here + +Fixes: + - http://autobuild.buildroot.org/results/78822bc0e0039e8f8949011a256cac022863276f + +Signed-off-by: Fabrice Fontaine + +diff -Nura ncftp-3.2.6-orig/sh_util/gpshare.c ncftp-3.2.6/sh_util/gpshare.c +--- ncftp-3.2.6-orig/sh_util/gpshare.c 2020-08-21 10:46:34.173816750 +0200 ++++ ncftp-3.2.6/sh_util/gpshare.c 2020-08-21 10:52:25.407976319 +0200 +@@ -28,7 +28,7 @@ + + static int gIsAtty1 = 1, gIsAtty2 = 1; + extern int gLoadedBm, gBookmarkMatchMode; +-Bookmark gBm; ++extern Bookmark gBm; + + double + FileSize(double size, const char **uStr0, double *uMult0) diff --git a/package/ncftp/Config.in b/package/ncftp/Config.in new file mode 100644 index 00000000..6a939aa8 --- /dev/null +++ b/package/ncftp/Config.in @@ -0,0 +1,34 @@ +config BR2_PACKAGE_NCFTP + bool "ncftp" + # fork() + depends on BR2_USE_MMU + help + NcFTP Client (also known as just NcFTP) is a set of FREE + application programs implementing the File Transfer Protocol + (FTP). + + http://www.ncftp.com/ncftp/ + +if BR2_PACKAGE_NCFTP + +config BR2_PACKAGE_NCFTP_GET + bool "ncftpget" + default y + +config BR2_PACKAGE_NCFTP_PUT + bool "ncftpput" + default y + +config BR2_PACKAGE_NCFTP_LS + bool "ncftpls" + default y + +config BR2_PACKAGE_NCFTP_BATCH + bool "ncftpbatch/ncftpspooler" + default y + +config BR2_PACKAGE_NCFTP_BOOKMARKS + bool "ncftpbookmarks" + select BR2_PACKAGE_NCURSES + +endif diff --git a/package/ncftp/ncftp.hash b/package/ncftp/ncftp.hash new file mode 100644 index 00000000..3ab27df5 --- /dev/null +++ b/package/ncftp/ncftp.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 129e5954850290da98af012559e6743de193de0012e972ff939df9b604f81c23 ncftp-3.2.6-src.tar.gz +sha256 4fe2f063d25d79c49712a272ebb68e050c703eed9c66c80108427edfe3285580 doc/LICENSE.txt diff --git a/package/ncftp/ncftp.mk b/package/ncftp/ncftp.mk new file mode 100644 index 00000000..676a9c58 --- /dev/null +++ b/package/ncftp/ncftp.mk @@ -0,0 +1,56 @@ +################################################################################ +# +# ncftp +# +################################################################################ + +NCFTP_VERSION = 3.2.6 +# use .gz as upstream .xz tarball has changed after the hash was added for +# 2017.02. Can be changed back to .xz when version is bumped +NCFTP_SOURCE = ncftp-$(NCFTP_VERSION)-src.tar.gz +NCFTP_SITE = ftp://ftp.ncftp.com/ncftp +NCFTP_TARGET_BINS = ncftp +NCFTP_LICENSE = Clarified Artistic License +NCFTP_LICENSE_FILES = doc/LICENSE.txt + +NCFTP_DEPENDENCIES = host-autoconf +NCFTP_CONF_OPTS = --disable-ccdv + +# The bundled configure script is generated by autoconf 2.13 and doesn't +# detect cross-compilation correctly. Therefore, we have to regenerate it. +# We need to pass -I because of the non-standard m4 directory name, and +# none of the other autotools are used, so the below is the easiest. +define NCFTP_RUN_AUTOCONF + (cd $(@D); $(AUTOCONF) -I$(@D)/autoconf_local/) +endef +NCFTP_PRE_CONFIGURE_HOOKS += NCFTP_RUN_AUTOCONF + +ifeq ($(BR2_PACKAGE_NCFTP_GET),y) +NCFTP_TARGET_BINS += ncftpget +endif + +ifeq ($(BR2_PACKAGE_NCFTP_PUT),y) +NCFTP_TARGET_BINS += ncftpput +endif + +ifeq ($(BR2_PACKAGE_NCFTP_LS),y) +NCFTP_TARGET_BINS += ncftpls +endif + +ifeq ($(BR2_PACKAGE_NCFTP_BATCH),y) +NCFTP_TARGET_BINS += ncftpbatch +NCFTP_INSTALL_NCFTP_BATCH = \ + ln -sf /usr/bin/ncftpbatch $(TARGET_DIR)/usr/bin/ncftpspooler +endif + +ifeq ($(BR2_PACKAGE_NCFTP_BOOKMARKS),y) +NCFTP_TARGET_BINS += ncftpbookmarks +NCFTP_DEPENDENCIES += ncurses +endif + +define NCFTP_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 $(addprefix $(NCFTP_DIR)/bin/, $(NCFTP_TARGET_BINS)) $(TARGET_DIR)/usr/bin + $(NCFTP_INSTALL_NCFTP_BATCH) +endef + +$(eval $(autotools-package)) diff --git a/package/ncmpc/0001-meson.build-add-atomic-dependency-for-sparc.patch b/package/ncmpc/0001-meson.build-add-atomic-dependency-for-sparc.patch new file mode 100644 index 00000000..fd245897 --- /dev/null +++ b/package/ncmpc/0001-meson.build-add-atomic-dependency-for-sparc.patch @@ -0,0 +1,43 @@ +From d2bd33ec18c146b27fb5aff7dd0089faa195ef9b Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 11 Feb 2019 21:42:01 +0100 +Subject: [PATCH] meson.build: add atomic dependency for sparc + +Linking with libatomic is needed on sparc otherwise build fails on: +ncmpc@exe/src_Main.cxx.o: In function `std::__atomic_base::operator++()': +/home/buildroot/autobuild/instance-1/output/host/opt/ext-toolchain/sparc-buildroot-linux-uclibc/include/c++/6.4.0/bits/atomic_base.h:296: undefined reference to `__atomic_fetch_add_4' + +Fixes: + - http://autobuild.buildroot.org/results/7ac1a07e4f72633d3ec92b79dc5d8c062490abdc + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/MusicPlayerDaemon/ncmpc/pull/45] +--- + meson.build | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/meson.build b/meson.build +index 2e6defc..b393e39 100644 +--- a/meson.build ++++ b/meson.build +@@ -174,6 +174,9 @@ else + pcre_dep = declare_dependency() + endif + ++# Needed on sparc ++atomic_dep = cc.find_library('atomic', required: false) ++ + inc = include_directories( + 'src', + +@@ -352,6 +355,7 @@ ncmpc = executable('ncmpc', + sources, + include_directories: inc, + dependencies: [ ++ atomic_dep, + thread_dep, + boost_dep, + pcre_dep, +-- +2.14.1 + diff --git a/package/ncmpc/0002-meson.build-link-with-lintl-if-needed.patch b/package/ncmpc/0002-meson.build-link-with-lintl-if-needed.patch new file mode 100644 index 00000000..9f599c89 --- /dev/null +++ b/package/ncmpc/0002-meson.build-link-with-lintl-if-needed.patch @@ -0,0 +1,38 @@ +From 21ad6bf2bcb0745c25a28637449a72eee883a8e2 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 21 Apr 2019 19:19:10 +0200 +Subject: [PATCH] meson.build: link with lintl if needed + +Fixes: + - http://autobuild.buildroot.org/results/d53978fb30d77cb4d10921bf721eff3d066567ce + +Signed-off-by: Fabrice Fontaine +[Upstream status: not sent as upstream already rejected the first patch +on atomic: https://github.com/MusicPlayerDaemon/ncmpc/pull/45] +--- + meson.build | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/meson.build b/meson.build +index 2e6defc..28e9d29 100644 +--- a/meson.build ++++ b/meson.build +@@ -42,6 +42,7 @@ else + error('libintl.h not found') + endif + conf.set('ENABLE_NLS', enable_nls) ++intl_dep = cc.find_library('intl', required: false) + if enable_nls + conf.set_quoted('GETTEXT_PACKAGE', meson.project_name()) + subdir('po') +@@ -356,6 +357,7 @@ ncmpc = executable('ncmpc', + boost_dep, + pcre_dep, + curses_dep, ++ intl_dep, + lirc_dep, + libmpdclient_dep, + ], +-- +2.20.1 + diff --git a/package/ncmpc/Config.in b/package/ncmpc/Config.in new file mode 100644 index 00000000..0e062460 --- /dev/null +++ b/package/ncmpc/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_NCMPC + bool "ncmpc" + depends on BR2_USE_MMU # fork() + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR # boost + depends on BR2_TOOLCHAIN_HAS_THREADS # boost + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_7 # C++17 + select BR2_PACKAGE_BOOST + select BR2_PACKAGE_BOOST_SYSTEM + select BR2_PACKAGE_LIBMPDCLIENT + select BR2_PACKAGE_NCURSES + help + ncmpc is a fully featured MPD client, which runs in a terminal + (using ncurses). Its goal is to provide a keyboard oriented + and consistent interface to MPD, without wasting resources. + + http://www.musicpd.org/clients/ncmpc/ + +comment "ncmpc needs a toolchain w/ C++, wchar, threads, gcc >= 7" + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_HAS_THREADS || !BR2_TOOLCHAIN_GCC_AT_LEAST_7 diff --git a/package/ncmpc/ncmpc.hash b/package/ncmpc/ncmpc.hash new file mode 100644 index 00000000..3215b35b --- /dev/null +++ b/package/ncmpc/ncmpc.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +sha256 a5f7471d766a71c222374efa4aa17ef6ee0e42ad48d15528edd935d1f0f6cd4d ncmpc-0.42.tar.xz + +# Hash for license file: +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/ncmpc/ncmpc.mk b/package/ncmpc/ncmpc.mk new file mode 100644 index 00000000..0cc97656 --- /dev/null +++ b/package/ncmpc/ncmpc.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# ncmpc +# +################################################################################ + +NCMPC_VERSION_MAJOR = 0 +NCMPC_VERSION = $(NCMPC_VERSION_MAJOR).42 +NCMPC_SOURCE = ncmpc-$(NCMPC_VERSION).tar.xz +NCMPC_SITE = http://www.musicpd.org/download/ncmpc/$(NCMPC_VERSION_MAJOR) +NCMPC_DEPENDENCIES = \ + boost \ + host-pkgconf \ + libmpdclient \ + ncurses \ + $(TARGET_NLS_DEPENDENCIES) +NCMPC_LICENSE = GPL-2.0+ +NCMPC_LICENSE_FILES = COPYING +NCMPC_CPE_ID_VENDOR = ncmpc_project + +NCMPC_CONF_OPTS = \ + -Dcurses=ncurses \ + -Ddocumentation=disabled \ + $(if $(BR2_SYSTEM_ENABLE_NLS),-Dnls=enabled,-Dnls=disabled) + +ifeq ($(BR2_PACKAGE_LIRC_TOOLS),y) +NCMPC_DEPENDENCIES += lirc-tools +NCMPC_CONF_OPTS += -Dlirc=enabled +else +NCMPC_CONF_OPTS += -Dlirc=disabled +endif + +ifeq ($(BR2_PACKAGE_PCRE),y) +NCMPC_DEPENDENCIES += pcre +NCMPC_CONF_OPTS += -Dregex=enabled +else +NCMPC_CONF_OPTS += -Dregex=disabled +endif + +$(eval $(meson-package)) diff --git a/package/ncurses/0001-gcc-5.x-MKlib_gen.patch b/package/ncurses/0001-gcc-5.x-MKlib_gen.patch new file mode 100644 index 00000000..0106e807 --- /dev/null +++ b/package/ncurses/0001-gcc-5.x-MKlib_gen.patch @@ -0,0 +1,44 @@ +Fix gcc 5.x build failure + +Extracted from upstream commit +http://ncurses.scripts.mit.edu/?p=ncurses.git;a=commit;h=97bb4678dc03e753290b39bbff30ba2825df9517. + ++ modify MKlib_gen.sh to work around change in development version of + gcc introduced here: + https://gcc.gnu.org/ml/gcc-patches/2014-06/msg02185.html + https://gcc.gnu.org/ml/gcc-patches/2014-07/msg00236.html + (reports by Marcus Shawcroft, Maohui Lei). + +Original author: Thomas E. Dickey +Signed-off-by: Mikhail Peselnik +[Adam Duskett: Refresh for 6.1] +Signed-off-by: Adam Duskett +--- a/ncurses/base/MKlib_gen.sh 2015-08-06 20:48:24.000000000 -0400 ++++ b/ncurses/base/MKlib_gen.sh 2017-02-07 10:09:01.293962392 -0500 +@@ -505,11 +505,22 @@ + -e 's/gen_$//' \ + -e 's/ / /g' >>$TMP + ++cat >$ED1 < $ED2 ++cat $ED2 >$TMP ++ + $preprocessor $TMP 2>/dev/null \ +-| sed \ +- -e 's/ / /g' \ +- -e 's/^ //' \ +- -e 's/_Bool/NCURSES_BOOL/g' \ ++| sed -f $ED1 \ + | $AWK -f $AW2 \ + | sed -f $ED3 \ + | sed \ diff --git a/package/ncurses/Config.in b/package/ncurses/Config.in new file mode 100644 index 00000000..9f7753b0 --- /dev/null +++ b/package/ncurses/Config.in @@ -0,0 +1,34 @@ +config BR2_PACKAGE_NCURSES + bool "ncurses" + help + The Ncurses (new curses) library is a free software + emulation of curses in System V Release 4.0, and more. + + This package installs only a few vital termcap entries + + http://www.gnu.org/software/ncurses/ + +if BR2_PACKAGE_NCURSES + +config BR2_PACKAGE_NCURSES_WCHAR + bool "enable wide char support" + depends on BR2_USE_WCHAR + help + Enable wide char & UTF-8 support in ncurses libraries + +config BR2_PACKAGE_NCURSES_TARGET_PROGS + bool "ncurses programs" + help + Include ncurses programs in target (clear, reset, tput, ...) + +config BR2_PACKAGE_NCURSES_ADDITIONAL_TERMINFO + string "additional terminfo files to install" + help + Whitespace separated list of terminfo files to install on the + target. A small number of vital terminfo files are always + installed. This list is in addition to the vital ones. + + The terminfo filenames should have the single letter path + prefix. e.g. t/tmux. + +endif diff --git a/package/ncurses/ncurses.hash b/package/ncurses/ncurses.hash new file mode 100644 index 00000000..69115f5c --- /dev/null +++ b/package/ncurses/ncurses.hash @@ -0,0 +1,39 @@ +# Locally calculated after checking pgp signature +sha256 aa057eeeb4a14d470101eff4597d5833dcef5965331be3528c08d99cebaa0d17 ncurses-6.1.tar.gz +sha256 cf9038be62c49a6b5fe93f33b32f983649b2f4c4c31cc99bd18e1e5871c31443 ncurses-6.1-20190609-patch.sh.bz2 +sha256 4b0a4c6abce4543ac4fd4c3389b14825e73b7cddcbb01a687c5dd837f21a3b04 ncurses-6.1-20190615.patch.gz +sha256 b2302625ec2fa6dce79622670452e56ff6130dc02e655b52177264cfeff84c51 ncurses-6.1-20190623.patch.gz +sha256 48b004a3e5409a02a5e751f996fe487f5ce45be1fff38572f7cc8167b22179bf ncurses-6.1-20190630.patch.gz +sha256 faf849eed92161ac09782badf84a19ad6beae472e87d460905865e08a6ed46e4 ncurses-6.1-20190706.patch.gz +sha256 62d4954bf818659105aa1c21cc27cb2c133e02bdc7d3f6aa548caae2d1db7440 ncurses-6.1-20190713.patch.gz +sha256 0c1a54bd5de9c890d1fabcfa92bf5bf46f7eccc54a48051367e82bdb29636450 ncurses-6.1-20190720.patch.gz +sha256 0bbd08d3bd12686d4427c242d6a8fde2e299698039cd597303af713c5f538f17 ncurses-6.1-20190727.patch.gz +sha256 40e5f350a921dbd03e3d9ff93bc477ec4f1f65878f307c534882fba3b0b40507 ncurses-6.1-20190728.patch.gz +sha256 9648104311e209d17db9556d6efc898d5c80ed5fc80e8aa3cd08769544c839b8 ncurses-6.1-20190803.patch.gz +sha256 fa1f583575717b2538d3a4ea59a67bc17dd07ed46cb99fe2beaf23d1b006e9df ncurses-6.1-20190810.patch.gz +sha256 5e9ae4f1b3e2e2d567a01a8fb2c9b7f3804cae97f28cd483d239afee781b8c2b ncurses-6.1-20190817.patch.gz +sha256 7592e5e610b3e9eeca78897da2330b7518f00e0a59d20df873c88a9b26bc4da9 ncurses-6.1-20190824.patch.gz +sha256 1a9800a5ccc4f2cb572b63cdc8f1431642e014a58a30151af73977614d5c4aac ncurses-6.1-20190831.patch.gz +sha256 87685a6b90225efcd03375eb11b124fd9e95ee4b0f36bcbc82e56a70cd466b33 ncurses-6.1-20190907.patch.gz +sha256 4ddebb6e0e5a67028eb3aca2352c9bd48cf122a512719f93e449e00a3c6634f8 ncurses-6.1-20190914.patch.gz +sha256 4c725fa729d754f4e75af78fda4cf67d60e71c1625b5f4f49b7930c95bb8dd36 ncurses-6.1-20190921.patch.gz +sha256 a830b879b57906b1e480e4785b32cec05081b7849c06c4b116459c4d343ba21b ncurses-6.1-20190928.patch.gz +sha256 d5eae35d920409613f565825e1e215fed89828040aab541328455da38e1a9b7c ncurses-6.1-20191005.patch.gz +sha256 136dbd07254810728c1fcb7614b566e7c3cb6af8c0783019bbb6b4b5e3c1e2c6 ncurses-6.1-20191012.patch.gz +sha256 1d5125b20792e9f534432c3ef2aa68984c713416addeb2c4364c5ae897a3b8b7 ncurses-6.1-20191015.patch.gz +sha256 a6475c05312ba0b12b72b83529c1d283a14c4470414c505fa45451e35f3ffcf5 ncurses-6.1-20191019.patch.gz +sha256 f6c7469f33065faf1d04ac9e9bea1a88142b00b82e3db3674cca9ec24920b4af ncurses-6.1-20191026.patch.gz +sha256 0d0443937b9c04663de25b405bb95e658e7c87e1dd7a726b3813aa7f9b55f69a ncurses-6.1-20191102.patch.gz +sha256 f3b75787918d2f02a2005877e81fdc054c45b8249b43aabb531e3b817bcf7576 ncurses-6.1-20191109.patch.gz +sha256 801d138b55986719aea7f42dc8c0cb618fa9a6edf92d1789a6ba5d61678f7761 ncurses-6.1-20191116.patch.gz +sha256 45f447cf2c7a24295c7b9210473e943a238c57ca80581d121c9a1a3aa05332a6 ncurses-6.1-20191123.patch.gz +sha256 ea758e3b0162348c4d5d6dac56f95809da3b7d0589205661a13430eb93f72f75 ncurses-6.1-20191130.patch.gz +sha256 16b5a588c56a53c468d2359b21d5d8a007c4ef7696de12c964a1b661ed185f72 ncurses-6.1-20191207.patch.gz +sha256 8725a2dc8f1cfdab41cb5fe56f930e070f8cdc81a77f303ef2658f65cd0b8edd ncurses-6.1-20191214.patch.gz +sha256 7e2a06fb0af6c84269d23ffe06c689bf1a8a57af39369690ee0698778d4b6cda ncurses-6.1-20191221.patch.gz +sha256 d052bcdb38f8b45a00c0a3190dec7ac1e72d5682f3a16d8accda239308aad62f ncurses-6.1-20191228.patch.gz +sha256 7b6253bae438154a88c7f3e301b872ed7ad71f943c873f4e6c82d8d36a5df72b ncurses-6.1-20200104.patch.gz +sha256 e438f28025c7d97c7f8fabf40eeab68bbf8ca871a0ba349e3fdec9165efe85cb ncurses-6.1-20200111.patch.gz +sha256 06d002c33f727c4a36a0b502c226ea3c3c5b80770703d2f783fffa6a0db04d92 ncurses-6.1-20200118.patch.gz +# Locally computed +sha256 4d1fde61868c73776a539366dccf5d5a4857e7fd7299efb1f02e07c2afe9ea87 COPYING diff --git a/package/ncurses/ncurses.mk b/package/ncurses/ncurses.mk new file mode 100644 index 00000000..5d9c6bb0 --- /dev/null +++ b/package/ncurses/ncurses.mk @@ -0,0 +1,212 @@ +################################################################################ +# +# ncurses +# +################################################################################ + +NCURSES_VERSION = 6.1 +NCURSES_SITE = $(BR2_GNU_MIRROR)/ncurses +NCURSES_INSTALL_STAGING = YES +NCURSES_DEPENDENCIES = host-ncurses +NCURSES_LICENSE = MIT with advertising clause +NCURSES_LICENSE_FILES = COPYING +NCURSES_CPE_ID_VENDOR = gnu +# Commit 4b21273d71d09 added upstream (security) patches up to 20200118 +NCURSES_IGNORE_CVES += CVE-2018-10754 +NCURSES_IGNORE_CVES += CVE-2018-19211 +NCURSES_IGNORE_CVES += CVE-2018-19217 +NCURSES_IGNORE_CVES += CVE-2019-17594 +NCURSES_IGNORE_CVES += CVE-2019-17595 +NCURSES_CONFIG_SCRIPTS = ncurses$(NCURSES_LIB_SUFFIX)6-config +NCURSES_PATCH = \ + $(addprefix https://invisible-mirror.net/archives/ncurses/$(NCURSES_VERSION)/, \ + ncurses-6.1-20190609-patch.sh.bz2 \ + ncurses-6.1-20190615.patch.gz \ + ncurses-6.1-20190623.patch.gz \ + ncurses-6.1-20190630.patch.gz \ + ncurses-6.1-20190706.patch.gz \ + ncurses-6.1-20190713.patch.gz \ + ncurses-6.1-20190720.patch.gz \ + ncurses-6.1-20190727.patch.gz \ + ncurses-6.1-20190728.patch.gz \ + ncurses-6.1-20190803.patch.gz \ + ncurses-6.1-20190810.patch.gz \ + ncurses-6.1-20190817.patch.gz \ + ncurses-6.1-20190824.patch.gz \ + ncurses-6.1-20190831.patch.gz \ + ncurses-6.1-20190907.patch.gz \ + ncurses-6.1-20190914.patch.gz \ + ncurses-6.1-20190921.patch.gz \ + ncurses-6.1-20190928.patch.gz \ + ncurses-6.1-20191005.patch.gz \ + ncurses-6.1-20191012.patch.gz \ + ncurses-6.1-20191015.patch.gz \ + ncurses-6.1-20191019.patch.gz \ + ncurses-6.1-20191026.patch.gz \ + ncurses-6.1-20191102.patch.gz \ + ncurses-6.1-20191109.patch.gz \ + ncurses-6.1-20191116.patch.gz \ + ncurses-6.1-20191123.patch.gz \ + ncurses-6.1-20191130.patch.gz \ + ncurses-6.1-20191207.patch.gz \ + ncurses-6.1-20191214.patch.gz \ + ncurses-6.1-20191221.patch.gz \ + ncurses-6.1-20191228.patch.gz \ + ncurses-6.1-20200104.patch.gz \ + ncurses-6.1-20200111.patch.gz \ + ncurses-6.1-20200118.patch.gz \ + ) + +# ncurses-6.1-20191012.patch.gz +NCURSES_IGNORE_CVES += CVE-2019-17594 CVE-2019-17595 + +NCURSES_CONF_OPTS = \ + --without-cxx \ + --without-cxx-binding \ + --without-ada \ + --without-tests \ + --disable-big-core \ + --without-profile \ + --disable-rpath \ + --disable-rpath-hack \ + --enable-echo \ + --enable-const \ + --enable-overwrite \ + --enable-pc-files \ + --disable-stripping \ + --with-pkg-config-libdir="/usr/lib/pkgconfig" \ + $(if $(BR2_PACKAGE_NCURSES_TARGET_PROGS),,--without-progs) \ + --without-manpages + +ifeq ($(BR2_STATIC_LIBS),y) +NCURSES_CONF_OPTS += --without-shared --with-normal +else ifeq ($(BR2_SHARED_LIBS),y) +NCURSES_CONF_OPTS += --with-shared --without-normal +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +NCURSES_CONF_OPTS += --with-shared --with-normal +endif + +# configure can't find the soname for libgpm when cross compiling +ifeq ($(BR2_PACKAGE_GPM),y) +NCURSES_CONF_OPTS += --with-gpm=libgpm.so.2 +NCURSES_DEPENDENCIES += gpm +else +NCURSES_CONF_OPTS += --without-gpm +endif + +NCURSES_TERMINFO_FILES = \ + a/ansi \ + d/dumb \ + l/linux \ + p/putty \ + p/putty-256color \ + p/putty-vt100 \ + s/screen \ + s/screen-256color \ + v/vt100 \ + v/vt100-putty \ + v/vt102 \ + v/vt200 \ + v/vt220 \ + x/xterm \ + x/xterm+256color \ + x/xterm-256color \ + x/xterm-color \ + x/xterm-xfree86 \ + $(call qstrip,$(BR2_PACKAGE_NCURSES_ADDITIONAL_TERMINFO)) + +ifeq ($(BR2_PACKAGE_NCURSES_WCHAR),y) +NCURSES_CONF_OPTS += --enable-widec +NCURSES_LIB_SUFFIX = w +NCURSES_LIBS = ncurses menu panel form + +define NCURSES_LINK_LIBS_STATIC + $(foreach lib,$(NCURSES_LIBS:%=lib%), \ + ln -sf $(lib)$(NCURSES_LIB_SUFFIX).a $(STAGING_DIR)/usr/lib/$(lib).a + ) + ln -sf libncurses$(NCURSES_LIB_SUFFIX).a \ + $(STAGING_DIR)/usr/lib/libcurses.a +endef + +define NCURSES_LINK_LIBS_SHARED + $(foreach lib,$(NCURSES_LIBS:%=lib%), \ + ln -sf $(lib)$(NCURSES_LIB_SUFFIX).so $(STAGING_DIR)/usr/lib/$(lib).so + ) + ln -sf libncurses$(NCURSES_LIB_SUFFIX).so \ + $(STAGING_DIR)/usr/lib/libcurses.so +endef + +define NCURSES_LINK_PC + $(foreach pc,$(NCURSES_LIBS), \ + ln -sf $(pc)$(NCURSES_LIB_SUFFIX).pc \ + $(STAGING_DIR)/usr/lib/pkgconfig/$(pc).pc + ) +endef + +NCURSES_LINK_STAGING_LIBS = \ + $(if $(BR2_STATIC_LIBS)$(BR2_SHARED_STATIC_LIBS),$(call NCURSES_LINK_LIBS_STATIC);) \ + $(if $(BR2_SHARED_LIBS)$(BR2_SHARED_STATIC_LIBS),$(call NCURSES_LINK_LIBS_SHARED)) + +NCURSES_LINK_STAGING_PC = $(call NCURSES_LINK_PC) + +NCURSES_CONF_OPTS += --enable-ext-colors + +NCURSES_POST_INSTALL_STAGING_HOOKS += NCURSES_LINK_STAGING_LIBS +NCURSES_POST_INSTALL_STAGING_HOOKS += NCURSES_LINK_STAGING_PC + +endif # BR2_PACKAGE_NCURSES_WCHAR + +ifneq ($(BR2_ENABLE_DEBUG),y) +NCURSES_CONF_OPTS += --without-debug +endif + +# ncurses breaks with parallel build, but takes quite a while to +# build single threaded. Work around it similar to how Gentoo does +define NCURSES_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) -C $(@D) DESTDIR=$(STAGING_DIR) sources + rm -rf $(@D)/misc/pc-files + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) +endef + +ifeq ($(BR2_PACKAGE_NCURSES_TARGET_PROGS),y) +define NCURSES_TARGET_SYMLINK_RESET + ln -sf tset $(TARGET_DIR)/usr/bin/reset +endef +NCURSES_POST_INSTALL_TARGET_HOOKS += NCURSES_TARGET_SYMLINK_RESET +endif + +define NCURSES_TARGET_CLEANUP_TERMINFO + $(RM) -rf $(TARGET_DIR)/usr/share/terminfo $(TARGET_DIR)/usr/share/tabset + $(foreach t,$(NCURSES_TERMINFO_FILES), \ + $(INSTALL) -D -m 0644 $(STAGING_DIR)/usr/share/terminfo/$(t) \ + $(TARGET_DIR)/usr/share/terminfo/$(t) + ) +endef +NCURSES_POST_INSTALL_TARGET_HOOKS += NCURSES_TARGET_CLEANUP_TERMINFO + +# +# On systems with an older version of tic, the installation of ncurses hangs +# forever. To resolve the problem, build a static version of tic on host +# ourselves, and use that during installation. +# +define HOST_NCURSES_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE1) -C $(@D) sources + $(HOST_MAKE_ENV) $(MAKE) -C $(@D)/progs tic +endef + +HOST_NCURSES_CONF_ENV = \ + ac_cv_path_LDCONFIG="" + +HOST_NCURSES_CONF_OPTS = \ + --with-shared \ + --without-gpm \ + --without-manpages \ + --without-cxx \ + --without-cxx-binding \ + --without-ada \ + --with-default-terminfo-dir=/usr/share/terminfo \ + --disable-db-install \ + --without-normal + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/ndisc6/0001-Fix-musl-build.patch b/package/ndisc6/0001-Fix-musl-build.patch new file mode 100644 index 00000000..6a13a435 --- /dev/null +++ b/package/ndisc6/0001-Fix-musl-build.patch @@ -0,0 +1,34 @@ +From 12787f5936c79b56b24ffe0a92f4370804070223 Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Thu, 7 Nov 2019 21:41:34 +0100 +Subject: [PATCH] Fix musl build + +Fixes +src/trace-tcp.c:67:24: error: 'TH_SYN' undeclared (first use in this function); did you mean 'TH_CWR'? + packet->th.th_flags = TH_SYN | (ecn ? (TH_ECE | TH_CWR) : 0); + +Musl guards TH_SYN with if defined(_GNU_SOURCE): +https://git.musl-libc.org/cgit/musl/tree/include/netinet/tcp.h#n82 + +Patch sent via email to upstream. + +Signed-off-by: Bernd Kuhls +--- + src/trace-tcp.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/trace-tcp.c b/src/trace-tcp.c +index 5aba9d4..1b367ae 100644 +--- a/src/trace-tcp.c ++++ b/src/trace-tcp.c +@@ -21,7 +21,6 @@ + # include + #endif + +-#undef _GNU_SOURCE + #define _DEFAULT_SOURCE 1 + + #include +-- +2.20.1 + diff --git a/package/ndisc6/Config.in b/package/ndisc6/Config.in new file mode 100644 index 00000000..287dc919 --- /dev/null +++ b/package/ndisc6/Config.in @@ -0,0 +1,52 @@ +config BR2_PACKAGE_NDISC6 + bool "ndisc6 tools" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 # c11 + help + NDisc6 is a small collection of useful tools for IPv6 + networking + + http://www.remlab.net/ndisc6/ + +if BR2_PACKAGE_NDISC6 + +config BR2_PACKAGE_NDISC6_NAME2ADDR + bool "name2addr" + help + name2addr perform DNS lookups from scripts. + +config BR2_PACKAGE_NDISC6_NDISC6 + bool "ndisc6" + help + ndisc6 performs ICMPv6 Neighbor Discovery in userland. + +config BR2_PACKAGE_NDISC6_RDISC6 + bool "rdisc6" + help + rdisc6 performs ICMPv6 Router Discovery in userland. + +config BR2_PACKAGE_NDISC6_RDNSSD + bool "rdnssd" + help + IPv6 Recursive DNS Server discovery Daemon. + +config BR2_PACKAGE_NDISC6_RLTRACEROUTE6 + bool "rltraceroute6" + help + rltraceroute6 is an IPv6 traceroute implementation. + +config BR2_PACKAGE_NDISC6_TCPTRACEROUTE6 + bool "tcptraceroute6" + help + tcptraceroute6 is an TCP/IPv6 traceroute implementation. + +config BR2_PACKAGE_NDISC6_TCPSPRAY + bool "tcpspray" + help + TCP/IP bandwidth measurement tool (Discard and Echo client). + +endif + +comment "ndisc6 needs a toolchain w/ gcc >= 4.7" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 diff --git a/package/ndisc6/ndisc6.hash b/package/ndisc6/ndisc6.hash new file mode 100644 index 00000000..381667c2 --- /dev/null +++ b/package/ndisc6/ndisc6.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 abb1da4a98d94e5abe1dd7b1c975de540306b0581cbbd36aff035118b2f25c1f ndisc6-1.0.4.tar.bz2 +# Locally computed +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/ndisc6/ndisc6.mk b/package/ndisc6/ndisc6.mk new file mode 100644 index 00000000..9845aa2c --- /dev/null +++ b/package/ndisc6/ndisc6.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# ndisc6 +# +################################################################################ + +NDISC6_VERSION = 1.0.4 +NDISC6_SOURCE = ndisc6-$(NDISC6_VERSION).tar.bz2 +NDISC6_SITE = http://www.remlab.net/files/ndisc6 +NDISC6_CONF_ENV = CC="$(TARGET_CC) -std=c11" LIBS=$(TARGET_NLS_LIBS) +NDISC6_CONF_OPTS = --disable-rpath --disable-suid-install +NDISC6_LICENSE = GPL-2.0 or GPL-3.0 +NDISC6_LICENSE_FILES = COPYING +NDISC6_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) + +NDISC6_BIN_ += dnssort # perl script +NDISC6_BIN_$(BR2_PACKAGE_NDISC6_NAME2ADDR) += name2addr addr2name +NDISC6_BIN_$(BR2_PACKAGE_NDISC6_TCPSPRAY) += tcpspray tcpspray6 + +NDISC6_SBIN_$(BR2_PACKAGE_NDISC6_NDISC6) += ndisc6 +NDISC6_SBIN_$(BR2_PACKAGE_NDISC6_RDISC6) += rdisc6 +NDISC6_SBIN_$(BR2_PACKAGE_NDISC6_RDNSSD) += rdnssd +NDISC6_SBIN_$(BR2_PACKAGE_NDISC6_RLTRACEROUTE6) += rltraceroute6 tracert6 +NDISC6_SBIN_$(BR2_PACKAGE_NDISC6_TCPTRACEROUTE6) += tcptraceroute6 + +define NDISC6_REMOVE_UNNEEDED + rm -rf $(addprefix $(TARGET_DIR)/usr/bin/,$(NDISC6_BIN_)) \ + $(addprefix $(TARGET_DIR)/usr/sbin/,$(NDISC6_SBIN_)) + $(if $(BR2_PACKAGE_NDISC6_RDNSSD),,\ + rm -rf $(TARGET_DIR)/etc/rdnssd $(TARGET_DIR)/var/run/rdnssd) +endef + +NDISC6_POST_INSTALL_TARGET_HOOKS += NDISC6_REMOVE_UNNEEDED + +$(eval $(autotools-package)) diff --git a/package/ne10/0001-CMakeLists-don-t-hard-code-thumb-code-generation.patch b/package/ne10/0001-CMakeLists-don-t-hard-code-thumb-code-generation.patch new file mode 100644 index 00000000..0aa6fd2b --- /dev/null +++ b/package/ne10/0001-CMakeLists-don-t-hard-code-thumb-code-generation.patch @@ -0,0 +1,30 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Cody Guldner +Date: Tue, 14 Apr 2020 09:12:01 -0500 +Subject: [PATCH] CMakeLists: don't hard code thumb code generation + +Migrating to version 1.2.1 + +Signed-off-by: Baruch Siach +Signed-off-by: Clayton Shotwell +Signed-off-by: Cody Guldner +--- + CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index fc2a5e3..25da215 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -135,7 +135,7 @@ if(ANDROID_PLATFORM) + ${CMAKE_C_FLAGS}") + elseif(GNULINUX_PLATFORM) + if(${NE10_TARGET_ARCH} STREQUAL "armv7") +- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mthumb-interwork -mthumb -march=armv7-a -mfpu=vfp3 -funsafe-math-optimizations") ++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mthumb-interwork -march=armv7-a -mfpu=vfp3 -funsafe-math-optimizations") + set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -mthumb-interwork -mthumb -march=armv7-a -mfpu=neon") + # Turn on asm optimization for Linux on ARM v7. + set(NE10_ASM_OPTIMIZATION on) +-- +2.23.0 + diff --git a/package/ne10/Config.in b/package/ne10/Config.in new file mode 100644 index 00000000..a84ac18c --- /dev/null +++ b/package/ne10/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_NE10_ARCH_SUPPORTS + bool + default y if BR2_aarch64 + default y if BR2_arm && (BR2_ARM_FPU_NEON || BR2_ARM_FPU_NEON_VFPV4) + +config BR2_PACKAGE_NE10 + bool "ne10" + depends on BR2_PACKAGE_NE10_ARCH_SUPPORTS + help + The Ne10 project has been set up to provide a set of common, + useful functions which have been heavily optimized for the + ARM and AArch64 Architecture and provide consistent well + tested behavior that can be easily incorporated into + applications. C interfaces to the functions are provided for + both assembler and NEON implementations. + + http://projectne10.github.io/Ne10/ diff --git a/package/ne10/ne10.hash b/package/ne10/ne10.hash new file mode 100644 index 00000000..cdb6e013 --- /dev/null +++ b/package/ne10/ne10.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 dd1a96610c0692cc80154ae123edd5d25e6e0a3f81d0c16a96425f3ef57b9929 ne10-1.2.1.tar.gz +sha256 eb48041c8e0ad556cf72f2a6eff89c893aa5702bba4e163ca7798cce07e6c55e doc/LICENSE diff --git a/package/ne10/ne10.mk b/package/ne10/ne10.mk new file mode 100644 index 00000000..e529caf2 --- /dev/null +++ b/package/ne10/ne10.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# ne10 +# +################################################################################ + +NE10_VERSION = 1.2.1 +NE10_SITE = $(call github,projectNe10,Ne10,v$(NE10_VERSION)) +NE10_LICENSE = BSD-3-Clause or Apache-2.0 +NE10_LICENSE_FILES = doc/LICENSE +NE10_INSTALL_STAGING = YES + +NE10_CONF_OPTS = \ + -DGNULINUX_PLATFORM=ON \ + -DNE10_BUILD_EXAMPLES=OFF \ + -DNE10_BUILD_UNIT_TEST=OFF \ + -DNE10_LINUX_TARGET_ARCH=$(if $(BR2_aarch64),aarch64,armv7) + +ifeq ($(BR2_STATIC_LIBS),) +NE10_CONF_OPTS += \ + -DNE10_BUILD_SHARED=ON +endif + +# The package does not have any install target, so have to provide +# INSTALL_STAGING_CMDS and INSTALL_TARGET_CMDS. + +ifeq ($(BR2_STATIC_LIBS),) +define NE10_INSTALL_STAGING_SHARED_LIB + cp -dpf $(@D)/modules/libNE10*.so* $(STAGING_DIR)/usr/lib/ +endef +endif + +define NE10_INSTALL_STAGING_CMDS + cp -dpf $(@D)/inc/NE10*h $(STAGING_DIR)/usr/include/ + cp -dpf $(@D)/modules/libNE10.a $(STAGING_DIR)/usr/lib/ + $(NE10_INSTALL_STAGING_SHARED_LIB) +endef + +define NE10_INSTALL_TARGET_CMDS + cp -dpf $(@D)/modules/libNE10*.so* $(TARGET_DIR)/usr/lib/ +endef + +$(eval $(cmake-package)) diff --git a/package/neard/Config.in b/package/neard/Config.in new file mode 100644 index 00000000..a60fb3f8 --- /dev/null +++ b/package/neard/Config.in @@ -0,0 +1,30 @@ +config BR2_PACKAGE_NEARD + bool "neard" + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libnl, dbus, libglib2 + depends on BR2_USE_MMU # dbus, libglib2 + depends on !BR2_STATIC_LIBS # dlopen + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + select BR2_PACKAGE_DBUS + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBNL + help + Near Field Communication (NFC) manager. This userspace + daemon is a part of the NFC stack provided by the Linux NFC + project. + + https://git.kernel.org/pub/scm/network/nfc/neard.git + +if BR2_PACKAGE_NEARD + +config BR2_PACKAGE_NEARD_TOOLS + bool "neard tools" + help + Build and install neard tools. + +endif + +comment "neard needs a toolchain w/ wchar, threads, dynamic library" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/neard/S53neard b/package/neard/S53neard new file mode 100644 index 00000000..4fd4e0aa --- /dev/null +++ b/package/neard/S53neard @@ -0,0 +1,29 @@ +#!/bin/sh +# +# Starts neard +# + +NAME=neard + +case "$1" in + start) + printf "Starting $NAME: " + start-stop-daemon -S -q -p /var/run/${NAME}.pid -x /usr/libexec/nfc/neard -- -d '*' + echo "OK" + ;; + stop) + printf "Stopping $NAME: " + start-stop-daemon -K -q -p /var/run/${NAME}.pid + echo "OK" + ;; + restart|reload) + $0 stop + sleep 1 + $0 start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/neard/neard.hash b/package/neard/neard.hash new file mode 100644 index 00000000..948314dd --- /dev/null +++ b/package/neard/neard.hash @@ -0,0 +1,4 @@ +# From https://www.kernel.org/pub/linux/network/nfc/sha256sums.asc +sha256 eae3b11c541a988ec11ca94b7deab01080cd5b58cfef3ced6ceac9b6e6e65b36 neard-0.16.tar.xz +# Locally computed +sha256 b499eddebda05a8859e32b820a64577d91f1de2b52efa2a1575a2cb4000bc259 COPYING diff --git a/package/neard/neard.mk b/package/neard/neard.mk new file mode 100644 index 00000000..a3514691 --- /dev/null +++ b/package/neard/neard.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# neard +# +################################################################################ + +NEARD_VERSION = 0.16 +NEARD_SOURCE = neard-$(NEARD_VERSION).tar.xz +NEARD_SITE = $(BR2_KERNEL_MIRROR)/linux/network/nfc +NEARD_LICENSE = GPL-2.0 +NEARD_LICENSE_FILES = COPYING + +NEARD_DEPENDENCIES = host-pkgconf dbus libglib2 libnl +NEARD_CONF_OPTS = --disable-traces + +ifeq ($(BR2_PACKAGE_NEARD_TOOLS),y) +NEARD_CONF_OPTS += --enable-tools +endif + +ifeq ($(BR2_INIT_SYSTEMD),y) +NEARD_CONF_OPTS += --enable-systemd +NEARD_DEPENDENCIES += systemd +else +NEARD_CONF_OPTS += --disable-systemd +endif + +define NEARD_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/neard/S53neard \ + $(TARGET_DIR)/etc/init.d/S53neard +endef + +$(eval $(autotools-package)) diff --git a/package/neardal/0001-lib-neardal.h-fix-build-with-gcc-10.patch b/package/neardal/0001-lib-neardal.h-fix-build-with-gcc-10.patch new file mode 100644 index 00000000..c9c45550 --- /dev/null +++ b/package/neardal/0001-lib-neardal.h-fix-build-with-gcc-10.patch @@ -0,0 +1,35 @@ +From 08467411d7dfc2a2b7ede62e5fdc640748ea1db2 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Wed, 9 Sep 2020 19:14:52 +0200 +Subject: [PATCH] lib/neardal.h: fix build with gcc 10 + +Define neardal_output_cb as extern to avoid the following build failure +with gcc 10 (which defaults to -fno-common): + +/srv/storage/autobuild/run/instance-2/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: ./.libs/neardal_adapter.o:(.bss+0x0): multiple definition of `neardal_output_cb'; ./.libs/neardal.o:(.bss+0x68): first defined here + +Fixes: + - http://autobuild.buildroot.org/results/7efb100c899b67ffd570f73c202442f95ca5397e + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/connectivity/neardal/pull/10] +--- + lib/neardal.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/neardal.h b/lib/neardal.h +index d1cd18b..3e83595 100644 +--- a/lib/neardal.h ++++ b/lib/neardal.h +@@ -638,7 +638,7 @@ neardal_record *neardal_g_variant_to_record(GVariant *in); + + void neardal_trace(const char *func, FILE *fp, char *fmt, ...) + __attribute__((format(printf, 3, 4))); +-int (*neardal_output_cb)(FILE *fp, const char *fmt, va_list ap); ++extern int (*neardal_output_cb)(FILE *fp, const char *fmt, va_list ap); + + #ifdef __cplusplus + } +-- +2.28.0 + diff --git a/package/neardal/Config.in b/package/neardal/Config.in new file mode 100644 index 00000000..5f33ae49 --- /dev/null +++ b/package/neardal/Config.in @@ -0,0 +1,26 @@ +config BR2_PACKAGE_NEARDAL + bool "neardal" + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # dbus, glib2 + depends on BR2_USE_MMU # dbus + select BR2_PACKAGE_DBUS + select BR2_PACKAGE_DBUS_GLIB + select BR2_PACKAGE_LIBEDIT + help + Provides a simple C API to exchange data with the neard NFC + manager daemon. + + https://github.com/connectivity/neardal + +if BR2_PACKAGE_NEARDAL + +config BR2_PACKAGE_NEARDAL_NCL + bool "ncl tool" + help + Build and install neardal ncl command line interpreter tool. + +endif + +comment "neardal needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/neardal/neardal.hash b/package/neardal/neardal.hash new file mode 100644 index 00000000..b8b8b96a --- /dev/null +++ b/package/neardal/neardal.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 dae3c432e619a0d3102c5222d0b8fde74413ae519a64ccaae0fc81d31504aecb neardal-4143d130ed39299bfc59d08d2c7c77dbc7f809e9.tar.gz +sha256 296a87e9098d3f2ce1ef80c73c53399dc2c7412f35d4175c45810ea15ed86406 COPYING diff --git a/package/neardal/neardal.mk b/package/neardal/neardal.mk new file mode 100644 index 00000000..28e2850e --- /dev/null +++ b/package/neardal/neardal.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# neardal +# +################################################################################ + +NEARDAL_VERSION = 4143d130ed39299bfc59d08d2c7c77dbc7f809e9 +NEARDAL_SITE = $(call github,connectivity,neardal,$(NEARDAL_VERSION)) +NEARDAL_INSTALL_STAGING = YES +NEARDAL_LICENSE = LGPL-2.0 +NEARDAL_LICENSE_FILES = COPYING + +NEARDAL_DEPENDENCIES = host-pkgconf dbus dbus-glib libedit +NEARDAL_AUTORECONF = YES + +define NEARDAL_INSTALL_NCL + $(INSTALL) -m 0755 -D $(@D)/ncl/ncl $(TARGET_DIR)/usr/bin/ncl +endef + +ifeq ($(BR2_PACKAGE_NEARDAL_NCL),y) +NEARDAL_POST_INSTALL_TARGET_HOOKS += NEARDAL_INSTALL_NCL +endif + +$(eval $(autotools-package)) diff --git a/package/neofetch/Config.in b/package/neofetch/Config.in new file mode 100644 index 00000000..409466bc --- /dev/null +++ b/package/neofetch/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_NEOFETCH + bool "neofetch" + depends on BR2_USE_MMU # bash + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS # bash + select BR2_PACKAGE_BASH # runtime dependency + help + Neofetch is a bash script to display system information, + including hardware, in a visually pleasing way. + + https://github.com/dylanaraps/neofetch diff --git a/package/neofetch/neofetch.hash b/package/neofetch/neofetch.hash new file mode 100644 index 00000000..09277151 --- /dev/null +++ b/package/neofetch/neofetch.hash @@ -0,0 +1,2 @@ +sha256 58a95e6b714e41efc804eca389a223309169b2def35e57fa934482a6b47c27e7 neofetch-7.1.0.tar.gz +sha256 fc3034b3dd3a08db109949b629210213bba52aa95455cbc5c2fefa2fc1183efe LICENSE.md diff --git a/package/neofetch/neofetch.mk b/package/neofetch/neofetch.mk new file mode 100644 index 00000000..4ea6c27b --- /dev/null +++ b/package/neofetch/neofetch.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# neofetch +# +################################################################################ + +NEOFETCH_VERSION = 7.1.0 +NEOFETCH_SITE = $(call github,dylanaraps,neofetch,$(NEOFETCH_VERSION)) +NEOFETCH_LICENSE = MIT +NEOFETCH_LICENSE_FILES = LICENSE.md + +define NEOFETCH_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/neofetch \ + $(TARGET_DIR)/usr/bin/neofetch +endef + +$(eval $(generic-package)) diff --git a/package/neon/Config.in b/package/neon/Config.in new file mode 100644 index 00000000..98313433 --- /dev/null +++ b/package/neon/Config.in @@ -0,0 +1,41 @@ +config BR2_PACKAGE_NEON + bool "libneon" + help + HTTP and WebDAV client library, with a C interface. + + http://www.webdav.org/neon/ + +if BR2_PACKAGE_NEON + +config BR2_PACKAGE_NEON_ZLIB + bool "ZLIB support" + select BR2_PACKAGE_ZLIB + help + build with ZLIB support + +config BR2_PACKAGE_NEON_SSL + bool "SSL support" + select BR2_PACKAGE_OPENSSL + help + build with SSL support + +# This is an hidden symbol other packages can select to ensure that +# Neon has XML support, either provided by Expat or libxml2. +config BR2_PACKAGE_NEON_XML + bool + select BR2_PACKAGE_NEON_EXPAT if !BR2_PACKAGE_NEON_LIBXML2 + +config BR2_PACKAGE_NEON_EXPAT + bool "XML support with expat" + depends on !BR2_PACKAGE_NEON_LIBXML2 + select BR2_PACKAGE_EXPAT + help + Enable XML support in neon, using the Expat XML library. + +config BR2_PACKAGE_NEON_LIBXML2 + bool "XML support with libxml2" + select BR2_PACKAGE_LIBXML2 + help + Enable XML support in neon, using the libxml2 XML library. + +endif diff --git a/package/neon/neon.hash b/package/neon/neon.hash new file mode 100644 index 00000000..2ebefbe5 --- /dev/null +++ b/package/neon/neon.hash @@ -0,0 +1,6 @@ +# Locally calculated after checking pgp signature +sha256 db0bd8cdec329b48f53a6f00199c92d5ba40b0f015b153718d1b15d3d967fbca neon-0.30.2.tar.gz +# Locally computed +sha256 95f77624e96f6728145826fc895142275451f43f41c073766db3dbbcc8b790b0 README +sha256 d7bf9d064ac3e5840f9dd02422b7eeec4f1fd03f37fadbd043602be5e882304f src/COPYING.LIB +sha256 91df39d1816bfb17a4dda2d3d2c83b1f6f2d38d53e53e41e8f97ad5ac46a0cad test/COPYING diff --git a/package/neon/neon.mk b/package/neon/neon.mk new file mode 100644 index 00000000..da53735d --- /dev/null +++ b/package/neon/neon.mk @@ -0,0 +1,52 @@ +################################################################################ +# +# neon +# +################################################################################ + +NEON_VERSION = 0.30.2 +NEON_SITE = http://www.webdav.org/neon +NEON_LICENSE = LGPL-2.0+ (library), GPL-2.0+ (manual and tests) +NEON_LICENSE_FILES = src/COPYING.LIB test/COPYING README +NEON_CPE_ID_VENDOR = webdav +NEON_INSTALL_STAGING = YES +NEON_CONF_OPTS = --without-gssapi --disable-rpath +NEON_CONFIG_SCRIPTS = neon-config +NEON_DEPENDENCIES = host-pkgconf $(TARGET_NLS_DEPENDENCIES) +NEON_CONF_ENV = ne_cv_libsfor_bindtextdomain=$(TARGET_NLS_LIBS) + +ifeq ($(BR2_PACKAGE_NEON_ZLIB),y) +NEON_CONF_OPTS += --with-zlib=$(STAGING_DIR) +NEON_DEPENDENCIES += zlib +else +NEON_CONF_OPTS += --without-zlib +endif + +ifeq ($(BR2_PACKAGE_NEON_SSL),y) +NEON_CONF_OPTS += --with-ssl +NEON_DEPENDENCIES += openssl +else +NEON_CONF_OPTS += --without-ssl +endif + +ifeq ($(BR2_PACKAGE_NEON_EXPAT),y) +NEON_CONF_OPTS += --with-expat=yes +NEON_DEPENDENCIES += expat +else +NEON_CONF_OPTS += --with-expat=no +endif + +ifeq ($(BR2_PACKAGE_NEON_LIBXML2),y) +NEON_CONF_OPTS += --with-libxml2=yes +NEON_CONF_ENV += ac_cv_prog_XML2_CONFIG=$(STAGING_DIR)/usr/bin/xml2-config +NEON_DEPENDENCIES += libxml2 +else +NEON_CONF_OPTS += --with-libxml2=no +endif + +ifeq ($(BR2_PACKAGE_NEON_EXPAT)$(BR2_PACKAGE_NEON_LIBXML2),) +# webdav needs xml support +NEON_CONF_OPTS += --disable-webdav +endif + +$(eval $(autotools-package)) diff --git a/package/net-tools/Config.in b/package/net-tools/Config.in new file mode 100644 index 00000000..5e24bd1b --- /dev/null +++ b/package/net-tools/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_NET_TOOLS + bool "net-tools" + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + A collection of programs that form the base set of the NET-3 + networking distribution for the Linux operating system. + Includes: arp, hostname, ifconfig, netstat, rarp, route, + plipconfig, slattach, mii-tool, iptunnel and ipmaddr. + + http://sourceforge.net/projects/net-tools/ diff --git a/package/net-tools/net-tools.hash b/package/net-tools/net-tools.hash new file mode 100644 index 00000000..e29415b8 --- /dev/null +++ b/package/net-tools/net-tools.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 4c68ef33d97cc807fe437fa64a801355c36d638774c0c8a4342742f6bdceea78 net-tools-479bb4a7e11a4084e2935c0a576388f92469225b-br1.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/net-tools/net-tools.mk b/package/net-tools/net-tools.mk new file mode 100644 index 00000000..985fe2e3 --- /dev/null +++ b/package/net-tools/net-tools.mk @@ -0,0 +1,46 @@ +################################################################################ +# +# net-tools +# +################################################################################ + +NET_TOOLS_VERSION = 479bb4a7e11a4084e2935c0a576388f92469225b +NET_TOOLS_SITE = git://git.code.sf.net/p/net-tools/code +NET_TOOLS_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) +NET_TOOLS_LICENSE = GPL-2.0+ +NET_TOOLS_LICENSE_FILES = COPYING + +define NET_TOOLS_CONFIGURE_CMDS + (cd $(@D); yes "" | ./configure.sh config.in ) +endef + +# Enable I18N when appropiate +ifeq ($(BR2_SYSTEM_ENABLE_NLS),y) +define NET_TOOLS_ENABLE_I18N + $(SED) 's:I18N 0:I18N 1:' $(@D)/config.h +endef +endif + +# Enable IPv6 +define NET_TOOLS_ENABLE_IPV6 + $(SED) 's:_AFINET6 0:_AFINET6 1:' $(@D)/config.h +endef + +NET_TOOLS_POST_CONFIGURE_HOOKS += NET_TOOLS_ENABLE_I18N NET_TOOLS_ENABLE_IPV6 + +define NET_TOOLS_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) \ + LDFLAGS="$(TARGET_LDFLAGS) $(TARGET_NLS_LIBS)" \ + $(MAKE) -C $(@D) +endef + +# install renames conflicting binaries, update does not +# ifconfig & route reside in /sbin for busybox, so ensure we don't end +# up with two versions of those. +define NET_TOOLS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) update + mv -f $(TARGET_DIR)/bin/ifconfig $(TARGET_DIR)/sbin/ifconfig + mv -f $(TARGET_DIR)/bin/route $(TARGET_DIR)/sbin/route +endef + +$(eval $(generic-package)) diff --git a/package/netatalk/0001-Fix-setting-of-LD_LIBRARY_FLAGS-shlibpath_var.patch b/package/netatalk/0001-Fix-setting-of-LD_LIBRARY_FLAGS-shlibpath_var.patch new file mode 100644 index 00000000..01d57765 --- /dev/null +++ b/package/netatalk/0001-Fix-setting-of-LD_LIBRARY_FLAGS-shlibpath_var.patch @@ -0,0 +1,48 @@ +From 60d100713b5289948e9cdf5b0646ff3cdd2c206b Mon Sep 17 00:00:00 2001 +From: "Arnout Vandecappelle (Essensium/Mind)" +Date: Mon, 17 Dec 2012 22:32:44 +0100 +Subject: [PATCH] Fix setting of LD_LIBRARY_FLAGS ($shlibpath_var). + +LD_LIBRARY_PATH should not be set when cross-compiling, because it +adds the cross-libraries to the build's LD-path. + +Also the restoring of LD_LIBRARY_PATH was done incorrectly: it would +set LD_LIBRARY_PATH=LD_LIBRARY_PATH. + +Signed-off-by: Arnout Vandecappelle (Essensium/Mind) +--- + macros/db3-check.m4 | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/macros/db3-check.m4 b/macros/db3-check.m4 +index 902220b..d5a5446 100644 +--- a/macros/db3-check.m4 ++++ b/macros/db3-check.m4 +@@ -94,7 +94,7 @@ if test "x$bdb_required" = "xyes"; then + savedldflags="$LDFLAGS" + savedcppflags="$CPPFLAGS" + savedlibs="$LIBS" +- saved_shlibpath_var=$shlibpath_var ++ eval saved_shlibpath_var=\$$shlibpath_var + + dnl required BDB version: 4.6, because of cursor API change + DB_MAJOR_REQ=4 +@@ -148,7 +148,7 @@ if test "x$bdb_required" = "xyes"; then + dnl -- LD_LIBRARY_PATH on many platforms. This will be fairly + dnl -- portable hopefully. Reference: + dnl -- http://lists.gnu.org/archive/html/autoconf/2009-03/msg00040.html +- eval export $shlibpath_var=$bdblibdir ++ test "$cross_compiling" = yes || eval export $shlibpath_var=$bdblibdir + NETATALK_BDB_TRY_LINK + eval export $shlibpath_var=$saved_shlibpath_var + +@@ -171,7 +171,7 @@ if test "x$bdb_required" = "xyes"; then + CPPFLAGS="-I${bdbdir}/include${subdir} $CPPFLAGS" + LDFLAGS="-L$bdblibdir $LDFLAGS" + +- eval export $shlibpath_var=$bdblibdir ++ test "$cross_compiling" = yes || eval export $shlibpath_var=$bdblibdir + NETATALK_BDB_TRY_LINK + eval export $shlibpath_var=$saved_shlibpath_var + +-- diff --git a/package/netatalk/0002-fix-ftbs-multiple-def-of-invalid_dircache_entries.patch b/package/netatalk/0002-fix-ftbs-multiple-def-of-invalid_dircache_entries.patch new file mode 100644 index 00000000..e7ccc525 --- /dev/null +++ b/package/netatalk/0002-fix-ftbs-multiple-def-of-invalid_dircache_entries.patch @@ -0,0 +1,25 @@ +From 32df6e155ccfc83216321925273c3e75e631ebe6 Mon Sep 17 00:00:00 2001 +From: Andrew Bauer +Date: Wed, 22 Jan 2020 09:59:47 -0600 +Subject: [PATCH] fix ftbs multiple def of invalid_dircache_entries + +[Retrieved from: +https://github.com/Netatalk/Netatalk/pull/125/commits/32df6e155ccfc83216321925273c3e75e631ebe6] +Signed-off-by: Fabrice Fontaine +--- + etc/afpd/directory.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/etc/afpd/directory.h b/etc/afpd/directory.h +index eb89c606..81bfa9cb 100644 +--- a/etc/afpd/directory.h ++++ b/etc/afpd/directory.h +@@ -91,7 +91,7 @@ struct maccess { + #define AR_UWRITE (1<<2) + #define AR_UOWN (1<<7) + +-q_t *invalid_dircache_entries; ++extern q_t *invalid_dircache_entries; + + typedef int (*dir_loop)(struct dirent *, char *, void *); + diff --git a/package/netatalk/Config.in b/package/netatalk/Config.in new file mode 100644 index 00000000..1560a187 --- /dev/null +++ b/package/netatalk/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_NETATALK + bool "netatalk" + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgpg-error + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_BERKELEYDB + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_LIBEVENT + select BR2_PACKAGE_LIBGCRYPT + select BR2_PACKAGE_LIBGPG_ERROR + help + Netatalk can be used to turn a *NIX machine into an + extremely high-performance and reliable file server for + Macintosh computers. + + http://netatalk.sourceforge.net/ + +comment "netatalk needs a toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/netatalk/S50netatalk b/package/netatalk/S50netatalk new file mode 100644 index 00000000..287b20d7 --- /dev/null +++ b/package/netatalk/S50netatalk @@ -0,0 +1,33 @@ +#!/bin/sh +# +# Start netatalk +# + +start() { + echo "Starting Netatalk" + start-stop-daemon -S -q -p /var/run/netatalk.pid --exec /usr/sbin/netatalk +} + +stop(){ + echo "Stopping Netatalk" + start-stop-daemon -K -q -p /var/run/netatalk.pid +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + start + stop + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? + diff --git a/package/netatalk/netatalk.hash b/package/netatalk/netatalk.hash new file mode 100644 index 00000000..6c3250a0 --- /dev/null +++ b/package/netatalk/netatalk.hash @@ -0,0 +1,6 @@ +# From http://sourceforge.net/projects/netatalk/files/netatalk/3.1.12/ +md5 021d2330cb7f7cd2977aec46299dcc1b netatalk-3.1.12.tar.bz2 +sha1 cc1fe1ebdbdb4da9cf82835c440e82ba28a832c5 netatalk-3.1.12.tar.bz2 +# Locally computed +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING +sha256 7599ae145e53be03a08f8b558b2f2e0c828e1630f1843cc04f41981b8cefcd65 COPYRIGHT diff --git a/package/netatalk/netatalk.mk b/package/netatalk/netatalk.mk new file mode 100644 index 00000000..0c219a23 --- /dev/null +++ b/package/netatalk/netatalk.mk @@ -0,0 +1,61 @@ +################################################################################ +# +# netatalk +# +################################################################################ + +NETATALK_VERSION = 3.1.12 +NETATALK_SITE = http://downloads.sourceforge.net/project/netatalk/netatalk/$(NETATALK_VERSION) +NETATALK_SOURCE = netatalk-$(NETATALK_VERSION).tar.bz2 +# For 0001-Fix-setting-of-LD_LIBRARY_FLAGS-shlibpath_var.patch +NETATALK_AUTORECONF = YES +NETATALK_CONFIG_SCRIPTS = netatalk-config +NETATALK_DEPENDENCIES = host-pkgconf openssl berkeleydb libgcrypt libgpg-error \ + libevent +NETATALK_LICENSE = GPL-2.0+, LGPL-3.0+, MIT-like +NETATALK_LICENSE_FILES = COPYING COPYRIGHT +NETATALK_CPE_ID_VENDOR = netatalk_project + +# Don't run ldconfig! +NETATALK_CONF_ENV += CC="$(TARGET_CC) -std=gnu99" \ + ac_cv_path_NETA_LDCONFIG="" +NETATALK_CONF_OPTS += \ + --with-cnid-cdb-backend \ + --with-bdb=$(STAGING_DIR)/usr \ + --with-ssl-dir=$(STAGING_DIR)/usr \ + --with-libgcrypt-dir=$(STAGING_DIR)/usr \ + --with-shadow \ + --disable-shell-check \ + --without-kerberos \ + --without-pam \ + --with-libevent=no \ + --with-dtrace=no \ + --with-mysql-config=no + +ifeq ($(BR2_PACKAGE_ACL),y) +NETATALK_DEPENDENCIES += acl +else +NETATALK_CONF_OPTS += --with-acls=no +endif + +ifeq ($(BR2_PACKAGE_AVAHI_DAEMON)$(BR2_PACKAGE_DBUS),yy) +NETATALK_DEPENDENCIES += avahi +NETATALK_CONF_OPTS += --enable-zeroconf=$(STAGING_DIR)/usr +else +NETATALK_CONF_OPTS += --disable-zeroconf +endif + +ifeq ($(BR2_PACKAGE_CUPS),y) +NETATALK_DEPENDENCIES += cups +NETATALK_CONF_ENV += ac_cv_path_CUPS_CONFIG=$(STAGING_DIR)/usr/bin/cups-config +NETATALK_CONF_OPTS += --enable-cups +else +NETATALK_CONF_OPTS += --disable-cups +endif + +define NETATALK_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/netatalk/S50netatalk \ + $(TARGET_DIR)/etc/init.d/S50netatalk +endef + +$(eval $(autotools-package)) diff --git a/package/netcalc/Config.in b/package/netcalc/Config.in new file mode 100644 index 00000000..897cb872 --- /dev/null +++ b/package/netcalc/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_NETCALC + bool "netcalc" + help + netcalc (40 kiB) is a slimmed down version of sipcalc + using the popular output format of ipcalc. Both IPv4 + and IPv6 are supported. + + https://github.com/troglobit/netcalc/ diff --git a/package/netcalc/netcalc.hash b/package/netcalc/netcalc.hash new file mode 100644 index 00000000..34d64b16 --- /dev/null +++ b/package/netcalc/netcalc.hash @@ -0,0 +1,5 @@ +# From https://github.com/troglobit/netcalc/releases/tag/v2.1.6 +md5 c8660b61370c76d866247fe65966a35b netcalc-2.1.6.tar.gz +# Locally computed: +sha256 cff41782fcf63d7d4ce6d35f95ed302127f6ddf6fc0ca03a8188af95a7c3243b netcalc-2.1.6.tar.gz +sha256 745538f8d515d37af6f03442df982a8b211b129e8dc10d0195e33c4b42f8fe5f LICENSE diff --git a/package/netcalc/netcalc.mk b/package/netcalc/netcalc.mk new file mode 100644 index 00000000..7d96fc53 --- /dev/null +++ b/package/netcalc/netcalc.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# netcalc +# +################################################################################ + +NETCALC_VERSION = 2.1.6 +NETCALC_SITE = https://github.com/troglobit/netcalc/releases/download/v$(NETCALC_VERSION) +NETCALC_LICENSE = BSD-3-Clause +NETCALC_LICENSE_FILES = LICENSE +NETCALC_CONF_OPTS = --disable-ipcalc-symlink + +$(eval $(autotools-package)) diff --git a/package/netcat-openbsd/Config.in b/package/netcat-openbsd/Config.in new file mode 100644 index 00000000..beaa8ed4 --- /dev/null +++ b/package/netcat-openbsd/Config.in @@ -0,0 +1,30 @@ +config BR2_PACKAGE_NETCAT_OPENBSD + bool "netcat-openbsd" + depends on BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS + depends on !BR2_STATIC_LIBS # libbsd + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_USES_GLIBC + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12 + select BR2_PACKAGE_LIBBSD + help + A simple Unix utility which reads and writes data across + network connections using TCP or UDP protocol. It is + designed to be a reliable "back-end" tool that can be used + directly or easily driven by other programs and scripts. At + the same time it is a feature-rich network debugging and + exploration tool, since it can create almost any kind of + connection you would need and has several interesting + built-in capabilities. + + This package contains the OpenBSD rewrite of netcat, + including support for IPv6, proxies, and Unix sockets. + + https://packages.debian.org/sid/netcat-openbsd + +comment "netcat-openbsd needs a glibc toolchain w/ dynamic library, threads, headers >= 3.12" + depends on BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_USES_GLIBC || \ + !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12 + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS diff --git a/package/netcat-openbsd/netcat-openbsd.hash b/package/netcat-openbsd/netcat-openbsd.hash new file mode 100644 index 00000000..b70cae88 --- /dev/null +++ b/package/netcat-openbsd/netcat-openbsd.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 55e578f652cbf6ffc95f75ea3e2645ab335fab63649568bd7cdb0a6331ca87de netcat-openbsd-debian_1.195-2-br1.tar.gz +sha256 e2e86d58c38f044a49f51e45515747585db58a2305419c73323eaad88fcaef5c debian/copyright diff --git a/package/netcat-openbsd/netcat-openbsd.mk b/package/netcat-openbsd/netcat-openbsd.mk new file mode 100644 index 00000000..a2333531 --- /dev/null +++ b/package/netcat-openbsd/netcat-openbsd.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# netcat-openbsd +# +################################################################################ + +NETCAT_OPENBSD_VERSION = debian/1.195-2 +NETCAT_OPENBSD_SITE = https://salsa.debian.org/debian/netcat-openbsd.git +NETCAT_OPENBSD_SITE_METHOD = git +NETCAT_OPENBSD_LICENSE = BSD-3-Clause +NETCAT_OPENBSD_LICENSE_FILES = debian/copyright +NETCAT_OPENBSD_DEPENDENCIES = host-pkgconf libbsd + +define NETCAT_OPENBSD_APPLY_DEBIAN_PATCHES + if [ -d $(@D)/debian/patches ]; then \ + $(APPLY_PATCHES) $(@D) $(@D)/debian/patches *.dpatch; \ + fi +endef + +NETCAT_OPENBSD_POST_PATCH_HOOKS += NETCAT_OPENBSD_APPLY_DEBIAN_PATCHES + +define NETCAT_OPENBSD_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) +endef + +define NETCAT_OPENBSD_INSTALL_TARGET_CMDS + $(INSTALL) -m 755 -D $(@D)/nc $(TARGET_DIR)/usr/bin/nc +endef + +$(eval $(generic-package)) diff --git a/package/netcat/0001-signed-bit-counting.patch b/package/netcat/0001-signed-bit-counting.patch new file mode 100644 index 00000000..e29da311 --- /dev/null +++ b/package/netcat/0001-signed-bit-counting.patch @@ -0,0 +1,30 @@ +# Fix the endian-specific bit-counting code so that it works. +# SF:1068324 "netcat_flag_count() fix" +# http://sourceforge.net/tracker/?func=detail&aid=1205729&group_id=52204&atid=466046 +# SF:1205729 "doen't work on arm linux platform": +# http://sourceforge.net/tracker/?func=detail&aid=1068324&group_id=52204&atid=466046 + +Index: netcat-0.7.1/src/flagset.c +=================================================================== +--- netcat-0.7.1.orig/src/flagset.c 2010-07-19 13:51:46.000000000 +0100 ++++ netcat-0.7.1/src/flagset.c 2010-07-19 13:52:27.000000000 +0100 +@@ -134,7 +134,7 @@ + + int netcat_flag_count(void) + { +- register char c; ++ register unsigned char c; + register int i; + int ret = 0; + +@@ -154,8 +154,8 @@ + Assumed that the bit number 1 is the sign, and that we will shift the + bit 1 (or the bit that takes its place later) until the the most right, + WHY it has to keep the wrong sign? */ +- ret -= (c >> 7); +- c <<= 1; ++ ret += c&1; ++ c>>=1; + } + } + diff --git a/package/netcat/Config.in b/package/netcat/Config.in new file mode 100644 index 00000000..26bc7fa4 --- /dev/null +++ b/package/netcat/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_NETCAT + bool "netcat" + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + Netcat is a featured networking utility which reads and + writes data across network connections, using the TCP/IP + protocol. + It is designed to be a reliable "back-end" tool that can be + used directly or easily driven by other programs and + scripts. At the same time, it is a feature-rich network + debugging and exploration tool, since it can create almost + any kind of connection you would need and has several + interesting built-in capabilities. + + http://netcat.sourceforge.net/download.php diff --git a/package/netcat/netcat.hash b/package/netcat/netcat.hash new file mode 100644 index 00000000..d591f3d6 --- /dev/null +++ b/package/netcat/netcat.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 30719c9a4ffbcf15676b8f528233ccc54ee6cba96cb4590975f5fd60c68a066f netcat-0.7.1.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/netcat/netcat.mk b/package/netcat/netcat.mk new file mode 100644 index 00000000..939c9fa9 --- /dev/null +++ b/package/netcat/netcat.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# netcat +# +################################################################################ + +NETCAT_VERSION = 0.7.1 +NETCAT_SITE = http://downloads.sourceforge.net/project/netcat/netcat/$(NETCAT_VERSION) +NETCAT_LICENSE = GPL-2.0+ +NETCAT_LICENSE_FILES = COPYING +NETCAT_CPE_ID_VENDOR = netcat_project + +$(eval $(autotools-package)) diff --git a/package/netdata/Config.in b/package/netdata/Config.in new file mode 100644 index 00000000..88f88cb7 --- /dev/null +++ b/package/netdata/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_NETDATA + bool "netdata" + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS # libuv + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # libuv + select BR2_PACKAGE_LIBUV + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + select BR2_PACKAGE_ZLIB + help + Netdata is distributed, real-time, performance and health + monitoring for systems and applications. It is a highly + optimized monitoring agent you install on all your systems and + containers. + + https://github.com/netdata/netdata + +comment "netdata needs a toolchain w/ NPTL, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIBS + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 diff --git a/package/netdata/S60netdata b/package/netdata/S60netdata new file mode 100644 index 00000000..421f0715 --- /dev/null +++ b/package/netdata/S60netdata @@ -0,0 +1,55 @@ +#!/bin/sh + +DAEMON="netdata" +PIDFILE="/var/run/$DAEMON.pid" + +NETDATA_ARGS="-u root -P $PIDFILE" + +# Create needed directories. +mkdir -p /var/cache/$DAEMON /var/lib/$DAEMON /var/log/$DAEMON + +# shellcheck source=/dev/null +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON" + +start() { + printf 'Starting %s: ' "$DAEMON" + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon -S -q -p "$PIDFILE" -x "/usr/sbin/$DAEMON" \ + -- $NETDATA_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +case "$1" in + start|stop|restart) + "$1";; + reload) + # Restart, since there is no true "reload" feature. + restart;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/netdata/netdata.hash b/package/netdata/netdata.hash new file mode 100644 index 00000000..8d5ce51f --- /dev/null +++ b/package/netdata/netdata.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 60cdde3f1f8bd9035fef6a566053c0a7195d1714b5da6814473263e85382b4a8 netdata-1.21.1.tar.gz +sha256 0e5fd9d833efe9b79f784d1903281554af82d1b4261af67d35455728e5572aa6 LICENSE diff --git a/package/netdata/netdata.mk b/package/netdata/netdata.mk new file mode 100644 index 00000000..1c20c49d --- /dev/null +++ b/package/netdata/netdata.mk @@ -0,0 +1,59 @@ +################################################################################ +# +# netdata +# +################################################################################ + +NETDATA_VERSION = 1.21.1 +NETDATA_SITE = $(call github,netdata,netdata,v$(NETDATA_VERSION)) +NETDATA_LICENSE = GPL-3.0+ +NETDATA_LICENSE_FILES = LICENSE +# netdata's source code is released without a generated configure script +NETDATA_AUTORECONF = YES +NETDATA_CONF_OPTS = --disable-dbengine +NETDATA_DEPENDENCIES = libuv util-linux zlib + +ifeq ($(BR2_GCC_ENABLE_LTO),y) +NETDATA_CONF_OPTS += --enable-lto +else +NETDATA_CONF_OPTS += --disable-lto +endif + +ifeq ($(BR2_PACKAGE_CUPS),y) +NETDATA_CONF_OPTS += --enable-plugin-cups +NETDATA_DEPENDENCIES += cups +else +NETDATA_CONF_OPTS += --disable-plugin-cups +endif + +ifeq ($(BR2_PACKAGE_JSON_C),y) +NETDATA_CONF_OPTS += --enable-jsonc +NETDATA_DEPENDENCIES += json-c +else +NETDATA_CONF_OPTS += --disable-jsonc +endif + +ifeq ($(BR2_PACKAGE_NFACCT),y) +NETDATA_CONF_OPTS += --enable-plugin-nfacct +NETDATA_DEPENDENCIES += nfacct +else +NETDATA_CONF_OPTS += --disable-plugin-nfacct +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +NETDATA_CONF_OPTS += --enable-https +NETDATA_DEPENDENCIES += openssl +else +NETDATA_CONF_OPTS += --disable-https +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +NETDATA_CONF_ENV += LIBS=-latomic +endif + +define NETDATA_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 package/netdata/S60netdata \ + $(TARGET_DIR)/etc/init.d/S60netdata +endef + +$(eval $(autotools-package)) diff --git a/package/netifrc/Config.in b/package/netifrc/Config.in new file mode 100644 index 00000000..9347033d --- /dev/null +++ b/package/netifrc/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_NETIFRC + bool "netifrc" + depends on BR2_PACKAGE_OPENRC + help + netifrc is a collection of modules created to configure and + manage network interfaces via individual, per-interface + scripts. + + https://wiki.gentoo.org/wiki/Netifrc + +comment "netifrc needs openrc as init system" + depends on !BR2_PACKAGE_OPENRC diff --git a/package/netifrc/netifrc.hash b/package/netifrc/netifrc.hash new file mode 100644 index 00000000..d811acc4 --- /dev/null +++ b/package/netifrc/netifrc.hash @@ -0,0 +1,3 @@ +# Calculated manually +sha256 004907e0c3db2d106d6a51d604d79f971f1013fa7642054ad7efe5076e52f7b3 netifrc-0.6.1.tar.gz +sha256 da376c9e2244f2a7220767ea4dd88cf423ff5b548e7c2f96b0f3b9dac727748a LICENSE diff --git a/package/netifrc/netifrc.mk b/package/netifrc/netifrc.mk new file mode 100644 index 00000000..d13dc356 --- /dev/null +++ b/package/netifrc/netifrc.mk @@ -0,0 +1,58 @@ +################################################################################ +# +# netifrc +# +################################################################################ + +NETIFRC_VERSION = 0.6.1 +NETIFRC_SITE = $(call github,gentoo,netifrc,$(NETIFRC_VERSION)) +NETIFRC_LICENSE = BSD-2-Clause +NETIFRC_LICENSE_FILES = LICENSE + +NETIFRC_DEPENDENCIES = openrc + +# set LIBNAME so netifrc puts files in proper directories and sets proper +# paths in installed files. Since in buildroot /lib64 and /lib32 always +# points to /lib, it's safe to hardcode it to "lib" +NETIFRC_MAKE_OPTS = \ + LIBNAME=lib \ + UDEVDIR=/lib/udev \ + LIBEXECDIR=/usr/libexec/netifrc + +define NETIFRC_BUILD_CMDS + $(MAKE) $(NETIFRC_MAKE_OPTS) -C $(@D) +endef + +ifeq ($(BR2_PACKAGE_HAS_UDEV),) +define NETIFRC_REMOVE_UDEV + $(RM) $(TARGET_DIR)/lib/udev/net.sh + $(RM) $(TARGET_DIR)/lib/udev/rules.d/90-network.rules + rmdir --ignore-fail-on-non-empty $(TARGET_DIR)/lib/udev/rules.d + rmdir --ignore-fail-on-non-empty $(TARGET_DIR)/lib/udev +endef +endif # BR2_PACKAGE_HAS_UDEV + +NETIFRC_DHCP_IFACE = $(call qstrip,$(BR2_SYSTEM_DHCP)) +ifneq ($(NETIFRC_DHCP_IFACE),) +NETIFRC_DHCP_CFG = config_$(NETIFRC_DHCP_IFACE)="dhcp" +define NETIFRC_DHCP_SERVICE + ln -sf net.lo $(TARGET_DIR)/etc/init.d/net.$(NETIFRC_DHCP_IFACE) + ln -sf /etc/init.d/net.$(NETIFRC_DHCP_IFACE) \ + $(TARGET_DIR)/etc/runlevels/default/net.$(NETIFRC_DHCP_IFACE) +endef +endif # BR2_SYSTEM_DHCP != "" + +define NETIFRC_NET_CFG + config_lo="127.0.0.1/8" + $(NETIFRC_DHCP_CFG) +endef + +define NETIFRC_INSTALL_TARGET_CMDS + $(MAKE) $(NETIFRC_MAKE_OPTS) DESTDIR=$(TARGET_DIR) -C $(@D) install + $(NETIFRC_REMOVE_UDEV) + $(call PRINTF,$(NETIFRC_NET_CFG)) > $(TARGET_DIR)/etc/conf.d/net + ln -sf /etc/init.d/net.lo $(TARGET_DIR)/etc/runlevels/default/net.lo + $(NETIFRC_DHCP_SERVICE) +endef + +$(eval $(generic-package)) diff --git a/package/netopeer2/Config.in b/package/netopeer2/Config.in new file mode 100644 index 00000000..763b1f23 --- /dev/null +++ b/package/netopeer2/Config.in @@ -0,0 +1,34 @@ +comment "netopeer2 needs a toolchain w/ gcc >= 4.8, C++, threads, dynamic library" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS || !BR2_INSTALL_LIBSTDCPP \ + || !BR2_TOOLCHAIN_HAS_THREADS_NPTL || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + +config BR2_PACKAGE_NETOPEER2 + bool "netopeer2" + depends on BR2_USE_MMU # libnetconf2, libssh, sysrepo + depends on !BR2_STATIC_LIBS # libnetconf2, libssh, libyang, sysrepo + depends on BR2_INSTALL_LIBSTDCPP # sysrepo + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # sysrepo + select BR2_PACKAGE_LIBNETCONF2 + select BR2_PACKAGE_LIBSSH + select BR2_PACKAGE_LIBSSH_SERVER # For libnetconf2 to have SSH + select BR2_PACKAGE_LIBYANG + select BR2_PACKAGE_OPENSSL # For libnetconf2 to have TLS + select BR2_PACKAGE_SYSREPO + help + Netopeer2 is a set of tools implementing network configuration + tools based on the NETCONF Protocol. + + This is the server part. + + https://github.com/CESNET/Netopeer2 + +if BR2_PACKAGE_NETOPEER2 + +config BR2_PACKAGE_NETOPEER2_CLI + bool "cli" + help + Enable netopeer2 CLI. + +endif diff --git a/package/netopeer2/S52netopeer2 b/package/netopeer2/S52netopeer2 new file mode 100644 index 00000000..cf53a8f1 --- /dev/null +++ b/package/netopeer2/S52netopeer2 @@ -0,0 +1,50 @@ +#!/bin/sh + +DAEMON="netopeer2-server" +PIDFILE="/var/run/$DAEMON.pid" + +NETOPEER2_SERVER_ARGS="" + +start() { + printf 'Starting %s: ' "$DAEMON" + + start-stop-daemon -S -b -q -p $PIDFILE -x "/usr/bin/$DAEMON" \ + -- $NETOPEER2_SERVER_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p $PIDFILE + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +reload() { + # we do not support real reload .. just restart + restart +} + +case "$1" in + start|stop|restart|reload) + "$1";; + *) + echo "Usage: $0 {start|stop|restart|reload}" +esac diff --git a/package/netopeer2/netopeer2.hash b/package/netopeer2/netopeer2.hash new file mode 100644 index 00000000..801c353e --- /dev/null +++ b/package/netopeer2/netopeer2.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 6b43026211a787d5cb91d47cb7fdd7923649044c55f264aaf85bf5676c004211 netopeer2-1.1.53.tar.gz +sha256 b46f161fbdcf127d3ef22602e15958c3092fe3294f71a2dc8cdf8f6689cba95b LICENSE diff --git a/package/netopeer2/netopeer2.mk b/package/netopeer2/netopeer2.mk new file mode 100644 index 00000000..be5ffd2b --- /dev/null +++ b/package/netopeer2/netopeer2.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# netopeer2 +# +################################################################################ + +NETOPEER2_VERSION = 1.1.53 +NETOPEER2_SITE = $(call github,CESNET,Netopeer2,v$(NETOPEER2_VERSION)) +NETOPEER2_DL_SUBDIR = netopeer2 +NETOPEER2_LICENSE = BSD-3-Clause +NETOPEER2_LICENSE_FILES = LICENSE +NETOPEER2_DEPENDENCIES = libnetconf2 libyang sysrepo host-sysrepo + +NETOPEER2_CONF_OPTS = -DBUILD_CLI=$(if $(BR2_PACKAGE_NETOPEER2_CLI),ON,OFF) + +# Set a build specific SYSREPO_SHM_PREFIX to ensure we can safely delete the +# files. This also ensures that concurrent parallel builds will not be +# affected mutualy. +NETOPEER2_SYSREPO_SHM_PREFIX = sr_buildroot$(subst /,_,$(CONFIG_DIR))_netopeer2 + +NETOPEER2_MAKE_ENV = \ + SYSREPOCTL_EXECUTABLE=$(HOST_DIR)/bin/sysrepoctl \ + SYSREPO_SHM_PREFIX=$(NETOPEER2_SYSREPO_SHM_PREFIX) + +define NETOPEER2_INSTALL_INIT_SYSV + $(INSTALL) -m 755 -D package/netopeer2/S52netopeer2 \ + $(TARGET_DIR)/etc/init.d/S52netopeer2 +endef + +# The host sysrepo used to install the netopeer2 modules will leave +# its shared memory files lingering about. Clean up in its stead... +# We need to clean up both before and after installation, to catch +# the case of a previous build that failed before we run that hook. +define NETOPEER2_CLEANUP + rm -f /dev/shm/$(NETOPEER2_SYSREPO_SHM_PREFIX)* +endef +NETOPEER2_PRE_INSTALL_TARGET_HOOKS += NETOPEER2_CLEANUP +NETOPEER2_POST_INSTALL_TARGET_HOOKS += NETOPEER2_CLEANUP + +$(eval $(cmake-package)) diff --git a/package/netperf/0001-src-nettest_omni.c-fix-compilation-with-GCC10.patch b/package/netperf/0001-src-nettest_omni.c-fix-compilation-with-GCC10.patch new file mode 100644 index 00000000..261dfe9a --- /dev/null +++ b/package/netperf/0001-src-nettest_omni.c-fix-compilation-with-GCC10.patch @@ -0,0 +1,42 @@ +From b2fd0f324002d0cf52ae905b2a469bf1067f182a Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 5 Sep 2020 14:30:20 +0200 +Subject: [PATCH] src/nettest_omni.c: fix compilation with GCC10 + +GCC10 defaults to -fno-common, which breaks compilation when there are +multiple definitions of implicit "extern" variables. Remove the extra +definitions. + +Fix #42 + +Signed-off-by: Tony Ambardar +[Retrieved from: +https://github.com/openwrt/packages/blob/master/net/netperf/patches/010-gcc10_multiple_definition_fix.patch] +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/HewlettPackard/netperf/pull/48] +--- + src/nettest_omni.c | 8 -------- + 1 file changed, 8 deletions(-) + +diff --git a/src/nettest_omni.c b/src/nettest_omni.c +index 852eeb1..862088a 100644 +--- a/src/nettest_omni.c ++++ b/src/nettest_omni.c +@@ -458,14 +458,6 @@ static int client_port_max = 65535; + + /* different options for the sockets */ + +-int +- loc_nodelay, /* don't/do use NODELAY locally */ +- rem_nodelay, /* don't/do use NODELAY remotely */ +- loc_sndavoid, /* avoid send copies locally */ +- loc_rcvavoid, /* avoid recv copies locally */ +- rem_sndavoid, /* avoid send copies remotely */ +- rem_rcvavoid; /* avoid recv_copies remotely */ +- + extern int + loc_tcpcork, + rem_tcpcork, +-- +2.28.0 + diff --git a/package/netperf/Config.in b/package/netperf/Config.in new file mode 100644 index 00000000..a935fde5 --- /dev/null +++ b/package/netperf/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_NETPERF + bool "netperf" + help + Network performance benchmark tool + + https://hewlettpackard.github.io/netperf/ diff --git a/package/netperf/netperf.hash b/package/netperf/netperf.hash new file mode 100644 index 00000000..47730855 --- /dev/null +++ b/package/netperf/netperf.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 842af17655835c8be7203808c3393e6cb327a8067f3ed1f1053eb78b4e40375a netperf-2.7.0.tar.bz2 +sha256 dc874b3047b6259336431e813961fb6c5945561c6ad7a732aa8531a3c6b1a9fa COPYING diff --git a/package/netperf/netperf.mk b/package/netperf/netperf.mk new file mode 100644 index 00000000..85f6bce0 --- /dev/null +++ b/package/netperf/netperf.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# netperf +# +################################################################################ + +NETPERF_VERSION = 2.7.0 +NETPERF_SITE = http://sources.buildroot.org/netperf +NETPERF_SOURCE = netperf-$(NETPERF_VERSION).tar.bz2 +# gcc 5+ defaults to gnu99 which breaks netperf +NETPERF_CONF_ENV = \ + ac_cv_func_setpgrp_void=set \ + CFLAGS="$(TARGET_CFLAGS) -std=gnu89" +NETPERF_CONF_OPTS = --enable-demo=yes +NETPERF_LICENSE = netperf license +NETPERF_LICENSE_FILES = COPYING + +define NETPERF_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 $(@D)/src/netperf \ + $(TARGET_DIR)/usr/bin/netperf + $(INSTALL) -m 0755 $(@D)/src/netserver \ + $(TARGET_DIR)/usr/bin/netserver +endef + +$(eval $(autotools-package)) diff --git a/package/netplug/0001-makefile-flags.patch b/package/netplug/0001-makefile-flags.patch new file mode 100644 index 00000000..b2468f8c --- /dev/null +++ b/package/netplug/0001-makefile-flags.patch @@ -0,0 +1,21 @@ +Preserve the cflags settings, because buildroot clobbers them. + +--- a/Makefile 2010-10-05 00:06:38.000000000 -0700 ++++ b/Makefile 2010-10-05 00:15:27.000000000 -0700 +@@ -11,11 +11,14 @@ mandir ?= $(prefix)/usr/share/man + + install_opts := + +-CFLAGS += -Wall -std=gnu99 -DNP_ETC_DIR='"$(etcdir)"' \ ++NETPLUG_CFLAGS += -Wall -std=gnu99 -DNP_ETC_DIR='"$(etcdir)"' \ + -DNP_SCRIPT_DIR='"$(scriptdir)"' -ggdb3 -O3 -DNP_VERSION='"$(version)"' + ++%.o: %.c ++ $(CC) $(NETPLUG_CFLAGS) $(CFLAGS) -c -o $@ $< ++ + netplugd: config.o netlink.o lib.o if_info.o main.o +- $(CC) $(LDFLAGS) -o $@ $^ ++ $(CC) $(LDFLAGS) -o $@ $(NETPLUG_CFLAGS) $^ + + install: + install -d $(install_opts) -m 755 \ diff --git a/package/netplug/0002-add-missing-time-include.patch b/package/netplug/0002-add-missing-time-include.patch new file mode 100644 index 00000000..f204c924 --- /dev/null +++ b/package/netplug/0002-add-missing-time-include.patch @@ -0,0 +1,20 @@ +Add missing include + +netplug.h uses time_t, so it must include . This fixes a build +issue with the musl C library. + +Signed-off-by: Thomas Petazzoni + +Index: b/netplug.h +=================================================================== +--- a/netplug.h ++++ b/netplug.h +@@ -20,7 +20,7 @@ + #ifndef __netplug_h + #define __netplug_h + +- ++#include + #include + #include + #include diff --git a/package/netplug/0003-remove-assert-fail.patch b/package/netplug/0003-remove-assert-fail.patch new file mode 100644 index 00000000..635c462a --- /dev/null +++ b/package/netplug/0003-remove-assert-fail.patch @@ -0,0 +1,51 @@ +Remove __assert_fail() + +The netplug code uses the assert() macro in various places. In glibc +internally, assert() uses a function called __assert_fail() to print a +message and abort. Relying on internal glibc details, netplug +re-defines __assert_fail() in the hope that it will get called instead +of glibc internal version. + +This attempt: + + * Doesn't work with uClibc, which doesn't use any __assert_fail() + function at all. It doesn't fail to build, but it is entirely + useless. + + * Fails to build with musl, which also defines __assert_fail(), but + with a different prototype. + +We simply remove the __assert_fail() implementation, so that the C +library implementation of assert() just does its normal work. The only +functionality lost is that the message is displayed on the standard +output rather than in netplug's logs (and this was only working with +glibc anyway). + +Signed-off-by: Thomas Petazzoni + +Index: b/lib.c +=================================================================== +--- a/lib.c ++++ b/lib.c +@@ -199,21 +199,6 @@ + return x; + } + +- +-void +-__assert_fail(const char *assertion, const char *file, +- unsigned int line, const char *function) +-{ +- do_log(LOG_CRIT, "%s:%u: %s%sAssertion `%s' failed", +- file, line, +- function ? function : "", +- function ? ": " : "", +- assertion); +- +- abort(); +-} +- +- + /* + * Local variables: + * c-file-style: "stroustrup" diff --git a/package/netplug/Config.in b/package/netplug/Config.in new file mode 100644 index 00000000..593c08a9 --- /dev/null +++ b/package/netplug/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_NETPLUG + bool "netplug" + depends on BR2_USE_MMU # fork() + help + A Linux daemon that manages network interfaces in + response to network cables being plugged in and out. + + http://www.red-bean.com/~bos/ diff --git a/package/netplug/S29netplug b/package/netplug/S29netplug new file mode 100644 index 00000000..cef0e6a9 --- /dev/null +++ b/package/netplug/S29netplug @@ -0,0 +1,70 @@ +#!/bin/sh +# +# netplugd This shell script takes care of starting and stopping +# the network plug management daemon. +# +# chkconfig: - 11 89 +# description: netplugd is a daemon for managing non-static network \ +# interfaces. +# processname: netplugd +# pidfile: /var/run/netplugd.pid + +# Copyright 2003 Key Research, Inc. + +# Create needed directories +mkdir -p /var/lock/subsys + +# Source function library. +if [ -f /etc/init.d/functions ]; then + . /etc/init.d/functions +elif [ -f /etc/rc.d/init.d/functions ]; then + . /etc/rc.d/init.d/functions +fi + +# Source networking configuration. +if [ -f /etc/default/network ]; then + . /etc/default/network + + # Check that networking is up. + [ "${NETWORKING}" = "no" ] && exit 0 +elif [ ! -f /etc/network/interfaces ]; then + # No network support + exit 0 +fi + +if [ -f /etc/default/netplugd ]; then + . /etc/default/netplugd +fi + +# See how we were called. +case "$1" in + start) + # Start daemon. + printf "Starting network plug daemon: " + start-stop-daemon -S -q -x /sbin/netplugd -- -p /var/run/netplugd.pid ${NETPLUGDARGS} + RETVAL=$? + echo + [ $RETVAL -eq 0 ] && touch /var/lock/subsys/netplugd + ;; + stop) + # Stop daemon. + printf "Shutting down network plug daemon: " + start-stop-daemon -K -q -p /var/run/netplugd.pid + RETVAL=$? + echo + [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/netplugd + ;; + restart|reload) + $0 stop + $0 start + ;; + condrestart) + [ -f /var/lock/subsys/netplugd ] && $0 restart || : + ;; + *) + echo "Usage: $0 {start|stop|restart}" + RETVAL=1 + ;; +esac + +exit $RETVAL diff --git a/package/netplug/netplug-script b/package/netplug/netplug-script new file mode 100755 index 00000000..1af714d6 --- /dev/null +++ b/package/netplug/netplug-script @@ -0,0 +1,57 @@ +#!/bin/sh +# +# netplug - policy agent for netplugd +# +# Copyright 2003 Key Research, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License, version 2, as +# published by the Free Software Foundation. You are forbidden from +# redistributing or modifying it under the terms of any other license, +# including other versions of the GNU General Public License. +# +# 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. + + +PATH=/usr/bin:/bin:/usr/sbin:/sbin +export PATH + +dev="$1" +action="$2" + +case "$action" in +in) + if [ -x /sbin/ifup ]; then + exec /sbin/ifup $dev + else + echo "Please teach me how to plug in an interface!" 1>&2 + exit 1 + fi + ;; +out) + if [ -x /sbin/ifdown ]; then + # At least on Fedora Core 1, the call to ip addr flush infloops + # /sbin/ifdown $dev && exec /sbin/ip addr flush $dev + exec /sbin/ifdown $dev + else + echo "Please teach me how to unplug an interface!" 1>&2 + exit 1 + fi + ;; +probe) + # exec /sbin/ip link set $dev up >/dev/null 2>&1 + if [ -x /sbin/ifconfig ]; then + exec /sbin/ifconfig $dev up >/dev/null 2>&1 + else + echo "Failed to probe an interface!" 1>&2 + exit 1 + fi + ;; +*) + echo "I have been called with a funny action of '%s'!" 1>&2 + exit 1 + ;; +esac diff --git a/package/netplug/netplug.hash b/package/netplug/netplug.hash new file mode 100644 index 00000000..a0d2317a --- /dev/null +++ b/package/netplug/netplug.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 5180dfd9a7d3d0633a027b0a04f01b45a6a64623813cd48bd54423b90814864e netplug-1.2.9.2.tar.bz2 +sha256 08ce3ddda499d6befdc80161c7cc82e90da05c31eb1047dae41ef531d5170e9b COPYING diff --git a/package/netplug/netplug.mk b/package/netplug/netplug.mk new file mode 100644 index 00000000..b5083120 --- /dev/null +++ b/package/netplug/netplug.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# netplug +# +################################################################################ + +NETPLUG_VERSION = 1.2.9.2 +NETPLUG_SOURCE = netplug-$(NETPLUG_VERSION).tar.bz2 +NETPLUG_SITE = http://www.red-bean.com/~bos/netplug +NETPLUG_LICENSE = GPL-2.0 +NETPLUG_LICENSE_FILES = COPYING + +define NETPLUG_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) +endef + +define NETPLUG_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) DESTDIR=$(TARGET_DIR) -C $(@D) install +endef + +define NETPLUG_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/netplug/S29netplug \ + $(TARGET_DIR)/etc/init.d/S29netplug +endef + +define NETPLUG_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/netplug/netplug.service \ + $(TARGET_DIR)/usr/lib/systemd/system/netplug.service +endef + +$(eval $(generic-package)) diff --git a/package/netplug/netplug.service b/package/netplug/netplug.service new file mode 100644 index 00000000..017a21f3 --- /dev/null +++ b/package/netplug/netplug.service @@ -0,0 +1,10 @@ +[Unit] +Description=Network cable hotplug management daemon +After=syslog.target network.target + +[Service] +ExecStart=/sbin/netplugd -F +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/package/netsniff-ng/Config.in b/package/netsniff-ng/Config.in new file mode 100644 index 00000000..5d1407ba --- /dev/null +++ b/package/netsniff-ng/Config.in @@ -0,0 +1,35 @@ +config BR2_PACKAGE_NETSNIFF_NG + bool "netsniff-ng" + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0 + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_PACKAGE_LIBURCU_ARCH_SUPPORTS + select BR2_PACKAGE_LIBNL + select BR2_PACKAGE_LIBPCAP + select BR2_PACKAGE_LIBNETFILTER_CONNTRACK + select BR2_PACKAGE_LIBURCU + help + netsniff-ng is a free, performant Linux network analyzer and + networking toolkit. If you will, the Swiss army knife for + network packets. + + http://netsniff-ng.org + +if BR2_PACKAGE_NETSNIFF_NG + +config BR2_PACKAGE_NETSNIFF_NG_MAUSEZAHN + bool "mausezahn" + default y + # Build with uClibc fails due to missing ceill() + depends on !BR2_TOOLCHAIN_USES_UCLIBC + select BR2_PACKAGE_LIBCLI + select BR2_PACKAGE_LIBNET + +comment "mausezahn needs glibc or musl toolchain" + depends on BR2_TOOLCHAIN_USES_UCLIBC + +endif + +comment "netsniff-ng needs a toolchain w/ threads, headers >= 3.0" + depends on BR2_PACKAGE_LIBURCU_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0 diff --git a/package/netsniff-ng/netsniff-ng.hash b/package/netsniff-ng/netsniff-ng.hash new file mode 100644 index 00000000..40b015cb --- /dev/null +++ b/package/netsniff-ng/netsniff-ng.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking signature +sha256 77d17d4158faf1d93c7d922a1bd7f093a8b437bd658292c830708540e10894ba netsniff-ng-0.6.8.tar.xz +# Locally computed +sha256 b353349ba51e0d4b59cf2f188f0c285296e154ce8c58954bc5e0dc0282a4db2d README +sha256 8f6d85366f3763557d6ddd0637988b9ba11edef354e3c9302fff4262a235c387 COPYING diff --git a/package/netsniff-ng/netsniff-ng.mk b/package/netsniff-ng/netsniff-ng.mk new file mode 100644 index 00000000..f45246da --- /dev/null +++ b/package/netsniff-ng/netsniff-ng.mk @@ -0,0 +1,61 @@ +################################################################################ +# +# netsniff-ng +# +################################################################################ + +NETSNIFF_NG_VERSION = 0.6.8 +NETSNIFF_NG_SITE = http://pub.netsniff-ng.org/netsniff-ng +NETSNIFF_NG_SOURCE = netsniff-ng-$(NETSNIFF_NG_VERSION).tar.xz +NETSNIFF_NG_LICENSE = GPL-2.0 +NETSNIFF_NG_LICENSE_FILES = README COPYING +# Prevent netsniff-ng configure script from finding a host installed nacl +NETSNIFF_NG_CONF_ENV = \ + NACL_INC_DIR=/dev/null \ + NACL_LIB_DIR=/dev/null +NETSNIFF_NG_DEPENDENCIES = libnl libpcap libnetfilter_conntrack liburcu + +ifeq ($(BR2_PACKAGE_NETSNIFF_NG_MAUSEZAHN),y) +NETSNIFF_NG_DEPENDENCIES += libcli libnet +NETSNIFF_NG_BUILD_MAKE_TARGET = all +NETSNIFF_NG_INSTALL_MAKE_TARGET = install +else +NETSNIFF_NG_BUILD_MAKE_TARGET = allbutmausezahn +NETSNIFF_NG_INSTALL_MAKE_TARGET = install_allbutmausezahn +endif + +ifeq ($(BR2_PACKAGE_GEOIP),y) +NETSNIFF_NG_DEPENDENCIES += geoip +endif + +ifeq ($(BR2_PACKAGE_NCURSES),y) +NETSNIFF_NG_DEPENDENCIES += ncurses +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +NETSNIFF_NG_DEPENDENCIES += zlib +endif + +# hand-written configure script and makefile +define NETSNIFF_NG_CONFIGURE_CMDS + (cd $(@D); \ + $(NETSNIFF_NG_CONF_ENV) \ + $(TARGET_CONFIGURE_ARGS) \ + $(TARGET_CONFIGURE_OPTS) \ + ./configure \ + --prefix=$(TARGET_DIR)/usr \ + ) +endef + +define NETSNIFF_NG_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) \ + $(NETSNIFF_NG_BUILD_MAKE_TARGET) +endef + +define NETSNIFF_NG_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) \ + PREFIX=$(TARGET_DIR)/usr ETCDIR=$(TARGET_DIR)/etc \ + -C $(@D) $(NETSNIFF_NG_INSTALL_MAKE_TARGET) +endef + +$(eval $(generic-package)) diff --git a/package/netsnmp/Config.in b/package/netsnmp/Config.in new file mode 100644 index 00000000..c3fa9552 --- /dev/null +++ b/package/netsnmp/Config.in @@ -0,0 +1,76 @@ +config BR2_PACKAGE_NETSNMP + bool "netsnmp" + depends on BR2_USE_MMU # fork() + help + Suite of applications used to implement SNMP v1, SNMP v2c, and + SNMP v3 using both IPv4 and IPv6. + + http://net-snmp.sourceforge.net/ + +if BR2_PACKAGE_NETSNMP + +config BR2_PACKAGE_NETSNMP_STATIC + bool "build static lib" + default n + help + build static lib + +if BR2_PACKAGE_NETSNMP_STATIC + +config BR2_PACKAGE_NETSNMP_ONLY_STATIC + bool "just build static lib only" + default n + help + build static lib not build dynamic lib + +endif + +config BR2_PACKAGE_NETSNMP_SERVER + bool "server" + default y + help + The snmpd server. + +config BR2_PACKAGE_NETSNMP_CLIENTS + bool "clients" + default y + help + The net-snmp clients (snmpget, snmpwalk, etc). + +config BR2_PACKAGE_NETSNMP_ENABLE_MIBS + bool "Install MIB files on target and enable MIB loading code" + default y + help + The net-snmp package contains a selection of MIB files. + Say yes if you want those MIB files installed on the target + and enable the code that parses the MIB files. + +config BR2_PACKAGE_NETSNMP_WITH_MIB_MODULES + string "Build with these MIB modules" + default "host ucd-snmp/dlmod agentx" if !BR2_STATIC_LIBS + default "host agentx" if BR2_STATIC_LIBS + help + Specify which MIB modules to include. + +config BR2_PACKAGE_NETSNMP_WITHOUT_MIB_MODULES + string "Build without these MIB modules" + default "disman/event disman/schedule utilities" + help + Specify which MIB modules to exclude. + +config BR2_PACKAGE_NETSNMP_ENABLE_DEBUGGING + bool "Enable debugging code" + help + By default net-snmp is compiled without debugging support + (--disable-debugging). Enable this options if you need + debugging support, including the ability to log with + DEBUGMSG(), DEBUGMSGTL() and companion macros. + +config BR2_PACKAGE_NETSNMP_OPENSSL_INTERNAL + bool "Enable minimal internal OpenSSL code" + depends on !BR2_PACKAGE_OPENSSL + help + Enable a minimal internal copy of OpenSSL usable for USM + security. It will not enable the usage of SNMP over (D)TLS. + +endif diff --git a/package/netsnmp/S59snmpd b/package/netsnmp/S59snmpd new file mode 100644 index 00000000..96ed8237 --- /dev/null +++ b/package/netsnmp/S59snmpd @@ -0,0 +1,104 @@ +#! /bin/sh +### BEGIN INIT INFO +# Provides: snmpd snmptrapd +# Required-Start: $network $local_fs +# Required-Stop: $network $local_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 6 +# Short-Description: SNMP agents +# Description: NET SNMP (Simple Network Management Protocol) Agents +### END INIT INFO +# +# Author: Jochen Friedrich +# + +export PATH=/sbin:/usr/sbin:/bin:/usr/bin + +# Defaults +export MIBDIRS=/usr/share/snmp/mibs +SNMPDRUN=yes +SNMPDOPTS='-Lsd -Lf /dev/null -p /var/run/snmpd.pid 127.0.0.1' +TRAPDRUN=no +TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid' + +# Reads config file (will override defaults above) +[ -r /etc/default/snmpd ] && . /etc/default/snmpd + +ssd_oknodo="-o" + +# Cd to / before starting any daemons. +cd / + +# Create compatibility link to old AgentX socket location +if [ "$SNMPDCOMPAT" = "yes" ]; then + ln -sf /var/agentx/master /var/run/agentx +fi + +start() { + if [ "$SNMPDRUN" = "yes" -a -f /etc/snmp/snmpd.conf ]; then + printf "Starting SNMP daemon: " + start-stop-daemon -q -S -x /usr/sbin/snmpd -- $SNMPDOPTS + [ $? = 0 ] && echo "OK" || echo "FAIL" + fi + + if [ "$TRAPDRUN" = "yes" -a -f /etc/snmp/snmptrapd.conf ]; then + printf "Starting SNMP trap daemon: " + start-stop-daemon -q -S -x /usr/sbin/snmptrapd -- $TRAPDOPTS + [ $? = 0 ] && echo "OK" || echo "FAIL" + fi +} + +stop() { + if [ "$SNMPDRUN" = "yes" -a -f /etc/snmp/snmpd.conf ]; then + printf "Stopping SNMP daemon: " + start-stop-daemon -q -K $ssd_oknodo -x /usr/sbin/snmpd + [ $? = 0 ] && echo "OK" || echo "FAIL" + fi + + if [ "$TRAPDRUN" = "yes" -a -f /etc/snmp/snmptrapd.conf ]; then + printf "Stopping SNMP trap daemon: " + start-stop-daemon -q -K $ssd_oknodo -x /usr/sbin/snmptrapd + [ $? = 0 ] && echo "OK" || echo "FAIL" + fi +} + +reload() { + if [ "$SNMPDRUN" = "yes" -a -f /etc/snmp/snmpd.conf ]; then + printf "Reloading SNMP daemon: " + start-stop-daemon -q -K -s 1 -p /var/run/snmpd.pid -x /usr/sbin/snmpd + [ $? = 0 ] && echo "OK" || echo "FAIL" + fi + + if [ "$TRAPDRUN" = "yes" -a -f /etc/snmp/snmptrapd.conf ]; then + printf "Reloading SNMP trap daemon: " + start-stop-daemon -q -K -s 1 -p /var/run/snmptrapd.pid -x /usr/sbin/snmptrapd + [ $? = 0 ] && echo "OK" || echo "FAIL" + fi +} + +case "$1" in + start) + start + ;; + + stop) + stop + ;; + + restart) + stop + # Allow the daemons time to exit completely. + sleep 2 + start + ;; + + reload|force-reload) + reload + ;; + + *) + echo "Usage: $0 {start|stop|restart|reload|force-reload}" + exit 1 +esac + +exit 0 diff --git a/package/netsnmp/netsnmp.hash b/package/netsnmp/netsnmp.hash new file mode 100644 index 00000000..e1e9d108 --- /dev/null +++ b/package/netsnmp/netsnmp.hash @@ -0,0 +1,7 @@ +# Locally calculated after checking pgp signature at +# https://sourceforge.net/projects/net-snmp/files/net-snmp/5.9.3/net-snmp-5.9.3.tar.gz.asc +# using key D0F8F495DA6160C44EFFBF10F07B9D2DACB19FD6 +sha256 2097f29b7e1bf3f1300b4bae52fa2308d0bb8d5d3998dbe02f9462a413a2ef0a net-snmp-5.9.3.tar.gz + +# Hash for license file +sha256 ed869ea395a1f125819a56676385ab0557a21507764bf56f2943302011381e59 COPYING diff --git a/package/netsnmp/netsnmp.mk b/package/netsnmp/netsnmp.mk new file mode 100644 index 00000000..15bc318e --- /dev/null +++ b/package/netsnmp/netsnmp.mk @@ -0,0 +1,109 @@ +################################################################################ +# +# netsnmp +# +################################################################################ + +NETSNMP_VERSION = 5.9.3 +NETSNMP_SITE = https://downloads.sourceforge.net/project/net-snmp/net-snmp/$(NETSNMP_VERSION) +NETSNMP_SOURCE = net-snmp-$(NETSNMP_VERSION).tar.gz +NETSNMP_LICENSE = Various BSD-like +NETSNMP_LICENSE_FILES = COPYING +NETSNMP_CPE_ID_VENDOR = net-snmp +NETSNMP_CPE_ID_PRODUCT = $(NETSNMP_CPE_ID_VENDOR) +NETSNMP_SELINUX_MODULES = snmp +NETSNMP_INSTALL_STAGING = YES +NETSNMP_CONF_ENV = \ + ac_cv_NETSNMP_CAN_USE_SYSCTL=no \ + ac_cv_path_PSPROG=/bin/ps +NETSNMP_CONF_OPTS = \ + --with-persistent-directory=/var/lib/snmp \ + --with-defaults \ + --enable-mini-agent \ + --without-rpm \ + --with-logfile=none \ + --without-kmem-usage \ + --enable-as-needed \ + --without-perl-modules \ + --disable-embedded-perl \ + --disable-perl-cc-checks \ + --disable-scripts \ + --with-default-snmp-version="1" \ + --enable-silent-libtool \ + --enable-mfd-rewrites \ + --with-sys-contact="root@localhost" \ + --with-sys-location="Unknown" \ + --with-mib-modules="$(call qstrip,$(BR2_PACKAGE_NETSNMP_WITH_MIB_MODULES))" \ + --with-out-mib-modules="$(call qstrip,$(BR2_PACKAGE_NETSNMP_WITHOUT_MIB_MODULES))" \ + --disable-manuals +NETSNMP_INSTALL_STAGING_OPTS = DESTDIR=$(STAGING_DIR) LIB_LDCONFIG_CMD=true install +NETSNMP_INSTALL_TARGET_OPTS = DESTDIR=$(TARGET_DIR) LIB_LDCONFIG_CMD=true install +NETSNMP_MAKE = $(MAKE1) +NETSNMP_CONFIG_SCRIPTS = net-snmp-config + +ifeq ($(BR2_ENDIAN),"BIG") +NETSNMP_CONF_OPTS += --with-endianness=big +else +NETSNMP_CONF_OPTS += --with-endianness=little +endif + +ifeq ($(BR2_PACKAGE_LIBNL),y) +NETSNMP_DEPENDENCIES += host-pkgconf libnl +NETSNMP_CONF_OPTS += --with-nl +else +NETSNMP_CONF_OPTS += --without-nl +endif + +# OpenSSL +ifeq ($(BR2_PACKAGE_OPENSSL),y) +NETSNMP_DEPENDENCIES += host-pkgconf openssl +NETSNMP_CONF_OPTS += \ + --with-openssl=$(STAGING_DIR)/usr/include/openssl \ + --with-security-modules="tsm,usm" \ + --with-transports="DTLSUDP,TLSTCP" +NETSNMP_CONF_ENV += LIBS=`$(PKG_CONFIG_HOST_BINARY) --libs openssl` +else ifeq ($(BR2_PACKAGE_NETSNMP_OPENSSL_INTERNAL),y) +NETSNMP_CONF_OPTS += --with-openssl=internal +else +NETSNMP_CONF_OPTS += --without-openssl +endif + +# There's no option to forcibly enable or disable it +ifeq ($(BR2_PACKAGE_PCIUTILS),y) +NETSNMP_DEPENDENCIES += pciutils +endif + +# For ucd-snmp/lmsensorsMib +ifeq ($(BR2_PACKAGE_LM_SENSORS),y) +NETSNMP_DEPENDENCIES += lm-sensors +endif + +ifneq ($(BR2_PACKAGE_NETSNMP_ENABLE_MIBS),y) +NETSNMP_CONF_OPTS += --disable-mib-loading +NETSNMP_CONF_OPTS += --disable-mibs +endif + +ifneq ($(BR2_PACKAGE_NETSNMP_ENABLE_DEBUGGING),y) +NETSNMP_CONF_OPTS += --disable-debugging +endif + +ifeq ($(BR2_PACKAGE_NETSNMP_SERVER),y) +NETSNMP_CONF_OPTS += --enable-agent +else +NETSNMP_CONF_OPTS += --disable-agent +endif + +ifeq ($(BR2_PACKAGE_NETSNMP_CLIENTS),y) +NETSNMP_CONF_OPTS += --enable-applications +else +NETSNMP_CONF_OPTS += --disable-applications +endif + +ifeq ($(BR2_PACKAGE_NETSNMP_SERVER),y) +define NETSNMP_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/netsnmp/S59snmpd \ + $(TARGET_DIR)/etc/init.d/S59snmpd +endef +endif + +$(eval $(autotools-package)) diff --git a/package/netstat-nat/Config.in b/package/netstat-nat/Config.in new file mode 100644 index 00000000..6afcf89e --- /dev/null +++ b/package/netstat-nat/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_NETSTAT_NAT + bool "netstat-nat" + help + Displays NAT connections + + http://tweegy.nl/projects/netstat-nat/ diff --git a/package/netstat-nat/netstat-nat.hash b/package/netstat-nat/netstat-nat.hash new file mode 100644 index 00000000..7530b8a0 --- /dev/null +++ b/package/netstat-nat/netstat-nat.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 e945faa283a49f33af15de915a949c9273a230fc17154925364c547adab676ca netstat-nat-1.4.10.tar.gz +sha256 91df39d1816bfb17a4dda2d3d2c83b1f6f2d38d53e53e41e8f97ad5ac46a0cad COPYING diff --git a/package/netstat-nat/netstat-nat.mk b/package/netstat-nat/netstat-nat.mk new file mode 100644 index 00000000..0d16579a --- /dev/null +++ b/package/netstat-nat/netstat-nat.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# netstat-nat +# +################################################################################ + +NETSTAT_NAT_VERSION = 1.4.10 +NETSTAT_NAT_SITE = http://tweegy.nl/download +NETSTAT_NAT_LICENSE = GPL-2.0+ +NETSTAT_NAT_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/netsurf-buildsystem/netsurf-buildsystem.hash b/package/netsurf-buildsystem/netsurf-buildsystem.hash new file mode 100644 index 00000000..dfdc9998 --- /dev/null +++ b/package/netsurf-buildsystem/netsurf-buildsystem.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 150a3a45c3f433a35451506b316a35c14630112fc557f9e1f02c9e08b50e0cce netsurf-buildsystem-7574b41345968b5f7e9ca5875faccb1478ce0555-br1.tar.gz +sha256 b2ddc1d607332423f6cf415b2ac619a1c03dd565facdc39a571282a520929a65 llvm/LICENSE.TXT diff --git a/package/netsurf-buildsystem/netsurf-buildsystem.mk b/package/netsurf-buildsystem/netsurf-buildsystem.mk new file mode 100644 index 00000000..d4efec0e --- /dev/null +++ b/package/netsurf-buildsystem/netsurf-buildsystem.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# netsurf-buildsystem +# +################################################################################ + +NETSURF_BUILDSYSTEM_VERSION = 7574b41345968b5f7e9ca5875faccb1478ce0555 +NETSURF_BUILDSYSTEM_SITE = http://git.netsurf-browser.org/buildsystem.git +NETSURF_BUILDSYSTEM_SITE_METHOD = git +NETSURF_BUILDSYSTEM_LICENSE = MIT, BSD-3-Clause (for llvm/* files) +NETSURF_BUILDSYSTEM_LICENSE_FILES = llvm/LICENSE.TXT + +NETSURF_BUILDSYSTEM_INSTALL_DIR = $(HOST_DIR)/share/netsurf-buildsystem + +define HOST_NETSURF_BUILDSYSTEM_INSTALL_CMDS + mkdir -p $(NETSURF_BUILDSYSTEM_INSTALL_DIR) + cp -dpfr $(@D)/* $(NETSURF_BUILDSYSTEM_INSTALL_DIR) +endef + +$(eval $(host-generic-package)) diff --git a/package/netsurf/0001-avoid-system-perl-dependencies.patch b/package/netsurf/0001-avoid-system-perl-dependencies.patch new file mode 100644 index 00000000..979ddafc --- /dev/null +++ b/package/netsurf/0001-avoid-system-perl-dependencies.patch @@ -0,0 +1,29 @@ +From b42e4b5bfca030965dcfca993a47a6ddaa941287 Mon Sep 17 00:00:00 2001 +From: Francois Perrad +Date: Sun, 25 Nov 2018 18:27:54 +0100 +Subject: [PATCH] avoid system perl dependencies + +this subroutine format is used for android target. +with eval the load of HTML::Entities is deferred. + +Signed-off-by: Francois Perrad +--- + netsurf/utils/split-messages.pl | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/netsurf/utils/split-messages.pl b/netsurf/utils/split-messages.pl +index 4b50dde..e47dded 100644 +--- a/netsurf/utils/split-messages.pl ++++ b/netsurf/utils/split-messages.pl +@@ -311,7 +311,7 @@ TXT + sub footer { qq|| } + sub format + { +- use HTML::Entities qw(encode_entities); ++ eval q|use HTML::Entities qw(encode_entities);|; + my $escaped = encode_entities( $_[1], '<>&"' ); + qq| $escaped\n|; + } +-- +2.17.1 + diff --git a/package/netsurf/0002-do-not-cross-compile-nsgenbind.patch b/package/netsurf/0002-do-not-cross-compile-nsgenbind.patch new file mode 100644 index 00000000..2d463751 --- /dev/null +++ b/package/netsurf/0002-do-not-cross-compile-nsgenbind.patch @@ -0,0 +1,30 @@ +From 2419ad79b25fcc1746178aba609fddbb0aa8c9e0 Mon Sep 17 00:00:00 2001 +From: Francois Perrad +Date: Sat, 1 Dec 2018 16:10:13 +0100 +Subject: [PATCH] build nsgenbind for the build machine + +The nsgenbind tool is meant to be executed on the build machine during +the build, so it should not be built with the cross-compiler, but with +the native compiler. + +Signed-off-by: Francois Perrad +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index f279f01..5698c87 100644 +--- a/Makefile ++++ b/Makefile +@@ -110,7 +110,7 @@ endef + + # prefixed install macro for each host sub target + define do_build_prefix_install +- $(MAKE) install --directory=$1 HOST=$(BUILD) PREFIX=$(TMP_PREFIX) Q=$(Q) DESTDIR= ++ $(MAKE) install --directory=$1 HOST=$(BUILD) CC=$(BUILD_CC) PREFIX=$(TMP_PREFIX) Q=$(Q) DESTDIR= + + endef + +-- +2.17.1 + diff --git a/package/netsurf/0003-fix-compilation-without-curl.patch b/package/netsurf/0003-fix-compilation-without-curl.patch new file mode 100644 index 00000000..2300ae5f --- /dev/null +++ b/package/netsurf/0003-fix-compilation-without-curl.patch @@ -0,0 +1,27 @@ +From 7d7c59dbfc92fcbcd0eac2c84e0fb98662c4bd71 Mon Sep 17 00:00:00 2001 +From: Francois Perrad +Date: Sat, 8 Dec 2018 09:43:40 +0100 +Subject: [PATCH] fix compilation without curl + +Signed-off-by: Francois Perrad +--- + netsurf/content/fetch.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/netsurf/content/fetch.c b/netsurf/content/fetch.c +index 7665029..0f41c49 100644 +--- a/netsurf/content/fetch.c ++++ b/netsurf/content/fetch.c +@@ -54,7 +54,9 @@ + #include "content/fetchers.h" + #include "content/fetchers/resource.h" + #include "content/fetchers/about.h" ++#ifdef WITH_CURL + #include "content/fetchers/curl.h" ++#endif + #include "content/fetchers/data.h" + #include "content/fetchers/file.h" + #include "javascript/fetcher.h" +-- +2.17.1 + diff --git a/package/netsurf/0004-framebuffer-Fix-internal-font-generated-source-for-GCC-10.patch b/package/netsurf/0004-framebuffer-Fix-internal-font-generated-source-for-GCC-10.patch new file mode 100644 index 00000000..da512645 --- /dev/null +++ b/package/netsurf/0004-framebuffer-Fix-internal-font-generated-source-for-GCC-10.patch @@ -0,0 +1,37 @@ +From 434f6c3fe7d1d2c6a3e6ae6338608a4a4421ab1b Mon Sep 17 00:00:00 2001 +From: Michael Drake +Date: Fri, 13 Nov 2020 11:12:58 +0000 +Subject: framebuffer: Fix internal font generated source for GCC 10. + +[Retrieved (and backported) from: +https://git.netsurf-browser.org/netsurf.git/commit/?id=434f6c3fe7d1d2c6a3e6ae6338608a4a4421ab1b] +Signed-off-by: Fabrice Fontaine +--- + tools/convert_font.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/netsurf/frontends/framebuffer/convert_font.c b/netsurf/frontends/framebuffer/convert_font.c +index 9f5734b71..d22c85920 100644 +--- a/netsurf/frontends/framebuffer/convert_font.c ++++ b/netsurf/frontends/framebuffer/convert_font.c +@@ -290,14 +290,14 @@ static bool generate_font_header(const char *path, struct font_data *data) + + + for (s = 0; s < 4; s++) { +- fprintf(fp, "const uint8_t *%s_section_table;\n", ++ fprintf(fp, "extern const uint8_t *%s_section_table;\n", + var_lables[s]); +- fprintf(fp, "const uint16_t *%s_sections;\n", ++ fprintf(fp, "extern const uint16_t *%s_sections;\n", + var_lables[s]); + + } + +- fprintf(fp, "const uint8_t *font_glyph_data;\n"); ++ fprintf(fp, "extern const uint8_t *font_glyph_data;\n"); + + fprintf(fp, "\n\n"); + +-- +cgit v1.2.1 + diff --git a/package/netsurf/Config.in b/package/netsurf/Config.in new file mode 100644 index 00000000..4f7d5c27 --- /dev/null +++ b/package/netsurf/Config.in @@ -0,0 +1,56 @@ +# netsurf mixes up host and target CFLAGS, so it isn't compatible with +# architectures where we pass ABI specific compiler flags (TARGET_ABI) +config BR2_PACKAGE_NETSURF_ARCH_SUPPORTS + bool + default y if !((BR2_arc && BR2_ARC_ATOMIC_EXT) || \ + BR2_powerpc_8540 || BR2_powerpc_8548 || BR2_powerpc_e500mc || \ + BR2_xtensa) + +comment "netsurf needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + depends on BR2_PACKAGE_NETSURF_ARCH_SUPPORTS + +config BR2_PACKAGE_NETSURF + bool "netsurf" + # static linking support is broken beyond repair + depends on !BR2_STATIC_LIBS + depends on BR2_PACKAGE_NETSURF_ARCH_SUPPORTS + select BR2_PACKAGE_EXPAT + select BR2_PACKAGE_JPEG + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + select BR2_PACKAGE_LIBPNG + select BR2_PACKAGE_OPENSSL if BR2_PACKAGE_LIBCURL + help + NetSurf is a compact graphical web browser which aims for + HTML5, CSS and JavaScript support. + Frontends: GTK (X11), SDL 1.2 (framebuffer) + + http://www.netsurf-browser.org/ + +if BR2_PACKAGE_NETSURF + +choice + prompt "Netsurf frontend" + default BR2_PACKAGE_NETSURF_SDL + +config BR2_PACKAGE_NETSURF_SDL + bool "sdl frontend" + select BR2_PACKAGE_SDL + help + Select SDL 1.2 frontend. + +config BR2_PACKAGE_NETSURF_GTK + bool "gtk2 frontend" + depends on BR2_PACKAGE_LIBGTK2 + help + Select GTK+ 2 frontend. + +config BR2_PACKAGE_NETSURF_GTK3 + bool "gtk3 frontend" + depends on BR2_PACKAGE_LIBGTK3 + help + Select GTK+ 3 frontend. + +endchoice + +endif diff --git a/package/netsurf/netsurf.hash b/package/netsurf/netsurf.hash new file mode 100644 index 00000000..77de5c6d --- /dev/null +++ b/package/netsurf/netsurf.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 495adf6b6614ce36fca6c605f7c321f9cb4a3df838043158122678ce2b3325b7 netsurf-all-3.10.tar.gz +sha256 55c4a7ae3953d720a462e69d1f128a20004933d12538be5314a33f8821675378 netsurf/COPYING diff --git a/package/netsurf/netsurf.mk b/package/netsurf/netsurf.mk new file mode 100644 index 00000000..1064698c --- /dev/null +++ b/package/netsurf/netsurf.mk @@ -0,0 +1,115 @@ +################################################################################ +# +# netsurf +# +################################################################################ + +NETSURF_VERSION = 3.10 +NETSURF_SOURCE = netsurf-all-$(NETSURF_VERSION).tar.gz +NETSURF_SITE = http://download.netsurf-browser.org/netsurf/releases/source-full +NETSURF_LICENSE = GPL-2.0 +NETSURF_LICENSE_FILES = netsurf/COPYING +NETSURF_CPE_ID_VENDOR = netsurf-browser +# host-vim needed for the xxd utility +NETSURF_DEPENDENCIES = expat jpeg libpng \ + host-bison host-flex host-gperf host-pkgconf host-vim + +ifeq ($(BR2_PACKAGE_NETSURF_GTK),y) +NETSURF_DEPENDENCIES += libgtk2 +NETSURF_FRONTEND = gtk2 +endif + +ifeq ($(BR2_PACKAGE_NETSURF_GTK3),y) +NETSURF_DEPENDENCIES += libgtk3 +NETSURF_FRONTEND = gtk3 +endif + +ifeq ($(BR2_PACKAGE_NETSURF_GTK)$(BR2_PACKAGE_NETSURF_GTK3),y) +ifeq ($(BR2_PACKAGE_LIBRSVG),y) +NETSURF_DEPENDENCIES += librsvg +define NETSURF_SVG_CONFIGURE_CMDS + echo "override NETSURF_USE_RSVG := YES" >> $(@D)/netsurf/Makefile.config + echo "override NETSURF_USE_NSSVG := NO" >> $(@D)/netsurf/Makefile.config +endef +endif +endif + +ifeq ($(BR2_PACKAGE_NETSURF_SDL),y) +NETSURF_DEPENDENCIES += sdl host-libpng +NETSURF_FRONTEND = framebuffer +NETSURF_CONFIG = \ + BUILD_CFLAGS='$(HOST_CFLAGS)' \ + BUILD_LDFLAGS='$(HOST_LDFLAGS) -lpng' +ifeq ($(BR2_PACKAGE_FREETYPE),y) +NETSURF_DEPENDENCIES += freetype +define NETSURF_FONTLIB_CONFIGURE_CMDS + echo "override NETSURF_FB_FONTLIB := freetype" >> $(@D)/netsurf/Makefile.config +endef +endif +endif + +ifeq ($(BR2_PACKAGE_LIBICONV),y) +NETSURF_DEPENDENCIES += libiconv +define NETSURF_ICONV_CONFIGURE_CMDS + echo "CFLAGS += -DWITH_ICONV_FILTER" >> $(@D)/libparserutils/Makefile.config.override + echo "override NETSURF_USE_LIBICONV_PLUG := NO" >> $(@D)/netsurf/Makefile.config +endef +endif + +ifeq ($(BR2_PACKAGE_LIBCURL),y) +NETSURF_DEPENDENCIES += libcurl openssl +else +define NETSURF_CURL_CONFIGURE_CMDS + echo "override NETSURF_USE_CURL := NO" >> $(@D)/netsurf/Makefile.config + echo "override NETSURF_USE_OPENSSL := NO" >> $(@D)/netsurf/Makefile.config +endef +endif + +ifeq ($(BR2_PACKAGE_WEBP),y) +NETSURF_DEPENDENCIES += webp +define NETSURF_WEBP_CONFIGURE_CMDS + echo "override NETSURF_USE_WEBP := YES" >> $(@D)/netsurf/Makefile.config +endef +else +define NETSURF_WEBP_CONFIGURE_CMDS + echo "override NETSURF_USE_WEBP := NO" >> $(@D)/netsurf/Makefile.config +endef +endif + +define NETSURF_CONFIGURE_CMDS + $(NETSURF_ICONV_CONFIGURE_CMDS) + $(NETSURF_SVG_CONFIGURE_CMDS) + $(NETSURF_FONTLIB_CONFIGURE_CMDS) + $(NETSURF_CURL_CONFIGURE_CMDS) + $(NETSURF_WEBP_CONFIGURE_CMDS) +endef + +NETSURF_MAKE_ENV = \ + $(TARGET_MAKE_ENV) \ + CFLAGS="$(TARGET_CFLAGS) -I$(@D)/tmpusr/include" \ + LDFLAGS="$(TARGET_LDFLAGS) -L$(@D)/tmpusr/lib" + +NETSURF_MAKE_OPTS = \ + TARGET=$(NETSURF_FRONTEND) \ + BISON="$(HOST_DIR)/bin/bison" \ + FLEX="$(HOST_DIR)/bin/flex" \ + PKG_CONFIG="$(PKG_CONFIG_HOST_BINARY)" \ + BUILD_CC="$(HOSTCC)" \ + CC="$(TARGET_CC)" \ + AR="$(TARGET_AR)" \ + TMP_PREFIX=$(@D)/tmpusr \ + NETSURF_CONFIG="$(NETSURF_CONFIG)" \ + PREFIX=/usr + +define NETSURF_BUILD_CMDS + mkdir -p $(@D)/tmpusr + $(NETSURF_MAKE_ENV) $(MAKE) -C $(@D) $(NETSURF_MAKE_OPTS) \ + build +endef + +define NETSURF_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(NETSURF_MAKE_OPTS) \ + DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/nettle/0001-disable-testsuite-examples.patch b/package/nettle/0001-disable-testsuite-examples.patch new file mode 100644 index 00000000..aa37bcf8 --- /dev/null +++ b/package/nettle/0001-disable-testsuite-examples.patch @@ -0,0 +1,20 @@ +Makefile: disable testsuite and example + +We do not need them in the context of Buildroot. + +Also, they break for a shared-only build (but it's fixed in patch 0001). + +Signed-off-by: "Yann E. MORIN" + +diff -durN nettle-2.7.1.orig/Makefile.in nettle-2.7.1/Makefile.in +--- nettle-2.7.1.orig/Makefile.in 2013-05-28 16:21:54.000000000 +0200 ++++ nettle-2.7.1/Makefile.in 2014-12-12 19:57:12.499805574 +0100 +@@ -19,7 +19,7 @@ + + FAT_TEST_LIST = @FAT_TEST_LIST@ + +-SUBDIRS = tools testsuite examples ++SUBDIRS = tools + + include config.make + diff --git a/package/nettle/Config.in b/package/nettle/Config.in new file mode 100644 index 00000000..cf4803c7 --- /dev/null +++ b/package/nettle/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_NETTLE + bool "nettle" + select BR2_PACKAGE_GMP + help + Nettle is a cryptographic library that is designed to fit + easily in more or less any context: In crypto toolkits for + object-oriented languages, in applications like LSH or + GNUPG, or even in kernel space + + https://www.lysator.liu.se/~nisse/nettle/ diff --git a/package/nettle/nettle.hash b/package/nettle/nettle.hash new file mode 100644 index 00000000..cd32ad44 --- /dev/null +++ b/package/nettle/nettle.hash @@ -0,0 +1,6 @@ +# Locally calculated after checking pgp signature +# https://ftp.gnu.org/gnu/nettle/nettle-3.7.3.tar.gz.sig +sha256 661f5eb03f048a3b924c3a8ad2515d4068e40f67e774e8a26827658007e3bcf0 nettle-3.7.3.tar.gz +# Locally calculated +sha256 a853c2ffec17057872340eee242ae4d96cbf2b520ae27d903e1b2fef1a5f9d1c COPYING.LESSERv3 +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYINGv2 diff --git a/package/nettle/nettle.mk b/package/nettle/nettle.mk new file mode 100644 index 00000000..3dbd0cb9 --- /dev/null +++ b/package/nettle/nettle.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# nettle +# +################################################################################ + +NETTLE_VERSION = 3.7.3 +NETTLE_SITE = http://www.lysator.liu.se/~nisse/archive +NETTLE_DEPENDENCIES = gmp +NETTLE_INSTALL_STAGING = YES +NETTLE_LICENSE = Dual GPL-2.0+/LGPL-3.0+ +NETTLE_LICENSE_FILES = COPYING.LESSERv3 COPYINGv2 +NETTLE_CPE_ID_VENDOR = nettle_project +# don't include openssl support for (unused) examples as it has problems +# with static linking +NETTLE_CONF_OPTS = --disable-openssl + +# ARM assembly requires v6+ ISA +ifeq ($(BR2_ARM_CPU_ARMV4)$(BR2_ARM_CPU_ARMV5)$(BR2_ARM_CPU_ARMV7M),y) +NETTLE_CONF_OPTS += --disable-assembler +endif + +ifeq ($(BR2_ARM_CPU_HAS_NEON),y) +NETTLE_CONF_OPTS += --enable-arm-neon +else +NETTLE_CONF_OPTS += --disable-arm-neon +endif + +$(eval $(autotools-package)) diff --git a/package/network-manager-openvpn/Config.in b/package/network-manager-openvpn/Config.in new file mode 100644 index 00000000..557145e9 --- /dev/null +++ b/package/network-manager-openvpn/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_NETWORK_MANAGER_OPENVPN + bool "network-manager-openvpn" + depends on BR2_PACKAGE_NETWORK_MANAGER + depends on BR2_PACKAGE_OPENVPN + help + OpenVPN support for NetworkManager + + https://gitlab.gnome.org/GNOME/NetworkManager-openvpn diff --git a/package/network-manager-openvpn/network-manager-openvpn.hash b/package/network-manager-openvpn/network-manager-openvpn.hash new file mode 100644 index 00000000..0c52fb8d --- /dev/null +++ b/package/network-manager-openvpn/network-manager-openvpn.hash @@ -0,0 +1,4 @@ +# From https://download.gnome.org/sources/NetworkManager-openvpn/1.8/NetworkManager-openvpn-1.8.10.sha256sum +sha256 af3cc86ba848d21b4ac807a09d575de11335ba4df8ce6fdb089212e77c2231ef NetworkManager-openvpn-1.8.10.tar.xz +# Locally computed +sha256 c39e345d992dfba62db265f8c6d6ff1d90c61d92876635ae05adbfa2f45fff46 COPYING diff --git a/package/network-manager-openvpn/network-manager-openvpn.mk b/package/network-manager-openvpn/network-manager-openvpn.mk new file mode 100644 index 00000000..1a872dc1 --- /dev/null +++ b/package/network-manager-openvpn/network-manager-openvpn.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# network-manager-openvpn +# +################################################################################ + +NETWORK_MANAGER_OPENVPN_VERSION_MAJOR = 1.8 +NETWORK_MANAGER_OPENVPN_VERSION = $(NETWORK_MANAGER_OPENVPN_VERSION_MAJOR).10 +NETWORK_MANAGER_OPENVPN_SOURCE = NetworkManager-openvpn-$(NETWORK_MANAGER_OPENVPN_VERSION).tar.xz +NETWORK_MANAGER_OPENVPN_SITE = https://download.gnome.org/sources/NetworkManager-openvpn/$(NETWORK_MANAGER_OPENVPN_VERSION_MAJOR) +NETWORK_MANAGER_OPENVPN_DEPENDENCIES = network-manager openvpn +NETWORK_MANAGER_OPENVPN_LICENSE = GPL-2.0+ +NETWORK_MANAGER_OPENVPN_LICENSE_FILES = COPYING + +NETWORK_MANAGER_OPENVPN_CONF_OPTS = \ + --without-gnome + +define NETWORK_MANAGER_OPENVPN_USERS + nm-openvpn -1 nm-openvpn -1 * - - - Openvpn user +endef + +$(eval $(autotools-package)) diff --git a/package/network-manager/Config.in b/package/network-manager/Config.in new file mode 100644 index 00000000..7d447684 --- /dev/null +++ b/package/network-manager/Config.in @@ -0,0 +1,69 @@ +config BR2_PACKAGE_NETWORK_MANAGER + bool "network-manager" + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgcrypt + depends on !BR2_STATIC_LIBS # gnutls + depends on BR2_USE_MMU # dbus + depends on BR2_PACKAGE_HAS_UDEV + # Tested with 3.2, but may even work with earlier versions + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2 + depends on BR2_TOOLCHAIN_USES_GLIBC # CLOCK_BOOTTIME, IPTOS_CLASS_* + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_WCHAR # libglib2 + select BR2_PACKAGE_DBUS + select BR2_PACKAGE_GNUTLS + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBGCRYPT + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + select BR2_PACKAGE_WIRELESS_TOOLS + select BR2_PACKAGE_WIRELESS_TOOLS_LIB + select BR2_PACKAGE_READLINE + select BR2_PACKAGE_LIBNDP + help + NetworkManager is a set of co-operative tools that make + networking simple and straightforward. Whether WiFi, wired, + 3G, or Bluetooth, NetworkManager allows you to quickly move + from one network to another: once a network has been + configured and joined once, it can be detected and re-joined + automatically the next time it's available. + + http://projects.gnome.org/NetworkManager/ + +if BR2_PACKAGE_NETWORK_MANAGER + +config BR2_PACKAGE_NETWORK_MANAGER_TUI + bool "nmtui support" + select BR2_PACKAGE_NEWT + help + This option enables terminal based UI + +config BR2_PACKAGE_NETWORK_MANAGER_MODEM_MANAGER + bool "modem-manager support" + select BR2_PACKAGE_MODEM_MANAGER + help + This option enables support for ModemManager + +config BR2_PACKAGE_NETWORK_MANAGER_PPPD + bool "pppd support" + depends on !BR2_TOOLCHAIN_USES_MUSL # pppd + select BR2_PACKAGE_PPPD + help + This option enables support for PPPD daemon + +comment "pppd support needs a glibc or uClibc toolchain" + depends on BR2_TOOLCHAIN_USES_MUSL + +config BR2_PACKAGE_NETWORK_MANAGER_OVS + bool "OpenVSwitch support" + select BR2_PACKAGE_JANSSON + help + This option enables support for OpenVSwitch + +endif + +comment "NetworkManager needs udev /dev management and a glibc toolchain w/ headers >= 3.2, dynamic library, wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_PACKAGE_HAS_UDEV || \ + !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2 || \ + !BR2_TOOLCHAIN_USES_GLIBC || BR2_STATIC_LIBS || \ + !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/network-manager/S45network-manager b/package/network-manager/S45network-manager new file mode 100644 index 00000000..bc775d3b --- /dev/null +++ b/package/network-manager/S45network-manager @@ -0,0 +1,41 @@ +#!/bin/sh + +# Allow a few customizations from a config file +test -r /etc/default/NetworkManager && . /etc/default/NetworkManager + +PID=`pidof NetworkManager` +case "$1" in + start) + printf "Starting NetworkManager ... " + [ ! -d /var/run/NetworkManager ] && install -d /var/run/NetworkManager + if [ -z "$PID" ]; then + /usr/sbin/NetworkManager $NETWORKMANAGER_ARGS + fi + if [ ! -z "$PID" -o $? -gt 0 ]; then + echo "failed!" + else + echo "done." + fi + ;; + stop) + printf "Stopping NetworkManager ... " + [ ! -z "$PID" ] && kill $PID > /dev/null 2>&1 + if [ $? -gt 0 ]; then + echo "failed!" + else + echo "done." + fi + ;; + restart) + $0 stop + sleep 1 + $0 start + ;; + *) + echo "usage: $0 {start|stop|restart|sleep|wake}" + ;; +esac +exit 0 + + + diff --git a/package/network-manager/network-manager.hash b/package/network-manager/network-manager.hash new file mode 100644 index 00000000..aef06dde --- /dev/null +++ b/package/network-manager/network-manager.hash @@ -0,0 +1,6 @@ +# From https://download.gnome.org/sources/NetworkManager/1.22/NetworkManager-1.22.16.sha256sum +sha256 377aa053752eaa304b72c9906f9efcd9fbd5f7f6cb4cd4ad72425a68982cffc6 NetworkManager-1.22.16.tar.xz +# Locally computed +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LGPL +sha256 f0543c137bc0eece552d42642d1bab31707ca3b3663d9c7a81ac3b270a4780e7 CONTRIBUTING diff --git a/package/network-manager/network-manager.mk b/package/network-manager/network-manager.mk new file mode 100644 index 00000000..af4c3460 --- /dev/null +++ b/package/network-manager/network-manager.mk @@ -0,0 +1,96 @@ +################################################################################ +# +# network-manager +# +################################################################################ + +NETWORK_MANAGER_VERSION_MAJOR = 1.22 +NETWORK_MANAGER_VERSION = $(NETWORK_MANAGER_VERSION_MAJOR).16 +NETWORK_MANAGER_SOURCE = NetworkManager-$(NETWORK_MANAGER_VERSION).tar.xz +NETWORK_MANAGER_SITE = https://download.gnome.org/sources/NetworkManager/$(NETWORK_MANAGER_VERSION_MAJOR) +NETWORK_MANAGER_INSTALL_STAGING = YES +NETWORK_MANAGER_DEPENDENCIES = host-pkgconf udev gnutls libglib2 \ + libgcrypt wireless_tools util-linux host-intltool readline libndp +NETWORK_MANAGER_LICENSE = GPL-2.0+ (app), LGPL-2.1+ (libnm) +NETWORK_MANAGER_LICENSE_FILES = COPYING COPYING.LGPL CONTRIBUTING +NETWORK_MANAGER_CPE_ID_VENDOR = gnome +NETWORK_MANAGER_CPE_ID_PRODUCT = networkmanager +NETWORK_MANAGER_SELINUX_MODULES = networkmanager + +NETWORK_MANAGER_CONF_ENV = \ + ac_cv_path_LIBGCRYPT_CONFIG=$(STAGING_DIR)/usr/bin/libgcrypt-config \ + ac_cv_file__etc_fedora_release=no \ + ac_cv_file__etc_mandriva_release=no \ + ac_cv_file__etc_debian_version=no \ + ac_cv_file__etc_redhat_release=no \ + ac_cv_file__etc_SuSE_release=no + +NETWORK_MANAGER_CONF_OPTS = \ + --disable-introspection \ + --disable-tests \ + --disable-qt \ + --disable-more-warnings \ + --with-crypto=gnutls \ + --with-iptables=/usr/sbin/iptables \ + --disable-ifupdown \ + --without-nm-cloud-setup + +ifeq ($(BR2_PACKAGE_OFONO),y) +NETWORK_MANAGER_DEPENDENCIES += ofono +NETWORK_MANAGER_CONF_OPTS += --with-ofono +else +NETWORK_MANAGER_CONF_OPTS += --without-ofono +endif + +ifeq ($(BR2_PACKAGE_LIBCURL),y) +NETWORK_MANAGER_DEPENDENCIES += libcurl +NETWORK_MANAGER_CONF_OPTS += --enable-concheck +else +NETWORK_MANAGER_CONF_OPTS += --disable-concheck +endif + +ifeq ($(BR2_PACKAGE_NETWORK_MANAGER_TUI),y) +NETWORK_MANAGER_DEPENDENCIES += newt +NETWORK_MANAGER_CONF_OPTS += --with-nmtui=yes +else +NETWORK_MANAGER_CONF_OPTS += --with-nmtui=no +endif + +ifeq ($(BR2_PACKAGE_NETWORK_MANAGER_PPPD),y) +NETWORK_MANAGER_DEPENDENCIES += pppd +NETWORK_MANAGER_CONF_OPTS += --enable-ppp +else +NETWORK_MANAGER_CONF_OPTS += --disable-ppp +endif + +ifeq ($(BR2_PACKAGE_NETWORK_MANAGER_MODEM_MANAGER),y) +NETWORK_MANAGER_DEPENDENCIES += modem-manager +NETWORK_MANAGER_CONF_OPTS += --with-modem-manager-1 +else +NETWORK_MANAGER_CONF_OPTS += --without-modem-manager-1 +endif + +ifeq ($(BR2_PACKAGE_DHCP_CLIENT),y) +NETWORK_MANAGER_CONF_OPTS += --with-dhclient=/sbin/dhclient +endif + +ifeq ($(BR2_PACKAGE_DHCPCD),y) +NETWORK_MANAGER_CONF_OPTS += --with-dhcpcd=/sbin/dhcpcd +endif + +ifeq ($(BR2_PACKAGE_NETWORK_MANAGER_OVS),y) +NETWORK_MANAGER_CONF_OPTS += --enable-ovs +NETWORK_MANAGER_DEPENDENCIES += jansson +else +NETWORK_MANAGER_CONF_OPTS += --disable-ovs +endif + +define NETWORK_MANAGER_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/network-manager/S45network-manager $(TARGET_DIR)/etc/init.d/S45network-manager +endef + +define NETWORK_MANAGER_INSTALL_INIT_SYSTEMD + cd $(TARGET_DIR)/usr/lib/systemd/system/ && ln -sf NetworkManager.service dbus-org.freedesktop.NetworkManager.service +endef + +$(eval $(autotools-package)) diff --git a/package/newt/Config.in b/package/newt/Config.in new file mode 100644 index 00000000..42a9eca7 --- /dev/null +++ b/package/newt/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_NEWT + bool "newt" + depends on BR2_USE_WCHAR + depends on BR2_USE_MMU # slang + depends on !BR2_STATIC_LIBS # unconditionally creates .so + select BR2_PACKAGE_SLANG + select BR2_PACKAGE_POPT + help + Programming library for color text mode, widget based user + interfaces. + + http://www.redhat.com/ + +comment "newt needs a toolchain w/ wchar, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || BR2_STATIC_LIBS diff --git a/package/newt/newt.hash b/package/newt/newt.hash new file mode 100644 index 00000000..b136d82a --- /dev/null +++ b/package/newt/newt.hash @@ -0,0 +1,5 @@ +# From https://releases.pagure.org/newt/CHECKSUMS +sha256 265eb46b55d7eaeb887fca7a1d51fe115658882dfe148164b6c49fccac5abb31 newt-0.52.21.tar.gz +sha512 d53d927996d17223e688bf54dccfabb2a3dc02bfe38ffc455964e86feaca3cd9f9ab5b19774433be430fa4d761cd9b6680b558f297acb86f80daeb6942f7d23c newt-0.52.21.tar.gz +# Locally calculated +sha256 b7993225104d90ddd8024fd838faf300bea5e83d91203eab98e29512acebd69c COPYING diff --git a/package/newt/newt.mk b/package/newt/newt.mk new file mode 100644 index 00000000..b39acb0f --- /dev/null +++ b/package/newt/newt.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# newt +# +################################################################################ + +NEWT_VERSION = 0.52.21 +NEWT_SITE = https://pagure.io/releases/newt +NEWT_INSTALL_STAGING = YES +NEWT_DEPENDENCIES = popt slang $(TARGET_NLS_DEPENDENCIES) +# Force to use libintl, otherwise it finds gettext functions in the C +# library, and does not link against libintl. +NEWT_CONF_ENV = LIBS=$(TARGET_NLS_LIBS) +NEWT_CONF_OPTS = --without-python --without-tcl +NEWT_LICENSE = GPL-2.0 +NEWT_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/nfacct/Config.in b/package/nfacct/Config.in new file mode 100644 index 00000000..e30d2d99 --- /dev/null +++ b/package/nfacct/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_NFACCT + bool "nfacct" + select BR2_PACKAGE_LIBNETFILTER_ACCT + help + nfacct is the command line tool to create/retrieve/delete + netfilter accounting objects. + + http://www.netfilter.org/projects/nfacct/ diff --git a/package/nfacct/nfacct.hash b/package/nfacct/nfacct.hash new file mode 100644 index 00000000..d6c05e16 --- /dev/null +++ b/package/nfacct/nfacct.hash @@ -0,0 +1,5 @@ +# From ftp://ftp.netfilter.org/pub/nfacct/nfacct-1.0.2.tar.bz2.{md5sum,sha1sum} +md5 94faafdaaed85ca9220c5692be8a408e nfacct-1.0.2.tar.bz2 +sha1 17d6576778227ea93c62600d9b18ff4932963c6a nfacct-1.0.2.tar.bz2 +# Locally computed +sha256 91df39d1816bfb17a4dda2d3d2c83b1f6f2d38d53e53e41e8f97ad5ac46a0cad COPYING diff --git a/package/nfacct/nfacct.mk b/package/nfacct/nfacct.mk new file mode 100644 index 00000000..d4c7c4ce --- /dev/null +++ b/package/nfacct/nfacct.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# nfacct +# +################################################################################ + +NFACCT_VERSION = 1.0.2 +NFACCT_SOURCE = nfacct-$(NFACCT_VERSION).tar.bz2 +NFACCT_SITE = http://www.netfilter.org/projects/nfacct/files +NFACCT_DEPENDENCIES = host-pkgconf \ + libnetfilter_acct +NFACCT_LICENSE = GPL-2.0 +NFACCT_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/nfs-utils/Config.in b/package/nfs-utils/Config.in new file mode 100644 index 00000000..da563db0 --- /dev/null +++ b/package/nfs-utils/Config.in @@ -0,0 +1,39 @@ +comment "nfs-utils needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_NFS_UTILS + bool "nfs-utils" + depends on BR2_TOOLCHAIN_HAS_THREADS # libtirpc, rpcbind + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBTIRPC # IPv6 requires libtirpc + help + The NFS Linux kernel server. + + http://linux-nfs.org/ + +if BR2_PACKAGE_NFS_UTILS + +config BR2_PACKAGE_NFS_UTILS_RPCDEBUG + bool "rpcdebug" + help + The RPC debugging utility + +config BR2_PACKAGE_NFS_UTILS_RPC_LOCKD + bool "rpc.lockd" + help + NFS lock manager for Linux kernels older than 2.4 + +config BR2_PACKAGE_NFS_UTILS_RPC_NFSD + bool "rpc.nfsd" + default y + select BR2_PACKAGE_RPCBIND # runtime + help + NFS server + +config BR2_PACKAGE_NFS_UTILS_RPC_RQUOTAD + bool "rpc.rquotad" + help + NFS remote quota server + +endif diff --git a/package/nfs-utils/S60nfs b/package/nfs-utils/S60nfs new file mode 100644 index 00000000..4183ff62 --- /dev/null +++ b/package/nfs-utils/S60nfs @@ -0,0 +1,83 @@ +#!/bin/sh +# +# nfs This shell script takes care of starting and stopping +# the NFS services. Stolen from RedHat FC5. + +mkdir -p /var/lock/subsys +mkdir -p /run/nfs/sm +mkdir -p /run/nfs/sm.bak +touch /run/nfs/rmtab + +CFG_FILE=/etc/default/nfsd + +NR_THREADS=2 +if [ -f "${CFG_FILE}" ]; then + . "${CFG_FILE}" +fi + + +start() { + # Start daemons. + printf "Starting NFS statd: " + rpc.statd + [ $? = 0 ] && echo "OK" || echo "FAIL" + touch /var/lock/subsys/nfslock + + printf "Starting NFS services: " + /usr/sbin/exportfs -r + [ $? = 0 ] && echo "OK" || echo "FAIL" + + printf "Starting NFS daemon: " + rpc.nfsd ${NR_THREADS} + [ $? = 0 ] && echo "OK" || echo "FAIL" + + printf "Starting NFS mountd: " + rpc.mountd + [ $? = 0 ] && echo "OK" || echo "FAIL" + touch /var/lock/subsys/nfs +} + +stop() { + # Stop daemons. + printf "Shutting down NFS mountd: " + killall -q rpc.mountd 2>/dev/null + [ $? = 0 ] && echo "OK" || echo "FAIL" + + printf "Shutting down NFS daemon: " + killall -q nfsd 2>/dev/null + [ $? = 0 ] && echo "OK" || echo "FAIL" + + printf "Shutting down NFS services: " + /usr/sbin/exportfs -au + [ $? = 0 ] && echo "OK" || echo "FAIL" + + printf "Stopping NFS statd: " + killall -q rpc.statd 2>/dev/null + [ $? = 0 ] && echo "OK" || echo "FAIL" + rm -f /var/lock/subsys/nfs + rm -f /var/run/rpc.statd.pid + rm -f /var/lock/subsys/nfslock +} + +# See how we were called. +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + stop + start + ;; + reload) + /usr/sbin/exportfs -r + touch /var/lock/subsys/nfs + ;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac + +exit 0 diff --git a/package/nfs-utils/nfs-utils.hash b/package/nfs-utils/nfs-utils.hash new file mode 100644 index 00000000..6268552c --- /dev/null +++ b/package/nfs-utils/nfs-utils.hash @@ -0,0 +1,4 @@ +# From https://www.kernel.org/pub/linux/utils/nfs-utils/2.5.2/sha256sums.asc +sha256 d493b81c9d3ffce5d10af701a63ed2b8a21768c23da4a2eceb4d708aea65d9de nfs-utils-2.5.2.tar.xz +# Locally computed +sha256 576540abf5e95029ad4ad90e32071385a5e95b2c30708c706116f3eb87b9a3de COPYING diff --git a/package/nfs-utils/nfs-utils.mk b/package/nfs-utils/nfs-utils.mk new file mode 100644 index 00000000..df581b38 --- /dev/null +++ b/package/nfs-utils/nfs-utils.mk @@ -0,0 +1,103 @@ +################################################################################ +# +# nfs-utils +# +################################################################################ + +NFS_UTILS_VERSION = 2.5.2 +NFS_UTILS_SOURCE = nfs-utils-$(NFS_UTILS_VERSION).tar.xz +NFS_UTILS_SITE = https://www.kernel.org/pub/linux/utils/nfs-utils/$(NFS_UTILS_VERSION) +NFS_UTILS_LICENSE = GPL-2.0+ +NFS_UTILS_LICENSE_FILES = COPYING +NFS_UTILS_DEPENDENCIES = host-nfs-utils host-pkgconf libtirpc +NFS_UTILS_CPE_ID_VENDOR = linux-nfs +NFS_UTILS_AUTORECONF = YES + +NFS_UTILS_CONF_ENV = knfsd_cv_bsd_signals=no + +NFS_UTILS_CONF_OPTS = \ + --disable-nfsv4 \ + --disable-nfsv41 \ + --disable-gss \ + --disable-uuid \ + --enable-tirpc \ + --enable-ipv6 \ + --without-tcp-wrappers \ + --with-statedir=/run/nfs \ + --with-rpcgen=$(HOST_DIR)/bin/rpcgen + +HOST_NFS_UTILS_CONF_OPTS = \ + --disable-nfsv4 \ + --disable-nfsv41 \ + --disable-gss \ + --disable-uuid \ + --disable-ipv6 \ + --without-tcp-wrappers \ + --with-statedir=/run/nfs \ + --disable-caps \ + --disable-tirpc \ + --without-systemd \ + --with-rpcgen=internal +HOST_NFS_UTILS_DEPENDENCIES = host-pkgconf host-libtirpc + +NFS_UTILS_TARGETS_$(BR2_PACKAGE_NFS_UTILS_RPCDEBUG) += usr/sbin/rpcdebug +NFS_UTILS_TARGETS_$(BR2_PACKAGE_NFS_UTILS_RPC_LOCKD) += usr/sbin/rpc.lockd +NFS_UTILS_TARGETS_$(BR2_PACKAGE_NFS_UTILS_RPC_RQUOTAD) += usr/sbin/rpc.rquotad +NFS_UTILS_TARGETS_$(BR2_PACKAGE_NFS_UTILS_RPC_NFSD) += usr/sbin/exportfs \ + usr/sbin/rpc.mountd usr/sbin/rpc.nfsd usr/lib/systemd/system/nfs-server.service + +ifeq ($(BR2_PACKAGE_LIBCAP),y) +NFS_UTILS_CONF_OPTS += --enable-caps +NFS_UTILS_DEPENDENCIES += libcap +else +NFS_UTILS_CONF_OPTS += --disable-caps +endif + +define NFS_UTILS_INSTALL_FIXUP + cd $(TARGET_DIR) && rm -f $(NFS_UTILS_TARGETS_) + touch $(TARGET_DIR)/etc/exports + $(INSTALL) -D -m 644 \ + $(@D)/utils/mount/nfsmount.conf $(TARGET_DIR)/etc/nfsmount.conf +endef +NFS_UTILS_POST_INSTALL_TARGET_HOOKS += NFS_UTILS_INSTALL_FIXUP + +ifeq ($(BR2_INIT_SYSTEMD),y) +NFS_UTILS_CONF_OPTS += --with-systemd=/usr/lib/systemd/system +NFS_UTILS_DEPENDENCIES += systemd +else +NFS_UTILS_CONF_OPTS += --without-systemd +endif + +ifeq ($(BR2_PACKAGE_NFS_UTILS_RPC_NFSD),y) +define NFS_UTILS_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/nfs-utils/S60nfs \ + $(TARGET_DIR)/etc/init.d/S60nfs +endef + +endif + +define NFS_UTILS_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0755 package/nfs-utils/nfs-utils_env.sh \ + $(TARGET_DIR)/usr/libexec/nfs-utils/nfs-utils_env.sh + + $(INSTALL) -D -m 0644 package/nfs-utils/nfs-utils_tmpfiles.conf \ + $(TARGET_DIR)/usr/lib/tmpfiles.d/nfs-utils.conf +endef + +define NFS_UTILS_REMOVE_NFSIOSTAT + rm -f $(TARGET_DIR)/usr/sbin/nfsiostat +endef + +# nfsiostat is interpreted python, so remove it unless it's in the target +NFS_UTILS_POST_INSTALL_TARGET_HOOKS += $(if $(BR2_PACKAGE_PYTHON),,NFS_UTILS_REMOVE_NFSIOSTAT) + +define HOST_NFS_UTILS_BUILD_CMDS + $(MAKE) -C $(@D)/tools/rpcgen +endef + +define HOST_NFS_UTILS_INSTALL_CMDS + $(INSTALL) -D -m 0755 $(@D)/tools/rpcgen/rpcgen $(HOST_DIR)/bin/rpcgen +endef + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/nfs-utils/nfs-utils_env.sh b/package/nfs-utils/nfs-utils_env.sh new file mode 100755 index 00000000..82284cef --- /dev/null +++ b/package/nfs-utils/nfs-utils_env.sh @@ -0,0 +1,3 @@ +#!/bin/sh +# This script is empty, it simply needs to exist to make the +# nfs-config.service happy. diff --git a/package/nfs-utils/nfs-utils_tmpfiles.conf b/package/nfs-utils/nfs-utils_tmpfiles.conf new file mode 100644 index 00000000..f87939fe --- /dev/null +++ b/package/nfs-utils/nfs-utils_tmpfiles.conf @@ -0,0 +1,4 @@ +d /run/nfs/sm 0700 root root - +d /run/nfs/sm.bak 0700 root root - +f /run/nfs/rmtab 0644 root root - +f /run/nfs/etab 0644 root root - diff --git a/package/nftables/Config.in b/package/nftables/Config.in new file mode 100644 index 00000000..8d172b72 --- /dev/null +++ b/package/nftables/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_NFTABLES + bool "nftables" + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12 + select BR2_PACKAGE_LIBMNL + select BR2_PACKAGE_LIBNFTNL + help + nftables is the project that aims to replace the existing + {ip,ip6,arp,eb}tables framework. + Basically, this project provides a new packet filtering + framework, a new userspace utility and also a compatibility + layer for {ip,ip6}tables. + + http://www.netfilter.org/projects/nftables/index.html + +comment "nftables needs a toolchain w/ wchar, headers >= 3.12" + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12 diff --git a/package/nftables/nftables.hash b/package/nftables/nftables.hash new file mode 100644 index 00000000..1112b7a8 --- /dev/null +++ b/package/nftables/nftables.hash @@ -0,0 +1,3 @@ +# From https://netfilter.org/projects/nftables/downloads.html +sha256 68d6fdfe8ab02303e6b1f13968a4022da5b0120110eaee3233d806857937b66e nftables-0.9.6.tar.bz2 +sha256 c17bc4fa5b2434c6f283ffcb2312e5bf3c7cdf5787b79505f094d8de734ac53e COPYING diff --git a/package/nftables/nftables.mk b/package/nftables/nftables.mk new file mode 100644 index 00000000..f9468c52 --- /dev/null +++ b/package/nftables/nftables.mk @@ -0,0 +1,56 @@ +################################################################################ +# +# nftables +# +################################################################################ + +NFTABLES_VERSION = 0.9.6 +NFTABLES_SOURCE = nftables-$(NFTABLES_VERSION).tar.bz2 +NFTABLES_SITE = https://www.netfilter.org/projects/nftables/files +NFTABLES_DEPENDENCIES = libmnl libnftnl host-pkgconf $(TARGET_NLS_DEPENDENCIES) +NFTABLES_LICENSE = GPL-2.0 +NFTABLES_LICENSE_FILES = COPYING +NFTABLES_CONF_OPTS = --disable-man-doc --disable-pdf-doc +NFTABLES_SELINUX_MODULES = iptables + +ifeq ($(BR2_PACKAGE_GMP),y) +NFTABLES_DEPENDENCIES += gmp +NFTABLES_CONF_OPTS += --without-mini-gmp +else +NFTABLES_CONF_OPTS += --with-mini-gmp +endif + +ifeq ($(BR2_PACKAGE_READLINE),y) +NFTABLES_DEPENDENCIES += readline +NFTABLES_LIBS += -lncurses +else +NFTABLES_CONF_OPTS += --without-cli +endif + +ifeq ($(BR2_PACKAGE_JANSSON),y) +NFTABLES_DEPENDENCIES += jansson +NFTABLES_CONF_OPTS += --with-json +else +NFTABLES_CONF_OPTS += --without-json +endif + +ifeq ($(BR2_PACKAGE_PYTHON)$(BR2_PACKAGE_PYTHON3),y) +NFTABLES_CONF_OPTS += --enable-python +NFTABLES_DEPENDENCIES += $(if $(BR2_PACKAGE_PYTHON),python,python3) +else +NFTABLES_CONF_OPTS += --disable-python +endif + +ifeq ($(BR2_STATIC_LIBS)$(BR2_PACKAGE_LIBNFTNL_JSON),yy) +NFTABLES_LIBS += -ljansson -lm +endif + +NFTABLES_CONF_ENV = LIBS="$(NFTABLES_LIBS)" + +define NFTABLES_LINUX_CONFIG_FIXUPS + $(call KCONFIG_ENABLE_OPT,CONFIG_NETFILTER) + $(call KCONFIG_ENABLE_OPT,CONFIG_NF_TABLES) + $(call KCONFIG_ENABLE_OPT,CONFIG_NF_TABLES_INET) +endef + +$(eval $(autotools-package)) diff --git a/package/nghttp2/Config.in b/package/nghttp2/Config.in new file mode 100644 index 00000000..03fe71d0 --- /dev/null +++ b/package/nghttp2/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_NGHTTP2 + bool "nghttp2" + help + nghttp2 is an implementation of HTTP/2 and its header + compression algorithm HPACK in C. + + https://nghttp2.org/ diff --git a/package/nghttp2/nghttp2.hash b/package/nghttp2/nghttp2.hash new file mode 100644 index 00000000..3702a91b --- /dev/null +++ b/package/nghttp2/nghttp2.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 eacc6f0f8543583ecd659faf0a3f906ed03826f1d4157b536b4b385fe47c5bb8 nghttp2-1.41.0.tar.gz +sha256 6b94f3abc1aabd0c72a7c7d92a77f79dda7c8a0cb3df839a97890b4116a2de2a COPYING diff --git a/package/nghttp2/nghttp2.mk b/package/nghttp2/nghttp2.mk new file mode 100644 index 00000000..9190fa30 --- /dev/null +++ b/package/nghttp2/nghttp2.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# nghttp2 +# +################################################################################ + +NGHTTP2_VERSION = 1.41.0 +NGHTTP2_SITE = https://github.com/nghttp2/nghttp2/releases/download/v$(NGHTTP2_VERSION) +NGHTTP2_LICENSE = MIT +NGHTTP2_LICENSE_FILES = COPYING +NGHTTP2_INSTALL_STAGING = YES +NGHTTP2_CPE_ID_VENDOR = nghttp2 +NGHTTP2_DEPENDENCIES = host-pkgconf +NGHTTP2_CONF_OPTS = --enable-lib-only + +define NGHTTP2_INSTALL_CLEAN_HOOK + # Remove fetch-ocsp-response script unused by library + $(Q)$(RM) -rf $(TARGET_DIR)/usr/share/nghttp2 +endef + +NGHTTP2_POST_INSTALL_TARGET_HOOKS += NGHTTP2_INSTALL_CLEAN_HOOK + +$(eval $(autotools-package)) diff --git a/package/nginx-dav-ext/Config.in b/package/nginx-dav-ext/Config.in new file mode 100644 index 00000000..1e60321f --- /dev/null +++ b/package/nginx-dav-ext/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_NGINX_DAV_EXT + bool "nginx-dav-ext" + depends on BR2_PACKAGE_NGINX_HTTP_DAV_MODULE + select BR2_PACKAGE_EXPAT + help + NGINX WebDAV missing commands support (PROPFIND & OPTIONS). + + https://github.com/arut/nginx-dav-ext-module diff --git a/package/nginx-dav-ext/nginx-dav-ext.hash b/package/nginx-dav-ext/nginx-dav-ext.hash new file mode 100644 index 00000000..fbed87f0 --- /dev/null +++ b/package/nginx-dav-ext/nginx-dav-ext.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 6b004eed8ea16ad8de4d304027bf0413cc323a95914e58625a7dc066481aae3a nginx-dav-ext-0.1.0.tar.gz +sha256 40581cf424621965adaf1461e97129520ff4fcfb62ed9965ec6fd50b7f4ddfca LICENSE diff --git a/package/nginx-dav-ext/nginx-dav-ext.mk b/package/nginx-dav-ext/nginx-dav-ext.mk new file mode 100644 index 00000000..695287ee --- /dev/null +++ b/package/nginx-dav-ext/nginx-dav-ext.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# nginx-dav-ext +# +################################################################################ + +NGINX_DAV_EXT_VERSION = 0.1.0 +NGINX_DAV_EXT_SITE = $(call github,arut,nginx-dav-ext-module,v$(NGINX_DAV_EXT_VERSION)) +NGINX_DAV_EXT_LICENSE = BSD-2-Clause +NGINX_DAV_EXT_LICENSE_FILES = LICENSE +NGINX_DAV_EXT_DEPENDENCIES = expat + +$(eval $(generic-package)) diff --git a/package/nginx-modsecurity/Config.in b/package/nginx-modsecurity/Config.in new file mode 100644 index 00000000..b1fcbadd --- /dev/null +++ b/package/nginx-modsecurity/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_NGINX_MODSECURITY + bool "nginx-modsecurity" + depends on BR2_PACKAGE_NGINX_HTTP + depends on BR2_INSTALL_LIBSTDCPP # libmodsecurity + depends on BR2_TOOLCHAIN_HAS_THREADS # libmodsecurity + select BR2_PACKAGE_LIBMODSECURITY + help + The ModSecurity-nginx connector is the connection + point between nginx and libmodsecurity + (ModSecurity v3). + + https://github.com/SpiderLabs/ModSecurity-nginx + +comment "nginx-modsecurity needs a toolchain w/ C++, threads" + depends on BR2_PACKAGE_NGINX_HTTP + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/nginx-modsecurity/nginx-modsecurity.hash b/package/nginx-modsecurity/nginx-modsecurity.hash new file mode 100644 index 00000000..d2dd266a --- /dev/null +++ b/package/nginx-modsecurity/nginx-modsecurity.hash @@ -0,0 +1,4 @@ +# From https://github.com/SpiderLabs/ModSecurity-nginx/releases/download/v1.0.1/modsecurity-nginx-v1.0.1.tar.gz.sha256 +sha256 def45a8db5bc9da14765eda75363457209a86c89538ccf5bfbd3aa02fa10833c modsecurity-nginx-v1.0.1.tar.gz +# Localy calculated +sha256 c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 LICENSE diff --git a/package/nginx-modsecurity/nginx-modsecurity.mk b/package/nginx-modsecurity/nginx-modsecurity.mk new file mode 100644 index 00000000..6d33403d --- /dev/null +++ b/package/nginx-modsecurity/nginx-modsecurity.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# nginx-modsecurity +# +################################################################################ + +NGINX_MODSECURITY_VERSION = 1.0.1 +NGINX_MODSECURITY_SOURCE = modsecurity-nginx-v$(NGINX_MODSECURITY_VERSION).tar.gz +NGINX_MODSECURITY_SITE = https://github.com/SpiderLabs/ModSecurity-nginx/releases/download/v$(NGINX_MODSECURITY_VERSION) +NGINX_MODSECURITY_LICENSE = Apache-2.0 +NGINX_MODSECURITY_LICENSE_FILES = LICENSE +NGINX_MODSECURITY_DEPENDENCIES = libmodsecurity + +$(eval $(generic-package)) diff --git a/package/nginx-naxsi/Config.in b/package/nginx-naxsi/Config.in new file mode 100644 index 00000000..fc2ba9bf --- /dev/null +++ b/package/nginx-naxsi/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_NGINX_NAXSI + bool "nginx-naxsi" + depends on BR2_PACKAGE_NGINX_HTTP + # uses pcre, so nginx needs to be built with pcre support + select BR2_PACKAGE_PCRE + help + NAXSI means Nginx Anti XSS & SQL Injection. + + Technically, it is a third party nginx module, available as + a package for many UNIX-like platforms. This module, by + default, reads a small subset of simple (and readable) rules + containing 99% of known patterns involved in website + vulnerabilities. For example, <, | or drop are not supposed + to be part of a URI. + + Being very simple, those patterns may match legitimate + queries, it is the Naxsi's administrator duty to add + specific rules that will whitelist legitimate + behaviours. The administrator can either add whitelists + manually by analyzing nginx's error log, or (recommended) + start the project with an intensive auto-learning phase that + will automatically generate whitelisting rules regarding a + website's behaviour. + + In short, Naxsi behaves like a DROP-by-default firewall, the + only task is to add required ACCEPT rules for the target + website to work properly. + + https://github.com/nbs-system/naxsi diff --git a/package/nginx-naxsi/nginx-naxsi.hash b/package/nginx-naxsi/nginx-naxsi.hash new file mode 100644 index 00000000..1f289c56 --- /dev/null +++ b/package/nginx-naxsi/nginx-naxsi.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 0a66dcadd32432460fab180be9f2efe24e911e3798917b2787ee710e02901eb4 nginx-naxsi-0.56.tar.gz +sha256 046812ddc8f250f85b5d6e04218c185849c618b309271ef9d8b01e92c6f7a6ac naxsi_src/naxsi_json.c diff --git a/package/nginx-naxsi/nginx-naxsi.mk b/package/nginx-naxsi/nginx-naxsi.mk new file mode 100644 index 00000000..7cfa94a5 --- /dev/null +++ b/package/nginx-naxsi/nginx-naxsi.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# nginx-naxsi +# +################################################################################ + +NGINX_NAXSI_VERSION = 0.56 +NGINX_NAXSI_SITE = $(call github,nbs-system,naxsi,$(NGINX_NAXSI_VERSION)) +NGINX_NAXSI_LICENSE = GPL-2.0+ with OpenSSL exception +NGINX_NAXSI_LICENSE_FILES = naxsi_src/naxsi_json.c + +$(eval $(generic-package)) diff --git a/package/nginx-upload/Config.in b/package/nginx-upload/Config.in new file mode 100644 index 00000000..6bc1c3db --- /dev/null +++ b/package/nginx-upload/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_NGINX_UPLOAD + bool "nginx-upload" + depends on BR2_PACKAGE_NGINX_HTTP + select BR2_PACKAGE_OPENSSL + help + A module for nginx web server for handling file uploads + using multipart/form-data encoding (RFC 1867). + + https://github.com/vkholodkov/nginx-upload-module diff --git a/package/nginx-upload/nginx-upload.hash b/package/nginx-upload/nginx-upload.hash new file mode 100644 index 00000000..b1d380eb --- /dev/null +++ b/package/nginx-upload/nginx-upload.hash @@ -0,0 +1,3 @@ +#Locally Computed: +sha256 61ad5bcb67c8f688a4c7a5611311a351049361840b8dfe78be542066f475166e nginx-upload-4423994c7d8fb491d95867f6af968585d949e7a9.tar.gz +sha256 825f9684c427e29fd1ab085d5c421a4cbf96a460f3c58884a42c28bfbac5e544 LICENCE diff --git a/package/nginx-upload/nginx-upload.mk b/package/nginx-upload/nginx-upload.mk new file mode 100644 index 00000000..253ebeb3 --- /dev/null +++ b/package/nginx-upload/nginx-upload.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# nginx-upload +# +################################################################################ + +NGINX_UPLOAD_VERSION = 4423994c7d8fb491d95867f6af968585d949e7a9 +NGINX_UPLOAD_SITE = $(call github,vkholodkov,nginx-upload-module,$(NGINX_UPLOAD_VERSION)) +NGINX_UPLOAD_LICENSE = BSD-3-Clause +NGINX_UPLOAD_LICENSE_FILES = LICENCE +NGINX_UPLOAD_DEPENDENCIES = openssl + +$(eval $(generic-package)) diff --git a/package/nginx/0001-auto-type-sizeof-rework-autotest-to-be-cross-compila.patch b/package/nginx/0001-auto-type-sizeof-rework-autotest-to-be-cross-compila.patch new file mode 100644 index 00000000..332cb85b --- /dev/null +++ b/package/nginx/0001-auto-type-sizeof-rework-autotest-to-be-cross-compila.patch @@ -0,0 +1,89 @@ +From fb158af083e72c9aa0a8dfd4c6965f950192a230 Mon Sep 17 00:00:00 2001 +From: Samuel Martin +Date: Tue, 4 Jul 2017 11:09:20 -0400 +Subject: [PATCH] auto/type/sizeof: rework autotest to be cross-compilation + friendly + +Rework the sizeof test to do the checks at compile time instead of at +runtime. This way, it does not break when cross-compiling for a +different CPU architecture. + +Signed-off-by: Samuel Martin + +Refresh for 1.8.0. + +Signed-off-by: Danomi Manchego +[martin@barkynet.com: Updated for 1.10.0] +Signed-off-by: Martin Bark +Signed-off-by: Adam Duskett +Refresh for 1.12.0 +--- + auto/types/sizeof | 37 ++++++++++++++++++++++++++++--------- + 1 file changed, 28 insertions(+), 9 deletions(-) + +diff --git a/auto/types/sizeof b/auto/types/sizeof +index 480d8cf..61dcd2d 100644 +--- a/auto/types/sizeof ++++ b/auto/types/sizeof +@@ -14,7 +14,7 @@ END + + ngx_size= + +-cat << END > $NGX_AUTOTEST.c ++cat << _EOF > $NGX_AUTOTEST.c + + #include + #include +@@ -25,22 +25,41 @@ $NGX_INCLUDE_UNISTD_H + $NGX_INCLUDE_INTTYPES_H + $NGX_INCLUDE_AUTO_CONFIG_H + +-int main(void) { +- printf("%d", (int) sizeof($ngx_type)); ++#if !defined( PASTE) ++#define PASTE2( x, y) x##y ++#define PASTE( x, y) PASTE2( x, y) ++#endif /* PASTE */ ++ ++#define SAY_IF_SIZEOF( typename, type, size) \\ ++ static char PASTE( PASTE( PASTE( sizeof_, typename), _is_), size) \\ ++ [(sizeof(type) == (size)) ? 1 : -1] ++ ++SAY_IF_SIZEOF(TEST_TYPENAME, TEST_TYPE, TEST_SIZE); ++ ++int main(void) ++{ + return 0; + } + +-END ++_EOF + + +-ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \ +- -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs" ++_ngx_typename=`echo "$ngx_type" | sed 's/ /_/g;s/\*/p/'` ++ngx_size="-1" ++ngx_size=`for i in 1 2 4 8 16 ; do \ ++ $CC $CC_TEST_FLAGS $CC_AUX_FLAGS \ ++ -DTEST_TYPENAME="$_ngx_typename" -DTEST_TYPE="$ngx_type" -DTEST_SIZE="$i" \ ++ $NGX_AUTOTEST.c -o $NGX_AUTOTEST \ ++ $NGX_LD_OPT $ngx_feature_libs >/dev/null 2>&1 || continue ;\ ++ echo $i ; break ; done` + +-eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1" ++rm -rf $NGX_AUTOTEST* + ++if test -z $ngx_size ; then ++ ngx_size=-1 ++fi + +-if [ -x $NGX_AUTOTEST ]; then +- ngx_size=`$NGX_AUTOTEST` ++if [ $ngx_size -gt 0 ]; then + echo " $ngx_size bytes" + fi + +-- +2.9.4 + diff --git a/package/nginx/0002-auto-feature-add-mechanism-allowing-to-force-feature.patch b/package/nginx/0002-auto-feature-add-mechanism-allowing-to-force-feature.patch new file mode 100644 index 00000000..13bef5ff --- /dev/null +++ b/package/nginx/0002-auto-feature-add-mechanism-allowing-to-force-feature.patch @@ -0,0 +1,135 @@ +From ef72be22ad6d58e230f75553d80b470b80c3303a Mon Sep 17 00:00:00 2001 +From: Samuel Martin +Date: Sun, 4 May 2014 00:40:49 +0200 +Subject: [PATCH] auto/feature: add mechanism allowing to force feature run + test result + +Whenever a feature needs to run a test, the ngx_feature_run_force_result +variable can be set to the desired test result, and thus skip the test. + +Therefore, the generated config.h file will honor these presets. + +This mechanism aims to make easier cross-compilation support. + +Signed-off-by: Samuel Martin +--- + auto/feature | 80 ++++++++++++++++++++++++++++++++++++++++++++---------------- + 1 file changed, 59 insertions(+), 21 deletions(-) + +diff --git a/auto/feature b/auto/feature +index 1145f28..a194b85 100644 +--- a/auto/feature ++++ b/auto/feature +@@ -52,50 +52,88 @@ if [ -x $NGX_AUTOTEST ]; then + case "$ngx_feature_run" in + + yes) +- # /bin/sh is used to intercept "Killed" or "Abort trap" messages +- if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then +- echo " found" ++ if test -n "$ngx_feature_run_force_result" ; then ++ echo " not tested (maybe cross-compiling)" ++ if test -n "$ngx_feature_name" ; then ++ if test "$ngx_feature_run_force_result" = "yes" ; then ++ have=$ngx_have_feature . auto/have ++ fi ++ fi + ngx_found=yes ++ else + +- if test -n "$ngx_feature_name"; then +- have=$ngx_have_feature . auto/have ++ # /bin/sh is used to intercept "Killed" or "Abort trap" messages ++ if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then ++ echo " found" ++ ngx_found=yes ++ ++ if test -n "$ngx_feature_name"; then ++ have=$ngx_have_feature . auto/have ++ fi ++ ++ else ++ echo " found but is not working" + fi + +- else +- echo " found but is not working" + fi + ;; + + value) +- # /bin/sh is used to intercept "Killed" or "Abort trap" messages +- if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then +- echo " found" ++ if test -n "$ngx_feature_run_force_result" ; then ++ echo " not tested (maybe cross-compiling)" ++ cat << END >> $NGX_AUTO_CONFIG_H ++ ++#ifndef $ngx_feature_name ++#define $ngx_feature_name $ngx_feature_run_force_result ++#endif ++ ++END + ngx_found=yes ++ else + +- cat << END >> $NGX_AUTO_CONFIG_H ++ # /bin/sh is used to intercept "Killed" or "Abort trap" messages ++ if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then ++ echo " found" ++ ngx_found=yes ++ ++ cat << END >> $NGX_AUTO_CONFIG_H + + #ifndef $ngx_feature_name + #define $ngx_feature_name `$NGX_AUTOTEST` + #endif + + END +- else +- echo " found but is not working" ++ else ++ echo " found but is not working" ++ fi ++ + fi + ;; + + bug) +- # /bin/sh is used to intercept "Killed" or "Abort trap" messages +- if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then +- echo " not found" +- +- else +- echo " found" ++ if test -n "$ngx_feature_run_force_result" ; then ++ echo " not tested (maybe cross-compiling)" ++ if test -n "$ngx_feature_name"; then ++ if test "$ngx_feature_run_force_result" = "yes" ; then ++ have=$ngx_have_feature . auto/have ++ fi ++ fi + ngx_found=yes ++ else + +- if test -n "$ngx_feature_name"; then +- have=$ngx_have_feature . auto/have ++ # /bin/sh is used to intercept "Killed" or "Abort trap" messages ++ if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then ++ echo " not found" ++ ++ else ++ echo " found" ++ ngx_found=yes ++ ++ if test -n "$ngx_feature_name"; then ++ have=$ngx_have_feature . auto/have ++ fi + fi ++ + fi + ;; + +-- +1.9.2 + diff --git a/package/nginx/0003-auto-set-ngx_feature_run_force_result-for-each-featu.patch b/package/nginx/0003-auto-set-ngx_feature_run_force_result-for-each-featu.patch new file mode 100644 index 00000000..f186becd --- /dev/null +++ b/package/nginx/0003-auto-set-ngx_feature_run_force_result-for-each-featu.patch @@ -0,0 +1,213 @@ +From 57d9d632be9a9f7e3ac00f9eb10b069afd0b1543 Mon Sep 17 00:00:00 2001 +From: Samuel Martin +Date: Thu, 29 May 2014 18:52:10 +0200 +Subject: [PATCH] auto/*: set ngx_feature_run_force_result for each feature + requiring run test + +Each feature requiring a run test has a matching preset variable (called +ngx_force_*) used to set ngx_feature_run_force_result. + +These ngx_force_* variables are passed through the environment at configure +time. + +Signed-off-by: Samuel Martin + +Refresh for 1.8.0. + +Signed-off-by: Danomi Manchego +--- + auto/cc/conf | 3 +++ + auto/cc/name | 1 + + auto/lib/libatomic/conf | 1 + + auto/os/darwin | 3 +++ + auto/os/linux | 4 ++++ + auto/unix | 8 ++++++++ + 6 files changed, 20 insertions(+) + +diff --git a/auto/cc/conf b/auto/cc/conf +index afbca62b..ad42c800 100644 +--- a/auto/cc/conf ++++ b/auto/cc/conf +@@ -184,6 +184,7 @@ if [ "$NGX_PLATFORM" != win32 ]; then + ngx_feature="gcc builtin atomic operations" + ngx_feature_name=NGX_HAVE_GCC_ATOMIC + ngx_feature_run=yes ++ ngx_feature_run_force_result="$ngx_force_gcc_have_atomic" + ngx_feature_incs= + ngx_feature_path= + ngx_feature_libs= +@@ -205,6 +206,7 @@ if [ "$NGX_PLATFORM" != win32 ]; then + ngx_feature="C99 variadic macros" + ngx_feature_name="NGX_HAVE_C99_VARIADIC_MACROS" + ngx_feature_run=yes ++ ngx_feature_run_force_result="$ngx_force_c99_have_variadic_macros" + ngx_feature_incs="#include + #define var(dummy, ...) sprintf(__VA_ARGS__)" + ngx_feature_path= +@@ -219,6 +221,7 @@ if [ "$NGX_PLATFORM" != win32 ]; then + ngx_feature="gcc variadic macros" + ngx_feature_name="NGX_HAVE_GCC_VARIADIC_MACROS" + ngx_feature_run=yes ++ ngx_feature_run_force_result="$ngx_force_gcc_have_variadic_macros" + ngx_feature_incs="#include + #define var(dummy, args...) sprintf(args)" + ngx_feature_path= +diff --git a/auto/cc/name b/auto/cc/name +index ded93f5b..7c3cb74a 100644 +--- a/auto/cc/name ++++ b/auto/cc/name +@@ -8,6 +8,7 @@ if [ "$NGX_PLATFORM" != win32 ]; then + ngx_feature="C compiler" + ngx_feature_name= + ngx_feature_run=yes ++ ngx_feature_run_force_result="$ngx_force_c_compiler" + ngx_feature_incs= + ngx_feature_path= + ngx_feature_libs= +diff --git a/auto/lib/libatomic/conf b/auto/lib/libatomic/conf +index d1e484ab..37249161 100644 +--- a/auto/lib/libatomic/conf ++++ b/auto/lib/libatomic/conf +@@ -15,6 +15,7 @@ else + ngx_feature="atomic_ops library" + ngx_feature_name=NGX_HAVE_LIBATOMIC + ngx_feature_run=yes ++ ngx_feature_run_force_result="$ngx_force_have_libatomic" + ngx_feature_incs="#define AO_REQUIRE_CAS + #include " + ngx_feature_path= +diff --git a/auto/os/darwin b/auto/os/darwin +index 429468f7..1ed47cca 100644 +--- a/auto/os/darwin ++++ b/auto/os/darwin +@@ -33,6 +33,7 @@ NGX_KQUEUE_CHECKED=YES + ngx_feature="kqueue's EVFILT_TIMER" + ngx_feature_name="NGX_HAVE_TIMER_EVENT" + ngx_feature_run=yes ++ngx_feature_run_force_result="$ngx_force_have_timer_event" + ngx_feature_incs="#include + #include " + ngx_feature_path= +@@ -63,6 +64,7 @@ ngx_feature_test="int kq; + ngx_feature="Darwin 64-bit kqueue millisecond timeout bug" + ngx_feature_name=NGX_DARWIN_KEVENT_BUG + ngx_feature_run=bug ++ngx_feature_run_force_result="$ngx_force_kevent_bug" + ngx_feature_incs="#include + #include " + ngx_feature_path= +@@ -92,6 +94,7 @@ ngx_feature_test="int kq; + ngx_feature="sendfile()" + ngx_feature_name="NGX_HAVE_SENDFILE" + ngx_feature_run=yes ++ngx_feature_run_force_result="$ngx_force_have_sendfile" + ngx_feature_incs="#include + #include + #include +diff --git a/auto/os/linux b/auto/os/linux +index 2c8a9bb8..eb4513ee 100644 +--- a/auto/os/linux ++++ b/auto/os/linux +@@ -37,6 +37,7 @@ fi + ngx_feature="epoll" + ngx_feature_name="NGX_HAVE_EPOLL" + ngx_feature_run=yes ++ngx_feature_run_force_result="$ngx_force_have_epoll" + ngx_feature_incs="#include " + ngx_feature_path= + ngx_feature_libs= +@@ -111,6 +112,7 @@ CC_AUX_FLAGS="$cc_aux_flags -D_GNU_SOURCE" + ngx_feature="sendfile()" + ngx_feature_name="NGX_HAVE_SENDFILE" + ngx_feature_run=yes ++ngx_feature_run_force_result="$ngx_force_have_sendfile" + ngx_feature_incs="#include + #include " + ngx_feature_path= +@@ -132,6 +134,7 @@ CC_AUX_FLAGS="$cc_aux_flags -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64" + ngx_feature="sendfile64()" + ngx_feature_name="NGX_HAVE_SENDFILE64" + ngx_feature_run=yes ++ngx_feature_run_force_result="$ngx_force_have_sendfile64" + ngx_feature_incs="#include + #include " + ngx_feature_path= +@@ -150,6 +153,7 @@ ngx_include="sys/prctl.h"; . auto/include + ngx_feature="prctl(PR_SET_DUMPABLE)" + ngx_feature_name="NGX_HAVE_PR_SET_DUMPABLE" + ngx_feature_run=yes ++ngx_feature_run_force_result="$ngx_force_have_pr_set_dumpable" + ngx_feature_incs="#include " + ngx_feature_path= + ngx_feature_libs= +diff --git a/auto/unix b/auto/unix +index 43d3b25a..3da00537 100644 +--- a/auto/unix ++++ b/auto/unix +@@ -100,6 +100,7 @@ if test -z "$NGX_KQUEUE_CHECKED"; then + ngx_feature="kqueue's EVFILT_TIMER" + ngx_feature_name="NGX_HAVE_TIMER_EVENT" + ngx_feature_run=yes ++ ngx_feature_run_force_result="$ngx_force_have_timer_event" + ngx_feature_incs="#include + #include " + ngx_feature_path= +@@ -730,6 +731,7 @@ ngx_feature_test="char buf[1]; struct iovec vec[1]; ssize_t n; + ngx_feature="sys_nerr" + ngx_feature_name="NGX_SYS_NERR" + ngx_feature_run=value ++ngx_feature_run_force_result="$ngx_force_sys_nerr" + ngx_feature_incs='#include + #include ' + ngx_feature_path= +@@ -744,6 +746,7 @@ if [ $ngx_found = no ]; then + ngx_feature="_sys_nerr" + ngx_feature_name="NGX_SYS_NERR" + ngx_feature_run=value ++ ngx_feature_run_force_result="$ngx_force_sys_nerr" + ngx_feature_incs='#include + #include ' + ngx_feature_path= +@@ -759,6 +762,7 @@ if [ $ngx_found = no ]; then + ngx_feature='maximum errno' + ngx_feature_name=NGX_SYS_NERR + ngx_feature_run=value ++ ngx_feature_run_force_result="$ngx_force_sys_nerr" + ngx_feature_incs='#include + #include + #include ' +@@ -841,6 +845,7 @@ ngx_feature_test="void *p; p = memalign(4096, 4096); + ngx_feature="mmap(MAP_ANON|MAP_SHARED)" + ngx_feature_name="NGX_HAVE_MAP_ANON" + ngx_feature_run=yes ++ngx_feature_run_force_result="$ngx_force_have_map_anon" + ngx_feature_incs="#include " + ngx_feature_path= + ngx_feature_libs= +@@ -854,6 +859,7 @@ ngx_feature_test="void *p; + ngx_feature='mmap("/dev/zero", MAP_SHARED)' + ngx_feature_name="NGX_HAVE_MAP_DEVZERO" + ngx_feature_run=yes ++ngx_feature_run_force_result="$ngx_force_have_map_devzero" + ngx_feature_incs="#include + #include + #include " +@@ -869,6 +875,7 @@ ngx_feature_test='void *p; int fd; + ngx_feature="System V shared memory" + ngx_feature_name="NGX_HAVE_SYSVSHM" + ngx_feature_run=yes ++ngx_feature_run_force_result="$ngx_force_have_sysvshm" + ngx_feature_incs="#include + #include " + ngx_feature_path= +@@ -883,6 +890,7 @@ ngx_feature_test="int id; + ngx_feature="POSIX semaphores" + ngx_feature_name="NGX_HAVE_POSIX_SEM" + ngx_feature_run=yes ++ngx_feature_run_force_result="$ngx_force_have_posix_sem" + ngx_feature_incs="#include " + ngx_feature_path= + ngx_feature_libs= +-- +2.17.1 + diff --git a/package/nginx/0004-auto-lib-libxslt-conf-use-pkg-config.patch b/package/nginx/0004-auto-lib-libxslt-conf-use-pkg-config.patch new file mode 100644 index 00000000..09e708b7 --- /dev/null +++ b/package/nginx/0004-auto-lib-libxslt-conf-use-pkg-config.patch @@ -0,0 +1,34 @@ +From 7783d63c87f94797aa134786214b0a84c000be75 Mon Sep 17 00:00:00 2001 +From: Samuel Martin +Date: Thu, 29 May 2014 19:22:27 +0200 +Subject: [PATCH] auto/lib/libxslt/conf: use pkg-config + +Change to using pkg-config to find the path to libxslt and its +dependencies. + +Signed-off-by: Martin Bark +[Peter: updated for 1.15.6] +Signed-off-by: Peter Korsgaard +--- + auto/lib/libxslt/conf | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/auto/lib/libxslt/conf b/auto/lib/libxslt/conf +index 3063ac7c..3209e364 100644 +--- a/auto/lib/libxslt/conf ++++ b/auto/lib/libxslt/conf +@@ -12,8 +12,9 @@ + #include + #include + #include " +- ngx_feature_path="/usr/include/libxml2" +- ngx_feature_libs="-lxml2 -lxslt" ++ ngx_feature_path="$(${PKG_CONFIG:=pkg-config} --cflags-only-I libxslt| ++ sed -re 's/(^|\s)-I\s*(\S+)/\1\2/g')" ++ ngx_feature_libs="$(${PKG_CONFIG:=pkg-config} --libs libxslt)" + ngx_feature_test="xmlParserCtxtPtr ctxt = NULL; + xsltStylesheetPtr sheet = NULL; + xmlDocPtr doc = NULL; +-- +2.11.0 + diff --git a/package/nginx/0005-auto-unix-make-sys_nerr-guessing-cross-friendly.patch b/package/nginx/0005-auto-unix-make-sys_nerr-guessing-cross-friendly.patch new file mode 100644 index 00000000..747a034a --- /dev/null +++ b/package/nginx/0005-auto-unix-make-sys_nerr-guessing-cross-friendly.patch @@ -0,0 +1,138 @@ +From 08617a8d29ee22831175697555558fec8f52772c Mon Sep 17 00:00:00 2001 +From: Samuel Martin +Date: Sun, 1 Jun 2014 16:05:04 +0200 +Subject: [PATCH] auto/unix: make sys_nerr guessing cross-friendly + +This patch replaces the default sys_nerr runtest with a test done at +buildtime. + +The idea behind this buildtime test is finding the value of the ERR_MAX +macro if defined, or the EHWPOISON (which is currently the last errno) +otherwise. + +Signed-off-by: Samuel Martin + +Refresh for 1.8.0. + +Signed-off-by: Danomi Manchego +--- + auto/os/sys_nerr | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + auto/unix | 10 ++++++++ + 2 files changed, 88 insertions(+) + create mode 100644 auto/os/sys_nerr + +diff --git a/auto/os/sys_nerr b/auto/os/sys_nerr +new file mode 100644 +index 0000000..8970f5f +--- /dev/null ++++ b/auto/os/sys_nerr +@@ -0,0 +1,78 @@ ++ ++# Copyright (C) Samuel Martin ++ ++ ++echo $ngx_n "checking for sys_nerr value...$ngx_c" ++ ++# sys_nerr guessing is done using a (very) poor (but working) ++# heuristics, by checking for the value of ERR_MAX if defined, or ++# EHWPOISON otherwise. ++ ++cat << END >> $NGX_AUTOCONF_ERR ++ ++---------------------------------------- ++checking for sys_nerr value ++ ++END ++ ++ngx_sys_nerr= ++ ++cat << _EOF > $NGX_AUTOTEST.c ++ ++#include ++#include ++ ++static char sys_nerr_test[ERR_MAX]; ++int main(void) ++{ ++ return 0; ++} ++ ++_EOF ++ ++if $CC $CC_TEST_FLAGS $CC_AUX_FLAGS \ ++ $NGX_AUTOTEST.c -o $NGX_AUTOTEST \ ++ $NGX_LD_OPT $ngx_feature_libs >/dev/null 2>&1 ; then ++ _ngx_max_err_macro=ERR_MAX ++else ++ # the +2 has been empirically found! ++ _ngx_max_err_macro="EHWPOISON + 2" ++fi ++ ++cat << _EOF > $NGX_AUTOTEST.c ++ ++#include ++#include ++ ++static char sys_nerr_test[(TEST_ERR_MAX == $_ngx_max_err_macro) ? 1 : -1]; ++int main(void) ++{ ++ return 0; ++} ++ ++_EOF ++ ++ ++ngx_sys_nerr=`for i in $(seq 0 2000) ; do \ ++ $CC $CC_TEST_FLAGS $CC_AUX_FLAGS \ ++ -DTEST_ERR_MAX="$i" \ ++ $NGX_AUTOTEST.c -o $NGX_AUTOTEST \ ++ $NGX_LD_OPT $ngx_feature_libs >/dev/null 2>&1 || continue ;\ ++ echo $i ; break ; done` ++ ++rm -rf $NGX_AUTOTEST* ++ ++if test -z $ngx_sys_nerr ; then ++ ngx_size=0 ++ ngx_sys_nerr=0 ++fi ++ ++cat << END >> $NGX_AUTO_CONFIG_H ++ ++#ifndef $ngx_feature_name ++#define $ngx_feature_name $ngx_sys_nerr ++#endif ++ ++END ++ ++echo " $ngx_sys_nerr" +diff --git a/auto/unix b/auto/unix +index 7dbf9d1..00a7370 100755 +--- a/auto/unix ++++ b/auto/unix +@@ -736,6 +736,10 @@ ngx_feature_incs='#include + #include ' + ngx_feature_path= + ngx_feature_libs= ++ ++if false ; then ++# Disabled because only valid for native build. ++ + ngx_feature_test='printf("%d", sys_nerr);' + . auto/feature + +@@ -784,6 +788,12 @@ if [ $ngx_found = no ]; then + . auto/feature + fi + ++else ++ # Cross-compilation support ++ . auto/os/sys_nerr ++ ++fi ++ + + ngx_feature="localtime_r()" + ngx_feature_name="NGX_HAVE_LOCALTIME_R" +-- +1.9.1 + diff --git a/package/nginx/0006-auto-lib-openssl-conf-use-pkg-config.patch b/package/nginx/0006-auto-lib-openssl-conf-use-pkg-config.patch new file mode 100644 index 00000000..43387296 --- /dev/null +++ b/package/nginx/0006-auto-lib-openssl-conf-use-pkg-config.patch @@ -0,0 +1,251 @@ +From 4ba4b1e0bd1b69e124eb34c95ae9e7c087370efa Mon Sep 17 00:00:00 2001 +From: Martin Bark +Date: Fri, 6 May 2016 14:48:31 +0100 +Subject: [PATCH] auto/lib/openssl/conf: use pkg-config + +Change to using pkg-config to find the path to openssl and its +dependencies. + +Signed-off-by: Martin Bark +--- + auto/lib/openssl/conf | 187 +++++++++++++++++++++--------------------- + 1 file changed, 94 insertions(+), 93 deletions(-) + +diff --git a/auto/lib/openssl/conf b/auto/lib/openssl/conf +index 4fb52df7..9f30490d 100644 +--- a/auto/lib/openssl/conf ++++ b/auto/lib/openssl/conf +@@ -1,4 +1,3 @@ +- + # Copyright (C) Igor Sysoev + # Copyright (C) Nginx, Inc. + +@@ -7,123 +6,125 @@ if [ $OPENSSL != NONE ]; then + + case "$CC" in + +- cl | bcc32) +- have=NGX_OPENSSL . auto/have +- have=NGX_SSL . auto/have +- +- CFLAGS="$CFLAGS -DNO_SYS_TYPES_H" +- +- CORE_INCS="$CORE_INCS $OPENSSL/openssl/include" +- CORE_DEPS="$CORE_DEPS $OPENSSL/openssl/include/openssl/ssl.h" +- +- if [ -f $OPENSSL/ms/do_ms.bat ]; then +- # before OpenSSL 1.1.0 +- CORE_LIBS="$CORE_LIBS $OPENSSL/openssl/lib/ssleay32.lib" +- CORE_LIBS="$CORE_LIBS $OPENSSL/openssl/lib/libeay32.lib" +- else +- # OpenSSL 1.1.0+ +- CORE_LIBS="$CORE_LIBS $OPENSSL/openssl/lib/libssl.lib" +- CORE_LIBS="$CORE_LIBS $OPENSSL/openssl/lib/libcrypto.lib" +- fi +- +- # libeay32.lib requires gdi32.lib +- CORE_LIBS="$CORE_LIBS gdi32.lib" +- # OpenSSL 1.0.0 requires crypt32.lib +- CORE_LIBS="$CORE_LIBS crypt32.lib" +- ;; +- +- *) +- have=NGX_OPENSSL . auto/have +- have=NGX_SSL . auto/have +- +- CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include" +- CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h" +- CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a" +- CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a" +- CORE_LIBS="$CORE_LIBS $NGX_LIBDL" +- CORE_LIBS="$CORE_LIBS $NGX_LIBPTHREAD" +- +- if [ "$NGX_PLATFORM" = win32 ]; then +- CORE_LIBS="$CORE_LIBS -lgdi32 -lcrypt32 -lws2_32" +- fi +- ;; ++ cl | bcc32) ++ have=NGX_OPENSSL . auto/have ++ have=NGX_SSL . auto/have ++ ++ CFLAGS="$CFLAGS -DNO_SYS_TYPES_H" ++ ++ CORE_INCS="$CORE_INCS $OPENSSL/openssl/include" ++ CORE_DEPS="$CORE_DEPS $OPENSSL/openssl/include/openssl/ssl.h" ++ ++ if [ -f $OPENSSL/ms/do_ms.bat ]; then ++ # before OpenSSL 1.1.0 ++ CORE_LIBS="$CORE_LIBS $OPENSSL/openssl/lib/ssleay32.lib" ++ CORE_LIBS="$CORE_LIBS $OPENSSL/openssl/lib/libeay32.lib" ++ else ++ # OpenSSL 1.1.0+ ++ CORE_LIBS="$CORE_LIBS $OPENSSL/openssl/lib/libssl.lib" ++ CORE_LIBS="$CORE_LIBS $OPENSSL/openssl/lib/libcrypto.lib" ++ fi ++ ++ # libeay32.lib requires gdi32.lib ++ CORE_LIBS="$CORE_LIBS gdi32.lib" ++ # OpenSSL 1.0.0 requires crypt32.lib ++ CORE_LIBS="$CORE_LIBS crypt32.lib" ++ ;; ++ ++ *) ++ have=NGX_OPENSSL . auto/have ++ have=NGX_SSL . auto/have ++ ++ CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include" ++ CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h" ++ CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a" ++ CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a" ++ CORE_LIBS="$CORE_LIBS $NGX_LIBDL" ++ CORE_LIBS="$CORE_LIBS $NGX_LIBPTHREAD" ++ ++ if [ "$NGX_PLATFORM" = win32 ]; then ++ CORE_LIBS="$CORE_LIBS -lgdi32 -lcrypt32 -lws2_32" ++ fi ++ ;; + esac + + else + + if [ "$NGX_PLATFORM" != win32 ]; then + +- OPENSSL=NO ++ OPENSSL=NO + +- ngx_feature="OpenSSL library" +- ngx_feature_name="NGX_OPENSSL" +- ngx_feature_run=no +- ngx_feature_incs="#include " +- ngx_feature_path= +- ngx_feature_libs="-lssl -lcrypto $NGX_LIBDL $NGX_LIBPTHREAD" +- ngx_feature_test="SSL_CTX_set_options(NULL, 0)" +- . auto/feature ++ ngx_feature="OpenSSL library" ++ ngx_feature_name="NGX_OPENSSL" ++ ngx_feature_run=no ++ ngx_feature_incs="#include " ++ ngx_feature_path= ++ ngx_feature_path="$(${PKG_CONFIG:=pkg-config} --cflags-only-I openssl| ++ sed -re 's/(^|\s)-I\s*(\S+)/\1\2/g')" ++ ngx_feature_libs="$(${PKG_CONFIG:=pkg-config} --libs openssl)" ++ ngx_feature_test="SSL_CTX_set_options(NULL, 0)" ++ . auto/feature + +- if [ $ngx_found = no ]; then ++ if [ $ngx_found = no ]; then + +- # FreeBSD port ++ # FreeBSD port + +- ngx_feature="OpenSSL library in /usr/local/" +- ngx_feature_path="/usr/local/include" ++ ngx_feature="OpenSSL library in /usr/local/" ++ ngx_feature_path="/usr/local/include" + +- if [ $NGX_RPATH = YES ]; then +- ngx_feature_libs="-R/usr/local/lib -L/usr/local/lib -lssl -lcrypto" +- else +- ngx_feature_libs="-L/usr/local/lib -lssl -lcrypto" +- fi ++ if [ $NGX_RPATH = YES ]; then ++ ngx_feature_libs="-R/usr/local/lib -L/usr/local/lib -lssl -lcrypto" ++ else ++ ngx_feature_libs="-L/usr/local/lib -lssl -lcrypto" ++ fi + +- ngx_feature_libs="$ngx_feature_libs $NGX_LIBDL $NGX_LIBPTHREAD" ++ ngx_feature_libs="$ngx_feature_libs $NGX_LIBDL $NGX_LIBPTHREAD" + +- . auto/feature +- fi ++ . auto/feature ++ fi + +- if [ $ngx_found = no ]; then ++ if [ $ngx_found = no ]; then + +- # NetBSD port ++ # NetBSD port + +- ngx_feature="OpenSSL library in /usr/pkg/" +- ngx_feature_path="/usr/pkg/include" ++ ngx_feature="OpenSSL library in /usr/pkg/" ++ ngx_feature_path="/usr/pkg/include" + +- if [ $NGX_RPATH = YES ]; then +- ngx_feature_libs="-R/usr/pkg/lib -L/usr/pkg/lib -lssl -lcrypto" +- else +- ngx_feature_libs="-L/usr/pkg/lib -lssl -lcrypto" +- fi ++ if [ $NGX_RPATH = YES ]; then ++ ngx_feature_libs="-R/usr/pkg/lib -L/usr/pkg/lib -lssl -lcrypto" ++ else ++ ngx_feature_libs="-L/usr/pkg/lib -lssl -lcrypto" ++ fi + +- ngx_feature_libs="$ngx_feature_libs $NGX_LIBDL $NGX_LIBPTHREAD" ++ ngx_feature_libs="$ngx_feature_libs $NGX_LIBDL $NGX_LIBPTHREAD" + +- . auto/feature +- fi ++ . auto/feature ++ fi + +- if [ $ngx_found = no ]; then ++ if [ $ngx_found = no ]; then + +- # MacPorts ++ # MacPorts + +- ngx_feature="OpenSSL library in /opt/local/" +- ngx_feature_path="/opt/local/include" ++ ngx_feature="OpenSSL library in /opt/local/" ++ ngx_feature_path="/opt/local/include" + +- if [ $NGX_RPATH = YES ]; then +- ngx_feature_libs="-R/opt/local/lib -L/opt/local/lib -lssl -lcrypto" +- else +- ngx_feature_libs="-L/opt/local/lib -lssl -lcrypto" +- fi ++ if [ $NGX_RPATH = YES ]; then ++ ngx_feature_libs="-R/opt/local/lib -L/opt/local/lib -lssl -lcrypto" ++ else ++ ngx_feature_libs="-L/opt/local/lib -lssl -lcrypto" ++ fi + +- ngx_feature_libs="$ngx_feature_libs $NGX_LIBDL $NGX_LIBPTHREAD" ++ ngx_feature_libs="$ngx_feature_libs $NGX_LIBDL $NGX_LIBPTHREAD" + +- . auto/feature +- fi ++ . auto/feature ++ fi + +- if [ $ngx_found = yes ]; then +- have=NGX_SSL . auto/have +- CORE_INCS="$CORE_INCS $ngx_feature_path" +- CORE_LIBS="$CORE_LIBS $ngx_feature_libs" +- OPENSSL=YES +- fi ++ if [ $ngx_found = yes ]; then ++ have=NGX_SSL . auto/have ++ CORE_INCS="$CORE_INCS $ngx_feature_path" ++ CORE_LIBS="$CORE_LIBS $ngx_feature_libs" ++ OPENSSL=YES ++ fi + fi + + if [ $OPENSSL != YES ]; then +@@ -136,7 +137,7 @@ into the system, or build the OpenSSL library statically from the source + with nginx by using --with-openssl= option. + + END +- exit 1 ++ exit 1 + fi + + fi +-- +2.17.1 + diff --git a/package/nginx/0007-auto-lib-libgd-conf-use-pkg-config.patch b/package/nginx/0007-auto-lib-libgd-conf-use-pkg-config.patch new file mode 100644 index 00000000..31ccf88f --- /dev/null +++ b/package/nginx/0007-auto-lib-libgd-conf-use-pkg-config.patch @@ -0,0 +1,36 @@ +From 0551f2e5eb4143be0aacc0185cdc4afc9ca80204 Mon Sep 17 00:00:00 2001 +From: Martin Bark +Date: Fri, 6 May 2016 14:48:49 +0100 +Subject: [PATCH] auto/lib/libgd/conf: use pkg-config + +Change to using pkg-config to find the path to libgd and its +dependencies. + +Signed-off-by: Martin Bark +[Peter: updated for 1.15.6] +Signed-off-by: Peter Korsgaard +[Fabrice: use pkg-config instead of gdlib-config] +Signed-off-by: Fabrice Fontaine +--- + auto/lib/libgd/conf | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/auto/lib/libgd/conf b/auto/lib/libgd/conf +index 67863976..1a4379a5 100644 +--- a/auto/lib/libgd/conf ++++ b/auto/lib/libgd/conf +@@ -7,8 +7,9 @@ + ngx_feature_name= + ngx_feature_run=no + ngx_feature_incs="#include " +- ngx_feature_path= +- ngx_feature_libs="-lgd" ++ ngx_feature_path="$(${PKG_CONFIG:=pkg-config} --cflags-only-I gdlib| ++ sed -re 's/(^|\s)-I\s*(\S+)/\1\2/g')" ++ ngx_feature_libs="$(${PKG_CONFIG:=pkg-config} --libs gdlib)" + ngx_feature_test="gdImagePtr img = gdImageCreateFromGifPtr(1, NULL); + (void) img" + . auto/feature +-- +2.11.0 + diff --git a/package/nginx/0008-src-os-unix-ngx_linux_config.h-only-include-dlfcn.h-.patch b/package/nginx/0008-src-os-unix-ngx_linux_config.h-only-include-dlfcn.h-.patch new file mode 100644 index 00000000..c10fcd11 --- /dev/null +++ b/package/nginx/0008-src-os-unix-ngx_linux_config.h-only-include-dlfcn.h-.patch @@ -0,0 +1,33 @@ +From 8dc9dffc1f99ac951865f3135dfb5061a08d1f85 Mon Sep 17 00:00:00 2001 +From: Martin Bark +Date: Fri, 6 May 2016 16:29:17 +0100 +Subject: [PATCH] src/os/unix/ngx_linux_config.h: only include dlfcn.h if + available + +Signed-off-by: Martin Bark +--- + src/os/unix/ngx_linux_config.h | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/src/os/unix/ngx_linux_config.h b/src/os/unix/ngx_linux_config.h +index 2f6129d..4244086 100644 +--- a/src/os/unix/ngx_linux_config.h ++++ b/src/os/unix/ngx_linux_config.h +@@ -55,10 +55,12 @@ + #include + #include /* uname() */ + +-#include ++#include + + +-#include ++#if (NGX_HAVE_DLOPEN) ++#include ++#endif + + + #if (NGX_HAVE_POSIX_SEM) +-- +2.8.2 + diff --git a/package/nginx/0009-auto-os-linux-fix-build-with-libxcrypt.patch b/package/nginx/0009-auto-os-linux-fix-build-with-libxcrypt.patch new file mode 100644 index 00000000..7e430ffc --- /dev/null +++ b/package/nginx/0009-auto-os-linux-fix-build-with-libxcrypt.patch @@ -0,0 +1,38 @@ +From 79f1fe5251afc4e22a138b0c8f44fc9c94093b8b Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Fri, 2 Apr 2021 09:18:26 +0200 +Subject: [PATCH] auto/os/linux: fix build with libxcrypt + +If crypt_r is found in libcrypt, add -lcrypt to CORE_LIBS to avoid the +following build failure with libxcrypt: + +objs/ngx_modules.o \ +-lpcre -L/home/giuliobenetti/autobuild/run/instance-3/output-1/host/bin/../xtensa-buildroot-linux-uclibc/sysroot/usr/lib -lssl -lcrypto -L/home/giuliobenetti/autobuild/run/instance-3/output-1/host/bin/../xtensa-buildroot-linux-uclibc/sysroot/usr/lib -lxslt -lxml2 -lGeoIP \ +-Wl,-E +/home/giuliobenetti/autobuild/run/instance-3/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/9.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: objs/src/os/unix/ngx_user.o:/home/giuliobenetti/autobuild/run/instance-3/output-1/build/nginx-1.18.0/src/os/unix/ngx_user.c:18: undefined reference to `crypt_r' + +Fixes: + - http://autobuild.buildroot.org/results/79a51b0d348e756517b5c9ce815a67f5c657e7e6 + +Signed-off-by: Fabrice Fontaine +--- + auto/os/linux | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/auto/os/linux b/auto/os/linux +index 5e280eca..04682812 100644 +--- a/auto/os/linux ++++ b/auto/os/linux +@@ -203,6 +203,9 @@ ngx_feature_test="struct crypt_data cd; + crypt_r(\"key\", \"salt\", &cd);" + . auto/feature + ++if [ $ngx_found = yes ]; then ++ CORE_LIBS="$CORE_LIBS $ngx_feature_libs" ++fi + + ngx_include="sys/vfs.h"; . auto/include + +-- +2.30.2 + diff --git a/package/nginx/0010-Resolver-fixed-off-by-one-write-in-ngx_resolver_copy.patch b/package/nginx/0010-Resolver-fixed-off-by-one-write-in-ngx_resolver_copy.patch new file mode 100644 index 00000000..ba47768f --- /dev/null +++ b/package/nginx/0010-Resolver-fixed-off-by-one-write-in-ngx_resolver_copy.patch @@ -0,0 +1,40 @@ +From 9f1dcb0c0473641730b871dee984016ff19d2c53 Mon Sep 17 00:00:00 2001 +From: Maxim Dounin +Date: Tue, 25 May 2021 15:17:36 +0300 +Subject: [PATCH] Resolver: fixed off-by-one write in ngx_resolver_copy(). + +Reported by Luis Merino, Markus Vervier, Eric Sesterhenn, X41 D-Sec GmbH. + +[peter@korsgaard.com: backport from upstream] +Signed-off-by: Peter Korsgaard +--- + src/core/ngx_resolver.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c +index 79390701..63b26193 100644 +--- a/src/core/ngx_resolver.c ++++ b/src/core/ngx_resolver.c +@@ -4008,15 +4008,15 @@ done: + n = *src++; + + } else { ++ if (dst != name->data) { ++ *dst++ = '.'; ++ } ++ + ngx_strlow(dst, src, n); + dst += n; + src += n; + + n = *src++; +- +- if (n != 0) { +- *dst++ = '.'; +- } + } + + if (n == 0) { +-- +2.20.1 + diff --git a/package/nginx/Config.in b/package/nginx/Config.in new file mode 100644 index 00000000..6ae790a9 --- /dev/null +++ b/package/nginx/Config.in @@ -0,0 +1,446 @@ +menuconfig BR2_PACKAGE_NGINX + bool "nginx" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBATOMIC_OPS if BR2_sparc_v8 || BR2_sparc_leon3 + help + nginx is an HTTP and reverse proxy server, as well as a mail + proxy server. + + http://nginx.org/ + +if BR2_PACKAGE_NGINX + +config BR2_PACKAGE_NGINX_FILE_AIO + bool "file AIO support" + # Does not build, because nginx hardcodes using SYS_eventfd, + # but it's available on neither AArch64 nor ARC where only + # eventfd() is available. See + # https://bugs.launchpad.net/linaro-aarch64/+bug/1160013 + depends on !BR2_aarch64 + depends on !BR2_arc + +config BR2_PACKAGE_NGINX_THREADS + bool "thread pool support" + depends on BR2_TOOLCHAIN_HAS_THREADS + +comment "thread pool support needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_NGINX_HTTP + bool "http server" + default y + +if BR2_PACKAGE_NGINX_HTTP + +config BR2_PACKAGE_NGINX_HTTP_CACHE + bool "http cache support" + select BR2_PACKAGE_OPENSSL + +comment "http modules" + +config BR2_PACKAGE_NGINX_HTTP_SSL_MODULE + bool "ngx_http_ssl_module" + select BR2_PACKAGE_OPENSSL + help + Enable ngx_http_ssl_module + +config BR2_PACKAGE_NGINX_HTTP_V2_MODULE + bool "ngx_http_v2_module" + select BR2_PACKAGE_ZLIB + help + Enable ngx_http_spdy_module + +config BR2_PACKAGE_NGINX_HTTP_REALIP_MODULE + bool "ngx_http_realip_module" + help + Enable ngx_http_realip_module + +config BR2_PACKAGE_NGINX_HTTP_ADDITION_MODULE + bool "ngx_http_addition_module" + help + Enable ngx_http_addition_module + +config BR2_PACKAGE_NGINX_HTTP_XSLT_MODULE + bool "ngx_http_xslt_module" + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_LIBXSLT + help + Enable ngx_http_xslt_module + +config BR2_PACKAGE_NGINX_HTTP_IMAGE_FILTER_MODULE + bool "ngx_http_image_filter_module" + select BR2_PACKAGE_GD + select BR2_PACKAGE_JPEG + select BR2_PACKAGE_LIBPNG + help + Enable ngx_http_image_filter_module + +config BR2_PACKAGE_NGINX_HTTP_GEOIP_MODULE + bool "ngx_http_geoip_module" + select BR2_PACKAGE_GEOIP + help + Enable ngx_http_geoip_module + +config BR2_PACKAGE_NGINX_HTTP_SUB_MODULE + bool "ngx_http_sub_module" + help + Enable ngx_http_sub_module + +config BR2_PACKAGE_NGINX_HTTP_DAV_MODULE + bool "ngx_http_dav_module" + help + Enable ngx_http_dav_module + +config BR2_PACKAGE_NGINX_HTTP_FLV_MODULE + bool "ngx_http_flv_module" + help + Enable ngx_http_flv_module + +config BR2_PACKAGE_NGINX_HTTP_MP4_MODULE + bool "ngx_http_mp4_module" + help + Enable ngx_http_mp4_module + +config BR2_PACKAGE_NGINX_HTTP_GUNZIP_MODULE + bool "ngx_http_gunzip_module" + select BR2_PACKAGE_ZLIB + help + Enable ngx_http_gunzip_module + +config BR2_PACKAGE_NGINX_HTTP_GZIP_STATIC_MODULE + bool "ngx_http_gzip_static_module" + select BR2_PACKAGE_ZLIB + help + Enable ngx_http_gzip_static_module + +config BR2_PACKAGE_NGINX_HTTP_AUTH_REQUEST_MODULE + bool "ngx_http_auth_request_module" + help + Enable ngx_http_auth_request_module + +config BR2_PACKAGE_NGINX_HTTP_RANDOM_INDEX_MODULE + bool "ngx_http_random_index_module" + help + Enable ngx_http_random_index_module + +config BR2_PACKAGE_NGINX_HTTP_SECURE_LINK_MODULE + bool "ngx_http_secure_link_module" + select BR2_PACKAGE_OPENSSL + help + Enable ngx_http_secure_link_module + +config BR2_PACKAGE_NGINX_HTTP_DEGRADATION_MODULE + bool "ngx_http_degradation_module" + help + Enable ngx_http_degradation_module + +config BR2_PACKAGE_NGINX_HTTP_SLICE_MODULE + bool "ngx_http_slice_module" + help + Enable ngx_http_slice_module + +config BR2_PACKAGE_NGINX_HTTP_STUB_STATUS_MODULE + bool "ngx_http_stub_status_module" + help + Enable ngx_http_stub_status_module + +config BR2_PACKAGE_NGINX_HTTP_CHARSET_MODULE + bool "ngx_http_charset_module" + default y + help + Enable ngx_http_charset_module + +config BR2_PACKAGE_NGINX_HTTP_GZIP_MODULE + bool "ngx_http_gzip_module" + default y + select BR2_PACKAGE_ZLIB + help + Enable ngx_http_gzip_module + +config BR2_PACKAGE_NGINX_HTTP_SSI_MODULE + bool "ngx_http_ssi_module" + default y + help + Enable ngx_http_ssi_module + +config BR2_PACKAGE_NGINX_HTTP_USERID_MODULE + bool "ngx_http_userid_module" + default y + help + Enable ngx_http_userid_module + +config BR2_PACKAGE_NGINX_HTTP_ACCESS_MODULE + bool "ngx_http_access_module" + default y + help + Enable ngx_http_access_module + +config BR2_PACKAGE_NGINX_HTTP_AUTH_BASIC_MODULE + bool "ngx_http_auth_basic_module" + default y + help + Enable ngx_http_auth_basic_module + +config BR2_PACKAGE_NGINX_HTTP_AUTOINDEX_MODULE + bool "ngx_http_autoindex_module" + default y + help + Enable ngx_http_autoindex_module + +config BR2_PACKAGE_NGINX_HTTP_GEO_MODULE + bool "ngx_http_geo_module" + default y + help + Enable ngx_http_geo_module + +config BR2_PACKAGE_NGINX_HTTP_MAP_MODULE + bool "ngx_http_map_module" + default y + help + Enable ngx_http_map_module + +config BR2_PACKAGE_NGINX_HTTP_SPLIT_CLIENTS_MODULE + bool "ngx_http_split_clients_module" + default y + help + Enable ngx_http_split_clients_module + +config BR2_PACKAGE_NGINX_HTTP_REFERER_MODULE + bool "ngx_http_referer_module" + default y + help + Enable ngx_http_referer_module + +config BR2_PACKAGE_NGINX_HTTP_REWRITE_MODULE + bool "ngx_http_rewrite_module" + default y + select BR2_PACKAGE_PCRE + help + Enable ngx_http_rewrite_module + +config BR2_PACKAGE_NGINX_HTTP_PROXY_MODULE + bool "ngx_http_proxy_module" + default y + help + Enable ngx_http_proxy_module + +config BR2_PACKAGE_NGINX_HTTP_FASTCGI_MODULE + bool "ngx_http_fastcgi_module" + default y + help + Enable ngx_http_fastcgi_module + +config BR2_PACKAGE_NGINX_HTTP_UWSGI_MODULE + bool "ngx_http_uwsgi_module" + default y + help + Enable ngx_http_uwsgi_module + +config BR2_PACKAGE_NGINX_HTTP_SCGI_MODULE + bool "ngx_http_scgi_module" + default y + help + Enable ngx_http_scgi_module + +config BR2_PACKAGE_NGINX_HTTP_MEMCACHED_MODULE + bool "ngx_http_memcached_module" + default y + help + Enable ngx_http_memcached_module + +config BR2_PACKAGE_NGINX_HTTP_LIMIT_CONN_MODULE + bool "ngx_http_limit_conn_module" + default y + help + Enable ngx_http_limit_conn_module + +config BR2_PACKAGE_NGINX_HTTP_LIMIT_REQ_MODULE + bool "ngx_http_limit_req_module" + default y + help + Enable ngx_http_limit_req_module + +config BR2_PACKAGE_NGINX_HTTP_EMPTY_GIF_MODULE + bool "ngx_http_empty_gif_module" + default y + help + Enable ngx_http_empty_gif_module + +config BR2_PACKAGE_NGINX_HTTP_BROWSER_MODULE + bool "ngx_http_browser_module" + default y + help + Enable ngx_http_browser_module + +config BR2_PACKAGE_NGINX_HTTP_UPSTREAM_IP_HASH_MODULE + bool "ngx_http_upstream_ip_hash_module" + default y + help + Enable ngx_http_upstream_ip_hash_module + +config BR2_PACKAGE_NGINX_HTTP_UPSTREAM_LEAST_CONN_MODULE + bool "ngx_http_upstream_least_conn_module" + default y + help + Enable ngx_http_upstream_least_conn_module + +config BR2_PACKAGE_NGINX_HTTP_UPSTREAM_KEEPALIVE_MODULE + bool "ngx_http_upstream_keepalive_module" + default y + help + Enable ngx_http_upstream_keepalive_module + +config BR2_PACKAGE_NGINX_HTTP_UPSTREAM_RANDOM_MODULE + bool "ngx_http_upstream_random_module" + default y + help + Enable ngx_http_upstream_random_module + +endif #BR2_PACKAGE_NGINX_HTTP + +config BR2_PACKAGE_NGINX_MAIL + bool "mail proxy modules" + +if BR2_PACKAGE_NGINX_MAIL + +config BR2_PACKAGE_NGINX_MAIL_SSL_MODULE + bool "ngx_mail_ssl_module" + select BR2_PACKAGE_OPENSSL + help + Enable ngx_mail_ssl_module + +config BR2_PACKAGE_NGINX_MAIL_POP3_MODULE + bool "ngx_mail_pop3_module" + default y + help + Enable ngx_mail_pop3_module + +config BR2_PACKAGE_NGINX_MAIL_IMAP_MODULE + bool "ngx_mail_imap_module" + default y + help + Enable ngx_mail_imap_module + +config BR2_PACKAGE_NGINX_MAIL_SMTP_MODULE + bool "ngx_mail_smtp_module" + default y + help + Enable ngx_mail_smtp_module + +endif #BR2_PACKAGE_NGINX_MAIL + +config BR2_PACKAGE_NGINX_STREAM + bool "stream proxy modules" + +if BR2_PACKAGE_NGINX_STREAM + +config BR2_PACKAGE_NGINX_STREAM_REALIP_MODULE + bool "ngx_stream_realip_module" + help + Enable ngx_stream_realip_module + +config BR2_PACKAGE_NGINX_STREAM_SSL_MODULE + bool "ngx_stream_ssl_module" + select BR2_PACKAGE_OPENSSL + help + Enable ngx_stream_ssl_module + +config BR2_PACKAGE_NGINX_STREAM_GEOIP_MODULE + bool "ngx_stream_geoip_module" + select BR2_PACKAGE_GEOIP + help + Enable ngx_stream_geoip_module + +config BR2_PACKAGE_NGINX_STREAM_SSL_PREREAD_MODULE + bool "ngx_stream_ssl_preread_module" + help + Enable ngx_stream_ssl_preread_module + +config BR2_PACKAGE_NGINX_STREAM_LIMIT_CONN_MODULE + bool "ngx_stream_limit_conn_module" + default y + help + Enable ngx_stream_limit_conn_module + +config BR2_PACKAGE_NGINX_STREAM_ACCESS_MODULE + bool "ngx_stream_access_module" + default y + help + Enable ngx_stream_access_module + +config BR2_PACKAGE_NGINX_STREAM_GEO_MODULE + bool "ngx_stream_geo_module" + default y + help + Enable ngx_stream_geo_module + +config BR2_PACKAGE_NGINX_STREAM_MAP_MODULE + bool "ngx_stream_map_module" + default y + help + Enable ngx_stream_map_module + +config BR2_PACKAGE_NGINX_STREAM_SPLIT_CLIENTS_MODULE + bool "ngx_stream_split_clients_module" + default y + help + Enable ngx_stream_split_clients_module + +config BR2_PACKAGE_NGINX_STREAM_RETURN_MODULE + bool "ngx_stream_return_module" + default y + help + Enable ngx_stream_return_module + +config BR2_PACKAGE_NGINX_STREAM_UPSTREAM_HASH_MODULE + bool "ngx_stream_upstream_hash_module" + default y + help + Enable ngx_stream_upstream_hash_module + +config BR2_PACKAGE_NGINX_STREAM_UPSTREAM_LEAST_CONN_MODULE + bool "ngx_stream_upstream_least_conn_module" + default y + help + Enable ngx_stream_upstream_least_conn_module + +config BR2_PACKAGE_NGINX_STREAM_UPSTREAM_RANDOM_MODULE + bool "ngx_stream_upstream_random_module" + default y + help + Enable ngx_stream_upstream_random_module + +config BR2_PACKAGE_NGINX_STREAM_UPSTREAM_ZONE_MODULE + bool "ngx_stream_upstream_zone_module" + default y + help + Enable ngx_stream_upstream_zone_module + +endif #BR2_PACKAGE_NGINX_STREAM + +config BR2_PACKAGE_NGINX_DEBUG + bool "debug logging" + help + Enable debug logging. The debug level should be set with + the error_log directive. For example + + error_log /var/log/nginx/error.log debug; + +comment "misc. modules" + +config BR2_PACKAGE_NGINX_SELECT_MODULE + bool "ngx_select_module" + help + Enable ngx_select_module + +config BR2_PACKAGE_NGINX_POLL_MODULE + bool "ngx_poll_module" + help + Enable ngx_poll_module + +config BR2_PACKAGE_NGINX_ADD_MODULES + string "additional modules" + help + Space separated list of urls of the additional modules + +endif diff --git a/package/nginx/S50nginx b/package/nginx/S50nginx new file mode 100644 index 00000000..6c243f40 --- /dev/null +++ b/package/nginx/S50nginx @@ -0,0 +1,31 @@ +#!/bin/sh +# +# Start/stop nginx +# + +NGINX=/usr/sbin/nginx +PIDFILE=/var/run/nginx.pid + +case "$1" in + start) + echo "Starting nginx..." + mkdir -p /var/log/nginx /var/cache/nginx + start-stop-daemon -S -x "$NGINX" -p "$PIDFILE" + ;; + stop) + echo "Stopping nginx..." + start-stop-daemon -K -x "$NGINX" -p "$PIDFILE" -o + ;; + reload|force-reload) + echo "Reloading nginx configuration..." + "$NGINX" -s reload + ;; + restart) + "$0" stop + sleep 1 # Prevent race condition: ensure nginx stops before start. + "$0" start + ;; + *) + echo "Usage: $0 {start|stop|restart|reload|force-reload}" + exit 1 +esac diff --git a/package/nginx/nginx.hash b/package/nginx/nginx.hash new file mode 100644 index 00000000..8d17931a --- /dev/null +++ b/package/nginx/nginx.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 4c373e7ab5bf91d34a4f11a0c9496561061ba5eee6020db272a17a7228d35f99 nginx-1.18.0.tar.gz +# License files, locally calculated +sha256 28ad30e2f64bd89ac1287b4606906bb99ed04d9f4e13fb6564a0be9c8a23f509 LICENSE diff --git a/package/nginx/nginx.logrotate b/package/nginx/nginx.logrotate new file mode 100644 index 00000000..e0fa9ec4 --- /dev/null +++ b/package/nginx/nginx.logrotate @@ -0,0 +1,9 @@ +/var/log/nginx/*log { + missingok + create 640 http log + sharedscripts + compress + postrotate + test ! -r /var/run/nginx.pid || kill -USR1 `cat /var/run/nginx.pid` + endscript +} diff --git a/package/nginx/nginx.mk b/package/nginx/nginx.mk new file mode 100644 index 00000000..e93e802f --- /dev/null +++ b/package/nginx/nginx.mk @@ -0,0 +1,324 @@ +################################################################################ +# +# nginx +# +################################################################################ + +NGINX_VERSION = 1.18.0 +NGINX_SITE = http://nginx.org/download +NGINX_LICENSE = BSD-2-Clause +NGINX_LICENSE_FILES = LICENSE +NGINX_CPE_ID_VENDOR = nginx +NGINX_DEPENDENCIES = \ + host-pkgconf \ + $(if $(BR2_PACKAGE_LIBXCRYPT),libxcrypt) + +# 0010-Resolver-fixed-off-by-one-write-in-ngx_resolver_copy.patch +NGINX_IGNORE_CVES += CVE-2021-23017 + +NGINX_CONF_OPTS = \ + --crossbuild=Linux::$(BR2_ARCH) \ + --with-cc="$(TARGET_CC)" \ + --with-cpp="$(TARGET_CC)" \ + --with-ld-opt="$(TARGET_LDFLAGS)" + +# www-data user and group are used for nginx. Because these user and group +# are already set by buildroot, it is not necessary to redefine them. +# See system/skeleton/etc/passwd +# username: www-data uid: 33 +# groupname: www-data gid: 33 +# +# So, we just need to create the directories used by nginx with the right +# ownership. +define NGINX_PERMISSIONS + /var/lib/nginx d 755 33 33 - - - - - +endef + +# disable external libatomic_ops because its detection fails. +NGINX_CONF_ENV += \ + ngx_force_c_compiler=yes \ + ngx_force_c99_have_variadic_macros=yes \ + ngx_force_gcc_have_variadic_macros=yes \ + ngx_force_gcc_have_atomic=yes \ + ngx_force_have_epoll=yes \ + ngx_force_have_sendfile=yes \ + ngx_force_have_sendfile64=yes \ + ngx_force_have_pr_set_dumpable=yes \ + ngx_force_have_timer_event=yes \ + ngx_force_have_map_anon=yes \ + ngx_force_have_map_devzero=yes \ + ngx_force_have_sysvshm=yes \ + ngx_force_have_posix_sem=yes + +# prefix: nginx root configuration location +NGINX_CONF_OPTS += \ + --prefix=/usr \ + --conf-path=/etc/nginx/nginx.conf \ + --sbin-path=/usr/sbin/nginx \ + --pid-path=/run/nginx.pid \ + --lock-path=/run/lock/nginx.lock \ + --user=www-data \ + --group=www-data \ + --error-log-path=/var/log/nginx/error.log \ + --http-log-path=/var/log/nginx/access.log \ + --http-client-body-temp-path=/var/cache/nginx/client-body \ + --http-proxy-temp-path=/var/cache/nginx/proxy \ + --http-fastcgi-temp-path=/var/cache/nginx/fastcgi \ + --http-scgi-temp-path=/var/cache/nginx/scgi \ + --http-uwsgi-temp-path=/var/cache/nginx/uwsgi + +NGINX_CONF_OPTS += \ + $(if $(BR2_PACKAGE_NGINX_FILE_AIO),--with-file-aio) \ + $(if $(BR2_PACKAGE_NGINX_THREADS),--with-threads) + +ifeq ($(BR2_PACKAGE_LIBATOMIC_OPS),y) +NGINX_DEPENDENCIES += libatomic_ops +NGINX_CONF_OPTS += --with-libatomic +NGINX_CONF_ENV += ngx_force_have_libatomic=yes +ifeq ($(BR2_sparc_v8)$(BR2_sparc_leon3),y) +NGINX_CFLAGS += "-DAO_NO_SPARC_V9" +endif +else +NGINX_CONF_ENV += ngx_force_have_libatomic=no +endif + +ifeq ($(BR2_PACKAGE_PCRE),y) +NGINX_DEPENDENCIES += pcre +NGINX_CONF_OPTS += --with-pcre +else +NGINX_CONF_OPTS += --without-pcre +endif + +# modules disabled or not activated because of missing dependencies: +# - google_perftools (googleperftools) +# - http_perl_module (host-perl) +# - pcre-jit (want to rebuild pcre) + +# Notes: +# * Feature/module option are *not* symetric. +# If a feature is on by default, only its --without-xxx option exists; +# if a feature is off by default, only its --with-xxx option exists. +# * The configure script fails if unknown options are passed on the command +# line. + +# misc. modules +NGINX_CONF_OPTS += \ + $(if $(BR2_PACKAGE_NGINX_SELECT_MODULE),--with-select_module,--without-select_module) \ + $(if $(BR2_PACKAGE_NGINX_POLL_MODULE),--with-poll_module,--without-poll_module) + +ifneq ($(BR2_PACKAGE_NGINX_ADD_MODULES),) +NGINX_CONF_OPTS += \ + $(addprefix --add-module=,$(call qstrip,$(BR2_PACKAGE_NGINX_ADD_MODULES))) +endif + +# http server modules +ifeq ($(BR2_PACKAGE_NGINX_HTTP),y) +ifeq ($(BR2_PACKAGE_NGINX_HTTP_CACHE),y) +NGINX_DEPENDENCIES += openssl +else +NGINX_CONF_OPTS += --without-http-cache +endif + +ifeq ($(BR2_PACKAGE_NGINX_HTTP_V2_MODULE),y) +NGINX_DEPENDENCIES += zlib +NGINX_CONF_OPTS += --with-http_v2_module +endif + +ifeq ($(BR2_PACKAGE_NGINX_HTTP_SSL_MODULE),y) +NGINX_DEPENDENCIES += openssl +NGINX_CONF_OPTS += --with-http_ssl_module +endif + +ifeq ($(BR2_PACKAGE_NGINX_HTTP_XSLT_MODULE),y) +NGINX_DEPENDENCIES += libxml2 libxslt +NGINX_CONF_OPTS += --with-http_xslt_module +endif + +ifeq ($(BR2_PACKAGE_NGINX_HTTP_IMAGE_FILTER_MODULE),y) +NGINX_DEPENDENCIES += gd jpeg libpng +NGINX_CONF_OPTS += --with-http_image_filter_module +endif + +ifeq ($(BR2_PACKAGE_NGINX_HTTP_GEOIP_MODULE),y) +NGINX_DEPENDENCIES += geoip +NGINX_CONF_OPTS += --with-http_geoip_module +endif + +ifeq ($(BR2_PACKAGE_NGINX_HTTP_GUNZIP_MODULE),y) +NGINX_DEPENDENCIES += zlib +NGINX_CONF_OPTS += --with-http_gunzip_module +endif + +ifeq ($(BR2_PACKAGE_NGINX_HTTP_GZIP_STATIC_MODULE),y) +NGINX_DEPENDENCIES += zlib +NGINX_CONF_OPTS += --with-http_gzip_static_module +endif + +ifeq ($(BR2_PACKAGE_NGINX_HTTP_SECURE_LINK_MODULE),y) +NGINX_DEPENDENCIES += openssl +NGINX_CONF_OPTS += --with-http_secure_link_module +endif + +ifeq ($(BR2_PACKAGE_NGINX_HTTP_GZIP_MODULE),y) +NGINX_DEPENDENCIES += zlib +else +NGINX_CONF_OPTS += --without-http_gzip_module +endif + +ifeq ($(BR2_PACKAGE_NGINX_HTTP_REWRITE_MODULE),y) +NGINX_DEPENDENCIES += pcre +else +NGINX_CONF_OPTS += --without-http_rewrite_module +endif + +NGINX_CONF_OPTS += \ + $(if $(BR2_PACKAGE_NGINX_HTTP_REALIP_MODULE),--with-http_realip_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_ADDITION_MODULE),--with-http_addition_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_SUB_MODULE),--with-http_sub_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_DAV_MODULE),--with-http_dav_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_FLV_MODULE),--with-http_flv_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_MP4_MODULE),--with-http_mp4_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_AUTH_REQUEST_MODULE),--with-http_auth_request_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_RANDOM_INDEX_MODULE),--with-http_random_index_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_DEGRADATION_MODULE),--with-http_degradation_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_SLICE_MODULE),--with-http_slice_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_STUB_STATUS_MODULE),--with-http_stub_status_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_CHARSET_MODULE),,--without-http_charset_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_SSI_MODULE),,--without-http_ssi_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_USERID_MODULE),,--without-http_userid_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_ACCESS_MODULE),,--without-http_access_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_AUTH_BASIC_MODULE),,--without-http_auth_basic_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_AUTOINDEX_MODULE),,--without-http_autoindex_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_GEO_MODULE),,--without-http_geo_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_MAP_MODULE),,--without-http_map_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_SPLIT_CLIENTS_MODULE),,--without-http_split_clients_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_REFERER_MODULE),,--without-http_referer_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_PROXY_MODULE),,--without-http_proxy_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_FASTCGI_MODULE),,--without-http_fastcgi_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_UWSGI_MODULE),,--without-http_uwsgi_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_SCGI_MODULE),,--without-http_scgi_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_MEMCACHED_MODULE),,--without-http_memcached_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_LIMIT_CONN_MODULE),,--without-http_limit_conn_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_LIMIT_REQ_MODULE),,--without-http_limit_req_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_EMPTY_GIF_MODULE),,--without-http_empty_gif_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_BROWSER_MODULE),,--without-http_browser_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_UPSTREAM_IP_HASH_MODULE),,--without-http_upstream_ip_hash_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_UPSTREAM_LEAST_CONN_MODULE),,--without-http_upstream_least_conn_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_UPSTREAM_RANDOM_MODULE),,--without-http_upstream_random_module) \ + $(if $(BR2_PACKAGE_NGINX_HTTP_UPSTREAM_KEEPALIVE_MODULE),,--without-http_upstream_keepalive_module) + +else # !BR2_PACKAGE_NGINX_HTTP +NGINX_CONF_OPTS += --without-http +endif # BR2_PACKAGE_NGINX_HTTP + +# mail modules +ifeq ($(BR2_PACKAGE_NGINX_MAIL),y) +NGINX_CONF_OPTS += --with-mail + +ifeq ($(BR2_PACKAGE_NGINX_MAIL_SSL_MODULE),y) +NGINX_DEPENDENCIES += openssl +NGINX_CONF_OPTS += --with-mail_ssl_module +endif + +NGINX_CONF_OPTS += \ + $(if $(BR2_PACKAGE_NGINX_MAIL_POP3_MODULE),,--without-mail_pop3_module) \ + $(if $(BR2_PACKAGE_NGINX_MAIL_IMAP_MODULE),,--without-mail_imap_module) \ + $(if $(BR2_PACKAGE_NGINX_MAIL_SMTP_MODULE),,--without-mail_smtp_module) + +endif # BR2_PACKAGE_NGINX_MAIL + +# stream modules +ifeq ($(BR2_PACKAGE_NGINX_STREAM),y) +NGINX_CONF_OPTS += --with-stream + +ifeq ($(BR2_PACKAGE_NGINX_STREAM_REALIP_MODULE),y) +NGINX_CONF_OPTS += --with-stream_realip_module +endif + +ifeq ($(BR2_PACKAGE_NGINX_STREAM_SSL_MODULE),y) +NGINX_DEPENDENCIES += openssl +NGINX_CONF_OPTS += --with-stream_ssl_module +endif + +ifeq ($(BR2_PACKAGE_NGINX_STREAM_GEOIP_MODULE),y) +NGINX_DEPENDENCIES += geoip +NGINX_CONF_OPTS += --with-stream_geoip_module +endif + +ifeq ($(BR2_PACKAGE_NGINX_STREAM_SSL_PREREAD_MODULE),y) +NGINX_CONF_OPTS += --with-stream_ssl_preread_module +endif + +NGINX_CONF_OPTS += \ + $(if $(BR2_PACKAGE_NGINX_STREAM_LIMIT_CONN_MODULE),,--without-stream_limit_conn_module) \ + $(if $(BR2_PACKAGE_NGINX_STREAM_ACCESS_MODULE),,--without-stream_access_module) \ + $(if $(BR2_PACKAGE_NGINX_STREAM_GEO_MODULE),,--without-stream_geo_module) \ + $(if $(BR2_PACKAGE_NGINX_STREAM_MAP_MODULE),,--without-stream_map_module) \ + $(if $(BR2_PACKAGE_NGINX_STREAM_SPLIT_CLIENTS_MODULE),,--without-stream_split_clients_module) \ + $(if $(BR2_PACKAGE_NGINX_STREAM_RETURN_MODULE),,--without-stream_return_module) \ + $(if $(BR2_PACKAGE_NGINX_STREAM_UPSTREAM_HASH_MODULE),,--without-stream_upstream_hash_module) \ + $(if $(BR2_PACKAGE_NGINX_STREAM_UPSTREAM_LEAST_CONN_MODULE),,--without-stream_upstream_least_conn_module) \ + $(if $(BR2_PACKAGE_NGINX_STREAM_UPSTREAM_RANDOM_MODULE),,--without-stream_upstream_random_module) \ + $(if $(BR2_PACKAGE_NGINX_STREAM_UPSTREAM_ZONE_MODULE),,--without-stream_upstream_zone_module) + +endif # BR2_PACKAGE_NGINX_STREAM + +# external modules +ifeq ($(BR2_PACKAGE_NGINX_UPLOAD),y) +NGINX_CONF_OPTS += $(addprefix --add-module=,$(NGINX_UPLOAD_DIR)) +NGINX_DEPENDENCIES += nginx-upload +endif + +ifeq ($(BR2_PACKAGE_NGINX_DAV_EXT),y) +NGINX_CONF_OPTS += --add-module=$(NGINX_DAV_EXT_DIR) +NGINX_DEPENDENCIES += nginx-dav-ext +endif + +ifeq ($(BR2_PACKAGE_NGINX_NAXSI),y) +NGINX_DEPENDENCIES += nginx-naxsi +NGINX_CONF_OPTS += --add-module=$(NGINX_NAXSI_DIR)/naxsi_src +endif + +ifeq ($(BR2_PACKAGE_NGINX_MODSECURITY),y) +NGINX_DEPENDENCIES += nginx-modsecurity +NGINX_CONF_OPTS += --add-module=$(NGINX_MODSECURITY_DIR) +endif + +# Debug logging +NGINX_CONF_OPTS += $(if $(BR2_PACKAGE_NGINX_DEBUG),--with-debug) + +define NGINX_DISABLE_WERROR + $(SED) 's/-Werror//g' -i $(@D)/auto/cc/* +endef + +NGINX_PRE_CONFIGURE_HOOKS += NGINX_DISABLE_WERROR + +define NGINX_CONFIGURE_CMDS + cd $(@D) ; $(NGINX_CONF_ENV) \ + PKG_CONFIG="$(PKG_CONFIG_HOST_BINARY)" \ + ./configure $(NGINX_CONF_OPTS) \ + --with-cc-opt="$(TARGET_CFLAGS) $(NGINX_CFLAGS)" +endef + +define NGINX_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define NGINX_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install + $(RM) $(TARGET_DIR)/usr/sbin/nginx.old + $(INSTALL) -D -m 0664 package/nginx/nginx.logrotate \ + $(TARGET_DIR)/etc/logrotate.d/nginx +endef + +define NGINX_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0644 package/nginx/nginx.service \ + $(TARGET_DIR)/usr/lib/systemd/system/nginx.service +endef + +define NGINX_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/nginx/S50nginx \ + $(TARGET_DIR)/etc/init.d/S50nginx +endef + +$(eval $(generic-package)) diff --git a/package/nginx/nginx.service b/package/nginx/nginx.service new file mode 100644 index 00000000..11ccd622 --- /dev/null +++ b/package/nginx/nginx.service @@ -0,0 +1,17 @@ +[Unit] +Description=A high performance web server and a reverse proxy server +After=syslog.target network.target + +[Service] +Type=forking +LogsDirectory=nginx +CacheDirectory=nginx +PIDFile=/run/nginx.pid +ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;' +ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;' +ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload +ExecStop=/usr/sbin/nginx -s quit +PrivateDevices=yes + +[Install] +WantedBy=multi-user.target diff --git a/package/ngircd/Config.in b/package/ngircd/Config.in new file mode 100644 index 00000000..9b3d4309 --- /dev/null +++ b/package/ngircd/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_NGIRCD + bool "ngircd" + depends on BR2_USE_MMU # fork() + help + Next Generation IRC server deamon. + + http://ngircd.barton.de diff --git a/package/ngircd/ngircd.hash b/package/ngircd/ngircd.hash new file mode 100644 index 00000000..e46e8e66 --- /dev/null +++ b/package/ngircd/ngircd.hash @@ -0,0 +1,3 @@ +# Locally calculated after checking pgp signature +sha256 55c16fd26009f6fc6a007df4efac87a02e122f680612cda1ce26e17a18d86254 ngircd-26.1.tar.xz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/ngircd/ngircd.mk b/package/ngircd/ngircd.mk new file mode 100644 index 00000000..47d8ef22 --- /dev/null +++ b/package/ngircd/ngircd.mk @@ -0,0 +1,41 @@ +################################################################################ +# +# ngircd +# +################################################################################ + +NGIRCD_VERSION = 26.1 +NGIRCD_SOURCE = ngircd-$(NGIRCD_VERSION).tar.xz +NGIRCD_SITE = https://arthur.barton.de/pub/ngircd +NGIRCD_LICENSE = GPL-2.0+ +NGIRCD_LICENSE_FILES = COPYING +NGIRCD_CPE_ID_VENDOR = barton + +ifeq ($(BR2_PACKAGE_LINUX_PAM),y) +NGIRCD_CONF_OPTS += --with-pam=$(STAGING_DIR)/usr +NGIRCD_DEPENDENCIES += linux-pam +else +NGIRCD_CONF_OPTS += --without-pam +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +NGIRCD_CONF_OPTS += --with-openssl +NGIRCD_DEPENDENCIES += host-pkgconf openssl +else +NGIRCD_CONF_OPTS += --without-openssl +ifeq ($(BR2_PACKAGE_GNUTLS),y) +NGIRCD_CONF_OPTS += --with-gnutls=$(STAGING_DIR)/usr +NGIRCD_DEPENDENCIES += gnutls +else +NGIRCD_CONF_OPTS += --without-gnutls +endif +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +NGIRCD_CONF_OPTS += --with-zlib=$(STAGING_DIR)/usr +NGIRCD_DEPENDENCIES += zlib +else +NGIRCD_CONF_OPTS += --without-zlib +endif + +$(eval $(autotools-package)) diff --git a/package/ngrep/0001-Fix-typo-in-configure-in-when-testing-for-use_pcre.patch b/package/ngrep/0001-Fix-typo-in-configure-in-when-testing-for-use_pcre.patch new file mode 100644 index 00000000..69c5c887 --- /dev/null +++ b/package/ngrep/0001-Fix-typo-in-configure-in-when-testing-for-use_pcre.patch @@ -0,0 +1,25 @@ +From b8b1e9751e1d074af0dd77c2554c1b25fd8f7abe Mon Sep 17 00:00:00 2001 +From: Romain Francoise +Date: Mon, 1 Jan 2018 18:00:34 +0100 +Subject: [PATCH] Fix typo in configure.in when testing for use_pcre + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/jpr5/ngrep/commit/b8b1e9751e1d074af0dd77c2554c1b25fd8f7abe] +--- + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.in b/configure.in +index cff37e9..06c050a 100644 +--- a/configure.in ++++ b/configure.in +@@ -146,7 +146,7 @@ AC_ARG_ENABLE(pcre, + [ use_pcre="$enableval" ], + [ use_pcre="no" ]) + +-if test use_pcre = yes; then ++if test $use_pcre = yes; then + USE_PCRE="1" + EXTRA_LIBS="$EXTRA_LIBS -lpcre" + else diff --git a/package/ngrep/0002-Check-for-libnet_init-in-configure-in.patch b/package/ngrep/0002-Check-for-libnet_init-in-configure-in.patch new file mode 100644 index 00000000..22b18ab7 --- /dev/null +++ b/package/ngrep/0002-Check-for-libnet_init-in-configure-in.patch @@ -0,0 +1,28 @@ +From 0a51c8bc62c7b49b8d67a360daa6b1957256f4f5 Mon Sep 17 00:00:00 2001 +From: Romain Francoise +Date: Mon, 1 Jan 2018 18:01:13 +0100 +Subject: [PATCH] Check for libnet_init in configure.in + +libnet_init_packet was the old libnet 1.0 function which is now long +deprecated. + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/jpr5/ngrep/commit/0a51c8bc62c7b49b8d67a360daa6b1957256f4f5] +--- + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.in b/configure.in +index 06c050a..dbef39b 100644 +--- a/configure.in ++++ b/configure.in +@@ -174,7 +174,7 @@ dnl + AC_ARG_ENABLE(tcpkill, + [ --enable-tcpkill enable connection killing support (default off)], + [ +- AC_CHECK_LIB(net, libnet_init_packet,,echo !!! error: tcpkill feature enabled but no libnet found; exit) ++ AC_CHECK_LIB(net, libnet_init,,echo !!! error: tcpkill feature enabled but no libnet found; exit) + use_tcpkill="$enableval" + ], + [ use_tcpkill="no" ]) diff --git a/package/ngrep/0003-fix-disable-tcpkill.patch b/package/ngrep/0003-fix-disable-tcpkill.patch new file mode 100644 index 00000000..1264fd7e --- /dev/null +++ b/package/ngrep/0003-fix-disable-tcpkill.patch @@ -0,0 +1,39 @@ +From e8522284ef326bd9f222e04c4a970ffafa56fba6 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 3 Nov 2018 23:23:36 +0100 +Subject: [PATCH] fix --disable-tcpkill + +If the user uses --disable-tcpkill, build can fail if libnet is not +found on the system. + +To fix this, move AC_CHECK_LIB to found libnet outside AC_ARG_ENABLE + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/jpr5/ngrep/pull/15] +--- + configure.in | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/configure.in b/configure.in +index dbef39b..7c3dd43 100644 +--- a/configure.in ++++ b/configure.in +@@ -173,13 +173,11 @@ dnl + + AC_ARG_ENABLE(tcpkill, + [ --enable-tcpkill enable connection killing support (default off)], +-[ +- AC_CHECK_LIB(net, libnet_init,,echo !!! error: tcpkill feature enabled but no libnet found; exit) +- use_tcpkill="$enableval" +-], ++[ use_tcpkill="$enableval" ], + [ use_tcpkill="no" ]) + + if test $use_tcpkill = yes; then ++ AC_CHECK_LIB(net, libnet_init,,echo !!! error: tcpkill feature enabled but no libnet found; exit) + USE_TCPKILL="1" + EXTRA_OBJS="$EXTRA_OBJS tcpkill.o" + EXTRA_DEFINES="$EXTRA_DEFINES $(libnet-config --defines)" +-- +2.17.1 + diff --git a/package/ngrep/Config.in b/package/ngrep/Config.in new file mode 100644 index 00000000..5f87f2f7 --- /dev/null +++ b/package/ngrep/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_NGREP + bool "ngrep" + select BR2_PACKAGE_LIBPCAP + select BR2_PACKAGE_PCRE + help + Network grep. + + https://github.com/jpr5/ngrep/ diff --git a/package/ngrep/ngrep.hash b/package/ngrep/ngrep.hash new file mode 100644 index 00000000..7dd13b3b --- /dev/null +++ b/package/ngrep/ngrep.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 dc4dbe20991cc36bac5e97e99475e2a1522fd88c59ee2e08f813432c04c5fff3 ngrep-1.47.tar.gz +sha256 d46e593e048e0b9fc803561ed4c283f37a2d5447e4dcfa10cad29b394c2b8b9e LICENSE diff --git a/package/ngrep/ngrep.mk b/package/ngrep/ngrep.mk new file mode 100644 index 00000000..c4750f75 --- /dev/null +++ b/package/ngrep/ngrep.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# ngrep +# +################################################################################ + +NGREP_VERSION = 1.47 +NGREP_SITE = $(call github,jpr5,ngrep,$(subst .,_,V$(NGREP_VERSION))) +NGREP_LICENSE = BSD-4-Clause-like, BSD-3-Clause (tcpkill) +NGREP_LICENSE_FILES = LICENSE +NGREP_INSTALL_STAGING = YES +# We're patching configure.in +NGREP_AUTORECONF = YES + +ifeq ($(BR2_STATIC_LIBS),y) +NGREP_CONF_ENV += LIBS=`$(STAGING_DIR)/usr/bin/pcap-config --static --additional-libs` +endif + +NGREP_CONF_OPTS = \ + --with-pcap-includes=$(STAGING_DIR)/usr/include/pcap \ + --enable-pcre \ + --disable-dropprivs \ + --disable-pcap-restart + +NGREP_DEPENDENCIES = libpcap pcre + +ifeq ($(BR2_PACKAGE_LIBNET),y) +NGREP_DEPENDENCIES += libnet +NGREP_CONF_OPTS += --enable-tcpkill +else +NGREP_CONF_OPTS += --disable-tcpkill +endif + +$(eval $(autotools-package)) diff --git a/package/nilfs-utils/0001-nilfs_cleanerd-link-dynamically.patch b/package/nilfs-utils/0001-nilfs_cleanerd-link-dynamically.patch new file mode 100644 index 00000000..ab057b29 --- /dev/null +++ b/package/nilfs-utils/0001-nilfs_cleanerd-link-dynamically.patch @@ -0,0 +1,32 @@ +From 7888f8f24ec08cdfd51929cde4e177396d7504e7 Mon Sep 17 00:00:00 2001 +From: Kurt Van Dijck +Date: Thu, 28 Dec 2017 20:22:00 +0100 +Subject: [PATCH] nilfs_cleanerd: link dynamically + +When nilfs_cleanerd does not run due to shared object problems, +nilfs2 filesystems may run out of space soon. +This logic that justified linking nilfs_cleanerd statically +does IMO not apply to embedded systems built by buildroot. +This commit therefore drops the static linking. + +Signed-off-by: Kurt Van Dijck +--- + sbin/cleanerd/Makefile.am | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/sbin/cleanerd/Makefile.am b/sbin/cleanerd/Makefile.am +index 3a5335d..06f0847 100644 +--- a/sbin/cleanerd/Makefile.am ++++ b/sbin/cleanerd/Makefile.am +@@ -9,8 +9,6 @@ nilfs_cleanerd_SOURCES = cleanerd.c cldconfig.c \ + nilfs_cleanerd_CFLAGS = -Wall + nilfs_cleanerd_CPPFLAGS = -I$(top_srcdir)/include \ + -DSYSCONFDIR=\"$(sysconfdir)\" +-# Use -static option to make nilfs_cleanerd self-contained. +-nilfs_cleanerd_LDFLAGS = -static + + dist_sysconf_DATA = nilfs_cleanerd.conf + +-- +1.8.5.rc3 + diff --git a/package/nilfs-utils/Config.in b/package/nilfs-utils/Config.in new file mode 100644 index 00000000..30d7dba7 --- /dev/null +++ b/package/nilfs-utils/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_NILFS_UTILS + bool "nilfs-utils" + depends on BR2_USE_MMU # util-linux libmount, libblkid + depends on BR2_TOOLCHAIN_HAS_THREADS # sem_open() + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + select BR2_PACKAGE_UTIL_LINUX_LIBBLKID + select BR2_PACKAGE_UTIL_LINUX_LIBMOUNT + select BR2_PACKAGE_UTIL_LINUX + help + Tools for creating and managing NILFS2 filesystems. + + https://nilfs.sourceforge.io + +comment "nilfs-utils needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/nilfs-utils/nilfs-utils.hash b/package/nilfs-utils/nilfs-utils.hash new file mode 100644 index 00000000..ad6a57d8 --- /dev/null +++ b/package/nilfs-utils/nilfs-utils.hash @@ -0,0 +1,3 @@ +# Locally calculated after checking pgp signature +sha512 3232390581f63de5ebe7b461b178a40dfbdaa4bc6aa96b218ea8182c5bf81b162a1e632a1c21d9f1e89fdba9393b4e268e001c335a99ce22f645a62ae3154783 nilfs-utils-2.2.8.tar.bz2 +sha512 4fc92d3998910acb108f81b1aee70a55a572b661a2766d0e57a55e48e2b737eea41415356cbd62593f26aec5797ab9fbb40211d7782b5834b4855ff1ce6ad5f7 COPYING diff --git a/package/nilfs-utils/nilfs-utils.mk b/package/nilfs-utils/nilfs-utils.mk new file mode 100644 index 00000000..7335d872 --- /dev/null +++ b/package/nilfs-utils/nilfs-utils.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# nilfs-utils +# +################################################################################ + +NILFS_UTILS_VERSION = 2.2.8 +NILFS_UTILS_SOURCE = nilfs-utils-$(NILFS_UTILS_VERSION).tar.bz2 +NILFS_UTILS_SITE = https://nilfs.sourceforge.io/download +NILFS_UTILS_LICENSE = GPL-2.0+ (programs), LGPL-2.1+ (libraries) +NILFS_UTILS_LICENSE_FILES = COPYING + +# need libuuid, libblkid, libmount +NILFS_UTILS_DEPENDENCIES = util-linux + +# We're patching sbin/cleanerd/Makefile.am +NILFS_UTILS_AUTORECONF = YES + +ifeq ($(BR2_PACKAGE_LIBSELINUX),y) +NILFS_UTILS_CONF_OPTS += --with-selinux +NILFS_UTILS_DEPENDENCIES += libselinux +else +NILFS_UTILS_CONF_OPTS += --without-selinux +endif + +$(eval $(autotools-package)) diff --git a/package/ninja/ninja.hash b/package/ninja/ninja.hash new file mode 100644 index 00000000..fd2c594a --- /dev/null +++ b/package/ninja/ninja.hash @@ -0,0 +1,3 @@ +# Locally generated +sha256 ce35865411f0490368a8fc383f29071de6690cbadc27704734978221f25e2bed ninja-1.10.2.tar.gz +sha256 eb7e9ab9690124c5c9f42bdc81383d886a3dede26345b6ed15bbad7caf81f7ea COPYING diff --git a/package/ninja/ninja.mk b/package/ninja/ninja.mk new file mode 100644 index 00000000..ab194102 --- /dev/null +++ b/package/ninja/ninja.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# ninja +# +################################################################################ + +NINJA_VERSION = 1.10.2 +NINJA_SITE = $(call github,ninja-build,ninja,v$(NINJA_VERSION)) +NINJA_LICENSE = Apache-2.0 +NINJA_LICENSE_FILES = COPYING + +define HOST_NINJA_INSTALL_CMDS + $(INSTALL) -m 0755 -D $(@D)/ninja $(HOST_DIR)/bin/ninja +endef + +$(eval $(host-cmake-package)) diff --git a/package/nload/Config.in b/package/nload/Config.in new file mode 100644 index 00000000..c938d8ea --- /dev/null +++ b/package/nload/Config.in @@ -0,0 +1,15 @@ +comment "nload needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + +config BR2_PACKAGE_NLOAD + bool "nload" + depends on BR2_INSTALL_LIBSTDCPP + select BR2_PACKAGE_NCURSES + help + nload is a console application which monitors network traffic + and bandwidth usage in real time. It visualizes the in- and + outgoing traffic using two graphs and provides additional info + like total amount of transfered data and min/max network + usage. + + http://www.roland-riegel.de/nload/ diff --git a/package/nload/nload.hash b/package/nload/nload.hash new file mode 100644 index 00000000..f5b8e58f --- /dev/null +++ b/package/nload/nload.hash @@ -0,0 +1,5 @@ +# From https://sourceforge.net/projects/nload/files/nload/0.7.4/ +md5 3c733c528f244ca5a4f76bf185729c39 nload-0.7.4.tar.gz +sha1 bb0a168c93c588ad4fd5e3a653b3620b79ada1e8 nload-0.7.4.tar.gz +# Locally computed +sha256 67f82e045cf7acfef853ea0f426575a8359161a0a325e19f02b529a87c4b6c34 COPYING diff --git a/package/nload/nload.mk b/package/nload/nload.mk new file mode 100644 index 00000000..80d42a15 --- /dev/null +++ b/package/nload/nload.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# nload +# +################################################################################ + +NLOAD_VERSION = 0.7.4 +NLOAD_SITE = http://www.roland-riegel.de/nload +NLOAD_DEPENDENCIES = ncurses +NLOAD_LICENSE = GPL-2.0+ +NLOAD_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/nmap/0001-libdnet-wrapper-configure.patch b/package/nmap/0001-libdnet-wrapper-configure.patch new file mode 100644 index 00000000..a85242ad --- /dev/null +++ b/package/nmap/0001-libdnet-wrapper-configure.patch @@ -0,0 +1,11 @@ +libdnet: always build a static library + +Signed-off-by: "Yann E. MORIN" + +diff --git a/libdnet-stripped/configure.gnu b/libdnet-stripped/configure.gnu +--- /dev/null ++++ b/libdnet-stripped/configure.gnu +@@ -0,0 +1,3 @@ ++#!/bin/sh ++ ++exec "${0%.gnu}" "${@}" --enable-static --disable-shared diff --git a/package/nmap/0002-ncat-unix-socket.patch b/package/nmap/0002-ncat-unix-socket.patch new file mode 100644 index 00000000..b6484ebe --- /dev/null +++ b/package/nmap/0002-ncat-unix-socket.patch @@ -0,0 +1,30 @@ +ChangeLog: + +o [Ncat][GH#2154] Ncat no longer crashes when used with Unix domain sockets. + +Backported from: r38121 + +Signed-off-by: Alexey Neyman + +Index: ncat/ncat_main.c +=================================================================== +--- a/ncat/ncat_main.c (revision 38120) ++++ b/ncat/ncat_main.c (revision 38121) +@@ -846,7 +846,7 @@ + targetaddrs->addr.un.sun_family = AF_UNIX; + strncpy(targetaddrs->addr.un.sun_path, argv[optind], sizeof(targetaddrs->addr.un.sun_path)); + targetaddrs->addrlen = SUN_LEN(&targetaddrs->addr.un); +- o.target = argv[optind]; ++ o.sslservername = o.target = argv[optind]; + optind++; + } else + #endif +@@ -865,7 +865,7 @@ + targetaddrs->addr.vm.svm_cid = long_cid; + + targetaddrs->addrlen = sizeof(targetaddrs->addr.vm); +- o.target = argv[optind]; ++ o.sslservername = o.target = argv[optind]; + optind++; + } + } else diff --git a/package/nmap/Config.in b/package/nmap/Config.in new file mode 100644 index 00000000..51dd3423 --- /dev/null +++ b/package/nmap/Config.in @@ -0,0 +1,60 @@ +config BR2_PACKAGE_NMAP + bool "nmap" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_LIBLINEAR + select BR2_PACKAGE_LIBPCAP + select BR2_PACKAGE_NMAP_NMAP \ + if !BR2_PACKAGE_NMAP_NCAT && !BR2_PACKAGE_NMAP_NPING && !BR2_PACKAGE_NMAP_NDIFF + help + Nmap ("Network Mapper") is a free and open source (license) + utility for network discovery and security auditing. + + http://nmap.org + +if BR2_PACKAGE_NMAP + +config BR2_PACKAGE_NMAP_NCAT + bool "install ncat" + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + Ncat is a feature-packed networking utility which reads and + writes data across networks from the command line. Ncat was + written for the Nmap Project as a much-improved + reimplementation of the venerable Netcat. + + If symlink to "nc" is installed if neither netcat or + netcat-openbsd is selected. + +comment "a symlink from ncat to 'nc' will be installed" + depends on BR2_PACKAGE_NMAP_NCAT + depends on !BR2_PACKAGE_NETCAT + depends on !BR2_PACKAGE_NETCAT_OPENBSD + +config BR2_PACKAGE_NMAP_NDIFF + bool "install ndiff" + # ndiff only works with python2.x + depends on BR2_PACKAGE_PYTHON + help + This option installs the 'ndiff' tool. + +comment "ndiff needs Python 2.x" + depends on !BR2_PACKAGE_PYTHON + +config BR2_PACKAGE_NMAP_NMAP + bool "install nmap" + select BR2_PACKAGE_PCRE + help + This option installs 'nmap' itself. + +config BR2_PACKAGE_NMAP_NPING + bool "install nping" + help + This option installs the 'nping' tool. + +endif + +comment "nmap-nmap needs a toolchain w/ C++, threads" + depends on BR2_USE_MMU + depends on !(BR2_INSTALL_LIBSTDCPP && BR2_TOOLCHAIN_HAS_THREADS) diff --git a/package/nmap/nmap.hash b/package/nmap/nmap.hash new file mode 100644 index 00000000..8f69bbf6 --- /dev/null +++ b/package/nmap/nmap.hash @@ -0,0 +1,5 @@ +# From https://nmap.org/dist/sigs/nmap-7.91.tar.bz2.digest.txt (lowercase) +sha256 18cc4b5070511c51eb243cdd2b0b30ff9b2c4dc4544c6312f75ce3a67a593300 nmap-7.91.tar.bz2 + +# Locally calculated +sha256 8254a9bc733f3312c6dcfe0d5a129c29e96ecb8b33408c652a8c7beb2e25b471 LICENSE diff --git a/package/nmap/nmap.mk b/package/nmap/nmap.mk new file mode 100644 index 00000000..13414a56 --- /dev/null +++ b/package/nmap/nmap.mk @@ -0,0 +1,89 @@ +################################################################################ +# +# nmap +# +################################################################################ + +NMAP_VERSION = 7.91 +NMAP_SITE = https://nmap.org/dist +NMAP_SOURCE = nmap-$(NMAP_VERSION).tar.bz2 +NMAP_DEPENDENCIES = liblinear libpcap +NMAP_CONF_OPTS = --without-liblua --without-zenmap \ + --with-libdnet=included +NMAP_LICENSE = nmap license +NMAP_LICENSE_FILES = LICENSE +NMAP_CPE_ID_VENDOR = nmap +NMAP_SELINUX_MODULES = netutils + +# needed by libpcap +NMAP_LIBS_FOR_STATIC_LINK += `$(STAGING_DIR)/usr/bin/pcap-config --static --additional-libs` + +ifeq ($(BR2_STATIC_LIBS),y) +NMAP_CONF_ENV += LIBS="$(NMAP_LIBS_FOR_STATIC_LINK)" +endif + +# for 0001-libdnet-wrapper-configure.patch +define NMAP_WRAPPER_EXEC + chmod +x $(@D)/libdnet-stripped/configure.gnu +endef +NMAP_POST_PATCH_HOOKS += NMAP_WRAPPER_EXEC + +ifeq ($(BR2_PACKAGE_LIBSSH2),y) +NMAP_CONF_OPTS += --with-libssh2="$(STAGING_DIR)/usr" +NMAP_DEPENDENCIES += libssh2 +NMAP_LIBS_FOR_STATIC_LINK += `$(PKG_CONFIG_HOST_BINARY) --libs libssh2` +else +NMAP_CONF_OPTS += --without-libssh2 +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +NMAP_CONF_OPTS += --with-openssl="$(STAGING_DIR)/usr" +NMAP_DEPENDENCIES += host-pkgconf openssl +NMAP_LIBS_FOR_STATIC_LINK += `$(PKG_CONFIG_HOST_BINARY) --libs openssl` +else +NMAP_CONF_OPTS += --without-openssl +endif + +NMAP_INSTALL_TARGET_OPTS = DESTDIR=$(TARGET_DIR) + +ifeq ($(BR2_PACKAGE_NMAP_NCAT),y) +NMAP_CONF_OPTS += --with-ncat +NMAP_MAKE_OPTS += build-ncat +NMAP_INSTALL_TARGET_OPTS += install-ncat +else +NMAP_CONF_OPTS += --without-ncat +endif + +ifeq ($(BR2_PACKAGE_NMAP_NDIFF),y) +NMAP_DEPENDENCIES += python +NMAP_CONF_OPTS += --with-ndiff +NMAP_MAKE_OPTS += build-ndiff +NMAP_INSTALL_TARGET_OPTS += install-ndiff +else +NMAP_CONF_OPTS += --without-ndiff +endif + +ifeq ($(BR2_PACKAGE_NMAP_NMAP),y) +NMAP_DEPENDENCIES += pcre +NMAP_CONF_OPTS += --with-libpcre="$(STAGING_DIR)/usr" +NMAP_MAKE_OPTS += nmap +NMAP_INSTALL_TARGET_OPTS += install-nmap +endif + +ifeq ($(BR2_PACKAGE_NMAP_NPING),y) +NMAP_CONF_OPTS += --with-nping +NMAP_MAKE_OPTS += build-nping +NMAP_INSTALL_TARGET_OPTS += install-nping +else +NMAP_CONF_OPTS += --without-nping +endif + +# Add a symlink to "nc" if none of the competing netcats is selected +ifeq ($(BR2_PACKAGE_NMAP_NCAT):$(BR2_PACKAGE_NETCAT)$(BR2_PACKAGE_NETCAT_OPENBSD),y:) +define NMAP_INSTALL_NCAT_SYMLINK + ln -fs ncat $(TARGET_DIR)/usr/bin/nc +endef +NMAP_POST_INSTALL_TARGET_HOOKS += NMAP_INSTALL_NCAT_SYMLINK +endif + +$(eval $(autotools-package)) diff --git a/package/nmon/Config.in b/package/nmon/Config.in new file mode 100644 index 00000000..574ced3b --- /dev/null +++ b/package/nmon/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_NMON + bool "nmon" + depends on BR2_TOOLCHAIN_USES_GLIBC # fstab.h + select BR2_PACKAGE_NCURSES + help + Nmon is short for Nigel's performance Monitor for Linux + + http://nmon.sourceforge.net/pmwiki.php + +comment "nmon needs a glibc toolchain" + depends on !BR2_TOOLCHAIN_USES_GLIBC diff --git a/package/nmon/nmon.hash b/package/nmon/nmon.hash new file mode 100644 index 00000000..fd3f09c6 --- /dev/null +++ b/package/nmon/nmon.hash @@ -0,0 +1,5 @@ +# From https://sourceforge.net/projects/nmon/files/ +md5 df67f07ea4006c6204acff586beada81 lmon16m.c +sha1 68cd02be19036a287fe352823db93223e73a9411 lmon16m.c +# Locally computed +sha256 2bed4d45fdfdf1d1387ec91e139c04975d5f838e3e0d53c0fe2d803a707e5fc1 lmon16m.c diff --git a/package/nmon/nmon.mk b/package/nmon/nmon.mk new file mode 100644 index 00000000..8b39748c --- /dev/null +++ b/package/nmon/nmon.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# nmon +# +################################################################################ + +NMON_VERSION = 16m +NMON_SITE = https://sourceforge.net/projects/nmon/files +NMON_SOURCE = lmon$(NMON_VERSION).c +NMON_LICENSE = GPL-3.0+ +NMON_LICENSE_FILES = $(NMON_SOURCE) +NMON_DEPENDENCIES = ncurses +NMON_CFLAGS = $(TARGET_CFLAGS) -D JFS -D GETUSER -D LARGEMEM -D DEBIAN + +define NMON_EXTRACT_CMDS + cp $(NMON_DL_DIR)/$(NMON_SOURCE) $(@D) +endef + +define NMON_BUILD_CMDS + $(TARGET_CC) $(NMON_CFLAGS) $(TARGET_LDFLAGS) -o $(@D)/nmon \ + $(@D)/$(NMON_SOURCE) -lncurses -lm +endef + +define NMON_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/nmon $(TARGET_DIR)/usr/bin/ +endef + +$(eval $(generic-package)) diff --git a/package/nodejs/0001-check-if-uclibc-has-backtrace-support.patch b/package/nodejs/0001-check-if-uclibc-has-backtrace-support.patch new file mode 100644 index 00000000..079bbb43 --- /dev/null +++ b/package/nodejs/0001-check-if-uclibc-has-backtrace-support.patch @@ -0,0 +1,26 @@ +From 7c69553d7275bbcaa88fada8ccd0d2d9f787e1ad Mon Sep 17 00:00:00 2001 +From: Martin Bark +Date: Sat, 4 Mar 2017 20:41:40 +0000 +Subject: [PATCH] check if uclibc has backtrace support + +Signed-off-by: Martin Bark +--- + deps/v8/src/base/debug/stack_trace_posix.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/deps/v8/src/base/debug/stack_trace_posix.cc b/deps/v8/src/base/debug/stack_trace_posix.cc +index 87c0a73..d2c182a 100644 +--- a/deps/v8/src/base/debug/stack_trace_posix.cc ++++ b/deps/v8/src/base/debug/stack_trace_posix.cc +@@ -25,7 +25,7 @@ + #include + #include + +-#if V8_LIBC_GLIBC || V8_LIBC_BSD || V8_LIBC_UCLIBC || V8_OS_SOLARIS ++#if V8_LIBC_GLIBC || V8_LIBC_BSD || ( V8_LIBC_UCLIBC && __UCLIBC_HAS_BACKTRACE__ ) || V8_OS_SOLARIS + #define HAVE_EXECINFO_H 1 + #endif + +-- +2.7.4 + diff --git a/package/nodejs/Config.in b/package/nodejs/Config.in new file mode 100644 index 00000000..ba3fde88 --- /dev/null +++ b/package/nodejs/Config.in @@ -0,0 +1,81 @@ +config BR2_PACKAGE_NODEJS_ARCH_SUPPORTS + bool + # On ARM, at least ARMv6+ with VFPv2+ is needed + default y if BR2_arm && !BR2_ARM_CPU_ARMV4 && !BR2_ARM_CPU_ARMV5 && BR2_ARM_CPU_HAS_VFPV2 + default y if BR2_mipsel && !BR2_MIPS_SOFT_FLOAT + default y if BR2_aarch64 || BR2_i386 || BR2_x86_64 + # libuv + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + +comment "nodejs needs a toolchain w/ C++, dynamic library, NPTL, gcc >= 4.9, wchar" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_NODEJS_ARCH_SUPPORTS + depends on !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS_NPTL || \ + !BR2_HOST_GCC_AT_LEAST_4_9 || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || !BR2_USE_WCHAR + +config BR2_PACKAGE_NODEJS + bool "nodejs" + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # libuv + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_NODEJS_ARCH_SUPPORTS + depends on BR2_HOST_GCC_AT_LEAST_4_9 + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + depends on BR2_USE_WCHAR + # uses fork() + depends on BR2_USE_MMU + # uses dlopen(). On ARMv5, we could technically support static + # linking, but that's too much of a corner case to support it. + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_C_ARES + select BR2_PACKAGE_LIBUV + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_NGHTTP2 + help + Event-driven I/O server-side JavaScript environment based on + V8. + + http://nodejs.org/ + +if BR2_PACKAGE_NODEJS + +config BR2_PACKAGE_NODEJS_NPM + bool "NPM for the target" + select BR2_PACKAGE_OPENSSL + help + NPM is the package manager for the Node JavaScript platform. + Note that enabling NPM on the target also selects OpenSSL + for the target. + + http://www.npmjs.org + + Note that NPM is always built for the buildroot host. + +config BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL + string "Additional modules" + help + List of space-separated nodejs modules to install via npm. + See https://npmjs.org/ to find modules and 'npm help install' + for available installation methods. For repeatable builds, + download and save tgz files or clone git repos for the + components you care about. + + Example: + serialport uglify-js@1.3.4 /my/module/mymodule.tgz \ + git://github.com/someuser/somemodule.git#v1.2 + + This would install the serialport module (at the newest + version), the uglify-js module at 1.3.4, a module from a + filesystem path, and a module from a git repository. + +config BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL_DEPS + string "Additional module dependencies" + help + List of space-separated buildroot recipes which must be + built before your npms can be installed. For example, if in + 'Additional modules' you specified 'node-curl' (see: + https://github.com/jiangmiao/node-curl), you could then + specify 'libcurl' here, to ensure that buildroot builds the + libcurl package, and does so before building your node + modules. + +endif diff --git a/package/nodejs/nodejs.hash b/package/nodejs/nodejs.hash new file mode 100644 index 00000000..7d11a8d1 --- /dev/null +++ b/package/nodejs/nodejs.hash @@ -0,0 +1,5 @@ +# From https://nodejs.org/dist/v12.22.4/SHASUMS256.txt +sha256 44cd4eab131e5282fc923e9e720d983a0b44c12e4aa4f6c3598dc97ae1e4cd4c node-v12.22.4.tar.xz + +# Hash for license file +sha256 221417a7ca275112a5ac54639b36ee3c5184e74631ea1e1b01b701293b655190 LICENSE diff --git a/package/nodejs/nodejs.mk b/package/nodejs/nodejs.mk new file mode 100644 index 00000000..08d2f6d7 --- /dev/null +++ b/package/nodejs/nodejs.mk @@ -0,0 +1,250 @@ +################################################################################ +# +# nodejs +# +################################################################################ + +NODEJS_VERSION = 12.22.4 +NODEJS_SOURCE = node-v$(NODEJS_VERSION).tar.xz +NODEJS_SITE = http://nodejs.org/dist/v$(NODEJS_VERSION) +NODEJS_DEPENDENCIES = host-python host-nodejs c-ares \ + libuv zlib nghttp2 \ + $(call qstrip,$(BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL_DEPS)) +HOST_NODEJS_DEPENDENCIES = host-icu host-libopenssl host-python host-zlib +NODEJS_INSTALL_STAGING = YES +NODEJS_LICENSE = MIT (core code); MIT, Apache and BSD family licenses (Bundled components) +NODEJS_LICENSE_FILES = LICENSE +NODEJS_CPE_ID_VENDOR = nodejs +NODEJS_CPE_ID_PRODUCT = node.js + +NODEJS_CONF_OPTS = \ + --without-snapshot \ + --shared-zlib \ + --shared-cares \ + --shared-libuv \ + --shared-nghttp2 \ + --without-dtrace \ + --without-etw \ + --cross-compiling \ + --dest-os=linux + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +NODEJS_DEPENDENCIES += openssl +NODEJS_CONF_OPTS += --shared-openssl +else +NODEJS_CONF_OPTS += --without-ssl +endif + +ifeq ($(BR2_PACKAGE_ICU),y) +NODEJS_DEPENDENCIES += icu +NODEJS_CONF_OPTS += --with-intl=system-icu +else +NODEJS_CONF_OPTS += --with-intl=none +endif + +ifneq ($(BR2_PACKAGE_NODEJS_NPM),y) +NODEJS_CONF_OPTS += --without-npm +endif + +# nodejs build system is based on python, but only support python-2.6 or +# python-2.7. So, we have to enforce PYTHON interpreter to be python2. +define HOST_NODEJS_CONFIGURE_CMDS + # The build system directly calls python. Work around this by forcing python2 + # into PATH. See https://github.com/nodejs/node/issues/2735 + mkdir -p $(@D)/bin + ln -sf $(HOST_DIR)/bin/python2 $(@D)/bin/python + + (cd $(@D); \ + $(HOST_CONFIGURE_OPTS) \ + PATH=$(@D)/bin:$(BR_PATH) \ + PYTHON=$(HOST_DIR)/bin/python2 \ + $(HOST_DIR)/bin/python2 ./configure \ + --prefix=$(HOST_DIR) \ + --without-snapshot \ + --without-dtrace \ + --without-etw \ + --shared-openssl \ + --shared-openssl-includes=$(HOST_DIR)/include/openssl \ + --shared-openssl-libpath=$(HOST_DIR)/lib \ + --shared-zlib \ + --no-cross-compiling \ + --with-intl=system-icu \ + ) +endef + +NODEJS_HOST_TOOLS_V8 = \ + torque \ + gen-regexp-special-case \ + bytecode_builtins_list_generator +NODEJS_HOST_TOOLS_NODE = mkcodecache +NODEJS_HOST_TOOLS = $(NODEJS_HOST_TOOLS_V8) $(NODEJS_HOST_TOOLS_NODE) + +HOST_NODEJS_CXXFLAGS = $(HOST_CXXFLAGS) -DU_DISABLE_RENAMING=1 + +define HOST_NODEJS_BUILD_CMDS + $(HOST_MAKE_ENV) PYTHON=$(HOST_DIR)/bin/python2 \ + $(MAKE) -C $(@D) \ + $(HOST_CONFIGURE_OPTS) \ + CXXFLAGS="$(HOST_NODEJS_CXXFLAGS)" \ + LDFLAGS.host="$(HOST_LDFLAGS)" \ + NO_LOAD=cctest.target.mk \ + PATH=$(@D)/bin:$(BR_PATH) +endef + +define HOST_NODEJS_INSTALL_CMDS + $(HOST_MAKE_ENV) PYTHON=$(HOST_DIR)/bin/python2 \ + $(MAKE) -C $(@D) install \ + $(HOST_CONFIGURE_OPTS) \ + CXXFLAGS="$(HOST_NODEJS_CXXFLAGS)" \ + LDFLAGS.host="$(HOST_LDFLAGS)" \ + NO_LOAD=cctest.target.mk \ + PATH=$(@D)/bin:$(BR_PATH) + + $(foreach f,$(NODEJS_HOST_TOOLS), \ + $(INSTALL) -m755 -D $(@D)/out/Release/$(f) $(HOST_DIR)/bin/$(f) + ) +endef + +ifeq ($(BR2_i386),y) +NODEJS_CPU = ia32 +else ifeq ($(BR2_x86_64),y) +NODEJS_CPU = x64 +else ifeq ($(BR2_mips),y) +NODEJS_CPU = mips +else ifeq ($(BR2_mipsel),y) +NODEJS_CPU = mipsel +else ifeq ($(BR2_arm),y) +NODEJS_CPU = arm +# V8 needs to know what floating point ABI the target is using. +NODEJS_ARM_FP = $(GCC_TARGET_FLOAT_ABI) +# it also wants to know which FPU to use, but only has support for +# vfp, vfpv3, vfpv3-d16 and neon. +ifeq ($(BR2_ARM_FPU_VFPV2),y) +NODEJS_ARM_FPU = vfp +# vfpv4 is a superset of vfpv3 +else ifeq ($(BR2_ARM_FPU_VFPV3)$(BR2_ARM_FPU_VFPV4),y) +NODEJS_ARM_FPU = vfpv3 +# vfpv4-d16 is a superset of vfpv3-d16 +else ifeq ($(BR2_ARM_FPU_VFPV3D16)$(BR2_ARM_FPU_VFPV4D16),y) +NODEJS_ARM_FPU = vfpv3-d16 +else ifeq ($(BR2_ARM_FPU_NEON),y) +NODEJS_ARM_FPU = neon +endif +else ifeq ($(BR2_aarch64),y) +NODEJS_CPU = arm64 +endif + +# MIPS architecture specific options +ifeq ($(BR2_mips)$(BR2_mipsel),y) +ifeq ($(BR2_MIPS_CPU_MIPS32R6),y) +NODEJS_MIPS_ARCH_VARIANT = r6 +NODEJS_MIPS_FPU_MODE = fp64 +else ifeq ($(BR2_MIPS_CPU_MIPS32R2),y) +NODEJS_MIPS_ARCH_VARIANT = r2 +else ifeq ($(BR2_MIPS_CPU_MIPS32),y) +NODEJS_MIPS_ARCH_VARIANT = r1 +endif +endif + +NODEJS_LDFLAGS = $(TARGET_LDFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +NODEJS_LDFLAGS += -latomic +endif + +define NODEJS_CONFIGURE_CMDS + mkdir -p $(@D)/bin + ln -sf $(HOST_DIR)/bin/python2 $(@D)/bin/python + + (cd $(@D); \ + $(TARGET_CONFIGURE_OPTS) \ + PATH=$(@D)/bin:$(BR_PATH) \ + LDFLAGS="$(NODEJS_LDFLAGS)" \ + LD="$(TARGET_CXX)" \ + PYTHON=$(HOST_DIR)/bin/python2 \ + $(HOST_DIR)/bin/python2 ./configure \ + --prefix=/usr \ + --dest-cpu=$(NODEJS_CPU) \ + $(if $(NODEJS_ARM_FP),--with-arm-float-abi=$(NODEJS_ARM_FP)) \ + $(if $(NODEJS_ARM_FPU),--with-arm-fpu=$(NODEJS_ARM_FPU)) \ + $(if $(NODEJS_MIPS_ARCH_VARIANT),--with-mips-arch-variant=$(NODEJS_MIPS_ARCH_VARIANT)) \ + $(if $(NODEJS_MIPS_FPU_MODE),--with-mips-fpu-mode=$(NODEJS_MIPS_FPU_MODE)) \ + $(NODEJS_CONF_OPTS) \ + ) + + $(foreach f,$(NODEJS_HOST_TOOLS_V8), \ + $(SED) "s#<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)$(f)<(EXECUTABLE_SUFFIX)#$(HOST_DIR)/bin/$(f)#" \ + $(@D)/tools/v8_gypfiles/v8.gyp + ) + $(foreach f,$(NODEJS_HOST_TOOLS_NODE), \ + $(SED) "s#<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)$(f)<(EXECUTABLE_SUFFIX)#$(HOST_DIR)/bin/$(f)#" \ + -i $(@D)/node.gyp + ) +endef + +define NODEJS_BUILD_CMDS + $(TARGET_MAKE_ENV) PYTHON=$(HOST_DIR)/bin/python2 \ + $(MAKE) -C $(@D) \ + $(TARGET_CONFIGURE_OPTS) \ + NO_LOAD=cctest.target.mk \ + PATH=$(@D)/bin:$(BR_PATH) \ + LDFLAGS="$(NODEJS_LDFLAGS)" \ + LD="$(TARGET_CXX)" +endef + +# +# Build the list of modules to install. +# +NODEJS_MODULES_LIST= $(call qstrip,\ + $(BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL)) + +# Define NPM for other packages to use +NPM = $(TARGET_CONFIGURE_OPTS) \ + LDFLAGS="$(NODEJS_LDFLAGS)" \ + LD="$(TARGET_CXX)" \ + npm_config_arch=$(NODEJS_CPU) \ + npm_config_target_arch=$(NODEJS_CPU) \ + npm_config_build_from_source=true \ + npm_config_nodedir=$(BUILD_DIR)/nodejs-$(NODEJS_VERSION) \ + npm_config_prefix=$(TARGET_DIR)/usr \ + npm_config_cache=$(BUILD_DIR)/.npm-cache \ + $(HOST_DIR)/bin/npm + +# +# We can only call NPM if there's something to install. +# +ifneq ($(NODEJS_MODULES_LIST),) +define NODEJS_INSTALL_MODULES + # If you're having trouble with module installation, adding -d to the + # npm install call below and setting npm_config_rollback=false can both + # help in diagnosing the problem. + $(NPM) install -g $(NODEJS_MODULES_LIST) +endef +endif + +define NODEJS_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) PYTHON=$(HOST_DIR)/bin/python2 \ + $(MAKE) -C $(@D) install \ + DESTDIR=$(STAGING_DIR) \ + $(TARGET_CONFIGURE_OPTS) \ + NO_LOAD=cctest.target.mk \ + PATH=$(@D)/bin:$(BR_PATH) \ + LDFLAGS="$(NODEJS_LDFLAGS)" \ + LD="$(TARGET_CXX)" +endef + +define NODEJS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) PYTHON=$(HOST_DIR)/bin/python2 \ + $(MAKE) -C $(@D) install \ + DESTDIR=$(TARGET_DIR) \ + $(TARGET_CONFIGURE_OPTS) \ + NO_LOAD=cctest.target.mk \ + PATH=$(@D)/bin:$(BR_PATH) \ + LDFLAGS="$(NODEJS_LDFLAGS)" \ + LD="$(TARGET_CXX)" + $(NODEJS_INSTALL_MODULES) +endef + +# node.js configure is a Python script and does not use autotools +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/nodm/Config.in b/package/nodm/Config.in new file mode 100644 index 00000000..2dd6f1e1 --- /dev/null +++ b/package/nodm/Config.in @@ -0,0 +1,23 @@ +config BR2_PACKAGE_NODM + bool "nodm" + depends on BR2_PACKAGE_XORG7 + depends on (BR2_ENABLE_LOCALE && BR2_USE_WCHAR) # linux-pam + depends on !BR2_STATIC_LIBS # linux-pam + depends on BR2_USE_MMU # linux-pam + select BR2_PACKAGE_XLIB_LIBX11 + select BR2_PACKAGE_LINUX_PAM + help + nodm is a minimal display manager that simply logs in + as a given user and starts an X session, without asking + for username or password. + + For those cases where automatic login is needed (and + does not imply a security issue), nodm is simple to setup, + lightweight, and it should do exactly the right thing. + + https://github.com/spanezz/nodm/ + +comment "nodm needs a toolchain w/ wchar, locale, dynamic library" + depends on BR2_PACKAGE_XORG7 + depends on !(BR2_ENABLE_LOCALE && BR2_USE_WCHAR) \ + || BR2_STATIC_LIBS diff --git a/package/nodm/S90nodm b/package/nodm/S90nodm new file mode 100644 index 00000000..a966e839 --- /dev/null +++ b/package/nodm/S90nodm @@ -0,0 +1,49 @@ +#!/bin/sh +# +# Starts nodm +# + +NODM_FIRST_VT=7 +NODM_XSESSION=/etc/X11/Xsession +NODM_OPTIONS= +NODM_X_OPTIONS="-nolisten tcp" +NODM_USER=root +NODM_MIN_SESSION_TIME=60 +NODM_X_TIMEOUT=300 + +[ -r /etc/default/nodm ] && . /etc/default/nodm + +export NODM_XSESSION NODM_X_OPTIONS NODM_USER NODM_MIN_SESSION_TIME NODM_FIRST_VT NODM_X_TIMEOUT + +start() { + printf "Starting nodm: " + start-stop-daemon -S -q -p /var/run/nodm.pid --exec /usr/sbin/nodm -b -m -S -- ${NODM_OPTIONS} + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +stop() { + printf "Stopping nodm: " + start-stop-daemon -K -q -p /var/run/nodm.pid + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +restart() { + stop + sleep 1 + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/nodm/nodm.hash b/package/nodm/nodm.hash new file mode 100644 index 00000000..79f16af7 --- /dev/null +++ b/package/nodm/nodm.hash @@ -0,0 +1,3 @@ +# locally calculated +sha256 ef11667ae82846801a9633df36c20f632cc03319bb1da35f062ac0f950771273 nodm-0.13.tar.gz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/nodm/nodm.mk b/package/nodm/nodm.mk new file mode 100644 index 00000000..a5afd53b --- /dev/null +++ b/package/nodm/nodm.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# nodm +# +################################################################################ + +NODM_VERSION = 0.13 +NODM_SITE = $(call github,spanezz,nodm,$(NODM_VERSION)) +NODM_LICENSE = GPL-2.0+ +NODM_LICENSE_FILES = COPYING +NODM_AUTORECONF = YES + +NODM_DEPENDENCIES = xlib_libX11 linux-pam + +# help2man doesn't work when cross compiling +define NODM_DISABLE_HELP2MAN + $(SED) 's/help2man/true/' $(@D)/Makefile.am +endef + +NODM_POST_PATCH_HOOKS += NODM_DISABLE_HELP2MAN + +define NODM_INSTALL_PAM + $(INSTALL) -D -m 0644 package/nodm/nodm.pam \ + $(TARGET_DIR)/etc/pam.d/nodm +endef + +NODM_POST_INSTALL_TARGET_HOOKS += NODM_INSTALL_PAM + +define NODM_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/nodm/S90nodm \ + $(TARGET_DIR)/etc/init.d/S90nodm +endef + +$(eval $(autotools-package)) diff --git a/package/nodm/nodm.pam b/package/nodm/nodm.pam new file mode 100644 index 00000000..f2cf4321 --- /dev/null +++ b/package/nodm/nodm.pam @@ -0,0 +1,14 @@ +# Log service and allow promiscuously +# +auth required pam_warn.so +auth required pam_unix.so + +account required pam_warn.so +account required pam_permit.so + +password required pam_warn.so +password required pam_permit.so + +session required pam_warn.so +session required pam_permit.so +session required pam_env.so diff --git a/package/noip/Config.in b/package/noip/Config.in new file mode 100644 index 00000000..aea5deb9 --- /dev/null +++ b/package/noip/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_NOIP + bool "noip" + depends on BR2_USE_MMU # fork() + help + Dynamic DNS update client for no-ip.com + + http://www.no-ip.com/downloads.php diff --git a/package/noip/noip.hash b/package/noip/noip.hash new file mode 100644 index 00000000..79b6309d --- /dev/null +++ b/package/noip/noip.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 82b9bafab96a0c53b21aaef688bf70b3572e26217b5e2072bdb09da3c4a6f593 noip-duc-linux.tar.gz +sha256 5aaf7e9e1790c6e372b6c5dec8c6c4b60504414a8c56f64c3071d281d3c251fa COPYING diff --git a/package/noip/noip.mk b/package/noip/noip.mk new file mode 100644 index 00000000..b7fcc84e --- /dev/null +++ b/package/noip/noip.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# noip +# +################################################################################ + +NOIP_VERSION = 2.1.9 +NOIP_SITE = http://www.no-ip.com/client/linux +NOIP_SOURCE = noip-duc-linux.tar.gz +NOIP_LICENSE = GPL-2.0+ +NOIP_LICENSE_FILES = COPYING + +define NOIP_BUILD_CMDS + $(SED) "/^#define CONFIG_FILENAME/ s/PREFIX//" $(@D)/noip2.c + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) CC="$(TARGET_CC)" \ + CFLAGS="$(TARGET_CFLAGS)" PREFIX=/usr CONFDIR=/etc +endef + +define NOIP_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/noip2 $(TARGET_DIR)/usr/sbin/noip2 +endef + +$(eval $(generic-package)) diff --git a/package/norm/0001-protolib-drop-linux-version-check.patch b/package/norm/0001-protolib-drop-linux-version-check.patch new file mode 100644 index 00000000..7852a30a --- /dev/null +++ b/package/norm/0001-protolib-drop-linux-version-check.patch @@ -0,0 +1,38 @@ +The char * to unsigned char * change happened for the libnetfilter_queue +1.0.0 release, not the linux headers. +So drop the linux headers version check since it causes more harm than +good by trying the old API when the toolchain uses old linux headers +with a new-enough libnetfilter_queue. + +Signed-off-by: Gustavo Zacarias + +diff -Nura norm-1.5r6.orig/protolib/src/linux/linuxDetour.cpp norm-1.5r6/protolib/src/linux/linuxDetour.cpp +--- norm-1.5r6.orig/protolib/src/linux/linuxDetour.cpp 2016-03-31 10:17:20.674745597 -0300 ++++ norm-1.5r6/protolib/src/linux/linuxDetour.cpp 2016-03-31 10:36:58.923084395 -0300 +@@ -16,8 +16,6 @@ + #include // for ETH_P_IP + #include // for ARPHRD_ETHER + +-#include // for LINUX_VERSION_CODE +- + /** NOTES: + * + * 1) This newer implementation of LinuxDetour uses netfilter_queue +@@ -591,17 +589,7 @@ + + // Finally record packet length and cache pointer to IP packet data + +- // A change to the nfq_get_payload() prototype seemed to kick in around Linux header files +- // version 3.6? (This will probably need to be fine tuned for the right version threshold.) +- +-#define LINUX_VERSION_MAJOR (LINUX_VERSION_CODE/65536) +-#define LINUX_VERSION_MINOR ((LINUX_VERSION_CODE - (LINUX_VERSION_MAJOR*65536)) / 256) +- +-#if ((LINUX_VERSION_MAJOR > 3) || ((LINUX_VERSION_MAJOR == 3) && (LINUX_VERSION_MINOR > 5))) + linuxDetour->nfq_pkt_len = nfq_get_payload(nfqData, (unsigned char**)(&linuxDetour->nfq_pkt_data)); +-#else +- linuxDetour->nfq_pkt_len = nfq_get_payload(nfqData, &linuxDetour->nfq_pkt_data); +-#endif // + return 0; + } // end LinuxDetour::NfqCallback() + diff --git a/package/norm/0002-Use-print-as-function-call-for-Python3-compatibility.patch b/package/norm/0002-Use-print-as-function-call-for-Python3-compatibility.patch new file mode 100644 index 00000000..945a9df4 --- /dev/null +++ b/package/norm/0002-Use-print-as-function-call-for-Python3-compatibility.patch @@ -0,0 +1,29 @@ +From 8c02c2cbc6f07ddaef23e6bf2f6b9a269ed85ff4 Mon Sep 17 00:00:00 2001 +From: Titouan Christophe +Date: Tue, 4 Feb 2020 11:59:07 +0100 +Subject: [PATCH] Use print as function call for Python3 compatibility + +A similar patch has already been applied upstream, in commit +ada15125a1cbb3b1718d6eef78512a36ed327fcc, which will therefore be +available in the next norm release + +Signed-off-by: Titouan Christophe +--- + wscript | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/wscript b/wscript +index 8428899..0fdae96 100644 +--- a/wscript ++++ b/wscript +@@ -32,7 +32,7 @@ for line in vfile.readlines(): + if "#define" == line[0] and "VERSION" == line[1]: + VERSION = line[2].strip('"') + if VERSION is None: +- print "Warning: NORM VERSION not found!?" ++ print("Warning: NORM VERSION not found!?") + + # So you don't need to do ./waf configure if you are just using the defaults + waflib.Configure.autoconfig = True +-- +2.24.1 diff --git a/package/norm/0003-Fix-mixed-tabs-spaces-in-protolib-wscript.patch b/package/norm/0003-Fix-mixed-tabs-spaces-in-protolib-wscript.patch new file mode 100644 index 00000000..e99f292d --- /dev/null +++ b/package/norm/0003-Fix-mixed-tabs-spaces-in-protolib-wscript.patch @@ -0,0 +1,41 @@ +From 0ff75628845d3c86974c31b50ecd60c0b0144c6d Mon Sep 17 00:00:00 2001 +From: Titouan Christophe +Date: Tue, 4 Feb 2020 13:44:27 +0100 +Subject: [PATCH] Fix mixed tabs/spaces in protolib wscript + +This fixes the following error when using waf in Python3: + TabError: inconsistent use of tabs and spaces in indentation + +The upstream file has since diverged, but with similar issues. +[Upstream status: https://github.com/USNavalResearchLaboratory/protolib/pull/6] + +Signed-off-by: Titouan Christophe +--- + protolib/wscript | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/protolib/wscript b/protolib/wscript +index 155a660..97dda93 100644 +--- a/protolib/wscript ++++ b/protolib/wscript +@@ -120,7 +120,7 @@ def configure(ctx): + # Compiler-specific flags + if ctx.options.debug: + #ctx.env.DEFINES_BUILD_PROTOLIB += ['PROTO_DEBUG', 'DEBUG', '_DEBUG'] +- ctx.env.DEFINES_BUILD_PROTOLIB += ['PROTO_DEBUG', 'DEBUG'] ++ ctx.env.DEFINES_BUILD_PROTOLIB += ['PROTO_DEBUG', 'DEBUG'] + else: + ctx.env.DEFINES_BUILD_PROTOLIB += ['NDEBUG', "PROTO_DEBUG"] + +@@ -139,7 +139,7 @@ def configure(ctx): + ctx.env.CFLAGS += ['/Od', '/RTC1', '/ZI'] + else: + ctx.env.CXXFLAGS += ['/Ox', '/DNDEBUG'] +- #ctx.env.CXXFLAGS += ['/Ox', '/DNDEBUG', '/DWINVER=0x0501'] ++ #ctx.env.CXXFLAGS += ['/Ox', '/DNDEBUG', '/DWINVER=0x0501'] + ctx.env.CFLAGS + + def build(ctx): +-- +2.24.1 + diff --git a/package/norm/Config.in b/package/norm/Config.in new file mode 100644 index 00000000..49446334 --- /dev/null +++ b/package/norm/Config.in @@ -0,0 +1,15 @@ +comment "norm needs a toolchain w/ C++, threads, dynamic library" + depends on !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS || \ + !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_NORM + bool "norm" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + help + The NORM protocol is designed to provide end-to-end reliable + transport of bulk data objects or streams over generic IP + multicast routing and forwarding services. + + http://www.nrl.navy.mil/itd/ncs/products/norm diff --git a/package/norm/norm.hash b/package/norm/norm.hash new file mode 100644 index 00000000..ab0930e8 --- /dev/null +++ b/package/norm/norm.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 4480a6ea53fb7ce45b4bc2061d18fbfd46ee9990fc2ed9a9dc303ce4d87888a6 src-norm-with-protolib-1.5.8.tgz +sha256 ba4b7e49b0163d6839830e3f47505696c6eaac77ccd93531831dc837b2160608 LICENSE.TXT diff --git a/package/norm/norm.mk b/package/norm/norm.mk new file mode 100644 index 00000000..2f9fc7b6 --- /dev/null +++ b/package/norm/norm.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# norm +# +################################################################################ + +NORM_VERSION = 1.5.8 +NORM_SITE = https://github.com/USNavalResearchLaboratory/norm/releases/download/v$(NORM_VERSION) +NORM_SOURCE = src-norm-with-protolib-$(NORM_VERSION).tgz +NORM_INSTALL_STAGING = YES +NORM_LICENSE = NRL License +NORM_LICENSE_FILES = LICENSE.TXT + +ifeq ($(BR2_PACKAGE_LIBNETFILTER_QUEUE),y) +NORM_DEPENDENCIES += libnetfilter_queue +endif + +# install target doesn't install headers unfortunately... +define NORM_INSTALL_HEADERS + cp -f $(@D)/include/norm* $(STAGING_DIR)/usr/include +endef +NORM_POST_INSTALL_STAGING_HOOKS += NORM_INSTALL_HEADERS + +$(eval $(waf-package)) diff --git a/package/nss-mdns/Config.in b/package/nss-mdns/Config.in new file mode 100644 index 00000000..017e8003 --- /dev/null +++ b/package/nss-mdns/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_NSS_MDNS + bool "nss-mdns" + # libdaemon->avahi uses fork() + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_USES_GLIBC + depends on BR2_PACKAGE_AVAHI_DAEMON + help + nss-mdns is a plugin for the GNU Name Service Switch (NSS) + functionality of the GNU C Library (glibc) providing host + name resolution via Multicast DNS (aka Zeroconf, aka Apple + Rendezvous, aka Apple Bonjour), effectively allowing name + resolution by common Unix/Linux programs in the ad-hoc + mDNS domain .local. + + https://github.com/lathiat/nss-mdns + +comment "nss-mdns needs a glibc toolchain" + depends on BR2_USE_MMU && BR2_PACKAGE_AVAHI_DAEMON + depends on !BR2_TOOLCHAIN_USES_GLIBC diff --git a/package/nss-mdns/nss-mdns.hash b/package/nss-mdns/nss-mdns.hash new file mode 100644 index 00000000..9bcec084 --- /dev/null +++ b/package/nss-mdns/nss-mdns.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 a2094101b735cade45048764ea594bdae2bfa9399837f3c852a5b264416e9c8c nss-mdns-0.14.1.tar.gz +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 LICENSE diff --git a/package/nss-mdns/nss-mdns.mk b/package/nss-mdns/nss-mdns.mk new file mode 100644 index 00000000..77ab6c1e --- /dev/null +++ b/package/nss-mdns/nss-mdns.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# nss-mdns +# +################################################################################ + +NSS_MDNS_VERSION = 0.14.1 +NSS_MDNS_SITE = \ + https://github.com/lathiat/nss-mdns/releases/download/v$(NSS_MDNS_VERSION) +NSS_MDNS_LICENSE = LGPL-2.1+ +NSS_MDNS_LICENSE_FILES = LICENSE +NSS_MDNS_CONF_OPTS = --disable-tests + +# add mdns4_minimal / mdns around the dns provider if missing +define NSS_MDNS_INSTALL_CONFIG + $(SED) '/^hosts:/ {/mdns4/! s/dns/mdns4_minimal [NOTFOUND=return] dns mdns4/}' \ + $(TARGET_DIR)/etc/nsswitch.conf +endef + +NSS_MDNS_TARGET_FINALIZE_HOOKS += NSS_MDNS_INSTALL_CONFIG + +$(eval $(autotools-package)) diff --git a/package/nss-myhostname/Config.in b/package/nss-myhostname/Config.in new file mode 100644 index 00000000..bdd9830e --- /dev/null +++ b/package/nss-myhostname/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_NSS_MYHOSTNAME + bool "nss-myhostname" + depends on BR2_TOOLCHAIN_USES_GLIBC + depends on !BR2_PACKAGE_SYSTEMD_MYHOSTNAME + help + Name Service Switch module for resolving the local hostname + + http://0pointer.de/lennart/projects/nss-myhostname + +comment "nss-myhostname needs a glibc toolchain" + depends on !BR2_TOOLCHAIN_USES_GLIBC + depends on !BR2_PACKAGE_SYSTEMD_MYHOSTNAME diff --git a/package/nss-myhostname/nss-myhostname.hash b/package/nss-myhostname/nss-myhostname.hash new file mode 100644 index 00000000..dfa531c9 --- /dev/null +++ b/package/nss-myhostname/nss-myhostname.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 2ba744ea8d578d1c57c85884e94a3042ee17843a5294434d3a7f6c4d67e7caf2 nss-myhostname-0.3.tar.gz +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 LICENSE diff --git a/package/nss-myhostname/nss-myhostname.mk b/package/nss-myhostname/nss-myhostname.mk new file mode 100644 index 00000000..08683a54 --- /dev/null +++ b/package/nss-myhostname/nss-myhostname.mk @@ -0,0 +1,20 @@ +################################################################################ +# +## nss-myhostname +# +################################################################################ + +NSS_MYHOSTNAME_VERSION = 0.3 +NSS_MYHOSTNAME_SITE = http://0pointer.de/lennart/projects/nss-myhostname +NSS_MYHOSTNAME_LICENSE = LGPL-2.1+ +NSS_MYHOSTNAME_LICENSE_FILES = LICENSE + +# add myhostname after files if missing +define MYHOSTNAME_SET_NSSWITCH + $(SED) '/^hosts:/ {/myhostname/! s/files/files myhostname/}' \ + $(TARGET_DIR)/etc/nsswitch.conf +endef + +NSS_MYHOSTNAME_TARGET_FINALIZE_HOOKS += MYHOSTNAME_SET_NSSWITCH + +$(eval $(autotools-package)) diff --git a/package/nss-pam-ldapd/Config.in b/package/nss-pam-ldapd/Config.in new file mode 100644 index 00000000..233f2136 --- /dev/null +++ b/package/nss-pam-ldapd/Config.in @@ -0,0 +1,25 @@ +config BR2_PACKAGE_NSS_PAM_LDAPD + bool "nss-pam-ldapd" + depends on BR2_TOOLCHAIN_USES_GLIBC + select BR2_PACKAGE_OPENLDAP + help + Name Service Switch (NSS) module that allows your LDAP + server to provide user account, group, host name, alias, + netgroup, and basically any other information that you would + normally get from /etc flat files or NIS. It also provides a + Pluggable Authentication Module (PAM) to do authentication + to an LDAP server. + + http://arthurdejong.org/nss-pam-ldapd/ + +if BR2_PACKAGE_NSS_PAM_LDAPD + +config BR2_PACKAGE_NSS_PAM_LDAPD_UTILITIES + bool "nss-pam-ldapd utilities" + help + Build/Install command-line utilities. + +endif + +comment "nss-pam-ldapd needs a glibc toolchain" + depends on !BR2_TOOLCHAIN_USES_GLIBC diff --git a/package/nss-pam-ldapd/S45nslcd b/package/nss-pam-ldapd/S45nslcd new file mode 100644 index 00000000..cd3e4d0f --- /dev/null +++ b/package/nss-pam-ldapd/S45nslcd @@ -0,0 +1,25 @@ +#!/bin/sh + +NAME="nslcd" +DAEMON="/usr/sbin/${NAME}" + +case "$1" in +start) + echo -n "Starting ${NAME}: " + start-stop-daemon -S -x ${DAEMON} + [ $? -eq 0 ] && echo "OK" || echo "FAIL" + ;; +stop) + echo -n "Stopping ${NAME}: " + start-stop-daemon -K -x ${DAEMON} + [ $? -eq 0 ] && echo "OK" || echo "FAIL" + ;; +restart|reload) + $0 stop + $0 start + ;; +*) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac + diff --git a/package/nss-pam-ldapd/nslcd.service b/package/nss-pam-ldapd/nslcd.service new file mode 100644 index 00000000..5a000a8e --- /dev/null +++ b/package/nss-pam-ldapd/nslcd.service @@ -0,0 +1,11 @@ +[Unit] +Description=Naming services LDAP client daemon. +After=syslog.target network.target + +[Service] +Type=forking +PIDFile=/run/nslcd/nslcd.pid +ExecStart=/usr/sbin/nslcd + +[Install] +WantedBy=multi-user.target diff --git a/package/nss-pam-ldapd/nss-pam-ldapd.hash b/package/nss-pam-ldapd/nss-pam-ldapd.hash new file mode 100644 index 00000000..47864c4f --- /dev/null +++ b/package/nss-pam-ldapd/nss-pam-ldapd.hash @@ -0,0 +1,5 @@ +# From https://arthurdejong.org/nss-pam-ldapd/nss-pam-ldapd-0.9.11.tar.gz.md5 +md5 91df9d46a548aa7aa95d0e7c672215d0 nss-pam-ldapd-0.9.8.tar.gz +# Locally computed: +sha256 d0d71be06d1a90940b7566ce00cef1a465aae7171d5d062785506a83411ecab6 nss-pam-ldapd-0.9.11.tar.gz +sha256 5df07007198989c622f5d41de8d703e7bef3d0e79d62e24332ee739a452af62a COPYING diff --git a/package/nss-pam-ldapd/nss-pam-ldapd.mk b/package/nss-pam-ldapd/nss-pam-ldapd.mk new file mode 100644 index 00000000..223a9eea --- /dev/null +++ b/package/nss-pam-ldapd/nss-pam-ldapd.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# nss-pam-ldapd +# +################################################################################ + +NSS_PAM_LDAPD_VERSION = 0.9.11 +NSS_PAM_LDAPD_SITE = http://arthurdejong.org/nss-pam-ldapd +NSS_PAM_LDAPD_LICENSE = LGPL-2.1+ +NSS_PAM_LDAPD_LICENSE_FILES = COPYING +NSS_PAM_LDAPD_INSTALL_STAGING = YES + +NSS_PAM_LDAPD_CONF_OPTS = --disable-sasl +NSS_PAM_LDAPD_DEPENDENCIES = openldap + +ifeq ($(BR2_PACKAGE_NSS_PAM_LDAPD_UTILITIES),y) +NSS_PAM_LDAPD_CONF_OPTS += --enable-utils +else +NSS_PAM_LDAPD_CONF_OPTS += --disable-utils +endif + +ifeq ($(BR2_PACKAGE_LINUX_PAM),y) +NSS_PAM_LDAPD_CONF_OPTS += --enable-pam +NSS_PAM_LDAPD_DEPENDENCIES += linux-pam +else +NSS_PAM_LDAPD_CONF_OPTS += --disable-pam +endif + +define NSS_PAM_LDAPD_INSTALL_INIT_SYSTEMD + $(INSTALL) -m 644 -D package/nss-pam-ldapd/nslcd.service \ + $(TARGET_DIR)/usr/lib/systemd/system/nslcd.service +endef + +define NSS_PAM_LDAPD_INSTALL_INIT_SYSV + $(INSTALL) -m 755 -D package/nss-pam-ldapd/S45nslcd \ + $(TARGET_DIR)/etc/init.d/S45nslcd +endef + +define NSS_PAM_LDAPD_USERS + nslcd -1 nslcd -1 * - - - nslcd user +endef + +$(eval $(autotools-package)) diff --git a/package/ntfs-3g/0001-Fixed-reporting-an-error-when-failed-to-build-the-mo.patch b/package/ntfs-3g/0001-Fixed-reporting-an-error-when-failed-to-build-the-mo.patch new file mode 100644 index 00000000..9ba8aae5 --- /dev/null +++ b/package/ntfs-3g/0001-Fixed-reporting-an-error-when-failed-to-build-the-mo.patch @@ -0,0 +1,72 @@ +From 85c1634a26faa572d3c558d4cf8aaaca5202d4e9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jean-Pierre=20Andr=C3=A9?= +Date: Wed, 19 Dec 2018 15:57:50 +0100 +Subject: [PATCH] Fixed reporting an error when failed to build the mountpoint + +The size check was inefficient because getcwd() uses an unsigned int +argument. + +Fixes CVE-2019-9755: An integer underflow issue exists in ntfs-3g 2017.3.23. +A local attacker could potentially exploit this by running /bin/ntfs-3g with +specially crafted arguments from a specially crafted directory to cause a +heap buffer overflow, resulting in a crash or the ability to execute +arbitrary code. In installations where /bin/ntfs-3g is a setuid-root +binary, this could lead to a local escalation of privileges. + +Signed-off-by: Peter Korsgaard +--- + src/lowntfs-3g.c | 6 +++++- + src/ntfs-3g.c | 6 +++++- + 2 files changed, 10 insertions(+), 2 deletions(-) + +diff --git a/src/lowntfs-3g.c b/src/lowntfs-3g.c +index 993867fa..0660439b 100644 +--- a/src/lowntfs-3g.c ++++ b/src/lowntfs-3g.c +@@ -4411,7 +4411,8 @@ int main(int argc, char *argv[]) + else { + ctx->abs_mnt_point = (char*)ntfs_malloc(PATH_MAX); + if (ctx->abs_mnt_point) { +- if (getcwd(ctx->abs_mnt_point, ++ if ((strlen(opts.mnt_point) < PATH_MAX) ++ && getcwd(ctx->abs_mnt_point, + PATH_MAX - strlen(opts.mnt_point) - 1)) { + strcat(ctx->abs_mnt_point, "/"); + strcat(ctx->abs_mnt_point, opts.mnt_point); +@@ -4419,6 +4420,9 @@ int main(int argc, char *argv[]) + /* Solaris also wants the absolute mount point */ + opts.mnt_point = ctx->abs_mnt_point; + #endif /* defined(__sun) && defined (__SVR4) */ ++ } else { ++ free(ctx->abs_mnt_point); ++ ctx->abs_mnt_point = (char*)NULL; + } + } + } +diff --git a/src/ntfs-3g.c b/src/ntfs-3g.c +index 6ce89fef..4e0912ae 100644 +--- a/src/ntfs-3g.c ++++ b/src/ntfs-3g.c +@@ -4148,7 +4148,8 @@ int main(int argc, char *argv[]) + else { + ctx->abs_mnt_point = (char*)ntfs_malloc(PATH_MAX); + if (ctx->abs_mnt_point) { +- if (getcwd(ctx->abs_mnt_point, ++ if ((strlen(opts.mnt_point) < PATH_MAX) ++ && getcwd(ctx->abs_mnt_point, + PATH_MAX - strlen(opts.mnt_point) - 1)) { + strcat(ctx->abs_mnt_point, "/"); + strcat(ctx->abs_mnt_point, opts.mnt_point); +@@ -4156,6 +4157,9 @@ int main(int argc, char *argv[]) + /* Solaris also wants the absolute mount point */ + opts.mnt_point = ctx->abs_mnt_point; + #endif /* defined(__sun) && defined (__SVR4) */ ++ } else { ++ free(ctx->abs_mnt_point); ++ ctx->abs_mnt_point = (char*)NULL; + } + } + } +-- +2.20.1 + diff --git a/package/ntfs-3g/Config.in b/package/ntfs-3g/Config.in new file mode 100644 index 00000000..b9f7eafc --- /dev/null +++ b/package/ntfs-3g/Config.in @@ -0,0 +1,36 @@ +config BR2_PACKAGE_NTFS_3G + bool "ntfs-3g" + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU + depends on !BR2_STATIC_LIBS + help + The NTFS-3G driver is an open source, freely available + read/write NTFS driver for Linux, FreeBSD, Mac OS X, NetBSD, + and Haiku. It provides safe and fast handling of the Windows + XP, Windows Server 2003, Windows 2000 and Windows Vista file + systems. Most POSIX file system operations are supported, with + the exception of full file ownership and access right support. + + http://www.ntfs-3g.org/ + +if BR2_PACKAGE_NTFS_3G + +config BR2_PACKAGE_NTFS_3G_ENCRYPTED + bool "encrypted volumes" + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgcrypt + select BR2_PACKAGE_GNUTLS + select BR2_PACKAGE_LIBGCRYPT + help + Enable support for NTFS encrypted volumes. + +config BR2_PACKAGE_NTFS_3G_NTFSPROGS + bool "ntfsprogs" + help + Install NTFS utilities. + +endif + +comment "ntfs-3g needs a toolchain w/ wchar, threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/ntfs-3g/ntfs-3g.hash b/package/ntfs-3g/ntfs-3g.hash new file mode 100644 index 00000000..63c999f2 --- /dev/null +++ b/package/ntfs-3g/ntfs-3g.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 3e5a021d7b761261836dcb305370af299793eedbded731df3d6943802e1262d5 ntfs-3g_ntfsprogs-2017.3.23.tgz +sha256 231f7edcc7352d7734a96eef0b8030f77982678c516876fcb81e25b32d68564c COPYING +sha256 d7bf9d064ac3e5840f9dd02422b7eeec4f1fd03f37fadbd043602be5e882304f COPYING.LIB diff --git a/package/ntfs-3g/ntfs-3g.mk b/package/ntfs-3g/ntfs-3g.mk new file mode 100644 index 00000000..1a388af7 --- /dev/null +++ b/package/ntfs-3g/ntfs-3g.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# ntfs-3g +# +################################################################################ + +NTFS_3G_VERSION = 2017.3.23 +NTFS_3G_SOURCE = ntfs-3g_ntfsprogs-$(NTFS_3G_VERSION).tgz +NTFS_3G_SITE = http://tuxera.com/opensource +NTFS_3G_CONF_OPTS = --disable-ldconfig +NTFS_3G_INSTALL_STAGING = YES +NTFS_3G_DEPENDENCIES = host-pkgconf +NTFS_3G_LICENSE = GPL-2.0+, LGPL-2.0+ +NTFS_3G_LICENSE_FILES = COPYING COPYING.LIB +NTFS_3G_CPE_ID_VENDOR = tuxera + +# 0001-Fixed-reporting-an-error-when-failed-to-build-the-mo.patch +NTFS_3G_IGNORE_CVES += CVE-2019-9755 + +ifeq ($(BR2_PACKAGE_LIBFUSE),y) +NTFS_3G_CONF_OPTS += --with-fuse=external +NTFS_3G_DEPENDENCIES += libfuse +endif + +ifeq ($(BR2_PACKAGE_UTIL_LINUX_LIBUUID),y) +NTFS_3G_DEPENDENCIES += util-linux +endif + +ifeq ($(BR2_PACKAGE_NTFS_3G_ENCRYPTED),y) +NTFS_3G_CONF_ENV += LIBGCRYPT_CONFIG=$(STAGING_DIR)/usr/bin/libgcrypt-config +NTFS_3G_CONF_OPTS += --enable-crypto +NTFS_3G_DEPENDENCIES += gnutls libgcrypt +endif + +ifneq ($(BR2_PACKAGE_NTFS_3G_NTFSPROGS),y) +NTFS_3G_CONF_OPTS += --disable-ntfsprogs +endif + +$(eval $(autotools-package)) diff --git a/package/ntp/0001-nano.patch b/package/ntp/0001-nano.patch new file mode 100644 index 00000000..bce34782 --- /dev/null +++ b/package/ntp/0001-nano.patch @@ -0,0 +1,28 @@ +Fixes issues with glibc header files, see +http://bugs.gentoo.org/show_bug.cgi?id=270483 + +Signed-off-by: Gustavo Zacarias + +Rebase to apply cleanly. + +Signed-off-by: Danomi Manchego + + +diff -purN a/include/ntp_syscall.h b/include/ntp_syscall.h +--- a/include/ntp_syscall.h 2015-02-11 08:42:37.794576469 -0500 ++++ b/include/ntp_syscall.h 2015-02-11 08:43:03.216957279 -0500 +@@ -10,6 +10,14 @@ + # include + #endif + ++#if defined(ADJ_NANO) && !defined(MOD_NANO) ++#define MOD_NANO ADJ_NANO ++#endif ++ ++#if defined(ADJ_TAI) && !defined(MOD_TAI) ++#define MOD_TAI ADJ_TAI ++#endif ++ + #ifndef NTP_SYSCALLS_LIBC + # ifdef NTP_SYSCALLS_STD + # define ntp_adjtime(t) syscall(SYS_ntp_adjtime, (t)) diff --git a/package/ntp/0002-ntp-syscalls-fallback.patch b/package/ntp/0002-ntp-syscalls-fallback.patch new file mode 100644 index 00000000..535fc93d --- /dev/null +++ b/package/ntp/0002-ntp-syscalls-fallback.patch @@ -0,0 +1,27 @@ +inline ntp syscalls fallback + +Reference: + https://bugs.ntp.org/show_bug.cgi?id=769 + +Signed-off-by: James Knight +--- + configure.ac | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/configure.ac b/configure.ac +--- a/configure.ac ++++ b/configure.ac +@@ -1523,11 +1523,11 @@ AC_CACHE_CHECK( + [ntp_cv_var_ntp_syscalls], + [ + ntp_cv_var_ntp_syscalls=no +- case "$ac_cv_func_ntp_adjtime$ac_cv_func_ntp_gettime$ac_cv_func___adjtimex" in ++ case "$ac_cv_func_ntp_adjtime$ac_cv_func_ntp_gettime$ac_cv_func___adjtimex$ac_cv_func_adjtimex" in + yesyes*) + ntp_cv_var_ntp_syscalls=libc + ;; +- *yes) ++ *yesyes | *yesno | *noyes) + ntp_cv_var_ntp_syscalls=inline + ;; + *) diff --git a/package/ntp/0003-override-shell.patch b/package/ntp/0003-override-shell.patch new file mode 100644 index 00000000..0161e652 --- /dev/null +++ b/package/ntp/0003-override-shell.patch @@ -0,0 +1,20 @@ +sntp/libopts/m4/libopts.m4: allow override shell with POSIX_SHELL + +Pull in fix from upstream AutoGen [1] to accept POSIX_SHELL from the +environment during the configure step. + +[1] http://git.savannah.gnu.org/cgit/autogen.git/commit/?id=db064b9a252f3ef3d8db25411ea0edb0ff8ea758 + +Signed-off-by: James Byrne + +diff --git a/sntp/libopts/m4/libopts.m4 b/sntp/libopts/m4/libopts.m4 +--- a/sntp/libopts/m4/libopts.m4 ++++ b/sntp/libopts/m4/libopts.m4 +@@ -114,6 +114,7 @@ + AC_PROG_SED + [while : + do ++ test -x "$POSIX_SHELL" && break + POSIX_SHELL=`which bash` + test -x "$POSIX_SHELL" && break + POSIX_SHELL=`which dash` diff --git a/package/ntp/Config.in b/package/ntp/Config.in new file mode 100644 index 00000000..97d933b5 --- /dev/null +++ b/package/ntp/Config.in @@ -0,0 +1,101 @@ +config BR2_PACKAGE_NTP + bool "ntp" + select BR2_PACKAGE_LIBEVENT + help + Network Time Protocol suite/programs. + Provides things like ntpd, ntpdate, ntpq, etc... + + http://www.ntp.org/ + +if BR2_PACKAGE_NTP + +config BR2_PACKAGE_NTP_SNTP + bool "sntp" + help + Simple network time protocol program (a replacement + for the ntpdate tool) + + A script is installed as S48sntp which will retrieve and + step the time if there is a large difference before ntpd + takes over the necessary slew adjustments in S49ntp. + +config BR2_PACKAGE_NTP_NTP_KEYGEN + bool "ntp-keygen" + help + Create a NTP host key + +config BR2_PACKAGE_NTP_NTP_SHM_CLK + bool "SHM clock support" + help + Compile ntp with support for a SHM clock attached through + shared memory. + +config BR2_PACKAGE_NTP_NTP_WAIT + bool "ntp-wait" + depends on BR2_PACKAGE_PERL + help + ntp-wait waits until the locally running ntpd is in state 4 + (synchronized). This could be useful at boot time, to delay + the boot sequence until after "ntpd -g" has set the time. + +config BR2_PACKAGE_NTP_NTPD + bool "ntpd" + default y + help + ntpd is the time synchronization daemon keeping your local + system date and time in sync and optionally serving time and + date information on the network via the NTP protocol. + +config BR2_PACKAGE_NTP_NTPD_ATOM_PPS + bool "PPS support" + depends on BR2_PACKAGE_NTP_NTPD + select BR2_PACKAGE_PPS_TOOLS + help + Compile ntpd with the ability to use an ATOM PPS source. + +config BR2_PACKAGE_NTP_NTPDATE + bool "ntpdate" + help + The ntpdate utility program is used to set the local date + and time from an NTP server given as an argument. + +config BR2_PACKAGE_NTP_NTPDC + bool "ntpdc" + help + The ntpdc utility program is used to query an NTP daemon about + its current state and to request changes in that state. + +config BR2_PACKAGE_NTP_NTPQ + bool "ntpq" + help + The ntpq utility program is used to query NTP servers + requesting information about current state and/or changes in + that state. + +config BR2_PACKAGE_NTP_NTPSNMPD + bool "ntpsnmpd" + depends on BR2_USE_MMU # netsnmp fork() + select BR2_PACKAGE_NETSNMP + help + Install ntpsnmpd NTP SNMP MIB agent. + +config BR2_PACKAGE_NTP_NTPTIME + bool "ntptime" + help + The ntptime utility program is used to read and set kernel + time variables. + +config BR2_PACKAGE_NTP_NTPTRACE + bool "ntptrace" + depends on BR2_PACKAGE_PERL + help + ntptrace is a perl script that uses the ntpq utility program + to follow the chain of NTP servers from a given host back to + the primary time source + +config BR2_PACKAGE_NTP_TICKADJ + bool "tickadj" + help + set time-related kernel variables + +endif diff --git a/package/ntp/S48sntp b/package/ntp/S48sntp new file mode 100644 index 00000000..96d8d507 --- /dev/null +++ b/package/ntp/S48sntp @@ -0,0 +1,55 @@ +#!/bin/sh + +DAEMON="sntp" +# sntp uses all the IPs resolved for the hostname (i.e. pool.ntp.org has 4). +# It will try each until they either all timeout or time has been set. Thus +# default to only providing one NTP pool host. +SNTP_SERVERS="pool.ntp.org" +# Step if time delta is greater then 128ms, otherwise slew +SNTP_ARGS="-Ss -M 128" +SNTP_KEY_CACHE="/tmp/kod" + +# shellcheck source=/dev/null +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON" + +start() { + printf 'Starting %s: ' "$DAEMON" + # Create key cache file to prevents warning that file is missing + touch $SNTP_KEY_CACHE + # shellcheck disable=SC2086 # we need the word splitting + /usr/bin/$DAEMON $SNTP_ARGS -K $SNTP_KEY_CACHE $SNTP_SERVERS + # sntp behavior + # - Does not background + # - Does not infinitely block + # - Time-out w/o network = ~2 sec + # - Time-out w/ network = ~5sec * # of servers + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + echo "Nothing to do, $DAEMON is not a daemon." +} + +restart() { + stop + sleep 1 + start +} + +reload() { + echo "Nothing to do, $DAEMON does not support reload." +} + +case "$1" in + start|stop|restart|reload) + "$1";; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/ntp/S49ntp b/package/ntp/S49ntp new file mode 100644 index 00000000..66c5f70a --- /dev/null +++ b/package/ntp/S49ntp @@ -0,0 +1,56 @@ +#!/bin/sh +# +# Starts Network Time Protocol daemon +# + +DAEMON="ntpd" +PIDFILE="/var/run/$DAEMON.pid" + +NTPD_ARGS="-g" + +# shellcheck source=/dev/null +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON" + +start() { + printf 'Starting %s: ' "$DAEMON" + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon -S -q -p "$PIDFILE" -x "/usr/sbin/$DAEMON" \ + -- $NTPD_ARGS -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + rm -f "$PIDFILE" + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +case "$1" in + start|stop|restart) + "$1";; + reload) + # Restart, since there is no true "reload" feature. + restart;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/ntp/ntp.hash b/package/ntp/ntp.hash new file mode 100644 index 00000000..3c2f6a95 --- /dev/null +++ b/package/ntp/ntp.hash @@ -0,0 +1,5 @@ +# From http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/ntp-4.2.8p15.tar.gz.md5 +md5 e1e6b23d2fc75cced41801dbcd6c2561 ntp-4.2.8p15.tar.gz +# Calculated based on the hash above +sha256 f65840deab68614d5d7ceb2d0bb9304ff70dcdedd09abb79754a87536b849c19 ntp-4.2.8p15.tar.gz +sha256 957e6a13445cc61ab1ca3dc80d8c269cf9b0a6d9eaec20f9f39639b0b3e66ee8 COPYRIGHT diff --git a/package/ntp/ntp.mk b/package/ntp/ntp.mk new file mode 100644 index 00000000..0dc75a7a --- /dev/null +++ b/package/ntp/ntp.mk @@ -0,0 +1,124 @@ +################################################################################ +# +# ntp +# +################################################################################ + +NTP_VERSION_MAJOR = 4.2 +NTP_VERSION_MINOR = 8 +NTP_VERSION_POINT = 15 +NTP_VERSION = $(NTP_VERSION_MAJOR).$(NTP_VERSION_MINOR)p$(NTP_VERSION_POINT) +NTP_SITE = https://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-$(NTP_VERSION_MAJOR) +NTP_DEPENDENCIES = host-pkgconf libevent +NTP_LICENSE = NTP +NTP_LICENSE_FILES = COPYRIGHT +NTP_CPE_ID_VENDOR = ntp +NTP_CPE_ID_VERSION = $(NTP_VERSION_MAJOR).$(NTP_VERSION_MINOR) +NTP_CPE_ID_UPDATE = p$(NTP_VERSION_POINT) +NTP_CONF_ENV = ac_cv_lib_md5_MD5Init=no POSIX_SHELL=/bin/sh +NTP_CONF_OPTS = \ + --with-shared \ + --program-transform-name=s,,, \ + --disable-tickadj \ + --disable-debugging \ + --with-yielding-select=yes \ + --disable-local-libevent + +# 0002-ntp-syscalls-fallback.patch +NTP_AUTORECONF = YES + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +NTP_CONF_OPTS += --with-crypto --enable-openssl-random +NTP_DEPENDENCIES += openssl +else +NTP_CONF_OPTS += --without-crypto --disable-openssl-random +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_SSP),y) +NTP_CONF_OPTS += --with-hardenfile=linux +else +NTP_CONF_OPTS += --with-hardenfile=default +endif + +ifeq ($(BR2_PACKAGE_LIBCAP),y) +NTP_CONF_OPTS += --enable-linuxcaps +NTP_DEPENDENCIES += libcap +else +NTP_CONF_OPTS += --disable-linuxcaps +endif + +ifeq ($(BR2_PACKAGE_LIBEDIT),y) +NTP_CONF_OPTS += --with-lineeditlibs=edit +NTP_DEPENDENCIES += libedit +else +NTP_CONF_OPTS += --without-lineeditlibs +endif + +ifeq ($(BR2_PACKAGE_NTP_NTPSNMPD),y) +NTP_CONF_OPTS += \ + --with-net-snmp-config=$(STAGING_DIR)/usr/bin/net-snmp-config +NTP_DEPENDENCIES += netsnmp +else +NTP_CONF_OPTS += --without-ntpsnmpd +endif + +ifeq ($(BR2_PACKAGE_NTP_NTPD_ATOM_PPS),y) +NTP_CONF_OPTS += --enable-ATOM +NTP_DEPENDENCIES += pps-tools +else +NTP_CONF_OPTS += --disable-ATOM +endif + +ifeq ($(BR2_PACKAGE_NTP_NTP_SHM_CLK),y) +NTP_CONF_OPTS += --enable-SHM +else +NTP_CONF_OPTS += --disable-SHM +endif + +ifeq ($(BR2_PACKAGE_NTP_SNTP),y) +NTP_CONF_OPTS += --with-sntp +else +NTP_CONF_OPTS += --without-sntp +endif + +NTP_INSTALL_FILES_$(BR2_PACKAGE_NTP_NTP_KEYGEN) += util/ntp-keygen +NTP_INSTALL_FILES_$(BR2_PACKAGE_NTP_NTP_WAIT) += scripts/ntp-wait/ntp-wait +NTP_INSTALL_FILES_$(BR2_PACKAGE_NTP_NTPDATE) += ntpdate/ntpdate +NTP_INSTALL_FILES_$(BR2_PACKAGE_NTP_NTPDC) += ntpdc/ntpdc +NTP_INSTALL_FILES_$(BR2_PACKAGE_NTP_NTPQ) += ntpq/ntpq +NTP_INSTALL_FILES_$(BR2_PACKAGE_NTP_NTPSNMPD) += ntpsnmpd/ntpsnmpd +NTP_INSTALL_FILES_$(BR2_PACKAGE_NTP_NTPTIME) += util/ntptime +NTP_INSTALL_FILES_$(BR2_PACKAGE_NTP_NTPTRACE) += scripts/ntptrace/ntptrace +NTP_INSTALL_FILES_$(BR2_PACKAGE_NTP_SNTP) += sntp/sntp +NTP_INSTALL_FILES_$(BR2_PACKAGE_NTP_TICKADJ) += util/tickadj + +define NTP_INSTALL_TARGET_CMDS + $(if $(BR2_PACKAGE_NTP_NTPD), install -m 755 $(@D)/ntpd/ntpd $(TARGET_DIR)/usr/sbin/ntpd) + test -z "$(NTP_INSTALL_FILES_y)" || install -m 755 $(addprefix $(@D)/,$(NTP_INSTALL_FILES_y)) $(TARGET_DIR)/usr/bin/ + $(INSTALL) -m 644 package/ntp/ntpd.etc.conf $(TARGET_DIR)/etc/ntp.conf +endef + +# This script will step the time if there is a large difference +# before ntpd takes over the necessary slew adjustments +ifeq ($(BR2_PACKAGE_NTP_SNTP),y) +define NTP_INSTALL_INIT_SYSV_SNTP + $(INSTALL) -D -m 755 package/ntp/S48sntp $(TARGET_DIR)/etc/init.d/S48sntp +endef +endif + +ifeq ($(BR2_PACKAGE_NTP_NTPD),y) +define NTP_INSTALL_INIT_SYSV_NTPD + $(INSTALL) -D -m 755 package/ntp/S49ntp $(TARGET_DIR)/etc/init.d/S49ntp +endef + +define NTP_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/ntp/ntpd.service $(TARGET_DIR)/usr/lib/systemd/system/ntpd.service +endef +endif + +define NTP_INSTALL_INIT_SYSV + $(NTP_INSTALL_INIT_SYSV_NTPD) + $(NTP_INSTALL_INIT_SYSV_SNTP) +endef + +$(eval $(autotools-package)) diff --git a/package/ntp/ntpd.etc.conf b/package/ntp/ntpd.etc.conf new file mode 100644 index 00000000..c451aa9b --- /dev/null +++ b/package/ntp/ntpd.etc.conf @@ -0,0 +1,10 @@ +server 0.pool.ntp.org iburst +server 1.pool.ntp.org iburst +server 2.pool.ntp.org iburst +server 3.pool.ntp.org iburst + +# Allow only time queries, at a limited rate, sending KoD when in excess. +# Allow all local queries (IPv4, IPv6) +restrict default nomodify nopeer noquery limited kod +restrict 127.0.0.1 +restrict [::1] diff --git a/package/ntp/ntpd.service b/package/ntp/ntpd.service new file mode 100644 index 00000000..9a0f4c6d --- /dev/null +++ b/package/ntp/ntpd.service @@ -0,0 +1,15 @@ +[Unit] +Description=Network Time Service +After=network.target + +[Service] +Type=forking +PIDFile=/run/ntpd.pid +# Turn off DNSSEC validation for hostname look-ups, since those need the +# correct time to work, but we likely won't acquire that without NTP. Let's +# break this chicken-and-egg cycle here. +Environment=SYSTEMD_NSS_RESOLVE_VALIDATE=0 +ExecStart=/usr/sbin/ntpd -g -p /run/ntpd.pid + +[Install] +WantedBy=multi-user.target diff --git a/package/numactl/0001-Do-not-stringify-SYMVER-symbols.patch b/package/numactl/0001-Do-not-stringify-SYMVER-symbols.patch new file mode 100644 index 00000000..c6981aaf --- /dev/null +++ b/package/numactl/0001-Do-not-stringify-SYMVER-symbols.patch @@ -0,0 +1,25 @@ +From f96c96af7fbf2779b15f66f03b10315a24fb4f5a Mon Sep 17 00:00:00 2001 +From: Scott McMillan +Date: Fri, 9 Oct 2020 08:56:52 -0500 +Subject: [PATCH] Do not stringify SYMVER symbols + +Upstream: f96c96af7fbf2779b15f66f03b10315a24fb4f5a +Signed-off-by: Thomas Petazzoni +--- + util.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/util.h b/util.h +index 99ada33..f2a20ac 100644 +--- a/util.h ++++ b/util.h +@@ -22,5 +22,5 @@ extern char *policy_name(int policy); + #if HAVE_ATTRIBUTE_SYMVER + #define SYMVER(a,b) __attribute__ ((symver (b))) + #else +-#define SYMVER(a,b) __asm__ (".symver " #a "," #b); ++#define SYMVER(a,b) __asm__ (".symver " a "," b); + #endif +-- +2.30.2 + diff --git a/package/numactl/Config.in b/package/numactl/Config.in new file mode 100644 index 00000000..23cf7fac --- /dev/null +++ b/package/numactl/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_NUMACTL + bool "numactl" + depends on BR2_USE_MMU # madvise() + help + numactl allows you to run your application on specific cpus + and memory nodes. It does this by supplying a NUMA memory + policy to the operating system before running your program. + + https://github.com/numactl/numactl diff --git a/package/numactl/numactl.hash b/package/numactl/numactl.hash new file mode 100644 index 00000000..802175d3 --- /dev/null +++ b/package/numactl/numactl.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 1ee27abd07ff6ba140aaf9bc6379b37825e54496e01d6f7343330cf1a4487035 numactl-2.0.14.tar.gz +sha256 e2b738b1303c088421b09933a78c1326fe43692e2c05a7c510a2eb7e7a8eb575 README.md diff --git a/package/numactl/numactl.mk b/package/numactl/numactl.mk new file mode 100644 index 00000000..3364f6c5 --- /dev/null +++ b/package/numactl/numactl.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# numactl +# +################################################################################ + +NUMACTL_VERSION = 2.0.14 +NUMACTL_SITE = $(call github,numactl,numactl,v$(NUMACTL_VERSION)) +NUMACTL_LICENSE = LGPL-2.1 (libnuma), GPL-2.0 (programs) +NUMACTL_LICENSE_FILES = README.md +NUMACTL_INSTALL_STAGING = YES +NUMACTL_AUTORECONF = YES +NUMACTL_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -fPIC" + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +NUMACTL_CONF_ENV += LDFLAGS="$(TARGET_LDFLAGS) -latomic" +endif + +$(eval $(autotools-package)) diff --git a/package/nut/0001-Allow-to-customize-path-to-gdlib-config-and-net-snmp.patch b/package/nut/0001-Allow-to-customize-path-to-gdlib-config-and-net-snmp.patch new file mode 100644 index 00000000..308dbb1a --- /dev/null +++ b/package/nut/0001-Allow-to-customize-path-to-gdlib-config-and-net-snmp.patch @@ -0,0 +1,153 @@ +From 086b5fa8fe4ba74404e92b5f838263dfcf9f173d Mon Sep 17 00:00:00 2001 +From: Jim Klimov +Date: Thu, 7 Apr 2016 03:56:51 +0200 +Subject: [PATCH] Allow to customize path to gdlib-config and net-snmp-config + programs + +[yann.morin.1998@free.fr: backport] +Signed-off-by: "Yann E. MORIN" + +--- +Backported from upstream commit 086b5fa8fe4ba74404e92b5f838263dfcf9f173d +--- + docs/configure.txt | 14 ++++++++++++++ + m4/nut_check_libgd.m4 | 29 +++++++++++++++++++++++------ + m4/nut_check_libnetsnmp.m4 | 25 +++++++++++++++++++++---- + 3 files changed, 58 insertions(+), 10 deletions(-) + +diff --git a/docs/configure.txt b/docs/configure.txt +index aff82c1..b3b542a 100644 +--- a/docs/configure.txt ++++ b/docs/configure.txt +@@ -23,6 +23,13 @@ Note that you need to install the libusb development package or files. + Build and install the SNMP drivers (default: auto-detect) + Note that you need to install libsnmp development package or files. + ++ --with-net-snmp-config ++ ++In addition to the `--with-snmp` option above, this one allows to provide ++a custom program name (in `PATH`) or complete pathname to `net-snmp-config`. ++This may be needed on build systems which support multiple architectures, ++or in cases where your distribution names this program differently. ++ + --with-neon + + Build and install the XML drivers (default: auto-detect) +@@ -335,6 +342,13 @@ NOTE: the --with-gd switches are not necessary if you have gd 2.0.8 + or higher installed properly. The gdlib-config script will be + detected and used by default in that situation. + ++ --with-gdlib-config ++ ++This option allows to provide a custom program name (in `PATH`) or ++a complete pathname to `gdlib-config`. This may be needed on build ++systems which support multiple architectures, or in cases where your ++distribution names this program differently. ++ + --with-ssl-includes, --with-usb-includes, --with-snmp-includes, + --with-neon-includes, --with-libltdl-includes, + --with-powerman-includes="-I/foo/bar" +diff --git a/m4/nut_check_libgd.m4 b/m4/nut_check_libgd.m4 +index 01cc882..73f4da7 100644 +--- a/m4/nut_check_libgd.m4 ++++ b/m4/nut_check_libgd.m4 +@@ -19,8 +19,25 @@ if test -z "${nut_have_libgd_seen}"; then + LDFLAGS="-L/usr/X11R6/lib" + LIBS="-lgd -lpng -lz -ljpeg -lfreetype -lm -lXpm -lX11" + +- AC_MSG_CHECKING(for gd version via gdlib-config) +- GD_VERSION=`gdlib-config --version 2>/dev/null` ++ dnl By default seek in PATH ++ GDLIB_CONFIG=gdlib-config ++ AC_ARG_WITH(gdlib-config, ++ AS_HELP_STRING([@<:@--with-gdlib-config=/path/to/gdlib-config@:>@], ++ [path to program that reports GDLIB configuration]), ++ [ ++ case "${withval}" in ++ "") ;; ++ yes|no) ++ AC_MSG_ERROR(invalid option --with(out)-gdlib-config - see docs/configure.txt) ++ ;; ++ *) ++ GDLIB_CONFIG="${withval}" ++ ;; ++ esac ++ ]) ++ ++ AC_MSG_CHECKING(for gd version via ${GDLIB_CONFIG}) ++ GD_VERSION=`${GDLIB_CONFIG} --version 2>/dev/null` + if test "$?" != "0" -o -z "${GD_VERSION}"; then + GD_VERSION="none" + fi +@@ -30,13 +47,13 @@ if test -z "${nut_have_libgd_seen}"; then + none) + ;; + 2.0.5 | 2.0.6 | 2.0.7) +- AC_MSG_WARN([[gd ${GD_VERSION} detected, unable to use gdlib-config script]]) ++ AC_MSG_WARN([[gd ${GD_VERSION} detected, unable to use ${GDLIB_CONFIG} script]]) + AC_MSG_WARN([[If gd detection fails, upgrade gd or use --with-gd-includes and --with-gd-libs]]) + ;; + *) +- CFLAGS="`gdlib-config --includes 2>/dev/null`" +- LDFLAGS="`gdlib-config --ldflags 2>/dev/null`" +- LIBS="`gdlib-config --libs 2>/dev/null`" ++ CFLAGS="`${GDLIB_CONFIG} --includes 2>/dev/null`" ++ LDFLAGS="`${GDLIB_CONFIG} --ldflags 2>/dev/null`" ++ LIBS="`${GDLIB_CONFIG} --libs 2>/dev/null`" + ;; + esac + +diff --git a/m4/nut_check_libnetsnmp.m4 b/m4/nut_check_libnetsnmp.m4 +index e1c1426..83b2633 100644 +--- a/m4/nut_check_libnetsnmp.m4 ++++ b/m4/nut_check_libnetsnmp.m4 +@@ -13,9 +13,26 @@ if test -z "${nut_have_libnetsnmp_seen}"; then + CFLAGS_ORIG="${CFLAGS}" + LIBS_ORIG="${LIBS}" + ++ dnl By default seek in PATH ++ NET_SNMP_CONFIG=net-snmp-config ++ AC_ARG_WITH(net-snmp-config, ++ AS_HELP_STRING([@<:@--with-net-snmp-config=/path/to/net-snmp-config@:>@], ++ [path to program that reports Net-SNMP configuration]), ++ [ ++ case "${withval}" in ++ "") ;; ++ yes|no) ++ AC_MSG_ERROR(invalid option --with(out)-net-snmp-config - see docs/configure.txt) ++ ;; ++ *) ++ NET_SNMP_CONFIG="${withval}" ++ ;; ++ esac ++ ]) ++ + dnl See which version of the Net-SNMP library (if any) is installed +- AC_MSG_CHECKING(for Net-SNMP version via net-snmp-config) +- SNMP_VERSION=`net-snmp-config --version 2>/dev/null` ++ AC_MSG_CHECKING(for Net-SNMP version via ${NET_SNMP_CONFIG}) ++ SNMP_VERSION=`${NET_SNMP_CONFIG} --version 2>/dev/null` + if test "$?" != "0" -o -z "${SNMP_VERSION}"; then + SNMP_VERSION="none" + fi +@@ -33,7 +50,7 @@ if test -z "${nut_have_libnetsnmp_seen}"; then + CFLAGS="${withval}" + ;; + esac +- ], [CFLAGS="`net-snmp-config --base-cflags 2>/dev/null`"]) ++ ], [CFLAGS="`${NET_SNMP_CONFIG} --base-cflags 2>/dev/null`"]) + AC_MSG_RESULT([${CFLAGS}]) + + AC_MSG_CHECKING(for Net-SNMP libs) +@@ -48,7 +65,7 @@ if test -z "${nut_have_libnetsnmp_seen}"; then + LIBS="${withval}" + ;; + esac +- ], [LIBS="`net-snmp-config --libs 2>/dev/null`"]) ++ ], [LIBS="`${NET_SNMP_CONFIG} --libs 2>/dev/null`"]) + AC_MSG_RESULT([${LIBS}]) + + dnl Check if the Net-SNMP library is usable +-- +2.7.4 + diff --git a/package/nut/0002-client-ups-add-missing-include.patch b/package/nut/0002-client-ups-add-missing-include.patch new file mode 100644 index 00000000..63fdcdcb --- /dev/null +++ b/package/nut/0002-client-ups-add-missing-include.patch @@ -0,0 +1,29 @@ +From da0969b26ad4bb839bcb88362c8f41aaf0eb8363 Mon Sep 17 00:00:00 2001 +From: "Yann E. MORIN" +Date: Tue, 11 Oct 2016 12:05:36 +0200 +Subject: [PATCH] client/ups: add missing include + +struct timeval is declared in sys/time.h, so we need to #include it. + +Signed-off-by: "Yann E. MORIN" +--- +Backported from upstream commit da0969b26ad4bb839bcb88362c8f41aaf0eb8363 +--- + clients/upsclient.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/clients/upsclient.c b/clients/upsclient.c +index 43c0e79..dfadd0d 100644 +--- a/clients/upsclient.c ++++ b/clients/upsclient.c +@@ -37,6 +37,7 @@ + #include + #include + #include ++#include + + #include "upsclient.h" + #include "common.h" +-- +2.7.4 + diff --git a/package/nut/0003-Add-compatibility-with-openssl-1.1.0.patch b/package/nut/0003-Add-compatibility-with-openssl-1.1.0.patch new file mode 100644 index 00000000..5a0031ac --- /dev/null +++ b/package/nut/0003-Add-compatibility-with-openssl-1.1.0.patch @@ -0,0 +1,76 @@ +From fcbf18c92918ce5e81d0aab62a7aed5c2245ea4d Mon Sep 17 00:00:00 2001 +From: Eneas U de Queiroz +Date: Fri, 1 Jun 2018 11:17:28 -0300 +Subject: [PATCH] Add compatibility with openssl 1.1.0 + +Minor adjustments were needed: +* Openssl 1.1 libs do not need to be initialized. +* TLSv*_method became TLS_*_method. + +Signed-off-by: Eneas U de Queiroz +Upstream: https://github.com/networkupstools/nut/pull/558/ +[added check for libressl] +Signed-off-by: Patrick Havelange +--- + clients/upsclient.c | 5 ++++- + m4/nut_check_libopenssl.m4 | 2 +- + server/netssl.c | 7 +++++-- + 3 files changed, 10 insertions(+), 4 deletions(-) + +diff --git a/clients/upsclient.c b/clients/upsclient.c +index b90587b0..053d60fb 100644 +--- a/clients/upsclient.c ++++ b/clients/upsclient.c +@@ -316,10 +316,13 @@ int upscli_init(int certverify, const char *certpath, + + #ifdef WITH_OPENSSLdefined(LIBRESSL_VERSION_NUMBER) + ++# if (OPENSSL_VERSION_NUMBER < 0x10100000L) || defined(LIBRESSL_VERSION_NUMBER) + SSL_library_init(); + SSL_load_error_strings(); ++# define TLS_client_method TLSv1_client_method ++# endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ + +- ssl_method = TLSv1_client_method(); ++ ssl_method = TLS_client_method(); + + if (!ssl_method) { + return 0; +diff --git a/m4/nut_check_libopenssl.m4 b/m4/nut_check_libopenssl.m4 +index 1b875077..7eb401cd 100644 +--- a/m4/nut_check_libopenssl.m4 ++++ b/m4/nut_check_libopenssl.m4 +@@ -58,7 +58,7 @@ if test -z "${nut_have_libopenssl_seen}"; then + + dnl check if openssl is usable + AC_CHECK_HEADERS(openssl/ssl.h, [nut_have_openssl=yes], [nut_have_openssl=no], [AC_INCLUDES_DEFAULT]) +- AC_CHECK_FUNCS(SSL_library_init, [], [nut_have_openssl=no]) ++ AC_CHECK_FUNCS(SSL_CTX_new, [], [nut_have_openssl=no]) + + if test "${nut_have_openssl}" = "yes"; then + nut_with_ssl="yes" +diff --git a/server/netssl.c b/server/netssl.c +index c2f40989..0289e296 100644 +--- a/server/netssl.c ++++ b/server/netssl.c +@@ -387,12 +387,15 @@ void ssl_init(void) + + #ifdef WITH_OPENSSL + ++# if (OPENSSL_VERSION_NUMBER < 0x10100000L) || defined(LIBRESSL_VERSION_NUMBER) + SSL_load_error_strings(); + SSL_library_init(); ++# define TLS_server_method TLSv1_server_method ++# endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ + +- if ((ssl_method = TLSv1_server_method()) == NULL) { ++ if ((ssl_method = TLS_server_method()) == NULL) { + ssl_debug(); +- fatalx(EXIT_FAILURE, "TLSv1_server_method failed"); ++ fatalx(EXIT_FAILURE, "TLS_server_method failed"); + } + + if ((ssl_ctx = SSL_CTX_new(ssl_method)) == NULL) { +-- +2.16.1 + diff --git a/package/nut/0004-nut_check_libgd.m4-try-to-find-gd-through-pkg-config.patch b/package/nut/0004-nut_check_libgd.m4-try-to-find-gd-through-pkg-config.patch new file mode 100644 index 00000000..3c4a88b4 --- /dev/null +++ b/package/nut/0004-nut_check_libgd.m4-try-to-find-gd-through-pkg-config.patch @@ -0,0 +1,120 @@ +From cb507c44d26d8ae04a0cc3d1c24e79e3bf33ba23 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Wed, 29 Jul 2020 22:51:54 +0200 +Subject: [PATCH] nut_check_libgd.m4: try to find gd through pkg-config + +gdlib-config has been dropped from version 2.3.0 with +https://github.com/libgd/libgd/commit/d62f608c7c4a814c70d4ba777725e3e62d9e2cde + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/networkupstools/nut/commit/cb507c44d26d8ae04a0cc3d1c24e79e3bf33ba23] +--- + m4/nut_check_libgd.m4 | 88 ++++++++++++++++++++++++------------------- + 1 file changed, 50 insertions(+), 38 deletions(-) + +diff --git a/m4/nut_check_libgd.m4 b/m4/nut_check_libgd.m4 +index 73f4da76d..c4e96761c 100644 +--- a/m4/nut_check_libgd.m4 ++++ b/m4/nut_check_libgd.m4 +@@ -12,50 +12,62 @@ if test -z "${nut_have_libgd_seen}"; then + LDFLAGS_ORIG="${LDFLAGS}" + LIBS_ORIG="${LIBS}" + +- dnl Initial defaults. These are only used if gdlib-config is +- dnl unusable and the user fails to pass better values in --with +- dnl arguments +- CFLAGS="" +- LDFLAGS="-L/usr/X11R6/lib" +- LIBS="-lgd -lpng -lz -ljpeg -lfreetype -lm -lXpm -lX11" ++ AC_MSG_CHECKING(for gd version via pkg-config) ++ GD_VERSION="`pkg-config --silence-errors --modversion gdlib 2>/dev/null`" ++ if test "$?" = "0" -a -n "${GD_VERSION}"; then ++ CFLAGS="`pkg-config --silence-errors --cflags gdlib 2>/dev/null`" ++ LIBS="`pkg-config --silence-errors --libs gdlib 2>/dev/null`" ++ else ++ GD_VERSION="none" ++ fi ++ AC_MSG_RESULT(${GD_VERSION} found) + +- dnl By default seek in PATH +- GDLIB_CONFIG=gdlib-config +- AC_ARG_WITH(gdlib-config, +- AS_HELP_STRING([@<:@--with-gdlib-config=/path/to/gdlib-config@:>@], +- [path to program that reports GDLIB configuration]), +- [ +- case "${withval}" in +- "") ;; +- yes|no) +- AC_MSG_ERROR(invalid option --with(out)-gdlib-config - see docs/configure.txt) ++ if test "${GD_VERSION}" = "none"; then ++ dnl Initial defaults. These are only used if gdlib-config is ++ dnl unusable and the user fails to pass better values in --with ++ dnl arguments ++ CFLAGS="" ++ LDFLAGS="-L/usr/X11R6/lib" ++ LIBS="-lgd -lpng -lz -ljpeg -lfreetype -lm -lXpm -lX11" ++ ++ dnl By default seek in PATH ++ GDLIB_CONFIG=gdlib-config ++ AC_ARG_WITH(gdlib-config, ++ AS_HELP_STRING([@<:@--with-gdlib-config=/path/to/gdlib-config@:>@], ++ [path to program that reports GDLIB configuration]), ++ [ ++ case "${withval}" in ++ "") ;; ++ yes|no) ++ AC_MSG_ERROR(invalid option --with(out)-gdlib-config - see docs/configure.txt) ++ ;; ++ *) ++ GDLIB_CONFIG="${withval}" ++ ;; ++ esac ++ ]) ++ ++ AC_MSG_CHECKING(for gd version via ${GDLIB_CONFIG}) ++ GD_VERSION=`${GDLIB_CONFIG} --version 2>/dev/null` ++ if test "$?" != "0" -o -z "${GD_VERSION}"; then ++ GD_VERSION="none" ++ fi ++ AC_MSG_RESULT(${GD_VERSION} found) ++ ++ case "${GD_VERSION}" in ++ none) ++ ;; ++ 2.0.5 | 2.0.6 | 2.0.7) ++ AC_MSG_WARN([[gd ${GD_VERSION} detected, unable to use ${GDLIB_CONFIG} script]]) ++ AC_MSG_WARN([[If gd detection fails, upgrade gd or use --with-gd-includes and --with-gd-libs]]) + ;; + *) +- GDLIB_CONFIG="${withval}" ++ CFLAGS="`${GDLIB_CONFIG} --includes 2>/dev/null`" ++ LDFLAGS="`${GDLIB_CONFIG} --ldflags 2>/dev/null`" ++ LIBS="`${GDLIB_CONFIG} --libs 2>/dev/null`" + ;; + esac +- ]) +- +- AC_MSG_CHECKING(for gd version via ${GDLIB_CONFIG}) +- GD_VERSION=`${GDLIB_CONFIG} --version 2>/dev/null` +- if test "$?" != "0" -o -z "${GD_VERSION}"; then +- GD_VERSION="none" + fi +- AC_MSG_RESULT(${GD_VERSION} found) +- +- case "${GD_VERSION}" in +- none) +- ;; +- 2.0.5 | 2.0.6 | 2.0.7) +- AC_MSG_WARN([[gd ${GD_VERSION} detected, unable to use ${GDLIB_CONFIG} script]]) +- AC_MSG_WARN([[If gd detection fails, upgrade gd or use --with-gd-includes and --with-gd-libs]]) +- ;; +- *) +- CFLAGS="`${GDLIB_CONFIG} --includes 2>/dev/null`" +- LDFLAGS="`${GDLIB_CONFIG} --ldflags 2>/dev/null`" +- LIBS="`${GDLIB_CONFIG} --libs 2>/dev/null`" +- ;; +- esac + + dnl Now allow overriding gd settings if the user knows best + AC_MSG_CHECKING(for gd include flags) diff --git a/package/nut/Config.in b/package/nut/Config.in new file mode 100644 index 00000000..df647b9b --- /dev/null +++ b/package/nut/Config.in @@ -0,0 +1,27 @@ +comment "nut needs a toolchain w/ C++" + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP + +config BR2_PACKAGE_NUT + bool "nut" + depends on BR2_USE_MMU # fork() + depends on BR2_INSTALL_LIBSTDCPP + help + Network UPS tools + + The primary goal of the Network UPS Tools (NUT) project is + to provide support for Power Devices, such as + Uninterruptible Power Supplies, Power Distribution Units and + Solar Controllers. + + http://www.networkupstools.org/ + +if BR2_PACKAGE_NUT + +config BR2_PACKAGE_NUT_DRIVERS + string "drivers" + help + Select the individual drivers to enable, in a + comma-separated list. Leave empty for all. + +endif # BR2_PACKAGE_NUT diff --git a/package/nut/nut.hash b/package/nut/nut.hash new file mode 100644 index 00000000..0a677bc0 --- /dev/null +++ b/package/nut/nut.hash @@ -0,0 +1,6 @@ +# From http://www.networkupstools.org/source/2.7/nut-2.7.2.tar.gz.sha256 +sha256 980e82918c52d364605c0703a5dcf01f74ad2ef06e3d365949e43b7d406d25a7 nut-2.7.4.tar.gz +# Locally computed +sha256 9f562d0e6be5108a06684dd249686d378abe1653df14b1944e971e084f6751f0 COPYING +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 LICENSE-GPL2 +sha256 fc82ca8b6fdb18d4e3e85cfd8ab58d1bcd3f1b29abe782895abd91d64763f8e7 LICENSE-GPL3 diff --git a/package/nut/nut.mk b/package/nut/nut.mk new file mode 100644 index 00000000..ad575310 --- /dev/null +++ b/package/nut/nut.mk @@ -0,0 +1,95 @@ +################################################################################ +# +# nut +# +################################################################################ + +NUT_VERSION_MAJOR = 2.7 +NUT_VERSION = $(NUT_VERSION_MAJOR).4 +NUT_SITE = http://www.networkupstools.org/source/$(NUT_VERSION_MAJOR) +NUT_LICENSE = GPL-2.0+, GPL-3.0+ (python scripts), GPL/Artistic (perl client) +NUT_LICENSE_FILES = COPYING LICENSE-GPL2 LICENSE-GPL3 +NUT_INSTALL_STAGING = YES +NUT_DEPENDENCIES = host-pkgconf + +# Our patch changes m4 macros, so we need to autoreconf +NUT_AUTORECONF = YES + +# Race condition in tools generation +NUT_MAKE = $(MAKE1) + +# Put the PID files in a read-write place (/var/run is a tmpfs) +# since the default location (/var/state/ups) maybe readonly. +NUT_CONF_OPTS = \ + --with-altpidpath=/var/run/upsd \ + --with-dev \ + --without-hal + +# For uClibc-based toolchains, nut forgets to link with -lm +ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y) +NUT_CONF_ENV += LDFLAGS="$(TARGET_LDFLAGS) -lm" +endif + +ifeq ($(call qstrip,$(BR2_PACKAGE_NUT_DRIVERS)),) +NUT_CONF_OPTS += --with-drivers=all +else +NUT_CONF_OPTS += --with-drivers=$(BR2_PACKAGE_NUT_DRIVERS) +endif + +ifeq ($(BR2_PACKAGE_AVAHI)$(BR2_PACKAGE_DBUS),yy) +NUT_DEPENDENCIES += avahi dbus +NUT_CONF_OPTS += --with-avahi +else +NUT_CONF_OPTS += --without-avahi +endif + +# gd with support for png is required for the CGI +ifeq ($(BR2_PACKAGE_GD)$(BR2_PACKAGE_LIBPNG),yy) +NUT_DEPENDENCIES += gd libpng +NUT_CONF_OPTS += --with-cgi +else +NUT_CONF_OPTS += --without-cgi +endif + +# nut-scanner needs libltdl, which is a wrapper arounf dlopen/dlsym, +# so is not available for static-only builds. +# There is no flag to directly enable/disable nut-scanner, it's done +# via the --enable/disable-libltdl flag. +ifeq ($(BR2_STATIC_LIBS):$(BR2_PACKAGE_LIBTOOL),:y) +NUT_DEPENDENCIES += libtool +NUT_CONF_OPTS += --with-libltdl +else +NUT_CONF_OPTS += --without-libltdl +endif + +ifeq ($(BR2_PACKAGE_LIBUSB_COMPAT),y) +NUT_DEPENDENCIES += libusb-compat +NUT_CONF_OPTS += --with-usb +else +NUT_CONF_OPTS += --without-usb +endif + +ifeq ($(BR2_PACKAGE_NEON_EXPAT)$(BR2_PACKAGE_NEON_LIBXML2),y) +NUT_DEPENDENCIES += neon +NUT_CONF_OPTS += --with-neon +else +NUT_CONF_OPTS += --without-neon +endif + +ifeq ($(BR2_PACKAGE_NETSNMP),y) +NUT_DEPENDENCIES += netsnmp +NUT_CONF_OPTS += \ + --with-snmp \ + --with-net-snmp-config=$(STAGING_DIR)/usr/bin/net-snmp-config +else +NUT_CONF_OPTS += --without-snmp +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +NUT_DEPENDENCIES += openssl +NUT_CONF_OPTS += --with-ssl +else +NUT_CONF_OPTS += --without-ssl +endif + +$(eval $(autotools-package)) diff --git a/package/nuttcp/0001-susv3-legacy.patch b/package/nuttcp/0001-susv3-legacy.patch new file mode 100644 index 00000000..9a215f8a --- /dev/null +++ b/package/nuttcp/0001-susv3-legacy.patch @@ -0,0 +1,264 @@ +[PATCH] Replace susv3 legacy function with modern equivalents + +Signed-off-by: Peter Korsgaard +--- + nuttcp-6.1.2.c | 90 ++++++++++++++++++++++++++++----------------------------- + 1 file changed, 45 insertions(+), 45 deletions(-) + +Index: nuttcp-6.1.2/nuttcp-6.1.2.c +=================================================================== +--- nuttcp-6.1.2.orig/nuttcp-6.1.2.c ++++ nuttcp-6.1.2/nuttcp-6.1.2.c +@@ -1925,11 +1925,11 @@ + if (udp && !haverateopt) + rate = DEFAULT_UDP_RATE; + +- bzero((char *)&frominet, sizeof(frominet)); +- bzero((char *)&clientaddr, sizeof(clientaddr)); ++ memset((char *)&frominet, 0, sizeof(frominet)); ++ memset((char *)&clientaddr, 0, sizeof(clientaddr)); + + #ifdef AF_INET6 +- bzero((char *)&clientaddr6, sizeof(clientaddr6)); ++ memset((char *)&clientaddr6, 0, sizeof(clientaddr6)); + clientscope6 = 0; + #endif + +@@ -1985,7 +1985,7 @@ + } + + while (stream_idx <= nstream) { +- bzero(&hints, sizeof(hints)); ++ memset(&hints, 0, sizeof(hints)); + res[stream_idx] = NULL; + if (explicitaf) hints.ai_family = af; + if ((cp2 = strchr(cp1, '/'))) { +@@ -3013,12 +3013,12 @@ + if ((stream_idx > 0) && skip_data) + break; + +- bzero((char *)&sinme[stream_idx], sizeof(sinme[stream_idx])); +- bzero((char *)&sinhim[stream_idx], sizeof(sinhim[stream_idx])); ++ memset((char *)&sinme[stream_idx], 0, sizeof(sinme[stream_idx])); ++ memset((char *)&sinhim[stream_idx], 0, sizeof(sinhim[stream_idx])); + + #ifdef AF_INET6 +- bzero((char *)&sinme6[stream_idx], sizeof(sinme6[stream_idx])); +- bzero((char *)&sinhim6[stream_idx], sizeof(sinhim6[stream_idx])); ++ memset((char *)&sinme6[stream_idx], 0, sizeof(sinme6[stream_idx])); ++ memset((char *)&sinhim6[stream_idx], 0, sizeof(sinhim6[stream_idx])); + #endif + + if (((trans && !reverse) && (stream_idx > 0)) || +@@ -3028,15 +3028,15 @@ + if (client) { + if (af == AF_INET) { + sinhim[stream_idx].sin_family = af; +- bcopy((char *)&(((struct sockaddr_in *)res[stream_idx]->ai_addr)->sin_addr), +- (char *)&sinhim[stream_idx].sin_addr.s_addr, ++ memcpy((char *)&sinhim[stream_idx].sin_addr.s_addr, ++ (char *)&(((struct sockaddr_in *)res[stream_idx]->ai_addr)->sin_addr), + sizeof(sinhim[stream_idx].sin_addr.s_addr)); + } + #ifdef AF_INET6 + else if (af == AF_INET6) { + sinhim6[stream_idx].sin6_family = af; +- bcopy((char *)&(((struct sockaddr_in6 *)res[stream_idx]->ai_addr)->sin6_addr), +- (char *)&sinhim6[stream_idx].sin6_addr.s6_addr, ++ memcpy((char *)&sinhim6[stream_idx].sin6_addr.s6_addr, ++ (char *)&(((struct sockaddr_in6 *)res[stream_idx]->ai_addr)->sin6_addr), + sizeof(sinhim6[stream_idx].sin6_addr.s6_addr)); + sinhim6[stream_idx].sin6_scope_id = ((struct sockaddr_in6 *)res[stream_idx]->ai_addr)->sin6_scope_id; + } +@@ -3113,8 +3113,8 @@ + * to the multicast group + */ + if (af == AF_INET) { +- bcopy((char *)&sinhim[1].sin_addr.s_addr, +- (char *)&save_sinhim.sin_addr.s_addr, ++ memcpy((char *)&save_sinhim.sin_addr.s_addr, ++ (char *)&sinhim[1].sin_addr.s_addr, + sizeof(struct in_addr)); + if (!client && (irvers >= 50505)) { + struct sockaddr_in peer; +@@ -3124,8 +3124,8 @@ + &peerlen) < 0) { + err("getpeername"); + } +- bcopy((char *)&peer.sin_addr.s_addr, +- (char *)&sinhim[1].sin_addr.s_addr, ++ memcpy((char *)&sinhim[1].sin_addr.s_addr, ++ (char *)&peer.sin_addr.s_addr, + sizeof(struct in_addr)); + } + else { +@@ -3136,8 +3136,8 @@ + &melen) < 0) { + err("getsockname"); + } +- bcopy((char *)&me.sin_addr.s_addr, +- (char *)&sinhim[1].sin_addr.s_addr, ++ memcpy((char *)&sinhim[1].sin_addr.s_addr, ++ (char *)&me.sin_addr.s_addr, + sizeof(struct in_addr)); + } + sinhim[1].sin_addr.s_addr &= +@@ -4197,13 +4197,13 @@ + &melen) < 0) { + err("getsockname"); + } +- bcopy((char *)&me.sin_addr.s_addr, +- (char *)&mc_group.imr_multiaddr.s_addr, ++ memcpy((char *)&mc_group.imr_multiaddr.s_addr, ++ (char *)&me.sin_addr.s_addr, + sizeof(struct in_addr)); + } + else { +- bcopy((char *)&peer.sin_addr.s_addr, +- (char *)&mc_group.imr_multiaddr.s_addr, ++ memcpy((char *)&mc_group.imr_multiaddr.s_addr, ++ (char *)&peer.sin_addr.s_addr, + sizeof(struct in_addr)); + } + mc_group.imr_multiaddr.s_addr &= htonl(0xFFFFFF); +@@ -4330,12 +4330,12 @@ + if(udp) { + strcpy(buf, "BOD0"); + if (multicast) { +- bcopy((char *)&sinhim[1].sin_addr.s_addr, +- (char *)&save_mc.sin_addr.s_addr, +- sizeof(struct in_addr)); +- bcopy((char *)&save_sinhim.sin_addr.s_addr, ++ memcpy((char *)&save_mc.sin_addr.s_addr, + (char *)&sinhim[1].sin_addr.s_addr, + sizeof(struct in_addr)); ++ memcpy((char *)&sinhim[1].sin_addr.s_addr, ++ (char *)&save_sinhim.sin_addr.s_addr, ++ sizeof(struct in_addr)); + } + (void)Nwrite( fd[stream_idx + 1], buf, 4 ); /* rcvr start */ + if (two_bod) { +@@ -4344,8 +4344,8 @@ + (void)Nwrite( fd[stream_idx + 1], buf, 4 ); /* rcvr start */ + } + if (multicast) { +- bcopy((char *)&save_mc.sin_addr.s_addr, +- (char *)&sinhim[1].sin_addr.s_addr, ++ memcpy((char *)&sinhim[1].sin_addr.s_addr, ++ (char *)&save_mc.sin_addr.s_addr, + sizeof(struct in_addr)); + } + if (timeout) +@@ -4361,7 +4361,7 @@ + fflush(stdout); + } + if (udplossinfo) +- bcopy(&nbytes, buf + 24, 8); ++ memcpy(buf + 24, &nbytes, 8); + if (!udp && interval && !(format & NORETRANS) && + ((retransinfo == 1) || + ((retransinfo >= 2) && +@@ -4372,13 +4372,13 @@ + tmp = 0x5254524Eu; /* "RTRN" */ + else + tmp = 0x48525452u; /* "HRTR" */ +- bcopy(&nretrans, buf + 24, 4); +- bcopy(&tmp, buf + 28, 4); ++ memcpy(buf + 24, &nretrans, 4); ++ memcpy(buf + 28, &tmp, 4); + } + else { + send_retrans = 0; + if (!udp) +- bzero(buf + 24, 8); ++ memset(buf + 24, 0, 8); + } + if (nbuf == INT_MAX) + nbuf = ULLONG_MAX; +@@ -4423,12 +4423,12 @@ + nbytes += buflen; + cnt = 0; + if (udplossinfo) +- bcopy(&nbytes, buf + 24, 8); ++ memcpy(buf + 24, &nbytes, 8); + if (send_retrans) { + nretrans = get_retrans( + fd[stream_idx + 1]); + nretrans -= iretrans; +- bcopy(&nretrans, buf + 24, 4); ++ memcpy(buf + 24, &nretrans, 4); + } + stream_idx++; + stream_idx = stream_idx % nstream; +@@ -4523,8 +4523,8 @@ + nbytes += cnt; + if(udp) { + if (multicast) +- bcopy((char *)&save_sinhim.sin_addr.s_addr, +- (char *)&sinhim[1].sin_addr.s_addr, ++ memcpy((char *)&sinhim[1].sin_addr.s_addr, ++ (char *)&save_sinhim.sin_addr.s_addr, + sizeof(struct in_addr)); + strcpy(buf, "EOD0"); + (void)Nwrite( fd[stream_idx + 1], buf, 4 ); /* rcvr end */ +@@ -4532,7 +4532,7 @@ + } else { + first_read = 1; + need_swap = 0; +- bzero(buf + 24, 8); ++ memset(buf + 24, 0, 8); + if (udp) { + ntbytesc = 0; + got_eod0 = 0; +@@ -4584,7 +4584,7 @@ + * goes off right here */ + if (udplossinfo) { + if (first_read) { +- bcopy(buf + 24, &ntbytesc, ++ memcpy(&ntbytesc, buf + 24, + 8); + first_read = 0; + if (ntbytesc > 0x100000000ull) +@@ -4598,7 +4598,7 @@ + } + } + if (!need_swap) +- bcopy(buf + 24, &ntbytesc, ++ memcpy(&ntbytesc, buf + 24, + 8); + else { + cp1 = (char *)&ntbytesc; +@@ -4627,8 +4627,8 @@ + uint32_t tmp; + + first_read = 0; +- bcopy(buf + 24, &nretrans, 4); +- bcopy(buf + 28, &tmp, 4); ++ memcpy(&nretrans, buf + 24, 4); ++ memcpy(&tmp, buf + 28, 4); + if (tmp == 0x5254524Eu) { + /* "RTRN" */ + retransinfo = 1; +@@ -4661,7 +4661,7 @@ + } + if (read_retrans) { + if (!need_swap) +- bcopy(buf + 24, &nretrans, ++ memcpy(&nretrans, buf + 24, + 4); + else { + cp1 = (char *)&nretrans; +@@ -5327,10 +5327,10 @@ + itimer.it_interval.tv_usec = 0; + setitimer(ITIMER_REAL, &itimer, 0); + signal(SIGALRM, SIG_DFL); +- bzero((char *)&frominet, sizeof(frominet)); +- bzero((char *)&clientaddr, sizeof(clientaddr)); ++ memset((char *)&frominet, 0, sizeof(frominet)); ++ memset((char *)&clientaddr, 0, sizeof(clientaddr)); + #ifdef AF_INET6 +- bzero((char *)&clientaddr6, sizeof(clientaddr)); ++ memset((char *)&clientaddr6, 0, sizeof(clientaddr)); + clientscope6 = 0; + #endif + cput = 0.000001; diff --git a/package/nuttcp/Config.in b/package/nuttcp/Config.in new file mode 100644 index 00000000..0b5f0811 --- /dev/null +++ b/package/nuttcp/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_NUTTCP + bool "nuttcp" + depends on BR2_USE_MMU # fork() + help + nuttcp is a TCP/UDP network testing tool, much like iperf + + http://nuttcp.net diff --git a/package/nuttcp/nuttcp.hash b/package/nuttcp/nuttcp.hash new file mode 100644 index 00000000..c7d0148e --- /dev/null +++ b/package/nuttcp/nuttcp.hash @@ -0,0 +1,4 @@ +# From http://lists.freebsd.org/pipermail/freebsd-ports-bugs/2009-August/170685.html +sha256 054e96d9d68fe917df6f25fab15c7755bdd480f6420d7d48d9194a1a52378169 nuttcp-6.1.2.tar.bz2 +# Locally computed +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 LICENSE diff --git a/package/nuttcp/nuttcp.mk b/package/nuttcp/nuttcp.mk new file mode 100644 index 00000000..2636f950 --- /dev/null +++ b/package/nuttcp/nuttcp.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# nuttcp +# +################################################################################ + +NUTTCP_VERSION = 6.1.2 +NUTTCP_SITE = http://nuttcp.net/nuttcp +NUTTCP_SOURCE = nuttcp-$(NUTTCP_VERSION).tar.bz2 +NUTTCP_LICENSE = GPL-2.0 +NUTTCP_LICENSE_FILES = LICENSE + +define NUTTCP_BUILD_CMDS + $(MAKE1) CC="$(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_LDFLAGS)" \ + -C $(@D) all +endef + +define NUTTCP_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 $(@D)/nuttcp-$(NUTTCP_VERSION) \ + $(TARGET_DIR)/usr/bin/nuttcp +endef + +$(eval $(generic-package)) diff --git a/package/nvidia-driver/0001-use-LDFLAGS.patch b/package/nvidia-driver/0001-use-LDFLAGS.patch new file mode 100644 index 00000000..7b7df809 --- /dev/null +++ b/package/nvidia-driver/0001-use-LDFLAGS.patch @@ -0,0 +1,48 @@ +kernel: use LDFLAGS when linking modules + +Currently, linking module objects is simply using $(LD), assuming that +the default emulation is correct for the current architecture. + +However, that might not be the case when the toolchain default is not +the same as the current arch. For example, if the toolchain defaults to +i386 and is capable of x86_64, and we're targetting x86_64 (or the +opposite), the link would fail because the ld emulation is incorrect: + + .../i686-pc-linux-gnu-ld: Relocatable linking with relocations from + format elf64-x86-64 (.../nvidia-driver-370.23/kernel/nvidia/nv-frontend.o) + to format elf32-i386 (.../nvidia-driver-370.23/kernel/nvidia/nv-interface.o) + is not supported + +Add use of $(LDFLAGS) when doing the link, as the kernel provides the +proper emulation in those. + +Signed-off-by: "Yann E. MORIN" + +--- +Issue reported upstream: + https://devtalk.nvidia.com/default/topic/958653/ + +diff -durN nvidia-driver-370.23.orig/kernel/nvidia/nvidia.Kbuild nvidia-driver-370.23/kernel/nvidia/nvidia.Kbuild +--- nvidia-driver-370.23.orig/kernel/nvidia/nvidia.Kbuild 2016-08-09 01:57:50.000000000 +0200 ++++ nvidia-driver-370.23/kernel/nvidia/nvidia.Kbuild 2016-08-20 12:25:02.780233423 +0200 +@@ -87,7 +87,7 @@ + always += $(NVIDIA_INTERFACE) + + $(obj)/$(NVIDIA_INTERFACE): $(addprefix $(obj)/,$(NVIDIA_OBJECTS)) +- $(LD) -r -o $@ $^ ++ $(LD) $(LDFLAGS) -r -o $@ $^ + + + # +diff -durN nvidia-driver-370.23.orig/kernel/nvidia-modeset/nvidia-modeset.Kbuild nvidia-driver-370.23/kernel/nvidia-modeset/nvidia-modeset.Kbuild +--- nvidia-driver-370.23.orig/kernel/nvidia-modeset/nvidia-modeset.Kbuild 2016-08-09 01:43:19.000000000 +0200 ++++ nvidia-driver-370.23/kernel/nvidia-modeset/nvidia-modeset.Kbuild 2016-08-20 12:25:39.596772662 +0200 +@@ -70,7 +70,7 @@ + always += $(NVIDIA_MODESET_INTERFACE) + + $(obj)/$(NVIDIA_MODESET_INTERFACE): $(addprefix $(obj)/,$(NVIDIA_MODESET_OBJECTS)) +- $(LD) -r -o $@ $^ ++ $(LD) $(LDFLAGS) -r -o $@ $^ + + # + # Register the conftests needed by nvidia-modeset.ko diff --git a/package/nvidia-driver/Config.in b/package/nvidia-driver/Config.in new file mode 100644 index 00000000..9631b3e7 --- /dev/null +++ b/package/nvidia-driver/Config.in @@ -0,0 +1,93 @@ +comment "nvidia-driver needs a glibc toolchain" + depends on BR2_i386 || BR2_x86_64 + depends on !BR2_TOOLCHAIN_USES_GLIBC + +config BR2_PACKAGE_NVIDIA_DRIVER + bool "nvidia-driver" + depends on BR2_i386 || BR2_x86_64 + depends on BR2_TOOLCHAIN_USES_GLIBC + help + The binary-only driver blob for NVidia cards. + This is the userland part only. + + http://www.nvidia.com/ + +if BR2_PACKAGE_NVIDIA_DRIVER + +comment "nvidia-driver X.org drivers needs a modular Xorg server" + depends on !BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR + +config BR2_PACKAGE_NVIDIA_DRIVER_XORG + bool "X.org drivers" + default y + depends on BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR + select BR2_PACKAGE_MESA3D_HEADERS + select BR2_PACKAGE_XLIB_LIBX11 + select BR2_PACKAGE_XLIB_LIBXEXT + select BR2_PACKAGE_HAS_LIBGL + select BR2_PACKAGE_HAS_LIBEGL + select BR2_PACKAGE_HAS_LIBEGL_WAYLAND + select BR2_PACKAGE_HAS_LIBGLES + +if BR2_PACKAGE_NVIDIA_DRIVER_XORG + +config BR2_PACKAGE_PROVIDES_LIBGL + default "nvidia-driver" + +config BR2_PACKAGE_PROVIDES_LIBEGL + default "nvidia-driver" + +config BR2_PACKAGE_PROVIDES_LIBGLES + default "nvidia-driver" + +config BR2_PACKAGE_NVIDIA_DRIVER_PRIVATE_LIBS + bool "Install private libraries" + help + Two libraries require special agreement with NVidia to + develop code linking to those libraries: libnvidia-ifr.so + and libnvidia-fbc.so (to grab and encode an OpenGL buffer or + an X framebuffer.) + + Say 'y' here if you plan on running a program that uses + those private libraries. + +endif # BR2_PACKAGE_NVIDIA_DRIVER_XORG + +config BR2_PACKAGE_NVIDIA_DRIVER_CUDA + bool "CUDA support" + +if BR2_PACKAGE_NVIDIA_DRIVER_CUDA + +config BR2_PACKAGE_NVIDIA_DRIVER_OPENCL + bool "OpenCL support" + select BR2_PACKAGE_MESA3D_HEADERS + select BR2_PACKAGE_HAS_LIBOPENCL + +config BR2_PACKAGE_PROVIDES_LIBOPENCL + default "nvidia-driver" if BR2_PACKAGE_NVIDIA_DRIVER_OPENCL + +config BR2_PACKAGE_NVIDIA_DRIVER_CUDA_PROGS + bool "CUDA MPS server and control" + help + Say 'y' here if you need to run more than one program + doing CUDA at the same time. The MPS server will be + launched automatically when needed. + +endif # BR2_PACKAGE_NVIDIA_DRIVER_CUDA + +comment "nvidia kernel module needs a kernel to be built" + depends on !BR2_LINUX_KERNEL + +config BR2_PACKAGE_NVIDIA_DRIVER_MODULE + bool "nvidia kernel module" + depends on BR2_LINUX_KERNEL + select BR2_LINUX_NEEDS_MODULES # not using kernel-module infra + help + Build the nvidia.ko kernel module. + + If CUDA support (above) is set, and the target is x86_64, then + this will also build the nvidia-uvm.ko kernel module, which + provides Unified Memory access to the GPU and CPU memories for + CUDA programs. + +endif # BR2_PACKAGE_NVIDIA_DRIVER diff --git a/package/nvidia-driver/egl.pc b/package/nvidia-driver/egl.pc new file mode 100644 index 00000000..a5aeace6 --- /dev/null +++ b/package/nvidia-driver/egl.pc @@ -0,0 +1,10 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: egl +Description: Nvidia OpenGL library +Version: 1 +Cflags: -I${includedir} +Libs: -L${libdir} -lEGL diff --git a/package/nvidia-driver/gl.pc b/package/nvidia-driver/gl.pc new file mode 100644 index 00000000..d01f5d69 --- /dev/null +++ b/package/nvidia-driver/gl.pc @@ -0,0 +1,11 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: gl +Description: Nvidia OpenGL library +Version: 10.4.2 +Libs: -L${libdir} -lGL -lm -lXext -lX11 -ldl +Cflags: -I${includedir} -DEGL_NO_X11 +glx_tls: no diff --git a/package/nvidia-driver/nvidia-driver.hash b/package/nvidia-driver/nvidia-driver.hash new file mode 100644 index 00000000..79ac0526 --- /dev/null +++ b/package/nvidia-driver/nvidia-driver.hash @@ -0,0 +1,4 @@ +# Locally computed +sha256 6f4af70ee3d03ed31c497a5d555164c56057b53ecedfc0d2c8de4b0b90728805 NVIDIA-Linux-x86-390.67.run +sha256 6df2ca1a7420b6751bcaf257d321b14f4e5f7ca54d77a43514912a3792ece65a NVIDIA-Linux-x86_64-390.67.run +sha256 bd28b0c5aeeb00eb11d3ec6f6f3449d4b3a40100914258332734a53527997526 LICENSE diff --git a/package/nvidia-driver/nvidia-driver.mk b/package/nvidia-driver/nvidia-driver.mk new file mode 100644 index 00000000..44e34cb7 --- /dev/null +++ b/package/nvidia-driver/nvidia-driver.mk @@ -0,0 +1,198 @@ +################################################################################ +# +# nvidia-driver +# +################################################################################ + +NVIDIA_DRIVER_VERSION = 390.67 +NVIDIA_DRIVER_SUFFIX = $(if $(BR2_x86_64),_64) +NVIDIA_DRIVER_SITE = http://download.nvidia.com/XFree86/Linux-x86$(NVIDIA_DRIVER_SUFFIX)/$(NVIDIA_DRIVER_VERSION) +NVIDIA_DRIVER_SOURCE = NVIDIA-Linux-x86$(NVIDIA_DRIVER_SUFFIX)-$(NVIDIA_DRIVER_VERSION).run +NVIDIA_DRIVER_LICENSE = NVIDIA Software License +NVIDIA_DRIVER_LICENSE_FILES = LICENSE +NVIDIA_DRIVER_REDISTRIBUTE = NO +NVIDIA_DRIVER_INSTALL_STAGING = YES + +ifeq ($(BR2_PACKAGE_NVIDIA_DRIVER_XORG),y) + +# Since nvidia-driver are binary blobs, the below dependencies are not +# strictly speaking build dependencies of nvidia-driver. However, they +# are build dependencies of packages that depend on nvidia-driver, so +# they should be built prior to those packages, and the only simple +# way to do so is to make nvidia-driver depend on them. +NVIDIA_DRIVER_DEPENDENCIES += mesa3d-headers xlib_libX11 xlib_libXext +NVIDIA_DRIVER_PROVIDES += libgl libegl libgles + +# libGL.so.$(NVIDIA_DRIVER_VERSION) is the legacy libGL.so library; it +# has been replaced with libGL.so.1.0.0. Installing both is technically +# possible, but great care must be taken to ensure they do not conflict, +# so that EGL still works. The legacy library exposes an NVidia-specific +# API, so it should not be needed, except for legacy, binary-only +# applications (in other words: we don't care). +# +# libGL.so.1.0.0 is the new vendor-neutral library, aimed at replacing +# the old libGL.so.$(NVIDIA_DRIVER_VERSION) library. The latter contains +# NVidia extensions (which is deemed bad now), while the former follows +# the newly-introduced vendor-neutral "dispatching" API/ABI: +# https://github.com/aritger/linux-opengl-abi-proposal/blob/master/linux-opengl-abi-proposal.txt +# However, this is not very useful to us, as we don't support multiple +# GL providers at the same time on the system, which this proposal is +# aimed at supporting. +# +# So we only install the legacy library for now. +NVIDIA_DRIVER_LIBS_GL = \ + libGLX.so.0 \ + libGL.so.$(NVIDIA_DRIVER_VERSION) \ + libGLX_nvidia.so.$(NVIDIA_DRIVER_VERSION) + +NVIDIA_DRIVER_LIBS_EGL = \ + libEGL.so.1.1.0 \ + libGLdispatch.so.0 \ + libEGL_nvidia.so.$(NVIDIA_DRIVER_VERSION) + +NVIDIA_DRIVER_LIBS_GLES = \ + libGLESv1_CM.so.1.2.0 \ + libGLESv2.so.2.1.0 \ + libGLESv1_CM_nvidia.so.$(NVIDIA_DRIVER_VERSION) \ + libGLESv2_nvidia.so.$(NVIDIA_DRIVER_VERSION) + +NVIDIA_DRIVER_LIBS_MISC = \ + libnvidia-eglcore.so.$(NVIDIA_DRIVER_VERSION) \ + libnvidia-egl-wayland.so.1.0.2 \ + libnvidia-glcore.so.$(NVIDIA_DRIVER_VERSION) \ + libnvidia-glsi.so.$(NVIDIA_DRIVER_VERSION) \ + tls/libnvidia-tls.so.$(NVIDIA_DRIVER_VERSION) \ + libvdpau_nvidia.so.$(NVIDIA_DRIVER_VERSION) \ + libnvidia-ml.so.$(NVIDIA_DRIVER_VERSION) + +NVIDIA_DRIVER_LIBS += \ + $(NVIDIA_DRIVER_LIBS_GL) \ + $(NVIDIA_DRIVER_LIBS_EGL) \ + $(NVIDIA_DRIVER_LIBS_GLES) \ + $(NVIDIA_DRIVER_LIBS_MISC) + +# Install the gl.pc file +define NVIDIA_DRIVER_INSTALL_GL_DEV + $(INSTALL) -D -m 0644 $(@D)/libGL.la $(STAGING_DIR)/usr/lib/libGL.la + $(SED) 's:__GENERATED_BY__:Buildroot:' $(STAGING_DIR)/usr/lib/libGL.la + $(SED) 's:__LIBGL_PATH__:/usr/lib:' $(STAGING_DIR)/usr/lib/libGL.la + $(SED) 's:-L[^[:space:]]\+::' $(STAGING_DIR)/usr/lib/libGL.la + $(INSTALL) -D -m 0644 package/nvidia-driver/gl.pc $(STAGING_DIR)/usr/lib/pkgconfig/gl.pc + $(INSTALL) -D -m 0644 package/nvidia-driver/egl.pc $(STAGING_DIR)/usr/lib/pkgconfig/egl.pc +endef + +# Those libraries are 'private' libraries requiring an agreement with +# NVidia to develop code for those libs. There seems to be no restriction +# on using those libraries (e.g. if the user has such an agreement, or +# wants to run a third-party program developed under such an agreement). +ifeq ($(BR2_PACKAGE_NVIDIA_DRIVER_PRIVATE_LIBS),y) +NVIDIA_DRIVER_LIBS += \ + libnvidia-ifr.so.$(NVIDIA_DRIVER_VERSION) \ + libnvidia-fbc.so.$(NVIDIA_DRIVER_VERSION) +endif + +# We refer to the destination path; the origin file has no directory component +NVIDIA_DRIVER_X_MODS = \ + drivers/nvidia_drv.so \ + extensions/libglx.so.$(NVIDIA_DRIVER_VERSION) \ + libnvidia-wfb.so.$(NVIDIA_DRIVER_VERSION) + +endif # X drivers + +ifeq ($(BR2_PACKAGE_NVIDIA_DRIVER_CUDA),y) +NVIDIA_DRIVER_LIBS += \ + libcuda.so.$(NVIDIA_DRIVER_VERSION) \ + libnvidia-compiler.so.$(NVIDIA_DRIVER_VERSION) \ + libnvcuvid.so.$(NVIDIA_DRIVER_VERSION) \ + libnvidia-fatbinaryloader.so.$(NVIDIA_DRIVER_VERSION) \ + libnvidia-ptxjitcompiler.so.$(NVIDIA_DRIVER_VERSION) \ + libnvidia-encode.so.$(NVIDIA_DRIVER_VERSION) +ifeq ($(BR2_PACKAGE_NVIDIA_DRIVER_CUDA_PROGS),y) +NVIDIA_DRIVER_PROGS = nvidia-cuda-mps-control nvidia-cuda-mps-server +endif +endif + +ifeq ($(BR2_PACKAGE_NVIDIA_DRIVER_OPENCL),y) +NVIDIA_DRIVER_LIBS += \ + libOpenCL.so.1.0.0 \ + libnvidia-opencl.so.$(NVIDIA_DRIVER_VERSION) +NVIDIA_DRIVER_DEPENDENCIES += mesa3d-headers +NVIDIA_DRIVER_PROVIDES += libopencl +endif + +# Build and install the kernel modules if needed +ifeq ($(BR2_PACKAGE_NVIDIA_DRIVER_MODULE),y) + +NVIDIA_DRIVER_MODULES = nvidia nvidia-modeset nvidia-drm +ifeq ($(BR2_x86_64),y) +NVIDIA_DRIVER_MODULES += nvidia-uvm +endif + +# They can't do everything like everyone. They need those variables, +# because they don't recognise the usual variables set by the kernel +# build system. We also need to tell them what modules to build. +NVIDIA_DRIVER_MODULE_MAKE_OPTS = \ + NV_KERNEL_SOURCES="$(LINUX_DIR)" \ + NV_KERNEL_OUTPUT="$(LINUX_DIR)" \ + NV_KERNEL_MODULES="$(NVIDIA_DRIVER_MODULES)" + +NVIDIA_DRIVER_MODULE_SUBDIRS = kernel + +$(eval $(kernel-module)) + +endif # BR2_PACKAGE_NVIDIA_DRIVER_MODULE == y + +# The downloaded archive is in fact an auto-extract script. So, it can run +# virtually everywhere, and it is fine enough to provide useful options. +# Except it can't extract into an existing (even empty) directory. +define NVIDIA_DRIVER_EXTRACT_CMDS + $(SHELL) $(NVIDIA_DRIVER_DL_DIR)/$(NVIDIA_DRIVER_SOURCE) --extract-only --target \ + $(@D)/tmp-extract + chmod u+w -R $(@D) + mv $(@D)/tmp-extract/* $(@D)/tmp-extract/.manifest $(@D) + rm -rf $(@D)/tmp-extract +endef + +# Helper to install libraries +# $1: destination directory (target or staging) +# +# For all libraries, we install them and create a symlink using +# their SONAME, so we can link to them at runtime; we also create +# the no-version symlink, so we can link to them at build time. +define NVIDIA_DRIVER_INSTALL_LIBS + $(foreach lib,$(NVIDIA_DRIVER_LIBS),\ + $(INSTALL) -D -m 0644 $(@D)/$(lib) $(1)/usr/lib/$(notdir $(lib)) + libsoname="$$( $(TARGET_READELF) -d "$(@D)/$(lib)" \ + |sed -r -e '/.*\(SONAME\).*\[(.*)\]$$/!d; s//\1/;' )"; \ + if [ -n "$${libsoname}" -a "$${libsoname}" != "$(notdir $(lib))" ]; then \ + ln -sf $(notdir $(lib)) \ + $(1)/usr/lib/$${libsoname}; \ + fi + baseso=$(firstword $(subst .,$(space),$(notdir $(lib)))).so; \ + if [ -n "$${baseso}" -a "$${baseso}" != "$(notdir $(lib))" ]; then \ + ln -sf $(notdir $(lib)) $(1)/usr/lib/$${baseso}; \ + fi + ) +endef + +# For staging, install libraries and development files +define NVIDIA_DRIVER_INSTALL_STAGING_CMDS + $(call NVIDIA_DRIVER_INSTALL_LIBS,$(STAGING_DIR)) + $(NVIDIA_DRIVER_INSTALL_GL_DEV) +endef + +# For target, install libraries and X.org modules +define NVIDIA_DRIVER_INSTALL_TARGET_CMDS + $(call NVIDIA_DRIVER_INSTALL_LIBS,$(TARGET_DIR)) + $(foreach m,$(NVIDIA_DRIVER_X_MODS), \ + $(INSTALL) -D -m 0644 $(@D)/$(notdir $(m)) \ + $(TARGET_DIR)/usr/lib/xorg/modules/$(m) + ) + $(foreach p,$(NVIDIA_DRIVER_PROGS), \ + $(INSTALL) -D -m 0755 $(@D)/$(p) \ + $(TARGET_DIR)/usr/bin/$(p) + ) + $(NVIDIA_DRIVER_INSTALL_KERNEL_MODULE) +endef + +$(eval $(generic-package)) diff --git a/package/nvidia-modprobe/Config.in b/package/nvidia-modprobe/Config.in new file mode 100644 index 00000000..4e287bc7 --- /dev/null +++ b/package/nvidia-modprobe/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_NVIDIA_MODPROBE + bool "nvidia-modprobe" + depends on BR2_USE_MMU # fork() + help + nvidia-modprobe package adds a utility and headers for + probing the NVIDIA hardware at runtime. + + https://github.com/NVIDIA/nvidia-modprobe diff --git a/package/nvidia-modprobe/nvidia-modprobe.hash b/package/nvidia-modprobe/nvidia-modprobe.hash new file mode 100644 index 00000000..99908680 --- /dev/null +++ b/package/nvidia-modprobe/nvidia-modprobe.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 396b4102d3075a2dee3024652fae206a1b38ace54b8efb1e2c20757a11ec19f1 nvidia-modprobe-450.57.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/nvidia-modprobe/nvidia-modprobe.mk b/package/nvidia-modprobe/nvidia-modprobe.mk new file mode 100644 index 00000000..75d416b3 --- /dev/null +++ b/package/nvidia-modprobe/nvidia-modprobe.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# nvidia-modprobe +# +################################################################################ + +NVIDIA_MODPROBE_VERSION = 450.57 +NVIDIA_MODPROBE_SITE = $(call github,NVIDIA,nvidia-modprobe,$(NVIDIA_MODPROBE_VERSION)) +NVIDIA_MODPROBE_LICENSE = GPL-2.0 +NVIDIA_MODPROBE_LICENSE_FILES = COPYING + +define NVIDIA_MODPROBE_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + OUTPUTDIR=. ./nvidia-modprobe.unstripped +endef + +define NVIDIA_MODPROBE_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 $(@D)/nvidia-modprobe.unstripped \ + $(TARGET_DIR)/usr/bin/nvidia-modprobe +endef + +$(eval $(generic-package)) diff --git a/package/nvme/Config.in b/package/nvme/Config.in new file mode 100644 index 00000000..dd8655fa --- /dev/null +++ b/package/nvme/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_NVME + bool "nvme" + help + NVME utility, a utility for interacting with standard NVM + Express (optimized PCI Express SSD interface) devices. + + https://github.com/linux-nvme/nvme-cli diff --git a/package/nvme/nvme.hash b/package/nvme/nvme.hash new file mode 100644 index 00000000..a7ce51ca --- /dev/null +++ b/package/nvme/nvme.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 a75270e65a4a7a6add48f748ba216d8f68d78f90f8cb77e88e9753b74d527991 nvme-1.12.tar.gz +sha256 a45d0bb572ed792ed34627a72621834b3ba92aab6e2cc4e04301dee7a728d753 LICENSE diff --git a/package/nvme/nvme.mk b/package/nvme/nvme.mk new file mode 100644 index 00000000..53f9dff7 --- /dev/null +++ b/package/nvme/nvme.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# nvme +# +################################################################################ + +NVME_VERSION = 1.12 +NVME_SITE = $(call github,linux-nvme,nvme-cli,v$(NVME_VERSION)) +NVME_LICENSE = GPL-2.0+ +NVME_LICENSE_FILES = LICENSE + +# Yes, LIBUUID=0 means libuuid support enabled. +# LIBUUID=1 means libuuid support disabled. +ifeq ($(BR2_PACKAGE_UTIL_LINUX_LIBUUID),y) +NVME_DEPENDENCIES += util-linux +NVME_MAKE_OPTS += LIBUUID=0 +else +NVME_MAKE_OPTS += LIBUUID=1 +endif + +# Yes, HAVE_SYSTEMD=0 means systemd support enabled. +# HAVE_SYSTEMD=1 means systemd support disabled. +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +NVME_DEPENDENCIES += systemd +NVME_MAKE_OPTS += HAVE_SYSTEMD=0 +else +NVME_MAKE_OPTS += HAVE_SYSTEMD=1 +endif + +define NVME_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) \ + $(NVME_MAKE_OPTS) -C $(@D) +endef + +define NVME_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(NVME_MAKE_OPTS) -C $(@D) \ + DESTDIR=$(TARGET_DIR) PREFIX=/usr install-bin +endef + +$(eval $(generic-package)) diff --git a/package/obsidian-cursors/Config.in b/package/obsidian-cursors/Config.in new file mode 100644 index 00000000..49ec3101 --- /dev/null +++ b/package/obsidian-cursors/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_OBSIDIAN_CURSORS + bool "obsidian-cursors" + help + Obsidian Cursors is a shiny and clean cursor set. + + http://kde-look.org/content/show.php/Obsidian+Cursors?content=73135 diff --git a/package/obsidian-cursors/obsidian-cursors.hash b/package/obsidian-cursors/obsidian-cursors.hash new file mode 100644 index 00000000..8f1775e8 --- /dev/null +++ b/package/obsidian-cursors/obsidian-cursors.hash @@ -0,0 +1,2 @@ +# Locally calculated +sha256 3d38fe875f6feae8b7772e02cfda530fcf669479807915cd2c12c149da17cfb9 73135-Obsidian.tar.bz2 diff --git a/package/obsidian-cursors/obsidian-cursors.mk b/package/obsidian-cursors/obsidian-cursors.mk new file mode 100644 index 00000000..87a8d62f --- /dev/null +++ b/package/obsidian-cursors/obsidian-cursors.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# obsidian-cursors +# +################################################################################ + +OBSIDIAN_CURSORS_VERSION = 1.0 +OBSIDIAN_CURSORS_SITE = http://kde-look.org/CONTENT/content-files +OBSIDIAN_CURSORS_SOURCE = 73135-Obsidian.tar.bz2 +OBSIDIAN_CURSORS_LICENSE = GPL + +define OBSIDIAN_CURSORS_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/usr/share/cursors/xorg-x11/Obsidian + cp -a $(@D)/cursors \ + $(TARGET_DIR)/usr/share/cursors/xorg-x11/Obsidian +endef + +$(eval $(generic-package)) diff --git a/package/ocf-linux/ocf-linux.hash b/package/ocf-linux/ocf-linux.hash new file mode 100644 index 00000000..0bd0ea19 --- /dev/null +++ b/package/ocf-linux/ocf-linux.hash @@ -0,0 +1,2 @@ +# Locally computed: +sha256 5113609d2c2c43fde962bec1238fe5a81211a751ebb0337b54a9804d40cfef53 ocf-linux-20120127.tar.gz diff --git a/package/ocf-linux/ocf-linux.mk b/package/ocf-linux/ocf-linux.mk new file mode 100644 index 00000000..01854fa7 --- /dev/null +++ b/package/ocf-linux/ocf-linux.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# ocf-linux +# +################################################################################ + +OCF_LINUX_VERSION = 20120127 +OCF_LINUX_SITE = http://downloads.sourceforge.net/project/ocf-linux/ocf-linux/$(OCF_LINUX_VERSION) +OCF_LINUX_INSTALL_STAGING = YES + +OCF_LINUX_PROVIDES = cryptodev + +OCF_LINUX_MODULE_SUBDIRS = ocf +OCF_LINUX_MODULE_MAKE_OPTS = \ + CONFIG_OCF_OCF=m \ + CONFIG_OCF_CRYPTOSOFT=m \ + CONFIG_OCF_BENCH=m \ + CONFIG_OCF_OCFNULL=m + +define OCF_LINUX_INSTALL_STAGING_CMDS + $(INSTALL) -D -m 644 $(@D)/ocf/cryptodev.h \ + $(STAGING_DIR)/usr/include/crypto/cryptodev.h +endef + +$(eval $(kernel-module)) +$(eval $(generic-package)) diff --git a/package/ocrad/Config.in b/package/ocrad/Config.in new file mode 100644 index 00000000..38d37c61 --- /dev/null +++ b/package/ocrad/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_OCRAD + bool "ocrad" + depends on BR2_INSTALL_LIBSTDCPP + help + GNU Ocrad is an OCR (Optical Character Recognition) program + based on a feature extraction method. + It reads images in pbm (bitmap), pgm (greyscale) or + ppm (color) formats and produces text in byte (8-bit) or + UTF-8 formats. + + http://www.gnu.org/software/ocrad/ + +comment "ocrad needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/ocrad/ocrad.hash b/package/ocrad/ocrad.hash new file mode 100644 index 00000000..7ae38c30 --- /dev/null +++ b/package/ocrad/ocrad.hash @@ -0,0 +1,3 @@ +# Locally calculated after checking pgp signature +sha256 a9bfe67e9a040907aff5640dca56392476b6a89e48e37dc94ba846c5b6733b36 ocrad-0.27.tar.lz +sha256 3d77c1a58fbde5ddba612d1fe09965e20a3804953eca12e8c1892298bb8a5eef COPYING diff --git a/package/ocrad/ocrad.mk b/package/ocrad/ocrad.mk new file mode 100644 index 00000000..e037a081 --- /dev/null +++ b/package/ocrad/ocrad.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# ocrad +# +################################################################################ + +OCRAD_VERSION = 0.27 +OCRAD_SOURCE = ocrad-$(OCRAD_VERSION).tar.lz +OCRAD_SITE = $(BR2_GNU_MIRROR)/ocrad +OCRAD_LICENSE = GPL-3.0+ +OCRAD_LICENSE_FILES = COPYING +OCRAD_INSTALL_STAGING = YES + +# This is not a true autotools package. +define OCRAD_CONFIGURE_CMDS + cd $(@D) && \ + $(TARGET_MAKE_ENV) ./configure --prefix=/usr --sysconfdir=/etc $(TARGET_CONFIGURE_OPTS) +endef + +define OCRAD_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) +endef + +define OCRAD_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install +endef + +define OCRAD_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/odb/0001-tm.h-include-in-gcc.hxx-appears-to-be-no-longer-nece.patch b/package/odb/0001-tm.h-include-in-gcc.hxx-appears-to-be-no-longer-nece.patch new file mode 100644 index 00000000..0216038f --- /dev/null +++ b/package/odb/0001-tm.h-include-in-gcc.hxx-appears-to-be-no-longer-nece.patch @@ -0,0 +1,30 @@ +From f0bbc17aeed1b636782a4b92e8191d90f310d0a2 Mon Sep 17 00:00:00 2001 +From: Boris Kolpackov +Date: Mon, 1 Jun 2015 19:08:33 +0200 +Subject: [PATCH] include in gcc.hxx appears to be no longer necessary + +On MIPS this file pulls in enum processor which conflicts with +our class processor. + +[Upstream: f0bbc17aeed1b636782a4b92e8191d90f310d0a2] +Signed-off-by: Kamel Bouhara +--- + odb/gcc.hxx | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/odb/gcc.hxx b/odb/gcc.hxx +index 504b59b..c953047 100644 +--- a/odb/gcc.hxx ++++ b/odb/gcc.hxx +@@ -46,8 +46,6 @@ extern "C" + #include + #include + +-#include +- + #include + #include + +-- +2.26.2 + diff --git a/package/odb/0002-Remove-gratuitous-classes.patch b/package/odb/0002-Remove-gratuitous-classes.patch new file mode 100644 index 00000000..f2d9303e --- /dev/null +++ b/package/odb/0002-Remove-gratuitous-classes.patch @@ -0,0 +1,444 @@ +From 5486c8c85b9cfb92232518b2fadf6d8ed7b332d5 Mon Sep 17 00:00:00 2001 +From: Boris Kolpackov +Date: Wed, 3 Jun 2015 21:35:43 +0200 +Subject: [PATCH] Remove gratuitous classes + +In the process also get rid of global class processor which conflicts +with enum processor on MIPS. + +[Upstream: bbc39ffe31c67506b4c03fc56fa3adcb925b6325] +Signed-off-by: Kamel Bouhara +--- + odb/context.hxx | 3 ++- + odb/generator.cxx | 24 ++++++++++++------------ + odb/generator.hxx | 26 ++++++++------------------ + odb/plugin.cxx | 18 +++++++----------- + odb/processor.cxx | 4 ++-- + odb/processor.hxx | 22 ++++++---------------- + odb/relational/validator.cxx | 6 +++--- + odb/relational/validator.hxx | 29 +++++++++-------------------- + odb/validator.cxx | 13 ++++++------- + odb/validator.hxx | 28 +++++++++------------------- + 10 files changed, 64 insertions(+), 109 deletions(-) + +diff --git a/odb/context.hxx b/odb/context.hxx +index 1cf002a..351bc61 100644 +--- a/odb/context.hxx ++++ b/odb/context.hxx +@@ -41,7 +41,8 @@ typedef cutl::re::format regex_format; + + typedef std::vector regex_mapping; + +-// ++// Generic exception thrown to indicate a failure when diagnostics ++// has already been issued (to stderr). + // + class operation_failed {}; + +diff --git a/odb/generator.cxx b/odb/generator.cxx +index e165faf..6aa5151 100644 +--- a/odb/generator.cxx ++++ b/odb/generator.cxx +@@ -58,7 +58,7 @@ namespace + if (!ifs.is_open ()) + { + cerr << "error: unable to open '" << p << "' in read mode" << endl; +- throw generator::failed (); ++ throw generator_failed (); + } + } + +@@ -70,7 +70,7 @@ namespace + if (!ofs.is_open ()) + { + cerr << "error: unable to open '" << p << "' in write mode" << endl; +- throw generator::failed (); ++ throw generator_failed (); + } + } + +@@ -118,7 +118,7 @@ namespace + } + } + +-void generator:: ++void + generate (options const& ops, + features& fts, + semantics::unit& unit, +@@ -259,7 +259,7 @@ generate (options const& ops, + cerr << in_log_path << ": error: wrong database '" << + old_changelog->database () << "', expected '" << db << + "'" << endl; +- throw generator::failed (); ++ throw generator_failed (); + } + + string sn (ops.schema_name ()[db]); +@@ -268,18 +268,18 @@ generate (options const& ops, + cerr << in_log_path << ": error: wrong schema name '" << + old_changelog->schema_name () << "', expected '" << sn << + "'" << endl; +- throw generator::failed (); ++ throw generator_failed (); + } + } + catch (const ios_base::failure& e) + { + cerr << in_log_path << ": read failure" << endl; +- throw failed (); ++ throw generator_failed (); + } + catch (const xml::parsing& e) + { + cerr << e.what () << endl; +- throw failed (); ++ throw generator_failed (); + } + } + +@@ -976,12 +976,12 @@ generate (options const& ops, + catch (const ios_base::failure& e) + { + cerr << out_log_path << ": write failure" << endl; +- throw failed (); ++ throw generator_failed (); + } + catch (const xml::serialization& e) + { + cerr << e.what () << endl; +- throw failed (); ++ throw generator_failed (); + } + } + +@@ -998,18 +998,18 @@ generate (options const& ops, + { + // Code generation failed. Diagnostics has already been issued. + // +- throw failed (); ++ throw generator_failed (); + } + catch (semantics::invalid_path const& e) + { + cerr << "error: '" << e.path () << "' is not a valid filesystem path" + << endl; +- throw failed (); ++ throw generator_failed (); + } + catch (fs::error const&) + { + // Auto-removal of generated files failed. Ignore it. + // +- throw failed (); ++ throw generator_failed (); + } + } +diff --git a/odb/generator.hxx b/odb/generator.hxx +index ce49295..e83d94d 100644 +--- a/odb/generator.hxx ++++ b/odb/generator.hxx +@@ -11,23 +11,13 @@ + #include + #include + +-class generator +-{ +-public: +- class failed {}; +- +- void +- generate (options const&, +- features&, +- semantics::unit&, +- semantics::path const& file, +- std::vector const& inputs); +- +- generator () {} +- +-private: +- generator (generator const&); +- generator& operator= (generator const&); +-}; ++class generator_failed {}; ++ ++void ++generate (options const&, ++ features&, ++ semantics::unit&, ++ semantics::path const& file, ++ std::vector const& inputs); + + #endif // ODB_GENERATOR_HXX +diff --git a/odb/plugin.cxx b/odb/plugin.cxx +index e32f225..51f0cb1 100644 +--- a/odb/plugin.cxx ++++ b/odb/plugin.cxx +@@ -199,27 +199,23 @@ gate_callback (void*, void*) + parser p (*options_, loc_pragmas_, ns_loc_pragmas_, decl_pragmas_); + auto_ptr u (p.parse (global_namespace, file_)); + +- + features f; + + // Validate, pass 1. + // +- validator v; +- v.validate (*options_, f, *u, file_, 1); ++ validate (*options_, f, *u, file_, 1); + + // Process. + // +- processor pr; +- pr.process (*options_, f, *u, file_); ++ process (*options_, f, *u, file_); + + // Validate, pass 2. + // +- v.validate (*options_, f, *u, file_, 2); ++ validate (*options_, f, *u, file_, 2); + + // Generate. + // +- generator g; +- g.generate (*options_, f, *u, file_, inputs_); ++ generate (*options_, f, *u, file_, inputs_); + } + catch (cutl::re::format const& e) + { +@@ -239,19 +235,19 @@ gate_callback (void*, void*) + // + r = 1; + } +- catch (validator::failed const&) ++ catch (validator_failed const&) + { + // Diagnostics has aready been issued. + // + r = 1; + } +- catch (processor::failed const&) ++ catch (processor_failed const&) + { + // Diagnostics has aready been issued. + // + r = 1; + } +- catch (generator::failed const&) ++ catch (generator_failed const&) + { + // Diagnostics has aready been issued. + // +diff --git a/odb/processor.cxx b/odb/processor.cxx +index a808a52..3a2cb1d 100644 +--- a/odb/processor.cxx ++++ b/odb/processor.cxx +@@ -3064,7 +3064,7 @@ namespace + }; + } + +-void processor:: ++void + process (options const& ops, + features& f, + semantics::unit& unit, +@@ -3120,6 +3120,6 @@ process (options const& ops, + { + // Processing failed. Diagnostics has already been issued. + // +- throw failed (); ++ throw processor_failed (); + } + } +diff --git a/odb/processor.hxx b/odb/processor.hxx +index 602b999..e62dd25 100644 +--- a/odb/processor.hxx ++++ b/odb/processor.hxx +@@ -9,22 +9,12 @@ + #include + #include + +-class processor +-{ +-public: +- class failed {}; ++class processor_failed {}; + +- void +- process (options const&, +- features&, +- semantics::unit&, +- semantics::path const&); +- +- processor () {} +- +-private: +- processor (processor const&); +- processor& operator= (processor const&); +-}; ++void ++process (options const&, ++ features&, ++ semantics::unit&, ++ semantics::path const&); + + #endif // ODB_PROCESSOR_HXX +diff --git a/odb/relational/validator.cxx b/odb/relational/validator.cxx +index 1d51c9a..47f089c 100644 +--- a/odb/relational/validator.cxx ++++ b/odb/relational/validator.cxx +@@ -528,7 +528,7 @@ namespace relational + }; + } + +- void validator:: ++ void + validate (options const&, + features&, + semantics::unit& u, +@@ -608,7 +608,7 @@ namespace relational + } + + if (!valid) +- throw failed (); ++ throw operation_failed (); + + if (pass == 1) + { +@@ -636,6 +636,6 @@ namespace relational + } + + if (!valid) +- throw failed (); ++ throw operation_failed (); + } + } +diff --git a/odb/relational/validator.hxx b/odb/relational/validator.hxx +index f0ede53..93360c3 100644 +--- a/odb/relational/validator.hxx ++++ b/odb/relational/validator.hxx +@@ -11,26 +11,15 @@ + + namespace relational + { +- class validator +- { +- public: +- struct failed {}; +- +- // The first pass is performed before processing. The second -- after. +- // +- void +- validate (options const&, +- features&, +- semantics::unit&, +- semantics::path const&, +- unsigned short pass); +- +- validator () {} +- +- private: +- validator (validator const&); +- validator& operator= (validator const&); +- }; ++ // The first pass is performed before processing. The second -- after. ++ // Throws operation_failed to signal a failure. ++ // ++ void ++ validate (options const&, ++ features&, ++ semantics::unit&, ++ semantics::path const&, ++ unsigned short pass); + } + + #endif // ODB_RELATIONAL_VALIDATOR_HXX +diff --git a/odb/validator.cxx b/odb/validator.cxx +index e80f4d8..91d91e5 100644 +--- a/odb/validator.cxx ++++ b/odb/validator.cxx +@@ -1457,7 +1457,7 @@ namespace + }; + } + +-void validator:: ++void + validate (options const& ops, + features& f, + semantics::unit& u, +@@ -1506,7 +1506,7 @@ validate (options const& ops, + } + + if (!valid) +- throw failed (); ++ throw validator_failed (); + + auto_ptr ctx (create_context (cerr, u, ops, f, 0)); + +@@ -1559,7 +1559,7 @@ validate (options const& ops, + } + + if (!valid) +- throw failed (); ++ throw validator_failed (); + + switch (db) + { +@@ -1575,12 +1575,11 @@ validate (options const& ops, + { + try + { +- relational::validator v; +- v.validate (ops, f, u, p, pass); ++ relational::validate (ops, f, u, p, pass); + } +- catch (relational::validator::failed const&) ++ catch (operation_failed const&) + { +- throw failed (); ++ throw validator_failed (); + } + + break; +diff --git a/odb/validator.hxx b/odb/validator.hxx +index f913049..3ffa470 100644 +--- a/odb/validator.hxx ++++ b/odb/validator.hxx +@@ -9,25 +9,15 @@ + #include + #include + +-class validator +-{ +-public: +- struct failed {}; ++class validator_failed {}; + +- // The first pass is performed before processing. The second -- after. +- // +- void +- validate (options const&, +- features&, +- semantics::unit&, +- semantics::path const&, +- unsigned short pass); +- +- validator () {} +- +-private: +- validator (validator const&); +- validator& operator= (validator const&); +-}; ++// The first pass is performed before processing. The second -- after. ++// ++void ++validate (options const&, ++ features&, ++ semantics::unit&, ++ semantics::path const&, ++ unsigned short pass); + + #endif // ODB_VALIDATOR_HXX +-- +2.25.0 + diff --git a/package/odb/0003-Initial-work-to-make-ODB-compatible-with-GCC-6.patch b/package/odb/0003-Initial-work-to-make-ODB-compatible-with-GCC-6.patch new file mode 100644 index 00000000..e2b97cca --- /dev/null +++ b/package/odb/0003-Initial-work-to-make-ODB-compatible-with-GCC-6.patch @@ -0,0 +1,312 @@ +From bf389fd5185143847b1d91aed423e79c322dba51 Mon Sep 17 00:00:00 2001 +From: Boris Kolpackov +Date: Fri, 5 Feb 2016 16:01:42 +0200 +Subject: [PATCH] Initial work to make ODB compatible with GCC 6 + +[Upstream: 511dcf67322ad87fb32f97d1cf7725c129e83898] +Signed-off-by: Kamel Bouhara +--- + odb/cxx-lexer.cxx | 4 ++++ + odb/gcc-fwd.hxx | 23 ++++++++++++++++++++++- + odb/gcc.hxx | 10 ++++++++++ + odb/include.cxx | 31 +++++++++++++++++++++---------- + odb/parser.cxx | 8 ++++---- + odb/plugin.cxx | 29 +++++++++++++++++++++++++++-- + odb/semantics/elements.cxx | 4 ++-- + 7 files changed, 90 insertions(+), 19 deletions(-) + +diff --git a/odb/cxx-lexer.cxx b/odb/cxx-lexer.cxx +index 7029c7e..64df296 100644 +--- a/odb/cxx-lexer.cxx ++++ b/odb/cxx-lexer.cxx +@@ -135,8 +135,12 @@ cpp_error_callback ( + #if BUILDING_GCC_MAJOR > 4 || BUILDING_GCC_MAJOR == 4 && BUILDING_GCC_MINOR > 5 + int /*reason*/, // Added in GCC 4.6.0. + #endif ++#if BUILDING_GCC_MAJOR <= 5 + location_t, + unsigned int, ++#else ++ rich_location*, ++#endif + char const* msg, + va_list *ap) + { +diff --git a/odb/gcc-fwd.hxx b/odb/gcc-fwd.hxx +index a120f05..618b106 100644 +--- a/odb/gcc-fwd.hxx ++++ b/odb/gcc-fwd.hxx +@@ -7,6 +7,24 @@ + + #include + ++#if BUILDING_GCC_MAJOR >= 6 ++ ++// If we include here, it pulls in all kinds of GCC trouble that ++// "poisons" standard C/C++ declarations; see safe-ctype.h. So instead we ++// are going to "exclude" safe-ctype.h. To compensate, however, we will ++// include it first thing in gcc.hxx. ++// ++# include ++# define SAFE_CTYPE_H ++# include ++# undef SAFE_CTYPE_H ++# include ++ ++typedef unsigned int source_location; // ++typedef source_location location_t; // ++ ++#else // GCC < 6 ++ + #if BUILDING_GCC_MAJOR > 4 || BUILDING_GCC_MAJOR == 4 && BUILDING_GCC_MINOR > 8 + # include // CHAR_BIT + # include +@@ -33,6 +51,9 @@ extern "C" + + typedef unsigned int source_location; // + typedef source_location location_t; // +-} ++ ++} // extern "C" ++ ++#endif + + #endif // ODB_GCC_FWD_HXX +diff --git a/odb/gcc.hxx b/odb/gcc.hxx +index c953047..858d685 100644 +--- a/odb/gcc.hxx ++++ b/odb/gcc.hxx +@@ -7,6 +7,10 @@ + + #include + ++#if BUILDING_GCC_MAJOR >= 6 ++# include // See gcc-fwd.hxx. ++#endif ++ + // GCC header includes to get the plugin and parse tree declarations. + // The order is important and doesn't follow any kind of logic. + // +@@ -145,4 +149,10 @@ gcc_tree_code_name (gcc_tree_code_type tc) {return tree_code_name[tc];} + #define DECL_CHAIN(x) TREE_CHAIN(x) + #endif + ++// In GCC 6, ANON_AGGRNAME_P became anon_aggrname_p(). ++// ++#if BUILDING_GCC_MAJOR < 6 ++# define anon_aggrname_p(X) ANON_AGGRNAME_P(X) ++#endif ++ + #endif // ODB_GCC_HXX +diff --git a/odb/include.cxx b/odb/include.cxx +index c397993..08c93ce 100644 +--- a/odb/include.cxx ++++ b/odb/include.cxx +@@ -30,9 +30,18 @@ namespace + path path_; + }; + ++#if BUILDING_GCC_MAJOR >= 6 ++ typedef line_map_ordinary line_map_type; ++#else ++ typedef line_map line_map_type; ++# ifndef linemap_check_ordinary ++# define linemap_check_ordinary(X) (X) ++# endif ++#endif ++ + struct includes + { +- typedef std::map map_type; ++ typedef std::map map_type; + bool trailing; // Included at the beginning or at the end of the main file. + map_type map; + }; +@@ -144,7 +153,9 @@ namespace + // + if (l > BUILTINS_LOCATION) + { +- line_map const* lm (linemap_lookup (line_table, l)); ++ line_map_type const* lm ( ++ linemap_check_ordinary ( ++ linemap_lookup (line_table, l))); + + if (lm != 0 && !MAIN_FILE_P (lm)) + { +@@ -537,20 +548,20 @@ namespace + // + #if BUILDING_GCC_MAJOR == 4 && BUILDING_GCC_MINOR <= 6 + size_t used (line_table->used); +- line_map const* maps (line_table->maps); ++ line_map_type const* maps (line_table->maps); + #else + size_t used (line_table->info_ordinary.used); +- line_map const* maps (line_table->info_ordinary.maps); ++ line_map_type const* maps (line_table->info_ordinary.maps); + #endif + + for (size_t i (0); i < used; ++i) + { +- line_map const* m (maps + i); ++ line_map_type const* m (maps + i); + + if (MAIN_FILE_P (m) || m->reason != LC_ENTER) + continue; + +- line_map const* ifm (INCLUDED_FROM (line_table, m)); ++ line_map_type const* ifm (INCLUDED_FROM (line_table, m)); + + #if BUILDING_GCC_MAJOR == 4 && BUILDING_GCC_MINOR <= 6 + path f (m->to_file); +@@ -580,7 +591,7 @@ namespace + for (includes::iterator j (i->second.begin ()); + j != i->second.end (); ++j) + { +- line_map const* lm (j->first); ++ line_map_type const* lm (j->first); + cerr << '\t' << lm->to_file << ":" << LAST_SOURCE_LINE (lm) << endl; + } + */ +@@ -589,13 +600,13 @@ namespace + // it is preferred over all others. Use the first one if there are + // several. + // +- line_map const* main_lm (0); ++ line_map_type const* main_lm (0); + include_directive* main_inc (0); + + for (includes::map_type::iterator j (i->second.map.begin ()); + j != i->second.map.end (); ++j) + { +- line_map const* lm (j->first); ++ line_map_type const* lm (j->first); + + if (MAIN_FILE_P (lm)) + { +@@ -636,7 +647,7 @@ namespace + for (includes::map_type::iterator j (i->second.map.begin ()); + j != i->second.map.end (); ++j) + { +- line_map const* lm (j->first); ++ line_map_type const* lm (j->first); + + #if BUILDING_GCC_MAJOR == 4 && BUILDING_GCC_MINOR <= 6 + string f (lm->to_file); +diff --git a/odb/parser.cxx b/odb/parser.cxx +index a8e6a6a..feda9d4 100644 +--- a/odb/parser.cxx ++++ b/odb/parser.cxx +@@ -1044,14 +1044,14 @@ emit_type_decl (tree decl) + // says that in typedef struct {} S; S becomes struct's + // name. + // +- if (ANON_AGGRNAME_P (decl_name)) ++ if (anon_aggrname_p (decl_name)) + { + tree d (TYPE_NAME (t)); + + if (d != NULL_TREE && + !DECL_ARTIFICIAL (d) && + DECL_NAME (d) != NULL_TREE && +- !ANON_AGGRNAME_P (DECL_NAME (d))) ++ !anon_aggrname_p (DECL_NAME (d))) + { + decl = d; + decl_name = DECL_NAME (decl); +@@ -1668,7 +1668,7 @@ create_type (tree t, + ts << "start anon/stub " << gcc_tree_code_name(tc) << " at " + << file << ":" << line << endl; + +- if (d == NULL_TREE || ANON_AGGRNAME_P (DECL_NAME (d))) ++ if (d == NULL_TREE || anon_aggrname_p (DECL_NAME (d))) + { + if (tc == RECORD_TYPE) + r = &emit_class (t, file, line, clmn); +@@ -1765,7 +1765,7 @@ create_type (tree t, + ts << "start anon/stub " << gcc_tree_code_name(tc) << " at " + << file << ":" << line << endl; + +- if (d == NULL_TREE || ANON_AGGRNAME_P (DECL_NAME (d))) ++ if (d == NULL_TREE || anon_aggrname_p (DECL_NAME (d))) + { + r = &emit_enum (t, access, file, line, clmn); + } +diff --git a/odb/plugin.cxx b/odb/plugin.cxx +index 51f0cb1..779faed 100644 +--- a/odb/plugin.cxx ++++ b/odb/plugin.cxx +@@ -45,14 +45,28 @@ path file_; // File being compiled. + paths inputs_; // List of input files in at-once mode or just file_. + + bool (*cpp_error_prev) ( +- cpp_reader*, int, int, location_t, unsigned int, const char*, va_list*); ++ cpp_reader*, ++ int, ++ int, ++#if BUILDING_GCC_MAJOR >= 6 ++ rich_location*, ++#else ++ location_t, ++ unsigned int, ++#endif ++ const char*, ++ va_list*); + + static bool + cpp_error_filter (cpp_reader* r, + int level, + int reason, ++#if BUILDING_GCC_MAJOR >= 6 ++ rich_location* l, ++#else + location_t l, + unsigned int column_override, ++#endif + const char* msg, + va_list* ap) + { +@@ -66,7 +80,18 @@ cpp_error_filter (cpp_reader* r, + if (strstr (msg, "#pragma once") != 0) + return true; + +- return cpp_error_prev (r, level, reason, l, column_override, msg, ap); ++ return cpp_error_prev ( ++ r, ++ level, ++ reason, ++#if BUILDING_GCC_MAJOR >= 6 ++ l, ++#else ++ l, ++ column_override, ++#endif ++ msg, ++ ap); + } + + // A prefix of the _cpp_file struct. This struct is not part of the +diff --git a/odb/semantics/elements.cxx b/odb/semantics/elements.cxx +index 21e3260..399d5e9 100644 +--- a/odb/semantics/elements.cxx ++++ b/odb/semantics/elements.cxx +@@ -59,7 +59,7 @@ namespace semantics + if (tree decl = TYPE_NAME (n)) + name = DECL_NAME (decl); + +- return name != 0 && ANON_AGGRNAME_P (name); ++ return name != 0 && anon_aggrname_p (name); + } + + return true; +@@ -108,7 +108,7 @@ namespace semantics + if (tree decl = TYPE_NAME (type)) + { + name = DECL_NAME (decl); +- if (name != 0 && ANON_AGGRNAME_P (name)) ++ if (name != 0 && anon_aggrname_p (name)) + return true; + + tree s (CP_DECL_CONTEXT (decl)); +-- +2.25.0 + diff --git a/package/odb/0004-Make-compilable-with-GCC-6-in-C-14-mode.patch b/package/odb/0004-Make-compilable-with-GCC-6-in-C-14-mode.patch new file mode 100644 index 00000000..57288af0 --- /dev/null +++ b/package/odb/0004-Make-compilable-with-GCC-6-in-C-14-mode.patch @@ -0,0 +1,48 @@ +From 4584b69c45b701c3689d6a974f1ee560a79a243e Mon Sep 17 00:00:00 2001 +From: Boris Kolpackov +Date: Mon, 8 Feb 2016 18:39:21 +0200 +Subject: [PATCH] Make compilable with GCC 6 in C++14 mode + +[Upstream: 61d13eb53ade9f30a64892a901401bda5e42c335] +Signed-off-by: Kamel Bouhara +--- + odb/gcc.hxx | 9 ++++++--- + odb/parser.cxx | 2 ++ + 2 files changed, 8 insertions(+), 3 deletions(-) + +diff --git a/odb/gcc.hxx b/odb/gcc.hxx +index 858d685..a22357d 100644 +--- a/odb/gcc.hxx ++++ b/odb/gcc.hxx +@@ -7,9 +7,12 @@ + + #include + +-#if BUILDING_GCC_MAJOR >= 6 +-# include // See gcc-fwd.hxx. +-#endif ++// Actually, let's keep it out. With it included we can compile in C++98 ++// but not in C++14 (GCC 6 default). ++// ++// #if BUILDING_GCC_MAJOR >= 6 ++// # include // See gcc-fwd.hxx. ++// #endif + + // GCC header includes to get the plugin and parse tree declarations. + // The order is important and doesn't follow any kind of logic. +diff --git a/odb/parser.cxx b/odb/parser.cxx +index feda9d4..a9d22fb 100644 +--- a/odb/parser.cxx ++++ b/odb/parser.cxx +@@ -1831,6 +1831,8 @@ create_type (tree t, + // the array type. In other words, we view it as "constant array" + // rather than "array of constant elements". + // ++ using semantics::array; // vs std::array. ++ + tree bt (TREE_TYPE (t)); + tree bt_mv (TYPE_MAIN_VARIANT (bt)); + type& bt_node (emit_type (bt_mv, access::public_, file, line, clmn)); +-- +2.25.0 + diff --git a/package/odb/0005-Fix-bug-in-GCC-6-input_location-translation.patch b/package/odb/0005-Fix-bug-in-GCC-6-input_location-translation.patch new file mode 100644 index 00000000..4e8c8f4f --- /dev/null +++ b/package/odb/0005-Fix-bug-in-GCC-6-input_location-translation.patch @@ -0,0 +1,34 @@ +From 029687831099bf1dcc944517f9e48af1db5b0361 Mon Sep 17 00:00:00 2001 +From: Boris Kolpackov +Date: Fri, 23 Dec 2016 10:18:01 +0200 +Subject: [PATCH] Fix bug in GCC 6 input_location translation + +[Upstream: ec777147024fde72e4411cc6b1e1e49f4a1d1804] +Signed-off-by: Kamel Bouhara +--- + odb/cxx-lexer.cxx | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/odb/cxx-lexer.cxx b/odb/cxx-lexer.cxx +index 64df296..ae045d9 100644 +--- a/odb/cxx-lexer.cxx ++++ b/odb/cxx-lexer.cxx +@@ -106,7 +106,15 @@ next (string& token, tree* node) + location_t cxx_pragma_lexer:: + location () const + { ++ // Starting from GCC 6 the input location seem to require the same ++ // translation as what we do in real_source_location(). ++ // ++#if BUILDING_GCC_MAJOR >= 6 ++ return linemap_resolve_location ( ++ line_table, input_location, LRK_MACRO_EXPANSION_POINT, 0); ++#else + return input_location; ++#endif + } + + string cxx_pragma_lexer:: +-- +2.25.0 + diff --git a/package/odb/0006-Adapt-to-changes-in-GCC-8.patch b/package/odb/0006-Adapt-to-changes-in-GCC-8.patch new file mode 100644 index 00000000..c0ef4e8b --- /dev/null +++ b/package/odb/0006-Adapt-to-changes-in-GCC-8.patch @@ -0,0 +1,228 @@ +From aca617685045b1984c19c415a474893407578394 Mon Sep 17 00:00:00 2001 +From: Boris Kolpackov +Date: Tue, 7 Nov 2017 14:58:43 +0200 +Subject: [PATCH] Adapt to changes in GCC 8 + +[Upstream: 356630ced28f3101e8e2d88e3c52f8d3008515c7] +Signed-off-by: Kamel Bouhara +--- + odb/cxx-lexer.cxx | 16 ++++++++++++++-- + odb/parser.cxx | 27 ++++++++++++++++++++++++++- + odb/processor.cxx | 30 ++++++++++++++++++++++-------- + odb/semantics/elements.cxx | 8 ++++++++ + odb/validator.cxx | 10 +++++++++- + 5 files changed, 79 insertions(+), 12 deletions(-) + +diff --git a/odb/cxx-lexer.cxx b/odb/cxx-lexer.cxx +index ae045d9..cfebbb5 100644 +--- a/odb/cxx-lexer.cxx ++++ b/odb/cxx-lexer.cxx +@@ -93,7 +93,13 @@ next (string& token, tree* node) + // See if this is a keyword using the C++ parser machinery and + // the current C++ dialect. + // +- if (*type_ == CPP_NAME && C_IS_RESERVED_WORD (*token_)) ++ if (*type_ == CPP_NAME && ++#if BUILDING_GCC_MAJOR >= 8 ++ IDENTIFIER_KEYWORD_P (*token_) ++#else ++ C_IS_RESERVED_WORD (*token_) ++#endif ++ ) + *type_ = CPP_KEYWORD; + + if (node != 0 && node != token_) +@@ -281,7 +287,13 @@ next (string& token, tree* node) + // + tree id (get_identifier (name)); + +- if (C_IS_RESERVED_WORD (id)) ++ if ( ++#if BUILDING_GCC_MAJOR >= 8 ++ IDENTIFIER_KEYWORD_P (id) ++#else ++ C_IS_RESERVED_WORD (id) ++#endif ++ ) + tt = CPP_KEYWORD; + + if (node != 0) +diff --git a/odb/parser.cxx b/odb/parser.cxx +index a9d22fb..927063b 100644 +--- a/odb/parser.cxx ++++ b/odb/parser.cxx +@@ -889,8 +889,23 @@ collect (tree ns) + + // Traverse namespaces. + // +- for (decl = level->namespaces; decl != NULL_TREE; decl = TREE_CHAIN (decl)) ++ for ( ++#if BUILDING_GCC_MAJOR >= 8 ++ decl = level->names; ++#else ++ decl = level->namespaces; ++#endif ++ decl != NULL_TREE; ++ decl = TREE_CHAIN (decl)) + { ++#if BUILDING_GCC_MAJOR >= 8 ++ // Now namespaces are interleaved with other declarations. In fact, we ++ // could probably collect everything in a single pass. ++ // ++ if (TREE_CODE (decl) != NAMESPACE_DECL) ++ continue; ++#endif ++ + if (!DECL_IS_BUILTIN (decl) || DECL_NAMESPACE_STD_P (decl)) + { + if (trace) +@@ -960,9 +975,15 @@ emit () + // approximation for this namespace origin. Also resolve + // the tree node for this namespace. + // ++#if BUILDING_GCC_MAJOR >= 8 ++ tree tree_node ( ++ get_namespace_binding ( ++ scope_->tree_node (), get_identifier (n.c_str ()))); ++#else + tree tree_node ( + namespace_binding ( + get_identifier (n.c_str ()), scope_->tree_node ())); ++#endif + + namespace_& node (unit_->new_node (f, l, c, tree_node)); + unit_->new_edge (*scope_, node, n); +@@ -2218,7 +2239,11 @@ fq_scope (tree decl) + + // If this is an inline namespace, pretend it doesn't exist. + // ++#if BUILDING_GCC_MAJOR >= 8 ++ if (!is_nested_namespace (prev, scope, true)) ++#else + if (!is_associated_namespace (prev, scope)) ++#endif + { + tree n = DECL_NAME (scope); + +diff --git a/odb/processor.cxx b/odb/processor.cxx +index 3a2cb1d..bea3624 100644 +--- a/odb/processor.cxx ++++ b/odb/processor.cxx +@@ -423,12 +423,17 @@ namespace + + // OVL_* macros work for both FUNCTION_DECL and OVERLOAD. + // +- for (tree o (BASELINK_FUNCTIONS (decl)); +- o != 0; +- o = OVL_NEXT (o)) ++#if BUILDING_GCC_MAJOR >= 8 ++ for (ovl_iterator i (BASELINK_FUNCTIONS (decl)); i; ++i) ++#else ++ for (tree o (BASELINK_FUNCTIONS (decl)); o != 0; o = OVL_NEXT (o)) ++#endif + { ++#if BUILDING_GCC_MAJOR >= 8 ++ tree f (*i); ++#else + tree f (OVL_CURRENT (o)); +- ++#endif + // We are only interested in public non-static member + // functions. Note that TREE_PUBLIC() returns something + // other than what we need. +@@ -530,12 +535,17 @@ namespace + { + // OVL_* macros work for both FUNCTION_DECL and OVERLOAD. + // +- for (tree o (BASELINK_FUNCTIONS (decl)); +- o != 0; +- o = OVL_NEXT (o)) ++#if BUILDING_GCC_MAJOR >= 8 ++ for (ovl_iterator i (BASELINK_FUNCTIONS (decl)); i; ++i) ++#else ++ for (tree o (BASELINK_FUNCTIONS (decl)); o != 0; o = OVL_NEXT (o)) ++#endif + { ++#if BUILDING_GCC_MAJOR >= 8 ++ tree f (*i); ++#else + tree f (OVL_CURRENT (o)); +- ++#endif + // We are only interested in non-static member functions. + // + if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (f)) +@@ -2934,7 +2944,11 @@ namespace + { + tree prev (CP_DECL_CONTEXT (scope)); + ++#if BUILDING_GCC_MAJOR >= 8 ++ if (!is_nested_namespace (prev, scope, true)) ++#else + if (!is_associated_namespace (prev, scope)) ++#endif + break; + + scope = prev; +diff --git a/odb/semantics/elements.cxx b/odb/semantics/elements.cxx +index 399d5e9..4c380d8 100644 +--- a/odb/semantics/elements.cxx ++++ b/odb/semantics/elements.cxx +@@ -126,7 +126,11 @@ namespace semantics + { + tree prev (CP_DECL_CONTEXT (s)); + ++#if BUILDING_GCC_MAJOR >= 8 ++ if (!is_nested_namespace (prev, s, true)) ++#else + if (!is_associated_namespace (prev, s)) ++#endif + break; + + s = prev; +@@ -223,7 +227,11 @@ namespace semantics + { + // Check if this is an inline namespace and skip it if so. + // ++#if BUILDING_GCC_MAJOR >= 8 ++ if (is_nested_namespace (ns, new_ns, true)) ++#else + if (is_associated_namespace (ns, new_ns)) ++#endif + { + // Skip also the following scope operator. Strictly speaking + // there could be none (i.e., this is a name of an inline +diff --git a/odb/validator.cxx b/odb/validator.cxx +index 91d91e5..aac52e4 100644 +--- a/odb/validator.cxx ++++ b/odb/validator.cxx +@@ -520,9 +520,17 @@ namespace + // Figure out if we have a const version of the callback. OVL_* + // macros work for both FUNCTION_DECL and OVERLOAD. + // ++#if BUILDING_GCC_MAJOR >= 8 ++ for (ovl_iterator i (BASELINK_FUNCTIONS (decl)); i; ++i) ++#else + for (tree o (BASELINK_FUNCTIONS (decl)); o != 0; o = OVL_NEXT (o)) ++#endif + { ++#if BUILDING_GCC_MAJOR >= 8 ++ tree f (*i); ++#else + tree f (OVL_CURRENT (o)); ++#endif + if (DECL_CONST_MEMFUNC_P (f)) + { + c.set ("callback-const", true); +@@ -1223,7 +1231,7 @@ namespace + compiler, get_identifier ("has_lt_operator"), false, false); + + if (has_lt_operator_ != error_mark_node) +- has_lt_operator_ = OVL_CURRENT (has_lt_operator_); ++ has_lt_operator_ = OVL_FIRST (has_lt_operator_); + else + { + os << unit.file () << ": error: unable to resolve has_lt_operator " +-- +2.25.0 + diff --git a/package/odb/0007-Switch-to-C-11-get-rid-of-auto_ptr-use.patch b/package/odb/0007-Switch-to-C-11-get-rid-of-auto_ptr-use.patch new file mode 100644 index 00000000..bf856eb4 --- /dev/null +++ b/package/odb/0007-Switch-to-C-11-get-rid-of-auto_ptr-use.patch @@ -0,0 +1,351 @@ +From c5bea9562929c6b55ca208a530ae80033eeb1614 Mon Sep 17 00:00:00 2001 +From: Boris Kolpackov +Date: Tue, 7 Nov 2017 10:37:53 +0200 +Subject: [PATCH] Switch to C++11, get rid of auto_ptr use + +[Upstream: 6e374de9ae2f2978f2fca3390aba4ea3f72bfade] +Signed-off-by: Kamel Bouhara +--- + odb/Makefile.am | 5 +++++ + odb/context.cxx | 4 ++-- + odb/context.hxx | 4 ++-- + odb/generator.cxx | 18 +++++++++--------- + odb/options.cli | 4 ++-- + odb/parser.cxx | 14 ++++++++++---- + odb/parser.hxx | 7 ++++--- + odb/plugin.cxx | 10 +++++----- + odb/processor.cxx | 6 +++--- + odb/validator.cxx | 2 +- + 10 files changed, 43 insertions(+), 31 deletions(-) + +diff --git a/odb/Makefile.am b/odb/Makefile.am +index 2f01398..d9e83d7 100644 +--- a/odb/Makefile.am ++++ b/odb/Makefile.am +@@ -9,6 +9,11 @@ plugin_LTLIBRARIES = odb.la + + AM_CPPFLAGS = -I'$(top_builddir)' -I'$(top_srcdir)' + ++# Note: not passed by libtool when linking odb.so. Seems to be harmless for ++# now. ++# ++AM_CXXFLAGS = -std=c++0x ++ + EXTRA_DIST = common-query.hxx common.hxx context.hxx context.ixx cxx-lexer.hxx cxx-token.hxx diagnostics.hxx emitter.hxx features.hxx gcc-fwd.hxx gcc.hxx generate.hxx generator.hxx instance.hxx location.hxx lookup.hxx option-functions.hxx option-parsers.hxx option-types.hxx options.hxx options.ixx parser.hxx pragma.hxx processor.hxx profile.hxx relational/common-query.hxx relational/common.hxx relational/common.txx relational/context.hxx relational/context.ixx relational/generate.hxx relational/header.hxx relational/inline.hxx relational/model.hxx relational/mssql/common.hxx relational/mssql/context.hxx relational/mysql/common.hxx relational/mysql/context.hxx relational/oracle/common.hxx relational/oracle/context.hxx relational/pgsql/common.hxx relational/pgsql/context.hxx relational/processor.hxx relational/schema-source.hxx relational/schema.hxx relational/source.hxx relational/sqlite/common.hxx relational/sqlite/context.hxx relational/validator.hxx semantics.hxx semantics/class-template.hxx semantics/class.hxx semantics/derived.hxx semantics/elements.hxx semantics/elements.ixx semantics/enum.hxx semantics/fundamental.hxx semantics/namespace.hxx semantics/relational.hxx semantics/relational/changelog.hxx semantics/relational/changeset.hxx semantics/relational/column.hxx semantics/relational/deferrable.hxx semantics/relational/elements.hxx semantics/relational/elements.txx semantics/relational/foreign-key.hxx semantics/relational/index.hxx semantics/relational/key.hxx semantics/relational/model.hxx semantics/relational/name.hxx semantics/relational/primary-key.hxx semantics/relational/table.hxx semantics/template.hxx semantics/union-template.hxx semantics/union.hxx semantics/unit.hxx sql-lexer.hxx sql-lexer.ixx sql-token.hxx sql-token.ixx traversal.hxx traversal/class-template.hxx traversal/class.hxx traversal/derived.hxx traversal/elements.hxx traversal/enum.hxx traversal/fundamental.hxx traversal/namespace.hxx traversal/relational.hxx traversal/relational/changelog.hxx traversal/relational/changeset.hxx traversal/relational/column.hxx traversal/relational/elements.hxx traversal/relational/foreign-key.hxx traversal/relational/index.hxx traversal/relational/key.hxx traversal/relational/model.hxx traversal/relational/primary-key.hxx traversal/relational/table.hxx traversal/template.hxx traversal/union-template.hxx traversal/union.hxx traversal/unit.hxx validator.hxx version.hxx options.cli + + # Plugin. +diff --git a/odb/context.cxx b/odb/context.cxx +index d62fa88..87f1c32 100644 +--- a/odb/context.cxx ++++ b/odb/context.cxx +@@ -564,14 +564,14 @@ namespace + }; + } + +-auto_ptr ++unique_ptr + create_context (ostream& os, + semantics::unit& unit, + options const& ops, + features& f, + semantics::relational::model* m) + { +- auto_ptr r; ++ unique_ptr r; + + switch (ops.database ()[0]) + { +diff --git a/odb/context.hxx b/odb/context.hxx +index 351bc61..10de237 100644 +--- a/odb/context.hxx ++++ b/odb/context.hxx +@@ -13,7 +13,7 @@ + #include + #include + #include +-#include // std::auto_ptr ++#include // std::unique_ptr + #include + #include // std::size_t + #include +@@ -1691,7 +1691,7 @@ private: + + // Create concrete database context. + // +-std::auto_ptr ++std::unique_ptr + create_context (std::ostream&, + semantics::unit&, + options const&, +diff --git a/odb/generator.cxx b/odb/generator.cxx +index 6aa5151..266b75f 100644 +--- a/odb/generator.cxx ++++ b/odb/generator.cxx +@@ -4,7 +4,7 @@ + + #include // std::toupper, std::is{alpha,upper,lower} + #include +-#include // std::auto_ptr ++#include // std::unique_ptr + #include + #include + #include +@@ -141,7 +141,7 @@ generate (options const& ops, + + if (gen_schema) + { +- auto_ptr ctx (create_context (cerr, unit, ops, fts, 0)); ++ unique_ptr ctx (create_context (cerr, unit, ops, fts, 0)); + + switch (db) + { +@@ -471,7 +471,7 @@ generate (options const& ops, + // + if (gen_cxx) + { +- auto_ptr ctx ( ++ unique_ptr ctx ( + create_context (hxx, unit, ops, fts, model.get ())); + + sloc_filter sloc (ctx->os); +@@ -581,7 +581,7 @@ generate (options const& ops, + // + if (gen_cxx) + { +- auto_ptr ctx ( ++ unique_ptr ctx ( + create_context (ixx, unit, ops, fts, model.get ())); + + sloc_filter sloc (ctx->os); +@@ -641,7 +641,7 @@ generate (options const& ops, + // + if (gen_cxx && (db != database::common || md == multi_database::dynamic)) + { +- auto_ptr ctx ( ++ unique_ptr ctx ( + create_context (cxx, unit, ops, fts, model.get ())); + + sloc_filter sloc (ctx->os); +@@ -734,7 +734,7 @@ generate (options const& ops, + // + if (gen_sep_schema) + { +- auto_ptr ctx ( ++ unique_ptr ctx ( + create_context (sch, unit, ops, fts, model.get ())); + + sloc_filter sloc (ctx->os); +@@ -799,7 +799,7 @@ generate (options const& ops, + // + if (gen_sql_schema) + { +- auto_ptr ctx ( ++ unique_ptr ctx ( + create_context (sql, unit, ops, fts, model.get ())); + + switch (db) +@@ -865,7 +865,7 @@ generate (options const& ops, + // + { + ofstream& mig (*mig_pre[i]); +- auto_ptr ctx (create_context (mig, unit, ops, fts, 0)); ++ unique_ptr ctx (create_context (mig, unit, ops, fts, 0)); + + switch (db) + { +@@ -908,7 +908,7 @@ generate (options const& ops, + // + { + ofstream& mig (*mig_post[i]); +- auto_ptr ctx (create_context (mig, unit, ops, fts, 0)); ++ unique_ptr ctx (create_context (mig, unit, ops, fts, 0)); + + switch (db) + { +diff --git a/odb/options.cli b/odb/options.cli +index cf278cb..c994975 100644 +--- a/odb/options.cli ++++ b/odb/options.cli +@@ -211,10 +211,10 @@ class options + \cb{db pointer} pragma will use this pointer by default. The value + of this option can be \cb{*} which denotes the raw pointer and is + the default, or qualified name of a smart pointer class template, +- for example, \cb{std::auto_ptr}. In the latter case, the ODB compiler ++ for example, \cb{std::shared_ptr}. In the latter case, the ODB compiler + constructs the object or view pointer by adding a single template + argument of the object or view type to the qualified name, for example +- \cb{std::auto_ptr}. The ODB runtime uses object and view ++ \cb{std::shared_ptr}. The ODB runtime uses object and view + pointers to return, and, in case of objects, pass and cache + dynamically allocated instances of object and view types. + +diff --git a/odb/parser.cxx b/odb/parser.cxx +index 927063b..30e45af 100644 +--- a/odb/parser.cxx ++++ b/odb/parser.cxx +@@ -26,7 +26,7 @@ public: + + impl (options const&, loc_pragmas&, ns_loc_pragmas&, decl_pragmas&); + +- auto_ptr ++ unique_ptr + parse (tree global_scope, path const& main_file); + + private: +@@ -728,10 +728,10 @@ impl (options const& ops, + { + } + +-auto_ptr parser::impl:: ++unique_ptr parser::impl:: + parse (tree global_scope, path const& main_file) + { +- auto_ptr u (new unit (main_file)); ++ unique_ptr u (new unit (main_file)); + u->insert (global_namespace, *u); + process_named_pragmas (global_namespace, *u); + +@@ -2263,6 +2263,12 @@ fq_scope (tree decl) + // parser + // + ++parser:: ++~parser () ++{ ++ // Needs parser::impl definition. ++} ++ + parser:: + parser (options const& ops, + loc_pragmas& lp, +@@ -2272,7 +2278,7 @@ parser (options const& ops, + { + } + +-auto_ptr parser:: ++unique_ptr parser:: + parse (tree global_scope, path const& main_file) + { + return impl_->parse (global_scope, main_file); +diff --git a/odb/parser.hxx b/odb/parser.hxx +index 80e4aa4..648337f 100644 +--- a/odb/parser.hxx ++++ b/odb/parser.hxx +@@ -7,7 +7,7 @@ + + #include + +-#include // std::auto_ptr ++#include // std::unique_ptr + + #include + #include +@@ -18,9 +18,10 @@ class parser + public: + class failed {}; + ++ ~parser (); + parser (options const&, loc_pragmas&, ns_loc_pragmas&, decl_pragmas&); + +- std::auto_ptr ++ std::unique_ptr + parse (tree global_scope, semantics::path const& main_file); + + private: +@@ -31,7 +32,7 @@ private: + + private: + class impl; +- std::auto_ptr impl_; ++ std::unique_ptr impl_; + }; + + #endif // ODB_PARSER_HXX +diff --git a/odb/plugin.cxx b/odb/plugin.cxx +index 779faed..0fac632 100644 +--- a/odb/plugin.cxx ++++ b/odb/plugin.cxx +@@ -8,7 +8,7 @@ + #include // stat + #include // stat + +-#include // std::auto_ptr ++#include // std::unique_ptr + #include + #include + #include // std::strcpy, std::strstr +@@ -39,7 +39,7 @@ using cutl::fs::invalid_path; + typedef vector paths; + + int plugin_is_GPL_compatible; +-auto_ptr options_; ++unique_ptr options_; + paths profile_paths_; + path file_; // File being compiled. + paths inputs_; // List of input files in at-once mode or just file_. +@@ -222,7 +222,7 @@ gate_callback (void*, void*) + // Parse the GCC tree to semantic graph. + // + parser p (*options_, loc_pragmas_, ns_loc_pragmas_, decl_pragmas_); +- auto_ptr u (p.parse (global_namespace, file_)); ++ unique_ptr u (p.parse (global_namespace, file_)); + + features f; + +@@ -377,14 +377,14 @@ plugin_init (plugin_name_args* plugin_info, plugin_gcc_version*) + oi[2].arg = &pd; + + cli::argv_file_scanner scan (argc, &argv[0], oi, 3); +- auto_ptr ops ( ++ unique_ptr ops ( + new options (scan, cli::unknown_mode::fail, cli::unknown_mode::fail)); + + // Process options. + // + process_options (*ops); + +- options_ = ops; ++ options_ = move (ops); + pragma_db_ = db; + pragma_multi_ = options_->multi_database (); + } +diff --git a/odb/processor.cxx b/odb/processor.cxx +index bea3624..c787e0d 100644 +--- a/odb/processor.cxx ++++ b/odb/processor.cxx +@@ -120,8 +120,8 @@ namespace + // both the wrapper type and the wrapped type must be const. + // To see why, consider these possibilities: + // +- // auto_ptr - can modify by setting a new pointer +- // const auto_ptr - can modify by changing the pointed-to value ++ // unique_ptr - can modify by setting a new pointer ++ // const unique_ptr - can modify by changing the pointed-to value + // + if (const_type (m.type ()) && + !(id (m) || version (m) || m.count ("inverse"))) +@@ -3086,7 +3086,7 @@ process (options const& ops, + { + try + { +- auto_ptr ctx (create_context (cerr, unit, ops, f, 0)); ++ unique_ptr ctx (create_context (cerr, unit, ops, f, 0)); + + // Common processing. + // +diff --git a/odb/validator.cxx b/odb/validator.cxx +index aac52e4..196386c 100644 +--- a/odb/validator.cxx ++++ b/odb/validator.cxx +@@ -1516,7 +1516,7 @@ validate (options const& ops, + if (!valid) + throw validator_failed (); + +- auto_ptr ctx (create_context (cerr, u, ops, f, 0)); ++ unique_ptr ctx (create_context (cerr, u, ops, f, 0)); + + if (pass == 1) + { +-- +2.25.0 + diff --git a/package/odb/0008-Fix-GCC-8-adaptation-to-be-compatible-with-previous-.patch b/package/odb/0008-Fix-GCC-8-adaptation-to-be-compatible-with-previous-.patch new file mode 100644 index 00000000..b89c35fb --- /dev/null +++ b/package/odb/0008-Fix-GCC-8-adaptation-to-be-compatible-with-previous-.patch @@ -0,0 +1,33 @@ +From 8cc165a2f7f945db36a18e462138553a000292cd Mon Sep 17 00:00:00 2001 +From: Boris Kolpackov +Date: Tue, 7 Nov 2017 16:57:35 +0200 +Subject: [PATCH] Fix GCC 8 adaptation to be compatible with previous + versions + +[Upstream: 006bbc5748a8197d7874550cc9186545f1c55ad8] +Signed-off-by: Kamel Bouhara +--- + odb/validator.cxx | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/odb/validator.cxx b/odb/validator.cxx +index 196386c..f0edaaf 100644 +--- a/odb/validator.cxx ++++ b/odb/validator.cxx +@@ -1231,7 +1231,13 @@ namespace + compiler, get_identifier ("has_lt_operator"), false, false); + + if (has_lt_operator_ != error_mark_node) ++ { ++#if BUILDING_GCC_MAJOR >= 8 + has_lt_operator_ = OVL_FIRST (has_lt_operator_); ++#else ++ has_lt_operator_ = OVL_CURRENT (has_lt_operator_); ++#endif ++ } + else + { + os << unit.file () << ": error: unable to resolve has_lt_operator " +-- +2.25.0 + diff --git a/package/odb/0009-Handle-namespace-aliases-when-parsing-GCC-tree.patch b/package/odb/0009-Handle-namespace-aliases-when-parsing-GCC-tree.patch new file mode 100644 index 00000000..bac7abea --- /dev/null +++ b/package/odb/0009-Handle-namespace-aliases-when-parsing-GCC-tree.patch @@ -0,0 +1,30 @@ +From 2d37e44753c1e67de4658b6fdf95760432c74ead Mon Sep 17 00:00:00 2001 +From: Boris Kolpackov +Date: Fri, 5 Oct 2018 07:20:18 +0200 +Subject: [PATCH] Handle namespace aliases when parsing GCC tree + +[Upstream: 3a1788234bfaa96ee093b68e9ba02cf7d5bdffe6] +Signed-off-by: Kamel Bouhara +--- + odb/parser.cxx | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/odb/parser.cxx b/odb/parser.cxx +index 30e45af..03bcb01 100644 +--- a/odb/parser.cxx ++++ b/odb/parser.cxx +@@ -906,6 +906,11 @@ collect (tree ns) + continue; + #endif + ++ // Ignore namespace aliases. ++ // ++ if (DECL_NAMESPACE_ALIAS (decl)) ++ continue; ++ + if (!DECL_IS_BUILTIN (decl) || DECL_NAMESPACE_STD_P (decl)) + { + if (trace) +-- +2.25.0 + diff --git a/package/odb/0010-Add-initial-support-for-GCC-9.patch b/package/odb/0010-Add-initial-support-for-GCC-9.patch new file mode 100644 index 00000000..dd36882b --- /dev/null +++ b/package/odb/0010-Add-initial-support-for-GCC-9.patch @@ -0,0 +1,233 @@ +From cd9a15f42ef35449a8ad480352f9f5495eb37c30 Mon Sep 17 00:00:00 2001 +From: Boris Kolpackov +Date: Fri, 15 Mar 2019 17:37:28 +0200 +Subject: [PATCH] Add initial support for GCC 9 + +[Upstream: 841140bbf13ae2bfaa5978a181718cda0a8edae7] +Signed-off-by: Kamel Bouhara +--- + odb/cxx-lexer.cxx | 33 +++++++++++++++++++++++++++------ + odb/gcc.hxx | 32 ++++++++++++++++++++++++++++++++ + odb/include.cxx | 3 +++ + odb/plugin.cxx | 45 ++++++++++++++++++++++++++++++--------------- + 4 files changed, 92 insertions(+), 21 deletions(-) + +diff --git a/odb/cxx-lexer.cxx b/odb/cxx-lexer.cxx +index cfebbb5..acd13be 100644 +--- a/odb/cxx-lexer.cxx ++++ b/odb/cxx-lexer.cxx +@@ -143,12 +143,20 @@ translate () + // Diagnostics callback. + // + extern "C" bool +-cpp_error_callback ( ++cpp_diagnostic_callback ( + cpp_reader* reader, ++#if BUILDING_GCC_MAJOR >= 9 ++ cpp_diagnostic_level level, ++#else + int level, ++#endif + #if BUILDING_GCC_MAJOR > 4 || BUILDING_GCC_MAJOR == 4 && BUILDING_GCC_MINOR > 5 ++#if BUILDING_GCC_MAJOR >= 9 ++ cpp_warning_reason, ++#else + int /*reason*/, // Added in GCC 4.6.0. + #endif ++#endif + #if BUILDING_GCC_MAJOR <= 5 + location_t, + unsigned int, +@@ -185,10 +193,14 @@ cpp_error_callback ( + vfprintf (stderr, msg, *ap); + fprintf (stderr, "\n"); + +- // By resetting the error callback we indicate to cxx_string_lexer +- // that there was an error. ++ // By resetting the callback we indicate to cxx_string_lexer that there ++ // was an error. + // ++#if BUILDING_GCC_MAJOR >= 9 ++ cpp_get_callbacks (reader)->diagnostic = 0; ++#else + cpp_get_callbacks (reader)->error = 0; ++#endif + return true; + } + +@@ -247,7 +259,12 @@ start (string const& data) + // The previous lexing session should have popped the buffer. + // + assert (cpp_get_buffer (reader_) == 0); +- callbacks_->error = &cpp_error_callback; ++ ++#if BUILDING_GCC_MAJOR >= 9 ++ callbacks_->diagnostic = &cpp_diagnostic_callback; ++#else ++ callbacks_->error = &cpp_diagnostic_callback; ++#endif + + data_ = data; + buf_ = data; +@@ -267,10 +284,14 @@ next (string& token, tree* node) + token.clear (); + cpp_token const* t (cpp_get_token (reader_)); + +- // If there was an error, the error callback will be reset to 0. +- // Diagnostics has already been issued. ++ // If there was an error, the callback will be reset to 0. Diagnostics has ++ // already been issued. + // ++#if BUILDING_GCC_MAJOR >= 9 ++ if (callbacks_->diagnostic == 0) ++#else + if (callbacks_->error == 0) ++#endif + throw invalid_input (); + + cpp_ttype tt (t->type); +diff --git a/odb/gcc.hxx b/odb/gcc.hxx +index a22357d..0304192 100644 +--- a/odb/gcc.hxx ++++ b/odb/gcc.hxx +@@ -158,4 +158,36 @@ gcc_tree_code_name (gcc_tree_code_type tc) {return tree_code_name[tc];} + # define anon_aggrname_p(X) ANON_AGGRNAME_P(X) + #endif + ++// In GCC 9: ++// ++// INCLUDED_FROM Became linemap_included_from_linemap(). ++// LAST_SOURCE_LINE Was removed apparently as no longer used. Studying ++// the line-map.h diff from 8.3 suggests that the old ++// implementation should still work. ++// ++#if BUILDING_GCC_MAJOR >= 9 ++ ++inline const line_map_ordinary* ++INCLUDED_FROM (line_maps* set, const line_map_ordinary* map) ++{ ++ return linemap_included_from_linemap (set, map); ++} ++ ++inline source_location ++LAST_SOURCE_LINE_LOCATION (const line_map_ordinary* map) ++{ ++ return (((map[1].start_location - 1 ++ - map->start_location) ++ & ~((1 << map->m_column_and_range_bits) - 1)) ++ + map->start_location); ++} ++ ++inline linenum_type ++LAST_SOURCE_LINE (const line_map_ordinary* map) ++{ ++ return SOURCE_LINE (map, LAST_SOURCE_LINE_LOCATION (map)); ++} ++ ++#endif ++ + #endif // ODB_GCC_HXX +diff --git a/odb/include.cxx b/odb/include.cxx +index 08c93ce..0082f5e 100644 +--- a/odb/include.cxx ++++ b/odb/include.cxx +@@ -584,6 +584,9 @@ namespace + + for (include_map::iterator i (imap.begin ()), e (imap.end ()); i != e; ++i) + { ++ // Note that the LAST_SOURCE_LINE value of a map that includes another ++ // map is the line of that include. ++ + /* + cerr << endl + << i->first << " included from" << endl; +diff --git a/odb/plugin.cxx b/odb/plugin.cxx +index 0fac632..892f27c 100644 +--- a/odb/plugin.cxx ++++ b/odb/plugin.cxx +@@ -44,10 +44,15 @@ paths profile_paths_; + path file_; // File being compiled. + paths inputs_; // List of input files in at-once mode or just file_. + +-bool (*cpp_error_prev) ( ++bool (*cpp_diagnostic_prev) ( + cpp_reader*, ++#if BUILDING_GCC_MAJOR >= 9 ++ cpp_diagnostic_level, ++ cpp_warning_reason, ++#else + int, + int, ++#endif + #if BUILDING_GCC_MAJOR >= 6 + rich_location*, + #else +@@ -58,17 +63,22 @@ bool (*cpp_error_prev) ( + va_list*); + + static bool +-cpp_error_filter (cpp_reader* r, +- int level, +- int reason, ++cpp_diagnostic_filter (cpp_reader* r, ++#if BUILDING_GCC_MAJOR >= 9 ++ cpp_diagnostic_level level, ++ cpp_warning_reason reason, ++#else ++ int level, ++ int reason, ++#endif + #if BUILDING_GCC_MAJOR >= 6 +- rich_location* l, ++ rich_location* l, + #else +- location_t l, +- unsigned int column_override, ++ location_t l, ++ unsigned int column_override, + #endif +- const char* msg, +- va_list* ap) ++ const char* msg, ++ va_list* ap) + { + // #pragma once in the main file. Note that the message that we get is + // potentially translated so we search for the substring (there is +@@ -80,7 +90,7 @@ cpp_error_filter (cpp_reader* r, + if (strstr (msg, "#pragma once") != 0) + return true; + +- return cpp_error_prev ( ++ return cpp_diagnostic_prev ( + r, + level, + reason, +@@ -119,15 +129,20 @@ start_unit_callback (void*, void*) + // + cpp_callbacks* cb (cpp_get_callbacks (parse_in)); + +- if (cb->error == 0) ++#if BUILDING_GCC_MAJOR >= 9 ++ cpp_diagnostic_prev = cb->diagnostic; ++ cb->diagnostic = &cpp_diagnostic_filter; ++#else ++ cpp_diagnostic_prev = cb->error; ++ cb->error = &cpp_diagnostic_filter; ++#endif ++ ++ if (cpp_diagnostic_prev == 0) + { +- cerr << "ice: expected cpp error callback to be set" << endl; ++ cerr << "ice: expected cpp diagnostic callback to be set" << endl; + exit (1); + } + +- cpp_error_prev = cb->error; +- cb->error = &cpp_error_filter; +- + // Set the directory of the main file (stdin) to that of the orginal + // file so that relative inclusion works. Also adjust the path and + // re-stat the file so that #pragma once works. +-- +2.25.0 + diff --git a/package/odb/0011-Adjust-to-changes-in-GCC-10.patch b/package/odb/0011-Adjust-to-changes-in-GCC-10.patch new file mode 100644 index 00000000..33d46d79 --- /dev/null +++ b/package/odb/0011-Adjust-to-changes-in-GCC-10.patch @@ -0,0 +1,97 @@ +From 060bb7eb4d008fbd4a9fa8ef7c5e33c9e483eb52 Mon Sep 17 00:00:00 2001 +From: Boris Kolpackov +Date: Wed, 17 Jun 2020 11:22:11 +0200 +Subject: [PATCH] Adjust to changes in GCC 10 + +[Upstream: 060bb7eb4d008fbd4a9fa8ef7c5e33c9e483eb52] +Signed-off-by: Thomas Petazzoni +--- + odb/gcc.hxx | 7 +++++-- + odb/parser.cxx | 8 ++++---- + odb/semantics/elements.cxx | 4 ++-- + 3 files changed, 11 insertions(+), 8 deletions(-) + +diff --git a/odb/gcc.hxx b/odb/gcc.hxx +index 9b644d7..af0e2a0 100644 +--- a/odb/gcc.hxx ++++ b/odb/gcc.hxx +@@ -151,10 +151,13 @@ gcc_tree_code_name (gcc_tree_code_type tc) {return tree_code_name[tc];} + #define DECL_CHAIN(x) TREE_CHAIN(x) + #endif + +-// In GCC 6, ANON_AGGRNAME_P became anon_aggrname_p(). ++// In GCC 6 ANON_AGGRNAME_P became anon_aggrname_p(). ++// In GCC 10 anon_aggrname_p() became IDENTIFIER_ANON_P. + // + #if BUILDING_GCC_MAJOR < 6 +-# define anon_aggrname_p(X) ANON_AGGRNAME_P(X) ++# define IDENTIFIER_ANON_P(X) ANON_AGGRNAME_P(X) ++#elif BUILDING_GCC_MAJOR < 10 ++# define IDENTIFIER_ANON_P(X) anon_aggrname_p(X) + #endif + + // In GCC 9: +diff --git a/odb/parser.cxx b/odb/parser.cxx +index 69d9b28..58388c9 100644 +--- a/odb/parser.cxx ++++ b/odb/parser.cxx +@@ -1103,14 +1103,14 @@ emit_type_decl (tree decl) + // says that in typedef struct {} S; S becomes struct's + // name. + // +- if (anon_aggrname_p (decl_name)) ++ if (IDENTIFIER_ANON_P (decl_name)) + { + tree d (TYPE_NAME (t)); + + if (d != NULL_TREE && + !DECL_ARTIFICIAL (d) && + DECL_NAME (d) != NULL_TREE && +- !anon_aggrname_p (DECL_NAME (d))) ++ !IDENTIFIER_ANON_P (DECL_NAME (d))) + { + decl = d; + decl_name = DECL_NAME (decl); +@@ -1727,7 +1727,7 @@ create_type (tree t, + ts << "start anon/stub " << gcc_tree_code_name(tc) << " at " + << file << ":" << line << endl; + +- if (d == NULL_TREE || anon_aggrname_p (DECL_NAME (d))) ++ if (d == NULL_TREE || IDENTIFIER_ANON_P (DECL_NAME (d))) + { + if (tc == RECORD_TYPE) + r = &emit_class (t, file, line, clmn); +@@ -1824,7 +1824,7 @@ create_type (tree t, + ts << "start anon/stub " << gcc_tree_code_name(tc) << " at " + << file << ":" << line << endl; + +- if (d == NULL_TREE || anon_aggrname_p (DECL_NAME (d))) ++ if (d == NULL_TREE || IDENTIFIER_ANON_P (DECL_NAME (d))) + { + r = &emit_enum (t, access, file, line, clmn); + } +diff --git a/odb/semantics/elements.cxx b/odb/semantics/elements.cxx +index f937f54..2d266cf 100644 +--- a/odb/semantics/elements.cxx ++++ b/odb/semantics/elements.cxx +@@ -75,7 +75,7 @@ namespace semantics + if (tree decl = TYPE_NAME (n)) + name = DECL_NAME (decl); + +- return name != 0 && anon_aggrname_p (name); ++ return name != 0 && IDENTIFIER_ANON_P (name); + } + + return true; +@@ -124,7 +124,7 @@ namespace semantics + if (tree decl = TYPE_NAME (type)) + { + name = DECL_NAME (decl); +- if (name != 0 && anon_aggrname_p (name)) ++ if (name != 0 && IDENTIFIER_ANON_P (name)) + return true; + + tree s (CP_DECL_CONTEXT (decl)); +-- +2.26.2 + diff --git a/package/odb/Config.in.host b/package/odb/Config.in.host new file mode 100644 index 00000000..e80a141b --- /dev/null +++ b/package/odb/Config.in.host @@ -0,0 +1,9 @@ +config BR2_PACKAGE_HOST_ODB + bool "host-odb" + select BR2_NEEDS_HOST_GCC_PLUGIN_SUPPORT + help + This is a compiler that takes a specially crafted c++ header + file and auto-generates a schema that works with libodb and + the subsequent libodb-database library. + + https://www.codesynthesis.com/products/odb/ diff --git a/package/odb/odb.hash b/package/odb/odb.hash new file mode 100644 index 00000000..773a9c82 --- /dev/null +++ b/package/odb/odb.hash @@ -0,0 +1,6 @@ +# From https://www.codesynthesis.com/products/odb/download.xhtml +sha1 810fc02e591429ed19f5a2699d144fb611fb121b odb-2.4.0.tar.bz2 + +# Locally computed +sha256 6785154fa98ea3977c8c2ab38cec16c4aa78c2c2039e80cd2908347b1c1d4198 odb-2.4.0.tar.bz2 +sha256 7983b82cb1f1686ac2b55420ded9c0f348f93dd17bf3e048ae3b25c1da51b80e LICENSE diff --git a/package/odb/odb.mk b/package/odb/odb.mk new file mode 100644 index 00000000..85c7ccb8 --- /dev/null +++ b/package/odb/odb.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# odb +# +################################################################################ + +ODB_VERSION_MAJOR = 2.4 +ODB_VERSION = $(ODB_VERSION_MAJOR).0 +ODB_SOURCE = odb-$(ODB_VERSION).tar.bz2 +ODB_SITE = https://www.codesynthesis.com/download/odb/$(ODB_VERSION_MAJOR) +ODB_LICENSE = GPL-3.0 +ODB_LICENSE_FILES = LICENSE +HOST_ODB_DEPENDENCIES = host-libcutl +HOST_ODB_CONF_ENV = CXXFLAGS="$(HOST_CXXFLAGS) -std=c++11" + +# Prevent odb from trying to install the gcc plugin into the hosts +# gcc plugin directory. Instead, this will install the gcc plugin +# into host/libexec/odb +HOST_ODB_CONF_OPTS = --with-gcc-plugin-dir=no + +$(eval $(host-autotools-package)) diff --git a/package/odhcp6c/Config.in b/package/odhcp6c/Config.in new file mode 100644 index 00000000..ca3a2f64 --- /dev/null +++ b/package/odhcp6c/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_ODHCP6C + bool "odhcp6c" + depends on BR2_USE_MMU # fork() + help + odhcp6c is a minimal DHCPv6 and RA-client for use in + embedded Linux systems, especially routers. + + https://git.openwrt.org/project/odhcp6c.git diff --git a/package/odhcp6c/odhcp6c.hash b/package/odhcp6c/odhcp6c.hash new file mode 100644 index 00000000..26ee7116 --- /dev/null +++ b/package/odhcp6c/odhcp6c.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 c3622120b5209d1c14d5ac92884240bf0e4f652633562355e70dbf482f6c37b4 odhcp6c-f575351cbb3defc0bf52680c9082912a6c264374-br1.tar.gz +sha256 e6d6a009505e345fe949e1310334fcb0747f28dae2856759de102ab66b722cb4 COPYING diff --git a/package/odhcp6c/odhcp6c.mk b/package/odhcp6c/odhcp6c.mk new file mode 100644 index 00000000..c7f214ff --- /dev/null +++ b/package/odhcp6c/odhcp6c.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# odhcp6c +# +################################################################################ + +ODHCP6C_VERSION = f575351cbb3defc0bf52680c9082912a6c264374 +ODHCP6C_SITE = https://git.openwrt.org/project/odhcp6c.git +ODHCP6C_SITE_METHOD = git +ODHCP6C_LICENSE = GPL-2.0 +ODHCP6C_LICENSE_FILES = COPYING + +define ODHCP6C_INSTALL_SCRIPT + $(INSTALL) -m 0755 -D $(@D)/odhcp6c-example-script.sh \ + $(TARGET_DIR)/usr/sbin/odhcp6c-update +endef + +ODHCP6C_POST_INSTALL_TARGET_HOOKS += ODHCP6C_INSTALL_SCRIPT + +ifeq ($(BR2_PACKAGE_LIBUBOX),y) +ODHCP6C_CONF_OPTS += -DUSE_LIBUBOX=1 +ODHCP6C_DEPENDENCIES += libubox +else +ODHCP6C_CONF_OPTS += -DUSE_LIBUBOX=0 +endif + +$(eval $(cmake-package)) diff --git a/package/odhcploc/Config.in b/package/odhcploc/Config.in new file mode 100644 index 00000000..74bf3630 --- /dev/null +++ b/package/odhcploc/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_ODHCPLOC + bool "odhcploc" + help + Open DHCP Locate (ODHCPLoc) is program to locate and + display active DHCP servers on a subnet. + Can be used to scan for rogue DHCP servers. + + http://odhcploc.sourceforge.net/ diff --git a/package/odhcploc/odhcploc.hash b/package/odhcploc/odhcploc.hash new file mode 100644 index 00000000..a1d9a566 --- /dev/null +++ b/package/odhcploc/odhcploc.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 b0360a3aece8a29d131531da7bfc36d57c30c6eed30ff1ea360f7cccea1d62d7 odhcploc-20111021.tar.gz +sha256 092a5b7be2a7ff088be7ec99adf68629509911b66f304b8ea0c835cdc138d544 COPYING diff --git a/package/odhcploc/odhcploc.mk b/package/odhcploc/odhcploc.mk new file mode 100644 index 00000000..bf4227ae --- /dev/null +++ b/package/odhcploc/odhcploc.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# odhcploc +# +################################################################################ + +ODHCPLOC_VERSION = 20111021 +ODHCPLOC_SITE = http://downloads.sourceforge.net/project/odhcploc/$(ODHCPLOC_VERSION) +ODHCPLOC_LICENSE = ISC +ODHCPLOC_LICENSE_FILES = COPYING + +define ODHCPLOC_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) all +endef + +define ODHCPLOC_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) PREFIX=/usr DESTDIR=$(TARGET_DIR) -C $(@D) install +endef + +$(eval $(generic-package)) diff --git a/package/odroidc2-firmware/Config.in b/package/odroidc2-firmware/Config.in new file mode 100644 index 00000000..d55003af --- /dev/null +++ b/package/odroidc2-firmware/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_ODROIDC2_FIRMWARE + bool "odroidc2-firmware" + help + This package extracts from + https://github.com/hardkernel/u-boot/tree/odroidc2-v2015.01 + the pre-built firmware files, as well as the host tool + fip_create that are needed to create bootable images for the + Odroid C2 platform. See doc/board/amlogic/odroid-c2.rst in + upstream U-Boot for more details. + + https://github.com/hardkernel/u-boot/tree/odroidc2-v2015.01 diff --git a/package/odroidc2-firmware/odroidc2-firmware.hash b/package/odroidc2-firmware/odroidc2-firmware.hash new file mode 100644 index 00000000..67d046e8 --- /dev/null +++ b/package/odroidc2-firmware/odroidc2-firmware.hash @@ -0,0 +1,2 @@ +# Locally calculated +sha256 a2fba4c6d9332ecc5f04283f370d5c275f35d6cb62dba1f685d011269bacb6d0 odroidc2-firmware-s905_6.0.1_v5.5.tar.gz diff --git a/package/odroidc2-firmware/odroidc2-firmware.mk b/package/odroidc2-firmware/odroidc2-firmware.mk new file mode 100644 index 00000000..acd5ce23 --- /dev/null +++ b/package/odroidc2-firmware/odroidc2-firmware.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# odroidc2-firmware +# +################################################################################ + +ODROIDC2_FIRMWARE_VERSION = s905_6.0.1_v5.5 +ODROIDC2_FIRMWARE_SITE = $(call github,hardkernel,u-boot,$(ODROIDC2_FIRMWARE_VERSION)) +ODROIDC2_FIRMWARE_INSTALL_IMAGES = YES + +define ODROIDC2_FIRMWARE_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) $(HOST_CONFIGURE_OPTS) \ + -C $(@D)/tools/fip_create/ +endef + +ODROIDC2_FIRMWARE_FILES = \ + fip/gxb/bl301.bin \ + fip/gxb/bl30.bin \ + fip/gxb/bl31.bin \ + fip/gxb/bl2.package \ + sd_fuse/bl1.bin.hardkernel + +define ODROIDC2_FIRMWARE_INSTALL_IMAGES_CMDS + $(foreach f,$(ODROIDC2_FIRMWARE_FILES), \ + $(INSTALL) -D -m 0644 $(@D)/$(f) $(BINARIES_DIR)/$(notdir $(f)) + ) + $(INSTALL) -D -m0755 $(@D)/tools/fip_create/fip_create \ + $(HOST_DIR)/bin/fip_create +endef + +$(eval $(generic-package)) diff --git a/package/ofono/0001-uclibc-backtrace.patch b/package/ofono/0001-uclibc-backtrace.patch new file mode 100644 index 00000000..3fa24149 --- /dev/null +++ b/package/ofono/0001-uclibc-backtrace.patch @@ -0,0 +1,49 @@ +[PATCH] fix build on uClibc without UCLIBC_HAS_BACKTRACE + +Backtrace support is only used for logging on signal errors, which +isn't really critical, so simply remove backtrace info if not +available in uClibc. + +NOTE: based on patch from Peter Korsgaard + +Signed-off-by: Petr Vorel +--- +--- ofono-1.7.orig/src/log.c ++++ ofono-1.7/src/log.c +@@ -30,7 +30,8 @@ + #include + #include + #include +-#ifdef __GLIBC__ ++#if defined(__GLIBC__) && !(defined(__UCLIBC__) && !defined (__UCLIBC_HAS_BACKTRACE__)) ++#define HAVE_BACKTRACE + #include + #endif + #include +@@ -115,7 +116,7 @@ + va_end(ap); + } + +-#ifdef __GLIBC__ ++#ifdef HAVE_BACKTRACE + static void print_backtrace(unsigned int offset) + { + void *frames[99]; +@@ -312,7 +313,7 @@ + if (detach == FALSE) + option |= LOG_PERROR; + +-#ifdef __GLIBC__ ++#ifdef HAVE_BACKTRACE + signal_setup(signal_handler); + #endif + +@@ -329,7 +330,7 @@ + + closelog(); + +-#ifdef __GLIBC__ ++#ifdef HAVE_BACKTRACE + signal_setup(SIG_DFL); + #endif + diff --git a/package/ofono/0002-fix-musl-compile.patch b/package/ofono/0002-fix-musl-compile.patch new file mode 100644 index 00000000..369fb717 --- /dev/null +++ b/package/ofono/0002-fix-musl-compile.patch @@ -0,0 +1,37 @@ +From 4a1d114fa3a5d6bef1f71222787c1f6c3a952284 Mon Sep 17 00:00:00 2001 +From: Nicolas Serafini +Date: Thu, 24 Jan 2019 10:11:42 +0100 +Subject: [PATCH] mbim: add optional copy of TEMP_FAILURE_RETRY macro (fix musl + compile) + +TEMP_FAILURE_RETRY is not available on musl. + +Signed-off-by: Nicolas Serafini +--- + drivers/mbimmodem/mbim.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/drivers/mbimmodem/mbim.c b/drivers/mbimmodem/mbim.c +index 54b18acf..4b040528 100644 +--- a/drivers/mbimmodem/mbim.c ++++ b/drivers/mbimmodem/mbim.c +@@ -37,6 +37,16 @@ + #include "mbim-message.h" + #include "mbim-private.h" + ++/* taken from glibc unistd.h for musl support */ ++#ifndef TEMP_FAILURE_RETRY ++#define TEMP_FAILURE_RETRY(expression) \ ++ (__extension__ \ ++ ({ long int __result; \ ++ do __result = (long int) (expression); \ ++ while (__result == -1L && errno == EINTR); \ ++ __result; })) ++#endif ++ + #define MAX_CONTROL_TRANSFER 4096 + #define HEADER_SIZE (sizeof(struct mbim_message_header) + \ + sizeof(struct mbim_fragment_header)) +-- +2.20.1 + diff --git a/package/ofono/Config.in b/package/ofono/Config.in new file mode 100644 index 00000000..c1d0cae4 --- /dev/null +++ b/package/ofono/Config.in @@ -0,0 +1,26 @@ +config BR2_PACKAGE_OFONO + bool "ofono" + depends on BR2_USE_WCHAR # gettext, libglib2, ell + depends on BR2_TOOLCHAIN_HAS_THREADS # dbus, libglib2 + depends on BR2_USE_MMU # dbus, libglib2 + depends on !BR2_STATIC_LIBS # dlopen(), ell + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12 # ell + select BR2_PACKAGE_DBUS + select BR2_PACKAGE_ELL + select BR2_PACKAGE_LIBCAP_NG + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO + help + oFono is a free, open source project for mobile telephony + (GSM/UMTS) applications. It uses high-level D-Bus API for + use by telephony applications. It uses 3GPP standard. + + http://ofono.org/ + +comment "ofono needs a toolchain w/ dynamic library, wchar, threads, headers >= 4.12" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_STATIC_LIBS || !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12 diff --git a/package/ofono/S46ofono b/package/ofono/S46ofono new file mode 100644 index 00000000..7eb2fca3 --- /dev/null +++ b/package/ofono/S46ofono @@ -0,0 +1,22 @@ +#!/bin/sh + +case "$1" in + start) + printf "Starting ofono ... " + start-stop-daemon -S -q -m -b -p /var/run/ofonod.pid --exec /usr/sbin/ofonod -- -n + echo "done." + ;; + stop) + printf "Stopping ofono ..." + start-stop-daemon -K -q -p /var/run/ofonod.pid + echo "done." + ;; + restart) + $0 stop + sleep 1 + $0 start + ;; + *) + echo "usage: $0 {start|stop|restart}" + ;; +esac diff --git a/package/ofono/ofono.hash b/package/ofono/ofono.hash new file mode 100644 index 00000000..02245a46 --- /dev/null +++ b/package/ofono/ofono.hash @@ -0,0 +1,4 @@ +# From https://www.kernel.org/pub/linux/network/ofono/sha256sums.asc +sha256 a15c5d28096c10eb30e47a68b6dc2e7c4a5a99d7f4cfedf0b69624f33d859e9b ofono-1.31.tar.xz +# Locally computed +sha256 e6d6a009505e345fe949e1310334fcb0747f28dae2856759de102ab66b722cb4 COPYING diff --git a/package/ofono/ofono.mk b/package/ofono/ofono.mk new file mode 100644 index 00000000..57d6cab4 --- /dev/null +++ b/package/ofono/ofono.mk @@ -0,0 +1,48 @@ +################################################################################ +# +# ofono +# +################################################################################ + +OFONO_VERSION = 1.31 +OFONO_SOURCE = ofono-$(OFONO_VERSION).tar.xz +OFONO_SITE = $(BR2_KERNEL_MIRROR)/linux/network/ofono +OFONO_LICENSE = GPL-2.0 +OFONO_LICENSE_FILES = COPYING +OFONO_DEPENDENCIES = \ + host-pkgconf \ + dbus \ + ell \ + libcap-ng \ + libglib2 \ + mobile-broadband-provider-info + +OFONO_CONF_OPTS = \ + --enable-external-ell \ + --disable-test \ + --with-dbusconfdir=/etc \ + $(if $(BR2_INIT_SYSTEMD),--with-systemdunitdir=/usr/lib/systemd/system) + +# N.B. Qualcomm QMI modem support requires O_CLOEXEC; so +# make sure that it is defined. +OFONO_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) -D_GNU_SOURCE" + +define OFONO_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/ofono/S46ofono $(TARGET_DIR)/etc/init.d/S46ofono +endef + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +OFONO_CONF_OPTS += --enable-udev +OFONO_DEPENDENCIES += udev +else +OFONO_CONF_OPTS += --disable-udev +endif + +ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS),y) +OFONO_CONF_OPTS += --enable-bluetooth +OFONO_DEPENDENCIES += bluez5_utils +else +OFONO_CONF_OPTS += --disable-bluetooth +endif + +$(eval $(autotools-package)) diff --git a/package/ogre/0001-CMake-Utils-PrecompiledHeader.cmake-Add-c-argument-t.patch b/package/ogre/0001-CMake-Utils-PrecompiledHeader.cmake-Add-c-argument-t.patch new file mode 100644 index 00000000..97f4e248 --- /dev/null +++ b/package/ogre/0001-CMake-Utils-PrecompiledHeader.cmake-Add-c-argument-t.patch @@ -0,0 +1,57 @@ +From f480ac538eb69086d4b7db855c2a457d5d6420d4 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 10 Feb 2020 14:05:12 +0100 +Subject: [PATCH] CMake/Utils/PrecompiledHeader.cmake: Add -c argument to build + precompiled headers + +Add "-c" argument when building precompiled headers to fix build with +RELRO. + +More information on a similar issue with domoticz can be found here: +https://patchwork.ozlabs.org/patch/1187328: + +"The problem AFAICS is that if no -c or similar option is given, GCC +decides what needs to be done based on the rest of the arguments. If the +rest of the arguments include a -Wl,... option, it decides that linking +needs to be done. If the rest of the arguments are just header files, it +decides to create a precompiled header." + +Fixes: + - http://autobuild.buildroot.org/results/8fabf8d270b9257c3a9db6a2f17f1c08ec9428d3 + +Signed-off-by: Fabrice Fontaine +[Upstream: https://github.com/OGRECave/ogre/commit/de4d5c920e23e1e2b21dc5c8192ef74ba6210cca] +--- + CMake/Utils/PrecompiledHeader.cmake | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/CMake/Utils/PrecompiledHeader.cmake b/CMake/Utils/PrecompiledHeader.cmake +index a02d99acd..bfb0059db 100644 +--- a/CMake/Utils/PrecompiledHeader.cmake ++++ b/CMake/Utils/PrecompiledHeader.cmake +@@ -133,11 +133,11 @@ MACRO(_PCH_GET_COMPILE_COMMAND out_command _input _output) + STRING(REGEX REPLACE "^ +" "" pchsupport_compiler_cxx_arg1 ${CMAKE_CXX_COMPILER_ARG1}) + + SET(${out_command} +- ${CMAKE_CXX_COMPILER} ${pchsupport_compiler_cxx_arg1} ${_compile_FLAGS} -x c++-header -o ${_output} ${_input} ++ ${CMAKE_CXX_COMPILER} ${pchsupport_compiler_cxx_arg1} ${_compile_FLAGS} -x c++-header -c -o ${_output} ${_input} + ) + ELSE(CMAKE_CXX_COMPILER_ARG1) + SET(${out_command} +- ${CMAKE_CXX_COMPILER} ${_compile_FLAGS} -x c++-header -o ${_output} ${_input} ++ ${CMAKE_CXX_COMPILER} ${_compile_FLAGS} -x c++-header -c -o ${_output} ${_input} + ) + ENDIF(CMAKE_CXX_COMPILER_ARG1) + ELSE(CMAKE_COMPILER_IS_GNUCXX) +@@ -291,7 +291,7 @@ MACRO(ADD_PRECOMPILED_HEADER _targetName _input) + set_target_properties(${_targetName}_pch_dephelp PROPERTIES INCLUDE_DIRECTORIES "${DIRINC}") + + #MESSAGE("_compile_FLAGS: ${_compile_FLAGS}") +- #message("COMMAND ${CMAKE_CXX_COMPILER} ${_compile_FLAGS} -x c++-header -o ${_output} ${_input}") ++ #message("COMMAND ${CMAKE_CXX_COMPILER} ${_compile_FLAGS} -x c++-header -c -o ${_output} ${_input}") + + ADD_CUSTOM_COMMAND( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_name}" +-- +2.24.1 + diff --git a/package/ogre/Config.in b/package/ogre/Config.in new file mode 100644 index 00000000..1d778471 --- /dev/null +++ b/package/ogre/Config.in @@ -0,0 +1,41 @@ +config BR2_PACKAGE_OGRE + bool "ogre" + depends on BR2_PACKAGE_HAS_LIBGL # libglu + depends on BR2_PACKAGE_XORG7 + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11 + depends on !BR2_STATIC_LIBS + depends on BR2_USE_MMU + depends on BR2_USE_WCHAR # use wchar_t + select BR2_PACKAGE_FREETYPE + select BR2_PACKAGE_LIBFREEIMAGE + select BR2_PACKAGE_SDL2 + select BR2_PACKAGE_SDL2_OPENGL + select BR2_PACKAGE_SDL2_X11 # use wmInfo.info.x11 + select BR2_PACKAGE_XLIB_LIBX11 + select BR2_PACKAGE_XLIB_LIBXAW + select BR2_PACKAGE_XLIB_LIBXEXT + select BR2_PACKAGE_XLIB_LIBXRANDR + select BR2_PACKAGE_ZZIPLIB + help + OGRE is a scene-oriented, flexible 3D engine written in C++ + designed to make it easier and more intuitive for developers + to produce games and demos utilising 3D hardware. The class + library abstracts all the details of using the underlying + system libraries like Direct3D and OpenGL and provides an + interface based on world objects and other intuitive classes. + + https://ogrecave.github.io/ogre + +comment "ogre needs X11 and an OpenGL provider" + depends on !BR2_PACKAGE_HAS_LIBGL || !BR2_PACKAGE_XORG7 + depends on BR2_TOOLCHAIN_HAS_THREADS && BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 \ + && BR2_INSTALL_LIBSTDCPP && !BR2_STATIC_LIBS && BR2_USE_WCHAR + depends on BR2_USE_MMU + +comment "ogre needs a toolchain w/ C++, dynamic library, gcc >= 4.8, threads, wchar" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 \ + || BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS \ + || !BR2_USE_WCHAR + depends on BR2_USE_MMU diff --git a/package/ogre/ogre.hash b/package/ogre/ogre.hash new file mode 100644 index 00000000..8bb4ae96 --- /dev/null +++ b/package/ogre/ogre.hash @@ -0,0 +1,3 @@ +# sha256 locally computed +sha256 163e7700e319532d4389ecba91e3ab88551f78610886fa36f8f262f9a5080988 ogre-1.12.0.tar.gz +sha256 82758e8d1d72139904b9b7472ef0f6544413d2871b58540307fdcc20e473e5f8 LICENSE diff --git a/package/ogre/ogre.mk b/package/ogre/ogre.mk new file mode 100644 index 00000000..2df685a2 --- /dev/null +++ b/package/ogre/ogre.mk @@ -0,0 +1,51 @@ +################################################################################ +# +# ogre +# +################################################################################ + +OGRE_VERSION = 1.12.0 +OGRE_SITE = $(call github,OGRECave,ogre,v$(OGRE_VERSION)) +OGRE_LICENSE = MIT (main library, DeferredShadingMedia samples), Public Domain (samples and plugins), Zlib (tinyxml) +OGRE_LICENSE_FILES = LICENSE +OGRE_INSTALL_STAGING = YES + +# Ogre use a bundled version of tinyxml +OGRE_DEPENDENCIES = host-pkgconf \ + freetype \ + libfreeimage \ + libgl \ + sdl2 \ + xlib_libX11 \ + xlib_libXaw \ + xlib_libXext \ + xlib_libXrandr \ + zziplib + +OGRE_CFLAGS = $(TARGET_CFLAGS) -DGLEW_NO_GLU +OGRE_CXXFLAGS = $(TARGET_CXXFLAGS) -DGLEW_NO_GLU + +# Unbundle freetype and zziplib. +# Disable java and nvidia cg support. +OGRE_CONF_OPTS = -DOGRE_BUILD_DEPENDENCIES=OFF \ + -DOGRE_BUILD_COMPONENT_JAVA=OFF \ + -DOGRE_BUILD_PLUGIN_CG=OFF \ + -DOGRE_INSTALL_DOCS=OFF \ + -DCMAKE_C_FLAGS="$(OGRE_CFLAGS)" \ + -DCMAKE_CXX_FLAGS="$(OGRE_CXXFLAGS)" + +# Enable optional python component if python interpreter is present on the target. +ifeq ($(BR2_PACKAGE_PYTHON)$(BR2_PACKAGE_PYTHON3),y) +OGRE_DEPENDENCIES += host-swig \ + $(if $(BR2_PACKAGE_PYTHON3),host-python3,host-python) +OGRE_CONF_OPTS += -DOGRE_BUILD_COMPONENT_PYTHON=ON +else +OGRE_CONF_OPTS += -DOGRE_BUILD_COMPONENT_PYTHON=OFF +endif + +# Uses __atomic_fetch_add_8 +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +OGRE_CXXFLAGS += -latomic +endif + +$(eval $(cmake-package)) diff --git a/package/olsr/0001-olsrd-migrate-to-using-bison-3.7.1.patch b/package/olsr/0001-olsrd-migrate-to-using-bison-3.7.1.patch new file mode 100644 index 00000000..c29ecfc5 --- /dev/null +++ b/package/olsr/0001-olsrd-migrate-to-using-bison-3.7.1.patch @@ -0,0 +1,48 @@ +From f31eec323ae65124474664f8a0444f7c035556dd Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 6 Sep 2020 22:31:12 +0200 +Subject: [PATCH] olsrd: migrate to using bison 3.7.1 + +With the upgrade to bison 3.7.1 (openwrt commit 1cf842d) building +olsrd was failing. Now, instead of the contents of header files +being directly inserted into the generated source files, they are +instead included with a #include directive. + +The local.mk has, until now, done some magic with *-tmp files, +which is not longer necessary and even causes builds to fail. + +src/cfgparser/oparse.c:265:10: fatal error: oparse.h-tmp: No such file or directory + #include "oparse.h-tmp" + +Suggested-by: Jo-Philipp Wich +Signed-off-by: Perry Melange +[Retrieved from: +https://github.com/openwrt-routing/packages/commit/5cc8e058850acbc22fe92c5e2b24863efc577971] +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/OLSR/olsrd/pull/87] +--- + src/cfgparser/local.mk | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +diff --git a/src/cfgparser/local.mk b/src/cfgparser/local.mk +index e767abfc..56e594e4 100644 +--- a/src/cfgparser/local.mk ++++ b/src/cfgparser/local.mk +@@ -74,12 +74,8 @@ $(C)oparse.c: $(C)oparse.y $(C)olsrd_conf.h $(C)Makefile + ifeq ($(VERBOSE),0) + @echo "[BISON] $@" + endif +- $(MAKECMDPREFIX)$(BISON) -d -o "$@-tmp" "$<" +- $(MAKECMDPREFIX)sed -e 's/register //' \ +- -e '/^#line/s/$(call quote,$@-tmp)/$(call quote,$@)/' \ +- < "$@-tmp" >"$@" +- $(MAKECMDPREFIX)mv "$(subst .c,.h,$@-tmp)" "$(subst .c,.h,$@)" +- $(MAKECMDPREFIX)$(RM) "$@-tmp" "$(subst .c,.h,$@-tmp)" ++ $(MAKECMDPREFIX)$(BISON) -d -o "$@" "$<" ++ $(MAKECMDPREFIX)sed -e 's/register //' "$@" > "$@.o" && mv "$@.o" "$@" + + $(C)oparse.o: CFLAGS := $(filter-out -Wunreachable-code,$(CFLAGS)) + +-- +2.28.0 + diff --git a/package/olsr/0002-lib-pud-Makefile-fix-parallel-build.patch b/package/olsr/0002-lib-pud-Makefile-fix-parallel-build.patch new file mode 100644 index 00000000..b15df240 --- /dev/null +++ b/package/olsr/0002-lib-pud-Makefile-fix-parallel-build.patch @@ -0,0 +1,33 @@ +From 2f9311668dfdeee0453f5fceb27e8c95c065c4b6 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 18 Jan 2020 17:29:56 +0100 +Subject: [PATCH] lib/pud/Makefile: fix parallel build + +nmealib is needed to build olsrd_pud plugin otherwise build fails on: + +[LD] olsrd_pud.so.3.0.0 (nmealib dynamically linked) +/home/fabrice/buildroot/output/host/opt/ext-toolchain/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3/../../../../arm-none-linux-gnueabi/bin/ld: cannot find -lnmea +wireformat/lib/libOlsrdPudWireFormat.so: file not recognized: File truncated + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/OLSR/olsrd/pull/78] +--- + lib/pud/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/pud/Makefile b/lib/pud/Makefile +index e2524421..28330d92 100644 +--- a/lib/pud/Makefile ++++ b/lib/pud/Makefile +@@ -108,7 +108,7 @@ endif + + default_target: nmealib library $(PLUGIN_FULLNAME) + +-$(PLUGIN_FULLNAME): $(OBJS) version-script.txt ++$(PLUGIN_FULLNAME): $(OBJS) version-script.txt nmealib + ifeq ($(PUD_NMEALIB_STATICALLY_LINKED),) + ifeq ($(VERBOSE),0) + @echo "[LD] $@ (nmealib dynamically linked)" +-- +2.24.1 + diff --git a/package/olsr/0003-pud-adapt-to-API-changes-in-gpsd-3-20.patch b/package/olsr/0003-pud-adapt-to-API-changes-in-gpsd-3-20.patch new file mode 100644 index 00000000..f97798d6 --- /dev/null +++ b/package/olsr/0003-pud-adapt-to-API-changes-in-gpsd-3-20.patch @@ -0,0 +1,105 @@ +From b2dfb6c27fcf4ddae87b0e99492f4bb8472fa39a Mon Sep 17 00:00:00 2001 +From: Eneas U de Queiroz +Date: Thu, 13 Feb 2020 17:26:41 -0300 +Subject: [PATCH] pud: adapt to API changes in gpsd 3.20 + +The timestamp fields were changed from double to struct timespec, and +the geoid separation field was moved to fix.geoid_sep. + +Signed-off-by: Eneas U de Queiroz + +[Retrieved from: +https://github.com/OLSR/olsrd/commit/b2dfb6c27fcf4ddae87b0e99492f4bb8472fa39a] +Signed-off-by: Fabrice Fontaine +--- + lib/pud/src/gpsdclient.c | 36 ++++++++++++++++++++++++++++++++---- + 1 file changed, 32 insertions(+), 4 deletions(-) + +diff --git a/lib/pud/src/gpsdclient.c b/lib/pud/src/gpsdclient.c +index 9e7fb708d..2a7a26eef 100644 +--- a/lib/pud/src/gpsdclient.c ++++ b/lib/pud/src/gpsdclient.c +@@ -79,6 +79,23 @@ static void gpsdError(const char *s) { + syslog(LOG_ERR, "gpsd error: %s", s); + } + ++#if GPSD_API_MAJOR_VERSION >= 9 ++static double time_as_double(struct timespec *ts) { ++ return (ts->tv_sec + ts->tv_nsec * 1e-9); ++} ++ ++static bool is_online(struct gps_data_t *gpsdata) { ++ return !!gpsdata->online.tv_sec; ++} ++#else ++ ++#define time_as_double(x) *(x) ++ ++static bool is_online(struct gps_data_t *gpsdata) { ++ return !!gpsdata->online; ++} ++#endif ++ + /* standard parsing of a GPS data source spec */ + void gpsdParseSourceSpec(char *arg, GpsDaemon *gpsDaemon) { + if (!arg // +@@ -298,8 +315,8 @@ void nmeaInfoFromGpsd(struct gps_data_t *gpsdata, NmeaInfo *info, struct GpsdCon + 8, // + dev->parity, // + dev->stopbits, // +- dev->cycle, // +- dev->mincycle); ++ time_as_double(&dev->cycle), // ++ time_as_double(&dev->mincycle)); + + connectionTracking->devSeen[i] = true; + connectionTracking->dev[i] = *dev; +@@ -367,11 +384,18 @@ void nmeaInfoFromGpsd(struct gps_data_t *gpsdata, NmeaInfo *info, struct GpsdCon + nmeaInfoSetPresent(&info->present, NMEALIB_PRESENT_SMASK); + + /* date & time */ ++#if GPSD_API_MAJOR_VERSION >= 9 ++ if (gpsdata->fix.time.tv_sec > 0) { ++ struct tm *time = gmtime(&gpsdata->fix.time.tv_sec); ++ unsigned int hsec = (unsigned int) (gpsdata->fix.time.tv_nsec / 10000000); ++#else + if (!isNaN(gpsdata->fix.time)) { + double seconds; + double fraction = modf(fabs(gpsdata->fix.time), &seconds); + long sec = lrint(seconds); + struct tm *time = gmtime(&sec); ++ unsigned int hsec = (unsigned int) lrint(fraction * 100); ++#endif + if (time) { + info->utc.year = (unsigned int) time->tm_year + 1900; + info->utc.mon = (unsigned int) time->tm_mon + 1; +@@ -379,7 +403,7 @@ void nmeaInfoFromGpsd(struct gps_data_t *gpsdata, NmeaInfo *info, struct GpsdCon + info->utc.hour = (unsigned int) time->tm_hour; + info->utc.min = (unsigned int) time->tm_min; + info->utc.sec = (unsigned int) time->tm_sec; +- info->utc.hsec = (unsigned int) lrint(fraction * 100); ++ info->utc.hsec = hsec; + + nmeaInfoSetPresent(&info->present, NMEALIB_PRESENT_UTCDATE | NMEALIB_PRESENT_UTCTIME); + } +@@ -387,7 +411,7 @@ void nmeaInfoFromGpsd(struct gps_data_t *gpsdata, NmeaInfo *info, struct GpsdCon + gpsdata->set &= ~TIME_SET; + + /* sig & fix */ +- if (!gpsdata->online) { ++ if (!is_online(gpsdata)) { + gpsdata->fix.mode = MODE_NO_FIX; + } + +@@ -454,7 +478,11 @@ void nmeaInfoFromGpsd(struct gps_data_t *gpsdata, NmeaInfo *info, struct GpsdCon + if ((gpsdata->fix.mode >= MODE_3D) // + && !isNaN(gpsdata->fix.altitude)) { + info->elevation = gpsdata->fix.altitude; ++#if GPSD_API_MAJOR_VERSION >= 9 ++ info->height = gpsdata->fix.geoid_sep; ++#else + info->height = gpsdata->separation; ++#endif + nmeaInfoSetPresent(&info->present, NMEALIB_PRESENT_ELV | NMEALIB_PRESENT_HEIGHT); + } + gpsdata->set &= ~ALTITUDE_SET; diff --git a/package/olsr/Config.in b/package/olsr/Config.in new file mode 100644 index 00000000..632511fb --- /dev/null +++ b/package/olsr/Config.in @@ -0,0 +1,24 @@ +config BR2_PACKAGE_OLSR + bool "olsr" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + # https://github.com/OLSR/olsrd/issues/6 + depends on !BR2_TOOLCHAIN_USES_MUSL || BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_15 + help + The Optimized Link State Routing protocol (OLSR) is a + routing protocol that is optimised for mobile ad-hoc + networks, sometimes called wireless mesh networks. It is a + proactive link-state routing protocol that floods a full + topology table to all nodes in the network which then + compute optimal forwarding paths locally. + + http://www.olsr.org/ + +comment "olsr needs a toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS + +comment "olsr needs a musl toolchain w/ headers >= 4.15" + depends on BR2_TOOLCHAIN_USES_MUSL + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_15 diff --git a/package/olsr/S50olsr b/package/olsr/S50olsr new file mode 100644 index 00000000..fa1324fa --- /dev/null +++ b/package/olsr/S50olsr @@ -0,0 +1,23 @@ +#!/bin/sh + +case "$1" in + start) + printf "Starting oslrd daemon: " + start-stop-daemon -S -q -x /usr/sbin/olsrd -- -d 0 -pidfile /run/olsrd.pid + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + stop) + printf "Stopping olsrd daemon: " + start-stop-daemon -K -q -p /run/olsrd.pid + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + restart) + $0 stop + $0 start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/olsr/olsr.hash b/package/olsr/olsr.hash new file mode 100644 index 00000000..821361bb --- /dev/null +++ b/package/olsr/olsr.hash @@ -0,0 +1,4 @@ +# Locally computed +sha256 ee9e524224e5d5304dcf61f1dc5485c569da09d382934ff85b233be3e24821a3 olsr-0.9.8.tar.gz +sha256 7dcf1fb93ef105e2708b02603bb6ee443115d4819fbf2c5a3a001b46887acb9a license.txt +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 lib/pud/nmealib/LICENSE diff --git a/package/olsr/olsr.mk b/package/olsr/olsr.mk new file mode 100644 index 00000000..b2c8e7e0 --- /dev/null +++ b/package/olsr/olsr.mk @@ -0,0 +1,60 @@ +################################################################################ +# +# olsr +# +################################################################################ + +OLSR_VERSION = 0.9.8 +OLSR_SITE = $(call github,OLSR,olsrd,v$(OLSR_VERSION)) +OLSR_PLUGINS = arprefresh bmf dot_draw dyn_gw dyn_gw_plain httpinfo jsoninfo \ + mdns nameservice netjson poprouting p2pd pgraph secure txtinfo watchdog +# Doesn't really need quagga but not very useful without it +OLSR_PLUGINS += $(if $(BR2_PACKAGE_QUAGGA),quagga) +OLSR_LICENSE = BSD-3-Clause +OLSR_LICENSE_FILES = license.txt +OLSR_DEPENDENCIES = host-flex host-bison + +OLSR_CFLAGS = $(TARGET_CFLAGS) + +# it needs -fPIC to link on lot of architectures +OLSR_CFLAGS += -fPIC + +ifeq ($(BR2_PACKAGE_GPSD),y) +OLSR_LICENSE += , LGPL-2.1+ (nmealib) +OLSR_LICENSE_FILES += lib/pud/nmealib/LICENSE +OLSR_DEPENDENCIES += gpsd +OLSR_PLUGINS += pud +endif + +define OLSR_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) ARCH=$(KERNEL_ARCH) \ + CFLAGS="$(OLSR_CFLAGS)" -C $(@D) olsrd + $(foreach p,$(OLSR_PLUGINS), \ + $(TARGET_CONFIGURE_OPTS) $(MAKE) ARCH=$(KERNEL_ARCH) \ + CFLAGS="$(OLSR_CFLAGS)" -C $(@D)/lib/$(p) + ) +endef + +define OLSR_INSTALL_TARGET_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) \ + prefix="/usr" install_bin + $(foreach p,$(OLSR_PLUGINS), \ + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D)/lib/$(p) \ + LDCONFIG=/bin/true DESTDIR=$(TARGET_DIR) \ + prefix="/usr" install + ) + $(INSTALL) -D -m 0644 $(@D)/files/olsrd.conf.default.lq \ + $(TARGET_DIR)/etc/olsrd/olsrd.conf +endef + +define OLSR_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/olsr/S50olsr \ + $(TARGET_DIR)/etc/init.d/S50olsr +endef + +define OLSR_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/olsr/olsr.service \ + $(TARGET_DIR)/usr/lib/systemd/system/olsr.service +endef + +$(eval $(generic-package)) diff --git a/package/olsr/olsr.service b/package/olsr/olsr.service new file mode 100644 index 00000000..9ec89303 --- /dev/null +++ b/package/olsr/olsr.service @@ -0,0 +1,10 @@ +[Unit] +Description=Ad-hoc wireless mesh routing daemon +After=network.target + +[Service] +ExecStart=/usr/sbin/olsrd -nofork +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/package/omap-u-boot-utils/Config.in.host b/package/omap-u-boot-utils/Config.in.host new file mode 100644 index 00000000..1549674f --- /dev/null +++ b/package/omap-u-boot-utils/Config.in.host @@ -0,0 +1,9 @@ +config BR2_PACKAGE_HOST_OMAP_U_BOOT_UTILS + bool "host omap-u-boot-utils" + depends on BR2_arm || BR2_armeb + help + U-Boot Utilities for Texas Instrument's OMAP platforms. + This is a set of tools to control U-Boot from scripts, + generate OMAP-specific signed image files and more. + + https://github.com/nmenon/omap-u-boot-utils diff --git a/package/omap-u-boot-utils/omap-u-boot-utils.hash b/package/omap-u-boot-utils/omap-u-boot-utils.hash new file mode 100644 index 00000000..e61bb812 --- /dev/null +++ b/package/omap-u-boot-utils/omap-u-boot-utils.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 f9c2553efeff1289b2b964a266a0b4a03a377f84a14d0599a779f6e3d7b75d5f omap-u-boot-utils-3f07426cddc0be9e24702e7aacc7574ddd7fba28.tar.gz +sha256 1080312c3230fb7dd32fe807ed8c8cd11f4061bf1a2f065b651630bfe30157b2 COPYING diff --git a/package/omap-u-boot-utils/omap-u-boot-utils.mk b/package/omap-u-boot-utils/omap-u-boot-utils.mk new file mode 100644 index 00000000..d68b1300 --- /dev/null +++ b/package/omap-u-boot-utils/omap-u-boot-utils.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# omap-u-boot-utils +# +################################################################################ + +OMAP_U_BOOT_UTILS_VERSION = 3f07426cddc0be9e24702e7aacc7574ddd7fba28 +OMAP_U_BOOT_UTILS_SITE = $(call github,nmenon,omap-u-boot-utils,$(OMAP_U_BOOT_UTILS_VERSION)) +OMAP_U_BOOT_UTILS_LICENSE = GPL-2.0, GPL-2.0+ +OMAP_U_BOOT_UTILS_LICENSE_FILES = COPYING + +define HOST_OMAP_U_BOOT_UTILS_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define HOST_OMAP_U_BOOT_UTILS_INSTALL_CMDS + for f in gpsign pserial tagger ucmd ukermit ; do \ + $(INSTALL) -D -m 755 $(@D)/$$f $(HOST_DIR)/bin/$$f ; \ + done +endef + +$(eval $(host-generic-package)) diff --git a/package/omniorb/Config.in b/package/omniorb/Config.in new file mode 100644 index 00000000..4af91a4d --- /dev/null +++ b/package/omniorb/Config.in @@ -0,0 +1,28 @@ + +comment "omniORB needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_OMNIORB + bool "omniorb" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + help + omniORB is a robust high performance CORBA ORB for C++ and + Python. + omniORB is largely CORBA 2.6 compliant. omniORB is one of + only three ORBs to have been awarded the Open Group's Open + Brand for CORBA. This means that omniORB has been tested and + certified CORBA compliant, to version 2.1 of the CORBA + specification. + + http://omniorb.sourceforge.net/ + +if BR2_PACKAGE_OMNIORB + +config BR2_PACKAGE_OMNIORB_WITH_APPS + bool "Enable Apps and Services" + help + omniORB applications and services disabled by default + embedded system build configuration. + +endif diff --git a/package/omniorb/omniorb.hash b/package/omniorb/omniorb.hash new file mode 100644 index 00000000..5ac86146 --- /dev/null +++ b/package/omniorb/omniorb.hash @@ -0,0 +1,8 @@ +# From https://sourceforge.net/projects/omniorb/files/omniORB/omniORB-4.2.4/ +sha1 a6f3c8e96fc09c4ef8d75bd495bbc5256a4773ee omniORB-4.2.4.tar.bz2 +md5 de961e8aa29f3eed95ea40a94c1cccdf omniORB-4.2.4.tar.bz2 + +# Locally generated +sha256 28c01cd0df76c1e81524ca369dc9e6e75f57dc70f30688c99c67926e4bdc7a6f omniORB-4.2.4.tar.bz2 +sha256 126647a6ee062fe46f8f3766965dc62e031c0a31238a347e4bc07aab2ac1e2a7 COPYING +sha256 eaf5b13ffd5355da7c0b83074e4b798152ff7086c95c4f3045122a06e2673eb9 COPYING.LIB diff --git a/package/omniorb/omniorb.mk b/package/omniorb/omniorb.mk new file mode 100644 index 00000000..4ecbb9d2 --- /dev/null +++ b/package/omniorb/omniorb.mk @@ -0,0 +1,75 @@ +################################################################################ +# +# omniorb +# +################################################################################ + +OMNIORB_VERSION = 4.2.4 +OMNIORB_SITE = http://downloads.sourceforge.net/project/omniorb/omniORB/omniORB-$(OMNIORB_VERSION) +OMNIORB_SOURCE = omniORB-$(OMNIORB_VERSION).tar.bz2 +OMNIORB_INSTALL_STAGING = YES +OMNIORB_LICENSE = GPL2+, LGPL-2.1+ +OMNIORB_LICENSE_FILES = COPYING COPYING.LIB +OMNIORB_DEPENDENCIES = host-omniorb +HOST_OMNIORB_DEPENDENCIES = host-python + +# omniorb is not python3 friendly, so force the python interpreter +OMNIORB_CONF_OPTS = ac_cv_path_PYTHON=$(HOST_DIR)/bin/python2 +HOST_OMNIORB_CONF_OPTS = ac_cv_path_PYTHON=$(HOST_DIR)/bin/python2 + +# Defaulting long double support to a safe option for the +# mix of embedded targets, this could later be automated +# based on checking the capability of the cross toolchain +# for "__LONG_DOUBLE_128__". Currently the host and target +# need to match because of the code generation done by the +# host tools during the target compile (ie headers generated +# on host are used in target build). +OMNIORB_CONF_OPTS += --disable-longdouble +HOST_OMNIORB_CONF_OPTS += --disable-longdouble + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +OMNIORB_CONF_OPTS += --with-openssl +OMNIORB_DEPENDENCIES += openssl +else +OMNIORB_CONF_OPTS += --without-openssl +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +OMNIORB_DEPENDENCIES += zlib +endif + +# The EmbeddedSystem define (set below in OMNIORB_ADJUST_TOOLDIR) +# enables building of just the lib and disables building of +# tools/apps/services. In some cases the apps/services are still +# required. The tools however are host related and should never +# be required on target. +define OMNIORB_ENABLE_EXTRA_APPS + $(SED) 's:SUBDIRS += lib:SUBDIRS += lib appl services:g' $(@D)/src/dir.mk +endef + +ifeq ($(BR2_PACKAGE_OMNIORB_WITH_APPS),y) +OMNIORB_POST_PATCH_HOOKS += OMNIORB_ENABLE_EXTRA_APPS +endif + +ifeq ($(BR2_STATIC_LIBS),y) +define OMNIORB_DISABLE_SHARED + echo "BuildSharedLibrary =" >> $(@D)/mk/beforeauto.mk +endef +OMNIORB_POST_CONFIGURE_HOOKS += OMNIORB_DISABLE_SHARED +endif + +# omniORB is not completely cross-compile friendly and has some +# assumptions where a couple host tools must be built and then +# used by the target build. The host tools generate code from +# the IDL description language, which is then built into the +# cross compiled target OMNIORB application. +define OMNIORB_ADJUST_TOOLDIR + # Point to the host folder to get HOST_OMNIORB tools + $(SED) 's:TOOLBINDIR = $$(TOP)/$$(BINDIR):TOOLBINDIR = $(HOST_DIR)/bin:g' $(@D)/mk/beforeauto.mk + # Disables OMNIORB app/service/tool building + echo "EmbeddedSystem=1" >> $(@D)/mk/beforeauto.mk +endef +OMNIORB_POST_CONFIGURE_HOOKS += OMNIORB_ADJUST_TOOLDIR + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/omxplayer/0001-Update-Makefile-to-be-compatible-with-buildroot.patch b/package/omxplayer/0001-Update-Makefile-to-be-compatible-with-buildroot.patch new file mode 100644 index 00000000..8f8bfad7 --- /dev/null +++ b/package/omxplayer/0001-Update-Makefile-to-be-compatible-with-buildroot.patch @@ -0,0 +1,39 @@ +From 40bf9c0960becaf0e592cac901466af93f24e52b Mon Sep 17 00:00:00 2001 +From: Julius Kriukas +Date: Fri, 1 Dec 2017 18:29:24 +0200 +Subject: [PATCH] Update Makefile to be compatible with buildroot + +- Append to existing CFLAGS instead of overwriting. +- Remove cross-compilation specific options from CFLAGS, they will be + set by buildroot. +- Remove local ffmpeg_compiled include, buildroot will build ffmpeg + separately. +- Remove hard-coded dbus, freetype, rpi-firmware include paths, they + will be added by buildroot. + +Signed-off-by: Julius Kriukas +--- + Makefile | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/Makefile b/Makefile +index 5f4e414..53fa1bc 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,10 +1,10 @@ +-CFLAGS=-pipe -mfloat-abi=hard -mcpu=arm1176jzf-s -fomit-frame-pointer -mabi=aapcs-linux -mtune=arm1176jzf-s -mfpu=vfp -Wno-psabi -mno-apcs-stack-check -g -mstructure-size-boundary=32 -mno-sched-prolog ++CFLAGS+=-fomit-frame-pointer -Wno-psabi -mno-apcs-stack-check -g -mstructure-size-boundary=32 -mno-sched-prolog + CFLAGS+=-std=c++0x -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -DTARGET_POSIX -DTARGET_LINUX -fPIC -DPIC -D_REENTRANT -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CMAKE_CONFIG -D__VIDEOCORE4__ -U_FORTIFY_SOURCE -Wall -DHAVE_OMXLIB -DUSE_EXTERNAL_FFMPEG -DHAVE_LIBAVCODEC_AVCODEC_H -DHAVE_LIBAVUTIL_OPT_H -DHAVE_LIBAVUTIL_MEM_H -DHAVE_LIBAVUTIL_AVUTIL_H -DHAVE_LIBAVFORMAT_AVFORMAT_H -DHAVE_LIBAVFILTER_AVFILTER_H -DHAVE_LIBSWRESAMPLE_SWRESAMPLE_H -DOMX -DOMX_SKIP64BIT -ftree-vectorize -DUSE_EXTERNAL_OMX -DTARGET_RASPBERRY_PI -DUSE_EXTERNAL_LIBBCM_HOST + + LDFLAGS=-L$(SDKSTAGE)/opt/vc/lib/ +-LDFLAGS+=-L./ -Lffmpeg_compiled/usr/local/lib/ -lc -lbrcmGLESv2 -lbrcmEGL -lbcm_host -lopenmaxil -lfreetype -lz -lasound ++LDFLAGS+=-L./ -lc -lbrcmGLESv2 -lbrcmEGL -lbcm_host -lopenmaxil -lfreetype -lz -lasound + +-INCLUDES+=-I./ -Ilinux -Iffmpeg_compiled/usr/local/include/ -I /usr/include/dbus-1.0 -I /usr/lib/arm-linux-gnueabihf/dbus-1.0/include -I/usr/include/freetype2 -isystem$(SDKSTAGE)/opt/vc/include -isystem$(SDKSTAGE)/opt/vc/include/interface/vcos/pthreads ++INCLUDES+=-I./ -Ilinux + + DIST ?= omxplayer-dist + STRIP ?= strip +-- +2.11.0 + diff --git a/package/omxplayer/Config.in b/package/omxplayer/Config.in new file mode 100644 index 00000000..d2e4b5ac --- /dev/null +++ b/package/omxplayer/Config.in @@ -0,0 +1,36 @@ +config BR2_PACKAGE_OMXPLAYER + bool "omxplayer" + depends on BR2_arm + depends on BR2_USE_MMU # dbus + depends on BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS # ffmpeg + depends on BR2_INSTALL_LIBSTDCPP # boost + depends on BR2_TOOLCHAIN_HAS_THREADS # alsa-lib, boost, libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + depends on BR2_USE_WCHAR # boost + depends on BR2_PACKAGE_RPI_USERLAND + select BR2_PACKAGE_ALSA_LIB + select BR2_PACKAGE_BOOST + select BR2_PACKAGE_DBUS + select BR2_PACKAGE_FFMPEG + select BR2_PACKAGE_FFMPEG_AVRESAMPLE + select BR2_PACKAGE_FFMPEG_SWSCALE + select BR2_PACKAGE_FREETYPE + select BR2_PACKAGE_LIBIDN + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_PCRE + select BR2_PACKAGE_ZLIB + help + OMXPlayer is a commandline OMX player for the Raspberry + Pi. It was developed as a testbed for the XBMC Raspberry PI + implementation and is quite handy to use standalone. + + https://github.com/popcornmix/omxplayer + +comment "omxplayer needs rpi-userland and a toolchain w/ C++, threads, wchar, dynamic library, gcc >= 4.9" + depends on BR2_arm + depends on BR2_USE_MMU + depends on BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS + depends on !BR2_PACKAGE_RPI_USERLAND + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS \ + || !BR2_USE_WCHAR || BR2_STATIC_LIBS \ + || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/omxplayer/omxplayer.hash b/package/omxplayer/omxplayer.hash new file mode 100644 index 00000000..fcbf730a --- /dev/null +++ b/package/omxplayer/omxplayer.hash @@ -0,0 +1,6 @@ +# Locally computed: +sha1 a9106203f822fe88eb35980479f46a555086d4a7 omxplayer-f06235cc9690a6d58187514452df8cf8fcdaacec.tar.gz +sha256 af2d9450f8947842ea8c401fe9f71eec444013ebbdee29f2ac828c9c493c1329 omxplayer-f06235cc9690a6d58187514452df8cf8fcdaacec.tar.gz + +# Hash for license file: +sha256 60e78ba9f921bb06bcf957575245414b1577c9688a63ddd73bc65f9d48fe31c9 COPYING diff --git a/package/omxplayer/omxplayer.mk b/package/omxplayer/omxplayer.mk new file mode 100644 index 00000000..072274cd --- /dev/null +++ b/package/omxplayer/omxplayer.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# omxplayer +# +################################################################################ + +OMXPLAYER_VERSION = f06235cc9690a6d58187514452df8cf8fcdaacec +OMXPLAYER_SITE = $(call github,popcornmix,omxplayer,$(OMXPLAYER_VERSION)) +OMXPLAYER_LICENSE = GPL-2.0+ +OMXPLAYER_LICENSE_FILES = COPYING + +OMXPLAYER_DEPENDENCIES = \ + host-pkgconf alsa-lib boost dbus ffmpeg freetype libidn libusb pcre \ + rpi-userland zlib + +OMXPLAYER_EXTRA_CFLAGS = \ + -DTARGET_LINUX -DTARGET_POSIX \ + `$(PKG_CONFIG_HOST_BINARY) --cflags bcm_host` \ + `$(PKG_CONFIG_HOST_BINARY) --cflags freetype2` \ + `$(PKG_CONFIG_HOST_BINARY) --cflags dbus-1` + +# OMXplayer has support for building in Buildroot, but that +# procedure is, well, tainted. Fix this by forcing the real, +# correct values. +OMXPLAYER_MAKE_ENV = \ + SDKSTAGE=$(STAGING_DIR) \ + $(TARGET_CONFIGURE_OPTS) \ + STRIP=true \ + CFLAGS="$(TARGET_CFLAGS) $(OMXPLAYER_EXTRA_CFLAGS)" + +define OMXPLAYER_BUILD_CMDS + $(OMXPLAYER_MAKE_ENV) $(MAKE) -C $(@D) omxplayer.bin +endef + +define OMXPLAYER_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/omxplayer.bin $(TARGET_DIR)/usr/bin/omxplayer +endef + +$(eval $(generic-package)) diff --git a/package/on2-8170-libs/Config.in b/package/on2-8170-libs/Config.in new file mode 100644 index 00000000..2a60c581 --- /dev/null +++ b/package/on2-8170-libs/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_ON2_8170_LIBS + bool "on2-8170-libs" + #This is a binary only package which has been compiled for glibc + depends on BR2_arm926t + depends on BR2_TOOLCHAIN_USES_GLIBC + depends on BR2_LINUX_KERNEL # on2-8170-modules + select BR2_PACKAGE_ON2_8170_MODULES # runtime + help + Libraries for Hantro X170 video decoder + + http://www.at91.com/linux4sam/bin/view/Linux4SAM/SAM9M10Gstreamer + +comment "on2-8170-libs needs a glibc toolchain and a Linux kernel to be built" + depends on BR2_arm926t + depends on !BR2_LINUX_KERNEL || !BR2_TOOLCHAIN_USES_GLIBC diff --git a/package/on2-8170-libs/on2-8170-libs.hash b/package/on2-8170-libs/on2-8170-libs.hash new file mode 100644 index 00000000..c8b76e57 --- /dev/null +++ b/package/on2-8170-libs/on2-8170-libs.hash @@ -0,0 +1,2 @@ +# locally computed +sha256 db7390a13e7c0426894a6f966ecde1f89e6566416088c50729750e800306a2de on2-8170-libs-1.0.tar.gz diff --git a/package/on2-8170-libs/on2-8170-libs.mk b/package/on2-8170-libs/on2-8170-libs.mk new file mode 100644 index 00000000..ad321d83 --- /dev/null +++ b/package/on2-8170-libs/on2-8170-libs.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# on2-8170-libs +# +################################################################################ + +ON2_8170_LIBS_VERSION = 1.0 +ON2_8170_LIBS_SITE = ftp://ftp.linux4sam.org/pub/demo/linux4sam_1.9/codec + +ON2_8170_LIBS_LICENSE = PROPRIETARY +# No license file is included in the archive + +ON2_8170_LIBS_INSTALL_STAGING = YES + +define ON2_8170_LIBS_INSTALL_STAGING_CMDS + mkdir -p $(STAGING_DIR)/usr/lib $(STAGING_DIR)/usr/include + cp -dpf $(@D)/*.a $(@D)/*.so $(STAGING_DIR)/usr/lib + cp -dpf $(@D)/*.h $(STAGING_DIR)/usr/include +endef + +define ON2_8170_LIBS_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/usr/lib + cp -dpf $(@D)/*.so $(TARGET_DIR)/usr/lib +endef + +$(eval $(generic-package)) diff --git a/package/on2-8170-modules/Config.in b/package/on2-8170-modules/Config.in new file mode 100644 index 00000000..8c51e0c8 --- /dev/null +++ b/package/on2-8170-modules/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_ON2_8170_MODULES + bool "on2-8170-modules" + depends on BR2_LINUX_KERNEL + depends on BR2_arm926t + help + Kernel modules for Hantro x170 hardware video decompression + support. + + http://www.at91.com/linux4sam/bin/view/Linux4SAM/SAM9M10Gstreamer + +comment "on2-8170-modules needs a Linux kernel to be built" + depends on BR2_arm926t + depends on !BR2_LINUX_KERNEL diff --git a/package/on2-8170-modules/on2-8170-modules.hash b/package/on2-8170-modules/on2-8170-modules.hash new file mode 100644 index 00000000..cfb1272d --- /dev/null +++ b/package/on2-8170-modules/on2-8170-modules.hash @@ -0,0 +1,2 @@ +# locally computed +sha256 d04d3acb8755281f6721d2a2efe04014060f83f38972208f356a486d52ca8bfc on2-8170-modules-73b08061d30789178e692bc332b73d1d9922bf39.tar.gz diff --git a/package/on2-8170-modules/on2-8170-modules.mk b/package/on2-8170-modules/on2-8170-modules.mk new file mode 100644 index 00000000..98643134 --- /dev/null +++ b/package/on2-8170-modules/on2-8170-modules.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# on2-8170-modules +# +################################################################################ + +ON2_8170_MODULES_VERSION = 73b08061d30789178e692bc332b73d1d9922bf39 +ON2_8170_MODULES_SITE = $(call github,alexandrebelloni,on2-8170-modules,$(ON2_8170_MODULES_VERSION)) + +ON2_8170_MODULES_LICENSE = GPL-2.0+ +#There is no license file + +$(eval $(kernel-module)) +$(eval $(generic-package)) diff --git a/package/oniguruma/Config.in b/package/oniguruma/Config.in new file mode 100644 index 00000000..2e8b41c1 --- /dev/null +++ b/package/oniguruma/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_ONIGURUMA + bool "oniguruma" + help + Oniguruma is a modern and flexible regular expressions + library. It encompasses features from different regular + expression implementations that traditionally exist in + different languages. + + https://github.com/kkos/oniguruma diff --git a/package/oniguruma/oniguruma.hash b/package/oniguruma/oniguruma.hash new file mode 100644 index 00000000..668f21d3 --- /dev/null +++ b/package/oniguruma/oniguruma.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 bd0faeb887f748193282848d01ec2dad8943b5dfcb8dc03ed52dcc963549e819 onig-6.9.6.tar.gz +sha256 6c7038393e8f30fee16257e713f77e383712f1465d6d25929596746b10b42bd3 COPYING diff --git a/package/oniguruma/oniguruma.mk b/package/oniguruma/oniguruma.mk new file mode 100644 index 00000000..6ea5e1e6 --- /dev/null +++ b/package/oniguruma/oniguruma.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# oniguruma +# +################################################################################ + +ONIGURUMA_VERSION = 6.9.6 +ONIGURUMA_SITE = \ + https://github.com/kkos/oniguruma/releases/download/v$(ONIGURUMA_VERSION) +ONIGURUMA_SOURCE = onig-$(ONIGURUMA_VERSION).tar.gz +ONIGURUMA_LICENSE = BSD-2-Clause +ONIGURUMA_LICENSE_FILES = COPYING +ONIGURUMA_CPE_ID_VENDOR = oniguruma_project +ONIGURUMA_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/open-lldp/Config.in b/package/open-lldp/Config.in new file mode 100644 index 00000000..5bf363ef --- /dev/null +++ b/package/open-lldp/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_OPEN_LLDP + bool "open-lldp" + depends on !BR2_STATIC_LIBS # dlfcn.h + depends on BR2_TOOLCHAIN_HAS_THREADS # libnl + select BR2_PACKAGE_LIBCONFIG + select BR2_PACKAGE_LIBNL + select BR2_PACKAGE_READLINE + help + This package contains the Linux user space daemon and + configuration tool for Intel LLDP Agent with Enhanced Ethernet + support for the Data Center. + + https://github.com/intel/openlldp/ + +comment "open-lldp needs a toolchain w/ dynamic library, threads" + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/open-lldp/open-lldp.hash b/package/open-lldp/open-lldp.hash new file mode 100644 index 00000000..1fbd8dd0 --- /dev/null +++ b/package/open-lldp/open-lldp.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 13e0890527192a6289e6dac82056c447a1e2624ff93b0b6bbd8a42d15b2cbc8c open-lldp-1.1.tar.gz +sha256 67af5abeb092213cd9c53781503320f635ba28b641e0c3f24d367e8e93a9839b COPYING diff --git a/package/open-lldp/open-lldp.mk b/package/open-lldp/open-lldp.mk new file mode 100644 index 00000000..d42dbcc5 --- /dev/null +++ b/package/open-lldp/open-lldp.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# open-lldp +# +################################################################################ + +OPEN_LLDP_VERSION = 1.1 +OPEN_LLDP_SITE = $(call github,intel,openlldp,v$(OPEN_LLDP_VERSION)) +OPEN_LLDP_DEPENDENCIES = readline libnl libconfig host-pkgconf +OPEN_LLDP_LICENSE = GPL-2.0 +OPEN_LLDP_LICENSE_FILES = COPYING + +# Fetching from git +OPEN_LLDP_AUTORECONF = YES + +ifeq ($(BR2_INIT_SYSTEMD),y) +OPEN_LLDP_DEPENDENCIES += systemd +OPEN_LLDP_CONF_OPTS += --with-systemdsystemunitdir=/usr/lib/systemd/system +endif + +$(eval $(autotools-package)) diff --git a/package/open-plc-utils/0001-Remove-OWNER-and-GROUPS-parameters-to-install.patch b/package/open-plc-utils/0001-Remove-OWNER-and-GROUPS-parameters-to-install.patch new file mode 100644 index 00000000..d3364440 --- /dev/null +++ b/package/open-plc-utils/0001-Remove-OWNER-and-GROUPS-parameters-to-install.patch @@ -0,0 +1,277 @@ +From 1fe7b756365254f7175558e7a89c1d89f95c5e2e Mon Sep 17 00:00:00 2001 +From: Maxime Hadjinlian +Date: Tue, 30 Sep 2014 13:46:59 +0200 +Subject: [PATCH] Remove OWNER and GROUPS parameters to install + +The Install tries to change the owner and groups of the binary. In +Buildroot we don't want that, since fakeroot will do its job when we +finalize the rootfs. + +Signed-off-by: Maxime Hadjinlian +[aduskett@gmail.com: Updated for 32408520fcebe785983a68e39ec83830a3005779] +Signed-off-by: Adam Duskett +--- + docbook/Makefile | 4 ++-- + ether/Makefile | 8 ++++---- + key/Makefile | 8 ++++---- + mdio/Makefile | 8 ++++---- + mme/Makefile | 8 ++++---- + nvm/Makefile | 8 ++++---- + pib/Makefile | 8 ++++---- + plc/Makefile | 8 ++++---- + ram/Makefile | 8 ++++---- + serial/Makefile | 8 ++++---- + slac/Makefile | 8 ++++---- + tools/Makefile | 2 +- + 12 files changed, 43 insertions(+), 43 deletions(-) + +diff --git a/docbook/Makefile b/docbook/Makefile +index d630822..039d62a 100755 +--- a/docbook/Makefile ++++ b/docbook/Makefile +@@ -32,9 +32,9 @@ manuals: + ${SHELL} ../docbook/manuals + scripts: + library: +- install -m ${DIR_PERM} -o ${OWNER} -g ${GROUP} -d ${LIBRARY} ++ install -m ${DIR_PERM} -d ${LIBRARY} + install: library +- if [ -d ${LIBRARY} ]; then install -m ${WWW_PERM} -o ${OWNER} -g ${GROUP} *.html *.css *.png ${LIBRARY}; fi ++ if [ -d ${LIBRARY} ]; then install -m ${WWW_PERM} *.html *.css *.png ${LIBRARY}; fi + uninstall: + rm -f ${LIBRARY}/*.c.html ${LIBRARY}/*.h.html ${LIBRARY}/*.1.html + setup: +diff --git a/ether/Makefile b/ether/Makefile +index 89174cb..8256d50 100755 +--- a/ether/Makefile ++++ b/ether/Makefile +@@ -27,13 +27,13 @@ compact: compile + if [ ! -z ${STRIP} ]; then ${STRIP} ${TOOLS}; fi + if [ -x /usr/local/bin/upx ]; then upx --best ${TOOLS}; fi + library: +- install -m ${DIR_PERM} -o ${OWNER} -g ${GROUP} -d ${BIN} ++ install -m ${DIR_PERM} -d ${BIN} + scripts: + manuals: +- test -d ${MAN} || install -m ${DIR_PERM} -o ${OWNER} -g ${GROUP} -d ${MAN} +- install -m ${MAN_PERM} -o ${OWNER} -g ${GROUP} ${PAGES} ${MAN} ++ test -d ${MAN} || install -m ${DIR_PERM} -d ${MAN} ++ install -m ${MAN_PERM} ${PAGES} ${MAN} + install: $(TOOLS) library +- install -m ${SUID_PERM} -o ${OWNER} -g ${GROUP} ${TOOLS} ${BIN} ++ install -m ${SUID_PERM} ${TOOLS} ${BIN} + uninstall: + cd ${BIN}; rm -f ${TOOLS} + cd ${MAN}; rm -f ${PAGES} +diff --git a/key/Makefile b/key/Makefile +index de62a49..78fa200 100755 +--- a/key/Makefile ++++ b/key/Makefile +@@ -28,13 +28,13 @@ compact: compile + if [ ! -z ${STRIP} ]; then ${STRIP} ${TOOLS}; fi + if [ -x /usr/local/bin/upx ]; then upx --best ${TOOLS}; fi + library: +- install -m ${DIR_PERM} -o ${OWNER} -g ${GROUP} -d ${BIN} ++ install -m ${DIR_PERM} -d ${BIN} + scripts: + manuals: +- test -d ${MAN} || install -m ${DIR_PERM} -o ${OWNER} -g ${GROUP} -d ${MAN} +- install -m ${MAN_PERM} -o ${OWNER} -g ${GROUP} ${PAGES} ${MAN} ++ test -d ${MAN} || install -m ${DIR_PERM} -d ${MAN} ++ install -m ${MAN_PERM} ${PAGES} ${MAN} + install: $(TOOLS) +- install -m ${BIN_PERM} -o ${OWNER} -g ${GROUP} ${TOOLS} ${BIN} ++ install -m ${BIN_PERM} ${TOOLS} ${BIN} + uninstall: + cd ${BIN}; rm -f ${TOOLS} + cd ${MAN}; rm -f ${PAGES} +diff --git a/mdio/Makefile b/mdio/Makefile +index 049b08e..3ff4c26 100755 +--- a/mdio/Makefile ++++ b/mdio/Makefile +@@ -27,13 +27,13 @@ compact: compile + if [ ! -z ${STRIP} ]; then ${STRIP} ${TOOLS}; fi + if [ -x /usr/local/bin/upx ]; then upx --best ${TOOLS}; fi + library: +- install -m ${DIR_PERM} -o ${OWNER} -g ${GROUP} -d ${BIN} ++ install -m ${DIR_PERM} -d ${BIN} + scripts: + manuals: +- test -d ${MAN} || install -m ${DIR_PERM} -o ${OWNER} -g ${GROUP} -d ${MAN} +- install -m ${MAN_PERM} -o ${OWNER} -g ${GROUP} ${PAGES} ${MAN} ++ test -d ${MAN} || install -m ${DIR_PERM} -d ${MAN} ++ install -m ${MAN_PERM} ${PAGES} ${MAN} + install: $(TOOLS) library +- install -m ${BIN_PERM} -o ${OWNER} -g ${GROUP} ${TOOLS} ${BIN} ++ install -m ${BIN_PERM} ${TOOLS} ${BIN} + uninstall: + cd ${BIN}; rm -f int6k ${TOOLS} + cd ${MAN}; rm -f int6k ${PAGES} +diff --git a/mme/Makefile b/mme/Makefile +index 0313aea..77a6b96 100755 +--- a/mme/Makefile ++++ b/mme/Makefile +@@ -27,13 +27,13 @@ compact: compile + if [ ! -z ${STRIP} ]; then ${STRIP} ${TOOLS}; fi + if [ -x /usr/local/bin/upx ]; then upx --best ${TOOLS}; fi + library: +- install -m ${DIR_PERM} -o ${OWNER} -g ${GROUP} -d ${BIN} ++ install -m ${DIR_PERM} -d ${BIN} + scripts: + manuals: +- test -d ${MAN} || install -m ${DIR_PERM} -o ${OWNER} -g ${GROUP} -d ${MAN} +- install -m ${MAN_PERM} -o ${OWNER} -g ${GROUP} ${PAGES} ${MAN} ++ test -d ${MAN} || install -m ${DIR_PERM} -d ${MAN} ++ install -m ${MAN_PERM} ${PAGES} ${MAN} + install: $(TOOLS) library +- install -m ${BIN_PERM} -o ${OWNER} -g ${GROUP} ${TOOLS} ${BIN} ++ install -m ${BIN_PERM} ${TOOLS} ${BIN} + uninstall: + cd ${BIN}; rm -f ${TOOLS} + cd ${MAN}; rm -f ${PAGES} +diff --git a/nvm/Makefile b/nvm/Makefile +index 9aa05ec..b468e70 100755 +--- a/nvm/Makefile ++++ b/nvm/Makefile +@@ -28,12 +28,12 @@ compact: compile + if [ -x /usr/local/bin/upx ]; then upx --best ${TOOLS}; fi + scripts: + manuals: +- test -d ${MAN} || install -m ${DIR_PERM} -o ${OWNER} -g ${GROUP} -d ${MAN} +- install -m ${MAN_PERM} -o ${OWNER} -g ${GROUP} ${PAGES} ${MAN} ++ test -d ${MAN} || install -m ${DIR_PERM} -d ${MAN} ++ install -m ${MAN_PERM} ${PAGES} ${MAN} + library: +- install -m ${DIR_PERM} -o ${OWNER} -g ${GROUP} -d ${BIN} ++ install -m ${DIR_PERM} -d ${BIN} + install: $(TOOLS) library +- install -m ${BIN_PERM} -o ${OWNER} -g ${GROUP} ${TOOLS} ${BIN} ++ install -m ${BIN_PERM} ${TOOLS} ${BIN} + uninstall: + cd ${BIN}; rm -f ${TOOLS} + cd ${MAN}; rm -f ${PAGES} +diff --git a/pib/Makefile b/pib/Makefile +index 93f0c3b..23195b4 100644 +--- a/pib/Makefile ++++ b/pib/Makefile +@@ -30,12 +30,12 @@ compact: compile + if [ -x /usr/local/bin/upx ]; then upx --best ${TOOLS}; fi + scripts: + manuals: +- test -d ${MAN} || install -m ${DIR_PERM} -o ${OWNER} -g ${GROUP} -d ${MAN} +- install -m ${MAN_PERM} -o ${OWNER} -g ${GROUP} ${PAGES} ${MAN} ++ test -d ${MAN} || install -m ${DIR_PERM} -d ${MAN} ++ install -m ${MAN_PERM} ${PAGES} ${MAN} + library: +- install -m ${DIR_PERM} -o ${OWNER} -g ${GROUP} -d ${BIN} ++ install -m ${DIR_PERM} -d ${BIN} + install: $(TOOLS) library +- install -m ${BIN_PERM} -o ${OWNER} -g ${GROUP} ${TOOLS} ${BIN} ++ install -m ${BIN_PERM} ${TOOLS} ${BIN} + uninstall: + cd ${BIN}; rm -f ${TOOLS} + cd ${MAN}; rm -f ${PAGES} +diff --git a/plc/Makefile b/plc/Makefile +index 43d6bd5..9fd4e0a 100644 +--- a/plc/Makefile ++++ b/plc/Makefile +@@ -32,13 +32,13 @@ compact: compile + if [ ! -z ${STRIP} ]; then ${STRIP} ${TOOLS}; fi + if [ -x /usr/local/bin/upx ]; then upx --best ${TOOLS}; fi + library: +- install -m ${DIR_PERM} -o ${OWNER} -g ${GROUP} -d ${BIN} ++ install -m ${DIR_PERM} -d ${BIN} + scripts: + manuals: +- test -d ${MAN} || install -m ${DIR_PERM} -o ${OWNER} -g ${GROUP} -d ${MAN} +- install -m ${MAN_PERM} -o ${OWNER} -g ${GROUP} ${PAGES} ${MAN} ++ test -d ${MAN} || install -m ${DIR_PERM} -d ${MAN} ++ install -m ${MAN_PERM} ${PAGES} ${MAN} + install: $(TOOLS) library +- install -m ${SUID_PERM} -o ${OWNER} -g ${GROUP} ${TOOLS} ${BIN} ++ install -m ${SUID_PERM} ${TOOLS} ${BIN} + uninstall: + cd ${BIN}; rm -f ${TOOLS} + cd ${MAN}; rm -f ${PAGES} +diff --git a/ram/Makefile b/ram/Makefile +index 60b9bb3..c34ddd0 100755 +--- a/ram/Makefile ++++ b/ram/Makefile +@@ -27,13 +27,13 @@ compact: compile + if [ ! -z ${STRIP} ]; then ${STRIP} ${TOOLS}; fi + if [ -x /usr/local/bin/upx ]; then upx --best ${TOOLS}; fi + library: +- install -m ${DIR_PERM} -o ${OWNER} -g ${GROUP} -d ${BIN} ++ install -m ${DIR_PERM} -d ${BIN} + scripts: + manuals: +- test -d ${MAN} || install -m ${DIR_PERM} -o ${OWNER} -g ${GROUP} -d ${MAN} +- install -m ${MAN_PERM} -o ${OWNER} -g ${GROUP} ${PAGES} ${MAN} ++ test -d ${MAN} || install -m ${DIR_PERM} -d ${MAN} ++ install -m ${MAN_PERM} ${PAGES} ${MAN} + install: $(TOOLS) library +- install -m ${BIN_PERM} -o ${OWNER} -g ${GROUP} ${TOOLS} ${BIN} ++ install -m ${BIN_PERM} ${TOOLS} ${BIN} + uninstall: + cd ${BIN}; rm -f ${TOOLS} + cd ${MAN}; rm -f ${PAGES} +diff --git a/serial/Makefile b/serial/Makefile +index c25f1a6..aebbac9 100755 +--- a/serial/Makefile ++++ b/serial/Makefile +@@ -27,13 +27,13 @@ compact: compile + if [ ! -z ${STRIP} ]; then ${STRIP} ${TOOLS}; fi + if [ -x /usr/local/bin/upx ]; then upx --best ${TOOLS}; fi + library: +- install -m ${DIR_PERM} -o ${OWNER} -g ${GROUP} -d ${BIN} ++ install -m ${DIR_PERM} -d ${BIN} + scripts: + manuals: +- test -d ${MAN} || install -m ${DIR_PERM} -o ${OWNER} -g ${GROUP} -d ${MAN} +- install -m ${MAN_PERM} -o ${OWNER} -g ${GROUP} ${PAGES} ${MAN} ++ test -d ${MAN} || install -m ${DIR_PERM} -d ${MAN} ++ install -m ${MAN_PERM} ${PAGES} ${MAN} + install: $(TOOLS) library +- install -m ${BIN_PERM} -o ${OWNER} -g ${GROUP} ${TOOLS} ${BIN} ++ install -m ${BIN_PERM} ${TOOLS} ${BIN} + uninstall: + cd ${BIN}; rm -f int6k ${TOOLS} + cd ${MAN}; rm -f int6k ${PAGES} +diff --git a/slac/Makefile b/slac/Makefile +index bd12db9..1f0b65d 100755 +--- a/slac/Makefile ++++ b/slac/Makefile +@@ -27,13 +27,13 @@ compact: compile + if [ ! -z ${STRIP} ]; then ${STRIP} ${TOOLS}; fi + if [ -x /usr/local/bin/upx ]; then upx --best ${TOOLS}; fi + library: +- install -m ${DIR_PERM} -o ${OWNER} -g ${GROUP} -d ${BIN} ++ install -m ${DIR_PERM} -d ${BIN} + scripts: + manuals: +- if [ ! -d ${MAN} ]; then install -m ${DIR_PERM} -o ${OWNER} -g ${GROUP} -d ${MAN}; fi +- install -m ${MAN_PERM} -o ${OWNER} -g ${GROUP} ${PAGES} ${MAN} ++ if [ ! -d ${MAN} ]; then install -m ${DIR_PERM} -d ${MAN}; fi ++ install -m ${MAN_PERM} ${PAGES} ${MAN} + install: compile library +- install -m ${SUID_PERM} -o ${OWNER} -g ${GROUP} ${TOOLS} ${BIN} ++ install -m ${SUID_PERM} ${TOOLS} ${BIN} + uninstall: + cd ${BIN}; rm -f ${TOOLS} + cd ${MAN}; rm -f ${PAGES} +diff --git a/tools/Makefile b/tools/Makefile +index 1d992cf..a74fd24 100755 +--- a/tools/Makefile ++++ b/tools/Makefile +@@ -27,7 +27,7 @@ compact: compile + if [ ! -z ${STRIP} ]; then ${STRIP} ${TOOLS}; fi + if [ -x /usr/local/bin/upx ]; then upx --best ${TOOLS}; fi + library: +- install -m ${DIR_PERM} -o ${OWNER} -g ${GROUP} -d ${BIN} ++ install -m ${DIR_PERM} -d ${BIN} + scripts: + manuals: + # install -m ${MAN_PERM} -o ${OWNER} -g ${GROUP} ${PAGES} ${MAN} +-- +2.26.2 + diff --git a/package/open-plc-utils/0002-plc-plc.h-fix-build-with-gcc-10.patch b/package/open-plc-utils/0002-plc-plc.h-fix-build-with-gcc-10.patch new file mode 100644 index 00000000..063bfc53 --- /dev/null +++ b/package/open-plc-utils/0002-plc-plc.h-fix-build-with-gcc-10.patch @@ -0,0 +1,37 @@ +From 27222be0b8db59cae30a5fcca93255daea147bb6 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Wed, 23 Sep 2020 19:05:23 +0200 +Subject: [PATCH] plc/plc.h: fix build with gcc 10 + +Drop plcproperty from plc/plc.h to avoid the following build failure +with gcc 10 (which defaults to -fno-common): + +/home/buildroot/autobuild/run/instance-3/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: rules.o:(.bss+0x0): multiple definition of `plcproperty'; pibruin.o:(.bss+0x0): first defined here + +Fixes: + - http://autobuild.buildroot.org/results/6b3064b64dea3d4aaf219f787429c25918101483 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/qca/open-plc-utils/pull/141] +--- + plc/plc.h | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/plc/plc.h b/plc/plc.h +index 1fa32b53..208cf91a 100644 +--- a/plc/plc.h ++++ b/plc/plc.h +@@ -496,9 +496,7 @@ struct __packed plcproperty + uint8_t DATA_FORMAT; + uint32_t DATA_LENGTH; + uint8_t DATA_BUFFER [128]; +-} +- +-plcproperty; ++}; + + #ifndef __GNUC__ + #pragma pack (pop) +-- +2.28.0 + diff --git a/package/open-plc-utils/Config.in b/package/open-plc-utils/Config.in new file mode 100644 index 00000000..8ae3504c --- /dev/null +++ b/package/open-plc-utils/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_OPEN_PLC_UTILS + bool "open-plc-utils" + depends on BR2_USE_MMU # fork() + help + Open version of the Qualcomm Atheros Powerline Toolkit + + https://github.com/qca/open-plc-utils diff --git a/package/open-plc-utils/open-plc-utils.hash b/package/open-plc-utils/open-plc-utils.hash new file mode 100644 index 00000000..1788b42f --- /dev/null +++ b/package/open-plc-utils/open-plc-utils.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 b0156567a71c608cc1a0b18bbb1c5a97dd0ad9180097435f7e99119712bb299b open-plc-utils-32408520fcebe785983a68e39ec83830a3005779.tar.gz +sha256 3137c632bbcec5e88b72dc13f4fe06ee184eea364fec8f7494bdfa57672ef921 LICENSE diff --git a/package/open-plc-utils/open-plc-utils.mk b/package/open-plc-utils/open-plc-utils.mk new file mode 100644 index 00000000..d2ac39ac --- /dev/null +++ b/package/open-plc-utils/open-plc-utils.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# open-plc-utils +# +################################################################################ + +OPEN_PLC_UTILS_VERSION = 32408520fcebe785983a68e39ec83830a3005779 +OPEN_PLC_UTILS_SITE = $(call github,qca,open-plc-utils,$(OPEN_PLC_UTILS_VERSION)) +OPEN_PLC_UTILS_LICENSE = BSD-3-Clause +OPEN_PLC_UTILS_LICENSE_FILES = LICENSE + +# We unfortunately can't use TARGET_CONFIGURE_OPTS, as it would +# override the package CFLAGS, LDFLAGS and CXXFLAGS definitions. +# +# Yes, we're passing __UCLIBC__ in EXTRA_CFLAGS, as it fixes a build +# issue for non-uClibc toolchains. It is the very crappy solution +# suggested at https://github.com/qca/open-plc-utils/issues/36. +OPEN_PLC_UTILS_MAKE_OPTS = \ + EXTRA_CFLAGS="$(TARGET_CFLAGS) -D__UCLIBC__" \ + EXTRA_CXXFLAGS="$(TARGET_CXXFLAGS)" \ + EXTRA_LDFLAGS="$(TARGET_LDFLAGS)" + +define OPEN_PLC_UTILS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) CROSS=$(TARGET_CROSS) \ + $(OPEN_PLC_UTILS_MAKE_OPTS) -C $(@D) +endef + +define OPEN_PLC_UTILS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) ROOTFS=$(TARGET_DIR) \ + BIN="$(TARGET_DIR)/usr/bin" -C $(@D) install +endef + +$(eval $(generic-package)) diff --git a/package/open2300/0001-fix-makefile.patch b/package/open2300/0001-fix-makefile.patch new file mode 100644 index 00000000..c3bb2523 --- /dev/null +++ b/package/open2300/0001-fix-makefile.patch @@ -0,0 +1,52 @@ +From b0a1f12349bee43040a889c7e74873cfb253b9d8 Mon Sep 17 00:00:00 2001 +From: Samuel Martin +Date: Thu, 6 Feb 2014 21:42:50 +0100 +Subject: [PATCH] fix makefile + +- allow to extend CFLAGS and CC_LDFLAGS +- remove hard-coded include dirs. and lib. dirs. (which pointed to some + location in the host system) + +Signed-off-by: Samuel Martin +--- + Makefile | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/Makefile b/Makefile +index 92a2cc0..1b54175 100755 +--- a/Makefile ++++ b/Makefile +@@ -37,9 +37,9 @@ MYSQLHISTLOGOBJ = mysqlhistlog2300.o rw2300.o linux2300.o win2300.o + + VERSION = 1.11 + +-CFLAGS = -Wall -O3 -DVERSION=\"$(VERSION)\" +-CC_LDFLAGS = -lm +-CC_WINFLAG = ++override CFLAGS += -Wall -O3 -DVERSION=\"$(VERSION)\" ++override CC_LDFLAGS += -lm ++CC_WINFLAG = + # For Windows - comment the two line above and un-comment the two lines below. + #CC_LDFLAGS = -lm -lwsock32 + #CC_WINFLAG = -mwindows +@@ -80,7 +80,7 @@ xml2300 : $(XMLOBJ) + $(CC) $(CFLAGS) -o $@ $(XMLOBJ) $(CC_LDFLAGS) $(CC_WINFLAG) + + mysql2300: +- $(CC) $(CFLAGS) -o mysql2300 mysql2300.c rw2300.c linux2300.c $(CC_LDFLAGS) $(CC_WINFLAG) -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient ++ $(CC) $(CFLAGS) -o mysql2300 mysql2300.c rw2300.c linux2300.c $(CC_LDFLAGS) $(CC_WINFLAG) + + pgsql2300: $(PGSQLOBJ) + $(CC) $(CFLAGS) -o $@ $(PGSQLOBJ) $(CC_LDFLAGS) $(CC_WINFLAG) -I/usr/include/pgsql -L/usr/lib/pgsql -lpq +@@ -95,7 +95,7 @@ minmax2300: $(MINMAXOBJ) + $(CC) $(CFLAGS) -o $@ $(MINMAXOBJ) $(CC_LDFLAGS) $(CC_WINFLAG) + + mysqlhistlog2300 : +- $(CC) $(CFLAGS) -o mysqlhistlog2300 mysqlhistlog2300.c rw2300.c linux2300.c $(CC_LDFLAGS) $(CC_WINFLAG) -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient ++ $(CC) $(CFLAGS) -o mysqlhistlog2300 mysqlhistlog2300.c rw2300.c linux2300.c $(CC_LDFLAGS) $(CC_WINFLAG) + + + install: +-- +1.8.5.3 + diff --git a/package/open2300/Config.in b/package/open2300/Config.in new file mode 100644 index 00000000..df0a969f --- /dev/null +++ b/package/open2300/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_OPEN2300 + bool "open2300" + help + open2300 reads (and writes) data from a Lacrosse + WS2300/WS2305/WS2310/WS2315 Weather Station + + http://www.lavrsen.dk/foswiki/bin/view/Open2300/WebHome diff --git a/package/open2300/open2300.hash b/package/open2300/open2300.hash new file mode 100644 index 00000000..f8b11506 --- /dev/null +++ b/package/open2300/open2300.hash @@ -0,0 +1,4 @@ +# Localy computed +sha256 ffa7f8d35b16abfbf5e52285cb21f2a7fc6afb901abb40c0c80eef9d23d08aab open2300-f21982e0b1f8321561e5ad1668307fde97700e1b.tar.gz + +sha256 91df39d1816bfb17a4dda2d3d2c83b1f6f2d38d53e53e41e8f97ad5ac46a0cad COPYING diff --git a/package/open2300/open2300.mk b/package/open2300/open2300.mk new file mode 100644 index 00000000..9fb7dbc2 --- /dev/null +++ b/package/open2300/open2300.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# open2300 +# +################################################################################ + +OPEN2300_VERSION = f21982e0b1f8321561e5ad1668307fde97700e1b +OPEN2300_SITE = $(call github,wezm,open2300,$(OPEN2300_VERSION)) +OPEN2300_LICENSE = GPL-2.0 +OPEN2300_LICENSE_FILES = COPYING + +OPEN2300_BINS = \ + open2300 dump2300 log2300 fetch2300 wu2300 cw2300 history2300 \ + histlog2300 bin2300 xml2300 light2300 interval2300 minmax2300 +OPEN2300_CFLAGS = $(TARGET_CFLAGS) +OPEN2300_LDFLAGS = $(TARGET_LDFLAGS) + +ifeq ($(BR2_PACKAGE_MYSQL),y) +OPEN2300_DEPENDENCIES += mysql +OPEN2300_BINS += mysql2300 mysqlhistlog2300 +OPEN2300_CFLAGS += $(shell $(STAGING_DIR)/usr/bin/mysql_config --cflags) +OPEN2300_LDFLAGS += $(shell $(STAGING_DIR)/usr/bin/mysql_config --libs) +endif + +define OPEN2300_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) CC="$(TARGET_CC)" LD="$(TARGET_LD)" \ + CFLAGS="$(OPEN2300_CFLAGS)" CC_LDFLAGS="$(OPEN2300_LDFLAGS)" \ + -C $(@D) $(OPEN2300_BINS) +endef + +define OPEN2300_INSTALL_TARGET_CMDS + for prog in $(OPEN2300_BINS); do \ + $(INSTALL) -D -m 0755 $(@D)/$$prog $(TARGET_DIR)/usr/bin/$$prog ; \ + done +endef + +$(eval $(generic-package)) diff --git a/package/open62541/0001-CMakeLists.txt-project-only-contains-C-code.patch b/package/open62541/0001-CMakeLists.txt-project-only-contains-C-code.patch new file mode 100644 index 00000000..52a9cbaa --- /dev/null +++ b/package/open62541/0001-CMakeLists.txt-project-only-contains-C-code.patch @@ -0,0 +1,27 @@ +From 61f9440dfeacad517965451773371aca0332d700 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 5 Jan 2021 23:08:53 +0100 +Subject: [PATCH] CMakeLists.txt: project only contains C code + +Make sure CMake doesn't check for a C++ compiler when it's not needed, +as open62541 is in C. + +Signed-off-by: Thomas Petazzoni +--- + CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 94ceb127..acc41ab2 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1,5 +1,5 @@ + cmake_minimum_required(VERSION 3.0...3.12) +-project(open62541) ++project(open62541 C) + # set(CMAKE_VERBOSE_MAKEFILE ON) + if(${CMAKE_VERSION} VERSION_LESS 3.12) + cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) +-- +2.29.2 + diff --git a/package/open62541/0002-arch-posix-CMakeLists.txt-fix-build-without-threads.patch b/package/open62541/0002-arch-posix-CMakeLists.txt-fix-build-without-threads.patch new file mode 100644 index 00000000..94ee76ad --- /dev/null +++ b/package/open62541/0002-arch-posix-CMakeLists.txt-fix-build-without-threads.patch @@ -0,0 +1,37 @@ +From a312e82124fb8c9f139d5a40fa5a28123bb77a33 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 10 Jan 2021 14:25:56 +0100 +Subject: [PATCH] arch/posix/CMakeLists.txt: fix build without threads + +Fix the following build failure without threads: + +[100%] Linking C shared library bin/libopen62541.so +/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-buildroot-linux-uclibcgnueabihf/8.3.0/../../../../arm-buildroot-linux-uclibcgnueabihf/bin/ld: cannot find -lpthread +collect2: error: ld returned 1 exit status +CMakeFiles/open62541.dir/build.make:192: recipe for target 'bin/libopen62541.so.0.0.0' failed +make[3]: *** [bin/libopen62541.so.0.0.0] Error 1 + +Fixes: + - http://autobuild.buildroot.org/results/87ec3c987c991f790757276316d6caf81e635fa2 + +Signed-off-by: Fabrice Fontaine +--- + arch/posix/CMakeLists.txt | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/arch/posix/CMakeLists.txt b/arch/posix/CMakeLists.txt +index bb24757c..a53c9f2c 100644 +--- a/arch/posix/CMakeLists.txt ++++ b/arch/posix/CMakeLists.txt +@@ -20,8 +20,6 @@ if (${_index} GREATER -1 OR "${UA_ARCHITECTURE}" STREQUAL "posix") + ua_architecture_append_to_library(netdb ndblib socket) + else() + ua_architecture_append_to_library(m) +- #TODO - Error on first make run if pthread is included conditional? +- ua_architecture_append_to_library(pthread) + if(UA_ENABLE_MULTITHREADING OR UA_BUILD_UNIT_TESTS) + ua_architecture_append_to_library(pthread) + endif() +-- +2.29.2 + diff --git a/package/open62541/Config.in b/package/open62541/Config.in new file mode 100644 index 00000000..a835595e --- /dev/null +++ b/package/open62541/Config.in @@ -0,0 +1,71 @@ +config BR2_PACKAGE_OPEN62541 + bool "open62541" + help + open62541 is an open source and free implementation of OPC UA. + + http://open62541.org + +if BR2_PACKAGE_OPEN62541 + +choice + prompt "namespace zero nodes" + help + Namespace zero contains the standard-defined nodes. The full + namespace zero may not be required for all applications. + +config BR2_PACKAGE_OPEN62541_UA_NAMESPACE_ZERO_DEFAULT + bool "default" + help + Use the default namespace zero contents. + +config BR2_PACKAGE_OPEN62541_UA_NAMESPACE_ZERO_MINIMAL + bool "minimal" + help + A barebones namespace zero that is compatible with most + clients. But this namespace 0 is so small that it does not + pass the CTT (Conformance Testing Tools of the OPC + Foundation). + +config BR2_PACKAGE_OPEN62541_UA_NAMESPACE_ZERO_REDUCED + bool "reduced" + help + Small namespace zero that passes the CTT. + +config BR2_PACKAGE_OPEN62541_UA_NAMESPACE_ZERO_FULL + bool "full" + help + Full namespace zero generated from the official XML + definitions. + +endchoice + +config BR2_PACKAGE_OPEN62541_JSON_ENCODING + bool "json encoding" + +config BR2_PACKAGE_OPEN62541_PUBSUB + bool "publish/subscribe" + help + Enable the experimental OPC UA PubSub support. The option + will include the PubSub UDP multicast plugin. + +if BR2_PACKAGE_OPEN62541_PUBSUB + +config BR2_PACKAGE_OPEN62541_PUBSUB_DELTAFRAMES + bool "publish/subscribe deltaframes" + help + The PubSub messages differentiate between keyframe (all + published values contained) and deltaframe (only changed + values contained) messages. Deltaframe messages creation + consumes some additional ressources. + +config BR2_PACKAGE_OPEN62541_PUBSUB_INFORMATIONMODEL + bool "publish/subscribe information model" + depends on BR2_PACKAGE_OPEN62541_UA_NAMESPACE_ZERO_REDUCED || \ + BR2_PACKAGE_OPEN62541_UA_NAMESPACE_ZERO_FULL + help + Enable the information model representation of the PubSub + configuration. + +endif # BR2_PACKAGE_OPEN62541_PUBSUB + +endif diff --git a/package/open62541/open62541.hash b/package/open62541/open62541.hash new file mode 100644 index 00000000..3da8c8f5 --- /dev/null +++ b/package/open62541/open62541.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 36273793e5247586fadaa73c0edad89be610100cbc839d1fb5f567f20c3cbc44 open62541-1.0-br1.tar.gz +sha256 fab3dd6bdab226f1c08630b1dd917e11fcb4ec5e1e020e2c16f83a0a13863e85 LICENSE diff --git a/package/open62541/open62541.mk b/package/open62541/open62541.mk new file mode 100644 index 00000000..102e09a4 --- /dev/null +++ b/package/open62541/open62541.mk @@ -0,0 +1,57 @@ +################################################################################ +# +# open62541 +# +################################################################################ + +OPEN62541_VERSION = 1.0 +OPEN62541_DL_VERSION = v$(OPEN62541_VERSION) +OPEN62541_SITE_METHOD = git +OPEN62541_SITE = git://github.com/open62541/open62541.git +OPEN62541_GIT_SUBMODULES = YES +OPEN62541_INSTALL_STAGING = YES +OPEN62541_LICENSE = MPL-2.0 +OPEN62541_LICENSE_FILES = LICENSE + +# Force Release build to remove -Werror. +# Don't use git describe to get the version number. +# Disable hardening options to let Buildroot handle it. +OPEN62541_CONF_OPTS = \ + -DCMAKE_BUILD_TYPE=Release \ + -DGIT_EXECUTABLE=NO \ + -DOPEN62541_VERSION=v$(OPEN62541_VERSION) \ + -DUA_ENABLE_HARDENING=OFF + +ifeq ($(BR2_PACKAGE_OPEN62541_UA_NAMESPACE_ZERO_MINIMAL),y) +OPEN62541_CONF_OPTS += -DUA_NAMESPACE_ZERO=MINIMAL +else ifeq ($(BR2_PACKAGE_OPEN62541_UA_NAMESPACE_ZERO_REDUCED),y) +OPEN62541_CONF_OPTS += -DUA_NAMESPACE_ZERO=REDUCED +else ifeq ($(BR2_PACKAGE_OPEN62541_UA_NAMESPACE_ZERO_FULL),y) +OPEN62541_CONF_OPTS += -DUA_NAMESPACE_ZERO=FULL +endif + +ifeq ($(BR2_PACKAGE_OPEN62541_JSON_ENCODING),y) +OPEN62541_CONF_OPTS += -DUA_ENABLE_JSON_ENCODING=ON +else +OPEN62541_CONF_OPTS += -DUA_ENABLE_JSON_ENCODING=OFF +endif + +ifeq ($(BR2_PACKAGE_OPEN62541_PUBSUB),y) +OPEN62541_CONF_OPTS += -DUA_ENABLE_PUBSUB=ON +else +OPEN62541_CONF_OPTS += -DUA_ENABLE_PUBSUB=OFF +endif + +ifeq ($(BR2_PACKAGE_OPEN62541_PUBSUB_DELTAFRAMES),y) +OPEN62541_CONF_OPTS += -DUA_ENABLE_PUBSUB_DELTAFRAMES=ON +else +OPEN62541_CONF_OPTS += -DUA_ENABLE_PUBSUB_DELTAFRAMES=OFF +endif + +ifeq ($(BR2_PACKAGE_OPEN62541_PUBSUB_INFORMATIONMODEL),y) +OPEN62541_CONF_OPTS += -DUA_ENABLE_PUBSUB_INFORMATIONMODEL=ON +else +OPEN62541_CONF_OPTS += -DUA_ENABLE_PUBSUB_INFORMATIONMODEL=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/openal/Config.in b/package/openal/Config.in new file mode 100644 index 00000000..6b0e9973 --- /dev/null +++ b/package/openal/Config.in @@ -0,0 +1,34 @@ +# openal can: +# - use __atomic_*() intrinsics when available +# - otherwise use __sync_*() intrinsics when available. It needs the +# 4-byte ones on 32 bits architectures, and the 4-byte and 8-byte +# one on 64 bits architecture +# - it also provides its one implementation of atomic operations on +# x86 and x86_64, but we dont take those into account since in most +# situations __atomic_*() or __sync_*() will be available, and not +# all x86 CPUs provide the necessary assembly instructions. +config BR2_PACKAGE_OPENAL_ARCH_SUPPORTS + bool + default y if BR2_TOOLCHAIN_HAS_ATOMIC + default y if BR2_TOOLCHAIN_HAS_SYNC_4 && !BR2_ARCH_IS_64 + default y if BR2_TOOLCHAIN_HAS_SYNC_4 && BR2_TOOLCHAIN_HAS_SYNC_8 && BR2_ARCH_IS_64 + +config BR2_PACKAGE_OPENAL + bool "openal" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C++11 PR56019 + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_PACKAGE_OPENAL_ARCH_SUPPORTS + help + OpenAL provides capabilities for playing audio in a virtual + 3D environment. Distance attenuation, doppler shift, and + directional sound emitters are among the features handled by + the API. + + http://kcat.strangesoft.net/openal.html + +comment "openal needs a toolchain w/ NPTL, C++, gcc >= 4.9" + depends on BR2_PACKAGE_OPENAL_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL \ + || !BR2_INSTALL_LIBSTDCPP \ + || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/openal/openal.hash b/package/openal/openal.hash new file mode 100644 index 00000000..1592dd56 --- /dev/null +++ b/package/openal/openal.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 c32d10473457a8b545aab50070fe84be2b5b041e1f2099012777ee6be0057c13 openal-1.20.1.tar.gz +sha256 d808ce217e5b611854da622b57ec29fe545584c48bc5352fae72a4b6e5074a15 COPYING diff --git a/package/openal/openal.mk b/package/openal/openal.mk new file mode 100644 index 00000000..ed63abfb --- /dev/null +++ b/package/openal/openal.mk @@ -0,0 +1,52 @@ +################################################################################ +# +# openal +# +################################################################################ + +OPENAL_VERSION = 1.20.1 +OPENAL_SITE = $(call github,kcat,openal-soft,openal-soft-$(OPENAL_VERSION)) +OPENAL_LICENSE = LGPL-2.0+ +OPENAL_LICENSE_FILES = COPYING +OPENAL_INSTALL_STAGING = YES + +# We don't need examples, tests and utilities, Distros don't ship them either +OPENAL_CONF_OPTS += -DALSOFT_UTILS=OFF -DALSOFT_EXAMPLES=OFF -DALSOFT_TESTS=OFF + +ifeq ($(BR2_TOOLCHAIN_GCC_AT_LEAST_4_8),y) +OPENAL_CONF_OPTS += -DEXTRA_LIBS=atomic +endif + +ifeq ($(BR2_PACKAGE_ALSA_LIB),y) +OPENAL_DEPENDENCIES += alsa-lib +OPENAL_CONF_OPTS += -DALSOFT_REQUIRE_ALSA=ON +else +OPENAL_CONF_OPTS += -DALSOFT_REQUIRE_ALSA=OFF +endif + +ifeq ($(BR2_PACKAGE_JACK2),y) +OPENAL_DEPENDENCIES += jack2 +OPENAL_CONF_OPTS += -DALSOFT_REQUIRE_JACK=ON +else +OPENAL_CONF_OPTS += -DALSOFT_REQUIRE_JACK=OFF +endif + +ifeq ($(BR2_PACKAGE_PORTAUDIO),y) +OPENAL_DEPENDENCIES += portaudio +OPENAL_CONF_OPTS += -DALSOFT_REQUIRE_PORTAUDIO=ON +else +OPENAL_CONF_OPTS += -DALSOFT_REQUIRE_PORTAUDIO=OFF +endif + +ifeq ($(BR2_PACKAGE_PULSEAUDIO),y) +OPENAL_DEPENDENCIES += pulseaudio +OPENAL_CONF_OPTS += -DALSOFT_REQUIRE_PULSEAUDIO=ON +else +OPENAL_CONF_OPTS += -DALSOFT_REQUIRE_PULSEAUDIO=OFF +endif + +ifeq ($(BR2_STATIC_LIBS),y) +OPENAL_CONF_OPTS += -DLIBTYPE=STATIC +endif + +$(eval $(cmake-package)) diff --git a/package/openblas/0001-fix-gfortran-detection.patch b/package/openblas/0001-fix-gfortran-detection.patch new file mode 100644 index 00000000..1fecdac3 --- /dev/null +++ b/package/openblas/0001-fix-gfortran-detection.patch @@ -0,0 +1,30 @@ +From ece3ce581e3ec530eaccfe7f284c52e115ec7aa9 Mon Sep 17 00:00:00 2001 +From: Martin Kroeker +Date: Wed, 10 Feb 2021 14:22:59 +0100 +Subject: [PATCH] Strip parenthesized (pkgversion) data from GCC version string + to avoid misinterpretation + +See https://github.com/xianyi/OpenBLAS/issues/3099 for details. + +Upstream-status: backport + +[for import into Buildroot] +Signed-off-by: Thomas De Schampheleire + + +--- + f_check | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/f_check b/f_check +index e9aca4ff9..ffe9c6b46 100644 +--- a/f_check ++++ b/f_check +@@ -75,6 +75,7 @@ if ($compiler eq "") { + + } elsif ($data =~ /GNU/ || $data =~ /GCC/ ) { + ++ $data =~ s/\(+.*?\)+//g; + $data =~ /(\d+)\.(\d+).(\d+)/; + $major = $1; + $minor = $2; diff --git a/package/openblas/0002-Makefile-fix-support-for-passing-FFLAGS-on-the-make-.patch b/package/openblas/0002-Makefile-fix-support-for-passing-FFLAGS-on-the-make-.patch new file mode 100644 index 00000000..72b387b9 --- /dev/null +++ b/package/openblas/0002-Makefile-fix-support-for-passing-FFLAGS-on-the-make-.patch @@ -0,0 +1,47 @@ +From 4d3829fa52240c2b7e48770ab19584db33ba7863 Mon Sep 17 00:00:00 2001 +From: Thomas De Schampheleire +Date: Fri, 5 Mar 2021 11:17:59 +0100 +Subject: [PATCH] Makefile: fix support for passing FFLAGS on the make + command line + +When openblas is built while passing FFLAGS on the make command line, the +compilation of lapack objects will not contain the flags specified in +Makefile but _only_ those passed in FFLAGS. + +This can lead to build failure, e.g. because -fPIC is not passed to the +compilation of most lapack objects, but is given to the link command: + +.../buildroot/output/host/bin/x86_64-linux-gcc -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O2 -DMAX_STACK_ALLOC=2048 -Wall -m64 -DF_INTERFACE_GFORT -fPIC -DNO_WARMUP -DMAX_CPU_NUMBER=4 -DMAX_PARALLEL_NUMBER=1 -DVERSION=\"0.3.9\" -DASMNAME= -DASMFNAME=_ -DNAME=_ -DCNAME= -DCHAR_NAME=\"_\" -DCHAR_CNAME=\"\" -DNO_AFFINITY -I.. -shared -o ../libopenblas_nehalem-r0.3.9.so \ +-Wl,--whole-archive ../libopenblas_nehalem-r0.3.9.a -Wl,--no-whole-archive \ +-Wl,-soname,libopenblas.so.0 -lm -lgfortran -lm -lgfortran +.../buildroot/output/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-musl/9.3.0/../../../../x86_64-buildroot-linux-musl/bin/ld: ../libopenblas_nehalem-r0.3.9.a(sbdsvdx.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC + +In the initial support for this principle, added in commit +d0e731e8b825e7a554f245aa8f1118dcec9e2728, the flags specified in the +makefile were appended to the flags specified on the command-line. + +Fix this situation by using 'override' for 'FFLAGS' in +lapack-netlib/make.inc. The flags passed on the command-line are already +part of the LAPACK_FFLAGS variable, so no '+=' is needed here. + +Signed-off-by: Thomas De Schampheleire +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index fc5fe3f5..8ae1ff47 100644 +--- a/Makefile ++++ b/Makefile +@@ -248,7 +248,7 @@ prof_lapack : lapack_prebuild + lapack_prebuild : + ifeq ($(NOFORTRAN), $(filter 0,$(NOFORTRAN))) + -@echo "FC = $(FC)" > $(NETLIB_LAPACK_DIR)/make.inc +- -@echo "FFLAGS = $(LAPACK_FFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc ++ -@echo "override FFLAGS = $(LAPACK_FFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc + -@echo "POPTS = $(LAPACK_FPFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc + -@echo "FFLAGS_NOOPT = -O0 $(LAPACK_NOOPT)" >> $(NETLIB_LAPACK_DIR)/make.inc + -@echo "PNOOPT = $(LAPACK_FPFLAGS) -O0" >> $(NETLIB_LAPACK_DIR)/make.inc +-- +2.26.2 + diff --git a/package/openblas/0003-Makefile-also-consider-Os-when-determining-LAPACK_NO.patch b/package/openblas/0003-Makefile-also-consider-Os-when-determining-LAPACK_NO.patch new file mode 100644 index 00000000..f9278bd0 --- /dev/null +++ b/package/openblas/0003-Makefile-also-consider-Os-when-determining-LAPACK_NO.patch @@ -0,0 +1,31 @@ +From ced08de1ad74811bc23d74121751537bfd8e9556 Mon Sep 17 00:00:00 2001 +From: Thomas De Schampheleire +Date: Fri, 5 Mar 2021 11:15:52 +0100 +Subject: [PATCH] Makefile: also consider -O, -Og and -Os when stripping flags + +gcc also supports -O, -Og and -Os as optimization flags. +They may be given on the make command-line by users. + +For the calculation of LAPACK_NOOPT, all such flags should be considered. + +Signed-off-by: Thomas De Schampheleire +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index a22e16ba..fc5fe3f5 100644 +--- a/Makefile ++++ b/Makefile +@@ -32,7 +32,7 @@ export NOFORTRAN + export NO_LAPACK + endif + +-LAPACK_NOOPT := $(filter-out -O0 -O1 -O2 -O3 -Ofast,$(LAPACK_FFLAGS)) ++LAPACK_NOOPT := $(filter-out -O0 -O1 -O2 -O3 -Ofast -O -Og -Os,$(LAPACK_FFLAGS)) + + SUBDIRS_ALL = $(SUBDIRS) test ctest utest exports benchmark ../laswp ../bench cpp_thread_test + +-- +2.26.2 + diff --git a/package/openblas/0004-Makefile.system-don-t-specify-optimization-level-bui.patch b/package/openblas/0004-Makefile.system-don-t-specify-optimization-level-bui.patch new file mode 100644 index 00000000..bcc3e0eb --- /dev/null +++ b/package/openblas/0004-Makefile.system-don-t-specify-optimization-level-bui.patch @@ -0,0 +1,40 @@ +From 6d1c1350977d74fb2239f765bd92a5763cd3bb73 Mon Sep 17 00:00:00 2001 +From: Thomas De Schampheleire +Date: Fri, 5 Mar 2021 14:09:23 +0100 +Subject: [PATCH] Makefile.system: don't specify optimization level + [buildroot-specific] + +Buildroot will pass an optimization level, but it is ignored because the +openblas makefiles _append_ to the flags passed on the command-line. + +The CFLAGS/FFLAGS would e.g. contain '-Os -O2' in which -O2 survives. + +Remove the optimization level specified in openblas itself. + +Signed-off-by: Thomas De Schampheleire + +--- + Makefile.system | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Makefile.system b/Makefile.system +index 1e30d05a..04b0be16 100644 +--- a/Makefile.system ++++ b/Makefile.system +@@ -1216,11 +1216,11 @@ FCOMMON_OPT += -g + endif + + ifndef COMMON_OPT +-COMMON_OPT = -O2 ++COMMON_OPT = + endif + + ifndef FCOMMON_OPT +-FCOMMON_OPT = -O2 -frecursive ++FCOMMON_OPT = -frecursive + endif + + override CFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) +-- +2.26.2 + diff --git a/package/openblas/Config.in b/package/openblas/Config.in new file mode 100644 index 00000000..0144e93a --- /dev/null +++ b/package/openblas/Config.in @@ -0,0 +1,97 @@ +config BR2_PACKAGE_OPENBLAS_DEFAULT_TARGET + string + default "P2" if BR2_x86_pentium2 + default "KATMAI" if BR2_x86_pentium3 + default "NORTHWOOD" if BR2_x86_pentium4 + default "PRESCOTT" if BR2_x86_prescott || BR2_x86_nocona + default "BANIAS" if BR2_x86_pentium_m + default "CORE2" if BR2_x86_core2 + default "NEHALEM" if BR2_x86_corei7 || BR2_x86_silvermont || BR2_x86_westmere + default "SANDYBRIDGE" if BR2_x86_corei7_avx + default "HASWELL" if BR2_x86_core_avx2 + default "ATOM" if BR2_x86_atom + default "ATHLON" if BR2_x86_athlon || BR2_x86_athlon_4 + default "OPTERON" if BR2_x86_opteron + default "OPTERON_SSE3" if BR2_x86_opteron_sse3 + default "BARCELONA" if BR2_x86_barcelona + default "BOBCAT" if BR2_x86_jaguar + default "STEAMROLLER" if BR2_x86_steamroller + default "VIAC3" if BR2_x86_c3 || BR2_x86_c32 + default "POWER4" if BR2_powerpc_power4 + default "POWER5" if BR2_powerpc_power5 + default "POWER6" if BR2_powerpc_power6 + default "POWER7" if BR2_powerpc_power7 + default "POWER8" if BR2_powerpc_power8 + default "PPCG4" if BR2_powerpc_7400 || BR2_powerpc_7450 + default "PPC970" if BR2_powerpc_970 + default "PPC440" if BR2_powerpc_440 + default "PPC440FP2" if BR2_powerpc_440fp + # P5600 is built with MSA support which is only available in Codescape toolchains + default "P5600" if BR2_mips_p5600 && BR2_TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS + default "SICORTEX" if BR2_MIPS_CPU_MIPS64 + # I6400 is built with MSA support which is only available in Codescape toolchains + default "I6400" if BR2_mips_i6400 && BR2_TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS + # OpenBLAS assumes SPARC=Sparc v9 + default "SPARC" if BR2_sparc_v9 + # Cortex-A15 always have a VFPv4 + default "CORTEXA15" if (BR2_cortex_a15 && BR2_ARM_EABIHF) + # Cortex-A9 have an optional VFPv3, so we need to make sure it + # is available + default "CORTEXA9" if (BR2_cortex_a9 && BR2_ARM_EABIHF && \ + BR2_ARM_CPU_HAS_VFPV3) + default "ARMV5" if BR2_ARM_CPU_ARMV5 + # On ARMv6, OpenBLAS assumes that a VFP is available, and + # EABIhf is used + default "ARMV6" if (BR2_ARM_CPU_ARMV6 && BR2_ARM_EABIHF && \ + BR2_ARM_CPU_HAS_VFPV2) + # On ARMv7, OpenBLAS assumes that a full VFPv3+ is available + # (and not the more limited D16 variant), and that EABIhf is + # used. + default "ARMV7" if (BR2_ARM_CPU_ARMV7A && BR2_ARM_EABIHF && \ + BR2_ARM_CPU_HAS_VFPV3) + default "ARMV8" if BR2_aarch64 || BR2_aarch64_be + help + OpenBLAS target CPU. See TargetList.txt in the source tree for + the possible target strings. A possible value is set + automatically based on your Target Architecture Variant. + +config BR2_PACKAGE_OPENBLAS_ARCH_SUPPORTS + bool + default y if BR2_PACKAGE_OPENBLAS_DEFAULT_TARGET != "" + +config BR2_PACKAGE_OPENBLAS + bool "openblas" + depends on BR2_PACKAGE_OPENBLAS_ARCH_SUPPORTS + help + An optimized BLAS library based on GotoBLAS2 1.13 BSD version. + + https://www.openblas.net/ + +if BR2_PACKAGE_OPENBLAS + +config BR2_PACKAGE_OPENBLAS_TARGET + string "OpenBLAS target CPU" + default BR2_PACKAGE_OPENBLAS_DEFAULT_TARGET + +config BR2_PACKAGE_OPENBLAS_USE_THREAD + bool "use multithreading" + default y + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + help + Tell OpenBLAS to use multithreading, by passing USE_THREAD=1. + +config BR2_PACKAGE_OPENBLAS_USE_LOCKING + bool "use locking" + default y + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_PACKAGE_OPENBLAS_USE_THREAD + help + Tell OpenBLAS to use locking, by passing USE_LOCKING=1. + Locking is implicitly enabled when USE_THREAD=1. + However, if USE_THREAD=0 (i.e. OpenBLAS itself will run in + single-threaded mode) but an application makes OpenBLAS + function calls from multiple threads, then locking is + mandatory for correct operation. + +endif diff --git a/package/openblas/openblas.hash b/package/openblas/openblas.hash new file mode 100644 index 00000000..c58def9d --- /dev/null +++ b/package/openblas/openblas.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 17d4677264dfbc4433e97076220adc79b050e4f8a083ea3f853a53af253bc380 openblas-0.3.9.tar.gz +sha256 190b5a9c8d9723fe958ad33916bd7346d96fab3c5ea90832bb02d854f620fcff LICENSE diff --git a/package/openblas/openblas.mk b/package/openblas/openblas.mk new file mode 100644 index 00000000..21d05cf3 --- /dev/null +++ b/package/openblas/openblas.mk @@ -0,0 +1,79 @@ +################################################################################ +# +# openblas +# +################################################################################ + +OPENBLAS_VERSION = 0.3.9 +OPENBLAS_SITE = $(call github,xianyi,OpenBLAS,v$(OPENBLAS_VERSION)) +OPENBLAS_LICENSE = BSD-3-Clause +OPENBLAS_LICENSE_FILES = LICENSE +OPENBLAS_INSTALL_STAGING = YES + +# Initialise OpenBLAS make options to $(TARGET_CONFIGURE_OPTS) +OPENBLAS_MAKE_OPTS = $(TARGET_CONFIGURE_OPTS) + +# Enable cross-compiling +OPENBLAS_MAKE_OPTS += CROSS=1 + +# Set OpenBLAS target +OPENBLAS_MAKE_OPTS += TARGET=$(BR2_PACKAGE_OPENBLAS_TARGET) + +# When Fortran is not available, only build the C version of BLAS +ifeq ($(BR2_TOOLCHAIN_HAS_FORTRAN),) +OPENBLAS_MAKE_OPTS += ONLY_CBLAS=1 +endif + +# Enable/Disable multi-threading (not for static-only since it uses dlfcn.h) +ifeq ($(BR2_PACKAGE_OPENBLAS_USE_THREAD),y) +OPENBLAS_MAKE_OPTS += USE_THREAD=1 +else +OPENBLAS_MAKE_OPTS += USE_THREAD=0 +endif + +ifeq ($(BR2_PACKAGE_OPENBLAS_USE_LOCKING),y) +OPENBLAS_MAKE_OPTS += USE_LOCKING=1 +else +# not passing USE_LOCKING=0 as this could be confusing: its effect is implicit +# in case of USE_THREAD=1. +endif + +# We don't know if OpenMP is available or not, so disable +OPENBLAS_MAKE_OPTS += USE_OPENMP=0 + +# Static-only/Shared-only toggle +ifeq ($(BR2_STATIC_LIBS),y) +OPENBLAS_MAKE_OPTS += NO_SHARED=1 +else ifeq ($(BR2_SHARED_LIBS),y) +OPENBLAS_MAKE_OPTS += NO_STATIC=1 +endif + +# binutils version <= 2.23.2 has a bug +# (https://sourceware.org/bugzilla/show_bug.cgi?id=14887) where +# whitespaces in ARM register specifications such as [ r1, #12 ] or [ +# r2 ] cause the assembler to reject the code. Since there are +# numerous instances of such cases in the code, we use sed rather than +# a patch. We simply replace [ foobar ] by [foobar] to work around the +# problem. +define OPENBLAS_FIXUP_ARM_ASSEMBLY + $(SED) 's%\[\s*%\[%;s%\s*\]%\]%' $(@D)/kernel/arm/*.S +endef + +OPENBLAS_POST_PATCH_HOOKS += OPENBLAS_FIXUP_ARM_ASSEMBLY + +define OPENBLAS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(OPENBLAS_MAKE_OPTS) \ + -C $(@D) +endef + +define OPENBLAS_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(OPENBLAS_MAKE_OPTS) \ + -C $(@D) install PREFIX=$(STAGING_DIR)/usr +endef + +define OPENBLAS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(OPENBLAS_MAKE_OPTS) \ + -C $(@D) install PREFIX=$(TARGET_DIR)/usr +endef + +$(eval $(generic-package)) diff --git a/package/openbox/Config.in b/package/openbox/Config.in new file mode 100644 index 00000000..fe6e8868 --- /dev/null +++ b/package/openbox/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_OPENBOX + bool "openbox" + depends on BR2_PACKAGE_XORG7 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # pango -> harfbuzz + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # pango -> harfbuzz + depends on BR2_INSTALL_LIBSTDCPP # pango -> freetype + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_PANGO + select BR2_PACKAGE_XLIB_LIBX11 + # libxft and libxrender are needed to get xft support in pango + select BR2_PACKAGE_XLIB_LIBXFT + select BR2_PACKAGE_XLIB_LIBXRENDER + help + Openbox is a highly configurable, next generation window + manager with extensive standards support. + + http://openbox.org + +comment "openbox needs a toolchain w/ C++, threads, wchar, gcc >= 4.8" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 || \ + !BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_XORG7 diff --git a/package/openbox/openbox.hash b/package/openbox/openbox.hash new file mode 100644 index 00000000..c3f9953a --- /dev/null +++ b/package/openbox/openbox.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 abe75855cc5616554ffd47134ad15291fe37ebbebf1a80b69cbde9d670f0e26d openbox-3.6.1.tar.xz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/openbox/openbox.mk b/package/openbox/openbox.mk new file mode 100644 index 00000000..91d1c865 --- /dev/null +++ b/package/openbox/openbox.mk @@ -0,0 +1,61 @@ +################################################################################ +# +# openbox +# +################################################################################ + +OPENBOX_VERSION = 3.6.1 +OPENBOX_SOURCE = openbox-$(OPENBOX_VERSION).tar.xz +OPENBOX_SITE = http://openbox.org/dist/openbox +OPENBOX_LICENSE = GPL-2.0+ +OPENBOX_LICENSE_FILES = COPYING + +OPENBOX_CONF_OPTS = \ + --x-includes=$(STAGING_DIR)/usr/include/X11 \ + --x-libraries=$(STAGING_DIR)/usr/lib + +OPENBOX_DEPENDENCIES = xlib_libX11 libxml2 libglib2 pango host-pkgconf + +ifeq ($(BR2_PACKAGE_IMLIB2_X),y) +OPENBOX_CONF_OPTS += --enable-imlib2 +OPENBOX_DEPENDENCIES += imlib2 +else +OPENBOX_CONF_OPTS += --disable-imlib2 +endif + +ifeq ($(BR2_PACKAGE_STARTUP_NOTIFICATION),y) +OPENBOX_CONF_OPTS += --enable-startup-notification +OPENBOX_DEPENDENCIES += startup-notification +else +OPENBOX_CONF_OPTS += --disable-startup-notification +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBSM),y) +OPENBOX_CONF_OPTS += --enable-session-management +OPENBOX_DEPENDENCIES += xlib_libSM +else +OPENBOX_CONF_OPTS += --disable-session-management +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXINERAMA),y) +OPENBOX_CONF_OPTS += --enable-xinerama +OPENBOX_DEPENDENCIES += xlib_libXinerama +else +OPENBOX_CONF_OPTS += --disable-xinerama +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXRANDR),y) +OPENBOX_CONF_OPTS += --enable-xrandr +OPENBOX_DEPENDENCIES += xlib_libXrandr +else +OPENBOX_CONF_OPTS += --disable-xrandr +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXCURSOR),y) +OPENBOX_DEPENDENCIES += xlib_libXcursor +OPENBOX_CONF_OPTS += --enable-xcursor +else +OPENBOX_CONF_OPTS += --disable-xcursor +endif + +$(eval $(autotools-package)) diff --git a/package/opencore-amr/Config.in b/package/opencore-amr/Config.in new file mode 100644 index 00000000..e35c8ddd --- /dev/null +++ b/package/opencore-amr/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_OPENCORE_AMR + bool "opencore-amr" + depends on BR2_INSTALL_LIBSTDCPP + help + Library of OpenCORE Framework implementation of Adaptive + Multi Rate Narrowband and Wideband (AMR-NB and AMR-WB) + speech codec. + + http://opencore-amr.sourceforge.net/ + +comment "opencore-amr needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/opencore-amr/opencore-amr.hash b/package/opencore-amr/opencore-amr.hash new file mode 100644 index 00000000..b333822b --- /dev/null +++ b/package/opencore-amr/opencore-amr.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/opencore-amr/files/opencore-amr/ +md5 e0798587b91411cc092aa73091a97dfc opencore-amr-0.1.5.tar.gz +sha1 bef4d1e3a8a155b47569b6691a223843b33e279e opencore-amr-0.1.5.tar.gz +# Locally computed: +sha256 2c006cb9d5f651bfb5e60156dbff6af3c9d35c7bbcc9015308c0aff1e14cd341 opencore-amr-0.1.5.tar.gz +sha256 8b3f1762349248d444ab9acbafe73941254e36e1064954da56bb9ddbd5873ddb LICENSE diff --git a/package/opencore-amr/opencore-amr.mk b/package/opencore-amr/opencore-amr.mk new file mode 100644 index 00000000..ac366e24 --- /dev/null +++ b/package/opencore-amr/opencore-amr.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# opencore-amr +# +################################################################################ + +OPENCORE_AMR_VERSION = 0.1.5 +OPENCORE_AMR_SITE = http://downloads.sourceforge.net/project/opencore-amr/opencore-amr +OPENCORE_AMR_INSTALL_STAGING = YES +OPENCORE_AMR_LICENSE = Apache-2.0 +OPENCORE_AMR_LICENSE_FILES = LICENSE + +$(eval $(autotools-package)) diff --git a/package/opencv3/Config.in b/package/opencv3/Config.in new file mode 100644 index 00000000..b9ea033f --- /dev/null +++ b/package/opencv3/Config.in @@ -0,0 +1,341 @@ +menuconfig BR2_PACKAGE_OPENCV3 + bool "opencv3" + depends on BR2_TOOLCHAIN_HAS_ATOMIC + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + depends on !BR2_STATIC_LIBS # include dlfcn.h + select BR2_PACKAGE_ZLIB + help + OpenCV (Open Source Computer Vision) is a library of + programming functions for real time computer vision. + + Note that the opencv_core module and the opencv_hal library + are always built and installed, not matter which other + modules are enabled below. + + http://opencv.org/ + +if BR2_PACKAGE_OPENCV3 + +comment "OpenCV modules" + +config BR2_PACKAGE_OPENCV3_LIB_CALIB3D + bool "calib3d" + select BR2_PACKAGE_OPENCV3_LIB_FEATURES2D + select BR2_PACKAGE_OPENCV3_LIB_IMGPROC + help + Include opencv_calib3d (camera calibration and 3d + reconstruction) module into the OpenCV build. + +config BR2_PACKAGE_OPENCV3_LIB_FEATURES2D + bool "features2d" + select BR2_PACKAGE_OPENCV3_LIB_FLANN + select BR2_PACKAGE_OPENCV3_LIB_IMGPROC + select BR2_PACKAGE_OPENCV3_LIB_ML + help + Include opencv_features2d (2d features framework) module + into the OpenCV build. + +config BR2_PACKAGE_OPENCV3_LIB_FLANN + bool "flann" + # opencv_core dependency is already enabled + help + Include opencv_flann (clustering and search in + multi-dimensional spaces) module into the OpenCV build. + +config BR2_PACKAGE_OPENCV3_LIB_HIGHGUI + bool "highgui" + select BR2_PACKAGE_OPENCV3_LIB_IMGCODECS + select BR2_PACKAGE_OPENCV3_LIB_IMGPROC + select BR2_PACKAGE_OPENCV3_LIB_VIDEOIO + help + Include opencv_highgui (high-level gui and media i/o) module + into the OpenCV build. + +if BR2_PACKAGE_OPENCV3_LIB_HIGHGUI + +choice + prompt "gui toolkit" + help + GUI toolkit to be used by the opencv_highgui module. + +config BR2_PACKAGE_OPENCV3_GUI_NONE + bool "none" + +config BR2_PACKAGE_OPENCV3_WITH_GTK + bool "gtk2" + depends on BR2_PACKAGE_LIBGTK2 + +comment "gtk2 support needs libgtk2" + depends on BR2_USE_MMU # libgtk2 -> glib2 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_PACKAGE_LIBGTK2 + +config BR2_PACKAGE_OPENCV3_WITH_GTK3 + bool "gtk3" + depends on BR2_PACKAGE_LIBGTK3 + +comment "gtk3 support needs libgtk3" + depends on BR2_USE_MMU # libgtk3 -> glib2 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_PACKAGE_LIBGTK3 + +config BR2_PACKAGE_OPENCV3_WITH_QT5 + bool "qt5" + depends on BR2_PACKAGE_QT5 + select BR2_PACKAGE_QT5BASE_CONCURRENT + select BR2_PACKAGE_QT5BASE_GUI + select BR2_PACKAGE_QT5BASE_WIDGETS + help + Use Qt5 with base, concurrent, test, gui and widgets + components, as GUI toolkit. + +comment "qt5 support needs qt5" + depends on !BR2_PACKAGE_QT5 + +endchoice + +config BR2_PACKAGE_OPENCV3_WITH_OPENGL + bool "opengl support" + # OpenGL support done using Qt5OpenGL, so depends on WITH_QT5 + depends on BR2_PACKAGE_OPENCV3_WITH_QT5 + # OpenGL support requires Qt5OpenGL with GL support, not GLES + depends on BR2_PACKAGE_QT5_GL_AVAILABLE + depends on BR2_PACKAGE_HAS_LIBGL + select BR2_PACKAGE_QT5BASE_OPENGL + help + Enable OpenGL for UI. + +comment "opengl support needs an OpenGL provider" + depends on BR2_PACKAGE_OPENCV3_WITH_QT5 + depends on !BR2_PACKAGE_QT5_GL_AVAILABLE || \ + !BR2_PACKAGE_HAS_LIBGL + +endif # BR2_PACKAGE_OPENCV3_LIB_HIGHGUI + +config BR2_PACKAGE_OPENCV3_LIB_IMGCODECS + bool "imgcodecs" + select BR2_PACKAGE_OPENCV3_LIB_IMGPROC + help + Include opencv_imgcodecs (image codecs) module into the + OpenCV build. + +config BR2_PACKAGE_OPENCV3_LIB_IMGPROC + bool "imgproc" + # opencv_core dependency is already enabled + help + Include opencv_imgproc (image processing) module into the + OpenCV build. + +config BR2_PACKAGE_OPENCV3_LIB_ML + bool "ml" + # opencv_core dependency is already enabled + help + Include opencv_ml (machine learning) module into the OpenCV + build. + +config BR2_PACKAGE_OPENCV3_LIB_OBJDETECT + bool "objdetect" + # opencv_core dependency is already enabled + select BR2_PACKAGE_OPENCV3_LIB_CALIB3D + select BR2_PACKAGE_OPENCV3_LIB_IMGPROC + select BR2_PACKAGE_OPENCV3_LIB_ML + help + Include opencv_objdetect (object detection) module into the + OpenCV build. + +config BR2_PACKAGE_OPENCV3_LIB_PHOTO + bool "photo" + select BR2_PACKAGE_OPENCV3_LIB_IMGPROC + help + Include opencv_photo (computational photography) module into + the OpenCV build. + +config BR2_PACKAGE_OPENCV3_LIB_PYTHON + bool "python" + depends on BR2_PACKAGE_PYTHON3 + depends on BR2_PACKAGE_PYTHON_NUMPY_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_MUSL # python-numpy + select BR2_PACKAGE_PYTHON_NUMPY + help + Include opencv_python module into the OpenCV build. No + python example is installed. + +comment "python support needs glibc or musl" + depends on BR2_PACKAGE_PYTHON3 + depends on BR2_PACKAGE_PYTHON_NUMPY_ARCH_SUPPORTS + depends on !(BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_MUSL) + +config BR2_PACKAGE_OPENCV3_LIB_SHAPE + bool "shape" + # opencv_core dependency is already enabled + select BR2_PACKAGE_OPENCV3_LIB_IMGPROC + select BR2_PACKAGE_OPENCV3_LIB_VIDEO + help + Include opencv_shape (shape descriptors and matchers) module + into the OpenCV build. + +config BR2_PACKAGE_OPENCV3_LIB_STITCHING + bool "stitching" + select BR2_PACKAGE_OPENCV3_LIB_CALIB3D + select BR2_PACKAGE_OPENCV3_LIB_FEATURES2D + select BR2_PACKAGE_OPENCV3_LIB_IMGPROC + select BR2_PACKAGE_OPENCV3_LIB_OBJDETECT + help + Include opencv_stitching (images stitching) module into the + OpenCV build. + +config BR2_PACKAGE_OPENCV3_LIB_SUPERRES + bool "superres" + select BR2_PACKAGE_OPENCV3_LIB_IMGPROC + select BR2_PACKAGE_OPENCV3_LIB_VIDEO + help + Include opencv_superres (super resolution) module into the + OpenCV build. + +config BR2_PACKAGE_OPENCV3_LIB_TS + bool "ts" + # opencv_core dependency is already enabled + select BR2_PACKAGE_OPENCV3_LIB_HIGHGUI + select BR2_PACKAGE_OPENCV3_LIB_IMGCODECS + select BR2_PACKAGE_OPENCV3_LIB_IMGPROC + select BR2_PACKAGE_OPENCV3_LIB_VIDEOIO + help + Include opencv_ts (test) module into the OpenCV build. + +config BR2_PACKAGE_OPENCV3_LIB_VIDEOIO + bool "videoio" + select BR2_PACKAGE_OPENCV3_LIB_IMGCODECS + select BR2_PACKAGE_OPENCV3_LIB_IMGPROC + help + Include opencv_videoio (media i/o) module into the OpenCV + build. + +config BR2_PACKAGE_OPENCV3_LIB_VIDEO + bool "video" + select BR2_PACKAGE_OPENCV3_LIB_IMGPROC + help + Include opencv_video (video analysis) module into the OpenCV + build. + +config BR2_PACKAGE_OPENCV3_LIB_VIDEOSTAB + bool "videostab" + select BR2_PACKAGE_OPENCV3_LIB_CALIB3D + select BR2_PACKAGE_OPENCV3_LIB_FEATURES2D + select BR2_PACKAGE_OPENCV3_LIB_IMGPROC + select BR2_PACKAGE_OPENCV3_LIB_PHOTO + select BR2_PACKAGE_OPENCV3_LIB_VIDEO + help + Include opencv_videostab (video stabilization) module into + the OpenCV build. + +comment "Test sets" +config BR2_PACKAGE_OPENCV3_BUILD_TESTS + bool "build tests" + +config BR2_PACKAGE_OPENCV3_BUILD_PERF_TESTS + bool "build performance tests" + +comment "3rd party support" + +config BR2_PACKAGE_OPENCV3_WITH_FFMPEG + bool "ffmpeg support" + depends on BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS + select BR2_PACKAGE_BZIP2 + select BR2_PACKAGE_FFMPEG + select BR2_PACKAGE_FFMPEG_AVRESAMPLE + select BR2_PACKAGE_FFMPEG_SWSCALE + help + Use ffmpeg from the target system. + +config BR2_PACKAGE_OPENCV3_WITH_GSTREAMER1 + bool "gstreamer-1.x" + depends on BR2_USE_MMU # gstreamer1 -> libglib2 + depends on BR2_USE_WCHAR # gstreamer1 -> libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # gstreamer1 -> libglib2 + select BR2_PACKAGE_GSTREAMER1 + select BR2_PACKAGE_GST1_PLUGINS_BASE + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_APP + help + Enable gstreamer support. + +comment "gstreamer support needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_OPENCV3_WITH_JASPER + bool "jpeg2000 support" + select BR2_PACKAGE_JASPER + help + Enable jpeg2000 support. + + Note: this does not use the libjasper bundled with opencv, + but uses the libjasper package installed system-wide by + Buildroot. + +config BR2_PACKAGE_OPENCV3_WITH_JPEG + bool "jpeg support" + select BR2_PACKAGE_JPEG + help + Use shared libjpeg from the target system. + +config BR2_PACKAGE_OPENCV3_WITH_PNG + bool "png support" + select BR2_PACKAGE_LIBPNG + help + Use shared libpng from the target system. + +config BR2_PACKAGE_OPENCV3_WITH_PROTOBUF + bool "protobuf support" + depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS # protobuf + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # protobuf + select BR2_PACKAGE_PROTOBUF + help + Use shared protobuf from the target system. + +comment "protobuf support needs a toolchain w/ gcc >= 4.8" + depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + +config BR2_PACKAGE_OPENCV3_WITH_TIFF + bool "tiff support" + select BR2_PACKAGE_TIFF + help + Use shared libtiff from the target system. + +config BR2_PACKAGE_OPENCV3_WITH_V4L + bool "v4l support" + help + Enable Video 4 Linux support. + + If the package libv4l is enabled, its support is + automatically enabled. + +config BR2_PACKAGE_OPENCV3_WITH_WEBP + bool "webp support" + select BR2_PACKAGE_WEBP + help + Enable WebP support. + + Use shared libwebp from the target system. + +comment "Install options" + +config BR2_PACKAGE_OPENCV3_INSTALL_DATA + bool "install extra data" + help + Install various data that is used by cv libraries and/or + demo applications, specifically for haarcascades and + lbpcascades features. + + For further information: see OpenCV documentation. + +endif # BR2_PACKAGE_OPENCV3 + +comment "opencv3 needs a toolchain w/ C++, NPTL, wchar, dynamic library" + depends on BR2_TOOLCHAIN_HAS_ATOMIC + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_HAS_THREADS_NPTL || \ + BR2_STATIC_LIBS diff --git a/package/opencv3/opencv3.hash b/package/opencv3/opencv3.hash new file mode 100644 index 00000000..04eed67c --- /dev/null +++ b/package/opencv3/opencv3.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 70230049194ae03ed8bfaab6cd1388569aa1b5c482d8b50d3af1cd2ae5a0b95d opencv3-3.4.13.tar.gz +sha256 a5a7cf90fe5ac9763baad852cf69cf9d9b89bff934a679fdc5c8fcecaeba9a25 LICENSE diff --git a/package/opencv3/opencv3.mk b/package/opencv3/opencv3.mk new file mode 100644 index 00000000..5c82da99 --- /dev/null +++ b/package/opencv3/opencv3.mk @@ -0,0 +1,376 @@ +################################################################################ +# +# opencv3 +# +################################################################################ + +OPENCV3_VERSION = 3.4.13 +OPENCV3_SITE = $(call github,opencv,opencv,$(OPENCV3_VERSION)) +OPENCV3_INSTALL_STAGING = YES +OPENCV3_LICENSE = BSD-3-Clause +OPENCV3_LICENSE_FILES = LICENSE +OPENCV3_CPE_ID_VENDOR = opencv +OPENCV3_CPE_ID_PRODUCT = opencv +OPENCV3_SUPPORTS_IN_SOURCE_BUILD = NO + +OPENCV3_CXXFLAGS = $(TARGET_CXXFLAGS) + +# Uses __atomic_fetch_add_4 +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +OPENCV3_CXXFLAGS += -latomic +endif + +# Fix c++11 build with missing std::exception_ptr +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_64735),y) +OPENCV3_CXXFLAGS += -DCV__EXCEPTION_PTR=0 +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_68485),y) +OPENCV3_CXXFLAGS += -O0 +endif + +# OpenCV component options +OPENCV3_CONF_OPTS += \ + -DCMAKE_CXX_FLAGS="$(OPENCV3_CXXFLAGS)" \ + -DBUILD_DOCS=OFF \ + -DBUILD_PERF_TESTS=$(if $(BR2_PACKAGE_OPENCV3_BUILD_PERF_TESTS),ON,OFF) \ + -DBUILD_TESTS=$(if $(BR2_PACKAGE_OPENCV3_BUILD_TESTS),ON,OFF) \ + -DBUILD_WITH_DEBUG_INFO=OFF \ + -DDOWNLOAD_EXTERNAL_TEST_DATA=OFF \ + -DOPENCV_ENABLE_PKG_CONFIG=ON + +ifeq ($(BR2_PACKAGE_OPENCV3_BUILD_TESTS)$(BR2_PACKAGE_OPENCV3_BUILD_PERF_TESTS),) +OPENCV3_CONF_OPTS += -DINSTALL_TEST=OFF +else +OPENCV3_CONF_OPTS += -DINSTALL_TEST=ON +endif + +# OpenCV build options +OPENCV3_CONF_OPTS += \ + -DBUILD_WITH_STATIC_CRT=OFF \ + -DENABLE_CCACHE=OFF \ + -DENABLE_COVERAGE=OFF \ + -DENABLE_FAST_MATH=ON \ + -DENABLE_IMPL_COLLECTION=OFF \ + -DENABLE_NOISY_WARNINGS=OFF \ + -DENABLE_OMIT_FRAME_POINTER=ON \ + -DENABLE_PRECOMPILED_HEADERS=OFF \ + -DENABLE_PROFILING=OFF \ + -DOPENCV_WARNINGS_ARE_ERRORS=OFF + +# OpenCV link options +OPENCV3_CONF_OPTS += \ + -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=OFF \ + -DCMAKE_SKIP_RPATH=OFF \ + -DCMAKE_USE_RELATIVE_PATHS=OFF + +# OpenCV packaging options: +OPENCV3_CONF_OPTS += \ + -DBUILD_PACKAGE=OFF \ + -DENABLE_SOLUTION_FOLDERS=OFF \ + -DINSTALL_CREATE_DISTRIB=OFF + +# OpenCV module selection +# * Modules on: +# - core: if not set, opencv does not build anything +# - hal: core's dependency +# * Modules off: +# - android*: android stuff +# - apps: programs for training classifiers +# - java: java bindings +# - viz: missing VTK dependency +# - world: all-in-one module +# +# * Contrib modules from [1] are disabled: +# - opencv_contrib package is not available in Buildroot; +# - OPENCV3_EXTRA_MODULES_PATH is not set. +# +# [1] https://github.com/Itseez/opencv_contrib +OPENCV3_CONF_OPTS += \ + -DBUILD_opencv_androidcamera=OFF \ + -DBUILD_opencv_apps=OFF \ + -DBUILD_opencv_calib3d=$(if $(BR2_PACKAGE_OPENCV3_LIB_CALIB3D),ON,OFF) \ + -DBUILD_opencv_core=ON \ + -DBUILD_opencv_features2d=$(if $(BR2_PACKAGE_OPENCV3_LIB_FEATURES2D),ON,OFF) \ + -DBUILD_opencv_flann=$(if $(BR2_PACKAGE_OPENCV3_LIB_FLANN),ON,OFF) \ + -DBUILD_opencv_highgui=$(if $(BR2_PACKAGE_OPENCV3_LIB_HIGHGUI),ON,OFF) \ + -DBUILD_opencv_imgcodecs=$(if $(BR2_PACKAGE_OPENCV3_LIB_IMGCODECS),ON,OFF) \ + -DBUILD_opencv_imgproc=$(if $(BR2_PACKAGE_OPENCV3_LIB_IMGPROC),ON,OFF) \ + -DBUILD_opencv_java=OFF \ + -DBUILD_opencv_ml=$(if $(BR2_PACKAGE_OPENCV3_LIB_ML),ON,OFF) \ + -DBUILD_opencv_objdetect=$(if $(BR2_PACKAGE_OPENCV3_LIB_OBJDETECT),ON,OFF) \ + -DBUILD_opencv_photo=$(if $(BR2_PACKAGE_OPENCV3_LIB_PHOTO),ON,OFF) \ + -DBUILD_opencv_shape=$(if $(BR2_PACKAGE_OPENCV3_LIB_SHAPE),ON,OFF) \ + -DBUILD_opencv_stitching=$(if $(BR2_PACKAGE_OPENCV3_LIB_STITCHING),ON,OFF) \ + -DBUILD_opencv_superres=$(if $(BR2_PACKAGE_OPENCV3_LIB_SUPERRES),ON,OFF) \ + -DBUILD_opencv_ts=$(if $(BR2_PACKAGE_OPENCV3_LIB_TS),ON,OFF) \ + -DBUILD_opencv_video=$(if $(BR2_PACKAGE_OPENCV3_LIB_VIDEO),ON,OFF) \ + -DBUILD_opencv_videoio=$(if $(BR2_PACKAGE_OPENCV3_LIB_VIDEOIO),ON,OFF) \ + -DBUILD_opencv_videostab=$(if $(BR2_PACKAGE_OPENCV3_LIB_VIDEOSTAB),ON,OFF) \ + -DBUILD_opencv_viz=OFF \ + -DBUILD_opencv_world=OFF + +# Hardware support options. +# +# * PowerPC and VFPv3 support are turned off since their only effects +# are altering CFLAGS, adding '-mcpu=G3 -mtune=G5' or '-mfpu=vfpv3' +# to them, which is already handled by Buildroot. +# * NEON logic is needed as it is not only used to add CFLAGS, but +# also to enable additional NEON code. +OPENCV3_CONF_OPTS += \ + -DENABLE_POWERPC=OFF \ + -DENABLE_NEON=$(if $(BR2_ARM_CPU_HAS_NEON),ON,OFF) \ + -DENABLE_VFPV3=OFF + +# Cuda stuff +OPENCV3_CONF_OPTS += \ + -DBUILD_CUDA_STUBS=OFF \ + -DBUILD_opencv_cudaarithm=OFF \ + -DBUILD_opencv_cudabgsegm=OFF \ + -DBUILD_opencv_cudacodec=OFF \ + -DBUILD_opencv_cudafeatures2d=OFF \ + -DBUILD_opencv_cudafilters=OFF \ + -DBUILD_opencv_cudaimgproc=OFF \ + -DBUILD_opencv_cudalegacy=OFF \ + -DBUILD_opencv_cudaobjdetect=OFF \ + -DBUILD_opencv_cudaoptflow=OFF \ + -DBUILD_opencv_cudastereo=OFF \ + -DBUILD_opencv_cudawarping=OFF \ + -DBUILD_opencv_cudev=OFF \ + -DWITH_CUBLAS=OFF \ + -DWITH_CUDA=OFF \ + -DWITH_CUFFT=OFF + +# NVidia stuff +OPENCV3_CONF_OPTS += -DWITH_NVCUVID=OFF + +# AMD stuff +OPENCV3_CONF_OPTS += \ + -DWITH_OPENCLAMDBLAS=OFF \ + -DWITH_OPENCLAMDFFT=OFF + +# Intel stuff +OPENCV3_CONF_OPTS += \ + -DBUILD_WITH_DYNAMIC_IPP=OFF \ + -DWITH_INTELPERC=OFF \ + -DWITH_IPP=OFF \ + -DWITH_IPP_A=OFF \ + -DWITH_TBB=OFF + +# Smartek stuff +OPENCV3_CONF_OPTS += -DWITH_GIGEAPI=OFF + +# Prosilica stuff +OPENCV3_CONF_OPTS += -DWITH_PVAPI=OFF + +# Ximea stuff +OPENCV3_CONF_OPTS += -DWITH_XIMEA=OFF + +# Non-Linux support (Android options) must remain OFF: +OPENCV3_CONF_OPTS += \ + -DANDROID=OFF \ + -DBUILD_ANDROID_CAMERA_WRAPPER=OFF \ + -DBUILD_ANDROID_EXAMPLES=OFF \ + -DBUILD_ANDROID_SERVICE=OFF \ + -DBUILD_FAT_JAVA_LIB=OFF \ + -DINSTALL_ANDROID_EXAMPLES=OFF \ + -DWITH_ANDROID_CAMERA=OFF + +# Non-Linux support (Mac OSX options) must remain OFF: +OPENCV3_CONF_OPTS += \ + -DWITH_AVFOUNDATION=OFF \ + -DWITH_CARBON=OFF \ + -DWITH_QUICKTIME=OFF + +# Non-Linux support (Windows options) must remain OFF: +OPENCV3_CONF_OPTS += \ + -DWITH_CSTRIPES=OFF \ + -DWITH_DSHOW=OFF \ + -DWITH_MSMF=OFF \ + -DWITH_VFW=OFF \ + -DWITH_VIDEOINPUT=OFF \ + -DWITH_WIN32UI=OFF + +# Software/3rd-party support options: +# - disable all examples +OPENCV3_CONF_OPTS += \ + -DBUILD_EXAMPLES=OFF \ + -DBUILD_JASPER=OFF \ + -DBUILD_JPEG=OFF \ + -DBUILD_OPENEXR=OFF \ + -DBUILD_PNG=OFF \ + -DBUILD_PROTOBUF=OFF \ + -DBUILD_TIFF=OFF \ + -DBUILD_ZLIB=OFF \ + -DINSTALL_C_EXAMPLES=OFF \ + -DINSTALL_PYTHON_EXAMPLES=OFF \ + -DINSTALL_TO_MANGLED_PATHS=OFF + +# Disabled features (mostly because they are not available in Buildroot), but +# - eigen: OpenCV does not use it, not take any benefit from it. +OPENCV3_CONF_OPTS += \ + -DWITH_1394=OFF \ + -DWITH_CLP=OFF \ + -DWITH_EIGEN=OFF \ + -DWITH_GDAL=OFF \ + -DWITH_GPHOTO2=OFF \ + -DWITH_GSTREAMER_0_10=OFF \ + -DWITH_LAPACK=OFF \ + -DWITH_MATLAB=OFF \ + -DWITH_OPENCL=OFF \ + -DWITH_OPENCL_SVM=OFF \ + -DWITH_OPENEXR=OFF \ + -DWITH_OPENNI2=OFF \ + -DWITH_OPENNI=OFF \ + -DWITH_UNICAP=OFF \ + -DWITH_VA=OFF \ + -DWITH_VA_INTEL=OFF \ + -DWITH_VTK=OFF \ + -DWITH_XINE=OFF + +OPENCV3_DEPENDENCIES += host-pkgconf zlib + +ifeq ($(BR2_PACKAGE_OPENCV3_WITH_FFMPEG),y) +OPENCV3_CONF_OPTS += -DWITH_FFMPEG=ON +OPENCV3_DEPENDENCIES += ffmpeg bzip2 +else +OPENCV3_CONF_OPTS += -DWITH_FFMPEG=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV3_WITH_GSTREAMER1),y) +OPENCV3_CONF_OPTS += -DWITH_GSTREAMER=ON +OPENCV3_DEPENDENCIES += gstreamer1 gst1-plugins-base +else +OPENCV3_CONF_OPTS += -DWITH_GSTREAMER=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV3_WITH_GTK)$(BR2_PACKAGE_OPENCV3_WITH_GTK3),) +OPENCV3_CONF_OPTS += -DWITH_GTK=OFF -DWITH_GTK_2_X=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV3_WITH_GTK),y) +OPENCV3_CONF_OPTS += -DWITH_GTK=ON -DWITH_GTK_2_X=ON +OPENCV3_DEPENDENCIES += libgtk2 +endif + +ifeq ($(BR2_PACKAGE_OPENCV3_WITH_GTK3),y) +OPENCV3_CONF_OPTS += -DWITH_GTK=ON -DWITH_GTK_2_X=OFF +OPENCV3_DEPENDENCIES += libgtk3 +endif + +ifeq ($(BR2_PACKAGE_OPENCV3_WITH_JASPER),y) +OPENCV3_CONF_OPTS += -DWITH_JASPER=ON +OPENCV3_DEPENDENCIES += jasper +else +OPENCV3_CONF_OPTS += -DWITH_JASPER=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV3_WITH_JPEG),y) +OPENCV3_CONF_OPTS += -DWITH_JPEG=ON +OPENCV3_DEPENDENCIES += jpeg +else +OPENCV3_CONF_OPTS += -DWITH_JPEG=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV3_WITH_OPENGL),y) +OPENCV3_CONF_OPTS += -DWITH_OPENGL=ON +OPENCV3_DEPENDENCIES += libgl +else +OPENCV3_CONF_OPTS += -DWITH_OPENGL=OFF +endif + +OPENCV3_CONF_OPTS += -DWITH_OPENMP=$(if $(BR2_TOOLCHAIN_HAS_OPENMP),ON,OFF) + +ifeq ($(BR2_PACKAGE_OPENCV3_WITH_PNG),y) +OPENCV3_CONF_OPTS += -DWITH_PNG=ON +OPENCV3_DEPENDENCIES += libpng +else +OPENCV3_CONF_OPTS += -DWITH_PNG=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV3_WITH_PROTOBUF),y) +# protobuf needs c++11 (since 3.6.0) +OPENCV3_CONF_OPTS += \ + -DENABLE_CXX11=ON \ + -DPROTOBUF_UPDATE_FILES=ON \ + -DWITH_PROTOBUF=ON +OPENCV3_DEPENDENCIES += protobuf +else +OPENCV3_CONF_OPTS += -DWITH_PROTOBUF=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV3_WITH_QT5),y) +OPENCV3_CONF_OPTS += -DWITH_QT=5 +OPENCV3_DEPENDENCIES += qt5base +else +OPENCV3_CONF_OPTS += -DWITH_QT=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV3_WITH_TIFF),y) +OPENCV3_CONF_OPTS += -DWITH_TIFF=ON +OPENCV3_DEPENDENCIES += tiff +else +OPENCV3_CONF_OPTS += -DWITH_TIFF=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV3_WITH_V4L),y) +OPENCV3_CONF_OPTS += \ + -DWITH_LIBV4L=$(if $(BR2_PACKAGE_LIBV4L),ON,OFF) \ + -DWITH_V4L=ON +OPENCV3_DEPENDENCIES += $(if $(BR2_PACKAGE_LIBV4L),libv4l) +else +OPENCV3_CONF_OPTS += -DWITH_V4L=OFF -DWITH_LIBV4L=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV3_WITH_WEBP),y) +OPENCV3_CONF_OPTS += -DWITH_WEBP=ON +OPENCV3_DEPENDENCIES += webp +else +OPENCV3_CONF_OPTS += -DWITH_WEBP=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV3_LIB_PYTHON),y) +OPENCV3_CONF_OPTS += \ + -DBUILD_opencv_python2=OFF \ + -DBUILD_opencv_python3=ON \ + -DPYTHON3_EXECUTABLE=$(HOST_DIR)/bin/python3 \ + -DPYTHON3_INCLUDE_PATH=$(STAGING_DIR)/usr/include/python$(PYTHON3_VERSION_MAJOR) \ + -DPYTHON3_LIBRARIES=$(STAGING_DIR)/usr/lib/libpython$(PYTHON3_VERSION_MAJOR).so \ + -DPYTHON3_NUMPY_INCLUDE_DIRS=$(STAGING_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/site-packages/numpy/core/include \ + -DPYTHON3_PACKAGES_PATH=/usr/lib/python$(PYTHON3_VERSION_MAJOR)/site-packages \ + -DPYTHON3_NUMPY_VERSION=$(PYTHON_NUMPY_VERSION) +OPENCV3_DEPENDENCIES += python3 +OPENCV3_KEEP_PY_FILES += usr/lib/python$(PYTHON3_VERSION_MAJOR)/site-packages/cv2/config*.py +OPENCV3_CONF_ENV += $(PKG_PYTHON_DISTUTILS_ENV) +OPENCV3_DEPENDENCIES += python-numpy +else +OPENCV3_CONF_OPTS += \ + -DBUILD_opencv_python2=OFF \ + -DBUILD_opencv_python3=OFF +endif + +# Installation hooks: +define OPENCV3_CLEAN_INSTALL_LICENSE + $(RM) -fr $(TARGET_DIR)/usr/share/licenses/opencv3 +endef +OPENCV3_POST_INSTALL_TARGET_HOOKS += OPENCV3_CLEAN_INSTALL_LICENSE + +define OPENCV3_CLEAN_INSTALL_CMAKE + $(RM) -f $(TARGET_DIR)/usr/share/OpenCV/OpenCV*.cmake +endef +OPENCV3_POST_INSTALL_TARGET_HOOKS += OPENCV3_CLEAN_INSTALL_CMAKE + +define OPENCV3_CLEAN_INSTALL_VALGRIND + $(RM) -f $(TARGET_DIR)/usr/share/OpenCV/valgrind* +endef +OPENCV3_POST_INSTALL_TARGET_HOOKS += OPENCV3_CLEAN_INSTALL_VALGRIND + +ifneq ($(BR2_PACKAGE_OPENCV3_INSTALL_DATA),y) +define OPENCV3_CLEAN_INSTALL_DATA + $(RM) -fr $(TARGET_DIR)/usr/share/OpenCV/haarcascades \ + $(TARGET_DIR)/usr/share/OpenCV/lbpcascades +endef +OPENCV3_POST_INSTALL_TARGET_HOOKS += OPENCV3_CLEAN_INSTALL_DATA +endif + +$(eval $(cmake-package)) diff --git a/package/openfpgaloader/Config.in b/package/openfpgaloader/Config.in new file mode 100644 index 00000000..f1b34ef5 --- /dev/null +++ b/package/openfpgaloader/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_OPENFPGALOADER + bool "openfpgaloader" + depends on BR2_TOOLCHAIN_HAS_THREADS # libftdi1 + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libftdi1 -> libusb + depends on BR2_INSTALL_LIBSTDCPP + select BR2_PACKAGE_LIBFTDI1 + help + Universal utility for programming FPGA + + https://github.com/trabucayre/openFPGALoader/ + +comment "openfpgaloader needs a toolchain w/ threads, C++, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/openfpgaloader/openfpgaloader.hash b/package/openfpgaloader/openfpgaloader.hash new file mode 100644 index 00000000..990149cd --- /dev/null +++ b/package/openfpgaloader/openfpgaloader.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 ef3ed60297ab560f15cd4362d61b7da86c44b84e18937e0411023f8d1cf6a606 openfpgaloader-381c67de00a3102cf6e9bb20ca84030a71c7a0f2.tar.gz +sha256 8486a10c4393cee1c25392769ddd3b2d6c242d6ec7928e1414efff7dfb2f07ef LICENSE diff --git a/package/openfpgaloader/openfpgaloader.mk b/package/openfpgaloader/openfpgaloader.mk new file mode 100644 index 00000000..1bb3de37 --- /dev/null +++ b/package/openfpgaloader/openfpgaloader.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# openfpgaloader +# +################################################################################ + +OPENFPGALOADER_VERSION = 381c67de00a3102cf6e9bb20ca84030a71c7a0f2 +OPENFPGALOADER_SITE = $(call github,trabucayre,openFPGALoader,$(OPENFPGALOADER_VERSION)) +OPENFPGALOADER_LICENSE = AGPL-3.0 +OPENFPGALOADER_LICENSE_FILES = LICENSE +OPENFPGALOADER_DEPENDENCIES = libftdi1 + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +OPENFPGALOADER_DEPENDENCIES += udev +OPENFPGALOADER_CONF_OPTS += -DENABLE_UDEV=ON +else +OPENFPGALOADER_CONF_OPTS += -DENABLE_UDEV=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/opengl/Config.in b/package/opengl/Config.in new file mode 100644 index 00000000..cbc00142 --- /dev/null +++ b/package/opengl/Config.in @@ -0,0 +1,6 @@ +source "package/opengl/libgl/Config.in" +source "package/opengl/libegl/Config.in" +source "package/opengl/libgles/Config.in" +source "package/opengl/libopencl/Config.in" +source "package/opengl/libopenvg/Config.in" +source "package/opengl/libopenmax/Config.in" diff --git a/package/opengl/libegl/Config.in b/package/opengl/libegl/Config.in new file mode 100644 index 00000000..a2369989 --- /dev/null +++ b/package/opengl/libegl/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_HAS_LIBEGL + bool + +config BR2_PACKAGE_HAS_LIBEGL_WAYLAND + bool + depends on BR2_PACKAGE_HAS_LIBEGL + +config BR2_PACKAGE_PROVIDES_LIBEGL + string + depends on BR2_PACKAGE_HAS_LIBEGL diff --git a/package/opengl/libegl/libegl.mk b/package/opengl/libegl/libegl.mk new file mode 100644 index 00000000..1f5460e6 --- /dev/null +++ b/package/opengl/libegl/libegl.mk @@ -0,0 +1,7 @@ +################################################################################ +# +# libegl +# +################################################################################ + +$(eval $(virtual-package)) diff --git a/package/opengl/libgl/Config.in b/package/opengl/libgl/Config.in new file mode 100644 index 00000000..b9a1602a --- /dev/null +++ b/package/opengl/libgl/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_HAS_LIBGL + bool + +config BR2_PACKAGE_PROVIDES_LIBGL + string + depends on BR2_PACKAGE_HAS_LIBGL diff --git a/package/opengl/libgl/libgl.mk b/package/opengl/libgl/libgl.mk new file mode 100644 index 00000000..7abc13d6 --- /dev/null +++ b/package/opengl/libgl/libgl.mk @@ -0,0 +1,7 @@ +################################################################################ +# +# libgl +# +################################################################################ + +$(eval $(virtual-package)) diff --git a/package/opengl/libgles/Config.in b/package/opengl/libgles/Config.in new file mode 100644 index 00000000..090ef16d --- /dev/null +++ b/package/opengl/libgles/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_HAS_LIBGLES + bool + +config BR2_PACKAGE_PROVIDES_LIBGLES + string + depends on BR2_PACKAGE_HAS_LIBGLES diff --git a/package/opengl/libgles/libgles.mk b/package/opengl/libgles/libgles.mk new file mode 100644 index 00000000..407f8f92 --- /dev/null +++ b/package/opengl/libgles/libgles.mk @@ -0,0 +1,7 @@ +################################################################################ +# +# libgles +# +################################################################################ + +$(eval $(virtual-package)) diff --git a/package/opengl/libopencl/Config.in b/package/opengl/libopencl/Config.in new file mode 100644 index 00000000..57a3ad7d --- /dev/null +++ b/package/opengl/libopencl/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_HAS_LIBOPENCL + bool + +config BR2_PACKAGE_PROVIDES_LIBOPENCL + string + depends on BR2_PACKAGE_HAS_LIBOPENCL diff --git a/package/opengl/libopencl/libopencl.mk b/package/opengl/libopencl/libopencl.mk new file mode 100644 index 00000000..e1c71f82 --- /dev/null +++ b/package/opengl/libopencl/libopencl.mk @@ -0,0 +1,7 @@ +################################################################################ +# +# libopencl +# +################################################################################ + +$(eval $(virtual-package)) diff --git a/package/opengl/libopenmax/Config.in b/package/opengl/libopenmax/Config.in new file mode 100644 index 00000000..901426ab --- /dev/null +++ b/package/opengl/libopenmax/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_HAS_LIBOPENMAX + bool + +config BR2_PACKAGE_PROVIDES_LIBOPENMAX + string + depends on BR2_PACKAGE_HAS_LIBOPENMAX diff --git a/package/opengl/libopenmax/libopenmax.mk b/package/opengl/libopenmax/libopenmax.mk new file mode 100644 index 00000000..bc2e7f88 --- /dev/null +++ b/package/opengl/libopenmax/libopenmax.mk @@ -0,0 +1,7 @@ +################################################################################ +# +# libopenmax +# +################################################################################ + +$(eval $(virtual-package)) diff --git a/package/opengl/libopenvg/Config.in b/package/opengl/libopenvg/Config.in new file mode 100644 index 00000000..37d9410e --- /dev/null +++ b/package/opengl/libopenvg/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_HAS_LIBOPENVG + bool + +config BR2_PACKAGE_PROVIDES_LIBOPENVG + string + depends on BR2_PACKAGE_HAS_LIBOPENVG diff --git a/package/opengl/libopenvg/libopenvg.mk b/package/opengl/libopenvg/libopenvg.mk new file mode 100644 index 00000000..3ce85a16 --- /dev/null +++ b/package/opengl/libopenvg/libopenvg.mk @@ -0,0 +1,7 @@ +################################################################################ +# +# libopenvg +# +################################################################################ + +$(eval $(virtual-package)) diff --git a/package/opengl/opengl.mk b/package/opengl/opengl.mk new file mode 100644 index 00000000..abf96d5c --- /dev/null +++ b/package/opengl/opengl.mk @@ -0,0 +1 @@ +include $(sort $(wildcard package/opengl/*/*.mk)) diff --git a/package/openipmi/0001-Avoid-searching-host-library-path.patch b/package/openipmi/0001-Avoid-searching-host-library-path.patch new file mode 100644 index 00000000..44a57dcf --- /dev/null +++ b/package/openipmi/0001-Avoid-searching-host-library-path.patch @@ -0,0 +1,52 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Baruch Siach +Date: Wed, 22 Jul 2015 07:04:33 +0300 +Subject: [PATCH] Avoid searching host library path + +The $(libdir) variable points to the location of the directory on the target +system, /usr/lib by default. When cross compiling this directory contains the +host libraries which may be different than target libraries. Don't use +$(libdir) in the library search path. + +Signed-off-by: Baruch Siach +Signed-off-by: Joel Stanley +--- + cmdlang/Makefile.am | 3 +-- + unix/Makefile.am | 6 ++---- + 2 files changed, 3 insertions(+), 6 deletions(-) + +diff --git a/cmdlang/Makefile.am b/cmdlang/Makefile.am +index 264ee12be79f..0b3843784656 100644 +--- a/cmdlang/Makefile.am ++++ b/cmdlang/Makefile.am +@@ -15,8 +15,7 @@ libOpenIPMIcmdlang_la_SOURCES = cmdlang.c cmd_domain.c cmd_entity.c cmd_mc.c \ + libOpenIPMIcmdlang_la_LIBADD = -lm \ + $(top_builddir)/utils/libOpenIPMIutils.la \ + $(top_builddir)/lib/libOpenIPMI.la +-libOpenIPMIcmdlang_la_LDFLAGS = -rdynamic -version-info $(LD_VERSION) \ +- -L$(libdir) ++libOpenIPMIcmdlang_la_LDFLAGS = -rdynamic -version-info $(LD_VERSION) + + bin_PROGRAMS = openipmish + +diff --git a/unix/Makefile.am b/unix/Makefile.am +index 5128839dad13..bd0f897ba8d6 100644 +--- a/unix/Makefile.am ++++ b/unix/Makefile.am +@@ -10,14 +10,12 @@ lib_LTLIBRARIES = libOpenIPMIposix.la libOpenIPMIpthread.la + libOpenIPMIpthread_la_SOURCES = posix_thread_os_hnd.c selector.c + libOpenIPMIpthread_la_LIBADD = -lpthread $(GDBM_LIB) \ + $(top_builddir)/utils/libOpenIPMIutils.la $(RT_LIB) +-libOpenIPMIpthread_la_LDFLAGS = -rdynamic -version-info $(LD_VERSION) \ +- -L$(libdir) ++libOpenIPMIpthread_la_LDFLAGS = -rdynamic -version-info $(LD_VERSION) + + libOpenIPMIposix_la_SOURCES = posix_os_hnd.c selector.c + libOpenIPMIposix_la_LIBADD = $(top_builddir)/utils/libOpenIPMIutils.la \ + $(GDBM_LIB) $(RT_LIB) +-libOpenIPMIposix_la_LDFLAGS = -rdynamic -version-info $(LD_VERSION) \ +- -L$(libdir) ++libOpenIPMIposix_la_LDFLAGS = -rdynamic -version-info $(LD_VERSION) + + noinst_HEADERS = heap.h + diff --git a/package/openipmi/Config.in b/package/openipmi/Config.in new file mode 100644 index 00000000..22fb9fa7 --- /dev/null +++ b/package/openipmi/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_OPENIPMI + bool "openipmi" + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS # dlopen() + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + select BR2_PACKAGE_POPT + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_READLINE + help + IPMI allows remote monitoring and remote management of + devices. OpenIPMI provides a library and command line tools + to interact with IPMI enabled devices. OpenIPMI also provides + an IPMI BMC simulator. + + http://openipmi.sourceforge.net + +comment "openipmi needs a toolchain w/ dynamic library, NPTL" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS_NPTL diff --git a/package/openipmi/openipmi.hash b/package/openipmi/openipmi.hash new file mode 100644 index 00000000..2ec9dd31 --- /dev/null +++ b/package/openipmi/openipmi.hash @@ -0,0 +1,8 @@ +# From http://sourceforge.net/projects/openipmi/files/OpenIPMI%202.0%20Library/ +sha1 be0c87743a38e2fa00586df931f021c0b480385b OpenIPMI-2.0.28.tar.gz +md5 ba37f08e306062ec73c7ed2a2bd4d5f4 OpenIPMI-2.0.28.tar.gz +# Locally computed +sha256 8e8b1de2a9a041b419133ecb21f956e999841cf2e759e973eeba9a36f8b40996 OpenIPMI-2.0.28.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING +sha256 185323a62589e7ee80f86bf2ea29caad9a09fdda0ea3f1c00db8b778c7edf60e COPYING.BSD +sha256 5bbcbb737e60fe9deba08ecbd00920cfcc3403ba2e534c64fdeea49d6bb87509 COPYING.LIB diff --git a/package/openipmi/openipmi.mk b/package/openipmi/openipmi.mk new file mode 100644 index 00000000..3240b898 --- /dev/null +++ b/package/openipmi/openipmi.mk @@ -0,0 +1,42 @@ +################################################################################ +# +# openipmi +# +################################################################################ + +OPENIPMI_VERSION = 2.0.28 +OPENIPMI_SITE = https://sourceforge.net/projects/openipmi/files/OpenIPMI%202.0%20Library +OPENIPMI_SOURCE = OpenIPMI-$(OPENIPMI_VERSION).tar.gz +OPENIPMI_LICENSE = LGPL-2.0+, GPL-2.0+, BSD-3-Clause +OPENIPMI_LICENSE_FILES = COPYING.LIB COPYING COPYING.BSD +OPENIPMI_DEPENDENCIES = popt ncurses readline host-pkgconf +OPENIPMI_INSTALL_STAGING = YES +# Patching Makefile.am +OPENIPMI_AUTORECONF = YES +OPENIPMI_CONF_ENV = ac_cv_path_pkgprog="$(PKG_CONFIG_HOST_BINARY)" +OPENIPMI_CONF_OPTS = \ + --with-glib=no \ + --with-tcl=no \ + --with-perl=no \ + --with-python=no \ + --with-swig=no + +ifeq ($(BR2_PACKAGE_GDBM),y) +OPENIPMI_DEPENDENCIES += gdbm +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +OPENIPMI_DEPENDENCIES += openssl +OPENIPMI_CONF_OPTS += --with-openssl=yes +else +OPENIPMI_CONF_OPTS += --with-openssl=no +endif + +ifeq ($(BR2_PACKAGE_NETSNMP),y) +OPENIPMI_DEPENDENCIES += netsnmp +OPENIPMI_CONF_OPTS += --with-ucdsnmp=yes +else +OPENIPMI_CONF_OPTS += --with-ucdsnmp=no +endif + +$(eval $(autotools-package)) diff --git a/package/openjdk-bin/openjdk-bin.hash b/package/openjdk-bin/openjdk-bin.hash new file mode 100644 index 00000000..a08aa16d --- /dev/null +++ b/package/openjdk-bin/openjdk-bin.hash @@ -0,0 +1,9 @@ +# From https://github.com/AdoptOpenJDK/openjdk14-binaries/releases +sha256 7d5ee7e06909b8a99c0d029f512f67b092597aa5b0e78c109bd59405bbfa74fe OpenJDK14U-jdk_x64_linux_hotspot_14.0.2_12.tar.gz + +# From https://github.com/AdoptOpenJDK/openjdk11-binaries/releases +sha256 e99b98f851541202ab64401594901e583b764e368814320eba442095251e78cb OpenJDK11U-jdk_x64_linux_hotspot_11.0.11_9.tar.gz + +# Locally calculated +sha256 4b9abebc4338048a7c2dc184e9f800deb349366bdf28eb23c2677a77b4c87726 legal/java.prefs/LICENSE +sha256 a44eb7b5caf5534c6ef536b21edb40b4d6babf91bf97d9d45596868618b2c6fb legal/java.prefs/ASSEMBLY_EXCEPTION diff --git a/package/openjdk-bin/openjdk-bin.mk b/package/openjdk-bin/openjdk-bin.mk new file mode 100644 index 00000000..61e7ecac --- /dev/null +++ b/package/openjdk-bin/openjdk-bin.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# host-openjdk-bin +# +################################################################################ + +ifeq ($(BR2_OPENJDK_VERSION_LATEST),y) +HOST_OPENJDK_BIN_VERSION_MAJOR = 14.0.2 +HOST_OPENJDK_BIN_VERSION_MINOR = 12 +HOST_OPENJDK_BIN_VERSION = $(HOST_OPENJDK_BIN_VERSION_MAJOR)_$(HOST_OPENJDK_BIN_VERSION_MINOR) +HOST_OPENJDK_BIN_SOURCE = OpenJDK14U-jdk_x64_linux_hotspot_$(HOST_OPENJDK_BIN_VERSION).tar.gz +HOST_OPENJDK_BIN_SITE = https://github.com/AdoptOpenJDK/openjdk14-binaries/releases/download/jdk-$(HOST_OPENJDK_BIN_VERSION_MAJOR)%2B$(HOST_OPENJDK_BIN_VERSION_MINOR) +else +HOST_OPENJDK_BIN_VERSION_MAJOR = 11.0.11 +HOST_OPENJDK_BIN_VERSION_MINOR = 9 +HOST_OPENJDK_BIN_VERSION = $(HOST_OPENJDK_BIN_VERSION_MAJOR)_$(HOST_OPENJDK_BIN_VERSION_MINOR) +HOST_OPENJDK_BIN_SOURCE = OpenJDK11U-jdk_x64_linux_hotspot_$(HOST_OPENJDK_BIN_VERSION).tar.gz +HOST_OPENJDK_BIN_SITE = https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-$(HOST_OPENJDK_BIN_VERSION_MAJOR)%2B$(HOST_OPENJDK_BIN_VERSION_MINOR) +endif +HOST_OPENJDK_BIN_LICENSE = GPL-2.0+ with exception +HOST_OPENJDK_BIN_LICENSE_FILES = legal/java.prefs/LICENSE legal/java.prefs/ASSEMBLY_EXCEPTION + +HOST_OPENJDK_BIN_ROOT_DIR = $(HOST_DIR)/usr/lib/jvm + +# unpack200 has an invalid RPATH and relies on libzlib. When +# host-libzlib is installed on the system, the error "ERROR: package +# host-libzlib installs executables without proper RPATH: will occur. +# Because unpack200 is a deprecated tool, removing it to fix this +# issue is safe. +define HOST_OPENJDK_BIN_INSTALL_CMDS + mkdir -p $(HOST_OPENJDK_BIN_ROOT_DIR) + cp -dpfr $(@D)/* $(HOST_OPENJDK_BIN_ROOT_DIR) + $(RM) -f $(HOST_OPENJDK_BIN_ROOT_DIR)/bin/unpack200 +endef + +$(eval $(host-generic-package)) + +# variables used by other packages +JAVAC = $(HOST_OPENJDK_BIN_ROOT_DIR)/bin/javac diff --git a/package/openjdk/14.0.2+12/0001-fix-gcc-10-support.patch b/package/openjdk/14.0.2+12/0001-fix-gcc-10-support.patch new file mode 100644 index 00000000..5364c472 --- /dev/null +++ b/package/openjdk/14.0.2+12/0001-fix-gcc-10-support.patch @@ -0,0 +1,119 @@ +From 58911e9de888aece29f491995a8b8a31f7d6b424 Mon Sep 17 00:00:00 2001 +From: Patrick Zhang +Date: Wed, 05 Feb 2020 17:14:15 -0700 +Subject: [PATCH] fix gcc 10 support + +This patch fixes the "multiple definition" link errors with GCC10 due to +GCC10 setting -fno-common by default. + +This is a combination of the following upstream commits: + - https://hg.openjdk.java.net/jdk/jdk/rev/8e6fa89397ca + - https://hg.openjdk.java.net/jdk/jdk/rev/6925fca95959 + - https://hg.openjdk.java.net/jdk/jdk/rev/9e54ea7d9cd9 + +Signed-off-by: Patrick Zhang +Signed-off-by: Adam Duskett +--- + src/java.base/unix/native/libjava/childproc.c | 1 + + src/java.base/unix/native/libjava/childproc.h | 2 +- + .../share/native/libj2gss/NativeFunc.c | 3 +++ + .../share/native/libj2gss/NativeFunc.h | 2 +- + src/jdk.sctp/unix/native/libsctp/Sctp.h | 12 ++++++------ + src/jdk.sctp/unix/native/libsctp/SctpNet.c | 7 +++++++ + 6 files changed, 19 insertions(+), 8 deletions(-) + +diff --git a/src/java.base/unix/native/libjava/childproc.c b/src/java.base/unix/native/libjava/childproc.c +index 811aaeac5..16480bfbf 100644 +--- a/src/java.base/unix/native/libjava/childproc.c ++++ b/src/java.base/unix/native/libjava/childproc.c +@@ -34,6 +34,7 @@ + + #include "childproc.h" + ++const char * const *parentPathv; + + ssize_t + restartableWrite(int fd, const void *buf, size_t count) +diff --git a/src/java.base/unix/native/libjava/childproc.h b/src/java.base/unix/native/libjava/childproc.h +index 091150930..d57e44b6e 100644 +--- a/src/java.base/unix/native/libjava/childproc.h ++++ b/src/java.base/unix/native/libjava/childproc.h +@@ -126,7 +126,7 @@ typedef struct _SpawnInfo { + * The cached and split version of the JDK's effective PATH. + * (We don't support putenv("PATH=...") in native code) + */ +-const char * const *parentPathv; ++extern const char * const *parentPathv; + + ssize_t restartableWrite(int fd, const void *buf, size_t count); + int restartableDup2(int fd_from, int fd_to); +diff --git a/src/java.security.jgss/share/native/libj2gss/NativeFunc.c b/src/java.security.jgss/share/native/libj2gss/NativeFunc.c +index da7bc0445..5941f7b5a 100644 +--- a/src/java.security.jgss/share/native/libj2gss/NativeFunc.c ++++ b/src/java.security.jgss/share/native/libj2gss/NativeFunc.c +@@ -27,6 +27,9 @@ + #include + #include "NativeFunc.h" + ++/* global GSS function table */ ++GSS_FUNCTION_TABLE_PTR ftab; ++ + /* standard GSS method names (ordering is from mapfile) */ + static const char RELEASE_NAME[] = "gss_release_name"; + static const char IMPORT_NAME[] = "gss_import_name"; +diff --git a/src/java.security.jgss/share/native/libj2gss/NativeFunc.h b/src/java.security.jgss/share/native/libj2gss/NativeFunc.h +index 82914387c..e4a4981a3 100644 +--- a/src/java.security.jgss/share/native/libj2gss/NativeFunc.h ++++ b/src/java.security.jgss/share/native/libj2gss/NativeFunc.h +@@ -277,6 +277,6 @@ typedef struct GSS_FUNCTION_TABLE { + typedef GSS_FUNCTION_TABLE *GSS_FUNCTION_TABLE_PTR; + + /* global GSS function table */ +-GSS_FUNCTION_TABLE_PTR ftab; ++extern GSS_FUNCTION_TABLE_PTR ftab; + + #endif +diff --git a/src/jdk.sctp/unix/native/libsctp/Sctp.h b/src/jdk.sctp/unix/native/libsctp/Sctp.h +index cc1367f78..46b07db0a 100644 +--- a/src/jdk.sctp/unix/native/libsctp/Sctp.h ++++ b/src/jdk.sctp/unix/native/libsctp/Sctp.h +@@ -322,12 +322,12 @@ typedef int sctp_peeloff_func(int sock, sctp_assoc_t id); + + #endif /* __linux__ */ + +-sctp_getladdrs_func* nio_sctp_getladdrs; +-sctp_freeladdrs_func* nio_sctp_freeladdrs; +-sctp_getpaddrs_func* nio_sctp_getpaddrs; +-sctp_freepaddrs_func* nio_sctp_freepaddrs; +-sctp_bindx_func* nio_sctp_bindx; +-sctp_peeloff_func* nio_sctp_peeloff; ++extern sctp_getladdrs_func* nio_sctp_getladdrs; ++extern sctp_freeladdrs_func* nio_sctp_freeladdrs; ++extern sctp_getpaddrs_func* nio_sctp_getpaddrs; ++extern sctp_freepaddrs_func* nio_sctp_freepaddrs; ++extern sctp_bindx_func* nio_sctp_bindx; ++extern sctp_peeloff_func* nio_sctp_peeloff; + + jboolean loadSocketExtensionFuncs(JNIEnv* env); + +diff --git a/src/jdk.sctp/unix/native/libsctp/SctpNet.c b/src/jdk.sctp/unix/native/libsctp/SctpNet.c +index d40c15aa3..ab9b6e093 100644 +--- a/src/jdk.sctp/unix/native/libsctp/SctpNet.c ++++ b/src/jdk.sctp/unix/native/libsctp/SctpNet.c +@@ -43,6 +43,13 @@ static jmethodID isaCtrID = 0; + static const char* nativeSctpLib = "libsctp.so.1"; + static jboolean funcsLoaded = JNI_FALSE; + ++sctp_getladdrs_func* nio_sctp_getladdrs; ++sctp_freeladdrs_func* nio_sctp_freeladdrs; ++sctp_getpaddrs_func* nio_sctp_getpaddrs; ++sctp_freepaddrs_func* nio_sctp_freepaddrs; ++sctp_bindx_func* nio_sctp_bindx; ++sctp_peeloff_func* nio_sctp_peeloff; ++ + JNIEXPORT jint JNICALL DEF_JNI_OnLoad + (JavaVM *vm, void *reserved) { + return JNI_VERSION_1_2; +-- +2.26.2 + diff --git a/package/openjdk/Config.in b/package/openjdk/Config.in new file mode 100644 index 00000000..1b60d80d --- /dev/null +++ b/package/openjdk/Config.in @@ -0,0 +1,168 @@ +config BR2_PACKAGE_HOST_OPENJDK_BIN_ARCH_SUPPORTS + bool + default y if BR2_HOSTARCH = "x86_64" + +# Taken from make/autoconf/platform.m4 +config BR2_PACKAGE_OPENJDK_ARCH_SUPPORTS + bool + default y if BR2_aarch64 + default y if BR2_arm + default y if BR2_i386 || BR2_x86_64 + default y if BR2_m68k + default y if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le + default y if BR2_sh + +config BR2_PACKAGE_OPENJDK + bool "openjdk" + depends on BR2_PACKAGE_HOST_OPENJDK_BIN_ARCH_SUPPORTS + depends on BR2_PACKAGE_OPENJDK_ARCH_SUPPORTS + depends on !BR2_SOFT_FLOAT + depends on !BR2_STATIC_LIBS # glibc + depends on BR2_INSTALL_LIBSTDCPP # cups + depends on BR2_TOOLCHAIN_HAS_THREADS # alsa-lib, cups, libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + depends on BR2_TOOLCHAIN_USES_GLIBC + depends on BR2_USE_MMU # cups + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_ALSA_LIB + select BR2_PACKAGE_ALSA_LIB_MIXER + select BR2_PACKAGE_ALSA_LIB_PCM + select BR2_PACKAGE_ALSA_LIB_RAWMIDI + select BR2_PACKAGE_ALSA_LIB_SEQ + select BR2_PACKAGE_CUPS + select BR2_PACKAGE_FONTCONFIG + select BR2_PACKAGE_GIFLIB + select BR2_PACKAGE_JPEG + select BR2_PACKAGE_LCMS2 + select BR2_PACKAGE_LIBPNG + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_XLIB_LIBXRANDR + select BR2_PACKAGE_XLIB_LIBXRENDER + select BR2_PACKAGE_XLIB_LIBXT + select BR2_PACKAGE_XLIB_LIBXTST + select BR2_PACKAGE_ZLIB + help + OpenJDK is a free and open-source implementation of the + Java Platform. + + http://openjdk.java.net/ + +if BR2_PACKAGE_OPENJDK + +choice + prompt "openjdk version" + default BR2_OPENJDK_VERSION_LATEST + help + Select the version of OpenJDK you wish to use. + +config BR2_OPENJDK_VERSION_LTS + bool "LTS (OpenJDK 11)" + +config BR2_OPENJDK_VERSION_LATEST + bool "latest (OpenJDK 14)" + +endchoice + +config BR2_PACKAGE_OPENJDK_FULL_JDK + bool "Build the full JDK" + help + Install the full JDK instead of just the run time. + The full JDK includes several packages used for debugging and + development. Some useful tools included with the JDK are: + - javaws + Command line tool for launching Java Web Start and setting + various options. + + - jcmd: + JVM Diagnostic Commands tool: Sends diagnostic command + requests to a running Java Virtual Machine. + + - jinfo + Configuration Info for Java: Prints configuration + information for a given process or core file or a remote + debug server. + + - jmap + Memory Map for Java: Prints shared object memory maps or + heap memory details of a given process or core file or a + remote debug server. + + - jsadebugd + Serviceability Agent Debug Daemon for Java: Attaches to a + process or core file and acts as a debug server. + + - jstack + Stack Trace for Java - Prints a stack trace of threads for + a given process or core file or remote debug server. + + - jstat + JVM Statistics Monitoring Tool: Attaches to an + instrumented HotSpot Java virtual machine and collects and + logs performance statistics as specified by the command + line options. + + - jstatd + JVM jstat Daemon - Launches an RMI server application that + monitors for the creation and termination of instrumented + HotSpot Java virtual machines and provides an interface to + allow remote monitoring tools to attach to Java virtual + machines running on the local system. + + Note: + While the JDK also comes with several tools which can be used + for developing java applications on a target, Buildroot does + not support development on a target. Building the full JDK is + supported for debugging purposes only. + + Selecting this option increases the file system by + approximately 110M. + +choice + prompt "openjdk variant" + default BR2_PACKAGE_OPENJDK_JVM_VARIANT_SERVER if !BR2_powerpc + default BR2_PACKAGE_OPENJDK_JVM_VARIANT_ZERO if BR2_powerpc + +config BR2_PACKAGE_OPENJDK_JVM_VARIANT_CLIENT + bool "client" + depends on !BR2_powerpc + help + Quick loading, but slower run-time performance. + +config BR2_PACKAGE_OPENJDK_JVM_VARIANT_SERVER + bool "server" + depends on !BR2_powerpc + help + Slower loading, but faster run-time performance. + +config BR2_PACKAGE_OPENJDK_JVM_VARIANT_ZERO + bool "zero" + select BR2_PACKAGE_LIBFFI + help + A non-assembler variant with wide arch support, however + performance is less then client/server. + + http://openjdk.java.net/projects/zero + +endchoice +endif + +comment "openjdk needs X.Org" + depends on BR2_PACKAGE_OPENJDK_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_OPENJDK_BIN_ARCH_SUPPORTS + depends on BR2_USE_MMU + depends on !BR2_PACKAGE_XORG7 + +comment "openjdk needs glibc, and a toolchain w/ wchar, dynamic library, threads, C++, gcc >= 4.9" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_OPENJDK_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_OPENJDK_BIN_ARCH_SUPPORTS + depends on BR2_STATIC_LIBS || !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_USES_GLIBC || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + +comment "openjdk does not support soft float configurations" + depends on BR2_PACKAGE_OPENJDK_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_OPENJDK_BIN_ARCH_SUPPORTS + depends on BR2_USE_MMU + depends on BR2_SOFT_FLOAT diff --git a/package/openjdk/openjdk.hash b/package/openjdk/openjdk.hash new file mode 100644 index 00000000..05a0c12c --- /dev/null +++ b/package/openjdk/openjdk.hash @@ -0,0 +1,4 @@ +# Locally computed +sha256 dfb3607f1b675458f29a185a40f1dbbf896439cf33b3aa0f3d89df297e604935 jdk-14.0.2+12.tar.gz +sha256 c8b9d92028f6e46d94bde65ebce3b593fdcc0d1ca1fa00482f38815ed37c92a1 jdk-11.0.11+9.tar.gz +sha256 4b9abebc4338048a7c2dc184e9f800deb349366bdf28eb23c2677a77b4c87726 LICENSE diff --git a/package/openjdk/openjdk.mk b/package/openjdk/openjdk.mk new file mode 100644 index 00000000..6ed5085f --- /dev/null +++ b/package/openjdk/openjdk.mk @@ -0,0 +1,164 @@ +################################################################################ +# +# openjdk +# +################################################################################ + +ifeq ($(BR2_OPENJDK_VERSION_LATEST),y) +OPENJDK_VERSION_MAJOR = 14.0.2 +OPENJDK_VERSION_MINOR = 12 +OPENJDK_VERSION = $(OPENJDK_VERSION_MAJOR)+$(OPENJDK_VERSION_MINOR) +OPENJDK_SOURCE = jdk-$(OPENJDK_VERSION).tar.gz +OPENJDK_SITE = https://hg.openjdk.java.net/jdk-updates/jdk14u/archive +else +OPENJDK_VERSION_MAJOR = 11.0.11 +OPENJDK_VERSION_MINOR = 9 +OPENJDK_VERSION = $(OPENJDK_VERSION_MAJOR)+$(OPENJDK_VERSION_MINOR) +OPENJDK_SOURCE = jdk-$(OPENJDK_VERSION).tar.gz +OPENJDK_SITE = https://hg.openjdk.java.net/jdk-updates/jdk11u/archive +endif + +OPENJDK_LICENSE = GPL-2.0+ with exception +OPENJDK_LICENSE_FILES = LICENSE +OPENJDK_INSTALL_STAGING = YES + +# OpenJDK requires Alsa, cups, and X11 even for a headless build. +# host-zip is needed for the zip executable. +OPENJDK_DEPENDENCIES = \ + host-gawk \ + host-openjdk-bin \ + host-pkgconf \ + host-zip \ + host-zlib \ + alsa-lib \ + cups \ + fontconfig \ + giflib \ + jpeg \ + lcms2 \ + libpng \ + libusb \ + xlib_libXrandr \ + xlib_libXrender \ + xlib_libXt \ + xlib_libXtst \ + zlib + +# JVM variants +ifeq ($(BR2_PACKAGE_OPENJDK_JVM_VARIANT_CLIENT),y) +OPENJDK_JVM_VARIANT = client +endif +ifeq ($(BR2_PACKAGE_OPENJDK_JVM_VARIANT_SERVER),y) +OPENJDK_JVM_VARIANT = server +endif +ifeq ($(BR2_PACKAGE_OPENJDK_JVM_VARIANT_ZERO),y) +OPENJDK_JVM_VARIANT = zero +OPENJDK_DEPENDENCIES += libffi +endif + +ifeq ($(BR2_PACKAGE_OPENJDK_FULL_JDK),y) +OPENJDK_VARIANT = jdk +OPENJDK_MAKE_TARGET = jdk-image +else +OPENJDK_VARIANT = jre +OPENJDK_MAKE_TARGET = legacy-jre-image +endif + +# OpenJDK installs a file named 'modules' in jre/lib, which gets installed as +# /usr/lib/modules. However, with a merged /usr, this conflicts with the +# directory named 'modules' installed by the kernel. If OpenJDK gets built +# after the kernel, this manifests itself with: "cp: cannot overwrite +# directory '/usr/lib/modules with non-directory." +OPENJDK_INSTALL_BASE = /usr/lib/jvm + +# OpenJDK ignores some variables unless passed via the environment. +# These variables are PATH, LD, CC, CXX, and CPP. +# OpenJDK defaults ld to the ld binary but passes -Xlinker and -z as +# arguments during the linking process, which causes compilation failures. +# To fix this issue, LD is set to point to gcc. +OPENJDK_CONF_ENV = \ + PATH=$(BR_PATH) \ + CC=$(TARGET_CC) \ + CPP=$(TARGET_CPP) \ + CXX=$(TARGET_CXX) \ + LD=$(TARGET_CC) \ + BUILD_SYSROOT_CFLAGS="$(HOST_CFLAGS)" \ + BUILD_SYSROOT_LDFLAGS="$(HOST_LDFLAGS)" + +OPENJDK_CONF_OPTS = \ + --disable-full-docs \ + --disable-hotspot-gtest \ + --disable-manpages \ + --disable-warnings-as-errors \ + --enable-headless-only \ + --enable-openjdk-only \ + --enable-unlimited-crypto \ + --openjdk-target=$(GNU_TARGET_NAME) \ + --with-boot-jdk=$(HOST_OPENJDK_BIN_ROOT_DIR) \ + --with-stdc++lib=dynamic \ + --with-debug-level=release \ + --with-devkit=$(HOST_DIR) \ + --with-extra-cflags="$(TARGET_CFLAGS)" \ + --with-extra-cxxflags="$(TARGET_CXXFLAGS)" \ + --with-extra-ldflags="-Wl,-rpath,$(OPENJDK_INSTALL_BASE)/lib,-rpath,$(OPENJDK_INSTALL_BASE)/lib/$(OPENJDK_JVM_VARIANT)" \ + --with-giflib=system \ + --with-jobs=$(PARALLEL_JOBS) \ + --with-jvm-variants=$(OPENJDK_JVM_VARIANT) \ + --with-lcms=system \ + --with-libjpeg=system \ + --with-libpng=system \ + --with-zlib=system \ + --with-native-debug-symbols=none \ + --without-version-pre \ + --with-sysroot=$(STAGING_DIR) \ + --with-version-build="$(OPENJDK_VERSION_MAJOR)" \ + --with-version-string="$(OPENJDK_VERSION_MAJOR)" + +# If building for AArch64, use the provided CPU port. +ifeq ($(BR2_aarch64),y) +OPENJDK_CONF_OPTS += --with-abi-profile=aarch64 +endif + +ifeq ($(BR2_CCACHE),y) +OPENJDK_CONF_OPTS += \ + --enable-ccache \ + --with-ccache-dir=$(BR2_CCACHE_DIR) +endif + +# Autogen and configure are performed in a single step. +define OPENJDK_CONFIGURE_CMDS + chmod +x $(@D)/configure + cd $(@D); $(OPENJDK_CONF_ENV) ./configure autogen $(OPENJDK_CONF_OPTS) +endef + +# Make -jn is unsupported. Instead, set the "--with-jobs=" configure option, +# and use $(MAKE1). +define OPENJDK_BUILD_CMDS + $(TARGET_MAKE_ENV) $(OPENJDK_CONF_ENV) $(MAKE1) -C $(@D) $(OPENJDK_MAKE_TARGET) +endef + +# Calling make install always builds and installs the JDK instead of the JRE, +# which makes manual installation necessary. +define OPENJDK_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)$(OPENJDK_INSTALL_BASE) + cp -dpfr $(@D)/build/linux-*-release/images/$(OPENJDK_VARIANT)/* \ + $(TARGET_DIR)$(OPENJDK_INSTALL_BASE)/ + cd $(TARGET_DIR)/usr/bin && ln -snf ../..$(OPENJDK_INSTALL_BASE)/bin/* . +endef + +define OPENJDK_INSTALL_STAGING_CMDS + mkdir -p $(STAGING_DIR)/usr/include/jvm + cp -dpfr $(@D)/build/linux-*-release/jdk/include/* \ + $(STAGING_DIR)/usr/include/jvm +endef + +# Demos and includes are not needed on the target +ifeq ($(BR2_PACKAGE_OPENJDK_FULL_JDK),y) +define OPENJDK_REMOVE_UNEEDED_JDK_DIRECTORIES + $(RM) -r $(TARGET_DIR)$(OPENJDK_INSTALL_BASE)/include/ + $(RM) -r $(TARGET_DIR)$(OPENJDK_INSTALL_BASE)/demo/ +endef +OPENJDK_TARGET_FINALIZE_HOOKS += OPENJDK_REMOVE_UNEEDED_JDK_DIRECTORIES +endif + +$(eval $(generic-package)) diff --git a/package/openjpeg/0001-thirdparty-tiff-append-flags-found-by-pkg-config-if-.patch b/package/openjpeg/0001-thirdparty-tiff-append-flags-found-by-pkg-config-if-.patch new file mode 100644 index 00000000..bce790a4 --- /dev/null +++ b/package/openjpeg/0001-thirdparty-tiff-append-flags-found-by-pkg-config-if-.patch @@ -0,0 +1,72 @@ +From 38f50c7d9ad3ba06b64583045665203afb53cbd9 Mon Sep 17 00:00:00 2001 +From: Samuel Martin +Date: Sun, 6 Nov 2016 16:29:08 +0100 +Subject: [PATCH] thirdparty: tiff: append flags found by pkg-config if + available + +This change allows to get all required CFLAGS/LDFLAGS in case of static only +build. + +This build issue [1] was triggered by the Buildroot farms. + +[1] http://autobuild.buildroot.net/results/d0d/d0d22727311d6300e0e400728126170407bfd699/build-end.log + +Signed-off-by: Samuel Martin +--- + thirdparty/CMakeLists.txt | 23 +++++++++++++++++++++-- + 1 file changed, 21 insertions(+), 2 deletions(-) + +diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt +index cb24b43b58e2..cd6a5e1391b0 100644 +--- a/thirdparty/CMakeLists.txt ++++ b/thirdparty/CMakeLists.txt +@@ -1,5 +1,9 @@ + # 3rd party libs + ++if(NOT BUILD_THIRDPARTY) ++ include(FindPkgConfig) ++endif(NOT BUILD_THIRDPARTY) ++ + #------------ + # Try to find lib Z + if(BUILD_THIRDPARTY) +@@ -36,6 +40,9 @@ if(BUILD_THIRDPARTY) + else(BUILD_THIRDPARTY) + if(ZLIB_FOUND) + find_package(PNG) ++ # Static only build: ++ # it is not necessary to invoke pkg_check_module on libpng, because libpng ++ # only depends on zlib, which is already checked. + if(PNG_FOUND) + message(STATUS "Your system seems to have a PNG lib available, we will use it") + set(OPJ_HAVE_PNG_H 1 PARENT_SCOPE) +@@ -66,12 +73,24 @@ if(BUILD_THIRDPARTY) + set(OPJ_HAVE_LIBTIFF 1 PARENT_SCOPE) + else(BUILD_THIRDPARTY) + find_package(TIFF) ++ # Static only build: ++ # it is necessary to invoke pkg_check_module on libtiff since it may have ++ # several other dependencies not declared by its cmake module, but they are ++ # in the its pkgconfig module. ++ if(PKG_CONFIG_FOUND) ++ foreach(pc_tiff_module tiff tiff3 tiff4 tiff-3 tiff-4 libtiff libtiff3 libtiff4 libtiff-3 libtiff-4) ++ pkg_check_modules(PC_TIFF QUIET ${pc_tiff_module}) ++ if(PC_TIFF_FOUND) ++ break() ++ endif(PC_TIFF_FOUND) ++ endforeach() ++ endif(PKG_CONFIG_FOUND) + if(TIFF_FOUND) + message(STATUS "Your system seems to have a TIFF lib available, we will use it") + set(OPJ_HAVE_TIFF_H 1 PARENT_SCOPE) + set(OPJ_HAVE_LIBTIFF 1 PARENT_SCOPE) +- set(TIFF_LIBNAME ${TIFF_LIBRARIES} PARENT_SCOPE) +- set(TIFF_INCLUDE_DIRNAME ${TIFF_INCLUDE_DIR} PARENT_SCOPE) ++ set(TIFF_LIBNAME ${TIFF_LIBRARIES} ${PC_TIFF_STATIC_LIBRARIES} PARENT_SCOPE) ++ set(TIFF_INCLUDE_DIRNAME ${TIFF_INCLUDE_DIR} ${PC_TIFF_STATIC_INCLUDE_DIRS} PARENT_SCOPE) + else(TIFF_FOUND) # not found + set(OPJ_HAVE_TIFF_H 0 PARENT_SCOPE) + set(OPJ_HAVE_LIBTIFF 0 PARENT_SCOPE) +-- +2.10.2 + diff --git a/package/openjpeg/0002-thirdparty-lcms2-append-flags-found-by-pkg-config-if.patch b/package/openjpeg/0002-thirdparty-lcms2-append-flags-found-by-pkg-config-if.patch new file mode 100644 index 00000000..5697b82d --- /dev/null +++ b/package/openjpeg/0002-thirdparty-lcms2-append-flags-found-by-pkg-config-if.patch @@ -0,0 +1,49 @@ +From 226daa77ea5a35da306f9af2548f3e2c9e79f577 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Fri, 11 Nov 2016 23:35:13 +0100 +Subject: [PATCH] thirdparty: lcms2: append flags found by pkg-config if + available + +This change allows to get all required CFLAGS/LDFLAGS in case of static only +build. + +Fixes a buildroot build failure (see [1], [2] and [3]). + +[1] http://autobuild.buildroot.net/results/5ce/5cee20afd8bef5268832cddcb3a5270746be7a57 +[2] http://lists.busybox.net/pipermail/buildroot/2016-November/177187.html +[3] http://lists.busybox.net/pipermail/buildroot/2016-November/177188.html + +Signed-off-by: Peter Seiderer +--- + thirdparty/CMakeLists.txt | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt +index cd6a5e1391b0..a3a8494d89b1 100644 +--- a/thirdparty/CMakeLists.txt ++++ b/thirdparty/CMakeLists.txt +@@ -113,12 +113,19 @@ if( BUILD_THIRDPARTY) + set(OPJ_HAVE_LIBLCMS2 1 PARENT_SCOPE) + else(BUILD_THIRDPARTY) + find_package(LCMS2) ++ # Static only build: ++ # it is necessary to invoke pkg_check_module on lcms2 since it may have ++ # several other dependencies not declared by its cmake module, but they are ++ # in the its pkgconfig module. ++ if(PKG_CONFIG_FOUND) ++ pkg_check_modules(PC_LCMS2 QUIET lcms2) ++ endif(PKG_CONFIG_FOUND) + if(LCMS2_FOUND) + message(STATUS "Your system seems to have a LCMS2 lib available, we will use it") + set(OPJ_HAVE_LCMS2_H 1 PARENT_SCOPE) + set(OPJ_HAVE_LIBLCMS2 1 PARENT_SCOPE) +- set(LCMS_LIBNAME ${LCMS2_LIBRARIES} PARENT_SCOPE) +- set(LCMS_INCLUDE_DIRNAME ${LCMS2_INCLUDE_DIRS} PARENT_SCOPE) ++ set(LCMS_LIBNAME ${LCMS2_LIBRARIES} ${PC_LCMS2_STATIC_LIBRARIES} PARENT_SCOPE) ++ set(LCMS_INCLUDE_DIRNAME ${LCMS2_INCLUDE_DIRS} ${PC_LCMS2_STATIC_INCLUDE_DIRS} PARENT_SCOPE) + else(LCMS2_FOUND) # not found lcms2 + # try to find LCMS + find_package(LCMS) +-- +2.10.2 + diff --git a/package/openjpeg/0003-CMakeLists.txt-Don-t-require-a-C-compiler.patch b/package/openjpeg/0003-CMakeLists.txt-Don-t-require-a-C-compiler.patch new file mode 100644 index 00000000..13cceef1 --- /dev/null +++ b/package/openjpeg/0003-CMakeLists.txt-Don-t-require-a-C-compiler.patch @@ -0,0 +1,34 @@ +From 786ddcd1475adc6193c59d53e0d8ed2c502f2b00 Mon Sep 17 00:00:00 2001 +From: Peter Korsgaard +Date: Sat, 23 Sep 2017 18:49:31 +0200 +Subject: [PATCH] CMakeLists.txt: Don't require a C++ compiler + +By default, CMake assumes that the project is using both C and C++. By +explicitly passing 'C' as argument of the project() macro, we tell CMake +that only C is used, which prevents CMake from erroring out if a C++ +compiler doesn't exist. + +Submitted upstream: +https://github.com/uclouvain/openjpeg/pull/1027 + +Signed-off-by: Peter Korsgaard +--- + CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index ec42bc99..d80eb48b 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -24,7 +24,7 @@ endif() + #string(TOLOWER ${OPENJPEG_NAMESPACE} OPENJPEG_LIBRARY_NAME) + set(OPENJPEG_LIBRARY_NAME openjp2) + +-project(${OPENJPEG_NAMESPACE}) ++project(${OPENJPEG_NAMESPACE} C) + + # Do full dependency headers. + include_regular_expression("^.*$") +-- +2.11.0 + diff --git a/package/openjpeg/0004-Revert-Use-INC_DIR-for-OPENJPEG_INCLUDE_DIRS-fixes-u.patch b/package/openjpeg/0004-Revert-Use-INC_DIR-for-OPENJPEG_INCLUDE_DIRS-fixes-u.patch new file mode 100644 index 00000000..b85556a6 --- /dev/null +++ b/package/openjpeg/0004-Revert-Use-INC_DIR-for-OPENJPEG_INCLUDE_DIRS-fixes-u.patch @@ -0,0 +1,37 @@ +From 14f4c27e7c91f745a1dda9991b5deea3cbef2072 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Thu, 7 Jan 2021 14:09:50 +0100 +Subject: [PATCH] Revert "Use INC_DIR for OPENJPEG_INCLUDE_DIRS (fixes + uclouvain#1174)" + +This reverts commit 65586374d639cfc0104419992f9022174b412594 which +breaks cross-compilation of poppler under buildroot (because of +DESTDIR usage). + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/uclouvain/openjpeg/pull/1321] +--- + cmake/OpenJPEGConfig.cmake.in | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/cmake/OpenJPEGConfig.cmake.in b/cmake/OpenJPEGConfig.cmake.in +index 8a726697..2925108a 100644 +--- a/cmake/OpenJPEGConfig.cmake.in ++++ b/cmake/OpenJPEGConfig.cmake.in +@@ -27,8 +27,12 @@ if(EXISTS ${SELF_DIR}/OpenJPEGTargets.cmake) + # This is an install tree + include(${SELF_DIR}/OpenJPEGTargets.cmake) + ++ # We find a relative path from the PKG directory to header files. ++ set(PKG_DIR "@CMAKE_INSTALL_PREFIX@/@OPENJPEG_INSTALL_PACKAGE_DIR@") + set(INC_DIR "@CMAKE_INSTALL_PREFIX@/@OPENJPEG_INSTALL_INCLUDE_DIR@") +- get_filename_component(OPENJPEG_INCLUDE_DIRS "${INC_DIR}" ABSOLUTE) ++ file(RELATIVE_PATH PKG_TO_INC_RPATH "${PKG_DIR}" "${INC_DIR}") ++ ++ get_filename_component(OPENJPEG_INCLUDE_DIRS "${SELF_DIR}/${PKG_TO_INC_RPATH}" ABSOLUTE) + + else() + if(EXISTS ${SELF_DIR}/OpenJPEGExports.cmake) +-- +2.29.2 + diff --git a/package/openjpeg/Config.in b/package/openjpeg/Config.in new file mode 100644 index 00000000..738999fe --- /dev/null +++ b/package/openjpeg/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_OPENJPEG + bool "openjpeg" + help + The OpenJPEG library is an open-source JPEG 2000 codec + written in C. + + http://www.openjpeg.org diff --git a/package/openjpeg/openjpeg.hash b/package/openjpeg/openjpeg.hash new file mode 100644 index 00000000..87982452 --- /dev/null +++ b/package/openjpeg/openjpeg.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 8702ba68b442657f11aaeb2b338443ca8d5fb95b0d845757968a7be31ef7f16d openjpeg-2.4.0.tar.gz +sha256 a6af136f3e15038a666b61f376612a07d9a4e48cb7c01adbf3e33b3f14ab49b6 LICENSE diff --git a/package/openjpeg/openjpeg.mk b/package/openjpeg/openjpeg.mk new file mode 100644 index 00000000..7f2a2c43 --- /dev/null +++ b/package/openjpeg/openjpeg.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# openjpeg +# +################################################################################ + +OPENJPEG_VERSION = 2.4.0 +OPENJPEG_SITE = $(call github,uclouvain,openjpeg,v$(OPENJPEG_VERSION)) +OPENJPEG_LICENSE = BSD-2-Clause +OPENJPEG_LICENSE_FILES = LICENSE +OPENJPEG_CPE_ID_VENDOR = uclouvain +OPENJPEG_INSTALL_STAGING = YES + +OPENJPEG_DEPENDENCIES += $(if $(BR2_PACKAGE_ZLIB),zlib) +OPENJPEG_DEPENDENCIES += $(if $(BR2_PACKAGE_LIBPNG),libpng) +OPENJPEG_DEPENDENCIES += $(if $(BR2_PACKAGE_TIFF),tiff) +OPENJPEG_DEPENDENCIES += $(if $(BR2_PACKAGE_LCMS2),lcms2) + +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +OPENJPEG_CONF_OPTS += -DOPJ_USE_THREAD=ON +else +OPENJPEG_CONF_OPTS += -DOPJ_USE_THREAD=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/openlayers/Config.in b/package/openlayers/Config.in new file mode 100644 index 00000000..a7b7f334 --- /dev/null +++ b/package/openlayers/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_OPENLAYERS + bool "openlayers" + help + OpenLayers makes it easy to put a dynamic map in any web + page. It can display map tiles, vector data and markers + loaded from any source. OpenLayers has been developed to + further the use of geographic information of all kinds. It + is completely free, Open Source JavaScript, released under + the 2-clause BSD License (also known as the FreeBSD). + + https://openlayers.org diff --git a/package/openlayers/openlayers.hash b/package/openlayers/openlayers.hash new file mode 100644 index 00000000..23683bd6 --- /dev/null +++ b/package/openlayers/openlayers.hash @@ -0,0 +1,2 @@ +# Locally computed: +sha256 ab80014b15963404ec269a71f563fd3568581c55de160d5663600ea0787cf568 v6.5.0-dist.zip diff --git a/package/openlayers/openlayers.mk b/package/openlayers/openlayers.mk new file mode 100644 index 00000000..db464ef8 --- /dev/null +++ b/package/openlayers/openlayers.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# openlayers +# +################################################################################ + +OPENLAYERS_VERSION = 6.5.0 +OPENLAYERS_SOURCE = v$(OPENLAYERS_VERSION)-dist.zip +OPENLAYERS_SITE = https://github.com/openlayers/openlayers/releases/download/v$(OPENLAYERS_VERSION) +OPENLAYERS_LICENSE = BSD-2-Clause +# There's no separate license file in the archive, only minified files. + +define OPENLAYERS_EXTRACT_CMDS + unzip $(OPENLAYERS_DL_DIR)/$(OPENLAYERS_SOURCE) -d $(@D) + mv $(@D)/v$(OPENLAYERS_VERSION)-dist/* $(@D) + rmdir $(@D)/v$(OPENLAYERS_VERSION)-dist/ +endef + +define OPENLAYERS_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0644 $(@D)/ol.css $(TARGET_DIR)/var/www/ol.css + $(INSTALL) -D -m 0644 $(@D)/ol.js $(TARGET_DIR)/var/www/ol.js +endef + +$(eval $(generic-package)) diff --git a/package/openldap/0001-fix_cross_strip.patch b/package/openldap/0001-fix_cross_strip.patch new file mode 100644 index 00000000..d9d6f9d5 --- /dev/null +++ b/package/openldap/0001-fix_cross_strip.patch @@ -0,0 +1,74 @@ +Fix stripping when cross-compiling + +Probably-Signed-off-by: Dave Bender +[yann.morin.1998@free.fr: patch was made by Dave, but he + forgot his SoB line, so I added it] +Signed-off-by: "Yann E. MORIN" + +diff -rupN openldap-2.4.40/build/shtool openldap-2.4.40-br/build/shtool +--- openldap-2.4.40/build/shtool 2014-09-18 21:48:49.000000000 -0400 ++++ openldap-2.4.40-br/build/shtool 2015-01-21 13:21:35.689829372 -0500 +@@ -981,7 +981,7 @@ install ) + if [ ".$opt_t" = .yes ]; then + echo "strip $dsttmp" 1>&2 + fi +- strip $dsttmp || shtool_exit $? ++ $STRIP $dsttmp || shtool_exit $? + fi + if [ ".$opt_o" != . ]; then + if [ ".$opt_t" = .yes ]; then +diff -rupN openldap-2.4.40/build/top.mk openldap-2.4.40-br/build/top.mk +--- openldap-2.4.40/build/top.mk 2014-09-18 21:48:49.000000000 -0400 ++++ openldap-2.4.40-br/build/top.mk 2015-01-21 13:23:41.027810097 -0500 +@@ -59,7 +59,7 @@ INSTALL_PROGRAM = $(INSTALL) + INSTALL_DATA = $(INSTALL) -m 644 + INSTALL_SCRIPT = $(INSTALL) + +-STRIP = -s ++STRIP_OPTS = -s + + LINT = lint + 5LINT = 5lint +diff -rupN openldap-2.4.40/clients/tools/Makefile.in openldap-2.4.40-br/clients/tools/Makefile.in +--- openldap-2.4.40/clients/tools/Makefile.in 2014-09-18 21:48:49.000000000 -0400 ++++ openldap-2.4.40-br/clients/tools/Makefile.in 2015-01-21 13:23:35.827727946 -0500 +@@ -120,7 +120,7 @@ install-local: FORCE + -$(MKDIR) $(DESTDIR)$(bindir) + @( \ + for prg in $(PROGRAMS); do \ +- $(LTINSTALL) $(INSTALLFLAGS) $(STRIP) -m 755 $$prg$(EXEEXT) \ ++ $(LTINSTALL) $(INSTALLFLAGS) $(STRIP_OPTS) -m 755 $$prg$(EXEEXT) \ + $(DESTDIR)$(bindir); \ + done \ + ) +diff -rupN openldap-2.4.40/configure.in openldap-2.4.40-br/configure.in +--- openldap-2.4.40/configure.in 2014-09-18 21:48:49.000000000 -0400 ++++ openldap-2.4.40-br/configure.in 2015-01-16 15:50:48.874816786 -0500 +@@ -668,6 +668,15 @@ if test -z "${AR}"; then + fi + fi + ++if test -z "${STRIP}"; then ++ AC_CHECK_PROGS(STRIP,strip,missing) ++ ++ if test "${STRIP}" = "missing" ; then ++ AC_MSG_ERROR([Unable to locate strip(1) or suitable replacement. Check PATH or set STRIP.]) ++ fi ++fi ++ ++ + AC_LIBTOOL_WIN32_DLL + AC_LIBTOOL_DLOPEN + AC_PROG_LIBTOOL +diff -rupN openldap-2.4.40/servers/slapd/Makefile.in openldap-2.4.40-br/servers/slapd/Makefile.in +--- openldap-2.4.40/servers/slapd/Makefile.in 2015-01-16 15:04:52.507473256 -0500 ++++ openldap-2.4.40-br/servers/slapd/Makefile.in 2015-01-16 15:05:02.299627229 -0500 +@@ -378,7 +378,7 @@ install-local-srv: install-slapd install + install-slapd: FORCE + -$(MKDIR) $(DESTDIR)$(libexecdir) + -$(MKDIR) $(DESTDIR)$(localstatedir)/run +- $(LTINSTALL) $(INSTALLFLAGS) $(STRIP) -m 755 \ ++ $(LTINSTALL) $(INSTALLFLAGS) $(STRIP_OPTS) -m 755 \ + slapd$(EXEEXT) $(DESTDIR)$(libexecdir) + @for i in $(SUBDIRS); do \ + if test -d $$i && test -f $$i/Makefile ; then \ diff --git a/package/openldap/0002-fix-bignum.patch b/package/openldap/0002-fix-bignum.patch new file mode 100644 index 00000000..159ea8e2 --- /dev/null +++ b/package/openldap/0002-fix-bignum.patch @@ -0,0 +1,38 @@ +configure: correctly detect bignum + +Building with bignum is currently not possible, since we're checking +ol_with_tls against a value it is never assigned in any case. + +Since bignum is from openssl, and openssl is the preferred TLS +implementation, if the bignum headers are found, it means we do have +TLS and it is opensl. + +So, keep the check for the bignum header, but check against ol_link_tls +which means that openssl is enabled when we find the bignum headers. + +Signed-off-by: "Yann E. MORIN" + +diff -durN openldap-2.4.40.orig/configure openldap-2.4.40/configure +--- openldap-2.4.40.orig/configure 2014-09-19 03:48:49.000000000 +0200 ++++ openldap-2.4.40/configure 2015-01-25 18:44:54.216879362 +0100 +@@ -23431,7 +23431,7 @@ + + if test "$ac_cv_header_openssl_bn_h" = "yes" && + test "$ac_cv_header_openssl_crypto_h" = "yes" && +- test "$ol_with_tls" = "found" ; then ++ test "$ol_link_tls" = "yes" ; then + ol_with_mp=bignum + + $as_echo "#define USE_MP_BIGNUM 1" >>confdefs.h +diff -durN openldap-2.4.40.orig/configure.in openldap-2.4.40/configure.in +--- openldap-2.4.40.orig/configure.in 2014-09-19 03:48:49.000000000 +0200 ++++ openldap-2.4.40/configure.in 2015-01-25 18:44:37.628676446 +0100 +@@ -2383,7 +2383,7 @@ + AC_CHECK_HEADERS(openssl/crypto.h) + if test "$ac_cv_header_openssl_bn_h" = "yes" && + test "$ac_cv_header_openssl_crypto_h" = "yes" && +- test "$ol_with_tls" = "found" ; then ++ test "$ol_link_tls" = "yes" ; then + ol_with_mp=bignum + AC_DEFINE(USE_MP_BIGNUM,1,[define to use OpenSSL BIGNUM for MP]) + elif test $ol_with_mp = bignum ; then diff --git a/package/openldap/0003-disable-docs.patch b/package/openldap/0003-disable-docs.patch new file mode 100644 index 00000000..7ce61e65 --- /dev/null +++ b/package/openldap/0003-disable-docs.patch @@ -0,0 +1,23 @@ +doc: do not build + +Building the documentation fails on some autobuilders, +so disable it as we're not interested in it. + +Fixes: + http://autobuild.buildroot.org/results/1dc/1dc17a54e57130bffd19d360c9a7faae440b8916/ + http://autobuild.buildroot.org/results/407/40797597024cbb9054fdda8bdf4d011bba966b06/ + +Signed-off-by: "Yann E. MORIN" + +diff -durN openldap-2.4.40.orig/Makefile.in openldap-2.4.40/Makefile.in +--- openldap-2.4.40.orig/Makefile.in 2014-09-19 03:48:49.000000000 +0200 ++++ openldap-2.4.40/Makefile.in 2015-01-31 23:12:54.347678913 +0100 +@@ -13,7 +13,7 @@ + ## top-level directory of the distribution or, alternatively, at + ## . + +-SUBDIRS= include libraries clients servers tests doc ++SUBDIRS= include libraries clients servers tests + CLEANDIRS= + INSTALLDIRS= + diff --git a/package/openldap/0004-revert-ITS-3977-fix-libtool-static-behavior-to-match.patch b/package/openldap/0004-revert-ITS-3977-fix-libtool-static-behavior-to-match.patch new file mode 100644 index 00000000..3a901c91 --- /dev/null +++ b/package/openldap/0004-revert-ITS-3977-fix-libtool-static-behavior-to-match.patch @@ -0,0 +1,56 @@ +From 88a0442a0f01076914af80db40571fd52914ffa3 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Thu, 28 Mar 2019 23:52:38 +0100 +Subject: [PATCH] revert ITS#3977, fix libtool -static behavior to match docs + +Revert +https://github.com/openldap/openldap/commit/7b6a088a2590fdad10286d10050b769e48554e13 +as this patch does not work with our buildroot patches + +Fixes: + - http://autobuild.buildroot.org/results/ab4f85fd21cacfaef6b0b43a38da6a4a1d32ecb6 + +Signed-off-by: Fabrice Fontaine +[Upstream status: Not upstreamable] +--- + build/ltmain.sh | 9 ++------- + 1 file changed, 2 insertions(+), 7 deletions(-) + +diff --git a/build/ltmain.sh b/build/ltmain.sh +index 1d079b91e..996dc7dad 100755 +--- a/build/ltmain.sh ++++ b/build/ltmain.sh +@@ -1190,15 +1190,14 @@ EOF + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi +- prefer_static_libs=yes + else + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi +- prefer_static_libs=built + fi + build_libtool_libs=no + build_old_libs=yes ++ prefer_static_libs=yes + break + ;; + esac +@@ -2602,12 +2601,8 @@ EOF + fi + + link_static=no # Whether the deplib will be linked statically +- use_static_libs=$prefer_static_libs +- if test "$use_static_libs" = built && test "$installed" = yes ; then +- use_static_libs=no +- fi + if test -n "$library_names" && +- { test "$use_static_libs" = no || test -z "$old_library"; }; then ++ { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes +-- +2.14.1 + diff --git a/package/openldap/Config.in b/package/openldap/Config.in new file mode 100644 index 00000000..bd39d0d0 --- /dev/null +++ b/package/openldap/Config.in @@ -0,0 +1,27 @@ +config BR2_PACKAGE_OPENLDAP + bool "openldap" + depends on BR2_USE_WCHAR + depends on BR2_USE_MMU # needs fork() + help + OpenLDAP Software is an open source implementation of the + Lightweight Directory Access Protocol. + + This only installs client-side support. + + http://www.openldap.org/ + +if BR2_PACKAGE_OPENLDAP + +config BR2_PACKAGE_OPENLDAP_CLIENTS + bool "openldap client binaries" + default y + help + Install the OpenLDAP client tools (ldapadd, ldapcompare, + ldapdelete, ldapexop, ldapmodify, ldapmodrdn, ldappasswd, + ldapsearch, ldapurl, ldapwhoami) + +endif + +comment "openldap needs a toolchain w/ wchar" + depends on BR2_USE_MMU # needs fork() + depends on !BR2_USE_WCHAR diff --git a/package/openldap/openldap.hash b/package/openldap/openldap.hash new file mode 100644 index 00000000..8ce50d61 --- /dev/null +++ b/package/openldap/openldap.hash @@ -0,0 +1,7 @@ +# From https://www.openldap.org/software/download/OpenLDAP/openldap-release/openldap-2.4.58.md5 +md5 c203d735ba69976e5b28dc39006f29b5 openldap-2.4.58.tgz +# From https://www.openldap.org/software/download/OpenLDAP/openldap-release/openldap-2.4.58.sha1 +sha1 875416827be3ad63f20004510a354db0aaceb2ed openldap-2.4.58.tgz +# Locally computed +sha256 57b59254be15d0bf6a9ab3d514c1c05777b02123291533134a87c94468f8f47b openldap-2.4.58.tgz +sha256 310fe25c858a9515fc8c8d7d1f24a67c9496f84a91e0a0e41ea9975b1371e569 LICENSE diff --git a/package/openldap/openldap.mk b/package/openldap/openldap.mk new file mode 100644 index 00000000..3b35b4da --- /dev/null +++ b/package/openldap/openldap.mk @@ -0,0 +1,73 @@ +################################################################################ +# +# openldap +# +################################################################################ + +OPENLDAP_VERSION = 2.4.58 +OPENLDAP_SOURCE = openldap-$(OPENLDAP_VERSION).tgz +OPENLDAP_SITE = https://www.openldap.org/software/download/OpenLDAP/openldap-release +OPENLDAP_LICENSE = OpenLDAP Public License +OPENLDAP_LICENSE_FILES = LICENSE +OPENLDAP_CPE_ID_VENDOR = openldap +OPENLDAP_INSTALL_STAGING = YES +OPENLDAP_DEPENDENCIES = host-pkgconf + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +OPENLDAP_TLS = openssl +OPENLDAP_DEPENDENCIES += openssl +else ifeq ($(BR2_PACKAGE_GNUTLS),y) +OPENLDAP_TLS = gnutls +OPENLDAP_DEPENDENCIES += gnutls +else ifeq ($(BR2_PACKAGE_LIBNSS),y) +OPENLDAP_TLS = moznss +OPENLDAP_DEPENDENCIES += libnss +OPENLDAP_CPPFLAGS = \ + -I$(STAGING_DIR)/usr/include/nss \ + -I$(STAGING_DIR)/usr/include/nspr +else +OPENLDAP_TLS = no +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +OPENLDAP_MP = bignum +OPENLDAP_DEPENDENCIES += openssl +OPENLDAP_CONF_ENV = LIBS="`$(PKG_CONFIG_HOST_BINARY) --libs libssl libcrypto`" +else ifeq ($(BR2_PACKAGE_GMP),y) +OPENLDAP_MP = gmp +OPENLDAP_DEPENDENCIES += gmp +else +OPENLDAP_MP = longlong +endif + +OPENLDAP_CONF_ENV += ac_cv_func_memcmp_working=yes + +OPENLDAP_CONF_OPTS += \ + --enable-syslog \ + --disable-proctitle \ + --disable-slapd \ + --with-yielding-select \ + --sysconfdir=/etc \ + --enable-dynamic=$(if $(BR2_STATIC_LIBS),no,yes) \ + --with-tls=$(OPENLDAP_TLS) \ + --with-mp=$(OPENLDAP_MP) \ + CPPFLAGS="$(TARGET_CPPFLAGS) $(OPENLDAP_CPPFLAGS)" + +# Somehow, ${STRIP} does not percolates through to the shtool script +# used to install the executables; thus, that script tries to run the +# executable it is supposed to install, resulting in an error. +OPENLDAP_MAKE_ENV = STRIP="$(TARGET_STRIP)" + +ifeq ($(BR2_PACKAGE_OPENLDAP_CLIENTS),) +OPENLDAP_CLIENTS = \ + ldapurl ldapexop ldapcompare ldapwhoami \ + ldappasswd ldapmodrdn ldapdelete ldapmodify \ + ldapsearch +define OPENLDAP_REMOVE_CLIENTS + $(RM) -f $(foreach p,$(OPENLDAP_CLIENTS),$(TARGET_DIR)/usr/bin/$(p)) + $(RM) -rf $(TARGET_DIR)/etc/openldap +endef +OPENLDAP_POST_INSTALL_TARGET_HOOKS += OPENLDAP_REMOVE_CLIENTS +endif + +$(eval $(autotools-package)) diff --git a/package/openmpi/Config.in b/package/openmpi/Config.in new file mode 100644 index 00000000..4413c55f --- /dev/null +++ b/package/openmpi/Config.in @@ -0,0 +1,20 @@ +comment "openmpi needs a toolchain w/ dynamic library, NPTL, wchar, C++" + depends on BR2_USE_MMU + depends on !BR2_sparc + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS_NPTL \ + || !BR2_USE_WCHAR || !BR2_INSTALL_LIBSTDCPP + +config BR2_PACKAGE_OPENMPI + bool "openmpi" + depends on BR2_USE_MMU # fork() + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS # dlfcn.h + # from the configure script: "Sparc v8 target is not supported + # in this release of Open MPI" + depends on !BR2_sparc + help + A High Performance Message Passing Library. + + https://www.open-mpi.org/ diff --git a/package/openmpi/openmpi-mips32-fortran.cache b/package/openmpi/openmpi-mips32-fortran.cache new file mode 100644 index 00000000..473f73a2 --- /dev/null +++ b/package/openmpi/openmpi-mips32-fortran.cache @@ -0,0 +1,51 @@ +ompi_cv_fortran_sizeof_CHARACTER=1 +ompi_cv_fortran_sizeof_LOGICAL=4 +ompi_cv_fortran_sizeof_LOGICALp1=1 +ompi_cv_fortran_sizeof_LOGICALp2=2 +ompi_cv_fortran_sizeof_LOGICALp4=4 +ompi_cv_fortran_sizeof_LOGICALp8=8 +ompi_cv_fortran_sizeof_INTEGER=4 +ompi_cv_fortran_sizeof_INTEGERp1=1 +ompi_cv_fortran_sizeof_INTEGERp2=2 +ompi_cv_fortran_sizeof_INTEGERp4=4 +ompi_cv_fortran_sizeof_INTEGERp8=8 +ompi_cv_fortran_sizeof_REAL=4 +ompi_cv_fortran_sizeof_REALp4=4 +ompi_cv_fortran_sizeof_REALp8=8 +ompi_cv_fortran_sizeof_DOUBLE_PRECISION=8 +ompi_cv_fortran_sizeof_COMPLEX=8 +ompi_cv_fortran_sizeof_COMPLEXp8=8 +ompi_cv_fortran_sizeof_COMPLEXp16=16 +ompi_cv_fortran_sizeof_DOUBLE_COMPLEX=16 +ompi_cv_fortran_alignment_CHARACTER=1 +ompi_cv_fortran_alignment_LOGICAL=4 +ompi_cv_fortran_alignment_LOGICALp1=1 +ompi_cv_fortran_alignment_LOGICALp2=2 +ompi_cv_fortran_alignment_LOGICALp4=4 +ompi_cv_fortran_alignment_LOGICALp8=8 +ompi_cv_fortran_alignment_INTEGER=4 +ompi_cv_fortran_alignment_INTEGERp1=1 +ompi_cv_fortran_alignment_INTEGERp2=2 +ompi_cv_fortran_alignment_INTEGERp4=4 +ompi_cv_fortran_alignment_INTEGERp8=8 +ompi_cv_fortran_alignment_REAL=4 +ompi_cv_fortran_alignment_REALp4=4 +ompi_cv_fortran_alignment_REALp8=8 +ompi_cv_fortran_alignment_DOUBLE_PRECISION=8 +ompi_cv_fortran_alignment_COMPLEX=4 +ompi_cv_fortran_alignment_COMPLEXp8=4 +ompi_cv_fortran_alignment_COMPLEXp16=8 +ompi_cv_fortran_alignment_DOUBLE_COMPLEX=8 +ompi_cv_fortran_kind_value_C_SIGNED_CHAR=1 +ompi_cv_fortran_kind_value_C_SHORT=2 +ompi_cv_fortran_kind_value_C_INT=4 +ompi_cv_fortran_kind_value_C_INT16_T=2 +ompi_cv_fortran_kind_value_C_INT32_T=4 +ompi_cv_fortran_kind_value_C_INT64_T=8 +ompi_cv_fortran_kind_value_C_LONG_LONG=8 +ompi_cv_fortran_kind_value_C_FLOAT=4 +ompi_cv_fortran_kind_value_C_FLOAT_COMPLEX=4 +ompi_cv_fortran_kind_value_C_DOUBLE=8 +ompi_cv_fortran_kind_value_C_DOUBLE_COMPLEX=8 +ompi_cv_fortran_true_value=1 +ompi_cv_fortran_sizeof_type_test_mpi_handle_=4 diff --git a/package/openmpi/openmpi-mips64-fortran.cache b/package/openmpi/openmpi-mips64-fortran.cache new file mode 100644 index 00000000..7f020997 --- /dev/null +++ b/package/openmpi/openmpi-mips64-fortran.cache @@ -0,0 +1,60 @@ +ompi_cv_fortran_sizeof_CHARACTER=1 +ompi_cv_fortran_sizeof_LOGICAL=4 +ompi_cv_fortran_sizeof_LOGICALp1=1 +ompi_cv_fortran_sizeof_LOGICALp2=2 +ompi_cv_fortran_sizeof_LOGICALp4=4 +ompi_cv_fortran_sizeof_LOGICALp8=8 +ompi_cv_fortran_sizeof_INTEGER=4 +ompi_cv_fortran_sizeof_INTEGERp1=1 +ompi_cv_fortran_sizeof_INTEGERp2=2 +ompi_cv_fortran_sizeof_INTEGERp4=4 +ompi_cv_fortran_sizeof_INTEGERp8=8 +ompi_cv_fortran_sizeof_INTEGERp16=16 +ompi_cv_fortran_sizeof_REAL=4 +ompi_cv_fortran_sizeof_REALp4=4 +ompi_cv_fortran_sizeof_REALp8=8 +ompi_cv_fortran_sizeof_REALp16=16 +ompi_cv_fortran_sizeof_DOUBLE_PRECISION=8 +ompi_cv_fortran_sizeof_COMPLEX=8 +ompi_cv_fortran_sizeof_COMPLEXp8=8 +ompi_cv_fortran_sizeof_COMPLEXp16=16 +ompi_cv_fortran_sizeof_COMPLEXp32=32 +ompi_cv_fortran_sizeof_DOUBLE_COMPLEX=16 +ompi_cv_fortran_alignment_CHARACTER=1 +ompi_cv_fortran_alignment_LOGICAL=4 +ompi_cv_fortran_alignment_LOGICALp1=1 +ompi_cv_fortran_alignment_LOGICALp2=2 +ompi_cv_fortran_alignment_LOGICALp4=4 +ompi_cv_fortran_alignment_LOGICALp8=8 +ompi_cv_fortran_alignment_INTEGER=4 +ompi_cv_fortran_alignment_INTEGERp1=1 +ompi_cv_fortran_alignment_INTEGERp2=2 +ompi_cv_fortran_alignment_INTEGERp4=4 +ompi_cv_fortran_alignment_INTEGERp8=8 +ompi_cv_fortran_alignment_REAL=4 +ompi_cv_fortran_alignment_REALp4=4 +ompi_cv_fortran_alignment_REALp8=8 +ompi_cv_fortran_alignment_REALp16=16 +ompi_cv_fortran_alignment_DOUBLE_PRECISION=8 +ompi_cv_fortran_alignment_COMPLEX=4 +ompi_cv_fortran_alignment_COMPLEXp8=4 +ompi_cv_fortran_alignment_COMPLEXp16=8 +ompi_cv_fortran_alignment_COMPLEXp32=16 +ompi_cv_fortran_alignment_DOUBLE_COMPLEX=8 +ompi_cv_fortran_kind_value_C_SIGNED_CHAR=1 +ompi_cv_fortran_kind_value_C_SHORT=2 +ompi_cv_fortran_kind_value_C_INT=4 +ompi_cv_fortran_kind_value_C_INT16_T=2 +ompi_cv_fortran_kind_value_C_INT32_T=4 +ompi_cv_fortran_kind_value_C_INT64_T=8 +ompi_cv_fortran_kind_value_C_LONG_LONG=8 +ompi_cv_fortran_kind_value_C_LONG_DOUBLE=16 +ompi_cv_fortran_kind_value_C_LONG_DOUBLE_COMPLEX=16 +ompi_cv_fortran_kind_value_C_FLOAT=4 +ompi_cv_fortran_kind_value_C_FLOAT_COMPLEX=4 +ompi_cv_fortran_kind_value_C_DOUBLE=8 +ompi_cv_fortran_kind_value_C_DOUBLE_COMPLEX=8 +ompi_cv_fortran_kind_value_0=0 +ompi_cv_real16_c_equiv=yes +ompi_cv_fortran_true_value=1 +ompi_cv_fortran_sizeof_type_test_mpi_handle_=4 diff --git a/package/openmpi/openmpi.hash b/package/openmpi/openmpi.hash new file mode 100644 index 00000000..4e76951c --- /dev/null +++ b/package/openmpi/openmpi.hash @@ -0,0 +1,6 @@ +# From: https://www.open-mpi.org/software/ompi/v4.0/ +md5 e3da67df1e968c8798827e0e5fe9a510 openmpi-4.0.0.tar.bz2 +sha1 fee1d0287abfb150bae16957de342752c9bdd4e8 openmpi-4.0.0.tar.bz2 +# Locally computed +sha256 2f0b8a36cfeb7354b45dda3c5425ef8393c9b04115570b615213faaa3f97366b openmpi-4.0.0.tar.bz2 +sha256 8298a80ed5f09cfd007bae1c0e7d67d1c2810c6389876778dad070c31a691dac LICENSE diff --git a/package/openmpi/openmpi.mk b/package/openmpi/openmpi.mk new file mode 100644 index 00000000..8bdc3fa1 --- /dev/null +++ b/package/openmpi/openmpi.mk @@ -0,0 +1,48 @@ +################################################################################ +# +# openmpi +# +################################################################################ + +OPENMPI_VERSION_MAJOR = 4.0 +OPENMPI_VERSION = $(OPENMPI_VERSION_MAJOR).0 +OPENMPI_SITE = https://www.open-mpi.org/software/ompi/v$(OPENMPI_VERSION_MAJOR)/downloads +OPENMPI_SOURCE = openmpi-$(OPENMPI_VERSION).tar.bz2 +OPENMPI_LICENSE = BSD-3-Clause +OPENMPI_LICENSE_FILES = LICENSE +OPENMPI_INSTALL_STAGING = YES + +# Enabling Fortran support requires pre-seeding the configure script +# with various values that cannot be guessed, so we provide cache +# files for various architectures. + +ifeq ($(BR2_TOOLCHAIN_HAS_FORTRAN),y) +ifeq ($(BR2_mips)$(BR2_mipsel),y) +OPENMPI_FORTRAN_CONF_CACHE = package/openmpi/openmpi-mips32-fortran.cache +else ifeq ($(BR2_mips64)$(BR2_mips64el),y) +OPENMPI_FORTRAN_CONF_CACHE = package/openmpi/openmpi-mips64-fortran.cache +endif +endif + +ifneq ($(OPENMPI_FORTRAN_CONF_CACHE),) +define OPENMPI_COPY_FORTRAN_CACHE + cp $(OPENMPI_FORTRAN_CONF_CACHE) $(@D)/openmpi-config.cache +endef + +OPENMPI_POST_PATCH_HOOKS += OPENMPI_COPY_FORTRAN_CACHE +OPENMPI_CONF_OPTS += \ + --enable-mpi-fortran=yes \ + --cache-file=$(@D)/openmpi-config.cache +else +OPENMPI_CONF_OPTS += --enable-mpi-fortran=no +endif + +OPENMPI_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_68485),y) +OPENMPI_CFLAGS += -O0 +endif + +OPENMPI_CONF_ENV = CFLAGS="$(OPENMPI_CFLAGS)" + +$(eval $(autotools-package)) diff --git a/package/openntpd/0001-fix-musl.patch b/package/openntpd/0001-fix-musl.patch new file mode 100644 index 00000000..e369d5a8 --- /dev/null +++ b/package/openntpd/0001-fix-musl.patch @@ -0,0 +1,38 @@ +From: Baruch Siach +Date: Fri, 29 Sep 2017 10:06:52 +0300 +Subject: [PATCH] Fix build with musl and older Linux kernel + +The musl libc carries its own copy of Linux system calls. When building +with Linux headers older than v3.17, musl provides SYS_getrandom +definition, but not GRND_NONBLOCK. This causes build failure for +libressl and openntpd: + +getentropy_linux.c: In function 'getentropy_getrandom': +getentropy_linux.c:205:42: error: 'GRND_NONBLOCK' undeclared (first use in this function) + ret = syscall(SYS_getrandom, buf, len, GRND_NONBLOCK); + ^~~~~~~~~~~~~ + +Define GRND_NONBLOCK locally when its definition is missing to fix the +build. There should be no run-time effect. Older kernels return ENOSYS +for unsupported syscall(). + +[ from upstream pull request with file location changed ] +Signed-off-by: Baruch Siach +--- +Upstream status: https://github.com/libressl-portable/openbsd/pull/82 + +diff -Nuar openntpd-6.2p2-orig/compat/getentropy_linux.c openntpd-6.2p2/compat/getentropy_linux.c +--- openntpd-6.2p2-orig/compat/getentropy_linux.c 2017-09-07 22:12:02.000000000 +0300 ++++ openntpd-6.2p2/compat/getentropy_linux.c 2017-09-29 11:54:54.856245770 +0300 +@@ -194,6 +194,11 @@ + } + + #ifdef SYS_getrandom ++ ++#ifndef GRND_NONBLOCK ++#define GRND_NONBLOCK 0x0001 ++#endif ++ + static int + getentropy_getrandom(void *buf, size_t len) + { diff --git a/package/openntpd/0002-Provide-fallback-definition-for-__packed.patch b/package/openntpd/0002-Provide-fallback-definition-for-__packed.patch new file mode 100644 index 00000000..4d8f636b --- /dev/null +++ b/package/openntpd/0002-Provide-fallback-definition-for-__packed.patch @@ -0,0 +1,43 @@ +From bc2cd89715155fe1fead19338dac5f4059917dfe Mon Sep 17 00:00:00 2001 +From: Michael Forney +Date: Thu, 20 Jun 2019 13:52:22 -0700 +Subject: [PATCH] Provide fallback definition for __packed + +Otherwise, systems that don't support it will treat it as a name for a +global `struct ntp_msg` variable. + +[Retrieved from: +https://github.com/openntpd-portable/openntpd-portable/commit/bc2cd89715155fe1fead19338dac5f4059917dfe] +Signed-off-by: Fabrice Fontaine +--- + include/sys/types.h | 4 ++++ + m4/check-os-options.m4 | 1 + + 2 files changed, 5 insertions(+) + +diff --git a/include/sys/types.h b/include/sys/types.h +index 86821c7..5492e20 100644 +--- a/include/sys/types.h ++++ b/include/sys/types.h +@@ -22,6 +22,10 @@ + # define __bounded__(x, y, z) + #endif + ++#if !defined(HAVE_ATTRIBUTE__PACKED) && !defined(__packed) ++# define __packed __attribute__((__packed__)) ++#endif ++ + /* + * Define BSD-style unsigned bits types for systems that do not have them. + */ +diff --git a/m4/check-os-options.m4 b/m4/check-os-options.m4 +index d4d02d9..4883d1f 100644 +--- a/m4/check-os-options.m4 ++++ b/m4/check-os-options.m4 +@@ -69,6 +69,7 @@ case $host_os in + HOST_ABI=elf + AC_DEFINE([HAVE_ATTRIBUTE__BOUNDED__], [1], [OpenBSD gcc has bounded]) + AC_DEFINE([HAVE_ATTRIBUTE__DEAD], [1], [OpenBSD gcc has __dead]) ++ AC_DEFINE([HAVE_ATTRIBUTE__PACKED], [1], [OpenBSD gcc has __packed]) + ;; + *solaris*) + HOST_OS=solaris diff --git a/package/openntpd/0003-Zap-double-definition-of-conf-and-make-ibuf_dns-static-to-avoid-double.patch b/package/openntpd/0003-Zap-double-definition-of-conf-and-make-ibuf_dns-static-to-avoid-double.patch new file mode 100644 index 00000000..f54237e3 --- /dev/null +++ b/package/openntpd/0003-Zap-double-definition-of-conf-and-make-ibuf_dns-static-to-avoid-double.patch @@ -0,0 +1,54 @@ +From 956b4239d919d6922b9ba6ef39be0d1753f8ff34 Mon Sep 17 00:00:00 2001 +From: otto <> +Date: Sat, 11 Apr 2020 07:49:48 +0000 +Subject: [PATCH] Zap double definition of conf and make ibuf_dns static to + avoid double definition; from Michael Forney + +[Retrieved (and backported by updating paths and dropping date and +version updates) from: +https://github.com/openntpd-portable/openntpd-openbsd/commit/956b4239d919d6922b9ba6ef39be0d1753f8ff34] +Signed-off-by: Fabrice Fontaine +--- + src/usr.sbin/ntpd/ntp.c | 4 ++-- + src/usr.sbin/ntpd/ntp_dns.c | 4 ++-- + src/usr.sbin/ntpd/parse.y | 3 +-- + 3 files changed, 5 insertions(+), 6 deletions(-) + +diff --git a/src/ntp.c b/src/ntp.c +index ea9a4e922..ec3d6bc43 100644 +--- a/src/ntp.c ++++ b/src/ntp.c +@@ -42,7 +42,7 @@ + + volatile sig_atomic_t ntp_quit = 0; + struct imsgbuf *ibuf_main; +-struct imsgbuf *ibuf_dns; ++static struct imsgbuf *ibuf_dns; + struct ntpd_conf *conf; + struct ctl_conns ctl_conns; + u_int peer_cnt; +diff --git a/src/ntp_dns.c b/src/ntp_dns.c +index 2e1a97833..88391801c 100644 +--- a/src/ntp_dns.c ++++ b/src/ntp_dns.c +@@ -39,7 +39,7 @@ + #include "ntpd.h" + + volatile sig_atomic_t quit_dns = 0; +-struct imsgbuf *ibuf_dns; ++static struct imsgbuf *ibuf_dns; + + void sighdlr_dns(int); + int dns_dispatch_imsg(struct ntpd_conf *); +diff --git a/src/parse.y b/src/uparse.y +index 8d7ab09de..81d19bbff 100644 +--- a/src/parse.y ++++ b/src/parse.y +@@ -57,7 +57,6 @@ int lgetc(int); + int lungetc(int); + int findeol(void); + +-struct ntpd_conf *conf; + struct sockaddr_in query_addr4; + struct sockaddr_in6 query_addr6; + int poolseqnum; diff --git a/package/openntpd/Config.in b/package/openntpd/Config.in new file mode 100644 index 00000000..c84d0ba2 --- /dev/null +++ b/package/openntpd/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_OPENNTPD + bool "openntpd" + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_USE_MMU # fork () + depends on !BR2_PACKAGE_NTP # conflicting binaries + help + OpenNTPD is an easy to use implementation of the Network Time + Protocol. It provides the ability to sync the local clock + to remote NTP servers and can act as NTP server itself, + redistributing the local clock. It just works. + + Crypto support is available if the LibreSSL library is + enabled. + + http://www.openntpd.org/ + +comment "openntpd needs a toolchain w/ NPTL" + depends on BR2_USE_MMU + depends on !BR2_PACKAGE_NTP + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL diff --git a/package/openntpd/S49ntp b/package/openntpd/S49ntp new file mode 100644 index 00000000..7ce46eba --- /dev/null +++ b/package/openntpd/S49ntp @@ -0,0 +1,24 @@ +#!/bin/sh + +[ -f /etc/ntpd.conf ] || exit 0 + +case "$1" in + start) + printf "Starting openntpd: " + start-stop-daemon -S -x /usr/sbin/ntpd -- -s -p /run/ntpd.pid + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + stop) + printf "Stopping openntpd: " + start-stop-daemon -K -q -p /run/ntpd.pid + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + restart) + "$0" stop + sleep 1 + "$0" start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + ;; +esac diff --git a/package/openntpd/ntpd.service b/package/openntpd/ntpd.service new file mode 100644 index 00000000..c2924b0c --- /dev/null +++ b/package/openntpd/ntpd.service @@ -0,0 +1,15 @@ +[Unit] +Description=OpenNTP Daemon +After=network.target +Conflicts=systemd-timesyncd.service + +[Service] +Type=simple +# Turn off DNSSEC validation for hostname look-ups, since those need the +# correct time to work, but we likely won't acquire that without NTP. Let's +# break this chicken-and-egg cycle here. +Environment=SYSTEMD_NSS_RESOLVE_VALIDATE=0 +ExecStart=/usr/sbin/ntpd -s -d + +[Install] +WantedBy=multi-user.target diff --git a/package/openntpd/openntpd.hash b/package/openntpd/openntpd.hash new file mode 100644 index 00000000..4d00b7bb --- /dev/null +++ b/package/openntpd/openntpd.hash @@ -0,0 +1,5 @@ +# from http://ftp.openbsd.org/pub/OpenBSD/OpenNTPD/SHA256 +sha256 7b02691524197e01ba6b1b4b7595b33956e657ba6d5c4cf2fc20ea3f4914c13a openntpd-6.2p3.tar.gz + +# Locally computed +sha256 6c1822ee950652c12bb3773849db18794f62c63452a70d018edf23e8cba71839 COPYING diff --git a/package/openntpd/openntpd.mk b/package/openntpd/openntpd.mk new file mode 100644 index 00000000..30c39e45 --- /dev/null +++ b/package/openntpd/openntpd.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# openntpd +# +################################################################################ + +OPENNTPD_VERSION = 6.2p3 +OPENNTPD_SITE = http://ftp.openbsd.org/pub/OpenBSD/OpenNTPD +OPENNTPD_LICENSE = MIT-like, BSD-2-Clause, BSD-3-Clause +OPENNTPD_LICENSE_FILES = COPYING +OPENNTPD_CPE_ID_VENDOR = openntpd +OPENNTPD_DEPENDENCIES = host-bison +# Need to autoreconf for our libtool patch to apply properly +OPENNTPD_AUTORECONF = YES + +# Openntpd searches for tls_config_set_ca_mem which is only available +# in LibreSSL +ifeq ($(BR2_PACKAGE_LIBRESSL),y) +OPENNTPD_DEPENDENCIES += openssl +endif + +# openntpd uses pthread functions for arc4random emulation but forgets +# to use -pthread +OPENNTPD_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) -pthread" + +define OPENNTPD_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0644 package/openntpd/ntpd.service \ + $(TARGET_DIR)/usr/lib/systemd/system/ntpd.service +endef + +define OPENNTPD_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/openntpd/S49ntp \ + $(TARGET_DIR)/etc/init.d/S49ntp +endef + +define OPENNTPD_USERS + _ntp -1 _ntp -1 * - - - Network Time Protocol daemon +endef + +$(eval $(autotools-package)) diff --git a/package/openobex/Config.in b/package/openobex/Config.in new file mode 100644 index 00000000..e611b8d8 --- /dev/null +++ b/package/openobex/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_OPENOBEX + bool "openobex" + help + Free open source implementation of the Object Exchange (OBEX) + protocol. + + http://sourceforge.net/projects/openobex diff --git a/package/openobex/openobex.hash b/package/openobex/openobex.hash new file mode 100644 index 00000000..1cdb09de --- /dev/null +++ b/package/openobex/openobex.hash @@ -0,0 +1,6 @@ +# From http://sourceforge.net/projects/openobex/files/openobex/1.7.2/ +sha1 4a5098a62889134cbd2b54997e7ff3e959e601e6 openobex-1.7.2-Source.tar.gz +md5 f6e0b6cb7dcfd731460a7e9a91429a3a openobex-1.7.2-Source.tar.gz +# License files, locally calculated +sha256 e6d6a009505e345fe949e1310334fcb0747f28dae2856759de102ab66b722cb4 COPYING +sha256 6095e9ffa777dd22839f7801aa845b31c9ed07f3d6bf8a26dc5d2dec8ccc0ef3 COPYING.LIB diff --git a/package/openobex/openobex.mk b/package/openobex/openobex.mk new file mode 100644 index 00000000..bc4a47e3 --- /dev/null +++ b/package/openobex/openobex.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# openobex +# +################################################################################ + +OPENOBEX_VERSION = 1.7.2 +OPENOBEX_SITE = http://downloads.sourceforge.net/project/openobex/openobex/$(OPENOBEX_VERSION) +OPENOBEX_SOURCE = openobex-$(OPENOBEX_VERSION)-Source.tar.gz +# Libraries seems to be released under LGPL-2.1+, +# while other material is under GPL-2.0+. +OPENOBEX_LICENSE = GPL-2.0+/LGPL-2.1+ +OPENOBEX_LICENSE_FILES = COPYING COPYING.LIB +OPENOBEX_DEPENDENCIES = host-pkgconf +OPENOBEX_INSTALL_STAGING = YES +OPENOBEX_CONF_OPTS = -DBUILD_DOCUMENTATION=OFF + +ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS),y) +OPENOBEX_DEPENDENCIES += bluez5_utils +endif + +ifeq ($(BR2_PACKAGE_LIBUSB),y) +OPENOBEX_DEPENDENCIES += libusb +endif + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +OPENOBEX_DEPENDENCIES += udev +endif + +$(eval $(cmake-package)) diff --git a/package/openocd/0001-configure-enable-build-on-uclinux.patch b/package/openocd/0001-configure-enable-build-on-uclinux.patch new file mode 100644 index 00000000..2f2d3208 --- /dev/null +++ b/package/openocd/0001-configure-enable-build-on-uclinux.patch @@ -0,0 +1,26 @@ +From 11ea78c4d253bb90296e2dd8c3f7fbf59ba397b6 Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Thu, 17 Aug 2017 06:30:31 +0200 +Subject: [PATCH] configure: enable build on uclinux + +Signed-off-by: Bernd Kuhls +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index c680bda7..1a7980a0 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -327,7 +327,7 @@ AC_ARG_ENABLE([sysfsgpio], + [build_sysfsgpio=$enableval], [build_sysfsgpio=no]) + + AS_CASE([$host_os], +- [linux*], [], ++ [linux*|uclinux*], [], + [ + AS_IF([test "x$build_sysfsgpio" = "xyes"], [ + AC_MSG_ERROR([sysfsgpio is only available on linux]) +-- +2.11.0 + diff --git a/package/openocd/0002-CVE-2018-5704-Prevent-some-forms-of-Cross-Protocol-S.patch b/package/openocd/0002-CVE-2018-5704-Prevent-some-forms-of-Cross-Protocol-S.patch new file mode 100644 index 00000000..ba19bf57 --- /dev/null +++ b/package/openocd/0002-CVE-2018-5704-Prevent-some-forms-of-Cross-Protocol-S.patch @@ -0,0 +1,50 @@ +From 3a223ca3ebc7ac24d7726a0cd58e5695bc813657 Mon Sep 17 00:00:00 2001 +From: Andreas Fritiofson +Date: Sat, 13 Jan 2018 21:00:47 +0100 +Subject: [PATCH] CVE-2018-5704: Prevent some forms of Cross Protocol Scripting + attacks + +OpenOCD can be targeted by a Cross Protocol Scripting attack from +a web browser running malicious code, such as the following PoC: + +var x = new XMLHttpRequest(); +x.open("POST", "http://127.0.0.1:4444", true); +x.send("exec xcalc\r\n"); + +This mitigation should provide some protection from browser-based +attacks and is based on the corresponding fix in Redis: + +https://github.com/antirez/redis/blob/8075572207b5aebb1385c4f233f5302544439325/src/networking.c#L1758 + + +Upstream-status: Under review: http://openocd.zylin.com/#/c/4335/ +Change-Id: Ia96ebe19b74b5805dc228bf7364c7971a90a4581 +Signed-off-by: Andreas Fritiofson +Reported-by: Josef Gajdusek +Signed-off-by: Peter Korsgaard +--- + src/server/startup.tcl | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/src/server/startup.tcl b/src/server/startup.tcl +index 64ace407..dd1b31e4 100644 +--- a/src/server/startup.tcl ++++ b/src/server/startup.tcl +@@ -8,3 +8,14 @@ proc ocd_gdb_restart {target_id} { + # one target + reset halt + } ++ ++proc prevent_cps {} { ++ echo "Possible SECURITY ATTACK detected." ++ echo "It looks like somebody is sending POST or Host: commands to OpenOCD." ++ echo "This is likely due to an attacker attempting to use Cross Protocol Scripting" ++ echo "to compromise your OpenOCD instance. Connection aborted." ++ exit ++} ++ ++proc POST {args} { prevent_cps } ++proc Host: {args} { prevent_cps } +-- +2.11.0 + diff --git a/package/openocd/0003-bitbang-Fix-FTBFS-with-GCC-10.patch b/package/openocd/0003-bitbang-Fix-FTBFS-with-GCC-10.patch new file mode 100644 index 00000000..cf835152 --- /dev/null +++ b/package/openocd/0003-bitbang-Fix-FTBFS-with-GCC-10.patch @@ -0,0 +1,37 @@ +From c60252ac2b636c4d99b766a574b9df0966151696 Mon Sep 17 00:00:00 2001 +From: Andreas Fritiofson +Date: Fri, 17 Apr 2020 13:49:28 +0200 +Subject: [PATCH] bitbang: Fix FTBFS with GCC 10 + +GCC 10 defaults to -fno-common which breaks the sharing of bitbang_swd +struct between bitbang drivers due to a missing extern. + +Change-Id: I2b4122f7939cec91a72284006748f99a23548324 +Signed-off-by: Andreas Fritiofson +Reviewed-on: http://openocd.zylin.com/5592 +Tested-by: jenkins +Reviewed-by: Antonio Borneo +Reviewed-by: Jonathan McDowell + +Patch taken from upstream: https://github.com/ntfreak/openocd/commit/c60252ac2b636c4d99b766a574b9df0966151696 +Signed-off-by: Heiko Thiery +--- + src/jtag/drivers/bitbang.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/jtag/drivers/bitbang.h b/src/jtag/drivers/bitbang.h +index edb779ca..bbbc693d 100644 +--- a/src/jtag/drivers/bitbang.h ++++ b/src/jtag/drivers/bitbang.h +@@ -56,7 +56,7 @@ struct bitbang_interface { + void (*swdio_drive)(bool on); + }; + +-const struct swd_driver bitbang_swd; ++extern const struct swd_driver bitbang_swd; + + extern bool swd_mode; + +-- +2.20.1 + diff --git a/package/openocd/Config.in b/package/openocd/Config.in new file mode 100644 index 00000000..f2e79f29 --- /dev/null +++ b/package/openocd/Config.in @@ -0,0 +1,236 @@ +config BR2_PACKAGE_OPENOCD + bool "openocd" + select BR2_PACKAGE_JIMTCL + help + OpenOCD - Open On-Chip Debugger + + http://openocd.sourceforge.net/ + +if BR2_PACKAGE_OPENOCD + +comment "Adapters" + +config BR2_PACKAGE_OPENOCD_CMSIS_DAP + bool "CMSIS-DAP compliant debuggers" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + depends on BR2_PACKAGE_HAS_UDEV # hidapi + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # hidapi + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_HIDAPI + help + Enable support for CMSIS-DAP compliant debuggers (i.e + Atmel/Microchip EDBG, etc.) + +config BR2_PACKAGE_OPENOCD_FTDI + bool "MPSSE mode of FTDI based devices" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + help + Enable building support for the MPSSE mode of FTDI + (FT2xxx/FT4xxx) based devices (default is auto) + +config BR2_PACKAGE_OPENOCD_STLINK + bool "ST-Link JTAG Programmer" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + help + Enable building support for the ST-Link JTAG + Programmer (default is auto) + +config BR2_PACKAGE_OPENOCD_TI_ICDI + bool "TI ICDI JTAG Programmer" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + help + Enable building support for the TI ICDI JTAG + Programmer (default is auto) + +config BR2_PACKAGE_OPENOCD_ULINK + bool "Keil ULINK JTAG Programmer" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + help + Enable building support for the Keil ULINK JTAG + Programmer (default is auto) + +config BR2_PACKAGE_OPENOCD_UBLASTER2 + bool "Altera USB-Blaster II Compatible" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + help + Enable building support for the Altera USB-Blaster + II Compatible (default is auto) + +config BR2_PACKAGE_OPENOCD_JLINK + bool "Segger J-Link JTAG Programmer" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + help + Segger J-Link JTAG Programmer and clone such as Atmel + SAM-ICE + +config BR2_PACKAGE_OPENOCD_OSDBM + bool "OSDBM JTAG (only) Programmer" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + help + Enable building support for the OSBDM (JTAG only) + Programmer (default is auto) + +config BR2_PACKAGE_OPENOCD_OPENDOUS + bool "eStick/opendous JTAG Programmer" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + help + Enable building support for the eStick/opendous JTAG + Programmer (default is auto) + +config BR2_PACKAGE_OPENOCD_AICE + bool "Andes JTAG Programmer" + depends on BR2_USE_MMU # use fork() + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + help + Enable building support for the Andes JTAG + Programmer (default is auto) + +config BR2_PACKAGE_OPENOCD_VSLLINK + bool "Versaloon-Link JTAG Programmer" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb-compat -> libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb-compat -> libusb + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_LIBUSB_COMPAT + help + Enable building support for the Versaloon-Link JTAG + Programmer (default is auto) + +config BR2_PACKAGE_OPENOCD_USBPROG + bool "USBProg JTAG Programmer" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb-compat -> libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb-compat -> libusb + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_LIBUSB_COMPAT + help + Enable building support for the USBProg JTAG + Programmer (default is auto) + +config BR2_PACKAGE_OPENOCD_RLINK + bool "Raisonance RLink JTAG Programmer" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb-compat -> libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb-compat -> libusb + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_LIBUSB_COMPAT + help + Enable building support for the Raisonance RLink + JTAG Programmer (default is auto) + +config BR2_PACKAGE_OPENOCD_ARMEW + bool "Olimex ARM-JTAG-EW Programmer" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb-compat -> libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb-compat -> libusb + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_LIBUSB_COMPAT + help + Enable building support for the Olimex ARM-JTAG-EW + Programmer (default is auto) + +config BR2_PACKAGE_OPENOCD_PARPORT + bool "pc parallel port driver" + help + Enable building the pc parallel port driver + +config BR2_PACKAGE_OPENOCD_VPI + bool "JTAG VPI" + help + Enable building support for JTAG VPI + +config BR2_PACKAGE_OPENOCD_UBLASTER + bool "Altera USB-Blaster" + depends on BR2_TOOLCHAIN_HAS_THREADS # libftdi -> libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libftdi -> libusb + select BR2_PACKAGE_LIBFTDI1 + help + Enable building support for the Altera USB-Blaster + using the libftdi driver, opensource alternate of + FTD2XX + +config BR2_PACKAGE_OPENOCD_AMTJT + bool "Amontec JTAG-Accelerator" + help + Enable building the Amontec JTAG-Accelerator driver + +if BR2_arm + +config BR2_PACKAGE_OPENOCD_EP93XX + bool "EP93xx based SBCs" + help + Enable building support for EP93xx based SBCs + +config BR2_PACKAGE_OPENOCD_AT91RM + bool "AT91RM9200 based SBCs" + help + Enable building support for AT91RM9200 based SBCs + +config BR2_PACKAGE_OPENOCD_BCM2835 + bool "bitbanging on BCM2835" + help + Enable building support for bitbanging on BCM2835 + (as found in Raspberry Pi) + +endif # BR2_arm + +config BR2_PACKAGE_OPENOCD_GW16012 + bool "Gateworks GW16012 JTAG Programmer" + help + Enable building support for the Gateworks GW16012 + JTAG Programmer + +config BR2_PACKAGE_OPENOCD_PRESTO + bool "ASIX Presto Programmer" + depends on BR2_TOOLCHAIN_HAS_THREADS # libftdi -> libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libftdi -> libusb + select BR2_PACKAGE_LIBFTDI1 + help + Enable building support for ASIX Presto Programmer + using the libftdi driver + +config BR2_PACKAGE_OPENOCD_OPENJTAG + bool "OpenJTAG Programmer" + depends on BR2_TOOLCHAIN_HAS_THREADS # libftdi -> libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libftdi -> libusb + select BR2_PACKAGE_LIBFTDI1 + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_LIBUSB_COMPAT # needs usb.h + help + Enable building support for the OpenJTAG Programmer + with ftdi driver + +config BR2_PACKAGE_OPENOCD_BUSPIRATE + bool "Buspirate" + help + Enable building support for the Buspirate + +config BR2_PACKAGE_OPENOCD_SYSFS + bool "programming via sysfs gpios" + help + Enable building support for programming driven via + sysfs gpios. + +# Many adapters need libusb or libusb-compat, which require threads and +# gcc >= 4.9 but we don't want to duplicate this comment for all +# adapters that select libusb or libusb-compat. +comment "many openocd adapters needs a toolchain w/ threads, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + +endif # BR2_PACKAGE_OPENOCD diff --git a/package/openocd/Config.in.host b/package/openocd/Config.in.host new file mode 100644 index 00000000..8ff37379 --- /dev/null +++ b/package/openocd/Config.in.host @@ -0,0 +1,10 @@ +config BR2_PACKAGE_HOST_OPENOCD + bool "host openocd" + depends on BR2_HOST_GCC_AT_LEAST_4_9 # host-libusb + help + OpenOCD - Open On-Chip Debugger + + http://openocd.org/ + +comment "host openocd needs a toolchain w/ host gcc >= 4.9" + depends on !BR2_HOST_GCC_AT_LEAST_4_9 diff --git a/package/openocd/openocd.hash b/package/openocd/openocd.hash new file mode 100644 index 00000000..3fb817b4 --- /dev/null +++ b/package/openocd/openocd.hash @@ -0,0 +1,4 @@ +# From http://sourceforge.net/projects/openocd/files/openocd/0.10.0/ +sha1 3245d43d60a1a93f8b0f6b1ce20b53e38cab7a4a openocd-0.10.0.tar.bz2 +md5 b412bdef0481a3859c6585eb69f6f6ba openocd-0.10.0.tar.bz2 +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/openocd/openocd.mk b/package/openocd/openocd.mk new file mode 100644 index 00000000..7887f3a6 --- /dev/null +++ b/package/openocd/openocd.mk @@ -0,0 +1,122 @@ +################################################################################ +# +# openocd +# +################################################################################ + +OPENOCD_VERSION = 0.10.0 +OPENOCD_SOURCE = openocd-$(OPENOCD_VERSION).tar.bz2 +OPENOCD_SITE = http://sourceforge.net/projects/openocd/files/openocd/$(OPENOCD_VERSION) +OPENOCD_LICENSE = GPL-2.0+ +OPENOCD_LICENSE_FILES = COPYING +# 0002-configure-enable-build-on-uclinux.patch patches configure.ac +OPENOCD_AUTORECONF = YES +OPENOCD_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -std=gnu99" + +OPENOCD_CONF_OPTS = \ + --oldincludedir=$(STAGING_DIR)/usr/include \ + --includedir=$(STAGING_DIR)/usr/include \ + --disable-doxygen-html \ + --disable-internal-jimtcl \ + --disable-shared \ + --enable-dummy \ + --disable-werror + +# Rely on the Config.in options of each individual adapter selecting +# the dependencies they need. + +OPENOCD_DEPENDENCIES = \ + host-pkgconf \ + jimtcl \ + $(if $(BR2_PACKAGE_LIBFTDI1),libftdi1) \ + $(if $(BR2_PACKAGE_LIBUSB),libusb) \ + $(if $(BR2_PACKAGE_LIBUSB_COMPAT),libusb-compat) \ + $(if $(BR2_PACKAGE_LIBHID),libhid) \ + $(if $(BR2_PACKAGE_HIDAPI),hidapi) + +# Adapters +OPENOCD_CONF_OPTS += \ + $(if $(BR2_PACKAGE_OPENOCD_FTDI),--enable-ftdi,--disable-ftdi) \ + $(if $(BR2_PACKAGE_OPENOCD_STLINK),--enable-stlink,--disable-stlink) \ + $(if $(BR2_PACKAGE_OPENOCD_TI_ICDI),--enable-ti-icdi,--disable-ti-icdi) \ + $(if $(BR2_PACKAGE_OPENOCD_ULINK),--enable-ulink,--disable-ulink) \ + $(if $(BR2_PACKAGE_OPENOCD_UBLASTER2),--enable-usb-blaster-2,--disable-usb-blaster-2) \ + $(if $(BR2_PACKAGE_OPENOCD_JLINK),--enable-jlink,--disable-jlink) \ + $(if $(BR2_PACKAGE_OPENOCD_OSDBM),--enable-osbdm,--disable-osbdm) \ + $(if $(BR2_PACKAGE_OPENOCD_OPENDOUS),--enable-opendous,--disable-opendous) \ + $(if $(BR2_PACKAGE_OPENOCD_AICE),--enable-aice,--disable-aice) \ + $(if $(BR2_PACKAGE_OPENOCD_VSLLINK),--enable-vsllink,--disable-vsllink) \ + $(if $(BR2_PACKAGE_OPENOCD_USBPROG),--enable-usbprog,--disable-usbprog) \ + $(if $(BR2_PACKAGE_OPENOCD_RLINK),--enable-rlink,--disable-rlink) \ + $(if $(BR2_PACKAGE_OPENOCD_ARMEW),--enable-armjtagew,--disable-armjtagew) \ + $(if $(BR2_PACKAGE_OPENOCD_CMSIS_DAP),--enable-cmsis-dap,--disable-cmsis-dap) \ + $(if $(BR2_PACKAGE_OPENOCD_PARPORT),--enable-parport,--disable-parport) \ + $(if $(BR2_PACKAGE_OPENOCD_VPI),--enable-jtag_vpi,--disable-jtag_vpi) \ + $(if $(BR2_PACKAGE_OPENOCD_UBLASTER),--enable-usb-blaster,--disable-usb-blaster) \ + $(if $(BR2_PACKAGE_OPENOCD_AMTJT),--enable-amtjtagaccel,--disable-amjtagaccel) \ + $(if $(BR2_PACKAGE_OPENOCD_ZY1000_MASTER),--enable-zy1000-master,--disable-zy1000-master) \ + $(if $(BR2_PACKAGE_OPENOCD_ZY1000),--enable-zy1000,--disable-zy1000) \ + $(if $(BR2_PACKAGE_OPENOCD_EP93XX),--enable-ep93xx,--disable-ep93xx) \ + $(if $(BR2_PACKAGE_OPENOCD_AT91RM),--enable-at91rm9200,--disable-at91rm9200) \ + $(if $(BR2_PACKAGE_OPENOCD_BCM2835),--enable-bcm2835gpio,--disable-bcm2835gpio) \ + $(if $(BR2_PACKAGE_OPENOCD_GW16012),--enable-gw16012,--disable-gw16012) \ + $(if $(BR2_PACKAGE_OPENOCD_PRESTO),--enable-presto,--disable-presto) \ + $(if $(BR2_PACKAGE_OPENOCD_OPENJTAG),--enable-openjtag,--disable-openjtag) \ + $(if $(BR2_PACKAGE_OPENOCD_BUSPIRATE),--enable-buspirate,--disable-buspirate) \ + $(if $(BR2_PACKAGE_OPENOCD_SYSFS),--enable-sysfsgpio,--disable-sysfsgpio) + +# Enable all configuration options for host build. +# +# Note that deprecated options have been removed. CMSIS_DAP needs +# hidapi (currently not included in buildroot) and zy1000 stuff fails +# to build, so they've been removed too. +# +HOST_OPENOCD_CONF_OPTS = \ + --enable-ftdi \ + --enable-stlink \ + --enable-ti-icdi \ + --enable-ulink \ + --enable-usb-blaster-2 \ + --enable-jlink \ + --enable-osbdm \ + --enable-opendous \ + --enable-aice \ + --enable-vsllink \ + --enable-usbprog \ + --enable-rlink \ + --enable-armjtagew \ + --enable-parport \ + --enable-jtag_vpi \ + --enable-usb-blaster \ + --enable-amtjtagaccel \ + --enable-gw16012 \ + --enable-presto \ + --enable-openjtag \ + --enable-buspirate \ + --enable-sysfsgpio \ + --oldincludedir=$(HOST_DIR)/include \ + --includedir=$(HOST_DIR)/include \ + --disable-doxygen-html \ + --disable-internal-jimtcl \ + --disable-shared \ + --enable-dummy \ + --disable-werror + +HOST_OPENOCD_DEPENDENCIES = host-jimtcl host-libftdi host-libusb host-libusb-compat + +# Avoid documentation rebuild. On PowerPC64(le), we patch the +# configure script. Due to this, the version.texi files gets +# regenerated, and then since it has a newer date than openocd.info, +# openocd build system rebuilds the documentation. Unfortunately, this +# documentation rebuild fails on old machines. We work around this by +# faking the date of the generated version.texi file, to make the +# build system believe the documentation doesn't need to be +# regenerated. +define OPENOCD_FIX_VERSION_TEXI + touch -r $(@D)/doc/openocd.info $(@D)/doc/version.texi +endef +OPENOCD_POST_BUILD_HOOKS += OPENOCD_FIX_VERSION_TEXI +HOST_OPENOCD_POST_BUILD_HOOKS += OPENOCD_FIX_VERSION_TEXI + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/openpgm/0001-Rename-openpgm-5.2.pc.in.patch b/package/openpgm/0001-Rename-openpgm-5.2.pc.in.patch new file mode 100644 index 00000000..76d61f3e --- /dev/null +++ b/package/openpgm/0001-Rename-openpgm-5.2.pc.in.patch @@ -0,0 +1,57 @@ +From 240634b1afb968a051f8c68696eae2a582a02450 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 31 Aug 2020 20:16:25 +0200 +Subject: [PATCH] Rename openpgm-5.2.pc.in + +This will fix the following build failure: + +config.status: error: cannot find input file: `openpgm-5.3.pc.in' + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/steve-o/openpgm/pull/66] +--- + openpgm/pgm/openpgm-5.2.pc.in | 12 ------------ + openpgm/pgm/openpgm-5.3.pc.in | 12 ++++++++++++ + 2 files changed, 12 insertions(+), 12 deletions(-) + delete mode 100644 openpgm/pgm/openpgm-5.2.pc.in + create mode 100644 openpgm/pgm/openpgm-5.3.pc.in + +diff --git a/openpgm/pgm/openpgm-5.2.pc.in b/openpgm/pgm/openpgm-5.2.pc.in +deleted file mode 100644 +index 9e30a6d..0000000 +--- a/openpgm/pgm/openpgm-5.2.pc.in ++++ /dev/null +@@ -1,12 +0,0 @@ +-prefix=@prefix@ +-exec_prefix=@exec_prefix@ +-libdir=@libdir@ +-includedir=@includedir@ +- +-Name: OpenPGM +-Description: PGM Protocol Library. +-Version: @PACKAGE_VERSION@ +-# packagers may wish to move @LIBS@ to Libs.private for platforms with +-# versions of pkg-config that support static linking. +-Libs: -L${libdir} -lpgm @LIBS@ +-Cflags: -I${includedir}/pgm-@VERSION_MAJOR@.@VERSION_MINOR@ +diff --git a/openpgm/pgm/openpgm-5.3.pc.in b/openpgm/pgm/openpgm-5.3.pc.in +new file mode 100644 +index 0000000..9e30a6d +--- /dev/null ++++ b/openpgm/pgm/openpgm-5.3.pc.in +@@ -0,0 +1,12 @@ ++prefix=@prefix@ ++exec_prefix=@exec_prefix@ ++libdir=@libdir@ ++includedir=@includedir@ ++ ++Name: OpenPGM ++Description: PGM Protocol Library. ++Version: @PACKAGE_VERSION@ ++# packagers may wish to move @LIBS@ to Libs.private for platforms with ++# versions of pkg-config that support static linking. ++Libs: -L${libdir} -lpgm @LIBS@ ++Cflags: -I${includedir}/pgm-@VERSION_MAJOR@.@VERSION_MINOR@ +-- +2.28.0 + diff --git a/package/openpgm/0002-openpgm-pgm-checksum.c-fix-build-with-32-bits-MMX.patch b/package/openpgm/0002-openpgm-pgm-checksum.c-fix-build-with-32-bits-MMX.patch new file mode 100644 index 00000000..a04dc7db --- /dev/null +++ b/package/openpgm/0002-openpgm-pgm-checksum.c-fix-build-with-32-bits-MMX.patch @@ -0,0 +1,41 @@ +From b7fa865fa6b06d97d424c500fd1c4bc44c096359 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 1 Nov 2020 22:46:18 +0100 +Subject: [PATCH] openpgm/pgm/checksum.c: fix build with 32 bits MMX + +Build with i386-pentium-mmx or i686 is broken since version 5-3-128 and +https://github.com/steve-o/openpgm/commit/b276dc15be5d4e6e1143b9de25d09f63f9c85135 +because _mm_cvtm64_si64 is undefined resulting in the following build +failure for example on zeromq: + +/srv/storage/autobuild/run/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/i586-buildroot-linux-musl/8.3.0/../../../../i586-buildroot-linux-musl/bin/ld: /srv/storage/autobuild/run/instance-3/output-1/host/i586-buildroot-linux-musl/sysroot/usr/lib32/libpgm-5.3.so.0: undefined reference to `_mm_cvtm64_si64' + +So use the fallback if __x86_64__ is not defined + +Fixes: + - http://autobuild.buildroot.org/results/01d9be37e8a743307128f53f41785654c9971e1a + +Signed-off-by: Fabrice Fontaine +Signed-off-by: Baruch Siach +--- +Upstream status: commit b7fa865fa6b06d97d424c500fd1c4bc44c096359 + + openpgm/pgm/checksum.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/openpgm/pgm/checksum.c b/openpgm/pgm/checksum.c +index fef89bce237c..8d8dd3f32305 100644 +--- a/openpgm/pgm/checksum.c ++++ b/openpgm/pgm/checksum.c +@@ -948,7 +948,7 @@ do_csumcpy_mmx ( + + sum = _mm_add_pi32 (sum, lo); + sum = _mm_add_pi32 (sum, hi); +-#if 1 ++#if defined(__x86_64__) + *(int64_t*)dst = _mm_cvtm64_si64 (tmp); + #else + ((int*)dst)[1] = _mm_cvtsi64_si32 (tmp); +-- +2.30.2 + diff --git a/package/openpgm/Config.in b/package/openpgm/Config.in new file mode 100644 index 00000000..e37edfe9 --- /dev/null +++ b/package/openpgm/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_OPENPGM + bool "openpgm" + depends on BR2_TOOLCHAIN_HAS_SYNC_2 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_WCHAR + help + OpenPGM is an open source implementation of the Pragmatic + General Multicast (PGM) specification in RFC 3208 available at + www.ietf.org. PGM is a reliable and scalable multicast + protocol that enables receivers to detect loss, request + retransmission of lost data, or notify an application of + unrecoverable loss. + + https://github.com/steve-o/openpgm/ + +comment "openpgm needs a toolchain w/ wchar, threads" + depends on BR2_TOOLCHAIN_HAS_SYNC_2 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !(BR2_TOOLCHAIN_HAS_THREADS && BR2_USE_WCHAR) diff --git a/package/openpgm/openpgm.hash b/package/openpgm/openpgm.hash new file mode 100644 index 00000000..9d61bcdc --- /dev/null +++ b/package/openpgm/openpgm.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 8d707ef8dda45f4a7bc91016d7f2fed6a418637185d76c7ab30b306499c6d393 openpgm-5-3-128.tar.gz +sha256 4a7d4ec71fa60969399fd4caad64d5a3003fee2775445f271a5a36a8ae743a29 openpgm/pgm/LICENSE diff --git a/package/openpgm/openpgm.mk b/package/openpgm/openpgm.mk new file mode 100644 index 00000000..ded06f3d --- /dev/null +++ b/package/openpgm/openpgm.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# openpgm +# +################################################################################ + +OPENPGM_VERSION = 5-3-128 +OPENPGM_SITE = $(call github,steve-o,openpgm,release-$(OPENPGM_VERSION)) +OPENPGM_LICENSE = LGPL-2.1+ +OPENPGM_LICENSE_FILES = openpgm/pgm/LICENSE +OPENPGM_INSTALL_STAGING = YES +OPENPGM_SUBDIR = openpgm/pgm +OPENPGM_AUTORECONF = YES + +OPENPGM_CONF_ENV = \ + ac_cv_file__proc_cpuinfo=yes \ + ac_cv_file__dev_rtc=no \ + ac_cv_file__dev_hpet=no + +$(eval $(autotools-package)) diff --git a/package/openpowerlink/0001-install-the-stack-libraries-to-lib-subdirectory.patch b/package/openpowerlink/0001-install-the-stack-libraries-to-lib-subdirectory.patch new file mode 100644 index 00000000..0e1c21ec --- /dev/null +++ b/package/openpowerlink/0001-install-the-stack-libraries-to-lib-subdirectory.patch @@ -0,0 +1,167 @@ +From 16230b7f51bff2bdf061fa80e9a49c807596bb92 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Wed, 25 May 2016 15:57:10 +0200 +Subject: [PATCH] install the stack libraries to "lib" subdirectory + +Using '.' to install the stack libraries is not correct since +it will install them to /usr/. + +ls /usr/liboplkmnapp-kernelintf.so + +Fix this by using 'lib' instead of '.' + +The problem with the openpowerlink build system is that it expect +the stack directory to be a "local staging" directory which +contains headers and libraries. So the libraries build by the +stack project are installed in stack/lib by default. + +This is wrong to do that because it becomes difficult to package +openpowerlink for normal Linux systems. + +Buildroot like others build system expect from a packaged software +to install libraries and headers build/provided in a staging +directory. + +It seems that CMAKE_INSTALL_PREFIX is misused by the default value +"${CMAKE_CURRENT_SOURCE_DIR}/lib/${SYSTEM_NAME_DIR}/${SYSTEM_PROCESSOR_DIR}" +since it already contains the lib directory and therefore the +entire build system is messed up. + +It seems that the openpowerlink's build system doesn't allow/support +CMAKE_INSTALL_PREFIX to be set externally +(which is the standard approach). + +The issue has been reported [1] upstream and a build system +refactoring is needed to fix this properly. + +[1] http://sourceforge.net/p/openpowerlink/discussion/newbie/thread/3f13af65/#8f80/a50a/4649/f07c + +[rebase on v2.5.0] +Signed-off-by: Romain Naour +--- + stack/proj/linux/liboplkcn-sim/CMakeLists.txt | 2 +- + stack/proj/linux/liboplkcn/CMakeLists.txt | 2 +- + stack/proj/linux/liboplkcnapp-kernelintf/CMakeLists.txt | 2 +- + stack/proj/linux/liboplkcnapp-userintf/CMakeLists.txt | 2 +- + stack/proj/linux/liboplkcndrv-pcap/CMakeLists.txt | 2 +- + stack/proj/linux/liboplkmn-sim/CMakeLists.txt | 2 +- + stack/proj/linux/liboplkmn/CMakeLists.txt | 2 +- + stack/proj/linux/liboplkmnapp-kernelintf/CMakeLists.txt | 2 +- + stack/proj/linux/liboplkmnapp-kernelpcp/CMakeLists.txt | 2 +- + stack/proj/linux/liboplkmnapp-userintf/CMakeLists.txt | 2 +- + stack/proj/linux/liboplkmndrv-pcap/CMakeLists.txt | 2 +- + 11 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/stack/proj/linux/liboplkcn-sim/CMakeLists.txt b/stack/proj/linux/liboplkcn-sim/CMakeLists.txt +index 2b3da16..ddb3e92 100644 +--- a/stack/proj/linux/liboplkcn-sim/CMakeLists.txt ++++ b/stack/proj/linux/liboplkcn-sim/CMakeLists.txt +@@ -96,4 +96,4 @@ ADD_LIBRARY(${LIB_NAME} ${LIB_TYPE} ${LIB_SOURCES}) + TARGET_LINK_LIBRARIES(${LIB_NAME} ${ARCH_LIBRARIES}) + SET_PROPERTY(TARGET ${LIB_NAME} PROPERTY COMPILE_DEFINITIONS_DEBUG DEBUG;DEF_DEBUG_LVL=${CFG_DEBUG_LVL}) + SET_PROPERTY(TARGET ${LIB_NAME} PROPERTY DEBUG_POSTFIX "_d") +-INSTALL(TARGETS ${LIB_NAME} ARCHIVE DESTINATION . LIBRARY DESTINATION .) ++INSTALL(TARGETS ${LIB_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib) +diff --git a/stack/proj/linux/liboplkcn/CMakeLists.txt b/stack/proj/linux/liboplkcn/CMakeLists.txt +index 3be6c52..cf1b1dd 100644 +--- a/stack/proj/linux/liboplkcn/CMakeLists.txt ++++ b/stack/proj/linux/liboplkcn/CMakeLists.txt +@@ -90,4 +90,4 @@ ADD_LIBRARY(${LIB_NAME} ${LIB_TYPE} ${LIB_SOURCES}) + TARGET_LINK_LIBRARIES(${LIB_NAME} ${ARCH_LIBRARIES}) + SET_PROPERTY(TARGET ${LIB_NAME} PROPERTY COMPILE_DEFINITIONS_DEBUG DEBUG;DEF_DEBUG_LVL=${CFG_DEBUG_LVL}) + SET_PROPERTY(TARGET ${LIB_NAME} PROPERTY DEBUG_POSTFIX "_d") +-INSTALL(TARGETS ${LIB_NAME} ARCHIVE DESTINATION . LIBRARY DESTINATION .) ++INSTALL(TARGETS ${LIB_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib) +diff --git a/stack/proj/linux/liboplkcnapp-kernelintf/CMakeLists.txt b/stack/proj/linux/liboplkcnapp-kernelintf/CMakeLists.txt +index 904de6c..d8713a8 100644 +--- a/stack/proj/linux/liboplkcnapp-kernelintf/CMakeLists.txt ++++ b/stack/proj/linux/liboplkcnapp-kernelintf/CMakeLists.txt +@@ -83,4 +83,4 @@ ADD_LIBRARY(${LIB_NAME} ${LIB_TYPE} ${LIB_SOURCES}) + TARGET_LINK_LIBRARIES(${LIB_NAME} ${ARCH_LIBRARIES}) + SET_PROPERTY(TARGET ${LIB_NAME} PROPERTY COMPILE_DEFINITIONS_DEBUG DEBUG;DEF_DEBUG_LVL=${CFG_DEBUG_LVL}) + SET_PROPERTY(TARGET ${LIB_NAME} PROPERTY DEBUG_POSTFIX "_d") +-INSTALL(TARGETS ${LIB_NAME} ARCHIVE DESTINATION . LIBRARY DESTINATION .) ++INSTALL(TARGETS ${LIB_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib) +diff --git a/stack/proj/linux/liboplkcnapp-userintf/CMakeLists.txt b/stack/proj/linux/liboplkcnapp-userintf/CMakeLists.txt +index e2514cf..a4e2b75 100644 +--- a/stack/proj/linux/liboplkcnapp-userintf/CMakeLists.txt ++++ b/stack/proj/linux/liboplkcnapp-userintf/CMakeLists.txt +@@ -83,4 +83,4 @@ ADD_LIBRARY(${LIB_NAME} ${LIB_TYPE} ${LIB_SOURCES}) + TARGET_LINK_LIBRARIES(${LIB_NAME} ${ARCH_LIBRARIES}) + SET_PROPERTY(TARGET ${LIB_NAME} PROPERTY COMPILE_DEFINITIONS_DEBUG DEBUG;DEF_DEBUG_LVL=${CFG_DEBUG_LVL}) + SET_PROPERTY(TARGET ${LIB_NAME} PROPERTY DEBUG_POSTFIX "_d") +-INSTALL(TARGETS ${LIB_NAME} ARCHIVE DESTINATION . LIBRARY DESTINATION .) ++INSTALL(TARGETS ${LIB_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib) +diff --git a/stack/proj/linux/liboplkcndrv-pcap/CMakeLists.txt b/stack/proj/linux/liboplkcndrv-pcap/CMakeLists.txt +index 98f068c..bb20006 100644 +--- a/stack/proj/linux/liboplkcndrv-pcap/CMakeLists.txt ++++ b/stack/proj/linux/liboplkcndrv-pcap/CMakeLists.txt +@@ -76,4 +76,4 @@ ADD_LIBRARY(${LIB_NAME} ${LIB_TYPE} ${LIB_SOURCES}) + TARGET_LINK_LIBRARIES(${LIB_NAME} ${ARCH_LIBRARIES}) + SET_PROPERTY(TARGET ${LIB_NAME} PROPERTY COMPILE_DEFINITIONS_DEBUG DEBUG;DEF_DEBUG_LVL=${CFG_DEBUG_LVL}) + SET_PROPERTY(TARGET ${LIB_NAME} PROPERTY DEBUG_POSTFIX "_d") +-INSTALL(TARGETS ${LIB_NAME} ARCHIVE DESTINATION . LIBRARY DESTINATION .) ++INSTALL(TARGETS ${LIB_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib) +diff --git a/stack/proj/linux/liboplkmn-sim/CMakeLists.txt b/stack/proj/linux/liboplkmn-sim/CMakeLists.txt +index eb6396a..5beaa07 100644 +--- a/stack/proj/linux/liboplkmn-sim/CMakeLists.txt ++++ b/stack/proj/linux/liboplkmn-sim/CMakeLists.txt +@@ -91,4 +91,4 @@ ADD_LIBRARY(${LIB_NAME} ${LIB_TYPE} ${LIB_SOURCES}) + TARGET_LINK_LIBRARIES(${LIB_NAME} ${ARCH_LIBRARIES}) + SET_PROPERTY(TARGET ${LIB_NAME} PROPERTY COMPILE_DEFINITIONS_DEBUG DEBUG;DEF_DEBUG_LVL=${CFG_DEBUG_LVL}) + SET_PROPERTY(TARGET ${LIB_NAME} PROPERTY DEBUG_POSTFIX "_d") +-INSTALL(TARGETS ${LIB_NAME} ARCHIVE DESTINATION . LIBRARY DESTINATION .) ++INSTALL(TARGETS ${LIB_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib) +diff --git a/stack/proj/linux/liboplkmn/CMakeLists.txt b/stack/proj/linux/liboplkmn/CMakeLists.txt +index cf7927f..6b19557 100644 +--- a/stack/proj/linux/liboplkmn/CMakeLists.txt ++++ b/stack/proj/linux/liboplkmn/CMakeLists.txt +@@ -89,4 +89,4 @@ ADD_LIBRARY(${LIB_NAME} ${LIB_TYPE} ${LIB_SOURCES}) + TARGET_LINK_LIBRARIES(${LIB_NAME} ${ARCH_LIBRARIES}) + SET_PROPERTY(TARGET ${LIB_NAME} PROPERTY COMPILE_DEFINITIONS_DEBUG DEBUG;DEF_DEBUG_LVL=${CFG_DEBUG_LVL}) + SET_PROPERTY(TARGET ${LIB_NAME} PROPERTY DEBUG_POSTFIX "_d") +-INSTALL(TARGETS ${LIB_NAME} ARCHIVE DESTINATION . LIBRARY DESTINATION .) ++INSTALL(TARGETS ${LIB_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib) +diff --git a/stack/proj/linux/liboplkmnapp-kernelintf/CMakeLists.txt b/stack/proj/linux/liboplkmnapp-kernelintf/CMakeLists.txt +index 9daa2df..bfccb25 100644 +--- a/stack/proj/linux/liboplkmnapp-kernelintf/CMakeLists.txt ++++ b/stack/proj/linux/liboplkmnapp-kernelintf/CMakeLists.txt +@@ -82,4 +82,4 @@ ADD_LIBRARY(${LIB_NAME} ${LIB_TYPE} ${LIB_SOURCES}) + TARGET_LINK_LIBRARIES(${LIB_NAME} ${ARCH_LIBRARIES}) + SET_PROPERTY(TARGET ${LIB_NAME} PROPERTY COMPILE_DEFINITIONS_DEBUG DEBUG;DEF_DEBUG_LVL=${CFG_DEBUG_LVL}) + SET_PROPERTY(TARGET ${LIB_NAME} PROPERTY DEBUG_POSTFIX "_d") +-INSTALL(TARGETS ${LIB_NAME} ARCHIVE DESTINATION . LIBRARY DESTINATION .) ++INSTALL(TARGETS ${LIB_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib) +diff --git a/stack/proj/linux/liboplkmnapp-kernelpcp/CMakeLists.txt b/stack/proj/linux/liboplkmnapp-kernelpcp/CMakeLists.txt +index 0135f46..83128eb 100644 +--- a/stack/proj/linux/liboplkmnapp-kernelpcp/CMakeLists.txt ++++ b/stack/proj/linux/liboplkmnapp-kernelpcp/CMakeLists.txt +@@ -91,4 +91,4 @@ ADD_LIBRARY(${LIB_NAME} ${LIB_TYPE} ${LIB_SOURCES}) + TARGET_LINK_LIBRARIES(${LIB_NAME} ${ARCH_LIBRARIES}) + SET_PROPERTY(TARGET ${LIB_NAME} PROPERTY COMPILE_DEFINITIONS_DEBUG DEBUG;DEF_DEBUG_LVL=${CFG_DEBUG_LVL}) + SET_PROPERTY(TARGET ${LIB_NAME} PROPERTY DEBUG_POSTFIX "_d") +-INSTALL(TARGETS ${LIB_NAME} ARCHIVE DESTINATION . LIBRARY DESTINATION .) ++INSTALL(TARGETS ${LIB_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib) +diff --git a/stack/proj/linux/liboplkmnapp-userintf/CMakeLists.txt b/stack/proj/linux/liboplkmnapp-userintf/CMakeLists.txt +index cd97882..aaaa526 100644 +--- a/stack/proj/linux/liboplkmnapp-userintf/CMakeLists.txt ++++ b/stack/proj/linux/liboplkmnapp-userintf/CMakeLists.txt +@@ -82,4 +82,4 @@ ADD_LIBRARY(${LIB_NAME} ${LIB_TYPE} ${LIB_SOURCES}) + TARGET_LINK_LIBRARIES(${LIB_NAME} ${ARCH_LIBRARIES}) + SET_PROPERTY(TARGET ${LIB_NAME} PROPERTY COMPILE_DEFINITIONS_DEBUG DEBUG;DEF_DEBUG_LVL=${CFG_DEBUG_LVL}) + SET_PROPERTY(TARGET ${LIB_NAME} PROPERTY DEBUG_POSTFIX "_d") +-INSTALL(TARGETS ${LIB_NAME} ARCHIVE DESTINATION . LIBRARY DESTINATION .) ++INSTALL(TARGETS ${LIB_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib) +diff --git a/stack/proj/linux/liboplkmndrv-pcap/CMakeLists.txt b/stack/proj/linux/liboplkmndrv-pcap/CMakeLists.txt +index 0c29087..1783134 100644 +--- a/stack/proj/linux/liboplkmndrv-pcap/CMakeLists.txt ++++ b/stack/proj/linux/liboplkmndrv-pcap/CMakeLists.txt +@@ -79,4 +79,4 @@ ADD_LIBRARY(${LIB_NAME} ${LIB_TYPE} ${LIB_SOURCES}) + TARGET_LINK_LIBRARIES(${LIB_NAME} ${ARCH_LIBRARIES}) + SET_PROPERTY(TARGET ${LIB_NAME} PROPERTY COMPILE_DEFINITIONS_DEBUG DEBUG;DEF_DEBUG_LVL=${CFG_DEBUG_LVL}) + SET_PROPERTY(TARGET ${LIB_NAME} PROPERTY DEBUG_POSTFIX "_d") +-INSTALL(TARGETS ${LIB_NAME} ARCHIVE DESTINATION . LIBRARY DESTINATION .) ++INSTALL(TARGETS ${LIB_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib) +-- +2.9.4 + diff --git a/package/openpowerlink/0002-cmake-install-oplk-headers-files.patch b/package/openpowerlink/0002-cmake-install-oplk-headers-files.patch new file mode 100644 index 00000000..8e815c04 --- /dev/null +++ b/package/openpowerlink/0002-cmake-install-oplk-headers-files.patch @@ -0,0 +1,32 @@ +From f7679a4083de3a9dba80cd719ad4904fbade349b Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Wed, 25 May 2016 15:57:29 +0200 +Subject: [PATCH] cmake: install oplk headers files + +In order to be able to link a third party application +with openpowerlink libraries, we need to install the +oplk headers files related to openpowerlink stack. + +Install all headers file from STACK_INCLUDE_DIR/oplk. + +Signed-off-by: Romain Naour +--- + stack/CMakeLists.txt | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/stack/CMakeLists.txt b/stack/CMakeLists.txt +index 69454f2..45f131d 100644 +--- a/stack/CMakeLists.txt ++++ b/stack/CMakeLists.txt +@@ -110,3 +110,8 @@ ELSEIF((CMAKE_SYSTEM_NAME STREQUAL "Generic") AND (CMAKE_SYSTEM_PROCESSOR STREQU + ELSE() + MESSAGE(FATAL_ERROR "Unknown Platform and processor combination ${CMAKE_SYSTEM_NAME} and ${CMAKE_SYSTEM_PROCESSOR}!!") + ENDIF() ++ ++################################################################################ ++# Install oplk headers files ++################################################################################ ++INSTALL(DIRECTORY ${STACK_INCLUDE_DIR}/oplk DESTINATION "include") +-- +2.9.4 + diff --git a/package/openpowerlink/0003-Add-top-level-CMakeLists.txt.patch b/package/openpowerlink/0003-Add-top-level-CMakeLists.txt.patch new file mode 100644 index 00000000..cd8f9274 --- /dev/null +++ b/package/openpowerlink/0003-Add-top-level-CMakeLists.txt.patch @@ -0,0 +1,201 @@ +From cd0945a323cecb638ce56f2e3d7fb4e8c004b98b Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Wed, 25 May 2016 15:59:20 +0200 +Subject: [PATCH] Add top level CMakeLists.txt + +This CMakeLists.txt can be used to build openpowerlink +using a automated build system. + +Don't use FIND_LIBRARY when the stack is built from a top +level build (ie CFG_OPLK_LIB is ON). +For a top level build, CMake will automatically add a build +dependency on oplk libraries for building demos applications. + +Also replace OPLKLIB_DEBUG by OPLKLIB in OPLK_LINK_LIBRARIES macro +if CMAKE_BUILD_TYPE is "Debug", otherwise TARGET_LINK_LIBRARIES can't +find the openpowerlink library. +This issue may be related to: +https://github.com/OpenAutomationTechnologies/openPOWERLINK_V2/issues/109 + +Fixes: +http://autobuild.buildroot.net/results/da4/da445b65cb136d71577f04e3a17fdb2ef6302a9b + +This patch has not been accepted by upstream: +https://github.com/openPOWERLINK/openPOWERLINK_V2/pull/57 + +Add PCIe support (v2.3.2) + +Signed-off-by: Romain Naour +--- + CMakeLists.txt | 42 +++++++++++++++++ + apps/common/cmake/findoplklib.cmake | 68 +++++++++++++++------------- + apps/common/cmake/linkoplklib.cmake | 2 +- + drivers/linux/drv_daemon_pcap/CMakeLists.txt | 12 +++-- + 4 files changed, 89 insertions(+), 35 deletions(-) + create mode 100644 CMakeLists.txt + +diff --git a/CMakeLists.txt b/CMakeLists.txt +new file mode 100644 +index 0000000..28d4e7a +--- /dev/null ++++ b/CMakeLists.txt +@@ -0,0 +1,42 @@ ++ ++CMAKE_MINIMUM_REQUIRED (VERSION 2.8.7) ++ ++#### LIB #### ++ ++IF (CFG_OPLK_LIB) ++ ADD_SUBDIRECTORY("stack") ++ENDIF (CFG_OPLK_LIB) ++ ++#### Linux kernel Ethernet module #### ++ ++IF (CFG_KERNEL_DRIVERS) ++ ADD_SUBDIRECTORY("drivers/linux/drv_kernelmod_edrv") ++ENDIF (CFG_KERNEL_DRIVERS) ++ ++#### Linux kernel PCIe module #### ++ ++IF (CFG_KERNEL_PCIE_DRIVERS) ++ ADD_SUBDIRECTORY("drivers/linux/drv_kernelmod_pcie") ++ENDIF (CFG_KERNEL_PCIE_DRIVERS) ++ ++#### Pcap userspace driver #### ++ ++IF (CFG_PCAP_DAEMON) ++ ADD_SUBDIRECTORY("drivers/linux/drv_daemon_pcap") ++ENDIF (CFG_PCAP_DAEMON) ++ ++#### OpenPowerLink Demos #### ++ ++# Add subdirectory of CN console demo application ++IF (CFG_DEMO_CN_CONSOLE) ++ ADD_SUBDIRECTORY("apps/demo_cn_console") ++ENDIF (CFG_DEMO_CN_CONSOLE) ++ ++# Add subdirectory of MN console demo application ++IF (CFG_DEMO_MN_CONSOLE) ++ ADD_SUBDIRECTORY("apps/demo_mn_console") ++ENDIF (CFG_DEMO_MN_CONSOLE) ++ ++IF (CFG_DEMO_MN_QT) ++ ADD_SUBDIRECTORY("apps/demo_mn_qt") ++ENDIF (CFG_DEMO_MN_QT) +diff --git a/apps/common/cmake/findoplklib.cmake b/apps/common/cmake/findoplklib.cmake +index f7e710f..b8b04c5 100644 +--- a/apps/common/cmake/findoplklib.cmake ++++ b/apps/common/cmake/findoplklib.cmake +@@ -85,36 +85,42 @@ MACRO(FIND_OPLK_LIBRARY OPLK_NODE_TYPE) + # Set oplk library directory + SET(OPLKLIB_DIR ${OPLK_BASE_DIR}/stack/lib/${SYSTEM_NAME_DIR}/${SYSTEM_PROCESSOR_DIR}) + +- IF((CMAKE_GENERATOR MATCHES "Visual Studio") OR (CMAKE_BUILD_TYPE STREQUAL "Release")) +- # Search for release library +- UNSET(OPLKLIB CACHE) +- MESSAGE(STATUS "Searching for LIBRARY ${OPLKLIB_NAME} in ${OPLKLIB_DIR}") +- FIND_LIBRARY(OPLKLIB NAME ${OPLKLIB_NAME} +- HINTS ${OPLKLIB_DIR} ${OPLKLIB_DIR}/${CFG_DEMO_BOARD_NAME}/${CFG_DEMO_NAME}) +- +- IF(CMAKE_SYSTEM_NAME STREQUAL "Windows") +- +- UNSET(OPLKDLL CACHE) +- FIND_PROGRAM(OPLKDLL NAME ${OPLKLIB_NAME}.dll +- HINTS ${OPLKLIB_DIR}) +- +- ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Windows") +- ENDIF() +- +- IF((CMAKE_GENERATOR MATCHES "Visual Studio") OR (CMAKE_BUILD_TYPE STREQUAL "Debug")) +- # Search for debug library +- UNSET(OPLKLIB_DEBUG CACHE) +- MESSAGE(STATUS "Searching for LIBRARY ${OPLKLIB_DEBUG_NAME} in ${OPLKLIB_DIR}") +- FIND_LIBRARY(OPLKLIB_DEBUG NAME ${OPLKLIB_DEBUG_NAME} +- HINTS ${OPLKLIB_DIR} ${OPLKLIB_DIR}/${CFG_DEMO_BOARD_NAME}/${CFG_DEMO_NAME}) +- +- IF(CMAKE_SYSTEM_NAME STREQUAL "Windows") +- +- UNSET(OPLKDLL_DEBUG CACHE) +- FIND_PROGRAM(OPLKDLL_DEBUG NAME ${OPLKLIB_DEBUG_NAME}.dll +- HINTS ${OPLKLIB_DIR}) +- +- ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Windows") +- ENDIF() ++ # Don't look for oplk libraries for a top level build ++ IF(CFG_OPLK_LIB) ++ SET(OPLKLIB ${OPLKLIB_NAME}) ++ SET(OPLKLIB_DEBUG ${OPLKLIB_DEBUG_NAME}) ++ ELSE(CFG_OPLK_LIB) ++ IF((CMAKE_GENERATOR MATCHES "Visual Studio") OR (CMAKE_BUILD_TYPE STREQUAL "Release")) ++ # Search for release library ++ UNSET(OPLKLIB CACHE) ++ MESSAGE(STATUS "Searching for LIBRARY ${OPLKLIB_NAME} in ${OPLKLIB_DIR}") ++ FIND_LIBRARY(OPLKLIB NAME ${OPLKLIB_NAME} ++ HINTS ${OPLKLIB_DIR} ${OPLKLIB_DIR}/${CFG_DEMO_BOARD_NAME}/${CFG_DEMO_NAME}) ++ ++ IF(CMAKE_SYSTEM_NAME STREQUAL "Windows") ++ ++ UNSET(OPLKDLL CACHE) ++ FIND_PROGRAM(OPLKDLL NAME ${OPLKLIB_NAME}.dll ++ HINTS ${OPLKLIB_DIR}) ++ ++ ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Windows") ++ ENDIF() ++ ++ IF((CMAKE_GENERATOR MATCHES "Visual Studio") OR (CMAKE_BUILD_TYPE STREQUAL "Debug")) ++ # Search for debug library ++ UNSET(OPLKLIB_DEBUG CACHE) ++ MESSAGE(STATUS "Searching for LIBRARY ${OPLKLIB_DEBUG_NAME} in ${OPLKLIB_DIR}") ++ FIND_LIBRARY(OPLKLIB_DEBUG NAME ${OPLKLIB_DEBUG_NAME} ++ HINTS ${OPLKLIB_DIR} ${OPLKLIB_DIR}/${CFG_DEMO_BOARD_NAME}/${CFG_DEMO_NAME}) ++ ++ IF(CMAKE_SYSTEM_NAME STREQUAL "Windows") ++ ++ UNSET(OPLKDLL_DEBUG CACHE) ++ FIND_PROGRAM(OPLKDLL_DEBUG NAME ${OPLKLIB_DEBUG_NAME}.dll ++ HINTS ${OPLKLIB_DIR}) ++ ++ ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Windows") ++ ENDIF() ++ ENDIF(CFG_OPLK_LIB) + + ENDMACRO(FIND_OPLK_LIBRARY) +diff --git a/apps/common/cmake/linkoplklib.cmake b/apps/common/cmake/linkoplklib.cmake +index 49aab66..d9fd418 100644 +--- a/apps/common/cmake/linkoplklib.cmake ++++ b/apps/common/cmake/linkoplklib.cmake +@@ -33,7 +33,7 @@ MACRO(OPLK_LINK_LIBRARIES EXECUTABLE_NAME) + TARGET_LINK_LIBRARIES(${EXECUTABLE_NAME} optimized ${OPLKLIB} debug ${OPLKLIB_DEBUG}) + ELSE() + IF(${CMAKE_BUILD_TYPE} STREQUAL "Debug") +- TARGET_LINK_LIBRARIES(${EXECUTABLE_NAME} debug ${OPLKLIB_DEBUG}) ++ TARGET_LINK_LIBRARIES(${EXECUTABLE_NAME} debug ${OPLKLIB}) + ELSE () + TARGET_LINK_LIBRARIES(${EXECUTABLE_NAME} optimized ${OPLKLIB}) + ENDIF() +diff --git a/drivers/linux/drv_daemon_pcap/CMakeLists.txt b/drivers/linux/drv_daemon_pcap/CMakeLists.txt +index 2b4a2c1..ecceb4c 100644 +--- a/drivers/linux/drv_daemon_pcap/CMakeLists.txt ++++ b/drivers/linux/drv_daemon_pcap/CMakeLists.txt +@@ -109,9 +109,15 @@ ENDIF() + SET(OPLKLIB_DIR ${OPLK_BASE_DIR}/stack/lib/${SYSTEM_NAME_DIR}/${SYSTEM_PROCESSOR_DIR}) + SET(OPLKLIB_INCDIR ${OPLK_BASE_DIR}/stack/proj/${SYSTEM_NAME_DIR}/lib${LIB_NAME}) + +-UNSET(OPLKLIB CACHE) +-FIND_LIBRARY(OPLKLIB NAME ${LIB_NAME}${BUILD_TYPE_EXT} +- HINTS ${OPLKLIB_DIR}) ++# Don't look for oplk libraries for a top level build ++IF(CFG_OPLK_LIB) ++ SET(OPLKLIB ${LIB_NAME}${BUILD_TYPE_EXT}) ++ELSE(CFG_OPLK_LIB) ++ UNSET(OPLKLIB CACHE) ++ FIND_LIBRARY(OPLKLIB NAME ${LIB_NAME}${BUILD_TYPE_EXT} ++ HINTS ${OPLKLIB_DIR}) ++ENDIF(CFG_OPLK_LIB) ++ + INCLUDE_DIRECTORIES(${OPLKLIB_INCDIR}) + + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -pedantic -std=c99 -pthread -fno-strict-aliasing") +-- +2.9.4 + diff --git a/package/openpowerlink/Config.in b/package/openpowerlink/Config.in new file mode 100644 index 00000000..1a3dd62a --- /dev/null +++ b/package/openpowerlink/Config.in @@ -0,0 +1,127 @@ +comment "openpowerlink needs a toolchain w/ C++, threads" + depends on BR2_i386 || BR2_x86_64 + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_OPENPOWERLINK + bool "openpowerlink" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_i386 || BR2_x86_64 + help + openPOWERLINK is an Open Source Industrial Ethernet stack + implementing the POWERLINK protocol for Managing Node (MN, + POWERLINK Master) and Controlled Node (CN, POWERLINK Slave). + + It is provided by + SYSTEC electronic (http://www.systec-electronic.com), + B&R (http://www.br-automation.com) and + Kalycito (http://www.kalycito.com). + + http://openpowerlink.sourceforge.net/web/ + +if BR2_PACKAGE_OPENPOWERLINK + +choice + prompt "MN/CN mode" + +config BR2_PACKAGE_OPENPOWERLINK_MN + bool "Managing Node" + help + Enable Managing Node (master) mode + +config BR2_PACKAGE_OPENPOWERLINK_CN + bool "Controlled Node" + help + Enable Controlled Node (slave) mode + +endchoice + +choice + prompt "stack type" + +config BR2_PACKAGE_OPENPOWERLINK_STACK_MONOLITHIC_USER_STACK_LIB + bool "linked into application" + select BR2_PACKAGE_LIBPCAP + help + Compile a monolithic openPOWERLINK library. The library + contains an Ethernet driver which is using the PCAP library + for accessing the network. No kernel-side driver is needed. + +config BR2_PACKAGE_OPENPOWERLINK_STACK_USERSPACE_DAEMON_LIB + bool "user-space pcap daemon" + select BR2_PACKAGE_LIBPCAP + help + Compile openPOWERLINK application library which contains the + interface to a Linux user space driver, and the Linux user + space driver. It is used for implementing a multi-process + solution where the openPOWERLINK layer is running as a + separate Linux user space daemon (i.e. a PCAP based user + space daemon). No kernel-side stack is needed. + +config BR2_PACKAGE_OPENPOWERLINK_STACK_KERNEL_STACK_LIB + bool "kernel-space driver" + depends on BR2_LINUX_KERNEL + help + Compile openPOWERLINK application library which contains the + interface to a Linux kernel space driver. This will also + build and install a Linux kernel module openPOWERLINK + driver. + +config BR2_PACKAGE_OPENPOWERLINK_STACK_KERNEL_PCIE_STACK_LIB + bool "kernel-space PCIe driver" + depends on BR2_LINUX_KERNEL + depends on BR2_PACKAGE_OPENPOWERLINK_MN # MN support only + help + Compile openPOWERLINK application library which contains the + interface to a Linux kernel PCIe interface driver. The kernel + part of the openPOWERLINK stack is located on an external PCIe + device. The status/control and data exchange between the + application and kernel stack is handled by the PCIe interface + driver. + +comment "openpowerlink kernel stack needs a Linux kernel to be built" + depends on !BR2_LINUX_KERNEL + +endchoice + +if BR2_PACKAGE_OPENPOWERLINK_STACK_KERNEL_STACK_LIB + +menu "Ethernet drivers" + +config BR2_PACKAGE_OPENPOWERLINK_KERNEL_DRIVER_82573 + bool "Intel 82573" + default y + +config BR2_PACKAGE_OPENPOWERLINK_KERNEL_DRIVER_8255x + bool "Intel 8255x" + +config BR2_PACKAGE_OPENPOWERLINK_KERNEL_DRIVER_I210 + bool "Intel I210" + +config BR2_PACKAGE_OPENPOWERLINK_KERNEL_DRIVER_RTL8111 + bool "Realtek RTL-8111/8168" + +config BR2_PACKAGE_OPENPOWERLINK_KERNEL_DRIVER_RTL8139 + bool "Realtek RTL-8139" + +endmenu + +endif # BR2_PACKAGE_OPENPOWERLINK_STACK_KERNEL_STACK_LIB + +config BR2_PACKAGE_OPENPOWERLINK_KERNEL_PCIE_DRIVER + bool "PCIe Powerlink Driver" + depends on BR2_PACKAGE_OPENPOWERLINK_STACK_KERNEL_PCIE_STACK_LIB + +menu "demos" + +config BR2_PACKAGE_OPENPOWERLINK_DEMO_MN_CONSOLE + bool "console MN demo" + depends on BR2_PACKAGE_OPENPOWERLINK_MN + +config BR2_PACKAGE_OPENPOWERLINK_DEMO_CN_CONSOLE + bool "console CN demo" + depends on BR2_PACKAGE_OPENPOWERLINK_CN + +endmenu + +endif # BR2_PACKAGE_OPENPOWERLINK diff --git a/package/openpowerlink/openpowerlink.hash b/package/openpowerlink/openpowerlink.hash new file mode 100644 index 00000000..cd00f902 --- /dev/null +++ b/package/openpowerlink/openpowerlink.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/openpowerlink/files/openPOWERLINK/V2.7.1/ +md5 04524d1b1f9946176dce0ccb0eecf537 openPOWERLINK_V2.7.1.tar.gz +sha1 4ee9c6e26bbc729fdbbb272155b093ffa0d9cefd openPOWERLINK_V2.7.1.tar.gz +# sha256 locally computed +sha256 d0d65f4fb8f2ad209cf9575714f88f33168a1cf71e8f1801e1e1ac4df6a37ffd openPOWERLINK_V2.7.1.tar.gz +sha256 348e31e9e5094104463d58d33abd31049fdf209afbc12ea7abb7fd4b4a147429 license.md diff --git a/package/openpowerlink/openpowerlink.mk b/package/openpowerlink/openpowerlink.mk new file mode 100644 index 00000000..46dc3d10 --- /dev/null +++ b/package/openpowerlink/openpowerlink.mk @@ -0,0 +1,153 @@ +################################################################################ +# +# openpowerlink +# +################################################################################ + +OPENPOWERLINK_VERSION = 2.7.1 +OPENPOWERLINK_SITE = https://downloads.sourceforge.net/project/openpowerlink/openPOWERLINK/V$(OPENPOWERLINK_VERSION) +OPENPOWERLINK_SOURCE = openPOWERLINK_V$(OPENPOWERLINK_VERSION).tar.gz +OPENPOWERLINK_LICENSE = BSD-2-Clause, GPL-2.0 +OPENPOWERLINK_LICENSE_FILES = license.md + +OPENPOWERLINK_INSTALL_STAGING = YES + +# The archive has no leading component. +OPENPOWERLINK_STRIP_COMPONENTS = 0 + +OPENPOWERLINK_MN_ONOFF = $(if $(BR2_PACKAGE_OPENPOWERLINK_MN),ON,OFF) +OPENPOWERLINK_CN_ONOFF = $(if $(BR2_PACKAGE_OPENPOWERLINK_CN),ON,OFF) + +#### OPLK LIBRARY #### + +# Always build a oplk stack +# Disable library with simulation interface +# Disable zynq/FPGA (PCIe) interface +OPENPOWERLINK_CONF_OPTS += -DCFG_OPLK_LIB=ON \ + -DCFG_COMPILE_LIB_MN_SIM=OFF \ + -DCFG_COMPILE_LIB_CN_SIM=OFF \ + -DCFG_COMPILE_LIB_MNAPP_ZYNQINTF=OFF + +# All option are ON by default +ifeq ($(BR2_PACKAGE_OPENPOWERLINK_STACK_MONOLITHIC_USER_STACK_LIB),y) +OPENPOWERLINK_DEPENDENCIES += libpcap +OPENPOWERLINK_CONF_OPTS += \ + -DCFG_COMPILE_LIB_MN=$(OPENPOWERLINK_MN_ONOFF) \ + -DCFG_COMPILE_LIB_MNAPP_USERINTF=OFF \ + -DCFG_COMPILE_LIB_MNAPP_KERNELINTF=OFF \ + -DCFG_COMPILE_LIB_MNAPP_PCIEINTF=OFF \ + -DCFG_COMPILE_LIB_MNDRV_PCAP=OFF \ + -DCFG_COMPILE_LIB_CN=$(OPENPOWERLINK_CN_ONOFF) \ + -DCFG_COMPILE_LIB_CNAPP_USERINTF=OFF \ + -DCFG_COMPILE_LIB_CNAPP_KERNELINTF=OFF \ + -DCFG_COMPILE_LIB_CNDRV_PCAP=OFF \ + -DPCAP_CONFIG="$(STAGING_DIR)/usr/bin/pcap-config" +else ifeq ($(BR2_PACKAGE_OPENPOWERLINK_STACK_USERSPACE_DAEMON_LIB),y) +OPENPOWERLINK_DEPENDENCIES += libpcap +OPENPOWERLINK_CONF_OPTS += \ + -DCFG_COMPILE_LIB_MN=OFF \ + -DCFG_COMPILE_LIB_MNAPP_USERINTF=$(OPENPOWERLINK_MN_ONOFF) \ + -DCFG_COMPILE_LIB_MNAPP_KERNELINTF=OFF \ + -DCFG_COMPILE_LIB_MNAPP_PCIEINTF=OFF \ + -DCFG_COMPILE_LIB_MNDRV_PCAP=$(OPENPOWERLINK_MN_ONOFF) \ + -DCFG_COMPILE_LIB_CN=OFF \ + -DCFG_COMPILE_LIB_CNAPP_USERINTF=$(OPENPOWERLINK_CN_ONOFF) \ + -DCFG_COMPILE_LIB_CNAPP_KERNELINTF=OFF \ + -DCFG_COMPILE_LIB_CNDRV_PCAP=$(OPENPOWERLINK_CN_ONOFF) \ + -DPCAP_CONFIG="$(STAGING_DIR)/usr/bin/pcap-config" +else ifeq ($(BR2_PACKAGE_OPENPOWERLINK_STACK_KERNEL_STACK_LIB),y) +OPENPOWERLINK_CONF_OPTS += \ + -DCFG_COMPILE_LIB_MN=OFF \ + -DCFG_COMPILE_LIB_MNAPP_USERINTF=OFF \ + -DCFG_COMPILE_LIB_MNAPP_KERNELINTF=$(OPENPOWERLINK_MN_ONOFF) \ + -DCFG_COMPILE_LIB_MNAPP_PCIEINTF=OFF \ + -DCFG_COMPILE_LIB_MNDRV_PCAP=OFF \ + -DCFG_COMPILE_LIB_CN=OFF \ + -DCFG_COMPILE_LIB_CNAPP_USERINTF=OFF \ + -DCFG_COMPILE_LIB_CNAPP_KERNELINTF=$(OPENPOWERLINK_CN_ONOFF) \ + -DCFG_COMPILE_LIB_CNDRV_PCAP=OFF +else ifeq ($(BR2_PACKAGE_OPENPOWERLINK_STACK_KERNEL_PCIE_STACK_LIB),y) +OPENPOWERLINK_CONF_OPTS += \ + -DCFG_COMPILE_LIB_MN=OFF \ + -DCFG_COMPILE_LIB_MNAPP_USERINTF=OFF \ + -DCFG_COMPILE_LIB_MNAPP_KERNELINTF=OFF \ + -DCFG_COMPILE_LIB_MNAPP_PCIEINTF=$(OPENPOWERLINK_MN_ONOFF) \ + -DCFG_COMPILE_LIB_MNDRV_PCAP=OFF \ + -DCFG_COMPILE_LIB_CN=OFF \ + -DCFG_COMPILE_LIB_CNAPP_USERINTF=OFF \ + -DCFG_COMPILE_LIB_CNAPP_KERNELINTF=OFF \ + -DCFG_COMPILE_LIB_CNDRV_PCAP=OFF +endif + +OPENPOWERLINK_CONF_OPTS += \ + -DCFG_COMPILE_SHARED_LIBRARY=$(if $(BR2_STATIC_LIBS),OFF,ON) + +#### OPLK KERNEL DRIVERS #### + +ifeq ($(BR2_PACKAGE_OPENPOWERLINK_STACK_KERNEL_STACK_LIB)$(BR2_PACKAGE_OPENPOWERLINK_KERNEL_PCIE_DRIVER),y) +OPENPOWERLINK_DEPENDENCIES += linux + +OPENPOWERLINK_CONF_OPTS += \ + -DCFG_KERNEL_DIR="$(LINUX_DIR)" \ + -DCMAKE_SYSTEM_VERSION="$(LINUX_VERSION)" \ + -DCFG_OPLK_MN="$(OPENPOWERLINK_MN_ONOFF)" \ + -DMAKE_KERNEL_ARCH="$(KERNEL_ARCH)" \ + -DMAKE_KERNEL_CROSS_COMPILE="$(CCACHE) $(TARGET_CROSS)" +endif + +ifeq ($(BR2_PACKAGE_OPENPOWERLINK_STACK_KERNEL_STACK_LIB),y) +OPENPOWERLINK_CONF_OPTS += -DCFG_KERNEL_DRIVERS=ON \ + -DCFG_POWERLINK_EDRV_82573=$(if $(BR2_PACKAGE_OPENPOWERLINK_KERNEL_DRIVER_82573),ON,OFF) \ + -DCFG_POWERLINK_EDRV_8255X=$(if $(BR2_PACKAGE_OPENPOWERLINK_KERNEL_DRIVER_8255x),ON,OFF) \ + -DCFG_POWERLINK_EDRV_I210=$(if $(BR2_PACKAGE_OPENPOWERLINK_KERNEL_DRIVER_I210),ON,OFF) \ + -DCFG_POWERLINK_EDRV_8111=$(if $(BR2_PACKAGE_OPENPOWERLINK_KERNEL_DRIVER_RTL8111),ON,OFF) \ + -DCFG_POWERLINK_EDRV_8139=$(if $(BR2_PACKAGE_OPENPOWERLINK_KERNEL_DRIVER_RTL8139),ON,OFF) +else +OPENPOWERLINK_CONF_OPTS += -DCFG_KERNEL_DRIVERS=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENPOWERLINK_KERNEL_PCIE_DRIVER),y) +OPENPOWERLINK_CONF_OPTS += -DCFG_KERNEL_PCIE_DRIVERS=ON +else +OPENPOWERLINK_CONF_OPTS += -DCFG_KERNEL_PCIE_DRIVERS=OFF +endif + +#### OPLK PCAP DAEMON #### + +ifeq ($(BR2_PACKAGE_OPENPOWERLINK_STACK_USERSPACE_DAEMON_LIB),y) +OPENPOWERLINK_CONF_OPTS += \ + -DCFG_PCAP_DAEMON=ON \ + -DCFG_OPLK_MN=$(OPENPOWERLINK_MN_ONOFF) +endif + +#### OPLK DEMO APPS #### + +# See apps/common/cmake/configure-linux.cmake for available options list. +ifeq ($(BR2_PACKAGE_OPENPOWERLINK_STACK_MONOLITHIC_USER_STACK_LIB),y) +OPENPOWERLINK_CONF_OPTS += \ + -DCFG_BUILD_KERNEL_STACK="Link to Application" +else ifeq ($(BR2_PACKAGE_OPENPOWERLINK_STACK_USERSPACE_DAEMON_LIB),y) +OPENPOWERLINK_CONF_OPTS += \ + -DCFG_BUILD_KERNEL_STACK="Linux Userspace Daemon" +else ifeq ($(BR2_PACKAGE_OPENPOWERLINK_STACK_KERNEL_STACK_LIB),y) +OPENPOWERLINK_CONF_OPTS += \ + -DCFG_BUILD_KERNEL_STACK="Linux Kernel Module" +else ifeq ($(BR2_PACKAGE_OPENPOWERLINK_STACK_KERNEL_PCIE_STACK_LIB),y) +OPENPOWERLINK_CONF_OPTS += \ + -DCFG_BUILD_KERNEL_STACK="Kernel stack on PCIe card" +endif + +ifeq ($(BR2_PACKAGE_OPENPOWERLINK_DEMO_MN_CONSOLE),y) +OPENPOWERLINK_CONF_OPTS += -DCFG_DEMO_MN_CONSOLE=ON \ + -DCFG_DEMO_MN_CONSOLE_USE_SYNCTHREAD=ON +else +OPENPOWERLINK_CONF_OPTS += -DCFG_DEMO_MN_CONSOLE=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENPOWERLINK_DEMO_CN_CONSOLE),y) +OPENPOWERLINK_CONF_OPTS += -DCFG_DEMO_CN_CONSOLE=ON +else +OPENPOWERLINK_CONF_OPTS += -DCFG_DEMO_CN_CONSOLE=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/openrc/0001-init.d-sysctl.in-add-support-for-busybox-sysctl.patch b/package/openrc/0001-init.d-sysctl.in-add-support-for-busybox-sysctl.patch new file mode 100644 index 00000000..da8cf042 --- /dev/null +++ b/package/openrc/0001-init.d-sysctl.in-add-support-for-busybox-sysctl.patch @@ -0,0 +1,66 @@ +From ec1a0c8fa2e7a7c6cf70f68bdabc07cbb1a567cf Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20=C5=81yszczek?= +Date: Sun, 5 May 2019 23:43:40 +0200 +Subject: [PATCH] init.d/sysctl.in: add support for busybox sysctl +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Busybox version of sysctl does not support --system argument, +and files need to be loaded one by one. This patch adds code +to recognize busybox sysctl and execute proper function based +on that. + +Signed-off-by: Michał Łyszczek +--- + init.d/sysctl.in | 27 ++++++++++++++++++++++++++- + 1 file changed, 26 insertions(+), 1 deletion(-) + +diff --git a/init.d/sysctl.in b/init.d/sysctl.in +index e49f4db2..a705b3d4 100644 +--- a/init.d/sysctl.in ++++ b/init.d/sysctl.in +@@ -37,6 +37,23 @@ BSD_sysctl() + return $retval + } + ++Busybox_sysctl() ++{ ++ local quiet ++ yesno $rc_verbose || quiet=-q ++ ++ eindent ++ for conf in /etc/sysctl.conf /etc/sysctl.d/*.conf; do ++ if [ -r "$conf" ]; then ++ vebegin "applying $conf" ++ sysctl $quiet -p "$conf" || retval=1 ++ veend $retval ++ fi ++ done ++ eoutdent ++ return $retval ++} ++ + Linux_sysctl() + { + local quiet +@@ -52,7 +69,15 @@ start() + ebegin "Configuring kernel parameters" + case "$RC_UNAME" in + *BSD|GNU) BSD_sysctl; rc=$? ;; +- Linux) Linux_sysctl; rc=$? ;; ++ Linux) ++ sysctl -h > /dev/null 2>&1 ++ if [ $? -ne 0 ]; then ++ # busybox version of sysctl does not recognize -h option ++ Busybox_sysctl ++ else ++ Linux_sysctl ++ fi ++ rc=$? ;; + esac + eend $rc "Unable to configure some kernel parameters" + } +-- +2.18.1 + diff --git a/package/openrc/0002-sh-init.sh.Linux.in-change-run-lock-from-root-uucp-t.patch b/package/openrc/0002-sh-init.sh.Linux.in-change-run-lock-from-root-uucp-t.patch new file mode 100644 index 00000000..66bbba42 --- /dev/null +++ b/package/openrc/0002-sh-init.sh.Linux.in-change-run-lock-from-root-uucp-t.patch @@ -0,0 +1,34 @@ +From 5ae8209afad9a4284723712b46d8685e7f7fd72c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20=C5=81yszczek?= +Date: Mon, 6 May 2019 00:06:39 +0200 +Subject: [PATCH] sh/init.sh.Linux.in: change /run/lock from root:uucp to + root:daemon +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +On gentoo /run/lock is owned by uucp group because of historical +reasons. However uucp does not exist on buildroot by default, and +it makes more sense that 'daemon' group should own this directory. + +Signed-off-by: Michał Łyszczek +--- + sh/init.sh.Linux.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sh/init.sh.Linux.in b/sh/init.sh.Linux.in +index 222bbd3b..7f1a88db 100644 +--- a/sh/init.sh.Linux.in ++++ b/sh/init.sh.Linux.in +@@ -85,7 +85,7 @@ fi + + [ -x /sbin/restorecon ] && /sbin/restorecon -rF /run + checkpath -d $RC_SVCDIR +-checkpath -d -m 0775 -o root:uucp /run/lock ++checkpath -d -m 0775 -o root:daemon /run/lock + + # Try to mount xenfs as early as possible, otherwise rc_sys() will always + # return RC_SYS_XENU and will think that we are in a domU while it's not. +-- +2.18.1 + diff --git a/package/openrc/0003-init.d-agetty-replace-sbin-agetty-by-sbin-getty.patch b/package/openrc/0003-init.d-agetty-replace-sbin-agetty-by-sbin-getty.patch new file mode 100644 index 00000000..feeff222 --- /dev/null +++ b/package/openrc/0003-init.d-agetty-replace-sbin-agetty-by-sbin-getty.patch @@ -0,0 +1,33 @@ +From b39ab180358ed451eae9df900f49a72ef1eb7442 Mon Sep 17 00:00:00 2001 +From: Carlos Santos +Date: Sun, 1 Mar 2020 09:04:48 -0300 +Subject: [PATCH] init.d/agetty: replace /sbin/agetty by /sbin/getty + +In Buildroot getty is provided by BusyBox or util-linux (agetty). Both +create a /sbin/getty symlink pointing to the actual program, so make the +agetty service use that path instead of /sbin/agetty. + +The patch is required because it's not possible to override the command +by means of a configuration file. + +Signed-off-by: Carlos Santos +--- + init.d/agetty.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/init.d/agetty.in b/init.d/agetty.in +index e4866f7a..e1864628 100644 +--- a/init.d/agetty.in ++++ b/init.d/agetty.in +@@ -14,7 +14,7 @@ supervisor=supervise-daemon + port="${RC_SVCNAME#*.}" + respawn_period="${respawn_period:-60}" + term_type="${term_type:-linux}" +-command=/sbin/agetty ++command=/sbin/getty + command_args_foreground="${agetty_options} ${port} ${baud} ${term_type}" + pidfile="/run/${RC_SVCNAME}.pid" + +-- +2.18.2 + diff --git a/package/openrc/0004-init.d-agetty-start-agetty-after-all-sevices.patch b/package/openrc/0004-init.d-agetty-start-agetty-after-all-sevices.patch new file mode 100644 index 00000000..f1c927a4 --- /dev/null +++ b/package/openrc/0004-init.d-agetty-start-agetty-after-all-sevices.patch @@ -0,0 +1,29 @@ +From c2dc04f6b8c6784941b896e0b17c160dd43a566f Mon Sep 17 00:00:00 2001 +From: Carlos Santos +Date: Sun, 1 Mar 2020 11:14:37 -0300 +Subject: [PATCH] init.d/agetty: start agetty after all services + +This is required for Buildroot, to prevent mixing service initialization +messages with the getty prompt on devices with a single serial console. + +Signed-off-by: Carlos Santos +--- + init.d/agetty.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/init.d/agetty.in b/init.d/agetty.in +index e1864628..a1ad4e9f 100644 +--- a/init.d/agetty.in ++++ b/init.d/agetty.in +@@ -19,7 +19,7 @@ command_args_foreground="${agetty_options} ${port} ${baud} ${term_type}" + pidfile="/run/${RC_SVCNAME}.pid" + + depend() { +- after local ++ after * + keyword -prefix + provide getty + } +-- +2.18.2 + diff --git a/package/openrc/0005-runlevels-do-not-add-agetty.tty-1-6-if-MKSYSVINIT-ye.patch b/package/openrc/0005-runlevels-do-not-add-agetty.tty-1-6-if-MKSYSVINIT-ye.patch new file mode 100644 index 00000000..733506ad --- /dev/null +++ b/package/openrc/0005-runlevels-do-not-add-agetty.tty-1-6-if-MKSYSVINIT-ye.patch @@ -0,0 +1,34 @@ +From 014dc43447fa553e875984ac4a528e5916cc9e06 Mon Sep 17 00:00:00 2001 +From: Carlos Santos +Date: Sat, 29 Feb 2020 22:41:30 -0300 +Subject: [PATCH] runlevels: do not add agetty.tty[1-6] if MKSYSVINIT=yes + +Buildroot starts a single getty, according to the system configuration. +Also tty[1-6] may not exist (e.g. embedded devices with serial consoles +only). + +Signed-off-by: Carlos Santos +--- + runlevels/Makefile | 6 ------ + 1 file changed, 6 deletions(-) + +diff --git a/runlevels/Makefile b/runlevels/Makefile +index 73843d8b..dbfb59ca 100644 +--- a/runlevels/Makefile ++++ b/runlevels/Makefile +@@ -90,12 +90,6 @@ install: + fi; \ + ln -snf ${INITDIR}/"$$x" ${SHUTDOWNDIR}/"$$x" || exit $$?; done \ + fi +- if test "${MKSYSVINIT}" = yes && test "${OS}" = Linux; then \ +- for x in tty1 tty2 tty3 tty4 tty5 tty6; do \ +- ln -snf ${INITDIR}/agetty ${DESTDIR}/${INITDIR}/"agetty.$$x" || exit $$?; \ +- ln -snf ${INITDIR}/agetty.$$x ${DEFAULTDIR}/"agetty.$$x" || exit $$?; \ +- done; \ +- fi + + check test:: + +-- +2.18.2 + diff --git a/package/openrc/0006-src-rc-rc-logger.h-fix-build-failure-against-gcc-10.patch b/package/openrc/0006-src-rc-rc-logger.h-fix-build-failure-against-gcc-10.patch new file mode 100644 index 00000000..9fded3ca --- /dev/null +++ b/package/openrc/0006-src-rc-rc-logger.h-fix-build-failure-against-gcc-10.patch @@ -0,0 +1,52 @@ +From 375ef42393f3dc6edbaa2cb70c79b2366072db38 Mon Sep 17 00:00:00 2001 +From: Sergei Trofimovich +Date: Sun, 19 Jan 2020 15:24:20 +0000 +Subject: [PATCH] src/rc/rc-logger.h: fix build failure against gcc-10 + +On gcc-10 (and gcc-9 -fno-common) build fails as: + +``` +cc -L../librc -L../libeinfo -O2 -g -std=c99 -Wall -Wextra -Wimplicit -Wshadow \ + -Wformat=2 -Wmissing-prototypes -Wmissing-declarations -Wmissing-noreturn \ + -Wmissing-format-attribute -Wnested-externs -Winline -Wwrite-strings \ + -Wcast-align -Wcast-qual -Wpointer-arith -Wdeclaration-after-statement \ + -Wsequence-point -Werror=implicit-function-declaration \ + -Wl,-rpath=/lib -o openrc rc.o rc-logger.o rc-misc.o rc-plugin.o _usage.o -lutil -lrc -leinfo -Wl,-Bdynamic -ldl +ld: rc-logger.o:/home/slyfox/dev/git/openrc/src/rc/rc-logger.h:16: + multiple definition of `rc_logger_pid'; rc.o:openrc/src/rc/rc-logger.h:16: first defined here +ld: rc-logger.o:/home/slyfox/dev/git/openrc/src/rc/rc-logger.h:17: + multiple definition of `rc_logger_tty'; rc.o:openrc/src/rc/rc-logger.h:17: first defined here +``` + +gcc-10 will change the default from -fcommon to fno-common: +https://gcc.gnu.org/PR85678. + +The error also happens if CFLAGS=-fno-common passed explicitly. + +This fixes #348. + +[Patch taken from upstream: +https://github.com/OpenRC/openrc/commit/375ef42393f3dc6edbaa2cb70c79b2366072db38] +Signed-off-by: Heiko Thiery +--- + src/rc/rc-logger.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/rc/rc-logger.h b/src/rc/rc-logger.h +index bf6e3e57..1da294b0 100644 +--- a/src/rc/rc-logger.h ++++ b/src/rc/rc-logger.h +@@ -13,8 +13,8 @@ + #ifndef RC_LOGGER_H + #define RC_LOGGER_H + +-pid_t rc_logger_pid; +-int rc_logger_tty; ++extern pid_t rc_logger_pid; ++extern int rc_logger_tty; + extern bool rc_in_logger; + + void rc_logger_open(const char *runlevel); +-- +2.20.1 + diff --git a/package/openrc/0007-checkpath-fix-CVE-2018-21269.patch b/package/openrc/0007-checkpath-fix-CVE-2018-21269.patch new file mode 100644 index 00000000..121f2298 --- /dev/null +++ b/package/openrc/0007-checkpath-fix-CVE-2018-21269.patch @@ -0,0 +1,251 @@ +From b6fef599bf8493480664b766040fa9b0d4b1e335 Mon Sep 17 00:00:00 2001 +From: William Hubbs +Date: Fri, 20 Nov 2020 09:15:59 -0600 +Subject: [PATCH] checkpath: fix CVE-2018-21269 + +This walks the directory path to the file we are going to manipulate to make +sure that when we create the file and change the ownership and permissions +we are working on the same file. +Also, all non-terminal symbolic links must be owned by root. This will +keep a non-root user from making a symbolic link as described in the +bug. If root creates the symbolic link, it is assumed to be trusted. + +On non-linux platforms, we no longer follow non-terminal symbolic links +by default. If you need to do that, add the -s option on the checkpath +command line, but keep in mind that this is not secure. + +This fixes #201. + +[Patch taken from upstream: +https://github.com/OpenRC/openrc/commit/b6fef599bf8493480664b766040fa9b0d4b1e335] +Signed-off-by: Heiko Thiery +--- + man/openrc-run.8 | 6 +++ + src/rc/checkpath.c | 103 ++++++++++++++++++++++++++++++++++++++++++--- + 2 files changed, 102 insertions(+), 7 deletions(-) + +diff --git a/man/openrc-run.8 b/man/openrc-run.8 +index 1102daaa..ec4b88de 100644 +--- a/man/openrc-run.8 ++++ b/man/openrc-run.8 +@@ -461,6 +461,7 @@ Mark the service as inactive. + .Op Fl p , -pipe + .Op Fl m , -mode Ar mode + .Op Fl o , -owner Ar owner ++.Op Fl s , -symlinks + .Op Fl W , -writable + .Op Fl q , -quiet + .Ar path ... +@@ -481,6 +482,11 @@ or with names, and are separated by a colon. + The truncate options (-D and -F) cause the directory or file to be + cleared of all contents. + .Pp ++If -s is not specified on a non-linux platform, checkpath will refuse to ++allow non-terminal symbolic links to exist in the path. This is for ++security reasons so that a non-root user can't create a symbolic link to ++a root-owned file and take ownership of that file. ++.Pp + If -W is specified, checkpath checks to see if the first path given on + the command line is writable. This is different from how the test + command in the shell works, because it also checks to make sure the file +diff --git a/src/rc/checkpath.c b/src/rc/checkpath.c +index 448c9cf8..ff54a892 100644 +--- a/src/rc/checkpath.c ++++ b/src/rc/checkpath.c +@@ -16,6 +16,7 @@ + * except according to the terms contained in the LICENSE file. + */ + ++#define _GNU_SOURCE + #include + #include + +@@ -23,6 +24,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -44,7 +46,7 @@ typedef enum { + + const char *applet = NULL; + const char *extraopts ="path1 [path2] [...]"; +-const char *getoptstring = "dDfFpm:o:W" getoptstring_COMMON; ++const char *getoptstring = "dDfFpm:o:sW" getoptstring_COMMON; + const struct option longopts[] = { + { "directory", 0, NULL, 'd'}, + { "directory-truncate", 0, NULL, 'D'}, +@@ -53,6 +55,7 @@ const struct option longopts[] = { + { "pipe", 0, NULL, 'p'}, + { "mode", 1, NULL, 'm'}, + { "owner", 1, NULL, 'o'}, ++ { "symlinks", 0, NULL, 's'}, + { "writable", 0, NULL, 'W'}, + longopts_COMMON + }; +@@ -64,15 +67,92 @@ const char * const longopts_help[] = { + "Create a named pipe (FIFO) if not exists", + "Mode to check", + "Owner to check (user:group)", ++ "follow symbolic links (irrelivent on linux)", + "Check whether the path is writable or not", + longopts_help_COMMON + }; + const char *usagestring = NULL; + ++static int get_dirfd(char *path, bool symlinks) { ++ char *ch; ++ char *item; ++ char *linkpath = NULL; ++ char *path_dupe; ++ char *str; ++ int components = 0; ++ int dirfd; ++ int flags = 0; ++ int new_dirfd; ++ struct stat st; ++ ssize_t linksize; ++ ++ if (!path || *path != '/') ++ eerrorx("%s: empty or relative path", applet); ++ dirfd = openat(dirfd, "/", O_RDONLY); ++ if (dirfd == -1) ++ eerrorx("%s: unable to open the root directory: %s", ++ applet, strerror(errno)); ++ path_dupe = xstrdup(path); ++ ch = path_dupe; ++ while (*ch) { ++ if (*ch == '/') ++ components++; ++ ch++; ++ } ++ item = strtok(path_dupe, "/"); ++#ifdef O_PATH ++ flags |= O_PATH; ++#endif ++ if (!symlinks) ++ flags |= O_NOFOLLOW; ++ flags |= O_RDONLY; ++ while (dirfd > 0 && item && components > 1) { ++ str = xstrdup(linkpath ? linkpath : item); ++ new_dirfd = openat(dirfd, str, flags); ++ if (new_dirfd == -1) ++ eerrorx("%s: %s: could not open %s: %s", applet, path, str, ++ strerror(errno)); ++ if (fstat(new_dirfd, &st) == -1) ++ eerrorx("%s: %s: unable to stat %s: %s", applet, path, item, ++ strerror(errno)); ++ if (S_ISLNK(st.st_mode) ) { ++ if (st.st_uid != 0) ++ eerrorx("%s: %s: synbolic link %s not owned by root", ++ applet, path, str); ++ linksize = st.st_size+1; ++ if (linkpath) ++ free(linkpath); ++ linkpath = xmalloc(linksize); ++ memset(linkpath, 0, linksize); ++ if (readlinkat(new_dirfd, "", linkpath, linksize) != st.st_size) ++ eerrorx("%s: symbolic link destination changed", applet); ++ /* ++ * now follow the symlink. ++ */ ++ close(new_dirfd); ++ } else { ++ close(dirfd); ++ dirfd = new_dirfd; ++ free(linkpath); ++ linkpath = NULL; ++ item = strtok(NULL, "/"); ++ components--; ++ } ++ } ++ free(path_dupe); ++ if (linkpath) { ++ free(linkpath); ++ linkpath = NULL; ++ } ++ return dirfd; ++} ++ + static int do_check(char *path, uid_t uid, gid_t gid, mode_t mode, +- inode_t type, bool trunc, bool chowner, bool selinux_on) ++ inode_t type, bool trunc, bool chowner, bool symlinks, bool selinux_on) + { + struct stat st; ++ char *name = NULL; ++ int dirfd; + int fd; + int flags; + int r; +@@ -93,14 +173,16 @@ static int do_check(char *path, uid_t uid, gid_t gid, mode_t mode, + #endif + if (trunc) + flags |= O_TRUNC; +- readfd = open(path, readflags); ++ xasprintf(&name, "%s", basename_c(path)); ++ dirfd = get_dirfd(path, symlinks); ++ readfd = openat(dirfd, name, readflags); + if (readfd == -1 || (type == inode_file && trunc)) { + if (type == inode_file) { + einfo("%s: creating file", path); + if (!mode) /* 664 */ + mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH; + u = umask(0); +- fd = open(path, flags, mode); ++ fd = openat(dirfd, name, flags, mode); + umask(u); + if (fd == -1) { + eerror("%s: open: %s", applet, strerror(errno)); +@@ -122,7 +204,7 @@ static int do_check(char *path, uid_t uid, gid_t gid, mode_t mode, + strerror (errno)); + return -1; + } +- readfd = open(path, readflags); ++ readfd = openat(dirfd, name, readflags); + if (readfd == -1) { + eerror("%s: unable to open directory: %s", applet, + strerror(errno)); +@@ -140,7 +222,7 @@ static int do_check(char *path, uid_t uid, gid_t gid, mode_t mode, + strerror (errno)); + return -1; + } +- readfd = open(path, readflags); ++ readfd = openat(dirfd, name, readflags); + if (readfd == -1) { + eerror("%s: unable to open fifo: %s", applet, + strerror(errno)); +@@ -259,6 +341,7 @@ int main(int argc, char **argv) + int retval = EXIT_SUCCESS; + bool trunc = false; + bool chowner = false; ++ bool symlinks = false; + bool writable = false; + bool selinux_on = false; + +@@ -293,6 +376,11 @@ int main(int argc, char **argv) + eerrorx("%s: owner `%s' not found", + applet, optarg); + break; ++ case 's': ++#ifndef O_PATH ++ symlinks = true; ++#endif ++ break; + case 'W': + writable = true; + break; +@@ -320,7 +408,8 @@ int main(int argc, char **argv) + while (optind < argc) { + if (writable) + exit(!is_writable(argv[optind])); +- if (do_check(argv[optind], uid, gid, mode, type, trunc, chowner, selinux_on)) ++ if (do_check(argv[optind], uid, gid, mode, type, trunc, chowner, ++ symlinks, selinux_on)) + retval = EXIT_FAILURE; + optind++; + } +-- +2.20.1 + diff --git a/package/openrc/Config.in b/package/openrc/Config.in new file mode 100644 index 00000000..4691be63 --- /dev/null +++ b/package/openrc/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_OPENRC + bool "openrc" + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS + depends on BR2_INIT_OPENRC + select BR2_PACKAGE_BUSYBOX_SHOW_OTHERS # kmod tools + select BR2_PACKAGE_KMOD # runtime + select BR2_PACKAGE_KMOD_TOOLS # runtime + select BR2_PACKAGE_NCURSES + help + Init that works on top of pid 1 (for example + openrc-init). By default it does quite a lot on startup + (like setting hwclock, mounting directories, configuring + interfaces and so on). So for this init to properly work you + need at least these tools on the root filesystem (default + busybox configuration provides them all): + + swapon, fsck, hwclock, getty, login, grep, mount, coreutils, + procps, modprobe (kmod), net-tools + + Number of tools may be decreased by removing services that + use them. + + https://github.com/OpenRC/openrc + +comment "openrc needs a toolchain w/ dynamic library" + depends on BR2_USE_MMU + depends on BR2_INIT_OPENRC + depends on BR2_STATIC_LIBS diff --git a/package/openrc/openrc.hash b/package/openrc/openrc.hash new file mode 100644 index 00000000..bb588080 --- /dev/null +++ b/package/openrc/openrc.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 91a01ca6d930a0688fb91338209985de57cac7aa2d37feddacb78fd3d95308e2 openrc-0.42.1.tar.gz +sha256 96862463f4e77e2508e4fc2c83773fd24807cb699368b63fd93a5e2b466dd624 LICENSE diff --git a/package/openrc/openrc.mk b/package/openrc/openrc.mk new file mode 100644 index 00000000..d9010a60 --- /dev/null +++ b/package/openrc/openrc.mk @@ -0,0 +1,96 @@ +################################################################################ +# +# openrc +# +################################################################################ + +OPENRC_VERSION = 0.42.1 +OPENRC_SITE = $(call github,OpenRC,openrc,$(OPENRC_VERSION)) +OPENRC_LICENSE = BSD-2-Clause +OPENRC_LICENSE_FILES = LICENSE +OPENRC_CPE_ID_VENDOR = openrc_project + +# 0007-checkpath-fix-CVE-2018-21269.patch +OPENRC_IGNORE_CVES += CVE-2018-21269 + +OPENRC_DEPENDENCIES = ncurses + +# set LIBNAME so openrc puts files in proper directories and sets proper +# paths in installed files. Since in buildroot /lib64 and /lib32 always +# points to /lib, it's safe to hardcode it to "lib" +OPENRC_MAKE_OPTS = \ + LIBNAME=lib \ + LIBEXECDIR=/usr/libexec/rc \ + MKPKGCONFIG=no \ + MKSYSVINIT=yes \ + BRANDING="Buildroot $(BR2_VERSION_FULL)" \ + CC=$(TARGET_CC) + +ifeq ($(BR2_SHARED_LIBS),y) +OPENRC_MAKE_OPTS += MKSTATICLIBS=no +else +OPENRC_MAKE_OPTS += MKSTATICLIBS=yes +endif + +ifeq ($(BR2_PACKAGE_LIBSELINUX),y) +OPENRC_MAKE_OPTS += MKSELINUX=yes +OPENRC_DEPENDENCIES += libselinux +else +OPENRC_MAKE_OPTS += MKSELINUX=no +endif + +define OPENRC_BUILD_CMDS + $(MAKE) $(OPENRC_MAKE_OPTS) -C $(@D) +endef + +define OPENRC_INSTALL_TARGET_CMDS + $(MAKE) $(OPENRC_MAKE_OPTS) DESTDIR=$(TARGET_DIR) -C $(@D) install + $(INSTALL) -D -m 0755 $(OPENRC_PKGDIR)/sysv-rcs \ + $(TARGET_DIR)/etc/init.d/sysv-rcs +endef + +ifeq ($(BR2_PACKAGE_KBD),) +# keymaps and save-keymaps require kbd_mode and dumpkeys, respectively, so +# remove them if the kbd package is not selected (e.g. devices with serial +# console, only). +define OPENRC_NO_KBD + $(RM) $(TARGET_DIR)/etc/runlevels/boot/{keymaps,save-keymaps} + $(RM) $(TARGET_DIR)/etc/init.d/{keymaps,save-keymaps} + $(RM) $(TARGET_DIR)/etc/conf.d/keymaps +endef +OPENRC_POST_INSTALL_TARGET_HOOKS += OPENRC_NO_KBD +endif + +ifeq ($(BR2_PACKAGE_NETIFRC),y) +# netifrc replaces network, staticroute and loopback services which are +# installed by openrc +define OPENRC_NO_NET + $(RM) $(TARGET_DIR)/etc/runlevels/boot/{network,staticroute,loopback} + $(RM) $(TARGET_DIR)/etc/init.d/{network,staticroute,loopback} + $(RM) $(TARGET_DIR)/etc/conf.d/{network,staticroute,loopback} +endef +OPENRC_POST_INSTALL_TARGET_HOOKS += OPENRC_NO_NET +endif + +define OPENRC_REMOVE_UNNEEDED + $(RM) -r $(TARGET_DIR)/usr/share/openrc +endef +OPENRC_TARGET_FINALIZE_HOOKS += OPENRC_REMOVE_UNNEEDED + +ifeq ($(BR2_TARGET_GENERIC_GETTY),y) +OPENRC_GETTY_SVCNAME = agetty.$(SYSTEM_GETTY_PORT) +OPENRC_GETTY_CONF_D = $(TARGET_DIR)/etc/conf.d/$(OPENRC_GETTY_SVCNAME) +define OPENRC_SET_GETTY + { \ + echo "baud=\"$(SYSTEM_GETTY_BAUDRATE)\""; \ + echo "term_type=\"$(SYSTEM_GETTY_TERM)\"" ; \ + echo "agetty_options=\"-L $(SYSTEM_GETTY_OPTIONS)\""; \ + } > $(OPENRC_GETTY_CONF_D) + ln -sf agetty $(TARGET_DIR)/etc/init.d/$(OPENRC_GETTY_SVCNAME) + ln -sf /etc/init.d/$(OPENRC_GETTY_SVCNAME) \ + $(TARGET_DIR)/etc/runlevels/default/$(OPENRC_GETTY_SVCNAME) +endef +OPENRC_TARGET_FINALIZE_HOOKS += OPENRC_SET_GETTY +endif # BR2_TARGET_GENERIC_GETTY + +$(eval $(generic-package)) diff --git a/package/openrc/sysv-rcs b/package/openrc/sysv-rcs new file mode 100755 index 00000000..1564cbe6 --- /dev/null +++ b/package/openrc/sysv-rcs @@ -0,0 +1,27 @@ +#!/sbin/openrc-run + +description="start or stop sysv rc[S,K] scripts" + +depend() { + after local +} + +start() { + for i in /etc/init.d/S??*; do + # Ignore dangling symlinks (if any). + [ -e "$i" ] || continue + einfo "Starting $i" + $i start > /dev/null + eend $? + done +} + +stop() { + for i in $(ls -r /etc/init.d/S??*); do + # Ignore dangling symlinks (if any). + [ -e "$i" ] || continue + einfo "Stopping $i" + $i stop > /dev/null + eend $? + done +} diff --git a/package/openresolv/Config.in b/package/openresolv/Config.in new file mode 100644 index 00000000..835fbf29 --- /dev/null +++ b/package/openresolv/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_OPENRESOLV + bool "openresolv" + help + openresolv is a resolvconf implementation which + manages resolv.conf. This tool provides a dns management + framework to track currently available nameservers. + + https://roy.marples.name/projects/openresolv diff --git a/package/openresolv/openresolv.hash b/package/openresolv/openresolv.hash new file mode 100644 index 00000000..f2a101df --- /dev/null +++ b/package/openresolv/openresolv.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 7d74c669849183ecefdfcec30d25664b1ca24ba1ca8c2ad5de50fcaeef3b4810 openresolv-3.10.0.tar.gz +sha256 384740bf5e19e7628d20f4dcc22925062fdc6020e9a6f074e567d4d797be57a0 LICENSE diff --git a/package/openresolv/openresolv.mk b/package/openresolv/openresolv.mk new file mode 100644 index 00000000..55ec7fd8 --- /dev/null +++ b/package/openresolv/openresolv.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# openresolv +# +################################################################################ + +OPENRESOLV_VERSION = 3.10.0 +OPENRESOLV_SITE = $(call github,rsmarples,openresolv,openresolv-$(OPENRESOLV_VERSION)) +OPENRESOLV_LICENSE = BSD-2-Clause +OPENRESOLV_LICENSE_FILES = LICENSE +OPENRESOLV_CPE_ID_VENDOR = openresolv_project + +define OPENRESOLV_CONFIGURE_CMDS + cd $(@D) && $(TARGET_CONFIGURE_OPTS) ./configure --sysconfdir=/etc +endef + +define OPENRESOLV_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define OPENRESOLV_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR="$(TARGET_DIR)" install +endef + +$(eval $(generic-package)) diff --git a/package/openssh/Config.in b/package/openssh/Config.in new file mode 100644 index 00000000..cc599874 --- /dev/null +++ b/package/openssh/Config.in @@ -0,0 +1,34 @@ +config BR2_PACKAGE_OPENSSH + bool "openssh" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_ZLIB + help + A free version of the SSH protocol suite of network + connectivity tools. The standard 'ssh', 'sshd', 'scp', and + friends. + + http://www.openssh.com/ + +if BR2_PACKAGE_OPENSSH + +config BR2_PACKAGE_OPENSSH_CLIENT + bool "client" + default y + help + Client programs: ssh, scp, sftp, ssh-agent, ssh-add, + ssh-copy-id. + +config BR2_PACKAGE_OPENSSH_SERVER + bool "server" + default y + help + Server programs: sshd, sftp-server + +config BR2_PACKAGE_OPENSSH_KEY_UTILS + bool "key utilities" + default y + help + Key utilities: ssh-keygen, ssh-keyscan. + +endif diff --git a/package/openssh/S50sshd b/package/openssh/S50sshd new file mode 100644 index 00000000..22da41d1 --- /dev/null +++ b/package/openssh/S50sshd @@ -0,0 +1,47 @@ +#!/bin/sh +# +# sshd Starts sshd. +# + +# Make sure the ssh-keygen progam exists +[ -f /usr/bin/ssh-keygen ] || exit 0 + +umask 077 + +start() { + # Create any missing keys + /usr/bin/ssh-keygen -A + + printf "Starting sshd: " + /usr/sbin/sshd + touch /var/lock/sshd + echo "OK" +} +stop() { + printf "Stopping sshd: " + killall sshd + rm -f /var/lock/sshd + echo "OK" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? + diff --git a/package/openssh/openssh.hash b/package/openssh/openssh.hash new file mode 100644 index 00000000..0dcd725d --- /dev/null +++ b/package/openssh/openssh.hash @@ -0,0 +1,4 @@ +# From https://www.openssh.com/txt/release-8.6 (base64 encoded) +sha256 c3e6e4da1621762c850d03b47eed1e48dff4cc9608ddeb547202a234df8ed7ae openssh-8.6p1.tar.gz +# Locally calculated +sha256 432abf7480fb31473a6706627212913fc70032e3fb71b90fecb28ae26a2d741d LICENCE diff --git a/package/openssh/openssh.mk b/package/openssh/openssh.mk new file mode 100644 index 00000000..61b2c97c --- /dev/null +++ b/package/openssh/openssh.mk @@ -0,0 +1,131 @@ +################################################################################ +# +# openssh +# +################################################################################ + +OPENSSH_VERSION_MAJOR = 8.6 +OPENSSH_VERSION_MINOR = p1 +OPENSSH_VERSION = $(OPENSSH_VERSION_MAJOR)$(OPENSSH_VERSION_MINOR) +OPENSSH_CPE_ID_VERSION = $(OPENSSH_VERSION_MAJOR) +OPENSSH_CPE_ID_UPDATE = $(OPENSSH_VERSION_MINOR) +OPENSSH_SITE = http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable +OPENSSH_LICENSE = BSD-4-Clause, BSD-3-Clause, BSD-2-Clause, Public Domain +OPENSSH_LICENSE_FILES = LICENCE +OPENSSH_CONF_ENV = \ + LD="$(TARGET_CC)" \ + LDFLAGS="$(TARGET_CFLAGS)" \ + LIBS=`$(PKG_CONFIG_HOST_BINARY) --libs openssl` +OPENSSH_CPE_ID_VENDOR = openbsd +OPENSSH_CONF_OPTS = \ + --sysconfdir=/etc/ssh \ + --with-default-path=$(BR2_SYSTEM_DEFAULT_PATH) \ + --disable-lastlog \ + --disable-utmp \ + --disable-utmpx \ + --disable-wtmp \ + --disable-wtmpx \ + --disable-strip + +define OPENSSH_PERMISSIONS + /var/empty d 755 root root - - - - - +endef + +ifeq ($(BR2_TOOLCHAIN_SUPPORTS_PIE),) +OPENSSH_CONF_OPTS += --without-pie +endif + +OPENSSH_DEPENDENCIES = host-pkgconf zlib openssl + +ifeq ($(BR2_PACKAGE_CRYPTODEV_LINUX),y) +OPENSSH_DEPENDENCIES += cryptodev-linux +OPENSSH_CONF_OPTS += --with-ssl-engine +else +OPENSSH_CONF_OPTS += --without-ssl-engine +endif + +ifeq ($(BR2_PACKAGE_AUDIT),y) +OPENSSH_DEPENDENCIES += audit +OPENSSH_CONF_OPTS += --with-audit=linux +else +OPENSSH_CONF_OPTS += --without-audit +endif + +ifeq ($(BR2_PACKAGE_LINUX_PAM),y) +define OPENSSH_INSTALL_PAM_CONF + $(INSTALL) -D -m 644 $(@D)/contrib/sshd.pam.generic $(TARGET_DIR)/etc/pam.d/sshd + $(SED) '\%password required /lib/security/pam_cracklib.so%d' $(TARGET_DIR)/etc/pam.d/sshd + $(SED) 's/\#UsePAM no/UsePAM yes/' $(TARGET_DIR)/etc/ssh/sshd_config +endef + +OPENSSH_DEPENDENCIES += linux-pam +OPENSSH_CONF_OPTS += --with-pam +OPENSSH_POST_INSTALL_TARGET_HOOKS += OPENSSH_INSTALL_PAM_CONF +else +OPENSSH_CONF_OPTS += --without-pam +endif + +ifeq ($(BR2_PACKAGE_LIBSELINUX),y) +OPENSSH_DEPENDENCIES += libselinux +OPENSSH_CONF_OPTS += --with-selinux +else +OPENSSH_CONF_OPTS += --without-selinux +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD_SYSUSERS),y) +define OPENSSH_INSTALL_SYSTEMD_SYSUSERS + $(INSTALL) -m 0644 -D package/openssh/sshd-sysusers.conf \ + $(TARGET_DIR)/usr/lib/sysusers.d/sshd.conf +endef +else +define OPENSSH_USERS + sshd -1 sshd -1 * /var/empty - - SSH drop priv user +endef +endif + +# Let the default install rule only install the configuration file. +# The programs will be installed based on the config options selected. +OPENSSH_INSTALL_TARGET_OPTS = DESTDIR=$(TARGET_DIR) install-sysconf + +ifeq ($(BR2_PACKAGE_OPENSSH_CLIENT),y) +define OPENSSH_INSTALL_CLIENT_PROGRAMS + $(INSTALL) -D -m 0755 $(@D)/ssh $(TARGET_DIR)/usr/bin/ssh + $(INSTALL) -D -m 0755 $(@D)/scp $(TARGET_DIR)/usr/bin/scp + $(INSTALL) -D -m 0755 $(@D)/sftp $(TARGET_DIR)/usr/bin/sftp + $(INSTALL) -D -m 0755 $(@D)/ssh-agent $(TARGET_DIR)/usr/bin/ssh-agent + $(INSTALL) -D -m 0755 $(@D)/ssh-add $(TARGET_DIR)/usr/bin/ssh-add + $(INSTALL) -D -m 4711 $(@D)/ssh-keysign $(TARGET_DIR)/usr/libexec/ssh-keysign + $(INSTALL) -D -m 0755 $(@D)/ssh-pkcs11-helper $(TARGET_DIR)/usr/libexec/ssh-pkcs11-helper + $(INSTALL) -D -m 0755 $(@D)/contrib/ssh-copy-id $(TARGET_DIR)/usr/bin/ssh-copy-id +endef +OPENSSH_POST_INSTALL_TARGET_HOOKS += OPENSSH_INSTALL_CLIENT_PROGRAMS +endif + +ifeq ($(BR2_PACKAGE_OPENSSH_SERVER),y) +define OPENSSH_INSTALL_SERVER_PROGRAMS + $(INSTALL) -D -m 0755 $(@D)/sshd $(TARGET_DIR)/usr/sbin/sshd + $(INSTALL) -D -m 0755 $(@D)/sftp-server $(TARGET_DIR)/usr/libexec/sftp-server +endef +OPENSSH_POST_INSTALL_TARGET_HOOKS += OPENSSH_INSTALL_SERVER_PROGRAMS + +define OPENSSH_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/openssh/sshd.service \ + $(TARGET_DIR)/usr/lib/systemd/system/sshd.service + $(OPENSSH_INSTALL_SYSTEMD_SYSUSERS) +endef + +define OPENSSH_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 package/openssh/S50sshd \ + $(TARGET_DIR)/etc/init.d/S50sshd +endef +endif + +ifeq ($(BR2_PACKAGE_OPENSSH_KEY_UTILS),y) +define OPENSSH_INSTALL_KEY_UTILS + $(INSTALL) -D -m 0755 $(@D)/ssh-keygen $(TARGET_DIR)/usr/bin/ssh-keygen + $(INSTALL) -D -m 0755 $(@D)/ssh-keyscan $(TARGET_DIR)/usr/bin/ssh-keyscan +endef +OPENSSH_POST_INSTALL_TARGET_HOOKS += OPENSSH_INSTALL_KEY_UTILS +endif + +$(eval $(autotools-package)) diff --git a/package/openssh/sshd-sysusers.conf b/package/openssh/sshd-sysusers.conf new file mode 100644 index 00000000..ac77aec0 --- /dev/null +++ b/package/openssh/sshd-sysusers.conf @@ -0,0 +1 @@ +u sshd - "SSH drop priv user" /var/empty diff --git a/package/openssh/sshd.service b/package/openssh/sshd.service new file mode 100644 index 00000000..b5e96b3a --- /dev/null +++ b/package/openssh/sshd.service @@ -0,0 +1,11 @@ +[Unit] +Description=OpenSSH server daemon +After=syslog.target network.target auditd.service + +[Service] +ExecStartPre=/usr/bin/ssh-keygen -A +ExecStart=/usr/sbin/sshd -D -e +ExecReload=/bin/kill -HUP $MAINPID + +[Install] +WantedBy=multi-user.target diff --git a/package/openssl/Config.in b/package/openssl/Config.in new file mode 100644 index 00000000..dd470913 --- /dev/null +++ b/package/openssl/Config.in @@ -0,0 +1,73 @@ +config BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS + bool + default y + depends on !BR2_RISCV_32 + +config BR2_PACKAGE_OPENSSL_FORCE_LIBOPENSSL + bool + depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS + +config BR2_PACKAGE_OPENSSL + bool "openssl support" + select BR2_PACKAGE_HAS_OPENSSL + help + Select the desired ssl library provider. + +if BR2_PACKAGE_OPENSSL + +choice + prompt "ssl library" + help + Select OpenSSL or LibreSSL. + +config BR2_PACKAGE_LIBOPENSSL + bool "openssl" + depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS + select BR2_PACKAGE_ZLIB + help + A collaborative effort to develop a robust, commercial-grade, + fully featured, and Open Source toolkit implementing the + Secure Sockets Layer (SSL v2/v3) and Transport Security + (TLS v1) as well as a full-strength general-purpose + cryptography library. + + http://www.openssl.org/ + + Note: Some helper scripts need perl. + +source "package/libopenssl/Config.in" + +config BR2_PACKAGE_LIBRESSL + bool "libressl" + depends on !BR2_PACKAGE_OPENSSL_FORCE_LIBOPENSSL + # uClibc on noMMU doesn't provide __register_atfork() + depends on !(BR2_TOOLCHAIN_USES_UCLIBC && !BR2_USE_MMU) + help + LibreSSL is a version of the TLS/crypto stack forked from + OpenSSL in 2014, with goals of modernizing the codebase, + improving security, and applying best practice development + processes. + + http://www.libressl.org/ + +source "package/libressl/Config.in" + +# openssl from br2-external trees, if any +source "$BR2_BASE_DIR/.br2-external.in.openssl" + +endchoice + +config BR2_PACKAGE_HAS_OPENSSL + bool + +config BR2_PACKAGE_PROVIDES_OPENSSL + string + default "libopenssl" if BR2_PACKAGE_LIBOPENSSL + default "libressl" if BR2_PACKAGE_LIBRESSL + +endif + +# ensure libopenssl is used for the host variant +config BR2_PACKAGE_PROVIDES_HOST_OPENSSL + string + default "host-libopenssl" diff --git a/package/openssl/openssl.mk b/package/openssl/openssl.mk new file mode 100644 index 00000000..d20e184c --- /dev/null +++ b/package/openssl/openssl.mk @@ -0,0 +1,8 @@ +################################################################################ +# +# openssl +# +################################################################################ + +$(eval $(virtual-package)) +$(eval $(host-virtual-package)) diff --git a/package/openswan/Config.in b/package/openswan/Config.in new file mode 100644 index 00000000..c71d064d --- /dev/null +++ b/package/openswan/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_OPENSWAN + bool "openswan" + depends on BR2_USE_MMU # iproute2 + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4 # iproute2 + depends on !BR2_TOOLCHAIN_USES_UCLIBC # ns_t_tkey + select BR2_PACKAGE_GMP + select BR2_PACKAGE_IPROUTE2 + help + Openswan is an implementation of IPsec for Linux + + http://www.openswan.org + +comment "openswan needs a glibc or musl toolchain w/ headers >= 3.4" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4 || \ + BR2_TOOLCHAIN_USES_UCLIBC diff --git a/package/openswan/openswan.hash b/package/openswan/openswan.hash new file mode 100644 index 00000000..574009eb --- /dev/null +++ b/package/openswan/openswan.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 69fe7a71e54aaf0ea93b874db4963057c1ff4904b3617b36f2c9be2010c23331 openswan-3.0.0.tar.gz +sha256 1c36ae1e7b0f6cce4b4ffe969b71f83635734804acdd38544443564b00f8783a COPYING +sha256 d7d012ef3be47faffba4d97a83d4986c9f4a63ac997ebf5961d33852e5f1801a LICENSE diff --git a/package/openswan/openswan.mk b/package/openswan/openswan.mk new file mode 100644 index 00000000..bb56e451 --- /dev/null +++ b/package/openswan/openswan.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# openswan +# +################################################################################ + +OPENSWAN_VERSION = 3.0.0 +OPENSWAN_SITE = $(call github,xelerance,Openswan,v$(OPENSWAN_VERSION)) +OPENSWAN_LICENSE = GPL-2.0+, BSD-3-Clause +OPENSWAN_LICENSE_FILES = COPYING LICENSE +OPENSWAN_CPE_ID_VENDOR = xelerance + +OPENSWAN_DEPENDENCIES = host-bison host-flex gmp iproute2 +OPENSWAN_MAKE_OPTS = ARCH=$(BR2_ARCH) CC="$(TARGET_CC)" POD2MAN="" XMLTO="" \ + USERCOMPILE="$(TARGET_CFLAGS) $(if $(BR2_TOOLCHAIN_SUPPORTS_PIE),-fPIE)" \ + USERLINK="$(TARGET_LDFLAGS) $(if $(BR2_TOOLCHAIN_SUPPORTS_PIE),-fPIE)" \ + INC_USRLOCAL=/usr USE_KLIPS=false USE_MAST=false USE_NM=false \ + USE_NOMANINSTALL=true WERROR="" + +ifeq ($(BR2_PACKAGE_LIBCURL),y) +OPENSWAN_DEPENDENCIES += libcurl +OPENSWAN_MAKE_OPTS += USE_LIBCURL=true +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +OPENSWAN_DEPENDENCIES += openssl +OPENSWAN_MAKE_OPTS += HAVE_OPENSSL=true +ifeq ($(BR2_PACKAGE_OCF_LINUX),y) +OPENSWAN_MAKE_OPTS += HAVE_OCF=true +endif +endif + +define OPENSWAN_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) -C $(@D) \ + $(OPENSWAN_MAKE_OPTS) programs +endef + +define OPENSWAN_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) -C $(@D) \ + $(OPENSWAN_MAKE_OPTS) DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/opentracing-cpp/Config.in b/package/opentracing-cpp/Config.in new file mode 100644 index 00000000..ff3067b7 --- /dev/null +++ b/package/opentracing-cpp/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_OPENTRACING_CPP + bool "opentracing-cpp" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11 + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # exception_ptr + help + OpenTracing API for C++ + + http://opentracing.io + +comment "opentracing-cpp needs a toolchain w/ C++, threads, dynamic library, gcc >= 4.8" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS \ + || BR2_STATIC_LIBS || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + +comment "opentracing-cpp needs exception_ptr" + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 diff --git a/package/opentracing-cpp/opentracing-cpp.hash b/package/opentracing-cpp/opentracing-cpp.hash new file mode 100644 index 00000000..591c0e4a --- /dev/null +++ b/package/opentracing-cpp/opentracing-cpp.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 015c4187f7a6426a2b5196f0ccd982aa87f010cf61f507ae3ce5c90523f92301 opentracing-cpp-1.5.1.tar.gz +sha256 076d03156735d5ff2df2ea0f8b12351ef65e5e9222b5c8c6a35101dadb41e717 LICENSE diff --git a/package/opentracing-cpp/opentracing-cpp.mk b/package/opentracing-cpp/opentracing-cpp.mk new file mode 100644 index 00000000..0605cd5d --- /dev/null +++ b/package/opentracing-cpp/opentracing-cpp.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# opentracing-cpp +# +################################################################################ + +OPENTRACING_CPP_VERSION = 1.5.1 +OPENTRACING_CPP_SITE = $(call github,opentracing,opentracing-cpp,v$(OPENTRACING_CPP_VERSION)) +OPENTRACING_CPP_LICENSE = Apache-2.0 +OPENTRACING_CPP_LICENSE_FILES = LICENSE + +OPENTRACING_CPP_INSTALL_STAGING = YES + +# BUILD_SHARED_LIBS is handled in pkg-cmake.mk as it is a generic cmake variable +# although BUILD_STATIC_LIBS=ON is default, make it explicit, +# cmake and static/shared libs is confusing enough already. +ifeq ($(BR2_STATIC_LIBS),y) +OPENTRACING_CPP_CONF_OPTS += -DBUILD_STATIC_LIBS=ON +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +OPENTRACING_CPP_CONF_OPTS += -DBUILD_STATIC_LIBS=ON +else ifeq ($(BR2_SHARED_LIBS),y) +OPENTRACING_CPP_CONF_OPTS += -DBUILD_STATIC_LIBS=OFF +endif + +OPENTRACING_CPP_CONF_OPTS += -DENABLE_LINTING=OFF + +$(eval $(cmake-package)) diff --git a/package/opentyrian-data/Config.in b/package/opentyrian-data/Config.in new file mode 100644 index 00000000..c0698c29 --- /dev/null +++ b/package/opentyrian-data/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_OPENTYRIAN_DATA + bool "OpenTyrian data" + depends on BR2_PACKAGE_OPENTYRIAN + help + Data files to use with OpenTyrian game. Currently only the + original Tyrian 2.1 data files, that have been released as + Freeware in 2004, are compatible. + + https://bitbucket.org/opentyrian/opentyrian/wiki/Home diff --git a/package/opentyrian-data/opentyrian-data.hash b/package/opentyrian-data/opentyrian-data.hash new file mode 100644 index 00000000..9a7079c4 --- /dev/null +++ b/package/opentyrian-data/opentyrian-data.hash @@ -0,0 +1,2 @@ +# Locally calculated +sha256 7790d09a2a3addcd33c66ef063d5900eb81cc9c342f4807eb8356364dd1d9277 tyrian21.zip diff --git a/package/opentyrian-data/opentyrian-data.mk b/package/opentyrian-data/opentyrian-data.mk new file mode 100644 index 00000000..9e38b61b --- /dev/null +++ b/package/opentyrian-data/opentyrian-data.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# opentyrian-data +# +################################################################################ + +OPENTYRIAN_DATA_VERSION = 2.1 +OPENTYRIAN_DATA_SITE = http://www.camanis.net/opentyrian +OPENTYRIAN_DATA_SOURCE = tyrian21.zip +OPENTYRIAN_DATA_LICENSE = Freeware + +define OPENTYRIAN_DATA_EXTRACT_CMDS + $(UNZIP) -d $(@D) $(OPENTYRIAN_DATA_DL_DIR)/$(OPENTYRIAN_DATA_SOURCE) +endef + +define OPENTYRIAN_DATA_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/usr/share/opentyrian/data/ + cp $(@D)/tyrian21/* $(TARGET_DIR)/usr/share/opentyrian/data/ + rm -f $(TARGET_DIR)/usr/share/opentyrian/data/*.doc + rm -f $(TARGET_DIR)/usr/share/opentyrian/data/*.exe +endef + +$(eval $(generic-package)) diff --git a/package/opentyrian/0001-Move-definitions-that-don-t-need-to-be-exposed-from-opl-h-to-opl-c.patch b/package/opentyrian/0001-Move-definitions-that-don-t-need-to-be-exposed-from-opl-h-to-opl-c.patch new file mode 100644 index 00000000..f41758ce --- /dev/null +++ b/package/opentyrian/0001-Move-definitions-that-don-t-need-to-be-exposed-from-opl-h-to-opl-c.patch @@ -0,0 +1,365 @@ +From 962ee8fc46ca51691bde1c8c1022dacbe8a037ed Mon Sep 17 00:00:00 2001 +From: Carl Reinke +Date: Sun, 14 Jun 2020 14:11:00 -0600 +Subject: [PATCH] Move definitions that don't need to be exposed from opl.h to + opl.c + +[Retrieved from: +https://github.com/opentyrian/opentyrian/commit/962ee8fc46ca51691bde1c8c1022dacbe8a037ed] +Signed-off-by: Fabrice Fontaine +--- + src/opl.c | 153 +++++++++++++++++++++++++++++++++++++++++++++++++++- + src/opl.h | 157 ++---------------------------------------------------- + 2 files changed, 154 insertions(+), 156 deletions(-) + +diff --git a/src/opl.c b/src/opl.c +index a4071c5..f15474c 100644 +--- a/src/opl.c ++++ b/src/opl.c +@@ -23,12 +23,161 @@ + * Copyright (C) 1998-2001 Ken Silverman + * Ken Silverman's official web site: "http://www.advsys.net/ken" + */ +- ++#include "opl.h" + + #include ++#include + #include // rand() + #include // memset() +-#include "opl.h" ++ ++#define fltype double ++ ++ /* ++ define attribution that inlines/forces inlining of a function (optional) ++ */ ++#define OPL_INLINE inline ++ ++ ++#undef NUM_CHANNELS ++#if defined(OPLTYPE_IS_OPL3) ++#define NUM_CHANNELS 18 ++#else ++#define NUM_CHANNELS 9 ++#endif ++ ++#define MAXOPERATORS (NUM_CHANNELS*2) ++ ++ ++#define FL05 ((fltype)0.5) ++#define FL2 ((fltype)2.0) ++#define PI ((fltype)3.1415926535897932384626433832795) ++ ++ ++#define FIXEDPT 0x10000 // fixed-point calculations using 16+16 ++#define FIXEDPT_LFO 0x1000000 // fixed-point calculations using 8+24 ++ ++#define WAVEPREC 1024 // waveform precision (10 bits) ++ ++#define INTFREQU ((fltype)(14318180.0 / 288.0)) // clocking of the chip ++ ++ ++#define OF_TYPE_ATT 0 ++#define OF_TYPE_DEC 1 ++#define OF_TYPE_REL 2 ++#define OF_TYPE_SUS 3 ++#define OF_TYPE_SUS_NOKEEP 4 ++#define OF_TYPE_OFF 5 ++ ++#define ARC_CONTROL 0x00 ++#define ARC_TVS_KSR_MUL 0x20 ++#define ARC_KSL_OUTLEV 0x40 ++#define ARC_ATTR_DECR 0x60 ++#define ARC_SUSL_RELR 0x80 ++#define ARC_FREQ_NUM 0xa0 ++#define ARC_KON_BNUM 0xb0 ++#define ARC_PERC_MODE 0xbd ++#define ARC_FEEDBACK 0xc0 ++#define ARC_WAVE_SEL 0xe0 ++ ++#define ARC_SECONDSET 0x100 // second operator set for OPL3 ++ ++ ++#define OP_ACT_OFF 0x00 ++#define OP_ACT_NORMAL 0x01 // regular channel activated (bitmasked) ++#define OP_ACT_PERC 0x02 // percussion channel activated (bitmasked) ++ ++#define BLOCKBUF_SIZE 512 ++ ++ ++ // vibrato constants ++#define VIBTAB_SIZE 8 ++#define VIBFAC 70/50000 // no braces, integer mul/div ++ ++ // tremolo constants and table ++#define TREMTAB_SIZE 53 ++#define TREM_FREQ ((fltype)(3.7)) // tremolo at 3.7hz ++ ++ ++ /* operator struct definition ++ For OPL2 all 9 channels consist of two operators each, carrier and modulator. ++ Channel x has operators x as modulator and operators (9+x) as carrier. ++ For OPL3 all 18 channels consist either of two operators (2op mode) or four ++ operators (4op mode) which is determined through register4 of the second ++ adlib register set. ++ Only the channels 0,1,2 (first set) and 9,10,11 (second set) can act as ++ 4op channels. The two additional operators for a channel y come from the ++ 2op channel y+3 so the operatorss y, (9+y), y+3, (9+y)+3 make up a 4op ++ channel. ++ */ ++typedef struct operator_struct { ++ Bit32s cval, lastcval; // current output/last output (used for feedback) ++ Bit32u tcount, wfpos, tinc; // time (position in waveform) and time increment ++ fltype amp, step_amp; // and amplification (envelope) ++ fltype vol; // volume ++ fltype sustain_level; // sustain level ++ Bit32s mfbi; // feedback amount ++ fltype a0, a1, a2, a3; // attack rate function coefficients ++ fltype decaymul, releasemul; // decay/release rate functions ++ Bit32u op_state; // current state of operator (attack/decay/sustain/release/off) ++ Bit32u toff; ++ Bit32s freq_high; // highest three bits of the frequency, used for vibrato calculations ++ Bit16s* cur_wform; // start of selected waveform ++ Bit32u cur_wmask; // mask for selected waveform ++ Bit32u act_state; // activity state (regular, percussion) ++ bool sus_keep; // keep sustain level when decay finished ++ bool vibrato,tremolo; // vibrato/tremolo enable bits ++ ++ // variables used to provide non-continuous envelopes ++ Bit32u generator_pos; // for non-standard sample rates we need to determine how many samples have passed ++ Bits cur_env_step; // current (standardized) sample position ++ Bits env_step_a,env_step_d,env_step_r; // number of std samples of one step (for attack/decay/release mode) ++ Bit8u step_skip_pos_a; // position of 8-cyclic step skipping (always 2^x to check against mask) ++ Bits env_step_skip_a; // bitmask that determines if a step is skipped (respective bit is zero then) ++ ++#if defined(OPLTYPE_IS_OPL3) ++ bool is_4op,is_4op_attached; // base of a 4op channel/part of a 4op channel ++ Bit32s left_pan,right_pan; // opl3 stereo panning amount ++#endif ++} op_type; ++ ++// per-chip variables ++static op_type op[MAXOPERATORS]; ++ ++static Bits int_samplerate; ++ ++static Bit8u status; ++static Bit32u opl_index; ++#if defined(OPLTYPE_IS_OPL3) ++static Bit8u adlibreg[512]; // adlib register set (including second set) ++static Bit8u wave_sel[44]; // waveform selection ++#else ++static Bit8u adlibreg[256]; // adlib register set ++static Bit8u wave_sel[22]; // waveform selection ++#endif ++ ++ ++ // vibrato/tremolo increment/counter ++static Bit32u vibtab_pos; ++static Bit32u vibtab_add; ++static Bit32u tremtab_pos; ++static Bit32u tremtab_add; ++ ++ ++// enable an operator ++void enable_operator(Bitu regbase, op_type* op_pt, Bit32u act_type); ++ ++// functions to change parameters of an operator ++void change_frequency(Bitu chanbase, Bitu regbase, op_type* op_pt); ++ ++void change_attackrate(Bitu regbase, op_type* op_pt); ++void change_decayrate(Bitu regbase, op_type* op_pt); ++void change_releaserate(Bitu regbase, op_type* op_pt); ++void change_sustainlevel(Bitu regbase, op_type* op_pt); ++void change_waveform(Bitu regbase, op_type* op_pt); ++void change_keepsustain(Bitu regbase, op_type* op_pt); ++void change_vibrato(Bitu regbase, op_type* op_pt); ++void change_feedback(Bitu chanbase, op_type* op_pt); ++ + + static Bit32u generator_add; // should be a chip parameter + +diff --git a/src/opl.h b/src/opl.h +index c8e643b..cbb56ad 100644 +--- a/src/opl.h ++++ b/src/opl.h +@@ -25,11 +25,8 @@ + * Ken Silverman's official web site: "http://www.advsys.net/ken" + */ + +- +-#define fltype double +- +-#include + #include ++ + typedef uintptr_t Bitu; + typedef intptr_t Bits; + typedef uint32_t Bit32u; +@@ -39,154 +36,6 @@ typedef int16_t Bit16s; + typedef uint8_t Bit8u; + typedef int8_t Bit8s; + +- +-/* +- define attribution that inlines/forces inlining of a function (optional) +-*/ +-#define OPL_INLINE inline +- +- +-#undef NUM_CHANNELS +-#if defined(OPLTYPE_IS_OPL3) +-#define NUM_CHANNELS 18 +-#else +-#define NUM_CHANNELS 9 +-#endif +- +-#define MAXOPERATORS (NUM_CHANNELS*2) +- +- +-#define FL05 ((fltype)0.5) +-#define FL2 ((fltype)2.0) +-#define PI ((fltype)3.1415926535897932384626433832795) +- +- +-#define FIXEDPT 0x10000 // fixed-point calculations using 16+16 +-#define FIXEDPT_LFO 0x1000000 // fixed-point calculations using 8+24 +- +-#define WAVEPREC 1024 // waveform precision (10 bits) +- +-#define INTFREQU ((fltype)(14318180.0 / 288.0)) // clocking of the chip +- +- +-#define OF_TYPE_ATT 0 +-#define OF_TYPE_DEC 1 +-#define OF_TYPE_REL 2 +-#define OF_TYPE_SUS 3 +-#define OF_TYPE_SUS_NOKEEP 4 +-#define OF_TYPE_OFF 5 +- +-#define ARC_CONTROL 0x00 +-#define ARC_TVS_KSR_MUL 0x20 +-#define ARC_KSL_OUTLEV 0x40 +-#define ARC_ATTR_DECR 0x60 +-#define ARC_SUSL_RELR 0x80 +-#define ARC_FREQ_NUM 0xa0 +-#define ARC_KON_BNUM 0xb0 +-#define ARC_PERC_MODE 0xbd +-#define ARC_FEEDBACK 0xc0 +-#define ARC_WAVE_SEL 0xe0 +- +-#define ARC_SECONDSET 0x100 // second operator set for OPL3 +- +- +-#define OP_ACT_OFF 0x00 +-#define OP_ACT_NORMAL 0x01 // regular channel activated (bitmasked) +-#define OP_ACT_PERC 0x02 // percussion channel activated (bitmasked) +- +-#define BLOCKBUF_SIZE 512 +- +- +-// vibrato constants +-#define VIBTAB_SIZE 8 +-#define VIBFAC 70/50000 // no braces, integer mul/div +- +-// tremolo constants and table +-#define TREMTAB_SIZE 53 +-#define TREM_FREQ ((fltype)(3.7)) // tremolo at 3.7hz +- +- +-/* operator struct definition +- For OPL2 all 9 channels consist of two operators each, carrier and modulator. +- Channel x has operators x as modulator and operators (9+x) as carrier. +- For OPL3 all 18 channels consist either of two operators (2op mode) or four +- operators (4op mode) which is determined through register4 of the second +- adlib register set. +- Only the channels 0,1,2 (first set) and 9,10,11 (second set) can act as +- 4op channels. The two additional operators for a channel y come from the +- 2op channel y+3 so the operatorss y, (9+y), y+3, (9+y)+3 make up a 4op +- channel. +-*/ +-typedef struct operator_struct { +- Bit32s cval, lastcval; // current output/last output (used for feedback) +- Bit32u tcount, wfpos, tinc; // time (position in waveform) and time increment +- fltype amp, step_amp; // and amplification (envelope) +- fltype vol; // volume +- fltype sustain_level; // sustain level +- Bit32s mfbi; // feedback amount +- fltype a0, a1, a2, a3; // attack rate function coefficients +- fltype decaymul, releasemul; // decay/release rate functions +- Bit32u op_state; // current state of operator (attack/decay/sustain/release/off) +- Bit32u toff; +- Bit32s freq_high; // highest three bits of the frequency, used for vibrato calculations +- Bit16s* cur_wform; // start of selected waveform +- Bit32u cur_wmask; // mask for selected waveform +- Bit32u act_state; // activity state (regular, percussion) +- bool sus_keep; // keep sustain level when decay finished +- bool vibrato,tremolo; // vibrato/tremolo enable bits +- +- // variables used to provide non-continuous envelopes +- Bit32u generator_pos; // for non-standard sample rates we need to determine how many samples have passed +- Bits cur_env_step; // current (standardized) sample position +- Bits env_step_a,env_step_d,env_step_r; // number of std samples of one step (for attack/decay/release mode) +- Bit8u step_skip_pos_a; // position of 8-cyclic step skipping (always 2^x to check against mask) +- Bits env_step_skip_a; // bitmask that determines if a step is skipped (respective bit is zero then) +- +-#if defined(OPLTYPE_IS_OPL3) +- bool is_4op,is_4op_attached; // base of a 4op channel/part of a 4op channel +- Bit32s left_pan,right_pan; // opl3 stereo panning amount +-#endif +-} op_type; +- +-// per-chip variables +-Bitu chip_num; +-op_type op[MAXOPERATORS]; +- +-Bits int_samplerate; +- +-Bit8u status; +-Bit32u opl_index; +-#if defined(OPLTYPE_IS_OPL3) +-Bit8u adlibreg[512]; // adlib register set (including second set) +-Bit8u wave_sel[44]; // waveform selection +-#else +-Bit8u adlibreg[256]; // adlib register set +-Bit8u wave_sel[22]; // waveform selection +-#endif +- +- +-// vibrato/tremolo increment/counter +-Bit32u vibtab_pos; +-Bit32u vibtab_add; +-Bit32u tremtab_pos; +-Bit32u tremtab_add; +- +- +-// enable an operator +-void enable_operator(Bitu regbase, op_type* op_pt, Bit32u act_type); +- +-// functions to change parameters of an operator +-void change_frequency(Bitu chanbase, Bitu regbase, op_type* op_pt); +- +-void change_attackrate(Bitu regbase, op_type* op_pt); +-void change_decayrate(Bitu regbase, op_type* op_pt); +-void change_releaserate(Bitu regbase, op_type* op_pt); +-void change_sustainlevel(Bitu regbase, op_type* op_pt); +-void change_waveform(Bitu regbase, op_type* op_pt); +-void change_keepsustain(Bitu regbase, op_type* op_pt); +-void change_vibrato(Bitu regbase, op_type* op_pt); +-void change_feedback(Bitu chanbase, op_type* op_pt); +- + // general functions + void adlib_init(Bit32u samplerate); + void adlib_write(Bitu idx, Bit8u val); +@@ -195,8 +44,8 @@ void adlib_getsample(Bit16s* sndptr, Bits numsamples); + Bitu adlib_reg_read(Bitu port); + void adlib_write_index(Bitu port, Bit8u val); + +-#endif /* OPL_H */ +- + #define opl_init() adlib_init(OUTPUT_QUALITY * 11025) + #define opl_write(reg, val) adlib_write(reg, val) + #define opl_update(buf, num) adlib_getsample(buf, num) ++ ++#endif /* OPL_H */ diff --git a/package/opentyrian/Config.in b/package/opentyrian/Config.in new file mode 100644 index 00000000..cbc73e5d --- /dev/null +++ b/package/opentyrian/Config.in @@ -0,0 +1,24 @@ +config BR2_PACKAGE_OPENTYRIAN + bool "OpenTyrian" + select BR2_PACKAGE_SDL + select BR2_PACKAGE_OPENTYRIAN_DATA + help + OpenTyrian is a port of the DOS shoot-em-up Tyrian. It uses + SDL, making it easily cross-platform. + It requires the original data files to run. + A display with minimum 640x480 resolution and a keyboard are + needed to play the game. + If you want some sound, activate ALSA with OSS emulation. + + https://bitbucket.org/opentyrian/opentyrian/wiki/Home + +if BR2_PACKAGE_OPENTYRIAN + +config BR2_PACKAGE_OPENTYRIAN_NET + bool "network support" + default y + select BR2_PACKAGE_SDL_NET + help + Activates network support in OpenTyrian. Will add SDL_net. + +endif diff --git a/package/opentyrian/opentyrian.hash b/package/opentyrian/opentyrian.hash new file mode 100644 index 00000000..0d1f4927 --- /dev/null +++ b/package/opentyrian/opentyrian.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 2b0db65c735cc099279ea3da6d9b76f791633897cd0f5b67528f70de0758a944 opentyrian-cf5dbeb69eebd9ef9afc4473088d9469b79589eb.tar.gz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/opentyrian/opentyrian.mk b/package/opentyrian/opentyrian.mk new file mode 100644 index 00000000..69032333 --- /dev/null +++ b/package/opentyrian/opentyrian.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# opentyrian +# +################################################################################ + +OPENTYRIAN_VERSION = cf5dbeb69eebd9ef9afc4473088d9469b79589eb +OPENTYRIAN_SITE = $(call github,opentyrian,opentyrian,$(OPENTYRIAN_VERSION)) +OPENTYRIAN_LICENSE = GPL-2.0+ +OPENTYRIAN_LICENSE_FILES = COPYING + +OPENTYRIAN_DEPENDENCIES = sdl + +ifeq ($(BR2_PACKAGE_OPENTYRIAN_NET),y) +OPENTYRIAN_DEPENDENCIES += sdl_net +OPENTYRIAN_NETWORK = true +else +OPENTYRIAN_NETWORK = false +endif + +define OPENTYRIAN_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) PLATFORM=UNIX \ + CC="$(TARGET_CC)" \ + STRIP="/bin/true" \ + SDL_CONFIG="$(STAGING_DIR)/usr/bin/sdl-config" \ + LDFLAGS="$(TARGET_LDFLAGS) -lm" \ + WITH_NETWORK="$(OPENTYRIAN_NETWORK)" \ + -C $(@D) release +endef + +define OPENTYRIAN_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/opentyrian $(TARGET_DIR)/usr/bin/opentyrian +endef + +$(eval $(generic-package)) diff --git a/package/openvmtools/0001-no_cflags_werror.patch b/package/openvmtools/0001-no_cflags_werror.patch new file mode 100644 index 00000000..3378cb8e --- /dev/null +++ b/package/openvmtools/0001-no_cflags_werror.patch @@ -0,0 +1,18 @@ +configure.ac: disable -Werror + +Disable the mandatory flag -Werror in configure.ac. + +Signed-off-by: Karoly Kasza + +--- open-vm-tools/configure.ac 2015-06-17 10:02:00.000000000 +0200 ++++ open-vm-tools/configure.ac 2015-06-17 10:02:00.000000000 +0200 +@@ -935,7 +935,7 @@ + + ### General flags / actions + CFLAGS="$CFLAGS -Wall" +-CFLAGS="$CFLAGS -Werror" ++# CFLAGS="$CFLAGS -Werror" + + # -Wno-unknown-pragmas is due to gcc not understanding '#pragma ident' + # in Xlib.h on OpenSolaris. + diff --git a/package/openvmtools/0002-dont-force-cppflags.patch b/package/openvmtools/0002-dont-force-cppflags.patch new file mode 100644 index 00000000..eb2fe16b --- /dev/null +++ b/package/openvmtools/0002-dont-force-cppflags.patch @@ -0,0 +1,21 @@ +m4: do not force -I/usr/include in CPPFLAGS + +This is so horribly broken for cross-compilation. :-( + +Signed-off-by: "Yann E. MORIN" + +--- open-vm-tools/m4/vmtools.m4 2015-06-17 10:03:00.000000000 +0200 ++++ open-vm-tools/m4/vmtools.m4 2015-06-17 10:03:00.000000000 +0200 +@@ -281,10 +281,10 @@ + if test "$os" = freebsd; then + CUSTOM_$1_CPPFLAGS="-I/usr/local/include" + else +- CUSTOM_$1_CPPFLAGS="-I/usr/include" ++ CUSTOM_$1_CPPFLAGS=" " + fi + if test -n "$2"; then +- CUSTOM_$1_CPPFLAGS="${CUSTOM_$1_CPPFLAGS}/$2" ++ : CUSTOM_$1_CPPFLAGS="${CUSTOM_$1_CPPFLAGS}/$2" + fi + fi + ]) diff --git a/package/openvmtools/0003-Rename-poll-h-into-vm_poll-h-to-fix-build-failure-on-musl.patch b/package/openvmtools/0003-Rename-poll-h-into-vm_poll-h-to-fix-build-failure-on-musl.patch new file mode 100644 index 00000000..e9495ce4 --- /dev/null +++ b/package/openvmtools/0003-Rename-poll-h-into-vm_poll-h-to-fix-build-failure-on-musl.patch @@ -0,0 +1,798 @@ +From 9d13e32e362ad3ce5169f49b7f0fe1d9380e558c Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 30 Sep 2019 13:32:35 +0200 +Subject: [PATCH] Rename poll.h into vm_poll.h to fix build failure on musl +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +musl libc redirects include of sys/poll.h to poll.h. But since poll.h is +also a local header file, the musl libc header is never included. This +leads to the following build failure: + +In file included from asyncsocket.c:73:0: +.../host/i586-buildroot-linux-musl/sysroot/usr/include/sys/poll.h:1:2: warning: #warning redirecting incorrect #include to [-Wcpp] + #warning redirecting incorrect #include to +asyncsocket.c: In function ‘AsyncTCPSocketPollWork’: +asyncsocket.c:2537:13: error: invalid use of undefined type ‘struct pollfd’ + pfd[i].fd = asock[i]->fd; + ^ +asyncsocket.c:2537:13: error: dereferencing pointer to incomplete type ‘struct pollfd’ +asyncsocket.c:2538:13: error: invalid use of undefined type ‘struct pollfd’ + pfd[i].events = read ? POLLIN : POLLOUT; + ^ +asyncsocket.c:2538:33: error: ‘POLLIN’ undeclared (first use in this function); did you mean ‘POLL_IN’? + pfd[i].events = read ? POLLIN : POLLOUT; + +So rename poll.h into vm_poll.h as suggested by srowe in +https://github.com/vmware/open-vm-tools/issues/359#issuecomment-533529956 + +Fixes: + - http://autobuild.buildroot.org/results/4f575ef42bbc4387a07e396205052b2da081c64d + +Fix #359 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/vmware/open-vm-tools/pull/383] +--- + lib/asyncsocket/asyncsocket.c | 4 +- + lib/hgfsServer/hgfsServer.c | 2 +- + lib/include/asyncsocket.h | 2 +- + lib/include/poll.h | 330 -------------------- + lib/include/pollImpl.h | 2 +- + lib/include/vm_poll.h | 330 ++++++++++++++++++++ + lib/rpcIn/rpcin.c | 2 +- + 7 files changed, 336 insertions(+), 336 deletions(-) + delete mode 100644 open-vm-tools/lib/include/poll.h + create mode 100644 open-vm-tools/lib/include/vm_poll.h + +diff --git a/lib/asyncsocket/asyncsocket.c b/lib/asyncsocket/asyncsocket.c +index 102638cc..01181a95 100644 +--- a/lib/asyncsocket/asyncsocket.c ++++ b/lib/asyncsocket/asyncsocket.c +@@ -69,8 +69,8 @@ + #else + #include + #include ++#include + #include +-#include + #include + #include + #include +@@ -86,7 +86,7 @@ + #include "random.h" + #include "asyncsocket.h" + #include "asyncSocketBase.h" +-#include "poll.h" ++#include "vm_poll.h" + #include "log.h" + #include "err.h" + #include "hostinfo.h" +diff --git a/lib/hgfsServer/hgfsServer.c b/lib/hgfsServer/hgfsServer.c +index 46224551..fc691286 100644 +--- a/lib/hgfsServer/hgfsServer.c ++++ b/lib/hgfsServer/hgfsServer.c +@@ -48,7 +48,7 @@ + #include "hgfsServerOplock.h" + #include "hgfsDirNotify.h" + #include "userlock.h" +-#include "poll.h" ++#include "vm_poll.h" + #include "mutexRankLib.h" + #include "vm_basic_asm.h" + #include "unicodeOperations.h" +diff --git a/lib/include/asyncsocket.h b/lib/include/asyncsocket.h +index 95a5e464..a4b4e5aa 100644 +--- a/lib/include/asyncsocket.h ++++ b/lib/include/asyncsocket.h +@@ -164,7 +164,7 @@ typedef struct AsyncSocket AsyncSocket; + * Or the client can specify its favorite poll class and locking behavior. + * Use of IVmdbPoll is only supported for regular sockets and for Attach. + */ +-#include "poll.h" ++#include "vm_poll.h" + struct IVmdbPoll; + typedef struct AsyncSocketPollParams { + int flags; /* Default 0, only POLL_FLAG_NO_BULL is valid */ +diff --git a/lib/include/poll.h b/lib/include/poll.h +deleted file mode 100644 +index 6acd4f35..00000000 +--- a/lib/include/poll.h ++++ /dev/null +@@ -1,330 +0,0 @@ +-/********************************************************* +- * Copyright (C) 1998-2018 VMware, Inc. All rights reserved. +- * +- * This program is free software; you can redistribute it and/or modify it +- * under the terms of the GNU Lesser General Public License as published +- * by the Free Software Foundation version 2.1 and no 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 Lesser GNU General Public +- * License for more details. +- * +- * You should have received a copy of the GNU Lesser 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. +- * +- *********************************************************/ +- +-/********************************************************* +- * The contents of this file are subject to the terms of the Common +- * Development and Distribution License (the "License") version 1.0 +- * and no later version. You may not use this file except in +- * compliance with the License. +- * +- * You can obtain a copy of the License at +- * http://www.opensource.org/licenses/cddl1.php +- * +- * See the License for the specific language governing permissions +- * and limitations under the License. +- * +- *********************************************************/ +- +- +-#ifndef _POLL_H_ +-#define _POLL_H_ +- +-#define INCLUDE_ALLOW_USERLEVEL +-#define INCLUDE_ALLOW_VMCORE +-#include "includeCheck.h" +- +-#include "vm_basic_types.h" +-#include "vm_basic_defs.h" +-#include "vmware.h" +-#include "userlock.h" +- +-#if defined(__cplusplus) +-extern "C" { +-#endif +- +-#ifdef _WIN32 +-#define HZ 100 +-#elif defined linux +-#include +-#elif __APPLE__ +-#include +-/* +- * Old SDKs don't define TARGET_OS_IPHONE at all. +- * New ones define it to 0 on Mac OS X, 1 on iOS. +- */ +-#if !defined(TARGET_OS_IPHONE) || TARGET_OS_IPHONE == 0 +-#include +-#endif +-#include +-#define HZ 100 +-#endif +-#ifdef __ANDROID__ +-/* +- * of android should be included, but its name is same +- * with this file. So its content is put here to avoid conflict. +- */ +-#include +-#define HZ 100 +-typedef unsigned int nfds_t; +-int poll(struct pollfd *, nfds_t, long); +-#endif +- +- +-/* +- * Poll event types: each type has a different reason for firing, +- * or condition that must be met before firing. +- */ +- +-typedef enum { +- /* +- * Actual Poll queue types against which you can register callbacks. +- */ +- POLL_VIRTUALREALTIME = -1, /* Negative because it doesn't have its own Q */ +- POLL_VTIME = 0, +- POLL_REALTIME, +- POLL_DEVICE, +- POLL_MAIN_LOOP, +- POLL_NUM_QUEUES +-} PollEventType; +- +- +-/* +- * Classes of events +- * +- * These are the predefined classes. More can be declared +- * with Poll_AllocClass(). +- */ +- +-typedef enum PollClass { +- POLL_CLASS_MAIN, +- POLL_CLASS_PAUSE, +- POLL_CLASS_IPC, +- POLL_CLASS_CPT, +- POLL_CLASS_MKS, +- POLL_FIXED_CLASSES, +- POLL_DEFAULT_FIXED_CLASSES, +- /* Size enum to maximum */ +- POLL_MAX_CLASSES = 31, +-} PollClass; +- +-/* +- * Do not use; Special pseudo private poll class supported by +- * PollDefault only +- */ +-#define POLL_DEFAULT_CLASS_NET POLL_FIXED_CLASSES +-#define POLL_DEFAULT_CS_NET PollClassSet_Singleton(POLL_DEFAULT_CLASS_NET) +- +-/* +- * Each callback is registered in a set of classes +- */ +- +-typedef struct PollClassSet { +- uintptr_t bits; +-} PollClassSet; +- +-/* An empty PollClassSet. */ +-static INLINE PollClassSet +-PollClassSet_Empty(void) +-{ +- PollClassSet set = { 0 }; +- return set; +-} +- +-/* A PollClassSet with the single member. */ +-static INLINE PollClassSet +-PollClassSet_Singleton(PollClass c) +-{ +- PollClassSet s = PollClassSet_Empty(); +- +- ASSERT_ON_COMPILE(POLL_MAX_CLASSES < sizeof s.bits * 8); +- ASSERT(c < POLL_MAX_CLASSES); +- +- s.bits = CONST3264U(1) << c; +- return s; +-} +- +-/* Combine two PollClassSets. */ +-static INLINE PollClassSet +-PollClassSet_Union(PollClassSet lhs, PollClassSet rhs) +-{ +- PollClassSet set; +- set.bits = lhs.bits | rhs.bits; +- return set; +-} +- +-/* Add single class to PollClassSet. */ +-static INLINE PollClassSet +-PollClassSet_Include(PollClassSet set, PollClass c) +-{ +- return PollClassSet_Union(set, PollClassSet_Singleton(c)); +-} +- +- +-#define POLL_CS_MAIN PollClassSet_Singleton(POLL_CLASS_MAIN) +-#define POLL_CS_PAUSE PollClassSet_Union(POLL_CS_MAIN, \ +- PollClassSet_Singleton(POLL_CLASS_PAUSE)) +-#define POLL_CS_CPT PollClassSet_Union(POLL_CS_PAUSE, \ +- PollClassSet_Singleton(POLL_CLASS_CPT)) +-#define POLL_CS_IPC PollClassSet_Union(POLL_CS_CPT, \ +- PollClassSet_Singleton(POLL_CLASS_IPC)) +-#define POLL_CS_VMDB POLL_CS_PAUSE /* POLL_CLASS_VMDB is retired */ +-#define POLL_CS_MKS PollClassSet_Singleton(POLL_CLASS_MKS) +-/* +- * DANGER. You don't need POLL_CS_ALWAYS. Really. So don't use it. +- */ +-#define POLL_CS_ALWAYS PollClassSet_Union(POLL_CS_CPT, POLL_CS_IPC) +- +-/* +- * Poll class-set taxonomy: +- * POLL_CS_MAIN +- * - Unless you NEED another class, use POLL_CS_MAIN. +- * POLL_CS_PAUSE +- * - For callbacks that must occur even if the guest is paused. +- * Most VMDB or Foundry commands are in this category. +- * POLL_CS_CPT +- * - Only for callbacks which can trigger intermediate Checkpoint +- * transitions. +- * The ONLY such callback is Migrate. +- * POLL_CS_IPC +- * - Only for callbacks which can contain Msg_(Post|Hint|Question) +- * responses, and for signal handlers (why)? +- * Vigor, VMDB, and Foundry can contain Msg_* responses. +- * POLL_CS_MKS +- * - Callback runs in MKS thread. +- * POLL_CS_ALWAYS +- * - Only for events that must be processed immediately. +- * The ONLY such callback is OvhdMemVmxSizeCheck. +- */ +- +- +-/* +- * Poll_Callback flags +- */ +- +-#define POLL_FLAG_PERIODIC 0x01 // keep after firing +-#define POLL_FLAG_REMOVE_AT_POWEROFF 0x02 // self-explanatory +-#define POLL_FLAG_READ 0x04 // device is ready for reading +-#define POLL_FLAG_WRITE 0x08 // device is ready for writing +-#define POLL_FLAG_SOCKET 0x10 // device is a Windows socket +-#define POLL_FLAG_NO_BULL 0x20 // callback does its own locking +-#define POLL_FLAG_WINSOCK 0x40 // Winsock style write events +-#define POLL_FLAG_FD 0x80 // device is a Windows file descriptor. +-#define POLL_FLAG_ACCEPT_INVALID_FDS 0x100 // For broken 3rd party libs, e.g. curl +-#define POLL_FLAG_THUNK_TO_WND 0x200 // thunk callback to window message loop +- +- +-typedef void (*PollerFunction)(void *clientData); +-typedef void (*PollerFireWrapper)(PollerFunction func, +- void *funcData, +- void *wrapperData); +-typedef Bool (*PollerErrorFn)(const char *errorStr); +- +-/* +- * Initialisers: +- * +- * For the sake of convenience, we declare the initialisers +- * for custom implmentations here, even though the actual +- * implementations are distinct from the core poll code. +- */ +- +-typedef struct PollOptions { +- Bool locked; // Use internal MXUser for locking +- Bool allowFullQueue; // Don't assert when device event queue is full. +- VThreadID windowsMsgThread; // thread that processes Windows messages +- PollerFireWrapper fireWrapperFn; // optional; may be useful for stats +- void *fireWrapperData; // optional +- PollerErrorFn errorFn; // optional; called upon unrecoverable error +-} PollOptions; +- +- +-void Poll_InitDefault(void); +-void Poll_InitDefaultEx(const PollOptions *opts); +-void Poll_InitGtk(void); // On top of glib for Linux +-void Poll_InitCF(void); // On top of CoreFoundation for OSX +- +- +-/* +- * Functions +- */ +-int Poll_SocketPair(Bool vmci, Bool stream, int fds[2]); +-void Poll_Loop(Bool loop, Bool *exit, PollClass c); +-void Poll_LoopTimeout(Bool loop, Bool *exit, PollClass c, int timeout); +-Bool Poll_LockingEnabled(void); +-void Poll_Exit(void); +- +- +-/* +- * Poll_Callback adds a callback regardless of whether an identical one exists. +- * The exception to this rule is POLL_DEVICE callbacks: there is a maximum of +- * one read and one write callback per fd. +- * +- * Poll_CallbackRemove removes one callback. If there are multiple identical +- * callbacks, which one is removed is an implementation detail. Note that in +- * the case of POLL_DEVICE and POLL_REALTIME callbacks, the fd/delay used to +- * create the callback is not specified when removing, so all callbacks +- * of those types with the same flags, function, and clientData are considered +- * "identical" even if their fd/delay differed. +- */ +- +-VMwareStatus Poll_Callback(PollClassSet classSet, +- int flags, +- PollerFunction f, +- void *clientData, +- PollEventType type, +- PollDevHandle info, // fd/microsec delay +- MXUserRecLock *lck); +-Bool Poll_CallbackRemove(PollClassSet classSet, +- int flags, +- PollerFunction f, +- void *clientData, +- PollEventType type); +-Bool Poll_CallbackRemoveOneByCB(PollClassSet classSet, +- int flags, +- PollerFunction f, +- PollEventType type, +- void **clientData); +- +-void Poll_NotifyChange(PollClassSet classSet); +- +-/* +- * Wrappers for Poll_Callback and Poll_CallbackRemove that present +- * simpler subsets of those interfaces. +- */ +- +-VMwareStatus Poll_CB_Device(PollerFunction f, +- void *clientData, +- PollDevHandle device, +- Bool periodic); +- +-Bool Poll_CB_DeviceRemove(PollerFunction f, +- void *clientData, +- Bool periodic); +- +- +-VMwareStatus Poll_CB_RTime(PollerFunction f, +- void *clientData, +- int64 delay, // microseconds +- Bool periodic, +- MXUserRecLock *lock); +- +-Bool Poll_CB_RTimeRemove(PollerFunction f, +- void *clientData, +- Bool periodic); +- +- +-#ifdef _WIN32 +-void Poll_SetPumpsWindowsMessages(Bool pumps); +-void Poll_SetWindowMessageRecipient(HWND hWnd, UINT msg, Bool alwaysThunk); +-Bool Poll_FireWndCallback(void *lparam); +-#endif +- +-#if defined(__cplusplus) +-} // extern "C" +-#endif +- +-#endif // _POLL_H_ +diff --git a/lib/include/pollImpl.h b/lib/include/pollImpl.h +index 46442e55..8bc66997 100644 +--- a/lib/include/pollImpl.h ++++ b/lib/include/pollImpl.h +@@ -44,7 +44,7 @@ + #define INCLUDE_ALLOW_USERLEVEL + #include "includeCheck.h" + +-#include "poll.h" ++#include "vm_poll.h" + #include "vm_basic_asm.h" + + #if defined(__cplusplus) +diff --git a/lib/include/vm_poll.h b/lib/include/vm_poll.h +new file mode 100644 +index 00000000..6acd4f35 +--- /dev/null ++++ b/lib/include/vm_poll.h +@@ -0,0 +1,330 @@ ++/********************************************************* ++ * Copyright (C) 1998-2018 VMware, Inc. All rights reserved. ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU Lesser General Public License as published ++ * by the Free Software Foundation version 2.1 and no 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 Lesser GNU General Public ++ * License for more details. ++ * ++ * You should have received a copy of the GNU Lesser 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. ++ * ++ *********************************************************/ ++ ++/********************************************************* ++ * The contents of this file are subject to the terms of the Common ++ * Development and Distribution License (the "License") version 1.0 ++ * and no later version. You may not use this file except in ++ * compliance with the License. ++ * ++ * You can obtain a copy of the License at ++ * http://www.opensource.org/licenses/cddl1.php ++ * ++ * See the License for the specific language governing permissions ++ * and limitations under the License. ++ * ++ *********************************************************/ ++ ++ ++#ifndef _POLL_H_ ++#define _POLL_H_ ++ ++#define INCLUDE_ALLOW_USERLEVEL ++#define INCLUDE_ALLOW_VMCORE ++#include "includeCheck.h" ++ ++#include "vm_basic_types.h" ++#include "vm_basic_defs.h" ++#include "vmware.h" ++#include "userlock.h" ++ ++#if defined(__cplusplus) ++extern "C" { ++#endif ++ ++#ifdef _WIN32 ++#define HZ 100 ++#elif defined linux ++#include ++#elif __APPLE__ ++#include ++/* ++ * Old SDKs don't define TARGET_OS_IPHONE at all. ++ * New ones define it to 0 on Mac OS X, 1 on iOS. ++ */ ++#if !defined(TARGET_OS_IPHONE) || TARGET_OS_IPHONE == 0 ++#include ++#endif ++#include ++#define HZ 100 ++#endif ++#ifdef __ANDROID__ ++/* ++ * of android should be included, but its name is same ++ * with this file. So its content is put here to avoid conflict. ++ */ ++#include ++#define HZ 100 ++typedef unsigned int nfds_t; ++int poll(struct pollfd *, nfds_t, long); ++#endif ++ ++ ++/* ++ * Poll event types: each type has a different reason for firing, ++ * or condition that must be met before firing. ++ */ ++ ++typedef enum { ++ /* ++ * Actual Poll queue types against which you can register callbacks. ++ */ ++ POLL_VIRTUALREALTIME = -1, /* Negative because it doesn't have its own Q */ ++ POLL_VTIME = 0, ++ POLL_REALTIME, ++ POLL_DEVICE, ++ POLL_MAIN_LOOP, ++ POLL_NUM_QUEUES ++} PollEventType; ++ ++ ++/* ++ * Classes of events ++ * ++ * These are the predefined classes. More can be declared ++ * with Poll_AllocClass(). ++ */ ++ ++typedef enum PollClass { ++ POLL_CLASS_MAIN, ++ POLL_CLASS_PAUSE, ++ POLL_CLASS_IPC, ++ POLL_CLASS_CPT, ++ POLL_CLASS_MKS, ++ POLL_FIXED_CLASSES, ++ POLL_DEFAULT_FIXED_CLASSES, ++ /* Size enum to maximum */ ++ POLL_MAX_CLASSES = 31, ++} PollClass; ++ ++/* ++ * Do not use; Special pseudo private poll class supported by ++ * PollDefault only ++ */ ++#define POLL_DEFAULT_CLASS_NET POLL_FIXED_CLASSES ++#define POLL_DEFAULT_CS_NET PollClassSet_Singleton(POLL_DEFAULT_CLASS_NET) ++ ++/* ++ * Each callback is registered in a set of classes ++ */ ++ ++typedef struct PollClassSet { ++ uintptr_t bits; ++} PollClassSet; ++ ++/* An empty PollClassSet. */ ++static INLINE PollClassSet ++PollClassSet_Empty(void) ++{ ++ PollClassSet set = { 0 }; ++ return set; ++} ++ ++/* A PollClassSet with the single member. */ ++static INLINE PollClassSet ++PollClassSet_Singleton(PollClass c) ++{ ++ PollClassSet s = PollClassSet_Empty(); ++ ++ ASSERT_ON_COMPILE(POLL_MAX_CLASSES < sizeof s.bits * 8); ++ ASSERT(c < POLL_MAX_CLASSES); ++ ++ s.bits = CONST3264U(1) << c; ++ return s; ++} ++ ++/* Combine two PollClassSets. */ ++static INLINE PollClassSet ++PollClassSet_Union(PollClassSet lhs, PollClassSet rhs) ++{ ++ PollClassSet set; ++ set.bits = lhs.bits | rhs.bits; ++ return set; ++} ++ ++/* Add single class to PollClassSet. */ ++static INLINE PollClassSet ++PollClassSet_Include(PollClassSet set, PollClass c) ++{ ++ return PollClassSet_Union(set, PollClassSet_Singleton(c)); ++} ++ ++ ++#define POLL_CS_MAIN PollClassSet_Singleton(POLL_CLASS_MAIN) ++#define POLL_CS_PAUSE PollClassSet_Union(POLL_CS_MAIN, \ ++ PollClassSet_Singleton(POLL_CLASS_PAUSE)) ++#define POLL_CS_CPT PollClassSet_Union(POLL_CS_PAUSE, \ ++ PollClassSet_Singleton(POLL_CLASS_CPT)) ++#define POLL_CS_IPC PollClassSet_Union(POLL_CS_CPT, \ ++ PollClassSet_Singleton(POLL_CLASS_IPC)) ++#define POLL_CS_VMDB POLL_CS_PAUSE /* POLL_CLASS_VMDB is retired */ ++#define POLL_CS_MKS PollClassSet_Singleton(POLL_CLASS_MKS) ++/* ++ * DANGER. You don't need POLL_CS_ALWAYS. Really. So don't use it. ++ */ ++#define POLL_CS_ALWAYS PollClassSet_Union(POLL_CS_CPT, POLL_CS_IPC) ++ ++/* ++ * Poll class-set taxonomy: ++ * POLL_CS_MAIN ++ * - Unless you NEED another class, use POLL_CS_MAIN. ++ * POLL_CS_PAUSE ++ * - For callbacks that must occur even if the guest is paused. ++ * Most VMDB or Foundry commands are in this category. ++ * POLL_CS_CPT ++ * - Only for callbacks which can trigger intermediate Checkpoint ++ * transitions. ++ * The ONLY such callback is Migrate. ++ * POLL_CS_IPC ++ * - Only for callbacks which can contain Msg_(Post|Hint|Question) ++ * responses, and for signal handlers (why)? ++ * Vigor, VMDB, and Foundry can contain Msg_* responses. ++ * POLL_CS_MKS ++ * - Callback runs in MKS thread. ++ * POLL_CS_ALWAYS ++ * - Only for events that must be processed immediately. ++ * The ONLY such callback is OvhdMemVmxSizeCheck. ++ */ ++ ++ ++/* ++ * Poll_Callback flags ++ */ ++ ++#define POLL_FLAG_PERIODIC 0x01 // keep after firing ++#define POLL_FLAG_REMOVE_AT_POWEROFF 0x02 // self-explanatory ++#define POLL_FLAG_READ 0x04 // device is ready for reading ++#define POLL_FLAG_WRITE 0x08 // device is ready for writing ++#define POLL_FLAG_SOCKET 0x10 // device is a Windows socket ++#define POLL_FLAG_NO_BULL 0x20 // callback does its own locking ++#define POLL_FLAG_WINSOCK 0x40 // Winsock style write events ++#define POLL_FLAG_FD 0x80 // device is a Windows file descriptor. ++#define POLL_FLAG_ACCEPT_INVALID_FDS 0x100 // For broken 3rd party libs, e.g. curl ++#define POLL_FLAG_THUNK_TO_WND 0x200 // thunk callback to window message loop ++ ++ ++typedef void (*PollerFunction)(void *clientData); ++typedef void (*PollerFireWrapper)(PollerFunction func, ++ void *funcData, ++ void *wrapperData); ++typedef Bool (*PollerErrorFn)(const char *errorStr); ++ ++/* ++ * Initialisers: ++ * ++ * For the sake of convenience, we declare the initialisers ++ * for custom implmentations here, even though the actual ++ * implementations are distinct from the core poll code. ++ */ ++ ++typedef struct PollOptions { ++ Bool locked; // Use internal MXUser for locking ++ Bool allowFullQueue; // Don't assert when device event queue is full. ++ VThreadID windowsMsgThread; // thread that processes Windows messages ++ PollerFireWrapper fireWrapperFn; // optional; may be useful for stats ++ void *fireWrapperData; // optional ++ PollerErrorFn errorFn; // optional; called upon unrecoverable error ++} PollOptions; ++ ++ ++void Poll_InitDefault(void); ++void Poll_InitDefaultEx(const PollOptions *opts); ++void Poll_InitGtk(void); // On top of glib for Linux ++void Poll_InitCF(void); // On top of CoreFoundation for OSX ++ ++ ++/* ++ * Functions ++ */ ++int Poll_SocketPair(Bool vmci, Bool stream, int fds[2]); ++void Poll_Loop(Bool loop, Bool *exit, PollClass c); ++void Poll_LoopTimeout(Bool loop, Bool *exit, PollClass c, int timeout); ++Bool Poll_LockingEnabled(void); ++void Poll_Exit(void); ++ ++ ++/* ++ * Poll_Callback adds a callback regardless of whether an identical one exists. ++ * The exception to this rule is POLL_DEVICE callbacks: there is a maximum of ++ * one read and one write callback per fd. ++ * ++ * Poll_CallbackRemove removes one callback. If there are multiple identical ++ * callbacks, which one is removed is an implementation detail. Note that in ++ * the case of POLL_DEVICE and POLL_REALTIME callbacks, the fd/delay used to ++ * create the callback is not specified when removing, so all callbacks ++ * of those types with the same flags, function, and clientData are considered ++ * "identical" even if their fd/delay differed. ++ */ ++ ++VMwareStatus Poll_Callback(PollClassSet classSet, ++ int flags, ++ PollerFunction f, ++ void *clientData, ++ PollEventType type, ++ PollDevHandle info, // fd/microsec delay ++ MXUserRecLock *lck); ++Bool Poll_CallbackRemove(PollClassSet classSet, ++ int flags, ++ PollerFunction f, ++ void *clientData, ++ PollEventType type); ++Bool Poll_CallbackRemoveOneByCB(PollClassSet classSet, ++ int flags, ++ PollerFunction f, ++ PollEventType type, ++ void **clientData); ++ ++void Poll_NotifyChange(PollClassSet classSet); ++ ++/* ++ * Wrappers for Poll_Callback and Poll_CallbackRemove that present ++ * simpler subsets of those interfaces. ++ */ ++ ++VMwareStatus Poll_CB_Device(PollerFunction f, ++ void *clientData, ++ PollDevHandle device, ++ Bool periodic); ++ ++Bool Poll_CB_DeviceRemove(PollerFunction f, ++ void *clientData, ++ Bool periodic); ++ ++ ++VMwareStatus Poll_CB_RTime(PollerFunction f, ++ void *clientData, ++ int64 delay, // microseconds ++ Bool periodic, ++ MXUserRecLock *lock); ++ ++Bool Poll_CB_RTimeRemove(PollerFunction f, ++ void *clientData, ++ Bool periodic); ++ ++ ++#ifdef _WIN32 ++void Poll_SetPumpsWindowsMessages(Bool pumps); ++void Poll_SetWindowMessageRecipient(HWND hWnd, UINT msg, Bool alwaysThunk); ++Bool Poll_FireWndCallback(void *lparam); ++#endif ++ ++#if defined(__cplusplus) ++} // extern "C" ++#endif ++ ++#endif // _POLL_H_ +diff --git a/lib/rpcIn/rpcin.c b/lib/rpcIn/rpcin.c +index 47a3380e..660382c6 100644 +--- a/lib/rpcIn/rpcin.c ++++ b/lib/rpcIn/rpcin.c +@@ -57,7 +57,7 @@ + + #if defined(VMTOOLS_USE_VSOCKET) + # include +-# include "poll.h" ++# include "vm_poll.h" + # include "asyncsocket.h" + # include "vmci_defs.h" + #include "dataMap.h" +-- +2.23.0 + diff --git a/package/openvmtools/0004-Remove-assumptions-about-glibc-being-only-libc-imple.patch b/package/openvmtools/0004-Remove-assumptions-about-glibc-being-only-libc-imple.patch new file mode 100644 index 00000000..5960006f --- /dev/null +++ b/package/openvmtools/0004-Remove-assumptions-about-glibc-being-only-libc-imple.patch @@ -0,0 +1,27 @@ +From a0983d84185f04c4e40778fe951fde4439894882 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sun, 16 Jul 2017 07:37:03 -0700 +Subject: [PATCH] Remove assumptions about glibc being only libc + implementation on linux + +Signed-off-by: Khem Raj +[Retrieved (and updated to work on current version) from: +http://cgit.openembedded.org/meta-openembedded/tree/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0001-Remove-assumptions-about-glibc-being-only-libc-imple.patch?h=sumo] +Signed-off-by: Fabrice Fontaine +--- + open-vm-tools/lib/file/fileIOPosix.c | 2 +- + 2 files changed, 3 insertions(+), 1 deletion(-) + +Index: open-vm-tools/lib/file/fileIOPosix.c +=================================================================== +--- open-vm-tools.orig/lib/file/fileIOPosix.c ++++ open-vm-tools/lib/file/fileIOPosix.c +@@ -205,7 +205,7 @@ static AlignedPool alignedPool; + * are not available in any header file. + */ + +-#if defined(__linux__) && !defined(__ANDROID__) ++#if defined(__linux__) && defined(__GLIBC__) + #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64) + /* + * We want preadv/pwritev. But due to FOB=64, the symbols are -64. diff --git a/package/openvmtools/0005-Use-configure-test-for-struct-timespec.patch b/package/openvmtools/0005-Use-configure-test-for-struct-timespec.patch new file mode 100644 index 00000000..3386faec --- /dev/null +++ b/package/openvmtools/0005-Use-configure-test-for-struct-timespec.patch @@ -0,0 +1,48 @@ +From bf1eafb07297711baf9320b1edcca8a3376f117d Mon Sep 17 00:00:00 2001 +From: Natanael Copa +Date: Wed, 18 Nov 2015 09:03:00 +0000 +Subject: [PATCH] Use configure test for struct timespec + +Use the configure script to test for struct time spec instead of trying +to keep track of what platforms has it. + +Signed-off-by: Natanael Copa +[Retrieved from: +http://cgit.openembedded.org/meta-openembedded/tree/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0005-Use-configure-test-for-struct-timespec.patch?h=sumo] +Signed-off-by: Fabrice Fontaine +--- + open-vm-tools/configure.ac | 1 + + open-vm-tools/lib/include/hgfsUtil.h | 8 +------- + 2 files changed, 2 insertions(+), 7 deletions(-) + +Index: open-vm-tools/configure.ac +=================================================================== +--- open-vm-tools.orig/configure.ac ++++ open-vm-tools/configure.ac +@@ -1127,6 +1127,7 @@ AC_TYPE_OFF_T + AC_TYPE_PID_T + AC_TYPE_SIZE_T + AC_CHECK_MEMBERS([struct stat.st_rdev]) ++AC_CHECK_MEMBERS([struct timespec.tv_sec],[],[],[[#include ]]) + AC_HEADER_TIME + AC_STRUCT_TM + AC_C_VOLATILE +Index: open-vm-tools/lib/include/hgfsUtil.h +=================================================================== +--- open-vm-tools.orig/lib/include/hgfsUtil.h ++++ open-vm-tools/lib/include/hgfsUtil.h +@@ -53,13 +53,7 @@ + # include + # endif + # include "vm_basic_types.h" +-# if !defined _STRUCT_TIMESPEC && \ +- !defined _TIMESPEC_DECLARED && \ +- !defined __timespec_defined && \ +- !defined sun && \ +- !defined __FreeBSD__ && \ +- !__APPLE__ && \ +- !defined _WIN32 ++# if !defined HAVE_STRUCT_TIMESPEC_TV_SEC + struct timespec { + time_t tv_sec; + long tv_nsec; diff --git a/package/openvmtools/0006-Fix-definition-of-ALLPERMS-and-ACCESSPERMS.patch b/package/openvmtools/0006-Fix-definition-of-ALLPERMS-and-ACCESSPERMS.patch new file mode 100644 index 00000000..371004c9 --- /dev/null +++ b/package/openvmtools/0006-Fix-definition-of-ALLPERMS-and-ACCESSPERMS.patch @@ -0,0 +1,61 @@ +From 31ae6f42458f90d4994a4ad8e2b7673691612c36 Mon Sep 17 00:00:00 2001 +From: Natanael Copa +Date: Wed, 18 Nov 2015 09:10:14 +0000 +Subject: [PATCH] Fix definition of ALLPERMS and ACCESSPERMS + +The ALLPERMS and ACCESSPERMS defines are not specified in POSIX so +assume it is not there instead of testing for specific implementations. + +This is needed for musl libc. + +Signed-off-by: Natanael Copa +[Retrieved from: +http://cgit.openembedded.org/meta-openembedded/tree/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0006-Fix-definition-of-ALLPERMS-and-ACCESSPERMS.patch?h=sumo] +Signed-off-by: Fabrice Fontaine +--- + open-vm-tools/lib/hgfsServer/hgfsServerLinux.c | 8 +++++--- + open-vm-tools/services/plugins/dndcp/dnd/dndLinux.c | 3 +-- + 2 files changed, 6 insertions(+), 5 deletions(-) + +Index: open-vm-tools/lib/hgfsServer/hgfsServerLinux.c +=================================================================== +--- open-vm-tools.orig/lib/hgfsServer/hgfsServerLinux.c ++++ open-vm-tools/lib/hgfsServer/hgfsServerLinux.c +@@ -107,11 +107,13 @@ typedef struct DirectoryEntry { + #endif + + /* +- * ALLPERMS (mode 07777) and ACCESSPERMS (mode 0777) are not defined in the +- * Solaris version of . ++ * ALLPERMS (mode 07777) and ACCESSPERMS (mode 0777) are not specified in ++ * POSIX. + */ +-#ifdef sun ++#ifndef ACCESSPERMS + # define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) ++#endif ++#ifndef ALLPERMS + # define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO) + #endif + +Index: open-vm-tools/services/plugins/dndcp/dnd/dndLinux.c +=================================================================== +--- open-vm-tools.orig/services/plugins/dndcp/dnd/dndLinux.c ++++ open-vm-tools/services/plugins/dndcp/dnd/dndLinux.c +@@ -51,7 +51,7 @@ + + #define DND_ROOTDIR_PERMS (S_IRWXU | S_IRWXG | S_IRWXO) + #define DND_STAGINGDIR_PERMS (S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) +-#ifdef sun ++#ifndef ACCESSPERMS + #define ACCESSPERMS (S_IRWXU | S_IRWXG | S_IRWXO) + #endif + #ifdef __ANDROID__ +@@ -60,7 +60,6 @@ + */ + #define NO_SETMNTENT + #define NO_ENDMNTENT +-#define ACCESSPERMS (S_IRWXU | S_IRWXG | S_IRWXO) + #endif + + diff --git a/package/openvmtools/0007-Use-configure-to-test-for-feature-instead-of-platfor.patch b/package/openvmtools/0007-Use-configure-to-test-for-feature-instead-of-platfor.patch new file mode 100644 index 00000000..0d3948aa --- /dev/null +++ b/package/openvmtools/0007-Use-configure-to-test-for-feature-instead-of-platfor.patch @@ -0,0 +1,150 @@ +From 6cc1c22cc30320f56da552a76bd956db8f255b6a Mon Sep 17 00:00:00 2001 +From: Natanael Copa +Date: Wed, 18 Nov 2015 10:05:07 +0000 +Subject: [PATCH] Use configure to test for feature instead of platform + +Test for various functions instead of trying to keep track of what +platform and what version of the given platform has support for what. + +This should make it easier to port to currently unknown platforms and +will solve the issue if a platform add support for a missing feature in +the future. + +The features we test for are: +- getifaddrs +- getauxval +- issetugid +- __secure_getenv + +This is needed for musl libc. + +Signed-off-by: Natanael Copa +[Retrieved (and slightly updated) from: +http://cgit.openembedded.org/meta-openembedded/tree/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0007-Use-configure-to-test-for-feature-instead-of-platfor.patch?h=sumo] +Signed-off-by: Fabrice Fontaine +--- + open-vm-tools/configure.ac | 4 ++++ + open-vm-tools/lib/misc/idLinux.c | 30 ++++++++++++++---------------- + open-vm-tools/lib/nicInfo/nicInfoPosix.c | 8 ++++++-- + 3 files changed, 24 insertions(+), 18 deletions(-) + +Index: open-vm-tools/configure.ac +=================================================================== +--- open-vm-tools.orig/configure.ac ++++ open-vm-tools/configure.ac +@@ -798,6 +798,7 @@ AC_CHECK_FUNCS( + + AC_CHECK_FUNCS([ecvt]) + AC_CHECK_FUNCS([fcvt]) ++AC_CHECK_FUNCS([getifaddrs getauxval issetugid __secure_getenv]) + + AC_CHECK_FUNC([mkdtemp], [have_mkdtemp=yes]) + +@@ -1063,10 +1064,13 @@ AC_PATH_PROG( + ### + + AC_CHECK_HEADERS([crypt.h]) ++AC_CHECK_HEADERS([ifaddrs.h]) + AC_CHECK_HEADERS([inttypes.h]) + AC_CHECK_HEADERS([stdint.h]) + AC_CHECK_HEADERS([stdlib.h]) + AC_CHECK_HEADERS([wchar.h]) ++AC_CHECK_HEADERS([net/if.h]) ++AC_CHECK_HEADERS([sys/auxv.h]) + AC_CHECK_HEADERS([sys/inttypes.h]) + AC_CHECK_HEADERS([sys/io.h]) + AC_CHECK_HEADERS([sys/param.h]) # Required to make the sys/user.h check work correctly on FreeBSD +Index: open-vm-tools/lib/misc/idLinux.c +=================================================================== +--- open-vm-tools.orig/lib/misc/idLinux.c ++++ open-vm-tools/lib/misc/idLinux.c +@@ -27,12 +27,9 @@ + #include + #include + #include +-#ifdef __linux__ +-#if defined(__GLIBC__) && \ +- (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 16)) ++#ifdef HAVE_SYS_AUXV_H + #include + #endif +-#endif + #ifdef __APPLE__ + #include + #include +@@ -997,31 +994,32 @@ Id_EndSuperUser(uid_t uid) // IN: + static Bool + IdIsSetUGid(void) + { +-#if defined(__ANDROID__) +- /* Android does not have a secure_getenv, so be conservative. */ +- return TRUE; +-#else + /* + * We use __secure_getenv, which returns NULL if the binary is +- * setuid or setgid. Alternatives include, ++ * setuid or setgid, when issetugid or getauxval(AT_SECURE) is not ++ * available. Alternatives include, + * +- * a) getauxval(AT_SECURE); not available until glibc 2.16. +- * b) __libc_enable_secure; may not be exported. ++ * a) issetugid(); not (yet?) available in glibc. ++ * b) getauxval(AT_SECURE); not available until glibc 2.16. ++ * c) __libc_enable_secure; may not be exported. + * +- * Use (a) when we are based on glibc 2.16, or newer. ++ * Use (b) when we are based on glibc 2.16, or newer. + */ + +-#if defined(__GLIBC__) && \ +- (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 16)) ++#if HAVE_ISSETUGID ++ return issetugid(); ++#elif HAVE_GETAUXVAL + return getauxval(AT_SECURE) != 0; +-#else ++#elif HAVE___SECURE_GETENV + static const char envName[] = "VMW_SETUGID_TEST"; + + if (setenv(envName, "1", TRUE) == -1) { + return TRUE; /* Conservative */ + } + return __secure_getenv(envName) == NULL; +-#endif ++#else ++ /* Android does not have a secure_getenv, so be conservative. */ ++ return TRUE; + #endif + } + #endif +Index: open-vm-tools/lib/nicInfo/nicInfoPosix.c +=================================================================== +--- open-vm-tools.orig/lib/nicInfo/nicInfoPosix.c ++++ open-vm-tools/lib/nicInfo/nicInfoPosix.c +@@ -34,9 +34,13 @@ + #include + #include + #include +-#if defined(__FreeBSD__) || defined(__APPLE__) ++#if HAVE_SYS_SYSCTL_H + # include ++#endif ++#if HAVE_IFADDRS_H + # include ++#endif ++#if HAVE_NET_IF_H + # include + #endif + #ifndef NO_DNET +@@ -348,10 +352,7 @@ GuestInfoGetNicInfo(NicInfoV3 *nicInfo) + * + ****************************************************************************** + */ +-#if defined(__FreeBSD__) || \ +- defined(__APPLE__) || \ +- defined(USERWORLD) || \ +- (defined(__linux__) && defined(NO_DNET)) ++#if defined(NO_DNET) && defined(HAVE_GETIFADDRS) + + char * + GuestInfoGetPrimaryIP(void) diff --git a/package/openvmtools/0008-Use-configure-test-for-sys-stat.h-include.patch b/package/openvmtools/0008-Use-configure-test-for-sys-stat.h-include.patch new file mode 100644 index 00000000..c058dfe6 --- /dev/null +++ b/package/openvmtools/0008-Use-configure-test-for-sys-stat.h-include.patch @@ -0,0 +1,28 @@ +From 95c6184d9ff70a47c41768850923a96de9e544aa Mon Sep 17 00:00:00 2001 +From: Natanael Copa +Date: Wed, 18 Nov 2015 10:41:01 +0000 +Subject: [PATCH] Use configure test for sys/stat.h include + +This is needed for musl libc. + +Signed-off-by: Natanael Copa +[Retrieved from: +http://cgit.openembedded.org/meta-openembedded/tree/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0011-Use-configure-test-for-sys-stat.h-include.patch?h=sumo] +Signed-off-by: Fabrice Fontaine +--- + open-vm-tools/services/plugins/vix/vixTools.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: open-vm-tools/services/plugins/vix/vixTools.c +=================================================================== +--- open-vm-tools.orig/services/plugins/vix/vixTools.c ++++ open-vm-tools/services/plugins/vix/vixTools.c +@@ -66,7 +66,7 @@ + #include + #endif + +-#if defined(sun) || defined(__FreeBSD__) || defined(__APPLE__) ++#ifdef HAVE_SYS_STAT_H + #include + #endif + diff --git a/package/openvmtools/0009-Set-permissions-on-rules-file.patch b/package/openvmtools/0009-Set-permissions-on-rules-file.patch new file mode 100644 index 00000000..6a37c169 --- /dev/null +++ b/package/openvmtools/0009-Set-permissions-on-rules-file.patch @@ -0,0 +1,23 @@ +From c3ef6a8285132871ad10f9300d8afff55d8d6de2 Mon Sep 17 00:00:00 2001 +From: puneetse <22071208+puneetse@users.noreply.github.com> +Date: Wed, 16 Oct 2019 10:09:38 -0700 +Subject: [PATCH] Set permissions on rules file + +udevs rules should not be executable otherwise udev will log a warning in the journal + +Signed-off-by: Pascal de Bruijn +--- + udev/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/udev/Makefile.am b/udev/Makefile.am +index 68fbc3e27..8b9a4d716 100644 +--- a/udev/Makefile.am ++++ b/udev/Makefile.am +@@ -17,5 +17,5 @@ + + install-data-local: + $(INSTALL) -d $(DESTDIR)$(UDEVRULESDIR) +- $(INSTALL) $(srcdir)/99-vmware-scsi-udev.rules $(DESTDIR)$(UDEVRULESDIR) ++ $(INSTALL) -m 0644 $(srcdir)/99-vmware-scsi-udev.rules $(DESTDIR)$(UDEVRULESDIR) + diff --git a/package/openvmtools/0010-Change-DEVPATH-to-devpath.patch b/package/openvmtools/0010-Change-DEVPATH-to-devpath.patch new file mode 100644 index 00000000..5af694d8 --- /dev/null +++ b/package/openvmtools/0010-Change-DEVPATH-to-devpath.patch @@ -0,0 +1,25 @@ +From 22f5d198b3b2f7e4debed83948ba1baf70d4749a Mon Sep 17 00:00:00 2001 +From: puneetse <22071208+puneetse@users.noreply.github.com> +Date: Wed, 16 Oct 2019 10:04:41 -0700 +Subject: [PATCH] Change $DEVPATH to $devpath + +$DEVPATH throws a warning by udev. + +Signed-off-by: Pascal de Bruijn +--- + udev/99-vmware-scsi-udev.rules | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/udev/99-vmware-scsi-udev.rules b/udev/99-vmware-scsi-udev.rules +index 053b59706..a605d80ef 100644 +--- a/udev/99-vmware-scsi-udev.rules ++++ b/udev/99-vmware-scsi-udev.rules +@@ -2,6 +2,6 @@ + # + # This file is part of open-vm-tools + +-ACTION=="add", SUBSYSTEMS=="scsi", ATTRS{vendor}=="VMware*", ATTRS{model}=="Virtual disk*", ENV{DEVTYPE}=="disk", RUN+="/bin/sh -c 'echo 180 >/sys$DEVPATH/device/timeout'" +-ACTION=="add", SUBSYSTEMS=="scsi", ATTRS{vendor}=="VMware*", ATTRS{model}=="VMware Virtual S", ENV{DEVTYPE}=="disk", RUN+="/bin/sh -c 'echo 180 >/sys$DEVPATH/device/timeout'" ++ACTION=="add", SUBSYSTEMS=="scsi", ATTRS{vendor}=="VMware*", ATTRS{model}=="Virtual disk*", ENV{DEVTYPE}=="disk", RUN+="/bin/sh -c 'echo 180 >/sys/$devpath/device/timeout'" ++ACTION=="add", SUBSYSTEMS=="scsi", ATTRS{vendor}=="VMware*", ATTRS{model}=="VMware Virtual S", ENV{DEVTYPE}=="disk", RUN+="/bin/sh -c 'echo 180 >/sys/$devpath/device/timeout'" + diff --git a/package/openvmtools/0011-open-vm-tools-vmhgfs-fuse-fsutils.h-fix-build-on-mus.patch b/package/openvmtools/0011-open-vm-tools-vmhgfs-fuse-fsutils.h-fix-build-on-mus.patch new file mode 100644 index 00000000..e2984a38 --- /dev/null +++ b/package/openvmtools/0011-open-vm-tools-vmhgfs-fuse-fsutils.h-fix-build-on-mus.patch @@ -0,0 +1,41 @@ +From 0a5032669951ffd6735c294a6f309b0ec6667ea5 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 8 Mar 2020 18:49:00 +0100 +Subject: [PATCH] open-vm-tools/vmhgfs-fuse/fsutils.h: fix build on musl + +loff_t is not defined on musl so define it to avoid the following build +failure: + +In file included from module.h:39, + from bdhandler.c:31: +fsutil.h:76:11: error: unknown type name 'loff_t'; did you mean 'off_t'? + loff_t offset); + ^~~~~~ + off_t + +Fixes: + - http://autobuild.buildroot.org/results/4eba7c4585d318efdb9b965d58d879426588aa14 + +Signed-off-by: Fabrice Fontaine +[Upstream status: not sent yet (upstream is not reactive on third patch] +--- + vmhgfs-fuse/fsutil.h | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/vmhgfs-fuse/fsutil.h b/vmhgfs-fuse/fsutil.h +index 34b6d489..a94f9fbb 100644 +--- a/vmhgfs-fuse/fsutil.h ++++ b/vmhgfs-fuse/fsutil.h +@@ -32,7 +32,8 @@ + #include "hgfsProto.h" + #include + +-#if defined(__FreeBSD__) || defined(__SOLARIS__) || defined(__APPLE__) ++#if defined(__FreeBSD__) || defined(__SOLARIS__) || defined(__APPLE__) || \ ++ !(defined(__GLIBC__) || defined(__UCLIBC__)) + typedef long long loff_t; + #endif + +-- +2.25.0 + diff --git a/package/openvmtools/Config.in b/package/openvmtools/Config.in new file mode 100644 index 00000000..a50b6b9b --- /dev/null +++ b/package/openvmtools/Config.in @@ -0,0 +1,58 @@ +config BR2_PACKAGE_OPENVMTOOLS + bool "openvmtools" + depends on BR2_i386 || BR2_x86_64 + depends on BR2_USE_MMU # libglib2 + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_ENABLE_LOCALE + depends on !BR2_TOOLCHAIN_USES_UCLIBC + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBDNET + select BR2_PACKAGE_LIBTIRPC if !BR2_TOOLCHAIN_HAS_NATIVE_RPC + help + Open Virtual Machine Tools for VMware guest OS + + http://open-vm-tools.sourceforge.net/ + + ICU locales, Xerces, and X11 tools are currently not + supported. + + NOTE: Support for vmblock-fuse will be enabled in + openvmtools if the libfuse package is selected. + +if BR2_PACKAGE_OPENVMTOOLS + +config BR2_PACKAGE_OPENVMTOOLS_PAM + bool "PAM support" + # linux-pam needs locale and wchar, but we already have this + # dependency on the main symbol, above. + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_LINUX_PAM + help + Support for PAM in openvmtools + +comment "PAM support needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +config BR2_PACKAGE_OPENVMTOOLS_RESOLUTIONKMS + bool "resolutionkms support" + depends on BR2_PACKAGE_HAS_UDEV + depends on BR2_TOOLCHAIN_HAS_THREADS # libdrm + depends on BR2_i386 || BR2_x86_64 # libdrm vmwgfx + select BR2_PACKAGE_LIBDRM + select BR2_PACKAGE_LIBDRM_VMWGFX + help + Enable support for resolutionkms + +comment "resolutionkms needs udev, a toolchain w/ threads" + depends on BR2_i386 || BR2_x86_64 + depends on !BR2_PACKAGE_HAS_UDEV || !BR2_TOOLCHAIN_HAS_THREADS + +endif + +comment "openvmtools needs a glibc or musl toolchain w/ wchar, threads, locale" + depends on BR2_i386 || BR2_x86_64 + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_ENABLE_LOCALE || \ + BR2_TOOLCHAIN_USES_UCLIBC diff --git a/package/openvmtools/S10vmtoolsd b/package/openvmtools/S10vmtoolsd new file mode 100644 index 00000000..60ee875c --- /dev/null +++ b/package/openvmtools/S10vmtoolsd @@ -0,0 +1,56 @@ +#!/bin/sh +# +# Starts vmtoolsd for openvmtools +# + +DAEMON="vmtoolsd" +PIDFILE="/var/run/$DAEMON.pid" + +VMTOOLSD_ARGS="-b" + +# shellcheck source=/dev/null +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON" + +start() { + printf 'Starting %s: ' "$DAEMON" + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon -S -q -p "$PIDFILE" -x "/usr/bin/$DAEMON" \ + -- $VMTOOLSD_ARGS "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + rm -f "$PIDFILE" + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +case "$1" in + start|stop|restart) + "$1";; + reload) + # Restart, since there is no true "reload" feature. + restart;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/openvmtools/openvmtools.hash b/package/openvmtools/openvmtools.hash new file mode 100644 index 00000000..bd81d1f0 --- /dev/null +++ b/package/openvmtools/openvmtools.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 364cd0fdfa5a05e872d08609659e6231ec99788669f7ebba24bfb8c94168daef open-vm-tools-10.3.5-10430147.tar.gz +sha256 f734933bd7d49aef25aaf897ed7281ee822e8635056e69b895a7d2e668937fc5 COPYING diff --git a/package/openvmtools/openvmtools.mk b/package/openvmtools/openvmtools.mk new file mode 100644 index 00000000..4201c6da --- /dev/null +++ b/package/openvmtools/openvmtools.mk @@ -0,0 +1,83 @@ +################################################################################ +# +# openvmtools +# +################################################################################ + +OPENVMTOOLS_VERSION_MAJOR = 10.3.5 +OPENVMTOOLS_VERSION = $(OPENVMTOOLS_VERSION_MAJOR)-10430147 +OPENVMTOOLS_SITE = https://github.com/vmware/open-vm-tools/releases/download/stable-$(OPENVMTOOLS_VERSION_MAJOR) +OPENVMTOOLS_SOURCE = open-vm-tools-$(OPENVMTOOLS_VERSION).tar.gz +OPENVMTOOLS_LICENSE = LGPL-2.1 +OPENVMTOOLS_LICENSE_FILES = COPYING + +# configure.ac is patched +OPENVMTOOLS_AUTORECONF = YES +OPENVMTOOLS_CONF_OPTS = --with-dnet \ + --without-icu --without-x --without-gtk2 \ + --without-gtkmm --without-kernel-modules \ + --disable-deploypkg --without-xerces +OPENVMTOOLS_CONF_ENV += \ + CUSTOM_DNET_CPPFLAGS=" " \ + LIBS=$(TARGET_NLS_LIBS) +OPENVMTOOLS_DEPENDENCIES = \ + host-nfs-utils \ + libglib2 \ + libdnet \ + $(TARGET_NLS_DEPENDENCIES) + +ifeq ($(BR2_PACKAGE_LIBTIRPC),y) +OPENVMTOOLS_DEPENDENCIES += libtirpc +endif + +# When libfuse is available, openvmtools can build vmblock-fuse, so +# make sure that libfuse gets built first +ifeq ($(BR2_PACKAGE_LIBFUSE),y) +OPENVMTOOLS_DEPENDENCIES += libfuse +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +OPENVMTOOLS_CONF_OPTS += --with-ssl +OPENVMTOOLS_DEPENDENCIES += openssl +else +OPENVMTOOLS_CONF_OPTS += --without-ssl +endif + +ifeq ($(BR2_PACKAGE_OPENVMTOOLS_PAM),y) +OPENVMTOOLS_CONF_OPTS += --with-pam +OPENVMTOOLS_DEPENDENCIES += linux-pam +else +OPENVMTOOLS_CONF_OPTS += --without-pam +endif + +ifeq ($(BR2_PACKAGE_OPENVMTOOLS_RESOLUTIONKMS),y) +OPENVMTOOLS_CONF_OPTS += --enable-resolutionkms +OPENVMTOOLS_DEPENDENCIES += libdrm udev +else +OPENVMTOOLS_CONF_OPTS += --disable-resolutionkms +endif + +# symlink needed by lib/system/systemLinux.c (or will cry in /var/log/messages) +# defined in lib/misc/hostinfoPosix.c +# /sbin/shutdown needed for Guest OS restart/shutdown from hypervisor +define OPENVMTOOLS_POST_INSTALL_TARGET_THINGIES + ln -fs os-release $(TARGET_DIR)/etc/lfs-release + if [ ! -e $(TARGET_DIR)/sbin/shutdown ]; then \ + $(INSTALL) -D -m 755 package/openvmtools/shutdown \ + $(TARGET_DIR)/sbin/shutdown; \ + fi +endef + +OPENVMTOOLS_POST_INSTALL_TARGET_HOOKS += OPENVMTOOLS_POST_INSTALL_TARGET_THINGIES + +define OPENVMTOOLS_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 package/openvmtools/S10vmtoolsd \ + $(TARGET_DIR)/etc/init.d/S10vmtoolsd +endef + +define OPENVMTOOLS_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/openvmtools/vmtoolsd.service \ + $(TARGET_DIR)/usr/lib/systemd/system/vmtoolsd.service +endef + +$(eval $(autotools-package)) diff --git a/package/openvmtools/shutdown b/package/openvmtools/shutdown new file mode 100644 index 00000000..bca9765a --- /dev/null +++ b/package/openvmtools/shutdown @@ -0,0 +1,7 @@ +#!/bin/sh +#compatibility script for openvmtools +if [ "$1" == "-r" ]; then +/sbin/reboot +else +/sbin/poweroff +fi diff --git a/package/openvmtools/vmtoolsd.service b/package/openvmtools/vmtoolsd.service new file mode 100644 index 00000000..1d2a3566 --- /dev/null +++ b/package/openvmtools/vmtoolsd.service @@ -0,0 +1,15 @@ +[Unit] +Description=vmtoolsd for openvmtools +After=syslog.target network.target +ConditionVirtualization=vmware + +[Service] +Type=forking +PIDFile=/run/vmtoolsd.pid +ExecStart=/usr/bin/vmtoolsd -b /run/vmtoolsd.pid +Restart=on-failure +KillMode=process +KillSignal=SIGKILL + +[Install] +WantedBy=multi-user.target diff --git a/package/openvpn/Config.in b/package/openvpn/Config.in new file mode 100644 index 00000000..3f4a617f --- /dev/null +++ b/package/openvpn/Config.in @@ -0,0 +1,38 @@ +config BR2_PACKAGE_OPENVPN + bool "openvpn" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_OPENSSL if !BR2_PACKAGE_MBEDTLS + help + OpenVPN is a full-featured SSL VPN solution which can + accomodate a wide range of configurations, including road + warrior access, home/office/campus telecommuting, WiFi + security, secure branch office linking, and enterprise-scale + remote access solutions with load balancing, failover, and + fine-grained access-controls. + + http://openvpn.net/ + +if BR2_PACKAGE_OPENVPN + +config BR2_PACKAGE_OPENVPN_LZ4 + bool "LZ4 compression" + default y + select BR2_PACKAGE_LZ4 + help + Enable LZ4 compression. + +config BR2_PACKAGE_OPENVPN_LZO + bool "LZO compression" + default y + select BR2_PACKAGE_LZO + help + Enable LZO compression. + +config BR2_PACKAGE_OPENVPN_SMALL + bool "Optimize for small size" + help + Make OpenVPN as small as possible. + You loose eurephia, debugging info, help messages and more. + It saves around 100 KiB in binary file size. + +endif diff --git a/package/openvpn/S60openvpn b/package/openvpn/S60openvpn new file mode 100644 index 00000000..f097cf11 --- /dev/null +++ b/package/openvpn/S60openvpn @@ -0,0 +1,99 @@ +#!/bin/sh -e +# +# Original version by Robert Leslie +# , edited by iwj and cs +# Modified for openvpn by Alberto Gonzalez Iniesta +# Modified for restarting / starting / stopping single tunnels by Richard Mueller + +test $DEBIAN_SCRIPT_DEBUG && set -v -x + +CONFIG_DIR=/etc/openvpn +test -d $CONFIG_DIR || exit 0 + +start_vpn () { + printf " $NAME " + start-stop-daemon -S -p /var/run/openvpn.$NAME.pid -x /usr/sbin/openvpn -- \ + --daemon --writepid /var/run/openvpn.$NAME.pid \ + --config $CONFIG_DIR/$NAME.conf --cd $CONFIG_DIR + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +stop_vpn () { + printf " $NAME " + start-stop-daemon -K -p /var/run/openvpn.$NAME.pid -x /usr/sbin/openvpn +} + +case "$1" in +start) + printf "Starting openvpn:" + + if test -z $2 ; then + for CONFIG in `cd $CONFIG_DIR; ls *.conf 2> /dev/null`; do + NAME=${CONFIG%%.conf} + start_vpn + done + else + if test -e $CONFIG_DIR/$2.conf ; then + NAME=$2 + start_vpn + else + printf " No such VPN: $2" + fi + fi + echo "." + + ;; +stop) + printf "Stopping openvpn:" + + if test -z $2 ; then + for PIDFILE in `ls /var/run/openvpn.*.pid 2> /dev/null`; do + NAME=`echo $PIDFILE | cut -c18-` + NAME=${NAME%%.pid} + stop_vpn + done + else + if test -e /var/run/openvpn.$2.pid ; then + PIDFILE=`ls /var/run/openvpn.$2.pid 2> /dev/null` + NAME=`echo $PIDFILE | cut -c18-` + NAME=${NAME%%.pid} + stop_vpn + else + printf " No such VPN: $2" + fi + fi + echo "." + ;; +# We only 'reload' for running VPNs. New ones will only start with 'start' or 'restart'. +reload|force-reload) + printf "Reloading openvpn:" + for PIDFILE in `ls /var/run/openvpn.*.pid 2> /dev/null`; do + NAME=`echo $PIDFILE | cut -c18-` + NAME=${NAME%%.pid} +# If openvpn if running under a different user than root we'll need to restart + if egrep '^( |\t)*user' $CONFIG_DIR/$NAME.conf > /dev/null 2>&1 ; then + stop_vpn + sleep 1 + start_vpn + printf "(restarted)" + else + kill -HUP `cat $PIDFILE` || true + printf " $NAME" + fi + done + echo "." + ;; + +restart) + $0 stop $2 + sleep 1 + $0 start $2 + ;; +*) + echo "Usage: $0 {start|stop|reload|restart|force-reload}" >&2 + exit 1 + ;; +esac + +exit 0 + +# vim:set ai et sts=2 sw=2 tw=0: diff --git a/package/openvpn/openvpn.hash b/package/openvpn/openvpn.hash new file mode 100644 index 00000000..36f90ff1 --- /dev/null +++ b/package/openvpn/openvpn.hash @@ -0,0 +1,3 @@ +# Locally calculated after checking signature +sha256 b12743836901f365efaf82ab2493967e1b21c21eb43ce9a8da1002a17c9c1dc8 openvpn-2.5.2.tar.xz +sha256 1fcb78d7e478bb8a9408010bdc91b36e213b1facfad093df3f7ce7e28af19043 COPYRIGHT.GPL diff --git a/package/openvpn/openvpn.mk b/package/openvpn/openvpn.mk new file mode 100644 index 00000000..9b3802fd --- /dev/null +++ b/package/openvpn/openvpn.mk @@ -0,0 +1,78 @@ +################################################################################ +# +# openvpn +# +################################################################################ + +OPENVPN_VERSION = 2.5.2 +OPENVPN_SOURCE = openvpn-$(OPENVPN_VERSION).tar.xz +OPENVPN_SITE = http://swupdate.openvpn.net/community/releases +OPENVPN_DEPENDENCIES = host-pkgconf +OPENVPN_LICENSE = GPL-2.0 +OPENVPN_LICENSE_FILES = COPYRIGHT.GPL +OPENVPN_CPE_ID_VENDOR = openvpn +OPENVPN_CONF_OPTS = \ + --disable-unit-tests \ + $(if $(BR2_STATIC_LIBS),--disable-plugins) +OPENVPN_CONF_ENV = NETSTAT=/bin/netstat + +ifeq ($(BR2_PACKAGE_OPENVPN_SMALL),y) +OPENVPN_CONF_OPTS += \ + --enable-small \ + --disable-plugins +endif + +ifeq ($(BR2_PACKAGE_OPENVPN_LZ4),y) +OPENVPN_DEPENDENCIES += lz4 +else +OPENVPN_CONF_OPTS += --disable-lz4 +endif + +ifeq ($(BR2_PACKAGE_OPENVPN_LZO),y) +OPENVPN_DEPENDENCIES += lzo +else +OPENVPN_CONF_OPTS += --disable-lzo +endif + +ifeq ($(BR2_PACKAGE_LIBSELINUX),y) +OPENVPN_DEPENDENCIES += libselinux +OPENVPN_CONF_OPTS += --enable-selinux +else +OPENVPN_CONF_OPTS += --disable-selinux +endif + +ifeq ($(BR2_PACKAGE_LINUX_PAM),y) +OPENVPN_DEPENDENCIES += linux-pam +OPENVPN_CONF_OPTS += --enable-plugin-auth-pam +else +OPENVPN_CONF_OPTS += --disable-plugin-auth-pam +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +OPENVPN_DEPENDENCIES += openssl +OPENVPN_CONF_OPTS += --with-crypto-library=openssl +else ifeq ($(BR2_PACKAGE_MBEDTLS),y) +OPENVPN_DEPENDENCIES += mbedtls +OPENVPN_CONF_OPTS += --with-crypto-library=mbedtls +endif + +ifeq ($(BR2_PACKAGE_PKCS11_HELPER),y) +OPENVPN_DEPENDENCIES += pkcs11-helper +OPENVPN_CONF_OPTS += --enable-pkcs11 +else +OPENVPN_CONF_OPTS += --disable-pkcs11 +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +OPENVPN_DEPENDENCIES += systemd +OPENVPN_CONF_OPTS += --enable-systemd +else +OPENVPN_CONF_OPTS += --disable-systemd +endif + +define OPENVPN_INSTALL_INIT_SYSV + $(INSTALL) -m 755 -D package/openvpn/S60openvpn \ + $(TARGET_DIR)/etc/init.d/S60openvpn +endef + +$(eval $(autotools-package)) diff --git a/package/openzwave/Config.in b/package/openzwave/Config.in new file mode 100644 index 00000000..b5c1b620 --- /dev/null +++ b/package/openzwave/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_OPENZWAVE + bool "openzwave" + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS + depends on BR2_USE_WCHAR + select BR2_PACKAGE_TINYXML + help + Free software library that interfaces with selected Z-Wave + PC controllers, allowing anyone to create applications that + manipulate and respond to devices on a Z-Wave network, + without requiring in-depth knowledge of the Z-Wave protocol + + http://www.openzwave.net + +comment "openzwave needs a toolchain w/ C++, dynamic library, NPTL, wchar" + depends on !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS || \ + !BR2_TOOLCHAIN_HAS_THREADS_NPTL || !BR2_USE_WCHAR diff --git a/package/openzwave/openzwave.hash b/package/openzwave/openzwave.hash new file mode 100644 index 00000000..e32908df --- /dev/null +++ b/package/openzwave/openzwave.hash @@ -0,0 +1,7 @@ +# Locally computed: +sha256 3c0b7e63319832c0eea5a251facd8c4d43f8815356ea61361f8bb9652b2ad8be openzwave-62444b0f979c337d2091d77d89cf63c2ae9775cf.tar.gz +sha256 e3a994d82e644b03a792a930f574002658412f62407f5fee083f2555c5f23118 LICENSE +sha256 c8db08727d03bea1213cdb29459b4b489b0d68a0866765df40ff205c6cd7224b licenses/license.txt +sha256 4da452226e9064b597020ad404e1c78d8175bc31ad7c1908485a92c0a4d70284 licenses/lgpl.txt +sha256 33ffdead480674d5f33e2934822a3b93c93e3f8c894667a3bf30bd1195b38f83 licenses/gpl.txt +sha256 6f50ebf9af9b6658c7936ffcc6fedd99254df984c0fec2e6ffb9f3aa1c4ef3e1 licenses/Apache-License-2.0.txt diff --git a/package/openzwave/openzwave.mk b/package/openzwave/openzwave.mk new file mode 100644 index 00000000..357d19f3 --- /dev/null +++ b/package/openzwave/openzwave.mk @@ -0,0 +1,59 @@ +################################################################################ +# +# openzwave +# +################################################################################ + +OPENZWAVE_VERSION = 62444b0f979c337d2091d77d89cf63c2ae9775cf +OPENZWAVE_SITE = $(call github,OpenZWave,open-zwave,$(OPENZWAVE_VERSION)) +OPENZWAVE_LICENSE = LGPL-3.0+, GPL-3.0 (examples), Apache-2.0 (sh2ju.sh) +OPENZWAVE_LICENSE_FILES = LICENSE licenses/license.txt licenses/lgpl.txt \ + licenses/gpl.txt licenses/Apache-License-2.0.txt +OPENZWAVE_DEPENDENCIES = tinyxml + +OPENZWAVE_INSTALL_STAGING = YES + +# Set instlibdir to install libopenzwave.so* in the correct directory +# otherwise openzwave will check that /lib64 exists (on the host) to +# know if the library should be installed in $(PREFIX)/lib or $(PREFIX)/lib64. +# Set pkgconfigdir to /lib/pkgconfig to install libopenzwave.pc in the +# correct directory otherwise openzwave will call +# "pkg-config --variable pc_path pkg-config" which returns an incorrect value. +# Set sysconfdir to /etc/openzwave to install openzwave configuration files in +# the correct directory otherwise openzwave will install configuration files in +# $(PREFIX)/etc/openzwave. +# Disable doxygen documentation. +OPENZWAVE_MAKE_OPTS = \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + PREFIX=/usr \ + instlibdir=/usr/lib \ + pkgconfigdir=/usr/lib/pkgconfig \ + sysconfdir=/etc/openzwave \ + DOXYGEN= \ + USE_BI_TXML=0 + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +OPENZWAVE_DEPENDENCIES += host-pkgconf udev +OPENZWAVE_MAKE_OPTS += USE_HID=1 +else +OPENZWAVE_MAKE_OPTS += USE_HID=0 +endif + +define OPENZWAVE_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(OPENZWAVE_MAKE_OPTS) -C $(@D) +endef + +define OPENZWAVE_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(OPENZWAVE_MAKE_OPTS) -C $(@D) \ + DESTDIR=$(STAGING_DIR) install +endef + +# Delete unneeded ozw_config binary from target directory as this is an utility +# application used to get the openzwave build configuration. +define OPENZWAVE_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(OPENZWAVE_MAKE_OPTS) -C $(@D) \ + DESTDIR=$(TARGET_DIR) install + rm -f $(TARGET_DIR)/usr/bin/ozw_config +endef + +$(eval $(generic-package)) diff --git a/package/opkg-utils/0001-Makefile-seperate-manpages-and-utils-install.patch b/package/opkg-utils/0001-Makefile-seperate-manpages-and-utils-install.patch new file mode 100644 index 00000000..140187ca --- /dev/null +++ b/package/opkg-utils/0001-Makefile-seperate-manpages-and-utils-install.patch @@ -0,0 +1,50 @@ +From 74ccbee0f798822041dba5c6564df62a0c60d86b Mon Sep 17 00:00:00 2001 +From: Ryan Barnett +Date: Mon, 22 Feb 2021 07:09:34 -0600 +Subject: Makefile: separate manpages and utils install + +The installation of opkg-build man page introduces a host dependency +on perl for the pod2man package to generate the man page. + +To allow the opkg-utils scripts to be installed separately from the +manpages, break apart the install step into two install steps: +install-utils and install-docs + +Backported from: 74ccbee0f798822041dba5c6564df62a0c60d86b + +CC: Christian Hermann +Signed-off-by: Ryan Barnett +Signed-off-by: Alex Stewart +Signed-off-by: Ryan Barnett +--- + Makefile | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/Makefile b/Makefile +index 4049654..fe96d5a 100644 +--- a/Makefile ++++ b/Makefile +@@ -27,9 +27,11 @@ mandir ?= $(PREFIX)/man + + all: $(UTILS) $(MANPAGES) + +-install: all ++install-utils: $(UTILS) + install -d $(DESTDIR)$(bindir) + install -m 755 $(UTILS) $(DESTDIR)$(bindir) ++ ++install-docs: $(MANPAGES) + install -d $(DESTDIR)$(mandir) + for m in $(MANPAGES); \ + do \ +@@ -37,4 +39,6 @@ install: all + install -m 644 "$$m" $(DESTDIR)$(mandir)/man$${m##*.}; \ + done + +-.PHONY: install all ++install: install-utils install-docs ++ ++.PHONY: install install-utils install-docs all +-- +cgit v1.2.2-1-g5e49 + diff --git a/package/opkg-utils/Config.in.host b/package/opkg-utils/Config.in.host new file mode 100644 index 00000000..1c9c474a --- /dev/null +++ b/package/opkg-utils/Config.in.host @@ -0,0 +1,6 @@ +config BR2_PACKAGE_HOST_OPKG_UTILS + bool "host opkg-utils" + help + Helper scripts for use with the opkg package manager. + + https://git.yoctoproject.org/cgit/cgit.cgi/opkg-utils/ diff --git a/package/opkg-utils/opkg-utils.hash b/package/opkg-utils/opkg-utils.hash new file mode 100644 index 00000000..779852d9 --- /dev/null +++ b/package/opkg-utils/opkg-utils.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 552c074630b6d6b39a32a35243fb34d7c5888b8a4f18118abb4daf92d0e847f2 opkg-utils-0.4.3-br1.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/opkg-utils/opkg-utils.mk b/package/opkg-utils/opkg-utils.mk new file mode 100644 index 00000000..19dfb26f --- /dev/null +++ b/package/opkg-utils/opkg-utils.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# opkg-utils +# +################################################################################ + +OPKG_UTILS_VERSION = 0.4.3 +OPKG_UTILS_SITE = http://git.yoctoproject.org/git/opkg-utils +OPKG_UTILS_SITE_METHOD = git +OPKG_UTILS_LICENSE = GPL-2.0+ +OPKG_UTILS_LICENSE_FILES = COPYING + +HOST_OPKG_UTILS_DEPENDENCIES = \ + $(BR2_PYTHON3_HOST_DEPENDENCY) \ + host-diffutils \ + host-lz4 \ + host-xz + +# Nothing to build; only scripts to install. +define HOST_OPKG_UTILS_INSTALL_CMDS + $(MAKE) -C $(@D) PREFIX=$(HOST_DIR) install-utils +endef + +$(eval $(host-generic-package)) diff --git a/package/opkg/Config.in b/package/opkg/Config.in new file mode 100644 index 00000000..1f6a3934 --- /dev/null +++ b/package/opkg/Config.in @@ -0,0 +1,33 @@ +comment "opkg needs a toolchain w/ wchar" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR + +config BR2_PACKAGE_OPKG + bool "opkg" + depends on BR2_USE_MMU # fork() + depends on BR2_USE_WCHAR # libarchive + select BR2_PACKAGE_LIBARCHIVE + help + Opkg is a lightweight package management system, based on + ipkg. It is written in C and resembles apt/dpkg in + operation. It is intended for use on embedded Linux devices. + Opkg is maintained, stable, robust and conservative in its + memory usage, despite its buggy ipkg ancestry. As best it + can, opkg maintains backwards compatibility with ipkg and + conforms to a subset of debian's policy manual regarding + control files. + + https://code.google.com/archive/p/opkg/ + +if BR2_PACKAGE_OPKG + +config BR2_PACKAGE_OPKG_GPG_SIGN + bool "gnupg support" + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgpg-error + select BR2_PACKAGE_LIBGPGME + select BR2_PACKAGE_LIBGPG_ERROR + help + Enable opkg package signature checking support using + gnupg/libgpgme. + +endif diff --git a/package/opkg/opkg.hash b/package/opkg/opkg.hash new file mode 100644 index 00000000..b1ead67a --- /dev/null +++ b/package/opkg/opkg.hash @@ -0,0 +1,4 @@ +# From http://downloads.yoctoproject.org/releases/opkg/SHA256SUMS +sha256 86887852c43457edfff9d8b6d9520f3f1cdd55f25eb600a6eb31e1c4e151e106 opkg-0.4.2.tar.gz +# Locally calculated +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/opkg/opkg.mk b/package/opkg/opkg.mk new file mode 100644 index 00000000..e25e51b9 --- /dev/null +++ b/package/opkg/opkg.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# opkg +# +################################################################################ + +OPKG_VERSION = 0.4.2 +OPKG_SITE = http://downloads.yoctoproject.org/releases/opkg +OPKG_DEPENDENCIES = host-pkgconf libarchive +OPKG_LICENSE = GPL-2.0+ +OPKG_LICENSE_FILES = COPYING +OPKG_INSTALL_STAGING = YES +OPKG_CONF_OPTS = --disable-curl + +# Ensure directory for lockfile exists +define OPKG_CREATE_LOCKDIR + mkdir -p $(TARGET_DIR)/usr/lib/opkg +endef + +ifeq ($(BR2_PACKAGE_OPKG_GPG_SIGN),y) +OPKG_CONF_OPTS += --enable-gpg +OPKG_CONF_ENV += \ + ac_cv_path_GPGME_CONFIG=$(STAGING_DIR)/usr/bin/gpgme-config \ + ac_cv_path_GPGERR_CONFIG=$(STAGING_DIR)/usr/bin/gpg-error-config +OPKG_DEPENDENCIES += libgpgme libgpg-error +else +OPKG_CONF_OPTS += --disable-gpg +endif + +OPKG_POST_INSTALL_TARGET_HOOKS += OPKG_CREATE_LOCKDIR + +$(eval $(autotools-package)) diff --git a/package/oprofile/0001-musl.patch b/package/oprofile/0001-musl.patch new file mode 100644 index 00000000..094cd164 --- /dev/null +++ b/package/oprofile/0001-musl.patch @@ -0,0 +1,48 @@ +Remove non-Posix use of FTW_ACTIONRETVAL + +The musl implementation of nftw doesn't support the glibc extension +FTW_ACTIONRETVAL. Since none of the features of FTW_ACTIONRETVAL are +used here, just use the normal nftw return value. + +Downloaded from: +https://github.com/openwrt-mirror/openwrt/blob/f22d5e25660106a48727c7aa5d1a73e4171a7987/package/devel/oprofile/patches/100-musl.patch +after I found a hint for the patch here: +http://patchwork.openembedded.org/patch/112675/ + +Removed unneeded patch for libop/op_events.c. + +Because openwrt removed the oprofile package from their repo last week +https://github.com/openwrt-mirror/openwrt/commit/aaf46a8524e138e1673a398e8d2dd9357405b313#diff-fe14456f94abf436d997e2c01c10f3bd +I decided to put this patch into the buildroot repo instead of adding +_PATCH to oprofile.mk + +Signed-off-by: Bernd Kuhls + +--- a/pe_profiling/operf.cpp ++++ b/pe_profiling/operf.cpp +@@ -857,11 +857,14 @@ static int __delete_old_previous_sample_ + int tflag __attribute__((unused)), + struct FTW *ftwbuf __attribute__((unused))) + { ++ int err; ++ + if (remove(fpath)) { ++ err = errno; + perror("sample data removal error"); +- return FTW_STOP; ++ return err; + } else { +- return FTW_CONTINUE; ++ return 0; + } + } + +@@ -896,7 +899,7 @@ static void convert_sample_data(void) + return; + + if (!operf_options::append) { +- int flags = FTW_DEPTH | FTW_ACTIONRETVAL; ++ int flags = FTW_DEPTH; + errno = 0; + if (nftw(previous_sampledir.c_str(), __delete_old_previous_sample_data, 32, flags) !=0 && + errno != ENOENT) { diff --git a/package/oprofile/Config.in b/package/oprofile/Config.in new file mode 100644 index 00000000..cce2cfda --- /dev/null +++ b/package/oprofile/Config.in @@ -0,0 +1,51 @@ +# memory barrier function implemented only for some architectures +config BR2_PACKAGE_OPROFILE_ARCH_SUPPORTS + bool + default y + depends on BR2_arceb || BR2_arcle || BR2_arm || BR2_armeb || \ + BR2_aarch64 || BR2_aarch64_be || BR2_i386 || BR2_mips || \ + BR2_mipsel || BR2_mips64 || BR2_mips64el || BR2_powerpc || \ + BR2_powerpc64 || BR2_powerpc64le || BR2_sh || \ + BR2_sparc || BR2_sparc64 || BR2_x86_64 + +config BR2_PACKAGE_OPROFILE_NEEDS_LIBPFM4 + bool + default y if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le + +config BR2_PACKAGE_OPROFILE + bool "oprofile" + depends on BR2_USE_MMU # fork() + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR # binutils + depends on BR2_PACKAGE_OPROFILE_ARCH_SUPPORTS + # libpfm4 is needed on PowerPC, and requires thread support + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL || !BR2_PACKAGE_OPROFILE_NEEDS_LIBPFM4 + select BR2_PACKAGE_POPT + select BR2_PACKAGE_BINUTILS + select BR2_PACKAGE_LIBPFM4 if BR2_PACKAGE_OPROFILE_NEEDS_LIBPFM4 + help + OProfile is a system-wide profiler for Linux systems, + capable of profiling all running code at low overhead. + OProfile is released under the GNU GPL. + + It consists of a kernel driver and a daemon for collecting + sample data, and several post-profiling tools for turning + data into information. + + OProfile leverages the hardware performance counters of the + CPU to enable profiling of a wide variety of interesting + statistics, which can also be used for basic time-spent + profiling. All code is profiled: hardware and software + interrupt handlers, kernel modules, the kernel, shared + libraries, and applications. + + https://sourceforge.net/projects/oprofile/ + +comment "oprofile needs a toolchain w/ C++, wchar" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_OPROFILE_ARCH_SUPPORTS + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR + +comment "oprofile needs a toolchain w/ NPTL on PowerPC(64)" + depends on BR2_USE_MMU && BR2_PACKAGE_OPROFILE_NEEDS_LIBPFM4 + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL diff --git a/package/oprofile/oprofile.hash b/package/oprofile/oprofile.hash new file mode 100644 index 00000000..7d005aa7 --- /dev/null +++ b/package/oprofile/oprofile.hash @@ -0,0 +1,6 @@ +# From http://sourceforge.net/projects/oprofile/files/oprofile/oprofile-1.4.0/ +sha1 d4d7634372d18de821b33650ad0ff7392e94c6e3 oprofile-1.4.0.tar.gz +md5 ac0ff685ec9735e30d6a4d19de0efed7 oprofile-1.4.0.tar.gz + +# Hash for license file: +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/oprofile/oprofile.mk b/package/oprofile/oprofile.mk new file mode 100644 index 00000000..85bc4efa --- /dev/null +++ b/package/oprofile/oprofile.mk @@ -0,0 +1,64 @@ +################################################################################ +# +# oprofile +# +################################################################################ + +OPROFILE_VERSION = 1.4.0 +OPROFILE_SITE = http://downloads.sourceforge.net/project/oprofile/oprofile/oprofile-$(OPROFILE_VERSION) +OPROFILE_LICENSE = GPL-2.0+ +OPROFILE_LICENSE_FILES = COPYING +OPROFILE_CPE_ID_VENDOR = maynard_johnson +OPROFILE_CONF_OPTS = \ + --disable-account-check \ + --enable-gui=no \ + --with-kernel=$(STAGING_DIR)/usr + +OPROFILE_BINARIES = \ + utils/ophelp pp/opannotate pp/oparchive pp/opgprof \ + pp/opreport opjitconv/opjitconv \ + utils/op-check-perfevents libabi/opimport \ + pe_counting/ocount pe_profiling/operf + +ifeq ($(BR2_i386),y) +OPROFILE_ARCH = i386 +endif +ifeq ($(BR2_mipsel),y) +OPROFILE_ARCH = mips +endif +ifeq ($(BR2_powerpc),y) +OPROFILE_ARCH = ppc +endif +ifeq ($(BR2_x86_64),y) +OPROFILE_ARCH = x86-64 +endif +ifeq ($(OPROFILE_ARCH),) +OPROFILE_ARCH = $(BR2_ARCH) +endif + +OPROFILE_DEPENDENCIES = popt binutils host-pkgconf + +ifeq ($(BR2_PACKAGE_LIBPFM4),y) +OPROFILE_DEPENDENCIES += libpfm4 +endif + +ifeq ($(BR2_STATIC_LIBS),) +define OPROFILE_INSTALL_SHARED_LIBRARY + $(INSTALL) -m 755 $(@D)/libopagent/.libs/*.so* $(TARGET_DIR)/usr/lib/oprofile +endef +endif + +define OPROFILE_INSTALL_TARGET_CMDS + $(INSTALL) -d -m 755 $(TARGET_DIR)/usr/bin + $(INSTALL) -d -m 755 $(TARGET_DIR)/usr/share/oprofile + $(INSTALL) -d -m 755 $(TARGET_DIR)/usr/lib/oprofile + if [ -d $(@D)/events/$(OPROFILE_ARCH) ]; then \ + cp -dpfr $(@D)/events/$(OPROFILE_ARCH) \ + $(TARGET_DIR)/usr/share/oprofile; \ + fi + $(INSTALL) -m 644 $(@D)/libregex/stl.pat $(TARGET_DIR)/usr/share/oprofile + $(INSTALL) -m 755 $(addprefix $(@D)/, $(OPROFILE_BINARIES)) $(TARGET_DIR)/usr/bin + $(OPROFILE_INSTALL_SHARED_LIBRARY) +endef + +$(eval $(autotools-package)) diff --git a/package/optee-benchmark/0001-main-fix-typo.patch b/package/optee-benchmark/0001-main-fix-typo.patch new file mode 100644 index 00000000..8ad5a26f --- /dev/null +++ b/package/optee-benchmark/0001-main-fix-typo.patch @@ -0,0 +1,55 @@ +From ffa935dc881c394a824e063c8fde7dd102e06d8c Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Fri, 8 May 2020 23:39:59 +0200 +Subject: [PATCH] main: fix typo +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The function yaml_mapping_start_event_initialize() +take yaml_mapping_style_t style as last argument: + +int yaml_mapping_start_event_initialize( + yaml_event_t *event, + const yaml_char_t *anchor, + const yaml_char_t *tag, + int implicit, + yaml_mapping_style_t style) + +Use YAML_ANY_MAPPING_STYLE instead of YAML_ANY_SEQUENCE_STYLE + +Fixes: +main.c:173:5: error: implicit conversion from ‘enum yaml_sequence_style_e’ to ‘yaml_mapping_style_t’ {aka ‘enum yaml_mapping_style_e’} [-Werror=enum-conversion] + 173 | YAML_ANY_SEQUENCE_STYLE)) + | ^~~~~~~~~~~~~~~~~~~~~~~ + +Signed-off-by: Romain Naour +--- + main.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/main.c b/main.c +index 29a7c42..1685d3e 100644 +--- a/main.c ++++ b/main.c +@@ -170,7 +170,7 @@ static bool init_emitter(FILE *ts_file) + /* Mapping start */ + if (!yaml_mapping_start_event_initialize(&event, + NULL, NULL , YAML_IMPLICIT, +- YAML_ANY_SEQUENCE_STYLE)) ++ YAML_ANY_MAPPING_STYLE)) + ERROR_GOTO(emitter_delete, + "Failed to initialize YAML mapping start event"); + if (!yaml_emitter_emit(&emitter, &event)) +@@ -263,7 +263,7 @@ static bool fill_timestamp(uint32_t core, uint64_t count, uint64_t addr, + /* Mapping start */ + if (!yaml_mapping_start_event_initialize(&event, + NULL, NULL , YAML_IMPLICIT, +- YAML_ANY_SEQUENCE_STYLE)) ++ YAML_ANY_MAPPING_STYLE)) + ERROR_RETURN_FALSE( + "Failed to initialize YAML mapping start event"); + if (!yaml_emitter_emit(&emitter, &event)) +-- +2.25.4 + diff --git a/package/optee-benchmark/Config.in b/package/optee-benchmark/Config.in new file mode 100644 index 00000000..5fd365a9 --- /dev/null +++ b/package/optee-benchmark/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_OPTEE_BENCHMARK + bool "optee-benchmark" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_THREADS # optee-client + select BR2_PACKAGE_OPTEE_CLIENT + select BR2_PACKAGE_LIBYAML + help + Enable the OP-TEE benchmark package that brings facilities + for profiling traversal and execution timings when + invoking OP-TEE. OP-TEE benchmark is a component delivered + by the OP-TEE project. + + http://github.com/linaro-swg/optee_benchmark + +comment "optee-benchmark needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/optee-benchmark/optee-benchmark.hash b/package/optee-benchmark/optee-benchmark.hash new file mode 100644 index 00000000..12d1ddea --- /dev/null +++ b/package/optee-benchmark/optee-benchmark.hash @@ -0,0 +1,4 @@ +# From https://github.com/linaro-swg/optee_benchmark/archive/3.11.0.tar.gz +sha256 34c314a5cda1e9e3b92f01759585722b44503d9eea19f6b936fc951f5acbac16 optee-benchmark-3.11.0.tar.gz +# Locally computed +sha256 0571be5b739142dc3e40e0a4e7e30d4ab8bff0d4d606a3f2db2010745587d383 LICENSE diff --git a/package/optee-benchmark/optee-benchmark.mk b/package/optee-benchmark/optee-benchmark.mk new file mode 100644 index 00000000..f9d7cae3 --- /dev/null +++ b/package/optee-benchmark/optee-benchmark.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# optee-benchmark +# +################################################################################ + +OPTEE_BENCHMARK_VERSION = 3.11.0 +OPTEE_BENCHMARK_SITE = $(call github,linaro-swg,optee_benchmark,$(OPTEE_BENCHMARK_VERSION)) +OPTEE_BENCHMARK_LICENSE = BSD-2-Clause +OPTEE_BENCHMARK_LICENSE_FILES = LICENSE + +OPTEE_BENCHMARK_DEPENDENCIES = optee-client libyaml + +$(eval $(cmake-package)) diff --git a/package/optee-client/0001-libckteec-replace-initializer.patch b/package/optee-client/0001-libckteec-replace-initializer.patch new file mode 100644 index 00000000..21c75d14 --- /dev/null +++ b/package/optee-client/0001-libckteec-replace-initializer.patch @@ -0,0 +1,93 @@ +From 4fff84cebc05a238a8fed3c66d7dcde18f9574fb Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 2 Nov 2020 08:04:14 +0100 +Subject: [PATCH] =?UTF-8?q?libckteec:=20replace=20{=C2=A0}=20initializer?= + =?UTF-8?q?=20by=20{=C2=A00=20}?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Replace { } initializer by { 0 } to fix the following build failure with +gcc 4.8: + +libckteec/src/pkcs11_processing.c: In function 'ck_create_object': +libckteec/src/pkcs11_processing.c:22:9: error: missing initializer for field 'buffer' of 'struct serializer' [-Werror=missing-field-initializers] + struct serializer obj = { }; + ^ + +Fixes: http://autobuild.buildroot.org/results/a3d663adb943aee814180f01d6e153b3309be962 +Reviewed-by: Etienne Carriere +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/OP-TEE/optee_client/pull/230] +--- + libckteec/src/pkcs11_processing.c | 4 ++-- + libckteec/src/serialize_ck.c | 4 ++-- + libckteec/src/serializer.c | 4 ++-- + 3 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/libckteec/src/pkcs11_processing.c b/libckteec/src/pkcs11_processing.c +index 2eb191f5..8eebe769 100644 +--- a/libckteec/src/pkcs11_processing.c ++++ b/libckteec/src/pkcs11_processing.c +@@ -19,7 +19,7 @@ CK_RV ck_create_object(CK_SESSION_HANDLE session, CK_ATTRIBUTE_PTR attribs, + CK_ULONG count, CK_OBJECT_HANDLE_PTR handle) + { + CK_RV rv = CKR_GENERAL_ERROR; +- struct serializer obj = { }; ++ struct serializer obj = { 0 }; + size_t ctrl_size = 0; + TEEC_SharedMemory *ctrl = NULL; + TEEC_SharedMemory *out_shm = NULL; +@@ -114,7 +114,7 @@ CK_RV ck_encdecrypt_init(CK_SESSION_HANDLE session, + { + CK_RV rv = CKR_GENERAL_ERROR; + TEEC_SharedMemory *ctrl = NULL; +- struct serializer obj = { }; ++ struct serializer obj = { 0 }; + uint32_t session_handle = session; + uint32_t key_handle = key; + size_t ctrl_size = 0; +diff --git a/libckteec/src/serialize_ck.c b/libckteec/src/serialize_ck.c +index 1fc26ddc..0e5df90a 100644 +--- a/libckteec/src/serialize_ck.c ++++ b/libckteec/src/serialize_ck.c +@@ -39,7 +39,7 @@ static CK_RV serialize_indirect_attribute(struct serializer *obj, + CK_ATTRIBUTE_PTR attr = NULL; + CK_ULONG count = 0; + CK_RV rv = CKR_GENERAL_ERROR; +- struct serializer obj2 = { }; ++ struct serializer obj2 = { 0 }; + + switch (attribute->type) { + /* These are serialized each separately */ +@@ -263,7 +263,7 @@ static CK_RV serialize_mecha_aes_iv(struct serializer *obj, + CK_RV serialize_ck_mecha_params(struct serializer *obj, + CK_MECHANISM_PTR mechanism) + { +- CK_MECHANISM mecha = { }; ++ CK_MECHANISM mecha = { 0 }; + CK_RV rv = CKR_GENERAL_ERROR; + + memset(obj, 0, sizeof(*obj)); +diff --git a/libckteec/src/serializer.c b/libckteec/src/serializer.c +index 0e3df65c..d94932ba 100644 +--- a/libckteec/src/serializer.c ++++ b/libckteec/src/serializer.c +@@ -14,7 +14,7 @@ + + CK_RV init_serial_object(struct serializer *obj) + { +- struct pkcs11_object_head head = { }; ++ struct pkcs11_object_head head = { 0 }; + + memset(obj, 0, sizeof(*obj)); + +@@ -23,7 +23,7 @@ CK_RV init_serial_object(struct serializer *obj) + + void finalize_serial_object(struct serializer *obj) + { +- struct pkcs11_object_head head = { }; ++ struct pkcs11_object_head head = { 0 }; + + head.attrs_size = obj->size - sizeof(head); + head.attrs_count = obj->item_count; diff --git a/package/optee-client/Config.in b/package/optee-client/Config.in new file mode 100644 index 00000000..1ef0a140 --- /dev/null +++ b/package/optee-client/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_OPTEE_CLIENT + bool "optee-client" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Enable the OP-TEE client package that brings non-secure + client application resources for OP-TEE support. OP-TEE + client is a component delivered by the OP-TEE project. + + The client API library allows application to invoke trusted + applications hosted in the OP-TEE OS secure world. The + supplicant provides services hosted by the non-secure world + and invoked by the secure world. + + https://github.com/OP-TEE/optee_client + +if BR2_PACKAGE_OPTEE_CLIENT + +config BR2_PACKAGE_OPTEE_CLIENT_TEE_FS_PATH + string "Path for normal world OS secure storage" + default "/data/tee" + help + Path to storage area for secure storage based on the + normal world OS providing the actual storage via + tee-supplicant. + +endif + +comment "optee-client needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/optee-client/S30optee b/package/optee-client/S30optee new file mode 100644 index 00000000..17e6d6d2 --- /dev/null +++ b/package/optee-client/S30optee @@ -0,0 +1,49 @@ +#!/bin/sh + +DAEMON="tee-supplicant" +PIDFILE="/var/run/$DAEMON.pid" + +DAEMON_ARGS="-d /dev/teepriv0" + +start() { + printf 'Starting %s: ' "$DAEMON" + start-stop-daemon -S -q -p "$PIDFILE" -x "/usr/sbin/$DAEMON" \ + -- $DAEMON_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +case "$1" in + start|stop|restart) + "$1";; + reload) + # Restart, since there is no true "reload" feature (does not + # reconfigure/restart on SIGHUP, just closes all open files). + restart;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/optee-client/optee-client.hash b/package/optee-client/optee-client.hash new file mode 100644 index 00000000..d8e507db --- /dev/null +++ b/package/optee-client/optee-client.hash @@ -0,0 +1,4 @@ +# From https://github.com/OP-TEE/optee_client/archive/3.11.0.tar.gz +sha256 91f8ec191cd999ee666b6203ec376415d5dc90a8a9955f3d5fce1f48df77169b optee-client-3.11.0.tar.gz +# Locally computed +sha256 fda8385993f112d7ca61b88b54ba5b4cbeec7e43a0f9b317d5186703c1985e8f LICENSE diff --git a/package/optee-client/optee-client.mk b/package/optee-client/optee-client.mk new file mode 100644 index 00000000..7f613f72 --- /dev/null +++ b/package/optee-client/optee-client.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# optee-client +# +################################################################################ + +OPTEE_CLIENT_VERSION = 3.11.0 +OPTEE_CLIENT_SITE = $(call github,OP-TEE,optee_client,$(OPTEE_CLIENT_VERSION)) +OPTEE_CLIENT_LICENSE = BSD-2-Clause +OPTEE_CLIENT_LICENSE_FILES = LICENSE +OPTEE_CLIENT_INSTALL_STAGING = YES + +OPTEE_CLIENT_CONF_OPTS = \ + -DCFG_TEE_FS_PARENT_PATH=$(BR2_PACKAGE_OPTEE_CLIENT_TEE_FS_PATH) \ + -DCFG_WERROR=OFF + +define OPTEE_CLIENT_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D $(OPTEE_CLIENT_PKGDIR)/S30optee \ + $(TARGET_DIR)/etc/init.d/S30optee +endef + +$(eval $(cmake-package)) diff --git a/package/optee-examples/Config.in b/package/optee-examples/Config.in new file mode 100644 index 00000000..c0fecfdf --- /dev/null +++ b/package/optee-examples/Config.in @@ -0,0 +1,23 @@ +config BR2_PACKAGE_OPTEE_EXAMPLES + bool "optee-examples" + depends on BR2_TARGET_OPTEE_OS + depends on BR2_TOOLCHAIN_HAS_THREADS # optee-client + select BR2_PACKAGE_OPTEE_CLIENT + select BR2_TARGET_OPTEE_OS_SDK + help + Enable the OP-TEE examples package that brings examples of + implementation of OP-TEE non-secure client applications and + secure trusted applications. OP-TEE examples is a + component delivered by the OP-TEE project. + + Trusted application binary files are installed in the target + directory /lib/optee_armtz as other trusted applications. + At runtime OP-TEE OS can load trusted applications from this + non-secure filesystem/directory into the secure world for + execution. + + https://github.com/linaro-swg/optee_examples + +comment "optee-examples needs a toolchain w/ threads" + depends on BR2_TARGET_OPTEE_OS + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/optee-examples/optee-examples.hash b/package/optee-examples/optee-examples.hash new file mode 100644 index 00000000..230d5d3c --- /dev/null +++ b/package/optee-examples/optee-examples.hash @@ -0,0 +1,4 @@ +# From https://github.com/linaro-swg/optee_examples/archive/3.11.0.tar.gz +sha256 b910479a2d432014b6c49aafed27e26dd6f930e7c31d277c1500c1b60b4b3876 optee-examples-3.11.0.tar.gz +# Locally computed +sha256 6f1ef8449cb82ae79d2155605f7985bdf0f08e7ab5007de9b4362e8bf28733b9 LICENSE diff --git a/package/optee-examples/optee-examples.mk b/package/optee-examples/optee-examples.mk new file mode 100644 index 00000000..b6f77c72 --- /dev/null +++ b/package/optee-examples/optee-examples.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# optee-examples +# +################################################################################ + +OPTEE_EXAMPLES_VERSION = 3.11.0 +OPTEE_EXAMPLES_SITE = $(call github,linaro-swg,optee_examples,$(OPTEE_EXAMPLES_VERSION)) +OPTEE_EXAMPLES_LICENSE = BSD-2-Clause +OPTEE_EXAMPLES_LICENSE_FILES = LICENSE + +OPTEE_EXAMPLES_DEPENDENCIES = optee-client optee-os + +# Trusted Application are not built from CMake due to ta_dev_kit dependencies. +# We must build and install them on target. +define OPTEE_EXAMPLES_BUILD_TAS + $(foreach f,$(wildcard $(@D)/*/ta/Makefile), \ + $(TARGET_CONFIGURE_OPTS) \ + $(MAKE) CROSS_COMPILE=$(TARGET_CROSS) \ + TA_DEV_KIT_DIR=$(OPTEE_OS_SDK) \ + O=out -C $(dir $f) all + ) +endef +define OPTEE_EXAMPLES_INSTALL_TAS + @mkdir -p $(TARGET_DIR)/lib/optee_armtz + @$(INSTALL) -D -m 444 -t $(TARGET_DIR)/lib/optee_armtz $(@D)/*/ta/out/*.ta +endef +OPTEE_EXAMPLES_POST_BUILD_HOOKS += OPTEE_EXAMPLES_BUILD_TAS +OPTEE_EXAMPLES_POST_INSTALL_TARGET_HOOKS += OPTEE_EXAMPLES_INSTALL_TAS + +$(eval $(cmake-package)) diff --git a/package/optee-test/Config.in b/package/optee-test/Config.in new file mode 100644 index 00000000..357a6b0c --- /dev/null +++ b/package/optee-test/Config.in @@ -0,0 +1,28 @@ +config BR2_PACKAGE_OPTEE_TEST + bool "optee-test" + depends on BR2_TARGET_OPTEE_OS + depends on BR2_TOOLCHAIN_HAS_THREADS # optee-client + depends on BR2_INSTALL_LIBSTDCPP + select BR2_PACKAGE_OPTEE_CLIENT + select BR2_TARGET_OPTEE_OS_SDK + help + This build option enables OP-TEE test package from the + OP-TEE project. It helps platforms to verify the OP-TEE + installation against a set of regression and performance + tests. + + The package generates userspace test applications and + data files for the Linux userland. It also generates + OP-TEE trusted applications. + + Trusted application binary files are installed in the target + directory /lib/optee_armtz as other trusted applications. + At runtime OP-TEE OS can load trusted applications from this + non-secure filesystem/directory into the secure world for + execution. + + http://github.com/OP-TEE/optee_test + +comment "optee-test needs a toolchain w/ threads and C++" + depends on BR2_TARGET_OPTEE_OS + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP diff --git a/package/optee-test/optee-test.hash b/package/optee-test/optee-test.hash new file mode 100644 index 00000000..52e2373b --- /dev/null +++ b/package/optee-test/optee-test.hash @@ -0,0 +1,4 @@ +# From https://github.com/OP-TEE/optee_test/archive/3.11.0.tar.gz +sha256 54d4b7e2ad22cd409ee8e25e990c1878690b1b5eb8843f649d12022888186a53 optee-test-3.11.0.tar.gz +# Locally computed +sha256 6e6810981f0ddab9e0d44399d0700a15d9f760a3c2843cc866659c2074139ae7 LICENSE.md diff --git a/package/optee-test/optee-test.mk b/package/optee-test/optee-test.mk new file mode 100644 index 00000000..f7e4cb3b --- /dev/null +++ b/package/optee-test/optee-test.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# optee-test +# +################################################################################ + +OPTEE_TEST_VERSION = 3.11.0 +OPTEE_TEST_SITE = $(call github,OP-TEE,optee_test,$(OPTEE_TEST_VERSION)) +OPTEE_TEST_LICENSE = GPL-2.0, BSD-2-Clause, +OPTEE_TEST_LICENSE_FILES = LICENSE.md + +OPTEE_TEST_DEPENDENCIES = optee-client optee-os + +ifeq ($(BR2_PACKAGE_LIBOPENSSL),y) +OPTEE_TEST_DEPENDENCIES += libopenssl +endif + +OPTEE_TEST_CONF_OPTS = -DOPTEE_TEST_SDK=$(OPTEE_OS_SDK) + +# Trusted Application are not built from CMake due to ta_dev_kit +# dependencies. We must build and install them on target. +define OPTEE_TEST_BUILD_TAS + $(foreach f,$(wildcard $(@D)/ta/*_lib/Makefile) $(wildcard $(@D)/ta/*/Makefile), \ + $(TARGET_CONFIGURE_OPTS) \ + $(MAKE) CROSS_COMPILE=$(TARGET_CROSS) \ + TA_DEV_KIT_DIR=$(OPTEE_OS_SDK) \ + -C $(dir $f) all + ) +endef +define OPTEE_TEST_INSTALL_TAS + @mkdir -p $(TARGET_DIR)/lib/optee_armtz + @$(INSTALL) -D -m 444 -t $(TARGET_DIR)/lib/optee_armtz $(@D)/ta/*/*.ta +endef +OPTEE_TEST_POST_BUILD_HOOKS += OPTEE_TEST_BUILD_TAS +OPTEE_TEST_POST_INSTALL_TARGET_HOOKS += OPTEE_TEST_INSTALL_TAS + +$(eval $(cmake-package)) diff --git a/package/opus-tools/Config.in b/package/opus-tools/Config.in new file mode 100644 index 00000000..c045239e --- /dev/null +++ b/package/opus-tools/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_OPUS_TOOLS + bool "opus-tools" + select BR2_PACKAGE_LIBOGG + select BR2_PACKAGE_LIBOPUSENC + select BR2_PACKAGE_OPUS + select BR2_PACKAGE_OPUSFILE + help + Opus codec command line tools. This package provides the + reference implementations of encoder and decoder utilities + for libopus. + + http://opus-codec.org diff --git a/package/opus-tools/opus-tools.hash b/package/opus-tools/opus-tools.hash new file mode 100644 index 00000000..1b87458f --- /dev/null +++ b/package/opus-tools/opus-tools.hash @@ -0,0 +1,5 @@ +# From http://downloads.xiph.org/releases/opus/SHA256SUMS.txt +sha256 b4e56cb00d3e509acfba9a9b627ffd8273b876b4e2408642259f6da28fa0ff86 opus-tools-0.2.tar.gz + +# Hash for license file +sha256 c28016e58544119d6b93aea28297d040f17dcef7a9f548d3e6a4d0b558c5d248 COPYING diff --git a/package/opus-tools/opus-tools.mk b/package/opus-tools/opus-tools.mk new file mode 100644 index 00000000..f69c3bef --- /dev/null +++ b/package/opus-tools/opus-tools.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# opus-tools +# +################################################################################ + +OPUS_TOOLS_VERSION = 0.2 +OPUS_TOOLS_SITE = https://downloads.xiph.org/releases/opus +OPUS_TOOLS_LICENSE = BSD-2-Clause, GPL-2.0 (opusinfo) +OPUS_TOOLS_LICENSE_FILES = COPYING +OPUS_TOOLS_CONF_OPTS = --disable-oggtest --disable-opustest +OPUS_TOOLS_DEPENDENCIES = libogg libopusenc opus opusfile host-pkgconf + +ifeq ($(BR2_PACKAGE_LIBPCAP),y) +OPUS_TOOLS_DEPENDENCIES += libpcap +endif + +ifeq ($(BR2_X86_CPU_HAS_SSE),y) +OPUS_TOOLS_CONF_OPTS += --enable-sse +else +OPUS_TOOLS_CONF_OPTS += --disable-sse +endif + +ifeq ($(BR2_PACKAGE_FLAC),y) +OPUS_TOOLS_DEPENDENCIES += flac +else +OPUS_TOOLS_CONF_OPTS += --without-flac +endif + +$(eval $(autotools-package)) diff --git a/package/opus/Config.in b/package/opus/Config.in new file mode 100644 index 00000000..22e7a553 --- /dev/null +++ b/package/opus/Config.in @@ -0,0 +1,26 @@ +config BR2_PACKAGE_OPUS + bool "opus" + help + The Opus codec is designed for interactive speech and audio + transmission over the Internet. It is designed by the IETF + Codec Working Group and incorporates technology from Skype's + SILK codec and Xiph.Org's CELT codec. + + It is intended to suit a wide range of interactive audio + applications, including Voice over IP, videoconferencing, + in-game chat, and even remote live music performances. It + can scale from low bit-rate narrowband speech to very high + quality stereo music. + + http://opus-codec.org + +if BR2_PACKAGE_OPUS + +config BR2_PACKAGE_OPUS_FIXED_POINT + bool "use fixed-point" if !BR2_SOFT_FLOAT + default y if BR2_SOFT_FLOAT + help + Compile without floating point operations (for machines + without a fast enough FPU). + +endif diff --git a/package/opus/opus.hash b/package/opus/opus.hash new file mode 100644 index 00000000..2a94d372 --- /dev/null +++ b/package/opus/opus.hash @@ -0,0 +1,5 @@ +# From http://downloads.xiph.org/releases/opus/SHA256SUMS.txt +sha256 65b58e1e25b2a114157014736a3d9dfeaad8d41be1c8179866f144a2fb44ff9d opus-1.3.1.tar.gz + +# Hash for license file +sha256 8338ce8d922bb4416ce3dd1e5680173332435e3f0755007ac7801ccd674fe682 COPYING diff --git a/package/opus/opus.mk b/package/opus/opus.mk new file mode 100644 index 00000000..3fb2d5d6 --- /dev/null +++ b/package/opus/opus.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# opus +# +################################################################################ + +OPUS_VERSION = 1.3.1 +OPUS_SITE = https://downloads.xiph.org/releases/opus +OPUS_LICENSE = BSD-3-Clause +OPUS_LICENSE_FILES = COPYING +OPUS_INSTALL_STAGING = YES + +OPUS_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y) +OPUS_CFLAGS += -O0 +endif + +OPUS_CONF_ENV = CFLAGS="$(OPUS_CFLAGS)" + +ifeq ($(BR2_PACKAGE_OPUS_FIXED_POINT),y) +OPUS_CONF_OPTS += --enable-fixed-point +endif + +# When we're on ARM, but we don't have ARM instructions (only +# Thumb-2), disable the usage of assembly as it is not Thumb-ready. +ifeq ($(BR2_arm)$(BR2_armeb):$(BR2_ARM_CPU_HAS_ARM),y:) +OPUS_CONF_OPTS += --disable-asm +endif + +$(eval $(autotools-package)) diff --git a/package/opusfile/Config.in b/package/opusfile/Config.in new file mode 100644 index 00000000..63e0786f --- /dev/null +++ b/package/opusfile/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_OPUSFILE + bool "opusfile" + select BR2_PACKAGE_LIBOGG + select BR2_PACKAGE_OPUS + help + A convenient high-level API for decoding and basic + manipulation of all Ogg Opus audio streams. + + http://opus-codec.org diff --git a/package/opusfile/opusfile.hash b/package/opusfile/opusfile.hash new file mode 100644 index 00000000..30bf9b36 --- /dev/null +++ b/package/opusfile/opusfile.hash @@ -0,0 +1,5 @@ +# From http://downloads.xiph.org/releases/opus/SHA256SUMS.txt +sha256 118d8601c12dd6a44f52423e68ca9083cc9f2bfe72da7a8c1acb22a80ae3550b opusfile-0.12.tar.gz + +# Hash for license file +sha256 0267ae795ab744c4e0f9c45e249440fdf2e75dac8c804f36066b28649bf74aaf COPYING diff --git a/package/opusfile/opusfile.mk b/package/opusfile/opusfile.mk new file mode 100644 index 00000000..72ae82e8 --- /dev/null +++ b/package/opusfile/opusfile.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# opusfile +# +################################################################################ + +OPUSFILE_VERSION = 0.12 +OPUSFILE_SITE = https://downloads.xiph.org/releases/opus +OPUSFILE_DEPENDENCIES = host-pkgconf libogg opus +OPUSFILE_LICENSE = BSD-3-Clause +OPUSFILE_LICENSE_FILES = COPYING +OPUSFILE_INSTALL_STAGING = YES + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +OPUSFILE_DEPENDENCIES += openssl +else +OPUSFILE_CONF_OPTS += --disable-http +endif + +# Use the same as opus package since it's a dep and we can't mix +ifeq ($(BR2_PACKAGE_OPUS_FIXED_POINT),y) +OPUSFILE_CONF_OPTS += --enable-fixed-point +endif + +$(eval $(autotools-package)) diff --git a/package/oracle-mysql/0000-ac_cache_check.patch b/package/oracle-mysql/0000-ac_cache_check.patch new file mode 100644 index 00000000..c3b55ba8 --- /dev/null +++ b/package/oracle-mysql/0000-ac_cache_check.patch @@ -0,0 +1,156 @@ +Patch borrowed from +http://code.google.com/p/minimyth/source/browse/trunk/gar-minimyth/script/db/mysql/files/mysql-5.1.47-ac_cache_check.patch?r=6493. + +It allows to override through ac_cv_* variables various checks that +cannot be performed when cross-compiling. + +Signed-off-by: Thomas Petazzoni + +--- + storage/innodb_plugin/plug.in | 59 ++++++++++++++++++++++++++++-------------- + 1 file changed, 40 insertions(+), 19 deletions(-) + +Index: mysql-5.1.53/storage/innodb_plugin/plug.in +=================================================================== +--- mysql-5.1.53.orig/storage/innodb_plugin/plug.in ++++ mysql-5.1.53/storage/innodb_plugin/plug.in +@@ -53,9 +53,10 @@ + esac + AC_SUBST(INNODB_DYNAMIC_CFLAGS) + +- AC_MSG_CHECKING(whether GCC atomic builtins are available) ++ AC_CACHE_CHECK([whether GCC atomic builtins are available], ++ [ac_cv_have_decl_HAVE_IB_GCC_ATOMIC_BUILTINS], + # either define HAVE_IB_GCC_ATOMIC_BUILTINS or not +- AC_TRY_RUN( ++ [AC_TRY_RUN( + [ + int main() + { +@@ -95,18 +96,23 @@ + } + ], + [ +- AC_DEFINE([HAVE_IB_GCC_ATOMIC_BUILTINS], [1], +- [GCC atomic builtins are available]) + AC_MSG_RESULT(yes) ++ ac_cv_have_decl_HAVE_IB_GCC_ATOMIC_BUILTINS=yes + ], + [ + AC_MSG_RESULT(no) ++ ac_cv_have_decl_HAVE_IB_GCC_ATOMIC_BUILTINS=no + ] +- ) ++ )]) ++ if test "x$ac_cv_have_decl_HAVE_IB_GCC_ATOMIC_BUILTINS"= "xyes" ; then ++ AC_DEFINE([HAVE_IB_GCC_ATOMIC_BUILTINS], [1], ++ [GCC atomic builtins are available]) ++ fi + +- AC_MSG_CHECKING(whether pthread_t can be used by GCC atomic builtins) ++ AC_CACHE_CHECK([whether pthread_t can be used by GCC atomic builtins], ++ [ac_cv_have_decl_HAVE_IB_ATOMIC_PTHREAD_T_GCC], + # either define HAVE_IB_ATOMIC_PTHREAD_T_GCC or not +- AC_TRY_RUN( ++ [AC_TRY_RUN( + [ + #include + #include +@@ -126,14 +132,18 @@ + } + ], + [ +- AC_DEFINE([HAVE_IB_ATOMIC_PTHREAD_T_GCC], [1], +- [pthread_t can be used by GCC atomic builtins]) + AC_MSG_RESULT(yes) ++ ac_cv_have_decl_HAVE_IB_ATOMIC_PTHREAD_T_GCC=yes + ], + [ + AC_MSG_RESULT(no) ++ ac_cv_have_decl_HAVE_IB_ATOMIC_PTHREAD_T_GCC=no + ] +- ) ++ )]) ++ if test "x$ac_cv_have_decl_HAVE_IB_ATOMIC_PTHREAD_T_GCC"= "xyes" ; then ++ AC_DEFINE([HAVE_IB_ATOMIC_PTHREAD_T_GCC], [1], ++ [pthread_t can be used by GCC atomic builtins]) ++ fi + + AC_MSG_CHECKING(whether Solaris libc atomic functions are available) + # either define HAVE_IB_SOLARIS_ATOMICS or not +@@ -148,9 +158,10 @@ + are available]) + ) + +- AC_MSG_CHECKING(whether pthread_t can be used by Solaris libc atomic functions) ++ AC_CACHE_CHECK([whether pthread_t can be used by Solaris libc atomic functions], ++ [ac_cv_have_decl_HAVE_IB_ATOMIC_PTHREAD_T_SOLARIS], + # either define HAVE_IB_ATOMIC_PTHREAD_T_SOLARIS or not +- AC_TRY_RUN( ++ [AC_TRY_RUN( + [ + #include + #include +@@ -181,28 +192,33 @@ + } + ], + [ +- AC_DEFINE([HAVE_IB_ATOMIC_PTHREAD_T_SOLARIS], [1], +- [pthread_t can be used by solaris atomics]) + AC_MSG_RESULT(yes) ++ ac_cv_have_decl_HAVE_IB_ATOMIC_PTHREAD_T_SOLARIS=yes + ], + [ + AC_MSG_RESULT(no) ++ ac_cv_have_decl_HAVE_IB_ATOMIC_PTHREAD_T_SOLARIS=no + ] +- ) ++ )]) ++ if test "x$ac_cv_have_decl_HAVE_IB_ATOMIC_PTHREAD_T_SOLARIS"= "xyes" ; then ++ AC_DEFINE([HAVE_IB_ATOMIC_PTHREAD_T_SOLARIS], [1], ++ [pthread_t can be used by solaris atomics]) ++ fi + + # this is needed to know which one of atomic_cas_32() or atomic_cas_64() + # to use in the source + AC_CHECK_SIZEOF([pthread_t], [], [#include ]) + + # Check for x86 PAUSE instruction +- AC_MSG_CHECKING(for x86 PAUSE instruction) ++ AC_CACHE_CHECK([for x86 PAUSE instruction], ++ [ac_cv_have_decl_HAVE_IB_PAUSE_INSTRUCTION], + # We have to actually try running the test program, because of a bug + # in Solaris on x86_64, where it wrongly reports that PAUSE is not + # supported when trying to run an application. See + # http://bugs.opensolaris.org/bugdatabase/printableBug.do?bug_id=6478684 + # We use ib_ prefix to avoid collisoins if this code is added to + # mysql's configure.in. +- AC_TRY_RUN( ++ [AC_TRY_RUN( + [ + int main() { + __asm__ __volatile__ ("pause"); +@@ -210,16 +226,21 @@ + } + ], + [ +- AC_DEFINE([HAVE_IB_PAUSE_INSTRUCTION], [1], [Does x86 PAUSE instruction exist]) + AC_MSG_RESULT(yes) ++ ac_cv_have_decl_HAVE_IB_PAUSE_INSTRUCTION=yes + ], + [ + AC_MSG_RESULT(no) ++ ac_cv_have_decl_HAVE_IB_PAUSE_INSTRUCTION=no + ], + [ + AC_MSG_RESULT(no) ++ ac_cv_have_decl_HAVE_IB_PAUSE_INSTRUCTION=no + ] +- ) ++ )]) ++ if test "x$ac_cv_have_decl_HAVE_IB_PAUSE_INSTRUCTION"= "xyes" ; then ++ AC_DEFINE([HAVE_IB_PAUSE_INSTRUCTION], [1], [Does x86 PAUSE instruction exist]) ++ fi + ]) + + # vim: set ft=config: diff --git a/package/oracle-mysql/0001-configure-ps-cache-check.patch b/package/oracle-mysql/0001-configure-ps-cache-check.patch new file mode 100644 index 00000000..336e80e0 --- /dev/null +++ b/package/oracle-mysql/0001-configure-ps-cache-check.patch @@ -0,0 +1,39 @@ +Patch borrowed from +http://cgit.openembedded.org/cgit.cgi/openembedded/tree/recipes/mysql/files/configure-ps-cache-check.patch + +It allows to specify through ac_cv_FIND_PROC how ps should be used on +the target to find the PID of a program. + +Signed-off-by: Thomas Petazzoni + +--- + configure.in | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +Index: mysql-5.1.53/configure.in +=================================================================== +--- mysql-5.1.53.orig/configure.in ++++ mysql-5.1.53/configure.in +@@ -462,8 +462,8 @@ + # then Make, then shell. The autoconf substitution uses single quotes, so + # no unprotected single quotes should appear in the expression. + AC_PATH_PROG(PS, ps, ps) +-AC_MSG_CHECKING("how to check if pid exists") +-PS=$ac_cv_path_PS ++AC_CACHE_CHECK([how to check if pid exists], [ac_cv_FIND_PROC], ++[ + # Linux style + if $PS wwwp $$ 2> /dev/null | grep -- "$0" > /dev/null + then +@@ -502,8 +502,9 @@ + AC_MSG_ERROR([Could not find the right ps and/or grep switches. Which OS is this? See the Installation chapter in the Reference Manual.]) + esac + fi +-AC_SUBST(FIND_PROC) +-AC_MSG_RESULT("$FIND_PROC") ++ac_cv_FIND_PROC="$FIND_PROC" ++]) ++AC_SUBST([FIND_PROC], [$ac_cv_FIND_PROC]) + + # Check if a pid is valid + AC_PATH_PROG(KILL, kill, kill) diff --git a/package/oracle-mysql/0002-use-new-readline-iface.patch b/package/oracle-mysql/0002-use-new-readline-iface.patch new file mode 100644 index 00000000..c5906563 --- /dev/null +++ b/package/oracle-mysql/0002-use-new-readline-iface.patch @@ -0,0 +1,21 @@ +Tell MySQL to use the new readline interface even when an external +readline is being used. + +Signed-off-by: Thomas Petazzoni + +--- + configure.in | 1 + + 1 file changed, 1 insertion(+) + +Index: mysql-5.1.53/configure.in +=================================================================== +--- mysql-5.1.53.orig/configure.in ++++ mysql-5.1.53/configure.in +@@ -2689,6 +2689,7 @@ + # this way we avoid linking commercial source with GPL readline + readline_link="-lreadline" + want_to_use_readline="yes" ++ AC_DEFINE_UNQUOTED(USE_NEW_READLINE_INTERFACE, 1) + elif [test "$mysql_cv_libedit_interface" = "yes"] + then + # Use libedit diff --git a/package/oracle-mysql/0003-ac_stack_direction-is-unset.patch b/package/oracle-mysql/0003-ac_stack_direction-is-unset.patch new file mode 100644 index 00000000..6fef0a9a --- /dev/null +++ b/package/oracle-mysql/0003-ac_stack_direction-is-unset.patch @@ -0,0 +1,15 @@ +misc.m4: ac_cv_c_stack_direction is unset. + +Signed-off-by: Marcelo Gutierrez (UTN/FRH) + +--- mysql-5.1.70.orig/config/ac-macros/misc.m4 ++++ mysql-5.1.70/config/ac-macros/misc.m4 +@@ -477,7 +477,7 @@ + exit(ptr_f(&a) < 0); + } + ], ac_cv_c_stack_direction=1, ac_cv_c_stack_direction=-1, +- ac_cv_c_stack_direction=)]) ++ ac_cv_c_stack_direction=0)]) + AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction) + ])dnl + diff --git a/package/oracle-mysql/0004-Fix-gen_lex_hash-execution.patch b/package/oracle-mysql/0004-Fix-gen_lex_hash-execution.patch new file mode 100644 index 00000000..b91ed4fe --- /dev/null +++ b/package/oracle-mysql/0004-Fix-gen_lex_hash-execution.patch @@ -0,0 +1,32 @@ +Makefile: fix cross-compiling the server + +MySQL Makefile believes it can run code it just compiled, to +generate a header. This does not work for cross-compilation. + +Instead, use a pre-installed host-version of the required tool. + +Signed-off-by: Marcelo Gutierrez (UTN/FRH) + +--- mysql-5.1.70/sql/Makefile.am ++++ mysql-5.1.70.patch/sql/Makefile.am +@@ -177,7 +177,7 @@ + # this avoid the rebuild of the built files in a source dist + lex_hash.h: gen_lex_hash.cc lex.h + $(MAKE) $(AM_MAKEFLAGS) gen_lex_hash$(EXEEXT) +- ./gen_lex_hash$(EXEEXT) > $@-t ++ gen_lex_hash$(EXEEXT) > $@-t + $(MV) $@-t $@ + + # For testing of udf_example.so + +--- mysql-5.1.70/sql/Makefile.in ++++ mysql-5.1.70.patch/sql/Makefile.in +@@ -1310,7 +1310,7 @@ + # this avoid the rebuild of the built files in a source dist + lex_hash.h: gen_lex_hash.cc lex.h + $(MAKE) $(AM_MAKEFLAGS) gen_lex_hash$(EXEEXT) +- ./gen_lex_hash$(EXEEXT) > $@-t ++ gen_lex_hash$(EXEEXT) > $@-t + $(MV) $@-t $@ + + # We might have some stuff not built in this build, but that we want to install diff --git a/package/oracle-mysql/0005-bison_3_breaks_mysql_server_build.patch b/package/oracle-mysql/0005-bison_3_breaks_mysql_server_build.patch new file mode 100644 index 00000000..918fe245 --- /dev/null +++ b/package/oracle-mysql/0005-bison_3_breaks_mysql_server_build.patch @@ -0,0 +1,3310 @@ +fix the yacc code in mysql + +Signed-off-by: Marcelo Gutierrez (UTN/FRH) +--- +diff -uNr mysql-5.1.73.orig/sql/sql_lex.cc mysql-5.1.73/sql/sql_lex.cc +--- mysql-5.1.73.orig/sql/sql_lex.cc 2013-11-04 18:52:27.000000000 +0000 ++++ mysql-5.1.73/sql/sql_lex.cc 2014-02-12 14:12:04.244111625 +0000 +@@ -775,14 +775,13 @@ + (which can't be followed by a signed number) + */ + +-int MYSQLlex(void *arg, void *yythd) ++int MYSQLlex(void *arg, THD *thd) + { + reg1 uchar c= 0; + bool comment_closed; + int tokval, result_state; + uint length; + enum my_lex_states state; +- THD *thd= (THD *)yythd; + Lex_input_stream *lip= & thd->m_parser_state->m_lip; + LEX *lex= thd->lex; + YYSTYPE *yylval=(YYSTYPE*) arg; +diff -uNr mysql-5.1.73.orig/sql/sql_lex.h mysql-5.1.73/sql/sql_lex.h +--- mysql-5.1.73.orig/sql/sql_lex.h 2013-11-04 18:52:27.000000000 +0000 ++++ mysql-5.1.73/sql/sql_lex.h 2014-02-12 14:17:19.424106423 +0000 +@@ -2072,7 +2072,7 @@ + extern void lex_free(void); + extern void lex_start(THD *thd); + extern void lex_end(LEX *lex); +-extern int MYSQLlex(void *arg, void *yythd); ++extern int MYSQLlex(void *arg, THD *thd); + + extern void trim_whitespace(CHARSET_INFO *cs, LEX_STRING *str); + +diff -uNr mysql-5.1.73.orig/sql/sql_parse.cc mysql-5.1.73/sql/sql_parse.cc +--- mysql-5.1.73.orig/sql/sql_parse.cc 2013-11-04 18:52:27.000000000 +0000 ++++ mysql-5.1.73/sql/sql_parse.cc 2014-02-12 14:19:20.424104427 +0000 +@@ -8012,7 +8012,7 @@ + } + + +-extern int MYSQLparse(void *thd); // from sql_yacc.cc ++extern int MYSQLparse(THD *thd); // from sql_yacc.cc + + + /** +diff -uNr mysql-5.1.73.orig/sql/sql_yacc.yy mysql-5.1.73/sql/sql_yacc.yy +--- mysql-5.1.73.orig/sql/sql_yacc.yy 2013-11-04 18:52:27.000000000 +0000 ++++ mysql-5.1.73/sql/sql_yacc.yy 2014-02-12 20:17:06.707750140 +0000 +@@ -23,19 +23,13 @@ + */ + + %{ +-/* thd is passed as an argument to yyparse(), and subsequently to yylex(). +-** The type will be void*, so it must be cast to (THD*) when used. +-** Use the YYTHD macro for this. +-*/ +-#define YYPARSE_PARAM yythd +-#define YYLEX_PARAM yythd +-#define YYTHD ((THD *)yythd) +-#define YYLIP (& YYTHD->m_parser_state->m_lip) ++ ++#define YYLIP (& thd->m_parser_state->m_lip) + + #define MYSQL_YACC + #define YYINITDEPTH 100 + #define YYMAXDEPTH 3200 /* Because of 64K stack */ +-#define Lex (YYTHD->lex) ++#define Lex (thd->lex) + #define Select Lex->current_select + #include "mysql_priv.h" + #include "slave.h" +@@ -55,7 +49,7 @@ + #pragma warning (disable : 4065) + #endif + +-int yylex(void *yylval, void *yythd); ++int yylex(void *yylval, THD *thd); + + const LEX_STRING null_lex_str= {0,0}; + +@@ -64,7 +58,7 @@ + ulong val= *(F); \ + if (my_yyoverflow((B), (D), &val)) \ + { \ +- yyerror((char*) (A)); \ ++ yyerror(current_thd, (char*) (A)); \ + return 2; \ + } \ + else \ +@@ -76,7 +70,7 @@ + #define MYSQL_YYABORT \ + do \ + { \ +- LEX::cleanup_lex_after_parse_error(YYTHD);\ ++ LEX::cleanup_lex_after_parse_error(thd);\ + YYABORT; \ + } while (0) + +@@ -159,9 +153,8 @@ + to abort from the parser. + */ + +-void MYSQLerror(const char *s) ++void MYSQLerror(THD *thd, const char *s) + { +- THD *thd= current_thd; + + /* + Restore the original LEX if it was replaced when parsing +@@ -675,7 +668,10 @@ + bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); + %} + +-%pure_parser /* We have threads */ ++/* We have threads */ ++%define api.pure ++%parse-param { THD *thd } ++%lex-param { THD *thd } + /* + Currently there are 169 shift/reduce conflicts. + We should not introduce new conflicts any more. +@@ -1516,7 +1512,6 @@ + query: + END_OF_INPUT + { +- THD *thd= YYTHD; + if (!thd->bootstrap && + (!(thd->lex->select_lex.options & OPTION_FOUND_COMMENT))) + { +@@ -1530,7 +1525,7 @@ + { + Lex_input_stream *lip = YYLIP; + +- if ((YYTHD->client_capabilities & CLIENT_MULTI_QUERIES) && ++ if ((thd->client_capabilities & CLIENT_MULTI_QUERIES) && + ! lip->stmt_prepare_mode && + ! lip->eof()) + { +@@ -1626,7 +1621,6 @@ + deallocate: + deallocate_or_drop PREPARE_SYM ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->sql_command= SQLCOM_DEALLOCATE_PREPARE; + lex->prepared_stmt_name= $3; +@@ -1641,7 +1635,6 @@ + prepare: + PREPARE_SYM ident FROM prepare_src + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->sql_command= SQLCOM_PREPARE; + lex->prepared_stmt_name= $2; +@@ -1651,14 +1644,12 @@ + prepare_src: + TEXT_STRING_sys + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->prepared_stmt_code= $1; + lex->prepared_stmt_code_is_varref= FALSE; + } + | '@' ident_or_text + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->prepared_stmt_code= $2; + lex->prepared_stmt_code_is_varref= TRUE; +@@ -1668,7 +1659,6 @@ + execute: + EXECUTE_SYM ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->sql_command= SQLCOM_EXECUTE; + lex->prepared_stmt_name= $2; +@@ -1826,7 +1816,6 @@ + create: + CREATE opt_table_options TABLE_SYM opt_if_not_exists table_ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->sql_command= SQLCOM_CREATE_TABLE; + if (!lex->select_lex.add_table_to_list(thd, $5, NULL, +@@ -1844,13 +1833,13 @@ + } + create2 + { +- LEX *lex= YYTHD->lex; ++ LEX *lex= thd->lex; + lex->current_select= &lex->select_lex; + if ((lex->create_info.used_fields & HA_CREATE_USED_ENGINE) && + !lex->create_info.db_type) + { +- lex->create_info.db_type= ha_default_handlerton(YYTHD); +- push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN, ++ lex->create_info.db_type= ha_default_handlerton(thd); ++ push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN, + ER_WARN_USING_OTHER_HANDLER, + ER(ER_WARN_USING_OTHER_HANDLER), + ha_resolve_storage_engine_name(lex->create_info.db_type), +@@ -1979,7 +1968,7 @@ + event_tail: + remember_name EVENT_SYM opt_if_not_exists sp_name + { +- THD *thd= YYTHD; ++ THD *thd= thd; + LEX *lex=Lex; + + lex->stmt_definition_begin= $1; +@@ -2046,7 +2035,7 @@ + ev_starts: + /* empty */ + { +- Item *item= new (YYTHD->mem_root) Item_func_now_local(); ++ Item *item= new (thd->mem_root) Item_func_now_local(); + if (item == NULL) + MYSQL_YYABORT; + Lex->event_parse_data->item_starts= item; +@@ -2096,7 +2085,6 @@ + + ev_sql_stmt: + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= YYLIP; + +@@ -2139,7 +2127,6 @@ + } + ev_sql_stmt_inner + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + + /* return back to the original memory root ASAP */ +@@ -2198,11 +2185,10 @@ + $$= new sp_name($1, $3, true); + if ($$ == NULL) + MYSQL_YYABORT; +- $$->init_qname(YYTHD); ++ $$->init_qname(thd); + } + | ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + LEX_STRING db; + if (check_routine_name(&$1)) +@@ -2272,7 +2258,7 @@ + lex->sql_command= SQLCOM_CALL; + lex->spname= $2; + lex->value_list.empty(); +- sp_add_used_routine(lex, YYTHD, $2, TYPE_ENUM_PROCEDURE); ++ sp_add_used_routine(lex, thd, $2, TYPE_ENUM_PROCEDURE); + } + opt_sp_cparam_list {} + ; +@@ -2345,7 +2331,7 @@ + (enum enum_field_types)$3, + sp_param_in); + +- if (lex->sphead->fill_field_definition(YYTHD, lex, ++ if (lex->sphead->fill_field_definition(thd, lex, + (enum enum_field_types) $3, + &spvar->field_def)) + { +@@ -2382,7 +2368,7 @@ + (enum enum_field_types)$4, + (sp_param_mode_t)$1); + +- if (lex->sphead->fill_field_definition(YYTHD, lex, ++ if (lex->sphead->fill_field_definition(thd, lex, + (enum enum_field_types) $4, + &spvar->field_def)) + { +@@ -2445,13 +2431,12 @@ + { + LEX *lex= Lex; + +- lex->sphead->reset_lex(YYTHD); ++ lex->sphead->reset_lex(thd); + lex->spcont->declare_var_boundary($2); + } + type + sp_opt_default + { +- THD *thd= YYTHD; + LEX *lex= Lex; + sp_pcontext *pctx= lex->spcont; + uint num_vars= pctx->context_var_count(); +@@ -2477,7 +2462,7 @@ + spvar->type= var_type; + spvar->dflt= dflt_value_item; + +- if (lex->sphead->fill_field_definition(YYTHD, lex, var_type, ++ if (lex->sphead->fill_field_definition(thd, lex, var_type, + &spvar->field_def)) + { + MYSQL_YYABORT; +@@ -2501,7 +2486,7 @@ + } + + pctx->declare_var_boundary(0); +- if (lex->sphead->restore_lex(YYTHD)) ++ if (lex->sphead->restore_lex(thd)) + MYSQL_YYABORT; + $$.vars= $2; + $$.conds= $$.hndlrs= $$.curs= 0; +@@ -2516,7 +2501,7 @@ + my_error(ER_SP_DUP_COND, MYF(0), $2.str); + MYSQL_YYABORT; + } +- if(YYTHD->lex->spcont->push_cond(&$2, $5)) ++ if(thd->lex->spcont->push_cond(&$2, $5)) + MYSQL_YYABORT; + $$.vars= $$.hndlrs= $$.curs= 0; + $$.conds= 1; +@@ -2602,7 +2587,7 @@ + + sp_cursor_stmt: + { +- Lex->sphead->reset_lex(YYTHD); ++ Lex->sphead->reset_lex(thd); + } + select + { +@@ -2618,7 +2603,7 @@ + } + lex->sp_lex_in_use= TRUE; + $$= lex; +- if (lex->sphead->restore_lex(YYTHD)) ++ if (lex->sphead->restore_lex(thd)) + MYSQL_YYABORT; + } + ; +@@ -2662,7 +2647,7 @@ + sp_cond: + ulong_num + { /* mysql errno */ +- $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t)); ++ $$= (sp_cond_type_t *)thd->alloc(sizeof(sp_cond_type_t)); + if ($$ == NULL) + MYSQL_YYABORT; + $$->type= sp_cond_type_t::number; +@@ -2675,7 +2660,7 @@ + my_error(ER_SP_BAD_SQLSTATE, MYF(0), $3.str); + MYSQL_YYABORT; + } +- $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t)); ++ $$= (sp_cond_type_t *)thd->alloc(sizeof(sp_cond_type_t)); + if ($$ == NULL) + MYSQL_YYABORT; + $$->type= sp_cond_type_t::state; +@@ -2705,21 +2690,21 @@ + } + | SQLWARNING_SYM /* SQLSTATEs 01??? */ + { +- $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t)); ++ $$= (sp_cond_type_t *)thd->alloc(sizeof(sp_cond_type_t)); + if ($$ == NULL) + MYSQL_YYABORT; + $$->type= sp_cond_type_t::warning; + } + | not FOUND_SYM /* SQLSTATEs 02??? */ + { +- $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t)); ++ $$= (sp_cond_type_t *)thd->alloc(sizeof(sp_cond_type_t)); + if ($$ == NULL) + MYSQL_YYABORT; + $$->type= sp_cond_type_t::notfound; + } + | SQLEXCEPTION_SYM /* All other SQLSTATEs */ + { +- $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t)); ++ $$= (sp_cond_type_t *)thd->alloc(sizeof(sp_cond_type_t)); + if ($$ == NULL) + MYSQL_YYABORT; + $$->type= sp_cond_type_t::exception; +@@ -2789,7 +2774,6 @@ + + sp_proc_stmt_statement: + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= YYLIP; + +@@ -2798,7 +2782,6 @@ + } + statement + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= YYLIP; + sp_head *sp= lex->sphead; +@@ -2845,7 +2828,7 @@ + + sp_proc_stmt_return: + RETURN_SYM +- { Lex->sphead->reset_lex(YYTHD); } ++ { Lex->sphead->reset_lex(thd); } + expr + { + LEX *lex= Lex; +@@ -2867,7 +2850,7 @@ + MYSQL_YYABORT; + sp->m_flags|= sp_head::HAS_RETURN; + } +- if (sp->restore_lex(YYTHD)) ++ if (sp->restore_lex(thd)) + MYSQL_YYABORT; + } + ; +@@ -3094,7 +3077,7 @@ + ; + + sp_if: +- { Lex->sphead->reset_lex(YYTHD); } ++ { Lex->sphead->reset_lex(thd); } + expr THEN_SYM + { + LEX *lex= Lex; +@@ -3108,7 +3091,7 @@ + sp->add_cont_backpatch(i) || + sp->add_instr(i)) + MYSQL_YYABORT; +- if (sp->restore_lex(YYTHD)) ++ if (sp->restore_lex(thd)) + MYSQL_YYABORT; + } + sp_proc_stmts1 +@@ -3147,7 +3130,7 @@ + { + LEX *lex= Lex; + case_stmt_action_case(lex); +- lex->sphead->reset_lex(YYTHD); /* For expr $3 */ ++ lex->sphead->reset_lex(thd); /* For expr $3 */ + } + expr + { +@@ -3156,7 +3139,7 @@ + MYSQL_YYABORT; + + /* For expr $3 */ +- if (lex->sphead->restore_lex(YYTHD)) ++ if (lex->sphead->restore_lex(thd)) + MYSQL_YYABORT; + } + simple_when_clause_list +@@ -3198,7 +3181,7 @@ + simple_when_clause: + WHEN_SYM + { +- Lex->sphead->reset_lex(YYTHD); /* For expr $3 */ ++ Lex->sphead->reset_lex(thd); /* For expr $3 */ + } + expr + { +@@ -3208,7 +3191,7 @@ + if (case_stmt_action_when(lex, $3, true)) + MYSQL_YYABORT; + /* For expr $3 */ +- if (lex->sphead->restore_lex(YYTHD)) ++ if (lex->sphead->restore_lex(thd)) + MYSQL_YYABORT; + } + THEN_SYM +@@ -3223,7 +3206,7 @@ + searched_when_clause: + WHEN_SYM + { +- Lex->sphead->reset_lex(YYTHD); /* For expr $3 */ ++ Lex->sphead->reset_lex(thd); /* For expr $3 */ + } + expr + { +@@ -3231,7 +3214,7 @@ + if (case_stmt_action_when(lex, $3, false)) + MYSQL_YYABORT; + /* For expr $3 */ +- if (lex->sphead->restore_lex(YYTHD)) ++ if (lex->sphead->restore_lex(thd)) + MYSQL_YYABORT; + } + THEN_SYM +@@ -3395,7 +3378,7 @@ + MYSQL_YYABORT; + } + | WHILE_SYM +- { Lex->sphead->reset_lex(YYTHD); } ++ { Lex->sphead->reset_lex(thd); } + expr DO_SYM + { + LEX *lex= Lex; +@@ -3409,7 +3392,7 @@ + sp->new_cont_backpatch(i) || + sp->add_instr(i)) + MYSQL_YYABORT; +- if (sp->restore_lex(YYTHD)) ++ if (sp->restore_lex(thd)) + MYSQL_YYABORT; + } + sp_proc_stmts1 END WHILE_SYM +@@ -3424,7 +3407,7 @@ + lex->sphead->do_cont_backpatch(); + } + | REPEAT_SYM sp_proc_stmts1 UNTIL_SYM +- { Lex->sphead->reset_lex(YYTHD); } ++ { Lex->sphead->reset_lex(thd); } + expr END REPEAT_SYM + { + LEX *lex= Lex; +@@ -3436,7 +3419,7 @@ + if (i == NULL || + lex->sphead->add_instr(i)) + MYSQL_YYABORT; +- if (lex->sphead->restore_lex(YYTHD)) ++ if (lex->sphead->restore_lex(thd)) + MYSQL_YYABORT; + /* We can shortcut the cont_backpatch here */ + i->m_cont_dest= ip+1; +@@ -3859,7 +3842,6 @@ + create3 {} + | LIKE table_ident + { +- THD *thd= YYTHD; + TABLE_LIST *src_table; + LEX *lex= thd->lex; + +@@ -3873,7 +3855,6 @@ + } + | '(' LIKE table_ident ')' + { +- THD *thd= YYTHD; + TABLE_LIST *src_table; + LEX *lex= thd->lex; + +@@ -4342,7 +4323,6 @@ + bit_expr + { + Item *part_expr= $1; +- THD *thd= YYTHD; + LEX *lex= thd->lex; + Name_resolution_context *context= &lex->current_select->context; + TABLE_LIST *save_list= context->table_list; +@@ -4364,7 +4344,7 @@ + my_error(ER_PARTITION_FUNCTION_IS_NOT_ALLOWED, MYF(0)); + MYSQL_YYABORT; + } +- if (part_expr->fix_fields(YYTHD, (Item**)0) || ++ if (part_expr->fix_fields(thd, (Item**)0) || + ((context->table_list= save_list), FALSE) || + (!part_expr->const_item()) || + (!lex->safe_to_cache_query)) +@@ -4629,7 +4609,7 @@ + | TYPE_SYM opt_equal storage_engines + { + Lex->create_info.db_type= $3; +- WARN_DEPRECATED(yythd, "6.0", "TYPE=storage_engine", ++ WARN_DEPRECATED(thd, "6.0", "TYPE=storage_engine", + "'ENGINE=storage_engine'"); + Lex->create_info.used_fields|= HA_CREATE_USED_ENGINE; + } +@@ -4791,19 +4771,19 @@ + storage_engines: + ident_or_text + { +- plugin_ref plugin= ha_resolve_by_name(YYTHD, &$1); ++ plugin_ref plugin= ha_resolve_by_name(thd, &$1); + + if (plugin) + $$= plugin_data(plugin, handlerton*); + else + { +- if (YYTHD->variables.sql_mode & MODE_NO_ENGINE_SUBSTITUTION) ++ if (thd->variables.sql_mode & MODE_NO_ENGINE_SUBSTITUTION) + { + my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), $1.str); + MYSQL_YYABORT; + } + $$= 0; +- push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN, ++ push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN, + ER_UNKNOWN_STORAGE_ENGINE, + ER(ER_UNKNOWN_STORAGE_ENGINE), + $1.str); +@@ -4815,7 +4795,7 @@ + ident_or_text + { + plugin_ref plugin; +- if ((plugin= ha_resolve_by_name(YYTHD, &$1))) ++ if ((plugin= ha_resolve_by_name(thd, &$1))) + $$= plugin_data(plugin, handlerton*); + else + { +@@ -5043,7 +5023,7 @@ + { + char buff[sizeof("YEAR()") + MY_INT64_NUM_DECIMAL_DIGITS + 1]; + my_snprintf(buff, sizeof(buff), "YEAR(%lu)", length); +- push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_NOTE, ++ push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE, + ER_WARN_DEPRECATED_SYNTAX, + ER(ER_WARN_DEPRECATED_SYNTAX), + buff, "YEAR(4)"); +@@ -5057,7 +5037,7 @@ + { $$=MYSQL_TYPE_TIME; } + | TIMESTAMP opt_field_length + { +- if (YYTHD->variables.sql_mode & MODE_MAXDB) ++ if (thd->variables.sql_mode & MODE_MAXDB) + $$=MYSQL_TYPE_DATETIME; + else + { +@@ -5189,7 +5169,7 @@ + real_type: + REAL + { +- $$= YYTHD->variables.sql_mode & MODE_REAL_AS_FLOAT ? ++ $$= thd->variables.sql_mode & MODE_REAL_AS_FLOAT ? + MYSQL_TYPE_FLOAT : MYSQL_TYPE_DOUBLE; + } + | DOUBLE_SYM +@@ -5263,7 +5243,7 @@ + | DEFAULT now_or_signed_literal { Lex->default_value=$2; } + | ON UPDATE_SYM NOW_SYM optional_braces + { +- Item *item= new (YYTHD->mem_root) Item_func_now_local(); ++ Item *item= new (thd->mem_root) Item_func_now_local(); + if (item == NULL) + MYSQL_YYABORT; + Lex->on_update_value= item; +@@ -5312,7 +5292,7 @@ + now_or_signed_literal: + NOW_SYM optional_braces + { +- $$= new (YYTHD->mem_root) Item_func_now_local(); ++ $$= new (thd->mem_root) Item_func_now_local(); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -5673,7 +5653,6 @@ + alter: + ALTER opt_ignore TABLE_SYM table_ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->name.str= 0; + lex->name.length= 0; +@@ -5799,7 +5778,7 @@ + Event_parse_data. + */ + +- if (!(Lex->event_parse_data= Event_parse_data::new_instance(YYTHD))) ++ if (!(Lex->event_parse_data= Event_parse_data::new_instance(thd))) + MYSQL_YYABORT; + Lex->event_parse_data->identifier= $4; + +@@ -6192,7 +6171,6 @@ + { + if (!$4) + { +- THD *thd= YYTHD; + $4= thd->variables.collation_database; + } + $5= $5 ? $5 : $4; +@@ -6556,7 +6534,7 @@ + assign_to_keycache: + table_ident cache_keys_spec + { +- if (!Select->add_table_to_list(YYTHD, $1, NULL, 0, TL_READ, ++ if (!Select->add_table_to_list(thd, $1, NULL, 0, TL_READ, + Select->pop_index_hints())) + MYSQL_YYABORT; + } +@@ -6585,7 +6563,7 @@ + preload_keys: + table_ident cache_keys_spec opt_ignore_leaves + { +- if (!Select->add_table_to_list(YYTHD, $1, NULL, $3, TL_READ, ++ if (!Select->add_table_to_list(thd, $1, NULL, $3, TL_READ, + Select->pop_index_hints())) + MYSQL_YYABORT; + } +@@ -6593,7 +6571,7 @@ + + cache_keys_spec: + { +- Lex->select_lex.alloc_index_hints(YYTHD); ++ Lex->select_lex.alloc_index_hints(thd); + Select->set_index_hint_type(INDEX_HINT_USE, + global_system_variables.old_mode ? + INDEX_HINT_MASK_JOIN : +@@ -6813,7 +6791,6 @@ + | select_item + | '*' + { +- THD *thd= YYTHD; + Item *item= new (thd->mem_root) + Item_field(&thd->lex->current_select->context, + NULL, NULL, "*"); +@@ -6828,7 +6805,6 @@ + select_item: + remember_name select_item2 remember_end select_alias + { +- THD *thd= YYTHD; + DBUG_ASSERT($1 < $3); + + if (add_item_to_list(thd, $2)) +@@ -6929,7 +6905,7 @@ + else + { + /* X OR Y */ +- $$ = new (YYTHD->mem_root) Item_cond_or($1, $3); ++ $$ = new (thd->mem_root) Item_cond_or($1, $3); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -6937,7 +6913,7 @@ + | expr XOR expr %prec XOR + { + /* XOR is a proprietary extension */ +- $$ = new (YYTHD->mem_root) Item_cond_xor($1, $3); ++ $$ = new (thd->mem_root) Item_cond_xor($1, $3); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -6979,50 +6955,50 @@ + else + { + /* X AND Y */ +- $$ = new (YYTHD->mem_root) Item_cond_and($1, $3); ++ $$ = new (thd->mem_root) Item_cond_and($1, $3); + if ($$ == NULL) + MYSQL_YYABORT; + } + } + | NOT_SYM expr %prec NOT_SYM + { +- $$= negate_expression(YYTHD, $2); ++ $$= negate_expression(thd, $2); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bool_pri IS TRUE_SYM %prec IS + { +- $$= new (YYTHD->mem_root) Item_func_istrue($1); ++ $$= new (thd->mem_root) Item_func_istrue($1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bool_pri IS not TRUE_SYM %prec IS + { +- $$= new (YYTHD->mem_root) Item_func_isnottrue($1); ++ $$= new (thd->mem_root) Item_func_isnottrue($1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bool_pri IS FALSE_SYM %prec IS + { +- $$= new (YYTHD->mem_root) Item_func_isfalse($1); ++ $$= new (thd->mem_root) Item_func_isfalse($1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bool_pri IS not FALSE_SYM %prec IS + { +- $$= new (YYTHD->mem_root) Item_func_isnotfalse($1); ++ $$= new (thd->mem_root) Item_func_isnotfalse($1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bool_pri IS UNKNOWN_SYM %prec IS + { +- $$= new (YYTHD->mem_root) Item_func_isnull($1); ++ $$= new (thd->mem_root) Item_func_isnull($1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bool_pri IS not UNKNOWN_SYM %prec IS + { +- $$= new (YYTHD->mem_root) Item_func_isnotnull($1); ++ $$= new (thd->mem_root) Item_func_isnotnull($1); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -7032,19 +7008,19 @@ + bool_pri: + bool_pri IS NULL_SYM %prec IS + { +- $$= new (YYTHD->mem_root) Item_func_isnull($1); ++ $$= new (thd->mem_root) Item_func_isnull($1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bool_pri IS not NULL_SYM %prec IS + { +- $$= new (YYTHD->mem_root) Item_func_isnotnull($1); ++ $$= new (thd->mem_root) Item_func_isnotnull($1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bool_pri EQUAL_SYM predicate %prec EQUAL_SYM + { +- $$= new (YYTHD->mem_root) Item_func_equal($1,$3); ++ $$= new (thd->mem_root) Item_func_equal($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -7066,13 +7042,12 @@ + predicate: + bit_expr IN_SYM '(' subselect ')' + { +- $$= new (YYTHD->mem_root) Item_in_subselect($1, $4); ++ $$= new (thd->mem_root) Item_in_subselect($1, $4); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr not IN_SYM '(' subselect ')' + { +- THD *thd= YYTHD; + Item *item= new (thd->mem_root) Item_in_subselect($1, $5); + if (item == NULL) + MYSQL_YYABORT; +@@ -7082,7 +7057,7 @@ + } + | bit_expr IN_SYM '(' expr ')' + { +- $$= handle_sql2003_note184_exception(YYTHD, $1, true, $4); ++ $$= handle_sql2003_note184_exception(thd, $1, true, $4); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -7090,13 +7065,13 @@ + { + $6->push_front($4); + $6->push_front($1); +- $$= new (YYTHD->mem_root) Item_func_in(*$6); ++ $$= new (thd->mem_root) Item_func_in(*$6); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr not IN_SYM '(' expr ')' + { +- $$= handle_sql2003_note184_exception(YYTHD, $1, false, $5); ++ $$= handle_sql2003_note184_exception(thd, $1, false, $5); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -7104,7 +7079,7 @@ + { + $7->push_front($5); + $7->push_front($1); +- Item_func_in *item = new (YYTHD->mem_root) Item_func_in(*$7); ++ Item_func_in *item = new (thd->mem_root) Item_func_in(*$7); + if (item == NULL) + MYSQL_YYABORT; + item->negate(); +@@ -7112,14 +7087,14 @@ + } + | bit_expr BETWEEN_SYM bit_expr AND_SYM predicate + { +- $$= new (YYTHD->mem_root) Item_func_between($1,$3,$5); ++ $$= new (thd->mem_root) Item_func_between($1,$3,$5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr not BETWEEN_SYM bit_expr AND_SYM predicate + { + Item_func_between *item; +- item= new (YYTHD->mem_root) Item_func_between($1,$4,$6); ++ item= new (thd->mem_root) Item_func_between($1,$4,$6); + if (item == NULL) + MYSQL_YYABORT; + item->negate(); +@@ -7127,42 +7102,42 @@ + } + | bit_expr SOUNDS_SYM LIKE bit_expr + { +- Item *item1= new (YYTHD->mem_root) Item_func_soundex($1); +- Item *item4= new (YYTHD->mem_root) Item_func_soundex($4); ++ Item *item1= new (thd->mem_root) Item_func_soundex($1); ++ Item *item4= new (thd->mem_root) Item_func_soundex($4); + if ((item1 == NULL) || (item4 == NULL)) + MYSQL_YYABORT; +- $$= new (YYTHD->mem_root) Item_func_eq(item1, item4); ++ $$= new (thd->mem_root) Item_func_eq(item1, item4); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr LIKE simple_expr opt_escape + { +- $$= new (YYTHD->mem_root) Item_func_like($1,$3,$4,Lex->escape_used); ++ $$= new (thd->mem_root) Item_func_like($1,$3,$4,Lex->escape_used); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr not LIKE simple_expr opt_escape + { +- Item *item= new (YYTHD->mem_root) Item_func_like($1,$4,$5, ++ Item *item= new (thd->mem_root) Item_func_like($1,$4,$5, + Lex->escape_used); + if (item == NULL) + MYSQL_YYABORT; +- $$= new (YYTHD->mem_root) Item_func_not(item); ++ $$= new (thd->mem_root) Item_func_not(item); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr REGEXP bit_expr + { +- $$= new (YYTHD->mem_root) Item_func_regex($1,$3); ++ $$= new (thd->mem_root) Item_func_regex($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr not REGEXP bit_expr + { +- Item *item= new (YYTHD->mem_root) Item_func_regex($1,$4); ++ Item *item= new (thd->mem_root) Item_func_regex($1,$4); + if (item == NULL) + MYSQL_YYABORT; +- $$= negate_expression(YYTHD, item); ++ $$= negate_expression(thd, item); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -7172,85 +7147,85 @@ + bit_expr: + bit_expr '|' bit_expr %prec '|' + { +- $$= new (YYTHD->mem_root) Item_func_bit_or($1,$3); ++ $$= new (thd->mem_root) Item_func_bit_or($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr '&' bit_expr %prec '&' + { +- $$= new (YYTHD->mem_root) Item_func_bit_and($1,$3); ++ $$= new (thd->mem_root) Item_func_bit_and($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr SHIFT_LEFT bit_expr %prec SHIFT_LEFT + { +- $$= new (YYTHD->mem_root) Item_func_shift_left($1,$3); ++ $$= new (thd->mem_root) Item_func_shift_left($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr SHIFT_RIGHT bit_expr %prec SHIFT_RIGHT + { +- $$= new (YYTHD->mem_root) Item_func_shift_right($1,$3); ++ $$= new (thd->mem_root) Item_func_shift_right($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr '+' bit_expr %prec '+' + { +- $$= new (YYTHD->mem_root) Item_func_plus($1,$3); ++ $$= new (thd->mem_root) Item_func_plus($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr '-' bit_expr %prec '-' + { +- $$= new (YYTHD->mem_root) Item_func_minus($1,$3); ++ $$= new (thd->mem_root) Item_func_minus($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr '+' INTERVAL_SYM expr interval %prec '+' + { +- $$= new (YYTHD->mem_root) Item_date_add_interval($1,$4,$5,0); ++ $$= new (thd->mem_root) Item_date_add_interval($1,$4,$5,0); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr '-' INTERVAL_SYM expr interval %prec '-' + { +- $$= new (YYTHD->mem_root) Item_date_add_interval($1,$4,$5,1); ++ $$= new (thd->mem_root) Item_date_add_interval($1,$4,$5,1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr '*' bit_expr %prec '*' + { +- $$= new (YYTHD->mem_root) Item_func_mul($1,$3); ++ $$= new (thd->mem_root) Item_func_mul($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr '/' bit_expr %prec '/' + { +- $$= new (YYTHD->mem_root) Item_func_div($1,$3); ++ $$= new (thd->mem_root) Item_func_div($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr '%' bit_expr %prec '%' + { +- $$= new (YYTHD->mem_root) Item_func_mod($1,$3); ++ $$= new (thd->mem_root) Item_func_mod($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr DIV_SYM bit_expr %prec DIV_SYM + { +- $$= new (YYTHD->mem_root) Item_func_int_div($1,$3); ++ $$= new (thd->mem_root) Item_func_int_div($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr MOD_SYM bit_expr %prec MOD_SYM + { +- $$= new (YYTHD->mem_root) Item_func_mod($1,$3); ++ $$= new (thd->mem_root) Item_func_mod($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr '^' bit_expr + { +- $$= new (YYTHD->mem_root) Item_func_bit_xor($1,$3); ++ $$= new (thd->mem_root) Item_func_bit_xor($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -7299,7 +7274,6 @@ + | function_call_conflict + | simple_expr COLLATE_SYM ident_or_text %prec NEG + { +- THD *thd= YYTHD; + Item *i1= new (thd->mem_root) Item_string($3.str, + $3.length, + thd->charset()); +@@ -7315,7 +7289,7 @@ + | sum_expr + | simple_expr OR_OR_SYM simple_expr + { +- $$= new (YYTHD->mem_root) Item_func_concat($1, $3); ++ $$= new (thd->mem_root) Item_func_concat($1, $3); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -7325,25 +7299,25 @@ + } + | '-' simple_expr %prec NEG + { +- $$= new (YYTHD->mem_root) Item_func_neg($2); ++ $$= new (thd->mem_root) Item_func_neg($2); + if ($$ == NULL) + MYSQL_YYABORT; + } + | '~' simple_expr %prec NEG + { +- $$= new (YYTHD->mem_root) Item_func_bit_neg($2); ++ $$= new (thd->mem_root) Item_func_bit_neg($2); + if ($$ == NULL) + MYSQL_YYABORT; + } + | not2 simple_expr %prec NEG + { +- $$= negate_expression(YYTHD, $2); ++ $$= negate_expression(thd, $2); + if ($$ == NULL) + MYSQL_YYABORT; + } + | '(' subselect ')' + { +- $$= new (YYTHD->mem_root) Item_singlerow_subselect($2); ++ $$= new (thd->mem_root) Item_singlerow_subselect($2); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -7352,20 +7326,20 @@ + | '(' expr ',' expr_list ')' + { + $4->push_front($2); +- $$= new (YYTHD->mem_root) Item_row(*$4); ++ $$= new (thd->mem_root) Item_row(*$4); + if ($$ == NULL) + MYSQL_YYABORT; + } + | ROW_SYM '(' expr ',' expr_list ')' + { + $5->push_front($3); +- $$= new (YYTHD->mem_root) Item_row(*$5); ++ $$= new (thd->mem_root) Item_row(*$5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | EXISTS '(' subselect ')' + { +- $$= new (YYTHD->mem_root) Item_exists_subselect($3); ++ $$= new (thd->mem_root) Item_exists_subselect($3); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -7374,7 +7348,7 @@ + | MATCH ident_list_arg AGAINST '(' bit_expr fulltext_options ')' + { + $2->push_front($5); +- Item_func_match *i1= new (YYTHD->mem_root) Item_func_match(*$2, $6); ++ Item_func_match *i1= new (thd->mem_root) Item_func_match(*$2, $6); + if (i1 == NULL) + MYSQL_YYABORT; + Select->add_ftfunc_to_list(i1); +@@ -7382,7 +7356,7 @@ + } + | BINARY simple_expr %prec NEG + { +- $$= create_func_cast(YYTHD, $2, ITEM_CAST_CHAR, NULL, NULL, ++ $$= create_func_cast(thd, $2, ITEM_CAST_CHAR, NULL, NULL, + &my_charset_bin); + if ($$ == NULL) + MYSQL_YYABORT; +@@ -7390,27 +7364,27 @@ + | CAST_SYM '(' expr AS cast_type ')' + { + LEX *lex= Lex; +- $$= create_func_cast(YYTHD, $3, $5, lex->length, lex->dec, ++ $$= create_func_cast(thd, $3, $5, lex->length, lex->dec, + lex->charset); + if ($$ == NULL) + MYSQL_YYABORT; + } + | CASE_SYM opt_expr when_list opt_else END + { +- $$= new (YYTHD->mem_root) Item_func_case(* $3, $2, $4 ); ++ $$= new (thd->mem_root) Item_func_case(* $3, $2, $4 ); + if ($$ == NULL) + MYSQL_YYABORT; + } + | CONVERT_SYM '(' expr ',' cast_type ')' + { +- $$= create_func_cast(YYTHD, $3, $5, Lex->length, Lex->dec, ++ $$= create_func_cast(thd, $3, $5, Lex->length, Lex->dec, + Lex->charset); + if ($$ == NULL) + MYSQL_YYABORT; + } + | CONVERT_SYM '(' expr USING charset_name ')' + { +- $$= new (YYTHD->mem_root) Item_func_conv_charset($3,$5); ++ $$= new (thd->mem_root) Item_func_conv_charset($3,$5); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -7423,14 +7397,14 @@ + my_error(ER_WRONG_COLUMN_NAME, MYF(0), il->my_name()->str); + MYSQL_YYABORT; + } +- $$= new (YYTHD->mem_root) Item_default_value(Lex->current_context(), ++ $$= new (thd->mem_root) Item_default_value(Lex->current_context(), + $3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | VALUES '(' simple_ident_nospvar ')' + { +- $$= new (YYTHD->mem_root) Item_insert_value(Lex->current_context(), ++ $$= new (thd->mem_root) Item_insert_value(Lex->current_context(), + $3); + if ($$ == NULL) + MYSQL_YYABORT; +@@ -7438,7 +7412,7 @@ + | INTERVAL_SYM expr interval '+' expr %prec INTERVAL_SYM + /* we cannot put interval before - */ + { +- $$= new (YYTHD->mem_root) Item_date_add_interval($5,$2,$3,0); ++ $$= new (thd->mem_root) Item_date_add_interval($5,$2,$3,0); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -7453,19 +7427,19 @@ + function_call_keyword: + CHAR_SYM '(' expr_list ')' + { +- $$= new (YYTHD->mem_root) Item_func_char(*$3); ++ $$= new (thd->mem_root) Item_func_char(*$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | CHAR_SYM '(' expr_list USING charset_name ')' + { +- $$= new (YYTHD->mem_root) Item_func_char(*$3, $5); ++ $$= new (thd->mem_root) Item_func_char(*$3, $5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | CURRENT_USER optional_braces + { +- $$= new (YYTHD->mem_root) Item_func_current_user(Lex->current_context()); ++ $$= new (thd->mem_root) Item_func_current_user(Lex->current_context()); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->set_stmt_unsafe(); +@@ -7473,31 +7447,30 @@ + } + | DATE_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_date_typecast($3); ++ $$= new (thd->mem_root) Item_date_typecast($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | DAY_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_dayofmonth($3); ++ $$= new (thd->mem_root) Item_func_dayofmonth($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | HOUR_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_hour($3); ++ $$= new (thd->mem_root) Item_func_hour($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | INSERT '(' expr ',' expr ',' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_insert($3,$5,$7,$9); ++ $$= new (thd->mem_root) Item_func_insert($3,$5,$7,$9); + if ($$ == NULL) + MYSQL_YYABORT; + } + | INTERVAL_SYM '(' expr ',' expr ')' %prec INTERVAL_SYM + { +- THD *thd= YYTHD; + List *list= new (thd->mem_root) List; + if (list == NULL) + MYSQL_YYABORT; +@@ -7512,7 +7485,6 @@ + } + | INTERVAL_SYM '(' expr ',' expr ',' expr_list ')' %prec INTERVAL_SYM + { +- THD *thd= YYTHD; + $7->push_front($5); + $7->push_front($3); + Item_row *item= new (thd->mem_root) Item_row(*$7); +@@ -7524,103 +7496,103 @@ + } + | LEFT '(' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_left($3,$5); ++ $$= new (thd->mem_root) Item_func_left($3,$5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | MINUTE_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_minute($3); ++ $$= new (thd->mem_root) Item_func_minute($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | MONTH_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_month($3); ++ $$= new (thd->mem_root) Item_func_month($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | RIGHT '(' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_right($3,$5); ++ $$= new (thd->mem_root) Item_func_right($3,$5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | SECOND_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_second($3); ++ $$= new (thd->mem_root) Item_func_second($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TIME_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_time_typecast($3); ++ $$= new (thd->mem_root) Item_time_typecast($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TIMESTAMP '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_datetime_typecast($3); ++ $$= new (thd->mem_root) Item_datetime_typecast($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TIMESTAMP '(' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_add_time($3, $5, 1, 0); ++ $$= new (thd->mem_root) Item_func_add_time($3, $5, 1, 0); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TRIM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_trim($3); ++ $$= new (thd->mem_root) Item_func_trim($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TRIM '(' LEADING expr FROM expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_ltrim($6,$4); ++ $$= new (thd->mem_root) Item_func_ltrim($6,$4); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TRIM '(' TRAILING expr FROM expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_rtrim($6,$4); ++ $$= new (thd->mem_root) Item_func_rtrim($6,$4); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TRIM '(' BOTH expr FROM expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_trim($6,$4); ++ $$= new (thd->mem_root) Item_func_trim($6,$4); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TRIM '(' LEADING FROM expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_ltrim($5); ++ $$= new (thd->mem_root) Item_func_ltrim($5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TRIM '(' TRAILING FROM expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_rtrim($5); ++ $$= new (thd->mem_root) Item_func_rtrim($5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TRIM '(' BOTH FROM expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_trim($5); ++ $$= new (thd->mem_root) Item_func_trim($5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TRIM '(' expr FROM expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_trim($5,$3); ++ $$= new (thd->mem_root) Item_func_trim($5,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | USER '(' ')' + { +- $$= new (YYTHD->mem_root) Item_func_user(); ++ $$= new (thd->mem_root) Item_func_user(); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->set_stmt_unsafe(); +@@ -7628,7 +7600,7 @@ + } + | YEAR_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_year($3); ++ $$= new (thd->mem_root) Item_func_year($3); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -7649,34 +7621,34 @@ + function_call_nonkeyword: + ADDDATE_SYM '(' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_date_add_interval($3, $5, ++ $$= new (thd->mem_root) Item_date_add_interval($3, $5, + INTERVAL_DAY, 0); + if ($$ == NULL) + MYSQL_YYABORT; + } + | ADDDATE_SYM '(' expr ',' INTERVAL_SYM expr interval ')' + { +- $$= new (YYTHD->mem_root) Item_date_add_interval($3, $6, $7, 0); ++ $$= new (thd->mem_root) Item_date_add_interval($3, $6, $7, 0); + if ($$ == NULL) + MYSQL_YYABORT; + } + | CURDATE optional_braces + { +- $$= new (YYTHD->mem_root) Item_func_curdate_local(); ++ $$= new (thd->mem_root) Item_func_curdate_local(); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->safe_to_cache_query=0; + } + | CURTIME optional_braces + { +- $$= new (YYTHD->mem_root) Item_func_curtime_local(); ++ $$= new (thd->mem_root) Item_func_curtime_local(); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->safe_to_cache_query=0; + } + | CURTIME '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_curtime_local($3); ++ $$= new (thd->mem_root) Item_func_curtime_local($3); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->safe_to_cache_query=0; +@@ -7684,83 +7656,83 @@ + | DATE_ADD_INTERVAL '(' expr ',' INTERVAL_SYM expr interval ')' + %prec INTERVAL_SYM + { +- $$= new (YYTHD->mem_root) Item_date_add_interval($3,$6,$7,0); ++ $$= new (thd->mem_root) Item_date_add_interval($3,$6,$7,0); + if ($$ == NULL) + MYSQL_YYABORT; + } + | DATE_SUB_INTERVAL '(' expr ',' INTERVAL_SYM expr interval ')' + %prec INTERVAL_SYM + { +- $$= new (YYTHD->mem_root) Item_date_add_interval($3,$6,$7,1); ++ $$= new (thd->mem_root) Item_date_add_interval($3,$6,$7,1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | EXTRACT_SYM '(' interval FROM expr ')' + { +- $$=new (YYTHD->mem_root) Item_extract( $3, $5); ++ $$=new (thd->mem_root) Item_extract( $3, $5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | GET_FORMAT '(' date_time_type ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_get_format($3, $5); ++ $$= new (thd->mem_root) Item_func_get_format($3, $5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | NOW_SYM optional_braces + { +- $$= new (YYTHD->mem_root) Item_func_now_local(); ++ $$= new (thd->mem_root) Item_func_now_local(); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->safe_to_cache_query=0; + } + | NOW_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_now_local($3); ++ $$= new (thd->mem_root) Item_func_now_local($3); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->safe_to_cache_query=0; + } + | POSITION_SYM '(' bit_expr IN_SYM expr ')' + { +- $$ = new (YYTHD->mem_root) Item_func_locate($5,$3); ++ $$ = new (thd->mem_root) Item_func_locate($5,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | SUBDATE_SYM '(' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_date_add_interval($3, $5, ++ $$= new (thd->mem_root) Item_date_add_interval($3, $5, + INTERVAL_DAY, 1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | SUBDATE_SYM '(' expr ',' INTERVAL_SYM expr interval ')' + { +- $$= new (YYTHD->mem_root) Item_date_add_interval($3, $6, $7, 1); ++ $$= new (thd->mem_root) Item_date_add_interval($3, $6, $7, 1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | SUBSTRING '(' expr ',' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_substr($3,$5,$7); ++ $$= new (thd->mem_root) Item_func_substr($3,$5,$7); + if ($$ == NULL) + MYSQL_YYABORT; + } + | SUBSTRING '(' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_substr($3,$5); ++ $$= new (thd->mem_root) Item_func_substr($3,$5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | SUBSTRING '(' expr FROM expr FOR_SYM expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_substr($3,$5,$7); ++ $$= new (thd->mem_root) Item_func_substr($3,$5,$7); + if ($$ == NULL) + MYSQL_YYABORT; + } + | SUBSTRING '(' expr FROM expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_substr($3,$5); ++ $$= new (thd->mem_root) Item_func_substr($3,$5); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -7775,9 +7747,9 @@ + */ + Lex->set_stmt_unsafe(); + if (global_system_variables.sysdate_is_now == 0) +- $$= new (YYTHD->mem_root) Item_func_sysdate_local(); ++ $$= new (thd->mem_root) Item_func_sysdate_local(); + else +- $$= new (YYTHD->mem_root) Item_func_now_local(); ++ $$= new (thd->mem_root) Item_func_now_local(); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->safe_to_cache_query=0; +@@ -7785,42 +7757,42 @@ + | SYSDATE '(' expr ')' + { + if (global_system_variables.sysdate_is_now == 0) +- $$= new (YYTHD->mem_root) Item_func_sysdate_local($3); ++ $$= new (thd->mem_root) Item_func_sysdate_local($3); + else +- $$= new (YYTHD->mem_root) Item_func_now_local($3); ++ $$= new (thd->mem_root) Item_func_now_local($3); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->safe_to_cache_query=0; + } + | TIMESTAMP_ADD '(' interval_time_stamp ',' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_date_add_interval($7,$5,$3,0); ++ $$= new (thd->mem_root) Item_date_add_interval($7,$5,$3,0); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TIMESTAMP_DIFF '(' interval_time_stamp ',' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_timestamp_diff($5,$7,$3); ++ $$= new (thd->mem_root) Item_func_timestamp_diff($5,$7,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | UTC_DATE_SYM optional_braces + { +- $$= new (YYTHD->mem_root) Item_func_curdate_utc(); ++ $$= new (thd->mem_root) Item_func_curdate_utc(); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->safe_to_cache_query=0; + } + | UTC_TIME_SYM optional_braces + { +- $$= new (YYTHD->mem_root) Item_func_curtime_utc(); ++ $$= new (thd->mem_root) Item_func_curtime_utc(); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->safe_to_cache_query=0; + } + | UTC_TIMESTAMP_SYM optional_braces + { +- $$= new (YYTHD->mem_root) Item_func_now_utc(); ++ $$= new (thd->mem_root) Item_func_now_utc(); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->safe_to_cache_query=0; +@@ -7835,62 +7807,61 @@ + function_call_conflict: + ASCII_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_ascii($3); ++ $$= new (thd->mem_root) Item_func_ascii($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | CHARSET '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_charset($3); ++ $$= new (thd->mem_root) Item_func_charset($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | COALESCE '(' expr_list ')' + { +- $$= new (YYTHD->mem_root) Item_func_coalesce(* $3); ++ $$= new (thd->mem_root) Item_func_coalesce(* $3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | COLLATION_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_collation($3); ++ $$= new (thd->mem_root) Item_func_collation($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | DATABASE '(' ')' + { +- $$= new (YYTHD->mem_root) Item_func_database(); ++ $$= new (thd->mem_root) Item_func_database(); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->safe_to_cache_query=0; + } + | IF '(' expr ',' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_if($3,$5,$7); ++ $$= new (thd->mem_root) Item_func_if($3,$5,$7); + if ($$ == NULL) + MYSQL_YYABORT; + } + | MICROSECOND_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_microsecond($3); ++ $$= new (thd->mem_root) Item_func_microsecond($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | MOD_SYM '(' expr ',' expr ')' + { +- $$ = new (YYTHD->mem_root) Item_func_mod($3, $5); ++ $$ = new (thd->mem_root) Item_func_mod($3, $5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | OLD_PASSWORD '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_old_password($3); ++ $$= new (thd->mem_root) Item_func_old_password($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | PASSWORD '(' expr ')' + { +- THD *thd= YYTHD; + Item* i1; + if (thd->variables.old_passwords) + i1= new (thd->mem_root) Item_func_old_password($3); +@@ -7902,31 +7873,30 @@ + } + | QUARTER_SYM '(' expr ')' + { +- $$ = new (YYTHD->mem_root) Item_func_quarter($3); ++ $$ = new (thd->mem_root) Item_func_quarter($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | REPEAT_SYM '(' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_repeat($3,$5); ++ $$= new (thd->mem_root) Item_func_repeat($3,$5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | REPLACE '(' expr ',' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_replace($3,$5,$7); ++ $$= new (thd->mem_root) Item_func_replace($3,$5,$7); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TRUNCATE_SYM '(' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_round($3,$5,1); ++ $$= new (thd->mem_root) Item_func_round($3,$5,1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | WEEK_SYM '(' expr ')' + { +- THD *thd= YYTHD; + Item *i1= new (thd->mem_root) Item_int((char*) "0", + thd->variables.default_week_format, + 1); +@@ -7938,7 +7908,7 @@ + } + | WEEK_SYM '(' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_week($3,$5); ++ $$= new (thd->mem_root) Item_func_week($3,$5); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -7960,52 +7930,52 @@ + geometry_function: + CONTAINS_SYM '(' expr ',' expr ')' + { +- $$= GEOM_NEW(YYTHD, ++ $$= GEOM_NEW(thd, + Item_func_spatial_rel($3, $5, + Item_func::SP_CONTAINS_FUNC)); + } + | GEOMETRYCOLLECTION '(' expr_list ')' + { +- $$= GEOM_NEW(YYTHD, ++ $$= GEOM_NEW(thd, + Item_func_spatial_collection(* $3, + Geometry::wkb_geometrycollection, + Geometry::wkb_point)); + } + | LINESTRING '(' expr_list ')' + { +- $$= GEOM_NEW(YYTHD, ++ $$= GEOM_NEW(thd, + Item_func_spatial_collection(* $3, + Geometry::wkb_linestring, + Geometry::wkb_point)); + } + | MULTILINESTRING '(' expr_list ')' + { +- $$= GEOM_NEW(YYTHD, ++ $$= GEOM_NEW(thd, + Item_func_spatial_collection(* $3, + Geometry::wkb_multilinestring, + Geometry::wkb_linestring)); + } + | MULTIPOINT '(' expr_list ')' + { +- $$= GEOM_NEW(YYTHD, ++ $$= GEOM_NEW(thd, + Item_func_spatial_collection(* $3, + Geometry::wkb_multipoint, + Geometry::wkb_point)); + } + | MULTIPOLYGON '(' expr_list ')' + { +- $$= GEOM_NEW(YYTHD, ++ $$= GEOM_NEW(thd, + Item_func_spatial_collection(* $3, + Geometry::wkb_multipolygon, + Geometry::wkb_polygon)); + } + | POINT_SYM '(' expr ',' expr ')' + { +- $$= GEOM_NEW(YYTHD, Item_func_point($3,$5)); ++ $$= GEOM_NEW(thd, Item_func_point($3,$5)); + } + | POLYGON '(' expr_list ')' + { +- $$= GEOM_NEW(YYTHD, ++ $$= GEOM_NEW(thd, + Item_func_spatial_collection(* $3, + Geometry::wkb_polygon, + Geometry::wkb_linestring)); +@@ -8043,7 +8013,6 @@ + } + opt_udf_expr_list ')' + { +- THD *thd= YYTHD; + Create_func *builder; + Item *item= NULL; + +@@ -8097,7 +8066,6 @@ + } + | ident '.' ident '(' opt_expr_list ')' + { +- THD *thd= YYTHD; + Create_qfunc *builder; + Item *item= NULL; + +@@ -8161,7 +8129,7 @@ + udf_expr_list: + udf_expr + { +- $$= new (YYTHD->mem_root) List; ++ $$= new (thd->mem_root) List; + if ($$ == NULL) + MYSQL_YYABORT; + $$->push_back($1); +@@ -8194,7 +8162,7 @@ + remember_name we may get quoted or escaped names. + */ + else if ($2->type() != Item::FIELD_ITEM) +- $2->set_name($1, (uint) ($3 - $1), YYTHD->charset()); ++ $2->set_name($1, (uint) ($3 - $1), thd->charset()); + $$= $2; + } + ; +@@ -8202,46 +8170,46 @@ + sum_expr: + AVG_SYM '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_avg($3); ++ $$= new (thd->mem_root) Item_sum_avg($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | AVG_SYM '(' DISTINCT in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_avg_distinct($4); ++ $$= new (thd->mem_root) Item_sum_avg_distinct($4); + if ($$ == NULL) + MYSQL_YYABORT; + } + | BIT_AND '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_and($3); ++ $$= new (thd->mem_root) Item_sum_and($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | BIT_OR '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_or($3); ++ $$= new (thd->mem_root) Item_sum_or($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | BIT_XOR '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_xor($3); ++ $$= new (thd->mem_root) Item_sum_xor($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | COUNT_SYM '(' opt_all '*' ')' + { +- Item *item= new (YYTHD->mem_root) Item_int((int32) 0L,1); ++ Item *item= new (thd->mem_root) Item_int((int32) 0L,1); + if (item == NULL) + MYSQL_YYABORT; +- $$= new (YYTHD->mem_root) Item_sum_count(item); ++ $$= new (thd->mem_root) Item_sum_count(item); + if ($$ == NULL) + MYSQL_YYABORT; + } + | COUNT_SYM '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_count($3); ++ $$= new (thd->mem_root) Item_sum_count($3); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -8251,13 +8219,13 @@ + { Select->in_sum_expr--; } + ')' + { +- $$= new (YYTHD->mem_root) Item_sum_count_distinct(* $5); ++ $$= new (thd->mem_root) Item_sum_count_distinct(* $5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | MIN_SYM '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_min($3); ++ $$= new (thd->mem_root) Item_sum_min($3); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -8268,55 +8236,55 @@ + */ + | MIN_SYM '(' DISTINCT in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_min($4); ++ $$= new (thd->mem_root) Item_sum_min($4); + if ($$ == NULL) + MYSQL_YYABORT; + } + | MAX_SYM '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_max($3); ++ $$= new (thd->mem_root) Item_sum_max($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | MAX_SYM '(' DISTINCT in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_max($4); ++ $$= new (thd->mem_root) Item_sum_max($4); + if ($$ == NULL) + MYSQL_YYABORT; + } + | STD_SYM '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_std($3, 0); ++ $$= new (thd->mem_root) Item_sum_std($3, 0); + if ($$ == NULL) + MYSQL_YYABORT; + } + | VARIANCE_SYM '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_variance($3, 0); ++ $$= new (thd->mem_root) Item_sum_variance($3, 0); + if ($$ == NULL) + MYSQL_YYABORT; + } + | STDDEV_SAMP_SYM '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_std($3, 1); ++ $$= new (thd->mem_root) Item_sum_std($3, 1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | VAR_SAMP_SYM '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_variance($3, 1); ++ $$= new (thd->mem_root) Item_sum_variance($3, 1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | SUM_SYM '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_sum($3); ++ $$= new (thd->mem_root) Item_sum_sum($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | SUM_SYM '(' DISTINCT in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_sum_distinct($4); ++ $$= new (thd->mem_root) Item_sum_sum_distinct($4); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -8328,7 +8296,7 @@ + { + SELECT_LEX *sel= Select; + sel->in_sum_expr--; +- $$= new (YYTHD->mem_root) ++ $$= new (thd->mem_root) + Item_func_group_concat(Lex->current_context(), $3, $5, + sel->gorder_list, $7); + if ($$ == NULL) +@@ -8357,7 +8325,7 @@ + ident_or_text SET_VAR expr + { + Item_func_set_user_var *item; +- $$= item= new (YYTHD->mem_root) Item_func_set_user_var($1, $3); ++ $$= item= new (thd->mem_root) Item_func_set_user_var($1, $3); + if ($$ == NULL) + MYSQL_YYABORT; + LEX *lex= Lex; +@@ -8366,7 +8334,7 @@ + } + | ident_or_text + { +- $$= new (YYTHD->mem_root) Item_func_get_user_var($1); ++ $$= new (thd->mem_root) Item_func_get_user_var($1); + if ($$ == NULL) + MYSQL_YYABORT; + LEX *lex= Lex; +@@ -8380,7 +8348,7 @@ + my_parse_error(ER(ER_SYNTAX_ERROR)); + MYSQL_YYABORT; + } +- if (!($$= get_system_var(YYTHD, $2, $3, $4))) ++ if (!($$= get_system_var(thd, $2, $3, $4))) + MYSQL_YYABORT; + if (!((Item_func_get_system_var*) $$)->is_written_to_binlog()) + Lex->set_stmt_unsafe(); +@@ -8395,7 +8363,7 @@ + opt_gconcat_separator: + /* empty */ + { +- $$= new (YYTHD->mem_root) String(",", 1, &my_charset_latin1); ++ $$= new (thd->mem_root) String(",", 1, &my_charset_latin1); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -8422,9 +8390,9 @@ + + gorder_list: + gorder_list ',' order_ident order_dir +- { if (add_gorder_to_list(YYTHD, $3,(bool) $4)) MYSQL_YYABORT; } ++ { if (add_gorder_to_list(thd, $3,(bool) $4)) MYSQL_YYABORT; } + | order_ident order_dir +- { if (add_gorder_to_list(YYTHD, $1,(bool) $2)) MYSQL_YYABORT; } ++ { if (add_gorder_to_list(thd, $1,(bool) $2)) MYSQL_YYABORT; } + ; + + in_sum_expr: +@@ -8477,7 +8445,7 @@ + expr_list: + expr + { +- $$= new (YYTHD->mem_root) List; ++ $$= new (thd->mem_root) List; + if ($$ == NULL) + MYSQL_YYABORT; + $$->push_back($1); +@@ -8497,7 +8465,7 @@ + ident_list: + simple_ident + { +- $$= new (YYTHD->mem_root) List; ++ $$= new (thd->mem_root) List; + if ($$ == NULL) + MYSQL_YYABORT; + $$->push_back($1); +@@ -8595,7 +8563,7 @@ + { + MYSQL_YYABORT_UNLESS($1 && $3); + /* Change the current name resolution context to a local context. */ +- if (push_new_name_resolution_context(YYTHD, $1, $3)) ++ if (push_new_name_resolution_context(thd, $1, $3)) + MYSQL_YYABORT; + Select->parsing_place= IN_ON; + } +@@ -8610,7 +8578,7 @@ + { + MYSQL_YYABORT_UNLESS($1 && $3); + /* Change the current name resolution context to a local context. */ +- if (push_new_name_resolution_context(YYTHD, $1, $3)) ++ if (push_new_name_resolution_context(thd, $1, $3)) + MYSQL_YYABORT; + Select->parsing_place= IN_ON; + } +@@ -8640,7 +8608,7 @@ + { + MYSQL_YYABORT_UNLESS($1 && $5); + /* Change the current name resolution context to a local context. */ +- if (push_new_name_resolution_context(YYTHD, $1, $5)) ++ if (push_new_name_resolution_context(thd, $1, $5)) + MYSQL_YYABORT; + Select->parsing_place= IN_ON; + } +@@ -8676,7 +8644,7 @@ + { + MYSQL_YYABORT_UNLESS($1 && $5); + /* Change the current name resolution context to a local context. */ +- if (push_new_name_resolution_context(YYTHD, $1, $5)) ++ if (push_new_name_resolution_context(thd, $1, $5)) + MYSQL_YYABORT; + Select->parsing_place= IN_ON; + } +@@ -8724,7 +8692,7 @@ + } + table_ident opt_table_alias opt_key_definition + { +- if (!($$= Select->add_table_to_list(YYTHD, $2, $3, ++ if (!($$= Select->add_table_to_list(thd, $2, $3, + Select->get_table_join_options(), + Lex->lock_option, + Select->pop_index_hints()))) +@@ -8922,7 +8890,7 @@ + + opt_index_hints_list: + /* empty */ +- | { Select->alloc_index_hints(YYTHD); } index_hints_list ++ | { Select->alloc_index_hints(thd); } index_hints_list + ; + + opt_key_definition: +@@ -8931,15 +8899,15 @@ + ; + + opt_key_usage_list: +- /* empty */ { Select->add_index_hint(YYTHD, NULL, 0); } ++ /* empty */ { Select->add_index_hint(thd, NULL, 0); } + | key_usage_list {} + ; + + key_usage_element: + ident +- { Select->add_index_hint(YYTHD, $1.str, $1.length); } ++ { Select->add_index_hint(thd, $1.str, $1.length); } + | PRIMARY_SYM +- { Select->add_index_hint(YYTHD, (char *)"PRIMARY", 7); } ++ { Select->add_index_hint(thd, (char *)"PRIMARY", 7); } + ; + + key_usage_list: +@@ -8952,7 +8920,7 @@ + { + if (!($$= new List)) + MYSQL_YYABORT; +- String *s= new (YYTHD->mem_root) String((const char *) $1.str, ++ String *s= new (thd->mem_root) String((const char *) $1.str, + $1.length, + system_charset_info); + if (s == NULL) +@@ -8961,7 +8929,7 @@ + } + | using_list ',' ident + { +- String *s= new (YYTHD->mem_root) String((const char *) $3.str, ++ String *s= new (thd->mem_root) String((const char *) $3.str, + $3.length, + system_charset_info); + if (s == NULL) +@@ -9002,7 +8970,7 @@ + implementation without changing its + resolution. + */ +- WARN_DEPRECATED(yythd, VER_CELOSIA, "FRAC_SECOND", "MICROSECOND"); ++ WARN_DEPRECATED(thd, VER_CELOSIA, "FRAC_SECOND", "MICROSECOND"); + } + ; + +@@ -9086,7 +9054,6 @@ + } + | /* empty */ + { +- THD *thd= YYTHD; + Lex->escape_used= FALSE; + $$= ((thd->variables.sql_mode & MODE_NO_BACKSLASH_ESCAPES) ? + new (thd->mem_root) Item_string("", 0, &my_charset_latin1) : +@@ -9107,9 +9074,9 @@ + + group_list: + group_list ',' order_ident order_dir +- { if (add_group_to_list(YYTHD, $3,(bool) $4)) MYSQL_YYABORT; } ++ { if (add_group_to_list(thd, $3,(bool) $4)) MYSQL_YYABORT; } + | order_ident order_dir +- { if (add_group_to_list(YYTHD, $1,(bool) $2)) MYSQL_YYABORT; } ++ { if (add_group_to_list(thd, $1,(bool) $2)) MYSQL_YYABORT; } + ; + + olap_opt: +@@ -9156,7 +9123,6 @@ + alter_order_item: + simple_ident_nospvar order_dir + { +- THD *thd= YYTHD; + bool ascending= ($2 == 1) ? true : false; + if (add_order_to_list(thd, $1, ascending)) + MYSQL_YYABORT; +@@ -9209,9 +9175,9 @@ + + order_list: + order_list ',' order_ident order_dir +- { if (add_order_to_list(YYTHD, $3,(bool) $4)) MYSQL_YYABORT; } ++ { if (add_order_to_list(thd, $3,(bool) $4)) MYSQL_YYABORT; } + | order_ident order_dir +- { if (add_order_to_list(YYTHD, $1,(bool) $2)) MYSQL_YYABORT; } ++ { if (add_order_to_list(thd, $1,(bool) $2)) MYSQL_YYABORT; } + ; + + order_dir: +@@ -9271,19 +9237,19 @@ + } + | ULONGLONG_NUM + { +- $$= new (YYTHD->mem_root) Item_uint($1.str, $1.length); ++ $$= new (thd->mem_root) Item_uint($1.str, $1.length); + if ($$ == NULL) + MYSQL_YYABORT; + } + | LONG_NUM + { +- $$= new (YYTHD->mem_root) Item_uint($1.str, $1.length); ++ $$= new (thd->mem_root) Item_uint($1.str, $1.length); + if ($$ == NULL) + MYSQL_YYABORT; + } + | NUM + { +- $$= new (YYTHD->mem_root) Item_uint($1.str, $1.length); ++ $$= new (thd->mem_root) Item_uint($1.str, $1.length); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -9365,7 +9331,7 @@ + lex->proc_list.elements=0; + lex->proc_list.first=0; + lex->proc_list.next= &lex->proc_list.first; +- Item_field *item= new (YYTHD->mem_root) ++ Item_field *item= new (thd->mem_root) + Item_field(&lex->current_select->context, + NULL, NULL, $2.str); + if (item == NULL) +@@ -9390,8 +9356,7 @@ + procedure_item: + remember_name expr remember_end + { +- THD *thd= YYTHD; +- ++ + if (add_proc_to_list(thd, $2)) + MYSQL_YYABORT; + if (!$2->name) +@@ -9560,7 +9525,6 @@ + } + | DROP FUNCTION_SYM if_exists ident '.' ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_name *spname; + if ($4.str && check_db_name(&$4)) +@@ -9583,7 +9547,6 @@ + } + | DROP FUNCTION_SYM if_exists ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + LEX_STRING db= {0, 0}; + sp_name *spname; +@@ -9664,7 +9627,7 @@ + table_name: + table_ident + { +- if (!Select->add_table_to_list(YYTHD, $1, NULL, TL_OPTION_UPDATING)) ++ if (!Select->add_table_to_list(thd, $1, NULL, TL_OPTION_UPDATING)) + MYSQL_YYABORT; + } + ; +@@ -9677,7 +9640,7 @@ + table_alias_ref: + table_ident_opt_wild + { +- if (!Select->add_table_to_list(YYTHD, $1, NULL, ++ if (!Select->add_table_to_list(thd, $1, NULL, + TL_OPTION_UPDATING | TL_OPTION_ALIAS, + Lex->lock_option )) + MYSQL_YYABORT; +@@ -9868,7 +9831,7 @@ + expr { $$= $1;} + | DEFAULT + { +- $$= new (YYTHD->mem_root) Item_default_value(Lex->current_context()); ++ $$= new (thd->mem_root) Item_default_value(Lex->current_context()); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -9922,7 +9885,7 @@ + update_elem: + simple_ident_nospvar equal expr_or_default + { +- if (add_item_to_list(YYTHD, $1) || add_value_to_list(YYTHD, $3)) ++ if (add_item_to_list(thd, $1) || add_value_to_list(thd, $3)) + MYSQL_YYABORT; + } + ; +@@ -9965,7 +9928,7 @@ + single_multi: + FROM table_ident + { +- if (!Select->add_table_to_list(YYTHD, $2, NULL, TL_OPTION_UPDATING, ++ if (!Select->add_table_to_list(thd, $2, NULL, TL_OPTION_UPDATING, + Lex->lock_option)) + MYSQL_YYABORT; + } +@@ -9998,7 +9961,7 @@ + Table_ident *ti= new Table_ident($1); + if (ti == NULL) + MYSQL_YYABORT; +- if (!Select->add_table_to_list(YYTHD, ++ if (!Select->add_table_to_list(thd, + ti, + $3, + TL_OPTION_UPDATING | TL_OPTION_ALIAS, +@@ -10007,10 +9970,10 @@ + } + | ident '.' ident opt_wild opt_table_alias + { +- Table_ident *ti= new Table_ident(YYTHD, $1, $3, 0); ++ Table_ident *ti= new Table_ident(thd, $1, $3, 0); + if (ti == NULL) + MYSQL_YYABORT; +- if (!Select->add_table_to_list(YYTHD, ++ if (!Select->add_table_to_list(thd, + ti, + $5, + TL_OPTION_UPDATING | TL_OPTION_ALIAS, +@@ -10130,7 +10093,7 @@ + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_DATABASES; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_SCHEMATA)) ++ if (prepare_schema_table(thd, lex, 0, SCH_SCHEMATA)) + MYSQL_YYABORT; + } + | opt_full TABLES opt_db wild_and_where +@@ -10138,7 +10101,7 @@ + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_TABLES; + lex->select_lex.db= $3; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_TABLE_NAMES)) ++ if (prepare_schema_table(thd, lex, 0, SCH_TABLE_NAMES)) + MYSQL_YYABORT; + } + | opt_full TRIGGERS_SYM opt_db wild_and_where +@@ -10146,7 +10109,7 @@ + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_TRIGGERS; + lex->select_lex.db= $3; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_TRIGGERS)) ++ if (prepare_schema_table(thd, lex, 0, SCH_TRIGGERS)) + MYSQL_YYABORT; + } + | EVENTS_SYM opt_db wild_and_where +@@ -10154,7 +10117,7 @@ + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_EVENTS; + lex->select_lex.db= $2; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_EVENTS)) ++ if (prepare_schema_table(thd, lex, 0, SCH_EVENTS)) + MYSQL_YYABORT; + } + | TABLE_SYM STATUS_SYM opt_db wild_and_where +@@ -10162,7 +10125,7 @@ + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_TABLE_STATUS; + lex->select_lex.db= $3; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_TABLES)) ++ if (prepare_schema_table(thd, lex, 0, SCH_TABLES)) + MYSQL_YYABORT; + } + | OPEN_SYM TABLES opt_db wild_and_where +@@ -10170,22 +10133,22 @@ + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_OPEN_TABLES; + lex->select_lex.db= $3; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_OPEN_TABLES)) ++ if (prepare_schema_table(thd, lex, 0, SCH_OPEN_TABLES)) + MYSQL_YYABORT; + } + | opt_full PLUGIN_SYM + { + LEX *lex= Lex; +- WARN_DEPRECATED(yythd, "6.0", "SHOW PLUGIN", "'SHOW PLUGINS'"); ++ WARN_DEPRECATED(thd, "6.0", "SHOW PLUGIN", "'SHOW PLUGINS'"); + lex->sql_command= SQLCOM_SHOW_PLUGINS; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_PLUGINS)) ++ if (prepare_schema_table(thd, lex, 0, SCH_PLUGINS)) + MYSQL_YYABORT; + } + | PLUGINS_SYM + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_PLUGINS; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_PLUGINS)) ++ if (prepare_schema_table(thd, lex, 0, SCH_PLUGINS)) + MYSQL_YYABORT; + } + | ENGINE_SYM known_storage_engines show_engine_param +@@ -10198,7 +10161,7 @@ + lex->sql_command= SQLCOM_SHOW_FIELDS; + if ($5) + $4->change_db($5); +- if (prepare_schema_table(YYTHD, lex, $4, SCH_COLUMNS)) ++ if (prepare_schema_table(thd, lex, $4, SCH_COLUMNS)) + MYSQL_YYABORT; + } + | NEW_SYM MASTER_SYM FOR_SYM SLAVE +@@ -10233,7 +10196,7 @@ + lex->sql_command= SQLCOM_SHOW_KEYS; + if ($4) + $3->change_db($4); +- if (prepare_schema_table(YYTHD, lex, $3, SCH_STATISTICS)) ++ if (prepare_schema_table(thd, lex, $3, SCH_STATISTICS)) + MYSQL_YYABORT; + } + | COLUMN_SYM TYPES_SYM +@@ -10245,15 +10208,15 @@ + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_SHOW_STORAGE_ENGINES; +- WARN_DEPRECATED(yythd, "6.0", "SHOW TABLE TYPES", "'SHOW [STORAGE] ENGINES'"); +- if (prepare_schema_table(YYTHD, lex, 0, SCH_ENGINES)) ++ WARN_DEPRECATED(thd, "6.0", "SHOW TABLE TYPES", "'SHOW [STORAGE] ENGINES'"); ++ if (prepare_schema_table(thd, lex, 0, SCH_ENGINES)) + MYSQL_YYABORT; + } + | opt_storage ENGINES_SYM + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_SHOW_STORAGE_ENGINES; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_ENGINES)) ++ if (prepare_schema_table(thd, lex, 0, SCH_ENGINES)) + MYSQL_YYABORT; + } + | AUTHORS_SYM +@@ -10285,7 +10248,7 @@ + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_PROFILE; +- if (prepare_schema_table(YYTHD, lex, NULL, SCH_PROFILES) != 0) ++ if (prepare_schema_table(thd, lex, NULL, SCH_PROFILES) != 0) + YYABORT; + } + | opt_var_type STATUS_SYM wild_and_where +@@ -10293,7 +10256,7 @@ + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_STATUS; + lex->option_type= $1; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_STATUS)) ++ if (prepare_schema_table(thd, lex, 0, SCH_STATUS)) + MYSQL_YYABORT; + } + | INNOBASE_SYM STATUS_SYM +@@ -10301,24 +10264,24 @@ + LEX *lex= Lex; + lex->sql_command = SQLCOM_SHOW_ENGINE_STATUS; + if (!(lex->create_info.db_type= +- ha_resolve_by_legacy_type(YYTHD, DB_TYPE_INNODB))) ++ ha_resolve_by_legacy_type(thd, DB_TYPE_INNODB))) + { + my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), "InnoDB"); + MYSQL_YYABORT; + } +- WARN_DEPRECATED(yythd, "6.0", "SHOW INNODB STATUS", "'SHOW ENGINE INNODB STATUS'"); ++ WARN_DEPRECATED(thd, "6.0", "SHOW INNODB STATUS", "'SHOW ENGINE INNODB STATUS'"); + } + | MUTEX_SYM STATUS_SYM + { + LEX *lex= Lex; + lex->sql_command = SQLCOM_SHOW_ENGINE_MUTEX; + if (!(lex->create_info.db_type= +- ha_resolve_by_legacy_type(YYTHD, DB_TYPE_INNODB))) ++ ha_resolve_by_legacy_type(thd, DB_TYPE_INNODB))) + { + my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), "InnoDB"); + MYSQL_YYABORT; + } +- WARN_DEPRECATED(yythd, "6.0", "SHOW MUTEX STATUS", "'SHOW ENGINE INNODB MUTEX'"); ++ WARN_DEPRECATED(thd, "6.0", "SHOW MUTEX STATUS", "'SHOW ENGINE INNODB MUTEX'"); + } + | opt_full PROCESSLIST_SYM + { Lex->sql_command= SQLCOM_SHOW_PROCESSLIST;} +@@ -10327,21 +10290,21 @@ + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_VARIABLES; + lex->option_type= $1; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_VARIABLES)) ++ if (prepare_schema_table(thd, lex, 0, SCH_VARIABLES)) + MYSQL_YYABORT; + } + | charset wild_and_where + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_CHARSETS; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_CHARSETS)) ++ if (prepare_schema_table(thd, lex, 0, SCH_CHARSETS)) + MYSQL_YYABORT; + } + | COLLATION_SYM wild_and_where + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_COLLATIONS; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_COLLATIONS)) ++ if (prepare_schema_table(thd, lex, 0, SCH_COLLATIONS)) + MYSQL_YYABORT; + } + | GRANTS +@@ -10371,7 +10334,7 @@ + { + LEX *lex= Lex; + lex->sql_command = SQLCOM_SHOW_CREATE; +- if (!lex->select_lex.add_table_to_list(YYTHD, $3, NULL,0)) ++ if (!lex->select_lex.add_table_to_list(thd, $3, NULL,0)) + MYSQL_YYABORT; + lex->only_view= 0; + lex->create_info.storage_media= HA_SM_DEFAULT; +@@ -10380,7 +10343,7 @@ + { + LEX *lex= Lex; + lex->sql_command = SQLCOM_SHOW_CREATE; +- if (!lex->select_lex.add_table_to_list(YYTHD, $3, NULL, 0)) ++ if (!lex->select_lex.add_table_to_list(thd, $3, NULL, 0)) + MYSQL_YYABORT; + lex->only_view= 1; + } +@@ -10416,14 +10379,14 @@ + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_STATUS_PROC; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_PROCEDURES)) ++ if (prepare_schema_table(thd, lex, 0, SCH_PROCEDURES)) + MYSQL_YYABORT; + } + | FUNCTION_SYM STATUS_SYM wild_and_where + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_STATUS_FUNC; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_PROCEDURES)) ++ if (prepare_schema_table(thd, lex, 0, SCH_PROCEDURES)) + MYSQL_YYABORT; + } + | PROCEDURE CODE_SYM sp_name +@@ -10501,7 +10464,7 @@ + /* empty */ + | LIKE TEXT_STRING_sys + { +- Lex->wild= new (YYTHD->mem_root) String($2.str, $2.length, ++ Lex->wild= new (thd->mem_root) String($2.str, $2.length, + system_charset_info); + if (Lex->wild == NULL) + MYSQL_YYABORT; +@@ -10525,7 +10488,7 @@ + lex->sql_command= SQLCOM_SHOW_FIELDS; + lex->select_lex.db= 0; + lex->verbose= 0; +- if (prepare_schema_table(YYTHD, lex, $2, SCH_COLUMNS)) ++ if (prepare_schema_table(thd, lex, $2, SCH_COLUMNS)) + MYSQL_YYABORT; + } + opt_describe_column {} +@@ -10554,7 +10517,7 @@ + | text_string { Lex->wild= $1; } + | ident + { +- Lex->wild= new (YYTHD->mem_root) String((const char*) $1.str, ++ Lex->wild= new (thd->mem_root) String((const char*) $1.str, + $1.length, + system_charset_info); + if (Lex->wild == NULL) +@@ -10697,7 +10660,6 @@ + load: + LOAD DATA_SYM + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + + if (lex->sphead) +@@ -10711,7 +10673,7 @@ + | LOAD TABLE_SYM table_ident FROM MASTER_SYM + { + LEX *lex=Lex; +- WARN_DEPRECATED(yythd, "6.0", "LOAD TABLE FROM MASTER", ++ WARN_DEPRECATED(thd, "6.0", "LOAD TABLE FROM MASTER", + "MySQL Administrator (mysqldump, mysql)"); + if (lex->sphead) + { +@@ -10719,7 +10681,7 @@ + MYSQL_YYABORT; + } + lex->sql_command = SQLCOM_LOAD_MASTER_TABLE; +- if (!Select->add_table_to_list(YYTHD, $3, NULL, TL_OPTION_UPDATING)) ++ if (!Select->add_table_to_list(thd, $3, NULL, TL_OPTION_UPDATING)) + MYSQL_YYABORT; + } + ; +@@ -10739,7 +10701,7 @@ + opt_duplicate INTO TABLE_SYM table_ident + { + LEX *lex=Lex; +- if (!Select->add_table_to_list(YYTHD, $9, NULL, TL_OPTION_UPDATING, ++ if (!Select->add_table_to_list(thd, $9, NULL, TL_OPTION_UPDATING, + lex->lock_option)) + MYSQL_YYABORT; + lex->field_list.empty(); +@@ -10754,7 +10716,7 @@ + | FROM MASTER_SYM + { + Lex->sql_command = SQLCOM_LOAD_MASTER_DATA; +- WARN_DEPRECATED(yythd, "6.0", "LOAD DATA FROM MASTER", ++ WARN_DEPRECATED(thd, "6.0", "LOAD DATA FROM MASTER", + "mysqldump or future " + "BACKUP/RESTORE DATABASE facility"); + } +@@ -10872,7 +10834,7 @@ + simple_ident_nospvar {$$= $1;} + | '@' ident_or_text + { +- $$= new (YYTHD->mem_root) Item_user_var_as_out_param($2); ++ $$= new (thd->mem_root) Item_user_var_as_out_param($2); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -10889,7 +10851,6 @@ + TEXT_STRING + { + LEX_STRING tmp; +- THD *thd= YYTHD; + CHARSET_INFO *cs_con= thd->variables.collation_connection; + CHARSET_INFO *cs_cli= thd->variables.character_set_client; + uint repertoire= thd->lex->text_string_is_7bit && +@@ -10915,7 +10876,7 @@ + uint repertoire= Lex->text_string_is_7bit ? + MY_REPERTOIRE_ASCII : MY_REPERTOIRE_UNICODE30; + DBUG_ASSERT(my_charset_is_ascii_based(national_charset_info)); +- $$= new (YYTHD->mem_root) Item_string($1.str, $1.length, ++ $$= new (thd->mem_root) Item_string($1.str, $1.length, + national_charset_info, + DERIVATION_COERCIBLE, + repertoire); +@@ -10924,7 +10885,7 @@ + } + | UNDERSCORE_CHARSET TEXT_STRING + { +- Item_string *str= new (YYTHD->mem_root) Item_string($2.str, ++ Item_string *str= new (thd->mem_root) Item_string($2.str, + $2.length, $1); + if (str == NULL) + MYSQL_YYABORT; +@@ -10943,7 +10904,7 @@ + If the string has been pure ASCII so far, + check the new part. + */ +- CHARSET_INFO *cs= YYTHD->variables.collation_connection; ++ CHARSET_INFO *cs= thd->variables.collation_connection; + item->collation.repertoire|= my_string_repertoire(cs, + $2.str, + $2.length); +@@ -10954,15 +10915,15 @@ + text_string: + TEXT_STRING_literal + { +- $$= new (YYTHD->mem_root) String($1.str, ++ $$= new (thd->mem_root) String($1.str, + $1.length, +- YYTHD->variables.collation_connection); ++ thd->variables.collation_connection); + if ($$ == NULL) + MYSQL_YYABORT; + } + | HEX_NUM + { +- Item *tmp= new (YYTHD->mem_root) Item_hex_string($1.str, $1.length); ++ Item *tmp= new (thd->mem_root) Item_hex_string($1.str, $1.length); + if (tmp == NULL) + MYSQL_YYABORT; + /* +@@ -10974,7 +10935,7 @@ + } + | BIN_NUM + { +- Item *tmp= new (YYTHD->mem_root) Item_bin_string($1.str, $1.length); ++ Item *tmp= new (thd->mem_root) Item_bin_string($1.str, $1.length); + if (tmp == NULL) + MYSQL_YYABORT; + /* +@@ -10989,7 +10950,6 @@ + param_marker: + PARAM_MARKER + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= YYLIP; + Item_param *item; +@@ -11022,38 +10982,38 @@ + | NUM_literal { $$ = $1; } + | NULL_SYM + { +- $$ = new (YYTHD->mem_root) Item_null(); ++ $$ = new (thd->mem_root) Item_null(); + if ($$ == NULL) + MYSQL_YYABORT; + YYLIP->next_state= MY_LEX_OPERATOR_OR_IDENT; + } + | FALSE_SYM + { +- $$= new (YYTHD->mem_root) Item_int((char*) "FALSE",0,1); ++ $$= new (thd->mem_root) Item_int((char*) "FALSE",0,1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TRUE_SYM + { +- $$= new (YYTHD->mem_root) Item_int((char*) "TRUE",1,1); ++ $$= new (thd->mem_root) Item_int((char*) "TRUE",1,1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | HEX_NUM + { +- $$ = new (YYTHD->mem_root) Item_hex_string($1.str, $1.length); ++ $$ = new (thd->mem_root) Item_hex_string($1.str, $1.length); + if ($$ == NULL) + MYSQL_YYABORT; + } + | BIN_NUM + { +- $$= new (YYTHD->mem_root) Item_bin_string($1.str, $1.length); ++ $$= new (thd->mem_root) Item_bin_string($1.str, $1.length); + if ($$ == NULL) + MYSQL_YYABORT; + } + | UNDERSCORE_CHARSET HEX_NUM + { +- Item *tmp= new (YYTHD->mem_root) Item_hex_string($2.str, $2.length); ++ Item *tmp= new (thd->mem_root) Item_hex_string($2.str, $2.length); + if (tmp == NULL) + MYSQL_YYABORT; + /* +@@ -11064,7 +11024,7 @@ + String *str= tmp->val_str((String*) 0); + + Item_string *item_str; +- item_str= new (YYTHD->mem_root) ++ item_str= new (thd->mem_root) + Item_string(NULL, /* name will be set in select_item */ + str ? str->ptr() : "", + str ? str->length() : 0, +@@ -11082,7 +11042,7 @@ + } + | UNDERSCORE_CHARSET BIN_NUM + { +- Item *tmp= new (YYTHD->mem_root) Item_bin_string($2.str, $2.length); ++ Item *tmp= new (thd->mem_root) Item_bin_string($2.str, $2.length); + if (tmp == NULL) + MYSQL_YYABORT; + /* +@@ -11093,7 +11053,7 @@ + String *str= tmp->val_str((String*) 0); + + Item_string *item_str; +- item_str= new (YYTHD->mem_root) ++ item_str= new (thd->mem_root) + Item_string(NULL, /* name will be set in select_item */ + str ? str->ptr() : "", + str ? str->length() : 0, +@@ -11117,7 +11077,7 @@ + NUM + { + int error; +- $$= new (YYTHD->mem_root) ++ $$= new (thd->mem_root) + Item_int($1.str, + (longlong) my_strtoll10($1.str, NULL, &error), + $1.length); +@@ -11127,7 +11087,7 @@ + | LONG_NUM + { + int error; +- $$= new (YYTHD->mem_root) ++ $$= new (thd->mem_root) + Item_int($1.str, + (longlong) my_strtoll10($1.str, NULL, &error), + $1.length); +@@ -11136,23 +11096,23 @@ + } + | ULONGLONG_NUM + { +- $$= new (YYTHD->mem_root) Item_uint($1.str, $1.length); ++ $$= new (thd->mem_root) Item_uint($1.str, $1.length); + if ($$ == NULL) + MYSQL_YYABORT; + } + | DECIMAL_NUM + { +- $$= new (YYTHD->mem_root) Item_decimal($1.str, $1.length, +- YYTHD->charset()); +- if (($$ == NULL) || (YYTHD->is_error())) ++ $$= new (thd->mem_root) Item_decimal($1.str, $1.length, ++ thd->charset()); ++ if (($$ == NULL) || (thd->is_error())) + { + MYSQL_YYABORT; + } + } + | FLOAT_NUM + { +- $$= new (YYTHD->mem_root) Item_float($1.str, $1.length); +- if (($$ == NULL) || (YYTHD->is_error())) ++ $$= new (thd->mem_root) Item_float($1.str, $1.length); ++ if (($$ == NULL) || (thd->is_error())) + { + MYSQL_YYABORT; + } +@@ -11172,7 +11132,7 @@ + ident '.' '*' + { + SELECT_LEX *sel= Select; +- $$= new (YYTHD->mem_root) Item_field(Lex->current_context(), ++ $$= new (thd->mem_root) Item_field(Lex->current_context(), + NullS, $1.str, "*"); + if ($$ == NULL) + MYSQL_YYABORT; +@@ -11180,7 +11140,6 @@ + } + | ident '.' ident '.' '*' + { +- THD *thd= YYTHD; + SELECT_LEX *sel= Select; + const char* schema= thd->client_capabilities & CLIENT_NO_SCHEMA ? + NullS : $1.str; +@@ -11200,7 +11159,6 @@ + simple_ident: + ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= YYLIP; + sp_variable_t *spv; +@@ -11251,7 +11209,6 @@ + simple_ident_nospvar: + ident + { +- THD *thd= YYTHD; + SELECT_LEX *sel=Select; + if ((sel->parsing_place != IN_HAVING) || + (sel->get_in_sum_expr() > 0)) +@@ -11273,7 +11230,6 @@ + simple_ident_q: + ident '.' ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + + /* +@@ -11352,7 +11308,6 @@ + } + | '.' ident '.' ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + SELECT_LEX *sel= lex->current_select; + if (sel->no_table_names_allowed) +@@ -11377,7 +11332,6 @@ + } + | ident '.' ident '.' ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + SELECT_LEX *sel= lex->current_select; + const char* schema= (thd->client_capabilities & CLIENT_NO_SCHEMA ? +@@ -11445,7 +11399,7 @@ + } + | ident '.' ident + { +- $$= new Table_ident(YYTHD, $1,$3,0); ++ $$= new Table_ident(thd, $1,$3,0); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -11467,7 +11421,7 @@ + } + | ident '.' ident opt_wild + { +- $$= new Table_ident(YYTHD, $1,$3,0); ++ $$= new Table_ident(thd, $1,$3,0); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -11477,7 +11431,7 @@ + ident + { + LEX_STRING db={(char*) any_db,3}; +- $$= new Table_ident(YYTHD, db,$1,0); ++ $$= new Table_ident(thd, db,$1,0); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -11487,8 +11441,7 @@ + IDENT { $$= $1; } + | IDENT_QUOTED + { +- THD *thd= YYTHD; +- ++ + if (thd->charset_is_system_charset) + { + CHARSET_INFO *cs= system_charset_info; +@@ -11516,8 +11469,6 @@ + TEXT_STRING_sys: + TEXT_STRING + { +- THD *thd= YYTHD; +- + if (thd->charset_is_system_charset) + $$= $1; + else +@@ -11532,8 +11483,6 @@ + TEXT_STRING_literal: + TEXT_STRING + { +- THD *thd= YYTHD; +- + if (thd->charset_is_collation_connection) + $$= $1; + else +@@ -11548,8 +11497,6 @@ + TEXT_STRING_filesystem: + TEXT_STRING + { +- THD *thd= YYTHD; +- + if (thd->charset_is_character_set_filesystem) + $$= $1; + else +@@ -11566,7 +11513,6 @@ + IDENT_sys { $$=$1; } + | keyword + { +- THD *thd= YYTHD; + $$.str= thd->strmake($1.str, $1.length); + if ($$.str == NULL) + MYSQL_YYABORT; +@@ -11578,7 +11524,6 @@ + IDENT_sys { $$=$1; } + | keyword_sp + { +- THD *thd= YYTHD; + $$.str= thd->strmake($1.str, $1.length); + if ($$.str == NULL) + MYSQL_YYABORT; +@@ -11595,7 +11540,6 @@ + user: + ident_or_text + { +- THD *thd= YYTHD; + if (!($$=(LEX_USER*) thd->alloc(sizeof(st_lex_user)))) + MYSQL_YYABORT; + $$->user = $1; +@@ -11609,7 +11553,6 @@ + } + | ident_or_text '@' ident_or_text + { +- THD *thd= YYTHD; + if (!($$=(LEX_USER*) thd->alloc(sizeof(st_lex_user)))) + MYSQL_YYABORT; + $$->user = $1; $$->host=$3; +@@ -11628,7 +11571,7 @@ + } + | CURRENT_USER optional_braces + { +- if (!($$=(LEX_USER*) YYTHD->alloc(sizeof(st_lex_user)))) ++ if (!($$=(LEX_USER*) thd->alloc(sizeof(st_lex_user)))) + MYSQL_YYABORT; + /* + empty LEX_USER means current_user and +@@ -11991,7 +11934,6 @@ + + option_type_value: + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= YYLIP; + +@@ -12022,7 +11964,6 @@ + } + ext_option_value + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= YYLIP; + +@@ -12105,7 +12046,6 @@ + sys_option_value: + option_type internal_variable_name equal set_expr_or_default + { +- THD *thd= YYTHD; + LEX *lex= Lex; + LEX_STRING *name= &$2.base_name; + +@@ -12117,7 +12057,7 @@ + my_parse_error(ER(ER_SYNTAX_ERROR)); + MYSQL_YYABORT; + } +- if (set_trigger_new_row(YYTHD, name, $4)) ++ if (set_trigger_new_row(thd, name, $4)) + MYSQL_YYABORT; + } + else if ($2.var) +@@ -12147,7 +12087,6 @@ + } + | option_type TRANSACTION_SYM ISOLATION LEVEL_SYM isolation_types + { +- THD *thd= YYTHD; + LEX *lex=Lex; + lex->option_type= $1; + Item *item= new (thd->mem_root) Item_int((int32) $5); +@@ -12167,7 +12106,7 @@ + '@' ident_or_text equal expr + { + Item_func_set_user_var *item; +- item= new (YYTHD->mem_root) Item_func_set_user_var($2, $4); ++ item= new (thd->mem_root) Item_func_set_user_var($2, $4); + if (item == NULL) + MYSQL_YYABORT; + set_var_user *var= new set_var_user(item); +@@ -12177,7 +12116,6 @@ + } + | '@' '@' opt_var_ident_type internal_variable_name equal set_expr_or_default + { +- THD *thd= YYTHD; + struct sys_var_with_base tmp= $4; + /* Lookup if necessary: must be a system variable. */ + if (tmp.var == NULL) +@@ -12190,7 +12128,6 @@ + } + | charset old_or_new_charset_name_or_default + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + CHARSET_INFO *cs2; + cs2= $2 ? $2: global_system_variables.character_set_client; +@@ -12238,7 +12175,6 @@ + } + | PASSWORD equal text_or_password + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + LEX_USER *user; + sp_pcontext *spc= lex->spcont; +@@ -12278,7 +12214,6 @@ + internal_variable_name: + ident + { +- THD *thd= YYTHD; + sp_pcontext *spc= thd->lex->spcont; + sp_variable_t *spv; + +@@ -12337,7 +12272,7 @@ + } + else + { +- sys_var *tmp=find_sys_var(YYTHD, $3.str, $3.length); ++ sys_var *tmp=find_sys_var(thd, $3.str, $3.length); + if (!tmp) + MYSQL_YYABORT; + if (!tmp->is_struct()) +@@ -12348,7 +12283,7 @@ + } + | DEFAULT '.' ident + { +- sys_var *tmp=find_sys_var(YYTHD, $3.str, $3.length); ++ sys_var *tmp=find_sys_var(thd, $3.str, $3.length); + if (!tmp) + MYSQL_YYABORT; + if (!tmp->is_struct()) +@@ -12370,16 +12305,16 @@ + TEXT_STRING { $$=$1.str;} + | PASSWORD '(' TEXT_STRING ')' + { +- $$= $3.length ? YYTHD->variables.old_passwords ? +- Item_func_old_password::alloc(YYTHD, $3.str, $3.length) : +- Item_func_password::alloc(YYTHD, $3.str, $3.length) : ++ $$= $3.length ? thd->variables.old_passwords ? ++ Item_func_old_password::alloc(thd, $3.str, $3.length) : ++ Item_func_password::alloc(thd, $3.str, $3.length) : + $3.str; + if ($$ == NULL) + MYSQL_YYABORT; + } + | OLD_PASSWORD '(' TEXT_STRING ')' + { +- $$= $3.length ? Item_func_old_password::alloc(YYTHD, $3.str, ++ $$= $3.length ? Item_func_old_password::alloc(thd, $3.str, + $3.length) : + $3.str; + if ($$ == NULL) +@@ -12393,19 +12328,19 @@ + | DEFAULT { $$=0; } + | ON + { +- $$=new (YYTHD->mem_root) Item_string("ON", 2, system_charset_info); ++ $$=new (thd->mem_root) Item_string("ON", 2, system_charset_info); + if ($$ == NULL) + MYSQL_YYABORT; + } + | ALL + { +- $$=new (YYTHD->mem_root) Item_string("ALL", 3, system_charset_info); ++ $$=new (thd->mem_root) Item_string("ALL", 3, system_charset_info); + if ($$ == NULL) + MYSQL_YYABORT; + } + | BINARY + { +- $$=new (YYTHD->mem_root) Item_string("binary", 6, system_charset_info); ++ $$=new (thd->mem_root) Item_string("binary", 6, system_charset_info); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -12443,7 +12378,7 @@ + table_ident opt_table_alias lock_option + { + thr_lock_type lock_type= (thr_lock_type) $3; +- if (!Select->add_table_to_list(YYTHD, $1, $2, 0, lock_type)) ++ if (!Select->add_table_to_list(thd, $1, $2, 0, lock_type)) + MYSQL_YYABORT; + /* If table is to be write locked, protect from a impending GRL. */ + if (lock_type >= TL_WRITE_ALLOW_WRITE) +@@ -12514,7 +12449,7 @@ + lex->expr_allows_subselect= FALSE; + lex->sql_command = SQLCOM_HA_READ; + lex->ha_rkey_mode= HA_READ_KEY_EXACT; /* Avoid purify warnings */ +- Item *one= new (YYTHD->mem_root) Item_int((int32) 1); ++ Item *one= new (thd->mem_root) Item_int((int32) 1); + if (one == NULL) + MYSQL_YYABORT; + lex->current_select->select_limit= one; +@@ -12836,10 +12771,10 @@ + $$=$1; $1->password=$4; + if ($4.length) + { +- if (YYTHD->variables.old_passwords) ++ if (thd->variables.old_passwords) + { + char *buff= +- (char *) YYTHD->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH_323+1); ++ (char *) thd->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH_323+1); + if (buff == NULL) + MYSQL_YYABORT; + my_make_scrambled_password_323(buff, $4.str, $4.length); +@@ -12849,7 +12784,7 @@ + else + { + char *buff= +- (char *) YYTHD->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH+1); ++ (char *) thd->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH+1); + if (buff == NULL) + MYSQL_YYABORT; + my_make_scrambled_password(buff, $4.str, $4.length); +@@ -12881,7 +12816,7 @@ + column_list_id: + ident + { +- String *new_str = new (YYTHD->mem_root) String((const char*) $1.str,$1.length,system_charset_info); ++ String *new_str = new (thd->mem_root) String((const char*) $1.str,$1.length,system_charset_info); + if (new_str == NULL) + MYSQL_YYABORT; + List_iterator iter(Lex->columns); +@@ -12981,14 +12916,14 @@ + + opt_chain: + /* empty */ +- { $$= (YYTHD->variables.completion_type == 1); } ++ { $$= (thd->variables.completion_type == 1); } + | AND_SYM NO_SYM CHAIN_SYM { $$=0; } + | AND_SYM CHAIN_SYM { $$=1; } + ; + + opt_release: + /* empty */ +- { $$= (YYTHD->variables.completion_type == 2); } ++ { $$= (thd->variables.completion_type == 2); } + | RELEASE_SYM { $$=1; } + | NO_SYM RELEASE_SYM { $$=0; } + ; +@@ -13102,7 +13037,6 @@ + + union_order_or_limit: + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + DBUG_ASSERT(lex->current_select->linkage != GLOBAL_OPTIONS_TYPE); + SELECT_LEX *sel= lex->current_select; +@@ -13118,7 +13052,6 @@ + } + order_or_limit + { +- THD *thd= YYTHD; + thd->lex->current_select->no_table_names_allowed= 0; + thd->where= ""; + } +@@ -13255,14 +13188,14 @@ + from older master servers (i.e. to create non-suid trigger in this + case). + */ +- YYTHD->lex->definer= 0; ++ thd->lex->definer= 0; + } + ; + + definer: + DEFINER_SYM EQ user + { +- YYTHD->lex->definer= get_current_user(YYTHD, $3); ++ thd->lex->definer= get_current_user(thd, $3); + } + ; + +@@ -13307,7 +13240,6 @@ + view_tail: + view_suid VIEW_SYM table_ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->sql_command= SQLCOM_CREATE_VIEW; + /* first table in list is target VIEW name */ +@@ -13347,7 +13279,6 @@ + } + view_select_aux view_check_option + { +- THD *thd= YYTHD; + LEX *lex= Lex; + uint len= YYLIP->get_cpp_ptr() - lex->create_view_select.str; + void *create_view_select= thd->memdup(lex->create_view_select.str, len); +@@ -13403,7 +13334,6 @@ + EACH_SYM + ROW_SYM + { /* $15 */ +- THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= YYLIP; + sp_head *sp; +@@ -13437,8 +13367,8 @@ + sp_head *sp= lex->sphead; + + lex->sql_command= SQLCOM_CREATE_TRIGGER; +- sp->set_stmt_end(YYTHD); +- sp->restore_thd_mem_root(YYTHD); ++ sp->set_stmt_end(thd); ++ sp->restore_thd_mem_root(thd); + + if (sp->is_not_allowed_in_function("trigger")) + MYSQL_YYABORT; +@@ -13448,7 +13378,7 @@ + sp_proc_stmt alternatives are not saving/restoring LEX, so + lex->query_tables can be wiped out. + */ +- if (!lex->select_lex.add_table_to_list(YYTHD, $9, ++ if (!lex->select_lex.add_table_to_list(thd, $9, + (LEX_STRING*) 0, + TL_OPTION_UPDATING, + TL_IGNORE)) +@@ -13466,7 +13396,6 @@ + AGGREGATE_SYM remember_name FUNCTION_SYM ident + RETURNS_SYM udf_type SONAME_SYM TEXT_STRING_sys + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + if (is_native_function(thd, & $4)) + { +@@ -13484,7 +13413,6 @@ + | remember_name FUNCTION_SYM ident + RETURNS_SYM udf_type SONAME_SYM TEXT_STRING_sys + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + if (is_native_function(thd, & $3)) + { +@@ -13507,7 +13435,6 @@ + sp_name /* $3 */ + '(' /* $4 */ + { /* $5 */ +- THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= YYLIP; + sp_head *sp; +@@ -13565,7 +13492,7 @@ + MYSQL_YYABORT; + } + +- if (sp->fill_field_definition(YYTHD, lex, ++ if (sp->fill_field_definition(thd, lex, + (enum enum_field_types) $11, + &sp->m_return_field_def)) + MYSQL_YYABORT; +@@ -13574,7 +13501,6 @@ + } + sp_c_chistics /* $13 */ + { /* $14 */ +- THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= YYLIP; + +@@ -13583,7 +13509,6 @@ + } + sp_proc_stmt /* $15 */ + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + +@@ -13654,10 +13579,10 @@ + sp= new sp_head(); + if (sp == NULL) + MYSQL_YYABORT; +- sp->reset_thd_mem_root(YYTHD); ++ sp->reset_thd_mem_root(thd); + sp->init(lex); + sp->m_type= TYPE_ENUM_PROCEDURE; +- sp->init_sp_name(YYTHD, $3); ++ sp->init_sp_name(thd, $3); + + lex->sphead= sp; + } +@@ -13672,7 +13597,6 @@ + sp_pdparam_list + ')' + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + + lex->sphead->m_param_end= YYLIP->get_cpp_tok_start(); +@@ -13680,7 +13604,6 @@ + } + sp_c_chistics + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + + lex->sphead->m_chistics= &lex->sp_chistics; +@@ -13691,9 +13614,9 @@ + LEX *lex= Lex; + sp_head *sp= lex->sphead; + +- sp->set_stmt_end(YYTHD); ++ sp->set_stmt_end(thd); + lex->sql_command= SQLCOM_CREATE_PROCEDURE; +- sp->restore_thd_mem_root(YYTHD); ++ sp->restore_thd_mem_root(thd); + } + ; + +@@ -13730,21 +13653,21 @@ + text_string + { + MYSQL_YYABORT_UNLESS($1->length() <= MAXGTRIDSIZE); +- if (!(Lex->xid=(XID *)YYTHD->alloc(sizeof(XID)))) ++ if (!(Lex->xid=(XID *)thd->alloc(sizeof(XID)))) + MYSQL_YYABORT; + Lex->xid->set(1L, $1->ptr(), $1->length(), 0, 0); + } + | text_string ',' text_string + { + MYSQL_YYABORT_UNLESS($1->length() <= MAXGTRIDSIZE && $3->length() <= MAXBQUALSIZE); +- if (!(Lex->xid=(XID *)YYTHD->alloc(sizeof(XID)))) ++ if (!(Lex->xid=(XID *)thd->alloc(sizeof(XID)))) + MYSQL_YYABORT; + Lex->xid->set(1L, $1->ptr(), $1->length(), $3->ptr(), $3->length()); + } + | text_string ',' text_string ',' ulong_num + { + MYSQL_YYABORT_UNLESS($1->length() <= MAXGTRIDSIZE && $3->length() <= MAXBQUALSIZE); +- if (!(Lex->xid=(XID *)YYTHD->alloc(sizeof(XID)))) ++ if (!(Lex->xid=(XID *)thd->alloc(sizeof(XID)))) + MYSQL_YYABORT; + Lex->xid->set($5, $1->ptr(), $1->length(), $3->ptr(), $3->length()); + } diff --git a/package/oracle-mysql/0006-no-force-static-build.patch b/package/oracle-mysql/0006-no-force-static-build.patch new file mode 100644 index 00000000..8172a984 --- /dev/null +++ b/package/oracle-mysql/0006-no-force-static-build.patch @@ -0,0 +1,18 @@ +configure: do not force a static link for non-installed programs + +Otherwise, it tries to link against a static libz, which may not exist +in a shared-only system. + +Signed-off-by: "Yann E. MORIN" + +diff -durN mysql-5.1.73.orig/configure.in mysql-5.1.73/configure.in +--- mysql-5.1.73.orig/configure.in 2014-12-22 00:04:46.550508208 +0100 ++++ mysql-5.1.73/configure.in 2014-12-22 00:05:56.415307480 +0100 +@@ -562,7 +562,6 @@ + AC_MSG_ERROR([MySQL requires an ANSI C compiler (and a C++ compiler). Try gcc. See the Installation chapter in the Reference Manual.]) + fi + +-NOINST_LDFLAGS="-static" + + static_nss="" + STATIC_NSS_FLAGS="" diff --git a/package/oracle-mysql/0007-dont-install-in-mysql-directory.patch b/package/oracle-mysql/0007-dont-install-in-mysql-directory.patch new file mode 100644 index 00000000..971b9cee --- /dev/null +++ b/package/oracle-mysql/0007-dont-install-in-mysql-directory.patch @@ -0,0 +1,182 @@ +Don't install in mysql directory + +Installing libraries in a subdirectory of /usr/lib leads to no end of +trouble. It requires either setting a RUN_PATH in the ELF files linked +with it or adding the path to ld.so.conf and calling ldconfig on the +target. + +So to simplify things, put everything in /usr/lib instead of +/usr/lib/mysql + +Signed-off-by: Arnout Vandecappelle (Essensium/Mind) + +diff -Nrup mysql-5.1.73.orig/dbug/Makefile.am mysql-5.1.73/dbug/Makefile.am +--- mysql-5.1.73.orig/dbug/Makefile.am 2013-11-04 19:52:27.000000000 +0100 ++++ mysql-5.1.73/dbug/Makefile.am 2015-12-14 00:34:58.567937603 +0100 +@@ -17,7 +17,7 @@ + + INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include + LDADD = libdbug.a ../mysys/libmysys.a ../strings/libmystrings.a +-pkglib_LIBRARIES = libdbug.a ++lib_LIBRARIES = libdbug.a + noinst_HEADERS = dbug_long.h + libdbug_a_SOURCES = dbug.c sanity.c + EXTRA_DIST = CMakeLists.txt example1.c example2.c example3.c \ +diff -Nrup mysql-5.1.73.orig/libmysql/Makefile.shared mysql-5.1.73/libmysql/Makefile.shared +--- mysql-5.1.73.orig/libmysql/Makefile.shared 2013-11-04 19:52:27.000000000 +0100 ++++ mysql-5.1.73/libmysql/Makefile.shared 2015-12-14 00:34:58.567937603 +0100 +@@ -25,7 +25,7 @@ MYSQLBASEdir= $(prefix) + ## We'll use CLIENT_EXTRA_LDFLAGS for threaded and non-threaded + ## until someone complains that they need separate options. + LDADD = @CLIENT_EXTRA_LDFLAGS@ $(target) +-pkglib_LTLIBRARIES = $(target) ++lib_LTLIBRARIES = $(target) + + noinst_PROGRAMS = conf_to_src + +diff -Nrup mysql-5.1.73.orig/libmysqld/Makefile.am mysql-5.1.73/libmysqld/Makefile.am +--- mysql-5.1.73.orig/libmysqld/Makefile.am 2013-11-04 19:52:27.000000000 +0100 ++++ mysql-5.1.73/libmysqld/Makefile.am 2015-12-14 00:34:58.567937603 +0100 +@@ -38,7 +38,7 @@ INCLUDES= -I$(top_builddir)/include -I$ + @condition_dependent_plugin_includes@ + + noinst_LIBRARIES = libmysqld_int.a +-pkglib_LIBRARIES = libmysqld.a ++lib_LIBRARIES = libmysqld.a + SUBDIRS = . examples + libmysqld_sources= libmysqld.c lib_sql.cc emb_qcache.cc + libmysqlsources = errmsg.c get_password.c libmysql.c client.c pack.c \ +diff -Nrup mysql-5.1.73.orig/mysys/Makefile.am mysql-5.1.73/mysys/Makefile.am +--- mysql-5.1.73.orig/mysys/Makefile.am 2013-11-04 19:52:27.000000000 +0100 ++++ mysql-5.1.73/mysys/Makefile.am 2015-12-14 00:34:58.567937603 +0100 +@@ -18,7 +18,7 @@ MYSQLSHAREdir = $(pkgdatadir) + MYSQLBASEdir= $(prefix) + INCLUDES = @ZLIB_INCLUDES@ -I$(top_builddir)/include \ + -I$(top_srcdir)/include -I$(srcdir) +-pkglib_LIBRARIES = libmysys.a ++lib_LIBRARIES = libmysys.a + LDADD = libmysys.a $(top_builddir)/strings/libmystrings.a $(top_builddir)/dbug/libdbug.a + noinst_HEADERS = mysys_priv.h my_static.h my_handler_errors.h + libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c my_mmap.c \ +diff -Nrup mysql-5.1.73.orig/storage/csv/Makefile.am mysql-5.1.73/storage/csv/Makefile.am +--- mysql-5.1.73.orig/storage/csv/Makefile.am 2013-11-04 19:52:27.000000000 +0100 ++++ mysql-5.1.73/storage/csv/Makefile.am 2015-12-14 00:34:58.563937596 +0100 +@@ -30,7 +30,7 @@ DEFS = @DEFS@ + noinst_HEADERS = ha_tina.h transparent_file.h + + EXTRA_LTLIBRARIES = ha_csv.la +-pkglib_LTLIBRARIES = @plugin_csv_shared_target@ ++lib_LTLIBRARIES = @plugin_csv_shared_target@ + ha_csv_la_LDFLAGS = -module -rpath $(MYSQLLIBdir) + ha_csv_la_CXXFLAGS = $(AM_CXXFLAGS) -DMYSQL_PLUGIN + ha_csv_la_SOURCES = transparent_file.cc ha_tina.cc +diff -Nrup mysql-5.1.73.orig/storage/heap/Makefile.am mysql-5.1.73/storage/heap/Makefile.am +--- mysql-5.1.73.orig/storage/heap/Makefile.am 2013-11-04 19:52:27.000000000 +0100 ++++ mysql-5.1.73/storage/heap/Makefile.am 2015-12-14 00:34:58.563937596 +0100 +@@ -26,7 +26,7 @@ WRAPLIBS= + LDADD = + + DEFS = @DEFS@ +-pkglib_LIBRARIES = libheap.a ++lib_LIBRARIES = libheap.a + noinst_PROGRAMS = hp_test1 hp_test2 + noinst_LIBRARIES = libheap.a + hp_test1_LDFLAGS = @NOINST_LDFLAGS@ +diff -Nrup mysql-5.1.73.orig/storage/myisam/Makefile.am mysql-5.1.73/storage/myisam/Makefile.am +--- mysql-5.1.73.orig/storage/myisam/Makefile.am 2013-11-04 19:52:27.000000000 +0100 ++++ mysql-5.1.73/storage/myisam/Makefile.am 2015-12-14 00:34:58.563937596 +0100 +@@ -30,7 +30,7 @@ DEFS = @DEFS@ + EXTRA_DIST = mi_test_all.sh mi_test_all.res ft_stem.c CMakeLists.txt plug.in + pkgdata_DATA = mi_test_all mi_test_all.res + +-pkglib_LIBRARIES = libmyisam.a ++lib_LIBRARIES = libmyisam.a + bin_PROGRAMS = myisamchk myisamlog myisampack myisam_ftdump + myisamchk_DEPENDENCIES= $(LIBRARIES) + myisamchk_LDADD= @CLIENT_EXTRA_LDFLAGS@ libmyisam.a \ +diff -Nrup mysql-5.1.73.orig/storage/myisammrg/Makefile.am mysql-5.1.73/storage/myisammrg/Makefile.am +--- mysql-5.1.73.orig/storage/myisammrg/Makefile.am 2013-11-04 19:52:27.000000000 +0100 ++++ mysql-5.1.73/storage/myisammrg/Makefile.am 2015-12-14 00:34:58.563937596 +0100 +@@ -26,7 +26,7 @@ WRAPLIBS= + LDADD = + + DEFS = @DEFS@ +-pkglib_LIBRARIES = libmyisammrg.a ++lib_LIBRARIES = libmyisammrg.a + noinst_HEADERS = myrg_def.h ha_myisammrg.h + noinst_LIBRARIES = libmyisammrg.a + libmyisammrg_a_SOURCES = myrg_open.c myrg_extra.c myrg_info.c myrg_locking.c \ +diff -Nrup mysql-5.1.73.orig/strings/Makefile.am mysql-5.1.73/strings/Makefile.am +--- mysql-5.1.73.orig/strings/Makefile.am 2013-11-04 19:52:27.000000000 +0100 ++++ mysql-5.1.73/strings/Makefile.am 2015-12-14 00:34:58.567937603 +0100 +@@ -16,7 +16,7 @@ + # This file is public domain and comes with NO WARRANTY of any kind + + INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include +-pkglib_LIBRARIES = libmystrings.a ++lib_LIBRARIES = libmystrings.a + + # Exact one of ASSEMBLER_X + if ASSEMBLER_x86 +@@ -69,15 +69,15 @@ conf_to_src_LDFLAGS= @NOINST_LDFLAGS@ + + FLAGS=$(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) @NOINST_LDFLAGS@ + +-str_test: str_test.c $(pkglib_LIBRARIES) +- $(LINK) $(FLAGS) -DMAIN $(INCLUDES) $(srcdir)/str_test.c $(LDADD) $(pkglib_LIBRARIES) ++str_test: str_test.c $(lib_LIBRARIES) ++ $(LINK) $(FLAGS) -DMAIN $(INCLUDES) $(srcdir)/str_test.c $(LDADD) $(lib_LIBRARIES) + + uctypedump: uctypedump.c + $(LINK) $(INCLUDES) $(srcdir)/uctypedump.c + +-test_decimal$(EXEEXT): decimal.c $(pkglib_LIBRARIES) ++test_decimal$(EXEEXT): decimal.c $(lib_LIBRARIES) + $(CP) $(srcdir)/decimal.c ./test_decimal.c +- $(LINK) $(FLAGS) -DMAIN ./test_decimal.c $(LDADD) $(pkglib_LIBRARIES) ++ $(LINK) $(FLAGS) -DMAIN ./test_decimal.c $(LDADD) $(lib_LIBRARIES) + $(RM) -f ./test_decimal.c + + # Don't update the files from bitkeeper +diff -Nrup mysql-5.1.73.orig/tests/Makefile.am mysql-5.1.73/tests/Makefile.am +--- mysql-5.1.73.orig/tests/Makefile.am 2013-11-04 19:52:27.000000000 +0100 ++++ mysql-5.1.73/tests/Makefile.am 2015-12-14 00:34:58.567937603 +0100 +@@ -51,11 +51,11 @@ mysql_client_test.o: mysql_client_fw.c + + insert_test_SOURCES= insert_test.c + select_test_SOURCES= select_test.c +-insert_test_DEPENDENCIES= $(LIBRARIES) $(pkglib_LTLIBRARIES) +-select_test_DEPENDENCIES= $(LIBRARIES) $(pkglib_LTLIBRARIES) ++insert_test_DEPENDENCIES= $(LIBRARIES) $(lib_LTLIBRARIES) ++select_test_DEPENDENCIES= $(LIBRARIES) $(lib_LTLIBRARIES) + + bug25714_SOURCES= bug25714.c +-bug25714_DEPENDENCIES= $(LIBRARIES) $(pkglib_LTLIBRARIES) ++bug25714_DEPENDENCIES= $(LIBRARIES) $(lib_LTLIBRARIES) + + # Fix for mit-threads + DEFS = -DMYSQL_CLIENT_NO_THREADS +diff -Nrup mysql-5.1.73.orig/vio/Makefile.am mysql-5.1.73/vio/Makefile.am +--- mysql-5.1.73.orig/vio/Makefile.am 2013-11-04 19:52:27.000000000 +0100 ++++ mysql-5.1.73/vio/Makefile.am 2015-12-14 00:34:58.567937603 +0100 +@@ -16,7 +16,7 @@ + INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \ + $(openssl_includes) + LDADD = @CLIENT_EXTRA_LDFLAGS@ $(openssl_libs) $(yassl_libs) +-pkglib_LIBRARIES = libvio.a ++lib_LIBRARIES = libvio.a + + noinst_HEADERS = vio_priv.h + +diff -Nrup mysql-5.1.73.orig/zlib/Makefile.am mysql-5.1.73/zlib/Makefile.am +--- mysql-5.1.73.orig/zlib/Makefile.am 2013-11-04 19:52:27.000000000 +0100 ++++ mysql-5.1.73/zlib/Makefile.am 2015-12-14 00:34:58.567937603 +0100 +@@ -19,7 +19,7 @@ INCLUDES= -I$(top_builddir)/include -I$ + + LIBS= $(NON_THREADED_LIBS) + +-pkglib_LTLIBRARIES = libz.la ++lib_LTLIBRARIES = libz.la + noinst_LTLIBRARIES = libzlt.la + + libz_la_LDFLAGS = -static diff --git a/package/oracle-mysql/0008-fix-type-conversion.patch b/package/oracle-mysql/0008-fix-type-conversion.patch new file mode 100644 index 00000000..65babf4f --- /dev/null +++ b/package/oracle-mysql/0008-fix-type-conversion.patch @@ -0,0 +1,22 @@ +Fix type conversion + +Fixes the following build error with gcc 6.x: + +protocol.cc:27:40: error: narrowing conversion of ''\37777777776'' from 'char' to 'uchar {aka unsigned char}' inside { } [-Wnarrowing] + static uchar eof_buff[1]= { (char) 254 }; /* Marker for end of fields */ + +Signed-off-by: Thomas Petazzoni + +Index: b/server-tools/instance-manager/protocol.cc +=================================================================== +--- a/server-tools/instance-manager/protocol.cc ++++ b/server-tools/instance-manager/protocol.cc +@@ -24,7 +24,7 @@ + #include + + +-static uchar eof_buff[1]= { (char) 254 }; /* Marker for end of fields */ ++static uchar eof_buff[1]= { (uchar) 254 }; /* Marker for end of fields */ + static const char ERROR_PACKET_CODE= (char) 255; + + diff --git a/package/oracle-mysql/0009-gcc7.patch b/package/oracle-mysql/0009-gcc7.patch new file mode 100644 index 00000000..321112d6 --- /dev/null +++ b/package/oracle-mysql/0009-gcc7.patch @@ -0,0 +1,45 @@ +Fix gcc7 compile + +mysql.cc: In function 'void build_completion_hash(bool, bool)': +mysql.cc:2687:37: error: invalid conversion from 'char' to 'char*' [-fpermissive] + field_names[i][num_fields*2]= '\0'; + ^~~~ +Patch was partly backported from upstream commit: +https://github.com/mysql/mysql-server/commit/ae21683d980d5fe9e39bd0193827ea3604256eb9 + +Signed-off-by: Bernd Kuhls +[Thomas: add more gcc 7.x fixes in instance_map.cc.] +Signed-off-by: Thomas Petazzoni + +Index: b/client/mysql.cc +=================================================================== +--- a/client/mysql.cc ++++ b/client/mysql.cc +@@ -2684,7 +2684,7 @@ + mysql_free_result(fields); + break; + } +- field_names[i][num_fields*2]= '\0'; ++ field_names[i][num_fields*2]= NULL; + j=0; + while ((sql_field=mysql_fetch_field(fields))) + { +Index: b/server-tools/instance-manager/instance_map.cc +=================================================================== +--- a/server-tools/instance-manager/instance_map.cc ++++ b/server-tools/instance-manager/instance_map.cc +@@ -526,12 +526,12 @@ + Options::Main::config_file); + + argv_options[1]= defaults_file_arg; +- argv_options[2]= '\0'; ++ argv_options[2]= NULL; + + argc= 2; + } + else +- argv_options[1]= '\0'; ++ argv_options[1]= NULL; + + /* + If the routine failed, we'll simply fallback to defaults in diff --git a/package/oracle-mysql/0010-fix-build-without-zlib.patch b/package/oracle-mysql/0010-fix-build-without-zlib.patch new file mode 100644 index 00000000..b6e64e6b --- /dev/null +++ b/package/oracle-mysql/0010-fix-build-without-zlib.patch @@ -0,0 +1,52 @@ +Fix build without zlib + +Don't include unconditionally zlib.h, and compile out code that +requires zlib support. + +Signed-off-by: Fabrice Fontaine + +diff -durN mysql-5.1.73.orig/mysys/checksum.c mysql-5.1.73/mysys/checksum.c +--- mysql-5.1.73.orig/mysys/checksum.c 2020-07-14 17:34:38.212304432 +0200 ++++ mysql-5.1.73/mysys/checksum.c 2020-07-14 18:06:45.076342493 +0200 +@@ -16,7 +16,9 @@ + + #include + #include ++#ifdef HAVE_COMPRESS + #include ++#endif + + /* + Calculate a long checksum for a memoryblock. +diff -durN mysql-5.1.73.orig/sql/item_strfunc.cc mysql-5.1.73/sql/item_strfunc.cc +--- mysql-5.1.73.orig/sql/item_strfunc.cc 2020-07-14 17:34:38.160304431 +0200 ++++ mysql-5.1.73/sql/item_strfunc.cc 2020-07-14 18:04:36.956339962 +0200 +@@ -35,7 +35,9 @@ + #include "my_md5.h" + #include "sha1.h" + #include "my_aes.h" ++#ifdef HAVE_COMPRESS + #include ++#endif + C_MODE_START + #include "../mysys/my_static.h" // For soundex_map + C_MODE_END +diff -durN mysql-5.1.73.orig/sql/sql_table.cc mysql-5.1.73/sql/sql_table.cc +--- mysql-5.1.73.orig/sql/sql_table.cc 2020-07-14 17:34:38.156304431 +0200 ++++ mysql-5.1.73/sql/sql_table.cc 2020-07-14 18:14:48.628352044 +0200 +@@ -1681,6 +1681,7 @@ + goto end; + } + } ++#ifdef HAVE_COMPRESS + if (flags & WFRM_PACK_FRM) + { + /* +@@ -1702,6 +1703,7 @@ + } + error= my_delete(shadow_frm_name, MYF(MY_WME)); + } ++#endif + if (flags & WFRM_INSTALL_SHADOW) + { + #ifdef WITH_PARTITION_STORAGE_ENGINE diff --git a/package/oracle-mysql/S97mysqld b/package/oracle-mysql/S97mysqld new file mode 100644 index 00000000..110ca2cd --- /dev/null +++ b/package/oracle-mysql/S97mysqld @@ -0,0 +1,39 @@ +#!/bin/sh + +MYSQL_DIR="/var/mysql" +MYSQL_USER="mysql" + +[ -r /etc/default/mysql ] && . /etc/default/mysql + +case "$1" in + start) + if [ ! -d $MYSQL_DIR/mysql ] ; then + echo "Creating MySQL system tables..." + mysql_install_db --user=$MYSQL_USER --ldata=$MYSQL_DIR + fi + + # mysqld runs as user mysql, but /run is only writable by root + # so create a subdirectory for mysql. + install -d -o mysql -g root -m 0755 /run/mysql + + # We don't use start-stop-daemon because mysqld has + # its own wrapper script. + printf "Starting mysql..." + /usr/bin/mysqld_safe --pid-file=/run/mysql/mysqld.pid & + echo "done." + ;; + stop) + printf "Stopping mysql..." + if test -f /run/mysql/mysqld.pid ; then + kill `cat /run/mysql/mysqld.pid` + fi + echo "done." + ;; + restart) + $0 stop + $0 start + ;; + *) + echo "Usage: /etc/init.d/mysqld {start|stop|restart}" + ;; +esac diff --git a/package/oracle-mysql/mysqld.service b/package/oracle-mysql/mysqld.service new file mode 100644 index 00000000..c9e5e42f --- /dev/null +++ b/package/oracle-mysql/mysqld.service @@ -0,0 +1,13 @@ +[Unit] +Description=MySQL database server + +[Service] +ExecStartPre=/bin/sh -c 'test -d /var/mysql/mysql || mysql_install_db --user=mysql --ldata=/var/mysql' +ExecStart=/usr/bin/mysqld_safe +Restart=always +User=mysql +RuntimeDirectory=mysql +RuntimeDirectoryMode=0755 + +[Install] +WantedBy=multi-user.target diff --git a/package/oracle-mysql/oracle-mysql.hash b/package/oracle-mysql/oracle-mysql.hash new file mode 100644 index 00000000..9d1c8685 --- /dev/null +++ b/package/oracle-mysql/oracle-mysql.hash @@ -0,0 +1,6 @@ +# From https://downloads.mariadb.com/archives/mysql-5.1/mysql-5.1.73.tar.gz.md5 +md5 887f869bcc757957067b9198f707f32f mysql-5.1.73.tar.gz +# Locally computed +sha256 05ebe21305408b24407d14b77607a3e5ffa3c300e03f1359d3066f301989dcb5 mysql-5.1.73.tar.gz +sha256 cbf0dbf56528a629f4358a1339f981202f1a9a0d9542c092b03f486064ced2db README +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/oracle-mysql/oracle-mysql.mk b/package/oracle-mysql/oracle-mysql.mk new file mode 100644 index 00000000..ccfa40cf --- /dev/null +++ b/package/oracle-mysql/oracle-mysql.mk @@ -0,0 +1,136 @@ +################################################################################ +# +# oracle-mysql +# +################################################################################ + +ORACLE_MYSQL_VERSION_MAJOR = 5.1 +ORACLE_MYSQL_VERSION = $(ORACLE_MYSQL_VERSION_MAJOR).73 +ORACLE_MYSQL_SOURCE = mysql-$(ORACLE_MYSQL_VERSION).tar.gz +ORACLE_MYSQL_SITE = http://dev.mysql.com/get/Downloads/MySQL-$(ORACLE_MYSQL_VERSION_MAJOR) +ORACLE_MYSQL_INSTALL_STAGING = YES +ORACLE_MYSQL_DEPENDENCIES = ncurses +ORACLE_MYSQL_AUTORECONF = YES +ORACLE_MYSQL_LICENSE = GPL-2.0 +ORACLE_MYSQL_LICENSE_FILES = README COPYING +ORACLE_MYSQL_PROVIDES = mysql + +# Unix socket. This variable can also be consulted by other buildroot packages +MYSQL_SOCKET = /run/mysql/mysql.sock + +ORACLE_MYSQL_CONF_ENV = \ + ac_cv_sys_restartable_syscalls=yes \ + ac_cv_path_PS=/bin/ps \ + ac_cv_path_HOSTNAME=/bin/hostname \ + ac_cv_FIND_PROC="/bin/ps p \$\$PID | grep -v grep | grep mysqld > /dev/null" \ + ac_cv_have_decl_HAVE_IB_ATOMIC_PTHREAD_T_GCC=yes \ + ac_cv_have_decl_HAVE_IB_ATOMIC_PTHREAD_T_SOLARIS=no \ + ac_cv_have_decl_HAVE_IB_GCC_ATOMIC_BUILTINS=yes \ + mysql_cv_new_rl_interface=yes + +ORACLE_MYSQL_CONF_OPTS = \ + --without-ndb-binlog \ + --without-docs \ + --without-man \ + --without-libedit \ + --with-readline \ + --with-low-memory \ + --enable-thread-safe-client \ + --with-unix-socket-path=$(MYSQL_SOCKET) \ + --disable-mysql-maintainer-mode + +# host-oracle-mysql only installs what is needed to build mysql, i.e. the +# gen_lex_hash tool, and it only builds the parts that are needed to +# create this tool +HOST_ORACLE_MYSQL_DEPENDENCIES = host-zlib host-ncurses + +HOST_ORACLE_MYSQL_CONF_OPTS = \ + --with-embedded-server \ + --disable-mysql-maintainer-mode + +define HOST_ORACLE_MYSQL_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D)/include my_config.h + $(HOST_MAKE_ENV) $(MAKE) -C $(@D)/mysys libmysys.a + $(HOST_MAKE_ENV) $(MAKE) -C $(@D)/strings libmystrings.a + $(HOST_MAKE_ENV) $(MAKE) -C $(@D)/vio libvio.a + $(HOST_MAKE_ENV) $(MAKE) -C $(@D)/dbug libdbug.a + $(HOST_MAKE_ENV) $(MAKE) -C $(@D)/regex libregex.a + $(HOST_MAKE_ENV) $(MAKE) -C $(@D)/sql gen_lex_hash +endef + +define HOST_ORACLE_MYSQL_INSTALL_CMDS + $(INSTALL) -m 0755 $(@D)/sql/gen_lex_hash $(HOST_DIR)/bin/ +endef + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +ORACLE_MYSQL_DEPENDENCIES += openssl +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +ORACLE_MYSQL_DEPENDENCIES += zlib +ORACLE_MYSQL_CONF_OPTS += --with-zlib-dir=$(STAGING_DIR)/usr +else +ORACLE_MYSQL_CONF_OPTS += --without-zlib-dir +endif + +ifeq ($(BR2_PACKAGE_ORACLE_MYSQL_SERVER),y) +ORACLE_MYSQL_DEPENDENCIES += host-oracle-mysql host-bison + +ORACLE_MYSQL_CONF_OPTS += \ + --localstatedir=/var/mysql \ + --with-atomic-ops=up \ + --with-embedded-server \ + --without-query-cache \ + --without-plugin-partition \ + --without-plugin-daemon_example \ + --without-plugin-ftexample \ + --without-plugin-archive \ + --without-plugin-blackhole \ + --without-plugin-example \ + --without-plugin-federated \ + --without-plugin-ibmdb2i \ + --without-plugin-innobase \ + --without-plugin-innodb_plugin \ + --without-plugin-ndbcluster + +# Debugging is only available for the server, so no need for +# this if-block outside of the server if-block +ifeq ($(BR2_ENABLE_DEBUG),y) +ORACLE_MYSQL_CONF_OPTS += --with-debug=full +else +ORACLE_MYSQL_CONF_OPTS += --without-debug +endif + +define ORACLE_MYSQL_USERS + mysql -1 nobody -1 * /var/mysql - - MySQL daemon +endef + +define ORACLE_MYSQL_ADD_FOLDER + $(INSTALL) -d $(TARGET_DIR)/var/mysql +endef + +ORACLE_MYSQL_POST_INSTALL_TARGET_HOOKS += ORACLE_MYSQL_ADD_FOLDER + +define ORACLE_MYSQL_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 $(ORACLE_MYSQL_PKGDIR)/S97mysqld \ + $(TARGET_DIR)/etc/init.d/S97mysqld +endef + +define ORACLE_MYSQL_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 $(ORACLE_MYSQL_PKGDIR)/mysqld.service \ + $(TARGET_DIR)/usr/lib/systemd/system/mysqld.service +endef + +else +ORACLE_MYSQL_CONF_OPTS += \ + --without-server +endif + +define ORACLE_MYSQL_REMOVE_TEST_PROGS + rm -rf $(TARGET_DIR)/usr/mysql-test $(TARGET_DIR)/usr/sql-bench +endef + +ORACLE_MYSQL_POST_INSTALL_TARGET_HOOKS += ORACLE_MYSQL_REMOVE_TEST_PROGS + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/orbit/Config.in b/package/orbit/Config.in new file mode 100644 index 00000000..7b6e9a43 --- /dev/null +++ b/package/orbit/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_ORBIT + bool "orbit" + depends on BR2_PACKAGE_LUA_5_1 || BR2_PACKAGE_LUAJIT + select BR2_PACKAGE_LPEG # runtime + select BR2_PACKAGE_LUAFILESYSTEM # runtime + select BR2_PACKAGE_WSAPI_XAVANTE # runtime + help + An MVC web framework for Lua. The design is inspired by + lightweight Ruby frameworks such as Camping + + http://keplerproject.github.com/orbit + +comment "orbit needs a Lua 5.1 interpreter" + depends on !BR2_PACKAGE_LUA_5_1 + depends on !BR2_PACKAGE_LUAJIT diff --git a/package/orbit/orbit.hash b/package/orbit/orbit.hash new file mode 100644 index 00000000..eb427b63 --- /dev/null +++ b/package/orbit/orbit.hash @@ -0,0 +1,4 @@ +# computed by luarocks/buildroot +sha256 91e3c514d5b86918db83666c8889635bb2d50c71d1ab3aeb69c6469c9424089b orbit-2.2.4-1.src.rock +sha256 dd7d37caed0f4ee994e9e64ea4ab292dce549bb609412c84fc47ed079275ae98 orbit/doc/us/license.html +sha256 140134369c1f041abf7d8cd39a5b0c42f8b5e827695ce7c1ef5ca8f0911a0246 orbit/doc/us/license.md diff --git a/package/orbit/orbit.mk b/package/orbit/orbit.mk new file mode 100644 index 00000000..5cf7ac64 --- /dev/null +++ b/package/orbit/orbit.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# orbit +# +################################################################################ + +ORBIT_VERSION = 2.2.4-1 +ORBIT_SUBDIR = orbit +ORBIT_LICENSE = MIT +ORBIT_LICENSE_FILES = \ + $(ORBIT_SUBDIR)/doc/us/license.html \ + $(ORBIT_SUBDIR)/doc/us/license.md + +$(eval $(luarocks-package)) diff --git a/package/orc/0001-orc-orccpu-powerpc.c-fix-build-with-kernel-4.11.patch b/package/orc/0001-orc-orccpu-powerpc.c-fix-build-with-kernel-4.11.patch new file mode 100644 index 00000000..0a4e7010 --- /dev/null +++ b/package/orc/0001-orc-orccpu-powerpc.c-fix-build-with-kernel-4.11.patch @@ -0,0 +1,70 @@ +From a45f6d49ec090ad94333c0865c378d2d96ab2af4 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 15 Feb 2021 20:17:43 +0100 +Subject: [PATCH] orc/orccpu-powerpc.c: fix build with kernel < 4.11 + +Build with powerpc and kernel < 4.11 is broken since version 0.4.30 and +https://gitlab.freedesktop.org/gstreamer/orc/-/commit/a999325abea6a5549d60d99ddeb0271d2aa00235: + +FAILED: orc/liborc-0.4.so.0.32.0.p/orccpu-powerpc.c.o +/home/giuliobenetti/autobuild/run/instance-3/output-1/host/bin/powerpc-linux-gcc -Iorc/liborc-0.4.so.0.32.0.p -Iorc -I../orc -I. -I.. -fdiagnostics-color=always -pipe -Wall -Winvalid-pch -std=gnu99 -O3 -DHAVE_CONFIG_H -fvisibility=hidden -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -fPIC -pthread -DORC_ENABLE_UNSTABLE_API -D_GNU_SOURCE -DBUILDING_ORC -MD -MQ orc/liborc-0.4.so.0.32.0.p/orccpu-powerpc.c.o -MF orc/liborc-0.4.so.0.32.0.p/orccpu-powerpc.c.o.d -o orc/liborc-0.4.so.0.32.0.p/orccpu-powerpc.c.o -c ../orc/orccpu-powerpc.c +../orc/orccpu-powerpc.c: In function 'orc_check_powerpc_proc_auxv': +../orc/orccpu-powerpc.c:164:21: error: 'AT_L1D_CACHESIZE' undeclared (first use in this function); did you mean 'AT_DCACHEBSIZE'? + 164 | if (buf[i] == AT_L1D_CACHESIZE) { + | ^~~~~~~~~~~~~~~~ + | AT_DCACHEBSIZE +../orc/orccpu-powerpc.c:164:21: note: each undeclared identifier is reported only once for each function it appears in +../orc/orccpu-powerpc.c:168:21: error: 'AT_L2_CACHESIZE' undeclared (first use in this function); did you mean 'AT_ICACHEBSIZE'? + 168 | if (buf[i] == AT_L2_CACHESIZE) { + | ^~~~~~~~~~~~~~~ + | AT_ICACHEBSIZE +../orc/orccpu-powerpc.c:172:21: error: 'AT_L3_CACHESIZE' undeclared (first use in this function); did you mean 'AT_ICACHEBSIZE'? + 172 | if (buf[i] == AT_L3_CACHESIZE) { + | ^~~~~~~~~~~~~~~ + | AT_ICACHEBSIZE + +Indeed, AT_{L1D,L2,L3}_CACHESIZE is only defined since kernel 4.11 and +https://github.com/torvalds/linux/commit/98a5f361b8625c6f4841d6ba013bbf0e80d08147 + +Fixes: + - http://autobuild.buildroot.org/results/0821e96cba3e455edd47b87485501d892fc7ac6a + +Signed-off-by: Fabrice Fontaine +[Upstream status: +https://gitlab.freedesktop.org/gstreamer/orc/-/merge_requests/56] +--- + orc/orccpu-powerpc.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/orc/orccpu-powerpc.c b/orc/orccpu-powerpc.c +index 6796f17..340cf05 100644 +--- a/orc/orccpu-powerpc.c ++++ b/orc/orccpu-powerpc.c +@@ -161,18 +161,24 @@ orc_check_powerpc_proc_auxv (void) + _orc_cpu_name = (char*)buf[i + 1]; + found++; + } ++#ifdef AT_L1D_CACHESIZE + if (buf[i] == AT_L1D_CACHESIZE) { + _orc_data_cache_size_level1 = buf[i + 1]; + found++; + } ++#endif ++#ifdef AT_L2_CACHESIZE + if (buf[i] == AT_L2_CACHESIZE) { + _orc_data_cache_size_level2 = buf[i + 1]; + found++; + } ++#endif ++#ifdef AT_L3_CACHESIZE + if (buf[i] == AT_L3_CACHESIZE) { + _orc_data_cache_size_level3 = buf[i + 1]; + found++; + } ++#endif + if (found == 6) + break; + } +-- +2.30.0 + diff --git a/package/orc/Config.in b/package/orc/Config.in new file mode 100644 index 00000000..90f2b326 --- /dev/null +++ b/package/orc/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_ORC + bool "orc" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Orc is a library and set of tools for compiling and executing + very simple programs that operate on arrays of data. + + https://gstreamer.freedesktop.org/projects/orc.html + +comment "orc needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/orc/orc.hash b/package/orc/orc.hash new file mode 100644 index 00000000..f48c2932 --- /dev/null +++ b/package/orc/orc.hash @@ -0,0 +1,5 @@ +# From https://gstreamer.freedesktop.org/data/src/orc/orc-0.4.32.tar.xz.sha256sum +sha256 a66e3d8f2b7e65178d786a01ef61f2a0a0b4d0b8370de7ce134ba73da4af18f0 orc-0.4.32.tar.xz + +# Locally calculated +sha256 4f5dabb1b44bb6fc5cd53820b1f103147ad61b395a57903991325bd1b85d97bf COPYING diff --git a/package/orc/orc.mk b/package/orc/orc.mk new file mode 100644 index 00000000..a93a4f87 --- /dev/null +++ b/package/orc/orc.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# orc +# +################################################################################ + +ORC_VERSION = 0.4.32 +ORC_SOURCE = orc-$(ORC_VERSION).tar.xz +ORC_SITE = http://gstreamer.freedesktop.org/data/src/orc +ORC_LICENSE = BSD-2-Clause, BSD-3-Clause +ORC_LICENSE_FILES = COPYING +ORC_INSTALL_STAGING = YES +ORC_DEPENDENCIES = host-orc +ORC_CONF_OPTS = \ + -Dbenchmarks=disabled \ + -Dexamples=disabled \ + -Dgtk_doc=disabled \ + -Dorc-test=disabled \ + -Dtests=disabled \ + -Dtools=disabled + +$(eval $(meson-package)) +$(eval $(host-meson-package)) diff --git a/package/ortp/Config.in b/package/ortp/Config.in new file mode 100644 index 00000000..e296e82f --- /dev/null +++ b/package/ortp/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_ORTP + bool "oRTP" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # bctoolbox + select BR2_PACKAGE_BCTOOLBOX + help + oRTP, a Real-time Transport Protocol (RTP,RFC3550) library + + https://www.linphone.org/technical-corner/ortp + +comment "ortp needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS + +comment "ortp needs a toolchain not affected by GCC bug 64735" + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 diff --git a/package/ortp/ortp.hash b/package/ortp/ortp.hash new file mode 100644 index 00000000..7853c631 --- /dev/null +++ b/package/ortp/ortp.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 9b1d43f676a35920e2837abc0eb4d600d4d3e47d2621fa3b0897777cf587ee8d ortp-4.4.8.tar.gz +sha256 1b3782ccad7b8614100cda30d3faf42fc39f2e97932908c543005053b654ca68 LICENSE.txt diff --git a/package/ortp/ortp.mk b/package/ortp/ortp.mk new file mode 100644 index 00000000..67bef9ae --- /dev/null +++ b/package/ortp/ortp.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# ortp +# +################################################################################ + +ORTP_VERSION = 4.4.8 +ORTP_SITE = https://gitlab.linphone.org/BC/public/ortp/-/archive/$(ORTP_VERSION) +ORTP_LICENSE = GPL-3.0+ +ORTP_LICENSE_FILES = LICENSE.txt +ORTP_INSTALL_STAGING = YES +ORTP_DEPENDENCIES = bctoolbox +ORTP_CONF_OPTS = \ + -DENABLE_DOC=OFF \ + -DENABLE_STRICT=OFF + +ifeq ($(BR2_STATIC_LIBS),y) +ORTP_CONF_OPTS += -DENABLE_STATIC=ON -DENABLE_SHARED=OFF +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +ORTP_CONF_OPTS += -DENABLE_STATIC=ON -DENABLE_SHARED=ON +else ifeq ($(BR2_SHARED_LIBS),y) +ORTP_CONF_OPTS += -DENABLE_STATIC=OFF -DENABLE_SHARED=ON +endif + +$(eval $(cmake-package)) diff --git a/package/owfs/0001-Fix-compilation-with-GCC10.patch b/package/owfs/0001-Fix-compilation-with-GCC10.patch new file mode 100644 index 00000000..49b703ee --- /dev/null +++ b/package/owfs/0001-Fix-compilation-with-GCC10.patch @@ -0,0 +1,41 @@ +From 43a4bc6b750c37f585d03b14941f3633ed5348d8 Mon Sep 17 00:00:00 2001 +From: "Azamat H. Hackimov" +Date: Tue, 9 Jun 2020 11:30:38 +0300 +Subject: [PATCH] Fix compilation with GCC10 + +Fixed compilation with -fno-common, which enabled in GCC 10 by default. +See https://bugs.gentoo.org/707438. +[Retrieved from: +https://github.com/owfs/owfs/commit/43a4bc6b750c37f585d03b14941f3633ed5348d8] +Signed-off-by: Fabrice Fontaine +--- + module/owserver/src/c/owserver.c | 2 ++ + module/owserver/src/include/owserver.h | 2 +- + 2 files changed, 3 insertions(+), 1 deletion(-) + +diff --git a/module/owserver/src/c/owserver.c b/module/owserver/src/c/owserver.c +index db29988e..2ed29161 100644 +--- a/module/owserver/src/c/owserver.c ++++ b/module/owserver/src/c/owserver.c +@@ -36,6 +36,8 @@ + + #include "owserver.h" + ++pthread_mutex_t persistence_mutex ; ++ + /* --- Prototypes ------------ */ + static void SetupAntiloop(int argc, char **argv); + +diff --git a/module/owserver/src/include/owserver.h b/module/owserver/src/include/owserver.h +index 8be582f0..a257ed02 100644 +--- a/module/owserver/src/include/owserver.h ++++ b/module/owserver/src/include/owserver.h +@@ -18,7 +18,7 @@ + #include "ow.h" + #include "ow_connection.h" + +-pthread_mutex_t persistence_mutex ; ++extern pthread_mutex_t persistence_mutex ; + #define PERSISTENCELOCK _MUTEX_LOCK( persistence_mutex ) ; + #define PERSISTENCEUNLOCK _MUTEX_UNLOCK( persistence_mutex ) ; + diff --git a/package/owfs/Config.in b/package/owfs/Config.in new file mode 100644 index 00000000..802d1e46 --- /dev/null +++ b/package/owfs/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_OWFS + bool "owfs" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + OWFS is an easy way to use the powerful 1-wire system of + Dallas/Maxim. + + OWFS is a simple and flexible program to monitor and control + the physical environment. You can write scripts to read + temperature, flash lights, write to an LCD, log and graph, + etc. + + http://owfs.org/ + +comment "owfs needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/owfs/S55owserver b/package/owfs/S55owserver new file mode 100644 index 00000000..b8da768e --- /dev/null +++ b/package/owfs/S55owserver @@ -0,0 +1,31 @@ +NAME="owserver" +DAEMON="/usr/bin/${NAME}" +PID_F="/run/${NAME}.pid" + +OWSERVER_ARGS= +[ -r /etc/default/${NAME} ] && . /etc/default/${NAME} + +case "$1" in +start) + printf "Starting ${NAME}: " + if [ -z "${OWSERVER_ARGS}" ]; then + echo "OWSERVER_ARGS must be set in defaults file" 1>&2 + exit 1 + fi + start-stop-daemon -S -x ${DAEMON} -- \ + --pid_file ${PID_F} ${OWSERVER_ARGS} + [ $? -eq 0 ] && echo "OK" || echo "FAIL" + ;; +stop) + printf "Stopping ${NAME}: " + start-stop-daemon -K -p ${PID_F} + [ $? -eq 0 ] && echo "OK" || echo "FAIL" + ;; +restart|reload) + $0 stop + $0 start + ;; +*) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/owfs/S60owfs b/package/owfs/S60owfs new file mode 100644 index 00000000..feed676f --- /dev/null +++ b/package/owfs/S60owfs @@ -0,0 +1,33 @@ +NAME="owfs" +DAEMON="/usr/bin/${NAME}" +PID_F="/run/${NAME}.pid" +OWFS_MOUNTPOINT="/dev/1wire" +OWFS_DEVICES="-s localhost:4304" +OWFS_ARGS="" + +[ -r /etc/default/${NAME} ] && . /etc/default/${NAME} + +case "$1" in +start) + printf "Starting ${NAME}: " + # Fuse may be in a module, so try to load it + modprobe -q fuse && printf "[fuse] " + mkdir -p ${OWFS_MOUNTPOINT} + start-stop-daemon -S -x ${DAEMON} -- \ + --pid_file ${PID_F} -m ${OWFS_MOUNTPOINT} ${OWFS_DEVICES} \ + ${OWFS_ARGS} + [ $? -eq 0 ] && echo "OK" || echo "FAIL" + ;; +stop) + printf "Stopping ${NAME}: " + start-stop-daemon -K -p ${PID_F} + [ $? -eq 0 ] && echo "OK" || echo "FAIL" + ;; +restart|reload) + $0 stop + $0 start + ;; +*) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/owfs/owfs.hash b/package/owfs/owfs.hash new file mode 100644 index 00000000..4c6b15a4 --- /dev/null +++ b/package/owfs/owfs.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 b8d33eba57d4a2f6c8a11ff23f233e3248bd75a42c8219b058a888846edd8717 owfs-3.2p3.tar.gz +sha256 1f0527ab035eefb5197c68633d06f50f5077c719d82a99344702ceaca29150b9 COPYING +sha256 8a6601b893d5784d931b2ede64a406fac463acfbb7014914e27de4d6e68457c3 COPYING.LIB diff --git a/package/owfs/owfs.mk b/package/owfs/owfs.mk new file mode 100644 index 00000000..ffc0b309 --- /dev/null +++ b/package/owfs/owfs.mk @@ -0,0 +1,117 @@ +################################################################################ +# +# owfs +# +################################################################################ + +OWFS_VERSION = 3.2p3 +OWFS_SITE = https://github.com/owfs/owfs/releases/download/v$(OWFS_VERSION) +OWFS_DEPENDENCIES = host-pkgconf +OWFS_CONF_OPTS = --disable-owperl --without-perl5 --disable-owtcl --without-tcl + +# owtcl license is declared in module/ownet/c/src/include/ow_functions.h +OWFS_LICENSE = GPL-2.0+, LGPL-2.0 (owtcl) +OWFS_LICENSE_FILES = COPYING COPYING.LIB +OWFS_INSTALL_STAGING = YES + +# owfs PHP support is not PHP 7 compliant +# https://sourceforge.net/p/owfs/support-requests/32/ +OWFS_CONF_OPTS += --disable-owphp --without-php + +# Skip man pages processing +OWFS_CONF_ENV += ac_cv_path_SOELIM=true + +ifeq ($(BR2_PACKAGE_LIBFUSE),y) +OWFS_DEPENDENCIES += libfuse +OWFS_CONF_OPTS += \ + --enable-owfs \ + --with-fuseinclude=$(STAGING_DIR)/usr/include \ + --with-fuselib=$(STAGING_DIR)/usr/lib +define OWFS_INSTALL_FUSE_INIT_SYSV + $(INSTALL) -D -m 0755 $(OWFS_PKGDIR)S60owfs \ + $(TARGET_DIR)/etc/init.d/S60owfs +endef +define OWFS_CREATE_MOUNTPOINT + mkdir -p $(TARGET_DIR)/dev/1wire +endef +OWFS_POST_INSTALL_TARGET_HOOKS += OWFS_CREATE_MOUNTPOINT +else +OWFS_CONF_OPTS += --disable-owfs +endif + +ifeq ($(BR2_PACKAGE_LIBFTDI1),y) +OWFS_CONF_OPTS += \ + --enable-ftdi \ + --with-libftdi-config=$(STAGING_DIR)/usr/bin/libftdi1-config +OWFS_DEPENDENCIES += libftdi1 +else ifeq ($(BR2_PACKAGE_LIBFTDI),y) +OWFS_CONF_OPTS += \ + --enable-ftdi \ + --with-libftdi-config=$(STAGING_DIR)/usr/bin/libftdi-config +OWFS_DEPENDENCIES += libftdi +else +OWFS_CONF_OPTS += --disable-ftdi +endif + +ifeq ($(BR2_PACKAGE_LIBUSB),y) +OWFS_CONF_OPTS += --enable-usb +OWFS_DEPENDENCIES += libusb +else +OWFS_CONF_OPTS += --disable-usb +endif + +ifeq ($(BR2_PACKAGE_AVAHI),y) +OWFS_CONF_OPTS += --enable-avahi +OWFS_DEPENDENCIES += avahi +else +OWFS_CONF_OPTS += --disable-avahi +endif + +# setup.py isn't python3 compliant +ifeq ($(BR2_PACKAGE_PYTHON),y) +OWFS_CONF_OPTS += \ + --enable-owpython \ + --with-python \ + --with-pythonconfig=$(STAGING_DIR)/usr/bin/python-config +OWFS_MAKE_ENV += \ + CC="$(TARGET_CC)" \ + PYTHONPATH="$(PYTHON_PATH)" \ + _python_sysroot=$(STAGING_DIR) \ + _python_prefix=/usr \ + _python_exec_prefix=/usr +OWFS_DEPENDENCIES += python host-swig +# The configure scripts finds PYSITEDIR as the python_lib directory of +# host-python, and then prepends DESTDIR in front of it. So we end up +# installing things in $(TARGET_DIR)/$(HOST_DIR)/lib/python which is +# clearly wrong. +# Patching owfs to do the right thing is not trivial, it's much easier to +# override the PYSITEDIR variable in make. +OWFS_EXTRA_MAKE_OPTS += PYSITEDIR=/usr/lib/python$(PYTHON_VERSION_MAJOR)/site-packages + +ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y) +define OWFS_FIXUP_PYTHON_SYSCONFIGDATA + find $(HOST_DIR)/lib/python* $(STAGING_DIR)/usr/lib/python* \ + -name "_sysconfigdata*.py" | xargs --no-run-if-empty \ + $(SED) "s:$(PER_PACKAGE_DIR)/[^/]\+/:$(PER_PACKAGE_DIR)/owfs/:g" +endef +OWFS_PRE_CONFIGURE_HOOKS += OWFS_FIXUP_PYTHON_SYSCONFIGDATA +endif + +else +OWFS_CONF_OPTS += --disable-owpython --without-python +endif + +ifeq ($(BR2_STATIC_LIBS),y) +# zeroconf support uses dlopen() +OWFS_CONF_OPTS += --disable-zero +endif + +OWFS_MAKE = $(MAKE) $(OWFS_EXTRA_MAKE_OPTS) + +define OWFS_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 $(OWFS_PKGDIR)S55owserver \ + $(TARGET_DIR)/etc/init.d/S55owserver + $(OWFS_INSTALL_FUSE_INIT_SYSV) +endef + +$(eval $(autotools-package)) diff --git a/package/owl-linux/0001-fix-for-linux-3.3.x.patch b/package/owl-linux/0001-fix-for-linux-3.3.x.patch new file mode 100644 index 00000000..831ac7fd --- /dev/null +++ b/package/owl-linux/0001-fix-for-linux-3.3.x.patch @@ -0,0 +1,21 @@ +Kernel commit b81693d9149c598302e8eb9c20cb20330d922c8e changed the +net_device_ops structure, removing the ndo_set_multicast_list callback. The +ndo_set_rx_mode has also been added to this structure. + +The upshot of these changes is that owl-linux fails to compile with 3.3.x +and later kernels. + +Signed-off-by: Simon Dawson +diff -Nurp a/owl_net.c b/owl_net.c +--- a/owl_net.c 2012-06-14 10:51:45.000000000 +0100 ++++ b/owl_net.c 2012-07-20 13:16:28.772351464 +0100 +@@ -384,7 +384,9 @@ static const struct net_device_ops netde + #endif /* OWL_CONFIG_IFUPDOWN */ + .ndo_start_xmit = owl_net_tx, + .ndo_get_stats = owl_net_get_stats, ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0) + .ndo_set_multicast_list = NULL, ++#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0) */ + .ndo_tx_timeout = owl_net_tx_timeout, + .ndo_set_mac_address = NULL, + }; diff --git a/package/owl-linux/Config.in b/package/owl-linux/Config.in new file mode 100644 index 00000000..bf412d36 --- /dev/null +++ b/package/owl-linux/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_OWL_LINUX + bool "owl-linux" + depends on BR2_LINUX_KERNEL + depends on (BR2_arm920t || BR2_arm922t || BR2_arm926t) + help + Linux kernel driver for the H&D Wireless SPB104 SD-card WiFi + SIP. + + owl-linux requires the hidden kernel option WIRELESS_EXT + enabled. + + http://linux.hd-wireless.se/bin/view/Linux/GettingStarted + +comment "owl-linux needs a Linux kernel to be built" + depends on !BR2_LINUX_KERNEL + depends on BR2_arm || BR2_armeb + +comment "owl-linux is only supported on ARM9 architecture" + depends on !(BR2_arm920t || BR2_arm922t || BR2_arm926t) + depends on BR2_arm || BR2_armeb diff --git a/package/owl-linux/owl-linux.hash b/package/owl-linux/owl-linux.hash new file mode 100644 index 00000000..555d2c28 --- /dev/null +++ b/package/owl-linux/owl-linux.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 a6b1bc6b3900954438a0f1a316bac5f74171125a88c80c35e137f4ca512dedc6 owl-linux-1.0.7.tar.gz +sha256 092f1698328e0d4cc2d04ef1445207a9d278963284cd709fa88f1b8c9999264b LICENSE diff --git a/package/owl-linux/owl-linux.mk b/package/owl-linux/owl-linux.mk new file mode 100644 index 00000000..12624252 --- /dev/null +++ b/package/owl-linux/owl-linux.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# owl-linux +# +################################################################################ + +OWL_LINUX_VERSION = 1.0.7 +OWL_LINUX_SITE = http://linux.hd-wireless.se/pub/Linux/DownloadDrivers +OWL_LINUX_LICENSE = PROPRIETARY +OWL_LINUX_LICENSE_FILES = LICENSE +OWL_LINUX_REDISTRIBUTE = NO + +$(eval $(kernel-module)) +$(eval $(generic-package)) diff --git a/package/p11-kit/0001-p11-kit-lists-c-Add-stdint-h-to-fix-compilation.patch b/package/p11-kit/0001-p11-kit-lists-c-Add-stdint-h-to-fix-compilation.patch new file mode 100644 index 00000000..d4828666 --- /dev/null +++ b/package/p11-kit/0001-p11-kit-lists-c-Add-stdint-h-to-fix-compilation.patch @@ -0,0 +1,28 @@ +From 507c394cfcf4edffc5e4450c5d737e545c26b857 Mon Sep 17 00:00:00 2001 +From: Daniel Engberg +Date: Sat, 12 Dec 2020 18:56:38 +0100 +Subject: [PATCH] p11-kit/lists.c: Add stdint.h to fix compilation + +Add stdint.h otherwise compilation fails on FreeBSD 13-CURRENT with "use of undeclared identifier 'SIZE_MAX'" + +Signed-off-by: Daniel Engberg + +[Retrieved from: +https://github.com/p11-glue/p11-kit/commit/507c394cfcf4edffc5e4450c5d737e545c26b857] +Signed-off-by: Fabrice Fontaine +--- + p11-kit/lists.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/p11-kit/lists.c b/p11-kit/lists.c +index 365a6d89..1d9062be 100644 +--- a/p11-kit/lists.c ++++ b/p11-kit/lists.c +@@ -39,6 +39,7 @@ + + #include + #include ++#include + #include + #include + #include diff --git a/package/p11-kit/Config.in b/package/p11-kit/Config.in new file mode 100644 index 00000000..9be76c2f --- /dev/null +++ b/package/p11-kit/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_P11_KIT + bool "p11-kit" + depends on !BR2_STATIC_LIBS + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Provides a way to load and enumerate PKCS#11 modules. + Provides a standard configuration setup for installing PKCS#11 + modules in such a way that they're discoverable. + + http://p11-glue.freedesktop.org/p11-kit.html + +comment "p11-kit needs a toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/p11-kit/p11-kit.hash b/package/p11-kit/p11-kit.hash new file mode 100644 index 00000000..3481a40b --- /dev/null +++ b/package/p11-kit/p11-kit.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 8a8f40153dd5a3f8e7c03e641f8db400133fb2a6a9ab2aee1b6d0cb0495ec6b6 p11-kit-0.23.22.tar.xz +# Locally computed +sha256 2e1ba993904df807a10c3eda1e5c272338edc35674b679773a8b3ad460731054 COPYING diff --git a/package/p11-kit/p11-kit.mk b/package/p11-kit/p11-kit.mk new file mode 100644 index 00000000..284eb0fa --- /dev/null +++ b/package/p11-kit/p11-kit.mk @@ -0,0 +1,41 @@ +################################################################################ +# +# p11-kit +# +################################################################################ + +P11_KIT_VERSION = 0.23.22 +P11_KIT_SOURCE = p11-kit-$(P11_KIT_VERSION).tar.xz +P11_KIT_SITE = https://github.com/p11-glue/p11-kit/releases/download/$(P11_KIT_VERSION) +P11_KIT_INSTALL_STAGING = YES +P11_KIT_CONF_OPTS = --disable-static +P11_KIT_CONF_ENV = ac_cv_have_decl_program_invocation_short_name=yes \ + ac_cv_have_decl___progname=no +P11_KIT_LICENSE = BSD-3-Clause +P11_KIT_LICENSE_FILES = COPYING +P11_KIT_CPE_ID_VENDOR = p11-kit_project + +ifeq ($(BR2_PACKAGE_LIBFFI),y) +P11_KIT_DEPENDENCIES += host-pkgconf libffi +P11_KIT_CONF_OPTS += --with-libffi +else +P11_KIT_CONF_OPTS += --without-libffi +endif + +ifeq ($(BR2_PACKAGE_LIBTASN1),y) +P11_KIT_DEPENDENCIES += host-pkgconf libtasn1 +P11_KIT_CONF_OPTS += \ + --enable-trust-module \ + --with-libtasn1 +ifeq ($(BR2_PACKAGE_CA_CERTIFICATES),y) +P11_KIT_CONF_OPTS += --with-trust-paths=/etc/ssl/certs/ca-certificates.crt +else +P11_KIT_CONF_OPTS += --without-trust-paths +endif +else +P11_KIT_CONF_OPTS += \ + --disable-trust-module \ + --without-libtasn1 +endif + +$(eval $(autotools-package)) diff --git a/package/p7zip/0001-CVE-2016-9296.patch b/package/p7zip/0001-CVE-2016-9296.patch new file mode 100644 index 00000000..6e6fc9f5 --- /dev/null +++ b/package/p7zip/0001-CVE-2016-9296.patch @@ -0,0 +1,25 @@ +From: Robert Luberda +Date: Sat, 19 Nov 2016 08:48:08 +0100 +Subject: Fix nullptr dereference (CVE-2016-9296) + +Patch taken from https://sourceforge.net/p/p7zip/bugs/185/ + +Signed-off-by: André Hentschel +--- + CPP/7zip/Archive/7z/7zIn.cpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/CPP/7zip/Archive/7z/7zIn.cpp b/CPP/7zip/Archive/7z/7zIn.cpp +index b0c6b98..7c6dde2 100644 +--- a/CPP/7zip/Archive/7z/7zIn.cpp ++++ b/CPP/7zip/Archive/7z/7zIn.cpp +@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams( + if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i]) + ThrowIncorrect(); + } +- HeadersSize += folders.PackPositions[folders.NumPackStreams]; ++ if (folders.PackPositions) ++ HeadersSize += folders.PackPositions[folders.NumPackStreams]; + return S_OK; + } + diff --git a/package/p7zip/0002-CVE-2017-17969.patch b/package/p7zip/0002-CVE-2017-17969.patch new file mode 100644 index 00000000..9198127c --- /dev/null +++ b/package/p7zip/0002-CVE-2017-17969.patch @@ -0,0 +1,37 @@ +From: =?utf-8?q?Antoine_Beaupr=C3=A9?= +Date: Fri, 2 Feb 2018 11:11:41 +0100 +Subject: Heap-based buffer overflow in 7zip/Compress/ShrinkDecoder.cpp + +Origin: vendor, https://sourceforge.net/p/p7zip/bugs/_discuss/thread/0920f369/27d7/attachment/CVE-2017-17969.patch +Forwarded: https://sourceforge.net/p/p7zip/bugs/_discuss/thread/0920f369/#27d7 +Bug: https://sourceforge.net/p/p7zip/bugs/204/ +Bug-Debian: https://bugs.debian.org/888297 +Bug-Debian-Security: https://security-tracker.debian.org/tracker/CVE-2017-17969 +Reviewed-by: Salvatore Bonaccorso +Last-Update: 2018-02-01 +Applied-Upstream: 18.00-beta + +Signed-off-by: André Hentschel +--- + CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp +index 80b7e67..ca37764 100644 +--- a/CPP/7zip/Compress/ShrinkDecoder.cpp ++++ b/CPP/7zip/Compress/ShrinkDecoder.cpp +@@ -121,8 +121,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream * + { + _stack[i++] = _suffixes[cur]; + cur = _parents[cur]; ++ if (cur >= kNumItems || i >= kNumItems) ++ break; + } +- ++ ++ if (cur >= kNumItems || i >= kNumItems) ++ break; ++ + _stack[i++] = (Byte)cur; + lastChar2 = (Byte)cur; + diff --git a/package/p7zip/0003-CVE-2018-5996.patch b/package/p7zip/0003-CVE-2018-5996.patch new file mode 100644 index 00000000..dc3e90ad --- /dev/null +++ b/package/p7zip/0003-CVE-2018-5996.patch @@ -0,0 +1,223 @@ +From: Robert Luberda +Date: Sun, 28 Jan 2018 23:47:40 +0100 +Subject: CVE-2018-5996 + +Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by +applying a few changes from 7Zip 18.00-beta. + +Bug-Debian: https://bugs.debian.org/#888314 + +Signed-off-by: André Hentschel +--- + CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++---- + CPP/7zip/Compress/Rar1Decoder.h | 1 + + CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++- + CPP/7zip/Compress/Rar2Decoder.h | 1 + + CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++--- + CPP/7zip/Compress/Rar3Decoder.h | 2 ++ + 6 files changed, 42 insertions(+), 8 deletions(-) + +diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp +index 1aaedcc..68030c7 100644 +--- a/CPP/7zip/Compress/Rar1Decoder.cpp ++++ b/CPP/7zip/Compress/Rar1Decoder.cpp +@@ -29,7 +29,7 @@ public: + }; + */ + +-CDecoder::CDecoder(): m_IsSolid(false) { } ++CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { } + + void CDecoder::InitStructures() + { +@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream * + InitData(); + if (!m_IsSolid) + { ++ _errorMode = false; + InitStructures(); + InitHuff(); + } ++ ++ if (_errorMode) ++ return S_FALSE; ++ + if (m_UnpackSize > 0) + { + GetFlagsBuf(); +@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream + const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress) + { + try { return CodeReal(inStream, outStream, inSize, outSize, progress); } +- catch(const CInBufferException &e) { return e.ErrorCode; } +- catch(const CLzOutWindowException &e) { return e.ErrorCode; } +- catch(...) { return S_FALSE; } ++ catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; } ++ catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; } ++ catch(...) { _errorMode = true; return S_FALSE; } + } + + STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size) +diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h +index 630f089..01b606b 100644 +--- a/CPP/7zip/Compress/Rar1Decoder.h ++++ b/CPP/7zip/Compress/Rar1Decoder.h +@@ -39,6 +39,7 @@ public: + + Int64 m_UnpackSize; + bool m_IsSolid; ++ bool _errorMode; + + UInt32 ReadBits(int numBits); + HRESULT CopyBlock(UInt32 distance, UInt32 len); +diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp +index b3f2b4b..0580c8d 100644 +--- a/CPP/7zip/Compress/Rar2Decoder.cpp ++++ b/CPP/7zip/Compress/Rar2Decoder.cpp +@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20; + static const UInt32 kWindowReservSize = (1 << 22) + 256; + + CDecoder::CDecoder(): +- m_IsSolid(false) ++ m_IsSolid(false), ++ m_TablesOK(false) + { + } + +@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB + + bool CDecoder::ReadTables(void) + { ++ m_TablesOK = false; ++ + Byte levelLevels[kLevelTableSize]; + Byte newLevels[kMaxTableSize]; + m_AudioMode = (ReadBits(1) == 1); +@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void) + } + + memcpy(m_LastLevels, newLevels, kMaxTableSize); ++ m_TablesOK = true; ++ + return true; + } + +@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream * + return S_FALSE; + } + ++ if (!m_TablesOK) ++ return S_FALSE; ++ + UInt64 startPos = m_OutWindowStream.GetProcessedSize(); + while (pos < unPackSize) + { +diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h +index 3a0535c..0e9005f 100644 +--- a/CPP/7zip/Compress/Rar2Decoder.h ++++ b/CPP/7zip/Compress/Rar2Decoder.h +@@ -139,6 +139,7 @@ class CDecoder : + + UInt64 m_PackSize; + bool m_IsSolid; ++ bool m_TablesOK; + + void InitStructures(); + UInt32 ReadBits(unsigned numBits); +diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp +index 3bf2513..6cb8a6a 100644 +--- a/CPP/7zip/Compress/Rar3Decoder.cpp ++++ b/CPP/7zip/Compress/Rar3Decoder.cpp +@@ -92,7 +92,8 @@ CDecoder::CDecoder(): + _writtenFileSize(0), + _vmData(0), + _vmCode(0), +- m_IsSolid(false) ++ m_IsSolid(false), ++ _errorMode(false) + { + Ppmd7_Construct(&_ppmd); + } +@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing) + return InitPPM(); + } + ++ TablesRead = false; ++ TablesOK = false; ++ + _lzMode = true; + PrevAlignBits = 0; + PrevAlignCount = 0; +@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing) + } + } + } ++ if (InputEofError()) ++ return S_FALSE; ++ + TablesRead = true; + + // original code has check here: +@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing) + RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize])); + + memcpy(m_LastLevels, newLevels, kTablesSizesSum); ++ ++ TablesOK = true; ++ + return S_OK; + } + +@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress) + PpmEscChar = 2; + PpmError = true; + InitFilters(); ++ _errorMode = false; + } ++ ++ if (_errorMode) ++ return S_FALSE; ++ + if (!m_IsSolid || !TablesRead) + { + bool keepDecompressing; +@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress) + bool keepDecompressing; + if (_lzMode) + { ++ if (!TablesOK) ++ return S_FALSE; + RINOK(DecodeLZ(keepDecompressing)) + } + else +@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream + _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1; + return CodeReal(progress); + } +- catch(const CInBufferException &e) { return e.ErrorCode; } +- catch(...) { return S_FALSE; } ++ catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; } ++ catch(...) { _errorMode = true; return S_FALSE; } + // CNewException is possible here. But probably CNewException is caused + // by error in data stream. + } +diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h +index c130cec..2f72d7d 100644 +--- a/CPP/7zip/Compress/Rar3Decoder.h ++++ b/CPP/7zip/Compress/Rar3Decoder.h +@@ -192,6 +192,7 @@ class CDecoder: + UInt32 _lastFilter; + + bool m_IsSolid; ++ bool _errorMode; + + bool _lzMode; + bool _unsupportedFilter; +@@ -200,6 +201,7 @@ class CDecoder: + UInt32 PrevAlignCount; + + bool TablesRead; ++ bool TablesOK; + + CPpmd7 _ppmd; + int PpmEscChar; diff --git a/package/p7zip/0004-Fix-build-with-gcc-10.patch b/package/p7zip/0004-Fix-build-with-gcc-10.patch new file mode 100644 index 00000000..b01833db --- /dev/null +++ b/package/p7zip/0004-Fix-build-with-gcc-10.patch @@ -0,0 +1,32 @@ +From 78b760eae21d7b340c69e8abab8ca706e1e00adc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Stefan=20S=C3=B8rensen?= +Date: Mon, 4 May 2020 09:19:46 +0200 +Subject: [PATCH] Fix build with gcc 10. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add cast to code that mixes HRESULT (aka long) and DWORD (aka unsigned +int) which causes an narrowing error with gcc 10. + +Signed-off-by: Stefan Sørensen +--- + CPP/Windows/ErrorMsg.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/CPP/Windows/ErrorMsg.cpp b/CPP/Windows/ErrorMsg.cpp +index 99684ae..ab48352 100644 +--- a/CPP/Windows/ErrorMsg.cpp ++++ b/CPP/Windows/ErrorMsg.cpp +@@ -13,7 +13,7 @@ UString MyFormatMessage(DWORD errorCode) + const char * txt = 0; + AString msg; + +- switch(errorCode) { ++ switch((HRESULT)errorCode) { + case ERROR_NO_MORE_FILES : txt = "No more files"; break ; + case E_NOTIMPL : txt = "E_NOTIMPL"; break ; + case E_NOINTERFACE : txt = "E_NOINTERFACE"; break ; +-- +2.26.2 + diff --git a/package/p7zip/Config.in b/package/p7zip/Config.in new file mode 100644 index 00000000..a3adab5b --- /dev/null +++ b/package/p7zip/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_P7ZIP + bool "p7zip" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_WCHAR + help + p7zip is a quick port of the command line version of 7-zip + for Unix (see http://www.7-zip.org) + + 7-Zip is a file archiver with highest compression ratio. + + http://sourceforge.net/projects/p7zip + +comment "p7zip needs a toolchain w/ threads, wchar, C++" + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR || !BR2_INSTALL_LIBSTDCPP diff --git a/package/p7zip/p7zip.hash b/package/p7zip/p7zip.hash new file mode 100644 index 00000000..a63a0b4a --- /dev/null +++ b/package/p7zip/p7zip.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/p7zip/files/p7zip/16.02/ +md5 a0128d661cfe7cc8c121e73519c54fbf p7zip_16.02_src_all.tar.bz2 +sha1 e8819907132811aa1afe5ef296181d3a15cc8f22 p7zip_16.02_src_all.tar.bz2 +# Locally computed +sha256 5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f p7zip_16.02_src_all.tar.bz2 +sha256 555806657dcf0f1e720b581c52643c195ec86ae3f00bd18cc66d2e0f88ffa210 DOC/License.txt diff --git a/package/p7zip/p7zip.mk b/package/p7zip/p7zip.mk new file mode 100644 index 00000000..43fbe775 --- /dev/null +++ b/package/p7zip/p7zip.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# p7zip +# +################################################################################ + +P7ZIP_VERSION = 16.02 +P7ZIP_SOURCE = p7zip_$(P7ZIP_VERSION)_src_all.tar.bz2 +P7ZIP_SITE = http://downloads.sourceforge.net/project/p7zip/p7zip/$(P7ZIP_VERSION) +P7ZIP_LICENSE = LGPL-2.1+ with unRAR restriction +P7ZIP_LICENSE_FILES = DOC/License.txt +P7ZIP_CPE_ID_VENDOR = 7-zip + +# 0001-CVE-2016-9296.patch +P7ZIP_IGNORE_CVES += CVE-2016-9296 +# 0002-CVE-2017-17969.patch +P7ZIP_IGNORE_CVES += CVE-2017-17969 +# 0003-CVE-2018-5996.patch +P7ZIP_IGNORE_CVES += CVE-2018-5996 + +# p7zip buildsystem is a mess: it plays dirty tricks with CFLAGS and +# CXXFLAGS, so we can't pass them. Instead, it accepts ALLFLAGS_C +# and ALLFLAGS_CPP as variables to pass the CFLAGS and CXXFLAGS. +define P7ZIP_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) CC="$(TARGET_CC)" ALLFLAGS_C="$(TARGET_CFLAGS)" \ + CXX="$(TARGET_CXX)" ALLFLAGS_CPP="$(TARGET_CXXFLAGS)" \ + LDFLAGS="$(TARGET_LDFLAGS)" \ + -C $(@D) 7zr +endef + +define P7ZIP_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/bin/7zr $(TARGET_DIR)/usr/bin/7zr +endef + +$(eval $(generic-package)) diff --git a/package/p910nd/Config.in b/package/p910nd/Config.in new file mode 100644 index 00000000..33f6cf8a --- /dev/null +++ b/package/p910nd/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_P910ND + bool "p910nd" + depends on BR2_USE_MMU # fork() + help + p910nd is a small printer daemon intended for diskless + workstations. Using ports 9100-9102, it accepts + print jobs and passes them directly to a USB printer. + + http://p910nd.sourceforge.net/ diff --git a/package/p910nd/p910nd.hash b/package/p910nd/p910nd.hash new file mode 100644 index 00000000..93b13899 --- /dev/null +++ b/package/p910nd/p910nd.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 4ac980a3ae24babae6f70f0a692625ece03a4a92c357fbb10d2e368386c3c26f p910nd-0.97.tar.bz2 +sha256 91df39d1816bfb17a4dda2d3d2c83b1f6f2d38d53e53e41e8f97ad5ac46a0cad COPYING diff --git a/package/p910nd/p910nd.mk b/package/p910nd/p910nd.mk new file mode 100644 index 00000000..163ab1bc --- /dev/null +++ b/package/p910nd/p910nd.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# p910nd +# +################################################################################ + +P910ND_VERSION = 0.97 +P910ND_SITE = http://downloads.sourceforge.net/project/p910nd/p910nd/$(P910ND_VERSION) +P910ND_SOURCE = p910nd-$(P910ND_VERSION).tar.bz2 +P910ND_LICENSE = GPL-2.0 +P910ND_LICENSE_FILES = COPYING + +define P910ND_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) +endef + +define P910ND_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/p910nd $(TARGET_DIR)/usr/sbin/p910nd +endef + +$(eval $(generic-package)) diff --git a/package/paho-mqtt-c/Config.in b/package/paho-mqtt-c/Config.in new file mode 100644 index 00000000..0f4b2a29 --- /dev/null +++ b/package/paho-mqtt-c/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PAHO_MQTT_C + bool "paho-mqtt-c" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + MQTT client C library + + https://eclipse.org/paho/clients/c/ + +comment "paho-mqtt-c needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/paho-mqtt-c/paho-mqtt-c.hash b/package/paho-mqtt-c/paho-mqtt-c.hash new file mode 100644 index 00000000..4cdedfbf --- /dev/null +++ b/package/paho-mqtt-c/paho-mqtt-c.hash @@ -0,0 +1,5 @@ +# Locally computed: +sha256 386c9b5fa1cf6d0d516db12d57fd8f6a410dd0fdc5e9a2da870aae437a2535ed paho-mqtt-c-1.3.9.tar.gz +sha256 83bbba033dc985487e321b6dfde111772affb73460be48726299fed3da684b1c edl-v10 +sha256 0becf16567beb77fa252b7664631dd177c8f9a1889e48995b45379c7130e5303 epl-v20 +sha256 bc0f3f447097eb82a29ad6c2f4929572bb548b6bd4c9e38fde1bf131a771b7a0 LICENSE diff --git a/package/paho-mqtt-c/paho-mqtt-c.mk b/package/paho-mqtt-c/paho-mqtt-c.mk new file mode 100644 index 00000000..68b58f2e --- /dev/null +++ b/package/paho-mqtt-c/paho-mqtt-c.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# paho-mqtt-c +# +################################################################################ + +PAHO_MQTT_C_VERSION = 1.3.9 +PAHO_MQTT_C_SITE = $(call github,eclipse,paho.mqtt.c,v$(PAHO_MQTT_C_VERSION)) +PAHO_MQTT_C_LICENSE = EPL-2.0 or BSD-3-Clause +PAHO_MQTT_C_LICENSE_FILES = epl-v20 edl-v10 LICENSE +PAHO_MQTT_C_INSTALL_STAGING = YES + +PAHO_MQTT_C_CONF_OPTS = \ + -DPAHO_ENABLE_TESTING=FALSE \ + -DPAHO_ENABLE_CPACK=FALSE \ + -DPAHO_HIGH_PERFORMANCE=TRUE + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +PAHO_MQTT_C_DEPENDENCIES += openssl +PAHO_MQTT_C_CONF_OPTS += -DPAHO_WITH_SSL=TRUE +else +PAHO_MQTT_C_CONF_OPTS += -DPAHO_WITH_SSL=FALSE +endif + +ifeq ($(BR2_SHARED_LIBS),y) +PAHO_MQTT_C_CONF_OPTS += \ + -DPAHO_BUILD_SHARED=TRUE \ + -DPAHO_BUILD_STATIC=FALSE +else ifeq ($(BR2_STATIC_LIBS),y) +PAHO_MQTT_C_CONF_OPTS += \ + -DPAHO_BUILD_SHARED=FALSE \ + -DPAHO_BUILD_STATIC=TRUE +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +PAHO_MQTT_C_CONF_OPTS += \ + -DPAHO_BUILD_SHARED=TRUE \ + -DPAHO_BUILD_STATIC=TRUE +endif + +$(eval $(cmake-package)) diff --git a/package/paho-mqtt-cpp/0001-cmake-FindMahoMqttC.cmake-fix-static-build.patch b/package/paho-mqtt-cpp/0001-cmake-FindMahoMqttC.cmake-fix-static-build.patch new file mode 100644 index 00000000..934dca21 --- /dev/null +++ b/package/paho-mqtt-cpp/0001-cmake-FindMahoMqttC.cmake-fix-static-build.patch @@ -0,0 +1,35 @@ +From 8aeafa1c2ec90b0e95ba5944266eda115457e10d Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 15 Jun 2020 13:40:22 +0200 +Subject: [PATCH] cmake/FindMahoMqttC.cmake: fix static build + +Static libraries of paho-mqtt-c are not suffixed with -static since +version 1.3.2 and +https://github.com/eclipse/paho.mqtt.c/commit/8cc51c78b76a1eabd1df3124b0887ce8b01070ff + +See: https://github.com/eclipse/paho.mqtt.c/pull/704 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/eclipse/paho.mqtt.cpp/pull/275] +--- + cmake/FindPahoMqttC.cmake | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/cmake/FindPahoMqttC.cmake b/cmake/FindPahoMqttC.cmake +index 53f15a3..0ec95bd 100644 +--- a/cmake/FindPahoMqttC.cmake ++++ b/cmake/FindPahoMqttC.cmake +@@ -5,10 +5,6 @@ if(PAHO_WITH_SSL) + else() + set(_PAHO_MQTT_C_LIB_NAME paho-mqtt3a) + endif() +-# add suffix when using static Paho MQTT C library variant +-if(PAHO_BUILD_STATIC) +- set(_PAHO_MQTT_C_LIB_NAME ${_PAHO_MQTT_C_LIB_NAME}-static) +-endif() + + find_library(PAHO_MQTT_C_LIBRARIES NAMES ${_PAHO_MQTT_C_LIB_NAME}) + unset(_PAHO_MQTT_C_LIB_NAME) +-- +2.26.2 + diff --git a/package/paho-mqtt-cpp/Config.in b/package/paho-mqtt-cpp/Config.in new file mode 100644 index 00000000..a46c1256 --- /dev/null +++ b/package/paho-mqtt-cpp/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_PAHO_MQTT_CPP + bool "paho-mqtt-cpp" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # std::future + depends on BR2_INSTALL_LIBSTDCPP + select BR2_PACKAGE_PAHO_MQTT_C + help + MQTT client C++ library + + https://eclipse.org/paho/clients/cpp/ + +comment "paho-mqtt-cpp needs a toolchain w/ threads, C++" + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 + +comment "paho-mqtt-cpp needs a toolchain not affected by GCC bug 64735" + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 diff --git a/package/paho-mqtt-cpp/paho-mqtt-cpp.hash b/package/paho-mqtt-cpp/paho-mqtt-cpp.hash new file mode 100644 index 00000000..e5406e0b --- /dev/null +++ b/package/paho-mqtt-cpp/paho-mqtt-cpp.hash @@ -0,0 +1,4 @@ +# Locally computed: +sha256 cb0343349ed91ef51d0e76ae860d19435a730d3d355e57886bb090014cb70bbe paho-mqtt-cpp-1.1.tar.gz +sha256 83bbba033dc985487e321b6dfde111772affb73460be48726299fed3da684b1c edl-v10 +sha256 44277b2bec6093e4ac313afec251a4de599d24c4e768f8574d95b13a9d2d97b5 epl-v10 diff --git a/package/paho-mqtt-cpp/paho-mqtt-cpp.mk b/package/paho-mqtt-cpp/paho-mqtt-cpp.mk new file mode 100644 index 00000000..161e53d4 --- /dev/null +++ b/package/paho-mqtt-cpp/paho-mqtt-cpp.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# paho-mqtt-cpp +# +################################################################################ + +PAHO_MQTT_CPP_VERSION = 1.1 +PAHO_MQTT_CPP_SITE = $(call github,eclipse,paho.mqtt.cpp,v$(PAHO_MQTT_CPP_VERSION)) +PAHO_MQTT_CPP_LICENSE = EPL-1.0 or BSD-3-Clause +PAHO_MQTT_CPP_LICENSE_FILES = epl-v10 edl-v10 +PAHO_MQTT_CPP_INSTALL_STAGING = YES +PAHO_MQTT_CPP_DEPENDENCIES = paho-mqtt-c + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +PAHO_MQTT_CPP_DEPENDENCIES += openssl +PAHO_MQTT_CPP_CONF_OPTS += -DPAHO_WITH_SSL=TRUE +else +PAHO_MQTT_CPP_CONF_OPTS += -DPAHO_WITH_SSL=FALSE +endif + +ifeq ($(BR2_SHARED_LIBS),y) +PAHO_MQTT_CPP_CONF_OPTS += \ + -DPAHO_BUILD_SHARED=TRUE \ + -DPAHO_BUILD_STATIC=FALSE +else ifeq ($(BR2_STATIC_LIBS),y) +PAHO_MQTT_CPP_CONF_OPTS += \ + -DPAHO_BUILD_SHARED=FALSE \ + -DPAHO_BUILD_STATIC=TRUE +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +PAHO_MQTT_CPP_CONF_OPTS += \ + -DPAHO_BUILD_SHARED=TRUE \ + -DPAHO_BUILD_STATIC=TRUE +endif + +$(eval $(cmake-package)) diff --git a/package/pamtester/Config.in b/package/pamtester/Config.in new file mode 100644 index 00000000..19b76d3f --- /dev/null +++ b/package/pamtester/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_PAMTESTER + bool "pamtester" + depends on BR2_PACKAGE_LINUX_PAM + help + A tiny utility for testing pluggable authentication modules + (PAM) facility. While specifically designed to help PAM module + authors to test their modules, that might also be handy for + system administrators interested in building a centralised + authentication system using common standards such as NIS, SASL + and LDAP. + + http://pamtester.sourceforge.net/ + +comment "pamtester depends on linux-pam" + depends on !BR2_PACKAGE_LINUX_PAM diff --git a/package/pamtester/pamtester.hash b/package/pamtester/pamtester.hash new file mode 100644 index 00000000..17497e31 --- /dev/null +++ b/package/pamtester/pamtester.hash @@ -0,0 +1,3 @@ +# from https://sourceforge.net/projects/pamtester/files/pamtester/0.1.2/ +sha1 33bcc610d7f208b50a0a23c144bdbd1e2cae4ac6 pamtester-0.1.2.tar.gz +sha256 1e3922a8ab0907c1f3bcc3e00005ef88930e50d0890f40a6a39f5f83b05f05cc LICENSE diff --git a/package/pamtester/pamtester.mk b/package/pamtester/pamtester.mk new file mode 100644 index 00000000..b09e4d1c --- /dev/null +++ b/package/pamtester/pamtester.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# pamtester +# +################################################################################ + +PAMTESTER_VERSION = 0.1.2 +PAMTESTER_SITE = https://download.sourceforge.net/project/pamtester/pamtester/$(PAMTESTER_VERSION) +PAMTESTER_DEPENDENCIES = linux-pam +PAMTESTER_LICENSE = BSD-3-Clause +PAMTESTER_LICENSE_FILES = LICENSE + +$(eval $(autotools-package)) diff --git a/package/pango/Config.in b/package/pango/Config.in new file mode 100644 index 00000000..cf5170c8 --- /dev/null +++ b/package/pango/Config.in @@ -0,0 +1,32 @@ +config BR2_PACKAGE_PANGO + bool "pango" + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + depends on BR2_INSTALL_LIBSTDCPP # freetype support + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # harfbuzz + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # harfbuzz + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBFRIBIDI + select BR2_PACKAGE_EXPAT + select BR2_PACKAGE_CAIRO + select BR2_PACKAGE_FONTCONFIG + select BR2_PACKAGE_FREETYPE + select BR2_PACKAGE_HARFBUZZ + select BR2_PACKAGE_XLIB_LIBX11 if BR2_PACKAGE_XORG7 + help + Pango is a library for laying out and rendering of text, + with an emphasis on internationalization. Pango can be used + anywhere that text layout is needed, though most of the work + on Pango so far has been done in the context of the GTK+ + widget toolkit. Pango forms the core of text and font + handling for GTK+-2.x. + + https://pango.gnome.org/ + +comment "pango needs a toolchain w/ wchar, threads, C++, gcc >= 4.8" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 || \ + !BR2_INSTALL_LIBSTDCPP diff --git a/package/pango/pango.hash b/package/pango/pango.hash new file mode 100644 index 00000000..94568a68 --- /dev/null +++ b/package/pango/pango.hash @@ -0,0 +1,5 @@ +# From https://ftp.acc.umu.se/pub/GNOME/sources/pango/1.48/pango-1.48.4.sha256sum +sha256 28a82f6a6cab60aa3b75a90f04197ead2d311fa8fe8b7bfdf8666e2781d506dc pango-1.48.7.tar.xz + +# Locally computed +sha256 d245807f90032872d1438d741ed21e2490e1175dc8aa3afa5ddb6c8e529b58e5 COPYING diff --git a/package/pango/pango.mk b/package/pango/pango.mk new file mode 100644 index 00000000..2a4a9f49 --- /dev/null +++ b/package/pango/pango.mk @@ -0,0 +1,53 @@ +################################################################################ +# +# pango +# +################################################################################ + +PANGO_VERSION_MAJOR = 1.48 +PANGO_VERSION = $(PANGO_VERSION_MAJOR).7 +PANGO_SOURCE = pango-$(PANGO_VERSION).tar.xz +PANGO_SITE = http://ftp.gnome.org/pub/GNOME/sources/pango/$(PANGO_VERSION_MAJOR) +PANGO_INSTALL_STAGING = YES +PANGO_LICENSE = LGPL-2.0+ +PANGO_LICENSE_FILES = COPYING +PANGO_CPE_ID_VENDOR = pango + +PANGO_CONF_OPTS = -Duse_fontconfig=true +HOST_PANGO_CONF_OPTS = -Duse_fontconfig=true -Dintrospection=disabled + +PANGO_DEPENDENCIES = \ + $(TARGET_NLS_DEPENDENCIES) \ + host-pkgconf \ + libglib2 \ + libfribidi \ + cairo \ + harfbuzz \ + fontconfig \ + freetype +HOST_PANGO_DEPENDENCIES = \ + host-pkgconf \ + host-libglib2 \ + host-libfribidi \ + host-cairo \ + host-harfbuzz \ + host-fontconfig \ + host-freetype + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +PANGO_CONF_OPTS += -Dintrospection=enabled +PANGO_DEPENDENCIES += gobject-introspection +else +PANGO_CONF_OPTS += -Dintrospection=disabled +endif + +ifeq ($(BR2_PACKAGE_XORG7),y) +PANGO_DEPENDENCIES += xlib_libX11 +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXFT)$(BR2_PACKAGE_XLIB_LIBXRENDER),yy) +PANGO_DEPENDENCIES += xlib_libXft xlib_libXrender +endif + +$(eval $(meson-package)) +$(eval $(host-meson-package)) diff --git a/package/pangomm/Config.in b/package/pangomm/Config.in new file mode 100644 index 00000000..0702b8c5 --- /dev/null +++ b/package/pangomm/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_PANGOMM + bool "pangomm" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # pango -> harfbuzz + depends on BR2_INSTALL_LIBSTDCPP # glibmm/pango + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C++11 + depends on BR2_TOOLCHAIN_HAS_THREADS # *mm/pango -> libglib2 + depends on BR2_USE_MMU # *mm/pango -> libglib2 + depends on BR2_USE_WCHAR # *mm/pango -> libglib2 + select BR2_PACKAGE_CAIROMM + select BR2_PACKAGE_GLIBMM + select BR2_PACKAGE_PANGO + select BR2_PACKAGE_LIBSIGC + help + The pangomm package is a set of C++ bindings for Pango. + + http://www.gtkmm.org/ + +comment "pangomm needs a toolchain w/ C++, wchar, threads, gcc >= 4.9" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || !BR2_USE_WCHAR \ + || !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/pangomm/pangomm.hash b/package/pangomm/pangomm.hash new file mode 100644 index 00000000..bde53e4f --- /dev/null +++ b/package/pangomm/pangomm.hash @@ -0,0 +1,5 @@ +# From http://ftp.gnome.org/pub/gnome/sources/pangomm/2.40/pangomm-2.40.1.sha256sum +sha256 9762ee2a2d5781be6797448d4dd2383ce14907159b30bc12bf6b08e7227be3af pangomm-2.40.1.tar.xz +# Locally computed +sha256 5bbcbb737e60fe9deba08ecbd00920cfcc3403ba2e534c64fdeea49d6bb87509 COPYING +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING.tools diff --git a/package/pangomm/pangomm.mk b/package/pangomm/pangomm.mk new file mode 100644 index 00000000..9edcb164 --- /dev/null +++ b/package/pangomm/pangomm.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# pangomm +# +################################################################################ + +PANGOMM_VERSION_MAJOR = 2.40 +PANGOMM_VERSION = $(PANGOMM_VERSION_MAJOR).1 +PANGOMM_SOURCE = pangomm-$(PANGOMM_VERSION).tar.xz +PANGOMM_SITE = http://ftp.gnome.org/pub/gnome/sources/pangomm/$(PANGOMM_VERSION_MAJOR) +PANGOMM_LICENSE = LGPL-2.1+ (library), GPL-2.0+ (tools) +PANGOMM_LICENSE_FILES = COPYING COPYING.tools +PANGOMM_INSTALL_STAGING = YES +PANGOMM_DEPENDENCIES = glibmm cairomm libsigc pango host-pkgconf + +$(eval $(autotools-package)) diff --git a/package/parprouted/Config.in b/package/parprouted/Config.in new file mode 100644 index 00000000..7cf839da --- /dev/null +++ b/package/parprouted/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_PARPROUTED + bool "parprouted" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_THREADS + help + parprouted is a daemon for transparent IP (Layer 3) proxy ARP + bridging. This is useful for creation of transparent firewalls + and bridging networks with different MAC protocols. Also, + unlike standard bridging, proxy ARP bridging allows to bridge + Ethernet networks behind wireless nodes without using WDS or + layer 2 bridging. + + https://www.hazard.maks.net/parprouted + +comment "parprouted needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/parprouted/parprouted.hash b/package/parprouted/parprouted.hash new file mode 100644 index 00000000..d35691b6 --- /dev/null +++ b/package/parprouted/parprouted.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 d63643c95d4149a3d71112da5892f459433456bf0279bfa304625f109178defc parprouted-0.7.tar.gz +sha256 dcc100d4161cc0b7177545ab6e47216f84857cda3843847c792a25289852dcaa COPYING diff --git a/package/parprouted/parprouted.mk b/package/parprouted/parprouted.mk new file mode 100644 index 00000000..a0425d92 --- /dev/null +++ b/package/parprouted/parprouted.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# parprouted +# +################################################################################ + +PARPROUTED_VERSION = 0.7 +PARPROUTED_SITE = https://www.hazard.maks.net/parprouted +PARPROUTED_LICENSE = GPL-2.0 +PARPROUTED_LICENSE_FILES = COPYING + +define PARPROUTED_BUILD_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) all +endef + +define PARPROUTED_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/parprouted $(TARGET_DIR)/usr/sbin/parprouted +endef + +$(eval $(generic-package)) diff --git a/package/parted/Config.in b/package/parted/Config.in new file mode 100644 index 00000000..f48b365a --- /dev/null +++ b/package/parted/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_PARTED + bool "parted" + depends on BR2_ENABLE_LOCALE + depends on BR2_USE_WCHAR + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + help + parted, the GNU partition resizing program + + http://www.gnu.org/software/parted/ + +comment "parted needs a toolchain w/ locale, wchar" + depends on !BR2_ENABLE_LOCALE || !BR2_USE_WCHAR diff --git a/package/parted/Config.in.host b/package/parted/Config.in.host new file mode 100644 index 00000000..f5d7acc2 --- /dev/null +++ b/package/parted/Config.in.host @@ -0,0 +1,6 @@ +config BR2_PACKAGE_HOST_PARTED + bool "host parted" + help + parted, the GNU partition resizing program + + http://www.gnu.org/software/parted/ diff --git a/package/parted/parted.hash b/package/parted/parted.hash new file mode 100644 index 00000000..2c466eb8 --- /dev/null +++ b/package/parted/parted.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +sha256 57e2b4bd87018625c515421d4524f6e3b55175b472302056391c5f7eccb83d44 parted-3.3.tar.xz + +# Locally calculated +sha256 0abbff814cd00e2b0b6d08395af2b419c1a92026c4b4adacbb65ccda45fa58cf COPYING diff --git a/package/parted/parted.mk b/package/parted/parted.mk new file mode 100644 index 00000000..66940fc5 --- /dev/null +++ b/package/parted/parted.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# parted +# +################################################################################ + +PARTED_VERSION = 3.3 +PARTED_SOURCE = parted-$(PARTED_VERSION).tar.xz +PARTED_SITE = $(BR2_GNU_MIRROR)/parted +PARTED_DEPENDENCIES = host-pkgconf util-linux +PARTED_INSTALL_STAGING = YES +PARTED_LICENSE = GPL-3.0+ +PARTED_LICENSE_FILES = COPYING +PARTED_CPE_ID_VENDOR = parted_project + +ifeq ($(BR2_PACKAGE_READLINE),y) +PARTED_DEPENDENCIES += readline +PARTED_CONF_OPTS += --with-readline +else +PARTED_CONF_OPTS += --without-readline +endif + +ifeq ($(BR2_PACKAGE_LVM2),y) +PARTED_DEPENDENCIES += lvm2 +PARTED_CONF_OPTS += --enable-device-mapper +else +PARTED_CONF_OPTS += --disable-device-mapper +endif + +ifeq ($(BR2_PACKAGE_LIBICONV),y) +PARTED_DEPENDENCIES += libiconv +endif + +HOST_PARTED_DEPENDENCIES = host-pkgconf host-util-linux +HOST_PARTED_CONF_OPTS += \ + --without-readline \ + --disable-device-mapper + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/patch/0001-Fix-segfault-with-mangled-rename-patch.patch b/package/patch/0001-Fix-segfault-with-mangled-rename-patch.patch new file mode 100644 index 00000000..19a67573 --- /dev/null +++ b/package/patch/0001-Fix-segfault-with-mangled-rename-patch.patch @@ -0,0 +1,33 @@ +From f290f48a621867084884bfff87f8093c15195e6a Mon Sep 17 00:00:00 2001 +From: Andreas Gruenbacher +Date: Mon, 12 Feb 2018 16:48:24 +0100 +Subject: [PATCH] Fix segfault with mangled rename patch + +http://savannah.gnu.org/bugs/?53132 +* src/pch.c (intuit_diff_type): Ensure that two filenames are specified +for renames and copies (fix the existing check). + +Signed-off-by: Baruch Siach +--- +Patch status: upstream commit f290f48a6218 + + src/pch.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/pch.c b/src/pch.c +index ff9ed2cebb8a..bc6278c4032c 100644 +--- a/src/pch.c ++++ b/src/pch.c +@@ -974,7 +974,8 @@ intuit_diff_type (bool need_header, mode_t *p_file_type) + if ((pch_rename () || pch_copy ()) + && ! inname + && ! ((i == OLD || i == NEW) && +- p_name[! reverse] && ++ p_name[reverse] && p_name[! reverse] && ++ name_is_valid (p_name[reverse]) && + name_is_valid (p_name[! reverse]))) + { + say ("Cannot %s file without two valid file names\n", pch_rename () ? "rename" : "copy"); +-- +2.16.1 + diff --git a/package/patch/0002-Allow-input-files-to-be-missing-for-ed-style-patches.patch b/package/patch/0002-Allow-input-files-to-be-missing-for-ed-style-patches.patch new file mode 100644 index 00000000..7d5757d1 --- /dev/null +++ b/package/patch/0002-Allow-input-files-to-be-missing-for-ed-style-patches.patch @@ -0,0 +1,37 @@ +From b5a91a01e5d0897facdd0f49d64b76b0f02b43e1 Mon Sep 17 00:00:00 2001 +From: Andreas Gruenbacher +Date: Fri, 6 Apr 2018 11:34:51 +0200 +Subject: [PATCH] Allow input files to be missing for ed-style patches + +* src/pch.c (do_ed_script): Allow input files to be missing so that new +files will be created as with non-ed-style patches. + +Signed-off-by: Baruch Siach +--- +Upstream status: commit b5a91a01e5d0 + + src/pch.c | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/pch.c b/src/pch.c +index bc6278c4032c..0c5cc2623079 100644 +--- a/src/pch.c ++++ b/src/pch.c +@@ -2394,9 +2394,11 @@ do_ed_script (char const *inname, char const *outname, + + if (! dry_run && ! skip_rest_of_patch) { + int exclusive = *outname_needs_removal ? 0 : O_EXCL; +- assert (! inerrno); +- *outname_needs_removal = true; +- copy_file (inname, outname, 0, exclusive, instat.st_mode, true); ++ if (inerrno != ENOENT) ++ { ++ *outname_needs_removal = true; ++ copy_file (inname, outname, 0, exclusive, instat.st_mode, true); ++ } + sprintf (buf, "%s %s%s", editor_program, + verbosity == VERBOSE ? "" : "- ", + outname); +-- +2.16.3 + diff --git a/package/patch/0003-Fix-arbitrary-command-execution-in-ed-style-patches-.patch b/package/patch/0003-Fix-arbitrary-command-execution-in-ed-style-patches-.patch new file mode 100644 index 00000000..b44bdd0f --- /dev/null +++ b/package/patch/0003-Fix-arbitrary-command-execution-in-ed-style-patches-.patch @@ -0,0 +1,157 @@ +From 123eaff0d5d1aebe128295959435b9ca5909c26d Mon Sep 17 00:00:00 2001 +From: Andreas Gruenbacher +Date: Fri, 6 Apr 2018 12:14:49 +0200 +Subject: [PATCH] Fix arbitrary command execution in ed-style patches + (CVE-2018-1000156) + +* src/pch.c (do_ed_script): Write ed script to a temporary file instead +of piping it to ed: this will cause ed to abort on invalid commands +instead of rejecting them and carrying on. +* tests/ed-style: New test case. +* tests/Makefile.am (TESTS): Add test case. + +[baruch: drop test hunks to avoid autoreconf] +Signed-off-by: Baruch Siach +--- +Upstream status: commit 123eaff0d5d1 + + src/pch.c | 91 ++++++++++++++++++++++++++++++++++++++++--------------- + tests/Makefile.am | 1 + + tests/ed-style | 41 +++++++++++++++++++++++++ + 3 files changed, 108 insertions(+), 25 deletions(-) + create mode 100644 tests/ed-style + +diff --git a/src/pch.c b/src/pch.c +index 0c5cc2623079..4fd5a05a6f5c 100644 +--- a/src/pch.c ++++ b/src/pch.c +@@ -33,6 +33,7 @@ + # include + #endif + #include ++#include + + #define INITHUNKMAX 125 /* initial dynamic allocation size */ + +@@ -2389,24 +2390,28 @@ do_ed_script (char const *inname, char const *outname, + static char const editor_program[] = EDITOR_PROGRAM; + + file_offset beginning_of_this_line; +- FILE *pipefp = 0; + size_t chars_read; ++ FILE *tmpfp = 0; ++ char const *tmpname; ++ int tmpfd; ++ pid_t pid; ++ ++ if (! dry_run && ! skip_rest_of_patch) ++ { ++ /* Write ed script to a temporary file. This causes ed to abort on ++ invalid commands such as when line numbers or ranges exceed the ++ number of available lines. When ed reads from a pipe, it rejects ++ invalid commands and treats the next line as a new command, which ++ can lead to arbitrary command execution. */ ++ ++ tmpfd = make_tempfile (&tmpname, 'e', NULL, O_RDWR | O_BINARY, 0); ++ if (tmpfd == -1) ++ pfatal ("Can't create temporary file %s", quotearg (tmpname)); ++ tmpfp = fdopen (tmpfd, "w+b"); ++ if (! tmpfp) ++ pfatal ("Can't open stream for file %s", quotearg (tmpname)); ++ } + +- if (! dry_run && ! skip_rest_of_patch) { +- int exclusive = *outname_needs_removal ? 0 : O_EXCL; +- if (inerrno != ENOENT) +- { +- *outname_needs_removal = true; +- copy_file (inname, outname, 0, exclusive, instat.st_mode, true); +- } +- sprintf (buf, "%s %s%s", editor_program, +- verbosity == VERBOSE ? "" : "- ", +- outname); +- fflush (stdout); +- pipefp = popen(buf, binary_transput ? "wb" : "w"); +- if (!pipefp) +- pfatal ("Can't open pipe to %s", quotearg (buf)); +- } + for (;;) { + char ed_command_letter; + beginning_of_this_line = file_tell (pfp); +@@ -2417,14 +2422,14 @@ do_ed_script (char const *inname, char const *outname, + } + ed_command_letter = get_ed_command_letter (buf); + if (ed_command_letter) { +- if (pipefp) +- if (! fwrite (buf, sizeof *buf, chars_read, pipefp)) ++ if (tmpfp) ++ if (! fwrite (buf, sizeof *buf, chars_read, tmpfp)) + write_fatal (); + if (ed_command_letter != 'd' && ed_command_letter != 's') { + p_pass_comments_through = true; + while ((chars_read = get_line ()) != 0) { +- if (pipefp) +- if (! fwrite (buf, sizeof *buf, chars_read, pipefp)) ++ if (tmpfp) ++ if (! fwrite (buf, sizeof *buf, chars_read, tmpfp)) + write_fatal (); + if (chars_read == 2 && strEQ (buf, ".\n")) + break; +@@ -2437,13 +2442,49 @@ do_ed_script (char const *inname, char const *outname, + break; + } + } +- if (!pipefp) ++ if (!tmpfp) + return; +- if (fwrite ("w\nq\n", sizeof (char), (size_t) 4, pipefp) == 0 +- || fflush (pipefp) != 0) ++ if (fwrite ("w\nq\n", sizeof (char), (size_t) 4, tmpfp) == 0 ++ || fflush (tmpfp) != 0) + write_fatal (); +- if (pclose (pipefp) != 0) +- fatal ("%s FAILED", editor_program); ++ ++ if (lseek (tmpfd, 0, SEEK_SET) == -1) ++ pfatal ("Can't rewind to the beginning of file %s", quotearg (tmpname)); ++ ++ if (! dry_run && ! skip_rest_of_patch) { ++ int exclusive = *outname_needs_removal ? 0 : O_EXCL; ++ *outname_needs_removal = true; ++ if (inerrno != ENOENT) ++ { ++ *outname_needs_removal = true; ++ copy_file (inname, outname, 0, exclusive, instat.st_mode, true); ++ } ++ sprintf (buf, "%s %s%s", editor_program, ++ verbosity == VERBOSE ? "" : "- ", ++ outname); ++ fflush (stdout); ++ ++ pid = fork(); ++ if (pid == -1) ++ pfatal ("Can't fork"); ++ else if (pid == 0) ++ { ++ dup2 (tmpfd, 0); ++ execl ("/bin/sh", "sh", "-c", buf, (char *) 0); ++ _exit (2); ++ } ++ else ++ { ++ int wstatus; ++ if (waitpid (pid, &wstatus, 0) == -1 ++ || ! WIFEXITED (wstatus) ++ || WEXITSTATUS (wstatus) != 0) ++ fatal ("%s FAILED", editor_program); ++ } ++ } ++ ++ fclose (tmpfp); ++ safe_unlink (tmpname); + + if (ofp) + { +-- +2.16.3 + diff --git a/package/patch/0004-Invoke-ed-directly-instead-of-using-the-shell.patch b/package/patch/0004-Invoke-ed-directly-instead-of-using-the-shell.patch new file mode 100644 index 00000000..ae64d58b --- /dev/null +++ b/package/patch/0004-Invoke-ed-directly-instead-of-using-the-shell.patch @@ -0,0 +1,41 @@ +From 3fcd042d26d70856e826a42b5f93dc4854d80bf0 Mon Sep 17 00:00:00 2001 +From: Andreas Gruenbacher +Date: Fri, 6 Apr 2018 19:36:15 +0200 +Subject: Invoke ed directly instead of using the shell + +* src/pch.c (do_ed_script): Invoke ed directly instead of using a shell +command to avoid quoting vulnerabilities. +[Retrieved from: +https://git.savannah.gnu.org/cgit/patch.git/commit/?id=3fcd042d26d70856e826a42b5f93dc4854d80bf0] +Signed-off-by: Fabrice Fontaine +--- + src/pch.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/src/pch.c b/src/pch.c +index 4fd5a05..16e001a 100644 +--- a/src/pch.c ++++ b/src/pch.c +@@ -2459,9 +2459,6 @@ do_ed_script (char const *inname, char const *outname, + *outname_needs_removal = true; + copy_file (inname, outname, 0, exclusive, instat.st_mode, true); + } +- sprintf (buf, "%s %s%s", editor_program, +- verbosity == VERBOSE ? "" : "- ", +- outname); + fflush (stdout); + + pid = fork(); +@@ -2470,7 +2467,8 @@ do_ed_script (char const *inname, char const *outname, + else if (pid == 0) + { + dup2 (tmpfd, 0); +- execl ("/bin/sh", "sh", "-c", buf, (char *) 0); ++ assert (outname[0] != '!' && outname[0] != '-'); ++ execlp (editor_program, editor_program, "-", outname, (char *) NULL); + _exit (2); + } + else +-- +cgit v1.2.1 + diff --git a/package/patch/0005-Don-t-follow-symlinks-unless--follow-symlinks-is-given.patch b/package/patch/0005-Don-t-follow-symlinks-unless--follow-symlinks-is-given.patch new file mode 100644 index 00000000..e07ae0c6 --- /dev/null +++ b/package/patch/0005-Don-t-follow-symlinks-unless--follow-symlinks-is-given.patch @@ -0,0 +1,111 @@ +From dce4683cbbe107a95f1f0d45fabc304acfb5d71a Mon Sep 17 00:00:00 2001 +From: Andreas Gruenbacher +Date: Mon, 15 Jul 2019 16:21:48 +0200 +Subject: Don't follow symlinks unless --follow-symlinks is given + +* src/inp.c (plan_a, plan_b), src/util.c (copy_to_fd, copy_file, +append_to_file): Unless the --follow-symlinks option is given, open files with +the O_NOFOLLOW flag to avoid following symlinks. So far, we were only doing +that consistently for input files. +* src/util.c (create_backup): When creating empty backup files, (re)create them +with O_CREAT | O_EXCL to avoid following symlinks in that case as well. +[Retrieved from: +https://git.savannah.gnu.org/cgit/patch.git/commit/?id=dce4683cbbe107a95f1f0d45fabc304acfb5d71a] +Signed-off-by: Fabrice Fontaine +--- + src/inp.c | 12 ++++++++++-- + src/util.c | 14 +++++++++++--- + 2 files changed, 21 insertions(+), 5 deletions(-) + +diff --git a/src/inp.c b/src/inp.c +index 32d0919..22d7473 100644 +--- a/src/inp.c ++++ b/src/inp.c +@@ -238,8 +238,13 @@ plan_a (char const *filename) + { + if (S_ISREG (instat.st_mode)) + { +- int ifd = safe_open (filename, O_RDONLY|binary_transput, 0); ++ int flags = O_RDONLY | binary_transput; + size_t buffered = 0, n; ++ int ifd; ++ ++ if (! follow_symlinks) ++ flags |= O_NOFOLLOW; ++ ifd = safe_open (filename, flags, 0); + if (ifd < 0) + pfatal ("can't open file %s", quotearg (filename)); + +@@ -340,6 +345,7 @@ plan_a (char const *filename) + static void + plan_b (char const *filename) + { ++ int flags = O_RDONLY | binary_transput; + int ifd; + FILE *ifp; + int c; +@@ -353,7 +359,9 @@ plan_b (char const *filename) + + if (instat.st_size == 0) + filename = NULL_DEVICE; +- if ((ifd = safe_open (filename, O_RDONLY | binary_transput, 0)) < 0 ++ if (! follow_symlinks) ++ flags |= O_NOFOLLOW; ++ if ((ifd = safe_open (filename, flags, 0)) < 0 + || ! (ifp = fdopen (ifd, binary_transput ? "rb" : "r"))) + pfatal ("Can't open file %s", quotearg (filename)); + if (TMPINNAME_needs_removal) +diff --git a/src/util.c b/src/util.c +index 1cc08ba..fb38307 100644 +--- a/src/util.c ++++ b/src/util.c +@@ -388,7 +388,7 @@ create_backup (char const *to, const struct stat *to_st, bool leave_original) + + try_makedirs_errno = ENOENT; + safe_unlink (bakname); +- while ((fd = safe_open (bakname, O_CREAT | O_WRONLY | O_TRUNC, 0666)) < 0) ++ while ((fd = safe_open (bakname, O_CREAT | O_EXCL | O_WRONLY | O_TRUNC, 0666)) < 0) + { + if (errno != try_makedirs_errno) + pfatal ("Can't create file %s", quotearg (bakname)); +@@ -579,10 +579,13 @@ create_file (char const *file, int open_flags, mode_t mode, + static void + copy_to_fd (const char *from, int tofd) + { ++ int from_flags = O_RDONLY | O_BINARY; + int fromfd; + ssize_t i; + +- if ((fromfd = safe_open (from, O_RDONLY | O_BINARY, 0)) < 0) ++ if (! follow_symlinks) ++ from_flags |= O_NOFOLLOW; ++ if ((fromfd = safe_open (from, from_flags, 0)) < 0) + pfatal ("Can't reopen file %s", quotearg (from)); + while ((i = read (fromfd, buf, bufsize)) != 0) + { +@@ -625,6 +628,8 @@ copy_file (char const *from, char const *to, struct stat *tost, + else + { + assert (S_ISREG (mode)); ++ if (! follow_symlinks) ++ to_flags |= O_NOFOLLOW; + tofd = create_file (to, O_WRONLY | O_BINARY | to_flags, mode, + to_dir_known_to_exist); + copy_to_fd (from, tofd); +@@ -640,9 +645,12 @@ copy_file (char const *from, char const *to, struct stat *tost, + void + append_to_file (char const *from, char const *to) + { ++ int to_flags = O_WRONLY | O_APPEND | O_BINARY; + int tofd; + +- if ((tofd = safe_open (to, O_WRONLY | O_BINARY | O_APPEND, 0)) < 0) ++ if (! follow_symlinks) ++ to_flags |= O_NOFOLLOW; ++ if ((tofd = safe_open (to, to_flags, 0)) < 0) + pfatal ("Can't reopen file %s", quotearg (to)); + copy_to_fd (from, tofd); + if (close (tofd) != 0) +-- +cgit v1.2.1 + diff --git a/package/patch/Config.in b/package/patch/Config.in new file mode 100644 index 00000000..13fa7bfc --- /dev/null +++ b/package/patch/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_PATCH + bool "patch" + depends on BR2_USE_MMU # fork() + depends on BR2_USE_WCHAR + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + Take patch files (containing difference listings) and apply + them to original files, producing patched versions. + + http://www.gnu.org/software/patch/ + +comment "patch needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR + depends on BR2_USE_MMU + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS diff --git a/package/patch/patch.hash b/package/patch/patch.hash new file mode 100644 index 00000000..917d951a --- /dev/null +++ b/package/patch/patch.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 ac610bda97abe0d9f6b7c963255a11dcb196c25e337c61f94e4778d632f1d8fd patch-2.7.6.tar.xz +# Locally calculated +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/patch/patch.mk b/package/patch/patch.mk new file mode 100644 index 00000000..6f83d241 --- /dev/null +++ b/package/patch/patch.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# patch +# +################################################################################ + +PATCH_VERSION = 2.7.6 +PATCH_SOURCE = patch-$(PATCH_VERSION).tar.xz +PATCH_SITE = $(BR2_GNU_MIRROR)/patch +PATCH_LICENSE = GPL-3.0+ +PATCH_LICENSE_FILES = COPYING +PATCH_CPE_ID_VENDOR = gnu + +# 0001-Fix-segfault-with-mangled-rename-patch.patch +PATCH_IGNORE_CVES += CVE-2018-6951 + +# 0003-Fix-arbitrary-command-execution-in-ed-style-patches-.patch +PATCH_IGNORE_CVES += CVE-2018-1000156 + +# 0004-Invoke-ed-directly-instead-of-using-the-shell.patch +PATCH_IGNORE_CVES += CVE-2018-20969 CVE-2019-13638 + +# 0005-Don-t-follow-symlinks-unless--follow-symlinks-is-given.patch +PATCH_IGNORE_CVES += CVE-2019-13636 + +ifeq ($(BR2_PACKAGE_ATTR),y) +PATCH_CONF_OPTS += --enable-xattr +PATCH_DEPENDENCIES += attr +else +PATCH_CONF_OPTS += --disable-xattr +endif + +$(eval $(autotools-package)) diff --git a/package/patchelf/0001-Remove-apparently-incorrect-usage-of-static.patch b/package/patchelf/0001-Remove-apparently-incorrect-usage-of-static.patch new file mode 100644 index 00000000..dc462eff --- /dev/null +++ b/package/patchelf/0001-Remove-apparently-incorrect-usage-of-static.patch @@ -0,0 +1,56 @@ +From 2480efa8411523cf046094492192a5ee451aae5d Mon Sep 17 00:00:00 2001 +From: Eelco Dolstra +Date: Mon, 19 Sep 2016 17:31:37 +0200 +Subject: [PATCH] Remove apparently incorrect usage of "static" + +[Upstream-commit: https://github.com/NixOS/patchelf/commit/a365bcb7d7025da51b33165ef7ebc7180199a05e +This patch also removes the DT_INIT symbols from needed_libs (DT_INIT +points to library initialisation function, not to needed libraries...)] +Signed-off-by: Wolfgang Grandegger +--- + src/patchelf.cc | 8 +++----- + 1 file changed, 3 insertions(+), 5 deletions(-) + +diff --git a/src/patchelf.cc b/src/patchelf.cc +index 136098f..c870638 100644 +--- a/src/patchelf.cc ++++ b/src/patchelf.cc +@@ -941,7 +941,6 @@ void ElfFile::modifySoname(sonameMode op, const string & newS + assert(strTabAddr == rdi(shdrDynStr.sh_addr)); + + /* Walk through the dynamic section, look for the DT_SONAME entry. */ +- static vector neededLibs; + dyn = (Elf_Dyn *) (contents + rdi(shdrDynamic.sh_offset)); + Elf_Dyn * dynSoname = 0; + char * soname = 0; +@@ -949,8 +948,7 @@ void ElfFile::modifySoname(sonameMode op, const string & newS + if (rdi(dyn->d_tag) == DT_SONAME) { + dynSoname = dyn; + soname = strTab + rdi(dyn->d_un.d_val); +- } else if (rdi(dyn->d_tag) == DT_INIT) +- neededLibs.push_back(string(strTab + rdi(dyn->d_un.d_val))); ++ } + } + + if (op == printSoname) { +@@ -1058,7 +1056,7 @@ void ElfFile::modifyRPath(RPathOp op, string newRPath) + unless you use its `--enable-new-dtag' option, in which case it + generates a DT_RPATH and DT_RUNPATH pointing at the same + string. */ +- static vector neededLibs; ++ vector neededLibs; + dyn = (Elf_Dyn *) (contents + rdi(shdrDynamic.sh_offset)); + Elf_Dyn * dynRPath = 0, * dynRunPath = 0; + char * rpath = 0; +@@ -1091,7 +1089,7 @@ void ElfFile::modifyRPath(RPathOp op, string newRPath) + /* For each directory in the RPATH, check if it contains any + needed library. */ + if (op == rpShrink) { +- static vector neededLibFound(neededLibs.size(), false); ++ vector neededLibFound(neededLibs.size(), false); + + newRPath = ""; + +-- +1.9.1 + diff --git a/package/patchelf/0002-Extract-a-function-for-splitting-a-colon-separated-s.patch b/package/patchelf/0002-Extract-a-function-for-splitting-a-colon-separated-s.patch new file mode 100644 index 00000000..330bea23 --- /dev/null +++ b/package/patchelf/0002-Extract-a-function-for-splitting-a-colon-separated-s.patch @@ -0,0 +1,63 @@ +From a8452dc7e80eb17572c7458e33a4f4d609e6a3da Mon Sep 17 00:00:00 2001 +From: Tuomas Tynkkynen +Date: Fri, 3 Jun 2016 23:03:51 +0300 +Subject: [PATCH] Extract a function for splitting a colon-separated string + +We're going to need this logic in another place, so make a function of +this. + +[Upstream-commit: https://github.com/NixOS/patchelf/commit/2e3fdc2030c75c19df6fc2924083cfad53856562] +Signed-off-by: Wolfgang Grandegger +--- + src/patchelf.cc | 28 +++++++++++++++++++--------- + 1 file changed, 19 insertions(+), 9 deletions(-) + +diff --git a/src/patchelf.cc b/src/patchelf.cc +index c870638..1d9a772 100644 +--- a/src/patchelf.cc ++++ b/src/patchelf.cc +@@ -57,6 +57,22 @@ unsigned char * contents = 0; + #define ElfFileParamNames Elf_Ehdr, Elf_Phdr, Elf_Shdr, Elf_Addr, Elf_Off, Elf_Dyn, Elf_Sym + + ++static vector splitColonDelimitedString(const char * s){ ++ vector parts; ++ const char * pos = s; ++ while (*pos) { ++ const char * end = strchr(pos, ':'); ++ if (!end) end = strchr(pos, 0); ++ ++ parts.push_back(string(pos, end - pos)); ++ if (*end == ':') ++end; ++ pos = end; ++ } ++ ++ return parts; ++} ++ ++ + static unsigned int getPageSize(){ + return pageSize; + } +@@ -1093,15 +1109,9 @@ void ElfFile::modifyRPath(RPathOp op, string newRPath) + + newRPath = ""; + +- char * pos = rpath; +- while (*pos) { +- char * end = strchr(pos, ':'); +- if (!end) end = strchr(pos, 0); +- +- /* Get the name of the directory. */ +- string dirName(pos, end - pos); +- if (*end == ':') ++end; +- pos = end; ++ vector rpathDirs = splitColonDelimitedString(rpath); ++ for (vector::iterator it = rpathDirs.begin(); it != rpathDirs.end(); ++it) { ++ const string & dirName = *it; + + /* Non-absolute entries are allowed (e.g., the special + "$ORIGIN" hack). */ +-- +1.9.1 + diff --git a/package/patchelf/0003-Add-option-to-make-the-rpath-relative-under-a-specif.patch b/package/patchelf/0003-Add-option-to-make-the-rpath-relative-under-a-specif.patch new file mode 100644 index 00000000..f9f2537a --- /dev/null +++ b/package/patchelf/0003-Add-option-to-make-the-rpath-relative-under-a-specif.patch @@ -0,0 +1,326 @@ +From 618220bfb55c875d6a4d197cb24fe632ac93ec85 Mon Sep 17 00:00:00 2001 +From: Wolfgang Grandegger +Date: Mon, 20 Feb 2017 16:29:24 +0100 +Subject: [PATCH] Add option to make the rpath relative under a specified root + directory + +Running "patchelf" with the option "--make-rpath-relative ROOTDIR" will +modify or delete the RPATHDIRs according the following rules +similar to Martin's patches [1] making the Buildroot toolchaing/SDK +relocatable. + +RPATHDIR starts with "$ORIGIN": + The original build-system already took care of setting a relative + RPATH, resolve it and test if it's valid (does exist) + +RPATHDIR starts with ROOTDIR: + The original build-system added some absolute RPATH (absolute on + the build machine). Test if it's valid (does exist). + +ROOTDIR/RPATHDIR exists: + The original build-system already took care of setting an absolute + RPATH (absolute in the final rootfs), resolve it and test if it's + valid (does exist). + +RPATHDIR points somewhere else: + (can be anywhere: build trees, staging tree, host location, + non-existing location, etc.). Just discard such a path. + +The option "--no-standard-libs" will discard RPATHDIRs ROOTDIR/lib and +ROOTDIR/usr/lib. Like "--shrink-rpath", RPATHDIRs are also discarded +if the directories do not contain a library referenced by the +DT_NEEDED fields. +If the option "--relative-to-file" is given, the rpath will start +with "$ORIGIN" making it relative to the ELF file, otherwise an +absolute path relative to ROOTDIR will be used. + +A pull request for a similar patch [2] for mainline inclusion is +pending. + +[1] http://lists.busybox.net/pipermail/buildroot/2016-April/159422.html +[2] https://github.com/NixOS/patchelf/pull/118 + +Signed-off-by: Wolfgang Grandegger +--- + src/patchelf.cc | 196 ++++++++++++++++++++++++++++++++++++++++++++++++++------ + 1 file changed, 175 insertions(+), 21 deletions(-) + +diff --git a/src/patchelf.cc b/src/patchelf.cc +index 1d9a772..35b4a33 100644 +--- a/src/patchelf.cc ++++ b/src/patchelf.cc +@@ -46,6 +46,10 @@ static bool debugMode = false; + + static bool forceRPath = false; + ++static bool noStandardLibDirs = false; ++ ++static bool relativeToFile = false; ++ + static string fileName; + static int pageSize = PAGESIZE; + +@@ -77,6 +81,49 @@ static unsigned int getPageSize(){ + return pageSize; + } + ++static bool absolutePathExists(const string & path, string & canonicalPath) ++{ ++ char *cpath = realpath(path.c_str(), NULL); ++ if (cpath) { ++ canonicalPath = cpath; ++ free(cpath); ++ return true; ++ } else { ++ return false; ++ } ++} ++ ++static string makePathRelative(const string & path, ++ const string & refPath) ++{ ++ string relPath = "$ORIGIN"; ++ string p = path, refP = refPath; ++ size_t pos; ++ ++ /* Strip the common part of path and refPath */ ++ while (true) { ++ pos = p.find_first_of('/', 1); ++ if (refP.find_first_of('/', 1) != pos) ++ break; ++ if (p.substr(0, pos) != refP.substr(0, pos)) ++ break; ++ if (pos == string::npos) ++ break; ++ p = p.substr(pos); ++ refP = refP.substr(pos); ++ } ++ /* Check if both pathes are equal */ ++ if (p != refP) { ++ pos = 0; ++ while (pos != string::npos) { ++ pos =refP.find_first_of('/', pos + 1); ++ relPath.append("/.."); ++ } ++ relPath.append(p); ++ } ++ ++ return relPath; ++} + + template + class ElfFile +@@ -183,9 +230,13 @@ public: + + void setInterpreter(const string & newInterpreter); + +- typedef enum { rpPrint, rpShrink, rpSet, rpRemove } RPathOp; ++ typedef enum { rpPrint, rpShrink, rpMakeRelative, rpSet, rpRemove} RPathOp; ++ ++ bool libFoundInRPath(const string & dirName, ++ const vector neededLibs, ++ vector & neededLibFound); + +- void modifyRPath(RPathOp op, string newRPath); ++ void modifyRPath(RPathOp op, string rootDir, string newRPath); + + void addNeeded(set libs); + +@@ -1041,7 +1092,27 @@ static void concatToRPath(string & rpath, const string & path) + + + template +-void ElfFile::modifyRPath(RPathOp op, string newRPath) ++bool ElfFile::libFoundInRPath(const string & dirName, ++ const vector neededLibs, vector & neededLibFound) ++{ ++ /* For each library that we haven't found yet, see if it ++ exists in this directory. */ ++ bool libFound = false; ++ for (unsigned int j = 0; j < neededLibs.size(); ++j) ++ if (!neededLibFound[j]) { ++ string libName = dirName + "/" + neededLibs[j]; ++ struct stat st; ++ if (stat(libName.c_str(), &st) == 0) { ++ neededLibFound[j] = true; ++ libFound = true; ++ } ++ } ++ return libFound; ++} ++ ++ ++template ++void ElfFile::modifyRPath(RPathOp op, string rootDir, string newRPath) + { + Elf_Shdr & shdrDynamic = findSection(".dynamic"); + +@@ -1096,6 +1167,11 @@ void ElfFile::modifyRPath(RPathOp op, string newRPath) + return; + } + ++ if (op == rpMakeRelative && !rpath) { ++ debug("no RPATH to make relative\n"); ++ return; ++ } ++ + if (op == rpShrink && !rpath) { + debug("no RPATH to shrink\n"); + return; +@@ -1120,26 +1196,80 @@ void ElfFile::modifyRPath(RPathOp op, string newRPath) + continue; + } + +- /* For each library that we haven't found yet, see if it +- exists in this directory. */ +- bool libFound = false; +- for (unsigned int j = 0; j < neededLibs.size(); ++j) +- if (!neededLibFound[j]) { +- string libName = dirName + "/" + neededLibs[j]; +- struct stat st; +- if (stat(libName.c_str(), &st) == 0) { +- neededLibFound[j] = true; +- libFound = true; +- } +- } +- +- if (!libFound) ++ if (!libFoundInRPath(dirName, neededLibs, neededLibFound)) + debug("removing directory `%s' from RPATH\n", dirName.c_str()); + else + concatToRPath(newRPath, dirName); + } + } + ++ /* Make the the RPATH relative to the specified path */ ++ if (op == rpMakeRelative) { ++ vector neededLibFound(neededLibs.size(), false); ++ string fileDir = fileName.substr(0, fileName.find_last_of("/")); ++ ++ newRPath = ""; ++ ++ vector rpathDirs = splitColonDelimitedString(rpath); ++ for (vector::iterator it = rpathDirs.begin(); it != rpathDirs.end(); ++it) { ++ const string & dirName = *it; ++ ++ string canonicalPath; ++ ++ /* Figure out if we should keep or discard the path. There are several ++ cases to be handled: ++ "dirName" starts with "$ORIGIN": ++ The original build-system already took care of setting a relative ++ RPATH. Resolve it and test if it's valid (does exist). ++ "dirName" start with "rootDir": ++ The original build-system added some absolute RPATH (absolute on ++ the build machine). Test if it's valid (does exist). ++ "rootDir"/"dirName" exists: ++ The original build-system already took care of setting an absolute ++ RPATH (absolute in the final rootfs). Resolve it and test if it's ++ valid (does exist). ++ "dirName" points somewhere else: ++ (can be anywhere: build trees, staging tree, host location, ++ non-existing location, etc.). Just discard such a path. */ ++ if (!dirName.compare(0, 7, "$ORIGIN")) { ++ string path = fileDir + dirName.substr(7); ++ if (!absolutePathExists(path, canonicalPath)) { ++ debug("removing directory '%s' from RPATH because '%s' doesn't exist\n", ++ dirName.c_str(), path.c_str()); ++ continue; ++ } ++ } else if (!dirName.compare(0, rootDir.length(), rootDir)) { ++ if (!absolutePathExists(dirName, canonicalPath)) { ++ debug("removing directory '%s' from RPATH because it doesn't exist\n", dirName.c_str()); ++ continue; ++ } ++ } else { ++ string path = rootDir + dirName; ++ if (!absolutePathExists(path, canonicalPath)) { ++ debug("removing directory '%s' from RPATH because it's not in rootdir\n", ++ dirName.c_str()); ++ continue; ++ } ++ } ++ ++ if (noStandardLibDirs) { ++ if (!canonicalPath.compare(rootDir + "/lib") || ++ !canonicalPath.compare(rootDir + "/usr/lib")) { ++ debug("removing directory '%s' from RPATH because it's a standard library directory\n", ++ dirName.c_str()); ++ continue; ++ } ++ } ++ ++ /* Finally make "canonicalPath" relative to "filedir" in "rootDir" */ ++ if (relativeToFile) ++ concatToRPath(newRPath, makePathRelative(canonicalPath, fileDir)); ++ else ++ concatToRPath(newRPath, canonicalPath.substr(rootDir.length())); ++ debug("keeping relative path of %s\n", canonicalPath.c_str()); ++ } ++ } ++ + if (op == rpRemove) { + if (!rpath) { + debug("no RPATH to delete\n"); +@@ -1413,7 +1543,9 @@ static bool shrinkRPath = false; + static bool removeRPath = false; + static bool setRPath = false; + static bool printRPath = false; ++static bool makeRPathRelative = false; + static string newRPath; ++static string rootDir; + static set neededLibsToRemove; + static map neededLibsToReplace; + static set neededLibsToAdd; +@@ -1438,14 +1570,16 @@ static void patchElf2(ElfFile & elfFile) + elfFile.setInterpreter(newInterpreter); + + if (printRPath) +- elfFile.modifyRPath(elfFile.rpPrint, ""); ++ elfFile.modifyRPath(elfFile.rpPrint, "", ""); + + if (shrinkRPath) +- elfFile.modifyRPath(elfFile.rpShrink, ""); ++ elfFile.modifyRPath(elfFile.rpShrink, "", ""); + else if (removeRPath) +- elfFile.modifyRPath(elfFile.rpRemove, ""); ++ elfFile.modifyRPath(elfFile.rpRemove, "", ""); + else if (setRPath) +- elfFile.modifyRPath(elfFile.rpSet, newRPath); ++ elfFile.modifyRPath(elfFile.rpSet, "", newRPath); ++ else if (makeRPathRelative) ++ elfFile.modifyRPath(elfFile.rpMakeRelative, rootDir, ""); + + if (printNeeded) elfFile.printNeededLibs(); + +@@ -1508,6 +1642,9 @@ void showHelp(const string & progName) + [--set-rpath RPATH]\n\ + [--remove-rpath]\n\ + [--shrink-rpath]\n\ ++ [--make-rpath-relative ROOTDIR]\n\ ++ [--no-standard-lib-dirs]\n\ ++ [--relative-to-file]\n\ + [--print-rpath]\n\ + [--force-rpath]\n\ + [--add-needed LIBRARY]\n\ +@@ -1564,6 +1701,17 @@ int main(int argc, char * * argv) + setRPath = true; + newRPath = argv[i]; + } ++ else if (arg == "--make-rpath-relative") { ++ if (++i == argc) error("missing argument to --make-rpath-relative"); ++ makeRPathRelative = true; ++ rootDir = argv[i]; ++ } ++ else if (arg == "--no-standard-lib-dirs") { ++ noStandardLibDirs = true; ++ } ++ else if (arg == "--relative-to-file") { ++ relativeToFile = true; ++ } + else if (arg == "--print-rpath") { + printRPath = true; + } +-- +1.9.1 + diff --git a/package/patchelf/0004-patchelf-Check-ELF-endianness-before-writing-new-run.patch b/package/patchelf/0004-patchelf-Check-ELF-endianness-before-writing-new-run.patch new file mode 100644 index 00000000..8a89d3a6 --- /dev/null +++ b/package/patchelf/0004-patchelf-Check-ELF-endianness-before-writing-new-run.patch @@ -0,0 +1,40 @@ +From 8c75599b674c73fbfe9c15afeccad54ae88243f5 Mon Sep 17 00:00:00 2001 +From: Bryce Ferguson +Date: Mon, 25 Jun 2018 13:05:07 -0500 +Subject: [PATCH] patchelf: Check ELF endianness before writing new runpath + +This commit modifies the way fields are written in the dynamic +section in order to account the architecture of the target ELF +file. Instead of copying the raw data, use the helper functions +to convert endianness. + +Link to upstream PR: https://github.com/NixOS/patchelf/pull/151 + +Signed-off-by: Bryce Ferguson +--- + src/patchelf.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/patchelf.cc b/src/patchelf.cc +index 35b4a33..a33f644 100644 +--- a/src/patchelf.cc ++++ b/src/patchelf.cc +@@ -1315,13 +1315,13 @@ void ElfFile::modifyRPath(RPathOp op, string rootDir, string + debug("new rpath is `%s'\n", newRPath.c_str()); + + if (!forceRPath && dynRPath && !dynRunPath) { /* convert DT_RPATH to DT_RUNPATH */ +- dynRPath->d_tag = DT_RUNPATH; ++ wri(dynRPath->d_tag, DT_RUNPATH); + dynRunPath = dynRPath; + dynRPath = 0; + } + + if (forceRPath && dynRPath && dynRunPath) { /* convert DT_RUNPATH to DT_RPATH */ +- dynRunPath->d_tag = DT_IGNORE; ++ wri(dynRunPath->d_tag, DT_IGNORE); + } + + if (newRPath.size() <= rpathSize) { +-- +2.17.0 + diff --git a/package/patchelf/0005-Avoid-inflating-file-sizes-needlessly-and-allow-bina.patch b/package/patchelf/0005-Avoid-inflating-file-sizes-needlessly-and-allow-bina.patch new file mode 100644 index 00000000..0d7931cd --- /dev/null +++ b/package/patchelf/0005-Avoid-inflating-file-sizes-needlessly-and-allow-bina.patch @@ -0,0 +1,176 @@ +From 79c093226e609b99fa889f6e37480b92b399610d Mon Sep 17 00:00:00 2001 +From: Richard Purdie +Date: Tue, 7 Mar 2017 21:08:34 +0000 +Subject: [PATCH] Avoid inflating file sizes needlessly and allow binaries to + be stripped + +The current approach to changing sections in ET_DYN executables is to move +the INTERP section to the end of the file. +This means changing PT_PHDR to +add an extra PT_LOAD section so that the new section is mmaped into memory +by the elf loader in the kernel. In order to extend PHDR, this means moving +it to the end of the file. + +Its documented in BUGS there is a kernel 'bug' which means that if you have holes +in memory between the base load address and the PT_LOAD segment that contains PHDR, +it will pass an incorrect PHDR address to ld.so and fail to load the binary, segfaulting. + +To avoid this, the code currently inserts space into the binary to ensure that when +loaded into memory there are no holes between the PT_LOAD sections. This inflates the +binaries by many MBs in some cases. Whilst we could make them sparse, there is a second +issue which is that strip can fail to process these binaries: + +$ strip fixincl +Not enough room for program headers, try linking with -N +[.note.ABI-tag]: Bad value + +This turns out to be due to libbfd not liking the relocated PHDR section either +(https://github.com/NixOS/patchelf/issues/10). + +Instead this patch implements a different approach, leaving PHDR where it is but extending +it in place to allow addition of a new PT_LOAD section. This overwrites sections in the +binary but those get moved to the end of the file in the new PT_LOAD section. + +This is based on patches linked from the above github issue, however whilst the idea +was good, the implementation wasn't correct and they've been rewritten here. + +Signed-off-by: Richard Purdie + +Fetch from: https://github.com/NixOS/patchelf/commit/c4deb5e9e1ce9c98a48e0d5bb37d87739b8cfee4 + +Backported to v0.9 + +Signed-off-by: Conrad Ratschan +--- + src/patchelf.cc | 71 ++++++++++++++++++++++++++++--------------------- + 1 file changed, 40 insertions(+), 31 deletions(-) + +diff --git a/src/patchelf.cc b/src/patchelf.cc +index 1d58061..c2147af 100644 +--- a/src/patchelf.cc ++++ b/src/patchelf.cc +@@ -209,6 +209,8 @@ private: + string & replaceSection(const SectionName & sectionName, + unsigned int size); + ++ bool haveReplacedSection(const SectionName & sectionName); ++ + void writeReplacedSections(Elf_Off & curOff, + Elf_Addr startAddr, Elf_Off startOffset); + +@@ -632,6 +634,15 @@ void ElfFile::writeReplacedSections(Elf_Off & curOff, + replacedSections.clear(); + } + ++template ++bool ElfFile::haveReplacedSection(const SectionName & sectionName) ++{ ++ ReplacedSections::iterator i = replacedSections.find(sectionName); ++ ++ if (i != replacedSections.end()) ++ return true; ++ return false; ++} + + template + void ElfFile::rewriteSectionsLibrary() +@@ -648,52 +659,53 @@ void ElfFile::rewriteSectionsLibrary() + + debug("last page is 0x%llx\n", (unsigned long long) startPage); + ++ /* Because we're adding a new section header, we're necessarily increasing ++ the size of the program header table. This can cause the first section ++ to overlap the program header table in memory; we need to shift the first ++ few segments to someplace else. */ ++ /* Some sections may already be replaced so account for that */ ++ unsigned int i = 1; ++ Elf_Addr pht_size = sizeof(Elf_Ehdr) + (phdrs.size() + 1)*sizeof(Elf_Phdr); ++ while( shdrs[i].sh_addr <= pht_size && i < rdi(hdr->e_shnum) ) { ++ if (not haveReplacedSection(getSectionName(shdrs[i]))) ++ replaceSection(getSectionName(shdrs[i]), shdrs[i].sh_size); ++ i++; ++ } + +- /* Compute the total space needed for the replaced sections and +- the program headers. */ +- off_t neededSpace = (phdrs.size() + 1) * sizeof(Elf_Phdr); ++ /* Compute the total space needed for the replaced sections */ ++ off_t neededSpace = 0; + for (ReplacedSections::iterator i = replacedSections.begin(); + i != replacedSections.end(); ++i) + neededSpace += roundUp(i->second.size(), sectionAlignment); + debug("needed space is %d\n", neededSpace); + +- + size_t startOffset = roundUp(fileSize, getPageSize()); + + growFile(startOffset + neededSpace); + +- + /* Even though this file is of type ET_DYN, it could actually be + an executable. For instance, Gold produces executables marked +- ET_DYN. In that case we can still hit the kernel bug that +- necessitated rewriteSectionsExecutable(). However, such +- executables also tend to start at virtual address 0, so ++ ET_DYN as does LD when linking with pie. If we move PT_PHDR, it ++ has to stay in the first PT_LOAD segment or any subsequent ones ++ if they're continuous in memory due to linux kernel constraints ++ (see BUGS). Since the end of the file would be after bss, we can't ++ move PHDR there, we therefore choose to leave PT_PHDR where it is but ++ move enough following sections such that we can add the extra PT_LOAD ++ section to it. This PT_LOAD segment ensures the sections at the end of ++ the file are mapped into memory for ld.so to process. ++ We can't use the approach in rewriteSectionsExecutable() ++ since DYN executables tend to start at virtual address 0, so + rewriteSectionsExecutable() won't work because it doesn't have +- any virtual address space to grow downwards into. As a +- workaround, make sure that the virtual address of our new +- PT_LOAD segment relative to the first PT_LOAD segment is equal +- to its offset; otherwise we hit the kernel bug. This may +- require creating a hole in the executable. The bigger the size +- of the uninitialised data segment, the bigger the hole. */ ++ any virtual address space to grow downwards into. */ + if (isExecutable) { + if (startOffset >= startPage) { + debug("shifting new PT_LOAD segment by %d bytes to work around a Linux kernel bug\n", startOffset - startPage); +- } else { +- size_t hole = startPage - startOffset; +- /* Print a warning, because the hole could be very big. */ +- fprintf(stderr, "warning: working around a Linux kernel bug by creating a hole of %zu bytes in ‘%s’\n", hole, fileName.c_str()); +- assert(hole % getPageSize() == 0); +- /* !!! We could create an actual hole in the file here, +- but it's probably not worth the effort. */ +- growFile(fileSize + hole); +- startOffset += hole; + } + startPage = startOffset; + } + + +- /* Add a segment that maps the replaced sections and program +- headers into memory. */ ++ /* Add a segment that maps the replaced sections into memory. */ + phdrs.resize(rdi(hdr->e_phnum) + 1); + wri(hdr->e_phnum, rdi(hdr->e_phnum) + 1); + Elf_Phdr & phdr = phdrs[rdi(hdr->e_phnum) - 1]; +@@ -706,15 +718,12 @@ void ElfFile::rewriteSectionsLibrary() + + + /* Write out the replaced sections. */ +- Elf_Off curOff = startOffset + phdrs.size() * sizeof(Elf_Phdr); ++ Elf_Off curOff = startOffset; + writeReplacedSections(curOff, startPage, startOffset); + assert(curOff == startOffset + neededSpace); + +- +- /* Move the program header to the start of the new area. */ +- wri(hdr->e_phoff, startOffset); +- +- rewriteHeaders(startPage); ++ /* Write out the updated program and section headers */ ++ rewriteHeaders(hdr->e_phoff); + } + + +-- +2.17.1 + diff --git a/package/patchelf/0006-Fix-shared-library-corruption-when-rerunning-patchel.patch b/package/patchelf/0006-Fix-shared-library-corruption-when-rerunning-patchel.patch new file mode 100644 index 00000000..9fb3e260 --- /dev/null +++ b/package/patchelf/0006-Fix-shared-library-corruption-when-rerunning-patchel.patch @@ -0,0 +1,55 @@ +From 5df4791bf077127684faceeeea8bfab063e43774 Mon Sep 17 00:00:00 2001 +From: Richard Purdie +Date: Wed, 3 Jun 2020 12:14:58 +0100 +Subject: [PATCH] Fix shared library corruption when rerunning patchelf + +When running patchelf on some existing patchelf'd binaries to change to longer +RPATHS, ldd would report the binaries as invalid. The output of objdump -x on +those libraryies should show the top of the .dynamic section is getting trashed, +something like: + +0x600000001 0x0000000000429000 +0x335000 0x0000000000335000 +0xc740 0x000000000000c740 +0x1000 0x0000000000009098 +SONAME libglib-2.0.so.0 + +(which should be RPATH and DT_NEEDED entries) + +This was tracked down to the code which injects the PT_LOAD section. + +The issue is that if the program headers were previously relocated to the end +of the file which was how patchelf operated previously, the relocation code +wouldn't work properly on a second run as it now assumes they're located after +the elf header. This change forces them back to immediately follow the elf +header which is where the code has made space for them. + +Should fix https://github.com/NixOS/patchelf/issues/170 +and https://github.com/NixOS/patchelf/issues/192 + +Signed-off-by: Richard Purdie + +Fetch from: https://github.com/NixOS/patchelf/commit/ad5f1f078b716802dfb8f7226cb1d5c720348a78 + +Backported to v0.9 + +Signed-off-by: Conrad Ratschan +--- + src/patchelf.cc | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/patchelf.cc b/src/patchelf.cc +index c2147af..1224a89 100644 +--- a/src/patchelf.cc ++++ b/src/patchelf.cc +@@ -706,6 +706,7 @@ void ElfFile::rewriteSectionsLibrary() + + + /* Add a segment that maps the replaced sections into memory. */ ++ wri(hdr->e_phoff, sizeof(Elf_Ehdr)); + phdrs.resize(rdi(hdr->e_phnum) + 1); + wri(hdr->e_phnum, rdi(hdr->e_phnum) + 1); + Elf_Phdr & phdr = phdrs[rdi(hdr->e_phnum) - 1]; +-- +2.17.1 + diff --git a/package/patchelf/0007-fix-adjusting-startPage.patch b/package/patchelf/0007-fix-adjusting-startPage.patch new file mode 100644 index 00000000..fd044964 --- /dev/null +++ b/package/patchelf/0007-fix-adjusting-startPage.patch @@ -0,0 +1,45 @@ +From 4a82c97e8a0677706d1d532812daaa73249768a8 Mon Sep 17 00:00:00 2001 +From: Ed Bartosh +Date: Fri, 21 Jul 2017 12:33:53 +0300 +Subject: [PATCH] fix adjusting startPage + +startPage is adjusted unconditionally for all executables. +This results in incorrect addresses assigned to INTERP and LOAD +program headers, which breaks patched executable. + +Adjusting startPage variable only when startOffset > startPage +should fix this. + +This change is related to the issue NixOS#10 + +Signed-off-by: Ed Bartosh + +Fetch from: https://github.com/NixOS/patchelf/commit/1cc234fea5600190d872329aca60e2365cefc39e + +Backported to v0.9 + +Signed-off-by: Conrad Ratschan +--- + src/patchelf.cc | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/src/patchelf.cc b/src/patchelf.cc +index 1224a89..4676157 100644 +--- a/src/patchelf.cc ++++ b/src/patchelf.cc +@@ -697,10 +697,8 @@ void ElfFile::rewriteSectionsLibrary() + since DYN executables tend to start at virtual address 0, so + rewriteSectionsExecutable() won't work because it doesn't have + any virtual address space to grow downwards into. */ +- if (isExecutable) { +- if (startOffset >= startPage) { +- debug("shifting new PT_LOAD segment by %d bytes to work around a Linux kernel bug\n", startOffset - startPage); +- } ++ if (isExecutable && startOffset > startPage) { ++ debug("shifting new PT_LOAD segment by %d bytes to work around a Linux kernel bug\n", startOffset - startPage); + startPage = startOffset; + } + +-- +2.17.1 + diff --git a/package/patchelf/0008-Use-sh_offset-instead-of-sh_addr-when-checking-alrea.patch b/package/patchelf/0008-Use-sh_offset-instead-of-sh_addr-when-checking-alrea.patch new file mode 100644 index 00000000..d423cad2 --- /dev/null +++ b/package/patchelf/0008-Use-sh_offset-instead-of-sh_addr-when-checking-alrea.patch @@ -0,0 +1,38 @@ +From cb8326de54ad7a56658b0dc8efb7da5e71684a7c Mon Sep 17 00:00:00 2001 +From: Pablo Galindo +Date: Tue, 22 Sep 2020 01:33:47 +0100 +Subject: [PATCH] Use sh_offset instead of sh_addr when checking already + replaced libs + +When checking for already replaced libs, the check against the size must +be done using the section header offset, not the section file address. +This was not crashing in many situations because normally sh_address and +sh_offset have the same value but these two may differ and using the +sh_address value instead can cause library corruption in these +situations. + +Fetch from: https://github.com/NixOS/patchelf/commit/83aa89addf8757e2d63aa73222f2fa9bc6d7321a + +Backported to v0.9 + +Signed-off-by: Conrad Ratschan +--- + src/patchelf.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/patchelf.cc b/src/patchelf.cc +index 4676157..c025ae2 100644 +--- a/src/patchelf.cc ++++ b/src/patchelf.cc +@@ -666,7 +666,7 @@ void ElfFile::rewriteSectionsLibrary() + /* Some sections may already be replaced so account for that */ + unsigned int i = 1; + Elf_Addr pht_size = sizeof(Elf_Ehdr) + (phdrs.size() + 1)*sizeof(Elf_Phdr); +- while( shdrs[i].sh_addr <= pht_size && i < rdi(hdr->e_shnum) ) { ++ while( shdrs[i].sh_offset <= pht_size && i < rdi(hdr->e_shnum) ) { + if (not haveReplacedSection(getSectionName(shdrs[i]))) + replaceSection(getSectionName(shdrs[i]), shdrs[i].sh_size); + i++; +-- +2.17.1 + diff --git a/package/patchelf/0009-Fix-issue-66-by-ignoring-the-first-section-header-wh.patch b/package/patchelf/0009-Fix-issue-66-by-ignoring-the-first-section-header-wh.patch new file mode 100644 index 00000000..a820f2d1 --- /dev/null +++ b/package/patchelf/0009-Fix-issue-66-by-ignoring-the-first-section-header-wh.patch @@ -0,0 +1,41 @@ +From e22ca2f593aa8fd392f1ac4f8dd104bc56d0d100 Mon Sep 17 00:00:00 2001 +From: Ezra Cooper +Date: Thu, 21 Jun 2018 11:07:35 -0700 +Subject: [PATCH] Fix issue #66 by ignoring the first section header when + sorting, and not overwriting NOBITS entries. + +Fetch from: https://github.com/NixOS/patchelf/commit/52ab908394958a2a5d0476e306e2cad4da4fdeae + +Backported to v0.9 + +Signed-off-by: Conrad Ratschan +--- + src/patchelf.cc | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/src/patchelf.cc b/src/patchelf.cc +index c025ae2..fa2945e 100644 +--- a/src/patchelf.cc ++++ b/src/patchelf.cc +@@ -435,7 +435,7 @@ void ElfFile::sortShdrs() + /* Sort the sections by offset. */ + CompShdr comp; + comp.elfFile = this; +- sort(shdrs.begin(), shdrs.end(), comp); ++ sort(shdrs.begin() + 1, shdrs.end(), comp); + + /* Restore the sh_link mappings. */ + for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i) +@@ -586,7 +586,8 @@ void ElfFile::writeReplacedSections(Elf_Off & curOff, + { + string sectionName = i->first; + Elf_Shdr & shdr = findSection(sectionName); +- memset(contents + rdi(shdr.sh_offset), 'X', rdi(shdr.sh_size)); ++ if (shdr.sh_type != SHT_NOBITS) ++ memset(contents + rdi(shdr.sh_offset), 'X', rdi(shdr.sh_size)); + } + + for (ReplacedSections::iterator i = replacedSections.begin(); +-- +2.17.1 + diff --git a/package/patchelf/0010-Fix-endianness-issues-for-powerpc-PIE.patch b/package/patchelf/0010-Fix-endianness-issues-for-powerpc-PIE.patch new file mode 100644 index 00000000..6a3500b9 --- /dev/null +++ b/package/patchelf/0010-Fix-endianness-issues-for-powerpc-PIE.patch @@ -0,0 +1,80 @@ +From c61c2960d782c67566790b210163ff9c799f018a Mon Sep 17 00:00:00 2001 +From: Conrad Ratschan +Date: Sat, 3 Oct 2020 20:17:24 -0500 +Subject: [PATCH] Fix endianness issues for powerpc PIE + +Previously when running `patchelf --set-rpath "/usr/sbin" my_bin` on a +PIE ppc32 binary that had no RPATH a few issues were encountered. + +This commit fixes: + +1. The PT_PHDR being sorted improperly due to the type being read in + incorrect endianness + +3. The interpreter being clobbered due to the replace sections routine + reading sh_offset and sh_size in incorrect endianness + +4. The PHDR segment having an incorrect virt and phys address due to + reading the e_phoff in the incorrect endianness + +This also fixes a read of the shdr.sh_type in writeReplacedSections but +this was not encountered during testing. + +Fetch from: https://github.com/NixOS/patchelf/commit/884eccc4f061a3dbdbe63a4c73f1cc9bbf77fa7d + +Backported to v0.9. Removed item 2 from the fix list as it is not +applicable to v0.9. + +Signed-off-by: Conrad Ratschan +--- + src/patchelf.cc | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/src/patchelf.cc b/src/patchelf.cc +index fa2945e..e60b17c 100644 +--- a/src/patchelf.cc ++++ b/src/patchelf.cc +@@ -173,8 +173,8 @@ private: + ElfFile * elfFile; + bool operator ()(const Elf_Phdr & x, const Elf_Phdr & y) + { +- if (x.p_type == PT_PHDR) return true; +- if (y.p_type == PT_PHDR) return false; ++ if (elfFile->rdi(x.p_type) == PT_PHDR) return true; ++ if (elfFile->rdi(y.p_type) == PT_PHDR) return false; + return elfFile->rdi(x.p_paddr) < elfFile->rdi(y.p_paddr); + } + }; +@@ -586,7 +586,7 @@ void ElfFile::writeReplacedSections(Elf_Off & curOff, + { + string sectionName = i->first; + Elf_Shdr & shdr = findSection(sectionName); +- if (shdr.sh_type != SHT_NOBITS) ++ if (rdi(shdr.sh_type) != SHT_NOBITS) + memset(contents + rdi(shdr.sh_offset), 'X', rdi(shdr.sh_size)); + } + +@@ -667,9 +667,9 @@ void ElfFile::rewriteSectionsLibrary() + /* Some sections may already be replaced so account for that */ + unsigned int i = 1; + Elf_Addr pht_size = sizeof(Elf_Ehdr) + (phdrs.size() + 1)*sizeof(Elf_Phdr); +- while( shdrs[i].sh_offset <= pht_size && i < rdi(hdr->e_shnum) ) { ++ while( rdi(shdrs[i].sh_offset) <= pht_size && i < rdi(hdr->e_shnum) ) { + if (not haveReplacedSection(getSectionName(shdrs[i]))) +- replaceSection(getSectionName(shdrs[i]), shdrs[i].sh_size); ++ replaceSection(getSectionName(shdrs[i]), rdi(shdrs[i].sh_size)); + i++; + } + +@@ -723,7 +723,7 @@ void ElfFile::rewriteSectionsLibrary() + assert(curOff == startOffset + neededSpace); + + /* Write out the updated program and section headers */ +- rewriteHeaders(hdr->e_phoff); ++ rewriteHeaders(rdi(hdr->e_phoff)); + } + + +-- +2.17.1 + diff --git a/package/patchelf/Config.in.host b/package/patchelf/Config.in.host new file mode 100644 index 00000000..6abe78e2 --- /dev/null +++ b/package/patchelf/Config.in.host @@ -0,0 +1,8 @@ +config BR2_PACKAGE_HOST_PATCHELF + bool + default y + help + PatchELF is a small utility to modify the dynamic linker + and RPATH of ELF executables. + + http://nixos.org/patchelf.html diff --git a/package/patchelf/patchelf.hash b/package/patchelf/patchelf.hash new file mode 100644 index 00000000..0f545609 --- /dev/null +++ b/package/patchelf/patchelf.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 a0f65c1ba148890e9f2f7823f4bedf7ecad5417772f64f994004f59a39014f83 patchelf-0.9.tar.bz2 +# License files, locally calculated +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/patchelf/patchelf.mk b/package/patchelf/patchelf.mk new file mode 100644 index 00000000..52912e29 --- /dev/null +++ b/package/patchelf/patchelf.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# patchelf +# +################################################################################ + +PATCHELF_VERSION = 0.9 +PATCHELF_SITE = https://nixos.org/releases/patchelf/patchelf-$(PATCHELF_VERSION) +PATCHELF_SOURCE = patchelf-$(PATCHELF_VERSION).tar.bz2 +PATCHELF_LICENSE = GPL-3.0+ +PATCHELF_LICENSE_FILES = COPYING + +$(eval $(host-autotools-package)) diff --git a/package/pax-utils/Config.in b/package/pax-utils/Config.in new file mode 100644 index 00000000..ebcca985 --- /dev/null +++ b/package/pax-utils/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PAX_UTILS + bool "pax-utils" + depends on BR2_USE_WCHAR + help + ELF related utils for ELF 32/64 binaries that can check files + for security relevant properties. + + http://www.gentoo.org/proj/en/hardened/pax-utils.xml + +comment "pax-utils needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR diff --git a/package/pax-utils/pax-utils.hash b/package/pax-utils/pax-utils.hash new file mode 100644 index 00000000..0ef8fad6 --- /dev/null +++ b/package/pax-utils/pax-utils.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 9742d2a31d53a4e0f6df0d3721ab6f7cf8b0404c95fee3b00e678c1ff6db7f21 pax-utils-1.2.6.tar.xz +sha256 e6d6a009505e345fe949e1310334fcb0747f28dae2856759de102ab66b722cb4 COPYING diff --git a/package/pax-utils/pax-utils.mk b/package/pax-utils/pax-utils.mk new file mode 100644 index 00000000..704e50e7 --- /dev/null +++ b/package/pax-utils/pax-utils.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# pax-utils +# +################################################################################ + +PAX_UTILS_VERSION = 1.2.6 +PAX_UTILS_SITE = http://distfiles.gentoo.org/distfiles +PAX_UTILS_SOURCE = pax-utils-$(PAX_UTILS_VERSION).tar.xz +PAX_UTILS_LICENSE = GPL-2.0 +PAX_UTILS_LICENSE_FILES = COPYING +PAX_UTILS_CPE_ID_VENDOR = gentoo + +PAX_UTILS_DEPENDENCIES = host-pkgconf +PAX_UTILS_CONF_OPTS = --without-python + +ifeq ($(BR2_PACKAGE_LIBCAP),y) +PAX_UTILS_DEPENDENCIES += libcap +PAX_UTILS_CONF_OPTS += --with-caps +else +PAX_UTILS_CONF_OPTS += --without-caps +endif + +ifeq ($(BR2_PACKAGE_LIBSECCOMP),y) +PAX_UTILS_DEPENDENCIES += libseccomp +PAX_UTILS_CONF_OPTS += --with-seccomp +else +PAX_UTILS_CONF_OPTS += --without-seccomp +endif + +# lddtree and symtree need bash +ifeq ($(BR2_PACKAGE_BASH),) +define PAX_UTILS_REMOVE_BASH_TOOLS + rm -f $(TARGET_DIR)/usr/bin/{lddtree,symtree} +endef +endif +PAX_UTILS_POST_INSTALL_TARGET_HOOKS += PAX_UTILS_REMOVE_BASH_TOOLS + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/paxtest/0001-genpaxtest-move-log-location.patch b/package/paxtest/0001-genpaxtest-move-log-location.patch new file mode 100644 index 00000000..6447d53c --- /dev/null +++ b/package/paxtest/0001-genpaxtest-move-log-location.patch @@ -0,0 +1,30 @@ +From 623d99e4f557ef9cd771006e4f916c12d22a07a8 Mon Sep 17 00:00:00 2001 +From: David Graziano +Date: Mon, 12 Jun 2017 10:41:45 -0500 +Subject: [PATCH] genpaxtest: move log location + +Move log location to /var/log instead of local directory. +(For read-only filesystems) + +Signed-off-by: David Graziano +--- + genpaxtest | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +diff --git a/genpaxtest b/genpaxtest +index 5a22e15..d62b15e 100644 +--- a/genpaxtest ++++ b/genpaxtest +@@ -35,7 +35,7 @@ + exit 1 + fi + +-LOG=\$HOME/paxtest.log ++LOG=/var/log/paxtest.log + [ -n "\$1" ] && LOG=\$1 + touch "\$LOG" + if [ ! -e "\$LOG" ]; then + +-- +1.9.1 + diff --git a/package/paxtest/0002-paxtest-page-alignment-ARM-and-NIOS2-arch.patch b/package/paxtest/0002-paxtest-page-alignment-ARM-and-NIOS2-arch.patch new file mode 100644 index 00000000..54e5e69e --- /dev/null +++ b/package/paxtest/0002-paxtest-page-alignment-ARM-and-NIOS2-arch.patch @@ -0,0 +1,49 @@ +From 70406ad5668a15fedce2ae1ed3bc4fad04d9f040 Mon Sep 17 00:00:00 2001 +From: Matt Weber +Date: Wed, 5 Jul 2017 20:47:42 -0500 +Subject: [PATCH] paxtest: page alignment ARM and NIOS2 arch + +- Extended ARM range from ARMv6-v7 to also include anything below v7 +- Added NIOS2 arch to conditionally have smaller alignment + +Submitted Upstream to pageexec@freemail.hu. Also posted a +bug to both (Hardened) Suse and Gentoo's bugtrackers. +https://bugzilla.opensuse.org/show_bug.cgi?id=1047422 +https://bugs.gentoo.org/show_bug.cgi?id=623946 + +Signed-off-by: Matthew Weber +--- + paxtest.h | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +diff --git a/paxtest.h b/paxtest.h +index 8623bfb..a230c1a 100644 +--- a/paxtest.h ++++ b/paxtest.h +@@ -5,13 +5,21 @@ + #include + + /* +- * ARMv6 and ARMv7 do not like 64k alignment, 32k is ok ++ * Earlier ARMv# through ARMv7 do not like 64k alignment, 32k is ok + */ +-#if defined(__arm__) && __ARM_ARCH >= 6 && __ARM_ARCH <= 7 ++#if defined(__arm__) && __ARM_ARCH <= 7 + #define PAGE_SIZE_MAX (32768) + #else + #define PAGE_SIZE_MAX 0x10000 /* 64k should cover most arches */ + #endif ++ ++/* ++ * NIOS2's assemblier doesn't like 64k alignment ++ */ ++#if defined(__nios2_arch__) ++#define PAGE_SIZE_MAX (32768) ++#endif ++ + #ifndef __aligned + #define __aligned(x) __attribute__((aligned(x))) + #endif +-- +1.9.1 + diff --git a/package/paxtest/Config.in b/package/paxtest/Config.in new file mode 100644 index 00000000..1e09820b --- /dev/null +++ b/package/paxtest/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PAXTEST + bool "paxtest" + # No UCLIBC or MUSL because __NO_A_OUT_SUPPORT + depends on BR2_TOOLCHAIN_USES_GLIBC + help + PaX regression test suite + + http://pax.grsecurity.net/docs + +comment "paxtest needs a glibc toolchain" + depends on !BR2_TOOLCHAIN_USES_GLIBC diff --git a/package/paxtest/paxtest.hash b/package/paxtest/paxtest.hash new file mode 100644 index 00000000..d9a8caa2 --- /dev/null +++ b/package/paxtest/paxtest.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 d553848431fd8c2ab6c8361b62e5cedfed1cc1d60088241f4a33d2af15dd667f paxtest-0.9.15.tar.gz +sha256 fe8759e6d3ff462c876ded6e95e3fb297d607bc45799bb264ec9a170b5046522 README diff --git a/package/paxtest/paxtest.mk b/package/paxtest/paxtest.mk new file mode 100644 index 00000000..1b8d6699 --- /dev/null +++ b/package/paxtest/paxtest.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# paxtest +# +################################################################################ + +PAXTEST_VERSION = 0.9.15 +PAXTEST_SITE = https://www.grsecurity.net/~spender +PAXTEST_LICENSE = GPL-2.0+ +PAXTEST_LICENSE_FILES = README +PAXTEST_CPE_ID_VENDOR = grsecurity + +define PAXTEST_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + RUNDIR="/usr/lib/paxtest" CC="$(TARGET_CC)" LD="$(TARGET_CC)" linux +endef + +# The files installed to RUNDIR include test apps and shared libs. +# Assuming /usr/bin/paxtest script solely uses these libs and apps, the +# genpaxtest script updates LD_LIBRARY_PATH in the paxtest script +# as part of the paxtest's creation to include the RUNDIR path for shared +# library use. +define PAXTEST_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + CC="$(TARGET_CC)" LD="$(TARGET_CC)" \ + DESTDIR=$(TARGET_DIR) \ + BINDIR="usr/bin" \ + RUNDIR="/usr/lib/paxtest" -f Makefile.psm install +endef + +$(eval $(generic-package)) diff --git a/package/pciutils/Config.in b/package/pciutils/Config.in new file mode 100644 index 00000000..a082f239 --- /dev/null +++ b/package/pciutils/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PCIUTILS + bool "pciutils" + help + Various utilities dealing with the PCI bus. + Provides things like setpci and lspci. + + http://atrey.karlin.mff.cuni.cz/~mj/pciutils.html diff --git a/package/pciutils/pciutils.hash b/package/pciutils/pciutils.hash new file mode 100644 index 00000000..4b13c748 --- /dev/null +++ b/package/pciutils/pciutils.hash @@ -0,0 +1,3 @@ +# From https://www.kernel.org/pub/software/utils/pciutils/sha256sums.asc +sha256 9d40b97be8b6a2cdf96aead5a61881d1f7e4e0da9544a9bac4fba1ae9dcd40eb pciutils-3.7.0.tar.xz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/pciutils/pciutils.mk b/package/pciutils/pciutils.mk new file mode 100644 index 00000000..9b83b62b --- /dev/null +++ b/package/pciutils/pciutils.mk @@ -0,0 +1,69 @@ +################################################################################ +# +# pciutils +# +################################################################################ + +PCIUTILS_VERSION = 3.7.0 +PCIUTILS_SITE = $(BR2_KERNEL_MIRROR)/software/utils/pciutils +PCIUTILS_SOURCE = pciutils-$(PCIUTILS_VERSION).tar.xz +PCIUTILS_INSTALL_STAGING = YES +PCIUTILS_LICENSE = GPL-2.0+ +PCIUTILS_LICENSE_FILES = COPYING +PCIUTILS_MAKE_OPTS = \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + HOST="$(KERNEL_ARCH)-linux" \ + OPT="$(TARGET_CFLAGS)" \ + LDFLAGS="$(TARGET_LDFLAGS)" \ + DNS=no \ + STRIP= + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +PCIUTILS_DEPENDENCIES += udev +PCIUTILS_MAKE_OPTS += HWDB=yes +else +PCIUTILS_MAKE_OPTS += HWDB=no +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +PCIUTILS_MAKE_OPTS += ZLIB=yes +PCIUTILS_DEPENDENCIES += zlib +else +PCIUTILS_MAKE_OPTS += ZLIB=no +endif + +ifeq ($(BR2_PACKAGE_KMOD),y) +PCIUTILS_DEPENDENCIES += kmod +PCIUTILS_MAKE_OPTS += LIBKMOD=yes +else +PCIUTILS_MAKE_OPTS += LIBKMOD=no +endif + +ifeq ($(BR2_STATIC_LIBS),y) +PCIUTILS_MAKE_OPTS += SHARED=no +else +PCIUTILS_MAKE_OPTS += SHARED=yes +endif + +define PCIUTILS_CONFIGURE_CMDS + $(SED) 's/wget --no-timestamping/wget/' $(PCIUTILS_DIR)/update-pciids.sh +endef + +define PCIUTILS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(PCIUTILS_MAKE_OPTS) \ + PREFIX=/usr +endef + +define PCIUTILS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) -C $(@D) $(PCIUTILS_MAKE_OPTS) \ + PREFIX=$(TARGET_DIR)/usr SBINDIR=$(TARGET_DIR)/usr/bin \ + install install-lib install-pcilib +endef + +define PCIUTILS_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) -C $(@D) $(PCIUTILS_MAKE_OPTS) \ + PREFIX=$(STAGING_DIR)/usr SBINDIR=$(STAGING_DIR)/usr/bin \ + install install-lib install-pcilib +endef + +$(eval $(generic-package)) diff --git a/package/pcm-tools/0001-Look-for-pcm-core-at-the-default-path.patch b/package/pcm-tools/0001-Look-for-pcm-core-at-the-default-path.patch new file mode 100644 index 00000000..933eec02 --- /dev/null +++ b/package/pcm-tools/0001-Look-for-pcm-core-at-the-default-path.patch @@ -0,0 +1,46 @@ +From 53b6161d2413406778fa222274069c82846f0297 Mon Sep 17 00:00:00 2001 +From: Carlos Santos +Date: Thu, 6 Dec 2018 21:17:02 -0200 +Subject: [PATCH] Look for pcm-core at the default path + +On Buildroot, pcm-core.x is installed as /usr/bin/pcm-core. Remove the +platform test, since we know that it's neither CigWin nor Windows, and +use the default path. + +It's not nice to have a Buildroot specific patch but let's use one while +we look for a solution that is acceptable upstream. + +Signed-off-by: Carlos Santos +--- + pmu-query.py | 8 +------- + 1 file changed, 1 insertion(+), 7 deletions(-) + +diff --git a/pmu-query.py b/pmu-query.py +index 4c596c7..dc39df6 100755 +--- a/pmu-query.py ++++ b/pmu-query.py +@@ -3,7 +3,6 @@ import urllib2 + import json, csv + import subprocess + import sys +-import platform + import getopt + + all_flag = False +@@ -38,12 +37,7 @@ if filename == None: + except StopIteration: + break + +- if platform.system() == 'CYGWIN_NT-6.1': +- p = subprocess.Popen(['./pcm-core.exe -c'],stdout=subprocess.PIPE,shell=True) +- elif platform.system() == 'Windows': +- p = subprocess.Popen(['pcm-core.exe -c'],stdout=subprocess.PIPE,shell=True) +- else: +- p = subprocess.Popen(['./pcm-core.x -c'],stdout=subprocess.PIPE,shell=True) ++ p = subprocess.Popen(['/usr/bin/pcm-core -c'],stdout=subprocess.PIPE,shell=True) + + (output, err) = p.communicate() + p_status = p.wait() +-- +2.19.2 + diff --git a/package/pcm-tools/Config.in b/package/pcm-tools/Config.in new file mode 100644 index 00000000..f347a265 --- /dev/null +++ b/package/pcm-tools/Config.in @@ -0,0 +1,33 @@ +comment "pcm-tools needs a toolchain w/ C++" + depends on BR2_i386 || BR2_x86_64 + depends on !BR2_INSTALL_LIBSTDCPP + +config BR2_PACKAGE_PCM_TOOLS + bool "pcm-tools" + depends on BR2_i386 || BR2_x86_64 + depends on BR2_INSTALL_LIBSTDCPP + select BR2_PACKAGE_HWDATA + select BR2_PACKAGE_HWDATA_PCI_IDS + help + Processor Counter Monitor (PCM) is an application programming + interface (API) and a set of tools based on the API to monitor + performance and energy metrics of Intel(R) Core(TM), Xeon(R), + Atom(TM) and Xeon Phi(TM) processors. + + https://github.com/opcm/pcm + +if BR2_PACKAGE_PCM_TOOLS + +# The pmu-query script is not compatible with Python 3 +config BR2_PACKAGE_PCM_TOOLS_PMU_QUERY + bool "install the pmu-query script" + default y + depends on BR2_PACKAGE_PYTHON + select BR2_PACKAGE_CA_CERTIFICATES # https + select BR2_PACKAGE_PYTHON_HASHLIB # urllib2 + select BR2_PACKAGE_PYTHON_SSL # urllib2 + +comment "pmu-query needs Python 2.x" + depends on !BR2_PACKAGE_PYTHON + +endif diff --git a/package/pcm-tools/pcm-tools.hash b/package/pcm-tools/pcm-tools.hash new file mode 100644 index 00000000..77f14824 --- /dev/null +++ b/package/pcm-tools/pcm-tools.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 798eb1bc5d9c34fa107de21b2100e8d4326cb45b613bc35baa1e1efb1dd13b04 pcm-tools-201812.tar.gz +sha256 fac73f62c4d665c82622862a2be2b89713e0f480c93e593af2d8ef29a13d814b LICENSE diff --git a/package/pcm-tools/pcm-tools.mk b/package/pcm-tools/pcm-tools.mk new file mode 100644 index 00000000..6de11c0d --- /dev/null +++ b/package/pcm-tools/pcm-tools.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# pcm-tools +# +################################################################################ + +PCM_TOOLS_VERSION = 201812 +PCM_TOOLS_SITE = $(call github,opcm,pcm,$(PCM_TOOLS_VERSION)) +PCM_TOOLS_LICENSE = BSD-3-Clause +PCM_TOOLS_LICENSE_FILES = LICENSE + +PCM_TOOLS_EXE_FILES = \ + pcm-core pcm-iio pcm-lspci pcm-memory pcm-msr pcm-numa \ + pcm-pcicfg pcm-pcie pcm-power pcm-sensor pcm-tsx pcm + +define PCM_TOOLS_BUILD_CMDS + touch $(@D)/daemon-binaries + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) \ + CXXFLAGS="$(TARGET_CXXFLAGS) -std=c++11" \ + UNAME=Linux HOST=_LINUX +endef + +ifeq ($(BR2_PACKAGE_PCM_TOOLS_PMU_QUERY),y) +define PCM_TOOLS_INSTALL_PMU_QUERY + $(INSTALL) -D -m 755 $(@D)/pmu-query.py $(TARGET_DIR)/usr/bin/pmu-query +endef +endif + +define PCM_TOOLS_INSTALL_TARGET_CMDS + $(foreach f,$(PCM_TOOLS_EXE_FILES),\ + $(INSTALL) -D -m 755 $(@D)/$(f).x $(TARGET_DIR)/usr/bin/$(f) + ) + $(PCM_TOOLS_INSTALL_PMU_QUERY) +endef + +define PCM_TOOLS_LINUX_CONFIG_FIXUPS + $(call KCONFIG_ENABLE_OPT,CONFIG_X86_MSR) +endef + +$(eval $(generic-package)) diff --git a/package/pcmanfm/Config.in b/package/pcmanfm/Config.in new file mode 100644 index 00000000..f2815996 --- /dev/null +++ b/package/pcmanfm/Config.in @@ -0,0 +1,27 @@ +config BR2_PACKAGE_PCMANFM + bool "pcmanfm" + depends on BR2_PACKAGE_XORG7 + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + depends on BR2_INSTALL_LIBSTDCPP # libgtk2 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # libgtk2 -> pango -> harfbuzz + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # libgtk2 -> pango -> harfbuzz + select BR2_PACKAGE_LIBFM + select BR2_PACKAGE_MENU_CACHE + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBGTK2 if !BR2_PACKAGE_LIBGTK3_X11 + help + PCMan File Manager (PCManFM) is a file manager application + developed by Hong Jen Yee from Taiwan which is meant to be a + replacement for Nautilus, Konqueror and Thunar. + + http://wiki.lxde.org/en/PCManFM + +comment "pcmanfm needs a toolchain w/ wchar, threads, C++, gcc >= 4.8" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_XORG7 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_USE_WCHAR || !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 || \ + !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/pcmanfm/pcmanfm.hash b/package/pcmanfm/pcmanfm.hash new file mode 100644 index 00000000..b5574e39 --- /dev/null +++ b/package/pcmanfm/pcmanfm.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/pcmanfm/files/PCManFM%20%2B%20Libfm%20%28tarball%20release%29/PCManFM/ +md5 d32ad2c9c7c52bff2004bbc120b53420 pcmanfm-1.3.1.tar.xz +sha1 4de1e5cb00fbf837c137f205e7e2327e3b49cb90 pcmanfm-1.3.1.tar.xz + +# Hash for license file: +sha256 231f7edcc7352d7734a96eef0b8030f77982678c516876fcb81e25b32d68564c COPYING diff --git a/package/pcmanfm/pcmanfm.mk b/package/pcmanfm/pcmanfm.mk new file mode 100644 index 00000000..aecc438e --- /dev/null +++ b/package/pcmanfm/pcmanfm.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# pcmanfm +# +################################################################################ + +PCMANFM_VERSION = 1.3.1 +PCMANFM_SOURCE = pcmanfm-$(PCMANFM_VERSION).tar.xz +PCMANFM_SITE = http://sourceforge.net/projects/pcmanfm/files +PCMANFM_DEPENDENCIES = libglib2 menu-cache libfm $(TARGET_NLS_DEPENDENCIES) +PCMANFM_LICENSE = GPL-2.0+ +PCMANFM_LICENSE_FILES = COPYING +PCMANFM_CPE_ID_VENDOR = pcmanfm_project +PCMANFM_CONF_ENV = LIBS=$(TARGET_NLS_LIBS) + +ifeq ($(BR2_PACKAGE_LIBGTK3_X11),y) +PCMANFM_CONF_OPTS += --with-gtk=3 +PCMANFM_DEPENDENCIES += libgtk3 +else +PCMANFM_CONF_OPTS += --with-gtk=2 +PCMANFM_DEPENDENCIES += libgtk2 +endif + +$(eval $(autotools-package)) diff --git a/package/pcre/0001-Kill-compatibility-bits.patch b/package/pcre/0001-Kill-compatibility-bits.patch new file mode 100644 index 00000000..d2cf76bf --- /dev/null +++ b/package/pcre/0001-Kill-compatibility-bits.patch @@ -0,0 +1,46 @@ +From e180a4085d8d2f82a05f037e465708cfc16bd2bf Mon Sep 17 00:00:00 2001 +From: Gustavo Zacarias +Date: Tue, 14 Jun 2016 20:31:12 -0300 +Subject: [PATCH] Kill compatibility bits + +Kill ABI compatibility bits, we don't need them. +Fixes build failures on non-ELF targets. + +Signed-off-by: Gustavo Zacarias +[Fabrice: update for 8.44] +Signed-off-by: Fabrice Fontaine +--- + pcrecpp.cc | 16 ---------------- + 1 file changed, 16 deletions(-) + +diff --git a/pcrecpp.cc b/pcrecpp.cc +index d09c9ab..6910db0 100644 +--- a/pcrecpp.cc ++++ b/pcrecpp.cc +@@ -58,23 +58,6 @@ static const int kVecSize = (1 + kMaxArgs) * 3; // results + PCRE workspace + // Special object that stands-in for no argument + Arg RE::no_arg((void*)NULL); + +-// This is for ABI compatibility with old versions of pcre (pre-7.6), +-// which defined a global no_arg variable instead of putting it in the +-// RE class. This works on GCC >= 3, at least. It definitely works +-// for ELF, but may not for other object formats (Mach-O, for +-// instance, does not support aliases.) We could probably have a more +-// inclusive test if we ever needed it. (Note that not only the +-// __attribute__ syntax, but also __USER_LABEL_PREFIX__, are +-// gnu-specific.) +-#if defined(__GNUC__) && __GNUC__ >= 3 && defined(__ELF__) \ +- && !defined(__INTEL_COMPILER) && !defined(__LCC__) +-# define ULP_AS_STRING(x) ULP_AS_STRING_INTERNAL(x) +-# define ULP_AS_STRING_INTERNAL(x) #x +-# define USER_LABEL_PREFIX_STR ULP_AS_STRING(__USER_LABEL_PREFIX__) +-extern Arg no_arg +- __attribute__((alias(USER_LABEL_PREFIX_STR "_ZN7pcrecpp2RE6no_argE"))); +-#endif +- + // If a regular expression has no error, its error_ field points here + static const string empty_string; + +-- +2.7.3 + diff --git a/package/pcre/0002-Disable-C-unit-tests.patch b/package/pcre/0002-Disable-C-unit-tests.patch new file mode 100644 index 00000000..c5c1a49f --- /dev/null +++ b/package/pcre/0002-Disable-C-unit-tests.patch @@ -0,0 +1,42 @@ +From e3c636b8c7f9912d8d3a9fabdaa0a96ba69f7b29 Mon Sep 17 00:00:00 2001 +From: Gustavo Zacarias +Date: Tue, 14 Jun 2016 20:32:44 -0300 +Subject: [PATCH] Disable C++ unit tests + +They fail to build on static targets and they're not installed anyway. + +Signed-off-by: Gustavo Zacarias +--- + Makefile.in | 9 --------- + 1 file changed, 9 deletions(-) + +diff --git a/Makefile.in b/Makefile.in +index 6d03912..2c42b3e 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -133,12 +133,6 @@ noinst_PROGRAMS = $(am__EXEEXT_2) $(am__EXEEXT_3) $(am__EXEEXT_4) + @WITH_PCRE8_TRUE@am__append_20 = libpcreposix.la + @WITH_GCOV_TRUE@@WITH_PCRE8_TRUE@am__append_21 = $(GCOV_CFLAGS) + @WITH_PCRE_CPP_TRUE@am__append_22 = libpcrecpp.la +-@WITH_PCRE_CPP_TRUE@am__append_23 = pcrecpp_unittest \ +-@WITH_PCRE_CPP_TRUE@ pcre_scanner_unittest \ +-@WITH_PCRE_CPP_TRUE@ pcre_stringpiece_unittest +-@WITH_PCRE_CPP_TRUE@am__append_24 = pcrecpp_unittest \ +-@WITH_PCRE_CPP_TRUE@ pcre_scanner_unittest \ +-@WITH_PCRE_CPP_TRUE@ pcre_stringpiece_unittest + @WITH_GCOV_TRUE@@WITH_PCRE_CPP_TRUE@am__append_25 = $(GCOV_CXXFLAGS) + @WITH_GCOV_TRUE@@WITH_PCRE_CPP_TRUE@am__append_26 = $(GCOV_LIBS) + @WITH_GCOV_TRUE@@WITH_PCRE_CPP_TRUE@am__append_27 = $(GCOV_LIBS) +@@ -362,9 +356,6 @@ libpcreposix_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + @WITH_PCRE8_TRUE@am__EXEEXT_1 = pcregrep$(EXEEXT) + @WITH_REBUILD_CHARTABLES_TRUE@am__EXEEXT_2 = dftables$(EXEEXT) + @WITH_JIT_TRUE@am__EXEEXT_3 = pcre_jit_test$(EXEEXT) +-@WITH_PCRE_CPP_TRUE@am__EXEEXT_4 = pcrecpp_unittest$(EXEEXT) \ +-@WITH_PCRE_CPP_TRUE@ pcre_scanner_unittest$(EXEEXT) \ +-@WITH_PCRE_CPP_TRUE@ pcre_stringpiece_unittest$(EXEEXT) + PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) + am__dftables_SOURCES_DIST = dftables.c + @WITH_REBUILD_CHARTABLES_TRUE@am_dftables_OBJECTS = \ +-- +2.7.3 + diff --git a/package/pcre/Config.in b/package/pcre/Config.in new file mode 100644 index 00000000..9d3a1433 --- /dev/null +++ b/package/pcre/Config.in @@ -0,0 +1,34 @@ +config BR2_PACKAGE_PCRE + bool "pcre" + help + Perl Compatible Regular Expressions. By default, only the + 8-bits libpcre is built. To get the 16-bits and/or 32-bits + variants libpcre16/libpcre32, use the package sub-options. + + http://www.pcre.org/ + +if BR2_PACKAGE_PCRE + +config BR2_PACKAGE_PCRE_16 + bool "16-bit pcre" + help + This option builds the 16-bits pcre library, i.e 'libpcre16' + +config BR2_PACKAGE_PCRE_32 + bool "32-bit pcre" + help + This option builds the 32-bits pcre library, i.e 'libpcre32' + +config BR2_PACKAGE_PCRE_UTF + bool "UTF-8/16/32 support in pcre" + help + This option builds the pcre library with UTF-8/16/32 support + +config BR2_PACKAGE_PCRE_UCP + bool "Unicode properties support in pcre" + select BR2_PACKAGE_PCRE_UTF + help + This option builds the pcre library with Unicode properties + support (implies UTF-8/16/32 support)' + +endif diff --git a/package/pcre/pcre.hash b/package/pcre/pcre.hash new file mode 100644 index 00000000..628d6173 --- /dev/null +++ b/package/pcre/pcre.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 19108658b23b3ec5058edc9f66ac545ea19f9537234be1ec62b714c84399366d pcre-8.44.tar.bz2 +# License files, locally calculated +sha256 0dd9c13864dbb9ee4d77a1557e96be29b2d719fb6584192ee36611aae264c4a3 LICENCE diff --git a/package/pcre/pcre.mk b/package/pcre/pcre.mk new file mode 100644 index 00000000..c8498b7a --- /dev/null +++ b/package/pcre/pcre.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# pcre +# +################################################################################ + +PCRE_VERSION = 8.44 +PCRE_SITE = https://ftp.pcre.org/pub/pcre +PCRE_SOURCE = pcre-$(PCRE_VERSION).tar.bz2 +PCRE_LICENSE = BSD-3-Clause +PCRE_LICENSE_FILES = LICENCE +PCRE_CPE_ID_VENDOR = pcre +PCRE_INSTALL_STAGING = YES +PCRE_CONFIG_SCRIPTS = pcre-config + +# They're required for host-libglib2 +HOST_PCRE_CONF_OPTS = --enable-unicode-properties + +ifneq ($(BR2_INSTALL_LIBSTDCPP),y) +# pcre will use the host g++ if a cross version isn't available +PCRE_CONF_OPTS = --disable-cpp +endif + +PCRE_CONF_OPTS += --enable-pcre8 +PCRE_CONF_OPTS += $(if $(BR2_PACKAGE_PCRE_16),--enable-pcre16,--disable-pcre16) +PCRE_CONF_OPTS += $(if $(BR2_PACKAGE_PCRE_32),--enable-pcre32,--disable-pcre32) +PCRE_CONF_OPTS += $(if $(BR2_PACKAGE_PCRE_UTF),--enable-utf,--disable-utf) +PCRE_CONF_OPTS += $(if $(BR2_PACKAGE_PCRE_UCP),--enable-unicode-properties,--disable-unicode-properties) + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/pcre2/0001-Use-the-standard-code-path-of-sljit_emit_cmov-on-mips-r6.patch b/package/pcre2/0001-Use-the-standard-code-path-of-sljit_emit_cmov-on-mips-r6.patch new file mode 100644 index 00000000..9d8e44a3 --- /dev/null +++ b/package/pcre2/0001-Use-the-standard-code-path-of-sljit_emit_cmov-on-mips-r6.patch @@ -0,0 +1,59 @@ +From 5d7f6573c1eef30a9720edd31a92c1a4b99b7d86 Mon Sep 17 00:00:00 2001 +From: Zoltan Herczeg +Date: Tue, 3 Nov 2020 14:12:01 +0100 +Subject: [PATCH] Use the standard code path of sljit_emit_cmov on mips r6. + (#97) + +[Retrieved (and updated to fix paths) from: +https://github.com/zherczeg/sljit/commit/5d7f6573c1eef30a9720edd31a92c1a4b99b7d86 +SVN commit: https://vcs.pcre.org/pcre2?view=revision&revision=1281] +Signed-off-by: Fabrice Fontaine +--- + sljit_src/sljitLir.c | 2 +- + sljit_src/sljitNativeMIPS_common.c | 8 ++++---- + 2 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/src/sljit/sljitLir.c b/src/sljit/sljitLir.c +index 4078613..d817c90 100644 +--- a/src/sljit/sljitLir.c ++++ b/src/sljit/sljitLir.c +@@ -2043,7 +2043,7 @@ static SLJIT_INLINE sljit_s32 emit_mov_before_return(struct sljit_compiler *comp + #if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) \ + || (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) \ + || (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32) \ +- || ((defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) && !(defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1)) ++ || ((defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) && !(defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1 && SLJIT_MIPS_REV < 6)) + + static SLJIT_INLINE sljit_s32 sljit_emit_cmov_generic(struct sljit_compiler *compiler, sljit_s32 type, + sljit_s32 dst_reg, +diff --git a/src/sljit/sljitNativeMIPS_common.c b/src/sljit/sljitNativeMIPS_common.c +index 8b8c12a..ecf4dac 100644 +--- a/src/sljit/sljitNativeMIPS_common.c ++++ b/src/sljit/sljitNativeMIPS_common.c +@@ -2186,14 +2186,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil + sljit_s32 dst_reg, + sljit_s32 src, sljit_sw srcw) + { +-#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) ++#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1 && SLJIT_MIPS_REV < 6) + sljit_ins ins; +-#endif /* SLJIT_MIPS_REV >= 1 */ ++#endif /* SLJIT_MIPS_REV >= 1 && SLJIT_MIPS_REV < 6 */ + + CHECK_ERROR(); + CHECK(check_sljit_emit_cmov(compiler, type, dst_reg, src, srcw)); + +-#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) ++#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1 && SLJIT_MIPS_REV < 6) + + if (SLJIT_UNLIKELY(src & SLJIT_IMM)) { + #if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) +@@ -2250,7 +2250,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil + + return push_inst(compiler, ins | S(src) | D(dst_reg), DR(dst_reg)); + +-#else /* SLJIT_MIPS_REV < 1 */ ++#else /* SLJIT_MIPS_REV < 1 || SLJIT_MIPS_REV >= 6 */ + return sljit_emit_cmov_generic(compiler, type, dst_reg, src, srcw); + #endif /* SLJIT_MIPS_REV >= 1 */ + } diff --git a/package/pcre2/Config.in b/package/pcre2/Config.in new file mode 100644 index 00000000..f06f1914 --- /dev/null +++ b/package/pcre2/Config.in @@ -0,0 +1,45 @@ +config BR2_PACKAGE_PCRE2 + bool "pcre2" + help + Perl Compatible Regular Expressions. By default, only the + 8-bits libpcre2 is built. To get the 16-bits and/or 32-bits + variants libpcre2-16/libpcre2-32, use the package + sub-options. + + http://www.pcre.org/ + +if BR2_PACKAGE_PCRE2 + +config BR2_PACKAGE_PCRE2_16 + bool "16-bit pcre2" + help + This option builds the 16-bits pcre2 library, i.e + 'libpcre2-16' + +config BR2_PACKAGE_PCRE2_32 + bool "32-bit pcre2" + help + This option builds the 32-bits pcre2 library, i.e + 'libpcre2-32' + +config BR2_PACKAGE_PCRE2_JIT_ARCH_SUPPORTS + bool + default y if BR2_aarch64 + default y if BR2_arm || BR2_armeb + default y if BR2_i386 || BR2_x86_64 + default y if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el + default y if BR2_powerpc + default y if BR2_sparc + +config BR2_PACKAGE_PCRE2_JIT + bool "enable JIT support" + depends on BR2_PACKAGE_PCRE2_JIT_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS + help + This option enables JIT support + +comment "JIT support needs a toolchain w/ threads" + depends on BR2_PACKAGE_PCRE2_JIT_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS + +endif diff --git a/package/pcre2/pcre2.hash b/package/pcre2/pcre2.hash new file mode 100644 index 00000000..81313039 --- /dev/null +++ b/package/pcre2/pcre2.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature at https://ftp.pcre.org/pub/pcre/pcre2-10.35.tar.bz2.sig +sha256 9ccba8e02b0ce78046cdfb52e5c177f0f445e421059e43becca4359c669d4613 pcre2-10.35.tar.bz2 +# Locally computed +sha256 9cb35e4fe442e49d1fbe9c7e07d9601ac959774b24e1884665a3e2f88b7f0831 LICENCE diff --git a/package/pcre2/pcre2.mk b/package/pcre2/pcre2.mk new file mode 100644 index 00000000..84a8413f --- /dev/null +++ b/package/pcre2/pcre2.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# pcre2 +# +################################################################################ + +PCRE2_VERSION = 10.35 +PCRE2_SITE = https://ftp.pcre.org/pub/pcre +PCRE2_SOURCE = pcre2-$(PCRE2_VERSION).tar.bz2 +PCRE2_LICENSE = BSD-3-Clause +PCRE2_LICENSE_FILES = LICENCE +PCRE2_CPE_ID_VENDOR = pcre +PCRE2_INSTALL_STAGING = YES +PCRE2_CONFIG_SCRIPTS = pcre2-config + +PCRE2_CONF_OPTS += --enable-pcre2-8 +PCRE2_CONF_OPTS += $(if $(BR2_PACKAGE_PCRE2_16),--enable-pcre2-16,--disable-pcre2-16) +PCRE2_CONF_OPTS += $(if $(BR2_PACKAGE_PCRE2_32),--enable-pcre2-32,--disable-pcre2-32) + +ifeq ($(BR2_PACKAGE_PCRE2_JIT),y) +PCRE2_CONF_OPTS += --enable-jit +else +PCRE2_CONF_OPTS += --disable-jit +endif + +# disable fork usage if not available +ifeq ($(BR2_USE_MMU),) +PCRE2_CONF_OPTS += --disable-pcre2grep-callout +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/pcsc-lite/Config.in b/package/pcsc-lite/Config.in new file mode 100644 index 00000000..1b4d0f7d --- /dev/null +++ b/package/pcsc-lite/Config.in @@ -0,0 +1,38 @@ +config BR2_PACKAGE_PCSC_LITE + bool "pcsc-lite" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS + help + Middleware to access smart card using SCard API (PC/SC). + + https://muscle.apdu.fr/ + +if BR2_PACKAGE_PCSC_LITE + +config BR2_PACKAGE_PCSC_LITE_FORCE_LIBUSB + bool "use libusb" + depends on !BR2_PACKAGE_HAS_UDEV + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + help + Select Y if you want to support usb smart card readers. + +comment "libusb support needs a toolchain w/ gcc >= 4.9" + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + +config BR2_PACKAGE_PCSC_LITE_DEBUGATR + bool "enable ATR debug messages" + help + Enable ATR debug messages from pcscd. + +config BR2_PACKAGE_PCSC_LITE_EMBEDDED + bool "enable embedded mode" + help + Limit RAM and CPU resources by disabling logs. + +endif + +comment "pcsc-lite needs a toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/pcsc-lite/pcsc-lite.hash b/package/pcsc-lite/pcsc-lite.hash new file mode 100644 index 00000000..08bc85b1 --- /dev/null +++ b/package/pcsc-lite/pcsc-lite.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 0148d403137124552c5d0f10f8cdab2cbb8dfc7c6ce75e018faf667be34f2ef9 pcsc-lite-1.9.0.tar.bz2 +sha256 40d4358bb8dc8d30f5365ae6d999b6f820bbc051b292912482f2e4d0ebd837e1 COPYING +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 GPL-3.0.txt diff --git a/package/pcsc-lite/pcsc-lite.mk b/package/pcsc-lite/pcsc-lite.mk new file mode 100644 index 00000000..c411e9c7 --- /dev/null +++ b/package/pcsc-lite/pcsc-lite.mk @@ -0,0 +1,46 @@ +################################################################################ +# +# pcsc-lite +# +################################################################################ + +PCSC_LITE_VERSION = 1.9.0 +PCSC_LITE_SOURCE = pcsc-lite-$(PCSC_LITE_VERSION).tar.bz2 +PCSC_LITE_SITE = https://pcsclite.apdu.fr/files +PCSC_LITE_INSTALL_STAGING = YES +PCSC_LITE_DEPENDENCIES = host-pkgconf +PCSC_LITE_LICENSE = BSD-2-Clause (auth), BSD-3-Clause, GPL-3.0+ (demo, spy, tests), ISC (simclist) +PCSC_LITE_LICENSE_FILES = COPYING GPL-3.0.txt + +# - libudev and libusb are optional +# - libudev and libusb can't be used together +# - libudev has a priority over libusb + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +PCSC_LITE_CONF_OPTS += --enable-libudev --disable-libusb +PCSC_LITE_DEPENDENCIES += udev +else +ifeq ($(BR2_PACKAGE_LIBUSB),y) +PCSC_LITE_CONF_OPTS += --enable-libusb --disable-libudev +PCSC_LITE_DEPENDENCIES += libusb +else +PCSC_LITE_CONF_OPTS += --disable-libusb --disable-libudev +endif +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +PCSC_LITE_CONF_OPTS += --enable-libsystemd +PCSC_LITE_DEPENDENCIES += systemd +else +PCSC_LITE_CONF_OPTS += --disable-libsystemd +endif + +ifeq ($(PACKAGE_PCSC_LITE_DEBUGATR),y) +PCSC_LITE_CONF_OPTS += --enable-debugatr +endif + +ifeq ($(PACKAGE_PCSC_LITE_EMBEDDED),y) +PCSC_LITE_CONF_OPTS += --enable-embedded +endif + +$(eval $(autotools-package)) diff --git a/package/pdbg/Config.in b/package/pdbg/Config.in new file mode 100644 index 00000000..a0b3d866 --- /dev/null +++ b/package/pdbg/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PDBG + bool "pdbg" + help + PowerPC FSI Debugger, for low level debugging of a IBM + Power8 and Power9 CPU over FSI. + + pdbg runs on a BMC, which is generally an ARM-powered system + monitoring/controlling a host CPU. It can also run on the + host. + + https://github.com/open-power/pdbg diff --git a/package/pdbg/pdbg.hash b/package/pdbg/pdbg.hash new file mode 100644 index 00000000..bc9f99b1 --- /dev/null +++ b/package/pdbg/pdbg.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 c47adcac1c404266217be8c4acb408d9eba59562b094c941e96e4f77f3ced7d2 pdbg-3.2.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 COPYING diff --git a/package/pdbg/pdbg.mk b/package/pdbg/pdbg.mk new file mode 100644 index 00000000..e8bb36c3 --- /dev/null +++ b/package/pdbg/pdbg.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# pdbg +# +################################################################################ + +PDBG_VERSION = 3.2 +PDBG_SITE = $(call github,open-power,pdbg,v$(PDBG_VERSION)) +PDBG_LICENSE = Apache-2.0 +PDBG_LICENSE_FILES = COPYING +PDBG_AUTORECONF = YES +PDBG_DEPENDENCIES = host-dtc + +PDBG_MAKE_OPTS = "GIT_SHA1=\"v$(PDBG_VERSION)\"" + +$(eval $(autotools-package)) diff --git a/package/pdmenu/0001-autoconf-makeinfo.in-link-with-INTLLIBS-if-needed.patch b/package/pdmenu/0001-autoconf-makeinfo.in-link-with-INTLLIBS-if-needed.patch new file mode 100644 index 00000000..78f3e576 --- /dev/null +++ b/package/pdmenu/0001-autoconf-makeinfo.in-link-with-INTLLIBS-if-needed.patch @@ -0,0 +1,27 @@ +From 319cc3859044214961164ed1f219f2f21ca965af Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 30 Aug 2017 23:04:37 +0200 +Subject: [PATCH] autoconf/makeinfo.in: link with INTLLIBS if needed + +gettext may be provided by external libraries, as specified in +INTLLIBS, so we must include @INTLLIBS@ in the LIBS variable. + +Signed-off-by: Thomas Petazzoni +--- + autoconf/makeinfo.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/autoconf/makeinfo.in b/autoconf/makeinfo.in +index ee3054a..6d58d77 100644 +--- a/autoconf/makeinfo.in ++++ b/autoconf/makeinfo.in +@@ -13,5 +13,5 @@ DEFINES = -DETCDIR=\"${SYSCONFDIR}/\" -DVER=\"${VER}\" @DEFS@ \ + $(PROFILE) -D__USE_FIXED_PROTOTYPES__ -D_GNU_SOURCE \ + -DLOCALEDIR=\"@datadir@/locale\" + CFLAGS = $(DEFINES) @gcc_cflags@ @CFLAGS@ +-LIBS = @LIBS@ $(EFENCE) ++LIBS = @LIBS@ @INTLLIBS@ $(EFENCE) + INSTALL_PROGRAM = ${INSTALL} +-- +2.13.5 + diff --git a/package/pdmenu/0002-Makefile-autoconf-makeinfo.in-support-build-install-.patch b/package/pdmenu/0002-Makefile-autoconf-makeinfo.in-support-build-install-.patch new file mode 100644 index 00000000..1a22aa6f --- /dev/null +++ b/package/pdmenu/0002-Makefile-autoconf-makeinfo.in-support-build-install-.patch @@ -0,0 +1,76 @@ +From 5368bd0cfd0640f5c0ca766d4fda1b3f71c1b013 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 30 Aug 2017 23:07:26 +0200 +Subject: [PATCH] Makefile, autoconf/makeinfo.in: support build/install without + gettext + +The gettext tool msgfmt may not be available to build the .mo files +from the .po files, so we handle this case by disabling the +build/installation of .po files in such a case. + +Signed-off-by: Thomas Petazzoni +--- + Makefile | 17 ++++++++++++++--- + autoconf/makeinfo.in | 1 + + 2 files changed, 15 insertions(+), 3 deletions(-) + +diff --git a/Makefile b/Makefile +index a708046..3e83ca3 100644 +--- a/Makefile ++++ b/Makefile +@@ -7,11 +7,18 @@ OBJFILES := $(SRCFILES:%.c=%.o) + LANGS = fr ru es + MOS := $(addprefix po/, $(addsuffix .mo, $(LANGS))) + LOCALEDIR = $(INSTALL_PREFIX)/usr/share/locale +- +-all: pdmenu $(POTFILE) $(MOS) ++TARGETS = pdmenu ++INSTALL_TARGETS = install-pdmenu + + include makeinfo + ++ifneq ($(MSGFMT),) ++TARGETS += $(POTFILE) $(MOS) ++INSTALL_TARGETS += install-pos ++endif ++ ++all: $(TARGETS) ++ + pdmenu: .dep $(OBJFILES) + ${CC} -o pdmenu $(OBJFILES) $(CFLAGS) $(LIBS) + +@@ -40,7 +47,9 @@ clean: + $(MAKE) $(POTFILE) # make sure translators' input is ready + rm -f $(OBJFILES) pdmenu $(MOS) + +-install: all ++install: $(INSTALL_TARGETS) ++ ++install-pdmenu: + $(INSTALL) -d $(INSTALL_PREFIX)/$(BINDIR) \ + $(INSTALL_PREFIX)/$(MANDIR)/man1 \ + $(INSTALL_PREFIX)/$(MANDIR)/man5 \ +@@ -56,6 +65,8 @@ install: all + $(INSTALL) examples/pdmenurc $(INSTALL_PREFIX)/$(SYSCONFDIR)/pdmenurc -m 0644 + $(INSTALL) examples/showdir.pl $(INSTALL_PREFIX)/$(DATADIR)/pdmenu + cd $(INSTALL_PREFIX)/$(DATADIR)/pdmenu && $(LN_S) -f showdir.pl editdir.pl ++ ++install-pos: + for lang in $(LANGS); do \ + [ ! -d $(LOCALEDIR)/$$lang/LC_MESSAGES/ ] && mkdir -p $(LOCALEDIR)/$$lang/LC_MESSAGES/; \ + install -m 644 po/$$lang.mo $(LOCALEDIR)/$$lang/LC_MESSAGES/pdmenu.mo; \ +diff --git a/autoconf/makeinfo.in b/autoconf/makeinfo.in +index 6d58d77..069daf8 100644 +--- a/autoconf/makeinfo.in ++++ b/autoconf/makeinfo.in +@@ -8,6 +8,7 @@ DATADIR = @datadir@ + CC = @CC@ + INSTALL = @INSTALL@ + LN_S = @LN_S@ ++MSGFMT = @MSGFMT@ + VER = @VER@ + DEFINES = -DETCDIR=\"${SYSCONFDIR}/\" -DVER=\"${VER}\" @DEFS@ \ + $(PROFILE) -D__USE_FIXED_PROTOTYPES__ -D_GNU_SOURCE \ +-- +2.13.5 + diff --git a/package/pdmenu/Config.in b/package/pdmenu/Config.in new file mode 100644 index 00000000..8f35f614 --- /dev/null +++ b/package/pdmenu/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_PDMENU + bool "pdmenu" + depends on BR2_USE_MMU # slang + select BR2_PACKAGE_SLANG + help + Pdmenu is a full screen menuing system for Unix. It is + designed to be easy to use, and is suitable as a login shell + for inexperienced users, or it can just be ran at the + command line as a handy menu. + + Pdmenu features color support and GPM mouse support at the + Linux console. It was developed on Linux, and has now been + compiled on many other unixes without problems. + + https://joeyh.name/code/pdmenu/ diff --git a/package/pdmenu/pdmenu.hash b/package/pdmenu/pdmenu.hash new file mode 100644 index 00000000..00c2569a --- /dev/null +++ b/package/pdmenu/pdmenu.hash @@ -0,0 +1,5 @@ +# Locally calculated +sha256 dedd2a4a5719278b5e49041161990c2f20b5909818837542aaca01819f2c14eb pdmenu-1.3.6.tar.gz + +# License file hash, locally calculated +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 doc/COPYING diff --git a/package/pdmenu/pdmenu.mk b/package/pdmenu/pdmenu.mk new file mode 100644 index 00000000..2691a67e --- /dev/null +++ b/package/pdmenu/pdmenu.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# pdmenu +# +################################################################################ + +PDMENU_VERSION = 1.3.6 +PDMENU_SITE = https://git.joeyh.name/index.cgi/pdmenu.git/snapshot +PDMENU_LICENSE = GPL-2.0 +PDMENU_LICENSE_FILES = doc/COPYING +PDMENU_DEPENDENCIES = slang $(TARGET_NLS_DEPENDENCIES) +PDMENU_INSTALL_TARGET_OPTS = INSTALL_PREFIX=$(TARGET_DIR) install + +$(eval $(autotools-package)) diff --git a/package/pengutronix-can-utils/Config.in b/package/pengutronix-can-utils/Config.in new file mode 100644 index 00000000..55f49806 --- /dev/null +++ b/package/pengutronix-can-utils/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PENGUTRONIX_CAN_UTILS + bool "pengutronix can-utils" + depends on BR2_USE_MMU # fork() + depends on BR2_PACKAGE_LIBSOCKETCAN + help + SocketCAN is a set of open source CAN drivers and a + networking stack. + This package based on Pengutronix code. + + https://github.com/jmore-reachtech/can-utils diff --git a/package/pengutronix-can-utils/pengutronix-can-utils.hash b/package/pengutronix-can-utils/pengutronix-can-utils.hash new file mode 100644 index 00000000..d977cf8c --- /dev/null +++ b/package/pengutronix-can-utils/pengutronix-can-utils.hash @@ -0,0 +1,2 @@ +# Locally computed +sha256 68e6c5f31072c129f97b507d068d533772b7dff56d8dc06ce99c21298eba5f0d pengutronix-can-utils-master.tar.gz diff --git a/package/pengutronix-can-utils/pengutronix-can-utils.mk b/package/pengutronix-can-utils/pengutronix-can-utils.mk new file mode 100644 index 00000000..2c8f4775 --- /dev/null +++ b/package/pengutronix-can-utils/pengutronix-can-utils.mk @@ -0,0 +1,11 @@ +################################################################################ +# +# pengutronix can-utils +# +################################################################################ + +PENGUTRONIX_CAN_UTILS_VERSION = master +PENGUTRONIX_CAN_UTILS_SITE = https://github.com/jmore-reachtech/can-utils +PENGUTRONIX_CAN_UTILS_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/perl-apache-logformat-compiler/Config.in b/package/perl-apache-logformat-compiler/Config.in new file mode 100644 index 00000000..d78104f1 --- /dev/null +++ b/package/perl-apache-logformat-compiler/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_APACHE_LOGFORMAT_COMPILER + bool "perl-apache-logformat-compiler" + select BR2_PACKAGE_PERL_POSIX_STRFTIME_COMPILER # runtime + help + Compile a log format string to perl-code. + + https://github.com/kazeburo/Apache-LogFormat-Compiler diff --git a/package/perl-apache-logformat-compiler/perl-apache-logformat-compiler.hash b/package/perl-apache-logformat-compiler/perl-apache-logformat-compiler.hash new file mode 100644 index 00000000..de33cfb1 --- /dev/null +++ b/package/perl-apache-logformat-compiler/perl-apache-logformat-compiler.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 a0cdfcd875cb2ee4dc9a2c24381eb55b Apache-LogFormat-Compiler-0.36.tar.gz +sha256 94509503ee74ea820183d070c11630ee5bc0fd8c12cb74fae953ed62e4a1ac17 Apache-LogFormat-Compiler-0.36.tar.gz + +# computed by scancpan +sha256 ab941cfc4794afa2113795b167177d1b25cbc77ebadd016e5727effc2cadd96b LICENSE diff --git a/package/perl-apache-logformat-compiler/perl-apache-logformat-compiler.mk b/package/perl-apache-logformat-compiler/perl-apache-logformat-compiler.mk new file mode 100644 index 00000000..82ceb797 --- /dev/null +++ b/package/perl-apache-logformat-compiler/perl-apache-logformat-compiler.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-apache-logformat-compiler +# +################################################################################ + +PERL_APACHE_LOGFORMAT_COMPILER_VERSION = 0.36 +PERL_APACHE_LOGFORMAT_COMPILER_SOURCE = Apache-LogFormat-Compiler-$(PERL_APACHE_LOGFORMAT_COMPILER_VERSION).tar.gz +PERL_APACHE_LOGFORMAT_COMPILER_SITE = $(BR2_CPAN_MIRROR)/authors/id/K/KA/KAZEBURO +PERL_APACHE_LOGFORMAT_COMPILER_DEPENDENCIES = host-perl-module-build-tiny +PERL_APACHE_LOGFORMAT_COMPILER_LICENSE = Artistic or GPL-1.0+ +PERL_APACHE_LOGFORMAT_COMPILER_LICENSE_FILES = LICENSE +PERL_APACHE_LOGFORMAT_COMPILER_DISTNAME = Apache-LogFormat-Compiler + +$(eval $(perl-package)) diff --git a/package/perl-appconfig/Config.in b/package/perl-appconfig/Config.in new file mode 100644 index 00000000..f89bf06c --- /dev/null +++ b/package/perl-appconfig/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PERL_APPCONFIG + bool "perl-appconfig" + help + AppConfig is a bundle of Perl5 modules for reading + configuration files and parsing command line + arguments. + + https://metacpan.org/release/AppConfig diff --git a/package/perl-appconfig/perl-appconfig.hash b/package/perl-appconfig/perl-appconfig.hash new file mode 100644 index 00000000..151a2e90 --- /dev/null +++ b/package/perl-appconfig/perl-appconfig.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 7747d9241561ed5567d5e134b8648707 AppConfig-1.71.tar.gz +sha256 1177027025ecb09ee64d9f9f255615c04db5e14f7536c344af632032eb887b0f AppConfig-1.71.tar.gz + +# computed by scancpan +sha256 0b22dd532e4123a511d14989c4169ed56b7316cf844c29c7897a1638a4616868 LICENSE diff --git a/package/perl-appconfig/perl-appconfig.mk b/package/perl-appconfig/perl-appconfig.mk new file mode 100644 index 00000000..8f9dd520 --- /dev/null +++ b/package/perl-appconfig/perl-appconfig.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-appconfig +# +################################################################################ + +PERL_APPCONFIG_VERSION = 1.71 +PERL_APPCONFIG_SOURCE = AppConfig-$(PERL_APPCONFIG_VERSION).tar.gz +PERL_APPCONFIG_SITE = $(BR2_CPAN_MIRROR)/authors/id/N/NE/NEILB +PERL_APPCONFIG_LICENSE = Artistic or GPL-1.0+ +PERL_APPCONFIG_LICENSE_FILES = LICENSE +PERL_APPCONFIG_DISTNAME = AppConfig + +$(eval $(perl-package)) diff --git a/package/perl-astro-suntime/Config.in b/package/perl-astro-suntime/Config.in new file mode 100644 index 00000000..ee4f3e32 --- /dev/null +++ b/package/perl-astro-suntime/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_ASTRO_SUNTIME + bool "perl-astro-suntime" + help + A functional module for calculating sunrise/sunset times. + + https://metacpan.org/release/Astro-SunTime diff --git a/package/perl-astro-suntime/perl-astro-suntime.hash b/package/perl-astro-suntime/perl-astro-suntime.hash new file mode 100644 index 00000000..e75293d4 --- /dev/null +++ b/package/perl-astro-suntime/perl-astro-suntime.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 42cb8c94de8a111ed652196925c22a45 Astro-SunTime-0.06.tar.gz +sha256 b4a44fddfc055cc42ee67bfd8939354793da7512ea04f30578d42dc6a701112a Astro-SunTime-0.06.tar.gz + +# computed by scancpan +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE diff --git a/package/perl-astro-suntime/perl-astro-suntime.mk b/package/perl-astro-suntime/perl-astro-suntime.mk new file mode 100644 index 00000000..e5cad6a4 --- /dev/null +++ b/package/perl-astro-suntime/perl-astro-suntime.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-astro-suntime +# +################################################################################ + +PERL_ASTRO_SUNTIME_VERSION = 0.06 +PERL_ASTRO_SUNTIME_SOURCE = Astro-SunTime-$(PERL_ASTRO_SUNTIME_VERSION).tar.gz +PERL_ASTRO_SUNTIME_SITE = $(BR2_CPAN_MIRROR)/authors/id/R/RO/ROBF +PERL_ASTRO_SUNTIME_DEPENDENCIES = host-perl-module-build +PERL_ASTRO_SUNTIME_LICENSE = GPL-3.0 +PERL_ASTRO_SUNTIME_LICENSE_FILES = LICENSE +PERL_ASTRO_SUNTIME_DISTNAME = Astro-SunTime + +$(eval $(perl-package)) diff --git a/package/perl-class-inspector/Config.in b/package/perl-class-inspector/Config.in new file mode 100644 index 00000000..46b93682 --- /dev/null +++ b/package/perl-class-inspector/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_CLASS_INSPECTOR + bool "perl-class-inspector" + help + Get information about a class and its structure. + + https://metacpan.org/pod/Class::Inspector diff --git a/package/perl-class-inspector/perl-class-inspector.hash b/package/perl-class-inspector/perl-class-inspector.hash new file mode 100644 index 00000000..ee7a95bf --- /dev/null +++ b/package/perl-class-inspector/perl-class-inspector.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 084c3aeec023639d21ecbaf7d4460b21 Class-Inspector-1.36.tar.gz +sha256 cc295d23a472687c24489d58226ead23b9fdc2588e522f0b5f0747741700694e Class-Inspector-1.36.tar.gz + +# computed by scancpan +sha256 401fe9c98bdb5707df71447fb93141f8cb2d85337d45505f5ae50a776a3f6666 LICENSE diff --git a/package/perl-class-inspector/perl-class-inspector.mk b/package/perl-class-inspector/perl-class-inspector.mk new file mode 100644 index 00000000..fdb33236 --- /dev/null +++ b/package/perl-class-inspector/perl-class-inspector.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-class-inspector +# +################################################################################ + +PERL_CLASS_INSPECTOR_VERSION = 1.36 +PERL_CLASS_INSPECTOR_SOURCE = Class-Inspector-$(PERL_CLASS_INSPECTOR_VERSION).tar.gz +PERL_CLASS_INSPECTOR_SITE = $(BR2_CPAN_MIRROR)/authors/id/P/PL/PLICEASE +PERL_CLASS_INSPECTOR_LICENSE = Artistic or GPL-1.0+ +PERL_CLASS_INSPECTOR_LICENSE_FILES = LICENSE +PERL_CLASS_INSPECTOR_DISTNAME = Class-Inspector + +$(eval $(perl-package)) diff --git a/package/perl-class-load/Config.in b/package/perl-class-load/Config.in new file mode 100644 index 00000000..fe956b17 --- /dev/null +++ b/package/perl-class-load/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_PERL_CLASS_LOAD + bool "perl-class-load" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_PERL_DATA_OPTLIST # runtime + select BR2_PACKAGE_PERL_MODULE_IMPLEMENTATION # runtime + select BR2_PACKAGE_PERL_MODULE_RUNTIME # runtime + select BR2_PACKAGE_PERL_PACKAGE_STASH # runtime + select BR2_PACKAGE_PERL_TRY_TINY # runtime + help + A working (require "Class::Name") and more. + + https://github.com/moose/Class-Load + +comment "perl-class-load needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-class-load/perl-class-load.hash b/package/perl-class-load/perl-class-load.hash new file mode 100644 index 00000000..c2900d69 --- /dev/null +++ b/package/perl-class-load/perl-class-load.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 e4c831c08df592ce8dfee0c7cfc12fd7 Class-Load-0.25.tar.gz +sha256 2a48fa779b5297e56156380e8b32637c6c58decb4f4a7f3c7350523e11275f8f Class-Load-0.25.tar.gz + +# computed by scancpan +sha256 dc030e63f20035291b90d09c2c40f296224e85878caf829ea981fc2f10910f9d LICENSE diff --git a/package/perl-class-load/perl-class-load.mk b/package/perl-class-load/perl-class-load.mk new file mode 100644 index 00000000..c18e53d1 --- /dev/null +++ b/package/perl-class-load/perl-class-load.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-class-load +# +################################################################################ + +PERL_CLASS_LOAD_VERSION = 0.25 +PERL_CLASS_LOAD_SOURCE = Class-Load-$(PERL_CLASS_LOAD_VERSION).tar.gz +PERL_CLASS_LOAD_SITE = $(BR2_CPAN_MIRROR)/authors/id/E/ET/ETHER +PERL_CLASS_LOAD_LICENSE = Artistic or GPL-1.0+ +PERL_CLASS_LOAD_LICENSE_FILES = LICENSE +PERL_CLASS_LOAD_DISTNAME = Class-Load + +$(eval $(perl-package)) diff --git a/package/perl-class-method-modifiers/Config.in b/package/perl-class-method-modifiers/Config.in new file mode 100644 index 00000000..7acdb38b --- /dev/null +++ b/package/perl-class-method-modifiers/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_CLASS_METHOD_MODIFIERS + bool "perl-class-method-modifiers" + help + Provides Moose-like method modifiers. + + https://github.com/moose/Class-Method-Modifiers diff --git a/package/perl-class-method-modifiers/perl-class-method-modifiers.hash b/package/perl-class-method-modifiers/perl-class-method-modifiers.hash new file mode 100644 index 00000000..82bf91f7 --- /dev/null +++ b/package/perl-class-method-modifiers/perl-class-method-modifiers.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 b1398e3682aa2e075b913b9f9000b596 Class-Method-Modifiers-2.13.tar.gz +sha256 ab5807f71018a842de6b7a4826d6c1f24b8d5b09fcce5005a3309cf6ea40fd63 Class-Method-Modifiers-2.13.tar.gz + +# computed by scancpan +sha256 d17e5cba8d4039f6973d5873f73b0c8949c1cffb338fafe7a57e972767546561 LICENSE diff --git a/package/perl-class-method-modifiers/perl-class-method-modifiers.mk b/package/perl-class-method-modifiers/perl-class-method-modifiers.mk new file mode 100644 index 00000000..ef688acf --- /dev/null +++ b/package/perl-class-method-modifiers/perl-class-method-modifiers.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-class-method-modifiers +# +################################################################################ + +PERL_CLASS_METHOD_MODIFIERS_VERSION = 2.13 +PERL_CLASS_METHOD_MODIFIERS_SOURCE = Class-Method-Modifiers-$(PERL_CLASS_METHOD_MODIFIERS_VERSION).tar.gz +PERL_CLASS_METHOD_MODIFIERS_SITE = $(BR2_CPAN_MIRROR)/authors/id/E/ET/ETHER +PERL_CLASS_METHOD_MODIFIERS_LICENSE = Artistic or GPL-1.0+ +PERL_CLASS_METHOD_MODIFIERS_LICENSE_FILES = LICENSE +PERL_CLASS_METHOD_MODIFIERS_DISTNAME = Class-Method-Modifiers + +$(eval $(perl-package)) diff --git a/package/perl-class-std-fast/Config.in b/package/perl-class-std-fast/Config.in new file mode 100644 index 00000000..6eabc0bb --- /dev/null +++ b/package/perl-class-std-fast/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_CLASS_STD_FAST + bool "perl-class-std-fast" + select BR2_PACKAGE_PERL_CLASS_STD # runtime + help + faster but less secure than Class::Std. + + https://metacpan.org/release/Class-Std-Fast diff --git a/package/perl-class-std-fast/perl-class-std-fast.hash b/package/perl-class-std-fast/perl-class-std-fast.hash new file mode 100644 index 00000000..07e830a5 --- /dev/null +++ b/package/perl-class-std-fast/perl-class-std-fast.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 d06d084cb84f295b0aabf2eee78ef746 Class-Std-Fast-v0.0.8.tar.gz +sha256 1bd43763c6a373183097a30e787f5d6713b0db27511c52d533266b59d2cfa780 Class-Std-Fast-v0.0.8.tar.gz + +# computed by scancpan +sha256 aa1ab90c498aee078076e9a1f83e5f14bbfd841509582795ab5a9571428c0c38 README diff --git a/package/perl-class-std-fast/perl-class-std-fast.mk b/package/perl-class-std-fast/perl-class-std-fast.mk new file mode 100644 index 00000000..b5d32398 --- /dev/null +++ b/package/perl-class-std-fast/perl-class-std-fast.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-class-std-fast +# +################################################################################ + +PERL_CLASS_STD_FAST_VERSION = 0.0.8 +PERL_CLASS_STD_FAST_SOURCE = Class-Std-Fast-v$(PERL_CLASS_STD_FAST_VERSION).tar.gz +PERL_CLASS_STD_FAST_SITE = $(BR2_CPAN_MIRROR)/authors/id/A/AC/ACID +PERL_CLASS_STD_FAST_DEPENDENCIES = host-perl-module-build +PERL_CLASS_STD_FAST_LICENSE = Artistic or GPL-1.0+ +PERL_CLASS_STD_FAST_LICENSE_FILES = README +PERL_CLASS_STD_FAST_DISTNAME = Class-Std-Fast + +$(eval $(perl-package)) diff --git a/package/perl-class-std/Config.in b/package/perl-class-std/Config.in new file mode 100644 index 00000000..332cdf27 --- /dev/null +++ b/package/perl-class-std/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_CLASS_STD + bool "perl-class-std" + help + Support for creating standard "inside-out" classes. + + https://metacpan.org/release/Class-Std diff --git a/package/perl-class-std/perl-class-std.hash b/package/perl-class-std/perl-class-std.hash new file mode 100644 index 00000000..0cc38614 --- /dev/null +++ b/package/perl-class-std/perl-class-std.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 82bcc56d9769edce671b0bd0e183ec3a Class-Std-0.013.tar.gz +sha256 bcd6d82f6c8af0fe069fced7dd165a4795b0b6e92351c7d4e5a1ab9a14fc35c6 Class-Std-0.013.tar.gz + +# computed by scancpan +sha256 b8175bf3750dc54096bf1506c681b4f13262e5b82e40244e9a77730c6b72e4d6 README diff --git a/package/perl-class-std/perl-class-std.mk b/package/perl-class-std/perl-class-std.mk new file mode 100644 index 00000000..493a89f2 --- /dev/null +++ b/package/perl-class-std/perl-class-std.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-class-std +# +################################################################################ + +PERL_CLASS_STD_VERSION = 0.013 +PERL_CLASS_STD_SOURCE = Class-Std-$(PERL_CLASS_STD_VERSION).tar.gz +PERL_CLASS_STD_SITE = $(BR2_CPAN_MIRROR)/authors/id/C/CH/CHORNY +PERL_CLASS_STD_DEPENDENCIES = host-perl-module-build +PERL_CLASS_STD_LICENSE = Artistic or GPL-1.0+ +PERL_CLASS_STD_LICENSE_FILES = README +PERL_CLASS_STD_DISTNAME = Class-Std + +$(eval $(perl-package)) diff --git a/package/perl-convert-asn1/Config.in b/package/perl-convert-asn1/Config.in new file mode 100644 index 00000000..3fe47c32 --- /dev/null +++ b/package/perl-convert-asn1/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_CONVERT_ASN1 + bool "perl-convert-asn1" + help + Convert between perl data structures and ASN.1 encoded + packets. + + https://metacpan.org/release/Convert-ASN1 diff --git a/package/perl-convert-asn1/perl-convert-asn1.hash b/package/perl-convert-asn1/perl-convert-asn1.hash new file mode 100644 index 00000000..4fd7d3eb --- /dev/null +++ b/package/perl-convert-asn1/perl-convert-asn1.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 68723e96be0b258a9e20480276e8a62c Convert-ASN1-0.27.tar.gz +sha256 74a4a78ae0c5e973100ac0a8f203a110f76fb047b79dae4fc1fd7d6814d3d58a Convert-ASN1-0.27.tar.gz + +# computed by scancpan +sha256 4ef46cc39d9e2b4c767503457a1f8fda5bcf9c0c164923e2a54a3863209cf237 LICENSE diff --git a/package/perl-convert-asn1/perl-convert-asn1.mk b/package/perl-convert-asn1/perl-convert-asn1.mk new file mode 100644 index 00000000..b6ba76a7 --- /dev/null +++ b/package/perl-convert-asn1/perl-convert-asn1.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-convert-asn1 +# +################################################################################ + +PERL_CONVERT_ASN1_VERSION = 0.27 +PERL_CONVERT_ASN1_SOURCE = Convert-ASN1-$(PERL_CONVERT_ASN1_VERSION).tar.gz +PERL_CONVERT_ASN1_SITE = $(BR2_CPAN_MIRROR)/authors/id/G/GB/GBARR +PERL_CONVERT_ASN1_LICENSE = Artistic or GPL-1.0+ +PERL_CONVERT_ASN1_LICENSE_FILES = LICENSE +PERL_CONVERT_ASN1_DISTNAME = Convert-ASN1 + +$(eval $(perl-package)) diff --git a/package/perl-cookie-baker/Config.in b/package/perl-cookie-baker/Config.in new file mode 100644 index 00000000..024f0ade --- /dev/null +++ b/package/perl-cookie-baker/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_COOKIE_BAKER + bool "perl-cookie-baker" + select BR2_PACKAGE_PERL_URI # runtime + help + Cookie string generator / parser. + + https://github.com/kazeburo/Cookie-Baker diff --git a/package/perl-cookie-baker/perl-cookie-baker.hash b/package/perl-cookie-baker/perl-cookie-baker.hash new file mode 100644 index 00000000..3b056c46 --- /dev/null +++ b/package/perl-cookie-baker/perl-cookie-baker.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 bc8f95893d6ec3093a62d1957e1908f2 Cookie-Baker-0.11.tar.gz +sha256 59275f474e07c0aa3611e3e684b894e7db913333d8214420be63f12ec18cd7ab Cookie-Baker-0.11.tar.gz + +# computed by scancpan +sha256 b4ce94671fa219074d4e91e2268652d6bf9764cebcc7a5e27bfc14897745ca4c LICENSE diff --git a/package/perl-cookie-baker/perl-cookie-baker.mk b/package/perl-cookie-baker/perl-cookie-baker.mk new file mode 100644 index 00000000..27c88f3e --- /dev/null +++ b/package/perl-cookie-baker/perl-cookie-baker.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-cookie-baker +# +################################################################################ + +PERL_COOKIE_BAKER_VERSION = 0.11 +PERL_COOKIE_BAKER_SOURCE = Cookie-Baker-$(PERL_COOKIE_BAKER_VERSION).tar.gz +PERL_COOKIE_BAKER_SITE = $(BR2_CPAN_MIRROR)/authors/id/K/KA/KAZEBURO +PERL_COOKIE_BAKER_DEPENDENCIES = host-perl-module-build-tiny +PERL_COOKIE_BAKER_LICENSE = Artistic or GPL-1.0+ +PERL_COOKIE_BAKER_LICENSE_FILES = LICENSE +PERL_COOKIE_BAKER_DISTNAME = Cookie-Baker + +$(eval $(perl-package)) diff --git a/package/perl-crypt-blowfish/Config.in b/package/perl-crypt-blowfish/Config.in new file mode 100644 index 00000000..1a51a16f --- /dev/null +++ b/package/perl-crypt-blowfish/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PERL_CRYPT_BLOWFISH + bool "perl-crypt-blowfish" + depends on !BR2_STATIC_LIBS + help + Perl Blowfish encryption module. + + https://metacpan.org/release/Crypt-Blowfish + +comment "perl-crypt-blowfish needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-crypt-blowfish/perl-crypt-blowfish.hash b/package/perl-crypt-blowfish/perl-crypt-blowfish.hash new file mode 100644 index 00000000..f814cb9b --- /dev/null +++ b/package/perl-crypt-blowfish/perl-crypt-blowfish.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 792b43cd4e49d2c2cf4a9f6990ff7d1b Crypt-Blowfish-2.14.tar.gz +sha256 46b3431ffb6bf5b9cb359f79565d48407e652ad2b04fdf5ca62a69e7197a67b1 Crypt-Blowfish-2.14.tar.gz + +# computed by scancpan +sha256 d61437443e6912d03677874c7baef242f28119c2c5d8b92b0f3f3660200f98d4 COPYRIGHT diff --git a/package/perl-crypt-blowfish/perl-crypt-blowfish.mk b/package/perl-crypt-blowfish/perl-crypt-blowfish.mk new file mode 100644 index 00000000..a8f274b6 --- /dev/null +++ b/package/perl-crypt-blowfish/perl-crypt-blowfish.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-crypt-blowfish +# +################################################################################ + +PERL_CRYPT_BLOWFISH_VERSION = 2.14 +PERL_CRYPT_BLOWFISH_SOURCE = Crypt-Blowfish-$(PERL_CRYPT_BLOWFISH_VERSION).tar.gz +PERL_CRYPT_BLOWFISH_SITE = $(BR2_CPAN_MIRROR)/authors/id/D/DP/DPARIS +PERL_CRYPT_BLOWFISH_LICENSE = BSD-4-Clause-like +PERL_CRYPT_BLOWFISH_LICENSE_FILES = COPYRIGHT +PERL_CRYPT_BLOWFISH_DISTNAME = Crypt-Blowfish + +$(eval $(perl-package)) diff --git a/package/perl-crypt-cbc/Config.in b/package/perl-crypt-cbc/Config.in new file mode 100644 index 00000000..5cd9c69e --- /dev/null +++ b/package/perl-crypt-cbc/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_CRYPT_CBC + bool "perl-crypt-cbc" + help + Encrypt Data with Cipher Block Chaining Mode. + + https://metacpan.org/release/Crypt-CBC diff --git a/package/perl-crypt-cbc/perl-crypt-cbc.hash b/package/perl-crypt-cbc/perl-crypt-cbc.hash new file mode 100644 index 00000000..a54772a5 --- /dev/null +++ b/package/perl-crypt-cbc/perl-crypt-cbc.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 3db5117d60df67e3b400fe367e716be0 Crypt-CBC-2.33.tar.gz +sha256 6a70de21b6cc7f2b100067e8e188db966e9a8001b5db6fa976e7cb5b294ae645 Crypt-CBC-2.33.tar.gz + +# locally computed +sha256 9548d0beb746167270df647aa97a3e47b957adb4ec103c2cfb8f54b0005f99c7 CBC.pm diff --git a/package/perl-crypt-cbc/perl-crypt-cbc.mk b/package/perl-crypt-cbc/perl-crypt-cbc.mk new file mode 100644 index 00000000..c00ec37e --- /dev/null +++ b/package/perl-crypt-cbc/perl-crypt-cbc.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-crypt-cbc +# +################################################################################ + +PERL_CRYPT_CBC_VERSION = 2.33 +PERL_CRYPT_CBC_SOURCE = Crypt-CBC-$(PERL_CRYPT_CBC_VERSION).tar.gz +PERL_CRYPT_CBC_SITE = $(BR2_CPAN_MIRROR)/authors/id/L/LD/LDS +PERL_CRYPT_CBC_LICENSE = Artistic +PERL_CRYPT_CBC_LICENSE_FILES = CBC.pm +PERL_CRYPT_CBC_DISTNAME = Crypt-CBC + +$(eval $(perl-package)) diff --git a/package/perl-crypt-openssl-aes/Config.in b/package/perl-crypt-openssl-aes/Config.in new file mode 100644 index 00000000..ab408d0a --- /dev/null +++ b/package/perl-crypt-openssl-aes/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PERL_CRYPT_OPENSSL_AES + bool "perl-crypt-openssl-aes" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_OPENSSL + help + A Perl wrapper around OpenSSL's AES library. + + https://metacpan.org/release/Crypt-OpenSSL-AES + +comment "perl-crypt-openssl-aes needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-crypt-openssl-aes/perl-crypt-openssl-aes.hash b/package/perl-crypt-openssl-aes/perl-crypt-openssl-aes.hash new file mode 100644 index 00000000..07064dfb --- /dev/null +++ b/package/perl-crypt-openssl-aes/perl-crypt-openssl-aes.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 269db65cbf580c3174471a2cbc9a9d95 Crypt-OpenSSL-AES-0.02.tar.gz +sha256 b66fab514edf97fc32f58da257582704a210c2b35e297d5c31b7fa2ffd08e908 Crypt-OpenSSL-AES-0.02.tar.gz + +# computed by scancpan +sha256 a60b8c187cc5d90f7a43adc6be3c127abaa4c739e1e7fdcff16be358533d037f README diff --git a/package/perl-crypt-openssl-aes/perl-crypt-openssl-aes.mk b/package/perl-crypt-openssl-aes/perl-crypt-openssl-aes.mk new file mode 100644 index 00000000..c05f3a9c --- /dev/null +++ b/package/perl-crypt-openssl-aes/perl-crypt-openssl-aes.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-crypt-openssl-aes +# +################################################################################ + +PERL_CRYPT_OPENSSL_AES_VERSION = 0.02 +PERL_CRYPT_OPENSSL_AES_SOURCE = Crypt-OpenSSL-AES-$(PERL_CRYPT_OPENSSL_AES_VERSION).tar.gz +PERL_CRYPT_OPENSSL_AES_SITE = $(BR2_CPAN_MIRROR)/authors/id/T/TT/TTAR +PERL_CRYPT_OPENSSL_AES_LICENSE = Artistic or GPL-1.0+ +PERL_CRYPT_OPENSSL_AES_LICENSE_FILES = README +PERL_CRYPT_OPENSSL_AES_DISTNAME = Crypt-OpenSSL-AES +PERL_CRYPT_OPENSSL_AES_DEPENDENCIES = openssl + +$(eval $(perl-package)) diff --git a/package/perl-crypt-openssl-guess/perl-crypt-openssl-guess.hash b/package/perl-crypt-openssl-guess/perl-crypt-openssl-guess.hash new file mode 100644 index 00000000..327b0690 --- /dev/null +++ b/package/perl-crypt-openssl-guess/perl-crypt-openssl-guess.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 e768fe2c07826b0ac9ea604c79f93032 Crypt-OpenSSL-Guess-0.11.tar.gz +sha256 aa6b18e38cb852cbad80a58cd90c395b40819d4d01e0ab37e7703149094d7167 Crypt-OpenSSL-Guess-0.11.tar.gz + +# computed by scancpan +sha256 5c739f181ce7aa31d739277996ff230067dad39332e5597c0dffd36e5d784072 LICENSE diff --git a/package/perl-crypt-openssl-guess/perl-crypt-openssl-guess.mk b/package/perl-crypt-openssl-guess/perl-crypt-openssl-guess.mk new file mode 100644 index 00000000..a5328516 --- /dev/null +++ b/package/perl-crypt-openssl-guess/perl-crypt-openssl-guess.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-crypt-openssl-guess +# +################################################################################ + +PERL_CRYPT_OPENSSL_GUESS_VERSION = 0.11 +PERL_CRYPT_OPENSSL_GUESS_SOURCE = Crypt-OpenSSL-Guess-$(PERL_CRYPT_OPENSSL_GUESS_VERSION).tar.gz +PERL_CRYPT_OPENSSL_GUESS_SITE = $(BR2_CPAN_MIRROR)/authors/id/A/AK/AKIYM +PERL_CRYPT_OPENSSL_GUESS_LICENSE = Artistic or GPL-1.0+ +PERL_CRYPT_OPENSSL_GUESS_LICENSE_FILES = LICENSE +PERL_CRYPT_OPENSSL_GUESS_DISTNAME = Crypt-OpenSSL-Guess + +$(eval $(host-perl-package)) diff --git a/package/perl-crypt-openssl-random/Config.in b/package/perl-crypt-openssl-random/Config.in new file mode 100644 index 00000000..6b5da7c8 --- /dev/null +++ b/package/perl-crypt-openssl-random/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PERL_CRYPT_OPENSSL_RANDOM + bool "perl-crypt-openssl-random" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_OPENSSL + help + OpenSSL/LibreSSL pseudo-random number generator access. + + https://metacpan.org/release/Crypt-OpenSSL-Random + +comment "perl-crypt-openssl-random needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-crypt-openssl-random/perl-crypt-openssl-random.hash b/package/perl-crypt-openssl-random/perl-crypt-openssl-random.hash new file mode 100644 index 00000000..57677e34 --- /dev/null +++ b/package/perl-crypt-openssl-random/perl-crypt-openssl-random.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 bcde8d5a822c91376deda3c4f0c75fbe Crypt-OpenSSL-Random-0.15.tar.gz +sha256 f0876faa1ba3111e39b86aa730c603211eff2905e460c72a57b61e8cf475cef4 Crypt-OpenSSL-Random-0.15.tar.gz + +# computed by scancpan +sha256 fdaba2134145d3e252c5930180b2bcb13b5367ad5a8713d6868f014cd25c496f LICENSE diff --git a/package/perl-crypt-openssl-random/perl-crypt-openssl-random.mk b/package/perl-crypt-openssl-random/perl-crypt-openssl-random.mk new file mode 100644 index 00000000..e70eb7e9 --- /dev/null +++ b/package/perl-crypt-openssl-random/perl-crypt-openssl-random.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# perl-crypt-openssl-random +# +################################################################################ + +PERL_CRYPT_OPENSSL_RANDOM_VERSION = 0.15 +PERL_CRYPT_OPENSSL_RANDOM_SOURCE = Crypt-OpenSSL-Random-$(PERL_CRYPT_OPENSSL_RANDOM_VERSION).tar.gz +PERL_CRYPT_OPENSSL_RANDOM_SITE = $(BR2_CPAN_MIRROR)/authors/id/R/RU/RURBAN +PERL_CRYPT_OPENSSL_RANDOM_DEPENDENCIES = \ + host-perl-crypt-openssl-guess \ + openssl +PERL_CRYPT_OPENSSL_RANDOM_LICENSE = Artistic or GPL-1.0+ +PERL_CRYPT_OPENSSL_RANDOM_LICENSE_FILES = LICENSE +PERL_CRYPT_OPENSSL_RANDOM_DISTNAME = Crypt-OpenSSL-Random + +# Try as hard as possible to remedy to the brain-damage their build-system +# suffers from: don't search for openssl, they pick the host-system one. +PERL_CRYPT_OPENSSL_RANDOM_CONF_ENV = OPENSSL_PREFIX=$(STAGING_DIR)/usr + +$(eval $(perl-package)) diff --git a/package/perl-crypt-openssl-rsa/Config.in b/package/perl-crypt-openssl-rsa/Config.in new file mode 100644 index 00000000..e2c01313 --- /dev/null +++ b/package/perl-crypt-openssl-rsa/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PERL_CRYPT_OPENSSL_RSA + bool "perl-crypt-openssl-rsa" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_PERL_CRYPT_OPENSSL_RANDOM # runtime + help + RSA encoding and decoding, using the openSSL libraries. + + http://github.com/toddr/Crypt-OpenSSL-RSA + +comment "perl-crypt-openssl-rsa needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-crypt-openssl-rsa/perl-crypt-openssl-rsa.hash b/package/perl-crypt-openssl-rsa/perl-crypt-openssl-rsa.hash new file mode 100644 index 00000000..fe2a5785 --- /dev/null +++ b/package/perl-crypt-openssl-rsa/perl-crypt-openssl-rsa.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 d33681e19d2094df7c26bc7a4509265e Crypt-OpenSSL-RSA-0.31.tar.gz +sha256 4173403ad4cf76732192099f833fbfbf3cd8104e0246b3844187ae384d2c5436 Crypt-OpenSSL-RSA-0.31.tar.gz + +# computed by scancpan +sha256 8a693ad3f52daeeb5ac5deceb1e1109c9c87095ed5ba6506d6d5c106e4066f5a LICENSE diff --git a/package/perl-crypt-openssl-rsa/perl-crypt-openssl-rsa.mk b/package/perl-crypt-openssl-rsa/perl-crypt-openssl-rsa.mk new file mode 100644 index 00000000..23fd1ac3 --- /dev/null +++ b/package/perl-crypt-openssl-rsa/perl-crypt-openssl-rsa.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# perl-crypt-openssl-rsa +# +################################################################################ + +PERL_CRYPT_OPENSSL_RSA_VERSION = 0.31 +PERL_CRYPT_OPENSSL_RSA_SOURCE = Crypt-OpenSSL-RSA-$(PERL_CRYPT_OPENSSL_RSA_VERSION).tar.gz +PERL_CRYPT_OPENSSL_RSA_SITE = $(BR2_CPAN_MIRROR)/authors/id/T/TO/TODDR +PERL_CRYPT_OPENSSL_RSA_DEPENDENCIES = \ + host-perl-crypt-openssl-guess \ + perl-crypt-openssl-random \ + openssl +PERL_CRYPT_OPENSSL_RSA_LICENSE = Artistic or GPL-1.0+ +PERL_CRYPT_OPENSSL_RSA_LICENSE_FILES = LICENSE +PERL_CRYPT_OPENSSL_RSA_DISTNAME = Crypt-OpenSSL-RSA + +# Try as hard as possible to remedy to the brain-damage their build-system +# suffers from: don't search for openssl, they pick the host-system one. +PERL_CRYPT_OPENSSL_RSA_CONF_ENV = OPENSSL_PREFIX=$(STAGING_DIR)/usr + +$(eval $(perl-package)) diff --git a/package/perl-data-dump/Config.in b/package/perl-data-dump/Config.in new file mode 100644 index 00000000..b44209fe --- /dev/null +++ b/package/perl-data-dump/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_DATA_DUMP + bool "perl-data-dump" + help + Pretty printing of data structures. + + https://metacpan.org/release/Data-Dump diff --git a/package/perl-data-dump/perl-data-dump.hash b/package/perl-data-dump/perl-data-dump.hash new file mode 100644 index 00000000..87850326 --- /dev/null +++ b/package/perl-data-dump/perl-data-dump.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 762c111e525c82ff23d62c90821b26e9 Data-Dump-1.23.tar.gz +sha256 af53b05ef1387b4cab4427e6789179283e4f0da8cf036e8db516ddb344512b65 Data-Dump-1.23.tar.gz + +# computed by scancpan +sha256 31d1b6482bcc3db87a38ad02065554f9d3bc13321d4ef8e96042464045e2abcf README diff --git a/package/perl-data-dump/perl-data-dump.mk b/package/perl-data-dump/perl-data-dump.mk new file mode 100644 index 00000000..54d3a925 --- /dev/null +++ b/package/perl-data-dump/perl-data-dump.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-data-dump +# +################################################################################ + +PERL_DATA_DUMP_VERSION = 1.23 +PERL_DATA_DUMP_SOURCE = Data-Dump-$(PERL_DATA_DUMP_VERSION).tar.gz +PERL_DATA_DUMP_SITE = $(BR2_CPAN_MIRROR)/authors/id/G/GA/GAAS +PERL_DATA_DUMP_LICENSE = Artistic or GPL-1.0+ +PERL_DATA_DUMP_LICENSE_FILES = README +PERL_DATA_DUMP_DISTNAME = Data-Dump + +$(eval $(perl-package)) diff --git a/package/perl-data-optlist/Config.in b/package/perl-data-optlist/Config.in new file mode 100644 index 00000000..88152f27 --- /dev/null +++ b/package/perl-data-optlist/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PERL_DATA_OPTLIST + bool "perl-data-optlist" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_PERL_PARAMS_UTIL # runtime + select BR2_PACKAGE_PERL_SUB_INSTALL # runtime + help + parse and validate simple name/value option pairs. + + https://github.com/rjbs/Data-OptList + +comment "perl-data-optlist needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-data-optlist/perl-data-optlist.hash b/package/perl-data-optlist/perl-data-optlist.hash new file mode 100644 index 00000000..93df0064 --- /dev/null +++ b/package/perl-data-optlist/perl-data-optlist.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 f9236c9ea5607134ad8a2b3dc901c4c5 Data-OptList-0.110.tar.gz +sha256 366117cb2966473f2559f2f4575ff6ae69e84c69a0f30a0773e1b51a457ef5c3 Data-OptList-0.110.tar.gz + +# computed by scancpan +sha256 73c7bd4c8e4adc474f9dae32b9aa08f6ce27327940751dd6e8373404beabdffa LICENSE diff --git a/package/perl-data-optlist/perl-data-optlist.mk b/package/perl-data-optlist/perl-data-optlist.mk new file mode 100644 index 00000000..49aeb820 --- /dev/null +++ b/package/perl-data-optlist/perl-data-optlist.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-data-optlist +# +################################################################################ + +PERL_DATA_OPTLIST_VERSION = 0.110 +PERL_DATA_OPTLIST_SOURCE = Data-OptList-$(PERL_DATA_OPTLIST_VERSION).tar.gz +PERL_DATA_OPTLIST_SITE = $(BR2_CPAN_MIRROR)/authors/id/R/RJ/RJBS +PERL_DATA_OPTLIST_LICENSE = Artistic or GPL-1.0+ +PERL_DATA_OPTLIST_LICENSE_FILES = LICENSE +PERL_DATA_OPTLIST_DISTNAME = Data-OptList + +$(eval $(perl-package)) diff --git a/package/perl-data-uuid/Config.in b/package/perl-data-uuid/Config.in new file mode 100644 index 00000000..9b4812b2 --- /dev/null +++ b/package/perl-data-uuid/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PERL_DATA_UUID + bool "perl-data-uuid" + depends on !BR2_STATIC_LIBS + help + Globally/Universally Unique Identifiers (GUIDs/UUIDs). + + https://metacpan.org/release/Data-UUID + +comment "perl-data-uuid needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-data-uuid/perl-data-uuid.hash b/package/perl-data-uuid/perl-data-uuid.hash new file mode 100644 index 00000000..b2c86296 --- /dev/null +++ b/package/perl-data-uuid/perl-data-uuid.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 13468e0fb65a0b5ce27b8628cb2f0109 Data-UUID-1.226.tar.gz +sha256 093d57ffa0d411a94bafafae495697db26f5c9d0277198fe3f7cf2be22996453 Data-UUID-1.226.tar.gz + +# computed by scancpan +sha256 0560c8eea8e1fb8173faa6c2e9b7e9f8728b8ae8250a814709a53c30b778d5fb LICENSE diff --git a/package/perl-data-uuid/perl-data-uuid.mk b/package/perl-data-uuid/perl-data-uuid.mk new file mode 100644 index 00000000..93060964 --- /dev/null +++ b/package/perl-data-uuid/perl-data-uuid.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# perl-data-uuid +# +################################################################################ + +PERL_DATA_UUID_VERSION = 1.226 +PERL_DATA_UUID_SOURCE = Data-UUID-$(PERL_DATA_UUID_VERSION).tar.gz +PERL_DATA_UUID_SITE = $(BR2_CPAN_MIRROR)/authors/id/R/RJ/RJBS +# The license is documented at +# https://fedoraproject.org/wiki/Licensing:MIT#HP_Variant as the "HP +# Variant" of the MIT license. There is no official SPDX tag for this +# license, but the other MIT variants are prefixed with "MIT-", so we +# do the same here. +PERL_DATA_UUID_LICENSE = MIT-HP +PERL_DATA_UUID_LICENSE_FILES = LICENSE +PERL_DATA_UUID_DISTNAME = Data-UUID + +$(eval $(perl-package)) diff --git a/package/perl-date-manip/Config.in b/package/perl-date-manip/Config.in new file mode 100644 index 00000000..4ebcd4da --- /dev/null +++ b/package/perl-date-manip/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_DATE_MANIP + bool "perl-date-manip" + help + Date manipulation routines. + + https://metacpan.org/release/Date-Manip diff --git a/package/perl-date-manip/perl-date-manip.hash b/package/perl-date-manip/perl-date-manip.hash new file mode 100644 index 00000000..90961c74 --- /dev/null +++ b/package/perl-date-manip/perl-date-manip.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 92be58690a9a64d51fb158198220fd63 Date-Manip-6.83.tar.gz +sha256 f491b2e1d876c222a59563b1bbd893c1034207ed0337304bf396311d9e9199fa Date-Manip-6.83.tar.gz + +# computed by scancpan +sha256 8ba2a138654f8b59b7e1e3ad0d4c81918b9148ff95078b172ccbb45fa241431d LICENSE diff --git a/package/perl-date-manip/perl-date-manip.mk b/package/perl-date-manip/perl-date-manip.mk new file mode 100644 index 00000000..ab513469 --- /dev/null +++ b/package/perl-date-manip/perl-date-manip.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-date-manip +# +################################################################################ + +PERL_DATE_MANIP_VERSION = 6.83 +PERL_DATE_MANIP_SOURCE = Date-Manip-$(PERL_DATE_MANIP_VERSION).tar.gz +PERL_DATE_MANIP_SITE = $(BR2_CPAN_MIRROR)/authors/id/S/SB/SBECK +PERL_DATE_MANIP_LICENSE = Artistic or GPL-1.0+ +PERL_DATE_MANIP_LICENSE_FILES = LICENSE +PERL_DATE_MANIP_DISTNAME = Date-Manip + +$(eval $(perl-package)) diff --git a/package/perl-datetime-tiny/Config.in b/package/perl-datetime-tiny/Config.in new file mode 100644 index 00000000..ea44ae0c --- /dev/null +++ b/package/perl-datetime-tiny/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_DATETIME_TINY + bool "perl-datetime-tiny" + help + A date object, with as little code as possible. + + https://github.com/dagolden/DateTime-Tiny diff --git a/package/perl-datetime-tiny/perl-datetime-tiny.hash b/package/perl-datetime-tiny/perl-datetime-tiny.hash new file mode 100644 index 00000000..62fe407d --- /dev/null +++ b/package/perl-datetime-tiny/perl-datetime-tiny.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 5ac2924652edb0cf5fda7c9d52162b3f DateTime-Tiny-1.07.tar.gz +sha256 83568a22838cb518fbeb9e060460ec7f59d5a0b0a1cc06562954c3674d7cf7e4 DateTime-Tiny-1.07.tar.gz + +# computed by scancpan +sha256 21cda7a55a8d4b32a43c654f0d4d4a1587096b35bf2a93ea12a2e3a8c2c0b88f LICENSE diff --git a/package/perl-datetime-tiny/perl-datetime-tiny.mk b/package/perl-datetime-tiny/perl-datetime-tiny.mk new file mode 100644 index 00000000..2a426426 --- /dev/null +++ b/package/perl-datetime-tiny/perl-datetime-tiny.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-datetime-tiny +# +################################################################################ + +PERL_DATETIME_TINY_VERSION = 1.07 +PERL_DATETIME_TINY_SOURCE = DateTime-Tiny-$(PERL_DATETIME_TINY_VERSION).tar.gz +PERL_DATETIME_TINY_SITE = $(BR2_CPAN_MIRROR)/authors/id/D/DA/DAGOLDEN +PERL_DATETIME_TINY_LICENSE = Artistic or GPL-1.0+ +PERL_DATETIME_TINY_LICENSE_FILES = LICENSE +PERL_DATETIME_TINY_DISTNAME = DateTime-Tiny + +$(eval $(perl-package)) diff --git a/package/perl-dbd-mysql/Config.in b/package/perl-dbd-mysql/Config.in new file mode 100644 index 00000000..55bbc953 --- /dev/null +++ b/package/perl-dbd-mysql/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_PERL_DBD_MYSQL + bool "perl-dbd-mysql" + depends on !BR2_STATIC_LIBS + depends on BR2_INSTALL_LIBSTDCPP # mysql + depends on BR2_USE_MMU # mysql + depends on BR2_TOOLCHAIN_HAS_THREADS # mysql + select BR2_PACKAGE_MYSQL + select BR2_PACKAGE_PERL_DBI # runtime + help + A MySQL driver for the Perl5 Database Interface (DBI). + + http://dbi.perl.org/ + +comment "perl-dbd-mysql needs a toolchain w/ dynamic library, C++, threads" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS || !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/perl-dbd-mysql/perl-dbd-mysql.hash b/package/perl-dbd-mysql/perl-dbd-mysql.hash new file mode 100644 index 00000000..51de4760 --- /dev/null +++ b/package/perl-dbd-mysql/perl-dbd-mysql.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 bdf4f4d899b8af29ebd8ebfb7438d05f DBD-mysql-4.046.tar.gz +sha256 6165652ec959d05b97f5413fa3dff014b78a44cf6de21ae87283b28378daf1f7 DBD-mysql-4.046.tar.gz + +# computed by scancpan +sha256 7a9ba29702b957805cfa8aa63bca43175625824263232dbade0010d385ab888c LICENSE diff --git a/package/perl-dbd-mysql/perl-dbd-mysql.mk b/package/perl-dbd-mysql/perl-dbd-mysql.mk new file mode 100644 index 00000000..98521a78 --- /dev/null +++ b/package/perl-dbd-mysql/perl-dbd-mysql.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# perl-dbd-mysql +# +################################################################################ + +PERL_DBD_MYSQL_VERSION = 4.046 +PERL_DBD_MYSQL_SOURCE = DBD-mysql-$(PERL_DBD_MYSQL_VERSION).tar.gz +PERL_DBD_MYSQL_SITE = $(BR2_CPAN_MIRROR)/authors/id/C/CA/CAPTTOFU +PERL_DBD_MYSQL_DEPENDENCIES = \ + host-perl-dbi \ + mysql +PERL_DBD_MYSQL_LICENSE = Artistic or GPL-1.0+ +PERL_DBD_MYSQL_LICENSE_FILES = LICENSE +PERL_DBD_MYSQL_DISTNAME = DBD-mysql + +PERL_DBD_MYSQL_CONF_OPTS = --mysql_config=$(STAGING_DIR)/usr/bin/mysql_config + +$(eval $(perl-package)) diff --git a/package/perl-dbi/Config.in b/package/perl-dbi/Config.in new file mode 100644 index 00000000..2c08c733 --- /dev/null +++ b/package/perl-dbi/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PERL_DBI + bool "perl-dbi" + depends on !BR2_STATIC_LIBS + help + Database independent interface for Perl. + + http://dbi.perl.org/ + +comment "perl-dbi needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-dbi/perl-dbi.hash b/package/perl-dbi/perl-dbi.hash new file mode 100644 index 00000000..707accf0 --- /dev/null +++ b/package/perl-dbi/perl-dbi.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 352f80b1e23769c116082a90905d7398 DBI-1.643.tar.gz +sha256 8a2b993db560a2c373c174ee976a51027dd780ec766ae17620c20393d2e836fa DBI-1.643.tar.gz + +# computed by scancpan +sha256 33453c8b0d8d474a42669ac702a13c20f39c91a34b3df4e6ca778fc2f0f711c7 LICENSE diff --git a/package/perl-dbi/perl-dbi.mk b/package/perl-dbi/perl-dbi.mk new file mode 100644 index 00000000..482d3d17 --- /dev/null +++ b/package/perl-dbi/perl-dbi.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-dbi +# +################################################################################ + +PERL_DBI_VERSION = 1.643 +PERL_DBI_SOURCE = DBI-$(PERL_DBI_VERSION).tar.gz +PERL_DBI_SITE = $(BR2_CPAN_MIRROR)/authors/id/T/TI/TIMB +PERL_DBI_LICENSE = Artistic or GPL-1.0+ +PERL_DBI_LICENSE_FILES = LICENSE +PERL_DBI_DISTNAME = DBI + +$(eval $(perl-package)) +$(eval $(host-perl-package)) diff --git a/package/perl-devel-cycle/Config.in b/package/perl-devel-cycle/Config.in new file mode 100644 index 00000000..7561f65f --- /dev/null +++ b/package/perl-devel-cycle/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_DEVEL_CYCLE + bool "perl-devel-cycle" + help + Find memory cycles in objects. + + https://metacpan.org/release/Devel-Cycle diff --git a/package/perl-devel-cycle/perl-devel-cycle.hash b/package/perl-devel-cycle/perl-devel-cycle.hash new file mode 100644 index 00000000..e7a93fde --- /dev/null +++ b/package/perl-devel-cycle/perl-devel-cycle.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 3d9a963da87b17398fab9acbef63f277 Devel-Cycle-1.12.tar.gz +sha256 fd3365c4d898b2b2bddbb78a46d507a18cca8490a290199547dab7f1e7390bc2 Devel-Cycle-1.12.tar.gz + +# computed by scancpan +sha256 e47dfab3e7e9d20fe6313169ead2736ab97f1388003eee033dd934278649034d README diff --git a/package/perl-devel-cycle/perl-devel-cycle.mk b/package/perl-devel-cycle/perl-devel-cycle.mk new file mode 100644 index 00000000..0599e1c3 --- /dev/null +++ b/package/perl-devel-cycle/perl-devel-cycle.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-devel-cycle +# +################################################################################ + +PERL_DEVEL_CYCLE_VERSION = 1.12 +PERL_DEVEL_CYCLE_SOURCE = Devel-Cycle-$(PERL_DEVEL_CYCLE_VERSION).tar.gz +PERL_DEVEL_CYCLE_SITE = $(BR2_CPAN_MIRROR)/authors/id/L/LD/LDS +PERL_DEVEL_CYCLE_LICENSE = Artistic or GPL-1.0+ +PERL_DEVEL_CYCLE_LICENSE_FILES = README +PERL_DEVEL_CYCLE_DISTNAME = Devel-Cycle + +$(eval $(perl-package)) diff --git a/package/perl-devel-globaldestruction/Config.in b/package/perl-devel-globaldestruction/Config.in new file mode 100644 index 00000000..a951e20d --- /dev/null +++ b/package/perl-devel-globaldestruction/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PERL_DEVEL_GLOBALDESTRUCTION + bool "perl-devel-globaldestruction" + select BR2_PACKAGE_PERL_SUB_EXPORTER_PROGRESSIVE # runtime + help + Provides function returning the equivalent of + ${^GLOBAL_PHASE} eq 'DESTRUCT' for older perls. + + https://metacpan.org/release/Devel-GlobalDestruction diff --git a/package/perl-devel-globaldestruction/perl-devel-globaldestruction.hash b/package/perl-devel-globaldestruction/perl-devel-globaldestruction.hash new file mode 100644 index 00000000..b3cd6e32 --- /dev/null +++ b/package/perl-devel-globaldestruction/perl-devel-globaldestruction.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 24221ba322cf2dc46a1fc99b53e2380b Devel-GlobalDestruction-0.14.tar.gz +sha256 34b8a5f29991311468fe6913cadaba75fd5d2b0b3ee3bb41fe5b53efab9154ab Devel-GlobalDestruction-0.14.tar.gz + +# computed by scancpan +sha256 f7adbd1db623233e220f9157521a620dbae4918ae7088845aa61e87b7f62bb23 README diff --git a/package/perl-devel-globaldestruction/perl-devel-globaldestruction.mk b/package/perl-devel-globaldestruction/perl-devel-globaldestruction.mk new file mode 100644 index 00000000..3d4d60ed --- /dev/null +++ b/package/perl-devel-globaldestruction/perl-devel-globaldestruction.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-devel-globaldestruction +# +################################################################################ + +PERL_DEVEL_GLOBALDESTRUCTION_VERSION = 0.14 +PERL_DEVEL_GLOBALDESTRUCTION_SOURCE = Devel-GlobalDestruction-$(PERL_DEVEL_GLOBALDESTRUCTION_VERSION).tar.gz +PERL_DEVEL_GLOBALDESTRUCTION_SITE = $(BR2_CPAN_MIRROR)/authors/id/H/HA/HAARG +PERL_DEVEL_GLOBALDESTRUCTION_LICENSE = Artistic or GPL-1.0+ +PERL_DEVEL_GLOBALDESTRUCTION_LICENSE_FILES = README +PERL_DEVEL_GLOBALDESTRUCTION_DISTNAME = Devel-GlobalDestruction + +$(eval $(perl-package)) diff --git a/package/perl-devel-size/Config.in b/package/perl-devel-size/Config.in new file mode 100644 index 00000000..b545cf18 --- /dev/null +++ b/package/perl-devel-size/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PERL_DEVEL_SIZE + bool "perl-devel-size" + depends on !BR2_STATIC_LIBS + help + Perl extension for finding the memory usage of Perl + variables. + + https://metacpan.org/release/Devel-Size + +comment "perl-devel-size needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-devel-size/perl-devel-size.hash b/package/perl-devel-size/perl-devel-size.hash new file mode 100644 index 00000000..c0fbcf29 --- /dev/null +++ b/package/perl-devel-size/perl-devel-size.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 0b5335d69402c75d5ab9978027ae2f66 Devel-Size-0.83.tar.gz +sha256 757a67e0aa59ae103ea5ca092cbecc025644ebdc326731688ffab6f8823ef4b3 Devel-Size-0.83.tar.gz + +# computed by scancpan +sha256 fca4ebe3a1f329aa33a4d259c0a5b136a15a40b987c60c2dd6f1007bb01a1513 README diff --git a/package/perl-devel-size/perl-devel-size.mk b/package/perl-devel-size/perl-devel-size.mk new file mode 100644 index 00000000..9acc67c9 --- /dev/null +++ b/package/perl-devel-size/perl-devel-size.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-devel-size +# +################################################################################ + +PERL_DEVEL_SIZE_VERSION = 0.83 +PERL_DEVEL_SIZE_SOURCE = Devel-Size-$(PERL_DEVEL_SIZE_VERSION).tar.gz +PERL_DEVEL_SIZE_SITE = $(BR2_CPAN_MIRROR)/authors/id/N/NW/NWCLARK +PERL_DEVEL_SIZE_LICENSE = Artistic or GPL-1.0+ +PERL_DEVEL_SIZE_LICENSE_FILES = README +PERL_DEVEL_SIZE_DISTNAME = Devel-Size + +$(eval $(perl-package)) diff --git a/package/perl-devel-stacktrace-ashtml/Config.in b/package/perl-devel-stacktrace-ashtml/Config.in new file mode 100644 index 00000000..9c73f0e4 --- /dev/null +++ b/package/perl-devel-stacktrace-ashtml/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_DEVEL_STACKTRACE_ASHTML + bool "perl-devel-stacktrace-ashtml" + select BR2_PACKAGE_PERL_DEVEL_STACKTRACE # runtime + help + Displays stack trace in HTML. + + https://github.com/miyagawa/Devel-StackTrace-AsHTML diff --git a/package/perl-devel-stacktrace-ashtml/perl-devel-stacktrace-ashtml.hash b/package/perl-devel-stacktrace-ashtml/perl-devel-stacktrace-ashtml.hash new file mode 100644 index 00000000..4f31c6a1 --- /dev/null +++ b/package/perl-devel-stacktrace-ashtml/perl-devel-stacktrace-ashtml.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 4ec8bd92e4a765a7cabf402db9640412 Devel-StackTrace-AsHTML-0.15.tar.gz +sha256 6283dbe2197e2f20009cc4b449997742169cdd951bfc44cbc6e62c2a962d3147 Devel-StackTrace-AsHTML-0.15.tar.gz + +# computed by scancpan +sha256 ffecf60c52b85d56c928f5eac889b5044243c3907b810ef640c9f02fbce567ac LICENSE diff --git a/package/perl-devel-stacktrace-ashtml/perl-devel-stacktrace-ashtml.mk b/package/perl-devel-stacktrace-ashtml/perl-devel-stacktrace-ashtml.mk new file mode 100644 index 00000000..949823c0 --- /dev/null +++ b/package/perl-devel-stacktrace-ashtml/perl-devel-stacktrace-ashtml.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-devel-stacktrace-ashtml +# +################################################################################ + +PERL_DEVEL_STACKTRACE_ASHTML_VERSION = 0.15 +PERL_DEVEL_STACKTRACE_ASHTML_SOURCE = Devel-StackTrace-AsHTML-$(PERL_DEVEL_STACKTRACE_ASHTML_VERSION).tar.gz +PERL_DEVEL_STACKTRACE_ASHTML_SITE = $(BR2_CPAN_MIRROR)/authors/id/M/MI/MIYAGAWA +PERL_DEVEL_STACKTRACE_ASHTML_LICENSE = Artistic or GPL-1.0+ +PERL_DEVEL_STACKTRACE_ASHTML_LICENSE_FILES = LICENSE +PERL_DEVEL_STACKTRACE_ASHTML_DISTNAME = Devel-StackTrace-AsHTML + +$(eval $(perl-package)) diff --git a/package/perl-devel-stacktrace/Config.in b/package/perl-devel-stacktrace/Config.in new file mode 100644 index 00000000..3311f72e --- /dev/null +++ b/package/perl-devel-stacktrace/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_DEVEL_STACKTRACE + bool "perl-devel-stacktrace" + help + An object representing a stack trace. + + http://metacpan.org/release/Devel-StackTrace diff --git a/package/perl-devel-stacktrace/perl-devel-stacktrace.hash b/package/perl-devel-stacktrace/perl-devel-stacktrace.hash new file mode 100644 index 00000000..58923cc0 --- /dev/null +++ b/package/perl-devel-stacktrace/perl-devel-stacktrace.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 a5b09f7be7f2b10b525a9740676906d8 Devel-StackTrace-2.04.tar.gz +sha256 cd3c03ed547d3d42c61fa5814c98296139392e7971c092e09a431f2c9f5d6855 Devel-StackTrace-2.04.tar.gz + +# computed by scancpan +sha256 dbd3162d261db5b40cac4d85afba619ec6a196398003c57b85c2333e7ef4c393 LICENSE diff --git a/package/perl-devel-stacktrace/perl-devel-stacktrace.mk b/package/perl-devel-stacktrace/perl-devel-stacktrace.mk new file mode 100644 index 00000000..01783901 --- /dev/null +++ b/package/perl-devel-stacktrace/perl-devel-stacktrace.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-devel-stacktrace +# +################################################################################ + +PERL_DEVEL_STACKTRACE_VERSION = 2.04 +PERL_DEVEL_STACKTRACE_SOURCE = Devel-StackTrace-$(PERL_DEVEL_STACKTRACE_VERSION).tar.gz +PERL_DEVEL_STACKTRACE_SITE = $(BR2_CPAN_MIRROR)/authors/id/D/DR/DROLSKY +PERL_DEVEL_STACKTRACE_LICENSE = Artistic-2.0 +PERL_DEVEL_STACKTRACE_LICENSE_FILES = LICENSE +PERL_DEVEL_STACKTRACE_DISTNAME = Devel-StackTrace + +$(eval $(perl-package)) diff --git a/package/perl-device-serialport/Config.in b/package/perl-device-serialport/Config.in new file mode 100644 index 00000000..f14e9794 --- /dev/null +++ b/package/perl-device-serialport/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PERL_DEVICE_SERIALPORT + bool "perl-device-serialport" + depends on !BR2_STATIC_LIBS + help + Linux/POSIX emulation of Win32::SerialPort functions. + + https://metacpan.org/release/Device-SerialPort + +comment "perl-device-serialport needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-device-serialport/perl-device-serialport.hash b/package/perl-device-serialport/perl-device-serialport.hash new file mode 100644 index 00000000..35ddc13d --- /dev/null +++ b/package/perl-device-serialport/perl-device-serialport.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 82c698151f934eb28c65d1838cee7d9e Device-SerialPort-1.04.tar.gz +sha256 d392567cb39b4ea606c0e0acafd8ed72320311b995336ece5fcefcf9b150e9d7 Device-SerialPort-1.04.tar.gz + +# computed by scancpan +sha256 59432e84eca65c10c4b627f8af0b00833685856b68242b816aea2a38283a124c README diff --git a/package/perl-device-serialport/perl-device-serialport.mk b/package/perl-device-serialport/perl-device-serialport.mk new file mode 100644 index 00000000..9889c913 --- /dev/null +++ b/package/perl-device-serialport/perl-device-serialport.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-device-serialport +# +################################################################################ + +PERL_DEVICE_SERIALPORT_VERSION = 1.04 +PERL_DEVICE_SERIALPORT_SOURCE = Device-SerialPort-$(PERL_DEVICE_SERIALPORT_VERSION).tar.gz +PERL_DEVICE_SERIALPORT_SITE = $(BR2_CPAN_MIRROR)/authors/id/C/CO/COOK +PERL_DEVICE_SERIALPORT_LICENSE = Artistic or GPL-1.0+ +PERL_DEVICE_SERIALPORT_LICENSE_FILES = README +PERL_DEVICE_SERIALPORT_DISTNAME = Device-SerialPort + +$(eval $(perl-package)) diff --git a/package/perl-digest-hmac/Config.in b/package/perl-digest-hmac/Config.in new file mode 100644 index 00000000..bb9b4541 --- /dev/null +++ b/package/perl-digest-hmac/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_DIGEST_HMAC + bool "perl-digest-hmac" + help + Keyed-Hashing for Message Authentication. + + https://metacpan.org/release/Digest-HMAC diff --git a/package/perl-digest-hmac/perl-digest-hmac.hash b/package/perl-digest-hmac/perl-digest-hmac.hash new file mode 100644 index 00000000..84bc8648 --- /dev/null +++ b/package/perl-digest-hmac/perl-digest-hmac.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 e6a5d6f552da16eacb5157ea4369ff9d Digest-HMAC-1.03.tar.gz +sha256 3bc72c6d3ff144d73aefb90e9a78d33612d58cf1cd1631ecfb8985ba96da4a59 Digest-HMAC-1.03.tar.gz + +# computed by scancpan +sha256 56bf7cdaec5eebf74d58679638ebef5015883e65c1be7251a3ef8cce8bdd1ff5 README diff --git a/package/perl-digest-hmac/perl-digest-hmac.mk b/package/perl-digest-hmac/perl-digest-hmac.mk new file mode 100644 index 00000000..daacf7da --- /dev/null +++ b/package/perl-digest-hmac/perl-digest-hmac.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-digest-hmac +# +################################################################################ + +PERL_DIGEST_HMAC_VERSION = 1.03 +PERL_DIGEST_HMAC_SOURCE = Digest-HMAC-$(PERL_DIGEST_HMAC_VERSION).tar.gz +PERL_DIGEST_HMAC_SITE = $(BR2_CPAN_MIRROR)/authors/id/G/GA/GAAS +PERL_DIGEST_HMAC_LICENSE = Artistic or GPL-1.0+ +PERL_DIGEST_HMAC_LICENSE_FILES = README +PERL_DIGEST_HMAC_DISTNAME = Digest-HMAC + +$(eval $(perl-package)) diff --git a/package/perl-digest-sha1/Config.in b/package/perl-digest-sha1/Config.in new file mode 100644 index 00000000..1e093a04 --- /dev/null +++ b/package/perl-digest-sha1/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PERL_DIGEST_SHA1 + bool "perl-digest-sha1" + depends on !BR2_STATIC_LIBS + help + Perl interface to the SHA-1 algorithm. + + https://metacpan.org/release/Digest-SHA1 + +comment "perl-digest-sha1 needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-digest-sha1/perl-digest-sha1.hash b/package/perl-digest-sha1/perl-digest-sha1.hash new file mode 100644 index 00000000..bfc94a12 --- /dev/null +++ b/package/perl-digest-sha1/perl-digest-sha1.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 bd22388f268434f2b24f64e28bf1aa35 Digest-SHA1-2.13.tar.gz +sha256 68c1dac2187421f0eb7abf71452a06f190181b8fc4b28ededf5b90296fb943cc Digest-SHA1-2.13.tar.gz + +# computed by scancpan +sha256 805bee77fab9c72b0bfb452bb623b278f1767de62011e1814de2a6f6115439c8 README diff --git a/package/perl-digest-sha1/perl-digest-sha1.mk b/package/perl-digest-sha1/perl-digest-sha1.mk new file mode 100644 index 00000000..d3188db1 --- /dev/null +++ b/package/perl-digest-sha1/perl-digest-sha1.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-digest-sha1 +# +################################################################################ + +PERL_DIGEST_SHA1_VERSION = 2.13 +PERL_DIGEST_SHA1_SOURCE = Digest-SHA1-$(PERL_DIGEST_SHA1_VERSION).tar.gz +PERL_DIGEST_SHA1_SITE = $(BR2_CPAN_MIRROR)/authors/id/G/GA/GAAS +PERL_DIGEST_SHA1_LICENSE = Artistic or GPL-1.0+ +PERL_DIGEST_SHA1_LICENSE_FILES = README +PERL_DIGEST_SHA1_DISTNAME = Digest-SHA1 + +$(eval $(perl-package)) diff --git a/package/perl-dist-checkconflicts/Config.in b/package/perl-dist-checkconflicts/Config.in new file mode 100644 index 00000000..b34496e7 --- /dev/null +++ b/package/perl-dist-checkconflicts/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_DIST_CHECKCONFLICTS + bool "perl-dist-checkconflicts" + select BR2_PACKAGE_PERL_MODULE_RUNTIME # runtime + help + declare version conflicts for your dist. + + http://metacpan.org/release/Dist-CheckConflicts diff --git a/package/perl-dist-checkconflicts/perl-dist-checkconflicts.hash b/package/perl-dist-checkconflicts/perl-dist-checkconflicts.hash new file mode 100644 index 00000000..5605fed4 --- /dev/null +++ b/package/perl-dist-checkconflicts/perl-dist-checkconflicts.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 c8725a92b9169708b0f63036812070f2 Dist-CheckConflicts-0.11.tar.gz +sha256 ea844b9686c94d666d9d444321d764490b2cde2f985c4165b4c2c77665caedc4 Dist-CheckConflicts-0.11.tar.gz + +# computed by scancpan +sha256 b4e0637ed96008ddcbf7e0ddeb73967df3d0b4dc62a6b7fdb86eac37018cb12e LICENSE diff --git a/package/perl-dist-checkconflicts/perl-dist-checkconflicts.mk b/package/perl-dist-checkconflicts/perl-dist-checkconflicts.mk new file mode 100644 index 00000000..47bd19f6 --- /dev/null +++ b/package/perl-dist-checkconflicts/perl-dist-checkconflicts.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-dist-checkconflicts +# +################################################################################ + +PERL_DIST_CHECKCONFLICTS_VERSION = 0.11 +PERL_DIST_CHECKCONFLICTS_SOURCE = Dist-CheckConflicts-$(PERL_DIST_CHECKCONFLICTS_VERSION).tar.gz +PERL_DIST_CHECKCONFLICTS_SITE = $(BR2_CPAN_MIRROR)/authors/id/D/DO/DOY +PERL_DIST_CHECKCONFLICTS_LICENSE = Artistic or GPL-1.0+ +PERL_DIST_CHECKCONFLICTS_LICENSE_FILES = LICENSE +PERL_DIST_CHECKCONFLICTS_DISTNAME = Dist-CheckConflicts + +$(eval $(perl-package)) diff --git a/package/perl-encode-detect/Config.in b/package/perl-encode-detect/Config.in new file mode 100644 index 00000000..63ea4329 --- /dev/null +++ b/package/perl-encode-detect/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PERL_ENCODE_DETECT + bool "perl-encode-detect" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS + help + An Encode::Encoding subclass that detects the encoding of + data. + + https://metacpan.org/release/Encode-Detect + +comment "perl-encode-detect needs a toolchain w/ C++, dynamic library" + depends on BR2_STATIC_LIBS || !BR2_INSTALL_LIBSTDCPP diff --git a/package/perl-encode-detect/perl-encode-detect.hash b/package/perl-encode-detect/perl-encode-detect.hash new file mode 100644 index 00000000..1893f1db --- /dev/null +++ b/package/perl-encode-detect/perl-encode-detect.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 ee9faf55d7105c97b02b8ebe590819c7 Encode-Detect-1.01.tar.gz +sha256 834d893aa7db6ce3f158afbd0e432d6ed15a276e0940db0a74be13fd9c4bbbf1 Encode-Detect-1.01.tar.gz + +# computed by scancpan +sha256 53692a2ed6c6a2c6ec9b32dd0b820dfae91e0a1fcdf625ca9ed0bdf8705fcc4f LICENSE diff --git a/package/perl-encode-detect/perl-encode-detect.mk b/package/perl-encode-detect/perl-encode-detect.mk new file mode 100644 index 00000000..8e9ea779 --- /dev/null +++ b/package/perl-encode-detect/perl-encode-detect.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-encode-detect +# +################################################################################ + +PERL_ENCODE_DETECT_VERSION = 1.01 +PERL_ENCODE_DETECT_SOURCE = Encode-Detect-$(PERL_ENCODE_DETECT_VERSION).tar.gz +PERL_ENCODE_DETECT_SITE = $(BR2_CPAN_MIRROR)/authors/id/J/JG/JGMYERS +PERL_ENCODE_DETECT_DEPENDENCIES = host-perl-module-build +PERL_ENCODE_DETECT_LICENSE = MPL-1.1 +PERL_ENCODE_DETECT_LICENSE_FILES = LICENSE +PERL_ENCODE_DETECT_DISTNAME = Encode-Detect + +$(eval $(perl-package)) diff --git a/package/perl-encode-locale/Config.in b/package/perl-encode-locale/Config.in new file mode 100644 index 00000000..836e736c --- /dev/null +++ b/package/perl-encode-locale/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_ENCODE_LOCALE + bool "perl-encode-locale" + help + Determine the locale encoding. + + https://metacpan.org/release/Encode-Locale diff --git a/package/perl-encode-locale/perl-encode-locale.hash b/package/perl-encode-locale/perl-encode-locale.hash new file mode 100644 index 00000000..258eb295 --- /dev/null +++ b/package/perl-encode-locale/perl-encode-locale.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 fcfdb8e4ee34bcf62aed429b4a23db27 Encode-Locale-1.05.tar.gz +sha256 176fa02771f542a4efb1dbc2a4c928e8f4391bf4078473bd6040d8f11adb0ec1 Encode-Locale-1.05.tar.gz + +# computed by scancpan +sha256 edfeacafbed5a0f2c4a2a3db3fb0274a7f210768d01c853c60b7feac841c83c8 README diff --git a/package/perl-encode-locale/perl-encode-locale.mk b/package/perl-encode-locale/perl-encode-locale.mk new file mode 100644 index 00000000..1e948c65 --- /dev/null +++ b/package/perl-encode-locale/perl-encode-locale.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-encode-locale +# +################################################################################ + +PERL_ENCODE_LOCALE_VERSION = 1.05 +PERL_ENCODE_LOCALE_SOURCE = Encode-Locale-$(PERL_ENCODE_LOCALE_VERSION).tar.gz +PERL_ENCODE_LOCALE_SITE = $(BR2_CPAN_MIRROR)/authors/id/G/GA/GAAS +PERL_ENCODE_LOCALE_LICENSE = Artistic or GPL-1.0+ +PERL_ENCODE_LOCALE_LICENSE_FILES = README +PERL_ENCODE_LOCALE_DISTNAME = Encode-Locale + +$(eval $(perl-package)) diff --git a/package/perl-exporter-tiny/Config.in b/package/perl-exporter-tiny/Config.in new file mode 100644 index 00000000..04839ac1 --- /dev/null +++ b/package/perl-exporter-tiny/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_EXPORTER_TINY + bool "perl-exporter-tiny" + help + an exporter with the features of Sub::Exporter but only core + dependencies. + + https://metacpan.org/release/Exporter-Tiny diff --git a/package/perl-exporter-tiny/perl-exporter-tiny.hash b/package/perl-exporter-tiny/perl-exporter-tiny.hash new file mode 100644 index 00000000..c714ef90 --- /dev/null +++ b/package/perl-exporter-tiny/perl-exporter-tiny.hash @@ -0,0 +1,7 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 485897322a2514b4d6ca90b2daacb7cd Exporter-Tiny-1.002002.tar.gz +sha256 00f0b95716b18157132c6c118ded8ba31392563d19e490433e9a65382e707101 Exporter-Tiny-1.002002.tar.gz + +# computed by scancpan +sha256 f4cb223c8ac37d6ccd0e78b2892ca54a48a6adbe6a271c3c17c0226646297e66 COPYRIGHT +sha256 1fb7395e76eabf94c421912d7d0a4f7fa745d49e1acb76b222c21d605b66bd25 LICENSE diff --git a/package/perl-exporter-tiny/perl-exporter-tiny.mk b/package/perl-exporter-tiny/perl-exporter-tiny.mk new file mode 100644 index 00000000..c7abfbae --- /dev/null +++ b/package/perl-exporter-tiny/perl-exporter-tiny.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-exporter-tiny +# +################################################################################ + +PERL_EXPORTER_TINY_VERSION = 1.002002 +PERL_EXPORTER_TINY_SOURCE = Exporter-Tiny-$(PERL_EXPORTER_TINY_VERSION).tar.gz +PERL_EXPORTER_TINY_SITE = $(BR2_CPAN_MIRROR)/authors/id/T/TO/TOBYINK +PERL_EXPORTER_TINY_LICENSE = Artistic or GPL-1.0+ +PERL_EXPORTER_TINY_LICENSE_FILES = COPYRIGHT LICENSE +PERL_EXPORTER_TINY_DISTNAME = Exporter-Tiny + +$(eval $(perl-package)) diff --git a/package/perl-extutils-config/perl-extutils-config.hash b/package/perl-extutils-config/perl-extutils-config.hash new file mode 100644 index 00000000..518de841 --- /dev/null +++ b/package/perl-extutils-config/perl-extutils-config.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 565a7b09c7cac5907a25bbe2c959a717 ExtUtils-Config-0.008.tar.gz +sha256 ae5104f634650dce8a79b7ed13fb59d67a39c213a6776cfdaa3ee749e62f1a8c ExtUtils-Config-0.008.tar.gz + +# computed by scancpan +sha256 33b39fda54675d4d681764049e27b537cac12213aa6650667abea43662264ddc LICENSE diff --git a/package/perl-extutils-config/perl-extutils-config.mk b/package/perl-extutils-config/perl-extutils-config.mk new file mode 100644 index 00000000..f46ca3e6 --- /dev/null +++ b/package/perl-extutils-config/perl-extutils-config.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-extutils-config +# +################################################################################ + +PERL_EXTUTILS_CONFIG_VERSION = 0.008 +PERL_EXTUTILS_CONFIG_SOURCE = ExtUtils-Config-$(PERL_EXTUTILS_CONFIG_VERSION).tar.gz +PERL_EXTUTILS_CONFIG_SITE = $(BR2_CPAN_MIRROR)/authors/id/L/LE/LEONT +PERL_EXTUTILS_CONFIG_LICENSE = Artistic or GPL-1.0+ +PERL_EXTUTILS_CONFIG_LICENSE_FILES = LICENSE +PERL_EXTUTILS_CONFIG_DISTNAME = ExtUtils-Config + +$(eval $(host-perl-package)) diff --git a/package/perl-extutils-helpers/perl-extutils-helpers.hash b/package/perl-extutils-helpers/perl-extutils-helpers.hash new file mode 100644 index 00000000..2d291901 --- /dev/null +++ b/package/perl-extutils-helpers/perl-extutils-helpers.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 83b00c1e401321c425ae5db6b2b2fd12 ExtUtils-Helpers-0.026.tar.gz +sha256 de901b6790a4557cf4ec908149e035783b125bf115eb9640feb1bc1c24c33416 ExtUtils-Helpers-0.026.tar.gz + +# computed by scancpan +sha256 e5530d0ebc8662df3a970644d867faf12760b1a95ca6e2bf1c5f9af410a418e0 LICENSE diff --git a/package/perl-extutils-helpers/perl-extutils-helpers.mk b/package/perl-extutils-helpers/perl-extutils-helpers.mk new file mode 100644 index 00000000..d3b14d88 --- /dev/null +++ b/package/perl-extutils-helpers/perl-extutils-helpers.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-extutils-helpers +# +################################################################################ + +PERL_EXTUTILS_HELPERS_VERSION = 0.026 +PERL_EXTUTILS_HELPERS_SOURCE = ExtUtils-Helpers-$(PERL_EXTUTILS_HELPERS_VERSION).tar.gz +PERL_EXTUTILS_HELPERS_SITE = $(BR2_CPAN_MIRROR)/authors/id/L/LE/LEONT +PERL_EXTUTILS_HELPERS_LICENSE = Artistic or GPL-1.0+ +PERL_EXTUTILS_HELPERS_LICENSE_FILES = LICENSE +PERL_EXTUTILS_HELPERS_DISTNAME = ExtUtils-Helpers + +$(eval $(host-perl-package)) diff --git a/package/perl-extutils-installpaths/perl-extutils-installpaths.hash b/package/perl-extutils-installpaths/perl-extutils-installpaths.hash new file mode 100644 index 00000000..2627a27d --- /dev/null +++ b/package/perl-extutils-installpaths/perl-extutils-installpaths.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 9a8d66aab1ffec98ea260faf03ac612b ExtUtils-InstallPaths-0.012.tar.gz +sha256 84735e3037bab1fdffa3c2508567ad412a785c91599db3c12593a50a1dd434ed ExtUtils-InstallPaths-0.012.tar.gz + +# computed by scancpan +sha256 b95d38ac031587625625d92fbd2ee1d5df0d02606057d680e7dcf3598fe629f9 LICENSE diff --git a/package/perl-extutils-installpaths/perl-extutils-installpaths.mk b/package/perl-extutils-installpaths/perl-extutils-installpaths.mk new file mode 100644 index 00000000..e90e130c --- /dev/null +++ b/package/perl-extutils-installpaths/perl-extutils-installpaths.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-extutils-installpaths +# +################################################################################ + +PERL_EXTUTILS_INSTALLPATHS_VERSION = 0.012 +PERL_EXTUTILS_INSTALLPATHS_SOURCE = ExtUtils-InstallPaths-$(PERL_EXTUTILS_INSTALLPATHS_VERSION).tar.gz +PERL_EXTUTILS_INSTALLPATHS_SITE = $(BR2_CPAN_MIRROR)/authors/id/L/LE/LEONT +HOST_PERL_EXTUTILS_INSTALLPATHS_DEPENDENCIES = host-perl-extutils-config +PERL_EXTUTILS_INSTALLPATHS_LICENSE = Artistic or GPL-1.0+ +PERL_EXTUTILS_INSTALLPATHS_LICENSE_FILES = LICENSE +PERL_EXTUTILS_INSTALLPATHS_DISTNAME = ExtUtils-InstallPaths + +$(eval $(host-perl-package)) diff --git a/package/perl-extutils-pkgconfig/perl-extutils-pkgconfig.hash b/package/perl-extutils-pkgconfig/perl-extutils-pkgconfig.hash new file mode 100644 index 00000000..7028b96b --- /dev/null +++ b/package/perl-extutils-pkgconfig/perl-extutils-pkgconfig.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 b86318f2b6ac6af3ee985299e1e38fe5 ExtUtils-PkgConfig-1.16.tar.gz +sha256 bbeaced995d7d8d10cfc51a3a5a66da41ceb2bc04fedcab50e10e6300e801c6e ExtUtils-PkgConfig-1.16.tar.gz + +# computed by scancpan +sha256 1ca66d6d9d2e14426825889848f0b5b4d4e153afcd74b8f42a1f2937c3a9973d README diff --git a/package/perl-extutils-pkgconfig/perl-extutils-pkgconfig.mk b/package/perl-extutils-pkgconfig/perl-extutils-pkgconfig.mk new file mode 100644 index 00000000..cb11e9f5 --- /dev/null +++ b/package/perl-extutils-pkgconfig/perl-extutils-pkgconfig.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# perl-extutils-pkgconfig +# +################################################################################ + +PERL_EXTUTILS_PKGCONFIG_VERSION = 1.16 +PERL_EXTUTILS_PKGCONFIG_SOURCE = ExtUtils-PkgConfig-$(PERL_EXTUTILS_PKGCONFIG_VERSION).tar.gz +PERL_EXTUTILS_PKGCONFIG_SITE = $(BR2_CPAN_MIRROR)/authors/id/X/XA/XAOC +PERL_EXTUTILS_PKGCONFIG_LICENSE = LGPL-2.1 +PERL_EXTUTILS_PKGCONFIG_LICENSE_FILES = README +PERL_EXTUTILS_PKGCONFIG_DISTNAME = ExtUtils-PkgConfig + +HOST_PERL_EXTUTILS_PKGCONFIG_DEPENDENCIES = host-pkgconf + +HOST_PERL_EXTUTILS_PKGCONFIG_CONF_ENV = PATH=$(BR_PATH) + +$(eval $(host-perl-package)) diff --git a/package/perl-file-listing/Config.in b/package/perl-file-listing/Config.in new file mode 100644 index 00000000..acca98be --- /dev/null +++ b/package/perl-file-listing/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_FILE_LISTING + bool "perl-file-listing" + select BR2_PACKAGE_PERL_HTTP_DATE # runtime + help + parse directory listing. + + https://metacpan.org/release/File-Listing diff --git a/package/perl-file-listing/perl-file-listing.hash b/package/perl-file-listing/perl-file-listing.hash new file mode 100644 index 00000000..23589657 --- /dev/null +++ b/package/perl-file-listing/perl-file-listing.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 cf60a79563185391831613178a79b4cd File-Listing-6.14.tar.gz +sha256 15b3a4871e23164a36f226381b74d450af41f12cc94985f592a669fcac7b48ff File-Listing-6.14.tar.gz + +# computed by scancpan +sha256 7f0ccec295e6d7d2be1439cedd7caf6cc6247191f4c10ac56d91ee9bc265ba02 LICENSE diff --git a/package/perl-file-listing/perl-file-listing.mk b/package/perl-file-listing/perl-file-listing.mk new file mode 100644 index 00000000..61bbc18e --- /dev/null +++ b/package/perl-file-listing/perl-file-listing.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-file-listing +# +################################################################################ + +PERL_FILE_LISTING_VERSION = 6.14 +PERL_FILE_LISTING_SOURCE = File-Listing-$(PERL_FILE_LISTING_VERSION).tar.gz +PERL_FILE_LISTING_SITE = $(BR2_CPAN_MIRROR)/authors/id/P/PL/PLICEASE +PERL_FILE_LISTING_LICENSE = Artistic or GPL-1.0+ +PERL_FILE_LISTING_LICENSE_FILES = LICENSE +PERL_FILE_LISTING_DISTNAME = File-Listing + +$(eval $(perl-package)) diff --git a/package/perl-file-sharedir-install/perl-file-sharedir-install.hash b/package/perl-file-sharedir-install/perl-file-sharedir-install.hash new file mode 100644 index 00000000..abbab34e --- /dev/null +++ b/package/perl-file-sharedir-install/perl-file-sharedir-install.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 5eabd44a5d7d84bf2e8e502491226287 File-ShareDir-Install-0.13.tar.gz +sha256 45befdf0d95cbefe7c25a1daf293d85f780d6d2576146546e6828aad26e580f9 File-ShareDir-Install-0.13.tar.gz + +# computed by scancpan +sha256 c207ca1c71c16a443d875a78d8aeccfbe550da502cd7fda24819548afb04fb5c LICENSE diff --git a/package/perl-file-sharedir-install/perl-file-sharedir-install.mk b/package/perl-file-sharedir-install/perl-file-sharedir-install.mk new file mode 100644 index 00000000..3653a4ba --- /dev/null +++ b/package/perl-file-sharedir-install/perl-file-sharedir-install.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-file-sharedir-install +# +################################################################################ + +PERL_FILE_SHAREDIR_INSTALL_VERSION = 0.13 +PERL_FILE_SHAREDIR_INSTALL_SOURCE = File-ShareDir-Install-$(PERL_FILE_SHAREDIR_INSTALL_VERSION).tar.gz +PERL_FILE_SHAREDIR_INSTALL_SITE = $(BR2_CPAN_MIRROR)/authors/id/E/ET/ETHER +PERL_FILE_SHAREDIR_INSTALL_LICENSE = Artistic or GPL-1.0+ +PERL_FILE_SHAREDIR_INSTALL_LICENSE_FILES = LICENSE +PERL_FILE_SHAREDIR_INSTALL_DISTNAME = File-ShareDir-Install + +$(eval $(host-perl-package)) diff --git a/package/perl-file-sharedir/Config.in b/package/perl-file-sharedir/Config.in new file mode 100644 index 00000000..169569f7 --- /dev/null +++ b/package/perl-file-sharedir/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_FILE_SHAREDIR + bool "perl-file-sharedir" + select BR2_PACKAGE_PERL_CLASS_INSPECTOR # runtime + help + Locate per-dist and per-module shared files. + + https://metacpan.org/release/File-ShareDir diff --git a/package/perl-file-sharedir/perl-file-sharedir.hash b/package/perl-file-sharedir/perl-file-sharedir.hash new file mode 100644 index 00000000..413678d6 --- /dev/null +++ b/package/perl-file-sharedir/perl-file-sharedir.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 0084f730f4e3d4d89703d92b3ea82f54 File-ShareDir-1.118.tar.gz +sha256 3bb2a20ba35df958dc0a4f2306fc05d903d8b8c4de3c8beefce17739d281c958 File-ShareDir-1.118.tar.gz + +# computed by scancpan +sha256 db57983ce0a3bce54900b5a3a3a69e9a593e7b07d0f58dd9f87ac9b016ff4a6b LICENSE diff --git a/package/perl-file-sharedir/perl-file-sharedir.mk b/package/perl-file-sharedir/perl-file-sharedir.mk new file mode 100644 index 00000000..0121b563 --- /dev/null +++ b/package/perl-file-sharedir/perl-file-sharedir.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-file-sharedir +# +################################################################################ + +PERL_FILE_SHAREDIR_VERSION = 1.118 +PERL_FILE_SHAREDIR_SOURCE = File-ShareDir-$(PERL_FILE_SHAREDIR_VERSION).tar.gz +PERL_FILE_SHAREDIR_SITE = $(BR2_CPAN_MIRROR)/authors/id/R/RE/REHSACK +PERL_FILE_SHAREDIR_DEPENDENCIES = host-perl-file-sharedir-install +PERL_FILE_SHAREDIR_LICENSE = Artistic or GPL-1.0+ +PERL_FILE_SHAREDIR_LICENSE_FILES = LICENSE +PERL_FILE_SHAREDIR_DISTNAME = File-ShareDir + +$(eval $(perl-package)) diff --git a/package/perl-file-slurp/Config.in b/package/perl-file-slurp/Config.in new file mode 100644 index 00000000..33b6d337 --- /dev/null +++ b/package/perl-file-slurp/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_FILE_SLURP + bool "perl-file-slurp" + help + Simple and Efficient Reading/Writing/Modifying of Complete + Files. + + https://metacpan.org/release/File-Slurp diff --git a/package/perl-file-slurp/perl-file-slurp.hash b/package/perl-file-slurp/perl-file-slurp.hash new file mode 100644 index 00000000..f3cc579f --- /dev/null +++ b/package/perl-file-slurp/perl-file-slurp.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 a10ddfcbe153fc8d0076936ee83b98ed File-Slurp-9999.32.tar.gz +sha256 4c3c21992a9d42be3a79dd74a3c83d27d38057269d65509a2f555ea0fb2bc5b0 File-Slurp-9999.32.tar.gz + +# computed by scancpan +sha256 d1be945657536c93caf481b9f3c73fd1952ef66388c664e29021ab91d4fe47e8 README.md diff --git a/package/perl-file-slurp/perl-file-slurp.mk b/package/perl-file-slurp/perl-file-slurp.mk new file mode 100644 index 00000000..0d4ab940 --- /dev/null +++ b/package/perl-file-slurp/perl-file-slurp.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-file-slurp +# +################################################################################ + +PERL_FILE_SLURP_VERSION = 9999.32 +PERL_FILE_SLURP_SOURCE = File-Slurp-$(PERL_FILE_SLURP_VERSION).tar.gz +PERL_FILE_SLURP_SITE = $(BR2_CPAN_MIRROR)/authors/id/C/CA/CAPOEIRAB +PERL_FILE_SLURP_LICENSE = Artistic or GPL-1.0+ +PERL_FILE_SLURP_LICENSE_FILES = README.md +PERL_FILE_SLURP_DISTNAME = File-Slurp + +$(eval $(perl-package)) diff --git a/package/perl-file-util/Config.in b/package/perl-file-util/Config.in new file mode 100644 index 00000000..ddd155be --- /dev/null +++ b/package/perl-file-util/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_FILE_UTIL + bool "perl-file-util" + help + Easy, versatile, portable file handling. + + https://github.com/tommybutler/file-util/wiki diff --git a/package/perl-file-util/perl-file-util.hash b/package/perl-file-util/perl-file-util.hash new file mode 100644 index 00000000..7e529e03 --- /dev/null +++ b/package/perl-file-util/perl-file-util.hash @@ -0,0 +1,7 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 093fe77c4658f98375c7f6cc68694948 File-Util-4.201720.tar.gz +sha256 d4491021850d5c5cbd702c7e4744858079841d2fa93f1c2d09ddc9a7863608df File-Util-4.201720.tar.gz + +# computed by scancpan +sha256 5f3732812570654ba911e45ec4e5f7353f4b63747ebfc506c543e8fb1ccf797f COPYING +sha256 996b77ca668f16a443ed14758fce492bddd9f55fe831ee8353274c89191b8544 LICENSE diff --git a/package/perl-file-util/perl-file-util.mk b/package/perl-file-util/perl-file-util.mk new file mode 100644 index 00000000..4348b0e9 --- /dev/null +++ b/package/perl-file-util/perl-file-util.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# perl-file-util +# +################################################################################ + +PERL_FILE_UTIL_VERSION = 4.201720 +PERL_FILE_UTIL_SOURCE = File-Util-$(PERL_FILE_UTIL_VERSION).tar.gz +PERL_FILE_UTIL_SITE = $(BR2_CPAN_MIRROR)/authors/id/T/TO/TOMMY +PERL_FILE_UTIL_DEPENDENCIES = host-perl-module-build +PERL_FILE_UTIL_LICENSE = Artistic or GPL-1.0+ +PERL_FILE_UTIL_LICENSE_FILES = COPYING LICENSE +PERL_FILE_UTIL_DISTNAME = File-Util +HOST_PERL_FILE_UTIL_DEPENDENCIES = host-perl-module-build + +$(eval $(perl-package)) +$(eval $(host-perl-package)) diff --git a/package/perl-filesys-notify-simple/Config.in b/package/perl-filesys-notify-simple/Config.in new file mode 100644 index 00000000..bff3cc61 --- /dev/null +++ b/package/perl-filesys-notify-simple/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_FILESYS_NOTIFY_SIMPLE + bool "perl-filesys-notify-simple" + help + Simple and dumb file system watcher. + + https://github.com/miyagawa/Filesys-Notify-Simple diff --git a/package/perl-filesys-notify-simple/perl-filesys-notify-simple.hash b/package/perl-filesys-notify-simple/perl-filesys-notify-simple.hash new file mode 100644 index 00000000..87d365d6 --- /dev/null +++ b/package/perl-filesys-notify-simple/perl-filesys-notify-simple.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 4a3ca3098b2455346fe24a66c94d2151 Filesys-Notify-Simple-0.14.tar.gz +sha256 1fda712d4ba5e1868159ed35f6f8efbfae9d435d6376f5606d533bcb080555a4 Filesys-Notify-Simple-0.14.tar.gz + +# computed by scancpan +sha256 9a5cceb9fdb0064b57eeca0e7ad2af1e57eff51320a13083fc22930d2a190ed7 LICENSE diff --git a/package/perl-filesys-notify-simple/perl-filesys-notify-simple.mk b/package/perl-filesys-notify-simple/perl-filesys-notify-simple.mk new file mode 100644 index 00000000..62bc80c9 --- /dev/null +++ b/package/perl-filesys-notify-simple/perl-filesys-notify-simple.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-filesys-notify-simple +# +################################################################################ + +PERL_FILESYS_NOTIFY_SIMPLE_VERSION = 0.14 +PERL_FILESYS_NOTIFY_SIMPLE_SOURCE = Filesys-Notify-Simple-$(PERL_FILESYS_NOTIFY_SIMPLE_VERSION).tar.gz +PERL_FILESYS_NOTIFY_SIMPLE_SITE = $(BR2_CPAN_MIRROR)/authors/id/M/MI/MIYAGAWA +PERL_FILESYS_NOTIFY_SIMPLE_LICENSE = Artistic or GPL-1.0+ +PERL_FILESYS_NOTIFY_SIMPLE_LICENSE_FILES = LICENSE +PERL_FILESYS_NOTIFY_SIMPLE_DISTNAME = Filesys-Notify-Simple + +$(eval $(perl-package)) diff --git a/package/perl-gd/0001-Makefile.PL-fix-cross-compilation-with-gdlib.pc.patch b/package/perl-gd/0001-Makefile.PL-fix-cross-compilation-with-gdlib.pc.patch new file mode 100644 index 00000000..af053c56 --- /dev/null +++ b/package/perl-gd/0001-Makefile.PL-fix-cross-compilation-with-gdlib.pc.patch @@ -0,0 +1,34 @@ +From 11dc017e902397c452331425eb6101b3315572fa Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 24 Jan 2021 10:59:31 +0100 +Subject: [PATCH] Makefile.PL: fix cross-compilation with gdlib.pc + +Cross-compilation will fail if gdlib.pc does not contain any cflags. +Indeed, if cflags is empty, Makefile.PL will use the default value for +INC (i.e. -I/usr/include -I/usr/include/gd) + +It should be noted that gdlib-config has been dropped from gd since +version 2.3.0 + +Signed-off-by: Fabrice Fontaine +[Upstream status: probably not upstreamable] +--- + Makefile.PL | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile.PL b/Makefile.PL +index 25f2f93..7da3651 100644 +--- a/Makefile.PL ++++ b/Makefile.PL +@@ -47,7 +47,7 @@ If you want to try to compile anyway, please rerun this script with the option - + END + } + +-@INC = qw(-I/usr/include -I/usr/include/gd) unless @INC; ++#@INC = qw(-I/usr/include -I/usr/include/gd) unless @INC; + @LIBPATH = qw(-L/usr/lib/X11 -L/usr/X11R6/lib -L/usr/X11/lib -L/usr/lib) unless @LIBPATH; + @LIBS = qw(-lgd) unless @LIBS; + +-- +2.29.2 + diff --git a/package/perl-gd/Config.in b/package/perl-gd/Config.in new file mode 100644 index 00000000..044e6010 --- /dev/null +++ b/package/perl-gd/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PERL_GD + bool "perl-gd" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_GD + help + Perl interface to the gd2 graphics library. + + https://metacpan.org/release/GD + +comment "perl-gd needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-gd/perl-gd.hash b/package/perl-gd/perl-gd.hash new file mode 100644 index 00000000..780b1d1e --- /dev/null +++ b/package/perl-gd/perl-gd.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 c2bf1ca56d15e33d2432e4d8ba5aeadf GD-2.73.tar.gz +sha256 491c9e73238522e2987e66725a20935f4268a3864202ecbaf4659a1691ba322b GD-2.73.tar.gz + +# computed by scancpan +sha256 1e2250289d6df4ba1c24f7550982d7ffaff2c97cd02e847659406e1afd28e83f LICENSE diff --git a/package/perl-gd/perl-gd.mk b/package/perl-gd/perl-gd.mk new file mode 100644 index 00000000..b402dfff --- /dev/null +++ b/package/perl-gd/perl-gd.mk @@ -0,0 +1,54 @@ +################################################################################ +# +# perl-gd +# +################################################################################ + +PERL_GD_VERSION = 2.73 +PERL_GD_SOURCE = GD-$(PERL_GD_VERSION).tar.gz +PERL_GD_SITE = $(BR2_CPAN_MIRROR)/authors/id/R/RU/RURBAN +PERL_GD_DEPENDENCIES = host-perl-extutils-pkgconfig zlib gd +PERL_GD_LICENSE = Artistic or GPL-1.0+ +PERL_GD_LICENSE_FILES = LICENSE +PERL_GD_DISTNAME = GD + +PERL_GD_CONF_ENV = \ + PATH=$(BR_PATH) \ + PKG_CONFIG_PATH="$(STAGING_DIR)/usr/lib/pkgconfig" + +ifeq ($(BR2_PACKAGE_FONTCONFIG),y) +PERL_GD_DEPENDENCIES += fontconfig +PERL_GD_OPTIONS += FONTCONFIG +PERL_GD_CONF_OPTS += -lib_fontconfig_path=$(STAGING_DIR)/usr +endif + +ifeq ($(BR2_PACKAGE_FREETYPE),y) +PERL_GD_DEPENDENCIES += freetype +PERL_GD_OPTIONS += FT +PERL_GD_CONF_OPTS += -lib_ft_path=$(STAGING_DIR)/usr +endif + +ifeq ($(BR2_PACKAGE_JPEG),y) +PERL_GD_DEPENDENCIES += jpeg +PERL_GD_OPTIONS += JPEG +PERL_GD_CONF_OPTS += -lib_jpeg_path=$(STAGING_DIR)/usr +endif + +ifeq ($(BR2_PACKAGE_LIBPNG),y) +PERL_GD_DEPENDENCIES += libpng +PERL_GD_OPTIONS += PNG +PERL_GD_CONF_OPTS += -lib_png_path=$(STAGING_DIR)/usr +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXPM),y) +PERL_GD_DEPENDENCIES += xlib_libXpm +PERL_GD_OPTIONS += XPM +PERL_GD_CONF_OPTS += -lib_xpm_path=$(STAGING_DIR)/usr +endif + +PERL_GD_CONF_OPTS += \ + -lib_gd_path=$(STAGING_DIR)/usr \ + -lib_zlib_path=$(STAGING_DIR)/usr \ + -options=$(subst $(space),$(comma),$(PERL_GD_OPTIONS)) + +$(eval $(perl-package)) diff --git a/package/perl-gdgraph/Config.in b/package/perl-gdgraph/Config.in new file mode 100644 index 00000000..d8885fe0 --- /dev/null +++ b/package/perl-gdgraph/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PERL_GDGRAPH + bool "perl-gdgraph" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_PERL_GD # runtime + select BR2_PACKAGE_PERL_GDTEXTUTIL # runtime + help + Produces charts with GD. + + https://metacpan.org/release/GDGraph + +comment "perl-gdgraph needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-gdgraph/perl-gdgraph.hash b/package/perl-gdgraph/perl-gdgraph.hash new file mode 100644 index 00000000..c0b195eb --- /dev/null +++ b/package/perl-gdgraph/perl-gdgraph.hash @@ -0,0 +1,7 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 38c6a188519e6272e9b2b722b315c3d8 GDGraph-1.54.tar.gz +sha256 b96f5c10b656c17d16ab65a1777c908297b028d3b6815f6d54b2337f006bfa4f GDGraph-1.54.tar.gz + +# Hash for license files +sha256 710484e3a1196664bbe8a5ad5d53c528e01226eb20e2885a4e1131eb6c6565cd Dustismo.LICENSE +sha256 f44630ad9101e40a101d906a07908c975a9b0742273cfb0c00a51d73afb53e7d README diff --git a/package/perl-gdgraph/perl-gdgraph.mk b/package/perl-gdgraph/perl-gdgraph.mk new file mode 100644 index 00000000..286902a6 --- /dev/null +++ b/package/perl-gdgraph/perl-gdgraph.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-gdgraph +# +################################################################################ + +PERL_GDGRAPH_VERSION = 1.54 +PERL_GDGRAPH_SOURCE = GDGraph-$(PERL_GDGRAPH_VERSION).tar.gz +PERL_GDGRAPH_SITE = $(BR2_CPAN_MIRROR)/authors/id/R/RU/RUZ +PERL_GDGRAPH_LICENSE = Artistic or GPL-1.0+ (perl module), GPL-2.0+ (font) +PERL_GDGRAPH_LICENSE_FILES = Dustismo.LICENSE README +PERL_GDGRAPH_DISTNAME = GDGraph + +$(eval $(perl-package)) diff --git a/package/perl-gdtextutil/Config.in b/package/perl-gdtextutil/Config.in new file mode 100644 index 00000000..cff328e0 --- /dev/null +++ b/package/perl-gdtextutil/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_GDTEXTUTIL + bool "perl-gdtextutil" + help + Text utilities for use with GD. + + https://metacpan.org/release/GDTextUtil diff --git a/package/perl-gdtextutil/perl-gdtextutil.hash b/package/perl-gdtextutil/perl-gdtextutil.hash new file mode 100644 index 00000000..add0717f --- /dev/null +++ b/package/perl-gdtextutil/perl-gdtextutil.hash @@ -0,0 +1,7 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 941ad06eadc86b47f3a32da405665c41 GDTextUtil-0.86.tar.gz +sha256 886ecbf85cfe94f4135ee5689c4847a9ae783ecb99e6759e12c734f2dd6116bc GDTextUtil-0.86.tar.gz + +# Hash for license files +sha256 710484e3a1196664bbe8a5ad5d53c528e01226eb20e2885a4e1131eb6c6565cd Dustismo.LICENSE +sha256 93ca7dd7f372c79e8ec1f849f2a418a67d195e4027c1b3e3dd8444fb30f3e97c README diff --git a/package/perl-gdtextutil/perl-gdtextutil.mk b/package/perl-gdtextutil/perl-gdtextutil.mk new file mode 100644 index 00000000..f91d9e9e --- /dev/null +++ b/package/perl-gdtextutil/perl-gdtextutil.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-gdtextutil +# +################################################################################ + +PERL_GDTEXTUTIL_VERSION = 0.86 +PERL_GDTEXTUTIL_SOURCE = GDTextUtil-$(PERL_GDTEXTUTIL_VERSION).tar.gz +PERL_GDTEXTUTIL_SITE = $(BR2_CPAN_MIRROR)/authors/id/M/MV/MVERB +PERL_GDTEXTUTIL_LICENSE = Artistic or GPL-1.0+ (perl module), GPL-2.0+ (font) +PERL_GDTEXTUTIL_LICENSE_FILES = Dustismo.LICENSE README +PERL_GDTEXTUTIL_DISTNAME = GDTextUtil + +$(eval $(perl-package)) diff --git a/package/perl-hash-multivalue/Config.in b/package/perl-hash-multivalue/Config.in new file mode 100644 index 00000000..8621983d --- /dev/null +++ b/package/perl-hash-multivalue/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_HASH_MULTIVALUE + bool "perl-hash-multivalue" + help + Store multiple values per key. + + https://github.com/miyagawa/Hash-MultiValue diff --git a/package/perl-hash-multivalue/perl-hash-multivalue.hash b/package/perl-hash-multivalue/perl-hash-multivalue.hash new file mode 100644 index 00000000..3a686506 --- /dev/null +++ b/package/perl-hash-multivalue/perl-hash-multivalue.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 508015312eb08cd2bcea987c4efbb93d Hash-MultiValue-0.16.tar.gz +sha256 66181df7aa68e2786faf6895c88b18b95c800a8e4e6fb4c07fd176410a3c73f4 Hash-MultiValue-0.16.tar.gz + +# computed by scancpan +sha256 af32512e13f6722dab770b989c57556a5e3d29a49b22b8ad5668064db8592401 LICENSE diff --git a/package/perl-hash-multivalue/perl-hash-multivalue.mk b/package/perl-hash-multivalue/perl-hash-multivalue.mk new file mode 100644 index 00000000..dcbfe843 --- /dev/null +++ b/package/perl-hash-multivalue/perl-hash-multivalue.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-hash-multivalue +# +################################################################################ + +PERL_HASH_MULTIVALUE_VERSION = 0.16 +PERL_HASH_MULTIVALUE_SOURCE = Hash-MultiValue-$(PERL_HASH_MULTIVALUE_VERSION).tar.gz +PERL_HASH_MULTIVALUE_SITE = $(BR2_CPAN_MIRROR)/authors/id/A/AR/ARISTOTLE +PERL_HASH_MULTIVALUE_LICENSE = Artistic or GPL-1.0+ +PERL_HASH_MULTIVALUE_LICENSE_FILES = LICENSE +PERL_HASH_MULTIVALUE_DISTNAME = Hash-MultiValue + +$(eval $(perl-package)) diff --git a/package/perl-html-parser/Config.in b/package/perl-html-parser/Config.in new file mode 100644 index 00000000..10cd95e4 --- /dev/null +++ b/package/perl-html-parser/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PERL_HTML_PARSER + bool "perl-html-parser" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_PERL_HTML_TAGSET # runtime + help + HTML parser class. + + https://metacpan.org/release/HTML-Parser + +comment "perl-html-parser needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-html-parser/perl-html-parser.hash b/package/perl-html-parser/perl-html-parser.hash new file mode 100644 index 00000000..021ef26c --- /dev/null +++ b/package/perl-html-parser/perl-html-parser.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 65bf65aa8b34b35443e094010f991406 HTML-Parser-3.75.tar.gz +sha256 ac6b5e25a8df7af54885201e91c45fb9ab6744c08cedc1a38fcc7d95d21193a9 HTML-Parser-3.75.tar.gz + +# computed by scancpan +sha256 0e57338bc10d5fb8891012ebee65a7b504b247f5bb485e121b8b48d7a118a60b LICENSE diff --git a/package/perl-html-parser/perl-html-parser.mk b/package/perl-html-parser/perl-html-parser.mk new file mode 100644 index 00000000..93e4f674 --- /dev/null +++ b/package/perl-html-parser/perl-html-parser.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-html-parser +# +################################################################################ + +PERL_HTML_PARSER_VERSION = 3.75 +PERL_HTML_PARSER_SOURCE = HTML-Parser-$(PERL_HTML_PARSER_VERSION).tar.gz +PERL_HTML_PARSER_SITE = $(BR2_CPAN_MIRROR)/authors/id/C/CA/CAPOEIRAB +PERL_HTML_PARSER_LICENSE = Artistic or GPL-1.0+ +PERL_HTML_PARSER_LICENSE_FILES = LICENSE +PERL_HTML_PARSER_DISTNAME = HTML-Parser + +$(eval $(perl-package)) diff --git a/package/perl-html-tagset/Config.in b/package/perl-html-tagset/Config.in new file mode 100644 index 00000000..4956198f --- /dev/null +++ b/package/perl-html-tagset/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_HTML_TAGSET + bool "perl-html-tagset" + help + data tables useful in parsing HTML. + + https://metacpan.org/release/HTML-Tagset diff --git a/package/perl-html-tagset/perl-html-tagset.hash b/package/perl-html-tagset/perl-html-tagset.hash new file mode 100644 index 00000000..9569ece6 --- /dev/null +++ b/package/perl-html-tagset/perl-html-tagset.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 d2bfa18fe1904df7f683e96611e87437 HTML-Tagset-3.20.tar.gz +sha256 adb17dac9e36cd011f5243881c9739417fd102fce760f8de4e9be4c7131108e2 HTML-Tagset-3.20.tar.gz + +# computed by scancpan +sha256 275cc182d78ac2db6856442c5d334c925350fb56fe83ee3577f5850317423419 README diff --git a/package/perl-html-tagset/perl-html-tagset.mk b/package/perl-html-tagset/perl-html-tagset.mk new file mode 100644 index 00000000..c6b5f691 --- /dev/null +++ b/package/perl-html-tagset/perl-html-tagset.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-html-tagset +# +################################################################################ + +PERL_HTML_TAGSET_VERSION = 3.20 +PERL_HTML_TAGSET_SOURCE = HTML-Tagset-$(PERL_HTML_TAGSET_VERSION).tar.gz +PERL_HTML_TAGSET_SITE = $(BR2_CPAN_MIRROR)/authors/id/P/PE/PETDANCE +PERL_HTML_TAGSET_LICENSE = Artistic or GPL-1.0+ +PERL_HTML_TAGSET_LICENSE_FILES = README +PERL_HTML_TAGSET_DISTNAME = HTML-Tagset + +$(eval $(perl-package)) diff --git a/package/perl-http-cookies/Config.in b/package/perl-http-cookies/Config.in new file mode 100644 index 00000000..3ca461bf --- /dev/null +++ b/package/perl-http-cookies/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PERL_HTTP_COOKIES + bool "perl-http-cookies" + select BR2_PACKAGE_PERL_HTTP_DATE # runtime + select BR2_PACKAGE_PERL_HTTP_MESSAGE # runtime + help + HTTP cookie jars. + + https://github.com/libwww-perl/HTTP-Cookies diff --git a/package/perl-http-cookies/perl-http-cookies.hash b/package/perl-http-cookies/perl-http-cookies.hash new file mode 100644 index 00000000..15d9e7a8 --- /dev/null +++ b/package/perl-http-cookies/perl-http-cookies.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 b4d7804231b1dfd10999d42283e0cf06 HTTP-Cookies-6.10.tar.gz +sha256 e36f36633c5ce6b5e4b876ffcf74787cc5efe0736dd7f487bdd73c14f0bd7007 HTTP-Cookies-6.10.tar.gz + +# computed by scancpan +sha256 82902ce20c8ed71d7f4e7a6a5b2b26e43a7e2e90c78098fb49aa49e03ac808e0 LICENSE diff --git a/package/perl-http-cookies/perl-http-cookies.mk b/package/perl-http-cookies/perl-http-cookies.mk new file mode 100644 index 00000000..745fd10a --- /dev/null +++ b/package/perl-http-cookies/perl-http-cookies.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-http-cookies +# +################################################################################ + +PERL_HTTP_COOKIES_VERSION = 6.10 +PERL_HTTP_COOKIES_SOURCE = HTTP-Cookies-$(PERL_HTTP_COOKIES_VERSION).tar.gz +PERL_HTTP_COOKIES_SITE = $(BR2_CPAN_MIRROR)/authors/id/O/OA/OALDERS +PERL_HTTP_COOKIES_LICENSE = Artistic or GPL-1.0+ +PERL_HTTP_COOKIES_LICENSE_FILES = LICENSE +PERL_HTTP_COOKIES_DISTNAME = HTTP-Cookies + +$(eval $(perl-package)) diff --git a/package/perl-http-daemon/Config.in b/package/perl-http-daemon/Config.in new file mode 100644 index 00000000..0c7ffe72 --- /dev/null +++ b/package/perl-http-daemon/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PERL_HTTP_DAEMON + bool "perl-http-daemon" + select BR2_PACKAGE_PERL_HTTP_DATE # runtime + select BR2_PACKAGE_PERL_HTTP_MESSAGE # runtime + select BR2_PACKAGE_PERL_LWP_MEDIATYPES # runtime + help + A simple http server class. + + https://github.com/libwww-perl/HTTP-Daemon diff --git a/package/perl-http-daemon/perl-http-daemon.hash b/package/perl-http-daemon/perl-http-daemon.hash new file mode 100644 index 00000000..f8272a4f --- /dev/null +++ b/package/perl-http-daemon/perl-http-daemon.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 63674e3f81760a29075853413eb157d8 HTTP-Daemon-6.12.tar.gz +sha256 df47bed10c38670c780fd0116867d5fd4693604acde31ba63380dce04c4e1fa6 HTTP-Daemon-6.12.tar.gz + +# computed by scancpan +sha256 e84ac5ab84ace59952d2640e0ca4522eb0aaa8c2aa696352d1252aa109ea20bc LICENCE diff --git a/package/perl-http-daemon/perl-http-daemon.mk b/package/perl-http-daemon/perl-http-daemon.mk new file mode 100644 index 00000000..e4750726 --- /dev/null +++ b/package/perl-http-daemon/perl-http-daemon.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-http-daemon +# +################################################################################ + +PERL_HTTP_DAEMON_VERSION = 6.12 +PERL_HTTP_DAEMON_SOURCE = HTTP-Daemon-$(PERL_HTTP_DAEMON_VERSION).tar.gz +PERL_HTTP_DAEMON_SITE = $(BR2_CPAN_MIRROR)/authors/id/O/OA/OALDERS +PERL_HTTP_DAEMON_DEPENDENCIES = host-perl-module-build-tiny +PERL_HTTP_DAEMON_LICENSE = Artistic or GPL-1.0+ +PERL_HTTP_DAEMON_LICENSE_FILES = LICENCE +PERL_HTTP_DAEMON_DISTNAME = HTTP-Daemon + +$(eval $(perl-package)) diff --git a/package/perl-http-date/Config.in b/package/perl-http-date/Config.in new file mode 100644 index 00000000..c5151f2e --- /dev/null +++ b/package/perl-http-date/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_HTTP_DATE + bool "perl-http-date" + select BR2_PACKAGE_PERL_TIMEDATE # runtime + help + HTTP::Date - date conversion routines. + + https://github.com/libwww-perl/HTTP-Date diff --git a/package/perl-http-date/perl-http-date.hash b/package/perl-http-date/perl-http-date.hash new file mode 100644 index 00000000..7c1fa5b9 --- /dev/null +++ b/package/perl-http-date/perl-http-date.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 2ecbb3aedf6aef062605191813ca3027 HTTP-Date-6.05.tar.gz +sha256 365d6294dfbd37ebc51def8b65b81eb79b3934ecbc95a2ec2d4d827efe6a922b HTTP-Date-6.05.tar.gz + +# computed by scancpan +sha256 305b71c4d2fd6380585689c5f1c620737a36a318ce0f9c772badce0fe293a44e LICENSE diff --git a/package/perl-http-date/perl-http-date.mk b/package/perl-http-date/perl-http-date.mk new file mode 100644 index 00000000..43583be3 --- /dev/null +++ b/package/perl-http-date/perl-http-date.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-http-date +# +################################################################################ + +PERL_HTTP_DATE_VERSION = 6.05 +PERL_HTTP_DATE_SOURCE = HTTP-Date-$(PERL_HTTP_DATE_VERSION).tar.gz +PERL_HTTP_DATE_SITE = $(BR2_CPAN_MIRROR)/authors/id/O/OA/OALDERS +PERL_HTTP_DATE_LICENSE = Artistic or GPL-1.0+ +PERL_HTTP_DATE_LICENSE_FILES = LICENSE +PERL_HTTP_DATE_DISTNAME = HTTP-Date + +$(eval $(perl-package)) diff --git a/package/perl-http-entity-parser/Config.in b/package/perl-http-entity-parser/Config.in new file mode 100644 index 00000000..445366b7 --- /dev/null +++ b/package/perl-http-entity-parser/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PERL_HTTP_ENTITY_PARSER + bool "perl-http-entity-parser" + select BR2_PACKAGE_PERL_HTTP_MULTIPARTPARSER # runtime + select BR2_PACKAGE_PERL_HASH_MULTIVALUE # runtime + select BR2_PACKAGE_PERL_JSON_MAYBEXS # runtime + select BR2_PACKAGE_PERL_STREAM_BUFFERED # runtime + select BR2_PACKAGE_PERL_WWW_FORM_URLENCODED # runtime + help + PSGI compliant HTTP Entity Parser. + + https://github.com/kazeburo/HTTP-Entity-Parser diff --git a/package/perl-http-entity-parser/perl-http-entity-parser.hash b/package/perl-http-entity-parser/perl-http-entity-parser.hash new file mode 100644 index 00000000..69d5f6e9 --- /dev/null +++ b/package/perl-http-entity-parser/perl-http-entity-parser.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 09663f9577975587e832e28ba5f5f8af HTTP-Entity-Parser-0.25.tar.gz +sha256 3a8cd0d8cba3d17cd8c04ee82d7341dfaa247dbdd94a49eb94b53f69e483ec3a HTTP-Entity-Parser-0.25.tar.gz + +# computed by scancpan +sha256 79c2a066104e71602785fd815c5aea6f7db78c19451d68521380083f9c2a8805 LICENSE diff --git a/package/perl-http-entity-parser/perl-http-entity-parser.mk b/package/perl-http-entity-parser/perl-http-entity-parser.mk new file mode 100644 index 00000000..2304955b --- /dev/null +++ b/package/perl-http-entity-parser/perl-http-entity-parser.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-http-entity-parser +# +################################################################################ + +PERL_HTTP_ENTITY_PARSER_VERSION = 0.25 +PERL_HTTP_ENTITY_PARSER_SOURCE = HTTP-Entity-Parser-$(PERL_HTTP_ENTITY_PARSER_VERSION).tar.gz +PERL_HTTP_ENTITY_PARSER_SITE = $(BR2_CPAN_MIRROR)/authors/id/K/KA/KAZEBURO +PERL_HTTP_ENTITY_PARSER_DEPENDENCIES = host-perl-module-build-tiny +PERL_HTTP_ENTITY_PARSER_LICENSE = Artistic or GPL-1.0+ +PERL_HTTP_ENTITY_PARSER_LICENSE_FILES = LICENSE +PERL_HTTP_ENTITY_PARSER_DISTNAME = HTTP-Entity-Parser + +$(eval $(perl-package)) diff --git a/package/perl-http-headers-fast/Config.in b/package/perl-http-headers-fast/Config.in new file mode 100644 index 00000000..b4b19e5b --- /dev/null +++ b/package/perl-http-headers-fast/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_HTTP_HEADERS_FAST + bool "perl-http-headers-fast" + select BR2_PACKAGE_PERL_HTTP_DATE # runtime + help + faster implementation of HTTP::Headers. + + https://github.com/tokuhirom/HTTP-Headers-Fast diff --git a/package/perl-http-headers-fast/perl-http-headers-fast.hash b/package/perl-http-headers-fast/perl-http-headers-fast.hash new file mode 100644 index 00000000..9282f2ef --- /dev/null +++ b/package/perl-http-headers-fast/perl-http-headers-fast.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 a166a4d0ba47eca8ff9dffb760865f5f HTTP-Headers-Fast-0.22.tar.gz +sha256 cc431db68496dd884db4bc0c0b7112c1f4a4f1dc68c4f5a3caa757a1e7481b48 HTTP-Headers-Fast-0.22.tar.gz + +# computed by scancpan +sha256 511724425acf76d736145cfbf7c775b024c70ae8674ebf9a24dfda2c8e4032a3 LICENSE diff --git a/package/perl-http-headers-fast/perl-http-headers-fast.mk b/package/perl-http-headers-fast/perl-http-headers-fast.mk new file mode 100644 index 00000000..d7bff6f9 --- /dev/null +++ b/package/perl-http-headers-fast/perl-http-headers-fast.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-http-headers-fast +# +################################################################################ + +PERL_HTTP_HEADERS_FAST_VERSION = 0.22 +PERL_HTTP_HEADERS_FAST_SOURCE = HTTP-Headers-Fast-$(PERL_HTTP_HEADERS_FAST_VERSION).tar.gz +PERL_HTTP_HEADERS_FAST_SITE = $(BR2_CPAN_MIRROR)/authors/id/T/TO/TOKUHIROM +PERL_HTTP_HEADERS_FAST_DEPENDENCIES = host-perl-module-build-tiny +PERL_HTTP_HEADERS_FAST_LICENSE = Artistic or GPL-1.0+ +PERL_HTTP_HEADERS_FAST_LICENSE_FILES = LICENSE +PERL_HTTP_HEADERS_FAST_DISTNAME = HTTP-Headers-Fast + +$(eval $(perl-package)) diff --git a/package/perl-http-message/Config.in b/package/perl-http-message/Config.in new file mode 100644 index 00000000..82538cfc --- /dev/null +++ b/package/perl-http-message/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PERL_HTTP_MESSAGE + bool "perl-http-message" + select BR2_PACKAGE_PERL_ENCODE_LOCALE # runtime + select BR2_PACKAGE_PERL_HTTP_DATE # runtime + select BR2_PACKAGE_PERL_IO_HTML # runtime + select BR2_PACKAGE_PERL_LWP_MEDIATYPES # runtime + select BR2_PACKAGE_PERL_URI # runtime + help + HTTP style message (base class). + + https://github.com/libwww-perl/HTTP-Message diff --git a/package/perl-http-message/perl-http-message.hash b/package/perl-http-message/perl-http-message.hash new file mode 100644 index 00000000..4e406c9d --- /dev/null +++ b/package/perl-http-message/perl-http-message.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 4b4038aef74f63c2b6baca189c6c6602 HTTP-Message-6.27.tar.gz +sha256 0be0f720fbbbdbae8711f6eec9b2f0d34bd5ed5046fc66b80dc3b42017c1e699 HTTP-Message-6.27.tar.gz + +# computed by scancpan +sha256 1379396dcd2291f17a741d2d6bf14d379f5f2ab91b3c7e7b92c5f82856e2d7ac LICENSE diff --git a/package/perl-http-message/perl-http-message.mk b/package/perl-http-message/perl-http-message.mk new file mode 100644 index 00000000..72b94356 --- /dev/null +++ b/package/perl-http-message/perl-http-message.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-http-message +# +################################################################################ + +PERL_HTTP_MESSAGE_VERSION = 6.27 +PERL_HTTP_MESSAGE_SOURCE = HTTP-Message-$(PERL_HTTP_MESSAGE_VERSION).tar.gz +PERL_HTTP_MESSAGE_SITE = $(BR2_CPAN_MIRROR)/authors/id/O/OA/OALDERS +PERL_HTTP_MESSAGE_LICENSE = Artistic or GPL-1.0+ +PERL_HTTP_MESSAGE_LICENSE_FILES = LICENSE +PERL_HTTP_MESSAGE_DISTNAME = HTTP-Message + +$(eval $(perl-package)) diff --git a/package/perl-http-multipartparser/Config.in b/package/perl-http-multipartparser/Config.in new file mode 100644 index 00000000..93c196ca --- /dev/null +++ b/package/perl-http-multipartparser/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_HTTP_MULTIPARTPARSER + bool "perl-http-multipartparser" + help + HTTP MultiPart Parser. + + https://metacpan.org/release/HTTP-MultiPartParser diff --git a/package/perl-http-multipartparser/perl-http-multipartparser.hash b/package/perl-http-multipartparser/perl-http-multipartparser.hash new file mode 100644 index 00000000..079c02f6 --- /dev/null +++ b/package/perl-http-multipartparser/perl-http-multipartparser.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 1b07ebac54ce3288c044a23ba60196d2 HTTP-MultiPartParser-0.02.tar.gz +sha256 5eddda159f54d16f868e032440ac2b024e55aac48931871b62627f1a16d00b12 HTTP-MultiPartParser-0.02.tar.gz + +# computed by scancpan +sha256 a339d6cf9253720ba69b311423556cc02c94d5a6f76cf5cdf11af2112e14a074 README diff --git a/package/perl-http-multipartparser/perl-http-multipartparser.mk b/package/perl-http-multipartparser/perl-http-multipartparser.mk new file mode 100644 index 00000000..7fb3b8aa --- /dev/null +++ b/package/perl-http-multipartparser/perl-http-multipartparser.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-http-multipartparser +# +################################################################################ + +PERL_HTTP_MULTIPARTPARSER_VERSION = 0.02 +PERL_HTTP_MULTIPARTPARSER_SOURCE = HTTP-MultiPartParser-$(PERL_HTTP_MULTIPARTPARSER_VERSION).tar.gz +PERL_HTTP_MULTIPARTPARSER_SITE = $(BR2_CPAN_MIRROR)/authors/id/C/CH/CHANSEN +PERL_HTTP_MULTIPARTPARSER_LICENSE = Artistic or GPL-1.0+ +PERL_HTTP_MULTIPARTPARSER_LICENSE_FILES = README +PERL_HTTP_MULTIPARTPARSER_DISTNAME = HTTP-MultiPartParser + +$(eval $(perl-package)) diff --git a/package/perl-http-negotiate/Config.in b/package/perl-http-negotiate/Config.in new file mode 100644 index 00000000..c519ede2 --- /dev/null +++ b/package/perl-http-negotiate/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_HTTP_NEGOTIATE + bool "perl-http-negotiate" + select BR2_PACKAGE_PERL_HTTP_MESSAGE # runtime + help + choose a variant to serve. + + https://metacpan.org/release/HTTP-Negotiate diff --git a/package/perl-http-negotiate/perl-http-negotiate.hash b/package/perl-http-negotiate/perl-http-negotiate.hash new file mode 100644 index 00000000..e561496f --- /dev/null +++ b/package/perl-http-negotiate/perl-http-negotiate.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 1236195250e264d7436e7bb02031671b HTTP-Negotiate-6.01.tar.gz +sha256 1c729c1ea63100e878405cda7d66f9adfd3ed4f1d6cacaca0ee9152df728e016 HTTP-Negotiate-6.01.tar.gz + +# computed by scancpan +sha256 7a2114bb46279309f8a67e359ab0a578a4e9a7c7add0d1725de46b44f6da6514 README diff --git a/package/perl-http-negotiate/perl-http-negotiate.mk b/package/perl-http-negotiate/perl-http-negotiate.mk new file mode 100644 index 00000000..868516fa --- /dev/null +++ b/package/perl-http-negotiate/perl-http-negotiate.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-http-negotiate +# +################################################################################ + +PERL_HTTP_NEGOTIATE_VERSION = 6.01 +PERL_HTTP_NEGOTIATE_SOURCE = HTTP-Negotiate-$(PERL_HTTP_NEGOTIATE_VERSION).tar.gz +PERL_HTTP_NEGOTIATE_SITE = $(BR2_CPAN_MIRROR)/authors/id/G/GA/GAAS +PERL_HTTP_NEGOTIATE_LICENSE = Artistic or GPL-1.0+ +PERL_HTTP_NEGOTIATE_LICENSE_FILES = README +PERL_HTTP_NEGOTIATE_DISTNAME = HTTP-Negotiate + +$(eval $(perl-package)) diff --git a/package/perl-i18n/Config.in b/package/perl-i18n/Config.in new file mode 100644 index 00000000..d5045639 --- /dev/null +++ b/package/perl-i18n/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_I18N + bool "perl-i18n" + select BR2_PACKAGE_PERL_LOCALE_MAKETEXT_LEXICON # runtime + help + Perl Internationalization Pragma. + + https://metacpan.org/release/i18n diff --git a/package/perl-i18n/perl-i18n.hash b/package/perl-i18n/perl-i18n.hash new file mode 100644 index 00000000..f6ef8931 --- /dev/null +++ b/package/perl-i18n/perl-i18n.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 4c3004474d6ff3554f82b52f92b3b1e1 i18n-0.13.tar.gz +sha256 2dbc3e4e25b41578cd83508fe011209e8f3c2b259fa4b5b6eafaac0d6ce4b457 i18n-0.13.tar.gz + +# computed by scancpan +sha256 4755e5f2096e8ef0494f1565bf5a028a8fb4eeb5c1250e7d30948d1ed13c5ad7 README diff --git a/package/perl-i18n/perl-i18n.mk b/package/perl-i18n/perl-i18n.mk new file mode 100644 index 00000000..04d75c21 --- /dev/null +++ b/package/perl-i18n/perl-i18n.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-i18n +# +################################################################################ + +PERL_I18N_VERSION = 0.13 +PERL_I18N_SOURCE = i18n-$(PERL_I18N_VERSION).tar.gz +PERL_I18N_SITE = $(BR2_CPAN_MIRROR)/authors/id/A/AU/AUDREYT +PERL_I18N_LICENSE = MIT +PERL_I18N_LICENSE_FILES = README +PERL_I18N_DISTNAME = i18n + +$(eval $(perl-package)) diff --git a/package/perl-io-html/Config.in b/package/perl-io-html/Config.in new file mode 100644 index 00000000..e12e39a5 --- /dev/null +++ b/package/perl-io-html/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_IO_HTML + bool "perl-io-html" + help + Open an HTML file with automatic charset detection. + + https://metacpan.org/release/IO-HTML diff --git a/package/perl-io-html/perl-io-html.hash b/package/perl-io-html/perl-io-html.hash new file mode 100644 index 00000000..4067d2fa --- /dev/null +++ b/package/perl-io-html/perl-io-html.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 04bbe363686fd19bfb4cc0ed775e3d03 IO-HTML-1.004.tar.gz +sha256 c87b2df59463bbf2c39596773dfb5c03bde0f7e1051af339f963f58c1cbd8bf5 IO-HTML-1.004.tar.gz + +# computed by scancpan +sha256 669fdd41b60ef6169a975b87a5fe35c50e81b9efc8f96b2459f4fbb238079d84 LICENSE diff --git a/package/perl-io-html/perl-io-html.mk b/package/perl-io-html/perl-io-html.mk new file mode 100644 index 00000000..934ac60c --- /dev/null +++ b/package/perl-io-html/perl-io-html.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-io-html +# +################################################################################ + +PERL_IO_HTML_VERSION = 1.004 +PERL_IO_HTML_SOURCE = IO-HTML-$(PERL_IO_HTML_VERSION).tar.gz +PERL_IO_HTML_SITE = $(BR2_CPAN_MIRROR)/authors/id/C/CJ/CJM +PERL_IO_HTML_LICENSE = Artistic or GPL-1.0+ +PERL_IO_HTML_LICENSE_FILES = LICENSE +PERL_IO_HTML_DISTNAME = IO-HTML + +$(eval $(perl-package)) diff --git a/package/perl-io-interface/Config.in b/package/perl-io-interface/Config.in new file mode 100644 index 00000000..e3137b24 --- /dev/null +++ b/package/perl-io-interface/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PERL_IO_INTERFACE + bool "perl-io-interface" + depends on !BR2_STATIC_LIBS + help + Access and modify network interface card configuration. + + https://metacpan.org/release/IO-Interface + +comment "perl-io-interface needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-io-interface/perl-io-interface.hash b/package/perl-io-interface/perl-io-interface.hash new file mode 100644 index 00000000..75e572f9 --- /dev/null +++ b/package/perl-io-interface/perl-io-interface.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 806f97aff5a7361b6f54cd494f4cc9fd IO-Interface-1.09.tar.gz +sha256 e63e81c52eb1e0e60ec2d983f5552d2493e117179925c96757f23c4bd9fa713a IO-Interface-1.09.tar.gz + +# computed by scancpan +sha256 b5a5bf59bd1be13f7f498e5aa2ea5c0c603c04a095dcf03a06aa5b83bbccf921 LICENSE diff --git a/package/perl-io-interface/perl-io-interface.mk b/package/perl-io-interface/perl-io-interface.mk new file mode 100644 index 00000000..84e4d1a9 --- /dev/null +++ b/package/perl-io-interface/perl-io-interface.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-io-interface +# +################################################################################ + +PERL_IO_INTERFACE_VERSION = 1.09 +PERL_IO_INTERFACE_SOURCE = IO-Interface-$(PERL_IO_INTERFACE_VERSION).tar.gz +PERL_IO_INTERFACE_SITE = $(BR2_CPAN_MIRROR)/authors/id/L/LD/LDS +PERL_IO_INTERFACE_DEPENDENCIES = host-perl-module-build +PERL_IO_INTERFACE_LICENSE = Artistic-2.0 +PERL_IO_INTERFACE_LICENSE_FILES = LICENSE +PERL_IO_INTERFACE_DISTNAME = IO-Interface + +$(eval $(perl-package)) diff --git a/package/perl-io-socket-multicast/Config.in b/package/perl-io-socket-multicast/Config.in new file mode 100644 index 00000000..b1328c5b --- /dev/null +++ b/package/perl-io-socket-multicast/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PERL_IO_SOCKET_MULTICAST + bool "perl-io-socket-multicast" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_PERL_IO_INTERFACE # runtime + help + Send and receive multicast messages. + + https://metacpan.org/release/IO-Socket-Multicast + +comment "perl-io-socket-multicast needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-io-socket-multicast/perl-io-socket-multicast.hash b/package/perl-io-socket-multicast/perl-io-socket-multicast.hash new file mode 100644 index 00000000..c12da12c --- /dev/null +++ b/package/perl-io-socket-multicast/perl-io-socket-multicast.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 c96e6cbb367b1d11ffe7bb9fbd833540 IO-Socket-Multicast-1.12.tar.gz +sha256 70e8af4aa21d19bab5edd9f43a6b3d6277748a65145d46ff0ea2ae4c59495c72 IO-Socket-Multicast-1.12.tar.gz + +# computed by scancpan +sha256 ea33bda0e2ec6734e29895a37cd1fc005d86f2abbe7e9943e0213ae64844a697 README diff --git a/package/perl-io-socket-multicast/perl-io-socket-multicast.mk b/package/perl-io-socket-multicast/perl-io-socket-multicast.mk new file mode 100644 index 00000000..a8c6896c --- /dev/null +++ b/package/perl-io-socket-multicast/perl-io-socket-multicast.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-io-socket-multicast +# +################################################################################ + +PERL_IO_SOCKET_MULTICAST_VERSION = 1.12 +PERL_IO_SOCKET_MULTICAST_SOURCE = IO-Socket-Multicast-$(PERL_IO_SOCKET_MULTICAST_VERSION).tar.gz +PERL_IO_SOCKET_MULTICAST_SITE = $(BR2_CPAN_MIRROR)/authors/id/B/BR/BRAMBLE +PERL_IO_SOCKET_MULTICAST_LICENSE = Artistic or GPL-1.0+ +PERL_IO_SOCKET_MULTICAST_LICENSE_FILES = README +PERL_IO_SOCKET_MULTICAST_DISTNAME = IO-Socket-Multicast + +$(eval $(perl-package)) diff --git a/package/perl-io-socket-ssl/Config.in b/package/perl-io-socket-ssl/Config.in new file mode 100644 index 00000000..a7b94a39 --- /dev/null +++ b/package/perl-io-socket-ssl/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PERL_IO_SOCKET_SSL + bool "perl-io-socket-ssl" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_PERL_NET_SSLEAY # runtime + help + Nearly transparent SSL encapsulation for IO::Socket::INET. + + https://github.com/noxxi/p5-io-socket-ssl + +comment "perl-io-socket-ssl needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-io-socket-ssl/perl-io-socket-ssl.hash b/package/perl-io-socket-ssl/perl-io-socket-ssl.hash new file mode 100644 index 00000000..2180b6be --- /dev/null +++ b/package/perl-io-socket-ssl/perl-io-socket-ssl.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 4230c829c8875889848093b2b46a7284 IO-Socket-SSL-2.068.tar.gz +sha256 4420fc0056f1827b4dd1245eacca0da56e2182b4ef6fc078f107dc43c3fb8ff9 IO-Socket-SSL-2.068.tar.gz + +# computed by scancpan +sha256 090aff5421fd55a9dceeaf6c612c36360402e8d29c1284aef88c87be565ce032 README diff --git a/package/perl-io-socket-ssl/perl-io-socket-ssl.mk b/package/perl-io-socket-ssl/perl-io-socket-ssl.mk new file mode 100644 index 00000000..b6c0ceb3 --- /dev/null +++ b/package/perl-io-socket-ssl/perl-io-socket-ssl.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-io-socket-ssl +# +################################################################################ + +PERL_IO_SOCKET_SSL_VERSION = 2.068 +PERL_IO_SOCKET_SSL_SOURCE = IO-Socket-SSL-$(PERL_IO_SOCKET_SSL_VERSION).tar.gz +PERL_IO_SOCKET_SSL_SITE = $(BR2_CPAN_MIRROR)/authors/id/S/SU/SULLR +PERL_IO_SOCKET_SSL_LICENSE = Artistic or GPL-1.0+ +PERL_IO_SOCKET_SSL_LICENSE_FILES = README +PERL_IO_SOCKET_SSL_DISTNAME = IO-Socket-SSL + +$(eval $(perl-package)) diff --git a/package/perl-json-maybexs/Config.in b/package/perl-json-maybexs/Config.in new file mode 100644 index 00000000..7959b2c3 --- /dev/null +++ b/package/perl-json-maybexs/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_JSON_MAYBEXS + bool "perl-json-maybexs" + help + Use Cpanel::JSON::XS with a fallback to JSON::XS and + JSON::PP. + + https://metacpan.org/release/JSON-MaybeXS diff --git a/package/perl-json-maybexs/perl-json-maybexs.hash b/package/perl-json-maybexs/perl-json-maybexs.hash new file mode 100644 index 00000000..a53d4ec6 --- /dev/null +++ b/package/perl-json-maybexs/perl-json-maybexs.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 e46181e34588428d317932744597a7ab JSON-MaybeXS-1.004003.tar.gz +sha256 5bee3b17ff9dcffd6e99ab8cf7f35747650bfce1dc622e3ad10b85a194462fbf JSON-MaybeXS-1.004003.tar.gz + +# computed by scancpan +sha256 0f2d6b537f7a735c981511875d832bc8ff767bf97d62848cf0bada964e40aadd LICENSE diff --git a/package/perl-json-maybexs/perl-json-maybexs.mk b/package/perl-json-maybexs/perl-json-maybexs.mk new file mode 100644 index 00000000..e6891f68 --- /dev/null +++ b/package/perl-json-maybexs/perl-json-maybexs.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-json-maybexs +# +################################################################################ + +PERL_JSON_MAYBEXS_VERSION = 1.004003 +PERL_JSON_MAYBEXS_SOURCE = JSON-MaybeXS-$(PERL_JSON_MAYBEXS_VERSION).tar.gz +PERL_JSON_MAYBEXS_SITE = $(BR2_CPAN_MIRROR)/authors/id/E/ET/ETHER +PERL_JSON_MAYBEXS_LICENSE = Artistic or GPL-1.0+ +PERL_JSON_MAYBEXS_LICENSE_FILES = LICENSE +PERL_JSON_MAYBEXS_DISTNAME = JSON-MaybeXS + +$(eval $(perl-package)) diff --git a/package/perl-json-tiny/Config.in b/package/perl-json-tiny/Config.in new file mode 100644 index 00000000..ce943cae --- /dev/null +++ b/package/perl-json-tiny/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_JSON_TINY + bool "perl-json-tiny" + help + Minimalistic JSON. No dependencies. + + https://metacpan.org/release/JSON-Tiny diff --git a/package/perl-json-tiny/perl-json-tiny.hash b/package/perl-json-tiny/perl-json-tiny.hash new file mode 100644 index 00000000..48fae2b0 --- /dev/null +++ b/package/perl-json-tiny/perl-json-tiny.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 aa006882222e17a94295b3a655aab91b JSON-Tiny-0.58.tar.gz +sha256 ad42e9137f5148df7fdb22aa52186b306032977bcd70d49f44a288070e4f0f23 JSON-Tiny-0.58.tar.gz + +# computed by scancpan +sha256 19e2e0f2079ea1ce1576eb4ecc0575b33fe45b2b8e71f4aa589d6bedd1da4e0a LICENSE diff --git a/package/perl-json-tiny/perl-json-tiny.mk b/package/perl-json-tiny/perl-json-tiny.mk new file mode 100644 index 00000000..886cff81 --- /dev/null +++ b/package/perl-json-tiny/perl-json-tiny.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-json-tiny +# +################################################################################ + +PERL_JSON_TINY_VERSION = 0.58 +PERL_JSON_TINY_SOURCE = JSON-Tiny-$(PERL_JSON_TINY_VERSION).tar.gz +PERL_JSON_TINY_SITE = $(BR2_CPAN_MIRROR)/authors/id/D/DA/DAVIDO +PERL_JSON_TINY_LICENSE = Artistic-2.0 +PERL_JSON_TINY_LICENSE_FILES = LICENSE +PERL_JSON_TINY_DISTNAME = JSON-Tiny + +$(eval $(perl-package)) diff --git a/package/perl-libwww-perl/Config.in b/package/perl-libwww-perl/Config.in new file mode 100644 index 00000000..6e191dd5 --- /dev/null +++ b/package/perl-libwww-perl/Config.in @@ -0,0 +1,23 @@ +config BR2_PACKAGE_PERL_LIBWWW_PERL + bool "perl-libwww-perl" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_PERL_ENCODE_LOCALE # runtime + select BR2_PACKAGE_PERL_FILE_LISTING # runtime + select BR2_PACKAGE_PERL_HTML_PARSER # runtime + select BR2_PACKAGE_PERL_HTTP_COOKIES # runtime + select BR2_PACKAGE_PERL_HTTP_DAEMON # runtime + select BR2_PACKAGE_PERL_HTTP_DATE # runtime + select BR2_PACKAGE_PERL_HTTP_MESSAGE # runtime + select BR2_PACKAGE_PERL_HTTP_NEGOTIATE # runtime + select BR2_PACKAGE_PERL_LWP_MEDIATYPES # runtime + select BR2_PACKAGE_PERL_NET_HTTP # runtime + select BR2_PACKAGE_PERL_TRY_TINY # runtime + select BR2_PACKAGE_PERL_URI # runtime + select BR2_PACKAGE_PERL_WWW_ROBOTRULES # runtime + help + The World-Wide Web library for Perl. + + https://github.com/libwww-perl/libwww-perl + +comment "perl-libwww-perl needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-libwww-perl/perl-libwww-perl.hash b/package/perl-libwww-perl/perl-libwww-perl.hash new file mode 100644 index 00000000..45346379 --- /dev/null +++ b/package/perl-libwww-perl/perl-libwww-perl.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 7b5959aff7b11509bd87fa1de753f127 libwww-perl-6.52.tar.gz +sha256 b63f67647b7cfb0bace19ada32e4feb2c2e8e0f4204546c62ce6247fa59d778d libwww-perl-6.52.tar.gz + +# computed by scancpan +sha256 e84ac5ab84ace59952d2640e0ca4522eb0aaa8c2aa696352d1252aa109ea20bc LICENSE diff --git a/package/perl-libwww-perl/perl-libwww-perl.mk b/package/perl-libwww-perl/perl-libwww-perl.mk new file mode 100644 index 00000000..d121dea9 --- /dev/null +++ b/package/perl-libwww-perl/perl-libwww-perl.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-libwww-perl +# +################################################################################ + +PERL_LIBWWW_PERL_VERSION = 6.52 +PERL_LIBWWW_PERL_SOURCE = libwww-perl-$(PERL_LIBWWW_PERL_VERSION).tar.gz +PERL_LIBWWW_PERL_SITE = $(BR2_CPAN_MIRROR)/authors/id/O/OA/OALDERS +PERL_LIBWWW_PERL_LICENSE = Artistic or GPL-1.0+ +PERL_LIBWWW_PERL_LICENSE_FILES = LICENSE +PERL_LIBWWW_PERL_DISTNAME = libwww-perl + +$(eval $(perl-package)) diff --git a/package/perl-locale-maketext-lexicon/Config.in b/package/perl-locale-maketext-lexicon/Config.in new file mode 100644 index 00000000..4aed7b63 --- /dev/null +++ b/package/perl-locale-maketext-lexicon/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_LOCALE_MAKETEXT_LEXICON + bool "perl-locale-maketext-lexicon" + help + Use other catalog formats in Maketext. + + http://search.cpan.org/dist/Locale-Maketext-Lexicon diff --git a/package/perl-locale-maketext-lexicon/perl-locale-maketext-lexicon.hash b/package/perl-locale-maketext-lexicon/perl-locale-maketext-lexicon.hash new file mode 100644 index 00000000..683e8c7d --- /dev/null +++ b/package/perl-locale-maketext-lexicon/perl-locale-maketext-lexicon.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 51acf0cb00cc01a2c8f560d74dd6c593 Locale-Maketext-Lexicon-1.00.tar.gz +sha256 b73f6b04a58d3f0e38ebf2115a4c1532f1a4eef6fac5c6a2a449e4e14c1ddc7c Locale-Maketext-Lexicon-1.00.tar.gz + +# computed by scancpan +sha256 af693c8c99bee68656f09328c97d50b24eb742ae4473f57cdafaa90691807fbe LICENSE diff --git a/package/perl-locale-maketext-lexicon/perl-locale-maketext-lexicon.mk b/package/perl-locale-maketext-lexicon/perl-locale-maketext-lexicon.mk new file mode 100644 index 00000000..64b37f92 --- /dev/null +++ b/package/perl-locale-maketext-lexicon/perl-locale-maketext-lexicon.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-locale-maketext-lexicon +# +################################################################################ + +PERL_LOCALE_MAKETEXT_LEXICON_VERSION = 1.00 +PERL_LOCALE_MAKETEXT_LEXICON_SOURCE = Locale-Maketext-Lexicon-$(PERL_LOCALE_MAKETEXT_LEXICON_VERSION).tar.gz +PERL_LOCALE_MAKETEXT_LEXICON_SITE = $(BR2_CPAN_MIRROR)/authors/id/D/DR/DRTECH +PERL_LOCALE_MAKETEXT_LEXICON_LICENSE = MIT +PERL_LOCALE_MAKETEXT_LEXICON_LICENSE_FILES = LICENSE +PERL_LOCALE_MAKETEXT_LEXICON_DISTNAME = Locale-Maketext-Lexicon + +$(eval $(perl-package)) diff --git a/package/perl-lwp-mediatypes/Config.in b/package/perl-lwp-mediatypes/Config.in new file mode 100644 index 00000000..c1f58a6f --- /dev/null +++ b/package/perl-lwp-mediatypes/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_LWP_MEDIATYPES + bool "perl-lwp-mediatypes" + help + guess media type for a file or a URL. + + https://github.com/libwww-perl/lwp-mediatypes diff --git a/package/perl-lwp-mediatypes/perl-lwp-mediatypes.hash b/package/perl-lwp-mediatypes/perl-lwp-mediatypes.hash new file mode 100644 index 00000000..e125c0d5 --- /dev/null +++ b/package/perl-lwp-mediatypes/perl-lwp-mediatypes.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 84b799a90c0d2ce52897a7cb4c0478d0 LWP-MediaTypes-6.04.tar.gz +sha256 8f1bca12dab16a1c2a7c03a49c5e58cce41a6fec9519f0aadfba8dad997919d9 LWP-MediaTypes-6.04.tar.gz + +# computed by scancpan +sha256 e84ac5ab84ace59952d2640e0ca4522eb0aaa8c2aa696352d1252aa109ea20bc LICENSE diff --git a/package/perl-lwp-mediatypes/perl-lwp-mediatypes.mk b/package/perl-lwp-mediatypes/perl-lwp-mediatypes.mk new file mode 100644 index 00000000..687a8442 --- /dev/null +++ b/package/perl-lwp-mediatypes/perl-lwp-mediatypes.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-lwp-mediatypes +# +################################################################################ + +PERL_LWP_MEDIATYPES_VERSION = 6.04 +PERL_LWP_MEDIATYPES_SOURCE = LWP-MediaTypes-$(PERL_LWP_MEDIATYPES_VERSION).tar.gz +PERL_LWP_MEDIATYPES_SITE = $(BR2_CPAN_MIRROR)/authors/id/O/OA/OALDERS +PERL_LWP_MEDIATYPES_LICENSE = Artistic or GPL-1.0+ +PERL_LWP_MEDIATYPES_LICENSE_FILES = LICENSE +PERL_LWP_MEDIATYPES_DISTNAME = LWP-MediaTypes + +$(eval $(perl-package)) diff --git a/package/perl-lwp-protocol-https/Config.in b/package/perl-lwp-protocol-https/Config.in new file mode 100644 index 00000000..9793b6f5 --- /dev/null +++ b/package/perl-lwp-protocol-https/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_PERL_LWP_PROTOCOL_HTTPS + bool "perl-lwp-protocol-https" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_PERL_IO_SOCKET_SSL # runtime + select BR2_PACKAGE_PERL_MOZILLA_CA # runtime + select BR2_PACKAGE_PERL_NET_HTTP # runtime + select BR2_PACKAGE_PERL_LIBWWW_PERL # runtime + help + Provide https support for LWP::UserAgent. + + https://github.com/libwww-perl/LWP-Protocol-https + +comment "perl-lwp-protocol-https needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-lwp-protocol-https/perl-lwp-protocol-https.hash b/package/perl-lwp-protocol-https/perl-lwp-protocol-https.hash new file mode 100644 index 00000000..a3c011fe --- /dev/null +++ b/package/perl-lwp-protocol-https/perl-lwp-protocol-https.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 cf64e4bc57a9266ac4343cdf0808c5c8 LWP-Protocol-https-6.10.tar.gz +sha256 cecfc31fe2d4fc854cac47fce13d3a502e8fdfe60c5bc1c09535743185f2a86c LWP-Protocol-https-6.10.tar.gz + +# computed by scancpan +sha256 294e73f9bd40ea600e9478cd57489a7da72558a83c6a66f37a82e4e0d5a706d9 LICENSE diff --git a/package/perl-lwp-protocol-https/perl-lwp-protocol-https.mk b/package/perl-lwp-protocol-https/perl-lwp-protocol-https.mk new file mode 100644 index 00000000..0663820b --- /dev/null +++ b/package/perl-lwp-protocol-https/perl-lwp-protocol-https.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-lwp-protocol-https +# +################################################################################ + +PERL_LWP_PROTOCOL_HTTPS_VERSION = 6.10 +PERL_LWP_PROTOCOL_HTTPS_SOURCE = LWP-Protocol-https-$(PERL_LWP_PROTOCOL_HTTPS_VERSION).tar.gz +PERL_LWP_PROTOCOL_HTTPS_SITE = $(BR2_CPAN_MIRROR)/authors/id/O/OA/OALDERS +PERL_LWP_PROTOCOL_HTTPS_LICENSE = Artistic or GPL-1.0+ +PERL_LWP_PROTOCOL_HTTPS_LICENSE_FILES = LICENSE +PERL_LWP_PROTOCOL_HTTPS_DISTNAME = LWP-Protocol-https + +$(eval $(perl-package)) diff --git a/package/perl-mail-dkim/Config.in b/package/perl-mail-dkim/Config.in new file mode 100644 index 00000000..057796b5 --- /dev/null +++ b/package/perl-mail-dkim/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_PERL_MAIL_DKIM + bool "perl-mail-dkim" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_PERL_CRYPT_OPENSSL_RSA # runtime + select BR2_PACKAGE_PERL_MAILTOOLS # runtime + select BR2_PACKAGE_PERL_NET_DNS # runtime + help + Signs/verifies Internet mail with DKIM/DomainKey signatures. + + https://metacpan.org/release/Mail-DKIM + +comment "perl-mail-dkim needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-mail-dkim/perl-mail-dkim.hash b/package/perl-mail-dkim/perl-mail-dkim.hash new file mode 100644 index 00000000..e94adfc6 --- /dev/null +++ b/package/perl-mail-dkim/perl-mail-dkim.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 9de35f8aa77a85dc17423cbcce2bf46d Mail-DKIM-1.20200824.tar.gz +sha256 871d329830acb4840423aa59036622fb2ee394efc1d09316dcc32ae94454e916 Mail-DKIM-1.20200824.tar.gz + +# computed by scancpan +sha256 ffaa40feb768566e52d93879fedd2c5483828b6de483874f30a0a4425351555f LICENSE diff --git a/package/perl-mail-dkim/perl-mail-dkim.mk b/package/perl-mail-dkim/perl-mail-dkim.mk new file mode 100644 index 00000000..e67bf5ee --- /dev/null +++ b/package/perl-mail-dkim/perl-mail-dkim.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-mail-dkim +# +################################################################################ + +PERL_MAIL_DKIM_VERSION = 1.20200824 +PERL_MAIL_DKIM_SOURCE = Mail-DKIM-$(PERL_MAIL_DKIM_VERSION).tar.gz +PERL_MAIL_DKIM_SITE = $(BR2_CPAN_MIRROR)/authors/id/M/MB/MBRADSHAW +PERL_MAIL_DKIM_LICENSE = Artistic or GPL-1.0+ +PERL_MAIL_DKIM_LICENSE_FILES = LICENSE +PERL_MAIL_DKIM_DISTNAME = Mail-DKIM + +$(eval $(perl-package)) diff --git a/package/perl-mailtools/Config.in b/package/perl-mailtools/Config.in new file mode 100644 index 00000000..6aa5d2d0 --- /dev/null +++ b/package/perl-mailtools/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_MAILTOOLS + bool "perl-mailtools" + select BR2_PACKAGE_PERL_TIMEDATE # runtime + help + Various ancient e-mail related modules. + + http://perl.overmeer.net/CPAN/ diff --git a/package/perl-mailtools/perl-mailtools.hash b/package/perl-mailtools/perl-mailtools.hash new file mode 100644 index 00000000..bf8b17a5 --- /dev/null +++ b/package/perl-mailtools/perl-mailtools.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 69ee516d40011e7e92b77c6f06c0dc01 MailTools-2.21.tar.gz +sha256 4ad9bd6826b6f03a2727332466b1b7d29890c8d99a32b4b3b0a8d926ee1a44cb MailTools-2.21.tar.gz + +# computed by scancpan +sha256 f7558badc4f4875df247bcccb50a8f369bfe4a2c19361f1df7b26ddf6aaaaf6b README diff --git a/package/perl-mailtools/perl-mailtools.mk b/package/perl-mailtools/perl-mailtools.mk new file mode 100644 index 00000000..900ee41f --- /dev/null +++ b/package/perl-mailtools/perl-mailtools.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-mailtools +# +################################################################################ + +PERL_MAILTOOLS_VERSION = 2.21 +PERL_MAILTOOLS_SOURCE = MailTools-$(PERL_MAILTOOLS_VERSION).tar.gz +PERL_MAILTOOLS_SITE = $(BR2_CPAN_MIRROR)/authors/id/M/MA/MARKOV +PERL_MAILTOOLS_LICENSE = Artistic or GPL-1.0+ +PERL_MAILTOOLS_LICENSE_FILES = README +PERL_MAILTOOLS_DISTNAME = MailTools + +$(eval $(perl-package)) diff --git a/package/perl-math-int64/Config.in b/package/perl-math-int64/Config.in new file mode 100644 index 00000000..8fbea44a --- /dev/null +++ b/package/perl-math-int64/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PERL_MATH_INT64 + bool "perl-math-int64" + depends on !BR2_STATIC_LIBS + help + Manipulate 64 bits integers in Perl. + + http://metacpan.org/release/Math-Int64 + +comment "perl-math-int64 needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-math-int64/perl-math-int64.hash b/package/perl-math-int64/perl-math-int64.hash new file mode 100644 index 00000000..4f2374b1 --- /dev/null +++ b/package/perl-math-int64/perl-math-int64.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 1ad0ce8b5e903dfe9f7ffbabd8a43014 Math-Int64-0.54.tar.gz +sha256 dcfc51e698437ea6b9cefe0276215c56cdb6a7f85e3e24a2b6b4189f1960d351 Math-Int64-0.54.tar.gz + +# computed by scancpan +sha256 59feedfdc4f99a746c54e06ac46c4627fb1e29be3bc71756184f92333600f72b COPYING diff --git a/package/perl-math-int64/perl-math-int64.mk b/package/perl-math-int64/perl-math-int64.mk new file mode 100644 index 00000000..749ff60c --- /dev/null +++ b/package/perl-math-int64/perl-math-int64.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-math-int64 +# +################################################################################ + +PERL_MATH_INT64_VERSION = 0.54 +PERL_MATH_INT64_SOURCE = Math-Int64-$(PERL_MATH_INT64_VERSION).tar.gz +PERL_MATH_INT64_SITE = $(BR2_CPAN_MIRROR)/authors/id/S/SA/SALVA +PERL_MATH_INT64_LICENSE = Artistic or GPL-1.0+ +PERL_MATH_INT64_LICENSE_FILES = COPYING +PERL_MATH_INT64_DISTNAME = Math-Int64 + +$(eval $(perl-package)) diff --git a/package/perl-math-prime-util/Config.in b/package/perl-math-prime-util/Config.in new file mode 100644 index 00000000..1c7b700a --- /dev/null +++ b/package/perl-math-prime-util/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PERL_MATH_PRIME_UTIL + bool "perl-math-prime-util" + depends on !BR2_STATIC_LIBS + help + Utilities related to prime numbers, including fast sieves and + factoring. + + https://github.com/danaj/Math-Prime-Util + +comment "perl-math-prime-util needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-math-prime-util/perl-math-prime-util.hash b/package/perl-math-prime-util/perl-math-prime-util.hash new file mode 100644 index 00000000..789f3a35 --- /dev/null +++ b/package/perl-math-prime-util/perl-math-prime-util.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 26496630990db586dfede6551de79cbe Math-Prime-Util-0.73.tar.gz +sha256 4afa6dd8cdb97499bd4eca6925861812c29d9f5a0f1ac27ad9d2d9c9b5602894 Math-Prime-Util-0.73.tar.gz + +# computed by scancpan +sha256 475b5f12062de0e197fb8cfa44eef3b032342d097752868e72c1239fe52a8942 LICENSE diff --git a/package/perl-math-prime-util/perl-math-prime-util.mk b/package/perl-math-prime-util/perl-math-prime-util.mk new file mode 100644 index 00000000..5781fe75 --- /dev/null +++ b/package/perl-math-prime-util/perl-math-prime-util.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-math-prime-util +# +################################################################################ + +PERL_MATH_PRIME_UTIL_VERSION = 0.73 +PERL_MATH_PRIME_UTIL_SOURCE = Math-Prime-Util-$(PERL_MATH_PRIME_UTIL_VERSION).tar.gz +PERL_MATH_PRIME_UTIL_SITE = $(BR2_CPAN_MIRROR)/authors/id/D/DA/DANAJ +PERL_MATH_PRIME_UTIL_LICENSE = Artistic or GPL-1.0+ +PERL_MATH_PRIME_UTIL_LICENSE_FILES = LICENSE +PERL_MATH_PRIME_UTIL_DISTNAME = Math-Prime-Util + +$(eval $(perl-package)) diff --git a/package/perl-mime-base64-urlsafe/Config.in b/package/perl-mime-base64-urlsafe/Config.in new file mode 100644 index 00000000..be4540a4 --- /dev/null +++ b/package/perl-mime-base64-urlsafe/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_MIME_BASE64_URLSAFE + bool "perl-mime-base64-urlsafe" + help + Perl version of Python's URL-safe base64 codec. + + https://metacpan.org/release/MIME-Base64-URLSafe diff --git a/package/perl-mime-base64-urlsafe/perl-mime-base64-urlsafe.hash b/package/perl-mime-base64-urlsafe/perl-mime-base64-urlsafe.hash new file mode 100644 index 00000000..c6d01afe --- /dev/null +++ b/package/perl-mime-base64-urlsafe/perl-mime-base64-urlsafe.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 eccf42cc7e9576dd23b9f39ad59c9b62 MIME-Base64-URLSafe-0.01.tar.gz +sha256 cb9966c50538bb676ab67bc40a7c841019b23ba2243d0ffcc2ccf084e5c33798 MIME-Base64-URLSafe-0.01.tar.gz + +# computed by scancpan +sha256 2fffac76f75709b6d94111a37f6cd8cab21e8f2b2de73b0b4fa53a5bed4efc15 README diff --git a/package/perl-mime-base64-urlsafe/perl-mime-base64-urlsafe.mk b/package/perl-mime-base64-urlsafe/perl-mime-base64-urlsafe.mk new file mode 100644 index 00000000..1a6a36ee --- /dev/null +++ b/package/perl-mime-base64-urlsafe/perl-mime-base64-urlsafe.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-mime-base64-urlsafe +# +################################################################################ + +PERL_MIME_BASE64_URLSAFE_VERSION = 0.01 +PERL_MIME_BASE64_URLSAFE_SOURCE = MIME-Base64-URLSafe-$(PERL_MIME_BASE64_URLSAFE_VERSION).tar.gz +PERL_MIME_BASE64_URLSAFE_SITE = $(BR2_CPAN_MIRROR)/authors/id/K/KA/KAZUHO +PERL_MIME_BASE64_URLSAFE_LICENSE = Artistic or GPL-1.0+ +PERL_MIME_BASE64_URLSAFE_LICENSE_FILES = README +PERL_MIME_BASE64_URLSAFE_DISTNAME = MIME-Base64-URLSafe + +$(eval $(perl-package)) diff --git a/package/perl-mime-tools/Config.in b/package/perl-mime-tools/Config.in new file mode 100644 index 00000000..f8495c32 --- /dev/null +++ b/package/perl-mime-tools/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_MIME_TOOLS + bool "perl-mime-tools" + select BR2_PACKAGE_PERL_MAILTOOLS # runtime + help + Tools to manipulate MIME messages. + + https://metacpan.org/release/MIME-tools diff --git a/package/perl-mime-tools/perl-mime-tools.hash b/package/perl-mime-tools/perl-mime-tools.hash new file mode 100644 index 00000000..41e13eb0 --- /dev/null +++ b/package/perl-mime-tools/perl-mime-tools.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 a2f0e07da2ff4b0478908544cc4b40fa MIME-tools-5.509.tar.gz +sha256 64579f0c923d81d9a2194586e47c3475519e2646e4b5c102a8920759facf6973 MIME-tools-5.509.tar.gz + +# computed by scancpan +sha256 151cd94e37eb05239c5a678c7d1c4d9d5241a7c9c138760b85152bc1947e2b93 COPYING diff --git a/package/perl-mime-tools/perl-mime-tools.mk b/package/perl-mime-tools/perl-mime-tools.mk new file mode 100644 index 00000000..10279d73 --- /dev/null +++ b/package/perl-mime-tools/perl-mime-tools.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-mime-tools +# +################################################################################ + +PERL_MIME_TOOLS_VERSION = 5.509 +PERL_MIME_TOOLS_SOURCE = MIME-tools-$(PERL_MIME_TOOLS_VERSION).tar.gz +PERL_MIME_TOOLS_SITE = $(BR2_CPAN_MIRROR)/authors/id/D/DS/DSKOLL +PERL_MIME_TOOLS_LICENSE = Artistic or GPL-1.0+ +PERL_MIME_TOOLS_LICENSE_FILES = COPYING +PERL_MIME_TOOLS_DISTNAME = MIME-tools + +$(eval $(perl-package)) diff --git a/package/perl-module-build-tiny/perl-module-build-tiny.hash b/package/perl-module-build-tiny/perl-module-build-tiny.hash new file mode 100644 index 00000000..357c238d --- /dev/null +++ b/package/perl-module-build-tiny/perl-module-build-tiny.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 2332c90c17454107fea3f2614e11a3a9 Module-Build-Tiny-0.039.tar.gz +sha256 7d580ff6ace0cbe555bf36b86dc8ea232581530cbeaaea09bccb57b55797f11c Module-Build-Tiny-0.039.tar.gz + +# computed by scancpan +sha256 09fd2bc0428920c455f10c5a6c52e2bb4615114e88966c75ce27a07af028c36b LICENSE diff --git a/package/perl-module-build-tiny/perl-module-build-tiny.mk b/package/perl-module-build-tiny/perl-module-build-tiny.mk new file mode 100644 index 00000000..cdf6ac3e --- /dev/null +++ b/package/perl-module-build-tiny/perl-module-build-tiny.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# perl-module-build-tiny +# +################################################################################ + +PERL_MODULE_BUILD_TINY_VERSION = 0.039 +PERL_MODULE_BUILD_TINY_SOURCE = Module-Build-Tiny-$(PERL_MODULE_BUILD_TINY_VERSION).tar.gz +PERL_MODULE_BUILD_TINY_SITE = $(BR2_CPAN_MIRROR)/authors/id/L/LE/LEONT +HOST_PERL_MODULE_BUILD_TINY_DEPENDENCIES = \ + host-perl-extutils-config \ + host-perl-extutils-helpers \ + host-perl-extutils-installpaths +PERL_MODULE_BUILD_TINY_LICENSE = Artistic or GPL-1.0+ +PERL_MODULE_BUILD_TINY_LICENSE_FILES = LICENSE +PERL_MODULE_BUILD_TINY_DISTNAME = Module-Build-Tiny + +$(eval $(host-perl-package)) diff --git a/package/perl-module-build/perl-module-build.hash b/package/perl-module-build/perl-module-build.hash new file mode 100644 index 00000000..aad0b78e --- /dev/null +++ b/package/perl-module-build/perl-module-build.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 066b193e461d7dfe1eca17a139353001 Module-Build-0.4231.tar.gz +sha256 7e0f4c692c1740c1ac84ea14d7ea3d8bc798b2fb26c09877229e04f430b2b717 Module-Build-0.4231.tar.gz + +# computed by scancpan +sha256 f35ac2cc6b808a38c42c2d230b875217b0a24bb51e5a497ebb630cbb3d806c3e LICENSE diff --git a/package/perl-module-build/perl-module-build.mk b/package/perl-module-build/perl-module-build.mk new file mode 100644 index 00000000..f5cab368 --- /dev/null +++ b/package/perl-module-build/perl-module-build.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-module-build +# +################################################################################ + +PERL_MODULE_BUILD_VERSION = 0.4231 +PERL_MODULE_BUILD_SOURCE = Module-Build-$(PERL_MODULE_BUILD_VERSION).tar.gz +PERL_MODULE_BUILD_SITE = $(BR2_CPAN_MIRROR)/authors/id/L/LE/LEONT +PERL_MODULE_BUILD_LICENSE = Artistic or GPL-1.0+ +PERL_MODULE_BUILD_LICENSE_FILES = LICENSE +PERL_MODULE_BUILD_DISTNAME = Module-Build + +$(eval $(host-perl-package)) diff --git a/package/perl-module-implementation/Config.in b/package/perl-module-implementation/Config.in new file mode 100644 index 00000000..04561dea --- /dev/null +++ b/package/perl-module-implementation/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PERL_MODULE_IMPLEMENTATION + bool "perl-module-implementation" + select BR2_PACKAGE_PERL_MODULE_RUNTIME # runtime + select BR2_PACKAGE_PERL_TRY_TINY # runtime + help + Loads one of several alternate underlying implementations for + a module. + + http://metacpan.org/release/Module-Implementation diff --git a/package/perl-module-implementation/perl-module-implementation.hash b/package/perl-module-implementation/perl-module-implementation.hash new file mode 100644 index 00000000..caf365c0 --- /dev/null +++ b/package/perl-module-implementation/perl-module-implementation.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 52e3fe0ca6b1eff0488d59b7aacc0667 Module-Implementation-0.09.tar.gz +sha256 c15f1a12f0c2130c9efff3c2e1afe5887b08ccd033bd132186d1e7d5087fd66d Module-Implementation-0.09.tar.gz + +# computed by scancpan +sha256 dd34e4dbcadfaa3db992201873e1cbb4b4f4c18e9bf000821d5c768e66d7ff0b LICENSE diff --git a/package/perl-module-implementation/perl-module-implementation.mk b/package/perl-module-implementation/perl-module-implementation.mk new file mode 100644 index 00000000..7cf7cbb2 --- /dev/null +++ b/package/perl-module-implementation/perl-module-implementation.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-module-implementation +# +################################################################################ + +PERL_MODULE_IMPLEMENTATION_VERSION = 0.09 +PERL_MODULE_IMPLEMENTATION_SOURCE = Module-Implementation-$(PERL_MODULE_IMPLEMENTATION_VERSION).tar.gz +PERL_MODULE_IMPLEMENTATION_SITE = $(BR2_CPAN_MIRROR)/authors/id/D/DR/DROLSKY +PERL_MODULE_IMPLEMENTATION_LICENSE = Artistic-2.0 +PERL_MODULE_IMPLEMENTATION_LICENSE_FILES = LICENSE +PERL_MODULE_IMPLEMENTATION_DISTNAME = Module-Implementation + +$(eval $(perl-package)) diff --git a/package/perl-module-runtime/Config.in b/package/perl-module-runtime/Config.in new file mode 100644 index 00000000..1db03e5b --- /dev/null +++ b/package/perl-module-runtime/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_MODULE_RUNTIME + bool "perl-module-runtime" + help + runtime module handling. + + https://metacpan.org/release/Module-Runtime diff --git a/package/perl-module-runtime/perl-module-runtime.hash b/package/perl-module-runtime/perl-module-runtime.hash new file mode 100644 index 00000000..c52cb755 --- /dev/null +++ b/package/perl-module-runtime/perl-module-runtime.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 d3d47222fa2e3dfcb4526f6cc8437b20 Module-Runtime-0.016.tar.gz +sha256 68302ec646833547d410be28e09676db75006f4aa58a11f3bdb44ffe99f0f024 Module-Runtime-0.016.tar.gz + +# computed by scancpan +sha256 ad1761020436687e8493208336ef53e84589fdba212da59b05b8111cca75ddc1 README diff --git a/package/perl-module-runtime/perl-module-runtime.mk b/package/perl-module-runtime/perl-module-runtime.mk new file mode 100644 index 00000000..dcf045cf --- /dev/null +++ b/package/perl-module-runtime/perl-module-runtime.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-module-runtime +# +################################################################################ + +PERL_MODULE_RUNTIME_VERSION = 0.016 +PERL_MODULE_RUNTIME_SOURCE = Module-Runtime-$(PERL_MODULE_RUNTIME_VERSION).tar.gz +PERL_MODULE_RUNTIME_SITE = $(BR2_CPAN_MIRROR)/authors/id/Z/ZE/ZEFRAM +PERL_MODULE_RUNTIME_DEPENDENCIES = host-perl-module-build +PERL_MODULE_RUNTIME_LICENSE = Artistic or GPL-1.0+ +PERL_MODULE_RUNTIME_LICENSE_FILES = README +PERL_MODULE_RUNTIME_DISTNAME = Module-Runtime + +$(eval $(perl-package)) diff --git a/package/perl-mojolicious-plugin-authentication/Config.in b/package/perl-mojolicious-plugin-authentication/Config.in new file mode 100644 index 00000000..4fa01806 --- /dev/null +++ b/package/perl-mojolicious-plugin-authentication/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_MOJOLICIOUS_PLUGIN_AUTHENTICATION + bool "perl-mojolicious-plugin-authentication" + select BR2_PACKAGE_PERL_MOJOLICIOUS # runtime + help + A plugin to make authentication a bit easier. + + https://metacpan.org/release/Mojolicious-Plugin-Authentication diff --git a/package/perl-mojolicious-plugin-authentication/perl-mojolicious-plugin-authentication.hash b/package/perl-mojolicious-plugin-authentication/perl-mojolicious-plugin-authentication.hash new file mode 100644 index 00000000..f225ff48 --- /dev/null +++ b/package/perl-mojolicious-plugin-authentication/perl-mojolicious-plugin-authentication.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 b318be1e1e50e7595baee639b2964565 Mojolicious-Plugin-Authentication-1.33.tar.gz +sha256 1c32dffc88a683ba3b2719f34bc52fb9c5c5fb2f1276bbd30136bfad0ac262bc Mojolicious-Plugin-Authentication-1.33.tar.gz + +# computed by scancpan +sha256 59727ac57166e9891175d8247a8ea47d4aeb24a0dc1e24011b773d139481b135 LICENSE diff --git a/package/perl-mojolicious-plugin-authentication/perl-mojolicious-plugin-authentication.mk b/package/perl-mojolicious-plugin-authentication/perl-mojolicious-plugin-authentication.mk new file mode 100644 index 00000000..cce12314 --- /dev/null +++ b/package/perl-mojolicious-plugin-authentication/perl-mojolicious-plugin-authentication.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-mojolicious-plugin-authentication +# +################################################################################ + +PERL_MOJOLICIOUS_PLUGIN_AUTHENTICATION_VERSION = 1.33 +PERL_MOJOLICIOUS_PLUGIN_AUTHENTICATION_SOURCE = Mojolicious-Plugin-Authentication-$(PERL_MOJOLICIOUS_PLUGIN_AUTHENTICATION_VERSION).tar.gz +PERL_MOJOLICIOUS_PLUGIN_AUTHENTICATION_SITE = $(BR2_CPAN_MIRROR)/authors/id/J/JJ/JJATRIA +PERL_MOJOLICIOUS_PLUGIN_AUTHENTICATION_LICENSE = Artistic or GPL-1.0+ +PERL_MOJOLICIOUS_PLUGIN_AUTHENTICATION_LICENSE_FILES = LICENSE +PERL_MOJOLICIOUS_PLUGIN_AUTHENTICATION_DISTNAME = Mojolicious-Plugin-Authentication + +$(eval $(perl-package)) diff --git a/package/perl-mojolicious-plugin-authorization/Config.in b/package/perl-mojolicious-plugin-authorization/Config.in new file mode 100644 index 00000000..87976cbb --- /dev/null +++ b/package/perl-mojolicious-plugin-authorization/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_MOJOLICIOUS_PLUGIN_AUTHORIZATION + bool "perl-mojolicious-plugin-authorization" + select BR2_PACKAGE_PERL_MOJOLICIOUS # runtime + help + A plugin to make authorization a bit easier. + + https://metacpan.org/module/Mojolicious::Plugin::Authorization diff --git a/package/perl-mojolicious-plugin-authorization/perl-mojolicious-plugin-authorization.hash b/package/perl-mojolicious-plugin-authorization/perl-mojolicious-plugin-authorization.hash new file mode 100644 index 00000000..c55eefe2 --- /dev/null +++ b/package/perl-mojolicious-plugin-authorization/perl-mojolicious-plugin-authorization.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 9c009599cf397e3eacf5d7cd0dec45b8 Mojolicious-Plugin-Authorization-1.05.tar.gz +sha256 87f84092d5698595ad0d01e745eca1d6affd1f3d662786f39f3583c54ffed0e3 Mojolicious-Plugin-Authorization-1.05.tar.gz + +# computed by scancpan +sha256 fd9632faca5a3d6af4cb9cf776514de87d2b34bff3a6cf06c23eea0f9cc3ab06 LICENSE diff --git a/package/perl-mojolicious-plugin-authorization/perl-mojolicious-plugin-authorization.mk b/package/perl-mojolicious-plugin-authorization/perl-mojolicious-plugin-authorization.mk new file mode 100644 index 00000000..3fcee08a --- /dev/null +++ b/package/perl-mojolicious-plugin-authorization/perl-mojolicious-plugin-authorization.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-mojolicious-plugin-authorization +# +################################################################################ + +PERL_MOJOLICIOUS_PLUGIN_AUTHORIZATION_VERSION = 1.05 +PERL_MOJOLICIOUS_PLUGIN_AUTHORIZATION_SOURCE = Mojolicious-Plugin-Authorization-$(PERL_MOJOLICIOUS_PLUGIN_AUTHORIZATION_VERSION).tar.gz +PERL_MOJOLICIOUS_PLUGIN_AUTHORIZATION_SITE = $(BR2_CPAN_MIRROR)/authors/id/B/BY/BYTEROCK +PERL_MOJOLICIOUS_PLUGIN_AUTHORIZATION_DEPENDENCIES = host-perl-module-build +PERL_MOJOLICIOUS_PLUGIN_AUTHORIZATION_LICENSE = Artistic or GPL-1.0+ +PERL_MOJOLICIOUS_PLUGIN_AUTHORIZATION_LICENSE_FILES = LICENSE +PERL_MOJOLICIOUS_PLUGIN_AUTHORIZATION_DISTNAME = Mojolicious-Plugin-Authorization + +$(eval $(perl-package)) diff --git a/package/perl-mojolicious-plugin-cspheader/Config.in b/package/perl-mojolicious-plugin-cspheader/Config.in new file mode 100644 index 00000000..841b3094 --- /dev/null +++ b/package/perl-mojolicious-plugin-cspheader/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PERL_MOJOLICIOUS_PLUGIN_CSPHEADER + bool "perl-mojolicious-plugin-cspheader" + select BR2_PACKAGE_PERL_MOJOLICIOUS # runtime + help + Mojolicious Plugin to add Content-Security-Policy header to + every HTTP response. + + https://metacpan.org/release/Mojolicious-Plugin-CSPHeader diff --git a/package/perl-mojolicious-plugin-cspheader/perl-mojolicious-plugin-cspheader.hash b/package/perl-mojolicious-plugin-cspheader/perl-mojolicious-plugin-cspheader.hash new file mode 100644 index 00000000..d0f9dc3a --- /dev/null +++ b/package/perl-mojolicious-plugin-cspheader/perl-mojolicious-plugin-cspheader.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 3d1b01c393e7ed576e4b503d26a88a3e Mojolicious-Plugin-CSPHeader-0.06.tar.gz +sha256 0523a170af6620dab5b746725f171a138b6cff3d2d84e1a30af891741550f4a7 Mojolicious-Plugin-CSPHeader-0.06.tar.gz + +# computed by scancpan +sha256 4bb36edd2bcafef11ca615f69607953a31ee05ae172b69990aee317e95653456 LICENSE diff --git a/package/perl-mojolicious-plugin-cspheader/perl-mojolicious-plugin-cspheader.mk b/package/perl-mojolicious-plugin-cspheader/perl-mojolicious-plugin-cspheader.mk new file mode 100644 index 00000000..438d6d51 --- /dev/null +++ b/package/perl-mojolicious-plugin-cspheader/perl-mojolicious-plugin-cspheader.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-mojolicious-plugin-cspheader +# +################################################################################ + +PERL_MOJOLICIOUS_PLUGIN_CSPHEADER_VERSION = 0.06 +PERL_MOJOLICIOUS_PLUGIN_CSPHEADER_SOURCE = Mojolicious-Plugin-CSPHeader-$(PERL_MOJOLICIOUS_PLUGIN_CSPHEADER_VERSION).tar.gz +PERL_MOJOLICIOUS_PLUGIN_CSPHEADER_SITE = $(BR2_CPAN_MIRROR)/authors/id/L/LD/LDIDRY +PERL_MOJOLICIOUS_PLUGIN_CSPHEADER_LICENSE = Artistic or GPL-1.0+ +PERL_MOJOLICIOUS_PLUGIN_CSPHEADER_LICENSE_FILES = LICENSE +PERL_MOJOLICIOUS_PLUGIN_CSPHEADER_DISTNAME = Mojolicious-Plugin-CSPHeader + +$(eval $(perl-package)) diff --git a/package/perl-mojolicious-plugin-i18n/Config.in b/package/perl-mojolicious-plugin-i18n/Config.in new file mode 100644 index 00000000..cbe11451 --- /dev/null +++ b/package/perl-mojolicious-plugin-i18n/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_MOJOLICIOUS_PLUGIN_I18N + bool "perl-mojolicious-plugin-i18n" + select BR2_PACKAGE_PERL_MOJOLICIOUS # runtime + help + Internationalization Plugin for Mojolicious. + + https://metacpan.org/release/Mojolicious-Plugin-I18N diff --git a/package/perl-mojolicious-plugin-i18n/perl-mojolicious-plugin-i18n.hash b/package/perl-mojolicious-plugin-i18n/perl-mojolicious-plugin-i18n.hash new file mode 100644 index 00000000..ed4bc207 --- /dev/null +++ b/package/perl-mojolicious-plugin-i18n/perl-mojolicious-plugin-i18n.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 4002f7a7da4c90973ad6eedfb0fcfa16 Mojolicious-Plugin-I18N-1.6.tar.gz +sha256 32fb5ef8037d954b7ecebef5c1b2b24b420abd829702312f4ad42794f52b514d Mojolicious-Plugin-I18N-1.6.tar.gz + +# manually computed +sha256 82b05028033057b388b0040a3b5590a1c51168fe3b9899bffdb5ef7962c4eb47 README.pod diff --git a/package/perl-mojolicious-plugin-i18n/perl-mojolicious-plugin-i18n.mk b/package/perl-mojolicious-plugin-i18n/perl-mojolicious-plugin-i18n.mk new file mode 100644 index 00000000..11d41ac5 --- /dev/null +++ b/package/perl-mojolicious-plugin-i18n/perl-mojolicious-plugin-i18n.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-mojolicious-plugin-i18n +# +################################################################################ + +PERL_MOJOLICIOUS_PLUGIN_I18N_VERSION = 1.6 +PERL_MOJOLICIOUS_PLUGIN_I18N_SOURCE = Mojolicious-Plugin-I18N-$(PERL_MOJOLICIOUS_PLUGIN_I18N_VERSION).tar.gz +PERL_MOJOLICIOUS_PLUGIN_I18N_SITE = $(BR2_CPAN_MIRROR)/authors/id/S/SH/SHARIFULN +PERL_MOJOLICIOUS_PLUGIN_I18N_DEPENDENCIES = host-perl-module-build +PERL_MOJOLICIOUS_PLUGIN_I18N_LICENSE = Artistic-2.0 +PERL_MOJOLICIOUS_PLUGIN_I18N_LICENSE_FILES = README.pod +PERL_MOJOLICIOUS_PLUGIN_I18N_DISTNAME = Mojolicious-Plugin-I18N + +$(eval $(perl-package)) diff --git a/package/perl-mojolicious-plugin-securityheader/Config.in b/package/perl-mojolicious-plugin-securityheader/Config.in new file mode 100644 index 00000000..35e8e122 --- /dev/null +++ b/package/perl-mojolicious-plugin-securityheader/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_MOJOLICIOUS_PLUGIN_SECURITYHEADER + bool "perl-mojolicious-plugin-securityheader" + select BR2_PACKAGE_PERL_MOJOLICIOUS # runtime + help + Mojolicious Plugin. + + http://github.com/reneeb/Mojolicious-Plugin-SecurityHeader diff --git a/package/perl-mojolicious-plugin-securityheader/perl-mojolicious-plugin-securityheader.hash b/package/perl-mojolicious-plugin-securityheader/perl-mojolicious-plugin-securityheader.hash new file mode 100644 index 00000000..b8a20bdd --- /dev/null +++ b/package/perl-mojolicious-plugin-securityheader/perl-mojolicious-plugin-securityheader.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 38cf59258547ac866577db2d43632f30 Mojolicious-Plugin-SecurityHeader-0.07.tar.gz +sha256 940474eaf7a415e5117b004387862473612e079a413590db1eb9c85d17a6648f Mojolicious-Plugin-SecurityHeader-0.07.tar.gz + +# computed by scancpan +sha256 0c38e4629cc9eee869217d62ad765e581e54958596672046a62dfa4cfd87bb09 LICENSE diff --git a/package/perl-mojolicious-plugin-securityheader/perl-mojolicious-plugin-securityheader.mk b/package/perl-mojolicious-plugin-securityheader/perl-mojolicious-plugin-securityheader.mk new file mode 100644 index 00000000..1f287f6f --- /dev/null +++ b/package/perl-mojolicious-plugin-securityheader/perl-mojolicious-plugin-securityheader.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-mojolicious-plugin-securityheader +# +################################################################################ + +PERL_MOJOLICIOUS_PLUGIN_SECURITYHEADER_VERSION = 0.07 +PERL_MOJOLICIOUS_PLUGIN_SECURITYHEADER_SOURCE = Mojolicious-Plugin-SecurityHeader-$(PERL_MOJOLICIOUS_PLUGIN_SECURITYHEADER_VERSION).tar.gz +PERL_MOJOLICIOUS_PLUGIN_SECURITYHEADER_SITE = $(BR2_CPAN_MIRROR)/authors/id/R/RE/RENEEB +PERL_MOJOLICIOUS_PLUGIN_SECURITYHEADER_LICENSE = Artistic-2.0 +PERL_MOJOLICIOUS_PLUGIN_SECURITYHEADER_LICENSE_FILES = LICENSE +PERL_MOJOLICIOUS_PLUGIN_SECURITYHEADER_DISTNAME = Mojolicious-Plugin-SecurityHeader + +$(eval $(perl-package)) diff --git a/package/perl-mojolicious/Config.in b/package/perl-mojolicious/Config.in new file mode 100644 index 00000000..8bcce5f0 --- /dev/null +++ b/package/perl-mojolicious/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_MOJOLICIOUS + bool "perl-mojolicious" + help + Real-time web framework. + + https://mojolicious.org diff --git a/package/perl-mojolicious/perl-mojolicious.hash b/package/perl-mojolicious/perl-mojolicious.hash new file mode 100644 index 00000000..a94c57ab --- /dev/null +++ b/package/perl-mojolicious/perl-mojolicious.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 f93e56c64cad7002bd7bc1f8091ed05b Mojolicious-8.71.tar.gz +sha256 155bfdcd1d49f4f10be71ec8eeb93de1873b9ab810f3d6d521d3ec10f0ef6e0d Mojolicious-8.71.tar.gz + +# computed by scancpan +sha256 19e2e0f2079ea1ce1576eb4ecc0575b33fe45b2b8e71f4aa589d6bedd1da4e0a LICENSE diff --git a/package/perl-mojolicious/perl-mojolicious.mk b/package/perl-mojolicious/perl-mojolicious.mk new file mode 100644 index 00000000..eed097d9 --- /dev/null +++ b/package/perl-mojolicious/perl-mojolicious.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-mojolicious +# +################################################################################ + +PERL_MOJOLICIOUS_VERSION = 8.71 +PERL_MOJOLICIOUS_SOURCE = Mojolicious-$(PERL_MOJOLICIOUS_VERSION).tar.gz +PERL_MOJOLICIOUS_SITE = $(BR2_CPAN_MIRROR)/authors/id/S/SR/SRI +PERL_MOJOLICIOUS_LICENSE = Artistic-2.0 +PERL_MOJOLICIOUS_LICENSE_FILES = LICENSE +PERL_MOJOLICIOUS_DISTNAME = Mojolicious + +$(eval $(perl-package)) diff --git a/package/perl-moo/Config.in b/package/perl-moo/Config.in new file mode 100644 index 00000000..9b2b4a8c --- /dev/null +++ b/package/perl-moo/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PERL_MOO + bool "perl-moo" + select BR2_PACKAGE_PERL_CLASS_METHOD_MODIFIERS # runtime + select BR2_PACKAGE_PERL_ROLE_TINY # runtime + select BR2_PACKAGE_PERL_SUB_QUOTE # runtime + help + Minimalist Object Orientation (with Moose compatibility). + + https://metacpan.org/release/Moo diff --git a/package/perl-moo/perl-moo.hash b/package/perl-moo/perl-moo.hash new file mode 100644 index 00000000..af0dd2e9 --- /dev/null +++ b/package/perl-moo/perl-moo.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 51f3732e043a1e856ab6cdc260d2814c Moo-2.004004.tar.gz +sha256 714b77b115788708c6d8ab6f18eea173f8109d397aecd34e32cc71a0ffcf2246 Moo-2.004004.tar.gz + +# computed by scancpan +sha256 0f2d6b537f7a735c981511875d832bc8ff767bf97d62848cf0bada964e40aadd LICENSE diff --git a/package/perl-moo/perl-moo.mk b/package/perl-moo/perl-moo.mk new file mode 100644 index 00000000..77c6c1e3 --- /dev/null +++ b/package/perl-moo/perl-moo.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-moo +# +################################################################################ + +PERL_MOO_VERSION = 2.004004 +PERL_MOO_SOURCE = Moo-$(PERL_MOO_VERSION).tar.gz +PERL_MOO_SITE = $(BR2_CPAN_MIRROR)/authors/id/H/HA/HAARG +PERL_MOO_LICENSE = Artistic or GPL-1.0+ +PERL_MOO_LICENSE_FILES = LICENSE +PERL_MOO_DISTNAME = Moo + +$(eval $(perl-package)) diff --git a/package/perl-mozilla-ca/Config.in b/package/perl-mozilla-ca/Config.in new file mode 100644 index 00000000..733d07e1 --- /dev/null +++ b/package/perl-mozilla-ca/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_MOZILLA_CA + bool "perl-mozilla-ca" + help + Mozilla's CA cert bundle in PEM format. + + https://metacpan.org/release/Mozilla-CA diff --git a/package/perl-mozilla-ca/perl-mozilla-ca.hash b/package/perl-mozilla-ca/perl-mozilla-ca.hash new file mode 100644 index 00000000..c577d488 --- /dev/null +++ b/package/perl-mozilla-ca/perl-mozilla-ca.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 8ac3fe1a83c45da3f468f78ab8133ea6 Mozilla-CA-20200520.tar.gz +sha256 b3ca0002310bf24a16c0d5920bdea97a2f46e77e7be3e7377e850d033387c726 Mozilla-CA-20200520.tar.gz + +# computed by scancpan +sha256 95cd63dae5c2bf6e7cf33435981614a36c85ef01fc7a02464e05e58a5355398e README diff --git a/package/perl-mozilla-ca/perl-mozilla-ca.mk b/package/perl-mozilla-ca/perl-mozilla-ca.mk new file mode 100644 index 00000000..3bcb947f --- /dev/null +++ b/package/perl-mozilla-ca/perl-mozilla-ca.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-mozilla-ca +# +################################################################################ + +PERL_MOZILLA_CA_VERSION = 20200520 +PERL_MOZILLA_CA_SOURCE = Mozilla-CA-$(PERL_MOZILLA_CA_VERSION).tar.gz +PERL_MOZILLA_CA_SITE = $(BR2_CPAN_MIRROR)/authors/id/A/AB/ABH +PERL_MOZILLA_CA_LICENSE = MPL-2.0 +PERL_MOZILLA_CA_LICENSE_FILES = README +PERL_MOZILLA_CA_DISTNAME = Mozilla-CA + +$(eval $(perl-package)) diff --git a/package/perl-net-dns/Config.in b/package/perl-net-dns/Config.in new file mode 100644 index 00000000..cf686554 --- /dev/null +++ b/package/perl-net-dns/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_NET_DNS + bool "perl-net-dns" + select BR2_PACKAGE_PERL_DIGEST_HMAC # runtime + help + Perl Interface to the Domain Name System. + + https://metacpan.org/release/Net-DNS diff --git a/package/perl-net-dns/perl-net-dns.hash b/package/perl-net-dns/perl-net-dns.hash new file mode 100644 index 00000000..da09e91b --- /dev/null +++ b/package/perl-net-dns/perl-net-dns.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 2c9120830a68f18deb43a95826ea6372 Net-DNS-1.29.tar.gz +sha256 852d6ee87e8f0d014223026581cbb56924ba8cddd3ceb29c6191dbb6122d43c5 Net-DNS-1.29.tar.gz + +# computed by scancpan +sha256 e4f3224d86bd79ac3d11ea513fcb83c68c20701346653699225331e2b7a2d447 README diff --git a/package/perl-net-dns/perl-net-dns.mk b/package/perl-net-dns/perl-net-dns.mk new file mode 100644 index 00000000..f5e8328a --- /dev/null +++ b/package/perl-net-dns/perl-net-dns.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-net-dns +# +################################################################################ + +PERL_NET_DNS_VERSION = 1.29 +PERL_NET_DNS_SOURCE = Net-DNS-$(PERL_NET_DNS_VERSION).tar.gz +PERL_NET_DNS_SITE = $(BR2_CPAN_MIRROR)/authors/id/N/NL/NLNETLABS +PERL_NET_DNS_LICENSE = MIT +PERL_NET_DNS_LICENSE_FILES = README +PERL_NET_DNS_DISTNAME = Net-DNS + +$(eval $(perl-package)) diff --git a/package/perl-net-http/Config.in b/package/perl-net-http/Config.in new file mode 100644 index 00000000..c09f3843 --- /dev/null +++ b/package/perl-net-http/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_NET_HTTP + bool "perl-net-http" + select BR2_PACKAGE_PERL_URI # runtime + help + Low-level HTTP connection (client). + + https://github.com/libwww-perl/Net-HTTP diff --git a/package/perl-net-http/perl-net-http.hash b/package/perl-net-http/perl-net-http.hash new file mode 100644 index 00000000..42ae6bd9 --- /dev/null +++ b/package/perl-net-http/perl-net-http.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 00f825fb848d50202aeec074c3608453 Net-HTTP-6.20.tar.gz +sha256 92527b2a24512961b8e3637c6216a057751e39b6fa751422ed181ff599779f1e Net-HTTP-6.20.tar.gz + +# computed by scancpan +sha256 49fbcc80e17295888b909176a0029f275a8c17b6cbfaf8867fe571ebe9a9ca79 LICENSE diff --git a/package/perl-net-http/perl-net-http.mk b/package/perl-net-http/perl-net-http.mk new file mode 100644 index 00000000..f8da6310 --- /dev/null +++ b/package/perl-net-http/perl-net-http.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-net-http +# +################################################################################ + +PERL_NET_HTTP_VERSION = 6.20 +PERL_NET_HTTP_SOURCE = Net-HTTP-$(PERL_NET_HTTP_VERSION).tar.gz +PERL_NET_HTTP_SITE = $(BR2_CPAN_MIRROR)/authors/id/O/OA/OALDERS +PERL_NET_HTTP_LICENSE = Artistic or GPL-1.0+ +PERL_NET_HTTP_LICENSE_FILES = LICENSE +PERL_NET_HTTP_DISTNAME = Net-HTTP + +$(eval $(perl-package)) diff --git a/package/perl-net-snmp/Config.in b/package/perl-net-snmp/Config.in new file mode 100644 index 00000000..850cd9ba --- /dev/null +++ b/package/perl-net-snmp/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_NET_SNMP + bool "perl-net-snmp" + help + Object oriented interface to SNMP. + + https://metacpan.org/release/Net-SNMP diff --git a/package/perl-net-snmp/perl-net-snmp.hash b/package/perl-net-snmp/perl-net-snmp.hash new file mode 100644 index 00000000..0b162e6d --- /dev/null +++ b/package/perl-net-snmp/perl-net-snmp.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 6137f04f9942d703f66179f890e3d096 Net-SNMP-v6.0.1.tar.gz +sha256 14c37bc1cbb3f3cdc7d6c13e0f27a859f14cdcfd5ea54a0467a88bc259b0b741 Net-SNMP-v6.0.1.tar.gz + +# computed by scancpan +sha256 a038159be54a2807dc48e2b946514d59fceab6737d5461d93d55297a98e6e24e LICENSE diff --git a/package/perl-net-snmp/perl-net-snmp.mk b/package/perl-net-snmp/perl-net-snmp.mk new file mode 100644 index 00000000..36b50d63 --- /dev/null +++ b/package/perl-net-snmp/perl-net-snmp.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-net-snmp +# +################################################################################ + +PERL_NET_SNMP_VERSION = 6.0.1 +PERL_NET_SNMP_SOURCE = Net-SNMP-v$(PERL_NET_SNMP_VERSION).tar.gz +PERL_NET_SNMP_SITE = $(BR2_CPAN_MIRROR)/authors/id/D/DT/DTOWN +PERL_NET_SNMP_DEPENDENCIES = host-perl-module-build +PERL_NET_SNMP_LICENSE = Artistic or GPL-1.0+ +PERL_NET_SNMP_LICENSE_FILES = LICENSE +PERL_NET_SNMP_DISTNAME = Net-SNMP + +$(eval $(perl-package)) diff --git a/package/perl-net-ssh2/Config.in b/package/perl-net-ssh2/Config.in new file mode 100644 index 00000000..4dfd6e1d --- /dev/null +++ b/package/perl-net-ssh2/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_PERL_NET_SSH2 + bool "perl-net-ssh2" + depends on !BR2_STATIC_LIBS + depends on BR2_PACKAGE_LIBSSH2_OPENSSL || BR2_PACKAGE_LIBSSH2_LIBGCRYPT + select BR2_PACKAGE_ZLIB + help + Support for the SSH 2 protocol via libssh2. + + Note: only the OpenSSL and Libgcrypt backends of libssh2 are + supported. + + https://metacpan.org/release/Net-SSH2 + +comment "perl-net-ssh2 needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +comment "perl-net-ssh2 needs libssh2 with OpenSSL or Libgcrypt backend" + depends on !(BR2_PACKAGE_LIBSSH2_OPENSSL || BR2_PACKAGE_LIBSSH2_LIBGCRYPT) diff --git a/package/perl-net-ssh2/perl-net-ssh2.hash b/package/perl-net-ssh2/perl-net-ssh2.hash new file mode 100644 index 00000000..d65b6f36 --- /dev/null +++ b/package/perl-net-ssh2/perl-net-ssh2.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 baa1b19fec9ca37ecfc12a22ba0c9122 Net-SSH2-0.71.tar.gz +sha256 ee411ec263c900c441fd1c490e9d52fc56b0bb32e1ed98869229501b200f8fa2 Net-SSH2-0.71.tar.gz + +# computed by scancpan +sha256 b9fe64368dd41bb5b9405b23f95ee0deb970427895ab0119eb3cd4d221764c1d README.pod diff --git a/package/perl-net-ssh2/perl-net-ssh2.mk b/package/perl-net-ssh2/perl-net-ssh2.mk new file mode 100644 index 00000000..10657c39 --- /dev/null +++ b/package/perl-net-ssh2/perl-net-ssh2.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# perl-net-ssh2 +# +################################################################################ + +PERL_NET_SSH2_VERSION = 0.71 +PERL_NET_SSH2_SOURCE = Net-SSH2-$(PERL_NET_SSH2_VERSION).tar.gz +PERL_NET_SSH2_SITE = $(BR2_CPAN_MIRROR)/authors/id/R/RK/RKITOVER +PERL_NET_SSH2_LICENSE = Artistic or GPL-1.0+ +PERL_NET_SSH2_LICENSE_FILES = README.pod +PERL_NET_SSH2_DEPENDENCIES = libssh2 zlib +PERL_NET_SSH2_DISTNAME = Net-SSH2 + +# build system will use host search paths by default +PERL_NET_SSH2_CONF_OPTS += \ + lib="$(STAGING_DIR)/usr/lib" \ + inc="$(STAGING_DIR)/usr/include" + +ifeq ($(BR2_PACKAGE_LIBSSH2_LIBGCRYPT),y) +PERL_NET_SSH2_CONF_OPTS += gcrypt +endif + +$(eval $(perl-package)) diff --git a/package/perl-net-ssleay/0001-fix-build-system.patch b/package/perl-net-ssleay/0001-fix-build-system.patch new file mode 100644 index 00000000..a6cd0f9c --- /dev/null +++ b/package/perl-net-ssleay/0001-fix-build-system.patch @@ -0,0 +1,36 @@ +buildsystem: fix for cross-compilation + +Avoid running the openssl binary, since it would break for +cross-compilation. Buildroot has a supported version, anyway. + +Also, avoid adding hard-coded includes and libraries search +paths, since they are missing the destdir; Buildroot compilers +and linkers already know where to search, anyway. + +Signed-off-by: "Yann E. MORIN" + +diff -durN perl-net-ssleay-1.64.orig/inc/Module/Install/PRIVATE/Net/SSLeay.pm perl-net-ssleay-1.64/inc/Module/Install/PRIVATE/Net/SSLeay.pm +--- perl-net-ssleay-1.64.orig/inc/Module/Install/PRIVATE/Net/SSLeay.pm 2014-04-01 08:08:37.000000000 +0200 ++++ perl-net-ssleay-1.64/inc/Module/Install/PRIVATE/Net/SSLeay.pm 2014-07-13 00:38:46.281380282 +0200 +@@ -37,14 +37,18 @@ + exit 0; # according http://wiki.cpantesters.org/wiki/CPANAuthorNotes this is best-practice when "missing library" + } + +- $self->check_openssl_version($prefix, $exec); ++# Does not work for cross-compilation. ++# In Buildroot, we do have a supported version. ++# $self->check_openssl_version($prefix, $exec); + my $opts = $self->ssleay_get_build_opts($prefix, $exec); + + $self->makemaker_args( + CCCDLFLAGS => $opts->{cccdlflags}, + OPTIMIZE => $opts->{optimize}, +- INC => join(' ', map {"-I$_"} @{$opts->{inc_paths}}), +- LIBS => join(' ', (map {"-L$_"} @{$opts->{lib_paths}}), (map {"-l$_"} @{$opts->{lib_links}})), ++# Buildroot already has the correct include and library search paths. ++# INC => join(' ', map {"-I$_"} @{$opts->{inc_paths}}), ++# LIBS => join(' ', (map {"-L$_"} @{$opts->{lib_paths}}), (map {"-l$_"} @{$opts->{lib_links}})), ++ LIBS => join(' ', (map {"-l$_"} @{$opts->{lib_links}})), + ); + + if ( $self->prompt( diff --git a/package/perl-net-ssleay/Config.in b/package/perl-net-ssleay/Config.in new file mode 100644 index 00000000..6998553e --- /dev/null +++ b/package/perl-net-ssleay/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PERL_NET_SSLEAY + bool "perl-net-ssleay" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_OPENSSL + help + Perl extension for using OpenSSL. + + https://metacpan.org/release/Net-SSLeay + +comment "perl-net-ssleay needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-net-ssleay/perl-net-ssleay.hash b/package/perl-net-ssleay/perl-net-ssleay.hash new file mode 100644 index 00000000..517b3c4d --- /dev/null +++ b/package/perl-net-ssleay/perl-net-ssleay.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 d602bdce4e0531c6efc276e3e429ca69 Net-SSLeay-1.85.tar.gz +sha256 9d8188b9fb1cae3bd791979c20554925d5e94a138d00414f1a6814549927b0c8 Net-SSLeay-1.85.tar.gz + +# computed by scancpan +sha256 b55065185a2172d9f2ea2dd87c18c206ea3dc45a64e5f3deb3eee34d839dc822 LICENSE diff --git a/package/perl-net-ssleay/perl-net-ssleay.mk b/package/perl-net-ssleay/perl-net-ssleay.mk new file mode 100644 index 00000000..80ce8b9c --- /dev/null +++ b/package/perl-net-ssleay/perl-net-ssleay.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# perl-net-ssleay +# +################################################################################ + +PERL_NET_SSLEAY_VERSION = 1.85 +PERL_NET_SSLEAY_SOURCE = Net-SSLeay-$(PERL_NET_SSLEAY_VERSION).tar.gz +PERL_NET_SSLEAY_SITE = $(BR2_CPAN_MIRROR)/authors/id/M/MI/MIKEM +PERL_NET_SSLEAY_DEPENDENCIES = openssl +PERL_NET_SSLEAY_LICENSE = OpenSSL +PERL_NET_SSLEAY_LICENSE_FILES = LICENSE +PERL_NET_SSLEAY_DISTNAME = Net-SSLeay + +# Try as hard as possible to remedy to the brain-damage their build-system +# suffers from: don't search for openssl, they pick the host-system one. +PERL_NET_SSLEAY_CONF_ENV = OPENSSL_PREFIX=$(STAGING_DIR)/usr + +# Remove problematic single quotes in LDDLFLAGS, CCFLAGS & OPTIMIZE definition +define PERL_NET_SSLEAY_FIX_MAKEFILE + $(SED) "s/^LDDLFLAGS = '\(.*\)'/LDDLFLAGS = \1/" $(@D)/Makefile + $(SED) "s/^CCFLAGS = '\(.*\)'/CCFLAGS = \1/" $(@D)/Makefile + $(SED) "s/^OPTIMIZE = '\(.*\)'/OPTIMIZE = \1/" $(@D)/Makefile +endef +PERL_NET_SSLEAY_POST_CONFIGURE_HOOKS += PERL_NET_SSLEAY_FIX_MAKEFILE + +$(eval $(perl-package)) diff --git a/package/perl-net-telnet/Config.in b/package/perl-net-telnet/Config.in new file mode 100644 index 00000000..c4f68072 --- /dev/null +++ b/package/perl-net-telnet/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_NET_TELNET + bool "perl-net-telnet" + help + Interact with TELNET port or other TCP ports. + + https://metacpan.org/release/Net-Telnet diff --git a/package/perl-net-telnet/perl-net-telnet.hash b/package/perl-net-telnet/perl-net-telnet.hash new file mode 100644 index 00000000..cf1def6a --- /dev/null +++ b/package/perl-net-telnet/perl-net-telnet.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 d2514080116c1b0fa5f96295c84538e3 Net-Telnet-3.04.tar.gz +sha256 e64d567a4e16295ecba949368e7a6b8b5ae2a16b3ad682121d9b007dc5d2a37a Net-Telnet-3.04.tar.gz + +# computed by scancpan +sha256 05beca683093827706ef45a4958bf23bcd91990e0beeb0b098f97c661478c90d README diff --git a/package/perl-net-telnet/perl-net-telnet.mk b/package/perl-net-telnet/perl-net-telnet.mk new file mode 100644 index 00000000..0b9cce0a --- /dev/null +++ b/package/perl-net-telnet/perl-net-telnet.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-net-telnet +# +################################################################################ + +PERL_NET_TELNET_VERSION = 3.04 +PERL_NET_TELNET_SOURCE = Net-Telnet-$(PERL_NET_TELNET_VERSION).tar.gz +PERL_NET_TELNET_SITE = $(BR2_CPAN_MIRROR)/authors/id/J/JR/JROGERS +PERL_NET_TELNET_LICENSE = Artistic or GPL-1.0+ +PERL_NET_TELNET_LICENSE_FILES = README +PERL_NET_TELNET_DISTNAME = Net-Telnet + +$(eval $(perl-package)) diff --git a/package/perl-netaddr-ip/Config.in b/package/perl-netaddr-ip/Config.in new file mode 100644 index 00000000..3536c349 --- /dev/null +++ b/package/perl-netaddr-ip/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_NETADDR_IP + bool "perl-netaddr-ip" + help + Manages IPv4 and IPv6 addresses and subnets. + + https://metacpan.org/release/NetAddr-IP diff --git a/package/perl-netaddr-ip/perl-netaddr-ip.hash b/package/perl-netaddr-ip/perl-netaddr-ip.hash new file mode 100644 index 00000000..ce0477d9 --- /dev/null +++ b/package/perl-netaddr-ip/perl-netaddr-ip.hash @@ -0,0 +1,7 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 990dfcbffae356835c536e8ab56a2880 NetAddr-IP-4.079.tar.gz +sha256 ec5a82dfb7028bcd28bb3d569f95d87dd4166cc19867f2184ed3a59f6d6ca0e7 NetAddr-IP-4.079.tar.gz + +# computed by scancpan +sha256 b7fd9b73ea99602016a326e0b62e6646060d18febdd065ceca8bb482208c3d88 Artistic +sha256 773a84089e32147cffef4c6fa127a14658c8c5866987d71d86f0fe22161780f4 Copying diff --git a/package/perl-netaddr-ip/perl-netaddr-ip.mk b/package/perl-netaddr-ip/perl-netaddr-ip.mk new file mode 100644 index 00000000..4824b4e9 --- /dev/null +++ b/package/perl-netaddr-ip/perl-netaddr-ip.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# perl-netaddr-ip +# +################################################################################ + +PERL_NETADDR_IP_VERSION = 4.079 +PERL_NETADDR_IP_SOURCE = NetAddr-IP-$(PERL_NETADDR_IP_VERSION).tar.gz +PERL_NETADDR_IP_SITE = $(BR2_CPAN_MIRROR)/authors/id/M/MI/MIKER +PERL_NETADDR_IP_LICENSE = Artistic or GPL-1.0+ +PERL_NETADDR_IP_LICENSE_FILES = Artistic Copying +PERL_NETADDR_IP_DISTNAME = NetAddr-IP + +ifeq ($(BR2_STATIC_LIBS),y) +PERL_NETADDR_IP_CONF_OPTS = -noxs +endif + +$(eval $(perl-package)) diff --git a/package/perl-number-bytes-human/Config.in b/package/perl-number-bytes-human/Config.in new file mode 100644 index 00000000..b56f70b0 --- /dev/null +++ b/package/perl-number-bytes-human/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_NUMBER_BYTES_HUMAN + bool "perl-number-bytes-human" + help + Convert byte count to human readable format. + + https://metacpan.org/release/Number-Bytes-Human diff --git a/package/perl-number-bytes-human/perl-number-bytes-human.hash b/package/perl-number-bytes-human/perl-number-bytes-human.hash new file mode 100644 index 00000000..af7a6b65 --- /dev/null +++ b/package/perl-number-bytes-human/perl-number-bytes-human.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 43d2c86a55924aa71535a41de0311efd Number-Bytes-Human-0.11.tar.gz +sha256 5fc79c49b0b40df780479c43696381343e2b6ad1fe52859f60bc65b66ebe6f2c Number-Bytes-Human-0.11.tar.gz + +# computed by scancpan +sha256 d42143fe4b63cb5d488d65a44e6c55769b098ea447462ff33316b33a837b7cf9 README diff --git a/package/perl-number-bytes-human/perl-number-bytes-human.mk b/package/perl-number-bytes-human/perl-number-bytes-human.mk new file mode 100644 index 00000000..d2d712f8 --- /dev/null +++ b/package/perl-number-bytes-human/perl-number-bytes-human.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-number-bytes-human +# +################################################################################ + +PERL_NUMBER_BYTES_HUMAN_VERSION = 0.11 +PERL_NUMBER_BYTES_HUMAN_SOURCE = Number-Bytes-Human-$(PERL_NUMBER_BYTES_HUMAN_VERSION).tar.gz +PERL_NUMBER_BYTES_HUMAN_SITE = $(BR2_CPAN_MIRROR)/authors/id/F/FE/FERREIRA +PERL_NUMBER_BYTES_HUMAN_LICENSE = Artistic or GPL-1.0+ +PERL_NUMBER_BYTES_HUMAN_LICENSE_FILES = README +PERL_NUMBER_BYTES_HUMAN_DISTNAME = Number-Bytes-Human + +$(eval $(perl-package)) diff --git a/package/perl-package-stash/Config.in b/package/perl-package-stash/Config.in new file mode 100644 index 00000000..6b7ca247 --- /dev/null +++ b/package/perl-package-stash/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PERL_PACKAGE_STASH + bool "perl-package-stash" + select BR2_PACKAGE_PERL_DIST_CHECKCONFLICTS # runtime + select BR2_PACKAGE_PERL_MODULE_IMPLEMENTATION # runtime + help + routines for manipulating stashes. + + http://metacpan.org/release/Package-Stash diff --git a/package/perl-package-stash/perl-package-stash.hash b/package/perl-package-stash/perl-package-stash.hash new file mode 100644 index 00000000..0bbac515 --- /dev/null +++ b/package/perl-package-stash/perl-package-stash.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 287d80c9115c9230912aca684f8ca92e Package-Stash-0.39.tar.gz +sha256 9165f555112e080493ce0e9129de0886da30b2593fb353a2abd1c76b2d2621b5 Package-Stash-0.39.tar.gz + +# computed by scancpan +sha256 810b319a6f4a53c9cbbef513da17b2f0c872accd149bb889f153f4b78cf8cbb8 LICENSE diff --git a/package/perl-package-stash/perl-package-stash.mk b/package/perl-package-stash/perl-package-stash.mk new file mode 100644 index 00000000..bc116abc --- /dev/null +++ b/package/perl-package-stash/perl-package-stash.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-package-stash +# +################################################################################ + +PERL_PACKAGE_STASH_VERSION = 0.39 +PERL_PACKAGE_STASH_SOURCE = Package-Stash-$(PERL_PACKAGE_STASH_VERSION).tar.gz +PERL_PACKAGE_STASH_SITE = $(BR2_CPAN_MIRROR)/authors/id/E/ET/ETHER +PERL_PACKAGE_STASH_LICENSE = Artistic or GPL-1.0+ +PERL_PACKAGE_STASH_LICENSE_FILES = LICENSE +PERL_PACKAGE_STASH_DISTNAME = Package-Stash + +$(eval $(perl-package)) diff --git a/package/perl-params-util/Config.in b/package/perl-params-util/Config.in new file mode 100644 index 00000000..bbc82167 --- /dev/null +++ b/package/perl-params-util/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PERL_PARAMS_UTIL + bool "perl-params-util" + depends on !BR2_STATIC_LIBS + help + Simple, compact and correct param-checking functions. + + https://metacpan.org/release/Params-Util + +comment "perl-params-util needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-params-util/perl-params-util.hash b/package/perl-params-util/perl-params-util.hash new file mode 100644 index 00000000..b0461372 --- /dev/null +++ b/package/perl-params-util/perl-params-util.hash @@ -0,0 +1,8 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 f1aa70ba570f03f14cd394096b9c6883 Params-Util-1.102.tar.gz +sha256 499bb1b482db24fda277a51525596ad092c2bd51dd508fa8fec2e9f849097402 Params-Util-1.102.tar.gz + +# computed by scancpan +sha256 08c2ed7589aff3b2076b48b792078d3479c2295559ee7bc4615e93abe0473939 ARTISTIC-1.0 +sha256 3d2fb9b42d1134f39c2e990d66b5e9b77005663fe956db526cc380eb3d9a77d8 GPL-1 +sha256 834c4ebff45be11f35f059b077fdd747dee4b8a747b95049d849fef1c0ccdc62 LICENSE diff --git a/package/perl-params-util/perl-params-util.mk b/package/perl-params-util/perl-params-util.mk new file mode 100644 index 00000000..8c2a960c --- /dev/null +++ b/package/perl-params-util/perl-params-util.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-params-util +# +################################################################################ + +PERL_PARAMS_UTIL_VERSION = 1.102 +PERL_PARAMS_UTIL_SOURCE = Params-Util-$(PERL_PARAMS_UTIL_VERSION).tar.gz +PERL_PARAMS_UTIL_SITE = $(BR2_CPAN_MIRROR)/authors/id/R/RE/REHSACK +PERL_PARAMS_UTIL_LICENSE = Artistic or GPL-1.0+ +PERL_PARAMS_UTIL_LICENSE_FILES = ARTISTIC-1.0 GPL-1 LICENSE +PERL_PARAMS_UTIL_DISTNAME = Params-Util + +$(eval $(perl-package)) diff --git a/package/perl-parse-yapp/Config.in b/package/perl-parse-yapp/Config.in new file mode 100644 index 00000000..27816826 --- /dev/null +++ b/package/perl-parse-yapp/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_PARSE_YAPP + bool "perl-parse-yapp" + help + A perl frontend to the Parse::Yapp module. + + https://metacpan.org/release/Parse-Yapp diff --git a/package/perl-parse-yapp/perl-parse-yapp.hash b/package/perl-parse-yapp/perl-parse-yapp.hash new file mode 100644 index 00000000..36541592 --- /dev/null +++ b/package/perl-parse-yapp/perl-parse-yapp.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 69584d5b0f0304bb2a23cffcd982c5de Parse-Yapp-1.21.tar.gz +sha256 3810e998308fba2e0f4f26043035032b027ce51ce5c8a52a8b8e340ca65f13e5 Parse-Yapp-1.21.tar.gz + +# locally computed +sha256 a5d97e3ee50ba12b7897841a117790f723795e4a61e5ad1668dc064956c84e96 lib/Parse/Yapp.pm diff --git a/package/perl-parse-yapp/perl-parse-yapp.mk b/package/perl-parse-yapp/perl-parse-yapp.mk new file mode 100644 index 00000000..12f05efe --- /dev/null +++ b/package/perl-parse-yapp/perl-parse-yapp.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-parse-yapp +# +################################################################################ + +PERL_PARSE_YAPP_VERSION = 1.21 +PERL_PARSE_YAPP_SOURCE = Parse-Yapp-$(PERL_PARSE_YAPP_VERSION).tar.gz +PERL_PARSE_YAPP_SITE = $(BR2_CPAN_MIRROR)/authors/id/W/WB/WBRASWELL +PERL_PARSE_YAPP_LICENSE = Artistic or GPL-1.0+ +PERL_PARSE_YAPP_LICENSE_FILES = lib/Parse/Yapp.pm +PERL_PARSE_YAPP_DISTNAME = Parse-Yapp + +$(eval $(perl-package)) +$(eval $(host-perl-package)) diff --git a/package/perl-path-class/perl-path-class.hash b/package/perl-path-class/perl-path-class.hash new file mode 100644 index 00000000..d2741dfc --- /dev/null +++ b/package/perl-path-class/perl-path-class.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 13e6db714f6d5a0e62ca1c4a7fc4d0f3 Path-Class-0.37.tar.gz +sha256 654781948602386f2cb2e4473a739f17dc6953d92aabc2498a4ca2561bc248ce Path-Class-0.37.tar.gz + +# computed by scancpan +sha256 636b5c82eabfe3d4cd86126db9502fd537d1442ad2c88c93dbe221e62b5f1710 LICENSE diff --git a/package/perl-path-class/perl-path-class.mk b/package/perl-path-class/perl-path-class.mk new file mode 100644 index 00000000..185b7f63 --- /dev/null +++ b/package/perl-path-class/perl-path-class.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-path-class +# +################################################################################ + +PERL_PATH_CLASS_VERSION = 0.37 +PERL_PATH_CLASS_SOURCE = Path-Class-$(PERL_PATH_CLASS_VERSION).tar.gz +PERL_PATH_CLASS_SITE = $(BR2_CPAN_MIRROR)/authors/id/K/KW/KWILLIAMS +HOST_PERL_PATH_CLASS_DEPENDENCIES = host-perl-module-build +PERL_PATH_CLASS_LICENSE = Artistic or GPL-1.0+ +PERL_PATH_CLASS_LICENSE_FILES = LICENSE +PERL_PATH_CLASS_DISTNAME = Path-Class + +$(eval $(host-perl-package)) diff --git a/package/perl-path-tiny/Config.in b/package/perl-path-tiny/Config.in new file mode 100644 index 00000000..f79de73e --- /dev/null +++ b/package/perl-path-tiny/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_PATH_TINY + bool "perl-path-tiny" + help + File path utility. + + https://github.com/dagolden/Path-Tiny diff --git a/package/perl-path-tiny/perl-path-tiny.hash b/package/perl-path-tiny/perl-path-tiny.hash new file mode 100644 index 00000000..5138f401 --- /dev/null +++ b/package/perl-path-tiny/perl-path-tiny.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 dd6092293f8766fb87d003dceebe4263 Path-Tiny-0.114.tar.gz +sha256 cd0f88f37a58fc3667ec065767fe01e73ee6efa18a112bfd3508cf6579ca00e1 Path-Tiny-0.114.tar.gz + +# computed by scancpan +sha256 a999b03d2b80e5c7f987289ac835fa2d88cafa9f0df24adf8a1fd21e175acd79 LICENSE diff --git a/package/perl-path-tiny/perl-path-tiny.mk b/package/perl-path-tiny/perl-path-tiny.mk new file mode 100644 index 00000000..579f3f58 --- /dev/null +++ b/package/perl-path-tiny/perl-path-tiny.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-path-tiny +# +################################################################################ + +PERL_PATH_TINY_VERSION = 0.114 +PERL_PATH_TINY_SOURCE = Path-Tiny-$(PERL_PATH_TINY_VERSION).tar.gz +PERL_PATH_TINY_SITE = $(BR2_CPAN_MIRROR)/authors/id/D/DA/DAGOLDEN +PERL_PATH_TINY_LICENSE = Apache-2.0 +PERL_PATH_TINY_LICENSE_FILES = LICENSE +PERL_PATH_TINY_DISTNAME = Path-Tiny + +$(eval $(perl-package)) diff --git a/package/perl-plack/Config.in b/package/perl-plack/Config.in new file mode 100644 index 00000000..c81ac4a4 --- /dev/null +++ b/package/perl-plack/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_PERL_PLACK + bool "perl-plack" + select BR2_PACKAGE_PERL_APACHE_LOGFORMAT_COMPILER # runtime + select BR2_PACKAGE_PERL_COOKIE_BAKER # runtime + select BR2_PACKAGE_PERL_DEVEL_STACKTRACE # runtime + select BR2_PACKAGE_PERL_DEVEL_STACKTRACE_ASHTML # runtime + select BR2_PACKAGE_PERL_FILE_SHAREDIR # runtime + select BR2_PACKAGE_PERL_FILESYS_NOTIFY_SIMPLE # runtime + select BR2_PACKAGE_PERL_HTTP_ENTITY_PARSER # runtime + select BR2_PACKAGE_PERL_HTTP_HEADERS_FAST # runtime + select BR2_PACKAGE_PERL_HTTP_MESSAGE # runtime + select BR2_PACKAGE_PERL_HASH_MULTIVALUE # runtime + select BR2_PACKAGE_PERL_STREAM_BUFFERED # runtime + select BR2_PACKAGE_PERL_TRY_TINY # runtime + select BR2_PACKAGE_PERL_URI # runtime + select BR2_PACKAGE_PERL_WWW_FORM_URLENCODED # runtime + help + Perl Superglue for Web frameworks and Web Servers (PSGI + toolkit). + + https://github.com/plack/Plack diff --git a/package/perl-plack/perl-plack.hash b/package/perl-plack/perl-plack.hash new file mode 100644 index 00000000..c763d2c1 --- /dev/null +++ b/package/perl-plack/perl-plack.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 36282b473b4521219c44a9db437b650f Plack-1.0048.tar.gz +sha256 30f5f25e19b437859156a2526f61ca9ab708d50d5730c279189403aabfe542a6 Plack-1.0048.tar.gz + +# computed by scancpan +sha256 fb67655b5d1adedef83aed2c79bf4f89c68d8595a7060815520173f663a3631d LICENSE diff --git a/package/perl-plack/perl-plack.mk b/package/perl-plack/perl-plack.mk new file mode 100644 index 00000000..b95f204d --- /dev/null +++ b/package/perl-plack/perl-plack.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-plack +# +################################################################################ + +PERL_PLACK_VERSION = 1.0048 +PERL_PLACK_SOURCE = Plack-$(PERL_PLACK_VERSION).tar.gz +PERL_PLACK_SITE = $(BR2_CPAN_MIRROR)/authors/id/M/MI/MIYAGAWA +PERL_PLACK_DEPENDENCIES = host-perl-file-sharedir-install +PERL_PLACK_LICENSE = Artistic or GPL-1.0+ +PERL_PLACK_LICENSE_FILES = LICENSE +PERL_PLACK_DISTNAME = Plack + +$(eval $(perl-package)) diff --git a/package/perl-posix-strftime-compiler/Config.in b/package/perl-posix-strftime-compiler/Config.in new file mode 100644 index 00000000..3c8d7d24 --- /dev/null +++ b/package/perl-posix-strftime-compiler/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_POSIX_STRFTIME_COMPILER + bool "perl-posix-strftime-compiler" + help + GNU C library compatible strftime for loggers and servers. + + https://github.com/kazeburo/POSIX-strftime-Compiler diff --git a/package/perl-posix-strftime-compiler/perl-posix-strftime-compiler.hash b/package/perl-posix-strftime-compiler/perl-posix-strftime-compiler.hash new file mode 100644 index 00000000..bdc6fd45 --- /dev/null +++ b/package/perl-posix-strftime-compiler/perl-posix-strftime-compiler.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 3a5ae7d56a5917410c1b661e01ed1a68 POSIX-strftime-Compiler-0.44.tar.gz +sha256 dfd3c97398dcfe51c8236b85e3dc28035667b76531f7aa0a6535f3aa5405b35a POSIX-strftime-Compiler-0.44.tar.gz + +# computed by scancpan +sha256 79c2a066104e71602785fd815c5aea6f7db78c19451d68521380083f9c2a8805 LICENSE diff --git a/package/perl-posix-strftime-compiler/perl-posix-strftime-compiler.mk b/package/perl-posix-strftime-compiler/perl-posix-strftime-compiler.mk new file mode 100644 index 00000000..c11ed585 --- /dev/null +++ b/package/perl-posix-strftime-compiler/perl-posix-strftime-compiler.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-posix-strftime-compiler +# +################################################################################ + +PERL_POSIX_STRFTIME_COMPILER_VERSION = 0.44 +PERL_POSIX_STRFTIME_COMPILER_SOURCE = POSIX-strftime-Compiler-$(PERL_POSIX_STRFTIME_COMPILER_VERSION).tar.gz +PERL_POSIX_STRFTIME_COMPILER_SITE = $(BR2_CPAN_MIRROR)/authors/id/K/KA/KAZEBURO +PERL_POSIX_STRFTIME_COMPILER_DEPENDENCIES = host-perl-module-build-tiny +PERL_POSIX_STRFTIME_COMPILER_LICENSE = Artistic or GPL-1.0+ +PERL_POSIX_STRFTIME_COMPILER_LICENSE_FILES = LICENSE +PERL_POSIX_STRFTIME_COMPILER_DISTNAME = POSIX-strftime-Compiler + +$(eval $(perl-package)) diff --git a/package/perl-role-tiny/Config.in b/package/perl-role-tiny/Config.in new file mode 100644 index 00000000..0c44d990 --- /dev/null +++ b/package/perl-role-tiny/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_ROLE_TINY + bool "perl-role-tiny" + help + Roles: a nouvelle cuisine portion size slice of Moose. + + https://metacpan.org/release/Role-Tiny diff --git a/package/perl-role-tiny/perl-role-tiny.hash b/package/perl-role-tiny/perl-role-tiny.hash new file mode 100644 index 00000000..9de78680 --- /dev/null +++ b/package/perl-role-tiny/perl-role-tiny.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 065e459cdc3c6e163c6e8359baf69f45 Role-Tiny-2.002003.tar.gz +sha256 6981e5f2d0beded157840199d678da462b22a9a3753333cab322ab6efb0fbb89 Role-Tiny-2.002003.tar.gz + +# computed by scancpan +sha256 a8a1595c2347f7d10e896809d4f3dea85ccc10ac5644b8073111233cd120b14a LICENSE diff --git a/package/perl-role-tiny/perl-role-tiny.mk b/package/perl-role-tiny/perl-role-tiny.mk new file mode 100644 index 00000000..5a6477f9 --- /dev/null +++ b/package/perl-role-tiny/perl-role-tiny.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-role-tiny +# +################################################################################ + +PERL_ROLE_TINY_VERSION = 2.002003 +PERL_ROLE_TINY_SOURCE = Role-Tiny-$(PERL_ROLE_TINY_VERSION).tar.gz +PERL_ROLE_TINY_SITE = $(BR2_CPAN_MIRROR)/authors/id/H/HA/HAARG +PERL_ROLE_TINY_LICENSE = Artistic or GPL-1.0+ +PERL_ROLE_TINY_LICENSE_FILES = LICENSE +PERL_ROLE_TINY_DISTNAME = Role-Tiny + +$(eval $(perl-package)) diff --git a/package/perl-stream-buffered/Config.in b/package/perl-stream-buffered/Config.in new file mode 100644 index 00000000..3bddefe5 --- /dev/null +++ b/package/perl-stream-buffered/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_STREAM_BUFFERED + bool "perl-stream-buffered" + help + temporary buffer to save bytes. + + https://github.com/plack/Stream-Buffered diff --git a/package/perl-stream-buffered/perl-stream-buffered.hash b/package/perl-stream-buffered/perl-stream-buffered.hash new file mode 100644 index 00000000..a40955d8 --- /dev/null +++ b/package/perl-stream-buffered/perl-stream-buffered.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 b030fecaa784cd573289ae797c7aeae9 Stream-Buffered-0.03.tar.gz +sha256 9b2d4390b5de6b0cf4558e4ad04317a73c5e13dd19af29149c4e47c37fb2423b Stream-Buffered-0.03.tar.gz + +# computed by scancpan +sha256 68e8c38e6d2f2b0570a908411f8321b80a7e35ea44f43729807c9ac9a025f591 LICENSE diff --git a/package/perl-stream-buffered/perl-stream-buffered.mk b/package/perl-stream-buffered/perl-stream-buffered.mk new file mode 100644 index 00000000..63aa1a24 --- /dev/null +++ b/package/perl-stream-buffered/perl-stream-buffered.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-stream-buffered +# +################################################################################ + +PERL_STREAM_BUFFERED_VERSION = 0.03 +PERL_STREAM_BUFFERED_SOURCE = Stream-Buffered-$(PERL_STREAM_BUFFERED_VERSION).tar.gz +PERL_STREAM_BUFFERED_SITE = $(BR2_CPAN_MIRROR)/authors/id/D/DO/DOY +PERL_STREAM_BUFFERED_LICENSE = Artistic or GPL-1.0+ +PERL_STREAM_BUFFERED_LICENSE_FILES = LICENSE +PERL_STREAM_BUFFERED_DISTNAME = Stream-Buffered + +$(eval $(perl-package)) diff --git a/package/perl-sub-exporter-progressive/Config.in b/package/perl-sub-exporter-progressive/Config.in new file mode 100644 index 00000000..e44de83e --- /dev/null +++ b/package/perl-sub-exporter-progressive/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_SUB_EXPORTER_PROGRESSIVE + bool "perl-sub-exporter-progressive" + help + Only use Sub::Exporter if you need it. + + https://github.com/frioux/Sub-Exporter-Progressive diff --git a/package/perl-sub-exporter-progressive/perl-sub-exporter-progressive.hash b/package/perl-sub-exporter-progressive/perl-sub-exporter-progressive.hash new file mode 100644 index 00000000..6bd24416 --- /dev/null +++ b/package/perl-sub-exporter-progressive/perl-sub-exporter-progressive.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 72cf6acdd2a0a8b105821a4db98e4ebe Sub-Exporter-Progressive-0.001013.tar.gz +sha256 d535b7954d64da1ac1305b1fadf98202769e3599376854b2ced90c382beac056 Sub-Exporter-Progressive-0.001013.tar.gz + +# computed by scancpan +sha256 24c38cba4218e6be62e511bffe21e63aa57335d8929034aa58e8a85eed001e99 LICENSE diff --git a/package/perl-sub-exporter-progressive/perl-sub-exporter-progressive.mk b/package/perl-sub-exporter-progressive/perl-sub-exporter-progressive.mk new file mode 100644 index 00000000..22fc29d5 --- /dev/null +++ b/package/perl-sub-exporter-progressive/perl-sub-exporter-progressive.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-sub-exporter-progressive +# +################################################################################ + +PERL_SUB_EXPORTER_PROGRESSIVE_VERSION = 0.001013 +PERL_SUB_EXPORTER_PROGRESSIVE_SOURCE = Sub-Exporter-Progressive-$(PERL_SUB_EXPORTER_PROGRESSIVE_VERSION).tar.gz +PERL_SUB_EXPORTER_PROGRESSIVE_SITE = $(BR2_CPAN_MIRROR)/authors/id/F/FR/FREW +PERL_SUB_EXPORTER_PROGRESSIVE_LICENSE = Artistic or GPL-1.0+ +PERL_SUB_EXPORTER_PROGRESSIVE_LICENSE_FILES = LICENSE +PERL_SUB_EXPORTER_PROGRESSIVE_DISTNAME = Sub-Exporter-Progressive + +$(eval $(perl-package)) diff --git a/package/perl-sub-install/Config.in b/package/perl-sub-install/Config.in new file mode 100644 index 00000000..d1f539c0 --- /dev/null +++ b/package/perl-sub-install/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_SUB_INSTALL + bool "perl-sub-install" + help + install subroutines into packages easily. + + https://github.com/rjbs/Sub-Install diff --git a/package/perl-sub-install/perl-sub-install.hash b/package/perl-sub-install/perl-sub-install.hash new file mode 100644 index 00000000..3abd9940 --- /dev/null +++ b/package/perl-sub-install/perl-sub-install.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 e1ce4f9cb6b2f6b8778b036c31afa5ab Sub-Install-0.928.tar.gz +sha256 61e567a7679588887b7b86d427bc476ea6d77fffe7e0d17d640f89007d98ef0f Sub-Install-0.928.tar.gz + +# computed by scancpan +sha256 ad5fb5c05003488f924c60ead21694d629055c9db2ee2d9dd0cf0041b9fedaca LICENSE diff --git a/package/perl-sub-install/perl-sub-install.mk b/package/perl-sub-install/perl-sub-install.mk new file mode 100644 index 00000000..85d60caf --- /dev/null +++ b/package/perl-sub-install/perl-sub-install.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-sub-install +# +################################################################################ + +PERL_SUB_INSTALL_VERSION = 0.928 +PERL_SUB_INSTALL_SOURCE = Sub-Install-$(PERL_SUB_INSTALL_VERSION).tar.gz +PERL_SUB_INSTALL_SITE = $(BR2_CPAN_MIRROR)/authors/id/R/RJ/RJBS +PERL_SUB_INSTALL_LICENSE = Artistic or GPL-1.0+ +PERL_SUB_INSTALL_LICENSE_FILES = LICENSE +PERL_SUB_INSTALL_DISTNAME = Sub-Install + +$(eval $(perl-package)) diff --git a/package/perl-sub-quote/Config.in b/package/perl-sub-quote/Config.in new file mode 100644 index 00000000..4487e930 --- /dev/null +++ b/package/perl-sub-quote/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_SUB_QUOTE + bool "perl-sub-quote" + help + Efficient generation of subroutines via string eval. + + https://metacpan.org/release/Sub-Quote diff --git a/package/perl-sub-quote/perl-sub-quote.hash b/package/perl-sub-quote/perl-sub-quote.hash new file mode 100644 index 00000000..d918af23 --- /dev/null +++ b/package/perl-sub-quote/perl-sub-quote.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 1bb9caee697bcfa738f419d40505e506 Sub-Quote-2.006006.tar.gz +sha256 6e4e2af42388fa6d2609e0e82417de7cc6be47223f576592c656c73c7524d89d Sub-Quote-2.006006.tar.gz + +# computed by scancpan +sha256 88f4a8719c584d756dcfeebc7f35643066354188bfb57c672fbafcd44e044e9c LICENSE diff --git a/package/perl-sub-quote/perl-sub-quote.mk b/package/perl-sub-quote/perl-sub-quote.mk new file mode 100644 index 00000000..a22da169 --- /dev/null +++ b/package/perl-sub-quote/perl-sub-quote.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-sub-quote +# +################################################################################ + +PERL_SUB_QUOTE_VERSION = 2.006006 +PERL_SUB_QUOTE_SOURCE = Sub-Quote-$(PERL_SUB_QUOTE_VERSION).tar.gz +PERL_SUB_QUOTE_SITE = $(BR2_CPAN_MIRROR)/authors/id/H/HA/HAARG +PERL_SUB_QUOTE_LICENSE = Artistic or GPL-1.0+ +PERL_SUB_QUOTE_LICENSE_FILES = LICENSE +PERL_SUB_QUOTE_DISTNAME = Sub-Quote + +$(eval $(perl-package)) diff --git a/package/perl-sys-cpu/0001-remove-extraneous-include.patch b/package/perl-sys-cpu/0001-remove-extraneous-include.patch new file mode 100644 index 00000000..eb7d8f76 --- /dev/null +++ b/package/perl-sys-cpu/0001-remove-extraneous-include.patch @@ -0,0 +1,20 @@ +Drop include + + does not exist in musl or uClibc, so including it +causes a build failure. In glibc, it simply redirects to , +so we can safely drop the inclusion of + +Signed-off-by: Christopher McCrory + +Index: b/CPU.xs +=================================================================== +--- a/CPU.xs ++++ b/CPU.xs +@@ -24,7 +24,6 @@ + #include + #else /* other (try unix) */ + #include +- #include + #endif + #if defined(__sun) || defined(__sun__) + #include diff --git a/package/perl-sys-cpu/Config.in b/package/perl-sys-cpu/Config.in new file mode 100644 index 00000000..70cfded8 --- /dev/null +++ b/package/perl-sys-cpu/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PERL_SYS_CPU + bool "perl-sys-cpu" + depends on !BR2_STATIC_LIBS + help + Perl module for getting information about the system CPU + (Sys::CPU). + + http://search.cpan.org/dist/Sys-CPU/ + +comment "perl-sys-cpu needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-sys-cpu/perl-sys-cpu.hash b/package/perl-sys-cpu/perl-sys-cpu.hash new file mode 100644 index 00000000..896a7410 --- /dev/null +++ b/package/perl-sys-cpu/perl-sys-cpu.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 ca0ec47ab24070e3040e5075337cfc69721362d9bef50f6992072efe644d4d26 Sys-CPU-0.52.tar.gz +sha256 911a3f8e83dfff143794b34881e13f0759b498c31e067fc7dff0c2e641559e1e README diff --git a/package/perl-sys-cpu/perl-sys-cpu.mk b/package/perl-sys-cpu/perl-sys-cpu.mk new file mode 100644 index 00000000..8402bef8 --- /dev/null +++ b/package/perl-sys-cpu/perl-sys-cpu.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# perl-sys-cpu +# +################################################################################ + +PERL_SYS_CPU_VERSION = 0.52 +PERL_SYS_CPU_SOURCE = Sys-CPU-$(PERL_SYS_CPU_VERSION).tar.gz +PERL_SYS_CPU_SITE = $(BR2_CPAN_MIRROR)/authors/id/M/MK/MKODERER +PERL_SYS_CPU_LICENSE = Artistic or GPL-1.0+ +PERL_SYS_CPU_LICENSE_FILES = README + +$(eval $(perl-package)) diff --git a/package/perl-sys-meminfo/Config.in b/package/perl-sys-meminfo/Config.in new file mode 100644 index 00000000..2175d88d --- /dev/null +++ b/package/perl-sys-meminfo/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PERL_SYS_MEMINFO + bool "perl-sys-meminfo" + depends on !BR2_STATIC_LIBS + help + query the total free and used physical memory. + + https://metacpan.org/release/Sys-MemInfo + +comment "perl-sys-meminfo needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-sys-meminfo/perl-sys-meminfo.hash b/package/perl-sys-meminfo/perl-sys-meminfo.hash new file mode 100644 index 00000000..207cfad2 --- /dev/null +++ b/package/perl-sys-meminfo/perl-sys-meminfo.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 88f0632691d7de91cbed95ba1ff29025 Sys-MemInfo-0.99.tar.gz +sha256 0786319d3a3a8bae5d727939244bf17e140b714f52734d5e9f627203e4cf3e3b Sys-MemInfo-0.99.tar.gz + +# computed by scancpan +sha256 62854ade112a6782f476bdc7dc9603776c4e064782623d999f966dba131a15de LICENSE diff --git a/package/perl-sys-meminfo/perl-sys-meminfo.mk b/package/perl-sys-meminfo/perl-sys-meminfo.mk new file mode 100644 index 00000000..e70dd73a --- /dev/null +++ b/package/perl-sys-meminfo/perl-sys-meminfo.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-sys-meminfo +# +################################################################################ + +PERL_SYS_MEMINFO_VERSION = 0.99 +PERL_SYS_MEMINFO_SOURCE = Sys-MemInfo-$(PERL_SYS_MEMINFO_VERSION).tar.gz +PERL_SYS_MEMINFO_SITE = $(BR2_CPAN_MIRROR)/authors/id/S/SC/SCRESTO +PERL_SYS_MEMINFO_LICENSE = Artistic or GPL-1.0+ +PERL_SYS_MEMINFO_LICENSE_FILES = LICENSE +PERL_SYS_MEMINFO_DISTNAME = Sys-MemInfo + +$(eval $(perl-package)) diff --git a/package/perl-sys-mmap/Config.in b/package/perl-sys-mmap/Config.in new file mode 100644 index 00000000..989e6bf2 --- /dev/null +++ b/package/perl-sys-mmap/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PERL_SYS_MMAP + bool "perl-sys-mmap" + depends on !BR2_STATIC_LIBS + help + uses mmap to map in a file as a Perl variable. + + https://metacpan.org/release/Sys-Mmap + +comment "perl-sys-mmap needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-sys-mmap/perl-sys-mmap.hash b/package/perl-sys-mmap/perl-sys-mmap.hash new file mode 100644 index 00000000..ce4d6735 --- /dev/null +++ b/package/perl-sys-mmap/perl-sys-mmap.hash @@ -0,0 +1,7 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 57172ce9b33c04de460b4e7ad68d2e9c Sys-Mmap-0.20.tar.gz +sha256 1820ce2c89f1ab7357644f8db0f49f142f54526250fb1e235db10aa80f15e2cf Sys-Mmap-0.20.tar.gz + +# computed by scancpan +sha256 4ac2afe465736476a06e52edcc78c72cfa0fa4d625916e58ab4f2af6c598709c Artistic +sha256 51c144e9a67644fa8eea0ea63dedb4e837587305b22f073eb5e279e39e7325a8 Copying diff --git a/package/perl-sys-mmap/perl-sys-mmap.mk b/package/perl-sys-mmap/perl-sys-mmap.mk new file mode 100644 index 00000000..5e081452 --- /dev/null +++ b/package/perl-sys-mmap/perl-sys-mmap.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-sys-mmap +# +################################################################################ + +PERL_SYS_MMAP_VERSION = 0.20 +PERL_SYS_MMAP_SOURCE = Sys-Mmap-$(PERL_SYS_MMAP_VERSION).tar.gz +PERL_SYS_MMAP_SITE = $(BR2_CPAN_MIRROR)/authors/id/T/TO/TODDR +PERL_SYS_MMAP_LICENSE = Artistic or GPL-1.0+ +PERL_SYS_MMAP_LICENSE_FILES = Artistic Copying +PERL_SYS_MMAP_DISTNAME = Sys-Mmap + +$(eval $(perl-package)) diff --git a/package/perl-time-parsedate/Config.in b/package/perl-time-parsedate/Config.in new file mode 100644 index 00000000..bd5957d9 --- /dev/null +++ b/package/perl-time-parsedate/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_TIME_PARSEDATE + bool "perl-time-parsedate" + help + Parse and format time values. + + https://metacpan.org/release/Time-ParseDate diff --git a/package/perl-time-parsedate/perl-time-parsedate.hash b/package/perl-time-parsedate/perl-time-parsedate.hash new file mode 100644 index 00000000..39ce6b93 --- /dev/null +++ b/package/perl-time-parsedate/perl-time-parsedate.hash @@ -0,0 +1,7 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 9143d075278857d21c77467d26f1603b Time-ParseDate-2015.103.tar.gz +sha256 2c1a06235bf811813caac9eaa9daa71af758667cdf7b082cb59863220fcaeed1 Time-ParseDate-2015.103.tar.gz + +# locally calculated +sha256 6d8de888d0662f75cfa3bf21b261741d5634ac9cdd8604d6173850546a3d40a9 lib/Time/JulianDay.pm +sha256 9ae411fbaf87add414e7357417032dfedce652c393643bc5cb5b7698041a1dca lib/Time/Timezone.pm diff --git a/package/perl-time-parsedate/perl-time-parsedate.mk b/package/perl-time-parsedate/perl-time-parsedate.mk new file mode 100644 index 00000000..cba8c7b6 --- /dev/null +++ b/package/perl-time-parsedate/perl-time-parsedate.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-time-parsedate +# +################################################################################ + +PERL_TIME_PARSEDATE_VERSION = 2015.103 +PERL_TIME_PARSEDATE_SOURCE = Time-ParseDate-$(PERL_TIME_PARSEDATE_VERSION).tar.gz +PERL_TIME_PARSEDATE_SITE = $(BR2_CPAN_MIRROR)/authors/id/M/MU/MUIR/modules +PERL_TIME_PARSEDATE_LICENSE = Time Parse Date License, Public Domain +PERL_TIME_PARSEDATE_LICENSE_FILES = lib/Time/JulianDay.pm lib/Time/Timezone.pm +PERL_TIME_PARSEDATE_DISTNAME = Time-ParseDate + +$(eval $(perl-package)) diff --git a/package/perl-timedate/Config.in b/package/perl-timedate/Config.in new file mode 100644 index 00000000..84ba8ff6 --- /dev/null +++ b/package/perl-timedate/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_TIMEDATE + bool "perl-timedate" + help + miscellaneous timezone manipulations routines. + + https://metacpan.org/release/TimeDate diff --git a/package/perl-timedate/perl-timedate.hash b/package/perl-timedate/perl-timedate.hash new file mode 100644 index 00000000..5ea4d49c --- /dev/null +++ b/package/perl-timedate/perl-timedate.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 5e5afe22c8d417417283d1f7f4572a57 TimeDate-2.33.tar.gz +sha256 c0b69c4b039de6f501b0d9f13ec58c86b040c1f7e9b27ef249651c143d605eb2 TimeDate-2.33.tar.gz + +# computed by scancpan +sha256 e72e67533eb3ddd705ae718898945e2f3bf3702e91e85bb67824575706bd5bf9 README diff --git a/package/perl-timedate/perl-timedate.mk b/package/perl-timedate/perl-timedate.mk new file mode 100644 index 00000000..89a82c04 --- /dev/null +++ b/package/perl-timedate/perl-timedate.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-timedate +# +################################################################################ + +PERL_TIMEDATE_VERSION = 2.33 +PERL_TIMEDATE_SOURCE = TimeDate-$(PERL_TIMEDATE_VERSION).tar.gz +PERL_TIMEDATE_SITE = $(BR2_CPAN_MIRROR)/authors/id/A/AT/ATOOMIC +PERL_TIMEDATE_LICENSE = Artistic or GPL-1.0+ +PERL_TIMEDATE_LICENSE_FILES = README +PERL_TIMEDATE_DISTNAME = TimeDate + +$(eval $(perl-package)) diff --git a/package/perl-try-tiny/Config.in b/package/perl-try-tiny/Config.in new file mode 100644 index 00000000..c4329dc1 --- /dev/null +++ b/package/perl-try-tiny/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_TRY_TINY + bool "perl-try-tiny" + help + Minimal try/catch with proper preservation of $@. + + https://github.com/p5sagit/Try-Tiny diff --git a/package/perl-try-tiny/perl-try-tiny.hash b/package/perl-try-tiny/perl-try-tiny.hash new file mode 100644 index 00000000..ed4d8ac7 --- /dev/null +++ b/package/perl-try-tiny/perl-try-tiny.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 eb362c3cb32c42f9f28de9ddb7f2ead6 Try-Tiny-0.30.tar.gz +sha256 da5bd0d5c903519bbf10bb9ba0cb7bcac0563882bcfe4503aee3fb143eddef6b Try-Tiny-0.30.tar.gz + +# computed by scancpan +sha256 f1864ede834871a1207fcd19838b6bd5e1ff0a8704f5cc523fc397126041ed0b LICENCE diff --git a/package/perl-try-tiny/perl-try-tiny.mk b/package/perl-try-tiny/perl-try-tiny.mk new file mode 100644 index 00000000..f13e2ee5 --- /dev/null +++ b/package/perl-try-tiny/perl-try-tiny.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-try-tiny +# +################################################################################ + +PERL_TRY_TINY_VERSION = 0.30 +PERL_TRY_TINY_SOURCE = Try-Tiny-$(PERL_TRY_TINY_VERSION).tar.gz +PERL_TRY_TINY_SITE = $(BR2_CPAN_MIRROR)/authors/id/E/ET/ETHER +PERL_TRY_TINY_LICENSE = MIT +PERL_TRY_TINY_LICENSE_FILES = LICENCE +PERL_TRY_TINY_DISTNAME = Try-Tiny + +$(eval $(perl-package)) diff --git a/package/perl-type-tiny/Config.in b/package/perl-type-tiny/Config.in new file mode 100644 index 00000000..5ee3db6f --- /dev/null +++ b/package/perl-type-tiny/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_TYPE_TINY + bool "perl-type-tiny" + select BR2_PACKAGE_PERL_EXPORTER_TINY # runtime + help + tiny, yet Moo(se)-compatible type constraint. + + https://typetiny.toby.ink/ diff --git a/package/perl-type-tiny/perl-type-tiny.hash b/package/perl-type-tiny/perl-type-tiny.hash new file mode 100644 index 00000000..2e2726e3 --- /dev/null +++ b/package/perl-type-tiny/perl-type-tiny.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 7feab0f3f99810290a3fdea8dbf24d7b Type-Tiny-1.012001.tar.gz +sha256 f907e5ad880fcc42fddb7e0de53c59429282abcbb3afb1a8651bf5ec6c42954d Type-Tiny-1.012001.tar.gz + +# computed by scancpan +sha256 34427749499bd6d6e5d206089bc03d76c647a1350f8b5f95ea628d2b6ff56e4c LICENSE diff --git a/package/perl-type-tiny/perl-type-tiny.mk b/package/perl-type-tiny/perl-type-tiny.mk new file mode 100644 index 00000000..2a475e53 --- /dev/null +++ b/package/perl-type-tiny/perl-type-tiny.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-type-tiny +# +################################################################################ + +PERL_TYPE_TINY_VERSION = 1.012001 +PERL_TYPE_TINY_SOURCE = Type-Tiny-$(PERL_TYPE_TINY_VERSION).tar.gz +PERL_TYPE_TINY_SITE = $(BR2_CPAN_MIRROR)/authors/id/T/TO/TOBYINK +PERL_TYPE_TINY_LICENSE = Artistic or GPL-1.0+ +PERL_TYPE_TINY_LICENSE_FILES = LICENSE +PERL_TYPE_TINY_DISTNAME = Type-Tiny + +$(eval $(perl-package)) diff --git a/package/perl-uri/Config.in b/package/perl-uri/Config.in new file mode 100644 index 00000000..3f51c517 --- /dev/null +++ b/package/perl-uri/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_URI + bool "perl-uri" + help + Uniform Resource Identifiers (absolute and relative). + + https://github.com/libwww-perl/URI diff --git a/package/perl-uri/perl-uri.hash b/package/perl-uri/perl-uri.hash new file mode 100644 index 00000000..c6cb7971 --- /dev/null +++ b/package/perl-uri/perl-uri.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 3dd176c522e9d39d88bcf1221fcd7ab2 URI-5.06.tar.gz +sha256 68555c576763769be43340459b9db7e159378edcd7db6d7518e16efdabdeb0c1 URI-5.06.tar.gz + +# computed by scancpan +sha256 65cd6f88516a30f56fd4e0080fb78ea69424fc89067470dc994e4abfba08664e LICENSE diff --git a/package/perl-uri/perl-uri.mk b/package/perl-uri/perl-uri.mk new file mode 100644 index 00000000..6eccb1b9 --- /dev/null +++ b/package/perl-uri/perl-uri.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-uri +# +################################################################################ + +PERL_URI_VERSION = 5.06 +PERL_URI_SOURCE = URI-$(PERL_URI_VERSION).tar.gz +PERL_URI_SITE = $(BR2_CPAN_MIRROR)/authors/id/O/OA/OALDERS +PERL_URI_LICENSE = Artistic or GPL-1.0+ +PERL_URI_LICENSE_FILES = LICENSE +PERL_URI_DISTNAME = URI + +$(eval $(perl-package)) diff --git a/package/perl-www-form-urlencoded/Config.in b/package/perl-www-form-urlencoded/Config.in new file mode 100644 index 00000000..67759c8f --- /dev/null +++ b/package/perl-www-form-urlencoded/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_WWW_FORM_URLENCODED + bool "perl-www-form-urlencoded" + help + parser and builder for application/x-www-form-urlencoded. + + https://github.com/kazeburo/WWW-Form-UrlEncoded diff --git a/package/perl-www-form-urlencoded/perl-www-form-urlencoded.hash b/package/perl-www-form-urlencoded/perl-www-form-urlencoded.hash new file mode 100644 index 00000000..c4ed4889 --- /dev/null +++ b/package/perl-www-form-urlencoded/perl-www-form-urlencoded.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 cbe0e1c3ee54738d900c739ea348efda WWW-Form-UrlEncoded-0.26.tar.gz +sha256 c0480b5f1f15b71163ec327b8e7842298f0cb3ace97e63d7034af1e94a2d90f4 WWW-Form-UrlEncoded-0.26.tar.gz + +# computed by scancpan +sha256 79c2a066104e71602785fd815c5aea6f7db78c19451d68521380083f9c2a8805 LICENSE diff --git a/package/perl-www-form-urlencoded/perl-www-form-urlencoded.mk b/package/perl-www-form-urlencoded/perl-www-form-urlencoded.mk new file mode 100644 index 00000000..a6f2edd5 --- /dev/null +++ b/package/perl-www-form-urlencoded/perl-www-form-urlencoded.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# perl-www-form-urlencoded +# +################################################################################ + +PERL_WWW_FORM_URLENCODED_VERSION = 0.26 +PERL_WWW_FORM_URLENCODED_SOURCE = WWW-Form-UrlEncoded-$(PERL_WWW_FORM_URLENCODED_VERSION).tar.gz +PERL_WWW_FORM_URLENCODED_SITE = $(BR2_CPAN_MIRROR)/authors/id/K/KA/KAZEBURO +PERL_WWW_FORM_URLENCODED_DEPENDENCIES = host-perl-module-build +PERL_WWW_FORM_URLENCODED_LICENSE = Artistic or GPL-1.0+ +PERL_WWW_FORM_URLENCODED_LICENSE_FILES = LICENSE +PERL_WWW_FORM_URLENCODED_DISTNAME = WWW-Form-UrlEncoded + +$(eval $(perl-package)) diff --git a/package/perl-www-robotrules/Config.in b/package/perl-www-robotrules/Config.in new file mode 100644 index 00000000..6ecf58af --- /dev/null +++ b/package/perl-www-robotrules/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PERL_WWW_ROBOTRULES + bool "perl-www-robotrules" + select BR2_PACKAGE_PERL_URI # runtime + help + database of robots.txt-derived permissions. + + https://metacpan.org/release/WWW-RobotRules diff --git a/package/perl-www-robotrules/perl-www-robotrules.hash b/package/perl-www-robotrules/perl-www-robotrules.hash new file mode 100644 index 00000000..41f2d7a1 --- /dev/null +++ b/package/perl-www-robotrules/perl-www-robotrules.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 b7186e8b8b3701e70c22abf430742403 WWW-RobotRules-6.02.tar.gz +sha256 46b502e7a288d559429891eeb5d979461dd3ecc6a5c491ead85d165b6e03a51e WWW-RobotRules-6.02.tar.gz + +# computed by scancpan +sha256 fa375c4f771b92fc076b6c66e19440a0fff51dacf489fecd94bf560091279e05 README diff --git a/package/perl-www-robotrules/perl-www-robotrules.mk b/package/perl-www-robotrules/perl-www-robotrules.mk new file mode 100644 index 00000000..052d9a67 --- /dev/null +++ b/package/perl-www-robotrules/perl-www-robotrules.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-www-robotrules +# +################################################################################ + +PERL_WWW_ROBOTRULES_VERSION = 6.02 +PERL_WWW_ROBOTRULES_SOURCE = WWW-RobotRules-$(PERL_WWW_ROBOTRULES_VERSION).tar.gz +PERL_WWW_ROBOTRULES_SITE = $(BR2_CPAN_MIRROR)/authors/id/G/GA/GAAS +PERL_WWW_ROBOTRULES_LICENSE = Artistic or GPL-1.0+ +PERL_WWW_ROBOTRULES_LICENSE_FILES = README +PERL_WWW_ROBOTRULES_DISTNAME = WWW-RobotRules + +$(eval $(perl-package)) diff --git a/package/perl-x10/Config.in b/package/perl-x10/Config.in new file mode 100644 index 00000000..834ffefa --- /dev/null +++ b/package/perl-x10/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_PERL_X10 + bool "perl-x10" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_PERL_ASTRO_SUNTIME # runtime + select BR2_PACKAGE_PERL_DEVICE_SERIALPORT # runtime + select BR2_PACKAGE_PERL_TIME_PARSEDATE # runtime + help + creates a server used to receive events from an x10 client. + + https://metacpan.org/release/X10 + +comment "perl-x10 needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-x10/perl-x10.hash b/package/perl-x10/perl-x10.hash new file mode 100644 index 00000000..5411390e --- /dev/null +++ b/package/perl-x10/perl-x10.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 20dcca2dfb978bfed3043276aa3481e5 X10-0.04.tar.gz +sha256 3dcee9d95614b2db70de608e933d42817f93fccd5b1f2f782b0846af487d9134 X10-0.04.tar.gz + +# computed by scancpan +sha256 e6f320afa82517d663be348dd2515ecb1454a7c851ba5590f13aca01d219be80 README diff --git a/package/perl-x10/perl-x10.mk b/package/perl-x10/perl-x10.mk new file mode 100644 index 00000000..4c90be65 --- /dev/null +++ b/package/perl-x10/perl-x10.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-x10 +# +################################################################################ + +PERL_X10_VERSION = 0.04 +PERL_X10_SOURCE = X10-$(PERL_X10_VERSION).tar.gz +PERL_X10_SITE = $(BR2_CPAN_MIRROR)/authors/id/R/RO/ROBF +PERL_X10_LICENSE = GPL-3.0 +PERL_X10_LICENSE_FILES = README +PERL_X10_DISTNAME = X10 + +$(eval $(perl-package)) diff --git a/package/perl-xml-libxml/0001-Makefile-PL.patch b/package/perl-xml-libxml/0001-Makefile-PL.patch new file mode 100644 index 00000000..e043c6d2 --- /dev/null +++ b/package/perl-xml-libxml/0001-Makefile-PL.patch @@ -0,0 +1,18 @@ +fake check_lib for cross-compilation + +Signed-off-by: Francois Perrad + +Index: b/Makefile.PL +=================================================================== +--- a/Makefile.PL ++++ b/Makefile.PL +@@ -88,8 +88,7 @@ + # -------------------------------------------------------------------------- # + # -------------------------------------------------------------------------- # + +-use lib qw(inc); +-use Devel::CheckLib; ++sub check_lib { return 1; } + + # Prompt the user here for any paths and other configuration + diff --git a/package/perl-xml-libxml/Config.in b/package/perl-xml-libxml/Config.in new file mode 100644 index 00000000..ce0a4783 --- /dev/null +++ b/package/perl-xml-libxml/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_PERL_XML_LIBXML + bool "perl-xml-libxml" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_PERL_XML_NAMESPACESUPPORT # runtime + select BR2_PACKAGE_PERL_XML_SAX # runtime + select BR2_PACKAGE_PERL_XML_SAX_BASE # runtime + help + Interface to Gnome libxml2 xml parsing and DOM library. + + https://github.com/shlomif/perl-XML-LibXML + +comment "perl-xml-libxml needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/perl-xml-libxml/perl-xml-libxml.hash b/package/perl-xml-libxml/perl-xml-libxml.hash new file mode 100644 index 00000000..4842f4fe --- /dev/null +++ b/package/perl-xml-libxml/perl-xml-libxml.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 dce687dd8b7e82d1c359fd74b1852f64 XML-LibXML-2.0134.tar.gz +sha256 f0bca4d0c2da35d879fee4cd13f352014186cedab27ab5e191f39b5d7d4f46cf XML-LibXML-2.0134.tar.gz + +# computed by scancpan +sha256 5046a7ec515cc1542beafdf2eadeeff24cc221fc3fde9913dd144fd263ae6100 LICENSE diff --git a/package/perl-xml-libxml/perl-xml-libxml.mk b/package/perl-xml-libxml/perl-xml-libxml.mk new file mode 100644 index 00000000..9b563e29 --- /dev/null +++ b/package/perl-xml-libxml/perl-xml-libxml.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# perl-xml-libxml +# +################################################################################ + +PERL_XML_LIBXML_VERSION = 2.0134 +PERL_XML_LIBXML_SOURCE = XML-LibXML-$(PERL_XML_LIBXML_VERSION).tar.gz +PERL_XML_LIBXML_SITE = $(BR2_CPAN_MIRROR)/authors/id/S/SH/SHLOMIF +PERL_XML_LIBXML_DEPENDENCIES = zlib libxml2 +PERL_XML_LIBXML_LICENSE = Artistic or GPL-1.0+ +PERL_XML_LIBXML_LICENSE_FILES = LICENSE +PERL_XML_LIBXML_CPE_ID_VENDOR = xml-libxml_project +PERL_XML_LIBXML_CPE_ID_PRODUCT = xml-libxml +PERL_XML_LIBXML_DISTNAME = XML-LibXML + +PERL_XML_LIBXML_CONF_OPTS = \ + LIBS="-L $(STAGING_DIR)/usr/lib" \ + INC="-I $(STAGING_DIR)/usr/include/libxml2" \ + NO_THREADS + +$(eval $(perl-package)) diff --git a/package/perl-xml-namespacesupport/Config.in b/package/perl-xml-namespacesupport/Config.in new file mode 100644 index 00000000..dc1034d3 --- /dev/null +++ b/package/perl-xml-namespacesupport/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_XML_NAMESPACESUPPORT + bool "perl-xml-namespacesupport" + help + A simple generic namespace processor. + + https://github.com/perigrin/xml-namespacesupport diff --git a/package/perl-xml-namespacesupport/perl-xml-namespacesupport.hash b/package/perl-xml-namespacesupport/perl-xml-namespacesupport.hash new file mode 100644 index 00000000..e5a98ecf --- /dev/null +++ b/package/perl-xml-namespacesupport/perl-xml-namespacesupport.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 a8916c6d095bcf073e1108af02e78c97 XML-NamespaceSupport-1.12.tar.gz +sha256 47e995859f8dd0413aa3f22d350c4a62da652e854267aa0586ae544ae2bae5ef XML-NamespaceSupport-1.12.tar.gz + +# computed by scancpan +sha256 3fed787f0f9e1d74024ec7ae5f0f4736c693bcf263781da2054eb4bb1337e911 LICENSE diff --git a/package/perl-xml-namespacesupport/perl-xml-namespacesupport.mk b/package/perl-xml-namespacesupport/perl-xml-namespacesupport.mk new file mode 100644 index 00000000..c3c54da6 --- /dev/null +++ b/package/perl-xml-namespacesupport/perl-xml-namespacesupport.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-xml-namespacesupport +# +################################################################################ + +PERL_XML_NAMESPACESUPPORT_VERSION = 1.12 +PERL_XML_NAMESPACESUPPORT_SOURCE = XML-NamespaceSupport-$(PERL_XML_NAMESPACESUPPORT_VERSION).tar.gz +PERL_XML_NAMESPACESUPPORT_SITE = $(BR2_CPAN_MIRROR)/authors/id/P/PE/PERIGRIN +PERL_XML_NAMESPACESUPPORT_LICENSE = Artistic or GPL-1.0+ +PERL_XML_NAMESPACESUPPORT_LICENSE_FILES = LICENSE +PERL_XML_NAMESPACESUPPORT_DISTNAME = XML-NamespaceSupport + +$(eval $(perl-package)) diff --git a/package/perl-xml-sax-base/Config.in b/package/perl-xml-sax-base/Config.in new file mode 100644 index 00000000..03b344d2 --- /dev/null +++ b/package/perl-xml-sax-base/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PERL_XML_SAX_BASE + bool "perl-xml-sax-base" + help + Base class for SAX Drivers and Filters. + + https://metacpan.org/release/XML-SAX-Base diff --git a/package/perl-xml-sax-base/perl-xml-sax-base.hash b/package/perl-xml-sax-base/perl-xml-sax-base.hash new file mode 100644 index 00000000..1542922b --- /dev/null +++ b/package/perl-xml-sax-base/perl-xml-sax-base.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 ec347a14065dd7aec7d9fb181b2d7946 XML-SAX-Base-1.09.tar.gz +sha256 66cb355ba4ef47c10ca738bd35999723644386ac853abbeb5132841f5e8a2ad0 XML-SAX-Base-1.09.tar.gz + +# computed by scancpan +sha256 2a9aae56e13888493523ee9053689627e092aafcf2c5fb06f06df07260f91b42 README diff --git a/package/perl-xml-sax-base/perl-xml-sax-base.mk b/package/perl-xml-sax-base/perl-xml-sax-base.mk new file mode 100644 index 00000000..810a4604 --- /dev/null +++ b/package/perl-xml-sax-base/perl-xml-sax-base.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-xml-sax-base +# +################################################################################ + +PERL_XML_SAX_BASE_VERSION = 1.09 +PERL_XML_SAX_BASE_SOURCE = XML-SAX-Base-$(PERL_XML_SAX_BASE_VERSION).tar.gz +PERL_XML_SAX_BASE_SITE = $(BR2_CPAN_MIRROR)/authors/id/G/GR/GRANTM +PERL_XML_SAX_BASE_LICENSE = Artistic or GPL-1.0+ +PERL_XML_SAX_BASE_LICENSE_FILES = README +PERL_XML_SAX_BASE_DISTNAME = XML-SAX-Base + +$(eval $(perl-package)) diff --git a/package/perl-xml-sax/Config.in b/package/perl-xml-sax/Config.in new file mode 100644 index 00000000..4e603f3a --- /dev/null +++ b/package/perl-xml-sax/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PERL_XML_SAX + bool "perl-xml-sax" + select BR2_PACKAGE_PERL_XML_NAMESPACESUPPORT # runtime + select BR2_PACKAGE_PERL_XML_SAX_BASE # runtime + help + Simple API for XML. + + https://metacpan.org/release/XML-SAX diff --git a/package/perl-xml-sax/perl-xml-sax.hash b/package/perl-xml-sax/perl-xml-sax.hash new file mode 100644 index 00000000..df63047f --- /dev/null +++ b/package/perl-xml-sax/perl-xml-sax.hash @@ -0,0 +1,6 @@ +# retrieved by scancpan from http://cpan.metacpan.org/ +md5 b62e3754523695c7f5bbcafa3676a38d XML-SAX-1.02.tar.gz +sha256 4506c387043aa6a77b455f00f57409f3720aa7e553495ab2535263b4ed1ea12a XML-SAX-1.02.tar.gz + +# computed by scancpan +sha256 bf2fb225e77b46b8892ef2a8aa5efa92d65b176a870f42559d8b73b308a36509 LICENSE diff --git a/package/perl-xml-sax/perl-xml-sax.mk b/package/perl-xml-sax/perl-xml-sax.mk new file mode 100644 index 00000000..e8de01bc --- /dev/null +++ b/package/perl-xml-sax/perl-xml-sax.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# perl-xml-sax +# +################################################################################ + +PERL_XML_SAX_VERSION = 1.02 +PERL_XML_SAX_SOURCE = XML-SAX-$(PERL_XML_SAX_VERSION).tar.gz +PERL_XML_SAX_SITE = $(BR2_CPAN_MIRROR)/authors/id/G/GR/GRANTM +PERL_XML_SAX_LICENSE = Artistic or GPL-1.0+ +PERL_XML_SAX_LICENSE_FILES = LICENSE +PERL_XML_SAX_DISTNAME = XML-SAX + +$(eval $(perl-package)) diff --git a/package/perl/Config.in b/package/perl/Config.in new file mode 100644 index 00000000..0ead1c4a --- /dev/null +++ b/package/perl/Config.in @@ -0,0 +1,37 @@ +config BR2_PACKAGE_PERL + bool "perl" + depends on BR2_USE_MMU # fork() + help + Larry Wall's Practical Extraction and Report Language + An interpreted scripting language, known among some as + "Unix's Swiss Army Chainsaw". + + http://www.perl.org/ + +if BR2_PACKAGE_PERL + +config BR2_PACKAGE_PERL_MODULES + string "custom module selection" + help + List of space-separated perl modules (without .pm) to copy + to the rootfs. + + Examples: constant Getopt/Std Time/Local + + Module dependencies on external libraries are not automatic so + check your needs. + + Leave empty for all modules (as far as the external libraries + are available). + +config BR2_PACKAGE_PERL_THREADS + bool "thread support" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Enable use of threads in Perl scripts + + WARNING: The use of interpreter-based threads in Perl + is officially discouraged. + See https://perldoc.perl.org/threads.html#WARNING + +endif diff --git a/package/perl/perl.hash b/package/perl/perl.hash new file mode 100644 index 00000000..42b7cc66 --- /dev/null +++ b/package/perl/perl.hash @@ -0,0 +1,12 @@ +# Hashes from: https://www.cpan.org/src/5.0/perl-5.32.1.tar.xz.{md5,sha1,sha256}.txt +md5 7f104064b906ad8c7329ca5e409a32d7 perl-5.32.1.tar.xz +sha1 1fb4f710d139da1e1a3e1fa4eaba201fcaa8e18e perl-5.32.1.tar.xz +sha256 57cc47c735c8300a8ce2fa0643507b44c4ae59012bfdad0121313db639e02309 perl-5.32.1.tar.xz + +# Hashes from: https://github.com/arsv/perl-cross/releases/download/1.3.5/perl-cross-1.3.5.hash +sha256 91c66f6b2b99fccfd4fee14660b677380b0c98f9456359e91449798c2ad2ef25 perl-cross-1.3.5.tar.gz + +# Locally calculated +sha256 dd90d4f42e4dcadf5a7c09eea0189d93c7b37ae560c91f0f6d5233ed3b9292a2 Artistic +sha256 d77d235e41d54594865151f4751e835c5a82322b0e87ace266567c3391a4b912 Copying +sha256 df6ad59aefea68676c38325f25f6707f026ddde6c71291b2ca231b6247859907 README diff --git a/package/perl/perl.mk b/package/perl/perl.mk new file mode 100644 index 00000000..f661fef0 --- /dev/null +++ b/package/perl/perl.mk @@ -0,0 +1,126 @@ +################################################################################ +# +# perl +# +################################################################################ + +# When updating the version here, also update utils/scancpan +PERL_VERSION_MAJOR = 32 +PERL_VERSION = 5.$(PERL_VERSION_MAJOR).1 +PERL_SITE = https://www.cpan.org/src/5.0 +PERL_SOURCE = perl-$(PERL_VERSION).tar.xz +PERL_LICENSE = Artistic or GPL-1.0+ +PERL_LICENSE_FILES = Artistic Copying README +PERL_CPE_ID_VENDOR = perl +PERL_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) +PERL_INSTALL_STAGING = YES + +PERL_CROSS_VERSION = 1.3.5 +# DO NOT refactor with the github helper (the result is not the same) +PERL_CROSS_SITE = https://github.com/arsv/perl-cross/releases/download/$(PERL_CROSS_VERSION) +PERL_CROSS_SOURCE = perl-cross-$(PERL_CROSS_VERSION).tar.gz +PERL_EXTRA_DOWNLOADS = $(PERL_CROSS_SITE)/$(PERL_CROSS_SOURCE) + +# We use the perlcross hack to cross-compile perl. It should +# be extracted over the perl sources, so we don't define that +# as a separate package. Instead, it is downloaded and extracted +# together with perl +define PERL_CROSS_EXTRACT + $(call suitable-extractor,$(PERL_CROSS_SOURCE)) $(PERL_DL_DIR)/$(PERL_CROSS_SOURCE) | \ + $(TAR) --strip-components=1 -C $(@D) $(TAR_OPTIONS) - +endef +PERL_POST_EXTRACT_HOOKS += PERL_CROSS_EXTRACT + +# Even though perl is not an autotools-package, it uses config.sub and +# config.guess. Up-to-date versions of these files may be needed to build perl +# on newer host architectures, so we borrow the hook which updates them from the +# autotools infrastructure. +PERL_POST_PATCH_HOOKS += UPDATE_CONFIG_HOOK + +ifeq ($(BR2_PACKAGE_BERKELEYDB),y) +PERL_DEPENDENCIES += berkeleydb +endif +ifeq ($(BR2_PACKAGE_GDBM),y) +PERL_DEPENDENCIES += gdbm +endif + +# We have to override LD, because an external multilib toolchain ld is not +# wrapped to provide the required sysroot options. +PERL_CONF_OPTS = \ + --target=$(GNU_TARGET_NAME) \ + --target-tools-prefix=$(TARGET_CROSS) \ + --prefix=/usr \ + -Dld="$(TARGET_CC)" \ + -Dccflags="$(TARGET_CFLAGS)" \ + -Dldflags="$(TARGET_LDFLAGS) -lm $(TARGET_NLS_LIBS)" \ + -Dmydomain="" \ + -Dmyhostname="noname" \ + -Dmyuname="Buildroot $(BR2_VERSION_FULL)" \ + -Dosname=linux \ + -Dosvers=$(LINUX_VERSION) \ + -Dperladmin=root + +ifeq ($(shell expr $(PERL_VERSION_MAJOR) % 2), 1) +PERL_CONF_OPTS += -Dusedevel +endif + +ifeq ($(BR2_PACKAGE_PERL_THREADS),y) +PERL_CONF_OPTS += -Dusethreads +endif + +ifeq ($(BR2_STATIC_LIBS),y) +PERL_CONF_OPTS += --all-static --no-dynaloader +endif + +PERL_MODULES = $(call qstrip,$(BR2_PACKAGE_PERL_MODULES)) +ifneq ($(PERL_MODULES),) +PERL_CONF_OPTS += --only-mod=$(subst $(space),$(comma),$(PERL_MODULES)) +endif + +define PERL_CONFIGURE_CMDS + (cd $(@D); $(TARGET_MAKE_ENV) HOSTCC='$(HOSTCC_NOCCACHE)' \ + ./configure $(PERL_CONF_OPTS)) + $(SED) 's/UNKNOWN-/Buildroot $(subst /,\/,$(BR2_VERSION_FULL)) /' $(@D)/patchlevel.h +endef + +define PERL_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) -C $(@D) all +endef + +define PERL_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) -C $(@D) DESTDIR="$(STAGING_DIR)" install.perl install.sym +endef + +define PERL_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) -C $(@D) DESTDIR="$(TARGET_DIR)" install.perl install.sym +endef + +HOST_PERL_CONF_OPTS = \ + -des \ + -Dprefix="$(HOST_DIR)" \ + -Dcc="$(HOSTCC)" + +define HOST_PERL_CONFIGURE_CMDS + (cd $(@D); $(HOST_MAKE_ENV) HOSTCC='$(HOSTCC_NOCCACHE)' \ + ./Configure $(HOST_PERL_CONF_OPTS)) +endef + +define HOST_PERL_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define HOST_PERL_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) INSTALL_DEPENDENCE='' install +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) + +define PERL_FINALIZE_TARGET + rm -rf $(TARGET_DIR)/usr/lib/perl5/$(PERL_VERSION)/pod + rm -rf $(TARGET_DIR)/usr/lib/perl5/$(PERL_VERSION)/$(PERL_ARCHNAME)/CORE + find $(TARGET_DIR)/usr/lib/perl5/ -name 'extralibs.ld' -print0 | xargs -0 rm -f + find $(TARGET_DIR)/usr/lib/perl5/ -name '*.bs' -print0 | xargs -0 rm -f + find $(TARGET_DIR)/usr/lib/perl5/ -name '.packlist' -print0 | xargs -0 rm -f +endef +PERL_TARGET_FINALIZE_HOOKS += PERL_FINALIZE_TARGET diff --git a/package/phidgetwebservice/Config.in b/package/phidgetwebservice/Config.in new file mode 100644 index 00000000..b052f180 --- /dev/null +++ b/package/phidgetwebservice/Config.in @@ -0,0 +1,23 @@ +config BR2_PACKAGE_PHIDGETWEBSERVICE + bool "phidgetwebservice" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb, libphidget + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libphidget -> libusb + depends on !BR2_STATIC_LIBS # libphidget + select BR2_PACKAGE_LIBPHIDGET + help + phidgetwebservice (the Phidget WebService) provides an HTTP + front-end to the libphidget device control API. This + provides an alternative to the libphidget C linkage + interface for controlling locally attached Phidgets USB + devices and it also allows you to control Phidget USB + devices remotely when the host running the phidgetwebservice + has an exposed network interface. + + The phidgetwebservice client program uses the libphidget + HTTP functions to send commands to the phidgetwebservice. + + http://phidgets.com/ + +comment "phidgetwebservice needs a toolchain w/ threads, dynamic library, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/phidgetwebservice/phidgetwebservice.hash b/package/phidgetwebservice/phidgetwebservice.hash new file mode 100644 index 00000000..e369049c --- /dev/null +++ b/package/phidgetwebservice/phidgetwebservice.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 904af15ecd13ae4e807ed8af181e3a4521e59f8f3791be0aa4ceb1afdbf764a2 phidgetwebservice_2.1.8.20170607.tar.gz +sha256 ea8af5e789cb2d4e9b10bce3874982ade163b749b6bfbdb32e2df21c4d106de1 COPYING diff --git a/package/phidgetwebservice/phidgetwebservice.mk b/package/phidgetwebservice/phidgetwebservice.mk new file mode 100644 index 00000000..bdcc388b --- /dev/null +++ b/package/phidgetwebservice/phidgetwebservice.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# phidgetwebservice +# +################################################################################ + +PHIDGETWEBSERVICE_VERSION = 2.1.8.20170607 +PHIDGETWEBSERVICE_SOURCE = phidgetwebservice_$(PHIDGETWEBSERVICE_VERSION).tar.gz +PHIDGETWEBSERVICE_SITE = http://www.phidgets.com/downloads/libraries +PHIDGETWEBSERVICE_DEPENDENCIES = libphidget +PHIDGETWEBSERVICE_LICENSE = LGPL-3.0 +PHIDGETWEBSERVICE_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/php-amqp/Config.in b/package/php-amqp/Config.in new file mode 100644 index 00000000..48fff91d --- /dev/null +++ b/package/php-amqp/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PHP_AMQP + bool "php-amqp" + depends on BR2_TOOLCHAIN_HAS_THREADS # rabbitmq-c + select BR2_PACKAGE_OPENSSL # rabbitmq-c: amqp_ssl_socket.h + select BR2_PACKAGE_RABBITMQ_C + help + Communicate with any AMQP compliant server. + + http://pecl.php.net/package/amqp + +comment "php-amqp needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/php-amqp/php-amqp.hash b/package/php-amqp/php-amqp.hash new file mode 100644 index 00000000..c061efab --- /dev/null +++ b/package/php-amqp/php-amqp.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 b66b8b8264749cb7a69ae4d09665dad1559b6c4f01430206c8e4187bcd8c782d amqp-1.9.4.tgz +sha256 ecd004e9ae3fcf54896b562d5e8008e36041f2620076effd58e5f4187299cee8 LICENSE diff --git a/package/php-amqp/php-amqp.mk b/package/php-amqp/php-amqp.mk new file mode 100644 index 00000000..c808ecdb --- /dev/null +++ b/package/php-amqp/php-amqp.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# php-amqp +# +################################################################################ + +PHP_AMQP_VERSION = 1.9.4 +PHP_AMQP_SOURCE = amqp-$(PHP_AMQP_VERSION).tgz +PHP_AMQP_SITE = https://pecl.php.net/get +PHP_AMQP_CONF_OPTS = --with-php-config=$(STAGING_DIR)/usr/bin/php-config \ + --with-amqp=$(STAGING_DIR)/usr +# phpize does the autoconf magic +PHP_AMQP_DEPENDENCIES = rabbitmq-c php host-autoconf +PHP_AMQP_LICENSE = PHP-3.01 +PHP_AMQP_LICENSE_FILES = LICENSE + +define PHP_AMQP_PHPIZE + (cd $(@D); \ + PHP_AUTOCONF=$(HOST_DIR)/bin/autoconf \ + PHP_AUTOHEADER=$(HOST_DIR)/bin/autoheader \ + $(STAGING_DIR)/usr/bin/phpize) +endef + +PHP_AMQP_PRE_CONFIGURE_HOOKS += PHP_AMQP_PHPIZE + +$(eval $(autotools-package)) diff --git a/package/php-geoip/Config.in b/package/php-geoip/Config.in new file mode 100644 index 00000000..35c6c1c3 --- /dev/null +++ b/package/php-geoip/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PHP_GEOIP + bool "php-geoip" + select BR2_PACKAGE_GEOIP + help + PHP GeoIP-based IP address mapper to geographical places. + + http://pecl.php.net/package/geoip diff --git a/package/php-geoip/php-geoip.hash b/package/php-geoip/php-geoip.hash new file mode 100644 index 00000000..8c99d8ba --- /dev/null +++ b/package/php-geoip/php-geoip.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 b2d05c03019d46135c249b5a7fa0dbd43ca5ee98aea8ed807bc7aa90ac8c0f06 geoip-1.1.1.tgz +sha256 93eb7fe81da0861e7013d12fe82cc8691a450822d889c2b0443a434be6c28ef4 geoip.c diff --git a/package/php-geoip/php-geoip.mk b/package/php-geoip/php-geoip.mk new file mode 100644 index 00000000..82ecba58 --- /dev/null +++ b/package/php-geoip/php-geoip.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# php-geoip +# +################################################################################ + +PHP_GEOIP_VERSION = 1.1.1 +PHP_GEOIP_SOURCE = geoip-$(PHP_GEOIP_VERSION).tgz +PHP_GEOIP_SITE = https://pecl.php.net/get +PHP_GEOIP_CONF_OPTS = --with-php-config=$(STAGING_DIR)/usr/bin/php-config \ + --with-geoip=$(STAGING_DIR)/usr +# phpize does the autoconf magic +PHP_GEOIP_DEPENDENCIES = geoip php host-autoconf +PHP_GEOIP_LICENSE = PHP-3.01 +PHP_GEOIP_LICENSE_FILES = geoip.c + +define PHP_GEOIP_PHPIZE + (cd $(@D); \ + PHP_AUTOCONF=$(HOST_DIR)/bin/autoconf \ + PHP_AUTOHEADER=$(HOST_DIR)/bin/autoheader \ + $(STAGING_DIR)/usr/bin/phpize) +endef + +PHP_GEOIP_PRE_CONFIGURE_HOOKS += PHP_GEOIP_PHPIZE + +$(eval $(autotools-package)) diff --git a/package/php-gnupg/Config.in b/package/php-gnupg/Config.in new file mode 100644 index 00000000..8cc8bb9f --- /dev/null +++ b/package/php-gnupg/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PHP_GNUPG + bool "php-gnupg" + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # ligpgme + depends on BR2_USE_MMU # libassuan + select BR2_PACKAGE_LIBGPGME + help + PHP wrapper around the gpgme library. + + http://pecl.php.net/package/gnupg diff --git a/package/php-gnupg/php-gnupg.hash b/package/php-gnupg/php-gnupg.hash new file mode 100644 index 00000000..8d142cda --- /dev/null +++ b/package/php-gnupg/php-gnupg.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 35e16bee11345a7d6bf57bea3cadf45e371ad1ed4e0218b0c06f6f637e4e1772 gnupg-1.4.0.tgz +sha256 da1136d4d9326317cbd320dadddf7e9b4b4edffd973eb083cb7b9754fb6a15d9 LICENSE diff --git a/package/php-gnupg/php-gnupg.mk b/package/php-gnupg/php-gnupg.mk new file mode 100644 index 00000000..ae0a7811 --- /dev/null +++ b/package/php-gnupg/php-gnupg.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# php-gnupg +# +################################################################################ + +PHP_GNUPG_VERSION = 1.4.0 +PHP_GNUPG_SOURCE = gnupg-$(PHP_GNUPG_VERSION).tgz +PHP_GNUPG_SITE = https://pecl.php.net/get +# phpize does the autoconf magic +PHP_GNUPG_DEPENDENCIES = php libgpgme host-autoconf host-pkgconf +PHP_GNUPG_CONF_OPTS = --with-php-config=$(STAGING_DIR)/usr/bin/php-config \ + --with-gnupg=$(STAGING_DIR)/usr/include --with-gpg=/usr/bin/gpg +PHP_GNUPG_LICENSE = BSD-2-Clause +PHP_GNUPG_LICENSE_FILES = LICENSE + +define PHP_GNUPG_PHPIZE + (cd $(@D); \ + PHP_AUTOCONF=$(HOST_DIR)/bin/autoconf \ + PHP_AUTOHEADER=$(HOST_DIR)/bin/autoheader \ + $(STAGING_DIR)/usr/bin/phpize) +endef + +PHP_GNUPG_PRE_CONFIGURE_HOOKS += PHP_GNUPG_PHPIZE + +$(eval $(autotools-package)) diff --git a/package/php-imagick/Config.in b/package/php-imagick/Config.in new file mode 100644 index 00000000..488e3758 --- /dev/null +++ b/package/php-imagick/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_PHP_IMAGICK + bool "php-imagick" + depends on BR2_USE_MMU # imagemagick + depends on BR2_TOOLCHAIN_HAS_THREADS # imagemagick + select BR2_PACKAGE_IMAGEMAGICK + help + PHP wrapper to the ImageMagick library. + + http://pecl.php.net/package/imagick + +comment "php-imagemagick needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/php-imagick/php-imagick.hash b/package/php-imagick/php-imagick.hash new file mode 100644 index 00000000..8b62ed1d --- /dev/null +++ b/package/php-imagick/php-imagick.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 1f3c5b5eeaa02800ad22f506cd100e8889a66b2ec937e192eaaa30d74562567c imagick-3.4.3.tgz +sha256 b6e00df9cb3b91977c0d64a7c4db48cb6f5041f6eeda6583c236775f70a35b78 LICENSE diff --git a/package/php-imagick/php-imagick.mk b/package/php-imagick/php-imagick.mk new file mode 100644 index 00000000..6fb43de0 --- /dev/null +++ b/package/php-imagick/php-imagick.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# php-imagick +# +################################################################################ + +PHP_IMAGICK_VERSION = 3.4.3 +PHP_IMAGICK_SOURCE = imagick-$(PHP_IMAGICK_VERSION).tgz +PHP_IMAGICK_SITE = http://pecl.php.net/get +PHP_IMAGICK_CONF_OPTS = --with-php-config=$(STAGING_DIR)/usr/bin/php-config \ + --with-imagick=$(STAGING_DIR)/usr +# phpize does the autoconf magic +PHP_IMAGICK_DEPENDENCIES = imagemagick php host-autoconf +PHP_IMAGICK_LICENSE = PHP-3.01 +PHP_IMAGICK_LICENSE_FILES = LICENSE +PHP_IMAGICK_CPE_ID_VENDOR = php +PHP_IMAGICK_CPE_ID_PRODUCT = imagick + +define PHP_IMAGICK_PHPIZE + (cd $(@D); \ + PHP_AUTOCONF=$(HOST_DIR)/bin/autoconf \ + PHP_AUTOHEADER=$(HOST_DIR)/bin/autoheader \ + $(STAGING_DIR)/usr/bin/phpize) +endef + +PHP_IMAGICK_PRE_CONFIGURE_HOOKS += PHP_IMAGICK_PHPIZE + +$(eval $(autotools-package)) diff --git a/package/php-memcached/Config.in b/package/php-memcached/Config.in new file mode 100644 index 00000000..cd97c152 --- /dev/null +++ b/package/php-memcached/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_PHP_MEMCACHED + bool "php-memcached" + depends on BR2_INSTALL_LIBSTDCPP # libmemcached + depends on BR2_TOOLCHAIN_HAS_THREADS # libmemcached + select BR2_PACKAGE_PHP_EXT_SESSION + select BR2_PACKAGE_LIBMEMCACHED + select BR2_PACKAGE_ZLIB + help + PHP extension for interfacing with memcached via + libmemcached library. + + http://pecl.php.net/package/memcached + +comment "php-memcached needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/php-memcached/php-memcached.hash b/package/php-memcached/php-memcached.hash new file mode 100644 index 00000000..dd294f46 --- /dev/null +++ b/package/php-memcached/php-memcached.hash @@ -0,0 +1,5 @@ +# Locally calculated +sha256 20786213ff92cd7ebdb0d0ac10dde1e9580a2f84296618b666654fd76ea307d4 memcached-3.1.3.tgz +sha256 24e8e3a9529204ead9422fa17cf3ddd75d292a8763b87fdb20591964f2e6ebe0 LICENSE +sha256 a453a7a272fbd24105b39959f76996d50dad80b22d1c310f6c67f74f62ae4054 fastlz/LICENSE +sha256 bba8cb50c660842c5ca459c5004395bdef8f01c1b64f97a9978f1053f173cb82 g_fmt.h diff --git a/package/php-memcached/php-memcached.mk b/package/php-memcached/php-memcached.mk new file mode 100644 index 00000000..4607d099 --- /dev/null +++ b/package/php-memcached/php-memcached.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# php-memcached +# +################################################################################ + +PHP_MEMCACHED_VERSION = 3.1.3 +PHP_MEMCACHED_SOURCE = memcached-$(PHP_MEMCACHED_VERSION).tgz +PHP_MEMCACHED_SITE = https://pecl.php.net/get +PHP_MEMCACHED_CONF_OPTS = --with-php-config=$(STAGING_DIR)/usr/bin/php-config \ + --disable-memcached-sasl \ + --with-libmemcached-dir=$(STAGING_DIR)/usr \ + --with-zlib-dir=$(STAGING_DIR)/usr +# phpize does the autoconf magic +PHP_MEMCACHED_DEPENDENCIES = libmemcached php zlib host-autoconf host-pkgconf +PHP_MEMCACHED_LICENSE = PHP-3.01, MIT (fastlz), ISC-like (g_fmt.c, g_fmt.h) +PHP_MEMCACHED_LICENSE_FILES = LICENSE fastlz/LICENSE g_fmt.h + +define PHP_MEMCACHED_PHPIZE + (cd $(@D); \ + PHP_AUTOCONF=$(HOST_DIR)/bin/autoconf \ + PHP_AUTOHEADER=$(HOST_DIR)/bin/autoheader \ + $(STAGING_DIR)/usr/bin/phpize) +endef + +PHP_MEMCACHED_PRE_CONFIGURE_HOOKS += PHP_MEMCACHED_PHPIZE + +$(eval $(autotools-package)) diff --git a/package/php-ssh2/0001-fix-php_url-fields-usage-for-PHP-7-3.patch b/package/php-ssh2/0001-fix-php_url-fields-usage-for-PHP-7-3.patch new file mode 100644 index 00000000..afc5de99 --- /dev/null +++ b/package/php-ssh2/0001-fix-php_url-fields-usage-for-PHP-7-3.patch @@ -0,0 +1,302 @@ +From a8835aab2c15e794fce13bd927295719e384ad2d Mon Sep 17 00:00:00 2001 +From: Remi Collet +Date: Thu, 28 Jun 2018 07:10:35 +0200 +Subject: [PATCH] fix php_url fields usage for PHP 7.3 + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/php/pecl-networking-ssh2/commit/a8835aab2c15e794fce13bd927295719e384ad2d] +--- + php_ssh2.h | 8 +++++++ + ssh2_fopen_wrappers.c | 55 +++++++++++++++++++++++++++---------------- + ssh2_sftp.c | 20 ++++++++-------- + 3 files changed, 53 insertions(+), 30 deletions(-) + +diff --git a/php_ssh2.h b/php_ssh2.h +index 734b795..d010ff9 100644 +--- a/php_ssh2.h ++++ b/php_ssh2.h +@@ -166,6 +166,14 @@ extern php_stream_wrapper php_ssh2_sftp_wrapper; + extern int le_ssh2_session; + extern int le_ssh2_sftp; + ++#if PHP_VERSION_ID < 70300 ++#define SSH2_URL_STR(a) (a) ++#define SSH2_URL_LEN(a) strlen(a) ++#else ++#define SSH2_URL_STR(a) ZSTR_VAL(a) ++#define SSH2_URL_LEN(a) ZSTR_LEN(a) ++#endif ++ + #endif /* PHP_SSH2_H */ + + /* +diff --git a/ssh2_fopen_wrappers.c b/ssh2_fopen_wrappers.c +index 2f96ca4..f2f3475 100644 +--- a/ssh2_fopen_wrappers.c ++++ b/ssh2_fopen_wrappers.c +@@ -215,7 +215,7 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre + php_url *resource; + zval *methods = NULL, *callbacks = NULL, zsession, *tmpzval; + zend_long resource_id; +- char *h, *s, *username = NULL, *password = NULL, *pubkey_file = NULL, *privkey_file = NULL; ++ char *h, *username = NULL, *password = NULL, *pubkey_file = NULL, *privkey_file = NULL; + int username_len = 0, password_len = 0; + + h = strstr(path, "Resource id #"); +@@ -233,13 +233,13 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre + return NULL; + } + +- if (strncmp(resource->scheme, "ssh2.", sizeof("ssh2.") - 1)) { ++ if (strncmp(SSH2_URL_STR(resource->scheme), "ssh2.", sizeof("ssh2.") - 1)) { + /* Not an ssh wrapper */ + php_url_free(resource); + return NULL; + } + +- if (strcmp(resource->scheme + sizeof("ssh2.") - 1, type)) { ++ if (strcmp(SSH2_URL_STR(resource->scheme) + sizeof("ssh2.") - 1, type)) { + /* Wrong ssh2. wrapper type */ + php_url_free(resource); + return NULL; +@@ -253,13 +253,27 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre + Find resource->path in the path string, then copy the entire string from the original path. + This includes ?query#fragment in the path string + */ ++// TODO copy seems uneeded ++#if PHP_VERSION_ID < 70300 ++ { ++ char * s; ++ + s = resource->path; + resource->path = estrdup(strstr(path, resource->path)); + efree(s); ++ } ++#else ++ { ++ zend_string *tmp; ++ ++ tmp = resource->path; ++ resource->path = zend_string_init(ZSTR_VAL(resource->path), ZSTR_LEN(resource->path), 0); ++ zend_string_release(tmp); ++ } ++#endif + + /* Look for a resource ID to reuse a session */ +- s = resource->host; +- if (is_numeric_string(s, strlen(s), &resource_id, NULL, 0) == IS_LONG) { ++ if (is_numeric_string(SSH2_URL_STR(resource->host), SSH2_URL_LEN(resource->host), &resource_id, NULL, 0) == IS_LONG) { + php_ssh2_sftp_data *sftp_data; + zval *zresource; + +@@ -309,7 +323,7 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre + } + + /* Fallback on finding it in the context */ +- if (resource->host[0] == 0 && context && psftp && ++ if (SSH2_URL_STR(resource->host)[0] == 0 && context && psftp && + (tmpzval = php_stream_context_get_option(context, "ssh2", "sftp")) != NULL && + Z_TYPE_P(tmpzval) == IS_RESOURCE) { + php_ssh2_sftp_data *sftp_data; +@@ -323,7 +337,7 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre + return resource; + } + } +- if (resource->host[0] == 0 && context && ++ if (SSH2_URL_STR(resource->host)[0] == 0 && context && + (tmpzval = php_stream_context_get_option(context, "ssh2", "session")) != NULL && + Z_TYPE_P(tmpzval) == IS_RESOURCE) { + session = (LIBSSH2_SESSION *)zend_fetch_resource(Z_RES_P(tmpzval), PHP_SSH2_SESSION_RES_NAME, le_ssh2_session); +@@ -399,19 +413,19 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre + } + + if (resource->user) { +- int len = strlen(resource->user); ++ int len = SSH2_URL_LEN(resource->user); + + if (len) { +- username = resource->user; ++ username = SSH2_URL_STR(resource->user); + username_len = len; + } + } + + if (resource->pass) { +- int len = strlen(resource->pass); ++ int len = SSH2_URL_LEN(resource->pass); + + if (len) { +- password = resource->pass; ++ password = SSH2_URL_STR(resource->pass); + password_len = len; + } + } +@@ -422,7 +436,7 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre + return NULL; + } + +- session = php_ssh2_session_connect(resource->host, resource->port, methods, callbacks); ++ session = php_ssh2_session_connect(SSH2_URL_STR(resource->host), resource->port, methods, callbacks); + if (!session) { + /* Unable to connect! */ + php_url_free(resource); +@@ -482,6 +496,7 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre + *psftp = sftp; + } + ++ //TODO may be undefined + *presource_id = Z_LVAL(zsession); + *psession = session; + +@@ -527,7 +542,7 @@ static php_stream *php_ssh2_shell_open(LIBSSH2_SESSION *session, int resource_id + zval_copy_ctor(©val); + convert_to_string(©val); + if (libssh2_channel_setenv_ex(channel, key->val, key->len, Z_STRVAL(copyval), Z_STRLEN(copyval))) { +- php_error_docref(NULL, E_WARNING, "Failed setting %s=%s on remote end", key, Z_STRVAL(copyval)); ++ php_error_docref(NULL, E_WARNING, "Failed setting %s=%s on remote end", ZSTR_VAL(key), Z_STRVAL(copyval)); + } + zval_dtor(©val); + } +@@ -631,7 +646,7 @@ static php_stream *php_ssh2_fopen_wrapper_shell(php_stream_wrapper *wrapper, con + zval_ptr_dtor(©val); + } + +- s = resource->path ? resource->path : NULL; ++ s = resource->path ? SSH2_URL_STR(resource->path) : NULL; + + if (s && s[0] == '/') { + /* Terminal type encoded into URL overrides context terminal type */ +@@ -766,7 +781,7 @@ static php_stream *php_ssh2_exec_command(LIBSSH2_SESSION *session, int resource_ + zval_copy_ctor(©val); + convert_to_string(©val); + if (libssh2_channel_setenv_ex(channel, key->val, key->len, Z_STRVAL(copyval), Z_STRLEN(copyval))) { +- php_error_docref(NULL, E_WARNING, "Failed setting %s=%s on remote end", key, Z_STRVAL(copyval)); ++ php_error_docref(NULL, E_WARNING, "Failed setting %s=%s on remote end", ZSTR_VAL(key), Z_STRVAL(copyval)); + } + zval_dtor(©val); + } +@@ -878,7 +893,7 @@ static php_stream *php_ssh2_fopen_wrapper_exec(php_stream_wrapper *wrapper, cons + zval_ptr_dtor(copyval); + } + +- stream = php_ssh2_exec_command(session, resource_id, resource->path + 1, terminal, terminal_len, environment, width, height, type); ++ stream = php_ssh2_exec_command(session, resource_id, SSH2_URL_STR(resource->path) + 1, terminal, terminal_len, environment, width, height, type); + if (!stream) { + // TODO Sean-Der + //zend_list_delete(resource_id); +@@ -1021,7 +1036,7 @@ static php_stream *php_ssh2_fopen_wrapper_scp(php_stream_wrapper *wrapper, const + return NULL; + } + +- stream = php_ssh2_scp_xfer(session, resource_id, resource->path); ++ stream = php_ssh2_scp_xfer(session, resource_id, SSH2_URL_STR(resource->path)); + if (!stream) { + //TODO Sean-Der + //zend_list_delete(resource_id); +@@ -1147,7 +1162,7 @@ PHP_FUNCTION(ssh2_scp_send) + char *error_msg = NULL; + + last_error = libssh2_session_last_error(session, &error_msg, NULL, 0); +- php_error_docref(NULL, E_WARNING, "Failure creating remote file: %s", error_msg); ++ php_error_docref(NULL, E_WARNING, "Failure creating remote file: %s (%d)", error_msg, last_error); + php_stream_close(local_file); + RETURN_FALSE; + } +@@ -1262,10 +1277,10 @@ static php_stream *php_ssh2_fopen_wrapper_tunnel(php_stream_wrapper *wrapper, co + return NULL; + } + +- if (resource->path && resource->path[0] == '/') { ++ if (resource->path && SSH2_URL_STR(resource->path)[0] == '/') { + char *colon; + +- host = resource->path + 1; ++ host = SSH2_URL_STR(resource->path) + 1; + if (*host == '[') { + /* IPv6 Encapsulated Format */ + host++; +diff --git a/ssh2_sftp.c b/ssh2_sftp.c +index 13f89f0..6332be8 100644 +--- a/ssh2_sftp.c ++++ b/ssh2_sftp.c +@@ -238,7 +238,7 @@ static php_stream *php_ssh2_sftp_stream_opener(php_stream_wrapper *wrapper, cons + + flags = php_ssh2_parse_fopen_modes((char *)mode); + +- handle = libssh2_sftp_open(sftp, resource->path, flags, perms); ++ handle = libssh2_sftp_open(sftp, SSH2_URL_STR(resource->path), flags, perms); + if (!handle) { + php_error_docref(NULL, E_WARNING, "Unable to open %s on remote host", filename); + php_url_free(resource); +@@ -341,7 +341,7 @@ static php_stream *php_ssh2_sftp_dirstream_opener(php_stream_wrapper *wrapper, c + return NULL; + } + +- handle = libssh2_sftp_opendir(sftp, resource->path); ++ handle = libssh2_sftp_opendir(sftp, SSH2_URL_STR(resource->path)); + if (!handle) { + php_error_docref(NULL, E_WARNING, "Unable to open %s on remote host", filename); + php_url_free(resource); +@@ -386,7 +386,7 @@ static int php_ssh2_sftp_urlstat(php_stream_wrapper *wrapper, const char *url, i + return -1; + } + +- if (libssh2_sftp_stat_ex(sftp, resource->path, strlen(resource->path), ++ if (libssh2_sftp_stat_ex(sftp, SSH2_URL_STR(resource->path), SSH2_URL_LEN(resource->path), + (flags & PHP_STREAM_URL_STAT_LINK) ? LIBSSH2_SFTP_LSTAT : LIBSSH2_SFTP_STAT, &attrs)) { + php_url_free(resource); + //zend_list_delete(sftp_rsrcid); +@@ -420,7 +420,7 @@ static int php_ssh2_sftp_unlink(php_stream_wrapper *wrapper, const char *url, in + return 0; + } + +- result = libssh2_sftp_unlink(sftp, resource->path); ++ result = libssh2_sftp_unlink(sftp, SSH2_URL_STR(resource->path)); + php_url_free(resource); + + //zend_list_delete(sftp_rsrcid); +@@ -462,7 +462,7 @@ static int php_ssh2_sftp_rename(php_stream_wrapper *wrapper, const char *url_fro + return 0; + } + +- result = libssh2_sftp_rename(sftp, resource->path, resource_to->path); ++ result = libssh2_sftp_rename(sftp, SSH2_URL_STR(resource->path), SSH2_URL_STR(resource_to->path)); + php_url_free(resource); + php_url_free(resource_to); + +@@ -493,13 +493,13 @@ static int php_ssh2_sftp_mkdir(php_stream_wrapper *wrapper, const char *url, int + + if (options & PHP_STREAM_MKDIR_RECURSIVE) { + /* Just attempt to make every directory, some will fail, but we only care about the last success/failure */ +- char *p = resource->path; ++ char *p = SSH2_URL_STR(resource->path); + while ((p = strchr(p + 1, '/'))) { +- libssh2_sftp_mkdir_ex(sftp, resource->path, p - resource->path, mode); ++ libssh2_sftp_mkdir_ex(sftp, SSH2_URL_STR(resource->path), p - SSH2_URL_STR(resource->path), mode); + } + } + +- result = libssh2_sftp_mkdir(sftp, resource->path, mode); ++ result = libssh2_sftp_mkdir(sftp, SSH2_URL_STR(resource->path), mode); + php_url_free(resource); + + //zend_list_delete(sftp_rsrcid); +@@ -527,7 +527,7 @@ static int php_ssh2_sftp_rmdir(php_stream_wrapper *wrapper, const char *url, int + return 0; + } + +- result = libssh2_sftp_rmdir(sftp, resource->path); ++ result = libssh2_sftp_rmdir(sftp, SSH2_URL_STR(resource->path)); + php_url_free(resource); + + //zend_list_delete(sftp_rsrcid); +@@ -836,7 +836,7 @@ PHP_FUNCTION(ssh2_sftp_readlink) + } + + if ((targ_len = libssh2_sftp_symlink_ex(data->sftp, link->val, link->len, targ, 8192, LIBSSH2_SFTP_READLINK)) < 0) { +- php_error_docref(NULL, E_WARNING, "Unable to read link '%s'", link); ++ php_error_docref(NULL, E_WARNING, "Unable to read link '%s'", ZSTR_VAL(link)); + RETURN_FALSE; + } + diff --git a/package/php-ssh2/0002-dstogov-Fixed-PHP7-port-Restored-commented-reference-counting.patch b/package/php-ssh2/0002-dstogov-Fixed-PHP7-port-Restored-commented-reference-counting.patch new file mode 100644 index 00000000..d6d62947 --- /dev/null +++ b/package/php-ssh2/0002-dstogov-Fixed-PHP7-port-Restored-commented-reference-counting.patch @@ -0,0 +1,746 @@ +From 073067ba96ac99ed5696d27f13ca6c8124986e74 Mon Sep 17 00:00:00 2001 +From: Jan-E +Date: Thu, 28 Jun 2018 08:43:48 +0200 +Subject: [PATCH] @dstogov Fixed PHP7 port. Restored commented reference + counting. + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/php/pecl-networking-ssh2/commit/073067ba96ac99ed5696d27f13ca6c8124986e74] +--- + php_ssh2.h | 14 ++--- + ssh2.c | 26 ++++----- + ssh2_fopen_wrappers.c | 129 ++++++++++++++++++------------------------ + ssh2_sftp.c | 59 +++++++++---------- + 4 files changed, 102 insertions(+), 126 deletions(-) + +diff --git a/php_ssh2.h b/php_ssh2.h +index d010ff9..2bbaa26 100644 +--- a/php_ssh2.h ++++ b/php_ssh2.h +@@ -73,14 +73,14 @@ typedef struct _php_ssh2_sftp_data { + LIBSSH2_SESSION *session; + LIBSSH2_SFTP *sftp; + +- int session_rsrcid; ++ zend_resource *session_rsrc; + } php_ssh2_sftp_data; + + typedef struct _php_ssh2_listener_data { + LIBSSH2_SESSION *session; + LIBSSH2_LISTENER *listener; + +- int session_rsrcid; ++ zend_resource *session_rsrc; + } php_ssh2_listener_data; + + #include "libssh2_publickey.h" +@@ -89,7 +89,7 @@ typedef struct _php_ssh2_pkey_subsys_data { + LIBSSH2_SESSION *session; + LIBSSH2_PUBLICKEY *pkey; + +- int session_rsrcid; ++ zend_resource *session_rsrc; + } php_ssh2_pkey_subsys_data; + + #define SSH2_FETCH_NONAUTHENTICATED_SESSION(session, zsession) \ +@@ -118,8 +118,8 @@ typedef struct _php_ssh2_channel_data { + char is_blocking; + long timeout; + +- /* Resource ID */ +- int session_rsrcid; ++ /* Resource */ ++ zend_resource *session_rsrc; + + /* Allow one stream to be closed while the other is kept open */ + unsigned char *refcount; +@@ -151,8 +151,8 @@ PHP_FUNCTION(ssh2_sftp_realpath); + LIBSSH2_SESSION *php_ssh2_session_connect(char *host, int port, zval *methods, zval *callbacks); + void php_ssh2_sftp_dtor(zend_resource *rsrc); + php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stream_context *context, +- LIBSSH2_SESSION **psession, int *presource_id, +- LIBSSH2_SFTP **psftp, int *psftp_rsrcid); ++ LIBSSH2_SESSION **psession, zend_resource **presource, ++ LIBSSH2_SFTP **psftp, zend_resource **psftp_rsrc); + + extern php_stream_ops php_ssh2_channel_stream_ops; + +diff --git a/ssh2.c b/ssh2.c +index e73867e..849766b 100644 +--- a/ssh2.c ++++ b/ssh2.c +@@ -772,9 +772,8 @@ PHP_FUNCTION(ssh2_forward_listen) + + data = emalloc(sizeof(php_ssh2_listener_data)); + data->session = session; +- data->session_rsrcid = Z_LVAL_P(zsession); +- //TODO Sean-Der +- //zend_list_addref(data->session_rsrcid); ++ data->session_rsrc = Z_RES_P(zsession); ++ Z_ADDREF_P(zsession); + data->listener = listener; + + RETURN_RES(zend_register_resource(data, le_ssh2_listener)); +@@ -810,7 +809,7 @@ PHP_FUNCTION(ssh2_forward_accept) + channel_data->channel = channel; + channel_data->streamid = 0; + channel_data->is_blocking = 0; +- channel_data->session_rsrcid = data->session_rsrcid; ++ channel_data->session_rsrc = data->session_rsrc; + channel_data->refcount = NULL; + + stream = php_stream_alloc(&php_ssh2_channel_stream_ops, channel_data, 0, "r+"); +@@ -820,8 +819,12 @@ PHP_FUNCTION(ssh2_forward_accept) + libssh2_channel_free(channel); + RETURN_FALSE; + } +- //TODO Sean-Der +- //zend_list_addref(channel_data->session_rsrcid); ++ ++#if PHP_VERSION_ID < 70300 ++ GC_REFCOUNT(channel_data->session_rsrc)++; ++#else ++ GC_ADDREF(channel_data->session_rsrc); ++#endif + + php_stream_to_zval(stream, return_value); + } +@@ -975,9 +978,8 @@ PHP_FUNCTION(ssh2_publickey_init) + + data = emalloc(sizeof(php_ssh2_pkey_subsys_data)); + data->session = session; +- data->session_rsrcid = Z_RES_P(zsession)->handle; +- //TODO Sean-Der +- //zend_list_addref(data->session_rsrcid); ++ data->session_rsrc = Z_RES_P(zsession); ++ Z_ADDREF_P(zsession); + data->pkey = pkey; + + RETURN_RES(zend_register_resource(data, le_ssh2_pkey_subsys)); +@@ -1280,8 +1282,7 @@ static void php_ssh2_listener_dtor(zend_resource *rsrc) + LIBSSH2_LISTENER *listener = data->listener; + + libssh2_channel_forward_cancel(listener); +- // TODO Sean-Der +- //zend_list_delete(data->session_rsrcid); ++ zend_list_delete(data->session_rsrc); + efree(data); + } + +@@ -1291,8 +1292,7 @@ static void php_ssh2_pkey_subsys_dtor(zend_resource *rsrc) + LIBSSH2_PUBLICKEY *pkey = data->pkey; + + libssh2_publickey_shutdown(pkey); +- // TODO Sean-Der +- //zend_list_delete(data->session_rsrcid); ++ zend_list_delete(data->session_rsrc); + efree(data); + } + +diff --git a/ssh2_fopen_wrappers.c b/ssh2_fopen_wrappers.c +index f2f3475..c4eb9dc 100644 +--- a/ssh2_fopen_wrappers.c ++++ b/ssh2_fopen_wrappers.c +@@ -47,11 +47,9 @@ static size_t php_ssh2_channel_stream_write(php_stream *stream, const char *buf, + php_ssh2_channel_data *abstract = (php_ssh2_channel_data*)stream->abstract; + size_t writestate; + LIBSSH2_SESSION *session; +- zval *zresource; + + libssh2_channel_set_blocking(abstract->channel, abstract->is_blocking); +- zresource = php_ssh2_zval_from_resource_handle(abstract->session_rsrcid); +- session = (LIBSSH2_SESSION *)zend_fetch_resource(Z_RES_P(zresource), PHP_SSH2_SESSION_RES_NAME, le_ssh2_session); ++ session = (LIBSSH2_SESSION *)zend_fetch_resource(abstract->session_rsrc, PHP_SSH2_SESSION_RES_NAME, le_ssh2_session); + + + +@@ -90,12 +88,10 @@ static size_t php_ssh2_channel_stream_read(php_stream *stream, char *buf, size_t + php_ssh2_channel_data *abstract = (php_ssh2_channel_data*)stream->abstract; + ssize_t readstate; + LIBSSH2_SESSION *session; +- zval *zresource; + + stream->eof = libssh2_channel_eof(abstract->channel); + libssh2_channel_set_blocking(abstract->channel, abstract->is_blocking); +- zresource = php_ssh2_zval_from_resource_handle(abstract->session_rsrcid); +- session = (LIBSSH2_SESSION *)zend_fetch_resource(Z_RES_P(zresource), PHP_SSH2_SESSION_RES_NAME, le_ssh2_session); ++ session = (LIBSSH2_SESSION *)zend_fetch_resource(abstract->session_rsrc, PHP_SSH2_SESSION_RES_NAME, le_ssh2_session); + + #ifdef PHP_SSH2_SESSION_TIMEOUT + if (abstract->is_blocking) { +@@ -137,8 +133,7 @@ static int php_ssh2_channel_stream_close(php_stream *stream, int close_handle) + } + libssh2_channel_eof(abstract->channel); + libssh2_channel_free(abstract->channel); +- //TODO Sean-Der +- //zend_list_delete(abstract->session_rsrcid); ++ zend_list_delete(abstract->session_rsrc); + } + efree(abstract); + +@@ -207,8 +202,8 @@ php_stream_ops php_ssh2_channel_stream_ops = { + * Parse an ssh2.*:// path + */ + php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stream_context *context, +- LIBSSH2_SESSION **psession, int *presource_id, +- LIBSSH2_SFTP **psftp, int *psftp_rsrcid) ++ LIBSSH2_SESSION **psession, zend_resource **presource, ++ LIBSSH2_SFTP **psftp, zend_resource **psftp_rsrc) + { + php_ssh2_sftp_data *sftp_data = NULL; + LIBSSH2_SESSION *session; +@@ -283,11 +278,10 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre + sftp_data = (php_ssh2_sftp_data *)zend_fetch_resource(Z_RES_P(zresource), PHP_SSH2_SFTP_RES_NAME, le_ssh2_sftp); + if (sftp_data) { + /* Want the sftp layer */ +- //TODO Sean-Der +- //zend_list_addref(resource_id); +- *psftp_rsrcid = resource_id; ++ Z_ADDREF_P(zresource); ++ *psftp_rsrc = Z_RES_P(zresource); + *psftp = sftp_data->sftp; +- *presource_id = sftp_data->session_rsrcid; ++ *presource = sftp_data->session_rsrc; + *psession = sftp_data->session; + return resource; + } +@@ -305,18 +299,16 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre + sftp_data = emalloc(sizeof(php_ssh2_sftp_data)); + sftp_data->sftp = sftp; + sftp_data->session = session; +- sftp_data->session_rsrcid = resource_id; +- //TODO Sean-Der +- //zend_list_addref(resource_id); +- *psftp_rsrcid = zend_register_resource(sftp_data, le_ssh2_sftp)->handle; ++ sftp_data->session_rsrc = Z_RES_P(zresource); ++ Z_ADDREF_P(zresource); ++ *psftp_rsrc = zend_register_resource(sftp_data, le_ssh2_sftp); + *psftp = sftp; +- *presource_id = resource_id; ++ *presource = Z_RES_P(zresource); + *psession = session; + return resource; + } +- //TODO Sean-Der +- //zend_list_addref(resource_id); +- *presource_id = resource_id; ++ Z_ADDREF_P(zresource); ++ *presource = Z_RES_P(zresource); + *psession = session; + return resource; + } +@@ -330,9 +322,9 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre + sftp_data = (php_ssh2_sftp_data *)zend_fetch_resource(Z_RES_P(tmpzval), PHP_SSH2_SFTP_RES_NAME, le_ssh2_sftp); + if (sftp_data) { + Z_ADDREF_P(tmpzval); +- *psftp_rsrcid = Z_LVAL_P(tmpzval); ++ *psftp_rsrc = Z_RES_P(tmpzval); + *psftp = sftp_data->sftp; +- *presource_id = sftp_data->session_rsrcid; ++ *presource = sftp_data->session_rsrc; + *psession = sftp_data->session; + return resource; + } +@@ -354,17 +346,17 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre + sftp_data = emalloc(sizeof(php_ssh2_sftp_data)); + sftp_data->sftp = sftp; + sftp_data->session = session; +- sftp_data->session_rsrcid = Z_LVAL_P(tmpzval); ++ sftp_data->session_rsrc = Z_RES_P(tmpzval); + Z_ADDREF_P(tmpzval); +- *psftp_rsrcid = zend_register_resource(sftp_data, le_ssh2_sftp)->handle; ++ *psftp_rsrc = zend_register_resource(sftp_data, le_ssh2_sftp); + *psftp = sftp; +- *presource_id = Z_RES_P(tmpzval)->handle; ++ *presource = Z_RES_P(tmpzval); + *psession = session; + return resource; + } + Z_ADDREF_P(tmpzval); + *psession = session; +- *presource_id = Z_LVAL_P(tmpzval); ++ *presource = Z_RES_P(tmpzval); + return resource; + } + } +@@ -465,8 +457,7 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre + + /* Auth failure */ + php_url_free(resource); +- //TODO Sean-Der +- //zend_list_delete(Z_LVAL(zsession)); ++ zend_list_delete(Z_RES(zsession)); + return NULL; + + session_authed: +@@ -480,24 +471,22 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre + sftp = libssh2_sftp_init(session); + if (!sftp) { + php_url_free(resource); +- //TODO Sean-Der +- //zend_list_delete(Z_LVAL(zsession)); ++ zend_list_delete(Z_RES(zsession)); + return NULL; + } + + sftp_data = emalloc(sizeof(php_ssh2_sftp_data)); + sftp_data->session = session; + sftp_data->sftp = sftp; +- sftp_data->session_rsrcid = Z_LVAL(zsession); ++ sftp_data->session_rsrc = Z_RES(zsession); + + //TODO Sean-Der + //ZEND_REGISTER_RESOURCE(sftp_data, le_ssh2_sftp); +- *psftp_rsrcid = Z_LVAL(zsftp); ++ *psftp_rsrc = Z_RES(zsftp); + *psftp = sftp; + } + +- //TODO may be undefined +- *presource_id = Z_LVAL(zsession); ++ *presource = Z_RES(zsession); + *psession = session; + + return resource; +@@ -511,7 +500,7 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre + /* {{{ php_ssh2_shell_open + * Make a stream from a session + */ +-static php_stream *php_ssh2_shell_open(LIBSSH2_SESSION *session, int resource_id, char *term, int term_len, zval *environment, long width, long height, long type) ++static php_stream *php_ssh2_shell_open(LIBSSH2_SESSION *session, zend_resource *resource, char *term, int term_len, zval *environment, long width, long height, long type) + { + LIBSSH2_CHANNEL *channel; + php_ssh2_channel_data *channel_data; +@@ -578,7 +567,7 @@ static php_stream *php_ssh2_shell_open(LIBSSH2_SESSION *session, int resource_id + channel_data->streamid = 0; + channel_data->is_blocking = 0; + channel_data->timeout = 0; +- channel_data->session_rsrcid = resource_id; ++ channel_data->session_rsrc = resource; + channel_data->refcount = NULL; + + stream = php_stream_alloc(&php_ssh2_channel_stream_ops, channel_data, 0, "r+"); +@@ -599,11 +588,12 @@ static php_stream *php_ssh2_fopen_wrapper_shell(php_stream_wrapper *wrapper, con + zend_long width = PHP_SSH2_DEFAULT_TERM_WIDTH; + zend_long height = PHP_SSH2_DEFAULT_TERM_HEIGHT; + zend_long type = PHP_SSH2_DEFAULT_TERM_UNIT; +- int resource_id = 0, terminal_len = sizeof(PHP_SSH2_DEFAULT_TERMINAL) - 1; ++ zend_resource *rsrc = NULL; ++ int terminal_len = sizeof(PHP_SSH2_DEFAULT_TERMINAL) - 1; + php_url *resource; + char *s; + +- resource = php_ssh2_fopen_wraper_parse_path(path, "shell", context, &session, &resource_id, NULL, NULL); ++ resource = php_ssh2_fopen_wraper_parse_path(path, "shell", context, &session, &rsrc, NULL, NULL); + if (!resource || !session) { + return NULL; + } +@@ -677,10 +667,9 @@ static php_stream *php_ssh2_fopen_wrapper_shell(php_stream_wrapper *wrapper, con + /* TODO: Accept resolution and environment vars as URL style parameters + * ssh2.shell://hostorresource/terminal/99x99c?envvar=envval&envvar=envval.... + */ +- stream = php_ssh2_shell_open(session, resource_id, terminal, terminal_len, environment, width, height, type); ++ stream = php_ssh2_shell_open(session, rsrc, terminal, terminal_len, environment, width, height, type); + if (!stream) { +- //TODO Sean-Der +- //zend_list_delete(resource_id); ++ zend_list_delete(rsrc); + } + php_url_free(resource); + +@@ -730,7 +719,7 @@ PHP_FUNCTION(ssh2_shell) + + SSH2_FETCH_AUTHENTICATED_SESSION(session, zsession); + +- stream = php_ssh2_shell_open(session, Z_RES_P(zsession)->handle, term, term_len, environment, width, height, type); ++ stream = php_ssh2_shell_open(session, Z_RES_P(zsession), term, term_len, environment, width, height, type); + if (!stream) { + RETURN_FALSE; + } +@@ -749,7 +738,7 @@ PHP_FUNCTION(ssh2_shell) + /* {{{ php_ssh2_exec_command + * Make a stream from a session + */ +-static php_stream *php_ssh2_exec_command(LIBSSH2_SESSION *session, int resource_id, char *command, char *term, int term_len, zval *environment, long width, long height, long type) ++static php_stream *php_ssh2_exec_command(LIBSSH2_SESSION *session, zend_resource *rsrc, char *command, char *term, int term_len, zval *environment, long width, long height, long type) + { + LIBSSH2_CHANNEL *channel; + php_ssh2_channel_data *channel_data; +@@ -819,7 +808,7 @@ static php_stream *php_ssh2_exec_command(LIBSSH2_SESSION *session, int resource_ + channel_data->streamid = 0; + channel_data->is_blocking = 0; + channel_data->timeout = 0; +- channel_data->session_rsrcid = resource_id; ++ channel_data->session_rsrc = rsrc; + channel_data->refcount = NULL; + + stream = php_stream_alloc(&php_ssh2_channel_stream_ops, channel_data, 0, "r+"); +@@ -836,7 +825,7 @@ static php_stream *php_ssh2_fopen_wrapper_exec(php_stream_wrapper *wrapper, cons + LIBSSH2_SESSION *session = NULL; + php_stream *stream; + zval *tmpzval, *environment = NULL; +- int resource_id = 0; ++ zend_resource *rsrc = NULL; + php_url *resource; + char *terminal = NULL; + int terminal_len = 0; +@@ -844,14 +833,13 @@ static php_stream *php_ssh2_fopen_wrapper_exec(php_stream_wrapper *wrapper, cons + long height = PHP_SSH2_DEFAULT_TERM_HEIGHT; + long type = PHP_SSH2_DEFAULT_TERM_UNIT; + +- resource = php_ssh2_fopen_wraper_parse_path(path, "exec", context, &session, &resource_id, NULL, NULL); ++ resource = php_ssh2_fopen_wraper_parse_path(path, "exec", context, &session, &rsrc, NULL, NULL); + if (!resource || !session) { + return NULL; + } + if (!resource->path) { + php_url_free(resource); +- //TODO Sean-Der +- //zend_list_delete(resource_id); ++ zend_list_delete(rsrc); + return NULL; + } + +@@ -893,10 +881,9 @@ static php_stream *php_ssh2_fopen_wrapper_exec(php_stream_wrapper *wrapper, cons + zval_ptr_dtor(copyval); + } + +- stream = php_ssh2_exec_command(session, resource_id, SSH2_URL_STR(resource->path) + 1, terminal, terminal_len, environment, width, height, type); ++ stream = php_ssh2_exec_command(session, rsrc, SSH2_URL_STR(resource->path) + 1, terminal, terminal_len, environment, width, height, type); + if (!stream) { +- // TODO Sean-Der +- //zend_list_delete(resource_id); ++ zend_list_delete(rsrc); + } + php_url_free(resource); + +@@ -963,7 +950,7 @@ PHP_FUNCTION(ssh2_exec) + + SSH2_FETCH_AUTHENTICATED_SESSION(session, zsession); + +- stream = php_ssh2_exec_command(session, Z_RES_P(zsession)->handle, command, term, term_len, environment, width, height, type); ++ stream = php_ssh2_exec_command(session, Z_RES_P(zsession), command, term, term_len, environment, width, height, type); + if (!stream) { + RETURN_FALSE; + } +@@ -982,7 +969,7 @@ PHP_FUNCTION(ssh2_exec) + /* {{{ php_ssh2_scp_xfer + * Make a stream from a session + */ +-static php_stream *php_ssh2_scp_xfer(LIBSSH2_SESSION *session, int resource_id, char *filename) ++static php_stream *php_ssh2_scp_xfer(LIBSSH2_SESSION *session, zend_resource *rsrc, char *filename) + { + LIBSSH2_CHANNEL *channel; + php_ssh2_channel_data *channel_data; +@@ -1002,7 +989,7 @@ static php_stream *php_ssh2_scp_xfer(LIBSSH2_SESSION *session, int resource_id, + channel_data->streamid = 0; + channel_data->is_blocking = 0; + channel_data->timeout = 0; +- channel_data->session_rsrcid = resource_id; ++ channel_data->session_rsrc = rsrc; + channel_data->refcount = NULL; + + stream = php_stream_alloc(&php_ssh2_channel_stream_ops, channel_data, 0, "r"); +@@ -1018,28 +1005,26 @@ static php_stream *php_ssh2_fopen_wrapper_scp(php_stream_wrapper *wrapper, const + { + LIBSSH2_SESSION *session = NULL; + php_stream *stream; +- int resource_id = 0; ++ zend_resource *rsrc = NULL; + php_url *resource; + + if (strchr(mode, '+') || strchr(mode, 'a') || strchr(mode, 'w')) { + return NULL; + } + +- resource = php_ssh2_fopen_wraper_parse_path(path, "scp", context, &session, &resource_id, NULL, NULL); ++ resource = php_ssh2_fopen_wraper_parse_path(path, "scp", context, &session, &rsrc, NULL, NULL); + if (!resource || !session) { + return NULL; + } + if (!resource->path) { + php_url_free(resource); +- //TODO Sean-Der +- //zend_list_delete(resource_id); ++ zend_list_delete(rsrc); + return NULL; + } + +- stream = php_ssh2_scp_xfer(session, resource_id, SSH2_URL_STR(resource->path)); ++ stream = php_ssh2_scp_xfer(session, rsrc, SSH2_URL_STR(resource->path)); + if (!stream) { +- //TODO Sean-Der +- //zend_list_delete(resource_id); ++ zend_list_delete(rsrc); + } + php_url_free(resource); + +@@ -1231,7 +1216,7 @@ PHP_FUNCTION(ssh2_scp_send) + /* {{{ php_ssh2_direct_tcpip + * Make a stream from a session + */ +-static php_stream *php_ssh2_direct_tcpip(LIBSSH2_SESSION *session, int resource_id, char *host, int port) ++static php_stream *php_ssh2_direct_tcpip(LIBSSH2_SESSION *session, zend_resource *rsrc, char *host, int port) + { + LIBSSH2_CHANNEL *channel; + php_ssh2_channel_data *channel_data; +@@ -1251,7 +1236,7 @@ static php_stream *php_ssh2_direct_tcpip(LIBSSH2_SESSION *session, int resource_ + channel_data->streamid = 0; + channel_data->is_blocking = 0; + channel_data->timeout = 0; +- channel_data->session_rsrcid = resource_id; ++ channel_data->session_rsrc = rsrc; + channel_data->refcount = NULL; + + stream = php_stream_alloc(&php_ssh2_channel_stream_ops, channel_data, 0, "r+"); +@@ -1270,9 +1255,9 @@ static php_stream *php_ssh2_fopen_wrapper_tunnel(php_stream_wrapper *wrapper, co + php_url *resource; + char *host = NULL; + int port = 0; +- int resource_id = 0; ++ zend_resource *rsrc; + +- resource = php_ssh2_fopen_wraper_parse_path(path, "tunnel", context, &session, &resource_id, NULL, NULL); ++ resource = php_ssh2_fopen_wraper_parse_path(path, "tunnel", context, &session, &rsrc, NULL, NULL); + if (!resource || !session) { + return NULL; + } +@@ -1303,15 +1288,13 @@ static php_stream *php_ssh2_fopen_wrapper_tunnel(php_stream_wrapper *wrapper, co + if ((port <= 0) || (port > 65535) || !host || (strlen(host) == 0)) { + /* Invalid connection criteria */ + php_url_free(resource); +- //TODO Sean-Der +- //zend_list_delete(resource_id); ++ zend_list_delete(rsrc); + return NULL; + } + +- stream = php_ssh2_direct_tcpip(session, resource_id, host, port); ++ stream = php_ssh2_direct_tcpip(session, rsrc, host, port); + if (!stream) { +- // TODO Sean-Der +- //zend_list_delete(resource_id); ++ zend_list_delete(rsrc); + } + php_url_free(resource); + +@@ -1352,7 +1335,7 @@ PHP_FUNCTION(ssh2_tunnel) + + SSH2_FETCH_AUTHENTICATED_SESSION(session, zsession); + +- stream = php_ssh2_direct_tcpip(session, Z_RES_P(zsession)->handle, host, port); ++ stream = php_ssh2_direct_tcpip(session, Z_RES_P(zsession), host, port); + if (!stream) { + RETURN_FALSE; + } +diff --git a/ssh2_sftp.c b/ssh2_sftp.c +index 6332be8..256fc70 100644 +--- a/ssh2_sftp.c ++++ b/ssh2_sftp.c +@@ -40,8 +40,7 @@ void php_ssh2_sftp_dtor(zend_resource *rsrc) + + libssh2_sftp_shutdown(data->sftp); + +- // TODO Sean-Der +- //zend_list_delete(data->session_rsrcid); ++ zend_list_delete(data->session_rsrc); + + efree(data); + } +@@ -50,7 +49,7 @@ void php_ssh2_sftp_dtor(zend_resource *rsrc) + * SFTP File Ops * + ***************** */ + +-inline unsigned long php_ssh2_parse_fopen_modes(char *openmode) { ++unsigned long php_ssh2_parse_fopen_modes(char *openmode) { + unsigned long flags = 0; + + if (strchr(openmode, 'a')) { +@@ -101,7 +100,7 @@ inline int php_ssh2_sftp_attr2ssb(php_stream_statbuf *ssb, LIBSSH2_SFTP_ATTRIBUT + typedef struct _php_ssh2_sftp_handle_data { + LIBSSH2_SFTP_HANDLE *handle; + +- long sftp_rsrcid; ++ zend_resource *sftp_rsrc; + } php_ssh2_sftp_handle_data; + + /* {{{ php_ssh2_sftp_stream_write +@@ -139,8 +138,7 @@ static int php_ssh2_sftp_stream_close(php_stream *stream, int close_handle) + php_ssh2_sftp_handle_data *data = (php_ssh2_sftp_handle_data*)stream->abstract; + + libssh2_sftp_close(data->handle); +- //TODO Sean-Der +- //zend_list_delete(data->sftp_rsrcid); ++ zend_list_delete(data->sftp_rsrc); + efree(data); + + return 0; +@@ -226,12 +224,12 @@ static php_stream *php_ssh2_sftp_stream_opener(php_stream_wrapper *wrapper, cons + LIBSSH2_SFTP *sftp = NULL; + LIBSSH2_SFTP_HANDLE *handle; + php_stream *stream; +- int resource_id = 0, sftp_rsrcid = 0; ++ zend_resource *rsrc = NULL, *sftp_rsrc = NULL; + php_url *resource; + unsigned long flags; + long perms = 0644; + +- resource = php_ssh2_fopen_wraper_parse_path(filename, "sftp", context, &session, &resource_id, &sftp, &sftp_rsrcid); ++ resource = php_ssh2_fopen_wraper_parse_path(filename, "sftp", context, &session, &rsrc, &sftp, &sftp_rsrc); + if (!resource || !session || !sftp) { + return NULL; + } +@@ -242,20 +240,18 @@ static php_stream *php_ssh2_sftp_stream_opener(php_stream_wrapper *wrapper, cons + if (!handle) { + php_error_docref(NULL, E_WARNING, "Unable to open %s on remote host", filename); + php_url_free(resource); +- //TODO Sean-Der +- //zend_list_delete(sftp_rsrcid); ++ zend_list_delete(sftp_rsrc); + return NULL; + } + + data = emalloc(sizeof(php_ssh2_sftp_handle_data)); + data->handle = handle; +- data->sftp_rsrcid = sftp_rsrcid; ++ data->sftp_rsrc = sftp_rsrc; + + stream = php_stream_alloc(&php_ssh2_sftp_stream_ops, data, 0, mode); + if (!stream) { + libssh2_sftp_close(handle); +- // TODO Sean-Der +- //zend_list_delete(sftp_rsrcid); ++ zend_list_delete(sftp_rsrc); + efree(data); + } + php_url_free(resource); +@@ -303,8 +299,7 @@ static int php_ssh2_sftp_dirstream_close(php_stream *stream, int close_handle) + php_ssh2_sftp_handle_data *data = (php_ssh2_sftp_handle_data*)stream->abstract; + + libssh2_sftp_close(data->handle); +- //TODO Sean_der +- //zend_list_delete(data->sftp_rsrcid); ++ zend_list_delete(data->sftp_rsrc); + efree(data); + + return 0; +@@ -333,10 +328,10 @@ static php_stream *php_ssh2_sftp_dirstream_opener(php_stream_wrapper *wrapper, c + LIBSSH2_SFTP *sftp = NULL; + LIBSSH2_SFTP_HANDLE *handle; + php_stream *stream; +- int resource_id = 0, sftp_rsrcid = 0; ++ zend_resource *rsrc = NULL, *sftp_rsrc = NULL; + php_url *resource; + +- resource = php_ssh2_fopen_wraper_parse_path(filename, "sftp", context, &session, &resource_id, &sftp, &sftp_rsrcid); ++ resource = php_ssh2_fopen_wraper_parse_path(filename, "sftp", context, &session, &rsrc, &sftp, &sftp_rsrc); + if (!resource || !session || !sftp) { + return NULL; + } +@@ -345,20 +340,18 @@ static php_stream *php_ssh2_sftp_dirstream_opener(php_stream_wrapper *wrapper, c + if (!handle) { + php_error_docref(NULL, E_WARNING, "Unable to open %s on remote host", filename); + php_url_free(resource); +- //TODO Sean-Der +- //zend_list_delete(sftp_rsrcid); ++ zend_list_delete(sftp_rsrc); + return NULL; + } + + data = emalloc(sizeof(php_ssh2_sftp_handle_data)); + data->handle = handle; +- data->sftp_rsrcid = sftp_rsrcid; ++ data->sftp_rsrc = sftp_rsrc; + + stream = php_stream_alloc(&php_ssh2_sftp_dirstream_ops, data, 0, mode); + if (!stream) { + libssh2_sftp_close(handle); +- //TODO Sean-Der +- //zend_list_delete(sftp_rsrcid); ++ zend_list_delete(sftp_rsrc); + efree(data); + } + php_url_free(resource); +@@ -378,10 +371,10 @@ static int php_ssh2_sftp_urlstat(php_stream_wrapper *wrapper, const char *url, i + LIBSSH2_SFTP_ATTRIBUTES attrs; + LIBSSH2_SESSION *session = NULL; + LIBSSH2_SFTP *sftp = NULL; +- int resource_id = 0, sftp_rsrcid = 0; ++ zend_resource *rsrc = NULL, *sftp_rsrc = NULL; + php_url *resource; + +- resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &resource_id, &sftp, &sftp_rsrcid); ++ resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &rsrc, &sftp, &sftp_rsrc); + if (!resource || !session || !sftp || !resource->path) { + return -1; + } +@@ -408,11 +401,11 @@ static int php_ssh2_sftp_unlink(php_stream_wrapper *wrapper, const char *url, in + { + LIBSSH2_SESSION *session = NULL; + LIBSSH2_SFTP *sftp = NULL; +- int resource_id = 0, sftp_rsrcid = 0; ++ zend_resource *rsrc = NULL, *sftp_rsrc = NULL; + php_url *resource; + int result; + +- resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &resource_id, &sftp, &sftp_rsrcid); ++ resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &rsrc, &sftp, &sftp_rsrc); + if (!resource || !session || !sftp || !resource->path) { + if (resource) { + php_url_free(resource); +@@ -436,7 +429,7 @@ static int php_ssh2_sftp_rename(php_stream_wrapper *wrapper, const char *url_fro + { + LIBSSH2_SESSION *session = NULL; + LIBSSH2_SFTP *sftp = NULL; +- int resource_id = 0, sftp_rsrcid = 0; ++ zend_resource *rsrc = NULL, *sftp_rsrc = NULL; + php_url *resource, *resource_to; + int result; + +@@ -453,7 +446,7 @@ static int php_ssh2_sftp_rename(php_stream_wrapper *wrapper, const char *url_fro + return 0; + } + +- resource = php_ssh2_fopen_wraper_parse_path(url_from, "sftp", context, &session, &resource_id, &sftp, &sftp_rsrcid); ++ resource = php_ssh2_fopen_wraper_parse_path(url_from, "sftp", context, &session, &rsrc, &sftp, &sftp_rsrc); + if (!resource || !session || !sftp || !resource->path) { + if (resource) { + php_url_free(resource); +@@ -479,11 +472,11 @@ static int php_ssh2_sftp_mkdir(php_stream_wrapper *wrapper, const char *url, int + { + LIBSSH2_SESSION *session = NULL; + LIBSSH2_SFTP *sftp = NULL; +- int resource_id = 0, sftp_rsrcid = 0; ++ zend_resource *rsrc = NULL, *sftp_rsrc = NULL; + php_url *resource; + int result; + +- resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &resource_id, &sftp, &sftp_rsrcid); ++ resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &rsrc, &sftp, &sftp_rsrc); + if (!resource || !session || !sftp || !resource->path) { + if (resource) { + php_url_free(resource); +@@ -515,11 +508,11 @@ static int php_ssh2_sftp_rmdir(php_stream_wrapper *wrapper, const char *url, int + { + LIBSSH2_SESSION *session = NULL; + LIBSSH2_SFTP *sftp = NULL; +- int resource_id = 0, sftp_rsrcid = 0; ++ zend_resource *rsrc = NULL, *sftp_rsrc = NULL; + php_url *resource; + int result; + +- resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &resource_id, &sftp, &sftp_rsrcid); ++ resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &rsrc, &sftp, &sftp_rsrc); + if (!resource || !session || !sftp || !resource->path) { + if (resource) { + php_url_free(resource); +@@ -591,7 +584,7 @@ PHP_FUNCTION(ssh2_sftp) + data = emalloc(sizeof(php_ssh2_sftp_data)); + data->session = session; + data->sftp = sftp; +- data->session_rsrcid = Z_RES_P(zsession)->handle; ++ data->session_rsrc = Z_RES_P(zsession); + Z_ADDREF_P(zsession); + + RETURN_RES(zend_register_resource(data, le_ssh2_sftp)); diff --git a/package/php-ssh2/Config.in b/package/php-ssh2/Config.in new file mode 100644 index 00000000..5a23114b --- /dev/null +++ b/package/php-ssh2/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PHP_SSH2 + bool "php-ssh2" + select BR2_PACKAGE_LIBSSH2 + help + PHP bindings for the libssh2 library. + + http://pecl.php.net/package/ssh2 diff --git a/package/php-ssh2/php-ssh2.hash b/package/php-ssh2/php-ssh2.hash new file mode 100644 index 00000000..36e04f47 --- /dev/null +++ b/package/php-ssh2/php-ssh2.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 87618d6a0981afe8c24b36d6b38c21a0aa0237b62e60347d0170bd86b51f79fb ssh2-1.1.2.tgz +sha256 ac7c56f1e416ce6e60abcf26269395128bc9e5a2e4f3293e5dcc124aac606508 LICENSE diff --git a/package/php-ssh2/php-ssh2.mk b/package/php-ssh2/php-ssh2.mk new file mode 100644 index 00000000..c9c13010 --- /dev/null +++ b/package/php-ssh2/php-ssh2.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# php-ssh2 +# +################################################################################ + +PHP_SSH2_VERSION = 1.1.2 +PHP_SSH2_SOURCE = ssh2-$(PHP_SSH2_VERSION).tgz +PHP_SSH2_SITE = https://pecl.php.net/get +PHP_SSH2_CONF_OPTS = --with-php-config=$(STAGING_DIR)/usr/bin/php-config \ + --with-ssh2=$(STAGING_DIR)/usr +# phpize does the autoconf magic +PHP_SSH2_DEPENDENCIES = libssh2 php host-autoconf +PHP_SSH2_LICENSE = PHP-3.01 +PHP_SSH2_LICENSE_FILES = LICENSE + +define PHP_SSH2_PHPIZE + (cd $(@D); \ + PHP_AUTOCONF=$(HOST_DIR)/bin/autoconf \ + PHP_AUTOHEADER=$(HOST_DIR)/bin/autoheader \ + $(STAGING_DIR)/usr/bin/phpize) +endef + +PHP_SSH2_PRE_CONFIGURE_HOOKS += PHP_SSH2_PHPIZE + +$(eval $(autotools-package)) diff --git a/package/php-xdebug/Config.in b/package/php-xdebug/Config.in new file mode 100644 index 00000000..b5919e06 --- /dev/null +++ b/package/php-xdebug/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PHP_XDEBUG + bool "php-xdebug" + help + Extension for PHP to assist with debugging and development. + + http://xdebug.org diff --git a/package/php-xdebug/php-xdebug.hash b/package/php-xdebug/php-xdebug.hash new file mode 100644 index 00000000..8b90352e --- /dev/null +++ b/package/php-xdebug/php-xdebug.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 ef479ee1a3da3f933e0d046ca8cd0c14601f29b2c0c41cc60c9388546a4e0272 LICENSE +sha256 e330c5ccb77890b06dd7bf093567051450b2438b79fed8e7e6c4834278d46092 php-xdebug-2.9.6.tar.gz diff --git a/package/php-xdebug/php-xdebug.mk b/package/php-xdebug/php-xdebug.mk new file mode 100644 index 00000000..ab6ade4c --- /dev/null +++ b/package/php-xdebug/php-xdebug.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# php-xdebug +# +################################################################################ + +PHP_XDEBUG_VERSION = 2.9.6 +PHP_XDEBUG_SITE = $(call github,xdebug,xdebug,$(PHP_XDEBUG_VERSION)) +PHP_XDEBUG_INSTALL_STAGING = YES +PHP_XDEBUG_LICENSE = Xdebug License (PHP-3.0-like) +PHP_XDEBUG_LICENSE_FILES = LICENSE +# phpize does the autoconf magic +PHP_XDEBUG_DEPENDENCIES = php host-autoconf +PHP_XDEBUG_CONF_OPTS = \ + --enable-xdebug \ + --with-php-config=$(STAGING_DIR)/usr/bin/php-config \ + --with-xdebug=$(STAGING_DIR)/usr + +define PHP_XDEBUG_PHPIZE + (cd $(@D); \ + PHP_AUTOCONF=$(HOST_DIR)/bin/autoconf \ + PHP_AUTOHEADER=$(HOST_DIR)/bin/autoheader \ + $(STAGING_DIR)/usr/bin/phpize) +endef + +PHP_XDEBUG_PRE_CONFIGURE_HOOKS += PHP_XDEBUG_PHPIZE + +$(eval $(autotools-package)) diff --git a/package/php-yaml/Config.in b/package/php-yaml/Config.in new file mode 100644 index 00000000..28f917fe --- /dev/null +++ b/package/php-yaml/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PHP_YAML + bool "php-yaml" + select BR2_PACKAGE_LIBYAML + help + PHP YAML-1.1 parser and emitter. + + http://pecl.php.net/package/yaml diff --git a/package/php-yaml/php-yaml.hash b/package/php-yaml/php-yaml.hash new file mode 100644 index 00000000..c29c3e66 --- /dev/null +++ b/package/php-yaml/php-yaml.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 9786b0386e648f12cc18a038358bd57bee4906e350a2e9ab776d6a5f18fc6680 yaml-2.0.4.tgz +sha256 68d9700294396c72089bfc7bf38a5b3654a53ae415f3bd37768848c14e86f338 LICENSE diff --git a/package/php-yaml/php-yaml.mk b/package/php-yaml/php-yaml.mk new file mode 100644 index 00000000..e23d8979 --- /dev/null +++ b/package/php-yaml/php-yaml.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# php-yaml +# +################################################################################ + +PHP_YAML_VERSION = 2.0.4 +PHP_YAML_SOURCE = yaml-$(PHP_YAML_VERSION).tgz +PHP_YAML_SITE = https://pecl.php.net/get +PHP_YAML_CONF_OPTS = --with-php-config=$(STAGING_DIR)/usr/bin/php-config \ + --with-yaml=$(STAGING_DIR)/usr +# phpize does the autoconf magic +PHP_YAML_DEPENDENCIES = libyaml php host-autoconf +PHP_YAML_LICENSE = MIT +PHP_YAML_LICENSE_FILES = LICENSE + +define PHP_YAML_PHPIZE + (cd $(@D); \ + PHP_AUTOCONF=$(HOST_DIR)/bin/autoconf \ + PHP_AUTOHEADER=$(HOST_DIR)/bin/autoheader \ + $(STAGING_DIR)/usr/bin/phpize) +endef + +PHP_YAML_PRE_CONFIGURE_HOOKS += PHP_YAML_PHPIZE + +$(eval $(autotools-package)) diff --git a/package/php-zmq/0001-PHP-7.3-compatibility-and-bugfixes.patch b/package/php-zmq/0001-PHP-7.3-compatibility-and-bugfixes.patch new file mode 100644 index 00000000..83cdb045 --- /dev/null +++ b/package/php-zmq/0001-PHP-7.3-compatibility-and-bugfixes.patch @@ -0,0 +1,271 @@ +From 6ea688eff5157785267d2b671cf62d296288847f Mon Sep 17 00:00:00 2001 +From: Alex/AT +Date: Mon, 10 Dec 2018 06:02:27 +0300 +Subject: [PATCH] PHP 7.3 compatibility and bugfixes + +- Define new GC_ADDREF/DELREF/SET_REFCOUNT macros for older PHP versions and use them instead of direct GC reference counter access + +- Fixup all necessary 'long' type parameters to 'zend_long', PHP 7.3 makes it mandatory, also fixup some direct function implementations to accept the same + +- In php_zmq_recv(), zend_string_init() was wrongly called with third parameter as '1', marking new string with IS_STR_PERSISTENT, this caused heap corruption and/or segfaults with PHP 7.3 and could possibly cause other sorts of bugs under any 7.x version + With ZVAL_STRINGL macro, this last '1' parameter meant to copy the string and was seemingly erroneously moved to zend_string_init(). zend_string_init() copies string by default, and last parameter has totally different meaning here + +- In poll(), flag ZVAL separation on passed arrays (PHP 7.3 makes it mandatory) + +- Test 19 (exception on connect callback with forced reference parameter): skip on PHP 7.1 and higher, PHP >= 7.1 started to fallback to passing argument by value instead of failing + +- Test 21 (warning generation from callback): it is ok, but PHP 7.3 uses 'int' instead of 'integer' for constants, so allow any word in place of the word 'integer' + +[Frank: backport from upstream PR https://github.com/mkoppanen/php-zmq/pull/195] +Signed-off-by: Frank Hunleth +--- + php_zmq.h | 6 ++++ + tests/019-callbackinvalidsignature.phpt | 3 +- + tests/021-callbackwarning.phpt | 2 +- + zmq.c | 40 ++++++++++++------------- + zmq_sockopt.c | 4 +-- + 5 files changed, 30 insertions(+), 25 deletions(-) + +diff --git a/php_zmq.h b/php_zmq.h +index ef50bfb..3833967 100644 +--- a/php_zmq.h ++++ b/php_zmq.h +@@ -44,6 +44,12 @@ + + #include "php.h" + ++#if PHP_VERSION_ID < 70300 ++#define GC_ADDREF(p) ++GC_REFCOUNT(p) ++#define GC_DELREF(p) --GC_REFCOUNT(p) ++#define GC_SET_REFCOUNT(p, rc) GC_REFCOUNT(p) = rc ++#endif ++ + extern zend_module_entry zmq_module_entry; + #define phpext_zmq_ptr &zmq_module_entry + +diff --git a/tests/019-callbackinvalidsignature.phpt b/tests/019-callbackinvalidsignature.phpt +index 753de31..b5bb20c 100644 +--- a/tests/019-callbackinvalidsignature.phpt ++++ b/tests/019-callbackinvalidsignature.phpt +@@ -1,7 +1,8 @@ + --TEST-- + Test callback edge-cases + --SKIPIF-- +- ++= 70100) die("skip PHP 7.1 and higher fallback to passing argument by value even when forced to reference"); ?> + --FILE-- + val, plist_key->len, &le, sizeof(le)) == NULL) { +@@ -369,7 +369,7 @@ PHP_METHOD(zmq, curvekeypair) + PHP_METHOD(zmqcontext, __construct) + { + php_zmq_context_object *intern; +- long io_threads = 1; ++ zend_long io_threads = 1; + zend_bool is_persistent = 1; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|lb", &io_threads, &is_persistent) == FAILURE) { +@@ -495,7 +495,7 @@ PHP_METHOD(zmqcontext, getOpt) + Create a new zmq socket + */ + static +-php_zmq_socket *php_zmq_socket_new(php_zmq_context *context, int type, zend_bool is_persistent) ++php_zmq_socket *php_zmq_socket_new(php_zmq_context *context, zend_long type, zend_bool is_persistent) + { + php_zmq_socket *zmq_sock; + +@@ -503,7 +503,7 @@ php_zmq_socket *php_zmq_socket_new(php_zmq_context *context, int type, zend_bool + zmq_sock->z_socket = zmq_socket(context->z_ctx, type); + zmq_sock->pid = getpid(); + zmq_sock->ctx = context; +- zmq_sock->socket_type = type; ++ zmq_sock->socket_type = type; + + if (!zmq_sock->z_socket) { + pefree(zmq_sock, is_persistent); +@@ -535,7 +535,7 @@ void php_zmq_socket_store(php_zmq_socket *zmq_sock_p, zend_long type, zend_strin + le.type = php_zmq_socket_list_entry(); + le.ptr = zmq_sock_p; + +- GC_REFCOUNT(&le) = 1; ++ GC_SET_REFCOUNT(&le, 1); + + plist_key = php_zmq_socket_plist_key(type, persistent_id, use_shared_ctx); + +@@ -796,7 +796,7 @@ PHP_METHOD(zmqsocket, __construct) + + /* {{{ static zend_bool php_zmq_send(php_zmq_socket_object *intern, char *message_param, long flags) + */ +-static zend_bool php_zmq_send(php_zmq_socket_object *intern, zend_string *message_param, long flags) ++static zend_bool php_zmq_send(php_zmq_socket_object *intern, zend_string *message_param, zend_long flags) + { + int rc, errno_; + zmq_msg_t message; +@@ -828,7 +828,7 @@ static void php_zmq_sendmsg_impl(INTERNAL_FUNCTION_PARAMETERS) + { + php_zmq_socket_object *intern; + zend_string *message_param; +- long flags = 0; ++ zend_long flags = 0; + zend_bool ret; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "S|l", &message_param, &flags) == FAILURE) { +@@ -890,7 +890,7 @@ PHP_METHOD(zmqsocket, sendmulti) + zval *messages; + php_zmq_socket_object *intern; + int to_send, ret = 0; +- long flags = 0; ++ zend_long flags = 0; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "a|l", &messages, &flags) == FAILURE) { + return; +@@ -910,7 +910,7 @@ PHP_METHOD(zmqsocket, sendmulti) + /* {{{ static zend_bool php_zmq_recv(php_zmq_socket_object *intern, long flags, zval *return_value) + */ + static +-zend_string *php_zmq_recv(php_zmq_socket_object *intern, long flags) ++zend_string *php_zmq_recv(php_zmq_socket_object *intern, zend_long flags) + { + int rc, errno_; + zmq_msg_t message; +@@ -933,7 +933,7 @@ zend_string *php_zmq_recv(php_zmq_socket_object *intern, long flags) + return NULL; + } + +- str = zend_string_init(zmq_msg_data(&message), zmq_msg_size(&message), 1); ++ str = zend_string_init(zmq_msg_data(&message), zmq_msg_size(&message), 0); + zmq_msg_close(&message); + return str; + } +@@ -943,7 +943,7 @@ static void php_zmq_recvmsg_impl(INTERNAL_FUNCTION_PARAMETERS) + { + zend_string *str = NULL; + php_zmq_socket_object *intern; +- long flags = 0; ++ zend_long flags = 0; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &flags) == FAILURE) { + return; +@@ -974,7 +974,7 @@ PHP_METHOD(zmqsocket, recvmulti) + { + php_zmq_socket_object *intern; + size_t value_len; +- long flags = 0; ++ zend_long flags = 0; + #if ZMQ_VERSION_MAJOR < 3 + int64_t value; + #else +@@ -1303,7 +1303,7 @@ PHP_METHOD(zmqpoll, add) + { + php_zmq_poll_object *intern; + zval *object; +- long events; ++ zend_long events; + int error; + zend_string *key; + +@@ -1423,10 +1423,10 @@ PHP_METHOD(zmqpoll, poll) + php_zmq_poll_object *intern; + zval *r_array, *w_array; + +- long timeout = -1; ++ zend_long timeout = -1; + int rc; + +- if (zend_parse_parameters(ZEND_NUM_ARGS(), "a!a!|l", &r_array, &w_array, &timeout) == FAILURE) { ++ if (zend_parse_parameters(ZEND_NUM_ARGS(), "a!/a!/|l", &r_array, &w_array, &timeout) == FAILURE) { + return; + } + +@@ -1592,7 +1592,7 @@ void s_clear_device_callback (php_zmq_device_cb_t *cb) + } + + static +-void s_init_device_callback (php_zmq_device_cb_t *cb, zend_fcall_info *fci, zend_fcall_info_cache *fci_cache, long timeout, zval *user_data) ++void s_init_device_callback (php_zmq_device_cb_t *cb, zend_fcall_info *fci, zend_fcall_info_cache *fci_cache, zend_long timeout, zval *user_data) + { + memcpy (&cb->fci, fci, sizeof (zend_fcall_info)); + memcpy (&cb->fci_cache, fci_cache, sizeof (zend_fcall_info_cache)); +@@ -1615,7 +1615,7 @@ void s_init_device_callback (php_zmq_device_cb_t *cb, zend_fcall_info *fci, zend + PHP_METHOD(zmqdevice, setidletimeout) + { + php_zmq_device_object *intern; +- long timeout; ++ zend_long timeout; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &timeout) == FAILURE) { + return; +@@ -1644,7 +1644,7 @@ PHP_METHOD(zmqdevice, getidletimeout) + PHP_METHOD(zmqdevice, settimertimeout) + { + php_zmq_device_object *intern; +- long timeout; ++ zend_long timeout; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &timeout) == FAILURE) { + return; +@@ -1676,7 +1676,7 @@ PHP_METHOD(zmqdevice, setidlecallback) + zval *user_data = NULL; + zend_fcall_info fci; + zend_fcall_info_cache fci_cache; +- long timeout = 0; ++ zend_long timeout = 0; + + if (ZEND_NUM_ARGS() == 2) { + php_error_docref(NULL, E_DEPRECATED, "The signature for setIdleCallback has changed, please update your code"); +@@ -1718,7 +1718,7 @@ PHP_METHOD(zmqdevice, settimercallback) + zval *user_data = NULL; + zend_fcall_info fci; + zend_fcall_info_cache fci_cache; +- long timeout; ++ zend_long timeout; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "fl|z!", &fci, &fci_cache, &timeout, &user_data) == FAILURE) { + return; +diff --git a/zmq_sockopt.c b/zmq_sockopt.c +index 1357032..3a00421 100644 +--- a/zmq_sockopt.c ++++ b/zmq_sockopt.c +@@ -1,5 +1,3 @@ +- +- + /* + +-----------------------------------------------------------------------------------+ + | ZMQ extension for PHP | +@@ -2033,7 +2031,7 @@ PHP_METHOD(zmqsocket, getsockopt) + PHP_METHOD(zmqsocket, setsockopt) + { + php_zmq_socket_object *intern; +- long key; ++ zend_long key; + zval *zv; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lz/", &key, &zv) == FAILURE) { +-- +2.17.1 + diff --git a/package/php-zmq/Config.in b/package/php-zmq/Config.in new file mode 100644 index 00000000..37be1779 --- /dev/null +++ b/package/php-zmq/Config.in @@ -0,0 +1,12 @@ +comment "php-zmq needs a toolchain w/ C++, threads" + depends on !(BR2_INSTALL_LIBSTDCPP && BR2_TOOLCHAIN_HAS_THREADS) + +config BR2_PACKAGE_PHP_ZMQ + bool "php-zmq" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_ZEROMQ + help + ZeroMQ messaging bindings for PHP + + http://pecl.php.net/package/zmq diff --git a/package/php-zmq/php-zmq.hash b/package/php-zmq/php-zmq.hash new file mode 100644 index 00000000..a4cca698 --- /dev/null +++ b/package/php-zmq/php-zmq.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 c492375818bd51b355352798fb94f04d6828c6aeda41ba813849624af74144ce zmq-1.1.3.tgz +sha256 0302303063d3612fc240032aeb6d70e9b7509fc17a4a9edf00eba091ed597514 LICENSE diff --git a/package/php-zmq/php-zmq.mk b/package/php-zmq/php-zmq.mk new file mode 100644 index 00000000..fed71955 --- /dev/null +++ b/package/php-zmq/php-zmq.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# php-zmq +# +################################################################################ + +PHP_ZMQ_VERSION = 1.1.3 +PHP_ZMQ_SOURCE = zmq-$(PHP_ZMQ_VERSION).tgz +PHP_ZMQ_SITE = https://pecl.php.net/get +# phpize does the autoconf magic +PHP_ZMQ_DEPENDENCIES = php zeromq host-autoconf host-pkgconf +PHP_ZMQ_CONF_OPTS = --with-php-config=$(STAGING_DIR)/usr/bin/php-config +PHP_ZMQ_LICENSE = BSD-3-Clause +PHP_ZMQ_LICENSE_FILES = LICENSE + +define PHP_ZMQ_PHPIZE + (cd $(@D); \ + PHP_AUTOCONF=$(HOST_DIR)/bin/autoconf \ + PHP_AUTOHEADER=$(HOST_DIR)/bin/autoheader \ + $(STAGING_DIR)/usr/bin/phpize) +endef + +PHP_ZMQ_PRE_CONFIGURE_HOOKS += PHP_ZMQ_PHPIZE + +$(eval $(autotools-package)) diff --git a/package/php/0001-acinclude.m4-don-t-unset-variables.patch b/package/php/0001-acinclude.m4-don-t-unset-variables.patch new file mode 100644 index 00000000..982857a3 --- /dev/null +++ b/package/php/0001-acinclude.m4-don-t-unset-variables.patch @@ -0,0 +1,40 @@ +From 7a4168062fbab2e33ef9a42bca9f87a5921afac2 Mon Sep 17 00:00:00 2001 +From: Gustavo Zacarias +Date: Tue, 9 Aug 2016 11:49:56 +0200 +Subject: [PATCH] acinclude.m4: don't unset variables + +Unsetting ac_cv_{func,lib}_* is bad, you can't feed the configure cache. +Terminate them with extreme prejudice. + +Signed-off-by: Gustavo Zacarias +Signed-off-by: Adam Duskett +[aduskett@gmail.com: Update for 7.3.0] +--- + build/php.m4 | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/build/php.m4 b/build/php.m4 +index e91ef988..9586c490 100644 +--- a/build/php.m4 ++++ b/build/php.m4 +@@ -1587,8 +1587,6 @@ dnl PHP_CHECK_FUNC_LIB + dnl + AC_DEFUN([PHP_CHECK_FUNC_LIB],[ + ifelse($2,,:,[ +- unset ac_cv_lib_$2[]_$1 +- unset ac_cv_lib_$2[]___$1 + unset found + AC_CHECK_LIB($2, $1, [found=yes], [ + AC_CHECK_LIB($2, __$1, [found=yes], [found=no]) +@@ -1620,8 +1618,6 @@ dnl and as a fall back in the specified library. Defines HAVE_func and + dnl HAVE_library if found and adds the library to LIBS. + dnl + AC_DEFUN([PHP_CHECK_FUNC],[ +- unset ac_cv_func_$1 +- unset ac_cv_func___$1 + unset found + + AC_CHECK_FUNC($1, [found=yes],[ AC_CHECK_FUNC(__$1,[found=yes],[found=no]) ]) +-- +2.7.4 + diff --git a/package/php/0002-iconv-tweak-iconv-detection.patch b/package/php/0002-iconv-tweak-iconv-detection.patch new file mode 100644 index 00000000..65ed6055 --- /dev/null +++ b/package/php/0002-iconv-tweak-iconv-detection.patch @@ -0,0 +1,73 @@ +From 1357df0196806d5697b1f84497ef72aab5faa8a3 Mon Sep 17 00:00:00 2001 +From: Gustavo Zacarias +Date: Tue, 9 Aug 2016 11:50:49 +0200 +Subject: [PATCH] iconv: tweak iconv detection + +Tweak PHP_SETUP_ICONV from aclocal/build/php.m4 to not +PHP_ADD_INCLUDE $ICONV_DIR/include since the tests use +test instead of AC_TRY_LINK to find headers which is bad, +specially when adding /usr and /usr/local to the mix. +Do basically the same with ext/iconv/config.m4 by tweaking +PHP_ICONV_H_PATH which, again, uses test and absolute paths. + +Signed-off-by: Gustavo Zacarias +[Gustavo: convert to nice m4 instead of patching configure] +[Gustavo: update for 5.6.10] +Signed-off-by: Adam Duskett +[aduskett@gmail.com: Update for 7.3.0] +Signed-off-by: Bernd Kuhls +[Bernd: rebased for 7.4.10 & 7.4.13] +--- + build/php.m4 | 2 +- + ext/iconv/config.m4 | 22 ---------------------- + 2 files changed, 1 insertion(+), 23 deletions(-) + +diff --git a/build/php.m4 b/build/php.m4 +index 9586c490..8b3d47ed 100644 +--- a/build/php.m4 ++++ b/build/php.m4 +@@ -1973,7 +1973,7 @@ AC_DEFUN([PHP_SETUP_ICONV], [ + dnl Check external libs for iconv funcs. + if test "$found_iconv" = "no"; then + +- for i in $PHP_ICONV /usr/local /usr; do ++ for i in $PHP_ICONV; do + if test -r $i/include/giconv.h; then + AC_DEFINE(HAVE_GICONV_H, 1, [ ]) + ICONV_DIR=$i +diff --git a/ext/iconv/config.m4 b/ext/iconv/config.m4 +index fe9b47aa..70599694 100644 +--- a/ext/iconv/config.m4 ++++ b/ext/iconv/config.m4 +@@ -13,28 +13,6 @@ if test "$PHP_ICONV" != "no"; then + ]) + + if test "$iconv_avail" != "no"; then +- if test -z "$ICONV_DIR"; then +- for i in /usr/local /usr; do +- if test -f "$i/include/iconv.h" || test -f "$i/include/giconv.h"; then +- PHP_ICONV_PREFIX="$i" +- break +- fi +- done +- if test -z "$PHP_ICONV_PREFIX"; then +- PHP_ICONV_PREFIX="/usr" +- fi +- else +- PHP_ICONV_PREFIX="$ICONV_DIR" +- fi +- +- CFLAGS="-I$PHP_ICONV_PREFIX/include $CFLAGS" +- LDFLAGS="-L$PHP_ICONV_PREFIX/$PHP_LIBDIR $LDFLAGS" +- +- if test -r "$PHP_ICONV_PREFIX/include/giconv.h"; then +- PHP_ICONV_H_PATH="$PHP_ICONV_PREFIX/include/giconv.h" +- else +- PHP_ICONV_H_PATH="$PHP_ICONV_PREFIX/include/iconv.h" +- fi + + AC_MSG_CHECKING([if iconv is glibc's]) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[gnu_get_libc_version();]])],[ +-- +2.7.4 + diff --git a/package/php/0003-configure-disable-the-phar-tool.patch b/package/php/0003-configure-disable-the-phar-tool.patch new file mode 100644 index 00000000..4a25ec05 --- /dev/null +++ b/package/php/0003-configure-disable-the-phar-tool.patch @@ -0,0 +1,43 @@ +From 5ba6355e489f647c88ca48afbc75965468193181 Mon Sep 17 00:00:00 2001 +From: Gustavo Zacarias +Date: Tue, 9 Aug 2016 11:51:53 +0200 +Subject: [PATCH] configure: disable the 'phar' tool + +Disable the 'phar' command-line tool build/installation since it requires +php to run and pack up phar itself in phar format. This would require +a host-php instance and really probably nobody needs the phar tool +on the target. + +Signed-off-by: Gustavo Zacarias +[Gustavo: update for autoreconf/configure.in] +Signed-off-by: Adam Duskett +[Aduskett: update for 7.3.0] +Signed-off-by: Bernd Kuhls +[Bernd: rebased for 7.4.10 & 7.4.13] +--- + configure.ac | 9 ++------- + 1 file changed, 2 insertions(+), 7 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 0dfab302..6026fb66 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1454,13 +1454,8 @@ CFLAGS="\$(CFLAGS_CLEAN) $standard_libtool_flag" + INLINE_CFLAGS="$INLINE_CFLAGS $standard_libtool_flag" + CXXFLAGS="$CXXFLAGS $standard_libtool_flag \$(PROF_FLAGS)" + +-if test "$PHP_PHAR" != "no" && test "$PHP_CLI" != "no"; then +- pharcmd=pharcmd +- pharcmd_install=install-pharcmd +-else +- pharcmd= +- pharcmd_install= +-fi; ++pharcmd= ++pharcmd_install= + + all_targets="$lcov_target \$(OVERALL_TARGET) \$(PHP_MODULES) \$(PHP_ZEND_EX) \$(PHP_BINARIES) $pharcmd" + install_targets="$install_sapi $install_modules $install_binaries install-build install-headers install-programs $install_pear $pharcmd_install" +-- +2.14.3 + diff --git a/package/php/0004-Call-apxs-with-correct-prefix.patch b/package/php/0004-Call-apxs-with-correct-prefix.patch new file mode 100644 index 00000000..a0a07157 --- /dev/null +++ b/package/php/0004-Call-apxs-with-correct-prefix.patch @@ -0,0 +1,51 @@ +From 4342bdea7a1a21430ce0d051fa4387441166c473 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 11 Dec 2016 23:12:46 +0100 +Subject: [PATCH] Call apxs with correct prefix + +php uses apache's apxs script from staging directory to install libphp +dynamic library and update /etc/apache2/httpd.conf in the staging and target +directories. Here is the full command line: +"apxs -S LIBEXECDIR='$(INSTALL_ROOT)/usr/modules' + -S SYSCONFDIR='$(INSTALL_ROOT)/etc/apache2' -i -a -n php7" +This does not work for target directory as apxs sets the full path of the +library and not the relative one. Indeed, apxs is smart enough to substitute +away the prefix specified in $(STAGING_DIR)/usr/build/config_vars.mk so +httpd.conf will only be correct in the staging directory. +To fix this, add -S PREFIX='$(INSTALL_ROOT)/usr' to apxs call in configure + +Signed-off-by: Fabrice Fontaine +Signed-off-by: Adam Duskett +[aduskett@gmail.com: Update for 7.3.0] +--- + sapi/apache2handler/config.m4 | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/sapi/apache2handler/config.m4 b/sapi/apache2handler/config.m4 +index 55c16179..68ce66c0 100644 +--- a/sapi/apache2handler/config.m4 ++++ b/sapi/apache2handler/config.m4 +@@ -63,10 +63,12 @@ if test "$PHP_APXS2" != "no"; then + AC_MSG_ERROR([Please note that Apache version >= 2.0.44 is required]) + fi + ++ APXS_PREFIX='$(INSTALL_ROOT)'/usr + APXS_LIBEXECDIR='$(INSTALL_ROOT)'`$APXS -q LIBEXECDIR` + if test -z `$APXS -q SYSCONFDIR`; then + INSTALL_IT="\$(mkinstalldirs) '$APXS_LIBEXECDIR' && \ + $APXS -S LIBEXECDIR='$APXS_LIBEXECDIR' \ ++ -S PREFIX='$APXS_PREFIX' \ + -i -n php7" + else + APXS_SYSCONFDIR='$(INSTALL_ROOT)'`$APXS -q SYSCONFDIR` +@@ -74,6 +76,7 @@ if test "$PHP_APXS2" != "no"; then + \$(mkinstalldirs) '$APXS_SYSCONFDIR' && \ + $APXS -S LIBEXECDIR='$APXS_LIBEXECDIR' \ + -S SYSCONFDIR='$APXS_SYSCONFDIR' \ ++ -S PREFIX='$APXS_PREFIX' \ + -i -a -n php7" + fi + +-- +2.5.0 + diff --git a/package/php/Config.ext b/package/php/Config.ext new file mode 100644 index 00000000..44afea01 --- /dev/null +++ b/package/php/Config.ext @@ -0,0 +1,434 @@ +menu "Extensions" + +config BR2_PACKAGE_PHP_EXT_CALENDAR + bool "Calendar" + help + Calendar and event support + +config BR2_PACKAGE_PHP_EXT_FILEINFO + bool "Fileinfo" + help + File Information support + +config BR2_PACKAGE_PHP_EXT_OPCACHE + bool "OPcache" + help + Enable the Zend OPcache accelerator. + +comment "Readline needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +config BR2_PACKAGE_PHP_EXT_READLINE + bool "Readline" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_READLINE + help + Readline support + +config BR2_PACKAGE_PHP_EXT_SESSION + bool "Session" + default y + help + Session support + +comment "Compression extensions" + +config BR2_PACKAGE_PHP_EXT_BZIP2 + bool "bzip2" + select BR2_PACKAGE_BZIP2 + help + bzip2 read/write support + +config BR2_PACKAGE_PHP_EXT_PHAR + bool "phar" + help + PHP Archive support + +comment "zip needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +config BR2_PACKAGE_PHP_EXT_ZIP + bool "zip" + depends on !BR2_STATIC_LIBS # libzip + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_LIBZIP + help + Zip read/write support + +config BR2_PACKAGE_PHP_EXT_ZLIB + bool "zlib" + default y + select BR2_PACKAGE_ZLIB + help + zlib support + +comment "Cryptography extensions" + +comment "libargon2 needs a toolchain w/ dynamic library" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS + +config BR2_PACKAGE_PHP_EXT_LIBARGON2 + bool "libargon2" + depends on BR2_USE_MMU # libargon2 + depends on !BR2_STATIC_LIBS # libargon2 + select BR2_PACKAGE_LIBARGON2 + help + libargon2 support + +config BR2_PACKAGE_PHP_EXT_LIBSODIUM + bool "libsodium" + select BR2_PACKAGE_LIBSODIUM + help + libsodium support + +config BR2_PACKAGE_PHP_EXT_MCRYPT + bool "mcrypt" + select BR2_PACKAGE_LIBMCRYPT + help + mcrypt support + +config BR2_PACKAGE_PHP_EXT_OPENSSL + bool "openssl" + select BR2_PACKAGE_OPENSSL + help + openssl support + +comment "Database extensions" + +config BR2_PACKAGE_PHP_EXT_DBA + bool "DBA" + help + Database Abstraction Layer + +if BR2_PACKAGE_PHP_EXT_DBA + +config BR2_PACKAGE_PHP_EXT_DBA_CDB + bool "cdb" + help + CDB handler + +config BR2_PACKAGE_PHP_EXT_DBA_DB4 + bool "db4/5" + select BR2_PACKAGE_BERKELEYDB + help + BerkeleyDB version 4/5 handler + +config BR2_PACKAGE_PHP_EXT_DBA_FLAT + bool "flat" + default y + help + Flat file handler + +config BR2_PACKAGE_PHP_EXT_DBA_INI + bool "ini" + default y + help + INI file handler + +endif + +config BR2_PACKAGE_PHP_EXT_MYSQLI + bool "Mysqli" + help + MySQL Improved extension support + +config BR2_PACKAGE_PHP_EXT_PGSQL + bool "PostgreSQL" + depends on BR2_USE_MMU # postgresql + depends on !BR2_STATIC_LIBS + depends on BR2_USE_WCHAR # postgresql + select BR2_PACKAGE_POSTGRESQL + help + PostgreSQL support + +comment "PostgreSQL extension needs a toolchain w/ dynamic library, wchar" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS || !BR2_USE_WCHAR + +config BR2_PACKAGE_PHP_EXT_SQLITE + bool "SQLite3" + select BR2_PACKAGE_SQLITE + help + SQLite3 support + +config BR2_PACKAGE_PHP_EXT_PDO + bool "PDO" + help + PHP Data Objects support + +if BR2_PACKAGE_PHP_EXT_PDO + +config BR2_PACKAGE_PHP_EXT_PDO_MYSQL + bool "MySQL" + help + PDO driver for MySQL + +config BR2_PACKAGE_PHP_EXT_PDO_POSTGRESQL + bool "PostgreSQL" + depends on BR2_USE_MMU # postgresql + depends on !BR2_STATIC_LIBS + depends on BR2_USE_WCHAR # postgresql + select BR2_PACKAGE_POSTGRESQL + help + PDO driver for PostgreSQL + +comment "PostgreSQL drivers need a toolchain w/ wchar, dynamic library" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS || !BR2_USE_WCHAR + +config BR2_PACKAGE_PHP_EXT_PDO_SQLITE + bool "SQLite3" + select BR2_PACKAGE_SQLITE + help + SQLite3 driver for PDO + +config BR2_PACKAGE_PHP_EXT_PDO_UNIXODBC + bool "unixODBC" + depends on !BR2_STATIC_LIBS # unixodbc + select BR2_PACKAGE_UNIXODBC + help + unixODBC driver for PDO + +comment "unixodbc driver needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +endif + +comment "Human language and character encoding support" + +config BR2_PACKAGE_PHP_EXT_GETTEXT + bool "Gettext" + depends on BR2_SYSTEM_ENABLE_NLS + help + Gettext support + +comment "Gettext support needs NLS enabled" + depends on !BR2_SYSTEM_ENABLE_NLS + +config BR2_PACKAGE_PHP_EXT_ICONV + bool "iconv" + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + iconv character set conversion support + +config BR2_PACKAGE_PHP_EXT_INTL + bool "intl" + depends on BR2_HOST_GCC_AT_LEAST_4_9 # icu + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # icu + depends on !BR2_BINFMT_FLAT # icu + depends on BR2_TOOLCHAIN_HAS_THREADS # icu + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_ICU + help + Internationalization support + +comment "intl support needs a toolchain w/ C++, wchar, threads, dynamic library, gcc >= 4.9, host gcc >= 4.9" + depends on !BR2_BINFMT_FLAT + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || \ + !BR2_HOST_GCC_AT_LEAST_4_9 + +config BR2_PACKAGE_PHP_EXT_MBSTRING + bool "mbstring" + select BR2_PACKAGE_ONIGURUMA + help + multibyte string support + +comment "Image processing" + +config BR2_PACKAGE_PHP_EXT_EXIF + bool "EXIF" + help + EXIF support + +config BR2_PACKAGE_PHP_EXT_GD + bool "GD" + select BR2_PACKAGE_FREETYPE + select BR2_PACKAGE_JPEG + select BR2_PACKAGE_LIBPNG + select BR2_PACKAGE_ZLIB + help + GD support + +comment "Mathematical extensions" + +config BR2_PACKAGE_PHP_EXT_BCMATH + bool "BC math" + help + BCMath arbitrary precision mathematics support + +config BR2_PACKAGE_PHP_EXT_GMP + bool "GMP" + select BR2_PACKAGE_GMP + help + GNU Multiple Precision support + +comment "Other basic extensions" + +config BR2_PACKAGE_PHP_EXT_JSON + bool "JSON" + help + JavaScript Object Serialization support + +config BR2_PACKAGE_PHP_EXT_TOKENIZER + bool "Tokenizer" + help + Tokenizer functions support + +comment "Other services" + +config BR2_PACKAGE_PHP_EXT_CURL + bool "cURL" + select BR2_PACKAGE_LIBCURL + help + cURL for URL streams + +config BR2_PACKAGE_PHP_EXT_FTP + bool "FTP" + help + FTP support + +config BR2_PACKAGE_PHP_EXT_SNMP + bool "SNMP" + depends on BR2_USE_MMU # netsnmp fork() + select BR2_PACKAGE_NETSNMP + select BR2_PACKAGE_NETSNMP_ENABLE_MIBS + help + SNMP support + +config BR2_PACKAGE_PHP_EXT_SOCKETS + bool "sockets" + help + Sockets support + +comment "Process Control" + +config BR2_PACKAGE_PHP_EXT_PCNTL + bool "PCNTL" + depends on BR2_USE_MMU # fork() + help + Process control support + +config BR2_PACKAGE_PHP_EXT_POSIX + bool "Posix" + default y + help + POSIX.1 (IEEE 1003.1) function support + +config BR2_PACKAGE_PHP_EXT_SHMOP + bool "shmop" + help + Shared memory support + +config BR2_PACKAGE_PHP_EXT_SYSVMSG + bool "sysvmsg" + help + System V message queue support + +config BR2_PACKAGE_PHP_EXT_SYSVSEM + bool "sysvsem" + help + System V semaphore support + +config BR2_PACKAGE_PHP_EXT_SYSVSHM + bool "sysvshm" + help + System V shared memory support + +comment "Variable and Type related" + +config BR2_PACKAGE_PHP_EXT_CTYPE + bool "Ctype" + help + Character type checking support + +config BR2_PACKAGE_PHP_EXT_FILTER + bool "Filter" + help + Input filter support + +comment "Web services" + +config BR2_PACKAGE_PHP_EXT_SOAP + bool "SOAP" + select BR2_PACKAGE_PHP_EXT_LIBXML2 + help + SOAP support + +config BR2_PACKAGE_PHP_EXT_XMLRPC + bool "XML-RPC" + select BR2_PACKAGE_PHP_EXT_LIBXML2 + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + XML-RPC support + +comment "XML manipulation" + +config BR2_PACKAGE_PHP_EXT_DOM + bool "DOM" + select BR2_PACKAGE_PHP_EXT_LIBXML2 + help + Document Object Model support + +config BR2_PACKAGE_PHP_EXT_LIBXML2 + bool "libxml" + select BR2_PACKAGE_LIBXML2 + help + libxml2 support + +config BR2_PACKAGE_PHP_EXT_SIMPLEXML + bool "SimpleXML" + select BR2_PACKAGE_PHP_EXT_LIBXML2 + help + SimpleXML support + +config BR2_PACKAGE_PHP_EXT_WDDX + bool "WDDX" + select BR2_PACKAGE_EXPAT + select BR2_PACKAGE_PHP_EXT_LIBXML2 + help + WDDX support + +config BR2_PACKAGE_PHP_EXT_XML + bool "XML Parser" + select BR2_PACKAGE_PHP_EXT_LIBXML2 + help + XML Parser support + +config BR2_PACKAGE_PHP_EXT_XMLREADER + bool "XMLReader" + select BR2_PACKAGE_PHP_EXT_LIBXML2 + help + XMLReader support + +config BR2_PACKAGE_PHP_EXT_XMLWRITER + bool "XMLWriter" + select BR2_PACKAGE_PHP_EXT_LIBXML2 + help + XMLWriter support + +config BR2_PACKAGE_PHP_EXT_XSL + bool "XSL" + select BR2_PACKAGE_PHP_EXT_DOM + select BR2_PACKAGE_PHP_EXT_LIBXML2 + select BR2_PACKAGE_LIBXSLT + help + XSL transformation support + +config BR2_PACKAGE_PHP_EXT_FFI + bool "FFI" + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_LIBFFI + help + Foreign Function Interface support + +comment "PHP FFI extension needs a toolchain w/ threads, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS + +endmenu diff --git a/package/php/Config.in b/package/php/Config.in new file mode 100644 index 00000000..6fa42042 --- /dev/null +++ b/package/php/Config.in @@ -0,0 +1,51 @@ +config BR2_PACKAGE_PHP + bool "php" + # PHP uses -export-dynamic, which breaks with elf2flt with a + # message like "ld.real: section .junk LMA [...,...] overlaps + # section .text LMA [...,...]" + depends on !BR2_BINFMT_FLAT + select BR2_PACKAGE_PHP_SAPI_CGI if \ + !BR2_PACKAGE_PHP_SAPI_APACHE && \ + !BR2_PACKAGE_PHP_SAPI_CLI && \ + !BR2_PACKAGE_PHP_SAPI_FPM && \ + BR2_USE_MMU + select BR2_PACKAGE_PHP_SAPI_CLI if !BR2_USE_MMU + select BR2_PACKAGE_PCRE2 + help + PHP is a widely-used general-purpose scripting + language that is especially suited for Web development + and can be embedded into HTML. + + http://www.php.net + +if BR2_PACKAGE_PHP + +config BR2_PACKAGE_PHP_SAPI_APACHE + bool "Apache interface" + depends on BR2_PACKAGE_APACHE + help + Apache module + +config BR2_PACKAGE_PHP_SAPI_CGI + bool "CGI interface" + # CGI uses fork() + depends on BR2_USE_MMU + help + Common Gateway Interface + +config BR2_PACKAGE_PHP_SAPI_CLI + bool "CLI interface" + help + Command Line Interface + +config BR2_PACKAGE_PHP_SAPI_FPM + bool "FPM interface" + depends on BR2_USE_MMU + # "Sparc v8 and predecessors are not and will not be supported" + depends on !BR2_sparc + help + PHP-FPM (FastCGI Process Manager) + +source "package/php/Config.ext" + +endif diff --git a/package/php/php-fpm.conf b/package/php/php-fpm.conf new file mode 100644 index 00000000..88014b8c --- /dev/null +++ b/package/php/php-fpm.conf @@ -0,0 +1,11 @@ +[www] +pm = ondemand +pm.process_idle_timeout = 120s +pm.max_children = 5 + +listen = /var/run/php-fpm.sock +listen.owner = www-data +listen.group = www-data +user = www-data +group = www-data + diff --git a/package/php/php.hash b/package/php/php.hash new file mode 100644 index 00000000..2280b3f9 --- /dev/null +++ b/package/php/php.hash @@ -0,0 +1,5 @@ +# From https://www.php.net/downloads.php +sha256 8e078cd7d2f49ac3fcff902490a5bb1addc885e7e3b0d8dd068f42c68297bde8 php-7.4.22.tar.xz + +# License file +sha256 a188db807d711536f71e27b7d36879d63480f7994dc18adc08e624b3c5430fff LICENSE diff --git a/package/php/php.mk b/package/php/php.mk new file mode 100644 index 00000000..41075b2f --- /dev/null +++ b/package/php/php.mk @@ -0,0 +1,369 @@ +################################################################################ +# +# php +# +################################################################################ + +PHP_VERSION = 7.4.22 +PHP_SITE = http://www.php.net/distributions +PHP_SOURCE = php-$(PHP_VERSION).tar.xz +PHP_INSTALL_STAGING = YES +PHP_INSTALL_STAGING_OPTS = INSTALL_ROOT=$(STAGING_DIR) install +PHP_INSTALL_TARGET_OPTS = INSTALL_ROOT=$(TARGET_DIR) install +PHP_DEPENDENCIES = host-pkgconf pcre2 +PHP_LICENSE = PHP-3.01 +PHP_LICENSE_FILES = LICENSE +PHP_CPE_ID_VENDOR = php +PHP_CONF_OPTS = \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info \ + --with-config-file-scan-dir=/etc/php.d \ + --disable-all \ + --with-external-pcre \ + --without-pear \ + --with-config-file-path=/etc \ + --disable-phpdbg \ + --disable-rpath +PHP_CONF_ENV = \ + EXTRA_LIBS="$(PHP_EXTRA_LIBS)" + +ifeq ($(BR2_STATIC_LIBS),y) +PHP_CONF_ENV += LIBS="$(PHP_STATIC_LIBS)" +endif + +ifeq ($(BR2_STATIC_LIBS)$(BR2_TOOLCHAIN_HAS_THREADS),yy) +PHP_STATIC_LIBS += -lpthread +endif + +ifeq ($(call qstrip,$(BR2_TARGET_LOCALTIME)),) +PHP_LOCALTIME = UTC +else +# Not q-stripping this value, as we need quotes in the php.ini file +PHP_LOCALTIME = $(BR2_TARGET_LOCALTIME) +endif + +# PHP can't be AUTORECONFed the standard way unfortunately +PHP_DEPENDENCIES += host-autoconf host-automake host-libtool +define PHP_BUILDCONF + cd $(@D) ; $(TARGET_MAKE_ENV) ./buildconf --force +endef +PHP_PRE_CONFIGURE_HOOKS += PHP_BUILDCONF + +ifeq ($(BR2_ENDIAN),"BIG") +PHP_CONF_ENV += ac_cv_c_bigendian_php=yes +else +PHP_CONF_ENV += ac_cv_c_bigendian_php=no +endif +PHP_CONFIG_SCRIPTS = php-config + +PHP_CFLAGS = $(TARGET_CFLAGS) +PHP_CXXFLAGS = $(TARGET_CXXFLAGS) + +# The OPcache extension isn't cross-compile friendly +# Throw some defines here to avoid patching heavily +ifeq ($(BR2_PACKAGE_PHP_EXT_OPCACHE),y) +PHP_CONF_OPTS += --enable-opcache +PHP_CONF_ENV += ac_cv_func_mprotect=yes +PHP_CFLAGS += \ + -DHAVE_SHM_IPC \ + -DHAVE_SHM_MMAP_ANON \ + -DHAVE_SHM_MMAP_ZERO \ + -DHAVE_SHM_MMAP_POSIX \ + -DHAVE_SHM_MMAP_FILE +endif + +# We need to force dl "detection" +ifeq ($(BR2_STATIC_LIBS),) +PHP_CONF_ENV += ac_cv_func_dlopen=yes ac_cv_lib_dl_dlopen=yes +PHP_EXTRA_LIBS += -ldl +else +PHP_CONF_ENV += ac_cv_func_dlopen=no ac_cv_lib_dl_dlopen=no +endif + +PHP_CONF_OPTS += $(if $(BR2_PACKAGE_PHP_SAPI_CLI),--enable-cli,--disable-cli) +PHP_CONF_OPTS += $(if $(BR2_PACKAGE_PHP_SAPI_CGI),--enable-cgi,--disable-cgi) +PHP_CONF_OPTS += $(if $(BR2_PACKAGE_PHP_SAPI_FPM),--enable-fpm,--disable-fpm) + +ifeq ($(BR2_PACKAGE_PHP_SAPI_APACHE),y) +PHP_DEPENDENCIES += apache +PHP_CONF_OPTS += --with-apxs2=$(STAGING_DIR)/usr/bin/apxs + +# Enable thread safety option if Apache MPM is event or worker +ifeq ($(BR2_PACKAGE_APACHE_MPM_EVENT)$(BR2_PACKAGE_APACHE_MPM_WORKER),y) +PHP_CONF_OPTS += --enable-maintainer-zts +endif +endif + +### Extensions +PHP_CONF_OPTS += \ + $(if $(BR2_PACKAGE_PHP_EXT_SOCKETS),--enable-sockets) \ + $(if $(BR2_PACKAGE_PHP_EXT_POSIX),--enable-posix) \ + $(if $(BR2_PACKAGE_PHP_EXT_SESSION),--enable-session) \ + $(if $(BR2_PACKAGE_PHP_EXT_DOM),--enable-dom) \ + $(if $(BR2_PACKAGE_PHP_EXT_SIMPLEXML),--enable-simplexml) \ + $(if $(BR2_PACKAGE_PHP_EXT_SOAP),--enable-soap) \ + $(if $(BR2_PACKAGE_PHP_EXT_XML),--enable-xml) \ + $(if $(BR2_PACKAGE_PHP_EXT_XMLREADER),--enable-xmlreader) \ + $(if $(BR2_PACKAGE_PHP_EXT_XMLWRITER),--enable-xmlwriter) \ + $(if $(BR2_PACKAGE_PHP_EXT_EXIF),--enable-exif) \ + $(if $(BR2_PACKAGE_PHP_EXT_FTP),--enable-ftp) \ + $(if $(BR2_PACKAGE_PHP_EXT_JSON),--enable-json) \ + $(if $(BR2_PACKAGE_PHP_EXT_TOKENIZER),--enable-tokenizer) \ + $(if $(BR2_PACKAGE_PHP_EXT_PCNTL),--enable-pcntl) \ + $(if $(BR2_PACKAGE_PHP_EXT_SHMOP),--enable-shmop) \ + $(if $(BR2_PACKAGE_PHP_EXT_SYSVMSG),--enable-sysvmsg) \ + $(if $(BR2_PACKAGE_PHP_EXT_SYSVSEM),--enable-sysvsem) \ + $(if $(BR2_PACKAGE_PHP_EXT_SYSVSHM),--enable-sysvshm) \ + $(if $(BR2_PACKAGE_PHP_EXT_ZIP),--with-zip) \ + $(if $(BR2_PACKAGE_PHP_EXT_CTYPE),--enable-ctype) \ + $(if $(BR2_PACKAGE_PHP_EXT_FILTER),--enable-filter) \ + $(if $(BR2_PACKAGE_PHP_EXT_CALENDAR),--enable-calendar) \ + $(if $(BR2_PACKAGE_PHP_EXT_FILEINFO),--enable-fileinfo) \ + $(if $(BR2_PACKAGE_PHP_EXT_BCMATH),--enable-bcmath) \ + $(if $(BR2_PACKAGE_PHP_EXT_PHAR),--enable-phar) + +ifeq ($(BR2_PACKAGE_PHP_EXT_LIBARGON2),y) +PHP_CONF_OPTS += --with-password-argon2=$(STAGING_DIR)/usr +PHP_DEPENDENCIES += libargon2 +endif + +ifeq ($(BR2_PACKAGE_PHP_EXT_LIBSODIUM),y) +PHP_CONF_OPTS += --with-sodium=$(STAGING_DIR)/usr +PHP_DEPENDENCIES += libsodium +endif + +ifeq ($(BR2_PACKAGE_PHP_EXT_MBSTRING),y) +PHP_CONF_OPTS += --enable-mbstring +PHP_DEPENDENCIES += oniguruma +endif + +ifeq ($(BR2_PACKAGE_PHP_EXT_MCRYPT),y) +PHP_CONF_OPTS += --with-mcrypt=$(STAGING_DIR)/usr +PHP_DEPENDENCIES += libmcrypt +endif + +ifeq ($(BR2_PACKAGE_PHP_EXT_OPENSSL),y) +PHP_CONF_OPTS += --with-openssl=$(STAGING_DIR)/usr +PHP_DEPENDENCIES += openssl +# openssl needs zlib, but the configure script forgets to link against +# it causing detection failures with static linking +PHP_STATIC_LIBS += `$(PKG_CONFIG_HOST_BINARY) --libs openssl` +endif + +ifeq ($(BR2_PACKAGE_PHP_EXT_LIBXML2),y) +PHP_CONF_ENV += php_cv_libxml_build_works=yes +PHP_CONF_OPTS += --with-libxml +PHP_DEPENDENCIES += libxml2 +endif + +ifeq ($(BR2_PACKAGE_PHP_EXT_WDDX),y) +PHP_CONF_OPTS += --enable-wddx --with-libexpat-dir=$(STAGING_DIR)/usr +PHP_DEPENDENCIES += expat +endif + +ifeq ($(BR2_PACKAGE_PHP_EXT_XMLRPC),y) +PHP_CONF_OPTS += \ + --with-xmlrpc \ + $(if $(BR2_PACKAGE_LIBICONV),--with-iconv-dir=$(STAGING_DIR)/usr) +PHP_DEPENDENCIES += $(if $(BR2_PACKAGE_LIBICONV),libiconv) +endif + +ifeq ($(BR2_PACKAGE_PHP_EXT_ZIP),y) +PHP_DEPENDENCIES += libzip +endif + +ifneq ($(BR2_PACKAGE_PHP_EXT_ZLIB)$(BR2_PACKAGE_PHP_EXT_ZIP),) +PHP_CONF_OPTS += --with-zlib=$(STAGING_DIR)/usr +PHP_DEPENDENCIES += zlib +else +PHP_CONF_OPTS += --disable-mysqlnd_compression_support +endif + +ifeq ($(BR2_PACKAGE_PHP_EXT_GETTEXT),y) +PHP_CONF_OPTS += --with-gettext=$(STAGING_DIR)/usr +PHP_DEPENDENCIES += $(TARGET_NLS_DEPENDENCIES) +endif + +ifeq ($(BR2_PACKAGE_PHP_EXT_ICONV),y) +ifeq ($(BR2_PACKAGE_LIBICONV),y) +PHP_CONF_OPTS += --with-iconv=$(STAGING_DIR)/usr +PHP_DEPENDENCIES += libiconv +else +PHP_CONF_OPTS += --with-iconv +endif +endif + +ifeq ($(BR2_PACKAGE_PHP_EXT_INTL),y) +PHP_CONF_OPTS += --enable-intl --with-icu-dir=$(STAGING_DIR)/usr +PHP_CXXFLAGS += "`$(STAGING_DIR)/usr/bin/icu-config --cxxflags`" +PHP_DEPENDENCIES += icu +# The intl module is implemented in C++, but PHP fails to use +# g++ as the compiler for the final link. As a workaround, +# tell it to link libstdc++. +PHP_EXTRA_LIBS += -lstdc++ +endif + +ifeq ($(BR2_PACKAGE_PHP_EXT_GMP),y) +PHP_CONF_OPTS += --with-gmp=$(STAGING_DIR)/usr +PHP_DEPENDENCIES += gmp +endif + +ifeq ($(BR2_PACKAGE_PHP_EXT_READLINE),y) +PHP_CONF_OPTS += --with-readline=$(STAGING_DIR)/usr +PHP_DEPENDENCIES += readline +endif + +### Native SQL extensions +ifeq ($(BR2_PACKAGE_PHP_EXT_MYSQLI),y) +PHP_CONF_OPTS += --with-mysqli +endif + +ifeq ($(BR2_PACKAGE_PHP_EXT_PGSQL),y) +PHP_CONF_OPTS += --with-pgsql=$(STAGING_DIR)/usr +PHP_DEPENDENCIES += postgresql +endif + +ifeq ($(BR2_PACKAGE_PHP_EXT_SQLITE),y) +PHP_CONF_OPTS += --with-sqlite3=$(STAGING_DIR)/usr +PHP_DEPENDENCIES += sqlite +PHP_STATIC_LIBS += `$(PKG_CONFIG_HOST_BINARY) --libs sqlite3` +endif + +### PDO +ifeq ($(BR2_PACKAGE_PHP_EXT_PDO),y) +PHP_CONF_OPTS += --enable-pdo +ifeq ($(BR2_PACKAGE_PHP_EXT_PDO_SQLITE),y) +PHP_CONF_OPTS += --with-pdo-sqlite=$(STAGING_DIR)/usr +PHP_DEPENDENCIES += sqlite +PHP_CFLAGS += -DSQLITE_OMIT_LOAD_EXTENSION +endif +ifeq ($(BR2_PACKAGE_PHP_EXT_PDO_MYSQL),y) +PHP_CONF_OPTS += --with-pdo-mysql +endif +ifeq ($(BR2_PACKAGE_PHP_EXT_PDO_POSTGRESQL),y) +PHP_CONF_OPTS += --with-pdo-pgsql=$(STAGING_DIR)/usr +PHP_DEPENDENCIES += postgresql +endif +ifeq ($(BR2_PACKAGE_PHP_EXT_PDO_UNIXODBC),y) +PHP_CONF_OPTS += --with-pdo-odbc=unixODBC,$(STAGING_DIR)/usr +PHP_DEPENDENCIES += unixodbc +endif +endif + +ifneq ($(BR2_PACKAGE_PHP_EXT_MYSQLI)$(BR2_PACKAGE_PHP_EXT_PDO_MYSQL),) +# Set default MySQL unix socket to what the MySQL server is using by default +PHP_CONF_OPTS += --with-mysql-sock=$(MYSQL_SOCKET) +endif + +define PHP_DISABLE_VALGRIND + $(SED) '/^#define HAVE_VALGRIND/d' $(@D)/main/php_config.h +endef +PHP_POST_CONFIGURE_HOOKS += PHP_DISABLE_VALGRIND + +ifeq ($(BR2_PACKAGE_PCRE2_JIT),y) +PHP_CONF_OPTS += --with-pcre-jit=yes +PHP_CONF_ENV += ac_cv_have_pcre2_jit=yes +else +PHP_CONF_OPTS += --with-pcre-jit=no +PHP_CONF_ENV += ac_cv_have_pcre2_jit=no +endif + +ifeq ($(BR2_PACKAGE_PHP_EXT_CURL),y) +PHP_CONF_OPTS += --with-curl +PHP_DEPENDENCIES += libcurl +endif + +ifeq ($(BR2_PACKAGE_PHP_EXT_XSL),y) +PHP_CONF_OPTS += --with-xsl=$(STAGING_DIR)/usr +PHP_DEPENDENCIES += libxslt +endif + +ifeq ($(BR2_PACKAGE_PHP_EXT_BZIP2),y) +PHP_CONF_OPTS += --with-bz2=$(STAGING_DIR)/usr +PHP_DEPENDENCIES += bzip2 +endif + +### DBA +ifeq ($(BR2_PACKAGE_PHP_EXT_DBA),y) +PHP_CONF_OPTS += --enable-dba +ifneq ($(BR2_PACKAGE_PHP_EXT_DBA_CDB),y) +PHP_CONF_OPTS += --without-cdb +endif +ifneq ($(BR2_PACKAGE_PHP_EXT_DBA_FLAT),y) +PHP_CONF_OPTS += --without-flatfile +endif +ifneq ($(BR2_PACKAGE_PHP_EXT_DBA_INI),y) +PHP_CONF_OPTS += --without-inifile +endif +ifeq ($(BR2_PACKAGE_PHP_EXT_DBA_DB4),y) +PHP_CONF_OPTS += --with-db4=$(STAGING_DIR)/usr +PHP_DEPENDENCIES += berkeleydb +endif +endif + +ifeq ($(BR2_PACKAGE_PHP_EXT_SNMP),y) +PHP_CONF_OPTS += --with-snmp=$(STAGING_DIR)/usr +PHP_DEPENDENCIES += netsnmp +endif + +ifeq ($(BR2_PACKAGE_PHP_EXT_GD),y) +PHP_CONF_OPTS += \ + --enable-gd \ + --with-jpeg \ + --with-freetype +PHP_DEPENDENCIES += jpeg libpng freetype zlib +endif + +ifeq ($(BR2_PACKAGE_PHP_EXT_FFI),y) +PHP_CONF_OPTS += --with-ffi +PHP_DEPENDENCIES += libffi +endif + +ifeq ($(BR2_PACKAGE_PHP_SAPI_FPM),y) +define PHP_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 $(@D)/sapi/fpm/init.d.php-fpm \ + $(TARGET_DIR)/etc/init.d/S49php-fpm +endef + +define PHP_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0644 $(@D)/sapi/fpm/php-fpm.service \ + $(TARGET_DIR)/usr/lib/systemd/system/php-fpm.service +endef + +define PHP_INSTALL_FPM_CONF + $(INSTALL) -D -m 0644 package/php/php-fpm.conf \ + $(TARGET_DIR)/etc/php-fpm.conf + rm -f $(TARGET_DIR)/etc/php-fpm.d/www.conf.default + # remove unused sample status page /usr/php/php/fpm/status.html + rm -rf $(TARGET_DIR)/usr/php +endef + +PHP_POST_INSTALL_TARGET_HOOKS += PHP_INSTALL_FPM_CONF +endif + +define PHP_EXTENSIONS_FIXUP + $(SED) "/prefix/ s:/usr:$(STAGING_DIR)/usr:" \ + $(STAGING_DIR)/usr/bin/phpize + $(SED) "/extension_dir/ s:/usr:$(TARGET_DIR)/usr:" \ + $(STAGING_DIR)/usr/bin/php-config +endef + +PHP_POST_INSTALL_TARGET_HOOKS += PHP_EXTENSIONS_FIXUP + +define PHP_INSTALL_FIXUP + rm -rf $(TARGET_DIR)/usr/lib/php/build + rm -f $(TARGET_DIR)/usr/bin/phpize + $(INSTALL) -D -m 0755 $(PHP_DIR)/php.ini-production \ + $(TARGET_DIR)/etc/php.ini + $(SED) 's%;date.timezone =.*%date.timezone = $(PHP_LOCALTIME)%' \ + $(TARGET_DIR)/etc/php.ini + $(if $(BR2_PACKAGE_PHP_EXT_OPCACHE), + $(SED) '/;extension=php_xsl.dll/azend_extension=opcache.so' \ + $(TARGET_DIR)/etc/php.ini) +endef + +PHP_POST_INSTALL_TARGET_HOOKS += PHP_INSTALL_FIXUP + +PHP_CONF_ENV += CFLAGS="$(PHP_CFLAGS)" CXXFLAGS="$(PHP_CXXFLAGS)" + +$(eval $(autotools-package)) diff --git a/package/physfs/Config.in b/package/physfs/Config.in new file mode 100644 index 00000000..c272d887 --- /dev/null +++ b/package/physfs/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PHYSFS + bool "physfs" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + help + PhysicsFS; a portable, flexible file i/o abstraction. + + http://icculus.org/physfs + +comment "physfs needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/physfs/physfs.hash b/package/physfs/physfs.hash new file mode 100644 index 00000000..a2219edd --- /dev/null +++ b/package/physfs/physfs.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 304df76206d633df5360e738b138c94e82ccf086e50ba84f456d3f8432f9f863 physfs-3.0.2.tar.bz2 +sha256 d80c0b09a1c98c61667ea044eefa2fd98fb70bd5fe12c49ff52b1fc2289a6583 LICENSE.txt diff --git a/package/physfs/physfs.mk b/package/physfs/physfs.mk new file mode 100644 index 00000000..9a3bd441 --- /dev/null +++ b/package/physfs/physfs.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# physfs +# +################################################################################ + +PHYSFS_VERSION = 3.0.2 +PHYSFS_SOURCE = physfs-$(PHYSFS_VERSION).tar.bz2 +PHYSFS_SITE = https://icculus.org/physfs/downloads + +PHYSFS_LICENSE = Zlib +PHYSFS_LICENSE_FILES = LICENSE.txt + +PHYSFS_INSTALL_STAGING = YES + +PHYSFS_CONF_OPTS = -DPHYSFS_BUILD_TEST=OFF + +ifeq ($(BR2_SHARED_LIBS)$(BR2_SHARED_STATIC_LIBS),y) +PHYSFS_CONF_OPTS += -DPHYSFS_BUILD_SHARED=ON +else +PHYSFS_CONF_OPTS += -DPHYSFS_BUILD_SHARED=OFF +endif + +ifeq ($(BR2_STATIC_LIBS)$(BR2_SHARED_STATIC_LIBS),y) +PHYSFS_CONF_OPTS += -DPHYSFS_BUILD_STATIC=ON +else +PHYSFS_CONF_OPTS += -DPHYSFS_BUILD_STATIC=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/phytool/Config.in b/package/phytool/Config.in new file mode 100644 index 00000000..985468f1 --- /dev/null +++ b/package/phytool/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PHYTOOL + bool "phytool" + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7 # linux/mdio.h + help + Linux MDIO register access utility. + + https://github.com/wkz/phytool + +comment "phytool needs a toolchain w/ headers >= 3.7" + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7 diff --git a/package/phytool/phytool.hash b/package/phytool/phytool.hash new file mode 100644 index 00000000..b6bfd813 --- /dev/null +++ b/package/phytool/phytool.hash @@ -0,0 +1,5 @@ +# md5 from https://github.com/wkz/phytool/releases/download/v2/phytool-2.tar.xz.md5 +# sha256 locally computed: +md5 972982f8e5f7237cbccfc6d275da7348 phytool-2.tar.xz +sha256 9901a14e8c6af02b7333c60b21ff81f50620e8326d54827185e5617ff9b11d21 phytool-2.tar.xz +sha256 f9c375a1be4a41f7b70301dd83c91cb89e41567478859b77eef375a52d782505 LICENSE diff --git a/package/phytool/phytool.mk b/package/phytool/phytool.mk new file mode 100644 index 00000000..3de66661 --- /dev/null +++ b/package/phytool/phytool.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# phytool +# +################################################################################ + +PHYTOOL_VERSION = 2 +PHYTOOL_SOURCE = phytool-$(PHYTOOL_VERSION).tar.xz +PHYTOOL_SITE = https://github.com/wkz/phytool/releases/download/v$(PHYTOOL_VERSION) +PHYTOOL_LICENSE = GPL-2.0+ +PHYTOOL_LICENSE_FILES = LICENSE + +define PHYTOOL_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + LDLIBS="$(TARGET_LDFLAGS)" +endef + +define PHYTOOL_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + DESTDIR="$(TARGET_DIR)" \ + PREFIX="usr" install +endef + +$(eval $(generic-package)) diff --git a/package/picocom/0001-Compile-with-libc-s-without-cispeed-cospeed.patch b/package/picocom/0001-Compile-with-libc-s-without-cispeed-cospeed.patch new file mode 100644 index 00000000..5143e311 --- /dev/null +++ b/package/picocom/0001-Compile-with-libc-s-without-cispeed-cospeed.patch @@ -0,0 +1,49 @@ +From 30c712c5f14306460c44bea70e24419db9d44f8c Mon Sep 17 00:00:00 2001 +From: Nick Patavalis +Date: Thu, 12 Apr 2018 15:16:04 +0300 +Subject: [PATCH] Compile with libc's without cispeed / cospeed + +Some libc implementations (e.g. musl) do not define the cispeed and +cospeed struct termios fields. So we have to check the +_HAVE_STRUCT_TERMIOS_C_ISPEED and _HAVE_STRUCT_TERMIOS_C_OSPEED +macros. If not defined, we disable custom baudrate support. + +[baruch: backported from upstream master to 3.1] +Signed-off-by: Baruch Siach +--- +Upstream status: commit 1acf1ddabaf3 + + custbaud.h | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/custbaud.h b/custbaud.h +index 48151a4a4e84..ae4ae8daf49e 100644 +--- a/custbaud.h ++++ b/custbaud.h +@@ -26,6 +26,8 @@ + #ifndef CUSTBAUD_H + #define CUSTBAUD_H + ++#include ++ + #ifndef NO_CUSTOM_BAUD + + #if defined (__linux__) +@@ -33,7 +35,13 @@ + /* Enable by-default for kernels > 2.6.0 on x86 and x86_64 only */ + #include + #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) +-#if defined (__i386__) || defined (__x86_64__) || defined (USE_CUSTOM_BAUD) ++/* Some libc implementations (e.g. musl) do not define the cispeed and ++ cospeed struct termios fields. We do not support custom baudrates ++ on them. */ ++#if ( (defined (__i386__) || defined (__x86_64__)) \ ++ && defined (_HAVE_STRUCT_TERMIOS_C_ISPEED) \ ++ && defined (_HAVE_STRUCT_TERMIOS_C_OSPEED) ) \ ++ || defined (USE_CUSTOM_BAUD) + #ifndef USE_CUSTOM_BAUD + #define USE_CUSTOM_BAUD + #endif +-- +2.16.3 + diff --git a/package/picocom/Config.in b/package/picocom/Config.in new file mode 100644 index 00000000..9f8efc4a --- /dev/null +++ b/package/picocom/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PICOCOM + bool "picocom" + depends on BR2_USE_MMU # fork() + help + picocom is a minimal dumb-terminal emulation program. It is, + in principle, very much like minicom, only it's pico instead + of mini! + + https://github.com/npat-efault/picocom/ diff --git a/package/picocom/picocom.hash b/package/picocom/picocom.hash new file mode 100644 index 00000000..28f2d9cd --- /dev/null +++ b/package/picocom/picocom.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 e6761ca932ffc6d09bd6b11ff018bdaf70b287ce518b3282d29e0270e88420bb picocom-3.1.tar.gz +sha256 9273c6b2c55be95f0f0df292d87e8900e5bfdf5b510a6ea09e80306cf45c10f6 LICENSE.txt diff --git a/package/picocom/picocom.mk b/package/picocom/picocom.mk new file mode 100644 index 00000000..2d585bb2 --- /dev/null +++ b/package/picocom/picocom.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# picocom +# +################################################################################ + +PICOCOM_VERSION = 3.1 +PICOCOM_SITE = $(call github,npat-efault,picocom,$(PICOCOM_VERSION)) +PICOCOM_LICENSE = GPL-2.0+ +PICOCOM_LICENSE_FILES = LICENSE.txt +PICOCOM_CPE_ID_VENDOR = picocom_project + +define PICOCOM_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) +endef + +define PICOCOM_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/picocom $(TARGET_DIR)/usr/bin/picocom +endef + +$(eval $(generic-package)) diff --git a/package/pifmrds/0001-Makefile-cross-compile-friendly.patch b/package/pifmrds/0001-Makefile-cross-compile-friendly.patch new file mode 100644 index 00000000..414d97c1 --- /dev/null +++ b/package/pifmrds/0001-Makefile-cross-compile-friendly.patch @@ -0,0 +1,37 @@ +Makefile: make it cross-compile (and Buildroot) friendly. + +The current Makefile makes heavy assumptions that it is doing native +compilation on the RPi, as it checks that `uname -m` is an ARM machine. + +This is wrong in the cross-compilation case. + +Remove the conditional altogether, and do not override the CFLAGS +as passed in the environment (Buildroot passes proper CFLAGS). + +[intial patch by: Eric Limpens ] +Signed-off-by: "Yann E. MORIN" + +diff -durN pifmrds-c67306ea9b8d827f45e0d90279d367e97119bcb1.orig/src/Makefile pifmrds-c67306ea9b8d827f45e0d90279d367e97119bcb1/src/Makefile +--- pifmrds-c67306ea9b8d827f45e0d90279d367e97119bcb1.orig/src/Makefile 2014-05-04 18:21:40.000000000 +0200 ++++ pifmrds-c67306ea9b8d827f45e0d90279d367e97119bcb1/src/Makefile 2014-06-21 16:38:31.971804343 +0200 +@@ -1,20 +1,8 @@ + CC = gcc +-STD_CFLAGS = -Wall -std=gnu99 -c -g -O3 + +-# Enable ARM-specific options only on ARM, and compilation of the app only on ARM +-UNAME := $(shell uname -m) +- +-ifeq ($(UNAME), armv6l) +- CFLAGS = $(STD_CFLAGS) -march=armv6 -mtune=arm1176jzf-s -mfloat-abi=hard -mfpu=vfp -ffast-math +- + app: rds.o waveforms.o pi_fm_rds.o fm_mpx.o control_pipe.o + $(CC) -o pi_fm_rds rds.o waveforms.o pi_fm_rds.o fm_mpx.o control_pipe.o -lm -lsndfile + +-else +- CFLAGS = $(STD_CFLAGS) +-endif +- +- + rds_wav: rds.o waveforms.o rds_wav.o fm_mpx.o + $(CC) -o rds_wav rds_wav.o rds.o waveforms.o fm_mpx.o -lm -lsndfile + diff --git a/package/pifmrds/0002-Makefile-use-LDFLAGS.patch b/package/pifmrds/0002-Makefile-use-LDFLAGS.patch new file mode 100644 index 00000000..54c14270 --- /dev/null +++ b/package/pifmrds/0002-Makefile-use-LDFLAGS.patch @@ -0,0 +1,20 @@ +Makefile: use LDFLAGS when linking + +Signed-off-by: "Yann E. MORIN" + +diff -durN pifmrds-c67306ea9b8d827f45e0d90279d367e97119bcb1.orig/src/Makefile pifmrds-c67306ea9b8d827f45e0d90279d367e97119bcb1/src/Makefile +--- pifmrds-c67306ea9b8d827f45e0d90279d367e97119bcb1.orig/src/Makefile 2014-06-21 16:46:49.101118754 +0200 ++++ pifmrds-c67306ea9b8d827f45e0d90279d367e97119bcb1/src/Makefile 2014-06-21 16:47:47.801745683 +0200 +@@ -1,10 +1,10 @@ + CC = gcc + + app: rds.o waveforms.o pi_fm_rds.o fm_mpx.o control_pipe.o +- $(CC) -o pi_fm_rds rds.o waveforms.o pi_fm_rds.o fm_mpx.o control_pipe.o -lm -lsndfile ++ $(CC) $(LDFLAGS) -o pi_fm_rds rds.o waveforms.o pi_fm_rds.o fm_mpx.o control_pipe.o -lm -lsndfile + + rds_wav: rds.o waveforms.o rds_wav.o fm_mpx.o +- $(CC) -o rds_wav rds_wav.o rds.o waveforms.o fm_mpx.o -lm -lsndfile ++ $(CC) $(LDFLAGS) -o rds_wav rds_wav.o rds.o waveforms.o fm_mpx.o -lm -lsndfile + + rds.o: rds.c waveforms.h + $(CC) $(CFLAGS) rds.c diff --git a/package/pifmrds/0003-Makefile-fix-static-link.patch b/package/pifmrds/0003-Makefile-fix-static-link.patch new file mode 100644 index 00000000..3832b77d --- /dev/null +++ b/package/pifmrds/0003-Makefile-fix-static-link.patch @@ -0,0 +1,25 @@ +Makefile: Fix static linking + +Since libsndfile uses funtions from libm, the -lm should be specified +after libsndfile for static linking. + +Signed-off-by: "Eric Limpens" +[Fabrice: add $(SNDFILE_LIBS) to pass all dependencies from pkg-config] +Signed-off-by: Fabrice Fontaine + +diff -purN pifmrds-0bf57f9ce0d954365a38d8af8e7be6f28521c3f2.orig/src/Makefile pifmrds-0bf57f9ce0d954365a38d8af8e7be6f28521c3f2/src/Makefile +--- pifmrds-0bf57f9ce0d954365a38d8af8e7be6f28521c3f2.orig/src/Makefile 2016-02-26 08:06:43.102962592 +0100 ++++ pifmrds-0bf57f9ce0d954365a38d8af8e7be6f28521c3f2/src/Makefile 2016-02-26 08:27:11.069148203 +0100 +@@ -1,10 +1,10 @@ + CC = gcc + + app: rds.o waveforms.o pi_fm_rds.o fm_mpx.o control_pipe.o +- $(CC) $(LDFLAGS) -o pi_fm_rds rds.o waveforms.o pi_fm_rds.o fm_mpx.o control_pipe.o -lm -lsndfile ++ $(CC) $(LDFLAGS) -o pi_fm_rds rds.o waveforms.o pi_fm_rds.o fm_mpx.o control_pipe.o $(SNDFILE_LIBS) -lm + + rds_wav: rds.o waveforms.o rds_wav.o fm_mpx.o +- $(CC) $(LDFLAGS) -o rds_wav rds_wav.o rds.o waveforms.o fm_mpx.o -lm -lsndfile ++ $(CC) $(LDFLAGS) -o rds_wav rds_wav.o rds.o waveforms.o fm_mpx.o $(SNDFILE_LIBS) -lm + + rds.o: rds.c waveforms.h + $(CC) $(CFLAGS) rds.c diff --git a/package/pifmrds/Config.in b/package/pifmrds/Config.in new file mode 100644 index 00000000..6d492683 --- /dev/null +++ b/package/pifmrds/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PIFMRDS + bool "pifmrds" + depends on BR2_arm + select BR2_PACKAGE_LIBSNDFILE + help + pifmrds, FM-RDS transmitter using the Raspberry Pi's PWM + + https://github.com/ChristopheJacquet/PiFmRds diff --git a/package/pifmrds/pifmrds.hash b/package/pifmrds/pifmrds.hash new file mode 100644 index 00000000..b0949ca1 --- /dev/null +++ b/package/pifmrds/pifmrds.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 2afc9f3c9fc206ba32865d7dd77f3a97d7d86dcfc9b44eeb5665e8fddaafcf44 pifmrds-0bf57f9ce0d954365a38d8af8e7be6f28521c3f2.tar.gz +sha256 fe3eea6c599e23a00c08c5f5cb2320c30adc8f8687db5fcec9b79a662c53ff6b LICENSE diff --git a/package/pifmrds/pifmrds.mk b/package/pifmrds/pifmrds.mk new file mode 100644 index 00000000..33c13bae --- /dev/null +++ b/package/pifmrds/pifmrds.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# pifmrds +# +################################################################################ + +PIFMRDS_VERSION = 0bf57f9ce0d954365a38d8af8e7be6f28521c3f2 +PIFMRDS_SITE = $(call github,ChristopheJacquet,PiFmRds,$(PIFMRDS_VERSION)) +PIFMRDS_DEPENDENCIES = host-pkgconf libsndfile +PIFMRDS_LICENSE = GPL-3.0+ +PIFMRDS_LICENSE_FILES = LICENSE + +define PIFMRDS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/src CC="$(TARGET_CC)" LDFLAGS="$(TARGET_LDFLAGS)" \ + CFLAGS="$(TARGET_CFLAGS) -std=gnu99 -ffast-math -c" \ + SNDFILE_LIBS="`$(PKG_CONFIG_HOST_BINARY) --libs sndfile`" \ + app rds_wav +endef + +define PIFMRDS_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/src/pi_fm_rds $(TARGET_DIR)/usr/bin/pi_fm_rds + $(INSTALL) -D -m 0755 $(@D)/src/rds_wav $(TARGET_DIR)/usr/bin/rds_wav +endef + +$(eval $(generic-package)) diff --git a/package/piglit/Config.in b/package/piglit/Config.in new file mode 100644 index 00000000..736fd95d --- /dev/null +++ b/package/piglit/Config.in @@ -0,0 +1,35 @@ +config BR2_PACKAGE_PIGLIT + bool "piglit" + depends on BR2_PACKAGE_PYTHON3 # python3 only script + depends on BR2_PACKAGE_PYTHON_NUMPY_ARCH_SUPPORTS + depends on BR2_PACKAGE_WAFFLE_SUPPORTS_GLX || \ + BR2_PACKAGE_WAFFLE_SUPPORTS_WAYLAND || \ + BR2_PACKAGE_WAFFLE_SUPPORTS_X11_EGL || \ + BR2_PACKAGE_WAFFLE_SUPPORTS_GBM + depends on BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_MUSL # python-numpy + select BR2_PACKAGE_LIBDRM if BR2_PACKAGE_HAS_LIBGL + select BR2_PACKAGE_LIBPNG + select BR2_PACKAGE_LIBXKBCOMMON if BR2_PACKAGE_WAYLAND + select BR2_PACKAGE_MESA3D_DEMOS # glxinfo + select BR2_PACKAGE_PYTHON_MAKO + select BR2_PACKAGE_PYTHON_NUMPY + select BR2_PACKAGE_PYTHON_SIX + select BR2_PACKAGE_PYTHON3_BZIP2 + select BR2_PACKAGE_PYTHON3_PYEXPAT + select BR2_PACKAGE_PYTHON3_XZ + select BR2_PACKAGE_PYTHON3_ZLIB + select BR2_PACKAGE_UTIL_LINUX # runtime + select BR2_PACKAGE_UTIL_LINUX_BINARIES # requires real dmesg tool + select BR2_PACKAGE_WAFFLE # wflinfo, libwaffle-1 + select BR2_PACKAGE_XLIB_LIBX11 if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBXEXT if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XORGPROTO if BR2_PACKAGE_XORG7 + select BR2_PACKAGE_ZLIB + help + Piglit is an open-source test suite for OpenGL + implementations. + + https://piglit.freedesktop.org + +comment "piglit needs glibc or musl" + depends on !(BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_MUSL) diff --git a/package/piglit/piglit.hash b/package/piglit/piglit.hash new file mode 100644 index 00000000..923569a6 --- /dev/null +++ b/package/piglit/piglit.hash @@ -0,0 +1,6 @@ +# Locally calculated +sha256 ec2a80c49f10761980334f1591be54ee6f365165d7ac637270b4ca15a12ad674 piglit-2affee53f3ad7a96f5b397a2b6d6408af8a374b0-br1.tar.gz +sha256 dcc398730859aee7cc1d6aa57f526f8d181b47bb3a49830e85b5723d5bc2c3bc COPYING +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 licences/GPL-2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 licences/GPL-3 +sha256 b7993225104d90ddd8024fd838faf300bea5e83d91203eab98e29512acebd69c licences/LGPL-2 diff --git a/package/piglit/piglit.mk b/package/piglit/piglit.mk new file mode 100644 index 00000000..4d17405d --- /dev/null +++ b/package/piglit/piglit.mk @@ -0,0 +1,72 @@ +################################################################################ +# +# piglit +# +################################################################################ + +PIGLIT_VERSION = 2affee53f3ad7a96f5b397a2b6d6408af8a374b0 +PIGLIT_SITE = https://gitlab.freedesktop.org/mesa/piglit.git +PIGLIT_SITE_METHOD = git +PIGLIT_LICENSE = MIT (code), \ + LGPL-2.0+ (tests/glslparsertest/glsl2/gst-gl-*), \ + LGPL-2.1+ (some tests), \ + GPL-3.0 (tests/glslparsertest/glsl2/norsetto-*), \ + GPL-2.0+ (tests/glslparsertest/glsl2/xreal-*, some other shaders), \ + BSD-3-Clause (tests/glslparsertest/shaders/*) +PIGLIT_LICENSE_FILES = COPYING licences/GPL-2 licences/GPL-3 licences/LGPL-2 + +PIGLIT_DEPENDENCIES = host-pkgconf \ + host-python-mako \ + host-python-numpy \ + host-python-six \ + libpng \ + python-mako \ + python-numpy \ + python-six \ + waffle \ + zlib + +PIGLIT_CONF_OPTS += \ + -DPIGLIT_USE_WAFFLE=ON \ + -DPIGLIT_BUILD_CL_TESTS=OFF \ + -DPIGLIT_BUILD_WGL_TESTS=OFF \ + -DPYTHON_EXECUTABLE=$(HOST_DIR)/bin/python3 + +ifeq ($(BR2_PACKAGE_XORG7),y) +# libxcb for xcb-dri2 +PIGLIT_DEPENDENCIES += \ + xlib_libX11 \ + xlib_libXext \ + xorgproto \ + $(if $(BR2_PACKAGE_LIBXCB),libxcb) +endif + +ifeq ($(BR2_PACKAGE_HAS_LIBGL),y) +PIGLIT_DEPENDENCIES += libgl libdrm +PIGLIT_CONF_OPTS += -DPIGLIT_BUILD_GL_TESTS=ON +else +PIGLIT_CONF_OPTS += -DPIGLIT_BUILD_GL_TESTS=OFF +endif + +ifeq ($(BR2_PACKAGE_XORG7)$(BR2_PACKAGE_HAS_LIBGL),yy) +PIGLIT_CONF_OPTS += -DPIGLIT_BUILD_GLX_TESTS=ON +else +PIGLIT_CONF_OPTS += -DPIGLIT_BUILD_GLX_TESTS=OFF +endif + +ifeq ($(BR2_PACKAGE_HAS_LIBEGL)$(BR2_PACKAGE_HAS_LIBGLES),yy) +PIGLIT_DEPENDENCIES += libegl +PIGLIT_CONF_OPTS += -DPIGLIT_BUILD_GLES1_TESTS=ON \ + -DPIGLIT_BUILD_GLES2_TESTS=ON \ + -DPIGLIT_BUILD_GLES3_TESTS=ON +else +PIGLIT_CONF_OPTS += -DPIGLIT_BUILD_GLES1_TESTS=OFF \ + -DPIGLIT_BUILD_GLES2_TESTS=OFF \ + -DPIGLIT_BUILD_GLES3_TESTS=OFF +endif + +ifeq ($(BR2_PACKAGE_WAYLAND),y) +PIGLIT_DEPENDENCIES += wayland libxkbcommon +endif + +$(eval $(cmake-package)) diff --git a/package/pigpio/Config.in b/package/pigpio/Config.in new file mode 100644 index 00000000..2180ab0d --- /dev/null +++ b/package/pigpio/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_PIGPIO + bool "pigpio" + depends on BR2_aarch64 || BR2_arm + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + help + Pigpio is a library for the Raspberry Pi which allows + control of the General Purpose Input Outputs (GPIO). + + http://abyz.me.uk/rpi/pigpio/ + +comment "pigpio needs a toolchain w/ threads, dynamic library" + depends on BR2_aarch64 || BR2_arm + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/pigpio/S50pigpio b/package/pigpio/S50pigpio new file mode 100644 index 00000000..8b7b6815 --- /dev/null +++ b/package/pigpio/S50pigpio @@ -0,0 +1,50 @@ +#!/bin/sh + +DAEMON="pigpiod" +PIDFILE="/var/run/pigpio.pid" + +PIGPIOD_ARGS="" + +[ -r "/etc/default/pigpio" ] && . "/etc/default/pigpio" + +start() { + printf 'Starting %s: ' "$DAEMON" + start-stop-daemon -S -q -x "/usr/bin/$DAEMON" -- $PIGPIOD_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + rm -f "$PIDFILE" + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +case "$1" in + start|stop|restart) + "$1";; + reload) + # Restart, since there is no true "reload" feature. + restart;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/pigpio/pigpio.hash b/package/pigpio/pigpio.hash new file mode 100644 index 00000000..b6de0c19 --- /dev/null +++ b/package/pigpio/pigpio.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 ef4a4dc7ca8ca2f97fbdb9fd75586f61be7222d0f6c14e58af6c9192ad42f682 pigpio-78.tar.gz +sha256 6a90b88421a0d9b090e121daa11b3c6d55eed5eeb3281a2fcc454d6a28b5547c UNLICENCE diff --git a/package/pigpio/pigpio.mk b/package/pigpio/pigpio.mk new file mode 100644 index 00000000..345b315c --- /dev/null +++ b/package/pigpio/pigpio.mk @@ -0,0 +1,51 @@ +################################################################################ +# +# pigpio +# +################################################################################ + +PIGPIO_VERSION = 78 +PIGPIO_SITE = $(call github,joan2937,pigpio,v$(PIGPIO_VERSION)) +PIGPIO_LICENSE = Unlicense +PIGPIO_LICENSE_FILES = UNLICENCE +PIGPIO_INSTALL_STAGING = YES + +define PIGPIO_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) +endef + +define PIGPIO_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/pig2vcd $(TARGET_DIR)/usr/bin/pig2vcd + $(INSTALL) -D -m 0755 $(@D)/pigpiod $(TARGET_DIR)/usr/bin/pigpiod + $(INSTALL) -D -m 0755 $(@D)/pigs $(TARGET_DIR)/usr/bin/pigs + $(INSTALL) -D -m 0755 $(@D)/libpigpio.so.1 $(TARGET_DIR)/usr/lib/libpigpio.so.1 + $(INSTALL) -D -m 0755 $(@D)/libpigpiod_if.so.1 $(TARGET_DIR)/usr/lib/libpigpiod_if.so.1 + $(INSTALL) -D -m 0755 $(@D)/libpigpiod_if2.so.1 $(TARGET_DIR)/usr/lib/libpigpiod_if2.so.1 + ln -sf libpigpio.so.1 $(TARGET_DIR)/usr/lib/libpigpio.so + ln -sf libpigpiod_if.so.1 $(TARGET_DIR)/usr/lib/libpigpiod_if.so + ln -sf libpigpiod_if2.so.1 $(TARGET_DIR)/usr/lib/libpigpiod_if2.so +endef + +define PIGPIO_INSTALL_STAGING_CMDS + $(INSTALL) -D -m 0755 $(@D)/libpigpio.so.1 $(STAGING_DIR)/usr/lib/libpigpio.so.1 + $(INSTALL) -D -m 0755 $(@D)/libpigpiod_if.so.1 $(STAGING_DIR)/usr/lib/libpigpiod_if.so.1 + $(INSTALL) -D -m 0755 $(@D)/libpigpiod_if2.so.1 $(STAGING_DIR)/usr/lib/libpigpiod_if2.so.1 + $(INSTALL) -D -m 0644 $(@D)/pigpio.h $(STAGING_DIR)/usr/include/pigpio.h + $(INSTALL) -D -m 0644 $(@D)/pigpiod_if.h $(STAGING_DIR)/usr/include/pigpiod_if.h + $(INSTALL) -D -m 0644 $(@D)/pigpiod_if2.h $(STAGING_DIR)/usr/include/pigpiod_if2.h + ln -sf libpigpio.so.1 $(STAGING_DIR)/usr/lib/libpigpio.so + ln -sf libpigpiod_if.so.1 $(STAGING_DIR)/usr/lib/libpigpiod_if.so + ln -sf libpigpiod_if2.so.1 $(STAGING_DIR)/usr/lib/libpigpiod_if2.so +endef + +define PIGPIO_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 package/pigpio/S50pigpio \ + $(TARGET_DIR)/etc/init.d/S50pigpio +endef + +define PIGPIO_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/pigpio/pigpio.service \ + $(TARGET_DIR)/usr/lib/systemd/system/pigpio.service +endef + +$(eval $(generic-package)) diff --git a/package/pigpio/pigpio.service b/package/pigpio/pigpio.service new file mode 100644 index 00000000..135624cc --- /dev/null +++ b/package/pigpio/pigpio.service @@ -0,0 +1,10 @@ +[Unit] +Description=Pigpio daemon +After=network.target + +[Service] +EnvironmentFile=-/etc/default/pigpio +ExecStart=/usr/bin/pigpiod -g $PIGPIOD_ARGS + +[Install] +WantedBy=multi-user.target diff --git a/package/pigz/Config.in b/package/pigz/Config.in new file mode 100644 index 00000000..af229060 --- /dev/null +++ b/package/pigz/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_PIGZ + bool "pigz" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_ZLIB + help + pigz, which stands for parallel implementation of gzip, is a + fully functional replacement for gzip that exploits multiple + processors and multiple cores to the hilt when compressing + data. + + http://www.zlib.net/pigz/ + +comment "pigz needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/pigz/Config.in.host b/package/pigz/Config.in.host new file mode 100644 index 00000000..9903cada --- /dev/null +++ b/package/pigz/Config.in.host @@ -0,0 +1,9 @@ +config BR2_PACKAGE_HOST_PIGZ + bool "host pigz" + help + pigz, which stands for parallel implementation of gzip, is a + fully functional replacement for gzip that exploits multiple + processors and multiple cores to the hilt when compressing + data. + + http://www.zlib.net/pigz/ diff --git a/package/pigz/pigz.hash b/package/pigz/pigz.hash new file mode 100644 index 00000000..512bf785 --- /dev/null +++ b/package/pigz/pigz.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 577673676cd5c7219f94b236075451220bae3e1ca451cf849947a2998fbf5820 pigz-2.6.tar.gz +sha256 830b3e1b05cc20f443d89d7d8703a3c63fd64c57ab716f5e81fd178517df1e11 README diff --git a/package/pigz/pigz.mk b/package/pigz/pigz.mk new file mode 100644 index 00000000..3e5e8927 --- /dev/null +++ b/package/pigz/pigz.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# pigz +# +################################################################################ + +PIGZ_VERSION = 2.6 +PIGZ_SITE = $(call github,madler,pigz,v$(PIGZ_VERSION)) +PIGZ_DEPENDENCIES = zlib +HOST_PIGZ_DEPENDENCIES = host-zlib +PIGZ_LICENSE = Zlib +PIGZ_LICENSE_FILES = README +PIGZ_CPE_ID_VENDOR = zlib + +define PIGZ_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) +endef + +define HOST_PIGZ_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) $(HOST_CONFIGURE_OPTS) -C $(@D) +endef + +define PIGZ_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/pigz $(TARGET_DIR)/usr/bin/pigz +endef + +define HOST_PIGZ_INSTALL_CMDS + $(INSTALL) -D -m 0755 $(@D)/pigz $(HOST_DIR)/bin/pigz +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/pimd/Config.in b/package/pimd/Config.in new file mode 100644 index 00000000..718f84f4 --- /dev/null +++ b/package/pimd/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PIMD + bool "pimd" + depends on BR2_USE_MMU # fork() + help + pimd is a lightweight stand-alone PIM-SM v2 multicast routing + daemon. + + http://troglobit.com/projects/pimd/ diff --git a/package/pimd/pimd.hash b/package/pimd/pimd.hash new file mode 100644 index 00000000..98c717d2 --- /dev/null +++ b/package/pimd/pimd.hash @@ -0,0 +1,6 @@ +# Locally computed: +sha256 c77a9812751f114490a28a6839b16aac8b020c8d9fd6aa22bf3880c054e19f1d pimd-2.3.2.tar.gz + +# Hash for license files: +sha256 3379436c16caccdef9b40a49fbdfdbb45aad8ecb05870834490b8fb080126009 LICENSE +sha256 4328a21f0822caa9976356623118bcdcc9970c7a0f9a3deeba23c779b7cfb5d1 LICENSE.mrouted diff --git a/package/pimd/pimd.mk b/package/pimd/pimd.mk new file mode 100644 index 00000000..7a12f8fe --- /dev/null +++ b/package/pimd/pimd.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# pimd +# +################################################################################ + +PIMD_VERSION = 2.3.2 +PIMD_SITE = https://github.com/troglobit/pimd/releases/download/$(PIMD_VERSION) + +PIMD_LICENSE = BSD-3-Clause +PIMD_LICENSE_FILES = LICENSE LICENSE.mrouted + +ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC)$(BR2_TOOLCHAIN_USES_MUSL),y) +PIMD_CONF_OPTS += --embedded-libc +endif + +# The configure script is not autoconf based, so we use the +# generic-package infrastructure +define PIMD_CONFIGURE_CMDS + (cd $(@D); \ + $(TARGET_CONFIGURE_OPTS) \ + $(TARGET_CONFIGURE_ARGS) \ + ./configure $(PIMD_CONF_OPTS) \ + ) +endef + +define PIMD_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) CROSS=$(TARGET_CROSS) \ + CC=$(TARGET_CC) -C $(@D) +endef + +define PIMD_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) DESTDIR=$(TARGET_DIR) \ + prefix=/usr -C $(@D) install +endef + +$(eval $(generic-package)) diff --git a/package/pinentry/Config.in b/package/pinentry/Config.in new file mode 100644 index 00000000..684e4eed --- /dev/null +++ b/package/pinentry/Config.in @@ -0,0 +1,91 @@ +menuconfig BR2_PACKAGE_PINENTRY + bool "pinentry" + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgpg-error + depends on BR2_USE_MMU # libassuan + select BR2_PACKAGE_LIBASSUAN + select BR2_PACKAGE_LIBGPG_ERROR + # At least one backend is needed to avoid build breakage + select BR2_PACKAGE_PINENTRY_NCURSES if \ + !BR2_PACKAGE_PINENTRY_GTK2 && \ + !BR2_PACKAGE_PINENTRY_QT5 + help + A collection of simple PIN or pass-phrase entry dialogs + + https://www.gnupg.org/related_software/pinentry/ + +if BR2_PACKAGE_PINENTRY + +config BR2_PACKAGE_PINENTRY_EFL + bool "pinentry-efl" + depends on BR2_PACKAGE_EFL + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_EFL_X_XLIB + help + The pinentry-efl tool + +comment "pinentry-efl needs efl and X" + depends on !BR2_PACKAGE_EFL || !BR2_PACKAGE_XORG7 + +config BR2_PACKAGE_PINENTRY_FLTK + bool "pinentry-fltk" + depends on BR2_USE_MMU # fltk + depends on BR2_INSTALL_LIBSTDCPP # fltk + depends on BR2_PACKAGE_XORG7 # fltk + select BR2_PACKAGE_FLTK + help + The pinentry-fltk tool + +comment "pinentry-fltk needs X and a toolchain w/ C++" + depends on BR2_USE_MMU + depends on !BR2_PACKAGE_XORG7 || !BR2_INSTALL_LIBSTDCPP + +config BR2_PACKAGE_PINENTRY_NCURSES + bool "pinentry-ncurses" + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + The pinentry-ncurses tool + +config BR2_PACKAGE_PINENTRY_GTK2 + bool "pinentry-gtk2" + depends on BR2_PACKAGE_XORG7 + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # libgtk2 -> pango -> harfbuzz + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # libgtk2 -> pango -> harfbuzz + select BR2_PACKAGE_LIBGTK2 + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + The pinentry-gtk2 tool + +comment "pinentry-gtk2 needs X and a toolchain w/ wchar, threads, C++, gcc >= 4.8" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_PACKAGE_XORG7 || !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 || \ + !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_PINENTRY_QT5 + bool "pinentry-qt5" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_HOST_GCC_AT_LEAST_5 + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5 + depends on !BR2_arc + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_QT5 + select BR2_PACKAGE_QT5BASE_GUI + select BR2_PACKAGE_QT5BASE_WIDGETS + help + The pinentry-qt5 tool + +comment "pinentry-qt5 needs a host gcc >= 5.0, and a toolchain w/ wchar, NPTL, gcc >= 5.0, C++, dynamic library" + depends on !BR2_arc + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_HAS_THREADS_NPTL || !BR2_TOOLCHAIN_GCC_AT_LEAST_5 || \ + BR2_STATIC_LIBS || !BR2_HOST_GCC_AT_LEAST_5 + +endif diff --git a/package/pinentry/pinentry.hash b/package/pinentry/pinentry.hash new file mode 100644 index 00000000..e5f3d906 --- /dev/null +++ b/package/pinentry/pinentry.hash @@ -0,0 +1,5 @@ +# From https://www.gnupg.org/download/integrity_check.html +sha1 b8b88cab4fd844e3616d55aeba8f084f2b98fb0f pinentry-1.1.1.tar.bz2 +# Locally computed +sha256 cd12a064013ed18e2ee8475e669b9f58db1b225a0144debdb85a68cecddba57f pinentry-1.1.1.tar.bz2 +sha256 67f82e045cf7acfef853ea0f426575a8359161a0a325e19f02b529a87c4b6c34 COPYING diff --git a/package/pinentry/pinentry.mk b/package/pinentry/pinentry.mk new file mode 100644 index 00000000..8ebd35cf --- /dev/null +++ b/package/pinentry/pinentry.mk @@ -0,0 +1,73 @@ +################################################################################ +# +# pinentry +# +################################################################################ + +PINENTRY_VERSION = 1.1.1 +PINENTRY_SOURCE = pinentry-$(PINENTRY_VERSION).tar.bz2 +PINENTRY_SITE = https://www.gnupg.org/ftp/gcrypt/pinentry +PINENTRY_LICENSE = GPL-2.0+ +PINENTRY_LICENSE_FILES = COPYING +PINENTRY_DEPENDENCIES = \ + libassuan libgpg-error \ + $(if $(BR2_PACKAGE_LIBICONV),libiconv) \ + host-pkgconf +PINENTRY_CONF_OPTS += \ + --with-libassuan-prefix=$(STAGING_DIR)/usr \ + --with-libgpg-error-prefix=$(STAGING_DIR)/usr \ + --without-libcap # requires PAM + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +PINENTRY_CONF_ENV += LIBS=-latomic +endif + +ifeq ($(BR2_PACKAGE_LIBSECRET),y) +PINENTRY_CONF_OPTS += --enable-libsecret +PINENTRY_DEPENDENCIES += libsecret +else +PINENTRY_CONF_OPTS += --disable-libsecret +endif + +# pinentry-efl backend +ifeq ($(BR2_PACKAGE_PINENTRY_EFL),y) +PINENTRY_CONF_OPTS += --enable-pinentry-efl +PINENTRY_DEPENDENCIES += efl +else +PINENTRY_CONF_OPTS += --disable-pinentry-efl +endif + +# pinentry-fltk backend +ifeq ($(BR2_PACKAGE_PINENTRY_FLTK),y) +PINENTRY_CONF_ENV += ac_cv_path_FLTK_CONFIG=$(STAGING_DIR)/usr/bin/fltk-config +PINENTRY_CONF_OPTS += --enable-pinentry-fltk +PINENTRY_DEPENDENCIES += fltk +else +PINENTRY_CONF_OPTS += --disable-pinentry-fltk +endif + +# pinentry-ncurses backend +ifeq ($(BR2_PACKAGE_PINENTRY_NCURSES),y) +PINENTRY_CONF_OPTS += --enable-ncurses --with-ncurses-include-dir=none +PINENTRY_DEPENDENCIES += ncurses +else +PINENTRY_CONF_OPTS += --disable-ncurses +endif + +# pinentry-gtk2 backend +ifeq ($(BR2_PACKAGE_PINENTRY_GTK2),y) +PINENTRY_CONF_OPTS += --enable-pinentry-gtk2 +PINENTRY_DEPENDENCIES += libgtk2 +else +PINENTRY_CONF_OPTS += --disable-pinentry-gtk2 +endif + +# pinentry-qt5 backend +ifeq ($(BR2_PACKAGE_PINENTRY_QT5),y) +PINENTRY_CONF_OPTS += --enable-pinentry-qt +PINENTRY_DEPENDENCIES += qt5base +else +PINENTRY_CONF_OPTS += --disable-pinentry-qt +endif + +$(eval $(autotools-package)) diff --git a/package/pipewire/Config.in b/package/pipewire/Config.in new file mode 100644 index 00000000..9c6b6eb8 --- /dev/null +++ b/package/pipewire/Config.in @@ -0,0 +1,38 @@ +config BR2_PACKAGE_PIPEWIRE + bool "pipewire" + depends on BR2_PACKAGE_HAS_UDEV # libudev + depends on BR2_TOOLCHAIN_HAS_THREADS # dbus, alsa-lib + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18 + depends on BR2_USE_MMU # dbus + select BR2_PACKAGE_ALSA_LIB + select BR2_PACKAGE_DBUS + help + PipeWire is a server and user space API to deal with + multimedia pipelines. + + https://pipewire.org/ + +if BR2_PACKAGE_PIPEWIRE + +config BR2_PACKAGE_PIPEWIRE_GSTREAMER + bool "pipewire gstreamer plugins" + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_GSTREAMER1 + select BR2_PACKAGE_GST1_PLUGINS_BASE + help + Build GStreamer plugins + +comment "pipewire gstreamer support needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS + +endif + +comment "pipewire needs udev and a toolchain w/ threads, headers >= 3.18" + depends on BR2_USE_MMU + depends on !BR2_PACKAGE_HAS_UDEV || \ + !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18 diff --git a/package/pipewire/pipewire.hash b/package/pipewire/pipewire.hash new file mode 100644 index 00000000..81c53867 --- /dev/null +++ b/package/pipewire/pipewire.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 bfaa0f6ae6c0791e2e0b59234d399753bf24f1b33dbf587682363a8463dd8df1 pipewire-0.2.7.tar.gz +sha256 88c0ca786c735a11e0eb508196d3aa1389fbaacb8d5de9adb5ccb15bcd4009d9 LICENSE +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 LGPL diff --git a/package/pipewire/pipewire.mk b/package/pipewire/pipewire.mk new file mode 100644 index 00000000..df159c5e --- /dev/null +++ b/package/pipewire/pipewire.mk @@ -0,0 +1,48 @@ +################################################################################ +# +# pipewire +# +################################################################################ + +PIPEWIRE_VERSION = 0.2.7 +PIPEWIRE_SITE = $(call github,PipeWire,pipewire,$(PIPEWIRE_VERSION)) +PIPEWIRE_LICENSE = LGPL-2.1+ +PIPEWIRE_LICENSE_FILES = LICENSE LGPL +PIPEWIRE_INSTALL_STAGING = YES +PIPEWIRE_DEPENDENCIES = host-pkgconf alsa-lib dbus udev + +ifeq ($(BR2_PACKAGE_FFMPEG),y) +PIPEWIRE_DEPENDENCIES += ffmpeg +endif + +ifeq ($(BR2_PACKAGE_LIBVA),y) +PIPEWIRE_DEPENDENCIES += libva +endif + +ifeq ($(BR2_PACKAGE_SBC),y) +PIPEWIRE_DEPENDENCIES += sbc +endif + +ifeq ($(BR2_PACKAGE_SDL2),y) +PIPEWIRE_DEPENDENCIES += sdl2 +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBX11),y) +PIPEWIRE_DEPENDENCIES += xlib_libX11 +endif + +ifeq ($(BR2_PACKAGE_PIPEWIRE_GSTREAMER),y) +PIPEWIRE_CONF_OPTS += -Dgstreamer=enabled +PIPEWIRE_DEPENDENCIES += libglib2 gstreamer1 gst1-plugins-base +else +PIPEWIRE_CONF_OPTS += -Dgstreamer=disabled +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +PIPEWIRE_CONF_OPTS += -Dsystemd=true +PIPEWIRE_DEPENDENCIES += systemd +else +PIPEWIRE_CONF_OPTS += -Dsystemd=false +endif + +$(eval $(meson-package)) diff --git a/package/pistache/0001-CMakeLists.txt-add-C-language-to-project-statement.patch b/package/pistache/0001-CMakeLists.txt-add-C-language-to-project-statement.patch new file mode 100644 index 00000000..c393a48d --- /dev/null +++ b/package/pistache/0001-CMakeLists.txt-add-C-language-to-project-statement.patch @@ -0,0 +1,70 @@ +From a50fc9bde098e4e89584a5da9f94f620c11b6733 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 16 Aug 2020 12:31:46 +0200 +Subject: [PATCH] CMakeLists.txt: add C language to project statement +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This will fix the detection of atomic: + +-- Performing Test HAVE_CXX_ATOMICS64_WITHOUT_LIB +-- Performing Test HAVE_CXX_ATOMICS64_WITHOUT_LIB - Failed +-- Looking for __atomic_load_8 in atomic +-- Looking for __atomic_load_8 in atomic - not found +CMake Error at CMakeModules/CheckAtomic.cmake:76 (message): + Host compiler appears to require libatomic for 64-bit operations, but + cannot find it. +Call Stack (most recent call first): + CMakeLists.txt:19 (include) + +Indeed if C language is not enabled, the test will be run with the C++ +compiler resulting in the following error: + +Building CXX object CMakeFiles/cmTC_fad22.dir/CheckFunctionExists.cxx.o +/tmp/instance-0/output-1/host/bin/mipsel-linux-g++ --sysroot=/tmp/instance-0/output-1/host/mipsel-buildroot-linux-gnu/sysroot -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_FORTIFY_SOURCE=1 -Wall -Wconversion -pedantic -Wextra -Wno-missing-field-initializers -DCHECK_FUNCTION_EXISTS=__atomic_load_8 -DNDEBUG -o CMakeFiles/cmTC_fad22.dir/CheckFunctionExists.cxx.o -c /tmp/instance-0/output-1/build/pistache-f2f5a50fbfb5b8ef6cf1d3d2a9d442a8270e375d/CMakeFiles/CheckLibraryExists/CheckFunctionExists.cxx +: error: new declaration 'char __atomic_load_8()' ambiguates built-in declaration 'long long unsigned int __atomic_load_8(const volatile void*, int)' [-fpermissive] +/tmp/instance-0/output-1/build/pistache-f2f5a50fbfb5b8ef6cf1d3d2a9d442a8270e375d/CMakeFiles/CheckLibraryExists/CheckFunctionExists.cxx:7:3: note: in expansion of macro 'CHECK_FUNCTION_EXISTS' + CHECK_FUNCTION_EXISTS(void); + ^~~~~~~~~~~~~~~~~~~~~ +/tmp/instance-0/output-1/build/pistache-f2f5a50fbfb5b8ef6cf1d3d2a9d442a8270e375d/CMakeFiles/CheckLibraryExists/CheckFunctionExists.cxx: In function 'int main(int, char**)': +/tmp/instance-0/output-1/build/pistache-f2f5a50fbfb5b8ef6cf1d3d2a9d442a8270e375d/CMakeFiles/CheckLibraryExists/CheckFunctionExists.cxx:17:25: error: too few arguments to function 'long long unsigned int __atomic_load_8(const volatile void*, int)' + CHECK_FUNCTION_EXISTS(); + ^ + +whereas with a C compiler, we'll get: + +Building C object CMakeFiles/cmTC_4b0f4.dir/CheckFunctionExists.c.o +/home/fabrice/buildroot/output/host/bin/riscv32-linux-gcc --sysroot=/home/fabrice/buildroot/output/host/riscv32-buildroot-linux-gnu/sysroot -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -DCHECK_FUNCTION_EXISTS=__atomic_load_8 -DNDEBUG -o CMakeFiles/cmTC_4b0f4.dir/CheckFunctionExists.c.o -c /usr/share/cmake-3.16/Modules/CheckFunctionExists.c +: warning: conflicting types for built-in function ‘__atomic_load_8’ [-Wbuiltin-declaration-mismatch] +/usr/share/cmake-3.16/Modules/CheckFunctionExists.c:7:3: note: in expansion of macro ‘CHECK_FUNCTION_EXISTS’ + CHECK_FUNCTION_EXISTS(void); + ^~~~~~~~~~~~~~~~~~~~~ +Linking C executable cmTC_4b0f4 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_4b0f4.dir/link.txt --verbose=1 +/home/fabrice/buildroot/output/host/bin/riscv32-linux-gcc --sysroot=/home/fabrice/buildroot/output/host/riscv32-buildroot-linux-gnu/sysroot -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -DCHECK_FUNCTION_EXISTS=__atomic_load_8 -DNDEBUG CMakeFiles/cmTC_4b0f4.dir/CheckFunctionExists.c.o -o cmTC_4b0f4 -latomic + +Fixes: + - http://autobuild.buildroot.org/results/2bf06c6a9e55b449ec5875cf9415a9e55b2065d6 + +Signed-off-by: Fabrice Fontaine +--- + CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index edc73c5..0286647 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -9,7 +9,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) + set(CMAKE_CXX_EXTENSIONS OFF) + + project (pistache +- LANGUAGES CXX) ++ LANGUAGES C CXX) + + include(GNUInstallDirs) + +-- +2.27.0 + diff --git a/package/pistache/0002-CMakeLists.txt-respect-BUILD_SHARED_LIBS.patch b/package/pistache/0002-CMakeLists.txt-respect-BUILD_SHARED_LIBS.patch new file mode 100644 index 00000000..09f59b11 --- /dev/null +++ b/package/pistache/0002-CMakeLists.txt-respect-BUILD_SHARED_LIBS.patch @@ -0,0 +1,95 @@ +From 45824f58b10575d8d88d4bce934aedee821a6df0 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Thu, 15 Oct 2020 22:26:55 +0200 +Subject: [PATCH] CMakeLists.txt: respect BUILD_SHARED_LIBS + +Don't build and install pistache_shared if the standard cmake +BUILD_SHARED_LIBS is set to OFF + +Signed-off-by: Fabrice Fontaine +[Backport from upstream: + https://github.com/oktal/pistache/commit/c04166ca9e6420a8fbc93fef4055ee2eccdcebe4 +] +--- + src/CMakeLists.txt | 43 +++++++++++++++++++++++++------------------ + 1 file changed, 25 insertions(+), 18 deletions(-) + +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index 6521b20..c5b049f 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -26,31 +26,36 @@ set(include_install_dir ${CMAKE_INSTALL_INCLUDEDIR}) + set(lib_install_dir ${CMAKE_INSTALL_LIBDIR}) + set(bin_install_dir ${CMAKE_INSTALL_BINDIR}) + +-add_library(pistache_shared SHARED $) +-add_library(pistache_static STATIC $) ++if (BUILD_SHARED_LIBS) ++ add_library(pistache_shared SHARED $) ++ target_link_libraries(pistache_shared PRIVATE Threads::Threads ${CMAKE_REQUIRED_LIBRARIES}) ++ target_include_directories(pistache_shared INTERFACE ${PISTACHE_INCLUDE}) ++endif () + +-target_link_libraries(pistache_shared PRIVATE Threads::Threads ${CMAKE_REQUIRED_LIBRARIES}) ++add_library(pistache_static STATIC $) + target_link_libraries(pistache_static PRIVATE Threads::Threads ${CMAKE_REQUIRED_LIBRARIES}) +- +-target_include_directories(pistache_shared INTERFACE ${PISTACHE_INCLUDE}) + target_include_directories(pistache_static INTERFACE ${PISTACHE_INCLUDE}) + + if (PISTACHE_USE_SSL) + target_compile_definitions(pistache PUBLIC PISTACHE_USE_SSL) +- target_compile_definitions(pistache_shared PUBLIC PISTACHE_USE_SSL) + target_compile_definitions(pistache_static PUBLIC PISTACHE_USE_SSL) + + target_include_directories(pistache PRIVATE ${OPENSSL_INCLUDE_DIR}) +- target_link_libraries(pistache_shared PUBLIC OpenSSL::SSL OpenSSL::Crypto) + target_link_libraries(pistache_static PUBLIC OpenSSL::SSL OpenSSL::Crypto) ++ if (BUILD_SHARED_LIBS) ++ target_compile_definitions(pistache_shared PUBLIC PISTACHE_USE_SSL) ++ target_link_libraries(pistache_shared PUBLIC OpenSSL::SSL OpenSSL::Crypto) ++ endif () + endif () + + set(Pistache_OUTPUT_NAME "pistache") +-set_target_properties(pistache_shared PROPERTIES +- OUTPUT_NAME ${Pistache_OUTPUT_NAME} +- VERSION ${version} +- SOVERSION ${VERSION_MAJOR} +-) ++if (BUILD_SHARED_LIBS) ++ set_target_properties(pistache_shared PROPERTIES ++ OUTPUT_NAME ${Pistache_OUTPUT_NAME} ++ VERSION ${version} ++ SOVERSION ${VERSION_MAJOR} ++ ) ++endif () + + set_target_properties(pistache_static PROPERTIES + OUTPUT_NAME ${Pistache_OUTPUT_NAME} +@@ -60,13 +65,15 @@ if (PISTACHE_INSTALL) + set(Pistache_CONFIG_FILE "PistacheConfig.cmake") + set(Pistache_CONFIG_VERSION_FILE "PistacheConfigVersion.cmake") + +- install( +- TARGETS pistache_shared +- EXPORT PistacheTargets +- ARCHIVE DESTINATION ${lib_install_dir} +- LIBRARY DESTINATION ${lib_install_dir} +- RUNTIME DESTINATION ${bin_install_dir} +- INCLUDES DESTINATION ${include_install_dir}) ++ if (BUILD_SHARED_LIBS) ++ install( ++ TARGETS pistache_shared ++ EXPORT PistacheTargets ++ ARCHIVE DESTINATION ${lib_install_dir} ++ LIBRARY DESTINATION ${lib_install_dir} ++ RUNTIME DESTINATION ${bin_install_dir} ++ INCLUDES DESTINATION ${include_install_dir}) ++ endif() + + install( + DIRECTORY "${PROJECT_SOURCE_DIR}/include/pistache" +-- +2.28.0 + diff --git a/package/pistache/Config.in b/package/pistache/Config.in new file mode 100644 index 00000000..64d63408 --- /dev/null +++ b/package/pistache/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_PISTACHE + bool "pistache" + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C++14 + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_TOOLCHAIN_USES_UCLIBC + help + Pistache is a modern and elegant HTTP and REST framework + for C++. It is entirely written in pure C++14 and provides + a clear and pleasant API. + + https://github.com/oktal/pistache + +comment "pistache needs a glibc toolchain w/ C++, gcc >= 4.9, threads, wchar" + depends on !BR2_INSTALL_LIBSTDCPP || \ + BR2_TOOLCHAIN_USES_UCLIBC || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || \ + !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_USE_WCHAR diff --git a/package/pistache/pistache.hash b/package/pistache/pistache.hash new file mode 100644 index 00000000..5079387e --- /dev/null +++ b/package/pistache/pistache.hash @@ -0,0 +1,3 @@ +#locally computed +sha256 70aeef5f5a4603cb2ceb20a284e3239f5da520e68f39dcb572c9f21473ac0b6d pistache-f2f5a50fbfb5b8ef6cf1d3d2a9d442a8270e375d.tar.gz +sha256 c6596eb7be8581c18be736c846fb9173b69eccf6ef94c5135893ec56bd92ba08 LICENSE diff --git a/package/pistache/pistache.mk b/package/pistache/pistache.mk new file mode 100644 index 00000000..4d6bd283 --- /dev/null +++ b/package/pistache/pistache.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# pistache +# +################################################################################ + +PISTACHE_VERSION = f2f5a50fbfb5b8ef6cf1d3d2a9d442a8270e375d +PISTACHE_SITE = $(call github,oktal,pistache,$(PISTACHE_VERSION)) +PISTACHE_LICENSE = Apache-2.0 +PISTACHE_LICENSE_FILES = LICENSE + +PISTACHE_INSTALL_STAGING = YES + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +PISTACHE_DEPENDENCIES += openssl +PISTACHE_CONF_OPTS += -DPISTACHE_USE_SSL=ON +else +PISTACHE_CONF_OPTS += -DPISTACHE_USE_SSL=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/pixiewps/Config.in b/package/pixiewps/Config.in new file mode 100644 index 00000000..05719f42 --- /dev/null +++ b/package/pixiewps/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PIXIEWPS + bool "pixiewps" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Pixie WPS is a C based tool to audit networks against the so + called "Pixie Dust" attack. + + https://github.com/wiire-a/pixiewps/wiki + +comment "pixiewps needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/pixiewps/pixiewps.hash b/package/pixiewps/pixiewps.hash new file mode 100644 index 00000000..bb566303 --- /dev/null +++ b/package/pixiewps/pixiewps.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 d3d3cf57851e3e734fb1797aa078239ef161d1cbeffc4438497d58a425ef22a2 pixiewps-9e5bdc6c86c8487b2a6107d5ab3559ed5c738c59.tar.gz +sha256 ccb349b4132ed7737f25e5adebfe61f3d52dca33708df1e50352320438d1d4c2 LICENSE.md diff --git a/package/pixiewps/pixiewps.mk b/package/pixiewps/pixiewps.mk new file mode 100644 index 00000000..1f84bbeb --- /dev/null +++ b/package/pixiewps/pixiewps.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# pixiewps +# +################################################################################ + +PIXIEWPS_VERSION = 9e5bdc6c86c8487b2a6107d5ab3559ed5c738c59 +PIXIEWPS_SITE = $(call github,wiire-a,pixiewps,$(PIXIEWPS_VERSION)) +PIXIEWPS_LICENSE = GPL-3.0+ +PIXIEWPS_LICENSE_FILES = LICENSE.md + +define PIXIEWPS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) +endef + +define PIXIEWPS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) DESTDIR=$(TARGET_DIR) \ + PREFIX=/usr -C $(@D) install +endef + +$(eval $(generic-package)) diff --git a/package/pixman/0001-Disable-tests.patch b/package/pixman/0001-Disable-tests.patch new file mode 100644 index 00000000..dfadd69a --- /dev/null +++ b/package/pixman/0001-Disable-tests.patch @@ -0,0 +1,29 @@ +From 9b8132738c364fc3c886e81e7d383aaff80dc867 Mon Sep 17 00:00:00 2001 +From: "Yann E. MORIN" +Date: Sat, 5 Dec 2015 12:00:53 +0100 +Subject: [PATCH] Disable tests + +Tests are causing build failures on some architectures that are missing +a proper fenv.h, so just disable them. + +Signed-off-by: "Yann E. MORIN" + +--- +Status: Buildroot specific, not suitable for upstream in this state. +--- + Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index 5137c9e..eae79fd 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -1,4 +1,4 @@ +-SUBDIRS = pixman demos test ++SUBDIRS = pixman demos + + pkgconfigdir=$(libdir)/pkgconfig + pkgconfig_DATA=pixman-1.pc +-- +1.9.1 + diff --git a/package/pixman/Config.in b/package/pixman/Config.in new file mode 100644 index 00000000..aa2a68f6 --- /dev/null +++ b/package/pixman/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PIXMAN + bool "pixman" + help + Cairo pixel manager + + http://cairographics.org/releases/ diff --git a/package/pixman/pixman.hash b/package/pixman/pixman.hash new file mode 100644 index 00000000..1af632a9 --- /dev/null +++ b/package/pixman/pixman.hash @@ -0,0 +1,6 @@ +# From https://lists.x.org/archives/xorg-announce/2020-April/003043.html +sha256 da8ed9fe2d1c5ef8ce5d1207992db959226bd4e37e3f88acf908fd9a71e2704e pixman-0.40.0.tar.xz +sha512 8a60edb113d68791b41bd90b761ff7b3934260cb3dada3234c9351416f61394e4157353bc4d61b8f6c2c619de470f6feefffb4935bfcf79d291ece6285de7270 pixman-0.40.0.tar.xz + +# Locally computed +sha256 fac9270f0987b96ff4533fca3548c633e02083cbba4a0172a3b149b2e4019793 COPYING diff --git a/package/pixman/pixman.mk b/package/pixman/pixman.mk new file mode 100644 index 00000000..6fab5395 --- /dev/null +++ b/package/pixman/pixman.mk @@ -0,0 +1,63 @@ +################################################################################ +# +# pixman +# +################################################################################ + +PIXMAN_VERSION = 0.40.0 +PIXMAN_SOURCE = pixman-$(PIXMAN_VERSION).tar.xz +PIXMAN_SITE = https://xorg.freedesktop.org/releases/individual/lib +PIXMAN_LICENSE = MIT +PIXMAN_LICENSE_FILES = COPYING +PIXMAN_CPE_ID_VENDOR = pixman + +PIXMAN_INSTALL_STAGING = YES +PIXMAN_DEPENDENCIES = host-pkgconf +HOST_PIXMAN_DEPENDENCIES = host-pkgconf + +# For 0001-Disable-tests.patch +PIXMAN_AUTORECONF = YES + +# don't build gtk based demos +PIXMAN_CONF_OPTS = --disable-gtk + +# The ARM SIMD code from pixman requires a recent enough ARM core, but +# there is a runtime CPU check that makes sure it doesn't get used if +# the HW doesn't support it. The only case where the ARM SIMD code +# cannot be *built* at all is when the platform doesn't support ARM +# instructions at all, so we have to disable that explicitly. +ifeq ($(BR2_ARM_CPU_HAS_ARM),y) +PIXMAN_CONF_OPTS += --enable-arm-simd +else +PIXMAN_CONF_OPTS += --disable-arm-simd +endif + +ifeq ($(BR2_ARM_CPU_HAS_ARM)$(BR2_ARM_CPU_HAS_NEON),yy) +PIXMAN_CONF_OPTS += --enable-arm-neon +else +PIXMAN_CONF_OPTS += --disable-arm-neon +endif + +# disable iwmmxt support for CPU's that don't have +# this feature +ifneq ($(BR2_iwmmxt),y) +PIXMAN_CONF_OPTS += --disable-arm-iwmmxt +endif + +PIXMAN_CFLAGS = $(TARGET_CFLAGS) + +# toolchain gets confused about TLS access through GOT (PIC), so disable TLS +# movhi r4, %got_hiadj(%tls_ldo(fast_path_cache)) +# {standard input}:172: Error: bad expression +ifeq ($(BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_NIOSII),y) +PIXMAN_CFLAGS += -DPIXMAN_NO_TLS +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_101737),y) +PIXMAN_CFLAGS += -O0 +endif + +PIXMAN_CONF_OPTS += CFLAGS="$(PIXMAN_CFLAGS)" + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/pixz/Config.in b/package/pixz/Config.in new file mode 100644 index 00000000..f7ca0157 --- /dev/null +++ b/package/pixz/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_PIXZ + bool "pixz" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_WCHAR # libarchive + select BR2_PACKAGE_LIBARCHIVE + select BR2_PACKAGE_XZ + help + Pixz (pronounced pixie) is a parallel, indexing version of xz. + + https://github.com/vasi/pixz + +comment "pixz needs a toolchain w/ threads, wchar" + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR diff --git a/package/pixz/pixz.hash b/package/pixz/pixz.hash new file mode 100644 index 00000000..9e2a211c --- /dev/null +++ b/package/pixz/pixz.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 e5e32c6eb0bf112b98e74a5da8fb63b9f2cae71800f599d97ce540e150c8ddc5 pixz-1.0.7.tar.xz +sha256 d036806b4d1efee7c6d86276451c4d833e9798751417e25daae62dfbe348641b LICENSE diff --git a/package/pixz/pixz.mk b/package/pixz/pixz.mk new file mode 100644 index 00000000..680c05c3 --- /dev/null +++ b/package/pixz/pixz.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# pixz +# +################################################################################ + +PIXZ_VERSION = 1.0.7 +PIXZ_SITE = https://github.com/vasi/pixz/releases/download/v$(PIXZ_VERSION) +PIXZ_SOURCE = pixz-$(PIXZ_VERSION).tar.xz +PIXZ_DEPENDENCIES = host-pkgconf libarchive xz +PIXZ_LICENSE = BSD-2-Clause +PIXZ_LICENSE_FILES = LICENSE + +# pixz.1 is actually present, but AC_CHECK_FILE doesn't detect it when +# cross-compiling, which causes configure to try to regenerate it. So give it a +# hint to say that it actually is present. +PIXZ_CONF_ENV = ac_cv_file_src_pixz_1=yes + +$(eval $(autotools-package)) diff --git a/package/pkcs11-helper/Config.in b/package/pkcs11-helper/Config.in new file mode 100644 index 00000000..36204d7d --- /dev/null +++ b/package/pkcs11-helper/Config.in @@ -0,0 +1,23 @@ +config BR2_PACKAGE_PKCS11_HELPER + bool "pkcs11-helper" + depends on !BR2_STATIC_LIBS # dlfcn.h + help + pkcs11-helper is a library that simplifies the interaction + with PKCS#11 providers for end-user applications. + + pkcs11-helper allows using multiple PKCS#11 providers at the + same time, enumerating available token certificates, or + selecting a certificate directly by serialized id, handling + card removal and card insert events, handling card re-insert + to a different slot, supporting session expiration and much + more all using a simple API. + + pkcs11-helper is not designed to manage card content, since + object attributes are usually vendor specific, and 99% of + application need to access existing objects in order to + perform signature and decryption. + + https://github.com/OpenSC/pkcs11-helper + +comment "pkcs11-helper needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/pkcs11-helper/pkcs11-helper.hash b/package/pkcs11-helper/pkcs11-helper.hash new file mode 100644 index 00000000..276ed2e2 --- /dev/null +++ b/package/pkcs11-helper/pkcs11-helper.hash @@ -0,0 +1,5 @@ +# Locally computed +sha256 e5e2eefeda6c3db3d8862b42b180a6a5b2f41285f35b0ad0d622c6767683fd84 pkcs11-helper-1.26.tar.gz +sha256 808705ac1daafe07a76431929575c5712a8693977a39ec9102aed25f030754d9 COPYING +sha256 865496cf23a6c792739ff2f9ea11e95ac99db89cfe3780a295b4e1495a9c19fe COPYING.BSD +sha256 cd2e7d63a11058f19c58b06fb8c759140ce70788369dce6e6e9db40d3475021e COPYING.GPL diff --git a/package/pkcs11-helper/pkcs11-helper.mk b/package/pkcs11-helper/pkcs11-helper.mk new file mode 100644 index 00000000..a651be98 --- /dev/null +++ b/package/pkcs11-helper/pkcs11-helper.mk @@ -0,0 +1,57 @@ +################################################################################ +# +# pkcs11-helper +# +################################################################################ + +PKCS11_HELPER_VERSION = 1.26 +PKCS11_HELPER_SITE = $(call github,OpenSC,pkcs11-helper,pkcs11-helper-$(PKCS11_HELPER_VERSION)) +PKCS11_HELPER_LICENSE = GPL-2.0 or BSD-3-Clause +PKCS11_HELPER_LICENSE_FILES = COPYING COPYING.BSD COPYING.GPL +PKCS11_HELPER_DEPENDENCIES = host-pkgconf +PKCS11_HELPER_AUTORECONF = YES +PKCS11_HELPER_INSTALL_STAGING = YES + +PKCS11_HELPER_CONF_OPTS = \ + --disable-crypto-engine-polarssl \ + --disable-crypto-engine-cryptoapi + +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +PKCS11_HELPER_CONF_OPTS += --enable-slotevent --enable-threading +else +PKCS11_HELPER_CONF_OPTS += --disable-slotevent --disable-threading +endif + +ifeq ($(BR2_PACKAGE_GNUTLS),y) +PKCS11_HELPER_DEPENDENCIES += gnutls +PKCS11_HELPER_CONF_OPTS += --enable-crypto-engine-gnutls +else +PKCS11_HELPER_CONF_OPTS += --disable-crypto-engine-gnutls +endif + +ifeq ($(BR2_PACKAGE_LIBNSS),y) +PKCS11_HELPER_DEPENDENCIES += libnss +PKCS11_HELPER_CONF_OPTS += --enable-crypto-engine-nss +else +PKCS11_HELPER_CONF_OPTS += --disable-crypto-engine-nss +endif + +ifeq ($(BR2_PACKAGE_MBEDTLS),y) +PKCS11_HELPER_DEPENDENCIES += mbedtls +PKCS11_HELPER_CONF_OPTS += --enable-crypto-engine-mbedtls +else +PKCS11_HELPER_CONF_OPTS += --disable-crypto-engine-mbedtls +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +PKCS11_HELPER_DEPENDENCIES += openssl +PKCS11_HELPER_CONF_OPTS += \ + --enable-openssl \ + --enable-crypto-engine-openssl +else +PKCS11_HELPER_CONF_OPTS += \ + --disable-openssl \ + --disable-crypto-engine-openssl +endif + +$(eval $(autotools-package)) diff --git a/package/pkg-autotools.mk b/package/pkg-autotools.mk new file mode 100644 index 00000000..daa688da --- /dev/null +++ b/package/pkg-autotools.mk @@ -0,0 +1,332 @@ +################################################################################ +# Autotools package infrastructure +# +# This file implements an infrastructure that eases development of +# package .mk files for autotools packages. It should be used for all +# packages that use the autotools as their build system. +# +# See the Buildroot documentation for details on the usage of this +# infrastructure +# +# In terms of implementation, this autotools infrastructure requires +# the .mk file to only specify metadata information about the +# package: name, version, download URL, etc. +# +# We still allow the package .mk file to override what the different +# steps are doing, if needed. For example, if _BUILD_CMDS is +# already defined, it is used as the list of commands to perform to +# build the package, instead of the default autotools behaviour. The +# package can also define some post operation hooks. +# +################################################################################ + + +# +# Utility function to upgrade config.sub and config.guess files +# +# argument 1 : directory into which config.guess and config.sub need +# to be updated. Note that config.sub and config.guess are searched +# recursively in this directory. +# +define CONFIG_UPDATE + for file in config.guess config.sub; do \ + for i in $$(find $(1) -name $$file); do \ + cp support/gnuconfig/$$file $$i; \ + done; \ + done +endef + +# This function generates the ac_cv_file_ value for a given +# filename. This is needed to convince configure script doing +# AC_CHECK_FILE() tests that the file actually exists, since such +# tests cannot be done in a cross-compilation context. This function +# takes as argument the path of the file. An example usage is: +# +# FOOBAR_CONF_ENV = \ +# $(call AUTOCONF_AC_CHECK_FILE_VAL,/dev/random)=yes +AUTOCONF_AC_CHECK_FILE_VAL = ac_cv_file_$(subst -,_,$(subst /,_,$(subst .,_,$(1)))) + +# +# Hook to update config.sub and config.guess if needed +# +define UPDATE_CONFIG_HOOK + @$(call MESSAGE,"Updating config.sub and config.guess") + $(call CONFIG_UPDATE,$(@D)) +endef + +# +# Hook to patch libtool to make it work properly for cross-compilation +# +define LIBTOOL_PATCH_HOOK + @$(call MESSAGE,"Patching libtool") + $(Q)for i in `find $($(PKG)_DIR) -name ltmain.sh`; do \ + ltmain_version=`sed -n '/^[ \t]*VERSION=/{s/^[ \t]*VERSION=//;p;q;}' $$i | \ + sed -e 's/\([0-9]*\.[0-9]*\).*/\1/' -e 's/\"//'`; \ + ltmain_patchlevel=`sed -n '/^[ \t]*VERSION=/{s/^[ \t]*VERSION=//;p;q;}' $$i | \ + sed -e 's/\([0-9]*\.[0-9]*\.*\)\([0-9]*\).*/\2/' -e 's/\"//'`; \ + if test $${ltmain_version} = '1.5'; then \ + patch -i support/libtool/buildroot-libtool-v1.5.patch $${i}; \ + elif test $${ltmain_version} = "2.2"; then\ + patch -i support/libtool/buildroot-libtool-v2.2.patch $${i}; \ + elif test $${ltmain_version} = "2.4"; then\ + if test $${ltmain_patchlevel:-0} -gt 2; then\ + patch -i support/libtool/buildroot-libtool-v2.4.4.patch $${i}; \ + else \ + patch -i support/libtool/buildroot-libtool-v2.4.patch $${i}; \ + fi \ + fi \ + done +endef + +# +# Hook to patch common issue with configure on powerpc64{,le} failing +# to detect shared library support: +# +define CONFIGURE_FIX_POWERPC64_HOOK + @$(call MESSAGE,"Checking configure (powerpc64/powerpc64le)") + support/scripts/fix-configure-powerpc64.sh $($(PKG)_DIR) +endef + +# +# Hook to gettextize the package if needed +# +define GETTEXTIZE_HOOK + @$(call MESSAGE,"Gettextizing") + $(Q)cd $($(PKG)_SRCDIR) && $(GETTEXTIZE) $($(PKG)_GETTEXTIZE_OPTS) +endef + +# +# Hook to autoreconf the package if needed +# +define AUTORECONF_HOOK + @$(call MESSAGE,"Autoreconfiguring") + $(Q)cd $($(PKG)_SRCDIR) && $($(PKG)_AUTORECONF_ENV) $(AUTORECONF) $($(PKG)_AUTORECONF_OPTS) +endef + +################################################################################ +# inner-autotools-package -- defines how the configuration, compilation and +# installation of an autotools package should be done, implements a +# few hooks to tune the build process for autotools specifities and +# calls the generic package infrastructure to generate the necessary +# make targets +# +# argument 1 is the lowercase package name +# argument 2 is the uppercase package name, including a HOST_ prefix +# for host packages +# argument 3 is the uppercase package name, without the HOST_ prefix +# for host packages +# argument 4 is the type (target or host) +################################################################################ + +define inner-autotools-package + +ifndef $(2)_LIBTOOL_PATCH + ifdef $(3)_LIBTOOL_PATCH + $(2)_LIBTOOL_PATCH = $$($(3)_LIBTOOL_PATCH) + else + $(2)_LIBTOOL_PATCH ?= YES + endif +endif + +ifndef $(2)_MAKE + ifdef $(3)_MAKE + $(2)_MAKE = $$($(3)_MAKE) + else + $(2)_MAKE ?= $$(MAKE) + endif +endif + +ifndef $(2)_AUTORECONF + ifdef $(3)_AUTORECONF + $(2)_AUTORECONF = $$($(3)_AUTORECONF) + else + $(2)_AUTORECONF ?= NO + endif +endif + +ifndef $(2)_GETTEXTIZE + ifdef $(3)_GETTEXTIZE + $(2)_GETTEXTIZE = $$($(3)_GETTEXTIZE) + else + $(2)_GETTEXTIZE ?= NO + endif +endif + +ifeq ($(4),host) + $(2)_GETTEXTIZE_OPTS ?= $$($(3)_GETTEXTIZE_OPTS) +endif + +ifeq ($(4),host) + $(2)_AUTORECONF_OPTS ?= $$($(3)_AUTORECONF_OPTS) +endif + +$(2)_CONF_ENV ?= +$(2)_CONF_OPTS ?= +$(2)_MAKE_ENV ?= +$(2)_MAKE_OPTS ?= +$(2)_INSTALL_OPTS ?= install +$(2)_INSTALL_STAGING_OPTS ?= DESTDIR=$$(STAGING_DIR) install +$(2)_INSTALL_TARGET_OPTS ?= DESTDIR=$$(TARGET_DIR) install + +# +# Configure step. Only define it if not already defined by the package +# .mk file. And take care of the differences between host and target +# packages. +# +ifndef $(2)_CONFIGURE_CMDS +ifeq ($(4),target) + +# Configure package for target +define $(2)_CONFIGURE_CMDS + (cd $$($$(PKG)_SRCDIR) && rm -rf config.cache && \ + $$(TARGET_CONFIGURE_OPTS) \ + $$(TARGET_CONFIGURE_ARGS) \ + $$($$(PKG)_CONF_ENV) \ + CONFIG_SITE=/dev/null \ + ./configure \ + --target=$$(GNU_TARGET_NAME) \ + --host=$$(GNU_TARGET_NAME) \ + --build=$$(GNU_HOST_NAME) \ + --prefix=/usr \ + --exec-prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --program-prefix="" \ + --disable-gtk-doc \ + --disable-gtk-doc-html \ + --disable-doc \ + --disable-docs \ + --disable-documentation \ + --with-xmlto=no \ + --with-fop=no \ + $$(if $$($$(PKG)_OVERRIDE_SRCDIR),,--disable-dependency-tracking) \ + --enable-ipv6 \ + $$(NLS_OPTS) \ + $$(SHARED_STATIC_LIBS_OPTS) \ + $$(QUIET) $$($$(PKG)_CONF_OPTS) \ + ) +endef +else + +# Configure package for host +# disable all kind of documentation generation in the process, +# because it often relies on host tools which may or may not be +# installed. +define $(2)_CONFIGURE_CMDS + (cd $$($$(PKG)_SRCDIR) && rm -rf config.cache; \ + $$(HOST_CONFIGURE_OPTS) \ + CFLAGS="$$(HOST_CFLAGS)" \ + LDFLAGS="$$(HOST_LDFLAGS)" \ + $$($$(PKG)_CONF_ENV) \ + CONFIG_SITE=/dev/null \ + ./configure \ + --prefix="$$(HOST_DIR)" \ + --sysconfdir="$$(HOST_DIR)/etc" \ + --localstatedir="$$(HOST_DIR)/var" \ + --enable-shared --disable-static \ + --disable-gtk-doc \ + --disable-gtk-doc-html \ + --disable-doc \ + --disable-docs \ + --disable-documentation \ + --disable-debug \ + --with-xmlto=no \ + --with-fop=no \ + --disable-nls \ + $$(if $$($$(PKG)_OVERRIDE_SRCDIR),,--disable-dependency-tracking) \ + $$(QUIET) $$($$(PKG)_CONF_OPTS) \ + ) +endef +endif +endif + +$(2)_POST_PATCH_HOOKS += UPDATE_CONFIG_HOOK + +ifeq ($$($(2)_AUTORECONF),YES) + +# This has to come before autoreconf +ifeq ($$($(2)_GETTEXTIZE),YES) +$(2)_PRE_CONFIGURE_HOOKS += GETTEXTIZE_HOOK +$(2)_DEPENDENCIES += host-gettext +endif +$(2)_PRE_CONFIGURE_HOOKS += AUTORECONF_HOOK +# default values are not evaluated yet, so don't rely on this defaulting to YES +ifneq ($$($(2)_LIBTOOL_PATCH),NO) +$(2)_PRE_CONFIGURE_HOOKS += LIBTOOL_PATCH_HOOK +endif +$(2)_DEPENDENCIES += host-automake host-autoconf host-libtool + +else # ! AUTORECONF = YES + +# default values are not evaluated yet, so don't rely on this defaulting to YES +ifneq ($$($(2)_LIBTOOL_PATCH),NO) +$(2)_POST_PATCH_HOOKS += LIBTOOL_PATCH_HOOK +endif + +endif + +# Append a configure hook if building for a powerpc64 (or powerpc64le) arch. +# Must be added after other pre-configure hooks that might regenerate the +# configure script and overwrite the changes made here. +ifneq ($$(filter powerpc64%,$$(if $$(filter target,$(4)),$$(ARCH),$$(HOSTARCH))),) +$(2)_PRE_CONFIGURE_HOOKS += CONFIGURE_FIX_POWERPC64_HOOK +endif + +# +# Build step. Only define it if not already defined by the package .mk +# file. +# +ifndef $(2)_BUILD_CMDS +ifeq ($(4),target) +define $(2)_BUILD_CMDS + $$(TARGET_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) $$($$(PKG)_MAKE_OPTS) -C $$($$(PKG)_SRCDIR) +endef +else +define $(2)_BUILD_CMDS + $$(HOST_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) $$($$(PKG)_MAKE_OPTS) -C $$($$(PKG)_SRCDIR) +endef +endif +endif + +# +# Host installation step. Only define it if not already defined by the +# package .mk file. +# +ifndef $(2)_INSTALL_CMDS +define $(2)_INSTALL_CMDS + $$(HOST_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) $$($$(PKG)_INSTALL_OPTS) -C $$($$(PKG)_SRCDIR) +endef +endif + +# +# Staging installation step. Only define it if not already defined by +# the package .mk file. +# +ifndef $(2)_INSTALL_STAGING_CMDS +define $(2)_INSTALL_STAGING_CMDS + $$(TARGET_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) $$($$(PKG)_INSTALL_STAGING_OPTS) -C $$($$(PKG)_SRCDIR) +endef +endif + +# +# Target installation step. Only define it if not already defined by +# the package .mk file. +# +ifndef $(2)_INSTALL_TARGET_CMDS +define $(2)_INSTALL_TARGET_CMDS + $$(TARGET_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) $$($$(PKG)_INSTALL_TARGET_OPTS) -C $$($$(PKG)_SRCDIR) +endef +endif + +# Call the generic package infrastructure to generate the necessary +# make targets +$(call inner-generic-package,$(1),$(2),$(3),$(4)) + +endef + +################################################################################ +# autotools-package -- the target generator macro for autotools packages +################################################################################ + +autotools-package = $(call inner-autotools-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target) +host-autotools-package = $(call inner-autotools-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host) diff --git a/package/pkg-cmake.mk b/package/pkg-cmake.mk new file mode 100644 index 00000000..37078f3c --- /dev/null +++ b/package/pkg-cmake.mk @@ -0,0 +1,276 @@ +################################################################################ +# CMake package infrastructure +# +# This file implements an infrastructure that eases development of +# package .mk files for CMake packages. It should be used for all +# packages that use CMake as their build system. +# +# See the Buildroot documentation for details on the usage of this +# infrastructure +# +# In terms of implementation, this CMake infrastructure requires +# the .mk file to only specify metadata information about the +# package: name, version, download URL, etc. +# +# We still allow the package .mk file to override what the different +# steps are doing, if needed. For example, if _BUILD_CMDS is +# already defined, it is used as the list of commands to perform to +# build the package, instead of the default CMake behaviour. The +# package can also define some post operation hooks. +# +################################################################################ + +# Set compiler variables. +ifeq ($(BR2_CCACHE),y) +CMAKE_HOST_C_COMPILER = $(HOSTCC_NOCCACHE) +CMAKE_HOST_CXX_COMPILER = $(HOSTCXX_NOCCACHE) +CMAKE_HOST_C_COMPILER_LAUNCHER = $(HOST_DIR)/bin/ccache +CMAKE_HOST_CXX_COMPILER_LAUNCHER = $(HOST_DIR)/bin/ccache +else +CMAKE_HOST_C_COMPILER = $(HOSTCC) +CMAKE_HOST_CXX_COMPILER = $(HOSTCXX) +endif + +ifneq ($(QUIET),) +CMAKE_QUIET = -DCMAKE_RULE_MESSAGES=OFF -DCMAKE_INSTALL_MESSAGE=NEVER +endif + +################################################################################ +# inner-cmake-package -- defines how the configuration, compilation and +# installation of a CMake package should be done, implements a few hooks to +# tune the build process and calls the generic package infrastructure to +# generate the necessary make targets +# +# argument 1 is the lowercase package name +# argument 2 is the uppercase package name, including a HOST_ prefix +# for host packages +# argument 3 is the uppercase package name, without the HOST_ prefix +# for host packages +# argument 4 is the type (target or host) +################################################################################ + +define inner-cmake-package + +$(2)_CONF_ENV ?= +$(2)_CONF_OPTS ?= +$(2)_MAKE ?= $$(MAKE) +$(2)_MAKE_ENV ?= +$(2)_MAKE_OPTS ?= +$(2)_INSTALL_OPTS ?= install +$(2)_INSTALL_STAGING_OPTS ?= DESTDIR=$$(STAGING_DIR) install/fast +$(2)_INSTALL_TARGET_OPTS ?= DESTDIR=$$(TARGET_DIR) install/fast + +$(3)_SUPPORTS_IN_SOURCE_BUILD ?= YES + + +ifeq ($$($(3)_SUPPORTS_IN_SOURCE_BUILD),YES) +$(2)_BUILDDIR = $$($(2)_SRCDIR) +else +$(2)_BUILDDIR = $$($(2)_SRCDIR)/buildroot-build +endif + +# +# Configure step. Only define it if not already defined by the package +# .mk file. And take care of the differences between host and target +# packages. +# +ifndef $(2)_CONFIGURE_CMDS +ifeq ($(4),target) + +# Configure package for target +# +# - We are passing BUILD_SHARED_LIBS because it is documented as a +# standard CMake variable to control the build of shared libraries +# (see https://cmake.org/cmake/help/v3.8/manual/cmake-variables.7.html#variables-that-change-behavior) +# - We are not passing BUILD_STATIC_LIBS because it is *not* +# documented as a standard CMake variable. If a package supports it, +# it must handle it explicitly. +# +define $(2)_CONFIGURE_CMDS + (mkdir -p $$($$(PKG)_BUILDDIR) && \ + cd $$($$(PKG)_BUILDDIR) && \ + rm -f CMakeCache.txt && \ + PATH=$$(BR_PATH) \ + $$($$(PKG)_CONF_ENV) $$(BR2_CMAKE) $$($$(PKG)_SRCDIR) \ + -DCMAKE_TOOLCHAIN_FILE="$$(HOST_DIR)/share/buildroot/toolchainfile.cmake" \ + -DCMAKE_INSTALL_PREFIX="/usr" \ + -DCMAKE_COLOR_MAKEFILE=OFF \ + -DBUILD_DOC=OFF \ + -DBUILD_DOCS=OFF \ + -DBUILD_EXAMPLE=OFF \ + -DBUILD_EXAMPLES=OFF \ + -DBUILD_TEST=OFF \ + -DBUILD_TESTS=OFF \ + -DBUILD_TESTING=OFF \ + -DBUILD_SHARED_LIBS=$$(if $$(BR2_STATIC_LIBS),OFF,ON) \ + $$(CMAKE_QUIET) \ + $$($$(PKG)_CONF_OPTS) \ + ) +endef +else + +# Configure package for host +define $(2)_CONFIGURE_CMDS + (mkdir -p $$($$(PKG)_BUILDDIR) && \ + cd $$($$(PKG)_BUILDDIR) && \ + rm -f CMakeCache.txt && \ + PATH=$$(BR_PATH) \ + PKG_CONFIG="$$(PKG_CONFIG_HOST_BINARY)" \ + PKG_CONFIG_SYSROOT_DIR="/" \ + PKG_CONFIG_LIBDIR="$$(HOST_DIR)/lib/pkgconfig:$$(HOST_DIR)/share/pkgconfig" \ + PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 \ + PKG_CONFIG_ALLOW_SYSTEM_LIBS=1 \ + $$($$(PKG)_CONF_ENV) $$(BR2_CMAKE) $$($$(PKG)_SRCDIR) \ + -DCMAKE_INSTALL_SO_NO_EXE=0 \ + -DCMAKE_FIND_ROOT_PATH="$$(HOST_DIR)" \ + -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM="BOTH" \ + -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY="BOTH" \ + -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE="BOTH" \ + -DCMAKE_INSTALL_PREFIX="$$(HOST_DIR)" \ + -DCMAKE_C_FLAGS="$$(HOST_CFLAGS)" \ + -DCMAKE_CXX_FLAGS="$$(HOST_CXXFLAGS)" \ + -DCMAKE_EXE_LINKER_FLAGS="$$(HOST_LDFLAGS)" \ + -DCMAKE_SHARED_LINKER_FLAGS="$$(HOST_LDFLAGS)" \ + -DCMAKE_ASM_COMPILER="$$(HOSTAS)" \ + -DCMAKE_C_COMPILER="$$(CMAKE_HOST_C_COMPILER)" \ + -DCMAKE_CXX_COMPILER="$$(CMAKE_HOST_CXX_COMPILER)" \ + $(if $$(CMAKE_HOST_C_COMPILER_LAUNCHER),\ + -DCMAKE_C_COMPILER_LAUNCHER="$$(CMAKE_HOST_C_COMPILER_LAUNCHER)" \ + -DCMAKE_CXX_COMPILER_LAUNCHER="$$(CMAKE_HOST_CXX_COMPILER_LAUNCHER)" \ + ) \ + -DCMAKE_COLOR_MAKEFILE=OFF \ + -DBUILD_DOC=OFF \ + -DBUILD_DOCS=OFF \ + -DBUILD_EXAMPLE=OFF \ + -DBUILD_EXAMPLES=OFF \ + -DBUILD_TEST=OFF \ + -DBUILD_TESTS=OFF \ + -DBUILD_TESTING=OFF \ + -DBUILD_SHARED_LIBS=ON \ + $$(CMAKE_QUIET) \ + $$($$(PKG)_CONF_OPTS) \ + ) +endef +endif +endif + +# Since some CMake modules (even upstream ones) use pgk_check_modules +# primitives to find {C,LD}FLAGS, add it to the dependency list. +$(2)_DEPENDENCIES += host-pkgconf + +$(2)_DEPENDENCIES += $(BR2_CMAKE_HOST_DEPENDENCY) + +# +# Build step. Only define it if not already defined by the package .mk +# file. +# +ifndef $(2)_BUILD_CMDS +ifeq ($(4),target) +define $(2)_BUILD_CMDS + $$(TARGET_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) $$($$(PKG)_MAKE_OPTS) -C $$($$(PKG)_BUILDDIR) +endef +else +define $(2)_BUILD_CMDS + $$(HOST_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) $$($$(PKG)_MAKE_OPTS) -C $$($$(PKG)_BUILDDIR) +endef +endif +endif + +# +# Host installation step. Only define it if not already defined by the +# package .mk file. +# +ifndef $(2)_INSTALL_CMDS +define $(2)_INSTALL_CMDS + $$(HOST_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) $$($$(PKG)_MAKE_OPTS) $$($$(PKG)_INSTALL_OPTS) -C $$($$(PKG)_BUILDDIR) +endef +endif + +# +# Staging installation step. Only define it if not already defined by +# the package .mk file. +# +ifndef $(2)_INSTALL_STAGING_CMDS +define $(2)_INSTALL_STAGING_CMDS + $$(TARGET_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) $$($$(PKG)_MAKE_OPTS) $$($$(PKG)_INSTALL_STAGING_OPTS) -C $$($$(PKG)_BUILDDIR) +endef +endif + +# +# Target installation step. Only define it if not already defined by +# the package .mk file. +# +ifndef $(2)_INSTALL_TARGET_CMDS +define $(2)_INSTALL_TARGET_CMDS + $$(TARGET_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) $$($$(PKG)_MAKE_OPTS) $$($$(PKG)_INSTALL_TARGET_OPTS) -C $$($$(PKG)_BUILDDIR) +endef +endif + +# Call the generic package infrastructure to generate the necessary +# make targets +$(call inner-generic-package,$(1),$(2),$(3),$(4)) + +endef + +################################################################################ +# cmake-package -- the target generator macro for CMake packages +################################################################################ + +cmake-package = $(call inner-cmake-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target) +host-cmake-package = $(call inner-cmake-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host) + +################################################################################ +# Generation of the CMake toolchain file +################################################################################ + +# CMAKE_SYSTEM_PROCESSOR should match uname -m +ifeq ($(BR2_ARM_CPU_ARMV4),y) +CMAKE_SYSTEM_PROCESSOR_ARM_VARIANT = armv4 +else ifeq ($(BR2_ARM_CPU_ARMV5),y) +CMAKE_SYSTEM_PROCESSOR_ARM_VARIANT = armv5 +else ifeq ($(BR2_ARM_CPU_ARMV6),y) +CMAKE_SYSTEM_PROCESSOR_ARM_VARIANT = armv6 +else ifeq ($(BR2_ARM_CPU_ARMV7A),y) +CMAKE_SYSTEM_PROCESSOR_ARM_VARIANT = armv7 +else ifeq ($(BR2_ARM_CPU_ARMV8A),y) +CMAKE_SYSTEM_PROCESSOR_ARM_VARIANT = armv8 +endif + +ifeq ($(BR2_arm),y) +CMAKE_SYSTEM_PROCESSOR = $(CMAKE_SYSTEM_PROCESSOR_ARM_VARIANT)l +else ifeq ($(BR2_armeb),y) +CMAKE_SYSTEM_PROCESSOR = $(CMAKE_SYSTEM_PROCESSOR_ARM_VARIANT)b +else ifeq ($(call qstrip,$(BR2_ARCH)),powerpc64) +CMAKE_SYSTEM_PROCESSOR = ppc64 +else ifeq ($(call qstrip,$(BR2_ARCH)),powerpc64le) +CMAKE_SYSTEM_PROCESSOR = ppc64le +else +CMAKE_SYSTEM_PROCESSOR = $(BR2_ARCH) +endif + +# In order to allow the toolchain to be relocated, we calculate the HOST_DIR +# based on the toolchainfile.cmake file's location: $(HOST_DIR)/share/buildroot +# In all the other variables, HOST_DIR will be replaced by RELOCATED_HOST_DIR, +# so we have to strip "$(HOST_DIR)/" from the paths that contain it. +define TOOLCHAIN_CMAKE_INSTALL_FILES + @mkdir -p $(HOST_DIR)/share/buildroot + sed \ + -e 's#@@STAGING_SUBDIR@@#$(call qstrip,$(STAGING_SUBDIR))#' \ + -e 's#@@TARGET_CFLAGS@@#$(call qstrip,$(TARGET_CFLAGS))#' \ + -e 's#@@TARGET_CXXFLAGS@@#$(call qstrip,$(TARGET_CXXFLAGS))#' \ + -e 's#@@TARGET_FCFLAGS@@#$(call qstrip,$(TARGET_FCFLAGS))#' \ + -e 's#@@TARGET_LDFLAGS@@#$(call qstrip,$(TARGET_LDFLAGS))#' \ + -e 's#@@TARGET_CC@@#$(subst $(HOST_DIR)/,,$(call qstrip,$(TARGET_CC)))#' \ + -e 's#@@TARGET_CXX@@#$(subst $(HOST_DIR)/,,$(call qstrip,$(TARGET_CXX)))#' \ + -e 's#@@TARGET_FC@@#$(subst $(HOST_DIR)/,,$(call qstrip,$(TARGET_FC)))#' \ + -e 's#@@CMAKE_SYSTEM_PROCESSOR@@#$(call qstrip,$(CMAKE_SYSTEM_PROCESSOR))#' \ + -e 's#@@TOOLCHAIN_HAS_CXX@@#$(if $(BR2_INSTALL_LIBSTDCPP),1,0)#' \ + -e 's#@@TOOLCHAIN_HAS_FORTRAN@@#$(if $(BR2_TOOLCHAIN_HAS_FORTRAN),1,0)#' \ + -e 's#@@CMAKE_BUILD_TYPE@@#$(if $(BR2_ENABLE_DEBUG),Debug,Release)#' \ + $(TOPDIR)/support/misc/toolchainfile.cmake.in \ + > $(HOST_DIR)/share/buildroot/toolchainfile.cmake + $(Q)$(INSTALL) -D -m 0644 support/misc/Buildroot.cmake \ + $(HOST_DIR)/share/buildroot/Platform/Buildroot.cmake +endef + +TOOLCHAIN_POST_INSTALL_STAGING_HOOKS += TOOLCHAIN_CMAKE_INSTALL_FILES diff --git a/package/pkg-download.mk b/package/pkg-download.mk new file mode 100644 index 00000000..2527ba5c --- /dev/null +++ b/package/pkg-download.mk @@ -0,0 +1,125 @@ +################################################################################ +# +# This file contains the download helpers for the various package +# infrastructures. It is used to handle downloads from HTTP servers, +# FTP servers, Git repositories, Subversion repositories, Mercurial +# repositories, Bazaar repositories, and SCP servers. +# +################################################################################ + +# Download method commands +export WGET := $(call qstrip,$(BR2_WGET)) +export SVN := $(call qstrip,$(BR2_SVN)) +export CVS := $(call qstrip,$(BR2_CVS)) +export BZR := $(call qstrip,$(BR2_BZR)) +export GIT := $(call qstrip,$(BR2_GIT)) +export HG := $(call qstrip,$(BR2_HG)) +export SCP := $(call qstrip,$(BR2_SCP)) +export LOCALFILES := $(call qstrip,$(BR2_LOCALFILES)) + +# Version of the format of the archives we generate in the corresponding +# download backend: +BR_FMT_VERSION_git = -br1 +BR_FMT_VERSION_svn = -br2 + +DL_WRAPPER = support/download/dl-wrapper + +# DL_DIR may have been set already from the environment +ifeq ($(origin DL_DIR),undefined) +DL_DIR ?= $(call qstrip,$(BR2_DL_DIR)) +ifeq ($(DL_DIR),) +DL_DIR := $(TOPDIR)/dl +endif +else +# Restore the BR2_DL_DIR that was overridden by the .config file +BR2_DL_DIR = $(DL_DIR) +endif + +# ensure it exists and a absolute path, derefrecing symlinks +DL_DIR := $(shell mkdir -p $(DL_DIR) && cd $(DL_DIR) >/dev/null && pwd -P) + +# +# URI scheme helper functions +# Example URIs: +# * http://www.example.com/dir/file +# * scp://www.example.com:dir/file (with domainseparator :) +# +# geturischeme: http +geturischeme = $(firstword $(subst ://, ,$(call qstrip,$(1)))) +# getschemeplusuri: git|parameter+http://example.com +getschemeplusuri = $(call geturischeme,$(1))$(if $(2),\|$(2))+$(1) +# stripurischeme: www.example.com/dir/file +stripurischeme = $(lastword $(subst ://, ,$(call qstrip,$(1)))) +# domain: www.example.com +domain = $(firstword $(subst $(call domainseparator,$(2)), ,$(call stripurischeme,$(1)))) +# notdomain: dir/file +notdomain = $(patsubst $(call domain,$(1),$(2))$(call domainseparator,$(2))%,%,$(call stripurischeme,$(1))) +# +# default domainseparator is /, specify alternative value as first argument +domainseparator = $(if $(1),$(1),/) + +# github(user,package,version): returns site of GitHub repository +github = https://github.com/$(1)/$(2)/archive/$(3) + +# gitlab(user,package,version): returns site of Gitlab-generated tarball +gitlab = https://gitlab.com/$(1)/$(2)/-/archive/$(3) + +# Expressly do not check hashes for those files +# Exported variables default to immediately expanded in some versions of +# make, but we need it to be recursively-epxanded, so explicitly assign it. +export BR_NO_CHECK_HASH_FOR = + +################################################################################ +# DOWNLOAD_URIS - List the candidates URIs where to get the package from: +# 1) BR2_PRIMARY_SITE if enabled +# 2) Download site, unless BR2_PRIMARY_SITE_ONLY is set +# 3) BR2_BACKUP_SITE if enabled, unless BR2_PRIMARY_SITE_ONLY is set +# +# Argument 1 is the source location +# Argument 2 is the upper-case package name +# +################################################################################ + +ifneq ($(call qstrip,$(BR2_PRIMARY_SITE)),) +DOWNLOAD_URIS += \ + $(call getschemeplusuri,$(call qstrip,$(BR2_PRIMARY_SITE)/$($(2)_DL_SUBDIR)),urlencode) \ + $(call getschemeplusuri,$(call qstrip,$(BR2_PRIMARY_SITE)),urlencode) +endif + +ifeq ($(BR2_PRIMARY_SITE_ONLY),) +DOWNLOAD_URIS += \ + $(patsubst %/,%,$(dir $(call qstrip,$(1)))) +ifneq ($(call qstrip,$(BR2_BACKUP_SITE)),) +DOWNLOAD_URIS += \ + $(call getschemeplusuri,$(call qstrip,$(BR2_BACKUP_SITE)/$($(2)_DL_SUBDIR)),urlencode) \ + $(call getschemeplusuri,$(call qstrip,$(BR2_BACKUP_SITE)),urlencode) +endif +endif + +################################################################################ +# DOWNLOAD -- Download helper. Will call DL_WRAPPER which will try to download +# source from the list returned by DOWNLOAD_URIS. +# +# Argument 1 is the source location +# Argument 2 is the upper-case package name +# +################################################################################ + +define DOWNLOAD + $(Q)mkdir -p $($(2)_DL_DIR) + $(Q)$(EXTRA_ENV) $($(2)_DL_ENV) \ + flock $($(2)_DL_DIR)/.lock $(DL_WRAPPER) \ + -c '$($(2)_DL_VERSION)' \ + -d '$($(2)_DL_DIR)' \ + -D '$(DL_DIR)' \ + -f '$(notdir $(1))' \ + -H '$($(2)_HASH_FILE)' \ + -n '$($(2)_BASENAME_RAW)' \ + -N '$($(2)_RAWNAME)' \ + -o '$($(2)_DL_DIR)/$(notdir $(1))' \ + $(if $($(2)_GIT_SUBMODULES),-r) \ + $(foreach uri,$(call DOWNLOAD_URIS,$(1),$(2)),-u $(uri)) \ + $(QUIET) \ + -- \ + $($(2)_DL_OPTS) +endef diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk new file mode 100644 index 00000000..45589bcb --- /dev/null +++ b/package/pkg-generic.mk @@ -0,0 +1,1266 @@ +################################################################################ +# Generic package infrastructure +# +# This file implements an infrastructure that eases development of +# package .mk files. It should be used for packages that do not rely +# on a well-known build system for which Buildroot has a dedicated +# infrastructure (so far, Buildroot has special support for +# autotools-based and CMake-based packages). +# +# See the Buildroot documentation for details on the usage of this +# infrastructure +# +# In terms of implementation, this generic infrastructure requires the +# .mk file to specify: +# +# 1. Metadata information about the package: name, version, +# download URL, etc. +# +# 2. Description of the commands to be executed to configure, build +# and install the package +################################################################################ + +################################################################################ +# Helper functions to catch start/end of each step +################################################################################ + +# Those two functions are called by each step below. +# They are responsible for calling all hooks defined in +# $(GLOBAL_INSTRUMENTATION_HOOKS) and pass each of them +# three arguments: +# $1: either 'start' or 'end' +# $2: the name of the step +# $3: the name of the package + +# Start step +# $1: step name +define step_start + $(foreach hook,$(GLOBAL_INSTRUMENTATION_HOOKS),$(call $(hook),start,$(1),$($(PKG)_NAME))$(sep)) +endef + +# End step +# $1: step name +define step_end + $(foreach hook,$(GLOBAL_INSTRUMENTATION_HOOKS),$(call $(hook),end,$(1),$($(PKG)_NAME))$(sep)) +endef + +####################################### +# Actual steps hooks + +# Time steps +define step_time + printf "%s:%-5.5s:%-20.20s: %s\n" \ + "$$(date +%s.%N)" "$(1)" "$(2)" "$(3)" \ + >>"$(BUILD_DIR)/build-time.log" +endef +GLOBAL_INSTRUMENTATION_HOOKS += step_time + +# This hook checks that host packages that need libraries that we build +# have a proper DT_RPATH or DT_RUNPATH tag +define check_host_rpath + $(if $(filter install-host,$(2)),\ + $(if $(filter end,$(1)),support/scripts/check-host-rpath $(3) $(HOST_DIR) $(PER_PACKAGE_DIR))) +endef +GLOBAL_INSTRUMENTATION_HOOKS += check_host_rpath + +define step_check_build_dir_one + if [ -d $(2) ]; then \ + printf "%s: installs files in %s\n" $(1) $(2) >&2; \ + exit 1; \ + fi +endef + +define step_check_build_dir + $(if $(filter install-staging,$(2)),\ + $(if $(filter end,$(1)),$(call step_check_build_dir_one,$(3),$(STAGING_DIR)/$(O)))) + $(if $(filter install-target,$(2)),\ + $(if $(filter end,$(1)),$(call step_check_build_dir_one,$(3),$(TARGET_DIR)/$(O)))) +endef +GLOBAL_INSTRUMENTATION_HOOKS += step_check_build_dir + +# User-supplied script +ifneq ($(BR2_INSTRUMENTATION_SCRIPTS),) +define step_user + @$(foreach user_hook, $(BR2_INSTRUMENTATION_SCRIPTS), \ + $(EXTRA_ENV) $(user_hook) "$(1)" "$(2)" "$(3)"$(sep)) +endef +GLOBAL_INSTRUMENTATION_HOOKS += step_user +endif + +####################################### +# Helper functions + +# Make sure .la files only reference the current per-package +# directory. + +# $1: package name (lower case) +# $2: staging directory of the package +ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y) +define fixup-libtool-files + $(Q)find $(2)/usr/lib* -name "*.la" | xargs --no-run-if-empty \ + $(SED) "s:$(PER_PACKAGE_DIR)/[^/]\+/:$(PER_PACKAGE_DIR)/$(1)/:g" +endef +endif + +# Functions to collect statistics about installed files + +# $(1): base directory to search in +# $(2): suffix of file (optional) +define pkg_size_before + cd $(1); \ + LC_ALL=C find . -not -path './$(STAGING_SUBDIR)/*' \( -type f -o -type l \) -printf '%T@:%i:%#m:%y:%s,%p\n' \ + | LC_ALL=C sort > $($(PKG)_DIR)/.files-list$(2).before +endef + +# $(1): base directory to search in +# $(2): suffix of file (optional) +define pkg_size_after + cd $(1); \ + LC_ALL=C find . -not -path './$(STAGING_SUBDIR)/*' \( -type f -o -type l \) -printf '%T@:%i:%#m:%y:%s,%p\n' \ + | LC_ALL=C sort > $($(PKG)_DIR)/.files-list$(2).after + LC_ALL=C comm -13 \ + $($(PKG)_DIR)/.files-list$(2).before \ + $($(PKG)_DIR)/.files-list$(2).after \ + | sed -r -e 's/^[^,]+/$($(PKG)_NAME)/' \ + > $($(PKG)_DIR)/.files-list$(2).txt + rm -f $($(PKG)_DIR)/.files-list$(2).before + rm -f $($(PKG)_DIR)/.files-list$(2).after +endef + +define check_bin_arch + support/scripts/check-bin-arch -p $($(PKG)_NAME) \ + -l $($(PKG)_DIR)/.files-list.txt \ + $(foreach i,$($(PKG)_BIN_ARCH_EXCLUDE),-i "$(i)") \ + -r $(TARGET_READELF) \ + -a $(BR2_READELF_ARCH_NAME) +endef + +################################################################################ +# Implicit targets -- produce a stamp file for each step of a package build +################################################################################ + +# Retrieve the archive +$(BUILD_DIR)/%/.stamp_downloaded: + @$(call step_start,download) + $(call prepare-per-package-directory,$($(PKG)_FINAL_DOWNLOAD_DEPENDENCIES)) + $(foreach hook,$($(PKG)_PRE_DOWNLOAD_HOOKS),$(call $(hook))$(sep)) +# Only show the download message if it isn't already downloaded + $(Q)for p in $($(PKG)_ALL_DOWNLOADS); do \ + if test ! -e $($(PKG)_DL_DIR)/`basename $$p` ; then \ + $(call MESSAGE,"Downloading") ; \ + break ; \ + fi ; \ + done + $(foreach p,$($(PKG)_ALL_DOWNLOADS),$(call DOWNLOAD,$(p),$(PKG))$(sep)) + $(foreach hook,$($(PKG)_POST_DOWNLOAD_HOOKS),$(call $(hook))$(sep)) + $(Q)mkdir -p $(@D) + @$(call step_end,download) + $(Q)touch $@ + +# Retrieve actual source archive, e.g. for prebuilt external toolchains +$(BUILD_DIR)/%/.stamp_actual_downloaded: + @$(call step_start,actual-download) + $(call DOWNLOAD,$($(PKG)_ACTUAL_SOURCE_SITE)/$($(PKG)_ACTUAL_SOURCE_TARBALL),$(PKG)) + $(Q)mkdir -p $(@D) + @$(call step_end,actual-download) + $(Q)touch $@ + +# Unpack the archive +$(BUILD_DIR)/%/.stamp_extracted: + @$(call step_start,extract) + @$(call MESSAGE,"Extracting") + $(call prepare-per-package-directory,$($(PKG)_FINAL_EXTRACT_DEPENDENCIES)) + $(foreach hook,$($(PKG)_PRE_EXTRACT_HOOKS),$(call $(hook))$(sep)) + $(Q)mkdir -p $(@D) + $($(PKG)_EXTRACT_CMDS) +# some packages have messed up permissions inside + $(Q)chmod -R +rw $(@D) + $(foreach hook,$($(PKG)_POST_EXTRACT_HOOKS),$(call $(hook))$(sep)) + @$(call step_end,extract) + $(Q)touch $@ + +# Rsync the source directory if the _OVERRIDE_SRCDIR feature is +# used. +$(BUILD_DIR)/%/.stamp_rsynced: + @$(call step_start,rsync) + @$(call MESSAGE,"Syncing from source dir $(SRCDIR)") + @mkdir -p $(@D) + $(foreach hook,$($(PKG)_PRE_RSYNC_HOOKS),$(call $(hook))$(sep)) + @test -d $(SRCDIR) || (echo "ERROR: $(SRCDIR) does not exist" ; exit 1) + rsync -au --chmod=u=rwX,go=rX $($(PKG)_OVERRIDE_SRCDIR_RSYNC_EXCLUSIONS) $(RSYNC_VCS_EXCLUSIONS) $(call qstrip,$(SRCDIR))/ $(@D) + $(foreach hook,$($(PKG)_POST_RSYNC_HOOKS),$(call $(hook))$(sep)) + @$(call step_end,rsync) + $(Q)touch $@ + +# Patch +# +# The RAWNAME variable is the lowercased package name, which allows to +# find the package directory (typically package/) and the +# prefix of the patches +# +# For BR2_GLOBAL_PATCH_DIR, only generate if it is defined +$(BUILD_DIR)/%/.stamp_patched: PATCH_BASE_DIRS = $(PKGDIR) +$(BUILD_DIR)/%/.stamp_patched: PATCH_BASE_DIRS += $(addsuffix /$(RAWNAME),$(call qstrip,$(BR2_GLOBAL_PATCH_DIR))) +$(BUILD_DIR)/%/.stamp_patched: + @$(call step_start,patch) + @$(call MESSAGE,"Patching") + $(foreach hook,$($(PKG)_PRE_PATCH_HOOKS),$(call $(hook))$(sep)) + $(foreach p,$($(PKG)_PATCH),$(APPLY_PATCHES) $(@D) $($(PKG)_DL_DIR) $(notdir $(p))$(sep)) + $(Q)( \ + for D in $(PATCH_BASE_DIRS); do \ + if test -d $${D}; then \ + if test -d $${D}/$($(PKG)_VERSION); then \ + $(APPLY_PATCHES) $(@D) $${D}/$($(PKG)_VERSION) \*.patch \*.patch.$(ARCH) || exit 1; \ + else \ + $(APPLY_PATCHES) $(@D) $${D} \*.patch \*.patch.$(ARCH) || exit 1; \ + fi; \ + fi; \ + done; \ + ) + $(foreach hook,$($(PKG)_POST_PATCH_HOOKS),$(call $(hook))$(sep)) + @$(call step_end,patch) + $(Q)touch $@ + +# Check that all directories specified in BR2_GLOBAL_PATCH_DIR exist. +$(foreach dir,$(call qstrip,$(BR2_GLOBAL_PATCH_DIR)),\ + $(if $(wildcard $(dir)),,\ + $(error BR2_GLOBAL_PATCH_DIR contains nonexistent directory $(dir)))) + +# Configure +$(BUILD_DIR)/%/.stamp_configured: + @$(call step_start,configure) + @$(call MESSAGE,"Configuring") + $(Q)mkdir -p $(HOST_DIR) $(TARGET_DIR) $(STAGING_DIR) $(BINARIES_DIR) + $(call prepare-per-package-directory,$($(PKG)_FINAL_DEPENDENCIES)) + @$(call pkg_size_before,$(TARGET_DIR)) + @$(call pkg_size_before,$(STAGING_DIR),-staging) + @$(call pkg_size_before,$(HOST_DIR),-host) + $(call fixup-libtool-files,$(NAME),$(STAGING_DIR)) + $(foreach hook,$($(PKG)_PRE_CONFIGURE_HOOKS),$(call $(hook))$(sep)) + $($(PKG)_CONFIGURE_CMDS) + $(foreach hook,$($(PKG)_POST_CONFIGURE_HOOKS),$(call $(hook))$(sep)) + @$(call step_end,configure) + $(Q)touch $@ + +# Build +$(BUILD_DIR)/%/.stamp_built:: + @$(call step_start,build) + @$(call MESSAGE,"Building") + $(foreach hook,$($(PKG)_PRE_BUILD_HOOKS),$(call $(hook))$(sep)) + +$($(PKG)_BUILD_CMDS) + $(foreach hook,$($(PKG)_POST_BUILD_HOOKS),$(call $(hook))$(sep)) + @$(call step_end,build) + $(Q)touch $@ + +# Install to host dir +$(BUILD_DIR)/%/.stamp_host_installed: + @$(call step_start,install-host) + @$(call MESSAGE,"Installing to host directory") + $(foreach hook,$($(PKG)_PRE_INSTALL_HOOKS),$(call $(hook))$(sep)) + +$($(PKG)_INSTALL_CMDS) + $(foreach hook,$($(PKG)_POST_INSTALL_HOOKS),$(call $(hook))$(sep)) + @$(call step_end,install-host) + $(Q)touch $@ + +# Install to staging dir +# +# Some packages install libtool .la files alongside any installed +# libraries. These .la files sometimes refer to paths relative to the +# sysroot, which libtool will interpret as absolute paths to host +# libraries instead of the target libraries. Since this is not what we +# want, these paths are fixed by prefixing them with $(STAGING_DIR). +# As we configure with --prefix=/usr, this fix needs to be applied to +# any path that starts with /usr. +# +# To protect against the case that the output or staging directories or +# the pre-installed external toolchain themselves are under /usr, we first +# substitute away any occurrences of these directories with @BASE_DIR@, +# @STAGING_DIR@ and @TOOLCHAIN_EXTERNAL_INSTALL_DIR@ respectively. +# +# Note that STAGING_DIR can be outside BASE_DIR when the user sets +# BR2_HOST_DIR to a custom value. Note that TOOLCHAIN_EXTERNAL_INSTALL_DIR +# can be under @BASE_DIR@ when it's a downloaded toolchain, and can be +# empty when we use an internal toolchain. +# +$(BUILD_DIR)/%/.stamp_staging_installed: + @$(call step_start,install-staging) + @$(call MESSAGE,"Installing to staging directory") + $(foreach hook,$($(PKG)_PRE_INSTALL_STAGING_HOOKS),$(call $(hook))$(sep)) + +$($(PKG)_INSTALL_STAGING_CMDS) + $(foreach hook,$($(PKG)_POST_INSTALL_STAGING_HOOKS),$(call $(hook))$(sep)) + $(Q)if test -n "$($(PKG)_CONFIG_SCRIPTS)" ; then \ + $(call MESSAGE,"Fixing package configuration files") ;\ + $(SED) "s,$(HOST_DIR),@HOST_DIR@,g" \ + -e "s,$(BASE_DIR),@BASE_DIR@,g" \ + -e "s,^\(exec_\)\?prefix=.*,\1prefix=@STAGING_DIR@/usr,g" \ + -e "s,-I/usr/,-I@STAGING_DIR@/usr/,g" \ + -e "s,-L/usr/,-L@STAGING_DIR@/usr/,g" \ + -e 's,@STAGING_DIR@,$$(dirname $$(readlink -e $$0))/../..,g' \ + -e 's,@HOST_DIR@,$$(dirname $$(readlink -e $$0))/../../../..,g' \ + -e "s,@BASE_DIR@,$(BASE_DIR),g" \ + $(addprefix $(STAGING_DIR)/usr/bin/,$($(PKG)_CONFIG_SCRIPTS)) ;\ + fi + @$(call MESSAGE,"Fixing libtool files") + for la in $$(find $(STAGING_DIR)/usr/lib* -name "*.la"); do \ + cp -a "$${la}" "$${la}.fixed" && \ + $(SED) "s:$(BASE_DIR):@BASE_DIR@:g" \ + -e "s:$(STAGING_DIR):@STAGING_DIR@:g" \ + $(if $(TOOLCHAIN_EXTERNAL_INSTALL_DIR),\ + -e "s:$(TOOLCHAIN_EXTERNAL_INSTALL_DIR):@TOOLCHAIN_EXTERNAL_INSTALL_DIR@:g") \ + -e "s:\(['= ]\)/usr:\\1@STAGING_DIR@/usr:g" \ + -e "s:\(['= ]\)/lib:\\1@STAGING_DIR@/lib:g" \ + $(if $(TOOLCHAIN_EXTERNAL_INSTALL_DIR),\ + -e "s:@TOOLCHAIN_EXTERNAL_INSTALL_DIR@:$(TOOLCHAIN_EXTERNAL_INSTALL_DIR):g") \ + -e "s:@STAGING_DIR@:$(STAGING_DIR):g" \ + -e "s:@BASE_DIR@:$(BASE_DIR):g" \ + "$${la}.fixed" && \ + if cmp -s "$${la}" "$${la}.fixed"; then \ + rm -f "$${la}.fixed"; \ + else \ + mv "$${la}.fixed" "$${la}"; \ + fi || exit 1; \ + done + @$(call step_end,install-staging) + $(Q)touch $@ + +# Install to images dir +$(BUILD_DIR)/%/.stamp_images_installed: + @$(call step_start,install-image) + @$(call MESSAGE,"Installing to images directory") + $(foreach hook,$($(PKG)_PRE_INSTALL_IMAGES_HOOKS),$(call $(hook))$(sep)) + +$($(PKG)_INSTALL_IMAGES_CMDS) + $(foreach hook,$($(PKG)_POST_INSTALL_IMAGES_HOOKS),$(call $(hook))$(sep)) + @$(call step_end,install-image) + $(Q)touch $@ + +# Install to target dir +$(BUILD_DIR)/%/.stamp_target_installed: + @$(call step_start,install-target) + @$(call MESSAGE,"Installing to target") + $(foreach hook,$($(PKG)_PRE_INSTALL_TARGET_HOOKS),$(call $(hook))$(sep)) + +$($(PKG)_INSTALL_TARGET_CMDS) + $(if $(BR2_INIT_SYSTEMD),\ + $($(PKG)_INSTALL_INIT_SYSTEMD)) + $(if $(BR2_INIT_SYSV)$(BR2_INIT_BUSYBOX),\ + $($(PKG)_INSTALL_INIT_SYSV)) + $(if $(BR2_INIT_OPENRC), \ + $(or $($(PKG)_INSTALL_INIT_OPENRC), \ + $($(PKG)_INSTALL_INIT_SYSV))) + $(foreach hook,$($(PKG)_POST_INSTALL_TARGET_HOOKS),$(call $(hook))$(sep)) + $(Q)if test -n "$($(PKG)_CONFIG_SCRIPTS)" ; then \ + $(RM) -f $(addprefix $(TARGET_DIR)/usr/bin/,$($(PKG)_CONFIG_SCRIPTS)) ; \ + fi + @$(call step_end,install-target) + $(Q)touch $@ + +# Final installation step, completed when all installation steps +# (host, images, staging, target) have completed +$(BUILD_DIR)/%/.stamp_installed: + @$(call pkg_size_after,$(TARGET_DIR)) + @$(call pkg_size_after,$(STAGING_DIR),-staging) + @$(call pkg_size_after,$(HOST_DIR),-host) + @$(call check_bin_arch) + $(Q)touch $@ + +# Remove package sources +$(BUILD_DIR)/%/.stamp_dircleaned: + $(if $(BR2_PER_PACKAGE_DIRECTORIES),rm -Rf $(PER_PACKAGE_DIR)/$(NAME)) + rm -Rf $(@D) + +################################################################################ +# virt-provides-single -- check that provider-pkg is the declared provider for +# the virtual package virt-pkg +# +# argument 1 is the lower-case name of the virtual package +# argument 2 is the upper-case name of the virtual package +# argument 3 is the lower-case name of the provider +# +# example: +# $(call virt-provides-single,libegl,LIBEGL,rpi-userland) +################################################################################ +define virt-provides-single +ifneq ($$(call qstrip,$$(BR2_PACKAGE_PROVIDES_$(2))),$(3)) +$$(error Configuration error: both "$(3)" and $$(BR2_PACKAGE_PROVIDES_$(2))\ +are selected as providers for virtual package "$(1)". Only one provider can\ +be selected at a time. Please fix your configuration) +endif +endef + +define pkg-graph-depends + @$$(INSTALL) -d $$(GRAPHS_DIR) + @cd "$$(CONFIG_DIR)"; \ + $$(TOPDIR)/support/scripts/graph-depends $$(BR2_GRAPH_DEPS_OPTS) \ + -p $(1) $(2) -o $$(GRAPHS_DIR)/$$(@).dot + dot $$(BR2_GRAPH_DOT_OPTS) -T$$(BR_GRAPH_OUT) \ + -o $$(GRAPHS_DIR)/$$(@).$$(BR_GRAPH_OUT) \ + $$(GRAPHS_DIR)/$$(@).dot +endef + +################################################################################ +# inner-generic-package -- generates the make targets needed to build a +# generic package +# +# argument 1 is the lowercase package name +# argument 2 is the uppercase package name, including a HOST_ prefix +# for host packages +# argument 3 is the uppercase package name, without the HOST_ prefix +# for host packages +# argument 4 is the type (target or host) +# +# Note about variable and function references: inside all blocks that are +# evaluated with $(eval), which includes all 'inner-xxx-package' blocks, +# specific rules apply with respect to variable and function references. +# - Numbered variables (parameters to the block) can be referenced with a single +# dollar sign: $(1), $(2), $(3), etc. +# - pkgdir and pkgname should be referenced with a single dollar sign too. These +# functions rely on 'the most recently parsed makefile' which is supposed to +# be the package .mk file. If we defer the evaluation of these functions using +# double dollar signs, then they may be evaluated too late, when other +# makefiles have already been parsed. One specific case is when $$(pkgdir) is +# assigned to a variable using deferred evaluation with '=' and this variable +# is used in a target rule outside the eval'ed inner block. In this case, the +# pkgdir will be that of the last makefile parsed by buildroot, which is not +# the expected value. This mechanism is for example used for the TARGET_PATCH +# rule. +# - All other variables should be referenced with a double dollar sign: +# $$(TARGET_DIR), $$($(2)_VERSION), etc. Also all make functions should be +# referenced with a double dollar sign: $$(subst), $$(call), $$(filter-out), +# etc. This rule ensures that these variables and functions are only expanded +# during the $(eval) step, and not earlier. Otherwise, unintuitive and +# undesired behavior occurs with respect to these variables and functions. +# +################################################################################ + +define inner-generic-package + +# When doing a package, we're definitely not doing a rootfs, but we +# may inherit it via the dependency chain, so we reset it. +$(1): ROOTFS= + +# Ensure the package is only declared once, i.e. do not accept that a +# package be re-defined by a br2-external tree +ifneq ($(call strip,$(filter $(1),$(PACKAGES_ALL))),) +$$(error Package '$(1)' defined a second time in '$(pkgdir)'; \ + previous definition was in '$$($(2)_PKGDIR)') +endif +PACKAGES_ALL += $(1) + +# Define default values for various package-related variables, if not +# already defined. For some variables (version, source, site and +# subdir), if they are undefined, we try to see if a variable without +# the HOST_ prefix is defined. If so, we use such a variable, so that +# this information has only to be specified once, for both the +# target and host packages of a given .mk file. + +$(2)_TYPE = $(4) +$(2)_NAME = $(1) +$(2)_RAWNAME = $$(patsubst host-%,%,$(1)) +$(2)_PKGDIR = $(pkgdir) + +# Keep the package version that may contain forward slashes in the _DL_VERSION +# variable, then replace all forward slashes ('/') by underscores ('_') to +# sanitize the package version that is used in paths, directory and file names. +# Forward slashes may appear in the package's version when pointing to a +# version control system branch or tag, for example remotes/origin/1_10_stable. +# Similar for spaces and colons (:) that may appear in date-based revisions for +# CVS. +ifndef $(2)_VERSION + ifdef $(3)_DL_VERSION + $(2)_DL_VERSION := $$($(3)_DL_VERSION) + else ifdef $(3)_VERSION + $(2)_DL_VERSION := $$($(3)_VERSION) + endif +else + $(2)_DL_VERSION := $$(strip $$($(2)_VERSION)) +endif +$(2)_VERSION := $$(call sanitize,$$($(2)_DL_VERSION)) + +$(2)_HASH_FILE = \ + $$(strip \ + $$(if $$(wildcard $$($(2)_PKGDIR)/$$($(2)_VERSION)/$$($(2)_RAWNAME).hash),\ + $$($(2)_PKGDIR)/$$($(2)_VERSION)/$$($(2)_RAWNAME).hash,\ + $$($(2)_PKGDIR)/$$($(2)_RAWNAME).hash)) + +ifdef $(3)_OVERRIDE_SRCDIR + $(2)_OVERRIDE_SRCDIR ?= $$($(3)_OVERRIDE_SRCDIR) +endif + +$(2)_BASENAME = $$(if $$($(2)_VERSION),$(1)-$$($(2)_VERSION),$(1)) +$(2)_BASENAME_RAW = $$(if $$($(2)_VERSION),$$($(2)_RAWNAME)-$$($(2)_VERSION),$$($(2)_RAWNAME)) +$(2)_DL_SUBDIR ?= $$($(2)_RAWNAME) +$(2)_DL_DIR = $$(DL_DIR)/$$($(2)_DL_SUBDIR) +$(2)_DIR = $$(BUILD_DIR)/$$($(2)_BASENAME) + +ifndef $(2)_SUBDIR + ifdef $(3)_SUBDIR + $(2)_SUBDIR = $$($(3)_SUBDIR) + else + $(2)_SUBDIR ?= + endif +endif + +ifndef $(2)_STRIP_COMPONENTS + ifdef $(3)_STRIP_COMPONENTS + $(2)_STRIP_COMPONENTS = $$($(3)_STRIP_COMPONENTS) + else + $(2)_STRIP_COMPONENTS ?= 1 + endif +endif + +$(2)_SRCDIR = $$($(2)_DIR)/$$($(2)_SUBDIR) +$(2)_BUILDDIR ?= $$($(2)_SRCDIR) + +ifneq ($$($(2)_OVERRIDE_SRCDIR),) +$(2)_VERSION = custom +endif + +ifndef $(2)_SOURCE + ifdef $(3)_SOURCE + $(2)_SOURCE = $$($(3)_SOURCE) + else ifdef $(2)_VERSION + $(2)_SOURCE ?= $$($(2)_BASENAME_RAW)$$(call pkg_source_ext,$(2)) + endif +endif + +# If FOO_ACTUAL_SOURCE_TARBALL is explicitly defined, it means FOO_SOURCE is +# indeed a binary (e.g. external toolchain) and FOO_ACTUAL_SOURCE_TARBALL/_SITE +# point to the actual sources tarball. Use the actual sources for legal-info. +# For most packages the FOO_SITE/FOO_SOURCE pair points to real source code, +# so these are the defaults for FOO_ACTUAL_*. +$(2)_ACTUAL_SOURCE_TARBALL ?= $$($(2)_SOURCE) +$(2)_ACTUAL_SOURCE_SITE ?= $$(call qstrip,$$($(2)_SITE)) + +ifndef $(2)_PATCH + ifdef $(3)_PATCH + $(2)_PATCH = $$($(3)_PATCH) + endif +endif + +$(2)_ALL_DOWNLOADS = \ + $$(if $$($(2)_SOURCE),$$($(2)_SITE_METHOD)+$$($(2)_SITE)/$$($(2)_SOURCE)) \ + $$(foreach p,$$($(2)_PATCH) $$($(2)_EXTRA_DOWNLOADS),\ + $$(if $$(findstring ://,$$(p)),$$(p),\ + $$($(2)_SITE_METHOD)+$$($(2)_SITE)/$$(p))) + +ifndef $(2)_SITE + ifdef $(3)_SITE + $(2)_SITE = $$($(3)_SITE) + endif +endif + +ifndef $(2)_SITE_METHOD + ifdef $(3)_SITE_METHOD + $(2)_SITE_METHOD = $$($(3)_SITE_METHOD) + else + # Try automatic detection using the scheme part of the URI + $(2)_SITE_METHOD = $$(call geturischeme,$$($(2)_SITE)) + endif +endif + +ifndef $(2)_DL_OPTS + ifdef $(3)_DL_OPTS + $(2)_DL_OPTS = $$($(3)_DL_OPTS) + endif +endif + +ifneq ($$(filter bzr cvs hg,$$($(2)_SITE_METHOD)),) +BR_NO_CHECK_HASH_FOR += $$($(2)_SOURCE) +endif + +ifndef $(2)_GIT_SUBMODULES + ifdef $(3)_GIT_SUBMODULES + $(2)_GIT_SUBMODULES = $$($(3)_GIT_SUBMODULES) + endif +endif + +# Do not accept to download git submodule if not using the git method +ifneq ($$($(2)_GIT_SUBMODULES),) + ifneq ($$($(2)_SITE_METHOD),git) + $$(error $(2) declares having git sub-modules, but does not use the \ + 'git' method (uses '$$($(2)_SITE_METHOD)' instead)) + endif +endif + +ifeq ($$($(2)_SITE_METHOD),local) +ifeq ($$($(2)_OVERRIDE_SRCDIR),) +$(2)_OVERRIDE_SRCDIR = $$($(2)_SITE) +endif +ifeq ($$($(2)_OVERRIDE_SRCDIR),) +$$(error $(1) has local site method, but `$(2)_SITE` is not defined) +endif +endif + +ifndef $(2)_LICENSE + ifdef $(3)_LICENSE + $(2)_LICENSE = $$($(3)_LICENSE) + endif +endif + +$(2)_LICENSE ?= unknown + +ifndef $(2)_LICENSE_FILES + ifdef $(3)_LICENSE_FILES + $(2)_LICENSE_FILES = $$($(3)_LICENSE_FILES) + endif +endif + +ifndef $(2)_REDISTRIBUTE + ifdef $(3)_REDISTRIBUTE + $(2)_REDISTRIBUTE = $$($(3)_REDISTRIBUTE) + endif +endif + +$(2)_REDISTRIBUTE ?= YES + +$(2)_REDIST_SOURCES_DIR = $$(REDIST_SOURCES_DIR_$$(call UPPERCASE,$(4)))/$$($(2)_BASENAME_RAW) + +# If any of the _CPE_ID_* variables are set, we assume the CPE ID +# information is valid for this package. +ifneq ($$($(2)_CPE_ID_VENDOR)$$($(2)_CPE_ID_PRODUCT)$$($(2)_CPE_ID_VERSION)$$($(2)_CPE_ID_UPDATE)$$($(2)_CPE_ID_PREFIX),) +$(2)_CPE_ID_VALID = YES +endif + +# When we're a host package, make sure to use the variables of the +# corresponding target package, if any. +ifneq ($$($(3)_CPE_ID_VENDOR)$$($(3)_CPE_ID_PRODUCT)$$($(3)_CPE_ID_VERSION)$$($(3)_CPE_ID_UPDATE)$$($(3)_CPE_ID_PREFIX),) +$(2)_CPE_ID_VALID = YES +endif + +# If the CPE ID is valid for the target package so it is for the host +# package +ifndef $(2)_CPE_ID_VALID + ifdef $(3)_CPE_ID_VALID + $(2)_CPE_ID_VALID = $$($(3)_CPE_ID_VALID) + endif +endif + +ifeq ($$($(2)_CPE_ID_VALID),YES) + # CPE_ID_VENDOR + ifndef $(2)_CPE_ID_VENDOR + ifdef $(3)_CPE_ID_VENDOR + $(2)_CPE_ID_VENDOR = $$($(3)_CPE_ID_VENDOR) + else + $(2)_CPE_ID_VENDOR = $$($(2)_RAWNAME)_project + endif + endif + + # CPE_ID_PRODUCT + ifndef $(2)_CPE_ID_PRODUCT + ifdef $(3)_CPE_ID_PRODUCT + $(2)_CPE_ID_PRODUCT = $$($(3)_CPE_ID_PRODUCT) + else + $(2)_CPE_ID_PRODUCT = $$($(2)_RAWNAME) + endif + endif + + # CPE_ID_VERSION + ifndef $(2)_CPE_ID_VERSION + ifdef $(3)_CPE_ID_VERSION + $(2)_CPE_ID_VERSION = $$($(3)_CPE_ID_VERSION) + else + $(2)_CPE_ID_VERSION = $$($(2)_VERSION) + endif + endif + + # CPE_ID_UPDATE + ifndef $(2)_CPE_ID_UPDATE + ifdef $(3)_CPE_ID_UPDATE + $(2)_CPE_ID_UPDATE = $$($(3)_CPE_ID_UPDATE) + else + $(2)_CPE_ID_UPDATE = * + endif + endif + + # CPE_ID_PREFIX + ifndef $(2)_CPE_ID_PREFIX + ifdef $(3)_CPE_ID_PREFIX + $(2)_CPE_ID_PREFIX = $$($(3)_CPE_ID_PREFIX) + else + $(2)_CPE_ID_PREFIX = cpe:2.3:a + endif + endif + + # Calculate complete CPE ID + $(2)_CPE_ID = $$($(2)_CPE_ID_PREFIX):$$($(2)_CPE_ID_VENDOR):$$($(2)_CPE_ID_PRODUCT):$$($(2)_CPE_ID_VERSION):$$($(2)_CPE_ID_UPDATE):*:*:*:*:*:* +endif # ifeq ($$($(2)_CPE_ID_VALID),YES) + +# When a target package is a toolchain dependency set this variable to +# 'NO' so the 'toolchain' dependency is not added to prevent a circular +# dependency. +# Similarly for the skeleton. +$(2)_ADD_TOOLCHAIN_DEPENDENCY ?= YES +$(2)_ADD_SKELETON_DEPENDENCY ?= YES + + +ifeq ($(4),target) +ifeq ($$($(2)_ADD_SKELETON_DEPENDENCY),YES) +$(2)_DEPENDENCIES += skeleton +endif +ifeq ($$($(2)_ADD_TOOLCHAIN_DEPENDENCY),YES) +$(2)_DEPENDENCIES += toolchain +endif +endif + +ifneq ($(1),host-skeleton) +$(2)_DEPENDENCIES += host-skeleton +endif + +ifneq ($$(filter cvs git svn,$$($(2)_SITE_METHOD)),) +$(2)_DOWNLOAD_DEPENDENCIES += \ + $(BR2_GZIP_HOST_DEPENDENCY) \ + $(BR2_TAR_HOST_DEPENDENCY) +endif + +ifeq ($$(filter host-tar host-skeleton host-fakedate,$(1)),) +$(2)_EXTRACT_DEPENDENCIES += $$(BR2_TAR_HOST_DEPENDENCY) +endif + +ifeq ($$(filter host-tar host-skeleton host-xz host-lzip host-fakedate,$(1)),) +$(2)_EXTRACT_DEPENDENCIES += \ + $$(foreach dl,$$($(2)_ALL_DOWNLOADS),\ + $$(call extractor-pkg-dependency,$$(notdir $$(dl)))) +endif + +ifeq ($$(BR2_CCACHE),y) +ifeq ($$(filter host-tar host-skeleton host-xz host-lzip host-fakedate host-ccache,$(1)),) +$(2)_DEPENDENCIES += host-ccache +endif +endif + +ifeq ($$(BR2_REPRODUCIBLE),y) +ifeq ($$(filter host-skeleton host-fakedate,$(1)),) +$(2)_DEPENDENCIES += host-fakedate +endif +endif + +# Eliminate duplicates in dependencies +$(2)_FINAL_DEPENDENCIES = $$(sort $$($(2)_DEPENDENCIES)) +$(2)_FINAL_DOWNLOAD_DEPENDENCIES = $$(sort $$($(2)_DOWNLOAD_DEPENDENCIES)) +$(2)_FINAL_EXTRACT_DEPENDENCIES = $$(sort $$($(2)_EXTRACT_DEPENDENCIES)) +$(2)_FINAL_PATCH_DEPENDENCIES = $$(sort $$($(2)_PATCH_DEPENDENCIES)) +$(2)_FINAL_ALL_DEPENDENCIES = \ + $$(sort \ + $$($(2)_FINAL_DEPENDENCIES) \ + $$($(2)_FINAL_DOWNLOAD_DEPENDENCIES) \ + $$($(2)_FINAL_EXTRACT_DEPENDENCIES) \ + $$($(2)_FINAL_PATCH_DEPENDENCIES)) +$(2)_FINAL_RECURSIVE_DEPENDENCIES = $$(sort \ + $$(if $$(filter undefined,$$(origin $(2)_FINAL_RECURSIVE_DEPENDENCIES__X)), \ + $$(eval $(2)_FINAL_RECURSIVE_DEPENDENCIES__X := \ + $$(foreach p, \ + $$($(2)_FINAL_ALL_DEPENDENCIES), \ + $$(p) \ + $$($$(call UPPERCASE,$$(p))_FINAL_RECURSIVE_DEPENDENCIES) \ + ) \ + ) \ + ) \ + $$($(2)_FINAL_RECURSIVE_DEPENDENCIES__X)) + +$(2)_FINAL_RECURSIVE_RDEPENDENCIES = $$(sort \ + $$(if $$(filter undefined,$$(origin $(2)_FINAL_RECURSIVE_RDEPENDENCIES__X)), \ + $$(eval $(2)_FINAL_RECURSIVE_RDEPENDENCIES__X := \ + $$(foreach p, \ + $$($(2)_RDEPENDENCIES), \ + $$(p) \ + $$($$(call UPPERCASE,$$(p))_FINAL_RECURSIVE_RDEPENDENCIES) \ + ) \ + ) \ + ) \ + $$($(2)_FINAL_RECURSIVE_RDEPENDENCIES__X)) + +# define sub-target stamps +$(2)_TARGET_INSTALL = $$($(2)_DIR)/.stamp_installed +$(2)_TARGET_INSTALL_TARGET = $$($(2)_DIR)/.stamp_target_installed +$(2)_TARGET_INSTALL_STAGING = $$($(2)_DIR)/.stamp_staging_installed +$(2)_TARGET_INSTALL_IMAGES = $$($(2)_DIR)/.stamp_images_installed +$(2)_TARGET_INSTALL_HOST = $$($(2)_DIR)/.stamp_host_installed +$(2)_TARGET_BUILD = $$($(2)_DIR)/.stamp_built +$(2)_TARGET_CONFIGURE = $$($(2)_DIR)/.stamp_configured +$(2)_TARGET_RSYNC = $$($(2)_DIR)/.stamp_rsynced +$(2)_TARGET_PATCH = $$($(2)_DIR)/.stamp_patched +$(2)_TARGET_EXTRACT = $$($(2)_DIR)/.stamp_extracted +$(2)_TARGET_SOURCE = $$($(2)_DIR)/.stamp_downloaded +$(2)_TARGET_ACTUAL_SOURCE = $$($(2)_DIR)/.stamp_actual_downloaded +$(2)_TARGET_DIRCLEAN = $$($(2)_DIR)/.stamp_dircleaned + +# default extract command +$(2)_EXTRACT_CMDS ?= \ + $$(if $$($(2)_SOURCE),$$(INFLATE$$(suffix $$($(2)_SOURCE))) $$($(2)_DL_DIR)/$$($(2)_SOURCE) | \ + $$(TAR) --strip-components=$$($(2)_STRIP_COMPONENTS) \ + -C $$($(2)_DIR) \ + $$(foreach x,$$($(2)_EXCLUDES),--exclude='$$(x)' ) \ + $$(TAR_OPTIONS) -) + +# pre/post-steps hooks +$(2)_PRE_DOWNLOAD_HOOKS ?= +$(2)_POST_DOWNLOAD_HOOKS ?= +$(2)_PRE_EXTRACT_HOOKS ?= +$(2)_POST_EXTRACT_HOOKS ?= +$(2)_PRE_RSYNC_HOOKS ?= +$(2)_POST_RSYNC_HOOKS ?= +$(2)_PRE_PATCH_HOOKS ?= +$(2)_POST_PATCH_HOOKS ?= +$(2)_PRE_CONFIGURE_HOOKS ?= +$(2)_POST_CONFIGURE_HOOKS ?= +$(2)_PRE_BUILD_HOOKS ?= +$(2)_POST_BUILD_HOOKS ?= +$(2)_PRE_INSTALL_HOOKS ?= +$(2)_POST_INSTALL_HOOKS ?= +$(2)_PRE_INSTALL_STAGING_HOOKS ?= +$(2)_POST_INSTALL_STAGING_HOOKS ?= +$(2)_PRE_INSTALL_TARGET_HOOKS ?= +$(2)_POST_INSTALL_TARGET_HOOKS ?= +$(2)_PRE_INSTALL_IMAGES_HOOKS ?= +$(2)_POST_INSTALL_IMAGES_HOOKS ?= +$(2)_PRE_LEGAL_INFO_HOOKS ?= +$(2)_POST_LEGAL_INFO_HOOKS ?= +$(2)_TARGET_FINALIZE_HOOKS ?= +$(2)_ROOTFS_PRE_CMD_HOOKS ?= + +ifeq ($$($(2)_TYPE),target) +ifneq ($$(HOST_$(2)_KCONFIG_VAR),) +$$(error "Package $(1) defines host variant before target variant!") +endif +endif + +# human-friendly targets and target sequencing +$(1): $(1)-install +$(1)-install: $$($(2)_TARGET_INSTALL) +$$($(2)_TARGET_INSTALL): $$($(2)_TARGET_BUILD) + +ifeq ($$($(2)_TYPE),host) +$$($(2)_TARGET_INSTALL): $$($(2)_TARGET_INSTALL_HOST) +else +$(2)_INSTALL_STAGING ?= NO +$(2)_INSTALL_IMAGES ?= NO +$(2)_INSTALL_TARGET ?= YES +ifeq ($$($(2)_INSTALL_TARGET),YES) +$$($(2)_TARGET_INSTALL): $$($(2)_TARGET_INSTALL_TARGET) +endif +ifeq ($$($(2)_INSTALL_STAGING),YES) +$$($(2)_TARGET_INSTALL): $$($(2)_TARGET_INSTALL_STAGING) +endif +ifeq ($$($(2)_INSTALL_IMAGES),YES) +$$($(2)_TARGET_INSTALL): $$($(2)_TARGET_INSTALL_IMAGES) +endif +endif + +ifeq ($$($(2)_INSTALL_TARGET),YES) +$(1)-install-target: $$($(2)_TARGET_INSTALL_TARGET) +$$($(2)_TARGET_INSTALL_TARGET): $$($(2)_TARGET_BUILD) +else +$(1)-install-target: +endif + +ifeq ($$($(2)_INSTALL_STAGING),YES) +$(1)-install-staging: $$($(2)_TARGET_INSTALL_STAGING) +$$($(2)_TARGET_INSTALL_STAGING): $$($(2)_TARGET_BUILD) +# Some packages use install-staging stuff for install-target +$$($(2)_TARGET_INSTALL_TARGET): $$($(2)_TARGET_INSTALL_STAGING) +else +$(1)-install-staging: +endif + +ifeq ($$($(2)_INSTALL_IMAGES),YES) +$(1)-install-images: $$($(2)_TARGET_INSTALL_IMAGES) +$$($(2)_TARGET_INSTALL_IMAGES): $$($(2)_TARGET_BUILD) +else +$(1)-install-images: +endif + +$(1)-install-host: $$($(2)_TARGET_INSTALL_HOST) +$$($(2)_TARGET_INSTALL_HOST): $$($(2)_TARGET_BUILD) + +$(1)-build: $$($(2)_TARGET_BUILD) +$$($(2)_TARGET_BUILD): $$($(2)_TARGET_CONFIGURE) + +# Since $(2)_FINAL_DEPENDENCIES are phony targets, they are always "newer" +# than $(2)_TARGET_CONFIGURE. This would force the configure step (and +# therefore the other steps as well) to be re-executed with every +# invocation of make. Therefore, make $(2)_FINAL_DEPENDENCIES an order-only +# dependency by using |. + +$(1)-configure: $$($(2)_TARGET_CONFIGURE) +$$($(2)_TARGET_CONFIGURE): | $$($(2)_FINAL_DEPENDENCIES) + +$$($(2)_TARGET_SOURCE) $$($(2)_TARGET_RSYNC): | prepare +$$($(2)_TARGET_SOURCE) $$($(2)_TARGET_RSYNC): | dependencies + +ifeq ($$($(2)_OVERRIDE_SRCDIR),) +# In the normal case (no package override), the sequence of steps is +# source, by downloading +# depends +# extract +# patch +# configure +$$($(2)_TARGET_CONFIGURE): $$($(2)_TARGET_PATCH) + +$(1)-patch: $$($(2)_TARGET_PATCH) +$$($(2)_TARGET_PATCH): $$($(2)_TARGET_EXTRACT) +# Order-only dependency +$$($(2)_TARGET_PATCH): | $$(patsubst %,%-patch,$$($(2)_FINAL_PATCH_DEPENDENCIES)) + +$(1)-extract: $$($(2)_TARGET_EXTRACT) +$$($(2)_TARGET_EXTRACT): $$($(2)_TARGET_SOURCE) +$$($(2)_TARGET_EXTRACT): | $$($(2)_FINAL_EXTRACT_DEPENDENCIES) + +$(1)-depends: $$($(2)_FINAL_ALL_DEPENDENCIES) + +$(1)-source: $$($(2)_TARGET_SOURCE) +$$($(2)_TARGET_SOURCE): | $$($(2)_FINAL_DOWNLOAD_DEPENDENCIES) + +$(1)-all-source: $(1)-legal-source +$(1)-legal-info: $(1)-legal-source +$(1)-legal-source: $(1)-source + +# Only download the actual source if it differs from the 'main' archive +ifneq ($$($(2)_ACTUAL_SOURCE_TARBALL),) +ifneq ($$($(2)_ACTUAL_SOURCE_TARBALL),$$($(2)_SOURCE)) +$(1)-legal-source: $$($(2)_TARGET_ACTUAL_SOURCE) +endif # actual sources != sources +endif # actual sources != "" + +$(1)-external-deps: + @for p in $$($(2)_SOURCE) $$($(2)_PATCH) $$($(2)_EXTRA_DOWNLOADS) ; do \ + echo `basename $$$$p` ; \ + done +else +# In the package override case, the sequence of steps +# source, by rsyncing +# depends +# configure + +# Use an order-only dependency so the "-clean-for-rebuild" rule +# can remove the stamp file without triggering the configure step. +$$($(2)_TARGET_CONFIGURE): | $$($(2)_TARGET_RSYNC) + +$(1)-depends: $$($(2)_FINAL_DEPENDENCIES) + +$(1)-patch: $(1)-rsync +$(1)-extract: $(1)-rsync + +$(1)-rsync: $$($(2)_TARGET_RSYNC) + +$(1)-source: +$(1)-legal-source: + +$(1)-external-deps: + @echo "file://$$($(2)_OVERRIDE_SRCDIR)" +endif + +$(1)-show-version: + @echo $$($(2)_VERSION) + +$(1)-show-depends: + @echo $$($(2)_FINAL_ALL_DEPENDENCIES) + +$(1)-show-recursive-depends: + @echo $$($(2)_FINAL_RECURSIVE_DEPENDENCIES) + +$(1)-show-rdepends: + @echo $$($(2)_RDEPENDENCIES) + +$(1)-show-recursive-rdepends: + @echo $$($(2)_FINAL_RECURSIVE_RDEPENDENCIES) + +$(1)-show-build-order: $$(patsubst %,%-show-build-order,$$($(2)_FINAL_ALL_DEPENDENCIES)) + @: + $$(info $(1)) + +$(1)-show-info: + @: + $$(info $$(call clean-json,{ $$(call json-info,$(2)) })) + +$(1)-graph-depends: graph-depends-requirements + $(call pkg-graph-depends,$(1),--direct) + +$(1)-graph-rdepends: graph-depends-requirements + $(call pkg-graph-depends,$(1),--reverse) + +$(1)-all-source: $(1)-source +$(1)-all-source: $$(foreach p,$$($(2)_FINAL_ALL_DEPENDENCIES),$$(p)-all-source) + +$(1)-all-external-deps: $(1)-external-deps +$(1)-all-external-deps: $$(foreach p,$$($(2)_FINAL_ALL_DEPENDENCIES),$$(p)-all-external-deps) + +$(1)-all-legal-info: $(1)-legal-info +$(1)-all-legal-info: $$(foreach p,$$($(2)_FINAL_ALL_DEPENDENCIES),$$(p)-all-legal-info) + +$(1)-dirclean: $$($(2)_TARGET_DIRCLEAN) + +$(1)-clean-for-reinstall: +ifneq ($$($(2)_OVERRIDE_SRCDIR),) + rm -f $$($(2)_TARGET_RSYNC) +endif + rm -f $$($(2)_TARGET_INSTALL) + rm -f $$($(2)_TARGET_INSTALL_STAGING) + rm -f $$($(2)_TARGET_INSTALL_TARGET) + rm -f $$($(2)_TARGET_INSTALL_IMAGES) + rm -f $$($(2)_TARGET_INSTALL_HOST) + +$(1)-reinstall: $(1)-clean-for-reinstall $(1) + +$(1)-clean-for-rebuild: $(1)-clean-for-reinstall + rm -f $$($(2)_TARGET_BUILD) + +$(1)-rebuild: $(1)-clean-for-rebuild $(1) + +$(1)-clean-for-reconfigure: $(1)-clean-for-rebuild + rm -f $$($(2)_TARGET_CONFIGURE) + +$(1)-reconfigure: $(1)-clean-for-reconfigure $(1) + +# define the PKG variable for all targets, containing the +# uppercase package variable prefix +$$($(2)_TARGET_INSTALL): PKG=$(2) +$$($(2)_TARGET_INSTALL_TARGET): PKG=$(2) +$$($(2)_TARGET_INSTALL_STAGING): PKG=$(2) +$$($(2)_TARGET_INSTALL_IMAGES): PKG=$(2) +$$($(2)_TARGET_INSTALL_HOST): PKG=$(2) +$$($(2)_TARGET_BUILD): PKG=$(2) +$$($(2)_TARGET_CONFIGURE): PKG=$(2) +$$($(2)_TARGET_CONFIGURE): NAME=$(1) +$$($(2)_TARGET_RSYNC): SRCDIR=$$($(2)_OVERRIDE_SRCDIR) +$$($(2)_TARGET_RSYNC): PKG=$(2) +$$($(2)_TARGET_PATCH): PKG=$(2) +$$($(2)_TARGET_PATCH): RAWNAME=$$(patsubst host-%,%,$(1)) +$$($(2)_TARGET_PATCH): PKGDIR=$(pkgdir) +$$($(2)_TARGET_EXTRACT): PKG=$(2) +$$($(2)_TARGET_SOURCE): PKG=$(2) +$$($(2)_TARGET_SOURCE): PKGDIR=$(pkgdir) +$$($(2)_TARGET_ACTUAL_SOURCE): PKG=$(2) +$$($(2)_TARGET_ACTUAL_SOURCE): PKGDIR=$(pkgdir) +$$($(2)_TARGET_DIRCLEAN): PKG=$(2) +$$($(2)_TARGET_DIRCLEAN): NAME=$(1) + +# Compute the name of the Kconfig option that correspond to the +# package being enabled. We handle three cases: the special Linux +# kernel case, the bootloaders case, and the normal packages case. +# Virtual packages are handled separately (see below). +ifeq ($(1),linux) +$(2)_KCONFIG_VAR = BR2_LINUX_KERNEL +else ifneq ($$(filter boot/% $$(foreach dir,$$(BR2_EXTERNAL_DIRS),$$(dir)/boot/%),$(pkgdir)),) +$(2)_KCONFIG_VAR = BR2_TARGET_$(2) +else ifneq ($$(filter toolchain/% $$(foreach dir,$$(BR2_EXTERNAL_DIRS),$$(dir)/toolchain/%),$(pkgdir)),) +$(2)_KCONFIG_VAR = BR2_$(2) +else +$(2)_KCONFIG_VAR = BR2_PACKAGE_$(2) +endif + +# legal-info: declare dependencies and set values used later for the manifest +ifneq ($$($(2)_LICENSE_FILES),) +$(2)_MANIFEST_LICENSE_FILES = $$($(2)_LICENSE_FILES) +endif + +# We need to extract and patch a package to be able to retrieve its +# license files (if any) and the list of patches applied to it (if +# any). +$(1)-legal-info: $(1)-patch + +# We only save the sources of packages we want to redistribute, that are +# non-overriden (local or true override). +ifeq ($$($(2)_REDISTRIBUTE),YES) +ifeq ($$($(2)_OVERRIDE_SRCDIR),) +# Packages that have a tarball need it downloaded beforehand +$(1)-legal-info: $(1)-source $$(REDIST_SOURCES_DIR_$$(call UPPERCASE,$(4))) +endif +endif + +# legal-info: produce legally relevant info. +$(1)-legal-info: PKG=$(2) +$(1)-legal-info: + @$$(call MESSAGE,"Collecting legal info") +# Packages without a source are assumed to be part of Buildroot, skip them. + $$(foreach hook,$$($(2)_PRE_LEGAL_INFO_HOOKS),$$(call $$(hook))$$(sep)) +ifneq ($$(call qstrip,$$($(2)_SOURCE)),) + +# Save license files if defined +# We save the license files for any kind of package: normal, local, +# overridden, or non-redistributable alike. +# The reason to save license files even for no-redistribute packages +# is that the license still applies to the files distributed as part +# of the rootfs, even if the sources are not themselves redistributed. +ifeq ($$(call qstrip,$$($(2)_LICENSE_FILES)),) + $(Q)$$(call legal-warning-pkg,$$($(2)_BASENAME_RAW),cannot save license ($(2)_LICENSE_FILES not defined)) +else + $(Q)$$(foreach F,$$($(2)_LICENSE_FILES),$$(call legal-license-file,$$($(2)_RAWNAME),$$($(2)_BASENAME_RAW),$$($(2)_HASH_FILE),$$(F),$$($(2)_DIR)/$$(F),$$(call UPPERCASE,$(4)))$$(sep)) +endif # license files + +ifeq ($$($(2)_SITE_METHOD),local) +# Packages without a tarball: don't save and warn + @$$(call legal-warning-nosource,$$($(2)_RAWNAME),local) + +else ifneq ($$($(2)_OVERRIDE_SRCDIR),) + @$$(call legal-warning-nosource,$$($(2)_RAWNAME),override) + +else +# Other packages + +ifeq ($$($(2)_REDISTRIBUTE),YES) +# Save the source tarball and any extra downloads, but not +# patches, as they are handled specially afterwards. + $$(foreach e,$$($(2)_ACTUAL_SOURCE_TARBALL) $$(notdir $$($(2)_EXTRA_DOWNLOADS)),\ + $$(Q)support/scripts/hardlink-or-copy \ + $$($(2)_DL_DIR)/$$(e) \ + $$($(2)_REDIST_SOURCES_DIR)$$(sep)) +# Save patches and generate the series file + $$(Q)while read f; do \ + support/scripts/hardlink-or-copy \ + $$$${f} \ + $$($(2)_REDIST_SOURCES_DIR) || exit 1; \ + printf "%s\n" "$$$${f##*/}" >>$$($(2)_REDIST_SOURCES_DIR)/series || exit 1; \ + done <$$($(2)_DIR)/.applied_patches_list +endif # redistribute + +endif # other packages + @$$(call legal-manifest,$$(call UPPERCASE,$(4)),$$($(2)_RAWNAME),$$($(2)_VERSION),$$(subst $$(space)$$(comma),$$(comma),$$($(2)_LICENSE)),$$($(2)_MANIFEST_LICENSE_FILES),$$($(2)_ACTUAL_SOURCE_TARBALL),$$($(2)_ACTUAL_SOURCE_SITE),$$(call legal-deps,$(1))) +endif # ifneq ($$(call qstrip,$$($(2)_SOURCE)),) + $$(foreach hook,$$($(2)_POST_LEGAL_INFO_HOOKS),$$(call $$(hook))$$(sep)) + +# add package to the general list of targets if requested by the buildroot +# configuration +ifeq ($$($$($(2)_KCONFIG_VAR)),y) + +# Ensure the calling package is the declared provider for all the virtual +# packages it claims to be an implementation of. +ifneq ($$($(2)_PROVIDES),) +$$(foreach pkg,$$($(2)_PROVIDES),\ + $$(eval $$(call virt-provides-single,$$(pkg),$$(call UPPERCASE,$$(pkg)),$(1))$$(sep))) +endif + +# Register package as a reverse-dependencies of all its dependencies +$$(eval $$(foreach p,$$($(2)_FINAL_ALL_DEPENDENCIES),\ + $$(call UPPERCASE,$$(p))_RDEPENDENCIES += $(1)$$(sep))) + +# Ensure unified variable name conventions between all packages Some +# of the variables are used by more than one infrastructure; so, +# rather than duplicating the checks in each infrastructure, we check +# all variables here in pkg-generic, even though pkg-generic should +# have no knowledge of infra-specific variables. +$(eval $(call check-deprecated-variable,$(2)_MAKE_OPT,$(2)_MAKE_OPTS)) +$(eval $(call check-deprecated-variable,$(2)_INSTALL_OPT,$(2)_INSTALL_OPTS)) +$(eval $(call check-deprecated-variable,$(2)_INSTALL_TARGET_OPT,$(2)_INSTALL_TARGET_OPTS)) +$(eval $(call check-deprecated-variable,$(2)_INSTALL_STAGING_OPT,$(2)_INSTALL_STAGING_OPTS)) +$(eval $(call check-deprecated-variable,$(2)_INSTALL_HOST_OPT,$(2)_INSTALL_HOST_OPTS)) +$(eval $(call check-deprecated-variable,$(2)_AUTORECONF_OPT,$(2)_AUTORECONF_OPTS)) +$(eval $(call check-deprecated-variable,$(2)_CONF_OPT,$(2)_CONF_OPTS)) +$(eval $(call check-deprecated-variable,$(2)_BUILD_OPT,$(2)_BUILD_OPTS)) +$(eval $(call check-deprecated-variable,$(2)_GETTEXTIZE_OPT,$(2)_GETTEXTIZE_OPTS)) +$(eval $(call check-deprecated-variable,$(2)_KCONFIG_OPT,$(2)_KCONFIG_OPTS)) + +PACKAGES += $(1) + +ifneq ($$($(2)_PERMISSIONS),) +PACKAGES_PERMISSIONS_TABLE += $$($(2)_PERMISSIONS)$$(sep) +endif +ifneq ($$($(2)_DEVICES),) +PACKAGES_DEVICES_TABLE += $$($(2)_DEVICES)$$(sep) +endif +ifneq ($$($(2)_USERS),) +PACKAGES_USERS += $$($(2)_USERS)$$(sep) +endif +ifneq ($$($(2)_LINUX_CONFIG_FIXUPS),) +PACKAGES_LINUX_CONFIG_FIXUPS += $$($(2)_LINUX_CONFIG_FIXUPS)$$(sep) +endif +TARGET_FINALIZE_HOOKS += $$($(2)_TARGET_FINALIZE_HOOKS) +ROOTFS_PRE_CMD_HOOKS += $$($(2)_ROOTFS_PRE_CMD_HOOKS) +KEEP_PYTHON_PY_FILES += $$($(2)_KEEP_PY_FILES) + +ifneq ($$($(2)_SELINUX_MODULES),) +PACKAGES_SELINUX_MODULES += $$($(2)_SELINUX_MODULES) +endif +PACKAGES_SELINUX_EXTRA_MODULES_DIRS += \ + $$(if $$(wildcard $$($(2)_PKGDIR)/selinux),$$($(2)_PKGDIR)/selinux) + +ifeq ($$($(2)_SITE_METHOD),svn) +DL_TOOLS_DEPENDENCIES += svn +else ifeq ($$($(2)_SITE_METHOD),git) +DL_TOOLS_DEPENDENCIES += git +else ifeq ($$($(2)_SITE_METHOD),bzr) +DL_TOOLS_DEPENDENCIES += bzr +else ifeq ($$($(2)_SITE_METHOD),scp) +DL_TOOLS_DEPENDENCIES += scp ssh +else ifeq ($$($(2)_SITE_METHOD),hg) +DL_TOOLS_DEPENDENCIES += hg +else ifeq ($$($(2)_SITE_METHOD),cvs) +DL_TOOLS_DEPENDENCIES += cvs +endif # SITE_METHOD + +DL_TOOLS_DEPENDENCIES += $$(call extractor-system-dependency,$$($(2)_SOURCE)) + +# Ensure all virtual targets are PHONY. Listed alphabetically. +.PHONY: $(1) \ + $(1)-all-external-deps \ + $(1)-all-legal-info \ + $(1)-all-source \ + $(1)-build \ + $(1)-clean-for-rebuild \ + $(1)-clean-for-reconfigure \ + $(1)-clean-for-reinstall \ + $(1)-configure \ + $(1)-depends \ + $(1)-dirclean \ + $(1)-external-deps \ + $(1)-extract \ + $(1)-graph-depends \ + $(1)-graph-rdepends \ + $(1)-install \ + $(1)-install-host \ + $(1)-install-images \ + $(1)-install-staging \ + $(1)-install-target \ + $(1)-legal-info \ + $(1)-legal-source \ + $(1)-patch \ + $(1)-rebuild \ + $(1)-reconfigure \ + $(1)-reinstall \ + $(1)-rsync \ + $(1)-show-depends \ + $(1)-show-info \ + $(1)-show-version \ + $(1)-source + +ifneq ($$($(2)_SOURCE),) +ifeq ($$($(2)_SITE),) +$$(error $(2)_SITE cannot be empty when $(2)_SOURCE is not) +endif +endif + +ifeq ($$(patsubst %/,ERROR,$$($(2)_SITE)),ERROR) +$$(error $(2)_SITE ($$($(2)_SITE)) cannot have a trailing slash) +endif + +ifneq ($$($(2)_HELP_CMDS),) +HELP_PACKAGES += $(2) +endif + +# Virtual packages are not built but it's useful to allow them to have +# permission/device/user tables and target-finalize/rootfs-pre-cmd hooks. +else ifeq ($$(BR2_PACKAGE_HAS_$(2)),y) # $(2)_KCONFIG_VAR + +ifneq ($$($(2)_PERMISSIONS),) +PACKAGES_PERMISSIONS_TABLE += $$($(2)_PERMISSIONS)$$(sep) +endif +ifneq ($$($(2)_DEVICES),) +PACKAGES_DEVICES_TABLE += $$($(2)_DEVICES)$$(sep) +endif +ifneq ($$($(2)_USERS),) +PACKAGES_USERS += $$($(2)_USERS)$$(sep) +endif +TARGET_FINALIZE_HOOKS += $$($(2)_TARGET_FINALIZE_HOOKS) +ROOTFS_PRE_CMD_HOOKS += $$($(2)_ROOTFS_PRE_CMD_HOOKS) + +endif # $(2)_KCONFIG_VAR +endef # inner-generic-package + +################################################################################ +# generic-package -- the target generator macro for generic packages +################################################################################ + +# In the case of target packages, keep the package name "pkg" +generic-package = $(call inner-generic-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target) +# In the case of host packages, turn the package name "pkg" into "host-pkg" +host-generic-package = $(call inner-generic-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host) + +# :mode=makefile: diff --git a/package/pkg-golang.mk b/package/pkg-golang.mk new file mode 100644 index 00000000..d0724231 --- /dev/null +++ b/package/pkg-golang.mk @@ -0,0 +1,149 @@ +################################################################################ +# Golang package infrastructure +# +# This file implements an infrastructure that eases development of package .mk +# files for Go packages. It should be used for all packages that are written in +# go. +# +# See the Buildroot documentation for details on the usage of this +# infrastructure +# +# +# In terms of implementation, this golang infrastructure requires the .mk file +# to only specify metadata information about the package: name, version, +# download URL, etc. +# +# We still allow the package .mk file to override what the different steps are +# doing, if needed. For example, if _BUILD_CMDS is already defined, it is +# used as the list of commands to perform to build the package, instead of the +# default golang behavior. The package can also define some post operation +# hooks. +# +################################################################################ + +GO_BIN = $(HOST_DIR)/bin/go + +################################################################################ +# inner-golang-package -- defines how the configuration, compilation and +# installation of a Go package should be done, implements a few hooks to tune +# the build process for Go specificities and calls the generic package +# infrastructure to generate the necessary make targets +# +# argument 1 is the lowercase package name +# argument 2 is the uppercase package name, including a HOST_ prefix for host +# packages +# argument 3 is the uppercase package name, without the HOST_ prefix for host +# packages +# argument 4 is the type (target or host) +# +################################################################################ + +define inner-golang-package + +$(2)_BUILD_OPTS += \ + -ldflags "$$($(2)_LDFLAGS)" \ + -tags "$$($(2)_TAGS)" \ + -trimpath \ + -p $(PARALLEL_JOBS) + +# Target packages need the Go compiler on the host. +$(2)_DEPENDENCIES += host-go + +$(2)_BUILD_TARGETS ?= . + +# If the build target is just ".", then we assume the binary to be +# produced is named after the package. If however, a build target has +# been specified, we assume that the binaries to be produced are named +# after each build target building them (below in _BUILD_CMDS). +ifeq ($$($(2)_BUILD_TARGETS),.) +$(2)_BIN_NAME ?= $(1) +endif + +$(2)_INSTALL_BINS ?= $(1) + +# Source files in Go usually use an import path resolved around +# domain/vendor/software. We infer domain/vendor/software from the upstream URL +# of the project. +$(2)_SRC_DOMAIN = $$(call domain,$$($(2)_SITE)) +$(2)_SRC_VENDOR = $$(word 1,$$(subst /, ,$$(call notdomain,$$($(2)_SITE)))) +$(2)_SRC_SOFTWARE = $$(word 2,$$(subst /, ,$$(call notdomain,$$($(2)_SITE)))) + +# $(2)_GOMOD is the root Go module path for the project, inferred if not set. +# If the go.mod file does not exist, one is written with this root path. +$(2)_GOMOD ?= $$($(2)_SRC_DOMAIN)/$$($(2)_SRC_VENDOR)/$$($(2)_SRC_SOFTWARE) + +# Generate a go.mod file if it doesn't exist. Note: Go is configured +# to use the "vendor" dir and not make network calls. +define $(2)_GEN_GOMOD + if [ ! -f $$(@D)/go.mod ]; then \ + printf "module $$($(2)_GOMOD)\n" > $$(@D)/go.mod; \ + fi +endef +$(2)_POST_PATCH_HOOKS += $(2)_GEN_GOMOD + +# Build step. Only define it if not already defined by the package .mk +# file. +ifndef $(2)_BUILD_CMDS +ifeq ($(4),target) + +ifeq ($(BR2_STATIC_LIBS),y) +$(2)_LDFLAGS += -extldflags '-static' +endif + +# Build package for target +define $(2)_BUILD_CMDS + $$(foreach d,$$($(2)_BUILD_TARGETS),\ + cd $$(@D); \ + $$(HOST_GO_TARGET_ENV) \ + $$($(2)_GO_ENV) \ + $$(GO_BIN) build -v $$($(2)_BUILD_OPTS) \ + -o $$(@D)/bin/$$(or $$($(2)_BIN_NAME),$$(notdir $$(d))) \ + $$($(2)_GOMOD)/$$(d) + ) +endef +else +# Build package for host +define $(2)_BUILD_CMDS + $$(foreach d,$$($(2)_BUILD_TARGETS),\ + cd $$(@D); \ + $$(HOST_GO_HOST_ENV) \ + $$($(2)_GO_ENV) \ + $$(GO_BIN) build -v $$($(2)_BUILD_OPTS) \ + -o $$(@D)/bin/$$(or $$($(2)_BIN_NAME),$$(notdir $$(d))) \ + $$($(2)_GOMOD)/$$(d) + ) +endef +endif +endif + +# Target installation step. Only define it if not already defined by the +# package .mk file. +ifndef $(2)_INSTALL_TARGET_CMDS +define $(2)_INSTALL_TARGET_CMDS + $$(foreach d,$$($(2)_INSTALL_BINS),\ + $(INSTALL) -D -m 0755 $$(@D)/bin/$$(d) $$(TARGET_DIR)/usr/bin/$$(d) + ) +endef +endif + +# Host installation step +ifndef $(2)_INSTALL_CMDS +define $(2)_INSTALL_CMDS + $$(foreach d,$$($(2)_INSTALL_BINS),\ + $(INSTALL) -D -m 0755 $$(@D)/bin/$$(d) $$(HOST_DIR)/bin/$$(d) + ) +endef +endif + +# Call the generic package infrastructure to generate the necessary make +# targets +$(call inner-generic-package,$(1),$(2),$(3),$(4)) + +endef # inner-golang-package + +################################################################################ +# golang-package -- the target generator macro for Go packages +################################################################################ + +golang-package = $(call inner-golang-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target) +host-golang-package = $(call inner-golang-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host) diff --git a/package/pkg-kconfig.mk b/package/pkg-kconfig.mk new file mode 100644 index 00000000..dd727b72 --- /dev/null +++ b/package/pkg-kconfig.mk @@ -0,0 +1,307 @@ +################################################################################ +# Kconfig package infrastructure +# +# This file implements an infrastructure that eases development of +# package .mk files for packages that use kconfig for configuration files. +# It is based on the generic-package infrastructure, and inherits all of its +# features. +# +# See the Buildroot documentation for details on the usage of this +# infrastructure. +# +################################################################################ + +# Macro to update back the custom (def)config file +# $(1): file to copy from +define kconfig-package-update-config + @$(if $($(PKG)_KCONFIG_FRAGMENT_FILES), \ + echo "Unable to perform $(@) when fragment files are set"; exit 1) + @$(if $($(PKG)_KCONFIG_DEFCONFIG), \ + echo "Unable to perform $(@) when using a defconfig rule"; exit 1) + $(Q)if [ -d $($(PKG)_KCONFIG_FILE) ]; then \ + echo "Unable to perform $(@) when $($(PKG)_KCONFIG_FILE) is a directory"; \ + exit 1; \ + fi + $(Q)mkdir -p $(dir $($(PKG)_KCONFIG_FILE)) + cp -f $($(PKG)_DIR)/$(1) $($(PKG)_KCONFIG_FILE) + $(Q)touch --reference $($(PKG)_DIR)/$($(PKG)_KCONFIG_STAMP_DOTCONFIG) $($(PKG)_KCONFIG_FILE) +endef + +PKG_KCONFIG_COMMON_OPTS = \ + HOSTCC="$(HOSTCC_NOCCACHE)" + +# Macro to save the defconfig file +# $(1): the name of the package in upper-case letters +define kconfig-package-savedefconfig + $($(1)_MAKE_ENV) $($(1)_MAKE) -C $($(1)_DIR) \ + $(PKG_KCONFIG_COMMON_OPTS) $($(1)_KCONFIG_OPTS) savedefconfig +endef + +# The correct way to regenerate a .config file is to use 'make olddefconfig'. +# For historical reasons, the target name is 'oldnoconfig' between Linux kernel +# versions 2.6.36 and 3.6, and remains as an alias in later versions. +# In older versions, and in some other projects that use kconfig, the target is +# not supported at all, and we use 'yes "" | make oldconfig' as a fallback +# only, as this can fail in complex cases. +# $(1): the name of the package in upper-case letters +define kconfig-package-regen-dot-config + $(if $(filter olddefconfig,$($(1)_KCONFIG_RULES)), + $(Q)$($(1)_KCONFIG_MAKE) olddefconfig, + $(if $(filter oldnoconfig,$($(1)_KCONFIG_RULES)), + $(Q)$($(1)_KCONFIG_MAKE) oldnoconfig, + $(Q)(yes "" | $($(1)_KCONFIG_MAKE) oldconfig))) +endef + +# Macro to create a .config file where all given fragments are merged into. +# $(1): the name of the package in upper-case letters +# $(2): name of the .config file +# $(3): fragment files to merge +define kconfig-package-merge-config + $(Q)$(if $($(1)_KCONFIG_DEFCONFIG),\ + $($(1)_KCONFIG_MAKE) $($(1)_KCONFIG_DEFCONFIG),\ + $(INSTALL) -m 0644 -D $($(1)_KCONFIG_FILE) $(2)) + $(Q)support/kconfig/merge_config.sh -m -O $(dir $(2)) $(2) $(3) + $(call kconfig-package-regen-dot-config,$(1)) +endef + +################################################################################ +# inner-kconfig-package -- generates the make targets needed to support a +# kconfig package +# +# argument 1 is the lowercase package name +# argument 2 is the uppercase package name, including a HOST_ prefix +# for host packages +# argument 3 is the uppercase package name, without the HOST_ prefix +# for host packages +# argument 4 is the type (target or host) +################################################################################ + +define inner-kconfig-package + +# Register the kconfig dependencies as regular dependencies, so that +# they are also accounted for in the generated graphs. +$(2)_DEPENDENCIES += $$($(2)_KCONFIG_DEPENDENCIES) + +# Call the generic package infrastructure to generate the necessary +# make targets. +# Note: this must be done _before_ attempting to use $$($(2)_DIR) in a +# dependency expression +$(call inner-generic-package,$(1),$(2),$(3),$(4)) + +# Default values +$(2)_MAKE ?= $$(MAKE) +$(2)_KCONFIG_EDITORS ?= menuconfig +$(2)_KCONFIG_OPTS ?= +$(2)_KCONFIG_FIXUP_CMDS ?= +$(2)_KCONFIG_FRAGMENT_FILES ?= +$(2)_KCONFIG_DOTCONFIG ?= .config + +# Do not use $(2)_KCONFIG_DOTCONFIG as stamp file, because the package +# buildsystem (e.g. linux >= 4.19) may touch it, thus rendering our +# timestamps out of date, thus re-trigerring the build of the package. +# Instead, use a specific file of our own as timestamp. +$(2)_KCONFIG_STAMP_DOTCONFIG = .stamp_dotconfig + +# The config file as well as the fragments could be in-tree, so before +# depending on them the package should be extracted (and patched) first. +# +# Since those files only have a order-only dependency, make would treat +# any missing one as a "force" target: +# https://www.gnu.org/software/make/manual/make.html#Force-Targets +# and would forcibly any rule that depend on those files, causing a +# rebuild of the kernel each time make is called. +# +# So, we provide a recipe that checks all of those files exist, to +# overcome that standard make behaviour. +# +$$($(2)_KCONFIG_FILE) $$($(2)_KCONFIG_FRAGMENT_FILES): | $(1)-patch + for f in $$($(2)_KCONFIG_FILE) $$($(2)_KCONFIG_FRAGMENT_FILES); do \ + if [ ! -f "$$$${f}" ]; then \ + printf "Kconfig file or fragment '%s' for '%s' does not exist\n" "$$$${f}" "$(1)"; \ + exit 1; \ + fi; \ + done + +$(2)_KCONFIG_MAKE = \ + $$($(2)_MAKE_ENV) $$($(2)_MAKE) -C $$($(2)_DIR) \ + $$(PKG_KCONFIG_COMMON_OPTS) $$($(2)_KCONFIG_OPTS) + +# $(2)_KCONFIG_MAKE may already rely on shell expansion. As the $() syntax +# of the shell conflicts with Make's own syntax, this means that backticks +# are used with those shell constructs. Unfortunately, the backtick syntax +# does not nest, and we need to use Make instead of the shell to handle +# conditions. + +# A recursively expanded variable is necessary, to be sure that the shell +# command is called when the rule is processed during the build and not +# when the rule is created when parsing all packages. +$(2)_KCONFIG_RULES = \ + $$(shell $$($(2)_KCONFIG_MAKE) -pn config 2>/dev/null | \ + sed 's/^\([_0-9a-zA-Z]*config\):.*/\1/ p; d') + +# The specified source configuration file and any additional configuration file +# fragments are merged together to .config, after the package has been patched. +# Since the file could be a defconfig file it needs to be expanded to a +# full .config first. +$$($(2)_DIR)/$$($(2)_KCONFIG_STAMP_DOTCONFIG): $$($(2)_KCONFIG_FILE) $$($(2)_KCONFIG_FRAGMENT_FILES) + $$(call prepare-per-package-directory,$$($(2)_KCONFIG_DEPENDENCIES)) + $$(call kconfig-package-merge-config,$(2),$$(@D)/$$($(2)_KCONFIG_DOTCONFIG),\ + $$($(2)_KCONFIG_FRAGMENT_FILES)) + $$(Q)touch $$(@D)/$$($(2)_KCONFIG_STAMP_DOTCONFIG) + +# If _KCONFIG_FILE or _KCONFIG_FRAGMENT_FILES exists, this dependency is +# already implied, but if we only have a _KCONFIG_DEFCONFIG we have to add +# it explicitly. It doesn't hurt to always have it though. +$$($(2)_DIR)/$$($(2)_KCONFIG_STAMP_DOTCONFIG): | $(1)-patch + +# Some packages may need additional tools to be present by the time their +# kconfig structure is parsed (e.g. the linux kernel may need to call to +# the compiler to test its features). +$$($(2)_DIR)/$$($(2)_KCONFIG_STAMP_DOTCONFIG): | $$($(2)_KCONFIG_DEPENDENCIES) + +# In order to get a usable, consistent configuration, some fixup may be needed. +# The exact rules are specified by the package .mk file. +define $(2)_FIXUP_DOT_CONFIG + $$($(2)_KCONFIG_FIXUP_CMDS) + $$(call kconfig-package-regen-dot-config,$(2)) + $$(Q)touch $$($(2)_DIR)/.stamp_kconfig_fixup_done +endef + +$$($(2)_DIR)/.stamp_kconfig_fixup_done: PKG=$(2) +$$($(2)_DIR)/.stamp_kconfig_fixup_done: $$($(2)_DIR)/$$($(2)_KCONFIG_STAMP_DOTCONFIG) + $$($(2)_FIXUP_DOT_CONFIG) + +# Before running configure, the configuration file should be present and fixed +$$($(2)_TARGET_CONFIGURE): $$($(2)_DIR)/.stamp_kconfig_fixup_done + +# Force olddefconfig again on -reconfigure +$(1)-clean-for-reconfigure: $(1)-clean-kconfig-for-reconfigure + +$(1)-clean-kconfig-for-reconfigure: + rm -f $$($(2)_DIR)/$$($(2)_KCONFIG_STAMP_DOTCONFIG) + +# Only enable the foo-*config targets when the package is actually enabled. +# Note: the variable $(2)_KCONFIG_VAR is not related to the kconfig +# infrastructure, but defined by pkg-generic.mk. The generic infrastructure is +# already called above, so we can effectively use this variable. +ifeq ($$($$($(2)_KCONFIG_VAR)),y) + +ifeq ($$(BR_BUILDING),y) +# Either FOO_KCONFIG_FILE or FOO_KCONFIG_DEFCONFIG is required... +ifeq ($$(or $$($(2)_KCONFIG_FILE),$$($(2)_KCONFIG_DEFCONFIG)),) +$$(error Internal error: no value specified for $(2)_KCONFIG_FILE or $(2)_KCONFIG_DEFCONFIG) +endif +# ... but not both: +ifneq ($$(and $$($(2)_KCONFIG_FILE),$$($(2)_KCONFIG_DEFCONFIG)),) +$$(error Internal error: $(2)_KCONFIG_FILE and $(2)_KCONFIG_DEFCONFIG are mutually exclusive but both are defined) +endif +endif + +# For the configurators, we do want to use the system-provided host +# tools, not the ones we build. This is particularly true for +# pkg-config; if we use our pkg-config (from host-pkgconf), then it +# would not look for the .pc from the host, but we do need them, +# especially to find ncurses, GTK+, Qt (resp. for menuconfig and +# nconfig, gconfig, xconfig). +# So we simply remove our PATH and PKG_CONFIG_* variables. +$(2)_CONFIGURATOR_MAKE_ENV = \ + $$(filter-out PATH=% PKG_CONFIG=% PKG_CONFIG_SYSROOT_DIR=% \ + PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=% PKG_CONFIG_ALLOW_SYSTEM_LIBS=% \ + PKG_CONFIG_LIBDIR=%,$$($(2)_MAKE_ENV)) \ + PKG_CONFIG_PATH="$(HOST_PKG_CONFIG_PATH)" + +# Configuration editors (menuconfig, ...) +# +# We need to apply the configuration fixups right after a configuration +# editor exits, so that it is possible to save the configuration right +# after exiting an editor, and so the user always sees a .config file +# that is clean wrt. our requirements. +# +# Because commands in $(1)_FIXUP_KCONFIG are probably using $(@D), we +# need to have a valid @D set. But, because the configurators rules are +# not real files and do not contain the path to the package build dir, +# @D would be just '.' in this case. So, we use an intermediate rule +# with a stamp-like file which path is in the package build dir, so we +# end up having a valid @D. +# +$$(addprefix $(1)-,$$($(2)_KCONFIG_EDITORS)): $(1)-%: $$($(2)_DIR)/.kconfig_editor_% +$$($(2)_DIR)/.kconfig_editor_%: PKG=$(2) +$$($(2)_DIR)/.kconfig_editor_%: $$($(2)_DIR)/.stamp_kconfig_fixup_done + $$($(2)_CONFIGURATOR_MAKE_ENV) $$($(2)_MAKE) -C $$($(2)_DIR) \ + $$(PKG_KCONFIG_COMMON_OPTS) $$($(2)_KCONFIG_OPTS) $$(*) + rm -f $$($(2)_DIR)/.stamp_{kconfig_fixup_done,configured,built} + rm -f $$($(2)_DIR)/.stamp_{target,staging,images}_installed + $$($(2)_FIXUP_DOT_CONFIG) + +# Saving back the configuration +# +# Ideally, that should directly depend on $$($(2)_DIR)/.stamp_kconfig_fixup_done, +# but that breaks the use-case in PR-8156 (from a clean tree): +# make menuconfig <- enable kernel, use an in-tree defconfig, save and exit +# make linux-menuconfig <- enable/disable whatever option, save and exit +# make menuconfig <- change to use a custom defconfig file, set a path, save and exit +# make linux-update-config <- should save to the new custom defconfig file +# +# Because of that use-case, saving the configuration can *not* directly +# depend on the stamp file, because it itself depends on the .config, +# which in turn depends on the (newly-set an non-existent) custom +# defconfig file. +# +# Instead, we use a PHONY rule that will catch that situation. +# +$(1)-check-configuration-done: + @if [ ! -f $$($(2)_DIR)/.stamp_kconfig_fixup_done ]; then \ + echo "$(1) is not yet configured"; \ + exit 1; \ + fi + +$(1)-savedefconfig: $(1)-check-configuration-done + $$(call kconfig-package-savedefconfig,$(2)) + +# Target to copy back the configuration to the source configuration file +# Even though we could use 'cp --preserve-timestamps' here, the separate +# cp and 'touch --reference' is used for symmetry with $(1)-update-defconfig. +$(1)-update-config: PKG=$(2) +$(1)-update-config: $(1)-check-configuration-done + $$(call kconfig-package-update-config,$$($(2)_KCONFIG_DOTCONFIG)) + +# Note: make sure the timestamp of the stored configuration is not newer than +# the .config to avoid a useless rebuild. Note that, contrary to +# $(1)-update-config, the reference for 'touch' is _not_ the file from which +# we copy. +$(1)-update-defconfig: PKG=$(2) +$(1)-update-defconfig: $(1)-savedefconfig + $$(call kconfig-package-update-config,defconfig) + +# Target to output differences between the configuration obtained via the +# defconfig + fragments (if any) and the current configuration. +# Note: it preserves the timestamp of the current configuration when moving it +# around. +$(1)-diff-config: $(1)-check-configuration-done + $$(Q)cp -a $$($(2)_DIR)/$$($(2)_KCONFIG_DOTCONFIG) $$($(2)_DIR)/.config.dc.bak + $$(call kconfig-package-merge-config,$(2),$$($(2)_DIR)/$$($(2)_KCONFIG_DOTCONFIG),\ + $$($(2)_KCONFIG_FRAGMENT_FILES)) + $$(Q)utils/diffconfig $$($(2)_DIR)/$$($(2)_KCONFIG_DOTCONFIG) \ + $$($(2)_DIR)/.config.dc.bak + $$(Q)cp -a $$($(2)_DIR)/.config.dc.bak $$($(2)_DIR)/$$($(2)_KCONFIG_DOTCONFIG) + $$(Q)rm -f $$($(2)_DIR)/.config.dc.bak + + +endif # package enabled + +.PHONY: \ + $(1)-update-config \ + $(1)-update-defconfig \ + $(1)-diff-config \ + $(1)-savedefconfig \ + $(1)-check-configuration-done \ + $$($(2)_DIR)/.kconfig_editor_% \ + $$(addprefix $(1)-,$$($(2)_KCONFIG_EDITORS)) + +endef # inner-kconfig-package + +################################################################################ +# kconfig-package -- the target generator macro for kconfig packages +################################################################################ + +kconfig-package = $(call inner-kconfig-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target) diff --git a/package/pkg-kernel-module.mk b/package/pkg-kernel-module.mk new file mode 100644 index 00000000..fcd6b8bc --- /dev/null +++ b/package/pkg-kernel-module.mk @@ -0,0 +1,101 @@ +################################################################################ +# kernel module infrastructure for building Linux kernel modules +# +# This file implements an infrastructure that eases development of package +# .mk files for out-of-tree Linux kernel modules. It should be used for all +# packages that build a Linux kernel module using the kernel's out-of-tree +# buildsystem, unless they use a complex custom buildsystem. +# +# The kernel-module infrastructure requires the packages that use it to also +# use another package infrastructure. kernel-module only defines post-build +# and post-install hooks. This allows the package to build both kernel +# modules and/or user-space components (with any of the other *-package +# infra). +# +# As such, it is to be used in conjunction with another *-package infra, +# like so: +# +# $(eval $(kernel-module)) +# $(eval $(generic-package)) +# +# Note: if the caller needs access to the kernel modules (either after they +# are built or after they are installed), it will have to define its own +# post-build/install hooks *after* calling kernel-module, but *before* +# calling the other *-package infra, like so: +# +# $(eval $(kernel-module)) +# define FOO_MOD_TWEAK +# # do something +# endef +# FOO_POST_BUILD_HOOKS += FOO_MOD_TWEAK +# $(eval $(generic-package)) +# +# Note: this infra does not check that the kernel is enabled; it is expected +# to be enforced at the Kconfig level with proper 'depends on'. +################################################################################ + +################################################################################ +# inner-kernel-module -- generates the make targets needed to support building +# a kernel module +# +# argument 1 is the lowercase package name +# argument 2 is the uppercase package name +################################################################################ + +define inner-kernel-module + +# If the package is enabled, ensure the kernel will support modules +ifeq ($$(BR2_PACKAGE_$(2)),y) +LINUX_NEEDS_MODULES = y +endif + +# The kernel must be built first. +$(2)_DEPENDENCIES += linux + +# This is only defined in some infrastructures (e.g. autotools, cmake), +# but not in others (e.g. generic). So define it here as well. +$(2)_MAKE ?= $$(MAKE) + +# If not specified, consider the source of the kernel module to be at +# the root of the package. +$(2)_MODULE_SUBDIRS ?= . + +# Build the kernel module(s) +# Force PWD for those packages that want to use it to find their +# includes and other support files (Booo!) +define $(2)_KERNEL_MODULES_BUILD + @$$(call MESSAGE,"Building kernel module(s)") + $$(foreach d,$$($(2)_MODULE_SUBDIRS), \ + $$(LINUX_MAKE_ENV) $$($$(PKG)_MAKE) \ + -C $$(LINUX_DIR) \ + $$(LINUX_MAKE_FLAGS) \ + $$($(2)_MODULE_MAKE_OPTS) \ + PWD=$$(@D)/$$(d) \ + M=$$(@D)/$$(d) \ + modules$$(sep)) +endef +$(2)_POST_BUILD_HOOKS += $(2)_KERNEL_MODULES_BUILD + +# Install the kernel module(s) +# Force PWD for those packages that want to use it to find their +# includes and other support files (Booo!) +define $(2)_KERNEL_MODULES_INSTALL + @$$(call MESSAGE,"Installing kernel module(s)") + $$(foreach d,$$($(2)_MODULE_SUBDIRS), \ + $$(LINUX_MAKE_ENV) $$($$(PKG)_MAKE) \ + -C $$(LINUX_DIR) \ + $$(LINUX_MAKE_FLAGS) \ + $$($(2)_MODULE_MAKE_OPTS) \ + PWD=$$(@D)/$$(d) \ + M=$$(@D)/$$(d) \ + modules_install$$(sep)) +endef +$(2)_POST_INSTALL_TARGET_HOOKS += $(2)_KERNEL_MODULES_INSTALL + +endef + +################################################################################ +# kernel-module -- the target generator macro for kernel module packages +################################################################################ + +kernel-module = $(call inner-kernel-module,$(pkgname),$(call UPPERCASE,$(pkgname))) diff --git a/package/pkg-luarocks.mk b/package/pkg-luarocks.mk new file mode 100644 index 00000000..fd798558 --- /dev/null +++ b/package/pkg-luarocks.mk @@ -0,0 +1,155 @@ +################################################################################ +# LuaRocks package infrastructure +# see http://luarocks.org/ +# +# This file implements an infrastructure that eases development of +# package .mk files for LuaRocks packages. +# LuaRocks supports various build.type : builtin, make, cmake. +# This luarocks infrastructure supports only the builtin mode, +# the make & cmake modes could be directly handled by generic & cmake infrastructure. +# +# See the Buildroot documentation for details on the usage of this +# infrastructure +# +# In terms of implementation, this LuaRocks infrastructure requires +# the .mk file to only specify metadata information about the +# package: name, version, etc. +# +################################################################################ + +LUAROCKS_RUN_CMD = $(HOST_DIR)/bin/luarocks +LUAROCKS_CFLAGS = $(TARGET_CFLAGS) -fPIC +HOST_LUAROCKS_CFLAGS = $(HOST_CFLAGS) -fPIC +ifeq ($(BR2_PACKAGE_LUA_5_3),y) +LUAROCKS_CFLAGS += -DLUA_COMPAT_5_2 +HOST_LUAROCKS_CFLAGS += -DLUA_COMPAT_5_2 +else ifeq ($(BR2_PACKAGE_LUA_5_4),y) +LUAROCKS_CFLAGS += -DLUA_COMPAT_5_3 +HOST_LUAROCKS_CFLAGS += -DLUA_COMPAT_5_3 +endif + +################################################################################ +# inner-luarocks-package -- defines how the configuration, compilation and +# installation of a LuaRocks package should be done, implements a few hooks to +# tune the build process and calls the generic package infrastructure to +# generate the necessary make targets +# +# argument 1 is the lowercase package name +# argument 2 is the uppercase package name, including a HOST_ prefix +# for host packages +# argument 3 is the uppercase package name, without the HOST_ prefix +# for host packages +# argument 4 is the type (target or host) +################################################################################ + +define inner-luarocks-package + +ifndef $(2)_NAME_UPSTREAM + ifdef $(3)_NAME_UPSTREAM + $(2)_NAME_UPSTREAM = $($(3)_NAME_UPSTREAM) + else + $(2)_NAME_UPSTREAM ?= $(1) + endif +endif + +ifndef $(2)_SUBDIR + ifdef $(3)_SUBDIR + $(2)_SUBDIR = $($(3)_SUBDIR) + else + $(2)_SUBDIR ?= $$($(3)_NAME_UPSTREAM)-$$(shell echo "$$($(3)_VERSION)" | sed -e "s/-[0-9]$$$$//") + endif +endif + +ifndef $(2)_ROCKSPEC + ifdef $(3)_ROCKSPEC + $(2)_ROCKSPEC = $($(3)_ROCKSPEC) + else + $(2)_ROCKSPEC ?= $$(call LOWERCASE,$$($(3)_NAME_UPSTREAM))-$$($(3)_VERSION).rockspec + endif +endif + +ifndef $(2)_SOURCE + ifdef $(3)_SOURCE + $(2)_SOURCE = $($(3)_SOURCE) + else + $(2)_SOURCE ?= $$(call LOWERCASE,$$($(3)_NAME_UPSTREAM))-$$($(3)_VERSION).src.rock + endif +endif + +ifndef $(2)_SITE + ifdef $(3)_SITE + $(2)_SITE = $($(3)_SITE) + else + $(2)_SITE ?= $$(call qstrip,$$(BR2_LUAROCKS_MIRROR)) + endif +endif + +ifeq ($(4),target) +$(2)_DEPENDENCIES += luainterpreter +endif +# host-luarocks implies host-luainterpreter +$(2)_EXTRACT_DEPENDENCIES += host-luarocks + +# +# Extract step. Extract into a temporary dir and move the relevant part to the +# source dir. +# +ifndef $(2)_EXTRACT_CMDS +define $(2)_EXTRACT_CMDS + mkdir -p $$($(2)_DIR)/luarocks-extract + cd $$($(2)_DIR)/luarocks-extract && \ + $$(LUAROCKS_RUN_CMD) unpack --force $$($(2)_DL_DIR)/$$($(2)_SOURCE) + mv $$($(2)_DIR)/luarocks-extract/*/* $$($(2)_DIR) +endef +endif + +# +# Build/install step. +# +ifndef $(2)_INSTALL_TARGET_CMDS +define $(2)_INSTALL_TARGET_CMDS + cd $$($(2)_SRCDIR) && \ + LUAROCKS_CONFIG=$$(LUAROCKS_CONFIG_FILE) \ + $$(LUAROCKS_RUN_CMD) make --keep --deps-mode none \ + --tree "$$(TARGET_DIR)/usr" \ + DEPS_DIR="$$(STAGING_DIR)/usr" \ + LUA_INCDIR="$$(STAGING_DIR)/usr/include" \ + LUA_LIBDIR="$$(STAGING_DIR)/usr/lib" \ + CC=$$(TARGET_CC) \ + LD=$$(TARGET_CC) \ + CFLAGS="$$(LUAROCKS_CFLAGS)" \ + LIBFLAG="-shared $$(TARGET_LDFLAGS)" \ + $$($(2)_BUILD_OPTS) $$($(2)_ROCKSPEC) +endef +endif + +ifndef $(2)_INSTALL_CMDS +define $(2)_INSTALL_CMDS + cd $$($(2)_SRCDIR) && \ + LUAROCKS_CONFIG=$$(HOST_LUAROCKS_CONFIG_FILE) \ + $$(LUAROCKS_RUN_CMD) make --keep --deps-mode none \ + DEPS_DIR="$$(HOST_DIR)" \ + CFLAGS="$$(HOST_LUAROCKS_CFLAGS)" \ + LIBFLAG="-shared $$(HOST_LDFLAGS)" \ + $$($(2)_BUILD_OPTS) $$($(2)_ROCKSPEC) +endef +endif + +# Call the generic package infrastructure to generate the necessary +# make targets +$(call inner-generic-package,$(1),$(2),$(3),$(4)) + +# Upgrade helper +$(1)-upgrade: host-luarocks + $$(LUAROCKS_RUN_CMD) buildroot $$($(2)_NAME_UPSTREAM) $(1) + +.PHONY: $(1)-upgrade + +endef + +################################################################################ +# luarocks-package -- the target generator macro for LuaRocks packages +################################################################################ + +luarocks-package = $(call inner-luarocks-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target) +host-luarocks-package = $(call inner-luarocks-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host) diff --git a/package/pkg-meson.mk b/package/pkg-meson.mk new file mode 100644 index 00000000..a57820d4 --- /dev/null +++ b/package/pkg-meson.mk @@ -0,0 +1,214 @@ +################################################################################ +# Meson package infrastructure +# +# This file implements an infrastructure that eases development of +# package .mk files for Meson packages. It should be used for all +# packages that use Meson as their build system. +# +# See the Buildroot documentation for details on the usage of this +# infrastructure +# +# In terms of implementation, this Meson infrastructure requires +# the .mk file to only specify metadata information about the +# package: name, version, download URL, etc. +# +# We still allow the package .mk file to override what the different +# steps are doing, if needed. For example, if _BUILD_CMDS is +# already defined, it is used as the list of commands to perform to +# build the package, instead of the default Meson behaviour. The +# package can also define some post operation hooks. +# +################################################################################ + +# +# Pass PYTHONNOUSERSITE environment variable when invoking Meson or Ninja, so +# $(HOST_DIR)/bin/python3 will not look for Meson modules in +# $HOME/.local/lib/python3.x/site-packages +# +MESON = PYTHONNOUSERSITE=y $(HOST_DIR)/bin/meson +NINJA = PYTHONNOUSERSITE=y $(HOST_DIR)/bin/ninja +NINJA_OPTS = $(if $(VERBOSE),-v) -j$(PARALLEL_JOBS) + +################################################################################ +# inner-meson-package -- defines how the configuration, compilation and +# installation of a Meson package should be done, implements a few hooks to +# tune the build process and calls the generic package infrastructure to +# generate the necessary make targets +# +# argument 1 is the lowercase package name +# argument 2 is the uppercase package name, including a HOST_ prefix +# for host packages +# argument 3 is the uppercase package name, without the HOST_ prefix +# for host packages +# argument 4 is the type (target or host) +################################################################################ + +define inner-meson-package + +$(2)_CONF_ENV ?= +$(2)_CONF_OPTS ?= +$(2)_NINJA_ENV ?= + +# +# Configure step. Only define it if not already defined by the package +# .mk file. And take care of the differences between host and target +# packages. +# +ifndef $(2)_CONFIGURE_CMDS +ifeq ($(4),target) + +$(2)_CFLAGS ?= $$(TARGET_CFLAGS) +$(2)_LDFLAGS ?= $$(TARGET_LDFLAGS) +$(2)_CXXFLAGS ?= $$(TARGET_CXXFLAGS) + +# Configure package for target +# +# +define $(2)_CONFIGURE_CMDS + rm -rf $$($$(PKG)_SRCDIR)/build + mkdir -p $$($$(PKG)_SRCDIR)/build + sed -e 's%@TARGET_CROSS@%$$(TARGET_CROSS)%g' \ + -e 's%@TARGET_ARCH@%$$(HOST_MESON_TARGET_CPU_FAMILY)%g' \ + -e 's%@TARGET_CPU@%$$(HOST_MESON_TARGET_CPU)%g' \ + -e 's%@TARGET_ENDIAN@%$$(HOST_MESON_TARGET_ENDIAN)%g' \ + -e "s%@TARGET_CFLAGS@%$$(call make-sq-comma-list,$$($(2)_CFLAGS))%g" \ + -e "s%@TARGET_LDFLAGS@%$$(call make-sq-comma-list,$$($(2)_LDFLAGS))%g" \ + -e "s%@TARGET_CXXFLAGS@%$$(call make-sq-comma-list,$$($(2)_CXXFLAGS))%g" \ + -e 's%@HOST_DIR@%$$(HOST_DIR)%g' \ + -e 's%@STAGING_DIR@%$$(STAGING_DIR)%g' \ + -e 's%@STATIC@%$$(if $$(BR2_STATIC_LIBS),true,false)%g' \ + -e "/^\[binaries\]$$$$/s:$$$$:$$(foreach x,$$($(2)_MESON_EXTRA_BINARIES),\n$$(x)):" \ + -e "/^\[properties\]$$$$/s:$$$$:$$(foreach x,$$($(2)_MESON_EXTRA_PROPERTIES),\n$$(x)):" \ + package/meson/cross-compilation.conf.in \ + > $$($$(PKG)_SRCDIR)/build/cross-compilation.conf + PATH=$$(BR_PATH) \ + CC_FOR_BUILD="$$(HOSTCC)" \ + CXX_FOR_BUILD="$$(HOSTCXX)" \ + $$($$(PKG)_CONF_ENV) \ + $$(MESON) \ + --prefix=/usr \ + --libdir=lib \ + --default-library=$(if $(BR2_STATIC_LIBS),static,shared) \ + --buildtype=$(if $(BR2_ENABLE_DEBUG),debug,release) \ + --cross-file=$$($$(PKG)_SRCDIR)/build/cross-compilation.conf \ + -Dstrip=false \ + -Dbuild.pkg_config_path=$$(HOST_DIR)/lib/pkgconfig \ + $$($$(PKG)_CONF_OPTS) \ + $$($$(PKG)_SRCDIR) $$($$(PKG)_SRCDIR)/build +endef +else + +# Configure package for host +define $(2)_CONFIGURE_CMDS + rm -rf $$($$(PKG)_SRCDIR)/build + mkdir -p $$($$(PKG)_SRCDIR)/build + $$(HOST_CONFIGURE_OPTS) \ + $$($$(PKG)_CONF_ENV) $$(MESON) \ + --prefix=$$(HOST_DIR) \ + --libdir=lib \ + --sysconfdir=$$(HOST_DIR)/etc \ + --localstatedir=$$(HOST_DIR)/var \ + --default-library=shared \ + --buildtype=release \ + -Dstrip=true \ + $$($$(PKG)_CONF_OPTS) \ + $$($$(PKG)_SRCDIR) $$($$(PKG)_SRCDIR)/build +endef +endif +endif + +$(2)_DEPENDENCIES += host-meson + +# +# Build step. Only define it if not already defined by the package .mk +# file. +# +ifndef $(2)_BUILD_CMDS +ifeq ($(4),target) +define $(2)_BUILD_CMDS + $$(TARGET_MAKE_ENV) $$($$(PKG)_NINJA_ENV) \ + $$(NINJA) $$(NINJA_OPTS) $$($$(PKG)_NINJA_OPTS) -C $$($$(PKG)_SRCDIR)/build +endef +else +define $(2)_BUILD_CMDS + $$(HOST_MAKE_ENV) $$($$(PKG)_NINJA_ENV) \ + $$(NINJA) $$(NINJA_OPTS) $$($$(PKG)_NINJA_OPTS) -C $$($$(PKG)_SRCDIR)/build +endef +endif +endif + +# +# Host installation step. Only define it if not already defined by the +# package .mk file. +# +ifndef $(2)_INSTALL_CMDS +define $(2)_INSTALL_CMDS + $$(HOST_MAKE_ENV) $$($$(PKG)_NINJA_ENV) \ + $$(NINJA) $$(NINJA_OPTS) -C $$($$(PKG)_SRCDIR)/build install +endef +endif + +# +# Staging installation step. Only define it if not already defined by +# the package .mk file. +# +ifndef $(2)_INSTALL_STAGING_CMDS +define $(2)_INSTALL_STAGING_CMDS + $$(TARGET_MAKE_ENV) $$($$(PKG)_NINJA_ENV) DESTDIR=$$(STAGING_DIR) \ + $$(NINJA) $$(NINJA_OPTS) -C $$($$(PKG)_SRCDIR)/build install +endef +endif + +# +# Target installation step. Only define it if not already defined by +# the package .mk file. +# +ifndef $(2)_INSTALL_TARGET_CMDS +define $(2)_INSTALL_TARGET_CMDS + $$(TARGET_MAKE_ENV) $$($$(PKG)_NINJA_ENV) DESTDIR=$$(TARGET_DIR) \ + $$(NINJA) $$(NINJA_OPTS) -C $$($$(PKG)_SRCDIR)/build install +endef +endif + +# Call the generic package infrastructure to generate the necessary +# make targets +$(call inner-generic-package,$(1),$(2),$(3),$(4)) + +endef + +################################################################################ +# meson-package -- the target generator macro for Meson packages +################################################################################ + +meson-package = $(call inner-meson-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target) +host-meson-package = $(call inner-meson-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host) + +################################################################################ +# Generation of the Meson cross-compilation.conf file +################################################################################ + +# Generate a Meson cross-compilation.conf suitable for use with the +# SDK; also install the file as a template for users to add their +# own flags if they need to. +define PKG_MESON_INSTALL_CROSS_CONF + mkdir -p $(HOST_DIR)/etc/meson + sed -e 's%@TARGET_CROSS@%$(TARGET_CROSS)%g' \ + -e 's%@TARGET_ARCH@%$(HOST_MESON_TARGET_CPU_FAMILY)%g' \ + -e 's%@TARGET_CPU@%$(HOST_MESON_TARGET_CPU)%g' \ + -e 's%@TARGET_ENDIAN@%$(HOST_MESON_TARGET_ENDIAN)%g' \ + -e "s%@TARGET_CFLAGS@%$(call make-sq-comma-list,$(TARGET_CFLAGS))@PKG_TARGET_CFLAGS@%g" \ + -e "s%@TARGET_LDFLAGS@%$(call make-sq-comma-list,$(TARGET_LDFLAGS))@PKG_TARGET_CFLAGS@%g" \ + -e "s%@TARGET_CXXFLAGS@%$(call make-sq-comma-list,$(TARGET_CXXFLAGS))@PKG_TARGET_CFLAGS@%g" \ + -e 's%@HOST_DIR@%$(HOST_DIR)%g' \ + -e 's%@STAGING_DIR@%$(STAGING_DIR)%g' \ + -e 's%@STATIC@%$(if $(BR2_STATIC_LIBS),true,false)%g' \ + $(HOST_MESON_PKGDIR)/cross-compilation.conf.in \ + > $(HOST_DIR)/etc/meson/cross-compilation.conf.in + sed -e 's%@PKG_TARGET_CFLAGS@%%g' \ + -e 's%@PKG_TARGET_LDFLAGS@%%g' \ + -e 's%@PKG_TARGET_CXXFLAGS@%%g' \ + $(HOST_DIR)/etc/meson/cross-compilation.conf.in \ + > $(HOST_DIR)/etc/meson/cross-compilation.conf +endef + +TOOLCHAIN_TARGET_FINALIZE_HOOKS += PKG_MESON_INSTALL_CROSS_CONF diff --git a/package/pkg-perl.mk b/package/pkg-perl.mk new file mode 100644 index 00000000..1ecf31ef --- /dev/null +++ b/package/pkg-perl.mk @@ -0,0 +1,215 @@ +################################################################################ +# Perl package infrastructure +# +# This file implements an infrastructure that eases development of +# package .mk files for Perl packages. +# +# See the Buildroot documentation for details on the usage of this +# infrastructure +# +# In terms of implementation, this perl infrastructure requires +# the .mk file to only specify metadata information about the +# package: name, version, download URL, etc. +# +# We still allow the package .mk file to override what the different +# steps are doing, if needed. For example, if _BUILD_CMDS is +# already defined, it is used as the list of commands to perform to +# build the package, instead of the default perl behaviour. The +# package can also define some post operation hooks. +# +################################################################################ + +PERL_ARCHNAME = $(ARCH)-linux +PERL_RUN = PERL5LIB= PERL_USE_UNSAFE_INC=1 $(HOST_DIR)/bin/perl + +################################################################################ +# inner-perl-package -- defines how the configuration, compilation and +# installation of a perl package should be done, implements a +# few hooks to tune the build process for perl specifities and +# calls the generic package infrastructure to generate the necessary +# make targets +# +# argument 1 is the lowercase package name +# argument 2 is the uppercase package name, including a HOST_ prefix +# for host packages +# argument 3 is the uppercase package name, without the HOST_ prefix +# for host packages +# argument 4 is the type (target or host) +################################################################################ + +define inner-perl-package + +# Target packages need both the perl interpreter on the target (for +# runtime) and the perl interpreter on the host (for +# compilation). However, host packages only need the perl +# interpreter on the host. +ifeq ($(4),target) +$(2)_DEPENDENCIES += host-perl perl +else +$(2)_DEPENDENCIES += host-perl +endif + +# From http://perldoc.perl.org/CPAN.html#Config-Variables - prefer_installer +# legal values are MB and EUMM: if a module comes +# with both a Makefile.PL and a Build.PL, use the +# former (EUMM) or the latter (MB); if the module +# comes with only one of the two, that one will be +# used no matter the setting +$(2)_PREFER_INSTALLER ?= MB + +# +# Configure step. Only define it if not already defined by the package +# .mk file. And take care of the differences between host and target +# packages. +# +ifndef $(2)_CONFIGURE_CMDS +ifeq ($(4),target) + +# Configure package for target +define $(2)_CONFIGURE_CMDS + cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] && [ $$($(2)_PREFER_INSTALLER) != "EUMM" ] ; then \ + $$($(2)_CONF_ENV) \ + PERL_MM_USE_DEFAULT=1 \ + $$(PERL_RUN) Build.PL \ + --config ar="$$(TARGET_AR)" \ + --config full_ar="$$(TARGET_AR)" \ + --config cc="$$(TARGET_CC)" \ + --config ccflags="$$(TARGET_CFLAGS)" \ + --config optimize=" " \ + --config ld="$$(TARGET_CC)" \ + --config lddlflags="-shared $$(TARGET_LDFLAGS)" \ + --config ldflags="$$(TARGET_LDFLAGS)" \ + --include_dirs $$(STAGING_DIR)/usr/lib/perl5/$$(PERL_VERSION)/$$(PERL_ARCHNAME)/CORE \ + --destdir $$(TARGET_DIR) \ + --installdirs vendor \ + --install_path lib=/usr/lib/perl5/site_perl/$$(PERL_VERSION) \ + --install_path arch=/usr/lib/perl5/site_perl/$$(PERL_VERSION)/$$(PERL_ARCHNAME) \ + --install_path bin=/usr/bin \ + --install_path script=/usr/bin \ + --install_path bindoc=/usr/share/man/man1 \ + --install_path libdoc=/usr/share/man/man3 \ + $$($(2)_CONF_OPTS); \ + else \ + $$($(2)_CONF_ENV) \ + PERL_MM_USE_DEFAULT=1 \ + PERL_AUTOINSTALL=--skipdeps \ + $$(PERL_RUN) Makefile.PL \ + AR="$$(TARGET_AR)" \ + FULL_AR="$$(TARGET_AR)" \ + CC="$$(TARGET_CC)" \ + CCFLAGS="$$(TARGET_CFLAGS)" \ + OPTIMIZE=" " \ + LD="$$(TARGET_CC)" \ + LDDLFLAGS="-shared $$(TARGET_LDFLAGS)" \ + LDFLAGS="$$(TARGET_LDFLAGS)" \ + PERL_ARCHLIB=$$(STAGING_DIR)/usr/lib/perl5/$$(PERL_VERSION)/$$(PERL_ARCHNAME) \ + DESTDIR=$$(TARGET_DIR) \ + INSTALLDIRS=vendor \ + INSTALLVENDORLIB=/usr/lib/perl5/site_perl/$$(PERL_VERSION) \ + INSTALLVENDORARCH=/usr/lib/perl5/site_perl/$$(PERL_VERSION)/$$(PERL_ARCHNAME) \ + INSTALLVENDORBIN=/usr/bin \ + INSTALLVENDORSCRIPT=/usr/bin \ + INSTALLVENDORMAN1DIR=/usr/share/man/man1 \ + INSTALLVENDORMAN3DIR=/usr/share/man/man3 \ + $$($(2)_CONF_OPTS); \ + fi +endef +else + +# Configure package for host +define $(2)_CONFIGURE_CMDS + cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] && [ $$($(2)_PREFER_INSTALLER) != "EUMM" ] ; then \ + $$($(2)_CONF_ENV) \ + PERL_MM_USE_DEFAULT=1 \ + $$(PERL_RUN) Build.PL \ + $$($(2)_CONF_OPTS); \ + else \ + $$($(2)_CONF_ENV) \ + PERL_MM_USE_DEFAULT=1 \ + PERL_AUTOINSTALL=--skipdeps \ + $$(PERL_RUN) Makefile.PL \ + $$($(2)_CONF_OPTS); \ + fi +endef +endif +endif + +# +# Build step. Only define it if not already defined by the package .mk +# file. And take care of the differences between host and target +# packages. +# +ifndef $(2)_BUILD_CMDS +ifeq ($(4),target) + +# Build package for target +define $(2)_BUILD_CMDS + cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] && [ $$($(2)_PREFER_INSTALLER) != "EUMM" ] ; then \ + $$(PERL_RUN) Build $$($(2)_BUILD_OPTS) build; \ + else \ + $$(MAKE1) \ + FIXIN=: \ + $$($(2)_BUILD_OPTS) pure_all; \ + fi +endef +else + +# Build package for host +define $(2)_BUILD_CMDS + cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] && [ $$($(2)_PREFER_INSTALLER) != "EUMM" ] ; then \ + $$(PERL_RUN) Build $$($(2)_BUILD_OPTS) build; \ + else \ + $$(MAKE1) $$($(2)_BUILD_OPTS) pure_all; \ + fi +endef +endif +endif + +# +# Host installation step. Only define it if not already defined by the +# package .mk file. +# +ifndef $(2)_INSTALL_CMDS +define $(2)_INSTALL_CMDS + cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] && [ $$($(2)_PREFER_INSTALLER) != "EUMM" ] ; then \ + $$(PERL_RUN) Build $$($(2)_INSTALL_TARGET_OPTS) install; \ + else \ + $$(MAKE1) $$($(2)_INSTALL_TARGET_OPTS) pure_install; \ + fi +endef +endif + +# +# Target installation step. Only define it if not already defined by +# the package .mk file. +# +ifndef $(2)_INSTALL_TARGET_CMDS +define $(2)_INSTALL_TARGET_CMDS + cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] && [ $$($(2)_PREFER_INSTALLER) != "EUMM" ] ; then \ + $$(PERL_RUN) Build $$($(2)_INSTALL_TARGET_OPTS) install; \ + else \ + $$(MAKE1) $$($(2)_INSTALL_TARGET_OPTS) pure_install; \ + fi +endef +endif + +# Call the generic package infrastructure to generate the necessary +# make targets +$(call inner-generic-package,$(1),$(2),$(3),$(4)) + +# Upgrade helper +ifneq ($$($(3)_DISTNAME),) +$(1)-upgrade: + utils/scancpan -force -$(4) $$($(3)_DISTNAME) + +.PHONY: $(1)-upgrade +endif + +endef + +################################################################################ +# perl-package -- the target generator macro for Perl packages +################################################################################ + +perl-package = $(call inner-perl-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target) +host-perl-package = $(call inner-perl-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host) diff --git a/package/pkg-python.mk b/package/pkg-python.mk new file mode 100644 index 00000000..59a48e5a --- /dev/null +++ b/package/pkg-python.mk @@ -0,0 +1,315 @@ +################################################################################ +# Python package infrastructure +# +# This file implements an infrastructure that eases development of +# package .mk files for Python packages. It should be used for all +# packages that use Python setup.py/setuptools as their build system. +# +# See the Buildroot documentation for details on the usage of this +# infrastructure +# +# In terms of implementation, this Python infrastructure requires the +# .mk file to only specify metadata information about the package: +# name, version, download URL, etc. +# +# We still allow the package .mk file to override what the different +# steps are doing, if needed. For example, if _BUILD_CMDS is +# already defined, it is used as the list of commands to perform to +# build the package, instead of the default Python behaviour. The +# package can also define some post operation hooks. +# +################################################################################ + +# basename does not evaluate if a file exists, so we must check to ensure +# the _sysconfigdata__linux_*.py file exists. The "|| true" is added to return +# an empty string if the file does not exist. +PKG_PYTHON_SYSCONFIGDATA_PATH = $(PYTHON3_PATH)/_sysconfigdata__linux_*.py +PKG_PYTHON_SYSCONFIGDATA_NAME = `{ [ -e $(PKG_PYTHON_SYSCONFIGDATA_PATH) ] && basename $(PKG_PYTHON_SYSCONFIGDATA_PATH) .py; } || true` + +# Target distutils-based packages +PKG_PYTHON_DISTUTILS_ENV = \ + PATH=$(BR_PATH) \ + $(TARGET_CONFIGURE_OPTS) \ + LDSHARED="$(TARGET_CROSS)gcc -shared" \ + PYTHONPATH="$(if $(BR2_PACKAGE_PYTHON3),$(PYTHON3_PATH),$(PYTHON_PATH))" \ + PYTHONNOUSERSITE=1 \ + _PYTHON_SYSCONFIGDATA_NAME="$(PKG_PYTHON_SYSCONFIGDATA_NAME)" \ + _python_sysroot=$(STAGING_DIR) \ + _python_prefix=/usr \ + _python_exec_prefix=/usr + +PKG_PYTHON_DISTUTILS_BUILD_OPTS = \ + --executable=/usr/bin/python + +PKG_PYTHON_DISTUTILS_INSTALL_TARGET_OPTS = \ + --prefix=/usr \ + --root=$(TARGET_DIR) + +PKG_PYTHON_DISTUTILS_INSTALL_STAGING_OPTS = \ + --prefix=/usr \ + --root=$(STAGING_DIR) + +# Host distutils-based packages +HOST_PKG_PYTHON_DISTUTILS_ENV = \ + PATH=$(BR_PATH) \ + PYTHONNOUSERSITE=1 \ + $(HOST_CONFIGURE_OPTS) + +HOST_PKG_PYTHON_DISTUTILS_INSTALL_OPTS = \ + --prefix=$(HOST_DIR) + +# Target setuptools-based packages +PKG_PYTHON_SETUPTOOLS_ENV = \ + _PYTHON_SYSCONFIGDATA_NAME="$(PKG_PYTHON_SYSCONFIGDATA_NAME)" \ + PATH=$(BR_PATH) \ + $(TARGET_CONFIGURE_OPTS) \ + PYTHONPATH="$(if $(BR2_PACKAGE_PYTHON3),$(PYTHON3_PATH),$(PYTHON_PATH))" \ + PYTHONNOUSERSITE=1 \ + _python_sysroot=$(STAGING_DIR) \ + _python_prefix=/usr \ + _python_exec_prefix=/usr + +PKG_PYTHON_SETUPTOOLS_INSTALL_TARGET_OPTS = \ + --prefix=/usr \ + --executable=/usr/bin/python \ + --single-version-externally-managed \ + --root=$(TARGET_DIR) + +PKG_PYTHON_SETUPTOOLS_INSTALL_STAGING_OPTS = \ + --prefix=/usr \ + --executable=/usr/bin/python \ + --single-version-externally-managed \ + --root=$(STAGING_DIR) + +# Host setuptools-based packages +HOST_PKG_PYTHON_SETUPTOOLS_ENV = \ + PATH=$(BR_PATH) \ + PYTHONNOUSERSITE=1 \ + $(HOST_CONFIGURE_OPTS) + +HOST_PKG_PYTHON_SETUPTOOLS_INSTALL_OPTS = \ + --prefix=$(HOST_DIR) \ + --root=/ \ + --single-version-externally-managed + +ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y) +define PKG_PYTHON_FIXUP_SYSCONFIGDATA + find $(HOST_DIR)/lib/python* $(STAGING_DIR)/usr/lib/python* \ + -name "_sysconfigdata*.py" | xargs --no-run-if-empty \ + $(SED) "s:$(PER_PACKAGE_DIR)/[^/]\+/:$(PER_PACKAGE_DIR)/$($(PKG)_NAME)/:g" +endef +endif + +################################################################################ +# inner-python-package -- defines how the configuration, compilation +# and installation of a Python package should be done, implements a +# few hooks to tune the build process and calls the generic package +# infrastructure to generate the necessary make targets +# +# argument 1 is the lowercase package name +# argument 2 is the uppercase package name, including a HOST_ prefix +# for host packages +# argument 3 is the uppercase package name, without the HOST_ prefix +# for host packages +# argument 4 is the type (target or host) +################################################################################ + +define inner-python-package + +$(2)_ENV ?= +$(2)_BUILD_OPTS ?= +$(2)_INSTALL_OPTS ?= + +ifndef $(2)_SETUP_TYPE + ifdef $(3)_SETUP_TYPE + $(2)_SETUP_TYPE = $$($(3)_SETUP_TYPE) + else + $$(error "$(2)_SETUP_TYPE must be set") + endif +endif + +# Distutils +ifeq ($$($(2)_SETUP_TYPE),distutils) +ifeq ($(4),target) +$(2)_BASE_ENV = $$(PKG_PYTHON_DISTUTILS_ENV) +$(2)_BASE_BUILD_TGT = build +$(2)_BASE_BUILD_OPTS = $$(PKG_PYTHON_DISTUTILS_BUILD_OPTS) +$(2)_BASE_INSTALL_TARGET_OPTS = $$(PKG_PYTHON_DISTUTILS_INSTALL_TARGET_OPTS) +$(2)_BASE_INSTALL_STAGING_OPTS = $$(PKG_PYTHON_DISTUTILS_INSTALL_STAGING_OPTS) +else +$(2)_BASE_ENV = $$(HOST_PKG_PYTHON_DISTUTILS_ENV) +$(2)_BASE_BUILD_TGT = build +$(2)_BASE_BUILD_OPTS = +$(2)_BASE_INSTALL_OPTS = $$(HOST_PKG_PYTHON_DISTUTILS_INSTALL_OPTS) +endif +# Setuptools +else ifeq ($$($(2)_SETUP_TYPE),setuptools) +ifeq ($(4),target) +$(2)_BASE_ENV = $$(PKG_PYTHON_SETUPTOOLS_ENV) +$(2)_BASE_BUILD_TGT = build +$(2)_BASE_BUILD_OPTS = +$(2)_BASE_INSTALL_TARGET_OPTS = $$(PKG_PYTHON_SETUPTOOLS_INSTALL_TARGET_OPTS) +$(2)_BASE_INSTALL_STAGING_OPTS = $$(PKG_PYTHON_SETUPTOOLS_INSTALL_STAGING_OPTS) +else +$(2)_BASE_ENV = $$(HOST_PKG_PYTHON_SETUPTOOLS_ENV) +$(2)_BASE_BUILD_TGT = build +$(2)_BASE_BUILD_OPTS = +$(2)_BASE_INSTALL_OPTS = $$(HOST_PKG_PYTHON_SETUPTOOLS_INSTALL_OPTS) +endif +else +$$(error "Invalid $(2)_SETUP_TYPE. Valid options are 'distutils' or 'setuptools'") +endif + +# Target packages need both the python interpreter on the target (for +# runtime) and the python interpreter on the host (for +# compilation). However, host packages only need the python +# interpreter on the host, whose version may be enforced by setting +# the *_NEEDS_HOST_PYTHON variable. +# +# So: +# - for target packages, we always depend on the default python interpreter +# (the one selected by the config); +# - for host packages: +# - if *_NEEDS_HOST_PYTHON is not set, then we depend on use the default +# interperter; +# - otherwise, we depend on the one requested by *_NEEDS_HOST_PYTHON. +# +ifeq ($(4),target) +$(2)_DEPENDENCIES += $$(if $$(BR2_PACKAGE_PYTHON3),host-python3 python3,host-python python) +else +ifeq ($$($(2)_NEEDS_HOST_PYTHON),) +$(2)_DEPENDENCIES += $$(if $$(BR2_PACKAGE_PYTHON3),host-python3,host-python) +else +ifeq ($$($(2)_NEEDS_HOST_PYTHON),python2) +$(2)_DEPENDENCIES += host-python +else ifeq ($$($(2)_NEEDS_HOST_PYTHON),python3) +$(2)_DEPENDENCIES += host-python3 +else +$$(error Incorrect value '$$($(2)_NEEDS_HOST_PYTHON)' for $(2)_NEEDS_HOST_PYTHON) +endif +endif # ($$($(2)_NEEDS_HOST_PYTHON),) +endif # ($(4),target) + +# Setuptools based packages will need setuptools for the host Python +# interpreter (both host and target). +# +# If we have a host package that says "I need Python 3", we install +# setuptools for python3. +# +# If we have a host packge that says "I need Python 2", we install +# setuptools for python2. +# +# If we have a target package, or a host package that doesn't have any +# _NEEDS_HOST_PYTHON, and BR2_PACKAGE_PYTHON3 is used, then +# Python 3.x is the default Python interpreter, so we install +# setuptools for python3. +# +# In all other cases, we install setuptools for python2. Those other +# cases are: a target package or host package with +# BR2_PACKAGE_PYTHON=y, or a host-package with neither +# BR2_PACKAGE_PYTHON3=y or BR2_PACKAGE_PYTHON=y. +ifeq ($$($(2)_SETUP_TYPE),setuptools) +ifeq ($(4):$$($(2)_NEEDS_HOST_PYTHON),host:python3) +$(2)_DEPENDENCIES += $$(if $$(filter host-python3-setuptools,$(1)),,host-python3-setuptools) +else ifeq ($(4):$$($(2)_NEEDS_HOST_PYTHON),host:python2) +$(2)_DEPENDENCIES += $$(if $$(filter host-python-setuptools,$(1)),,host-python-setuptools) +else ifeq ($$(BR2_PACKAGE_PYTHON3),y) +$(2)_DEPENDENCIES += $$(if $$(filter host-python3-setuptools,$(1)),,host-python3-setuptools) +else +$(2)_DEPENDENCIES += $$(if $$(filter host-python-setuptools,$(1)),,host-python-setuptools) +endif +endif # SETUP_TYPE + +# Python interpreter to use for building the package. +# +# We may want to specify the python interpreter to be used for building a +# package, especially for host-packages (target packages must be built using +# the same version of the interpreter as the one installed on the target). +# +# So: +# - for target packages, we always use the default python interpreter (which +# is the same version as the one built and installed on the target); +# - for host packages: +# - if *_NEEDS_HOST_PYTHON is not set, then we use use the default +# interperter; +# - otherwise, we use the one requested by *_NEEDS_HOST_PYTHON. +# +ifeq ($(4),target) +$(2)_PYTHON_INTERPRETER = $$(HOST_DIR)/bin/python +else +ifeq ($$($(2)_NEEDS_HOST_PYTHON),) +$(2)_PYTHON_INTERPRETER = $$(HOST_DIR)/bin/python +else +$(2)_PYTHON_INTERPRETER = $$(HOST_DIR)/bin/$$($(2)_NEEDS_HOST_PYTHON) +endif +endif + +$(2)_PRE_CONFIGURE_HOOKS += PKG_PYTHON_FIXUP_SYSCONFIGDATA + +# +# Build step. Only define it if not already defined by the package .mk +# file. +# +ifndef $(2)_BUILD_CMDS +define $(2)_BUILD_CMDS + (cd $$($$(PKG)_BUILDDIR)/; \ + $$($$(PKG)_BASE_ENV) $$($$(PKG)_ENV) \ + $$($(2)_PYTHON_INTERPRETER) setup.py \ + $$($$(PKG)_BASE_BUILD_TGT) \ + $$($$(PKG)_BASE_BUILD_OPTS) $$($$(PKG)_BUILD_OPTS)) +endef +endif + +# +# Host installation step. Only define it if not already defined by the +# package .mk file. +# +ifndef $(2)_INSTALL_CMDS +define $(2)_INSTALL_CMDS + (cd $$($$(PKG)_BUILDDIR)/; \ + $$($$(PKG)_BASE_ENV) $$($$(PKG)_ENV) \ + $$($(2)_PYTHON_INTERPRETER) setup.py install \ + $$($$(PKG)_BASE_INSTALL_OPTS) $$($$(PKG)_INSTALL_OPTS)) +endef +endif + +# +# Target installation step. Only define it if not already defined by +# the package .mk file. +# +ifndef $(2)_INSTALL_TARGET_CMDS +define $(2)_INSTALL_TARGET_CMDS + (cd $$($$(PKG)_BUILDDIR)/; \ + $$($$(PKG)_BASE_ENV) $$($$(PKG)_ENV) \ + $$($(2)_PYTHON_INTERPRETER) setup.py install --no-compile \ + $$($$(PKG)_BASE_INSTALL_TARGET_OPTS) \ + $$($$(PKG)_INSTALL_TARGET_OPTS)) +endef +endif + +# +# Staging installation step. Only define it if not already defined by +# the package .mk file. +# +ifndef $(2)_INSTALL_STAGING_CMDS +define $(2)_INSTALL_STAGING_CMDS + (cd $$($$(PKG)_BUILDDIR)/; \ + $$($$(PKG)_BASE_ENV) $$($$(PKG)_ENV) \ + $$($(2)_PYTHON_INTERPRETER) setup.py install \ + $$($$(PKG)_BASE_INSTALL_STAGING_OPTS) \ + $$($$(PKG)_INSTALL_STAGING_OPTS)) +endef +endif + +# Call the generic package infrastructure to generate the necessary +# make targets +$(call inner-generic-package,$(1),$(2),$(3),$(4)) + +endef + +################################################################################ +# python-package -- the target generator macro for Python packages +################################################################################ + +python-package = $(call inner-python-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target) +host-python-package = $(call inner-python-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host) diff --git a/package/pkg-qmake.mk b/package/pkg-qmake.mk new file mode 100644 index 00000000..a77286fe --- /dev/null +++ b/package/pkg-qmake.mk @@ -0,0 +1,122 @@ +################################################################################ +# QMake package infrastructure +# +# This file implements an infrastructure that eases development of package +# .mk files for QMake packages. It should be used for all packages that use +# Qmake as their build system. +# +# See the Buildroot documentation for details on the usage of this +# infrastructure +# +# In terms of implementation, this QMake infrastructure requires the .mk file +# to only specify metadata information about the package: name, version, +# download URL, etc. +# +# We still allow the package .mk file to override what the different steps +# are doing, if needed. For example, if _BUILD_CMDS is already defined, +# it is used as the list of commands to perform to build the package, +# instead of the default QMake behaviour. The package can also define some +# post operation hooks. +# +################################################################################ + +# +# Hook to sync Qt headers +# +define QT_HEADERS_SYNC_HOOK + $(Q)cd $($(PKG)_BUILDDIR) && $(HOST_DIR)/bin/syncqt.pl -version $(QT5_VERSION) +endef + +################################################################################ +# inner-qmake-package -- defines how the configuration, compilation and +# installation of a qmake package should be done, implements a few hooks +# to tune the build process for qmake specifities and calls the generic +# package infrastructure to generate the necessary make targets +# +# argument 1 is the lowercase package name +# argument 2 is the uppercase package name, including a HOST_ prefix +# for host packages +################################################################################ + +define inner-qmake-package + +$(2)_CONF_ENV ?= +$(2)_CONF_OPTS ?= +$(2)_MAKE_ENV ?= +$(2)_MAKE_OPTS ?= +$(2)_INSTALL_STAGING_OPTS ?= install +$(2)_INSTALL_TARGET_OPTS ?= $$($(2)_INSTALL_STAGING_OPTS) + +ifneq ($(1),qt5base) +$(2)_DEPENDENCIES += qt5base +endif + +ifeq ($$($(2)_SYNC_QT_HEADERS),YES) +$(2)_DEPENDENCIES += host-perl +$(2)_PRE_CONFIGURE_HOOKS += QT_HEADERS_SYNC_HOOK +endif + +# +# Configure step. Only define it if not already defined by the package +# .mk file. +# +ifndef $(2)_CONFIGURE_CMDS +define $(2)_CONFIGURE_CMDS + $$(QT5_QT_CONF_FIXUP) + cd $$($(2)_BUILDDIR) && \ + $$(TARGET_MAKE_ENV) $$($(2)_CONF_ENV) $$(QT5_QMAKE) $$($(2)_CONF_OPTS) +endef +endif + +# +# Build step. Only define it if not already defined by the package .mk +# file. +# +ifndef $(2)_BUILD_CMDS +define $(2)_BUILD_CMDS + $$(TARGET_MAKE_ENV) $$($(2)_MAKE_ENV) $$(MAKE) -C $$($(2)_BUILDDIR) $$($(2)_MAKE_OPTS) +endef +endif + +# +# Staging installation step. Only define it if not already defined by +# the package .mk file. +# +ifndef $(2)_INSTALL_STAGING_CMDS +define $(2)_INSTALL_STAGING_CMDS + $$(TARGET_MAKE_ENV) $$($(2)_MAKE_ENV) $$(MAKE) -C $$($(2)_BUILDDIR) $$($(2)_INSTALL_STAGING_OPTS) +endef +endif + +# +# Target installation step. Only define it if not already defined by +# the package .mk file. +# +# Unfortunately we can't use INSTALL_ROOT to directly install to TARGET_DIR +# because in a crosscompile setup, the qmake generated install destinations +# are prefixed with the hardcoded sysroot (=STAGING_DIR) and hostprefix +# (=HOST_DIR). +# Instead we set INSTALL_ROOT, which comes before the install path, to a +# temporary folder inside the build directory and effectively install to +# $(@D)/tmp-target-install/$(STAGING_DIR) and $(@D)/tmp-target-install/$(HOST_DIR). +# We subsequently rsync only the files from the temporary staging dir and that +# way exclude files for the build host from target. +# +ifndef $(2)_INSTALL_TARGET_CMDS +define $(2)_INSTALL_TARGET_CMDS + $$(TARGET_MAKE_ENV) $$($(2)_MAKE_ENV) $$(MAKE) -C $$($(2)_BUILDDIR) INSTALL_ROOT=$$($(2)_BUILDDIR)tmp-target-install $$($(2)_INSTALL_TARGET_OPTS) + rsync -arv $$($(2)_BUILDDIR)tmp-target-install$$(STAGING_DIR)/ $$(TARGET_DIR)/ +endef +endif + +# Call the generic package infrastructure to generate the necessary +# make targets +$(call inner-generic-package,$(1),$(2),$(3),$(4)) + +endef + +################################################################################ +# qmake-package -- the target generator macro for QMake packages +################################################################################ + +qmake-package = $(call inner-qmake-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target) diff --git a/package/pkg-rebar.mk b/package/pkg-rebar.mk new file mode 100644 index 00000000..e4e3f3bb --- /dev/null +++ b/package/pkg-rebar.mk @@ -0,0 +1,256 @@ +################################################################################ +# rebar package infrastructure for Erlang packages +# +# This file implements an infrastructure that eases development of +# package .mk files for rebar packages. It should be used for all +# packages that use rebar as their build system. +# +# In terms of implementation, this rebar infrastructure requires the +# .mk file to only specify metadata information about the package: +# name, version, download URL, etc. +# +# We still allow the package .mk file to override what the different +# steps are doing, if needed. For example, if _BUILD_CMDS is +# already defined, it is used as the list of commands to perform to +# build the package, instead of the default rebar behaviour. The +# package can also define some post operation hooks. +# +################################################################################ + +# Directories to store rebar dependencies in. +# +# These directories actually only contain symbolic links to Erlang +# applications in either $(HOST_DIR) or $(STAGING_DIR). One needs +# them to avoid rebar complaining about missing dependencies, as this +# infrastructure tells rebar to NOT download dependencies during +# the build stage. +# +REBAR_HOST_DEPS_DIR = $(HOST_DIR)/share/rebar/deps +REBAR_TARGET_DEPS_DIR = $(STAGING_DIR)/usr/share/rebar/deps + +# Tell rebar where to find the dependencies +# +REBAR_HOST_DEPS_ENV = \ + ERL_COMPILER_OPTIONS='{i, "$(REBAR_HOST_DEPS_DIR)"}' \ + ERL_EI_LIBDIR=$(HOST_DIR)/lib/erlang/lib/erl_interface-$(ERLANG_EI_VSN)/lib +REBAR_TARGET_DEPS_ENV = \ + ERL_COMPILER_OPTIONS='{i, "$(REBAR_TARGET_DEPS_DIR)"}' \ + ERL_EI_LIBDIR=$(STAGING_DIR)/usr/lib/erlang/lib/erl_interface-$(ERLANG_EI_VSN)/lib + +################################################################################ +# Helper functions +################################################################################ + +# Install an Erlang application from $(@D). +# +# i.e., define a recipe that installs the "bin ebin priv $(2)" directories +# from $(@D) to $(1)/$($(PKG)_ERLANG_LIBDIR). +# +# argument 1 should typically be $(HOST_DIR), $(TARGET_DIR), +# or $(STAGING_DIR). +# argument 2 is typically empty when installing in $(TARGET_DIR) and +# "include" when installing in $(HOST_DIR) or +# $(STAGING_DIR). +# +# Note: calling this function must be done with $$(call ...) because it +# expands package-related variables. +# +define install-erlang-directories + $(INSTALL) -d $(1)/$($(PKG)_ERLANG_LIBDIR) + for dir in bin ebin priv $(2); do \ + if test -d $(@D)/$$dir; then \ + cp -r $(@D)/$$dir $(1)/$($(PKG)_ERLANG_LIBDIR); \ + fi; \ + done +endef + +# Setup a symbolic link in rebar's deps_dir to the actual location +# where an Erlang application is installed. +# +# i.e., define a recipe that creates a symbolic link +# from $($(PKG)_REBAR_DEPS_DIR)/$($(PKG)_ERLANG_APP) +# to $(1)$($(PKG)_ERLANG_LIBDIR). +# +# For target packages for example, one uses this to setup symbolic +# links from $(STAGING_DIR)/usr/share/rebar/deps/ to +# $(STAGING_DIR)/usr/lib/erlang/lib/-. This +# infrastructure points rebar at the former in order to tell rebar to +# NOT download dependencies during the build stage, and instead use +# the already available dependencies. +# +# Therefore, +# argument 1 is $(HOST_DIR) (for host packages) or +# $(STAGING_DIR) (for target packages). +# +# argument 2 is HOST (for host packages) or +# TARGET (for target packages). +# +# Note: calling this function must be done with $$(call ...) because it +# expands package-related variables. +# +define install-rebar-deps + $(INSTALL) -d $(REBAR_$(2)_DEPS_DIR) + ln -f -s $(1)/$($(PKG)_ERLANG_LIBDIR) \ + $(REBAR_$(2)_DEPS_DIR)/$($(PKG)_ERLANG_APP) +endef + +# Remove the "deps" statement from a rebar.config file +define remove-rebar-config-dependencies + $(SED) '/^{deps.*}\.$$/d' -e '/^{deps/,/}\.$$/d' \ + $($(PKG)_DIR)/rebar.config +endef + + +################################################################################ +# inner-rebar-package -- defines how the configuration, compilation +# and installation of a rebar package should be done, implements a few +# hooks to tune the build process according to rebar specifities, and +# calls the generic package infrastructure to generate the necessary +# make targets. +# +# argument 1 is the lowercase package name +# argument 2 is the uppercase package name, including a HOST_ prefix +# for host packages +# argument 3 is the uppercase package name, without the HOST_ prefix +# for host packages +# argument 4 is the type (target or host) +# +################################################################################ + +define inner-rebar-package + +# Extract just the raw package name, lowercase without the leading +# erlang- or host- prefix, as this is used by rebar to find the +# dependencies a package specifies. +# +$(2)_ERLANG_APP = $(subst -,_,$(patsubst erlang-%,%,$(patsubst host-%,%,$(1)))) + +# Path where to store the package's libs, relative to either $(HOST_DIR) +# for host packages, or $(STAGING_DIR)/usr for target packages. +# +$(2)_ERLANG_LIBDIR = \ + lib/erlang/lib/$$($$(PKG)_ERLANG_APP)-$$($$(PKG)_VERSION) + +# If a host package, inherit _USE_BUNDLED_REBAR from the target +# package, if not explicitly defined. Otherwise, default to NO. +ifndef $(2)_USE_BUNDLED_REBAR + ifdef $(3)_USE_BUNDLED_REBAR + $(2)_USE_BUNDLED_REBAR = $$($(3)_USE_BUNDLED_REBAR) + else + $(2)_USE_BUNDLED_REBAR ?= NO + endif +endif + +# If a host package, inherit _USE_AUTOCONF from the target +# package, if not explicitly defined. Otherwise, default to NO. +ifndef $(2)_USE_AUTOCONF + ifdef $(3)_USE_AUTOCONF + $(2)_USE_AUTOCONF = $$($(3)_USE_AUTOCONF) + else + $(2)_USE_AUTOCONF ?= NO + endif +endif + +# Define the build and install commands +# +ifeq ($(4),target) + +# Target packages need the erlang interpreter on the target +$(2)_DEPENDENCIES += erlang + +# Used only if the package uses autotools underneath; otherwise, ignored +$(2)_CONF_ENV += $$(REBAR_TARGET_DEPS_ENV) + +ifndef $(2)_BUILD_CMDS +define $(2)_BUILD_CMDS + (cd $$(@D); \ + CC="$$(TARGET_CC)" \ + CXX="$$(TARGET_CXX)" \ + CFLAGS="$$(TARGET_CFLAGS)" \ + CXXFLAGS="$$(TARGET_CXXFLAGS)" \ + LDFLAGS="$$(TARGET_LDFLAGS)" \ + $$(REBAR_TARGET_DEPS_ENV) \ + $$(TARGET_MAKE_ENV) \ + $$($$(PKG)_REBAR_ENV) $$($$(PKG)_REBAR) deps_dir=$$(REBAR_TARGET_DEPS_DIR) compile \ + ) +endef +endif + +# We need to double-$ the 'call' because it wants to expand +# package-related variables +ifndef $(2)_INSTALL_STAGING_CMDS +define $(2)_INSTALL_STAGING_CMDS + $$(call install-erlang-directories,$$(STAGING_DIR)/usr,include) + $$(call install-rebar-deps,$$(STAGING_DIR)/usr,TARGET) +endef +endif + +# We need to double-$ the 'call' because it wants to expand +# package-related variables +ifndef $(2)_INSTALL_TARGET_CMDS +define $(2)_INSTALL_TARGET_CMDS + $$(call install-erlang-directories,$$(TARGET_DIR)/usr) +endef +endif + +else # !target + +# Host packages need the erlang interpreter on the host +$(2)_DEPENDENCIES += host-erlang + +# Used only if the package uses autotools underneath; otherwise, ignored +$(2)_CONF_ENV += $$(REBAR_HOST_DEPS_ENV) + +ifndef $(2)_BUILD_CMDS +define $(2)_BUILD_CMDS + (cd $$(@D); \ + CC="$$(HOSTCC)" \ + CFLAGS="$$(HOST_CFLAGS)" \ + LDFLAGS="$$(HOST_LDFLAGS)" \ + $$(REBAR_HOST_DEPS_ENV) \ + $$(HOST_MAKE_ENV) \ + $$($$(PKG)_REBAR_ENV) $$($$(PKG)_REBAR) deps_dir=$$(REBAR_HOST_DEPS_DIR) compile \ + ) +endef +endif + +# We need to double-$ the 'call' because it wants to expand +# package-related variables +ifndef $(2)_INSTALL_CMDS +define $(2)_INSTALL_CMDS + $$(call install-erlang-directories,$$(HOST_DIR),include) + $$(call install-rebar-deps,$$(HOST_DIR),HOST) +endef +endif + +endif # !target + +# Whether to use the generic rebar or the package's bundled rebar +# +ifeq ($$($(2)_USE_BUNDLED_REBAR),YES) +$(2)_REBAR = ./rebar +else +$(2)_REBAR = rebar +$(2)_DEPENDENCIES += host-erlang-rebar +endif + +$(2)_KEEP_DEPENDENCIES ?= NO + +# Remove dependencies listed in rebar.config unless the package says +# otherwise +ifeq ($$($(2)_KEEP_DEPENDENCIES),NO) +$(2)_POST_PATCH_HOOKS += remove-rebar-config-dependencies +endif + +# The package sub-infra to use +# +ifeq ($$($(2)_USE_AUTOCONF),YES) +$(call inner-autotools-package,$(1),$(2),$(3),$(4)) +else +$(call inner-generic-package,$(1),$(2),$(3),$(4)) +endif + +endef # inner-rebar-package + +rebar-package = $(call inner-rebar-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target) +host-rebar-package = $(call inner-rebar-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host) diff --git a/package/pkg-utils.mk b/package/pkg-utils.mk new file mode 100644 index 00000000..d0fcdd4e --- /dev/null +++ b/package/pkg-utils.mk @@ -0,0 +1,240 @@ +################################################################################ +# +# This file contains various utility functions used by the package +# infrastructure, or by the packages themselves. +# +################################################################################ + +# +# Manipulation of .config files based on the Kconfig +# infrastructure. Used by the BusyBox package, the Linux kernel +# package, and more. +# + +# KCONFIG_DOT_CONFIG ([file]) +# Returns the path to the .config file that should be used, which will +# be $(1) if provided, or the current package .config file otherwise. +KCONFIG_DOT_CONFIG = $(strip \ + $(if $(strip $(1)), $(1), \ + $($(PKG)_BUILDDIR)/$($(PKG)_KCONFIG_DOTCONFIG) \ + ) \ +) + +# KCONFIG_MUNGE_DOT_CONFIG (option, newline [, file]) +define KCONFIG_MUNGE_DOT_CONFIG + $(SED) "/\\<$(strip $(1))\\>/d" $(call KCONFIG_DOT_CONFIG,$(3)) + echo '$(strip $(2))' >> $(call KCONFIG_DOT_CONFIG,$(3)) +endef + +# KCONFIG_ENABLE_OPT (option [, file]) +KCONFIG_ENABLE_OPT = $(call KCONFIG_MUNGE_DOT_CONFIG, $(1), $(1)=y, $(2)) +# KCONFIG_SET_OPT (option, value [, file]) +KCONFIG_SET_OPT = $(call KCONFIG_MUNGE_DOT_CONFIG, $(1), $(1)=$(2), $(3)) +# KCONFIG_DISABLE_OPT (option [, file]) +KCONFIG_DISABLE_OPT = $(call KCONFIG_MUNGE_DOT_CONFIG, $(1), $(SHARP_SIGN) $(1) is not set, $(2)) + +# Helper functions to determine the name of a package and its +# directory from its makefile directory, using the $(MAKEFILE_LIST) +# variable provided by make. This is used by the *-package macros to +# automagically find where the package is located. +pkgdir = $(dir $(lastword $(MAKEFILE_LIST))) +pkgname = $(lastword $(subst /, ,$(pkgdir))) + +# Helper to build the extension for a package archive, based on various +# conditions. +# $(1): upper-case package name +pkg_source_ext = $(BR_FMT_VERSION_$($(1)_SITE_METHOD)).tar.gz + +# Define extractors for different archive suffixes +INFLATE.bz2 = $(BZCAT) +INFLATE.gz = $(ZCAT) +INFLATE.lz = $(LZCAT) +INFLATE.lzma = $(XZCAT) +INFLATE.tbz = $(BZCAT) +INFLATE.tbz2 = $(BZCAT) +INFLATE.tgz = $(ZCAT) +INFLATE.xz = $(XZCAT) +INFLATE.tar = cat +# suitable-extractor(filename): returns extractor based on suffix +suitable-extractor = $(INFLATE$(suffix $(1))) + +EXTRACTOR_PKG_DEPENDENCY.lzma = $(BR2_XZCAT_HOST_DEPENDENCY) +EXTRACTOR_PKG_DEPENDENCY.xz = $(BR2_XZCAT_HOST_DEPENDENCY) +EXTRACTOR_PKG_DEPENDENCY.lz = $(BR2_LZIP_HOST_DEPENDENCY) + +# extractor-pkg-dependency(filename): returns a Buildroot package +# dependency needed to extract file based on suffix +extractor-pkg-dependency = $(EXTRACTOR_PKG_DEPENDENCY$(suffix $(1))) + +# extractor-system-dependency(filename): returns the name of the tool +# needed to extract 'filename', and is meant to be used with +# DL_TOOLS_DEPENDENCIES, in order to check that the necesary tool is +# provided by the system Buildroot runs on. +# +# $(firstword) is used here because the extractor can have arguments, +# like ZCAT="gzip -d -c", and to check for the dependency we only want +# 'gzip'. +extractor-system-dependency = $(if $(EXTRACTOR_PKG_DEPENDENCY$(suffix $(1))),,\ + $(firstword $(INFLATE$(suffix $(1))))) + +# check-deprecated-variable -- throw an error on deprecated variables +# example: +# $(eval $(call check-deprecated-variable,FOO_MAKE_OPT,FOO_MAKE_OPTS)) +define check-deprecated-variable # (deprecated var, new var) +ifneq ($$(origin $(1)),undefined) +$$(error Package error: use $(2) instead of $(1). Please fix your .mk file) +endif +endef + +# $(1): YES or NO +define yesno-to-bool + $(subst NO,false,$(subst YES,true,$(1))) +endef + +# json-info -- return package or filesystem metadata formatted as an entry +# of a JSON dictionnary +# $(1): upper-case package or filesystem name +define json-info + "$($(1)_NAME)": { + "name": "$($(1)_RAWNAME)", + "type": "$($(1)_TYPE)", + $(if $(filter rootfs,$($(1)_TYPE)), \ + $(call _json-info-fs,$(1)), \ + $(call _json-info-pkg,$(1)), \ + ) + } +endef + +# _json-info-pkg, _json-info-pkg-details, _json-info-fs: private helpers +# for json-info, above +define _json-info-pkg + $(if $($(1)_IS_VIRTUAL), \ + "virtual": true$(comma), + "virtual": false$(comma) + $(call _json-info-pkg-details,$(1)) \ + ) + "build_dir": "$(patsubst $(BASE_DIR)/%,%,$($(1)_BUILDDIR))", + $(if $(filter target,$($(1)_TYPE)), \ + "install_target": $(call yesno-to-bool,$($(1)_INSTALL_TARGET))$(comma) \ + "install_staging": $(call yesno-to-bool,$($(1)_INSTALL_STAGING))$(comma) \ + "install_images": $(call yesno-to-bool,$($(1)_INSTALL_IMAGES))$(comma) \ + ) + "dependencies": [ + $(call make-comma-list,$(sort $($(1)_FINAL_ALL_DEPENDENCIES))) + ], + "reverse_dependencies": [ + $(call make-comma-list,$(sort $($(1)_RDEPENDENCIES))) + ] + $(if $($(1)_CPE_ID_VALID), \ + $(comma) "cpe-id": "$($(1)_CPE_ID)" \ + ) + $(if $($(1)_IGNORE_CVES), + $(comma) "ignore_cves": [ + $(call make-comma-list,$(sort $($(1)_IGNORE_CVES))) + ] + ) +endef + +define _json-info-pkg-details + "version": "$($(1)_DL_VERSION)", + "licenses": "$($(1)_LICENSE)", + "dl_dir": "$($(1)_DL_SUBDIR)", + "downloads": [ + $(foreach dl,$(sort $($(1)_ALL_DOWNLOADS)), + { + "source": "$(notdir $(dl))", + "uris": [ + $(call make-comma-list, + $(subst \|,|, + $(call DOWNLOAD_URIS,$(dl),$(1)) + ) + ) + ] + }, + ) + ], +endef + +define _json-info-fs + "dependencies": [ + $(call make-comma-list,$(sort $($(1)_DEPENDENCIES))) + ] +endef + +# clean-json -- cleanup pseudo-json into clean json: +# - remove commas before closing ] and } +# - minify with $(strip) +clean-json = $(strip \ + $(subst $(comma)},}, $(subst $(comma)$(space)},$(space)}, \ + $(subst $(comma)],], $(subst $(comma)$(space)],$(space)], \ + $(subst \,\\, \ + $(strip $(1)) \ + ))))) \ +) + +ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y) +# rsync the contents of per-package directories +# $1: space-separated list of packages to rsync from +# $2: 'host' or 'target' +# $3: destination directory +define per-package-rsync + mkdir -p $(3) + $(foreach pkg,$(1),\ + rsync -a --link-dest=$(PER_PACKAGE_DIR)/$(pkg)/$(2)/ \ + $(PER_PACKAGE_DIR)/$(pkg)/$(2)/ \ + $(3)$(sep)) +endef + +# prepares the per-package HOST_DIR and TARGET_DIR of the current +# package, by rsync the host and target directories of the +# dependencies of this package. The list of dependencies is passed as +# argument, so that this function can be used to prepare with +# different set of dependencies (download, extract, configure, etc.) +# +# $1: space-separated list of packages to rsync from +define prepare-per-package-directory + $(call per-package-rsync,$(1),host,$(HOST_DIR)) + $(call per-package-rsync,$(1),target,$(TARGET_DIR)) +endef +endif + +# +# legal-info helper functions +# +LEGAL_INFO_SEPARATOR = "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::" + +define legal-warning # text + echo "WARNING: $(1)" >>$(LEGAL_WARNINGS) +endef + +define legal-warning-pkg # pkg, text + echo "WARNING: $(1): $(2)" >>$(LEGAL_WARNINGS) +endef + +define legal-warning-nosource # pkg, {local|override} + $(call legal-warning-pkg,$(1),sources not saved ($(2) packages not handled)) +endef + +define legal-manifest # {HOST|TARGET}, pkg, version, license, license-files, source, url, dependencies + echo '"$(2)","$(3)","$(4)","$(5)","$(6)","$(7)","$(8)"' >>$(LEGAL_MANIFEST_CSV_$(1)) +endef + +define legal-license-file # pkgname, pkgname-pkgver, pkg-hashfile, filename, file-fullpath, {HOST|TARGET} + mkdir -p $(LICENSE_FILES_DIR_$(6))/$(2)/$(dir $(4)) && \ + { \ + support/download/check-hash $(3) $(5) $(4); \ + case $${?} in (0|3) ;; (*) exit 1;; esac; \ + } && \ + cp $(5) $(LICENSE_FILES_DIR_$(6))/$(2)/$(4) +endef + +non-virtual-deps = $(foreach p,$(1),$(if $($(call UPPERCASE,$(p))_IS_VIRTUAL),,$(p))) + +# Returns the list of recursive dependencies and their licensing terms +# for the package specified in parameter (in lowercase). If that +# package is a target package, remove host packages from the list. +legal-deps = \ + $(foreach p,\ + $(filter-out $(if $(1:host-%=),host-%),\ + $(call non-virtual-deps,\ + $($(call UPPERCASE,$(1))_FINAL_RECURSIVE_DEPENDENCIES))),$(p) [$($(call UPPERCASE,$(p))_LICENSE)]) diff --git a/package/pkg-virtual.mk b/package/pkg-virtual.mk new file mode 100644 index 00000000..05bd63eb --- /dev/null +++ b/package/pkg-virtual.mk @@ -0,0 +1,77 @@ +################################################################################ +# Virtual package infrastructure +# +# This file implements an infrastructure that eases development of +# package .mk files for virtual packages. It should be used for all +# virtual packages. +# +# See the Buildroot documentation for details on the usage of this +# infrastructure +# +# In terms of implementation, this virtual infrastructure requires +# the .mk file to only call the 'virtual-package' macro. +# +################################################################################ + + +################################################################################ +# inner-virtual-package -- defines the dependency rules of the virtual +# package against its provider. +# +# argument 1 is the lowercase package name +# argument 2 is the uppercase package name, including a HOST_ prefix +# for host packages +# argument 3 is the uppercase package name, without the HOST_ prefix +# for host packages +# argument 4 is the type (target or host) +################################################################################ + +# Note: putting this comment here rather than in the define block, otherwise +# make would try to expand the $(error ...) in the comment, which is not +# really what we want. +# We need to use second-expansion for the $(error ...) call, below, +# so it is not evaluated now, but as part of the generated make code. + +define inner-virtual-package + +# Ensure the virtual package has an implementation defined. +ifeq ($$(BR2_PACKAGE_HAS_$(2)),y) +ifeq ($$(call qstrip,$$(BR2_PACKAGE_PROVIDES_$(2))),) +$$(error No implementation selected for virtual package $(1). Configuration error) +endif +endif + +# explicitly set these so we do not get confused by environment +# variables with the same names. +$(2)_VERSION = +$(2)_SOURCE = + +$(2)_IS_VIRTUAL = YES + +# Add dependency against the provider +# For a host package, there is no corresponding BR2_PACKAGE_PROVIDES_HOST_FOO, +# so we need to compute it from the target variant. +ifeq ($(4),target) +$(2)_DEPENDENCIES += $$(call qstrip,$$(BR2_PACKAGE_PROVIDES_$(2))) +else +ifeq ($$(call qstrip,$$(BR2_PACKAGE_PROVIDES_$(2))),) +# Inherit from target package BR2_PACKAGE_PROVIDES_FOO +$(2)_DEPENDENCIES += host-$$(call qstrip,$$(BR2_PACKAGE_PROVIDES_$(3))) +else +# BR2_PACKAGE_PROVIDES_HOST_ is explicitly defined +$(2)_DEPENDENCIES += $$(call qstrip,$$(BR2_PACKAGE_PROVIDES_$(2))) +endif +endif + +# Call the generic package infrastructure to generate the necessary +# make targets +$(call inner-generic-package,$(1),$(2),$(3),$(4)) + +endef + +################################################################################ +# virtual-package -- the target generator macro for virtual packages +################################################################################ + +virtual-package = $(call inner-virtual-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target) +host-virtual-package = $(call inner-virtual-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host) diff --git a/package/pkg-waf.mk b/package/pkg-waf.mk new file mode 100644 index 00000000..038d8945 --- /dev/null +++ b/package/pkg-waf.mk @@ -0,0 +1,125 @@ +################################################################################ +# WAF package infrastructure +# +# This file implements an infrastructure that eases development of package +# .mk files for WAF packages. It should be used for all packages that use +# WAF as their build system. +# +# See the Buildroot documentation for details on the usage of this +# infrastructure +# +# In terms of implementation, this WAF infrastructure requires the .mk file +# to only specify metadata information about the package: name, version, +# download URL, etc. +# +# We still allow the package .mk file to override what the different steps +# are doing, if needed. For example, if _BUILD_CMDS is already defined, +# it is used as the list of commands to perform to build the package, +# instead of the default WAF behaviour. The package can also define some +# post operation hooks. +# +################################################################################ + +################################################################################ +# inner-waf-package -- defines how the configuration, compilation and +# installation of a waf package should be done, implements a few hooks +# to tune the build process for waf specifities and calls the generic +# package infrastructure to generate the necessary make targets +# +# argument 1 is the lowercase package name +# argument 2 is the uppercase package name, including a HOST_ prefix +# for host packages +# argument 3 is the uppercase package name, without the HOST_ prefix +# for host packages +# argument 4 is the type (target or host) +################################################################################ + +define inner-waf-package + +# We need host-python3 to run waf +$(2)_DEPENDENCIES += host-python3 + +$(2)_NEEDS_EXTERNAL_WAF ?= NO + +# If the package does not have its own waf, use our own. +ifeq ($$($(2)_NEEDS_EXTERNAL_WAF),YES) +$(2)_DEPENDENCIES += host-waf +$(2)_WAF = $$(HOST_DIR)/bin/waf +else +$(2)_WAF ?= ./waf +endif + +$(2)_BUILD_OPTS ?= +$(2)_INSTALL_STAGING_OPTS ?= +$(2)_INSTALL_TARGET_OPTS ?= +$(2)_WAF_OPTS ?= + +# +# Configure step. Only define it if not already defined by the package +# .mk file. +# +ifndef $(2)_CONFIGURE_CMDS +define $(2)_CONFIGURE_CMDS + cd $$($$(PKG)_SRCDIR) && \ + $$(TARGET_CONFIGURE_OPTS) \ + $$($(2)_CONF_ENV) \ + $$(HOST_DIR)/bin/python3 $$($(2)_WAF) configure \ + --prefix=/usr \ + --libdir=/usr/lib \ + $$($(2)_CONF_OPTS) \ + $$($(2)_WAF_OPTS) +endef +endif + +# +# Build step. Only define it if not already defined by the package .mk +# file. +# +ifndef $(2)_BUILD_CMDS +define $(2)_BUILD_CMDS + cd $$($$(PKG)_SRCDIR) && \ + $$(TARGET_MAKE_ENV) $$(HOST_DIR)/bin/python3 $$($(2)_WAF) \ + build -j $$(PARALLEL_JOBS) $$($(2)_BUILD_OPTS) \ + $$($(2)_WAF_OPTS) +endef +endif + +# +# Staging installation step. Only define it if not already defined by +# the package .mk file. +# +ifndef $(2)_INSTALL_STAGING_CMDS +define $(2)_INSTALL_STAGING_CMDS + cd $$($$(PKG)_SRCDIR) && \ + $$(TARGET_MAKE_ENV) $$(HOST_DIR)/bin/python3 $$($(2)_WAF) \ + install --destdir=$$(STAGING_DIR) \ + $$($(2)_INSTALL_STAGING_OPTS) \ + $$($(2)_WAF_OPTS) +endef +endif + +# +# Target installation step. Only define it if not already defined by +# the package .mk file. +# +ifndef $(2)_INSTALL_TARGET_CMDS +define $(2)_INSTALL_TARGET_CMDS + cd $$($$(PKG)_SRCDIR) && \ + $$(TARGET_MAKE_ENV) $$(HOST_DIR)/bin/python3 $$($(2)_WAF) \ + install --destdir=$$(TARGET_DIR) \ + $$($(2)_INSTALL_TARGET_OPTS) \ + $$($(2)_WAF_OPTS) +endef +endif + +# Call the generic package infrastructure to generate the necessary +# make targets +$(call inner-generic-package,$(1),$(2),$(3),$(4)) + +endef + +################################################################################ +# waf-package -- the target generator macro for WAF packages +################################################################################ + +waf-package = $(call inner-waf-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target) diff --git a/package/pkgconf/0001-Only-prefix-with-the-sysroot-a-subset-of-variables.patch b/package/pkgconf/0001-Only-prefix-with-the-sysroot-a-subset-of-variables.patch new file mode 100644 index 00000000..a039d0c1 --- /dev/null +++ b/package/pkgconf/0001-Only-prefix-with-the-sysroot-a-subset-of-variables.patch @@ -0,0 +1,147 @@ +From 267a57022699453e8d8f517519df25ac6bf6ac4e Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sun, 16 Dec 2018 11:52:18 +0100 +Subject: [PATCH] Only prefix with the sysroot a subset of variables + +The standard logic of pkg-config is to prefix all absolute paths by +the sysroot defined in PKG_CONFIG_SYSROOT_DIR. However, while some +paths (like includedir, libdir, and paths used in -L and -I options) +indeed need to be prefixed by the sysroot, it is not necessarily the +case for paths that are used on the target. If they get prefixed by +the sysroot, the runtime path on the target is incorrect. + +Unfortunately, pkg-config doesn't have a sense of which path needs to +be prefixed by the sysroot, and which path should not be prefixed by +the sysroot. + +So, let's simply have a whitelist of paths that should be prefixed: +g_ir_scanner, g_ir_compiler, g_ir_generate, includedir, libdir, mapdir, +pkgdatadir and sdkdir. This list of variables was collected over years of +Buildroot development. All other paths are not prefixed by the sysroot. + +Signed-off-by: Thomas Petazzoni +[Updated to include gobject-introspection paths] +Signed-off-by: Adam Duskett +--- + libpkgconf/tuple.c | 60 ++++++++++++++++++++++++++++++++-------------- + 1 file changed, 42 insertions(+), 18 deletions(-) + +diff --git a/libpkgconf/tuple.c b/libpkgconf/tuple.c +index 8523709..7cd2fff 100644 +--- a/libpkgconf/tuple.c ++++ b/libpkgconf/tuple.c +@@ -161,6 +161,21 @@ dequote(const char *value) + return buf; + } + ++static char * ++pkgconf_tuple_parse_sysroot(const pkgconf_client_t *client, pkgconf_list_t *vars, const char *value, bool add_sysroot); ++ ++const char *sysrooted_keys[] = { ++ "g_ir_scanner", ++ "g_ir_compiler", ++ "g_ir_generate", ++ "includedir", ++ "libdir", ++ "mapdir", ++ "pkgdatadir", ++ "sdkdir", ++ NULL, ++}; ++ + /* + * !doc + * +@@ -181,6 +193,8 @@ pkgconf_tuple_add(const pkgconf_client_t *client, pkgconf_list_t *list, const ch + { + char *dequote_value; + pkgconf_tuple_t *tuple = calloc(sizeof(pkgconf_tuple_t), 1); ++ bool add_sysroot = false; ++ int i; + + pkgconf_tuple_find_delete(list, key); + +@@ -188,9 +202,13 @@ pkgconf_tuple_add(const pkgconf_client_t *client, pkgconf_list_t *list, const ch + + PKGCONF_TRACE(client, "adding tuple to @%p: %s => %s (parsed? %d)", list, key, dequote_value, parse); + ++ for (i = 0; sysrooted_keys[i] != NULL; i++) ++ if (!strcmp(key, sysrooted_keys[i])) ++ add_sysroot = true; ++ + tuple->key = strdup(key); + if (parse) +- tuple->value = pkgconf_tuple_parse(client, list, dequote_value); ++ tuple->value = pkgconf_tuple_parse_sysroot(client, list, dequote_value, add_sysroot); + else + tuple->value = strdup(dequote_value); + +@@ -234,27 +252,14 @@ pkgconf_tuple_find(const pkgconf_client_t *client, pkgconf_list_t *list, const c + return NULL; + } + +-/* +- * !doc +- * +- * .. c:function:: char *pkgconf_tuple_parse(const pkgconf_client_t *client, pkgconf_list_t *vars, const char *value) +- * +- * Parse an expression for variable substitution. +- * +- * :param pkgconf_client_t* client: The pkgconf client object to access. +- * :param pkgconf_list_t* list: The variable list to search for variables (along side the global variable list). +- * :param char* value: The ``key=value`` string to parse. +- * :return: the variable data with any variables substituted +- * :rtype: char * +- */ +-char * +-pkgconf_tuple_parse(const pkgconf_client_t *client, pkgconf_list_t *vars, const char *value) ++static char * ++pkgconf_tuple_parse_sysroot(const pkgconf_client_t *client, pkgconf_list_t *vars, const char *value, bool add_sysroot) + { + char buf[PKGCONF_BUFSIZE]; + const char *ptr; + char *bptr = buf; + +- if (*value == '/' && client->sysroot_dir != NULL && strncmp(value, client->sysroot_dir, strlen(client->sysroot_dir))) ++ if (add_sysroot && *value == '/' && client->sysroot_dir != NULL && strncmp(value, client->sysroot_dir, strlen(client->sysroot_dir))) + bptr += pkgconf_strlcpy(buf, client->sysroot_dir, sizeof buf); + + for (ptr = value; *ptr != '\0' && bptr - buf < PKGCONF_BUFSIZE; ptr++) +@@ -294,7 +299,7 @@ pkgconf_tuple_parse(const pkgconf_client_t *client, pkgconf_list_t *vars, const + + if (kv != NULL) + { +- parsekv = pkgconf_tuple_parse(client, vars, kv); ++ parsekv = pkgconf_tuple_parse_sysroot(client, vars, kv, add_sysroot); + + strncpy(bptr, parsekv, PKGCONF_BUFSIZE - (bptr - buf)); + bptr += strlen(parsekv); +@@ -339,6 +344,25 @@ pkgconf_tuple_parse(const pkgconf_client_t *client, pkgconf_list_t *vars, const + return strdup(buf); + } + ++/* ++ * !doc ++ * ++ * .. c:function:: char *pkgconf_tuple_parse(const pkgconf_client_t *client, pkgconf_list_t *vars, const char *value) ++ * ++ * Parse an expression for variable substitution. ++ * ++ * :param pkgconf_client_t* client: The pkgconf client object to access. ++ * :param pkgconf_list_t* list: The variable list to search for variables (along side the global variable list). ++ * :param char* value: The ``key=value`` string to parse. ++ * :return: the variable data with any variables substituted ++ * :rtype: char * ++ */ ++char * ++pkgconf_tuple_parse(const pkgconf_client_t *client, pkgconf_list_t *vars, const char *value) ++{ ++ return pkgconf_tuple_parse_sysroot(client, vars, value, true); ++} ++ + /* + * !doc + * +-- +2.19.2 + diff --git a/package/pkgconf/0002-Revert-main-assume-modversion-insted-of-version-if-o.patch b/package/pkgconf/0002-Revert-main-assume-modversion-insted-of-version-if-o.patch new file mode 100644 index 00000000..f659a3b0 --- /dev/null +++ b/package/pkgconf/0002-Revert-main-assume-modversion-insted-of-version-if-o.patch @@ -0,0 +1,45 @@ +From 4ccef40918a539905a2951bfb81cf8dba4a245c6 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 2 Jan 2019 18:15:50 +0100 +Subject: [PATCH] Revert "main: assume --modversion insted of --version if + other flags or module names are provided" + +This reverts commit 12a0eb124cea85586e57f33c91a1e4c73459eef6, as it +causes pkg-config to assume --modversion is used when something as +simple as 'pkg-config --static --version' is used, leading to a +failure instead of the expected behavior: the one of "pkg-config +--version". + +Signed-off-by: Thomas Petazzoni +--- + cli/main.c | 14 ++------------ + 1 file changed, 2 insertions(+), 12 deletions(-) + +diff --git a/cli/main.c b/cli/main.c +index b52cc85..c5acc10 100644 +--- a/cli/main.c ++++ b/cli/main.c +@@ -1002,18 +1002,8 @@ main(int argc, char *argv[]) + + if ((want_flags & PKG_VERSION) == PKG_VERSION) + { +- if (argc > 2) +- { +- fprintf(stderr, "%s: --version specified with other options or module names, assuming --modversion.\n", argv[0]); +- +- want_flags &= ~PKG_VERSION; +- want_flags |= PKG_MODVERSION; +- } +- else +- { +- version(); +- return EXIT_SUCCESS; +- } ++ version(); ++ return EXIT_SUCCESS; + } + + if ((want_flags & PKG_HELP) == PKG_HELP) +-- +2.20.1 + diff --git a/package/pkgconf/Config.in b/package/pkgconf/Config.in new file mode 100644 index 00000000..a9c5658d --- /dev/null +++ b/package/pkgconf/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PKGCONF + bool "pkgconf" + help + pkgconf is a program which helps to configure compiler and + linker flags for development frameworks. It is similar to + pkg-config, but was written from scratch in the summer of + 2011 to replace pkg-config, which now needs itself to build + itself + + http://pkgconf.org/ diff --git a/package/pkgconf/Config.in.host b/package/pkgconf/Config.in.host new file mode 100644 index 00000000..56836a5c --- /dev/null +++ b/package/pkgconf/Config.in.host @@ -0,0 +1,10 @@ +config BR2_PACKAGE_HOST_PKGCONF + bool "host pkgconf" + help + pkgconf is a program which helps to configure compiler and + linker flags for development frameworks. It is similar to + pkg-config, but was written from scratch in the summer of + 2011 to replace pkg-config, which now needs itself to build + itself + + https://github.com/pkgconf/pkgconf diff --git a/package/pkgconf/pkg-config.in b/package/pkgconf/pkg-config.in new file mode 100644 index 00000000..e5a23a10 --- /dev/null +++ b/package/pkgconf/pkg-config.in @@ -0,0 +1,12 @@ +#!/bin/sh +PKGCONFDIR=$(dirname $0) +DEFAULT_PKG_CONFIG_LIBDIR=${PKGCONFDIR}/../@STAGING_SUBDIR@/usr/lib/pkgconfig:${PKGCONFDIR}/../@STAGING_SUBDIR@/usr/share/pkgconfig +DEFAULT_PKG_CONFIG_SYSROOT_DIR=${PKGCONFDIR}/../@STAGING_SUBDIR@ +DEFAULT_PKG_CONFIG_SYSTEM_INCLUDE_PATH=${PKGCONFDIR}/../@STAGING_SUBDIR@/usr/include +DEFAULT_PKG_CONFIG_SYSTEM_LIBRARY_PATH=${PKGCONFDIR}/../@STAGING_SUBDIR@/usr/lib + +PKG_CONFIG_LIBDIR=${PKG_CONFIG_LIBDIR:-${DEFAULT_PKG_CONFIG_LIBDIR}} \ + PKG_CONFIG_SYSROOT_DIR=${PKG_CONFIG_SYSROOT_DIR:-${DEFAULT_PKG_CONFIG_SYSROOT_DIR}} \ + PKG_CONFIG_SYSTEM_INCLUDE_PATH=${PKG_CONFIG_SYSTEM_INCLUDE_PATH:-${DEFAULT_PKG_CONFIG_SYSTEM_INCLUDE_PATH}} \ + PKG_CONFIG_SYSTEM_LIBRARY_PATH=${PKG_CONFIG_SYSTEM_LIBRARY_PATH:-${DEFAULT_PKG_CONFIG_SYSTEM_LIBRARY_PATH}} \ + exec ${PKGCONFDIR}/pkgconf --keep-system-libs @STATIC@ "$@" diff --git a/package/pkgconf/pkgconf.hash b/package/pkgconf/pkgconf.hash new file mode 100644 index 00000000..f210869c --- /dev/null +++ b/package/pkgconf/pkgconf.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 61f0b31b0d5ea0e862b454a80c170f57bad47879c0c42bd8de89200ff62ea210 pkgconf-1.6.3.tar.xz +sha256 07ee94b50a41ee3fc4e13a9b9c60b26fc28488494c465639f7e5f07a3952ec04 COPYING diff --git a/package/pkgconf/pkgconf.mk b/package/pkgconf/pkgconf.mk new file mode 100644 index 00000000..5d65f69c --- /dev/null +++ b/package/pkgconf/pkgconf.mk @@ -0,0 +1,45 @@ +################################################################################ +# +# pkgconf +# +################################################################################ + +PKGCONF_VERSION = 1.6.3 +PKGCONF_SITE = https://distfiles.dereferenced.org/pkgconf +PKGCONF_SOURCE = pkgconf-$(PKGCONF_VERSION).tar.xz +PKGCONF_LICENSE = pkgconf license +PKGCONF_LICENSE_FILES = COPYING +PKGCONF_CPE_ID_VENDOR = pkgconf + +PKG_CONFIG_HOST_BINARY = $(HOST_DIR)/bin/pkg-config + +define PKGCONF_LINK_PKGCONFIG + ln -sf pkgconf $(TARGET_DIR)/usr/bin/pkg-config +endef + +define HOST_PKGCONF_INSTALL_WRAPPER + $(INSTALL) -m 0755 -D package/pkgconf/pkg-config.in \ + $(HOST_DIR)/bin/pkg-config + $(SED) 's,@STAGING_SUBDIR@,$(STAGING_SUBDIR),g' \ + $(HOST_DIR)/bin/pkg-config +endef + +define HOST_PKGCONF_STATIC + $(SED) 's,@STATIC@,--static,' $(HOST_DIR)/bin/pkg-config +endef + +define HOST_PKGCONF_SHARED + $(SED) 's,@STATIC@,,' $(HOST_DIR)/bin/pkg-config +endef + +PKGCONF_POST_INSTALL_TARGET_HOOKS += PKGCONF_LINK_PKGCONFIG +HOST_PKGCONF_POST_INSTALL_HOOKS += HOST_PKGCONF_INSTALL_WRAPPER + +ifeq ($(BR2_STATIC_LIBS),y) +HOST_PKGCONF_POST_INSTALL_HOOKS += HOST_PKGCONF_STATIC +else +HOST_PKGCONF_POST_INSTALL_HOOKS += HOST_PKGCONF_SHARED +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/ply/0001-configure.ac-fix-error-with-version-string.patch b/package/ply/0001-configure.ac-fix-error-with-version-string.patch new file mode 100644 index 00000000..e80599c6 --- /dev/null +++ b/package/ply/0001-configure.ac-fix-error-with-version-string.patch @@ -0,0 +1,29 @@ +From 684bae6043fa2242a5c6551c3f260c9db0cf7dc8 Mon Sep 17 00:00:00 2001 +From: Andreas Klinger +Date: Mon, 4 Jan 2021 08:40:50 +0100 +Subject: [PATCH] configure.ac: fix error with version string + +When autoreconfiguring there's an error: "configure.ac:6: error: AC_INIT +should be called with package and version arguments". + +Put version string in square brackets to satisfy autoconfigure. + +Signed-off-by: Andreas Klinger +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 65387d6..7a0054e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1,5 +1,5 @@ + AC_PREREQ(2.61) +-AC_INIT(ply, m4_esyscmd_s(git describe --always --dirty), ++AC_INIT(ply, [2.1.1], + https://github.com/wkz/ply/issues) + + AC_GNU_SOURCE +-- +2.20.1 + diff --git a/package/ply/0002-printxf.h-add-stdarg.h-in-include.patch b/package/ply/0002-printxf.h-add-stdarg.h-in-include.patch new file mode 100644 index 00000000..f56e9a8e --- /dev/null +++ b/package/ply/0002-printxf.h-add-stdarg.h-in-include.patch @@ -0,0 +1,27 @@ +From 3fb3cb779c535ec28cbba80573bbea42435108c0 Mon Sep 17 00:00:00 2001 +From: Andreas Klinger +Date: Mon, 4 Jan 2021 20:48:41 +0100 +Subject: [PATCH] printxf.h: add stdarg.h in include + +Include of is needed for va_list. + +Signed-off-by: Andreas Klinger +--- + include/ply/printxf.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/include/ply/printxf.h b/include/ply/printxf.h +index a59f0d2..e985936 100644 +--- a/include/ply/printxf.h ++++ b/include/ply/printxf.h +@@ -8,6 +8,7 @@ + #define _PRINTXF_H + + #include ++#include + + struct printxf; + +-- +2.20.1 + diff --git a/package/ply/Config.in b/package/ply/Config.in new file mode 100644 index 00000000..0500e788 --- /dev/null +++ b/package/ply/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_PLY_ARCH_SUPPORTS + bool + default y if BR2_aarch64 + default y if BR2_arm + default y if BR2_powerpc + default y if BR2_x86_64 + +comment "ply needs a toolchain w/ dynamic library, headers >= 4.14" + depends on BR2_PACKAGE_PLY_ARCH_SUPPORTS + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_14 || BR2_STATIC_LIBS + +config BR2_PACKAGE_PLY + bool "ply" + depends on BR2_PACKAGE_PLY_ARCH_SUPPORTS + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_14 # BPF_JLT + depends on !BR2_STATIC_LIBS + help + ply is a light-weight dynamic tracer for Linux. By means of + using the BPF it can attach probes to the linux kernel + (e. g. kprobes). + + It's a small alternative to LLVM based tracers for embedded + systems. + + When using debugfs needs to be mounted on /sys/kernel/debug. + + https://wkz.github.io/ply/ diff --git a/package/ply/ply.hash b/package/ply/ply.hash new file mode 100644 index 00000000..0ee2709b --- /dev/null +++ b/package/ply/ply.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 cecf0913c65027750ac3272e936110c9f843435938f9ca2edbc34e99ba6c00e2 ply-2.1.1.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/ply/ply.mk b/package/ply/ply.mk new file mode 100644 index 00000000..b72b29f3 --- /dev/null +++ b/package/ply/ply.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# ply +# +################################################################################ + +PLY_VERSION = 2.1.1 +PLY_SITE = $(call github,wkz,ply,$(PLY_VERSION)) +PLY_AUTORECONF = YES +PLY_LICENSE = GPL-2.0 +PLY_LICENSE_FILES = COPYING +PLY_INSTALL_STAGING = YES +PLY_DEPENDENCIES = host-flex host-bison + +$(eval $(autotools-package)) diff --git a/package/pngquant/Config.in b/package/pngquant/Config.in new file mode 100644 index 00000000..5fc93f60 --- /dev/null +++ b/package/pngquant/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PNGQUANT + bool "pngquant" + select BR2_PACKAGE_LIBPNG + select BR2_PACKAGE_ZLIB + help + Lossy PNG compressor - pngquant command and libimagequant + library + + https://pngquant.org diff --git a/package/pngquant/pngquant.hash b/package/pngquant/pngquant.hash new file mode 100644 index 00000000..c7332167 --- /dev/null +++ b/package/pngquant/pngquant.hash @@ -0,0 +1,4 @@ +# From https://pngquant.org/releases.html +sha256 4b911a11aa0c35d364b608c917d13002126185c8c314ba4aa706b62fd6a95a7a pngquant-2.13.1-src.tar.gz +# Locally computed +sha256 e4f467f7abf860b4e620f5f60fdd88bc3a63a0fdb98a481fb002b5e511c9b826 COPYRIGHT diff --git a/package/pngquant/pngquant.mk b/package/pngquant/pngquant.mk new file mode 100644 index 00000000..1729ff19 --- /dev/null +++ b/package/pngquant/pngquant.mk @@ -0,0 +1,56 @@ +################################################################################ +# +# pngquant +# +################################################################################ + +PNGQUANT_VERSION = 2.13.1 +PNGQUANT_SOURCE = pngquant-$(PNGQUANT_VERSION)-src.tar.gz +PNGQUANT_SITE = https://pngquant.org +PNGQUANT_LICENSE = GPL-3.0+ +PNGQUANT_LICENSE_FILES = COPYRIGHT +PNGQUANT_CPE_ID_VENDOR = pngquant +HOST_PNGQUANT_DEPENDENCIES = host-libpng +PNGQUANT_DEPENDENCIES = libpng + +ifeq ($(BR2_PACKAGE_LCMS2),y) +PNGQUANT_DEPENDENCIES += lcms2 +endif + +define PNGQUANT_CONFIGURE_CMDS + (cd $(@D) && \ + $(TARGET_CONFIGURE_OPTS) \ + ./configure --prefix=/usr \ + $(if $(BR2_PACKAGE_LCMS2),--with-lcms2,--without-lcms2) \ + $(if $(BR2_X86_CPU_HAS_SSE),--enable-sse,--disable-sse) \ + $(TARGET_CONFIGURE_OPTS) \ + ) +endef + +define PNGQUANT_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define PNGQUANT_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) DESTDIR="$(TARGET_DIR)" -C $(@D) install +endef + +define HOST_PNGQUANT_CONFIGURE_CMDS + (cd $(@D) && \ + $(HOST_CONFIGURE_OPTS) \ + CC=$(HOSTCC_NOCCACHE) \ + ./configure --prefix=$(HOST_DIR) \ + --without-lcms2 \ + ) +endef + +define HOST_PNGQUANT_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define HOST_PNGQUANT_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) install +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/poco/0001-poco-add-the-staging-path-to-search-path.patch b/package/poco/0001-poco-add-the-staging-path-to-search-path.patch new file mode 100644 index 00000000..fbabfc8f --- /dev/null +++ b/package/poco/0001-poco-add-the-staging-path-to-search-path.patch @@ -0,0 +1,40 @@ +From a53f3fd64a0f36ec9bc1307d7e66cdc2dee4aeaa Mon Sep 17 00:00:00 2001 +From: Baruch Siach +Date: Tue, 4 Aug 2015 10:14:00 +0200 +Subject: [PATCH] poco: add the staging path to search path +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add the mysql headers and client libraries to the search path of the +preprocessor and the linker. The $MYSQL_LIBDIR / $MYSQL_INCIDR variables +must be set from the make command line. + +[Peter: Remove host dirs, add MYSQL_INCDIR] +Signed-off-by: Baruch Siach +[Jörg: Update to version 1.6.1 from github] +Signed-off-by: Jörg Krause +[Julien: Rebased on version 1.10.1] +Signed-off-by: Julien Olivain +--- + Data/MySQL/Makefile | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Data/MySQL/Makefile b/Data/MySQL/Makefile +index 64a7d3f82..955fee2d4 100644 +--- a/Data/MySQL/Makefile ++++ b/Data/MySQL/Makefile +@@ -6,8 +6,8 @@ + + include $(POCO_BASE)/build/rules/global + +-SYSLIBS += -L/usr/local/lib -L/usr/local/lib$(LIB64SUFFIX)/mysql -L/usr/lib$(LIB64SUFFIX)/mysql -L/usr/mysql/lib$(LIB64SUFFIX) -L/usr/mysql/lib$(LIB64SUFFIX)/mysql -L/usr/local/mysql/lib$(LIB64SUFFIX) -lmysqlclient +-INCLUDE += -I/usr/local/include/mysql/ -I/usr/include/mysql/ -I/usr/mysql/include/mysql -I/usr/local/mysql/include ++SYSLIBS += -L$(MYSQL_LIBDIR) -lmysqlclient ++INCLUDE += -I$(MYSQL_INCDIR) + SYSFLAGS += -DTHREADSAFE -DNO_TCL + + objects = Binder Extractor SessionImpl Connector \ +-- +2.26.2 + diff --git a/package/poco/0002-Add-support-for-m68000-1856.patch b/package/poco/0002-Add-support-for-m68000-1856.patch new file mode 100644 index 00000000..bc04a9bf --- /dev/null +++ b/package/poco/0002-Add-support-for-m68000-1856.patch @@ -0,0 +1,32 @@ +From 221e308ad452035f4c1dc25e194f817a30f38f7b Mon Sep 17 00:00:00 2001 +From: Jochen Sprickerhof +Date: Wed, 23 Aug 2017 16:50:51 +0200 +Subject: [PATCH] Add support for m68000 (#1856) + +Originally taken from + +https://github.com/google/double-conversion/commit/da11179623145f53b204105a93b8bbca431141da + +Signed-off-by: Thomas Petazzoni +[Julien: rebased on version 1.10.1] +Signed-off-by: Julien Olivain +--- + Foundation/src/utils.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/Foundation/src/utils.h b/Foundation/src/utils.h +index c87cee13c..e891c0f10 100644 +--- a/Foundation/src/utils.h ++++ b/Foundation/src/utils.h +@@ -66,6 +66,8 @@ + defined(__AARCH64EL__) || \ + defined(nios2) || defined(__nios2) || defined(__nios2__) + #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 ++#elif defined(__mc68000__) ++#undef DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS + #elif defined(_M_IX86) || defined(__i386__) || defined(__i386) + #if defined(_WIN32) + // Windows uses a 64bit wide floating point stack. +-- +2.26.2 + diff --git a/package/poco/0003-Foundation-src-utils.h-backport-double-conversion-ch.patch b/package/poco/0003-Foundation-src-utils.h-backport-double-conversion-ch.patch new file mode 100644 index 00000000..c06eebe8 --- /dev/null +++ b/package/poco/0003-Foundation-src-utils.h-backport-double-conversion-ch.patch @@ -0,0 +1,34 @@ +From fe7d230da03a35725ef768c07ce064324f941863 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sun, 1 Jul 2018 15:37:47 +0200 +Subject: [PATCH] Foundation/src/utils.h: backport double-conversion change for + AArch64 BE support + +This commit, identical to upstream double-conversion commit +https://github.com/google/double-conversion/commit/cb2beeb6771025377c665d1c3ea08388bc6e619a +allows Poco to build on AArch64 big-endian. + +Signed-off-by: Thomas Petazzoni +Upstream: https://github.com/pocoproject/poco/pull/2378 +[Julien: rebased on version 1.10.1] +Signed-off-by: Julien Olivain +--- + Foundation/src/utils.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Foundation/src/utils.h b/Foundation/src/utils.h +index e891c0f10..892f7db18 100644 +--- a/Foundation/src/utils.h ++++ b/Foundation/src/utils.h +@@ -63,7 +63,7 @@ + defined(__SH4__) || defined(__alpha__) || \ + defined(_MIPS_ARCH_MIPS32R2) || \ + defined(__riscv) || \ +- defined(__AARCH64EL__) || \ ++ defined(__AARCH64EL__) || defined(__aarch64__) || \ + defined(nios2) || defined(__nios2) || defined(__nios2__) + #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 + #elif defined(__mc68000__) +-- +2.26.2 + diff --git a/package/poco/Config.in b/package/poco/Config.in new file mode 100644 index 00000000..24514a37 --- /dev/null +++ b/package/poco/Config.in @@ -0,0 +1,104 @@ +config BR2_PACKAGE_POCO_ARCH_SUPPORTS + bool + default y + depends on !BR2_arc + depends on !BR2_microblaze + depends on !BR2_mipsel + depends on !BR2_or1k + depends on !BR2_RISCV_32 + depends on !BR2_xtensa + +config BR2_PACKAGE_POCO + bool "poco" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5 # C++14 + # pthread_condattr_setclock + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on !BR2_STATIC_LIBS # dlopen() + depends on BR2_PACKAGE_POCO_ARCH_SUPPORTS + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_PCRE + help + The C++ Portable Components Libraries + + http://pocoproject.org + +if BR2_PACKAGE_POCO + +comment "poco components" + +config BR2_PACKAGE_POCO_JSON + bool "json" + +config BR2_PACKAGE_POCO_XML + bool "xml" + select BR2_PACKAGE_EXPAT + +config BR2_PACKAGE_POCO_UTIL + bool "util" + select BR2_PACKAGE_POCO_XML + +config BR2_PACKAGE_POCO_NET + bool "net" + +config BR2_PACKAGE_POCO_CRYPTO + bool "crypto" + select BR2_PACKAGE_OPENSSL + +config BR2_PACKAGE_POCO_NETSSL_OPENSSL + bool "netssl_openssl" + select BR2_PACKAGE_POCO_NET + select BR2_PACKAGE_POCO_CRYPTO + select BR2_PACKAGE_POCO_UTIL + select BR2_PACKAGE_OPENSSL + +config BR2_PACKAGE_POCO_ZIP + bool "zip" + select BR2_PACKAGE_POCO_XML + select BR2_PACKAGE_POCO_NET + select BR2_PACKAGE_POCO_UTIL + +config BR2_PACKAGE_POCO_CPP_PARSER + bool "cpp_parser" + +config BR2_PACKAGE_POCO_PDF + bool "pdf" + select BR2_PACKAGE_POCO_JSON + select BR2_PACKAGE_POCO_UTIL + select BR2_PACKAGE_POCO_XML + +config BR2_PACKAGE_POCO_REDIS + bool "redis" + select BR2_PACKAGE_POCO_NET + +config BR2_PACKAGE_POCO_MONGODB + bool "mongodb" + select BR2_PACKAGE_POCO_NET + +config BR2_PACKAGE_POCO_DATA + bool + +config BR2_PACKAGE_POCO_DATA_SQLITE + bool "sqlite" + select BR2_PACKAGE_POCO_DATA + select BR2_PACKAGE_SQLITE + +config BR2_PACKAGE_POCO_DATA_MYSQL + bool "mysql" + depends on BR2_USE_MMU # mysql + select BR2_PACKAGE_POCO_DATA + select BR2_PACKAGE_MYSQL + +config BR2_PACKAGE_POCO_JWT + bool "jwt" + select BR2_PACKAGE_POCO_JSON + select BR2_PACKAGE_POCO_CRYPTO + +endif # BR2_PACKAGE_POCO + +comment "poco needs a toolchain w/ wchar, NPTL, C++, dynamic library, gcc >= 5 w/ C++14" + depends on !BR2_USE_WCHAR || !BR2_INSTALL_LIBSTDCPP \ + || !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIBS \ + || !BR2_TOOLCHAIN_GCC_AT_LEAST_5 + depends on BR2_PACKAGE_POCO_ARCH_SUPPORTS diff --git a/package/poco/poco.hash b/package/poco/poco.hash new file mode 100644 index 00000000..2a262973 --- /dev/null +++ b/package/poco/poco.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 44592a488d2830c0b4f3bfe4ae41f0c46abbfad49828d938714444e858a00818 poco-1.10.1.tar.gz +sha256 c4b1e1e5f36d8331737231fefcc30f5714326aec7c387ad59a8115eb0ba7d6b5 LICENSE diff --git a/package/poco/poco.mk b/package/poco/poco.mk new file mode 100644 index 00000000..857f215e --- /dev/null +++ b/package/poco/poco.mk @@ -0,0 +1,90 @@ +################################################################################ +# +# poco +# +################################################################################ + +POCO_VERSION = 1.10.1 +POCO_SITE = $(call github,pocoproject,poco,poco-$(POCO_VERSION)-release) +POCO_LICENSE = BSL-1.0 +POCO_LICENSE_FILES = LICENSE +POCO_CPE_ID_VENDOR = pocoproject +POCO_INSTALL_STAGING = YES + +POCO_DEPENDENCIES = zlib pcre \ + $(if $(BR2_PACKAGE_POCO_XML),expat) \ + $(if $(BR2_PACKAGE_POCO_CRYPTO),openssl) \ + $(if $(BR2_PACKAGE_POCO_NETSSL_OPENSSL),openssl) \ + $(if $(BR2_PACKAGE_POCO_DATA_SQLITE),sqlite) \ + $(if $(BR2_PACKAGE_POCO_DATA_MYSQL),mysql) + +POCO_OMIT = Data/ODBC PageCompiler \ + $(if $(BR2_PACKAGE_POCO_JSON),,JSON) \ + $(if $(BR2_PACKAGE_POCO_XML),,XML) \ + $(if $(BR2_PACKAGE_POCO_UTIL),,Util) \ + $(if $(BR2_PACKAGE_POCO_NET),,Net) \ + $(if $(BR2_PACKAGE_POCO_NETSSL_OPENSSL),,NetSSL_OpenSSL) \ + $(if $(BR2_PACKAGE_POCO_CRYPTO),,Crypto) \ + $(if $(BR2_PACKAGE_POCO_ZIP),,Zip) \ + $(if $(BR2_PACKAGE_POCO_CPP_PARSER),,CppParser) \ + $(if $(BR2_PACKAGE_POCO_PDF),,PDF) \ + $(if $(BR2_PACKAGE_POCO_REDIS),,Redis) \ + $(if $(BR2_PACKAGE_POCO_MONGODB),,MongoDB) \ + $(if $(BR2_PACKAGE_POCO_DATA),,Data) \ + $(if $(BR2_PACKAGE_POCO_DATA_MYSQL),,Data/MySQL) \ + $(if $(BR2_PACKAGE_POCO_DATA_SQLITE),,Data/SQLite) \ + $(if $(BR2_PACKAGE_POCO_JWT),,JWT) + +ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y) +POCO_CONF_OPTS += --no-fpenvironment --no-wstring +endif + +# architectures missing some FE_* in their fenv.h +ifeq ($(BR2_sh4a)$(BR2_nios2),y) +POCO_CONF_OPTS += --no-fpenvironment +endif + +# disable fpenvironment for soft floating point configuration +ifeq ($(BR2_SOFT_FLOAT),y) +POCO_CONF_OPTS += --no-fpenvironment +endif + +ifeq ($(BR2_STATIC_LIBS),y) +POCO_MAKE_TARGET = static_release +else ifeq ($(BR2_SHARED_LIBS),y) +POCO_MAKE_TARGET = shared_release +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +POCO_MAKE_TARGET = all_release +endif + +define POCO_CONFIGURE_CMDS + (cd $(@D); $(TARGET_MAKE_ENV) ./configure \ + --config=Linux \ + --prefix=/usr \ + --cflags=-std=c++14 \ + --omit="$(POCO_OMIT)" \ + $(POCO_CONF_OPTS) \ + --unbundled \ + --no-tests \ + --no-samples) +endef + +# Use $(MAKE1) to avoid failures on heavilly parallel machines (e.g. -j25) +define POCO_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE1) POCO_TARGET_OSARCH=$(ARCH) CROSS_COMPILE=$(TARGET_CROSS) \ + MYSQL_LIBDIR=$(STAGING_DIR)/usr/lib/mysql \ + MYSQL_INCDIR=$(STAGING_DIR)/usr/include/mysql \ + DEFAULT_TARGET=$(POCO_MAKE_TARGET) -C $(@D) +endef + +define POCO_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) DESTDIR=$(STAGING_DIR) POCO_TARGET_OSARCH=$(ARCH) \ + DEFAULT_TARGET=$(POCO_MAKE_TARGET) install -C $(@D) +endef + +define POCO_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) DESTDIR=$(TARGET_DIR) POCO_TARGET_OSARCH=$(ARCH) \ + DEFAULT_TARGET=$(POCO_MAKE_TARGET) install -C $(@D) +endef + +$(eval $(generic-package)) diff --git a/package/policycoreutils/0001-Add-DESTDIR-to-all-paths-that-use-an-absolute-path.patch b/package/policycoreutils/0001-Add-DESTDIR-to-all-paths-that-use-an-absolute-path.patch new file mode 100644 index 00000000..57833d81 --- /dev/null +++ b/package/policycoreutils/0001-Add-DESTDIR-to-all-paths-that-use-an-absolute-path.patch @@ -0,0 +1,37 @@ +From 85763549c53b2907dab094163f1404b2233f8029 Mon Sep 17 00:00:00 2001 +From: Adam Duskett +Date: Mon, 9 Oct 2017 16:51:20 -0400 +Subject: [PATCH] Add DESTDIR to setfiles + +The addition of this patch makes the use of DESTDIR +mandatory as there are conditional checks which would fail if it's not +defined. + +This patch was updated from the patch provided by Niranjan Reddy to +accomodate version 2.5 + +Signed-off-by: Clayton Shotwell +Signed-off-by: Niranjan Reddy +Signed-off-by: Adam Duskett +Signed-off-by: Fabrice Fontaine +[Update for 2.8] +--- + setfiles/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/setfiles/Makefile b/setfiles/Makefile +index c08e2dd..36c0638 100644 +--- a/setfiles/Makefile ++++ b/setfiles/Makefile +@@ -3,7 +3,7 @@ PREFIX ?= $(DESTDIR)/usr + PREFIX ?= /usr + SBINDIR ?= /sbin + MANDIR = $(PREFIX)/share/man +-AUDITH ?= $(shell test -f /usr/include/libaudit.h && echo y) ++AUDITH ?= $(shell test -f $(DESTDIR)$(PREFIX)/include/libaudit.h && echo y) + + ABORT_ON_ERRORS=$(shell grep "^\#define ABORT_ON_ERRORS" setfiles.c | awk -S '{ print $$3 }') + +-- +2.13.6 + diff --git a/package/policycoreutils/0002-Add-PREFIX-to-host-paths.patch b/package/policycoreutils/0002-Add-PREFIX-to-host-paths.patch new file mode 100644 index 00000000..ffe5fcbd --- /dev/null +++ b/package/policycoreutils/0002-Add-PREFIX-to-host-paths.patch @@ -0,0 +1,56 @@ +From a221304344b3f9db7e86d928cf97d77542bcf456 Mon Sep 17 00:00:00 2001 +From: Adam Duskett +Date: Mon, 9 Oct 2017 16:47:19 -0400 +Subject: [PATCH] Add PREFIX to host paths + +Updates the remaining hardcoded host paths used in the build to be +prefixed with a PREFIX path to allow cross compilation. + +Updated to work with version 2.5 + +Signed-off-by: Clayton Shotwell +Signed-off-by: Niranjan Reddy +Signed-off-by: Adam Duskett +Signed-off-by: Fabrice Fontaine +[Update for 2.8] +--- + load_policy/Makefile | 2 +- + newrole/Makefile | 6 +++--- + run_init/Makefile | 6 +++--- + 3 files changed, 7 insertions(+), 7 deletions(-) + +diff --git a/newrole/Makefile b/newrole/Makefile +index 196af92..896708f 100644 +--- a/newrole/Makefile ++++ b/newrole/Makefile +@@ -3,9 +3,9 @@ PREFIX ?= $(DESTDIR)/usr + BINDIR ?= $(PREFIX)/bin + MANDIR ?= $(PREFIX)/share/man + ETCDIR ?= /etc + LOCALEDIR = $(DESTDIR)$(PREFIX)/share/locale +-PAMH ?= $(shell test -f /usr/include/security/pam_appl.h && echo y) +-AUDITH ?= $(shell test -f /usr/include/libaudit.h && echo y) ++PAMH ?= $(shell test -f $(DESTDIR)$(PREFIX)/include/security/pam_appl.h && echo y) ++AUDITH ?= $(shell test -f $(DESTDIR)$(PREFIX)/include/libaudit.h && echo y) + # Enable capabilities to permit newrole to generate audit records. + # This will make newrole a setuid root program. + # The capabilities used are: CAP_AUDIT_WRITE. +diff --git a/run_init/Makefile b/run_init/Makefile +index 921f0b0..e1566fc 100644 +--- a/run_init/Makefile ++++ b/run_init/Makefile +@@ -4,9 +4,9 @@ PREFIX ?= $(DESTDIR)/usr + SBINDIR ?= $(PREFIX)/sbin + MANDIR ?= $(PREFIX)/share/man + ETCDIR ?= /etc + LOCALEDIR ?= $(DESTDIR)$(PREFIX)/share/locale +-PAMH ?= $(shell test -f /usr/include/security/pam_appl.h && echo y) +-AUDITH ?= $(shell test -f /usr/include/libaudit.h && echo y) ++PAMH ?= $(shell test -f $(DESTDIR)$(PREFIX)/include/security/pam_appl.h && echo y) ++AUDITH ?= $(shell test -f $(DESTDIR)$(PREFIX)/include/libaudit.h && echo y) + + CFLAGS ?= -Werror -Wall -W + override CFLAGS += -DUSE_NLS -DLOCALEDIR="\"$(LOCALEDIR)\"" -DPACKAGE="\"policycoreutils\"" +-- +2.13.6 + diff --git a/package/policycoreutils/Config.in b/package/policycoreutils/Config.in new file mode 100644 index 00000000..81900b4e --- /dev/null +++ b/package/policycoreutils/Config.in @@ -0,0 +1,34 @@ +comment "policycoreutils needs a toolchain w/ threads, dynamic library" + depends on BR2_PACKAGE_AUDIT_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS + +config BR2_PACKAGE_POLICYCOREUTILS + bool "policycoreutils" + depends on BR2_PACKAGE_AUDIT_ARCH_SUPPORTS # libsemanage + depends on BR2_TOOLCHAIN_HAS_THREADS # libsemanage + depends on !BR2_STATIC_LIBS #libsemanage + select BR2_PACKAGE_LIBSEMANAGE + select BR2_PACKAGE_LIBCAP_NG + help + Policycoreutils is a collection of policy utilities + (originally the "core" set of utilities needed to use + SELinux, although it has grown a bit over time), which have + different dependencies. sestatus, secon, run_init, and + newrole only use libselinux. load_policy and setfiles only + use libselinux and libsepol. semodule and semanage use + libsemanage (and thus bring in dependencies on libsepol and + libselinux as well). setsebool uses libselinux to make + non-persistent boolean changes (via the kernel interface) + and uses libsemanage to make persistent boolean changes. + + The base package will install the following utilities: + load_policy + newrole + run_init + secon + semodule + sestatus + setfiles + setsebool + + http://selinuxproject.org/page/Main_Page diff --git a/package/policycoreutils/policycoreutils.hash b/package/policycoreutils/policycoreutils.hash new file mode 100644 index 00000000..5dae18f1 --- /dev/null +++ b/package/policycoreutils/policycoreutils.hash @@ -0,0 +1,3 @@ +# https://github.com/SELinuxProject/selinux/wiki/Releases +sha256 c889f62ee80f8b6a369469a9b8af51f5b797975aeaa291f5c5960cc12eed1934 policycoreutils-3.1.tar.gz +sha256 204d8eff92f95aac4df6c8122bc1505f468f3a901e5a4cc08940e0ede1938994 COPYING diff --git a/package/policycoreutils/policycoreutils.mk b/package/policycoreutils/policycoreutils.mk new file mode 100644 index 00000000..0dfdc7af --- /dev/null +++ b/package/policycoreutils/policycoreutils.mk @@ -0,0 +1,97 @@ +################################################################################ +# +# policycoreutils +# +################################################################################ + +POLICYCOREUTILS_VERSION = 3.1 +POLICYCOREUTILS_SITE = https://github.com/SELinuxProject/selinux/releases/download/20200710 +POLICYCOREUTILS_LICENSE = GPL-2.0 +POLICYCOREUTILS_LICENSE_FILES = COPYING +POLICYCOREUTILS_CPE_ID_VENDOR = selinuxproject + +POLICYCOREUTILS_DEPENDENCIES = libsemanage libcap-ng $(TARGET_NLS_DEPENDENCIES) +POLICYCOREUTILS_MAKE_OPTS = LDLIBS=$(TARGET_NLS_LIBS) + +ifeq ($(BR2_PACKAGE_LINUX_PAM),y) +POLICYCOREUTILS_DEPENDENCIES += linux-pam +POLICYCOREUTILS_MAKE_OPTS += NAMESPACE_PRIV=y +define POLICYCOREUTILS_INSTALL_TARGET_LINUX_PAM_CONFS + $(INSTALL) -D -m 0644 $(@D)/newrole/newrole-lspp.pamd $(TARGET_DIR)/etc/pam.d/newrole + $(INSTALL) -D -m 0644 $(@D)/run_init/run_init.pamd $(TARGET_DIR)/etc/pam.d/run_init +endef +endif + +ifeq ($(BR2_PACKAGE_AUDIT),y) +POLICYCOREUTILS_DEPENDENCIES += audit +POLICYCOREUTILS_MAKE_OPTS += AUDIT_LOG_PRIV=y +endif + +# Enable LSPP_PRIV if both audit and linux pam are enabled +ifeq ($(BR2_PACKAGE_LINUX_PAM)$(BR2_PACKAGE_AUDIT),yy) +POLICYCOREUTILS_MAKE_OPTS += LSPP_PRIV=y +endif + +# Undefining _FILE_OFFSET_BITS here because of a "bug" with glibc fts.h +# large file support. +# See https://bugzilla.redhat.com/show_bug.cgi?id=574992 for more information +POLICYCOREUTILS_MAKE_OPTS += \ + $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(TARGET_CFLAGS) -U_FILE_OFFSET_BITS" \ + CPPFLAGS="$(TARGET_CPPFLAGS) -U_FILE_OFFSET_BITS" + +POLICYCOREUTILS_MAKE_DIRS = \ + load_policy newrole run_init \ + secon semodule sestatus setfiles \ + setsebool + +# We need to pass DESTDIR at build time because it's used by +# policycoreutils build system to find headers and libraries. +define POLICYCOREUTILS_BUILD_CMDS + $(foreach d,$(POLICYCOREUTILS_MAKE_DIRS), + $(MAKE) -C $(@D)/$(d) $(POLICYCOREUTILS_MAKE_OPTS) \ + DESTDIR=$(STAGING_DIR) all + ) +endef + +define POLICYCOREUTILS_INSTALL_TARGET_CMDS + $(foreach d,$(POLICYCOREUTILS_MAKE_DIRS), + $(MAKE) -C $(@D)/$(d) $(POLICYCOREUTILS_MAKE_OPTS) \ + DESTDIR=$(TARGET_DIR) install + ) +endef + +HOST_POLICYCOREUTILS_DEPENDENCIES = host-libsemanage + +# Undefining _FILE_OFFSET_BITS here because of a "bug" with glibc fts.h +# large file support. +# See https://bugzilla.redhat.com/show_bug.cgi?id=574992 for more information +# We also need to pass PREFIX because it defaults to $(DESTDIR)/usr +HOST_POLICYCOREUTILS_MAKE_OPTS = \ + $(HOST_CONFIGURE_OPTS) \ + CFLAGS="$(HOST_CFLAGS) -U_FILE_OFFSET_BITS" \ + CPPFLAGS="$(HOST_CPPFLAGS) -U_FILE_OFFSET_BITS" \ + PREFIX=$(HOST_DIR) \ + ETCDIR=$(HOST_DIR)/etc \ + SBINDIR=$(HOST_DIR)/sbin + +# Note: We are only building the programs required by the refpolicy build +HOST_POLICYCOREUTILS_MAKE_DIRS = \ + load_policy newrole run_init \ + secon semodule sestatus setfiles \ + setsebool + +define HOST_POLICYCOREUTILS_BUILD_CMDS + $(foreach d,$(HOST_POLICYCOREUTILS_MAKE_DIRS), + $(MAKE) -C $(@D)/$(d) $(HOST_POLICYCOREUTILS_MAKE_OPTS) all + ) +endef + +define HOST_POLICYCOREUTILS_INSTALL_CMDS + $(foreach d,$(HOST_POLICYCOREUTILS_MAKE_DIRS), + $(MAKE) -C $(@D)/$(d) $(HOST_POLICYCOREUTILS_MAKE_OPTS) install + ) +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/polkit/0001-make-netgroup-support-optional.patch b/package/polkit/0001-make-netgroup-support-optional.patch new file mode 100644 index 00000000..86916aba --- /dev/null +++ b/package/polkit/0001-make-netgroup-support-optional.patch @@ -0,0 +1,403 @@ +From 1b854ef4bb15032091a33fed587e5ba6f3e582eb Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Wed, 22 May 2019 13:18:55 -0700 +Subject: [PATCH] make netgroup support optional + +On at least Linux/musl and Linux/uclibc, netgroup +support is not available. PolKit fails to compile on these systems +for that reason. + +This change makes netgroup support conditional on the presence of the +setnetgrent(3) function which is required for the support to work. If +that function is not available on the system, an error will be returned +to the administrator if unix-netgroup: is specified in configuration. + +Fixes bug 50145. + +Signed-off-by: A. Wilcox +Signed-off-by: Khem Raj +Signed-off-by: Adam Duskett +[Thomas: add introspection.m4.] +Signed-off-by: Thomas Petazzoni +--- + buildutil/introspection.m4 | 142 ++++++++++++++++++ + configure.ac | 2 +- + src/polkit/polkitidentity.c | 16 ++ + src/polkit/polkitunixnetgroup.c | 3 + + .../polkitbackendinteractiveauthority.c | 14 +- + .../polkitbackendjsauthority.cpp | 2 + + test/polkit/polkitidentitytest.c | 9 +- + test/polkit/polkitunixnetgrouptest.c | 3 + + .../test-polkitbackendjsauthority.c | 2 + + 9 files changed, 185 insertions(+), 8 deletions(-) + create mode 100644 buildutil/introspection.m4 + +diff --git a/buildutil/introspection.m4 b/buildutil/introspection.m4 +new file mode 100644 +index 0000000..b0ccd68 +--- /dev/null ++++ b/buildutil/introspection.m4 +@@ -0,0 +1,142 @@ ++dnl -*- mode: autoconf -*- ++dnl Copyright 2009 Johan Dahlin ++dnl ++dnl This file is free software; the author(s) gives unlimited ++dnl permission to copy and/or distribute it, with or without ++dnl modifications, as long as this notice is preserved. ++dnl ++ ++# serial 1 ++ ++dnl This is a copy of AS_AC_EXPAND ++dnl ++dnl (C) 2003, 2004, 2005 Thomas Vander Stichele ++dnl Copying and distribution of this file, with or without modification, ++dnl are permitted in any medium without royalty provided the copyright ++dnl notice and this notice are preserved. ++m4_define([_GOBJECT_INTROSPECTION_AS_AC_EXPAND], ++[ ++ EXP_VAR=[$1] ++ FROM_VAR=[$2] ++ ++ dnl first expand prefix and exec_prefix if necessary ++ prefix_save=$prefix ++ exec_prefix_save=$exec_prefix ++ ++ dnl if no prefix given, then use /usr/local, the default prefix ++ if test "x$prefix" = "xNONE"; then ++ prefix="$ac_default_prefix" ++ fi ++ dnl if no exec_prefix given, then use prefix ++ if test "x$exec_prefix" = "xNONE"; then ++ exec_prefix=$prefix ++ fi ++ ++ full_var="$FROM_VAR" ++ dnl loop until it doesn't change anymore ++ while true; do ++ new_full_var="`eval echo $full_var`" ++ if test "x$new_full_var" = "x$full_var"; then break; fi ++ full_var=$new_full_var ++ done ++ ++ dnl clean up ++ full_var=$new_full_var ++ AC_SUBST([$1], "$full_var") ++ ++ dnl restore prefix and exec_prefix ++ prefix=$prefix_save ++ exec_prefix=$exec_prefix_save ++]) ++ ++m4_define([_GOBJECT_INTROSPECTION_CHECK_INTERNAL], ++[ ++ AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first ++ AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first ++ AC_BEFORE([LT_INIT],[$0])dnl setup libtool first ++ ++ dnl enable/disable introspection ++ m4_if([$2], [require], ++ [dnl ++ enable_introspection=yes ++ ],[dnl ++ AC_ARG_ENABLE(introspection, ++ AS_HELP_STRING([--enable-introspection[=@<:@no/auto/yes@:>@]], ++ [Enable introspection for this build]),, ++ [enable_introspection=auto]) ++ ])dnl ++ ++ AC_MSG_CHECKING([for gobject-introspection]) ++ ++ dnl presence/version checking ++ AS_CASE([$enable_introspection], ++ [no], [dnl ++ found_introspection="no (disabled, use --enable-introspection to enable)" ++ ],dnl ++ [yes],[dnl ++ PKG_CHECK_EXISTS([gobject-introspection-1.0],, ++ AC_MSG_ERROR([gobject-introspection-1.0 is not installed])) ++ PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1], ++ found_introspection=yes, ++ AC_MSG_ERROR([You need to have gobject-introspection >= $1 installed to build AC_PACKAGE_NAME])) ++ ],dnl ++ [auto],[dnl ++ PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1], found_introspection=yes, found_introspection=no) ++ dnl Canonicalize enable_introspection ++ enable_introspection=$found_introspection ++ ],dnl ++ [dnl ++ AC_MSG_ERROR([invalid argument passed to --enable-introspection, should be one of @<:@no/auto/yes@:>@]) ++ ])dnl ++ ++ AC_MSG_RESULT([$found_introspection]) ++ ++ dnl expand datadir/libdir so we can pass them to pkg-config ++ dnl and get paths relative to our target directories ++ _GOBJECT_INTROSPECTION_AS_AC_EXPAND(_GI_EXP_DATADIR, "$datadir") ++ _GOBJECT_INTROSPECTION_AS_AC_EXPAND(_GI_EXP_LIBDIR, "$libdir") ++ ++ INTROSPECTION_SCANNER= ++ INTROSPECTION_COMPILER= ++ INTROSPECTION_GENERATE= ++ INTROSPECTION_GIRDIR= ++ INTROSPECTION_TYPELIBDIR= ++ if test "x$found_introspection" = "xyes"; then ++ INTROSPECTION_SCANNER=$PKG_CONFIG_SYSROOT_DIR`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0` ++ INTROSPECTION_COMPILER=$PKG_CONFIG_SYSROOT_DIR`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0` ++ INTROSPECTION_GENERATE=$PKG_CONFIG_SYSROOT_DIR`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0` ++ INTROSPECTION_GIRDIR=`$PKG_CONFIG --define-variable=datadir="${_GI_EXP_DATADIR}" --variable=girdir gobject-introspection-1.0` ++ INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --define-variable=libdir="${_GI_EXP_LIBDIR}" --variable=typelibdir gobject-introspection-1.0)" ++ INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0` ++ INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0` ++ INTROSPECTION_MAKEFILE=$PKG_CONFIG_SYSROOT_DIR`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection ++ fi ++ AC_SUBST(INTROSPECTION_SCANNER) ++ AC_SUBST(INTROSPECTION_COMPILER) ++ AC_SUBST(INTROSPECTION_GENERATE) ++ AC_SUBST(INTROSPECTION_GIRDIR) ++ AC_SUBST(INTROSPECTION_TYPELIBDIR) ++ AC_SUBST(INTROSPECTION_CFLAGS) ++ AC_SUBST(INTROSPECTION_LIBS) ++ AC_SUBST(INTROSPECTION_MAKEFILE) ++ ++ AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = "xyes") ++]) ++ ++ ++dnl Usage: ++dnl GOBJECT_INTROSPECTION_CHECK([minimum-g-i-version]) ++ ++AC_DEFUN([GOBJECT_INTROSPECTION_CHECK], ++[ ++ _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1]) ++]) ++ ++dnl Usage: ++dnl GOBJECT_INTROSPECTION_REQUIRE([minimum-g-i-version]) ++ ++ ++AC_DEFUN([GOBJECT_INTROSPECTION_REQUIRE], ++[ ++ _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1], [require]) ++]) +diff --git a/configure.ac b/configure.ac +index 5cedb4e..87aa0ad 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -99,7 +99,7 @@ AC_CHECK_LIB(expat,XML_ParserCreate,[EXPAT_LIBS="-lexpat"], + [AC_MSG_ERROR([Can't find expat library. Please install expat.])]) + AC_SUBST(EXPAT_LIBS) + +-AC_CHECK_FUNCS(clearenv fdatasync) ++AC_CHECK_FUNCS(clearenv fdatasync setnetgrent) + + if test "x$GCC" = "xyes"; then + LDFLAGS="-Wl,--as-needed $LDFLAGS" +diff --git a/src/polkit/polkitidentity.c b/src/polkit/polkitidentity.c +index 3aa1f7f..10e9c17 100644 +--- a/src/polkit/polkitidentity.c ++++ b/src/polkit/polkitidentity.c +@@ -182,7 +182,15 @@ polkit_identity_from_string (const gchar *str, + } + else if (g_str_has_prefix (str, "unix-netgroup:")) + { ++#ifndef HAVE_SETNETGRENT ++ g_set_error (error, ++ POLKIT_ERROR, ++ POLKIT_ERROR_FAILED, ++ "Netgroups are not available on this machine ('%s')", ++ str); ++#else + identity = polkit_unix_netgroup_new (str + sizeof "unix-netgroup:" - 1); ++#endif + } + + if (identity == NULL && (error != NULL && *error == NULL)) +@@ -344,6 +352,13 @@ polkit_identity_new_for_gvariant (GVariant *variant, + GVariant *v; + const char *name; + ++#ifndef HAVE_SETNETGRENT ++ g_set_error (error, ++ POLKIT_ERROR, ++ POLKIT_ERROR_FAILED, ++ "Netgroups are not available on this machine"); ++ goto out; ++#else + v = lookup_asv (details_gvariant, "name", G_VARIANT_TYPE_STRING, error); + if (v == NULL) + { +@@ -353,6 +368,7 @@ polkit_identity_new_for_gvariant (GVariant *variant, + name = g_variant_get_string (v, NULL); + ret = polkit_unix_netgroup_new (name); + g_variant_unref (v); ++#endif + } + else + { +diff --git a/src/polkit/polkitunixnetgroup.c b/src/polkit/polkitunixnetgroup.c +index 8a2b369..83f8d4a 100644 +--- a/src/polkit/polkitunixnetgroup.c ++++ b/src/polkit/polkitunixnetgroup.c +@@ -194,6 +194,9 @@ polkit_unix_netgroup_set_name (PolkitUnixNetgroup *group, + PolkitIdentity * + polkit_unix_netgroup_new (const gchar *name) + { ++#ifndef HAVE_SETNETGRENT ++ g_assert_not_reached(); ++#endif + g_return_val_if_fail (name != NULL, NULL); + return POLKIT_IDENTITY (g_object_new (POLKIT_TYPE_UNIX_NETGROUP, + "name", name, +diff --git a/src/polkitbackend/polkitbackendinteractiveauthority.c b/src/polkitbackend/polkitbackendinteractiveauthority.c +index 056d9a8..36c2f3d 100644 +--- a/src/polkitbackend/polkitbackendinteractiveauthority.c ++++ b/src/polkitbackend/polkitbackendinteractiveauthority.c +@@ -2233,25 +2233,26 @@ get_users_in_net_group (PolkitIdentity *group, + GList *ret; + + ret = NULL; ++#ifdef HAVE_SETNETGRENT + name = polkit_unix_netgroup_get_name (POLKIT_UNIX_NETGROUP (group)); + +-#ifdef HAVE_SETNETGRENT_RETURN ++# ifdef HAVE_SETNETGRENT_RETURN + if (setnetgrent (name) == 0) + { + g_warning ("Error looking up net group with name %s: %s", name, g_strerror (errno)); + goto out; + } +-#else ++# else + setnetgrent (name); +-#endif ++# endif /* HAVE_SETNETGRENT_RETURN */ + + for (;;) + { +-#if defined(HAVE_NETBSD) || defined(HAVE_OPENBSD) ++# if defined(HAVE_NETBSD) || defined(HAVE_OPENBSD) + const char *hostname, *username, *domainname; +-#else ++# else + char *hostname, *username, *domainname; +-#endif ++# endif /* defined(HAVE_NETBSD) || defined(HAVE_OPENBSD) */ + PolkitIdentity *user; + GError *error = NULL; + +@@ -2282,6 +2283,7 @@ get_users_in_net_group (PolkitIdentity *group, + + out: + endnetgrent (); ++#endif /* HAVE_SETNETGRENT */ + return ret; + } + +diff --git a/src/polkitbackend/polkitbackendjsauthority.cpp b/src/polkitbackend/polkitbackendjsauthority.cpp +index 9b752d1..09b2878 100644 +--- a/src/polkitbackend/polkitbackendjsauthority.cpp ++++ b/src/polkitbackend/polkitbackendjsauthority.cpp +@@ -1502,6 +1502,7 @@ js_polkit_user_is_in_netgroup (JSContext *cx, + + JS::CallArgs args = JS::CallArgsFromVp (argc, vp); + ++#ifdef HAVE_SETNETGRENT + JS::RootedString usrstr (authority->priv->cx); + usrstr = args[0].toString(); + user = JS_EncodeStringToUTF8 (cx, usrstr); +@@ -1519,6 +1520,7 @@ js_polkit_user_is_in_netgroup (JSContext *cx, + + JS_free (cx, netgroup); + JS_free (cx, user); ++#endif + + ret = true; + +diff --git a/test/polkit/polkitidentitytest.c b/test/polkit/polkitidentitytest.c +index e91967b..e829aaa 100644 +--- a/test/polkit/polkitidentitytest.c ++++ b/test/polkit/polkitidentitytest.c +@@ -19,6 +19,7 @@ + * Author: Nikki VonHollen + */ + ++#include "config.h" + #include "glib.h" + #include + #include +@@ -145,11 +146,15 @@ struct ComparisonTestData comparison_test_data [] = { + {"unix-group:root", "unix-group:jane", FALSE}, + {"unix-group:jane", "unix-group:jane", TRUE}, + ++#ifdef HAVE_SETNETGRENT + {"unix-netgroup:foo", "unix-netgroup:foo", TRUE}, + {"unix-netgroup:foo", "unix-netgroup:bar", FALSE}, ++#endif + + {"unix-user:root", "unix-group:root", FALSE}, ++#ifdef HAVE_SETNETGRENT + {"unix-user:jane", "unix-netgroup:foo", FALSE}, ++#endif + + {NULL}, + }; +@@ -181,11 +186,13 @@ main (int argc, char *argv[]) + g_test_add_data_func ("/PolkitIdentity/group_string_2", "unix-group:jane", test_string); + g_test_add_data_func ("/PolkitIdentity/group_string_3", "unix-group:users", test_string); + ++#ifdef HAVE_SETNETGRENT + g_test_add_data_func ("/PolkitIdentity/netgroup_string", "unix-netgroup:foo", test_string); ++ g_test_add_data_func ("/PolkitIdentity/netgroup_gvariant", "unix-netgroup:foo", test_gvariant); ++#endif + + g_test_add_data_func ("/PolkitIdentity/user_gvariant", "unix-user:root", test_gvariant); + g_test_add_data_func ("/PolkitIdentity/group_gvariant", "unix-group:root", test_gvariant); +- g_test_add_data_func ("/PolkitIdentity/netgroup_gvariant", "unix-netgroup:foo", test_gvariant); + + add_comparison_tests (); + +diff --git a/test/polkit/polkitunixnetgrouptest.c b/test/polkit/polkitunixnetgrouptest.c +index 3701ba1..e3352eb 100644 +--- a/test/polkit/polkitunixnetgrouptest.c ++++ b/test/polkit/polkitunixnetgrouptest.c +@@ -19,6 +19,7 @@ + * Author: Nikki VonHollen + */ + ++#include "config.h" + #include "glib.h" + #include + #include +@@ -69,7 +70,9 @@ int + main (int argc, char *argv[]) + { + g_test_init (&argc, &argv, NULL); ++#ifdef HAVE_SETNETGRENT + g_test_add_func ("/PolkitUnixNetgroup/new", test_new); + g_test_add_func ("/PolkitUnixNetgroup/set_name", test_set_name); ++#endif + return g_test_run (); + } +diff --git a/test/polkitbackend/test-polkitbackendjsauthority.c b/test/polkitbackend/test-polkitbackendjsauthority.c +index 71aad23..fdd28f3 100644 +--- a/test/polkitbackend/test-polkitbackendjsauthority.c ++++ b/test/polkitbackend/test-polkitbackendjsauthority.c +@@ -137,12 +137,14 @@ test_get_admin_identities (void) + "unix-group:users" + } + }, ++#ifdef HAVE_SETNETGRENT + { + "net.company.action3", + { + "unix-netgroup:foo" + } + }, ++#endif + }; + guint n; + +-- +2.25.1 + diff --git a/package/polkit/0002-jsauthority-memleak.patch b/package/polkit/0002-jsauthority-memleak.patch new file mode 100644 index 00000000..4f073318 --- /dev/null +++ b/package/polkit/0002-jsauthority-memleak.patch @@ -0,0 +1,28 @@ +From 28e3a6653d8c3777b07e0128a0d97d46e586e311 Mon Sep 17 00:00:00 2001 +From: Jan Rybar +Date: Tue, 8 Oct 2019 13:28:18 +0000 +Subject: [PATCH] jsauthority: Fix two minor memory leaks + +(cherry picked from commit 28e3a6653d8c3777b07e0128a0d97d46e586e311) +Signed-off-by: Jan Rybar +Signed-off-by: Adam Duskett +--- + src/polkitbackend/polkitbackendjsauthority.cpp | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/polkitbackend/polkitbackendjsauthority.cpp b/src/polkitbackend/polkitbackendjsauthority.cpp +index 9b752d1..e97b8aa 100644 +--- a/src/polkitbackend/polkitbackendjsauthority.cpp ++++ b/src/polkitbackend/polkitbackendjsauthority.cpp +@@ -567,6 +567,8 @@ polkit_backend_js_authority_finalize (GObject *object) + g_strfreev (authority->priv->rules_dirs); + + delete authority->priv->ac; ++ delete authority->priv->js_global; ++ delete authority->priv->js_polkit; + + JS_DestroyContext (authority->priv->cx); + /* JS_ShutDown (); */ +-- +2.24.1 + diff --git a/package/polkit/0003-polkit-0.116-pkttyagent-sigttou-bg-job.patch b/package/polkit/0003-polkit-0.116-pkttyagent-sigttou-bg-job.patch new file mode 100644 index 00000000..fb41df3a --- /dev/null +++ b/package/polkit/0003-polkit-0.116-pkttyagent-sigttou-bg-job.patch @@ -0,0 +1,34 @@ +From 76aae4fce586b400f5fe08df31497db19d624609 Mon Sep 17 00:00:00 2001 +From: Jan Rybar +Date: Thu, 1 Aug 2019 06:46:10 +0000 +Subject: [PATCH] pkttyagent: process stopped by SIGTTOU if run in background + job + + +(cherry picked from commit 76aae4fce586b400f5fe08df31497db19d624609) +Signed-off-by: Jan Rybar +Signed-off-by: Adam Duskett +--- + src/programs/pkttyagent.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/programs/pkttyagent.c b/src/programs/pkttyagent.c +index 3c8d502..13879a2 100644 +--- a/src/programs/pkttyagent.c ++++ b/src/programs/pkttyagent.c +@@ -264,6 +264,12 @@ main (int argc, char *argv[]) + + memset (&sa, 0, sizeof (sa)); + sa.sa_handler = &tty_handler; ++/* If tty_handler() resets terminal while pkttyagent is run in background job, ++ the process gets stopped by SIGTTOU. This impacts systemctl, hence it must ++ be blocked for a while and then the process gets killed anyway. ++ */ ++ sigemptyset(&sa.sa_mask); ++ sigaddset(&sa.sa_mask, SIGTTOU); + sigaction (SIGTERM, &sa, &savesigterm); + sigaction (SIGINT, &sa, &savesigint); + sigaction (SIGTSTP, &sa, &savesigtstp); +-- +2.24.1 + diff --git a/package/polkit/Config.in b/package/polkit/Config.in new file mode 100644 index 00000000..f54b6b4c --- /dev/null +++ b/package/polkit/Config.in @@ -0,0 +1,32 @@ +config BR2_PACKAGE_POLKIT + bool "polkit" + depends on BR2_HOST_GCC_AT_LEAST_4_9 # spidermonkey + depends on BR2_INSTALL_LIBSTDCPP # spidermonkey + depends on BR2_PACKAGE_SPIDERMONKEY_ARCH_SUPPORTS # spidermonkey + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # spidermonkey + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # spidermonkey + depends on BR2_USE_MMU # libglib2, dbus + depends on BR2_USE_WCHAR # libglib2 + depends on !BR2_STATIC_LIBS # spidermonkey + depends on !BR2_TOOLCHAIN_USES_UCLIBC # spidermonkey + select BR2_PACKAGE_DBUS # runtime + select BR2_PACKAGE_EXPAT + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_SPIDERMONKEY + help + PolicyKit is a toolkit for defining and handling + authorizations. It is used for allowing unprivileged + processes to speak to privileged processes. + + http://www.freedesktop.org/wiki/Software/polkit + +comment "polkit needs a glibc or musl toolchain with C++, wchar, dynamic library, NPTL, gcc >= 4.9" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_SPIDERMONKEY_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_USES_UCLIBC || \ + !BR2_INSTALL_LIBSTDCPP || \ + BR2_STATIC_LIBS || \ + !BR2_TOOLCHAIN_HAS_THREADS_NPTL || \ + !BR2_HOST_GCC_AT_LEAST_4_9 || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || \ + !BR2_USE_WCHAR diff --git a/package/polkit/S50polkit b/package/polkit/S50polkit new file mode 100755 index 00000000..f07e2d61 --- /dev/null +++ b/package/polkit/S50polkit @@ -0,0 +1,51 @@ +#!/bin/sh + +DAEMON="polkitd" +DAEMON_PATH="/usr/lib/polkit-1/${DAEMON}" +PIDFILE="/var/run/${DAEMON}.pid" +POLKITD_ARGS="--no-debug" + +# polkitd does not create a pidfile, so pass "-n" in the command line +# and use "-m" to instruct start-stop-daemon to create one. +start() { + printf 'Starting %s: ' "${DAEMON}" + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon -bmSqp "$PIDFILE" -x ${DAEMON_PATH} -- ${POLKITD_ARGS} + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "${DAEMON}" + start-stop-daemon -Kqp "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + rm -f "$PIDFILE" + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +case "$1" in + start|stop|restart|reload) + "$1";; + reload) + # Restart, since there is no true "reload" feature. + restart;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/polkit/polkit.hash b/package/polkit/polkit.hash new file mode 100644 index 00000000..bacd6821 --- /dev/null +++ b/package/polkit/polkit.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +sha256 88170c9e711e8db305a12fdb8234fac5706c61969b94e084d0f117d8ec5d34b1 polkit-0.116.tar.gz + +# Locally calculated +sha256 d2e2aa973e29c75e1b492e67ea7b7da9de2d501d49a934657971fd74f9a0b0a8 COPYING diff --git a/package/polkit/polkit.mk b/package/polkit/polkit.mk new file mode 100644 index 00000000..e00b634b --- /dev/null +++ b/package/polkit/polkit.mk @@ -0,0 +1,65 @@ +################################################################################ +# +# polkit +# +################################################################################ + +POLKIT_VERSION = 0.116 +POLKIT_SITE = http://www.freedesktop.org/software/polkit/releases +POLKIT_LICENSE = GPL-2.0 +POLKIT_LICENSE_FILES = COPYING +POLKIT_CPE_ID_VENDOR = polkit_project +POLKIT_AUTORECONF = YES +POLKIT_INSTALL_STAGING = YES + +POLKIT_DEPENDENCIES = \ + libglib2 host-intltool expat spidermonkey $(TARGET_NLS_DEPENDENCIES) + +# spidermonkey needs C++11 +POLKIT_CONF_ENV = \ + CXXFLAGS="$(TARGET_CXXFLAGS) -std=c++11" \ + LIBS=$(TARGET_NLS_LIBS) + +POLKIT_CONF_OPTS = \ + --with-os-type=unknown \ + --disable-man-pages \ + --disable-examples \ + --disable-libelogind \ + --disable-libsystemd-login + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +POLKIT_CONF_OPTS += --enable-introspection +POLKIT_DEPENDENCIES += gobject-introspection +else +POLKIT_CONF_OPTS += --disable-introspection +endif + +ifeq ($(BR2_PACKAGE_LINUX_PAM),y) +POLKIT_DEPENDENCIES += linux-pam +POLKIT_CONF_OPTS += --with-authfw=pam +else +POLKIT_CONF_OPTS += --with-authfw=shadow +endif + +define POLKIT_USERS + polkitd -1 polkitd -1 * - - - Polkit Daemon +endef + +define POLKIT_PERMISSIONS + /etc/polkit-1 r 750 root polkitd - - - - - + /usr/share/polkit-1 r 750 root polkitd - - - - - + /usr/bin/pkexec f 4755 root root - - - - - +endef + +define POLKIT_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 $(POLKIT_PKGDIR)/polkit.service \ + $(TARGET_DIR)/usr/lib/systemd/system/polkit.service + +endef + +define POLKIT_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/polkit/S50polkit \ + $(TARGET_DIR)/etc/init.d/S50polkit +endef + +$(eval $(autotools-package)) diff --git a/package/polkit/polkit.service b/package/polkit/polkit.service new file mode 100644 index 00000000..a69b28cd --- /dev/null +++ b/package/polkit/polkit.service @@ -0,0 +1,12 @@ +[Unit] + +Description=Authorization Manager +Documentation=man:polkit(8) + +[Service] +Type=dbus +BusName=org.freedesktop.PolicyKit1 +ExecStart=/usr/lib/polkit-1/polkitd --no-debug + +[Install] +WantedBy=multi-user.target diff --git a/package/popperjs/Config.in b/package/popperjs/Config.in new file mode 100644 index 00000000..eae96310 --- /dev/null +++ b/package/popperjs/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_POPPERJS + bool "popperjs" + help + Popper.js, a JavaScript Tooltip & Popover Positioning Engine. + + https://popper.js.org diff --git a/package/popperjs/popperjs.hash b/package/popperjs/popperjs.hash new file mode 100644 index 00000000..d9cdabc3 --- /dev/null +++ b/package/popperjs/popperjs.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 83eecef51d10826faca2cd5cabb344e0bef6d4127d7e728db9e4d8308b7b15d1 popperjs-1.16.0.tar.gz +sha256 2961310ed05cd9373a08b8191c071425a7fede0ca5d807ca38fa5f5f61c5b834 LICENSE.md diff --git a/package/popperjs/popperjs.mk b/package/popperjs/popperjs.mk new file mode 100644 index 00000000..c5df302e --- /dev/null +++ b/package/popperjs/popperjs.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# popperjs +# +################################################################################ + +POPPERJS_VERSION = 1.16.0 +POPPERJS_SITE = $(call github,popperjs,popper-core,v$(POPPERJS_VERSION)) +POPPERJS_LICENSE = MIT +POPPERJS_LICENSE_FILES = LICENSE.md + +define POPPERJS_INSTALL_TARGET_CMDS + $(INSTALL) -m 0644 -D $(@D)/dist/umd/popper.min.js \ + $(TARGET_DIR)/var/www/popperjs/js/popper.min.js + $(INSTALL) -m 0644 -D $(@D)/dist/umd/popper-utils.min.js \ + $(TARGET_DIR)/var/www/popperjs/js/popper-utils.min.js +endef + +$(eval $(generic-package)) diff --git a/package/poppler/Config.in b/package/poppler/Config.in new file mode 100644 index 00000000..521e3e65 --- /dev/null +++ b/package/poppler/Config.in @@ -0,0 +1,36 @@ +config BR2_PACKAGE_POPPLER + bool "poppler" + depends on BR2_USE_WCHAR + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5 # C++14, constexpr + select BR2_PACKAGE_FONTCONFIG + help + Poppler is a PDF rendering library based on the xpdf-3.0 + code base. + + http://poppler.freedesktop.org/ + +if BR2_PACKAGE_POPPLER + +config BR2_PACKAGE_POPPLER_QT5 + bool "Qt5 support" + depends on BR2_PACKAGE_QT5 + select BR2_PACKAGE_QT5BASE_GUI + select BR2_PACKAGE_QT5BASE_WIDGETS + select BR2_PACKAGE_QT5BASE_XML + help + Build Qt support into the Poppler library + +config BR2_PACKAGE_POPPLER_UTILS + bool "command line utils" + help + Compile poppler command line utils. + +endif + +comment "poppler needs a toolchain w/ wchar, C++, threads, dynamic library, gcc >= 5" + depends on !BR2_USE_WCHAR || !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_5 diff --git a/package/poppler/poppler.hash b/package/poppler/poppler.hash new file mode 100644 index 00000000..a06def66 --- /dev/null +++ b/package/poppler/poppler.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 c7a130da743b38a548f7a21fe5940506fb1949f4ebdd3209f0e5b302fa139731 poppler-0.84.0.tar.xz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/poppler/poppler.mk b/package/poppler/poppler.mk new file mode 100644 index 00000000..a5a97d97 --- /dev/null +++ b/package/poppler/poppler.mk @@ -0,0 +1,127 @@ +################################################################################ +# +# poppler +# +################################################################################ + +POPPLER_VERSION = 0.84.0 +POPPLER_SOURCE = poppler-$(POPPLER_VERSION).tar.xz +POPPLER_SITE = http://poppler.freedesktop.org +POPPLER_DEPENDENCIES = fontconfig host-pkgconf +POPPLER_LICENSE = GPL-2.0+ +POPPLER_LICENSE_FILES = COPYING +POPPLER_CPE_ID_VENDOR = freedesktop +POPPLER_INSTALL_STAGING = YES + +POPPLER_CONF_OPTS = \ + -DENABLE_UNSTABLE_API_ABI_HEADERS=ON \ + -DBUILD_GTK_TESTS=OFF \ + -DBUILD_QT5_TESTS=OFF \ + -DBUILD_CPP_TESTS=OFF \ + -DENABLE_GTK_DOC=OFF + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +POPPLER_CONF_OPTS += -DCMAKE_EXE_LINKER_FLAGS=-latomic +endif + +ifeq ($(BR2_PACKAGE_BOOST),y) +POPPLER_DEPENDENCIES += boost +endif + +ifeq ($(BR2_PACKAGE_JPEG),y) +POPPLER_DEPENDENCIES += jpeg +POPPLER_CONF_OPTS += -DENABLE_DCTDECODER=libjpeg -DWITH_JPEG=ON +else +POPPLER_CONF_OPTS += -DENABLE_DCTDECODER=none -DWITH_JPEG=OFF +endif + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +POPPLER_DEPENDENCIES += gobject-introspection +POPPLER_CONF_OPTS += -DENABLE_GOBJECT_INTROSPECTION=ON +else +POPPLER_CONF_OPTS += -DENABLE_GOBJECT_INTROSPECTION=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBPNG),y) +POPPLER_DEPENDENCIES += libpng +POPPLER_CONF_OPTS += -DWITH_PNG=ON +else +POPPLER_CONF_OPTS += -DWITH_PNG=OFF +endif + +ifeq ($(BR2_PACKAGE_LCMS2),y) +POPPLER_DEPENDENCIES += lcms2 +POPPLER_CONF_OPTS += -DENABLE_CMS=lcms2 +else +POPPLER_CONF_OPTS += -DENABLE_CMS=none +endif + +ifeq ($(BR2_PACKAGE_OPENJPEG),y) +POPPLER_DEPENDENCIES += openjpeg +POPPLER_CONF_OPTS += -DENABLE_LIBOPENJPEG=openjpeg2 +else +POPPLER_CONF_OPTS += -DENABLE_LIBOPENJPEG=none +endif + +ifeq ($(BR2_PACKAGE_LIBCURL),y) +POPPLER_DEPENDENCIES += libcurl +POPPLER_CONF_OPTS += -DENABLE_LIBCURL=ON +else +POPPLER_CONF_OPTS += -DENABLE_LIBCURL=OFF +endif + +ifeq ($(BR2_PACKAGE_POPPLER_QT5),y) +POPPLER_DEPENDENCIES += qt5base +POPPLER_CONF_OPTS += -DENABLE_QT5=ON +else +POPPLER_CONF_OPTS += -DENABLE_QT5=OFF +endif + +ifeq ($(BR2_PACKAGE_POPPLER_UTILS),y) +POPPLER_CONF_OPTS += -DENABLE_UTILS=ON +else +POPPLER_CONF_OPTS += -DENABLE_UTILS=OFF +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +POPPLER_DEPENDENCIES += zlib +POPPLER_CONF_OPTS += -DENABLE_ZLIB=ON +else +POPPLER_CONF_OPTS += -DENABLE_ZLIB=OFF +endif + +ifeq ($(BR2_PACKAGE_CAIRO),y) +POPPLER_DEPENDENCIES += cairo +POPPLER_CONF_OPTS += -DWITH_Cairo=ON +else +POPPLER_CONF_OPTS += -DWITH_Cairo=OFF +endif + +ifeq ($(BR2_PACKAGE_TIFF),y) +POPPLER_DEPENDENCIES += tiff +POPPLER_CONF_OPTS += -DWITH_TIFF=ON +else +POPPLER_CONF_OPTS += -DWITH_TIFF=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBGLIB2),y) +POPPLER_DEPENDENCIES += libglib2 +POPPLER_CONF_OPTS += -DENABLE_GLIB=ON +else +POPPLER_CONF_OPTS += -DENABLE_GLIB=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBNSS),y) +POPPLER_DEPENDENCIES += libnss +POPPLER_CONF_OPTS += -DWITH_NSS3=ON +else +POPPLER_CONF_OPTS += -DWITH_NSS3=OFF +endif + +ifeq ($(BR2_SOFT_FLOAT),y) +POPPLER_CONF_OPTS += -DUSE_FLOAT=OFF +else +POPPLER_CONF_OPTS += -DUSE_FLOAT=ON +endif + +$(eval $(cmake-package)) diff --git a/package/popt/0001-add-libiconv-to-popt.pc.patch b/package/popt/0001-add-libiconv-to-popt.pc.patch new file mode 100644 index 00000000..baa3cd53 --- /dev/null +++ b/package/popt/0001-add-libiconv-to-popt.pc.patch @@ -0,0 +1,19 @@ +Add LTLIBICONV to popt.pc.in + +Add ${LTLIBICONV} to popt.pc.in so applications such as shairport-sync +will know that they must link with -liconv when building statically + +Fixes: + - http://autobuild.buildroot.org/results/c5b0d1d2867e49c022a2ad971dd9f358ff0f3865 + +Signed-off-by: Fabrice Fontaine + +diff -Naurp popt-1.18-vanilla/popt.pc.in popt-1.18/popt.pc.in +--- popt-1.18-vanilla/popt.pc.in 2020-03-24 10:36:25.000000000 +0100 ++++ popt-1.18/popt.pc.in 2020-09-18 21:18:03.112609343 +0200 +@@ -7,4 +7,5 @@ Name: popt + Version: @VERSION@ + Description: popt library. + Libs: -L${libdir} -lpopt ++Libs.private: @LTLIBICONV@ + Cflags: -I${includedir} diff --git a/package/popt/0002-Detect-glob_pattern_p.patch b/package/popt/0002-Detect-glob_pattern_p.patch new file mode 100644 index 00000000..f64ad36f --- /dev/null +++ b/package/popt/0002-Detect-glob_pattern_p.patch @@ -0,0 +1,53 @@ +From 3938da1286534e4b280340411336eed5b6311d1b Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Wed, 15 Jul 2020 23:21:32 +0200 +Subject: [PATCH] Detect glob_pattern_p() + +The current popt build system tests the existence of , and +then assumes that if __GLIBC__ is defined, then glob_pattern_p() must +be available. Unfortunately, that's not true with uClibc: may +be installed, but not necessarily the GNU glob extensions... and +uClibc defines __GLIBC__. This is causing build issues with certain +uClibc toolchains that do not have GNU glob extensions enabled. + +To fix this, this patch adds an AC_CHECK_FUNCS() test for +glob_pattern_p, and uses that to find out whether glob_pattern_p() is +available or not. + +Signed-off-by: Thomas Petazzoni +[Retrieved (and slightly updated) from: +https://git.buildroot.net/buildroot/tree/package/popt/0003-glob-detection.patch] +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/rpm-software-management/popt/commit/3938da1286534e4b280340411336eed5b6311d1b] +--- + configure.ac | 2 +- + src/poptconfig.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/configure.ac b/configure.ac +index a5568c4..3b71d1a 100755 +--- a/configure.ac ++++ b/configure.ac +@@ -50,7 +50,7 @@ AC_ARG_ENABLE(build-gcov, + ]) + + AC_SEARCH_LIBS(setreuid, [ucb]) +-AC_CHECK_FUNCS(getuid geteuid iconv mtrace secure_getenv __secure_getenv setreuid setuid stpcpy strerror vasprintf srandom) ++AC_CHECK_FUNCS(getuid geteuid iconv mtrace secure_getenv __secure_getenv setreuid setuid stpcpy strerror vasprintf srandom glob_pattern_p) + + AM_GNU_GETTEXT_VERSION([0.18.2]) + AM_GNU_GETTEXT([external]) +diff --git a/src/poptconfig.c b/src/poptconfig.c +index 9d97ccd..b4d1b76 100644 +--- a/src/poptconfig.c ++++ b/src/poptconfig.c +@@ -21,7 +21,7 @@ + #if defined(HAVE_GLOB_H) + #include + +-#if !defined(__GLIBC__) ++#if !defined(HAVE_GLOB_PATTERN_P) + /* Return nonzero if PATTERN contains any metacharacters. + Metacharacters can be quoted with backslashes if QUOTE is nonzero. */ + static int diff --git a/package/popt/0003-configure-replace-deprecated-macros.patch b/package/popt/0003-configure-replace-deprecated-macros.patch new file mode 100644 index 00000000..32a6a8dc --- /dev/null +++ b/package/popt/0003-configure-replace-deprecated-macros.patch @@ -0,0 +1,76 @@ +From f492b19f59229b0494b5b9ffe5c660a35493a405 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Christian=20G=C3=B6ttsche?= +Date: Mon, 29 Jun 2020 18:58:09 +0200 +Subject: [PATCH] configure: replace deprecated macros + +* use LT_INIT instead of deprecated AC_PROG_LIBTOOL +* use AS_HELP_STRING instead of deprecated AC_HELP_STRING +* quote macros + +[Retrieved from: +https://github.com/rpm-software-management/popt/commit/f492b19f59229b0494b5b9ffe5c660a35493a405] +Signed-off-by: Fabrice Fontaine +--- + configure.ac | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + mode change 100755 => 100644 configure.ac + +diff --git a/configure.ac b/configure.ac +old mode 100755 +new mode 100644 +index 3b71d1a..009ae7b +--- a/configure.ac ++++ b/configure.ac +@@ -1,5 +1,5 @@ +-AC_PREREQ(2.57) +-AC_INIT(popt, 1.18, rpm-maint@lists.rpm.org) ++AC_PREREQ([2.57]) ++AC_INIT([popt], [1.18], [rpm-maint@lists.rpm.org]) + AC_CONFIG_SRCDIR([src/popt.h]) + AC_CONFIG_HEADERS([config.h]) + +@@ -14,11 +14,11 @@ AC_USE_SYSTEM_EXTENSIONS + AM_PROG_AR + + AC_PROG_INSTALL +-AC_PROG_LIBTOOL ++LT_INIT + + AC_SYS_LARGEFILE + +-AC_CHECK_HEADERS(fnmatch.h glob.h langinfo.h libintl.h mcheck.h stdalign.h) ++AC_CHECK_HEADERS([fnmatch.h glob.h langinfo.h libintl.h mcheck.h stdalign.h]) + + # For some systems we know that we have ld_version scripts. + # Use it then as default. +@@ -32,15 +32,15 @@ case "${host}" in + ;; + esac + AC_ARG_ENABLE([ld-version-script], +- AC_HELP_STRING([--enable-ld-version-script], ++ [AS_HELP_STRING([--enable-ld-version-script], + [enable/disable use of linker version script. +- (default is system dependent)]), ++ (default is system dependent)])], + [have_ld_version_script=$enableval], + [ : ] ) + AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes") + +-AC_ARG_ENABLE(build-gcov, +- AS_HELP_STRING([--enable-build-gcov], [build POPT instrumented for gcov]), [dnl ++AC_ARG_ENABLE([build-gcov], ++ [AS_HELP_STRING([--enable-build-gcov], [build POPT instrumented for gcov])], [dnl + if test ".$enableval" = .yes; then + if test ".`$CC --version 2>&1 | grep 'GCC'`" != .; then + dnl # GNU GCC (usually "gcc") +@@ -49,8 +49,8 @@ AC_ARG_ENABLE(build-gcov, + fi + ]) + +-AC_SEARCH_LIBS(setreuid, [ucb]) +-AC_CHECK_FUNCS(getuid geteuid iconv mtrace secure_getenv __secure_getenv setreuid setuid stpcpy strerror vasprintf srandom glob_pattern_p) ++AC_SEARCH_LIBS([setreuid], [ucb]) ++AC_CHECK_FUNCS([getuid geteuid iconv mtrace secure_getenv __secure_getenv setreuid setuid stpcpy strerror vasprintf srandom glob_pattern_p]) + + AM_GNU_GETTEXT_VERSION([0.18.2]) + AM_GNU_GETTEXT([external]) diff --git a/package/popt/0004-fix-build-without-wchar.patch b/package/popt/0004-fix-build-without-wchar.patch new file mode 100644 index 00000000..a5bb0991 --- /dev/null +++ b/package/popt/0004-fix-build-without-wchar.patch @@ -0,0 +1,53 @@ +From 41911aac46d69df6a205af59d60f23a418b0e875 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Wed, 2 Sep 2020 11:55:17 +0200 +Subject: [PATCH] fix build without wchar + +Check for wchar.h and use HAVE_WCHAR_H instead of hardcoding +POPT_WCHAR_HACK to fix the build with (embedded) toolchains that don't +support wchar + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/rpm-software-management/popt/commit/41911aac46d69df6a205af59d60f23a418b0e875] +--- + configure.ac | 2 +- + src/popthelp.c | 5 ++--- + 2 files changed, 3 insertions(+), 4 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 009ae7b..1fce6df 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -18,7 +18,7 @@ LT_INIT + + AC_SYS_LARGEFILE + +-AC_CHECK_HEADERS([fnmatch.h glob.h langinfo.h libintl.h mcheck.h stdalign.h]) ++AC_CHECK_HEADERS([fnmatch.h glob.h langinfo.h libintl.h mcheck.h stdalign.h wchar.h]) + + # For some systems we know that we have ld_version scripts. + # Use it then as default. +diff --git a/src/popthelp.c b/src/popthelp.c +index 9a3f489..5cbc1f4 100644 +--- a/src/popthelp.c ++++ b/src/popthelp.c +@@ -15,8 +15,7 @@ + #include + #endif + +-#define POPT_WCHAR_HACK +-#ifdef POPT_WCHAR_HACK ++#ifdef HAVE_WCHAR_H + #include /* for mbsrtowcs */ + #endif + #include "poptint.h" +@@ -118,7 +117,7 @@ static size_t maxColumnWidth(FILE *fp) + static inline size_t stringDisplayWidth(const char *s) + { + size_t n = strlen(s); +-#ifdef POPT_WCHAR_HACK ++#ifdef HAVE_WCHAR_H + mbstate_t t; + + memset ((void *)&t, 0, sizeof (t)); /* In initial state. */ diff --git a/package/popt/0005-fix-build-without-mbstate_t.patch b/package/popt/0005-fix-build-without-mbstate_t.patch new file mode 100644 index 00000000..12bc73ee --- /dev/null +++ b/package/popt/0005-fix-build-without-mbstate_t.patch @@ -0,0 +1,68 @@ +From e4788a0f9d820574a165b2609ff16b717ce0baba Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 19 Sep 2020 18:51:15 +0200 +Subject: [PATCH] fix build without mbstate_t + +Commit 41911aac46d69df6a205af59d60f23a418b0e875 tried to fix build +without wchar by checking for the availability of wchar.h however some +toolchains have wchar.h but does not define mbstate_t and mbsrtowcs so +replace HAVE_WCHAR_H by HAVE_MBSRTOWCS + +Fixes: + - http://autobuild.buildroot.org/results/27f184af35468941173628e5e847a284c0b80d73 + +Signed-off-by: Fabrice Fontaine +[Upstream status: +https://github.com/rpm-software-management/popt/pull/51] +--- + configure.ac | 4 ++-- + src/popthelp.c | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 1fce6df..442086b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -18,7 +18,7 @@ LT_INIT + + AC_SYS_LARGEFILE + +-AC_CHECK_HEADERS([fnmatch.h glob.h langinfo.h libintl.h mcheck.h stdalign.h wchar.h]) ++AC_CHECK_HEADERS([fnmatch.h glob.h langinfo.h libintl.h mcheck.h stdalign.h]) + + # For some systems we know that we have ld_version scripts. + # Use it then as default. +@@ -50,7 +50,7 @@ AC_ARG_ENABLE([build-gcov], + ]) + + AC_SEARCH_LIBS([setreuid], [ucb]) +-AC_CHECK_FUNCS([getuid geteuid iconv mtrace secure_getenv __secure_getenv setreuid setuid stpcpy strerror vasprintf srandom glob_pattern_p]) ++AC_CHECK_FUNCS([getuid geteuid iconv mtrace secure_getenv __secure_getenv setreuid setuid stpcpy strerror vasprintf srandom glob_pattern_p mbsrtowcs]) + + AM_GNU_GETTEXT_VERSION([0.18.2]) + AM_GNU_GETTEXT([external]) +diff --git a/src/popthelp.c b/src/popthelp.c +index f604516..b4ab9b4 100644 +--- a/src/popthelp.c ++++ b/src/popthelp.c +@@ -15,7 +15,7 @@ + #include + #endif + +-#ifdef HAVE_WCHAR_H ++#ifdef HAVE_MBSRTOWCS + #include /* for mbsrtowcs */ + #endif + #include "poptint.h" +@@ -117,7 +117,7 @@ static size_t maxColumnWidth(FILE *fp) + static inline size_t stringDisplayWidth(const char *s) + { + size_t n = strlen(s); +-#ifdef HAVE_WCHAR_H ++#ifdef HAVE_MBSRTOWCS + mbstate_t t; + + memset ((void *)&t, 0, sizeof (t)); /* In initial state. */ +-- +2.28.0 + diff --git a/package/popt/Config.in b/package/popt/Config.in new file mode 100644 index 00000000..80bac7ff --- /dev/null +++ b/package/popt/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_POPT + bool "popt" + help + Popt is a C library for parsing command line parameters. + + https://github.com/rpm-software-management/popt diff --git a/package/popt/popt.hash b/package/popt/popt.hash new file mode 100644 index 00000000..9b5efe4b --- /dev/null +++ b/package/popt/popt.hash @@ -0,0 +1,3 @@ +# Locally calculated: +sha256 5159bc03a20b28ce363aa96765f37df99ea4d8850b1ece17d1e6ad5c24fdc5d1 popt-1.18.tar.gz +sha256 518d4f2a05064cb9a8ec0ea02e86408af4feed6916f78ef42171465db8b383c5 COPYING diff --git a/package/popt/popt.mk b/package/popt/popt.mk new file mode 100644 index 00000000..f00bf115 --- /dev/null +++ b/package/popt/popt.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# popt +# +################################################################################ + +POPT_VERSION = 1.18 +POPT_SITE = http://ftp.rpm.org/popt/releases/popt-1.x +POPT_INSTALL_STAGING = YES +POPT_LICENSE = MIT +POPT_LICENSE_FILES = COPYING +POPT_CPE_ID_VENDOR = popt_project + +POPT_GETTEXTIZE = YES +POPT_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) +# We're patching configure.ac +POPT_AUTORECONF = YES + +POPT_CONF_ENV = ac_cv_va_copy=yes + +ifeq ($(BR2_PACKAGE_LIBICONV),y) +POPT_CONF_ENV += am_cv_lib_iconv=yes +POPT_CONF_OPTS += --with-libiconv-prefix=$(STAGING_DIR)/usr +POPT_DEPENDENCIES += libiconv +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/portaudio/Config.in b/package/portaudio/Config.in new file mode 100644 index 00000000..18e87fde --- /dev/null +++ b/package/portaudio/Config.in @@ -0,0 +1,33 @@ +comment "portaudio needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_PORTAUDIO + bool "portaudio" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + PortAudio is a free, cross-platform, open-source, + audio I/O library. + + http://www.portaudio.com/ + +if BR2_PACKAGE_PORTAUDIO + +config BR2_PACKAGE_PORTAUDIO_ALSA + bool "alsa support" + default y + select BR2_PACKAGE_ALSA_LIB + help + Compile with ALSA support. + +config BR2_PACKAGE_PORTAUDIO_OSS + bool "oss support" + help + Compile with OSS support. + +config BR2_PACKAGE_PORTAUDIO_CXX + bool "C++ bindings" + depends on BR2_INSTALL_LIBSTDCPP + help + Enables C++ bindings. + +endif # BR2_PACKAGE_PORTAUDIO diff --git a/package/portaudio/portaudio.hash b/package/portaudio/portaudio.hash new file mode 100644 index 00000000..903d760c --- /dev/null +++ b/package/portaudio/portaudio.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 f5a21d7dcd6ee84397446fa1fa1a0675bb2e8a4a6dceb4305a8404698d8d1513 pa_stable_v190600_20161030.tgz +sha256 ec52a1952d701f94e5135719a47376da4ee0b4a0201f1cafb49f61db6480ac3d LICENSE.txt diff --git a/package/portaudio/portaudio.mk b/package/portaudio/portaudio.mk new file mode 100644 index 00000000..0cf754c7 --- /dev/null +++ b/package/portaudio/portaudio.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# portaudio +# +################################################################################ + +PORTAUDIO_VERSION = v190600_20161030 +PORTAUDIO_SITE = http://www.portaudio.com/archives +PORTAUDIO_SOURCE = pa_stable_$(PORTAUDIO_VERSION).tgz +PORTAUDIO_INSTALL_STAGING = YES +PORTAUDIO_MAKE = $(MAKE1) +PORTAUDIO_LICENSE = portaudio license (MIT-like plus special clause) +PORTAUDIO_LICENSE_FILES = LICENSE.txt + +PORTAUDIO_DEPENDENCIES = \ + $(if $(BR2_PACKAGE_PORTAUDIO_ALSA),alsa-lib) + +PORTAUDIO_CONF_OPTS = \ + $(if $(BR2_PACKAGE_PORTAUDIO_ALSA),--with-alsa,--without-alsa) \ + $(if $(BR2_PACKAGE_PORTAUDIO_OSS),--with-oss,--without-oss) \ + $(if $(BR2_PACKAGE_PORTAUDIO_CXX),--enable-cxx,--disable-cxx) + +$(eval $(autotools-package)) diff --git a/package/postgresql/Config.in b/package/postgresql/Config.in new file mode 100644 index 00000000..2debdc24 --- /dev/null +++ b/package/postgresql/Config.in @@ -0,0 +1,33 @@ +config BR2_PACKAGE_POSTGRESQL + bool "postgresql" + depends on BR2_USE_MMU # fork() + depends on BR2_USE_WCHAR + # fails to build in a pure static linking scenario, and + # postgresql is unlikely to be used in a pure statically + # linked environment. + depends on !BR2_STATIC_LIBS + help + PostgreSQL is a powerful, open source object-relational + database system. + + Enable the readline package to gain readline support in + psql (the command line interpreter), which offers + command history and edit functions. + + Enable the zlib package to gain builtin compression for + archives with pg_dump and pg_restore. + + http://www.postgresql.org + +if BR2_PACKAGE_POSTGRESQL + +config BR2_PACKAGE_POSTGRESQL_FULL + bool "postgresql-full" + help + Build PostgreSQL, contrib, and documentation. + +endif + +comment "postgresql needs a toolchain w/ dynamic library, wchar" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS || !BR2_USE_WCHAR diff --git a/package/postgresql/S50postgresql b/package/postgresql/S50postgresql new file mode 100644 index 00000000..1ece4fca --- /dev/null +++ b/package/postgresql/S50postgresql @@ -0,0 +1,44 @@ +#!/bin/sh +# +# start postgresql +# + +umask 077 + +if [ ! -f /var/lib/pgsql/PG_VERSION ]; then + echo "Initializing postgresql data base..." + su - postgres -c '/usr/bin/pg_ctl initdb -D /var/lib/pgsql' + echo "done" +fi + +start() { + printf "Starting postgresql: " + su - postgres -c '/usr/bin/pg_ctl start -w -D /var/lib/pgsql -l logfile' + echo "OK" +} +stop() { + printf "Stopping postgresql: " + su - postgres -c '/usr/bin/pg_ctl stop -D /var/lib/pgsql -m fast' + echo "OK" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/postgresql/pg_config b/package/postgresql/pg_config new file mode 100644 index 00000000..099f1ee3 --- /dev/null +++ b/package/postgresql/pg_config @@ -0,0 +1,79 @@ +#!/bin/sh + +# +# Minimal pg_config implementation as replacement for the native pg_config application +# + +prefix=/usr + +case "$1" in + --includedir) + echo "$prefix/include" + ;; + --pkgincludedir) + echo "$prefix/include/postgresql" + ;; + --includedir-server) + echo "$prefix/include/postgresql/server" + ;; + --libdir) + echo "$prefix/lib" + ;; + --version) + echo "PostgreSQL @POSTGRESQL_VERSION@" + ;; + --configure) + echo "@POSTGRESQL_CONF_OPTIONS@" + ;; + --pgxs) + echo "$prefix/lib/postgresql/pgxs/src/makefiles/pgxs.mk" + ;; + --cflags) + echo "@TARGET_CFLAGS@" + ;; + --cflags_sl) + # defined at src/template/linux + echo "-fPIC" + ;; + --cc) + echo "@TARGET_CC@" + ;; + --pkglibdir) + echo "/usr/lib/postgresql" + ;; + --bindir) + echo "/usr/bin" + ;; + --sharedir) + echo "/usr/share/postgresql" + ;; + --localedir) + echo "/usr/share/locale" + ;; + --docdir) + echo "/usr/share/doc/postgresql" + ;; + --mandir) + echo "/usr/share/man" + ;; + *) + echo "Usage: $0 {OPTION}" + echo + echo "Options:" + echo + echo " --includedir show location of C header files of the client interfaces" + echo " --pkgincludedir show location of other C header files" + echo " --includedir-server show location of C header files for the server" + echo " --libdir show location of object code libraries" + echo " --version show the PostgreSQL version" + echo " --configure show options given to configure script" + echo " --pgxs show location of extension makefile" + echo " --cflags show CFLAGS value used when PostgreSQL was built" + echo " --cc show CC value used when PostgreSQL was built" + echo " --pkglibdir show location of dynamically loadable modules" + echo " --bindir show location of user executables" + echo " --sharedir show location of architecture-independent support files" + echo " --localedir show location of locale support files" + echo " --docdir show location of documentation files" + echo " --mandir show location of manual pages" +esac diff --git a/package/postgresql/postgresql.hash b/package/postgresql/postgresql.hash new file mode 100644 index 00000000..caa8a1f5 --- /dev/null +++ b/package/postgresql/postgresql.hash @@ -0,0 +1,5 @@ +# From https://ftp.postgresql.org/pub/source/v13.3/postgresql-13.3.tar.bz2.sha256 +sha256 3cd9454fa8c7a6255b6743b767700925ead1b9ab0d7a0f9dcb1151010f8eb4a1 postgresql-13.3.tar.bz2 + +# License file, Locally calculated +sha256 31ccadc0a70e8e0e8a35c5833567b64388dfe34987d962e1911554e271294105 COPYRIGHT diff --git a/package/postgresql/postgresql.mk b/package/postgresql/postgresql.mk new file mode 100644 index 00000000..cab55538 --- /dev/null +++ b/package/postgresql/postgresql.mk @@ -0,0 +1,141 @@ +################################################################################ +# +# postgresql +# +################################################################################ + +POSTGRESQL_VERSION = 13.3 +POSTGRESQL_SOURCE = postgresql-$(POSTGRESQL_VERSION).tar.bz2 +POSTGRESQL_SITE = https://ftp.postgresql.org/pub/source/v$(POSTGRESQL_VERSION) +POSTGRESQL_LICENSE = PostgreSQL +POSTGRESQL_LICENSE_FILES = COPYRIGHT +POSTGRESQL_CPE_ID_VENDOR = postgresql +POSTGRESQL_INSTALL_STAGING = YES +POSTGRESQL_CONFIG_SCRIPTS = pg_config +POSTGRESQL_CONF_ENV = \ + ac_cv_type_struct_sockaddr_in6=yes \ + LIBS=$(TARGET_NLS_LIBS) +POSTGRESQL_CONF_OPTS = --disable-rpath +POSTGRESQL_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) + +# https://www.postgresql.org/docs/11/static/install-procedure.html: +# "If you want to invoke the build from another makefile rather than +# manually, you must unset MAKELEVEL or set it to zero" +POSTGRESQL_MAKE_OPTS = MAKELEVEL=0 + +ifeq ($(BR2_PACKAGE_POSTGRESQL_FULL),y) +POSTGRESQL_MAKE_OPTS += world +POSTGRESQL_INSTALL_TARGET_OPTS += DESTDIR=$(TARGET_DIR) install-world +POSTGRESQL_INSTALL_STAGING_OPTS += DESTDIR=$(STAGING_DIR) install-world +endif + +ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y) +# PostgreSQL does not build against uClibc with locales +# enabled, due to an uClibc bug, see +# http://lists.uclibc.org/pipermail/uclibc/2014-April/048326.html +# so overwrite automatic detection and disable locale support +POSTGRESQL_CONF_ENV += pgac_cv_type_locale_t=no +endif + +ifneq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +POSTGRESQL_CONF_OPTS += --disable-thread-safety +endif + +ifeq ($(BR2_arcle)$(BR2_arceb)$(BR2_microblazeel)$(BR2_microblazebe)$(BR2_or1k)$(BR2_nios2)$(BR2_riscv)$(BR2_xtensa)$(BR2_nds32),y) +POSTGRESQL_CONF_OPTS += --disable-spinlocks +endif + +ifeq ($(BR2_PACKAGE_READLINE),y) +POSTGRESQL_DEPENDENCIES += readline +else +POSTGRESQL_CONF_OPTS += --without-readline +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +POSTGRESQL_DEPENDENCIES += zlib +else +POSTGRESQL_CONF_OPTS += --without-zlib +endif + +ifeq ($(BR2_PACKAGE_TZDATA),y) +POSTGRESQL_DEPENDENCIES += tzdata +POSTGRESQL_CONF_OPTS += --with-system-tzdata=/usr/share/zoneinfo +else +POSTGRESQL_DEPENDENCIES += host-zic +POSTGRESQL_CONF_ENV += ZIC="$(ZIC)" +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +POSTGRESQL_DEPENDENCIES += openssl +POSTGRESQL_CONF_OPTS += --with-openssl +else +# PostgreSQL checks for /dev/urandom and fails if it's being cross-compiled and +# an SSL library isn't found. Since /dev/urandom is guaranteed to be provided +# on Linux systems, explicitly tell the configure script it's available. +POSTGRESQL_CONF_ENV += ac_cv_file__dev_urandom=yes +endif + +ifeq ($(BR2_PACKAGE_OPENLDAP),y) +POSTGRESQL_DEPENDENCIES += openldap +POSTGRESQL_CONF_OPTS += --with-ldap +else +POSTGRESQL_CONF_OPTS += --without-ldap +endif + +ifeq ($(BR2_PACKAGE_LIBXML2),y) +POSTGRESQL_DEPENDENCIES += libxml2 +POSTGRESQL_CONF_OPTS += --with-libxml +POSTGRESQL_CONF_ENV += XML2_CONFIG=$(STAGING_DIR)/usr/bin/xml2-config +else +POSTGRESQL_CONF_OPTS += --without-libxml +endif + +# required for postgresql.service Type=notify +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +POSTGRESQL_DEPENDENCIES += systemd +POSTGRESQL_CONF_OPTS += --with-systemd +else +POSTGRESQL_CONF_OPTS += --without-systemd +endif + +POSTGRESQL_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y) +POSTGRESQL_CFLAGS += -O0 +endif + +POSTGRESQL_CONF_ENV += CFLAGS="$(POSTGRESQL_CFLAGS)" + +define POSTGRESQL_USERS + postgres -1 postgres -1 * /var/lib/pgsql /bin/sh - PostgreSQL Server +endef + +define POSTGRESQL_INSTALL_TARGET_FIXUP + $(INSTALL) -dm 0700 $(TARGET_DIR)/var/lib/pgsql + $(RM) -rf $(TARGET_DIR)/usr/lib/postgresql/pgxs +endef + +POSTGRESQL_POST_INSTALL_TARGET_HOOKS += POSTGRESQL_INSTALL_TARGET_FIXUP + +define POSTGRESQL_INSTALL_CUSTOM_PG_CONFIG + $(INSTALL) -m 0755 -D package/postgresql/pg_config \ + $(STAGING_DIR)/usr/bin/pg_config + $(SED) "s|@POSTGRESQL_CONF_OPTIONS@|$(POSTGRESQL_CONF_OPTS)|g" $(STAGING_DIR)/usr/bin/pg_config + $(SED) "s|@POSTGRESQL_VERSION@|$(POSTGRESQL_VERSION)|g" $(STAGING_DIR)/usr/bin/pg_config + $(SED) "s|@TARGET_CFLAGS@|$(TARGET_CFLAGS)|g" $(STAGING_DIR)/usr/bin/pg_config + $(SED) "s|@TARGET_CC@|$(TARGET_CC)|g" $(STAGING_DIR)/usr/bin/pg_config +endef + +POSTGRESQL_POST_INSTALL_STAGING_HOOKS += POSTGRESQL_INSTALL_CUSTOM_PG_CONFIG + +define POSTGRESQL_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/postgresql/S50postgresql \ + $(TARGET_DIR)/etc/init.d/S50postgresql +endef + +define POSTGRESQL_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/postgresql/postgresql.service \ + $(TARGET_DIR)/usr/lib/systemd/system/postgresql.service +endef + +$(eval $(autotools-package)) diff --git a/package/postgresql/postgresql.service b/package/postgresql/postgresql.service new file mode 100644 index 00000000..539eea89 --- /dev/null +++ b/package/postgresql/postgresql.service @@ -0,0 +1,27 @@ +[Unit] +Description=PostgreSQL database server +After=network.target + +[Service] +Type=notify + +# start timeout disabled because initdb may run a little +# longer (eg. 5 minutes on RaspberryPi) +TimeoutStartSec=0 + +User=postgres +Group=postgres + +StandardOutput=syslog +StandardError=syslog +SyslogIdentifier=postgres + +ExecStartPre=/bin/sh -c "if [ ! -f /var/lib/pgsql/PG_VERSION ]; then /usr/bin/pg_ctl initdb -D /var/lib/pgsql; fi" +ExecStart=/usr/bin/postgres -D /var/lib/pgsql +ExecReload=/usr/bin/kill -HUP $MAINPID +KillMode=mixed +KillSignal=SIGINT +TimeoutSec=0 + +[Install] +WantedBy=multi-user.target diff --git a/package/pound/0001-fix-openssl-1.0.2.patch b/package/pound/0001-fix-openssl-1.0.2.patch new file mode 100644 index 00000000..b20fdb36 --- /dev/null +++ b/package/pound/0001-fix-openssl-1.0.2.patch @@ -0,0 +1,127 @@ +From eb471de8f26e0367dd08d299d2252fa8b2b958a9 Mon Sep 17 00:00:00 2001 +From: Emilio +Date: Mon, 17 Jul 2017 09:41:32 +0200 +Subject: [PATCH] [Improvement] Added support to compile pound with openssl + 1.0.2 + +Signed-off-by: Emilio + + new file: dh2048.h + modified: svc.c + +Patch was downloaded from 3rd-party repo: +https://github.com/zevenet/pound/commit/eb471de8f26e0367dd08d299d2252fa8b2b958a9 + +This repo was announced on upstream mailinglist: +http://www.apsis.ch/pound/pound_list/archive/2017/2017-07/1500287626000#1500287626000 + +Signed-off-by: Bernd Kuhls +--- + dh2048.h | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + svc.c | 33 +++++++++++++++++++++++++++++++++ + 2 files changed, 86 insertions(+) + create mode 100644 dh2048.h + +diff --git a/dh2048.h b/dh2048.h +new file mode 100644 +index 0000000..79c693c +--- /dev/null ++++ b/dh2048.h +@@ -0,0 +1,53 @@ ++#ifndef HEADER_DH_H ++# include ++#endif ++ ++DH *get_dh2048() ++{ ++ static unsigned char dhp_2048[] = { ++ 0xBF, 0x6C, 0xC6, 0xBD, 0xEA, 0x10, 0x84, 0x59, 0x40, 0xC2, ++ 0xC6, 0xA2, 0x9B, 0x19, 0xD3, 0x2E, 0x2F, 0xAB, 0xE6, 0xE4, ++ 0x1E, 0x91, 0x0D, 0x59, 0xDC, 0x96, 0x3F, 0x6E, 0x65, 0x38, ++ 0xB9, 0xBE, 0xBB, 0x8F, 0xDF, 0x73, 0xAC, 0xAC, 0xB3, 0x2F, ++ 0xA7, 0x02, 0x0B, 0x87, 0xB7, 0x3F, 0x3A, 0x42, 0x8A, 0x94, ++ 0xDD, 0xEC, 0x33, 0xA4, 0x25, 0xB1, 0xBF, 0x84, 0x91, 0x87, ++ 0xD8, 0x1C, 0x42, 0xB9, 0x8E, 0x00, 0x1F, 0x49, 0xED, 0x57, ++ 0xA4, 0x48, 0xB0, 0xCC, 0xD8, 0xB8, 0x83, 0xCA, 0x3E, 0xDF, ++ 0xA2, 0xF2, 0x07, 0x71, 0x71, 0x18, 0x1F, 0x50, 0x45, 0x3A, ++ 0x66, 0x04, 0x7F, 0x15, 0xB2, 0xA8, 0x02, 0x77, 0xCE, 0xC6, ++ 0xF9, 0x7C, 0x63, 0xE4, 0x52, 0x41, 0xFA, 0x62, 0xB9, 0x0D, ++ 0xDC, 0x08, 0x62, 0xEC, 0x00, 0xAB, 0xB0, 0xF7, 0x79, 0x48, ++ 0x75, 0x22, 0x85, 0xCC, 0x67, 0x3C, 0xEA, 0x09, 0x32, 0xAC, ++ 0x30, 0xED, 0x1E, 0x67, 0xDC, 0x74, 0xF8, 0xD9, 0xC3, 0xD0, ++ 0xA0, 0x60, 0x4D, 0xCE, 0x52, 0xBC, 0xA3, 0xE5, 0x18, 0x7B, ++ 0x0B, 0xC8, 0xCE, 0x70, 0xA2, 0xC8, 0x21, 0xCA, 0xCE, 0xA5, ++ 0xD4, 0xCB, 0x85, 0xFC, 0xC7, 0x07, 0x5C, 0x05, 0x87, 0xFC, ++ 0x2F, 0x67, 0x4D, 0x2D, 0x4F, 0xA4, 0xEE, 0x63, 0x98, 0x49, ++ 0xE4, 0x2E, 0xD7, 0x3F, 0x7D, 0x69, 0x68, 0x0A, 0xA2, 0x3E, ++ 0x5A, 0x04, 0xD4, 0xDD, 0xBB, 0xC7, 0xB4, 0x34, 0xB7, 0x21, ++ 0xD3, 0xAC, 0x99, 0xD7, 0x87, 0x45, 0x5E, 0x18, 0x68, 0x16, ++ 0x3A, 0xAF, 0xE2, 0x04, 0x57, 0xB8, 0x6A, 0xB8, 0x2F, 0x75, ++ 0xD5, 0x79, 0x96, 0x60, 0x8D, 0xD1, 0xCC, 0xD1, 0x33, 0x85, ++ 0x53, 0x88, 0x87, 0x34, 0xA6, 0x4B, 0x49, 0x24, 0x53, 0xD6, ++ 0xF1, 0x1E, 0x4E, 0x98, 0x4D, 0x6B, 0x44, 0x31, 0x94, 0xFF, ++ 0x46, 0xC2, 0x38, 0x2E, 0xEA, 0xBB ++ }; ++ static unsigned char dhg_2048[] = { ++ 0x05 ++ }; ++ DH *dh = DH_new(); ++ BIGNUM *dhp_bn, *dhg_bn; ++ ++ if (dh == NULL) ++ return NULL; ++ dhp_bn = BN_bin2bn(dhp_2048, sizeof (dhp_2048), NULL); ++ dhg_bn = BN_bin2bn(dhg_2048, sizeof (dhg_2048), NULL); ++ if (dhp_bn == NULL || dhg_bn == NULL ++ || !DH_set0_pqg(dh, dhp_bn, NULL, dhg_bn)) { ++ DH_free(dh); ++ BN_free(dhp_bn); ++ BN_free(dhg_bn); ++ return NULL; ++ } ++ return dh; ++} +diff --git a/svc.c b/svc.c +index 1341397..758dfbd 100644 +--- a/svc.c ++++ b/svc.c +@@ -1512,6 +1512,39 @@ do_RSAgen(void) + return; + } + ++ ++#if OPENSSL_VERSION_NUMBER < 0x10100000 ++static inline int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g) ++{ ++ /* If the fields p and g in d are NULL, the corresponding input ++ * parameters MUST be non-NULL. q may remain NULL. ++ */ ++ if ((dh->p == NULL && p == NULL) ++ || (dh->g == NULL && g == NULL)) ++ return 0; ++ ++ if (p != NULL) { ++ BN_free(dh->p); ++ dh->p = p; ++ } ++ if (q != NULL) { ++ BN_free(dh->q); ++ dh->q = q; ++ } ++ if (g != NULL) { ++ BN_free(dh->g); ++ dh->g = g; ++ } ++ ++ if (q != NULL) { ++ dh->length = BN_num_bits(q); ++ } ++ ++ return 1; ++} ++#endif ++ ++ + #include "dh512.h" + + #if DH_LEN == 1024 diff --git a/package/pound/0002-fix-openssl-1.1.0.patch b/package/pound/0002-fix-openssl-1.1.0.patch new file mode 100644 index 00000000..04eddb15 --- /dev/null +++ b/package/pound/0002-fix-openssl-1.1.0.patch @@ -0,0 +1,334 @@ +From a2c9dde4d055ea8942afb150b7fc3a807d4e5d60 Mon Sep 17 00:00:00 2001 +From: Sergey Poznyakoff +Date: Wed, 28 Feb 2018 13:44:01 +0000 +Subject: [PATCH] Support for Openssl 1.1 + +Fixes +http://autobuild.buildroot.net/results/ef2/ef2de6c280bf8622a00d4573bc5bd143e3baa002 + +Downloaded from github fork: +https://github.com/graygnuorg/pound/commit/a2c9dde4d055ea8942afb150b7fc3a807d4e5d60 + +This patch was announced on the upstream mailinglist: +http://www.apsis.ch/pound/pound_list/archive/2018/2018-03/1519920322000 + +Signed-off-by: Bernd Kuhls +--- + .gitignore | 15 ++++++++ + config.c | 17 +++++++-- + http.c | 12 ++++++- + pound.h | 4 ++- + svc.c | 101 +++++++++++++++++++++++++++++++++++++++++++---------- + 5 files changed, 125 insertions(+), 24 deletions(-) + create mode 100644 .gitignore + +diff --git a/config.c b/config.c +index d41a3ee..e8fec0f 100644 +--- a/config.c ++++ b/config.c +@@ -174,6 +174,16 @@ conf_fgets(char *buf, const int max) + } + } + ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++# define general_name_string(n) \ ++ strndup(ASN1_STRING_get0_data(n->d.dNSName), \ ++ ASN1_STRING_length(n->d.dNSName) + 1) ++#else ++# define general_name_string(n) \ ++ strndup(ASN1_STRING_data(n->d.dNSName), \ ++ ASN1_STRING_length(n->d.dNSName) + 1) ++#endif ++ + unsigned char ** + get_subjectaltnames(X509 *x509, unsigned int *count) + { +@@ -194,8 +204,7 @@ get_subjectaltnames(X509 *x509, unsigned int *count) + name = sk_GENERAL_NAME_pop(san_stack); + switch(name->type) { + case GEN_DNS: +- temp[local_count] = strndup(ASN1_STRING_data(name->d.dNSName), ASN1_STRING_length(name->d.dNSName) +- + 1); ++ temp[local_count] = general_name_string(name); + if(temp[local_count] == NULL) + conf_err("out of memory"); + local_count++; +@@ -565,7 +574,9 @@ parse_service(const char *svc_name) + pthread_mutex_init(&res->mut, NULL); + if(svc_name) + strncpy(res->name, svc_name, KEY_SIZE); +-#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ if((res->sessions = lh_TABNODE_new(t_hash, t_cmp)) == NULL) ++#elif OPENSSL_VERSION_NUMBER >= 0x10000000L + if((res->sessions = LHM_lh_new(TABNODE, t)) == NULL) + #else + if((res->sessions = lh_new(LHASH_HASH_FN(t_hash), LHASH_COMP_FN(t_cmp))) == NULL) +diff --git a/http.c b/http.c +index dd211e4..c8e756a 100644 +--- a/http.c ++++ b/http.c +@@ -527,12 +527,22 @@ log_bytes(char *res, const LONG cnt) + + /* Cleanup code. This should really be in the pthread_cleanup_push, except for bugs in some implementations */ + ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++# define clear_error() ++#elif OPENSSL_VERSION_NUMBER >= 0x10000000L ++# define clear_error() \ ++ if(ssl != NULL) { ERR_clear_error(); ERR_remove_thread_state(NULL); } ++#else ++# define clear_error() \ ++ if(ssl != NULL) { ERR_clear_error(); ERR_remove_state(0); } ++#endif ++ + #define clean_all() { \ + if(ssl != NULL) { BIO_ssl_shutdown(cl); } \ + if(be != NULL) { BIO_flush(be); BIO_reset(be); BIO_free_all(be); be = NULL; } \ + if(cl != NULL) { BIO_flush(cl); BIO_reset(cl); BIO_free_all(cl); cl = NULL; } \ + if(x509 != NULL) { X509_free(x509); x509 = NULL; } \ +- if(ssl != NULL) { ERR_clear_error(); ERR_remove_state(0); } \ ++ clear_error(); \ + } + + /* +diff --git a/pound.h b/pound.h +index fa22c36..9603b91 100644 +--- a/pound.h ++++ b/pound.h +@@ -344,7 +344,9 @@ typedef struct _tn { + /* maximal session key size */ + #define KEY_SIZE 127 + +-#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ DEFINE_LHASH_OF(TABNODE); ++#elif OPENSSL_VERSION_NUMBER >= 0x10000000L + DECLARE_LHASH_OF(TABNODE); + #endif + +diff --git a/svc.c b/svc.c +index 60ba488..063b92c 100644 +--- a/svc.c ++++ b/svc.c +@@ -27,10 +27,17 @@ + + #include "pound.h" + ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++# define TABNODE_GET_DOWN_LOAD(t) lh_TABNODE_get_down_load(t) ++# define TABNODE_SET_DOWN_LOAD(t,n) lh_TABNODE_set_down_load(t,n) ++#else + #ifndef LHASH_OF + #define LHASH_OF(x) LHASH + #define CHECKED_LHASH_OF(type, h) h + #endif ++# define TABNODE_GET_DOWN_LOAD(t) (CHECKED_LHASH_OF(TABNODE, t)->down_load) ++# define TABNODE_SET_DOWN_LOAD(t,n) (CHECKED_LHASH_OF(TABNODE, t)->down_load = n) ++#endif + + /* + * Add a new key/content pair to a hash table +@@ -58,7 +65,9 @@ t_add(LHASH_OF(TABNODE) *const tab, const char *key, const void *content, const + } + memcpy(t->content, content, cont_len); + t->last_acc = time(NULL); +-#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ if((old = lh_TABNODE_insert(tab, t)) != NULL) { ++#elif OPENSSL_VERSION_NUMBER >= 0x10000000L + if((old = LHM_lh_insert(TABNODE, tab, t)) != NULL) { + #else + if((old = (TABNODE *)lh_insert(tab, t)) != NULL) { +@@ -82,7 +91,9 @@ t_find(LHASH_OF(TABNODE) *const tab, char *const key) + TABNODE t, *res; + + t.key = key; +-#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ if((res = lh_TABNODE_retrieve(tab, &t)) != NULL) { ++#elif OPENSSL_VERSION_NUMBER >= 0x10000000L + if((res = (TABNODE *)LHM_lh_retrieve(TABNODE, tab, &t)) != NULL) { + #else + if((res = (TABNODE *)lh_retrieve(tab, &t)) != NULL) { +@@ -102,7 +113,9 @@ t_remove(LHASH_OF(TABNODE) *const tab, char *const key) + TABNODE t, *res; + + t.key = key; +-#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ if((res = lh_TABNODE_delete(tab, &t)) != NULL) { ++#elif OPENSSL_VERSION_NUMBER >= 0x10000000L + if((res = LHM_lh_delete(TABNODE, tab, &t)) != NULL) { + #else + if((res = (TABNODE *)lh_delete(tab, &t)) != NULL) { +@@ -127,7 +140,9 @@ t_old_doall_arg(TABNODE *t, ALL_ARG *a) + TABNODE *res; + + if(t->last_acc < a->lim) +-#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ if((res = lh_TABNODE_delete(a->tab, t)) != NULL) { ++#elif OPENSSL_VERSION_NUMBER >= 0x10000000L + if((res = LHM_lh_delete(TABNODE, a->tab, t)) != NULL) { + #else + if((res = lh_delete(a->tab, t)) != NULL) { +@@ -145,6 +160,10 @@ IMPLEMENT_LHASH_DOALL_ARG_FN(t_old, TABNODE, ALL_ARG) + IMPLEMENT_LHASH_DOALL_ARG_FN(t_old, TABNODE *, ALL_ARG *) + #endif + ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++IMPLEMENT_LHASH_DOALL_ARG(TABNODE,ALL_ARG); ++#endif ++ + /* + * Expire all old nodes + */ +@@ -156,14 +175,16 @@ t_expire(LHASH_OF(TABNODE) *const tab, const time_t lim) + + a.tab = tab; + a.lim = lim; +- down_load = CHECKED_LHASH_OF(TABNODE, tab)->down_load; +- CHECKED_LHASH_OF(TABNODE, tab)->down_load = 0; +-#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++ down_load = TABNODE_GET_DOWN_LOAD(tab); ++ TABNODE_SET_DOWN_LOAD(tab, 0); ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ lh_TABNODE_doall_ALL_ARG(tab, t_old_doall_arg, &a); ++#elif OPENSSL_VERSION_NUMBER >= 0x10000000L + LHM_lh_doall_arg(TABNODE, tab, LHASH_DOALL_ARG_FN(t_old), ALL_ARG, &a); + #else + lh_doall_arg(tab, LHASH_DOALL_ARG_FN(t_old), &a); + #endif +- CHECKED_LHASH_OF(TABNODE, tab)->down_load = down_load; ++ TABNODE_SET_DOWN_LOAD(tab, down_load); + return; + } + +@@ -173,7 +194,9 @@ t_cont_doall_arg(TABNODE *t, ALL_ARG *arg) + TABNODE *res; + + if(memcmp(t->content, arg->content, arg->cont_len) == 0) +-#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ if((res = lh_TABNODE_delete(arg->tab, t)) != NULL) { ++#elif OPENSSL_VERSION_NUMBER >= 0x10000000L + if((res = LHM_lh_delete(TABNODE, arg->tab, t)) != NULL) { + #else + if((res = lh_delete(arg->tab, t)) != NULL) { +@@ -203,15 +226,16 @@ t_clean(LHASH_OF(TABNODE) *const tab, void *const content, const size_t cont_len + a.tab = tab; + a.content = content; + a.cont_len = cont_len; +- down_load = CHECKED_LHASH_OF(TABNODE, tab)->down_load; +- CHECKED_LHASH_OF(TABNODE, tab)->down_load = 0; +-#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++ down_load = TABNODE_GET_DOWN_LOAD(tab); ++ TABNODE_SET_DOWN_LOAD(tab, 0); ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ lh_TABNODE_doall_ALL_ARG(tab, t_cont_doall_arg, &a); ++#elif OPENSSL_VERSION_NUMBER >= 0x10000000L + LHM_lh_doall_arg(TABNODE, tab, LHASH_DOALL_ARG_FN(t_cont), ALL_ARG, &a); + #else + lh_doall_arg(tab, LHASH_DOALL_ARG_FN(t_cont), &a); + #endif +- CHECKED_LHASH_OF(TABNODE, tab)->down_load = down_load; +- return; ++ TABNODE_SET_DOWN_LOAD(tab, down_load); + } + + /* +@@ -1262,6 +1286,31 @@ RSA_tmp_callback(/* not used */SSL *ssl, /* not used */int is_export, int keylen + return res; + } + ++static int ++generate_key(RSA **ret_rsa, unsigned long bits) ++{ ++#if OPENSSL_VERSION_NUMBER > 0x00908000L ++ int rc = 0; ++ RSA *rsa; ++ ++ rsa = RSA_new(); ++ if (rsa) { ++ BIGNUM *bne = BN_new(); ++ if (BN_set_word(bne, RSA_F4)) ++ rc = RSA_generate_key_ex(rsa, bits, bne, NULL); ++ BN_free(bne); ++ if (rc) ++ *ret_rsa = rsa; ++ else ++ RSA_free(rsa); ++ } ++ return rc; ++#else ++ *ret_rsa = RSA_generate_key(bits, RSA_F4, NULL, NULL); ++ return *ret_rsa != NULL; ++#endif ++} ++ + /* + * Periodically regenerate ephemeral RSA keys + * runs every T_RSA_KEYS seconds +@@ -1274,8 +1323,9 @@ do_RSAgen(void) + RSA *t_RSA1024_keys[N_RSA_KEYS]; + + for(n = 0; n < N_RSA_KEYS; n++) { +- t_RSA512_keys[n] = RSA_generate_key(512, RSA_F4, NULL, NULL); +- t_RSA1024_keys[n] = RSA_generate_key(1024, RSA_F4, NULL, NULL); ++ /* FIXME: Error handling */ ++ generate_key(&t_RSA512_keys[n], 512); ++ generate_key(&t_RSA1024_keys[n], 1024); + } + if(ret_val = pthread_mutex_lock(&RSA_mut)) + logmsg(LOG_WARNING, "thr_RSAgen() lock: %s", strerror(ret_val)); +@@ -1329,11 +1379,11 @@ init_timer(void) + * Pre-generate ephemeral RSA keys + */ + for(n = 0; n < N_RSA_KEYS; n++) { +- if((RSA512_keys[n] = RSA_generate_key(512, RSA_F4, NULL, NULL)) == NULL) { ++ if(!generate_key(&RSA512_keys[n], 512)) { + logmsg(LOG_WARNING,"RSA_generate(%d, 512) failed", n); + return; + } +- if((RSA1024_keys[n] = RSA_generate_key(1024, RSA_F4, NULL, NULL)) == NULL) { ++ if(!generate_key(&RSA1024_keys[n], 1024)) { + logmsg(LOG_WARNING,"RSA_generate(%d, 1024) failed", n); + return; + } +@@ -1420,6 +1470,10 @@ IMPLEMENT_LHASH_DOALL_ARG_FN(t_dump, TABNODE, DUMP_ARG) + IMPLEMENT_LHASH_DOALL_ARG_FN(t_dump, TABNODE *, DUMP_ARG *) + #endif + ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++IMPLEMENT_LHASH_DOALL_ARG(TABNODE,DUMP_ARG); ++#endif ++ + /* + * write sessions to the control socket + */ +@@ -1430,7 +1484,9 @@ dump_sess(const int control_sock, LHASH_OF(TABNODE) *const sess, BACKEND *const + + a.control_sock = control_sock; + a.backends = backends; +-#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ lh_TABNODE_doall_DUMP_ARG(sess, t_dump_doall_arg, &a); ++#elif OPENSSL_VERSION_NUMBER >= 0x10000000L + LHM_lh_doall_arg(TABNODE, sess, LHASH_DOALL_ARG_FN(t_dump), DUMP_ARG, &a); + #else + lh_doall_arg(sess, LHASH_DOALL_ARG_FN(t_dump), &a); +@@ -1664,6 +1720,13 @@ thr_control(void *arg) + } + } + ++#ifndef SSL3_ST_SR_CLNT_HELLO_A ++# define SSL3_ST_SR_CLNT_HELLO_A (0x110|SSL_ST_ACCEPT) ++#endif ++#ifndef SSL23_ST_SR_CLNT_HELLO_A ++# define SSL23_ST_SR_CLNT_HELLO_A (0x210|SSL_ST_ACCEPT) ++#endif ++ + void + SSLINFO_callback(const SSL *ssl, int where, int rc) + { diff --git a/package/pound/0003-Support-for-libressl-coexisting-with-openssl-1.1.x.patch b/package/pound/0003-Support-for-libressl-coexisting-with-openssl-1.1.x.patch new file mode 100644 index 00000000..3befc271 --- /dev/null +++ b/package/pound/0003-Support-for-libressl-coexisting-with-openssl-1.1.x.patch @@ -0,0 +1,140 @@ +From 145b88d0c1a71ba6f4d216768388e0c5853d3990 Mon Sep 17 00:00:00 2001 +From: Matt Weber +Date: Tue, 5 Feb 2019 10:34:55 -0600 +Subject: [PATCH] Support for libressl coexisting with openssl 1.1.x +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +libressl needs to not follow the 1.1.x path of APIs + +Resolves build failure like +In file included from svc.c:28:0: +pound.h:348:3: warning: data definition has no type or storage class + DEFINE_LHASH_OF(TABNODE); + ^~~~~~~~~~~~~~~ +pound.h:348:3: warning: type defaults to ‘int’ in declaration of ‘DEFINE_LHASH_OF’ [-Wimplicit-int] +svc.c: In function ‘t_add’: +svc.c:69:15: warning: implicit declaration of function ‘lh_TABNODE_insert’; did you mean ‘lh_OBJ_NAME_insert’? [-Wimplicit-function-declaration] + if((old = lh_TABNODE_insert(tab, t)) != NULL) { + ^~~~~~~~~~~~~~~~~ + lh_OBJ_NAME_insert + +Upstream: Site was down when I tried (http://www.apsis.ch/pound) + +Signed-off-by: Matthew Weber +--- + config.c | 2 +- + svc.c | 20 ++++++++++---------- + 2 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/config.c b/config.c +index 58b928e..3ad7fbb 100644 +--- a/config.c ++++ b/config.c +@@ -574,7 +574,7 @@ parse_service(const char *svc_name) + pthread_mutex_init(&res->mut, NULL); + if(svc_name) + strncpy(res->name, svc_name, KEY_SIZE); +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined LIBRESSL_VERSION_NUMBER + if((res->sessions = lh_TABNODE_new(t_hash, t_cmp)) == NULL) + #elif OPENSSL_VERSION_NUMBER >= 0x10000000L + if((res->sessions = LHM_lh_new(TABNODE, t)) == NULL) +diff --git a/svc.c b/svc.c +index f125be4..8a2f62c 100644 +--- a/svc.c ++++ b/svc.c +@@ -27,7 +27,7 @@ + + #include "pound.h" + +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined LIBRESSL_VERSION_NUMBER + # define TABNODE_GET_DOWN_LOAD(t) lh_TABNODE_get_down_load(t) + # define TABNODE_SET_DOWN_LOAD(t,n) lh_TABNODE_set_down_load(t,n) + #else +@@ -65,7 +65,7 @@ t_add(LHASH_OF(TABNODE) *const tab, const char *key, const void *content, const + } + memcpy(t->content, content, cont_len); + t->last_acc = time(NULL); +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined LIBRESSL_VERSION_NUMBER + if((old = lh_TABNODE_insert(tab, t)) != NULL) { + #elif OPENSSL_VERSION_NUMBER >= 0x10000000L + if((old = LHM_lh_insert(TABNODE, tab, t)) != NULL) { +@@ -91,7 +91,7 @@ t_find(LHASH_OF(TABNODE) *const tab, char *const key) + TABNODE t, *res; + + t.key = key; +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined LIBRESSL_VERSION_NUMBER + if((res = lh_TABNODE_retrieve(tab, &t)) != NULL) { + #elif OPENSSL_VERSION_NUMBER >= 0x10000000L + if((res = (TABNODE *)LHM_lh_retrieve(TABNODE, tab, &t)) != NULL) { +@@ -113,7 +113,7 @@ t_remove(LHASH_OF(TABNODE) *const tab, char *const key) + TABNODE t, *res; + + t.key = key; +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined LIBRESSL_VERSION_NUMBER + if((res = lh_TABNODE_delete(tab, &t)) != NULL) { + #elif OPENSSL_VERSION_NUMBER >= 0x10000000L + if((res = LHM_lh_delete(TABNODE, tab, &t)) != NULL) { +@@ -140,7 +140,7 @@ t_old_doall_arg(TABNODE *t, ALL_ARG *a) + TABNODE *res; + + if(t->last_acc < a->lim) +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined LIBRESSL_VERSION_NUMBER + if((res = lh_TABNODE_delete(a->tab, t)) != NULL) { + #elif OPENSSL_VERSION_NUMBER >= 0x10000000L + if((res = LHM_lh_delete(TABNODE, a->tab, t)) != NULL) { +@@ -160,7 +160,7 @@ IMPLEMENT_LHASH_DOALL_ARG_FN(t_old, TABNODE, ALL_ARG) + IMPLEMENT_LHASH_DOALL_ARG_FN(t_old, TABNODE *, ALL_ARG *) + #endif + +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined LIBRESSL_VERSION_NUMBER + IMPLEMENT_LHASH_DOALL_ARG(TABNODE,ALL_ARG); + #endif + +@@ -177,7 +177,7 @@ t_expire(LHASH_OF(TABNODE) *const tab, const time_t lim) + a.lim = lim; + down_load = TABNODE_GET_DOWN_LOAD(tab); + TABNODE_SET_DOWN_LOAD(tab, 0); +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined LIBRESSL_VERSION_NUMBER + lh_TABNODE_doall_ALL_ARG(tab, t_old_doall_arg, &a); + #elif OPENSSL_VERSION_NUMBER >= 0x10000000L + LHM_lh_doall_arg(TABNODE, tab, LHASH_DOALL_ARG_FN(t_old), ALL_ARG, &a); +@@ -194,7 +194,7 @@ t_cont_doall_arg(TABNODE *t, ALL_ARG *arg) + TABNODE *res; + + if(memcmp(t->content, arg->content, arg->cont_len) == 0) +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined LIBRESSL_VERSION_NUMBER + if((res = lh_TABNODE_delete(arg->tab, t)) != NULL) { + #elif OPENSSL_VERSION_NUMBER >= 0x10000000L + if((res = LHM_lh_delete(TABNODE, arg->tab, t)) != NULL) { +@@ -228,7 +228,7 @@ t_clean(LHASH_OF(TABNODE) *const tab, void *const content, const size_t cont_len + a.cont_len = cont_len; + down_load = TABNODE_GET_DOWN_LOAD(tab); + TABNODE_SET_DOWN_LOAD(tab, 0); +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined LIBRESSL_VERSION_NUMBER + lh_TABNODE_doall_ALL_ARG(tab, t_cont_doall_arg, &a); + #elif OPENSSL_VERSION_NUMBER >= 0x10000000L + LHM_lh_doall_arg(TABNODE, tab, LHASH_DOALL_ARG_FN(t_cont), ALL_ARG, &a); +@@ -1514,7 +1514,7 @@ dump_sess(const int control_sock, LHASH_OF(TABNODE) *const sess, BACKEND *const + + a.control_sock = control_sock; + a.backends = backends; +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined LIBRESSL_VERSION_NUMBER + lh_TABNODE_doall_DUMP_ARG(sess, t_dump_doall_arg, &a); + #elif OPENSSL_VERSION_NUMBER >= 0x10000000L + LHM_lh_doall_arg(TABNODE, sess, LHASH_DOALL_ARG_FN(t_dump), DUMP_ARG, &a); +-- +1.9.1 + diff --git a/package/pound/Config.in b/package/pound/Config.in new file mode 100644 index 00000000..91c29ea7 --- /dev/null +++ b/package/pound/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_POUND + bool "pound" + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_OPENSSL + help + The Pound program is a reverse proxy, load balancer and HTTPS + front-end for Web server(s). Pound was developed to enable + distributing the load among several Web-servers and to allow + for a convenient SSL wrapper for those Web servers that do not + offer it natively. + + http://www.apsis.ch/pound + +comment "pound needs a toolchain w/ dynamic library, threads" + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU diff --git a/package/pound/pound.hash b/package/pound/pound.hash new file mode 100644 index 00000000..7fbf01b8 --- /dev/null +++ b/package/pound/pound.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 a7fd8690de0fd390615e79fd0f4bfd56a544b8ef97dd6659c07ecd3207480c25 Pound-2.8.tgz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 GPL.txt diff --git a/package/pound/pound.mk b/package/pound/pound.mk new file mode 100644 index 00000000..d6839fc2 --- /dev/null +++ b/package/pound/pound.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# pound +# +################################################################################ + +POUND_VERSION = 2.8 +POUND_SITE = http://www.apsis.ch/pound +POUND_SOURCE = Pound-$(POUND_VERSION).tgz +POUND_LICENSE = GPL-3.0+ +POUND_LICENSE_FILES = GPL.txt +POUND_DEPENDENCIES = openssl host-openssl + +# Force owner/group to us, otherwise it will try proxy:proxy by +# default. +POUND_CONF_OPTS = \ + --with-owner=$(shell id -un) \ + --with-group=$(shell id -gn) + +ifeq ($(BR2_PACKAGE_PCRE),y) +POUND_DEPENDENCIES += pcre +endif + +$(eval $(autotools-package)) diff --git a/package/powerpc-utils/Config.in b/package/powerpc-utils/Config.in new file mode 100644 index 00000000..d04d81c0 --- /dev/null +++ b/package/powerpc-utils/Config.in @@ -0,0 +1,34 @@ +comment "powerpc-utils tools needs a toolchain w/ dynamic library" + depends on BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le + depends on BR2_STATIC_LIBS + +config BR2_PACKAGE_POWERPC_UTILS + bool "powerpc-utils" + depends on !BR2_STATIC_LIBS # dlfcn.h + depends on BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le + select BR2_PACKAGE_ZLIB + help + System utilities for PowerPC machines. + + https://github.com/ibm-power-utilities/powerpc-utils.git + +if BR2_PACKAGE_POWERPC_UTILS + +config BR2_PACKAGE_POWERPC_UTILS_RTAS + bool "RTAS support" + depends on BR2_TOOLCHAIN_USES_GLIBC + select BR2_PACKAGE_LIBRTAS + help + Enable support for functions that require RTAS. + + This adds a dependency on librtas and provides the following + additional features at the cost of increasing the installed + package size from about 0.5MB to about 2MB: + ppc64_cpu --run-mode, uesensor, set_poweron_time, drmgr, + lsslot, activate_firmware, rtas_ibm_get_vpd, serv_config, + rtas_event_decode, sys_ident. + +comment "RTAS support needs a glibc toolchain" + depends on !BR2_TOOLCHAIN_USES_GLIBC + +endif diff --git a/package/powerpc-utils/powerpc-utils.hash b/package/powerpc-utils/powerpc-utils.hash new file mode 100644 index 00000000..8d0b1042 --- /dev/null +++ b/package/powerpc-utils/powerpc-utils.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 4e3a21419863c08adde49f0795eff0fbfe4597ce82593fa5fe1f1177913fb7b9 powerpc-utils-1.3.8.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/powerpc-utils/powerpc-utils.mk b/package/powerpc-utils/powerpc-utils.mk new file mode 100644 index 00000000..b12194ae --- /dev/null +++ b/package/powerpc-utils/powerpc-utils.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# powerpc-utils +# +################################################################################ + +POWERPC_UTILS_VERSION = 1.3.8 +POWERPC_UTILS_SITE = $(call github,ibm-power-utilities,powerpc-utils,v$(POWERPC_UTILS_VERSION)) +POWERPC_UTILS_DEPENDENCIES = zlib +POWERPC_UTILS_AUTORECONF = YES +POWERPC_UTILS_LICENSE = GPL-2.0+ +POWERPC_UTILS_LICENSE_FILES = COPYING +POWERPC_UTILS_CPE_ID_VENDOR = powerpc-utils_project + +POWERPC_UTILS_CONF_ENV = \ + ax_cv_check_cflags___fstack_protector_all=$(if $(BR2_TOOLCHAIN_HAS_SSP),yes,no) +POWERPC_UTILS_CONF_OPTS = --disable-werror + +ifeq ($(BR2_PACKAGE_POWERPC_UTILS_RTAS),y) +POWERPC_UTILS_DEPENDENCIES += librtas +POWERPC_UTILS_CONF_OPTS += --with-librtas +else +POWERPC_UTILS_CONF_OPTS += --without-librtas +endif + +$(eval $(autotools-package)) diff --git a/package/powertop/0001-dont-force-stack-smashing-protection.patch b/package/powertop/0001-dont-force-stack-smashing-protection.patch new file mode 100644 index 00000000..75ed2d1c --- /dev/null +++ b/package/powertop/0001-dont-force-stack-smashing-protection.patch @@ -0,0 +1,18 @@ +Do not pass -fstack-protector unconditionally + +Using -fstack-protector only works when the toolchain has SSP support. + +Signed-off-by: Thomas Petazzoni + +Index: b/src/Makefile.am +=================================================================== +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -127,7 +127,6 @@ + -Wformat \ + -Wshadow \ + -fno-omit-frame-pointer \ +- -fstack-protector \ + $(GLIB2_CFLAGS) \ + $(LIBNL_CFLAGS) \ + $(NCURSES_CFLAGS) \ diff --git a/package/powertop/Config.in b/package/powertop/Config.in new file mode 100644 index 00000000..0f323a7b --- /dev/null +++ b/package/powertop/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_POWERTOP + bool "powertop" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS # libnl + depends on BR2_USE_WCHAR + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_PCIUTILS + select BR2_PACKAGE_LIBNL + help + A tool to diagnose issues with power consumption and power + management + + https://01.org/powertop/ + +comment "powertop needs a toolchain w/ C++, threads, wchar" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_USE_WCHAR diff --git a/package/powertop/powertop.hash b/package/powertop/powertop.hash new file mode 100644 index 00000000..fc8f3cc5 --- /dev/null +++ b/package/powertop/powertop.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +# https://01.org/sites/default/files/downloads/powertop-2.13.tar.gz.asc.txt +# using key 22E8F306C8FA4BAA2A5F36F3A0303B060918941C +sha256 a65f992ca4a419bc73b623651060eb9fc00c5a86fa03556358cd9db011ef3178 powertop-2.13.tar.gz +sha256 b499eddebda05a8859e32b820a64577d91f1de2b52efa2a1575a2cb4000bc259 COPYING diff --git a/package/powertop/powertop.mk b/package/powertop/powertop.mk new file mode 100644 index 00000000..c3e8d254 --- /dev/null +++ b/package/powertop/powertop.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# powertop +# +################################################################################ + +POWERTOP_VERSION = 2.13 +POWERTOP_SITE = https://01.org/sites/default/files/downloads +POWERTOP_DEPENDENCIES = pciutils ncurses libnl host-pkgconf \ + $(TARGET_NLS_DEPENDENCIES) +POWERTOP_LICENSE = GPL-2.0 +POWERTOP_LICENSE_FILES = COPYING +POWERTOP_CONF_ENV = LIBS=$(TARGET_NLS_LIBS) +# 0001-dont-force-stack-smashing-protection.patch +POWERTOP_AUTORECONF = YES + +# Help powertop at finding the right ncurses library depending on +# which one is available. +ifeq ($(BR2_PACKAGE_NCURSES_WCHAR),y) +POWERTOP_CONF_ENV += ac_cv_search_delwin="-lncursesw" +else +POWERTOP_CONF_ENV += ac_cv_search_delwin="-lncurses" +endif + +$(eval $(autotools-package)) diff --git a/package/powervr/Config.in b/package/powervr/Config.in new file mode 100644 index 00000000..7be2b237 --- /dev/null +++ b/package/powervr/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_HAS_POWERVR + bool + +config BR2_PACKAGE_PROVIDES_POWERVR + string + depends on BR2_PACKAGE_HAS_POWERVR diff --git a/package/powervr/powervr.mk b/package/powervr/powervr.mk new file mode 100644 index 00000000..5a558605 --- /dev/null +++ b/package/powervr/powervr.mk @@ -0,0 +1,7 @@ +################################################################################ +# +# powervr +# +################################################################################ + +$(eval $(virtual-package)) diff --git a/package/pppd/0001-pppd-Fix-bounds-check.patch b/package/pppd/0001-pppd-Fix-bounds-check.patch new file mode 100644 index 00000000..5d7c51bc --- /dev/null +++ b/package/pppd/0001-pppd-Fix-bounds-check.patch @@ -0,0 +1,37 @@ +From 8d7970b8f3db727fe798b65f3377fe6787575426 Mon Sep 17 00:00:00 2001 +From: Paul Mackerras +Date: Mon, 3 Feb 2020 15:53:28 +1100 +Subject: [PATCH] pppd: Fix bounds check in EAP code + +Given that we have just checked vallen < len, it can never be the case +that vallen >= len + sizeof(rhostname). This fixes the check so we +actually avoid overflowing the rhostname array. + +Reported-by: Ilja Van Sprundel +Signed-off-by: Paul Mackerras +--- + pppd/eap.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/pppd/eap.c b/pppd/eap.c +index 94407f56..1b93db01 100644 +--- a/pppd/eap.c ++++ b/pppd/eap.c +@@ -1420,7 +1420,7 @@ int len; + } + + /* Not so likely to happen. */ +- if (vallen >= len + sizeof (rhostname)) { ++ if (len - vallen >= sizeof (rhostname)) { + dbglog("EAP: trimming really long peer name down"); + BCOPY(inp + vallen, rhostname, sizeof (rhostname) - 1); + rhostname[sizeof (rhostname) - 1] = '\0'; +@@ -1846,7 +1846,7 @@ int len; + } + + /* Not so likely to happen. */ +- if (vallen >= len + sizeof (rhostname)) { ++ if (len - vallen >= sizeof (rhostname)) { + dbglog("EAP: trimming really long peer name down"); + BCOPY(inp + vallen, rhostname, sizeof (rhostname) - 1); + rhostname[sizeof (rhostname) - 1] = '\0'; diff --git a/package/pppd/Config.in b/package/pppd/Config.in new file mode 100644 index 00000000..7db5674b --- /dev/null +++ b/package/pppd/Config.in @@ -0,0 +1,43 @@ +config BR2_PACKAGE_PPPD + bool "pppd" + depends on !BR2_STATIC_LIBS + depends on !BR2_TOOLCHAIN_USES_MUSL # Use __P() macro all over the tree + depends on BR2_USE_MMU + select BR2_PACKAGE_OPENSSL if BR2_TOOLCHAIN_USES_GLIBC + help + An implementation of the Point-to-point protocol. + + http://www.samba.org/ppp/ + +if BR2_PACKAGE_PPPD + +config BR2_PACKAGE_PPPD_FILTER + bool "filtering" + select BR2_PACKAGE_LIBPCAP + help + Packet filtering abilities for pppd. If enabled, + the pppd active-filter and pass-filter options + are available. + +config BR2_PACKAGE_PPPD_RADIUS + bool "radius" + help + Install RADIUS support for pppd + +config BR2_PACKAGE_PPPD_OVERWRITE_RESOLV_CONF + bool "overwrite /etc/resolv.conf" + default y + help + Overwrite /etc/resolv.conf instead of maintaining the + separate list of nameservers in /etc/ppp/resolv.conf + + Note that the pppd default of writing to /etc/ppp/resolv.conf + does not work on a read-only rootfs unless you make it + writable in your rootfs customizations (e.g. by linking it to + a file in tmpfs or by mounting a writable filesystem on it). + +endif + +comment "pppd needs a uClibc or glibc toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS || BR2_TOOLCHAIN_USES_MUSL + depends on BR2_USE_MMU diff --git a/package/pppd/pppd.hash b/package/pppd/pppd.hash new file mode 100644 index 00000000..a9231585 --- /dev/null +++ b/package/pppd/pppd.hash @@ -0,0 +1,7 @@ +# Locally calculated +sha256 91fbff784ad16a1111a7f22df4675aeb161d958bb79f1cc4c1f0c81944e7cb40 pppd-2.4.8.tar.gz +sha256 3990c65c506885f7bb75455d1d6188743a14ad46f5b62e136ef3739aed52c532 pppd/tdb.c +sha256 1822ead9d2854adfbd282322b29730a3fec4cc67f6f6a2e487aad3476e3afd59 pppd/plugins/pppoatm/COPYING +sha256 91a5e9c173e0e001e081e15bf7850cfd782a0baa02f5921e327ae3b449beff3f pppdump/bsd-comp.c +sha256 ee1c28551c87cdcdaf80eb3922726f015201614cb560a5ed18a7a0c15f2b4aa4 pppd/ccp.c +sha256 6fa4c3dad059f6ef15c1c5e5219d9d0d40991dd3a162098a89967a1720de059e pppd/plugins/passprompt.c diff --git a/package/pppd/pppd.mk b/package/pppd/pppd.mk new file mode 100644 index 00000000..08560090 --- /dev/null +++ b/package/pppd/pppd.mk @@ -0,0 +1,122 @@ +################################################################################ +# +# pppd +# +################################################################################ + +PPPD_VERSION = 2.4.8 +PPPD_SITE = $(call github,paulusmack,ppp,ppp-$(PPPD_VERSION)) +PPPD_LICENSE = LGPL-2.0+, LGPL, BSD-4-Clause, BSD-3-Clause, GPL-2.0+ +PPPD_LICENSE_FILES = \ + pppd/tdb.c pppd/plugins/pppoatm/COPYING \ + pppdump/bsd-comp.c pppd/ccp.c pppd/plugins/passprompt.c +PPPD_CPE_ID_VENDOR = samba +PPPD_CPE_ID_PRODUCT = ppp + +# 0001-pppd-Fix-bounds-check.patch +PPPD_IGNORE_CVES += CVE-2020-8597 + +PPPD_MAKE_OPTS = HAVE_INET6=y +ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),y) +PPPD_DEPENDENCIES += openssl +else +PPPD_MAKE_OPTS += USE_CRYPT=y +endif + +PPPD_INSTALL_STAGING = YES +PPPD_TARGET_BINS = chat pppd pppdump pppstats +PPPD_RADIUS_CONF = \ + dictionary dictionary.ascend dictionary.compat \ + dictionary.merit dictionary.microsoft \ + issue port-id-map realms servers radiusclient.conf + +ifeq ($(BR2_PACKAGE_PPPD_FILTER),y) +PPPD_DEPENDENCIES += libpcap +PPPD_MAKE_OPTS += FILTER=y +endif + +# pppd bundles some but not all of the needed kernel headers. The embedded +# if_pppol2tp.h is unfortunately not compatible with kernel headers > 2.6.34, +# and has been part of the kernel headers since 2.6.23, so drop it +define PPPD_DROP_INTERNAL_IF_PPOL2TP_H + $(RM) $(@D)/include/linux/if_pppol2tp.h +endef + +PPPD_POST_EXTRACT_HOOKS += PPPD_DROP_INTERNAL_IF_PPOL2TP_H + +# pppd defaults to /etc/ppp/resolv.conf, which not be writable and is +# definitely not useful since the C library only uses +# /etc/resolv.conf. Therefore, we change pppd to use /etc/resolv.conf +# instead. +define PPPD_SET_RESOLV_CONF + $(SED) 's,ppp/resolv.conf,resolv.conf,' $(@D)/pppd/pathnames.h +endef +ifeq ($(BR2_PACKAGE_PPPD_OVERWRITE_RESOLV_CONF),y) +PPPD_POST_EXTRACT_HOOKS += PPPD_SET_RESOLV_CONF +endif + +define PPPD_CONFIGURE_CMDS + $(SED) 's/FILTER=y/#FILTER=y/' $(PPPD_DIR)/pppd/Makefile.linux + $(SED) 's/ifneq ($$(wildcard \/usr\/include\/pcap-bpf.h),)/ifdef FILTER/' $(PPPD_DIR)/*/Makefile.linux + ( cd $(@D); $(TARGET_MAKE_ENV) ./configure --prefix=/usr ) +endef + +define PPPD_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) CC="$(TARGET_CC)" COPTS="$(TARGET_CFLAGS)" \ + -C $(@D) $(PPPD_MAKE_OPTS) +endef + +ifeq ($(BR2_PACKAGE_PPPD_RADIUS),y) +define PPPD_INSTALL_RADIUS + $(INSTALL) -D $(PPPD_DIR)/pppd/plugins/radius/radattr.so \ + $(TARGET_DIR)/usr/lib/pppd/$(PPPD_VERSION)/radattr.so + $(INSTALL) -D $(PPPD_DIR)/pppd/plugins/radius/radius.so \ + $(TARGET_DIR)/usr/lib/pppd/$(PPPD_VERSION)/radius.so + $(INSTALL) -D $(PPPD_DIR)/pppd/plugins/radius/radrealms.so \ + $(TARGET_DIR)/usr/lib/pppd/$(PPPD_VERSION)/radrealms.so + for m in $(PPPD_RADIUS_CONF); do \ + $(INSTALL) -m 644 -D $(PPPD_DIR)/pppd/plugins/radius/etc/$$m \ + $(TARGET_DIR)/etc/ppp/radius/$$m; \ + done + $(SED) 's:/usr/local/etc:/etc:' \ + $(TARGET_DIR)/etc/ppp/radius/radiusclient.conf + $(SED) 's:/usr/local/sbin:/usr/sbin:' \ + $(TARGET_DIR)/etc/ppp/radius/radiusclient.conf + $(SED) 's:/etc/radiusclient:/etc/ppp/radius:g' \ + $(TARGET_DIR)/etc/ppp/radius/* +endef +endif + +define PPPD_INSTALL_TARGET_CMDS + for sbin in $(PPPD_TARGET_BINS); do \ + $(INSTALL) -D $(PPPD_DIR)/$$sbin/$$sbin \ + $(TARGET_DIR)/usr/sbin/$$sbin; \ + done + $(INSTALL) -D $(PPPD_DIR)/pppd/plugins/minconn.so \ + $(TARGET_DIR)/usr/lib/pppd/$(PPPD_VERSION)/minconn.so + $(INSTALL) -D $(PPPD_DIR)/pppd/plugins/passprompt.so \ + $(TARGET_DIR)/usr/lib/pppd/$(PPPD_VERSION)/passprompt.so + $(INSTALL) -D $(PPPD_DIR)/pppd/plugins/passwordfd.so \ + $(TARGET_DIR)/usr/lib/pppd/$(PPPD_VERSION)/passwordfd.so + $(INSTALL) -D $(PPPD_DIR)/pppd/plugins/pppoatm/pppoatm.so \ + $(TARGET_DIR)/usr/lib/pppd/$(PPPD_VERSION)/pppoatm.so + $(INSTALL) -D $(PPPD_DIR)/pppd/plugins/rp-pppoe/rp-pppoe.so \ + $(TARGET_DIR)/usr/lib/pppd/$(PPPD_VERSION)/rp-pppoe.so + $(INSTALL) -D $(PPPD_DIR)/pppd/plugins/rp-pppoe/pppoe-discovery \ + $(TARGET_DIR)/usr/sbin/pppoe-discovery + $(INSTALL) -D $(PPPD_DIR)/pppd/plugins/winbind.so \ + $(TARGET_DIR)/usr/lib/pppd/$(PPPD_VERSION)/winbind.so + $(INSTALL) -D $(PPPD_DIR)/pppd/plugins/pppol2tp/openl2tp.so \ + $(TARGET_DIR)/usr/lib/pppd/$(PPPD_VERSION)/openl2tp.so + $(INSTALL) -D $(PPPD_DIR)/pppd/plugins/pppol2tp/pppol2tp.so \ + $(TARGET_DIR)/usr/lib/pppd/$(PPPD_VERSION)/pppol2tp.so + $(INSTALL) -D -m 0755 $(PPPD_DIR)/scripts/pon $(TARGET_DIR)/usr/bin/pon + $(INSTALL) -D -m 0755 $(PPPD_DIR)/scripts/poff $(TARGET_DIR)/usr/bin/poff + $(PPPD_INSTALL_RADIUS) +endef + +define PPPD_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) INSTROOT=$(STAGING_DIR)/ -C $(@D) $(PPPD_MAKE_OPTS) install-devel +endef + +$(eval $(generic-package)) diff --git a/package/pps-tools/Config.in b/package/pps-tools/Config.in new file mode 100644 index 00000000..0c4bb112 --- /dev/null +++ b/package/pps-tools/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PPS_TOOLS + bool "pps-tools" + help + Pulse per second tools. Provides timepps.h and other PPS + utilities. + + https://github.com/ago/pps-tools/ diff --git a/package/pps-tools/pps-tools.hash b/package/pps-tools/pps-tools.hash new file mode 100644 index 00000000..ee3e4e3d --- /dev/null +++ b/package/pps-tools/pps-tools.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 1168f1474235017af413afdb07288303ad7a7b12a0282f3bf9ed0e22fe0d7d2e pps-tools-e2b25049df9a4da28168b7378016f1650d0dfa6b.tar.gz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/pps-tools/pps-tools.mk b/package/pps-tools/pps-tools.mk new file mode 100644 index 00000000..2d82cf7d --- /dev/null +++ b/package/pps-tools/pps-tools.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# pps-tools +# +################################################################################ + +PPS_TOOLS_VERSION = e2b25049df9a4da28168b7378016f1650d0dfa6b +PPS_TOOLS_SITE = $(call github,ago,pps-tools,$(PPS_TOOLS_VERSION)) +PPS_TOOLS_INSTALL_STAGING = YES +PPS_TOOLS_LICENSE = GPL-2.0+ +PPS_TOOLS_LICENSE_FILES = COPYING + +define PPS_TOOLS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) all +endef + +define PPS_TOOLS_INSTALL_STAGING_CMDS + mkdir -p $(STAGING_DIR)/usr/include/sys $(STAGING_DIR)/usr/bin + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) \ + DESTDIR=$(STAGING_DIR) -C $(@D) install +endef + +define PPS_TOOLS_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/usr/include/sys $(TARGET_DIR)/usr/bin + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) \ + DESTDIR=$(TARGET_DIR) -C $(@D) install +endef + +$(eval $(generic-package)) diff --git a/package/pptp-linux/0001-susv3-legacy.patch b/package/pptp-linux/0001-susv3-legacy.patch new file mode 100644 index 00000000..5cc9f578 --- /dev/null +++ b/package/pptp-linux/0001-susv3-legacy.patch @@ -0,0 +1,29 @@ +bzero is deprecated in POSIX.1-2001 and removed for POSIX.1-2008 so +switch to memset instead. + +Signed-off-by: Gustavo Zacarias + +diff -Nura pptp-1.8.0.orig/pptp_callmgr.c pptp-1.8.0/pptp_callmgr.c +--- pptp-1.8.0.orig/pptp_callmgr.c 2013-10-23 05:10:46.000000000 -0300 ++++ pptp-1.8.0/pptp_callmgr.c 2014-03-31 16:47:42.617643298 -0300 +@@ -340,7 +340,7 @@ + } + #endif + if (localbind.s_addr != INADDR_NONE) { +- bzero(&src, sizeof(src)); ++ memset(&src, 0, sizeof(src)); + src.i.sin_family = AF_INET; + src.i.sin_addr = localbind; + if (bind(s, &src.a, sizeof(src.i)) != 0) { +diff -Nura pptp-1.8.0.orig/pptp_gre.c pptp-1.8.0/pptp_gre.c +--- pptp-1.8.0.orig/pptp_gre.c 2013-10-23 05:10:46.000000000 -0300 ++++ pptp-1.8.0/pptp_gre.c 2014-03-31 16:47:30.745249066 -0300 +@@ -103,7 +103,7 @@ + } + #endif + if (localbind.s_addr != INADDR_NONE) { +- bzero(&loc_addr, sizeof(loc_addr)); ++ memset(&loc_addr, 0, sizeof(loc_addr)); + loc_addr.i.sin_family = AF_INET; + loc_addr.i.sin_addr = localbind; + if (bind(s, &loc_addr.a, sizeof(loc_addr.i)) != 0) { diff --git a/package/pptp-linux/0002-fix-parallel-build.patch b/package/pptp-linux/0002-fix-parallel-build.patch new file mode 100644 index 00000000..04a79774 --- /dev/null +++ b/package/pptp-linux/0002-fix-parallel-build.patch @@ -0,0 +1,23 @@ +Fix parallel build issue + +The config.h header file must be created before being used to build +source files that include it, especially version.c. In order for this +to happen even in highly-parallel builds, we add a dependency of all +object files on config.h, in order to ensure it gets generated before +make attempts to build the object files. + +Signed-off-by: Thomas Petazzoni + +Index: b/Makefile +=================================================================== +--- a/Makefile ++++ b/Makefile +@@ -37,6 +37,8 @@ + + all: config.h $(PPTP_BIN) pptpsetup.8 + ++$(PPTP_OBJS): config.h ++ + $(PPTP_BIN): $(PPTP_OBJS) $(PPTP_DEPS) + $(CC) -o $(PPTP_BIN) $(PPTP_OBJS) $(LDFLAGS) $(LIBS) + diff --git a/package/pptp-linux/Config.in b/package/pptp-linux/Config.in new file mode 100644 index 00000000..e03a906e --- /dev/null +++ b/package/pptp-linux/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PPTP_LINUX + bool "pptp-linux" + depends on BR2_USE_MMU # fork() + help + An implementation of the Point-to-point protocol client. + + http://pptpclient.sourceforge.net/ diff --git a/package/pptp-linux/pptp-linux.hash b/package/pptp-linux/pptp-linux.hash new file mode 100644 index 00000000..668e01c3 --- /dev/null +++ b/package/pptp-linux/pptp-linux.hash @@ -0,0 +1,7 @@ +# From http://sourceforge.net/projects/pptpclient/files/pptp/pptp-1.10.0/ +md5 8d25341352fdae5ad5b36b9f18254908 pptp-1.10.0.tar.gz +sha1 173c9b7d204c89fd1538116f165bba1e9101b51c pptp-1.10.0.tar.gz + +# Locally calculated +sha256 82492db8e487ce73b182ee7f444251d20c44f5c26d6e96c553ec7093aefb5af4 pptp-1.10.0.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/pptp-linux/pptp-linux.mk b/package/pptp-linux/pptp-linux.mk new file mode 100644 index 00000000..7fd07339 --- /dev/null +++ b/package/pptp-linux/pptp-linux.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# pptp-linux +# +################################################################################ + +PPTP_LINUX_VERSION = 1.10.0 +PPTP_LINUX_SITE = http://downloads.sourceforge.net/project/pptpclient/pptp/pptp-$(PPTP_LINUX_VERSION) +PPTP_LINUX_SOURCE = pptp-$(PPTP_LINUX_VERSION).tar.gz +PPTP_LINUX_MAKE = $(MAKE1) +PPTP_LINUX_LICENSE = GPL-2.0+ +PPTP_LINUX_LICENSE_FILES = COPYING + +define PPTP_LINUX_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) OPTIMIZE= DEBUG= \ + CC="$(TARGET_CC)" \ + CFLAGS="$(TARGET_CFLAGS)" \ + LDFLAGS="$(TARGET_LDFLAGS)" \ + IP=/sbin/ip +endef + +define PPTP_LINUX_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/pptp $(TARGET_DIR)/usr/sbin/pptp +endef + +$(eval $(generic-package)) diff --git a/package/prboom/0001-libpng-1.4.patch b/package/prboom/0001-libpng-1.4.patch new file mode 100644 index 00000000..0d2a3a5b --- /dev/null +++ b/package/prboom/0001-libpng-1.4.patch @@ -0,0 +1,32 @@ +[PATCH] fix build with libpng 1.4.x + +In 1.4.x the png_*_NULL defines are gone. Replace them with a normal +NULL instead. + +Signed-off-by: Peter Korsgaard +--- + src/SDL/i_sshot.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Index: prboom-2.5.0/src/SDL/i_sshot.c +=================================================================== +--- prboom-2.5.0.orig/src/SDL/i_sshot.c ++++ prboom-2.5.0/src/SDL/i_sshot.c +@@ -231,7 +231,7 @@ int I_ScreenShot (const char *fname) + if (fp) + { + png_struct *png_ptr = png_create_write_struct( +- PNG_LIBPNG_VER_STRING, png_error_ptr_NULL, error_fn, warning_fn); ++ PNG_LIBPNG_VER_STRING, NULL, error_fn, warning_fn); + + if (png_ptr) + { +@@ -279,7 +279,7 @@ int I_ScreenShot (const char *fname) + break; + } + } +- png_destroy_write_struct(&png_ptr, png_infopp_NULL); ++ png_destroy_write_struct(&png_ptr, NULL); + } + fclose(fp); + } diff --git a/package/prboom/0002-configure-remove-predefined-O2-optimization-flag.patch b/package/prboom/0002-configure-remove-predefined-O2-optimization-flag.patch new file mode 100644 index 00000000..9260cb63 --- /dev/null +++ b/package/prboom/0002-configure-remove-predefined-O2-optimization-flag.patch @@ -0,0 +1,21 @@ +configure: remove predefined -O2 optimization flag + +CFLAGS_OPT variable forces to use -O2 optimization flag denying the +possibility to use different optimization flag values. + +Remove -O2 flag from CFLAGS_OPT. + +Signed-off-by: Giulio Benetti +--- +diff -urpN prboom-2.5.0.orig/configure.ac prboom-2.5.0/configure.ac +--- prboom-2.5.0.orig/configure.ac 2019-06-20 14:07:45.058481879 +0200 ++++ prboom-2.5.0/configure.ac 2019-06-20 14:09:05.066238825 +0200 +@@ -48,7 +48,7 @@ else + fi + + dnl --- cph: work out flags to pass to compiler +-CFLAGS_OPT="-O2 -fomit-frame-pointer" ++CFLAGS_OPT="-fomit-frame-pointer" + AC_C_COMPILE_FLAGS(-Wall) + dnl --- Option to enable debugging + AC_ARG_ENABLE(debug,AC_HELP_STRING([--enable-debug],[turns on various debugging features, like range checking and internal heap diagnostics]),,enable_debug="no") diff --git a/package/prboom/Config.in b/package/prboom/Config.in new file mode 100644 index 00000000..7dc635d7 --- /dev/null +++ b/package/prboom/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PRBOOM + bool "prboom" + select BR2_PACKAGE_SDL + select BR2_PACKAGE_SDL_MIXER + select BR2_PACKAGE_SDL_NET + help + PrBoom is a Doom client which allows you to play the good + old game on newer hardware. It even supports higher + resolution and better rendering, while still keeping the old + style alive. + + http://prboom.sourceforge.net/ diff --git a/package/prboom/prboom.hash b/package/prboom/prboom.hash new file mode 100644 index 00000000..2cc0f513 --- /dev/null +++ b/package/prboom/prboom.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 226c1c470f8cc983327536404f405a1d026cf0a5188c694a1243cc8630014bae prboom-2.5.0.tar.gz +sha256 1cba07ce0f6d1366d84b7cc62b76966ba79075e5f379c1e230c3ff0635fa789f COPYING diff --git a/package/prboom/prboom.mk b/package/prboom/prboom.mk new file mode 100644 index 00000000..36692d29 --- /dev/null +++ b/package/prboom/prboom.mk @@ -0,0 +1,57 @@ +################################################################################ +# +# prboom +# +################################################################################ + +PRBOOM_VERSION = 2.5.0 +PRBOOM_SITE = http://downloads.sourceforge.net/project/prboom/prboom%20stable/$(PRBOOM_VERSION) +PRBOOM_CONF_ENV = ac_cv_type_uid_t=yes +PRBOOM_DEPENDENCIES = sdl sdl_net sdl_mixer +PRBOOM_LICENSE = GPL-2.0+ +PRBOOM_LICENSE_FILES = COPYING +PRBOOM_AUTORECONF = YES + +PRBOOM_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y) +PRBOOM_CFLAGS += -O0 +endif + +PRBOOM_CONF_ENV += CFLAGS="$(PRBOOM_CFLAGS)" + +ifeq ($(BR2_PACKAGE_LIBPNG),y) +PRBOOM_DEPENDENCIES += libpng +endif + +ifeq ($(BR2_STATIC_LIBS),y) +# SDL_mixer uses symbols from SDL, but ends up after it on the link +# cmdline. Fix it by forcing the SDL libs at the very end +PRBOOM_CONF_ENV += LIBS="`$(STAGING_DIR)/usr/bin/sdl-config --static-libs`" +endif + +PRBOOM_CONF_OPTS = \ + --oldincludedir=$(STAGING_DIR)/usr/include \ + --with-sdl-prefix=$(STAGING_DIR)/usr \ + --with-sdl-exec-prefix=$(STAGING_DIR)/usr \ + --disable-cpu-opt \ + --disable-sdltest \ + --disable-gl + +# endianness detection isn't used when cross compiling +define PRBOOM_BIG_ENDIAN_FIXUP + $(SED) 's,.*#undef WORDS_BIGENDIAN.*,#define WORDS_BIGENDIAN 1,g' \ + $(PRBOOM_DIR)/config.h +endef + +ifeq ($(BR2_ENDIAN),"BIG") +PRBOOM_POST_CONFIGURE_HOOKS += PRBOOM_BIG_ENDIAN_FIXUP +endif + +define PRBOOM_INSTALL_TARGET_CMDS + $(INSTALL) -D $(@D)/src/prboom $(TARGET_DIR)/usr/games/prboom + $(INSTALL) -D $(@D)/src/prboom-game-server $(TARGET_DIR)/usr/games/prboom-game-server + $(INSTALL) -D $(@D)/data/prboom.wad $(TARGET_DIR)/usr/share/games/doom/prboom.wad +endef + +$(eval $(autotools-package)) diff --git a/package/prelink-cross/prelink-cross.hash b/package/prelink-cross/prelink-cross.hash new file mode 100644 index 00000000..5bd2c610 --- /dev/null +++ b/package/prelink-cross/prelink-cross.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 d7c95e81993edead813accf417f6d5b05bcc84eea9ee2d711b9505ffb4f2865b prelink-cross-a853a5d715d84eec93aa68e8f2df26b7d860f5b2-br1.tar.gz +sha256 b8a2f73f743dc1a51aff23f1aacbca4b868564db52496fa3c0caba755bfd1eaf COPYING diff --git a/package/prelink-cross/prelink-cross.mk b/package/prelink-cross/prelink-cross.mk new file mode 100644 index 00000000..2312ee53 --- /dev/null +++ b/package/prelink-cross/prelink-cross.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# host-prelink-cross +# +################################################################################ + +PRELINK_CROSS_VERSION = a853a5d715d84eec93aa68e8f2df26b7d860f5b2 +PRELINK_CROSS_SITE = https://git.yoctoproject.org/git/prelink-cross +PRELINK_CROSS_SITE_METHOD = git +PRELINK_CROSS_LICENSE = GPL-2.0+ +PRELINK_CROSS_LICENSE_FILES = COPYING +# Sources from git, no configure script present +PRELINK_CROSS_AUTORECONF = YES +HOST_PRELINK_CROSS_DEPENDENCIES = host-elfutils host-libiberty + +$(eval $(host-autotools-package)) diff --git a/package/privoxy/Config.in b/package/privoxy/Config.in new file mode 100644 index 00000000..accb48df --- /dev/null +++ b/package/privoxy/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_PRIVOXY + bool "privoxy" + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_PCRE + select BR2_PACKAGE_ZLIB + help + A non-caching web proxy with advanced filtering capabilities + for enhancing privacy, modifying web page data and HTTP + headers, controlling access, and removing ads and other + obnoxious Internet junk. + + http://www.privoxy.org/ + +comment "privoxy needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/privoxy/privoxy.hash b/package/privoxy/privoxy.hash new file mode 100644 index 00000000..92ecd1dd --- /dev/null +++ b/package/privoxy/privoxy.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/ijbswa/files/Sources/3.0.32%20%28stable%29/ +md5 3a0a8ebdf80e0a29154683e74cbf510b privoxy-3.0.32-stable-src.tar.gz +sha1 3a298ab2599fc92555c86dc29a37742d7396a0d3 privoxy-3.0.32-stable-src.tar.gz +# Locally computed +sha256 c61de4008c62445ec18f1f270407cbf2372eaba93beaccdc9e3238bb2defeed7 privoxy-3.0.32-stable-src.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE diff --git a/package/privoxy/privoxy.mk b/package/privoxy/privoxy.mk new file mode 100644 index 00000000..adb5af28 --- /dev/null +++ b/package/privoxy/privoxy.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# privoxy +# +################################################################################ + +PRIVOXY_VERSION = 3.0.32 +PRIVOXY_SITE = http://downloads.sourceforge.net/project/ijbswa/Sources/$(PRIVOXY_VERSION)%20%28stable%29 +PRIVOXY_SOURCE = privoxy-$(PRIVOXY_VERSION)-stable-src.tar.gz +# configure not shipped +PRIVOXY_AUTORECONF = YES +PRIVOXY_DEPENDENCIES = pcre zlib +PRIVOXY_LICENSE = GPL-2.0+ +PRIVOXY_LICENSE_FILES = LICENSE +PRIVOXY_CPE_ID_VENDOR = privoxy + +$(eval $(autotools-package)) diff --git a/package/procps-ng/Config.in b/package/procps-ng/Config.in new file mode 100644 index 00000000..6ff89832 --- /dev/null +++ b/package/procps-ng/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PROCPS_NG + bool "procps-ng" + depends on BR2_USE_MMU # fork() + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + select BR2_PACKAGE_NCURSES + help + Standard informational utilities and process-handling tools. + Provides things like kill, ps, uptime, free, top, etc... + + http://sourceforge.net/projects/procps-ng/ diff --git a/package/procps-ng/S02sysctl b/package/procps-ng/S02sysctl new file mode 100644 index 00000000..85d9ed50 --- /dev/null +++ b/package/procps-ng/S02sysctl @@ -0,0 +1,94 @@ +#!/bin/sh +# +# This script is used by busybox and procps-ng. +# +# With procps-ng, the "--system" option of sysctl also enables "--ignore", so +# errors are not reported via syslog. Use the run_logger function to mimic the +# --system behavior, still reporting errors via syslog. Users not interested +# on error reports can add "-e" to SYSCTL_ARGS. +# +# busybox does not have a "--system" option neither reports errors via syslog, +# so the scripting provides a consistent behavior between the implementations. +# Testing the busybox sysctl exit code is fruitless, as at the moment, since +# its exit status is zero even if errors happen. Hopefully this will be fixed +# in a future busybox version. + +PROGRAM="sysctl" + +SYSCTL_ARGS="" + +# shellcheck source=/dev/null +[ -r "/etc/default/$PROGRAM" ] && . "/etc/default/$PROGRAM" + +# Files are read from directories in the SYSCTL_SOURCES list, in the given +# order. A file may be used more than once, since there can be multiple +# symlinks to it. No attempt is made to prevent this. +SYSCTL_SOURCES="/etc/sysctl.d/ /usr/local/lib/sysctl.d/ /usr/lib/sysctl.d/ /lib/sysctl.d/ /etc/sysctl.conf" + +# If the logger utility is available all messages are sent to syslog, except +# for the final status. The file redirections do the following: +# +# - stdout is redirected to syslog with facility.level "kern.info" +# - stderr is redirected to syslog with facility.level "kern.err" +# - file dscriptor 4 is used to pass the result to the "start" function. +# +run_logger() { + # shellcheck disable=SC2086 # we need the word splitting + find $SYSCTL_SOURCES -maxdepth 1 -name '*.conf' -print0 2> /dev/null | \ + xargs -0 -r -n 1 readlink -f | { + prog_status="OK" + while :; do + read -r file || { + echo "$prog_status" >&4 + break + } + echo "* Applying $file ..." + /sbin/sysctl -p "$file" $SYSCTL_ARGS || prog_status="FAIL" + done 2>&1 >&3 | /usr/bin/logger -t sysctl -p kern.err + } 3>&1 | /usr/bin/logger -t sysctl -p kern.info +} + +# If logger is not available all messages are sent to stdout/stderr. +run_std() { + # shellcheck disable=SC2086 # we need the word splitting + find $SYSCTL_SOURCES -maxdepth 1 -name '*.conf' -print0 2> /dev/null | \ + xargs -0 -r -n 1 readlink -f | { + prog_status="OK" + while :; do + read -r file || { + echo "$prog_status" >&4 + break + } + echo "* Applying $file ..." + /sbin/sysctl -p "$file" $SYSCTL_ARGS || prog_status="FAIL" + done + } +} + +if [ -x /usr/bin/logger ]; then + run_program="run_logger" +else + run_program="run_std" +fi + +start() { + printf '%s %s: ' "$1" "$PROGRAM" + status=$("$run_program" 4>&1) + echo "$status" + if [ "$status" = "OK" ]; then + return 0 + fi + return 1 +} + +case "$1" in + start) + start "Running";; + restart|reload) + start "Rerunning";; + stop) + :;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/procps-ng/procps-ng.hash b/package/procps-ng/procps-ng.hash new file mode 100644 index 00000000..123db992 --- /dev/null +++ b/package/procps-ng/procps-ng.hash @@ -0,0 +1,8 @@ +# From http://sourceforge.net/projects/procps-ng/files/Production/ +md5 2b0717a7cb474b3d6dfdeedfbad2eccc procps-ng-3.3.15.tar.xz +sha1 2929bc64f0cf7b2db997eef79b7187658e47230d procps-ng-3.3.15.tar.xz +# Locally calculated after checking signature +# http://downloads.sourceforge.net/project/procps-ng/Production/procps-ng-3.3.15.tar.xz.asc +sha256 10bd744ffcb3de2d591d2f6acf1a54a7ba070fdcc432a855931a5057149f0465 procps-ng-3.3.15.tar.xz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING +sha256 681e386e44a19d7d0674b4320272c90e66b6610b741e7e6305f8219c42e85366 COPYING.LIB diff --git a/package/procps-ng/procps-ng.mk b/package/procps-ng/procps-ng.mk new file mode 100644 index 00000000..84ada1b1 --- /dev/null +++ b/package/procps-ng/procps-ng.mk @@ -0,0 +1,58 @@ +################################################################################ +# +# procps-ng +# +################################################################################ + +PROCPS_NG_VERSION = 3.3.15 +PROCPS_NG_SOURCE = procps-ng-$(PROCPS_NG_VERSION).tar.xz +PROCPS_NG_SITE = http://downloads.sourceforge.net/project/procps-ng/Production +PROCPS_NG_LICENSE = GPL-2.0+, LGPL-2.0+ (libproc and libps) +PROCPS_NG_LICENSE_FILES = COPYING COPYING.LIB +PROCPS_NG_CPE_ID_VENDOR = procps-ng_project +PROCPS_NG_INSTALL_STAGING = YES +PROCPS_NG_DEPENDENCIES = ncurses host-pkgconf $(TARGET_NLS_DEPENDENCIES) +PROCPS_NG_CONF_OPTS = LIBS=$(TARGET_NLS_LIBS) + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +PROCPS_NG_DEPENDENCIES += systemd +PROCPS_NG_CONF_OPTS += --with-systemd +else +PROCPS_NG_CONF_OPTS += --without-systemd +endif + +# Make sure binaries get installed in /bin, as busybox does, so that we +# don't end up with two versions. +# Make sure libprocps.pc is installed in STAGING_DIR/usr/lib/pkgconfig/ +# otherwise it's installed in STAGING_DIR/lib/pkgconfig/ breaking +# pkg-config --libs libprocps. +PROCPS_NG_CONF_OPTS += --exec-prefix=/ \ + --libdir=/usr/lib + +# Allows unicode characters to show in 'watch' +ifeq ($(BR2_PACKAGE_NCURSES_WCHAR),y) +PROCPS_NG_CONF_OPTS += \ + --enable-watch8bit +endif + +ifeq ($(BR2_USE_WCHAR),) +PROCPS_NG_CONF_OPTS += CPPFLAGS=-DOFF_XTRAWIDE +endif + +# numa support requires libdl, so explicitly disable it when +# BR2_STATIC_LIBS=y +ifeq ($(BR2_STATIC_LIBS),y) +PROCPS_NG_CONF_OPTS += --disable-numa +endif + +# Avoid installing S02sysctl, since openrc provides /etc/init.d/sysctl. +define PROCPS_NG_INSTALL_INIT_OPENRC + @: +endef + +define PROCPS_NG_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 package/procps-ng/S02sysctl \ + $(TARGET_DIR)/etc/init.d/S02sysctl +endef + +$(eval $(autotools-package)) diff --git a/package/procrank_linux/Config.in b/package/procrank_linux/Config.in new file mode 100644 index 00000000..59d462b6 --- /dev/null +++ b/package/procrank_linux/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PROCRANK_LINUX + bool "procrank_linux" + help + procrank is a tool commonly used by Android platform + developers to find out how much memory is really being used. + + https://github.com/csimmonds/procrank_linux diff --git a/package/procrank_linux/procrank_linux.hash b/package/procrank_linux/procrank_linux.hash new file mode 100644 index 00000000..cc9c403a --- /dev/null +++ b/package/procrank_linux/procrank_linux.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 1c3592b549b6793b29ab561568f493d0edbfe288ea2aed59afa689eaa26b5d9e procrank_linux-21c30ab4514a5b15ac6e813e21bee0d3d714cb08.tar.gz +sha256 38751245389e1e23f73e6f5384b5cbe7fa972cc4410c5adc9c04b082a0b9561a NOTICE diff --git a/package/procrank_linux/procrank_linux.mk b/package/procrank_linux/procrank_linux.mk new file mode 100644 index 00000000..7e743194 --- /dev/null +++ b/package/procrank_linux/procrank_linux.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# procrank_linux +# +################################################################################ + +PROCRANK_LINUX_VERSION = 21c30ab4514a5b15ac6e813e21bee0d3d714cb08 +PROCRANK_LINUX_SITE = $(call github,csimmonds,procrank_linux,$(PROCRANK_LINUX_VERSION)) +PROCRANK_LINUX_LICENSE = Apache-2.0 +PROCRANK_LINUX_LICENSE_FILES = NOTICE + +define PROCRANK_LINUX_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) CROSS_COMPILE="$(TARGET_CROSS)" +endef + +define PROCRANK_LINUX_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/procrank \ + $(TARGET_DIR)/usr/bin/procrank +endef + +$(eval $(generic-package)) diff --git a/package/proftpd/0001-mod_quotatab-fix-build-failure-against-gcc-10.patch b/package/proftpd/0001-mod_quotatab-fix-build-failure-against-gcc-10.patch new file mode 100644 index 00000000..5f4eb66c --- /dev/null +++ b/package/proftpd/0001-mod_quotatab-fix-build-failure-against-gcc-10.patch @@ -0,0 +1,56 @@ +From 9c9623c8a47fb5580dfea1a59296c6d224479504 Mon Sep 17 00:00:00 2001 +From: Sergei Trofimovich +Date: Mon, 2 Mar 2020 23:45:22 +0000 +Subject: [PATCH] mod_quotatab: fix build failure against gcc-10 + +On gcc-10 (and gcc-9 -fno-common) build fails as: + +``` +$ ./configure --with-modules=mod_quotatab && make +... +ld: modules/module_glue.o:(.data.rel+0x68): + undefined reference to `quotatab_file_module' +collect2: error: ld returned 1 exit status +make: *** [Makefile:56: proftpd] Error 1 +``` + +gcc-10 will change the default from -fcommon to fno-common: +https://gcc.gnu.org/PR85678. + +The error also happens if CFLAGS=-fno-common passed explicitly. + +Signed-off-by: Sergei Trofimovich + +[Retrieved from: +https://github.com/proftpd/proftpd/commit/9c9623c8a47fb5580dfea1a59296c6d224479504] +Signed-off-by: Fabrice Fontaine +--- + contrib/mod_quotatab.c | 1 + + contrib/mod_quotatab.h | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/contrib/mod_quotatab.c b/contrib/mod_quotatab.c +index 4fa6c1f44..0ee480163 100644 +--- a/contrib/mod_quotatab.c ++++ b/contrib/mod_quotatab.c +@@ -50,6 +50,7 @@ typedef struct regtab_obj { + module quotatab_module; + + /* Quota objects for the current session */ ++quota_deltas_t quotatab_deltas; + static quota_table_t *limit_tab = NULL; + static quota_limit_t sess_limit; + +diff --git a/contrib/mod_quotatab.h b/contrib/mod_quotatab.h +index ed30333f5..c818395a0 100644 +--- a/contrib/mod_quotatab.h ++++ b/contrib/mod_quotatab.h +@@ -188,7 +188,7 @@ typedef struct table_obj { + #define QUOTATAB_TALLY_SRC 0x0002 + + /* Quota objects for the current session. */ +-quota_deltas_t quotatab_deltas; ++extern quota_deltas_t quotatab_deltas; + + /* Function prototypes necessary for quotatab sub-modules */ + int quotatab_log(const char *, ...) diff --git a/package/proftpd/Config.in b/package/proftpd/Config.in new file mode 100644 index 00000000..4898f49d --- /dev/null +++ b/package/proftpd/Config.in @@ -0,0 +1,104 @@ +config BR2_PACKAGE_PROFTPD + bool "proftpd" + depends on BR2_USE_MMU # fork() + help + ProFTPD, a highly configurable FTP server. + + http://www.proftpd.org/ + +if BR2_PACKAGE_PROFTPD + +config BR2_PACKAGE_PROFTPD_MOD_CAP + bool "mod_cap support" + select BR2_PACKAGE_LIBCAP + help + Compile ProFTPD with mod_cap support + +config BR2_PACKAGE_PROFTPD_MOD_REWRITE + bool "mod_rewrite support" + help + Compile ProFTPD with mod_rewrite support + +config BR2_PACKAGE_PROFTPD_MOD_REDIS + bool "mod_redis support" + select BR2_PACKAGE_HIREDIS + help + The mod_redis module enables ProFTPD support for caching + data in Redis servers, using the hiredis client library. + +config BR2_PACKAGE_PROFTPD_MOD_SFTP + bool "mod_sftp support" + select BR2_PACKAGE_OPENSSL + help + Compile ProFTPD with mod_sftp support + +config BR2_PACKAGE_PROFTPD_MOD_SQL + bool "mod_sql support" + help + Compile ProFTPD with mod_sql support. + +if BR2_PACKAGE_PROFTPD_MOD_SQL + +config BR2_PACKAGE_PROFTPD_MOD_SQL_SQLITE + bool "mod_sql_sqlite support" + select BR2_PACKAGE_SQLITE + help + Compile ProFTPD with mod_sql_sqlite support. + +endif + +config BR2_PACKAGE_PROFTPD_MOD_SFTP_SQL + bool "mod_sftp_sql support" + select BR2_PACKAGE_PROFTPD_MOD_SQL + select BR2_PACKAGE_PROFTPD_MOD_SFTP + help + Compile ProFTPD with mod_sftp_sql support + +config BR2_PACKAGE_PROFTPD_MOD_QUOTATAB + bool "mod_quotatab support" + help + Compile ProFTPD with mod_quotatab support. This module + is required in order to support quota tables: + 1. mod_quotatab_file + 2. mod_quotatab_ldap + 3. mod_quotatab_radius + 4. mod_quotatab_sql + +if BR2_PACKAGE_PROFTPD_MOD_QUOTATAB + +config BR2_PACKAGE_PROFTPD_MOD_QUOTATAB_FILE + bool "mod_quotatab_file table support" + help + Compile mod_quotatab with mod_quotatab_file table. + +config BR2_PACKAGE_PROFTPD_MOD_QUOTATAB_LDAP + bool "mod_quotatab_ldap table support" + help + Compile mod_quotatab with mod_quotatab_ldap table. + +config BR2_PACKAGE_PROFTPD_MOD_QUOTATAB_RADIUS + bool "mod_quotatab_radius table support" + help + Compile mod_quotatab with mod_quotatab_radius table. + +config BR2_PACKAGE_PROFTPD_MOD_QUOTATAB_SQL + bool "mod_quotatab_sql table support" + select BR2_PACKAGE_PROFTPD_MOD_SQL + help + Compile mod_quotatab with mod_quotatab_sql table. + +endif + +config BR2_PACKAGE_PROFTPD_BUFFER_SIZE + int "buffer size in bytes (0 for default)" + default "0" + help + By increasing the buffer size above the default of 1K, + proftpd reads and writes data in larger chunks, and makes + fewer expensive system calls. Use of this option to set buffer + sizes of 8K or more has been reported to drastically increase + transfer speeds (depending on network configurations). + + 0 uses the default size of 1024. + +endif diff --git a/package/proftpd/S50proftpd b/package/proftpd/S50proftpd new file mode 100644 index 00000000..3f9070f2 --- /dev/null +++ b/package/proftpd/S50proftpd @@ -0,0 +1,45 @@ +#!/bin/sh + +trap "" HUP +trap "" TERM +[ ! -d /var/run/proftpd ] && mkdir /var/run/proftpd +[ ! -f /var/log/wtmp ] && touch /var/log/wtmp + +start() { + printf "Starting ProFTPD: " + /usr/sbin/proftpd + if [ $? != 0 ]; then + echo "FAILED" + exit 1 + else + echo "done" + fi +} + +stop() { + printf "Stopping ProFTPD: " + killall proftpd + echo "done" +} + +case "$1" in + start) + start + ;; + + stop) + stop + ;; + + restart) + stop + start + ;; + + *) + echo "Usage: /etc/init.d/S50proftpd {start|stop|restart}" + exit 1 + ;; +esac + +exit 0 diff --git a/package/proftpd/proftpd.hash b/package/proftpd/proftpd.hash new file mode 100644 index 00000000..983500bb --- /dev/null +++ b/package/proftpd/proftpd.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 2dbe684034ab592742ebdb778a8a234b70f959efeb30feedee3ea77f26f74fbb proftpd-1.3.6e.tar.gz +sha256 391a473d755c29b5326fb726326ff3c37e42512f53a8f5789fc310232150bf80 COPYING diff --git a/package/proftpd/proftpd.mk b/package/proftpd/proftpd.mk new file mode 100644 index 00000000..7dc3f267 --- /dev/null +++ b/package/proftpd/proftpd.mk @@ -0,0 +1,138 @@ +################################################################################ +# +# proftpd +# +################################################################################ + +PROFTPD_VERSION = 1.3.6e +PROFTPD_SITE = $(call github,proftpd,proftpd,v$(PROFTPD_VERSION)) +PROFTPD_LICENSE = GPL-2.0+ +PROFTPD_LICENSE_FILES = COPYING +PROFTPD_CPE_ID_VENDOR = proftpd + +PROFTPD_CONF_ENV = \ + ac_cv_func_setpgrp_void=yes \ + ac_cv_func_setgrent_void=yes + +PROFTPD_CONF_OPTS = \ + --localstatedir=/var/run \ + --disable-static \ + --disable-curses \ + --disable-ncurses \ + --disable-facl \ + --disable-dso \ + --enable-sendfile \ + --enable-shadow \ + --with-gnu-ld \ + --without-openssl-cmdline + +ifeq ($(BR2_PACKAGE_PROFTPD_MOD_CAP),y) +PROFTPD_CONF_OPTS += --enable-cap +PROFTPD_DEPENDENCIES += libcap +else +PROFTPD_CONF_OPTS += --disable-cap +endif + +ifeq ($(BR2_PACKAGE_PROFTPD_MOD_REWRITE),y) +PROFTPD_MODULES += mod_rewrite +endif + +ifeq ($(BR2_PACKAGE_PROFTPD_MOD_REDIS),y) +PROFTPD_CONF_OPTS += --enable-redis +PROFTPD_DEPENDENCIES += hiredis +else +PROFTPD_CONF_OPTS += --disable-redis +endif + +ifeq ($(BR2_PACKAGE_PROFTPD_MOD_SFTP),y) +PROFTPD_CONF_OPTS += --enable-openssl +PROFTPD_MODULES += mod_sftp +PROFTPD_DEPENDENCIES += openssl +else +PROFTPD_CONF_OPTS += --disable-openssl +endif + +ifeq ($(BR2_PACKAGE_PROFTPD_MOD_SQL),y) +PROFTPD_MODULES += mod_sql +endif + +ifeq ($(BR2_PACKAGE_PROFTPD_MOD_SQL_SQLITE),y) +PROFTPD_MODULES += mod_sql_sqlite +PROFTPD_DEPENDENCIES += sqlite +endif + +ifeq ($(BR2_PACKAGE_PROFTPD_MOD_SFTP_SQL),y) +PROFTPD_MODULES += mod_sftp_sql +endif + +ifeq ($(BR2_PACKAGE_PROFTPD_MOD_QUOTATAB),y) +PROFTPD_MODULES += mod_quotatab +endif + +ifeq ($(BR2_PACKAGE_PROFTPD_MOD_QUOTATAB_FILE),y) +PROFTPD_MODULES += mod_quotatab_file +endif + +ifeq ($(BR2_PACKAGE_PROFTPD_MOD_QUOTATAB_LDAP),y) +PROFTPD_MODULES += mod_quotatab_ldap +endif + +ifeq ($(BR2_PACKAGE_PROFTPD_MOD_QUOTATAB_RADIUS),y) +PROFTPD_MODULES += mod_quotatab_radius +endif + +ifeq ($(BR2_PACKAGE_PROFTPD_MOD_QUOTATAB_SQL),y) +PROFTPD_MODULES += mod_quotatab_sql +endif + +PROFTPD_CONF_OPTS += --with-modules=$(subst $(space),:,$(PROFTPD_MODULES)) + +# configure script doesn't handle detection of %llu format string +# support for printing the file size when cross compiling, breaking +# access for large files. +# We unfortunately cannot AUTORECONF the package, so instead force it +# on if we know we support it +define PROFTPD_USE_LLU + $(SED) 's/HAVE_LU/HAVE_LLU/' $(@D)/configure +endef +PROFTPD_PRE_CONFIGURE_HOOKS += PROFTPD_USE_LLU + +PROFTPD_MAKE = $(MAKE1) + +# install Perl based scripts in target +ifeq ($(BR2_PACKAGE_PERL),y) +ifeq ($(BR2_PACKAGE_PROFTPD_MOD_QUOTATAB),y) +define PROFTPD_INSTALL_FTPQUOTA + $(INSTALL) -D -m 0755 $(@D)/contrib/ftpquota $(TARGET_DIR)/usr/sbin/ftpquota +endef +endif +define PROFTPD_INSTALL_FTPASSWD + $(INSTALL) -D -m 0755 $(@D)/contrib/ftpasswd $(TARGET_DIR)/usr/sbin/ftpasswd +endef +endif + +define PROFTPD_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/proftpd $(TARGET_DIR)/usr/sbin/proftpd + $(INSTALL) -m 0644 -D $(@D)/sample-configurations/basic.conf $(TARGET_DIR)/etc/proftpd.conf + $(PROFTPD_INSTALL_FTPQUOTA) + $(PROFTPD_INSTALL_FTPASSWD) +endef + +define PROFTPD_USERS + ftp -1 ftp -1 * /home/ftp - - Anonymous FTP User +endef + +define PROFTPD_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/proftpd/S50proftpd $(TARGET_DIR)/etc/init.d/S50proftpd +endef + +define PROFTPD_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/proftpd/proftpd.service \ + $(TARGET_DIR)/usr/lib/systemd/system/proftpd.service +endef + +ifneq ($(BR2_PACKAGE_PROFTPD_BUFFER_SIZE),0) +PROFTPD_CONF_OPTS += --enable-buffer-size=$(BR2_PACKAGE_PROFTPD_BUFFER_SIZE) +endif + +$(eval $(autotools-package)) diff --git a/package/proftpd/proftpd.service b/package/proftpd/proftpd.service new file mode 100644 index 00000000..1c730e51 --- /dev/null +++ b/package/proftpd/proftpd.service @@ -0,0 +1,10 @@ +[Unit] +Description=FTP server +After=syslog.target network.target + +[Service] +ExecStart=/usr/sbin/proftpd -n -q +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/package/proj/Config.in b/package/proj/Config.in new file mode 100644 index 00000000..1952fc7d --- /dev/null +++ b/package/proj/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_PROJ + bool "proj" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 # C++11 + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_WCHAR + select BR2_PACKAGE_SQLITE + help + proj.4 is a standard UNIX filter function which converts + geographic longitude and latitude coordinates into cartesian + coordinates (and vice versa), and it is a C API for software + developers to include coordinate transformation in their own + software. + + http://proj4.org/ + +comment "proj needs a toolchain w/ C++, gcc >= 4.7, threads, wchar" + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 || \ + !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR diff --git a/package/proj/proj.hash b/package/proj/proj.hash new file mode 100644 index 00000000..27cbc384 --- /dev/null +++ b/package/proj/proj.hash @@ -0,0 +1,5 @@ +# Fetched from http://download.osgeo.org/proj/proj-7.2.1.tar.gz.md5 +md5 befbafd25e65ddf0c26a8321d8bcdcd2 proj-7.2.1.tar.gz +# Locally calculated +sha256 b384f42e5fb9c6d01fe5fa4d31da2e91329668863a684f97be5d4760dbbf0a14 proj-7.2.1.tar.gz +sha256 2dcac4af6990093ef48b896bfb81452d46a31b08d46cce34b27e83f93b2e37f6 COPYING diff --git a/package/proj/proj.mk b/package/proj/proj.mk new file mode 100644 index 00000000..03ed9c0a --- /dev/null +++ b/package/proj/proj.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# proj +# +################################################################################ + +PROJ_VERSION = 7.2.1 +PROJ_SITE = http://download.osgeo.org/proj +PROJ_LICENSE = MIT +PROJ_LICENSE_FILES = COPYING +PROJ_INSTALL_STAGING = YES +PROJ_DEPENDENCIES = host-pkgconf host-sqlite sqlite + +PROJ_CFLAGS = $(TARGET_CFLAGS) +PROJ_CXXFLAGS = $(TARGET_CXXFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_68485),y) +PROJ_CFLAGS += -O0 +PROJ_CXXFLAGS += -O0 +endif + +PROJ_CONF_ENV = \ + CFLAGS="$(PROJ_CFLAGS)" \ + CXXFLAGS="$(PROJ_CXXFLAGS)" + +ifeq ($(BR2_PACKAGE_LIBCURL),y) +PROJ_DEPENDENCIES += libcurl +PROJ_CONF_OPTS += --with-curl=$(STAGING_DIR)/usr/bin/curl-config +else +PROJ_CONF_OPTS += --without-curl +endif + +ifeq ($(BR2_PACKAGE_TIFF),y) +PROJ_DEPENDENCIES += tiff +PROJ_CONF_OPTS += --enable-tiff +else +PROJ_CONF_OPTS += --disable-tiff +endif + +$(eval $(autotools-package)) diff --git a/package/prosody/0001-enable-syslog.patch b/package/prosody/0001-enable-syslog.patch new file mode 100644 index 00000000..16acc89c --- /dev/null +++ b/package/prosody/0001-enable-syslog.patch @@ -0,0 +1,25 @@ +From 267b5d195be0f3a8f00ccf4ccb62e25a9c4e48eb Mon Sep 17 00:00:00 2001 +From: Francois Perrad +Date: Sun, 22 Oct 2017 08:44:01 +0200 +Subject: [PATCH] enable syslog + +note: the posix module is auto-loaded by default + +Signed-off-by: Francois Perrad + +diff --git a/prosody.cfg.lua.dist b/prosody.cfg.lua.dist +index a0fc6c9e..af3cc0e4 100644 +--- a/prosody.cfg.lua.dist ++++ b/prosody.cfg.lua.dist +@@ -155,7 +155,7 @@ archive_expires_after = "1w" -- Remove archived messages after 1 week + log = { + info = "prosody.log"; -- Change 'info' to 'debug' for verbose logging + error = "prosody.err"; +- -- "*syslog"; -- Uncomment this for logging to syslog ++ "*syslog"; -- Uncomment this for logging to syslog + -- "*console"; -- Log to the console, useful for debugging with daemonize=false + } + +-- +2.11.0 + diff --git a/package/prosody/0002-add-pidfile.patch b/package/prosody/0002-add-pidfile.patch new file mode 100644 index 00000000..6221fd08 --- /dev/null +++ b/package/prosody/0002-add-pidfile.patch @@ -0,0 +1,26 @@ +From 124d479195ac8ec1747b5b89fe4860d0e92c2aae Mon Sep 17 00:00:00 2001 +From: Francois Perrad +Date: Sun, 22 Oct 2017 08:58:11 +0200 +Subject: [PATCH] add pidfile + +see https://prosody.im/doc/configure#posix-only_options + +Signed-off-by: Francois Perrad + +diff --git a/prosody.cfg.lua.dist b/prosody.cfg.lua.dist +index af3cc0e4..675db12f 100644 +--- a/prosody.cfg.lua.dist ++++ b/prosody.cfg.lua.dist +@@ -176,6 +176,9 @@ log = { + -- HTTPS currently only supports a single certificate, specify it here: + --https_certificate = "certs/localhost.crt" + ++-- This must match the PIDFILE used in S50prosody ++pidfile = "/var/run/prosody/prosody.pid" ++ + ----------- Virtual hosts ----------- + -- You need to add a VirtualHost entry for each domain you wish Prosody to serve. + -- Settings under each VirtualHost entry apply *only* to that host. +-- +2.11.0 + diff --git a/package/prosody/Config.in b/package/prosody/Config.in new file mode 100644 index 00000000..d9335070 --- /dev/null +++ b/package/prosody/Config.in @@ -0,0 +1,26 @@ +config BR2_PACKAGE_PROSODY + bool "prosody" + depends on BR2_USE_MMU # fork + depends on BR2_PACKAGE_HAS_LUAINTERPRETER + depends on !BR2_PACKAGE_LUA_5_4 + depends on !BR2_STATIC_LIBS # luaexpat, luasec, luasocket, luafilesystem + select BR2_PACKAGE_LUABITOP if BR2_PACKAGE_LUA_5_1 # runtime + select BR2_PACKAGE_LUAEXPAT # runtime + select BR2_PACKAGE_LUASEC # runtime + select BR2_PACKAGE_LUASOCKET # runtime + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_LIBIDN + select BR2_PACKAGE_LUAFILESYSTEM # runtime + help + Prosody is a modern XMPP communication server. It aims to be + easy to set up and configure, and efficient with system + resources. + + https://prosody.im + +comment "prosody needs the lua interpreter, dynamic library" + depends on !BR2_PACKAGE_HAS_LUAINTERPRETER || BR2_STATIC_LIBS + depends on BR2_USE_MMU + +comment "prosody needs a Lua <= 5.3" + depends on BR2_PACKAGE_LUA_5_4 diff --git a/package/prosody/S50prosody b/package/prosody/S50prosody new file mode 100644 index 00000000..6fd33671 --- /dev/null +++ b/package/prosody/S50prosody @@ -0,0 +1,40 @@ +#! /bin/sh + +NAME=prosody + +# This must match the pidfile field in +# /etc/prosody/prosody.cfg.lua + +PIDDIR=/var/run/$NAME +PIDFILE=$PIDDIR/$NAME.pid + +case "$1" in + start) + printf "Starting $NAME: " + mkdir -p $PIDDIR + chown $NAME:$NAME $PIDDIR + start-stop-daemon -S -q -o -x /usr/bin/prosody -c $NAME + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + stop) + printf "Stopping $NAME: " + # The standard method of identifying the name doesn't + # work as the process name is lua. So use the pidfile + # which is created by the service itself as a match + # criteria when stopping the service + start-stop-daemon -K -q -o -p "$PIDFILE" + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + restart|reload) + echo "Restarting $NAME: " + $0 stop + sleep 1 + $0 start + ;; + *) + echo "Usage: $0 {start|stop|restart|reload}" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/package/prosody/prosody.hash b/package/prosody/prosody.hash new file mode 100644 index 00000000..50d59647 --- /dev/null +++ b/package/prosody/prosody.hash @@ -0,0 +1,8 @@ +# Locally computed: +md5 be7e1c66c06b0eb4bdce37b67bcc6b51 prosody-0.11.9.tar.gz +sha1 632c2dd7794d344d4edbcea18fc1b5f623da5ca4 prosody-0.11.9.tar.gz +sha256 ccc032aea49d858635fb93644db276de6812be83073a8d80e9b4508095deff09 prosody-0.11.9.tar.gz +sha512 fabbbbb1acb3de4ff01e3e8c6e9e4dc37cb161259f1649683a1f9d925ed9f1709e052bfc831cba3f1861a9cca599f2b725ee739bfcb57164d6f50ac07011b52a prosody-0.11.9.tar.gz + +# Hash for license file: +sha256 bbbdc1c5426e5944cf869fc0faeaf19d88a220cd2b39ea98b7b8e86b0e88a2ef COPYING diff --git a/package/prosody/prosody.mk b/package/prosody/prosody.mk new file mode 100644 index 00000000..92c812eb --- /dev/null +++ b/package/prosody/prosody.mk @@ -0,0 +1,63 @@ +################################################################################ +# +# prosody +# +################################################################################ + +PROSODY_VERSION = 0.11.9 +PROSODY_SITE = https://prosody.im/downloads/source +PROSODY_LICENSE = MIT +PROSODY_LICENSE_FILES = COPYING +PROSODY_CPE_ID_VENDOR = prosody +PROSODY_DEPENDENCIES = host-luainterpreter luainterpreter libidn openssl + +PROSODY_CFLAGS = $(TARGET_CFLAGS) -fPIC -std=c99 \ + $(if BR2_TOOLCHAIN_USES_MUSL,-DWITHOUT_MALLINFO) + +PROSODY_CONF_OPTS = \ + --with-lua-bin=$(HOST_DIR)/bin \ + --with-lua=$(STAGING_DIR)/usr \ + --lua-version=$(LUAINTERPRETER_ABIVER) \ + --c-compiler=$(TARGET_CC) \ + --cflags="$(PROSODY_CFLAGS)" \ + --linker=$(TARGET_CC) \ + --ldflags="$(TARGET_LDFLAGS) -shared" \ + --sysconfdir=/etc/prosody \ + --prefix=/usr + +ifeq ($(BR2_PACKAGE_LUAJIT),y) +PROSODY_CONF_OPTS += --runwith=luajit +endif + +define PROSODY_CONFIGURE_CMDS + cd $(@D) && \ + $(TARGET_CONFIGURE_OPTS) \ + ./configure $(PROSODY_CONF_OPTS) +endef + +define PROSODY_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define PROSODY_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) DESTDIR="$(TARGET_DIR)" -C $(@D) install +endef + +define PROSODY_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/prosody/S50prosody \ + $(TARGET_DIR)/etc/init.d/S50prosody +endef + +define PROSODY_USERS + prosody -1 prosody -1 * - - - Prosody user +endef + +# make install installs a Makefile and meta data to generate certs +define PROSODY_REMOVE_CERT_GENERATOR + rm -f $(TARGET_DIR)/etc/prosody/certs/Makefile + rm -f $(TARGET_DIR)/etc/prosody/certs/*.cnf +endef + +PROSODY_POST_INSTALL_TARGET_HOOKS += PROSODY_REMOVE_CERT_GENERATOR + +$(eval $(generic-package)) diff --git a/package/protobuf-c/Config.in b/package/protobuf-c/Config.in new file mode 100644 index 00000000..a32e6cd9 --- /dev/null +++ b/package/protobuf-c/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_PROTOBUF_C + bool "protobuf-c" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + # host-protobuf only builds on certain architectures + depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86" + help + Code generator and runtime libraries to use Protocol Buffers + from pure C (not C++). + + https://github.com/protobuf-c/protobuf-c + +comment "protobuf-c needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86" diff --git a/package/protobuf-c/protobuf-c.hash b/package/protobuf-c/protobuf-c.hash new file mode 100644 index 00000000..abc11afc --- /dev/null +++ b/package/protobuf-c/protobuf-c.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 8515da8b84ea36768ae69a52f9ede8d718936d6058077265b6e458cfc55f8bdb protobuf-c-1.3.3.tar.gz +sha256 20e800cad4550f4b19bb37fc9577dac21de13333ae66497c4c45ae489c35c34a LICENSE diff --git a/package/protobuf-c/protobuf-c.mk b/package/protobuf-c/protobuf-c.mk new file mode 100644 index 00000000..f28f5ff5 --- /dev/null +++ b/package/protobuf-c/protobuf-c.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# protobuf-c +# +################################################################################ + +PROTOBUF_C_VERSION = 1.3.3 +PROTOBUF_C_SITE = $(call github,protobuf-c,protobuf-c,v$(PROTOBUF_C_VERSION)) +PROTOBUF_C_DEPENDENCIES = host-protobuf-c +HOST_PROTOBUF_C_DEPENDENCIES = host-protobuf host-pkgconf +PROTOBUF_C_MAKE = $(MAKE1) +PROTOBUF_C_CONF_OPTS = --disable-protoc +PROTOBUF_C_INSTALL_STAGING = YES +PROTOBUF_C_LICENSE = BSD-2-Clause +PROTOBUF_C_LICENSE_FILES = LICENSE +PROTOBUF_C_AUTORECONF = YES +HOST_PROTOBUF_C_AUTORECONF = YES + +# host-protobuf needs c++11 (since 3.6.0) +HOST_PROTOBUF_C_CONF_ENV += CXXFLAGS="$(HOST_CXXFLAGS) -std=c++11" + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/protobuf/Config.in b/package/protobuf/Config.in new file mode 100644 index 00000000..30050950 --- /dev/null +++ b/package/protobuf/Config.in @@ -0,0 +1,46 @@ +# See src/google/protobuf/stubs/platform_macros.h for supported archs. +# +# On PowerPC, the __atomic_*() built-ins for 1-byte, 2-byte and 4-byte +# types are available built-in. However, the __atomic_*() built-ins for +# 8-byte types is implemented via libatomic, so only available since gcc +# 4.8. +# +# In Buildroot, to simplify things, we've decided to simply require gcc +# 4.8 as soon as the architectures has at least one __atomic_*() built-in +# variant that requires libatomic. +# +# Since protobuf most likely only uses the 1, 2 and 4-byte variants, it +# *could* technically build with gcc 4.7. This is probably not a big deal, +# and we can live with requiring gcc 4.8 on PowerPC to build protobuf. +# +# host-protobuf only builds on certain architectures +config BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS + bool + default y if BR2_arm + default y if BR2_i386 + default y if BR2_mipsel + default y if BR2_x86_64 + default y if BR2_sparc64 + default y if BR2_TOOLCHAIN_HAS_ATOMIC + depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86" + depends on BR2_USE_MMU # fork() + depends on !BR2_TOOLCHAIN_HAS_BINUTILS_BUG_21464 + +config BR2_PACKAGE_PROTOBUF + bool "protobuf" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11 + depends on !BR2_STATIC_LIBS + help + Protocol buffers are Google's language-neutral, + platform-neutral, extensible mechanism for serializing + structured data. + + https://developers.google.com/protocol-buffers + +comment "protobuf needs a toolchain w/ C++, threads, dynamic library, gcc >= 4.8" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS \ + || BR2_STATIC_LIBS || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS diff --git a/package/protobuf/protobuf.hash b/package/protobuf/protobuf.hash new file mode 100644 index 00000000..001b41be --- /dev/null +++ b/package/protobuf/protobuf.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 6e5e117324afd944dcf67f36cf329843bc1a92229a8cd9bb573d7a83130fea7d LICENSE +sha256 50ec5a07c0c55d4ec536dd49021f2e194a26bfdbc531d03d1e9d4d3e27175659 protobuf-cpp-3.14.0.tar.gz diff --git a/package/protobuf/protobuf.mk b/package/protobuf/protobuf.mk new file mode 100644 index 00000000..df708819 --- /dev/null +++ b/package/protobuf/protobuf.mk @@ -0,0 +1,47 @@ +################################################################################ +# +# protobuf +# +################################################################################ + +# When bumping this package, make sure to also verify if the +# python-protobuf package still works and to update its hash, +# as they share the same version/site variables. +PROTOBUF_VERSION = 3.14.0 +PROTOBUF_SOURCE = protobuf-cpp-$(PROTOBUF_VERSION).tar.gz +PROTOBUF_SITE = https://github.com/google/protobuf/releases/download/v$(PROTOBUF_VERSION) +PROTOBUF_LICENSE = BSD-3-Clause +PROTOBUF_LICENSE_FILES = LICENSE +PROTOBUF_CPE_ID_VENDOR = google + +# N.B. Need to use host protoc during cross compilation. +PROTOBUF_DEPENDENCIES = host-protobuf +PROTOBUF_CONF_OPTS = --with-protoc=$(HOST_DIR)/bin/protoc + +PROTOBUF_CXXFLAGS = $(TARGET_CXXFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y) +PROTOBUF_CXXFLAGS += -O0 +endif + +PROTOBUF_CONF_ENV = CXXFLAGS="$(PROTOBUF_CXXFLAGS)" + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +PROTOBUF_CONF_ENV += LIBS=-latomic +endif + +PROTOBUF_INSTALL_STAGING = YES + +ifeq ($(BR2_PACKAGE_ZLIB),y) +PROTOBUF_DEPENDENCIES += zlib +endif + +define PROTOBUF_REMOVE_UNNECESSARY_TARGET_FILES + rm -rf $(TARGET_DIR)/usr/bin/protoc + rm -rf $(TARGET_DIR)/usr/lib/libprotoc.so* +endef + +PROTOBUF_POST_INSTALL_TARGET_HOOKS += PROTOBUF_REMOVE_UNNECESSARY_TARGET_FILES + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/proxychains-ng/0001-configure-fix-check_link_silent-test.patch b/package/proxychains-ng/0001-configure-fix-check_link_silent-test.patch new file mode 100644 index 00000000..aadfef9c --- /dev/null +++ b/package/proxychains-ng/0001-configure-fix-check_link_silent-test.patch @@ -0,0 +1,41 @@ +From 4a557f242a76c6a2a3134acf1d3279818f8ab371 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Fri, 23 Jul 2021 09:50:36 +0200 +Subject: [PATCH] configure: fix check_link_silent test + +Replace -o /dev/null by -o "$tmpc".out when testing with +check_link_silent otherwise test will fail with some bugged binutils +(https://sourceware.org/bugzilla/show_bug.cgi?id=19526) since version +4.13 and +https://github.com/rofl0r/proxychains-ng/commit/35a674bdbc294730429a1007c9e7ce01e65b49b5: + +checking what's the option to use in linker to set library name ... +cannot find an option to set library name +package/pkg-generic.mk:249: recipe for target '/home/buildroot/autobuild/instance-2/output-1/build/proxychains-ng-4.14/.stamp_configured' failed + +Fixes: + - http://autobuild.buildroot.org/results/9320d9b2c69882e23bbe7b30057eb8bee0c9d2e5 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/rofl0r/proxychains-ng/pull/387] +--- + configure | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/configure b/configure +index 8b21b97..cfe19e7 100755 +--- a/configure ++++ b/configure +@@ -49,7 +49,8 @@ check_compile_run() { + + check_link_silent() { + printf "$2" > "$tmpc" +- $CC $OUR_CPPFLAGS $CPPFLAGS $1 $CFLAGS "$tmpc" -o /dev/null >/dev/null 2>&1 ++ $CC $OUR_CPPFLAGS $CPPFLAGS $1 $CFLAGS "$tmpc" -o "$tmpc".out >/dev/null 2>&1 ++ rm -f "$tmpc".out + } + + check_link() { +-- +2.30.2 + diff --git a/package/proxychains-ng/Config.in b/package/proxychains-ng/Config.in new file mode 100644 index 00000000..e27283ad --- /dev/null +++ b/package/proxychains-ng/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PROXYCHAINS_NG + bool "proxychains-ng" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + help + Force any tcp connections to flow through a proxy (or proxy + chain) + + https://github.com/rofl0r/proxychains + +comment "proxychains-ng needs a toolchain w/ threads, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/proxychains-ng/proxychains-ng.hash b/package/proxychains-ng/proxychains-ng.hash new file mode 100644 index 00000000..779f6b62 --- /dev/null +++ b/package/proxychains-ng/proxychains-ng.hash @@ -0,0 +1,4 @@ +# From https://github.com/rofl0r/proxychains-ng/releases/tag/v4.14 +sha512 75a1a4629d2b7ebac9b909a694b395339cf669fa4e23bfcc57938e46377b5619f31c9651d2bc457d1ad10ec1be7747981106392bf8bf65999cb7bb9c748d7e95 proxychains-ng-4.14.tar.xz +# Locally computed: +sha256 86728623caeff60e9bcc37e03b432fd191de927eed48a72a3bb4ac4e53fe20df COPYING diff --git a/package/proxychains-ng/proxychains-ng.mk b/package/proxychains-ng/proxychains-ng.mk new file mode 100644 index 00000000..bb7c9ff6 --- /dev/null +++ b/package/proxychains-ng/proxychains-ng.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# proxychains-ng +# +################################################################################ + +PROXYCHAINS_NG_VERSION = 4.14 +PROXYCHAINS_NG_SOURCE = proxychains-ng-$(PROXYCHAINS_NG_VERSION).tar.xz +PROXYCHAINS_NG_SITE = http://downloads.sourceforge.net/project/proxychains-ng +PROXYCHAINS_NG_LICENSE = GPL-2.0+ +PROXYCHAINS_NG_LICENSE_FILES = COPYING +PROXYCHAINS_NG_CPE_ID_VENDOR = proxychains-ng_project + +define PROXYCHAINS_NG_CONFIGURE_CMDS + cd $(@D) && \ + $(TARGET_CONFIGURE_OPTS) ./configure --prefix=/usr --sysconfdir=/etc +endef + +define PROXYCHAINS_NG_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) +endef + +define PROXYCHAINS_NG_INSTALL_TARGET_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install install-config +endef + +$(eval $(generic-package)) diff --git a/package/pru-software-support/Config.in b/package/pru-software-support/Config.in new file mode 100644 index 00000000..4e34806e --- /dev/null +++ b/package/pru-software-support/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PRU_SOFTWARE_SUPPORT + bool "pru-software-support" + depends on BR2_PACKAGE_HOST_TI_CGT_PRU_ARCH_SUPPORTS + select BR2_PACKAGE_HOST_PRU_SOFTWARE_SUPPORT + help + PRU firmware examples extracted from TI's PRU software + support package. See readme.txt for installation details. + + https://git.ti.com/pru-software-support-package/pru-software-support-package diff --git a/package/pru-software-support/Config.in.host b/package/pru-software-support/Config.in.host new file mode 100644 index 00000000..d362ac5a --- /dev/null +++ b/package/pru-software-support/Config.in.host @@ -0,0 +1,11 @@ +config BR2_PACKAGE_HOST_PRU_SOFTWARE_SUPPORT + bool "host pru-software-support" + depends on BR2_PACKAGE_HOST_TI_CGT_PRU_ARCH_SUPPORTS + select BR2_PACKAGE_HOST_TI_CGT_PRU + help + This package provides useful headers and libraries for the + PRU unit found on some TI processors e.g. AM3358. Note that + the included labs and examples aren't built, they can be + built using the corresponding target package. + + https://git.ti.com/pru-software-support-package/pru-software-support-package diff --git a/package/pru-software-support/pru-software-support.hash b/package/pru-software-support/pru-software-support.hash new file mode 100644 index 00000000..cd81488e --- /dev/null +++ b/package/pru-software-support/pru-software-support.hash @@ -0,0 +1,3 @@ +# Locally-calculated hash +sha256 57e47128dc5437c5a64d4ef94f419d9ea38e894c0c31ab10cad99c0da614b296 pru-software-support-package-v5.7.0.tar.gz +sha256 62a2f56498cd1bac2d4ea6ea1c941affba1e4bb65bfdf2dcffd8e5079fa34399 PRU-Package-v6.1-Manifest.html diff --git a/package/pru-software-support/pru-software-support.mk b/package/pru-software-support/pru-software-support.mk new file mode 100644 index 00000000..91f41bcb --- /dev/null +++ b/package/pru-software-support/pru-software-support.mk @@ -0,0 +1,38 @@ +################################################################################ +# +# pru-software-support +# +################################################################################ + +PRU_SOFTWARE_SUPPORT_VERSION = 5.7.0 +PRU_SOFTWARE_SUPPORT_SITE = https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/snapshot +PRU_SOFTWARE_SUPPORT_SOURCE = $(PRU_SOFTWARE_SUPPORT_NAME)-package-v$(PRU_SOFTWARE_SUPPORT_VERSION).tar.gz +PRU_SOFTWARE_SUPPORT_LICENSE = BSD-3-Clause, Public Domain +PRU_SOFTWARE_SUPPORT_LICENSE_FILES = PRU-Package-v6.1-Manifest.html +PRU_SOFTWARE_SUPPORT_DEPENDENCIES = host-ti-cgt-pru host-pru-software-support +HOST_PRU_SOFTWARE_SUPPORT_DEPENDENCIES = host-ti-cgt-pru + +define HOST_PRU_SOFTWARE_SUPPORT_BUILD_CMDS + $(MAKE) PRU_CGT=$(TI_CGT_PRU_INSTALLDIR) -C $(@D)/lib/src +endef + +# install this library support alongside PRU toolchain i.e. +# everything in TI_CGT_PRU_INSTALLDIR as PRU_CGT +define HOST_PRU_SOFTWARE_SUPPORT_INSTALL_CMDS + mkdir -p $(TI_CGT_PRU_INSTALLDIR)/usr/include + cp -dpfr $(@D)/include/* $(TI_CGT_PRU_INSTALLDIR)/usr/include + mkdir -p $(TI_CGT_PRU_INSTALLDIR)/usr/lib + cp -dpfr $(@D)/lib/src/*/gen/*.lib $(TI_CGT_PRU_INSTALLDIR)/usr/lib/ +endef + +define PRU_SOFTWARE_SUPPORT_BUILD_CMDS + $(MAKE) PRU_CGT=$(TI_CGT_PRU_INSTALLDIR) -C $(@D)/examples +endef + +define PRU_SOFTWARE_SUPPORT_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/usr/share/pru-software-support + cp -dpfr $(@D)/examples/* $(TARGET_DIR)/usr/share/pru-software-support/ +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/pru-software-support/readme.txt b/package/pru-software-support/readme.txt new file mode 100644 index 00000000..85d7af82 --- /dev/null +++ b/package/pru-software-support/readme.txt @@ -0,0 +1,21 @@ +PRU Software Support +==================== + +Two different packages are provided from the TI PRU software support +code base. + +1. The include files and rpmsg static library for the PRU are + installed alongside the host package for the PRU code generation + tools package i.e. $(TI_CGT_PRU_INSTALLDIR). + +2. A target package for all the examples installed to + /usr/share/pru-software-support/. Users wanting to test a specific + example should copy or link it to a directory where the kernel + looks for firmware, e.g: + + # cp /usr/share/pru-software-support/am335x/PRU_gpioToggle/gen/PRU_gpioToggle.out \ + /lib/firmware/am335x-pru0-fw + +To get started with the PRU, have a look at the labs [1]. + +[1] http://processors.wiki.ti.com/index.php/PRU_Training:_Hands-on_Labs diff --git a/package/psmisc/Config.in b/package/psmisc/Config.in new file mode 100644 index 00000000..84e30967 --- /dev/null +++ b/package/psmisc/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PSMISC + bool "psmisc" + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + select BR2_PACKAGE_NCURSES + help + Helpful /proc related utilities such as pstree, fuser, and + killall + + https://gitlab.com/psmisc/psmisc diff --git a/package/psmisc/psmisc.hash b/package/psmisc/psmisc.hash new file mode 100644 index 00000000..8e380a55 --- /dev/null +++ b/package/psmisc/psmisc.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/psmisc/files/psmisc/ +md5 0524258861f00be1a02d27d39d8e5e62 psmisc-23.2.tar.xz +sha1 2bf3ec1c87ab3bc0610c819452c21cf4b849b0b8 psmisc-23.2.tar.xz +# Locally computed: +sha256 4b7cbffdc9373474da49b85dc3457ae511c43dc7fa7d94513fe06f89dcb87880 psmisc-23.2.tar.xz +sha256 dcc100d4161cc0b7177545ab6e47216f84857cda3843847c792a25289852dcaa COPYING diff --git a/package/psmisc/psmisc.mk b/package/psmisc/psmisc.mk new file mode 100644 index 00000000..e9a7b00c --- /dev/null +++ b/package/psmisc/psmisc.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# psmisc +# +################################################################################ + +PSMISC_VERSION = 23.2 +PSMISC_SITE = http://downloads.sourceforge.net/project/psmisc/psmisc +PSMISC_SOURCE = psmisc-$(PSMISC_VERSION).tar.xz +PSMISC_LICENSE = GPL-2.0+ +PSMISC_LICENSE_FILES = COPYING +PSMISC_DEPENDENCIES = ncurses $(TARGET_NLS_DEPENDENCIES) + +ifeq ($(BR2_TOOLCHAIN_HAS_SSP),) +# Don't force -fstack-protector when SSP is not available in toolchain +PSMISC_CONF_OPTS = --disable-harden-flags +endif + +$(eval $(autotools-package)) diff --git a/package/psplash/0001-just-process.patch b/package/psplash/0001-just-process.patch new file mode 100644 index 00000000..6813b3d8 --- /dev/null +++ b/package/psplash/0001-just-process.patch @@ -0,0 +1,42 @@ +diff -Nprua psplash-bak/psplash.c psplash/psplash.c +--- psplash-bak/psplash.c 2020-01-22 07:23:44.000000000 +0800 ++++ psplash/psplash.c 2022-10-19 10:10:02.708419139 +0800 +@@ -285,6 +285,7 @@ main (int argc, char** argv) + goto fb_fail; + } + ++#if 0 + /* Clear the background with #ecece1 */ + psplash_fb_draw_rect (fb, 0, 0, fb->width, fb->height, + PSPLASH_BACKGROUND_COLOR); +@@ -303,7 +304,7 @@ main (int argc, char** argv) + POKY_IMG_BYTES_PER_PIXEL, + POKY_IMG_ROWSTRIDE, + POKY_IMG_RLE_PIXEL_DATA); +- ++#endif + /* Draw progress bar border */ + psplash_fb_draw_image (fb, + (fb->width - BAR_IMG_WIDTH)/2, +diff -Nprua psplash-bak/psplash-colors.h psplash/psplash-colors.h +--- psplash-bak/psplash-colors.h 2020-01-22 07:23:44.000000000 +0800 ++++ psplash/psplash-colors.h 2022-10-19 10:20:00.480854452 +0800 +@@ -12,7 +12,8 @@ + #define _HAVE_PSPLASH_COLORS_H + + /* This is the overall background color */ +-#define PSPLASH_BACKGROUND_COLOR 0xec,0xec,0xe1 ++//#define PSPLASH_BACKGROUND_COLOR 0xec,0xec,0xe1 ++#define PSPLASH_BACKGROUND_COLOR 0x00,0x00,0x00 + + /* This is the color of any text output */ + #define PSPLASH_TEXT_COLOR 0x6d,0x6d,0x70 +@@ -21,6 +22,7 @@ + #define PSPLASH_BAR_COLOR 0x6d,0x6d,0x70 + + /* This is the color of the progress bar background */ +-#define PSPLASH_BAR_BACKGROUND_COLOR 0xec,0xec,0xe1 ++//#define PSPLASH_BAR_BACKGROUND_COLOR 0xec,0xec,0xe1 ++#define PSPLASH_BAR_BACKGROUND_COLOR 0x00,0x00,0x00 + + #endif diff --git a/package/psplash/Config.in b/package/psplash/Config.in new file mode 100644 index 00000000..5053ebac --- /dev/null +++ b/package/psplash/Config.in @@ -0,0 +1,31 @@ +config BR2_PACKAGE_PSPLASH + bool "psplash" + depends on BR2_USE_WCHAR + help + PSplash is a userspace graphical boot splash screen for + mainly embedded Linux devices supporting a 16bpp or 32bpp + framebuffer. It has few dependencies (just libc), supports + basic images and text and handles rotation. Its visual look + is configurable by basic source changes. + + Also included is a 'client' command utility for sending + information to psplash such as boot progress information. + + Start the drawing process with 'psplash -n&' as early as + possible. Note: psplash creates a FIFO in /tmp for + communication with psplash-write. + + Usage: + * Set progress bar to 50 percent: + psplash-write "PROGRESS 50" + + * Display message "foobar" above progress bar: + psplash-write "MSG foobar" + + * Terminate psplash: + psplash-write "QUIT" + + http://git.yoctoproject.org/cgit/cgit.cgi/psplash/ + +comment "psplash needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR diff --git a/package/psplash/psplash-start.service b/package/psplash/psplash-start.service new file mode 100644 index 00000000..b97e883e --- /dev/null +++ b/package/psplash/psplash-start.service @@ -0,0 +1,10 @@ +[Unit] +Description=Starts Psplash Boot screen +DefaultDependencies=no +RequiresMountsFor=/run + +[Service] +ExecStart=/usr/bin/psplash -n + +[Install] +WantedBy=sysinit.target diff --git a/package/psplash/psplash-systemd.service b/package/psplash/psplash-systemd.service new file mode 100644 index 00000000..249aa540 --- /dev/null +++ b/package/psplash/psplash-systemd.service @@ -0,0 +1,12 @@ +[Unit] +Description=Start psplash-systemd progress communication helper +DefaultDependencies=no +After=systemd-start.service +Requires=psplash-start.service +RequiresMountsFor=/run + +[Service] +ExecStart=/usr/bin/psplash-systemd + +[Install] +WantedBy=sysinit.target diff --git a/package/psplash/psplash.hash b/package/psplash/psplash.hash new file mode 100644 index 00000000..87fcdadd --- /dev/null +++ b/package/psplash/psplash.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 2c1344dd8414415d80a01484b1cc29e78f99c31d5266189540e5966a7dc6e10e psplash-fd33a9b3d68c89fa22ff6873f4f9fd28bd85830c-br1.tar.gz +sha256 f9c375a1be4a41f7b70301dd83c91cb89e41567478859b77eef375a52d782505 COPYING diff --git a/package/psplash/psplash.mk b/package/psplash/psplash.mk new file mode 100644 index 00000000..a0f01869 --- /dev/null +++ b/package/psplash/psplash.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# psplash +# +################################################################################ + +PSPLASH_VERSION = fd33a9b3d68c89fa22ff6873f4f9fd28bd85830c +PSPLASH_SITE = git://git.yoctoproject.org/psplash +PSPLASH_LICENSE = GPL-2.0+ +PSPLASH_LICENSE_FILES = COPYING +PSPLASH_AUTORECONF = YES +PSPLASH_DEPENDENCIES = host-gdk-pixbuf host-pkgconf + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +PSPLASH_DEPENDENCIES += systemd +PSPLASH_CONF_OPTS += --with-systemd +else +PSPLASH_CONF_OPTS += --without-systemd +endif + +define PSPLASH_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/psplash/psplash-start.service \ + $(TARGET_DIR)/usr/lib/systemd/system/psplash-start.service + + $(INSTALL) -D -m 644 package/psplash/psplash-systemd.service \ + $(TARGET_DIR)/usr/lib/systemd/system/psplash-systemd.service +endef + +$(eval $(autotools-package)) diff --git a/package/ptm2human/Config.in b/package/ptm2human/Config.in new file mode 100644 index 00000000..3d364394 --- /dev/null +++ b/package/ptm2human/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_PTM2HUMAN_ARCH_SUPPORTS + bool + default y if BR2_arm + default y if BR2_armeb + default y if BR2_aarch64 + default y if BR2_aarch64_be + +config BR2_PACKAGE_PTM2HUMAN + bool "ptm2human" + depends on BR2_PACKAGE_PTM2HUMAN_ARCH_SUPPORTS + help + ptm2human is a decoder for trace data outputted by Program + Trace Macrocell (PTM) and Embedded Trace Macrocell + (ETMv4). It deconstructs ID packets and data packets + from the formatter of ARM Coresight ETB, and then + translates the trace data to a human-readable format. + + https://github.com/hwangcc23/ptm2human diff --git a/package/ptm2human/ptm2human.hash b/package/ptm2human/ptm2human.hash new file mode 100644 index 00000000..5546ef40 --- /dev/null +++ b/package/ptm2human/ptm2human.hash @@ -0,0 +1,3 @@ +# Computed locally +sha256 28947eeb458d8b6a362cbeb8c5cb6098006274af04ebb4f5da70eac89f927d95 ptm2human-d0b8b6be9897ea5b04fd6460038a4773cec078bc.tar.gz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 LICENSE diff --git a/package/ptm2human/ptm2human.mk b/package/ptm2human/ptm2human.mk new file mode 100644 index 00000000..28a7b7ab --- /dev/null +++ b/package/ptm2human/ptm2human.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# ptm2human +# +################################################################################ + +PTM2HUMAN_VERSION = d0b8b6be9897ea5b04fd6460038a4773cec078bc +PTM2HUMAN_SITE = $(call github,hwangcc23,ptm2human,$(PTM2HUMAN_VERSION)) +PTM2HUMAN_LICENSE = GPL-2.0 +PTM2HUMAN_LICENSE_FILES = LICENSE + +# Straight out from an non-autoconfigured git tree: +PTM2HUMAN_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/ptpd/Config.in b/package/ptpd/Config.in new file mode 100644 index 00000000..2d87ca31 --- /dev/null +++ b/package/ptpd/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PTPD + bool "ptpd" + help + The PTP daemon (PTPd) implements the Precision Time protocol + (PTP) as defined by the IEEE-1588-2002. + + http://ptpd.sourceforge.net/ diff --git a/package/ptpd/S65ptpd b/package/ptpd/S65ptpd new file mode 100644 index 00000000..89914e96 --- /dev/null +++ b/package/ptpd/S65ptpd @@ -0,0 +1,29 @@ +#!/bin/sh +# +# Start ptpd +# + +case "$1" in + start) + printf "Starting ptpd: " + start-stop-daemon -S -q -x /usr/sbin/ptpd -- -S + if [ $? != 0 ]; then + echo "FAILED" + exit 1 + else + echo "OK" + fi + ;; + stop) + printf "Stopping ptpd: " + start-stop-daemon -K -q -x /usr/sbin/ptpd + echo "OK" + ;; + restart|reload) + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/ptpd/ptpd.hash b/package/ptpd/ptpd.hash new file mode 100644 index 00000000..199f93fc --- /dev/null +++ b/package/ptpd/ptpd.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 a7c6ea83bd53da75ae04a7b7a25fe7c597b4e9ff1f93d46f4502e3fa8a2cb950 ptpd-1.1.0.tar.gz +sha256 be69f30947abef91e0bce161005fe56b116b770e459e3e6980279349de47c366 COPYRIGHT diff --git a/package/ptpd/ptpd.mk b/package/ptpd/ptpd.mk new file mode 100644 index 00000000..49587231 --- /dev/null +++ b/package/ptpd/ptpd.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# ptpd +# +################################################################################ + +PTPD_VERSION = 1.1.0 +PTPD_SITE = http://downloads.sourceforge.net/project/ptpd/ptpd/$(PTPD_VERSION) +PTPD_LICENSE = BSD +PTPD_LICENSE_FILES = COPYRIGHT + +define PTPD_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D)/src +endef + +define PTPD_INSTALL_TARGET_CMDS + $(INSTALL) -m 755 -D $(@D)/src/ptpd $(TARGET_DIR)/usr/sbin/ptpd +endef + +define PTPD_INSTALL_INIT_SYSV + $(INSTALL) -m 755 -D package/ptpd/S65ptpd \ + $(TARGET_DIR)/etc/init.d/S65ptpd +endef + +define PTPD_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/ptpd/ptpd.service \ + $(TARGET_DIR)/usr/lib/systemd/system/ptpd.service +endef + +$(eval $(generic-package)) diff --git a/package/ptpd/ptpd.service b/package/ptpd/ptpd.service new file mode 100644 index 00000000..c9da3f42 --- /dev/null +++ b/package/ptpd/ptpd.service @@ -0,0 +1,10 @@ +[Unit] +Description=Precision Time Protocol daemon +After=syslog.target network.target + +[Service] +ExecStart=/usr/sbin/ptpd -c +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/package/ptpd2/0001-musl.patch b/package/ptpd2/0001-musl.patch new file mode 100644 index 00000000..2e214b21 --- /dev/null +++ b/package/ptpd2/0001-musl.patch @@ -0,0 +1,15 @@ +Fix musl build + +Signed-off-by: Bernd Kuhls + +diff -uNr ptpd-ptpd-2.3.1.org/src/dep/net.c ptpd-ptpd-2.3.1/src/dep/net.c +--- ptpd-ptpd-2.3.1.org/src/dep/net.c 2015-06-29 17:13:29.000000000 +0200 ++++ ptpd-ptpd-2.3.1/src/dep/net.c 2016-01-24 00:35:44.509860065 +0100 +@@ -82,7 +82,6 @@ + #ifdef SO_TIMESTAMPING + #include + #include +-#include + #endif /* SO_TIMESTAMPING */ + + /** diff --git a/package/ptpd2/0002-ntp_isc_md5-rename-EVP_MD_CTX-into-PTPD_EVP_MD_CTX.patch b/package/ptpd2/0002-ntp_isc_md5-rename-EVP_MD_CTX-into-PTPD_EVP_MD_CTX.patch new file mode 100644 index 00000000..e655ff33 --- /dev/null +++ b/package/ptpd2/0002-ntp_isc_md5-rename-EVP_MD_CTX-into-PTPD_EVP_MD_CTX.patch @@ -0,0 +1,46 @@ +From af1d16d90ff273413a57cd02689f4fb005403609 Mon Sep 17 00:00:00 2001 +From: Giulio Benetti +Date: Fri, 31 Aug 2018 18:46:56 +0200 +Subject: [PATCH] ntp_isc_md5: rename EVP_MD_CTX into PTPD_EVP_MD_CTX + +EVP_MD_CTX can conflict with openssl that defines a completely different +typedef with same name. + +Since this typedef is used only twice in the entire ptpd, +substitute EVP_MD_CTX with PTPD_EVP_MD_CTX. + +Signed-off-by: Giulio Benetti +--- + src/dep/ntpengine/ntp_isc_md5.c | 2 +- + src/dep/ntpengine/ntp_isc_md5.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/dep/ntpengine/ntp_isc_md5.c b/src/dep/ntpengine/ntp_isc_md5.c +index 850d004..3216de8 100644 +--- a/src/dep/ntpengine/ntp_isc_md5.c ++++ b/src/dep/ntpengine/ntp_isc_md5.c +@@ -262,7 +262,7 @@ MD5authencrypt( + { + u_char digest[64]; + u_int len; +- EVP_MD_CTX ctx; ++ PTPD_EVP_MD_CTX ctx; + pkt[length / 4] = htonl(keyid); + EVP_DigestInit(&ctx); + EVP_DigestUpdate(&ctx, (u_char *)key, (u_int)strlen(key)); +diff --git a/src/dep/ntpengine/ntp_isc_md5.h b/src/dep/ntpengine/ntp_isc_md5.h +index fa6e2ee..236c0e4 100644 +--- a/src/dep/ntpengine/ntp_isc_md5.h ++++ b/src/dep/ntpengine/ntp_isc_md5.h +@@ -80,7 +80,7 @@ isc_md5_final(isc_md5_t *ctx, unsigned char *digest); + # define MD5Init(c) isc_md5_init(c) + # define MD5Update(c, p, s) isc_md5_update(c, p, s) + # define MD5Final(d, c) isc_md5_final((c), (d)) /* swapped */ +- typedef MD5_CTX EVP_MD_CTX; ++ typedef MD5_CTX PTPD_EVP_MD_CTX; + # define EVP_DigestInit(c) MD5Init(c) + # define EVP_DigestUpdate(c, p, s) MD5Update(c, p, s) + # define EVP_DigestFinal(c, d, pdl) \ +-- +2.14.4 + diff --git a/package/ptpd2/0003-Solve-issue-25-Removing-type-U64-from-net-snmp-relat.patch b/package/ptpd2/0003-Solve-issue-25-Removing-type-U64-from-net-snmp-relat.patch new file mode 100644 index 00000000..f952755d --- /dev/null +++ b/package/ptpd2/0003-Solve-issue-25-Removing-type-U64-from-net-snmp-relat.patch @@ -0,0 +1,28 @@ +From 84157b11e8f27318f7291823c657f6313c3b60af Mon Sep 17 00:00:00 2001 +From: Jan Breuer +Date: Tue, 12 Jul 2016 18:07:08 +0200 +Subject: [PATCH] Solve issue #25 - Removing type U64 from net-snmp related + code + +[Thomas: Backport to 2.3.1.] +Signed-off-by: Thomas Petazzoni +--- + src/dep/snmp.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/dep/snmp.c b/src/dep/snmp.c +index 5c08aaa..3086c86 100644 +--- a/src/dep/snmp.c ++++ b/src/dep/snmp.c +@@ -221,7 +221,7 @@ snmpHeaderIndexBest(struct snmpHeaderIndex *idx) + + #define SNMP_LOCAL_VARIABLES \ + static unsigned long long_ret; \ +- static U64 counter64_ret; \ ++ static struct counter64 counter64_ret; \ + static uint32_t ipaddr; \ + Integer64 bigint; \ + struct snmpHeaderIndex idx; \ +-- +2.14.4 + diff --git a/package/ptpd2/Config.in b/package/ptpd2/Config.in new file mode 100644 index 00000000..406276af --- /dev/null +++ b/package/ptpd2/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PTPD2 + bool "ptpd2" + select BR2_PACKAGE_LIBPCAP + help + The PTP daemon (PTPd) implements the Precision Time protocol + (PTP) as defined by the IEEE-1588-2008. + + https://github.com/ptpd/ptpd diff --git a/package/ptpd2/S65ptpd2 b/package/ptpd2/S65ptpd2 new file mode 100644 index 00000000..f815cb5a --- /dev/null +++ b/package/ptpd2/S65ptpd2 @@ -0,0 +1,29 @@ +#!/bin/sh +# +# Start ptpd2 +# + +case "$1" in + start) + printf "Starting ptpd2: " + start-stop-daemon -S -q -x /usr/sbin/ptpd2 -- -g + if [ $? != 0 ]; then + echo "FAILED" + exit 1 + else + echo "OK" + fi + ;; + stop) + printf "Stopping ptpd2: " + start-stop-daemon -K -q -x /usr/sbin/ptpd2 + echo "OK" + ;; + restart|reload) + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/ptpd2/ptpd2.hash b/package/ptpd2/ptpd2.hash new file mode 100644 index 00000000..b29ce2a0 --- /dev/null +++ b/package/ptpd2/ptpd2.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 267ad61d09d97069acec5d4878dceda20d0ddbebd27557d80230847848cee6c2 ptpd2-2.3.1.tar.gz +sha256 5e101ac565a8e74ef4efbf7e0c95ef9333e00618c05dbf5fb4ed50a5bab1ff09 COPYRIGHT diff --git a/package/ptpd2/ptpd2.mk b/package/ptpd2/ptpd2.mk new file mode 100644 index 00000000..0de33646 --- /dev/null +++ b/package/ptpd2/ptpd2.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# ptpd2 +# +################################################################################ + +PTPD2_VERSION = 2.3.1 +PTPD2_SITE = $(call github,ptpd,ptpd,ptpd-$(PTPD2_VERSION)) +PTPD2_DEPENDENCIES = libpcap +PTPD2_CONF_OPTS = --with-pcap-config=$(STAGING_DIR)/usr/bin/pcap-config +# configure not shipped +PTPD2_AUTORECONF = YES +PTPD2_LICENSE = BSD-2-Clause +PTPD2_LICENSE_FILES = COPYRIGHT + +ifeq ($(BR2_STATIC_LIBS),y) +PTPD2_CONF_OPTS += LIBS="`$(STAGING_DIR)/usr/bin/pcap-config --static --additional-libs`" +endif + +ifeq ($(BR2_PACKAGE_NETSNMP),y) +PTPD2_CONF_ENV += ac_cv_path_PATH_NET_SNMP_CONFIG=$(STAGING_DIR)/usr/bin/net-snmp-config +PTPD2_DEPENDENCIES += netsnmp +else +PTPD2_CONF_OPTS += --disable-snmp +endif + +define PTPD2_INSTALL_INIT_SYSV + $(INSTALL) -m 755 -D package/ptpd2/S65ptpd2 \ + $(TARGET_DIR)/etc/init.d/S65ptpd2 +endef + +define PTPD2_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/ptpd2/ptpd2.service \ + $(TARGET_DIR)/usr/lib/systemd/system/ptpd2.service +endef + +$(eval $(autotools-package)) diff --git a/package/ptpd2/ptpd2.service b/package/ptpd2/ptpd2.service new file mode 100644 index 00000000..66e71ce0 --- /dev/null +++ b/package/ptpd2/ptpd2.service @@ -0,0 +1,10 @@ +[Unit] +Description=Precision Time Protocol daemon +After=syslog.target network.target + +[Service] +ExecStart=/usr/sbin/ptpd2 -C -g +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/package/pugixml/Config.in b/package/pugixml/Config.in new file mode 100644 index 00000000..6b7d2e32 --- /dev/null +++ b/package/pugixml/Config.in @@ -0,0 +1,54 @@ +config BR2_PACKAGE_PUGIXML + bool "pugixml" + depends on BR2_INSTALL_LIBSTDCPP + help + Light-weight, simple and fast XML parser for C++ with XPath + support + + Features: + * DOM-like interface with rich traversal/modification + capabilities + * Extremely fast non-validating XML parser which constructs + the DOM tree from an XML file/buffer + * XPath 1.0 implementation for complex data-driven tree + queries + * Full Unicode support with Unicode interface variants and + automatic encoding conversions + + http://pugixml.org/ + https://github.com/zeux/pugixml + +if BR2_PACKAGE_PUGIXML + +config BR2_PACKAGE_PUGIXML_XPATH_SUPPORT + bool "Enable XPath support" + default y + help + When disabled, both XPath interfaces and XPath implementation + are excluded from compilation. This option is provided in case + you do not need XPath functionality and need to save code + space. + +config BR2_PACKAGE_PUGIXML_COMPACT + bool "Enable compact mode" + help + Activates a different internal representation of document + storage that is much more memory efficient for documents with + a lot of markup (i.e. nodes and attributes), but is slightly + slower to parse and access. + + http://pugixml.org/docs/manual.html#dom.memory.compact + +config BR2_PACKAGE_PUGIXML_HEADER_ONLY + bool "Enable header-only version" + help + All source code for pugixml will be included in every + translation unit that includes pugixml.hpp. This is how most + of Boost and STL libraries work. + + http://pugixml.org/docs/manual.html#install.building.header + +endif + +comment "pugixml needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/pugixml/pugixml.hash b/package/pugixml/pugixml.hash new file mode 100644 index 00000000..5c629ac6 --- /dev/null +++ b/package/pugixml/pugixml.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 8ddf57b65fb860416979a3f0640c2ad45ddddbbafa82508ef0a0af3ce7061716 pugixml-1.11.4.tar.gz +sha256 ee495f34aeff0c578a99f3350a2050d4e5860d27b2004c03c384a594fa2b0a7a LICENSE.md diff --git a/package/pugixml/pugixml.mk b/package/pugixml/pugixml.mk new file mode 100644 index 00000000..ddda5a3c --- /dev/null +++ b/package/pugixml/pugixml.mk @@ -0,0 +1,41 @@ +################################################################################ +# +# pugixml +# +################################################################################ + +PUGIXML_VERSION = 1.11.4 +PUGIXML_SITE = http://github.com/zeux/pugixml/releases/download/v$(PUGIXML_VERSION) +PUGIXML_LICENSE = MIT +PUGIXML_LICENSE_FILES = LICENSE.md +PUGIXML_CPE_ID_VENDOR = pugixml_project + +PUGIXML_INSTALL_STAGING = YES + +# Pugixml will automatically enable 'long long' support on C++11 compilers, +# which means gcc 4.8+. As gcc always supports the 'long long' type, +# force-enable this option to support older gcc versions. See also: +# https://gcc.gnu.org/onlinedocs/gcc/Long-Long.html +PUGIXML_BUILD_DEFINES += PUGIXML_HAS_LONG_LONG +HOST_PUGIXML_BUILD_DEFINES += PUGIXML_HAS_LONG_LONG + +ifeq ($(BR2_PACKAGE_PUGIXML_XPATH_SUPPORT),) +PUGIXML_BUILD_DEFINES += PUGIXML_NO_XPATH +endif +ifeq ($(BR2_PACKAGE_PUGIXML_COMPACT),y) +PUGIXML_BUILD_DEFINES += PUGIXML_COMPACT +endif +ifeq ($(BR2_PACKAGE_PUGIXML_HEADER_ONLY),y) +PUGIXML_BUILD_DEFINES += PUGIXML_HEADER_ONLY +endif + +ifdef PUGIXML_BUILD_DEFINES +PUGIXML_CONF_OPTS += -DBUILD_DEFINES="$(subst $(space),;,$(PUGIXML_BUILD_DEFINES))" +endif + +HOST_PUGIXML_CONF_OPTS += \ + -DBUILD_PKGCONFIG=ON \ + -DBUILD_DEFINES="$(subst $(space),;,$(HOST_PUGIXML_BUILD_DEFINES))" + +$(eval $(cmake-package)) +$(eval $(host-cmake-package)) diff --git a/package/pulseaudio/Config.in b/package/pulseaudio/Config.in new file mode 100644 index 00000000..6600006a --- /dev/null +++ b/package/pulseaudio/Config.in @@ -0,0 +1,46 @@ +config BR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC + bool + default y if BR2_PACKAGE_LIBATOMIC_OPS_ARCH_SUPPORTS || \ + BR2_TOOLCHAIN_HAS_SYNC_4 + +config BR2_PACKAGE_PULSEAUDIO_ENABLE_ATOMIC + bool + select BR2_PACKAGE_LIBATOMIC_OPS if !BR2_TOOLCHAIN_HAS_SYNC_4 + +config BR2_PACKAGE_PULSEAUDIO + bool "pulseaudio" + depends on BR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBTOOL + select BR2_PACKAGE_LIBSNDFILE + select BR2_PACKAGE_PULSEAUDIO_ENABLE_ATOMIC + select BR2_PACKAGE_SPEEX + help + PulseAudio is a sound system for POSIX OSes, meaning that it + is a proxy for your sound applications. It allows you to do + advanced operations on your sound data as it passes between + your application and your hardware. Things like transferring + the audio to a different machine, changing the sample format + or channel count and mixing several sounds into one are + easily achieved using a sound server. + + http://pulseaudio.org + +if BR2_PACKAGE_PULSEAUDIO + +config BR2_PACKAGE_PULSEAUDIO_DAEMON + bool "start as a system daemon" + help + PulseAudio can be started as a system daemon. This is not the + recommended way of using PulseAudio unless you are building a + headless system. + +endif + +comment "pulseaudio needs a toolchain w/ wchar, threads, dynamic library" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/pulseaudio/S50pulseaudio b/package/pulseaudio/S50pulseaudio new file mode 100644 index 00000000..ea343a71 --- /dev/null +++ b/package/pulseaudio/S50pulseaudio @@ -0,0 +1,46 @@ +#!/bin/sh +# +# Starts pulseaudio. +# + + +start() { + printf "Starting pulseaudio: " + umask 077 + /usr/bin/pulseaudio \ + --system \ + --daemonize \ + --disallow-module-loading \ + --disallow-exit \ + --exit-idle-time=-1 \ + --use-pid-file \ + --disable-shm + echo "OK" +} +stop() { + printf "Stopping pulseaudio: " + PULSE_RUNTIME_PATH=/var/run/pulse /usr/bin/pulseaudio --kill + echo "OK" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? + diff --git a/package/pulseaudio/pulseaudio.hash b/package/pulseaudio/pulseaudio.hash new file mode 100644 index 00000000..b3e19fdc --- /dev/null +++ b/package/pulseaudio/pulseaudio.hash @@ -0,0 +1,6 @@ +# From https://lists.freedesktop.org/archives/pulseaudio-discuss/2021-January/031990.html +sha256 75d3f7742c1ae449049a4c88900e454b8b350ecaa8c544f3488a2562a9ff66f1 pulseaudio-14.2.tar.xz +# Locally computed +sha256 c38aee9e3c8c4d5d594ff548a1be05453023016d6286931f6512db215ec1fd42 GPL +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 LGPL +sha256 a1064b9838b6b4feee61eaeb0925da4b4834c984b77716558860c4294ed6c015 LICENSE diff --git a/package/pulseaudio/pulseaudio.mk b/package/pulseaudio/pulseaudio.mk new file mode 100644 index 00000000..f7d7492e --- /dev/null +++ b/package/pulseaudio/pulseaudio.mk @@ -0,0 +1,176 @@ +################################################################################ +# +# pulseaudio +# +################################################################################ + +PULSEAUDIO_VERSION = 14.2 +PULSEAUDIO_SOURCE = pulseaudio-$(PULSEAUDIO_VERSION).tar.xz +PULSEAUDIO_SITE = https://freedesktop.org/software/pulseaudio/releases +PULSEAUDIO_INSTALL_STAGING = YES +PULSEAUDIO_LICENSE = LGPL-2.1+ (specific license for modules, see LICENSE file) +PULSEAUDIO_LICENSE_FILES = LICENSE GPL LGPL +PULSEAUDIO_CPE_ID_VENDOR = pulseaudio +PULSEAUDIO_CONF_OPTS = \ + --disable-default-build-tests \ + --disable-legacy-database-entry-format \ + --disable-manpages \ + --disable-running-from-build-tree + +PULSEAUDIO_DEPENDENCIES = \ + host-pkgconf libtool libsndfile speex \ + $(TARGET_NLS_DEPENDENCIES) \ + $(if $(BR2_PACKAGE_LIBGLIB2),libglib2) \ + $(if $(BR2_PACKAGE_AVAHI_DAEMON),avahi) \ + $(if $(BR2_PACKAGE_DBUS),dbus) \ + $(if $(BR2_PACKAGE_OPENSSL),openssl) \ + $(if $(BR2_PACKAGE_FFTW_SINGLE),fftw-single) \ + $(if $(BR2_PACKAGE_SYSTEMD),systemd) + +ifeq ($(BR2_PACKAGE_LIBSAMPLERATE),y) +PULSEAUDIO_CONF_OPTS += --enable-samplerate +PULSEAUDIO_DEPENDENCIES += libsamplerate +else +PULSEAUDIO_CONF_OPTS += --disable-samplerate +endif + +ifeq ($(BR2_PACKAGE_GDBM),y) +PULSEAUDIO_CONF_OPTS += --with-database=gdbm +PULSEAUDIO_DEPENDENCIES += gdbm +else +PULSEAUDIO_CONF_OPTS += --with-database=simple +endif + +ifeq ($(BR2_PACKAGE_JACK2),y) +PULSEAUDIO_CONF_OPTS += --enable-jack +PULSEAUDIO_DEPENDENCIES += jack2 +else +PULSEAUDIO_CONF_OPTS += --disable-jack +endif + +ifeq ($(BR2_PACKAGE_LIBATOMIC_OPS),y) +PULSEAUDIO_DEPENDENCIES += libatomic_ops +ifeq ($(BR2_sparc_v8)$(BR2_sparc_leon3),y) +PULSEAUDIO_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) -DAO_NO_SPARC_V9" +endif +endif + +ifeq ($(BR2_PACKAGE_ORC),y) +PULSEAUDIO_DEPENDENCIES += orc +PULSEAUDIO_CONF_ENV += ORCC=$(HOST_DIR)/bin/orcc +PULSEAUDIO_CONF_OPTS += --enable-orc +else +PULSEAUDIO_CONF_OPTS += --disable-orc +endif + +ifeq ($(BR2_PACKAGE_LIBCAP),y) +PULSEAUDIO_DEPENDENCIES += libcap +PULSEAUDIO_CONF_OPTS += --with-caps +else +PULSEAUDIO_CONF_OPTS += --without-caps +endif + +# gtk3 support needs X11 backend +ifeq ($(BR2_PACKAGE_LIBGTK3_X11),y) +PULSEAUDIO_DEPENDENCIES += libgtk3 +PULSEAUDIO_CONF_OPTS += --enable-gtk3 +else +PULSEAUDIO_CONF_OPTS += --disable-gtk3 +endif + +ifeq ($(BR2_PACKAGE_LIBSOXR),y) +PULSEAUDIO_CONF_OPTS += --with-soxr +PULSEAUDIO_DEPENDENCIES += libsoxr +else +PULSEAUDIO_CONF_OPTS += --without-soxr +endif + +ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS)$(BR2_PACKAGE_SBC),yy) +PULSEAUDIO_CONF_OPTS += --enable-bluez5 +PULSEAUDIO_DEPENDENCIES += bluez5_utils sbc +else +PULSEAUDIO_CONF_OPTS += --disable-bluez5 +endif + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +PULSEAUDIO_CONF_OPTS += --enable-udev +PULSEAUDIO_DEPENDENCIES += udev +else +PULSEAUDIO_CONF_OPTS += --disable-udev +endif + +ifeq ($(BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING),y) +PULSEAUDIO_CONF_OPTS += --enable-webrtc-aec +PULSEAUDIO_DEPENDENCIES += webrtc-audio-processing +else +PULSEAUDIO_CONF_OPTS += --disable-webrtc-aec +endif + +# neon intrinsics not available with float-abi=soft +ifeq ($(BR2_ARM_SOFT_FLOAT),) +ifeq ($(BR2_ARM_CPU_HAS_NEON),y) +PULSEAUDIO_USE_NEON = y +endif +endif + +ifeq ($(PULSEAUDIO_USE_NEON),y) +PULSEAUDIO_CONF_OPTS += --enable-neon-opt=yes +else +PULSEAUDIO_CONF_OPTS += --enable-neon-opt=no +endif + +# pulseaudio alsa backend needs pcm/mixer apis +ifeq ($(BR2_PACKAGE_ALSA_LIB_PCM)$(BR2_PACKAGE_ALSA_LIB_MIXER),yy) +PULSEAUDIO_DEPENDENCIES += alsa-lib +PULSEAUDIO_CONF_OPTS += --enable-alsa +else +PULSEAUDIO_CONF_OPTS += --disable-alsa +endif + +ifeq ($(BR2_PACKAGE_LIBXCB)$(BR2_PACKAGE_XLIB_LIBSM)$(BR2_PACKAGE_XLIB_LIBXTST),yyy) +PULSEAUDIO_DEPENDENCIES += libxcb xlib_libSM xlib_libXtst + +# .desktop file generation needs nls support, so fake it for !locale builds +# https://bugs.freedesktop.org/show_bug.cgi?id=54658 +ifeq ($(BR2_SYSTEM_ENABLE_NLS),) +define PULSEAUDIO_FIXUP_DESKTOP_FILES + cp $(@D)/src/daemon/pulseaudio.desktop.in \ + $(@D)/src/daemon/pulseaudio.desktop +endef +PULSEAUDIO_POST_PATCH_HOOKS += PULSEAUDIO_FIXUP_DESKTOP_FILES +endif + +else +PULSEAUDIO_CONF_OPTS += --disable-x11 +endif + +# ConsoleKit module init failure breaks user daemon startup +define PULSEAUDIO_REMOVE_CONSOLE_KIT + rm -f $(TARGET_DIR)/usr/lib/pulse-$(PULSEAUDIO_VERSION)/modules/module-console-kit.so +endef + +define PULSEAUDIO_REMOVE_VALA + rm -rf $(TARGET_DIR)/usr/share/vala +endef + +PULSEAUDIO_POST_INSTALL_TARGET_HOOKS += PULSEAUDIO_REMOVE_VALA \ + PULSEAUDIO_REMOVE_CONSOLE_KIT + +ifeq ($(BR2_PACKAGE_PULSEAUDIO_DAEMON),y) +define PULSEAUDIO_USERS + pulse -1 pulse -1 * /var/run/pulse - audio,pulse-access +endef + +define PULSEAUDIO_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 package/pulseaudio/S50pulseaudio \ + $(TARGET_DIR)/etc/init.d/S50pulseaudio +endef + +define PULSEAUDIO_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/pulseaudio/pulseaudio.service \ + $(TARGET_DIR)/usr/lib/systemd/system/pulseaudio.service +endef + +endif + +$(eval $(autotools-package)) diff --git a/package/pulseaudio/pulseaudio.service b/package/pulseaudio/pulseaudio.service new file mode 100644 index 00000000..fc82f033 --- /dev/null +++ b/package/pulseaudio/pulseaudio.service @@ -0,0 +1,11 @@ +[Unit] +Description=PulseAudio Sound System +After=syslog.target + +[Service] +UMask=077 +ExecStart=/usr/bin/pulseaudio --system --daemonize=no +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/package/pulseview/0001-mainbar-fix-build-without-libsigrokdecode.patch b/package/pulseview/0001-mainbar-fix-build-without-libsigrokdecode.patch new file mode 100644 index 00000000..5cf0c446 --- /dev/null +++ b/package/pulseview/0001-mainbar-fix-build-without-libsigrokdecode.patch @@ -0,0 +1,37 @@ +From da124df864dd7555733d6690eacf856435d55b2d Mon Sep 17 00:00:00 2001 +From: Bartosz Golaszewski +Date: Mon, 3 Dec 2018 13:14:16 +0100 +Subject: [PATCH] mainbar: fix build without libsigrokdecode + +We must not include decodesignal.hpp if we're not using libsigrokdecode +or the build will fail due to libsigrokdecode.hpp not being present in +the system. + +Signed-off-by: Bartosz Golaszewski +--- + pv/toolbars/mainbar.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/pv/toolbars/mainbar.cpp b/pv/toolbars/mainbar.cpp +index e6beb2b..7c4d0fb 100644 +--- a/pv/toolbars/mainbar.cpp ++++ b/pv/toolbars/mainbar.cpp +@@ -35,7 +35,6 @@ + + #include + +-#include + #include + #include + #include +@@ -52,6 +51,7 @@ + #include + #ifdef ENABLE_DECODE + #include ++#include + #endif + + #include +-- +2.19.1 + diff --git a/package/pulseview/0002-Replace-obsolete-deprecated-Qt-methods.patch b/package/pulseview/0002-Replace-obsolete-deprecated-Qt-methods.patch new file mode 100644 index 00000000..42cdc467 --- /dev/null +++ b/package/pulseview/0002-Replace-obsolete-deprecated-Qt-methods.patch @@ -0,0 +1,133 @@ +From caacc9bc622238ca48674ea6f40d07466e4b97a5 Mon Sep 17 00:00:00 2001 +From: Valentin Ochs +Date: Sat, 20 Jun 2020 16:01:27 +0200 +Subject: [PATCH] Replace obsolete/deprecated Qt methods + +[Thomas: Backport from upstream commit +ae726b70a7ada9a4be5808e00f0c951318479684, one conflict manually +resolved in pv/util.cpp.] +Signed-off-by: Thomas Petazzoni +--- + pv/util.cpp | 21 +++++++++++++++++++-- + pv/util.hpp | 10 ++++++++++ + pv/views/trace/decodetrace.cpp | 3 ++- + pv/views/trace/ruler.cpp | 2 +- + pv/widgets/timestampspinbox.cpp | 2 +- + 5 files changed, 33 insertions(+), 5 deletions(-) + +diff --git a/pv/util.cpp b/pv/util.cpp +index 49b9467c..2a63038d 100644 +--- a/pv/util.cpp ++++ b/pv/util.cpp +@@ -137,7 +137,7 @@ QString format_time_si(const Timestamp& v, SIPrefix prefix, + QString s; + QTextStream ts(&s); + if (sign && !v.is_zero()) +- ts << forcesign; ++ ts.setNumberFlags(ts.numberFlags() | QTextStream::ForceSign); + ts << qSetRealNumberPrecision(precision) << (v * multiplier) << ' ' + << prefix << unit; + +@@ -171,7 +171,7 @@ QString format_value_si(double v, SIPrefix prefix, unsigned precision, + QString s; + QTextStream ts(&s); + if (sign && (v != 0)) +- ts << forcesign; ++ ts.setNumberFlags(ts.numberFlags() | QTextStream::ForceSign); + ts.setRealNumberNotation(QTextStream::FixedNotation); + ts.setRealNumberPrecision(precision); + ts << (v * multiplier) << ' ' << prefix << unit; +@@ -281,5 +281,22 @@ vector split_string(string text, string separator) + return result; + } + ++/** ++ * Return the width of a string in a given font. ++ * ++ * @param[in] metric metrics of the font ++ * @param[in] string the string whose width should be determined ++ * ++ * @return width of the string in pixels ++ */ ++std::streamsize text_width(const QFontMetrics &metric, const QString &string) ++{ ++#if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0) ++ return metric.horizontalAdvance(string); ++#else ++ return metric.width(string); ++#endif ++} ++ + } // namespace util + } // namespace pv +diff --git a/pv/util.hpp b/pv/util.hpp +index dd7be222..ad904f85 100644 +--- a/pv/util.hpp ++++ b/pv/util.hpp +@@ -30,6 +30,7 @@ + + #include + #include ++#include + + using std::string; + using std::vector; +@@ -137,6 +138,15 @@ QString format_time_minutes(const Timestamp& t, signed precision = 0, + + vector split_string(string text, string separator); + ++/** ++ * Return the width of a string in a given font. ++ * @param[in] metric metrics of the font ++ * @param[in] string the string whose width should be determined ++ * ++ * @return width of the string in pixels ++ */ ++std::streamsize text_width(const QFontMetrics &metric, const QString &string); ++ + } // namespace util + } // namespace pv + +diff --git a/pv/views/trace/decodetrace.cpp b/pv/views/trace/decodetrace.cpp +index 9c7196bf..1ee7ae9f 100644 +--- a/pv/views/trace/decodetrace.cpp ++++ b/pv/views/trace/decodetrace.cpp +@@ -103,7 +103,8 @@ DecodeTrace::DecodeTrace(pv::Session &session, + + // Determine shortest string we want to see displayed in full + QFontMetrics m(QApplication::font()); +- min_useful_label_width_ = m.width("XX"); // e.g. two hex characters ++ // e.g. two hex characters ++ min_useful_label_width_ = util::text_width(m, "XX"); + + // For the base color, we want to start at a very different color for + // every decoder stack, so multiply the index with a number that is +diff --git a/pv/views/trace/ruler.cpp b/pv/views/trace/ruler.cpp +index acea8a36..68134966 100644 +--- a/pv/views/trace/ruler.cpp ++++ b/pv/views/trace/ruler.cpp +@@ -218,7 +218,7 @@ void Ruler::paintEvent(QPaintEvent*) + const int rightedge = width(); + const int x_tick = tick.first; + if ((x_tick > leftedge) && (x_tick < rightedge)) { +- const int x_left_bound = QFontMetrics(font()).width(tick.second) / 2; ++ const int x_left_bound = util::text_width(QFontMetrics(font()), tick.second) / 2; + const int x_right_bound = rightedge - x_left_bound; + const int x_legend = min(max(x_tick, x_left_bound), x_right_bound); + p.drawText(x_legend, ValueMargin, 0, text_height, +diff --git a/pv/widgets/timestampspinbox.cpp b/pv/widgets/timestampspinbox.cpp +index 21b3d0d7..383aed1f 100644 +--- a/pv/widgets/timestampspinbox.cpp ++++ b/pv/widgets/timestampspinbox.cpp +@@ -75,7 +75,7 @@ QSize TimestampSpinBox::minimumSizeHint() const + { + const QFontMetrics fm(fontMetrics()); + const int l = round(value_).str().size() + precision_ + 10; +- const int w = fm.width(QString(l, '0')); ++ const int w = util::text_width(fm, QString(l, '0')); + const int h = lineEdit()->minimumSizeHint().height(); + return QSize(w, h); + } +-- +2.26.2 + diff --git a/package/pulseview/Config.in b/package/pulseview/Config.in new file mode 100644 index 00000000..ea9bdc26 --- /dev/null +++ b/package/pulseview/Config.in @@ -0,0 +1,36 @@ +config BR2_PACKAGE_PULSEVIEW + bool "pulseview" + depends on BR2_PACKAGE_QT5 + # libsigrok->libglib2: + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU + depends on BR2_INSTALL_LIBSTDCPP + # libsigrok->libzip + depends on !BR2_STATIC_LIBS + # libsigrok + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + depends on BR2_HOST_GCC_AT_LEAST_4_9 + depends on BR2_ENABLE_LOCALE + select BR2_PACKAGE_LIBSIGROK + select BR2_PACKAGE_LIBSIGROKCXX + select BR2_PACKAGE_QT5BASE_WIDGETS + select BR2_PACKAGE_QT5BASE_PNG + select BR2_PACKAGE_QT5SVG + select BR2_PACKAGE_BOOST + select BR2_PACKAGE_BOOST_FILESYSTEM + select BR2_PACKAGE_BOOST_SYSTEM + select BR2_PACKAGE_BOOST_SERIALIZATION + help + PulseView is a Qt based logic analyzer, oscilloscope + and MSO GUI for sigrok. + + http://sigrok.org/wiki/PulseView + +comment "pulseview needs a toolchain w/ locale, wchar, threads, dynamic library, C++, gcc >= 4.9, host gcc >= 4.9" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_QT5 + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || !BR2_USE_WCHAR \ + || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP \ + || BR2_STATIC_LIBS || !BR2_ENABLE_LOCALE || \ + !BR2_HOST_GCC_AT_LEAST_4_9 diff --git a/package/pulseview/pulseview.hash b/package/pulseview/pulseview.hash new file mode 100644 index 00000000..27e27ce1 --- /dev/null +++ b/package/pulseview/pulseview.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 9ee7ce3dd1457c6a5f5e4e9c2469903a1f070ba077ea68535cc29ef1dfac6f2f pulseview-0.4.1.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/pulseview/pulseview.mk b/package/pulseview/pulseview.mk new file mode 100644 index 00000000..67d525f6 --- /dev/null +++ b/package/pulseview/pulseview.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# pulseview +# +################################################################################ + +PULSEVIEW_VERSION = 0.4.1 +PULSEVIEW_SITE = http://sigrok.org/download/source/pulseview +PULSEVIEW_LICENSE = GPL-3.0+ +PULSEVIEW_LICENSE_FILES = COPYING +PULSEVIEW_DEPENDENCIES = libsigrok qt5base qt5svg boost +PULSEVIEW_CONF_OPTS = -DDISABLE_WERROR=TRUE + +ifeq ($(BR2_PACKAGE_BOOST_TEST),y) +PULSEVIEW_CONF_OPTS += -DENABLE_TESTS=TRUE +else +PULSEVIEW_CONF_OPTS += -DENABLE_TESTS=FALSE +endif + +ifeq ($(BR2_PACKAGE_LIBSIGROKDECODE),y) +PULSEVIEW_CONF_OPTS += -DENABLE_DECODE=TRUE +PULSEVIEW_DEPENDENCIES += libsigrokdecode +else +PULSEVIEW_CONF_OPTS += -DENABLE_DECODE=FALSE +endif + +$(eval $(cmake-package)) diff --git a/package/pure-ftpd/0001-listdir-reuse-a-single-buffer-to-store-every-file-name-to-display.patch b/package/pure-ftpd/0001-listdir-reuse-a-single-buffer-to-store-every-file-name-to-display.patch new file mode 100644 index 00000000..2f791d1d --- /dev/null +++ b/package/pure-ftpd/0001-listdir-reuse-a-single-buffer-to-store-every-file-name-to-display.patch @@ -0,0 +1,70 @@ +From aea56f4bcb9948d456f3fae4d044fd3fa2e19706 Mon Sep 17 00:00:00 2001 +From: Frank Denis +Date: Mon, 30 Dec 2019 17:40:04 +0100 +Subject: [PATCH] listdir(): reuse a single buffer to store every file name to + display + +Allocating a new buffer for each entry is useless. + +And as these buffers are allocated on the stack, on systems with a +small stack size, with many entries, the limit can easily be reached, +causing a stack exhaustion and aborting the user session. + +Reported by Antonio Morales from the GitHub Security Lab team, thanks! +[Retrieved from: +https://github.com/jedisct1/pure-ftpd/commit/aea56f4bcb9948d456f3fae4d044fd3fa2e19706] +Signed-off-by: Fabrice Fontaine +--- + src/ls.c | 15 ++++++++------- + 1 file changed, 8 insertions(+), 7 deletions(-) + +diff --git a/src/ls.c b/src/ls.c +index cf804c7..f8a588f 100644 +--- a/src/ls.c ++++ b/src/ls.c +@@ -661,6 +661,8 @@ static void listdir(unsigned int depth, int f, void * const tls_fd, + char *names; + PureFileInfo *s; + PureFileInfo *r; ++ char *alloca_subdir; ++ size_t sizeof_subdir; + int d; + + if (depth >= max_ls_depth || matches >= max_ls_files) { +@@ -690,14 +692,12 @@ static void listdir(unsigned int depth, int f, void * const tls_fd, + } + outputfiles(f, tls_fd); + r = dir; ++ sizeof_subdir = PATH_MAX + 1U; ++ if ((alloca_subdir = ALLOCA(sizeof_subdir)) == NULL) { ++ goto toomany; ++ } + while (opt_R && r != s) { + if (r->name_offset != (size_t) -1 && !chdir(FI_NAME(r))) { +- char *alloca_subdir; +- const size_t sizeof_subdir = PATH_MAX + 1U; +- +- if ((alloca_subdir = ALLOCA(sizeof_subdir)) == NULL) { +- goto toomany; +- } + if (SNCHECK(snprintf(alloca_subdir, sizeof_subdir, "%s/%s", + name, FI_NAME(r)), sizeof_subdir)) { + goto nolist; +@@ -706,8 +706,8 @@ static void listdir(unsigned int depth, int f, void * const tls_fd, + wrstr(f, tls_fd, alloca_subdir); + wrstr(f, tls_fd, ":\r\n\r\n"); + listdir(depth + 1U, f, tls_fd, alloca_subdir); ++ + nolist: +- ALLOCA_FREE(alloca_subdir); + if (matches >= max_ls_files) { + goto toomany; + } +@@ -720,6 +720,7 @@ static void listdir(unsigned int depth, int f, void * const tls_fd, + r++; + } + toomany: ++ ALLOCA_FREE(alloca_subdir); + free(names); + free(dir); + names = NULL; diff --git a/package/pure-ftpd/0002-pure_strcmp-len-s2-can-be-len-s1.patch b/package/pure-ftpd/0002-pure_strcmp-len-s2-can-be-len-s1.patch new file mode 100644 index 00000000..3de3cbd2 --- /dev/null +++ b/package/pure-ftpd/0002-pure_strcmp-len-s2-can-be-len-s1.patch @@ -0,0 +1,30 @@ +From 36c6d268cb190282a2c17106acfd31863121b58e Mon Sep 17 00:00:00 2001 +From: Frank Denis +Date: Mon, 24 Feb 2020 15:19:43 +0100 +Subject: [PATCH] pure_strcmp(): len(s2) can be > len(s1) + +Reported by Antonio Morales from GitHub Security Labs, thanks! +[Retrieved from: +https://github.com/jedisct1/pure-ftpd/commit/36c6d268cb190282a2c17106acfd31863121b] +Signed-off-by: Fabrice Fontaine +--- + src/utils.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/src/utils.c b/src/utils.c +index f41492d..a7f0381 100644 +--- a/src/utils.c ++++ b/src/utils.c +@@ -45,5 +45,11 @@ int pure_memcmp(const void * const b1_, const void * const b2_, size_t len) + + int pure_strcmp(const char * const s1, const char * const s2) + { +- return pure_memcmp(s1, s2, strlen(s1) + 1U); ++ const size_t s1_len = strlen(s1); ++ const size_t s2_len = strlen(s2); ++ ++ if (s1_len != s2_len) { ++ return -1; ++ } ++ return pure_memcmp(s1, s2, s1_len); + } diff --git a/package/pure-ftpd/0003-diraliases-always-set-the-tail-of-the-list-to-NULL.patch b/package/pure-ftpd/0003-diraliases-always-set-the-tail-of-the-list-to-NULL.patch new file mode 100644 index 00000000..6c58eb74 --- /dev/null +++ b/package/pure-ftpd/0003-diraliases-always-set-the-tail-of-the-list-to-NULL.patch @@ -0,0 +1,35 @@ +From 8d0d42542e2cb7a56d645fbe4d0ef436e38bcefa Mon Sep 17 00:00:00 2001 +From: Frank Denis +Date: Tue, 18 Feb 2020 18:36:58 +0100 +Subject: [PATCH] diraliases: always set the tail of the list to NULL + +Spotted and reported by Antonio Norales from GitHub Security Labs. +Thanks! + +Signed-off-by: Fabrice Fontaine +[Retrieved from: +https://github.com/jedisct1/pure-ftpd/commit/8d0d42542e2cb7a56d645fbe4d0ef436e38bcefa] +--- + src/diraliases.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/diraliases.c b/src/diraliases.c +index 4002a36..fb70273 100644 +--- a/src/diraliases.c ++++ b/src/diraliases.c +@@ -93,7 +93,6 @@ int init_aliases(void) + (tail->dir = strdup(dir)) == NULL) { + die_mem(); + } +- tail->next = NULL; + } else { + DirAlias *curr; + +@@ -105,6 +104,7 @@ int init_aliases(void) + tail->next = curr; + tail = curr; + } ++ tail->next = NULL; + } + fclose(fp); + aliases_up++; diff --git a/package/pure-ftpd/Config.in b/package/pure-ftpd/Config.in new file mode 100644 index 00000000..c0601026 --- /dev/null +++ b/package/pure-ftpd/Config.in @@ -0,0 +1,39 @@ +config BR2_PACKAGE_PURE_FTPD + bool "pure-ftpd" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + Pure-FTPd is a free (BSD), secure, production-quality and + standard- conformant FTP server. It doesn't provide useless + bells and whistles, but focuses on efficiency and ease of + use. It provides simple answers to common needs, plus unique + useful features for personal users as well as hosting + providers. + + http://www.pureftpd.org + +if BR2_PACKAGE_PURE_FTPD + +config BR2_PACKAGE_PURE_FTPD_FTPWHO + bool "ftpwho" + help + Enable the pure-ftpd command. Pure-ftpwho shows current + Pure-ftpd client sessions. Only the system administrator + may run this. Output can be text (default), HTML, XML data + and parser-optimized. + +config BR2_PACKAGE_PURE_FTPD_QUOTAS + bool "quotas" + help + Enable virtual quotas. With virtual quotas, restrictions can + be placed on the maximum number of files a user can store in + his account. In addition, restrictions can also be placed on + the total size. + +config BR2_PACKAGE_PURE_FTPD_UPLOADSCRIPT + bool "uploadscript" + help + Enable pure-upload script. Automatically run an external + program after a successful upload. + +endif diff --git a/package/pure-ftpd/pure-ftpd.hash b/package/pure-ftpd/pure-ftpd.hash new file mode 100644 index 00000000..8fe73e4f --- /dev/null +++ b/package/pure-ftpd/pure-ftpd.hash @@ -0,0 +1,3 @@ +# Locally calculated after checking pgp signature +sha256 8a727dfef810f275fba3eb6099760d4f8a0bdeae2c1197d0d5bfeb8c1b2f61b6 pure-ftpd-1.0.49.tar.bz2 +sha256 3a9e94382a69d04aa434d69b20ff2c01dbbfcb7191f05f69a7109c0ee1559c19 COPYING diff --git a/package/pure-ftpd/pure-ftpd.mk b/package/pure-ftpd/pure-ftpd.mk new file mode 100644 index 00000000..7e3d18b4 --- /dev/null +++ b/package/pure-ftpd/pure-ftpd.mk @@ -0,0 +1,95 @@ +################################################################################ +# +# pure-ftpd +# +################################################################################ + +PURE_FTPD_VERSION = 1.0.49 +PURE_FTPD_SITE = https://download.pureftpd.org/pub/pure-ftpd/releases +PURE_FTPD_SOURCE = pure-ftpd-$(PURE_FTPD_VERSION).tar.bz2 +PURE_FTPD_LICENSE = ISC +PURE_FTPD_LICENSE_FILES = COPYING +PURE_FTPD_CPE_ID_VENDOR = pureftpd +PURE_FTPD_DEPENDENCIES = $(if $(BR2_PACKAGE_LIBICONV),libiconv) + +# 0001-listdir-reuse-a-single-buffer-to-store-every-file-name-to-display.patch +PURE_FTPD_IGNORE_CVES += CVE-2019-20176 + +# 0002-pure_strcmp-len-s2-can-be-len-s1.patch +PURE_FTPD_IGNORE_CVES += CVE-2020-9365 + +# 0003-diraliases-always-set-the-tail-of-the-list-to-NULL.patch +PURE_FTPD_IGNORE_CVES += CVE-2020-9274 + +PURE_FTPD_CONF_OPTS = \ + --with-altlog \ + --with-puredb + +ifeq ($(BR2_PACKAGE_ELFUTILS),y) +PURE_FTPD_DEPENDENCIES += elfutils +endif + +ifeq ($(BR2_PACKAGE_LIBCAP),y) +PURE_FTPD_CONF_OPTS += --with-capabilities +PURE_FTPD_DEPENDENCIES += libcap +else +PURE_FTPD_CONF_OPTS += --without-capabilities +endif + +ifeq ($(BR2_PACKAGE_LIBSODIUM),y) +PURE_FTPD_DEPENDENCIES += libsodium +endif + +ifeq ($(BR2_PACKAGE_MYSQL),y) +PURE_FTPD_CONF_OPTS += --with-mysql=$(STAGING_DIR)/usr +PURE_FTPD_DEPENDENCIES += mysql +else +PURE_FTPD_CONF_OPTS += --without-mysql +endif + +ifeq ($(BR2_PACKAGE_OPENLDAP),y) +PURE_FTPD_CONF_OPTS += --with-ldap +PURE_FTPD_DEPENDENCIES += openldap +else +PURE_FTPD_CONF_OPTS += --without-ldap +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +PURE_FTPD_CONF_OPTS += --with-tls +PURE_FTPD_DEPENDENCIES += host-pkgconf openssl +PURE_FTPD_CONF_ENV += LIBS=`$(PKG_CONFIG_HOST_BINARY) --libs openssl` +else +PURE_FTPD_CONF_OPTS += --without-tls +endif + +ifeq ($(BR2_PACKAGE_POSTGRESQL),y) +PURE_FTPD_CONF_OPTS += --with-pgsql=$(STAGING_DIR)/usr +PURE_FTPD_DEPENDENCIES += postgresql +else +PURE_FTPD_CONF_OPTS += --without-pgsql +endif + +ifeq ($(BR2_TOOLCHAIN_SUPPORTS_PIE),) +PURE_FTPD_CONF_ENV += ax_cv_check_cflags___fPIE=no ax_cv_check_ldflags___fPIE=no +endif + +ifeq ($(BR2_PACKAGE_PURE_FTPD_FTPWHO),y) +PURE_FTPD_CONF_OPTS += --with-ftpwho +endif + +ifeq ($(BR2_PACKAGE_PURE_FTPD_QUOTAS),y) +PURE_FTPD_CONF_OPTS += --with-quotas +endif + +ifeq ($(BR2_PACKAGE_PURE_FTPD_UPLOADSCRIPT),y) +PURE_FTPD_CONF_OPTS += --with-uploadscript +endif + +ifeq ($(BR2_PACKAGE_LINUX_PAM),y) +PURE_FTPD_CONF_OPTS += --with-pam +PURE_FTPD_DEPENDENCIES += linux-pam +else +PURE_FTPD_CONF_OPTS += --without-pam +endif + +$(eval $(autotools-package)) diff --git a/package/putty/0001-unix-uxutils.h-fix-build-on-uclibc.patch b/package/putty/0001-unix-uxutils.h-fix-build-on-uclibc.patch new file mode 100644 index 00000000..78cef8b9 --- /dev/null +++ b/package/putty/0001-unix-uxutils.h-fix-build-on-uclibc.patch @@ -0,0 +1,41 @@ +From 3f30f3a7e3f07f5ca3cef0f405b02e22a018c6e4 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 9 May 2021 15:22:29 +0200 +Subject: [PATCH] unix/uxutils.h: fix build on uclibc + +Build on uclibc is broken since version 0.75 and commit +65383082bf0c49cec63f4b36001a40bd9b13edf6 because AT_HWCAP2 is used +even if is not available: + +unix/uxutils.c: In function 'platform_aes_hw_available': +unix/uxutils.c:13:22: error: 'AT_HWCAP2' undeclared (first use in this function) + 13 | return getauxval(AT_HWCAP2) & HWCAP2_AES; + | ^~~~~~~~~ + +To fix this build failure, include + +Fixes: + - http://autobuild.buildroot.org/results/726f7c5ce13e78ed91e827b872e9d7ccfa13f298 + +Signed-off-by: Fabrice Fontaine +[Upstream status: sent to Simon Tatham ] +--- + unix/uxutils.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/unix/uxutils.h b/unix/uxutils.h +index c9acff53..b80bf972 100644 +--- a/unix/uxutils.h ++++ b/unix/uxutils.h +@@ -18,6 +18,8 @@ + + #if defined __arm__ || defined __aarch64__ + ++#include ++ + #ifdef HAVE_SYS_TYPES_H + #include + #endif +-- +2.30.2 + diff --git a/package/putty/0002-New-option-to-reject-trivial-success-of-userauth.patch b/package/putty/0002-New-option-to-reject-trivial-success-of-userauth.patch new file mode 100644 index 00000000..83b93a34 --- /dev/null +++ b/package/putty/0002-New-option-to-reject-trivial-success-of-userauth.patch @@ -0,0 +1,448 @@ +From 1dc5659aa62848f0aeb5de7bd3839fecc7debefa Mon Sep 17 00:00:00 2001 +From: Simon Tatham +Date: Sat, 19 Jun 2021 15:39:15 +0100 +Subject: [PATCH] New option to reject 'trivial' success of userauth. + +Suggested by Manfred Kaiser, who also wrote most of this patch +(although outlying parts, like documentation and SSH-1 support, are by +me). + +This is a second line of defence against the kind of spoofing attacks +in which a malicious or compromised SSH server rushes the client +through the userauth phase of SSH without actually requiring any auth +inputs (passwords or signatures or whatever), and then at the start of +the connection phase it presents something like a spoof prompt, +intended to be taken for part of userauth by the user but in fact with +some more sinister purpose. + +Our existing line of defence against this is the trust sigil system, +and as far as I know, that's still working. This option allows a bit of +extra defence in depth: if you don't expect your SSH server to +trivially accept authentication in the first place, then enabling this +option will cause PuTTY to disconnect if it unexpectedly does so, +without the user having to spot the presence or absence of a fiddly +little sigil anywhere. + +Several types of authentication count as 'trivial'. The obvious one is +the SSH-2 "none" method, which clients always try first so that the +failure message will tell them what else they can try, and which a +server can instead accept in order to authenticate you unconditionally. +But there are two other ways to do it that we know of: one is to run +keyboard-interactive authentication and send an empty INFO_REQUEST +packet containing no actual prompts for the user, and another even +weirder one is to send USERAUTH_SUCCESS in response to the user's +preliminary *offer* of a public key (instead of sending the usual PK_OK +to request an actual signature from the key). + +This new option detects all of those, by clearing the 'is_trivial_auth' +flag only when we send some kind of substantive authentication response +(be it a password, a k-i prompt response, a signature, or a GSSAPI +token). So even if there's a further path through the userauth maze we +haven't spotted, that somehow avoids sending anything substantive, this +strategy should still pick it up. + +(cherry picked from commit 5f5c710cf3704737e24ffceb2c918e412a2a674f) + +[Retrieved from: +https://git.tartarus.org/?p=simon/putty.git;a=commit;h=1dc5659aa62848f0aeb5de7bd3839fecc7debefa] +Signed-off-by: Fabrice Fontaine +--- + cmdline.c | 8 ++++++++ + config.c | 4 ++++ + doc/config.but | 43 +++++++++++++++++++++++++++++++++++++++++++ + pscp.c | 2 ++ + psftp.c | 2 ++ + putty.h | 1 + + settings.c | 2 ++ + ssh.c | 4 +++- + ssh1login.c | 14 +++++++++++++- + ssh2userauth.c | 20 ++++++++++++++++---- + sshppl.h | 2 +- + unix/uxplink.c | 2 ++ + windows/winhelp.h | 1 + + windows/winplink.c | 2 ++ + 14 files changed, 100 insertions(+), 7 deletions(-) + +diff --git a/cmdline.c b/cmdline.c +index 7ea5cacc..62d65e19 100644 +--- a/cmdline.c ++++ b/cmdline.c +@@ -598,6 +598,14 @@ int cmdline_process_param(const char *p, char *value, + SAVEABLE(0); + conf_set_bool(conf, CONF_tryagent, false); + } ++ ++ if (!strcmp(p, "-no-trivial-auth")) { ++ RETURN(1); ++ UNAVAILABLE_IN(TOOLTYPE_NONNETWORK); ++ SAVEABLE(0); ++ conf_set_bool(conf, CONF_ssh_no_trivial_userauth, true); ++ } ++ + if (!strcmp(p, "-share")) { + RETURN(1); + UNAVAILABLE_IN(TOOLTYPE_NONNETWORK); +diff --git a/config.c b/config.c +index ca808511..b8348530 100644 +--- a/config.c ++++ b/config.c +@@ -2772,6 +2772,10 @@ void setup_config_box(struct controlbox *b, bool midsession, + HELPCTX(ssh_auth_bypass), + conf_checkbox_handler, + I(CONF_ssh_no_userauth)); ++ ctrl_checkbox(s, "Disconnect if authentication succeeds trivially", ++ 'n', HELPCTX(ssh_no_trivial_userauth), ++ conf_checkbox_handler, ++ I(CONF_ssh_no_trivial_userauth)); + + s = ctrl_getset(b, "Connection/SSH/Auth", "methods", + "Authentication methods"); +diff --git a/doc/config.but b/doc/config.but +index a00ae476..77313282 100644 +--- a/doc/config.but ++++ b/doc/config.but +@@ -2623,6 +2623,49 @@ interact with them.) + This option only affects SSH-2 connections. SSH-1 connections always + require an authentication step. + ++\S{config-ssh-notrivialauth} \q{Disconnect if authentication succeeds ++trivially} ++ ++This option causes PuTTY to abandon an SSH session and disconnect from ++the server, if the server accepted authentication without ever having ++asked for any kind of password or signature or token. ++ ++This might be used as a security measure. There are some forms of ++attack against an SSH client user which work by terminating the SSH ++authentication stage early, and then doing something in the main part ++of the SSH session which \e{looks} like part of the authentication, ++but isn't really. ++ ++For example, instead of demanding a signature from your public key, ++for which PuTTY would ask for your key's passphrase, a compromised or ++malicious server might allow you to log in with no signature or ++password at all, and then print a message that \e{imitates} PuTTY's ++request for your passphrase, in the hope that you would type it in. ++(In fact, the passphrase for your public key should not be sent to any ++server.) ++ ++PuTTY's main defence against attacks of this type is the \q{trust ++sigil} system: messages in the PuTTY window that are truly originated ++by PuTTY itself are shown next to a small copy of the PuTTY icon, ++which the server cannot fake when it tries to imitate the same message ++using terminal output. ++ ++However, if you think you might be at risk of this kind of thing ++anyway (if you don't watch closely for the trust sigils, or if you ++think you're at extra risk of one of your servers being malicious), ++then you could enable this option as an extra defence. Then, if the ++server tries any of these attacks involving letting you through the ++authentication stage, PuTTY will disconnect from the server before it ++can send a follow-up fake prompt or other type of attack. ++ ++On the other hand, some servers \e{legitimately} let you through the ++SSH authentication phase trivially, either because they are genuinely ++public, or because the important authentication step happens during ++the terminal session. (An example might be an SSH server that connects ++you directly to the terminal login prompt of a legacy mainframe.) So ++enabling this option might cause some kinds of session to stop ++working. It's up to you. ++ + \S{config-ssh-tryagent} \q{Attempt authentication using Pageant} + + If this option is enabled, then PuTTY will look for Pageant (the SSH +diff --git a/pscp.c b/pscp.c +index 0bfda92d..a11d1e18 100644 +--- a/pscp.c ++++ b/pscp.c +@@ -2203,6 +2203,8 @@ static void usage(void) + printf(" -i key private key file for user authentication\n"); + printf(" -noagent disable use of Pageant\n"); + printf(" -agent enable use of Pageant\n"); ++ printf(" -no-trivial-auth\n"); ++ printf(" disconnect if SSH authentication succeeds trivially\n"); + printf(" -hostkey keyid\n"); + printf(" manually specify a host key (may be repeated)\n"); + printf(" -batch disable all interactive prompts\n"); +diff --git a/psftp.c b/psftp.c +index 40cb73f5..c4b5374b 100644 +--- a/psftp.c ++++ b/psftp.c +@@ -2538,6 +2538,8 @@ static void usage(void) + printf(" -i key private key file for user authentication\n"); + printf(" -noagent disable use of Pageant\n"); + printf(" -agent enable use of Pageant\n"); ++ printf(" -no-trivial-auth\n"); ++ printf(" disconnect if SSH authentication succeeds trivially\n"); + printf(" -hostkey keyid\n"); + printf(" manually specify a host key (may be repeated)\n"); + printf(" -batch disable all interactive prompts\n"); +diff --git a/putty.h b/putty.h +index ef6f7a37..7789f217 100644 +--- a/putty.h ++++ b/putty.h +@@ -1428,6 +1428,7 @@ NORETURN void cleanup_exit(int); + X(INT, NONE, sshprot) \ + X(BOOL, NONE, ssh2_des_cbc) /* "des-cbc" unrecommended SSH-2 cipher */ \ + X(BOOL, NONE, ssh_no_userauth) /* bypass "ssh-userauth" (SSH-2 only) */ \ ++ X(BOOL, NONE, ssh_no_trivial_userauth) /* disable trivial types of auth */ \ + X(BOOL, NONE, ssh_show_banner) /* show USERAUTH_BANNERs (SSH-2 only) */ \ + X(BOOL, NONE, try_tis_auth) \ + X(BOOL, NONE, try_ki_auth) \ +diff --git a/settings.c b/settings.c +index 547af0dc..32a53c54 100644 +--- a/settings.c ++++ b/settings.c +@@ -609,6 +609,7 @@ void save_open_settings(settings_w *sesskey, Conf *conf) + #endif + write_setting_s(sesskey, "RekeyBytes", conf_get_str(conf, CONF_ssh_rekey_data)); + write_setting_b(sesskey, "SshNoAuth", conf_get_bool(conf, CONF_ssh_no_userauth)); ++ write_setting_b(sesskey, "SshNoTrivialAuth", conf_get_bool(conf, CONF_ssh_no_trivial_userauth)); + write_setting_b(sesskey, "SshBanner", conf_get_bool(conf, CONF_ssh_show_banner)); + write_setting_b(sesskey, "AuthTIS", conf_get_bool(conf, CONF_try_tis_auth)); + write_setting_b(sesskey, "AuthKI", conf_get_bool(conf, CONF_try_ki_auth)); +@@ -1025,6 +1026,7 @@ void load_open_settings(settings_r *sesskey, Conf *conf) + gpps(sesskey, "LogHost", "", conf, CONF_loghost); + gppb(sesskey, "SSH2DES", false, conf, CONF_ssh2_des_cbc); + gppb(sesskey, "SshNoAuth", false, conf, CONF_ssh_no_userauth); ++ gppb(sesskey, "SshNoTrivialAuth", false, conf, CONF_ssh_no_trivial_userauth); + gppb(sesskey, "SshBanner", true, conf, CONF_ssh_show_banner); + gppb(sesskey, "AuthTIS", false, conf, CONF_try_tis_auth); + gppb(sesskey, "AuthKI", true, conf, CONF_try_ki_auth); +diff --git a/ssh.c b/ssh.c +index 00a516ea..91e7e869 100644 +--- a/ssh.c ++++ b/ssh.c +@@ -254,7 +254,9 @@ static void ssh_got_ssh_version(struct ssh_version_receiver *rcv, + connection_layer, ssh->savedhost, ssh->fullhostname, + conf_get_filename(ssh->conf, CONF_keyfile), + conf_get_bool(ssh->conf, CONF_ssh_show_banner), +- conf_get_bool(ssh->conf, CONF_tryagent), username, ++ conf_get_bool(ssh->conf, CONF_tryagent), ++ conf_get_bool(ssh->conf, CONF_ssh_no_trivial_userauth), ++ username, + conf_get_bool(ssh->conf, CONF_change_username), + conf_get_bool(ssh->conf, CONF_try_ki_auth), + #ifndef NO_GSSAPI +diff --git a/ssh1login.c b/ssh1login.c +index 8486cbf0..519838d7 100644 +--- a/ssh1login.c ++++ b/ssh1login.c +@@ -27,7 +27,7 @@ struct ssh1_login_state { + + char *savedhost; + int savedport; +- bool try_agent_auth; ++ bool try_agent_auth, is_trivial_auth; + + int remote_protoflags; + int local_protoflags; +@@ -105,6 +105,8 @@ PacketProtocolLayer *ssh1_login_new( + s->savedhost = dupstr(host); + s->savedport = port; + s->successor_layer = successor_layer; ++ s->is_trivial_auth = true; ++ + return &s->ppl; + } + +@@ -645,6 +647,7 @@ static void ssh1_login_process_queue(PacketProtocolLayer *ppl) + s->ppl.bpp, SSH1_CMSG_AUTH_RSA_RESPONSE); + put_data(pkt, ret + 5, 16); + pq_push(s->ppl.out_pq, pkt); ++ s->is_trivial_auth = false; + crMaybeWaitUntilV( + (pktin = ssh1_login_pop(s)) + != NULL); +@@ -814,6 +817,7 @@ static void ssh1_login_process_queue(PacketProtocolLayer *ppl) + s->ppl.bpp, SSH1_CMSG_AUTH_RSA_RESPONSE); + put_data(pkt, buffer, 16); + pq_push(s->ppl.out_pq, pkt); ++ s->is_trivial_auth = false; + + mp_free(challenge); + mp_free(response); +@@ -1105,6 +1109,7 @@ static void ssh1_login_process_queue(PacketProtocolLayer *ppl) + put_stringz(pkt, prompt_get_result_ref(s->cur_prompt->prompts[0])); + pq_push(s->ppl.out_pq, pkt); + } ++ s->is_trivial_auth = false; + ppl_logevent("Sent password"); + free_prompts(s->cur_prompt); + s->cur_prompt = NULL; +@@ -1121,6 +1126,13 @@ static void ssh1_login_process_queue(PacketProtocolLayer *ppl) + } + } + ++ if (conf_get_bool(s->conf, CONF_ssh_no_trivial_userauth) && ++ s->is_trivial_auth) { ++ ssh_proto_error(s->ppl.ssh, "Authentication was trivial! " ++ "Abandoning session as specified in configuration."); ++ return; ++ } ++ + ppl_logevent("Authentication successful"); + + if (conf_get_bool(s->conf, CONF_compression)) { +diff --git a/ssh2userauth.c b/ssh2userauth.c +index 01243baf..451d5abe 100644 +--- a/ssh2userauth.c ++++ b/ssh2userauth.c +@@ -28,7 +28,7 @@ struct ssh2_userauth_state { + + PacketProtocolLayer *transport_layer, *successor_layer; + Filename *keyfile; +- bool show_banner, tryagent, change_username; ++ bool show_banner, tryagent, notrivialauth, change_username; + char *hostname, *fullhostname; + char *default_username; + bool try_ki_auth, try_gssapi_auth, try_gssapi_kex_auth, gssapi_fwd; +@@ -82,6 +82,7 @@ struct ssh2_userauth_state { + int len; + PktOut *pktout; + bool want_user_input; ++ bool is_trivial_auth; + + agent_pending_query *auth_agent_query; + bufchain banner; +@@ -134,7 +135,7 @@ static const PacketProtocolLayerVtable ssh2_userauth_vtable = { + PacketProtocolLayer *ssh2_userauth_new( + PacketProtocolLayer *successor_layer, + const char *hostname, const char *fullhostname, +- Filename *keyfile, bool show_banner, bool tryagent, ++ Filename *keyfile, bool show_banner, bool tryagent, bool notrivialauth, + const char *default_username, bool change_username, + bool try_ki_auth, bool try_gssapi_auth, bool try_gssapi_kex_auth, + bool gssapi_fwd, struct ssh_connection_shared_gss_state *shgss) +@@ -149,6 +150,7 @@ PacketProtocolLayer *ssh2_userauth_new( + s->keyfile = filename_copy(keyfile); + s->show_banner = show_banner; + s->tryagent = tryagent; ++ s->notrivialauth = notrivialauth; + s->default_username = dupstr(default_username); + s->change_username = change_username; + s->try_ki_auth = try_ki_auth; +@@ -157,6 +159,7 @@ PacketProtocolLayer *ssh2_userauth_new( + s->gssapi_fwd = gssapi_fwd; + s->shgss = shgss; + s->last_methods_string = strbuf_new(); ++ s->is_trivial_auth = true; + bufchain_init(&s->banner); + bufchain_sink_init(&s->banner_bs, &s->banner); + +@@ -818,6 +821,7 @@ static void ssh2_userauth_process_queue(PacketProtocolLayer *ppl) + sigblob); + pq_push(s->ppl.out_pq, s->pktout); + s->type = AUTH_TYPE_PUBLICKEY; ++ s->is_trivial_auth = false; + } else { + ppl_logevent("Pageant refused signing request"); + ppl_printf("Pageant failed to " +@@ -1038,6 +1042,7 @@ static void ssh2_userauth_process_queue(PacketProtocolLayer *ppl) + ssh_key_free(key->key); + sfree(key->comment); + sfree(key); ++ s->is_trivial_auth = false; + } + + #ifndef NO_GSSAPI +@@ -1169,6 +1174,7 @@ static void ssh2_userauth_process_queue(PacketProtocolLayer *ppl) + * no longer says CONTINUE_NEEDED + */ + if (s->gss_sndtok.length != 0) { ++ s->is_trivial_auth = false; + s->pktout = + ssh_bpp_new_pktout( + s->ppl.bpp, SSH2_MSG_USERAUTH_GSSAPI_TOKEN); +@@ -1288,7 +1294,6 @@ static void ssh2_userauth_process_queue(PacketProtocolLayer *ppl) + * Loop while the server continues to send INFO_REQUESTs. + */ + while (pktin->type == SSH2_MSG_USERAUTH_INFO_REQUEST) { +- + ptrlen name, inst; + strbuf *sb; + +@@ -1308,6 +1313,7 @@ static void ssh2_userauth_process_queue(PacketProtocolLayer *ppl) + */ + s->num_prompts = get_uint32(pktin); + for (uint32_t i = 0; i < s->num_prompts; i++) { ++ s->is_trivial_auth = false; + ptrlen prompt = get_string(pktin); + bool echo = get_bool(pktin); + +@@ -1472,7 +1478,7 @@ static void ssh2_userauth_process_queue(PacketProtocolLayer *ppl) + pq_push_front(s->ppl.in_pq, pktin); + + } else if (s->can_passwd) { +- ++ s->is_trivial_auth = false; + /* + * Plain old password authentication. + */ +@@ -1731,6 +1737,12 @@ static void ssh2_userauth_process_queue(PacketProtocolLayer *ppl) + } + + userauth_success: ++ if (s->notrivialauth && s->is_trivial_auth) { ++ ssh_proto_error(s->ppl.ssh, "Authentication was trivial! " ++ "Abandoning session as specified in configuration."); ++ return; ++ } ++ + /* + * We've just received USERAUTH_SUCCESS, and we haven't sent + * any packets since. Signal the transport layer to consider +diff --git a/sshppl.h b/sshppl.h +index b339d67c..2c1dbf42 100644 +--- a/sshppl.h ++++ b/sshppl.h +@@ -116,7 +116,7 @@ PacketProtocolLayer *ssh2_transport_new( + PacketProtocolLayer *ssh2_userauth_new( + PacketProtocolLayer *successor_layer, + const char *hostname, const char *fullhostname, +- Filename *keyfile, bool show_banner, bool tryagent, ++ Filename *keyfile, bool show_banner, bool tryagent, bool notrivialauth, + const char *default_username, bool change_username, + bool try_ki_auth, + bool try_gssapi_auth, bool try_gssapi_kex_auth, +diff --git a/unix/uxplink.c b/unix/uxplink.c +index 3e2a9b6b..240783f4 100644 +--- a/unix/uxplink.c ++++ b/unix/uxplink.c +@@ -527,6 +527,8 @@ static void usage(void) + printf(" -i key private key file for user authentication\n"); + printf(" -noagent disable use of Pageant\n"); + printf(" -agent enable use of Pageant\n"); ++ printf(" -no-trivial-auth\n"); ++ printf(" disconnect if SSH authentication succeeds trivially\n"); + printf(" -noshare disable use of connection sharing\n"); + printf(" -share enable use of connection sharing\n"); + printf(" -hostkey keyid\n"); +diff --git a/windows/winhelp.h b/windows/winhelp.h +index ae5a7a7f..9011df45 100644 +--- a/windows/winhelp.h ++++ b/windows/winhelp.h +@@ -111,6 +111,7 @@ + #define WINHELP_CTX_ssh_kex_repeat "config-ssh-kex-rekey" + #define WINHELP_CTX_ssh_kex_manual_hostkeys "config-ssh-kex-manual-hostkeys" + #define WINHELP_CTX_ssh_auth_bypass "config-ssh-noauth" ++#define WINHELP_CTX_ssh_no_trivial_userauth "config-ssh-notrivialauth" + #define WINHELP_CTX_ssh_auth_banner "config-ssh-banner" + #define WINHELP_CTX_ssh_auth_privkey "config-ssh-privkey" + #define WINHELP_CTX_ssh_auth_agentfwd "config-ssh-agentfwd" +diff --git a/windows/winplink.c b/windows/winplink.c +index 9bda0712..58d43e6d 100644 +--- a/windows/winplink.c ++++ b/windows/winplink.c +@@ -149,6 +149,8 @@ static void usage(void) + printf(" -i key private key file for user authentication\n"); + printf(" -noagent disable use of Pageant\n"); + printf(" -agent enable use of Pageant\n"); ++ printf(" -no-trivial-auth\n"); ++ printf(" disconnect if SSH authentication succeeds trivially\n"); + printf(" -noshare disable use of connection sharing\n"); + printf(" -share enable use of connection sharing\n"); + printf(" -hostkey keyid\n"); +-- +2.20.1 + diff --git a/package/putty/Config.in b/package/putty/Config.in new file mode 100644 index 00000000..cd8b3bb2 --- /dev/null +++ b/package/putty/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_PUTTY + bool "putty" + depends on BR2_USE_MMU # fork() + depends on BR2_USE_WCHAR + help + PuTTY is a free SSH and Telnet client. Without GTK2 + activated, only the commandline tools plink, pscp, psftp, + and puttygen are built; enable GTK2 for the graphical + client. + + http://www.chiark.greenend.org.uk/~sgtatham/putty/ + +comment "putty needs a toolchain w/ wchar" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR diff --git a/package/putty/putty.hash b/package/putty/putty.hash new file mode 100644 index 00000000..8974aaac --- /dev/null +++ b/package/putty/putty.hash @@ -0,0 +1,8 @@ +# Hashes from: http://the.earth.li/~sgtatham/putty/0.75/{md5,sha1,sha256,sha512}sums +md5 fae57a9ab209f303cc9e9f83eecaa27c putty-0.75.tar.gz +sha1 cdb976811a35eed67c5a2c588908b08edf6e3e1d putty-0.75.tar.gz +sha256 d3173b037eddbe9349abe978101277b4ba9f9959e25dedd44f87e7b85cc8f9f5 putty-0.75.tar.gz +sha512 3dbc15485008a98daf60236061253e66b94a6e5da123fc84c5f0ac006c84e17c70fe748987677775e3b54a12297eb826cccf70a4fc039b633bc2d512938b3028 putty-0.75.tar.gz + +# Locally calculated +sha256 3f3e870dd3d0867d79370b1d433602c60bb91b59de04e5d8f2a149b788530d53 LICENCE diff --git a/package/putty/putty.mk b/package/putty/putty.mk new file mode 100644 index 00000000..a1c588a3 --- /dev/null +++ b/package/putty/putty.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# putty +# +################################################################################ + +PUTTY_VERSION = 0.75 +PUTTY_SITE = http://the.earth.li/~sgtatham/putty/$(PUTTY_VERSION) +PUTTY_LICENSE = MIT +PUTTY_LICENSE_FILES = LICENCE +PUTTY_CPE_ID_VENDOR = putty +PUTTY_CONF_OPTS = --disable-gtktest + +# 0002-New-option-to-reject-trivial-success-of-userauth.patch +PUTTY_IGNORE_CVES += CVE-2021-36367 + +ifeq ($(BR2_PACKAGE_LIBGTK2),y) +PUTTY_CONF_OPTS += --with-gtk=2 +PUTTY_DEPENDENCIES += libgtk2 +else +PUTTY_CONF_OPTS += --without-gtk +endif + +$(eval $(autotools-package)) diff --git a/package/pv/0001-configure.in-tighten-AIX-test.patch b/package/pv/0001-configure.in-tighten-AIX-test.patch new file mode 100644 index 00000000..2e0d2af2 --- /dev/null +++ b/package/pv/0001-configure.in-tighten-AIX-test.patch @@ -0,0 +1,57 @@ +From cd7605723eb8e6d8231644f1cf62f1e80badf074 Mon Sep 17 00:00:00 2001 +From: Peter Korsgaard +Date: Mon, 20 Aug 2018 15:57:22 +0200 +Subject: [PATCH] configure.in: tighten AIX test + +Depending on the configuration, the cpp output may contain the string 'yes' +in a comment if built under a path containing 'yes', confusing the _AIX +test: + +${CROSS}-cpp conftest.h +\# 1 "conftest.h" +\# 1 "" +\# 1 "" +\# 31 "" +\# 1 "/home/peko/source/buildroot/output-yes/host/x86_64-buildroot-linux-gnu/sysroot/usr/include/stdc-predef.h" 1 3 4 +\# 32 "" 2 +\# 1 "conftest.txt" + +Fix it by only matching on 'yes' on a line by itself. + +Upstream-status: submitted to author +Signed-off-by: Peter Korsgaard +--- + + autoconf/configure.in | 2 +- + configure | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/autoconf/configure.in b/autoconf/configure.in +index bd45004..487c42b 100644 +--- a/autoconf/configure.in ++++ b/autoconf/configure.in +@@ -86,7 +86,7 @@ AC_PROG_MAKE_SET + + dnl AIX needs -lc128 + dnl +-AC_EGREP_CPP([yes], [#ifdef _AIX ++AC_EGREP_CPP([^yes$], [#ifdef _AIX + yes + #endif + ], [LIBS="$LIBS -lc128"]) +diff --git a/configure b/configure +index 7c11be0..59267b9 100755 +--- a/configure ++++ b/configure +@@ -3377,7 +3377,7 @@ yes + + _ACEOF + if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | +- $EGREP "yes" >/dev/null 2>&1; then ++ $EGREP "^yes$" >/dev/null 2>&1; then + LIBS="$LIBS -lc128" + fi + rm -f conftest* +-- +2.11.0 + diff --git a/package/pv/Config.in b/package/pv/Config.in new file mode 100644 index 00000000..671f78e8 --- /dev/null +++ b/package/pv/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PV + bool "pv" + help + Pipe Viewer - is a terminal-based tool for + monitoring the progress of data through a + pipeline. + + http://www.ivarch.com/programs/pv.shtml diff --git a/package/pv/pv.hash b/package/pv/pv.hash new file mode 100644 index 00000000..1ce1191d --- /dev/null +++ b/package/pv/pv.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +sha256 608ef935f7a377e1439c181c4fc188d247da10d51a19ef79bcdee5043b0973f1 pv-1.6.6.tar.bz2 + +# Hash for license file +sha256 280e182171df3e9bb4a9b407326e88521151fcb8f4f8557255f26177d5900ccf doc/COPYING diff --git a/package/pv/pv.mk b/package/pv/pv.mk new file mode 100644 index 00000000..122cc0c5 --- /dev/null +++ b/package/pv/pv.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# pv +# +################################################################################ + +PV_VERSION = 1.6.6 +PV_SOURCE = pv-$(PV_VERSION).tar.bz2 +PV_SITE = http://www.ivarch.com/programs/sources +PV_LICENSE = Artistic-2.0 +PV_LICENSE_FILES = doc/COPYING +PV_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) + +# --relax linker option is enabled by default on sparc/sparc64 +# architectures, and it can't be used together with -r option, so +# disable it. +ifeq ($(BR2_sparc)$(BR2_sparc64),y) +PV_LDFLAGS = "-Wl,--no-relax" +endif + +# While 'pv' uses autoconf, it does not use automake for its +# makefiles. It uses $(LD) $(LDFLAGS) to achieve partial linking, but +# using 'ld' directly doesn't work well with some toolchain +# configuration, as the ld default emulation may not necessarily be +# the correct one. By passing the below values for LD and LDFLAGS, we +# ensure that 'gcc' is used to do these partial linking steps. +PV_MAKE_OPTS = \ + LD="$(TARGET_CC)" \ + LDFLAGS="-Wl,-r -nostdlib $(PV_LDFLAGS)" + +$(eval $(autotools-package)) diff --git a/package/pwgen/Config.in b/package/pwgen/Config.in new file mode 100644 index 00000000..441605c7 --- /dev/null +++ b/package/pwgen/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PWGEN + bool "pwgen" + help + Pwgen is a small, GPL'ed password generator which creates + passwords which can be easily memorized by a human. + + http://sourceforge.net/projects/pwgen/ diff --git a/package/pwgen/Config.in.host b/package/pwgen/Config.in.host new file mode 100644 index 00000000..20b55f3f --- /dev/null +++ b/package/pwgen/Config.in.host @@ -0,0 +1,7 @@ +config BR2_PACKAGE_HOST_PWGEN + bool "host pwgen" + help + Pwgen is a small, GPL'ed password generator which creates + passwords which can be easily memorized by a human. + + http://sourceforge.net/projects/pwgen/ diff --git a/package/pwgen/pwgen.hash b/package/pwgen/pwgen.hash new file mode 100644 index 00000000..6dca6363 --- /dev/null +++ b/package/pwgen/pwgen.hash @@ -0,0 +1,5 @@ +# From http://sourceforge.net/projects/pwgen/files/pwgen/2.08/ +md5 6cfba450ac6ff72d11e88a6b0b049165 pwgen-2.08.tar.gz +sha1 6406deba61297784888c2ec0c14e3c735a85a2b6 pwgen-2.08.tar.gz +# Locally computed: +sha256 5d3e49e01ef782be5841d5d1f7fb64d290cd86459598a913818584a46a2f81a1 debian/copyright diff --git a/package/pwgen/pwgen.mk b/package/pwgen/pwgen.mk new file mode 100644 index 00000000..89925bb3 --- /dev/null +++ b/package/pwgen/pwgen.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# pwgen +# +################################################################################ + +PWGEN_VERSION = 2.08 +PWGEN_SITE = http://downloads.sourceforge.net/project/pwgen/pwgen/$(PWGEN_VERSION) +PWGEN_LICENSE = GPL-2.0 +PWGEN_LICENSE_FILES = debian/copyright +PWGEN_CPE_ID_VENDOR = pwgen_project + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/python-aenum/Config.in b/package/python-aenum/Config.in new file mode 100644 index 00000000..be3dd0fb --- /dev/null +++ b/package/python-aenum/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_AENUM + bool "python-aenum" + help + Advanced Enumerations (compatible with Python's stdlib Enum), + NamedTuples, and NamedConstants. + + https://pypi.org/project/aenum diff --git a/package/python-aenum/python-aenum.hash b/package/python-aenum/python-aenum.hash new file mode 100644 index 00000000..16ee23ab --- /dev/null +++ b/package/python-aenum/python-aenum.hash @@ -0,0 +1,4 @@ +# sha256 from https://pypi.org/pypi/aenum/json +sha256 a4334cabf47c167d44ab5a6198837b80deec5d5bad1b5cf70c966c3a330260e8 aenum-2.2.3.tar.gz +# locally calculated +sha256 0db837e38002017b352666c83c8d3216ee5b9b2229375eb2cf4487f8c24e1f8c aenum/LICENSE diff --git a/package/python-aenum/python-aenum.mk b/package/python-aenum/python-aenum.mk new file mode 100644 index 00000000..97fcbb5e --- /dev/null +++ b/package/python-aenum/python-aenum.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# python-aenum +# +################################################################################ + +PYTHON_AENUM_VERSION = 2.2.3 +PYTHON_AENUM_SOURCE = aenum-$(PYTHON_AENUM_VERSION).tar.gz +PYTHON_AENUM_SITE = https://files.pythonhosted.org/packages/6f/6a/8ed729e0add885d7a559ebb06133029b1f8c4bd66cbf1bdee1ec969fb310 +PYTHON_AENUM_SETUP_TYPE = setuptools +PYTHON_AENUM_LICENSE = BSD-3-Clause +PYTHON_AENUM_LICENSE_FILES = aenum/LICENSE + +ifeq ($(BR2_PACKAGE_PYTHON),y) +# only needed/valid for python 3.x +define PYTHON_AENUM_RM_PY3_FILE + rm -f $(TARGET_DIR)/usr/lib/python*/site-packages/aenum/test_v3.py +endef + +PYTHON_AENUM_POST_INSTALL_TARGET_HOOKS += PYTHON_AENUM_RM_PY3_FILE +endif + +$(eval $(python-package)) diff --git a/package/python-aioblescan/Config.in b/package/python-aioblescan/Config.in new file mode 100644 index 00000000..dd1acfa0 --- /dev/null +++ b/package/python-aioblescan/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_AIOBLESCAN + bool "python-aioblescan" + depends on BR2_PACKAGE_PYTHON3 + help + Scanning Bluetooth for advertised info with asyncio. + + https://github.com/frawau/aioblescan diff --git a/package/python-aioblescan/python-aioblescan.hash b/package/python-aioblescan/python-aioblescan.hash new file mode 100644 index 00000000..902a7a30 --- /dev/null +++ b/package/python-aioblescan/python-aioblescan.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/aioblescan/json +md5 9ad3f04ea7ad4c81a53f8e1316985527 aioblescan-0.2.6.tar.gz +sha256 2e45c325e070a0ee4e952a7d0c56e95ad230643e1057fb5f3e95ea5c99081436 aioblescan-0.2.6.tar.gz +# Locally computed sha256 checksums +sha256 c2066cd44079e0c706234001af18cb6ad4b62fc68d0d08d29fdc7319916647e0 LICENSE.txt diff --git a/package/python-aioblescan/python-aioblescan.mk b/package/python-aioblescan/python-aioblescan.mk new file mode 100644 index 00000000..6350007c --- /dev/null +++ b/package/python-aioblescan/python-aioblescan.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-aioblescan +# +################################################################################ + +PYTHON_AIOBLESCAN_VERSION = 0.2.6 +PYTHON_AIOBLESCAN_SOURCE = aioblescan-$(PYTHON_AIOBLESCAN_VERSION).tar.gz +PYTHON_AIOBLESCAN_SITE = https://files.pythonhosted.org/packages/66/b8/888c2eb4323ed498dbc7deeb8aee0cfec9edd8c25184b06a8874bb0cf84f +PYTHON_AIOBLESCAN_SETUP_TYPE = setuptools +PYTHON_AIOBLESCAN_LICENSE = MIT +PYTHON_AIOBLESCAN_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-aiocoap/Config.in b/package/python-aiocoap/Config.in new file mode 100644 index 00000000..cf5ca4e8 --- /dev/null +++ b/package/python-aiocoap/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_AIOCOAP + bool "python-aiocoap" + depends on BR2_PACKAGE_PYTHON3 + help + Python CoAP library. + + https://github.com/chrysn/aiocoap diff --git a/package/python-aiocoap/python-aiocoap.hash b/package/python-aiocoap/python-aiocoap.hash new file mode 100644 index 00000000..6df482aa --- /dev/null +++ b/package/python-aiocoap/python-aiocoap.hash @@ -0,0 +1,4 @@ +# md5 from https://pypi.python.org/pypi/aiocoap/json, sha256 locally computed +md5 f5fed00767b4197f2fbaa0ff95cbbf78 aiocoap-0.3.tar.gz +sha256 402d4151db6d8d0b1d66af5b6e10e0de1521decbf12140637e5b8d2aa9c5aef6 aiocoap-0.3.tar.gz +sha256 2bb211d412a6bfa4b2a9cf01123c7fe90e5e6185938896e23ab07b84f8494180 LICENSE diff --git a/package/python-aiocoap/python-aiocoap.mk b/package/python-aiocoap/python-aiocoap.mk new file mode 100644 index 00000000..a2db70b8 --- /dev/null +++ b/package/python-aiocoap/python-aiocoap.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-aiocoap +# +################################################################################ + +PYTHON_AIOCOAP_VERSION = 0.3 +PYTHON_AIOCOAP_SOURCE = aiocoap-$(PYTHON_AIOCOAP_VERSION).tar.gz +PYTHON_AIOCOAP_SITE = https://pypi.python.org/packages/9c/f6/d839e4b14258d76e74a39810829c13f8dd31de2bfe0915579b2a609d1bbe +PYTHON_AIOCOAP_SETUP_TYPE = setuptools +PYTHON_AIOCOAP_LICENSE = MIT +PYTHON_AIOCOAP_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-aioconsole/Config.in b/package/python-aioconsole/Config.in new file mode 100644 index 00000000..cd52eecf --- /dev/null +++ b/package/python-aioconsole/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_AIOCONSOLE + bool "python-aioconsole" + depends on BR2_PACKAGE_PYTHON3 + help + Asynchronous console and interfaces for asyncio. + + https://github.com/vxgmichel/aioconsole diff --git a/package/python-aioconsole/python-aioconsole.hash b/package/python-aioconsole/python-aioconsole.hash new file mode 100644 index 00000000..dea2216f --- /dev/null +++ b/package/python-aioconsole/python-aioconsole.hash @@ -0,0 +1,3 @@ +# md5, sha256 from https://pypi.org/pypi/aioconsole/json +md5 66d4b05e3bc75267daf0f773d839f62b aioconsole-0.3.1.tar.gz +sha256 7c038bb40b7690bf5be6b17154830b7bff25e7be1c02d8420a346c3efbd5d8e5 aioconsole-0.3.1.tar.gz diff --git a/package/python-aioconsole/python-aioconsole.mk b/package/python-aioconsole/python-aioconsole.mk new file mode 100644 index 00000000..b32d2bea --- /dev/null +++ b/package/python-aioconsole/python-aioconsole.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-aioconsole +# +################################################################################ + +PYTHON_AIOCONSOLE_VERSION = 0.3.1 +PYTHON_AIOCONSOLE_SOURCE = aioconsole-$(PYTHON_AIOCONSOLE_VERSION).tar.gz +PYTHON_AIOCONSOLE_SITE = https://files.pythonhosted.org/packages/5a/12/fce04ddc0a8ebd6482e5ec293d8bda47c9e05c82826b061f7b73523b8601 +PYTHON_AIOCONSOLE_SETUP_TYPE = setuptools +PYTHON_AIOCONSOLE_LICENSE = GPL-3.0 + +$(eval $(python-package)) diff --git a/package/python-aiodns/Config.in b/package/python-aiodns/Config.in new file mode 100644 index 00000000..aa597059 --- /dev/null +++ b/package/python-aiodns/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_AIODNS + bool "python-aiodns" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_PYCARES # runtime + help + Simple DNS resolver for asyncio. + + http://github.com/saghul/aiodns diff --git a/package/python-aiodns/python-aiodns.hash b/package/python-aiodns/python-aiodns.hash new file mode 100644 index 00000000..c9511ce7 --- /dev/null +++ b/package/python-aiodns/python-aiodns.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/aiodns/json +md5 3e121f9eb7ef3ba3556ba7ec28c6f63a aiodns-2.0.0.tar.gz +sha256 815fdef4607474295d68da46978a54481dd1e7be153c7d60f9e72773cd38d77d aiodns-2.0.0.tar.gz +# Locally computed sha256 checksums +sha256 eb0455d35129425ed399883cd710923de3e246a510e2eb84d9f00032d0bbec97 LICENSE diff --git a/package/python-aiodns/python-aiodns.mk b/package/python-aiodns/python-aiodns.mk new file mode 100644 index 00000000..f02b4b75 --- /dev/null +++ b/package/python-aiodns/python-aiodns.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-aiodns +# +################################################################################ + +PYTHON_AIODNS_VERSION = 2.0.0 +PYTHON_AIODNS_SOURCE = aiodns-$(PYTHON_AIODNS_VERSION).tar.gz +PYTHON_AIODNS_SITE = https://files.pythonhosted.org/packages/30/2e/b86ce168485b68d40c6a810838669deacf0abf41845c383659c2b613e69f +PYTHON_AIODNS_SETUP_TYPE = setuptools +PYTHON_AIODNS_LICENSE = MIT +PYTHON_AIODNS_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-aiofiles/Config.in b/package/python-aiofiles/Config.in new file mode 100644 index 00000000..9cc3d7fe --- /dev/null +++ b/package/python-aiofiles/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_AIOFILES + bool "python-aiofiles" + depends on BR2_PACKAGE_PYTHON3 + help + aiofiles aims to handle local disk files in + asyncio applications. + + https://pypi.org/project/aiofiles diff --git a/package/python-aiofiles/python-aiofiles.hash b/package/python-aiofiles/python-aiofiles.hash new file mode 100644 index 00000000..3c3e8565 --- /dev/null +++ b/package/python-aiofiles/python-aiofiles.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/aiofiles/json +md5 2243eff06072115e8afe8907677ca51d aiofiles-0.5.0.tar.gz +sha256 98e6bcfd1b50f97db4980e182ddd509b7cc35909e903a8fe50d8849e02d815af aiofiles-0.5.0.tar.gz +# Locally computed sha256 checksums +sha256 cb5e8e7e5f4a3988e1063c142c60dc2df75605f4c46515e776e3aca6df976e14 LICENSE diff --git a/package/python-aiofiles/python-aiofiles.mk b/package/python-aiofiles/python-aiofiles.mk new file mode 100644 index 00000000..28f41e39 --- /dev/null +++ b/package/python-aiofiles/python-aiofiles.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-aiofiles +# +################################################################################ + +PYTHON_AIOFILES_VERSION = 0.5.0 +PYTHON_AIOFILES_SOURCE = aiofiles-$(PYTHON_AIOFILES_VERSION).tar.gz +PYTHON_AIOFILES_SITE = https://files.pythonhosted.org/packages/2b/64/437053d6a4ba3b3eea1044131a25b458489320cb9609e19ac17261e4dc9b +PYTHON_AIOFILES_SETUP_TYPE = setuptools +PYTHON_AIOFILES_LICENSE = Apache-2.0 +PYTHON_AIOFILES_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-aiohttp-cors/Config.in b/package/python-aiohttp-cors/Config.in new file mode 100644 index 00000000..1c97cf3f --- /dev/null +++ b/package/python-aiohttp-cors/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_AIOHTTP_CORS + bool "python-aiohttp-cors" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_AIOHTTP # runtime + help + CORS support for aiohttp. + + https://github.com/aio-libs/aiohttp-cors diff --git a/package/python-aiohttp-cors/python-aiohttp-cors.hash b/package/python-aiohttp-cors/python-aiohttp-cors.hash new file mode 100644 index 00000000..b91e5fa8 --- /dev/null +++ b/package/python-aiohttp-cors/python-aiohttp-cors.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/aiohttp_cors/json +md5 de3940a901b269be82c8bd9f28d53ff0 aiohttp-cors-0.7.0.tar.gz +sha256 4d39c6d7100fd9764ed1caf8cebf0eb01bf5e3f24e2e073fda6234bc48b19f5d aiohttp-cors-0.7.0.tar.gz +# Locally computed sha256 checksums +sha256 86cb2262ff825ce1c8b8fb9ea9f5174318badc3912639b9275fc25d0e305c556 LICENSE diff --git a/package/python-aiohttp-cors/python-aiohttp-cors.mk b/package/python-aiohttp-cors/python-aiohttp-cors.mk new file mode 100644 index 00000000..27443540 --- /dev/null +++ b/package/python-aiohttp-cors/python-aiohttp-cors.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-aiohttp-cors +# +################################################################################ + +PYTHON_AIOHTTP_CORS_VERSION = 0.7.0 +PYTHON_AIOHTTP_CORS_SOURCE = aiohttp-cors-$(PYTHON_AIOHTTP_CORS_VERSION).tar.gz +PYTHON_AIOHTTP_CORS_SITE = https://files.pythonhosted.org/packages/44/9e/6cdce7c3f346d8fd487adf68761728ad8cd5fbc296a7b07b92518350d31f +PYTHON_AIOHTTP_CORS_SETUP_TYPE = setuptools +PYTHON_AIOHTTP_CORS_LICENSE = Apache-2.0 +PYTHON_AIOHTTP_CORS_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-aiohttp-debugtoolbar/Config.in b/package/python-aiohttp-debugtoolbar/Config.in new file mode 100644 index 00000000..b22d2cf9 --- /dev/null +++ b/package/python-aiohttp-debugtoolbar/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_AIOHTTP_DEBUGTOOLBAR + bool "python-aiohttp-debugtoolbar" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_AIOHTTP # runtime + select BR2_PACKAGE_PYTHON_AIOHTTP_JINJA2 # runtime + help + debugtoolbar for aiohttp. + + https://github.com/aio-libs/aiohttp_debugtoolbar diff --git a/package/python-aiohttp-debugtoolbar/python-aiohttp-debugtoolbar.hash b/package/python-aiohttp-debugtoolbar/python-aiohttp-debugtoolbar.hash new file mode 100644 index 00000000..927bd328 --- /dev/null +++ b/package/python-aiohttp-debugtoolbar/python-aiohttp-debugtoolbar.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/aiohttp_debugtoolbar/json +md5 496734057cb413d7a49a52a817802dbb aiohttp-debugtoolbar-0.6.0.tar.gz +sha256 ec231661133b40136608d39dfb688e7ea0c3d47b6ae6dee52d5bf24ceb9e4d45 aiohttp-debugtoolbar-0.6.0.tar.gz +# Locally computed sha256 checksums +sha256 94d638be2cb4f186cc62bb567455837757547c15f1b350863aaf05a38843b542 LICENSE diff --git a/package/python-aiohttp-debugtoolbar/python-aiohttp-debugtoolbar.mk b/package/python-aiohttp-debugtoolbar/python-aiohttp-debugtoolbar.mk new file mode 100644 index 00000000..319d20ff --- /dev/null +++ b/package/python-aiohttp-debugtoolbar/python-aiohttp-debugtoolbar.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-aiohttp-debugtoolbar +# +################################################################################ + +PYTHON_AIOHTTP_DEBUGTOOLBAR_VERSION = 0.6.0 +PYTHON_AIOHTTP_DEBUGTOOLBAR_SOURCE = aiohttp-debugtoolbar-$(PYTHON_AIOHTTP_DEBUGTOOLBAR_VERSION).tar.gz +PYTHON_AIOHTTP_DEBUGTOOLBAR_SITE = https://files.pythonhosted.org/packages/3f/dd/5121417dfbeb4661673afa5c8708f1539889d0e54b1509a6fdf66705efc5 +PYTHON_AIOHTTP_DEBUGTOOLBAR_SETUP_TYPE = setuptools +PYTHON_AIOHTTP_DEBUGTOOLBAR_LICENSE = Apache-2.0 +PYTHON_AIOHTTP_DEBUGTOOLBAR_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-aiohttp-jinja2/Config.in b/package/python-aiohttp-jinja2/Config.in new file mode 100644 index 00000000..dd4bb0d2 --- /dev/null +++ b/package/python-aiohttp-jinja2/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_AIOHTTP_JINJA2 + bool "python-aiohttp-jinja2" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_AIOHTTP # runtime + select BR2_PACKAGE_PYTHON_JINJA2 # runtime + help + Jinja2 template renderer for aiohttp.web (http server for + asyncio). + + https://github.com/aio-libs/aiohttp_jinja2/ diff --git a/package/python-aiohttp-jinja2/python-aiohttp-jinja2.hash b/package/python-aiohttp-jinja2/python-aiohttp-jinja2.hash new file mode 100644 index 00000000..44e2ae46 --- /dev/null +++ b/package/python-aiohttp-jinja2/python-aiohttp-jinja2.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/aiohttp-jinja2/json +md5 d474a6440ac906a9d818a03a540830ba aiohttp-jinja2-1.4.2.tar.gz +sha256 9c22a0e48e3b277fc145c67dd8c3b8f609dab36bce9eb337f70dfe716663c9a0 aiohttp-jinja2-1.4.2.tar.gz +# Locally computed sha256 checksums +sha256 d9d867affaeac220a60381cc544681dcd37c668ed6ea5ddbf9948617f828889a LICENSE diff --git a/package/python-aiohttp-jinja2/python-aiohttp-jinja2.mk b/package/python-aiohttp-jinja2/python-aiohttp-jinja2.mk new file mode 100644 index 00000000..724acdb6 --- /dev/null +++ b/package/python-aiohttp-jinja2/python-aiohttp-jinja2.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-aiohttp-jinja2 +# +################################################################################ + +PYTHON_AIOHTTP_JINJA2_VERSION = 1.4.2 +PYTHON_AIOHTTP_JINJA2_SOURCE = aiohttp-jinja2-$(PYTHON_AIOHTTP_JINJA2_VERSION).tar.gz +PYTHON_AIOHTTP_JINJA2_SITE = https://files.pythonhosted.org/packages/da/4f/3b1a0c7177fdb0417308a95bfa8340f19cf84b44f8f2d734cd3052f56644 +PYTHON_AIOHTTP_JINJA2_SETUP_TYPE = setuptools +PYTHON_AIOHTTP_JINJA2_LICENSE = Apache-2.0 +PYTHON_AIOHTTP_JINJA2_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-aiohttp-mako/Config.in b/package/python-aiohttp-mako/Config.in new file mode 100644 index 00000000..8c5df6a4 --- /dev/null +++ b/package/python-aiohttp-mako/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_AIOHTTP_MAKO + bool "python-aiohttp-mako" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_AIOHTTP # runtime + select BR2_PACKAGE_PYTHON_MAKO # runtime + help + mako template renderer for aiohttp.web (http server for + asyncio). + + https://github.com/aio-libs/aiohttp-mako/ diff --git a/package/python-aiohttp-mako/python-aiohttp-mako.hash b/package/python-aiohttp-mako/python-aiohttp-mako.hash new file mode 100644 index 00000000..169027e1 --- /dev/null +++ b/package/python-aiohttp-mako/python-aiohttp-mako.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/aiohttp-mako/json +md5 c0f2da2851d0b6e819b5c882f700bb11 aiohttp-mako-0.4.0.tar.gz +sha256 f10bdee54589b6567e8a0339db582276fdaaa198764541d2f9741f1d3836312c aiohttp-mako-0.4.0.tar.gz +# Locally computed sha256 checksums +sha256 b81fea0e0d4cda42faf00466cabe7b9e2a0cc3a0ffbf20ae3773c18e077c7c52 LICENSE diff --git a/package/python-aiohttp-mako/python-aiohttp-mako.mk b/package/python-aiohttp-mako/python-aiohttp-mako.mk new file mode 100644 index 00000000..4ff5f890 --- /dev/null +++ b/package/python-aiohttp-mako/python-aiohttp-mako.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-aiohttp-mako +# +################################################################################ + +PYTHON_AIOHTTP_MAKO_VERSION = 0.4.0 +PYTHON_AIOHTTP_MAKO_SOURCE = aiohttp-mako-$(PYTHON_AIOHTTP_MAKO_VERSION).tar.gz +PYTHON_AIOHTTP_MAKO_SITE = https://files.pythonhosted.org/packages/f9/8e/d7c0ea2c74e8102a94021e150b622d274fdef22ebd1f0c9a546b21458931 +PYTHON_AIOHTTP_MAKO_SETUP_TYPE = setuptools +PYTHON_AIOHTTP_MAKO_LICENSE = Apache-2.0 +PYTHON_AIOHTTP_MAKO_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-aiohttp-remotes/Config.in b/package/python-aiohttp-remotes/Config.in new file mode 100644 index 00000000..e44696ba --- /dev/null +++ b/package/python-aiohttp-remotes/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_AIOHTTP_REMOTES + bool "python-aiohttp-remotes" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_AIOHTTP # runtime + help + Control remote side information. + + https://github.com/aio-libs/aiohttp-remotes diff --git a/package/python-aiohttp-remotes/python-aiohttp-remotes.hash b/package/python-aiohttp-remotes/python-aiohttp-remotes.hash new file mode 100644 index 00000000..a9a6cad2 --- /dev/null +++ b/package/python-aiohttp-remotes/python-aiohttp-remotes.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/aiohttp-remotes/json +md5 e90fad4b7aa088207f831698fddd9eea aiohttp_remotes-1.0.0.tar.gz +sha256 caec1681de70bac82daa676078d9b125758fb3952fdaa893a6b42bdd995562ef aiohttp_remotes-1.0.0.tar.gz +# Locally computed sha256 checksums +sha256 4e7d0edf250abe2a28027788b8c55a53d1b5c9ff961b8a00643c76aed637ba13 LICENSE diff --git a/package/python-aiohttp-remotes/python-aiohttp-remotes.mk b/package/python-aiohttp-remotes/python-aiohttp-remotes.mk new file mode 100644 index 00000000..f04cecd8 --- /dev/null +++ b/package/python-aiohttp-remotes/python-aiohttp-remotes.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-aiohttp-remotes +# +################################################################################ + +PYTHON_AIOHTTP_REMOTES_VERSION = 1.0.0 +PYTHON_AIOHTTP_REMOTES_SOURCE = aiohttp_remotes-$(PYTHON_AIOHTTP_REMOTES_VERSION).tar.gz +PYTHON_AIOHTTP_REMOTES_SITE = https://files.pythonhosted.org/packages/40/b6/1178bd1e26e88f9f29b7d1bbfae7b38d39ec9cf787d4685f83ade2e7aa7f +PYTHON_AIOHTTP_REMOTES_SETUP_TYPE = distutils +PYTHON_AIOHTTP_REMOTES_LICENSE = MIT +PYTHON_AIOHTTP_REMOTES_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-aiohttp-security/Config.in b/package/python-aiohttp-security/Config.in new file mode 100644 index 00000000..f92c4585 --- /dev/null +++ b/package/python-aiohttp-security/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_AIOHTTP_SECURITY + bool "python-aiohttp-security" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_AIOHTTP # runtime + help + Security for aiohttp.web. + + https://github.com/aio-libs/aiohttp_security/ diff --git a/package/python-aiohttp-security/python-aiohttp-security.hash b/package/python-aiohttp-security/python-aiohttp-security.hash new file mode 100644 index 00000000..1d2604c9 --- /dev/null +++ b/package/python-aiohttp-security/python-aiohttp-security.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/aiohttp-security/json +md5 1624f982d7a779e6ed396ef2ed20acc7 aiohttp-security-0.4.0.tar.gz +sha256 40d4bb150454e392c2dfa3620f6eab28e140e94cf0c2d3b4bf43aef653ec9405 aiohttp-security-0.4.0.tar.gz +# Locally computed sha256 checksums +sha256 a1cc8ff7210897d55d2552fa0792340f8e59720e0160b6918699d40f9a782b1c LICENSE diff --git a/package/python-aiohttp-security/python-aiohttp-security.mk b/package/python-aiohttp-security/python-aiohttp-security.mk new file mode 100644 index 00000000..9ab3b16b --- /dev/null +++ b/package/python-aiohttp-security/python-aiohttp-security.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-aiohttp-security +# +################################################################################ + +PYTHON_AIOHTTP_SECURITY_VERSION = 0.4.0 +PYTHON_AIOHTTP_SECURITY_SOURCE = aiohttp-security-$(PYTHON_AIOHTTP_SECURITY_VERSION).tar.gz +PYTHON_AIOHTTP_SECURITY_SITE = https://files.pythonhosted.org/packages/36/01/d85be376b7c1773b3cb7849cd56dc7d38165664df7de2d3e20af507ef5bb +PYTHON_AIOHTTP_SECURITY_SETUP_TYPE = setuptools +PYTHON_AIOHTTP_SECURITY_LICENSE = Apache-2.0 +PYTHON_AIOHTTP_SECURITY_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-aiohttp-session/Config.in b/package/python-aiohttp-session/Config.in new file mode 100644 index 00000000..c148165f --- /dev/null +++ b/package/python-aiohttp-session/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_AIOHTTP_SESSION + bool "python-aiohttp-session" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_AIOHTTP # runtime + help + Sessions for aiohttp.web. + + https://github.com/aio-libs/aiohttp_session/ diff --git a/package/python-aiohttp-session/python-aiohttp-session.hash b/package/python-aiohttp-session/python-aiohttp-session.hash new file mode 100644 index 00000000..f10827b6 --- /dev/null +++ b/package/python-aiohttp-session/python-aiohttp-session.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/aiohttp-session/json +md5 993ec277ece4765472d0edc0f6c0bba3 aiohttp-session-2.9.0.tar.gz +sha256 959413468b84e30e7ca09719617cfb0000066a2e0f6c20062d043433e82aeb74 aiohttp-session-2.9.0.tar.gz +# Locally computed sha256 checksums +sha256 2a86817fedf0c52baaa47d7dd975073639dfaaebd37312bd279de54d7f841791 LICENSE diff --git a/package/python-aiohttp-session/python-aiohttp-session.mk b/package/python-aiohttp-session/python-aiohttp-session.mk new file mode 100644 index 00000000..fa724fdb --- /dev/null +++ b/package/python-aiohttp-session/python-aiohttp-session.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-aiohttp-session +# +################################################################################ + +PYTHON_AIOHTTP_SESSION_VERSION = 2.9.0 +PYTHON_AIOHTTP_SESSION_SOURCE = aiohttp-session-$(PYTHON_AIOHTTP_SESSION_VERSION).tar.gz +PYTHON_AIOHTTP_SESSION_SITE = https://files.pythonhosted.org/packages/f8/fe/53dfd35f5c7fcc7f2d0866cb29e722303e3fae7f749c1f3d4d11d361dc38 +PYTHON_AIOHTTP_SESSION_SETUP_TYPE = setuptools +PYTHON_AIOHTTP_SESSION_LICENSE = Apache-2.0 +PYTHON_AIOHTTP_SESSION_LICENSE_FILES = LICENSE +PYTHON_AIOHTTP_SESSION_CPE_ID_VENDOR = aiohttp-session_project +PYTHON_AIOHTTP_SESSION_CPE_ID_PRODUCT = aiohttp-session + +$(eval $(python-package)) diff --git a/package/python-aiohttp-sse/Config.in b/package/python-aiohttp-sse/Config.in new file mode 100644 index 00000000..781bbf4d --- /dev/null +++ b/package/python-aiohttp-sse/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_AIOHTTP_SSE + bool "python-aiohttp-sse" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_AIOHTTP # runtime + help + Server-sent events support for aiohttp. + + https://github.com/aio-libs/aiohttp_sse/ diff --git a/package/python-aiohttp-sse/python-aiohttp-sse.hash b/package/python-aiohttp-sse/python-aiohttp-sse.hash new file mode 100644 index 00000000..2f21da46 --- /dev/null +++ b/package/python-aiohttp-sse/python-aiohttp-sse.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/aiohttp-sse/json +md5 d2f394fb75f591045b2c94fc17c8533d aiohttp-sse-2.0.0.tar.gz +sha256 547e1eaa129749f090d02b31956215edbcde74ce99721f5f0ac902a9ccb1202e aiohttp-sse-2.0.0.tar.gz +# Locally computed sha256 checksums +sha256 cb5e8e7e5f4a3988e1063c142c60dc2df75605f4c46515e776e3aca6df976e14 LICENSE diff --git a/package/python-aiohttp-sse/python-aiohttp-sse.mk b/package/python-aiohttp-sse/python-aiohttp-sse.mk new file mode 100644 index 00000000..7a7a0d0a --- /dev/null +++ b/package/python-aiohttp-sse/python-aiohttp-sse.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-aiohttp-sse +# +################################################################################ + +PYTHON_AIOHTTP_SSE_VERSION = 2.0.0 +PYTHON_AIOHTTP_SSE_SOURCE = aiohttp-sse-$(PYTHON_AIOHTTP_SSE_VERSION).tar.gz +PYTHON_AIOHTTP_SSE_SITE = https://files.pythonhosted.org/packages/2b/50/e127729f7df53c32c96b5c71932a7262cad40c83f1e19c218b068c816d51 +PYTHON_AIOHTTP_SSE_SETUP_TYPE = setuptools +PYTHON_AIOHTTP_SSE_LICENSE = Apache-2.0 +PYTHON_AIOHTTP_SSE_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-aiohttp/Config.in b/package/python-aiohttp/Config.in new file mode 100644 index 00000000..9ffea088 --- /dev/null +++ b/package/python-aiohttp/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_PYTHON_AIOHTTP + bool "python-aiohttp" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_AIODNS # runtime + select BR2_PACKAGE_PYTHON_ASYNC_TIMEOUT # runtime + select BR2_PACKAGE_PYTHON_ATTRS # runtime + select BR2_PACKAGE_PYTHON_CCHARDET if BR2_INSTALL_LIBSTDCPP # runtime + select BR2_PACKAGE_PYTHON_CHARDET if !BR2_INSTALL_LIBSTDCPP # runtime + select BR2_PACKAGE_PYTHON_MULTIDICT # runtime + select BR2_PACKAGE_PYTHON_TYPING_EXTENSIONS # runtime + select BR2_PACKAGE_PYTHON_YARL # runtime + select BR2_PACKAGE_PYTHON3_ZLIB # runtime + help + Async http client/server framework (asyncio). + + https://github.com/aio-libs/aiohttp diff --git a/package/python-aiohttp/python-aiohttp.hash b/package/python-aiohttp/python-aiohttp.hash new file mode 100644 index 00000000..db7dfd6b --- /dev/null +++ b/package/python-aiohttp/python-aiohttp.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/aiohttp/json +md5 586eb4e4dcb1e41242ede0c5bcfd4014 aiohttp-3.7.4.tar.gz +sha256 5d84ecc73141d0a0d61ece0742bb7ff5751b0657dab8405f899d3ceb104cc7de aiohttp-3.7.4.tar.gz +# Locally computed sha256 checksums +sha256 96627bed0ad08e9b2efa9f4e04e80837cd0550e7694a0fec33b1dab2550282ab LICENSE.txt diff --git a/package/python-aiohttp/python-aiohttp.mk b/package/python-aiohttp/python-aiohttp.mk new file mode 100644 index 00000000..e878ac1a --- /dev/null +++ b/package/python-aiohttp/python-aiohttp.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-aiohttp +# +################################################################################ + +PYTHON_AIOHTTP_VERSION = 3.7.4 +PYTHON_AIOHTTP_SOURCE = aiohttp-$(PYTHON_AIOHTTP_VERSION).tar.gz +PYTHON_AIOHTTP_SITE = https://files.pythonhosted.org/packages/7a/95/eb60aaad7943e18c9d091de93c9b0b5ed40aa67c7d5e3c5ee9b36f100a38 +PYTHON_AIOHTTP_SETUP_TYPE = setuptools +PYTHON_AIOHTTP_LICENSE = Apache-2.0 +PYTHON_AIOHTTP_LICENSE_FILES = LICENSE.txt +PYTHON_AIOHTTP_CPE_ID_VENDOR = aiohttp_project +PYTHON_AIOHTTP_CPE_ID_PRODUCT = aiohttp + +$(eval $(python-package)) diff --git a/package/python-aiojobs/Config.in b/package/python-aiojobs/Config.in new file mode 100644 index 00000000..ab619851 --- /dev/null +++ b/package/python-aiojobs/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_AIOJOBS + bool "python-aiojobs" + depends on BR2_PACKAGE_PYTHON3 + help + Jobs scheduler for managing background task (asyncio). + + https://github.com/aio-libs/aiojobs diff --git a/package/python-aiojobs/python-aiojobs.hash b/package/python-aiojobs/python-aiojobs.hash new file mode 100644 index 00000000..56a8bb11 --- /dev/null +++ b/package/python-aiojobs/python-aiojobs.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/aiojobs/json +md5 8fd929e4ef9bc6560c675a5b11ac6077 aiojobs-0.2.2.tar.gz +sha256 8e4b3e3d1bdb970bdaf8f8cd5eb4e4ff3e0e01a4abd22b4f73a87002a5ae4005 aiojobs-0.2.2.tar.gz +# Locally computed sha256 checksums +sha256 b40930bbcf80744c86c46a12bc9da056641d722716c378f5659b9e555ef833e1 LICENSE diff --git a/package/python-aiojobs/python-aiojobs.mk b/package/python-aiojobs/python-aiojobs.mk new file mode 100644 index 00000000..7a95f990 --- /dev/null +++ b/package/python-aiojobs/python-aiojobs.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-aiojobs +# +################################################################################ + +PYTHON_AIOJOBS_VERSION = 0.2.2 +PYTHON_AIOJOBS_SOURCE = aiojobs-$(PYTHON_AIOJOBS_VERSION).tar.gz +PYTHON_AIOJOBS_SITE = https://files.pythonhosted.org/packages/57/c5/9eb091930d6574002d1721dab5ca15a1bd69ed5dc8e654159d27223cdd3b +PYTHON_AIOJOBS_SETUP_TYPE = distutils +PYTHON_AIOJOBS_LICENSE = Apache-2.0 +PYTHON_AIOJOBS_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-aiologstash/Config.in b/package/python-aiologstash/Config.in new file mode 100644 index 00000000..e70c232f --- /dev/null +++ b/package/python-aiologstash/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_AIOLOGSTASH + bool "python-aiologstash" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_ASYNC_TIMEOUT # runtime + select BR2_PACKAGE_PYTHON_LOGSTASH # runtime + help + asyncio-compatible logstash logging handler. + + https://github.com/aio-libs/aiologstash diff --git a/package/python-aiologstash/python-aiologstash.hash b/package/python-aiologstash/python-aiologstash.hash new file mode 100644 index 00000000..ff7d2cce --- /dev/null +++ b/package/python-aiologstash/python-aiologstash.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/aiologstash/json +md5 1e321c11b34477f780f31b2553557d69 aiologstash-2.0.0.tar.gz +sha256 698522126ffd4e905cd5f52a08092a0a78096c8f0e28bc1e303369873da71f78 aiologstash-2.0.0.tar.gz +# Locally computed sha256 checksums +sha256 beddf3a80aaaa71ebd6765b13bc680bd0450bb81191249cc889539523f9404ec LICENSE diff --git a/package/python-aiologstash/python-aiologstash.mk b/package/python-aiologstash/python-aiologstash.mk new file mode 100644 index 00000000..be1c40b7 --- /dev/null +++ b/package/python-aiologstash/python-aiologstash.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-aiologstash +# +################################################################################ + +PYTHON_AIOLOGSTASH_VERSION = 2.0.0 +PYTHON_AIOLOGSTASH_SOURCE = aiologstash-$(PYTHON_AIOLOGSTASH_VERSION).tar.gz +PYTHON_AIOLOGSTASH_SITE = https://files.pythonhosted.org/packages/1c/dc/382861d5d25ccc976d02118922598fc4547f74f3287793e270ed614d8176 +PYTHON_AIOLOGSTASH_SETUP_TYPE = distutils +PYTHON_AIOLOGSTASH_LICENSE = MIT +PYTHON_AIOLOGSTASH_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-aiomonitor/Config.in b/package/python-aiomonitor/Config.in new file mode 100644 index 00000000..c76c952c --- /dev/null +++ b/package/python-aiomonitor/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_AIOMONITOR + bool "python-aiomonitor" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_TERMINALTABLES # runtime + select BR2_PACKAGE_PYTHON_AIOCONSOLE # runtime + help + aiomonitor adds monitor and python REPL capabilities for + asyncio application. + + https://github.com/aio-libs/aiomonitor diff --git a/package/python-aiomonitor/python-aiomonitor.hash b/package/python-aiomonitor/python-aiomonitor.hash new file mode 100644 index 00000000..410beb79 --- /dev/null +++ b/package/python-aiomonitor/python-aiomonitor.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/aiomonitor/json +md5 5f184e4b97ea161fc2d690aef604f997 aiomonitor-0.4.5.tar.gz +sha256 6232c1ab14bf06cd7217845801c27340032f74e283bdaf32d01cdd3b7c673d0e aiomonitor-0.4.5.tar.gz +# Locally computed sha256 checksums +sha256 9b42fe3a288996988c552e387e7877be7525a1649e62086aedd6b32d3cb56365 LICENSE diff --git a/package/python-aiomonitor/python-aiomonitor.mk b/package/python-aiomonitor/python-aiomonitor.mk new file mode 100644 index 00000000..a8860097 --- /dev/null +++ b/package/python-aiomonitor/python-aiomonitor.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-aiomonitor +# +################################################################################ + +PYTHON_AIOMONITOR_VERSION = 0.4.5 +PYTHON_AIOMONITOR_SOURCE = aiomonitor-$(PYTHON_AIOMONITOR_VERSION).tar.gz +PYTHON_AIOMONITOR_SITE = https://files.pythonhosted.org/packages/98/76/b62e9fbe267287527fb6f4b6774394d4f00650195774173bb0055a99ab3d +PYTHON_AIOMONITOR_SETUP_TYPE = setuptools +PYTHON_AIOMONITOR_LICENSE = Apache-2.0 +PYTHON_AIOMONITOR_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-aioredis/Config.in b/package/python-aioredis/Config.in new file mode 100644 index 00000000..dc2ee01d --- /dev/null +++ b/package/python-aioredis/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_AIOREDIS + bool "python-aioredis" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_ASYNC_TIMEOUT # runtime + select BR2_PACKAGE_PYTHON_HIREDIS # runtime + help + Provides simple and clear interface to Redis based on asyncio. + + https://github.com/aio-libs/aioredis diff --git a/package/python-aioredis/python-aioredis.hash b/package/python-aioredis/python-aioredis.hash new file mode 100644 index 00000000..7162890c --- /dev/null +++ b/package/python-aioredis/python-aioredis.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/aioredis/json +md5 950d2092ad96bb1145e9af7bd780fe38 aioredis-1.3.1.tar.gz +sha256 15f8af30b044c771aee6787e5ec24694c048184c7b9e54c3b60c750a4b93273a aioredis-1.3.1.tar.gz +# Locally computed sha256 checksums +sha256 a288b4f41b5531ff7e9e2df9cd3f17a1844badebc52d7a9205b131f8b8a50744 LICENSE diff --git a/package/python-aioredis/python-aioredis.mk b/package/python-aioredis/python-aioredis.mk new file mode 100644 index 00000000..750f37b6 --- /dev/null +++ b/package/python-aioredis/python-aioredis.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-aioredis +# +################################################################################ + +PYTHON_AIOREDIS_VERSION = 1.3.1 +PYTHON_AIOREDIS_SOURCE = aioredis-$(PYTHON_AIOREDIS_VERSION).tar.gz +PYTHON_AIOREDIS_SITE = https://files.pythonhosted.org/packages/2c/2a/662e5e79dde5d00964b995d50e38ecdefeeeb09b37edafff193c7e850f46 +PYTHON_AIOREDIS_SETUP_TYPE = setuptools +PYTHON_AIOREDIS_LICENSE = MIT +PYTHON_AIOREDIS_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-aiorwlock/Config.in b/package/python-aiorwlock/Config.in new file mode 100644 index 00000000..afdc27dd --- /dev/null +++ b/package/python-aiorwlock/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_AIORWLOCK + bool "python-aiorwlock" + depends on BR2_PACKAGE_PYTHON3 + help + Read write lock for asyncio. + + https://github.com/aio-libs/aiorwlock diff --git a/package/python-aiorwlock/python-aiorwlock.hash b/package/python-aiorwlock/python-aiorwlock.hash new file mode 100644 index 00000000..2398b154 --- /dev/null +++ b/package/python-aiorwlock/python-aiorwlock.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/aiorwlock/json +md5 8d89ed0d80820aad8d9320204779fd62 aiorwlock-1.0.0.tar.gz +sha256 4f773e31d78037e3ec27056a22200af482768b43da66e2cc33dd64aa5ea6518a aiorwlock-1.0.0.tar.gz +# Locally computed sha256 checksums +sha256 fa99ee9d7727194a9f8994c67d1948dc42e8e00ab809fd4a47acfae119d11403 LICENSE diff --git a/package/python-aiorwlock/python-aiorwlock.mk b/package/python-aiorwlock/python-aiorwlock.mk new file mode 100644 index 00000000..f6f3c974 --- /dev/null +++ b/package/python-aiorwlock/python-aiorwlock.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-aiorwlock +# +################################################################################ + +PYTHON_AIORWLOCK_VERSION = 1.0.0 +PYTHON_AIORWLOCK_SOURCE = aiorwlock-$(PYTHON_AIORWLOCK_VERSION).tar.gz +PYTHON_AIORWLOCK_SITE = https://files.pythonhosted.org/packages/40/af/e55b3266352f3383c723e0a3304b0df46a59dfc6235b0b1a0a416afd60c1 +PYTHON_AIORWLOCK_SETUP_TYPE = setuptools +PYTHON_AIORWLOCK_LICENSE = Apache-2.0 +PYTHON_AIORWLOCK_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-aiosignal/Config.in b/package/python-aiosignal/Config.in new file mode 100644 index 00000000..6b7753de --- /dev/null +++ b/package/python-aiosignal/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_AIOSIGNAL + bool "python-aiosignal" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_FROZENLIST # runtime + help + aiosignal: a list of registered asynchronous callbacks. + + https://github.com/aio-libs/aiosignal diff --git a/package/python-aiosignal/python-aiosignal.hash b/package/python-aiosignal/python-aiosignal.hash new file mode 100644 index 00000000..17c69c81 --- /dev/null +++ b/package/python-aiosignal/python-aiosignal.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/aiosignal/json +md5 0831ab9e46799842ed84529dbaa86196 aiosignal-1.0.0.tar.gz +sha256 7cd33cbe05bc2d83e77f80d688b4717e424d15eecf6d65384e173b2873e62f13 aiosignal-1.0.0.tar.gz +# Locally computed sha256 checksums +sha256 6fd5243e92dd7f98ec69c7ac377728e74905709ff527a5bf98d6d0263c04f5b6 LICENSE.txt diff --git a/package/python-aiosignal/python-aiosignal.mk b/package/python-aiosignal/python-aiosignal.mk new file mode 100644 index 00000000..14b42646 --- /dev/null +++ b/package/python-aiosignal/python-aiosignal.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-aiosignal +# +################################################################################ + +PYTHON_AIOSIGNAL_VERSION = 1.0.0 +PYTHON_AIOSIGNAL_SOURCE = aiosignal-$(PYTHON_AIOSIGNAL_VERSION).tar.gz +PYTHON_AIOSIGNAL_SITE = https://files.pythonhosted.org/packages/ca/b7/5ae01ed039ea51cc8280d87b8a1269ba2f1343d7466c1e50c618558352e5 +PYTHON_AIOSIGNAL_SETUP_TYPE = setuptools +PYTHON_AIOSIGNAL_LICENSE = Apache-2.0 +PYTHON_AIOSIGNAL_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-aiozipkin/Config.in b/package/python-aiozipkin/Config.in new file mode 100644 index 00000000..643fc9a4 --- /dev/null +++ b/package/python-aiozipkin/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_AIOZIPKIN + bool "python-aiozipkin" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_AIOHTTP # runtime + help + Distributed tracing instrumentation for asyncio application + with zipkin. + + https://github.com/aio-libs/aiozipkin diff --git a/package/python-aiozipkin/python-aiozipkin.hash b/package/python-aiozipkin/python-aiozipkin.hash new file mode 100644 index 00000000..af07285c --- /dev/null +++ b/package/python-aiozipkin/python-aiozipkin.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/aiozipkin/json +md5 7be9acaa48d4d4dc14abcc79edfd6c16 aiozipkin-0.7.1.tar.gz +sha256 aa99984832225378d900a5cd0d4e8e89af7ec9f359612c2e311f55b9039ed501 aiozipkin-0.7.1.tar.gz +# Locally computed sha256 checksums +sha256 9b42fe3a288996988c552e387e7877be7525a1649e62086aedd6b32d3cb56365 LICENSE diff --git a/package/python-aiozipkin/python-aiozipkin.mk b/package/python-aiozipkin/python-aiozipkin.mk new file mode 100644 index 00000000..e351dbac --- /dev/null +++ b/package/python-aiozipkin/python-aiozipkin.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-aiozipkin +# +################################################################################ + +PYTHON_AIOZIPKIN_VERSION = 0.7.1 +PYTHON_AIOZIPKIN_SOURCE = aiozipkin-$(PYTHON_AIOZIPKIN_VERSION).tar.gz +PYTHON_AIOZIPKIN_SITE = https://files.pythonhosted.org/packages/9e/33/120925f90470b7f52f46e2b9f71caf2514e389f42b3ed3b62f6389baee95 +PYTHON_AIOZIPKIN_SETUP_TYPE = setuptools +PYTHON_AIOZIPKIN_LICENSE = Apache-2.0 +PYTHON_AIOZIPKIN_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-alsaaudio/Config.in b/package/python-alsaaudio/Config.in new file mode 100644 index 00000000..60523bf7 --- /dev/null +++ b/package/python-alsaaudio/Config.in @@ -0,0 +1,14 @@ +comment "python-alsaaudio needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_PYTHON_ALSAAUDIO + bool "python-alsaaudio" + depends on BR2_TOOLCHAIN_HAS_THREADS # alsa-lib + select BR2_PACKAGE_ALSA_LIB + select BR2_PACKAGE_ALSA_LIB_PCM + select BR2_PACKAGE_ALSA_LIB_MIXER + help + The PyAlsaAudio package contains bindings for the ALSA sound + API. + + http://larsimmisch.github.io/pyalsaaudio/ diff --git a/package/python-alsaaudio/python-alsaaudio.hash b/package/python-alsaaudio/python-alsaaudio.hash new file mode 100644 index 00000000..476bc8f1 --- /dev/null +++ b/package/python-alsaaudio/python-alsaaudio.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pyalsaaudio/json +md5 b46f69561bc85fc52e698b2440ca251e pyalsaaudio-0.8.4.tar.gz +sha256 84e8f8da544d7f4bd96479ce4a237600077984d9be1d7f16c1d9a492ecf50085 pyalsaaudio-0.8.4.tar.gz +# Locally computed sha256 checksums +sha256 ef6ba930f96986d78082e67c817ac617b9e833d60d5a0460f24c9c674a010935 LICENSE diff --git a/package/python-alsaaudio/python-alsaaudio.mk b/package/python-alsaaudio/python-alsaaudio.mk new file mode 100644 index 00000000..3344583c --- /dev/null +++ b/package/python-alsaaudio/python-alsaaudio.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-alsaaudio +# +################################################################################ + +PYTHON_ALSAAUDIO_VERSION = 0.8.4 +PYTHON_ALSAAUDIO_SOURCE = pyalsaaudio-$(PYTHON_ALSAAUDIO_VERSION).tar.gz +PYTHON_ALSAAUDIO_SITE = https://files.pythonhosted.org/packages/52/b6/44871791929d9d7e11325af0b7be711388dfeeab17147988f044a41a6d83 +PYTHON_ALSAAUDIO_SETUP_TYPE = setuptools +PYTHON_ALSAAUDIO_LICENSE = Python-2.0 +PYTHON_ALSAAUDIO_LICENSE_FILES = LICENSE +PYTHON_ALSAAUDIO_DEPENDENCIES = alsa-lib + +$(eval $(python-package)) diff --git a/package/python-ansicolors/Config.in b/package/python-ansicolors/Config.in new file mode 100644 index 00000000..78da50df --- /dev/null +++ b/package/python-ansicolors/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_ANSICOLORS + bool "python-ansicolors" + help + ANSI colors for Python. + + http://github.com/jonathaneunice/colors/ diff --git a/package/python-ansicolors/python-ansicolors.hash b/package/python-ansicolors/python-ansicolors.hash new file mode 100644 index 00000000..9fb51eb5 --- /dev/null +++ b/package/python-ansicolors/python-ansicolors.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/ansicolors/json +md5 9ca7e2396ffa2e20af023c6b83ab7b14 ansicolors-1.1.8.zip +sha256 99f94f5e3348a0bcd43c82e5fc4414013ccc19d70bd939ad71e0133ce9c372e0 ansicolors-1.1.8.zip +# Locally computed sha256 checksums +sha256 71a13496c621f01b454f9aa54fa608a712f58eb253e6dd2c91027fe78340c773 LICENSE diff --git a/package/python-ansicolors/python-ansicolors.mk b/package/python-ansicolors/python-ansicolors.mk new file mode 100644 index 00000000..787ce8c4 --- /dev/null +++ b/package/python-ansicolors/python-ansicolors.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# python-ansicolors +# +################################################################################ + +PYTHON_ANSICOLORS_VERSION = 1.1.8 +PYTHON_ANSICOLORS_SOURCE = ansicolors-$(PYTHON_ANSICOLORS_VERSION).zip +PYTHON_ANSICOLORS_SITE = https://files.pythonhosted.org/packages/76/31/7faed52088732704523c259e24c26ce6f2f33fbeff2ff59274560c27628e +PYTHON_ANSICOLORS_SETUP_TYPE = setuptools +PYTHON_ANSICOLORS_LICENSE = ISC +PYTHON_ANSICOLORS_LICENSE_FILES = LICENSE + +define PYTHON_ANSICOLORS_EXTRACT_CMDS + unzip $(PYTHON_ANSICOLORS_DL_DIR)/$(PYTHON_ANSICOLORS_SOURCE) -d $(@D) + mv $(@D)/ansicolors-$(PYTHON_ANSICOLORS_VERSION)/* $(@D) + $(RM) -r $(@D)/ansicolors-$(PYTHON_ANSICOLORS_VERSION) +endef + +$(eval $(python-package)) diff --git a/package/python-argh/Config.in b/package/python-argh/Config.in new file mode 100644 index 00000000..5da6625d --- /dev/null +++ b/package/python-argh/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_ARGH + bool "python-argh" + help + An unobtrusive argparse wrapper with natural syntax. + + http://github.com/neithere/argh/ diff --git a/package/python-argh/python-argh.hash b/package/python-argh/python-argh.hash new file mode 100644 index 00000000..163ea6ce --- /dev/null +++ b/package/python-argh/python-argh.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/argh/json +md5 edda25f3f0164a963dd89c0e3c619973 argh-0.26.2.tar.gz +# Locally computed +sha256 e9535b8c84dc9571a48999094fda7f33e63c3f1b74f3e5f3ac0105a58405bb65 argh-0.26.2.tar.gz +sha256 9c318783389a2e78735dc3d633e745e5648b826744521857045e84ed2e79ce2e README.rst diff --git a/package/python-argh/python-argh.mk b/package/python-argh/python-argh.mk new file mode 100644 index 00000000..ac514174 --- /dev/null +++ b/package/python-argh/python-argh.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-argh +# +################################################################################ + +PYTHON_ARGH_VERSION = 0.26.2 +PYTHON_ARGH_SOURCE = argh-$(PYTHON_ARGH_VERSION).tar.gz +PYTHON_ARGH_SITE = https://pypi.python.org/packages/e3/75/1183b5d1663a66aebb2c184e0398724b624cecd4f4b679cb6e25de97ed15 +PYTHON_ARGH_SETUP_TYPE = setuptools +PYTHON_ARGH_LICENSE = LGPL-3.0+ +PYTHON_ARGH_LICENSE_FILES = README.rst + +$(eval $(python-package)) diff --git a/package/python-argon2-cffi/Config.in b/package/python-argon2-cffi/Config.in new file mode 100644 index 00000000..16bbe6c4 --- /dev/null +++ b/package/python-argon2-cffi/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PYTHON_ARGON2_CFFI + bool "python-argon2-cffi" + depends on BR2_USE_MMU # libargon2 + depends on !BR2_STATIC_LIBS # libargon2 + select BR2_PACKAGE_PYTHON_CFFI # runtime + select BR2_PACKAGE_PYTHON_ENUM34 if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_LIBARGON2 + help + The secure Argon2 password hashing algorithm. + + https://argon2-cffi.readthedocs.io/ diff --git a/package/python-argon2-cffi/python-argon2-cffi.hash b/package/python-argon2-cffi/python-argon2-cffi.hash new file mode 100644 index 00000000..730a9b6c --- /dev/null +++ b/package/python-argon2-cffi/python-argon2-cffi.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/argon2_cffi/json +md5 e49ccb29351387fd853f31bf19b67f59 argon2-cffi-20.1.0.tar.gz +sha256 d8029b2d3e4b4cea770e9e5a0104dd8fa185c1724a0f01528ae4826a6d25f97d argon2-cffi-20.1.0.tar.gz +# Locally computed sha256 checksums +sha256 bf659a28b49240602f56bbdf490cbe2ec509b15b98f99d7b19a52c740e327863 LICENSE diff --git a/package/python-argon2-cffi/python-argon2-cffi.mk b/package/python-argon2-cffi/python-argon2-cffi.mk new file mode 100644 index 00000000..674e089e --- /dev/null +++ b/package/python-argon2-cffi/python-argon2-cffi.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# python-argon2-cffi +# +################################################################################ + +PYTHON_ARGON2_CFFI_VERSION = 20.1.0 +PYTHON_ARGON2_CFFI_SOURCE = argon2-cffi-$(PYTHON_ARGON2_CFFI_VERSION).tar.gz +PYTHON_ARGON2_CFFI_SITE = https://files.pythonhosted.org/packages/74/fd/d78e003a79c453e8454197092fce9d1c6099445b7e7da0b04eb4fe1dbab7 +PYTHON_ARGON2_CFFI_SETUP_TYPE = setuptools +PYTHON_ARGON2_CFFI_LICENSE = MIT +PYTHON_ARGON2_CFFI_LICENSE_FILES = LICENSE +PYTHON_ARGON2_CFFI_DEPENDENCIES = host-python-cffi libargon2 +PYTHON_ARGON2_CFFI_ENV = ARGON2_CFFI_USE_SYSTEM=1 + +ifeq ($(BR2_X86_CPU_HAS_SSE2),y) +PYTHON_ARGON2_CFFI_ENV += ARGON2_CFFI_USE_SSE2=1 +else +PYTHON_ARGON2_CFFI_ENV += ARGON2_CFFI_USE_SSE2=0 +endif + +$(eval $(python-package)) diff --git a/package/python-arrow/Config.in b/package/python-arrow/Config.in new file mode 100644 index 00000000..14585568 --- /dev/null +++ b/package/python-arrow/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_ARROW + bool "python-arrow" + select BR2_PACKAGE_PYTHON_DATEUTIL # runtime + select BR2_PACKAGE_PYTHON_BACKPORTS_FUNCTOOLS_LRU_CACHE \ + if BR2_PACKAGE_PYTHON # runtime + help + Better dates and times for Python. + + https://github.com/crsmithdev/arrow/ diff --git a/package/python-arrow/python-arrow.hash b/package/python-arrow/python-arrow.hash new file mode 100644 index 00000000..90e05332 --- /dev/null +++ b/package/python-arrow/python-arrow.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/arrow/json +md5 554f18b0e23182ee0e8cb2a882d2f607 arrow-0.15.2.tar.gz +sha256 10257c5daba1a88db34afa284823382f4963feca7733b9107956bed041aff24f arrow-0.15.2.tar.gz +# Locally computed sha256 checksums +sha256 a4b7601be50569c2c96a9818fc809b0149410c84c99714d60c9d4fb0ae861fa2 LICENSE diff --git a/package/python-arrow/python-arrow.mk b/package/python-arrow/python-arrow.mk new file mode 100644 index 00000000..f8326288 --- /dev/null +++ b/package/python-arrow/python-arrow.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-arrow +# +################################################################################ + +PYTHON_ARROW_VERSION = 0.15.2 +PYTHON_ARROW_SOURCE = arrow-$(PYTHON_ARROW_VERSION).tar.gz +PYTHON_ARROW_SITE = https://files.pythonhosted.org/packages/43/0e/47416c54ad7742981bf77fdfc405987551ab14b181a6140c8cd2a5823872 +PYTHON_ARROW_SETUP_TYPE = setuptools +PYTHON_ARROW_LICENSE = Apache-2.0 +PYTHON_ARROW_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-asgiref/Config.in b/package/python-asgiref/Config.in new file mode 100644 index 00000000..e131f476 --- /dev/null +++ b/package/python-asgiref/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_PYTHON_ASGIREF + bool "python-asgiref" + depends on BR2_PACKAGE_PYTHON3 + help + ASGI is a standard for Python asynchronous web apps and + servers to communicate with each other, and positioned as + an asynchronous successor to WSGI. + + This package includes ASGI base libraries, such as: + - Sync-to-async and async-to-sync function wrappers, + asgiref.sync + - Server base classes, asgiref.server + - A WSGI-to-ASGI adapter, in asgiref.wsgi + + http://github.com/django/asgiref/ diff --git a/package/python-asgiref/python-asgiref.hash b/package/python-asgiref/python-asgiref.hash new file mode 100644 index 00000000..c349ad5a --- /dev/null +++ b/package/python-asgiref/python-asgiref.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/asgiref/json +md5 5afe03ecc39ae94950ff95e80166d945 asgiref-3.3.4.tar.gz +sha256 d1216dfbdfb63826470995d31caed36225dcaf34f182e0fa257a4dd9e86f1b78 asgiref-3.3.4.tar.gz +# Locally computed sha256 checksums +sha256 b846415d1b514e9c1dff14a22deb906d794bc546ca6129f950a18cd091e2a669 LICENSE diff --git a/package/python-asgiref/python-asgiref.mk b/package/python-asgiref/python-asgiref.mk new file mode 100644 index 00000000..0353f5d5 --- /dev/null +++ b/package/python-asgiref/python-asgiref.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-asgiref +# +################################################################################ + +PYTHON_ASGIREF_VERSION = 3.3.4 +PYTHON_ASGIREF_SOURCE = asgiref-$(PYTHON_ASGIREF_VERSION).tar.gz +PYTHON_ASGIREF_SITE = https://files.pythonhosted.org/packages/d8/3f/ef696a6d8254f182b1a089aeffb638d2eb83055e603146d3a40605c5b7da +PYTHON_ASGIREF_SETUP_TYPE = setuptools +PYTHON_ASGIREF_LICENSE = BSD-3-Clause +PYTHON_ASGIREF_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-asn1crypto/Config.in b/package/python-asn1crypto/Config.in new file mode 100644 index 00000000..fe3b5ebb --- /dev/null +++ b/package/python-asn1crypto/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_ASN1CRYPTO + bool "python-asn1crypto" + help + Fast ASN.1 parser and serializer with definitions for + private keys, public keys, certificates, CRL, OCSP, CMS, + PKCS#3, PKCS#7, PKCS#8, PKCS#12, PKCS#5, X.509 and TSP. + + https://github.com/wbond/asn1crypto diff --git a/package/python-asn1crypto/python-asn1crypto.hash b/package/python-asn1crypto/python-asn1crypto.hash new file mode 100644 index 00000000..b00474bd --- /dev/null +++ b/package/python-asn1crypto/python-asn1crypto.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/asn1crypto/json +md5 daad112940181917e3ff169b47b9bd9a asn1crypto-1.3.0.tar.gz +sha256 5a215cb8dc12f892244e3a113fe05397ee23c5c4ca7a69cd6e69811755efc42d asn1crypto-1.3.0.tar.gz +# Locally computed sha256 checksums +sha256 a88480656ec98943fb04344f6a477ee74062896f3ddb1a6f99e5f05f0109a286 LICENSE diff --git a/package/python-asn1crypto/python-asn1crypto.mk b/package/python-asn1crypto/python-asn1crypto.mk new file mode 100644 index 00000000..2d8d384c --- /dev/null +++ b/package/python-asn1crypto/python-asn1crypto.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-asn1crypto +# +################################################################################ + +PYTHON_ASN1CRYPTO_VERSION = 1.3.0 +PYTHON_ASN1CRYPTO_SOURCE = asn1crypto-$(PYTHON_ASN1CRYPTO_VERSION).tar.gz +PYTHON_ASN1CRYPTO_SITE = https://files.pythonhosted.org/packages/9f/3d/8beae739ed8c1c8f00ceac0ab6b0e97299b42da869e24cf82851b27a9123 +PYTHON_ASN1CRYPTO_SETUP_TYPE = setuptools +PYTHON_ASN1CRYPTO_LICENSE = MIT +PYTHON_ASN1CRYPTO_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-async-lru/Config.in b/package/python-async-lru/Config.in new file mode 100644 index 00000000..794f504e --- /dev/null +++ b/package/python-async-lru/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_ASYNC_LRU + bool "python-async-lru" + depends on BR2_PACKAGE_PYTHON3 + help + Simple lru_cache for asyncio. + + https://github.com/aio-libs/async_lru diff --git a/package/python-async-lru/python-async-lru.hash b/package/python-async-lru/python-async-lru.hash new file mode 100644 index 00000000..6fa61e0e --- /dev/null +++ b/package/python-async-lru/python-async-lru.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/async_lru/json +md5 69bed62927426353513e68aec77989ab async_lru-1.0.2.tar.gz +sha256 baa898027619f5cc31b7966f96f00e4fc0df43ba206a8940a5d1af5336a477cb async_lru-1.0.2.tar.gz +# Locally computed sha256 checksums +sha256 ea65975679bc2093be925d520358e41096bd96fddedee3e929160a5faadcf573 LICENSE diff --git a/package/python-async-lru/python-async-lru.mk b/package/python-async-lru/python-async-lru.mk new file mode 100644 index 00000000..adaa8f62 --- /dev/null +++ b/package/python-async-lru/python-async-lru.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-async-lru +# +################################################################################ + +PYTHON_ASYNC_LRU_VERSION = 1.0.2 +PYTHON_ASYNC_LRU_SOURCE = async_lru-$(PYTHON_ASYNC_LRU_VERSION).tar.gz +PYTHON_ASYNC_LRU_SITE = https://files.pythonhosted.org/packages/7e/c1/a3d6207deaaeb582d16dc9a0fd217f192efc9487ce59897131cf9a2bdc1c +PYTHON_ASYNC_LRU_SETUP_TYPE = setuptools +PYTHON_ASYNC_LRU_LICENSE = MIT +PYTHON_ASYNC_LRU_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-async-timeout/Config.in b/package/python-async-timeout/Config.in new file mode 100644 index 00000000..659a0fde --- /dev/null +++ b/package/python-async-timeout/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_ASYNC_TIMEOUT + bool "python-async-timeout" + depends on BR2_PACKAGE_PYTHON3 + help + asyncio-compatible timeout context manager. + + https://github.com/aio-libs/async-timeout diff --git a/package/python-async-timeout/python-async-timeout.hash b/package/python-async-timeout/python-async-timeout.hash new file mode 100644 index 00000000..f99e1dad --- /dev/null +++ b/package/python-async-timeout/python-async-timeout.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.python.org/pypi/async_timeout/json +md5 305c4fa529f2485c403d0dbe14390175 async-timeout-3.0.1.tar.gz +sha256 0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f async-timeout-3.0.1.tar.gz +# Locally computed sha256 checksums +sha256 b40930bbcf80744c86c46a12bc9da056641d722716c378f5659b9e555ef833e1 LICENSE diff --git a/package/python-async-timeout/python-async-timeout.mk b/package/python-async-timeout/python-async-timeout.mk new file mode 100644 index 00000000..093adc5c --- /dev/null +++ b/package/python-async-timeout/python-async-timeout.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-async-timeout +# +################################################################################ + +PYTHON_ASYNC_TIMEOUT_VERSION = 3.0.1 +PYTHON_ASYNC_TIMEOUT_SOURCE = async-timeout-$(PYTHON_ASYNC_TIMEOUT_VERSION).tar.gz +PYTHON_ASYNC_TIMEOUT_SITE = https://files.pythonhosted.org/packages/a1/78/aae1545aba6e87e23ecab8d212b58bb70e72164b67eb090b81bb17ad38e3 +PYTHON_ASYNC_TIMEOUT_LICENSE = Apache-2.0 +PYTHON_ASYNC_TIMEOUT_LICENSE_FILES = LICENSE +PYTHON_ASYNC_TIMEOUT_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-attrs/Config.in b/package/python-attrs/Config.in new file mode 100644 index 00000000..fb0ab248 --- /dev/null +++ b/package/python-attrs/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_ATTRS + bool "python-attrs" + help + attrs is the Python package that will bring back the joy of + writing classes by relieving you from the drudgery of + implementing object protocols (aka dunder methods). + + https://attrs.readthedocs.io/ diff --git a/package/python-attrs/python-attrs.hash b/package/python-attrs/python-attrs.hash new file mode 100644 index 00000000..38415957 --- /dev/null +++ b/package/python-attrs/python-attrs.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/attrs/json +md5 5b2db50fcc31be34d32798183c9bd062 attrs-19.3.0.tar.gz +sha256 f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72 attrs-19.3.0.tar.gz +# Locally computed sha256 +sha256 bf659a28b49240602f56bbdf490cbe2ec509b15b98f99d7b19a52c740e327863 LICENSE diff --git a/package/python-attrs/python-attrs.mk b/package/python-attrs/python-attrs.mk new file mode 100644 index 00000000..72b280c3 --- /dev/null +++ b/package/python-attrs/python-attrs.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-attrs +# +################################################################################ + +PYTHON_ATTRS_VERSION = 19.3.0 +PYTHON_ATTRS_SOURCE = attrs-$(PYTHON_ATTRS_VERSION).tar.gz +PYTHON_ATTRS_SITE = https://files.pythonhosted.org/packages/98/c3/2c227e66b5e896e15ccdae2e00bbc69aa46e9a8ce8869cc5fa96310bf612 +PYTHON_ATTRS_SETUP_TYPE = setuptools +PYTHON_ATTRS_LICENSE = MIT +PYTHON_ATTRS_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-autobahn/Config.in b/package/python-autobahn/Config.in new file mode 100644 index 00000000..78b16897 --- /dev/null +++ b/package/python-autobahn/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_PYTHON_AUTOBAHN + bool "python-autobahn" + depends on BR2_INSTALL_LIBSTDCPP # python-cryptography -> python-pyasn + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_CRYPTOGRAPHY # runtime + select BR2_PACKAGE_PYTHON_TXAIO # runtime + help + WebSocket client and server library, WAMP real-time + framework. + + https://pypi.python.org/pypi/autobahn + +comment "python-autobahn needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_PYTHON3 diff --git a/package/python-autobahn/python-autobahn.hash b/package/python-autobahn/python-autobahn.hash new file mode 100644 index 00000000..a5aa2a5a --- /dev/null +++ b/package/python-autobahn/python-autobahn.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/autobahn/json +md5 dcae3cf26203aa4bbd9912137e5c9512 autobahn-20.4.3.tar.gz +sha256 c6fe745d52ba9f9eecf791cd31f558df42aebfc4f9ee558a8f1d18c707e1ae1f autobahn-20.4.3.tar.gz +# Locally computed sha256 checksums +sha256 0387eefce570453daaa60633f28676003731eeca28b2d0a0071c628e3a0004ef LICENSE diff --git a/package/python-autobahn/python-autobahn.mk b/package/python-autobahn/python-autobahn.mk new file mode 100644 index 00000000..81e2b7a4 --- /dev/null +++ b/package/python-autobahn/python-autobahn.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-autobahn +# +################################################################################ + +PYTHON_AUTOBAHN_VERSION = 20.4.3 +PYTHON_AUTOBAHN_SOURCE = autobahn-$(PYTHON_AUTOBAHN_VERSION).tar.gz +PYTHON_AUTOBAHN_SITE = https://files.pythonhosted.org/packages/cb/16/38d27874ef827974f44acb6dd64a92a9248b624734c0e84b91083c2d9350 +PYTHON_AUTOBAHN_LICENSE = MIT +PYTHON_AUTOBAHN_LICENSE_FILES = LICENSE +PYTHON_AUTOBAHN_CPE_ID_VENDOR = crossbar +PYTHON_AUTOBAHN_CPE_ID_PRODUCT = autobahn +PYTHON_AUTOBAHN_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-automat/Config.in b/package/python-automat/Config.in new file mode 100644 index 00000000..ee02d22b --- /dev/null +++ b/package/python-automat/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_AUTOMAT + bool "python-automat" + select BR2_PACKAGE_PYTHON_ATTRS # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + help + Self-service finite-state machines for the programmer on the + go. + + https://github.com/glyph/Automat diff --git a/package/python-automat/python-automat.hash b/package/python-automat/python-automat.hash new file mode 100644 index 00000000..33a64abe --- /dev/null +++ b/package/python-automat/python-automat.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/automat/json +md5 d6cef9886b037b8857bfbc686f3ae30a Automat-20.2.0.tar.gz +sha256 7979803c74610e11ef0c0d68a2942b152df52da55336e0c9d58daf1831cbdf33 Automat-20.2.0.tar.gz +# Locally computed sha256 checksums +sha256 b2201301678d0a937d938543827ca1360712eb34e23de8ee3f3bfffbd4c0e376 LICENSE diff --git a/package/python-automat/python-automat.mk b/package/python-automat/python-automat.mk new file mode 100644 index 00000000..b94fd2e1 --- /dev/null +++ b/package/python-automat/python-automat.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-automat +# +################################################################################ + +PYTHON_AUTOMAT_VERSION = 20.2.0 +PYTHON_AUTOMAT_SOURCE = Automat-$(PYTHON_AUTOMAT_VERSION).tar.gz +PYTHON_AUTOMAT_SITE = https://files.pythonhosted.org/packages/80/c5/82c63bad570f4ef745cc5c2f0713c8eddcd07153b4bee7f72a8dc9f9384b +PYTHON_AUTOMAT_SETUP_TYPE = setuptools +PYTHON_AUTOMAT_LICENSE = MIT +PYTHON_AUTOMAT_LICENSE_FILES = LICENSE +PYTHON_AUTOMAT_DEPENDENCIES = host-python-m2r host-python-setuptools-scm + +$(eval $(python-package)) diff --git a/package/python-avro/0002-drop-install-time-linting-and-imports-sorting.patch b/package/python-avro/0002-drop-install-time-linting-and-imports-sorting.patch new file mode 100644 index 00000000..41231e92 --- /dev/null +++ b/package/python-avro/0002-drop-install-time-linting-and-imports-sorting.patch @@ -0,0 +1,46 @@ +From 3446a4af8474cd863efddeae7f3e5dd3f9b8e25e Mon Sep 17 00:00:00 2001 +From: Titouan Christophe +Date: Mon, 17 Feb 2020 15:12:13 +0100 +Subject: [PATCH] drop install time linting and imports sorting + +Since the 1.9.2 release, the setup script is also performing code linting +tasks, which require additional python libraries. + +These linting tasks are not needed anyway, since they are intended to prepare +the code for distribution, but the Buildroot package is already using a +distributed version. We therefore simply remove them. + +Signed-off-by: Titouan Christophe +--- + setup.cfg | 2 -- + setup.py | 1 - + 2 files changed, 3 deletions(-) + +diff --git a/setup.cfg b/setup.cfg +index 7b5de18..d46a36e 100644 +--- a/setup.cfg ++++ b/setup.cfg +@@ -25,8 +25,6 @@ package_dir = + include_package_data = true + packages = avro + setup_requires = +- isort +- pycodestyle + install_requires = + zip_safe = true + scripts = +diff --git a/setup.py b/setup.py +index f6297bb..91d3287 100755 +--- a/setup.py ++++ b/setup.py +@@ -164,7 +164,6 @@ def main(): + setuptools.setup(cmdclass={ + "clean": CleanCommand, + "generate_interop_data": GenerateInteropDataCommand, +- "lint": LintCommand, + }) + + +-- +2.24.1 + diff --git a/package/python-avro/Config.in b/package/python-avro/Config.in new file mode 100644 index 00000000..e1d7fc83 --- /dev/null +++ b/package/python-avro/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_PYTHON_AVRO + bool "python-avro" + depends on BR2_PACKAGE_PYTHON3 + help + Select this option to install the Avro Python3 language + bindings, and the `avro` command line tool + + Apache Avro is a data serialization system. + Avro provides: + - Rich data structures. + - A compact, fast, binary data format. + - A container file, to store persistent data. + - Remote procedure call (RPC). + - Simple integration with dynamic languages. + - Code generation is not required to read or write data + files nor to use or implement RPC protocols. + - Code generation as an optional optimization, + only worth implementing for statically typed languages. + + http://avro.apache.org/ diff --git a/package/python-avro/python-avro.hash b/package/python-avro/python-avro.hash new file mode 100644 index 00000000..2428be96 --- /dev/null +++ b/package/python-avro/python-avro.hash @@ -0,0 +1,5 @@ +# From https://downloads.apache.org/avro/avro-1.10.0/py3/avro-python3-1.10.0.tar.gz.sha512 +sha512 fb41f9227d2410c29cde10d7573aebbc142c2bf3f5945a1aaffdeac8b4b5ec690b0befdfc813a8762289dbbb7fc4e1be1564ba0c69d03092b84d8e938d6156f6 avro-python3-1.10.0.tar.gz + +# License files +sha256 c79a7fea0e3cac04cd43f20e7b648e5a0ff8fa5344e644b0ee09ca1162b62747 avro/LICENSE diff --git a/package/python-avro/python-avro.mk b/package/python-avro/python-avro.mk new file mode 100644 index 00000000..dd6008b1 --- /dev/null +++ b/package/python-avro/python-avro.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-avro +# +################################################################################ + +PYTHON_AVRO_VERSION = $(AVRO_C_VERSION) +PYTHON_AVRO_SITE = https://www-eu.apache.org/dist/avro/avro-$(PYTHON_AVRO_VERSION)/py3 +PYTHON_AVRO_SOURCE = avro-python3-$(PYTHON_AVRO_VERSION).tar.gz +PYTHON_AVRO_LICENSE = Apache-2.0 +PYTHON_AVRO_LICENSE_FILES = avro/LICENSE +PYTHON_AVRO_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-babel/Config.in b/package/python-babel/Config.in new file mode 100644 index 00000000..1a22b83f --- /dev/null +++ b/package/python-babel/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_BABEL + bool "python-babel" + select BR2_PACKAGE_PYTHON_PYTZ # runtime + help + A collection of tools for internationalizing Python + applications. + + http://babel.pocoo.org/en/latest/ diff --git a/package/python-babel/python-babel.hash b/package/python-babel/python-babel.hash new file mode 100644 index 00000000..95f9d725 --- /dev/null +++ b/package/python-babel/python-babel.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/babel/json +md5 83c158b7dae9135750a7cf204e6e2eea Babel-2.7.0.tar.gz +sha256 e86135ae101e31e2c8ec20a4e0c5220f4eed12487d5cf3f78be7e98d3a57fc28 Babel-2.7.0.tar.gz +# Locally computed sha256 checksums +sha256 5a0df5d46e8cb14bd5d4c2cd77338b22f681fe88bd34236626b1a3ae3b50101a LICENSE diff --git a/package/python-babel/python-babel.mk b/package/python-babel/python-babel.mk new file mode 100644 index 00000000..cf0a8ab1 --- /dev/null +++ b/package/python-babel/python-babel.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-babel +# +################################################################################ + +PYTHON_BABEL_VERSION = 2.7.0 +PYTHON_BABEL_SOURCE = Babel-$(PYTHON_BABEL_VERSION).tar.gz +PYTHON_BABEL_SITE = https://files.pythonhosted.org/packages/bd/78/9fb975cbb3f4b136de2cd4b5e5ce4a3341169ebf4c6c03630996d05428f1 +PYTHON_BABEL_SETUP_TYPE = setuptools +PYTHON_BABEL_LICENSE = BSD-3-Clause +PYTHON_BABEL_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-backcall/Config.in b/package/python-backcall/Config.in new file mode 100644 index 00000000..7b4345ca --- /dev/null +++ b/package/python-backcall/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_BACKCALL + bool "python-backcall" + help + Specifications for callback functions passed in to an API. + + https://github.com/takluyver/backcall diff --git a/package/python-backcall/python-backcall.hash b/package/python-backcall/python-backcall.hash new file mode 100644 index 00000000..063b4bed --- /dev/null +++ b/package/python-backcall/python-backcall.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/backcall/json +md5 1f4c9a370c78743406296f48e56e8821 backcall-0.2.0.tar.gz +sha256 5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e backcall-0.2.0.tar.gz +# Locally computed sha256 checksums +sha256 d422f8ce77312733c07f5fec8ccbe61d58d539774f7a66f37e4bc54740d86020 LICENSE diff --git a/package/python-backcall/python-backcall.mk b/package/python-backcall/python-backcall.mk new file mode 100644 index 00000000..2ead3421 --- /dev/null +++ b/package/python-backcall/python-backcall.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-backcall +# +################################################################################ + +PYTHON_BACKCALL_VERSION = 0.2.0 +PYTHON_BACKCALL_SOURCE = backcall-$(PYTHON_BACKCALL_VERSION).tar.gz +PYTHON_BACKCALL_SITE = https://files.pythonhosted.org/packages/a2/40/764a663805d84deee23043e1426a9175567db89c8b3287b5c2ad9f71aa93 +PYTHON_BACKCALL_SETUP_TYPE = distutils +PYTHON_BACKCALL_LICENSE = BSD-3-Clause +PYTHON_BACKCALL_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-backports-abc/Config.in b/package/python-backports-abc/Config.in new file mode 100644 index 00000000..43566279 --- /dev/null +++ b/package/python-backports-abc/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_BACKPORTS_ABC + bool "python-backports-abc" + depends on BR2_PACKAGE_PYTHON + help + A backport of recent additions to the 'collections.abc' + module. + + https://pypi.python.org/pypi/backports_abc diff --git a/package/python-backports-abc/python-backports-abc.hash b/package/python-backports-abc/python-backports-abc.hash new file mode 100644 index 00000000..4f4c9bd1 --- /dev/null +++ b/package/python-backports-abc/python-backports-abc.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/backports_abc/json +md5 7d1936ec183a3586290adf60f6f96764 backports_abc-0.5.tar.gz +# Locally computed +sha256 033be54514a03e255df75c5aee8f9e672f663f93abb723444caec8fe43437bde backports_abc-0.5.tar.gz +sha256 0a4f3b38055f50f047a42521568fa6ddb9a5976c2884f6ae138796d0f71150ca LICENSE diff --git a/package/python-backports-abc/python-backports-abc.mk b/package/python-backports-abc/python-backports-abc.mk new file mode 100644 index 00000000..66cea170 --- /dev/null +++ b/package/python-backports-abc/python-backports-abc.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-backports-abc +# +################################################################################ + +PYTHON_BACKPORTS_ABC_VERSION = 0.5 +PYTHON_BACKPORTS_ABC_SOURCE = backports_abc-$(PYTHON_BACKPORTS_ABC_VERSION).tar.gz +PYTHON_BACKPORTS_ABC_SITE = https://pypi.python.org/packages/68/3c/1317a9113c377d1e33711ca8de1e80afbaf4a3c950dd0edfaf61f9bfe6d8 +PYTHON_BACKPORTS_ABC_LICENSE = Python-2.0 +PYTHON_BACKPORTS_ABC_LICENSE_FILES = LICENSE +PYTHON_BACKPORTS_ABC_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-backports-functools-lru-cache/Config.in b/package/python-backports-functools-lru-cache/Config.in new file mode 100644 index 00000000..a5b7771e --- /dev/null +++ b/package/python-backports-functools-lru-cache/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_BACKPORTS_FUNCTOOLS_LRU_CACHE + bool "python-backports-functools-lru-cache" + depends on BR2_PACKAGE_PYTHON + help + Backport of functools.lru_cache from Python 3.3 + + https://github.com/jaraco/backports.functools_lru_cache diff --git a/package/python-backports-functools-lru-cache/python-backports-functools-lru-cache.hash b/package/python-backports-functools-lru-cache/python-backports-functools-lru-cache.hash new file mode 100644 index 00000000..3db4aec1 --- /dev/null +++ b/package/python-backports-functools-lru-cache/python-backports-functools-lru-cache.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/backports.functools_lru_cache/json +md5 20f53f54cd3f04b3346ce75a54959754 backports.functools_lru_cache-1.5.tar.gz +sha256 9d98697f088eb1b0fa451391f91afb5e3ebde16bbdb272819fd091151fda4f1a backports.functools_lru_cache-1.5.tar.gz +# Localy computed sha256 checksumms +sha256 a55e2ffe9b44998e621d51d8c094bed09acc4b5236ee73d7df395a33ba3c18fd LICENSE diff --git a/package/python-backports-functools-lru-cache/python-backports-functools-lru-cache.mk b/package/python-backports-functools-lru-cache/python-backports-functools-lru-cache.mk new file mode 100644 index 00000000..334d6d8c --- /dev/null +++ b/package/python-backports-functools-lru-cache/python-backports-functools-lru-cache.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-backports-functools-lru-cache +# +################################################################################ + +PYTHON_BACKPORTS_FUNCTOOLS_LRU_CACHE_VERSION = 1.5 +PYTHON_BACKPORTS_FUNCTOOLS_LRU_CACHE_SOURCE = backports.functools_lru_cache-$(PYTHON_BACKPORTS_FUNCTOOLS_LRU_CACHE_VERSION).tar.gz +PYTHON_BACKPORTS_FUNCTOOLS_LRU_CACHE_SITE = https://files.pythonhosted.org/packages/57/d4/156eb5fbb08d2e85ab0a632e2bebdad355798dece07d4752f66a8d02d1ea +PYTHON_BACKPORTS_FUNCTOOLS_LRU_CACHE_SETUP_TYPE = setuptools +PYTHON_BACKPORTS_FUNCTOOLS_LRU_CACHE_DEPENDENCIES = host-python-setuptools-scm +PYTHON_BACKPORTS_FUNCTOOLS_LRU_CACHE_LICENSE = MIT +PYTHON_BACKPORTS_FUNCTOOLS_LRU_CACHE_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-backports-shutil-get-terminal-size/Config.in b/package/python-backports-shutil-get-terminal-size/Config.in new file mode 100644 index 00000000..392e05a2 --- /dev/null +++ b/package/python-backports-shutil-get-terminal-size/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_BACKPORTS_SHUTIL_GET_TERMINAL_SIZE + bool "python-backports-shutil-get-terminal-size" + depends on BR2_PACKAGE_PYTHON + help + A backport of the get_terminal_size function from Python + 3.3's shutil. + + https://pypi.python.org/pypi/backports.shutil_get_terminal_size diff --git a/package/python-backports-shutil-get-terminal-size/python-backports-shutil-get-terminal-size.hash b/package/python-backports-shutil-get-terminal-size/python-backports-shutil-get-terminal-size.hash new file mode 100644 index 00000000..40883a4e --- /dev/null +++ b/package/python-backports-shutil-get-terminal-size/python-backports-shutil-get-terminal-size.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/backports.shutil_get_terminal_size/json +md5 03267762480bd86b50580dc19dff3c66 backports.shutil_get_terminal_size-1.0.0.tar.gz +# Locally computed +sha256 713e7a8228ae80341c70586d1cc0a8caa5207346927e23d09dcbcaf18eadec80 backports.shutil_get_terminal_size-1.0.0.tar.gz +sha256 9edd99f8c339cddbfe36a9707e671fccf245b3e50b80eec0877dccec87a2dfe4 LICENSE diff --git a/package/python-backports-shutil-get-terminal-size/python-backports-shutil-get-terminal-size.mk b/package/python-backports-shutil-get-terminal-size/python-backports-shutil-get-terminal-size.mk new file mode 100644 index 00000000..7c24b196 --- /dev/null +++ b/package/python-backports-shutil-get-terminal-size/python-backports-shutil-get-terminal-size.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-backports-shutil-get-terminal-size +# +################################################################################ + +PYTHON_BACKPORTS_SHUTIL_GET_TERMINAL_SIZE_VERSION = 1.0.0 +PYTHON_BACKPORTS_SHUTIL_GET_TERMINAL_SIZE_SOURCE = backports.shutil_get_terminal_size-$(PYTHON_BACKPORTS_SHUTIL_GET_TERMINAL_SIZE_VERSION).tar.gz +PYTHON_BACKPORTS_SHUTIL_GET_TERMINAL_SIZE_SITE = https://pypi.python.org/packages/ec/9c/368086faa9c016efce5da3e0e13ba392c9db79e3ab740b763fe28620b18b +PYTHON_BACKPORTS_SHUTIL_GET_TERMINAL_SIZE_SETUP_TYPE = setuptools +PYTHON_BACKPORTS_SHUTIL_GET_TERMINAL_SIZE_LICENSE = MIT +PYTHON_BACKPORTS_SHUTIL_GET_TERMINAL_SIZE_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-backports-ssl-match-hostname/Config.in b/package/python-backports-ssl-match-hostname/Config.in new file mode 100644 index 00000000..8e55191a --- /dev/null +++ b/package/python-backports-ssl-match-hostname/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_BACKPORTS_SSL_MATCH_HOSTNAME + bool "python-backports-ssl-match-hostname" + depends on BR2_PACKAGE_PYTHON + help + The ssl.match_hostname() function from Python 3.5. + + http://bitbucket.org/brandon/backports.ssl_match_hostname diff --git a/package/python-backports-ssl-match-hostname/python-backports-ssl-match-hostname.hash b/package/python-backports-ssl-match-hostname/python-backports-ssl-match-hostname.hash new file mode 100644 index 00000000..145174cd --- /dev/null +++ b/package/python-backports-ssl-match-hostname/python-backports-ssl-match-hostname.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/backports.ssl_match_hostname/json +md5 32d2f593af01a046bec3d2f5181a420a backports.ssl_match_hostname-3.7.0.1.tar.gz +sha256 bb82e60f9fbf4c080eabd957c39f0641f0fc247d9a16e31e26d594d8f42b9fd2 backports.ssl_match_hostname-3.7.0.1.tar.gz +# Locally computed sha256 checksums +sha256 bfc8a75a4b9aec224aa7973c0c9d7cc0134bdcbf8eefd008936b58554d66e97e LICENSE.txt diff --git a/package/python-backports-ssl-match-hostname/python-backports-ssl-match-hostname.mk b/package/python-backports-ssl-match-hostname/python-backports-ssl-match-hostname.mk new file mode 100644 index 00000000..30096166 --- /dev/null +++ b/package/python-backports-ssl-match-hostname/python-backports-ssl-match-hostname.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-backports-ssl-match-hostname +# +################################################################################ + +PYTHON_BACKPORTS_SSL_MATCH_HOSTNAME_VERSION = 3.7.0.1 +PYTHON_BACKPORTS_SSL_MATCH_HOSTNAME_SOURCE = backports.ssl_match_hostname-$(PYTHON_BACKPORTS_SSL_MATCH_HOSTNAME_VERSION).tar.gz +PYTHON_BACKPORTS_SSL_MATCH_HOSTNAME_SITE = https://files.pythonhosted.org/packages/ff/2b/8265224812912bc5b7a607c44bf7b027554e1b9775e9ee0de8032e3de4b2 +PYTHON_BACKPORTS_SSL_MATCH_HOSTNAME_SETUP_TYPE = distutils +PYTHON_BACKPORTS_SSL_MATCH_HOSTNAME_LICENSE = Python-2.0 +PYTHON_BACKPORTS_SSL_MATCH_HOSTNAME_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-bcrypt/Config.in b/package/python-bcrypt/Config.in new file mode 100644 index 00000000..4fa6c31a --- /dev/null +++ b/package/python-bcrypt/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_BCRYPT + bool "python-bcrypt" + select BR2_PACKAGE_PYTHON_CFFI # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + help + Modern password hashing for your software and your servers. + + https://github.com/pyca/bcrypt/ diff --git a/package/python-bcrypt/python-bcrypt.hash b/package/python-bcrypt/python-bcrypt.hash new file mode 100644 index 00000000..a9c070f2 --- /dev/null +++ b/package/python-bcrypt/python-bcrypt.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/bcrypt/json +md5 5d6f93b575ce52470af37a8e7dce76fe bcrypt-3.1.7.tar.gz +sha256 0b0069c752ec14172c5f78208f1863d7ad6755a6fae6fe76ec2c80d13be41e42 bcrypt-3.1.7.tar.gz +# Locally computed sha256 checksums +sha256 8173d5c29b4f956d532781d2b86e4e30f83e6b7878dce18c919451d6ba707c90 LICENSE diff --git a/package/python-bcrypt/python-bcrypt.mk b/package/python-bcrypt/python-bcrypt.mk new file mode 100644 index 00000000..381d0034 --- /dev/null +++ b/package/python-bcrypt/python-bcrypt.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-bcrypt +# +################################################################################ + +PYTHON_BCRYPT_VERSION = 3.1.7 +PYTHON_BCRYPT_SOURCE = bcrypt-$(PYTHON_BCRYPT_VERSION).tar.gz +PYTHON_BCRYPT_SITE = https://files.pythonhosted.org/packages/fa/aa/025a3ab62469b5167bc397837c9ffc486c42a97ef12ceaa6699d8f5a5416 +PYTHON_BCRYPT_SETUP_TYPE = setuptools +PYTHON_BCRYPT_LICENSE = Apache-2.0 +PYTHON_BCRYPT_LICENSE_FILES = LICENSE +PYTHON_BCRYPT_DEPENDENCIES = host-python-cffi + +$(eval $(python-package)) diff --git a/package/python-beautifulsoup4/Config.in b/package/python-beautifulsoup4/Config.in new file mode 100644 index 00000000..eb7d2ba6 --- /dev/null +++ b/package/python-beautifulsoup4/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PYTHON_BEAUTIFULSOUP4 + bool "python-beautifulsoup4" + select BR2_PACKAGE_PYTHON_SOUPSIEVE # runtime + help + Beautiful Soup is a Python library for pulling data out of + HTML and XML files. It works with your favorite parser to + provide idiomatic ways of navigating, searching, and + modifying the parse tree. It commonly saves programmers + hours or days of work. + + http://www.crummy.com/software/BeautifulSoup/bs4/ diff --git a/package/python-beautifulsoup4/python-beautifulsoup4.hash b/package/python-beautifulsoup4/python-beautifulsoup4.hash new file mode 100644 index 00000000..8b8c51de --- /dev/null +++ b/package/python-beautifulsoup4/python-beautifulsoup4.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/beautifulsoup4/json +md5 be03d778cf61cf6734a480e2010d6657 beautifulsoup4-4.8.1.tar.gz +sha256 6135db2ba678168c07950f9a16c4031822c6f4aec75a65e0a97bc5ca09789931 beautifulsoup4-4.8.1.tar.gz +# Locally computed sha256 checksums +sha256 a47ea51236098464fe0b4f559743590b533056d9e00f49ecbf80299fab47e231 COPYING.txt diff --git a/package/python-beautifulsoup4/python-beautifulsoup4.mk b/package/python-beautifulsoup4/python-beautifulsoup4.mk new file mode 100644 index 00000000..6364a366 --- /dev/null +++ b/package/python-beautifulsoup4/python-beautifulsoup4.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-beautifulsoup4 +# +################################################################################ + +PYTHON_BEAUTIFULSOUP4_VERSION = 4.8.1 +PYTHON_BEAUTIFULSOUP4_SOURCE = beautifulsoup4-$(PYTHON_BEAUTIFULSOUP4_VERSION).tar.gz +PYTHON_BEAUTIFULSOUP4_SITE = https://files.pythonhosted.org/packages/86/cd/495c68f0536dcd25f016e006731ba7be72e072280305ec52590012c1e6f2 +PYTHON_BEAUTIFULSOUP4_SETUP_TYPE = setuptools +PYTHON_BEAUTIFULSOUP4_LICENSE = MIT +PYTHON_BEAUTIFULSOUP4_LICENSE_FILES = COPYING.txt + +$(eval $(python-package)) diff --git a/package/python-bitstring/Config.in b/package/python-bitstring/Config.in new file mode 100644 index 00000000..93d76825 --- /dev/null +++ b/package/python-bitstring/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_BITSTRING + bool "python-bitstring" + help + Simple construction, analysis and modification of binary data. + + https://github.com/scott-griffiths/bitstring diff --git a/package/python-bitstring/python-bitstring.hash b/package/python-bitstring/python-bitstring.hash new file mode 100644 index 00000000..04e49146 --- /dev/null +++ b/package/python-bitstring/python-bitstring.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/bitstring/json +md5 18661a3e5c47c59bd926dd0fefae0baa bitstring-3.1.7.tar.gz +sha256 fdf3eb72b229d2864fb507f8f42b1b2c57af7ce5fec035972f9566de440a864a bitstring-3.1.7.tar.gz +# Locally computed sha256 checksums +sha256 ea3c0e2288994d3dfeaac0fd2163f2cf5f9671c3ae70a9e9d563795e28cfb0b9 LICENSE diff --git a/package/python-bitstring/python-bitstring.mk b/package/python-bitstring/python-bitstring.mk new file mode 100644 index 00000000..c3699341 --- /dev/null +++ b/package/python-bitstring/python-bitstring.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-bitstring +# +################################################################################ + +PYTHON_BITSTRING_VERSION = 3.1.7 +PYTHON_BITSTRING_SOURCE = bitstring-$(PYTHON_BITSTRING_VERSION).tar.gz +PYTHON_BITSTRING_SITE = https://files.pythonhosted.org/packages/c3/fc/ffac2c199d2efe1ec5111f55efeb78f5f2972456df6939fea849f103f9f5 +PYTHON_BITSTRING_SETUP_TYPE = distutils +PYTHON_BITSTRING_LICENSE = MIT +PYTHON_BITSTRING_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-bleak/Config.in b/package/python-bleak/Config.in new file mode 100644 index 00000000..60153618 --- /dev/null +++ b/package/python-bleak/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_BLEAK + bool "python-bleak" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_TXDBUS # runtime + help + Bluetooth Low Energy platform Agnostic Klient. + + https://github.com/hbldh/bleak diff --git a/package/python-bleak/python-bleak.hash b/package/python-bleak/python-bleak.hash new file mode 100644 index 00000000..9506822c --- /dev/null +++ b/package/python-bleak/python-bleak.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/bleak/json +md5 e891b33804b69f0247eb770ca27fa0d5 bleak-0.10.0.tar.gz +sha256 5c3a873965f2910865895e572e7a4f10533d6e150e6ba17936397426bf8d1eee bleak-0.10.0.tar.gz +# Locally computed sha256 checksums +sha256 c4029a2b63b3824ab68be841f414addbdde20cb79cdbe272fa80c0b2abe65374 LICENSE diff --git a/package/python-bleak/python-bleak.mk b/package/python-bleak/python-bleak.mk new file mode 100644 index 00000000..040d64ed --- /dev/null +++ b/package/python-bleak/python-bleak.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-bleak +# +################################################################################ + +PYTHON_BLEAK_VERSION = 0.10.0 +PYTHON_BLEAK_SOURCE = bleak-$(PYTHON_BLEAK_VERSION).tar.gz +PYTHON_BLEAK_SITE = https://files.pythonhosted.org/packages/80/37/c8c88709e4f1ca4636bf11c96d1ec046d7426cd02670ae80a3542280558b +PYTHON_BLEAK_SETUP_TYPE = setuptools +PYTHON_BLEAK_LICENSE = MIT +PYTHON_BLEAK_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-bluezero/Config.in b/package/python-bluezero/Config.in new file mode 100644 index 00000000..c391bfa8 --- /dev/null +++ b/package/python-bluezero/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_PYTHON_BLUEZERO + bool "python-bluezero" + depends on BR2_PACKAGE_GOBJECT_INTROSPECTION_ARCH_SUPPORTS # python-gobject -> gobject-introspection + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # python-gobject -> gobject-introspection + depends on BR2_TOOLCHAIN_USES_GLIBC # python-gobject -> gobject-introspection + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_DBUS # runtime + select BR2_PACKAGE_DBUS_PYTHON # runtime + select BR2_PACKAGE_PYTHON_GOBJECT # runtime + help + Python library for Bluetooth Low Energy (BLE) on Linux. + + https://github.com/ukBaz/python-bluezero + +comment "python-bluezero needs a glibc toolchain, gcc >= 4.9" + depends on BR2_PACKAGE_PYTHON3 + depends on BR2_PACKAGE_GOBJECT_INTROSPECTION_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_USES_GLIBC || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/python-bluezero/python-bluezero.hash b/package/python-bluezero/python-bluezero.hash new file mode 100644 index 00000000..d0df83c4 --- /dev/null +++ b/package/python-bluezero/python-bluezero.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/bluezero/json +md5 4004c165f762029c2139f31c269a7531 bluezero-0.5.0.tar.gz +sha256 d9562a2d107abc918ffdabd4646039c15c54ca1fca0cec91aa45ba6135d2d0b1 bluezero-0.5.0.tar.gz +# Locally computed sha256 checksums +sha256 59319e80b4caa94ace4817c9f84aa16abc9d4d2b5f7866251b5fda92e87ccdef LICENSE diff --git a/package/python-bluezero/python-bluezero.mk b/package/python-bluezero/python-bluezero.mk new file mode 100644 index 00000000..27e11efc --- /dev/null +++ b/package/python-bluezero/python-bluezero.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-bluezero +# +################################################################################ + +PYTHON_BLUEZERO_VERSION = 0.5.0 +PYTHON_BLUEZERO_SOURCE = bluezero-$(PYTHON_BLUEZERO_VERSION).tar.gz +PYTHON_BLUEZERO_SITE = https://files.pythonhosted.org/packages/90/63/67c56cebe6f741b190f047531810911cfb528e9c0ec6db8d4c911808ba32 +PYTHON_BLUEZERO_SETUP_TYPE = setuptools +PYTHON_BLUEZERO_LICENSE = MIT +PYTHON_BLUEZERO_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-boto3/Config.in b/package/python-boto3/Config.in new file mode 100644 index 00000000..67b14203 --- /dev/null +++ b/package/python-boto3/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_BOTO3 + bool "python-boto3" + select BR2_PACKAGE_PYTHON_BOTOCORE # runtime + select BR2_PACKAGE_PYTHON_JMESPATH # runtime + select BR2_PACKAGE_PYTHON_S3TRANSFER # runtime + help + The AWS SDK for Python. + + https://github.com/boto/boto3 diff --git a/package/python-boto3/python-boto3.hash b/package/python-boto3/python-boto3.hash new file mode 100644 index 00000000..6752a2cc --- /dev/null +++ b/package/python-boto3/python-boto3.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/boto3/json +md5 8cecdbf7ef6702837d7ddabaa3e39a89 boto3-1.16.50.tar.gz +sha256 4d502a842b81fdac4b950d3b88a5b9067ce118213b122b20f4192003cb067986 boto3-1.16.50.tar.gz +# Locally computed sha256 checksums +sha256 0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594 LICENSE diff --git a/package/python-boto3/python-boto3.mk b/package/python-boto3/python-boto3.mk new file mode 100644 index 00000000..a5c2b6ab --- /dev/null +++ b/package/python-boto3/python-boto3.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-boto3 +# +################################################################################ + +PYTHON_BOTO3_VERSION = 1.16.50 +PYTHON_BOTO3_SOURCE = boto3-$(PYTHON_BOTO3_VERSION).tar.gz +PYTHON_BOTO3_SITE = https://files.pythonhosted.org/packages/c8/c6/b4d9547a493ac2837f296f4a004dff6e7136cf6750d181769b8a61d63813 +PYTHON_BOTO3_SETUP_TYPE = setuptools +PYTHON_BOTO3_LICENSE = Apache-2.0 +PYTHON_BOTO3_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-botocore/Config.in b/package/python-botocore/Config.in new file mode 100644 index 00000000..f34d774f --- /dev/null +++ b/package/python-botocore/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_BOTOCORE + bool "python-botocore" + select BR2_PACKAGE_PYTHON_JMESPATH # runtime + select BR2_PACKAGE_PYTHON_DATEUTIL # runtime + select BR2_PACKAGE_PYTHON_URLLIB3 # runtime + help + Low-level, data-driven core of boto 3. + + https://github.com/boto/botocore diff --git a/package/python-botocore/python-botocore.hash b/package/python-botocore/python-botocore.hash new file mode 100644 index 00000000..afaac12b --- /dev/null +++ b/package/python-botocore/python-botocore.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/botocore/json +md5 870be84c9b418430ad9d0cb5640e76ef botocore-1.12.210.tar.gz +sha256 b954c596f8bdf31d5fdf1eff8a2296bde8094e1e22961a79b83bb62ddeba8a49 botocore-1.19.48.tar.gz +# Locally computed sha256 checksums +sha256 0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594 LICENSE.txt diff --git a/package/python-botocore/python-botocore.mk b/package/python-botocore/python-botocore.mk new file mode 100644 index 00000000..76c59d0a --- /dev/null +++ b/package/python-botocore/python-botocore.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-botocore +# +################################################################################ + +PYTHON_BOTOCORE_VERSION = 1.19.48 +PYTHON_BOTOCORE_SOURCE = botocore-$(PYTHON_BOTOCORE_VERSION).tar.gz +PYTHON_BOTOCORE_SITE = https://files.pythonhosted.org/packages/35/73/c6fe3fafb74cc86a2a9ddf565a2b8956777e668c6248927e6d76b66f61a4 +PYTHON_BOTOCORE_SETUP_TYPE = setuptools +PYTHON_BOTOCORE_LICENSE = Apache-2.0 +PYTHON_BOTOCORE_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-bottle/Config.in b/package/python-bottle/Config.in new file mode 100644 index 00000000..5e37f6e3 --- /dev/null +++ b/package/python-bottle/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_BOTTLE + bool "python-bottle" + help + Bottle is a fast, simple and lightweight WSGI micro + web-framework for Python. It is distributed as a single file + module and has no dependencies other than the Python + Standard Library. + + http://bottlepy.org diff --git a/package/python-bottle/python-bottle.hash b/package/python-bottle/python-bottle.hash new file mode 100644 index 00000000..7dcaac8d --- /dev/null +++ b/package/python-bottle/python-bottle.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/bottle/json +md5 50075544706b5e662a3fbd9a98e24b07 bottle-0.12.19.tar.gz +sha256 a9d73ffcbc6a1345ca2d7949638db46349f5b2b77dac65d6494d45c23628da2c bottle-0.12.19.tar.gz +# Locally computed sha256 checksums +sha256 d0e7211f1c3c1a1c56f39d18bcb07f27f480c8a9552617756dda3a335933b8a6 LICENSE diff --git a/package/python-bottle/python-bottle.mk b/package/python-bottle/python-bottle.mk new file mode 100644 index 00000000..d19a439f --- /dev/null +++ b/package/python-bottle/python-bottle.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-bottle +# +################################################################################ + +PYTHON_BOTTLE_VERSION = 0.12.19 +PYTHON_BOTTLE_SOURCE = bottle-$(PYTHON_BOTTLE_VERSION).tar.gz +PYTHON_BOTTLE_SITE = https://files.pythonhosted.org/packages/ea/80/3d2dca1562ffa1929017c74635b4cb3645a352588de89e90d0bb53af3317 +PYTHON_BOTTLE_LICENSE = MIT +PYTHON_BOTTLE_LICENSE_FILES = LICENSE +PYTHON_BOTTLE_CPE_ID_VENDOR = bottlepy +PYTHON_BOTTLE_CPE_ID_PRODUCT = bottle +PYTHON_BOTTLE_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-brotli/Config.in b/package/python-brotli/Config.in new file mode 100644 index 00000000..1c09c268 --- /dev/null +++ b/package/python-brotli/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_BROTLI + bool "python-brotli" + depends on BR2_INSTALL_LIBSTDCPP + help + Python bindings for the Brotli compression library. + + https://github.com/google/brotli diff --git a/package/python-brotli/python-brotli.hash b/package/python-brotli/python-brotli.hash new file mode 100644 index 00000000..de4964dd --- /dev/null +++ b/package/python-brotli/python-brotli.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/brotli/json +md5 08f1f098697c64aa4596468b556d0c94 Brotli-1.0.9.zip +sha256 4d1b810aa0ed773f81dceda2cc7b403d01057458730e309856356d4ef4188438 Brotli-1.0.9.zip +# Locally computed sha256 checksums +sha256 3d180008e36922a4e8daec11c34c7af264fed5962d07924aea928c38e8663c94 LICENSE diff --git a/package/python-brotli/python-brotli.mk b/package/python-brotli/python-brotli.mk new file mode 100644 index 00000000..ff78e6ab --- /dev/null +++ b/package/python-brotli/python-brotli.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# python-brotli +# +################################################################################ + +PYTHON_BROTLI_VERSION = 1.0.9 +PYTHON_BROTLI_SOURCE = Brotli-$(PYTHON_BROTLI_VERSION).zip +PYTHON_BROTLI_SITE = https://files.pythonhosted.org/packages/2a/18/70c32fe9357f3eea18598b23aa9ed29b1711c3001835f7cf99a9818985d0 +PYTHON_BROTLI_SETUP_TYPE = setuptools +PYTHON_BROTLI_LICENSE = MIT +PYTHON_BROTLI_LICENSE_FILES = LICENSE + +PYTHON_BROTLI_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_68485),y) +PYTHON_BROTLI_CFLAGS += -O0 +endif + +PYTHON_BROTLI_ENV = CFLAGS="$(PYTHON_BROTLI_CFLAGS)" + +define PYTHON_BROTLI_EXTRACT_CMDS + $(UNZIP) -d $(@D) $(PYTHON_BROTLI_DL_DIR)/$(PYTHON_BROTLI_SOURCE) + mv $(@D)/Brotli-$(PYTHON_BROTLI_VERSION)/* $(@D) + $(RM) -r $(@D)/Brotli-$(PYTHON_BROTLI_VERSION) +endef + +$(eval $(python-package)) diff --git a/package/python-bsdiff4/Config.in b/package/python-bsdiff4/Config.in new file mode 100644 index 00000000..a383cda0 --- /dev/null +++ b/package/python-bsdiff4/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_BSDIFF4 + bool "python-bsdiff4" + select BR2_PACKAGE_PYTHON_BZIP2 if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_BZIP2 if BR2_PACKAGE_PYTHON3 # runtime + help + binary diff and patch using the BSDIFF4-format. + + https://github.com/ilanschnell/bsdiff4 diff --git a/package/python-bsdiff4/python-bsdiff4.hash b/package/python-bsdiff4/python-bsdiff4.hash new file mode 100644 index 00000000..e64e817f --- /dev/null +++ b/package/python-bsdiff4/python-bsdiff4.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/bsdiff4/json +md5 a0d047e91429ce67a3b0231facf41169 bsdiff4-1.2.0.tar.gz +sha256 3c2f7f5504f41a54d238b54b00b4544d0eb4276179edabf02b9d00415a03cc9d bsdiff4-1.2.0.tar.gz +# Locally computed sha256 +sha256 c6c921c90383f1c43beb53c49a652d28309a410a7c394c729fd8870271451cf0 LICENSE diff --git a/package/python-bsdiff4/python-bsdiff4.mk b/package/python-bsdiff4/python-bsdiff4.mk new file mode 100644 index 00000000..3b789ac9 --- /dev/null +++ b/package/python-bsdiff4/python-bsdiff4.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-bsdiff4 +# +################################################################################ + +PYTHON_BSDIFF4_VERSION = 1.2.0 +PYTHON_BSDIFF4_SOURCE = bsdiff4-$(PYTHON_BSDIFF4_VERSION).tar.gz +PYTHON_BSDIFF4_SITE = https://files.pythonhosted.org/packages/9b/ca/06cd939630ca78125c36489f92b52918980cbcfee2dcc0969411eb5ae8a8 +PYTHON_BSDIFF4_LICENSE = BSD-2-Clause, BSD-Protection (core.c) +PYTHON_BSDIFF4_LICENSE_FILES = LICENSE +PYTHON_BSDIFF4_CPE_ID_VENDOR = pypi +PYTHON_BSDIFF4_CPE_ID_PRODUCT = bsdiff4 +PYTHON_BSDIFF4_SETUP_TYPE = distutils + +$(eval $(python-package)) diff --git a/package/python-bunch/Config.in b/package/python-bunch/Config.in new file mode 100644 index 00000000..89eae742 --- /dev/null +++ b/package/python-bunch/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_BUNCH + bool "python-bunch" + help + A dot-accessible dictionary (a la JavaScript objects). + + http://github.com/dsc/bunch diff --git a/package/python-bunch/python-bunch.hash b/package/python-bunch/python-bunch.hash new file mode 100644 index 00000000..5cf2cece --- /dev/null +++ b/package/python-bunch/python-bunch.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/bunch/json +md5 0a829d64e95ed96defbcae2bf9061bb0 bunch-1.0.1.tar.gz +sha256 50c77a0fc0cb372dfe48b5e11937d5f70e743adbf42683f3a6d2857645a76aaa bunch-1.0.1.tar.gz +# Locally computed sha256 checksums +sha256 57ca95c92059c8380625192462979bd32994aae3fcdf902ff6eb1e467eeb0469 LICENSE.txt diff --git a/package/python-bunch/python-bunch.mk b/package/python-bunch/python-bunch.mk new file mode 100644 index 00000000..18fdc223 --- /dev/null +++ b/package/python-bunch/python-bunch.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-bunch +# +################################################################################ + +PYTHON_BUNCH_VERSION = 1.0.1 +PYTHON_BUNCH_SOURCE = bunch-$(PYTHON_BUNCH_VERSION).tar.gz +PYTHON_BUNCH_SITE = https://files.pythonhosted.org/packages/ef/bf/a4cf1779a4ffb4f610903fa08e15d1f4a8a2f4e3353a02afbe097c5bf4a8 +PYTHON_BUNCH_SETUP_TYPE = setuptools +PYTHON_BUNCH_LICENSE = MIT +PYTHON_BUNCH_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-cached-property/Config.in b/package/python-cached-property/Config.in new file mode 100644 index 00000000..83439733 --- /dev/null +++ b/package/python-cached-property/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_CACHED_PROPERTY + bool "python-cached-property" + help + A decorator for caching properties in classes. + + https://github.com/pydanny/cached-property diff --git a/package/python-cached-property/python-cached-property.hash b/package/python-cached-property/python-cached-property.hash new file mode 100644 index 00000000..cfe34ca1 --- /dev/null +++ b/package/python-cached-property/python-cached-property.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/cached-property/json +md5 4b6f3cd429da5f487f4ebf3242bb991f cached-property-1.5.1.tar.gz +sha256 9217a59f14a5682da7c4b8829deadbfc194ac22e9908ccf7c8820234e80a1504 cached-property-1.5.1.tar.gz +# Locally computed sha256 checksums +sha256 ba4756c8039b25b66e3c456cc5bf635aa528cf459b97ee1499d06684ccd89b9a LICENSE diff --git a/package/python-cached-property/python-cached-property.mk b/package/python-cached-property/python-cached-property.mk new file mode 100644 index 00000000..f83a1f18 --- /dev/null +++ b/package/python-cached-property/python-cached-property.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-cached-property +# +################################################################################ + +PYTHON_CACHED_PROPERTY_VERSION = 1.5.1 +PYTHON_CACHED_PROPERTY_SOURCE = cached-property-$(PYTHON_CACHED_PROPERTY_VERSION).tar.gz +PYTHON_CACHED_PROPERTY_SITE = https://files.pythonhosted.org/packages/57/8e/0698e10350a57d46b3bcfe8eff1d4181642fd1724073336079cb13c5cf7f +PYTHON_CACHED_PROPERTY_SETUP_TYPE = setuptools +PYTHON_CACHED_PROPERTY_LICENSE = BSD-3-Clause +PYTHON_CACHED_PROPERTY_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-can/Config.in b/package/python-can/Config.in new file mode 100644 index 00000000..3d06374c --- /dev/null +++ b/package/python-can/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_PYTHON_CAN + bool "python-can" + select BR2_PACKAGE_PYTHON_SETUPTOOLS # runtime + select BR2_PACKAGE_PYTHON_SQLITE if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_SQLITE if BR2_PACKAGE_PYTHON3 # runtime + select BR2_PACKAGE_PYTHON_TYPING if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON_AENUM # runtime + select BR2_PACKAGE_PYTHON_WRAPT # runtime + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 + help + This module provides controller area network support for + Python. + + https://github.com/hardbyte/python-can diff --git a/package/python-can/python-can.hash b/package/python-can/python-can.hash new file mode 100644 index 00000000..5330e589 --- /dev/null +++ b/package/python-can/python-can.hash @@ -0,0 +1,4 @@ +# sha256 from https://pypi.org/pypi/python-can +sha256 2d3c223b7adc4dd46ce258d4a33b7e0dbb6c339e002faa40ee4a69d5fdce9449 python-can-3.3.4.tar.gz +# Locally computed sha256 checksums +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 LICENSE.txt diff --git a/package/python-can/python-can.mk b/package/python-can/python-can.mk new file mode 100644 index 00000000..1ab813e2 --- /dev/null +++ b/package/python-can/python-can.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-can +# +################################################################################ + +PYTHON_CAN_VERSION = 3.3.4 +PYTHON_CAN_SITE = https://files.pythonhosted.org/packages/97/dd/5e5ae96db41ba57dde127e0600c3d324239ed692e167296c5fdb992cbf41 +PYTHON_CAN_SETUP_TYPE = setuptools +PYTHON_CAN_LICENSE = LGPL-3.0 +PYTHON_CAN_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-canopen/Config.in b/package/python-canopen/Config.in new file mode 100644 index 00000000..e36b8c76 --- /dev/null +++ b/package/python-canopen/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_CANOPEN + bool "python-canopen" + select BR2_PACKAGE_PYTHON_CAN # runtime + help + A Python implementation of the CANopen standard. The aim + of the project is to support the most common parts of the + CiA 301 standard in a Pythonic interface. + + https://github.com/christiansandberg/canopen diff --git a/package/python-canopen/python-canopen.hash b/package/python-canopen/python-canopen.hash new file mode 100644 index 00000000..e1a628a3 --- /dev/null +++ b/package/python-canopen/python-canopen.hash @@ -0,0 +1,4 @@ +# sha256 from https://pypi.org/pypi/canopen/json +sha256 4394770d528e93a48936138c4a7b37b5dff26d54f82a435ad9790cd1e43f55b9 canopen-1.0.0.tar.gz +# Locally computed sha256 checksums +sha256 0740d30978affcd91c0fc817b7cf942a332381bf0380fe17e60c6a0b377c6e0d LICENSE.txt diff --git a/package/python-canopen/python-canopen.mk b/package/python-canopen/python-canopen.mk new file mode 100644 index 00000000..fc328c69 --- /dev/null +++ b/package/python-canopen/python-canopen.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-canopen +# +################################################################################ + +PYTHON_CANOPEN_VERSION = 1.0.0 +PYTHON_CANOPEN_SOURCE = canopen-$(PYTHON_CANOPEN_VERSION).tar.gz +PYTHON_CANOPEN_SITE = https://files.pythonhosted.org/packages/1f/2b/55b6d82b3dcba184a01c6fe027df239953940e36a463cd24b71e67bd1f37 +PYTHON_CANOPEN_SETUP_TYPE = setuptools +PYTHON_CANOPEN_LICENSE = MIT +PYTHON_CANOPEN_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-cbor/Config.in b/package/python-cbor/Config.in new file mode 100644 index 00000000..403fab3f --- /dev/null +++ b/package/python-cbor/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_CBOR + bool "python-cbor" + help + RFC 7049 - Concise Binary Object Representation. + + https://pypi.python.org/pypi/cbor diff --git a/package/python-cbor/python-cbor.hash b/package/python-cbor/python-cbor.hash new file mode 100644 index 00000000..a47607d9 --- /dev/null +++ b/package/python-cbor/python-cbor.hash @@ -0,0 +1,3 @@ +# md5 from https://pypi.python.org/pypi/cbor/json, sha256 locally computed +md5 22b03b59784fd78cb6c27aa498af0db6 cbor-1.0.0.tar.gz +sha256 13225a262ddf5615cbd9fd55a76a0d53069d18b07d2e9f19c39e6acb8609bbb6 cbor-1.0.0.tar.gz diff --git a/package/python-cbor/python-cbor.mk b/package/python-cbor/python-cbor.mk new file mode 100644 index 00000000..32ca4594 --- /dev/null +++ b/package/python-cbor/python-cbor.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-cbor +# +################################################################################ + +PYTHON_CBOR_VERSION = 1.0.0 +PYTHON_CBOR_SOURCE = cbor-$(PYTHON_CBOR_VERSION).tar.gz +PYTHON_CBOR_SITE = https://pypi.python.org/packages/9b/99/01c6a987c920500189eb74a291bd3a388e6c7cf85736bb6b066d9833315e +PYTHON_CBOR_LICENSE = Apache +PYTHON_CBOR_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-cbor2/Config.in b/package/python-cbor2/Config.in new file mode 100644 index 00000000..ba9383f7 --- /dev/null +++ b/package/python-cbor2/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_CBOR2 + bool "python-cbor2" + help + Pure Python CBOR (de)serializer with extensive tag support. + + https://cbor2.readthedocs.io/ diff --git a/package/python-cbor2/python-cbor2.hash b/package/python-cbor2/python-cbor2.hash new file mode 100644 index 00000000..073d071a --- /dev/null +++ b/package/python-cbor2/python-cbor2.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/cbor2/json +md5 0940aa8bfd1a07f06a983bb6dc78f1ca cbor2-5.2.0.tar.gz +sha256 a33aa2e5534fd74401ac95686886e655e3b2ce6383b3f958199b6e70a87c94bf cbor2-5.2.0.tar.gz +# Locally computed sha256 checksums +sha256 a6afd126d8f545a15166a22f25fadff4b9fb4978bbdd17e97d97d950b66d2fef LICENSE.txt diff --git a/package/python-cbor2/python-cbor2.mk b/package/python-cbor2/python-cbor2.mk new file mode 100644 index 00000000..17639ccf --- /dev/null +++ b/package/python-cbor2/python-cbor2.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-cbor2 +# +################################################################################ + +PYTHON_CBOR2_VERSION = 5.2.0 +PYTHON_CBOR2_SOURCE = cbor2-$(PYTHON_CBOR2_VERSION).tar.gz +PYTHON_CBOR2_SITE = https://files.pythonhosted.org/packages/02/15/f4d7fb47753099fcd9d7f7c81920d422a3ab2e710400ec0f4a1b511b51ae +PYTHON_CBOR2_SETUP_TYPE = setuptools +PYTHON_CBOR2_LICENSE = MIT +PYTHON_CBOR2_LICENSE_FILES = LICENSE.txt +PYTHON_CBOR2_DEPENDENCIES = host-python-setuptools-scm + +$(eval $(python-package)) diff --git a/package/python-cchardet/Config.in b/package/python-cchardet/Config.in new file mode 100644 index 00000000..74153126 --- /dev/null +++ b/package/python-cchardet/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PYTHON_CCHARDET + bool "python-cchardet" + depends on BR2_INSTALL_LIBSTDCPP + help + cChardet is high speed universal character encoding + detector. + + https://github.com/PyYoshi/cChardet + +comment "python-cchardet needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/python-cchardet/python-cchardet.hash b/package/python-cchardet/python-cchardet.hash new file mode 100644 index 00000000..960801f8 --- /dev/null +++ b/package/python-cchardet/python-cchardet.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/cchardet/json +md5 ee884e2c7762e56e8a0600aa34ad4fa3 cchardet-2.1.6.tar.gz +sha256 b76afb2059ad69eab576949980a17413c1e9e5a5624abf9e43542d8853f146b3 cchardet-2.1.6.tar.gz +# Locally computed sha256 checksums +sha256 107a29ccdd2d778aa2df5462f85dddfa099059abd22e064e07ec2cc9bafc37cd COPYING diff --git a/package/python-cchardet/python-cchardet.mk b/package/python-cchardet/python-cchardet.mk new file mode 100644 index 00000000..78daf607 --- /dev/null +++ b/package/python-cchardet/python-cchardet.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-cchardet +# +################################################################################ + +PYTHON_CCHARDET_VERSION = 2.1.6 +PYTHON_CCHARDET_SOURCE = cchardet-$(PYTHON_CCHARDET_VERSION).tar.gz +PYTHON_CCHARDET_SITE = https://files.pythonhosted.org/packages/41/e6/2e2184a3bc887bfb6e6b97aef5e94af9b8de43806ce14b023ddbbcb0b30d +PYTHON_CCHARDET_SETUP_TYPE = setuptools +PYTHON_CCHARDET_LICENSE = MPL-1.1 +PYTHON_CCHARDET_LICENSE_FILES = COPYING + +$(eval $(python-package)) diff --git a/package/python-certifi/Config.in b/package/python-certifi/Config.in new file mode 100644 index 00000000..efa7a893 --- /dev/null +++ b/package/python-certifi/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_CERTIFI + bool "python-certifi" + help + Python package for providing Mozilla's CA Bundle. + + https://certifi.io/ diff --git a/package/python-certifi/python-certifi.hash b/package/python-certifi/python-certifi.hash new file mode 100644 index 00000000..76056725 --- /dev/null +++ b/package/python-certifi/python-certifi.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/certifi/json +md5 522f9abe26e5d603a668d812aa6accca certifi-2020.12.5.tar.gz +sha256 1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c certifi-2020.12.5.tar.gz +# Locally computed sha256 checksums +sha256 6a70a4bf6b010016d59a64b8ae4ad8dc7f5ef16f1fb453cc2ecd771c5a341131 LICENSE diff --git a/package/python-certifi/python-certifi.mk b/package/python-certifi/python-certifi.mk new file mode 100644 index 00000000..4e4cbfdc --- /dev/null +++ b/package/python-certifi/python-certifi.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-certifi +# +################################################################################ + +PYTHON_CERTIFI_VERSION = 2020.12.5 +PYTHON_CERTIFI_SOURCE = certifi-$(PYTHON_CERTIFI_VERSION).tar.gz +PYTHON_CERTIFI_SITE = https://files.pythonhosted.org/packages/06/a9/cd1fd8ee13f73a4d4f491ee219deeeae20afefa914dfb4c130cfc9dc397a +PYTHON_CERTIFI_SETUP_TYPE = setuptools +PYTHON_CERTIFI_LICENSE = ISC (Python code), MPL-2.0 (cacert.pem) +PYTHON_CERTIFI_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-cffi/Config.in b/package/python-cffi/Config.in new file mode 100644 index 00000000..bc9f6a29 --- /dev/null +++ b/package/python-cffi/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_CFFI + bool "python-cffi" + select BR2_PACKAGE_LIBFFI + select BR2_PACKAGE_PYTHON_PYCPARSER # runtime + help + This is the Foreign Function Interface for Python calling C + code. The aim of this project is to provide a convenient + and reliable way of calling C code from Python. + + https://pypi.python.org/pypi/cffi diff --git a/package/python-cffi/python-cffi.hash b/package/python-cffi/python-cffi.hash new file mode 100644 index 00000000..37676f26 --- /dev/null +++ b/package/python-cffi/python-cffi.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/cffi/json +md5 3cc2f1daf62dd66eda79b4d6281cebfc cffi-1.14.2.tar.gz +sha256 ae8f34d50af2c2154035984b8b5fc5d9ed63f32fe615646ab435b05b132ca91b cffi-1.14.2.tar.gz +# Locally computed sha256 checksums +sha256 04b80f5b077bbed68808cfebadeb5e3523f2a8c9a96495c587bd96df1eac2a33 LICENSE diff --git a/package/python-cffi/python-cffi.mk b/package/python-cffi/python-cffi.mk new file mode 100644 index 00000000..f882349f --- /dev/null +++ b/package/python-cffi/python-cffi.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# python-cffi +# +################################################################################ + +PYTHON_CFFI_VERSION = 1.14.2 +PYTHON_CFFI_SOURCE = cffi-$(PYTHON_CFFI_VERSION).tar.gz +PYTHON_CFFI_SITE = https://files.pythonhosted.org/packages/f7/09/88bbe20b76ca76be052c366fe77aa5e3cd6e5f932766e5597fecdd95b2a8 +PYTHON_CFFI_SETUP_TYPE = setuptools +PYTHON_CFFI_DEPENDENCIES = host-pkgconf libffi +PYTHON_CFFI_LICENSE = MIT +PYTHON_CFFI_LICENSE_FILES = LICENSE + +# This host package uses pkg-config to find libffi, so we have to +# provide the proper hints for pkg-config to behave properly for host +# packages. +HOST_PYTHON_CFFI_ENV = \ + PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 \ + PKG_CONFIG_ALLOW_SYSTEM_LIBS=1 \ + PKG_CONFIG="$(PKG_CONFIG_HOST_BINARY)" \ + PKG_CONFIG_SYSROOT_DIR="/" \ + PKG_CONFIG_LIBDIR="$(HOST_DIR)/lib/pkgconfig:$(HOST_DIR)/share/pkgconfig" +HOST_PYTHON_CFFI_DEPENDENCIES = host-pkgconf host-python-pycparser host-libffi + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-channels-redis/Config.in b/package/python-channels-redis/Config.in new file mode 100644 index 00000000..89466701 --- /dev/null +++ b/package/python-channels-redis/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_PYTHON_CHANNELS_REDIS + bool "python-channels-redis" + depends on BR2_INSTALL_LIBSTDCPP # python-channels -> python-daphne + depends on BR2_PACKAGE_PYTHON3 # python-channels + select BR2_PACKAGE_PYTHON_AIOREDIS # runtime + select BR2_PACKAGE_PYTHON_ASGIREF # runtime + select BR2_PACKAGE_PYTHON_CHANNELS # runtime + select BR2_PACKAGE_PYTHON_MSGPACK # runtime + help + A Django Channels channel layer that uses Redis as its + backing store, and supports both a single-server and + sharded configurations, as well as group support. + + http://github.com/django/channels_redis/ + +comment "python-channels-redis needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_PYTHON3 diff --git a/package/python-channels-redis/python-channels-redis.hash b/package/python-channels-redis/python-channels-redis.hash new file mode 100644 index 00000000..1d80b4c1 --- /dev/null +++ b/package/python-channels-redis/python-channels-redis.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/channels-redis/json +md5 9ec9ffd467e181906f257d6c0dbabf45 channels_redis-2.4.1.tar.gz +sha256 ddfa0c067085fdce24fb80d9c0b848638cbdbf0e1167f14eb2e99d635ad216e6 channels_redis-2.4.1.tar.gz +# Locally computed sha256 checksums +sha256 b846415d1b514e9c1dff14a22deb906d794bc546ca6129f950a18cd091e2a669 LICENSE diff --git a/package/python-channels-redis/python-channels-redis.mk b/package/python-channels-redis/python-channels-redis.mk new file mode 100644 index 00000000..c2c6f59c --- /dev/null +++ b/package/python-channels-redis/python-channels-redis.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-channels-redis +# +################################################################################ + +PYTHON_CHANNELS_REDIS_VERSION = 2.4.1 +PYTHON_CHANNELS_REDIS_SOURCE = channels_redis-$(PYTHON_CHANNELS_REDIS_VERSION).tar.gz +PYTHON_CHANNELS_REDIS_SITE = https://files.pythonhosted.org/packages/87/a9/8d11c32ae6bf3a2cc893185f7d1e03b80bda680131a08473c07ed1fe591d +PYTHON_CHANNELS_REDIS_SETUP_TYPE = setuptools +PYTHON_CHANNELS_REDIS_LICENSE = BSD-3-Clause +PYTHON_CHANNELS_REDIS_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-channels/Config.in b/package/python-channels/Config.in new file mode 100644 index 00000000..5c70f20d --- /dev/null +++ b/package/python-channels/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_PYTHON_CHANNELS + bool "python-channels" + depends on BR2_INSTALL_LIBSTDCPP # python-daphne -> python-autobahn -> python-cryptography + depends on BR2_PACKAGE_PYTHON3 # python-daphne + select BR2_PACKAGE_PYTHON_ASGIREF # runtime + select BR2_PACKAGE_PYTHON_DAPHNE # runtime + select BR2_PACKAGE_PYTHON_DJANGO # runtime + help + Channels augments Django to bring WebSocket, long-poll + HTTP, task offloading and other async support to your + code, using familiar Django design patterns and a + flexible underlying framework that lets you not only + customize behaviours but also write support for your + own protocols and needs. + + http://github.com/django/channels + +comment "python-channels needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_PYTHON3 diff --git a/package/python-channels/python-channels.hash b/package/python-channels/python-channels.hash new file mode 100644 index 00000000..beeef4ac --- /dev/null +++ b/package/python-channels/python-channels.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/channels/json +md5 6f3fb75828b681a69372934a09ac3f32 channels-2.3.1.tar.gz +sha256 6b8ebd93fe0041a23e31c9f4130d92fadb9c0040c0eb377a004540631325a31d channels-2.3.1.tar.gz +# Locally computed sha256 checksums +sha256 b846415d1b514e9c1dff14a22deb906d794bc546ca6129f950a18cd091e2a669 LICENSE diff --git a/package/python-channels/python-channels.mk b/package/python-channels/python-channels.mk new file mode 100644 index 00000000..c0eca71a --- /dev/null +++ b/package/python-channels/python-channels.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-channels +# +################################################################################ + +PYTHON_CHANNELS_VERSION = 2.3.1 +PYTHON_CHANNELS_SOURCE = channels-$(PYTHON_CHANNELS_VERSION).tar.gz +PYTHON_CHANNELS_SITE = https://files.pythonhosted.org/packages/75/53/2db9662a52dcedb02a25f87d8efc5e630059967790e4c10887dbd2db2073 +PYTHON_CHANNELS_SETUP_TYPE = setuptools +PYTHON_CHANNELS_LICENSE = BSD-3-Clause +PYTHON_CHANNELS_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-characteristic/Config.in b/package/python-characteristic/Config.in new file mode 100644 index 00000000..1226fa85 --- /dev/null +++ b/package/python-characteristic/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_CHARACTERISTIC + bool "python-characteristic" + help + Python attributes without boilerplate. + + https://pypi.python.org/pypi/characteristic diff --git a/package/python-characteristic/python-characteristic.hash b/package/python-characteristic/python-characteristic.hash new file mode 100644 index 00000000..2a5c7f5c --- /dev/null +++ b/package/python-characteristic/python-characteristic.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi?:action=show_md5&digest=b249368dd021fde1c06b4802867c0913 +md5 b249368dd021fde1c06b4802867c0913 characteristic-14.3.0.tar.gz +# Locally computed +sha256 ded68d4e424115ed44e5c83c2a901a0b6157a959079d7591d92106ffd3ada380 characteristic-14.3.0.tar.gz +sha256 0af91b662f8428b28f5e517b049a0bb9feeb59b1adaa5c9418c1579f9485107c LICENSE diff --git a/package/python-characteristic/python-characteristic.mk b/package/python-characteristic/python-characteristic.mk new file mode 100644 index 00000000..7ea8d95c --- /dev/null +++ b/package/python-characteristic/python-characteristic.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-characteristic +# +################################################################################ + +PYTHON_CHARACTERISTIC_VERSION = 14.3.0 +PYTHON_CHARACTERISTIC_SOURCE = characteristic-$(PYTHON_CHARACTERISTIC_VERSION).tar.gz +PYTHON_CHARACTERISTIC_SITE = https://pypi.python.org/packages/source/c/characteristic +PYTHON_CHARACTERISTIC_LICENSE = MIT +PYTHON_CHARACTERISTIC_LICENSE_FILES = LICENSE +PYTHON_CHARACTERISTIC_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-chardet/Config.in b/package/python-chardet/Config.in new file mode 100644 index 00000000..869888cf --- /dev/null +++ b/package/python-chardet/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_CHARDET + bool "python-chardet" + select BR2_PACKAGE_PYTHON_SETUPTOOLS # runtime + help + Universal encoding detector for Python 2 and 3. + + https://github.com/chardet/chardet diff --git a/package/python-chardet/python-chardet.hash b/package/python-chardet/python-chardet.hash new file mode 100644 index 00000000..fb4260a2 --- /dev/null +++ b/package/python-chardet/python-chardet.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/chardet/json +md5 bc9a5603d8d0994b2d4cbf255f99e654 chardet-4.0.0.tar.gz +sha256 0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa chardet-4.0.0.tar.gz +# Locally computed +sha256 6095e9ffa777dd22839f7801aa845b31c9ed07f3d6bf8a26dc5d2dec8ccc0ef3 LICENSE diff --git a/package/python-chardet/python-chardet.mk b/package/python-chardet/python-chardet.mk new file mode 100644 index 00000000..448877d0 --- /dev/null +++ b/package/python-chardet/python-chardet.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-chardet +# +################################################################################ + +PYTHON_CHARDET_VERSION = 4.0.0 +PYTHON_CHARDET_SOURCE = chardet-$(PYTHON_CHARDET_VERSION).tar.gz +PYTHON_CHARDET_SITE = https://files.pythonhosted.org/packages/ee/2d/9cdc2b527e127b4c9db64b86647d567985940ac3698eeabc7ffaccb4ea61 +PYTHON_CHARDET_SETUP_TYPE = setuptools +PYTHON_CHARDET_LICENSE = LGPL-2.1+ +PYTHON_CHARDET_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-cheetah/Config.in b/package/python-cheetah/Config.in new file mode 100644 index 00000000..7cbfc5c2 --- /dev/null +++ b/package/python-cheetah/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PYTHON_CHEETAH + bool "python-cheetah" + help + Cheetah is an open source template engine and code + generation tool. + + It can be used standalone or combined with other tools and + frameworks. Web development is its principle use, but + Cheetah is very flexible and is also being used to generate + C++ game code, Java, sql, form emails and even Python code. + + https://pypi.org/project/Cheetah3/ diff --git a/package/python-cheetah/python-cheetah.hash b/package/python-cheetah/python-cheetah.hash new file mode 100644 index 00000000..286b41fd --- /dev/null +++ b/package/python-cheetah/python-cheetah.hash @@ -0,0 +1,5 @@ +# From https://pypi.org/pypi/Cheetah3/json +md5 8c0ac643263ffc3454fb321342284d0a Cheetah3-3.2.4.tar.gz +sha256 caabb9c22961a3413ac85cd1e5525ec9ca80daeba6555f4f60802b6c256e252b Cheetah3-3.2.4.tar.gz +# Locally computed sha256 checksums +sha256 635349ae512fafc2e60eb74a50d0a5276fa06c00b5ecb20da53546449ddc45ea LICENSE diff --git a/package/python-cheetah/python-cheetah.mk b/package/python-cheetah/python-cheetah.mk new file mode 100644 index 00000000..3dfd1fc5 --- /dev/null +++ b/package/python-cheetah/python-cheetah.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-cheetah +# +################################################################################ + +# Please keep in sync with package/python3-cheetah/python3-cheetah.mk +PYTHON_CHEETAH_VERSION = 3.2.4 +PYTHON_CHEETAH_SOURCE = Cheetah3-$(PYTHON_CHEETAH_VERSION).tar.gz +PYTHON_CHEETAH_SITE = https://files.pythonhosted.org/packages/4e/72/e6a7d92279e3551db1b68fd336fd7a6e3d2f2ec742bf486486e6150d77d2 +PYTHON_CHEETAH_LICENSE = MIT +PYTHON_CHEETAH_LICENSE_FILES = LICENSE +PYTHON_CHEETAH_SETUP_TYPE = setuptools + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-cheroot/Config.in b/package/python-cheroot/Config.in new file mode 100644 index 00000000..45dd2d8a --- /dev/null +++ b/package/python-cheroot/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PYTHON_CHEROOT + bool "python-cheroot" + depends on BR2_PACKAGE_PYTHON3 # python-more-itertools, python-jaraco-functools + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON_MORE_ITERTOOLS # runtime + select BR2_PACKAGE_PYTHON_JARACO_FUNCTOOLS # runtime + help + Cheroot is the high-performance, pure-Python + HTTP server used by CherryPy. + + https://github.com/cherrypy/cheroot diff --git a/package/python-cheroot/python-cheroot.hash b/package/python-cheroot/python-cheroot.hash new file mode 100644 index 00000000..e8144aba --- /dev/null +++ b/package/python-cheroot/python-cheroot.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/cheroot/json +md5 7ace4b584a8092deb9f6b0142a627086 cheroot-8.2.1.tar.gz +sha256 5b525b3e4a755adf78070ab54c1821fb860d4255a9317dba2b88eb2df2441cff cheroot-8.2.1.tar.gz +# Locally computed sha256 checksums +sha256 da6dc218683f6dab91c6367f00bf33095d980fb1f04d430c81c5e6994b8605e0 LICENSE.md diff --git a/package/python-cheroot/python-cheroot.mk b/package/python-cheroot/python-cheroot.mk new file mode 100644 index 00000000..9eae8879 --- /dev/null +++ b/package/python-cheroot/python-cheroot.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-cheroot +# +################################################################################ + +PYTHON_CHEROOT_VERSION = 8.2.1 +PYTHON_CHEROOT_SOURCE = cheroot-$(PYTHON_CHEROOT_VERSION).tar.gz +PYTHON_CHEROOT_SITE = https://files.pythonhosted.org/packages/9b/4d/2e51e7ce60f54a5279e91648b9b9b497d4d22bc624ecae6af1b6866144a7 +PYTHON_CHEROOT_LICENSE = BSD-3-Clause +PYTHON_CHEROOT_LICENSE_FILES = LICENSE.md +PYTHON_CHEROOT_SETUP_TYPE = setuptools +PYTHON_CHEROOT_DEPENDENCIES = host-python-setuptools-scm host-python-setuptools-scm-git-archive + +$(eval $(python-package)) diff --git a/package/python-cherrypy/Config.in b/package/python-cherrypy/Config.in new file mode 100644 index 00000000..eb83054b --- /dev/null +++ b/package/python-cherrypy/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_PYTHON_CHERRYPY + bool "python-cherrypy" + depends on BR2_PACKAGE_PYTHON3 # python-cheroot, python-portend + select BR2_PACKAGE_PYTHON_CHEROOT # runtime + select BR2_PACKAGE_PYTHON_JARACO_CLASSES # runtime + select BR2_PACKAGE_PYTHON_PORTEND # runtime + select BR2_PACKAGE_PYTHON3_PYEXPAT # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON3_ZLIB # runtime + help + A minimalist web framework + + http://www.cherrypy.org diff --git a/package/python-cherrypy/python-cherrypy.hash b/package/python-cherrypy/python-cherrypy.hash new file mode 100644 index 00000000..d8f97af0 --- /dev/null +++ b/package/python-cherrypy/python-cherrypy.hash @@ -0,0 +1,4 @@ +# md5 from https://pypi.python.org/pypi/CherryPy/json, sha256 locally computed +md5 e21fd0c5706504a8f26c46d808a14255 CherryPy-12.0.1.tar.gz +sha256 6a3a90a43b1e05bd4634c60acfdcf34efe74f9f8746aca14dbe95a9b69db30ea CherryPy-12.0.1.tar.gz +sha256 02f4efe6e7dcd218c33cfa065c0552de983b5ad563b053e97697c5abd2ef14f9 LICENSE.md diff --git a/package/python-cherrypy/python-cherrypy.mk b/package/python-cherrypy/python-cherrypy.mk new file mode 100644 index 00000000..72b17bc8 --- /dev/null +++ b/package/python-cherrypy/python-cherrypy.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-cherrypy +# +################################################################################ + +PYTHON_CHERRYPY_VERSION = 12.0.1 +PYTHON_CHERRYPY_SOURCE = CherryPy-$(PYTHON_CHERRYPY_VERSION).tar.gz +PYTHON_CHERRYPY_SITE = https://pypi.python.org/packages/be/d8/a8ef56bfe1c39d466b8d55b496b64459cc43dec71361d88edf904901637f +PYTHON_CHERRYPY_LICENSE = BSD-3-Clause +PYTHON_CHERRYPY_LICENSE_FILES = LICENSE.md +PYTHON_CHERRYPY_SETUP_TYPE = setuptools +PYTHON_CHERRYPY_DEPENDENCIES = host-python-setuptools-scm + +$(eval $(python-package)) diff --git a/package/python-click/Config.in b/package/python-click/Config.in new file mode 100644 index 00000000..c0269986 --- /dev/null +++ b/package/python-click/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_CLICK + bool "python-click" + help + A simple wrapper around optparse for powerful command line + utilities. + + https://pypi.python.org/pypi/click diff --git a/package/python-click/python-click.hash b/package/python-click/python-click.hash new file mode 100644 index 00000000..911f13df --- /dev/null +++ b/package/python-click/python-click.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/click/json +md5 7f53d50f7b7373ebc7963f9ff697450a Click-7.0.tar.gz +sha256 5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7 Click-7.0.tar.gz +# Locally computed sha256 +sha256 e212319faefa4f459c8ac937fdc8557040a3cab8af29366ca2a48d239025225c LICENSE.rst diff --git a/package/python-click/python-click.mk b/package/python-click/python-click.mk new file mode 100644 index 00000000..12539f55 --- /dev/null +++ b/package/python-click/python-click.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-click +# +################################################################################ + +PYTHON_CLICK_VERSION = 7.0 +PYTHON_CLICK_SOURCE = Click-$(PYTHON_CLICK_VERSION).tar.gz +PYTHON_CLICK_SITE = https://files.pythonhosted.org/packages/f8/5c/f60e9d8a1e77005f664b76ff8aeaee5bc05d0a91798afd7f53fc998dbc47 +PYTHON_CLICK_LICENSE = BSD-3-Clause +PYTHON_CLICK_LICENSE_FILES = LICENSE.rst +PYTHON_CLICK_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-coherence/0001-Fix-twisted-detection.patch b/package/python-coherence/0001-Fix-twisted-detection.patch new file mode 100644 index 00000000..c0e51b9e --- /dev/null +++ b/package/python-coherence/0001-Fix-twisted-detection.patch @@ -0,0 +1,29 @@ +From 3cf8d89cbb44b5c7a0693d0b5d665e68acc3927c Mon Sep 17 00:00:00 2001 +From: Thomas Klausner +Date: Tue, 10 May 2016 00:14:33 +0200 +Subject: [PATCH] Fix twisted detection. + +Addresses https://github.com/coherence-project/Coherence/issues/25 + +Signed-off-by: Thomas Klausner +Signed-off-by: Yegor Yefremov +--- + coherence/__init__.py | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/coherence/__init__.py b/coherence/__init__.py +index 2e4e8f1..4c4d73d 100644 +--- a/coherence/__init__.py ++++ b/coherence/__init__.py +@@ -24,8 +24,6 @@ try: + if twisted_version < Version("twisted", 2, 5, 0): + raise ImportError("Twisted >= 2.5 is required. Please install it.") + +- if twisted_web_version < Version("twisted.web", 2, 5, 0): +- raise ImportError("Twisted.Web >= 2.5 is required. Please install it") + except ImportError, exc: + # log error to stderr, might be useful for debugging purpose + for arg in exc.args: +-- +2.8.1 + diff --git a/package/python-coherence/Config.in b/package/python-coherence/Config.in new file mode 100644 index 00000000..0f50080e --- /dev/null +++ b/package/python-coherence/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_COHERENCE + bool "python-coherence" + depends on BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON_TWISTED + select BR2_PACKAGE_PYTHON_ZOPE_INTERFACE + select BR2_PACKAGE_PYTHON_PYASN1 + help + A DLNA/UPnP Media Server and Framework for the Digital Living. + + https://github.com/coherence-project/Coherence diff --git a/package/python-coherence/python-coherence.hash b/package/python-coherence/python-coherence.hash new file mode 100644 index 00000000..3c2d45b5 --- /dev/null +++ b/package/python-coherence/python-coherence.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 97c8b700b3fe73d48eacb259008f410d6567e5d7d1b8e96386f8cc2422135ca5 python-coherence-b7856985fd496689ca1f9024925ae737297c00d1.tar.gz +sha256 7713ed8484b4d3364c7f6f2c02aed427b06a0159b1f77aecf907d47016812e81 LICENCE diff --git a/package/python-coherence/python-coherence.mk b/package/python-coherence/python-coherence.mk new file mode 100644 index 00000000..24da7f70 --- /dev/null +++ b/package/python-coherence/python-coherence.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-coherence +# +################################################################################ + +PYTHON_COHERENCE_VERSION = b7856985fd496689ca1f9024925ae737297c00d1 +PYTHON_COHERENCE_SITE = $(call github,coherence-project,Coherence,$(PYTHON_COHERENCE_VERSION)) +PYTHON_COHERENCE_SETUP_TYPE = setuptools +PYTHON_COHERENCE_LICENSE = MIT +PYTHON_COHERENCE_LICENSE_FILES = LICENCE + +$(eval $(python-package)) diff --git a/package/python-colorama/Config.in b/package/python-colorama/Config.in new file mode 100644 index 00000000..911effb3 --- /dev/null +++ b/package/python-colorama/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_COLORAMA + bool "python-colorama" + help + Cross-platform colored terminal text. + + https://github.com/tartley/colorama diff --git a/package/python-colorama/python-colorama.hash b/package/python-colorama/python-colorama.hash new file mode 100644 index 00000000..e975a663 --- /dev/null +++ b/package/python-colorama/python-colorama.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/colorama/json +md5 57b22f2597f63df051b69906fbf310cc colorama-0.4.4.tar.gz +sha256 5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b colorama-0.4.4.tar.gz +# Locally computed sha256 checksums +sha256 cac35c02686e5d04a5a7140bfb3b36e73aed496656e891102e428886d7930318 LICENSE.txt diff --git a/package/python-colorama/python-colorama.mk b/package/python-colorama/python-colorama.mk new file mode 100644 index 00000000..d3d29a63 --- /dev/null +++ b/package/python-colorama/python-colorama.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-colorama +# +################################################################################ + +PYTHON_COLORAMA_VERSION = 0.4.4 +PYTHON_COLORAMA_SOURCE = colorama-$(PYTHON_COLORAMA_VERSION).tar.gz +PYTHON_COLORAMA_SITE = https://files.pythonhosted.org/packages/1f/bb/5d3246097ab77fa083a61bd8d3d527b7ae063c7d8e8671b1cf8c4ec10cbe +PYTHON_COLORAMA_SETUP_TYPE = setuptools +PYTHON_COLORAMA_LICENSE = BSD-3-Clause +PYTHON_COLORAMA_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-colorlog/Config.in b/package/python-colorlog/Config.in new file mode 100644 index 00000000..673f97aa --- /dev/null +++ b/package/python-colorlog/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_COLORLOG + bool "python-colorlog" + help + Log formatting with colors. + + https://github.com/borntyping/python-colorlog diff --git a/package/python-colorlog/python-colorlog.hash b/package/python-colorlog/python-colorlog.hash new file mode 100644 index 00000000..b7b27b59 --- /dev/null +++ b/package/python-colorlog/python-colorlog.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/colorlog/json +md5 25f79b76421132e2a9e08da15e4e0a73 colorlog-4.1.0.tar.gz +sha256 30aaef5ab2a1873dec5da38fd6ba568fa761c9fa10b40241027fa3edea47f3d2 colorlog-4.1.0.tar.gz +# Locally computed sha256 checksums +sha256 915d2c0c578d5015fb561f69ce2970a0d0ed566f0b99bdb6a4ebb439e9c81b0d LICENSE diff --git a/package/python-colorlog/python-colorlog.mk b/package/python-colorlog/python-colorlog.mk new file mode 100644 index 00000000..18c077e4 --- /dev/null +++ b/package/python-colorlog/python-colorlog.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-colorlog +# +################################################################################ + +PYTHON_COLORLOG_VERSION = 4.1.0 +PYTHON_COLORLOG_SOURCE = colorlog-$(PYTHON_COLORLOG_VERSION).tar.gz +PYTHON_COLORLOG_SITE = https://files.pythonhosted.org/packages/a5/51/c6e1f2c7e6d7524b580d5a8d7691fd4530f894ae8a23ba66a065291ceba2 +PYTHON_COLORLOG_SETUP_TYPE = setuptools +PYTHON_COLORLOG_LICENSE = MIT +PYTHON_COLORLOG_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-colorzero/Config.in b/package/python-colorzero/Config.in new file mode 100644 index 00000000..b2ef711f --- /dev/null +++ b/package/python-colorzero/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_COLORZERO + bool "python-colorzero" + help + A color manipulation library for Python. + + https://github.com/waveform80/colorzero diff --git a/package/python-colorzero/python-colorzero.hash b/package/python-colorzero/python-colorzero.hash new file mode 100644 index 00000000..118ccea7 --- /dev/null +++ b/package/python-colorzero/python-colorzero.hash @@ -0,0 +1,4 @@ +# Locally computed +sha256 24d30b55793150f9ae7478f8aa2126fe5598a31f928907eadbf9d5a19aa9964c python-colorzero-1.1.tar.gz +# Locally computed +sha256 47778d78e05bb6c39c022814e3712a0327c6418c7251757e72167ab8ff12bb4d LICENSE.txt diff --git a/package/python-colorzero/python-colorzero.mk b/package/python-colorzero/python-colorzero.mk new file mode 100644 index 00000000..6ddbcbe1 --- /dev/null +++ b/package/python-colorzero/python-colorzero.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-colorzero +# +################################################################################ + +PYTHON_COLORZERO_VERSION = 1.1 +PYTHON_COLORZERO_SITE = $(call github,waveform80,colorzero,release-$(PYTHON_COLORZERO_VERSION)) +PYTHON_COLORZERO_LICENSE = BSD-3-Clause +PYTHON_COLORZERO_LICENSE_FILES = LICENSE.txt +PYTHON_COLORZERO_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-configobj/Config.in b/package/python-configobj/Config.in new file mode 100644 index 00000000..fc57e26f --- /dev/null +++ b/package/python-configobj/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_CONFIGOBJ + bool "python-configobj" + depends on BR2_PACKAGE_PYTHON + help + ConfigObj is a simple but powerful config file reader and + writer: an ini file round tripper. Its main feature is that + it is very easy to use, with a straightforward programmer's + interface and a simple syntax for config files. + + http://www.voidspace.org.uk/python/configobj.html diff --git a/package/python-configobj/python-configobj.hash b/package/python-configobj/python-configobj.hash new file mode 100644 index 00000000..d43c4537 --- /dev/null +++ b/package/python-configobj/python-configobj.hash @@ -0,0 +1,3 @@ +# md5 from https://pypi.python.org/pypi/configobj/json, sha256 locally computed +md5 e472a3a1c2a67bb0ec9b5d54c13a47d6 configobj-5.0.6.tar.gz +sha256 a2f5650770e1c87fb335af19a9b7eb73fc05ccf22144eb68db7d00cd2bcb0902 configobj-5.0.6.tar.gz diff --git a/package/python-configobj/python-configobj.mk b/package/python-configobj/python-configobj.mk new file mode 100644 index 00000000..9e281d28 --- /dev/null +++ b/package/python-configobj/python-configobj.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-configobj +# +################################################################################ + +PYTHON_CONFIGOBJ_VERSION = 5.0.6 +PYTHON_CONFIGOBJ_SOURCE = configobj-$(PYTHON_CONFIGOBJ_VERSION).tar.gz +PYTHON_CONFIGOBJ_SITE = https://pypi.python.org/packages/64/61/079eb60459c44929e684fa7d9e2fdca403f67d64dd9dbac27296be2e0fab +PYTHON_CONFIGOBJ_LICENSE = BSD-3-Clause +# License only mentioned in the source +PYTHON_CONFIGOBJ_SETUP_TYPE = distutils + +$(eval $(python-package)) diff --git a/package/python-configshell-fb/Config.in b/package/python-configshell-fb/Config.in new file mode 100644 index 00000000..90a295fc --- /dev/null +++ b/package/python-configshell-fb/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PYTHON_CONFIGSHELL_FB + bool "python-configshell-fb" + select BR2_PACKAGE_PYTHON_PYPARSING + select BR2_PACKAGE_PYTHON3_READLINE if BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_READLINE if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON_SIX + select BR2_PACKAGE_PYTHON_URWID + help + configshell-fb is a Python library that provides a framework + for building simple but nice CLI-based applications. + + https://github.com/open-iscsi/configshell-fb diff --git a/package/python-configshell-fb/python-configshell-fb.hash b/package/python-configshell-fb/python-configshell-fb.hash new file mode 100644 index 00000000..0903e284 --- /dev/null +++ b/package/python-configshell-fb/python-configshell-fb.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 3685446d6ee02881930bb2fdc5fdd254938da66ce9843a5b3676c4246b058e4b python-configshell-fb-1.1.fb18.tar.gz +sha256 5df2a0d87d6c562f0ea11c688ac52532aa28d744cabc7994ff0537f64b3b3320 COPYING diff --git a/package/python-configshell-fb/python-configshell-fb.mk b/package/python-configshell-fb/python-configshell-fb.mk new file mode 100644 index 00000000..94b6fed5 --- /dev/null +++ b/package/python-configshell-fb/python-configshell-fb.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-configshell-fb +# +################################################################################ + +# When upgrading the version, be sure to also upgrade python-rtslib-fb +# and targetcli-fb at the same time. +PYTHON_CONFIGSHELL_FB_VERSION = 1.1.fb18 +PYTHON_CONFIGSHELL_FB_SITE = $(call github,open-iscsi,configshell-fb,v$(PYTHON_CONFIGSHELL_FB_VERSION)) +PYTHON_CONFIGSHELL_FB_LICENSE = Apache-2.0 +PYTHON_CONFIGSHELL_FB_LICENSE_FILES = COPYING +PYTHON_CONFIGSHELL_FB_SETUP_TYPE = setuptools +PYTHON_CONFIGSHELL_FB_DEPENDENCIES = python-pyparsing python-six python-urwid + +$(eval $(python-package)) diff --git a/package/python-constantly/Config.in b/package/python-constantly/Config.in new file mode 100644 index 00000000..13bb2e86 --- /dev/null +++ b/package/python-constantly/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_CONSTANTLY + bool "python-constantly" + help + A library that provides symbolic constant support. It + includes collections and constants with text, numeric, + and bit flag values. + + https://github.com/twisted/constantly diff --git a/package/python-constantly/python-constantly.hash b/package/python-constantly/python-constantly.hash new file mode 100644 index 00000000..d2033de3 --- /dev/null +++ b/package/python-constantly/python-constantly.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/constantly/json +md5 f0762f083d83039758e53f8cf0086eef constantly-15.1.0.tar.gz +# Locally computed +sha256 586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35 constantly-15.1.0.tar.gz +sha256 020870fcaf4bf9c50b233e331817094fe109b91c0880570fd476f527cfbfc085 LICENSE diff --git a/package/python-constantly/python-constantly.mk b/package/python-constantly/python-constantly.mk new file mode 100644 index 00000000..783d198d --- /dev/null +++ b/package/python-constantly/python-constantly.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-constantly +# +################################################################################ + +PYTHON_CONSTANTLY_VERSION = 15.1.0 +PYTHON_CONSTANTLY_SOURCE = constantly-$(PYTHON_CONSTANTLY_VERSION).tar.gz +PYTHON_CONSTANTLY_SITE = https://pypi.python.org/packages/95/f1/207a0a478c4bb34b1b49d5915e2db574cadc415c9ac3a7ef17e29b2e8951 +PYTHON_CONSTANTLY_SETUP_TYPE = setuptools +PYTHON_CONSTANTLY_LICENSE = MIT +PYTHON_CONSTANTLY_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-couchdb/Config.in b/package/python-couchdb/Config.in new file mode 100644 index 00000000..9156883b --- /dev/null +++ b/package/python-couchdb/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_COUCHDB + bool "python-couchdb" + select BR2_PACKAGE_PYTHON_SSL if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_SSL if BR2_PACKAGE_PYTHON3 # runtime + help + Python client library for working with CouchDB. + + https://github.com/djc/couchdb-python/ diff --git a/package/python-couchdb/python-couchdb.hash b/package/python-couchdb/python-couchdb.hash new file mode 100644 index 00000000..67b7b126 --- /dev/null +++ b/package/python-couchdb/python-couchdb.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/couchdb/json +md5 de40696472202d728cfca4279629e4ff CouchDB-1.2.tar.gz +sha256 1386a1a43f25bed3667e3b805222054940d674fa1967fa48e9d2012a18630ab7 CouchDB-1.2.tar.gz +# Locally computed sha256 checksums +sha256 c538da1ae16b6d75f6fa65852bb158dbf9e556b01681be5b692692906d244241 COPYING diff --git a/package/python-couchdb/python-couchdb.mk b/package/python-couchdb/python-couchdb.mk new file mode 100644 index 00000000..b88c6570 --- /dev/null +++ b/package/python-couchdb/python-couchdb.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-couchdb +# +################################################################################ + +PYTHON_COUCHDB_VERSION = 1.2 +PYTHON_COUCHDB_SOURCE = CouchDB-$(PYTHON_COUCHDB_VERSION).tar.gz +PYTHON_COUCHDB_SITE = https://files.pythonhosted.org/packages/7c/c8/f94a107eca0c178e5d74c705dad1a5205c0f580840bd1b155cd8a258cb7c +PYTHON_COUCHDB_SETUP_TYPE = setuptools +PYTHON_COUCHDB_LICENSE = BSD-3-Clause +PYTHON_COUCHDB_LICENSE_FILES = COPYING + +$(eval $(python-package)) diff --git a/package/python-crayons/Config.in b/package/python-crayons/Config.in new file mode 100644 index 00000000..10f3ece0 --- /dev/null +++ b/package/python-crayons/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_CRAYONS + bool "python-crayons" + depends on BR2_PACKAGE_PYTHON3 + help + This module is really simple, it gives you + colored strings for terminal usage. + + https://pypi.org/project/crayons diff --git a/package/python-crayons/python-crayons.hash b/package/python-crayons/python-crayons.hash new file mode 100644 index 00000000..e3d66321 --- /dev/null +++ b/package/python-crayons/python-crayons.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/crayons/json +md5 88a79c854ce54bcbb8376d18a448d627 crayons-0.4.0.tar.gz +sha256 bd33b7547800f2cfbd26b38431f9e64b487a7de74a947b0fafc89b45a601813f crayons-0.4.0.tar.gz +# Locally computed sha256 checksums +sha256 7deeb137f78337fd1e2e3966a7896821c6ebff244200d009d3f4157246b5a457 LICENSE diff --git a/package/python-crayons/python-crayons.mk b/package/python-crayons/python-crayons.mk new file mode 100644 index 00000000..33562d09 --- /dev/null +++ b/package/python-crayons/python-crayons.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-crayons +# +################################################################################ + +PYTHON_CRAYONS_VERSION = 0.4.0 +PYTHON_CRAYONS_SOURCE = crayons-$(PYTHON_CRAYONS_VERSION).tar.gz +PYTHON_CRAYONS_SITE = https://files.pythonhosted.org/packages/b8/6b/12a1dea724c82f1c19f410365d3e25356625b48e8009a7c3c9ec4c42488d +PYTHON_CRAYONS_LICENSE = MIT +PYTHON_CRAYONS_LICENSE_FILES = LICENSE +PYTHON_CRAYONS_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-crc16/Config.in b/package/python-crc16/Config.in new file mode 100644 index 00000000..06ad0077 --- /dev/null +++ b/package/python-crc16/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_CRC16 + bool "python-crc16" + help + This library calculates only CRC16 (16-bit codes) and the + only supported variant at the moment is CRC-CCITT (XModem). + CRC is a way of detecting accidental changes in data storage + or transmission. There are many variants of CRC and CRC16, + in particular. + + https://code.google.com/archive/p/pycrc16/ diff --git a/package/python-crc16/python-crc16.hash b/package/python-crc16/python-crc16.hash new file mode 100644 index 00000000..4576a907 --- /dev/null +++ b/package/python-crc16/python-crc16.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 10aeda70fbe8b284874b3b1b8f74b9c1f6d5e8dee20ac8f9d5bc49f45f12a42a python-crc16-0.1.1.tar.gz +sha256 ea7d049c7705dc13afc202dd18e1827f3484f8212fd3fa7b82fc4a0c363432c9 COPYING.txt diff --git a/package/python-crc16/python-crc16.mk b/package/python-crc16/python-crc16.mk new file mode 100644 index 00000000..9809f1ed --- /dev/null +++ b/package/python-crc16/python-crc16.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-crc16 +# +################################################################################ + +PYTHON_CRC16_VERSION = 0.1.1 +PYTHON_CRC16_SITE = $(call github,gennady,pycrc16,v$(PYTHON_CRC16_VERSION)) +PYTHON_CRC16_LICENSE = LGPL-3.0+ +PYTHON_CRC16_LICENSE_FILES = COPYING.txt +PYTHON_CRC16_SETUP_TYPE = distutils + +$(eval $(python-package)) diff --git a/package/python-crcmod/Config.in b/package/python-crcmod/Config.in new file mode 100644 index 00000000..289a3aee --- /dev/null +++ b/package/python-crcmod/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_CRCMOD + bool "python-crcmod" + help + The software in this package is a Python module for + generating objects that compute the Cyclic Redundancy + Check (CRC). + + http://crcmod.sourceforge.net/ diff --git a/package/python-crcmod/python-crcmod.hash b/package/python-crcmod/python-crcmod.hash new file mode 100644 index 00000000..8ba98d3c --- /dev/null +++ b/package/python-crcmod/python-crcmod.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/crcmod/json +md5 2d5b92117d958dcead94f9e17f54cd32 crcmod-1.7.tar.gz +# Locally computed +sha256 dc7051a0db5f2bd48665a990d3ec1cc305a466a77358ca4492826f41f283601e crcmod-1.7.tar.gz +sha256 89480768826f408daea1f3caff0509c2cc9606e10f6bb0ccfd12a3d604842c35 LICENSE diff --git a/package/python-crcmod/python-crcmod.mk b/package/python-crcmod/python-crcmod.mk new file mode 100644 index 00000000..1aab7f50 --- /dev/null +++ b/package/python-crcmod/python-crcmod.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-crcmod +# +################################################################################ + +PYTHON_CRCMOD_VERSION = 1.7 +PYTHON_CRCMOD_SOURCE = crcmod-$(PYTHON_CRCMOD_VERSION).tar.gz +PYTHON_CRCMOD_SITE = https://pypi.python.org/packages/6b/b0/e595ce2a2527e169c3bcd6c33d2473c1918e0b7f6826a043ca1245dd4e5b +PYTHON_CRCMOD_SETUP_TYPE = distutils +PYTHON_CRCMOD_LICENSE = MIT +PYTHON_CRCMOD_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-crontab/Config.in b/package/python-crontab/Config.in new file mode 100644 index 00000000..102dbbdb --- /dev/null +++ b/package/python-crontab/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_CRONTAB + bool "python-crontab" + select BR2_PACKAGE_PYTHON_DATEUTIL # runtime + help + Crontab module for reading and writing crontab files and + accessing the system cron automatically and simply using + a direct API. + + https://gitlab.com/doctormo/python-crontab/ diff --git a/package/python-crontab/python-crontab.hash b/package/python-crontab/python-crontab.hash new file mode 100644 index 00000000..2247cf3d --- /dev/null +++ b/package/python-crontab/python-crontab.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/python-crontab/json +md5 7731a2253e853abfb6eceb8045368f22 python-crontab-2.5.1.tar.gz +sha256 4bbe7e720753a132ca4ca9d4094915f40e9d9dc8a807a4564007651018ce8c31 python-crontab-2.5.1.tar.gz +# Locally computed sha256 checksums +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 COPYING diff --git a/package/python-crontab/python-crontab.mk b/package/python-crontab/python-crontab.mk new file mode 100644 index 00000000..ddb1067d --- /dev/null +++ b/package/python-crontab/python-crontab.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-crontab +# +################################################################################ + +PYTHON_CRONTAB_VERSION = 2.5.1 +PYTHON_CRONTAB_SITE = https://files.pythonhosted.org/packages/1b/7e/fb78b96de58a49b8ef807c321870ef4de3de5928fd71a40a400aed714310 +PYTHON_CRONTAB_SETUP_TYPE = setuptools +PYTHON_CRONTAB_LICENSE = LGPL-3.0+ +PYTHON_CRONTAB_LICENSE_FILES = COPYING + +$(eval $(python-package)) diff --git a/package/python-crossbar/0001-Avoid-intentional-syntax-error.patch b/package/python-crossbar/0001-Avoid-intentional-syntax-error.patch new file mode 100644 index 00000000..0ff7cae2 --- /dev/null +++ b/package/python-crossbar/0001-Avoid-intentional-syntax-error.patch @@ -0,0 +1,29 @@ +From 423a1b081f6b7198f6a921ca83043270ebbace1a Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sun, 1 May 2016 15:35:32 +0200 +Subject: [PATCH] Avoid intentional syntax error + +This file has an intentional syntax error, meant to validate QA, but +it breaks byte compilation of this package. + +Issue reported upstream: +https://github.com/crossbario/crossbar/issues/750. + +Signed-off-by: Thomas Petazzoni +--- + crossbar/worker/test/examples/syntaxerror.py | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/crossbar/worker/test/examples/syntaxerror.py b/crossbar/worker/test/examples/syntaxerror.py +index 7b88e088..cd7de901 100644 +--- a/crossbar/worker/test/examples/syntaxerror.py ++++ b/crossbar/worker/test/examples/syntaxerror.py +@@ -27,5 +27,3 @@ + # with this program. If not, see . + # + ##################################################################################### +- +-class # noqa +-- +2.20.1 + diff --git a/package/python-crossbar/0002-Remove-idna-requirement.patch b/package/python-crossbar/0002-Remove-idna-requirement.patch new file mode 100644 index 00000000..4948b91b --- /dev/null +++ b/package/python-crossbar/0002-Remove-idna-requirement.patch @@ -0,0 +1,29 @@ +From 9164d21cc66c1f78de37c9383528c5d528cbdbeb Mon Sep 17 00:00:00 2001 +From: Asaf Kahlon +Date: Wed, 26 Sep 2018 15:33:43 +0300 +Subject: [PATCH] Remove idna requirement. + +The latest version of idna is 2.7, but it seems like idna is not a direct +dependency anymore (a short "git grep" shows it's only written in requirement +and readme files). + +Signed-off-by: Asaf Kahlon +--- + requirements-min.txt | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/requirements-min.txt b/requirements-min.txt +index 92fb0f8f..13cdac87 100644 +--- a/requirements-min.txt ++++ b/requirements-min.txt +@@ -6,7 +6,6 @@ click>=6.7 + constantly>=15.1.0 + cryptography>=1.9 + h2>=3.0,<4.0 +-idna<2.6,>=2.5 + incremental>=17.5.0 + jinja2>=2.9.6 + lmdb>=0.92 +-- +2.17.1 + diff --git a/package/python-crossbar/Config.in b/package/python-crossbar/Config.in new file mode 100644 index 00000000..50b70b8e --- /dev/null +++ b/package/python-crossbar/Config.in @@ -0,0 +1,54 @@ +config BR2_PACKAGE_PYTHON_CROSSBAR + bool "python-crossbar" + depends on BR2_INSTALL_LIBSTDCPP # python-cryptography + depends on BR2_PACKAGE_PYTHON3 + # All the following dependencies are runtime dependencies + select BR2_PACKAGE_PYTHON_ATTRS + select BR2_PACKAGE_PYTHON_AUTOBAHN + select BR2_PACKAGE_PYTHON_BITSTRING + select BR2_PACKAGE_PYTHON_CBOR + select BR2_PACKAGE_PYTHON_CBOR2 + select BR2_PACKAGE_PYTHON_CLICK + select BR2_PACKAGE_PYTHON_CONSTANTLY + select BR2_PACKAGE_PYTHON_CRYPTOGRAPHY + select BR2_PACKAGE_PYTHON_H2 + select BR2_PACKAGE_PYTHON_IDNA + select BR2_PACKAGE_PYTHON_INCREMENTAL + select BR2_PACKAGE_PYTHON_JINJA2 + select BR2_PACKAGE_PYTHON_LMDB + select BR2_PACKAGE_PYTHON_MISTUNE + select BR2_PACKAGE_PYTHON_NETADDR + select BR2_PACKAGE_PYTHON_PASSLIB + select BR2_PACKAGE_PYTHON_PRIORITY + select BR2_PACKAGE_PYTHON_PSUTIL + select BR2_PACKAGE_PYTHON_PYASN1 + select BR2_PACKAGE_PYTHON_PYASN1_MODULES + select BR2_PACKAGE_PYTHON_PYGMENTS + select BR2_PACKAGE_PYTHON_PYNACL + select BR2_PACKAGE_PYTHON_PYOPENSSL + select BR2_PACKAGE_PYTHON_PYQRCODE + select BR2_PACKAGE_PYTHON_PYTRIE + select BR2_PACKAGE_PYTHON_PYYAML + select BR2_PACKAGE_PYTHON_SDNOTIFY + select BR2_PACKAGE_PYTHON_SERVICE_IDENTITY + select BR2_PACKAGE_PYTHON_SETPROCTITLE + select BR2_PACKAGE_PYTHON_SETUPTOOLS + select BR2_PACKAGE_PYTHON_TREQ + select BR2_PACKAGE_PYTHON_TWISTED + select BR2_PACKAGE_PYTHON_TXAIO + select BR2_PACKAGE_PYTHON_TXTORCON + select BR2_PACKAGE_PYTHON_U_MSGPACK + select BR2_PACKAGE_PYTHON_UBJSON + select BR2_PACKAGE_PYTHON_WATCHDOG + select BR2_PACKAGE_PYTHON_WERKZEUG + select BR2_PACKAGE_PYTHON_ZOPE_INTERFACE + help + Crossbar.io is an open-source WAMP application router that + allows to build advanced applications from loosely-coupled + components that can talk in real-time with each other. + + https://pypi.python.org/pypi/crossbar + +comment "python-crossbar needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_PYTHON3 diff --git a/package/python-crossbar/python-crossbar.hash b/package/python-crossbar/python-crossbar.hash new file mode 100644 index 00000000..486b4d56 --- /dev/null +++ b/package/python-crossbar/python-crossbar.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/crossbar/json +md5 f1756c5a7eac95aa0ff3e307cdd960df crossbar-20.4.2.tar.gz +sha256 67a14864850b562c2b5586eca37f39b2eff3d650ba955bace894e6b5d0633dbb crossbar-20.4.2.tar.gz +# Locally computed +sha256 57c8ff33c9c0cfc3ef00e650a1cc910d7ee479a8bc509f6c9209a7c2a11399d6 crossbar/LICENSE diff --git a/package/python-crossbar/python-crossbar.mk b/package/python-crossbar/python-crossbar.mk new file mode 100644 index 00000000..99ddc67d --- /dev/null +++ b/package/python-crossbar/python-crossbar.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-crossbar +# +################################################################################ + +PYTHON_CROSSBAR_VERSION = 20.4.2 +PYTHON_CROSSBAR_SOURCE = crossbar-$(PYTHON_CROSSBAR_VERSION).tar.gz +PYTHON_CROSSBAR_SITE = https://files.pythonhosted.org/packages/3f/a2/d8aff4b366b565669236e6bbb09d9f1bbe9162eb542822e89210141dd738 +PYTHON_CROSSBAR_LICENSE = AGPL-3.0 +PYTHON_CROSSBAR_LICENSE_FILES = crossbar/LICENSE +PYTHON_CROSSBAR_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-cryptography/Config.in b/package/python-cryptography/Config.in new file mode 100644 index 00000000..d1c2917e --- /dev/null +++ b/package/python-cryptography/Config.in @@ -0,0 +1,24 @@ +config BR2_PACKAGE_PYTHON_CRYPTOGRAPHY + bool "python-cryptography" + depends on BR2_INSTALL_LIBSTDCPP # python-pyasn + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_PYTHON_CFFI # runtime + select BR2_PACKAGE_PYTHON_ENUM34 if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON_HASHLIB if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON_IDNA # runtime + select BR2_PACKAGE_PYTHON_IPADDRESS if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON_ASN1CRYPTO # runtime + select BR2_PACKAGE_PYTHON_PYEXPAT if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_PYEXPAT if BR2_PACKAGE_PYTHON3 # runtime + select BR2_PACKAGE_PYTHON_SETUPTOOLS # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON_SSL if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_SSL if BR2_PACKAGE_PYTHON3 # runtime + help + cryptography is a package designed to expose cryptographic + primitives and recipes to Python developers. + + https://cryptography.io + +comment "python-cryptography needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/python-cryptography/python-cryptography.hash b/package/python-cryptography/python-cryptography.hash new file mode 100644 index 00000000..c6768ff2 --- /dev/null +++ b/package/python-cryptography/python-cryptography.hash @@ -0,0 +1,7 @@ +# md5, sha256 from https://pypi.org/pypi/cryptography/json +md5 163608a7cb838c6b39360e1e64377d54 cryptography-3.0.tar.gz +sha256 8e924dbc025206e97756e8903039662aa58aa9ba357d8e1d8fc29e3092322053 cryptography-3.0.tar.gz +# Locally computed sha256 checksums +sha256 35452b557fab0efb1e80d7edb9c4e5118b9384082adaa051dde342102cb9de8d LICENSE +sha256 aac73b3148f6d1d7111dbca32099f68d26c644c6813ae1e4f05f6579aa2663fe LICENSE.APACHE +sha256 602c4c7482de6479dd2e9793cda275e5e63d773dacd1eca689232ab7008fb4fb LICENSE.BSD diff --git a/package/python-cryptography/python-cryptography.mk b/package/python-cryptography/python-cryptography.mk new file mode 100644 index 00000000..bc7a9f80 --- /dev/null +++ b/package/python-cryptography/python-cryptography.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# python-cryptography +# +################################################################################ + +PYTHON_CRYPTOGRAPHY_VERSION = 3.0 +PYTHON_CRYPTOGRAPHY_SOURCE = cryptography-$(PYTHON_CRYPTOGRAPHY_VERSION).tar.gz +PYTHON_CRYPTOGRAPHY_SITE = https://files.pythonhosted.org/packages/bf/ac/552fc8729d90393845cc3a2062facf4a89dcbe206fa78771d60ddaae7554 +PYTHON_CRYPTOGRAPHY_SETUP_TYPE = setuptools +PYTHON_CRYPTOGRAPHY_LICENSE = Apache-2.0 or BSD-3-Clause +PYTHON_CRYPTOGRAPHY_LICENSE_FILES = LICENSE LICENSE.APACHE LICENSE.BSD +PYTHON_CRYPTOGRAPHY_CPE_ID_VENDOR = cryptography_project +PYTHON_CRYPTOGRAPHY_CPE_ID_PRODUCT = cryptography +PYTHON_CRYPTOGRAPHY_DEPENDENCIES = host-python-cffi openssl + +$(eval $(python-package)) diff --git a/package/python-cssselect/Config.in b/package/python-cssselect/Config.in new file mode 100644 index 00000000..18d63720 --- /dev/null +++ b/package/python-cssselect/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_CSSSELECT + bool "python-cssselect" + help + cssselect parses CSS3 Selectors and translates them to XPath + 1.0 + + http://packages.python.org/cssselect/ diff --git a/package/python-cssselect/python-cssselect.hash b/package/python-cssselect/python-cssselect.hash new file mode 100644 index 00000000..44813416 --- /dev/null +++ b/package/python-cssselect/python-cssselect.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/cssselect/json +md5 fa57704c1cb66cc8e537b782bd6b227e cssselect-1.1.0.tar.gz +sha256 f95f8dedd925fd8f54edb3d2dfb44c190d9d18512377d3c1e2388d16126879bc cssselect-1.1.0.tar.gz +# Locally computed sha256 checksums +sha256 5c8da9f744e0afba81a48c9b5dbe73048f798b3287d6f1af8a05ee08ebb10892 LICENSE diff --git a/package/python-cssselect/python-cssselect.mk b/package/python-cssselect/python-cssselect.mk new file mode 100644 index 00000000..f6faa94b --- /dev/null +++ b/package/python-cssselect/python-cssselect.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-cssselect +# +################################################################################ + +PYTHON_CSSSELECT_VERSION = 1.1.0 +PYTHON_CSSSELECT_SOURCE = cssselect-$(PYTHON_CSSSELECT_VERSION).tar.gz +PYTHON_CSSSELECT_SITE = https://files.pythonhosted.org/packages/70/54/37630f6eb2c214cdee2ae56b7287394c8aa2f3bafb8b4eb8c3791aae7a14 +PYTHON_CSSSELECT_SETUP_TYPE = setuptools +PYTHON_CSSSELECT_LICENSE = BSD-3-Clause +PYTHON_CSSSELECT_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-cssutils/Config.in b/package/python-cssutils/Config.in new file mode 100644 index 00000000..74de742c --- /dev/null +++ b/package/python-cssutils/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_CSSUTILS + bool "python-cssutils" + select BR2_PACKAGE_PYTHON_PYEXPAT if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_PYEXPAT if BR2_PACKAGE_PYTHON3 # runtime + help + A CSS Cascading Style Sheets library for Python. + + http://cthedot.de/cssutils/ diff --git a/package/python-cssutils/python-cssutils.hash b/package/python-cssutils/python-cssutils.hash new file mode 100644 index 00000000..393daffb --- /dev/null +++ b/package/python-cssutils/python-cssutils.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/cssutils/json +md5 dc66d96c2d78f1687f59ac412fe9d318 cssutils-1.0.2.tar.gz +sha256 a2fcf06467553038e98fea9cfe36af2bf14063eb147a70958cfcaa8f5786acaf cssutils-1.0.2.tar.gz +# Locally computed sha256 checksums +sha256 03c570a068086ee577dcd795519ea93462b2ed2fcb6dcc4dfce56a71a2fd6e5a COPYING.LESSER diff --git a/package/python-cssutils/python-cssutils.mk b/package/python-cssutils/python-cssutils.mk new file mode 100644 index 00000000..513c3a87 --- /dev/null +++ b/package/python-cssutils/python-cssutils.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-cssutils +# +################################################################################ + +PYTHON_CSSUTILS_VERSION = 1.0.2 +PYTHON_CSSUTILS_SOURCE = cssutils-$(PYTHON_CSSUTILS_VERSION).tar.gz +PYTHON_CSSUTILS_SITE = https://files.pythonhosted.org/packages/5c/0b/c5f29d29c037e97043770b5e7c740b6252993e4b57f029b3cd03c78ddfec +PYTHON_CSSUTILS_LICENSE = LGPL-3.0+ +PYTHON_CSSUTILS_LICENSE_FILES = COPYING.LESSER +PYTHON_CSSUTILS_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-cycler/Config.in b/package/python-cycler/Config.in new file mode 100644 index 00000000..813bc69d --- /dev/null +++ b/package/python-cycler/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_CYCLER + bool "python-cycler" + help + Creates a Cycler objects much like cycler, but + includes input validation. + + https://matplotlib.org/cycler/ diff --git a/package/python-cycler/python-cycler.hash b/package/python-cycler/python-cycler.hash new file mode 100644 index 00000000..8255458b --- /dev/null +++ b/package/python-cycler/python-cycler.hash @@ -0,0 +1,4 @@ +# sha256 from https://pypi.org/project/cyclic/#files +sha256 cd7b2d1018258d7247a71425e9f26463dfb444d411c39569972f4ce586b0c9d8 cycler-0.10.0.tar.gz +# Locally computed sha256 checksums +sha256 f1218143d766da3fea66f13396b7f15df46a83303f29bf96ba6e98eb4d42f408 LICENSE diff --git a/package/python-cycler/python-cycler.mk b/package/python-cycler/python-cycler.mk new file mode 100644 index 00000000..4f1f4019 --- /dev/null +++ b/package/python-cycler/python-cycler.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-cycler +# +################################################################################ + +PYTHON_CYCLER_VERSION = 0.10.0 +PYTHON_CYCLER_SOURCE = cycler-$(PYTHON_CYCLER_VERSION).tar.gz +PYTHON_CYCLER_SITE = https://files.pythonhosted.org/packages/c2/4b/137dea450d6e1e3d474e1d873cd1d4f7d3beed7e0dc973b06e8e10d32488 +PYTHON_CYCLER_LICENSE = BSD +PYTHON_CYCLER_LICENSE_FILES = LICENSE +PYTHON_CYCLER_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-cython/Config.in.host b/package/python-cython/Config.in.host new file mode 100644 index 00000000..69d32d5a --- /dev/null +++ b/package/python-cython/Config.in.host @@ -0,0 +1,7 @@ +config BR2_PACKAGE_HOST_PYTHON_CYTHON + bool "host python-cython" + help + The Cython compiler for writing C extensions for the Python + language. + + http://cython.org/ diff --git a/package/python-cython/python-cython.hash b/package/python-cython/python-cython.hash new file mode 100644 index 00000000..168d1688 --- /dev/null +++ b/package/python-cython/python-cython.hash @@ -0,0 +1,6 @@ +# md5, sha256 from https://pypi.org/pypi/cython/json +md5 12c5e45af71dcc6dff28cdcbcbef6f39 Cython-0.29.21.tar.gz +sha256 e57acb89bd55943c8d8bf813763d20b9099cc7165c0f16b707631a7654be9cad Cython-0.29.21.tar.gz +# Locally computed sha256 checksums +sha256 a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9 LICENSE.txt +sha256 e1eb1c49a8508e8173dac30157e4a6439a44ad8846194746c424fbc3fc2b95d7 COPYING.txt diff --git a/package/python-cython/python-cython.mk b/package/python-cython/python-cython.mk new file mode 100644 index 00000000..c8dcf382 --- /dev/null +++ b/package/python-cython/python-cython.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-cython +# +################################################################################ + +# Please keep in sync with package/python3-cython/python3-cython.mk +PYTHON_CYTHON_VERSION = 0.29.21 +PYTHON_CYTHON_SOURCE = Cython-$(PYTHON_CYTHON_VERSION).tar.gz +PYTHON_CYTHON_SITE = https://files.pythonhosted.org/packages/6c/9f/f501ba9d178aeb1f5bf7da1ad5619b207c90ac235d9859961c11829d0160 +PYTHON_CYTHON_SETUP_TYPE = setuptools +PYTHON_CYTHON_LICENSE = Apache-2.0 +PYTHON_CYTHON_LICENSE_FILES = COPYING.txt LICENSE.txt + +$(eval $(host-python-package)) diff --git a/package/python-daemon/Config.in b/package/python-daemon/Config.in new file mode 100644 index 00000000..9944bb9e --- /dev/null +++ b/package/python-daemon/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_DAEMON + bool "python-daemon" + select BR2_PACKAGE_PYTHON_DOCUTILS # runtime + select BR2_PACKAGE_PYTHON_LOCKFILE # runtime + help + Library to implement a well-behaved Unix daemon process. + + https://pypi.python.org/pypi/python-daemon/ diff --git a/package/python-daemon/python-daemon.hash b/package/python-daemon/python-daemon.hash new file mode 100644 index 00000000..4f53902d --- /dev/null +++ b/package/python-daemon/python-daemon.hash @@ -0,0 +1,6 @@ +# md5, sha256 https://pypi.org/pypi/python-daemon/json +md5 3ab10a93472201214cd95c05f1923af6 python-daemon-2.2.3.tar.gz +sha256 affeca9e5adfce2666a63890af9d6aff79f670f7511899edaddca7f96593cc25 python-daemon-2.2.3.tar.gz +# Locally computed sha256 +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE.ASF-2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL-3 diff --git a/package/python-daemon/python-daemon.mk b/package/python-daemon/python-daemon.mk new file mode 100644 index 00000000..600ccf5b --- /dev/null +++ b/package/python-daemon/python-daemon.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-daemon +# +################################################################################ + +PYTHON_DAEMON_VERSION = 2.2.3 +PYTHON_DAEMON_SITE = https://pypi.python.org/packages/source/p/python-daemon +PYTHON_DAEMON_LICENSE = Apache-2.0 (library), GPL-3.0+ (test, build) +PYTHON_DAEMON_LICENSE_FILES = LICENSE.ASF-2 LICENSE.GPL-3 +PYTHON_DAEMON_SETUP_TYPE = setuptools +PYTHON_DAEMON_DEPENDENCIES = host-python-docutils + +$(eval $(python-package)) diff --git a/package/python-daemonize/Config.in b/package/python-daemonize/Config.in new file mode 100644 index 00000000..d34e35c4 --- /dev/null +++ b/package/python-daemonize/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_DAEMONIZE + bool "python-daemonize" + select BR2_PACKAGE_PYTHON_SETUPTOOLS # runtime + help + Library to enable your code run as a daemon process on + Unix-like systems. + + https://pypi.python.org/pypi/daemonize diff --git a/package/python-daemonize/python-daemonize.hash b/package/python-daemonize/python-daemonize.hash new file mode 100644 index 00000000..aa2c9045 --- /dev/null +++ b/package/python-daemonize/python-daemonize.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/daemonize/json +md5 3d64e7a0219ad22e3fca62460f893b6a daemonize-2.5.0.tar.gz +sha256 dd026e4ff8d22cb016ed2130bc738b7d4b1da597ef93c074d2adb9e4dea08bc3 daemonize-2.5.0.tar.gz +# Locally computed sha256 checksums +sha256 248d0d3147d20a09bed8f03da8ed72f47009073606dcc1bab658f942d34b29f8 LICENSE diff --git a/package/python-daemonize/python-daemonize.mk b/package/python-daemonize/python-daemonize.mk new file mode 100644 index 00000000..de146bf8 --- /dev/null +++ b/package/python-daemonize/python-daemonize.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-daemonize +# +################################################################################ + +PYTHON_DAEMONIZE_VERSION = 2.5.0 +PYTHON_DAEMONIZE_SOURCE = daemonize-$(PYTHON_DAEMONIZE_VERSION).tar.gz +PYTHON_DAEMONIZE_SITE = https://files.pythonhosted.org/packages/8c/20/96f7dbc23812cfe4cf479c87af3e4305d0d115fd1fffec32ddeee7b9c82b +PYTHON_DAEMONIZE_SETUP_TYPE = setuptools +PYTHON_DAEMONIZE_LICENSE = MIT +PYTHON_DAEMONIZE_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-daphne/0001-remove-pytest-runner-requirement.patch b/package/python-daphne/0001-remove-pytest-runner-requirement.patch new file mode 100644 index 00000000..30acf201 --- /dev/null +++ b/package/python-daphne/0001-remove-pytest-runner-requirement.patch @@ -0,0 +1,27 @@ +From f9d881cc55c89f51240f93308713216cfec793eb Mon Sep 17 00:00:00 2001 +From: Adam Duskett +Date: Sat, 3 Aug 2019 14:23:19 -0400 +Subject: [PATCH] remove pytest-runner requirement + +Setup does not actually require pytest-runner. As such, remove it. + +Signed-off-by: Adam Duskett +--- + setup.py | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/setup.py b/setup.py +index 64e94f1..4e3abb0 100755 +--- a/setup.py ++++ b/setup.py +@@ -23,7 +23,6 @@ setup( + packages=find_packages() + ["twisted.plugins"], + include_package_data=True, + install_requires=["twisted[tls]>=18.7", "autobahn>=0.18", "asgiref~=3.2"], +- setup_requires=["pytest-runner"], + extras_require={ + "tests": ["hypothesis~=3.88", "pytest~=3.10", "pytest-asyncio~=0.8"] + }, +-- +2.21.0 + diff --git a/package/python-daphne/Config.in b/package/python-daphne/Config.in new file mode 100644 index 00000000..601b2e1d --- /dev/null +++ b/package/python-daphne/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_PYTHON_DAPHNE + bool "python-daphne" + depends on BR2_INSTALL_LIBSTDCPP # python-autobahn -> python-cryptography + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_ASGIREF # runtime + select BR2_PACKAGE_PYTHON_AUTOBAHN # runtime + select BR2_PACKAGE_PYTHON_TWISTED # runtime + select BR2_PACKAGE_PYTHON_TWISTED_TLS # runtime + help + Daphne is a HTTP, HTTP2 and WebSocket protocol server for + ASGI and ASGI-HTTP, developed to power Django Channels. + It supports automatic negotiation of protocols; there's no + need for URL prefixing to determine WebSocket endpoints + versus HTTP endpoints. + + https://github.com/django/daphne + +comment "python-daphne needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_PYTHON3 diff --git a/package/python-daphne/python-daphne.hash b/package/python-daphne/python-daphne.hash new file mode 100644 index 00000000..cdf5e83e --- /dev/null +++ b/package/python-daphne/python-daphne.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/daphne/json +md5 564353eaed92659e3b113d966a0288f2 daphne-2.4.1.tar.gz0 +sha256 1e41d02d78da373c1f8504835cdca6d447b5d64c2941661d4bd968d412b6c383 daphne-2.4.1.tar.gz +# Locally computed sha256 +sha256 b846415d1b514e9c1dff14a22deb906d794bc546ca6129f950a18cd091e2a669 LICENSE diff --git a/package/python-daphne/python-daphne.mk b/package/python-daphne/python-daphne.mk new file mode 100644 index 00000000..cd4739db --- /dev/null +++ b/package/python-daphne/python-daphne.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-daphne +# +################################################################################ + +PYTHON_DAPHNE_VERSION = 2.4.1 +PYTHON_DAPHNE_SOURCE = daphne-$(PYTHON_DAPHNE_VERSION).tar.gz +PYTHON_DAPHNE_SITE = https://files.pythonhosted.org/packages/03/6c/847d1c962f8c45aa2ab0791583c4a41669d158e28fd6369ce940b8ea8417 +PYTHON_DAPHNE_SETUP_TYPE = setuptools +# https://github.com/django/daphne/blob/master/LICENSE +PYTHON_DAPHNE_LICENSE = BSD-3-Clause +PYTHON_DAPHNE_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-dataproperty/Config.in b/package/python-dataproperty/Config.in new file mode 100644 index 00000000..3de9cc68 --- /dev/null +++ b/package/python-dataproperty/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_DATAPROPERTY + bool "python-dataproperty" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_MBSTRDECODER # runtime + select BR2_PACKAGE_PYTHON_TYPEPY # runtime + help + Python library for extract property from data. + + https://github.com/thombashi/DataProperty diff --git a/package/python-dataproperty/python-dataproperty.hash b/package/python-dataproperty/python-dataproperty.hash new file mode 100644 index 00000000..bd23c461 --- /dev/null +++ b/package/python-dataproperty/python-dataproperty.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/dataproperty/json +md5 14a3e13d611d063df43304c3adeb6d12 DataProperty-0.48.1.tar.gz +sha256 96bd47c14b4aaba4780d77fa4d2c876cf35eb6848ab1df1a6338447b6c2c10e4 DataProperty-0.48.1.tar.gz +# Locally computed sha256 checksums +sha256 a93d75bcb0774e2990106380cadad6dcb2de193c55d435ffc56ba345a08b1dc2 LICENSE diff --git a/package/python-dataproperty/python-dataproperty.mk b/package/python-dataproperty/python-dataproperty.mk new file mode 100644 index 00000000..33e07bc6 --- /dev/null +++ b/package/python-dataproperty/python-dataproperty.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-dataproperty +# +################################################################################ + +PYTHON_DATAPROPERTY_VERSION = 0.48.1 +PYTHON_DATAPROPERTY_SOURCE = DataProperty-$(PYTHON_DATAPROPERTY_VERSION).tar.gz +PYTHON_DATAPROPERTY_SITE = https://files.pythonhosted.org/packages/2e/b5/d644919656adf4e7ae94b5479a3fec7497060c89292c335b27e59d66706f +PYTHON_DATAPROPERTY_SETUP_TYPE = setuptools +PYTHON_DATAPROPERTY_LICENSE = MIT +PYTHON_DATAPROPERTY_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-dateutil/Config.in b/package/python-dateutil/Config.in new file mode 100644 index 00000000..1a36a150 --- /dev/null +++ b/package/python-dateutil/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_DATEUTIL + bool "python-dateutil" + select BR2_PACKAGE_PYTHON_SIX + help + Extensions to the standard Python datetime module. + + https://dateutil.readthedocs.io diff --git a/package/python-dateutil/python-dateutil.hash b/package/python-dateutil/python-dateutil.hash new file mode 100644 index 00000000..f3dc69f2 --- /dev/null +++ b/package/python-dateutil/python-dateutil.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/python-dateutil/json +md5 f2a1d4b680b297b367a974664ca3a4f6 python-dateutil-2.8.1.tar.gz +sha256 73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c python-dateutil-2.8.1.tar.gz +# Locally computed sha256 checksums +sha256 ba00f51a0d92823b5a1cde27d8b5b9d2321e67ed8da9bc163eff96d5e17e577e LICENSE diff --git a/package/python-dateutil/python-dateutil.mk b/package/python-dateutil/python-dateutil.mk new file mode 100644 index 00000000..759261d2 --- /dev/null +++ b/package/python-dateutil/python-dateutil.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-dateutil +# +################################################################################ + +PYTHON_DATEUTIL_VERSION = 2.8.1 +PYTHON_DATEUTIL_SITE = https://files.pythonhosted.org/packages/be/ed/5bbc91f03fa4c839c4c7360375da77f9659af5f7086b7a7bdda65771c8e0 +PYTHON_DATEUTIL_SETUP_TYPE = setuptools +PYTHON_DATEUTIL_LICENSE = BSD-3-Clause +PYTHON_DATEUTIL_LICENSE_FILES = LICENSE +PYTHON_DATEUTIL_DEPENDENCIES = host-python-setuptools-scm + +$(eval $(python-package)) diff --git a/package/python-decorator/Config.in b/package/python-decorator/Config.in new file mode 100644 index 00000000..e7ec00cd --- /dev/null +++ b/package/python-decorator/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_DECORATOR + bool "python-decorator" + help + Better living through Python with decorators + + https://github.com/micheles/decorator diff --git a/package/python-decorator/python-decorator.hash b/package/python-decorator/python-decorator.hash new file mode 100644 index 00000000..77b48d84 --- /dev/null +++ b/package/python-decorator/python-decorator.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/decorator/json +md5 933981f288c4230816b5beee8d40e6ea decorator-4.4.1.tar.gz +sha256 54c38050039232e1db4ad7375cfce6748d7b41c29e95a081c8a6d2c30364a2ce decorator-4.4.1.tar.gz +# Locally computed sha256 checksums +sha256 fd11660cabf0532082c45706862fafc294907ec7f8e217818240a4999806782e LICENSE.txt diff --git a/package/python-decorator/python-decorator.mk b/package/python-decorator/python-decorator.mk new file mode 100644 index 00000000..7c4b353a --- /dev/null +++ b/package/python-decorator/python-decorator.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# python-decorator +# +################################################################################ + +# Please keep in sync with package/python3-decorator/python3-decorator.mk +PYTHON_DECORATOR_VERSION = 4.4.1 +PYTHON_DECORATOR_SITE = https://files.pythonhosted.org/packages/dc/c3/9d378af09f5737cfd524b844cd2fbb0d2263a35c11d712043daab290144d +PYTHON_DECORATOR_SOURCE = decorator-$(PYTHON_DECORATOR_VERSION).tar.gz +PYTHON_DECORATOR_LICENSE = BSD-2-Clause +PYTHON_DECORATOR_LICENSE_FILES = LICENSE.txt +PYTHON_DECORATOR_CPE_ID_VENDOR = python +PYTHON_DECORATOR_CPE_ID_PRODUCT = decorator +PYTHON_DECORATOR_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-defusedxml/Config.in b/package/python-defusedxml/Config.in new file mode 100644 index 00000000..85285da5 --- /dev/null +++ b/package/python-defusedxml/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_DEFUSEDXML + bool "python-defusedxml" + help + XML bomb protection for Python stdlib modules + + https://pypi.org/project/defusedxml/ diff --git a/package/python-defusedxml/python-defusedxml.hash b/package/python-defusedxml/python-defusedxml.hash new file mode 100644 index 00000000..c782a97b --- /dev/null +++ b/package/python-defusedxml/python-defusedxml.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/defusedxml/json +md5 a59741f675c4cba649de40a99f732897 defusedxml-0.6.0.tar.gz +sha256 f684034d135af4c6cbb949b8a4d2ed61634515257a67299e5f940fbaa34377f5 defusedxml-0.6.0.tar.gz +# Locally computed sha256 checksums +sha256 b80ce9da8c42a1f91079627fbbe2bf27210ae108a0ffe5f077d5b08e076c24c8 LICENSE diff --git a/package/python-defusedxml/python-defusedxml.mk b/package/python-defusedxml/python-defusedxml.mk new file mode 100644 index 00000000..6d2a9aff --- /dev/null +++ b/package/python-defusedxml/python-defusedxml.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-defusedxml +# +################################################################################ + +PYTHON_DEFUSEDXML_VERSION = 0.6.0 +PYTHON_DEFUSEDXML_SOURCE = defusedxml-$(PYTHON_DEFUSEDXML_VERSION).tar.gz +PYTHON_DEFUSEDXML_SITE = https://files.pythonhosted.org/packages/a4/5f/f8aa58ca0cf01cbcee728abc9d88bfeb74e95e6cb4334cfd5bed5673ea77 +PYTHON_DEFUSEDXML_SETUP_TYPE = setuptools +PYTHON_DEFUSEDXML_LICENSE = Python-2.0 +PYTHON_DEFUSEDXML_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-dialog/Config.in b/package/python-dialog/Config.in new file mode 100644 index 00000000..c1fdb237 --- /dev/null +++ b/package/python-dialog/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_DIALOG + bool "python-dialog" + depends on BR2_PACKAGE_PYTHON + depends on BR2_USE_MMU # dialog + select BR2_PACKAGE_DIALOG + help + A Python interface to the UNIX dialog utility and + mostly-compatible programs. + + http://pythondialog.sourceforge.net/ diff --git a/package/python-dialog/python-dialog.hash b/package/python-dialog/python-dialog.hash new file mode 100644 index 00000000..8f84e198 --- /dev/null +++ b/package/python-dialog/python-dialog.hash @@ -0,0 +1,5 @@ +# Locally computed after verifying +# https://sourceforge.net/projects/pythondialog/files/pythondialog/3.4.0/python3-pythondialog-3.4.0.tar.bz2.asc +# with key 9B6F19FB52965E6C21FE76142A205688F8489BDD +sha256 8978d355c8db6728eeb9e23b39449b14597f1c76cb06dc72462642ca7cde46a0 python2-pythondialog-3.4.0.tar.bz2 +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 COPYING diff --git a/package/python-dialog/python-dialog.mk b/package/python-dialog/python-dialog.mk new file mode 100644 index 00000000..d5d4a4ce --- /dev/null +++ b/package/python-dialog/python-dialog.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-dialog +# +################################################################################ + +PYTHON_DIALOG_VERSION = 3.4.0 +PYTHON_DIALOG_SOURCE = python2-pythondialog-$(PYTHON_DIALOG_VERSION).tar.bz2 +PYTHON_DIALOG_SITE = http://downloads.sourceforge.net/project/pythondialog/pythondialog/$(PYTHON_DIALOG_VERSION) +PYTHON_DIALOG_LICENSE = LGPL-2.1+ +PYTHON_DIALOG_LICENSE_FILES = COPYING +PYTHON_DIALOG_SETUP_TYPE = distutils +PYTHON_DIALOG_DEPENDENCIES = dialog + +$(eval $(python-package)) diff --git a/package/python-dialog3/Config.in b/package/python-dialog3/Config.in new file mode 100644 index 00000000..cd076085 --- /dev/null +++ b/package/python-dialog3/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_DIALOG3 + bool "python-dialog3" + depends on BR2_PACKAGE_PYTHON3 + depends on BR2_USE_MMU # dialog + select BR2_PACKAGE_DIALOG + help + A Python 3 only interface to the UNIX dialog utility and + mostly-compatible programs. + + http://pythondialog.sourceforge.net/ diff --git a/package/python-dialog3/python-dialog3.hash b/package/python-dialog3/python-dialog3.hash new file mode 100644 index 00000000..83e26c57 --- /dev/null +++ b/package/python-dialog3/python-dialog3.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/pythondialog/json +md5 3d5ebc33e85f6313964f5eef720dab19 pythondialog-3.4.0.tar.bz2 +# Locally computed +sha256 019cdbffe3f61d32d6fb158ce48a767478af2aac2f31fb40460b39aefae604fe pythondialog-3.4.0.tar.bz2 +sha256 a9bdde5616ecdd1e980b44f360600ee8783b1f99b8cc83a2beb163a0a390e861 COPYING diff --git a/package/python-dialog3/python-dialog3.mk b/package/python-dialog3/python-dialog3.mk new file mode 100644 index 00000000..4048447e --- /dev/null +++ b/package/python-dialog3/python-dialog3.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-dialog3 +# +################################################################################ + +PYTHON_DIALOG3_VERSION = 3.4.0 +PYTHON_DIALOG3_SOURCE = pythondialog-$(PYTHON_DIALOG3_VERSION).tar.bz2 +PYTHON_DIALOG3_SITE = https://pypi.python.org/packages/fa/f4/686742f01ebb5863d4c5e1acab620acfed0fe97280a26b4ed25917f4f333 +PYTHON_DIALOG3_LICENSE = LGPL-2.1+ +PYTHON_DIALOG3_LICENSE_FILES = COPYING +PYTHON_DIALOG3_SETUP_TYPE = distutils +PYTHON_DIALOG3_DEPENDENCIES = dialog + +$(eval $(python-package)) diff --git a/package/python-dicttoxml/Config.in b/package/python-dicttoxml/Config.in new file mode 100644 index 00000000..e38a5f79 --- /dev/null +++ b/package/python-dicttoxml/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_DICTTOXML + bool "python-dicttoxml" + select BR2_PACKAGE_PYTHON_PYEXPAT if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_PYEXPAT if BR2_PACKAGE_PYTHON3 + help + Converts a Python dictionary or other native data type into + a valid XML string. + + https://github.com/quandyfactory/dicttoxml diff --git a/package/python-dicttoxml/python-dicttoxml.hash b/package/python-dicttoxml/python-dicttoxml.hash new file mode 100644 index 00000000..45c9fc8c --- /dev/null +++ b/package/python-dicttoxml/python-dicttoxml.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/dicttoxml/json +md5 ec5643a048cf32dad3c28db236b923e4 dicttoxml-1.7.4.tar.gz +# Locally computed +sha256 ea44cc4ec6c0f85098c57a431a1ee891b3549347b07b7414c8a24611ecf37e45 dicttoxml-1.7.4.tar.gz +sha256 4514114bd9da0b2fbf8c4fa264c0e6cc80fd41e6ac7f09d7a39a215662951c7c LICENCE.txt diff --git a/package/python-dicttoxml/python-dicttoxml.mk b/package/python-dicttoxml/python-dicttoxml.mk new file mode 100644 index 00000000..537afff6 --- /dev/null +++ b/package/python-dicttoxml/python-dicttoxml.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-dicttoxml +# +################################################################################ + +PYTHON_DICTTOXML_VERSION = 1.7.4 +PYTHON_DICTTOXML_SOURCE = dicttoxml-$(PYTHON_DICTTOXML_VERSION).tar.gz +PYTHON_DICTTOXML_SITE = https://pypi.python.org/packages/74/36/534db111db9e7610a41641a1f6669a964aacaf51858f466de264cc8dcdd9 +PYTHON_DICTTOXML_SETUP_TYPE = distutils +PYTHON_DICTTOXML_LICENSE = GPL-2.0 +PYTHON_DICTTOXML_LICENSE_FILES = LICENCE.txt + +$(eval $(python-package)) diff --git a/package/python-django-enumfields/Config.in b/package/python-django-enumfields/Config.in new file mode 100644 index 00000000..58dea365 --- /dev/null +++ b/package/python-django-enumfields/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_DJANGO_ENUMFIELDS + bool "python-django-enumfields" + select BR2_PACKAGE_PYTHON_ENUM34 if BR2_PACKAGE_PYTHON # runtime + help + Real Python Enums for Django. + + https://github.com/hzdg/django-enumfields diff --git a/package/python-django-enumfields/python-django-enumfields.hash b/package/python-django-enumfields/python-django-enumfields.hash new file mode 100644 index 00000000..84eb028e --- /dev/null +++ b/package/python-django-enumfields/python-django-enumfields.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/django-enumfields/json +md5 c9725a2c31ca2949d111815742335279 django-enumfields-1.0.0.tar.gz +sha256 5b0e2dd5973337717ca6bd5a7d9e167e6ae01203c160d4761b88837c4678f219 django-enumfields-1.0.0.tar.gz +# Locally computed sha256 checksums +sha256 5548de8c163dc57bd0a4f5772f1509f2c04f1390251c98ebf060c9d52a223f57 LICENSE diff --git a/package/python-django-enumfields/python-django-enumfields.mk b/package/python-django-enumfields/python-django-enumfields.mk new file mode 100644 index 00000000..0121bd11 --- /dev/null +++ b/package/python-django-enumfields/python-django-enumfields.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-django-enumfields +# +################################################################################ + +PYTHON_DJANGO_ENUMFIELDS_VERSION = 1.0.0 +PYTHON_DJANGO_ENUMFIELDS_SOURCE = django-enumfields-$(PYTHON_DJANGO_ENUMFIELDS_VERSION).tar.gz +PYTHON_DJANGO_ENUMFIELDS_SITE = https://files.pythonhosted.org/packages/b7/56/3f4e8d8ef6d5577a1b75b3cfae6dff819afd030e3a519a326ec7a7a0b74f +PYTHON_DJANGO_ENUMFIELDS_SETUP_TYPE = setuptools +PYTHON_DJANGO_ENUMFIELDS_LICENSE = MIT +PYTHON_DJANGO_ENUMFIELDS_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-django/Config.in b/package/python-django/Config.in new file mode 100644 index 00000000..6748d42e --- /dev/null +++ b/package/python-django/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_PYTHON_DJANGO + bool "python-django" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON3_UNICODEDATA + select BR2_PACKAGE_PYTHON3_PYEXPAT + select BR2_PACKAGE_PYTHON_ASGIREF # runtime + select BR2_PACKAGE_PYTHON_PYTZ # runtime + select BR2_PACKAGE_PYTHON_SETUPTOOLS # runtime + select BR2_PACKAGE_PYTHON_SQLPARSE # runtime + + help + Django is a high-level Python Web framework that encourages + rapid development and clean, pragmatic design. It takes your + Web applications from concept to launch in a matter of + hours. Django takes care of user authentication, content + administration, site maps, RSS feeds, user comments and many + more tasks. Django takes security seriously and helps + developers avoid many common security mistakes + + https://www.djangoproject.com/ diff --git a/package/python-django/python-django.hash b/package/python-django/python-django.hash new file mode 100644 index 00000000..2f5f96a5 --- /dev/null +++ b/package/python-django/python-django.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/django/json +md5 46e306a5a775cace03a03d5a158ff767 Django-3.2.5.tar.gz +sha256 3da05fea54fdec2315b54a563d5b59f3b4e2b1e69c3a5841dda35019c01855cd Django-3.2.5.tar.gz +# Locally computed sha256 checksums +sha256 b846415d1b514e9c1dff14a22deb906d794bc546ca6129f950a18cd091e2a669 LICENSE diff --git a/package/python-django/python-django.mk b/package/python-django/python-django.mk new file mode 100644 index 00000000..1603063b --- /dev/null +++ b/package/python-django/python-django.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# python-django +# +################################################################################ + +PYTHON_DJANGO_VERSION = 3.2.5 +PYTHON_DJANGO_SOURCE = Django-$(PYTHON_DJANGO_VERSION).tar.gz +# The official Django site has an unpractical URL +PYTHON_DJANGO_SITE = https://files.pythonhosted.org/packages/95/3b/468fa33908feefac03c0a773bd73bb8a1ab1fb4ee06e9dd62d24981f4603 +PYTHON_DJANGO_LICENSE = BSD-3-Clause +PYTHON_DJANGO_LICENSE_FILES = LICENSE +PYTHON_DJANGO_CPE_ID_VENDOR = djangoproject +PYTHON_DJANGO_CPE_ID_PRODUCT = django +PYTHON_DJANGO_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-dnspython/Config.in b/package/python-dnspython/Config.in new file mode 100644 index 00000000..99fd6a9a --- /dev/null +++ b/package/python-dnspython/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_DNSPYTHON + bool "python-dnspython" + help + A powerful DNS toolkit for python. + + http://www.dnspython.org diff --git a/package/python-dnspython/python-dnspython.hash b/package/python-dnspython/python-dnspython.hash new file mode 100644 index 00000000..af09d51c --- /dev/null +++ b/package/python-dnspython/python-dnspython.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/dnspython/json +md5 bc9ca3b3a82164667d5730ec6d5248a2 dnspython-1.16.0.zip +sha256 36c5e8e38d4369a08b6780b7f27d790a292b2b08eea01607865bf0936c558e01 dnspython-1.16.0.zip +# Locally computed sha256 checksums +sha256 c3ea3ff5654b329c19d3bc5f7481af623c3dded4a6145585499f843ad3d741cd LICENSE diff --git a/package/python-dnspython/python-dnspython.mk b/package/python-dnspython/python-dnspython.mk new file mode 100644 index 00000000..ed116872 --- /dev/null +++ b/package/python-dnspython/python-dnspython.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# python-dnspython +# +################################################################################ + +PYTHON_DNSPYTHON_VERSION = 1.16.0 +PYTHON_DNSPYTHON_SOURCE = dnspython-$(PYTHON_DNSPYTHON_VERSION).zip +PYTHON_DNSPYTHON_SITE = https://files.pythonhosted.org/packages/ec/c5/14bcd63cb6d06092a004793399ec395405edf97c2301dfdc146dfbd5beed +PYTHON_DNSPYTHON_LICENSE = ISC +PYTHON_DNSPYTHON_LICENSE_FILES = LICENSE +PYTHON_DNSPYTHON_SETUP_TYPE = setuptools + +define PYTHON_DNSPYTHON_EXTRACT_CMDS + $(UNZIP) -d $(@D) $(PYTHON_DNSPYTHON_DL_DIR)/$(PYTHON_DNSPYTHON_SOURCE) + mv $(@D)/dnspython-$(PYTHON_DNSPYTHON_VERSION)/* $(@D) + $(RM) -r $(@D)/dnspython-$(PYTHON_DNSPYTHON_VERSION) +endef + +define HOST_PYTHON_DNSPYTHON_EXTRACT_CMDS + $(UNZIP) -d $(@D) $(HOST_PYTHON_DNSPYTHON_DL_DIR)/$(HOST_PYTHON_DNSPYTHON_SOURCE) + mv $(@D)/dnspython-$(HOST_PYTHON_DNSPYTHON_VERSION)/* $(@D) + $(RM) -r $(@D)/dnspython-$(HOST_PYTHON_DNSPYTHON_VERSION) +endef + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-docker-pycreds/Config.in b/package/python-docker-pycreds/Config.in new file mode 100644 index 00000000..584c1dbc --- /dev/null +++ b/package/python-docker-pycreds/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_DOCKER_PYCREDS + bool "python-docker-pycreds" + select BR2_PACKAGE_PYTHON_SIX # runtime + help + Python bindings for the docker credentials store API. + + https://github.com/shin-/dockerpy-creds diff --git a/package/python-docker-pycreds/python-docker-pycreds.hash b/package/python-docker-pycreds/python-docker-pycreds.hash new file mode 100644 index 00000000..d93a3a1d --- /dev/null +++ b/package/python-docker-pycreds/python-docker-pycreds.hash @@ -0,0 +1,4 @@ +# md5 and sha256 from https://pypi.python.org/pypi/docker-pycreds/json +md5 322f570cea6b4661c6ac335683988e18 docker-pycreds-0.4.0.tar.gz +sha256 6ce3270bcaf404cc4c3e27e4b6c70d3521deae82fb508767870fdbf772d584d4 docker-pycreds-0.4.0.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE diff --git a/package/python-docker-pycreds/python-docker-pycreds.mk b/package/python-docker-pycreds/python-docker-pycreds.mk new file mode 100644 index 00000000..6575ada0 --- /dev/null +++ b/package/python-docker-pycreds/python-docker-pycreds.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-docker-pycreds +# +################################################################################ + +PYTHON_DOCKER_PYCREDS_VERSION = 0.4.0 +PYTHON_DOCKER_PYCREDS_SOURCE = docker-pycreds-$(PYTHON_DOCKER_PYCREDS_VERSION).tar.gz +PYTHON_DOCKER_PYCREDS_SITE = https://files.pythonhosted.org/packages/c5/e6/d1f6c00b7221e2d7c4b470132c931325c8b22c51ca62417e300f5ce16009 +PYTHON_DOCKER_PYCREDS_SETUP_TYPE = setuptools +PYTHON_DOCKER_PYCREDS_LICENSE = Apache-2.0 +PYTHON_DOCKER_PYCREDS_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-docker/Config.in b/package/python-docker/Config.in new file mode 100644 index 00000000..df5e4887 --- /dev/null +++ b/package/python-docker/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_PYTHON_DOCKER + bool "python-docker" + # docker-engine may be running on another host, so no dependency + select BR2_PACKAGE_PYTHON_SSL if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_SSL if BR2_PACKAGE_PYTHON3 # runtime + select BR2_PACKAGE_PYTHON_BACKPORTS_SSL_MATCH_HOSTNAME \ + if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON_REQUESTS # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON_WEBSOCKET_CLIENT # runtime + help + A Python library for the Docker Engine API. + + https://github.com/docker/docker-py diff --git a/package/python-docker/python-docker.hash b/package/python-docker/python-docker.hash new file mode 100644 index 00000000..0006a8a7 --- /dev/null +++ b/package/python-docker/python-docker.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/docker/json +md5 e1e8dc73e3220fe9eec1faf80b0290de docker-4.1.0.tar.gz +sha256 6e06c5e70ba4fad73e35f00c55a895a448398f3ada7faae072e2bb01348bafc1 docker-4.1.0.tar.gz +# Locally computed sha256 checksums +sha256 f2f0b07fa5e492c11d27aa0d2f3f1a0e64b9d17f32d8aa489ae2af9609af33b2 LICENSE diff --git a/package/python-docker/python-docker.mk b/package/python-docker/python-docker.mk new file mode 100644 index 00000000..f476a1ba --- /dev/null +++ b/package/python-docker/python-docker.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-docker +# +################################################################################ + +PYTHON_DOCKER_VERSION = 4.1.0 +PYTHON_DOCKER_SOURCE = docker-$(PYTHON_DOCKER_VERSION).tar.gz +PYTHON_DOCKER_SITE = https://files.pythonhosted.org/packages/de/54/a822d7116ff2f726f3da2b3e6c87659657bdcb7a36e382860ed505ed5e45 +PYTHON_DOCKER_SETUP_TYPE = setuptools +PYTHON_DOCKER_LICENSE = Apache-2.0 +PYTHON_DOCKER_LICENSE_FILES = LICENSE +PYTHON_DOCKER_CPE_ID_VENDOR = docker +PYTHON_DOCKER_CPE_ID_PRODUCT = docker-py + +$(eval $(python-package)) diff --git a/package/python-dockerpty/Config.in b/package/python-dockerpty/Config.in new file mode 100644 index 00000000..f0bd85a6 --- /dev/null +++ b/package/python-dockerpty/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_DOCKERPTY + bool "python-dockerpty" + select BR2_PACKAGE_PYTHON_SIX # runtime + help + Python library to use the pseudo-tty of a docker container. + + https://github.com/d11wtq/dockerpty diff --git a/package/python-dockerpty/python-dockerpty.hash b/package/python-dockerpty/python-dockerpty.hash new file mode 100644 index 00000000..f5ed252b --- /dev/null +++ b/package/python-dockerpty/python-dockerpty.hash @@ -0,0 +1,4 @@ +# md5 from https://pypi.python.org/pypi/dockerpty/json, sha256 locally computed +md5 028bacb34536f3ee6a2ccd668c27e8e4 dockerpty-0.4.1.tar.gz +sha256 69a9d69d573a0daa31bcd1c0774eeed5c15c295fe719c61aca550ed1393156ce dockerpty-0.4.1.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE.txt diff --git a/package/python-dockerpty/python-dockerpty.mk b/package/python-dockerpty/python-dockerpty.mk new file mode 100644 index 00000000..e6fe6e3b --- /dev/null +++ b/package/python-dockerpty/python-dockerpty.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-dockerpty +# +################################################################################ + +PYTHON_DOCKERPTY_VERSION = 0.4.1 +PYTHON_DOCKERPTY_SOURCE = dockerpty-$(PYTHON_DOCKERPTY_VERSION).tar.gz +PYTHON_DOCKERPTY_SITE = https://pypi.python.org/packages/8d/ee/e9ecce4c32204a6738e0a5d5883d3413794d7498fe8b06f44becc028d3ba +PYTHON_DOCKERPTY_SETUP_TYPE = setuptools +PYTHON_DOCKERPTY_LICENSE = Apache-2.0 +PYTHON_DOCKERPTY_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-docopt/Config.in b/package/python-docopt/Config.in new file mode 100644 index 00000000..9942d671 --- /dev/null +++ b/package/python-docopt/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PYTHON_DOCOPT + bool "python-docopt" + help + docopt helps you create most beautiful command-line + interfaces easily. The option parser is generated based on + the beautiful help message that you write yourself. This way + you don't need to write this stupid repeatable parser-code, + and instead can write only the help message-- the way you + want it. + + https://github.com/docopt/docopt diff --git a/package/python-docopt/python-docopt.hash b/package/python-docopt/python-docopt.hash new file mode 100644 index 00000000..eebfd5cc --- /dev/null +++ b/package/python-docopt/python-docopt.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 2113eed1e7fbbcd43fb7ee6a977fb02d0b482753586c9dc1a8e3b7d541426e99 python-docopt-0.6.2.tar.gz +sha256 3d5df78f592ff2433c3c6ce4984091b7f497059ddb8c6b08a061ba48e37b67f2 LICENSE-MIT diff --git a/package/python-docopt/python-docopt.mk b/package/python-docopt/python-docopt.mk new file mode 100644 index 00000000..f87d2f85 --- /dev/null +++ b/package/python-docopt/python-docopt.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-docopt +# +################################################################################ + +PYTHON_DOCOPT_VERSION = 0.6.2 +PYTHON_DOCOPT_SITE = $(call github,docopt,docopt,$(PYTHON_DOCOPT_VERSION)) +PYTHON_DOCOPT_LICENSE = MIT +PYTHON_DOCOPT_LICENSE_FILES = LICENSE-MIT +PYTHON_DOCOPT_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-docutils/0001-Update-setup.py.patch b/package/python-docutils/0001-Update-setup.py.patch new file mode 100644 index 00000000..3fb34a97 --- /dev/null +++ b/package/python-docutils/0001-Update-setup.py.patch @@ -0,0 +1,64 @@ +From 583e59ccf72a02c2a6f0399f29f622c7f2f4a932 Mon Sep 17 00:00:00 2001 +From: milde +Date: Sun, 1 Sep 2019 19:39:36 +0000 +Subject: [PATCH] Update setup.py + +Python 3.4 no longer supported, +more languages supported (and Lithuanian accepted by PyPi). + +git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk@8383 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 + +[Asaf: adjust upstream patch to 0.15.2] +Signed-off-by: Asaf Kahlon +--- + setup.py | 14 +++++++++++++- + 1 file changed, 13 insertions(+), 1 deletion(-) + +diff --git a/setup.py b/setup.py +index f801ea2..5c1ebfd 100755 +--- a/setup.py ++++ b/setup.py +@@ -7,6 +7,10 @@ import os + import glob + try: + import setuptools ++except ImportError: ++ print('Warning: Could not load package `setuptools`.') ++ print('Actions requiring `setuptools` instead of `distutils` will fail') ++try: + from distutils.core import setup, Command + from distutils.command.build import build + from distutils.command.build_py import build_py +@@ -123,7 +127,7 @@ what-you-see-is-what-you-get plaintext markup syntax.""", # wrap at col 60 + 'maintainer_email': 'docutils-develop@lists.sourceforge.net', + 'license': 'public domain, Python, 2-Clause BSD, GPL 3 (see COPYING.txt)', + 'platforms': 'OS-independent', +- 'python_requires': '>=2.6, !=3.0.*, !=3.1.*, !=3.2.*', ++ 'python_requires': '>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*', + 'package_dir': {'docutils': 'docutils', + 'docutils.tools': 'tools'}, + 'packages': ['docutils', +@@ -213,14 +219,20 @@ classifiers = [ + 'Natural Language :: Chinese (Simplified)', + 'Natural Language :: Chinese (Traditional)', + 'Natural Language :: Czech', ++ 'Natural Language :: Danish', + 'Natural Language :: Dutch', + 'Natural Language :: Esperanto', + 'Natural Language :: Finnish', + 'Natural Language :: French', + 'Natural Language :: Galician', + 'Natural Language :: German', ++ 'Natural Language :: Hebrew', + 'Natural Language :: Italian', + 'Natural Language :: Japanese', ++ 'Natural Language :: Korean', ++ 'Natural Language :: Latvian', ++ 'Natural Language :: Lithuanian', ++ 'Natural Language :: Persian', + 'Natural Language :: Polish', + 'Natural Language :: Portuguese (Brazilian)', + 'Natural Language :: Russian', +-- +2.20.1 +k diff --git a/package/python-docutils/Config.in b/package/python-docutils/Config.in new file mode 100644 index 00000000..e7bf7e63 --- /dev/null +++ b/package/python-docutils/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_DOCUTILS + bool "python-docutils" + help + Docutils is a modular system for processing documentation + into useful formats, such as HTML, XML, and LaTeX. For input + Docutils supports reStructuredText, an easy-to-read, + what-you-see-is-what-you-get plaintext markup syntax. + + http://docutils.sourceforge.net/ diff --git a/package/python-docutils/python-docutils.hash b/package/python-docutils/python-docutils.hash new file mode 100644 index 00000000..ccccca10 --- /dev/null +++ b/package/python-docutils/python-docutils.hash @@ -0,0 +1,4 @@ +# md5 from https://pypi.python.org/pypi/docutils/json, sha256 locally computed +md5 e26a308d8000b0bed7416a633217c676 docutils-0.15.2.tar.gz +sha256 a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99 docutils-0.15.2.tar.gz +sha256 efa0c85aa99ea5b4781240031b0d02af54d7b5554c87ad2b2bea9ba490f6663f COPYING.txt diff --git a/package/python-docutils/python-docutils.mk b/package/python-docutils/python-docutils.mk new file mode 100644 index 00000000..9a42d3e5 --- /dev/null +++ b/package/python-docutils/python-docutils.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-docutils +# +################################################################################ + +PYTHON_DOCUTILS_VERSION = 0.15.2 +PYTHON_DOCUTILS_SOURCE = docutils-$(PYTHON_DOCUTILS_VERSION).tar.gz +PYTHON_DOCUTILS_SITE = https://files.pythonhosted.org/packages/93/22/953e071b589b0b1fee420ab06a0d15e5aa0c7470eb9966d60393ce58ad61 +PYTHON_DOCUTILS_LICENSE = Public Domain, BSD-2-Clause, GPL-3.0 (emacs mode), other +PYTHON_DOCUTILS_LICENSE_FILES = COPYING.txt +PYTHON_DOCUTILS_SETUP_TYPE = distutils + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-dominate/Config.in b/package/python-dominate/Config.in new file mode 100644 index 00000000..35e9a0c8 --- /dev/null +++ b/package/python-dominate/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_DOMINATE + bool "python-dominate" + help + Dominate is a Python library for creating and manipulating + HTML documents using an elegant DOM API. + + http://github.com/Knio/dominate/ diff --git a/package/python-dominate/python-dominate.hash b/package/python-dominate/python-dominate.hash new file mode 100644 index 00000000..168e56e7 --- /dev/null +++ b/package/python-dominate/python-dominate.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/dominate/json +md5 27d3aa7e0d67902c505e248e705e5e2e dominate-2.4.0.tar.gz +sha256 a92474b4312bd8b4c1789792f3ec8c571cd8afa8e7502a2b1c64dd48cd67e59c dominate-2.4.0.tar.gz +# Locally computed sha256 checksums +sha256 9ccf26cfe845e0eb8bb58053e47366e7ab6b697ae010f7650978d4b71b7d1fc1 LICENSE.txt diff --git a/package/python-dominate/python-dominate.mk b/package/python-dominate/python-dominate.mk new file mode 100644 index 00000000..e87b6842 --- /dev/null +++ b/package/python-dominate/python-dominate.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-dominate +# +################################################################################ + +PYTHON_DOMINATE_VERSION = 2.4.0 +PYTHON_DOMINATE_SOURCE = dominate-$(PYTHON_DOMINATE_VERSION).tar.gz +PYTHON_DOMINATE_SITE = https://files.pythonhosted.org/packages/46/dd/0fde17069c908951941475eee110c84467591caa1cd8ca30136294c26621 +PYTHON_DOMINATE_SETUP_TYPE = setuptools +PYTHON_DOMINATE_LICENSE = LGPL-3.0+ +PYTHON_DOMINATE_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-dpkt/Config.in b/package/python-dpkt/Config.in new file mode 100644 index 00000000..9bd7a98d --- /dev/null +++ b/package/python-dpkt/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_DPKT + bool "python-dpkt" + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 # runtime + help + Fast, simple packet creation / parsing, with definitions + for the basic TCP/IP protocols. + + https://github.com/kbandla/dpkt diff --git a/package/python-dpkt/python-dpkt.hash b/package/python-dpkt/python-dpkt.hash new file mode 100644 index 00000000..b8b53fd0 --- /dev/null +++ b/package/python-dpkt/python-dpkt.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/dpkt/json +md5 b204a5434fe29749de539150e00e762e dpkt-1.9.2.tar.gz +sha256 52a92ecd5ca04d5bd852bb11cb2eac4bbe38b42a7c472e0d950eeb9f82a81e54 dpkt-1.9.2.tar.gz +# Locally computed sha256 checksums +sha256 4c5ffde575425591cbd51410219a6b98bbbb717e0c5784187e356653da8e5095 LICENSE diff --git a/package/python-dpkt/python-dpkt.mk b/package/python-dpkt/python-dpkt.mk new file mode 100644 index 00000000..aade014f --- /dev/null +++ b/package/python-dpkt/python-dpkt.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-dpkt +# +################################################################################ + +PYTHON_DPKT_VERSION = 1.9.2 +PYTHON_DPKT_SOURCE = dpkt-$(PYTHON_DPKT_VERSION).tar.gz +PYTHON_DPKT_SITE = https://files.pythonhosted.org/packages/1c/25/0aebea939ea70d31a7ff8884e5ca577eddb9cfeac626398fe782d4e2f6a2 +PYTHON_DPKT_SETUP_TYPE = setuptools +PYTHON_DPKT_LICENSE = BSD-3-Clause +PYTHON_DPKT_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-ecdsa/Config.in b/package/python-ecdsa/Config.in new file mode 100644 index 00000000..eb0d6580 --- /dev/null +++ b/package/python-ecdsa/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_ECDSA + bool "python-ecdsa" + select BR2_PACKAGE_PYTHON_SIX # runtime + help + ECDSA cryptographic signature library (pure python). + + http://github.com/warner/python-ecdsa diff --git a/package/python-ecdsa/python-ecdsa.hash b/package/python-ecdsa/python-ecdsa.hash new file mode 100644 index 00000000..efe396bf --- /dev/null +++ b/package/python-ecdsa/python-ecdsa.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/ecdsa/json +md5 821d543047941dd26f543f62912230d4 ecdsa-0.15.tar.gz +sha256 8f12ac317f8a1318efa75757ef0a651abe12e51fc1af8838fb91079445227277 ecdsa-0.15.tar.gz +# Locally computed sha256 checksums +sha256 3eca9845773d2e5b8cc9d8c119d345f00a4806e4bd660d4a3d6cdf9c0e9d8bb2 LICENSE diff --git a/package/python-ecdsa/python-ecdsa.mk b/package/python-ecdsa/python-ecdsa.mk new file mode 100644 index 00000000..1178c378 --- /dev/null +++ b/package/python-ecdsa/python-ecdsa.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-ecdsa +# +################################################################################ + +PYTHON_ECDSA_VERSION = 0.15 +PYTHON_ECDSA_SOURCE = ecdsa-$(PYTHON_ECDSA_VERSION).tar.gz +PYTHON_ECDSA_SITE = https://files.pythonhosted.org/packages/e3/7c/b508ade1feb47cd79222e06d85e477f5cfc4fb0455ad3c70eb6330fc49aa +PYTHON_ECDSA_SETUP_TYPE = setuptools +PYTHON_ECDSA_LICENSE = MIT +PYTHON_ECDSA_LICENSE_FILES = LICENSE +PYTHON_ECDSA_CPE_ID_VENDOR = python-ecdsa_project + +$(eval $(python-package)) diff --git a/package/python-engineio/Config.in b/package/python-engineio/Config.in new file mode 100644 index 00000000..b12db922 --- /dev/null +++ b/package/python-engineio/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_ENGINEIO + bool "python-engineio" + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 + help + Engine.IO server. + + http://github.com/miguelgrinberg/python-engineio/ diff --git a/package/python-engineio/python-engineio.hash b/package/python-engineio/python-engineio.hash new file mode 100644 index 00000000..ef852cf1 --- /dev/null +++ b/package/python-engineio/python-engineio.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/python-engineio/json +md5 e6ea8b3f2f32eeeb02014c46092f2adb python-engineio-3.12.1.tar.gz +sha256 2481732d93646998f7372ef0ecf003af7817b82720b881db173c3d50b4887916 python-engineio-3.12.1.tar.gz +# Locally computed sha256 checksums +sha256 c9e97d3dbc1fbbcdb4f7808b282cd646db887aff4f5313fe6bbe8d4c31405a9c LICENSE diff --git a/package/python-engineio/python-engineio.mk b/package/python-engineio/python-engineio.mk new file mode 100644 index 00000000..4f835da0 --- /dev/null +++ b/package/python-engineio/python-engineio.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# python-engineio +# +################################################################################ + +PYTHON_ENGINEIO_VERSION = 3.12.1 +PYTHON_ENGINEIO_SITE = https://files.pythonhosted.org/packages/71/5d/620b75396ce993001cbccc80dd786ab09a16a8e3f6c4878ad05f051064d6 +PYTHON_ENGINEIO_SETUP_TYPE = setuptools +PYTHON_ENGINEIO_LICENSE = MIT +PYTHON_ENGINEIO_LICENSE_FILES = LICENSE +PYTHON_ENGINEIO_CPE_ID_VENDOR = python-engineio_project + +ifeq ($(BR2_PACKAGE_PYTHON),y) +# only needed/valid for python 3.x +define PYTHON_ENGINEIO_RM_PY3_FILES + rm -rf $(TARGET_DIR)/usr/lib/python*/site-packages/engineio/async_drivers \ + $(TARGET_DIR)/usr/lib/python*/site-packages/engineio/asyncio_*.py +endef + +PYTHON_ENGINEIO_POST_INSTALL_TARGET_HOOKS += PYTHON_ENGINEIO_RM_PY3_FILES +endif + +$(eval $(python-package)) diff --git a/package/python-entrypoints/Config.in b/package/python-entrypoints/Config.in new file mode 100644 index 00000000..8253a045 --- /dev/null +++ b/package/python-entrypoints/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_ENTRYPOINTS + bool "python-entrypoints" + help + Discover and load entry points from installed packages. + + https://github.com/takluyver/entrypoints diff --git a/package/python-entrypoints/python-entrypoints.hash b/package/python-entrypoints/python-entrypoints.hash new file mode 100644 index 00000000..c6454521 --- /dev/null +++ b/package/python-entrypoints/python-entrypoints.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/entrypoints/json +md5 c5c61ea2e46a0c50ea08f4af7955a0b1 entrypoints-0.3.tar.gz +sha256 c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451 entrypoints-0.3.tar.gz +# Locally computed sha256 checksums +sha256 de5fcd7349cdf399b0707a2a024833c4704743650133c72d6f0ff7561a03a848 LICENSE diff --git a/package/python-entrypoints/python-entrypoints.mk b/package/python-entrypoints/python-entrypoints.mk new file mode 100644 index 00000000..7ab1b4d6 --- /dev/null +++ b/package/python-entrypoints/python-entrypoints.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-entrypoints +# +################################################################################ + +PYTHON_ENTRYPOINTS_VERSION = 0.3 +PYTHON_ENTRYPOINTS_SOURCE = entrypoints-$(PYTHON_ENTRYPOINTS_VERSION).tar.gz +PYTHON_ENTRYPOINTS_SITE = https://files.pythonhosted.org/packages/b4/ef/063484f1f9ba3081e920ec9972c96664e2edb9fdc3d8669b0e3b8fc0ad7c +PYTHON_ENTRYPOINTS_SETUP_TYPE = distutils +PYTHON_ENTRYPOINTS_LICENSE = MIT +PYTHON_ENTRYPOINTS_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-enum/Config.in b/package/python-enum/Config.in new file mode 100644 index 00000000..e26ae8bf --- /dev/null +++ b/package/python-enum/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PYTHON_ENUM + bool "python-enum" + depends on BR2_PACKAGE_PYTHON + help + Robust enumerated type support in Python + + An enumeration object is an immutable sequence object built + from a sequence of strings. Each value is also available as + an attribute. Such values are constant. Comparisons and + enumeration are supported. + + https://pypi.python.org/pypi/enum diff --git a/package/python-enum/python-enum.hash b/package/python-enum/python-enum.hash new file mode 100644 index 00000000..4b4b369e --- /dev/null +++ b/package/python-enum/python-enum.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/enum/json +md5 e7d170e3f84435b77058de625c96ef58 enum-0.4.7.tar.gz +sha256 8c7cf3587eda51008bcc1eed99ea2c331ccd265c231dbaa95ec5258d3dc03100 enum-0.4.7.tar.gz +# Locally computed sha256 checksums +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL-3 diff --git a/package/python-enum/python-enum.mk b/package/python-enum/python-enum.mk new file mode 100644 index 00000000..f1de8a93 --- /dev/null +++ b/package/python-enum/python-enum.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-enum +# +################################################################################ + +PYTHON_ENUM_VERSION = 0.4.7 +PYTHON_ENUM_SOURCE = enum-$(PYTHON_ENUM_VERSION).tar.gz +PYTHON_ENUM_SITE = https://files.pythonhosted.org/packages/02/a0/32e1d5a21b703f600183e205aafc6773577e16429af5ad3c3f9b956b07ca +PYTHON_ENUM_SETUP_TYPE = setuptools +PYTHON_ENUM_LICENSE = GPL-3.0+ +PYTHON_ENUM_LICENSE_FILES = LICENSE.GPL-3 + +$(eval $(python-package)) diff --git a/package/python-enum34/Config.in b/package/python-enum34/Config.in new file mode 100644 index 00000000..2511a350 --- /dev/null +++ b/package/python-enum34/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PYTHON_ENUM34 + bool "python-enum34" + depends on BR2_PACKAGE_PYTHON + help + Python 3.4 Enum backported to 2.x. + + An enumeration is a set of symbolic names (members) bound to + unique, constant values. Within an enumeration, the members + can be compared by identity, and the enumeration itself can + be iterated over. + + https://pypi.python.org/pypi/enum34 diff --git a/package/python-enum34/python-enum34.hash b/package/python-enum34/python-enum34.hash new file mode 100644 index 00000000..e43e00a5 --- /dev/null +++ b/package/python-enum34/python-enum34.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/enum34/json +md5 b5ac0bb5ea9e830029599e410d09d3b5 enum34-1.1.10.tar.gz +# Locally computed +sha256 cce6a7477ed816bd2542d03d53db9f0db935dd013b70f336a95c73979289f248 enum34-1.1.10.tar.gz +sha256 88ec6a6c8eafa3b9757e745783938bef3f5e4d5e3c76b1db576aa3ab520e5e1d enum/LICENSE diff --git a/package/python-enum34/python-enum34.mk b/package/python-enum34/python-enum34.mk new file mode 100644 index 00000000..0bd00508 --- /dev/null +++ b/package/python-enum34/python-enum34.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# python-enum34 +# +################################################################################ + +PYTHON_ENUM34_VERSION = 1.1.10 +PYTHON_ENUM34_SOURCE = enum34-$(PYTHON_ENUM34_VERSION).tar.gz +PYTHON_ENUM34_SITE = https://files.pythonhosted.org/packages/11/c4/2da1f4952ba476677a42f25cd32ab8aaf0e1c0d0e00b89822b835c7e654c +PYTHON_ENUM34_SETUP_TYPE = setuptools +PYTHON_ENUM34_LICENSE = BSD-3-Clause +PYTHON_ENUM34_LICENSE_FILES = enum/LICENSE +PYTHON_ENUM34_CPE_ID_VENDOR = python +PYTHON_ENUM34_CPE_ID_PRODUCT = enum34 + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-esptool/Config.in b/package/python-esptool/Config.in new file mode 100644 index 00000000..570f9aa4 --- /dev/null +++ b/package/python-esptool/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PYTHON_ESPTOOL + bool "python-esptool" + select BR2_PACKAGE_PYTHON_ECDSA # runtime + select BR2_PACKAGE_PYTHON_PYAES # runtime + select BR2_PACKAGE_PYTHON_SERIAL # runtime + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 + help + A serial utility to communicate & flash code to Espressif + ESP8266 & ESP32 chips. + + https://github.com/espressif/esptool diff --git a/package/python-esptool/python-esptool.hash b/package/python-esptool/python-esptool.hash new file mode 100644 index 00000000..3b030ec7 --- /dev/null +++ b/package/python-esptool/python-esptool.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/esptool/json +md5 ccd2855e14c298712aeb37ac063baad5 esptool-3.0.tar.gz +sha256 87953d235fed2c9adb1292b3769df0149686c9afdb1896dd963f730453cbc934 esptool-3.0.tar.gz +# Locally computed sha256 checksums +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE diff --git a/package/python-esptool/python-esptool.mk b/package/python-esptool/python-esptool.mk new file mode 100644 index 00000000..e9e3eb6b --- /dev/null +++ b/package/python-esptool/python-esptool.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-esptool +# +################################################################################ + +PYTHON_ESPTOOL_VERSION = 3.0 +PYTHON_ESPTOOL_SOURCE = esptool-$(PYTHON_ESPTOOL_VERSION).tar.gz +PYTHON_ESPTOOL_SITE = https://files.pythonhosted.org/packages/dd/3d/d1d4c004927e6e6807c441ce70330ed969c725d2906053fbd2ff994b4439 +PYTHON_ESPTOOL_SETUP_TYPE = setuptools +PYTHON_ESPTOOL_LICENSE = GPL-2.0+ +PYTHON_ESPTOOL_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-falcon/Config.in b/package/python-falcon/Config.in new file mode 100644 index 00000000..1bf93064 --- /dev/null +++ b/package/python-falcon/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_FALCON + bool "python-falcon" + help + An unladen web framework for building APIs and app + backends. + + https://falconframework.org diff --git a/package/python-falcon/python-falcon.hash b/package/python-falcon/python-falcon.hash new file mode 100644 index 00000000..68b8d4cb --- /dev/null +++ b/package/python-falcon/python-falcon.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/falcon/json +md5 77c52c144dd284e6259d257c6f008072 falcon-2.0.0.tar.gz +sha256 eea593cf466b9c126ce667f6d30503624ef24459f118c75594a69353b6c3d5fc falcon-2.0.0.tar.gz +# Locally computed sha256 checksums +sha256 e9e7f1a7ba764f042e56afce6f3563c2be9c4fffbb1404b20f8050ae051f577c LICENSE diff --git a/package/python-falcon/python-falcon.mk b/package/python-falcon/python-falcon.mk new file mode 100644 index 00000000..1d7c869d --- /dev/null +++ b/package/python-falcon/python-falcon.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# python-falcon +# +################################################################################ + +PYTHON_FALCON_VERSION = 2.0.0 +PYTHON_FALCON_SOURCE = falcon-$(PYTHON_FALCON_VERSION).tar.gz +PYTHON_FALCON_SITE = https://files.pythonhosted.org/packages/19/30/edff5a1fea7a8e9876c8391e170263e1bb207875b6a65cd619818487b27b +PYTHON_FALCON_SETUP_TYPE = setuptools +PYTHON_FALCON_LICENSE = Apache-2.0 +PYTHON_FALCON_LICENSE_FILES = LICENSE + +ifeq ($(BR2_PACKAGE_HOST_PYTHON_CYTHON),y) +PYTHON_FALCON_DEPENDENCIES += host-python-cython +endif + +$(eval $(python-package)) diff --git a/package/python-fastentrypoints/Config.in.host b/package/python-fastentrypoints/Config.in.host new file mode 100644 index 00000000..91605509 --- /dev/null +++ b/package/python-fastentrypoints/Config.in.host @@ -0,0 +1,6 @@ +config BR2_PACKAGE_HOST_PYTHON_FASTENTRYPOINTS + bool "host python-fastentrypoints" + help + Makes entry_points specified in setup.py load more quickly. + + https://github.com/ninjaaron/fast-entry_points diff --git a/package/python-fastentrypoints/python-fastentrypoints.hash b/package/python-fastentrypoints/python-fastentrypoints.hash new file mode 100644 index 00000000..71165d61 --- /dev/null +++ b/package/python-fastentrypoints/python-fastentrypoints.hash @@ -0,0 +1,4 @@ +# md5 from https://pypi.org/pypi/fastentrypoints/json, sha256 locally computed +md5 390ad9a9229164a06156a5b1f0ef1b22 fastentrypoints-0.12.tar.gz +sha256 ff284f1469bd65400599807d2c6284d5b251398e6e28811f5f77fd262292410b fastentrypoints-0.12.tar.gz +sha256 d1ce3f6a7bb1a7194c7d826a0ca318176b12e58616d9e3d8f366ad43802787c4 fastentrypoints.py diff --git a/package/python-fastentrypoints/python-fastentrypoints.mk b/package/python-fastentrypoints/python-fastentrypoints.mk new file mode 100644 index 00000000..7fa72892 --- /dev/null +++ b/package/python-fastentrypoints/python-fastentrypoints.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-fastentrypoints +# +################################################################################ + +PYTHON_FASTENTRYPOINTS_VERSION = 0.12 +PYTHON_FASTENTRYPOINTS_SOURCE = fastentrypoints-$(PYTHON_FASTENTRYPOINTS_VERSION).tar.gz +PYTHON_FASTENTRYPOINTS_SITE = https://files.pythonhosted.org/packages/56/59/69d9ae590ca39435d409651314ec13b2abe8127c1db0231c01d034ebb6b0 +PYTHON_FASTENTRYPOINTS_SETUP_TYPE = setuptools +PYTHON_FASTENTRYPOINTS_LICENSE = BSD-2-Clause +PYTHON_FASTENTRYPOINTS_LICENSE_FILES = fastentrypoints.py + +$(eval $(host-python-package)) diff --git a/package/python-filelock/Config.in b/package/python-filelock/Config.in new file mode 100644 index 00000000..57ec0394 --- /dev/null +++ b/package/python-filelock/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_FILELOCK + bool "python-filelock" + help + A platform independent file lock. + + https://github.com/benediktschmitt/py-filelock diff --git a/package/python-filelock/python-filelock.hash b/package/python-filelock/python-filelock.hash new file mode 100644 index 00000000..d50d2d56 --- /dev/null +++ b/package/python-filelock/python-filelock.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/filelock/json +md5 c1fe6d9a7433a7ca6ce4f36e273317d1 filelock-3.0.12.tar.gz +sha256 18d82244ee114f543149c66a6e0c14e9c4f8a1044b5cdaadd0f82159d6a6ff59 filelock-3.0.12.tar.gz +# Locally computed sha256 checksums +sha256 88d9b4eb60579c191ec391ca04c16130572d7eedc4a86daa58bf28c6e14c9bcd LICENSE diff --git a/package/python-filelock/python-filelock.mk b/package/python-filelock/python-filelock.mk new file mode 100644 index 00000000..35b3374d --- /dev/null +++ b/package/python-filelock/python-filelock.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-filelock +# +################################################################################ + +PYTHON_FILELOCK_VERSION = 3.0.12 +PYTHON_FILELOCK_SOURCE = filelock-$(PYTHON_FILELOCK_VERSION).tar.gz +PYTHON_FILELOCK_SITE = https://files.pythonhosted.org/packages/14/ec/6ee2168387ce0154632f856d5cc5592328e9cf93127c5c9aeca92c8c16cb +PYTHON_FILELOCK_SETUP_TYPE = setuptools +PYTHON_FILELOCK_LICENSE = Public Domain +PYTHON_FILELOCK_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-fire/Config.in b/package/python-fire/Config.in new file mode 100644 index 00000000..b718ddac --- /dev/null +++ b/package/python-fire/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_FIRE + bool "python-fire" + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON_TERMCOLOR # runtime + select BR2_PACKAGE_PYTHON_ENUM34 if BR2_PACKAGE_PYTHON # runtime + help + A library for automatically generating command line + interfaces. + + https://github.com/google/python-fire diff --git a/package/python-fire/python-fire.hash b/package/python-fire/python-fire.hash new file mode 100644 index 00000000..d86376c5 --- /dev/null +++ b/package/python-fire/python-fire.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/fire/json +md5 799be84cbbd7df2cf159cdcb538ab6f9 fire-0.4.0.tar.gz +sha256 c5e2b8763699d1142393a46d0e3e790c5eb2f0706082df8f647878842c216a62 fire-0.4.0.tar.gz +# Locally computed sha256 checksums +sha256 a5de77b62266bca0bb97bf058992f0b0f308a83a8ca55ee10fbf6bd8ed8f7ed0 LICENSE diff --git a/package/python-fire/python-fire.mk b/package/python-fire/python-fire.mk new file mode 100644 index 00000000..7ba971ab --- /dev/null +++ b/package/python-fire/python-fire.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# python-fire +# +################################################################################ + +PYTHON_FIRE_VERSION = 0.4.0 +PYTHON_FIRE_SOURCE = fire-$(PYTHON_FIRE_VERSION).tar.gz +PYTHON_FIRE_SITE = https://files.pythonhosted.org/packages/11/07/a119a1aa04d37bc819940d95ed7e135a7dcca1c098123a3764a6dcace9e7 +PYTHON_FIRE_SETUP_TYPE = setuptools +PYTHON_FIRE_LICENSE = Apache-2.0 +PYTHON_FIRE_LICENSE_FILES = LICENSE + +ifeq ($(BR2_PACKAGE_PYTHON),y) +# only needed/valid for python 3.x +define PYTHON_FIRE_RM_PY3_FILE + rm -f $(TARGET_DIR)/usr/lib/python*/site-packages/fire/test_components_py3.py +endef + +PYTHON_FIRE_POST_INSTALL_TARGET_HOOKS += PYTHON_FIRE_RM_PY3_FILE +endif + +$(eval $(python-package)) diff --git a/package/python-flask-babel/Config.in b/package/python-flask-babel/Config.in new file mode 100644 index 00000000..272d9ef1 --- /dev/null +++ b/package/python-flask-babel/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_PYTHON_FLASK_BABEL + bool "python-flask-babel" + select BR2_PACKAGE_PYTHON_FLASK # runtime + select BR2_PACKAGE_PYTHON_BABEL # runtime + select BR2_PACKAGE_PYTHON_JINJA2 # runtime + help + Flask-Babel is an extension to Flask that adds i18n and l10n + support to any Flask application with the help of babel, + pytz and speaklater. It has builtin support for date + formatting with timezone support as well as a very simple + and friendly interface to gettext translations. + + https://pythonhosted.org/Flask-Babel/ diff --git a/package/python-flask-babel/python-flask-babel.hash b/package/python-flask-babel/python-flask-babel.hash new file mode 100644 index 00000000..288036ee --- /dev/null +++ b/package/python-flask-babel/python-flask-babel.hash @@ -0,0 +1,6 @@ +# From: https://pypi.org/project/Flask-Babel/#copy-hash-modal-91caaca6-a716-4751-9ec0-08baadced4b1 +md5 162ccb275958f9a463211ece841a2b9a Flask-Babel-1.0.0.tar.gz +sha256 d6a70468f9a8919d59fba2a291a003da3a05ff884275dddbd965f3b98b09ab3e Flask-Babel-1.0.0.tar.gz + +# License files +sha256 a526100a7047237360a394ba4f70ae801b50ff9b8c9b9e73e7795480a59f6b7e LICENSE diff --git a/package/python-flask-babel/python-flask-babel.mk b/package/python-flask-babel/python-flask-babel.mk new file mode 100644 index 00000000..cd146589 --- /dev/null +++ b/package/python-flask-babel/python-flask-babel.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-flask-babel +# +################################################################################ + +PYTHON_FLASK_BABEL_VERSION = 1.0.0 +PYTHON_FLASK_BABEL_SOURCE = Flask-Babel-$(PYTHON_FLASK_BABEL_VERSION).tar.gz +PYTHON_FLASK_BABEL_SITE = https://files.pythonhosted.org/packages/7a/73/e4a9532ca11daeead1a99251f2ec1a5faf98117b83dbfe1b30535004cd98 +PYTHON_FLASK_BABEL_LICENSE = BSD-3-Clause +PYTHON_FLASK_BABEL_SETUP_TYPE = setuptools +PYTHON_FLASK_BABEL_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-flask-cors/Config.in b/package/python-flask-cors/Config.in new file mode 100644 index 00000000..e2e84797 --- /dev/null +++ b/package/python-flask-cors/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_FLASK_CORS + bool "python-flask-cors" + select BR2_PACKAGE_PYTHON_FLASK # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + help + A Flask extension adding a decorator for CORS support. + + https://github.com/corydolphin/flask-cors diff --git a/package/python-flask-cors/python-flask-cors.hash b/package/python-flask-cors/python-flask-cors.hash new file mode 100644 index 00000000..94ec262d --- /dev/null +++ b/package/python-flask-cors/python-flask-cors.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/flask-cors/json +md5 647ff0632b960ba063a077fb4063077e Flask-Cors-3.0.10.tar.gz +sha256 b60839393f3b84a0f3746f6cdca56c1ad7426aa738b70d6c61375857823181de Flask-Cors-3.0.10.tar.gz +# Locally computed sha256 checksums +sha256 6e1a1bdc54834c1e0740cbce5d5f6f2cae1c846fd2a7f482b11649594fafbd5d LICENSE diff --git a/package/python-flask-cors/python-flask-cors.mk b/package/python-flask-cors/python-flask-cors.mk new file mode 100644 index 00000000..d6001572 --- /dev/null +++ b/package/python-flask-cors/python-flask-cors.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-flask-cors +# +################################################################################ + +PYTHON_FLASK_CORS_VERSION = 3.0.10 +PYTHON_FLASK_CORS_SOURCE = Flask-Cors-$(PYTHON_FLASK_CORS_VERSION).tar.gz +PYTHON_FLASK_CORS_SITE = https://files.pythonhosted.org/packages/cf/25/e3b2553d22ed542be807739556c69621ad2ab276ae8d5d2560f4ed20f652 +PYTHON_FLASK_CORS_SETUP_TYPE = setuptools +PYTHON_FLASK_CORS_LICENSE = MIT +PYTHON_FLASK_CORS_LICENSE_FILES = LICENSE +PYTHON_FLASK_CORS_CPE_ID_VENDOR = flask-cors_project +PYTHON_FLASK_CORS_CPE_ID_PRODUCT = flask-cors + +$(eval $(python-package)) diff --git a/package/python-flask-jsonrpc/Config.in b/package/python-flask-jsonrpc/Config.in new file mode 100644 index 00000000..c8ecd854 --- /dev/null +++ b/package/python-flask-jsonrpc/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_FLASK_JSONRPC + bool "python-flask-jsonrpc" + # runtime dependency + select BR2_PACKAGE_PYTHON_FLASK + help + A basic JSON-RPC implementation for your Flask-powered sites. + + https://github.com/cenobites/flask-jsonrpc diff --git a/package/python-flask-jsonrpc/python-flask-jsonrpc.hash b/package/python-flask-jsonrpc/python-flask-jsonrpc.hash new file mode 100644 index 00000000..4204f59d --- /dev/null +++ b/package/python-flask-jsonrpc/python-flask-jsonrpc.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/flask-jsonrpc/json +md5 5c0592f53b2f18e34d5be435acee8842 Flask-JSONRPC-0.3.1.tar.gz +# Locally computed +sha256 4d0cc9c20874093306af91f5a48009fb8659a041428dcdb11703598ffbbc97d0 Flask-JSONRPC-0.3.1.tar.gz +sha256 f613b06cbe766fd514b1b619a71a12c353cccaa55fa4f547be55563d9829be6f setup.py diff --git a/package/python-flask-jsonrpc/python-flask-jsonrpc.mk b/package/python-flask-jsonrpc/python-flask-jsonrpc.mk new file mode 100644 index 00000000..dbb37c37 --- /dev/null +++ b/package/python-flask-jsonrpc/python-flask-jsonrpc.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-flask-jsonrpc +# +################################################################################ + +PYTHON_FLASK_JSONRPC_VERSION = 0.3.1 +PYTHON_FLASK_JSONRPC_SOURCE = Flask-JSONRPC-$(PYTHON_FLASK_JSONRPC_VERSION).tar.gz +PYTHON_FLASK_JSONRPC_SITE = https://pypi.python.org/packages/cb/1f/e6d66e8498609ba04bac76155b2ea884df95531e93501bf4ef009d40a83c +PYTHON_FLASK_JSONRPC_LICENSE = BSD-3-Clause +PYTHON_FLASK_JSONRPC_LICENSE_FILES = setup.py +PYTHON_FLASK_JSONRPC_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-flask-login/Config.in b/package/python-flask-login/Config.in new file mode 100644 index 00000000..88c413e2 --- /dev/null +++ b/package/python-flask-login/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_FLASK_LOGIN + bool "python-flask-login" + # runtime dependency + select BR2_PACKAGE_PYTHON_FLASK + help + Flask-Login provides user session management for Flask. + + https://github.com/maxcountryman/flask-login diff --git a/package/python-flask-login/python-flask-login.hash b/package/python-flask-login/python-flask-login.hash new file mode 100644 index 00000000..9ff1f82a --- /dev/null +++ b/package/python-flask-login/python-flask-login.hash @@ -0,0 +1,6 @@ +# From https://pypi.org/project/Flask-Login/#copy-hash-modal-8bb2ac58-b80a-4793-84d4-4f32b92976d9 +md5 a2d94aa6ae935345ebc68eb3cbb5fccd Flask-Login-0.5.0.tar.gz +sha256 6d33aef15b5bcead780acc339464aae8a6e28f13c90d8b1cf9de8b549d1c0b4b Flask-Login-0.5.0.tar.gz + +# License files +sha256 7a9dfb9c5da204ed1370f3b62c13e2992a12da1da707f47e156897eeb4344e5b LICENSE diff --git a/package/python-flask-login/python-flask-login.mk b/package/python-flask-login/python-flask-login.mk new file mode 100644 index 00000000..efb63b26 --- /dev/null +++ b/package/python-flask-login/python-flask-login.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-flask-login +# +################################################################################ + +PYTHON_FLASK_LOGIN_VERSION = 0.5.0 +PYTHON_FLASK_LOGIN_SOURCE = Flask-Login-$(PYTHON_FLASK_LOGIN_VERSION).tar.gz +PYTHON_FLASK_LOGIN_SITE = https://files.pythonhosted.org/packages/f9/01/f6c0a3a654ca125cf9cd273314c03a8bc6a47bf861765c8c1d375e15a28d +PYTHON_FLASK_LOGIN_LICENSE = MIT +PYTHON_FLASK_LOGIN_LICENSE_FILES = LICENSE +PYTHON_FLASK_LOGIN_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-flask-sqlalchemy/Config.in b/package/python-flask-sqlalchemy/Config.in new file mode 100644 index 00000000..fa4a0351 --- /dev/null +++ b/package/python-flask-sqlalchemy/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_FLASK_SQLALCHEMY + bool "python-flask-sqlalchemy" + select BR2_PACKAGE_PYTHON_FLASK # runtime + select BR2_PACKAGE_PYTHON_SQLALCHEMY # runtime + help + Flask-SQLAlchemy is a Flask microframework extension which + adds support for the SQLAlchemy SQL toolkit/ORM. + + http://github.com/mitsuhiko/flask-sqlalchemy diff --git a/package/python-flask-sqlalchemy/python-flask-sqlalchemy.hash b/package/python-flask-sqlalchemy/python-flask-sqlalchemy.hash new file mode 100644 index 00000000..f1fe9775 --- /dev/null +++ b/package/python-flask-sqlalchemy/python-flask-sqlalchemy.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/flask-sqlalchemy/json +md5 1f5781cf3e1a2b1aabda47a5b20d2073 Flask-SQLAlchemy-2.4.1.tar.gz +sha256 6974785d913666587949f7c2946f7001e4fa2cb2d19f4e69ead02e4b8f50b33d Flask-SQLAlchemy-2.4.1.tar.gz +# Locally computed sha256 checksums +sha256 489a8e1108509ed98a37bb983e11e0f7e1d31f0bd8f99a79c8448e7ff37d07ea LICENSE.rst diff --git a/package/python-flask-sqlalchemy/python-flask-sqlalchemy.mk b/package/python-flask-sqlalchemy/python-flask-sqlalchemy.mk new file mode 100644 index 00000000..c6d0094b --- /dev/null +++ b/package/python-flask-sqlalchemy/python-flask-sqlalchemy.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-flask-sqlalchemy +# +################################################################################ + +PYTHON_FLASK_SQLALCHEMY_VERSION = 2.4.1 +PYTHON_FLASK_SQLALCHEMY_SOURCE = Flask-SQLAlchemy-$(PYTHON_FLASK_SQLALCHEMY_VERSION).tar.gz +PYTHON_FLASK_SQLALCHEMY_SITE = https://files.pythonhosted.org/packages/52/7a/35bacbedafdc652d5198b80eb22eacccae0c97a49740a45da828b05cc37b +PYTHON_FLASK_SQLALCHEMY_SETUP_TYPE = setuptools +PYTHON_FLASK_SQLALCHEMY_LICENSE = BSD-3-Clause +PYTHON_FLASK_SQLALCHEMY_LICENSE_FILES = LICENSE.rst + +$(eval $(python-package)) diff --git a/package/python-flask/Config.in b/package/python-flask/Config.in new file mode 100644 index 00000000..0e5b64ce --- /dev/null +++ b/package/python-flask/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_PYTHON_FLASK + bool "python-flask" + select BR2_PACKAGE_PYTHON_CLICK # runtime + select BR2_PACKAGE_PYTHON_JINJA2 # runtime + select BR2_PACKAGE_PYTHON_WERKZEUG # runtime + select BR2_PACKAGE_PYTHON_ITSDANGEROUS # runtime + select BR2_PACKAGE_PYTHON_SETUPTOOLS # runtime + select BR2_PACKAGE_PYTHON_SSL if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_SSL if BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 + help + Flask is a microframework for Python based on Werkzeug, + Jinja 2 and good intentions. + + https://palletsprojects.com/p/flask diff --git a/package/python-flask/python-flask.hash b/package/python-flask/python-flask.hash new file mode 100644 index 00000000..c6ccd633 --- /dev/null +++ b/package/python-flask/python-flask.hash @@ -0,0 +1,7 @@ +# From https://pypi.org/project/Flask/#copy-hash-modal-911ffb67-fe84-4e25-a1a9-f4c745a0a980 +md5 0da4145d172993cd28a6c619630cc19c Flask-1.1.2.tar.gz +sha256 4efa1ae2d7c9865af48986de8aeb8504bf32c7f3d6fdc9353d34b21f4b127060 Flask-1.1.2.tar.gz + +# License files +sha256 489a8e1108509ed98a37bb983e11e0f7e1d31f0bd8f99a79c8448e7ff37d07ea LICENSE.rst +sha256 0ef3ae025f4a398761079f0d687ff3d66f4fef3a32ac2607318e909c0cba9150 docs/license.rst diff --git a/package/python-flask/python-flask.mk b/package/python-flask/python-flask.mk new file mode 100644 index 00000000..077aa600 --- /dev/null +++ b/package/python-flask/python-flask.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-flask +# +################################################################################ + +PYTHON_FLASK_VERSION = 1.1.2 +PYTHON_FLASK_SOURCE = Flask-$(PYTHON_FLASK_VERSION).tar.gz +PYTHON_FLASK_SITE = https://files.pythonhosted.org/packages/4e/0b/cb02268c90e67545a0e3a37ea1ca3d45de3aca43ceb7dbf1712fb5127d5d +PYTHON_FLASK_SETUP_TYPE = setuptools +PYTHON_FLASK_LICENSE = BSD-3-Clause +PYTHON_FLASK_LICENSE_FILES = LICENSE.rst docs/license.rst +PYTHON_FLASK_CPE_ID_VENDOR = palletsprojects +PYTHON_FLASK_CPE_ID_PRODUCT = flask + +$(eval $(python-package)) diff --git a/package/python-flatbuffers/Config.in b/package/python-flatbuffers/Config.in new file mode 100644 index 00000000..b24b5aaf --- /dev/null +++ b/package/python-flatbuffers/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_FLATBUFFERS + bool "python-flatbuffers" + help + The FlatBuffers serialization format for Python. + + https://github.com/google/flatbuffers diff --git a/package/python-flatbuffers/python-flatbuffers.hash b/package/python-flatbuffers/python-flatbuffers.hash new file mode 100644 index 00000000..ba7df6ba --- /dev/null +++ b/package/python-flatbuffers/python-flatbuffers.hash @@ -0,0 +1,3 @@ +# md5, sha256 from https://pypi.org/pypi/flatbuffers/json +md5 b9a5b8dfbbb4751788529310118ea6db flatbuffers-1.12.tar.gz +sha256 63bb9a722d5e373701913e226135b28a6f6ac200d5cc7b4d919fa38d73b44610 flatbuffers-1.12.tar.gz diff --git a/package/python-flatbuffers/python-flatbuffers.mk b/package/python-flatbuffers/python-flatbuffers.mk new file mode 100644 index 00000000..33bb57dd --- /dev/null +++ b/package/python-flatbuffers/python-flatbuffers.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-flatbuffers +# +################################################################################ + +PYTHON_FLATBUFFERS_VERSION = 1.12 +PYTHON_FLATBUFFERS_SOURCE = flatbuffers-$(PYTHON_FLATBUFFERS_VERSION).tar.gz +PYTHON_FLATBUFFERS_SITE = https://files.pythonhosted.org/packages/4d/c4/7b995ab9bf0c7eaf10c386d29a03408dfcf72648df4102b1f18896c3aeea +PYTHON_FLATBUFFERS_LICENSE = Apache-2.0 +PYTHON_FLATBUFFERS_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-flup/Config.in b/package/python-flup/Config.in new file mode 100644 index 00000000..f40f2501 --- /dev/null +++ b/package/python-flup/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_FLUP + bool "python-flup" + depends on BR2_PACKAGE_PYTHON3 + help + flup provides of a collection of WSGI modules for Python. + It allows a webserver to use scgi-mod and fastcgi-mod + with python. + + https://pypi.python.org/pypi/flup diff --git a/package/python-flup/python-flup.hash b/package/python-flup/python-flup.hash new file mode 100644 index 00000000..d544d75e --- /dev/null +++ b/package/python-flup/python-flup.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/flup/json +md5 a64e7a6374e043480ee92534c735964e flup-1.0.3.tar.gz +sha256 5eb09f26eb0751f8380d8ac43d1dfb20e1d42eca0fa45ea9289fa532a79cd159 flup-1.0.3.tar.gz +# Locally computed sha256 checksums +sha256 66a60ebc732165d199ec018fb9876d9f8168a5a8575375e64cc1b3d78c32b481 PKG-INFO diff --git a/package/python-flup/python-flup.mk b/package/python-flup/python-flup.mk new file mode 100644 index 00000000..2ea6a1a3 --- /dev/null +++ b/package/python-flup/python-flup.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-flup +# +################################################################################ + +PYTHON_FLUP_VERSION = 1.0.3 +PYTHON_FLUP_SOURCE = flup-$(PYTHON_FLUP_VERSION).tar.gz +PYTHON_FLUP_SITE = https://files.pythonhosted.org/packages/bb/b5/26cc8f7baf0ddebd3e61a354a2bcc692cfe8005123c37ee3d8507c4c7511 +PYTHON_FLUP_LICENSE = BSD-2-Clause, MIT +PYTHON_FLUP_LICENSE_FILES = PKG-INFO +PYTHON_FLUP_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-frozenlist/Config.in b/package/python-frozenlist/Config.in new file mode 100644 index 00000000..67a58b40 --- /dev/null +++ b/package/python-frozenlist/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_FROZENLIST + bool "python-frozenlist" + depends on BR2_PACKAGE_PYTHON3 + help + A list-like structure which implements + collections.abc.MutableSequence. + + https://github.com/aio-libs/frozenlist diff --git a/package/python-frozenlist/python-frozenlist.hash b/package/python-frozenlist/python-frozenlist.hash new file mode 100644 index 00000000..0ecc5f9c --- /dev/null +++ b/package/python-frozenlist/python-frozenlist.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/frozenlist/json +md5 2a83a520014203d0a56993c332ff7e23 frozenlist-1.1.0.tar.gz +sha256 d167a5050628323fcb3db410375eb06390ab135454fd85fd79c5832f5ec2b8ed frozenlist-1.1.0.tar.gz +# Locally computed sha256 checksums +sha256 6fd5243e92dd7f98ec69c7ac377728e74905709ff527a5bf98d6d0263c04f5b6 LICENSE.txt diff --git a/package/python-frozenlist/python-frozenlist.mk b/package/python-frozenlist/python-frozenlist.mk new file mode 100644 index 00000000..b113c380 --- /dev/null +++ b/package/python-frozenlist/python-frozenlist.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-frozenlist +# +################################################################################ + +PYTHON_FROZENLIST_VERSION = 1.1.0 +PYTHON_FROZENLIST_SOURCE = frozenlist-$(PYTHON_FROZENLIST_VERSION).tar.gz +PYTHON_FROZENLIST_SITE = https://files.pythonhosted.org/packages/12/0e/119f1f186e93c21d078db1ddd7b21247a8a49261689d9284dec28be3b08e +PYTHON_FROZENLIST_SETUP_TYPE = setuptools +PYTHON_FROZENLIST_LICENSE = Apache-2.0 +PYTHON_FROZENLIST_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-functools32/Config.in b/package/python-functools32/Config.in new file mode 100644 index 00000000..606341d8 --- /dev/null +++ b/package/python-functools32/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_FUNCTOOLS32 + bool "python-functools32" + depends on BR2_PACKAGE_PYTHON + help + Backport of the functools module from Python 3.2.3 for use on + 2.7 and PyPy. + + https://github.com/MiCHiLU/python-functools32 diff --git a/package/python-functools32/python-functools32.hash b/package/python-functools32/python-functools32.hash new file mode 100644 index 00000000..606de817 --- /dev/null +++ b/package/python-functools32/python-functools32.hash @@ -0,0 +1,4 @@ +# md5 from https://pypi.python.org/pypi/functools32/json, sha256 locally computed +md5 09f24ffd9af9f6cd0f63cb9f4e23d4b2 functools32-3.2.3-2.tar.gz +sha256 f6253dfbe0538ad2e387bd8fdfd9293c925d63553f5813c4e587745416501e6d functools32-3.2.3-2.tar.gz +sha256 3f9ea6b89abe1556b72aff67b987d64c8272564815cd6a2832e6c4f6abdfe3b1 LICENSE diff --git a/package/python-functools32/python-functools32.mk b/package/python-functools32/python-functools32.mk new file mode 100644 index 00000000..8a88bb2a --- /dev/null +++ b/package/python-functools32/python-functools32.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-functools32 +# +################################################################################ + +PYTHON_FUNCTOOLS32_VERSION = 3.2.3-2 +PYTHON_FUNCTOOLS32_SOURCE = functools32-$(PYTHON_FUNCTOOLS32_VERSION).tar.gz +PYTHON_FUNCTOOLS32_SITE = https://pypi.python.org/packages/c5/60/6ac26ad05857c601308d8fb9e87fa36d0ebf889423f47c3502ef034365db +PYTHON_FUNCTOOLS32_SETUP_TYPE = distutils +PYTHON_FUNCTOOLS32_LICENSE = Python-2.0 +PYTHON_FUNCTOOLS32_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-future/Config.in b/package/python-future/Config.in new file mode 100644 index 00000000..8a3fd38f --- /dev/null +++ b/package/python-future/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_FUTURE + bool "python-future" + help + Easy, clean, reliable Python 2/3 compatibility. + + http://python-future.org diff --git a/package/python-future/python-future.hash b/package/python-future/python-future.hash new file mode 100644 index 00000000..c4301810 --- /dev/null +++ b/package/python-future/python-future.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.python.org/pypi/future/json +md5 e4579c836b9c025872efe230f6270349 future-0.18.2.tar.gz +sha256 b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d future-0.18.2.tar.gz +# Locally computed sha256 checksums +sha256 916e561392d48471b9c23437f56e2652f320cb3b119ceaa162edf41016f746b9 LICENSE.txt diff --git a/package/python-future/python-future.mk b/package/python-future/python-future.mk new file mode 100644 index 00000000..76f32180 --- /dev/null +++ b/package/python-future/python-future.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-future +# +################################################################################ + +PYTHON_FUTURE_VERSION = 0.18.2 +PYTHON_FUTURE_SOURCE = future-$(PYTHON_FUTURE_VERSION).tar.gz +PYTHON_FUTURE_SITE = https://files.pythonhosted.org/packages/45/0b/38b06fd9b92dc2b68d58b75f900e97884c45bedd2ff83203d933cf5851c9 +PYTHON_FUTURE_SETUP_TYPE = setuptools +PYTHON_FUTURE_LICENSE = MIT +PYTHON_FUTURE_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-futures/Config.in b/package/python-futures/Config.in new file mode 100644 index 00000000..2eb40e93 --- /dev/null +++ b/package/python-futures/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_FUTURES + bool "python-futures" + depends on BR2_PACKAGE_PYTHON # not needed for python3 + help + Backport of the concurrent.futures package from Python 3.2. + + https://github.com/agronholm/pythonfutures diff --git a/package/python-futures/python-futures.hash b/package/python-futures/python-futures.hash new file mode 100644 index 00000000..a4fbdf4f --- /dev/null +++ b/package/python-futures/python-futures.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/futures/json +md5 b43a39ae1475e3fd6940f2b4f7214675 futures-3.3.0.tar.gz +sha256 7e033af76a5e35f58e56da7a91e687706faf4e7bdfb2cbc3f2cca6b9bcda9794 futures-3.3.0.tar.gz +# Locally computed sha256 checksums +sha256 a698bd5d441e4a16af6c992b8e80cbfa12755d72d910854fa1fb11d4deb0059a LICENSE diff --git a/package/python-futures/python-futures.mk b/package/python-futures/python-futures.mk new file mode 100644 index 00000000..06669481 --- /dev/null +++ b/package/python-futures/python-futures.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-futures +# +################################################################################ + +PYTHON_FUTURES_VERSION = 3.3.0 +PYTHON_FUTURES_SOURCE = futures-$(PYTHON_FUTURES_VERSION).tar.gz +PYTHON_FUTURES_SITE = https://files.pythonhosted.org/packages/47/04/5fc6c74ad114032cd2c544c575bffc17582295e9cd6a851d6026ab4b2c00 +PYTHON_FUTURES_SETUP_TYPE = setuptools +PYTHON_FUTURES_LICENSE = BSD-2-Clause +PYTHON_FUTURES_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-gitdb2/Config.in b/package/python-gitdb2/Config.in new file mode 100644 index 00000000..a5962e7b --- /dev/null +++ b/package/python-gitdb2/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_PYTHON_GITDB2 + bool "python-gitdb2" + select BR2_PACKAGE_PYTHON_SMMAP2 # runtime + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 # runtime + help + GitDB allows you to access bare git repositories for reading + and writing. It aims at allowing full access to loose objects + as well as packs with performance and scalability in mind. It + operates exclusively on streams, allowing to handle large + objects with a small memory footprint. + + https://github.com/gitpython-developers/gitdb diff --git a/package/python-gitdb2/python-gitdb2.hash b/package/python-gitdb2/python-gitdb2.hash new file mode 100644 index 00000000..e97d25cf --- /dev/null +++ b/package/python-gitdb2/python-gitdb2.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/gitdb2/json +md5 1a7ea3362e405f8a5634f7ee53636094 gitdb2-2.0.6.tar.gz +sha256 1b6df1433567a51a4a9c1a5a0de977aa351a405cc56d7d35f3388bad1f630350 gitdb2-2.0.6.tar.gz +# Locally computed sha256 checksums +sha256 efd29f596a08e8857e68e7694a50bcda72839792da7c3f041bcbff5f18009239 LICENSE diff --git a/package/python-gitdb2/python-gitdb2.mk b/package/python-gitdb2/python-gitdb2.mk new file mode 100644 index 00000000..7664a135 --- /dev/null +++ b/package/python-gitdb2/python-gitdb2.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-gitdb2 +# +################################################################################ + +PYTHON_GITDB2_VERSION = 2.0.6 +PYTHON_GITDB2_SOURCE = gitdb2-$(PYTHON_GITDB2_VERSION).tar.gz +PYTHON_GITDB2_SITE = https://files.pythonhosted.org/packages/c5/62/ed7205331e8d7cc377e2512cb32f8f8f075c0defce767551d0a76e102ce2 +PYTHON_GITDB2_SETUP_TYPE = setuptools +PYTHON_GITDB2_LICENSE = BSD-3-Clause +PYTHON_GITDB2_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-gobject/Config.in b/package/python-gobject/Config.in new file mode 100644 index 00000000..1c9303b0 --- /dev/null +++ b/package/python-gobject/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_PYTHON_GOBJECT + bool "python-gobject" + depends on BR2_USE_MMU # libglib2, gobject-introspection + depends on BR2_PACKAGE_GOBJECT_INTROSPECTION_ARCH_SUPPORTS # gobject-introspection + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # gobject-introspection + depends on BR2_TOOLCHAIN_USES_GLIBC # gobject-introspection + depends on BR2_PACKAGE_PYTHON3 # gobject-introspection + select BR2_PACKAGE_GOBJECT_INTROSPECTION + select BR2_PACKAGE_LIBGLIB2 + help + Python bindings for the GLib/GObject library + + https://wiki.gnome.org/action/show/Projects/PyGObject + +comment "python-gobject needs a glibc toolchain, gcc >= 4.9" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_GOBJECT_INTROSPECTION_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_USES_GLIBC || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/python-gobject/python-gobject.hash b/package/python-gobject/python-gobject.hash new file mode 100644 index 00000000..fd2235f2 --- /dev/null +++ b/package/python-gobject/python-gobject.hash @@ -0,0 +1,3 @@ +# from http://ftp.gnome.org/pub/GNOME/sources/pygobject/3.36/pygobject-3.36.1.sha256sum +sha256 d1bf42802d1cec113b5adaa0e7bf7f3745b44521dc2163588d276d5cd61d718f pygobject-3.36.1.tar.xz +sha256 32434afcc8666ba060e111d715bfdb6c2d5dd8a35fa4d3ab8ad67d8f850d2f2b COPYING diff --git a/package/python-gobject/python-gobject.mk b/package/python-gobject/python-gobject.mk new file mode 100644 index 00000000..0cada82f --- /dev/null +++ b/package/python-gobject/python-gobject.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# python-gobject +# +################################################################################ + +PYTHON_GOBJECT_VERSION_MAJOR = 3.36 +PYTHON_GOBJECT_VERSION = $(PYTHON_GOBJECT_VERSION_MAJOR).1 +PYTHON_GOBJECT_SOURCE = pygobject-$(PYTHON_GOBJECT_VERSION).tar.xz +PYTHON_GOBJECT_SITE = https://ftp.gnome.org/pub/gnome/sources/pygobject/$(PYTHON_GOBJECT_VERSION_MAJOR) +PYTHON_GOBJECT_LICENSE = LGPL-2.1+ +PYTHON_GOBJECT_LICENSE_FILES = COPYING +PYTHON_GOBJECT_INSTALL_STAGING = YES +PYTHON_GOBJECT_DEPENDENCIES = \ + gobject-introspection \ + host-pkgconf \ + libglib2 \ + python3 + +PYTHON_GOBJECT_CONF_OPTS += \ + -Dpycairo=false \ + -Dtests=false + +# A sysconfigdata_name must be manually specified or the resulting .so +# will have a x86_64 prefix, which causes "import gi" to fail. +# A pythonpath must be specified or the host python path will be used resulting +# in a "not a valid python" error. +PYTHON_GOBJECT_CONF_ENV += \ + _PYTHON_SYSCONFIGDATA_NAME=$(PKG_PYTHON_SYSCONFIGDATA_NAME) \ + PYTHONPATH=$(PYTHON3_PATH) + +$(eval $(meson-package)) diff --git a/package/python-gpiozero/Config.in b/package/python-gpiozero/Config.in new file mode 100644 index 00000000..1e2735be --- /dev/null +++ b/package/python-gpiozero/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_GPIOZERO + bool "python-gpiozero" + depends on BR2_arm + select BR2_PACKAGE_PYTHON_COLORZERO # runtime + select BR2_PACKAGE_PYTHON_RPI_GPIO # runtime + help + A simple interface to GPIO devices with Raspberry Pi. + + https://github.com/gpiozero/gpiozero diff --git a/package/python-gpiozero/python-gpiozero.hash b/package/python-gpiozero/python-gpiozero.hash new file mode 100644 index 00000000..23020035 --- /dev/null +++ b/package/python-gpiozero/python-gpiozero.hash @@ -0,0 +1,4 @@ +# Locally computed +sha256 8cb9824fe1b08e7935de03899455e20ce2c242e4cebb0c954c274c48059f6ea5 python-gpiozero-1.5.1.tar.gz +# Locally computed +sha256 b6e26763b79d7904d6eaa66f7f53ae374cf30431bb6ba8bcb0d9d5ff56dc69e3 LICENSE.rst diff --git a/package/python-gpiozero/python-gpiozero.mk b/package/python-gpiozero/python-gpiozero.mk new file mode 100644 index 00000000..67e8067a --- /dev/null +++ b/package/python-gpiozero/python-gpiozero.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-gpiozero +# +################################################################################ + +PYTHON_GPIOZERO_VERSION = 1.5.1 +PYTHON_GPIOZERO_SITE = $(call github,gpiozero,gpiozero,v$(PYTHON_GPIOZERO_VERSION)) +PYTHON_GPIOZERO_LICENSE = BSD-3-Clause +PYTHON_GPIOZERO_LICENSE_FILES = LICENSE.rst +PYTHON_GPIOZERO_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-greenlet/Config.in b/package/python-greenlet/Config.in new file mode 100644 index 00000000..c73eeb7b --- /dev/null +++ b/package/python-greenlet/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_PYTHON_GREENLET_ARCH_SUPPORTS + bool + default y if BR2_arm || BR2_armeb + default y if BR2_aarch64 + default y if BR2_csky + default y if BR2_m68k + default y if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el + default y if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le + default y if BR2_riscv + default y if BR2_sparc || BR2_sparc64 + default y if BR2_i386 || BR2_x86_64 + +config BR2_PACKAGE_PYTHON_GREENLET + bool "python-greenlet" + depends on BR2_PACKAGE_PYTHON_GREENLET_ARCH_SUPPORTS + help + Lightweight in-process concurrent programming. + + https://github.com/python-greenlet/greenlet diff --git a/package/python-greenlet/python-greenlet.hash b/package/python-greenlet/python-greenlet.hash new file mode 100644 index 00000000..eed8e597 --- /dev/null +++ b/package/python-greenlet/python-greenlet.hash @@ -0,0 +1,6 @@ +# md5, sha256 from https://pypi.org/pypi/greenlet/json +md5 9aebea08f7beb6b87143d0588578c984 greenlet-0.4.16.tar.gz +sha256 6e06eac722676797e8fce4adb8ad3dc57a1bb3adfb0dd3fdf8306c055a38456c greenlet-0.4.16.tar.gz +# Locally computed sha256 checksums +sha256 bbde55d5456a1e912633ed3f66d1dbd9504e3e3dce4f4c2015043cdcbc56e697 LICENSE +sha256 e5ff3c23c110e494cd7d736c10fd96d462457bafeca310840db6527298c7d46b LICENSE.PSF diff --git a/package/python-greenlet/python-greenlet.mk b/package/python-greenlet/python-greenlet.mk new file mode 100644 index 00000000..9243afe5 --- /dev/null +++ b/package/python-greenlet/python-greenlet.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-greenlet +# +################################################################################ + +PYTHON_GREENLET_VERSION = 0.4.16 +PYTHON_GREENLET_SOURCE = greenlet-$(PYTHON_GREENLET_VERSION).tar.gz +PYTHON_GREENLET_SITE = https://files.pythonhosted.org/packages/20/5e/b989a19f4597b825f44125345cd8a8574216fae7fafe69e2cb1238ebd18a +PYTHON_GREENLET_SETUP_TYPE = distutils +PYTHON_GREENLET_LICENSE = MIT, PSF-2.0 +PYTHON_GREENLET_LICENSE_FILES = LICENSE LICENSE.PSF + +$(eval $(python-package)) diff --git a/package/python-gunicorn/Config.in b/package/python-gunicorn/Config.in new file mode 100644 index 00000000..b3d11cf1 --- /dev/null +++ b/package/python-gunicorn/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_PYTHON_GUNICORN + bool "python-gunicorn" + select BR2_PACKAGE_PYTHON_SETUPTOOLS # runtime + select BR2_PACKAGE_PYTHON_SSL if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_SSL if BR2_PACKAGE_PYTHON3 # runtime + help + Gunicorn 'Green Unicorn' is a Python WSGI HTTP Server for + UNIX. It's a pre-fork worker model ported from Ruby's + Unicorn project. The Gunicorn server is broadly compatible + with various web frameworks, simply implemented, light on + server resource usage, and fairly speedy. + + http://gunicorn.org/ diff --git a/package/python-gunicorn/python-gunicorn.hash b/package/python-gunicorn/python-gunicorn.hash new file mode 100644 index 00000000..402250ea --- /dev/null +++ b/package/python-gunicorn/python-gunicorn.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.python.org/pypi/gunicorn/json +md5 f581937e9d8569ebd3fd6af1f9ab809f gunicorn-19.9.0.tar.gz +sha256 fa2662097c66f920f53f70621c6c58ca4a3c4d3434205e608e121b5b3b71f4f3 gunicorn-19.9.0.tar.gz +# Locally computed sha256 +sha256 789fe11b92e1cabfbcf744b5fcc392c9bd5c6798603a4e89f925b6337984d1df LICENSE diff --git a/package/python-gunicorn/python-gunicorn.mk b/package/python-gunicorn/python-gunicorn.mk new file mode 100644 index 00000000..d113f751 --- /dev/null +++ b/package/python-gunicorn/python-gunicorn.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# python-gunicorn +# +################################################################################ + +PYTHON_GUNICORN_VERSION = 19.9.0 +PYTHON_GUNICORN_SOURCE = gunicorn-$(PYTHON_GUNICORN_VERSION).tar.gz +PYTHON_GUNICORN_SITE = https://files.pythonhosted.org/packages/47/52/68ba8e5e8ba251e54006a49441f7ccabca83b6bef5aedacb4890596c7911 +PYTHON_GUNICORN_SETUP_TYPE = setuptools +PYTHON_GUNICORN_LICENSE = MIT +PYTHON_GUNICORN_LICENSE_FILES = LICENSE + +# At the end of the build, we try to compile all py files using the host python +# that has been built. +# The GAIO HTTP Worker is only compatible with Python3.4.2 and up. So don't try +# to compile it with python 2.x +ifeq ($(BR2_PACKAGE_PYTHON),y) +define PYTHON_GUNICORN_REMOVE_GAIO_WORKER + find $(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/site-packages/ \ + -name "_gaiohttp.py" -exec rm -f {} \; +endef +PYTHON_GUNICORN_POST_INSTALL_TARGET_HOOKS += PYTHON_GUNICORN_REMOVE_GAIO_WORKER +endif + +$(eval $(python-package)) diff --git a/package/python-h2/Config.in b/package/python-h2/Config.in new file mode 100644 index 00000000..dccee9b9 --- /dev/null +++ b/package/python-h2/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_H2 + bool "python-h2" + select BR2_PACKAGE_PYTHON_HYPERFRAME # runtime + select BR2_PACKAGE_PYTHON_HPACK # runtime + help + HTTP/2 State-Machine based protocol implementation. + + http://hyper.rtfd.org diff --git a/package/python-h2/python-h2.hash b/package/python-h2/python-h2.hash new file mode 100644 index 00000000..4193567d --- /dev/null +++ b/package/python-h2/python-h2.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/h2/json +md5 197a99c09f344a0dd987fab9801dc8d0 h2-3.2.0.tar.gz +sha256 875f41ebd6f2c44781259005b157faed1a5031df3ae5aa7bcb4628a6c0782f14 h2-3.2.0.tar.gz +# Locally computed sha256 checksums +sha256 663f9253e13519b82ab4a6b1caab6bed05aada70517f28cd0254be8a9fa19ed6 LICENSE diff --git a/package/python-h2/python-h2.mk b/package/python-h2/python-h2.mk new file mode 100644 index 00000000..81397bbb --- /dev/null +++ b/package/python-h2/python-h2.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-h2 +# +################################################################################ + +PYTHON_H2_VERSION = 3.2.0 +PYTHON_H2_SOURCE = h2-$(PYTHON_H2_VERSION).tar.gz +PYTHON_H2_SITE = https://files.pythonhosted.org/packages/08/0a/033df0fc05fe94f72517ccd393dd9ff99b1773fd198307638e6d3568a518 +PYTHON_H2_SETUP_TYPE = setuptools +PYTHON_H2_LICENSE = MIT +PYTHON_H2_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-hiredis/Config.in b/package/python-hiredis/Config.in new file mode 100644 index 00000000..a401de05 --- /dev/null +++ b/package/python-hiredis/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_HIREDIS + bool "python-hiredis" + help + Python wrapper for hiredis. + + https://github.com/redis/hiredis-py diff --git a/package/python-hiredis/python-hiredis.hash b/package/python-hiredis/python-hiredis.hash new file mode 100644 index 00000000..091532dd --- /dev/null +++ b/package/python-hiredis/python-hiredis.hash @@ -0,0 +1,6 @@ +# md5, sha256 from https://pypi.org/pypi/hiredis/json +md5 430294afb3ebb37ebc7cc05bf3e5a389 hiredis-1.1.0.tar.gz +sha256 996021ef33e0f50b97ff2d6b5f422a0fe5577de21a8873b58a779a5ddd1c3132 hiredis-1.1.0.tar.gz +# Locally computed sha256 checksums +sha256 70edfa6d3e11f9d7497c2c2f298d06f33b11d10f37f76605102c5ab3b1f28262 COPYING +sha256 dca05ce8fc87a8261783b4aed0deef8becc9350b6aa770bc714d0c1833b896eb vendor/hiredis/COPYING diff --git a/package/python-hiredis/python-hiredis.mk b/package/python-hiredis/python-hiredis.mk new file mode 100644 index 00000000..7d871d1f --- /dev/null +++ b/package/python-hiredis/python-hiredis.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-hiredis +# +################################################################################ + +PYTHON_HIREDIS_VERSION = 1.1.0 +PYTHON_HIREDIS_SOURCE = hiredis-$(PYTHON_HIREDIS_VERSION).tar.gz +PYTHON_HIREDIS_SITE = https://files.pythonhosted.org/packages/3d/9f/abc69e73055f73d42ddf9c46b3e01a08b9e74b579b8fc413cbd31112a749 +PYTHON_HIREDIS_SETUP_TYPE = setuptools +PYTHON_HIREDIS_LICENSE = BSD-3-Clause +PYTHON_HIREDIS_LICENSE_FILES = COPYING vendor/hiredis/COPYING + +$(eval $(python-package)) diff --git a/package/python-hpack/0001-Convert-HISTORY.rst-from-UTF-8-format-to-ASCII.patch b/package/python-hpack/0001-Convert-HISTORY.rst-from-UTF-8-format-to-ASCII.patch new file mode 100644 index 00000000..015b8a24 --- /dev/null +++ b/package/python-hpack/0001-Convert-HISTORY.rst-from-UTF-8-format-to-ASCII.patch @@ -0,0 +1,40 @@ +From 3d195f4f599f37c89419f1db1302f94acb38c264 Mon Sep 17 00:00:00 2001 +From: Yegor Yefremov +Date: Tue, 1 Aug 2017 10:15:33 +0200 +Subject: [PATCH] Convert HISTORY.rst from UTF-8 format to ASCII +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +UTF-8 formatted file breaks installations on some systems: + +Traceback (most recent call last): + File "setup.py", line 34, in + long_description=open('README.rst').read() + '\n\n' + open('HISTORY.rst').read(), + File "/home/peko/autobuild/instance-1/output/target/usr/lib/python3.6/encodings/ascii.py", line 26, in decode + return codecs.ascii_decode(input, self.errors)[0] +UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 1125: ordinal not in range(128) + +To fix this error just replace '§' with 'S' meaning 'Section'. + +Signed-off-by: Yegor Yefremov +--- + HISTORY.rst | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/HISTORY.rst b/HISTORY.rst +index 37b2d9c..b9310f5 100644 +--- a/HISTORY.rst ++++ b/HISTORY.rst +@@ -27,7 +27,7 @@ Release History + - HPACK now tolerates receiving multiple header table size changes in sequence, + rather than only one. + - HPACK now forbids header table size changes anywhere but first in a header +- block, as required by RFC 7541 § 4.2. ++ block, as required by RFC 7541 S 4.2. + - Other miscellaneous performance improvements. + + 2.3.0 (2016-08-04) +-- +2.11.0 + diff --git a/package/python-hpack/Config.in b/package/python-hpack/Config.in new file mode 100644 index 00000000..b0ea03bc --- /dev/null +++ b/package/python-hpack/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_HPACK + bool "python-hpack" + help + Pure-Python HPACK header compression. + + http://hyper.rtfd.org diff --git a/package/python-hpack/python-hpack.hash b/package/python-hpack/python-hpack.hash new file mode 100644 index 00000000..72886b0e --- /dev/null +++ b/package/python-hpack/python-hpack.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/hpack/json +md5 556b0ae66180f54c2ce8029a0952088b hpack-3.0.0.tar.gz +# Locally computed +sha256 8eec9c1f4bfae3408a3f30500261f7e6a65912dc138526ea054f9ad98892e9d2 hpack-3.0.0.tar.gz +sha256 763a9342a04df62046c9dc748a5287934eb0a5331c6863b3ca0aee20e18cb4ed LICENSE diff --git a/package/python-hpack/python-hpack.mk b/package/python-hpack/python-hpack.mk new file mode 100644 index 00000000..d6b96649 --- /dev/null +++ b/package/python-hpack/python-hpack.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-hpack +# +################################################################################ + +PYTHON_HPACK_VERSION = 3.0.0 +PYTHON_HPACK_SOURCE = hpack-$(PYTHON_HPACK_VERSION).tar.gz +PYTHON_HPACK_SITE = https://pypi.python.org/packages/44/f1/b4440e46e265a29c0cb7b09b6daec6edf93c79eae713cfed93fbbf8716c5 +PYTHON_HPACK_SETUP_TYPE = setuptools +PYTHON_HPACK_LICENSE = MIT +PYTHON_HPACK_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-html5lib/Config.in b/package/python-html5lib/Config.in new file mode 100644 index 00000000..34e22049 --- /dev/null +++ b/package/python-html5lib/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_HTML5LIB + bool "python-html5lib" + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON_WEBENCODINGS # runtime + help + HTML parser based on the WHATWG HTML specification. + + https://github.com/html5lib/html5lib-python diff --git a/package/python-html5lib/python-html5lib.hash b/package/python-html5lib/python-html5lib.hash new file mode 100644 index 00000000..04c64c10 --- /dev/null +++ b/package/python-html5lib/python-html5lib.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/html5lib/json +md5 942a0688d6bdf20d087c9805c40182ad html5lib-1.0.1.tar.gz +sha256 66cb0dcfdbbc4f9c3ba1a63fdb511ffdbd4f513b2b6d81b80cd26ce6b3fb3736 html5lib-1.0.1.tar.gz +# Locally computed sha256 checksums +sha256 16a39991619e92f18680932da2a9199fdf7d95df3ecaedc52ea06218aabafd6f LICENSE diff --git a/package/python-html5lib/python-html5lib.mk b/package/python-html5lib/python-html5lib.mk new file mode 100644 index 00000000..1d6aef1a --- /dev/null +++ b/package/python-html5lib/python-html5lib.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-html5lib +# +################################################################################ + +PYTHON_HTML5LIB_VERSION = 1.0.1 +PYTHON_HTML5LIB_SOURCE = html5lib-$(PYTHON_HTML5LIB_VERSION).tar.gz +PYTHON_HTML5LIB_SITE = https://files.pythonhosted.org/packages/85/3e/cf449cf1b5004e87510b9368e7a5f1acd8831c2d6691edd3c62a0823f98f +PYTHON_HTML5LIB_LICENSE = MIT +PYTHON_HTML5LIB_LICENSE_FILES = LICENSE +PYTHON_HTML5LIB_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-httplib2/Config.in b/package/python-httplib2/Config.in new file mode 100644 index 00000000..39671f23 --- /dev/null +++ b/package/python-httplib2/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PYTHON_HTTPLIB2 + bool "python-httplib2" + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON_SSL if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON3_SSL if BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_PYPARSING # runtime + help + httplib2 is a comprehensive HTTP client library, httplib2.py + supports many features left out of other HTTP libraries. + + https://pypi.python.org/pypi/httplib2 diff --git a/package/python-httplib2/python-httplib2.hash b/package/python-httplib2/python-httplib2.hash new file mode 100644 index 00000000..2c5914c5 --- /dev/null +++ b/package/python-httplib2/python-httplib2.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/httplib2/json +md5 de7f5e3a4adb3105889867327bdd39dc httplib2-0.19.1.tar.gz +sha256 0b12617eeca7433d4c396a100eaecfa4b08ee99aa881e6df6e257a7aad5d533d httplib2-0.19.1.tar.gz +# Locally computed sha256 checksums +sha256 589eec38f72df2be203711d3b8cbece9b908c5e7ff00bc3cab7f63bae9e366b4 LICENSE diff --git a/package/python-httplib2/python-httplib2.mk b/package/python-httplib2/python-httplib2.mk new file mode 100644 index 00000000..a259c33c --- /dev/null +++ b/package/python-httplib2/python-httplib2.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-httplib2 +# +################################################################################ + +PYTHON_HTTPLIB2_VERSION = 0.19.1 +PYTHON_HTTPLIB2_SOURCE = httplib2-$(PYTHON_HTTPLIB2_VERSION).tar.gz +PYTHON_HTTPLIB2_SITE = https://files.pythonhosted.org/packages/ed/cd/533a1e9e04671bcee5d2854b4f651a3fab9586d698de769d93b05ee2bff1 +PYTHON_HTTPLIB2_SETUP_TYPE = setuptools +PYTHON_HTTPLIB2_LICENSE = MIT +PYTHON_HTTPLIB2_LICENSE_FILES = LICENSE +PYTHON_HTTPLIB2_CPE_ID_VENDOR = httplib2_project +PYTHON_HTTPLIB2_CPE_ID_PRODUCT = httplib2 + +$(eval $(python-package)) diff --git a/package/python-huepy/0001-fix-import-with-python3.patch b/package/python-huepy/0001-fix-import-with-python3.patch new file mode 100644 index 00000000..e04eacb2 --- /dev/null +++ b/package/python-huepy/0001-fix-import-with-python3.patch @@ -0,0 +1,8 @@ +--- a/huepy/__init__.py ++++ b/huepy/__init__.py +@@ -1,4 +1,4 @@ +-from hue import COMMANDS ++from .hue import COMMANDS + + __all__ = list(COMMANDS.keys()) + __version__ = '1.0.1' diff --git a/package/python-huepy/Config.in b/package/python-huepy/Config.in new file mode 100644 index 00000000..0bdd25ff --- /dev/null +++ b/package/python-huepy/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_HUEPY + bool "python-huepy" + help + Hue will help you to print awesomely in terminals. + + https://github.com/s0md3v/hue diff --git a/package/python-huepy/python-huepy.hash b/package/python-huepy/python-huepy.hash new file mode 100644 index 00000000..5a1a8fc1 --- /dev/null +++ b/package/python-huepy/python-huepy.hash @@ -0,0 +1,4 @@ +# Locally computer sha256 checksums +md5 da6514d9d61fb75ac9470f6863ce1aca python-huepy-a9851d5aea10d2299cc62b3f6dce26ac4ef2ea3e.tar.gz +sha256 63147cef5ecae5c1ab38000be91def351710e6bef2c5f67b5303418becf6c0f2 python-huepy-a9851d5aea10d2299cc62b3f6dce26ac4ef2ea3e.tar.gz +sha256 8b1ba204bb69a0ade2bfcf65ef294a920f6bb361b317dba43c7ef29d96332b9b LICENSE diff --git a/package/python-huepy/python-huepy.mk b/package/python-huepy/python-huepy.mk new file mode 100644 index 00000000..5c104120 --- /dev/null +++ b/package/python-huepy/python-huepy.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-huepy +# +################################################################################ + +PYTHON_HUEPY_VERSION = a9851d5aea10d2299cc62b3f6dce26ac4ef2ea3e +PYTHON_HUEPY_SITE = $(call github,s0md3v,hue,$(PYTHON_HUEPY_VERSION)) +PYTHON_HUEPY_LICENSE = GPL-3.0 +PYTHON_HUEPY_LICENSE_FILES = LICENSE +PYTHON_HUEPY_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-humanize/Config.in b/package/python-humanize/Config.in new file mode 100644 index 00000000..f4f4e67b --- /dev/null +++ b/package/python-humanize/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_HUMANIZE + bool "python-humanize" + help + Python humanize package contains various common humanization + utilities, like turning a number into a fuzzy human readable + duration ('3 minutes ago') or into a human readable size or + throughput. + + http://github.com/jmoiron/humanize diff --git a/package/python-humanize/python-humanize.hash b/package/python-humanize/python-humanize.hash new file mode 100644 index 00000000..47b5f70c --- /dev/null +++ b/package/python-humanize/python-humanize.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/humanize/json +md5 e8473d9dc1b220911cac2edd53b1d973 humanize-0.5.1.tar.gz +# Locally computed +sha256 a43f57115831ac7c70de098e6ac46ac13be00d69abbf60bdcac251344785bb19 humanize-0.5.1.tar.gz +sha256 2ee89d331213b5886ae5416ead178694ac0eb13bb79c83bf92287f95d3597377 LICENCE diff --git a/package/python-humanize/python-humanize.mk b/package/python-humanize/python-humanize.mk new file mode 100644 index 00000000..60ec82bd --- /dev/null +++ b/package/python-humanize/python-humanize.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-humanize +# +################################################################################ + +PYTHON_HUMANIZE_VERSION = 0.5.1 +PYTHON_HUMANIZE_SOURCE = humanize-$(PYTHON_HUMANIZE_VERSION).tar.gz +PYTHON_HUMANIZE_SITE = https://pypi.python.org/packages/8c/e0/e512e4ac6d091fc990bbe13f9e0378f34cf6eecd1c6c268c9e598dcf5bb9 +PYTHON_HUMANIZE_SETUP_TYPE = setuptools +PYTHON_HUMANIZE_LICENSE = MIT +PYTHON_HUMANIZE_LICENSE_FILES = LICENCE + +$(eval $(python-package)) diff --git a/package/python-hyperframe/Config.in b/package/python-hyperframe/Config.in new file mode 100644 index 00000000..f3318a20 --- /dev/null +++ b/package/python-hyperframe/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_HYPERFRAME + bool "python-hyperframe" + help + HTTP/2 framing layer for Python. + + http://hyper.rtfd.org diff --git a/package/python-hyperframe/python-hyperframe.hash b/package/python-hyperframe/python-hyperframe.hash new file mode 100644 index 00000000..3e686a4a --- /dev/null +++ b/package/python-hyperframe/python-hyperframe.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/hyperframe/json +md5 6919183242feb26d8bce3b4cba81defd hyperframe-5.2.0.tar.gz +sha256 a9f5c17f2cc3c719b917c4f33ed1c61bd1f8dfac4b1bd23b7c80b3400971b41f hyperframe-5.2.0.tar.gz +# Locally computed sha256 checksums +sha256 763a9342a04df62046c9dc748a5287934eb0a5331c6863b3ca0aee20e18cb4ed LICENSE diff --git a/package/python-hyperframe/python-hyperframe.mk b/package/python-hyperframe/python-hyperframe.mk new file mode 100644 index 00000000..7640ade5 --- /dev/null +++ b/package/python-hyperframe/python-hyperframe.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-hyperframe +# +################################################################################ + +PYTHON_HYPERFRAME_VERSION = 5.2.0 +PYTHON_HYPERFRAME_SOURCE = hyperframe-$(PYTHON_HYPERFRAME_VERSION).tar.gz +PYTHON_HYPERFRAME_SITE = https://files.pythonhosted.org/packages/e6/7f/9a4834af1010dc1d570d5f394dfd9323a7d7ada7d25586bd299fc4cb0356 +PYTHON_HYPERFRAME_SETUP_TYPE = setuptools +PYTHON_HYPERFRAME_LICENSE = MIT +PYTHON_HYPERFRAME_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-hyperlink/Config.in b/package/python-hyperlink/Config.in new file mode 100644 index 00000000..8dad0af1 --- /dev/null +++ b/package/python-hyperlink/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_HYPERLINK + bool "python-hyperlink" + select BR2_PACKAGE_PYTHON_IDNA # runtime + help + A featureful, correct URL for Python. + + https://github.com/python-hyper/hyperlink diff --git a/package/python-hyperlink/python-hyperlink.hash b/package/python-hyperlink/python-hyperlink.hash new file mode 100644 index 00000000..94535002 --- /dev/null +++ b/package/python-hyperlink/python-hyperlink.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/hyperlink/json +md5 4772fb4d87c26a1ab22a6161424e3cba hyperlink-19.0.0.tar.gz +sha256 4288e34705da077fada1111a24a0aa08bb1e76699c9ce49876af722441845654 hyperlink-19.0.0.tar.gz +# Locally computed sha256 checksums +sha256 9577b66fb599aa5700b4981078ab0a319416a086beee646cd282aa9f33c8c74c LICENSE diff --git a/package/python-hyperlink/python-hyperlink.mk b/package/python-hyperlink/python-hyperlink.mk new file mode 100644 index 00000000..deff4fea --- /dev/null +++ b/package/python-hyperlink/python-hyperlink.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-hyperlink +# +################################################################################ + +PYTHON_HYPERLINK_VERSION = 19.0.0 +PYTHON_HYPERLINK_SOURCE = hyperlink-$(PYTHON_HYPERLINK_VERSION).tar.gz +PYTHON_HYPERLINK_SITE = https://files.pythonhosted.org/packages/e0/46/1451027b513a75edf676d25a47f601ca00b06a6a7a109e5644d921e7462d +PYTHON_HYPERLINK_SETUP_TYPE = setuptools +PYTHON_HYPERLINK_LICENSE = MIT +PYTHON_HYPERLINK_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-ibmiotf/Config.in b/package/python-ibmiotf/Config.in new file mode 100644 index 00000000..0f5f75be --- /dev/null +++ b/package/python-ibmiotf/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_PYTHON_IBMIOTF + bool "python-ibmiotf" + select BR2_PACKAGE_PYTHON_ISO8601 # runtime + select BR2_PACKAGE_PYTHON_PAHO_MQTT # runtime + select BR2_PACKAGE_PYTHON_PYTZ # runtime + select BR2_PACKAGE_PYTHON_REQUESTS # runtime + select BR2_PACKAGE_PYTHON_REQUESTS_TOOLBELT # runtime + select BR2_PACKAGE_PYTHON_SSL if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_SSL if BR2_PACKAGE_PYTHON3 # runtime + help + Python Client for IBM Watson IoT Platform. + + https://github.com/ibm-watson-iot/iot-python diff --git a/package/python-ibmiotf/python-ibmiotf.hash b/package/python-ibmiotf/python-ibmiotf.hash new file mode 100644 index 00000000..6b60aa52 --- /dev/null +++ b/package/python-ibmiotf/python-ibmiotf.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/ibmiotf/json +md5 a103427c15b2bc96d72de5e58975638c ibmiotf-0.4.0.tar.gz +sha256 753a29858d48ebd89aff8b73c207028814714d8a004a3c19b436c9bbeaa65ce6 ibmiotf-0.4.0.tar.gz +# Locally computed sha256 checksums +sha256 2c153c48f67e56031036fc28d12f76238a5151494bdfc24b6b81ec734c387a2d LICENSE diff --git a/package/python-ibmiotf/python-ibmiotf.mk b/package/python-ibmiotf/python-ibmiotf.mk new file mode 100644 index 00000000..62ffba5b --- /dev/null +++ b/package/python-ibmiotf/python-ibmiotf.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-ibmiotf +# +################################################################################ + +PYTHON_IBMIOTF_VERSION = 0.4.0 +PYTHON_IBMIOTF_SOURCE = ibmiotf-$(PYTHON_IBMIOTF_VERSION).tar.gz +PYTHON_IBMIOTF_SITE = https://files.pythonhosted.org/packages/78/05/029ca6f78b788a3c55157fd11bb63922d002d75df982ffb8243f450a750e +PYTHON_IBMIOTF_SETUP_TYPE = setuptools +PYTHON_IBMIOTF_LICENSE = EPL-1.0 +PYTHON_IBMIOTF_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-id3/Config.in b/package/python-id3/Config.in new file mode 100644 index 00000000..6ddfd541 --- /dev/null +++ b/package/python-id3/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_ID3 + bool "python-id3" + depends on BR2_PACKAGE_PYTHON + help + This module allows one to read and manipulate so-called ID3 + informational tags on MP3 files through an object-oriented + Python interface. + + http://id3-py.sourceforge.net/ diff --git a/package/python-id3/python-id3.hash b/package/python-id3/python-id3.hash new file mode 100644 index 00000000..c83b34a2 --- /dev/null +++ b/package/python-id3/python-id3.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 ba612342b59a49cbf9a7eb23a646667757ffda96dc23b67245fc6cd8d90c2022 id3-py_1.2.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/python-id3/python-id3.mk b/package/python-id3/python-id3.mk new file mode 100644 index 00000000..d4cdded0 --- /dev/null +++ b/package/python-id3/python-id3.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-id3 +# +################################################################################ + +PYTHON_ID3_VERSION = 1.2 +PYTHON_ID3_SOURCE = id3-py_$(PYTHON_ID3_VERSION).tar.gz +PYTHON_ID3_SITE = http://downloads.sourceforge.net/project/id3-py/id3-py/$(PYTHON_ID3_VERSION) +PYTHON_ID3_SETUP_TYPE = distutils +PYTHON_ID3_LICENSE = GPL-2.0+ +PYTHON_ID3_LICENSE_FILES = COPYING + +$(eval $(python-package)) diff --git a/package/python-idna/Config.in b/package/python-idna/Config.in new file mode 100644 index 00000000..e3e548d4 --- /dev/null +++ b/package/python-idna/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PYTHON_IDNA + bool "python-idna" + select BR2_PACKAGE_PYTHON_UNICODEDATA if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_UNICODEDATA if BR2_PACKAGE_PYTHON3 + help + A library to support the Internationalised Domain Names in + Applications (IDNA) protocol as specified in RFC 5891. This + version of the protocol is often referred to as 'IDNA2008' + and can produce different results from the earlier standard + from 2003. + + https://github.com/kjd/idna diff --git a/package/python-idna/python-idna.hash b/package/python-idna/python-idna.hash new file mode 100644 index 00000000..c5f7378f --- /dev/null +++ b/package/python-idna/python-idna.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/idna/json +md5 7a910c706db30d758f377db2762c0f9a idna-2.10.tar.gz +sha256 b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6 idna-2.10.tar.gz +# Locally computed sha256 checksums +sha256 412014420d2473dba06117c3d4d9e0eecaa6dde0ca30cd951f4ec2be39426f32 LICENSE.rst diff --git a/package/python-idna/python-idna.mk b/package/python-idna/python-idna.mk new file mode 100644 index 00000000..b4d9839e --- /dev/null +++ b/package/python-idna/python-idna.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-idna +# +################################################################################ + +PYTHON_IDNA_VERSION = 2.10 +PYTHON_IDNA_SOURCE = idna-$(PYTHON_IDNA_VERSION).tar.gz +PYTHON_IDNA_SITE = https://files.pythonhosted.org/packages/ea/b7/e0e3c1c467636186c39925827be42f16fee389dc404ac29e930e9136be70 +PYTHON_IDNA_LICENSE = BSD-3-Clause +PYTHON_IDNA_LICENSE_FILES = LICENSE.rst +PYTHON_IDNA_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-ifaddr/Config.in b/package/python-ifaddr/Config.in new file mode 100644 index 00000000..64e9a3aa --- /dev/null +++ b/package/python-ifaddr/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_IFADDR + bool "python-ifaddr" + help + Enumerates all IP addresses on all network adapters of the + system. + + https://github.com/pydron/ifaddr diff --git a/package/python-ifaddr/python-ifaddr.hash b/package/python-ifaddr/python-ifaddr.hash new file mode 100644 index 00000000..57b155ca --- /dev/null +++ b/package/python-ifaddr/python-ifaddr.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/ifaddr/json +md5 97c4eb7505643b5f1fe17733cb42abd9 ifaddr-0.1.7.tar.gz +sha256 1f9e8a6ca6f16db5a37d3356f07b6e52344f6f9f7e806d618537731669eb1a94 ifaddr-0.1.7.tar.gz +# Locally computed sha256 checksums +sha256 8700856576ae2bc80c63bc970250510d9213fb02fed006d5f22742c9ddde24d7 LICENSE.txt diff --git a/package/python-ifaddr/python-ifaddr.mk b/package/python-ifaddr/python-ifaddr.mk new file mode 100644 index 00000000..f1154d9d --- /dev/null +++ b/package/python-ifaddr/python-ifaddr.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-ifaddr +# +################################################################################ + +PYTHON_IFADDR_VERSION = 0.1.7 +PYTHON_IFADDR_SOURCE = ifaddr-$(PYTHON_IFADDR_VERSION).tar.gz +PYTHON_IFADDR_SITE = https://files.pythonhosted.org/packages/3d/fc/4ce147e3997cd0ea470ad27112087545cf83bf85015ddb3054673cb471bb +PYTHON_IFADDR_SETUP_TYPE = setuptools +PYTHON_IFADDR_LICENSE = MIT +PYTHON_IFADDR_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-incremental/Config.in b/package/python-incremental/Config.in new file mode 100644 index 00000000..64f86233 --- /dev/null +++ b/package/python-incremental/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_INCREMENTAL + bool "python-incremental" + help + A library for versioning your Python projects. + + https://github.com/hawkowl/incremental diff --git a/package/python-incremental/python-incremental.hash b/package/python-incremental/python-incremental.hash new file mode 100644 index 00000000..c897f6e4 --- /dev/null +++ b/package/python-incremental/python-incremental.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/incremental/json +md5 602746e0d438e075a5a9e0678140bba2 incremental-17.5.0.tar.gz +sha256 7b751696aaf36eebfab537e458929e194460051ccad279c72b755a167eebd4b3 incremental-17.5.0.tar.gz +# Locally computed sha256 +sha256 d043bc8899b4695de1f4511d8f507b927e11723b981ce600fa3ef7b73954afa5 LICENSE diff --git a/package/python-incremental/python-incremental.mk b/package/python-incremental/python-incremental.mk new file mode 100644 index 00000000..9c9d3a44 --- /dev/null +++ b/package/python-incremental/python-incremental.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-incremental +# +################################################################################ + +PYTHON_INCREMENTAL_VERSION = 17.5.0 +PYTHON_INCREMENTAL_SOURCE = incremental-$(PYTHON_INCREMENTAL_VERSION).tar.gz +PYTHON_INCREMENTAL_SITE = https://files.pythonhosted.org/packages/8f/26/02c4016aa95f45479eea37c90c34f8fab6775732ae62587a874b619ca097 +PYTHON_INCREMENTAL_SETUP_TYPE = setuptools +PYTHON_INCREMENTAL_LICENSE = MIT +PYTHON_INCREMENTAL_LICENSE_FILES = LICENSE + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-inflection/Config.in b/package/python-inflection/Config.in new file mode 100644 index 00000000..427275bc --- /dev/null +++ b/package/python-inflection/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PYTHON_INFLECTION + bool "python-inflection" + select BR2_PACKAGE_PYTHON_UNICODEDATA if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_UNICODEDATA if BR2_PACKAGE_PYTHON3 + help + A string transformation library that singularizes and + pluralizes English words, and transforms strings from + CamelCase to underscored string. + + Inflection is a port of Ruby on Rails' inflector to Python + + https://github.com/jpvanhal/inflection diff --git a/package/python-inflection/python-inflection.hash b/package/python-inflection/python-inflection.hash new file mode 100644 index 00000000..bdad35ad --- /dev/null +++ b/package/python-inflection/python-inflection.hash @@ -0,0 +1,5 @@ +# Hashes from https://pypi.python.org/pypi/inflection/json +md5 7941165e9f148e0520023941c0886b40 inflection-0.3.1.tar.gz +sha256 18ea7fb7a7d152853386523def08736aa8c32636b047ade55f7578c4edeb16ca inflection-0.3.1.tar.gz +# License file, locally calculated +sha256 4a3f52ac1012a90db398e4c55f1d1bea501dddafef8a4b3adb7533b1d820e148 LICENSE diff --git a/package/python-inflection/python-inflection.mk b/package/python-inflection/python-inflection.mk new file mode 100644 index 00000000..7309880c --- /dev/null +++ b/package/python-inflection/python-inflection.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-inflection +# +################################################################################ + +PYTHON_INFLECTION_VERSION = 0.3.1 +PYTHON_INFLECTION_SOURCE = inflection-$(PYTHON_INFLECTION_VERSION).tar.gz +PYTHON_INFLECTION_SITE = https://pypi.python.org/packages/d5/35/a6eb45b4e2356fe688b21570864d4aa0d0a880ce387defe9c589112077f8 +PYTHON_INFLECTION_SETUP_TYPE = setuptools +PYTHON_INFLECTION_LICENSE = MIT +PYTHON_INFLECTION_LICENSE_FILES = LICENSE + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-influxdb/Config.in b/package/python-influxdb/Config.in new file mode 100644 index 00000000..6ebbd4aa --- /dev/null +++ b/package/python-influxdb/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PYTHON_INFLUXDB + bool "python-influxdb" + select BR2_PACKAGE_PYTHON_DATEUTIL # runtime + select BR2_PACKAGE_PYTHON_MSGPACK # runtime + select BR2_PACKAGE_PYTHON_PYTZ # runtime + select BR2_PACKAGE_PYTHON_REQUESTS # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + help + InfluxDB client. + + https://github.com/influxdb/influxdb-python diff --git a/package/python-influxdb/python-influxdb.hash b/package/python-influxdb/python-influxdb.hash new file mode 100644 index 00000000..7b43091e --- /dev/null +++ b/package/python-influxdb/python-influxdb.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/influxdb/json +md5 d528c8ccd8ab40bc608ad1e507e7788a influxdb-5.3.0.tar.gz +sha256 9bcaafd57ac152b9824ab12ed19f204206ef5df8af68404770554c5b55b475f6 influxdb-5.3.0.tar.gz +# Locally computed sha256 checksums +sha256 b654917e2c25a69d2bd56e72dddbc6eb29bf7e40384d7c46bb291d5c5185213b LICENSE diff --git a/package/python-influxdb/python-influxdb.mk b/package/python-influxdb/python-influxdb.mk new file mode 100644 index 00000000..e5b1aea7 --- /dev/null +++ b/package/python-influxdb/python-influxdb.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-influxdb +# +################################################################################ + +PYTHON_INFLUXDB_VERSION = 5.3.0 +PYTHON_INFLUXDB_SOURCE = influxdb-$(PYTHON_INFLUXDB_VERSION).tar.gz +PYTHON_INFLUXDB_SITE = https://files.pythonhosted.org/packages/be/8d/85ec8f11299a6dfc115244db71fd8f13e9a69f5e9eb77dc3392f4f959e9a +PYTHON_INFLUXDB_SETUP_TYPE = setuptools +PYTHON_INFLUXDB_LICENSE = MIT +PYTHON_INFLUXDB_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-iniconfig/Config.in b/package/python-iniconfig/Config.in new file mode 100644 index 00000000..a288da8a --- /dev/null +++ b/package/python-iniconfig/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_INICONFIG + bool "python-iniconfig" + help + iniconfig: brain-dead simple config-ini parsing. + + http://github.com/RonnyPfannschmidt/iniconfig diff --git a/package/python-iniconfig/python-iniconfig.hash b/package/python-iniconfig/python-iniconfig.hash new file mode 100644 index 00000000..b2469db9 --- /dev/null +++ b/package/python-iniconfig/python-iniconfig.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/iniconfig/json +md5 0b7f3be87481211c183eae095bcea6f1 iniconfig-1.1.1.tar.gz +sha256 bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32 iniconfig-1.1.1.tar.gz +# Locally computed sha256 checksums +sha256 2af680c39ef493fb82830356d1d3df1acb5a06033cba2dec7a19e21caa77a866 LICENSE diff --git a/package/python-iniconfig/python-iniconfig.mk b/package/python-iniconfig/python-iniconfig.mk new file mode 100644 index 00000000..5c31c699 --- /dev/null +++ b/package/python-iniconfig/python-iniconfig.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-iniconfig +# +################################################################################ + +PYTHON_INICONFIG_VERSION = 1.1.1 +PYTHON_INICONFIG_SOURCE = iniconfig-$(PYTHON_INICONFIG_VERSION).tar.gz +PYTHON_INICONFIG_SITE = https://files.pythonhosted.org/packages/23/a2/97899f6bd0e873fed3a7e67ae8d3a08b21799430fb4da15cfedf10d6e2c2 +PYTHON_INICONFIG_SETUP_TYPE = setuptools +PYTHON_INICONFIG_LICENSE = MIT +PYTHON_INICONFIG_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-iniparse/Config.in b/package/python-iniparse/Config.in new file mode 100644 index 00000000..3d9c02e4 --- /dev/null +++ b/package/python-iniparse/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PYTHON_INIPARSE + bool "python-iniparse" + select BR2_PACKAGE_PYTHON_SIX # runtime + help + iniparse is an INI parser for Python which is API compatible + with the standard library's ConfigParser, preserves + structure of INI files (order of sections & options, + indentation, comments, and blank lines are preserved when + data is updated), and is more convenient to use. + + https://pypi.python.org/pypi/iniparse diff --git a/package/python-iniparse/python-iniparse.hash b/package/python-iniparse/python-iniparse.hash new file mode 100644 index 00000000..238d41e0 --- /dev/null +++ b/package/python-iniparse/python-iniparse.hash @@ -0,0 +1,7 @@ +# From https://pypi.org/project/iniparse/#copy-hash-modal-5fdd923b-0592-4d2d-8b49-03472f948290 +md5 2054bab923df21107652d009f2373789 iniparse-0.5.tar.gz +sha256 932e5239d526e7acb504017bb707be67019ac428a6932368e6851691093aa842 iniparse-0.5.tar.gz + +# sha256 locally computed +sha256 ff45637d8a96adc414179e502fbed40160e57205bf2e302140e79a0c71eceaa7 LICENSE +sha256 9b02e3dfe433ccd2bd94636ef6eb08638b5a54deafe5f87a3d9d9104356c48e0 LICENSE-PSF diff --git a/package/python-iniparse/python-iniparse.mk b/package/python-iniparse/python-iniparse.mk new file mode 100644 index 00000000..d31a490b --- /dev/null +++ b/package/python-iniparse/python-iniparse.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-iniparse +# +################################################################################ + +PYTHON_INIPARSE_VERSION = 0.5 +PYTHON_INIPARSE_SOURCE = iniparse-$(PYTHON_INIPARSE_VERSION).tar.gz +PYTHON_INIPARSE_SITE = https://pypi.python.org/packages/source/i/iniparse +PYTHON_INIPARSE_LICENSE = Python-2.0, MIT +PYTHON_INIPARSE_LICENSE_FILES = LICENSE-PSF LICENSE +PYTHON_INIPARSE_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-intelhex/Config.in b/package/python-intelhex/Config.in new file mode 100644 index 00000000..d67de822 --- /dev/null +++ b/package/python-intelhex/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_INTELHEX + bool "python-intelhex" + help + Python library for Intel HEX files manipulations. + + https://github.com/python-intelhex/intelhex diff --git a/package/python-intelhex/python-intelhex.hash b/package/python-intelhex/python-intelhex.hash new file mode 100644 index 00000000..917bd72c --- /dev/null +++ b/package/python-intelhex/python-intelhex.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/intelhex/json +md5 9de0e92c1b66f75322581c8b22c020c2 intelhex-2.3.0.tar.gz +sha256 892b7361a719f4945237da8ccf754e9513db32f5628852785aea108dcd250093 intelhex-2.3.0.tar.gz +# Locally computed sha256 checksums +sha256 1b2eb032ab8a1b0266f7995c76e44509f89ca9c0e90ec507763b5e735aca7de4 LICENSE.txt diff --git a/package/python-intelhex/python-intelhex.mk b/package/python-intelhex/python-intelhex.mk new file mode 100644 index 00000000..cc8b973f --- /dev/null +++ b/package/python-intelhex/python-intelhex.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-intelhex +# +################################################################################ + +PYTHON_INTELHEX_VERSION = 2.3.0 +PYTHON_INTELHEX_SOURCE = intelhex-$(PYTHON_INTELHEX_VERSION).tar.gz +PYTHON_INTELHEX_SITE = https://files.pythonhosted.org/packages/66/37/1e7522494557d342a24cb236e2aec5d078fac8ed03ad4b61372586406b01 +PYTHON_INTELHEX_SETUP_TYPE = setuptools +PYTHON_INTELHEX_LICENSE = BSD-3-Clause +PYTHON_INTELHEX_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-iowait/Config.in b/package/python-iowait/Config.in new file mode 100644 index 00000000..ebe96db1 --- /dev/null +++ b/package/python-iowait/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_IOWAIT + bool "python-iowait" + help + Platform-independent module for I/O completion events. + + https://launchpad.net/python-iowait diff --git a/package/python-iowait/python-iowait.hash b/package/python-iowait/python-iowait.hash new file mode 100644 index 00000000..fcaf8cc5 --- /dev/null +++ b/package/python-iowait/python-iowait.hash @@ -0,0 +1,4 @@ +# md5 from https://pypi.python.org/pypi/iowait/json, sha256 locally computed +md5 f49ca7766fe4a67e03a731e575614f87 iowait-0.2.tar.gz +sha256 ab1bc2eb84c22ccf61f17a0024f9fb6df781b39f1852764a66a7769d5adfb299 iowait-0.2.tar.gz +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 COPYING.LESSER diff --git a/package/python-iowait/python-iowait.mk b/package/python-iowait/python-iowait.mk new file mode 100644 index 00000000..e327053e --- /dev/null +++ b/package/python-iowait/python-iowait.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-iowait +# +################################################################################ + +PYTHON_IOWAIT_VERSION = 0.2 +PYTHON_IOWAIT_SOURCE = iowait-$(PYTHON_IOWAIT_VERSION).tar.gz +PYTHON_IOWAIT_SITE = https://pypi.python.org/packages/65/30/e953673fe9619938e9c74408401cf865f37716da89f61f6e5d9328c0f71e +PYTHON_IOWAIT_SETUP_TYPE = distutils +PYTHON_IOWAIT_LICENSE = LGPL-3.0+ +PYTHON_IOWAIT_LICENSE_FILES = COPYING.LESSER + +$(eval $(python-package)) diff --git a/package/python-ipaddr/Config.in b/package/python-ipaddr/Config.in new file mode 100644 index 00000000..57279273 --- /dev/null +++ b/package/python-ipaddr/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_IPADDR + bool "python-ipaddr" + depends on BR2_PACKAGE_PYTHON # included since python3.3 + help + An IPv4/IPv6 manipulation library in Python. This library is + used to create/poke/manipulate IPv4 and IPv6 addresses and + prefixes. + + https://github.com/google/ipaddr-py diff --git a/package/python-ipaddr/python-ipaddr.hash b/package/python-ipaddr/python-ipaddr.hash new file mode 100644 index 00000000..d9963a29 --- /dev/null +++ b/package/python-ipaddr/python-ipaddr.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/ipaddr/json +md5 f88353e40dec06410acfa075b8209b27 ipaddr-2.2.0.tar.gz +sha256 4092dfe667588d16aa12b59acb7c8a4024e5dcb23a681cd0b0b602373eca88d6 ipaddr-2.2.0.tar.gz +# Locally computed sha256 checksums +sha256 175b3b509d5c840db72ad8c22d22a690d15c67b317f34de8a8bb0a66059e8215 COPYING diff --git a/package/python-ipaddr/python-ipaddr.mk b/package/python-ipaddr/python-ipaddr.mk new file mode 100644 index 00000000..9a5d1475 --- /dev/null +++ b/package/python-ipaddr/python-ipaddr.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-ipaddr +# +################################################################################ + +PYTHON_IPADDR_VERSION = 2.2.0 +PYTHON_IPADDR_SOURCE = ipaddr-$(PYTHON_IPADDR_VERSION).tar.gz +PYTHON_IPADDR_SITE = https://files.pythonhosted.org/packages/9d/a7/1b39a16cb90dfe491f57e1cab3103a15d4e8dd9a150872744f531b1106c1 +PYTHON_IPADDR_SETUP_TYPE = distutils +PYTHON_IPADDR_LICENSE = Apache-2.0 +PYTHON_IPADDR_LICENSE_FILES = COPYING + +$(eval $(python-package)) diff --git a/package/python-ipaddress/Config.in b/package/python-ipaddress/Config.in new file mode 100644 index 00000000..b2b9f0b1 --- /dev/null +++ b/package/python-ipaddress/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_IPADDRESS + bool "python-ipaddress" + depends on BR2_PACKAGE_PYTHON + help + Python 3.3's ipaddress for older Python versions. + + https://github.com/phihag/ipaddress diff --git a/package/python-ipaddress/python-ipaddress.hash b/package/python-ipaddress/python-ipaddress.hash new file mode 100644 index 00000000..e61835e1 --- /dev/null +++ b/package/python-ipaddress/python-ipaddress.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/ipaddress/json +md5 aaee67a8026782af1831148beb0d9060 ipaddress-1.0.23.tar.gz +sha256 b7f8e0369580bb4a24d5ba1d7cc29660a4a6987763faf1d8a8046830e020e7e2 ipaddress-1.0.23.tar.gz +# Locally computed sha256 checksums +sha256 38675419eb4a79ec616396d70f1254b3a433fb7088fb3f4cc9b6c0bcdcec6162 LICENSE diff --git a/package/python-ipaddress/python-ipaddress.mk b/package/python-ipaddress/python-ipaddress.mk new file mode 100644 index 00000000..8f1ad5ff --- /dev/null +++ b/package/python-ipaddress/python-ipaddress.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-ipaddress +# +################################################################################ + +PYTHON_IPADDRESS_VERSION = 1.0.23 +PYTHON_IPADDRESS_SOURCE = ipaddress-$(PYTHON_IPADDRESS_VERSION).tar.gz +PYTHON_IPADDRESS_SITE = https://files.pythonhosted.org/packages/b9/9a/3e9da40ea28b8210dd6504d3fe9fe7e013b62bf45902b458d1cdc3c34ed9 +PYTHON_IPADDRESS_LICENSE = Python-2.0 +PYTHON_IPADDRESS_LICENSE_FILES = LICENSE +PYTHON_IPADDRESS_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-ipdb/Config.in b/package/python-ipdb/Config.in new file mode 100644 index 00000000..4a89bf75 --- /dev/null +++ b/package/python-ipdb/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_IPDB + bool "python-ipdb" + depends on BR2_PACKAGE_PYTHON3 # python-ipython + select BR2_PACKAGE_PYTHON_SETUPTOOLS # runtime + select BR2_PACKAGE_PYTHON_IPYTHON # runtime + help + IPython-enabled pdb. + + https://github.com/gotcha/ipdb diff --git a/package/python-ipdb/python-ipdb.hash b/package/python-ipdb/python-ipdb.hash new file mode 100644 index 00000000..c7cd9322 --- /dev/null +++ b/package/python-ipdb/python-ipdb.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/ipdb/json +md5 7db72771b279924ac4e5905d7eee184e ipdb-0.13.2.tar.gz +sha256 77fb1c2a6fccdfee0136078c9ed6fe547ab00db00bebff181f1e8c9e13418d49 ipdb-0.13.2.tar.gz +# Locally computed sha256 checksums +sha256 4eeb49de04f4894f8ea1f69a04f500799041b750b3d554c06de5ca877258e734 COPYING.txt diff --git a/package/python-ipdb/python-ipdb.mk b/package/python-ipdb/python-ipdb.mk new file mode 100644 index 00000000..c98f9700 --- /dev/null +++ b/package/python-ipdb/python-ipdb.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-ipdb +# +################################################################################ + +PYTHON_IPDB_VERSION = 0.13.2 +PYTHON_IPDB_SOURCE = ipdb-$(PYTHON_IPDB_VERSION).tar.gz +PYTHON_IPDB_SITE = https://files.pythonhosted.org/packages/2c/bb/a3e1a441719ebd75c6dac8170d3ddba884b7ee8a5c0f9aefa7297386627a +PYTHON_IPDB_SETUP_TYPE = setuptools +PYTHON_IPDB_LICENSE = BSD-3-Clause +PYTHON_IPDB_LICENSE_FILES = COPYING.txt + +$(eval $(python-package)) diff --git a/package/python-iptables/0001-Add-separate-mechanism-to-load-libc.patch b/package/python-iptables/0001-Add-separate-mechanism-to-load-libc.patch new file mode 100644 index 00000000..2a344c2f --- /dev/null +++ b/package/python-iptables/0001-Add-separate-mechanism-to-load-libc.patch @@ -0,0 +1,90 @@ +From e3557528d7cdcdc2c579212be8837bc9b54635a4 Mon Sep 17 00:00:00 2001 +From: Frank Vanbever +Date: Thu, 20 Feb 2020 12:14:08 +0100 +Subject: [PATCH] Add separate mechanism to load libc + +ctypes.util.find_library() always returns None for systems which do not have the +tools installed to determine the location of a given shared library (i.e. +ldconfig, gcc, objdump). If find_libary() fails attempt to load known libc by +SONAME. + +Upstream: https://github.com/ldx/python-iptables/commit/e3557528d7cdcdc2c579212be8837bc9b54635a4 + +Signed-off-by: Frank Vanbever +--- + iptc/ip4tc.py | 4 ++-- + iptc/util.py | 16 ++++++++++++++++ + iptc/xtables.py | 4 ++-- + 3 files changed, 20 insertions(+), 4 deletions(-) + +diff --git a/iptc/ip4tc.py b/iptc/ip4tc.py +index 4c5d690..4ddd2dc 100644 +--- a/iptc/ip4tc.py ++++ b/iptc/ip4tc.py +@@ -9,7 +9,7 @@ import socket + import struct + import weakref + +-from .util import find_library, load_kernel ++from .util import find_library, load_kernel, find_libc + from .xtables import (XT_INV_PROTO, NFPROTO_IPV4, XTablesError, xtables, + xt_align, xt_counters, xt_entry_target, xt_entry_match) + +@@ -26,7 +26,7 @@ if not hasattr(socket, 'IPPROTO_SCTP'): + + _IFNAMSIZ = 16 + +-_libc = ct.CDLL("libc.so.6") ++_libc = find_libc() + _get_errno_loc = _libc.__errno_location + _get_errno_loc.restype = ct.POINTER(ct.c_int) + _malloc = _libc.malloc +diff --git a/iptc/util.py b/iptc/util.py +index ae5fb9b..e6b1649 100644 +--- a/iptc/util.py ++++ b/iptc/util.py +@@ -109,3 +109,19 @@ def find_library(*names): + major = int(m.group(1)) + return lib, major + return None, None ++ ++ ++def find_libc(): ++ lib = ctypes.util.find_library('c') ++ if lib is not None: ++ return ctypes.CDLL(lib, mode=ctypes.RTLD_GLOBAL) ++ ++ libnames = ['libc.so.6', 'libc.so.0', 'libc.so'] ++ for name in libnames: ++ try: ++ lib = ctypes.CDLL(name, mode=ctypes.RTLD_GLOBAL) ++ return lib ++ except: ++ pass ++ ++ return None +diff --git a/iptc/xtables.py b/iptc/xtables.py +index 93bc080..cf21029 100644 +--- a/iptc/xtables.py ++++ b/iptc/xtables.py +@@ -6,7 +6,7 @@ import sys + import weakref + + from . import version +-from .util import find_library ++from .util import find_library, find_libc + from .errors import * + + XT_INV_PROTO = 0x40 # invert the sense of PROTO +@@ -792,7 +792,7 @@ class xtables_target(ct.Union): + ("v12", _xtables_target_v12)] + + +-_libc, _ = find_library("c") ++_libc = find_libc() + _optind = ct.c_long.in_dll(_libc, "optind") + _optarg = ct.c_char_p.in_dll(_libc, "optarg") + +-- +2.20.1 + diff --git a/package/python-iptables/0002-Add-.so-as-additional-shared-object-suffix.patch b/package/python-iptables/0002-Add-.so-as-additional-shared-object-suffix.patch new file mode 100644 index 00000000..41d49fc1 --- /dev/null +++ b/package/python-iptables/0002-Add-.so-as-additional-shared-object-suffix.patch @@ -0,0 +1,57 @@ +From 899d25c511c6ce779b7153e9ae2e41055b30b9c5 Mon Sep 17 00:00:00 2001 +From: Frank Vanbever +Date: Mon, 9 Mar 2020 12:36:47 +0100 +Subject: [PATCH] Add '.so' as additional shared object suffix + +EXT_SUFFIX includes a platform information tag starting from Python 3.5 [0] +For example: + + >>> sysconfig.get_config_var("EXT_SUFFIX") + '.cpython-38-aarch64-linux-gnu.so' + +This suffix only applies to cpython extensions i.e. not to the iptables shared +objects. + +Adding '.so' as an additional suffix for shared objects fixes the issue. + +Fixes: Issue #301 + +Signed-off-by: Frank Vanbever + +Backported from: 899d25c511c6ce779b7153e9ae2e41055b30b9c5 + +[0]: https://docs.python.org/3/whatsnew/3.5.html#build-and-c-api-changes +--- + iptc/util.py | 13 ++++++++++--- + 1 file changed, 10 insertions(+), 3 deletions(-) + +diff --git a/iptc/util.py b/iptc/util.py +index e6b1649..04fe905 100644 +--- a/iptc/util.py ++++ b/iptc/util.py +@@ -80,12 +80,19 @@ def _do_find_library(name): + + + def _find_library(*names): ++ exts = [] + if version_info >= (3, 3): +- ext = get_config_var("EXT_SUFFIX") ++ exts.append(get_config_var("EXT_SUFFIX")) + else: +- ext = get_config_var('SO') ++ exts.append(get_config_var('SO')) ++ ++ if version_info >= (3, 5): ++ exts.append('.so') ++ + for name in names: +- libnames = [name, "lib" + name, name + ext, "lib" + name + ext] ++ libnames = [name, "lib" + name] ++ for ext in exts: ++ libnames += [name + ext, "lib" + name + ext] + libdir = os.environ.get('IPTABLES_LIBDIR', None) + if libdir is not None: + libdirs = libdir.split(':') +-- +2.20.1 + diff --git a/package/python-iptables/Config.in b/package/python-iptables/Config.in new file mode 100644 index 00000000..a35577ba --- /dev/null +++ b/package/python-iptables/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PYTHON_IPTABLES + bool "python-iptables" + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_IPTABLES # runtime dependency + help + Python bindings for iptables. + + https://github.com/ldx/python-iptables + +comment "python-iptables needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/python-iptables/python-iptables.hash b/package/python-iptables/python-iptables.hash new file mode 100644 index 00000000..46786699 --- /dev/null +++ b/package/python-iptables/python-iptables.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/python-iptables/json +md5 98ee55f239bf8f2d002915d76b416c22 python-iptables-0.14.0.tar.gz +sha256 61b23850ad5d917436aa73c2847ab941bc0edbe79a324b0eebdb98af0b65b10d python-iptables-0.14.0.tar.gz +# Locally calculated +sha256 b827789c74144d9bb92595ed3bc568aef767a7e8d930fba61c2cdd9f6ec27599 NOTICE diff --git a/package/python-iptables/python-iptables.mk b/package/python-iptables/python-iptables.mk new file mode 100644 index 00000000..66e478a8 --- /dev/null +++ b/package/python-iptables/python-iptables.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-iptables +# +################################################################################ + +PYTHON_IPTABLES_VERSION = 0.14.0 +PYTHON_IPTABLES_SITE = https://files.pythonhosted.org/packages/08/5e/16a5ca35c420b8059eeb72716e316eeb6f0e59ce028998d36b2dc87554e5 +PYTHON_IPTABLES_SETUP_TYPE = setuptools +PYTHON_IPTABLES_LICENSE = Apache-2.0 +PYTHON_IPTABLES_LICENSE_FILES = NOTICE + +$(eval $(python-package)) diff --git a/package/python-ipy/Config.in b/package/python-ipy/Config.in new file mode 100644 index 00000000..bead932d --- /dev/null +++ b/package/python-ipy/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_IPY + bool "python-ipy" + depends on BR2_PACKAGE_PYTHON + help + IPy - class and tools for handling of IPv4 and + IPv6 addresses and networks. + + https://github.com/haypo/python-ipy/ diff --git a/package/python-ipy/python-ipy.hash b/package/python-ipy/python-ipy.hash new file mode 100644 index 00000000..641a2eb2 --- /dev/null +++ b/package/python-ipy/python-ipy.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/ipy/json +md5 1a90c68174234672241a7e60c7ea0fb9 IPy-1.00.tar.gz +sha256 2f2bf658a858d43868d8a4352b3889cf78c66e2ce678b300dcf518c9149ba621 IPy-1.00.tar.gz +# Locally computed sha256 checksums +sha256 078bb46799e46e51e7239c24ff130d345db911c11efafef5e3c45dfb7adb0a61 COPYING diff --git a/package/python-ipy/python-ipy.mk b/package/python-ipy/python-ipy.mk new file mode 100644 index 00000000..817b531e --- /dev/null +++ b/package/python-ipy/python-ipy.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-ipy +# +################################################################################ + +PYTHON_IPY_VERSION = 1.00 +PYTHON_IPY_SOURCE = IPy-$(PYTHON_IPY_VERSION).tar.gz +PYTHON_IPY_SITE = https://files.pythonhosted.org/packages/e1/66/b6dd22472bb027556849876beae2dd4dca3a4eaf2dd3039277b4edb8c6af +PYTHON_IPY_LICENSE = BSD-3-Clause +PYTHON_IPY_LICENSE_FILES = COPYING +PYTHON_IPY_SETUP_TYPE = distutils + +$(eval $(python-package)) diff --git a/package/python-ipython-genutils/Config.in b/package/python-ipython-genutils/Config.in new file mode 100644 index 00000000..d49442ee --- /dev/null +++ b/package/python-ipython-genutils/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_IPYTHON_GENUTILS + bool "python-ipython-genutils" + help + IPython vestigial utilities + + https://pypi.python.org/pypi/ipython_genutils diff --git a/package/python-ipython-genutils/python-ipython-genutils.hash b/package/python-ipython-genutils/python-ipython-genutils.hash new file mode 100644 index 00000000..579cc764 --- /dev/null +++ b/package/python-ipython-genutils/python-ipython-genutils.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/ipython_genutils/json +md5 5a4f9781f78466da0ea1a648f3e1f79f ipython_genutils-0.2.0.tar.gz +# Locally computed +sha256 eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8 ipython_genutils-0.2.0.tar.gz +sha256 f09da6c0f4971485f6fbd6c630d0d6cdd012bfe128b2ebbd014de2f6c7c7e2a6 COPYING.md diff --git a/package/python-ipython-genutils/python-ipython-genutils.mk b/package/python-ipython-genutils/python-ipython-genutils.mk new file mode 100644 index 00000000..4e8cc287 --- /dev/null +++ b/package/python-ipython-genutils/python-ipython-genutils.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-ipython-genutils +# +################################################################################ + +PYTHON_IPYTHON_GENUTILS_VERSION = 0.2.0 +PYTHON_IPYTHON_GENUTILS_SOURCE = ipython_genutils-$(PYTHON_IPYTHON_GENUTILS_VERSION).tar.gz +PYTHON_IPYTHON_GENUTILS_SITE = https://pypi.python.org/packages/e8/69/fbeffffc05236398ebfcfb512b6d2511c622871dca1746361006da310399 +PYTHON_IPYTHON_GENUTILS_LICENSE = BSD-3-Clause +PYTHON_IPYTHON_GENUTILS_LICENSE_FILES = COPYING.md +PYTHON_IPYTHON_GENUTILS_SETUP_TYPE = distutils + +$(eval $(python-package)) diff --git a/package/python-ipython/0001-set-correct-python-executable-path.patch b/package/python-ipython/0001-set-correct-python-executable-path.patch new file mode 100644 index 00000000..0fbd5a1c --- /dev/null +++ b/package/python-ipython/0001-set-correct-python-executable-path.patch @@ -0,0 +1,15 @@ +Set correct Python executable path + +Signed-off-by: Philippe Proulx + +--- python-ipython-2.1.0/setupbase.py 2014-05-21 15:19:12.000000000 -0400 ++++ python-ipython-2.1.0-new/setupbase.py 2014-07-23 23:34:32.892030423 -0400 +@@ -394,7 +394,7 @@ class build_scripts_entrypt(build_script + + mod, func = entrypt.split(':') + with open(outfile, 'w') as f: +- f.write(script_src.format(executable=sys.executable, ++ f.write(script_src.format(executable='/usr/bin/env python', + mod=mod, func=func)) + + return outfiles, outfiles diff --git a/package/python-ipython/Config.in b/package/python-ipython/Config.in new file mode 100644 index 00000000..c151ac2d --- /dev/null +++ b/package/python-ipython/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_PYTHON_IPYTHON + bool "python-ipython" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_BACKCALL # runtime + select BR2_PACKAGE_PYTHON_DECORATOR # runtime + select BR2_PACKAGE_PYTHON_JEDI # runtime + select BR2_PACKAGE_PYTHON_PICKLESHARE # runtime + select BR2_PACKAGE_PYTHON_PROMPT_TOOLKIT # runtime + select BR2_PACKAGE_PYTHON_PYGMENTS # runtime + select BR2_PACKAGE_PYTHON_PEXPECT # runtime + select BR2_PACKAGE_PYTHON_TRAITLETS # runtime + help + IPython is a command shell for interactive computing in + multiple programming languages, originally developed for the + Python programming language, that offers enhanced + introspection, rich media, additional shell syntax, tab + completion, and rich history. + + http://ipython.org/ diff --git a/package/python-ipython/python-ipython.hash b/package/python-ipython/python-ipython.hash new file mode 100644 index 00000000..e8e25f5c --- /dev/null +++ b/package/python-ipython/python-ipython.hash @@ -0,0 +1,6 @@ +# md5, sha256 from https://pypi.org/pypi/ipython/json +md5 68542bca2ebf39af7d9d0557e7fb5708 ipython-7.9.0.tar.gz +sha256 dfd303b270b7b5232b3d08bd30ec6fd685d8a58cabd54055e3d69d8f029f7280 ipython-7.9.0.tar.gz +# Locally computed sha256 checksums +sha256 341afcbd729887b7046fe7b98fc4f4edff3aed8d38f06eefd9b30670f043df17 COPYING.rst +sha256 e0e390748ed440ab893ca1f135a88a920aaf5409dbb90a5b427c75c5e51268fb LICENSE diff --git a/package/python-ipython/python-ipython.mk b/package/python-ipython/python-ipython.mk new file mode 100644 index 00000000..8136353a --- /dev/null +++ b/package/python-ipython/python-ipython.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-ipython +# +################################################################################ + +PYTHON_IPYTHON_VERSION = 7.9.0 +PYTHON_IPYTHON_SOURCE = ipython-$(PYTHON_IPYTHON_VERSION).tar.gz +PYTHON_IPYTHON_SITE = https://files.pythonhosted.org/packages/c0/e5/ba19ae58e9bdd80832332873cb4e11a90cf2049df052c1aadeabc2cdadeb +PYTHON_IPYTHON_LICENSE = BSD-3-Clause +PYTHON_IPYTHON_LICENSE_FILES = COPYING.rst LICENSE +PYTHON_IPYTHON_CPE_ID_VENDOR = ipython +PYTHON_IPYTHON_CPE_ID_PRODUCT = ipython +PYTHON_IPYTHON_SETUP_TYPE = distutils + +$(eval $(python-package)) diff --git a/package/python-iso8601/Config.in b/package/python-iso8601/Config.in new file mode 100644 index 00000000..9d61b1d4 --- /dev/null +++ b/package/python-iso8601/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_ISO8601 + bool "python-iso8601" + help + Simple module to parse ISO 8601 dates. + + https://github.com/micktwomey/pyiso8601 diff --git a/package/python-iso8601/python-iso8601.hash b/package/python-iso8601/python-iso8601.hash new file mode 100644 index 00000000..18cf3958 --- /dev/null +++ b/package/python-iso8601/python-iso8601.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/iso8601/json +md5 df6e924305fd799d90be63336b2ab8b3 iso8601-0.1.13.tar.gz +sha256 f7dec22af52025d4526be94cc1303c7d8f5379b746a3f54a8c8446384392eeb1 iso8601-0.1.13.tar.gz +# Locally computed sha256 checksums +sha256 116d368d14a8cf0061027c944c60ee20b476ce42814818a7d627396906761f16 LICENSE diff --git a/package/python-iso8601/python-iso8601.mk b/package/python-iso8601/python-iso8601.mk new file mode 100644 index 00000000..3620255d --- /dev/null +++ b/package/python-iso8601/python-iso8601.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-iso8601 +# +################################################################################ + +PYTHON_ISO8601_VERSION = 0.1.13 +PYTHON_ISO8601_SOURCE = iso8601-$(PYTHON_ISO8601_VERSION).tar.gz +PYTHON_ISO8601_SITE = https://files.pythonhosted.org/packages/05/90/2d9927dc2d33192f58fe39d2d216313a8380625cd4b062efb93f1afd7a29 +PYTHON_ISO8601_SETUP_TYPE = setuptools +PYTHON_ISO8601_LICENSE = MIT +PYTHON_ISO8601_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-itsdangerous/Config.in b/package/python-itsdangerous/Config.in new file mode 100644 index 00000000..39ec0b77 --- /dev/null +++ b/package/python-itsdangerous/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_ITSDANGEROUS + bool "python-itsdangerous" + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 # runtime + help + Itsdangerous contains various helpers to pass data to + untrusted environments and to get it back safe and sound. + + http://pythonhosted.org/itsdangerous/ diff --git a/package/python-itsdangerous/python-itsdangerous.hash b/package/python-itsdangerous/python-itsdangerous.hash new file mode 100644 index 00000000..0904a911 --- /dev/null +++ b/package/python-itsdangerous/python-itsdangerous.hash @@ -0,0 +1,4 @@ +# md5, sha256 from https://pypi.org/pypi/itsdangerous/json +md5 9b7f5afa7f1e3acfb7786eeca3d99307 itsdangerous-1.1.0.tar.gz +sha256 321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19 itsdangerous-1.1.0.tar.gz +sha256 feb28bfa348d816b0e7dbaeddf18499ee7e8007c67813db8d6ab37c65e046cd4 LICENSE.rst diff --git a/package/python-itsdangerous/python-itsdangerous.mk b/package/python-itsdangerous/python-itsdangerous.mk new file mode 100644 index 00000000..94292337 --- /dev/null +++ b/package/python-itsdangerous/python-itsdangerous.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-itsdangerous +# +################################################################################ + +PYTHON_ITSDANGEROUS_VERSION = 1.1.0 +PYTHON_ITSDANGEROUS_SOURCE = itsdangerous-$(PYTHON_ITSDANGEROUS_VERSION).tar.gz +PYTHON_ITSDANGEROUS_SITE = https://files.pythonhosted.org/packages/68/1a/f27de07a8a304ad5fa817bbe383d1238ac4396da447fa11ed937039fa04b +PYTHON_ITSDANGEROUS_SETUP_TYPE = setuptools +PYTHON_ITSDANGEROUS_LICENSE = BSD-3-Clause +PYTHON_ITSDANGEROUS_LICENSE_FILES = LICENSE.rst + +$(eval $(python-package)) diff --git a/package/python-janus/Config.in b/package/python-janus/Config.in new file mode 100644 index 00000000..a1ba0463 --- /dev/null +++ b/package/python-janus/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_JANUS + bool "python-janus" + depends on BR2_PACKAGE_PYTHON3 + help + Mixed sync-async queue to interoperate between asyncio + tasks and classic threads. + + https://github.com/aio-libs/janus/ diff --git a/package/python-janus/python-janus.hash b/package/python-janus/python-janus.hash new file mode 100644 index 00000000..7d914389 --- /dev/null +++ b/package/python-janus/python-janus.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/janus/json +md5 dad6a03e7664cb800ce45ef8bcf12439 janus-0.6.1.tar.gz +sha256 4712e0ef75711fe5947c2db855bc96221a9a03641b52e5ae8e25c2b705dd1d0c janus-0.6.1.tar.gz +# Locally computed sha256 checksums +sha256 8b177cccb6ddec12a9fc97bd49e7e2bbcd92464625624bd8bdbfad799ae606e9 LICENSE diff --git a/package/python-janus/python-janus.mk b/package/python-janus/python-janus.mk new file mode 100644 index 00000000..2b08733c --- /dev/null +++ b/package/python-janus/python-janus.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-janus +# +################################################################################ + +PYTHON_JANUS_VERSION = 0.6.1 +PYTHON_JANUS_SOURCE = janus-$(PYTHON_JANUS_VERSION).tar.gz +PYTHON_JANUS_SITE = https://files.pythonhosted.org/packages/7c/1b/8769c2dca84dd8ca92e48b14750c7106ff4313df4fee651dbc3cd9e345a9 +PYTHON_JANUS_SETUP_TYPE = setuptools +PYTHON_JANUS_LICENSE = Apache-2.0 +PYTHON_JANUS_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-jaraco-classes/Config.in b/package/python-jaraco-classes/Config.in new file mode 100644 index 00000000..05c11237 --- /dev/null +++ b/package/python-jaraco-classes/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_JARACO_CLASSES + bool "python-jaraco-classes" + select BR2_PACKAGE_PYTHON_SIX # runtime + help + Utility functions for Python class constructs. + + https://github.com/jaraco/jaraco.classes diff --git a/package/python-jaraco-classes/python-jaraco-classes.hash b/package/python-jaraco-classes/python-jaraco-classes.hash new file mode 100644 index 00000000..6489e859 --- /dev/null +++ b/package/python-jaraco-classes/python-jaraco-classes.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/jaraco.classes/json +md5 63d4f5a2df2625ec3979c9633da1505e jaraco.classes-2.0.tar.gz +sha256 dcc2c4a8ca4b344cdbf2e1be7124a5c4f192574cdbb453b62350ae8240a2caf5 jaraco.classes-2.0.tar.gz +# Locally computed sha256 checksums +sha256 a55e2ffe9b44998e621d51d8c094bed09acc4b5236ee73d7df395a33ba3c18fd LICENSE diff --git a/package/python-jaraco-classes/python-jaraco-classes.mk b/package/python-jaraco-classes/python-jaraco-classes.mk new file mode 100644 index 00000000..7455ed4d --- /dev/null +++ b/package/python-jaraco-classes/python-jaraco-classes.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-jaraco-classes +# +################################################################################ + +PYTHON_JARACO_CLASSES_VERSION = 2.0 +PYTHON_JARACO_CLASSES_SOURCE = jaraco.classes-$(PYTHON_JARACO_CLASSES_VERSION).tar.gz +PYTHON_JARACO_CLASSES_SITE = https://files.pythonhosted.org/packages/6e/27/f6ce0863a6ce574922ffe70d63c40b9771aefb686cb595cf435d184f0ca3 +PYTHON_JARACO_CLASSES_LICENSE = MIT +PYTHON_JARACO_CLASSES_LICENSE_FILES = LICENSE +PYTHON_JARACO_CLASSES_SETUP_TYPE = setuptools +PYTHON_JARACO_CLASSES_DEPENDENCIES = host-python-setuptools-scm + +$(eval $(python-package)) diff --git a/package/python-jaraco-functools/Config.in b/package/python-jaraco-functools/Config.in new file mode 100644 index 00000000..6c914f38 --- /dev/null +++ b/package/python-jaraco-functools/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_JARACO_FUNCTOOLS + bool "python-jaraco-functools" + depends on BR2_PACKAGE_PYTHON3 # python-more-itertools + select BR2_PACKAGE_PYTHON_MORE_ITERTOOLS # runtime + help + Additional functools in the spirit of stdlib’s + functools. + + https://github.com/jaraco/jaraco.functools diff --git a/package/python-jaraco-functools/python-jaraco-functools.hash b/package/python-jaraco-functools/python-jaraco-functools.hash new file mode 100644 index 00000000..051a39bf --- /dev/null +++ b/package/python-jaraco-functools/python-jaraco-functools.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/jaraco.functools/json +md5 c245ade3e753bc556415f1fec102f232 jaraco.functools-2.0.tar.gz +sha256 35ba944f52b1a7beee8843a5aa6752d1d5b79893eeb7770ea98be6b637bf9345 jaraco.functools-2.0.tar.gz +# Locally computed sha256 checksums +sha256 a55e2ffe9b44998e621d51d8c094bed09acc4b5236ee73d7df395a33ba3c18fd LICENSE diff --git a/package/python-jaraco-functools/python-jaraco-functools.mk b/package/python-jaraco-functools/python-jaraco-functools.mk new file mode 100644 index 00000000..f062063b --- /dev/null +++ b/package/python-jaraco-functools/python-jaraco-functools.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-jaraco-functools +# +################################################################################ + +PYTHON_JARACO_FUNCTOOLS_VERSION = 2.0 +PYTHON_JARACO_FUNCTOOLS_SOURCE = jaraco.functools-$(PYTHON_JARACO_FUNCTOOLS_VERSION).tar.gz +PYTHON_JARACO_FUNCTOOLS_SITE = https://files.pythonhosted.org/packages/a9/1e/44f6a5cffef147a3ffd37a748b8f4c2ded9b07ca20a15f17cd9874158f24 +PYTHON_JARACO_FUNCTOOLS_LICENSE = MIT +PYTHON_JARACO_FUNCTOOLS_LICENSE_FILES = LICENSE +PYTHON_JARACO_FUNCTOOLS_SETUP_TYPE = setuptools +PYTHON_JARACO_FUNCTOOLS_DEPENDENCIES = host-python-setuptools-scm + +$(eval $(python-package)) diff --git a/package/python-jedi/Config.in b/package/python-jedi/Config.in new file mode 100644 index 00000000..8ceaa153 --- /dev/null +++ b/package/python-jedi/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_JEDI + bool "python-jedi" + select BR2_PACKAGE_PYTHON_PARSO # runtime + help + An autocompletion tool for Python that can be used for text + editors. + + https://github.com/davidhalter/jedi diff --git a/package/python-jedi/python-jedi.hash b/package/python-jedi/python-jedi.hash new file mode 100644 index 00000000..ac5f82e1 --- /dev/null +++ b/package/python-jedi/python-jedi.hash @@ -0,0 +1,6 @@ +# md5, sha256 from https://pypi.org/pypi/jedi/json +md5 d6a8e5832939c51dceda474b720696f6 jedi-0.17.0.tar.gz +sha256 df40c97641cb943661d2db4c33c2e1ff75d491189423249e989bcea4464f3030 jedi-0.17.0.tar.gz +# Locally computed sha256 checksums +sha256 78e60cd0b8f28694f30195482c33d76908d846b0d15278deb7332aa22ba8e412 LICENSE.txt +sha256 b41b78f562a2e65b75cab44354335f6f435d4ef73065509600ac910cf4e22fe0 jedi/third_party/typeshed/LICENSE diff --git a/package/python-jedi/python-jedi.mk b/package/python-jedi/python-jedi.mk new file mode 100644 index 00000000..245ba99a --- /dev/null +++ b/package/python-jedi/python-jedi.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-jedi +# +################################################################################ + +PYTHON_JEDI_VERSION = 0.17.0 +PYTHON_JEDI_SOURCE = jedi-$(PYTHON_JEDI_VERSION).tar.gz +PYTHON_JEDI_SITE = https://files.pythonhosted.org/packages/e3/5b/65ff9c102d92bf719dfaeff57bc8074d68f26ea480005704a956da995799 +PYTHON_JEDI_SETUP_TYPE = setuptools +PYTHON_JEDI_LICENSE = MIT, Apache-2.0 (typeshed) +PYTHON_JEDI_LICENSE_FILES = LICENSE.txt jedi/third_party/typeshed/LICENSE + +$(eval $(python-package)) diff --git a/package/python-jinja2/Config.in b/package/python-jinja2/Config.in new file mode 100644 index 00000000..5b99df75 --- /dev/null +++ b/package/python-jinja2/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PYTHON_JINJA2 + bool "python-jinja2" + select BR2_PACKAGE_PYTHON_MARKUPSAFE # runtime + select BR2_PACKAGE_PYTHON_UNICODEDATA if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_UNICODEDATA if BR2_PACKAGE_PYTHON3 + help + Jinja2 is a template engine written in pure Python. It + provides a Django inspired non-XML syntax but supports + inline expressions and an optional sandboxed environment. + + http://jinja.pocoo.org/ diff --git a/package/python-jinja2/python-jinja2.hash b/package/python-jinja2/python-jinja2.hash new file mode 100644 index 00000000..51590b17 --- /dev/null +++ b/package/python-jinja2/python-jinja2.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/jinja2/json +md5 231dc00d34afb2672c497713fa9cdaaa Jinja2-2.11.3.tar.gz +sha256 a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6 Jinja2-2.11.3.tar.gz +# Locally computed sha256 checksums +sha256 3b49dcee4105eb37bac10faf1be260408fe85d252b8e9df2e0979fc1e094437b LICENSE.rst diff --git a/package/python-jinja2/python-jinja2.mk b/package/python-jinja2/python-jinja2.mk new file mode 100644 index 00000000..f91cac69 --- /dev/null +++ b/package/python-jinja2/python-jinja2.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# python-jinja2 +# +################################################################################ + +# Please keep in sync with package/python3-jinja2/python3-jinja2.mk +PYTHON_JINJA2_VERSION = 2.11.3 +PYTHON_JINJA2_SOURCE = Jinja2-$(PYTHON_JINJA2_VERSION).tar.gz +PYTHON_JINJA2_SITE = https://files.pythonhosted.org/packages/4f/e7/65300e6b32e69768ded990494809106f87da1d436418d5f1367ed3966fd7 +PYTHON_JINJA2_SETUP_TYPE = setuptools +PYTHON_JINJA2_LICENSE = BSD-3-Clause +PYTHON_JINJA2_LICENSE_FILES = LICENSE.rst +PYTHON_JINJA2_CPE_ID_VENDOR = pocoo +PYTHON_JINJA2_CPE_ID_PRODUCT = jinja2 + +# In host build, setup.py tries to download markupsafe if it is not installed +HOST_PYTHON_JINJA2_DEPENDENCIES = host-python-markupsafe + +# Both asyncsupport.py and asyncfilters.py use async feature, that is +# not available in Python 2 and some features available in Python 3.6. +# So in both cases *.py compilation would produce compiler errors. +# Hence remove both files after package extraction. +ifeq ($(BR2_PACKAGE_PYTHON),y) +define PYTHON_JINJA2_REMOVE_ASYNC_SUPPORT + rm $(@D)/src/jinja2/asyncsupport.py $(@D)/src/jinja2/asyncfilters.py +endef + +PYTHON_JINJA2_POST_EXTRACT_HOOKS = PYTHON_JINJA2_REMOVE_ASYNC_SUPPORT +endif + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-jmespath/Config.in b/package/python-jmespath/Config.in new file mode 100644 index 00000000..7bcd8f6a --- /dev/null +++ b/package/python-jmespath/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_JMESPATH + bool "python-jmespath" + help + JMESPath is a query language for JSON. + + https://github.com/jmespath/jmespath.py diff --git a/package/python-jmespath/python-jmespath.hash b/package/python-jmespath/python-jmespath.hash new file mode 100644 index 00000000..986db2e0 --- /dev/null +++ b/package/python-jmespath/python-jmespath.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/jmespath/json +md5 65bdcb5fa5bcf1cc710ffa508e78e408 jmespath-0.10.0.tar.gz +sha256 b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9 jmespath-0.10.0.tar.gz +# Locally computed sha256 checksums +sha256 66b313cce80ed0623fc7db3f24863a0c80fd83eb341a46b57864158ae74faa56 LICENSE.txt diff --git a/package/python-jmespath/python-jmespath.mk b/package/python-jmespath/python-jmespath.mk new file mode 100644 index 00000000..cf11dedb --- /dev/null +++ b/package/python-jmespath/python-jmespath.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-jmespath +# +################################################################################ + +PYTHON_JMESPATH_VERSION = 0.10.0 +PYTHON_JMESPATH_SOURCE = jmespath-$(PYTHON_JMESPATH_VERSION).tar.gz +PYTHON_JMESPATH_SITE = https://files.pythonhosted.org/packages/3c/56/3f325b1eef9791759784aa5046a8f6a1aff8f7c898a2e34506771d3b99d8 +PYTHON_JMESPATH_SETUP_TYPE = setuptools +PYTHON_JMESPATH_LICENSE = MIT +PYTHON_JMESPATH_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-json-schema-validator/Config.in b/package/python-json-schema-validator/Config.in new file mode 100644 index 00000000..e50e8eef --- /dev/null +++ b/package/python-json-schema-validator/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_JSON_SCHEMA_VALIDATOR + bool "python-json-schema-validator" + help + JSON Schema Validator + + https://pypi.python.org/pypi/json-schema-validator diff --git a/package/python-json-schema-validator/python-json-schema-validator.hash b/package/python-json-schema-validator/python-json-schema-validator.hash new file mode 100644 index 00000000..7360abab --- /dev/null +++ b/package/python-json-schema-validator/python-json-schema-validator.hash @@ -0,0 +1,3 @@ +# md5 from https://pypi.python.org/pypi/json-schema-validator/json, sha256 locally computed +md5 7691b41739faaa8b0965279e72889932 json-schema-validator-2.4.1.tar.gz +sha256 1562a21d83e56231cef09b9aa2c06e8f845974bd26f24be293de6cab9a2fac91 json-schema-validator-2.4.1.tar.gz diff --git a/package/python-json-schema-validator/python-json-schema-validator.mk b/package/python-json-schema-validator/python-json-schema-validator.mk new file mode 100644 index 00000000..c0a335cb --- /dev/null +++ b/package/python-json-schema-validator/python-json-schema-validator.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-json-schema-validator +# +################################################################################ + +PYTHON_JSON_SCHEMA_VALIDATOR_VERSION = 2.4.1 +PYTHON_JSON_SCHEMA_VALIDATOR_SOURCE = json-schema-validator-$(PYTHON_JSON_SCHEMA_VALIDATOR_VERSION).tar.gz +PYTHON_JSON_SCHEMA_VALIDATOR_SITE = https://pypi.python.org/packages/70/46/ba39cb7efad1898cfc89bf3588b8612f24d128f1c25b761994f524a59cef +PYTHON_JSON_SCHEMA_VALIDATOR_LICENSE = LGPL-3.0 +PYTHON_JSON_SCHEMA_VALIDATOR_SETUP_TYPE = setuptools +PYTHON_JSON_SCHEMA_VALIDATOR_DEPENDENCIES = host-python-versiontools + +$(eval $(python-package)) diff --git a/package/python-jsonmodels/Config.in b/package/python-jsonmodels/Config.in new file mode 100644 index 00000000..f6698287 --- /dev/null +++ b/package/python-jsonmodels/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_JSONMODELS + bool "python-jsonmodels" + select BR2_PACKAGE_PYTHON_DATEUTIL # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + help + Models to make easier to deal with structures that are + converted to, or read from JSON. + + https://github.com/beregond/jsonmodels diff --git a/package/python-jsonmodels/python-jsonmodels.hash b/package/python-jsonmodels/python-jsonmodels.hash new file mode 100644 index 00000000..16e200b0 --- /dev/null +++ b/package/python-jsonmodels/python-jsonmodels.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/jsonmodels/json +md5 96132e252887f840d23792c03fad2039 jsonmodels-2.4.tar.gz +sha256 abc8dc334a1794513e511a75639f77c271ef6a2992b6793f3753c7335dd18775 jsonmodels-2.4.tar.gz +# Locally computed sha256 checksums +sha256 3b1219763eec6924ddd4c4d61dee6a53c5fc9ab62707a9ad763ee363d3050cc5 LICENSE diff --git a/package/python-jsonmodels/python-jsonmodels.mk b/package/python-jsonmodels/python-jsonmodels.mk new file mode 100644 index 00000000..4e4eecf2 --- /dev/null +++ b/package/python-jsonmodels/python-jsonmodels.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-jsonmodels +# +################################################################################ + +PYTHON_JSONMODELS_VERSION = 2.4 +PYTHON_JSONMODELS_SOURCE = jsonmodels-$(PYTHON_JSONMODELS_VERSION).tar.gz +PYTHON_JSONMODELS_SITE = https://files.pythonhosted.org/packages/68/00/524668dc751f9ef91e73c795b2073bf2ddb79728a474d1bcab9c6dc426d8 +PYTHON_JSONMODELS_SETUP_TYPE = setuptools +PYTHON_JSONMODELS_LICENSE = BSD-3-Clause +PYTHON_JSONMODELS_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-jsonschema/Config.in b/package/python-jsonschema/Config.in new file mode 100644 index 00000000..b547f4ae --- /dev/null +++ b/package/python-jsonschema/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_JSONSCHEMA + bool "python-jsonschema" + select BR2_PACKAGE_PYTHON_FUNCTOOLS32 if BR2_PACKAGE_PYTHON # runtime + help + An implementation of JSON Schema validation for Python. + + http://github.com/Julian/jsonschema diff --git a/package/python-jsonschema/python-jsonschema.hash b/package/python-jsonschema/python-jsonschema.hash new file mode 100644 index 00000000..c631fe98 --- /dev/null +++ b/package/python-jsonschema/python-jsonschema.hash @@ -0,0 +1,6 @@ +# md5 from https://pypi.python.org/pypi/jsonschema/json +md5 374e848fdb69a3ce8b7e778b47c30640 jsonschema-2.5.1.tar.gz +# Locally computed +sha256 36673ac378feed3daa5956276a829699056523d7961027911f064b52255ead41 jsonschema-2.5.1.tar.gz +sha256 4f92a015a13c4d1a040bef018aa13430b4f1bc73b41b16bb846c346766de7439 COPYING +sha256 837402bd25fad9b704265801ca3f92566a98157c1f9a7acd6f446299ba1c305a json/LICENSE diff --git a/package/python-jsonschema/python-jsonschema.mk b/package/python-jsonschema/python-jsonschema.mk new file mode 100644 index 00000000..0fb2be86 --- /dev/null +++ b/package/python-jsonschema/python-jsonschema.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-jsonschema +# +################################################################################ + +PYTHON_JSONSCHEMA_VERSION = 2.5.1 +PYTHON_JSONSCHEMA_SOURCE = jsonschema-$(PYTHON_JSONSCHEMA_VERSION).tar.gz +PYTHON_JSONSCHEMA_SITE = https://pypi.python.org/packages/58/0d/c816f5ea5adaf1293a1d81d32e4cdfdaf8496973aa5049786d7fdb14e7e7 +PYTHON_JSONSCHEMA_SETUP_TYPE = setuptools +PYTHON_JSONSCHEMA_LICENSE = MIT +PYTHON_JSONSCHEMA_LICENSE_FILES = COPYING json/LICENSE +PYTHON_JSONSCHEMA_DEPENDENCIES = host-python-vcversioner + +$(eval $(python-package)) diff --git a/package/python-keyring/Config.in b/package/python-keyring/Config.in new file mode 100644 index 00000000..18fad840 --- /dev/null +++ b/package/python-keyring/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_PYTHON_KEYRING + bool "python-keyring" + depends on BR2_PACKAGE_PYTHON3 + depends on BR2_INSTALL_LIBSTDCPP # python-secretstorage + select BR2_PACKAGE_PYTHON_ENTRYPOINTS # runtime + select BR2_PACKAGE_PYTHON_SECRETSTORAGE # runtime + help + The Python keyring lib provides a easy way to access the + system keyring service from Python. + + https://pypi.python.org/pypi/keyring + +comment "python-keyring needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/python-keyring/python-keyring.hash b/package/python-keyring/python-keyring.hash new file mode 100644 index 00000000..159579f7 --- /dev/null +++ b/package/python-keyring/python-keyring.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/keyring/json +md5 1eb6d586ee5794de4bf39c1f513a3139 keyring-19.2.0.tar.gz +sha256 91037ccaf0c9a112a76f7740e4a416b9457a69b66c2799421581bee710a974b3 keyring-19.2.0.tar.gz +# Locally computed sha256 checksums +sha256 a55e2ffe9b44998e621d51d8c094bed09acc4b5236ee73d7df395a33ba3c18fd LICENSE diff --git a/package/python-keyring/python-keyring.mk b/package/python-keyring/python-keyring.mk new file mode 100644 index 00000000..0e057386 --- /dev/null +++ b/package/python-keyring/python-keyring.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# python-keyring +# +################################################################################ + +PYTHON_KEYRING_VERSION = 19.2.0 +PYTHON_KEYRING_SOURCE = keyring-$(PYTHON_KEYRING_VERSION).tar.gz +PYTHON_KEYRING_SITE = https://files.pythonhosted.org/packages/ee/46/77fdb7cd2b0f1f684afbc35a59b3d7ebb6961fe528f97b86900002968914 +PYTHON_KEYRING_SETUP_TYPE = setuptools +PYTHON_KEYRING_LICENSE = MIT +PYTHON_KEYRING_LICENSE_FILES = LICENSE +PYTHON_KEYRING_CPE_ID_VENDOR = python +PYTHON_KEYRING_CPE_ID_PRODUCT = keyring +PYTHON_KEYRING_DEPENDENCIES = host-python-setuptools-scm + +$(eval $(python-package)) diff --git a/package/python-kiwisolver/Config.in b/package/python-kiwisolver/Config.in new file mode 100644 index 00000000..33727ba8 --- /dev/null +++ b/package/python-kiwisolver/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_PYTHON_KIWISOLVER + bool "python-kiwisolver" + depends on BR2_INSTALL_LIBSTDCPP + help + Kiwi is an efficient C++ implementation of the Cassowary + constraint solving algorithm. Kiwi is an implementation of + the algorithm based on the seminal Cassowary paper. It is + not a refactoring of the original C++ solver. Kiwi has been + designed from the ground up to be lightweight and fast. Kiwi + ranges from 10x to 500x faster than the original Cassowary + solver with typical use cases gaining a 40x + improvement. Memory savings are consistently > 5x. + + https://github.com/nucleic/kiwi + +comment "python-kiwisolver needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/python-kiwisolver/python-kiwisolver.hash b/package/python-kiwisolver/python-kiwisolver.hash new file mode 100644 index 00000000..9cdb2700 --- /dev/null +++ b/package/python-kiwisolver/python-kiwisolver.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 48168c0ace18319c649e31907f6d8586f648e503560f506f128798b99393bcdb python-kiwisolver-1.1.0.tar.gz +sha256 95c32f73d43fa54d8146badbcbd73b83acb7fa2cc81a7cef7784b3cd33b146a0 LICENSE diff --git a/package/python-kiwisolver/python-kiwisolver.mk b/package/python-kiwisolver/python-kiwisolver.mk new file mode 100644 index 00000000..2b99803c --- /dev/null +++ b/package/python-kiwisolver/python-kiwisolver.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-kiwisolver +# +################################################################################ + +PYTHON_KIWISOLVER_VERSION = 1.1.0 +PYTHON_KIWISOLVER_SITE = $(call github,nucleic,kiwi,$(PYTHON_KIWISOLVER_VERSION)) +PYTHON_KIWISOLVER_LICENSE = BSD-3-Clause +PYTHON_KIWISOLVER_LICENSE_FILES = LICENSE +PYTHON_KIWISOLVER_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-libconfig/Config.in b/package/python-libconfig/Config.in new file mode 100644 index 00000000..00688719 --- /dev/null +++ b/package/python-libconfig/Config.in @@ -0,0 +1,23 @@ +comment "python-libconfig needs a glibc or uClibc toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_TOOLCHAIN_USES_MUSL + +config BR2_PACKAGE_PYTHON_LIBCONFIG + bool "python-libconfig" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + # error: invalid use of incomplete type 'struct _IO_FILE' + depends on !BR2_TOOLCHAIN_USES_MUSL + select BR2_PACKAGE_BOOST + select BR2_PACKAGE_BOOST_PYTHON + select BR2_PACKAGE_LIBCONFIG + help + Python bindings to the C++ library libconfig + + Libconfig is a simple library for manipulating structured + configuration files. The file format is more compact and more + readable than XML. And unlike XML, it is type-aware, so it is + not necessary to do string parsing in application code. + http://www.hyperrealm.com/libconfig/ + + https://github.com/cnangel/python-libconfig diff --git a/package/python-libconfig/python-libconfig.hash b/package/python-libconfig/python-libconfig.hash new file mode 100644 index 00000000..6d77fad5 --- /dev/null +++ b/package/python-libconfig/python-libconfig.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 f4cfb7e60b8fcee32ca3392c99932c579038db0852c1c2c42d7c4b859eea3c5c python-libconfig-b271c3d9dac938ad5cd29b67bd08cc5536a5a391.tar.gz +sha256 7e47579751c8125eaa031fd10b197d3956d231323598a42612f30abf19c7fed0 README diff --git a/package/python-libconfig/python-libconfig.mk b/package/python-libconfig/python-libconfig.mk new file mode 100644 index 00000000..2db7e99c --- /dev/null +++ b/package/python-libconfig/python-libconfig.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# python-libconfig +# +################################################################################ + +PYTHON_LIBCONFIG_VERSION = b271c3d9dac938ad5cd29b67bd08cc5536a5a391 +PYTHON_LIBCONFIG_SITE = $(call github,cnangel,python-libconfig,$(PYTHON_LIBCONFIG_VERSION)) + +PYTHON_LIBCONFIG_LICENSE = BSD +PYTHON_LIBCONFIG_LICENSE_FILES = README + +PYTHON_LIBCONFIG_SETUP_TYPE = setuptools + +PYTHON_LIBCONFIG_DEPENDENCIES = libconfig boost + +ifeq ($(BR2_PACKAGE_PYTHON),y) +PYTHON_LIBCONFIG_PYVER = $(PYTHON_VERSION_MAJOR) +else ifeq ($(BR2_PACKAGE_PYTHON3),y) +PYTHON_LIBCONFIG_PYVER = $(PYTHON3_VERSION_MAJOR) +endif + +define PYTHON_LIBCONFIG_FIX_SETUP + $(SED) 's/boost_python/boost_python$(subst .,,$(PYTHON_LIBCONFIG_PYVER))/g' \ + $(@D)/setup.py +endef +PYTHON_LIBCONFIG_POST_PATCH_HOOKS += PYTHON_LIBCONFIG_FIX_SETUP + +$(eval $(python-package)) diff --git a/package/python-libusb1/Config.in b/package/python-libusb1/Config.in new file mode 100644 index 00000000..e464a039 --- /dev/null +++ b/package/python-libusb1/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_PYTHON_LIBUSB1 + bool "python-libusb1" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + help + Pure-python wrapper for libusb-1.0. + + http://github.com/vpelletier/python-libusb1 + +comment "python-libusb1 needs a toolchain w/ threads, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/python-libusb1/python-libusb1.hash b/package/python-libusb1/python-libusb1.hash new file mode 100644 index 00000000..21f48406 --- /dev/null +++ b/package/python-libusb1/python-libusb1.hash @@ -0,0 +1,4 @@ +# md5 from https://pypi.python.org/pypi/libusb1/json, sha256 locally computed +md5 cb4073182fef4cee6ab9c6666b48d1a1 libusb1-1.7.1.tar.gz +sha256 adf64a4f3f5c94643a1286f8153bcf4bc787c348b38934aacd7fe17fbeebc571 libusb1-1.7.1.tar.gz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LESSER diff --git a/package/python-libusb1/python-libusb1.mk b/package/python-libusb1/python-libusb1.mk new file mode 100644 index 00000000..075f50f4 --- /dev/null +++ b/package/python-libusb1/python-libusb1.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-libusb1 +# +################################################################################ + +PYTHON_LIBUSB1_VERSION = 1.7.1 +PYTHON_LIBUSB1_SOURCE = libusb1-$(PYTHON_LIBUSB1_VERSION).tar.gz +PYTHON_LIBUSB1_SITE = https://files.pythonhosted.org/packages/80/bb/4ee9d760dd29499d877ee384f1d2bc6bb9923defd4c69843aef5e729972d +PYTHON_LIBUSB1_SETUP_TYPE = setuptools +PYTHON_LIBUSB1_LICENSE = LGPL-2.1+ +PYTHON_LIBUSB1_LICENSE_FILES = COPYING.LESSER +PYTHON_LIBUSB1_DEPENDENCIES = libusb + +$(eval $(python-package)) diff --git a/package/python-lmdb/Config.in b/package/python-lmdb/Config.in new file mode 100644 index 00000000..baf9bce5 --- /dev/null +++ b/package/python-lmdb/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_LMDB + bool "python-lmdb" + select BR2_PACKAGE_PYTHON_CFFI # runtime + help + Universal Python binding for the LMDB 'Lightning' Database. + + https://pypi.python.org/pypi/lmdb diff --git a/package/python-lmdb/python-lmdb.hash b/package/python-lmdb/python-lmdb.hash new file mode 100644 index 00000000..cb28536d --- /dev/null +++ b/package/python-lmdb/python-lmdb.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/lmdb/json +md5 507049767b995c3c6a93b3bd97567c71 lmdb-0.99.tar.gz +sha256 f9eb844aaaacc8a4bc175e1c1f8a8fb538c330e378fd9eb40e8708d4dca7dc89 lmdb-0.99.tar.gz +# Locally computed sha256 checksums +sha256 310fe25c858a9515fc8c8d7d1f24a67c9496f84a91e0a0e41ea9975b1371e569 LICENSE diff --git a/package/python-lmdb/python-lmdb.mk b/package/python-lmdb/python-lmdb.mk new file mode 100644 index 00000000..bf98ba19 --- /dev/null +++ b/package/python-lmdb/python-lmdb.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-lmdb +# +################################################################################ + +PYTHON_LMDB_VERSION = 0.99 +PYTHON_LMDB_SOURCE = lmdb-$(PYTHON_LMDB_VERSION).tar.gz +PYTHON_LMDB_SITE = https://files.pythonhosted.org/packages/3b/66/aa6f3a3e338a3ca263575ce6f722c2fdcd21039a03b55c722e0ae0b216db +PYTHON_LMDB_LICENSE = OLDAP-2.8 +PYTHON_LMDB_LICENSE_FILES = LICENSE +PYTHON_LMDB_SETUP_TYPE = setuptools +PYTHON_LMDB_DEPENDENCIES = host-python-cffi + +$(eval $(python-package)) diff --git a/package/python-lockfile/Config.in b/package/python-lockfile/Config.in new file mode 100644 index 00000000..0e4a0fdd --- /dev/null +++ b/package/python-lockfile/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_PYTHON_LOCKFILE + bool "python-lockfile" + help + The lockfile package exports a LockFile class which provides a + simple API for locking files. Unlike the Windows + msvcrt.locking function, the fcntl.lockf and flock functions, + and the deprecated posixfile module, the API is identical + across both Unix (including Linux and Mac) and Windows + platforms. + + The lock mechanism relies on the atomic nature of the link + (on Unix) and mkdir (on Windows) system calls. An + implementation based on SQLite is also provided, more as a + demonstration of the possibilities it provides than as + production-quality code. + + https://pypi.org/project/lockfile/ diff --git a/package/python-lockfile/python-lockfile.hash b/package/python-lockfile/python-lockfile.hash new file mode 100644 index 00000000..ac1b7d2d --- /dev/null +++ b/package/python-lockfile/python-lockfile.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/project/lockfile/#copy-hash-modal-3c1db9ec-dd6e-4d06-8543-91094f428ac0 +md5 a6a1a82957a23afdf44cfdd039b65ff9 lockfile-0.12.2.tar.gz +sha256 6aed02de03cba24efabcd600b30540140634fc06cfa603822d508d5361e9f799 lockfile-0.12.2.tar.gz +# Locally computed sha256 +sha256 a26276d53dacb369641f31aa0fe37216028a0d93753f862ae206ce04f54b7b29 LICENSE diff --git a/package/python-lockfile/python-lockfile.mk b/package/python-lockfile/python-lockfile.mk new file mode 100644 index 00000000..212edcdc --- /dev/null +++ b/package/python-lockfile/python-lockfile.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-lockfile +# +################################################################################ + +PYTHON_LOCKFILE_VERSION = 0.12.2 +PYTHON_LOCKFILE_SOURCE = lockfile-$(PYTHON_LOCKFILE_VERSION).tar.gz +PYTHON_LOCKFILE_SITE = https://files.pythonhosted.org/packages/17/47/72cb04a58a35ec495f96984dddb48232b551aafb95bde614605b754fe6f7 +PYTHON_LOCKFILE_SETUP_TYPE = setuptools +PYTHON_LOCKFILE_LICENSE = MIT +PYTHON_LOCKFILE_LICENSE_FILES = LICENSE +PYTHON_LOCKFILE_DEPENDENCIES = host-python-pbr + +$(eval $(python-package)) diff --git a/package/python-logbook/Config.in b/package/python-logbook/Config.in new file mode 100644 index 00000000..d4fbf0fe --- /dev/null +++ b/package/python-logbook/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_LOGBOOK + bool "python-logbook" + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 + help + A logging replacement for Python. + + http://logbook.pocoo.org/ diff --git a/package/python-logbook/python-logbook.hash b/package/python-logbook/python-logbook.hash new file mode 100644 index 00000000..7cbcf6ca --- /dev/null +++ b/package/python-logbook/python-logbook.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/logbook/json +md5 719970ea22dd274797bb4328161d700f Logbook-1.5.3.tar.gz +sha256 66f454ada0f56eae43066f604a222b09893f98c1adc18df169710761b8f32fe8 Logbook-1.5.3.tar.gz +# Locally computed sha256 checksums +sha256 2ca266337cc6947578654ab0dd6438de4d01fa78b2e6eb554b09757df1178f98 LICENSE diff --git a/package/python-logbook/python-logbook.mk b/package/python-logbook/python-logbook.mk new file mode 100644 index 00000000..8f02e9b9 --- /dev/null +++ b/package/python-logbook/python-logbook.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-logbook +# +################################################################################ + +PYTHON_LOGBOOK_VERSION = 1.5.3 +PYTHON_LOGBOOK_SOURCE = Logbook-$(PYTHON_LOGBOOK_VERSION).tar.gz +PYTHON_LOGBOOK_SITE = https://files.pythonhosted.org/packages/2f/d9/16ac346f7c0102835814cc9e5b684aaadea101560bb932a2403bd26b2320 +PYTHON_LOGBOOK_SETUP_TYPE = setuptools +PYTHON_LOGBOOK_LICENSE = BSD-3-Clause +PYTHON_LOGBOOK_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-logstash/Config.in b/package/python-logstash/Config.in new file mode 100644 index 00000000..9d225db8 --- /dev/null +++ b/package/python-logstash/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_LOGSTASH + bool "python-logstash" + help + Python logging handler for Logstash. + + https://github.com/vklochan/python-logstash diff --git a/package/python-logstash/python-logstash.hash b/package/python-logstash/python-logstash.hash new file mode 100644 index 00000000..ba11c7ff --- /dev/null +++ b/package/python-logstash/python-logstash.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/python-logstash/json +md5 26fafa0ea306025fb7644d70cb38982a python-logstash-0.4.6.tar.gz +sha256 10943e5df83f592b4d61b63ad1afff855ccc8c9467f78718f0a59809ba1fe68c python-logstash-0.4.6.tar.gz +# Locally computed sha256 checksums +sha256 fea6a5c634ac9d9e047151675adc197c16f45bfba3c26ab113f48fb9fa717fff LICENSE diff --git a/package/python-logstash/python-logstash.mk b/package/python-logstash/python-logstash.mk new file mode 100644 index 00000000..68930bb1 --- /dev/null +++ b/package/python-logstash/python-logstash.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-logstash +# +################################################################################ + +PYTHON_LOGSTASH_VERSION = 0.4.6 +PYTHON_LOGSTASH_SITE = https://files.pythonhosted.org/packages/4e/8d/7ff2e8e8e2613e7bb7654790480bb4cf51a55721371adbb631b16cb16dce +PYTHON_LOGSTASH_SETUP_TYPE = distutils +PYTHON_LOGSTASH_LICENSE = MIT +PYTHON_LOGSTASH_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-lxml/Config.in b/package/python-lxml/Config.in new file mode 100644 index 00000000..fcb30d56 --- /dev/null +++ b/package/python-lxml/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PYTHON_LXML + bool "python-lxml" + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_LIBXSLT + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 + help + The lxml XML toolkit is a Pythonic binding for the C libraries + libxml2 and libxslt. + + http://lxml.de/ diff --git a/package/python-lxml/Config.in.host b/package/python-lxml/Config.in.host new file mode 100644 index 00000000..7bf1e485 --- /dev/null +++ b/package/python-lxml/Config.in.host @@ -0,0 +1,7 @@ +config BR2_PACKAGE_HOST_PYTHON_LXML + bool "host python-lxml" + help + The lxml XML toolkit is a Pythonic binding for the C libraries + libxml2 and libxslt. + + http://lxml.de/ diff --git a/package/python-lxml/python-lxml.hash b/package/python-lxml/python-lxml.hash new file mode 100644 index 00000000..dd6446e6 --- /dev/null +++ b/package/python-lxml/python-lxml.hash @@ -0,0 +1,6 @@ +# Locally computed +sha256 39b78571b3b30645ac77b95f7c69d1bffc4cf8c3b157c435a34da72e78c82468 lxml-4.6.3.tar.gz +sha256 41d49dd406aa0e1548a6d5f21a30d6bf638b3cd96eb7289dd348d83ed2e40392 LICENSES.txt +sha256 69edb445c1335a8312d4c09271847e9956d84f0d9f724d125340cc3fad767b2a doc/licenses/BSD.txt +sha256 0497ae8138811ef4466ede653bab7a59feb3d3c14f9ed50fc33a00aeb5bec32e doc/licenses/elementtree.txt +sha256 56c5b13f28b78958890c36e3249c34c169041e42ebcfdce8080f3324ba2bf4de src/lxml/isoschematron/resources/rng/iso-schematron.rng diff --git a/package/python-lxml/python-lxml.mk b/package/python-lxml/python-lxml.mk new file mode 100644 index 00000000..0d3775a1 --- /dev/null +++ b/package/python-lxml/python-lxml.mk @@ -0,0 +1,38 @@ +################################################################################ +# +# python-lxml +# +################################################################################ + +PYTHON_LXML_VERSION = 4.6.3 +PYTHON_LXML_SITE = https://files.pythonhosted.org/packages/e5/21/a2e4517e3d216f0051687eea3d3317557bde68736f038a3b105ac3809247 +PYTHON_LXML_SOURCE = lxml-$(PYTHON_LXML_VERSION).tar.gz + +# Not including the GPL, because it is used only for the test scripts. +PYTHON_LXML_LICENSE = BSD-3-Clause, Others +PYTHON_LXML_LICENSE_FILES = \ + LICENSES.txt \ + doc/licenses/BSD.txt \ + doc/licenses/elementtree.txt \ + src/lxml/isoschematron/resources/rng/iso-schematron.rng +PYTHON_LXML_CPE_ID_VENDOR = lxml +PYTHON_LXML_CPE_ID_PRODUCT = lxml + +# python-lxml can use either setuptools, or distutils as a fallback. +# So, we use setuptools. +PYTHON_LXML_SETUP_TYPE = setuptools + +PYTHON_LXML_DEPENDENCIES = libxml2 libxslt zlib +HOST_PYTHON_LXML_DEPENDENCIES = host-libxml2 host-libxslt host-zlib + +# python-lxml needs these scripts in order to properly detect libxml2 and +# libxslt compiler and linker flags +PYTHON_LXML_BUILD_OPTS = \ + --xslt-config=$(STAGING_DIR)/usr/bin/xslt-config \ + --xml2-config=$(STAGING_DIR)/usr/bin/xml2-config +HOST_PYTHON_LXML_BUILD_OPTS = \ + --xslt-config=$(HOST_DIR)/bin/xslt-config \ + --xml2-config=$(HOST_DIR)/bin/xml2-config + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-m2crypto/0001-setup.py-move-swig-default-includes-before-openssl.patch b/package/python-m2crypto/0001-setup.py-move-swig-default-includes-before-openssl.patch new file mode 100644 index 00000000..f4d7e428 --- /dev/null +++ b/package/python-m2crypto/0001-setup.py-move-swig-default-includes-before-openssl.patch @@ -0,0 +1,63 @@ +From 1aab31787a8d1ef9436d9cf81832691f729b6282 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 7 Nov 2020 23:26:30 +0100 +Subject: [PATCH] setup.py: move swig default includes before openssl + +Move swig default includes before openssl to avoid the following build +failure when cross-compiling for some architectures (e.g. arm, mips): + +swig -python -py3 -D__x86_64__ \ + -I/srv/storage/autobuild/run/instance-0/output-1/host/mipsel-buildroot-linux-gnu/sysroot/usr/include/python3.9 \ + -I/srv/storage/autobuild/run/instance-0/output-1/host/mipsel-buildroot-linux-gnu/sysroot/usr/include \ + -I/srv/storage/autobuild/run/instance-0/output-1/host/mipsel-buildroot-linux-gnu/sysroot/usr/include/openssl \ + -I/srv/storage/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/mipsel-buildroot-linux-gnu/8.3.0/include \ + -I/srv/storage/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/mipsel-buildroot-linux-gnu/8.3.0/include-fixed \ + -I/srv/storage/autobuild/run/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/mipsel-buildroot-linux-gnu/8.3.0/../../../../mipsel-buildroot-linux-gnu/include \ + -I/srv/storage/autobuild/run/instance-0/output-1/host/mipsel-buildroot-linux-gnu/sysroot/usr/include \ + -includeall -modern -builtin -outdir \ + /srv/storage/autobuild/run/instance-0/output-1/build/python-m2crypto-0.36.0/M2Crypto -o SWIG/_m2crypto_wrap.c SWIG/_m2crypto.i +Deprecated command line option: -modern. This option is now always on. +/srv/storage/autobuild/run/instance-0/output-1/host/mipsel-buildroot-linux-gnu/sysroot/usr/include/bits/types.h:139: +Error: CPP #error "". Use the -cpperraswarn option to continue swig processing. + +This build failure is probably raised because swig includes a wrong types.h file +from the openssl directory (e.g. +/srv/storage/autobuild/run/instance-0/output-1/host/mipsel-buildroot-linux-gnu/sysroot/usr/include) + +Fixes: + - http://autobuild.buildroot.org/results/7f63e6a2d8681cc3408f344556afd5dd16eb7368 + - http://autobuild.buildroot.org/results/d115a082418321e7dc4715c635f94b30b3cad387 + +Signed-off-by: Fabrice Fontaine +[Upstream status: +https://gitlab.com/m2crypto/m2crypto/-/merge_requests/248] +--- + setup.py | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/setup.py b/setup.py +index 89d03bb..0045fda 100644 +--- a/setup.py ++++ b/setup.py +@@ -154,6 +154,9 @@ class _M2CryptoBuildExt(build_ext.build_ext): + if sys.version_info[:1] >= (3,): + self.swig_opts.append('-py3') + ++ # swig seems to need the default header file directories ++ self.swig_opts.extend(['-I%s' % i for i in _get_additional_includes()]) ++ + log.debug('self.include_dirs = %s', self.include_dirs) + log.debug('self.library_dirs = %s', self.library_dirs) + +@@ -204,8 +207,6 @@ class _M2CryptoBuildExt(build_ext.build_ext): + self.swig_opts.append( + '-I' + os.path.join(openssl_include_dir, 'openssl')) + +- # swig seems to need the default header file directories +- self.swig_opts.extend(['-I%s' % i for i in _get_additional_includes()]) + self.swig_opts.append('-includeall') + self.swig_opts.append('-modern') + self.swig_opts.append('-builtin') +-- +2.28.0 + diff --git a/package/python-m2crypto/Config.in b/package/python-m2crypto/Config.in new file mode 100644 index 00000000..7481d49e --- /dev/null +++ b/package/python-m2crypto/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PYTHON_M2CRYPTO + bool "python-m2crypto" + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_PYTHON_PYEXPAT if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_PYEXPAT if BR2_PACKAGE_PYTHON3 # runtime + select BR2_PACKAGE_PYTHON_SSL if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_SSL if BR2_PACKAGE_PYTHON3 # runtime + select BR2_PACKAGE_PYTHON_TYPING if BR2_PACKAGE_PYTHON # runtime + help + M2Crypto: A Python crypto and SSL toolkit. + + https://gitlab.com/m2crypto/m2crypto diff --git a/package/python-m2crypto/python-m2crypto.hash b/package/python-m2crypto/python-m2crypto.hash new file mode 100644 index 00000000..148cdd83 --- /dev/null +++ b/package/python-m2crypto/python-m2crypto.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/m2crypto/json +md5 b8b34c5b83892096a8676b6f2e8f4e7e M2Crypto-0.36.0.tar.gz +sha256 1542c18e3ee5c01db5031d0b594677536963e3f54ecdf5315aeecb3a595b4dc1 M2Crypto-0.36.0.tar.gz +# Locally computed sha256 checksums +sha256 4eca478396f4b2b020729a111fce3f096456d74500bfd8f2b0388c3c69f997c0 LICENCE diff --git a/package/python-m2crypto/python-m2crypto.mk b/package/python-m2crypto/python-m2crypto.mk new file mode 100644 index 00000000..fb26be46 --- /dev/null +++ b/package/python-m2crypto/python-m2crypto.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# python-m2crypto +# +################################################################################ + +PYTHON_M2CRYPTO_VERSION = 0.36.0 +PYTHON_M2CRYPTO_SOURCE = M2Crypto-$(PYTHON_M2CRYPTO_VERSION).tar.gz +PYTHON_M2CRYPTO_SITE = https://files.pythonhosted.org/packages/ff/df/84609ed874b5e6fcd3061a517bf4b6e4d0301f553baf9fa37bef2b509797 +PYTHON_M2CRYPTO_SETUP_TYPE = setuptools +PYTHON_M2CRYPTO_LICENSE = MIT +PYTHON_M2CRYPTO_LICENSE_FILES = LICENCE +PYTHON_M2CRYPTO_CPE_ID_VENDOR = m2crypto_project +PYTHON_M2CRYPTO_CPE_ID_PRODUCT = m2crypto +PYTHON_M2CRYPTO_DEPENDENCIES = openssl host-swig +PYTHON_M2CRYPTO_BUILD_OPTS = --openssl=$(STAGING_DIR)/usr + +$(eval $(python-package)) diff --git a/package/python-m2r/Config.in b/package/python-m2r/Config.in new file mode 100644 index 00000000..44dafaa4 --- /dev/null +++ b/package/python-m2r/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_M2R + bool "python-m2r" + select BR2_PACKAGE_PYTHON_MISTUNE # runtime + select BR2_PACKAGE_PYTHON_DOCUTILS # runtime + help + Markdown to reStructuredText converter. + + https://github.com/miyakogi/m2r diff --git a/package/python-m2r/python-m2r.hash b/package/python-m2r/python-m2r.hash new file mode 100644 index 00000000..3c22e970 --- /dev/null +++ b/package/python-m2r/python-m2r.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/m2r/json +md5 8bdb45c19e2b59bb5ffb9a0348e81ad8 m2r-0.2.1.tar.gz +sha256 bf90bad66cda1164b17e5ba4a037806d2443f2a4d5ddc9f6a5554a0322aaed99 m2r-0.2.1.tar.gz +# Locally computed sha256 checksums +sha256 28728ec0ecbd8c171ebaeccebf69e3961282fd81f06abc7424c65546b6ae6f27 LICENSE diff --git a/package/python-m2r/python-m2r.mk b/package/python-m2r/python-m2r.mk new file mode 100644 index 00000000..47fb154c --- /dev/null +++ b/package/python-m2r/python-m2r.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-m2r +# +################################################################################ + +PYTHON_M2R_VERSION = 0.2.1 +PYTHON_M2R_SOURCE = m2r-$(PYTHON_M2R_VERSION).tar.gz +PYTHON_M2R_SITE = https://files.pythonhosted.org/packages/39/e7/9fae11a45f5e1a3a21d8a98d02948e597c4afd7848a0dbe1a1ebd235f13e +PYTHON_M2R_SETUP_TYPE = setuptools +PYTHON_M2R_LICENSE = MIT +PYTHON_M2R_LICENSE_FILES = LICENSE +HOST_PYTHON_M2R_DEPENDENCIES = host-python-docutils host-python-mistune + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-mad/Config.in b/package/python-mad/Config.in new file mode 100644 index 00000000..25354213 --- /dev/null +++ b/package/python-mad/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_MAD + bool "python-mad" + depends on BR2_PACKAGE_PYTHON + select BR2_PACKAGE_LIBMAD + help + python-mad is a Python binding for the MAD library, a + high-quality integer-only MPEG decoder. + + http://spacepants.org/src/pymad/ diff --git a/package/python-mad/python-mad.hash b/package/python-mad/python-mad.hash new file mode 100644 index 00000000..7b19ae5a --- /dev/null +++ b/package/python-mad/python-mad.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 1c9fc529b78de7d26e9e47cf182c9f8bf43838d8f62a9c1773540d57f5ebc522 pymad-0.6.tar.gz +sha256 d245807f90032872d1438d741ed21e2490e1175dc8aa3afa5ddb6c8e529b58e5 COPYING diff --git a/package/python-mad/python-mad.mk b/package/python-mad/python-mad.mk new file mode 100644 index 00000000..a2221487 --- /dev/null +++ b/package/python-mad/python-mad.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# python-mad +# +################################################################################ + +PYTHON_MAD_VERSION = 0.6 +PYTHON_MAD_SOURCE = pymad-$(PYTHON_MAD_VERSION).tar.gz +PYTHON_MAD_SITE = http://spacepants.org/src/pymad/download +PYTHON_MAD_SETUP_TYPE = distutils +PYTHON_MAD_LICENSE = GPL-2.0+ +PYTHON_MAD_LICENSE_FILES = COPYING + +PYTHON_MAD_DEPENDENCIES = libmad + +ifeq ($(BR2_ENDIAN),"LITTLE") +PYTHON_MAD_ENDIAN = little +else +PYTHON_MAD_ENDIAN = big +endif + +define PYTHON_MAD_CONFIGURE_CMDS + echo "endian = $(PYTHON_MAD_ENDIAN)" > $(@D)/Setup + echo "mad_libs = mad" >> $(@D)/Setup + echo "mad_lib_dir = $(STAGING_DIR)/usr/lib" >> $(@D)/Setup + echo "mad_include_dir = $(STAGING_DIR)/usr/include" >> $(@D)/Setup +endef + +$(eval $(python-package)) diff --git a/package/python-mako/Config.in b/package/python-mako/Config.in new file mode 100644 index 00000000..442e290e --- /dev/null +++ b/package/python-mako/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_MAKO + bool "python-mako" + help + Mako is a template library written in Python. It provides a + familiar, non-XML syntax which compiles into Python modules + for maximum performance. + + https://pypi.python.org/pypi/Mako diff --git a/package/python-mako/python-mako.hash b/package/python-mako/python-mako.hash new file mode 100644 index 00000000..35379992 --- /dev/null +++ b/package/python-mako/python-mako.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/mako/json +md5 184bb2ba4b937127e7c557b93db89377 Mako-1.1.3.tar.gz +sha256 8195c8c1400ceb53496064314c6736719c6f25e7479cd24c77be3d9361cddc27 Mako-1.1.3.tar.gz +# Locally computed sha256 checksums +sha256 47cd0d41b1092f9161cfb629ed15e5cea185144710ff4633a4281ef088ff5de7 LICENSE diff --git a/package/python-mako/python-mako.mk b/package/python-mako/python-mako.mk new file mode 100644 index 00000000..d5d49f25 --- /dev/null +++ b/package/python-mako/python-mako.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# python-mako +# +################################################################################ + +# Please keep in sync with +# package/python3-mako/python3-mako.mk +PYTHON_MAKO_VERSION = 1.1.3 +PYTHON_MAKO_SOURCE = Mako-$(PYTHON_MAKO_VERSION).tar.gz +PYTHON_MAKO_SITE = https://files.pythonhosted.org/packages/72/89/402d2b4589e120ca76a6aed8fee906a0f5ae204b50e455edd36eda6e778d +PYTHON_MAKO_SETUP_TYPE = setuptools +PYTHON_MAKO_LICENSE = MIT +PYTHON_MAKO_LICENSE_FILES = LICENSE + +# In host build, setup.py tries to download markupsafe if it is not installed +HOST_PYTHON_MAKO_DEPENDENCIES = host-python-markupsafe + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-markdown/Config.in b/package/python-markdown/Config.in new file mode 100644 index 00000000..454c2729 --- /dev/null +++ b/package/python-markdown/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_MARKDOWN + bool "python-markdown" + depends on BR2_PACKAGE_PYTHON3 + # runtime dependency on Python's xml module + select BR2_PACKAGE_PYTHON3_PYEXPAT + help + This is a Python implementation of John Gruber's Markdown + + https://pypi.python.org/pypi/Markdown diff --git a/package/python-markdown/python-markdown.hash b/package/python-markdown/python-markdown.hash new file mode 100644 index 00000000..4d54ce92 --- /dev/null +++ b/package/python-markdown/python-markdown.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/markdown/json +md5 7a894dc55992b37cdbcba5c4049455fc Markdown-3.2.1.tar.gz +sha256 90fee683eeabe1a92e149f7ba74e5ccdc81cd397bd6c516d93a8da0ef90b6902 Markdown-3.2.1.tar.gz +# Locally computed sha256 +sha256 6f1193cb634718e65c3a537d6e25ebd614820ec0ef693cfc12248112638d64da LICENSE.md diff --git a/package/python-markdown/python-markdown.mk b/package/python-markdown/python-markdown.mk new file mode 100644 index 00000000..1f352fd7 --- /dev/null +++ b/package/python-markdown/python-markdown.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-markdown +# +################################################################################ + +PYTHON_MARKDOWN_VERSION = 3.2.1 +PYTHON_MARKDOWN_SOURCE = Markdown-$(PYTHON_MARKDOWN_VERSION).tar.gz +PYTHON_MARKDOWN_SITE = https://files.pythonhosted.org/packages/98/79/ce6984767cb9478e6818bd0994283db55c423d733cc62a88a3ffb8581e11 +PYTHON_MARKDOWN_LICENSE = BSD-3-Clause +PYTHON_MARKDOWN_LICENSE_FILES = LICENSE.md +PYTHON_MARKDOWN_SETUP_TYPE = setuptools + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-markdown2/Config.in b/package/python-markdown2/Config.in new file mode 100644 index 00000000..8fe23324 --- /dev/null +++ b/package/python-markdown2/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_MARKDOWN2 + bool "python-markdown2" + help + A fast and complete Python implementation of Markdown. + + https://github.com/trentm/python-markdown2 diff --git a/package/python-markdown2/python-markdown2.hash b/package/python-markdown2/python-markdown2.hash new file mode 100644 index 00000000..03315fd3 --- /dev/null +++ b/package/python-markdown2/python-markdown2.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/markdown2/json +md5 5c1f9002060cf534bde0bdd584d6b70a markdown2-2.3.9.tar.gz +sha256 89526090907ae5ece66d783c434b35c29ee500c1986309e306ce2346273ada6a markdown2-2.3.9.tar.gz +# Locally computed sha256 checksums +sha256 f8c7c4d554409cf621b8d653dbfffb719745fd36f5c49b8305258649b403ef9c LICENSE.txt diff --git a/package/python-markdown2/python-markdown2.mk b/package/python-markdown2/python-markdown2.mk new file mode 100644 index 00000000..3ffa3579 --- /dev/null +++ b/package/python-markdown2/python-markdown2.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-markdown2 +# +################################################################################ + +PYTHON_MARKDOWN2_VERSION = 2.3.9 +PYTHON_MARKDOWN2_SOURCE = markdown2-$(PYTHON_MARKDOWN2_VERSION).tar.gz +PYTHON_MARKDOWN2_SITE = https://files.pythonhosted.org/packages/14/69/c542025f80916457ff4fe962404a27ab6417d43822fe54bf88ee2dd1b36f +PYTHON_MARKDOWN2_SETUP_TYPE = setuptools +PYTHON_MARKDOWN2_LICENSE = MIT +PYTHON_MARKDOWN2_LICENSE_FILES = LICENSE.txt +PYTHON_MARKDOWN2_CPE_ID_VENDOR = python-markdown2_project + +$(eval $(python-package)) diff --git a/package/python-markupsafe/Config.in b/package/python-markupsafe/Config.in new file mode 100644 index 00000000..48421e0a --- /dev/null +++ b/package/python-markupsafe/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_MARKUPSAFE + bool "python-markupsafe" + help + MarkupSafe implements a XML/HTML/XHTML Markup safe string + for Python. + + https://github.com/mitsuhiko/markupsafe diff --git a/package/python-markupsafe/python-markupsafe.hash b/package/python-markupsafe/python-markupsafe.hash new file mode 100644 index 00000000..df07662a --- /dev/null +++ b/package/python-markupsafe/python-markupsafe.hash @@ -0,0 +1,4 @@ +# md5 from https://pypi.python.org/pypi/markupsafe/json, sha256 locally computed +md5 43fd756864fe42063068e092e220c57b MarkupSafe-1.1.1.tar.gz +sha256 29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b MarkupSafe-1.1.1.tar.gz +sha256 489a8e1108509ed98a37bb983e11e0f7e1d31f0bd8f99a79c8448e7ff37d07ea LICENSE.rst diff --git a/package/python-markupsafe/python-markupsafe.mk b/package/python-markupsafe/python-markupsafe.mk new file mode 100644 index 00000000..f067d94f --- /dev/null +++ b/package/python-markupsafe/python-markupsafe.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-markupsafe +# +################################################################################ + +# Please keep in sync with package/python3-markupsafe/python3-markupsafe.mk +PYTHON_MARKUPSAFE_VERSION = 1.1.1 +PYTHON_MARKUPSAFE_SOURCE = MarkupSafe-$(PYTHON_MARKUPSAFE_VERSION).tar.gz +PYTHON_MARKUPSAFE_SITE = https://files.pythonhosted.org/packages/b9/2e/64db92e53b86efccfaea71321f597fa2e1b2bd3853d8ce658568f7a13094 +PYTHON_MARKUPSAFE_SETUP_TYPE = setuptools +PYTHON_MARKUPSAFE_LICENSE = BSD-3-Clause +PYTHON_MARKUPSAFE_LICENSE_FILES = LICENSE.rst + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-matplotlib/0001-Fix-invalid-inclusion-headers.patch b/package/python-matplotlib/0001-Fix-invalid-inclusion-headers.patch new file mode 100644 index 00000000..b10bfb32 --- /dev/null +++ b/package/python-matplotlib/0001-Fix-invalid-inclusion-headers.patch @@ -0,0 +1,29 @@ +From b0232c3cf1051749dd1e2bd0ec7c5c0a3a008d2f Mon Sep 17 00:00:00 2001 +From: Jugurtha BELKALEM +Date: Thu, 9 May 2019 15:06:36 +0200 +Subject: [PATCH] Fix invalid inclusion headers + +By default, matplotlib includes headers from host +machine which breaks the build process. + +Signed-off-by: Jugurtha BELKALEM +--- + python-matplotlib-3.0.3/setupext.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/setupext.py b/setupext.py +index fc82d5d..eb978d2 100644 +--- a/setupext.py ++++ b/setupext.py +@@ -267,7 +267,7 @@ def get_base_dirs(): + 'gnu0': ['/usr'], + 'aix5': ['/usr/local'], + } +- return basedir_map.get(sys.platform, ['/usr/local', '/usr']) ++ return basedir_map.get(sys.platform, []) + + + def get_include_dirs(): +-- +2.7.4 + diff --git a/package/python-matplotlib/0002-Merge-pull-request-11983-from-anntzer-builddepchecks.patch b/package/python-matplotlib/0002-Merge-pull-request-11983-from-anntzer-builddepchecks.patch new file mode 100644 index 00000000..b3a22acb --- /dev/null +++ b/package/python-matplotlib/0002-Merge-pull-request-11983-from-anntzer-builddepchecks.patch @@ -0,0 +1,170 @@ +From 923ce72409f184bd8e8c61b196260891036ba87e Mon Sep 17 00:00:00 2001 +From: Antony Lee +Date: Thu, 30 Aug 2018 15:27:55 +0200 +Subject: [PATCH] Simplify version checks for freetype and libpng. + +Currently, setupext.py replicates a lot of work done by the compiler to +check whether header files are present, and whether freetype and libpng +have sufficiently recent versions. + +Instead, we can just add a small stub source file at the top of the +extension sources which just tries to include the header and checks the +version macros. If the header is not found, compilation will +immediately abort with `foo.h: No such file or directory`; if the +version is too old, we can emit an appropriate error message (`#pragma +message` is supported by all major compilers and allows expanding of +macros in the error message). + +[Retrieved from: +https://github.com/matplotlib/matplotlib/commit/d1060a885309ec7ac19ca912d3011a5eb1673bd5] +Signed-off-by: Fabrice Fontaine +--- + setupext.py | 83 +++++----------------------------------- + src/checkdep_freetype2.c | 13 +++++++ + src/checkdep_libpng.c | 5 +++ + 3 files changed, 28 insertions(+), 73 deletions(-) + create mode 100644 src/checkdep_freetype2.c + create mode 100644 src/checkdep_libpng.c + +diff --git a/setupext.py b/setupext.py +index d5f4b81f562..a5163e39288 100644 +--- a/setupext.py ++++ b/setupext.py +@@ -814,6 +814,13 @@ def add_flags(self, ext, add_sources=True): + for x in agg_sources) + + ++# For FreeType2 and libpng, we add a separate checkdep_foo.c source to at the ++# top of the extension sources. This file is compiled first and immediately ++# aborts the compilation either with "foo.h: No such file or directory" if the ++# header is not found, or an appropriate error message if the header indicates ++# a too-old version. ++ ++ + class FreeType(SetupPackage): + name = "freetype" + pkg_names = { +@@ -825,59 +832,8 @@ class FreeType(SetupPackage): + "windows_url": "http://gnuwin32.sourceforge.net/packages/freetype.htm" + } + +- def check(self): +- if options.get('local_freetype'): +- return "Using local version for testing" +- +- if sys.platform == 'win32': +- try: +- check_include_file(get_include_dirs(), 'ft2build.h', 'freetype') +- except CheckFailed: +- check_include_file(get_include_dirs(), os.path.join('freetype2', 'ft2build.h'), 'freetype') +- return 'Using unknown version found on system.' +- +- status, output = subprocess.getstatusoutput( +- "freetype-config --ftversion") +- if status == 0: +- version = output +- else: +- version = None +- +- # Early versions of freetype grep badly inside freetype-config, +- # so catch those cases. (tested with 2.5.3). +- if version is None or 'No such file or directory\ngrep:' in version: +- version = self.version_from_header() +- +- # pkg_config returns the libtool version rather than the +- # freetype version so we need to explicitly pass the version +- # to _check_for_pkg_config +- return self._check_for_pkg_config( +- 'freetype2', 'ft2build.h', +- min_version='2.3', version=version) +- +- def version_from_header(self): +- version = 'unknown' +- ext = self.get_extension() +- if ext is None: +- return version +- # Return the first version found in the include dirs. +- for include_dir in ext.include_dirs: +- header_fname = os.path.join(include_dir, 'freetype.h') +- if os.path.exists(header_fname): +- major, minor, patch = 0, 0, 0 +- with open(header_fname, 'r') as fh: +- for line in fh: +- if line.startswith('#define FREETYPE_'): +- value = line.rsplit(' ', 1)[1].strip() +- if 'MAJOR' in line: +- major = value +- elif 'MINOR' in line: +- minor = value +- else: +- patch = value +- return '.'.join([major, minor, patch]) +- + def add_flags(self, ext): ++ ext.sources.insert(0, 'src/checkdep_freetype2.c') + if options.get('local_freetype'): + src_path = os.path.join( + 'build', 'freetype-{0}'.format(LOCAL_FREETYPE_VERSION)) +@@ -1058,30 +1014,11 @@ class Png(SetupPackage): + "windows_url": "http://gnuwin32.sourceforge.net/packages/libpng.htm" + } + +- def check(self): +- if sys.platform == 'win32': +- check_include_file(get_include_dirs(), 'png.h', 'png') +- return 'Using unknown version found on system.' +- +- status, output = subprocess.getstatusoutput("libpng-config --version") +- if status == 0: +- version = output +- else: +- version = None +- +- try: +- return self._check_for_pkg_config( +- 'libpng', 'png.h', +- min_version='1.2', version=version) +- except CheckFailed as e: +- if has_include_file(get_include_dirs(), 'png.h'): +- return str(e) + ' Using unknown version found on system.' +- raise +- + def get_extension(self): + sources = [ ++ 'src/checkdep_libpng.c', + 'src/_png.cpp', +- 'src/mplutils.cpp' ++ 'src/mplutils.cpp', + ] + ext = make_extension('matplotlib._png', sources) + pkg_config.setup_extension( +diff --git a/src/checkdep_freetype2.c b/src/checkdep_freetype2.c +new file mode 100644 +index 00000000000..bf9a8c94e38 +--- /dev/null ++++ b/src/checkdep_freetype2.c +@@ -0,0 +1,13 @@ ++#include ++#include FT_FREETYPE_H ++ ++#define XSTR(x) STR(x) ++#define STR(x) #x ++ ++#pragma message("Compiling with FreeType version " \ ++ XSTR(FREETYPE_MAJOR) "." XSTR(FREETYPE_MINOR) "." XSTR(FREETYPE_PATCH) ".") ++#if FREETYPE_MAJOR << 16 + FREETYPE_MINOR << 8 + FREETYPE_PATCH < 0x020300 ++ #error "FreeType version 2.3 or higher is required." \ ++ "Consider setting the MPLLOCALFREETYPE environment variable to 1." ++ #error ++#endif +diff --git a/src/checkdep_libpng.c b/src/checkdep_libpng.c +new file mode 100644 +index 00000000000..5ebe5cbe4d7 +--- /dev/null ++++ b/src/checkdep_libpng.c +@@ -0,0 +1,5 @@ ++#include ++#pragma message("Compiling with libpng version " PNG_LIBPNG_VER_STRING ".") ++#if PNG_LIBPNG_VER < 10200 ++ #error "libpng version 1.2 or higher is required." ++#endif diff --git a/package/python-matplotlib/Config.in b/package/python-matplotlib/Config.in new file mode 100644 index 00000000..e7e2804b --- /dev/null +++ b/package/python-matplotlib/Config.in @@ -0,0 +1,41 @@ +config BR2_PACKAGE_PYTHON_MATPLOTLIB + bool "python-matplotlib" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_PYTHON3 + depends on BR2_PACKAGE_PYTHON_NUMPY_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_MUSL # python-numpy + select BR2_PACKAGE_FREETYPE # runtime + select BR2_PACKAGE_LIBPNG # runtime + select BR2_PACKAGE_PYTHON_CYCLER + select BR2_PACKAGE_PYTHON_SETUPTOOLS # runtime + select BR2_PACKAGE_PYTHON_DATEUTIL # runtime + select BR2_PACKAGE_PYTHON_KIWISOLVER # runtime + select BR2_PACKAGE_PYTHON_NUMPY # runtime + select BR2_PACKAGE_PYTHON_PYPARSING # runtime + select BR2_PACKAGE_PYTHON3_ZLIB # runtime + select BR2_PACKAGE_ZLIB # runtime + help + Matplotlib strives to produce publication quality 2D + graphics for interactive graphing, scientific publishing, + user interface development and web application servers + targeting multiple user interfaces and hardcopy output + formats. + + https://matplotlib.org/ + +if BR2_PACKAGE_PYTHON_MATPLOTLIB + +config BR2_PACKAGE_PYTHON_MATPLOTLIB_QT + bool "qt display" + depends on BR2_PACKAGE_QT5 # python-pyqt5 + select BR2_PACKAGE_PYTHON_PYQT5 + select BR2_PACKAGE_QT5BASE_FONTCONFIG + select BR2_PACKAGE_QT5BASE_WIDGETS + +endif + +comment "python-matplotlib needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + +comment "python-matplotlib needs glibc or musl" + depends on !(BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_MUSL) diff --git a/package/python-matplotlib/python-matplotlib.hash b/package/python-matplotlib/python-matplotlib.hash new file mode 100644 index 00000000..ccb22eef --- /dev/null +++ b/package/python-matplotlib/python-matplotlib.hash @@ -0,0 +1,4 @@ +# sha256 from https://pypi.org/project/matplotlib/#files +sha256 e1d33589e32f482d0a7d1957bf473d43341115d40d33f578dad44432e47df7b7 matplotlib-3.0.3.tar.gz +# Locally computed sha256 checksums +sha256 5a1a81ea301728c8bba2933da832c0cd62229daf20893a024ab3d53244468dbc LICENSE/LICENSE diff --git a/package/python-matplotlib/python-matplotlib.mk b/package/python-matplotlib/python-matplotlib.mk new file mode 100644 index 00000000..8d00ac8a --- /dev/null +++ b/package/python-matplotlib/python-matplotlib.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# python-matplotlib +# +################################################################################ + +PYTHON_MATPLOTLIB_VERSION = 3.0.3 +PYTHON_MATPLOTLIB_SOURCE = matplotlib-$(PYTHON_MATPLOTLIB_VERSION).tar.gz +PYTHON_MATPLOTLIB_SITE = https://files.pythonhosted.org/packages/26/04/8b381d5b166508cc258632b225adbafec49bbe69aa9a4fa1f1b461428313 +PYTHON_MATPLOTLIB_LICENSE = Python-2.0 +PYTHON_MATPLOTLIB_LICENSE_FILES = LICENSE/LICENSE +PYTHON_MATPLOTLIB_DEPENDENCIES = host-pkgconf freetype host-python-numpy \ + libpng python-cycler +PYTHON_MATPLOTLIB_SETUP_TYPE = setuptools + +ifeq ($(BR2_PACKAGE_PYTHON_MATPLOTLIB_QT),y) +PYTHON_MATPLOTLIB_DEPENDENCIES += python-pyqt5 +endif + +$(eval $(python-package)) diff --git a/package/python-mbstrdecoder/Config.in b/package/python-mbstrdecoder/Config.in new file mode 100644 index 00000000..5ba3a19c --- /dev/null +++ b/package/python-mbstrdecoder/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_MBSTRDECODER + bool "python-mbstrdecoder" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_CHARDET # runtime + help + multi-byte character string decoder. + + https://github.com/thombashi/mbstrdecoder diff --git a/package/python-mbstrdecoder/python-mbstrdecoder.hash b/package/python-mbstrdecoder/python-mbstrdecoder.hash new file mode 100644 index 00000000..296930f6 --- /dev/null +++ b/package/python-mbstrdecoder/python-mbstrdecoder.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/mbstrdecoder/json +md5 aa377cfa117318583dffa1fd96123bdf mbstrdecoder-1.0.1.tar.gz +sha256 f895e1fb97496855ab5e43de99588787169c01f782c71625142d1a62729e9f9d mbstrdecoder-1.0.1.tar.gz +# Locally computed sha256 checksums +sha256 7588265082eed5e9f4afd5090c57e610b740ec547b16aaaab739ba07c5eefb15 LICENSE diff --git a/package/python-mbstrdecoder/python-mbstrdecoder.mk b/package/python-mbstrdecoder/python-mbstrdecoder.mk new file mode 100644 index 00000000..6474324b --- /dev/null +++ b/package/python-mbstrdecoder/python-mbstrdecoder.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-mbstrdecoder +# +################################################################################ + +PYTHON_MBSTRDECODER_VERSION = 1.0.1 +PYTHON_MBSTRDECODER_SOURCE = mbstrdecoder-$(PYTHON_MBSTRDECODER_VERSION).tar.gz +PYTHON_MBSTRDECODER_SITE = https://files.pythonhosted.org/packages/b7/3b/2524dd4771dfca572269036fb08356715cb78a1c1c2a4dae3a810a86b777 +PYTHON_MBSTRDECODER_SETUP_TYPE = setuptools +PYTHON_MBSTRDECODER_LICENSE = MIT +PYTHON_MBSTRDECODER_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-meld3/Config.in b/package/python-meld3/Config.in new file mode 100644 index 00000000..9366b3cd --- /dev/null +++ b/package/python-meld3/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_MELD3 + bool "python-meld3" + select BR2_PACKAGE_PYTHON_PYEXPAT if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_PYEXPAT if BR2_PACKAGE_PYTHON3 + help + A HTML/XML templating system. + + https://github.com/supervisor/meld3 diff --git a/package/python-meld3/python-meld3.hash b/package/python-meld3/python-meld3.hash new file mode 100644 index 00000000..f423b0bf --- /dev/null +++ b/package/python-meld3/python-meld3.hash @@ -0,0 +1,6 @@ +# md5, sha256 from https://pypi.org/pypi/meld3/json +md5 56fff5d6599efeefc81cf2d3b8cf6b4e meld3-2.0.0.tar.gz +sha256 1efda676264490db2e30bfb81b27a918cc6d9c2de6d609491aa43410b9537eb9 meld3-2.0.0.tar.gz +# Locally computed sha256 checksums +sha256 5fe11cd858707131b6ec1338b5c2cd68dd1fdb875e3ec967149bc6fea858ecec LICENSE.txt +sha256 2422945b49554688d529e1f8d4ac6e0ab77a817e8889158e1e56cf963ecf5c4d COPYRIGHT.txt diff --git a/package/python-meld3/python-meld3.mk b/package/python-meld3/python-meld3.mk new file mode 100644 index 00000000..f67172e6 --- /dev/null +++ b/package/python-meld3/python-meld3.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-meld3 +# +################################################################################ + +PYTHON_MELD3_VERSION = 2.0.0 +PYTHON_MELD3_SOURCE = meld3-$(PYTHON_MELD3_VERSION).tar.gz +PYTHON_MELD3_SITE = https://files.pythonhosted.org/packages/00/3b/023446ddc1bf0b519c369cbe88269c30c6a64bd10af4817c73f560c302f7 +PYTHON_MELD3_LICENSE = ZPL-2.1 +PYTHON_MELD3_LICENSE_FILES = COPYRIGHT.txt LICENSE.txt +PYTHON_MELD3_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-mimeparse/Config.in b/package/python-mimeparse/Config.in new file mode 100644 index 00000000..2437c366 --- /dev/null +++ b/package/python-mimeparse/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_MIMEPARSE + bool "python-mimeparse" + help + A module provides basic functions for parsing mime-type + names and matching them against a list of media-ranges. + + https://github.com/dbtsai/python-mimeparse diff --git a/package/python-mimeparse/python-mimeparse.hash b/package/python-mimeparse/python-mimeparse.hash new file mode 100644 index 00000000..9721c5fa --- /dev/null +++ b/package/python-mimeparse/python-mimeparse.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/python-mimeparse/json +md5 a32ae1df93be1ddb581d1c0fa124bab4 python-mimeparse-1.6.0.tar.gz +sha256 76e4b03d700a641fd7761d3cd4fdbbdcd787eade1ebfac43f877016328334f78 python-mimeparse-1.6.0.tar.gz +# Locally computed sha256 checksums +sha256 89807acf2309bd285f033404ee78581602f3cd9b819a16ac2f0e5f60ff4a473e LICENSE diff --git a/package/python-mimeparse/python-mimeparse.mk b/package/python-mimeparse/python-mimeparse.mk new file mode 100644 index 00000000..00bb1cf8 --- /dev/null +++ b/package/python-mimeparse/python-mimeparse.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-mimeparse +# +################################################################################ + +PYTHON_MIMEPARSE_VERSION = 1.6.0 +PYTHON_MIMEPARSE_SITE = https://files.pythonhosted.org/packages/0f/40/ac5f9e44a55b678c3cd881b4c3376e5b002677dbeab6fb3a50bac5d50d29 +PYTHON_MIMEPARSE_SETUP_TYPE = setuptools +PYTHON_MIMEPARSE_LICENSE = MIT +PYTHON_MIMEPARSE_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-mistune/Config.in b/package/python-mistune/Config.in new file mode 100644 index 00000000..e62689d0 --- /dev/null +++ b/package/python-mistune/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_MISTUNE + bool "python-mistune" + help + The fastest markdown parser in pure Python with renderer + features, inspired by marked. + + https://pypi.python.org/pypi/mistune diff --git a/package/python-mistune/python-mistune.hash b/package/python-mistune/python-mistune.hash new file mode 100644 index 00000000..f545308f --- /dev/null +++ b/package/python-mistune/python-mistune.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/mistune/json +md5 fb6ab174ece938dea09f8b2adad771e4 mistune-0.8.4.tar.gz +sha256 59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e mistune-0.8.4.tar.gz +# Locally computed sha256 checksums +sha256 0c5259c3dd0a7c46f4835221645f62a0638c9b9faa02af08676e8069e1ff964b LICENSE diff --git a/package/python-mistune/python-mistune.mk b/package/python-mistune/python-mistune.mk new file mode 100644 index 00000000..6beb4258 --- /dev/null +++ b/package/python-mistune/python-mistune.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-mistune +# +################################################################################ + +PYTHON_MISTUNE_VERSION = 0.8.4 +PYTHON_MISTUNE_SOURCE = mistune-$(PYTHON_MISTUNE_VERSION).tar.gz +PYTHON_MISTUNE_SITE = https://files.pythonhosted.org/packages/2d/a4/509f6e7783ddd35482feda27bc7f72e65b5e7dc910eca4ab2164daf9c577 +PYTHON_MISTUNE_LICENSE = BSD-3-Clause +PYTHON_MISTUNE_LICENSE_FILES = LICENSE +PYTHON_MISTUNE_SETUP_TYPE = setuptools + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-modbus-tk/Config.in b/package/python-modbus-tk/Config.in new file mode 100644 index 00000000..16d87ffc --- /dev/null +++ b/package/python-modbus-tk/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_MODBUS_TK + bool "python-modbus-tk" + select BR2_PACKAGE_PYTHON_SERIAL # runtime + help + Implementation of modbus protocol in python. + + https://github.com/ljean/modbus-tk/ diff --git a/package/python-modbus-tk/python-modbus-tk.hash b/package/python-modbus-tk/python-modbus-tk.hash new file mode 100644 index 00000000..c486e497 --- /dev/null +++ b/package/python-modbus-tk/python-modbus-tk.hash @@ -0,0 +1,5 @@ +# sha256 from https://pypi.org/pypi/modbus-tk/json +sha256 893514bbd8c92118d20a19979e0239e7cb2a63f8f1795a0271e57def09d11770 modbus_tk-1.1.2.tar.gz +# Locally computed sha256 checksums +sha256 3b6a7f9c478ac1982e86cdadb45eb4788241b95839500eb26839d5053b74a24a license.txt +sha256 aa7ca42152a13db6a27b31944f99851efc3b9ee813912ff21d7d6ceadca62e6f copying.txt diff --git a/package/python-modbus-tk/python-modbus-tk.mk b/package/python-modbus-tk/python-modbus-tk.mk new file mode 100644 index 00000000..30056bb2 --- /dev/null +++ b/package/python-modbus-tk/python-modbus-tk.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-modbus-tk +# +################################################################################ + +PYTHON_MODBUS_TK_VERSION = 1.1.2 +PYTHON_MODBUS_TK_SOURCE = modbus_tk-$(PYTHON_MODBUS_TK_VERSION).tar.gz +PYTHON_MODBUS_TK_SITE = https://files.pythonhosted.org/packages/ce/e9/30d86eb912bf868b8c97698b5747f10cf72dc26c674fd030249bc3275484 +PYTHON_MODBUS_TK_SETUP_TYPE = setuptools +PYTHON_MODBUS_TK_LICENSE = LGPL-2.1+ +PYTHON_MODBUS_TK_LICENSE_FILES = license.txt copying.txt + +$(eval $(python-package)) diff --git a/package/python-more-itertools/Config.in b/package/python-more-itertools/Config.in new file mode 100644 index 00000000..1a7f95c2 --- /dev/null +++ b/package/python-more-itertools/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_MORE_ITERTOOLS + bool "python-more-itertools" + depends on BR2_PACKAGE_PYTHON3 + help + More routines for operating on iterables, beyond itertools. + + https://github.com/erikrose/more-itertools diff --git a/package/python-more-itertools/python-more-itertools.hash b/package/python-more-itertools/python-more-itertools.hash new file mode 100644 index 00000000..189498ec --- /dev/null +++ b/package/python-more-itertools/python-more-itertools.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/more-itertools/json +md5 0912041c05148ed079984cff69af2e99 more-itertools-8.4.0.tar.gz +sha256 68c70cc7167bdf5c7c9d8f6954a7837089c6a36bf565383919bb595efb8a17e5 more-itertools-8.4.0.tar.gz +# Locally computed sha256 checksums +sha256 09f1c8c9e941af3e584d59641ea9b87d83c0cb0fd007eb5ef391a7e2643c1a46 LICENSE diff --git a/package/python-more-itertools/python-more-itertools.mk b/package/python-more-itertools/python-more-itertools.mk new file mode 100644 index 00000000..ef21f4d2 --- /dev/null +++ b/package/python-more-itertools/python-more-itertools.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-more-itertools +# +################################################################################ + +PYTHON_MORE_ITERTOOLS_VERSION = 8.4.0 +PYTHON_MORE_ITERTOOLS_SOURCE = more-itertools-$(PYTHON_MORE_ITERTOOLS_VERSION).tar.gz +PYTHON_MORE_ITERTOOLS_SITE = https://files.pythonhosted.org/packages/67/4a/16cb3acf64709eb0164e49ba463a42dc45366995848c4f0cf770f57b8120 +PYTHON_MORE_ITERTOOLS_SETUP_TYPE = setuptools +PYTHON_MORE_ITERTOOLS_LICENSE = MIT +PYTHON_MORE_ITERTOOLS_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-msgfy/Config.in b/package/python-msgfy/Config.in new file mode 100644 index 00000000..f5a47163 --- /dev/null +++ b/package/python-msgfy/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_MSGFY + bool "python-msgfy" + depends on BR2_PACKAGE_PYTHON3 + help + msgfy is a Python library for convert Exception instance to + a human-readable error message. + + https://github.com/thombashi/msgfy diff --git a/package/python-msgfy/python-msgfy.hash b/package/python-msgfy/python-msgfy.hash new file mode 100644 index 00000000..c795f7fa --- /dev/null +++ b/package/python-msgfy/python-msgfy.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/msgfy/json +md5 4a3d8ac9908acd5f661a58b12f9e0d17 msgfy-0.1.0.tar.gz +sha256 474c08302cd56ccee1300ac7976a01ebd1e42716fc9bcd947d39a311a15b7012 msgfy-0.1.0.tar.gz +# Locally computed sha256 checksums +sha256 fcfe96f8fb1bf3478a51c828e7f7afee01500ce1c2d4345d052edb858be05227 LICENSE diff --git a/package/python-msgfy/python-msgfy.mk b/package/python-msgfy/python-msgfy.mk new file mode 100644 index 00000000..c187061d --- /dev/null +++ b/package/python-msgfy/python-msgfy.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-msgfy +# +################################################################################ + +PYTHON_MSGFY_VERSION = 0.1.0 +PYTHON_MSGFY_SOURCE = msgfy-$(PYTHON_MSGFY_VERSION).tar.gz +PYTHON_MSGFY_SITE = https://files.pythonhosted.org/packages/24/b5/7cc6ba75b6489245f9b75f11a85202b934fa92f6c99a4fa1c639f08d68e8 +PYTHON_MSGFY_SETUP_TYPE = setuptools +PYTHON_MSGFY_LICENSE = MIT +PYTHON_MSGFY_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-msgpack/Config.in b/package/python-msgpack/Config.in new file mode 100644 index 00000000..2050d4f0 --- /dev/null +++ b/package/python-msgpack/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_MSGPACK + bool "python-msgpack" + help + MessagePack (http://msgpack.org/) is a fast, compact binary + serialization format, suitable for similar data to JSON. + This package provides a pure python library for reading + and writing MessagePack data. + + https://pypi.python.org/pypi/msgpack-python/ diff --git a/package/python-msgpack/python-msgpack.hash b/package/python-msgpack/python-msgpack.hash new file mode 100644 index 00000000..e34ea118 --- /dev/null +++ b/package/python-msgpack/python-msgpack.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/msgpack/json +md5 c35ee8f991dad3969884e9585e56ebba msgpack-1.0.0.tar.gz +sha256 9534d5cc480d4aff720233411a1f765be90885750b07df772380b34c10ecb5c0 msgpack-1.0.0.tar.gz +# Locally computed sha256 checksums +sha256 492dedba85da5872f78e6091bcd1fea474d660d35acb4dee964b8aab3f007427 COPYING diff --git a/package/python-msgpack/python-msgpack.mk b/package/python-msgpack/python-msgpack.mk new file mode 100644 index 00000000..18d5a998 --- /dev/null +++ b/package/python-msgpack/python-msgpack.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-msgpack +# +################################################################################ + +PYTHON_MSGPACK_VERSION = 1.0.0 +PYTHON_MSGPACK_SOURCE = msgpack-$(PYTHON_MSGPACK_VERSION).tar.gz +PYTHON_MSGPACK_SITE = https://files.pythonhosted.org/packages/e4/4f/057549afbd12fdd5d9aae9df19a6773a3d91988afe7be45b277e8cee2f4d +PYTHON_MSGPACK_LICENSE = Apache-2.0 +PYTHON_MSGPACK_LICENSE_FILES = COPYING +PYTHON_MSGPACK_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-multidict/Config.in b/package/python-multidict/Config.in new file mode 100644 index 00000000..7bfaa36d --- /dev/null +++ b/package/python-multidict/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_MULTIDICT + bool "python-multidict" + depends on BR2_PACKAGE_PYTHON3 + help + Multidict is dict-like collection of key-value pairs where a + key may occur more than once in the container. + + https://github.com/aio-libs/multidict diff --git a/package/python-multidict/python-multidict.hash b/package/python-multidict/python-multidict.hash new file mode 100644 index 00000000..6b783012 --- /dev/null +++ b/package/python-multidict/python-multidict.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/multidict/json +md5 b1dab3349efe90934ae3612f1202b733 multidict-5.0.2.tar.gz +sha256 e5bf89fe57f702a046c7ec718fe330ed50efd4bcf74722940db2eb0919cddb1c multidict-5.0.2.tar.gz +# Locally computed sha256 checksums +sha256 a1c5825513279d3085a0ba46880e148ea3710c149bbaedcf2d11605a5ed3c4ad LICENSE diff --git a/package/python-multidict/python-multidict.mk b/package/python-multidict/python-multidict.mk new file mode 100644 index 00000000..a7043643 --- /dev/null +++ b/package/python-multidict/python-multidict.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-multidict +# +################################################################################ + +PYTHON_MULTIDICT_VERSION = 5.0.2 +PYTHON_MULTIDICT_SOURCE = multidict-$(PYTHON_MULTIDICT_VERSION).tar.gz +PYTHON_MULTIDICT_SITE = https://files.pythonhosted.org/packages/da/e6/50c7f52781f45c2b37c77e962c30a3944a9e79a46ea92956e826c24d3432 +PYTHON_MULTIDICT_SETUP_TYPE = setuptools +PYTHON_MULTIDICT_LICENSE = Apache-2.0 +PYTHON_MULTIDICT_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-mutagen/Config.in b/package/python-mutagen/Config.in new file mode 100644 index 00000000..3c95e374 --- /dev/null +++ b/package/python-mutagen/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_PYTHON_MUTAGEN + bool "python-mutagen" + select BR2_PACKAGE_PYTHON_PYEXPAT if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_PYEXPAT if BR2_PACKAGE_PYTHON3 # runtime + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 # runtime + help + Mutagen is a Python module to handle audio metadata. It + supports ASF, FLAC, MP4, Monkey's Audio, MP3, Musepack, Ogg + Opus, Ogg FLAC, Ogg Speex, Ogg Theora, Ogg Vorbis, True + Audio, WavPack, OptimFROG, and AIFF audio files. All + versions of ID3v2 are supported, and all standard ID3v2.4 + frames are parsed. + + It can read Xing headers to accurately calculate the bitrate + and length of MP3s. ID3 and APEv2 tags can be edited + regardless of audio format. It can also manipulate Ogg + streams on an individual packet/page level. + + https://mutagen.readthedocs.io/en/latest/ diff --git a/package/python-mutagen/python-mutagen.hash b/package/python-mutagen/python-mutagen.hash new file mode 100644 index 00000000..5ee8ed17 --- /dev/null +++ b/package/python-mutagen/python-mutagen.hash @@ -0,0 +1,4 @@ +# md5 from https://pypi.python.org/pypi/mutagen/json, sha256 locally computed +md5 3729218f974c3a79ee9972ffa5ca5d12 mutagen-1.42.0.tar.gz +sha256 bb61e2456f59a9a4a259fbc08def6d01ba45a42da8eeaa97d00633b0ec5de71c mutagen-1.42.0.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/python-mutagen/python-mutagen.mk b/package/python-mutagen/python-mutagen.mk new file mode 100644 index 00000000..5477d6f4 --- /dev/null +++ b/package/python-mutagen/python-mutagen.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-mutagen +# +################################################################################ + +PYTHON_MUTAGEN_VERSION = 1.42.0 +PYTHON_MUTAGEN_SOURCE = mutagen-$(PYTHON_MUTAGEN_VERSION).tar.gz +PYTHON_MUTAGEN_SITE = https://files.pythonhosted.org/packages/30/4c/5ad1a6e1ccbcfaf6462db727989c302d9d721beedd9b09c11e6f0c7065b0 +PYTHON_MUTAGEN_LICENSE = GPL-2.0 +PYTHON_MUTAGEN_LICENSE_FILES = COPYING +PYTHON_MUTAGEN_SETUP_TYPE = distutils + +$(eval $(python-package)) diff --git a/package/python-mwclient/Config.in b/package/python-mwclient/Config.in new file mode 100644 index 00000000..dc93e6c0 --- /dev/null +++ b/package/python-mwclient/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_MWCLIENT + bool "python-mwclient" + select BR2_PACKAGE_PYTHON_REQUESTS_OAUTHLIB # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + help + Python client library to interface with the MediaWiki API + + https://github.com/mwclient/mwclient diff --git a/package/python-mwclient/python-mwclient.hash b/package/python-mwclient/python-mwclient.hash new file mode 100644 index 00000000..354bd685 --- /dev/null +++ b/package/python-mwclient/python-mwclient.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/mwclient/json +md5 148bd36bfaaf591bd9c0076cbf1ed888 mwclient-0.10.1.tar.gz +sha256 79363dd8d12f5e3b91b92b63152bf9dfef27da786c076a244e1f148c8dd67139 mwclient-0.10.1.tar.gz +# Locally computed +sha256 67689d1fd48a5adba31272eed653c12160dd3abbfe92ab056ac42a155e12e523 LICENSE.md diff --git a/package/python-mwclient/python-mwclient.mk b/package/python-mwclient/python-mwclient.mk new file mode 100644 index 00000000..07aa877e --- /dev/null +++ b/package/python-mwclient/python-mwclient.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-mwclient +# +################################################################################ + +PYTHON_MWCLIENT_VERSION = 0.10.1 +PYTHON_MWCLIENT_SOURCE = mwclient-$(PYTHON_MWCLIENT_VERSION).tar.gz +PYTHON_MWCLIENT_SITE = https://files.pythonhosted.org/packages/97/b4/5fc70ad3286a8d8ec4b9ac01acad0f6b00c5a48d4a16b9d3be6519b7eb21 +PYTHON_MWCLIENT_LICENSE = MIT +PYTHON_MWCLIENT_LICENSE_FILES = LICENSE.md +PYTHON_MWCLIENT_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-mwscrape/Config.in b/package/python-mwscrape/Config.in new file mode 100644 index 00000000..cb1e3050 --- /dev/null +++ b/package/python-mwscrape/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_MWSCRAPE + bool "python-mwscrape" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_COUCHDB # runtime + select BR2_PACKAGE_PYTHON_MWCLIENT # runtime + select BR2_PACKAGE_PYTHON_PYLRU # runtime + help + Download rendered articles from MediaWiki API to CouchDB + + https://github.com/itkach/mwscrape diff --git a/package/python-mwscrape/python-mwscrape.hash b/package/python-mwscrape/python-mwscrape.hash new file mode 100644 index 00000000..0f64a9e1 --- /dev/null +++ b/package/python-mwscrape/python-mwscrape.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 2d0e6c747f6a866dedbc759f78830b3f496e8d03401a3c727d0b48735341c5b6 python-mwscrape-568ccbe6e12dd6391277df02adf724ba0e5f9197.tar.gz +sha256 fab3dd6bdab226f1c08630b1dd917e11fcb4ec5e1e020e2c16f83a0a13863e85 LICENSE.txt diff --git a/package/python-mwscrape/python-mwscrape.mk b/package/python-mwscrape/python-mwscrape.mk new file mode 100644 index 00000000..3ffe9d68 --- /dev/null +++ b/package/python-mwscrape/python-mwscrape.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-mwscrape +# +################################################################################ + +PYTHON_MWSCRAPE_VERSION = 568ccbe6e12dd6391277df02adf724ba0e5f9197 +PYTHON_MWSCRAPE_SITE = $(call github,itkach,mwscrape,$(PYTHON_MWSCRAPE_VERSION)) +PYTHON_MWSCRAPE_LICENSE = MPL-2.0 +PYTHON_MWSCRAPE_LICENSE_FILES = LICENSE.txt +PYTHON_MWSCRAPE_SETUP_TYPE = distutils + +$(eval $(python-package)) diff --git a/package/python-mwscrape2slob/Config.in b/package/python-mwscrape2slob/Config.in new file mode 100644 index 00000000..6d543bda --- /dev/null +++ b/package/python-mwscrape2slob/Config.in @@ -0,0 +1,23 @@ +config BR2_PACKAGE_PYTHON_MWSCRAPE2SLOB + bool "python-mwscrape2slob" + depends on !BR2_BINFMT_FLAT # python-slob -> python-pyicu -> icu + depends on BR2_HOST_GCC_AT_LEAST_4_9 # python-slob -> python-pyicu -> icu + depends on BR2_INSTALL_LIBSTDCPP # python-slob -> python-pyicu -> icu + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # python-slob -> python-pyicu -> icu + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_COUCHDB # runtime + select BR2_PACKAGE_PYTHON_CSSSELECT # runtime + select BR2_PACKAGE_PYTHON_CSSUTILS # runtime + select BR2_PACKAGE_PYTHON_LXML # runtime + select BR2_PACKAGE_PYTHON_SLOB # runtime + help + A tool to create slob with content from a MediaWiki CouchDB + created by mwscrape. + + https://github.com/itkach/mwscrape2slob + +comment "python-mwscrape2slob needs a toolchain w/ C++, gcc >= 4.9, host gcc >= 4.9" + depends on BR2_PACKAGE_PYTHON3 && !BR2_BINFMT_FLAT + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || \ + !BR2_HOST_GCC_AT_LEAST_4_9 diff --git a/package/python-mwscrape2slob/python-mwscrape2slob.hash b/package/python-mwscrape2slob/python-mwscrape2slob.hash new file mode 100644 index 00000000..51b62585 --- /dev/null +++ b/package/python-mwscrape2slob/python-mwscrape2slob.hash @@ -0,0 +1,2 @@ +# Locally computed +sha256 f1c1c79526fb3e0dac1c2c43e57a38b8641672e7008c5530d4b75e864eff232a python-mwscrape2slob-e01d3e92f0a372ebd0f57390e437a28f9d3c0438.tar.gz diff --git a/package/python-mwscrape2slob/python-mwscrape2slob.mk b/package/python-mwscrape2slob/python-mwscrape2slob.mk new file mode 100644 index 00000000..cd8ae352 --- /dev/null +++ b/package/python-mwscrape2slob/python-mwscrape2slob.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# python-mwscrape2slob +# +################################################################################ + +PYTHON_MWSCRAPE2SLOB_VERSION = e01d3e92f0a372ebd0f57390e437a28f9d3c0438 +PYTHON_MWSCRAPE2SLOB_SITE = $(call github,itkach,mwscrape2slob,$(PYTHON_MWSCRAPE2SLOB_VERSION)) +PYTHON_MWSCRAPE2SLOB_LICENSE = GPL-3.0, Apache-2.0 (MathJax), GPL (MediaWiki monobook style sheet) +PYTHON_MWSCRAPE2SLOB_SETUP_TYPE = distutils + +$(eval $(python-package)) diff --git a/package/python-nested-dict/Config.in b/package/python-nested-dict/Config.in new file mode 100644 index 00000000..dc453fff --- /dev/null +++ b/package/python-nested-dict/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_NESTED_DICT + bool "python-nested-dict" + help + Python dictionary with automatic and arbitrary levels of + nestedness. + + http://pypi.python.org/pypi/nested_dict diff --git a/package/python-nested-dict/python-nested-dict.hash b/package/python-nested-dict/python-nested-dict.hash new file mode 100644 index 00000000..15f0ed8b --- /dev/null +++ b/package/python-nested-dict/python-nested-dict.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/nested-dict/json +md5 e08e2e8de6d002f9ddda4eea5a4528c2 nested_dict-1.61.tar.gz +sha256 de0fb5bac82ba7bcc23736f09373f18628ea57f92bbaa13480d23f261c41e771 nested_dict-1.61.tar.gz +# Locally computed sha256 checksums +sha256 c84eb6b667b91fd9b8991f500c168354eb51af5b2dd970d8ee51ce336d9aeed1 LICENSE.TXT diff --git a/package/python-nested-dict/python-nested-dict.mk b/package/python-nested-dict/python-nested-dict.mk new file mode 100644 index 00000000..1a5b180e --- /dev/null +++ b/package/python-nested-dict/python-nested-dict.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-nested-dict +# +################################################################################ + +PYTHON_NESTED_DICT_VERSION = 1.61 +PYTHON_NESTED_DICT_SOURCE = nested_dict-$(PYTHON_NESTED_DICT_VERSION).tar.gz +PYTHON_NESTED_DICT_SITE = https://files.pythonhosted.org/packages/42/d0/3b27fa65b16a2e44d793af59929fcdb3bb84b4664462ff2830105dfd9b7d +PYTHON_NESTED_DICT_SETUP_TYPE = setuptools +PYTHON_NESTED_DICT_LICENSE = MIT +PYTHON_NESTED_DICT_LICENSE_FILES = LICENSE.TXT + +$(eval $(python-package)) diff --git a/package/python-netaddr/Config.in b/package/python-netaddr/Config.in new file mode 100644 index 00000000..534d136f --- /dev/null +++ b/package/python-netaddr/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_NETADDR + bool "python-netaddr" + help + A network address manipulation library for Python. + + https://pypi.python.org/pypi/netaddr diff --git a/package/python-netaddr/python-netaddr.hash b/package/python-netaddr/python-netaddr.hash new file mode 100644 index 00000000..91b20076 --- /dev/null +++ b/package/python-netaddr/python-netaddr.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/netaddr/json +md5 34cad578473b66ad77bc3b2a7613ed4a netaddr-0.8.0.tar.gz +# Locally computed +sha256 d6cc57c7a07b1d9d2e917aa8b36ae8ce61c35ba3fcd1b83ca31c5a0ee2b5a243 netaddr-0.8.0.tar.gz +sha256 0e53de62547787462f41eefb5cee31a14f7ea767ba0362c6f9304f1742486d47 LICENSE diff --git a/package/python-netaddr/python-netaddr.mk b/package/python-netaddr/python-netaddr.mk new file mode 100644 index 00000000..e3ffe4e8 --- /dev/null +++ b/package/python-netaddr/python-netaddr.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-netaddr +# +################################################################################ + +PYTHON_NETADDR_VERSION = 0.8.0 +PYTHON_NETADDR_SOURCE = netaddr-$(PYTHON_NETADDR_VERSION).tar.gz +PYTHON_NETADDR_SITE = https://pypi.python.org/packages/c3/3b/fe5bda7a3e927d9008c897cf1a0858a9ba9924a6b4750ec1824c9e617587 +PYTHON_NETADDR_LICENSE = BSD-3-Clause +PYTHON_NETADDR_LICENSE_FILES = LICENSE +PYTHON_NETADDR_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-netifaces/Config.in b/package/python-netifaces/Config.in new file mode 100644 index 00000000..1f54f4bd --- /dev/null +++ b/package/python-netifaces/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_NETIFACES + bool "python-netifaces" + help + Portable access to network interfaces from Python. + + http://alastairs-place.net/projects/netifaces diff --git a/package/python-netifaces/python-netifaces.hash b/package/python-netifaces/python-netifaces.hash new file mode 100644 index 00000000..f5920801 --- /dev/null +++ b/package/python-netifaces/python-netifaces.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/netifaces/json +md5 de92cc322b4f56047c073f802ad77860 netifaces-0.10.9.tar.gz +sha256 2dee9ffdd16292878336a58d04a20f0ffe95555465fee7c9bd23b3490ef2abf3 netifaces-0.10.9.tar.gz +# Locally computed sha256 checksums +sha256 b20b895164b72b9cc0170e6c0d60b14f9aaacc6862c0556eed41eaa348883705 LICENSE diff --git a/package/python-netifaces/python-netifaces.mk b/package/python-netifaces/python-netifaces.mk new file mode 100644 index 00000000..502529c0 --- /dev/null +++ b/package/python-netifaces/python-netifaces.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-netifaces +# +################################################################################ + +PYTHON_NETIFACES_VERSION = 0.10.9 +PYTHON_NETIFACES_SOURCE = netifaces-$(PYTHON_NETIFACES_VERSION).tar.gz +PYTHON_NETIFACES_SITE = https://files.pythonhosted.org/packages/0d/18/fd6e9c71a35b67a73160ec80a49da63d1eed2d2055054cc2995714949132 +PYTHON_NETIFACES_LICENSE = MIT +PYTHON_NETIFACES_LICENSE_FILES = LICENSE +PYTHON_NETIFACES_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-networkmanager/Config.in b/package/python-networkmanager/Config.in new file mode 100644 index 00000000..9b2b474d --- /dev/null +++ b/package/python-networkmanager/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_PYTHON_NETWORKMANAGER + bool "python-networkmanager" + depends on BR2_PACKAGE_NETWORK_MANAGER # runtime + depends on BR2_USE_WCHAR # dbus-python + depends on BR2_TOOLCHAIN_HAS_THREADS # dbus-python + depends on BR2_PACKAGE_DBUS # dbus-python + select BR2_PACKAGE_DBUS_PYTHON # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + help + python-networkmanager wraps NetworkManagers D-Bus interface + so you can be less verbose when talking to NetworkManager + from python. All interfaces have been wrapped in classes, + properties are exposed as python properties and function + calls are forwarded to the correct interface. + + https://pypi.python.org/pypi/python-networkmanager/ diff --git a/package/python-networkmanager/python-networkmanager.hash b/package/python-networkmanager/python-networkmanager.hash new file mode 100644 index 00000000..6ca94450 --- /dev/null +++ b/package/python-networkmanager/python-networkmanager.hash @@ -0,0 +1,5 @@ +# md5 and sha256 from https://pypi.python.org/pypi/python-networkmanager/json +md5 f638d854a3639fb37c0e06d1092a771e python-networkmanager-2.1.tar.gz +sha256 aef1e34d98d7bec7cc368e0ca0f2e97493f9b5ebe6d7103f8f6460cfca3dc6fc python-networkmanager-2.1.tar.gz +# Locally computed +sha256 be40f44d54bb5e0f0eee28e957ad020a00a6e3adb0290262e92129eba1c044cf COPYING diff --git a/package/python-networkmanager/python-networkmanager.mk b/package/python-networkmanager/python-networkmanager.mk new file mode 100644 index 00000000..de893f75 --- /dev/null +++ b/package/python-networkmanager/python-networkmanager.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-networkmanager +# +################################################################################ + +PYTHON_NETWORKMANAGER_VERSION = 2.1 +PYTHON_NETWORKMANAGER_SITE = https://files.pythonhosted.org/packages/73/ec/2cc46290cedc99f59df3633d428dfa91d95946ca49af96fdb53514ee195f +PYTHON_NETWORKMANAGER_SETUP_TYPE = setuptools +PYTHON_NETWORKMANAGER_LICENSE = Zlib +PYTHON_NETWORKMANAGER_LICENSE_FILES = COPYING + +$(eval $(python-package)) diff --git a/package/python-networkx/Config.in b/package/python-networkx/Config.in new file mode 100644 index 00000000..2ae3841d --- /dev/null +++ b/package/python-networkx/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_NETWORKX + bool "python-networkx" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_DECORATOR # runtime + help + A Python package for the creation, manipulation, + and study of the structure, dynamics, and + functions of complex networks. + + https://pypi.python.org/pypi/networkx diff --git a/package/python-networkx/python-networkx.hash b/package/python-networkx/python-networkx.hash new file mode 100644 index 00000000..6c4b793e --- /dev/null +++ b/package/python-networkx/python-networkx.hash @@ -0,0 +1,4 @@ +# From: https://pypi.org/project/networkx/ +sha256 f8f4ff0b6f96e4f9b16af6b84622597b5334bf9cae8cf9b2e42e7985d5c95c64 networkx-2.4.tar.gz +# Locally computed +sha256 f421f7c5d30022aa268174976e43e488b856ad953f32cdd13f0675630996d8c0 LICENSE.txt diff --git a/package/python-networkx/python-networkx.mk b/package/python-networkx/python-networkx.mk new file mode 100644 index 00000000..8ebbc84b --- /dev/null +++ b/package/python-networkx/python-networkx.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# python-networkx +# +################################################################################ + +PYTHON_NETWORKX_VERSION = 2.4 +PYTHON_NETWORKX_SOURCE = networkx-$(PYTHON_NETWORKX_VERSION).tar.gz +PYTHON_NETWORKX_SITE = https://pypi.python.org/packages/bf/63/7b579dd3b1c49ce6b7fd8f6f864038f255201410905dd183cf7f4a3845cf +PYTHON_NETWORKX_LICENSE = BSD-3-Clause +PYTHON_NETWORKX_LICENSE_FILES = LICENSE.txt +PYTHON_NETWORKX_CPE_ID_VENDOR = python +PYTHON_NETWORKX_CPE_ID_PRODUCT = networkx +PYTHON_NETWORKX_SETUP_TYPE = setuptools +HOST_PYTHON_NETWORKX_DEPENDENCIES = host-python3-decorator +HOST_PYTHON_NETWORKX_NEEDS_HOST_PYTHON = python3 + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-nfc/Config.in b/package/python-nfc/Config.in new file mode 100644 index 00000000..7008723f --- /dev/null +++ b/package/python-nfc/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_PYTHON_NFC + bool "python-nfc" + depends on BR2_PACKAGE_PYTHON + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_LIBUSB_COMPAT + help + Python module for near field communication. + + https://launchpad.net/nfcpy + +comment "python-nfc needs a toolchain w/ threads, gcc >= 4.9" + depends on BR2_PACKAGE_PYTHON + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/python-nfc/python-nfc.hash b/package/python-nfc/python-nfc.hash new file mode 100644 index 00000000..6514973f --- /dev/null +++ b/package/python-nfc/python-nfc.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 7ff9265e393e9e70173ecef5a1f9124e67d3b6e481c2dc3a9537b6a769ebe16f python-nfc-0.13.5.tar.gz +sha256 0dc4b0a3362f197e250604567a6b4eb16bbc34c186425401e2201a193a82549f LICENSE diff --git a/package/python-nfc/python-nfc.mk b/package/python-nfc/python-nfc.mk new file mode 100644 index 00000000..f5417410 --- /dev/null +++ b/package/python-nfc/python-nfc.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-nfc +# +################################################################################ + +PYTHON_NFC_VERSION = 0.13.5 +PYTHON_NFC_SITE = $(call github,nfcpy,nfcpy,v$(PYTHON_NFC_VERSION)) +PYTHON_NFC_DEPENDENCIES = libusb libusb-compat +PYTHON_NFC_SETUP_TYPE = setuptools +PYTHON_NFC_LICENSE = EUPL-1.1+ +PYTHON_NFC_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-numpy/0001-add-loongarch-support.patch b/package/python-numpy/0001-add-loongarch-support.patch new file mode 100644 index 00000000..522e6e6a --- /dev/null +++ b/package/python-numpy/0001-add-loongarch-support.patch @@ -0,0 +1,48 @@ +From 2276209e52b7ca42566d309281ac0ee30ed99753 Mon Sep 17 00:00:00 2001 +From: Xiaochuan Mao +Date: Tue, 16 May 2023 17:41:16 +0800 +Subject: [PATCH] add loongarch support + +--- + numpy/core/include/numpy/npy_cpu.h | 3 +++ + numpy/core/include/numpy/npy_endian.h | 3 ++- + 2 files changed, 5 insertions(+), 1 deletion(-) + +diff --git a/numpy/core/include/numpy/npy_cpu.h b/numpy/core/include/numpy/npy_cpu.h +index 5edd8f4..8b7b59f 100644 +--- a/numpy/core/include/numpy/npy_cpu.h ++++ b/numpy/core/include/numpy/npy_cpu.h +@@ -18,6 +18,7 @@ + * NPY_CPU_ARCEL + * NPY_CPU_ARCEB + * NPY_CPU_RISCV64 ++ * NPY_CPU_LOONGARCH:64 + */ + #ifndef _NPY_CPUARCH_H_ + #define _NPY_CPUARCH_H_ +@@ -102,6 +103,8 @@ + #define NPY_CPU_ARCEB + #elif defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64 + #define NPY_CPU_RISCV64 ++#elif defined(__loongarch__) ++ #define NPY_CPU_LOONGARCH + #else + #error Unknown CPU, please report this to numpy maintainers with \ + information about your platform (OS, CPU and compiler) +diff --git a/numpy/core/include/numpy/npy_endian.h b/numpy/core/include/numpy/npy_endian.h +index 44cdffd..86c91a6 100644 +--- a/numpy/core/include/numpy/npy_endian.h ++++ b/numpy/core/include/numpy/npy_endian.h +@@ -48,7 +48,8 @@ + || defined(NPY_CPU_MIPSEL) \ + || defined(NPY_CPU_PPC64LE) \ + || defined(NPY_CPU_ARCEL) \ +- || defined(NPY_CPU_RISCV64) ++ || defined(NPY_CPU_RISCV64) \ ++ || defined(NPY_CPU_LOONGARCH) + #define NPY_BYTE_ORDER NPY_LITTLE_ENDIAN + #elif defined(NPY_CPU_PPC) \ + || defined(NPY_CPU_SPARC) \ +-- +2.17.1 + diff --git a/package/python-numpy/Config.in b/package/python-numpy/Config.in new file mode 100644 index 00000000..5a2b38c9 --- /dev/null +++ b/package/python-numpy/Config.in @@ -0,0 +1,35 @@ +config BR2_PACKAGE_PYTHON_NUMPY_ARCH_SUPPORTS + bool + # Numpy has some CPU specific code + default y if BR2_arc + default y if BR2_aarch64 + default y if BR2_arm + default y if BR2_armeb + default y if BR2_i386 + default y if BR2_loongarch64 + default y if BR2_mips + default y if BR2_mipsel + default y if BR2_powerpc + default y if BR2_powerpc64 + default y if BR2_sh + default y if BR2_x86_64 + +config BR2_PACKAGE_PYTHON_NUMPY + bool "python-numpy" + depends on BR2_PACKAGE_PYTHON3 + depends on BR2_PACKAGE_PYTHON_NUMPY_ARCH_SUPPORTS + # python-numpy needs fenv.h which is not provided by uclibc + depends on BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_MUSL + help + NumPy is the fundamental package for scientific computing + with Python. + + Note that NumPy needs fenv.h fully supported by the + C library. + + http://www.numpy.org/ + +comment "python-numpy needs glibc or musl" + depends on BR2_PACKAGE_PYTHON3 + depends on BR2_PACKAGE_PYTHON_NUMPY_ARCH_SUPPORTS + depends on !(BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_MUSL) diff --git a/package/python-numpy/python-numpy.hash b/package/python-numpy/python-numpy.hash new file mode 100644 index 00000000..ff9d0264 --- /dev/null +++ b/package/python-numpy/python-numpy.hash @@ -0,0 +1,9 @@ +# Copied from https://github.com/numpy/numpy/releases/tag/v1.18.1 +sha256 da204ce460aa4247e595b7c7189d2fb2ed5f796bc03197055de01dac61d0125e numpy-1.18.2.tar.gz +# License files, locally calculated +sha256 ad81d0c21843ba6ce6fe5fa3eaacb61120be70cd798c52f63df3f4c12a843f0c LICENSE.txt +sha256 d3045980e80a6b39f98586c24bc7f39a7625b4b9f08ce72e367d12814743d047 numpy/core/src/multiarray/dragon4.c +sha256 426a5a484480f57a295db48c2c04f47bb3274752dd82a7fd6541dfa2cb90f641 doc/sphinxext/LICENSE.txt +sha256 154a8706fa0fdeff1073bf6239c4ecf51f562ab107066eef839dade1a45c824c doc/scipy-sphinx-theme/LICENSE.txt +sha256 a14cc25e10d40a3aa705b7de2fb764a6535d8ee9b2db4e1724900585457dfd55 numpy/linalg/lapack_lite/LICENSE.txt +sha256 badf51c7e3e7de9c7630bd069780f5c197b846ef7660b342a1e58d5553592d8e tools/npy_tempita/license.txt diff --git a/package/python-numpy/python-numpy.mk b/package/python-numpy/python-numpy.mk new file mode 100644 index 00000000..8260de7e --- /dev/null +++ b/package/python-numpy/python-numpy.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# python-numpy +# +################################################################################ + +PYTHON_NUMPY_VERSION = 1.18.2 +PYTHON_NUMPY_SOURCE = numpy-$(PYTHON_NUMPY_VERSION).tar.gz +PYTHON_NUMPY_SITE = https://github.com/numpy/numpy/releases/download/v$(PYTHON_NUMPY_VERSION) +PYTHON_NUMPY_LICENSE = BSD-3-Clause, BSD-2-Clause, PSF, Apache-2.0, MIT, Zlib +PYTHON_NUMPY_LICENSE_FILES = LICENSE.txt doc/sphinxext/LICENSE.txt \ + doc/scipy-sphinx-theme/LICENSE.txt \ + numpy/linalg/lapack_lite/LICENSE.txt \ + tools/npy_tempita/license.txt \ + numpy/core/src/multiarray/dragon4.c +PYTHON_NUMPY_SETUP_TYPE = setuptools +PYTHON_NUMPY_DEPENDENCIES = host-python-cython +HOST_PYTHON_NUMPY_DEPENDENCIES = host-python-cython + +ifeq ($(BR2_PACKAGE_CLAPACK),y) +PYTHON_NUMPY_DEPENDENCIES += clapack +else +PYTHON_NUMPY_ENV += BLAS=None LAPACK=None +endif + +PYTHON_NUMPY_BUILD_OPTS = --fcompiler=None + +define PYTHON_NUMPY_CONFIGURE_CMDS + -rm -f $(@D)/site.cfg + echo "[DEFAULT]" >> $(@D)/site.cfg + echo "library_dirs = $(STAGING_DIR)/usr/lib" >> $(@D)/site.cfg + echo "include_dirs = $(STAGING_DIR)/usr/include" >> $(@D)/site.cfg +endef + +# Some package may include few headers from NumPy, so let's install it +# in the staging area. +PYTHON_NUMPY_INSTALL_STAGING = YES + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-oauthlib/Config.in b/package/python-oauthlib/Config.in new file mode 100644 index 00000000..65016c1d --- /dev/null +++ b/package/python-oauthlib/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_OAUTHLIB + bool "python-oauthlib" + help + A generic, spec-compliant, thorough implementation of the + OAuth request-signing logic. + + https://github.com/oauthlib/oauthlib diff --git a/package/python-oauthlib/python-oauthlib.hash b/package/python-oauthlib/python-oauthlib.hash new file mode 100644 index 00000000..2bf7f797 --- /dev/null +++ b/package/python-oauthlib/python-oauthlib.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/oauthlib/json +md5 43cb2b5bac983712ee55076b61181cc2 oauthlib-3.1.0.tar.gz +sha256 bee41cc35fcca6e988463cacc3bcb8a96224f470ca547e697b604cc697b2f889 oauthlib-3.1.0.tar.gz +# Locally computed sha256 checksums +sha256 3d1e12d8ac52c0b6c148af6d291f72400b8720ed16c0ac4a89868b6d14b1c939 LICENSE diff --git a/package/python-oauthlib/python-oauthlib.mk b/package/python-oauthlib/python-oauthlib.mk new file mode 100644 index 00000000..407abc76 --- /dev/null +++ b/package/python-oauthlib/python-oauthlib.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-oauthlib +# +################################################################################ + +PYTHON_OAUTHLIB_VERSION = 3.1.0 +PYTHON_OAUTHLIB_SOURCE = oauthlib-$(PYTHON_OAUTHLIB_VERSION).tar.gz +PYTHON_OAUTHLIB_SITE = https://files.pythonhosted.org/packages/fc/c7/829c73c64d3749da7811c06319458e47f3461944da9d98bb4df1cb1598c2 +PYTHON_OAUTHLIB_SETUP_TYPE = setuptools +PYTHON_OAUTHLIB_LICENSE = BSD-3-Clause +PYTHON_OAUTHLIB_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-opcua-asyncio/Config.in b/package/python-opcua-asyncio/Config.in new file mode 100644 index 00000000..3700e00e --- /dev/null +++ b/package/python-opcua-asyncio/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_PYTHON_OPCUA_ASYNCIO + bool "python-opcua-asyncio" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_AIOFILES # runtime + select BR2_PACKAGE_PYTHON_CRYPTOGRAPHY # runtime + select BR2_PACKAGE_PYTHON_DATEUTIL # runtime + select BR2_PACKAGE_PYTHON_LXML # runtime + select BR2_PACKAGE_PYTHON_PYTZ # runtime + help + opcua-asyncio is an asyncio-based asynchronous + OPC UA client based on python-opcua, removing + hacks for support of python < 3.6. + + https://github.com/FreeOpcUa/opcua-asyncio diff --git a/package/python-opcua-asyncio/python-opcua-asyncio.hash b/package/python-opcua-asyncio/python-opcua-asyncio.hash new file mode 100644 index 00000000..d8aee272 --- /dev/null +++ b/package/python-opcua-asyncio/python-opcua-asyncio.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 e5fab37a92162351fe40cab43df09db8a2e9f8b8a2a8f13ed680aa6f6d687ec3 opcua-asyncio-0.8.4.tar.gz +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 COPYING diff --git a/package/python-opcua-asyncio/python-opcua-asyncio.mk b/package/python-opcua-asyncio/python-opcua-asyncio.mk new file mode 100644 index 00000000..50b58103 --- /dev/null +++ b/package/python-opcua-asyncio/python-opcua-asyncio.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-opcua-asyncio +# +################################################################################ + +PYTHON_OPCUA_ASYNCIO_VERSION = 0.8.4 +PYTHON_OPCUA_ASYNCIO_SOURCE = opcua-asyncio-$(PYTHON_OPCUA_ASYNCIO_VERSION).tar.gz +PYTHON_OPCUA_ASYNCIO_SITE = $(call github,FreeOpcUa,opcua-asyncio,$(PYTHON_OPCUA_ASYNCIO_VERSION)) +PYTHON_OPCUA_ASYNCIO_SETUP_TYPE = setuptools +PYTHON_OPCUA_ASYNCIO_LICENSE = LGPL-3.0+ +PYTHON_OPCUA_ASYNCIO_LICENSE_FILES = COPYING + +$(eval $(python-package)) diff --git a/package/python-packaging/Config.in b/package/python-packaging/Config.in new file mode 100644 index 00000000..5a8135cd --- /dev/null +++ b/package/python-packaging/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_PACKAGING + bool "python-packaging" + select BR2_PACKAGE_PYTHON_PYPARSING # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + help + Core utilities for Python packages. + + https://github.com/pypa/packaging diff --git a/package/python-packaging/python-packaging.hash b/package/python-packaging/python-packaging.hash new file mode 100644 index 00000000..aafb16c1 --- /dev/null +++ b/package/python-packaging/python-packaging.hash @@ -0,0 +1,7 @@ +# md5, sha256 from https://pypi.org/pypi/packaging/json +md5 3208229da731c5d8e29d4d8941e75005 packaging-20.4.tar.gz +sha256 4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8 packaging-20.4.tar.gz +# Locally computed sha256 checksums +sha256 cad1ef5bd340d73e074ba614d26f7deaca5c7940c3d8c34852e65c4909686c48 LICENSE +sha256 0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594 LICENSE.APACHE +sha256 b70e7e9b742f1cc6f948b34c16aa39ffece94196364bc88ff0d2180f0028fac5 LICENSE.BSD diff --git a/package/python-packaging/python-packaging.mk b/package/python-packaging/python-packaging.mk new file mode 100644 index 00000000..62a9d68c --- /dev/null +++ b/package/python-packaging/python-packaging.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-packaging +# +################################################################################ + +PYTHON_PACKAGING_VERSION = 20.4 +PYTHON_PACKAGING_SOURCE = packaging-$(PYTHON_PACKAGING_VERSION).tar.gz +PYTHON_PACKAGING_SITE = https://files.pythonhosted.org/packages/55/fd/fc1aca9cf51ed2f2c11748fa797370027babd82f87829c7a8e6dbe720145 +PYTHON_PACKAGING_SETUP_TYPE = setuptools +PYTHON_PACKAGING_LICENSE = Apache-2.0 or BSD-2-Clause +PYTHON_PACKAGING_LICENSE_FILES = LICENSE LICENSE.APACHE LICENSE.BSD + +$(eval $(python-package)) diff --git a/package/python-paho-mqtt/Config.in b/package/python-paho-mqtt/Config.in new file mode 100644 index 00000000..79d8b331 --- /dev/null +++ b/package/python-paho-mqtt/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_PAHO_MQTT + bool "python-paho-mqtt" + help + The Paho Python Client provides a client class with support + for both MQTT v3.1 and v3.1.1 on Python 2.7 or 3.x. It also + provides some helper functions to make publishing messages + to an MQTT server very straightforward. + + https://pypi.python.org/pypi/paho-mqtt diff --git a/package/python-paho-mqtt/python-paho-mqtt.hash b/package/python-paho-mqtt/python-paho-mqtt.hash new file mode 100644 index 00000000..35afccce --- /dev/null +++ b/package/python-paho-mqtt/python-paho-mqtt.hash @@ -0,0 +1,6 @@ +# md5 from https://pypi.python.org/pypi/paho-mqtt/json, sha256 locally computed +md5 e3ac29cd5dc247a01083a2a8f3fddd08 paho-mqtt-1.4.0.tar.gz +sha256 e440a052b46d222e184be3be38676378722072fcd4dfd2c8f509fb861a7b0b79 paho-mqtt-1.4.0.tar.gz +sha256 76f13729e84e9222e543303df00f87d1b2c0995b6a505cd859a285667e44babb LICENSE.txt +sha256 e8cf7d54ea46c19aba793983889b7f7425e1ebfcaaccec764a7db091646e203c edl-v10 +sha256 3b9be6b894d0769de796e653571ff6cef494913c0ce78c35a97db939e7d9087c epl-v10 diff --git a/package/python-paho-mqtt/python-paho-mqtt.mk b/package/python-paho-mqtt/python-paho-mqtt.mk new file mode 100644 index 00000000..d192749e --- /dev/null +++ b/package/python-paho-mqtt/python-paho-mqtt.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-paho-mqtt +# +################################################################################ + +PYTHON_PAHO_MQTT_VERSION = 1.4.0 +PYTHON_PAHO_MQTT_SOURCE = paho-mqtt-$(PYTHON_PAHO_MQTT_VERSION).tar.gz +PYTHON_PAHO_MQTT_SITE = https://files.pythonhosted.org/packages/25/63/db25e62979c2a716a74950c9ed658dce431b5cb01fde29eb6cba9489a904 +PYTHON_PAHO_MQTT_LICENSE = EPL-1.0 or EDLv1.0 +PYTHON_PAHO_MQTT_LICENSE_FILES = LICENSE.txt edl-v10 epl-v10 +PYTHON_PAHO_MQTT_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-pam/0001-dealloc.patch b/package/python-pam/0001-dealloc.patch new file mode 100644 index 00000000..dd4f9610 --- /dev/null +++ b/package/python-pam/0001-dealloc.patch @@ -0,0 +1,25 @@ +[PATCH] fix two bugs in the PAM object deallocation + +Fixes https://bugzilla.redhat.com/show_bug.cgi?id=658955 + +Downloaded from: +http://pkgs.fedoraproject.org/cgit/PyPAM.git/plain/PyPAM-0.5.0-dealloc.patch + +Signed-off-by: Peter Korsgaard +diff -up PyPAM-0.5.0/PAMmodule.c.dealloc PyPAM-0.5.0/PAMmodule.c +--- PyPAM-0.5.0/PAMmodule.c.dealloc 2011-01-17 22:48:22.000000000 +0100 ++++ PyPAM-0.5.0/PAMmodule.c 2011-01-18 21:24:59.000000000 +0100 +@@ -538,10 +538,11 @@ static void PyPAM_dealloc(PyPAMObject *s + free(self->service); + free(self->user); + free(self->conv); +- pam_end(self->pamh, PAM_SUCCESS); ++ if (self->pamh) ++ pam_end(self->pamh, PAM_SUCCESS); + dlclose(self->dlh2); + dlclose(self->dlh1); +- PyMem_DEL(self); ++ PyObject_Del(self); + } + + static PyObject * PyPAM_getattr(PyPAMObject *self, char *name) diff --git a/package/python-pam/0002-nofree.patch b/package/python-pam/0002-nofree.patch new file mode 100644 index 00000000..7de88017 --- /dev/null +++ b/package/python-pam/0002-nofree.patch @@ -0,0 +1,68 @@ +[PATCH] deallocate the conversation response only in case of error + +Fixes https://bugzilla.redhat.com/show_bug.cgi?id=679714 + +Downloaded from: +http://pkgs.fedoraproject.org/cgit/PyPAM.git/plain/PyPAM-0.5.0-nofree.patch + +Signed-off-by: Peter Korsgaard +diff --git a/PAMmodule.c b/PAMmodule.c +index 03cb799..a7ff8a5 100644 +--- a/PAMmodule.c ++++ b/PAMmodule.c +@@ -24,8 +24,6 @@ typedef struct { + char *service; + char *user; + PyObject *callback; +- struct pam_response *response_data; +- int response_len; + PyObject *user_data; + void *dlh1, *dlh2; + } PyPAMObject; +@@ -54,15 +52,6 @@ static int PyPAM_conv(int num_msg, const struct pam_message **msg, + + Py_INCREF(self); + +- if (NULL != self->response_data) { +- for (int i = 0; i < self->response_len; i++) { +- free(self->response_data[0].resp); +- } +- free(self->response_data); +- self->response_data = NULL; +- self->response_len = 0; +- } +- + PyObject* msgList = PyList_New(num_msg); + + for (int i = 0; i < num_msg; i++) { +@@ -92,6 +81,10 @@ static int PyPAM_conv(int num_msg, const struct pam_message **msg, + char* resp_text; + int resp_retcode = 0; + if (!PyArg_ParseTuple(respTuple, "si", &resp_text, &resp_retcode)) { ++ while (i > 0) { ++ free((--spr)->resp); ++ --i; ++ } + free(*resp); + Py_DECREF(respList); + return PAM_CONV_ERR; +@@ -100,10 +93,6 @@ static int PyPAM_conv(int num_msg, const struct pam_message **msg, + spr->resp_retcode = resp_retcode; + Py_DECREF(respTuple); + } +- +- // Save this so we can free it later. +- self->response_data = *resp; +- self->response_len = PyList_Size(respList); + + Py_DECREF(respList); + +@@ -144,8 +133,6 @@ static PyObject * PyPAM_pam(PyObject *self, PyObject *args) + p->user = NULL; + Py_INCREF(Py_None); + p->callback = Py_None; +- p->response_data = NULL; +- p->response_len = 0; + Py_INCREF(Py_None); + p->user_data = Py_None; + diff --git a/package/python-pam/0003-memory-errors-CVE2012-1502.patch b/package/python-pam/0003-memory-errors-CVE2012-1502.patch new file mode 100644 index 00000000..62405db0 --- /dev/null +++ b/package/python-pam/0003-memory-errors-CVE2012-1502.patch @@ -0,0 +1,136 @@ +[PATCH] Fix Double Free Corruption (CVE2012-1502) + +Downloaded from: +http://pkgs.fedoraproject.org/cgit/PyPAM.git/plain/PyPAM-0.5.0-memory-errors.patch + +For details, see: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-1502 + +Signed-off-by: Peter Korsgaard +diff -up PyPAM-0.5.0/PAMmodule.c.memory PyPAM-0.5.0/PAMmodule.c +--- PyPAM-0.5.0/PAMmodule.c.memory 2012-05-07 17:22:54.503914026 +0200 ++++ PyPAM-0.5.0/PAMmodule.c 2012-05-07 17:23:15.644381942 +0200 +@@ -37,33 +37,48 @@ static void PyPAM_Err(PyPAMObject *self, + + err_msg = pam_strerror(self->pamh, result); + error = Py_BuildValue("(si)", err_msg, result); +- Py_INCREF(PyPAM_Error); + PyErr_SetObject(PyPAM_Error, error); ++ Py_XDECREF(error); + } + + static int PyPAM_conv(int num_msg, const struct pam_message **msg, + struct pam_response **resp, void *appdata_ptr) + { +- PyObject *args; +- ++ PyObject *args, *msgList, *respList, *item; ++ struct pam_response *response, *spr; + PyPAMObject* self = (PyPAMObject *) appdata_ptr; ++ + if (self->callback == NULL) + return PAM_CONV_ERR; + + Py_INCREF(self); + +- PyObject* msgList = PyList_New(num_msg); +- ++ msgList = PyList_New(num_msg); ++ if (msgList == NULL) { ++ Py_DECREF(self); ++ return PAM_CONV_ERR; ++ } ++ + for (int i = 0; i < num_msg; i++) { +- PyList_SetItem(msgList, i, +- Py_BuildValue("(si)", msg[i]->msg, msg[i]->msg_style)); ++ item = Py_BuildValue("(si)", msg[i]->msg, msg[i]->msg_style); ++ if (item == NULL) { ++ Py_DECREF(msgList); ++ Py_DECREF(self); ++ return PAM_CONV_ERR; ++ } ++ PyList_SetItem(msgList, i, item); + } +- ++ + args = Py_BuildValue("(OO)", self, msgList); +- PyObject* respList = PyEval_CallObject(self->callback, args); ++ if (args == NULL) { ++ Py_DECREF(self); ++ Py_DECREF(msgList); ++ return PAM_CONV_ERR; ++ } ++ respList = PyEval_CallObject(self->callback, args); + Py_DECREF(args); + Py_DECREF(self); +- ++ + if (respList == NULL) + return PAM_CONV_ERR; + +@@ -71,11 +86,15 @@ static int PyPAM_conv(int num_msg, const + Py_DECREF(respList); + return PAM_CONV_ERR; + } +- +- *resp = (struct pam_response *) malloc( ++ ++ response = (struct pam_response *) malloc( + PyList_Size(respList) * sizeof(struct pam_response)); ++ if (response == NULL) { ++ Py_DECREF(respList); ++ return PAM_CONV_ERR; ++ } ++ spr = response; + +- struct pam_response* spr = *resp; + for (int i = 0; i < PyList_Size(respList); i++, spr++) { + PyObject* respTuple = PyList_GetItem(respList, i); + char* resp_text; +@@ -85,7 +104,7 @@ static int PyPAM_conv(int num_msg, const + free((--spr)->resp); + --i; + } +- free(*resp); ++ free(response); + Py_DECREF(respList); + return PAM_CONV_ERR; + } +@@ -95,7 +114,8 @@ static int PyPAM_conv(int num_msg, const + } + + Py_DECREF(respList); +- ++ *resp = response; ++ + return PAM_SUCCESS; + } + +@@ -122,7 +142,11 @@ static PyObject * PyPAM_pam(PyObject *se + PyPAMObject_Type.ob_type = &PyType_Type; + p = (PyPAMObject *) PyObject_NEW(PyPAMObject, &PyPAMObject_Type); + ++ if (p == NULL) ++ return NULL; ++ + if ((spc = (struct pam_conv *) malloc(sizeof(struct pam_conv))) == NULL) { ++ Py_DECREF((PyObject *)p); + PyErr_SetString(PyExc_MemoryError, "out of memory"); + return NULL; + } +@@ -455,9 +479,15 @@ static PyObject * PyPAM_getenvlist(PyObj + } + + retval = PyList_New(0); ++ if (retval == NULL) ++ return NULL; + + while ((cp = *(result++)) != NULL) { + entry = Py_BuildValue("s", cp); ++ if (entry == NULL) { ++ Py_DECREF(retval); ++ return NULL; ++ } + PyList_Append(retval, entry); + Py_DECREF(entry); + } diff --git a/package/python-pam/Config.in b/package/python-pam/Config.in new file mode 100644 index 00000000..92ba105e --- /dev/null +++ b/package/python-pam/Config.in @@ -0,0 +1,16 @@ +comment "python-pam needs a toolchain w/ wchar, locale, dynamic library" + depends on BR2_PACKAGE_PYTHON + depends on !BR2_ENABLE_LOCALE || !BR2_USE_WCHAR || BR2_STATIC_LIBS + +config BR2_PACKAGE_PYTHON_PAM + bool "python-pam" + depends on BR2_PACKAGE_PYTHON # C extension not compatible with python3 + depends on BR2_ENABLE_LOCALE # linux-pam + depends on BR2_USE_WCHAR # linux-pam + depends on BR2_USE_MMU # linux-pam + depends on !BR2_STATIC_LIBS # linux-pam + select BR2_PACKAGE_LINUX_PAM + help + PAM (Pluggable Authentication Module) bindings for Python. + + https://admin.fedoraproject.org/pkgdb/package/PyPAM/ diff --git a/package/python-pam/python-pam.hash b/package/python-pam/python-pam.hash new file mode 100644 index 00000000..303455ae --- /dev/null +++ b/package/python-pam/python-pam.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 796ac019b9ee805696d0d277d8fb912fa2391b6ac070dc6f9f1a9a0fadbc3a5a PyPAM-0.5.0.tar.gz +sha256 ca0061fc1381a3ab242310e4b3f56389f28e3d460eb2fd822ed7a21c6f030532 COPYING diff --git a/package/python-pam/python-pam.mk b/package/python-pam/python-pam.mk new file mode 100644 index 00000000..943e01dd --- /dev/null +++ b/package/python-pam/python-pam.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-pam +# +################################################################################ + +PYTHON_PAM_VERSION = 0.5.0 +PYTHON_PAM_SOURCE = PyPAM-$(PYTHON_PAM_VERSION).tar.gz +# pangalactic.org gone +PYTHON_PAM_SITE = http://pkgs.fedoraproject.org/repo/pkgs/PyPAM/PyPAM-0.5.0.tar.gz/f1e7c2c56421dda28a75ace59a3c8871 +PYTHON_PAM_SETUP_TYPE = distutils +PYTHON_PAM_LICENSE = LGPL-2.1 +PYTHON_PAM_LICENSE_FILES = COPYING +PYTHON_PAM_DEPENDENCIES = linux-pam + +$(eval $(python-package)) diff --git a/package/python-paramiko/Config.in b/package/python-paramiko/Config.in new file mode 100644 index 00000000..993c84ef --- /dev/null +++ b/package/python-paramiko/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_PYTHON_PARAMIKO + bool "python-paramiko" + depends on BR2_INSTALL_LIBSTDCPP # python-cryptography + select BR2_PACKAGE_PYTHON_BCRYPT # runtime + select BR2_PACKAGE_PYTHON_CRYPTOGRAPHY # runtime + select BR2_PACKAGE_PYTHON_PYNACL # runtime + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 # runtime + help + SSH2 protocol library. + + https://github.com/paramiko/paramiko/ + +comment "python-paramiko needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/python-paramiko/python-paramiko.hash b/package/python-paramiko/python-paramiko.hash new file mode 100644 index 00000000..6054e8d4 --- /dev/null +++ b/package/python-paramiko/python-paramiko.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/paramiko/json +md5 bf8239dc820ca86dd3c3226f4281c35f paramiko-2.7.1.tar.gz +sha256 920492895db8013f6cc0179293147f830b8c7b21fdfc839b6bad760c27459d9f paramiko-2.7.1.tar.gz +# Locally computed sha256 checksums +sha256 5fa25bf5f395fd26e701c2e1de4ca7d162816986dc791c22f8f4226857ad1bb2 LICENSE diff --git a/package/python-paramiko/python-paramiko.mk b/package/python-paramiko/python-paramiko.mk new file mode 100644 index 00000000..6dc473d3 --- /dev/null +++ b/package/python-paramiko/python-paramiko.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-paramiko +# +################################################################################ + +PYTHON_PARAMIKO_VERSION = 2.7.1 +PYTHON_PARAMIKO_SOURCE = paramiko-$(PYTHON_PARAMIKO_VERSION).tar.gz +PYTHON_PARAMIKO_SITE = https://files.pythonhosted.org/packages/ac/15/4351003352e11300b9f44a13576bff52dcdc6e4a911129c07447bda0a358 +PYTHON_PARAMIKO_SETUP_TYPE = setuptools +PYTHON_PARAMIKO_LICENSE = LGPL-2.1+ +PYTHON_PARAMIKO_LICENSE_FILES = LICENSE +PYTHON_PARAMIKO_CPE_ID_VENDOR = paramiko +PYTHON_PARAMIKO_CPE_ID_PRODUCT = paramiko + +$(eval $(python-package)) diff --git a/package/python-parso/Config.in b/package/python-parso/Config.in new file mode 100644 index 00000000..ea1c5a47 --- /dev/null +++ b/package/python-parso/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_PARSO + bool "python-parso" + help + A Python Parser. + + https://github.com/davidhalter/parso diff --git a/package/python-parso/python-parso.hash b/package/python-parso/python-parso.hash new file mode 100644 index 00000000..ab2e2094 --- /dev/null +++ b/package/python-parso/python-parso.hash @@ -0,0 +1,7 @@ +# md5, sha256 from https://pypi.org/pypi/parso/json +md5 d3a892fb4d9a0ffed838b0a3416145bf parso-0.7.0.tar.gz +sha256 908e9fae2144a076d72ae4e25539143d40b8e3eafbaeae03c1bfe226f4cdf12c parso-0.7.0.tar.gz +# Locally computed sha256 checksums +sha256 fa67973073753d17624caf8684d5ee816d70c89d912c5bca7ca0f08e7b150edb LICENSE.txt +sha256 9c1e620a5cf8e74fe81c1fd4c55e9cc0b189fc04e677cfc7ef915de746c3f59e docs/_themes/flask/LICENSE +sha256 368780dd953e09148834e8d8c6cc1b09b3d621e77dbd1c4f5e8873561acda873 test/normalizer_issue_files/LICENSE diff --git a/package/python-parso/python-parso.mk b/package/python-parso/python-parso.mk new file mode 100644 index 00000000..b7688c20 --- /dev/null +++ b/package/python-parso/python-parso.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-parso +# +################################################################################ + +PYTHON_PARSO_VERSION = 0.7.0 +PYTHON_PARSO_SOURCE = parso-$(PYTHON_PARSO_VERSION).tar.gz +PYTHON_PARSO_SITE = https://files.pythonhosted.org/packages/fe/24/c30eb4be8a24b965cfd6e2e6b41180131789b44042112a16f9eb10c80f6e +PYTHON_PARSO_SETUP_TYPE = setuptools +PYTHON_PARSO_LICENSE = MIT, Python-2.0, BSD-3-Clause (flask theme) +PYTHON_PARSO_LICENSE_FILES = LICENSE.txt docs/_themes/flask/LICENSE test/normalizer_issue_files/LICENSE +PYTHON_PARSO_CPE_ID_VENDOR = parso_project +PYTHON_PARSO_CPE_ID_PRODUCT = parso + +$(eval $(python-package)) diff --git a/package/python-passlib/Config.in b/package/python-passlib/Config.in new file mode 100644 index 00000000..23546a18 --- /dev/null +++ b/package/python-passlib/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_PASSLIB + bool "python-passlib" + help + comprehensive password hashing framework supporting over 30 + schemes. + + https://bitbucket.org/ecollins/passlib diff --git a/package/python-passlib/python-passlib.hash b/package/python-passlib/python-passlib.hash new file mode 100644 index 00000000..867223e1 --- /dev/null +++ b/package/python-passlib/python-passlib.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/passlib/json +md5 b908529cfd4c33057c244324c692eae7 passlib-1.7.2.tar.gz +sha256 8d666cef936198bc2ab47ee9b0410c94adf2ba798e5a84bf220be079ae7ab6a8 passlib-1.7.2.tar.gz +# Locally computed sha256 checksums +sha256 49a74ad666f456493d6b9e2cda7c55e46ad512ce2c67db4accaddb27bb240bb9 LICENSE diff --git a/package/python-passlib/python-passlib.mk b/package/python-passlib/python-passlib.mk new file mode 100644 index 00000000..6ab94fd6 --- /dev/null +++ b/package/python-passlib/python-passlib.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-passlib +# +################################################################################ + +PYTHON_PASSLIB_VERSION = 1.7.2 +PYTHON_PASSLIB_SOURCE = passlib-$(PYTHON_PASSLIB_VERSION).tar.gz +PYTHON_PASSLIB_SITE = https://files.pythonhosted.org/packages/6d/6b/4bfca0c13506535289b58f9c9761d20f56ed89439bfe6b8e07416ce58ee1 +PYTHON_PASSLIB_SETUP_TYPE = setuptools +PYTHON_PASSLIB_LICENSE = BSD-3-Clause +PYTHON_PASSLIB_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-pathlib2/Config.in b/package/python-pathlib2/Config.in new file mode 100644 index 00000000..e28de4c1 --- /dev/null +++ b/package/python-pathlib2/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_PYTHON_PATHLIB2 + bool "python-pathlib2" + depends on BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON_SIX # runtime + help + Object-oriented filesystem paths. + + The goal of pathlib2 is to provide a backport of standard + pathlib module which tracks the standard library module, so + all the newest features of the standard pathlib can be used + also on older Python versions. + + https://pypi.python.org/pypi/pathlib2 diff --git a/package/python-pathlib2/python-pathlib2.hash b/package/python-pathlib2/python-pathlib2.hash new file mode 100644 index 00000000..986049d9 --- /dev/null +++ b/package/python-pathlib2/python-pathlib2.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pathlib2/json +md5 f2bd0a363eb0f8fa0556f35c1d9e66fb pathlib2-2.3.5.tar.gz +sha256 6cd9a47b597b37cc57de1c05e56fb1a1c9cc9fab04fe78c29acd090418529868 pathlib2-2.3.5.tar.gz +# Locally computed sha256 checksums +sha256 f8e02f1a07e4c6fc59a4bee831ddde26b97064105c423b9e24340f35aaa80262 LICENSE.rst diff --git a/package/python-pathlib2/python-pathlib2.mk b/package/python-pathlib2/python-pathlib2.mk new file mode 100644 index 00000000..d813b77d --- /dev/null +++ b/package/python-pathlib2/python-pathlib2.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pathlib2 +# +################################################################################ + +PYTHON_PATHLIB2_VERSION = 2.3.5 +PYTHON_PATHLIB2_SOURCE = pathlib2-$(PYTHON_PATHLIB2_VERSION).tar.gz +PYTHON_PATHLIB2_SITE = https://files.pythonhosted.org/packages/94/d8/65c86584e7e97ef824a1845c72bbe95d79f5b306364fa778a3c3e401b309 +PYTHON_PATHLIB2_LICENSE = MIT +PYTHON_PATHLIB2_LICENSE_FILES = LICENSE.rst +PYTHON_PATHLIB2_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-pathpy/Config.in b/package/python-pathpy/Config.in new file mode 100644 index 00000000..7c7ffc9e --- /dev/null +++ b/package/python-pathpy/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_PATHPY + bool "python-pathpy" + depends on BR2_PACKAGE_PYTHON3 + help + path.py implements a path objects as first-class + entities, allowing common operations on files to + be invoked on those path objects directly. + + https://github.com/jaraco/path.py diff --git a/package/python-pathpy/python-pathpy.hash b/package/python-pathpy/python-pathpy.hash new file mode 100644 index 00000000..4ff5abb3 --- /dev/null +++ b/package/python-pathpy/python-pathpy.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/path.py/json +md5 307098b1827af6031687edb49ce2c39c path.py-12.0.1.tar.gz +sha256 9f2169633403aa0423f6ec000e8701dd1819526c62465f5043952f92527fea0f path.py-12.0.1.tar.gz +# Locally computed sha256 checksums +sha256 a55e2ffe9b44998e621d51d8c094bed09acc4b5236ee73d7df395a33ba3c18fd LICENSE diff --git a/package/python-pathpy/python-pathpy.mk b/package/python-pathpy/python-pathpy.mk new file mode 100644 index 00000000..3b7388bd --- /dev/null +++ b/package/python-pathpy/python-pathpy.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-pathpy +# +################################################################################ + +PYTHON_PATHPY_VERSION = 12.0.1 +PYTHON_PATHPY_SOURCE = path.py-$(PYTHON_PATHPY_VERSION).tar.gz +PYTHON_PATHPY_SITE = https://files.pythonhosted.org/packages/70/63/c01c1bb2df17db4c78f78cc439a2800f55bec5445cabf1f3579a37909f41 +PYTHON_PATHPY_SETUP_TYPE = setuptools +PYTHON_PATHPY_LICENSE = MIT +PYTHON_PATHPY_LICENSE_FILES = LICENSE +PYTHON_PATHPY_DEPENDENCIES = host-python-setuptools-scm + +$(eval $(python-package)) diff --git a/package/python-pathtools/Config.in b/package/python-pathtools/Config.in new file mode 100644 index 00000000..63777bd3 --- /dev/null +++ b/package/python-pathtools/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_PATHTOOLS + bool "python-pathtools" + help + File system general utilities. + + http://github.com/gorakhargosh/pathtools diff --git a/package/python-pathtools/python-pathtools.hash b/package/python-pathtools/python-pathtools.hash new file mode 100644 index 00000000..6d7b2975 --- /dev/null +++ b/package/python-pathtools/python-pathtools.hash @@ -0,0 +1,6 @@ +# md5 from https://pypi.python.org/pypi/pathtools/json +md5 9a1af5c605768ea5804b03b734ff0f82 pathtools-0.1.2.tar.gz +# sha256 calculated by scanpypi +sha256 7c35c5421a39bb82e58018febd90e3b6e5db34c5443aaaf742b3f33d4655f1c0 pathtools-0.1.2.tar.gz +# Locally computed +sha256 b52d83fba08f61bd1e603fee1b44cbc7ead9fcb512a5ceb8c53fec90ba415ac4 LICENSE diff --git a/package/python-pathtools/python-pathtools.mk b/package/python-pathtools/python-pathtools.mk new file mode 100644 index 00000000..2b4a2711 --- /dev/null +++ b/package/python-pathtools/python-pathtools.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pathtools +# +################################################################################ + +PYTHON_PATHTOOLS_VERSION = 0.1.2 +PYTHON_PATHTOOLS_SOURCE = pathtools-$(PYTHON_PATHTOOLS_VERSION).tar.gz +PYTHON_PATHTOOLS_SITE = https://pypi.python.org/packages/e7/7f/470d6fcdf23f9f3518f6b0b76be9df16dcc8630ad409947f8be2eb0ed13a +PYTHON_PATHTOOLS_SETUP_TYPE = setuptools +PYTHON_PATHTOOLS_LICENSE = MIT +PYTHON_PATHTOOLS_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-pathvalidate/Config.in b/package/python-pathvalidate/Config.in new file mode 100644 index 00000000..8606696e --- /dev/null +++ b/package/python-pathvalidate/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_PATHVALIDATE + bool "python-pathvalidate" + help + pathvalidate is a python library to validate/sanitize a string + such as filename/variable-name. + + https://github.com/thombashi/pathvalidate diff --git a/package/python-pathvalidate/python-pathvalidate.hash b/package/python-pathvalidate/python-pathvalidate.hash new file mode 100644 index 00000000..db1190fc --- /dev/null +++ b/package/python-pathvalidate/python-pathvalidate.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pathvalidate/json +md5 b0a8242d124a9e760ca2d084a4f8fa75 pathvalidate-0.29.0.tar.gz +sha256 bf250828f40d94881df764950cffca14bb3fa83783d9f239125a6b5e23a5646e pathvalidate-0.29.0.tar.gz +# Locally computed sha256 checksums +sha256 a93d75bcb0774e2990106380cadad6dcb2de193c55d435ffc56ba345a08b1dc2 LICENSE diff --git a/package/python-pathvalidate/python-pathvalidate.mk b/package/python-pathvalidate/python-pathvalidate.mk new file mode 100644 index 00000000..ee707e4e --- /dev/null +++ b/package/python-pathvalidate/python-pathvalidate.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pathvalidate +# +################################################################################ + +PYTHON_PATHVALIDATE_VERSION = 0.29.0 +PYTHON_PATHVALIDATE_SOURCE = pathvalidate-$(PYTHON_PATHVALIDATE_VERSION).tar.gz +PYTHON_PATHVALIDATE_SITE = https://files.pythonhosted.org/packages/fc/3f/7a96e26d36b7e99abc9c236ff6db2de2d98e59fed45f9932eb0d17d48473 +PYTHON_PATHVALIDATE_SETUP_TYPE = setuptools +PYTHON_PATHVALIDATE_LICENSE = MIT +PYTHON_PATHVALIDATE_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-pbr/python-pbr.hash b/package/python-pbr/python-pbr.hash new file mode 100644 index 00000000..cca9de01 --- /dev/null +++ b/package/python-pbr/python-pbr.hash @@ -0,0 +1,6 @@ +# md5, sha256 from https://pypi.org/pypi/pbr/json +md5 477d2aa285ad97250a172b199f4060b7 pbr-5.4.3.tar.gz +sha256 2c8e420cd4ed4cec4e7999ee47409e876af575d4c35a45840d59e8b5f3155ab8 pbr-5.4.3.tar.gz +# Locally computed sha256 checksums +sha256 5df2a0d87d6c562f0ea11c688ac52532aa28d744cabc7994ff0537f64b3b3320 LICENSE +sha256 eb4a8c8791f6caab1cf36df26db2b6f4e2ddda52657b060ff7f02abc63910aef pbr/tests/testpackage/LICENSE.txt diff --git a/package/python-pbr/python-pbr.mk b/package/python-pbr/python-pbr.mk new file mode 100644 index 00000000..12b5b568 --- /dev/null +++ b/package/python-pbr/python-pbr.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pbr +# +################################################################################ + +PYTHON_PBR_VERSION = 5.4.3 +PYTHON_PBR_SOURCE = pbr-$(PYTHON_PBR_VERSION).tar.gz +PYTHON_PBR_SITE = https://files.pythonhosted.org/packages/99/f1/7807d3409c79905a907f1c616d910c921b2a8e73c17b2969930318f44777 +PYTHON_PBR_SETUP_TYPE = setuptools +PYTHON_PBR_LICENSE = Apache-2.0 (module), BSD-3-Clause (test package) +PYTHON_PBR_LICENSE_FILES = LICENSE pbr/tests/testpackage/LICENSE.txt + +$(eval $(host-python-package)) diff --git a/package/python-periphery/Config.in b/package/python-periphery/Config.in new file mode 100644 index 00000000..99585b0f --- /dev/null +++ b/package/python-periphery/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_PERIPHERY + bool "python-periphery" + help + A pure Python 2/3 library for peripheral I/O (GPIO, LED, + PWM, SPI, I2C, MMIO, Serial) in Linux. + + https://github.com/vsergeev/python-periphery diff --git a/package/python-periphery/python-periphery.hash b/package/python-periphery/python-periphery.hash new file mode 100644 index 00000000..13636d17 --- /dev/null +++ b/package/python-periphery/python-periphery.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 2c2482d026afc974ba5a966cd2c3a724ecf55e253223a9ea80fc98f77a3ca414 python-periphery-2.1.0.tar.gz +sha256 4a2ed465d05c7ec58bb5a8cd7d2475a2d423bb73cb9bc3e3565500c222d03dc8 LICENSE diff --git a/package/python-periphery/python-periphery.mk b/package/python-periphery/python-periphery.mk new file mode 100644 index 00000000..c322ded3 --- /dev/null +++ b/package/python-periphery/python-periphery.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-periphery +# +################################################################################ + +PYTHON_PERIPHERY_VERSION = 2.1.0 +PYTHON_PERIPHERY_SITE = $(call github,vsergeev,python-periphery,v$(PYTHON_PERIPHERY_VERSION)) +PYTHON_PERIPHERY_LICENSE = MIT +PYTHON_PERIPHERY_LICENSE_FILES = LICENSE +PYTHON_PERIPHERY_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-pexpect/Config.in b/package/python-pexpect/Config.in new file mode 100644 index 00000000..cee4606c --- /dev/null +++ b/package/python-pexpect/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PYTHON_PEXPECT + bool "python-pexpect" + select BR2_PACKAGE_PYTHON_PTYPROCESS # runtime + help + Pexpect is a pure Python module for spawning child + applications; controlling them; and responding to expected + patterns in their output. Pexpect works like Don Libes' + Expect. Pexpect allows your script to spawn a child + application and control it as if a human were typing + commands. + + https://pexpect.readthedocs.org diff --git a/package/python-pexpect/python-pexpect.hash b/package/python-pexpect/python-pexpect.hash new file mode 100644 index 00000000..87df05d8 --- /dev/null +++ b/package/python-pexpect/python-pexpect.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pexpect/json +md5 153eb25184249d6a85fde9acf4804085 pexpect-4.8.0.tar.gz +sha256 fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c pexpect-4.8.0.tar.gz +# Locally computed sha256 checksums +sha256 4a483ae1c4dc738a6c8b73feb49074e1835da02ab5aa686f2675029906fa364d LICENSE diff --git a/package/python-pexpect/python-pexpect.mk b/package/python-pexpect/python-pexpect.mk new file mode 100644 index 00000000..a9609cbe --- /dev/null +++ b/package/python-pexpect/python-pexpect.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# python-pexpect +# +################################################################################ + +PYTHON_PEXPECT_VERSION = 4.8.0 +PYTHON_PEXPECT_SOURCE = pexpect-$(PYTHON_PEXPECT_VERSION).tar.gz +PYTHON_PEXPECT_SITE = https://files.pythonhosted.org/packages/e5/9b/ff402e0e930e70467a7178abb7c128709a30dfb22d8777c043e501bc1b10 +PYTHON_PEXPECT_LICENSE = ISC +PYTHON_PEXPECT_LICENSE_FILES = LICENSE +PYTHON_PEXPECT_SETUP_TYPE = distutils + +# async.py is not usable with Python 2, and removing is the solution +# recommended by upstream: +# https://github.com/pexpect/pexpect/issues/290 +ifeq ($(BR2_PACKAGE_PYTHON),y) +define PYTHON_PEXPECT_REMOVE_ASYNC_PY + $(RM) $(@D)/pexpect/_async.py +endef +PYTHON_PEXPECT_POST_PATCH_HOOKS += PYTHON_PEXPECT_REMOVE_ASYNC_PY +endif + +$(eval $(python-package)) diff --git a/package/python-pickleshare/Config.in b/package/python-pickleshare/Config.in new file mode 100644 index 00000000..35a26637 --- /dev/null +++ b/package/python-pickleshare/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_PICKLESHARE + bool "python-pickleshare" + select BR2_PACKAGE_PYTHON_PATHLIB2 if BR2_PACKAGE_PYTHON # runtime + help + Tiny 'shelve'-like database with concurrency support + + https://pypi.python.org/pypi/pickleshare diff --git a/package/python-pickleshare/python-pickleshare.hash b/package/python-pickleshare/python-pickleshare.hash new file mode 100644 index 00000000..1b6afcc6 --- /dev/null +++ b/package/python-pickleshare/python-pickleshare.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pickleshare/json +md5 44ab782615894a812ab96669a122a634 pickleshare-0.7.5.tar.gz +sha256 87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca pickleshare-0.7.5.tar.gz +# Locally computed sha256 checksums +sha256 db1fefc1789444409514c0cae0bfab7f8e374ff9b78e092cecb1e0aeb6a36d90 LICENSE diff --git a/package/python-pickleshare/python-pickleshare.mk b/package/python-pickleshare/python-pickleshare.mk new file mode 100644 index 00000000..1ed1257d --- /dev/null +++ b/package/python-pickleshare/python-pickleshare.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pickleshare +# +################################################################################ + +PYTHON_PICKLESHARE_VERSION = 0.7.5 +PYTHON_PICKLESHARE_SOURCE = pickleshare-$(PYTHON_PICKLESHARE_VERSION).tar.gz +PYTHON_PICKLESHARE_SITE = https://files.pythonhosted.org/packages/d8/b6/df3c1c9b616e9c0edbc4fbab6ddd09df9535849c64ba51fcb6531c32d4d8 +PYTHON_PICKLESHARE_LICENSE = MIT +PYTHON_PICKLESHARE_LICENSE_FILES = LICENSE +PYTHON_PICKLESHARE_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-piexif/Config.in b/package/python-piexif/Config.in new file mode 100644 index 00000000..2f7eff80 --- /dev/null +++ b/package/python-piexif/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_PIEXIF + bool "python-piexif" + depends on BR2_PACKAGE_PYTHON3 + help + Piexif simplifies interacting with EXIF data in Python. It + includes the tools necessary for extracting, creating, + manipulating, converting and writing EXIF data to JPEG, WebP + and TIFF files. + + https://github.com/hMatoba/Piexif diff --git a/package/python-piexif/python-piexif.hash b/package/python-piexif/python-piexif.hash new file mode 100644 index 00000000..9663ed72 --- /dev/null +++ b/package/python-piexif/python-piexif.hash @@ -0,0 +1,3 @@ +# Locally computed sha256 checksums +sha256 abfd9a67795e23d7a76f9407d60841efa68c5d6e43376b295bb821a30602c569 python-piexif-1.1.3.tar.gz +sha256 d517a0940b8eb92ace7fc88f75892d84d260d85b3062d36d9e6445bc5091f697 LICENSE.txt diff --git a/package/python-piexif/python-piexif.mk b/package/python-piexif/python-piexif.mk new file mode 100644 index 00000000..2ab15cd3 --- /dev/null +++ b/package/python-piexif/python-piexif.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-piexif +# +################################################################################ + +PYTHON_PIEXIF_VERSION = 1.1.3 +PYTHON_PIEXIF_SITE = $(call github,hMatoba,Piexif,$(PYTHON_PIEXIF_VERSION)) +PYTHON_PIEXIF_LICENSE = MIT +PYTHON_PIEXIF_LICENSE_FILES = LICENSE.txt +PYTHON_PIEXIF_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-pigpio/Config.in b/package/python-pigpio/Config.in new file mode 100644 index 00000000..4c9152a6 --- /dev/null +++ b/package/python-pigpio/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_PIGPIO + bool "python-pigpio" + help + Pigpio is a Python module for the Raspberry Pi + which talks to the pigpio daemon to allow control + of the general purpose input outputs (GPIO). + + http://abyz.me.uk/rpi/pigpio/python.html diff --git a/package/python-pigpio/python-pigpio.hash b/package/python-pigpio/python-pigpio.hash new file mode 100644 index 00000000..7e02054b --- /dev/null +++ b/package/python-pigpio/python-pigpio.hash @@ -0,0 +1,3 @@ +# md5, sha256 from https://pypi.org/pypi/pigpio/json +md5 e05e3f5cb6c50f4b3eeb4ac50627507e pigpio-1.78.tar.gz +sha256 91efa50e4990649da97408a384782d6ccf58342fc59cdfe21ed7a42911569975 pigpio-1.78.tar.gz diff --git a/package/python-pigpio/python-pigpio.mk b/package/python-pigpio/python-pigpio.mk new file mode 100644 index 00000000..73e326cb --- /dev/null +++ b/package/python-pigpio/python-pigpio.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-pigpio +# +################################################################################ + +PYTHON_PIGPIO_VERSION = 1.78 +PYTHON_PIGPIO_SOURCE = pigpio-$(PYTHON_PIGPIO_VERSION).tar.gz +PYTHON_PIGPIO_SITE = https://files.pythonhosted.org/packages/a9/4a/3ebdfd90906553fb5420e80a475eb52f0809f2a29b547ba3b260db0cbc8f +PYTHON_PIGPIO_SETUP_TYPE = setuptools +PYTHON_PIGPIO_LICENSE = Unlicense + +$(eval $(python-package)) diff --git a/package/python-pillow/Config.in b/package/python-pillow/Config.in new file mode 100644 index 00000000..ae6d8c83 --- /dev/null +++ b/package/python-pillow/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_PYTHON_PILLOW + bool "python-pillow" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON3_PYEXPAT # runtime + select BR2_PACKAGE_PYTHON3_ZLIB + help + Pillow is the "friendly" PIL fork by Alex Clark and + Contributors. PIL is the Python Imaging Library by Fredrik + Lundh and Contributors. + + Pillow relies on external libraries to provide support + various image formats. Select the corresponding package(s) + to get this support. Pillow can use jpeg, zlib (for PNG), + tiff, freetype, webp, and openjpeg (JPEG-2000). + + https://pypi.python.org/pypi/Pillow/ diff --git a/package/python-pillow/python-pillow.hash b/package/python-pillow/python-pillow.hash new file mode 100644 index 00000000..d514bdfe --- /dev/null +++ b/package/python-pillow/python-pillow.hash @@ -0,0 +1,6 @@ +# md5, sha256 from https://pypi.org/pypi/pillow/json +md5 ee6e9a6c729ed9e9a78ccd3f6e9d7143 Pillow-9.4.0.tar.gz +sha256 a1c2d7780448eb93fbcc3789bf3916aa5720d942e37945f4056680317f1cd23e Pillow-9.4.0.tar.gz + +# Locally computed sha256 checksums +sha256 4e1755595052d843e2f350c930759f945ecf707bf812883948d181016b12dd0f LICENSE diff --git a/package/python-pillow/python-pillow.mk b/package/python-pillow/python-pillow.mk new file mode 100644 index 00000000..add05c0b --- /dev/null +++ b/package/python-pillow/python-pillow.mk @@ -0,0 +1,91 @@ +################################################################################ +# +# python-pillow +# +################################################################################ + +PYTHON_PILLOW_VERSION = 9.4.0 +PYTHON_PILLOW_SITE = https://files.pythonhosted.org/packages/bc/07/830784e061fb94d67649f3e438ff63cfb902dec6d48ac75aeaaac7c7c30e +#https://github.com/python-pillow/Pillow/archive/refs/tags/ +#https://files.pythonhosted.org/packages/21/23/af6bac2a601be6670064a817273d4190b79df6f74d8012926a39bc7aa77f +PYTHON_PILLOW_SOURCE = Pillow-$(PYTHON_PILLOW_VERSION).tar.gz +PYTHON_PILLOW_LICENSE = HPND +PYTHON_PILLOW_LICENSE_FILES = LICENSE +PYTHON_PILLOW_CPE_ID_VENDOR = python +PYTHON_PILLOW_CPE_ID_PRODUCT = pillow +PYTHON_PILLOW_SETUP_TYPE = setuptools +PYTHON_PILLOW_BUILD_OPTS = --disable-platform-guessing + +ifeq ($(BR2_PACKAGE_FREETYPE),y) +PYTHON_PILLOW_DEPENDENCIES += freetype +PYTHON_PILLOW_BUILD_OPTS += --enable-freetype +else +PYTHON_PILLOW_BUILD_OPTS += --disable-freetype +endif + +ifeq ($(BR2_PACKAGE_JPEG),y) +PYTHON_PILLOW_DEPENDENCIES += jpeg +PYTHON_PILLOW_BUILD_OPTS += --enable-jpeg +else +PYTHON_PILLOW_BUILD_OPTS += --disable-jpeg +endif + +ifeq ($(BR2_PACKAGE_LCMS2),y) +PYTHON_PILLOW_DEPENDENCIES += lcms2 +PYTHON_PILLOW_BUILD_OPTS += --enable-lcms +else +PYTHON_PILLOW_BUILD_OPTS += --disable-lcms +endif + +ifeq ($(BR2_PACKAGE_LIBXCB),y) +PYTHON_PILLOW_DEPENDENCIES += libxcb +PYTHON_PILLOW_BUILD_OPTS += --enable-xcb +else +PYTHON_PILLOW_BUILD_OPTS += --disable-xcb +endif + +ifeq ($(BR2_PACKAGE_OPENJPEG),y) +PYTHON_PILLOW_DEPENDENCIES += openjpeg +PYTHON_PILLOW_BUILD_OPTS += --enable-jpeg2000 +else +PYTHON_PILLOW_BUILD_OPTS += --disable-jpeg2000 +endif + +ifeq ($(BR2_PACKAGE_TIFF),y) +PYTHON_PILLOW_DEPENDENCIES += tiff +PYTHON_PILLOW_BUILD_OPTS += --enable-tiff +else +PYTHON_PILLOW_BUILD_OPTS += --disable-tiff +endif + +ifeq ($(BR2_PACKAGE_WEBP),y) +PYTHON_PILLOW_DEPENDENCIES += webp +PYTHON_PILLOW_BUILD_OPTS += --enable-webp +ifeq ($(BR2_PACKAGE_WEBP_DEMUX)$(BR2_PACKAGE_WEBP_MUX),yy) +PYTHON_PILLOW_BUILD_OPTS += --enable-webpmux +else +PYTHON_PILLOW_BUILD_OPTS += --disable-webpmux +endif +else +PYTHON_PILLOW_BUILD_OPTS += --disable-webp --disable-webpmux +endif + +define PYTHON_PILLOW_BUILD_CMDS + cd $(PYTHON_PILLOW_BUILDDIR); \ + PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 \ + $(PYTHON_PILLOW_BASE_ENV) $(PYTHON_PILLOW_ENV) \ + $(PYTHON_PILLOW_PYTHON_INTERPRETER) setup.py build_ext \ + $(PYTHON_PILLOW_BASE_BUILD_OPTS) $(PYTHON_PILLOW_BUILD_OPTS) +endef + +define PYTHON_PILLOW_INSTALL_TARGET_CMDS + cd $(PYTHON_PILLOW_BUILDDIR); \ + PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 \ + $(PYTHON_PILLOW_BASE_ENV) $(PYTHON_PILLOW_ENV) \ + $(PYTHON_PILLOW_PYTHON_INTERPRETER) setup.py build_ext \ + $(PYTHON_PILLOW_BUILD_OPTS) install \ + $(PYTHON_PILLOW_BASE_INSTALL_TARGET_OPTS) \ + $(PYTHON_PILLOW_INSTALL_TARGET_OPTS) +endef + +$(eval $(python-package)) diff --git a/package/python-pip/Config.in b/package/python-pip/Config.in new file mode 100644 index 00000000..61d8d7d3 --- /dev/null +++ b/package/python-pip/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_PIP + bool "python-pip" + select BR2_PACKAGE_PYTHON_HASHLIB if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON_SETUPTOOLS # runtime + select BR2_PACKAGE_PYTHON_SSL if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_SSL if BR2_PACKAGE_PYTHON3 # runtime + help + The PyPA recommended tool for installing Python packages. + + https://pip.pypa.io/ diff --git a/package/python-pip/python-pip.hash b/package/python-pip/python-pip.hash new file mode 100644 index 00000000..58bc2391 --- /dev/null +++ b/package/python-pip/python-pip.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pip/json +md5 7d42ba49b809604f0df3d55df1c3fd86 pip-20.0.2.tar.gz +sha256 7db0c8ea4c7ea51c8049640e8e6e7fde949de672bfa4949920675563a5a6967f pip-20.0.2.tar.gz +# Locally computed sha256 checksums +sha256 5ba21fbb0964f936ad7d15362d1ed6d4931cc8c8f9ff2d4d91190e109be74431 LICENSE.txt diff --git a/package/python-pip/python-pip.mk b/package/python-pip/python-pip.mk new file mode 100644 index 00000000..f881a3ce --- /dev/null +++ b/package/python-pip/python-pip.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-pip +# +################################################################################ + +PYTHON_PIP_VERSION = 20.0.2 +PYTHON_PIP_SOURCE = pip-$(PYTHON_PIP_VERSION).tar.gz +PYTHON_PIP_SITE = https://files.pythonhosted.org/packages/8e/76/66066b7bc71817238924c7e4b448abdb17eb0c92d645769c223f9ace478f +PYTHON_PIP_SETUP_TYPE = setuptools +PYTHON_PIP_LICENSE = MIT +PYTHON_PIP_LICENSE_FILES = LICENSE.txt +PYTHON_PIP_CPE_ID_VENDOR = pypa +PYTHON_PIP_CPE_ID_PRODUCT = pip + +$(eval $(python-package)) diff --git a/package/python-pluggy/Config.in b/package/python-pluggy/Config.in new file mode 100644 index 00000000..7179bc42 --- /dev/null +++ b/package/python-pluggy/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_PLUGGY + bool "python-pluggy" + depends on BR2_PACKAGE_PYTHON3 + help + plugin and hook calling mechanisms for python. + + https://github.com/pytest-dev/pluggy diff --git a/package/python-pluggy/python-pluggy.hash b/package/python-pluggy/python-pluggy.hash new file mode 100644 index 00000000..24e207bf --- /dev/null +++ b/package/python-pluggy/python-pluggy.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pluggy/json +md5 7f610e28b8b34487336b585a3dfb803d pluggy-0.13.1.tar.gz +sha256 15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0 pluggy-0.13.1.tar.gz +# Locally computed sha256 checksums +sha256 d6b65e6c213a5d0b577911d34d6e5949b9f59d76c238c5071a2f3fc16cfb2606 LICENSE diff --git a/package/python-pluggy/python-pluggy.mk b/package/python-pluggy/python-pluggy.mk new file mode 100644 index 00000000..03cdecf4 --- /dev/null +++ b/package/python-pluggy/python-pluggy.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-pluggy +# +################################################################################ + +PYTHON_PLUGGY_VERSION = 0.13.1 +PYTHON_PLUGGY_SOURCE = pluggy-$(PYTHON_PLUGGY_VERSION).tar.gz +PYTHON_PLUGGY_SITE = https://files.pythonhosted.org/packages/f8/04/7a8542bed4b16a65c2714bf76cf5a0b026157da7f75e87cc88774aa10b14 +PYTHON_PLUGGY_SETUP_TYPE = setuptools +PYTHON_PLUGGY_LICENSE = MIT +PYTHON_PLUGGY_LICENSE_FILES = LICENSE +PYTHON_PLUGGY_DEPENDENCIES = host-python-setuptools-scm + +$(eval $(python-package)) diff --git a/package/python-ply/Config.in b/package/python-ply/Config.in new file mode 100644 index 00000000..d6d265ad --- /dev/null +++ b/package/python-ply/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_PLY + bool "python-ply" + help + Python Lex & Yacc. + + http://www.dabeaz.com/ply/ diff --git a/package/python-ply/python-ply.hash b/package/python-ply/python-ply.hash new file mode 100644 index 00000000..1eba3b0f --- /dev/null +++ b/package/python-ply/python-ply.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/ply/json +md5 6465f602e656455affcd7c5734c638f8 ply-3.11.tar.gz +sha256 00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3 ply-3.11.tar.gz +# Locally computed sha256 checksums +sha256 1095b93b81d2043c5c55e0859875b416f75edb6d5eccb4bf2ace1b5445d1c84f README.md diff --git a/package/python-ply/python-ply.mk b/package/python-ply/python-ply.mk new file mode 100644 index 00000000..50a3e32b --- /dev/null +++ b/package/python-ply/python-ply.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-ply +# +################################################################################ + +# Please keep in sync with package/python3-ply/python3-ply.mk +PYTHON_PLY_VERSION = 3.11 +PYTHON_PLY_SOURCE = ply-$(PYTHON_PLY_VERSION).tar.gz +PYTHON_PLY_SITE = https://files.pythonhosted.org/packages/e5/69/882ee5c9d017149285cab114ebeab373308ef0f874fcdac9beb90e0ac4da +PYTHON_PLY_SETUP_TYPE = setuptools +PYTHON_PLY_LICENSE = BSD-3-Clause +PYTHON_PLY_LICENSE_FILES = README.md + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-portend/Config.in b/package/python-portend/Config.in new file mode 100644 index 00000000..30a50c7f --- /dev/null +++ b/package/python-portend/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_PORTEND + bool "python-portend" + depends on BR2_PACKAGE_PYTHON3 # python-tempora + select BR2_PACKAGE_PYTHON_TEMPORA # runtime + help + TCP port monitoring utilities. + + https://github.com/jaraco/portend diff --git a/package/python-portend/python-portend.hash b/package/python-portend/python-portend.hash new file mode 100644 index 00000000..14338df0 --- /dev/null +++ b/package/python-portend/python-portend.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/portend/json +md5 0ab51a12b7462a5275946a3645a71e92 portend-2.5.tar.gz +sha256 19dc27bfb3c72471bd30a235a4d5fbefef8a7e31cab367744b5d87a205e7bfd9 portend-2.5.tar.gz +# Locally computed sha256 checksums +sha256 a55e2ffe9b44998e621d51d8c094bed09acc4b5236ee73d7df395a33ba3c18fd LICENSE diff --git a/package/python-portend/python-portend.mk b/package/python-portend/python-portend.mk new file mode 100644 index 00000000..8d619052 --- /dev/null +++ b/package/python-portend/python-portend.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-portend +# +################################################################################ + +PYTHON_PORTEND_VERSION = 2.5 +PYTHON_PORTEND_SOURCE = portend-$(PYTHON_PORTEND_VERSION).tar.gz +PYTHON_PORTEND_SITE = https://files.pythonhosted.org/packages/2c/59/948666fc2455ae471efd40cb2a9a990f5f6f2354a9a6b228e29b9fb4a307 +PYTHON_PORTEND_LICENSE = MIT +PYTHON_PORTEND_LICENSE_FILES = LICENSE +PYTHON_PORTEND_SETUP_TYPE = setuptools +PYTHON_PORTEND_DEPENDENCIES = host-python-setuptools-scm + +$(eval $(python-package)) diff --git a/package/python-posix-ipc/Config.in b/package/python-posix-ipc/Config.in new file mode 100644 index 00000000..2c626786 --- /dev/null +++ b/package/python-posix-ipc/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_PYTHON_POSIX_IPC + bool "python-posix-ipc" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + The Python extension module posix_ipc gives access to POSIX + inter-process semaphores, shared memory and message queues + on systems that support the POSIX Realtime Extensions + a.k.a. POSIX 1003.1b-1993. + + http://semanchuk.com/philip/posix_ipc/ + +comment "python-posix-ipc needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/python-posix-ipc/python-posix-ipc.hash b/package/python-posix-ipc/python-posix-ipc.hash new file mode 100644 index 00000000..d267cabc --- /dev/null +++ b/package/python-posix-ipc/python-posix-ipc.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/posix-ipc/json +md5 c4fd0065244ccb2f59cb8ceedf287cf6 posix_ipc-1.0.4.tar.gz +sha256 ff6c9077633fc62a491d6997c43b094d885bb45a7ca1f36c9a0d647c54b74b14 posix_ipc-1.0.4.tar.gz +# Locally computed sha256 checksums +sha256 61f0669e70518e6d32f87e485965fe9309de60e4bef938b29cecd068b3db9a98 LICENSE diff --git a/package/python-posix-ipc/python-posix-ipc.mk b/package/python-posix-ipc/python-posix-ipc.mk new file mode 100644 index 00000000..d4429f11 --- /dev/null +++ b/package/python-posix-ipc/python-posix-ipc.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-posix-ipc +# +################################################################################ + +PYTHON_POSIX_IPC_VERSION = 1.0.4 +PYTHON_POSIX_IPC_SOURCE = posix_ipc-$(PYTHON_POSIX_IPC_VERSION).tar.gz +PYTHON_POSIX_IPC_SITE = https://files.pythonhosted.org/packages/c9/3e/54217da71aa26b488295d878df4d3132093253b4ae5798ac66fcb6921ef0 +PYTHON_POSIX_IPC_LICENSE = BSD-3-Clause +PYTHON_POSIX_IPC_LICENSE_FILES = LICENSE +PYTHON_POSIX_IPC_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-priority/Config.in b/package/python-priority/Config.in new file mode 100644 index 00000000..b73b7e2a --- /dev/null +++ b/package/python-priority/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_PRIORITY + bool "python-priority" + help + A pure-Python implementation of the HTTP/2 priority tree. + + http://python-hyper.org/priority/ diff --git a/package/python-priority/python-priority.hash b/package/python-priority/python-priority.hash new file mode 100644 index 00000000..c9473757 --- /dev/null +++ b/package/python-priority/python-priority.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/priority/json +md5 4f1ff52f7fa448e9d9cb46337ae86d1e priority-1.3.0.tar.gz +# Locally computed +sha256 6bc1961a6d7fcacbfc337769f1a382c8e746566aaa365e78047abe9f66b2ffbe priority-1.3.0.tar.gz +sha256 f3e9c29e3db36dc305a4be68a8a225f93949852ce2d19b5b0a3c099eee6509c5 LICENSE diff --git a/package/python-priority/python-priority.mk b/package/python-priority/python-priority.mk new file mode 100644 index 00000000..8b6dbc1e --- /dev/null +++ b/package/python-priority/python-priority.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-priority +# +################################################################################ + +PYTHON_PRIORITY_VERSION = 1.3.0 +PYTHON_PRIORITY_SOURCE = priority-$(PYTHON_PRIORITY_VERSION).tar.gz +PYTHON_PRIORITY_SITE = https://pypi.python.org/packages/ba/96/7d0b024087062418dfe02a68cd6b195399266ac002fb517aad94cc93e076 +PYTHON_PRIORITY_SETUP_TYPE = setuptools +PYTHON_PRIORITY_LICENSE = MIT +PYTHON_PRIORITY_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-prompt-toolkit/Config.in b/package/python-prompt-toolkit/Config.in new file mode 100644 index 00000000..1066e166 --- /dev/null +++ b/package/python-prompt-toolkit/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PYTHON_PROMPT_TOOLKIT + bool "python-prompt-toolkit" + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON_WCWIDTH # runtime + select BR2_PACKAGE_PYTHON_PYEXPAT if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_PYEXPAT if BR2_PACKAGE_PYTHON3 # runtime + help + Library for building powerful interactive command lines in + Python. + + https://github.com/jonathanslenders/python-prompt-toolkit diff --git a/package/python-prompt-toolkit/python-prompt-toolkit.hash b/package/python-prompt-toolkit/python-prompt-toolkit.hash new file mode 100644 index 00000000..2d0c7ec9 --- /dev/null +++ b/package/python-prompt-toolkit/python-prompt-toolkit.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/prompt-toolkit/json +md5 5016c523e603cd7119644fbc0f00ce53 prompt_toolkit-2.0.10.tar.gz +sha256 f15af68f66e664eaa559d4ac8a928111eebd5feda0c11738b5998045224829db prompt_toolkit-2.0.10.tar.gz +# Locally computed sha256 checksums +sha256 303574d9bdd85c757d6025017942bf17baeedf2778f62bd7f425d07d880f4c4a LICENSE diff --git a/package/python-prompt-toolkit/python-prompt-toolkit.mk b/package/python-prompt-toolkit/python-prompt-toolkit.mk new file mode 100644 index 00000000..183c7d25 --- /dev/null +++ b/package/python-prompt-toolkit/python-prompt-toolkit.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-prompt-toolkit +# +################################################################################ + +PYTHON_PROMPT_TOOLKIT_VERSION = 2.0.10 +PYTHON_PROMPT_TOOLKIT_SOURCE = prompt_toolkit-$(PYTHON_PROMPT_TOOLKIT_VERSION).tar.gz +PYTHON_PROMPT_TOOLKIT_SITE = https://files.pythonhosted.org/packages/0c/37/7ad3bf3c6dbe96facf9927ddf066fdafa0f86766237cff32c3c7355d3b7c +PYTHON_PROMPT_TOOLKIT_SETUP_TYPE = setuptools +PYTHON_PROMPT_TOOLKIT_LICENSE = BSD-3-Clause +PYTHON_PROMPT_TOOLKIT_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-protobuf/Config.in b/package/python-protobuf/Config.in new file mode 100644 index 00000000..1af82112 --- /dev/null +++ b/package/python-protobuf/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_PYTHON_PROTOBUF + bool "python-protobuf" + # host-protobuf only builds on certain architectures + depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86" + select BR2_PACKAGE_PYTHON_SIX # runtime + help + Python implementation of the Google Protocol Buffers. + + Protocol buffers are Google's language-neutral, + platform-neutral, extensible mechanism for serializing + structured data. + + https://developers.google.com/protocol-buffers diff --git a/package/python-protobuf/python-protobuf.hash b/package/python-protobuf/python-protobuf.hash new file mode 100644 index 00000000..c8762b54 --- /dev/null +++ b/package/python-protobuf/python-protobuf.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 969019c5fd9c1345f0b34afa06ab2664c1441d159d5ae87ded5fa01d79f028c1 protobuf-python-3.14.0.tar.gz +sha256 6e5e117324afd944dcf67f36cf329843bc1a92229a8cd9bb573d7a83130fea7d LICENSE diff --git a/package/python-protobuf/python-protobuf.mk b/package/python-protobuf/python-protobuf.mk new file mode 100644 index 00000000..b91ba493 --- /dev/null +++ b/package/python-protobuf/python-protobuf.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-protobuf +# +################################################################################ + +PYTHON_PROTOBUF_VERSION = $(PROTOBUF_VERSION) +PYTHON_PROTOBUF_SOURCE = protobuf-python-$(PYTHON_PROTOBUF_VERSION).tar.gz +PYTHON_PROTOBUF_SITE = $(PROTOBUF_SITE) +PYTHON_PROTOBUF_LICENSE = BSD-3-Clause +PYTHON_PROTOBUF_LICENSE_FILES = LICENSE +PYTHON_PROTOBUF_DEPENDENCIES = host-protobuf +PYTHON_PROTOBUF_SETUP_TYPE = setuptools +PYTHON_PROTOBUF_SUBDIR = python + +$(eval $(python-package)) diff --git a/package/python-psutil/Config.in b/package/python-psutil/Config.in new file mode 100644 index 00000000..c64eeeed --- /dev/null +++ b/package/python-psutil/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_PSUTIL + bool "python-psutil" + help + psutil is a cross-platform library for retrieving + information on running processes and system utilization + (CPU, memory, disks, network) in Python. + + https://pypi.python.org/pypi/psutil diff --git a/package/python-psutil/python-psutil.hash b/package/python-psutil/python-psutil.hash new file mode 100644 index 00000000..1a053cc3 --- /dev/null +++ b/package/python-psutil/python-psutil.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/psutil/json +md5 50bf39b4faa268ba1da8a9730bb38bb6 psutil-5.7.2.tar.gz +sha256 90990af1c3c67195c44c9a889184f84f5b2320dce3ee3acbd054e3ba0b4a7beb psutil-5.7.2.tar.gz +# Locally computed sha256 checksums +sha256 24c12984500caa07ffdce19eebc06396c5e6d244b573bc6c438f4a6ef8e56c1b LICENSE diff --git a/package/python-psutil/python-psutil.mk b/package/python-psutil/python-psutil.mk new file mode 100644 index 00000000..9dbc4722 --- /dev/null +++ b/package/python-psutil/python-psutil.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# python-psutil +# +################################################################################ + +# Please keep in sync with package/python3-psutil/python3-psutil.mk +PYTHON_PSUTIL_VERSION = 5.7.2 +PYTHON_PSUTIL_SOURCE = psutil-$(PYTHON_PSUTIL_VERSION).tar.gz +PYTHON_PSUTIL_SITE = https://files.pythonhosted.org/packages/aa/3e/d18f2c04cf2b528e18515999b0c8e698c136db78f62df34eee89cee205f1 +PYTHON_PSUTIL_SETUP_TYPE = setuptools +PYTHON_PSUTIL_LICENSE = BSD-3-Clause +PYTHON_PSUTIL_LICENSE_FILES = LICENSE +PYTHON_PSUTIL_CPE_ID_VENDOR = psutil_project +PYTHON_PSUTIL_CPE_ID_PRODUCT = psutil + +$(eval $(python-package)) diff --git a/package/python-psycopg2/Config.in b/package/python-psycopg2/Config.in new file mode 100644 index 00000000..5ffe1795 --- /dev/null +++ b/package/python-psycopg2/Config.in @@ -0,0 +1,25 @@ +config BR2_PACKAGE_PYTHON_PSYCOPG2 + bool "python-psycopg2" + depends on BR2_USE_WCHAR # postgresql + select BR2_PACKAGE_POSTGRESQL + help + Psycopg is the most popular PostgreSQL database adapter for + the Python programming language. Its main features are the + complete implementation of the Python DB API 2.0 specification + and the thread safety (several threads can share the same + connection). It was designed for heavily multi-threaded + applications that create and destroy lots of cursors and make + a large number of concurrent INSERTs or UPDATEs. + + Psycopg 2 is mostly implemented in C as a libpq wrapper, + resulting in being both efficient and secure. It features + client-side and server-side cursors, asynchronous + communication and notifications, COPY support. Many Python + types are supported out-of-the-box and adapted to matching + PostgreSQL data types; adaptation can be extended and + customized thanks to a flexible objects adaptation system. + Psycopg 2 is both Unicode and Python 3 friendly. + + http://initd.org/psycopg/ +comment "python-psycopg2 needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR diff --git a/package/python-psycopg2/python-psycopg2.hash b/package/python-psycopg2/python-psycopg2.hash new file mode 100644 index 00000000..bf73f8ad --- /dev/null +++ b/package/python-psycopg2/python-psycopg2.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/psycopg2/json +md5 c232ff3e3bfee35e1a0e15bc089cb294 psycopg2-2.8.5.tar.gz +sha256 f7d46240f7a1ae1dd95aab38bd74f7428d46531f69219954266d669da60c0818 psycopg2-2.8.5.tar.gz +# Locally computed sha256 checksums +sha256 9614b85dfc9a72c5b2ca33144c1d7e1ed3b1c297459d9fb28a6a5762c2e8d71b LICENSE diff --git a/package/python-psycopg2/python-psycopg2.mk b/package/python-psycopg2/python-psycopg2.mk new file mode 100644 index 00000000..b6f1f6ab --- /dev/null +++ b/package/python-psycopg2/python-psycopg2.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# python-psycopg2 +# +################################################################################ + +PYTHON_PSYCOPG2_VERSION = 2.8.5 +PYTHON_PSYCOPG2_SOURCE = psycopg2-$(PYTHON_PSYCOPG2_VERSION).tar.gz +PYTHON_PSYCOPG2_SITE = https://files.pythonhosted.org/packages/a8/8f/1c5690eebf148d1d1554fc00ccf9101e134636553dbb75bdfef4f85d7647 +PYTHON_PSYCOPG2_SETUP_TYPE = setuptools +PYTHON_PSYCOPG2_LICENSE = LGPL-3.0+ +PYTHON_PSYCOPG2_LICENSE_FILES = LICENSE +PYTHON_PSYCOPG2_DEPENDENCIES = postgresql +# Force psycopg2 to use the Buildroot provided postgresql version +# instead of the one from the host machine +PYTHON_PSYCOPG2_BUILD_OPTS = build_ext --pg-config=$(STAGING_DIR)/usr/bin/pg_config +PYTHON_PSYCOPG2_INSTALL_TARGET_OPTS = build_ext --pg-config=$(STAGING_DIR)/usr/bin/pg_config + +$(eval $(python-package)) diff --git a/package/python-ptyprocess/Config.in b/package/python-ptyprocess/Config.in new file mode 100644 index 00000000..b95dacbd --- /dev/null +++ b/package/python-ptyprocess/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_PTYPROCESS + bool "python-ptyprocess" + help + Launch a subprocess in a pseudo terminal (pty), and interact + with both the process and its pty. + + https://github.com/pexpect/ptyprocess diff --git a/package/python-ptyprocess/python-ptyprocess.hash b/package/python-ptyprocess/python-ptyprocess.hash new file mode 100644 index 00000000..3af431a7 --- /dev/null +++ b/package/python-ptyprocess/python-ptyprocess.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/ptyprocess/json +md5 37402d69f3b50913d4d483587bffad8f ptyprocess-0.6.0.tar.gz +sha256 923f299cc5ad920c68f2bc0bc98b75b9f838b93b599941a6b63ddbc2476394c0 ptyprocess-0.6.0.tar.gz +# Locally computed sha256 checksums +sha256 c822d385b1a73329846241799becf18690b5d44764c1bed69300b536a405030a LICENSE diff --git a/package/python-ptyprocess/python-ptyprocess.mk b/package/python-ptyprocess/python-ptyprocess.mk new file mode 100644 index 00000000..45102e9a --- /dev/null +++ b/package/python-ptyprocess/python-ptyprocess.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-ptyprocess +# +################################################################################ + +PYTHON_PTYPROCESS_VERSION = 0.6.0 +PYTHON_PTYPROCESS_SITE = https://files.pythonhosted.org/packages/7d/2d/e4b8733cf79b7309d84c9081a4ab558c89d8c89da5961bf4ddb050ca1ce0 +PYTHON_PTYPROCESS_SOURCE = ptyprocess-$(PYTHON_PTYPROCESS_VERSION).tar.gz +PYTHON_PTYPROCESS_LICENSE = ISC +PYTHON_PTYPROCESS_LICENSE_FILES = LICENSE +PYTHON_PTYPROCESS_SETUP_TYPE = distutils + +$(eval $(python-package)) diff --git a/package/python-pudb/Config.in b/package/python-pudb/Config.in new file mode 100644 index 00000000..b3a93058 --- /dev/null +++ b/package/python-pudb/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PYTHON_PUDB + bool "python-pudb" + depends on BR2_PACKAGE_PYTHON3 # pygments + select BR2_PACKAGE_PYTHON_URWID # runtime + select BR2_PACKAGE_PYTHON_PYGMENTS # runtime + select BR2_PACKAGE_PYTHON_SETUPTOOLS # runtime + select BR2_PACKAGE_PYTHON3_CURSES # runtime + help + A full-screen, console-based Python debugger. + + https://github.com/inducer/pudb diff --git a/package/python-pudb/python-pudb.hash b/package/python-pudb/python-pudb.hash new file mode 100644 index 00000000..b3c089b8 --- /dev/null +++ b/package/python-pudb/python-pudb.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pudb/json +md5 4c024311d3f53bc189084821e7ef7d5e pudb-2019.1.tar.gz +sha256 ac30cfc64580958ab7265decb4cabb9141f08781ff072e9a336d5a7942ce35a6 pudb-2019.1.tar.gz +# Locally computed sha256 checksums +sha256 a95343fffff49cde3d9bf33cf6bb71cb3bf0ed83f47d98a7ba04b175d29c79ab LICENSE diff --git a/package/python-pudb/python-pudb.mk b/package/python-pudb/python-pudb.mk new file mode 100644 index 00000000..6a462bf3 --- /dev/null +++ b/package/python-pudb/python-pudb.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pudb +# +################################################################################ + +PYTHON_PUDB_VERSION = 2019.1 +PYTHON_PUDB_SOURCE = pudb-$(PYTHON_PUDB_VERSION).tar.gz +PYTHON_PUDB_SITE = https://files.pythonhosted.org/packages/32/2a/96f72649e5dfc90cf69d8590c00884c6897d6cbc54f727fb40f47b4faae3 +PYTHON_PUDB_SETUP_TYPE = setuptools +PYTHON_PUDB_LICENSE = MIT +PYTHON_PUDB_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-py/Config.in b/package/python-py/Config.in new file mode 100644 index 00000000..354372f5 --- /dev/null +++ b/package/python-py/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_PY + bool "python-py" + help + library with cross-python path, ini-parsing, io, code, log + facilities. + + http://py.readthedocs.io/ diff --git a/package/python-py/python-py.hash b/package/python-py/python-py.hash new file mode 100644 index 00000000..2d9928f3 --- /dev/null +++ b/package/python-py/python-py.hash @@ -0,0 +1,6 @@ +# md5, sha256 from https://pypi.org/pypi/py/json +md5 5f108bfe00d5468cbdb8071051f86a55 py-1.10.0.tar.gz +sha256 21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3 py-1.10.0.tar.gz +# Locally computed sha256 checksums +sha256 2af680c39ef493fb82830356d1d3df1acb5a06033cba2dec7a19e21caa77a866 LICENSE +sha256 2af680c39ef493fb82830356d1d3df1acb5a06033cba2dec7a19e21caa77a866 py/_vendored_packages/iniconfig-1.1.1.dist-info/LICENSE diff --git a/package/python-py/python-py.mk b/package/python-py/python-py.mk new file mode 100644 index 00000000..d8cb6fa5 --- /dev/null +++ b/package/python-py/python-py.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# python-py +# +################################################################################ + +PYTHON_PY_VERSION = 1.10.0 +PYTHON_PY_SOURCE = py-$(PYTHON_PY_VERSION).tar.gz +PYTHON_PY_SITE = https://files.pythonhosted.org/packages/0d/8c/50e9f3999419bb7d9639c37e83fa9cdcf0f601a9d407162d6c37ad60be71 +PYTHON_PY_DEPENDENCIES = host-python-setuptools-scm +PYTHON_PY_SETUP_TYPE = setuptools +PYTHON_PY_LICENSE = MIT +PYTHON_PY_LICENSE_FILES = LICENSE py/_vendored_packages/iniconfig-1.1.1.dist-info/LICENSE +PYTHON_PY_CPE_ID_VENDOR = pytest +PYTHON_PY_CPE_ID_PRODUCT = py + +$(eval $(python-package)) diff --git a/package/python-pyaes/Config.in b/package/python-pyaes/Config.in new file mode 100644 index 00000000..629fd828 --- /dev/null +++ b/package/python-pyaes/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_PYAES + bool "python-pyaes" + help + Pure-Python Implementation of the AES block-cipher and + common modes of operation. + + https://github.com/ricmoo/pyaes diff --git a/package/python-pyaes/python-pyaes.hash b/package/python-pyaes/python-pyaes.hash new file mode 100644 index 00000000..25a15f1e --- /dev/null +++ b/package/python-pyaes/python-pyaes.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pyaes/json +md5 20fd5c6e29dcfdd08098e85a859a54ec pyaes-1.6.1.tar.gz +sha256 02c1b1405c38d3c370b085fb952dd8bea3fadcee6411ad99f312cc129c536d8f pyaes-1.6.1.tar.gz +# Locally computed sha256 checksums +sha256 1efe6c78b28b4203d397ea9b68bdc9c658d21cd9afaf8ae8223def83f2a7ebbd LICENSE.txt diff --git a/package/python-pyaes/python-pyaes.mk b/package/python-pyaes/python-pyaes.mk new file mode 100644 index 00000000..a738d3c7 --- /dev/null +++ b/package/python-pyaes/python-pyaes.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pyaes +# +################################################################################ + +PYTHON_PYAES_VERSION = 1.6.1 +PYTHON_PYAES_SOURCE = pyaes-$(PYTHON_PYAES_VERSION).tar.gz +PYTHON_PYAES_SITE = https://files.pythonhosted.org/packages/44/66/2c17bae31c906613795711fc78045c285048168919ace2220daa372c7d72 +PYTHON_PYAES_SETUP_TYPE = distutils +PYTHON_PYAES_LICENSE = MIT +PYTHON_PYAES_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-pyalsa/Config.in b/package/python-pyalsa/Config.in new file mode 100644 index 00000000..e91c99b4 --- /dev/null +++ b/package/python-pyalsa/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_PYTHON_PYALSA + bool "python-pyalsa" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_ALSA_LIB + select BR2_PACKAGE_ALSA_LIB_HWDEP + select BR2_PACKAGE_ALSA_LIB_MIXER + select BR2_PACKAGE_ALSA_LIB_RAWMIDI + select BR2_PACKAGE_ALSA_LIB_SEQ + help + Official ALSA Python binding, including hardware + management, mixer and sequencer control. + + http://www.alsa-project.org/ + +comment "python-pyalsa needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/python-pyalsa/python-pyalsa.hash b/package/python-pyalsa/python-pyalsa.hash new file mode 100644 index 00000000..c484313b --- /dev/null +++ b/package/python-pyalsa/python-pyalsa.hash @@ -0,0 +1,2 @@ +# Locally computed +sha256 2771291a5d2cf700f0abbe6629ea37468d1463a01b2330d84ef976e1e918676c pyalsa-1.1.6.tar.bz2 diff --git a/package/python-pyalsa/python-pyalsa.mk b/package/python-pyalsa/python-pyalsa.mk new file mode 100644 index 00000000..74f0347d --- /dev/null +++ b/package/python-pyalsa/python-pyalsa.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pyalsa +# +################################################################################ + +PYTHON_PYALSA_VERSION = 1.1.6 +PYTHON_PYALSA_SOURCE = pyalsa-$(PYTHON_PYALSA_VERSION).tar.bz2 +PYTHON_PYALSA_SITE = ftp://ftp.alsa-project.org/pub/pyalsa +PYTHON_PYALSA_SETUP_TYPE = distutils +PYTHON_PYALSA_LICENSE = LGPL-2.1+ +PYTHON_PYALSA_DEPENDENCIES = alsa-lib + +$(eval $(python-package)) diff --git a/package/python-pyasn1-modules/Config.in b/package/python-pyasn1-modules/Config.in new file mode 100644 index 00000000..6aff4d93 --- /dev/null +++ b/package/python-pyasn1-modules/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_PYASN1_MODULES + bool "python-pyasn1-modules" + select BR2_PACKAGE_PYTHON_PYASN1 # runtime + help + A collection of ASN.1-based protocols modules. + + https://github.com/etingof/pyasn1-modules diff --git a/package/python-pyasn1-modules/python-pyasn1-modules.hash b/package/python-pyasn1-modules/python-pyasn1-modules.hash new file mode 100644 index 00000000..23055965 --- /dev/null +++ b/package/python-pyasn1-modules/python-pyasn1-modules.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pyasn1-modules/json +md5 107e1ece7d0a41d782f69f8a95a4d9bc pyasn1-modules-0.2.8.tar.gz +sha256 905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e pyasn1-modules-0.2.8.tar.gz +# Locally computed sha256 checksums +sha256 22c5cc6922ab5d69fba32d8c5ee4cdd14981508cb53afc0ebd85593847fd95a5 LICENSE.txt diff --git a/package/python-pyasn1-modules/python-pyasn1-modules.mk b/package/python-pyasn1-modules/python-pyasn1-modules.mk new file mode 100644 index 00000000..9933a63a --- /dev/null +++ b/package/python-pyasn1-modules/python-pyasn1-modules.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pyasn1-modules +# +################################################################################ + +PYTHON_PYASN1_MODULES_VERSION = 0.2.8 +PYTHON_PYASN1_MODULES_SOURCE = pyasn1-modules-$(PYTHON_PYASN1_MODULES_VERSION).tar.gz +PYTHON_PYASN1_MODULES_SITE = https://files.pythonhosted.org/packages/88/87/72eb9ccf8a58021c542de2588a867dbefc7556e14b2866d1e40e9e2b587e +PYTHON_PYASN1_MODULES_SETUP_TYPE = setuptools +PYTHON_PYASN1_MODULES_LICENSE = BSD-2-Clause +PYTHON_PYASN1_MODULES_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-pyasn1/Config.in b/package/python-pyasn1/Config.in new file mode 100644 index 00000000..fea63813 --- /dev/null +++ b/package/python-pyasn1/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_PYASN1 + bool "python-pyasn1" + help + ASN.1 types and codecs. + + https://github.com/etingof/pyasn1 diff --git a/package/python-pyasn1/python-pyasn1.hash b/package/python-pyasn1/python-pyasn1.hash new file mode 100644 index 00000000..4347a43c --- /dev/null +++ b/package/python-pyasn1/python-pyasn1.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pyasn1/json +md5 dffae4ff9f997a83324b3f33fe62be54 pyasn1-0.4.8.tar.gz +sha256 aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba pyasn1-0.4.8.tar.gz +# Locally computed sha256 checksums +sha256 22c5cc6922ab5d69fba32d8c5ee4cdd14981508cb53afc0ebd85593847fd95a5 LICENSE.rst diff --git a/package/python-pyasn1/python-pyasn1.mk b/package/python-pyasn1/python-pyasn1.mk new file mode 100644 index 00000000..60050bef --- /dev/null +++ b/package/python-pyasn1/python-pyasn1.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pyasn1 +# +################################################################################ + +PYTHON_PYASN1_VERSION = 0.4.8 +PYTHON_PYASN1_SOURCE = pyasn1-$(PYTHON_PYASN1_VERSION).tar.gz +PYTHON_PYASN1_SITE = https://files.pythonhosted.org/packages/a4/db/fffec68299e6d7bad3d504147f9094830b704527a7fc098b721d38cc7fa7 +PYTHON_PYASN1_SETUP_TYPE = setuptools +PYTHON_PYASN1_LICENSE = BSD-2-Clause +PYTHON_PYASN1_LICENSE_FILES = LICENSE.rst + +$(eval $(python-package)) diff --git a/package/python-pybind/Config.in b/package/python-pybind/Config.in new file mode 100644 index 00000000..604cb9ee --- /dev/null +++ b/package/python-pybind/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_PYBIND + bool "python-pybind" + help + PyBind is a lightweight header-only library that exposes C++ + types in Python and vice versa, mainly to create Python + bindings of existing C++ code. + + http://pybind11.readthedocs.org/en/master diff --git a/package/python-pybind/python-pybind.hash b/package/python-pybind/python-pybind.hash new file mode 100644 index 00000000..a68ac846 --- /dev/null +++ b/package/python-pybind/python-pybind.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 cdbe326d357f18b83d10322ba202d69f11b2f49e2d87ade0dc2be0c5c34f8e2a python-pybind-2.6.1.tar.gz +# License files, locally calculated +sha256 83965b843b98f670d3a85bd041ed4b372c8ec50d7b4a5995a83ac697ba675dcb LICENSE diff --git a/package/python-pybind/python-pybind.mk b/package/python-pybind/python-pybind.mk new file mode 100644 index 00000000..a6a1bdb9 --- /dev/null +++ b/package/python-pybind/python-pybind.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-pybind +# +################################################################################ + +PYTHON_PYBIND_VERSION = 2.6.1 +PYTHON_PYBIND_SITE = $(call github,pybind,pybind11,v$(PYTHON_PYBIND_VERSION)) +PYTHON_PYBIND_LICENSE = BSD-3-Clause +PYTHON_PYBIND_LICENSE_FILES = LICENSE +PYTHON_PYBIND_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-pycairo/Config.in b/package/python-pycairo/Config.in new file mode 100644 index 00000000..a44a0421 --- /dev/null +++ b/package/python-pycairo/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_PYCAIRO + bool "python-pycairo" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_CAIRO + help + Python interface for cairo. + + https://pycairo.readthedocs.io diff --git a/package/python-pycairo/python-pycairo.hash b/package/python-pycairo/python-pycairo.hash new file mode 100644 index 00000000..c617d8b6 --- /dev/null +++ b/package/python-pycairo/python-pycairo.hash @@ -0,0 +1,7 @@ +# md5, sha256 from https://pypi.org/pypi/pycairo/json +md5 59bc5c5d1debc3af0f6791af9d612551 pycairo-1.19.1.tar.gz +sha256 2c143183280feb67f5beb4e543fd49990c28e7df427301ede04fc550d3562e84 pycairo-1.19.1.tar.gz +# Locally computed sha256 checksums +sha256 360b9a526d47c51a7cab7f1ec49ca5893050562d639b742d588934ff84823a72 COPYING +sha256 d80c9d084ebfb50ea1ed91bfbc2410d6ce542097a32c43b00781b83adcb8c77f COPYING-LGPL-2.1 +sha256 53692a2ed6c6a2c6ec9b32dd0b820dfae91e0a1fcdf625ca9ed0bdf8705fcc4f COPYING-MPL-1.1 diff --git a/package/python-pycairo/python-pycairo.mk b/package/python-pycairo/python-pycairo.mk new file mode 100644 index 00000000..c635498d --- /dev/null +++ b/package/python-pycairo/python-pycairo.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-pycairo +# +################################################################################ + +PYTHON_PYCAIRO_VERSION = 1.19.1 +PYTHON_PYCAIRO_SOURCE = pycairo-$(PYTHON_PYCAIRO_VERSION).tar.gz +PYTHON_PYCAIRO_SITE = https://files.pythonhosted.org/packages/e8/9d/c8be300fc6b1298559d37a071c3833b0b251e0fff334d2e4c408d5789162 +PYTHON_PYCAIRO_SETUP_TYPE = setuptools +PYTHON_PYCAIRO_DEPENDENCIES = cairo +PYTHON_PYCAIRO_LICENSE = LGPL-2.1 or MPL-1.1 +PYTHON_PYCAIRO_LICENSE_FILES = COPYING COPYING-LGPL-2.1 COPYING-MPL-1.1 + +$(eval $(python-package)) diff --git a/package/python-pycares/Config.in b/package/python-pycares/Config.in new file mode 100644 index 00000000..3452ae6b --- /dev/null +++ b/package/python-pycares/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_PYCARES + bool "python-pycares" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_CFFI # runtime + help + Python interface for c-ares. + + http://github.com/saghul/pycares diff --git a/package/python-pycares/python-pycares.hash b/package/python-pycares/python-pycares.hash new file mode 100644 index 00000000..c8c46175 --- /dev/null +++ b/package/python-pycares/python-pycares.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pycares/json +md5 8ac802d79b318efa27d3a9949d0604d1 pycares-3.1.1.tar.gz +sha256 18dfd4fd300f570d6c4536c1d987b7b7673b2a9d14346592c5d6ed716df0d104 pycares-3.1.1.tar.gz +# Locally computed sha256 checksums +sha256 427bb3a5372024a26e2c290b24382512bcc7ca123431c4dd178dd613beea7eee LICENSE diff --git a/package/python-pycares/python-pycares.mk b/package/python-pycares/python-pycares.mk new file mode 100644 index 00000000..dea34f82 --- /dev/null +++ b/package/python-pycares/python-pycares.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-pycares +# +################################################################################ + +PYTHON_PYCARES_VERSION = 3.1.1 +PYTHON_PYCARES_SOURCE = pycares-$(PYTHON_PYCARES_VERSION).tar.gz +PYTHON_PYCARES_SITE = https://files.pythonhosted.org/packages/4e/09/f49ef1c4b6a5ad50fc08a8acd015f1938594dd7a6b4a6a96d049d9bbec7d +PYTHON_PYCARES_SETUP_TYPE = setuptools +PYTHON_PYCARES_LICENSE = MIT +PYTHON_PYCARES_LICENSE_FILES = LICENSE +PYTHON_PYCARES_DEPENDENCIES = host-python-cffi + +$(eval $(python-package)) diff --git a/package/python-pycli/Config.in b/package/python-pycli/Config.in new file mode 100644 index 00000000..e1ce3b99 --- /dev/null +++ b/package/python-pycli/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_PYCLI + bool "python-pycli" + help + The cli package is a framework for making simple, correct + command line applications in Python. + + https://pythonhosted.org/pyCLI/ diff --git a/package/python-pycli/python-pycli.hash b/package/python-pycli/python-pycli.hash new file mode 100644 index 00000000..f0890e83 --- /dev/null +++ b/package/python-pycli/python-pycli.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/pycli/json +md5 89c487e7c8068ce05d63394d2ae7ebad pyCLI-2.0.3.tar.gz +# Locally computed +sha256 bc53e6c5db031ae1c05d131641f153d22a201c5e82cc8c9324a945752efbb622 pyCLI-2.0.3.tar.gz +sha256 591490b2ef462a4ad2be1aae5dd47738cb17e191c82d3ba38c3ae906d288e6ba lib/cli/__init__.py diff --git a/package/python-pycli/python-pycli.mk b/package/python-pycli/python-pycli.mk new file mode 100644 index 00000000..7aff1c62 --- /dev/null +++ b/package/python-pycli/python-pycli.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pycli +# +################################################################################ + +PYTHON_PYCLI_VERSION = 2.0.3 +PYTHON_PYCLI_SOURCE = pyCLI-$(PYTHON_PYCLI_VERSION).tar.gz +PYTHON_PYCLI_SITE = https://pypi.python.org/packages/95/fc/b2d86a5fbdac4072bcf70b01674b612e1a13026f54962c878fe3eca36fd1 +PYTHON_PYCLI_LICENSE = ISC-like +PYTHON_PYCLI_LICENSE_FILES = lib/cli/__init__.py +PYTHON_PYCLI_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-pycparser/Config.in b/package/python-pycparser/Config.in new file mode 100644 index 00000000..49190c34 --- /dev/null +++ b/package/python-pycparser/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_PYCPARSER + bool "python-pycparser" + help + C parser in Python + + https://github.com/eliben/pycparser diff --git a/package/python-pycparser/python-pycparser.hash b/package/python-pycparser/python-pycparser.hash new file mode 100644 index 00000000..04264443 --- /dev/null +++ b/package/python-pycparser/python-pycparser.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pycparser/json +md5 b8f88de737db8c346ee8d31c07c7a25a pycparser-2.20.tar.gz +sha256 2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0 pycparser-2.20.tar.gz +# Locally computed sha256 checksums +sha256 3c76629880aec2f8578ed914701a4ff9e5da8b60acb8b7ec675abf83c90c5168 LICENSE diff --git a/package/python-pycparser/python-pycparser.mk b/package/python-pycparser/python-pycparser.mk new file mode 100644 index 00000000..8af37fce --- /dev/null +++ b/package/python-pycparser/python-pycparser.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-pycparser +# +################################################################################ + +PYTHON_PYCPARSER_VERSION = 2.20 +PYTHON_PYCPARSER_SOURCE = pycparser-$(PYTHON_PYCPARSER_VERSION).tar.gz +PYTHON_PYCPARSER_SITE = https://files.pythonhosted.org/packages/0f/86/e19659527668d70be91d0369aeaa055b4eb396b0f387a4f92293a20035bd +PYTHON_PYCPARSER_SETUP_TYPE = setuptools +PYTHON_PYCPARSER_LICENSE = BSD-3-Clause +PYTHON_PYCPARSER_LICENSE_FILES = LICENSE + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-pycryptodomex/Config.in b/package/python-pycryptodomex/Config.in new file mode 100644 index 00000000..c7127fee --- /dev/null +++ b/package/python-pycryptodomex/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_PYCRYPTODOMEX + bool "python-pycryptodomex" + help + Cryptographic library for Python. + + http://www.pycryptodome.org diff --git a/package/python-pycryptodomex/python-pycryptodomex.hash b/package/python-pycryptodomex/python-pycryptodomex.hash new file mode 100644 index 00000000..1016672a --- /dev/null +++ b/package/python-pycryptodomex/python-pycryptodomex.hash @@ -0,0 +1,6 @@ +# md5, sha256 from https://pypi.org/pypi/pycryptodomex/json +md5 08bc8fbbcd6060c06f1f10e2dc18b834 pycryptodomex-3.9.9.tar.gz +sha256 7b5b7c5896f8172ea0beb283f7f9428e0ab88ec248ce0a5b8c98d73e26267d51 pycryptodomex-3.9.9.tar.gz +# Locally computed sha256 checksums +sha256 d1af3fab2ef8cc53b6c7f48bdeb178ac874b04faf4ba0159a96b6109f1d393e2 LICENSE.rst +sha256 8e563c767164faa0831a333b57d23d4311cf566eb1b15d93250f4606be4eb549 Doc/LEGAL/COPYRIGHT.pycrypto diff --git a/package/python-pycryptodomex/python-pycryptodomex.mk b/package/python-pycryptodomex/python-pycryptodomex.mk new file mode 100644 index 00000000..341d1fa0 --- /dev/null +++ b/package/python-pycryptodomex/python-pycryptodomex.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# python-pycryptodomex +# +################################################################################ + +# Please keep in sync with package/python3-pycryptodomex/python3-pycryptodomex.mk +PYTHON_PYCRYPTODOMEX_VERSION = 3.9.9 +PYTHON_PYCRYPTODOMEX_SOURCE = pycryptodomex-$(PYTHON_PYCRYPTODOMEX_VERSION).tar.gz +PYTHON_PYCRYPTODOMEX_SITE = https://files.pythonhosted.org/packages/14/90/f4a934bffae029e16fb33f3bd87014a0a18b4bec591249c4fc01a18d3ab6 +PYTHON_PYCRYPTODOMEX_SETUP_TYPE = setuptools +PYTHON_PYCRYPTODOMEX_LICENSE = \ + BSD-2-Clause, \ + Public Domain (pycrypto original code), \ + OCB patent license (OCB mode) +PYTHON_PYCRYPTODOMEX_LICENSE_FILES = LICENSE.rst Doc/LEGAL/COPYRIGHT.pycrypto + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-pycups/Config.in b/package/python-pycups/Config.in new file mode 100644 index 00000000..61c2ba21 --- /dev/null +++ b/package/python-pycups/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_PYCUPS + bool "python-pycups" + depends on BR2_PACKAGE_CUPS + depends on BR2_PACKAGE_PYTHON3 + help + Python bindings for libcups. + + https://github.com/zdohnal/pycups diff --git a/package/python-pycups/python-pycups.hash b/package/python-pycups/python-pycups.hash new file mode 100644 index 00000000..d1498b61 --- /dev/null +++ b/package/python-pycups/python-pycups.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pycups/json +md5 41eef188b86d01ccfdbaaa05cf0f6ca4 pycups-2.0.1.tar.gz +sha256 57434ce5f62548eb12949ca8217f066f4eeb21a5d6ab8b13471dce350e380c90 pycups-2.0.1.tar.gz +# Locally computed sha256 checksums +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/python-pycups/python-pycups.mk b/package/python-pycups/python-pycups.mk new file mode 100644 index 00000000..41da3641 --- /dev/null +++ b/package/python-pycups/python-pycups.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-pycups +# +################################################################################ + +PYTHON_PYCUPS_VERSION = 2.0.1 +PYTHON_PYCUPS_SOURCE = pycups-$(PYTHON_PYCUPS_VERSION).tar.gz +PYTHON_PYCUPS_SITE = https://files.pythonhosted.org/packages/0c/bb/82546806a86dc16f5eeb76f62ffdc42cce3d43aacd4e25a8b5300eec0263 +PYTHON_PYCUPS_SETUP_TYPE = distutils +PYTHON_PYCUPS_LICENSE = GPL-2.0+ +PYTHON_PYCUPS_LICENSE_FILES = COPYING +PYTHON_PYCUPS_DEPENDENCIES = cups + +$(eval $(python-package)) diff --git a/package/python-pydal/Config.in b/package/python-pydal/Config.in new file mode 100644 index 00000000..f1c97f91 --- /dev/null +++ b/package/python-pydal/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_PYTHON_PYDAL + bool python-pydal + help + pyDAL is a pure Python Database Abstraction Layer. It + dynamically generates the SQL in real time using the + specified dialect for the database back end, so that you do + not have to write SQL code or learn different SQL dialects + (the term SQL is used generically), and your code will be + portable among different types of databases. + + pyDAL comes from the original web2py's DAL, with the aim of + being wide-compatible. pyDAL doesn't require web2py and can + be used in any Python context. + + https://github.com/web2py/pydal diff --git a/package/python-pydal/python-pydal.hash b/package/python-pydal/python-pydal.hash new file mode 100644 index 00000000..224f3285 --- /dev/null +++ b/package/python-pydal/python-pydal.hash @@ -0,0 +1,3 @@ +# sha256 locally computed +sha256 df54be164bcdab8ffc8db88cb72333cc4b27997ce58c302dd8ade36462d799ea python-pydal-20200910.1.tar.gz +sha256 1f711e93f1e0c2eec576e2e60597dc2ed6f0a661e4749c6b8a39f0d4a72be468 LICENSE.txt diff --git a/package/python-pydal/python-pydal.mk b/package/python-pydal/python-pydal.mk new file mode 100644 index 00000000..2cac839a --- /dev/null +++ b/package/python-pydal/python-pydal.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pydal +# +################################################################################ + +PYTHON_PYDAL_VERSION = 20200910.1 +PYTHON_PYDAL_SITE = $(call github,web2py,pydal,v$(PYTHON_PYDAL_VERSION)) +PYTHON_PYDAL_LICENSE = BSD-3-Clause +PYTHON_PYDAL_LICENSE_FILES = LICENSE.txt +PYTHON_PYDAL_SETUP_TYPE = setuptools + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-pydantic/Config.in b/package/python-pydantic/Config.in new file mode 100644 index 00000000..07b506a2 --- /dev/null +++ b/package/python-pydantic/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_PYDANTIC + bool "python-pydantic" + depends on BR2_PACKAGE_PYTHON3 + help + Data validation and settings management using python 3.6 + type hinting. + + https://github.com/samuelcolvin/pydantic diff --git a/package/python-pydantic/python-pydantic.hash b/package/python-pydantic/python-pydantic.hash new file mode 100644 index 00000000..7bb076fe --- /dev/null +++ b/package/python-pydantic/python-pydantic.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pydantic/json +md5 ce0c1824d1797bc7d67953428c4fe965 pydantic-1.3.tar.gz +sha256 2eab7d548b0e530bf65bee7855ad8164c2f6a889975d5e9c4eefd1e7c98245dc pydantic-1.3.tar.gz +# Locally computed sha256 checksums +sha256 66badbfe56618ec52ddcbfda62450e43752d16fe1e7cae78d346c7ed10a35306 LICENSE diff --git a/package/python-pydantic/python-pydantic.mk b/package/python-pydantic/python-pydantic.mk new file mode 100644 index 00000000..0f9dd66a --- /dev/null +++ b/package/python-pydantic/python-pydantic.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pydantic +# +################################################################################ + +PYTHON_PYDANTIC_VERSION = 1.3 +PYTHON_PYDANTIC_SOURCE = pydantic-$(PYTHON_PYDANTIC_VERSION).tar.gz +PYTHON_PYDANTIC_SITE = https://files.pythonhosted.org/packages/3e/69/b22c0eb3157115e1e3d111f574a6a41552539f1e53b064121ef4e9ac1368 +PYTHON_PYDANTIC_SETUP_TYPE = setuptools +PYTHON_PYDANTIC_LICENSE = MIT +PYTHON_PYDANTIC_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-pyelftools/Config.in b/package/python-pyelftools/Config.in new file mode 100644 index 00000000..ca273022 --- /dev/null +++ b/package/python-pyelftools/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_PYELFTOOLS + bool "python-pyelftools" + help + Pyelftools is a Python library for parsing and analyzing ELF + files and DWARF debug information. + + https://github.com/eliben/pyelftools diff --git a/package/python-pyelftools/python-pyelftools.hash b/package/python-pyelftools/python-pyelftools.hash new file mode 100644 index 00000000..80900b71 --- /dev/null +++ b/package/python-pyelftools/python-pyelftools.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pyelftools/json +md5 c5629b9a5d19c82107a946cce52eeec2 pyelftools-0.25.tar.gz +sha256 89c6da6f56280c37a5ff33468591ba9a124e17d71fe42de971818cbff46c1b24 pyelftools-0.25.tar.gz +# Locally computed sha256 checksums +sha256 ae18bf4cb82f92af7547259177bc28bc48e4fc732518bcedfe690226288d3445 LICENSE diff --git a/package/python-pyelftools/python-pyelftools.mk b/package/python-pyelftools/python-pyelftools.mk new file mode 100644 index 00000000..71ad49f2 --- /dev/null +++ b/package/python-pyelftools/python-pyelftools.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-pyelftools +# +################################################################################ + +# Please keep in sync with package/python3-pyelftools/python3-pyelftools.mk +PYTHON_PYELFTOOLS_VERSION = 0.25 +PYTHON_PYELFTOOLS_SOURCE = pyelftools-$(PYTHON_PYELFTOOLS_VERSION).tar.gz +PYTHON_PYELFTOOLS_SITE = https://files.pythonhosted.org/packages/fa/9a/0674cb1725196568bdbca98304f2efb17368b57af1a4bb3fc772c026f474 +PYTHON_PYELFTOOLS_LICENSE = Public domain +PYTHON_PYELFTOOLS_LICENSE_FILES = LICENSE +PYTHON_PYELFTOOLS_SETUP_TYPE = setuptools + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-pyftpdlib/Config.in b/package/python-pyftpdlib/Config.in new file mode 100644 index 00000000..e25c34e5 --- /dev/null +++ b/package/python-pyftpdlib/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_PYFTPDLIB + bool "python-pyftpdlib" + help + Extremely fast and scalable Python FTP server library. + + https://github.com/giampaolo/pyftpdlib diff --git a/package/python-pyftpdlib/python-pyftpdlib.hash b/package/python-pyftpdlib/python-pyftpdlib.hash new file mode 100644 index 00000000..7f8da955 --- /dev/null +++ b/package/python-pyftpdlib/python-pyftpdlib.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pyftpdlib/json +md5 7f8089520d60171bee5dab2b721e8d00 pyftpdlib-1.5.5.tar.gz +sha256 1adf1c03d1508749e7c2f26dc9850ec0ef834318d725b7ae5ac91698f5c86752 pyftpdlib-1.5.5.tar.gz +# Locally computed sha256 checksums +sha256 18a4ff1ddf890838e36504b307581e3eb42c890a7272ce28b18b3ce1205b7ea8 LICENSE diff --git a/package/python-pyftpdlib/python-pyftpdlib.mk b/package/python-pyftpdlib/python-pyftpdlib.mk new file mode 100644 index 00000000..dbbb9e28 --- /dev/null +++ b/package/python-pyftpdlib/python-pyftpdlib.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pyftpdlib +# +################################################################################ + +PYTHON_PYFTPDLIB_VERSION = 1.5.5 +PYTHON_PYFTPDLIB_SOURCE = pyftpdlib-$(PYTHON_PYFTPDLIB_VERSION).tar.gz +PYTHON_PYFTPDLIB_SITE = https://files.pythonhosted.org/packages/27/64/06a574350c79873e908fa9f48b617e7961de50fc468acc0a05d76771bce9 +PYTHON_PYFTPDLIB_SETUP_TYPE = setuptools +PYTHON_PYFTPDLIB_LICENSE = MIT +PYTHON_PYFTPDLIB_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-pygame/Config.in b/package/python-pygame/Config.in new file mode 100644 index 00000000..0a738527 --- /dev/null +++ b/package/python-pygame/Config.in @@ -0,0 +1,56 @@ +config BR2_PACKAGE_PYTHON_PYGAME + bool "python-pygame" + select BR2_PACKAGE_SDL + help + Pygame is a cross-platfrom library designed to make it easy + to write multimedia software, such as games, in + Python. Pygame requires the Python language and SDL + multimedia library. + It can also make use of several other popular libraries. + + http://www.pygame.org/ + +if BR2_PACKAGE_PYTHON_PYGAME +config BR2_PACKAGE_PYTHON_PYGAME_IMAGE + bool "pygame.image" + select BR2_PACKAGE_SDL_IMAGE + select BR2_PACKAGE_SDL_IMAGE_PNG + select BR2_PACKAGE_SDL_IMAGE_JPEG + help + pygame module for loading, saving and transfering images. + Will autoselect sdl_image with png and jpeg support. + +config BR2_PACKAGE_PYTHON_PYGAME_EXAMPLES + bool "pygame.examples" + help + Include examples. + Selecting this option adds about 1.5 MB to the target file + system. + +config BR2_PACKAGE_PYTHON_PYGAME_FONT + bool "pygame.font" + select BR2_PACKAGE_SDL_TTF + help + pygame module for loading and rendering fonts. + Will autoselect sdl_ttf. + +config BR2_PACKAGE_PYTHON_PYGAME_MIXER + bool "pygame.mixer" + select BR2_PACKAGE_SDL_MIXER + help + pygame module for loading and playing sounds. + Will autoselect sdl_mixer. + +config BR2_PACKAGE_PYTHON_PYGAME_MIXER_MUSIC + bool "pygame.mixer.music" + depends on BR2_PACKAGE_PYTHON_PYGAME_MIXER + help + pygame module for controlling streamed audio + +config BR2_PACKAGE_PYTHON_PYGAME_SCRAP + bool "pygame.scrap" + depends on BR2_PACKAGE_SDL_X11 + help + pygame module for clipboard support (X11 needed) + +endif diff --git a/package/python-pygame/python-pygame.hash b/package/python-pygame/python-pygame.hash new file mode 100644 index 00000000..c0496515 --- /dev/null +++ b/package/python-pygame/python-pygame.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 f95a7dd68ea294d415e36e068d2f533c5a01c67773452d14a535c5c7455681fe pygame-d61ea8eabd56.tar.gz +sha256 a190dc9c8043755d90f8b0a75fa66b9e42d4af4c980bf5ddc633f0124db3cee7 LGPL diff --git a/package/python-pygame/python-pygame.mk b/package/python-pygame/python-pygame.mk new file mode 100644 index 00000000..8deb42a9 --- /dev/null +++ b/package/python-pygame/python-pygame.mk @@ -0,0 +1,111 @@ +################################################################################ +# +# python-pygame +# +################################################################################ + +# stable 1.9.1 release requires V4L which has been wiped out of recent Linux +# kernels, so use latest mercurial revision until next stable release is out. +PYTHON_PYGAME_VERSION = d61ea8eabd56 +PYTHON_PYGAME_SOURCE = pygame-$(PYTHON_PYGAME_VERSION).tar.gz +PYTHON_PYGAME_SITE = https://bitbucket.org/pygame/pygame +PYTHON_PYGAME_SITE_METHOD = hg +PYTHON_PYGAME_SETUP_TYPE = distutils +PYTHON_PYGAME_LICENSE = LGPL-2.1+ +PYTHON_PYGAME_LICENSE_FILES = LGPL + +ifeq ($(BR2_PACKAGE_PYTHON_PYGAME_IMAGE),y) +PYTHON_PYGAME_OPT_DEPENDS += sdl_image +endif + +ifeq ($(BR2_PACKAGE_PYTHON_PYGAME_FONT),y) +PYTHON_PYGAME_OPT_DEPENDS += sdl_ttf +endif + +ifeq ($(BR2_PACKAGE_PYTHON_PYGAME_MIXER),y) +PYTHON_PYGAME_OPT_DEPENDS += sdl_mixer +endif + +PYTHON_PYGAME_DEPENDENCIES = sdl $(PYTHON_PYGAME_OPT_DEPENDS) + +ifneq ($(BR2_PACKAGE_PYTHON_PYGAME_IMAGE),y) +define PYTHON_PYGAME_UNCONFIGURE_IMAGE + $(SED) 's/^imageext/#imageext/' $(@D)/Setup +endef +endif + +ifneq ($(BR2_PACKAGE_PYTHON_PYGAME_FONT),y) +define PYTHON_PYGAME_UNCONFIGURE_FONT + $(SED) 's/^font/#font/' $(@D)/Setup +endef +endif + +ifneq ($(BR2_PACKAGE_PYTHON_PYGAME_MIXER),y) +define PYTHON_PYGAME_UNCONFIGURE_MIXER + $(SED) 's/^mixer/#mixer/g' $(@D)/Setup +endef +endif + +# Both require numpy or numeric python module +define PYTHON_PYGAME_UNCONFIGURE_SNDARRAY + $(SED) 's/^_numericsndarray/#_numericsndarray/' $(@D)/Setup +endef + +define PYTHON_PYGAME_UNCONFIGURE_SURFARRAY + $(SED) 's/^_numericsurfarray/#_numericsurfarray/' $(@D)/Setup +endef + +# Requires smpeg +define PYTHON_PYGAME_UNCONFIGURE_MOVIE + $(SED) 's/^movie/#movie/' $(@D)/Setup +endef + +ifneq ($(BR2_PACKAGE_PYTHON_PYGAME_SCRAP),y) +define PYTHON_PYGAME_UNCONFIGURE_SCRAP + $(SED) 's/^scrap/#scrap/' $(@D)/Setup +endef +endif + +define PYTHON_PYGAME_UNCONFIGURE_FREETYPE + $(SED) 's/^_freetype/#_freetype/' $(@D)/Setup +endef + +PYTHON_PYGAME_SDL_FLAGS = `$(STAGING_DIR)/usr/bin/sdl-config --cflags` +PYTHON_PYGAME_SDL_FLAGS += `$(STAGING_DIR)/usr/bin/sdl-config --libs` + +# Pygame needs a Setup file where options should be commented out if +# dependencies are not available +define PYTHON_PYGAME_CONFIGURE_CMDS + cp -f $(@D)/Setup.in $(@D)/Setup + $(SED) "s~^SDL = ~SDL = $(PYTHON_PYGAME_SDL_FLAGS) \n#~" $(@D)/Setup + $(SED) 's/^pypm/#pypm/' $(@D)/Setup + $(PYTHON_PYGAME_UNCONFIGURE_IMAGE) + $(PYTHON_PYGAME_UNCONFIGURE_FONT) + $(PYTHON_PYGAME_UNCONFIGURE_MIXER) + $(PYTHON_PYGAME_UNCONFIGURE_SNDARRAY) + $(PYTHON_PYGAME_UNCONFIGURE_SURFARRAY) + $(PYTHON_PYGAME_UNCONFIGURE_MOVIE) + $(PYTHON_PYGAME_UNCONFIGURE_SCRAP) + $(PYTHON_PYGAME_UNCONFIGURE_FREETYPE) +endef + +define PYTHON_PYGAME_REMOVE_DOC + rm -rf $(TARGET_DIR)/usr/lib/python*/site-packages/pygame/docs +endef + +PYTHON_PYGAME_POST_INSTALL_TARGET_HOOKS += PYTHON_PYGAME_REMOVE_DOC + +define PYTHON_PYGAME_REMOVE_TESTS + rm -rf $(TARGET_DIR)/usr/lib/python*/site-packages/pygame/tests +endef + +PYTHON_PYGAME_POST_INSTALL_TARGET_HOOKS += PYTHON_PYGAME_REMOVE_TESTS + +ifneq ($(BR2_PACKAGE_PYTHON_PYGAME_EXAMPLES),y) +define PYTHON_PYGAME_REMOVE_EXAMPLES + rm -rf $(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/site-packages/pygame/examples +endef +PYTHON_PYGAME_POST_INSTALL_TARGET_HOOKS += PYTHON_PYGAME_REMOVE_EXAMPLES +endif + +$(eval $(python-package)) diff --git a/package/python-pygments/Config.in b/package/python-pygments/Config.in new file mode 100644 index 00000000..d74e53d4 --- /dev/null +++ b/package/python-pygments/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_PYGMENTS + bool "python-pygments" + depends on BR2_PACKAGE_PYTHON3 + help + Pygments is a syntax highlighting package written in Python. + + https://pypi.python.org/pypi/Pygments diff --git a/package/python-pygments/python-pygments.hash b/package/python-pygments/python-pygments.hash new file mode 100644 index 00000000..09b47b2b --- /dev/null +++ b/package/python-pygments/python-pygments.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pygments/json +md5 390a49fa0eb5486a795b2b54b9a7b666 Pygments-2.7.4.tar.gz +sha256 df49d09b498e83c1a73128295860250b0b7edd4c723a32e9bc0d295c7c2ec337 Pygments-2.7.4.tar.gz +# Locally computed sha256 checksums +sha256 c012cf17a2ba79142977c8cc5bb1497a675401bf79c2c9b95a7604e2ddfde8b8 LICENSE diff --git a/package/python-pygments/python-pygments.mk b/package/python-pygments/python-pygments.mk new file mode 100644 index 00000000..781b1635 --- /dev/null +++ b/package/python-pygments/python-pygments.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-pygments +# +################################################################################ + +PYTHON_PYGMENTS_VERSION = 2.7.4 +PYTHON_PYGMENTS_SOURCE = Pygments-$(PYTHON_PYGMENTS_VERSION).tar.gz +PYTHON_PYGMENTS_SITE = https://files.pythonhosted.org/packages/e1/86/8059180e8217299079d8719c6e23d674aadaba0b1939e25e0cc15dcf075b +PYTHON_PYGMENTS_LICENSE = BSD-2-Clause +PYTHON_PYGMENTS_LICENSE_FILES = LICENSE +PYTHON_PYGMENTS_CPE_ID_VENDOR = pygments +PYTHON_PYGMENTS_CPE_ID_PRODUCT = pygments +PYTHON_PYGMENTS_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-pyhamcrest/Config.in b/package/python-pyhamcrest/Config.in new file mode 100644 index 00000000..c2a4dc06 --- /dev/null +++ b/package/python-pyhamcrest/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_PYHAMCREST + bool "python-pyhamcrest" + select BR2_PACKAGE_PYTHON_SETUPTOOLS # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + help + Hamcrest framework for matcher objects. + + https://github.com/hamcrest/PyHamcrest diff --git a/package/python-pyhamcrest/python-pyhamcrest.hash b/package/python-pyhamcrest/python-pyhamcrest.hash new file mode 100644 index 00000000..0c1660e0 --- /dev/null +++ b/package/python-pyhamcrest/python-pyhamcrest.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pyhamcrest/json +md5 8b833a3fa30197455df79424f30c8c3f PyHamcrest-1.9.0.tar.gz +sha256 8ffaa0a53da57e89de14ced7185ac746227a8894dbd5a3c718bf05ddbd1d56cd PyHamcrest-1.9.0.tar.gz +# Locally computed sha256 checksums +sha256 ec76c04449607010d061b1e29c9d20a5ffae74db9d04670ae82538ccfe68b941 LICENSE.txt diff --git a/package/python-pyhamcrest/python-pyhamcrest.mk b/package/python-pyhamcrest/python-pyhamcrest.mk new file mode 100644 index 00000000..244aa8c6 --- /dev/null +++ b/package/python-pyhamcrest/python-pyhamcrest.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pyhamcrest +# +################################################################################ + +PYTHON_PYHAMCREST_VERSION = 1.9.0 +PYTHON_PYHAMCREST_SOURCE = PyHamcrest-$(PYTHON_PYHAMCREST_VERSION).tar.gz +PYTHON_PYHAMCREST_SITE = https://files.pythonhosted.org/packages/a4/89/a469aad9256aedfbb47a29ec2b2eeb855d9f24a7a4c2ff28bd8d1042ef02 +PYTHON_PYHAMCREST_SETUP_TYPE = setuptools +PYTHON_PYHAMCREST_LICENSE = BSD-3-Clause +PYTHON_PYHAMCREST_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-pyicu/Config.in b/package/python-pyicu/Config.in new file mode 100644 index 00000000..93eac533 --- /dev/null +++ b/package/python-pyicu/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_PYTHON_PYICU + bool "python-pyicu" + depends on !BR2_BINFMT_FLAT # icu + depends on BR2_HOST_GCC_AT_LEAST_4_9 # icu + depends on BR2_INSTALL_LIBSTDCPP # icu + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # icu + select BR2_PACKAGE_ICU + help + Python extension wrapping the ICU C++ API. + + https://github.com/ovalhub/pyicu + +comment "python-pyicu needs a toolchain w/ C++, gcc >= 4.9, host gcc >= 4.9" + depends on !BR2_BINFMT_FLAT + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || \ + !BR2_HOST_GCC_AT_LEAST_4_9 diff --git a/package/python-pyicu/python-pyicu.hash b/package/python-pyicu/python-pyicu.hash new file mode 100644 index 00000000..a6ddeb24 --- /dev/null +++ b/package/python-pyicu/python-pyicu.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/PyICU/json +md5 7656f5cc53a7c18b40e653d6eefdee14 PyICU-1.9.7.tar.gz +# Locally computed +sha256 db27cd1cc150b879c5465872bec7fdaf340eca140aa922be03891d5b9f855b61 PyICU-1.9.7.tar.gz +sha256 74bbadee4ee3c3a1ac0ecfbd74bc7ce64046de1ceddf4717dc923809ca8ffce3 LICENSE diff --git a/package/python-pyicu/python-pyicu.mk b/package/python-pyicu/python-pyicu.mk new file mode 100644 index 00000000..c6587c39 --- /dev/null +++ b/package/python-pyicu/python-pyicu.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-pyicu +# +################################################################################ + +PYTHON_PYICU_VERSION = 1.9.7 +PYTHON_PYICU_SOURCE = PyICU-$(PYTHON_PYICU_VERSION).tar.gz +PYTHON_PYICU_SITE = https://pypi.python.org/packages/6e/88/f42a1297909ca6d9113ba37b37067011ae29432fe592fdd98cf52ad23b77 +PYTHON_PYICU_LICENSE = MIT +PYTHON_PYICU_LICENSE_FILES = LICENSE +PYTHON_PYICU_DEPENDENCIES = icu +PYTHON_PYICU_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-pyinotify/Config.in b/package/python-pyinotify/Config.in new file mode 100644 index 00000000..b3e74e13 --- /dev/null +++ b/package/python-pyinotify/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_PYINOTIFY + bool "python-pyinotify" + help + Monitoring filesystems events with inotify on Linux. + + https://github.com/seb-m/pyinotify diff --git a/package/python-pyinotify/python-pyinotify.hash b/package/python-pyinotify/python-pyinotify.hash new file mode 100644 index 00000000..72095ff6 --- /dev/null +++ b/package/python-pyinotify/python-pyinotify.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 7943f198c5cef2bdc121d847937fbe565daaa7d4daaf1b8de8ef5689812f481c python-pyinotify-0.9.6.tar.gz +sha256 97c96d577f761e23c7778bda2b163dba7b94e4defdd7873b7155bed252820608 COPYING diff --git a/package/python-pyinotify/python-pyinotify.mk b/package/python-pyinotify/python-pyinotify.mk new file mode 100644 index 00000000..b4ea6629 --- /dev/null +++ b/package/python-pyinotify/python-pyinotify.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-pyinotify +# +################################################################################ + +PYTHON_PYINOTIFY_VERSION = 0.9.6 +PYTHON_PYINOTIFY_SITE = $(call github,seb-m,pyinotify,$(PYTHON_PYINOTIFY_VERSION)) +PYTHON_PYINOTIFY_SETUP_TYPE = setuptools +PYTHON_PYINOTIFY_LICENSE = MIT +PYTHON_PYINOTIFY_LICENSE_FILES = COPYING + +$(eval $(python-package)) diff --git a/package/python-pyjwt/Config.in b/package/python-pyjwt/Config.in new file mode 100644 index 00000000..f8d4f8a9 --- /dev/null +++ b/package/python-pyjwt/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_PYJWT + bool "python-pyjwt" + depends on BR2_PACKAGE_PYTHON3 + help + JSON Web Token implementation in Python. + + http://github.com/jpadilla/pyjwt diff --git a/package/python-pyjwt/python-pyjwt.hash b/package/python-pyjwt/python-pyjwt.hash new file mode 100644 index 00000000..10875510 --- /dev/null +++ b/package/python-pyjwt/python-pyjwt.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/PyJWT/json +md5 7a1b1c8bfeb67c31ee4fdadefe5ff4b8 PyJWT-2.0.0.tar.gz +sha256 7a2b271c6dac2fda9e0c33d176c4253faba2c6c6b3a99c7f28a32c3c97522779 PyJWT-2.0.0.tar.gz +# Locally computed sha256 checksums +sha256 ec82af815b5f9da8685afb300cc5beb7949e1c22b79b6c1c054796cefdf6cac6 LICENSE diff --git a/package/python-pyjwt/python-pyjwt.mk b/package/python-pyjwt/python-pyjwt.mk new file mode 100644 index 00000000..942499ea --- /dev/null +++ b/package/python-pyjwt/python-pyjwt.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-pyjwt +# +################################################################################ + +PYTHON_PYJWT_VERSION = 2.0.0 +PYTHON_PYJWT_SOURCE = PyJWT-$(PYTHON_PYJWT_VERSION).tar.gz +PYTHON_PYJWT_SITE = https://files.pythonhosted.org/packages/14/6d/096dc269d105ba374d6bfd3ecb22b516795ca0572499820dadc8178d9ae1 +PYTHON_PYJWT_SETUP_TYPE = setuptools +PYTHON_PYJWT_LICENSE = MIT +PYTHON_PYJWT_LICENSE_FILES = LICENSE +PYTHON_PYJWT_CPE_ID_VENDOR = pyjwt_project +PYTHON_PYJWT_CPE_ID_PRODUCT = pyjwt + +$(eval $(python-package)) diff --git a/package/python-pylibftdi/0001-do-not-use-find-library.patch b/package/python-pylibftdi/0001-do-not-use-find-library.patch new file mode 100644 index 00000000..192ed43e --- /dev/null +++ b/package/python-pylibftdi/0001-do-not-use-find-library.patch @@ -0,0 +1,31 @@ +Hard code library loading + +Shortcut the search for the libraries in case the built in +find_library is broken. + +As buildroot does not ship any of the external programs that the core +procedure use to find libraries use the canonical name of the shared +object and load it. + +In this case this affects loading libftdi and libusb. + +This should be reliable as we specify said libs as dependencies of +this package. + +Signed-off-by: Christian Kellermann + +--- +diff -purN pylibftdi-0.15.0.orig/pylibftdi/driver.py pylibftdi-0.15.0/pylibftdi/driver.py +--- pylibftdi-0.15.0.orig/pylibftdi/driver.py 2015-04-26 22:41:39.000000000 +0200 ++++ pylibftdi-0.15.0/pylibftdi/driver.py 2017-02-27 13:08:56.502958000 +0100 +@@ -121,8 +121,8 @@ class Driver(object): + lib = getattr(cdll, lib_path) + break + if lib is None: +- raise LibraryMissingError('{} library not found (search: {})'.format( +- name, search_list)) ++ return cdll.LoadLibrary(name + '.so') ++ + return lib + + @property diff --git a/package/python-pylibftdi/Config.in b/package/python-pylibftdi/Config.in new file mode 100644 index 00000000..ce815a55 --- /dev/null +++ b/package/python-pylibftdi/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_PYTHON_PYLIBFTDI + bool "python-pylibftdi" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libftdi -> libusb + select BR2_PACKAGE_LIBFTDI + help + This package contains the python language binding libftdi. + + https://pypi.python.org/pypi/pylibftdi + +comment "python-pylibftdi needs a toolchain w/ threads, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/python-pylibftdi/python-pylibftdi.hash b/package/python-pylibftdi/python-pylibftdi.hash new file mode 100644 index 00000000..62dac5cb --- /dev/null +++ b/package/python-pylibftdi/python-pylibftdi.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pylibftdi/json +md5 c48e442cef7b1e865b4d96ab92f509ad pylibftdi-0.18.1.tar.gz +sha256 bdd04076933959b20b3c8b4fb8be7882d3362675f259e7eeb23ebff03b81859d pylibftdi-0.18.1.tar.gz +# Locally computed sha256 checksums +sha256 0e40132339e1ef7d17d93837fbc273d1e87302e9295162bd19c9161e5700ddcc LICENSE.txt diff --git a/package/python-pylibftdi/python-pylibftdi.mk b/package/python-pylibftdi/python-pylibftdi.mk new file mode 100644 index 00000000..2f561486 --- /dev/null +++ b/package/python-pylibftdi/python-pylibftdi.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-pylibftdi +# +################################################################################ + +PYTHON_PYLIBFTDI_VERSION = 0.18.1 +PYTHON_PYLIBFTDI_SOURCE = pylibftdi-$(PYTHON_PYLIBFTDI_VERSION).tar.gz +PYTHON_PYLIBFTDI_SITE = https://files.pythonhosted.org/packages/50/9b/1e1cdb9715bacfb83e5eaf5e69f4e2fbd92d61f43c5e185cc3935ec01b28 +PYTHON_PYLIBFTDI_LICENSE = MIT +PYTHON_PYLIBFTDI_LICENSE_FILES = LICENSE.txt +PYTHON_PYLIBFTDI_DEPENDENCIES = libftdi +PYTHON_PYLIBFTDI_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-pylru/Config.in b/package/python-pylru/Config.in new file mode 100644 index 00000000..c1745769 --- /dev/null +++ b/package/python-pylru/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_PYLRU + bool "python-pylru" + help + A least recently used (LRU) cache implementation. + + https://github.com/jlhutch/pylru diff --git a/package/python-pylru/python-pylru.hash b/package/python-pylru/python-pylru.hash new file mode 100644 index 00000000..1962c601 --- /dev/null +++ b/package/python-pylru/python-pylru.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pylru/json +md5 8f0050f86d1fa68bb18673de37da543b pylru-1.2.0.tar.gz +sha256 492f934bb98dc6c8b2370c02c95c65516ddc08c8f64d27f70087eb038621d297 pylru-1.2.0.tar.gz +# Locally computed sha256 checksums +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.txt diff --git a/package/python-pylru/python-pylru.mk b/package/python-pylru/python-pylru.mk new file mode 100644 index 00000000..98c3945d --- /dev/null +++ b/package/python-pylru/python-pylru.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pylru +# +################################################################################ + +PYTHON_PYLRU_VERSION = 1.2.0 +PYTHON_PYLRU_SOURCE = pylru-$(PYTHON_PYLRU_VERSION).tar.gz +PYTHON_PYLRU_SITE = https://files.pythonhosted.org/packages/9c/88/30972cd0518452563221c80bffc2a5832499d736648ef8fe492affae15c5 +PYTHON_PYLRU_SETUP_TYPE = setuptools +PYTHON_PYLRU_LICENSE = GPL-2.0 +PYTHON_PYLRU_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-pymodbus/Config.in b/package/python-pymodbus/Config.in new file mode 100644 index 00000000..0ba6fb88 --- /dev/null +++ b/package/python-pymodbus/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_PYMODBUS + bool "python-pymodbus" + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON_SERIAL # runtime + help + Pymodbus is a full Modbus protocol implementation. + + https://github.com/riptideio/pymodbus diff --git a/package/python-pymodbus/python-pymodbus.hash b/package/python-pymodbus/python-pymodbus.hash new file mode 100644 index 00000000..8e60d94e --- /dev/null +++ b/package/python-pymodbus/python-pymodbus.hash @@ -0,0 +1,4 @@ +# sha256 locally computed +sha256 088c7ece2a11cad652939719695c457f26f9148cd7d2f4a79872167925180ad5 pymodbus-2.2.0.tar.gz +# Hash for license file +sha256 796a47993313691ea404d8af7e4c0f9daf1d2760e3900938985b59c9008eee2f doc/LICENSE diff --git a/package/python-pymodbus/python-pymodbus.mk b/package/python-pymodbus/python-pymodbus.mk new file mode 100644 index 00000000..9135a4d0 --- /dev/null +++ b/package/python-pymodbus/python-pymodbus.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# python-pymodbus +# +################################################################################ + +PYTHON_PYMODBUS_VERSION = 2.2.0 +PYTHON_PYMODBUS_SOURCE = pymodbus-$(PYTHON_PYMODBUS_VERSION).tar.gz +PYTHON_PYMODBUS_SITE = $(call github,riptideio,pymodbus,v$(PYTHON_PYMODBUS_VERSION)) +PYTHON_PYMODBUS_SETUP_TYPE = setuptools +PYTHON_PYMODBUS_LICENSE = BSD-3-Clause +PYTHON_PYMODBUS_LICENSE_FILES = doc/LICENSE + +ifeq ($(BR2_PACKAGE_PYTHON),y) +# only needed/valid for python 3.x +define PYTHON_PYMODBUS_RM_PY3_FILES + rm -rf $(TARGET_DIR)/usr/lib/python*/site-packages/pymodbus/client/asynchronous/asyncio +endef + +PYTHON_PYMODBUS_POST_INSTALL_TARGET_HOOKS += PYTHON_PYMODBUS_RM_PY3_FILES +endif + +$(eval $(python-package)) diff --git a/package/python-pymysql/Config.in b/package/python-pymysql/Config.in new file mode 100644 index 00000000..75b447cb --- /dev/null +++ b/package/python-pymysql/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_PYMYSQL + bool "python-pymysql" + help + PyMySQL is a pure-Python MySQL client library. It follows + the DB-API 2.0. + + https://pypi.python.org/pypi/PyMySQL/ diff --git a/package/python-pymysql/python-pymysql.hash b/package/python-pymysql/python-pymysql.hash new file mode 100644 index 00000000..36323ca7 --- /dev/null +++ b/package/python-pymysql/python-pymysql.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pymysql/json +md5 e5d9183cc0a775ac29f9e0365cca6556 PyMySQL-0.9.3.tar.gz +sha256 d8c059dcd81dedb85a9f034d5e22dcb4442c0b201908bede99e306d65ea7c8e7 PyMySQL-0.9.3.tar.gz +# Locally computed sha256 checksums +sha256 314120dc65f0800f738a4b31400c76ee14decd1fbe77ce9c3540a421b86ea7b6 LICENSE diff --git a/package/python-pymysql/python-pymysql.mk b/package/python-pymysql/python-pymysql.mk new file mode 100644 index 00000000..edb08ee0 --- /dev/null +++ b/package/python-pymysql/python-pymysql.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pymysql +# +################################################################################ + +PYTHON_PYMYSQL_VERSION = 0.9.3 +PYTHON_PYMYSQL_SOURCE = PyMySQL-$(PYTHON_PYMYSQL_VERSION).tar.gz +PYTHON_PYMYSQL_SITE = https://files.pythonhosted.org/packages/da/15/23ba6592920e21cb40eb0fe0ea002d2b6177beb1ca8a4c1add5a8f32754d +PYTHON_PYMYSQL_LICENSE = MIT +PYTHON_PYMYSQL_LICENSE_FILES = LICENSE +PYTHON_PYMYSQL_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-pynacl/0001-Remove-spurious-requirement-for-wheel-596.patch b/package/python-pynacl/0001-Remove-spurious-requirement-for-wheel-596.patch new file mode 100644 index 00000000..4f4a76ce --- /dev/null +++ b/package/python-pynacl/0001-Remove-spurious-requirement-for-wheel-596.patch @@ -0,0 +1,34 @@ +From 44fb453931c611d4822343debe902cca8e1c8afe Mon Sep 17 00:00:00 2001 +From: Scott Kitterman +Date: Tue, 26 May 2020 20:08:16 -0400 +Subject: [PATCH] Remove spurious requirement for wheel (#596) + +* Remove spurious requirement for wheel + +* Put wheel back in pyproject.toml + +Co-authored-by: Scott Kitterman +Signed-off-by: James Hilliard +[james.hilliard1@gmail.com: backport from upstream commit +44fb453931c611d4822343debe902cca8e1c8afe] +--- + setup.py | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/setup.py b/setup.py +index 9319c1c..d82a7fe 100644 +--- a/setup.py ++++ b/setup.py +@@ -35,8 +35,7 @@ except ImportError: + + + requirements = ["six"] +-setup_requirements = ["setuptools", +- "wheel"] ++setup_requirements = ["setuptools"] + test_requirements = ["pytest>=3.2.1,!=3.3.0", + "hypothesis>=3.27.0"] + docs_requirements = ["sphinx>=1.6.5", +-- +2.25.1 + diff --git a/package/python-pynacl/Config.in b/package/python-pynacl/Config.in new file mode 100644 index 00000000..256f9d5e --- /dev/null +++ b/package/python-pynacl/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_PYNACL + bool "python-pynacl" + select BR2_PACKAGE_LIBSODIUM + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON_CFFI # runtime + help + Python binding to the Networking and Cryptography (NaCl) + library. + + https://pypi.python.org/pypi/PyNaCl diff --git a/package/python-pynacl/python-pynacl.hash b/package/python-pynacl/python-pynacl.hash new file mode 100644 index 00000000..b6ee2baf --- /dev/null +++ b/package/python-pynacl/python-pynacl.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pynacl/json +md5 8c6c57893327a694c72510fb620e4744 PyNaCl-1.4.0.tar.gz +sha256 54e9a2c849c742006516ad56a88f5c74bf2ce92c9f67435187c3c5953b346505 PyNaCl-1.4.0.tar.gz +# Locally computed sha256 checksums +sha256 d3174ad63e721d4c9dccb8ad4320848992d314369bc46319720b5802c9153fe9 LICENSE diff --git a/package/python-pynacl/python-pynacl.mk b/package/python-pynacl/python-pynacl.mk new file mode 100644 index 00000000..1e415599 --- /dev/null +++ b/package/python-pynacl/python-pynacl.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-pynacl +# +################################################################################ + +PYTHON_PYNACL_VERSION = 1.4.0 +PYTHON_PYNACL_SOURCE = PyNaCl-$(PYTHON_PYNACL_VERSION).tar.gz +PYTHON_PYNACL_SITE = https://files.pythonhosted.org/packages/cf/5a/25aeb636baeceab15c8e57e66b8aa930c011ec1c035f284170cacb05025e +PYTHON_PYNACL_LICENSE = Apache-2.0 +PYTHON_PYNACL_LICENSE_FILES = LICENSE +PYTHON_PYNACL_SETUP_TYPE = setuptools +PYTHON_PYNACL_DEPENDENCIES = libsodium host-python-cffi +PYTHON_PYNACL_ENV = SODIUM_INSTALL=system + +$(eval $(python-package)) diff --git a/package/python-pyopenssl/Config.in b/package/python-pyopenssl/Config.in new file mode 100644 index 00000000..c32e211e --- /dev/null +++ b/package/python-pyopenssl/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PYTHON_PYOPENSSL + bool "python-pyopenssl" + depends on BR2_INSTALL_LIBSTDCPP # python-cryptography + select BR2_PACKAGE_PYTHON_CRYPTOGRAPHY # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + help + Python wrapper module around the OpenSSL library. + + https://github.com/pyca/pyopenssl + +comment "python-pyopenssl needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/python-pyopenssl/python-pyopenssl.hash b/package/python-pyopenssl/python-pyopenssl.hash new file mode 100644 index 00000000..b457aeac --- /dev/null +++ b/package/python-pyopenssl/python-pyopenssl.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pyopenssl/json +md5 d9804fedbd1eb0c7d9243397b1fbf972 pyOpenSSL-19.1.0.tar.gz +sha256 9a24494b2602aaf402be5c9e30a0b82d4a5c67528fe8fb475e3f3bc00dd69507 pyOpenSSL-19.1.0.tar.gz +# Locally computed sha256 +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE diff --git a/package/python-pyopenssl/python-pyopenssl.mk b/package/python-pyopenssl/python-pyopenssl.mk new file mode 100644 index 00000000..a7ea7edf --- /dev/null +++ b/package/python-pyopenssl/python-pyopenssl.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-pyopenssl +# +################################################################################ + +PYTHON_PYOPENSSL_VERSION = 19.1.0 +PYTHON_PYOPENSSL_SOURCE = pyOpenSSL-$(PYTHON_PYOPENSSL_VERSION).tar.gz +PYTHON_PYOPENSSL_SITE = https://files.pythonhosted.org/packages/0d/1d/6cc4bd4e79f78be6640fab268555a11af48474fac9df187c3361a1d1d2f0 +PYTHON_PYOPENSSL_LICENSE = Apache-2.0 +PYTHON_PYOPENSSL_LICENSE_FILES = LICENSE +PYTHON_PYOPENSSL_CPE_ID_VENDOR = pyopenssl +PYTHON_PYOPENSSL_CPE_ID_PRODUCT = pyopenssl +PYTHON_PYOPENSSL_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-pyparsing/Config.in b/package/python-pyparsing/Config.in new file mode 100644 index 00000000..926ca07e --- /dev/null +++ b/package/python-pyparsing/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_PYPARSING + bool "python-pyparsing" + help + The pyparsing module is an alternative approach to creating + and executing simple grammars, vs. the traditional lex/yacc + approach, or the use of regular expressions. The pyparsing + module provides a library of classes that client code uses + to construct the grammar directly in Python code. + + https://github.com/pyparsing/pyparsing/ diff --git a/package/python-pyparsing/python-pyparsing.hash b/package/python-pyparsing/python-pyparsing.hash new file mode 100644 index 00000000..2c52ff08 --- /dev/null +++ b/package/python-pyparsing/python-pyparsing.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pyparsing/json +md5 f0953e47a0112f7a65aec2305ffdf7b4 pyparsing-2.4.7.tar.gz +sha256 c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1 pyparsing-2.4.7.tar.gz +# Locally computed sha256 checksums +sha256 10d5120a16805804ffda8b688c220bfb4e8f39741b57320604d455a309e01972 LICENSE diff --git a/package/python-pyparsing/python-pyparsing.mk b/package/python-pyparsing/python-pyparsing.mk new file mode 100644 index 00000000..0dacf237 --- /dev/null +++ b/package/python-pyparsing/python-pyparsing.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pyparsing +# +################################################################################ + +PYTHON_PYPARSING_VERSION = 2.4.7 +PYTHON_PYPARSING_SOURCE = pyparsing-$(PYTHON_PYPARSING_VERSION).tar.gz +PYTHON_PYPARSING_SITE = https://files.pythonhosted.org/packages/c1/47/dfc9c342c9842bbe0036c7f763d2d6686bcf5eb1808ba3e170afdb282210 +PYTHON_PYPARSING_LICENSE = MIT +PYTHON_PYPARSING_LICENSE_FILES = LICENSE +PYTHON_PYPARSING_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-pyparted/Config.in b/package/python-pyparted/Config.in new file mode 100644 index 00000000..0ed24f88 --- /dev/null +++ b/package/python-pyparted/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_PYTHON_PYPARTED + bool "python-pyparted" + depends on BR2_PACKAGE_PYTHON3 + depends on BR2_ENABLE_LOCALE # parted + depends on BR2_USE_WCHAR + select BR2_PACKAGE_PARTED + help + Python bindings for GNU parted (libparted). + + https://github.com/rhinstaller/pyparted + +comment "pyparted needs a toolchain w/ locale, wchar" + depends on BR2_PACKAGE_PYTHON3 + depends on !BR2_ENABLE_LOCALE || !BR2_USE_WCHAR diff --git a/package/python-pyparted/python-pyparted.hash b/package/python-pyparted/python-pyparted.hash new file mode 100644 index 00000000..0c3e4a15 --- /dev/null +++ b/package/python-pyparted/python-pyparted.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 d214288ae1a70b5925861ce01b3352378eb6b1419aa3b786f509e9ef2a501c02 python-pyparted-3.11.6.tar.gz +sha256 91df39d1816bfb17a4dda2d3d2c83b1f6f2d38d53e53e41e8f97ad5ac46a0cad COPYING diff --git a/package/python-pyparted/python-pyparted.mk b/package/python-pyparted/python-pyparted.mk new file mode 100644 index 00000000..9d48fd93 --- /dev/null +++ b/package/python-pyparted/python-pyparted.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pyparted +# +################################################################################ + +PYTHON_PYPARTED_VERSION = 3.11.6 +PYTHON_PYPARTED_SITE = $(call github,rhinstaller,pyparted,v$(PYTHON_PYPARTED_VERSION)) +PYTHON_PYPARTED_SETUP_TYPE = distutils +PYTHON_PYPARTED_LICENSE = GPL-2.0+ +PYTHON_PYPARTED_LICENSE_FILES = COPYING +PYTHON_PYPARTED_DEPENDENCIES = parted + +$(eval $(python-package)) diff --git a/package/python-pypcap/Config.in b/package/python-pypcap/Config.in new file mode 100644 index 00000000..9b410ecc --- /dev/null +++ b/package/python-pypcap/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_PYPCAP + bool "python-pypcap" + depends on BR2_PACKAGE_PYTHON + select BR2_PACKAGE_LIBPCAP + help + The pypcap module is an object-oriented wrapper of the C + libpcap library. + + https://github.com/dugsong/pypcap diff --git a/package/python-pypcap/python-pypcap.hash b/package/python-pypcap/python-pypcap.hash new file mode 100644 index 00000000..40db6b4f --- /dev/null +++ b/package/python-pypcap/python-pypcap.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 5716d97b39d40b79daf7b0c6a8c8c514f5f1de8f20561c8621ee62a90b93fb03 python-pypcap-6f46e7bf29a648256ddc732a7d0ec83d3ffca390.tar.gz +sha256 48306c284fdbdf836b880528c3bdd658deac47ed78ffeb24a4ca5a8c39a39304 LICENSE diff --git a/package/python-pypcap/python-pypcap.mk b/package/python-pypcap/python-pypcap.mk new file mode 100644 index 00000000..fc6fc6ed --- /dev/null +++ b/package/python-pypcap/python-pypcap.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# python-pypcap +# +################################################################################ + +PYTHON_PYPCAP_VERSION = 6f46e7bf29a648256ddc732a7d0ec83d3ffca390 +PYTHON_PYPCAP_SITE = $(call github,dugsong,pypcap,$(PYTHON_PYPCAP_VERSION)) +PYTHON_PYPCAP_LICENSE = BSD-3-Clause +PYTHON_PYPCAP_LICENSE_FILES = LICENSE +PYTHON_PYPCAP_SETUP_TYPE = distutils +PYTHON_PYPCAP_DEPENDENCIES = host-python-pyrex libpcap + +define PYTHON_PYPCAP_CONFIGURE_CMDS + $(HOST_DIR)/bin/python2 $(HOST_DIR)/bin/pyrexc $(@D)/pcap.pyx + (cd $(@D); \ + $(HOST_DIR)/bin/python setup.py \ + config --with-pcap=$(STAGING_DIR)/usr) +endef + +$(eval $(python-package)) diff --git a/package/python-pyqrcode/Config.in b/package/python-pyqrcode/Config.in new file mode 100644 index 00000000..01b7ae81 --- /dev/null +++ b/package/python-pyqrcode/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PYTHON_PYQRCODE + bool "python-pyqrcode" + select BR2_PACKAGE_PYTHON_PYEXPAT if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_PYEXPAT if BR2_PACKAGE_PYTHON3 # runtime + select BR2_PACKAGE_PYTHON_CODECSCJK if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_CODECSCJK if BR2_PACKAGE_PYTHON3 # runtime + help + A QR code generator written purely in Python with SVG, EPS, + PNG and terminal output. + + https://github.com/mnooner256/pyqrcode diff --git a/package/python-pyqrcode/python-pyqrcode.hash b/package/python-pyqrcode/python-pyqrcode.hash new file mode 100644 index 00000000..b54b4aad --- /dev/null +++ b/package/python-pyqrcode/python-pyqrcode.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/pyqrcode/json +md5 371f29f4b03bd2830c6e0319258b1259 PyQRCode-1.2.1.tar.gz +# Locally computed +sha256 fdbf7634733e56b72e27f9bce46e4550b75a3a2c420414035cae9d9d26b234d5 PyQRCode-1.2.1.tar.gz +sha256 bef0c3595451da5132dea99e288fb5dafcbc469e0643f993a4ba0a69980f5ec9 setup.py diff --git a/package/python-pyqrcode/python-pyqrcode.mk b/package/python-pyqrcode/python-pyqrcode.mk new file mode 100644 index 00000000..f3eac5a3 --- /dev/null +++ b/package/python-pyqrcode/python-pyqrcode.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pyqrcode +# +################################################################################ + +PYTHON_PYQRCODE_VERSION = 1.2.1 +PYTHON_PYQRCODE_SOURCE = PyQRCode-$(PYTHON_PYQRCODE_VERSION).tar.gz +PYTHON_PYQRCODE_SITE = https://pypi.python.org/packages/37/61/f07226075c347897937d4086ef8e55f0a62ae535e28069884ac68d979316 +PYTHON_PYQRCODE_SETUP_TYPE = setuptools +PYTHON_PYQRCODE_LICENSE = BSD-3-Clause +PYTHON_PYQRCODE_LICENSE_FILES = setup.py + +$(eval $(python-package)) diff --git a/package/python-pyqt5/0001-configure-skip-qtdetail.patch b/package/python-pyqt5/0001-configure-skip-qtdetail.patch new file mode 100644 index 00000000..b82f89e0 --- /dev/null +++ b/package/python-pyqt5/0001-configure-skip-qtdetail.patch @@ -0,0 +1,38 @@ +From 7ed5e15f2de747e383ba7eee66b646a7a66e6654 Mon Sep 17 00:00:00 2001 +From: Sergey Kostanbaev +Date: Wed, 29 Dec 2021 12:30:12 -0800 +Subject: [PATCH] Do not run qtdetail + + +qtdetail is a tool that generates qtdetail.out. Since this program is +cross-compiled, it's not possible to run it on the host. + +Consequently, python-pyqt5.mk generates the qtdetail.out file before +calling configure.py. + +Therefore, this patch makes sure that the pre-generated qtdetail.out +file is kept, and that qtdetail is not executed. + +Signed-off-by: Gwenhael Goavec-Merou +Signed-off-by: Sergey Kostanbaev +Signed-off-by: Adam Duskett +Refresh for 5.15.6 + +diff --git a/configure.py b/configure.py +index daa0f94..32f5b21 100644 +--- a/configure.py ++++ b/configure.py +@@ -2455,10 +2455,6 @@ def run_test_program(mname, test, verbose): + + out_file = 'cfgtest_' + mname + '.out' + +- # Create the output file, first making sure it doesn't exist. +- remove_file(out_file) +- run_command(test + ' ' + out_file, verbose) +- + if not os.access(out_file, os.F_OK): + error("%s failed to create %s. Make sure your Qt installation is correct." % (test, out_file)) + +-- +2.33.1 + diff --git a/package/python-pyqt5/0002-fix-QtCoremod.sip-syntax-error.patch b/package/python-pyqt5/0002-fix-QtCoremod.sip-syntax-error.patch new file mode 100644 index 00000000..d83c5e52 --- /dev/null +++ b/package/python-pyqt5/0002-fix-QtCoremod.sip-syntax-error.patch @@ -0,0 +1,29 @@ +From d004e17cd92f660cb386d91e14729a03cab087d4 Mon Sep 17 00:00:00 2001 +From: Adam Duskett +Date: Sun, 22 May 2022 13:23:27 -0700 +Subject: [PATCH] fix QtCoremod.sip syntax error + +Fixes PyQt5/bindings/QtCore/QtCoremod.sip:23: syntax error from the +python-sip-4 package. + +Signed-off-by: Adam Duskett +--- + sip/QtCore/QtCoremod.sip | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sip/QtCore/QtCoremod.sip b/sip/QtCore/QtCoremod.sip +index b525bc5..1e2b8ba 100644 +--- a/sip/QtCore/QtCoremod.sip ++++ b/sip/QtCore/QtCoremod.sip +@@ -20,7 +20,7 @@ + // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +-%Module(name=PyQt5.QtCore, call_super_init=True, default_VirtualErrorHandler=PyQt5, keyword_arguments="Optional", use_limited_api=True, py_ssize_t_clean=True) ++%Module(name=PyQt5.QtCore, call_super_init=True, default_VirtualErrorHandler=PyQt5, keyword_arguments="Optional", use_limited_api=True) + + %Timeline {Qt_5_0_0 Qt_5_0_1 Qt_5_0_2 Qt_5_1_0 Qt_5_1_1 Qt_5_2_0 Qt_5_2_1 Qt_5_3_0 Qt_5_3_1 Qt_5_3_2 Qt_5_4_0 Qt_5_4_1 Qt_5_4_2 Qt_5_5_0 Qt_5_5_1 Qt_5_6_0 Qt_5_6_1 Qt_5_6_2 Qt_5_6_3 Qt_5_6_4 Qt_5_6_5 Qt_5_6_6 Qt_5_6_7 Qt_5_6_8 Qt_5_6_9 Qt_5_7_0 Qt_5_7_1 Qt_5_8_0 Qt_5_8_1 Qt_5_9_0 Qt_5_9_1 Qt_5_9_2 Qt_5_9_3 Qt_5_9_4 Qt_5_9_5 Qt_5_9_6 Qt_5_9_7 Qt_5_9_8 Qt_5_9_9 Qt_5_10_0 Qt_5_10_1 Qt_5_11_0 Qt_5_11_1 Qt_5_11_2 Qt_5_11_3 Qt_5_12_0 Qt_5_12_1 Qt_5_12_2 Qt_5_12_3 Qt_5_12_4 Qt_5_13_0 Qt_5_14_0 Qt_5_15_0} + +-- +2.36.1 + diff --git a/package/python-pyqt5/Config.in b/package/python-pyqt5/Config.in new file mode 100644 index 00000000..9fa7676f --- /dev/null +++ b/package/python-pyqt5/Config.in @@ -0,0 +1,12 @@ +comment "python-pyqt5 needs Qt5" + depends on !BR2_PACKAGE_QT5 + +config BR2_PACKAGE_PYTHON_PYQT5 + bool "python-pyqt5" + depends on BR2_PACKAGE_QT5 + select BR2_PACKAGE_PYTHON_SIP + select BR2_PACKAGE_QT5BASE_GUI + help + Python bindings for Qt 5 + + http://www.riverbankcomputing.com/software/pyqt/ diff --git a/package/python-pyqt5/python-pyqt5.hash b/package/python-pyqt5/python-pyqt5.hash new file mode 100644 index 00000000..d1b7adf8 --- /dev/null +++ b/package/python-pyqt5/python-pyqt5.hash @@ -0,0 +1,6 @@ +# From https://pypi.org/pypi/PyQt5/json +md5 0c7fca60aa6ee13c235f68576d9c7bed PyQt5-5.15.6.tar.gz + +# Locally calculated +sha256 80343bcab95ffba619f2ed2467fd828ffeb0a251ad7225be5fc06dcc333af452 PyQt5-5.15.6.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE diff --git a/package/python-pyqt5/python-pyqt5.mk b/package/python-pyqt5/python-pyqt5.mk new file mode 100644 index 00000000..54b7f201 --- /dev/null +++ b/package/python-pyqt5/python-pyqt5.mk @@ -0,0 +1,180 @@ +################################################################################ +# +# python-pyqt5 +# +################################################################################ + +PYTHON_PYQT5_VERSION = 5.15.6 +PYTHON_PYQT5_SOURCE = PyQt5-$(PYTHON_PYQT5_VERSION).tar.gz +PYTHON_PYQT5_SITE = https://files.pythonhosted.org/packages/3b/27/fd81188a35f37be9b3b4c2db1654d9439d1418823916fe702ac3658c9c41 +PYTHON_PYQT5_LICENSE = GPL-3.0 +PYTHON_PYQT5_LICENSE_FILES = LICENSE + +PYTHON_PYQT5_DEPENDENCIES = python-sip host-python-sip qt5base +PYTHON_PYQT5_MODULES = \ + QtCore QtGui \ + $(if $(BR2_PACKAGE_QT5BASE_DBUS),QtDBus) \ + $(if $(BR2_PACKAGE_QT5BASE_NETWORK),QtNetwork) \ + $(if $(BR2_PACKAGE_QT5BASE_OPENGL_LIB),QtOpenGL) \ + $(if $(BR2_PACKAGE_QT5BASE_PRINTSUPPORT),QtPrintSupport) \ + $(if $(BR2_PACKAGE_QT5BASE_XML),QtXml) + +ifeq ($(BR2_PACKAGE_QT5BASE_WIDGETS),y) +PYTHON_PYQT5_MODULES += QtWidgets + +# QtSql needs QtWidgets +ifeq ($(BR2_PACKAGE_QT5BASE_SQL),y) +PYTHON_PYQT5_MODULES += QtSql +endif + +# QtTest needs QtWidgets +ifeq ($(BR2_PACKAGE_QT5BASE_TEST),y) +PYTHON_PYQT5_MODULES += QtTest +endif + +# QtSvg needs QtWidgets +ifeq ($(BR2_PACKAGE_QT5SVG),y) +PYTHON_PYQT5_DEPENDENCIES += qt5svg +PYTHON_PYQT5_MODULES += QtSvg +endif +endif + +ifeq ($(BR2_PACKAGE_QT5CONNECTIVITY),y) +PYTHON_PYQT5_DEPENDENCIES += qt5connectivity +PYTHON_PYQT5_MODULES += QtBluetooth QtNfc +endif + +ifeq ($(BR2_PACKAGE_QT5DECLARATIVE),y) +PYTHON_PYQT5_DEPENDENCIES += qt5declarative +PYTHON_PYQT5_MODULES += QtQml + +# QtQuick module needs opengl +ifeq ($(BR2_PACKAGE_QT5DECLARATIVE_QUICK)$(BR2_PACKAGE_QT5BASE_OPENGL_LIB),yy) +PYTHON_PYQT5_MODULES += \ + QtQuick \ + $(if $(BR2_PACKAGE_QT5BASE_WIDGETS),QtQuickWidgets) +endif +endif + +ifeq ($(BR2_PACKAGE_QT5ENGINIO),y) +PYTHON_PYQT5_DEPENDENCIES += qt5enginio +PYTHON_PYQT5_MODULES += Enginio +endif + +ifeq ($(BR2_PACKAGE_QT5LOCATION),y) +PYTHON_PYQT5_DEPENDENCIES += qt5location +PYTHON_PYQT5_MODULES += QtPositioning +ifeq ($(BR2_PACKAGE_QT5DECLARATIVE_QUICK),y) +PYTHON_PYQT5_MODULES += QtLocation +endif +endif + +ifeq ($(BR2_PACKAGE_QT5MULTIMEDIA),y) +PYTHON_PYQT5_DEPENDENCIES += qt5multimedia +PYTHON_PYQT5_MODULES += \ + QtMultimedia \ + $(if $(BR2_PACKAGE_QT5BASE_WIDGETS),QtMultimediaWidgets) +endif + +ifeq ($(BR2_PACKAGE_QT5SENSORS),y) +PYTHON_PYQT5_DEPENDENCIES += qt5sensors +PYTHON_PYQT5_MODULES += QtSensors +endif + +ifeq ($(BR2_PACKAGE_QT5SERIALPORT),y) +PYTHON_PYQT5_DEPENDENCIES += qt5serialport +PYTHON_PYQT5_MODULES += QtSerialPort +endif + +ifeq ($(BR2_PACKAGE_QT5WEBCHANNEL),y) +PYTHON_PYQT5_DEPENDENCIES += qt5webchannel +PYTHON_PYQT5_MODULES += QtWebChannel +endif + +ifeq ($(BR2_PACKAGE_QT5WEBKIT),y) +PYTHON_PYQT5_DEPENDENCIES += qt5webkit +PYTHON_PYQT5_MODULES += \ + QtWebKit \ + $(if $(BR2_PACKAGE_QT5BASE_WIDGETS),QtWebKitWidgets) +endif + +ifeq ($(BR2_PACKAGE_QT5WEBSOCKETS),y) +PYTHON_PYQT5_DEPENDENCIES += qt5websockets +PYTHON_PYQT5_MODULES += QtWebSockets +endif + +ifeq ($(BR2_PACKAGE_QT5X11EXTRAS),y) +PYTHON_PYQT5_DEPENDENCIES += qt5x11extras +PYTHON_PYQT5_MODULES += QtX11Extras +endif + +ifeq ($(BR2_PACKAGE_QT5XMLPATTERNS),y) +PYTHON_PYQT5_DEPENDENCIES += qt5xmlpatterns +PYTHON_PYQT5_MODULES += QtXmlPatterns +endif + +PYTHON_PYQT5_QTCORE_LICENSE = Open Source + +PYTHON_PYQT5_QTCORE_TYPE = shared + +# Turn off features that aren't available in current qt configuration +PYTHON_PYQT5_QTCORE_DISABLE_FEATURES += $(if $(BR2_PACKAGE_QT5BASE_OPENGL),,PyQt_OpenGL) +PYTHON_PYQT5_QTCORE_DISABLE_FEATURES += $(if $(BR2_PACKAGE_QT5BASE_OPENGL_DESKTOP),,PyQt_Desktop_OpenGL) +PYTHON_PYQT5_QTCORE_DISABLE_FEATURES += $(if $(BR2_PACKAGE_OPENSSL),,PyQt_SSL) + +define PYTHON_PYQT5_QTCORE + echo $(1) >> $(2)/cfgtest_QtCore.out +endef + +# Since we can't run generate cfgtest_QtCore.out by running qtdetail on target device +# we must generate the configuration. +define PYTHON_PYQT5_GENERATE_QTCORE + $(RM) -f $(1)/cfgtest_QtCore.out + $(call PYTHON_PYQT5_QTCORE,$(PYTHON_PYQT5_QTCORE_LICENSE),$(1)) + $(call PYTHON_PYQT5_QTCORE,$(PYTHON_PYQT5_QTCORE_TYPE),$(1)) + $(foreach f,$(PYTHON_PYQT5_QTCORE_DISABLE_FEATURES), + $(call PYTHON_PYQT5_QTCORE,$(f),$(1)) \ + ) +endef + +# The file "qt.conf" can be used to override the hard-coded paths that are +# compiled into the Qt library. We need it to make "qmake" relocatable and +# tweak the per-package install pathes +PYTHON_PYQT5_PRE_CONFIGURE_HOOKS += QT5_QT_CONF_FIXUP + +PYTHON_PYQT5_CONF_OPTS = \ + --bindir $(TARGET_DIR)/usr/bin \ + --destdir $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/site-packages \ + --qmake $(HOST_DIR)/bin/qmake \ + --sysroot $(STAGING_DIR)/usr \ + -w --confirm-license \ + --no-designer-plugin \ + --no-docstrings \ + --no-sip-files \ + --assume-shared \ + $(foreach module,$(PYTHON_PYQT5_MODULES),--enable=$(module)) + +define PYTHON_PYQT5_CONFIGURE_CMDS + $(call PYTHON_PYQT5_GENERATE_QTCORE,$(@D)) + (cd $(@D); \ + $(TARGET_MAKE_ENV) \ + $(TARGET_CONFIGURE_OPTS) \ + $(HOST_DIR)/bin/python configure.py \ + $(PYTHON_PYQT5_CONF_OPTS) \ + ) +endef + +define PYTHON_PYQT5_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) +endef + +# __init__.py is needed to import PyQt5 +# __init__.pyc is needed if BR2_PACKAGE_PYTHON_PYC_ONLY is set +define PYTHON_PYQT5_INSTALL_TARGET_CMDS + # Parallel install is not supported. + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE1) -C $(@D) install + touch $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/site-packages/PyQt5/__init__.py + $(RM) -rf $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/site-packages/PyQt5/uic/port_v2 +endef + +$(eval $(generic-package)) diff --git a/package/python-pyratemp/Config.in b/package/python-pyratemp/Config.in new file mode 100644 index 00000000..9a299d1a --- /dev/null +++ b/package/python-pyratemp/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_PYRATEMP + bool "python-pyratemp" + help + python-pyratemp is a Python library for doing html + templates. written entirely in Python, that is designed to + be very easy to use and very like writing Python. + + https://pypi.python.org/pypi/pyratemp/ diff --git a/package/python-pyratemp/python-pyratemp.hash b/package/python-pyratemp/python-pyratemp.hash new file mode 100644 index 00000000..91738321 --- /dev/null +++ b/package/python-pyratemp/python-pyratemp.hash @@ -0,0 +1,5 @@ +#md5 from https://pypi.python.org/pypi?:action=show_md5&digest=e4bbe5d4a98016efef882b2b2f47defb +md5 e4bbe5d4a98016efef882b2b2f47defb pyratemp-0.3.2.tgz +# Locally calculated: +sha256 c45ed656ada482a02fe780495f37a695e7671accb04f918f7e7f18abf877bc71 pyratemp-0.3.2.tgz +sha256 3de57a97f9c8492808867ae2ac2b33b422a8a34d29d0ea981b9e85c0963462db LICENSE diff --git a/package/python-pyratemp/python-pyratemp.mk b/package/python-pyratemp/python-pyratemp.mk new file mode 100644 index 00000000..055fb304 --- /dev/null +++ b/package/python-pyratemp/python-pyratemp.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pyratemp +# +################################################################################ + +PYTHON_PYRATEMP_VERSION = 0.3.2 +PYTHON_PYRATEMP_SOURCE = pyratemp-$(PYTHON_PYRATEMP_VERSION).tgz +PYTHON_PYRATEMP_SITE = https://pypi.python.org/packages/source/p/pyratemp +PYTHON_PYRATEMP_LICENSE = MIT +PYTHON_PYRATEMP_LICENSE_FILES = LICENSE +PYTHON_PYRATEMP_SETUP_TYPE = distutils + +$(eval $(python-package)) diff --git a/package/python-pyrex/python-pyrex.hash b/package/python-pyrex/python-pyrex.hash new file mode 100644 index 00000000..e8963558 --- /dev/null +++ b/package/python-pyrex/python-pyrex.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 5f87df06831d0b3412eb4bc9d3fc2ee7bfae1b913d7da8c23ab2bf5699fb6b50 Pyrex-0.9.9.tar.gz +sha256 5c1aec55fc8c399ec23968ddb2117eec8f7a53f002c15472a8b0aa7426790700 LICENSE.txt diff --git a/package/python-pyrex/python-pyrex.mk b/package/python-pyrex/python-pyrex.mk new file mode 100644 index 00000000..6284a5f2 --- /dev/null +++ b/package/python-pyrex/python-pyrex.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-pyrex +# +################################################################################ + +PYTHON_PYREX_VERSION = 0.9.9 +PYTHON_PYREX_SOURCE = Pyrex-$(PYTHON_PYREX_VERSION).tar.gz +PYTHON_PYREX_SITE = http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex +PYTHON_PYREX_LICENSE = Apache-2.0 +PYTHON_PYREX_LICENSE_FILES = LICENSE.txt +PYTHON_PYREX_SETUP_TYPE = distutils +HOST_PYTHON_PYREX_NEEDS_HOST_PYTHON = python2 + +$(eval $(host-python-package)) diff --git a/package/python-pyro/Config.in b/package/python-pyro/Config.in new file mode 100644 index 00000000..6372a1d3 --- /dev/null +++ b/package/python-pyro/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_PYRO + bool "python-pyro" + depends on BR2_PACKAGE_PYTHON + help + python-pyro is a Python library stands for PYthon Remote + Objects. It is an advanced and powerful Distributed Object + Technology system written entirely in Python, that is + designed to be very easy to use.. + + https://pypi.python.org/pypi/Pyro/ diff --git a/package/python-pyro/python-pyro.hash b/package/python-pyro/python-pyro.hash new file mode 100644 index 00000000..c22b66dd --- /dev/null +++ b/package/python-pyro/python-pyro.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/pyro/json +md5 59d4d3f4a8786776c9d7f9051b8f1a69 Pyro-3.16.tar.gz +# Locally computed +sha256 1bed508453ef7a7556b51424a58101af2349b662baab7e7331c5cb85dbe7e578 Pyro-3.16.tar.gz +sha256 7c14017a2f543384bfcde86043758b68d023b47bf09700a7df6dacbae9c82103 LICENSE diff --git a/package/python-pyro/python-pyro.mk b/package/python-pyro/python-pyro.mk new file mode 100644 index 00000000..235575c1 --- /dev/null +++ b/package/python-pyro/python-pyro.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-pyro +# +################################################################################ + +PYTHON_PYRO_VERSION = 3.16 +PYTHON_PYRO_SOURCE = Pyro-$(PYTHON_PYRO_VERSION).tar.gz +PYTHON_PYRO_SITE = https://pypi.python.org/packages/61/68/0978adae315261b87acd216517c2c7f00780396e4d1426c5412458c6a28f +PYTHON_PYRO_LICENSE = MIT +PYTHON_PYRO_LICENSE_FILES = LICENSE +PYTHON_PYRO_CPE_ID_VENDOR = pyro_project +PYTHON_PYRO_CPE_ID_PRODUCT = pyro +PYTHON_PYRO_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-pyroute2/Config.in b/package/python-pyroute2/Config.in new file mode 100644 index 00000000..5df0a63d --- /dev/null +++ b/package/python-pyroute2/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_PYROUTE2 + bool "python-pyroute2" + select BR2_PACKAGE_PYTHON_SQLITE if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_SQLITE if BR2_PACKAGE_PYTHON3 + help + Python netlink library - Linux network / netns / wireless / + ipset configuration. + + https://github.com/svinota/pyroute2 diff --git a/package/python-pyroute2/python-pyroute2.hash b/package/python-pyroute2/python-pyroute2.hash new file mode 100644 index 00000000..35f397b1 --- /dev/null +++ b/package/python-pyroute2/python-pyroute2.hash @@ -0,0 +1,7 @@ +# md5, sha256 from https://pypi.org/pypi/pyroute2/json +md5 371683b62314211b8bc9807ac8ef1144 pyroute2-0.5.7.tar.gz +sha256 963fce07da2841456d39e3b932b071f6de28d23dadfae014022d67a752916f98 pyroute2-0.5.7.tar.gz +# Locally computed sha256 +sha256 4739b32a2478e9c204bf010bad5d565d188e59ff905e3c8f71fe3398098b7093 LICENSE.Apache.v2 +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.GPL.v2 +sha256 e329111754f1340de20b6084cae4d264b7b4fc8fb48964173f8ee0cb7440a51c README.license.md diff --git a/package/python-pyroute2/python-pyroute2.mk b/package/python-pyroute2/python-pyroute2.mk new file mode 100644 index 00000000..44c42d10 --- /dev/null +++ b/package/python-pyroute2/python-pyroute2.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pyroute2 +# +################################################################################ + +PYTHON_PYROUTE2_VERSION = 0.5.7 +PYTHON_PYROUTE2_SOURCE = pyroute2-$(PYTHON_PYROUTE2_VERSION).tar.gz +PYTHON_PYROUTE2_SITE = https://files.pythonhosted.org/packages/6b/94/2a5f6c11369a21efd27a0b4cb92adf5012da7acdbce7e78055710986ca23 +PYTHON_PYROUTE2_LICENSE = Apache-2.0 or GPL-2.0+ +PYTHON_PYROUTE2_LICENSE_FILES = LICENSE.Apache.v2 LICENSE.GPL.v2 README.license.md +PYTHON_PYROUTE2_SETUP_TYPE = distutils + +$(eval $(python-package)) diff --git a/package/python-pysendfile/Config.in b/package/python-pysendfile/Config.in new file mode 100644 index 00000000..5a919dd9 --- /dev/null +++ b/package/python-pysendfile/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_PYSENDFILE + bool "python-pysendfile" + help + A Python interface to sendfile(2) syscall + + https://github.com/giampaolo/pysendfile diff --git a/package/python-pysendfile/python-pysendfile.hash b/package/python-pysendfile/python-pysendfile.hash new file mode 100644 index 00000000..d1aff6ae --- /dev/null +++ b/package/python-pysendfile/python-pysendfile.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 f4ca8a7f0be67e3d710c0633dd9aadab6881203c31cb9eb9be4f10361ad3f937 python-pysendfile-2.0.1.tar.gz +sha256 259f433563cfe0296c84c00381c600e82e0ab1b617ce20fe6e7f555a2b95af26 LICENSE diff --git a/package/python-pysendfile/python-pysendfile.mk b/package/python-pysendfile/python-pysendfile.mk new file mode 100644 index 00000000..bb8f057d --- /dev/null +++ b/package/python-pysendfile/python-pysendfile.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-pysendfile +# +################################################################################ + +PYTHON_PYSENDFILE_VERSION = 2.0.1 +PYTHON_PYSENDFILE_SITE = $(call github,giampaolo,pysendfile,release-$(PYTHON_PYSENDFILE_VERSION)) +PYTHON_PYSENDFILE_SETUP_TYPE = setuptools +PYTHON_PYSENDFILE_LICENSE = MIT +PYTHON_PYSENDFILE_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-pysftp/Config.in b/package/python-pysftp/Config.in new file mode 100644 index 00000000..0866df30 --- /dev/null +++ b/package/python-pysftp/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PYTHON_PYSFTP + bool "python-pysftp" + depends on BR2_INSTALL_LIBSTDCPP # python-paramiko + select BR2_PACKAGE_PYTHON_PARAMIKO # runtime + help + A friendly face on SFTP. + + https://bitbucket.org/dundeemt/pysftp + +comment "python-pysftp needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/python-pysftp/python-pysftp.hash b/package/python-pysftp/python-pysftp.hash new file mode 100644 index 00000000..75102ab8 --- /dev/null +++ b/package/python-pysftp/python-pysftp.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pysftp/json +md5 abc55b7122de3e86f0d547301f4ddf0c pysftp-0.2.9.tar.gz +sha256 fbf55a802e74d663673400acd92d5373c1c7ee94d765b428d9f977567ac4854a pysftp-0.2.9.tar.gz +# Locally computed sha256 checksums +sha256 e648e3c7f439b52222a785a590223a0f7bad1a8a5fb89157d80d13123c7dcd25 LICENSE.txt diff --git a/package/python-pysftp/python-pysftp.mk b/package/python-pysftp/python-pysftp.mk new file mode 100644 index 00000000..4841afd0 --- /dev/null +++ b/package/python-pysftp/python-pysftp.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pysftp +# +################################################################################ + +PYTHON_PYSFTP_VERSION = 0.2.9 +PYTHON_PYSFTP_SOURCE = pysftp-$(PYTHON_PYSFTP_VERSION).tar.gz +PYTHON_PYSFTP_SITE = https://files.pythonhosted.org/packages/36/60/45f30390a38b1f92e0a8cf4de178cd7c2bc3f874c85430e40ccf99df8fe7 +PYTHON_PYSFTP_SETUP_TYPE = setuptools +PYTHON_PYSFTP_LICENSE = BSD-3-Clause +PYTHON_PYSFTP_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-pysmb/Config.in b/package/python-pysmb/Config.in new file mode 100644 index 00000000..61d7c2a0 --- /dev/null +++ b/package/python-pysmb/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_PYTHON_PYSMB + bool "python-pysmb" + depends on BR2_INSTALL_LIBSTDCPP + select BR2_PACKAGE_PYTHON_PYASN1 + help + pysmb is an experimental SMB/CIFS library written in Python. + It implements the client-side SMB/CIFS protocol (SMB1 and + SMB2) which allows your Python application to access and + transfer files to/from SMB/CIFS shared folders like your + Windows file sharing and Samba folders. + + https://miketeo.net/wp/index.php/projects/pysmb + +comment "python-pysmb needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/python-pysmb/python-pysmb.hash b/package/python-pysmb/python-pysmb.hash new file mode 100644 index 00000000..94ff33ea --- /dev/null +++ b/package/python-pysmb/python-pysmb.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/pysmb/json +md5 e6f9ce0032db528aae060f7019bd409c pysmb-1.1.19.tar.gz +# Locally computed +sha256 fa4e6b4a4f2afbfbd71e9179c491f8c77bc2ad19e0bc866d7c6cbfa9ae272602 pysmb-1.1.19.tar.gz +sha256 2b1a0a56543c1bda07f5583dddaf544442c139d3f46747d4700c7031ef354c14 LICENSE diff --git a/package/python-pysmb/python-pysmb.mk b/package/python-pysmb/python-pysmb.mk new file mode 100644 index 00000000..1b4c1879 --- /dev/null +++ b/package/python-pysmb/python-pysmb.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pysmb +# +################################################################################ + +PYTHON_PYSMB_VERSION = 1.1.19 +PYTHON_PYSMB_SOURCE = pysmb-$(PYTHON_PYSMB_VERSION).tar.gz +PYTHON_PYSMB_SITE = https://pypi.python.org/packages/f9/e7/1fd7faaa946cc6b43ce85bb7a177b75a4718d9c5e291201fec00112b497c +PYTHON_PYSMB_LICENSE = Libpng +PYTHON_PYSMB_LICENSE_FILES = LICENSE +PYTHON_PYSMB_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-pysmi/Config.in b/package/python-pysmi/Config.in new file mode 100644 index 00000000..2e4453d8 --- /dev/null +++ b/package/python-pysmi/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_PYSMI + bool "python-pysmi" + select BR2_PACKAGE_PYTHON_PLY # runtime + help + SNMP SMI/MIB Parser. + + https://github.com/etingof/pysmi diff --git a/package/python-pysmi/python-pysmi.hash b/package/python-pysmi/python-pysmi.hash new file mode 100644 index 00000000..b0c7a5d2 --- /dev/null +++ b/package/python-pysmi/python-pysmi.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pysmi/json +md5 10a9dd140ad512eed9f37344df83ce9d pysmi-0.3.4.tar.gz +sha256 bd15a15020aee8376cab5be264c26330824a8b8164ed0195bd402dd59e4e8f7c pysmi-0.3.4.tar.gz +# Locally computed sha256 checksums +sha256 c43704eafcfa2bc33e56168f2b498c3c34a1d7865855626a52b5af411fc5837f LICENSE.rst diff --git a/package/python-pysmi/python-pysmi.mk b/package/python-pysmi/python-pysmi.mk new file mode 100644 index 00000000..2aee27b1 --- /dev/null +++ b/package/python-pysmi/python-pysmi.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pysmi +# +################################################################################ + +PYTHON_PYSMI_VERSION = 0.3.4 +PYTHON_PYSMI_SOURCE = pysmi-$(PYTHON_PYSMI_VERSION).tar.gz +PYTHON_PYSMI_SITE = https://files.pythonhosted.org/packages/52/42/ddaeb06ff551672b17b77f81bc2e26b7c6060b28fe1552226edc6476ce37 +PYTHON_PYSMI_SETUP_TYPE = setuptools +PYTHON_PYSMI_LICENSE = BSD-2-Clause +PYTHON_PYSMI_LICENSE_FILES = LICENSE.rst + +$(eval $(python-package)) diff --git a/package/python-pysnmp-mibs/Config.in b/package/python-pysnmp-mibs/Config.in new file mode 100644 index 00000000..521d95ea --- /dev/null +++ b/package/python-pysnmp-mibs/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PYTHON_PYSNMP_MIBS + bool "python-pysnmp-mibs" + depends on BR2_INSTALL_LIBSTDCPP # pysnmp -> pyasn + select BR2_PACKAGE_PYTHON_PYSNMP + help + PySNMP MIBs is a set of IETF & IANA MIBs pre-compiled and + packaged to simplify their use with the PySNMP library. + + http://pysnmp.sf.net + +comment "python-pysnmp-libs needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/python-pysnmp-mibs/python-pysnmp-mibs.hash b/package/python-pysnmp-mibs/python-pysnmp-mibs.hash new file mode 100644 index 00000000..22d8dcb4 --- /dev/null +++ b/package/python-pysnmp-mibs/python-pysnmp-mibs.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/pysnmp-mibs/json +md5 01845c4595d87d3c3485c0449616cbda pysnmp-mibs-0.1.6.tar.gz +# Locally computed +sha256 00fa321ca598e8a14c0ad98702bf10fb5e9d57b7d06bb99dc818fea07683720c pysnmp-mibs-0.1.6.tar.gz +sha256 361eda483f7fac1f8cca4e16c340fa07a1cad2bf1200577a01075745233b406c LICENSE.txt diff --git a/package/python-pysnmp-mibs/python-pysnmp-mibs.mk b/package/python-pysnmp-mibs/python-pysnmp-mibs.mk new file mode 100644 index 00000000..9772b78c --- /dev/null +++ b/package/python-pysnmp-mibs/python-pysnmp-mibs.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-pysnmp-mibs +# +################################################################################ + +PYTHON_PYSNMP_MIBS_VERSION = 0.1.6 +PYTHON_PYSNMP_MIBS_SOURCE = pysnmp-mibs-$(PYTHON_PYSNMP_MIBS_VERSION).tar.gz +PYTHON_PYSNMP_MIBS_SITE = https://pypi.python.org/packages/bf/7c/99ab192af934ed5d41ceef92a1b949b41652f29b46241b902ffec55642f4 +PYTHON_PYSNMP_MIBS_SETUP_TYPE = setuptools +PYTHON_PYSNMP_MIBS_LICENSE = BSD-3-Clause +PYTHON_PYSNMP_MIBS_LICENSE_FILES = LICENSE.txt + +PYTHON_PYSNMP_MIBS_DEPENDENCIES = python-pysnmp + +$(eval $(python-package)) diff --git a/package/python-pysnmp/Config.in b/package/python-pysnmp/Config.in new file mode 100644 index 00000000..a034b168 --- /dev/null +++ b/package/python-pysnmp/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_PYSNMP + bool "python-pysnmp" + select BR2_PACKAGE_PYTHON_PYSMI # runtime + select BR2_PACKAGE_PYTHON_PYCRYPTODOMEX # runtime + select BR2_PACKAGE_PYTHON_PYASN1 # runtime + help + PySNMP is a cross-platform, pure-Python SNMP engine + implementation. + + http://pysnmp.sf.net diff --git a/package/python-pysnmp/python-pysnmp.hash b/package/python-pysnmp/python-pysnmp.hash new file mode 100644 index 00000000..582f9d66 --- /dev/null +++ b/package/python-pysnmp/python-pysnmp.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pysnmp/json +md5 2222880259daf6e2cb322e938c818276 pysnmp-4.4.12.tar.gz +sha256 0c3dbef2f958caca96071fe5c19de43e9c1b0484ab02a0cf08b190bcee768ba9 pysnmp-4.4.12.tar.gz +# Locally computed sha256 checksums +sha256 d0b2edd772164395320fc5ad7dfaa9806fa038fb29762b347c549891d7a79237 LICENSE.rst diff --git a/package/python-pysnmp/python-pysnmp.mk b/package/python-pysnmp/python-pysnmp.mk new file mode 100644 index 00000000..520ce287 --- /dev/null +++ b/package/python-pysnmp/python-pysnmp.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pysnmp +# +################################################################################ + +PYTHON_PYSNMP_VERSION = 4.4.12 +PYTHON_PYSNMP_SOURCE = pysnmp-$(PYTHON_PYSNMP_VERSION).tar.gz +PYTHON_PYSNMP_SITE = https://files.pythonhosted.org/packages/4e/75/72f64c451bf5884715f84f8217b69b4025da0b67628d611cd14a5b7db217 +PYTHON_PYSNMP_SETUP_TYPE = setuptools +PYTHON_PYSNMP_LICENSE = BSD-3-Clause +PYTHON_PYSNMP_LICENSE_FILES = LICENSE.rst + +$(eval $(python-package)) diff --git a/package/python-pysocks/Config.in b/package/python-pysocks/Config.in new file mode 100644 index 00000000..cd38d4d3 --- /dev/null +++ b/package/python-pysocks/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_PYSOCKS + bool "python-pysocks" + help + A Python SOCKS client module. + + https://github.com/Anorov/PySocks diff --git a/package/python-pysocks/python-pysocks.hash b/package/python-pysocks/python-pysocks.hash new file mode 100644 index 00000000..dc61bfbc --- /dev/null +++ b/package/python-pysocks/python-pysocks.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pysocks/json +md5 89b1a6865c61bae67a32417517612ee6 PySocks-1.7.1.tar.gz +sha256 3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0 PySocks-1.7.1.tar.gz +# Locally computed sha256 checksums +sha256 7027e214e014eb78b7adcc1ceda5aca713a79fc4f6a0c52c9da5b3e707e6ffe9 LICENSE diff --git a/package/python-pysocks/python-pysocks.mk b/package/python-pysocks/python-pysocks.mk new file mode 100644 index 00000000..ccb70fc5 --- /dev/null +++ b/package/python-pysocks/python-pysocks.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pysocks +# +################################################################################ + +PYTHON_PYSOCKS_VERSION = 1.7.1 +PYTHON_PYSOCKS_SOURCE = PySocks-$(PYTHON_PYSOCKS_VERSION).tar.gz +PYTHON_PYSOCKS_SITE = https://files.pythonhosted.org/packages/bd/11/293dd436aea955d45fc4e8a35b6ae7270f5b8e00b53cf6c024c83b657a11 +PYTHON_PYSOCKS_LICENSE = BSD-3-Clause +PYTHON_PYSOCKS_LICENSE_FILES = LICENSE +PYTHON_PYSOCKS_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-pytablereader/Config.in b/package/python-pytablereader/Config.in new file mode 100644 index 00000000..e6b2a4a3 --- /dev/null +++ b/package/python-pytablereader/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_PYTHON_PYTABLEREADER + bool "python-pytablereader" + depends on BR2_PACKAGE_PYTHON3 # python-mbstrdecoder, python-pathpy + select BR2_PACKAGE_PYTHON_BEAUTIFULSOUP4 # runtime + select BR2_PACKAGE_PYTHON_DATAPROPERTY # runtime + select BR2_PACKAGE_PYTHON_JSONSCHEMA # runtime + select BR2_PACKAGE_PYTHON_MBSTRDECODER # runtime + select BR2_PACKAGE_PYTHON_PATHPY # runtime + select BR2_PACKAGE_PYTHON_PATHVALIDATE # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON_TABLEDATA # runtime + select BR2_PACKAGE_PYTHON_TYPEPY # runtime + help + A python library to load structured table data from + files/URL with various data formats: + CSV/Excel/HTML/JSON/LTSV/Markdown/TSV. + + https://github.com/thombashi/pytablereader diff --git a/package/python-pytablereader/python-pytablereader.hash b/package/python-pytablereader/python-pytablereader.hash new file mode 100644 index 00000000..fb873caf --- /dev/null +++ b/package/python-pytablereader/python-pytablereader.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pytablereader/json +md5 23ba6121e2f916dfbf4015516779dfcd pytablereader-0.26.1.tar.gz +sha256 f2e1477de8886267b765af7861baacc65606761bfabb0689f118cc5d27861f26 pytablereader-0.26.1.tar.gz +# Locally computed sha256 checksums +sha256 7fcef461a93fea587224132a865d1285969c9bec15baf59caeb7a8c7638a8744 LICENSE diff --git a/package/python-pytablereader/python-pytablereader.mk b/package/python-pytablereader/python-pytablereader.mk new file mode 100644 index 00000000..0f9e4c59 --- /dev/null +++ b/package/python-pytablereader/python-pytablereader.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pytablereader +# +################################################################################ + +PYTHON_PYTABLEREADER_VERSION = 0.26.1 +PYTHON_PYTABLEREADER_SOURCE = pytablereader-$(PYTHON_PYTABLEREADER_VERSION).tar.gz +PYTHON_PYTABLEREADER_SITE = https://files.pythonhosted.org/packages/1e/bc/f60da8a733cd87215d8533f28536f8149eca3b898bbca346b37b6c915d8d +PYTHON_PYTABLEREADER_SETUP_TYPE = setuptools +PYTHON_PYTABLEREADER_LICENSE = MIT +PYTHON_PYTABLEREADER_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-pytablewriter/Config.in b/package/python-pytablewriter/Config.in new file mode 100644 index 00000000..b95ee357 --- /dev/null +++ b/package/python-pytablewriter/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_PYTHON_PYTABLEWRITER + bool "python-pytablewriter" + depends on BR2_PACKAGE_PYTHON3 # python-dataproperty, python-mbstrdecoder + select BR2_PACKAGE_PYTHON_DATAPROPERTY # runtime + select BR2_PACKAGE_PYTHON_MBSTRDECODER # runtime + select BR2_PACKAGE_PYTHON_MSGFY # runtime + select BR2_PACKAGE_PYTHON_PATHVALIDATE # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON_TABLEDATA # runtime + select BR2_PACKAGE_PYTHON_TYPEPY # runtime + help + pytablewriter is a python library to write a table in various + formats: CSV, HTML, JavaScript, JSON, Markdown, Excel, Pandas, + Python, reStructuredText. + + https://github.com/thombashi/pytablewriter diff --git a/package/python-pytablewriter/python-pytablewriter.hash b/package/python-pytablewriter/python-pytablewriter.hash new file mode 100644 index 00000000..8933fe37 --- /dev/null +++ b/package/python-pytablewriter/python-pytablewriter.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pytablewriter/json +md5 4909dcdba8c6df35e14dbecbc6c94b6c pytablewriter-0.46.1.tar.gz +sha256 9d52ecc84bb89197c312e193b4ff04a3c934b914f3c32e4826d44a0acbc7764f pytablewriter-0.46.1.tar.gz +# Locally computed sha256 checksums +sha256 a93d75bcb0774e2990106380cadad6dcb2de193c55d435ffc56ba345a08b1dc2 LICENSE diff --git a/package/python-pytablewriter/python-pytablewriter.mk b/package/python-pytablewriter/python-pytablewriter.mk new file mode 100644 index 00000000..a63f7f8a --- /dev/null +++ b/package/python-pytablewriter/python-pytablewriter.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pytablewriter +# +################################################################################ + +PYTHON_PYTABLEWRITER_VERSION = 0.46.1 +PYTHON_PYTABLEWRITER_SOURCE = pytablewriter-$(PYTHON_PYTABLEWRITER_VERSION).tar.gz +PYTHON_PYTABLEWRITER_SITE = https://files.pythonhosted.org/packages/bb/86/d5f3dfec35d2d7583c9f3f1d731adf729851d1fe01011f07a747eb8c7df0 +PYTHON_PYTABLEWRITER_SETUP_TYPE = setuptools +PYTHON_PYTABLEWRITER_LICENSE = MIT +PYTHON_PYTABLEWRITER_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-pytest-asyncio/Config.in b/package/python-pytest-asyncio/Config.in new file mode 100644 index 00000000..3fa90e4e --- /dev/null +++ b/package/python-pytest-asyncio/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_PYTEST_ASYNCIO + bool "python-pytest-asyncio" + depends on BR2_PACKAGE_PYTHON3 # pytest + select BR2_PACKAGE_PYTHON_PYTEST # runtime + help + Pytest support for asyncio. + + https://github.com/pytest-dev/pytest-asyncio diff --git a/package/python-pytest-asyncio/python-pytest-asyncio.hash b/package/python-pytest-asyncio/python-pytest-asyncio.hash new file mode 100644 index 00000000..40541f54 --- /dev/null +++ b/package/python-pytest-asyncio/python-pytest-asyncio.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pytest-asyncio/json +md5 b63593bc08f445f6e3f14c34128a68ed pytest-asyncio-0.14.0.tar.gz +sha256 9882c0c6b24429449f5f969a5158b528f39bde47dc32e85b9f0403965017e700 pytest-asyncio-0.14.0.tar.gz +# Locally computed sha256 checksums +sha256 cb5e8e7e5f4a3988e1063c142c60dc2df75605f4c46515e776e3aca6df976e14 LICENSE diff --git a/package/python-pytest-asyncio/python-pytest-asyncio.mk b/package/python-pytest-asyncio/python-pytest-asyncio.mk new file mode 100644 index 00000000..0645db3e --- /dev/null +++ b/package/python-pytest-asyncio/python-pytest-asyncio.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pytest-asyncio +# +################################################################################ + +PYTHON_PYTEST_ASYNCIO_VERSION = 0.14.0 +PYTHON_PYTEST_ASYNCIO_SOURCE = pytest-asyncio-$(PYTHON_PYTEST_ASYNCIO_VERSION).tar.gz +PYTHON_PYTEST_ASYNCIO_SITE = https://files.pythonhosted.org/packages/65/09/9472d4db0625cf56d40f4e405f955faf6469be00858a273b71332f3fcd1f +PYTHON_PYTEST_ASYNCIO_SETUP_TYPE = setuptools +PYTHON_PYTEST_ASYNCIO_LICENSE = Apache-2.0 +PYTHON_PYTEST_ASYNCIO_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-pytest/Config.in b/package/python-pytest/Config.in new file mode 100644 index 00000000..ebbaeeea --- /dev/null +++ b/package/python-pytest/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_PYTHON_PYTEST + bool "python-pytest" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_ATTRS # runtime + select BR2_PACKAGE_PYTHON_INICONFIG # runtime + select BR2_PACKAGE_PYTHON_PACKAGING # runtime + select BR2_PACKAGE_PYTHON_PLUGGY # runtime + select BR2_PACKAGE_PYTHON_PY # runtime + select BR2_PACKAGE_PYTHON_TOML # runtime + select BR2_PACKAGE_PYTHON3_PYEXPAT # runtime + help + pytest is a framework that makes building simple and scalable + tests easy. Tests are expressive and readable—no boilerplate + code required. + + https://docs.pytest.org/en/latest/ diff --git a/package/python-pytest/python-pytest.hash b/package/python-pytest/python-pytest.hash new file mode 100644 index 00000000..8c2a85c9 --- /dev/null +++ b/package/python-pytest/python-pytest.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pytest/json +md5 91a421ffffe3310096b4273b2fa13819 pytest-6.1.2.tar.gz +sha256 c0a7e94a8cdbc5422a51ccdad8e6f1024795939cc89159a0ae7f0b316ad3823e pytest-6.1.2.tar.gz +# Locally computer sha256 +sha256 7898b9b164d4f93fd9a562fd0f592935518b48c4745303964110eb7f7fe64faf LICENSE diff --git a/package/python-pytest/python-pytest.mk b/package/python-pytest/python-pytest.mk new file mode 100644 index 00000000..d47ec0f4 --- /dev/null +++ b/package/python-pytest/python-pytest.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-pytest +# +################################################################################ + +PYTHON_PYTEST_VERSION = 6.1.2 +PYTHON_PYTEST_SOURCE = pytest-$(PYTHON_PYTEST_VERSION).tar.gz +PYTHON_PYTEST_SITE = https://files.pythonhosted.org/packages/d4/df/bd7c25c4fe809a17315b3fc9878edf48d31dde7b431b6836848b063c0428 +PYTHON_PYTEST_SETUP_TYPE = setuptools +PYTHON_PYTEST_LICENSE = MIT +PYTHON_PYTEST_LICENSE_FILES = LICENSE +PYTHON_PYTEST_DEPENDENCIES = host-python-setuptools-scm + +$(eval $(python-package)) diff --git a/package/python-pytrie/Config.in b/package/python-pytrie/Config.in new file mode 100644 index 00000000..15663847 --- /dev/null +++ b/package/python-pytrie/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_PYTRIE + bool "python-pytrie" + select BR2_PACKAGE_PYTHON_SORTEDCONTAINERS # runtime + help + A pure Python implementation of the trie data structure. + + https://pypi.python.org/pypi/PyTrie diff --git a/package/python-pytrie/python-pytrie.hash b/package/python-pytrie/python-pytrie.hash new file mode 100644 index 00000000..3bc1f6e9 --- /dev/null +++ b/package/python-pytrie/python-pytrie.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pytrie/json +md5 f7c7184124013abcc18a3e3b638d32ae PyTrie-0.3.1.tar.gz +sha256 3bb7d122a549d8006c9cba2feecac20bceda9f8c0e2a3fa99a5584cfe0dec523 PyTrie-0.3.1.tar.gz +# Locally computed sha256 +sha256 153931d44112319a1e1653752c881fb7ef092f636db31f4c36b252666e95efbd PKG-INFO diff --git a/package/python-pytrie/python-pytrie.mk b/package/python-pytrie/python-pytrie.mk new file mode 100644 index 00000000..b8264fa2 --- /dev/null +++ b/package/python-pytrie/python-pytrie.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pytrie +# +################################################################################ + +PYTHON_PYTRIE_VERSION = 0.3.1 +PYTHON_PYTRIE_SOURCE = PyTrie-$(PYTHON_PYTRIE_VERSION).tar.gz +PYTHON_PYTRIE_LICENSE = BSD-3-Clause +PYTHON_PYTRIE_LICENSE_FILES = PKG-INFO +PYTHON_PYTRIE_SITE = https://files.pythonhosted.org/packages/e1/eb/ae1f098969c9e9b81e821fb8e916cbf720b900ec1c0f3359e47a427395ec +PYTHON_PYTRIE_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-pytz/Config.in b/package/python-pytz/Config.in new file mode 100644 index 00000000..949fbd3c --- /dev/null +++ b/package/python-pytz/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_PYTZ + bool "python-pytz" + help + World timezone definitions, modern and historical. + + http://pythonhosted.org/pytz diff --git a/package/python-pytz/python-pytz.hash b/package/python-pytz/python-pytz.hash new file mode 100644 index 00000000..d1ce81e5 --- /dev/null +++ b/package/python-pytz/python-pytz.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pytz/json +md5 c3d84a465fc56a4edd52cca8873ac0df pytz-2019.3.tar.gz +sha256 b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be pytz-2019.3.tar.gz +# Locally computed sha256 checksums +sha256 39f07c72a1bfda349cbd27bac9bcb1e6f8c5b4e5cc3fadf56900406e8cc0b792 LICENSE.txt diff --git a/package/python-pytz/python-pytz.mk b/package/python-pytz/python-pytz.mk new file mode 100644 index 00000000..888f3c45 --- /dev/null +++ b/package/python-pytz/python-pytz.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pytz +# +################################################################################ + +PYTHON_PYTZ_VERSION = 2019.3 +PYTHON_PYTZ_SOURCE = pytz-$(PYTHON_PYTZ_VERSION).tar.gz +PYTHON_PYTZ_SITE = https://files.pythonhosted.org/packages/82/c3/534ddba230bd4fbbd3b7a3d35f3341d014cca213f369a9940925e7e5f691 +PYTHON_PYTZ_SETUP_TYPE = setuptools +PYTHON_PYTZ_LICENSE = MIT +PYTHON_PYTZ_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-pyudev/0001-Workaround-finding-libudev-on-systems-without-ldconf.patch b/package/python-pyudev/0001-Workaround-finding-libudev-on-systems-without-ldconf.patch new file mode 100644 index 00000000..67c27664 --- /dev/null +++ b/package/python-pyudev/0001-Workaround-finding-libudev-on-systems-without-ldconf.patch @@ -0,0 +1,49 @@ +From e86a1c199d45c9751da67f947af202927dee07f8 Mon Sep 17 00:00:00 2001 +From: Yegor Yefremov +Date: Thu, 10 Dec 2015 08:44:55 +0100 +Subject: [PATCH] Workaround finding libudev on systems without ldconf + +This patch tries to load libudev.so directly without relying on +Python's find_library(). find_library() fails on systems +without library cache mechanism. + +Taken from pyudev issue 117 discussion: +https://github.com/pyudev/pyudev/pull/117 + +Signed-off-by: Yegor Yefremov +[Marcin: adjust to 0.22.0] +Signed-off-by: Marcin Niestroj +--- + src/pyudev/_ctypeslib/utils.py | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/src/pyudev/_ctypeslib/utils.py b/src/pyudev/_ctypeslib/utils.py +index 9dffb3c..aa9942f 100644 +--- a/src/pyudev/_ctypeslib/utils.py ++++ b/src/pyudev/_ctypeslib/utils.py +@@ -28,7 +28,7 @@ + from __future__ import print_function + from __future__ import unicode_literals + +-from ctypes import CDLL ++from ctypes import cdll, CDLL + from ctypes.util import find_library + + +@@ -50,10 +50,10 @@ def load_ctypes_library(name, signatures, error_checkers): + :rtype: ctypes.CDLL + :raises ImportError: if the library is not found + """ +- library_name = find_library(name) +- if not library_name: ++ try: ++ lib = cdll.LoadLibrary(f'lib{name}.so') ++ except OSError: + raise ImportError('No library named %s' % name) +- lib = CDLL(library_name, use_errno=True) + # Add function signatures + for funcname, signature in signatures.items(): + function = getattr(lib, funcname, None) +-- +2.29.1 + diff --git a/package/python-pyudev/Config.in b/package/python-pyudev/Config.in new file mode 100644 index 00000000..fb853956 --- /dev/null +++ b/package/python-pyudev/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_PYTHON_PYUDEV + bool "python-pyudev" + depends on BR2_PACKAGE_HAS_UDEV + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + help + pyudev is a LGPL licenced, pure Python 2/3 binding to + libudev, the device and hardware management and information + library of Linux. + + https://github.com/pyudev/pyudev + +comment "python-pyudev needs udev /dev management" + depends on !BR2_PACKAGE_HAS_UDEV diff --git a/package/python-pyudev/python-pyudev.hash b/package/python-pyudev/python-pyudev.hash new file mode 100644 index 00000000..def10542 --- /dev/null +++ b/package/python-pyudev/python-pyudev.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pyudev/json +md5 377eda61186c91e9440f01d76dbb4206 pyudev-0.22.0.tar.gz +sha256 69bb1beb7ac52855b6d1b9fe909eefb0017f38d917cba9939602c6880035b276 pyudev-0.22.0.tar.gz +# Locally computed sha256 checksums +sha256 6095e9ffa777dd22839f7801aa845b31c9ed07f3d6bf8a26dc5d2dec8ccc0ef3 COPYING diff --git a/package/python-pyudev/python-pyudev.mk b/package/python-pyudev/python-pyudev.mk new file mode 100644 index 00000000..42d5c700 --- /dev/null +++ b/package/python-pyudev/python-pyudev.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pyudev +# +################################################################################ + +PYTHON_PYUDEV_VERSION = 0.22.0 +PYTHON_PYUDEV_SOURCE = pyudev-$(PYTHON_PYUDEV_VERSION).tar.gz +PYTHON_PYUDEV_SITE = https://files.pythonhosted.org/packages/72/c8/4660d815a79b1d42c409012aaa10ebd6b07a47529b4cb6880f27a24bd646 +PYTHON_PYUDEV_LICENSE = LGPL-2.1+ +PYTHON_PYUDEV_LICENSE_FILES = COPYING +PYTHON_PYUDEV_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-pyusb/Config.in b/package/python-pyusb/Config.in new file mode 100644 index 00000000..bba3480a --- /dev/null +++ b/package/python-pyusb/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_PYTHON_PYUSB + bool "python-pyusb" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + select BR2_PACKAGE_LIBUSB + help + The PyUSB module provides easy access to the Universal + Serial Bus (USB) from Python. + + http://sourceforge.net/apps/trac/pyusb/ + +comment "python-pyusb needs a toolchain w/ threads, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/python-pyusb/python-pyusb.hash b/package/python-pyusb/python-pyusb.hash new file mode 100644 index 00000000..c5006c81 --- /dev/null +++ b/package/python-pyusb/python-pyusb.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/pyusb/json +md5 c8a571bfdba778555156af3facaea6fc PyUSB-1.0.0.tar.gz +# Locally computed +sha256 5b34ffa74ac34f330bff949c94ee00ec4a9d147234db17ee2eed2a67c0275368 PyUSB-1.0.0.tar.gz +sha256 de177fb928a0eed8d209fddbfa3861379e08b3b41f34ad17a329c2f78199371d LICENSE diff --git a/package/python-pyusb/python-pyusb.mk b/package/python-pyusb/python-pyusb.mk new file mode 100644 index 00000000..0afcbe8b --- /dev/null +++ b/package/python-pyusb/python-pyusb.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-pyusb +# +################################################################################ + +PYTHON_PYUSB_VERSION = 1.0.0 +PYTHON_PYUSB_SOURCE = PyUSB-$(PYTHON_PYUSB_VERSION).tar.gz +PYTHON_PYUSB_SITE = https://pypi.python.org/packages/8a/19/66fb48a4905e472f5dfeda3a1bafac369fbf6d6fc5cf55b780864962652d +PYTHON_PYUSB_LICENSE = BSD-3-Clause +PYTHON_PYUSB_LICENSE_FILES = LICENSE +PYTHON_PYUSB_SETUP_TYPE = distutils +PYTHON_PYUSB_DEPENDENCIES = libusb + +$(eval $(python-package)) diff --git a/package/python-pyxb/Config.in b/package/python-pyxb/Config.in new file mode 100644 index 00000000..6555ed80 --- /dev/null +++ b/package/python-pyxb/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_PYXB + bool "python-pyxb" + help + PyXB is a pure Python package that generates Python code for + classes that correspond to data structures defined by + XMLSchema. + + http://pyxb.sourceforge.net/ diff --git a/package/python-pyxb/python-pyxb.hash b/package/python-pyxb/python-pyxb.hash new file mode 100644 index 00000000..0cfce576 --- /dev/null +++ b/package/python-pyxb/python-pyxb.hash @@ -0,0 +1,4 @@ +# md5 from https://pypi.python.org/pypi/PyXB/json, sha256 locally computed +md5 4303573fc7094ce4664c5b71cd4bdb48 PyXB-1.2.6.tar.gz +sha256 2a00f38dd1d87b88f92d79bc5a09718d730419b88e814545f472bbd5a3bf27b4 PyXB-1.2.6.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE diff --git a/package/python-pyxb/python-pyxb.mk b/package/python-pyxb/python-pyxb.mk new file mode 100644 index 00000000..6af10b51 --- /dev/null +++ b/package/python-pyxb/python-pyxb.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-pyxb +# +################################################################################ + +PYTHON_PYXB_VERSION = 1.2.6 +PYTHON_PYXB_SOURCE = PyXB-$(PYTHON_PYXB_VERSION).tar.gz +PYTHON_PYXB_SITE = https://pypi.python.org/packages/e3/09/4fdb190ea2b7cb43d6d3e745276ee69f4d6181be70fcbfda7df3c5f72f0e +PYTHON_PYXB_LICENSE = Apache-2.0 +PYTHON_PYXB_LICENSE_FILES = LICENSE +PYTHON_PYXB_SETUP_TYPE = distutils + +$(eval $(python-package)) diff --git a/package/python-pyyaml/Config.in b/package/python-pyyaml/Config.in new file mode 100644 index 00000000..45e818b7 --- /dev/null +++ b/package/python-pyyaml/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_PYYAML + bool "python-pyyaml" + select BR2_PACKAGE_LIBYAML + help + The PyYAML package contains binding to the libyaml API. + + http://pyyaml.org/ diff --git a/package/python-pyyaml/python-pyyaml.hash b/package/python-pyyaml/python-pyyaml.hash new file mode 100644 index 00000000..82b2f4f8 --- /dev/null +++ b/package/python-pyyaml/python-pyyaml.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/PyYAML/json +md5 46e25294c7efec23d4072ed6a7777f46 PyYAML-5.4.1.tar.gz +sha256 607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e PyYAML-5.4.1.tar.gz +# Locally computed sha256 checksums +sha256 8d3928f9dc4490fd635707cb88eb26bd764102a7282954307d3e5167a577e8a4 LICENSE diff --git a/package/python-pyyaml/python-pyyaml.mk b/package/python-pyyaml/python-pyyaml.mk new file mode 100644 index 00000000..c9013de8 --- /dev/null +++ b/package/python-pyyaml/python-pyyaml.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# python-pyyaml +# +################################################################################ + +# Please keep in sync package/python3-pyyaml/python3-pyyaml.mk +PYTHON_PYYAML_VERSION = 5.4.1 +PYTHON_PYYAML_SOURCE = PyYAML-$(PYTHON_PYYAML_VERSION).tar.gz +PYTHON_PYYAML_SITE = https://files.pythonhosted.org/packages/a0/a4/d63f2d7597e1a4b55aa3b4d6c5b029991d3b824b5bd331af8d4ab1ed687d +PYTHON_PYYAML_SETUP_TYPE = setuptools +PYTHON_PYYAML_LICENSE = MIT +PYTHON_PYYAML_LICENSE_FILES = LICENSE +PYTHON_PYYAML_CPE_ID_VENDOR = pyyaml +PYTHON_PYYAML_CPE_ID_PRODUCT = pyyaml +PYTHON_PYYAML_DEPENDENCIES = libyaml +HOST_PYTHON_PYYAML_DEPENDENCIES = host-libyaml + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-pyzmq/0001-use-buildroot-zmq-version-instead-of-detect.patch b/package/python-pyzmq/0001-use-buildroot-zmq-version-instead-of-detect.patch new file mode 100644 index 00000000..315c8c8b --- /dev/null +++ b/package/python-pyzmq/0001-use-buildroot-zmq-version-instead-of-detect.patch @@ -0,0 +1,54 @@ +detect.py: fix the ZMQ version check to the ZMQ version of the buildroot + +The setup.py script tries to compile a test C program and runs it, to +retrieve a version string for the installed ZMQ library, but if the cross +compiler links it together, the result cannot be run on the host, due to +different architectures and libraries. + +And if the host compiler would compile/link it, it would not link with +the library version inside buildroot but with the library from the +host, possibly returning a wrong version number. + +Instead of trying to run the compiled test program to get the version +dynamically, return the version of the buildroot environment. + +Written by Michael Rommel, modified for version 16.0.2 by Lionel +Flandrin. + +Modified for version 18.0.2 by Asaf Kahlon + +Signed-off-by: Lionel Flandrin +Signed-off-by: Asaf Kahlon +--- + buildutils/detect.py | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +diff --git a/buildutils/detect.py b/buildutils/detect.py +index d1380fe..4a91351 100644 +--- a/buildutils/detect.py ++++ b/buildutils/detect.py +@@ -120,13 +120,15 @@ def detect_zmq(basedir, compiler=None, **compiler_attrs): + + cc = get_compiler(compiler=compiler, **compiler_attrs) + efile = test_compilation(cfile, compiler=cc, **compiler_attrs) +- patch_lib_paths(efile, cc.library_dirs) ++ #patch_lib_paths(efile, cc.library_dirs) + +- rc, so, se = get_output_error([efile]) +- if rc: +- msg = "Error running version detection script:\n%s\n%s" % (so,se) +- logging.error(msg) +- raise IOError(msg) ++ #rc, so, se = get_output_error([efile]) ++ # if rc: ++ # msg = "Error running version detection script:\n%s\n%s" % (so,se) ++ # logging.error(msg) ++ # raise IOError(msg) ++ ++ so = "vers: ##ZEROMQ_VERSION##" + + handlers = {'vers': lambda val: tuple(int(v) for v in val.split('.'))} + +-- +2.20.1 + diff --git a/package/python-pyzmq/Config.in b/package/python-pyzmq/Config.in new file mode 100644 index 00000000..8f33a635 --- /dev/null +++ b/package/python-pyzmq/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_PYTHON_PYZMQ + bool "python-pyzmq" + depends on BR2_INSTALL_LIBSTDCPP # zeromq + depends on BR2_TOOLCHAIN_HAS_THREADS # zeromq + select BR2_PACKAGE_ZEROMQ + help + This package contains the python language binding for zeromq. + + http://zeromq.org/bindings:python + +comment "python-pyzmq needs a toolchain w/ C++, threads" + depends on BR2_PACKAGE_PYTHON + depends on !(BR2_INSTALL_LIBSTDCPP && BR2_TOOLCHAIN_HAS_THREADS) diff --git a/package/python-pyzmq/python-pyzmq.hash b/package/python-pyzmq/python-pyzmq.hash new file mode 100644 index 00000000..ecf64892 --- /dev/null +++ b/package/python-pyzmq/python-pyzmq.hash @@ -0,0 +1,6 @@ +# md5, sha256 from https://pypi.org/pypi/pyzmq/json +md5 200abc1a75bdcfff7adf61304f46f55e pyzmq-19.0.2.tar.gz +sha256 296540a065c8c21b26d63e3cea2d1d57902373b16e4256afe46422691903a438 pyzmq-19.0.2.tar.gz +# Locally computed sha256 checksums +sha256 aef3b80570351d44e29c22d080d4e9e106b34f3fdbc5cdf9636994474c72b1a2 COPYING.BSD +sha256 44b23767df3c0fe27f88981f09bc7f50a1695cec4b24252fa5f55f03e76bcd6d COPYING.LESSER diff --git a/package/python-pyzmq/python-pyzmq.mk b/package/python-pyzmq/python-pyzmq.mk new file mode 100644 index 00000000..d1f4314a --- /dev/null +++ b/package/python-pyzmq/python-pyzmq.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# python-pyzmq +# +################################################################################ + +PYTHON_PYZMQ_VERSION = 19.0.2 +PYTHON_PYZMQ_SOURCE = pyzmq-$(PYTHON_PYZMQ_VERSION).tar.gz +PYTHON_PYZMQ_SITE = https://files.pythonhosted.org/packages/05/77/7483975d84fe1fd24cc67881ba7810e0e7b3ee6c2a0e002a5d6703cca49b +PYTHON_PYZMQ_LICENSE = LGPL-3.0+, BSD-3-Clause, Apache-2.0 +# Apache license only online: http://www.apache.org/licenses/LICENSE-2.0 +PYTHON_PYZMQ_LICENSE_FILES = COPYING.LESSER COPYING.BSD +PYTHON_PYZMQ_DEPENDENCIES = zeromq +PYTHON_PYZMQ_SETUP_TYPE = distutils +PYTHON_PYZMQ_BUILD_OPTS = --zmq=$(STAGING_DIR)/usr + +# Due to issues with cross-compiling, hardcode to the zeromq in BR +define PYTHON_PYZMQ_PATCH_ZEROMQ_VERSION + $(SED) 's/##ZEROMQ_VERSION##/$(ZEROMQ_VERSION)/' \ + $(@D)/buildutils/detect.py +endef + +PYTHON_PYZMQ_POST_PATCH_HOOKS += PYTHON_PYZMQ_PATCH_ZEROMQ_VERSION + +ifeq ($(BR2_PACKAGE_ZEROMQ_DRAFTS),y) +PYTHON_PYZMQ_BUILD_OPTS += --enable-drafts +endif + +$(eval $(python-package)) diff --git a/package/python-raven/Config.in b/package/python-raven/Config.in new file mode 100644 index 00000000..0d4b26c0 --- /dev/null +++ b/package/python-raven/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PYTHON_RAVEN + bool "python-raven" + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_SSL if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_SSL if BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_UNICODEDATA if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_UNICODEDATA if BR2_PACKAGE_PYTHON3 + help + Raven is a client for Sentry (https://getsentry.com). + + https://github.com/getsentry/raven-python diff --git a/package/python-raven/python-raven.hash b/package/python-raven/python-raven.hash new file mode 100644 index 00000000..6f264193 --- /dev/null +++ b/package/python-raven/python-raven.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/raven/json +md5 3676f31dadfa61526444dd0245c78a38 raven-6.10.0.tar.gz +sha256 3fa6de6efa2493a7c827472e984ce9b020797d0da16f1db67197bcc23c8fae54 raven-6.10.0.tar.gz +# Locally computed sha256 checksums +sha256 5ce9459bc19ced99cc9eb135d4f559ed01e336354bdf16dd998be85aa688c233 LICENSE diff --git a/package/python-raven/python-raven.mk b/package/python-raven/python-raven.mk new file mode 100644 index 00000000..ff6c22c0 --- /dev/null +++ b/package/python-raven/python-raven.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-raven +# +################################################################################ + +PYTHON_RAVEN_VERSION = 6.10.0 +PYTHON_RAVEN_SOURCE = raven-$(PYTHON_RAVEN_VERSION).tar.gz +PYTHON_RAVEN_SITE = https://files.pythonhosted.org/packages/79/57/b74a86d74f96b224a477316d418389af9738ba7a63c829477e7a86dd6f47 +PYTHON_RAVEN_SETUP_TYPE = setuptools +PYTHON_RAVEN_LICENSE = BSD-3-Clause +PYTHON_RAVEN_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-redis/Config.in b/package/python-redis/Config.in new file mode 100644 index 00000000..4143e1f1 --- /dev/null +++ b/package/python-redis/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_REDIS + bool "python-redis" + help + Python client for Redis key-value store. + + https://github.com/andymccurdy/redis-py diff --git a/package/python-redis/python-redis.hash b/package/python-redis/python-redis.hash new file mode 100644 index 00000000..57c71dab --- /dev/null +++ b/package/python-redis/python-redis.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/redis/json +md5 7a00d4540374f34e152a33faa1fcee5f redis-3.5.3.tar.gz +sha256 0e7e0cfca8660dea8b7d5cd8c4f6c5e29e11f31158c0b0ae91a397f00e5a05a2 redis-3.5.3.tar.gz +# Locally computed sha256 checksums +sha256 790148d8c12f8a38b2707a74be2343316bad126995ff54801a181b8b231ba124 LICENSE diff --git a/package/python-redis/python-redis.mk b/package/python-redis/python-redis.mk new file mode 100644 index 00000000..98c1a165 --- /dev/null +++ b/package/python-redis/python-redis.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-redis +# +################################################################################ + +PYTHON_REDIS_VERSION = 3.5.3 +PYTHON_REDIS_SOURCE = redis-$(PYTHON_REDIS_VERSION).tar.gz +PYTHON_REDIS_SITE = https://files.pythonhosted.org/packages/b3/17/1e567ff78c83854e16b98694411fe6e08c3426af866ad11397cddceb80d3 +PYTHON_REDIS_SETUP_TYPE = setuptools +PYTHON_REDIS_LICENSE = MIT +PYTHON_REDIS_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-reentry/Config.in b/package/python-reentry/Config.in new file mode 100644 index 00000000..8ebbe395 --- /dev/null +++ b/package/python-reentry/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_REENTRY + bool "python-reentry" + select BR2_PACKAGE_PYTHON_SETUPTOOLS # runtime + select BR2_PACKAGE_PYTHON_CLICK # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON_PATHLIB2 if BR2_PACKAGE_PYTHON # runtime + help + A plugin manager based on setuptools entry points mechanism. + + https://pypi.org/project/reentry/ diff --git a/package/python-reentry/python-reentry.hash b/package/python-reentry/python-reentry.hash new file mode 100644 index 00000000..089d8594 --- /dev/null +++ b/package/python-reentry/python-reentry.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/reentry/json +md5 819931cd0a766a7c226879e57ccea9c7 reentry-1.3.1.tar.gz +sha256 2fe18c1a6946f3e2a51e1d5aa78228a11e879fbb0da14da5bf1e6252e83d26b1 reentry-1.3.1.tar.gz +# Locally computed sha256 checksums +sha256 4ae7f3216208a7e2327236e95bcd2397b2495f1c2298c708986c893bea608509 LICENSE diff --git a/package/python-reentry/python-reentry.mk b/package/python-reentry/python-reentry.mk new file mode 100644 index 00000000..428dbf2b --- /dev/null +++ b/package/python-reentry/python-reentry.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-reentry +# +################################################################################ + +PYTHON_REENTRY_VERSION = 1.3.1 +PYTHON_REENTRY_SOURCE = reentry-$(PYTHON_REENTRY_VERSION).tar.gz +PYTHON_REENTRY_SITE = https://files.pythonhosted.org/packages/ee/3f/a90789e01c4d2b67a57e9bd758e60ecb9338d428604f66130b57684ba8cc +PYTHON_REENTRY_SETUP_TYPE = setuptools +PYTHON_REENTRY_LICENSE = MIT +PYTHON_REENTRY_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-regex/Config.in b/package/python-regex/Config.in new file mode 100644 index 00000000..5f582d08 --- /dev/null +++ b/package/python-regex/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_REGEX + bool "python-regex" + help + Alternative regular expression module, to replace re. + + https://bitbucket.org/mrabarnett/mrab-regex diff --git a/package/python-regex/python-regex.hash b/package/python-regex/python-regex.hash new file mode 100644 index 00000000..9e256263 --- /dev/null +++ b/package/python-regex/python-regex.hash @@ -0,0 +1,3 @@ +# md5, sha256 from https://pypi.org/pypi/regex/json +md5 ac88a9c036e626ae4d436e69f35f50cf regex-2020.2.20.tar.gz +sha256 9e9624440d754733eddbcd4614378c18713d2d9d0dc647cf9c72f64e39671be5 regex-2020.2.20.tar.gz diff --git a/package/python-regex/python-regex.mk b/package/python-regex/python-regex.mk new file mode 100644 index 00000000..8a527c8e --- /dev/null +++ b/package/python-regex/python-regex.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-regex +# +################################################################################ + +# Please keep in sync with package/python3-regex/python3-regex.mk +PYTHON_REGEX_VERSION = 2020.2.20 +PYTHON_REGEX_SOURCE = regex-$(PYTHON_REGEX_VERSION).tar.gz +PYTHON_REGEX_SITE = https://files.pythonhosted.org/packages/e8/76/8ac7f467617b9cfbafcef3c76df6f22b15de654a62bea719792b00a83195 +PYTHON_REGEX_SETUP_TYPE = setuptools +PYTHON_REGEX_LICENSE = CNRI-Python + +$(eval $(python-package)) diff --git a/package/python-remi/Config.in b/package/python-remi/Config.in new file mode 100644 index 00000000..e0c5e9bf --- /dev/null +++ b/package/python-remi/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PYTHON_REMI + bool "python-remi" + select BR2_PACKAGE_PYTHON_SSL if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_SSL if BR2_PACKAGE_PYTHON3 # runtime + select BR2_PACKAGE_PYTHON_SETUPTOOLS # runtime + help + Remi is a GUI library for Python applications which transpiles + an application's interface into HTML to be rendered in a web + browser. This removes platform-specific dependencies and lets + you easily develop cross-platform applications in Python! + + https://github.com/dddomodossola/remi/tree/master diff --git a/package/python-remi/python-remi.hash b/package/python-remi/python-remi.hash new file mode 100644 index 00000000..832bf915 --- /dev/null +++ b/package/python-remi/python-remi.hash @@ -0,0 +1,2 @@ +# sha256 from https://pypi.org/pypi/remi/json +sha256 2a32658146b63d33a88aff7362679873c9df9e42a9e651c9e6642da834b3cca1 remi-2020.11.20.tar.gz diff --git a/package/python-remi/python-remi.mk b/package/python-remi/python-remi.mk new file mode 100644 index 00000000..56667339 --- /dev/null +++ b/package/python-remi/python-remi.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-remi +# +################################################################################ + +PYTHON_REMI_VERSION = 2020.11.20 +PYTHON_REMI_SOURCE = remi-$(PYTHON_REMI_VERSION).tar.gz +PYTHON_REMI_SITE = https://files.pythonhosted.org/packages/47/45/3110334859199be84d9b230fd31e2333b4c69832e15facc0868bed2aa3f3 +PYTHON_REMI_LICENSE = Apache-2.0 +PYTHON_REMI_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-request-id/Config.in b/package/python-request-id/Config.in new file mode 100644 index 00000000..39b5456d --- /dev/null +++ b/package/python-request-id/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_REQUEST_ID + bool "python-request-id" + select BR2_PACKAGE_PYTHON_WEBOB # runtime + help + Attach a unique identifier to every WSGI request. + + https://github.com/mmerickel/request_id diff --git a/package/python-request-id/python-request-id.hash b/package/python-request-id/python-request-id.hash new file mode 100644 index 00000000..ecf9d650 --- /dev/null +++ b/package/python-request-id/python-request-id.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/request-id/json +md5 81d6159edc745384181cb97f045c51b4 request-id-1.0.tar.gz +sha256 4928002c8e4c767f3f8319194c9f3080ff98f14cabf44c0674a81ee58ec20fc4 request-id-1.0.tar.gz +# Locally computed sha256 checksums +sha256 2d65d17b4df34f184557b8031df05e4c264d2fa6b82e560be074967eff3b326c LICENSE.txt diff --git a/package/python-request-id/python-request-id.mk b/package/python-request-id/python-request-id.mk new file mode 100644 index 00000000..4812e53c --- /dev/null +++ b/package/python-request-id/python-request-id.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-request-id +# +################################################################################ + +PYTHON_REQUEST_ID_VERSION = 1.0 +PYTHON_REQUEST_ID_SOURCE = request-id-$(PYTHON_REQUEST_ID_VERSION).tar.gz +PYTHON_REQUEST_ID_SITE = https://files.pythonhosted.org/packages/bc/b6/ade909d4af3dffe492789d36ea58a0ecbd637f8200bc480b282d455fe497 +PYTHON_REQUEST_ID_SETUP_TYPE = setuptools +PYTHON_REQUEST_ID_LICENSE = MIT +PYTHON_REQUEST_ID_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-requests-oauthlib/Config.in b/package/python-requests-oauthlib/Config.in new file mode 100644 index 00000000..85283b20 --- /dev/null +++ b/package/python-requests-oauthlib/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_REQUESTS_OAUTHLIB + bool "python-requests-oauthlib" + select BR2_PACKAGE_PYTHON_OAUTHLIB # runtime + select BR2_PACKAGE_PYTHON_REQUESTS # runtime + help + OAuthlib authentication support for Requests. + + https://github.com/requests/requests-oauthlib diff --git a/package/python-requests-oauthlib/python-requests-oauthlib.hash b/package/python-requests-oauthlib/python-requests-oauthlib.hash new file mode 100644 index 00000000..d33cabfe --- /dev/null +++ b/package/python-requests-oauthlib/python-requests-oauthlib.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/requests-oauthlib/json +md5 1ebcd55f1b1b9281940b4bc33010e2ba requests-oauthlib-1.3.0.tar.gz +sha256 b4261601a71fd721a8bd6d7aa1cc1d6a8a93b4a9f5e96626f8e4d91e8beeaa6a requests-oauthlib-1.3.0.tar.gz +# Locally computed sha256 checksums +sha256 ae01846afad8a8291fe6a08966f3015af9a8ff675d84b981f9793c122f7876e8 LICENSE diff --git a/package/python-requests-oauthlib/python-requests-oauthlib.mk b/package/python-requests-oauthlib/python-requests-oauthlib.mk new file mode 100644 index 00000000..9fe5b186 --- /dev/null +++ b/package/python-requests-oauthlib/python-requests-oauthlib.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-requests-oauthlib +# +################################################################################ + +PYTHON_REQUESTS_OAUTHLIB_VERSION = 1.3.0 +PYTHON_REQUESTS_OAUTHLIB_SOURCE = requests-oauthlib-$(PYTHON_REQUESTS_OAUTHLIB_VERSION).tar.gz +PYTHON_REQUESTS_OAUTHLIB_SITE = https://files.pythonhosted.org/packages/23/eb/68fc8fa86e0f5789832f275c8289257d8dc44dbe93fce7ff819112b9df8f +PYTHON_REQUESTS_OAUTHLIB_SETUP_TYPE = setuptools +PYTHON_REQUESTS_OAUTHLIB_LICENSE = ISC +PYTHON_REQUESTS_OAUTHLIB_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-requests-toolbelt/Config.in b/package/python-requests-toolbelt/Config.in new file mode 100644 index 00000000..ba2b9515 --- /dev/null +++ b/package/python-requests-toolbelt/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_REQUESTS_TOOLBELT + bool "python-requests-toolbelt" + select BR2_PACKAGE_PYTHON_REQUESTS # runtime + help + A utility belt for advanced users of python-requests. + + https://toolbelt.readthedocs.org diff --git a/package/python-requests-toolbelt/python-requests-toolbelt.hash b/package/python-requests-toolbelt/python-requests-toolbelt.hash new file mode 100644 index 00000000..1b733fd7 --- /dev/null +++ b/package/python-requests-toolbelt/python-requests-toolbelt.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/requests-toolbelt/json +md5 b1509735c4b4cf95df2619facbc3672e requests-toolbelt-0.9.1.tar.gz +sha256 968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0 requests-toolbelt-0.9.1.tar.gz +# Locally computed sha256 checksums +sha256 3a1a3cffa7abc000cbd726a664f56c33c532a55480f9e056dfe941cf93b7c37f LICENSE diff --git a/package/python-requests-toolbelt/python-requests-toolbelt.mk b/package/python-requests-toolbelt/python-requests-toolbelt.mk new file mode 100644 index 00000000..119c4027 --- /dev/null +++ b/package/python-requests-toolbelt/python-requests-toolbelt.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-requests-toolbelt +# +################################################################################ + +PYTHON_REQUESTS_TOOLBELT_VERSION = 0.9.1 +PYTHON_REQUESTS_TOOLBELT_SOURCE = requests-toolbelt-$(PYTHON_REQUESTS_TOOLBELT_VERSION).tar.gz +PYTHON_REQUESTS_TOOLBELT_SITE = https://files.pythonhosted.org/packages/28/30/7bf7e5071081f761766d46820e52f4b16c8a08fef02d2eb4682ca7534310 +PYTHON_REQUESTS_TOOLBELT_SETUP_TYPE = setuptools +PYTHON_REQUESTS_TOOLBELT_LICENSE = Apache-2.0 +PYTHON_REQUESTS_TOOLBELT_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-requests/Config.in b/package/python-requests/Config.in new file mode 100644 index 00000000..30158b8d --- /dev/null +++ b/package/python-requests/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_PYTHON_REQUESTS + bool "python-requests" + select BR2_PACKAGE_PYTHON_CERTIFI # runtime + select BR2_PACKAGE_PYTHON_CHARDET # runtime + select BR2_PACKAGE_PYTHON_IDNA # runtime + select BR2_PACKAGE_PYTHON_URLLIB3 # runtime + select BR2_PACKAGE_PYTHON_HASHLIB if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON_SSL if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_SSL if BR2_PACKAGE_PYTHON3 # runtime + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 # runtime + help + Requests is an Apache2 Licensed HTTP library, written in + Python, for human beings. + + http://www.python-requests.org/ diff --git a/package/python-requests/python-requests.hash b/package/python-requests/python-requests.hash new file mode 100644 index 00000000..e07c7bf5 --- /dev/null +++ b/package/python-requests/python-requests.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/requests/json +md5 514d6f7eba77ada0b8c98ec7818828db requests-2.25.1.tar.gz +sha256 27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 requests-2.25.1.tar.gz +# Locally computed sha256 checksums +sha256 09e8a9bcec8067104652c168685ab0931e7868f9c8284b66f5ae6edae5f1130b LICENSE diff --git a/package/python-requests/python-requests.mk b/package/python-requests/python-requests.mk new file mode 100644 index 00000000..5d0f545f --- /dev/null +++ b/package/python-requests/python-requests.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# python-requests +# +################################################################################ + +# Please keep in sync with package/python3-requests/python3-requests.mk +PYTHON_REQUESTS_VERSION = 2.25.1 +PYTHON_REQUESTS_SOURCE = requests-$(PYTHON_REQUESTS_VERSION).tar.gz +PYTHON_REQUESTS_SITE = https://files.pythonhosted.org/packages/6b/47/c14abc08432ab22dc18b9892252efaf005ab44066de871e72a38d6af464b +PYTHON_REQUESTS_SETUP_TYPE = setuptools +PYTHON_REQUESTS_LICENSE = Apache-2.0 +PYTHON_REQUESTS_LICENSE_FILES = LICENSE +PYTHON_REQUESTS_CPE_ID_VENDOR = python +PYTHON_REQUESTS_CPE_ID_PRODUCT = requests + +$(eval $(python-package)) diff --git a/package/python-rpi-gpio/0001-fix-build-with-gcc-10.x.patch b/package/python-rpi-gpio/0001-fix-build-with-gcc-10.x.patch new file mode 100644 index 00000000..95892f99 --- /dev/null +++ b/package/python-rpi-gpio/0001-fix-build-with-gcc-10.x.patch @@ -0,0 +1,147 @@ +Description: This patch fixes the "multiple definition of" errors with gcc10 + +Signed-off-by: Michael Fischer + +diff -purN python-rpi-gpio.org/source/common.c python-rpi-gpio/source/common.c +--- python-rpi-gpio.org/source/common.c 2019-07-21 14:41:22.000000000 +0200 ++++ python-rpi-gpio/source/common.c 2020-08-07 09:31:33.948575964 +0200 +@@ -28,6 +28,9 @@ + const int pin_to_gpio_rev1[41] = {-1, -1, -1, 0, -1, 1, -1, 4, 14, -1, 15, 17, 18, 21, -1, 22, 23, -1, 24, 10, -1, 9, 25, 11, 8, -1, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; + const int pin_to_gpio_rev2[41] = {-1, -1, -1, 2, -1, 3, -1, 4, 14, -1, 15, 17, 18, 27, -1, 22, 23, -1, 24, 10, -1, 9, 25, 11, 8, -1, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; + const int pin_to_gpio_rev3[41] = {-1, -1, -1, 2, -1, 3, -1, 4, 14, -1, 15, 17, 18, 27, -1, 22, 23, -1, 24, 10, -1, 9, 25, 11, 8, -1, 7, -1, -1, 5, -1, 6, 12, 13, -1, 19, 16, 26, 20, -1, 21 }; ++const int (*pin_to_gpio)[41]; ++int gpio_direction[54]; ++rpi_info rpiinfo; + int setup_error = 0; + int module_setup = 0; + +diff -purN python-rpi-gpio.org/source/common.h python-rpi-gpio/source/common.h +--- python-rpi-gpio.org/source/common.h 2019-07-21 14:41:22.000000000 +0200 ++++ python-rpi-gpio/source/common.h 2020-08-07 09:31:33.948575964 +0200 +@@ -30,14 +30,14 @@ SOFTWARE. + #define I2C 42 + #define PWM 43 + +-int gpio_mode; +-const int pin_to_gpio_rev1[41]; +-const int pin_to_gpio_rev2[41]; +-const int pin_to_gpio_rev3[41]; +-const int (*pin_to_gpio)[41]; +-int gpio_direction[54]; +-rpi_info rpiinfo; +-int setup_error; +-int module_setup; ++extern int gpio_mode; ++extern const int pin_to_gpio_rev1[41]; ++extern const int pin_to_gpio_rev2[41]; ++extern const int pin_to_gpio_rev3[41]; ++extern const int (*pin_to_gpio)[41]; ++extern int gpio_direction[54]; ++extern rpi_info rpiinfo; ++extern int setup_error; ++extern int module_setup; + int check_gpio_priv(void); + int get_gpio_number(int channel, unsigned int *gpio); +diff -purN python-rpi-gpio.org/source/constants.c python-rpi-gpio/source/constants.c +--- python-rpi-gpio.org/source/constants.c 2019-07-21 14:41:22.000000000 +0200 ++++ python-rpi-gpio/source/constants.c 2020-08-07 09:32:15.522196618 +0200 +@@ -21,6 +21,7 @@ + */ + + #include "Python.h" ++#define CONSTANTS_C + #include "constants.h" + #include "common.h" + #include "c_gpio.h" +diff -purN python-rpi-gpio.org/source/constants.h python-rpi-gpio/source/constants.h +--- python-rpi-gpio.org/source/constants.h 2019-07-21 14:41:22.000000000 +0200 ++++ python-rpi-gpio/source/constants.h 2020-08-07 09:32:15.522196618 +0200 +@@ -23,22 +23,28 @@ SOFTWARE. + #define PY_PUD_CONST_OFFSET 20 + #define PY_EVENT_CONST_OFFSET 30 + +-PyObject *high; +-PyObject *low; +-PyObject *input; +-PyObject *output; +-PyObject *pwm; +-PyObject *serial; +-PyObject *i2c; +-PyObject *spi; +-PyObject *unknown; +-PyObject *board; +-PyObject *bcm; +-PyObject *pud_off; +-PyObject *pud_up; +-PyObject *pud_down; +-PyObject *rising_edge; +-PyObject *falling_edge; +-PyObject *both_edge; ++#ifdef CONSTANTS_C ++#define MAYBE_EXTERN ++#else ++#define MAYBE_EXTERN extern ++#endif ++ ++MAYBE_EXTERN PyObject *high; ++MAYBE_EXTERN PyObject *low; ++MAYBE_EXTERN PyObject *input; ++MAYBE_EXTERN PyObject *output; ++MAYBE_EXTERN PyObject *pwm; ++MAYBE_EXTERN PyObject *serial; ++MAYBE_EXTERN PyObject *i2c; ++MAYBE_EXTERN PyObject *spi; ++MAYBE_EXTERN PyObject *unknown; ++MAYBE_EXTERN PyObject *board; ++MAYBE_EXTERN PyObject *bcm; ++MAYBE_EXTERN PyObject *pud_off; ++MAYBE_EXTERN PyObject *pud_up; ++MAYBE_EXTERN PyObject *pud_down; ++MAYBE_EXTERN PyObject *rising_edge; ++MAYBE_EXTERN PyObject *falling_edge; ++MAYBE_EXTERN PyObject *both_edge; + + void define_constants(PyObject *module); +diff -purN python-rpi-gpio.org/source/event_gpio.c python-rpi-gpio/source/event_gpio.c +--- python-rpi-gpio.org/source/event_gpio.c 2019-07-21 14:41:22.000000000 +0200 ++++ python-rpi-gpio/source/event_gpio.c 2020-08-07 09:42:05.564483136 +0200 +@@ -57,7 +57,7 @@ struct callback + }; + struct callback *callbacks = NULL; + +-pthread_t threads; ++static pthread_t threads; + int event_occurred[54] = { 0 }; + int thread_running = 0; + int epfd_thread = -1; +diff -purN python-rpi-gpio.org/source/py_pwm.h python-rpi-gpio/source/py_pwm.h +--- python-rpi-gpio.org/source/py_pwm.h 2019-07-21 14:41:22.000000000 +0200 ++++ python-rpi-gpio/source/py_pwm.h 2020-08-07 09:38:49.445646807 +0200 +@@ -20,5 +20,5 @@ OUT OF OR IN CONNECTION WITH THE SOFTWAR + SOFTWARE. + */ + +-PyTypeObject PWMType; ++extern PyTypeObject PWMType; + PyTypeObject *PWM_init_PWMType(void); +diff -purN python-rpi-gpio.org/source/soft_pwm.c python-rpi-gpio/source/soft_pwm.c +--- python-rpi-gpio.org/source/soft_pwm.c 2019-07-21 14:41:22.000000000 +0200 ++++ python-rpi-gpio/source/soft_pwm.c 2020-08-07 09:42:40.753160437 +0200 +@@ -25,7 +25,7 @@ SOFTWARE. + #include + #include "c_gpio.h" + #include "soft_pwm.h" +-pthread_t threads; ++static pthread_t threads; + + struct pwm + { +diff -purN python-rpi-gpio.org/source/soft_pwm.h python-rpi-gpio/source/soft_pwm.h +--- python-rpi-gpio.org/source/soft_pwm.h 2019-07-21 14:41:22.000000000 +0200 ++++ python-rpi-gpio/source/soft_pwm.h 2020-08-07 09:39:25.916811352 +0200 +@@ -26,4 +26,4 @@ void pwm_set_duty_cycle(unsigned int gpi + void pwm_set_frequency(unsigned int gpio, float freq); + void pwm_start(unsigned int gpio); + void pwm_stop(unsigned int gpio); +-int pwm_exists(unsigned int gpio); ++extern int pwm_exists(unsigned int gpio); diff --git a/package/python-rpi-gpio/Config.in b/package/python-rpi-gpio/Config.in new file mode 100644 index 00000000..4f59ebdb --- /dev/null +++ b/package/python-rpi-gpio/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_RPI_GPIO + bool "python-rpi-gpio" + depends on BR2_arm + help + A Python module to control the GPIO on a Raspberry Pi. + + http://sourceforge.net/p/raspberry-gpio-python diff --git a/package/python-rpi-gpio/python-rpi-gpio.hash b/package/python-rpi-gpio/python-rpi-gpio.hash new file mode 100644 index 00000000..620efd27 --- /dev/null +++ b/package/python-rpi-gpio/python-rpi-gpio.hash @@ -0,0 +1,6 @@ +# md5 from https://pypi.python.org/pypi/rpi_gpio/json +# sha256 from https://pypi.python.org/pypi/rpi_gpio/json +md5 777617f9dea9a1680f9af43db0cf150e RPi.GPIO-0.7.0.tar.gz +sha256 7424bc6c205466764f30f666c18187a0824077daf20b295c42f08aea2cb87d3f RPi.GPIO-0.7.0.tar.gz +# Locally computed +sha256 a668b3edecb3e69e81ec25987257008208ffcba9d6c43682033b8060c5f2f994 LICENCE.txt diff --git a/package/python-rpi-gpio/python-rpi-gpio.mk b/package/python-rpi-gpio/python-rpi-gpio.mk new file mode 100644 index 00000000..dfc59c88 --- /dev/null +++ b/package/python-rpi-gpio/python-rpi-gpio.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-rpi-gpio +# +################################################################################ + +PYTHON_RPI_GPIO_VERSION = 0.7.0 +PYTHON_RPI_GPIO_SOURCE = RPi.GPIO-$(PYTHON_RPI_GPIO_VERSION).tar.gz +PYTHON_RPI_GPIO_SITE = https://sourceforge.net/projects/raspberry-gpio-python/files +PYTHON_RPI_GPIO_LICENSE = MIT +PYTHON_RPI_GPIO_LICENSE_FILES = LICENCE.txt +PYTHON_RPI_GPIO_SETUP_TYPE = distutils + +$(eval $(python-package)) diff --git a/package/python-rpi-ws281x/Config.in b/package/python-rpi-ws281x/Config.in new file mode 100644 index 00000000..5f131300 --- /dev/null +++ b/package/python-rpi-ws281x/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_RPI_WS281X + bool "python-rpi-ws281x" + help + Userspace Raspberry Pi PWM/PCM/SPI library for SK6812 and + WS281X LEDs. + + https://github.com/rpi-ws281x/rpi-ws281x-python/ diff --git a/package/python-rpi-ws281x/python-rpi-ws281x.hash b/package/python-rpi-ws281x/python-rpi-ws281x.hash new file mode 100644 index 00000000..54d91a6d --- /dev/null +++ b/package/python-rpi-ws281x/python-rpi-ws281x.hash @@ -0,0 +1,6 @@ +# md5, sha256 from https://pypi.org/pypi/rpi-ws281x/json +md5 8eb175e05905ee7a00bb5fd2f1b15e40 rpi_ws281x-4.2.4.tar.gz +sha256 7175e708d6085bc02a9d0b8227797d697e34fd00787030ae5f119fe2f4f90889 rpi_ws281x-4.2.4.tar.gz +# Locally computed sha256 checksums +sha256 7bbf6337c1eee7169579e6acd398f31ea274dfa3a1689ab7e654ca3585d5a8a9 LICENSE +sha256 7bbf6337c1eee7169579e6acd398f31ea274dfa3a1689ab7e654ca3585d5a8a9 lib/LICENSE diff --git a/package/python-rpi-ws281x/python-rpi-ws281x.mk b/package/python-rpi-ws281x/python-rpi-ws281x.mk new file mode 100644 index 00000000..1da2a774 --- /dev/null +++ b/package/python-rpi-ws281x/python-rpi-ws281x.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-rpi-ws281x +# +################################################################################ + +PYTHON_RPI_WS281X_VERSION = 4.2.4 +PYTHON_RPI_WS281X_SOURCE = rpi_ws281x-$(PYTHON_RPI_WS281X_VERSION).tar.gz +PYTHON_RPI_WS281X_SITE = https://files.pythonhosted.org/packages/3b/99/0f74f2d303e03432d10b11dab240cb15afad1bc6ab9a1449c9bc08af2ee4 +PYTHON_RPI_WS281X_SETUP_TYPE = setuptools +PYTHON_RPI_WS281X_LICENSE = BSD-2-Clause +PYTHON_RPI_WS281X_LICENSE_FILES = LICENSE lib/LICENSE + +$(eval $(python-package)) diff --git a/package/python-rtslib-fb/Config.in b/package/python-rtslib-fb/Config.in new file mode 100644 index 00000000..f4083340 --- /dev/null +++ b/package/python-rtslib-fb/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_RTSLIB_FB + bool "python-rtslib-fb" + select BR2_PACKAGE_PYTHON_SIX + help + rtslib-fb is an object-based Python library for configuring + the LIO generic SCSI target, present in 3.x Linux kernel + versions. + + https://github.com/open-iscsi/rtslib-fb diff --git a/package/python-rtslib-fb/python-rtslib-fb.hash b/package/python-rtslib-fb/python-rtslib-fb.hash new file mode 100644 index 00000000..f67231d3 --- /dev/null +++ b/package/python-rtslib-fb/python-rtslib-fb.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 d5d81a78046b4c228d29ba88d9950e0f63858e5fcf601e3d0f8bf107fbaadc03 python-rtslib-fb-2.1.fb57.tar.gz +sha256 5df2a0d87d6c562f0ea11c688ac52532aa28d744cabc7994ff0537f64b3b3320 COPYING diff --git a/package/python-rtslib-fb/python-rtslib-fb.mk b/package/python-rtslib-fb/python-rtslib-fb.mk new file mode 100644 index 00000000..421fbed0 --- /dev/null +++ b/package/python-rtslib-fb/python-rtslib-fb.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# python-rtslib-fb +# +################################################################################ + +# When upgrading the version, be sure to also upgrade +# python-configshell-fb and targetcli-fb at the same time. +PYTHON_RTSLIB_FB_VERSION = 2.1.fb57 +# Do not switch site to PyPI: it does not contain the latest version. +PYTHON_RTSLIB_FB_SITE = $(call github,open-iscsi,rtslib-fb,v$(PYTHON_RTSLIB_FB_VERSION)) +PYTHON_RTSLIB_FB_LICENSE = Apache-2.0 +PYTHON_RTSLIB_FB_LICENSE_FILES = COPYING +PYTHON_RTSLIB_FB_SETUP_TYPE = setuptools +PYTHON_RTSLIB_FB_DEPENDENCIES = python-six + +$(eval $(python-package)) diff --git a/package/python-s3transfer/Config.in b/package/python-s3transfer/Config.in new file mode 100644 index 00000000..6587a5fe --- /dev/null +++ b/package/python-s3transfer/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_S3TRANSFER + bool "python-s3transfer" + select BR2_PACKAGE_PYTHON_BOTOCORE # runtime + # runtime, not needed for python3: + select BR2_PACKAGE_PYTHON_FUTURES if BR2_PACKAGE_PYTHON + help + An Amazon S3 Transfer Manager. + + https://github.com/boto/s3transfer diff --git a/package/python-s3transfer/python-s3transfer.hash b/package/python-s3transfer/python-s3transfer.hash new file mode 100644 index 00000000..496acc04 --- /dev/null +++ b/package/python-s3transfer/python-s3transfer.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/s3transfer/json +md5 e351d246498fca53e2ca2bf75c550d60 s3transfer-0.3.3.tar.gz +sha256 921a37e2aefc64145e7b73d50c71bb4f26f46e4c9f414dc648c6245ff92cf7db s3transfer-0.3.3.tar.gz +# Locally computed sha256 checksums +sha256 8c6db340475136df3c1201d458fa5755698eace76e510471ecc9d857d6083dac LICENSE.txt diff --git a/package/python-s3transfer/python-s3transfer.mk b/package/python-s3transfer/python-s3transfer.mk new file mode 100644 index 00000000..946be261 --- /dev/null +++ b/package/python-s3transfer/python-s3transfer.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-s3transfer +# +################################################################################ + +PYTHON_S3TRANSFER_VERSION = 0.3.3 +PYTHON_S3TRANSFER_SOURCE = s3transfer-$(PYTHON_S3TRANSFER_VERSION).tar.gz +PYTHON_S3TRANSFER_SITE = https://files.pythonhosted.org/packages/50/de/2b688c062107942486c81a739383b1432a72717d9a85a6a1a692f003c70c +PYTHON_S3TRANSFER_SETUP_TYPE = setuptools +PYTHON_S3TRANSFER_LICENSE = Apache-2.0 +PYTHON_S3TRANSFER_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-scandir/Config.in b/package/python-scandir/Config.in new file mode 100644 index 00000000..497f962a --- /dev/null +++ b/package/python-scandir/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_SCANDIR + bool "python-scandir" + help + scandir, a better directory iterator and faster os.walk() + + https://pypi.python.org/pypi/scandir diff --git a/package/python-scandir/python-scandir.hash b/package/python-scandir/python-scandir.hash new file mode 100644 index 00000000..5c01701e --- /dev/null +++ b/package/python-scandir/python-scandir.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/scandir/json +md5 f8378f4d9f95a6a78e97ab01aa900c1d scandir-1.10.0.tar.gz +sha256 4d4631f6062e658e9007ab3149a9b914f3548cb38bfb021c64f39a025ce578ae scandir-1.10.0.tar.gz +# Locally computed sha256 checksums +sha256 a5e2fbdc239744419d29407cdbc92793c4d9c1d956c174f7cb7f96fa6d058c86 LICENSE.txt diff --git a/package/python-scandir/python-scandir.mk b/package/python-scandir/python-scandir.mk new file mode 100644 index 00000000..f205fe3b --- /dev/null +++ b/package/python-scandir/python-scandir.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-scandir +# +################################################################################ + +PYTHON_SCANDIR_VERSION = 1.10.0 +PYTHON_SCANDIR_SOURCE = scandir-$(PYTHON_SCANDIR_VERSION).tar.gz +PYTHON_SCANDIR_SITE = https://files.pythonhosted.org/packages/df/f5/9c052db7bd54d0cbf1bc0bb6554362bba1012d03e5888950a4f5c5dadc4e +PYTHON_SCANDIR_LICENSE = BSD-3-Clause +PYTHON_SCANDIR_LICENSE_FILES = LICENSE.txt +PYTHON_SCANDIR_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-scapy/Config.in b/package/python-scapy/Config.in new file mode 100644 index 00000000..6575a33a --- /dev/null +++ b/package/python-scapy/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_SCAPY + bool "python-scapy" + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 + help + Scapy: interactive packet manipulation tool. + + http://www.secdev.org/projects/scapy diff --git a/package/python-scapy/python-scapy.hash b/package/python-scapy/python-scapy.hash new file mode 100644 index 00000000..8618e54f --- /dev/null +++ b/package/python-scapy/python-scapy.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/scapy/json +md5 01e52ff5d1f04364e17fc2d42872282e scapy-2.4.4.tar.gz +sha256 ecfd7a14cd9c3ef0eb08d28d5bb71d97219edff1454ccbdff229f676b27900ee scapy-2.4.4.tar.gz +# Locally computed sha256 checksums +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE diff --git a/package/python-scapy/python-scapy.mk b/package/python-scapy/python-scapy.mk new file mode 100644 index 00000000..3083a844 --- /dev/null +++ b/package/python-scapy/python-scapy.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-scapy +# +################################################################################ + +PYTHON_SCAPY_VERSION = 2.4.4 +PYTHON_SCAPY_SOURCE = scapy-$(PYTHON_SCAPY_VERSION).tar.gz +PYTHON_SCAPY_SITE = https://files.pythonhosted.org/packages/c6/8f/438d4d0bab4c8e22906a7401dd082b4c0f914daf2bbdc7e7e8390d81a5c3 +PYTHON_SCAPY_SETUP_TYPE = setuptools +PYTHON_SCAPY_LICENSE = GPL-2.0 +PYTHON_SCAPY_LICENSE_FILES = LICENSE +PYTHON_SCAPY_CPE_ID_VENDOR = scapy +PYTHON_SCAPY_CPE_ID_PRODUCT = scapy + +$(eval $(python-package)) diff --git a/package/python-schedule/Config.in b/package/python-schedule/Config.in new file mode 100644 index 00000000..d00c2459 --- /dev/null +++ b/package/python-schedule/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_SCHEDULE + bool "python-schedule" + help + Job scheduling for humans. + + https://github.com/dbader/schedule diff --git a/package/python-schedule/python-schedule.hash b/package/python-schedule/python-schedule.hash new file mode 100644 index 00000000..79777829 --- /dev/null +++ b/package/python-schedule/python-schedule.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/schedule/json +md5 e29fd3b436b03220e147a4ed8191d220 schedule-0.6.0.tar.gz +sha256 f9fb5181283de4db6e701d476dd01b6a3dd81c38462a54991ddbb9d26db857c9 schedule-0.6.0.tar.gz +# Locally computed sha256 checksums +sha256 30a8352c318ce1b645acde0299697342d4380ed2637d7ca18a8ad25661e3b41b LICENSE.txt diff --git a/package/python-schedule/python-schedule.mk b/package/python-schedule/python-schedule.mk new file mode 100644 index 00000000..c0cc7dce --- /dev/null +++ b/package/python-schedule/python-schedule.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-schedule +# +################################################################################ + +PYTHON_SCHEDULE_VERSION = 0.6.0 +PYTHON_SCHEDULE_SOURCE = schedule-$(PYTHON_SCHEDULE_VERSION).tar.gz +PYTHON_SCHEDULE_SITE = https://files.pythonhosted.org/packages/00/07/6a9953ff83e003eaadebf0a51d33c6b596f9451fcbea36a3a2e575f6af99 +PYTHON_SCHEDULE_SETUP_TYPE = setuptools +PYTHON_SCHEDULE_LICENSE = MIT +PYTHON_SCHEDULE_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-sdnotify/Config.in b/package/python-sdnotify/Config.in new file mode 100644 index 00000000..bc77a067 --- /dev/null +++ b/package/python-sdnotify/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_SDNOTIFY + bool "python-sdnotify" + help + A pure Python implementation of systemd's service notification + protocol (sd_notify). + + https://github.com/bb4242/sdnotify diff --git a/package/python-sdnotify/python-sdnotify.hash b/package/python-sdnotify/python-sdnotify.hash new file mode 100644 index 00000000..b4106418 --- /dev/null +++ b/package/python-sdnotify/python-sdnotify.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/sdnotify/json +md5 749ddca1c70be1697fecc443fb1fdb16 sdnotify-0.3.2.tar.gz +sha256 73977fc746b36cc41184dd43c3fe81323e7b8b06c2bb0826c4f59a20c56bb9f1 sdnotify-0.3.2.tar.gz +# Locally computed sha256 checksums +sha256 038351c6f544a386576da41d5fe1320437ed211507565dd9c334c8290055b88e LICENSE.txt diff --git a/package/python-sdnotify/python-sdnotify.mk b/package/python-sdnotify/python-sdnotify.mk new file mode 100644 index 00000000..1b0f2276 --- /dev/null +++ b/package/python-sdnotify/python-sdnotify.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-sdnotify +# +################################################################################ + +PYTHON_SDNOTIFY_VERSION = 0.3.2 +PYTHON_SDNOTIFY_SOURCE = sdnotify-$(PYTHON_SDNOTIFY_VERSION).tar.gz +PYTHON_SDNOTIFY_SITE = https://files.pythonhosted.org/packages/ce/d8/9fdc36b2a912bf78106de4b3f0de3891ff8f369e7a6f80be842b8b0b6bd5 +PYTHON_SDNOTIFY_SETUP_TYPE = distutils +PYTHON_SDNOTIFY_LICENSE = MIT +PYTHON_SDNOTIFY_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-secretstorage/Config.in b/package/python-secretstorage/Config.in new file mode 100644 index 00000000..78a0a2ae --- /dev/null +++ b/package/python-secretstorage/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PYTHON_SECRETSTORAGE + bool "python-secretstorage" + depends on BR2_PACKAGE_PYTHON3 + depends on BR2_INSTALL_LIBSTDCPP # python-cryptography + select BR2_PACKAGE_PYTHON_CRYPTOGRAPHY # runtime + help + Python bindings to FreeDesktop.org Secret Service API. + + https://github.com/mitya57/secretstorage + +comment "python-secretstorage needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/python-secretstorage/python-secretstorage.hash b/package/python-secretstorage/python-secretstorage.hash new file mode 100644 index 00000000..a8e535f8 --- /dev/null +++ b/package/python-secretstorage/python-secretstorage.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/secretstorage/json +md5 c2a8c0e08e5da198fc38c379b98c28f1 SecretStorage-3.1.2.tar.gz +sha256 15da8a989b65498e29be338b3b279965f1b8f09b9668bd8010da183024c8bff6 SecretStorage-3.1.2.tar.gz +# Locally computed sha256 checksums +sha256 70f6bfca77633c35efa218328eda5486d7054c2914d61820980e378797520a25 LICENSE diff --git a/package/python-secretstorage/python-secretstorage.mk b/package/python-secretstorage/python-secretstorage.mk new file mode 100644 index 00000000..4c209bf5 --- /dev/null +++ b/package/python-secretstorage/python-secretstorage.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-secretstorage +# +################################################################################ + +PYTHON_SECRETSTORAGE_VERSION = 3.1.2 +PYTHON_SECRETSTORAGE_SOURCE = SecretStorage-$(PYTHON_SECRETSTORAGE_VERSION).tar.gz +PYTHON_SECRETSTORAGE_SITE = https://files.pythonhosted.org/packages/fd/9f/36197c75d9a09b1ab63f56cb985af6cd858ca3fc41fd9cd890ce69bae5b9 +PYTHON_SECRETSTORAGE_SETUP_TYPE = setuptools +PYTHON_SECRETSTORAGE_LICENSE = BSD-3-Clause +PYTHON_SECRETSTORAGE_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-see/Config.in b/package/python-see/Config.in new file mode 100644 index 00000000..f3049fd8 --- /dev/null +++ b/package/python-see/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_SEE + bool "python-see" + help + dir for humans. + + https://ljcooke.github.io/see/ diff --git a/package/python-see/python-see.hash b/package/python-see/python-see.hash new file mode 100644 index 00000000..c48ee88b --- /dev/null +++ b/package/python-see/python-see.hash @@ -0,0 +1,4 @@ +# md5 from https://pypi.python.org/pypi/see/json, sha256 locally computed +md5 cb3bf4d314f73a8f7a2fd3d2d99aab54 see-1.4.1.tar.gz +sha256 14f8f8a88a909a7d7dea81f0016e3fdfabd3b5d335992e102a382e1a71672bd1 see-1.4.1.tar.gz +sha256 dccbd040a7deacee7f05e5e46a8eba6e786ac319f0cb94c36f92d789585911a6 LICENSE diff --git a/package/python-see/python-see.mk b/package/python-see/python-see.mk new file mode 100644 index 00000000..982962be --- /dev/null +++ b/package/python-see/python-see.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-see +# +################################################################################ + +PYTHON_SEE_VERSION = 1.4.1 +PYTHON_SEE_SOURCE = see-$(PYTHON_SEE_VERSION).tar.gz +PYTHON_SEE_SITE = https://pypi.python.org/packages/ff/fc/fcabb6a9bfe7c56798285839780cae67342256b823b97e94d862b0ba21d6 +PYTHON_SEE_SETUP_TYPE = setuptools +PYTHON_SEE_LICENSE = BSD-3-Clause +PYTHON_SEE_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-semver/Config.in b/package/python-semver/Config.in new file mode 100644 index 00000000..c66231a7 --- /dev/null +++ b/package/python-semver/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_SEMVER + bool "python-semver" + help + Python helper for Semantic Versioning (http://semver.org/). + + https://github.com/k-bx/python-semver diff --git a/package/python-semver/python-semver.hash b/package/python-semver/python-semver.hash new file mode 100644 index 00000000..5c13764e --- /dev/null +++ b/package/python-semver/python-semver.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/semver/json +md5 3e11ae9782121e8ffe9f8a8b763a8cb5 semver-2.10.2.tar.gz +sha256 c0a4a9d1e45557297a722ee9bac3de2ec2ea79016b6ffcaca609b0bc62cf4276 semver-2.10.2.tar.gz +# Locally computed +sha256 cda490c32e61d3884dc17791fc8078f2a3e564fba98dd18b4dc64eb2720b2b6f LICENSE.txt diff --git a/package/python-semver/python-semver.mk b/package/python-semver/python-semver.mk new file mode 100644 index 00000000..32ed6b97 --- /dev/null +++ b/package/python-semver/python-semver.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-semver +# +################################################################################ + +PYTHON_SEMVER_VERSION = 2.10.2 +PYTHON_SEMVER_SOURCE = semver-$(PYTHON_SEMVER_VERSION).tar.gz +PYTHON_SEMVER_SITE = https://files.pythonhosted.org/packages/aa/e8/cb894f70a52887f001aff5f264f68272c21fa58268495aca17df396c161f +PYTHON_SEMVER_SETUP_TYPE = setuptools +PYTHON_SEMVER_LICENSE = BSD-3-Clause +PYTHON_SEMVER_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-sentry-sdk/Config.in b/package/python-sentry-sdk/Config.in new file mode 100644 index 00000000..e8e88bac --- /dev/null +++ b/package/python-sentry-sdk/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_SENTRY_SDK + bool "python-sentry-sdk" + select BR2_PACKAGE_PYTHON_CERTIFI # runtime + select BR2_PACKAGE_PYTHON_URLLIB3 # runtime + help + Python client for Sentry (https://sentry.io). + + https://github.com/getsentry/sentry-python diff --git a/package/python-sentry-sdk/python-sentry-sdk.hash b/package/python-sentry-sdk/python-sentry-sdk.hash new file mode 100644 index 00000000..feade89f --- /dev/null +++ b/package/python-sentry-sdk/python-sentry-sdk.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/sentry-sdk/json +md5 5d4abcc416cbd0b9443bf56588b02b55 sentry-sdk-0.17.3.tar.gz +sha256 0af429c221670e602f960fca85ca3f607c85510a91f11e8be8f742a978127f78 sentry-sdk-0.17.3.tar.gz +# Locally computed sha256 checksums +sha256 59404d4c854e579097d41bfccd5006afde9d6d70e646cf55074cdbfead5ecf1c LICENSE diff --git a/package/python-sentry-sdk/python-sentry-sdk.mk b/package/python-sentry-sdk/python-sentry-sdk.mk new file mode 100644 index 00000000..256aafa6 --- /dev/null +++ b/package/python-sentry-sdk/python-sentry-sdk.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# python-sentry-sdk +# +################################################################################ + +PYTHON_SENTRY_SDK_VERSION = 0.17.3 +PYTHON_SENTRY_SDK_SOURCE = sentry-sdk-$(PYTHON_SENTRY_SDK_VERSION).tar.gz +PYTHON_SENTRY_SDK_SITE = https://files.pythonhosted.org/packages/64/7e/f1725d8649ef8f7d58cbec582157c454884238e59fef00b1707d555c7bea +PYTHON_SENTRY_SDK_SETUP_TYPE = setuptools +PYTHON_SENTRY_SDK_LICENSE = BSD-2-Clause +PYTHON_SENTRY_SDK_LICENSE_FILES = LICENSE + +ifeq ($(BR2_PACKAGE_PYTHON),y) +# only needed/valid for python 3.x +define PYTHON_SENTRY_SDK_RM_PY3_FILES + rm -f $(addprefix $(TARGET_DIR)/usr/lib/python*/site-packages/sentry_sdk/integrations/,\ + aiohttp.py asgi.py django/asgi.py sanic.py tornado.py) +endef + +PYTHON_SENTRY_SDK_POST_INSTALL_TARGET_HOOKS += PYTHON_SENTRY_SDK_RM_PY3_FILES +endif + +$(eval $(python-package)) diff --git a/package/python-serial-asyncio/Config.in b/package/python-serial-asyncio/Config.in new file mode 100644 index 00000000..5520b725 --- /dev/null +++ b/package/python-serial-asyncio/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_SERIAL_ASYNCIO + bool "python-serial-asyncio" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_SERIAL + help + asyncio extension package for pyserial. + + https://github.com/pyserial/pyserial-asyncio diff --git a/package/python-serial-asyncio/python-serial-asyncio.hash b/package/python-serial-asyncio/python-serial-asyncio.hash new file mode 100644 index 00000000..f5d1d9e4 --- /dev/null +++ b/package/python-serial-asyncio/python-serial-asyncio.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pyserial-asyncio/json +md5 64d15bfb20982b2129b02070321f49f3 pyserial-asyncio-0.5.tar.gz +sha256 1641e5433a866eeaf6464b3ab88b741e7a89dd8cd0f851b3343b15f425138d33 pyserial-asyncio-0.5.tar.gz +# Locally computed sha256 checksums +sha256 ebc84abdbdec7f9fa6962612c110123897db47b79529d5ae41191ef584b88f2c LICENSE.txt diff --git a/package/python-serial-asyncio/python-serial-asyncio.mk b/package/python-serial-asyncio/python-serial-asyncio.mk new file mode 100644 index 00000000..bc95f2c4 --- /dev/null +++ b/package/python-serial-asyncio/python-serial-asyncio.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-serial-asyncio +# +################################################################################ + +PYTHON_SERIAL_ASYNCIO_VERSION = 0.5 +PYTHON_SERIAL_ASYNCIO_SOURCE = pyserial-asyncio-$(PYTHON_SERIAL_ASYNCIO_VERSION).tar.gz +PYTHON_SERIAL_ASYNCIO_SITE = https://files.pythonhosted.org/packages/e1/97/8dd1bf656796668ed4bd86058c815b130303a00a7b70cf79758e4918814a +PYTHON_SERIAL_ASYNCIO_LICENSE = BSD-3-Clause +PYTHON_SERIAL_ASYNCIO_LICENSE_FILES = LICENSE.txt +PYTHON_SERIAL_ASYNCIO_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-serial/Config.in b/package/python-serial/Config.in new file mode 100644 index 00000000..ca12d12e --- /dev/null +++ b/package/python-serial/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_SERIAL + bool "python-serial" + help + python-serial is a Python library to access serial ports. + + https://github.com/pyserial/pyserial diff --git a/package/python-serial/python-serial.hash b/package/python-serial/python-serial.hash new file mode 100644 index 00000000..d885d3c0 --- /dev/null +++ b/package/python-serial/python-serial.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/pyserial/json +md5 1cf25a76da59b530dbfc2cf99392dc83 pyserial-3.5.tar.gz +sha256 3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb pyserial-3.5.tar.gz +# Locally computed sha256 checksums +sha256 f91cb9813de6a5b142b8f7f2dede630b5134160aedaeaf55f4d6a7e2593ca3f3 LICENSE.txt diff --git a/package/python-serial/python-serial.mk b/package/python-serial/python-serial.mk new file mode 100644 index 00000000..249ea9d5 --- /dev/null +++ b/package/python-serial/python-serial.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-serial +# +################################################################################ + +PYTHON_SERIAL_VERSION = 3.5 +PYTHON_SERIAL_SOURCE = pyserial-$(PYTHON_SERIAL_VERSION).tar.gz +PYTHON_SERIAL_SITE = https://files.pythonhosted.org/packages/1e/7d/ae3f0a63f41e4d2f6cb66a5b57197850f919f59e558159a4dd3a818f5082 +PYTHON_SERIAL_LICENSE = BSD-3-Clause +PYTHON_SERIAL_LICENSE_FILES = LICENSE.txt +PYTHON_SERIAL_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-service-identity/Config.in b/package/python-service-identity/Config.in new file mode 100644 index 00000000..0260ab40 --- /dev/null +++ b/package/python-service-identity/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_PYTHON_SERVICE_IDENTITY + bool "python-service-identity" + depends on BR2_INSTALL_LIBSTDCPP # python-pyopenssl + select BR2_PACKAGE_PYTHON_ATTRS # runtime + select BR2_PACKAGE_PYTHON_CHARACTERISTIC # runtime + select BR2_PACKAGE_PYTHON_IPADDRESS if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON_PYASN1 # runtime + select BR2_PACKAGE_PYTHON_PYASN1_MODULES # runtime + select BR2_PACKAGE_PYTHON_PYOPENSSL # runtime + help + Service identity verification for pyOpenSSL. + + https://pypi.python.org/pypi/service_identity + +comment "python-service-identify needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/python-service-identity/python-service-identity.hash b/package/python-service-identity/python-service-identity.hash new file mode 100644 index 00000000..9a20d089 --- /dev/null +++ b/package/python-service-identity/python-service-identity.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/service_identity/json +md5 c6b8bac93e7d899a1da313a19cc6570a service_identity-18.1.0.tar.gz +sha256 0858a54aabc5b459d1aafa8a518ed2081a285087f349fe3e55197989232e2e2d service_identity-18.1.0.tar.gz +# Locally computed sha256 checksums +sha256 c5075126e1272b176504e36af369781a95c5c1124239da8e4f61b0f9c15a56cf LICENSE diff --git a/package/python-service-identity/python-service-identity.mk b/package/python-service-identity/python-service-identity.mk new file mode 100644 index 00000000..5330239e --- /dev/null +++ b/package/python-service-identity/python-service-identity.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-service-identity +# +################################################################################ + +PYTHON_SERVICE_IDENTITY_VERSION = 18.1.0 +PYTHON_SERVICE_IDENTITY_SOURCE = service_identity-$(PYTHON_SERVICE_IDENTITY_VERSION).tar.gz +PYTHON_SERVICE_IDENTITY_SITE = https://files.pythonhosted.org/packages/9a/3d/9eb0563e066ea0540cf580695593ab079376e920016d4d1b3ff2fd8abf4b +PYTHON_SERVICE_IDENTITY_LICENSE = MIT +PYTHON_SERVICE_IDENTITY_LICENSE_FILES = LICENSE +PYTHON_SERVICE_IDENTITY_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-setproctitle/Config.in b/package/python-setproctitle/Config.in new file mode 100644 index 00000000..d13afaa4 --- /dev/null +++ b/package/python-setproctitle/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_SETPROCTITLE + bool "python-setproctitle" + help + A Python module to customize the process title. + + https://pypi.python.org/pypi/setproctitle diff --git a/package/python-setproctitle/python-setproctitle.hash b/package/python-setproctitle/python-setproctitle.hash new file mode 100644 index 00000000..6bade7bb --- /dev/null +++ b/package/python-setproctitle/python-setproctitle.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi?:action=show_md5&digest=2dcdd1b761700a5a13252fea3dfd1977 +md5 2dcdd1b761700a5a13252fea3dfd1977 setproctitle-1.1.10.tar.gz +# Locally computed +sha256 6283b7a58477dd8478fbb9e76defb37968ee4ba47b05ec1c053cb39638bd7398 setproctitle-1.1.10.tar.gz +sha256 40e85df0511ccacd29b6b5898e7e09b76889fc2f5d94b2670ece847977d3bbed COPYRIGHT diff --git a/package/python-setproctitle/python-setproctitle.mk b/package/python-setproctitle/python-setproctitle.mk new file mode 100644 index 00000000..ff33c0c1 --- /dev/null +++ b/package/python-setproctitle/python-setproctitle.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-setproctitle +# +################################################################################ + +PYTHON_SETPROCTITLE_VERSION = 1.1.10 +PYTHON_SETPROCTITLE_SOURCE = setproctitle-$(PYTHON_SETPROCTITLE_VERSION).tar.gz +PYTHON_SETPROCTITLE_SITE = https://pypi.python.org/packages/5a/0d/dc0d2234aacba6cf1a729964383e3452c52096dc695581248b548786f2b3 +PYTHON_SETPROCTITLE_LICENSE = BSD-3-Clause +PYTHON_SETPROCTITLE_LICENSE_FILES = COPYRIGHT +PYTHON_SETPROCTITLE_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-setuptools-scm-git-archive/python-setuptools-scm-git-archive.hash b/package/python-setuptools-scm-git-archive/python-setuptools-scm-git-archive.hash new file mode 100644 index 00000000..e4f169ed --- /dev/null +++ b/package/python-setuptools-scm-git-archive/python-setuptools-scm-git-archive.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/setuptools-scm-git-archive/json +md5 1c9351fa5cebd12e76488737a7c78f2e setuptools_scm_git_archive-1.1.tar.gz +sha256 6026f61089b73fa1b5ee737e95314f41cb512609b393530385ed281d0b46c062 setuptools_scm_git_archive-1.1.tar.gz +# Locally computed sha256 checksums +sha256 89807acf2309bd285f033404ee78581602f3cd9b819a16ac2f0e5f60ff4a473e LICENSE diff --git a/package/python-setuptools-scm-git-archive/python-setuptools-scm-git-archive.mk b/package/python-setuptools-scm-git-archive/python-setuptools-scm-git-archive.mk new file mode 100644 index 00000000..032e2d3f --- /dev/null +++ b/package/python-setuptools-scm-git-archive/python-setuptools-scm-git-archive.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-setuptools-scm-git-archive +# +################################################################################ + +PYTHON_SETUPTOOLS_SCM_GIT_ARCHIVE_VERSION = 1.1 +PYTHON_SETUPTOOLS_SCM_GIT_ARCHIVE_SOURCE = setuptools_scm_git_archive-$(PYTHON_SETUPTOOLS_SCM_GIT_ARCHIVE_VERSION).tar.gz +PYTHON_SETUPTOOLS_SCM_GIT_ARCHIVE_SITE = https://files.pythonhosted.org/packages/7e/2c/0c15b29a1b5940250bfdc4a4f53272e35cd7cf8a34159291b6b4ec9eb291 +PYTHON_SETUPTOOLS_SCM_GIT_ARCHIVE_SETUP_TYPE = setuptools +PYTHON_SETUPTOOLS_SCM_GIT_ARCHIVE_LICENSE = MIT +PYTHON_SETUPTOOLS_SCM_GIT_ARCHIVE_LICENSE_FILES = LICENSE +HOST_PYTHON_SETUPTOOLS_SCM_GIT_ARCHIVE_DEPENDENCIES = host-python-setuptools-scm + +$(eval $(host-python-package)) diff --git a/package/python-setuptools-scm/python-setuptools-scm.hash b/package/python-setuptools-scm/python-setuptools-scm.hash new file mode 100644 index 00000000..82dbf143 --- /dev/null +++ b/package/python-setuptools-scm/python-setuptools-scm.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/setuptools-scm/json +md5 86ec1eb9ec02ba018b097787e98897c5 setuptools_scm-3.5.0.tar.gz +sha256 5bdf21a05792903cafe7ae0c9501182ab52497614fa6b1750d9dbae7b60c1a87 setuptools_scm-3.5.0.tar.gz +# sha256 locally computed +sha256 89807acf2309bd285f033404ee78581602f3cd9b819a16ac2f0e5f60ff4a473e LICENSE diff --git a/package/python-setuptools-scm/python-setuptools-scm.mk b/package/python-setuptools-scm/python-setuptools-scm.mk new file mode 100644 index 00000000..c6d30e99 --- /dev/null +++ b/package/python-setuptools-scm/python-setuptools-scm.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-setuptools-scm +# +################################################################################ + +PYTHON_SETUPTOOLS_SCM_VERSION = 3.5.0 +PYTHON_SETUPTOOLS_SCM_SOURCE = setuptools_scm-$(PYTHON_SETUPTOOLS_SCM_VERSION).tar.gz +PYTHON_SETUPTOOLS_SCM_SITE = https://files.pythonhosted.org/packages/b2/f7/60a645aae001a2e06cf4b8db2fba9d9f36b8fd378f10647e3e218b61b74b +PYTHON_SETUPTOOLS_SCM_LICENSE = MIT +PYTHON_SETUPTOOLS_SCM_LICENSE_FILES = LICENSE +PYTHON_SETUPTOOLS_SCM_SETUP_TYPE = setuptools + +$(eval $(host-python-package)) diff --git a/package/python-setuptools/0001-add-executable.patch b/package/python-setuptools/0001-add-executable.patch new file mode 100644 index 00000000..1f8714ea --- /dev/null +++ b/package/python-setuptools/0001-add-executable.patch @@ -0,0 +1,72 @@ +From 9b3d307f8f6a1af88f3f810f5a6cf0835830e1e8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=B6rg=20Krause?= +Date: Mon, 7 Dec 2015 01:14:33 +0100 +Subject: [PATCH 1/1] add executable +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add a new --executable option to distribute so that we can +force the shebang line in installed python scripts. + +[Thomas: refresh for setuptools 5.8.] +[Jörg: refresh for setuptools 18.7.1] + +Signed-off-by: Gustavo Zacarias +Signed-off-by: Thomas Petazzoni +Signed-off-by: Jörg Krause +--- + setuptools/command/install.py | 2 ++ + setuptools/command/install_scripts.py | 9 +++++++++ + 2 files changed, 11 insertions(+) + +diff --git a/setuptools/command/install.py b/setuptools/command/install.py +index d2bca2e..b60ef19 100644 +--- a/setuptools/command/install.py ++++ b/setuptools/command/install.py +@@ -16,6 +16,7 @@ class install(orig.install): + """Use easy_install to install the package, w/dependencies""" + + user_options = orig.install.user_options + [ ++ ('executable=', 'e', "specify final destination interpreter path"), + ('old-and-unmanageable', None, "Try not to use this!"), + ('single-version-externally-managed', None, + "used by system package builders to create 'flat' eggs"), +@@ -31,6 +32,7 @@ class install(orig.install): + + def initialize_options(self): + orig.install.initialize_options(self) ++ self.executable = None + self.old_and_unmanageable = None + self.single_version_externally_managed = None + +diff --git a/setuptools/command/install_scripts.py b/setuptools/command/install_scripts.py +index be66cb2..07afaf8 100755 +--- a/setuptools/command/install_scripts.py ++++ b/setuptools/command/install_scripts.py +@@ -11,6 +11,13 @@ class install_scripts(orig.install_scripts): + def initialize_options(self): + orig.install_scripts.initialize_options(self) + self.no_ep = False ++ self.executable = None ++ ++ def finalize_options(self): ++ orig.install_scripts.finalize_options(self) ++ self.set_undefined_options('install', ++ ('executable','executable') ++ ) + + def run(self): + import setuptools.command.easy_install as ei +@@ -31,6 +38,8 @@ class install_scripts(orig.install_scripts): + ) + bs_cmd = self.get_finalized_command('build_scripts') + exec_param = getattr(bs_cmd, 'executable', None) ++ if self.executable is not None: ++ exec_param = self.executable + bw_cmd = self.get_finalized_command("bdist_wininst") + is_wininst = getattr(bw_cmd, '_is_running', False) + writer = ei.ScriptWriter +-- +2.6.3 + diff --git a/package/python-setuptools/Config.in b/package/python-setuptools/Config.in new file mode 100644 index 00000000..f203d0f8 --- /dev/null +++ b/package/python-setuptools/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PYTHON_SETUPTOOLS + bool "python-setuptools" + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 # runtime + select BR2_PACKAGE_PYTHON_PYEXPAT if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_PYEXPAT if BR2_PACKAGE_PYTHON3 # runtime + help + Download, build, install, upgrade, and uninstall Python + packages. + + http://pypi.python.org/pypi/setuptools diff --git a/package/python-setuptools/python-setuptools.hash b/package/python-setuptools/python-setuptools.hash new file mode 100644 index 00000000..769b68c3 --- /dev/null +++ b/package/python-setuptools/python-setuptools.hash @@ -0,0 +1,4 @@ +# From https://pypi.org/pypi/setuptools/json +md5 32b6cdce670ce462086d246bea181e9d setuptools-44.0.0.zip +sha256 e5baf7723e5bb8382fc146e33032b241efc63314211a3a120aaa55d62d2bb008 setuptools-44.0.0.zip +sha256 c32a3ac395af6321efd28be73d06a00f0db6ab887d1c21d4fec46128d2056d5a LICENSE diff --git a/package/python-setuptools/python-setuptools.mk b/package/python-setuptools/python-setuptools.mk new file mode 100644 index 00000000..08a180ce --- /dev/null +++ b/package/python-setuptools/python-setuptools.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# python-setuptools +# +################################################################################ + +# Please keep in sync with +# package/python3-setuptools/python3-setuptools.mk +PYTHON_SETUPTOOLS_VERSION = 44.0.0 +PYTHON_SETUPTOOLS_SOURCE = setuptools-$(PYTHON_SETUPTOOLS_VERSION).zip +PYTHON_SETUPTOOLS_SITE = https://files.pythonhosted.org/packages/b0/f3/44da7482ac6da3f36f68e253cb04de37365b3dba9036a3c70773b778b485 +PYTHON_SETUPTOOLS_LICENSE = MIT +PYTHON_SETUPTOOLS_LICENSE_FILES = LICENSE +PYTHON_SETUPTOOLS_CPE_ID_VENDOR = python +PYTHON_SETUPTOOLS_CPE_ID_PRODUCT = setuptools +PYTHON_SETUPTOOLS_SETUP_TYPE = setuptools +HOST_PYTHON_SETUPTOOLS_NEEDS_HOST_PYTHON = python2 + +define PYTHON_SETUPTOOLS_EXTRACT_CMDS + $(UNZIP) -d $(@D) $(PYTHON_SETUPTOOLS_DL_DIR)/$(PYTHON_SETUPTOOLS_SOURCE) + mv $(@D)/setuptools-$(PYTHON_SETUPTOOLS_VERSION)/* $(@D) + $(RM) -r $(@D)/setuptools-$(PYTHON_SETUPTOOLS_VERSION) +endef + +define HOST_PYTHON_SETUPTOOLS_EXTRACT_CMDS + $(UNZIP) -d $(@D) $(HOST_PYTHON_SETUPTOOLS_DL_DIR)/$(PYTHON_SETUPTOOLS_SOURCE) + mv $(@D)/setuptools-$(PYTHON_SETUPTOOLS_VERSION)/* $(@D) + $(RM) -r $(@D)/setuptools-$(PYTHON_SETUPTOOLS_VERSION) +endef + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-sh/Config.in b/package/python-sh/Config.in new file mode 100644 index 00000000..b55ea4a3 --- /dev/null +++ b/package/python-sh/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_SH + bool "python-sh" + help + Python subprocess replacement that allows you to call any + program as if it were a function. + + https://github.com/amoffat/sh diff --git a/package/python-sh/python-sh.hash b/package/python-sh/python-sh.hash new file mode 100644 index 00000000..fffdd20c --- /dev/null +++ b/package/python-sh/python-sh.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/sh/json +md5 7e3dd3a6b49c06db93746994a68cb8cf sh-1.13.1.tar.gz +sha256 97a3d2205e3c6a842d87ebbc9ae93acae5a352b1bc4609b428d0fd5bb9e286a3 sh-1.13.1.tar.gz +# Locally computed +sha256 d8491c6e236568d04f7c8c07f2f1b8f5d142706dab6ab88f6e0d2dd476b6c706 LICENSE.txt diff --git a/package/python-sh/python-sh.mk b/package/python-sh/python-sh.mk new file mode 100644 index 00000000..21c0fb3d --- /dev/null +++ b/package/python-sh/python-sh.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-sh +# +################################################################################ + +PYTHON_SH_VERSION = 1.13.1 +PYTHON_SH_SOURCE = sh-$(PYTHON_SH_VERSION).tar.gz +PYTHON_SH_SITE = https://files.pythonhosted.org/packages/c9/3b/2c9a22bf1c48ced7ff3a11d4a862682c21d825c35f9d025811ad9808d263 +PYTHON_SH_SETUP_TYPE = setuptools +PYTHON_SH_LICENSE = MIT +PYTHON_SH_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-shutilwhich/Config.in b/package/python-shutilwhich/Config.in new file mode 100644 index 00000000..a75a63bb --- /dev/null +++ b/package/python-shutilwhich/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_SHUTILWHICH + bool "python-shutilwhich" + help + shutil.which for those not using Python 3.3 yet. + + https://pypi.python.org/pypi/shutilwhich/ diff --git a/package/python-shutilwhich/python-shutilwhich.hash b/package/python-shutilwhich/python-shutilwhich.hash new file mode 100644 index 00000000..b1a2c785 --- /dev/null +++ b/package/python-shutilwhich/python-shutilwhich.hash @@ -0,0 +1,3 @@ +# md5 from https://pypi.python.org/pypi?:action=show_md5&digest=915947c5cdae7afd748ac715ee547adb, sha256 locally computed. +md5 915947c5cdae7afd748ac715ee547adb shutilwhich-1.1.0.tar.gz +sha256 db1f39c6461e42f630fa617bb8c79090f7711c9ca493e615e43d0610ecb64dc6 shutilwhich-1.1.0.tar.gz diff --git a/package/python-shutilwhich/python-shutilwhich.mk b/package/python-shutilwhich/python-shutilwhich.mk new file mode 100644 index 00000000..0cf968a4 --- /dev/null +++ b/package/python-shutilwhich/python-shutilwhich.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-shutilwhich +# +################################################################################ + +PYTHON_SHUTILWHICH_VERSION = 1.1.0 +PYTHON_SHUTILWHICH_SOURCE = shutilwhich-$(PYTHON_SHUTILWHICH_VERSION).tar.gz +PYTHON_SHUTILWHICH_SITE = https://pypi.python.org/packages/source/s/shutilwhich +PYTHON_SHUTILWHICH_LICENSE = Python-2.0 +PYTHON_SHUTILWHICH_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-simpleaudio/Config.in b/package/python-simpleaudio/Config.in new file mode 100644 index 00000000..c6fcd8b0 --- /dev/null +++ b/package/python-simpleaudio/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_PYTHON_SIMPLEAUDIO + bool "python-simpleaudio" + depends on BR2_PACKAGE_PYTHON3 + depends on BR2_TOOLCHAIN_HAS_THREADS # alsa-lib + select BR2_PACKAGE_ALSA_LIB + help + The simplaudio package provides cross-platform, + dependency-free audio playback capability for Python 3 on + OSX, Windows, and Linux. + + https://github.com/hamiltron/py-simple-audio + +comment "python-simpleaudio needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/python-simpleaudio/python-simpleaudio.hash b/package/python-simpleaudio/python-simpleaudio.hash new file mode 100644 index 00000000..0aac4c86 --- /dev/null +++ b/package/python-simpleaudio/python-simpleaudio.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/simpleaudio/json +md5 8bd62157c286824e289e1f258419b98c simpleaudio-1.0.4.tar.gz +sha256 691c88649243544db717e7edf6a9831df112104e1aefb5f6038a5d071e8cf41d simpleaudio-1.0.4.tar.gz +# Locally computed sha256 checksums +sha256 b4340683e83f0f25ea40f992773ceec6c749c4d64ec2c09dfa49d7f5b029adbf LICENSE.txt diff --git a/package/python-simpleaudio/python-simpleaudio.mk b/package/python-simpleaudio/python-simpleaudio.mk new file mode 100644 index 00000000..5cdb3a82 --- /dev/null +++ b/package/python-simpleaudio/python-simpleaudio.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-simpleaudio +# +################################################################################ + +PYTHON_SIMPLEAUDIO_VERSION = 1.0.4 +PYTHON_SIMPLEAUDIO_SOURCE = simpleaudio-$(PYTHON_SIMPLEAUDIO_VERSION).tar.gz +PYTHON_SIMPLEAUDIO_SITE = https://files.pythonhosted.org/packages/94/1b/4dc29653733202b68c09d9c6ca085cf67ac54859ee860647ef21ac1ff3dc +PYTHON_SIMPLEAUDIO_LICENSE = MIT +PYTHON_SIMPLEAUDIO_LICENSE_FILES = LICENSE.txt +PYTHON_SIMPLEAUDIO_SETUP_TYPE = setuptools +PYTHON_SIMPLEAUDIO_DEPENDENCIES = alsa-lib + +$(eval $(python-package)) diff --git a/package/python-simplegeneric/Config.in b/package/python-simplegeneric/Config.in new file mode 100644 index 00000000..623b1ae9 --- /dev/null +++ b/package/python-simplegeneric/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_SIMPLEGENERIC + bool "python-simplegeneric" + help + Simple generic functions (similar to Python's own len(), + pickle.dump(), etc.) + + https://pypi.python.org/pypi/simplegeneric diff --git a/package/python-simplegeneric/python-simplegeneric.hash b/package/python-simplegeneric/python-simplegeneric.hash new file mode 100644 index 00000000..24f652c8 --- /dev/null +++ b/package/python-simplegeneric/python-simplegeneric.hash @@ -0,0 +1,3 @@ +# md5 from https://pypi.python.org/pypi/simplegeneric, sha256 locally computed +md5 f9c1fab00fd981be588fc32759f474e3 simplegeneric-0.8.1.zip +sha256 dc972e06094b9af5b855b3df4a646395e43d1c9d0d39ed345b7393560d0b9173 simplegeneric-0.8.1.zip diff --git a/package/python-simplegeneric/python-simplegeneric.mk b/package/python-simplegeneric/python-simplegeneric.mk new file mode 100644 index 00000000..d3bfa69a --- /dev/null +++ b/package/python-simplegeneric/python-simplegeneric.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# python-simplegeneric +# +################################################################################ + +PYTHON_SIMPLEGENERIC_VERSION = 0.8.1 +PYTHON_SIMPLEGENERIC_SOURCE = simplegeneric-$(PYTHON_SIMPLEGENERIC_VERSION).zip +PYTHON_SIMPLEGENERIC_SITE = https://pypi.python.org/packages/3d/57/4d9c9e3ae9a255cd4e1106bb57e24056d3d0709fc01b2e3e345898e49d5b +PYTHON_SIMPLEGENERIC_LICENSE = ZPL-2.1 + +# Force setup-type to be 'setuptools' in order to force the package to +# be installed with --single-version-externally-managed. Otherwise we +# end up with a .egg file, which is a zip archive, and as such forces +# us to have 'zlib' as a runtime dependency +PYTHON_SIMPLEGENERIC_SETUP_TYPE = setuptools + +define PYTHON_SIMPLEGENERIC_EXTRACT_CMDS + unzip $(PYTHON_SIMPLEGENERIC_DL_DIR)/$(PYTHON_SIMPLEGENERIC_SOURCE) -d $(@D) + mv $(@D)/simplegeneric-$(PYTHON_SIMPLEGENERIC_VERSION)/* $(@D) + rmdir $(@D)/simplegeneric-$(PYTHON_SIMPLEGENERIC_VERSION) +endef + +$(eval $(python-package)) diff --git a/package/python-simplejson/Config.in b/package/python-simplejson/Config.in new file mode 100644 index 00000000..c2fd9177 --- /dev/null +++ b/package/python-simplejson/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_SIMPLEJSON + bool "python-simplejson" + help + Simple, fast, extensible JSON encoder/decoder for Python. + + https://pypi.python.org/pypi/simplejson/ diff --git a/package/python-simplejson/python-simplejson.hash b/package/python-simplejson/python-simplejson.hash new file mode 100644 index 00000000..d89d824d --- /dev/null +++ b/package/python-simplejson/python-simplejson.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/simplejson/json +md5 8a5ed75c367b90fedc3d685742e2a1c7 simplejson-3.17.0.tar.gz +sha256 2b4b2b738b3b99819a17feaf118265d0753d5536049ea570b3c43b51c4701e81 simplejson-3.17.0.tar.gz +# Locally computed sha256 checksums +sha256 fcaa1e313a99304322e2e0836ea4ee7d839ce9a480438f3922a853edfdde129f LICENSE.txt diff --git a/package/python-simplejson/python-simplejson.mk b/package/python-simplejson/python-simplejson.mk new file mode 100644 index 00000000..cf5bd3a4 --- /dev/null +++ b/package/python-simplejson/python-simplejson.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-simplejson +# +################################################################################ + +PYTHON_SIMPLEJSON_VERSION = 3.17.0 +PYTHON_SIMPLEJSON_SOURCE = simplejson-$(PYTHON_SIMPLEJSON_VERSION).tar.gz +PYTHON_SIMPLEJSON_SITE = https://files.pythonhosted.org/packages/98/87/a7b98aa9256c8843f92878966dc3d8d914c14aad97e2c5ce4798d5743e07 +PYTHON_SIMPLEJSON_LICENSE = Academic Free License (AFL), MIT +PYTHON_SIMPLEJSON_LICENSE_FILES = LICENSE.txt +PYTHON_SIMPLEJSON_CPE_ID_VENDOR = simplejson_project +PYTHON_SIMPLEJSON_CPE_ID_PRODUCT = simplejson +PYTHON_SIMPLEJSON_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-simplelogging/Config.in b/package/python-simplelogging/Config.in new file mode 100644 index 00000000..db95efa2 --- /dev/null +++ b/package/python-simplelogging/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_SIMPLELOGGING + bool "python-simplelogging" + select BR2_PACKAGE_PYTHON_COLORLOG # runtime + help + Logging made simple, no excuse for any debug print call. + + https://github.com/vpoulailleau/simplelogging diff --git a/package/python-simplelogging/python-simplelogging.hash b/package/python-simplelogging/python-simplelogging.hash new file mode 100644 index 00000000..86698fe8 --- /dev/null +++ b/package/python-simplelogging/python-simplelogging.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/simplelogging/json +md5 e3f9da393098d8fd8ebd8349a00692f2 simplelogging-0.10.0.tar.gz +sha256 c070e0d82b68eff6918076a0edbf0a48b2c9a263854bd35f48a12c6adbbe9d80 simplelogging-0.10.0.tar.gz +# Locally computed sha256 checksums +sha256 bd2a0fe3b3bab7092ffa7f58d46bb05d98f12f107b3a6be947c098f7c2ad1d1a LICENSE diff --git a/package/python-simplelogging/python-simplelogging.mk b/package/python-simplelogging/python-simplelogging.mk new file mode 100644 index 00000000..28acc5c9 --- /dev/null +++ b/package/python-simplelogging/python-simplelogging.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-simplelogging +# +################################################################################ + +PYTHON_SIMPLELOGGING_VERSION = 0.10.0 +PYTHON_SIMPLELOGGING_SOURCE = simplelogging-$(PYTHON_SIMPLELOGGING_VERSION).tar.gz +PYTHON_SIMPLELOGGING_SITE = https://files.pythonhosted.org/packages/17/85/3d2431f971e703916c7254e4560ed15451faedf2461eb484da9e1ebc5da6 +PYTHON_SIMPLELOGGING_SETUP_TYPE = setuptools +PYTHON_SIMPLELOGGING_LICENSE = BSD-3-Clause +PYTHON_SIMPLELOGGING_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-simplesqlite/Config.in b/package/python-simplesqlite/Config.in new file mode 100644 index 00000000..7e5484f4 --- /dev/null +++ b/package/python-simplesqlite/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_PYTHON_SIMPLESQLITE + bool "python-simplesqlite" + depends on BR2_PACKAGE_PYTHON3 # python-mbstrdecoder + select BR2_PACKAGE_PYTHON_DATAPROPERTY # runtime + select BR2_PACKAGE_PYTHON_MBSTRDECODER # runtime + select BR2_PACKAGE_PYTHON_PATHVALIDATE # runtime + select BR2_PACKAGE_PYTHON_SETUPTOOLS # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON3_SQLITE # runtime + select BR2_PACKAGE_PYTHON_SQLITESCHEMA # runtime + select BR2_PACKAGE_PYTHON_TABLEDATA # runtime + select BR2_PACKAGE_PYTHON_TYPEPY # runtime + help + SimpleSQLite is a Python library to simplify SQLite database + operations: table creation, data insertion and get data as + other data formats. + + https://github.com/thombashi/SimpleSQLite diff --git a/package/python-simplesqlite/python-simplesqlite.hash b/package/python-simplesqlite/python-simplesqlite.hash new file mode 100644 index 00000000..7b4a91de --- /dev/null +++ b/package/python-simplesqlite/python-simplesqlite.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/simplesqlite/json +md5 f1d4f2ec14e2c782a62e451587477598 SimpleSQLite-0.45.2.tar.gz +sha256 0b19c99c36b63173a715649f94a2fc3aee8deb9b70c683d584bca85e5930244b SimpleSQLite-0.45.2.tar.gz +# Locally computed sha256 checksums +sha256 98799b7c99b561c5ffa3ac86600e501f761afa8e72af8a2515026445fe134105 LICENSE diff --git a/package/python-simplesqlite/python-simplesqlite.mk b/package/python-simplesqlite/python-simplesqlite.mk new file mode 100644 index 00000000..88ffcd4d --- /dev/null +++ b/package/python-simplesqlite/python-simplesqlite.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-simplesqlite +# +################################################################################ + +PYTHON_SIMPLESQLITE_VERSION = 0.45.2 +PYTHON_SIMPLESQLITE_SOURCE = SimpleSQLite-$(PYTHON_SIMPLESQLITE_VERSION).tar.gz +PYTHON_SIMPLESQLITE_SITE = https://files.pythonhosted.org/packages/b3/d1/bc3668ed7d90ee70d556124b8b5b3329505d72b5290bb393626f1afe714d +PYTHON_SIMPLESQLITE_SETUP_TYPE = setuptools +PYTHON_SIMPLESQLITE_LICENSE = MIT +PYTHON_SIMPLESQLITE_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-singledispatch/Config.in b/package/python-singledispatch/Config.in new file mode 100644 index 00000000..4abc219f --- /dev/null +++ b/package/python-singledispatch/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_SINGLEDISPATCH + bool "python-singledispatch" + depends on BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON_SIX # runtime + help + This library brings functools.singledispatch from + Python 3.4 to Python 2.6-3.3 + + https://pypi.python.org/pypi/singledispatch diff --git a/package/python-singledispatch/python-singledispatch.hash b/package/python-singledispatch/python-singledispatch.hash new file mode 100644 index 00000000..c4eec53e --- /dev/null +++ b/package/python-singledispatch/python-singledispatch.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi?:action=show_md5&digest=af2fc6a3d6cc5a02d0bf54d909785fcb +md5 af2fc6a3d6cc5a02d0bf54d909785fcb singledispatch-3.4.0.3.tar.gz +# Locally computed +sha256 5b06af87df13818d14f08a028e42f566640aef80805c3b50c5056b086e3c2b9c singledispatch-3.4.0.3.tar.gz +sha256 5a724c436f88585973787af91cecf58503cbf09e5c1721c516880614700767ef setup.py diff --git a/package/python-singledispatch/python-singledispatch.mk b/package/python-singledispatch/python-singledispatch.mk new file mode 100644 index 00000000..7e1d5ac8 --- /dev/null +++ b/package/python-singledispatch/python-singledispatch.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-singledispatch +# +################################################################################ + +PYTHON_SINGLEDISPATCH_VERSION = 3.4.0.3 +PYTHON_SINGLEDISPATCH_SOURCE = singledispatch-$(PYTHON_SINGLEDISPATCH_VERSION).tar.gz +PYTHON_SINGLEDISPATCH_SITE = https://pypi.python.org/packages/source/s/singledispatch +PYTHON_SINGLEDISPATCH_LICENSE = MIT +PYTHON_SINGLEDISPATCH_LICENSE_FILES = setup.py +PYTHON_SINGLEDISPATCH_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-sip/0001-remove-join-from-sip-h-files-string.patch b/package/python-sip/0001-remove-join-from-sip-h-files-string.patch new file mode 100644 index 00000000..e7a0d606 --- /dev/null +++ b/package/python-sip/0001-remove-join-from-sip-h-files-string.patch @@ -0,0 +1,33 @@ +From 009e5cf0750134ed5403aae23ef53a177764ca04 Mon Sep 17 00:00:00 2001 +From: Adam Duskett +Date: Wed, 29 Dec 2021 13:49:15 -0800 +Subject: [PATCH] remove join from sip_h.files string + +When cross compiling, the configure system appends the hosts /usr/ directory +to the path of which to find files that python-sip will install. This leads to +python-sip attempting to install everything under the hosts /usr directory into +the targets /usr/include/python directory. + +Remove the .join() in the sip_h.files string to prevent the above issue. + +Signed-off-by: Adam Duskett +--- + configure.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.py b/configure.py +index 25bcaa7..fc8f2dc 100644 +--- a/configure.py ++++ b/configure.py +@@ -408,7 +408,7 @@ def create_makefiles(macros): + # There will only be one element. + files, path = gen_installs[0] + pro.write("\n") +- pro.write("sip_h.files = %s\n" % " ".join(files)) ++ pro.write("sip_h.files = %s\n" % files) + pro.write("sip_h.path = %s\n" % quote(path)) + pro.write("INSTALLS += sip_h\n") + +-- +2.33.1 + diff --git a/package/python-sip/Config.in b/package/python-sip/Config.in new file mode 100644 index 00000000..8a43b8b1 --- /dev/null +++ b/package/python-sip/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_PYTHON_SIP + bool "python-sip" + depends on BR2_PACKAGE_QT5 + help + SIP is a tool that makes it very easy to create Python + bindings for C and C++ libraries. It was originally + developed to create PyQt, the Python bindings for the Qt + toolkit, but can be used to create bindings for any C or C++ + library. + + SIP comprises a code generator and a Python module. The code + generator processes a set of specification files and + generates C or C++ code which is then compiled to create the + bindings extension module. The SIP Python module provides + support functions to the automatically generated code. + + http://www.riverbankcomputing.com/software/sip/intro diff --git a/package/python-sip/python-sip.hash b/package/python-sip/python-sip.hash new file mode 100644 index 00000000..0108924c --- /dev/null +++ b/package/python-sip/python-sip.hash @@ -0,0 +1,5 @@ +# Locally calculated: +sha256 b39d93e937647807bac23579edbff25fe46d16213f708370072574ab1f1b4211 sip-4.19.25.tar.gz +sha256 accecbfda71ad4497bce0d451796706e734e405e5ecf3b3f9ee0cc68300a3d9c LICENSE +sha256 7ebb61006e46b9e9340dd135d5f4afbbcb1d1d6c6709f74473b35929007b9aeb LICENSE-GPL2 +sha256 63cb5f5c1ea39b732c495f354f971e40f6db84c567ca5573a68bb65af07741f8 LICENSE-GPL3 diff --git a/package/python-sip/python-sip.mk b/package/python-sip/python-sip.mk new file mode 100644 index 00000000..da483841 --- /dev/null +++ b/package/python-sip/python-sip.mk @@ -0,0 +1,51 @@ +################################################################################ +# +# python-sip +# +################################################################################ + +PYTHON_SIP_VERSION = 4.19.25 +PYTHON_SIP_SOURCE = sip-$(PYTHON_SIP_VERSION).tar.gz +PYTHON_SIP_SITE = https://www.riverbankcomputing.com/static/Downloads/sip/$(PYTHON_SIP_VERSION) +PYTHON_SIP_LICENSE = SIP license or GPL-2.0 or GPL-3.0 +PYTHON_SIP_LICENSE_FILES = LICENSE LICENSE-GPL2 LICENSE-GPL3 +PYTHON_SIP_DEPENDENCIES = python3 qt5base +HOST_PYTHON_SIP_DEPENDENCIES = host-python3 + +define HOST_PYTHON_SIP_CONFIGURE_CMDS + (cd $(@D); \ + $(HOST_MAKE_ENV) $(HOST_CONFIGURE_OPTS) $(HOST_DIR)/bin/python configure.py) +endef + +define HOST_PYTHON_SIP_BUILD_CMDS + $(HOST_MAKE_ENV) $(HOST_CONFIGURE_OPTS) $(MAKE) -C $(@D) +endef + +define HOST_PYTHON_SIP_INSTALL_CMDS + $(HOST_MAKE_ENV) $(HOST_CONFIGURE_OPTS) $(MAKE) install -C $(@D) +endef + +define PYTHON_SIP_CONFIGURE_CMDS + (cd $(@D); \ + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(HOST_DIR)/bin/python configure.py \ + --bindir $(TARGET_DIR)/usr/bin \ + --destdir $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/site-packages \ + --incdir $(STAGING_DIR)/usr/include/python$(PYTHON3_VERSION_MAJOR) \ + --sipdir $(TARGET_DIR)/usr/share/sip \ + --sysroot $(STAGING_DIR)/usr \ + --sip-module=PyQt5.sip \ + --no-dist-info \ + --use-qmake && \ + $(HOST_DIR)/bin/qmake) +endef + +define PYTHON_SIP_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) +endef + +define PYTHON_SIP_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) install -C $(@D) +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/python-six/Config.in b/package/python-six/Config.in new file mode 100644 index 00000000..0a8b69ac --- /dev/null +++ b/package/python-six/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_SIX + bool "python-six" + help + Six is a Python 2 and 3 compatibility library. It provides + utility functions for smoothing over the differences between + the Python versions with the goal of writing Python code that + is compatible on both Python versions. + + http://pythonhosted.org/six diff --git a/package/python-six/Config.in.host b/package/python-six/Config.in.host new file mode 100644 index 00000000..1d37e768 --- /dev/null +++ b/package/python-six/Config.in.host @@ -0,0 +1,9 @@ +config BR2_PACKAGE_HOST_PYTHON_SIX + bool "host python-six" + help + Six is a Python 2 and 3 compatibility library. It provides + utility functions for smoothing over the differences between + the Python versions with the goal of writing Python code that + is compatible on both Python versions. + + http://pythonhosted.org/six diff --git a/package/python-six/python-six.hash b/package/python-six/python-six.hash new file mode 100644 index 00000000..9945ffd1 --- /dev/null +++ b/package/python-six/python-six.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/six/json +md5 9f90a0eaa0ea7747fda01ca79d21ebcb six-1.15.0.tar.gz +sha256 30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259 six-1.15.0.tar.gz +# Locally computed sha256 checksums +sha256 8bb850c565aa389fdc16f3a46965ad23d82adff60f2393fc2762b63185e8e6c9 LICENSE diff --git a/package/python-six/python-six.mk b/package/python-six/python-six.mk new file mode 100644 index 00000000..e7621f5e --- /dev/null +++ b/package/python-six/python-six.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-six +# +################################################################################ + +PYTHON_SIX_VERSION = 1.15.0 +PYTHON_SIX_SOURCE = six-$(PYTHON_SIX_VERSION).tar.gz +PYTHON_SIX_SITE = https://files.pythonhosted.org/packages/6b/34/415834bfdafca3c5f451532e8a8d9ba89a21c9743a0c59fbd0205c7f9426 +PYTHON_SIX_SETUP_TYPE = setuptools +PYTHON_SIX_LICENSE = MIT +PYTHON_SIX_LICENSE_FILES = LICENSE + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-slob/Config.in b/package/python-slob/Config.in new file mode 100644 index 00000000..07d04d49 --- /dev/null +++ b/package/python-slob/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_PYTHON_SLOB + bool "python-slob" + depends on !BR2_BINFMT_FLAT # python-pyicu -> icu + depends on BR2_HOST_GCC_AT_LEAST_4_9 # python-pyicu -> icu + depends on BR2_INSTALL_LIBSTDCPP # python-pyicu -> icu + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # python-pyicu -> icu + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_PYICU # runtime + # although optional, it is used as default compression + select BR2_PACKAGE_PYTHON3_XZ # runtime + help + slob.py is a reference implementation of slob format reader + and writer. + + https://github.com/itkach/slob + +comment "python-slob needs a toolchain w/ C++, gcc >= 4.9, host gcc >= 4.9" + depends on BR2_PACKAGE_PYTHON3 && !BR2_BINFMT_FLAT + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || \ + !BR2_HOST_GCC_AT_LEAST_4_9 diff --git a/package/python-slob/python-slob.hash b/package/python-slob/python-slob.hash new file mode 100644 index 00000000..5bce1f13 --- /dev/null +++ b/package/python-slob/python-slob.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 18eb4f45d09d49b1f776cac52ea70ab951566c60cd30bbec39e88f10908fd8ff python-slob-31ad0e769360a5b10a4893f686587bb8e48c3895.tar.gz +sha256 db09bc6733ab28dc59bfbcd01819feb9d05241cbef3ca3f5f58ec739b341d56f LICENSE diff --git a/package/python-slob/python-slob.mk b/package/python-slob/python-slob.mk new file mode 100644 index 00000000..2db39322 --- /dev/null +++ b/package/python-slob/python-slob.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-slob +# +################################################################################ + +PYTHON_SLOB_VERSION = 31ad0e769360a5b10a4893f686587bb8e48c3895 +PYTHON_SLOB_SITE = $(call github,itkach,slob,$(PYTHON_SLOB_VERSION)) +PYTHON_SLOB_LICENSE = GPL-3.0 +PYTHON_SLOB_LICENSE_FILES = LICENSE +PYTHON_SLOB_SETUP_TYPE = distutils + +$(eval $(python-package)) diff --git a/package/python-smbus-cffi/Config.in b/package/python-smbus-cffi/Config.in new file mode 100644 index 00000000..32f005c0 --- /dev/null +++ b/package/python-smbus-cffi/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_SMBUS_CFFI + bool "python-smbus-cffi" + select BR2_PACKAGE_PYTHON_CFFI + help + This Python module allows SMBus access through the I2C /dev + interface on Linux hosts. The host kernel must have I2C + support, I2C device interface support, and a bus adapter + driver. + + https://github.com/bivab/smbus-cffi diff --git a/package/python-smbus-cffi/python-smbus-cffi.hash b/package/python-smbus-cffi/python-smbus-cffi.hash new file mode 100644 index 00000000..ed851eb6 --- /dev/null +++ b/package/python-smbus-cffi/python-smbus-cffi.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi?:action=show_md5&digest=f621c871bd658ee665751ad78e3b2df9 +md5 f621c871bd658ee665751ad78e3b2df9 smbus-cffi-0.5.1.tar.gz +# Locally computed +sha256 fb4195aaabfc01586863f60d3190b5cb1bf8f12622fd597e23e48768dad6bde8 smbus-cffi-0.5.1.tar.gz +sha256 d54f57bf73bd1ff19a424b6deab6ff08f6089a2469c8de360b167f755e4ecb4c LICENSE diff --git a/package/python-smbus-cffi/python-smbus-cffi.mk b/package/python-smbus-cffi/python-smbus-cffi.mk new file mode 100644 index 00000000..bc5731d7 --- /dev/null +++ b/package/python-smbus-cffi/python-smbus-cffi.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-smbus-cffi +# +################################################################################ + +PYTHON_SMBUS_CFFI_VERSION = 0.5.1 +PYTHON_SMBUS_CFFI_SOURCE = smbus-cffi-$(PYTHON_SMBUS_CFFI_VERSION).tar.gz +PYTHON_SMBUS_CFFI_SITE = https://pypi.python.org/packages/source/s/smbus-cffi +PYTHON_SMBUS_CFFI_SETUP_TYPE = setuptools +PYTHON_SMBUS_CFFI_LICENSE = GPL-2.0 +PYTHON_SMBUS_CFFI_LICENSE_FILES = LICENSE +PYTHON_SMBUS_CFFI_DEPENDENCIES = host-python-cffi + +$(eval $(python-package)) diff --git a/package/python-smmap2/Config.in b/package/python-smmap2/Config.in new file mode 100644 index 00000000..21a3bdb6 --- /dev/null +++ b/package/python-smmap2/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_SMMAP2 + bool "python-smmap2" + help + Smmap wraps an interface around mmap and tracks the mapped + files as well as the amount of clients who use it. If the + system runs out of resources, or if a memory limit is reached, + it will automatically unload unused maps to allow continued + operation. + + https://github.com/gitpython-developers/smmap diff --git a/package/python-smmap2/python-smmap2.hash b/package/python-smmap2/python-smmap2.hash new file mode 100644 index 00000000..8a7ea42a --- /dev/null +++ b/package/python-smmap2/python-smmap2.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/smmap2/json +md5 1c59a985be5aa645c4c5a4e063a40dd5 smmap2-2.0.5.tar.gz +sha256 29a9ffa0497e7f2be94ca0ed1ca1aa3cd4cf25a1f6b4f5f87f74b46ed91d609a smmap2-2.0.5.tar.gz +# Locally computed sha256 checksums +sha256 88e9d93f708d110b328a834302dd1d5c6afbda530e7721d15d80b3511d86f235 LICENSE diff --git a/package/python-smmap2/python-smmap2.mk b/package/python-smmap2/python-smmap2.mk new file mode 100644 index 00000000..daf379fe --- /dev/null +++ b/package/python-smmap2/python-smmap2.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-smmap2 +# +################################################################################ + +PYTHON_SMMAP2_VERSION = 2.0.5 +PYTHON_SMMAP2_SOURCE = smmap2-$(PYTHON_SMMAP2_VERSION).tar.gz +PYTHON_SMMAP2_SITE = https://files.pythonhosted.org/packages/3b/ba/e49102b3e8ffff644edded25394b2d22ebe3e645f3f6a8139129c4842ffe +PYTHON_SMMAP2_SETUP_TYPE = setuptools +PYTHON_SMMAP2_LICENSE = BSD-3-Clause +PYTHON_SMMAP2_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-snappy/Config.in b/package/python-snappy/Config.in new file mode 100644 index 00000000..fd7f8405 --- /dev/null +++ b/package/python-snappy/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PYTHON_SNAPPY + bool "python-snappy" + depends on BR2_INSTALL_LIBSTDCPP # snappy + select BR2_PACKAGE_SNAPPY + help + Python library for the snappy compression library from + Google. + + http://github.com/andrix/python-snappy + +comment "python-snappy needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/python-snappy/python-snappy.hash b/package/python-snappy/python-snappy.hash new file mode 100644 index 00000000..1e0f9605 --- /dev/null +++ b/package/python-snappy/python-snappy.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/python-snappy/json +md5 82e09ffd44204096fc70d6de14d0ea2f python-snappy-0.5.4.tar.gz +sha256 d9c26532cfa510f45e8d135cde140e8a5603d3fb254cfec273ebc0ecf9f668e2 python-snappy-0.5.4.tar.gz +# Locally computed sha256 checksums +sha256 d007cb05f143d99d16d5cd0d1bf291daf037adb36800344e440ec26edb938f9a LICENSE diff --git a/package/python-snappy/python-snappy.mk b/package/python-snappy/python-snappy.mk new file mode 100644 index 00000000..d087c83b --- /dev/null +++ b/package/python-snappy/python-snappy.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-snappy +# +################################################################################ + +PYTHON_SNAPPY_VERSION = 0.5.4 +PYTHON_SNAPPY_SITE = https://files.pythonhosted.org/packages/45/35/65d9f8cc537129894b4b32647d80212d1fa342877581c5b8a69872cea8be +PYTHON_SNAPPY_SETUP_TYPE = setuptools +PYTHON_SNAPPY_LICENSE = BSD-3-Clause +PYTHON_SNAPPY_LICENSE_FILES = LICENSE +PYTHON_SNAPPY_DEPENDENCIES = snappy + +$(eval $(python-package)) diff --git a/package/python-socketio/Config.in b/package/python-socketio/Config.in new file mode 100644 index 00000000..af0f6f32 --- /dev/null +++ b/package/python-socketio/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_SOCKETIO + bool "python-socketio" + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON_ENGINEIO # runtime + help + Socket.IO server. + + http://github.com/miguelgrinberg/python-socketio/ diff --git a/package/python-socketio/python-socketio.hash b/package/python-socketio/python-socketio.hash new file mode 100644 index 00000000..d0d8a87d --- /dev/null +++ b/package/python-socketio/python-socketio.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/python-socketio/json +md5 86cd47dddea1785ce7a6c72f55c93fe7 python-socketio-4.3.1.tar.gz +sha256 506b2cf7a520b40ea0b3f25e1272eff8de134dce6f471c1f6bc0de8c90fe8c57 python-socketio-4.3.1.tar.gz +# Locally computed sha256 checksums +sha256 c9e97d3dbc1fbbcdb4f7808b282cd646db887aff4f5313fe6bbe8d4c31405a9c LICENSE diff --git a/package/python-socketio/python-socketio.mk b/package/python-socketio/python-socketio.mk new file mode 100644 index 00000000..73dab26f --- /dev/null +++ b/package/python-socketio/python-socketio.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# python-socketio +# +################################################################################ + +PYTHON_SOCKETIO_VERSION = 4.3.1 +PYTHON_SOCKETIO_SITE = https://files.pythonhosted.org/packages/36/87/e9128a4da04df991fbdb01f44dc4d6dd8f6c03bfd4d1f42dcd6779fd975a +PYTHON_SOCKETIO_SETUP_TYPE = setuptools +PYTHON_SOCKETIO_LICENSE = MIT +PYTHON_SOCKETIO_LICENSE_FILES = LICENSE + +ifeq ($(BR2_PACKAGE_PYTHON),y) +# only needed/valid for python 3.x +define PYTHON_SOCKETIO_RM_PY3_FILES + rm -f $(TARGET_DIR)/usr/lib/python*/site-packages/socketio/asgi.py \ + $(TARGET_DIR)/usr/lib/python*/site-packages/socketio/asyncio_*.py +endef + +PYTHON_SOCKETIO_POST_INSTALL_TARGET_HOOKS += PYTHON_SOCKETIO_RM_PY3_FILES +endif + +$(eval $(python-package)) diff --git a/package/python-sockjs/Config.in b/package/python-sockjs/Config.in new file mode 100644 index 00000000..583d7ec7 --- /dev/null +++ b/package/python-sockjs/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_SOCKJS + bool "python-sockjs" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_AIOHTTP # runtime + help + SockJS server implementation for aiohttp. + + https://github.com/aio-libs/sockjs/ diff --git a/package/python-sockjs/python-sockjs.hash b/package/python-sockjs/python-sockjs.hash new file mode 100644 index 00000000..137b54a8 --- /dev/null +++ b/package/python-sockjs/python-sockjs.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/sockjs/json +md5 e28c1a82aa84c3994817905090abb169 sockjs-0.11.0.tar.gz +sha256 0347d404ed9ef3196506787ed8018f87ee4e2d0baea49d420cdd53a969bec229 sockjs-0.11.0.tar.gz +# Locally computed sha256 checksums +sha256 7be23c071df0314fadeba6077a3830340a5121ad88bfa66b0c095051a766e141 LICENSE.txt diff --git a/package/python-sockjs/python-sockjs.mk b/package/python-sockjs/python-sockjs.mk new file mode 100644 index 00000000..0aea63f9 --- /dev/null +++ b/package/python-sockjs/python-sockjs.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-sockjs +# +################################################################################ + +PYTHON_SOCKJS_VERSION = 0.11.0 +PYTHON_SOCKJS_SOURCE = sockjs-$(PYTHON_SOCKJS_VERSION).tar.gz +PYTHON_SOCKJS_SITE = https://files.pythonhosted.org/packages/88/e9/af7b321f70325fd2af3941aa147efd097156150da635e09efc7ccf70e54d +PYTHON_SOCKJS_SETUP_TYPE = setuptools +PYTHON_SOCKJS_LICENSE = Apache-2.0 +PYTHON_SOCKJS_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-sortedcontainers/Config.in b/package/python-sortedcontainers/Config.in new file mode 100644 index 00000000..43bd1b1c --- /dev/null +++ b/package/python-sortedcontainers/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_SORTEDCONTAINERS + bool "python-sortedcontainers" + help + Python Sorted Container Types: SortedList, SortedDict, and + SortedSet. + + http://www.grantjenks.com/docs/sortedcontainers/ diff --git a/package/python-sortedcontainers/python-sortedcontainers.hash b/package/python-sortedcontainers/python-sortedcontainers.hash new file mode 100644 index 00000000..311bb77e --- /dev/null +++ b/package/python-sortedcontainers/python-sortedcontainers.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/sortedcontainers/json +md5 41a4a1eaf7b85e6b3beb14cfb160bc27 sortedcontainers-2.1.0.tar.gz +sha256 974e9a32f56b17c1bac2aebd9dcf197f3eb9cd30553c5852a3187ad162e1a03a sortedcontainers-2.1.0.tar.gz +# Locally computed sha256 checksums +sha256 7dcf4a5137118a925727b8a1690bc6ea70b156ee6739dbb51fd4d386718d6ce5 LICENSE diff --git a/package/python-sortedcontainers/python-sortedcontainers.mk b/package/python-sortedcontainers/python-sortedcontainers.mk new file mode 100644 index 00000000..43f662a8 --- /dev/null +++ b/package/python-sortedcontainers/python-sortedcontainers.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-sortedcontainers +# +################################################################################ + +PYTHON_SORTEDCONTAINERS_VERSION = 2.1.0 +PYTHON_SORTEDCONTAINERS_SOURCE = sortedcontainers-$(PYTHON_SORTEDCONTAINERS_VERSION).tar.gz +PYTHON_SORTEDCONTAINERS_SITE = https://files.pythonhosted.org/packages/29/e0/135df2e733790a3d3bcda970fd080617be8cea3bd98f411e76e6847c17ef +PYTHON_SORTEDCONTAINERS_SETUP_TYPE = setuptools +PYTHON_SORTEDCONTAINERS_LICENSE = Apache-2.0 +PYTHON_SORTEDCONTAINERS_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-soupsieve/Config.in b/package/python-soupsieve/Config.in new file mode 100644 index 00000000..c42e9758 --- /dev/null +++ b/package/python-soupsieve/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_SOUPSIEVE + bool "python-soupsieve" + select BR2_PACKAGE_PYTHON_BACKPORTS_FUNCTOOLS_LRU_CACHE \ + if BR2_PACKAGE_PYTHON # runtime + help + A modern CSS selector implementation for Beautiful Soup. + + https://github.com/facelessuser/soupsieve diff --git a/package/python-soupsieve/python-soupsieve.hash b/package/python-soupsieve/python-soupsieve.hash new file mode 100644 index 00000000..c4c1273e --- /dev/null +++ b/package/python-soupsieve/python-soupsieve.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/soupsieve/json +md5 43d8ea20c58494446aa65ba5cc6320fe soupsieve-1.9.4.tar.gz +sha256 605f89ad5fdbfefe30cdc293303665eff2d188865d4dbe4eb510bba1edfbfce3 soupsieve-1.9.4.tar.gz +# Locally computed sha256 checksums +sha256 0eee19bf360e5f7a8180e2f6d613d716f7115a456f670e3d8bb35c45a0db1838 LICENSE.md diff --git a/package/python-soupsieve/python-soupsieve.mk b/package/python-soupsieve/python-soupsieve.mk new file mode 100644 index 00000000..1203b26c --- /dev/null +++ b/package/python-soupsieve/python-soupsieve.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-soupsieve +# +################################################################################ + +PYTHON_SOUPSIEVE_VERSION = 1.9.4 +PYTHON_SOUPSIEVE_SOURCE = soupsieve-$(PYTHON_SOUPSIEVE_VERSION).tar.gz +PYTHON_SOUPSIEVE_SITE = https://files.pythonhosted.org/packages/7f/4e/95a13527e18b6f1a15c93f1c634b86d5fa634c5619dce695f4e0cd68182f +PYTHON_SOUPSIEVE_SETUP_TYPE = setuptools +PYTHON_SOUPSIEVE_LICENSE = MIT +PYTHON_SOUPSIEVE_LICENSE_FILES = LICENSE.md + +$(eval $(python-package)) diff --git a/package/python-spidev/Config.in b/package/python-spidev/Config.in new file mode 100644 index 00000000..8540d554 --- /dev/null +++ b/package/python-spidev/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_SPIDEV + bool "python-spidev" + help + Python module for interfacing with SPI devices from user + space via the spidev linux kernel driver. + + https://pypi.python.org/pypi/spidev diff --git a/package/python-spidev/python-spidev.hash b/package/python-spidev/python-spidev.hash new file mode 100644 index 00000000..13128ee3 --- /dev/null +++ b/package/python-spidev/python-spidev.hash @@ -0,0 +1,5 @@ +# sha256 from https://pypi.org/project/spidev +sha256 8a7f5c289f161ea2ac4697fa8a10918232c990678dd0053084b3c43b1363910d spidev-3.5.tar.gz + +# locally computed +sha256 153a6f02f41aebe292cf3307f973a80b4fb0c988d8d3e7d126c7a66c20b1cc27 README.md diff --git a/package/python-spidev/python-spidev.mk b/package/python-spidev/python-spidev.mk new file mode 100644 index 00000000..e1065610 --- /dev/null +++ b/package/python-spidev/python-spidev.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-spidev +# +################################################################################ + +PYTHON_SPIDEV_VERSION = 3.5 +PYTHON_SPIDEV_SOURCE = spidev-$(PYTHON_SPIDEV_VERSION).tar.gz +PYTHON_SPIDEV_SITE = https://files.pythonhosted.org/packages/62/56/de649e7d95f9fcfaf965a6eb937b4a46bc77ef21487c99cde1a7a0546040 +PYTHON_SPIDEV_SETUP_TYPE = setuptools +PYTHON_SPIDEV_LICENSE = MIT +PYTHON_SPIDEV_LICENSE_FILES = README.md + +$(eval $(python-package)) diff --git a/package/python-sqlalchemy/Config.in b/package/python-sqlalchemy/Config.in new file mode 100644 index 00000000..f7ec3a6a --- /dev/null +++ b/package/python-sqlalchemy/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_PYTHON_SQLALCHEMY + bool "python-sqlalchemy" + help + SQLAlchemy is the Python SQL toolkit and Object Relational + Mapper that gives application developers the full power and + flexibility of SQL. + + It provides a full suite of well known enterprise-level + persistence patterns, designed for efficient and + high-performing database access, adapted into a simple and + Pythonic domain language. + + http://www.sqlalchemy.org diff --git a/package/python-sqlalchemy/python-sqlalchemy.hash b/package/python-sqlalchemy/python-sqlalchemy.hash new file mode 100644 index 00000000..991293b5 --- /dev/null +++ b/package/python-sqlalchemy/python-sqlalchemy.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/sqlalchemy/json +md5 af9722657ba51131703dbe75f24b054a SQLAlchemy-1.3.10.tar.gz +sha256 0f0768b5db594517e1f5e1572c73d14cf295140756431270d89496dc13d5e46c SQLAlchemy-1.3.10.tar.gz +# Locally computed sha256 checksums +sha256 0acffa15f3427e94014235e3c44376f6fe5df0ff461a93a9116eebcce74c056e LICENSE diff --git a/package/python-sqlalchemy/python-sqlalchemy.mk b/package/python-sqlalchemy/python-sqlalchemy.mk new file mode 100644 index 00000000..d6829853 --- /dev/null +++ b/package/python-sqlalchemy/python-sqlalchemy.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-sqlalchemy +# +################################################################################ + +PYTHON_SQLALCHEMY_VERSION = 1.3.10 +PYTHON_SQLALCHEMY_SOURCE = SQLAlchemy-$(PYTHON_SQLALCHEMY_VERSION).tar.gz +PYTHON_SQLALCHEMY_SITE = https://files.pythonhosted.org/packages/14/0e/487f7fc1e432cec50d2678f94e4133f2b9e9356e35bacc30d73e8cb831fc +PYTHON_SQLALCHEMY_SETUP_TYPE = setuptools +PYTHON_SQLALCHEMY_LICENSE = MIT +PYTHON_SQLALCHEMY_LICENSE_FILES = LICENSE +PYTHON_SQLALCHEMY_CPE_ID_VENDOR = sqlalchemy +PYTHON_SQLALCHEMY_CPE_ID_PRODUCT = sqlalchemy + +$(eval $(python-package)) diff --git a/package/python-sqliteschema/Config.in b/package/python-sqliteschema/Config.in new file mode 100644 index 00000000..83836471 --- /dev/null +++ b/package/python-sqliteschema/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_PYTHON_SQLITESCHEMA + bool "python-sqliteschema" + depends on BR2_PACKAGE_PYTHON3 # python-mbstrdecoder + select BR2_PACKAGE_PYTHON_SETUPTOOLS # runtime + select BR2_PACKAGE_PYTHON_MBSTRDECODER # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON_TABLEDATA # runtime + select BR2_PACKAGE_PYTHON_TYPEPY # runtime + help + A Python library to dump table schema of a SQLite database + file. + + https://github.com/thombashi/sqliteschema diff --git a/package/python-sqliteschema/python-sqliteschema.hash b/package/python-sqliteschema/python-sqliteschema.hash new file mode 100644 index 00000000..b25b0ae1 --- /dev/null +++ b/package/python-sqliteschema/python-sqliteschema.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/sqliteschema/json +md5 175afa008a628f6dc32392a72d4c6b74 sqliteschema-0.16.2.tar.gz +sha256 023a443abdc12796928c04441fabbbe12e1fe8608f562b4650ae1f9a19504139 sqliteschema-0.16.2.tar.gz +# Locally computed sha256 checksums +sha256 7588265082eed5e9f4afd5090c57e610b740ec547b16aaaab739ba07c5eefb15 LICENSE diff --git a/package/python-sqliteschema/python-sqliteschema.mk b/package/python-sqliteschema/python-sqliteschema.mk new file mode 100644 index 00000000..890bfb9d --- /dev/null +++ b/package/python-sqliteschema/python-sqliteschema.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-sqliteschema +# +################################################################################ + +PYTHON_SQLITESCHEMA_VERSION = 0.16.2 +PYTHON_SQLITESCHEMA_SOURCE = sqliteschema-$(PYTHON_SQLITESCHEMA_VERSION).tar.gz +PYTHON_SQLITESCHEMA_SITE = https://files.pythonhosted.org/packages/91/b6/87a9218d37afd061a8b26c0ec058299b85c3f859f1c80aff10752188e056 +PYTHON_SQLITESCHEMA_SETUP_TYPE = setuptools +PYTHON_SQLITESCHEMA_LICENSE = MIT +PYTHON_SQLITESCHEMA_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-sqlparse/Config.in b/package/python-sqlparse/Config.in new file mode 100644 index 00000000..498b33ae --- /dev/null +++ b/package/python-sqlparse/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_SQLPARSE + bool "python-sqlparse" + help + sqlparse is a non-validating SQL parser for Python. + It provides support for parsing, splitting and formatting + SQL statements. + + https://github.com/andialbrecht/sqlparse diff --git a/package/python-sqlparse/python-sqlparse.hash b/package/python-sqlparse/python-sqlparse.hash new file mode 100644 index 00000000..a03abe34 --- /dev/null +++ b/package/python-sqlparse/python-sqlparse.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/sqlparse/json +md5 2ce34181d6b7b234c9f3c0ecd1ffb93e sqlparse-0.3.0.tar.gz +sha256 7c3dca29c022744e95b547e867cee89f4fce4373f3549ccd8797d8eb52cdb873 sqlparse-0.3.0.tar.gz +# Locally computed sha256 checksums +sha256 c1938235b80d39e93138eae89edc3af67e18ecbc40d266529fa57b2dce426310 LICENSE diff --git a/package/python-sqlparse/python-sqlparse.mk b/package/python-sqlparse/python-sqlparse.mk new file mode 100644 index 00000000..22111dfc --- /dev/null +++ b/package/python-sqlparse/python-sqlparse.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-sqlparse +# +################################################################################ + +PYTHON_SQLPARSE_VERSION = 0.3.0 +PYTHON_SQLPARSE_SOURCE = sqlparse-$(PYTHON_SQLPARSE_VERSION).tar.gz +PYTHON_SQLPARSE_SITE = https://files.pythonhosted.org/packages/63/c8/229dfd2d18663b375975d953e2bdc06d0eed714f93dcb7732f39e349c438 +PYTHON_SQLPARSE_SETUP_TYPE = setuptools +PYTHON_SQLPARSE_LICENSE = BSD-3-Clause +PYTHON_SQLPARSE_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-subprocess32/Config.in b/package/python-subprocess32/Config.in new file mode 100644 index 00000000..d7fe84f1 --- /dev/null +++ b/package/python-subprocess32/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_PYTHON_SUBPROCESS32 + bool "python-subprocess32" + depends on BR2_PACKAGE_PYTHON + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10 || !BR2_MIPS_NABI64 + help + A backport of the Python 3 subprocess module for use + on Python 2. + + https://github.com/google/python-subprocess32 + +comment "python-subprocess32 needs a toolchain w/ headers >= 3.10 on MIPS N64" + depends on BR2_MIPS_NABI64 + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10 diff --git a/package/python-subprocess32/python-subprocess32.hash b/package/python-subprocess32/python-subprocess32.hash new file mode 100644 index 00000000..65d18763 --- /dev/null +++ b/package/python-subprocess32/python-subprocess32.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/subprocess32/json +md5 748844d560be5f0c707931cba1cdb48b subprocess32-3.5.4.tar.gz +sha256 eb2937c80497978d181efa1b839ec2d9622cf9600a039a79d0e108d1f9aec79d subprocess32-3.5.4.tar.gz +# Locally computed sha256 checksums +sha256 826b43437249d39422642f695154d064da64de92eb1476048a615f50bc1beb4a LICENSE diff --git a/package/python-subprocess32/python-subprocess32.mk b/package/python-subprocess32/python-subprocess32.mk new file mode 100644 index 00000000..fb8a47f9 --- /dev/null +++ b/package/python-subprocess32/python-subprocess32.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# python-subprocess32 +# +################################################################################ + +PYTHON_SUBPROCESS32_VERSION = 3.5.4 +PYTHON_SUBPROCESS32_SOURCE = subprocess32-$(PYTHON_SUBPROCESS32_VERSION).tar.gz +PYTHON_SUBPROCESS32_SITE = https://files.pythonhosted.org/packages/32/c8/564be4d12629b912ea431f1a50eb8b3b9d00f1a0b1ceff17f266be190007 +PYTHON_SUBPROCESS32_SETUP_TYPE = setuptools +PYTHON_SUBPROCESS32_LICENSE = Python-2.0 +PYTHON_SUBPROCESS32_LICENSE_FILES = LICENSE + +# The configure step needs to be run outside of the setup.py since it isn't +# run correctly for cross-compiling +define PYTHON_SUBPROCESS32_CONFIGURE_CMDS + (cd $(@D) && \ + $(TARGET_CONFIGURE_OPTS) \ + $(TARGET_CONFIGURE_ARGS) \ + ./configure \ + --target=$(GNU_TARGET_NAME) \ + --host=$(GNU_TARGET_NAME) \ + --build=$(GNU_HOST_NAME) \ + --prefix=/usr \ + --exec-prefix=/usr \ + --sysconfdir=/etc \ + --program-prefix="" \ + ) +endef + +$(eval $(python-package)) diff --git a/package/python-systemd/Config.in b/package/python-systemd/Config.in new file mode 100644 index 00000000..599b43f7 --- /dev/null +++ b/package/python-systemd/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_SYSTEMD + bool "python-systemd" + depends on BR2_PACKAGE_SYSTEMD + help + Python module for native access to the systemd facilities. + + https://github.com/systemd/python-systemd + +comment "python-systemd needs systemd" + depends on !BR2_PACKAGE_SYSTEMD diff --git a/package/python-systemd/python-systemd.hash b/package/python-systemd/python-systemd.hash new file mode 100644 index 00000000..1e5cee5c --- /dev/null +++ b/package/python-systemd/python-systemd.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/systemd-python/ +md5 5071ea5bcb976186e92a3f5e75df221d systemd-python-234.tar.gz +# Locally computed +sha256 fd0e44bf70eadae45aadc292cb0a7eb5b0b6372cd1b391228047d33895db83e7 systemd-python-234.tar.gz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 LICENSE.txt diff --git a/package/python-systemd/python-systemd.mk b/package/python-systemd/python-systemd.mk new file mode 100644 index 00000000..3ccfd57c --- /dev/null +++ b/package/python-systemd/python-systemd.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-systemd +# +################################################################################ + +PYTHON_SYSTEMD_VERSION = 234 # Should be kept in sync with $(SYSTEMD_VERSION) +PYTHON_SYSTEMD_SOURCE = systemd-python-$(PYTHON_SYSTEMD_VERSION).tar.gz +PYTHON_SYSTEMD_SITE = https://pypi.python.org/packages/e8/a8/00ba0f605837a8f69523e6c3a4fb14675a6430c163f836540129c50b3aef +PYTHON_SYSTEMD_SETUP_TYPE = distutils +PYTHON_SYSTEMD_LICENSE = LGPL-2.1 +PYTHON_SYSTEMD_LICENSE_FILES = LICENSE.txt +PYTHON_SYSTEMD_DEPENDENCIES = systemd # To be able to link against libsystemd + +$(eval $(python-package)) diff --git a/package/python-tabledata/Config.in b/package/python-tabledata/Config.in new file mode 100644 index 00000000..a73207f9 --- /dev/null +++ b/package/python-tabledata/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PYTHON_TABLEDATA + bool "python-tabledata" + depends on BR2_PACKAGE_PYTHON3 # python-dataproperty, python-typepy + select BR2_PACKAGE_PYTHON_DATAPROPERTY # runtime + select BR2_PACKAGE_PYTHON_SETUPTOOLS # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON_TYPEPY # runtime + help + A Python library to represent tabular data for + pytablewriter/pytablereader/SimpleSQLite. + + https://github.com/thombashi/tabledata diff --git a/package/python-tabledata/python-tabledata.hash b/package/python-tabledata/python-tabledata.hash new file mode 100644 index 00000000..5c9a538f --- /dev/null +++ b/package/python-tabledata/python-tabledata.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/tabledata/json +md5 7d1ab52001d85d19d86f08a5ad8aab58 tabledata-1.1.2.tar.gz +sha256 db893596ab9066e5c4f002ae0fed70657e3b75cceb52dd1de5a0e145e338d830 tabledata-1.1.2.tar.gz +# Locally computed sha256 checksums +sha256 bebbdf0524a147f89a615fff53d79bdc90cbc7631550fb4b725cd3f3bdcd24f6 LICENSE diff --git a/package/python-tabledata/python-tabledata.mk b/package/python-tabledata/python-tabledata.mk new file mode 100644 index 00000000..c1503e69 --- /dev/null +++ b/package/python-tabledata/python-tabledata.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-tabledata +# +################################################################################ + +PYTHON_TABLEDATA_VERSION = 1.1.2 +PYTHON_TABLEDATA_SOURCE = tabledata-$(PYTHON_TABLEDATA_VERSION).tar.gz +PYTHON_TABLEDATA_SITE = https://files.pythonhosted.org/packages/73/7c/67eec8e92504b8e00e5cc0053a3401bd1441eefc70cecfa4427bfcf76b89 +PYTHON_TABLEDATA_SETUP_TYPE = setuptools +PYTHON_TABLEDATA_LICENSE = MIT +PYTHON_TABLEDATA_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-tempora/Config.in b/package/python-tempora/Config.in new file mode 100644 index 00000000..06ccbfc2 --- /dev/null +++ b/package/python-tempora/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_TEMPORA + bool "python-tempora" + depends on BR2_PACKAGE_PYTHON3 # python-jaraco-functools + select BR2_PACKAGE_PYTHON_JARACO_FUNCTOOLS # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON_PYTZ # runtime + help + Objects and routines pertaining to date and time. + + https://github.com/jaraco/tempora diff --git a/package/python-tempora/python-tempora.hash b/package/python-tempora/python-tempora.hash new file mode 100644 index 00000000..e9592461 --- /dev/null +++ b/package/python-tempora/python-tempora.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/tempora/json +md5 f8b2b0df1adf3f83b829a85e31bddb2d tempora-1.14.1.tar.gz +sha256 cb60b1d2b1664104e307f8e5269d7f4acdb077c82e35cd57246ae14a3427d2d6 tempora-1.14.1.tar.gz +# Locally computed sha256 checksums +sha256 a55e2ffe9b44998e621d51d8c094bed09acc4b5236ee73d7df395a33ba3c18fd LICENSE diff --git a/package/python-tempora/python-tempora.mk b/package/python-tempora/python-tempora.mk new file mode 100644 index 00000000..b2f1b6b3 --- /dev/null +++ b/package/python-tempora/python-tempora.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-tempora +# +################################################################################ + +PYTHON_TEMPORA_VERSION = 1.14.1 +PYTHON_TEMPORA_SOURCE = tempora-$(PYTHON_TEMPORA_VERSION).tar.gz +PYTHON_TEMPORA_SITE = https://files.pythonhosted.org/packages/2f/b5/5b0464385454c5ca93a39a1c6acefdf574aeb10ef45fa8958b3832cc7d96 +PYTHON_TEMPORA_LICENSE = MIT +PYTHON_TEMPORA_LICENSE_FILES = LICENSE +PYTHON_TEMPORA_SETUP_TYPE = setuptools +PYTHON_TEMPORA_DEPENDENCIES = host-python-setuptools-scm + +$(eval $(python-package)) diff --git a/package/python-termcolor/Config.in b/package/python-termcolor/Config.in new file mode 100644 index 00000000..e89da9b9 --- /dev/null +++ b/package/python-termcolor/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_TERMCOLOR + bool "python-termcolor" + help + ANSII Color formatting for output in terminal. + + http://pypi.python.org/pypi/termcolor diff --git a/package/python-termcolor/python-termcolor.hash b/package/python-termcolor/python-termcolor.hash new file mode 100644 index 00000000..7cccc3ec --- /dev/null +++ b/package/python-termcolor/python-termcolor.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/termcolor/json +md5 043e89644f8909d462fbbfa511c768df termcolor-1.1.0.tar.gz +sha256 1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b termcolor-1.1.0.tar.gz +# Locally computed sha256 checksums +sha256 497b3272b67b94a7aa58fa3748d21b62b29ccb783b1cda816f594e3932590bbf COPYING.txt diff --git a/package/python-termcolor/python-termcolor.mk b/package/python-termcolor/python-termcolor.mk new file mode 100644 index 00000000..ccdff4c0 --- /dev/null +++ b/package/python-termcolor/python-termcolor.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-termcolor +# +################################################################################ + +PYTHON_TERMCOLOR_VERSION = 1.1.0 +PYTHON_TERMCOLOR_SOURCE = termcolor-$(PYTHON_TERMCOLOR_VERSION).tar.gz +PYTHON_TERMCOLOR_SITE = https://files.pythonhosted.org/packages/8a/48/a76be51647d0eb9f10e2a4511bf3ffb8cc1e6b14e9e4fab46173aa79f981 +PYTHON_TERMCOLOR_SETUP_TYPE = distutils +PYTHON_TERMCOLOR_LICENSE = MIT +PYTHON_TERMCOLOR_LICENSE_FILES = COPYING.txt + +$(eval $(python-package)) diff --git a/package/python-terminaltables/Config.in b/package/python-terminaltables/Config.in new file mode 100644 index 00000000..8f3c4296 --- /dev/null +++ b/package/python-terminaltables/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_TERMINALTABLES + bool "python-terminaltables" + help + Generate simple tables in terminals from a nested list of + strings. + + https://github.com/Robpol86/terminaltables diff --git a/package/python-terminaltables/python-terminaltables.hash b/package/python-terminaltables/python-terminaltables.hash new file mode 100644 index 00000000..3184f5f7 --- /dev/null +++ b/package/python-terminaltables/python-terminaltables.hash @@ -0,0 +1,3 @@ +# md5, sha256 from https://pypi.org/pypi/terminaltables/json +md5 863797674d8f75d22e16e6c1fdcbeb41 terminaltables-3.1.0.tar.gz +sha256 f3eb0eb92e3833972ac36796293ca0906e998dc3be91fbe1f8615b331b853b81 terminaltables-3.1.0.tar.gz diff --git a/package/python-terminaltables/python-terminaltables.mk b/package/python-terminaltables/python-terminaltables.mk new file mode 100644 index 00000000..763f82e9 --- /dev/null +++ b/package/python-terminaltables/python-terminaltables.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-terminaltables +# +################################################################################ + +PYTHON_TERMINALTABLES_VERSION = 3.1.0 +PYTHON_TERMINALTABLES_SOURCE = terminaltables-$(PYTHON_TERMINALTABLES_VERSION).tar.gz +PYTHON_TERMINALTABLES_SITE = https://files.pythonhosted.org/packages/9b/c4/4a21174f32f8a7e1104798c445dacdc1d4df86f2f26722767034e4de4bff +PYTHON_TERMINALTABLES_SETUP_TYPE = setuptools +PYTHON_TERMINALTABLES_LICENSE = MIT + +$(eval $(python-package)) diff --git a/package/python-texttable/Config.in b/package/python-texttable/Config.in new file mode 100644 index 00000000..1c8dde8d --- /dev/null +++ b/package/python-texttable/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_TEXTTABLE + bool "python-texttable" + help + module for creating simple ASCII tables. + + https://github.com/foutaise/texttable/ diff --git a/package/python-texttable/python-texttable.hash b/package/python-texttable/python-texttable.hash new file mode 100644 index 00000000..a69e8ed4 --- /dev/null +++ b/package/python-texttable/python-texttable.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/texttable/json +md5 68e6b31d36f5c20221da7d5db3eca772 texttable-1.6.3.tar.gz +sha256 ce0faf21aa77d806bbff22b107cc22cce68dc9438f97a2df32c93e9afa4ce436 texttable-1.6.3.tar.gz +# Locally computed sha256 checksums +sha256 4ba7bdab54504a3bc44eb33ecca873a26a63ab902822101a87bb46235da63594 LICENSE diff --git a/package/python-texttable/python-texttable.mk b/package/python-texttable/python-texttable.mk new file mode 100644 index 00000000..6af23917 --- /dev/null +++ b/package/python-texttable/python-texttable.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-texttable +# +################################################################################ + +PYTHON_TEXTTABLE_VERSION = 1.6.3 +PYTHON_TEXTTABLE_SOURCE = texttable-$(PYTHON_TEXTTABLE_VERSION).tar.gz +PYTHON_TEXTTABLE_SITE = https://files.pythonhosted.org/packages/f5/be/716342325d6d6e05608e3a10e15f192f3723e454a25ce14bc9b9d1332772 +PYTHON_TEXTTABLE_SETUP_TYPE = setuptools +PYTHON_TEXTTABLE_LICENSE = MIT +PYTHON_TEXTTABLE_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-thrift/Config.in b/package/python-thrift/Config.in new file mode 100644 index 00000000..71fef5be --- /dev/null +++ b/package/python-thrift/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_THRIFT + bool "python-thrift" + select BR2_PACKAGE_PYTHON_SIX # runtime + help + Python bindings for the Apache Thrift RPC system. + + https://thrift.apache.org diff --git a/package/python-thrift/python-thrift.hash b/package/python-thrift/python-thrift.hash new file mode 100644 index 00000000..1d1d6289 --- /dev/null +++ b/package/python-thrift/python-thrift.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/thrift/json +md5 c3bc8d9a910d2c9ce26f2ad1f7c96762 thrift-0.13.0.tar.gz +sha256 9af1c86bf73433afc6010ed376a6c6aca2b54099cc0d61895f640870a9ae7d89 thrift-0.13.0.tar.gz +# Locally computed sha256 checksums +sha256 c13578ae9d0529d0252e1c7375b917bacf58723dce1fcd40c7ed59183401b468 LICENSE diff --git a/package/python-thrift/python-thrift.mk b/package/python-thrift/python-thrift.mk new file mode 100644 index 00000000..3a908ca9 --- /dev/null +++ b/package/python-thrift/python-thrift.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-thrift +# +################################################################################ + +PYTHON_THRIFT_VERSION = 0.13.0 +PYTHON_THRIFT_SOURCE = thrift-$(PYTHON_THRIFT_VERSION).tar.gz +PYTHON_THRIFT_SITE = https://files.pythonhosted.org/packages/97/1e/3284d19d7be99305eda145b8aa46b0c33244e4a496ec66440dac19f8274d +PYTHON_THRIFT_SETUP_TYPE = setuptools +PYTHON_THRIFT_LICENSE = Apache-2.0 +PYTHON_THRIFT_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-tinyrpc/Config.in b/package/python-tinyrpc/Config.in new file mode 100644 index 00000000..3194b782 --- /dev/null +++ b/package/python-tinyrpc/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_TINYRPC + bool "python-tinyrpc" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_SIX # runtime + help + A small, modular, transport and protocol neutral RPC + library that, among other things, supports JSON-RPC and + zmq. + + http://github.com/mbr/tinyrpc diff --git a/package/python-tinyrpc/python-tinyrpc.hash b/package/python-tinyrpc/python-tinyrpc.hash new file mode 100644 index 00000000..b4bc7ae8 --- /dev/null +++ b/package/python-tinyrpc/python-tinyrpc.hash @@ -0,0 +1,4 @@ +# md5, sha256 from https://pypi.org/pypi/tinyrpc/json +sha256 4b41fab967fb1c978f573bf0d609a3b12cc3b6ed62bd3108f43f575563746396 tinyrpc-1.0.4.tar.gz +md5 cd61e3cbc01ea940abc97d3a87abf4a7 tinyrpc-1.0.4.tar.gz +sha256 587f1ea174824613f4a7e0d7fb95fda000a7f58ca17df12416e014c9ee82e619 LICENSE diff --git a/package/python-tinyrpc/python-tinyrpc.mk b/package/python-tinyrpc/python-tinyrpc.mk new file mode 100644 index 00000000..0ac0470f --- /dev/null +++ b/package/python-tinyrpc/python-tinyrpc.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-tinyrpc +# +################################################################################ + +PYTHON_TINYRPC_VERSION = 1.0.4 +PYTHON_TINYRPC_SOURCE = tinyrpc-$(PYTHON_TINYRPC_VERSION).tar.gz +PYTHON_TINYRPC_SITE = https://files.pythonhosted.org/packages/9d/91/c639ba014aada92446516c5fc4b04f2cee3539ab2d0758a6a87a6da973cb +PYTHON_TINYRPC_SETUP_TYPE = setuptools +PYTHON_TINYRPC_LICENSE = MIT +PYTHON_TINYRPC_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-tomako/Config.in b/package/python-tomako/Config.in new file mode 100644 index 00000000..1521035b --- /dev/null +++ b/package/python-tomako/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_TOMAKO + bool "python-tomako" + depends on BR2_PACKAGE_PYTHON3 # python-tornado + select BR2_PACKAGE_PYTHON_TORNADO # runtime + select BR2_PACKAGE_PYTHON_MAKO # runtime + help + Tomako is the easiest way to use Mako as a template engine for + Tornado. + + https://github.com/rcmachado/tomako diff --git a/package/python-tomako/python-tomako.hash b/package/python-tomako/python-tomako.hash new file mode 100644 index 00000000..65576f41 --- /dev/null +++ b/package/python-tomako/python-tomako.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/tomako/json +md5 a2e9e99be4ddf2263ed441ddc3dfcf96 tomako-0.1.0.post1.tar.gz +# Locally computed +sha256 2d8ec113199408eb16ec00361aac6f10b716925779b6331083f304d01dafd150 tomako-0.1.0.post1.tar.gz +sha256 2b55167354e331f089d5f7a9a9ef4149b0baa95abd6860b6390a04001e1f2bb8 LICENSE diff --git a/package/python-tomako/python-tomako.mk b/package/python-tomako/python-tomako.mk new file mode 100644 index 00000000..23c0b34f --- /dev/null +++ b/package/python-tomako/python-tomako.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-tomako +# +################################################################################ + +PYTHON_TOMAKO_VERSION = 0.1.0.post1 +PYTHON_TOMAKO_SOURCE = tomako-$(PYTHON_TOMAKO_VERSION).tar.gz +PYTHON_TOMAKO_SITE = https://pypi.python.org/packages/30/64/e174248281cb2fa8f5bce955d4bd49b253e622bb540a6001e48dec378a07 +PYTHON_TOMAKO_SETUP_TYPE = setuptools +PYTHON_TOMAKO_LICENSE = MIT +PYTHON_TOMAKO_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-toml/Config.in b/package/python-toml/Config.in new file mode 100644 index 00000000..a41622fc --- /dev/null +++ b/package/python-toml/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_TOML + bool "python-toml" + help + Python Library for Tom's Obvious, Minimal Language. + + https://github.com/uiri/toml diff --git a/package/python-toml/python-toml.hash b/package/python-toml/python-toml.hash new file mode 100644 index 00000000..f0641ccd --- /dev/null +++ b/package/python-toml/python-toml.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/toml/json +md5 63fffbe2d632865ec29cd69bfdf36682 toml-0.10.0.tar.gz +sha256 229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c toml-0.10.0.tar.gz +# Locally computed sha256 checksums +sha256 a879cc43c06aca11ada36f71c8db7257449ff4451874a0903f129920c66fcf2d LICENSE diff --git a/package/python-toml/python-toml.mk b/package/python-toml/python-toml.mk new file mode 100644 index 00000000..b4f9070f --- /dev/null +++ b/package/python-toml/python-toml.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-toml +# +################################################################################ + +PYTHON_TOML_VERSION = 0.10.0 +PYTHON_TOML_SOURCE = toml-$(PYTHON_TOML_VERSION).tar.gz +PYTHON_TOML_SITE = https://files.pythonhosted.org/packages/b9/19/5cbd78eac8b1783671c40e34bb0fa83133a06d340a38b55c645076d40094 +PYTHON_TOML_SETUP_TYPE = setuptools +PYTHON_TOML_LICENSE = MIT +PYTHON_TOML_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-tornado/Config.in b/package/python-tornado/Config.in new file mode 100644 index 00000000..e1bf8343 --- /dev/null +++ b/package/python-tornado/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_TORNADO + bool "python-tornado" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON3_ZLIB + select BR2_PACKAGE_PYTHON3_SSL + help + Tornado is a Python web framework and asynchronous networking + library, originally developed at FriendFeed. + + http://www.tornadoweb.org diff --git a/package/python-tornado/python-tornado.hash b/package/python-tornado/python-tornado.hash new file mode 100644 index 00000000..e9fbbedf --- /dev/null +++ b/package/python-tornado/python-tornado.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/tornado/json +md5 cf39425f3d7eba9a54287f3e795a2f23 tornado-6.0.4.tar.gz +sha256 0fe2d45ba43b00a41cd73f8be321a44936dc1aba233dee979f17a042b83eb6dc tornado-6.0.4.tar.gz +# Locally computed sha256 checksums +sha256 3ddf9be5c28fe27dad143a5dc76eea25222ad1dd68934a047064e56ed2fa40c5 LICENSE diff --git a/package/python-tornado/python-tornado.mk b/package/python-tornado/python-tornado.mk new file mode 100644 index 00000000..c05a7d65 --- /dev/null +++ b/package/python-tornado/python-tornado.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-tornado +# +################################################################################ + +PYTHON_TORNADO_VERSION = 6.0.4 +PYTHON_TORNADO_SOURCE = tornado-$(PYTHON_TORNADO_VERSION).tar.gz +PYTHON_TORNADO_SITE = https://files.pythonhosted.org/packages/95/84/119a46d494f008969bf0c775cb2c6b3579d3c4cc1bb1b41a022aa93ee242 +PYTHON_TORNADO_LICENSE = Apache-2.0 +PYTHON_TORNADO_LICENSE_FILES = LICENSE +PYTHON_TORNADO_CPE_ID_VENDOR = tornadoweb +PYTHON_TORNADO_CPE_ID_PRODUCT = tornado +PYTHON_TORNADO_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-tqdm/Config.in b/package/python-tqdm/Config.in new file mode 100644 index 00000000..89b571fe --- /dev/null +++ b/package/python-tqdm/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_TQDM + bool "python-tqdm" + help + A Fast, Extensible Progress Bar for Python and CLI. + + https://tqdm.github.io diff --git a/package/python-tqdm/python-tqdm.hash b/package/python-tqdm/python-tqdm.hash new file mode 100644 index 00000000..8a61b29a --- /dev/null +++ b/package/python-tqdm/python-tqdm.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/project/tqdm +md5 285af1f905f4c375f03a86a667047950 tqdm-4.40.1.tar.gz +sha256 e405d16c98fcf30725d0c9d493ed07302a18846b5452de5253030ccd18996f87 tqdm-4.40.1.tar.gz +# Locally computed sha256 checksums +sha256 1bbf12d09d437844527b3cdaba01d379dac651b5cbb5ebb0d764274684d2680b LICENCE diff --git a/package/python-tqdm/python-tqdm.mk b/package/python-tqdm/python-tqdm.mk new file mode 100644 index 00000000..5ceddde1 --- /dev/null +++ b/package/python-tqdm/python-tqdm.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-tqdm +# +################################################################################ + +PYTHON_TQDM_VERSION = 4.40.1 +PYTHON_TQDM_SOURCE = tqdm-$(PYTHON_TQDM_VERSION).tar.gz +PYTHON_TQDM_SITE = https://files.pythonhosted.org/packages/4c/45/830c5c4bfaba60ef7d356a53c7751a86c81d148a16fda0daf3ac5ca8e288 +PYTHON_TQDM_SETUP_TYPE = setuptools +PYTHON_TQDM_LICENSE = MPL-2.0, MIT +PYTHON_TQDM_LICENSE_FILES = LICENCE +PYTHON_TQDM_CPE_ID_VENDOR = tqdm_project +PYTHON_TQDM_CPE_ID_PRODUCT = tqdm + +$(eval $(python-package)) diff --git a/package/python-traitlets/Config.in b/package/python-traitlets/Config.in new file mode 100644 index 00000000..f1804e55 --- /dev/null +++ b/package/python-traitlets/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_TRAITLETS + bool "python-traitlets" + select BR2_PACKAGE_PYTHON_ENUM34 if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON_IPYTHON_GENUTILS # runtime + select BR2_PACKAGE_PYTHON_DECORATOR # runtime + help + A configuration system for Python applications. + + https://pypi.python.org/pypi/traitlets diff --git a/package/python-traitlets/python-traitlets.hash b/package/python-traitlets/python-traitlets.hash new file mode 100644 index 00000000..068db553 --- /dev/null +++ b/package/python-traitlets/python-traitlets.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/traitlets/json +md5 3a4f263af65d3d79f1c279f0247077ef traitlets-4.3.3.tar.gz +sha256 d023ee369ddd2763310e4c3eae1ff649689440d4ae59d7485eb4cfbbe3e359f7 traitlets-4.3.3.tar.gz +# Locally computed sha256 checksums +sha256 71c89129039b870cc92309466c4fbe8f285a82fa0ea36f0e840fa83979cbe31f COPYING.md diff --git a/package/python-traitlets/python-traitlets.mk b/package/python-traitlets/python-traitlets.mk new file mode 100644 index 00000000..5973caf3 --- /dev/null +++ b/package/python-traitlets/python-traitlets.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-traitlets +# +################################################################################ + +PYTHON_TRAITLETS_VERSION = 4.3.3 +PYTHON_TRAITLETS_SOURCE = traitlets-$(PYTHON_TRAITLETS_VERSION).tar.gz +PYTHON_TRAITLETS_SITE = https://files.pythonhosted.org/packages/75/b0/43deb021bc943f18f07cbe3dac1d681626a48997b7ffa1e7fb14ef922b21 +PYTHON_TRAITLETS_LICENSE = BSD-3-Clause +PYTHON_TRAITLETS_LICENSE_FILES = COPYING.md +PYTHON_TRAITLETS_SETUP_TYPE = distutils + +$(eval $(python-package)) diff --git a/package/python-treq/Config.in b/package/python-treq/Config.in new file mode 100644 index 00000000..23056e72 --- /dev/null +++ b/package/python-treq/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_PYTHON_TREQ + bool "python-treq" + depends on BR2_INSTALL_LIBSTDCPP # python-pyopenssl + select BR2_PACKAGE_PYTHON_ATTRS # runtime + select BR2_PACKAGE_PYTHON_IDNA # runtime + select BR2_PACKAGE_PYTHON_INCREMENTAL # runtime + select BR2_PACKAGE_PYTHON_PYOPENSSL # runtime + select BR2_PACKAGE_PYTHON_REQUESTS # runtime + select BR2_PACKAGE_PYTHON_SERVICE_IDENTITY # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON_TWISTED # runtime + help + treq is an HTTP library inspired by requests but written on + top of Twisted's Agents. It provides a simple, higher level + API for making HTTP requests when using Twisted. + + https://github.com/twisted/treq + +comment "python-treq needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/python-treq/python-treq.hash b/package/python-treq/python-treq.hash new file mode 100644 index 00000000..288279cb --- /dev/null +++ b/package/python-treq/python-treq.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/treq/json +md5 b75f6c89fd481989a9cfdec8d61a6d84 treq-20.3.0.tar.gz +sha256 a72d7587d6f81c7a32620b00175825b4334bafbde73d37098d139ac7b11dca98 treq-20.3.0.tar.gz +# Locally computed sha256 checksums +sha256 7cc1b65e1937b1cc07052bb864ec96d8e5fd413400c0842e5b89a8201a600293 LICENSE diff --git a/package/python-treq/python-treq.mk b/package/python-treq/python-treq.mk new file mode 100644 index 00000000..320f57b6 --- /dev/null +++ b/package/python-treq/python-treq.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-treq +# +################################################################################ + +PYTHON_TREQ_VERSION = 20.3.0 +PYTHON_TREQ_SOURCE = treq-$(PYTHON_TREQ_VERSION).tar.gz +PYTHON_TREQ_SITE = https://files.pythonhosted.org/packages/98/09/25064d7224efde9fd51e8865353d516c53306e476eab27ab21fb258cf7d4 +PYTHON_TREQ_LICENSE = MIT +PYTHON_TREQ_LICENSE_FILES = LICENSE +PYTHON_TREQ_SETUP_TYPE = setuptools +PYTHON_TREQ_DEPENDENCIES = host-python-incremental + +$(eval $(python-package)) diff --git a/package/python-twisted/Config.in b/package/python-twisted/Config.in new file mode 100644 index 00000000..4e24a3f7 --- /dev/null +++ b/package/python-twisted/Config.in @@ -0,0 +1,33 @@ +config BR2_PACKAGE_PYTHON_TWISTED + bool "python-twisted" + select BR2_PACKAGE_PYTHON_INCREMENTAL + select BR2_PACKAGE_PYTHON_ATTRS # runtime + select BR2_PACKAGE_PYTHON_AUTOMAT # runtime + select BR2_PACKAGE_PYTHON_CONSTANTLY # runtime + select BR2_PACKAGE_PYTHON_HYPERLINK # runtime + select BR2_PACKAGE_PYTHON_PYHAMCREST # runtime + select BR2_PACKAGE_PYTHON_ZOPE_INTERFACE # runtime + help + Twisted is an event-driven networking engine written in + Python. + + https://twistedmatrix.com/trac/ + +if BR2_PACKAGE_PYTHON_TWISTED + +config BR2_PACKAGE_PYTHON_TWISTED_HTTP2 + bool "HTTP2 support" + select BR2_PACKAGE_PYTHON_H2 # runtime + select BR2_PACKAGE_PYTHON_PRIORITY # runtime + +config BR2_PACKAGE_PYTHON_TWISTED_TLS + bool "TLS support" + depends on BR2_INSTALL_LIBSTDCPP # python-{pyopenssl,service-identity} + select BR2_PACKAGE_PYTHON_IDNA # runtime + select BR2_PACKAGE_PYTHON_PYOPENSSL # runtime + select BR2_PACKAGE_PYTHON_SERVICE_IDENTITY # runtime + +comment "TLS support needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP + +endif diff --git a/package/python-twisted/python-twisted.hash b/package/python-twisted/python-twisted.hash new file mode 100644 index 00000000..c633112e --- /dev/null +++ b/package/python-twisted/python-twisted.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/twisted/json +md5 fc16d575730db7d0cddd09fc35af3eea Twisted-20.3.0.tar.bz2 +sha256 d72c55b5d56e176563b91d11952d13b01af8725c623e498db5507b6614fc1e10 Twisted-20.3.0.tar.bz2 +# Locally computed sha256 +sha256 98426fd47315df70098e0d85efbb5d7dd8001c9c536386937354640d6d8d75b9 LICENSE diff --git a/package/python-twisted/python-twisted.mk b/package/python-twisted/python-twisted.mk new file mode 100644 index 00000000..49d97af0 --- /dev/null +++ b/package/python-twisted/python-twisted.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# python-twisted +# +################################################################################ + +PYTHON_TWISTED_VERSION = 20.3.0 +PYTHON_TWISTED_SOURCE = Twisted-$(PYTHON_TWISTED_VERSION).tar.bz2 +PYTHON_TWISTED_SITE = https://files.pythonhosted.org/packages/4a/b4/4973c7ccb5be2ec0abc779b7d5f9d5f24b17b0349e23240cfc9dc3bd83cc +PYTHON_TWISTED_SETUP_TYPE = setuptools +PYTHON_TWISTED_LICENSE = MIT +PYTHON_TWISTED_LICENSE_FILES = LICENSE +PYTHON_TWISTED_CPE_ID_VENDOR = twistedmatrix +PYTHON_TWISTED_CPE_ID_PRODUCT = twisted +PYTHON_TWISTED_DEPENDENCIES = python-incremental host-python-incremental + +$(eval $(python-package)) diff --git a/package/python-txaio/Config.in b/package/python-txaio/Config.in new file mode 100644 index 00000000..19a318a9 --- /dev/null +++ b/package/python-txaio/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_TXAIO + bool "python-txaio" + depends on BR2_PACKAGE_PYTHON3 + help + Compatibility API between asyncio/Twisted/Trollius. + + https://pypi.python.org/pypi/txaio diff --git a/package/python-txaio/python-txaio.hash b/package/python-txaio/python-txaio.hash new file mode 100644 index 00000000..15b1f5f2 --- /dev/null +++ b/package/python-txaio/python-txaio.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/txaio/json +md5 c998be8d5837218c809266c0fce94687 txaio-20.4.1.tar.gz +sha256 17938f2bca4a9cabce61346758e482ca4e600160cbc28e861493eac74a19539d txaio-20.4.1.tar.gz +# Locally computed sha256 checksums +sha256 0387eefce570453daaa60633f28676003731eeca28b2d0a0071c628e3a0004ef LICENSE diff --git a/package/python-txaio/python-txaio.mk b/package/python-txaio/python-txaio.mk new file mode 100644 index 00000000..2dd028f4 --- /dev/null +++ b/package/python-txaio/python-txaio.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-txaio +# +################################################################################ + +PYTHON_TXAIO_VERSION = 20.4.1 +PYTHON_TXAIO_SOURCE = txaio-$(PYTHON_TXAIO_VERSION).tar.gz +PYTHON_TXAIO_SITE = https://files.pythonhosted.org/packages/e7/dd/c0c90b080c3fad0ac8e2382eddbe86591d4fa1a5c1aea652de0adf245fc0 +PYTHON_TXAIO_LICENSE = MIT +PYTHON_TXAIO_LICENSE_FILES = LICENSE +PYTHON_TXAIO_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-txdbus/Config.in b/package/python-txdbus/Config.in new file mode 100644 index 00000000..f38bbf93 --- /dev/null +++ b/package/python-txdbus/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_TXDBUS + bool "python-txdbus" + select BR2_PACKAGE_PYTHON_TWISTED # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + help + A native Python implementation of the DBus protocol for + Twisted applications. + + https://github.com/cocagne/txdbus diff --git a/package/python-txdbus/python-txdbus.hash b/package/python-txdbus/python-txdbus.hash new file mode 100644 index 00000000..5d386272 --- /dev/null +++ b/package/python-txdbus/python-txdbus.hash @@ -0,0 +1,3 @@ +# md5, sha256 from https://pypi.org/pypi/txdbus/json +md5 d397357dee78750385f92ca9c6c1f063 txdbus-1.1.2.tar.gz +sha256 8375a5fb68a12054f0def91af800c821fb2232949337756ed975f88d8ea2bc97 txdbus-1.1.2.tar.gz diff --git a/package/python-txdbus/python-txdbus.mk b/package/python-txdbus/python-txdbus.mk new file mode 100644 index 00000000..4e4ddf03 --- /dev/null +++ b/package/python-txdbus/python-txdbus.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-txdbus +# +################################################################################ + +PYTHON_TXDBUS_VERSION = 1.1.2 +PYTHON_TXDBUS_SOURCE = txdbus-$(PYTHON_TXDBUS_VERSION).tar.gz +PYTHON_TXDBUS_SITE = https://files.pythonhosted.org/packages/d6/ef/43377e975b8d37862fd1166a4998f908651f5e205ddc9bbd7a57c6e5b4b6 +PYTHON_TXDBUS_SETUP_TYPE = setuptools +PYTHON_TXDBUS_LICENSE = MIT + +$(eval $(python-package)) diff --git a/package/python-txtorcon/Config.in b/package/python-txtorcon/Config.in new file mode 100644 index 00000000..4f91e7b0 --- /dev/null +++ b/package/python-txtorcon/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_PYTHON_TXTORCON + bool "python-txtorcon" + depends on BR2_INSTALL_LIBSTDCPP # python-pyopenssl, python-service-identity + select BR2_PACKAGE_PYTHON_AUTOMAT # runtime + select BR2_PACKAGE_PYTHON_IDNA # runtime + select BR2_PACKAGE_PYTHON_INCREMENTAL # runtime + select BR2_PACKAGE_PYTHON_IPADDRESS if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON_PYOPENSSL # runtime + select BR2_PACKAGE_PYTHON_SERVICE_IDENTITY # runtime + select BR2_PACKAGE_PYTHON_TWISTED # runtime + select BR2_PACKAGE_PYTHON_ZOPE_INTERFACE # runtime + help + Twisted-based Tor controller client, with state-tracking and + configuration abstractions. + + https://github.com/meejah/txtorcon + +comment "python-txtorcon needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/python-txtorcon/python-txtorcon.hash b/package/python-txtorcon/python-txtorcon.hash new file mode 100644 index 00000000..803933f1 --- /dev/null +++ b/package/python-txtorcon/python-txtorcon.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/txtorcon/json +md5 fb323f9874298a8145dbe8d43c387932 txtorcon-19.1.0.tar.gz +sha256 25d8e52c3eac45bb90ff958ca7cdd7674fb3284e3a50826a58ab7b9578b15ea5 txtorcon-19.1.0.tar.gz +# Locally computed sha256 checksums +sha256 3ada1c32ef38c23d96d7f4e8f4a226c527f51e0202883c7543b06f9cc5228a2b LICENSE diff --git a/package/python-txtorcon/python-txtorcon.mk b/package/python-txtorcon/python-txtorcon.mk new file mode 100644 index 00000000..4df400c3 --- /dev/null +++ b/package/python-txtorcon/python-txtorcon.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# python-txtorcon +# +################################################################################ + +PYTHON_TXTORCON_VERSION = 19.1.0 +PYTHON_TXTORCON_SOURCE = txtorcon-$(PYTHON_TXTORCON_VERSION).tar.gz +PYTHON_TXTORCON_SITE = https://files.pythonhosted.org/packages/8c/26/d5b2fba4ffbcb23957ff2cee4d7d0a2d667372b9eb04807058bd561c8e8f +PYTHON_TXTORCON_SETUP_TYPE = setuptools +PYTHON_TXTORCON_LICENSE = MIT +PYTHON_TXTORCON_LICENSE_FILES = LICENSE + +ifeq ($(BR2_PACKAGE_PYTHON),y) +# only needed/valid for python 3.x +define PYTHON_TXTORCON_RM_PY3_FILE + rm -f $(TARGET_DIR)/usr/lib/python*/site-packages/txtorcon/controller_py3.py +endef + +PYTHON_TXTORCON_POST_INSTALL_TARGET_HOOKS += PYTHON_TXTORCON_RM_PY3_FILE +endif + +$(eval $(python-package)) diff --git a/package/python-typepy/Config.in b/package/python-typepy/Config.in new file mode 100644 index 00000000..0d58efb3 --- /dev/null +++ b/package/python-typepy/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PYTHON_TYPEPY + bool "python-typepy" + depends on BR2_PACKAGE_PYTHON3 # python-mbstrdecoder + select BR2_PACKAGE_PYTHON_DATEUTIL # runtime + select BR2_PACKAGE_PYTHON_MBSTRDECODER # runtime + select BR2_PACKAGE_PYTHON_PYTZ # runtime + select BR2_PACKAGE_PYTHON_SIX # runtime + help + A Python library for variable type + checker/validator/converter at a run time. + + https://github.com/thombashi/typepy diff --git a/package/python-typepy/python-typepy.hash b/package/python-typepy/python-typepy.hash new file mode 100644 index 00000000..03f7aef2 --- /dev/null +++ b/package/python-typepy/python-typepy.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/typepy/json +md5 b9abd4d661dabe512e95ca69ddb65d55 typepy-0.0.20.tar.gz +# Locally computed +sha256 a1a5b9438670d4a5d9f882b7499ea85d06dc384577bb7636cb29d903288bca8c typepy-0.0.20.tar.gz +sha256 bebbdf0524a147f89a615fff53d79bdc90cbc7631550fb4b725cd3f3bdcd24f6 LICENSE diff --git a/package/python-typepy/python-typepy.mk b/package/python-typepy/python-typepy.mk new file mode 100644 index 00000000..33d80919 --- /dev/null +++ b/package/python-typepy/python-typepy.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-typepy +# +################################################################################ + +PYTHON_TYPEPY_VERSION = 0.0.20 +PYTHON_TYPEPY_SOURCE = typepy-$(PYTHON_TYPEPY_VERSION).tar.gz +PYTHON_TYPEPY_SITE = https://pypi.python.org/packages/88/98/c79a19ae571d713fa0b10bc7e0fe611e53c542720b5a9dd2691ca15b3dd8 +PYTHON_TYPEPY_SETUP_TYPE = setuptools +PYTHON_TYPEPY_LICENSE = MIT +PYTHON_TYPEPY_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-typing-extensions/Config.in b/package/python-typing-extensions/Config.in new file mode 100644 index 00000000..0c7c74c5 --- /dev/null +++ b/package/python-typing-extensions/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_TYPING_EXTENSIONS + bool "python-typing-extensions" + select BR2_PACKAGE_PYTHON_TYPING if BR2_PACKAGE_PYTHON # runtime + help + Backported and Experimental Type Hints for Python 3.5+. + + https://github.com/python/typing/blob/master/typing_extensions/README.rst diff --git a/package/python-typing-extensions/python-typing-extensions.hash b/package/python-typing-extensions/python-typing-extensions.hash new file mode 100644 index 00000000..4c76caba --- /dev/null +++ b/package/python-typing-extensions/python-typing-extensions.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/typing_extensions/json +md5 5fcbfcb22e6f8c9bf23fb9f8e020f6ee typing_extensions-3.7.4.3.tar.gz +sha256 99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c typing_extensions-3.7.4.3.tar.gz +# Locally computed sha256 checksums +sha256 ff17ce94e102024deb68773eb1cc74ca76da4e658f373531f0ac22d68a6bb1ad LICENSE diff --git a/package/python-typing-extensions/python-typing-extensions.mk b/package/python-typing-extensions/python-typing-extensions.mk new file mode 100644 index 00000000..2bcf1342 --- /dev/null +++ b/package/python-typing-extensions/python-typing-extensions.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-typing-extensions +# +################################################################################ + +PYTHON_TYPING_EXTENSIONS_VERSION = 3.7.4.3 +PYTHON_TYPING_EXTENSIONS_SOURCE = typing_extensions-$(PYTHON_TYPING_EXTENSIONS_VERSION).tar.gz +PYTHON_TYPING_EXTENSIONS_SITE = https://files.pythonhosted.org/packages/16/06/0f7367eafb692f73158e5c5cbca1aec798cdf78be5167f6415dd4205fa32 +PYTHON_TYPING_EXTENSIONS_SETUP_TYPE = setuptools +PYTHON_TYPING_EXTENSIONS_LICENSE = Python-2.0 +PYTHON_TYPING_EXTENSIONS_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-typing/Config.in b/package/python-typing/Config.in new file mode 100644 index 00000000..81b7d71b --- /dev/null +++ b/package/python-typing/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_TYPING + bool "python-typing" + depends on BR2_PACKAGE_PYTHON + help + Type Hints for Python. This is a backport of the standard + library typing module to Python versions older than 3.5. + + https://docs.python.org/3/library/typing.html diff --git a/package/python-typing/python-typing.hash b/package/python-typing/python-typing.hash new file mode 100644 index 00000000..438ecb07 --- /dev/null +++ b/package/python-typing/python-typing.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/typing/json +md5 276296e7b6b617d4f8b5e8874f240bd4 typing-3.7.4.3.tar.gz +sha256 1187fb9c82fd670d10aa07bbb6cfcfe4bdda42d6fab8d5134f04e8c4d0b71cc9 typing-3.7.4.3.tar.gz +# Locally computed sha256 checksums +sha256 ff17ce94e102024deb68773eb1cc74ca76da4e658f373531f0ac22d68a6bb1ad LICENSE diff --git a/package/python-typing/python-typing.mk b/package/python-typing/python-typing.mk new file mode 100644 index 00000000..efb21962 --- /dev/null +++ b/package/python-typing/python-typing.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-typing +# +################################################################################ + +PYTHON_TYPING_VERSION = 3.7.4.3 +PYTHON_TYPING_SOURCE = typing-$(PYTHON_TYPING_VERSION).tar.gz +PYTHON_TYPING_SITE = https://files.pythonhosted.org/packages/05/d9/6eebe19d46bd05360c9a9aae822e67a80f9242aabbfc58b641b957546607 +PYTHON_TYPING_SETUP_TYPE = setuptools +PYTHON_TYPING_LICENSE = Python-2.0, others +PYTHON_TYPING_LICENSE_FILES = LICENSE + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-u-msgpack/Config.in b/package/python-u-msgpack/Config.in new file mode 100644 index 00000000..e0031649 --- /dev/null +++ b/package/python-u-msgpack/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_U_MSGPACK + bool "python-u-msgpack" + help + A portable, lightweight MessagePack serializer and + deserializer written in pure Python. + + https://github.com/vsergeev/u-msgpack-python diff --git a/package/python-u-msgpack/python-u-msgpack.hash b/package/python-u-msgpack/python-u-msgpack.hash new file mode 100644 index 00000000..70c67c72 --- /dev/null +++ b/package/python-u-msgpack/python-u-msgpack.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/u-msgpack-python/json +md5 bbeedd924f3d8c8ee90611914b3594e6 u-msgpack-python-2.5.2.tar.gz +sha256 09c85a8af77376034396681e76bf30c249a4fd8e5ebb239f8a468d3655f210d0 u-msgpack-python-2.5.2.tar.gz +# Locally computed sha256 +sha256 0603a3e697a80b13640e3023bb534727f683ada5c4b0b0149d001ec5272d64f4 LICENSE diff --git a/package/python-u-msgpack/python-u-msgpack.mk b/package/python-u-msgpack/python-u-msgpack.mk new file mode 100644 index 00000000..6d98e552 --- /dev/null +++ b/package/python-u-msgpack/python-u-msgpack.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-u-msgpack +# +################################################################################ + +PYTHON_U_MSGPACK_VERSION = 2.5.2 +PYTHON_U_MSGPACK_SOURCE = u-msgpack-python-$(PYTHON_U_MSGPACK_VERSION).tar.gz +PYTHON_U_MSGPACK_SITE = https://files.pythonhosted.org/packages/75/c4/d9404382d0f7d9be27b5d13498d033a4faa83f325b3893e1c29a0faa83b9 +PYTHON_U_MSGPACK_SETUP_TYPE = setuptools +PYTHON_U_MSGPACK_LICENSE = MIT +PYTHON_U_MSGPACK_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-ubjson/Config.in b/package/python-ubjson/Config.in new file mode 100644 index 00000000..86ed3b2e --- /dev/null +++ b/package/python-ubjson/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_UBJSON + bool "python-ubjson" + help + This is a Python v3.2+ (and 2.7+) Universal Binary JSON + encoder/decoder based on the draft-12 specification. + + https://pypi.python.org/pypi/py-ubjson diff --git a/package/python-ubjson/python-ubjson.hash b/package/python-ubjson/python-ubjson.hash new file mode 100644 index 00000000..a7e954ce --- /dev/null +++ b/package/python-ubjson/python-ubjson.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/py-ubjson/json +md5 26c07be8e4c9f2b0ee7c42a9aca118ed py-ubjson-0.14.0.tar.gz +sha256 f742c87bccc8653329d3f79b8b3f40d44d11d17cce7f6d7025a73c52ebf91c66 py-ubjson-0.14.0.tar.gz +# Locally computed sha256 checksums +sha256 ca182abcb84ad9984c9af2e30cb70c4fe0e1772674355207e8fcdb85e8c5e75f LICENSE diff --git a/package/python-ubjson/python-ubjson.mk b/package/python-ubjson/python-ubjson.mk new file mode 100644 index 00000000..58bba2ac --- /dev/null +++ b/package/python-ubjson/python-ubjson.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-ubjson +# +################################################################################ + +PYTHON_UBJSON_VERSION = 0.14.0 +PYTHON_UBJSON_SOURCE = py-ubjson-$(PYTHON_UBJSON_VERSION).tar.gz +PYTHON_UBJSON_SITE = https://files.pythonhosted.org/packages/10/31/0d8297c33d681aafa3fe900ca072a96d5acb97e79082fbb593e835376c93 +PYTHON_UBJSON_LICENSE = Apache-2.0 +PYTHON_UBJSON_LICENSE_FILES = LICENSE +PYTHON_UBJSON_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-ujson/Config.in b/package/python-ujson/Config.in new file mode 100644 index 00000000..d185c985 --- /dev/null +++ b/package/python-ujson/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_UJSON + bool "python-ujson" + help + UltraJSON is an ultra fast JSON encoder and decoder written + in pure C with bindings for Python 2.5+ and 3. + + https://pypi.python.org/pypi/ujson diff --git a/package/python-ujson/python-ujson.hash b/package/python-ujson/python-ujson.hash new file mode 100644 index 00000000..21320346 --- /dev/null +++ b/package/python-ujson/python-ujson.hash @@ -0,0 +1,3 @@ +# md5 from https://pypi.python.org/pypi?:action=show_md5&digest=42f77b0cce686dfa4da2e68480b1dd24,sha256 locally computed. +md5 42f77b0cce686dfa4da2e68480b1dd24 ujson-1.35.tar.gz +sha256 f66073e5506e91d204ab0c614a148d5aa938bdbf104751be66f8ad7a222f5f86 ujson-1.35.tar.gz diff --git a/package/python-ujson/python-ujson.mk b/package/python-ujson/python-ujson.mk new file mode 100644 index 00000000..60a4ecf8 --- /dev/null +++ b/package/python-ujson/python-ujson.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-ujson +# +################################################################################ + +PYTHON_UJSON_VERSION = 1.35 +PYTHON_UJSON_SOURCE = ujson-$(PYTHON_UJSON_VERSION).tar.gz +PYTHON_UJSON_SITE = https://pypi.python.org/packages/source/u/ujson +PYTHON_UJSON_LICENSE = BSD-3-Clause +PYTHON_UJSON_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-urllib3/Config.in b/package/python-urllib3/Config.in new file mode 100644 index 00000000..21d3f674 --- /dev/null +++ b/package/python-urllib3/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_URLLIB3 + bool "python-urllib3" + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 # runtime + help + Python HTTP library with thread-safe connection pooling, file + post support, sanity friendly, and more. + + http://urllib3.readthedocs.org/ diff --git a/package/python-urllib3/python-urllib3.hash b/package/python-urllib3/python-urllib3.hash new file mode 100644 index 00000000..288d986e --- /dev/null +++ b/package/python-urllib3/python-urllib3.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/urllib3/json +md5 3a88ec3bcb761ca23df2c3583949be37 urllib3-1.26.6.tar.gz +sha256 f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f urllib3-1.26.6.tar.gz +# Locally computed sha256 checksums +sha256 c37bf186e27cf9dbe9619e55edfe3cea7b30091ceb3da63c7dacbe0e6d77907b LICENSE.txt diff --git a/package/python-urllib3/python-urllib3.mk b/package/python-urllib3/python-urllib3.mk new file mode 100644 index 00000000..775986d5 --- /dev/null +++ b/package/python-urllib3/python-urllib3.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-urllib3 +# +################################################################################ + +PYTHON_URLLIB3_VERSION = 1.26.6 +PYTHON_URLLIB3_SOURCE = urllib3-$(PYTHON_URLLIB3_VERSION).tar.gz +PYTHON_URLLIB3_SITE = https://files.pythonhosted.org/packages/4f/5a/597ef5911cb8919efe4d86206aa8b2658616d676a7088f0825ca08bd7cb8 +PYTHON_URLLIB3_LICENSE = MIT +PYTHON_URLLIB3_LICENSE_FILES = LICENSE.txt +PYTHON_URLLIB3_CPE_ID_VENDOR = python +PYTHON_URLLIB3_CPE_ID_PRODUCT = urllib3 +PYTHON_URLLIB3_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-urwid/Config.in b/package/python-urwid/Config.in new file mode 100644 index 00000000..f584a925 --- /dev/null +++ b/package/python-urwid/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_URWID + bool "python-urwid" + help + Urwid is a console user interface library for Python + + http://urwid.org/ diff --git a/package/python-urwid/python-urwid.hash b/package/python-urwid/python-urwid.hash new file mode 100644 index 00000000..51a6e12e --- /dev/null +++ b/package/python-urwid/python-urwid.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/urwid/json +md5 c70a7016fa1ad2c2a979dbebd4de78c2 urwid-2.0.1.tar.gz +sha256 644d3e3900867161a2fc9287a9762753d66bd194754679adb26aede559bcccbc urwid-2.0.1.tar.gz +# Locally computed sha256 +sha256 36b6d3fa47916943fd5fec313c584784946047ec1337a78b440e5992cb595f89 COPYING diff --git a/package/python-urwid/python-urwid.mk b/package/python-urwid/python-urwid.mk new file mode 100644 index 00000000..f8a37023 --- /dev/null +++ b/package/python-urwid/python-urwid.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-urwid +# +################################################################################ + +PYTHON_URWID_VERSION = 2.0.1 +PYTHON_URWID_SOURCE = urwid-$(PYTHON_URWID_VERSION).tar.gz +PYTHON_URWID_SITE = https://files.pythonhosted.org/packages/c7/90/415728875c230fafd13d118512bde3184d810d7bf798a631abc05fac09d0 +PYTHON_URWID_LICENSE = LGPL-2.1+ +PYTHON_URWID_LICENSE_FILES = COPYING +PYTHON_URWID_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-uvloop/Config.in b/package/python-uvloop/Config.in new file mode 100644 index 00000000..76e06ac3 --- /dev/null +++ b/package/python-uvloop/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_PYTHON_UVLOOP + bool "python-uvloop" + depends on BR2_PACKAGE_PYTHON3 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # libuv + depends on BR2_USE_MMU # libuv + depends on !BR2_STATIC_LIBS # libuv + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # libuv + select BR2_PACKAGE_LIBUV + select BR2_PACKAGE_PYTHON3_SSL + help + Fast implementation of asyncio event loop on top of libuv. + + http://github.com/MagicStack/uvloop + +comment "python-uvloop needs a toolchain w/ NPTL, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_USE_MMU diff --git a/package/python-uvloop/python-uvloop.hash b/package/python-uvloop/python-uvloop.hash new file mode 100644 index 00000000..436babf9 --- /dev/null +++ b/package/python-uvloop/python-uvloop.hash @@ -0,0 +1,6 @@ +# md5, sha256 from https://pypi.org/pypi/uvloop/json +md5 a2f82abb676756f11f544c6b51caf171 uvloop-0.14.0.tar.gz +sha256 123ac9c0c7dd71464f58f1b4ee0bbd81285d96cdda8bc3519281b8973e3a461e uvloop-0.14.0.tar.gz +# Locally computed sha256 checksums +sha256 2fdc436a67077941295c58647f521fbef8f50e46db0970552fa1a4dd8ae261c6 LICENSE-APACHE +sha256 9185f3c77e9f6ef8859a6ba4c94128ac1329876be3e813aad32d7645e51ae409 LICENSE-MIT diff --git a/package/python-uvloop/python-uvloop.mk b/package/python-uvloop/python-uvloop.mk new file mode 100644 index 00000000..3ee8d299 --- /dev/null +++ b/package/python-uvloop/python-uvloop.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# python-uvloop +# +################################################################################ + +PYTHON_UVLOOP_VERSION = 0.14.0 +PYTHON_UVLOOP_SOURCE = uvloop-$(PYTHON_UVLOOP_VERSION).tar.gz +PYTHON_UVLOOP_SITE = https://files.pythonhosted.org/packages/84/2e/462e7a25b787d2b40cf6c9864a9e702f358349fc9cfb77e83c38acb73048 +PYTHON_UVLOOP_SETUP_TYPE = setuptools +PYTHON_UVLOOP_LICENSE = Apache-2.0, MIT +PYTHON_UVLOOP_LICENSE_FILES = LICENSE-APACHE LICENSE-MIT +PYTHON_UVLOOP_BUILD_OPTS = build_ext --inplace --use-system-libuv +PYTHON_UVLOOP_INSTALL_TARGET_OPTS = build_ext --inplace --use-system-libuv +PYTHON_UVLOOP_DEPENDENCIES = libuv + +$(eval $(python-package)) diff --git a/package/python-validators/Config.in b/package/python-validators/Config.in new file mode 100644 index 00000000..802b1dde --- /dev/null +++ b/package/python-validators/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_VALIDATORS + bool "python-validators" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON_DECORATOR # runtime + help + Python Data Validation for Humans. + + https://github.com/kvesteri/validators diff --git a/package/python-validators/python-validators.hash b/package/python-validators/python-validators.hash new file mode 100644 index 00000000..2845a2e8 --- /dev/null +++ b/package/python-validators/python-validators.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/validators/json +md5 2f0446f2a15aa694be0cfd8728eb4444 validators-0.15.0.tar.gz +sha256 31e8bb01b48b48940a021b8a9576b840f98fa06b91762ef921d02cb96d38727a validators-0.15.0.tar.gz +# Locally computed sha256 checksums +sha256 a7fd9d761c7ca1c6508b9baf030f6e21f5752d1caea3e49a270634aa9ef01e6f LICENSE diff --git a/package/python-validators/python-validators.mk b/package/python-validators/python-validators.mk new file mode 100644 index 00000000..5bed0519 --- /dev/null +++ b/package/python-validators/python-validators.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-validators +# +################################################################################ + +PYTHON_VALIDATORS_VERSION = 0.15.0 +PYTHON_VALIDATORS_SOURCE = validators-$(PYTHON_VALIDATORS_VERSION).tar.gz +PYTHON_VALIDATORS_SITE = https://files.pythonhosted.org/packages/c4/4a/4f9c892f9a9f08ee5f99c32bbd4297499099c2c5f7eff8c617a57d31a7d8 +PYTHON_VALIDATORS_SETUP_TYPE = setuptools +PYTHON_VALIDATORS_LICENSE = MIT +PYTHON_VALIDATORS_LICENSE_FILES = LICENSE +PYTHON_VALIDATORS_CPE_ID_VENDOR = validators_project +PYTHON_VALIDATORS_CPE_ID_PRODUCT = validators + +$(eval $(python-package)) diff --git a/package/python-vcversioner/python-vcversioner.hash b/package/python-vcversioner/python-vcversioner.hash new file mode 100644 index 00000000..58573a18 --- /dev/null +++ b/package/python-vcversioner/python-vcversioner.hash @@ -0,0 +1,3 @@ +# md5 from https://pypi.python.org/pypi/vcversioner/json, sha256 locally computed +md5 aab6ef5e0cf8614a1b1140ed5b7f107d vcversioner-2.16.0.0.tar.gz +sha256 dae60c17a479781f44a4010701833f1829140b1eeccd258762a74974aa06e19b vcversioner-2.16.0.0.tar.gz diff --git a/package/python-vcversioner/python-vcversioner.mk b/package/python-vcversioner/python-vcversioner.mk new file mode 100644 index 00000000..e7a62f86 --- /dev/null +++ b/package/python-vcversioner/python-vcversioner.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-vcversioner +# +################################################################################ + +PYTHON_VCVERSIONER_VERSION = 2.16.0.0 +PYTHON_VCVERSIONER_SOURCE = vcversioner-$(PYTHON_VCVERSIONER_VERSION).tar.gz +PYTHON_VCVERSIONER_SITE = https://pypi.python.org/packages/c5/cc/33162c0a7b28a4d8c83da07bc2b12cee58c120b4a9e8bba31c41c8d35a16 +PYTHON_VCVERSIONER_SETUP_TYPE = setuptools +PYTHON_VCVERSIONER_LICENSE = ISC + +$(eval $(host-python-package)) diff --git a/package/python-versiontools/Config.in b/package/python-versiontools/Config.in new file mode 100644 index 00000000..d15de1f0 --- /dev/null +++ b/package/python-versiontools/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_VERSIONTOOLS + bool "python-versiontools" + help + Smart replacement for plain tuple used in __version__. + + https://pypi.python.org/pypi/versiontools diff --git a/package/python-versiontools/python-versiontools.hash b/package/python-versiontools/python-versiontools.hash new file mode 100644 index 00000000..1067c415 --- /dev/null +++ b/package/python-versiontools/python-versiontools.hash @@ -0,0 +1,2 @@ +# locally computed +sha256 a969332887a18a9c98b0df0ea4d4ca75972f24ca94f06fb87d591377e83414f6 versiontools-1.9.1.tar.gz diff --git a/package/python-versiontools/python-versiontools.mk b/package/python-versiontools/python-versiontools.mk new file mode 100644 index 00000000..b99ddecb --- /dev/null +++ b/package/python-versiontools/python-versiontools.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-versiontools +# +################################################################################ + +PYTHON_VERSIONTOOLS_VERSION = 1.9.1 +PYTHON_VERSIONTOOLS_SOURCE = versiontools-$(PYTHON_VERSIONTOOLS_VERSION).tar.gz +PYTHON_VERSIONTOOLS_SITE = https://pypi.python.org/packages/source/v/versiontools +PYTHON_VERSIONTOOLS_SETUP_TYPE = setuptools +PYTHON_VERSIONTOOLS_LICENSE = LGPL-3.0 + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-visitor/Config.in b/package/python-visitor/Config.in new file mode 100644 index 00000000..f8be5ec9 --- /dev/null +++ b/package/python-visitor/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_VISITOR + bool "python-visitor" + help + A tiny pythonic visitor implementation. + + http://github.com/mbr/visitor diff --git a/package/python-visitor/python-visitor.hash b/package/python-visitor/python-visitor.hash new file mode 100644 index 00000000..6e0cffbd --- /dev/null +++ b/package/python-visitor/python-visitor.hash @@ -0,0 +1,4 @@ +# md5 from https://pypi.python.org/pypi/visitor/json, sha256 locally computed +md5 94a024ed0ec1b02b4497c15267d319ca visitor-0.1.3.tar.gz +sha256 2c737903b2b6864ebc6167eef7cf3b997126f1aa94bdf590f90f1436d23e480a visitor-0.1.3.tar.gz +sha256 184d1ebb65da97ada36447f3c028f2fd4890b874f17b18c023ce200dd96639af LICENSE diff --git a/package/python-visitor/python-visitor.mk b/package/python-visitor/python-visitor.mk new file mode 100644 index 00000000..1313491c --- /dev/null +++ b/package/python-visitor/python-visitor.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-visitor +# +################################################################################ + +PYTHON_VISITOR_VERSION = 0.1.3 +PYTHON_VISITOR_SOURCE = visitor-$(PYTHON_VISITOR_VERSION).tar.gz +PYTHON_VISITOR_SITE = https://pypi.python.org/packages/d7/58/785fcd6de4210049da5fafe62301b197f044f3835393594be368547142b0 +PYTHON_VISITOR_SETUP_TYPE = setuptools +PYTHON_VISITOR_LICENSE = MIT +PYTHON_VISITOR_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-watchdog/Config.in b/package/python-watchdog/Config.in new file mode 100644 index 00000000..18f569ee --- /dev/null +++ b/package/python-watchdog/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_WATCHDOG + bool "python-watchdog" + select BR2_PACKAGE_PYTHON_ARGH # runtime + select BR2_PACKAGE_PYTHON_PATHTOOLS # runtime + select BR2_PACKAGE_PYTHON_PYYAML # runtime + select BR2_PACKAGE_PYTHON_SETUPTOOLS # runtime + help + Python API and shell utilities to monitor file system events. + + http://github.com/gorakhargosh/watchdog diff --git a/package/python-watchdog/python-watchdog.hash b/package/python-watchdog/python-watchdog.hash new file mode 100644 index 00000000..701c7991 --- /dev/null +++ b/package/python-watchdog/python-watchdog.hash @@ -0,0 +1,7 @@ +# md5, sha256 from https://pypi.python.org/pypi/watchdog/json +md5 7cdc103f607e72fc32c206301a72d1b2 watchdog-0.9.0.tar.gz +sha256 965f658d0732de3188211932aeb0bb457587f04f63ab4c1e33eab878e9de961d watchdog-0.9.0.tar.gz + +# Hash for license files +sha256 14e636faf5889138a1bb7a8498ccbb0266aee31d2dc475201a10448e56ed3d96 COPYING +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE diff --git a/package/python-watchdog/python-watchdog.mk b/package/python-watchdog/python-watchdog.mk new file mode 100644 index 00000000..44929a65 --- /dev/null +++ b/package/python-watchdog/python-watchdog.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-watchdog +# +################################################################################ + +PYTHON_WATCHDOG_VERSION = 0.9.0 +PYTHON_WATCHDOG_SOURCE = watchdog-$(PYTHON_WATCHDOG_VERSION).tar.gz +PYTHON_WATCHDOG_SITE = https://pypi.python.org/packages/bb/e3/5a55d48a29300160779f0a0d2776d17c1b762a2039b36de528b093b87d5b +PYTHON_WATCHDOG_SETUP_TYPE = setuptools +PYTHON_WATCHDOG_LICENSE = Apache-2.0 +PYTHON_WATCHDOG_LICENSE_FILES = LICENSE COPYING + +$(eval $(python-package)) diff --git a/package/python-wcwidth/Config.in b/package/python-wcwidth/Config.in new file mode 100644 index 00000000..c5cc0223 --- /dev/null +++ b/package/python-wcwidth/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_WCWIDTH + bool "python-wcwidth" + help + This library measures number of Terminal column cells of + wide-character codes. + + https://github.com/jquast/wcwidth diff --git a/package/python-wcwidth/python-wcwidth.hash b/package/python-wcwidth/python-wcwidth.hash new file mode 100644 index 00000000..ed1d2cd6 --- /dev/null +++ b/package/python-wcwidth/python-wcwidth.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/wcwidth/json +md5 b32584cd6084b4a8c81df13a2a6b4351 wcwidth-0.1.9.tar.gz +sha256 ee73862862a156bf77ff92b09034fc4825dd3af9cf81bc5b360668d425f3c5f1 wcwidth-0.1.9.tar.gz +# Locally computed +sha256 0eddcc52cd3ef5d30798b8d43a14d3f0f1dcf0a6e4c1d0f2e177c44ce85bb69c LICENSE.txt diff --git a/package/python-wcwidth/python-wcwidth.mk b/package/python-wcwidth/python-wcwidth.mk new file mode 100644 index 00000000..ccbd0e99 --- /dev/null +++ b/package/python-wcwidth/python-wcwidth.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-wcwidth +# +################################################################################ + +PYTHON_WCWIDTH_VERSION = 0.1.9 +PYTHON_WCWIDTH_SOURCE = wcwidth-$(PYTHON_WCWIDTH_VERSION).tar.gz +PYTHON_WCWIDTH_SITE = https://pypi.python.org/packages/25/9d/0acbed6e4a4be4fc99148f275488580968f44ddb5e69b8ceb53fc9df55a0 +PYTHON_WCWIDTH_SETUP_TYPE = setuptools +PYTHON_WCWIDTH_LICENSE = MIT +PYTHON_WCWIDTH_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-web2py/Config.in b/package/python-web2py/Config.in new file mode 100644 index 00000000..a0452060 --- /dev/null +++ b/package/python-web2py/Config.in @@ -0,0 +1,37 @@ +config BR2_PACKAGE_PYTHON_WEB2PY + bool "python-web2py" + select BR2_PACKAGE_PYTHON_PYDAL # runtime + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 # runtime + select BR2_PACKAGE_PYTHON_PYEXPAT if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_PYEXPAT if BR2_PACKAGE_PYTHON3 # runtime + select BR2_PACKAGE_PYTHON_SQLITE if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_SQLITE if BR2_PACKAGE_PYTHON3 # runtime + select BR2_PACKAGE_PYTHON_YATL # runtime + help + web2py is a free open source full-stack framework for rapid + development of fast, scalable, secure and portable + database-driven web-based applications. + + http://web2py.com + +if BR2_PACKAGE_PYTHON_WEB2PY + +config BR2_PACKAGE_PYTHON_WEB2PY_INSTALL_ADMIN + bool "install admin panel application" + default y + help + This option install web2py admin panel application. + It can be removed to save space on embedded systems. + +if BR2_PACKAGE_PYTHON_WEB2PY_INSTALL_ADMIN + +config BR2_PACKAGE_PYTHON_WEB2PY_PASSWORD + string "admin panel password" + default web2py + help + Set the admin panel password. + +endif + +endif diff --git a/package/python-web2py/S51web2py b/package/python-web2py/S51web2py new file mode 100644 index 00000000..8d229e16 --- /dev/null +++ b/package/python-web2py/S51web2py @@ -0,0 +1,25 @@ +#!/bin/sh + +case "$1" in + start) + printf "Starting web2py: " + start-stop-daemon -S -q -m -p /run/web2py.pid \ + -c www-data \ + -b -x /var/www/web2py/web2py.py \ + -- --nogui -a '""' -i 0.0.0.0 -p 8000 + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + stop) + printf "Stopping web2py: " + start-stop-daemon -K -q -p /run/web2py.pid + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + restart) + "$0" stop + sleep 1 + "$0" start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + ;; +esac diff --git a/package/python-web2py/python-web2py.hash b/package/python-web2py/python-web2py.hash new file mode 100644 index 00000000..4ff85668 --- /dev/null +++ b/package/python-web2py/python-web2py.hash @@ -0,0 +1,3 @@ +# sha256 locally computed +sha256 e3f05266b4b97650b76bfb85028df5e2194955674c9b98cfc065c72ed5791690 python-web2py-2.20.4.tar.gz +sha256 2aae96826184a492bc799add49aed7b29036e7aba2d2294fb65053bd30fe55fe LICENSE diff --git a/package/python-web2py/python-web2py.mk b/package/python-web2py/python-web2py.mk new file mode 100644 index 00000000..26214a81 --- /dev/null +++ b/package/python-web2py/python-web2py.mk @@ -0,0 +1,76 @@ +################################################################################ +# +# python-web2py +# +################################################################################ + +PYTHON_WEB2PY_VERSION = 2.20.4 +PYTHON_WEB2PY_SITE = $(call github,web2py,web2py,v$(PYTHON_WEB2PY_VERSION)) +PYTHON_WEB2PY_LICENSE = LGPL-3.0 +PYTHON_WEB2PY_LICENSE_FILES = LICENSE +PYTHON_WEB2PY_CPE_ID_VENDOR = web2py +PYTHON_WEB2PY_CPE_ID_PRODUCT = web2py +PYTHON_WEB2PY_DEPENDENCIES = $(if $(BR2_PACKAGE_PYTHON3),host-python3 python3,host-python python) \ + host-python-pydal host-python-yatl + +PYTHON_WEB2PY_EXCLUSIONS = \ + welcome.w2p \ + applications/examples \ + applications/welcome \ + deposit \ + docs \ + examples \ + extras \ + handlers \ + scripts \ + ABOUT \ + anyserver.py \ + CHANGELOG \ + Makefile \ + MANIFEST.in \ + README.markdown \ + setup.py \ + tox.ini + +define PYTHON_WEB2PY_GENERATE_PASSWORD + $(HOST_DIR)/bin/python -c 'import os; \ + os.chdir("$(@D)"); \ + from gluon.main import save_password; \ + save_password($(BR2_PACKAGE_PYTHON_WEB2PY_PASSWORD),8000)' +endef + +ifeq ($(BR2_PACKAGE_PYTHON_WEB2PY_INSTALL_ADMIN),y) +PYTHON_WEB2PY_POST_BUILD_HOOKS += PYTHON_WEB2PY_GENERATE_PASSWORD +else +PYTHON_WEB2PY_EXCLUSIONS += applications/admin +endif + +define PYTHON_WEB2PY_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/var/www/web2py + rsync -a $(@D)/ $(TARGET_DIR)/var/www/web2py/ \ + $(addprefix --exclude=,$(PYTHON_WEB2PY_EXCLUSIONS)) +endef + +define PYTHON_WEB2PY_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/python-web2py/S51web2py \ + $(TARGET_DIR)/etc/init.d/S51web2py +endef + +define PYTHON_WEB2PY_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0644 package/python-web2py/web2py.service \ + $(TARGET_DIR)/usr/lib/systemd/system/web2py.service +endef + +# www-data user and group are used for web2py. Because these user and group +# are already set by buildroot, it is not necessary to redefine them. +# See system/skeleton/etc/passwd +# username: www-data uid: 33 +# groupname: www-data gid: 33 +# +# So, we just need to create the directories used by web2py with the right +# ownership. +define PYTHON_WEB2PY_PERMISSIONS + /var/www/web2py r 750 33 33 - - - - - +endef + +$(eval $(generic-package)) diff --git a/package/python-web2py/web2py.service b/package/python-web2py/web2py.service new file mode 100644 index 00000000..0274bd8c --- /dev/null +++ b/package/python-web2py/web2py.service @@ -0,0 +1,11 @@ +[Unit] +Description=Web2py daemon +After=network.target + +[Service] +Type=simple +ExecStart=/var/www/web2py/web2py.py --nogui -a '' -i 0.0.0.0 -p 8000 +User=www-data + +[Install] +WantedBy=multi-user.target diff --git a/package/python-webencodings/Config.in b/package/python-webencodings/Config.in new file mode 100644 index 00000000..52c72354 --- /dev/null +++ b/package/python-webencodings/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_WEBENCODINGS + bool "python-webencodings" + help + Character encoding aliases for legacy web content. + + https://github.com/SimonSapin/python-webencodings diff --git a/package/python-webencodings/python-webencodings.hash b/package/python-webencodings/python-webencodings.hash new file mode 100644 index 00000000..90f5e662 --- /dev/null +++ b/package/python-webencodings/python-webencodings.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/webencodings/json +md5 32f6e261d52e57bf7e1c4d41546d15b8 webencodings-0.5.1.tar.gz +sha256 b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923 webencodings-0.5.1.tar.gz +# Locally computed sha256 checksumms +sha256 c27693b0174d6d04dafd0242857ae72763f5404b675972c777fd865bc3c0abe1 PKG-INFO diff --git a/package/python-webencodings/python-webencodings.mk b/package/python-webencodings/python-webencodings.mk new file mode 100644 index 00000000..63c6d373 --- /dev/null +++ b/package/python-webencodings/python-webencodings.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-webencodings +# +################################################################################ + +PYTHON_WEBENCODINGS_VERSION = 0.5.1 +PYTHON_WEBENCODINGS_SOURCE = webencodings-$(PYTHON_WEBENCODINGS_VERSION).tar.gz +PYTHON_WEBENCODINGS_SITE = https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47 +PYTHON_WEBENCODINGS_SETUP_TYPE = setuptools +PYTHON_WEBENCODINGS_LICENSE = BSD-3-Clause +PYTHON_WEBENCODINGS_LICENSE_FILES = PKG-INFO + +$(eval $(python-package)) diff --git a/package/python-webob/Config.in b/package/python-webob/Config.in new file mode 100644 index 00000000..fe77723f --- /dev/null +++ b/package/python-webob/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_WEBOB + bool "python-webob" + select BR2_PACKAGE_PYTHON_HASHLIB if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 # runtime + help + WSGI request and response object. + + http://webob.org/ diff --git a/package/python-webob/python-webob.hash b/package/python-webob/python-webob.hash new file mode 100644 index 00000000..aab2f1d9 --- /dev/null +++ b/package/python-webob/python-webob.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/webob/json +md5 dc3cc8c317d4acd03a6fd97cb0a9121a WebOb-1.8.6.tar.gz +sha256 aa3a917ed752ba3e0b242234b2a373f9c4e2a75d35291dcbe977649bd21fd108 WebOb-1.8.6.tar.gz +# Locally computed sha256 checksums +sha256 27bc4919e7e9e6b6cda40644517ca74d32203e32fba89ef832aba1ed93e457b3 docs/license.txt diff --git a/package/python-webob/python-webob.mk b/package/python-webob/python-webob.mk new file mode 100644 index 00000000..051c1175 --- /dev/null +++ b/package/python-webob/python-webob.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-webob +# +################################################################################ + +PYTHON_WEBOB_VERSION = 1.8.6 +PYTHON_WEBOB_SOURCE = WebOb-$(PYTHON_WEBOB_VERSION).tar.gz +PYTHON_WEBOB_SITE = https://files.pythonhosted.org/packages/2a/32/5f3f43d0784bdd9392db0cb98434d7cd23a0d8a420c4d243ad4cb8517f2a +PYTHON_WEBOB_SETUP_TYPE = setuptools +PYTHON_WEBOB_LICENSE = MIT +PYTHON_WEBOB_LICENSE_FILES = docs/license.txt + +$(eval $(python-package)) diff --git a/package/python-webpy/Config.in b/package/python-webpy/Config.in new file mode 100644 index 00000000..419a4a18 --- /dev/null +++ b/package/python-webpy/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_WEBPY + bool "python-webpy" + depends on BR2_PACKAGE_PYTHON3 # python-cheroot + select BR2_PACKAGE_PYTHON_CHEROOT # runtime + select BR2_PACKAGE_PYTHON_MARKDOWN # runtime + help + web.py is a web framework for Python that is as simple as it + is powerful. + + http://webpy.org/ diff --git a/package/python-webpy/python-webpy.hash b/package/python-webpy/python-webpy.hash new file mode 100644 index 00000000..6af6abef --- /dev/null +++ b/package/python-webpy/python-webpy.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/web.py/json +md5 4e7ec89e7ae1e938d01fff01ba752606 web.py-0.40.tar.gz +sha256 dc5e42ffbc42d77d07f75b7acca9975a3368ae609774e49ddebb497a784131f3 web.py-0.40.tar.gz +# Locally computed sha256 checksums +sha256 791bf6e9419435f114a19fc6519ff33738021eb3c41b18490943230ab0894df9 LICENSE.txt diff --git a/package/python-webpy/python-webpy.mk b/package/python-webpy/python-webpy.mk new file mode 100644 index 00000000..187a4812 --- /dev/null +++ b/package/python-webpy/python-webpy.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-webpy +# +################################################################################ + +PYTHON_WEBPY_VERSION = 0.40 +PYTHON_WEBPY_SOURCE = web.py-$(PYTHON_WEBPY_VERSION).tar.gz +PYTHON_WEBPY_SITE = https://files.pythonhosted.org/packages/e3/23/ed84b174add09153329c6357984c8433e2f350de91c3859fa48c3cdbf7dc +PYTHON_WEBPY_SETUP_TYPE = setuptools +PYTHON_WEBPY_LICENSE = Public Domain +PYTHON_WEBPY_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-websocket-client/Config.in b/package/python-websocket-client/Config.in new file mode 100644 index 00000000..0fbb15b3 --- /dev/null +++ b/package/python-websocket-client/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_WEBSOCKET_CLIENT + bool "python-websocket-client" + select BR2_PACKAGE_PYTHON_SIX # runtime + select BR2_PACKAGE_PYTHON_SSL if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_SSL if BR2_PACKAGE_PYTHON3 # runtime + help + WebSocket client for python. hybi13 is supported. + + https://github.com/websocket-client/websocket-client.git diff --git a/package/python-websocket-client/python-websocket-client.hash b/package/python-websocket-client/python-websocket-client.hash new file mode 100644 index 00000000..968c1ab2 --- /dev/null +++ b/package/python-websocket-client/python-websocket-client.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/websocket-client/json +md5 8061820da5e1de26a6a1a6996d4eebd5 websocket_client-0.57.0.tar.gz +sha256 d735b91d6d1692a6a181f2a8c9e0238e5f6373356f561bb9dc4c7af36f452010 websocket_client-0.57.0.tar.gz +# Locally computed sha256 checksums +sha256 a47b06717e8a3cf01d1307141287b1b4fa17fe4bb8785633d2fc6f57cb71d05e LICENSE diff --git a/package/python-websocket-client/python-websocket-client.mk b/package/python-websocket-client/python-websocket-client.mk new file mode 100644 index 00000000..58cb597c --- /dev/null +++ b/package/python-websocket-client/python-websocket-client.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# python-websocket-client +# +################################################################################ + +PYTHON_WEBSOCKET_CLIENT_VERSION = 0.57.0 +PYTHON_WEBSOCKET_CLIENT_SOURCE = websocket_client-$(PYTHON_WEBSOCKET_CLIENT_VERSION).tar.gz +PYTHON_WEBSOCKET_CLIENT_SITE = https://files.pythonhosted.org/packages/8b/0f/52de51b9b450ed52694208ab952d5af6ebbcbce7f166a48784095d930d8c +PYTHON_WEBSOCKET_CLIENT_SETUP_TYPE = setuptools +# Project was under LGPL-2.1+, but was relicensed under +# BSD-3-Clause. The LICENSE file contains the BSD-3-Clause text, but +# the source files still contain a LGPL-2.1+ header. +PYTHON_WEBSOCKET_CLIENT_LICENSE = LGPL-2.1+, BSD-3-Clause +PYTHON_WEBSOCKET_CLIENT_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-websockets/Config.in b/package/python-websockets/Config.in new file mode 100644 index 00000000..888bec61 --- /dev/null +++ b/package/python-websockets/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_PYTHON_WEBSOCKETS + bool "python-websockets" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON3_ZLIB + select BR2_PACKAGE_PYTHON3_SSL + help + An implementation of the WebSocket Protocol (RFC 6455 & + 7692). + + https://github.com/aaugustin/websockets diff --git a/package/python-websockets/python-websockets.hash b/package/python-websockets/python-websockets.hash new file mode 100644 index 00000000..ec387c9a --- /dev/null +++ b/package/python-websockets/python-websockets.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/websockets/json +md5 a37f0e22c3aa5f1cf12a6a3ae22b36ca websockets-8.0.2.tar.gz +sha256 882a7266fa867a2ebb2c0baaa0f9159cabf131cf18c1b4270d79ad42f9208dc5 websockets-8.0.2.tar.gz +# Locally computed sha256 checksums +sha256 8a88960c0d6aa8b38faa6ee614597dbf18e0ea22ba20884ef3dd31d34b2a6d09 LICENSE diff --git a/package/python-websockets/python-websockets.mk b/package/python-websockets/python-websockets.mk new file mode 100644 index 00000000..013881f9 --- /dev/null +++ b/package/python-websockets/python-websockets.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-websockets +# +################################################################################ + +PYTHON_WEBSOCKETS_VERSION = 8.0.2 +PYTHON_WEBSOCKETS_SOURCE = websockets-$(PYTHON_WEBSOCKETS_VERSION).tar.gz +PYTHON_WEBSOCKETS_SITE = https://files.pythonhosted.org/packages/79/78/17e97a159dc55308b1468a638c7267f19765281f6205ec9c15253c154022 +PYTHON_WEBSOCKETS_SETUP_TYPE = setuptools +PYTHON_WEBSOCKETS_LICENSE = BSD-3-Clause +PYTHON_WEBSOCKETS_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-werkzeug/Config.in b/package/python-werkzeug/Config.in new file mode 100644 index 00000000..79e9a456 --- /dev/null +++ b/package/python-werkzeug/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_WERKZEUG + bool "python-werkzeug" + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 # runtime + help + Werkzeug is a WSGI utility library for Python. It's widely + used and BSD licensed. + + http://werkzeug.pocoo.org/ diff --git a/package/python-werkzeug/python-werkzeug.hash b/package/python-werkzeug/python-werkzeug.hash new file mode 100644 index 00000000..1d6de8a0 --- /dev/null +++ b/package/python-werkzeug/python-werkzeug.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/werkzeug/json +md5 5d499cfdd30de5d9c946994783772efd Werkzeug-1.0.1.tar.gz +sha256 6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c Werkzeug-1.0.1.tar.gz +# Locally computed sha256 checksums +sha256 3b49dcee4105eb37bac10faf1be260408fe85d252b8e9df2e0979fc1e094437b LICENSE.rst diff --git a/package/python-werkzeug/python-werkzeug.mk b/package/python-werkzeug/python-werkzeug.mk new file mode 100644 index 00000000..fe9b87af --- /dev/null +++ b/package/python-werkzeug/python-werkzeug.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python-werkzeug +# +################################################################################ + +PYTHON_WERKZEUG_VERSION = 1.0.1 +PYTHON_WERKZEUG_SOURCE = Werkzeug-$(PYTHON_WERKZEUG_VERSION).tar.gz +PYTHON_WERKZEUG_SITE = https://files.pythonhosted.org/packages/10/27/a33329150147594eff0ea4c33c2036c0eadd933141055be0ff911f7f8d04 +PYTHON_WERKZEUG_SETUP_TYPE = setuptools +PYTHON_WERKZEUG_LICENSE = BSD-3-Clause +PYTHON_WERKZEUG_LICENSE_FILES = LICENSE.rst +PYTHON_WERKZEUG_CPE_ID_VENDOR = palletsprojects +PYTHON_WERKZEUG_CPE_ID_PRODUCT = werkzeug + +$(eval $(python-package)) diff --git a/package/python-whoosh/Config.in b/package/python-whoosh/Config.in new file mode 100644 index 00000000..1128ce64 --- /dev/null +++ b/package/python-whoosh/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_WHOOSH + bool "python-whoosh" + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 # runtime + help + Whoosh is a fast, pure-Python full text indexing, search and + spell checking library. + + https://pypi.python.org/pypi/Whoosh/ diff --git a/package/python-whoosh/python-whoosh.hash b/package/python-whoosh/python-whoosh.hash new file mode 100644 index 00000000..c615beb9 --- /dev/null +++ b/package/python-whoosh/python-whoosh.hash @@ -0,0 +1,5 @@ +# md5 from https://pypi.python.org/pypi/whoosh/json +md5 c2710105f20b3e29936bd2357383c325 Whoosh-2.7.4.tar.gz +# Locally computed +sha256 7ca5633dbfa9e0e0fa400d3151a8a0c4bec53bd2ecedc0a67705b17565c31a83 Whoosh-2.7.4.tar.gz +sha256 464ef68037a0e5545e4716b4ff99f3f85ca89cf9e9a7ecfd7a02039ba1c34a90 LICENSE.txt diff --git a/package/python-whoosh/python-whoosh.mk b/package/python-whoosh/python-whoosh.mk new file mode 100644 index 00000000..a100c446 --- /dev/null +++ b/package/python-whoosh/python-whoosh.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-whoosh +# +################################################################################ + +PYTHON_WHOOSH_VERSION = 2.7.4 +PYTHON_WHOOSH_SOURCE = Whoosh-$(PYTHON_WHOOSH_VERSION).tar.gz +PYTHON_WHOOSH_SITE = https://pypi.python.org/packages/25/2b/6beed2107b148edc1321da0d489afc4617b9ed317ef7b72d4993cad9b684 +PYTHON_WHOOSH_SETUP_TYPE = setuptools +PYTHON_WHOOSH_LICENSE = BSD-3-Clause +PYTHON_WHOOSH_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-wrapt/Config.in b/package/python-wrapt/Config.in new file mode 100644 index 00000000..da315c9a --- /dev/null +++ b/package/python-wrapt/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_WRAPT + bool "python-wrapt" + help + Module for decorators, wrappers and monkey patching. + + https://github.com/GrahamDumpleton/wrapt diff --git a/package/python-wrapt/python-wrapt.hash b/package/python-wrapt/python-wrapt.hash new file mode 100644 index 00000000..feab3f05 --- /dev/null +++ b/package/python-wrapt/python-wrapt.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/wrapt/json +md5 cc15c001b129f81eb2f79b15eb99ffe5 wrapt-1.11.2.tar.gz +sha256 565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1 wrapt-1.11.2.tar.gz +# Locally computed sha256 checksums +sha256 e37c13f84fb3c9a54161b0fcf75f4d302fb86ce42cd6106147bda79e4197d9f2 LICENSE diff --git a/package/python-wrapt/python-wrapt.mk b/package/python-wrapt/python-wrapt.mk new file mode 100644 index 00000000..91f9d7f5 --- /dev/null +++ b/package/python-wrapt/python-wrapt.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-wrapt +# +################################################################################ + +PYTHON_WRAPT_VERSION = 1.11.2 +PYTHON_WRAPT_SOURCE = wrapt-$(PYTHON_WRAPT_VERSION).tar.gz +PYTHON_WRAPT_SITE = https://files.pythonhosted.org/packages/23/84/323c2415280bc4fc880ac5050dddfb3c8062c2552b34c2e512eb4aa68f79 +PYTHON_WRAPT_SETUP_TYPE = distutils +PYTHON_WRAPT_LICENSE = BSD-2-Clause +PYTHON_WRAPT_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-ws4py/0001-Adjust-ws4py-for-Python-3.7-syntax.patch b/package/python-ws4py/0001-Adjust-ws4py-for-Python-3.7-syntax.patch new file mode 100644 index 00000000..07fbb6cc --- /dev/null +++ b/package/python-ws4py/0001-Adjust-ws4py-for-Python-3.7-syntax.patch @@ -0,0 +1,55 @@ +From dfe6f65b7078315c32cebb727e9c47ead7603475 Mon Sep 17 00:00:00 2001 +From: Asaf Kahlon +Date: Sun, 13 Oct 2019 16:44:44 +0300 +Subject: [PATCH 1/1] Adjust ws4py for Python 3.7 syntax + +Since Python 3.7, "async" has become a keyword and cannot be used. +Thus, instead of asyncio.async we will use asyncio.ensure_future. + +There's also a pull request with this change: +https://github.com/Lawouach/WebSocket-for-Python/pull/245 + +Signed-off-by: Asaf Kahlon +--- + ws4py/async_websocket.py | 4 ++-- + ws4py/server/tulipserver.py | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/ws4py/async_websocket.py b/ws4py/async_websocket.py +index 9e2a4c7..ea296b4 100644 +--- a/ws4py/async_websocket.py ++++ b/ws4py/async_websocket.py +@@ -84,7 +84,7 @@ class WebSocket(_WebSocket): + def closeit(): + yield from self.proto.writer.drain() + self.proto.writer.close() +- asyncio.async(closeit()) ++ asyncio.ensure_future(closeit()) + + def _write(self, data): + """ +@@ -94,7 +94,7 @@ class WebSocket(_WebSocket): + def sendit(data): + self.proto.writer.write(data) + yield from self.proto.writer.drain() +- asyncio.async(sendit(data)) ++ asyncio.ensure_future(sendit(data)) + + @asyncio.coroutine + def run(self): +diff --git a/ws4py/server/tulipserver.py b/ws4py/server/tulipserver.py +index 2786c16..85312a2 100644 +--- a/ws4py/server/tulipserver.py ++++ b/ws4py/server/tulipserver.py +@@ -40,7 +40,7 @@ class WebSocketProtocol(asyncio.StreamReaderProtocol): + #self.stream.set_transport(transport) + asyncio.StreamReaderProtocol.connection_made(self, transport) + # Let make it concurrent for others to tag along +- f = asyncio.async(self.handle_initial_handshake()) ++ f = asyncio.ensure_future(self.handle_initial_handshake()) + f.add_done_callback(self.terminated) + + @property +-- +2.20.1 + diff --git a/package/python-ws4py/Config.in b/package/python-ws4py/Config.in new file mode 100644 index 00000000..f4763a80 --- /dev/null +++ b/package/python-ws4py/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_WS4PY + bool "python-ws4py" + help + ws4py is a Python package implementing the WebSocket protocol + as defined in RFC 6455. + + https://ws4py.readthedocs.org diff --git a/package/python-ws4py/python-ws4py.hash b/package/python-ws4py/python-ws4py.hash new file mode 100644 index 00000000..109768d2 --- /dev/null +++ b/package/python-ws4py/python-ws4py.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/ws4py/json +md5 68e0cfae9659dd059ff7e7a8218af548 ws4py-0.5.1.tar.gz +sha256 29d073d7f2e006373e6a848b1d00951a1107eb81f3742952be905429dc5a5483 ws4py-0.5.1.tar.gz +# Locally computed sha256 checksums +sha256 3c98d9e820de01b1ae3be846419700ab9cefa22b09aa0ef441b3bfd5613c3ba1 LICENSE diff --git a/package/python-ws4py/python-ws4py.mk b/package/python-ws4py/python-ws4py.mk new file mode 100644 index 00000000..edfd5d0d --- /dev/null +++ b/package/python-ws4py/python-ws4py.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-ws4py +# +################################################################################ + +PYTHON_WS4PY_VERSION = 0.5.1 +PYTHON_WS4PY_SOURCE = ws4py-$(PYTHON_WS4PY_VERSION).tar.gz +PYTHON_WS4PY_SITE = https://files.pythonhosted.org/packages/53/20/4019a739b2eefe9282d3822ef6a225250af964b117356971bd55e274193c +PYTHON_WS4PY_SETUP_TYPE = setuptools +PYTHON_WS4PY_LICENSE = BSD-3-Clause +PYTHON_WS4PY_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-wsaccel/Config.in b/package/python-wsaccel/Config.in new file mode 100644 index 00000000..ee61e8a0 --- /dev/null +++ b/package/python-wsaccel/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_WSACCEL + bool "python-wsaccel" + help + Accelerator for ws4py and AutobahnPython. + + https://pypi.python.org/pypi/wsaccel diff --git a/package/python-wsaccel/python-wsaccel.hash b/package/python-wsaccel/python-wsaccel.hash new file mode 100644 index 00000000..a02b5a87 --- /dev/null +++ b/package/python-wsaccel/python-wsaccel.hash @@ -0,0 +1,3 @@ +# md5 from https://pypi.python.org/pypi?:action=show_md5&digest=2b4ea3d6847855c0587d37fca9db0557, sha256 locally computed. +md5 2b4ea3d6847855c0587d37fca9db0557 wsaccel-0.6.2.tar.gz +sha256 425706acf0724d2f6bfa391ec37b4ef121d3432c956029de3cea4e101c218e0c wsaccel-0.6.2.tar.gz diff --git a/package/python-wsaccel/python-wsaccel.mk b/package/python-wsaccel/python-wsaccel.mk new file mode 100644 index 00000000..016ff2d7 --- /dev/null +++ b/package/python-wsaccel/python-wsaccel.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# python-wsaccel +# +################################################################################ + +PYTHON_WSACCEL_VERSION = 0.6.2 +PYTHON_WSACCEL_SOURCE = wsaccel-$(PYTHON_WSACCEL_VERSION).tar.gz +PYTHON_WSACCEL_SITE = https://pypi.python.org/packages/source/w/wsaccel +PYTHON_WSACCEL_LICENSE = Apache-2.0 +PYTHON_WSACCEL_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-wtforms/Config.in b/package/python-wtforms/Config.in new file mode 100644 index 00000000..33a17d3d --- /dev/null +++ b/package/python-wtforms/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_WTFORMS + bool "python-wtforms" + select BR2_PACKAGE_PYTHON_MARKUPSAFE # runtime + help + A flexible forms validation and rendering library for + Python web development. + + https://wtforms.readthedocs.io/ diff --git a/package/python-wtforms/python-wtforms.hash b/package/python-wtforms/python-wtforms.hash new file mode 100644 index 00000000..ed9bfd1a --- /dev/null +++ b/package/python-wtforms/python-wtforms.hash @@ -0,0 +1,6 @@ +# md5, sha256 from https://pypi.org/pypi/wtforms/json +md5 2b6ea167a71c6becf20f0934417fd06c WTForms-2.3.3.tar.gz +sha256 81195de0ac94fbc8368abbaf9197b88c4f3ffd6c2719b5bf5fc9da744f3d829c WTForms-2.3.3.tar.gz +# Locally computed sha256 checksums +sha256 cf40d60ff34f6b2b68a53d220f8b66567b5ac8dd1119b37b62fd15e9518fe59b LICENSE.rst +sha256 c9362a7258a11c84a8f7e825ccbbb5c425c6fc02368d3aee6494533fb99ba1f4 docs/license.rst diff --git a/package/python-wtforms/python-wtforms.mk b/package/python-wtforms/python-wtforms.mk new file mode 100644 index 00000000..23280a6f --- /dev/null +++ b/package/python-wtforms/python-wtforms.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-wtforms +# +################################################################################ + +PYTHON_WTFORMS_VERSION = 2.3.3 +PYTHON_WTFORMS_SOURCE = WTForms-$(PYTHON_WTFORMS_VERSION).tar.gz +PYTHON_WTFORMS_SITE = https://files.pythonhosted.org/packages/dd/3f/f25d26b1c66896e2876124a12cd8be8f606abf4e1890a20f3ca04e4a1555 +PYTHON_WTFORMS_SETUP_TYPE = setuptools +PYTHON_WTFORMS_LICENSE = BSD-3-Clause +PYTHON_WTFORMS_LICENSE_FILES = LICENSE.rst docs/license.rst + +$(eval $(python-package)) diff --git a/package/python-xlib/Config.in b/package/python-xlib/Config.in new file mode 100644 index 00000000..081af6a2 --- /dev/null +++ b/package/python-xlib/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_XLIB + bool "python-xlib" + select BR2_PACKAGE_PYTHON_SIX # runtime + help + XLib in pure Python (Py2/Py3 compatible) + + https://github.com/python-xlib/python-xlib diff --git a/package/python-xlib/python-xlib.hash b/package/python-xlib/python-xlib.hash new file mode 100644 index 00000000..c6a446b6 --- /dev/null +++ b/package/python-xlib/python-xlib.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/python-xlib/json +md5 3a87f81bff4cb4f8a52881097ba51a49 python-xlib-0.27.tar.bz2 +sha256 a90667c70905c6ef0754c8a09fa61acbc1e1b7ddb946d527831800d7cbfe9348 python-xlib-0.27.tar.bz2 +# Locally computed sha256 checksums +sha256 06eb1c441443cf15ac84f309003f4c43c62246939d37c75fc3e056c2d34cd300 LICENSE diff --git a/package/python-xlib/python-xlib.mk b/package/python-xlib/python-xlib.mk new file mode 100644 index 00000000..ae8ca165 --- /dev/null +++ b/package/python-xlib/python-xlib.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-xlib +# +################################################################################ + +PYTHON_XLIB_VERSION = 0.27 +PYTHON_XLIB_SOURCE = python-xlib-$(PYTHON_XLIB_VERSION).tar.bz2 +PYTHON_XLIB_SITE = https://files.pythonhosted.org/packages/e8/fa/a61ef33df117de4c57d11b4ba0b624f5352f21aa2e1eda404860155e8855 +PYTHON_XLIB_SETUP_TYPE = setuptools +PYTHON_XLIB_LICENSE = LGPL-2.1+ +PYTHON_XLIB_LICENSE_FILES = LICENSE +PYTHON_XLIB_DEPENDENCIES = host-python-setuptools-scm + +$(eval $(python-package)) diff --git a/package/python-xlrd/Config.in b/package/python-xlrd/Config.in new file mode 100644 index 00000000..40920f7b --- /dev/null +++ b/package/python-xlrd/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_PYTHON_XLRD + bool "python-xlrd" + select BR2_PACKAGE_PYTHON_PYEXPAT if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_PYEXPAT if BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 + help + Library for developers to extract data from Microsoft + Excel(tm) spreadsheet files. + + http://www.python-excel.org/ diff --git a/package/python-xlrd/Config.in.host b/package/python-xlrd/Config.in.host new file mode 100644 index 00000000..cd98fd4d --- /dev/null +++ b/package/python-xlrd/Config.in.host @@ -0,0 +1,7 @@ +config BR2_PACKAGE_HOST_PYTHON_XLRD + bool "host python-xlrd" + help + Library for developers to extract data from Microsoft + Excel(tm) spreadsheet files. + + http://www.python-excel.org/ diff --git a/package/python-xlrd/python-xlrd.hash b/package/python-xlrd/python-xlrd.hash new file mode 100644 index 00000000..0a66a211 --- /dev/null +++ b/package/python-xlrd/python-xlrd.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/xlrd/json +md5 e5d5b96924d791b22898b622eb3e918e xlrd-1.2.0.tar.gz +sha256 546eb36cee8db40c3eaa46c351e67ffee6eeb5fa2650b71bc4c758a29a1b29b2 xlrd-1.2.0.tar.gz +# locally calculated +sha256 b5a5dbce60265e305a815a6cb83ed07f24519d8ba644f2a307994488bced8815 LICENSE diff --git a/package/python-xlrd/python-xlrd.mk b/package/python-xlrd/python-xlrd.mk new file mode 100644 index 00000000..c94e054b --- /dev/null +++ b/package/python-xlrd/python-xlrd.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-xlrd +# +################################################################################ + +PYTHON_XLRD_VERSION = 1.2.0 +PYTHON_XLRD_SOURCE = xlrd-$(PYTHON_XLRD_VERSION).tar.gz +PYTHON_XLRD_SITE = https://files.pythonhosted.org/packages/aa/05/ec9d4fcbbb74bbf4da9f622b3b61aec541e4eccf31d3c60c5422ec027ce2 +PYTHON_XLRD_SETUP_TYPE = setuptools +PYTHON_XLRD_LICENSE = BSD-3-Clause +PYTHON_XLRD_LICENSE_FILES = LICENSE + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-xlsxwriter/Config.in b/package/python-xlsxwriter/Config.in new file mode 100644 index 00000000..3641bd05 --- /dev/null +++ b/package/python-xlsxwriter/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_XLSXWRITER + bool "python-xlsxwriter" + select BR2_PACKAGE_PYTHON_ZLIB if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_ZLIB if BR2_PACKAGE_PYTHON3 + help + A Python module for creating Excel XLSX files. + + https://github.com/jmcnamara/XlsxWriter diff --git a/package/python-xlsxwriter/python-xlsxwriter.hash b/package/python-xlsxwriter/python-xlsxwriter.hash new file mode 100644 index 00000000..59890b72 --- /dev/null +++ b/package/python-xlsxwriter/python-xlsxwriter.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/XlsxWriter/json +md5 799bf9c16ff58a7c38509b1895b7bc63 XlsxWriter-1.2.2.tar.gz +sha256 5a5e2195a4672d17db79839bbdf1006a521adb57eaceea1c335ae4b3d19f088f XlsxWriter-1.2.2.tar.gz +# Locally computed sha256 checksums +sha256 777cb44c00ba1c2905686fa32f2ca3ba17422b96fc229be3d8f0f1333bc4ecfe LICENSE.txt diff --git a/package/python-xlsxwriter/python-xlsxwriter.mk b/package/python-xlsxwriter/python-xlsxwriter.mk new file mode 100644 index 00000000..ccc2fc7e --- /dev/null +++ b/package/python-xlsxwriter/python-xlsxwriter.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-xlsxwriter +# +################################################################################ + +PYTHON_XLSXWRITER_VERSION = 1.2.2 +PYTHON_XLSXWRITER_SOURCE = XlsxWriter-$(PYTHON_XLSXWRITER_VERSION).tar.gz +PYTHON_XLSXWRITER_SITE = https://files.pythonhosted.org/packages/73/78/3ea62c5ad7255a0ff676c87ea88b152090b2178cb27325ba3bb0bb4122c9 +PYTHON_XLSXWRITER_SETUP_TYPE = setuptools +PYTHON_XLSXWRITER_LICENSE = BSD-2-Clause +PYTHON_XLSXWRITER_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-xlutils/Config.in b/package/python-xlutils/Config.in new file mode 100644 index 00000000..9c12d766 --- /dev/null +++ b/package/python-xlutils/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_XLUTILS + bool "python-xlutils" + select BR2_PACKAGE_PYTHON_XLRD # runtime + select BR2_PACKAGE_PYTHON_XLWT # runtime + help + Utilities for working with Excel files that require both + xlrd and xlwt. + + http://www.python-excel.org diff --git a/package/python-xlutils/python-xlutils.hash b/package/python-xlutils/python-xlutils.hash new file mode 100644 index 00000000..aa507883 --- /dev/null +++ b/package/python-xlutils/python-xlutils.hash @@ -0,0 +1,6 @@ +# md5 from https://pypi.python.org/pypi/xlutils/json +md5 7a6a339ddaacabce244341582ee61353 xlutils-2.0.0.tar.gz +# sha256 calculated by scanpypi +sha256 7e0e2c233bd185fecf5e2bd3f4e9469ca4a3bd87da64c82cfe5b2af27e7f9e54 xlutils-2.0.0.tar.gz +# Locally computed +sha256 28907976ee86414cc720fafc966563b16eeb6a6aeb1da5f5ed40bac3a8808bcf xlutils/license.txt diff --git a/package/python-xlutils/python-xlutils.mk b/package/python-xlutils/python-xlutils.mk new file mode 100644 index 00000000..fc26b3ce --- /dev/null +++ b/package/python-xlutils/python-xlutils.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-xlutils +# +################################################################################ + +PYTHON_XLUTILS_VERSION = 2.0.0 +PYTHON_XLUTILS_SOURCE = xlutils-$(PYTHON_XLUTILS_VERSION).tar.gz +PYTHON_XLUTILS_SITE = https://pypi.python.org/packages/93/fe/af6d73e4bc7b0ce359d34bebb2e8d4d129763acfecd66a3a7efc587e54c9 +PYTHON_XLUTILS_SETUP_TYPE = setuptools +PYTHON_XLUTILS_LICENSE = MIT +PYTHON_XLUTILS_LICENSE_FILES = xlutils/license.txt + +$(eval $(python-package)) diff --git a/package/python-xlwt/Config.in b/package/python-xlwt/Config.in new file mode 100644 index 00000000..a48ac6fb --- /dev/null +++ b/package/python-xlwt/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_XLWT + bool "python-xlwt" + help + Library to create spreadsheet files compatible with MS Excel + 97/2000/XP/2003 XLS files, on any platform, with Python 2.6, + 2.7, 3.3+. + + http://www.python-excel.org/ diff --git a/package/python-xlwt/python-xlwt.hash b/package/python-xlwt/python-xlwt.hash new file mode 100644 index 00000000..8b0511fd --- /dev/null +++ b/package/python-xlwt/python-xlwt.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/xlwt/json +md5 4b1ca8a3cef3261f4b4dc3f138e383a8 xlwt-1.3.0.tar.gz +sha256 c59912717a9b28f1a3c2a98fd60741014b06b043936dcecbc113eaaada156c88 xlwt-1.3.0.tar.gz +# Locally computed +sha256 7f7b66f23fdac4f68fe3b342dd16b329d511017a901784a5ceb83f505f2de7c6 docs/licenses.rst diff --git a/package/python-xlwt/python-xlwt.mk b/package/python-xlwt/python-xlwt.mk new file mode 100644 index 00000000..aaeeffc5 --- /dev/null +++ b/package/python-xlwt/python-xlwt.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-xlwt +# +################################################################################ + +PYTHON_XLWT_VERSION = 1.3.0 +PYTHON_XLWT_SOURCE = xlwt-$(PYTHON_XLWT_VERSION).tar.gz +PYTHON_XLWT_SITE = https://files.pythonhosted.org/packages/06/97/56a6f56ce44578a69343449aa5a0d98eefe04085d69da539f3034e2cd5c1 +PYTHON_XLWT_SETUP_TYPE = setuptools +PYTHON_XLWT_LICENSE = BSD-3-Clause, BSD-4-Clause +PYTHON_XLWT_LICENSE_FILES = docs/licenses.rst + +$(eval $(python-package)) diff --git a/package/python-xmltodict/Config.in b/package/python-xmltodict/Config.in new file mode 100644 index 00000000..cb12392c --- /dev/null +++ b/package/python-xmltodict/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_XMLTODICT + bool "python-xmltodict" + select BR2_PACKAGE_PYTHON_PYEXPAT if BR2_PACKAGE_PYTHON # runtime + select BR2_PACKAGE_PYTHON3_PYEXPAT if BR2_PACKAGE_PYTHON3 # runtime + help + Makes working with XML feel like you are working with JSON. + + https://github.com/martinblech/xmltodict diff --git a/package/python-xmltodict/python-xmltodict.hash b/package/python-xmltodict/python-xmltodict.hash new file mode 100644 index 00000000..16422d78 --- /dev/null +++ b/package/python-xmltodict/python-xmltodict.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/xmltodict/json +md5 ddb2bd078cef4f7e3021a578034ad941 xmltodict-0.12.0.tar.gz +sha256 50d8c638ed7ecb88d90561beedbf720c9b4e851a9fa6c47ebd64e99d166d8a21 xmltodict-0.12.0.tar.gz +# Locally computed sha256 checksums +sha256 d66d5eb8f83a0ba21d3dd04318b8817588e8764daabea852d1035e3f07ffda55 LICENSE diff --git a/package/python-xmltodict/python-xmltodict.mk b/package/python-xmltodict/python-xmltodict.mk new file mode 100644 index 00000000..05be4b3c --- /dev/null +++ b/package/python-xmltodict/python-xmltodict.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-xmltodict +# +################################################################################ + +PYTHON_XMLTODICT_VERSION = 0.12.0 +PYTHON_XMLTODICT_SOURCE = xmltodict-$(PYTHON_XMLTODICT_VERSION).tar.gz +PYTHON_XMLTODICT_SITE = https://files.pythonhosted.org/packages/58/40/0d783e14112e064127063fbf5d1fe1351723e5dfe9d6daad346a305f6c49 +PYTHON_XMLTODICT_SETUP_TYPE = setuptools +PYTHON_XMLTODICT_LICENSE = MIT +PYTHON_XMLTODICT_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/package/python-xmodem/Config.in b/package/python-xmodem/Config.in new file mode 100644 index 00000000..ef927f13 --- /dev/null +++ b/package/python-xmodem/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_XMODEM + bool "python-xmodem" + help + XMODEM protocol implementation. + + https://github.com/tehmaze/xmodem diff --git a/package/python-xmodem/python-xmodem.hash b/package/python-xmodem/python-xmodem.hash new file mode 100644 index 00000000..33ddfeb5 --- /dev/null +++ b/package/python-xmodem/python-xmodem.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/xmodem/json +md5 f876cb35caf276b61990377710a3b4c4 xmodem-0.4.6.tar.gz +sha256 089737298f5738eabc43f2519efdc80b402693768f16383f7013b9e6f8f279d7 xmodem-0.4.6.tar.gz +# locally calculated +sha256 5ddb38acab95bb77e1e92e22830e358082d879d2dd59ba05577c47791edaa78e PKG-INFO diff --git a/package/python-xmodem/python-xmodem.mk b/package/python-xmodem/python-xmodem.mk new file mode 100644 index 00000000..739c6154 --- /dev/null +++ b/package/python-xmodem/python-xmodem.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-xmodem +# +################################################################################ + +PYTHON_XMODEM_VERSION = 0.4.6 +PYTHON_XMODEM_SOURCE = xmodem-$(PYTHON_XMODEM_VERSION).tar.gz +PYTHON_XMODEM_SITE = https://files.pythonhosted.org/packages/29/5d/a20d7957f207fc4c4c143881ca7b9617ab7700c153012372ef0a934c7710 +PYTHON_XMODEM_SETUP_TYPE = setuptools +PYTHON_XMODEM_LICENSE = MIT +PYTHON_XMODEM_LICENSE_FILES = PKG-INFO + +$(eval $(python-package)) diff --git a/package/python-yarl/Config.in b/package/python-yarl/Config.in new file mode 100644 index 00000000..e5205045 --- /dev/null +++ b/package/python-yarl/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_YARL + bool "python-yarl" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_MULTIDICT + select BR2_PACKAGE_PYTHON_IDNA + help + Yet another URL library. + + http://yarl.readthedocs.io/ diff --git a/package/python-yarl/python-yarl.hash b/package/python-yarl/python-yarl.hash new file mode 100644 index 00000000..783702c7 --- /dev/null +++ b/package/python-yarl/python-yarl.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/yarl/json +md5 3b6f2da3db8c645a9440375fd6a414eb yarl-1.6.3.tar.gz +sha256 8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b426bf10 yarl-1.6.3.tar.gz +# Locally computed sha256 checksums +sha256 14c0820503ceef15e814a89b037d9efc066870087018294b6ae0f27163872cc5 LICENSE diff --git a/package/python-yarl/python-yarl.mk b/package/python-yarl/python-yarl.mk new file mode 100644 index 00000000..32ec4770 --- /dev/null +++ b/package/python-yarl/python-yarl.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-yarl +# +################################################################################ + +PYTHON_YARL_VERSION = 1.6.3 +PYTHON_YARL_SOURCE = yarl-$(PYTHON_YARL_VERSION).tar.gz +PYTHON_YARL_SITE = https://files.pythonhosted.org/packages/97/e7/af7219a0fe240e8ef6bb555341a63c43045c21ab0392b4435e754b716fa1 +PYTHON_YARL_LICENSE = Apache-2.0 +PYTHON_YARL_LICENSE_FILES = LICENSE +PYTHON_YARL_SETUP_TYPE = setuptools + +$(eval $(python-package)) diff --git a/package/python-yatl/Config.in b/package/python-yatl/Config.in new file mode 100644 index 00000000..88a79512 --- /dev/null +++ b/package/python-yatl/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_YATL + bool "python-yatl" + help + Yet Another Template Language. + + https://github.com/web2py/yatl diff --git a/package/python-yatl/python-yatl.hash b/package/python-yatl/python-yatl.hash new file mode 100644 index 00000000..534d74b6 --- /dev/null +++ b/package/python-yatl/python-yatl.hash @@ -0,0 +1,3 @@ +# md5, sha256 from https://pypi.org/pypi/yatl/json +md5 3368146e56b35ba5569ff64054c2a3fd yatl-20200711.1.tar.gz +sha256 d37b90e7679d2d2873ac634e66adfcd0cd7e4c34438e76a3192cf984faba2595 yatl-20200711.1.tar.gz diff --git a/package/python-yatl/python-yatl.mk b/package/python-yatl/python-yatl.mk new file mode 100644 index 00000000..6df5fcd8 --- /dev/null +++ b/package/python-yatl/python-yatl.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-yatl +# +################################################################################ + +PYTHON_YATL_VERSION = 20200711.1 +PYTHON_YATL_SOURCE = yatl-$(PYTHON_YATL_VERSION).tar.gz +PYTHON_YATL_SITE = https://files.pythonhosted.org/packages/b4/f5/b6020f8ccb3e156fbe0ed7e4a35fbdce4d6a7ef6a9ab0c54cb8880fb7c04 +PYTHON_YATL_SETUP_TYPE = setuptools +PYTHON_YATL_LICENSE = BSD-3-Clause + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-yieldfrom/Config.in b/package/python-yieldfrom/Config.in new file mode 100644 index 00000000..1a063d31 --- /dev/null +++ b/package/python-yieldfrom/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_PYTHON_YIELDFROM + bool "python-yieldfrom" + depends on BR2_PACKAGE_PYTHON + help + A backport of the `yield from` semantic from Python 3.x to + Python 2.7. + + https://github.com/Nurdok/yieldfrom/ diff --git a/package/python-yieldfrom/python-yieldfrom.hash b/package/python-yieldfrom/python-yieldfrom.hash new file mode 100644 index 00000000..7730a1e5 --- /dev/null +++ b/package/python-yieldfrom/python-yieldfrom.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/yieldfrom/json +md5 fd94120625ac1e69bb5946d5e63182da yieldfrom-1.0.5.tar.gz +sha256 eb75e58641410f06083f85013a438f28bceaabfe5af9c3206d5049362c37aca0 yieldfrom-1.0.5.tar.gz +# Locally computed sha256 checksums +sha256 b3092d61cce29e25f3799285495095d220e5e015b88c1c70e1e72dae052f21e8 LICENSE diff --git a/package/python-yieldfrom/python-yieldfrom.mk b/package/python-yieldfrom/python-yieldfrom.mk new file mode 100644 index 00000000..c926936a --- /dev/null +++ b/package/python-yieldfrom/python-yieldfrom.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-yieldfrom +# +################################################################################ + +PYTHON_YIELDFROM_VERSION = 1.0.5 +PYTHON_YIELDFROM_SOURCE = yieldfrom-$(PYTHON_YIELDFROM_VERSION).tar.gz +PYTHON_YIELDFROM_SITE = https://files.pythonhosted.org/packages/4d/f9/395917f574ace618eb234bcbae8df3fabaa9624532d96d1fbd3a20678b1e +PYTHON_YIELDFROM_SETUP_TYPE = setuptools +PYTHON_YIELDFROM_LICENSE = MIT +PYTHON_YIELDFROM_LICENSE_FILES = LICENSE + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/python-zc-lockfile/Config.in b/package/python-zc-lockfile/Config.in new file mode 100644 index 00000000..928f3604 --- /dev/null +++ b/package/python-zc-lockfile/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_PYTHON_ZC_LOCKFILE + bool "python-zc-lockfile" + help + Basic inter-process locks. + + https://github.com/zopefoundation/zc.lockfile diff --git a/package/python-zc-lockfile/python-zc-lockfile.hash b/package/python-zc-lockfile/python-zc-lockfile.hash new file mode 100644 index 00000000..4a9c1948 --- /dev/null +++ b/package/python-zc-lockfile/python-zc-lockfile.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/zc.lockfile/json +md5 3895445752278ddcc4578658c3c9a492 zc.lockfile-2.0.tar.gz +sha256 307ad78227e48be260e64896ec8886edc7eae22d8ec53e4d528ab5537a83203b zc.lockfile-2.0.tar.gz +# Locally computed sha256 checksums +sha256 3e671db11df687516cc1db5b3d65e4aa383eaca3c20cea3faf53a0f7335d0a3c LICENSE.txt diff --git a/package/python-zc-lockfile/python-zc-lockfile.mk b/package/python-zc-lockfile/python-zc-lockfile.mk new file mode 100644 index 00000000..a4621e6d --- /dev/null +++ b/package/python-zc-lockfile/python-zc-lockfile.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-zc-lockfile +# +################################################################################ + +PYTHON_ZC_LOCKFILE_VERSION = 2.0 +PYTHON_ZC_LOCKFILE_SOURCE = zc.lockfile-$(PYTHON_ZC_LOCKFILE_VERSION).tar.gz +PYTHON_ZC_LOCKFILE_SITE = https://files.pythonhosted.org/packages/11/98/f21922d501ab29d62665e7460c94f5ed485fd9d8348c126697947643a881 +PYTHON_ZC_LOCKFILE_SETUP_TYPE = setuptools +PYTHON_ZC_LOCKFILE_LICENSE = ZPL-2.1 +PYTHON_ZC_LOCKFILE_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python-zeroconf/Config.in b/package/python-zeroconf/Config.in new file mode 100644 index 00000000..a56bf7c1 --- /dev/null +++ b/package/python-zeroconf/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_PYTHON_ZEROCONF + bool "python-zeroconf" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_IFADDR # runtime + help + Pure Python Multicast DNS Service Discovery Library + (Bonjour/Avahi compatible). + + https://github.com/jstasiak/python-zeroconf diff --git a/package/python-zeroconf/python-zeroconf.hash b/package/python-zeroconf/python-zeroconf.hash new file mode 100644 index 00000000..a4239b67 --- /dev/null +++ b/package/python-zeroconf/python-zeroconf.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/zeroconf/json +md5 1094639f8688f2c5b1938029877eb4f2 zeroconf-0.23.0.tar.gz +sha256 e0c333b967c48f8b2e5cc94a1d4d28893023fb06dfd797ee384a94cdd1d0eef5 zeroconf-0.23.0.tar.gz +# Locally computed sha256 checksums +sha256 bb117c0fbd7f57f64170b690285d7df07c2371b578e3b3cd3aa2e1155ef461a0 COPYING diff --git a/package/python-zeroconf/python-zeroconf.mk b/package/python-zeroconf/python-zeroconf.mk new file mode 100644 index 00000000..55da292b --- /dev/null +++ b/package/python-zeroconf/python-zeroconf.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-zeroconf +# +################################################################################ + +PYTHON_ZEROCONF_VERSION = 0.23.0 +PYTHON_ZEROCONF_SOURCE = zeroconf-$(PYTHON_ZEROCONF_VERSION).tar.gz +PYTHON_ZEROCONF_SITE = https://files.pythonhosted.org/packages/d7/25/8bbdd4857820e0cdc380c7e0c3543dc01a55247a1d831c712571783e74ec +PYTHON_ZEROCONF_SETUP_TYPE = setuptools +PYTHON_ZEROCONF_LICENSE = LGPL-2.1+ +PYTHON_ZEROCONF_LICENSE_FILES = COPYING + +$(eval $(python-package)) diff --git a/package/python-zope-interface/Config.in b/package/python-zope-interface/Config.in new file mode 100644 index 00000000..4279aa9e --- /dev/null +++ b/package/python-zope-interface/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_PYTHON_ZOPE_INTERFACE + bool "python-zope-interface" + select BR2_PACKAGE_PYTHON_SETUPTOOLS # runtime + help + This package provides an implementation of "object + interfaces" for Python. Interfaces are a mechanism for + labeling objects as conforming to a given API or + contract. So, this package can be considered as + implementation of the Design By Contract methodology support + in Python. + + http://docs.zope.org/zope.interface/ diff --git a/package/python-zope-interface/python-zope-interface.hash b/package/python-zope-interface/python-zope-interface.hash new file mode 100644 index 00000000..2828d85c --- /dev/null +++ b/package/python-zope-interface/python-zope-interface.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/zope-interface/json +md5 a3b24f9d079bae5e13dd7a88aa512112 zope.interface-4.6.0.tar.gz +sha256 1b3d0dcabc7c90b470e59e38a9acaa361be43b3a6ea644c0063951964717f0e5 zope.interface-4.6.0.tar.gz +# Locally computed sha256 checksums +sha256 3e671db11df687516cc1db5b3d65e4aa383eaca3c20cea3faf53a0f7335d0a3c LICENSE.txt diff --git a/package/python-zope-interface/python-zope-interface.mk b/package/python-zope-interface/python-zope-interface.mk new file mode 100644 index 00000000..f36aab69 --- /dev/null +++ b/package/python-zope-interface/python-zope-interface.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# python-zope-interface +# +################################################################################ + +PYTHON_ZOPE_INTERFACE_VERSION = 4.6.0 +PYTHON_ZOPE_INTERFACE_SOURCE = zope.interface-$(PYTHON_ZOPE_INTERFACE_VERSION).tar.gz +PYTHON_ZOPE_INTERFACE_SITE = https://files.pythonhosted.org/packages/4e/d0/c9d16bd5b38de44a20c6dc5d5ed80a49626fafcb3db9f9efdc2a19026db6 +PYTHON_ZOPE_INTERFACE_SETUP_TYPE = setuptools +PYTHON_ZOPE_INTERFACE_LICENSE = ZPL-2.1 +PYTHON_ZOPE_INTERFACE_LICENSE_FILES = LICENSE.txt + +$(eval $(python-package)) diff --git a/package/python/0001-setup.py-do-not-add-invalid-header-locations.patch b/package/python/0001-setup.py-do-not-add-invalid-header-locations.patch new file mode 100644 index 00000000..3b2c9833 --- /dev/null +++ b/package/python/0001-setup.py-do-not-add-invalid-header-locations.patch @@ -0,0 +1,42 @@ +From 3dc31a435b67de2ba3dd3457f0c939e20b58e8de Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:17:06 +0100 +Subject: [PATCH] setup.py: do not add invalid header locations + +This piece of code incorrectly adds /usr/include to +self.compiler.include_dirs, and results in the following invalid +compilation line: + +/home/thomas/projets/buildroot/output/host/usr/bin/arm-none-linux-gnueabi-gcc -fPIC \ + -fno-strict-aliasing -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 \ + -pipe -Os -DNDEBUG -g -O3 -Wall -Wstrict-prototypes \ + -I/usr/include -I. -IInclude -I./Include \ + -I/home/thomas/projets/buildroot/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/include \ + -I/home/thomas/projets/buildroot/output/build/python-2.7.6/Include \ + -I/home/thomas/projets/buildroot/output/build/python-2.7.6 \ + -c /home/thomas/projets/buildroot/output/build/python-2.7.6/Modules/mathmodule.c \ + -o build/temp.linux2-arm-2.7/home/thomas/projets/buildroot/output/build/python-2.7.6/Modules/mathmodule.o +cc1: warning: include location "/usr/include" is unsafe for cross-compilation [-Wpoison-system-directories] +[...] + +Signed-off-by: Thomas Petazzoni +--- + setup.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/setup.py b/setup.py +index 54054c2..64001e2 100644 +--- a/setup.py ++++ b/setup.py +@@ -496,7 +496,7 @@ class PyBuildExt(build_ext): + for directory in reversed(options.dirs): + add_dir_to_list(dir_list, directory) + +- if os.path.normpath(sys.prefix) != '/usr' \ ++ if False and os.path.normpath(sys.prefix) != '/usr' \ + and not sysconfig.get_config_var('PYTHONFRAMEWORK'): + # OSX note: Don't add LIBDIR and INCLUDEDIR to building a framework + # (PYTHONFRAMEWORK is set) to avoid # linking problems when +-- +2.7.4 + diff --git a/package/python/0002-Fix-get_python_inc-for-cross-compilation.patch b/package/python/0002-Fix-get_python_inc-for-cross-compilation.patch new file mode 100644 index 00000000..1fa4e927 --- /dev/null +++ b/package/python/0002-Fix-get_python_inc-for-cross-compilation.patch @@ -0,0 +1,48 @@ +From 367ee7d103cf9f670c3925d555edf6f6a5b9d8d5 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:17:25 +0100 +Subject: [PATCH] Fix get_python_inc() for cross-compilation + +When we are cross compiling, doing os.path.dirname(sys.executable) to +get the build directory is incorrect, because we're executing the host +Python to build things for the target. Instead, we should use the +project_base variable. + +This fixes cross-compilation, which was adding incorrect header paths +pointing to the location where the host Python was built: + +/home/thomas/projets/buildroot/output/host/usr/bin/arm-none-linux-gnueabi-gcc -fPIC -fno-strict-aliasing \ + -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -pipe -Os -DNDEBUG -g -O3 -Wall -Wstrict-prototypes \ + -I/usr/include -I. -IInclude -I./Include -I/home/thomas/projets/buildroot/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/include \ + -I/home/thomas/projets/buildroot/output/host/usr/bin/Include -I/home/thomas/projets/buildroot/output/host/usr/bin \ + -c /home/thomas/projets/buildroot/output/build/python-2.7.6/Modules/_struct.c \ + -o build/temp.linux2-arm-2.7/home/thomas/projets/buildroot/output/build/python-2.7.6/Modules/_struct.o + +This patch allows to fix the +/home/thomas/projets/buildroot/output/host/usr/bin/Include and +/home/thomas/projets/buildroot/output/host/usr/bin paths that are +incorrectly added to the header paths. + +Signed-off-by: Thomas Petazzoni +[Asaf: update for 2.7.17] +Signed-off-by: Asaf Kahlon +--- + Lib/distutils/sysconfig.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py +index 1a4b792644..14c7d81c48 100644 +--- a/Lib/distutils/sysconfig.py ++++ b/Lib/distutils/sysconfig.py +@@ -85,7 +85,7 @@ def get_python_inc(plat_specific=0, prefix=None): + if os.name == "posix": + if python_build: + if sys.executable: +- buildir = os.path.dirname(sys.executable) ++ buildir = project_base + else: + # sys.executable can be empty if argv[0] has been changed + # and Python is unable to retrieve the real program name +-- +2.20.1 + diff --git a/package/python/0003-Change-the-install-location-of-_sysconfigdata.py.patch b/package/python/0003-Change-the-install-location-of-_sysconfigdata.py.patch new file mode 100644 index 00000000..9e05af2e --- /dev/null +++ b/package/python/0003-Change-the-install-location-of-_sysconfigdata.py.patch @@ -0,0 +1,88 @@ +From e3f3c454ec4992a2283640cef0a35da5a05fb399 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:17:59 +0100 +Subject: [PATCH] Change the install location of _sysconfigdata.py + +The _sysconfigdata.py module contains definitions that are needed when +building Python modules. In cross-compilation mode, when building +Python extensions for the target, we need to use the _sysconfigdata.py +of the target Python while executing the host Python. + +However until now, the _sysconfigdata.py module was installed in +build/lib.- directory, together with a number of +architecture-specific shared objects, which cannot be used with the +host Python. + +To solve this problem, this patch moves _sysconfigdata.py to a +separate location, build/sysconfigdata.-/, and only +this directory gets added to the PYTHONPATH of the host Python +interpreter when building Python modules for the target. + +Signed-off-by: Thomas Petazzoni +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + Makefile.pre.in | 12 ++++++++++-- + configure.ac | 2 +- + 2 files changed, 11 insertions(+), 3 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 9297e7fc89..49d3c0926f 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -509,6 +509,9 @@ pybuilddir.txt: $(BUILDPYTHON) + rm -f ./pybuilddir.txt ; \ + exit 1 ; \ + fi ++ echo `cat pybuilddir.txt`/sysconfigdata > pysysconfigdatadir.txt ++ mkdir -p `cat pysysconfigdatadir.txt` ++ cp `cat pybuilddir.txt`/_sysconfigdata.py `cat pysysconfigdatadir.txt` + + # This is shared by the math and cmath modules + Modules/_math.o: Modules/_math.c Modules/_math.h +@@ -1091,7 +1094,7 @@ libinstall: build_all $(srcdir)/Lib/$(PLATDIR) $(srcdir)/Modules/xxmodule.c + else true; \ + fi; \ + done +- @for i in $(srcdir)/Lib/*.py `cat pybuilddir.txt`/_sysconfigdata.py $(srcdir)/Lib/*.doc $(srcdir)/Lib/*.egg-info ; \ ++ @for i in $(srcdir)/Lib/*.py $(srcdir)/Lib/*.doc $(srcdir)/Lib/*.egg-info ; \ + do \ + if test -x $$i; then \ + $(INSTALL_SCRIPT) $$i $(DESTDIR)$(LIBDEST); \ +@@ -1101,6 +1104,11 @@ libinstall: build_all $(srcdir)/Lib/$(PLATDIR) $(srcdir)/Modules/xxmodule.c + echo $(INSTALL_DATA) $$i $(LIBDEST); \ + fi; \ + done ++ $(INSTALL_DATA) `cat pysysconfigdatadir.txt`/_sysconfigdata.py \ ++ $(DESTDIR)$(LIBDEST) ++ mkdir -p $(DESTDIR)$(LIBDEST)/sysconfigdata ++ $(INSTALL_DATA) `cat pysysconfigdatadir.txt`/_sysconfigdata.py \ ++ $(DESTDIR)$(LIBDEST)/sysconfigdata + @for d in $(LIBSUBDIRS); \ + do \ + a=$(srcdir)/Lib/$$d; \ +@@ -1426,7 +1434,7 @@ distclean: clobber + Modules/Setup Modules/Setup.local Modules/Setup.config \ + Modules/ld_so_aix Modules/python.exp Misc/python.pc + -rm -f python*-gdb.py +- -rm -f pybuilddir.txt ++ -rm -f pybuilddir.txt pysysconfigdatadir.txt + # Issue #28258: set LC_ALL to avoid issues with Estonian locale. + # Expansion is performed here by shell (spawned by make) itself before + # arguments are passed to find. So LC_ALL=C must be set as a separate +diff --git a/configure.ac b/configure.ac +index aecf6066e8..7143172b98 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -36,7 +36,7 @@ if test "$cross_compiling" = yes; then + AC_MSG_ERROR([python$PACKAGE_VERSION interpreter not found]) + fi + AC_MSG_RESULT($interp) +- PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib:$(srcdir)/Lib/$(PLATDIR) '$interp ++ PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pysysconfigdatadir.txt && echo $(abs_builddir)/`cat pysysconfigdatadir.txt`:)$(srcdir)/Lib:$(srcdir)/Lib/$(PLATDIR) '$interp + fi + elif test "$cross_compiling" = maybe; then + AC_MSG_ERROR([Cross compiling required --host=HOST-TUPLE and --build=ARCH]) +-- +2.11.0 + diff --git a/package/python/0004-Make-the-compilation-of-.pyc-and-.pyo-conditional.patch b/package/python/0004-Make-the-compilation-of-.pyc-and-.pyo-conditional.patch new file mode 100644 index 00000000..ef1eb040 --- /dev/null +++ b/package/python/0004-Make-the-compilation-of-.pyc-and-.pyo-conditional.patch @@ -0,0 +1,78 @@ +From 57ab41fa019d3ce276decd488938e5a00049cb9d Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:18:57 +0100 +Subject: [PATCH] Make the compilation of .pyc and .pyo conditional + +This commit adds --{enable,disable}-{pyc,pyo} options to enable/disable +the compilation of pyc/pyo files. + +Signed-off-by: Thomas Petazzoni +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + Makefile.pre.in | 8 ++++++++ + configure.ac | 11 +++++++++++ + 2 files changed, 19 insertions(+) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 49d3c0926f..247d3c2902 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1139,24 +1139,32 @@ libinstall: build_all $(srcdir)/Lib/$(PLATDIR) $(srcdir)/Modules/xxmodule.c + $(INSTALL_DATA) $(srcdir)/Modules/xxmodule.c \ + $(DESTDIR)$(LIBDEST)/distutils/tests ; \ + fi ++ifeq (@PYC_BUILD@,yes) + PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ + $(PYTHON_FOR_BUILD) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \ + -d $(LIBDEST) -f \ + -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \ + $(DESTDIR)$(LIBDEST) ++endif ++ifeq (@PYO_BUILD@,yes) + PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ + $(PYTHON_FOR_BUILD) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \ + -d $(LIBDEST) -f \ + -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \ + $(DESTDIR)$(LIBDEST) ++endif ++ifeq (@PYC_BUILD@,yes) + -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ + $(PYTHON_FOR_BUILD) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \ + -d $(LIBDEST)/site-packages -f \ + -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages ++endif ++ifeq (@PYO_BUILD@,yes) + -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ + $(PYTHON_FOR_BUILD) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \ + -d $(LIBDEST)/site-packages -f \ + -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages ++endif + -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ + $(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/Grammar.txt + -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ +diff --git a/configure.ac b/configure.ac +index 7143172b98..6bd8369105 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -773,6 +773,17 @@ SunOS*) + ;; + esac + ++AC_SUBST(PYC_BUILD) ++ ++AC_ARG_ENABLE(pyc-build, ++ AS_HELP_STRING([--disable-pyc-build], [disable build of pyc files]), ++ [ PYC_BUILD="${enableval}" ], [ PYC_BUILD=yes ]) ++ ++AC_SUBST(PYO_BUILD) ++ ++AC_ARG_ENABLE(pyo-build, ++ AS_HELP_STRING([--disable-pyo-build], [disable build of pyo files]), ++ [ PYO_BUILD="${enableval}" ], [ PYO_BUILD=yes ]) + + AC_SUBST(LIBRARY) + AC_MSG_CHECKING(LIBRARY) +-- +2.11.0 + diff --git a/package/python/0005-Adjust-getaddrinfo-test-for-cross-compilation.patch b/package/python/0005-Adjust-getaddrinfo-test-for-cross-compilation.patch new file mode 100644 index 00000000..c910ae71 --- /dev/null +++ b/package/python/0005-Adjust-getaddrinfo-test-for-cross-compilation.patch @@ -0,0 +1,31 @@ +From e674e29ceba34e55c9149ce99489e543aa4ebb01 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:19:47 +0100 +Subject: [PATCH] Adjust getaddrinfo() test for cross-compilation + +The getaddrinfo() test in configure.ac uses AC_RUN_IFELSE(), which isn't +cross-compilation friendly. + +Signed-off-by: Thomas Petazzoni +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 6bd8369105..77ca6d86ca 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3563,7 +3563,7 @@ fi + + AC_MSG_RESULT($ac_cv_buggy_getaddrinfo) + +-if test $have_getaddrinfo = no -o "$ac_cv_buggy_getaddrinfo" = yes ++if test $have_getaddrinfo = no || test "$cross_compiling" != "yes" -a "$ac_cv_buggy_getaddrinfo" = yes + then + if test $ipv6 = yes + then +-- +2.11.0 + diff --git a/package/python/0006-Add-minimal-infrastructure-to-be-able-to-disable-ext.patch b/package/python/0006-Add-minimal-infrastructure-to-be-able-to-disable-ext.patch new file mode 100644 index 00000000..b1a20eb0 --- /dev/null +++ b/package/python/0006-Add-minimal-infrastructure-to-be-able-to-disable-ext.patch @@ -0,0 +1,81 @@ +From 94ec96dd8827adfb5e272d28a4d76510e28657b3 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:21:28 +0100 +Subject: [PATCH] Add minimal infrastructure to be able to disable extensions + +This commit adds some logic to the Python build system to be able to +disable Python extensions. Follow-up commits actually add options to +disable specific extensions. + +Signed-off-by: Thomas Petazzoni +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + Makefile.pre.in | 6 +++++- + configure.ac | 2 ++ + setup.py | 5 ++++- + 3 files changed, 11 insertions(+), 2 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 247d3c2902..c1c98ecc5a 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -160,6 +160,8 @@ FILEMODE= 644 + # configure script arguments + CONFIG_ARGS= @CONFIG_ARGS@ + ++# disabled extensions ++DISABLED_EXTENSIONS= @DISABLED_EXTENSIONS@ + + # Subdirectories with code + SRCDIRS= @SRCDIRS@ +@@ -528,6 +530,7 @@ sharedmods: $(BUILDPYTHON) pybuilddir.txt Modules/_math.o + esac; \ + $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' \ + _TCLTK_INCLUDES='$(TCLTK_INCLUDES)' _TCLTK_LIBS='$(TCLTK_LIBS)' \ ++ DISABLED_EXTENSIONS="$(DISABLED_EXTENSIONS)" \ + $(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build + + # Build static library +@@ -1280,7 +1283,8 @@ libainstall: @DEF_MAKE_RULE@ python-config + # Install the dynamically loadable modules + # This goes into $(exec_prefix) + sharedinstall: sharedmods +- $(RUNSHARED) $(PYTHON_FOR_BUILD) $(srcdir)/setup.py install \ ++ $(RUNSHARED) DISABLED_EXTENSIONS="$(DISABLED_EXTENSIONS)" \ ++ $(PYTHON_FOR_BUILD) $(srcdir)/setup.py install \ + --prefix=$(prefix) \ + --install-scripts=$(BINDIR) \ + --install-platlib=$(DESTSHARED) \ +diff --git a/configure.ac b/configure.ac +index 77ca6d86ca..13f90b3ddd 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2491,6 +2491,8 @@ LIBS="$withval $LIBS" + + PKG_PROG_PKG_CONFIG + ++AC_SUBST(DISABLED_EXTENSIONS) ++ + # Check for use of the system expat library + AC_MSG_CHECKING(for --with-system-expat) + AC_ARG_WITH(system_expat, +diff --git a/setup.py b/setup.py +index 812d53d560..d426dd02ea 100644 +--- a/setup.py ++++ b/setup.py +@@ -33,7 +33,10 @@ host_platform = get_platform() + COMPILED_WITH_PYDEBUG = ('--with-pydebug' in sysconfig.get_config_var("CONFIG_ARGS")) + + # This global variable is used to hold the list of modules to be disabled. +-disabled_module_list = [] ++try: ++ disabled_module_list = sysconfig.get_config_var("DISABLED_EXTENSIONS").split(" ") ++except KeyError: ++ disabled_module_list = list() + + def add_dir_to_list(dirlist, dir): + """Add the directory 'dir' to the list 'dirlist' (at the front) if +-- +2.11.0 + diff --git a/package/python/0007-Adjust-library-header-paths-for-cross-compilation.patch b/package/python/0007-Adjust-library-header-paths-for-cross-compilation.patch new file mode 100644 index 00000000..c68f1bf7 --- /dev/null +++ b/package/python/0007-Adjust-library-header-paths-for-cross-compilation.patch @@ -0,0 +1,64 @@ +From f3e0a677c4736f95338825a022a884f8dc7a5c14 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:22:19 +0100 +Subject: [PATCH] Adjust library/header paths for cross-compilation + +When cross-compiling third-party extensions, the get_python_inc() or +get_python_lib() can be called, to return the path to headers or +libraries. However, they use the sys.prefix of the host Python, which +returns incorrect paths when cross-compiling (paths pointing to host +headers and libraries). + +In order to fix this, we introduce the _python_sysroot, _python_prefix +and _python_exec_prefix variables, that allow to override these +values, and get correct header/library paths when cross-compiling +third-party Python modules. + +The _python_sysroot variable is also used to prefix the LIBDIR value +taken from the sysconfigdata module. + +Signed-off-by: Thomas Petazzoni +--- + Lib/distutils/command/build_ext.py | 5 ++++- + Lib/distutils/sysconfig.py | 9 +++++++-- + 2 files changed, 11 insertions(+), 3 deletions(-) + +diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py +index 2c68be3..375b08c 100644 +--- a/Lib/distutils/command/build_ext.py ++++ b/Lib/distutils/command/build_ext.py +@@ -240,7 +240,10 @@ class build_ext (Command): + if (sysconfig.get_config_var('Py_ENABLE_SHARED')): + if not sysconfig.python_build: + # building third party extensions +- self.library_dirs.append(sysconfig.get_config_var('LIBDIR')) ++ libdir = sysconfig.get_config_var('LIBDIR') ++ if "_python_sysroot" in os.environ: ++ libdir = os.environ.get("_python_sysroot") + libdir ++ self.library_dirs.append(libdir) + else: + # building python standard extensions + self.library_dirs.append('.') +diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py +index d72b6e5..72151df 100644 +--- a/Lib/distutils/sysconfig.py ++++ b/Lib/distutils/sysconfig.py +@@ -19,8 +19,13 @@ import sys + from distutils.errors import DistutilsPlatformError + + # These are needed in a couple of spots, so just compute them once. +-PREFIX = os.path.normpath(sys.prefix) +-EXEC_PREFIX = os.path.normpath(sys.exec_prefix) ++if "_python_sysroot" in os.environ: ++ _sysroot=os.environ.get('_python_sysroot') ++ PREFIX = os.path.normpath(_sysroot + os.environ.get('_python_prefix')) ++ EXEC_PREFIX = os.path.normpath(_sysroot + os.environ.get('_python_exec_prefix')) ++else: ++ PREFIX = os.path.normpath(sys.prefix) ++ EXEC_PREFIX = os.path.normpath(sys.exec_prefix) + + # Path to the base directory of the project. On Windows the binary may + # live in project/PCBuild9. If we're dealing with an x64 Windows build, +-- +2.7.4 + diff --git a/package/python/0008-Don-t-look-in-usr-lib-termcap-for-libraries.patch b/package/python/0008-Don-t-look-in-usr-lib-termcap-for-libraries.patch new file mode 100644 index 00000000..d523b746 --- /dev/null +++ b/package/python/0008-Don-t-look-in-usr-lib-termcap-for-libraries.patch @@ -0,0 +1,31 @@ +From 87b627d8845e67fd798449b414bece04f18bd450 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:22:40 +0100 +Subject: [PATCH] Don't look in /usr/lib/termcap for libraries + +Signed-off-by: Thomas Petazzoni +--- + setup.py | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/setup.py b/setup.py +index 3b51c0a..fa32532 100644 +--- a/setup.py ++++ b/setup.py +@@ -784,12 +784,9 @@ class PyBuildExt(build_ext): + pass # Issue 7384: Already linked against curses or tinfo. + elif curses_library: + readline_libs.append(curses_library) +- elif self.compiler.find_library_file(lib_dirs + +- ['/usr/lib/termcap'], +- 'termcap'): ++ elif self.compiler.find_library_file(lib_dirs, 'termcap'): + readline_libs.append('termcap') + exts.append( Extension('readline', ['readline.c'], +- library_dirs=['/usr/lib/termcap'], + extra_link_args=readline_extra_link_args, + libraries=readline_libs) ) + else: +-- +2.7.4 + diff --git a/package/python/0009-Fix-python-config-for-cross-builds.patch b/package/python/0009-Fix-python-config-for-cross-builds.patch new file mode 100644 index 00000000..3cf8797c --- /dev/null +++ b/package/python/0009-Fix-python-config-for-cross-builds.patch @@ -0,0 +1,229 @@ +From 1522c6c00ee88eb1148d3b2021d32d819b416375 Mon Sep 17 00:00:00 2001 +From: Gustavo Zacarias +Date: Tue, 7 Mar 2017 22:23:14 +0100 +Subject: [PATCH] Fix python-config for cross-builds + +Add a backport of http://bugs.python.org/issue16235 so we can use +python-config for cross builds. + +This basically replaces the python version of python-config with a +pure-shell version that's already preprocessed when installed and +doesn't depend on the sysconfig import that usually leads to bad +data/results. + +Signed-off-by: Gustavo Zacarias +[Bernd: rebased for Python 2.7.15] +Signed-off-by: Bernd Kuhls +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + Makefile.pre.in | 13 +++--- + Misc/python-config.sh.in | 102 +++++++++++++++++++++++++++++++++++++++++++++++ + configure.ac | 7 +++- + 3 files changed, 116 insertions(+), 6 deletions(-) + create mode 100644 Misc/python-config.sh.in + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index c1c98ecc5a..727a92af42 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -170,7 +170,7 @@ SRCDIRS= @SRCDIRS@ + SUBDIRSTOO= Include Lib Misc Demo + + # Files and directories to be distributed +-CONFIGFILES= configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in ++CONFIGFILES= configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in Misc/python-config.sh + DISTFILES= README ChangeLog $(CONFIGFILES) + DISTDIRS= $(SUBDIRS) $(SUBDIRSTOO) Ext-dummy + DIST= $(DISTFILES) $(DISTDIRS) +@@ -403,7 +403,7 @@ LIBRARY_OBJS= \ + + # Default target + all: @DEF_MAKE_ALL_RULE@ +-build_all: check-clean-src $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks ++build_all: check-clean-src $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks python-config + + # Check that the source is clean when building out of source. + check-clean-src: +@@ -1190,10 +1190,12 @@ $(srcdir)/Lib/$(PLATDIR): + fi; \ + cd $(srcdir)/Lib/$(PLATDIR); $(RUNSHARED) ./regen + +-python-config: $(srcdir)/Misc/python-config.in ++python-config: $(srcdir)/Misc/python-config.in Misc/python-config.sh + # Substitution happens here, as the completely-expanded BINDIR + # is not available in configure +- sed -e "s,@EXENAME@,$(BINDIR)/python$(VERSION)$(EXE)," < $(srcdir)/Misc/python-config.in >python-config ++ sed -e "s,@EXENAME@,$(BINDIR)/python$(VERSION)$(EXE)," < $(srcdir)/Misc/python-config.in >python-config.py ++ # Replace makefile compat. variable references with shell script compat. ones; $(VAR) -> ${VAR} ++ sed -e 's,\$$(\([A-Za-z0-9_]*\)),\$$\{\1\},g' Misc/python-config.sh >python-config + + # Install the include files + INCLDIRSTOMAKE=$(INCLUDEDIR) $(CONFINCLUDEDIR) $(INCLUDEPY) $(CONFINCLUDEPY) +@@ -1252,7 +1254,7 @@ libainstall: @DEF_MAKE_RULE@ python-config + $(INSTALL_SCRIPT) $(srcdir)/Modules/makesetup $(DESTDIR)$(LIBPL)/makesetup + $(INSTALL_SCRIPT) $(srcdir)/install-sh $(DESTDIR)$(LIBPL)/install-sh + $(INSTALL_SCRIPT) python-config $(DESTDIR)$(BINDIR)/python$(VERSION)-config +- rm python-config ++ $(INSTALL_SCRIPT) python-config.py $(DESTDIR)$(LIBPL)/python-config.py + @if [ -s Modules/python.exp -a \ + "`echo $(MACHDEP) | sed 's/^\(...\).*/\1/'`" = "aix" ]; then \ + echo; echo "Installing support files for building shared extension modules on AIX:"; \ +@@ -1434,6 +1436,7 @@ clobber: clean profile-removal + config.cache config.log pyconfig.h Modules/config.c + -rm -rf build platform + -rm -rf $(PYTHONFRAMEWORKDIR) ++ -rm -f python-config.py python-config + + # Make things extra clean, before making a distribution: + # remove all generated files, even Makefile[.pre] +diff --git a/Misc/python-config.sh.in b/Misc/python-config.sh.in +new file mode 100644 +index 0000000000..10db4c12eb +--- /dev/null ++++ b/Misc/python-config.sh.in +@@ -0,0 +1,102 @@ ++#!/bin/sh ++ ++exit_with_usage () ++{ ++ echo "Usage: $0 --prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--help|--configdir" ++ exit $1 ++} ++ ++if [ "$1" = "" ] ; then ++ exit_with_usage 1 ++fi ++ ++# Returns the actual prefix where this script was installed to. ++installed_prefix () ++{ ++ RESULT=$(dirname $(cd $(dirname "$1") && pwd -P)) ++ if which readlink >/dev/null 2>&1 ; then ++ RESULT=$(readlink -f "$RESULT") ++ fi ++ echo $RESULT ++} ++ ++prefix_build="@prefix@" ++prefix_real=$(installed_prefix "$0") ++ ++# Use sed to fix paths from their built to locations to their installed to locations. ++prefix=$(echo "$prefix_build" | sed "s#$prefix_build#$prefix_real#") ++exec_prefix_build="@exec_prefix@" ++exec_prefix=$(echo "$exec_prefix_build" | sed "s#$exec_prefix_build#$prefix_real#") ++includedir=$(echo "@includedir@") ++libdir=$(echo "@libdir@" | sed "s#$prefix_build#$prefix_real#") ++CFLAGS=$(echo "@CFLAGS@" | sed "s#$prefix_build#$prefix_real#") ++VERSION="@VERSION@" ++LIBM="@LIBM@" ++LIBC="@LIBC@" ++SYSLIBS="$LIBM $LIBC" ++LIBS="@LIBS@ $SYSLIBS -lpython${VERSION}" ++BASECFLAGS="@BASECFLAGS@" ++LDLIBRARY="@LDLIBRARY@" ++LINKFORSHARED="@LINKFORSHARED@" ++OPT="@OPT@" ++PY_ENABLE_SHARED="@PY_ENABLE_SHARED@" ++LDVERSION="@LDVERSION@" ++LIBDEST=${prefix}/lib/python${VERSION} ++LIBPL=$(echo "@LIBPL@" | sed "s#$prefix_build#$prefix_real#") ++SO="@SO@" ++PYTHONFRAMEWORK="@PYTHONFRAMEWORK@" ++INCDIR="-I$includedir/python${VERSION}" ++PLATINCDIR="-I$includedir/python${VERSION}" ++ ++# Scan for --help or unknown argument. ++for ARG in $* ++do ++ case $ARG in ++ --help) ++ exit_with_usage 0 ++ ;; ++ --prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--abiflags|--configdir) ++ ;; ++ *) ++ exit_with_usage 1 ++ ;; ++esac ++done ++ ++for ARG in "$@" ++do ++ case "$ARG" in ++ --prefix) ++ echo "$prefix" ++ ;; ++ --exec-prefix) ++ echo "$exec_prefix" ++ ;; ++ --includes) ++ echo "$INCDIR $PLATINCDIR" ++ ;; ++ --cflags) ++ echo "$INCDIR $PLATINCDIR $BASECFLAGS $CFLAGS $OPT" ++ ;; ++ --libs) ++ echo "$LIBS" ++ ;; ++ --ldflags) ++ LINKFORSHAREDUSED= ++ if [ -z "$PYTHONFRAMEWORK" ] ; then ++ LINKFORSHAREDUSED=$LINKFORSHARED ++ fi ++ LIBPLUSED= ++ if [ "$PY_ENABLE_SHARED" = "0" ] ; then ++ LIBPLUSED="-L$LIBPL" ++ fi ++ echo "$LIBPLUSED -L$libdir $LIBS $LINKFORSHAREDUSED" ++ ;; ++ --extension-suffix) ++ echo "$SO" ++ ;; ++ --configdir) ++ echo "$LIBPL" ++ ;; ++esac ++done +diff --git a/configure.ac b/configure.ac +index 13f90b3ddd..3f28ef1371 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -919,6 +919,7 @@ fi + + # Other platforms follow + if test $enable_shared = "yes"; then ++ PY_ENABLE_SHARED=1 + AC_DEFINE(Py_ENABLE_SHARED, 1, [Defined if Python is built as a shared library.]) + case $ac_sys_system in + BeOS*) +@@ -979,6 +980,7 @@ if test $enable_shared = "yes"; then + + esac + else # shared is disabled ++ PY_ENABLE_SHARED=0 + case $ac_sys_system in + CYGWIN*) + BLDLIBRARY='$(LIBRARY)' +@@ -2128,6 +2130,9 @@ AC_SUBST(LDCXXSHARED) + AC_SUBST(BLDSHARED) + AC_SUBST(CCSHARED) + AC_SUBST(LINKFORSHARED) ++AC_SUBST(PY_ENABLE_SHARED) ++LIBPL="${prefix}/lib/python${VERSION}/config" ++AC_SUBST(LIBPL) + # SO is the extension of shared libraries `(including the dot!) + # -- usually .so, .sl on HP-UX, .dll on Cygwin + AC_MSG_CHECKING(SO) +@@ -4944,7 +4949,7 @@ AC_MSG_RESULT($ENSUREPIP) + AC_SUBST(ENSUREPIP) + + # generate output files +-AC_CONFIG_FILES(Makefile.pre Modules/Setup.config Misc/python.pc) ++AC_CONFIG_FILES(Makefile.pre Modules/Setup.config Misc/python.pc Misc/python-config.sh) + AC_CONFIG_FILES([Modules/ld_so_aix], [chmod +x Modules/ld_so_aix]) + AC_OUTPUT + +-- +2.11.0 + diff --git a/package/python/0010-Remove-the-python-symlink-install-rules.patch b/package/python/0010-Remove-the-python-symlink-install-rules.patch new file mode 100644 index 00000000..4a2116b1 --- /dev/null +++ b/package/python/0010-Remove-the-python-symlink-install-rules.patch @@ -0,0 +1,43 @@ +From 706d62599fb3c3cb9b9941364aaf4a1ef4ebd276 Mon Sep 17 00:00:00 2001 +From: Samuel Martin +Date: Tue, 7 Mar 2017 22:23:58 +0100 +Subject: [PATCH] Remove the python symlink install rules + +The python symlink installation will be handled by Buildroot itself, +because Buildroot needs to control to what python interpreter (python2 +or python3) the python symlink points to. + +Signed-off-by: Samuel Martin +[Bernd: rebased against version 2.7.12.] +Signed-off-by: Bernd Kuhls +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + Makefile.pre.in | 7 ------- + 1 file changed, 7 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 727a92af42..37b2ff3a5f 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -978,17 +978,10 @@ bininstall: altbininstall + echo "Creating directory $(LIBPC)"; \ + $(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$(LIBPC); \ + fi +- -if test -f $(DESTDIR)$(BINDIR)/$(PYTHON) -o -h $(DESTDIR)$(BINDIR)/$(PYTHON); \ +- then rm -f $(DESTDIR)$(BINDIR)/$(PYTHON); \ +- else true; \ +- fi +- (cd $(DESTDIR)$(BINDIR); $(LN) -s python2$(EXE) $(PYTHON)) + -rm -f $(DESTDIR)$(BINDIR)/python2$(EXE) + (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)$(EXE) python2$(EXE)) + -rm -f $(DESTDIR)$(BINDIR)/python2-config + (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)-config python2-config) +- -rm -f $(DESTDIR)$(BINDIR)/python-config +- (cd $(DESTDIR)$(BINDIR); $(LN) -s python2-config python-config) + -test -d $(DESTDIR)$(LIBPC) || $(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$(LIBPC) + -rm -f $(DESTDIR)$(LIBPC)/python2.pc + (cd $(DESTDIR)$(LIBPC); $(LN) -s python-$(VERSION).pc python2.pc) +-- +2.11.0 + diff --git a/package/python/0011-Don-t-add-multiarch-paths.patch b/package/python/0011-Don-t-add-multiarch-paths.patch new file mode 100644 index 00000000..b84c9077 --- /dev/null +++ b/package/python/0011-Don-t-add-multiarch-paths.patch @@ -0,0 +1,36 @@ +From 50a243a9c90f95e9248ac720e42e802b5922ab90 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:24:28 +0100 +Subject: [PATCH] Don't add multiarch paths + +The add_multiarch_paths() function leads, in certain build +environments, to the addition of host header paths to the CFLAGS, +which is not appropriate for cross-compilation. This patch fixes that +by simply removing the call to add_multiarch_paths() when we're +cross-compiling. + +Investigation done by David . + +Signed-off-by: Thomas Petazzoni +--- + setup.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/setup.py b/setup.py +index fa32532..0b9ea57 100644 +--- a/setup.py ++++ b/setup.py +@@ -461,9 +461,9 @@ class PyBuildExt(build_ext): + if not cross_compiling: + add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib') + add_dir_to_list(self.compiler.include_dirs, '/usr/local/include') ++ self.add_multiarch_paths() + if cross_compiling: + self.add_gcc_paths() +- self.add_multiarch_paths() + + # Add paths specified in the environment variables LDFLAGS and + # CPPFLAGS for header and library files. +-- +2.7.4 + diff --git a/package/python/0012-Abort-on-failed-module-build.patch b/package/python/0012-Abort-on-failed-module-build.patch new file mode 100644 index 00000000..7d952ca5 --- /dev/null +++ b/package/python/0012-Abort-on-failed-module-build.patch @@ -0,0 +1,30 @@ +From a131e2ff219872d97eef6585117bd2f8ff9e310d Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:24:48 +0100 +Subject: [PATCH] Abort on failed module build + +When building a Python module fails, the setup.py script currently +doesn't exit with an error, and simply continues. This is not a really +nice behavior, so this patch changes setup.py to abort with an error, +so that the build issue is clearly noticeable. + +Signed-off-by: Thomas Petazzoni +--- + setup.py | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/setup.py b/setup.py +index 0b9ea57..9a5c2b8 100644 +--- a/setup.py ++++ b/setup.py +@@ -299,6 +299,7 @@ class PyBuildExt(build_ext): + print "Failed to build these modules:" + print_three_column(failed) + print ++ sys.exit(1) + + def build_extension(self, ext): + +-- +2.7.4 + diff --git a/package/python/0013-sqlite3-fix-build-when-threads-are-not-used-availabl.patch b/package/python/0013-sqlite3-fix-build-when-threads-are-not-used-availabl.patch new file mode 100644 index 00000000..dfc11efc --- /dev/null +++ b/package/python/0013-sqlite3-fix-build-when-threads-are-not-used-availabl.patch @@ -0,0 +1,58 @@ +From 0f0be88526ece7d2f6ee21c1f59b1546ec6dc7c0 Mon Sep 17 00:00:00 2001 +From: "Yann E. MORIN" +Date: Tue, 7 Mar 2017 22:25:14 +0100 +Subject: [PATCH] sqlite3: fix build when threads are not used/available + +When threads are not used/available, a function in the sqlite3 extension +ends up with a label at the end: + + void _pysqlite_final_callback(sqlite3_context* context) + { + PyObject* function_result; + PyObject** aggregate_instance; + int ok; + + #ifdef WITH_THREAD + PyGILState_STATE threadstate; + + threadstate = PyGILState_Ensure(); + #endif + + aggregate_instance = (PyObject**)sqlite3_aggregate_context(context, sizeof(PyObject*)); + if (!*aggregate_instance) { + goto error; + } + + [......] + + error: + #ifdef WITH_THREAD + PyGILState_Release(threadstate); + #endif + } + +This is not valid, and gcc complains. + +Fix that by adding a dummy statement after the label, so that the label +is never the last statement of the function. + +Signed-off-by: "Yann E. MORIN" +--- + Modules/_sqlite/connection.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c +index 237d6e4..cdf69ab 100644 +--- a/Modules/_sqlite/connection.c ++++ b/Modules/_sqlite/connection.c +@@ -794,6 +794,7 @@ error: + #ifdef WITH_THREAD + PyGILState_Release(threadstate); + #endif ++ ; /* Make gcc happy: a label can't be at the end of a function */ + } + + static void _pysqlite_drop_unused_statement_references(pysqlite_Connection* self) +-- +2.7.4 + diff --git a/package/python/0014-Serial-ioctl-workaround.patch b/package/python/0014-Serial-ioctl-workaround.patch new file mode 100644 index 00000000..468d535a --- /dev/null +++ b/package/python/0014-Serial-ioctl-workaround.patch @@ -0,0 +1,33 @@ +From 22e5a4c5d29ddf0856d7f68f5a613aec00e26168 Mon Sep 17 00:00:00 2001 +From: Baruch Siach +Date: Tue, 7 Mar 2017 22:25:36 +0100 +Subject: [PATCH] Serial ioctl() workaround + +The ioctls.h of some architectures (notably xtensa) references structs from +linux/serial.h. Make sure to include this header as well. + +Also, undef TIOCTTYGSTRUCT that require reference to internal kernel tty_struct, +but isn't actually referenced in modern kernels. + +Signed-off-by: Baruch Siach +--- + Modules/termios.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/Modules/termios.c b/Modules/termios.c +index 57f30dc..a8c9855 100644 +--- a/Modules/termios.c ++++ b/Modules/termios.c +@@ -16,7 +16,9 @@ + * so this needs to be included first on that platform. */ + #include + #endif ++#include + #include ++#undef TIOCTTYGSTRUCT + + /* HP-UX requires that this be included to pick up MDCD, MCTS, MDSR, + * MDTR, MRI, and MRTS (appearantly used internally by some things +-- +2.7.4 + diff --git a/package/python/0015-Do-not-adjust-the-shebang-of-Python-scripts-for-cros.patch b/package/python/0015-Do-not-adjust-the-shebang-of-Python-scripts-for-cros.patch new file mode 100644 index 00000000..fecf29f4 --- /dev/null +++ b/package/python/0015-Do-not-adjust-the-shebang-of-Python-scripts-for-cros.patch @@ -0,0 +1,35 @@ +From 70049366ddf1fc9084bb02cf4459380976cdf8f7 Mon Sep 17 00:00:00 2001 +From: Christophe Vu-Brugier +Date: Tue, 7 Mar 2017 22:26:09 +0100 +Subject: [PATCH] Do not adjust the shebang of Python scripts for + cross-compilation + +The copy_scripts() method in distutils copies the scripts listed in +the setup file and adjusts the first line to refer to the current +Python interpreter. When cross-compiling, this means that the adjusted +shebang refers to the host Python interpreter. + +This patch modifies copy_scripts() to preserve the shebang when +cross-compilation is detected. + +Signed-off-by: Christophe Vu-Brugier +--- + Lib/distutils/command/build_scripts.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Lib/distutils/command/build_scripts.py b/Lib/distutils/command/build_scripts.py +index 567df65..4922d50 100644 +--- a/Lib/distutils/command/build_scripts.py ++++ b/Lib/distutils/command/build_scripts.py +@@ -89,7 +89,7 @@ class build_scripts (Command): + adjust = 1 + post_interp = match.group(1) or '' + +- if adjust: ++ if adjust and not '_python_sysroot' in os.environ: + log.info("copying and adjusting %s -> %s", script, + self.build_dir) + if not self.dry_run: +-- +2.7.4 + diff --git a/package/python/0016-Add-an-option-to-disable-installation-of-test-module.patch b/package/python/0016-Add-an-option-to-disable-installation-of-test-module.patch new file mode 100644 index 00000000..600fc40b --- /dev/null +++ b/package/python/0016-Add-an-option-to-disable-installation-of-test-module.patch @@ -0,0 +1,105 @@ +From 2c1810fb002128a6d33cc3a391a157e316479d15 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:27:16 +0100 +Subject: [PATCH] Add an option to disable installation of test modules + +The Python standard distribution comes with many test modules, that +are not necessarly useful on embedded targets. + +Signed-off-by: Thomas Petazzoni +Signed-off-by: Samuel Martin +[Bernd: rebased against version 2.7.14] +Signed-off-by: Bernd Kuhls +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + Makefile.pre.in | 50 +++++++++++++++++++++++++++++++++----------------- + configure.ac | 6 ++++++ + 2 files changed, 39 insertions(+), 17 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 37b2ff3a5f..2a5e8adc61 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1048,28 +1048,44 @@ PLATMACDIRS= plat-mac plat-mac/Carbon plat-mac/lib-scriptpackages \ + plat-mac/lib-scriptpackages/SystemEvents \ + plat-mac/lib-scriptpackages/Terminal + PLATMACPATH=:plat-mac:plat-mac/lib-scriptpackages +-LIBSUBDIRS= lib-tk lib-tk/test lib-tk/test/test_tkinter \ +- lib-tk/test/test_ttk site-packages test test/audiodata test/capath \ +- test/data test/cjkencodings test/decimaltestdata test/xmltestdata \ +- test/imghdrdata \ +- test/subprocessdata \ +- test/support \ +- test/tracedmodules \ ++LIBSUBDIRS= lib-tk site-packages \ + encodings compiler hotshot \ +- email email/mime email/test email/test/data \ ++ email email/mime \ + ensurepip ensurepip/_bundled \ +- json json/tests \ +- sqlite3 sqlite3/test \ +- logging bsddb bsddb/test csv importlib wsgiref \ +- lib2to3 lib2to3/fixes lib2to3/pgen2 lib2to3/tests \ +- lib2to3/tests/data lib2to3/tests/data/fixers lib2to3/tests/data/fixers/myfixes \ +- ctypes ctypes/test ctypes/macholib \ +- idlelib idlelib/Icons idlelib/idle_test \ +- distutils distutils/command distutils/tests $(XMLLIBSUBDIRS) \ ++ json \ ++ sqlite3 \ ++ logging bsddb csv importlib wsgiref \ ++ lib2to3 lib2to3/fixes lib2to3/pgen2 \ ++ ctypes ctypes/macholib \ ++ idlelib idlelib/Icons \ ++ distutils distutils/command $(XMLLIBSUBDIRS) \ + multiprocessing multiprocessing/dummy \ +- unittest unittest/test \ ++ unittest \ + lib-old \ + curses pydoc_data $(MACHDEPS) ++ ++TESTSUBDIRS = lib-tk/test lib-tk/test/test_tkinter \ ++ lib-tk/test/test_ttk test test/audiodata test/capath test/data \ ++ test/cjkencodings test/decimaltestdata test/xmltestdata \ ++ test/imghdrdata \ ++ test/subprocessdata \ ++ test/support \ ++ test/tracedmodules \ ++ email/test email/test/data \ ++ json/tests \ ++ sqlite3/test \ ++ bsddb/test \ ++ lib2to3/tests \ ++ lib2to3/tests/data lib2to3/tests/data/fixers lib2to3/tests/data/fixers/myfixes \ ++ ctypes/test \ ++ idlelib/idle_test \ ++ distutils/tests \ ++ unittest/test ++ ++ifeq (@TEST_MODULES@,yes) ++LIBSUBDIRS += $(TESTSUBDIRS) ++endif ++ + libinstall: build_all $(srcdir)/Lib/$(PLATDIR) $(srcdir)/Modules/xxmodule.c + @for i in $(SCRIPTDIR) $(LIBDEST); \ + do \ +diff --git a/configure.ac b/configure.ac +index 3f28ef1371..f257a25620 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2835,6 +2835,12 @@ if test "$posix_threads" = "yes"; then + fi + + ++AC_SUBST(TEST_MODULES) ++ ++AC_ARG_ENABLE(test-modules, ++ AS_HELP_STRING([--disable-test-modules], [disable test modules]), ++ [ TEST_MODULES="${enableval}" ], [ TEST_MODULES=yes ]) ++ + # Check for enable-ipv6 + AH_TEMPLATE(ENABLE_IPV6, [Define if --enable-ipv6 is specified]) + AC_MSG_CHECKING([if --enable-ipv6 is specified]) +-- +2.11.0 + diff --git a/package/python/0017-Add-an-option-to-disable-pydoc.patch b/package/python/0017-Add-an-option-to-disable-pydoc.patch new file mode 100644 index 00000000..48c1b570 --- /dev/null +++ b/package/python/0017-Add-an-option-to-disable-pydoc.patch @@ -0,0 +1,89 @@ +From f98c3f981643411449aba6f93178b2ca14f9a68c Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:27:34 +0100 +Subject: [PATCH] Add an option to disable pydoc + +It removes 0.5 MB of data from the target plus the pydoc script +itself. + +Signed-off-by: Thomas Petazzoni +Signed-off-by: Samuel Martin +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + Makefile.pre.in | 6 +++++- + configure.ac | 5 +++++ + setup.py | 10 +++++++--- + 3 files changed, 17 insertions(+), 4 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 2a5e8adc61..d3ba1aeb4e 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1062,7 +1062,7 @@ LIBSUBDIRS= lib-tk site-packages \ + multiprocessing multiprocessing/dummy \ + unittest \ + lib-old \ +- curses pydoc_data $(MACHDEPS) ++ curses $(MACHDEPS) + + TESTSUBDIRS = lib-tk/test lib-tk/test/test_tkinter \ + lib-tk/test/test_ttk test test/audiodata test/capath test/data \ +@@ -1086,6 +1086,10 @@ ifeq (@TEST_MODULES@,yes) + LIBSUBDIRS += $(TESTSUBDIRS) + endif + ++ifeq (@PYDOC@,yes) ++LIBSUBDIRS += pydoc_data ++endif ++ + libinstall: build_all $(srcdir)/Lib/$(PLATDIR) $(srcdir)/Modules/xxmodule.c + @for i in $(SCRIPTDIR) $(LIBDEST); \ + do \ +diff --git a/configure.ac b/configure.ac +index f257a25620..2ed4119478 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2834,6 +2834,11 @@ if test "$posix_threads" = "yes"; then + AC_CHECK_FUNCS(pthread_atfork) + fi + ++AC_SUBST(PYDOC) ++ ++AC_ARG_ENABLE(pydoc, ++ AS_HELP_STRING([--disable-pydoc], [disable pydoc]), ++ [ PYDOC="${enableval}" ], [ PYDOC=yes ]) + + AC_SUBST(TEST_MODULES) + +diff --git a/setup.py b/setup.py +index 2ef5b07189..49f810f72e 100644 +--- a/setup.py ++++ b/setup.py +@@ -2277,6 +2277,12 @@ def main(): + # turn off warnings when deprecated modules are imported + import warnings + warnings.filterwarnings("ignore",category=DeprecationWarning) ++ ++ scripts = ['Tools/scripts/idle', 'Tools/scripts/2to3', ++ 'Lib/smtpd.py'] ++ if not '--disable-pydoc' in sysconfig.get_config_var("CONFIG_ARGS"): ++ scripts += [ 'Tools/scripts/pydoc' ] ++ + setup(# PyPI Metadata (PEP 301) + name = "Python", + version = sys.version.split()[0], +@@ -2297,9 +2303,7 @@ def main(): + ext_modules=[Extension('_struct', ['_struct.c'])], + + # Scripts to install +- scripts = ['Tools/scripts/pydoc', 'Tools/scripts/idle', +- 'Tools/scripts/2to3', +- 'Lib/smtpd.py'] ++ scripts = scripts, + ) + + # --install-platlib +-- +2.11.0 + diff --git a/package/python/0018-Add-an-option-to-disable-lib2to3.patch b/package/python/0018-Add-an-option-to-disable-lib2to3.patch new file mode 100644 index 00000000..2c539fac --- /dev/null +++ b/package/python/0018-Add-an-option-to-disable-lib2to3.patch @@ -0,0 +1,92 @@ +From d7f419246681e12f05e2eefc79286959c6aa18ab Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:27:49 +0100 +Subject: [PATCH] Add an option to disable lib2to3 + +lib2to3 is a library to convert Python 2.x code to Python 3.x. As +such, it is probably not very useful on embedded system targets. + +Signed-off-by: Thomas Petazzoni +Signed-off-by: Samuel Martin +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + Makefile.pre.in | 11 ++++++++--- + configure.ac | 6 ++++++ + setup.py | 5 +++-- + 3 files changed, 17 insertions(+), 5 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index d3ba1aeb4e..0e15b6d6f4 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1055,7 +1055,6 @@ LIBSUBDIRS= lib-tk site-packages \ + json \ + sqlite3 \ + logging bsddb csv importlib wsgiref \ +- lib2to3 lib2to3/fixes lib2to3/pgen2 \ + ctypes ctypes/macholib \ + idlelib idlelib/Icons \ + distutils distutils/command $(XMLLIBSUBDIRS) \ +@@ -1075,8 +1074,6 @@ TESTSUBDIRS = lib-tk/test lib-tk/test/test_tkinter \ + json/tests \ + sqlite3/test \ + bsddb/test \ +- lib2to3/tests \ +- lib2to3/tests/data lib2to3/tests/data/fixers lib2to3/tests/data/fixers/myfixes \ + ctypes/test \ + idlelib/idle_test \ + distutils/tests \ +@@ -1090,6 +1087,14 @@ ifeq (@PYDOC@,yes) + LIBSUBDIRS += pydoc_data + endif + ++ifeq (@LIB2TO3@,yes) ++LIBSUBDIRS += lib2to3 lib2to3/fixes lib2to3/pgen2 ++TESTSUBDIRS += lib2to3/tests \ ++ lib2to3/tests/data \ ++ lib2to3/tests/data/fixers \ ++ lib2to3/tests/data/fixers/myfixes ++endif ++ + libinstall: build_all $(srcdir)/Lib/$(PLATDIR) $(srcdir)/Modules/xxmodule.c + @for i in $(SCRIPTDIR) $(LIBDEST); \ + do \ +diff --git a/configure.ac b/configure.ac +index 2ed4119478..a2810ab8ed 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2846,6 +2846,12 @@ AC_ARG_ENABLE(test-modules, + AS_HELP_STRING([--disable-test-modules], [disable test modules]), + [ TEST_MODULES="${enableval}" ], [ TEST_MODULES=yes ]) + ++AC_SUBST(LIB2TO3) ++ ++AC_ARG_ENABLE(lib2to3, ++ AS_HELP_STRING([--disable-lib2to3], [disable lib2to3]), ++ [ LIB2TO3="${enableval}" ], [ LIB2TO3=yes ]) ++ + # Check for enable-ipv6 + AH_TEMPLATE(ENABLE_IPV6, [Define if --enable-ipv6 is specified]) + AC_MSG_CHECKING([if --enable-ipv6 is specified]) +diff --git a/setup.py b/setup.py +index 49f810f72e..9130819454 100644 +--- a/setup.py ++++ b/setup.py +@@ -2278,10 +2278,11 @@ def main(): + import warnings + warnings.filterwarnings("ignore",category=DeprecationWarning) + +- scripts = ['Tools/scripts/idle', 'Tools/scripts/2to3', +- 'Lib/smtpd.py'] ++ scripts = ['Tools/scripts/idle', 'Lib/smtpd.py'] + if not '--disable-pydoc' in sysconfig.get_config_var("CONFIG_ARGS"): + scripts += [ 'Tools/scripts/pydoc' ] ++ if not '--disable-lib2to3' in sysconfig.get_config_var("CONFIG_ARGS"): ++ scripts += [ 'Tools/scripts/2to3' ] + + setup(# PyPI Metadata (PEP 301) + name = "Python", +-- +2.11.0 + diff --git a/package/python/0019-Add-option-to-disable-the-sqlite3-module.patch b/package/python/0019-Add-option-to-disable-the-sqlite3-module.patch new file mode 100644 index 00000000..433bb297 --- /dev/null +++ b/package/python/0019-Add-option-to-disable-the-sqlite3-module.patch @@ -0,0 +1,69 @@ +From 123ecc50932e3ad3f7a2d90d430b74822c9695d4 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:28:06 +0100 +Subject: [PATCH] Add option to disable the sqlite3 module + +Signed-off-by: Thomas Petazzoni +Signed-off-by: Samuel Martin +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + Makefile.pre.in | 7 +++++-- + configure.ac | 9 +++++++++ + 2 files changed, 14 insertions(+), 2 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 0e15b6d6f4..a2e5ac6d41 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1053,7 +1053,6 @@ LIBSUBDIRS= lib-tk site-packages \ + email email/mime \ + ensurepip ensurepip/_bundled \ + json \ +- sqlite3 \ + logging bsddb csv importlib wsgiref \ + ctypes ctypes/macholib \ + idlelib idlelib/Icons \ +@@ -1072,7 +1071,6 @@ TESTSUBDIRS = lib-tk/test lib-tk/test/test_tkinter \ + test/tracedmodules \ + email/test email/test/data \ + json/tests \ +- sqlite3/test \ + bsddb/test \ + ctypes/test \ + idlelib/idle_test \ +@@ -1095,6 +1093,11 @@ TESTSUBDIRS += lib2to3/tests \ + lib2to3/tests/data/fixers/myfixes + endif + ++ifeq (@SQLITE3@,yes) ++LIBSUBDIRS += sqlite3 ++TESTSUBDIRS += sqlite3/test ++endif ++ + libinstall: build_all $(srcdir)/Lib/$(PLATDIR) $(srcdir)/Modules/xxmodule.c + @for i in $(SCRIPTDIR) $(LIBDEST); \ + do \ +diff --git a/configure.ac b/configure.ac +index a2810ab8ed..4ee3c60501 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2834,6 +2834,15 @@ if test "$posix_threads" = "yes"; then + AC_CHECK_FUNCS(pthread_atfork) + fi + ++AC_SUBST(SQLITE3) ++AC_ARG_ENABLE(sqlite3, ++ AS_HELP_STRING([--disable-sqlite3], [disable sqlite3]), ++ [ SQLITE3="${enableval}" ], [ SQLITE3=yes ]) ++ ++if test "$SQLITE3" = "no" ; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _sqlite3" ++fi ++ + AC_SUBST(PYDOC) + + AC_ARG_ENABLE(pydoc, +-- +2.11.0 + diff --git a/package/python/0020-Add-an-option-to-disable-the-tk-module.patch b/package/python/0020-Add-an-option-to-disable-the-tk-module.patch new file mode 100644 index 00000000..26ae1799 --- /dev/null +++ b/package/python/0020-Add-an-option-to-disable-the-tk-module.patch @@ -0,0 +1,73 @@ +From f0dc1198360c6875ed846a961e85dc41e239aa29 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:28:57 +0100 +Subject: [PATCH] Add an option to disable the tk module + +Signed-off-by: Thomas Petazzoni +Signed-off-by: Samuel Martin +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + Makefile.pre.in | 11 ++++++++--- + configure.ac | 9 +++++++++ + 2 files changed, 17 insertions(+), 3 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index a2e5ac6d41..37ed70ab1d 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1048,7 +1048,7 @@ PLATMACDIRS= plat-mac plat-mac/Carbon plat-mac/lib-scriptpackages \ + plat-mac/lib-scriptpackages/SystemEvents \ + plat-mac/lib-scriptpackages/Terminal + PLATMACPATH=:plat-mac:plat-mac/lib-scriptpackages +-LIBSUBDIRS= lib-tk site-packages \ ++LIBSUBDIRS= site-packages \ + encodings compiler hotshot \ + email email/mime \ + ensurepip ensurepip/_bundled \ +@@ -1062,8 +1062,7 @@ LIBSUBDIRS= lib-tk site-packages \ + lib-old \ + curses $(MACHDEPS) + +-TESTSUBDIRS = lib-tk/test lib-tk/test/test_tkinter \ +- lib-tk/test/test_ttk test test/audiodata test/capath test/data \ ++TESTSUBDIRS = test test/audiodata test/capath test/data \ + test/cjkencodings test/decimaltestdata test/xmltestdata \ + test/imghdrdata \ + test/subprocessdata \ +@@ -1098,6 +1097,12 @@ LIBSUBDIRS += sqlite3 + TESTSUBDIRS += sqlite3/test + endif + ++ifeq (@TK@,yes) ++LIBSUBDIRS += lib-tk ++TESTSUBDIRS += lib-tk/test lib-tk/test/test_tkinter \ ++ lib-tk/test/test_ttk ++endif ++ + libinstall: build_all $(srcdir)/Lib/$(PLATDIR) $(srcdir)/Modules/xxmodule.c + @for i in $(SCRIPTDIR) $(LIBDEST); \ + do \ +diff --git a/configure.ac b/configure.ac +index 4ee3c60501..2c20f826c5 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2843,6 +2843,15 @@ if test "$SQLITE3" = "no" ; then + DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _sqlite3" + fi + ++AC_SUBST(TK) ++AC_ARG_ENABLE(tk, ++ AS_HELP_STRING([--disable-tk], [disable tk]), ++ [ TK="${enableval}" ], [ TK=yes ]) ++ ++if test "$TK" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _tkinter" ++fi ++ + AC_SUBST(PYDOC) + + AC_ARG_ENABLE(pydoc, +-- +2.11.0 + diff --git a/package/python/0021-Add-an-option-to-disable-the-curses-module.patch b/package/python/0021-Add-an-option-to-disable-the-curses-module.patch new file mode 100644 index 00000000..3b1ab7fb --- /dev/null +++ b/package/python/0021-Add-an-option-to-disable-the-curses-module.patch @@ -0,0 +1,61 @@ +From 3e51eef24c51b986c37b354f3de98218eb76909c Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:29:06 +0100 +Subject: [PATCH] Add an option to disable the curses module + +Signed-off-by: Thomas Petazzoni +Signed-off-by: Samuel Martin +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + Makefile.pre.in | 6 +++++- + configure.ac | 9 +++++++++ + 2 files changed, 14 insertions(+), 1 deletion(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 37ed70ab1d..458f4ad55b 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1060,7 +1060,7 @@ LIBSUBDIRS= site-packages \ + multiprocessing multiprocessing/dummy \ + unittest \ + lib-old \ +- curses $(MACHDEPS) ++ $(MACHDEPS) + + TESTSUBDIRS = test test/audiodata test/capath test/data \ + test/cjkencodings test/decimaltestdata test/xmltestdata \ +@@ -1103,6 +1103,10 @@ TESTSUBDIRS += lib-tk/test lib-tk/test/test_tkinter \ + lib-tk/test/test_ttk + endif + ++ifeq (@CURSES@,yes) ++LIBSUBDIRS += curses ++endif ++ + libinstall: build_all $(srcdir)/Lib/$(PLATDIR) $(srcdir)/Modules/xxmodule.c + @for i in $(SCRIPTDIR) $(LIBDEST); \ + do \ +diff --git a/configure.ac b/configure.ac +index 2c20f826c5..a7ebcd091e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2852,6 +2852,15 @@ if test "$TK" = "no"; then + DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _tkinter" + fi + ++AC_SUBST(CURSES) ++AC_ARG_ENABLE(curses, ++ AS_HELP_STRING([--disable-curses], [disable curses]), ++ [ CURSES="${enableval}" ], [ CURSES=yes ]) ++ ++if test "$CURSES" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _curses _curses_panel" ++fi ++ + AC_SUBST(PYDOC) + + AC_ARG_ENABLE(pydoc, +-- +2.11.0 + diff --git a/package/python/0022-Add-an-option-to-disable-expat.patch b/package/python/0022-Add-an-option-to-disable-expat.patch new file mode 100644 index 00000000..2ebe7eab --- /dev/null +++ b/package/python/0022-Add-an-option-to-disable-expat.patch @@ -0,0 +1,92 @@ +From 548413a659cc5320560d6b794fe8edd06dd1d22e Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:29:20 +0100 +Subject: [PATCH] Add an option to disable expat + +This patch replaces the existing --with-system-expat option with a +--with-expat={system,builtin,none} option, which allows to tell Python +whether we want to use the system expat (already installed), the expat +builtin the Python sources, or no expat at all (which disables the +installation of XML modules). + +Signed-off-by: Thomas Petazzoni +Signed-off-by: Samuel Martin +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + Makefile.pre.in | 6 +++++- + configure.ac | 18 +++++++++++++----- + setup.py | 2 +- + 3 files changed, 19 insertions(+), 7 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 458f4ad55b..8dee345539 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1056,7 +1056,7 @@ LIBSUBDIRS= site-packages \ + logging bsddb csv importlib wsgiref \ + ctypes ctypes/macholib \ + idlelib idlelib/Icons \ +- distutils distutils/command $(XMLLIBSUBDIRS) \ ++ distutils distutils/command \ + multiprocessing multiprocessing/dummy \ + unittest \ + lib-old \ +@@ -1107,6 +1107,10 @@ ifeq (@CURSES@,yes) + LIBSUBDIRS += curses + endif + ++ifeq (@EXPAT@,yes) ++LIBSUBDIRS += $(XMLLIBSUBDIRS) ++endif ++ + libinstall: build_all $(srcdir)/Lib/$(PLATDIR) $(srcdir)/Modules/xxmodule.c + @for i in $(SCRIPTDIR) $(LIBDEST); \ + do \ +diff --git a/configure.ac b/configure.ac +index a7ebcd091e..2f5759a890 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2499,13 +2499,21 @@ PKG_PROG_PKG_CONFIG + AC_SUBST(DISABLED_EXTENSIONS) + + # Check for use of the system expat library +-AC_MSG_CHECKING(for --with-system-expat) +-AC_ARG_WITH(system_expat, +- AS_HELP_STRING([--with-system-expat], [build pyexpat module using an installed expat library]), ++AC_MSG_CHECKING(for --with-expat) ++AC_ARG_WITH(expat, ++ AS_HELP_STRING([--with-expat], [select which expat version to use: system, builtin, none]), + [], +- [with_system_expat="no"]) ++ [with_expat="builtin"]) + +-AC_MSG_RESULT($with_system_expat) ++AC_MSG_RESULT($with_expat) ++ ++if test "$with_expat" != "none"; then ++ EXPAT=yes ++else ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} pyexpat" ++ EXPAT=no ++fi ++AC_SUBST(EXPAT) + + # Check for use of the system libffi library + AC_MSG_CHECKING(for --with-system-ffi) +diff --git a/setup.py b/setup.py +index 9130819454..f439cbadc2 100644 +--- a/setup.py ++++ b/setup.py +@@ -1475,7 +1475,7 @@ class PyBuildExt(build_ext): + # + # More information on Expat can be found at www.libexpat.org. + # +- if '--with-system-expat' in sysconfig.get_config_var("CONFIG_ARGS"): ++ if '--with-expat=system' in sysconfig.get_config_var("CONFIG_ARGS"): + expat_inc = [] + define_macros = [] + expat_lib = ['expat'] +-- +2.11.0 + diff --git a/package/python/0023-Add-an-option-to-disable-CJK-codecs.patch b/package/python/0023-Add-an-option-to-disable-CJK-codecs.patch new file mode 100644 index 00000000..3ee77fec --- /dev/null +++ b/package/python/0023-Add-an-option-to-disable-CJK-codecs.patch @@ -0,0 +1,32 @@ +From 6761066addfb6028e183d7fe4322b283af18117f Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:29:31 +0100 +Subject: [PATCH] Add an option to disable CJK codecs + +Signed-off-by: Thomas Petazzoni +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + configure.ac | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 2f5759a890..862c8ae516 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2851,6 +2851,12 @@ if test "$SQLITE3" = "no" ; then + DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _sqlite3" + fi + ++AC_ARG_ENABLE(codecs-cjk, ++ AS_HELP_STRING([--disable-codecs-cjk], [disable CJK codecs]), ++ [ if test "$enableval" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _codecs_kr _codecs_jp _codecs_cn _codecs_tw _codecs_hk" ++ fi]) ++ + AC_SUBST(TK) + AC_ARG_ENABLE(tk, + AS_HELP_STRING([--disable-tk], [disable tk]), +-- +2.11.0 + diff --git a/package/python/0024-Add-an-option-to-disable-NIS.patch b/package/python/0024-Add-an-option-to-disable-NIS.patch new file mode 100644 index 00000000..bad4ba68 --- /dev/null +++ b/package/python/0024-Add-an-option-to-disable-NIS.patch @@ -0,0 +1,35 @@ +From ecd8e926bd364d866f492df87d7c46d029445480 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:29:41 +0100 +Subject: [PATCH] Add an option to disable NIS + +NIS is not necessarily available in uClibc, so we need an option to +not compile support for it. + +Signed-off-by: Thomas Petazzoni +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + configure.ac | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 862c8ae516..354212fb16 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2857,6 +2857,12 @@ AC_ARG_ENABLE(codecs-cjk, + DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _codecs_kr _codecs_jp _codecs_cn _codecs_tw _codecs_hk" + fi]) + ++AC_ARG_ENABLE(nis, ++ AS_HELP_STRING([--disable-nis], [disable NIS]), ++ [ if test "$enableval" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} nis" ++ fi]) ++ + AC_SUBST(TK) + AC_ARG_ENABLE(tk, + AS_HELP_STRING([--disable-tk], [disable tk]), +-- +2.11.0 + diff --git a/package/python/0025-Add-an-option-to-disable-unicodedata.patch b/package/python/0025-Add-an-option-to-disable-unicodedata.patch new file mode 100644 index 00000000..687ea502 --- /dev/null +++ b/package/python/0025-Add-an-option-to-disable-unicodedata.patch @@ -0,0 +1,32 @@ +From dc99b7a0331fe75d70ccb87dc0877ac5bbba51ca Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:29:52 +0100 +Subject: [PATCH] Add an option to disable unicodedata + +Signed-off-by: Thomas Petazzoni +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + configure.ac | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 354212fb16..4e430d82b8 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2863,6 +2863,12 @@ AC_ARG_ENABLE(nis, + DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} nis" + fi]) + ++AC_ARG_ENABLE(unicodedata, ++ AS_HELP_STRING([--disable-unicodedata], [disable unicodedata]), ++ [ if test "$enableval" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} unicodedata" ++ fi]) ++ + AC_SUBST(TK) + AC_ARG_ENABLE(tk, + AS_HELP_STRING([--disable-tk], [disable tk]), +-- +2.11.0 + diff --git a/package/python/0026-Add-an-option-to-disable-bsddb.patch b/package/python/0026-Add-an-option-to-disable-bsddb.patch new file mode 100644 index 00000000..f216e8bb --- /dev/null +++ b/package/python/0026-Add-an-option-to-disable-bsddb.patch @@ -0,0 +1,87 @@ +From a4bbbf0c5f1f68298d5f4e2c2cd80de7e758763c Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:30:06 +0100 +Subject: [PATCH] Add an option to disable bsddb + +bsddb has an external dependency on Berkeley DB. Since we want to be +able to build Python without it, this patch adds an option to disable +the build/installation of this Python module. + +Signed-off-by: Thomas Petazzoni +Signed-off-by: Samuel Martin +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + Makefile.pre.in | 8 ++++++-- + configure.ac | 22 ++++++++++++++++++++++ + 2 files changed, 28 insertions(+), 2 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 8dee345539..a0473096c1 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1053,7 +1053,7 @@ LIBSUBDIRS= site-packages \ + email email/mime \ + ensurepip ensurepip/_bundled \ + json \ +- logging bsddb csv importlib wsgiref \ ++ logging csv importlib wsgiref \ + ctypes ctypes/macholib \ + idlelib idlelib/Icons \ + distutils distutils/command \ +@@ -1070,7 +1070,6 @@ TESTSUBDIRS = test test/audiodata test/capath test/data \ + test/tracedmodules \ + email/test email/test/data \ + json/tests \ +- bsddb/test \ + ctypes/test \ + idlelib/idle_test \ + distutils/tests \ +@@ -1111,6 +1110,11 @@ ifeq (@EXPAT@,yes) + LIBSUBDIRS += $(XMLLIBSUBDIRS) + endif + ++ifeq (@BSDDB@,yes) ++LIBSUBDIRS += bsddb ++TESTSUBDIRS += bsddb/test ++endif ++ + libinstall: build_all $(srcdir)/Lib/$(PLATDIR) $(srcdir)/Modules/xxmodule.c + @for i in $(SCRIPTDIR) $(LIBDEST); \ + do \ +diff --git a/configure.ac b/configure.ac +index 4e430d82b8..361e8c120e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2863,6 +2863,28 @@ AC_ARG_ENABLE(nis, + DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} nis" + fi]) + ++AC_ARG_ENABLE(dbm, ++ AS_HELP_STRING([--disable-dbm], [disable DBM]), ++ [ if test "$enableval" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} dbm" ++ fi]) ++ ++AC_ARG_ENABLE(gdbm, ++ AS_HELP_STRING([--disable-gdbm], [disable GDBM]), ++ [ if test "$enableval" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} gdbm" ++ fi]) ++ ++AC_SUBST(BSDDB) ++AC_ARG_ENABLE(bsddb, ++ AS_HELP_STRING([--disable-bsddb], [disable BerkeyleyDB]), ++ [ if test "$enableval" = "no"; then ++ BSDDB=no ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _bsddb" ++ else ++ BSDDB=yes ++ fi], [ BSDDB=yes ]) ++ + AC_ARG_ENABLE(unicodedata, + AS_HELP_STRING([--disable-unicodedata], [disable unicodedata]), + [ if test "$enableval" = "no"; then +-- +2.11.0 + diff --git a/package/python/0027-Add-an-option-to-disable-the-ssl-module.patch b/package/python/0027-Add-an-option-to-disable-the-ssl-module.patch new file mode 100644 index 00000000..d62408e4 --- /dev/null +++ b/package/python/0027-Add-an-option-to-disable-the-ssl-module.patch @@ -0,0 +1,32 @@ +From a0e56b96c3bfb04a5c8ecc0987cdd294d8ce116b Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:30:22 +0100 +Subject: [PATCH] Add an option to disable the ssl module + +Signed-off-by: Thomas Petazzoni +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + configure.ac | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 361e8c120e..8fe47d8c37 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2863,6 +2863,12 @@ AC_ARG_ENABLE(nis, + DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} nis" + fi]) + ++AC_ARG_ENABLE(ssl, ++ AS_HELP_STRING([--disable-ssl], [disable SSL]), ++ [ if test "$enableval" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _ssl" ++ fi]) ++ + AC_ARG_ENABLE(dbm, + AS_HELP_STRING([--disable-dbm], [disable DBM]), + [ if test "$enableval" = "no"; then +-- +2.11.0 + diff --git a/package/python/0028-Add-an-option-to-disable-the-bz2-module.patch b/package/python/0028-Add-an-option-to-disable-the-bz2-module.patch new file mode 100644 index 00000000..5b89e8ef --- /dev/null +++ b/package/python/0028-Add-an-option-to-disable-the-bz2-module.patch @@ -0,0 +1,32 @@ +From d1236c6f4d8d893709fa36f751af47b8ad9055c1 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:30:33 +0100 +Subject: [PATCH] Add an option to disable the bz2 module + +Signed-off-by: Thomas Petazzoni +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + configure.ac | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 8fe47d8c37..85df7b1478 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2869,6 +2869,12 @@ AC_ARG_ENABLE(ssl, + DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _ssl" + fi]) + ++AC_ARG_ENABLE(bz2, ++ AS_HELP_STRING([--disable-bz2], [disable BZIP2]), ++ [ if test "$enableval" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} bz2" ++ fi]) ++ + AC_ARG_ENABLE(dbm, + AS_HELP_STRING([--disable-dbm], [disable DBM]), + [ if test "$enableval" = "no"; then +-- +2.11.0 + diff --git a/package/python/0029-Add-an-option-to-disable-the-zlib-module.patch b/package/python/0029-Add-an-option-to-disable-the-zlib-module.patch new file mode 100644 index 00000000..95da586e --- /dev/null +++ b/package/python/0029-Add-an-option-to-disable-the-zlib-module.patch @@ -0,0 +1,32 @@ +From a9c7314e069036f74b503dfaef261e5f45477b7e Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:30:45 +0100 +Subject: [PATCH] Add an option to disable the zlib module + +Signed-off-by: Thomas Petazzoni +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + configure.ac | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 85df7b1478..3848b16b9f 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2875,6 +2875,12 @@ AC_ARG_ENABLE(bz2, + DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} bz2" + fi]) + ++AC_ARG_ENABLE(zlib, ++ AS_HELP_STRING([--disable-zlib], [disable ZLIB]), ++ [ if test "$enableval" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} zlib" ++ fi]) ++ + AC_ARG_ENABLE(dbm, + AS_HELP_STRING([--disable-dbm], [disable DBM]), + [ if test "$enableval" = "no"; then +-- +2.11.0 + diff --git a/package/python/0030-Do-not-install-the-idle-editor.patch b/package/python/0030-Do-not-install-the-idle-editor.patch new file mode 100644 index 00000000..e101e6a1 --- /dev/null +++ b/package/python/0030-Do-not-install-the-idle-editor.patch @@ -0,0 +1,55 @@ +From e789487c783f75c17a8951bd5324c86ceefde407 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:30:56 +0100 +Subject: [PATCH] Do not install the idle editor + +IDLE is the Python IDE built with the tkinter GUI toolkit. Since it's +highly unlikely to ever be useful in an embedded Linux system +generated by Buildroot, this patch simply disables the installation of +idle and the related Python modules. It saves 800 KB-900 KB of +installed .pyc files. + +Signed-off-by: Thomas Petazzoni +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + Makefile.pre.in | 2 -- + setup.py | 2 +- + 2 files changed, 1 insertion(+), 3 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index a0473096c1..750057fb96 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1055,7 +1055,6 @@ LIBSUBDIRS= site-packages \ + json \ + logging csv importlib wsgiref \ + ctypes ctypes/macholib \ +- idlelib idlelib/Icons \ + distutils distutils/command \ + multiprocessing multiprocessing/dummy \ + unittest \ +@@ -1071,7 +1070,6 @@ TESTSUBDIRS = test test/audiodata test/capath test/data \ + email/test email/test/data \ + json/tests \ + ctypes/test \ +- idlelib/idle_test \ + distutils/tests \ + unittest/test + +diff --git a/setup.py b/setup.py +index f439cbadc2..227187681e 100644 +--- a/setup.py ++++ b/setup.py +@@ -2278,7 +2278,7 @@ def main(): + import warnings + warnings.filterwarnings("ignore",category=DeprecationWarning) + +- scripts = ['Tools/scripts/idle', 'Lib/smtpd.py'] ++ scripts = ['Lib/smtpd.py'] + if not '--disable-pydoc' in sysconfig.get_config_var("CONFIG_ARGS"): + scripts += [ 'Tools/scripts/pydoc' ] + if not '--disable-lib2to3' in sysconfig.get_config_var("CONFIG_ARGS"): +-- +2.11.0 + diff --git a/package/python/0031-Add-an-option-to-disable-the-ossaudiodev-module.patch b/package/python/0031-Add-an-option-to-disable-the-ossaudiodev-module.patch new file mode 100644 index 00000000..9768faf6 --- /dev/null +++ b/package/python/0031-Add-an-option-to-disable-the-ossaudiodev-module.patch @@ -0,0 +1,32 @@ +From 4ab280b8a7626de2565cf4ef6cf08a5c7326574b Mon Sep 17 00:00:00 2001 +From: Zoltan Gyarmati +Date: Tue, 7 Mar 2017 22:31:22 +0100 +Subject: [PATCH] Add an option to disable the ossaudiodev module + +Signed-off-by: Zoltan Gyarmati +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + configure.ac | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 3848b16b9f..6d19cdee95 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2927,6 +2927,12 @@ if test "$CURSES" = "no"; then + DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _curses _curses_panel" + fi + ++AC_ARG_ENABLE(ossaudiodev, ++ AS_HELP_STRING([--disable-ossaudiodev], [disable OSSAUDIODEV]), ++ [ if test "$enableval" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} ossaudiodev" ++ fi]) ++ + AC_SUBST(PYDOC) + + AC_ARG_ENABLE(pydoc, +-- +2.11.0 + diff --git a/package/python/0032-Add-option-to-disable-the-hashlib-module.patch b/package/python/0032-Add-option-to-disable-the-hashlib-module.patch new file mode 100644 index 00000000..82ef3a13 --- /dev/null +++ b/package/python/0032-Add-option-to-disable-the-hashlib-module.patch @@ -0,0 +1,32 @@ +From 479bef8182c4f6b678a86820ccc06760ca60c286 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:33:02 +0100 +Subject: [PATCH] Add option to disable the hashlib module + +Signed-off-by: Thomas Petazzoni +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + configure.ac | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 6d19cdee95..ddccc79c2c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2869,6 +2869,12 @@ AC_ARG_ENABLE(ssl, + DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _ssl" + fi]) + ++AC_ARG_ENABLE(hashlib, ++ AS_HELP_STRING([--disable-hashlib], [disable hashlib]), ++ [ if test "$enableval" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _hashlib" ++ fi]) ++ + AC_ARG_ENABLE(bz2, + AS_HELP_STRING([--disable-bz2], [disable BZIP2]), + [ if test "$enableval" = "no"; then +-- +2.11.0 + diff --git a/package/python/0033-Add-an-option-to-disable-readline-module.patch b/package/python/0033-Add-an-option-to-disable-readline-module.patch new file mode 100644 index 00000000..02b13151 --- /dev/null +++ b/package/python/0033-Add-an-option-to-disable-readline-module.patch @@ -0,0 +1,32 @@ +From abea92958b073dfbf0c78bcb31ce9cfc709c20ca Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 22:33:55 +0100 +Subject: [PATCH] Add an option to disable readline module + +Signed-off-by: Thomas Petazzoni +[Peter: update for 2.7.16] +Signed-off-by: Peter Korsgaard +--- + configure.ac | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/configure.ac b/configure.ac +index ddccc79c2c..dae266326e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2875,6 +2875,12 @@ AC_ARG_ENABLE(hashlib, + DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _hashlib" + fi]) + ++AC_ARG_ENABLE(readline, ++ AS_HELP_STRING([--disable-readline], [disable readline]), ++ [ if test "$enableval" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} readline" ++ fi]) ++ + AC_ARG_ENABLE(bz2, + AS_HELP_STRING([--disable-bz2], [disable BZIP2]), + [ if test "$enableval" = "no"; then +-- +2.11.0 + diff --git a/package/python/0034-Override-system-locale-and-set-to-default-when-addin.patch b/package/python/0034-Override-system-locale-and-set-to-default-when-addin.patch new file mode 100644 index 00000000..8fe722bc --- /dev/null +++ b/package/python/0034-Override-system-locale-and-set-to-default-when-addin.patch @@ -0,0 +1,37 @@ +From d2bfa8805206db8c57c182094396d20a9d94bd8f Mon Sep 17 00:00:00 2001 +From: Samuel Cabrero +Date: Sat, 1 Apr 2017 09:31:52 +0200 +Subject: [PATCH] Override system locale and set to default when adding gcc + paths + +Forces the use of the default locale in the function +add_gcc_paths, which is called when cross compiling to add the +include and library paths. This is necessary because otherwise +the gcc output is localized and the output parsing fails, which +results in no paths added and detect_modules not able to find +any system library (eg. libz, libssl, etc.) + +[Thomas: patch taken from https://bugs.python.org/issue23767.] + +Signed-off-by: Samuel Cabrero +Signed-off-by: Thomas Petazzoni +--- + setup.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/setup.py b/setup.py +index 8045a9b..c14f4ab 100644 +--- a/setup.py ++++ b/setup.py +@@ -430,7 +430,7 @@ class PyBuildExt(build_ext): + tmpfile = os.path.join(self.build_temp, 'gccpaths') + if not os.path.exists(self.build_temp): + os.makedirs(self.build_temp) +- ret = os.system('%s -E -v - %s 1>/dev/null' % (gcc, tmpfile)) ++ ret = os.system('LC_ALL=C %s -E -v - %s 1>/dev/null' % (gcc, tmpfile)) + is_gcc = False + in_incdirs = False + inc_dirs = [] +-- +2.7.4 + diff --git a/package/python/Config.in b/package/python/Config.in new file mode 100644 index 00000000..ab6950ca --- /dev/null +++ b/package/python/Config.in @@ -0,0 +1,139 @@ +comment "python needs a toolchain w/ wchar, threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS + +config BR2_PACKAGE_PYTHON + bool "python2.7 (deprecated)" + depends on BR2_USE_WCHAR + # uses fork() + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_THREADS # libffi + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_LIBFFI + help + The python language interpreter. + + http://www.python.org/ + +if BR2_PACKAGE_PYTHON + +choice + prompt "python module format to install" + default BR2_PACKAGE_PYTHON_PYC_ONLY + help + Select Python module format to install on target (py, pyc or + both) + +config BR2_PACKAGE_PYTHON_PY_ONLY + bool ".py sources only" + +config BR2_PACKAGE_PYTHON_PYC_ONLY + bool ".pyc compiled sources only" + +config BR2_PACKAGE_PYTHON_PY_PYC + bool ".py sources and .pyc compiled" + +endchoice + +menu "core python modules" + +comment "The following modules are unusual or require extra libraries" + +config BR2_PACKAGE_PYTHON_2TO3 + bool "2to3 module" + help + code translation from python 2 to 3 + +config BR2_PACKAGE_PYTHON_BZIP2 + bool "bzip2 module" + select BR2_PACKAGE_BZIP2 + help + bzip2 module for Python + +config BR2_PACKAGE_PYTHON_BSDDB + bool "bsddb module" + select BR2_PACKAGE_BERKELEYDB + help + bsddb module for Python. + +config BR2_PACKAGE_PYTHON_CODECSCJK + bool "codecscjk module" + help + Chinese/Japanese/Korean codecs module for Python (large). + +config BR2_PACKAGE_PYTHON_CURSES + bool "curses module" + select BR2_PACKAGE_NCURSES + help + curses module for Python. + +config BR2_PACKAGE_PYTHON_OSSAUDIODEV + bool "ossaudiodev module" + help + ossaudiodev module for Python. + +config BR2_PACKAGE_PYTHON_READLINE + bool "readline" + select BR2_PACKAGE_READLINE + help + readline module for Python (required for command-line + editing in the Python shell). + +config BR2_PACKAGE_PYTHON_SSL + bool "ssl" + select BR2_PACKAGE_OPENSSL + help + _ssl module for Python (required for https in urllib etc). + +config BR2_PACKAGE_PYTHON_UNICODEDATA + bool "unicodedata module" + default y + help + Unicode character database (used by stringprep module) + (large). + +if BR2_PACKAGE_PYTHON_UNICODEDATA + +choice + prompt "Python unicode database format" + default BR2_PACKAGE_PYTHON_UCS2 + help + Select Python unicode database format for target + +config BR2_PACKAGE_PYTHON_UCS2 + bool "Universal Character Set 2-byte (UCS2)" + +config BR2_PACKAGE_PYTHON_UCS4 + bool "Universal Character Set 4-byte (UCS4)" + +endchoice + +endif + +config BR2_PACKAGE_PYTHON_SQLITE + bool "sqlite module" + select BR2_PACKAGE_SQLITE + help + SQLite database support + +config BR2_PACKAGE_PYTHON_PYEXPAT + bool "xml module" + select BR2_PACKAGE_EXPAT + help + pyexpat and xml libraries for Python + +config BR2_PACKAGE_PYTHON_ZLIB + bool "zlib module" + select BR2_PACKAGE_ZLIB + help + zlib support in Python + +config BR2_PACKAGE_PYTHON_HASHLIB + bool "hashlib module" + select BR2_PACKAGE_OPENSSL + help + hashlib support in Python + +endmenu + +endif diff --git a/package/python/Config.in.host b/package/python/Config.in.host new file mode 100644 index 00000000..724e5e22 --- /dev/null +++ b/package/python/Config.in.host @@ -0,0 +1,16 @@ +config BR2_PACKAGE_HOST_PYTHON + bool "host python" + help + The python language interpreter. Host package. + + http://www.python.org/ + +if BR2_PACKAGE_HOST_PYTHON + +config BR2_PACKAGE_HOST_PYTHON_SSL + bool "ssl" + select BR2_PACKAGE_HOST_OPENSSL + help + _ssl module for host Python. + +endif diff --git a/package/python/python.hash b/package/python/python.hash new file mode 100644 index 00000000..f5e51d96 --- /dev/null +++ b/package/python/python.hash @@ -0,0 +1,5 @@ +# From https://www.python.org/downloads/release/python-2718/ +md5 fd6cc8ec0a78c44036f825e739f36e5a Python-2.7.18.tar.xz +# Locally calculated +sha256 b62c0e7937551d0cc02b8fd5cb0f544f9405bafc9a54d3808ed4594812edef43 Python-2.7.18.tar.xz +sha256 de4d1f2d2ad5ad0cfd1657a106476b31cb5db5ef9d1ff842b237c0c81f0c8a23 LICENSE diff --git a/package/python/python.mk b/package/python/python.mk new file mode 100644 index 00000000..ae99f382 --- /dev/null +++ b/package/python/python.mk @@ -0,0 +1,302 @@ +################################################################################ +# +# python +# +################################################################################ + +PYTHON_VERSION_MAJOR = 2.7 +PYTHON_VERSION = $(PYTHON_VERSION_MAJOR).18 +PYTHON_SOURCE = Python-$(PYTHON_VERSION).tar.xz +PYTHON_SITE = https://python.org/ftp/python/$(PYTHON_VERSION) +PYTHON_LICENSE = Python-2.0, others +PYTHON_LICENSE_FILES = LICENSE +PYTHON_CPE_ID_VENDOR = python +PYTHON_LIBTOOL_PATCH = NO + +# Python needs itself to be built, so in order to cross-compile +# Python, we need to build a host Python first. This host Python is +# also installed in $(HOST_DIR), as it is needed when cross-compiling +# third-party Python modules. + +HOST_PYTHON_CONF_OPTS += \ + --enable-static \ + --without-cxx-main \ + --disable-sqlite3 \ + --disable-tk \ + --with-expat=system \ + --with-system-ffi \ + --disable-curses \ + --disable-codecs-cjk \ + --disable-nis \ + --enable-unicodedata \ + --disable-dbm \ + --disable-gdbm \ + --disable-bsddb \ + --disable-test-modules \ + --disable-bz2 \ + --disable-ossaudiodev \ + --disable-pyo-build + +# Make sure that LD_LIBRARY_PATH overrides -rpath. +# This is needed because libpython may be installed at the same time that +# python is called. +# Make python believe we don't have 'hg' and 'svn', so that it doesn't +# try to communicate over the network during the build. +HOST_PYTHON_CONF_ENV += \ + LDFLAGS="$(HOST_LDFLAGS) -Wl,--enable-new-dtags" \ + ac_cv_prog_HAS_HG=/bin/false \ + ac_cv_prog_SVNVERSION=/bin/false + +# Building host python in parallel sometimes triggers a "Bus error" +# during the execution of "./python setup.py build" in the +# installation step. It is probably due to the installation of a +# shared library taking place in parallel to the execution of +# ./python, causing spurious Bus error. Building host-python with +# MAKE1 has shown to workaround the problem. +HOST_PYTHON_MAKE = $(MAKE1) + +PYTHON_DEPENDENCIES = host-python libffi $(TARGET_NLS_DEPENDENCIES) + +HOST_PYTHON_DEPENDENCIES = host-expat host-libffi host-zlib + +ifeq ($(BR2_PACKAGE_HOST_PYTHON_SSL),y) +HOST_PYTHON_DEPENDENCIES += host-openssl +else +HOST_PYTHON_CONF_OPTS += --disable-ssl +endif + +PYTHON_INSTALL_STAGING = YES + +ifeq ($(BR2_PACKAGE_PYTHON_READLINE),y) +PYTHON_DEPENDENCIES += readline +else +PYTHON_CONF_OPTS += --disable-readline +endif + +ifeq ($(BR2_PACKAGE_PYTHON_CURSES),y) +PYTHON_DEPENDENCIES += ncurses +else +PYTHON_CONF_OPTS += --disable-curses +endif + +ifeq ($(BR2_PACKAGE_PYTHON_PYEXPAT),y) +PYTHON_DEPENDENCIES += expat +PYTHON_CONF_OPTS += --with-expat=system +else +PYTHON_CONF_OPTS += --with-expat=none +endif + +ifeq ($(BR2_PACKAGE_PYTHON_BSDDB),y) +PYTHON_DEPENDENCIES += berkeleydb +else +PYTHON_CONF_OPTS += --disable-bsddb +endif + +ifeq ($(BR2_PACKAGE_PYTHON_SQLITE),y) +PYTHON_DEPENDENCIES += sqlite +else +PYTHON_CONF_OPTS += --disable-sqlite3 +endif + +ifeq ($(BR2_PACKAGE_PYTHON_SSL),y) +PYTHON_DEPENDENCIES += openssl +else +PYTHON_CONF_OPTS += --disable-ssl +endif + +ifneq ($(BR2_PACKAGE_PYTHON_CODECSCJK),y) +PYTHON_CONF_OPTS += --disable-codecs-cjk +endif + +ifneq ($(BR2_PACKAGE_PYTHON_UNICODEDATA),y) +PYTHON_CONF_OPTS += --disable-unicodedata +endif + +# Default is UCS2 w/o a conf opt +ifeq ($(BR2_PACKAGE_PYTHON_UCS4),y) +# host-python must have the same UCS2/4 configuration as the target +# python +HOST_PYTHON_CONF_OPTS += --enable-unicode=ucs4 +PYTHON_CONF_OPTS += --enable-unicode=ucs4 +endif + +ifeq ($(BR2_PACKAGE_PYTHON_2TO3),y) +PYTHON_CONF_OPTS += --enable-lib2to3 +else +PYTHON_CONF_OPTS += --disable-lib2to3 +endif + +ifeq ($(BR2_PACKAGE_PYTHON_BZIP2),y) +PYTHON_DEPENDENCIES += bzip2 +else +PYTHON_CONF_OPTS += --disable-bz2 +endif + +ifeq ($(BR2_PACKAGE_PYTHON_ZLIB),y) +PYTHON_DEPENDENCIES += zlib +else +PYTHON_CONF_OPTS += --disable-zlib +endif + +ifeq ($(BR2_PACKAGE_PYTHON_HASHLIB),y) +PYTHON_DEPENDENCIES += openssl +else +PYTHON_CONF_OPTS += --disable-hashlib +endif + +ifeq ($(BR2_PACKAGE_PYTHON_OSSAUDIODEV),y) +PYTHON_CONF_OPTS += --enable-ossaudiodev +else +PYTHON_CONF_OPTS += --disable-ossaudiodev +endif + +# Make python believe we don't have 'hg' and 'svn', so that it doesn't +# try to communicate over the network during the build. +PYTHON_CONF_ENV += \ + ac_cv_have_long_long_format=yes \ + ac_cv_file__dev_ptmx=yes \ + ac_cv_file__dev_ptc=yes \ + ac_cv_working_tzset=yes \ + ac_cv_prog_HAS_HG=/bin/false \ + ac_cv_prog_SVNVERSION=/bin/false + +# GCC is always compliant with IEEE754 +ifeq ($(BR2_ENDIAN),"LITTLE") +PYTHON_CONF_ENV += ac_cv_little_endian_double=yes +else +PYTHON_CONF_ENV += ac_cv_big_endian_double=yes +endif + +PYTHON_CONF_OPTS += \ + --without-cxx-main \ + --without-doc-strings \ + --with-system-ffi \ + --disable-pydoc \ + --disable-test-modules \ + --disable-gdbm \ + --disable-tk \ + --disable-nis \ + --disable-dbm \ + --disable-pyo-build \ + --disable-pyc-build + +# This is needed to make sure the Python build process doesn't try to +# regenerate those files with the pgen program. Otherwise, it builds +# pgen for the target, and tries to run it on the host. + +define PYTHON_TOUCH_GRAMMAR_FILES + touch $(@D)/Include/graminit.h $(@D)/Python/graminit.c +endef + +PYTHON_POST_PATCH_HOOKS += PYTHON_TOUCH_GRAMMAR_FILES + +# +# Remove useless files. In the config/ directory, only the Makefile +# and the pyconfig.h files are needed at runtime. +# +# idle & smtpd.py have bad shebangs and are mostly samples +# +define PYTHON_REMOVE_USELESS_FILES + rm -f $(TARGET_DIR)/usr/bin/python$(PYTHON_VERSION_MAJOR)-config + rm -f $(TARGET_DIR)/usr/bin/python2-config + rm -f $(TARGET_DIR)/usr/bin/python-config + rm -f $(TARGET_DIR)/usr/bin/smtpd.py + rm -f $(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/distutils/command/wininst*.exe + for i in `find $(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/config/ \ + -type f -not -name pyconfig.h -a -not -name Makefile` ; do \ + rm -f $$i ; \ + done +endef + +PYTHON_POST_INSTALL_TARGET_HOOKS += PYTHON_REMOVE_USELESS_FILES + +# +# Make sure libpython gets stripped out on target +# +define PYTHON_ENSURE_LIBPYTHON_STRIPPED + chmod u+w $(TARGET_DIR)/usr/lib/libpython$(PYTHON_VERSION_MAJOR)*.so +endef + +PYTHON_POST_INSTALL_TARGET_HOOKS += PYTHON_ENSURE_LIBPYTHON_STRIPPED + +# Always install the python symlink in the target tree +define PYTHON_INSTALL_TARGET_PYTHON_SYMLINK + ln -sf python2 $(TARGET_DIR)/usr/bin/python +endef + +PYTHON_POST_INSTALL_TARGET_HOOKS += PYTHON_INSTALL_TARGET_PYTHON_SYMLINK + +# Always install the python-config symlink in the staging tree +define PYTHON_INSTALL_STAGING_PYTHON_CONFIG_SYMLINK + ln -sf python2-config $(STAGING_DIR)/usr/bin/python-config +endef + +PYTHON_POST_INSTALL_STAGING_HOOKS += PYTHON_INSTALL_STAGING_PYTHON_CONFIG_SYMLINK + +PYTHON_AUTORECONF = YES + +# Some packages may have build scripts requiring python2. +# Only install the python symlink in the host tree if python3 is not enabled +# for the target, otherwise the default python program may be missing. +ifneq ($(BR2_PACKAGE_PYTHON3),y) +define HOST_PYTHON_INSTALL_PYTHON_SYMLINK + ln -sf python2 $(HOST_DIR)/bin/python + ln -sf python2-config $(HOST_DIR)/bin/python-config +endef + +HOST_PYTHON_POST_INSTALL_HOOKS += HOST_PYTHON_INSTALL_PYTHON_SYMLINK +endif + +# Provided to other packages +PYTHON_PATH = $(STAGING_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/sysconfigdata/ + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) + +ifeq ($(BR2_REPRODUCIBLE),y) +define PYTHON_FIX_TIME + find $(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR) -name '*.py' -print0 | \ + xargs -0 --no-run-if-empty touch -d @$(SOURCE_DATE_EPOCH) +endef +endif + +define PYTHON_CREATE_PYC_FILES + $(PYTHON_FIX_TIME) + PYTHONPATH="$(PYTHON_PATH)" \ + $(HOST_DIR)/bin/python$(PYTHON_VERSION_MAJOR) \ + $(TOPDIR)/support/scripts/pycompile.py \ + $(if $(VERBOSE),--verbose) \ + --strip-root $(TARGET_DIR) \ + $(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR) +endef + +ifeq ($(BR2_PACKAGE_PYTHON_PYC_ONLY)$(BR2_PACKAGE_PYTHON_PY_PYC),y) +PYTHON_TARGET_FINALIZE_HOOKS += PYTHON_CREATE_PYC_FILES +endif + +ifeq ($(BR2_PACKAGE_PYTHON_PYC_ONLY),y) +define PYTHON_REMOVE_PY_FILES + find $(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR) -name '*.py' \ + $(if $(strip $(KEEP_PYTHON_PY_FILES)),-not \( $(call finddirclauses,$(TARGET_DIR),$(KEEP_PYTHON_PY_FILES)) \) ) \ + -print0 | \ + xargs -0 --no-run-if-empty rm -f +endef +PYTHON_TARGET_FINALIZE_HOOKS += PYTHON_REMOVE_PY_FILES +endif + +# Normally, *.pyc files should not have been compiled, but just in +# case, we make sure we remove all of them. +ifeq ($(BR2_PACKAGE_PYTHON_PY_ONLY),y) +define PYTHON_REMOVE_PYC_FILES + find $(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR) -name '*.pyc' -print0 | \ + xargs -0 --no-run-if-empty rm -f +endef +PYTHON_TARGET_FINALIZE_HOOKS += PYTHON_REMOVE_PYC_FILES +endif + +# In all cases, we don't want to keep the optimized .pyo files +define PYTHON_REMOVE_PYO_FILES + find $(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR) -name '*.pyo' -print0 | \ + xargs -0 --no-run-if-empty rm -f +endef +PYTHON_TARGET_FINALIZE_HOOKS += PYTHON_REMOVE_PYO_FILES diff --git a/package/python3-cheetah/python3-cheetah.hash b/package/python3-cheetah/python3-cheetah.hash new file mode 120000 index 00000000..c29a76ea --- /dev/null +++ b/package/python3-cheetah/python3-cheetah.hash @@ -0,0 +1 @@ +../python-cheetah/python-cheetah.hash \ No newline at end of file diff --git a/package/python3-cheetah/python3-cheetah.mk b/package/python3-cheetah/python3-cheetah.mk new file mode 100644 index 00000000..8876f8d7 --- /dev/null +++ b/package/python3-cheetah/python3-cheetah.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# python3-cheetah +# +################################################################################ + +# Please keep in sync with +# package/python-cheetah/python-cheetah.mk +PYTHON3_CHEETAH_VERSION = 3.2.4 +PYTHON3_CHEETAH_SOURCE = Cheetah3-$(PYTHON3_CHEETAH_VERSION).tar.gz +PYTHON3_CHEETAH_SITE = https://files.pythonhosted.org/packages/4e/72/e6a7d92279e3551db1b68fd336fd7a6e3d2f2ec742bf486486e6150d77d2 +PYTHON3_CHEETAH_LICENSE = MIT +PYTHON3_CHEETAH_LICENSE_FILES = LICENSE +PYTHON3_CHEETAH_SETUP_TYPE = setuptools +HOST_PYTHON3_CHEETAH_DL_SUBDIR = python-cheetah +HOST_PYTHON3_CHEETAH_NEEDS_HOST_PYTHON = python3 + +$(eval $(host-python-package)) diff --git a/package/python3-cython/python3-cython.hash b/package/python3-cython/python3-cython.hash new file mode 120000 index 00000000..70dde641 --- /dev/null +++ b/package/python3-cython/python3-cython.hash @@ -0,0 +1 @@ +../python-cython/python-cython.hash \ No newline at end of file diff --git a/package/python3-cython/python3-cython.mk b/package/python3-cython/python3-cython.mk new file mode 100644 index 00000000..6e3bd142 --- /dev/null +++ b/package/python3-cython/python3-cython.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python3-cython +# +################################################################################ + +# Please keep in sync with package/python-cython/python-cython.mk +PYTHON3_CYTHON_VERSION = 0.29.21 +PYTHON3_CYTHON_SOURCE = Cython-$(PYTHON3_CYTHON_VERSION).tar.gz +PYTHON3_CYTHON_SITE = https://files.pythonhosted.org/packages/6c/9f/f501ba9d178aeb1f5bf7da1ad5619b207c90ac235d9859961c11829d0160 +PYTHON3_CYTHON_SETUP_TYPE = setuptools +PYTHON3_CYTHON_LICENSE = Apache-2.0 +PYTHON3_CYTHON_LICENSE_FILES = COPYING.txt LICENSE.txt +HOST_PYTHON3_CYTHON_NEEDS_HOST_PYTHON = python3 + +$(eval $(host-python-package)) diff --git a/package/python3-decorator/python3-decorator.hash b/package/python3-decorator/python3-decorator.hash new file mode 120000 index 00000000..f515d313 --- /dev/null +++ b/package/python3-decorator/python3-decorator.hash @@ -0,0 +1 @@ +../python-decorator/python-decorator.hash \ No newline at end of file diff --git a/package/python3-decorator/python3-decorator.mk b/package/python3-decorator/python3-decorator.mk new file mode 100644 index 00000000..ed6d86fe --- /dev/null +++ b/package/python3-decorator/python3-decorator.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# python3-decorator +# +################################################################################ + +# Please keep in sync with package/python-decorator/python-decorator.mk +PYTHON3_DECORATOR_VERSION = 4.4.1 +PYTHON3_DECORATOR_SITE = https://files.pythonhosted.org/packages/dc/c3/9d378af09f5737cfd524b844cd2fbb0d2263a35c11d712043daab290144d +PYTHON3_DECORATOR_SOURCE = decorator-$(PYTHON3_DECORATOR_VERSION).tar.gz +PYTHON3_DECORATOR_LICENSE = BSD-2-Clause +PYTHON3_DECORATOR_LICENSE_FILES = LICENSE.txt +PYTHON3_DECORATOR_CPE_ID_VENDOR = python +PYTHON3_DECORATOR_CPE_ID_PRODUCT = decorator +PYTHON3_DECORATOR_SETUP_TYPE = setuptools +HOST_PYTHON3_DECORATOR_NEEDS_HOST_PYTHON = python3 + +$(eval $(host-python-package)) diff --git a/package/python3-jinja2/python3-jinja2.hash b/package/python3-jinja2/python3-jinja2.hash new file mode 120000 index 00000000..543e981a --- /dev/null +++ b/package/python3-jinja2/python3-jinja2.hash @@ -0,0 +1 @@ +../python-jinja2/python-jinja2.hash \ No newline at end of file diff --git a/package/python3-jinja2/python3-jinja2.mk b/package/python3-jinja2/python3-jinja2.mk new file mode 100644 index 00000000..5d29e1d8 --- /dev/null +++ b/package/python3-jinja2/python3-jinja2.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# python3-jinja2 +# +################################################################################ + +PYTHON3_JINJA2_VERSION = 2.11.3 +PYTHON3_JINJA2_SOURCE = Jinja2-$(PYTHON3_JINJA2_VERSION).tar.gz +PYTHON3_JINJA2_SITE = https://files.pythonhosted.org/packages/4f/e7/65300e6b32e69768ded990494809106f87da1d436418d5f1367ed3966fd7 +PYTHON3_JINJA2_SETUP_TYPE = setuptools +PYTHON3_JINJA2_LICENSE = BSD-3-Clause +PYTHON3_JINJA2_LICENSE_FILES = LICENSE.rst +PYTHON3_JINJA2_CPE_ID_VENDOR = pocoo +PYTHON3_JINJA2_CPE_ID_PRODUCT = jinja2 + +HOST_PYTHON3_JINJA2_NEEDS_HOST_PYTHON = python3 +# In host build, setup.py tries to download markupsafe if it is not installed +HOST_PYTHON3_JINJA2_DEPENDENCIES = host-python3-markupsafe + +$(eval $(host-python-package)) diff --git a/package/python3-mako/python3-mako.hash b/package/python3-mako/python3-mako.hash new file mode 120000 index 00000000..068be91f --- /dev/null +++ b/package/python3-mako/python3-mako.hash @@ -0,0 +1 @@ +../python-mako/python-mako.hash \ No newline at end of file diff --git a/package/python3-mako/python3-mako.mk b/package/python3-mako/python3-mako.mk new file mode 100644 index 00000000..fd6b2ed4 --- /dev/null +++ b/package/python3-mako/python3-mako.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# python3-mako +# +################################################################################ + +# Please keep in sync with +# package/python-mako/python-mako.mk +PYTHON3_MAKO_VERSION = 1.1.3 +PYTHON3_MAKO_SOURCE = Mako-$(PYTHON3_MAKO_VERSION).tar.gz +PYTHON3_MAKO_SITE = https://files.pythonhosted.org/packages/42/64/fc7c506d14d8b6ed363e7798ffec2dfe4ba21e14dda4cfab99f4430cba3a +PYTHON3_MAKO_SETUP_TYPE = setuptools +PYTHON3_MAKO_LICENSE = MIT +PYTHON3_MAKO_LICENSE_FILES = LICENSE +HOST_PYTHON3_MAKO_DL_SUBDIR = python-mako +HOST_PYTHON3_MAKO_NEEDS_HOST_PYTHON = python3 + +$(eval $(host-python-package)) diff --git a/package/python3-markupsafe/python3-markupsafe.hash b/package/python3-markupsafe/python3-markupsafe.hash new file mode 120000 index 00000000..947cfa12 --- /dev/null +++ b/package/python3-markupsafe/python3-markupsafe.hash @@ -0,0 +1 @@ +../python-markupsafe/python-markupsafe.hash \ No newline at end of file diff --git a/package/python3-markupsafe/python3-markupsafe.mk b/package/python3-markupsafe/python3-markupsafe.mk new file mode 100644 index 00000000..58f6e67b --- /dev/null +++ b/package/python3-markupsafe/python3-markupsafe.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python3-markupsafe +# +################################################################################ + +PYTHON3_MARKUPSAFE_VERSION = 1.1.1 +PYTHON3_MARKUPSAFE_SOURCE = MarkupSafe-$(PYTHON3_MARKUPSAFE_VERSION).tar.gz +PYTHON3_MARKUPSAFE_SITE = https://files.pythonhosted.org/packages/b9/2e/64db92e53b86efccfaea71321f597fa2e1b2bd3853d8ce658568f7a13094 +PYTHON3_MARKUPSAFE_SETUP_TYPE = setuptools +PYTHON3_MARKUPSAFE_LICENSE = BSD-3-Clause +PYTHON3_MARKUPSAFE_LICENSE_FILES = LICENSE.rst + +HOST_PYTHON3_MARKUPSAFE_NEEDS_HOST_PYTHON = python3 + +$(eval $(host-python-package)) diff --git a/package/python3-ply/python3-ply.hash b/package/python3-ply/python3-ply.hash new file mode 120000 index 00000000..5e07165c --- /dev/null +++ b/package/python3-ply/python3-ply.hash @@ -0,0 +1 @@ +../python-ply/python-ply.hash \ No newline at end of file diff --git a/package/python3-ply/python3-ply.mk b/package/python3-ply/python3-ply.mk new file mode 100644 index 00000000..15f66a49 --- /dev/null +++ b/package/python3-ply/python3-ply.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python3-ply +# +################################################################################ + +PYTHON3_PLY_VERSION = 3.11 +PYTHON3_PLY_SOURCE = ply-$(PYTHON3_PLY_VERSION).tar.gz +PYTHON3_PLY_SITE = https://files.pythonhosted.org/packages/e5/69/882ee5c9d017149285cab114ebeab373308ef0f874fcdac9beb90e0ac4da +PYTHON3_PLY_SETUP_TYPE = setuptools +PYTHON3_PLY_LICENSE = BSD-3-Clause +PYTHON3_PLY_LICENSE_FILES = README.md + +HOST_PYTHON3_PLY_NEEDS_HOST_PYTHON = python3 + +$(eval $(host-python-package)) diff --git a/package/python3-psutil/python3-psutil.hash b/package/python3-psutil/python3-psutil.hash new file mode 120000 index 00000000..ff688fab --- /dev/null +++ b/package/python3-psutil/python3-psutil.hash @@ -0,0 +1 @@ +../python-psutil/python-psutil.hash \ No newline at end of file diff --git a/package/python3-psutil/python3-psutil.mk b/package/python3-psutil/python3-psutil.mk new file mode 100644 index 00000000..029e1b1c --- /dev/null +++ b/package/python3-psutil/python3-psutil.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# python3-psutil +# +################################################################################ + +# Please keep in sync with package/python-psutil/python-psutil.mk +PYTHON3_PSUTIL_VERSION = 5.7.2 +PYTHON3_PSUTIL_SOURCE = psutil-$(PYTHON3_PSUTIL_VERSION).tar.gz +PYTHON3_PSUTIL_SITE = https://files.pythonhosted.org/packages/aa/3e/d18f2c04cf2b528e18515999b0c8e698c136db78f62df34eee89cee205f1 +PYTHON3_PSUTIL_SETUP_TYPE = setuptools +PYTHON3_PSUTIL_LICENSE = BSD-3-Clause +PYTHON3_PSUTIL_LICENSE_FILES = LICENSE +PYTHON3_PSUTIL_CPE_ID_VENDOR = psutil_project +PYTHON3_PSUTIL_CPE_ID_PRODUCT = psutil +HOST_PYTHON3_PSUTIL_DL_SUBDIR = python-psutil +HOST_PYTHON3_PSUTIL_NEEDS_HOST_PYTHON = python3 + +$(eval $(host-python-package)) diff --git a/package/python3-pycryptodomex/python3-pycryptodomex.hash b/package/python3-pycryptodomex/python3-pycryptodomex.hash new file mode 120000 index 00000000..0c6761d8 --- /dev/null +++ b/package/python3-pycryptodomex/python3-pycryptodomex.hash @@ -0,0 +1 @@ +../python-pycryptodomex/python-pycryptodomex.hash \ No newline at end of file diff --git a/package/python3-pycryptodomex/python3-pycryptodomex.mk b/package/python3-pycryptodomex/python3-pycryptodomex.mk new file mode 100644 index 00000000..bd7602c9 --- /dev/null +++ b/package/python3-pycryptodomex/python3-pycryptodomex.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# python3-pycryptodomex +# +################################################################################ + +# Please keep in sync with package/python-pycryptodomex/python-pycryptodomex.mk +PYTHON3_PYCRYPTODOMEX_VERSION = 3.9.9 +PYTHON3_PYCRYPTODOMEX_SOURCE = pycryptodomex-$(PYTHON3_PYCRYPTODOMEX_VERSION).tar.gz +PYTHON3_PYCRYPTODOMEX_SITE = https://files.pythonhosted.org/packages/14/90/f4a934bffae029e16fb33f3bd87014a0a18b4bec591249c4fc01a18d3ab6 +PYTHON3_PYCRYPTODOMEX_SETUP_TYPE = setuptools +PYTHON3_PYCRYPTODOMEX_LICENSE = \ + BSD-2-Clause, \ + Public Domain (pycrypto original code), \ + OCB patent license (OCB mode) +PYTHON3_PYCRYPTODOMEX_LICENSE_FILES = LICENSE.rst Doc/LEGAL/COPYRIGHT.pycrypto +HOST_PYTHON3_PYCRYPTODOMEX_DL_SUBDIR = python-pycryptodomex +HOST_PYTHON3_PYCRYPTODOMEX_NEEDS_HOST_PYTHON = python3 + +$(eval $(host-python-package)) diff --git a/package/python3-pyelftools/python3-pyelftools.hash b/package/python3-pyelftools/python3-pyelftools.hash new file mode 120000 index 00000000..e8eebeda --- /dev/null +++ b/package/python3-pyelftools/python3-pyelftools.hash @@ -0,0 +1 @@ +../python-pyelftools/python-pyelftools.hash \ No newline at end of file diff --git a/package/python3-pyelftools/python3-pyelftools.mk b/package/python3-pyelftools/python3-pyelftools.mk new file mode 100644 index 00000000..be49ca2b --- /dev/null +++ b/package/python3-pyelftools/python3-pyelftools.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# python3-pyelftools +# +################################################################################ + +# Please keep in sync with package/python-pyelftools/python-pyelftools.mk +PYTHON3_PYELFTOOLS_VERSION = 0.25 +PYTHON3_PYELFTOOLS_SOURCE = pyelftools-$(PYTHON3_PYELFTOOLS_VERSION).tar.gz +PYTHON3_PYELFTOOLS_SITE = https://files.pythonhosted.org/packages/fa/9a/0674cb1725196568bdbca98304f2efb17368b57af1a4bb3fc772c026f474 +PYTHON3_PYELFTOOLS_LICENSE = Public domain +PYTHON3_PYELFTOOLS_LICENSE_FILES = LICENSE +PYTHON3_PYELFTOOLS_SETUP_TYPE = setuptools +HOST_PYTHON3_PYELFTOOLS_DL_SUBDIR = python-pyelftools +HOST_PYTHON3_PYELFTOOLS_NEEDS_HOST_PYTHON = python3 + +$(eval $(host-python-package)) diff --git a/package/python3-pyyaml/python3-pyyaml.hash b/package/python3-pyyaml/python3-pyyaml.hash new file mode 120000 index 00000000..afa4932e --- /dev/null +++ b/package/python3-pyyaml/python3-pyyaml.hash @@ -0,0 +1 @@ +../python-pyyaml/python-pyyaml.hash \ No newline at end of file diff --git a/package/python3-pyyaml/python3-pyyaml.mk b/package/python3-pyyaml/python3-pyyaml.mk new file mode 100644 index 00000000..f7583415 --- /dev/null +++ b/package/python3-pyyaml/python3-pyyaml.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# python3-pyyaml +# +################################################################################ + +# Please keep in sync with package/python-pyyaml/python-pyyaml.mk +PYTHON3_PYYAML_VERSION = 5.4.1 +PYTHON3_PYYAML_SOURCE = PyYAML-$(PYTHON3_PYYAML_VERSION).tar.gz +PYTHON3_PYYAML_SITE = https://files.pythonhosted.org/packages/a0/a4/d63f2d7597e1a4b55aa3b4d6c5b029991d3b824b5bd331af8d4ab1ed687d +PYTHON3_PYYAML_SETUP_TYPE = setuptools +PYTHON3_PYYAML_LICENSE = MIT +PYTHON3_PYYAML_LICENSE_FILES = LICENSE +PYTHON3_PYYAML_CPE_ID_VENDOR = pyyaml +PYTHON3_PYYAML_CPE_ID_PRODUCT = pyyaml +HOST_PYTHON3_PYYAML_DL_SUBDIR = python-pyyaml +HOST_PYTHON3_PYYAML_NEEDS_HOST_PYTHON = python3 +HOST_PYTHON3_PYYAML_DEPENDENCIES = host-libyaml + +$(eval $(host-python-package)) diff --git a/package/python3-regex/python3-regex.hash b/package/python3-regex/python3-regex.hash new file mode 120000 index 00000000..274f4dc2 --- /dev/null +++ b/package/python3-regex/python3-regex.hash @@ -0,0 +1 @@ +../python-regex/python-regex.hash \ No newline at end of file diff --git a/package/python3-regex/python3-regex.mk b/package/python3-regex/python3-regex.mk new file mode 100644 index 00000000..f75fb76a --- /dev/null +++ b/package/python3-regex/python3-regex.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# python3-regex +# +################################################################################ + +# Please keep in sync with package/python-regex/python-regex.mk +PYTHON3_REGEX_VERSION = 2020.2.20 +PYTHON3_REGEX_SOURCE = regex-$(PYTHON3_REGEX_VERSION).tar.gz +PYTHON3_REGEX_SITE = https://files.pythonhosted.org/packages/e8/76/8ac7f467617b9cfbafcef3c76df6f22b15de654a62bea719792b00a83195 +PYTHON3_REGEX_SETUP_TYPE = setuptools +PYTHON3_REGEX_LICENSE = CNRI-Python +HOST_PYTHON3_REGEX_DL_SUBDIR = python-regex +HOST_PYTHON3_REGEX_NEEDS_HOST_PYTHON = python3 + +$(eval $(host-python-package)) diff --git a/package/python3-requests/python3-requests.hash b/package/python3-requests/python3-requests.hash new file mode 120000 index 00000000..19e182d4 --- /dev/null +++ b/package/python3-requests/python3-requests.hash @@ -0,0 +1 @@ +../python-requests/python-requests.hash \ No newline at end of file diff --git a/package/python3-requests/python3-requests.mk b/package/python3-requests/python3-requests.mk new file mode 100644 index 00000000..dbb3f214 --- /dev/null +++ b/package/python3-requests/python3-requests.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# python3-requests +# +################################################################################ + +# Please keep in sync with package/python-requests/python-requests.mk +PYTHON3_REQUESTS_VERSION = 2.25.1 +PYTHON3_REQUESTS_SOURCE = requests-$(PYTHON3_REQUESTS_VERSION).tar.gz +PYTHON3_REQUESTS_SITE = https://files.pythonhosted.org/packages/6b/47/c14abc08432ab22dc18b9892252efaf005ab44066de871e72a38d6af464b +PYTHON3_REQUESTS_SETUP_TYPE = setuptools +PYTHON3_REQUESTS_LICENSE = Apache-2.0 +PYTHON3_REQUESTS_LICENSE_FILES = LICENSE +PYTHON3_REQUESTS_CPE_ID_VENDOR = python +PYTHON3_REQUESTS_CPE_ID_PRODUCT = requests +HOST_PYTHON3_REQUESTS_DL_SUBDIR = python-requests +HOST_PYTHON3_REQUESTS_NEEDS_HOST_PYTHON = python3 + +$(eval $(host-python-package)) diff --git a/package/python3-setuptools/0001-add-executable.patch b/package/python3-setuptools/0001-add-executable.patch new file mode 120000 index 00000000..5bab3d96 --- /dev/null +++ b/package/python3-setuptools/0001-add-executable.patch @@ -0,0 +1 @@ +../python-setuptools/0001-add-executable.patch \ No newline at end of file diff --git a/package/python3-setuptools/python3-setuptools.hash b/package/python3-setuptools/python3-setuptools.hash new file mode 120000 index 00000000..a3af7f0f --- /dev/null +++ b/package/python3-setuptools/python3-setuptools.hash @@ -0,0 +1 @@ +../python-setuptools/python-setuptools.hash \ No newline at end of file diff --git a/package/python3-setuptools/python3-setuptools.mk b/package/python3-setuptools/python3-setuptools.mk new file mode 100644 index 00000000..34d59931 --- /dev/null +++ b/package/python3-setuptools/python3-setuptools.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# python3-setuptools +# +################################################################################ + +# Please keep in sync with +# package/python-setuptools/python-setuptools.mk +PYTHON3_SETUPTOOLS_VERSION = 44.0.0 +PYTHON3_SETUPTOOLS_SOURCE = setuptools-$(PYTHON3_SETUPTOOLS_VERSION).zip +PYTHON3_SETUPTOOLS_SITE = https://files.pythonhosted.org/packages/b0/f3/44da7482ac6da3f36f68e253cb04de37365b3dba9036a3c70773b778b485 +PYTHON3_SETUPTOOLS_LICENSE = MIT +PYTHON3_SETUPTOOLS_LICENSE_FILES = LICENSE +PYTHON3_SETUPTOOLS_CPE_ID_VENDOR = python +PYTHON3_SETUPTOOLS_CPE_ID_PRODUCT = setuptools +PYTHON3_SETUPTOOLS_SETUP_TYPE = setuptools +HOST_PYTHON3_SETUPTOOLS_DL_SUBDIR = python-setuptools +HOST_PYTHON3_SETUPTOOLS_NEEDS_HOST_PYTHON = python3 + +define HOST_PYTHON3_SETUPTOOLS_EXTRACT_CMDS + $(UNZIP) -d $(@D) $(HOST_PYTHON3_SETUPTOOLS_DL_DIR)/$(PYTHON3_SETUPTOOLS_SOURCE) + mv $(@D)/setuptools-$(PYTHON3_SETUPTOOLS_VERSION)/* $(@D) + $(RM) -r $(@D)/setuptools-$(PYTHON3_SETUPTOOLS_VERSION) +endef + +$(eval $(host-python-package)) diff --git a/package/python3/0001-Make-the-build-of-pyc-files-conditional.patch b/package/python3/0001-Make-the-build-of-pyc-files-conditional.patch new file mode 100644 index 00000000..44902725 --- /dev/null +++ b/package/python3/0001-Make-the-build-of-pyc-files-conditional.patch @@ -0,0 +1,56 @@ +From 322724e166d7ec0393aec577c12fdf6ef2b61e1d Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 22 Feb 2017 16:21:31 -0800 +Subject: [PATCH] Make the build of pyc files conditional + +This commit adds a new configure option --disable-pyc-build to disable +the compilation of pyc. + +Signed-off-by: Thomas Petazzoni +[ Andrey Smrinov: ported to Python 3.6 ] +Signed-off-by: Andrey Smirnov +--- + Makefile.pre.in | 2 ++ + configure.ac | 6 ++++++ + 2 files changed, 8 insertions(+) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 77f91e72b1..0c809f3d8a 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1550,6 +1550,7 @@ libinstall: build_all $(srcdir)/Modules/xxmodule.c + $(INSTALL_DATA) $(srcdir)/Modules/xxmodule.c \ + $(DESTDIR)$(LIBDEST)/distutils/tests ; \ + fi ++ifeq (@PYC_BUILD@,yes) + -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ + $(PYTHON_FOR_BUILD) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \ + -j0 -d $(LIBDEST) -f \ +@@ -1577,6 +1578,7 @@ libinstall: build_all $(srcdir)/Modules/xxmodule.c + $(PYTHON_FOR_BUILD) -Wi -OO $(DESTDIR)$(LIBDEST)/compileall.py \ + -j0 -d $(LIBDEST)/site-packages -f \ + -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages ++endif + -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ + $(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/Grammar.txt + -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ +diff --git a/configure.ac b/configure.ac +index d60f05251a..1ee5a09588 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1121,6 +1121,12 @@ fi + + AC_MSG_CHECKING(LDLIBRARY) + ++AC_SUBST(PYC_BUILD) ++ ++AC_ARG_ENABLE(pyc-build, ++ AS_HELP_STRING([--disable-pyc-build], [disable build of pyc files]), ++ [ PYC_BUILD="${enableval}" ], [ PYC_BUILD=yes ]) ++ + # MacOSX framework builds need more magic. LDLIBRARY is the dynamic + # library that we build, but we do not want to link against it (we + # will find it with a -framework option). For this reason there is an +-- +2.25.1 + diff --git a/package/python3/0002-Disable-buggy_getaddrinfo-configure-test-when-cross-.patch b/package/python3/0002-Disable-buggy_getaddrinfo-configure-test-when-cross-.patch new file mode 100644 index 00000000..00177814 --- /dev/null +++ b/package/python3/0002-Disable-buggy_getaddrinfo-configure-test-when-cross-.patch @@ -0,0 +1,27 @@ +From 72e20220f3a592b3ab9f440fbe74efa9f9e82d49 Mon Sep 17 00:00:00 2001 +From: Vanya Sergeev +Date: Wed, 23 Dec 2015 11:30:33 +0100 +Subject: [PATCH] Disable buggy_getaddrinfo configure test when cross-compiling + with IPv6 support + +Signed-off-by: Vanya Sergeev +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 1ee5a09588..c2445edc88 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4210,7 +4210,7 @@ fi + + AC_MSG_RESULT($ac_cv_buggy_getaddrinfo) + +-if test $have_getaddrinfo = no || test "$ac_cv_buggy_getaddrinfo" = yes ++if test $have_getaddrinfo = no || test "$cross_compiling" != "yes" -a "$ac_cv_buggy_getaddrinfo" = yes + then + if test $ipv6 = yes + then +-- +2.25.1 + diff --git a/package/python3/0003-Add-infrastructure-to-disable-the-build-of-certain-e.patch b/package/python3/0003-Add-infrastructure-to-disable-the-build-of-certain-e.patch new file mode 100644 index 00000000..7cccc588 --- /dev/null +++ b/package/python3/0003-Add-infrastructure-to-disable-the-build-of-certain-e.patch @@ -0,0 +1,108 @@ +From df7c95b4ceecf390b961d843a556c470ac9080b2 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 22 Feb 2017 16:33:22 -0800 +Subject: [PATCH] Add infrastructure to disable the build of certain extensions + +Some of the extensions part of the Python core have dependencies on +external libraries (sqlite, tk, etc.) or are relatively big and not +necessarly always useful (CJK codecs for example). By extensions, we +mean part of Python modules that are written in C and therefore +compiled to binary code. + +Therefore, we introduce a small infrastructure that allows to disable +some of those extensions. This can be done inside the configure.ac by +adding values to the DISABLED_EXTENSIONS variable (which is a +word-separated list of extensions). + +The implementation works as follow : + + * configure.ac defines a DISABLED_EXTENSIONS variable, which is + substituted (so that when Makefile.pre is generated from + Makefile.pre.in, the value of the variable is substituted). For + now, this DISABLED_EXTENSIONS variable is empty, later patches will + use it. + + * Makefile.pre.in passes the DISABLED_EXTENSIONS value down to the + variables passed in the environment when calling the setup.py + script that actually builds and installs those extensions. + + * setup.py is modified so that the existing "disabled_module_list" is + filled with those pre-disabled extensions listed in + DISABLED_EXTENSIONS. + +Patch ported to python2.7 by Maxime Ripard , and +then extended by Thomas Petazzoni +. + +Signed-off-by: Thomas Petazzoni +[ Andrey Smirnov: ported to Python 3.6 ] +Signed-off-by: Andrey Smirnov +--- + Makefile.pre.in | 6 +++++- + configure.ac | 2 ++ + setup.py | 5 ++++- + 3 files changed, 11 insertions(+), 2 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 0c809f3d8a..7c3dde8dd4 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -216,6 +216,8 @@ FILEMODE= 644 + # configure script arguments + CONFIG_ARGS= @CONFIG_ARGS@ + ++# disabled extensions ++DISABLED_EXTENSIONS= @DISABLED_EXTENSIONS@ + + # Subdirectories with code + SRCDIRS= @SRCDIRS@ +@@ -632,6 +634,7 @@ sharedmods: $(BUILDPYTHON) pybuilddir.txt Modules/_math.o + esac; \ + echo "$(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' \ + _TCLTK_INCLUDES='$(TCLTK_INCLUDES)' _TCLTK_LIBS='$(TCLTK_LIBS)' \ ++ DISABLED_EXTENSIONS="$(DISABLED_EXTENSIONS)" \ + $(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build"; \ + $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' \ + _TCLTK_INCLUDES='$(TCLTK_INCLUDES)' _TCLTK_LIBS='$(TCLTK_LIBS)' \ +@@ -1696,7 +1699,8 @@ libainstall: @DEF_MAKE_RULE@ python-config + # Install the dynamically loadable modules + # This goes into $(exec_prefix) + sharedinstall: sharedmods +- $(RUNSHARED) $(PYTHON_FOR_BUILD) $(srcdir)/setup.py install \ ++ $(RUNSHARED) DISABLED_EXTENSIONS="$(DISABLED_EXTENSIONS)" \ ++ $(PYTHON_FOR_BUILD) $(srcdir)/setup.py install \ + --prefix=$(prefix) \ + --install-scripts=$(BINDIR) \ + --install-platlib=$(DESTSHARED) \ +diff --git a/configure.ac b/configure.ac +index c2445edc88..73d66167de 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3081,6 +3081,8 @@ LIBS="$withval $LIBS" + + PKG_PROG_PKG_CONFIG + ++AC_SUBST(DISABLED_EXTENSIONS) ++ + # Check for use of the system expat library + AC_MSG_CHECKING(for --with-system-expat) + AC_ARG_WITH(system_expat, +diff --git a/setup.py b/setup.py +index 770866bca7..b6c829b3a5 100644 +--- a/setup.py ++++ b/setup.py +@@ -44,7 +44,10 @@ from distutils.spawn import find_executable + TEST_EXTENSIONS = True + + # This global variable is used to hold the list of modules to be disabled. +-DISABLED_MODULE_LIST = [] ++try: ++ DISABLED_MODULE_LIST = sysconfig.get_config_var("DISABLED_EXTENSIONS").split(" ") ++except KeyError: ++ DISABLED_MODULE_LIST = list() + + + def get_platform(): +-- +2.25.1 + diff --git a/package/python3/0004-Adjust-library-header-paths-for-cross-compilation.patch b/package/python3/0004-Adjust-library-header-paths-for-cross-compilation.patch new file mode 100644 index 00000000..24f369f8 --- /dev/null +++ b/package/python3/0004-Adjust-library-header-paths-for-cross-compilation.patch @@ -0,0 +1,67 @@ +From 61af65485f1dade4aa08d0cf2b24082aeda24c51 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 23 Dec 2015 11:33:14 +0100 +Subject: [PATCH] Adjust library/header paths for cross-compilation + +When cross-compiling third-party extensions, the get_python_inc() or +get_python_lib() can be called, to return the path to headers or +libraries. However, they use the sys.prefix of the host Python, which +returns incorrect paths when cross-compiling (paths pointing to host +headers and libraries). + +In order to fix this, we introduce the _python_sysroot, _python_prefix +and _python_exec_prefix variables, that allow to override these +values, and get correct header/library paths when cross-compiling +third-party Python modules. + +Signed-off-by: Thomas Petazzoni +--- + Lib/distutils/command/build_ext.py | 5 ++++- + Lib/distutils/sysconfig.py | 15 +++++++++++---- + 2 files changed, 15 insertions(+), 5 deletions(-) + +diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py +index 1a9bd1200f..3cf7d6746e 100644 +--- a/Lib/distutils/command/build_ext.py ++++ b/Lib/distutils/command/build_ext.py +@@ -234,7 +234,10 @@ class build_ext(Command): + if (sysconfig.get_config_var('Py_ENABLE_SHARED')): + if not sysconfig.python_build: + # building third party extensions +- self.library_dirs.append(sysconfig.get_config_var('LIBDIR')) ++ libdir = sysconfig.get_config_var('LIBDIR') ++ if "_python_sysroot" in os.environ: ++ libdir = os.environ.get("_python_sysroot") + libdir ++ self.library_dirs.append(libdir) + else: + # building python standard extensions + self.library_dirs.append('.') +diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py +index 37feae5df7..e9c3a27856 100644 +--- a/Lib/distutils/sysconfig.py ++++ b/Lib/distutils/sysconfig.py +@@ -17,10 +17,17 @@ import sys + from .errors import DistutilsPlatformError + + # These are needed in a couple of spots, so just compute them once. +-PREFIX = os.path.normpath(sys.prefix) +-EXEC_PREFIX = os.path.normpath(sys.exec_prefix) +-BASE_PREFIX = os.path.normpath(sys.base_prefix) +-BASE_EXEC_PREFIX = os.path.normpath(sys.base_exec_prefix) ++if "_python_sysroot" in os.environ: ++ _sysroot=os.environ.get('_python_sysroot') ++ PREFIX = os.path.normpath(_sysroot + os.environ.get('_python_prefix')) ++ EXEC_PREFIX = os.path.normpath(_sysroot + os.environ.get('_python_exec_prefix')) ++ BASE_PREFIX = PREFIX ++ BASE_EXEC_PREFIX = EXEC_PREFIX ++else: ++ PREFIX = os.path.normpath(sys.prefix) ++ EXEC_PREFIX = os.path.normpath(sys.exec_prefix) ++ BASE_PREFIX = os.path.normpath(sys.base_prefix) ++ BASE_EXEC_PREFIX = os.path.normpath(sys.base_exec_prefix) + + # Path to the base directory of the project. On Windows the binary may + # live in project/PCbuild/win32 or project/PCbuild/amd64. +-- +2.25.1 + diff --git a/package/python3/0005-Don-t-look-in-usr-lib-termcap-for-libraries.patch b/package/python3/0005-Don-t-look-in-usr-lib-termcap-for-libraries.patch new file mode 100644 index 00000000..c5abcfd7 --- /dev/null +++ b/package/python3/0005-Don-t-look-in-usr-lib-termcap-for-libraries.patch @@ -0,0 +1,31 @@ +From 60d71e37d167ea89445250be436170a6cfee84e7 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 23 Dec 2015 11:36:00 +0100 +Subject: [PATCH] Don't look in /usr/lib/termcap for libraries + +Signed-off-by: Thomas Petazzoni +--- + setup.py | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/setup.py b/setup.py +index b6c829b3a5..ec3ba60607 100644 +--- a/setup.py ++++ b/setup.py +@@ -1041,12 +1041,9 @@ class PyBuildExt(build_ext): + pass # Issue 7384: Already linked against curses or tinfo. + elif curses_library: + readline_libs.append(curses_library) +- elif self.compiler.find_library_file(self.lib_dirs + +- ['/usr/lib/termcap'], +- 'termcap'): ++ elif self.compiler.find_library_file(self.lib_dirs, 'termcap'): + readline_libs.append('termcap') + self.add(Extension('readline', ['readline.c'], +- library_dirs=['/usr/lib/termcap'], + extra_link_args=readline_extra_link_args, + libraries=readline_libs)) + else: +-- +2.25.1 + diff --git a/package/python3/0006-Don-t-add-multiarch-paths.patch b/package/python3/0006-Don-t-add-multiarch-paths.patch new file mode 100644 index 00000000..bb861612 --- /dev/null +++ b/package/python3/0006-Don-t-add-multiarch-paths.patch @@ -0,0 +1,37 @@ +From f5933b8f973cd11698b52d535a10d0474e49f5a5 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 23 Dec 2015 11:36:27 +0100 +Subject: [PATCH] Don't add multiarch paths + +The add_multiarch_paths() function leads, in certain build +environments, to the addition of host header paths to the CFLAGS, +which is not appropriate for cross-compilation. This patch fixes that +by simply removing the call to add_multiarch_paths() when we're +cross-compiling. + +Investigation done by David . + +Signed-off-by: Thomas Petazzoni +--- + setup.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/setup.py b/setup.py +index ec3ba60607..e27620035c 100644 +--- a/setup.py ++++ b/setup.py +@@ -734,10 +734,10 @@ class PyBuildExt(build_ext): + if not CROSS_COMPILING: + add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib') + add_dir_to_list(self.compiler.include_dirs, '/usr/local/include') ++ self.add_multiarch_paths() + # only change this for cross builds for 3.3, issues on Mageia + if CROSS_COMPILING: + self.add_cross_compiling_paths() +- self.add_multiarch_paths() + self.add_ldflags_cppflags() + + def init_inc_lib_dirs(self): +-- +2.25.1 + diff --git a/package/python3/0007-Abort-on-failed-module-build.patch b/package/python3/0007-Abort-on-failed-module-build.patch new file mode 100644 index 00000000..856fcaac --- /dev/null +++ b/package/python3/0007-Abort-on-failed-module-build.patch @@ -0,0 +1,30 @@ +From 188c0ebfdb71f5252fa7701013b8d1209f28aef7 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 23 Dec 2015 11:43:24 +0100 +Subject: [PATCH] Abort on failed module build + +When building a Python module fails, the setup.py script currently +doesn't exit with an error, and simply continues. This is not a really +nice behavior, so this patch changes setup.py to abort with an error, +so that the build issue is clearly noticeable. + +Signed-off-by: Thomas Petazzoni +--- + setup.py | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/setup.py b/setup.py +index e27620035c..d3f0e663f2 100644 +--- a/setup.py ++++ b/setup.py +@@ -524,6 +524,7 @@ class PyBuildExt(build_ext): + print("Failed to build these modules:") + print_three_column(failed) + print() ++ sys.exit(1) + + if self.failed_on_import: + failed = self.failed_on_import[:] +-- +2.25.1 + diff --git a/package/python3/0008-Serial-ioctl-workaround.patch b/package/python3/0008-Serial-ioctl-workaround.patch new file mode 100644 index 00000000..df31cd62 --- /dev/null +++ b/package/python3/0008-Serial-ioctl-workaround.patch @@ -0,0 +1,33 @@ +From 9e6211b0d6d4610e5fb7d2c7e1152eb7c64d968b Mon Sep 17 00:00:00 2001 +From: Baruch Siach +Date: Wed, 23 Dec 2015 11:44:02 +0100 +Subject: [PATCH] Serial ioctl() workaround + +The ioctls.h of some architectures (notably xtensa) references structs from +linux/serial.h. Make sure to include this header as well. + +Also, undef TIOCTTYGSTRUCT that require reference to internal kernel tty_struct, +but isn't actually referenced in modern kernels. + +Signed-off-by: Baruch Siach +--- + Modules/termios.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/Modules/termios.c b/Modules/termios.c +index 75e5e52320..eefbddfe69 100644 +--- a/Modules/termios.c ++++ b/Modules/termios.c +@@ -15,7 +15,9 @@ + #endif + + #include ++#include + #include ++#undef TIOCTTYGSTRUCT + + /* HP-UX requires that this be included to pick up MDCD, MCTS, MDSR, + * MDTR, MRI, and MRTS (apparently used internally by some things +-- +2.25.1 + diff --git a/package/python3/0009-Do-not-adjust-the-shebang-of-Python-scripts-for-cros.patch b/package/python3/0009-Do-not-adjust-the-shebang-of-Python-scripts-for-cros.patch new file mode 100644 index 00000000..8a77fe37 --- /dev/null +++ b/package/python3/0009-Do-not-adjust-the-shebang-of-Python-scripts-for-cros.patch @@ -0,0 +1,35 @@ +From cb595a591c71e0bf7c63a3706b0be45ac6a642e3 Mon Sep 17 00:00:00 2001 +From: Christophe Vu-Brugier +Date: Wed, 23 Dec 2015 11:44:30 +0100 +Subject: [PATCH] Do not adjust the shebang of Python scripts for + cross-compilation + +The copy_scripts() method in distutils copies the scripts listed in +the setup file and adjusts the first line to refer to the current +Python interpreter. When cross-compiling, this means that the adjusted +shebang refers to the host Python interpreter. + +This patch modifies copy_scripts() to preserve the shebang when +cross-compilation is detected. + +Signed-off-by: Christophe Vu-Brugier +--- + Lib/distutils/command/build_scripts.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Lib/distutils/command/build_scripts.py b/Lib/distutils/command/build_scripts.py +index ccc70e6465..d6d54195c1 100644 +--- a/Lib/distutils/command/build_scripts.py ++++ b/Lib/distutils/command/build_scripts.py +@@ -91,7 +91,7 @@ class build_scripts(Command): + adjust = True + post_interp = match.group(1) or b'' + +- if adjust: ++ if adjust and not '_python_sysroot' in os.environ: + log.info("copying and adjusting %s -> %s", script, + self.build_dir) + updated_files.append(outfile) +-- +2.25.1 + diff --git a/package/python3/0010-Misc-python-config.sh.in-ensure-sed-invocations-only.patch b/package/python3/0010-Misc-python-config.sh.in-ensure-sed-invocations-only.patch new file mode 100644 index 00000000..a1f9ab6c --- /dev/null +++ b/package/python3/0010-Misc-python-config.sh.in-ensure-sed-invocations-only.patch @@ -0,0 +1,67 @@ +From eb51497e4b5799f8ab0277426d3e54414acb9d4b Mon Sep 17 00:00:00 2001 +From: Peter Korsgaard +Date: Thu, 20 Nov 2014 13:24:59 +0100 +Subject: [PATCH] Misc/python-config.sh.in: ensure sed invocations only match + beginning of strings + +The build/real prefix handling using sed breaks if build != real and the +standard include / lib directories are used ($prefix/include and $prefix/lib). + +E.G. + +prefix_build="/usr", libdir="$prefix/lib", includedir="$prefix/include". + +If this gets installed with make DESTDIR="/foo" install, then we end up with +prefix_real = prefix = "/foo/usr" as expected, but +includedir="/foo/foo/usr/include" and libdir="/foo/foo/usr/lib" because of +the double sed invocation (prefix is already expanded). Work around it by +ensuring we only match the beginning of the string. + +Submitted upstream: http://bugs.python.org/issue22907 + +Signed-off-by: Peter Korsgaard +--- + Misc/python-config.sh.in | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +diff --git a/Misc/python-config.sh.in b/Misc/python-config.sh.in +index 2602fe24c0..a1bc3cd5f7 100644 +--- a/Misc/python-config.sh.in ++++ b/Misc/python-config.sh.in +@@ -24,18 +24,19 @@ installed_prefix () + echo $RESULT + } + ++prefix_build="@prefix@" + prefix_real=$(installed_prefix "$0") + + # Use sed to fix paths from their built-to locations to their installed-to + # locations. Keep prefix & exec_prefix using their original values in case + # they are referenced in other configure variables, to prevent double + # substitution, issue #22140. +-prefix="@prefix@" +-exec_prefix="@exec_prefix@" ++prefix=$(echo "$prefix_build" | sed "s#^$prefix_build#$prefix_real#") ++exec_prefix=$(echo "$exec_prefix_build" | sed "s#^$exec_prefix_build#$prefix_real#") + exec_prefix_real=${prefix_real} +-includedir=$(echo "@includedir@" | sed "s#$prefix#$prefix_real#") +-libdir=$(echo "@libdir@" | sed "s#$prefix#$prefix_real#") +-CFLAGS=$(echo "@CFLAGS@" | sed "s#$prefix#$prefix_real#") ++includedir=$(echo "@includedir@" | sed "s#^$prefix_build#$prefix_real#") ++libdir=$(echo "@libdir@" | sed "s#^$prefix_build#$prefix_real#") ++CFLAGS=$(echo "@CFLAGS@" | sed "s#^$prefix_build#$prefix_real#") + VERSION="@VERSION@" + LIBM="@LIBM@" + LIBC="@LIBC@" +@@ -49,7 +50,7 @@ OPT="@OPT@" + PY_ENABLE_SHARED="@PY_ENABLE_SHARED@" + LDVERSION="@LDVERSION@" + LIBDEST=${prefix_real}/lib/python${VERSION} +-LIBPL=$(echo "@LIBPL@" | sed "s#$prefix#$prefix_real#") ++LIBPL=$(echo "@LIBPL@" | sed "s#^$prefix_build#$prefix_real#") + SO="@EXT_SUFFIX@" + PYTHONFRAMEWORK="@PYTHONFRAMEWORK@" + INCDIR="-I$includedir/python${VERSION}${ABIFLAGS}" +-- +2.25.1 + diff --git a/package/python3/0011-Override-system-locale-and-set-to-default-when-addin.patch b/package/python3/0011-Override-system-locale-and-set-to-default-when-addin.patch new file mode 100644 index 00000000..8b0d4f4c --- /dev/null +++ b/package/python3/0011-Override-system-locale-and-set-to-default-when-addin.patch @@ -0,0 +1,39 @@ +From e4ae670e3489544a49dabd1618c32fe73504a7ba Mon Sep 17 00:00:00 2001 +From: Samuel Cabrero +Date: Wed, 23 Dec 2015 11:45:48 +0100 +Subject: [PATCH] Override system locale and set to default when adding gcc + paths + +Forces the use of the default locale in the function +add_gcc_paths, which is called when cross compiling to add the +include and library paths. This is necessary because otherwise +the gcc output is localized and the output parsing fails, which +results in no paths added and detect_modules not able to find +any system library (eg. libz, libssl, etc.) + +[Thomas: patch taken from https://bugs.python.org/issue23767.] + +Signed-off-by: Samuel Cabrero +Signed-off-by: Thomas Petazzoni +[james.hilliard1@gmail.com: adapt to python 3.9] +Signed-off-by: James Hilliard +--- + setup.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/setup.py b/setup.py +index d3f0e663f2..926c16f58f 100644 +--- a/setup.py ++++ b/setup.py +@@ -680,7 +680,7 @@ class PyBuildExt(build_ext): + tmpfile = os.path.join(self.build_temp, 'ccpaths') + if not os.path.exists(self.build_temp): + os.makedirs(self.build_temp) +- ret = run_command('%s -E -v - %s 1>/dev/null' % (cc, tmpfile)) ++ ret = run_command('LC_ALL=C %s -E -v - %s 1>/dev/null' % (cc, tmpfile)) + is_gcc = False + is_clang = False + in_incdirs = False +-- +2.25.1 + diff --git a/package/python3/0012-Add-importlib-fix-for-PEP-3147-issue.patch b/package/python3/0012-Add-importlib-fix-for-PEP-3147-issue.patch new file mode 100644 index 00000000..7a885303 --- /dev/null +++ b/package/python3/0012-Add-importlib-fix-for-PEP-3147-issue.patch @@ -0,0 +1,105 @@ +From e2ea659eac1849db471d3c01a0d0af9d6fca2e9a Mon Sep 17 00:00:00 2001 +From: Christophe Vu-Brugier +Date: Wed, 22 Feb 2017 16:48:49 -0800 +Subject: [PATCH] Add importlib fix for PEP 3147 issue + +Python 3 has a new standard for installing .pyc file, called PEP +3147. Unfortunately, this standard requires both the .py and .pyc +files to be installed for a Python module to be found. This is quite +annoying on space-constrained embedded systems, since the .py file is +technically not required for execution. + +This patch changes cache_from_source() and source_from_cache() in +importlib to get rid of the "__pycache__" directory. +This effectively disables PEP 3147 for: + +* The python standard library +* Packages built with distutils or setuptools +* Packages built with automake that use the `py-compile` helper + +Signed-off-by: Christophe Vu-Brugier +[ Andrey Smirnov: ported to Python 3.6 ] +Signed-off-by: Andrey Smirnov +--- + Lib/importlib/_bootstrap_external.py | 44 ++++------------------------ + 1 file changed, 5 insertions(+), 39 deletions(-) + +diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py +index 25a3f8c0e0..2cb9a9aa52 100644 +--- a/Lib/importlib/_bootstrap_external.py ++++ b/Lib/importlib/_bootstrap_external.py +@@ -373,8 +373,6 @@ def cache_from_source(path, debug_override=None, *, optimization=None): + a True value is the same as setting 'optimization' to the empty string + while a False value is equivalent to setting 'optimization' to '1'. + +- If sys.implementation.cache_tag is None then NotImplementedError is raised. +- + """ + if debug_override is not None: + _warnings.warn('the debug_override parameter is deprecated; use ' +@@ -386,10 +384,7 @@ def cache_from_source(path, debug_override=None, *, optimization=None): + path = _os.fspath(path) + head, tail = _path_split(path) + base, sep, rest = tail.rpartition('.') +- tag = sys.implementation.cache_tag +- if tag is None: +- raise NotImplementedError('sys.implementation.cache_tag is None') +- almost_filename = ''.join([(base if base else rest), sep, tag]) ++ almost_filename = ''.join([(base if base else rest)]) + if optimization is None: + if sys.flags.optimize == 0: + optimization = '' +@@ -426,46 +421,17 @@ def cache_from_source(path, debug_override=None, *, optimization=None): + head.lstrip(path_separators), + filename, + ) +- return _path_join(head, _PYCACHE, filename) ++ return _path_join(head, filename) + + + def source_from_cache(path): + """Given the path to a .pyc. file, return the path to its .py file. + + The .pyc file does not need to exist; this simply returns the path to +- the .py file calculated to correspond to the .pyc file. If path does +- not conform to PEP 3147/488 format, ValueError will be raised. If +- sys.implementation.cache_tag is None then NotImplementedError is raised. +- ++ the .py file calculated to correspond to the .pyc file. + """ +- if sys.implementation.cache_tag is None: +- raise NotImplementedError('sys.implementation.cache_tag is None') +- path = _os.fspath(path) +- head, pycache_filename = _path_split(path) +- found_in_pycache_prefix = False +- if sys.pycache_prefix is not None: +- stripped_path = sys.pycache_prefix.rstrip(path_separators) +- if head.startswith(stripped_path + path_sep): +- head = head[len(stripped_path):] +- found_in_pycache_prefix = True +- if not found_in_pycache_prefix: +- head, pycache = _path_split(head) +- if pycache != _PYCACHE: +- raise ValueError(f'{_PYCACHE} not bottom-level directory in ' +- f'{path!r}') +- dot_count = pycache_filename.count('.') +- if dot_count not in {2, 3}: +- raise ValueError(f'expected only 2 or 3 dots in {pycache_filename!r}') +- elif dot_count == 3: +- optimization = pycache_filename.rsplit('.', 2)[-2] +- if not optimization.startswith(_OPT): +- raise ValueError("optimization portion of filename does not start " +- f"with {_OPT!r}") +- opt_level = optimization[len(_OPT):] +- if not opt_level.isalnum(): +- raise ValueError(f"optimization level {optimization!r} is not an " +- "alphanumeric value") +- base_filename = pycache_filename.partition('.')[0] ++ head, filename = _path_split(path) ++ base_filename = filename.partition('.')[0] + return _path_join(head, base_filename + SOURCE_SUFFIXES[0]) + + +-- +2.25.1 + diff --git a/package/python3/0013-Add-an-option-to-disable-installation-of-test-module.patch b/package/python3/0013-Add-an-option-to-disable-installation-of-test-module.patch new file mode 100644 index 00000000..8c1b9893 --- /dev/null +++ b/package/python3/0013-Add-an-option-to-disable-installation-of-test-module.patch @@ -0,0 +1,117 @@ +From 0337342d413d13f437fd089de91faee70a8bf3f9 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 22 Feb 2017 17:01:18 -0800 +Subject: [PATCH] Add an option to disable installation of test modules + +The Python standard distribution comes with many test modules, that +are not necessarly useful on embedded targets. + +Signed-off-by: Thomas Petazzoni +Signed-off-by: Samuel Martin +[ Andrey Smirnov: ported to Python 3.6 ] +Signed-off-by: Andrey Smirnov +[james.hilliard1@gmail.com: adapt to python 3.9] +Signed-off-by: James Hilliard +--- + Makefile.pre.in | 56 ++++++++++++++++++++++++++++++++----------------- + configure.ac | 5 +++++ + 2 files changed, 42 insertions(+), 19 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 7c3dde8dd4..204f293d53 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1406,8 +1406,29 @@ maninstall: altmaninstall + + # Install the library + XMLLIBSUBDIRS= xml xml/dom xml/etree xml/parsers xml/sax +-LIBSUBDIRS= tkinter tkinter/test tkinter/test/test_tkinter \ +- tkinter/test/test_ttk site-packages test \ ++ ++LIBSUBDIRS= tkinter site-packages \ ++ asyncio \ ++ collections concurrent concurrent/futures encodings \ ++ email email/mime \ ++ ensurepip ensurepip/_bundled \ ++ html json http dbm xmlrpc \ ++ sqlite3 \ ++ logging csv wsgiref urllib \ ++ lib2to3 lib2to3/fixes lib2to3/pgen2 \ ++ ctypes ctypes/macholib \ ++ idlelib idlelib/Icons \ ++ distutils distutils/command $(XMLLIBSUBDIRS) \ ++ importlib \ ++ turtledemo \ ++ multiprocessing multiprocessing/dummy \ ++ unittest \ ++ venv venv/scripts venv/scripts/common venv/scripts/posix \ ++ curses pydoc_data \ ++ zoneinfo ++ ++TESTSUBDIRS= tkinter/test tkinter/test/test_tkinter \ ++ tkinter/test/test_ttk test \ + test/audiodata \ + test/capath test/data \ + test/cjkencodings test/decimaltestdata \ +@@ -1468,28 +1489,25 @@ LIBSUBDIRS= tkinter tkinter/test tkinter/test/test_tkinter \ + test/test_importlib/zipdata02 \ + test/test_zoneinfo test/test_zoneinfo/data \ + test/ziptestdata \ +- asyncio \ + test/test_asyncio \ +- collections concurrent concurrent/futures encodings \ +- email email/mime test/test_email test/test_email/data \ +- ensurepip ensurepip/_bundled \ +- html json test/test_json http dbm xmlrpc \ +- sqlite3 sqlite3/test \ +- logging csv wsgiref urllib \ +- lib2to3 lib2to3/fixes lib2to3/pgen2 lib2to3/tests \ ++ test/test_email test/test_email/data \ ++ test/test_json \ ++ sqlite3/test \ ++ lib2to3/tests \ + lib2to3/tests/data lib2to3/tests/data/fixers \ + lib2to3/tests/data/fixers/myfixes \ +- ctypes ctypes/test ctypes/macholib \ +- idlelib idlelib/Icons idlelib/idle_test \ +- distutils distutils/command distutils/tests $(XMLLIBSUBDIRS) \ ++ ctypes/test \ ++ idlelib/idle_test \ ++ distutils/tests \ + test/test_peg_generator \ ++ test/test_importlib test/test_importlib/builtin \ + test/test_tools test/test_warnings test/test_warnings/data \ +- turtledemo \ +- multiprocessing multiprocessing/dummy \ +- unittest unittest/test unittest/test/testmock \ +- venv venv/scripts venv/scripts/common venv/scripts/posix \ +- curses pydoc_data \ +- zoneinfo ++ unittest/test unittest/test/testmock ++ ++ifeq (@TEST_MODULES@,yes) ++LIBSUBDIRS += $(TESTSUBDIRS) ++endif ++ + libinstall: build_all $(srcdir)/Modules/xxmodule.c + @for i in $(SCRIPTDIR) $(LIBDEST); \ + do \ +diff --git a/configure.ac b/configure.ac +index 73d66167de..92e28d02ee 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3358,6 +3358,11 @@ if test "$posix_threads" = "yes"; then + AC_CHECK_FUNCS(pthread_getcpuclockid) + fi + ++AC_SUBST(TEST_MODULES) ++ ++AC_ARG_ENABLE(test-modules, ++ AS_HELP_STRING([--disable-test-modules], [disable test modules]), ++ [ TEST_MODULES="${enableval}" ], [ TEST_MODULES=yes ]) + + # Check for enable-ipv6 + AH_TEMPLATE(ENABLE_IPV6, [Define if --enable-ipv6 is specified]) +-- +2.25.1 + diff --git a/package/python3/0014-Add-an-option-to-disable-pydoc.patch b/package/python3/0014-Add-an-option-to-disable-pydoc.patch new file mode 100644 index 00000000..0c928a0b --- /dev/null +++ b/package/python3/0014-Add-an-option-to-disable-pydoc.patch @@ -0,0 +1,99 @@ +From a65e5d3caf8e076d531191164c23c6240461f675 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 22 Feb 2017 17:07:56 -0800 +Subject: [PATCH] Add an option to disable pydoc + +It removes 0.5 MB of data from the target plus the pydoc script +itself. + +Signed-off-by: Thomas Petazzoni +Signed-off-by: Samuel Martin +[ Andrey Smirnov: ported to Python 3.6 ] +Signed-off-by: Andrey Smirnov +--- + Makefile.pre.in | 8 +++++++- + configure.ac | 6 ++++++ + setup.py | 9 +++++++-- + 3 files changed, 20 insertions(+), 3 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 204f293d53..63e3df0470 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1374,7 +1374,9 @@ bininstall: altbininstall + -rm -f $(DESTDIR)$(BINDIR)/idle3 + (cd $(DESTDIR)$(BINDIR); $(LN) -s idle$(VERSION) idle3) + -rm -f $(DESTDIR)$(BINDIR)/pydoc3 ++ifeq (@PYDOC@,yes) + (cd $(DESTDIR)$(BINDIR); $(LN) -s pydoc$(VERSION) pydoc3) ++endif + -rm -f $(DESTDIR)$(BINDIR)/2to3 + (cd $(DESTDIR)$(BINDIR); $(LN) -s 2to3-$(VERSION) 2to3) + if test "x$(LIPO_32BIT_FLAGS)" != "x" ; then \ +@@ -1424,7 +1426,7 @@ LIBSUBDIRS= tkinter site-packages \ + multiprocessing multiprocessing/dummy \ + unittest \ + venv venv/scripts venv/scripts/common venv/scripts/posix \ +- curses pydoc_data \ ++ curses \ + zoneinfo + + TESTSUBDIRS= tkinter/test tkinter/test/test_tkinter \ +@@ -1508,6 +1510,10 @@ ifeq (@TEST_MODULES@,yes) + LIBSUBDIRS += $(TESTSUBDIRS) + endif + ++ifeq (@PYDOC@,yes) ++LIBSUBDIRS += pydoc_data ++endif ++ + libinstall: build_all $(srcdir)/Modules/xxmodule.c + @for i in $(SCRIPTDIR) $(LIBDEST); \ + do \ +diff --git a/configure.ac b/configure.ac +index 92e28d02ee..174ed85a7c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3358,6 +3358,12 @@ if test "$posix_threads" = "yes"; then + AC_CHECK_FUNCS(pthread_getcpuclockid) + fi + ++AC_SUBST(PYDOC) ++ ++AC_ARG_ENABLE(pydoc, ++ AS_HELP_STRING([--disable-pydoc], [disable pydoc]), ++ [ PYDOC="${enableval}" ], [ PYDOC=yes ]) ++ + AC_SUBST(TEST_MODULES) + + AC_ARG_ENABLE(test-modules, +diff --git a/setup.py b/setup.py +index 926c16f58f..1fc5fac90c 100644 +--- a/setup.py ++++ b/setup.py +@@ -2565,6 +2565,12 @@ def main(): + # turn off warnings when deprecated modules are imported + import warnings + warnings.filterwarnings("ignore",category=DeprecationWarning) ++ ++ scripts = ['Tools/scripts/idle3', 'Tools/scripts/2to3', ++ 'Lib/smtpd.py'] ++ if not '--disable-pydoc' in sysconfig.get_config_var("CONFIG_ARGS"): ++ scripts += [ 'Tools/scripts/pydoc3' ] ++ + setup(# PyPI Metadata (PEP 301) + name = "Python", + version = sys.version.split()[0], +@@ -2589,8 +2595,7 @@ def main(): + # If you change the scripts installed here, you also need to + # check the PyBuildScripts command above, and change the links + # created by the bininstall target in Makefile.pre.in +- scripts = ["Tools/scripts/pydoc3", "Tools/scripts/idle3", +- "Tools/scripts/2to3"] ++ scripts = scripts + ) + + # --install-platlib +-- +2.25.1 + diff --git a/package/python3/0015-Add-an-option-to-disable-lib2to3.patch b/package/python3/0015-Add-an-option-to-disable-lib2to3.patch new file mode 100644 index 00000000..fe94cdfd --- /dev/null +++ b/package/python3/0015-Add-an-option-to-disable-lib2to3.patch @@ -0,0 +1,116 @@ +From f034b1b0f33a7bd4dde23f0bc1fa8e00e3518c9d Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 22 Feb 2017 17:15:31 -0800 +Subject: [PATCH] Add an option to disable lib2to3 + +lib2to3 is a library to convert Python 2.x code to Python 3.x. As +such, it is probably not very useful on embedded system targets. + +Signed-off-by: Thomas Petazzoni +Signed-off-by: Samuel Martin +[ Andrey Smirnov: ported to Python 3.6 ] +Signed-off-by: Andrey Smirnov +--- + Makefile.pre.in | 16 ++++++++++++---- + configure.ac | 6 ++++++ + setup.py | 5 +++-- + 3 files changed, 21 insertions(+), 6 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 63e3df0470..8b7de12999 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1378,7 +1378,9 @@ ifeq (@PYDOC@,yes) + (cd $(DESTDIR)$(BINDIR); $(LN) -s pydoc$(VERSION) pydoc3) + endif + -rm -f $(DESTDIR)$(BINDIR)/2to3 ++ifeq (@LIB2TO3@,yes) + (cd $(DESTDIR)$(BINDIR); $(LN) -s 2to3-$(VERSION) 2to3) ++endif + if test "x$(LIPO_32BIT_FLAGS)" != "x" ; then \ + rm -f $(DESTDIR)$(BINDIR)/python3-32$(EXE); \ + (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)-32$(EXE) python3-32$(EXE)) \ +@@ -1417,7 +1419,6 @@ LIBSUBDIRS= tkinter site-packages \ + html json http dbm xmlrpc \ + sqlite3 \ + logging csv wsgiref urllib \ +- lib2to3 lib2to3/fixes lib2to3/pgen2 \ + ctypes ctypes/macholib \ + idlelib idlelib/Icons \ + distutils distutils/command $(XMLLIBSUBDIRS) \ +@@ -1495,9 +1496,6 @@ TESTSUBDIRS= tkinter/test tkinter/test/test_tkinter \ + test/test_email test/test_email/data \ + test/test_json \ + sqlite3/test \ +- lib2to3/tests \ +- lib2to3/tests/data lib2to3/tests/data/fixers \ +- lib2to3/tests/data/fixers/myfixes \ + ctypes/test \ + idlelib/idle_test \ + distutils/tests \ +@@ -1506,6 +1504,14 @@ TESTSUBDIRS= tkinter/test tkinter/test/test_tkinter \ + test/test_tools test/test_warnings test/test_warnings/data \ + unittest/test unittest/test/testmock + ++ifeq (@LIB2TO3@,yes) ++LIBSUBDIRS += lib2to3 lib2to3/fixes lib2to3/pgen2 ++TESTSUBDIRS += lib2to3/tests \ ++ lib2to3/tests/data \ ++ lib2to3/tests/data/fixers \ ++ lib2to3/tests/data/fixers/myfixes ++endif ++ + ifeq (@TEST_MODULES@,yes) + LIBSUBDIRS += $(TESTSUBDIRS) + endif +@@ -1606,10 +1612,12 @@ ifeq (@PYC_BUILD@,yes) + -j0 -d $(LIBDEST)/site-packages -f \ + -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages + endif ++ifeq (@LIB2TO3@,yes) + -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ + $(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/Grammar.txt + -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ + $(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/PatternGrammar.txt ++endif + + # bpo-21536: Misc/python-config.sh is generated in the build directory + # from $(srcdir)Misc/python-config.sh.in. +diff --git a/configure.ac b/configure.ac +index 174ed85a7c..f1f5e9a7b0 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3370,6 +3370,12 @@ AC_ARG_ENABLE(test-modules, + AS_HELP_STRING([--disable-test-modules], [disable test modules]), + [ TEST_MODULES="${enableval}" ], [ TEST_MODULES=yes ]) + ++AC_SUBST(LIB2TO3) ++ ++AC_ARG_ENABLE(lib2to3, ++ AS_HELP_STRING([--disable-lib2to3], [disable lib2to3]), ++ [ LIB2TO3="${enableval}" ], [ LIB2TO3=yes ]) ++ + # Check for enable-ipv6 + AH_TEMPLATE(ENABLE_IPV6, [Define if --enable-ipv6 is specified]) + AC_MSG_CHECKING([if --enable-ipv6 is specified]) +diff --git a/setup.py b/setup.py +index 1fc5fac90c..4063d7ffa5 100644 +--- a/setup.py ++++ b/setup.py +@@ -2566,10 +2566,11 @@ def main(): + import warnings + warnings.filterwarnings("ignore",category=DeprecationWarning) + +- scripts = ['Tools/scripts/idle3', 'Tools/scripts/2to3', +- 'Lib/smtpd.py'] ++ scripts = ['Tools/scripts/idle3', 'Lib/smtpd.py'] + if not '--disable-pydoc' in sysconfig.get_config_var("CONFIG_ARGS"): + scripts += [ 'Tools/scripts/pydoc3' ] ++ if not '--disable-lib2to3' in sysconfig.get_config_var("CONFIG_ARGS"): ++ scripts += [ 'Tools/scripts/2to3' ] + + setup(# PyPI Metadata (PEP 301) + name = "Python", +-- +2.25.1 + diff --git a/package/python3/0016-Add-option-to-disable-the-sqlite3-module.patch b/package/python3/0016-Add-option-to-disable-the-sqlite3-module.patch new file mode 100644 index 00000000..d6c9bccd --- /dev/null +++ b/package/python3/0016-Add-option-to-disable-the-sqlite3-module.patch @@ -0,0 +1,69 @@ +From dd2722dec08eb9c72c36313e93661eeca3ad64d8 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 22 Feb 2017 17:20:45 -0800 +Subject: [PATCH] Add option to disable the sqlite3 module + +Signed-off-by: Thomas Petazzoni +Signed-off-by: Samuel Martin +[ Andrey Smirnov: ported to Python 3.6 ] +Signed-off-by: Andrey Smirnov +--- + Makefile.pre.in | 7 +++++-- + configure.ac | 9 +++++++++ + 2 files changed, 14 insertions(+), 2 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 8b7de12999..d826d8ac4b 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1417,7 +1417,6 @@ LIBSUBDIRS= tkinter site-packages \ + email email/mime \ + ensurepip ensurepip/_bundled \ + html json http dbm xmlrpc \ +- sqlite3 \ + logging csv wsgiref urllib \ + ctypes ctypes/macholib \ + idlelib idlelib/Icons \ +@@ -1495,7 +1494,6 @@ TESTSUBDIRS= tkinter/test tkinter/test/test_tkinter \ + test/test_asyncio \ + test/test_email test/test_email/data \ + test/test_json \ +- sqlite3/test \ + ctypes/test \ + idlelib/idle_test \ + distutils/tests \ +@@ -1512,6 +1510,11 @@ TESTSUBDIRS += lib2to3/tests \ + lib2to3/tests/data/fixers/myfixes + endif + ++ifeq (@SQLITE3@,yes) ++LIBSUBDIRS += sqlite3 ++TESTSUBDIRS += sqlite3/test ++endif ++ + ifeq (@TEST_MODULES@,yes) + LIBSUBDIRS += $(TESTSUBDIRS) + endif +diff --git a/configure.ac b/configure.ac +index f1f5e9a7b0..8b5c65974c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3358,6 +3358,15 @@ if test "$posix_threads" = "yes"; then + AC_CHECK_FUNCS(pthread_getcpuclockid) + fi + ++AC_SUBST(SQLITE3) ++AC_ARG_ENABLE(sqlite3, ++ AS_HELP_STRING([--disable-sqlite3], [disable sqlite3]), ++ [ SQLITE3="${enableval}" ], [ SQLITE3=yes ]) ++ ++if test "$SQLITE3" = "no" ; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _sqlite3" ++fi ++ + AC_SUBST(PYDOC) + + AC_ARG_ENABLE(pydoc, +-- +2.25.1 + diff --git a/package/python3/0017-Add-an-option-to-disable-the-tk-module.patch b/package/python3/0017-Add-an-option-to-disable-the-tk-module.patch new file mode 100644 index 00000000..b798eb56 --- /dev/null +++ b/package/python3/0017-Add-an-option-to-disable-the-tk-module.patch @@ -0,0 +1,73 @@ +From ad6b66b34f71ff6b60b3be5f6fd3e781cdeecd59 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 22 Feb 2017 17:23:42 -0800 +Subject: [PATCH] Add an option to disable the tk module + +Signed-off-by: Thomas Petazzoni +Signed-off-by: Samuel Martin +[ Andrey Smirnov: ported to Python 3.6 ] +Signed-off-by: Andrey Smirnov +--- + Makefile.pre.in | 11 ++++++++--- + configure.ac | 9 +++++++++ + 2 files changed, 17 insertions(+), 3 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index d826d8ac4b..dc84384680 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1411,7 +1411,7 @@ maninstall: altmaninstall + # Install the library + XMLLIBSUBDIRS= xml xml/dom xml/etree xml/parsers xml/sax + +-LIBSUBDIRS= tkinter site-packages \ ++LIBSUBDIRS= site-packages \ + asyncio \ + collections concurrent concurrent/futures encodings \ + email email/mime \ +@@ -1429,8 +1429,7 @@ LIBSUBDIRS= tkinter site-packages \ + curses \ + zoneinfo + +-TESTSUBDIRS= tkinter/test tkinter/test/test_tkinter \ +- tkinter/test/test_ttk test \ ++TESTSUBDIRS= test \ + test/audiodata \ + test/capath test/data \ + test/cjkencodings test/decimaltestdata \ +@@ -1502,6 +1501,12 @@ TESTSUBDIRS= tkinter/test tkinter/test/test_tkinter \ + test/test_tools test/test_warnings test/test_warnings/data \ + unittest/test unittest/test/testmock + ++ifeq (@TK@,yes) ++LIBSUBDIRS += tkinter ++TESTSUBDIRS += tkinter/test tkinter/test/test_tkinter \ ++ tkinter/test/test_ttk ++endif ++ + ifeq (@LIB2TO3@,yes) + LIBSUBDIRS += lib2to3 lib2to3/fixes lib2to3/pgen2 + TESTSUBDIRS += lib2to3/tests \ +diff --git a/configure.ac b/configure.ac +index 8b5c65974c..4c72dae960 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3367,6 +3367,15 @@ if test "$SQLITE3" = "no" ; then + DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _sqlite3" + fi + ++AC_SUBST(TK) ++AC_ARG_ENABLE(tk, ++ AS_HELP_STRING([--disable-tk], [disable tk]), ++ [ TK="${enableval}" ], [ TK=yes ]) ++ ++if test "$TK" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _tkinter" ++fi ++ + AC_SUBST(PYDOC) + + AC_ARG_ENABLE(pydoc, +-- +2.25.1 + diff --git a/package/python3/0018-Add-an-option-to-disable-the-curses-module.patch b/package/python3/0018-Add-an-option-to-disable-the-curses-module.patch new file mode 100644 index 00000000..93dfac26 --- /dev/null +++ b/package/python3/0018-Add-an-option-to-disable-the-curses-module.patch @@ -0,0 +1,60 @@ +From 962deb43f5f340a8472d432ae8e6d61186f9040e Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 22 Feb 2017 17:31:51 -0800 +Subject: [PATCH] Add an option to disable the curses module + +Signed-off-by: Thomas Petazzoni +Signed-off-by: Samuel Martin +[ Andrey Smirnov: ported to Python 3.6 ] +Signed-off-by: Andrey Smirnov +--- + Makefile.pre.in | 5 ++++- + configure.ac | 9 +++++++++ + 2 files changed, 13 insertions(+), 1 deletion(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index dc84384680..2a82f3308f 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1426,7 +1426,6 @@ LIBSUBDIRS= site-packages \ + multiprocessing multiprocessing/dummy \ + unittest \ + venv venv/scripts venv/scripts/common venv/scripts/posix \ +- curses \ + zoneinfo + + TESTSUBDIRS= test \ +@@ -1507,6 +1506,10 @@ TESTSUBDIRS += tkinter/test tkinter/test/test_tkinter \ + tkinter/test/test_ttk + endif + ++ifeq (@CURSES@,yes) ++LIBSUBDIRS += curses ++endif ++ + ifeq (@LIB2TO3@,yes) + LIBSUBDIRS += lib2to3 lib2to3/fixes lib2to3/pgen2 + TESTSUBDIRS += lib2to3/tests \ +diff --git a/configure.ac b/configure.ac +index 4c72dae960..acd98381a3 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3376,6 +3376,15 @@ if test "$TK" = "no"; then + DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _tkinter" + fi + ++AC_SUBST(CURSES) ++AC_ARG_ENABLE(curses, ++ AS_HELP_STRING([--disable-curses], [disable curses]), ++ [ CURSES="${enableval}" ], [ CURSES=yes ]) ++ ++if test "$CURSES" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _curses _curses_panel" ++fi ++ + AC_SUBST(PYDOC) + + AC_ARG_ENABLE(pydoc, +-- +2.25.1 + diff --git a/package/python3/0019-Add-an-option-to-disable-expat.patch b/package/python3/0019-Add-an-option-to-disable-expat.patch new file mode 100644 index 00000000..e7349058 --- /dev/null +++ b/package/python3/0019-Add-an-option-to-disable-expat.patch @@ -0,0 +1,92 @@ +From 7e0e7dc25f50acd6922493ae620ee5cbf107a79a Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 22 Feb 2017 17:40:45 -0800 +Subject: [PATCH] Add an option to disable expat + +This patch replaces the existing --with-system-expat option with a +--with-expat={system,builtin,none} option, which allows to tell Python +whether we want to use the system expat (already installed), the expat +builtin the Python sources, or no expat at all (which disables the +installation of XML modules). + +Signed-off-by: Thomas Petazzoni +Signed-off-by: Samuel Martin +[ Andrey Smirnov: ported to Python 3.6 ] +Signed-off-by: Andrey Smirnov +--- + Makefile.pre.in | 6 +++++- + configure.ac | 18 +++++++++++++----- + setup.py | 2 +- + 3 files changed, 19 insertions(+), 7 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 2a82f3308f..e678c8817e 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1420,7 +1420,7 @@ LIBSUBDIRS= site-packages \ + logging csv wsgiref urllib \ + ctypes ctypes/macholib \ + idlelib idlelib/Icons \ +- distutils distutils/command $(XMLLIBSUBDIRS) \ ++ distutils distutils/command \ + importlib \ + turtledemo \ + multiprocessing multiprocessing/dummy \ +@@ -1510,6 +1510,10 @@ ifeq (@CURSES@,yes) + LIBSUBDIRS += curses + endif + ++ifeq (@EXPAT@,yes) ++LIBSUBDIRS += $(XMLLIBSUBDIRS) ++endif ++ + ifeq (@LIB2TO3@,yes) + LIBSUBDIRS += lib2to3 lib2to3/fixes lib2to3/pgen2 + TESTSUBDIRS += lib2to3/tests \ +diff --git a/configure.ac b/configure.ac +index acd98381a3..9ef0ecd42f 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3084,13 +3084,21 @@ PKG_PROG_PKG_CONFIG + AC_SUBST(DISABLED_EXTENSIONS) + + # Check for use of the system expat library +-AC_MSG_CHECKING(for --with-system-expat) +-AC_ARG_WITH(system_expat, +- AS_HELP_STRING([--with-system-expat], [build pyexpat module using an installed expat library, see Doc/library/pyexpat.rst (default is no)]), ++AC_MSG_CHECKING(for --with-expat) ++AC_ARG_WITH(expat, ++ AS_HELP_STRING([--with-expat], [select which expat version to use: system, builtin, none]), + [], +- [with_system_expat="no"]) ++ [with_expat="builtin"]) + +-AC_MSG_RESULT($with_system_expat) ++AC_MSG_RESULT($with_expat) ++ ++if test "$with_expat" != "none"; then ++ EXPAT=yes ++else ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} pyexpat" ++ EXPAT=no ++fi ++AC_SUBST(EXPAT) + + # Check for use of the system libffi library + AC_MSG_CHECKING(for --with-system-ffi) +diff --git a/setup.py b/setup.py +index 4063d7ffa5..211a160f29 100644 +--- a/setup.py ++++ b/setup.py +@@ -1666,7 +1666,7 @@ class PyBuildExt(build_ext): + # + # More information on Expat can be found at www.libexpat.org. + # +- if '--with-system-expat' in sysconfig.get_config_var("CONFIG_ARGS"): ++ if '--with-expat=system' in sysconfig.get_config_var("CONFIG_ARGS"): + expat_inc = [] + define_macros = [] + extra_compile_args = [] +-- +2.25.1 + diff --git a/package/python3/0020-Add-an-option-to-disable-CJK-codecs.patch b/package/python3/0020-Add-an-option-to-disable-CJK-codecs.patch new file mode 100644 index 00000000..4e225430 --- /dev/null +++ b/package/python3/0020-Add-an-option-to-disable-CJK-codecs.patch @@ -0,0 +1,30 @@ +From 2c0d31bb91fc7f94283c3ab632925fbbe24e94d6 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 23 Dec 2015 11:49:55 +0100 +Subject: [PATCH] Add an option to disable CJK codecs + +Signed-off-by: Thomas Petazzoni +--- + configure.ac | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 9ef0ecd42f..18e6fd70a0 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3375,6 +3375,12 @@ if test "$SQLITE3" = "no" ; then + DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _sqlite3" + fi + ++AC_ARG_ENABLE(codecs-cjk, ++ AS_HELP_STRING([--disable-codecs-cjk], [disable CJK codecs]), ++ [ if test "$enableval" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _codecs_kr _codecs_jp _codecs_cn _codecs_tw _codecs_hk _codecs_iso2022" ++ fi]) ++ + AC_SUBST(TK) + AC_ARG_ENABLE(tk, + AS_HELP_STRING([--disable-tk], [disable tk]), +-- +2.25.1 + diff --git a/package/python3/0021-Add-an-option-to-disable-NIS.patch b/package/python3/0021-Add-an-option-to-disable-NIS.patch new file mode 100644 index 00000000..9cd54df1 --- /dev/null +++ b/package/python3/0021-Add-an-option-to-disable-NIS.patch @@ -0,0 +1,33 @@ +From 2041d0c8dba87991edaf088b16e37b5189a3466d Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 23 Dec 2015 11:50:11 +0100 +Subject: [PATCH] Add an option to disable NIS + +NIS is not necessarily available in uClibc, so we need an option to +not compile support for it. + +Signed-off-by: Thomas Petazzoni +--- + configure.ac | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 18e6fd70a0..46d2a8131e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3381,6 +3381,12 @@ AC_ARG_ENABLE(codecs-cjk, + DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _codecs_kr _codecs_jp _codecs_cn _codecs_tw _codecs_hk _codecs_iso2022" + fi]) + ++AC_ARG_ENABLE(nis, ++ AS_HELP_STRING([--disable-nis], [disable NIS]), ++ [ if test "$enableval" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} nis" ++ fi]) ++ + AC_SUBST(TK) + AC_ARG_ENABLE(tk, + AS_HELP_STRING([--disable-tk], [disable tk]), +-- +2.25.1 + diff --git a/package/python3/0022-Add-an-option-to-disable-unicodedata.patch b/package/python3/0022-Add-an-option-to-disable-unicodedata.patch new file mode 100644 index 00000000..2ddf606a --- /dev/null +++ b/package/python3/0022-Add-an-option-to-disable-unicodedata.patch @@ -0,0 +1,30 @@ +From dd82a401ff6ba4ba116bf4d520e981a1808ed443 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 23 Dec 2015 11:50:27 +0100 +Subject: [PATCH] Add an option to disable unicodedata + +Signed-off-by: Thomas Petazzoni +--- + configure.ac | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 46d2a8131e..5844e3b73f 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3387,6 +3387,12 @@ AC_ARG_ENABLE(nis, + DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} nis" + fi]) + ++AC_ARG_ENABLE(unicodedata, ++ AS_HELP_STRING([--disable-unicodedata], [disable unicodedata]), ++ [ if test "$enableval" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} unicodedata" ++ fi]) ++ + AC_SUBST(TK) + AC_ARG_ENABLE(tk, + AS_HELP_STRING([--disable-tk], [disable tk]), +-- +2.25.1 + diff --git a/package/python3/0023-Add-an-option-to-disable-IDLE.patch b/package/python3/0023-Add-an-option-to-disable-IDLE.patch new file mode 100644 index 00000000..0e35eea6 --- /dev/null +++ b/package/python3/0023-Add-an-option-to-disable-IDLE.patch @@ -0,0 +1,89 @@ +From f1b15834045d0641c43014b970721df066fa71f7 Mon Sep 17 00:00:00 2001 +From: Maxime Ripard +Date: Wed, 22 Feb 2017 17:45:14 -0800 +Subject: [PATCH] Add an option to disable IDLE + +IDLE is an IDE embedded into python, written using Tk, so it doesn't make +much sense to have it into our build. + +Signed-off-by: Maxime Ripard +[ Andrey Smirnov: ported to Python 3.6 ] +Signed-off-by: Andrey Smirnov +--- + Makefile.pre.in | 7 ++++++- + configure.ac | 6 ++++++ + setup.py | 4 +++- + 3 files changed, 15 insertions(+), 2 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index e678c8817e..1148bd8708 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1372,7 +1372,9 @@ bininstall: altbininstall + -rm -f $(DESTDIR)$(LIBPC)/python3-embed.pc + (cd $(DESTDIR)$(LIBPC); $(LN) -s python-$(VERSION)-embed.pc python3-embed.pc) + -rm -f $(DESTDIR)$(BINDIR)/idle3 ++ifeq (@IDLE@,yes) + (cd $(DESTDIR)$(BINDIR); $(LN) -s idle$(VERSION) idle3) ++endif + -rm -f $(DESTDIR)$(BINDIR)/pydoc3 + ifeq (@PYDOC@,yes) + (cd $(DESTDIR)$(BINDIR); $(LN) -s pydoc$(VERSION) pydoc3) +@@ -1419,7 +1421,6 @@ LIBSUBDIRS= site-packages \ + html json http dbm xmlrpc \ + logging csv wsgiref urllib \ + ctypes ctypes/macholib \ +- idlelib idlelib/Icons \ + distutils distutils/command \ + importlib \ + turtledemo \ +@@ -1514,6 +1515,10 @@ ifeq (@EXPAT@,yes) + LIBSUBDIRS += $(XMLLIBSUBDIRS) + endif + ++ifeq (@IDLE@,yes) ++LIBSUBDIRS += idlelib idlelib/Icons ++endif ++ + ifeq (@LIB2TO3@,yes) + LIBSUBDIRS += lib2to3 lib2to3/fixes lib2to3/pgen2 + TESTSUBDIRS += lib2to3/tests \ +diff --git a/configure.ac b/configure.ac +index 5844e3b73f..7bd4623ccd 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3429,6 +3429,12 @@ AC_ARG_ENABLE(lib2to3, + AS_HELP_STRING([--disable-lib2to3], [disable lib2to3]), + [ LIB2TO3="${enableval}" ], [ LIB2TO3=yes ]) + ++AC_SUBST(IDLE) ++ ++AC_ARG_ENABLE(idle3, ++ AS_HELP_STRING([--disable-idle3], [disable idle3 IDE]), ++ [ IDLE="${enableval}" ], [ IDLE=yes ]) ++ + # Check for enable-ipv6 + AH_TEMPLATE(ENABLE_IPV6, [Define if --enable-ipv6 is specified]) + AC_MSG_CHECKING([if --enable-ipv6 is specified]) +diff --git a/setup.py b/setup.py +index 211a160f29..c4ee989ba3 100644 +--- a/setup.py ++++ b/setup.py +@@ -2566,11 +2566,13 @@ def main(): + import warnings + warnings.filterwarnings("ignore",category=DeprecationWarning) + +- scripts = ['Tools/scripts/idle3', 'Lib/smtpd.py'] ++ scripts = [ 'Lib/smtpd.py'] + if not '--disable-pydoc' in sysconfig.get_config_var("CONFIG_ARGS"): + scripts += [ 'Tools/scripts/pydoc3' ] + if not '--disable-lib2to3' in sysconfig.get_config_var("CONFIG_ARGS"): + scripts += [ 'Tools/scripts/2to3' ] ++ if not '--disable-idle3' in sysconfig.get_config_var("CONFIG_ARGS"): ++ scripts += [ 'Tools/scripts/idle3' ] + + setup(# PyPI Metadata (PEP 301) + name = "Python", +-- +2.25.1 + diff --git a/package/python3/0024-Add-an-option-to-disable-decimal.patch b/package/python3/0024-Add-an-option-to-disable-decimal.patch new file mode 100644 index 00000000..b5a12f7f --- /dev/null +++ b/package/python3/0024-Add-an-option-to-disable-decimal.patch @@ -0,0 +1,66 @@ +From d5fe81cbd51da2a84ed89d1e4c80d921d4efce26 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 23 Dec 2015 11:51:31 +0100 +Subject: [PATCH] Add an option to disable decimal + +This patch replaces the existing --with-system-libmpdec option with a +--with-libmpdec={system,builtin,none} option, which allows to tell +Python whether we want to use the system libmpdec (already installed), +the libmpdec builtin the Python sources, or no libmpdec at all. + +Signed-off-by: Thomas Petazzoni +[aduskett@gmail.com: Update for python 3.7.0] +Signed-off-by: Adam Duskett +[james.hilliard1@gmail.com: adapt to python 3.9] +Signed-off-by: James Hilliard +--- + configure.ac | 17 ++++++++++++----- + setup.py | 2 +- + 2 files changed, 13 insertions(+), 6 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 7bd4623ccd..e513ef6a20 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3135,13 +3135,20 @@ fi + AC_SUBST(LIBFFI_INCLUDEDIR) + + # Check for use of the system libmpdec library +-AC_MSG_CHECKING(for --with-system-libmpdec) +-AC_ARG_WITH(system_libmpdec, +- AS_HELP_STRING([--with-system-libmpdec], [build _decimal module using an installed libmpdec library, see Doc/library/decimal.rst (default is no)]), ++AC_MSG_CHECKING(for --with-libmpdec) ++AC_ARG_WITH(libmpdec, ++ AS_HELP_STRING([--with-libmpdec], [select which libmpdec version to use: system, builtin, none]), + [], +- [with_system_libmpdec="no"]) ++ [with_libmpdec="builtin"]) + +-AC_MSG_RESULT($with_system_libmpdec) ++AC_MSG_RESULT($with_libmpdec) ++if test "$with_libmpdec" != "none"; then ++ MPDEC=yes ++else ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _decimal" ++ MPDEC=no ++fi ++AC_SUBST(MPDEC) + + # Check whether _decimal should use a coroutine-local or thread-local context + AC_MSG_CHECKING(for --with-decimal-contextvar) +diff --git a/setup.py b/setup.py +index c4ee989ba3..3d0c74bb7f 100644 +--- a/setup.py ++++ b/setup.py +@@ -2195,7 +2195,7 @@ class PyBuildExt(build_ext): + # Stefan Krah's _decimal module + extra_compile_args = [] + undef_macros = [] +- if '--with-system-libmpdec' in sysconfig.get_config_var("CONFIG_ARGS"): ++ if '--with-libmpdec=system' in sysconfig.get_config_var("CONFIG_ARGS"): + include_dirs = [] + libraries = [':libmpdec.so.2'] + sources = ['_decimal/_decimal.c'] +-- +2.25.1 + diff --git a/package/python3/0025-Add-an-option-to-disable-the-ossaudiodev-module.patch b/package/python3/0025-Add-an-option-to-disable-the-ossaudiodev-module.patch new file mode 100644 index 00000000..0f68a083 --- /dev/null +++ b/package/python3/0025-Add-an-option-to-disable-the-ossaudiodev-module.patch @@ -0,0 +1,30 @@ +From 9bedc56d2a4b8856162650a11c1fcb6ec38f160b Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Wed, 23 Dec 2015 11:51:58 +0100 +Subject: [PATCH] Add an option to disable the ossaudiodev module + +Signed-off-by: Thomas Petazzoni +--- + configure.ac | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/configure.ac b/configure.ac +index e513ef6a20..c07505e89e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3165,6 +3165,12 @@ fi + + AC_MSG_RESULT($with_decimal_contextvar) + ++AC_ARG_ENABLE(ossaudiodev, ++ AS_HELP_STRING([--disable-ossaudiodev], [disable OSSAUDIODEV]), ++ [ if test "$enableval" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} ossaudiodev" ++ fi]) ++ + # Check for support for loadable sqlite extensions + AC_MSG_CHECKING(for --enable-loadable-sqlite-extensions) + AC_ARG_ENABLE(loadable-sqlite-extensions, +-- +2.25.1 + diff --git a/package/python3/0026-Add-an-option-to-disable-openssl-support.patch b/package/python3/0026-Add-an-option-to-disable-openssl-support.patch new file mode 100644 index 00000000..44d1d3d6 --- /dev/null +++ b/package/python3/0026-Add-an-option-to-disable-openssl-support.patch @@ -0,0 +1,30 @@ +From 90ed5c692b8b5596ca0b3ae1436276c8181251d8 Mon Sep 17 00:00:00 2001 +From: Nicolas Cavallari +Date: Wed, 22 Feb 2017 17:55:59 -0800 +Subject: [PATCH] Add an option to disable openssl support. + +Signed-off-by: Nicolas Cavallari +--- + configure.ac | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/configure.ac b/configure.ac +index c07505e89e..612e32faf5 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3406,6 +3406,12 @@ AC_ARG_ENABLE(unicodedata, + DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} unicodedata" + fi]) + ++AC_ARG_ENABLE(openssl, ++ AS_HELP_STRING([--disable-openssl], [disable openssl support]), ++ [ if test "$enableval" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} ssl _ssl _hashlib" ++ fi]) ++ + AC_SUBST(TK) + AC_ARG_ENABLE(tk, + AS_HELP_STRING([--disable-tk], [disable tk]), +-- +2.25.1 + diff --git a/package/python3/0027-Add-an-option-to-disable-the-readline-module.patch b/package/python3/0027-Add-an-option-to-disable-the-readline-module.patch new file mode 100644 index 00000000..1597a2a5 --- /dev/null +++ b/package/python3/0027-Add-an-option-to-disable-the-readline-module.patch @@ -0,0 +1,30 @@ +From 049e7a51e1ffd0d28d6608c707ab4b54e816d338 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 23:29:05 +0100 +Subject: [PATCH] Add an option to disable the readline module + +Signed-off-by: Thomas Petazzoni +--- + configure.ac | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 612e32faf5..2a6aaeff60 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3412,6 +3412,12 @@ AC_ARG_ENABLE(openssl, + DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} ssl _ssl _hashlib" + fi]) + ++AC_ARG_ENABLE(readline, ++ AS_HELP_STRING([--disable-readline], [disable readline]), ++ [ if test "$enableval" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} readline" ++ fi]) ++ + AC_SUBST(TK) + AC_ARG_ENABLE(tk, + AS_HELP_STRING([--disable-tk], [disable tk]), +-- +2.25.1 + diff --git a/package/python3/0028-Add-options-to-disable-zlib-bzip2-and-xz-modules.patch b/package/python3/0028-Add-options-to-disable-zlib-bzip2-and-xz-modules.patch new file mode 100644 index 00000000..a1d2ef32 --- /dev/null +++ b/package/python3/0028-Add-options-to-disable-zlib-bzip2-and-xz-modules.patch @@ -0,0 +1,42 @@ +From 146730a04dfe98e3d7971ebf5410801ceae88e11 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Tue, 7 Mar 2017 23:31:11 +0100 +Subject: [PATCH] Add options to disable zlib, bzip2 and xz modules + +Signed-off-by: Thomas Petazzoni +--- + configure.ac | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 2a6aaeff60..21479bbd7d 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3418,6 +3418,24 @@ AC_ARG_ENABLE(readline, + DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} readline" + fi]) + ++AC_ARG_ENABLE(bzip2, ++ AS_HELP_STRING([--disable-bzip2], [disable bzip2]), ++ [ if test "$enableval" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _bz2" ++ fi]) ++ ++AC_ARG_ENABLE(zlib, ++ AS_HELP_STRING([--disable-zlib], [disable zlib]), ++ [ if test "$enableval" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} zlib" ++ fi]) ++ ++AC_ARG_ENABLE(xz, ++ AS_HELP_STRING([--disable-xz], [disable xz]), ++ [ if test "$enableval" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _lzma" ++ fi]) ++ + AC_SUBST(TK) + AC_ARG_ENABLE(tk, + AS_HELP_STRING([--disable-tk], [disable tk]), +-- +2.25.1 + diff --git a/package/python3/0029-python-config.sh-don-t-reassign-prefix.patch b/package/python3/0029-python-config.sh-don-t-reassign-prefix.patch new file mode 100644 index 00000000..4478b401 --- /dev/null +++ b/package/python3/0029-python-config.sh-don-t-reassign-prefix.patch @@ -0,0 +1,53 @@ +From 106d9378c61e7fa9cad0a63ba068668d54cd11b8 Mon Sep 17 00:00:00 2001 +From: Matt Weber +Date: Fri, 6 Oct 2017 09:54:15 -0500 +Subject: [PATCH] python-config.sh: don't reassign ${prefix} + +When prefix is set to a path like /usr during crossbuild +the sed operations end up executing twice, once for the prefix +reassignment and another for includedir if it is set as a string +including the ${prefix} variable. This results in an issue +when the build directory is under /usr. + +This patch updates the remaining location which uses the prefix +variable to also sed and update to use the real path. + +Upstream bug report: +https://bugs.python.org/issue31713 + +Buildroot bug: +https://bugs.busybox.net/show_bug.cgi?id=10361 + +Fixes failures like the following: +dbus-python-1.2.4 | NOK | http://autobuild.buildroot.net/results/758858efa97b6273c1b470513f5492258a6d8853 + +Signed-off-by: Matthew Weber +--- + Misc/python-config.sh.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Misc/python-config.sh.in b/Misc/python-config.sh.in +index a1bc3cd5f7..164d2d3603 100644 +--- a/Misc/python-config.sh.in ++++ b/Misc/python-config.sh.in +@@ -31,7 +31,7 @@ prefix_real=$(installed_prefix "$0") + # locations. Keep prefix & exec_prefix using their original values in case + # they are referenced in other configure variables, to prevent double + # substitution, issue #22140. +-prefix=$(echo "$prefix_build" | sed "s#^$prefix_build#$prefix_real#") ++prefix=$prefix_build + exec_prefix=$(echo "$exec_prefix_build" | sed "s#^$exec_prefix_build#$prefix_real#") + exec_prefix_real=${prefix_real} + includedir=$(echo "@includedir@" | sed "s#^$prefix_build#$prefix_real#") +@@ -49,7 +49,7 @@ LDLIBRARY="@LDLIBRARY@" + OPT="@OPT@" + PY_ENABLE_SHARED="@PY_ENABLE_SHARED@" + LDVERSION="@LDVERSION@" +-LIBDEST=${prefix_real}/lib/python${VERSION} ++LIBDEST=$( echo "${prefix}/lib/python${VERSION}" | sed "s#^$prefix_build#$prefix_real#") + LIBPL=$(echo "@LIBPL@" | sed "s#^$prefix_build#$prefix_real#") + SO="@EXT_SUFFIX@" + PYTHONFRAMEWORK="@PYTHONFRAMEWORK@" +-- +2.25.1 + diff --git a/package/python3/0030-Fix-cross-compiling-the-uuid-module.patch b/package/python3/0030-Fix-cross-compiling-the-uuid-module.patch new file mode 100644 index 00000000..1bf5fc6d --- /dev/null +++ b/package/python3/0030-Fix-cross-compiling-the-uuid-module.patch @@ -0,0 +1,38 @@ +From d7b90b157eddefbd0ed59e35c90b083c0c03b644 Mon Sep 17 00:00:00 2001 +From: Adam Duskett +Date: Fri, 20 Jul 2018 10:17:39 -0400 +Subject: [PATCH] Fix cross compiling the uuid module + +Python 3.7 has a new _uuid module, however, the include directory +search path for uuid.h is hardcoded to /usr/include/uuid, which should +not be used when cross-compiling. + +To fix this, use the same solution as the one used by the NIS +detection: append "uuid" to each of the include directories in +"inc_dirs", instead of hardcoding /usr/include/uuid. + +Signed-off-by: Adam Duskett +[Thomas: drop STAGING_DIR based solution, use a solution similar to +the one used for the NIS detection.] +Signed-off-by: Thomas Petazzoni +--- + setup.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/setup.py b/setup.py +index 3d0c74bb7f..c7be85f352 100644 +--- a/setup.py ++++ b/setup.py +@@ -1764,7 +1764,8 @@ class PyBuildExt(build_ext): + + def detect_uuid(self): + # Build the _uuid module if possible +- uuid_incs = find_file("uuid.h", self.inc_dirs, ["/usr/include/uuid"]) ++ uuid_incs = find_file("uuid.h", self.inc_dirs, ++ [os.path.join(inc_dir, 'uuid') for inc_dir in self.inc_dirs]) + if uuid_incs is not None: + if self.compiler.find_library_file(self.lib_dirs, 'uuid'): + uuid_libs = ['uuid'] +-- +2.25.1 + diff --git a/package/python3/0031-Add-an-option-to-disable-uuid-module.patch b/package/python3/0031-Add-an-option-to-disable-uuid-module.patch new file mode 100644 index 00000000..92b24b21 --- /dev/null +++ b/package/python3/0031-Add-an-option-to-disable-uuid-module.patch @@ -0,0 +1,33 @@ +From 3bb693408eda77dda145ec5fecee56ea73031e9f Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sat, 18 Aug 2018 10:54:56 +0200 +Subject: [PATCH] Add an option to disable uuid module + +Signed-off-by: Thomas Petazzoni +--- + configure.ac | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 21479bbd7d..615c16aced 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3454,6 +3454,15 @@ if test "$CURSES" = "no"; then + DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _curses _curses_panel" + fi + ++AC_SUBST(UUID) ++AC_ARG_ENABLE(uuid, ++ AS_HELP_STRING([--disable-uuid], [disable uuid]), ++ [ UUID="${enableval}" ], [ UUID=yes ]) ++ ++if test "$UUID" = "no"; then ++ DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _uuid" ++fi ++ + AC_SUBST(PYDOC) + + AC_ARG_ENABLE(pydoc, +-- +2.25.1 + diff --git a/package/python3/0032-fix-building-on-older-distributions.patch b/package/python3/0032-fix-building-on-older-distributions.patch new file mode 100644 index 00000000..fb59e593 --- /dev/null +++ b/package/python3/0032-fix-building-on-older-distributions.patch @@ -0,0 +1,38 @@ +From 94c62f96ca61f1a28124c837d7ec5ed0b9ae8786 Mon Sep 17 00:00:00 2001 +From: Adam Duskett +Date: Thu, 16 Aug 2018 14:52:37 -0700 +Subject: [PATCH] fix building on older distributions + +Python > 3.6.3 calls os.replace in the update_file.py script, during the +regen-importlib phase of the build process. + +According to Doc/whatsnew/3.3.rst line 1631, os.replace acts in the same +way as os.rename, however, it is now cross-platform compatible for Windows. + +Because BuildRoot is guaranteed only to be built in POSIX environment, it is +safe to change os.replace back to os.rename. + +This change fixes building on older systems such as CentOS7, that only come +with python 2. + +Signed-off-by: Adam Duskett +--- + Tools/scripts/update_file.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Tools/scripts/update_file.py b/Tools/scripts/update_file.py +index 224585c69b..ef458c0c63 100644 +--- a/Tools/scripts/update_file.py ++++ b/Tools/scripts/update_file.py +@@ -16,7 +16,7 @@ def main(old_path, new_path): + with open(new_path, 'rb') as f: + new_contents = f.read() + if old_contents != new_contents: +- os.replace(new_path, old_path) ++ os.rename(new_path, old_path) + else: + os.unlink(new_path) + +-- +2.25.1 + diff --git a/package/python3/0033-configure.ac-fixup-CC-print-multiarch-output-for-mus.patch b/package/python3/0033-configure.ac-fixup-CC-print-multiarch-output-for-mus.patch new file mode 100644 index 00000000..f70990b2 --- /dev/null +++ b/package/python3/0033-configure.ac-fixup-CC-print-multiarch-output-for-mus.patch @@ -0,0 +1,48 @@ +From edc0757c56090364e0a95aabfa9f645a16a27569 Mon Sep 17 00:00:00 2001 +From: Peter Korsgaard +Date: Fri, 2 Aug 2019 15:53:16 +0200 +Subject: [PATCH] configure.ac: fixup $CC --print-multiarch output for + musl/uclibc GCC 8+ toolchains + +GCC commit 6834b83784dcf0364eb820e8 (multiarch support for non-glibc linux +systems), which is part of GCC 8+, changed the multiarch logic to use +$arch-linux-musl / $arch-linux-uclibc rather than $arch-linux-gnu. + +This then causes the python3 configure script to error out: + +checking for the platform triplet based on compiler characteristics... powerpc-linux-gnu +configure: error: internal configure error for the platform triplet, please file a bug report + +http://autobuild.buildroot.net/results/cb4/cb49c539501342e45cbe5ade82e588fcdf51f05b + +As it requires that the --print-multiarch output (if not empty) matches the +deduced triplet (which always uses -linux-gnu). + +It isn't quite clear why --print-multiarch returns something for a +non-multiarch toolchain on some architectures (E.G. PowerPC), but as a +workaround, rewrite the --print-multiarch output to match older GCC versions +to keep the configure script happy. + +Signed-off-by: Peter Korsgaard +--- + configure.ac | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 615c16aced..241298e6cf 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -727,7 +727,9 @@ then + fi + + +-MULTIARCH=$($CC --print-multiarch 2>/dev/null) ++# GCC 8+ returns $arch-linux-{musl,uclibc} for musl/uClibc based ++# toolchains confusing python. Fix that up ++MULTIARCH=$($CC --print-multiarch 2>/dev/null | sed -E 's/-linux-(musl|uclibc)*$/-linux-gnu/') + AC_SUBST(MULTIARCH) + + AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) +-- +2.25.1 + diff --git a/package/python3/0034-lib-crypt-uClibc-ng-doesn-t-set-errno-when-encryptio.patch b/package/python3/0034-lib-crypt-uClibc-ng-doesn-t-set-errno-when-encryptio.patch new file mode 100644 index 00000000..880277eb --- /dev/null +++ b/package/python3/0034-lib-crypt-uClibc-ng-doesn-t-set-errno-when-encryptio.patch @@ -0,0 +1,40 @@ +From 3c83eedcc2df3ecf6c4a17953ca24dff60c1378e Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Thu, 12 Nov 2020 00:16:18 +0100 +Subject: [PATCH] lib/crypt: uClibc-ng doesn't set errno when encryption method + is not available + +Since commit [1] in cpython, an exception is raised when an encryption method +is not available. This eception is handled only if errno is set to EINVAL by +crypt() but uClibc-ng doesn't set errno in crypt() [2]. + +Fixes: +https://gitlab.com/buildroot.org/buildroot/-/jobs/830981961 +https://gitlab.com/buildroot.org/buildroot/-/jobs/830981979 + +[1] https://github.com/python/cpython/commit/0d3fe8ae4961bf551e7d5e42559e2ede1a08fd7c +[2] https://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/tree/libcrypt/crypt.c?h=v1.0.36#n29 + +Signed-off-by: Romain Naour +--- + Lib/crypt.py | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/Lib/crypt.py b/Lib/crypt.py +index 33dbc46bb3..4692a5270c 100644 +--- a/Lib/crypt.py ++++ b/Lib/crypt.py +@@ -94,7 +94,9 @@ def _add_method(name, *args, rounds=None): + result = crypt('', salt) + except OSError as e: + # Not all libc libraries support all encryption methods. +- if e.errno == errno.EINVAL: ++ # Not all libc libraries set errno when encryption method is not ++ # available. ++ if e.errno == errno.EINVAL or e.errno == 0: + return False + raise + if result and len(result) == method.total_size: +-- +2.25.4 + diff --git a/package/python3/0036-Fix-dictionary-iteration-error-in-_ExecutorManagerTh.patch b/package/python3/0036-Fix-dictionary-iteration-error-in-_ExecutorManagerTh.patch new file mode 100644 index 00000000..fbe44c77 --- /dev/null +++ b/package/python3/0036-Fix-dictionary-iteration-error-in-_ExecutorManagerTh.patch @@ -0,0 +1,29 @@ +From 331966be70c371b268a4fcce9e97280cd869f137 Mon Sep 17 00:00:00 2001 +From: Jakub Kulik +Date: Mon, 15 Mar 2021 08:49:28 +0100 +Subject: [PATCH] Fix dictionary iteration error in _ExecutorManagerThread + +[Thomas: Taken from upstream pull request +https://github.com/python/cpython/pull/24868, which is aimed at fixing +https://bugs.python.org/issue43498] +Signed-off-by: Thomas Petazzoni +--- + Lib/concurrent/futures/process.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Lib/concurrent/futures/process.py b/Lib/concurrent/futures/process.py +index 90bc98bf2ec..e3b36dff572 100644 +--- a/Lib/concurrent/futures/process.py ++++ b/Lib/concurrent/futures/process.py +@@ -373,7 +373,7 @@ class _ExecutorManagerThread(threading.Thread): + assert not self.thread_wakeup._closed + wakeup_reader = self.thread_wakeup._reader + readers = [result_reader, wakeup_reader] +- worker_sentinels = [p.sentinel for p in self.processes.values()] ++ worker_sentinels = [p.sentinel for p in self.processes.copy().values()] + ready = mp.connection.wait(readers + worker_sentinels) + + cause = None +-- +2.31.1 + diff --git a/package/python3/Config.in b/package/python3/Config.in new file mode 100644 index 00000000..3a9dd4b2 --- /dev/null +++ b/package/python3/Config.in @@ -0,0 +1,123 @@ +comment "python3 needs a toolchain w/ wchar, threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS + +config BR2_PACKAGE_PYTHON3 + bool "python3" + depends on !BR2_PACKAGE_PYTHON + depends on BR2_USE_WCHAR + # uses fork() + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_THREADS # libffi + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_LIBFFI + select BR2_PACKAGE_BLUEZ5_UTILS_HEADERS if BR2_PACKAGE_BLUEZ5_UTILS + help + The python language interpreter. + + http://www.python.org/ + +if BR2_PACKAGE_PYTHON3 + +choice + prompt "python3 module format to install" + default BR2_PACKAGE_PYTHON3_PYC_ONLY + help + Select Python module format to install on target (py, pyc or + both) + +config BR2_PACKAGE_PYTHON3_PY_ONLY + bool ".py sources only" + +config BR2_PACKAGE_PYTHON3_PYC_ONLY + bool ".pyc compiled sources only" + +config BR2_PACKAGE_PYTHON3_PY_PYC + bool ".py sources and .pyc compiled" + +endchoice + +menu "core python3 modules" + +comment "The following modules are unusual or require extra libraries" + +config BR2_PACKAGE_PYTHON3_2TO3 + bool "2to3 module" + help + code translation from python 2 to 3 + +config BR2_PACKAGE_PYTHON3_BZIP2 + bool "bz2 module" + select BR2_PACKAGE_BZIP2 + help + bzip2 module for Python3 + +config BR2_PACKAGE_PYTHON3_CODECSCJK + bool "codecscjk module" + help + Chinese/Japanese/Korean codecs module for Python (large). + +config BR2_PACKAGE_PYTHON3_CURSES + bool "curses module" + select BR2_PACKAGE_NCURSES + help + curses module for Python3. + +config BR2_PACKAGE_PYTHON3_DECIMAL + bool "decimal module" + select BR2_PACKAGE_MPDECIMAL + help + decimal module for Python3. + +config BR2_PACKAGE_PYTHON3_OSSAUDIODEV + bool "ossaudiodev module" + help + ossaudiodev module for Python3. + +config BR2_PACKAGE_PYTHON3_READLINE + bool "readline" + select BR2_PACKAGE_READLINE + help + readline module for Python3 (required for command-line + editing in the Python shell). + +config BR2_PACKAGE_PYTHON3_SSL + bool "ssl" + select BR2_PACKAGE_OPENSSL + help + _ssl module for Python3 (required for https in urllib etc). + +config BR2_PACKAGE_PYTHON3_UNICODEDATA + bool "unicodedata module" + default y + help + Unicode character database (used by stringprep module) + (large). + +config BR2_PACKAGE_PYTHON3_SQLITE + bool "sqlite module" + select BR2_PACKAGE_SQLITE + help + SQLite database support + +config BR2_PACKAGE_PYTHON3_PYEXPAT + bool "xml module" + select BR2_PACKAGE_EXPAT + help + pyexpat and xml libraries for Python3. + +config BR2_PACKAGE_PYTHON3_XZ + bool "xz module" + select BR2_PACKAGE_XZ + help + xz (a.k.a lzma) module for Python3 + +config BR2_PACKAGE_PYTHON3_ZLIB + bool "zlib module" + select BR2_PACKAGE_ZLIB + help + zlib support in Python3 + +endmenu + +endif diff --git a/package/python3/Config.in.host b/package/python3/Config.in.host new file mode 100644 index 00000000..70b5dacd --- /dev/null +++ b/package/python3/Config.in.host @@ -0,0 +1,16 @@ +config BR2_PACKAGE_HOST_PYTHON3 + bool "host python3" + help + The python language interpreter. Host package. + + http://www.python.org/ + +if BR2_PACKAGE_HOST_PYTHON3 + +config BR2_PACKAGE_HOST_PYTHON3_SSL + bool "ssl" + select BR2_PACKAGE_HOST_OPENSSL + help + _ssl module for host Python3. + +endif diff --git a/package/python3/python3.hash b/package/python3/python3.hash new file mode 100644 index 00000000..36e89a06 --- /dev/null +++ b/package/python3/python3.hash @@ -0,0 +1,5 @@ +# From https://www.python.org/downloads/release/python-396/ +md5 ecc29a7688f86e550d29dba2ee66cf80 Python-3.9.6.tar.xz +# Locally computed +sha256 397920af33efc5b97f2e0b57e91923512ef89fc5b3c1d21dbfc8c4828ce0108a Python-3.9.6.tar.xz +sha256 599826df92bfdcd2702eac691072498bb096c55af04ee984cf90f70ed77b5a70 LICENSE diff --git a/package/python3/python3.mk b/package/python3/python3.mk new file mode 100644 index 00000000..c289d41d --- /dev/null +++ b/package/python3/python3.mk @@ -0,0 +1,327 @@ +################################################################################ +# +# python3 +# +################################################################################ + +PYTHON3_VERSION_MAJOR = 3.9 +PYTHON3_VERSION = $(PYTHON3_VERSION_MAJOR).6 +PYTHON3_SOURCE = Python-$(PYTHON3_VERSION).tar.xz +PYTHON3_SITE = https://python.org/ftp/python/$(PYTHON3_VERSION) +PYTHON3_LICENSE = Python-2.0, others +PYTHON3_LICENSE_FILES = LICENSE +PYTHON3_CPE_ID_VENDOR = python +PYTHON3_CPE_ID_PRODUCT = python + +# This host Python is installed in $(HOST_DIR), as it is needed when +# cross-compiling third-party Python modules. + +HOST_PYTHON3_CONF_OPTS += \ + --without-ensurepip \ + --without-cxx-main \ + --disable-sqlite3 \ + --disable-tk \ + --with-expat=system \ + --disable-curses \ + --disable-codecs-cjk \ + --disable-nis \ + --enable-unicodedata \ + --disable-test-modules \ + --disable-idle3 \ + --disable-ossaudiodev + +# Make sure that LD_LIBRARY_PATH overrides -rpath. +# This is needed because libpython may be installed at the same time that +# python is called. +# Make python believe we don't have 'hg', so that it doesn't try to +# communicate over the network during the build. +HOST_PYTHON3_CONF_ENV += \ + LDFLAGS="$(HOST_LDFLAGS) -Wl,--enable-new-dtags" \ + ac_cv_prog_HAS_HG=/bin/false + +PYTHON3_DEPENDENCIES = host-python3 libffi + +HOST_PYTHON3_DEPENDENCIES = host-autoconf-archive host-expat host-zlib host-libffi + +ifeq ($(BR2_PACKAGE_HOST_PYTHON3_SSL),y) +HOST_PYTHON3_DEPENDENCIES += host-openssl +else +HOST_PYTHON3_CONF_OPTS += --disable-openssl +endif + +PYTHON3_INSTALL_STAGING = YES + +ifeq ($(BR2_PACKAGE_PYTHON3_2TO3),y) +PYTHON3_CONF_OPTS += --enable-lib2to3 +else +PYTHON3_CONF_OPTS += --disable-lib2to3 +endif + +ifeq ($(BR2_PACKAGE_PYTHON3_READLINE),y) +PYTHON3_DEPENDENCIES += readline +else +PYTHON3_CONF_OPTS += --disable-readline +endif + +ifeq ($(BR2_PACKAGE_PYTHON3_CURSES),y) +PYTHON3_DEPENDENCIES += ncurses +else +PYTHON3_CONF_OPTS += --disable-curses +endif + +ifeq ($(BR2_PACKAGE_PYTHON3_DECIMAL),y) +PYTHON3_DEPENDENCIES += mpdecimal +PYTHON3_CONF_OPTS += --with-libmpdec=system +else +PYTHON3_CONF_OPTS += --with-libmpdec=none +endif + +ifeq ($(BR2_PACKAGE_PYTHON3_PYEXPAT),y) +PYTHON3_DEPENDENCIES += expat +PYTHON3_CONF_OPTS += --with-expat=system +else +PYTHON3_CONF_OPTS += --with-expat=none +endif + +ifeq ($(BR2_PACKAGE_PYTHON3_SQLITE),y) +PYTHON3_DEPENDENCIES += sqlite +else +PYTHON3_CONF_OPTS += --disable-sqlite3 +endif + +ifeq ($(BR2_PACKAGE_PYTHON3_SSL),y) +PYTHON3_DEPENDENCIES += openssl +else +PYTHON3_CONF_OPTS += --disable-openssl +endif + +ifneq ($(BR2_PACKAGE_PYTHON3_CODECSCJK),y) +PYTHON3_CONF_OPTS += --disable-codecs-cjk +endif + +ifneq ($(BR2_PACKAGE_PYTHON3_UNICODEDATA),y) +PYTHON3_CONF_OPTS += --disable-unicodedata +endif + +# Disable auto-detection of uuid.h (util-linux) +# which would add _uuid module support, instead +# default to the pure python implementation +PYTHON3_CONF_OPTS += --disable-uuid + +ifeq ($(BR2_PACKAGE_PYTHON3_BZIP2),y) +PYTHON3_DEPENDENCIES += bzip2 +else +PYTHON3_CONF_OPTS += --disable-bzip2 +endif + +ifeq ($(BR2_PACKAGE_PYTHON3_XZ),y) +PYTHON3_DEPENDENCIES += xz +else +PYTHON3_CONF_OPTS += --disable-xz +endif + +ifeq ($(BR2_PACKAGE_PYTHON3_ZLIB),y) +PYTHON3_DEPENDENCIES += zlib +else +PYTHON3_CONF_OPTS += --disable-zlib +endif + +ifeq ($(BR2_PACKAGE_PYTHON3_OSSAUDIODEV),y) +PYTHON3_CONF_OPTS += --enable-ossaudiodev +else +PYTHON3_CONF_OPTS += --disable-ossaudiodev +endif + +# Make python believe we don't have 'hg', so that it doesn't try to +# communicate over the network during the build. +PYTHON3_CONF_ENV += \ + ac_cv_have_long_long_format=yes \ + ac_cv_file__dev_ptmx=yes \ + ac_cv_file__dev_ptc=yes \ + ac_cv_working_tzset=yes \ + ac_cv_prog_HAS_HG=/bin/false + +# GCC is always compliant with IEEE754 +ifeq ($(BR2_ENDIAN),"LITTLE") +PYTHON3_CONF_ENV += ac_cv_little_endian_double=yes +else +PYTHON3_CONF_ENV += ac_cv_big_endian_double=yes +endif + +# uClibc is known to have a broken wcsftime() implementation, so tell +# Python 3 to fall back to strftime() instead. +ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y) +PYTHON3_CONF_ENV += ac_cv_func_wcsftime=no +endif + +ifeq ($(BR2_PACKAGE_GETTEXT_PROVIDES_LIBINTL),y) +PYTHON3_DEPENDENCIES += gettext +endif + +PYTHON3_CONF_OPTS += \ + --without-ensurepip \ + --without-cxx-main \ + --with-system-ffi \ + --disable-pydoc \ + --disable-test-modules \ + --disable-tk \ + --disable-nis \ + --disable-idle3 \ + --disable-pyc-build + +# +# Some of CPython's source code is generated using Python interpreter +# and some helper tools such as "Programs/_freeze_importlib" or +# "Parser/pgen" (look for regen-* targets in Makefile.pre.in for more +# info). Normally CPython codebase ships with those files +# pre-generated, so just regular "make" with no additional steps +# should be sufficient for a succesfull build, however due to +# Buildroot's "Add importlib fix for PEP 3147 issue" custom patch we +# end up modifying "Lib/importlib/_bootstrap_external.py" which means +# we have to do "regen-importlib" step before building CPython +# (Importlib is a builtin module that needs to be "frozen"/converted +# to a C array of bytecode using "Programs/_freeze_importlib") +# +# To achive that we add pre-build steps to host-python3 as well as +# python3 that execute "regen-importlib" target. +# +# Unfortunately, for the target Python, "Programs/_freeze_importlib" +# is built for the target, while we need to run them at build time. So +# when installing host-python3, we copy them to $(HOST_DIR)/bin... +# +define HOST_PYTHON3_MAKE_REGEN_IMPORTLIB + $(HOST_MAKE_ENV) $(PYTHON3_CONF_ENV) $(MAKE) $(HOST_CONFIGURE_OPTS) -C $(@D) regen-importlib + cp $(@D)/Programs/_freeze_importlib $(HOST_DIR)/bin/python-freeze-importlib +endef + +HOST_PYTHON3_PRE_BUILD_HOOKS += HOST_PYTHON3_MAKE_REGEN_IMPORTLIB +# +# ... And then, when building the target python we first buid +# 'Programs/_freeze_importlib' to force GNU Make to update all of the +# prerequisites of 'Programs/_freeze_importlib', then copy our stashed +# "host-usable" version over the one that was just build and then +# build "regen-importlib" target +# +define PYTHON3_MAKE_REGEN_IMPORTLIB + $(TARGET_MAKE_ENV) $(PYTHON3_CONF_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) Programs/_freeze_importlib + cp $(HOST_DIR)/bin/python-freeze-importlib $(@D)/Programs/_freeze_importlib + $(TARGET_MAKE_ENV) $(PYTHON3_CONF_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) regen-importlib +endef + +PYTHON3_PRE_BUILD_HOOKS += PYTHON3_MAKE_REGEN_IMPORTLIB + +# +# Remove useless files. In the config/ directory, only the Makefile +# and the pyconfig.h files are needed at runtime. +# +define PYTHON3_REMOVE_USELESS_FILES + rm -f $(TARGET_DIR)/usr/bin/python$(PYTHON3_VERSION_MAJOR)-config + rm -f $(TARGET_DIR)/usr/bin/python$(PYTHON3_VERSION_MAJOR)m-config + rm -f $(TARGET_DIR)/usr/bin/python3-config + rm -f $(TARGET_DIR)/usr/bin/smtpd.py.3 + rm -f $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/distutils/command/wininst*.exe + for i in `find $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/config-$(PYTHON3_VERSION_MAJOR)m-*/ \ + -type f -not -name Makefile` ; do \ + rm -f $$i ; \ + done + rm -rf $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/__pycache__/ + rm -rf $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/lib-dynload/sysconfigdata/__pycache__ + rm -rf $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/collections/__pycache__ + rm -rf $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/importlib/__pycache__ +endef + +PYTHON3_POST_INSTALL_TARGET_HOOKS += PYTHON3_REMOVE_USELESS_FILES + +# +# Make sure libpython gets stripped out on target +# +define PYTHON3_ENSURE_LIBPYTHON_STRIPPED + chmod u+w $(TARGET_DIR)/usr/lib/libpython$(PYTHON3_VERSION_MAJOR)*.so +endef + +PYTHON3_POST_INSTALL_TARGET_HOOKS += PYTHON3_ENSURE_LIBPYTHON_STRIPPED + +PYTHON3_AUTORECONF = YES +PYTHON3_AUTORECONF_OPTS = --include=$(HOST_DIR)/share/autoconf-archive + +define PYTHON3_INSTALL_SYMLINK + ln -fs python3 $(TARGET_DIR)/usr/bin/python +endef + +ifneq ($(BR2_PACKAGE_PYTHON),y) +PYTHON3_POST_INSTALL_TARGET_HOOKS += PYTHON3_INSTALL_SYMLINK +endif + +# Some packages may have build scripts requiring python3, whatever is the +# python version chosen for the target. +# Only install the python symlink in the host tree if python3 is enabled +# for the target. +ifeq ($(BR2_PACKAGE_PYTHON3),y) +define HOST_PYTHON3_INSTALL_SYMLINK + ln -fs python3 $(HOST_DIR)/bin/python + ln -fs python3-config $(HOST_DIR)/bin/python-config +endef + +HOST_PYTHON3_POST_INSTALL_HOOKS += HOST_PYTHON3_INSTALL_SYMLINK +endif + +# Provided to other packages +PYTHON3_PATH = $(STAGING_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/ + +# Support for socket.AF_BLUETOOTH +ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS_HEADERS),y) +PYTHON3_DEPENDENCIES += bluez5_utils-headers +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) + +ifeq ($(BR2_REPRODUCIBLE),y) +define PYTHON3_FIX_TIME + find $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR) -name '*.py' -print0 | \ + xargs -0 --no-run-if-empty touch -d @$(SOURCE_DATE_EPOCH) +endef +endif + +define PYTHON3_CREATE_PYC_FILES + $(PYTHON3_FIX_TIME) + PYTHONPATH="$(PYTHON3_PATH)" \ + $(HOST_DIR)/bin/python$(PYTHON3_VERSION_MAJOR) \ + $(TOPDIR)/support/scripts/pycompile.py \ + $(if $(VERBOSE),--verbose) \ + --strip-root $(TARGET_DIR) \ + $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR) +endef + +ifeq ($(BR2_PACKAGE_PYTHON3_PYC_ONLY)$(BR2_PACKAGE_PYTHON3_PY_PYC),y) +PYTHON3_TARGET_FINALIZE_HOOKS += PYTHON3_CREATE_PYC_FILES +endif + +ifeq ($(BR2_PACKAGE_PYTHON3_PYC_ONLY),y) +define PYTHON3_REMOVE_PY_FILES + find $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR) -name '*.py' \ + $(if $(strip $(KEEP_PYTHON_PY_FILES)),-not \( $(call finddirclauses,$(TARGET_DIR),$(KEEP_PYTHON_PY_FILES)) \) ) \ + -print0 | \ + xargs -0 --no-run-if-empty rm -f +endef +PYTHON3_TARGET_FINALIZE_HOOKS += PYTHON3_REMOVE_PY_FILES +endif + +# Normally, *.pyc files should not have been compiled, but just in +# case, we make sure we remove all of them. +ifeq ($(BR2_PACKAGE_PYTHON3_PY_ONLY),y) +define PYTHON3_REMOVE_PYC_FILES + find $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR) -name '*.pyc' -print0 | \ + xargs -0 --no-run-if-empty rm -f +endef +PYTHON3_TARGET_FINALIZE_HOOKS += PYTHON3_REMOVE_PYC_FILES +endif + +# In all cases, we don't want to keep the optimized .opt-1.pyc and +# .opt-2.pyc files, since they can't work without their non-optimized +# variant. +define PYTHON3_REMOVE_OPTIMIZED_PYC_FILES + find $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR) -name '*.opt-1.pyc' -print0 -o -name '*.opt-2.pyc' -print0 | \ + xargs -0 --no-run-if-empty rm -f +endef +PYTHON3_TARGET_FINALIZE_HOOKS += PYTHON3_REMOVE_OPTIMIZED_PYC_FILES diff --git a/package/qcom-db410c-firmware/Config.in b/package/qcom-db410c-firmware/Config.in new file mode 100644 index 00000000..9f688574 --- /dev/null +++ b/package/qcom-db410c-firmware/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_QCOM_DB410C_FIRMWARE + bool "qcom-db410c-firmware" + select BR2_PACKAGE_HOST_MTOOLS + help + Wifi/BT firmware for Qualcomm Dragonboard 410c SBC. + + https://releases.linaro.org/96boards/dragonboard410c/qualcomm/firmware/ diff --git a/package/qcom-db410c-firmware/qcom-db410c-firmware.hash b/package/qcom-db410c-firmware/qcom-db410c-firmware.hash new file mode 100644 index 00000000..e8ac31eb --- /dev/null +++ b/package/qcom-db410c-firmware/qcom-db410c-firmware.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 46953b974c5c58c7ca66db414437c0268b033ac9d28127e98d9c4e1a49359da5 linux-board-support-package-r1034.2.1.zip +sha256 11e60ad6f83c2a86e40dca374c24230b53650dd3e0adf2e72c15f8cafedc2e5a LICENSE diff --git a/package/qcom-db410c-firmware/qcom-db410c-firmware.mk b/package/qcom-db410c-firmware/qcom-db410c-firmware.mk new file mode 100644 index 00000000..9ef32cc9 --- /dev/null +++ b/package/qcom-db410c-firmware/qcom-db410c-firmware.mk @@ -0,0 +1,41 @@ +################################################################################ +# +# qcom-db410c-firmware +# +################################################################################ + +QCOM_DB410C_FIRMWARE_VERSION = 1034.2.1 +QCOM_DB410C_FIRMWARE_BASE = linux-board-support-package-r$(QCOM_DB410C_FIRMWARE_VERSION) +QCOM_DB410C_FIRMWARE_SOURCE = $(QCOM_DB410C_FIRMWARE_BASE).zip +QCOM_DB410C_FIRMWARE_SITE = https://releases.linaro.org/96boards/dragonboard410c/qualcomm/firmware +QCOM_DB410C_FIRMWARE_LICENCE = Qualcomm firmware license +QCOM_DB410C_FIRMWARE_LICENSE_FILES = LICENSE +QCOM_DB410C_FIRMWARE_DEPENDENCIES = host-mtools + +define QCOM_DB410C_FIRMWARE_EXTRACT_CMDS + $(UNZIP) -d $(@D) \ + $(QCOM_DB410C_FIRMWARE_DL_DIR)/$(QCOM_DB410C_FIRMWARE_SOURCE) + mv $(@D)/$(QCOM_DB410C_FIRMWARE_BASE)/* $(@D) + rmdir $(@D)/$(QCOM_DB410C_FIRMWARE_BASE) +endef + +# Install the Wifi/Bt firmware blobs to target. These commands are +# based on firmware-qcom-dragonboard410c_*.bb in the OpenEmbedded +# meta-qcom layer, see https://github.com/ndechesne/meta-qcom +define QCOM_DB410C_FIRMWARE_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0644 \ + $(@D)/efs-seed/fs_image_linux.tar.gz.mbn.img \ + $(TARGET_DIR)/boot/modem_fsg + + $(INSTALL) -d $(TARGET_DIR)/lib/firmware + cp -r $(@D)/proprietary-linux/wlan \ + $(TARGET_DIR)/lib/firmware/ + + $(INSTALL) -d $(TARGET_DIR)/lib/firmware/qcom/msm8916 + MTOOLS_SKIP_CHECK=1 $(HOST_DIR)/bin/mcopy -n -i \ + $(@D)/bootloaders-linux/NON-HLOS.bin \ + ::image/modem.* ::image/mba.mbn ::image/wcnss.* \ + $(TARGET_DIR)/lib/firmware/qcom/msm8916 +endef + +$(eval $(generic-package)) diff --git a/package/qdecoder/Config.in b/package/qdecoder/Config.in new file mode 100644 index 00000000..48738776 --- /dev/null +++ b/package/qdecoder/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_QDECODER + bool "qdecoder" + depends on !BR2_STATIC_LIBS + help + qDecoder is a simple and powerful CGI library + for the C/C++ programming language. + + http://wolkykim.github.io/qdecoder diff --git a/package/qdecoder/qdecoder.hash b/package/qdecoder/qdecoder.hash new file mode 100644 index 00000000..e3fb8375 --- /dev/null +++ b/package/qdecoder/qdecoder.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 3911576ad8766697a9c8c767458edc953ae686eb53cd31d21e38edd7831ed9aa qdecoder-12.0.8.tar.gz +sha256 17e647523e5c5c75fd02861dcf3ea91a146d918ab303460ee58135c9dd70904e COPYING diff --git a/package/qdecoder/qdecoder.mk b/package/qdecoder/qdecoder.mk new file mode 100644 index 00000000..12784fc4 --- /dev/null +++ b/package/qdecoder/qdecoder.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# qdecoder +# +################################################################################ + +QDECODER_VERSION = 12.0.8 +QDECODER_SITE = $(call github,wolkykim,qdecoder,v$(QDECODER_VERSION)) +QDECODER_LICENSE = BSD-2 +QDECODER_LICENSE_FILES = COPYING +QDECODER_CONF_ENV = ac_cv_prog_cc_c99='-std=gnu99' + +QDECODER_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/qemu/0001-user-exec-fix-usage-of-mcontext-structure-on-ARM-uCl.patch b/package/qemu/0001-user-exec-fix-usage-of-mcontext-structure-on-ARM-uCl.patch new file mode 100644 index 00000000..84170899 --- /dev/null +++ b/package/qemu/0001-user-exec-fix-usage-of-mcontext-structure-on-ARM-uCl.patch @@ -0,0 +1,35 @@ +From 923d25365fbdff17fa4c8c2883960be07c3dad56 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Fri, 5 May 2017 09:07:15 +0200 +Subject: [PATCH] user-exec: fix usage of mcontext structure on ARM/uClibc + +user-exec.c has some conditional code to decide how to use the +mcontext structure. Unfortunately, since uClibc defines __GLIBC__, but +with old versions of __GLIBC__ and __GLIBC_MINOR__, an old code path +gets used, which doesn't apply to uClibc. + +Fix this by excluding __UCLIBC__, which ensures we fall back to the +general case of using uc_mcontext.arm_pc, which works fine with +uClibc. + +Signed-off-by: Thomas Petazzoni +--- + accel/tcg/user-exec.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/accel/tcg/user-exec.c b/accel/tcg/user-exec.c +index 4ebe25461a..0496674fbd 100644 +--- a/accel/tcg/user-exec.c ++++ b/accel/tcg/user-exec.c +@@ -536,7 +536,7 @@ int cpu_signal_handler(int host_signum, void *pinfo, + + #if defined(__NetBSD__) + pc = uc->uc_mcontext.__gregs[_REG_R15]; +-#elif defined(__GLIBC__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ <= 3)) ++#elif defined(__GLIBC__) && !defined(__UCLIBC__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ <= 3)) + pc = uc->uc_mcontext.gregs[R15]; + #else + pc = uc->uc_mcontext.arm_pc; +-- +2.25.3 + diff --git a/package/qemu/0002-Fix-build-with-64-bits-time_t.patch b/package/qemu/0002-Fix-build-with-64-bits-time_t.patch new file mode 100644 index 00000000..7a720471 --- /dev/null +++ b/package/qemu/0002-Fix-build-with-64-bits-time_t.patch @@ -0,0 +1,98 @@ +From 839e51aa452345b440f8d2d0df84ab58bdedfcd1 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 14 Nov 2020 21:54:17 +0100 +Subject: [PATCH] Fix build with 64 bits time_t + +time element is deprecated on new input_event structure in kernel's +input.h [1] + +This will avoid the following build failure: + +hw/input/virtio-input-host.c: In function 'virtio_input_host_handle_status': +hw/input/virtio-input-host.c:198:28: error: 'struct input_event' has no member named 'time' + 198 | if (gettimeofday(&evdev.time, NULL)) { + | ^ + +Fixes: + - http://autobuild.buildroot.org/results/a538167e288c14208d557cd45446df86d3d599d5 + - http://autobuild.buildroot.org/results/efd4474fb4b6c0ce0ab3838ce130429c51e43bbb + +[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit?id=152194fe9c3f + +Signed-off-by: Fabrice Fontaine +--- + contrib/vhost-user-input/main.c | 10 +++++++++- + hw/input/virtio-input-host.c | 10 +++++++++- + 2 files changed, 18 insertions(+), 2 deletions(-) + +diff --git a/contrib/vhost-user-input/main.c b/contrib/vhost-user-input/main.c +index 6020c6f33a..e688c3e0a9 100644 +--- a/contrib/vhost-user-input/main.c ++++ b/contrib/vhost-user-input/main.c +@@ -17,6 +17,11 @@ + #include "standard-headers/linux/virtio_input.h" + #include "qapi/error.h" + ++#ifndef input_event_sec ++#define input_event_sec time.tv_sec ++#define input_event_usec time.tv_usec ++#endif ++ + enum { + VHOST_USER_INPUT_MAX_QUEUES = 2, + }; +@@ -115,13 +120,16 @@ vi_evdev_watch(VuDev *dev, int condition, void *data) + static void vi_handle_status(VuInput *vi, virtio_input_event *event) + { + struct input_event evdev; ++ struct timeval tval; + int rc; + +- if (gettimeofday(&evdev.time, NULL)) { ++ if (gettimeofday(&tval, NULL)) { + perror("vi_handle_status: gettimeofday"); + return; + } + ++ evdev.input_event_sec = tval.tv_sec; ++ evdev.input_event_usec = tval.tv_usec; + evdev.type = le16toh(event->type); + evdev.code = le16toh(event->code); + evdev.value = le32toh(event->value); +diff --git a/hw/input/virtio-input-host.c b/hw/input/virtio-input-host.c +index 85daf73f1a..2e261737e1 100644 +--- a/hw/input/virtio-input-host.c ++++ b/hw/input/virtio-input-host.c +@@ -16,6 +16,11 @@ + #include + #include "standard-headers/linux/input.h" + ++#ifndef input_event_sec ++#define input_event_sec time.tv_sec ++#define input_event_usec time.tv_usec ++#endif ++ + /* ----------------------------------------------------------------- */ + + static struct virtio_input_config virtio_input_host_config[] = { +@@ -193,13 +198,16 @@ static void virtio_input_host_handle_status(VirtIOInput *vinput, + { + VirtIOInputHost *vih = VIRTIO_INPUT_HOST(vinput); + struct input_event evdev; ++ struct timeval tval; + int rc; + +- if (gettimeofday(&evdev.time, NULL)) { ++ if (gettimeofday(&tval, NULL)) { + perror("virtio_input_host_handle_status: gettimeofday"); + return; + } + ++ evdev.input_event_sec = tval.tv_sec; ++ evdev.input_event_usec = tval.tv_usec; + evdev.type = le16_to_cpu(event->type); + evdev.code = le16_to_cpu(event->code); + evdev.value = le32_to_cpu(event->value); +-- +2.29.2 + diff --git a/package/qemu/0003-hw-usb-host-libusb.c-fix-build-with-kernel-5.0.patch b/package/qemu/0003-hw-usb-host-libusb.c-fix-build-with-kernel-5.0.patch new file mode 100644 index 00000000..2510dc9c --- /dev/null +++ b/package/qemu/0003-hw-usb-host-libusb.c-fix-build-with-kernel-5.0.patch @@ -0,0 +1,43 @@ +From ecd615dfe328e3ab551cea3ba243d908936ed382 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 13 Dec 2020 21:27:31 +0100 +Subject: [PATCH] hw/usb/host-libusb.c: fix build with kernel < 5.0 + +USBDEVFS_GET_SPEED is used since version 5.2.0 and +https://gitlab.com/qemu-project/qemu/-/commit/202d69a715a4b1824dcd7ec1683d027ed2bae6d3 +resulting in the following build failure with kernel < 5.0: + +../hw/usb/host-libusb.c: In function 'usb_host_open': +../hw/usb/host-libusb.c:953:32: error: 'USBDEVFS_GET_SPEED' undeclared (first use in this function); did you mean 'USBDEVFS_GETDRIVER'? + int rc = ioctl(hostfd, USBDEVFS_GET_SPEED, NULL); + ^~~~~~~~~~~~~~~~~~ + USBDEVFS_GETDRIVER + +A tentative was made to fix this build failure with +https://gitlab.com/qemu-project/qemu/-/commit/4969e697c15ac536d5c0700381d5d026ef7f0588 + +However, the assumtion that distros with old kernels also have old +libusb is just wrong so also add a check for defined(USBDEVFS_GET_SPEED) + +Signed-off-by: Fabrice Fontaine +[Upstream status: sent to qemu-devel@nongnu.org] +--- + hw/usb/host-libusb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c +index b950501d10..0343300d3e 100644 +--- a/hw/usb/host-libusb.c ++++ b/hw/usb/host-libusb.c +@@ -941,7 +941,7 @@ static int usb_host_open(USBHostDevice *s, libusb_device *dev, int hostfd) + usb_host_ep_update(s); + + libusb_speed = libusb_get_device_speed(dev); +-#if LIBUSB_API_VERSION >= 0x01000107 && defined(CONFIG_LINUX) ++#if LIBUSB_API_VERSION >= 0x01000107 && defined(CONFIG_LINUX) && defined(USBDEVFS_GET_SPEED) + if (hostfd && libusb_speed == 0) { + /* + * Workaround libusb bug: libusb_get_device_speed() does not +-- +2.29.2 + diff --git a/package/qemu/0004-meson-add-tests-option.patch b/package/qemu/0004-meson-add-tests-option.patch new file mode 100644 index 00000000..aff8a0f9 --- /dev/null +++ b/package/qemu/0004-meson-add-tests-option.patch @@ -0,0 +1,92 @@ +From c24f6cc8f847a4f90cd8fe0f94604862c5ac4a5e Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Mon, 21 Dec 2020 22:12:14 +0100 +Subject: [PATCH] meson: add tests option + +tests/fp/fp-bench.c use fenv.h that is not always provided +by the libc (uClibc). + +To workaround this issue, add an new meson option to +disable tests while building Qemu. + +Fixes: +http://autobuild.buildroot.net/results/53f5d8baa994d599b9da013ee643b82353366ec3/build-end.log + +Signed-off-by: Romain Naour +--- + configure | 7 +++++++ + meson.build | 5 ++++- + meson_options.txt | 2 ++ + 3 files changed, 13 insertions(+), 1 deletion(-) + +diff --git a/configure b/configure +index 18c26e0389..7cceae4418 100755 +--- a/configure ++++ b/configure +@@ -449,6 +449,7 @@ meson="" + ninja="" + skip_meson=no + gettext="" ++tests="auto" + + bogus_os="no" + malloc_trim="auto" +@@ -1525,6 +1526,10 @@ for opt do + ;; + --disable-libdaxctl) libdaxctl=no + ;; ++ --disable-tests) tests="disabled" ++ ;; ++ --enable-tests) tests="enabled" ++ ;; + *) + echo "ERROR: unknown option $opt" + echo "Try '$0 --help' for more information" +@@ -1850,6 +1855,7 @@ disabled with --disable-FEATURE, default is enabled if available: + xkbcommon xkbcommon support + rng-none dummy RNG, avoid using /dev/(u)random and getrandom() + libdaxctl libdaxctl support ++ tests build tests + + NOTE: The object files are built at the place where configure is launched + EOF +@@ -7014,6 +7020,7 @@ NINJA=$ninja $meson setup \ + -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\ + -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \ + -Dvhost_user_blk_server=$vhost_user_blk_server \ ++ -Dtests=$tests \ + $cross_arg \ + "$PWD" "$source_path" + +diff --git a/meson.build b/meson.build +index e3386196ba..7f4efdc347 100644 +--- a/meson.build ++++ b/meson.build +@@ -1944,7 +1944,10 @@ subdir('scripts') + subdir('tools') + subdir('pc-bios') + subdir('docs') +-subdir('tests') ++if get_option('tests').enabled() ++ subdir('tests') ++endif ++ + if 'CONFIG_GTK' in config_host + subdir('po') + endif +diff --git a/meson_options.txt b/meson_options.txt +index f6f64785fe..81bffbfe87 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -66,6 +66,8 @@ option('virtiofsd', type: 'feature', value: 'auto', + description: 'build virtiofs daemon (virtiofsd)') + option('vhost_user_blk_server', type: 'feature', value: 'auto', + description: 'build vhost-user-blk server') ++option('tests', type : 'feature', value : 'auto', ++ description: 'Tests build support') + + option('capstone', type: 'combo', value: 'auto', + choices: ['disabled', 'enabled', 'auto', 'system', 'internal'], +-- +2.29.2 + diff --git a/package/qemu/0005-build-no-pie-is-no-functional-linker-flag.patch b/package/qemu/0005-build-no-pie-is-no-functional-linker-flag.patch new file mode 100644 index 00000000..6a219491 --- /dev/null +++ b/package/qemu/0005-build-no-pie-is-no-functional-linker-flag.patch @@ -0,0 +1,79 @@ +From bbd2d5a8120771ec59b86a80a1f51884e0a26e53 Mon Sep 17 00:00:00 2001 +From: Christian Ehrhardt +Date: Mon, 14 Dec 2020 16:09:38 +0100 +Subject: [PATCH] build: -no-pie is no functional linker flag + +Recent binutils changes dropping unsupported options [1] caused a build +issue in regard to the optionroms. + + ld -m elf_i386 -T /<>/pc-bios/optionrom//flat.lds -no-pie \ + -s -o multiboot.img multiboot.o + ld.bfd: Error: unable to disambiguate: -no-pie (did you mean --no-pie ?) + +This isn't really a regression in ld.bfd, filing the bug upstream +revealed that this never worked as a ld flag [2] - in fact it seems we +were by accident setting --nmagic). + +Since it never had the wanted effect this usage of LDFLAGS_NOPIE, should be +droppable without any effect. This also is the only use-case of LDFLAGS_NOPIE +in .mak, therefore we can also remove it from being added there. + +[1]: https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=983d925d +[2]: https://sourceware.org/bugzilla/show_bug.cgi?id=27050#c5 + +Signed-off-by: Christian Ehrhardt +Message-Id: <20201214150938.1297512-1-christian.ehrhardt@canonical.com> +Cc: qemu-stable@nongnu.org +Signed-off-by: Paolo Bonzini + +[Retrieved from: +https://gitlab.com/qemu-project/qemu/-/commit/bbd2d5a8120771ec59b86a80a1f51884e0a26e53] +Signed-off-by: Fabrice Fontaine +--- + configure | 3 --- + pc-bios/optionrom/Makefile | 1 - + 2 files changed, 4 deletions(-) + +diff --git a/configure b/configure +index cb21108d34..c228f7c21e 100755 +--- a/configure ++++ b/configure +@@ -2137,7 +2137,6 @@ EOF + # Check we support --no-pie first; we will need this for building ROMs. + if compile_prog "-Werror -fno-pie" "-no-pie"; then + CFLAGS_NOPIE="-fno-pie" +- LDFLAGS_NOPIE="-no-pie" + fi + + if test "$static" = "yes"; then +@@ -2153,7 +2152,6 @@ if test "$static" = "yes"; then + fi + elif test "$pie" = "no"; then + CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS" +- CONFIGURE_LDFLAGS="$LDFLAGS_NOPIE $CONFIGURE_LDFLAGS" + elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then + CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS" + CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS" +@@ -6714,7 +6712,6 @@ echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak + echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak + echo "GLIB_LIBS=$glib_libs" >> $config_host_mak + echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak +-echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak + echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak + echo "EXESUF=$EXESUF" >> $config_host_mak + echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak +diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile +index 084fc10f05..30771f8d17 100644 +--- a/pc-bios/optionrom/Makefile ++++ b/pc-bios/optionrom/Makefile +@@ -41,7 +41,6 @@ override CFLAGS += $(call cc-option, $(Wa)-32) + + LD_I386_EMULATION ?= elf_i386 + override LDFLAGS = -m $(LD_I386_EMULATION) -T $(SRC_DIR)/flat.lds +-override LDFLAGS += $(LDFLAGS_NOPIE) + + all: multiboot.bin linuxboot.bin linuxboot_dma.bin kvmvapic.bin pvh.bin + +-- +GitLab + diff --git a/package/qemu/Config.in b/package/qemu/Config.in new file mode 100644 index 00000000..391fd5fa --- /dev/null +++ b/package/qemu/Config.in @@ -0,0 +1,152 @@ +config BR2_PACKAGE_QEMU_ARCH_SUPPORTS_TARGET + bool + # Only tested on these architectures + default y if BR2_aarch64 || BR2_i386 || BR2_mips || BR2_mipsel \ + || BR2_x86_64 || BR2_arm \ + || BR2_powerpc64 || BR2_powerpc64le + +comment "QEMU requires a toolchain with wchar, threads" + depends on BR2_PACKAGE_QEMU_ARCH_SUPPORTS_TARGET + depends on BR2_USE_MMU + depends on !(BR2_TOOLCHAIN_HAS_THREADS && BR2_USE_WCHAR) + +config BR2_PACKAGE_QEMU + bool "QEMU" + depends on BR2_PACKAGE_QEMU_ARCH_SUPPORTS_TARGET + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_WCHAR # gettext + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_PIXMAN + select BR2_PACKAGE_ZLIB + help + QEMU is a generic and open source machine emulator and + virtualizer. + + When used as a machine emulator, QEMU can run OSes and + programs made for one machine (e.g. an ARM board) on a + different machine (e.g. your own PC). By using dynamic + translation, it achieves very good performance. + + When used as a virtualizer, QEMU achieves near native + performances by executing the guest code directly on the + host CPU. QEMU supports virtualization when executing under + the Xen hypervisor or using the KVM kernel module in + Linux. When using KVM, QEMU can virtualize x86, server and + embedded PowerPC, and S390 guests. + + http://qemu.org/ + +if BR2_PACKAGE_QEMU + +comment "Emulators selection" + +config BR2_PACKAGE_QEMU_CUSTOM_TARGETS + string "Enable specific targets" + help + Enter here the list of QEMU targets you want to build. For + example: + + System emulation | User-land emulation + ----------------------+----------------------- + i386-softmmu | i386-linux-user + arm-softmmu | ppc-linux-user + x86_64-softmmu | sparc-bsd-user + ... | ... + +comment "Networking options" + +config BR2_PACKAGE_QEMU_SLIRP + bool "Enable user mode networking (SLIRP)" + select BR2_PACKAGE_SLIRP + help + Enable user mode network stack, which is the default + networking backend. It requires no administrator privileges + and generally is the easiest to use but has some + limitations: + + - there is a lot of overhead so the performance is poor; + - in general ICMP does not work (can't ping from/to a guest) + - on Linux hosts, ping does work from within the guest, but it + needs initial setup by root (once per host) + - the guest is not directly accessible from the host or the + external network + + User Networking is implemented using "slirp", which provides a + full TCP/IP stack within QEMU and uses that stack to implement + a virtual NAT'd network. + + Notice that this option does not disable other networking + modes. + +if BR2_PACKAGE_QEMU_CUSTOM_TARGETS = "" + +comment "... or you can select emulator families to enable, below:" + +config BR2_PACKAGE_QEMU_SYSTEM + bool "Enable all systems emulation" + depends on !BR2_STATIC_LIBS # dtc + select BR2_PACKAGE_QEMU_FDT + help + Say 'y' to build all system emulators/virtualisers that QEMU + supports. + +comment "systems emulation needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +config BR2_PACKAGE_QEMU_LINUX_USER + bool "Enable all Linux user-land emulation" + # Incompatible "struct sigevent" definition on musl + depends on !BR2_TOOLCHAIN_USES_MUSL + help + Say 'y' to build all Linux user-land emulators that QEMU + supports. + +# Note: bsd-user can not be build on Linux + +comment "Linux user-land emulation needs a glibc or uClibc toolchain" + depends on BR2_TOOLCHAIN_USES_MUSL + +endif # BR2_PACKAGE_QEMU_CUSTOM_TARGETS == "" + +config BR2_PACKAGE_QEMU_HAS_EMULS + def_bool y + depends on BR2_PACKAGE_QEMU_SYSTEM || BR2_PACKAGE_QEMU_LINUX_USER || BR2_PACKAGE_QEMU_CUSTOM_TARGETS != "" + +if BR2_PACKAGE_QEMU_HAS_EMULS + +comment "Frontends" + +config BR2_PACKAGE_QEMU_SDL + bool "Enable SDL frontend" + depends on !BR2_STATIC_LIBS # sdl2 + select BR2_PACKAGE_SDL2 + help + Say 'y' to enable the SDL frontend, that is, a graphical + window presenting the VM's display. + +comment "SDL frontend needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +comment "Misc. features" + +config BR2_PACKAGE_QEMU_FDT + bool "Enable FDT" + depends on !BR2_STATIC_LIBS # dtc + select BR2_PACKAGE_DTC + help + Say 'y' here to have QEMU capable of constructing Device + Trees, and passing them to the VMs. + +comment "FDT support needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +endif # BR2_PACKAGE_QEMU_HAS_EMULS + +config BR2_PACKAGE_QEMU_TOOLS + bool "Enable tools" + help + Say 'y' here to include tools packaged with QEMU + (e.g. qemu-img). + +endif # BR2_PACKAGE_QEMU diff --git a/package/qemu/Config.in.host b/package/qemu/Config.in.host new file mode 100644 index 00000000..31637970 --- /dev/null +++ b/package/qemu/Config.in.host @@ -0,0 +1,98 @@ +config BR2_PACKAGE_HOST_QEMU_ARCH_SUPPORTS + bool + default y if BR2_arm + default y if BR2_armeb + default y if BR2_aarch64 + default y if BR2_i386 + default y if BR2_m68k + default y if BR2_microblazeel + default y if BR2_microblazebe + default y if BR2_mips + default y if BR2_mipsel + default y if BR2_nios2 + default y if BR2_or1k + default y if BR2_powerpc + default y if BR2_powerpc64 + default y if BR2_powerpc64le + default y if BR2_riscv + default y if BR2_s390x + default y if BR2_sh + default y if BR2_sparc + default y if BR2_sparc64 + default y if BR2_xtensa + default y if BR2_x86_64 + depends on !BR2_x86_steamroller && !BR2_x86_core_avx2 + depends on !BR2_powerpc_620 && !BR2_powerpc_630 && !BR2_powerpc_970 + +config BR2_PACKAGE_HOST_QEMU_SYSTEM_ARCH_SUPPORTS + bool + default y if BR2_PACKAGE_HOST_QEMU_ARCH_SUPPORTS + default y if BR2_mips64 + default y if BR2_mips64el + +config BR2_PACKAGE_HOST_QEMU_USER_ARCH_SUPPORTS + bool + default y if BR2_PACKAGE_HOST_QEMU_ARCH_SUPPORTS + +config BR2_PACKAGE_HOST_QEMU + bool "host qemu" + depends on BR2_PACKAGE_HOST_QEMU_SYSTEM_ARCH_SUPPORTS || BR2_PACKAGE_HOST_QEMU_USER_ARCH_SUPPORTS + select BR2_PACKAGE_HOST_QEMU_LINUX_USER_MODE \ + if !BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE && BR2_PACKAGE_HOST_QEMU_USER_ARCH_SUPPORTS + select BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE \ + if !BR2_PACKAGE_HOST_QEMU_USER_ARCH_SUPPORTS + help + QEMU is a generic and open source machine emulator and + virtualizer. + + This option builds an emulator for your selected architecture. + + http://www.qemu.org + +if BR2_PACKAGE_HOST_QEMU + +comment "Emulators selection" + +config BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE + bool "Enable system emulation" + depends on BR2_PACKAGE_HOST_QEMU_SYSTEM_ARCH_SUPPORTS + help + Enables the build of the system emulator, which allows to + boot an entire system in Qemu. + +config BR2_PACKAGE_HOST_QEMU_LINUX_USER_MODE + bool "Enable Linux user-land emulation" + depends on BR2_PACKAGE_HOST_QEMU_USER_ARCH_SUPPORTS + help + Enables the build of the user-land emulator, which allows to + run user-space applications. + + Note that system calls made by the emulated user-land are + serviced by the running host kernel. Therefore, if the + kernel headers used by your target are more recent than + the running host kernel, you may run into invalid system + calls, which may yield surprising effects. + +config BR2_PACKAGE_HOST_QEMU_VDE2 + bool "VDE2 support" + help + Enables VDE2 support. VDE2 stands for Virtual Distributed + Ethernet and can be used to create virtual switches to + "plug" both physical and virtual machines in them. + +config BR2_PACKAGE_HOST_QEMU_VIRTFS + bool "Virtual filesystem support" + help + Enables support for virtual filesystem in Qemu allowing + shared filesystem between Qemu and its emulated target. + +config BR2_PACKAGE_HOST_QEMU_USB + bool "USB passthrough support" + depends on BR2_HOST_GCC_AT_LEAST_4_9 # host-libusb + help + Enables USB passthrough support from guest to host. + +comment "USB passthrough support needs a toolchain w/ host gcc >= 4.9" + depends on !BR2_HOST_GCC_AT_LEAST_4_9 + +endif diff --git a/package/qemu/qemu.hash b/package/qemu/qemu.hash new file mode 100644 index 00000000..7d9936ad --- /dev/null +++ b/package/qemu/qemu.hash @@ -0,0 +1,4 @@ +# Locally computed, tarball verified with GPG signature +sha256 cb18d889b628fbe637672b0326789d9b0e3b8027e0445b936537c78549df17bc qemu-5.2.0.tar.xz +sha256 6f04ae8364d0079a192b14635f4b1da294ce18724c034c39a6a41d1b09df6100 COPYING +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LIB diff --git a/package/qemu/qemu.mk b/package/qemu/qemu.mk new file mode 100644 index 00000000..b552ea13 --- /dev/null +++ b/package/qemu/qemu.mk @@ -0,0 +1,369 @@ +################################################################################ +# +# qemu +# +################################################################################ + +QEMU_VERSION = 5.2.0 +QEMU_SOURCE = qemu-$(QEMU_VERSION).tar.xz +QEMU_SITE = http://download.qemu.org +QEMU_LICENSE = GPL-2.0, LGPL-2.1, MIT, BSD-3-Clause, BSD-2-Clause, Others/BSD-1c +QEMU_LICENSE_FILES = COPYING COPYING.LIB +# NOTE: there is no top-level license file for non-(L)GPL licenses; +# the non-(L)GPL license texts are specified in the affected +# individual source files. +QEMU_CPE_ID_VENDOR = qemu + +#------------------------------------------------------------- + +# The build system is now partly based on Meson. +# However, building is still done with configure and make as in previous versions of QEMU. + +# Target-qemu +QEMU_DEPENDENCIES = host-meson host-pkgconf libglib2 zlib pixman host-python3 + +# Need the LIBS variable because librt and libm are +# not automatically pulled. :-( +QEMU_LIBS = -lrt -lm + +QEMU_OPTS = + +QEMU_VARS = LIBTOOL=$(HOST_DIR)/bin/libtool + +# If we want to specify only a subset of targets, we must still enable all +# of them, so that QEMU properly builds its list of default targets, from +# which it then checks if the specified sub-set is valid. That's what we +# do in the first part of the if-clause. +# Otherwise, if we do not want to pass a sub-set of targets, we then need +# to either enable or disable -user and/or -system emulation appropriately. +# That's what we do in the else-clause. +ifneq ($(call qstrip,$(BR2_PACKAGE_QEMU_CUSTOM_TARGETS)),) +QEMU_OPTS += --enable-system --enable-linux-user +QEMU_OPTS += --target-list="$(call qstrip,$(BR2_PACKAGE_QEMU_CUSTOM_TARGETS))" +else + +ifeq ($(BR2_PACKAGE_QEMU_SYSTEM),y) +QEMU_OPTS += --enable-system +else +QEMU_OPTS += --disable-system +endif + +ifeq ($(BR2_PACKAGE_QEMU_LINUX_USER),y) +QEMU_OPTS += --enable-linux-user +else +QEMU_OPTS += --disable-linux-user +endif + +endif + +ifeq ($(BR2_PACKAGE_QEMU_SLIRP),y) +QEMU_OPTS += --enable-slirp=system +QEMU_DEPENDENCIES += slirp +else +QEMU_OPTS += --disable-slirp +endif + +ifeq ($(BR2_PACKAGE_QEMU_SDL),y) +QEMU_OPTS += --enable-sdl +QEMU_DEPENDENCIES += sdl2 +QEMU_VARS += SDL2_CONFIG=$(BR2_STAGING_DIR)/usr/bin/sdl2-config +else +QEMU_OPTS += --disable-sdl +endif + +ifeq ($(BR2_PACKAGE_QEMU_FDT),y) +QEMU_OPTS += --enable-fdt +QEMU_DEPENDENCIES += dtc +else +QEMU_OPTS += --disable-fdt +endif + +ifeq ($(BR2_PACKAGE_QEMU_TOOLS),y) +QEMU_OPTS += --enable-tools +else +QEMU_OPTS += --disable-tools +endif + +ifeq ($(BR2_PACKAGE_LIBSECCOMP),y) +QEMU_OPTS += --enable-seccomp +QEMU_DEPENDENCIES += libseccomp +else +QEMU_OPTS += --disable-seccomp +endif + +ifeq ($(BR2_PACKAGE_LIBSSH),y) +QEMU_OPTS += --enable-libssh +QEMU_DEPENDENCIES += libssh +else +QEMU_OPTS += --disable-libssh +endif + +ifeq ($(BR2_PACKAGE_LIBUSB),y) +QEMU_OPTS += --enable-libusb +QEMU_DEPENDENCIES += libusb +else +QEMU_OPTS += --disable-libusb +endif + +ifeq ($(BR2_PACKAGE_LIBVNCSERVER),y) +QEMU_OPTS += \ + --enable-vnc \ + --disable-vnc-sasl +QEMU_DEPENDENCIES += libvncserver +ifeq ($(BR2_PACKAGE_LIBPNG),y) +QEMU_OPTS += --enable-vnc-png +QEMU_DEPENDENCIES += libpng +else +QEMU_OPTS += --disable-vnc-png +endif +ifeq ($(BR2_PACKAGE_JPEG),y) +QEMU_OPTS += --enable-vnc-jpeg +QEMU_DEPENDENCIES += jpeg +else +QEMU_OPTS += --disable-vnc-jpeg +endif +else +QEMU_OPTS += --disable-vnc +endif + +ifeq ($(BR2_PACKAGE_NETTLE),y) +QEMU_OPTS += --enable-nettle +QEMU_DEPENDENCIES += nettle +else +QEMU_OPTS += --disable-nettle +endif + +ifeq ($(BR2_PACKAGE_NUMACTL),y) +QEMU_OPTS += --enable-numa +QEMU_DEPENDENCIES += numactl +else +QEMU_OPTS += --disable-numa +endif + +ifeq ($(BR2_PACKAGE_SPICE),y) +QEMU_OPTS += --enable-spice +QEMU_DEPENDENCIES += spice +else +QEMU_OPTS += --disable-spice +endif + +ifeq ($(BR2_PACKAGE_USBREDIR),y) +QEMU_OPTS += --enable-usb-redir +QEMU_DEPENDENCIES += usbredir +else +QEMU_OPTS += --disable-usb-redir +endif + +# Override CPP, as it expects to be able to call it like it'd +# call the compiler. +define QEMU_CONFIGURE_CMDS + unset TARGET_DIR; \ + cd $(@D); \ + LIBS='$(QEMU_LIBS)' \ + $(TARGET_CONFIGURE_OPTS) \ + $(TARGET_CONFIGURE_ARGS) \ + CPP="$(TARGET_CC) -E" \ + $(QEMU_VARS) \ + ./configure \ + --prefix=/usr \ + --cross-prefix=$(TARGET_CROSS) \ + --audio-drv-list= \ + --meson=$(HOST_DIR)/bin/meson \ + --ninja=$(HOST_DIR)/bin/ninja \ + --enable-kvm \ + --enable-attr \ + --enable-vhost-net \ + --disable-bsd-user \ + --disable-containers \ + --disable-xen \ + --disable-virtfs \ + --disable-brlapi \ + --disable-curses \ + --disable-curl \ + --disable-vde \ + --disable-linux-aio \ + --disable-linux-io-uring \ + --disable-cap-ng \ + --disable-docs \ + --disable-rbd \ + --disable-libiscsi \ + --disable-strip \ + --disable-sparse \ + --disable-mpath \ + --disable-sanitizers \ + --disable-hvf \ + --disable-whpx \ + --disable-malloc-trim \ + --disable-membarrier \ + --disable-vhost-crypto \ + --disable-libxml2 \ + --disable-capstone \ + --disable-git-update \ + --disable-opengl \ + --disable-vhost-user-blk-server \ + --disable-virtiofsd \ + --disable-tests \ + $(QEMU_OPTS) +endef + +define QEMU_BUILD_CMDS + unset TARGET_DIR; \ + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define QEMU_INSTALL_TARGET_CMDS + unset TARGET_DIR; \ + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(QEMU_MAKE_ENV) DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) + +#------------------------------------------------------------- +# Host-qemu + +HOST_QEMU_DEPENDENCIES = host-meson host-pkgconf host-zlib host-libglib2 host-pixman host-python3 + +# BR ARCH qemu +# ------- ---- +# arm arm +# armeb armeb +# i486 i386 +# i586 i386 +# i686 i386 +# x86_64 x86_64 +# m68k m68k +# microblaze microblaze +# mips mips +# mipsel mipsel +# mips64 mips64 +# mips64el mips64el +# nios2 nios2 +# or1k or1k +# powerpc ppc +# powerpc64 ppc64 +# powerpc64le ppc64 (system) / ppc64le (usermode) +# sh2a not supported +# sh4 sh4 +# sh4eb sh4eb +# sh4a sh4 +# sh4aeb sh4eb +# sparc sparc +# sparc64 sparc64 +# xtensa xtensa + +HOST_QEMU_ARCH = $(ARCH) +ifeq ($(HOST_QEMU_ARCH),i486) +HOST_QEMU_ARCH = i386 +endif +ifeq ($(HOST_QEMU_ARCH),i586) +HOST_QEMU_ARCH = i386 +endif +ifeq ($(HOST_QEMU_ARCH),i686) +HOST_QEMU_ARCH = i386 +endif +ifeq ($(HOST_QEMU_ARCH),powerpc) +HOST_QEMU_ARCH = ppc +endif +ifeq ($(HOST_QEMU_ARCH),powerpc64) +HOST_QEMU_ARCH = ppc64 +endif +ifeq ($(HOST_QEMU_ARCH),powerpc64le) +HOST_QEMU_ARCH = ppc64le +HOST_QEMU_SYS_ARCH = ppc64 +endif +ifeq ($(HOST_QEMU_ARCH),sh4a) +HOST_QEMU_ARCH = sh4 +endif +ifeq ($(HOST_QEMU_ARCH),sh4aeb) +HOST_QEMU_ARCH = sh4eb +endif +HOST_QEMU_SYS_ARCH ?= $(HOST_QEMU_ARCH) + +HOST_QEMU_CFLAGS = $(HOST_CFLAGS) + +ifeq ($(BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE),y) +HOST_QEMU_TARGETS += $(HOST_QEMU_SYS_ARCH)-softmmu +HOST_QEMU_OPTS += --enable-system --enable-fdt +HOST_QEMU_CFLAGS += -I$(HOST_DIR)/include/libfdt +HOST_QEMU_DEPENDENCIES += host-dtc +else +HOST_QEMU_OPTS += --disable-system +endif + +ifeq ($(BR2_PACKAGE_HOST_QEMU_LINUX_USER_MODE),y) +HOST_QEMU_TARGETS += $(HOST_QEMU_ARCH)-linux-user +HOST_QEMU_OPTS += --enable-linux-user + +HOST_QEMU_HOST_SYSTEM_TYPE = $(shell uname -s) +ifneq ($(HOST_QEMU_HOST_SYSTEM_TYPE),Linux) +$(error "qemu-user can only be used on Linux hosts") +endif + +else # BR2_PACKAGE_HOST_QEMU_LINUX_USER_MODE +HOST_QEMU_OPTS += --disable-linux-user +endif # BR2_PACKAGE_HOST_QEMU_LINUX_USER_MODE + +ifeq ($(BR2_PACKAGE_HOST_QEMU_VDE2),y) +HOST_QEMU_OPTS += --enable-vde +HOST_QEMU_DEPENDENCIES += host-vde2 +endif + +# virtfs-proxy-helper is the only user of libcap-ng. +ifeq ($(BR2_PACKAGE_HOST_QEMU_VIRTFS),y) +HOST_QEMU_OPTS += --enable-virtfs --enable-cap-ng +HOST_QEMU_DEPENDENCIES += host-libcap-ng +else +HOST_QEMU_OPTS += --disable-virtfs --disable-cap-ng +endif + +ifeq ($(BR2_PACKAGE_HOST_QEMU_USB),y) +HOST_QEMU_OPTS += --enable-libusb +HOST_QEMU_DEPENDENCIES += host-libusb +else +HOST_QEMU_OPTS += --disable-libusb +endif + +# Override CPP, as it expects to be able to call it like it'd +# call the compiler. +define HOST_QEMU_CONFIGURE_CMDS + unset TARGET_DIR; \ + cd $(@D); $(HOST_CONFIGURE_OPTS) CPP="$(HOSTCC) -E" \ + ./configure \ + --target-list="$(HOST_QEMU_TARGETS)" \ + --prefix="$(HOST_DIR)" \ + --interp-prefix=$(STAGING_DIR) \ + --cc="$(HOSTCC)" \ + --host-cc="$(HOSTCC)" \ + --extra-cflags="$(HOST_QEMU_CFLAGS)" \ + --extra-ldflags="$(HOST_LDFLAGS)" \ + --meson=$(HOST_DIR)/bin/meson \ + --ninja=$(HOST_DIR)/bin/ninja \ + --disable-bzip2 \ + --disable-containers \ + --disable-curl \ + --disable-libssh \ + --disable-linux-io-uring \ + --disable-sdl \ + --disable-vhost-user-blk-server \ + --disable-virtiofsd \ + --disable-vnc-jpeg \ + --disable-vnc-png \ + --disable-vnc-sasl \ + --disable-tests \ + $(HOST_QEMU_OPTS) +endef + +define HOST_QEMU_BUILD_CMDS + unset TARGET_DIR; \ + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define HOST_QEMU_INSTALL_CMDS + unset TARGET_DIR; \ + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) install +endef + +$(eval $(host-generic-package)) + +# variable used by other packages +QEMU_USER = $(HOST_DIR)/bin/qemu-$(HOST_QEMU_ARCH) diff --git a/package/qextserialport/0001-Create-a-main-include-file-QExtSerialPort.patch b/package/qextserialport/0001-Create-a-main-include-file-QExtSerialPort.patch new file mode 100644 index 00000000..e1d99f0f --- /dev/null +++ b/package/qextserialport/0001-Create-a-main-include-file-QExtSerialPort.patch @@ -0,0 +1,40 @@ +From 62fbe9c3539945df6204501b7e3ae0d51db075a3 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Thu, 24 Nov 2016 22:30:40 +0100 +Subject: [PATCH] Create a main include file QExtSerialPort + +This main include file will be installed in + so that Qt applications can use this +library by including header files in a Qt-like style. + +Signed-off-by: Thomas Petazzoni +[Arnout: add it to qextserialport.pri so it is installed] +Signed-off-by: Arnout Vandecappelle (Essensium/Mind) +--- + src/QExtSerialPort | 2 ++ + src/qextserialport.pri | 3 ++- + 2 files changed, 4 insertions(+), 1 deletion(-) + create mode 100644 src/QExtSerialPort + +diff --git a/src/QExtSerialPort b/src/QExtSerialPort +new file mode 100644 +index 0000000..a48aeea +--- /dev/null ++++ b/src/QExtSerialPort +@@ -0,0 +1,2 @@ ++#include "qextserialport.h" ++#include "qextserialenumerator.h" +diff --git a/src/qextserialport.pri b/src/qextserialport.pri +index 461d56f..f8a678d 100644 +--- a/src/qextserialport.pri ++++ b/src/qextserialport.pri +@@ -3,7 +3,8 @@ + + PUBLIC_HEADERS += $$PWD/qextserialport.h \ + $$PWD/qextserialenumerator.h \ +- $$PWD/qextserialport_global.h ++ $$PWD/qextserialport_global.h \ ++ $$PWD/QExtSerialPort + + HEADERS += $$PUBLIC_HEADERS \ + $$PWD/qextserialport_p.h \ diff --git a/package/qextserialport/0002-Tell-qmake-to-add-a-pkgconfig-file-to-ease-usage-wit.patch b/package/qextserialport/0002-Tell-qmake-to-add-a-pkgconfig-file-to-ease-usage-wit.patch new file mode 100644 index 00000000..09e26a96 --- /dev/null +++ b/package/qextserialport/0002-Tell-qmake-to-add-a-pkgconfig-file-to-ease-usage-wit.patch @@ -0,0 +1,28 @@ +From 14d4d3e7b5c748118acffddd397fb67b37fd5054 Mon Sep 17 00:00:00 2001 +From: "Arnout Vandecappelle (Essensium/Mind)" +Date: Thu, 24 Nov 2016 22:44:02 +0100 +Subject: [PATCH] Tell qmake to add a pkgconfig file to ease usage with + applications + +Signed-off-by: Arnout Vandecappelle (Essensium/Mind) +--- + qextserialport.pro | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/qextserialport.pro b/qextserialport.pro +index 8d2c03a..2fcb39c 100644 +--- a/qextserialport.pro ++++ b/qextserialport.pro +@@ -42,7 +42,8 @@ TEMPLATE=lib + include(src/qextserialport.pri) + + #create_prl is needed, otherwise, MinGW can't found libqextserialport1.a +-CONFIG += create_prl ++CONFIG += create_prl create_pc ++QMAKE_PKGCONFIG_DESTDIR = pkgconfig + + #mac framework is designed for shared library + macx:qesp_mac_framework:qesp_static: CONFIG -= qesp_static +-- +2.10.2 + diff --git a/package/qextserialport/Config.in b/package/qextserialport/Config.in new file mode 100644 index 00000000..f880d335 --- /dev/null +++ b/package/qextserialport/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_QEXTSERIALPORT + bool "qextserialport" + depends on BR2_PACKAGE_QT5 + help + A Qt library to manage serial ports + + http://qextserialport.github.io/ diff --git a/package/qextserialport/qextserialport.hash b/package/qextserialport/qextserialport.hash new file mode 100644 index 00000000..198ea022 --- /dev/null +++ b/package/qextserialport/qextserialport.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 23e3b10a8d8a1e2fb071047144222c43d150748ce6670e5d047ba5b0502ad0b2 qextserialport-ada321a9ee463f628e7b781b8ed00ff219152158.tar.gz +sha256 363f34c4e9ee62df5e88788723beb9d0ad2c62fa36625355f261f7e6d672aaf5 LICENSE.md diff --git a/package/qextserialport/qextserialport.mk b/package/qextserialport/qextserialport.mk new file mode 100644 index 00000000..419ea669 --- /dev/null +++ b/package/qextserialport/qextserialport.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# qextserialport +# +################################################################################ + +QEXTSERIALPORT_VERSION = ada321a9ee463f628e7b781b8ed00ff219152158 +QEXTSERIALPORT_SITE = $(call github,qextserialport,qextserialport,$(QEXTSERIALPORT_VERSION)) +QEXTSERIALPORT_LICENSE = MIT +QEXTSERIALPORT_LICENSE_FILES = LICENSE.md +QEXTSERIALPORT_INSTALL_STAGING = YES + +ifeq ($(BR2_STATIC_LIBS),y) +QEXTSERIALPORT_CONF_OPTS += CONFIG+=qesp_static +endif + +$(eval $(qmake-package)) diff --git a/package/qhull/Config.in b/package/qhull/Config.in new file mode 100644 index 00000000..0a4b60ff --- /dev/null +++ b/package/qhull/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_QHULL + bool "qhull" + depends on BR2_INSTALL_LIBSTDCPP + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_4 # needs gcc >= 4.4 + help + Qhull computes the convex hull, Delaunay triangulation, + Voronoi diagram, halfspace intersection about a point, + furthest-site Delaunay triangulation, and furthest-site + Voronoi diagram. The source code runs in 2-d, 3-d, 4-d, and + higher dimensions. Qhull implements the Quickhull algorithm + for computing the convex hull. It handles roundoff errors + from floating point arithmetic. It computes volumes, surface + areas, and approximations to the convex hull. + + http://www.qhull.org + +comment "qhull needs a toolchain w/ C++, dynamic library, gcc >= 4.4" + depends on !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_4 diff --git a/package/qhull/qhull.hash b/package/qhull/qhull.hash new file mode 100644 index 00000000..b97c25a3 --- /dev/null +++ b/package/qhull/qhull.hash @@ -0,0 +1,5 @@ +# From http://www.qhull.org/download/qhull-2019.1.md5sum +md5 53c04f9c89b491b17b10c7ea1eaa4cc8 qhull-2019-src-7.3.2.tgz +# Locally computed +sha256 2b7990558c363076261564f61b74db4d0d73b71869755108a469038c07dc43fb qhull-2019-src-7.3.2.tgz +sha256 34db0c0c4f931861d720555c9cd7a2e228d1290ba29af0f2ee80c41bb2038afb COPYING.txt diff --git a/package/qhull/qhull.mk b/package/qhull/qhull.mk new file mode 100644 index 00000000..fcf51763 --- /dev/null +++ b/package/qhull/qhull.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# qhull +# +################################################################################ + +QHULL_VERSION = 7.3.2 +QHULL_SITE = http://www.qhull.org/download +QHULL_SOURCE = qhull-2019-src-$(QHULL_VERSION).tgz +QHULL_INSTALL_STAGING = YES +QHULL_LICENSE = BSD-Style +QHULL_LICENSE_FILES = COPYING.txt + +$(eval $(cmake-package)) diff --git a/package/qjson/Config.in b/package/qjson/Config.in new file mode 100644 index 00000000..adb06cdd --- /dev/null +++ b/package/qjson/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_QJSON + bool "qjson" + depends on BR2_PACKAGE_QT5 + help + QJson is a Qt-based library that maps JSON data to + QVariant objects and vice versa. + + http://qjson.sourceforge.net diff --git a/package/qjson/qjson.hash b/package/qjson/qjson.hash new file mode 100644 index 00000000..ab22350e --- /dev/null +++ b/package/qjson/qjson.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 e812617477f3c2bb990561767a4cd8b1d3803a52018d4878da302529552610d4 qjson-0.9.0.tar.gz +sha256 758a0cd48d2bec59cbd04ab616737b7aa0cdceac87508adbc9468715ac90722b COPYING.lib diff --git a/package/qjson/qjson.mk b/package/qjson/qjson.mk new file mode 100644 index 00000000..718d6622 --- /dev/null +++ b/package/qjson/qjson.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# qjson +# +################################################################################ + +QJSON_VERSION = 0.9.0 +QJSON_SITE = $(call github,flavio,qjson,$(QJSON_VERSION)) +QJSON_INSTALL_STAGING = YES +QJSON_DEPENDENCIES = qt5base +QJSON_LICENSE = LGPL-2.1 +QJSON_LICENSE_FILES = COPYING.lib + +$(eval $(cmake-package)) diff --git a/package/qlibc/Config.in b/package/qlibc/Config.in new file mode 100644 index 00000000..ad6f1fee --- /dev/null +++ b/package/qlibc/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_QLIBC + bool "qlibc" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_WCHAR + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + qLibc is currently one of the most functionally complete + public licensed C/C++ libraries. The C/C++ library which + includes all kinds of containers and general library + routines. It provides ready-made set of common container + APIs with consistant API look. + + https://github.com/wolkykim/qlibc + +comment "qlibc needs a toolchain w/ threads, wchar, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR || BR2_STATIC_LIBS diff --git a/package/qlibc/qlibc.hash b/package/qlibc/qlibc.hash new file mode 100644 index 00000000..6abb16b2 --- /dev/null +++ b/package/qlibc/qlibc.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 e195c97453c260acea4421146ba992d9a4d89732eac345b3765c43cc3326d2ad qlibc-2.4.5.tar.gz +sha256 7c9d03656af4c0acf0a35e29459086498dd64080eac6d2945bc1c064aaf18132 LICENSE diff --git a/package/qlibc/qlibc.mk b/package/qlibc/qlibc.mk new file mode 100644 index 00000000..6cce8201 --- /dev/null +++ b/package/qlibc/qlibc.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# qlibc +# +################################################################################ + +QLIBC_VERSION = 2.4.5 +QLIBC_SITE = $(call github,wolkykim,qlibc,v$(QLIBC_VERSION)) +QLIBC_LICENSE = BSD-2-Clause +QLIBC_LICENSE_FILES = LICENSE + +QLIBC_INSTALL_STAGING = YES +QLIBC_DEPENDENCIES = $(if $(BR2_PACKAGE_LIBICONV),libiconv) + +# The configure.ac checks for these use AC_CHECK_FILE() which doesn't +# work for cross-compilation. If someone wants to enable the support +# for OpenSSL or MySQL, some changes to the configure.ac will be +# needed. +QLIBC_CONF_OPTS = --without-mysql --without-openssl + +$(eval $(autotools-package)) diff --git a/package/qoriq-rcw/Config.in.host b/package/qoriq-rcw/Config.in.host new file mode 100644 index 00000000..1f69c038 --- /dev/null +++ b/package/qoriq-rcw/Config.in.host @@ -0,0 +1,28 @@ +config BR2_PACKAGE_HOST_QORIQ_RCW + bool "host qoriq-rcw" + help + This package provides an reset configuration word(RCW) + compiler to build NXP QoriQ/LS PBL/RCW binary(s). + + The package installs example configurations and scripts + for each devkit supported in the current release see + $(HOST_DIR)/share/rcw. Either a SDK or post scripts can + then use this toolset and examples. + + https://source.codeaurora.org/external/qoriq/qoriq-components/rcw/ + +if BR2_PACKAGE_HOST_QORIQ_RCW + +config BR2_PACKAGE_HOST_QORIQ_RCW_CUSTOM_PATH + string "RCW Source file paths" + help + Space-separated list of .rcw and .rcwi files, that will be + used to generate a RCW binary. The entire list of .rcwi files + used by the .rcw file must be specified. There must be a + single .rcw file in the list. + + This is optional. If left empty, the rcw package will be + included for use in the SDK or with post scripts but no + RCW binary will not be generated. + +endif diff --git a/package/qoriq-rcw/qoriq-rcw.hash b/package/qoriq-rcw/qoriq-rcw.hash new file mode 100644 index 00000000..5848799a --- /dev/null +++ b/package/qoriq-rcw/qoriq-rcw.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 bbb595f0b68beb114620f7aeaff073b90938329e10cd6b36daa9f2087f3119a0 qoriq-rcw-LSDK-20.12-br1.tar.gz +sha256 68f4b15ecc085729419bc60ca6eeadca5af0237bbfec791e8a79da9c943d42e9 LICENSE diff --git a/package/qoriq-rcw/qoriq-rcw.mk b/package/qoriq-rcw/qoriq-rcw.mk new file mode 100644 index 00000000..ecc5ce5e --- /dev/null +++ b/package/qoriq-rcw/qoriq-rcw.mk @@ -0,0 +1,67 @@ +################################################################################ +# +# qoriq-rcw +# +################################################################################ + +QORIQ_RCW_VERSION = LSDK-20.12 +QORIQ_RCW_SITE = https://source.codeaurora.org/external/qoriq/qoriq-components/rcw +QORIQ_RCW_SITE_METHOD = git +QORIQ_RCW_LICENSE = BSD-3-Clause +QORIQ_RCW_LICENSE_FILES = LICENSE + +HOST_QORIQ_RCW_DEPENDENCIES = $(BR2_PYTHON3_HOST_DEPENDENCY) + +QORIQ_RCW_FILES = $(call qstrip,$(BR2_PACKAGE_HOST_QORIQ_RCW_CUSTOM_PATH)) + +ifneq ($(QORIQ_RCW_FILES),) +QORIQ_RCW_INCLUDES = $(filter-out %.rcw,$(QORIQ_RCW_FILES)) +# Get the name of the custom rcw file from the custom list +QORIQ_RCW_PROJECT = $(notdir $(filter %.rcw,$(QORIQ_RCW_FILES))) + +# Error if there are no or more than one .rcw file +ifeq ($(BR_BUILDING),y) +ifneq ($(words $(QORIQ_RCW_PROJECT)),1) +$(error BR2_PACKAGE_HOST_QORIQ_RCW_CUSTOM_PATH must have exactly one .rcw file) +endif +endif + +ifneq ($(QORIQ_RCW_INCLUDES),) +define HOST_QORIQ_RCW_ADD_CUSTOM_RCW_INCLUDES + mkdir -p $(@D)/custom_board + cp -f $(QORIQ_RCW_INCLUDES) $(@D)/custom_board +endef +HOST_QORIQ_RCW_POST_PATCH_HOOKS += HOST_QORIQ_RCW_ADD_CUSTOM_RCW_INCLUDES +endif + +define HOST_QORIQ_RCW_ADD_CUSTOM_RCW_FILES + mkdir -p $(@D)/custom_board/rcw + cp -f $(filter %.rcw,$(QORIQ_RCW_FILES)) $(@D)/custom_board/rcw +endef +HOST_QORIQ_RCW_POST_PATCH_HOOKS += HOST_QORIQ_RCW_ADD_CUSTOM_RCW_FILES + +# rcw.py is a python3-only script, and we can be using either the +# system-provided python3, or our own built with host-python3. +# Fortunately, rcw.py uses #!/usr/bin/env python3, so it will +# easily find it from PATH. +define HOST_QORIQ_RCW_BUILD_CMDS + PATH=$(BR_PATH) \ + $(@D)/rcw.py \ + -i $(@D)/custom_board/rcw/$(QORIQ_RCW_PROJECT) \ + -I $(@D)/custom_board -o $(@D)/PBL.bin +endef + +define HOST_QORIQ_RCW_INSTALL_DELIVERY_FILE + $(INSTALL) -D -m 0644 $(@D)/PBL.bin $(BINARIES_DIR)/PBL.bin +endef +endif + +# Copy source files and script into $(HOST_DIR)/share/rcw/ so a developer +# could use a post image or SDK to build/install PBL files. +define HOST_QORIQ_RCW_INSTALL_CMDS + mkdir -p $(HOST_DIR)/share/rcw + cp -a $(@D)/* $(HOST_DIR)/share/rcw + $(HOST_QORIQ_RCW_INSTALL_DELIVERY_FILE) +endef + +$(eval $(host-generic-package)) diff --git a/package/qpdf/0001-libtests-cxx11.cc-fix-build-with-gcc-4.8.patch b/package/qpdf/0001-libtests-cxx11.cc-fix-build-with-gcc-4.8.patch new file mode 100644 index 00000000..76504c74 --- /dev/null +++ b/package/qpdf/0001-libtests-cxx11.cc-fix-build-with-gcc-4.8.patch @@ -0,0 +1,38 @@ +From e70c2605a11d12a8eeee3e7eec46077956e11e1f Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 17 Feb 2020 22:36:08 +0100 +Subject: [PATCH] libtests/cxx11.cc: fix build with gcc 4.8 + +Build fails on gcc 4.8 since version 9.1.1 and commit +752416554086d5d34323bc14164d5084db83cfbd: + +libtests/cxx11.cc: In function 'void do_regex()': +libtests/cxx11.cc:347:42: error: 'strlen' is not a member of 'std' + std::cregex_iterator m3(str7, str7 + std::strlen(str7), expr4); + ^ + +To fix the build failure, add missing include on cstring + +Fixes: + - http://autobuild.buildroot.org/results/ad7fb68ae87850a85509eed80fd0cae8721b10c5 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/qpdf/qpdf/pull/400] +--- + libtests/cxx11.cc | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/libtests/cxx11.cc b/libtests/cxx11.cc +index fa1dc6b..91ed7b1 100644 +--- a/libtests/cxx11.cc ++++ b/libtests/cxx11.cc +@@ -1,5 +1,6 @@ + #include + #include ++#include + #include + #include + #include +-- +2.24.1 + diff --git a/package/qpdf/0002-Fix-some-pipelines-to-be-safe-if-downstream-write-fails.patch b/package/qpdf/0002-Fix-some-pipelines-to-be-safe-if-downstream-write-fails.patch new file mode 100644 index 00000000..70017350 --- /dev/null +++ b/package/qpdf/0002-Fix-some-pipelines-to-be-safe-if-downstream-write-fails.patch @@ -0,0 +1,86 @@ +From dc92574c10f3e2516ec6445b88c5d584f40df4e5 Mon Sep 17 00:00:00 2001 +From: Jay Berkenbilt +Date: Mon, 4 Jan 2021 11:55:28 -0500 +Subject: [PATCH] Fix some pipelines to be safe if downstream write fails (fuzz + issue 28262) + +[Retrieved (and updated to remove updates on ChangeLog and fuzz) from: +https://github.com/qpdf/qpdf/commit/dc92574c10f3e2516ec6445b88c5d584f40df4e5] +Signed-off-by: Fabrice Fontaine +--- + ChangeLog | 6 ++++++ + fuzz/qpdf_extra/28262.fuzz | Bin 0 -> 40395 bytes + libqpdf/Pl_AES_PDF.cc | 2 +- + libqpdf/Pl_ASCII85Decoder.cc | 7 +++++-- + libqpdf/Pl_ASCIIHexDecoder.cc | 6 ++++-- + libqpdf/Pl_Count.cc | 2 +- + 6 files changed, 17 insertions(+), 6 deletions(-) + create mode 100644 fuzz/qpdf_extra/28262.fuzz + +diff --git a/libqpdf/Pl_AES_PDF.cc b/libqpdf/Pl_AES_PDF.cc +index 18cf3a4d..2865f804 100644 +--- a/libqpdf/Pl_AES_PDF.cc ++++ b/libqpdf/Pl_AES_PDF.cc +@@ -238,6 +238,6 @@ Pl_AES_PDF::flush(bool strip_padding) + } + } + } +- getNext()->write(this->outbuf, bytes); + this->offset = 0; ++ getNext()->write(this->outbuf, bytes); + } +diff --git a/libqpdf/Pl_ASCII85Decoder.cc b/libqpdf/Pl_ASCII85Decoder.cc +index b8df3e87..9d9f6704 100644 +--- a/libqpdf/Pl_ASCII85Decoder.cc ++++ b/libqpdf/Pl_ASCII85Decoder.cc +@@ -119,10 +119,13 @@ Pl_ASCII85Decoder::flush() + + QTC::TC("libtests", "Pl_ASCII85Decoder partial flush", + (this->pos == 5) ? 0 : 1); +- getNext()->write(outbuf, this->pos - 1); +- ++ // Reset before calling getNext()->write in case that throws an ++ // exception. ++ auto t = this->pos - 1; + this->pos = 0; + memset(this->inbuf, 117, 5); ++ ++ getNext()->write(outbuf, t); + } + + void +diff --git a/libqpdf/Pl_ASCIIHexDecoder.cc b/libqpdf/Pl_ASCIIHexDecoder.cc +index f20a9769..7845268e 100644 +--- a/libqpdf/Pl_ASCIIHexDecoder.cc ++++ b/libqpdf/Pl_ASCIIHexDecoder.cc +@@ -97,12 +97,14 @@ Pl_ASCIIHexDecoder::flush() + + QTC::TC("libtests", "Pl_ASCIIHexDecoder partial flush", + (this->pos == 2) ? 0 : 1); +- getNext()->write(&ch, 1); +- ++ // Reset before calling getNext()->write in case that throws an ++ // exception. + this->pos = 0; + this->inbuf[0] = '0'; + this->inbuf[1] = '0'; + this->inbuf[2] = '\0'; ++ ++ getNext()->write(&ch, 1); + } + + void +diff --git a/libqpdf/Pl_Count.cc b/libqpdf/Pl_Count.cc +index 8077092a..c35619b8 100644 +--- a/libqpdf/Pl_Count.cc ++++ b/libqpdf/Pl_Count.cc +@@ -27,8 +27,8 @@ Pl_Count::write(unsigned char* buf, size_t len) + if (len) + { + this->m->count += QIntC::to_offset(len); +- getNext()->write(buf, len); + this->m->last_char = buf[len - 1]; ++ getNext()->write(buf, len); + } + } + diff --git a/package/qpdf/Config.in b/package/qpdf/Config.in new file mode 100644 index 00000000..56a96e4f --- /dev/null +++ b/package/qpdf/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_QPDF + bool "qpdf" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 # C++11 + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_JPEG + help + QPDF is a command-line program that does structural, + content- preserving transformations on PDF files. It could + have been called something like pdf-to-pdf. It also provides + many useful capabilities to developers of PDF-producing + software or for people who just want to look at the innards + of a PDF file to learn more about how they work. + + http://qpdf.sourceforge.net/ + +comment "qpdf needs a toolchain w/ C++, wchar, gcc >= 4.7" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 diff --git a/package/qpdf/qpdf.hash b/package/qpdf/qpdf.hash new file mode 100644 index 00000000..050c9d9a --- /dev/null +++ b/package/qpdf/qpdf.hash @@ -0,0 +1,5 @@ +# From https://sourceforge.net/projects/qpdf/files/qpdf/9.1.1/qpdf-9.1.1.sha512/download +sha512 008a11fef663a57ca173631f2053988023babea6c333cfe01db0ef955c8cd36d387ed9f2039f55bd5f9ca94c7a8e400461a09a15c5f89e03bc0817fdd0d3d585 qpdf-9.1.1.tar.gz +# Locally computed: +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE.txt +sha256 fb929ac30decb4dc3a2eea2bec6c43296a797c5d2d602deb3784ee39430583d5 Artistic-2.0 diff --git a/package/qpdf/qpdf.mk b/package/qpdf/qpdf.mk new file mode 100644 index 00000000..c96bf6bf --- /dev/null +++ b/package/qpdf/qpdf.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# qpdf +# +################################################################################ + +QPDF_VERSION = 9.1.1 +QPDF_SITE = http://downloads.sourceforge.net/project/qpdf/qpdf/$(QPDF_VERSION) +QPDF_INSTALL_STAGING = YES +QPDF_LICENSE = Apache-2.0 or Artistic-2.0 +QPDF_LICENSE_FILES = LICENSE.txt Artistic-2.0 +QPDF_CPE_ID_VENDOR = qpdf_project +QPDF_DEPENDENCIES = host-pkgconf zlib jpeg + +QPDF_CONF_OPTS = --with-random=/dev/urandom + +# 0002-Fix-some-pipelines-to-be-safe-if-downstream-write-fails.patch +QPDF_IGNORE_CVES += CVE-2021-36978 + +ifeq ($(BR2_PACKAGE_GNUTLS),y) +QPDF_CONF_OPTS += --enable-crypto-gnutls +QPDF_DEPENDENCIES += gnutls +else +QPDF_CONF_OPTS += --disable-crypto-gnutls +endif + +$(eval $(autotools-package)) diff --git a/package/qpid-proton/0001-PROTON-1381-PROTON-1326-Modify-openssl-DH-code-to-wo.patch b/package/qpid-proton/0001-PROTON-1381-PROTON-1326-Modify-openssl-DH-code-to-wo.patch new file mode 100644 index 00000000..1085804f --- /dev/null +++ b/package/qpid-proton/0001-PROTON-1381-PROTON-1326-Modify-openssl-DH-code-to-wo.patch @@ -0,0 +1,78 @@ +From bc872440428073e86ce2631276dc8b7f62da4c33 Mon Sep 17 00:00:00 2001 +From: Andrew Stitcher +Date: Tue, 17 Jan 2017 02:10:48 -0500 +Subject: [PATCH] PROTON-1381, PROTON-1326: Modify openssl DH code to work with + openssl 1.1 Modified patch from Volker Diels-Grabsch + +Upstream: https://github.com/apache/qpid-proton/commit/bc872440428073e86ce2631276dc8b7f62da4c33 + +Signed-off-by: Matthew Weber +--- + proton-c/src/ssl/openssl.c | 37 +++++++++++++++++++++++++++---------- + 1 file changed, 27 insertions(+), 10 deletions(-) + +diff --git a/proton-c/src/ssl/openssl.c b/proton-c/src/ssl/openssl.c +index 0b7d157..0c51c03 100644 +--- a/proton-c/src/ssl/openssl.c ++++ b/proton-c/src/ssl/openssl.c +@@ -356,12 +356,22 @@ static int verify_callback(int preverify_ok, X509_STORE_CTX *ctx) + return preverify_ok; + } + ++// This was introduced in v1.1 ++#if OPENSSL_VERSION_NUMBER < 0x10100000 ++int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g) ++{ ++ dh->p = p; ++ dh->q = q; ++ dh->g = g; ++ return 1; ++} ++#endif + + // this code was generated using the command: + // "openssl dhparam -C -2 2048" + static DH *get_dh2048(void) + { +- static const unsigned char dh2048_p[]={ ++ static const unsigned char dhp_2048[]={ + 0xAE,0xF7,0xE9,0x66,0x26,0x7A,0xAC,0x0A,0x6F,0x1E,0xCD,0x81, + 0xBD,0x0A,0x10,0x7E,0xFA,0x2C,0xF5,0x2D,0x98,0xD4,0xE7,0xD9, + 0xE4,0x04,0x8B,0x06,0x85,0xF2,0x0B,0xA3,0x90,0x15,0x56,0x0C, +@@ -385,17 +395,24 @@ static DH *get_dh2048(void) + 0xA4,0xED,0xFD,0x49,0x0B,0xE3,0x4A,0xF6,0x28,0xB3,0x98,0xB0, + 0x23,0x1C,0x09,0x33, + }; +- static const unsigned char dh2048_g[]={ ++ static const unsigned char dhg_2048[]={ + 0x02, + }; +- DH *dh; +- +- if ((dh=DH_new()) == NULL) return(NULL); +- dh->p=BN_bin2bn(dh2048_p,sizeof(dh2048_p),NULL); +- dh->g=BN_bin2bn(dh2048_g,sizeof(dh2048_g),NULL); +- if ((dh->p == NULL) || (dh->g == NULL)) +- { DH_free(dh); return(NULL); } +- return(dh); ++ DH *dh = DH_new(); ++ BIGNUM *dhp_bn, *dhg_bn; ++ ++ if (dh == NULL) ++ return NULL; ++ dhp_bn = BN_bin2bn(dhp_2048, sizeof (dhp_2048), NULL); ++ dhg_bn = BN_bin2bn(dhg_2048, sizeof (dhg_2048), NULL); ++ if (dhp_bn == NULL || dhg_bn == NULL ++ || !DH_set0_pqg(dh, dhp_bn, NULL, dhg_bn)) { ++ DH_free(dh); ++ BN_free(dhp_bn); ++ BN_free(dhg_bn); ++ return NULL; ++ } ++ return dh; + } + + typedef struct { +-- +1.9.1 + diff --git a/package/qpid-proton/0002-PROTON-1326-restore-anonymous-cyphers-by-lowering-Op.patch b/package/qpid-proton/0002-PROTON-1326-restore-anonymous-cyphers-by-lowering-Op.patch new file mode 100644 index 00000000..2adba9a5 --- /dev/null +++ b/package/qpid-proton/0002-PROTON-1326-restore-anonymous-cyphers-by-lowering-Op.patch @@ -0,0 +1,62 @@ +From 8c54c62516671375de4068158ccaa0bc1dba0a4a Mon Sep 17 00:00:00 2001 +From: Cliff Jansen +Date: Wed, 2 Aug 2017 16:34:39 -0700 +Subject: [PATCH] PROTON-1326: restore anonymous cyphers by lowering OpenSSL + v1.1 security level just for the PN_SSL_ANONYMOUS_PEER verification mode + +Upstream: https://github.com/apache/qpid-proton/commit/8c54c62516671375de4068158ccaa0bc1dba0a4a + +Signed-off-by: Matthew Weber +--- + proton-c/src/ssl/openssl.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/proton-c/src/ssl/openssl.c b/proton-c/src/ssl/openssl.c +index 8cb4e7b..f37cf49 100644 +--- a/proton-c/src/ssl/openssl.c ++++ b/proton-c/src/ssl/openssl.c +@@ -72,6 +72,9 @@ struct pn_ssl_domain_t { + char *trusted_CAs; + + int ref_count; ++#if OPENSSL_VERSION_NUMBER >= 0x10100000 ++ int default_seclevel; ++#endif + pn_ssl_mode_t mode; + pn_ssl_verify_mode_t verify_mode; + +@@ -524,6 +527,9 @@ pn_ssl_domain_t *pn_ssl_domain( pn_ssl_mode_t mode ) + // Mitigate the CRIME vulnerability + SSL_CTX_set_options(domain->ctx, SSL_OP_NO_COMPRESSION); + #endif ++#if OPENSSL_VERSION_NUMBER >= 0x10100000 ++ domain->default_seclevel = SSL_CTX_get_security_level(domain->ctx); ++#endif + + // by default, allow anonymous ciphers so certificates are not required 'out of the box' + if (!SSL_CTX_set_cipher_list( domain->ctx, CIPHERS_ANONYMOUS )) { +@@ -647,6 +653,10 @@ int pn_ssl_domain_set_peer_authentication(pn_ssl_domain_t *domain, + case PN_SSL_VERIFY_PEER: + case PN_SSL_VERIFY_PEER_NAME: + ++#if OPENSSL_VERSION_NUMBER >= 0x10100000 ++ SSL_CTX_set_security_level(domain->ctx, domain->default_seclevel); ++#endif ++ + if (!domain->has_ca_db) { + pn_transport_logf(NULL, "Error: cannot verify peer without a trusted CA configured.\n" + " Use pn_ssl_domain_set_trusted_ca_db()"); +@@ -685,6 +695,10 @@ int pn_ssl_domain_set_peer_authentication(pn_ssl_domain_t *domain, + break; + + case PN_SSL_ANONYMOUS_PEER: // hippie free love mode... :) ++#if OPENSSL_VERSION_NUMBER >= 0x10100000 ++ // Must use lowest OpenSSL security level to enable anonymous ciphers. ++ SSL_CTX_set_security_level(domain->ctx, 0); ++#endif + SSL_CTX_set_verify( domain->ctx, SSL_VERIFY_NONE, NULL ); + break; + +-- +1.9.1 + diff --git a/package/qpid-proton/0003-PROTON-1587-fix-openssl-error-handling-causing-spuri.patch b/package/qpid-proton/0003-PROTON-1587-fix-openssl-error-handling-causing-spuri.patch new file mode 100644 index 00000000..bbd3c7b8 --- /dev/null +++ b/package/qpid-proton/0003-PROTON-1587-fix-openssl-error-handling-causing-spuri.patch @@ -0,0 +1,58 @@ +From c31ca95ac73d0da462f7e324e1c3a33b11c39f2c Mon Sep 17 00:00:00 2001 +From: Alan Conway +Date: Wed, 27 Sep 2017 18:37:24 -0400 +Subject: [PATCH] PROTON-1587: fix openssl error handling, causing spurious + errors + +From the SSL_get_error() man page: + + In addition to ssl and ret, SSL_get_error() inspects the current thread's OpenSSL error + queue. Thus, SSL_get_error() must be used in the same thread that performed the TLS/SSL I/O + operation, and no other OpenSSL function calls should appear in between. The current + thread's error queue must be empty before the TLS/SSL I/O operation is attempted, or + SSL_get_error() will not work reliably. + +Proton was not clearing the error queue, so the "shutdown-during-init" +error (which was introduced recently in OpenSSL) was left dangling, and was +reported incorrectly when the thread was used to serve another transport. + +Upstream: https://github.com/apache/qpid-proton/commit/c31ca95ac73d0da462f7e324e1c3a33b11c39f2c + +Signed-off-by: Matthew Weber +--- + proton-c/src/ssl/openssl.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/proton-c/src/ssl/openssl.c b/proton-c/src/ssl/openssl.c +index 5c750b0..3a4e1a3 100644 +--- a/proton-c/src/ssl/openssl.c ++++ b/proton-c/src/ssl/openssl.c +@@ -206,7 +206,7 @@ static int ssl_failed(pn_transport_t *transport) + // fake a shutdown so the i/o processing code will close properly + SSL_set_shutdown(ssl->ssl, SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); + // try to grab the first SSL error to add to the failure log +- char buf[128] = "Unknown error."; ++ char buf[256] = "Unknown error"; + unsigned long ssl_err = ERR_get_error(); + if (ssl_err) { + ERR_error_string_n( ssl_err, buf, sizeof(buf) ); +@@ -909,6 +909,7 @@ static ssize_t process_input_ssl( pn_transport_t *transport, unsigned int layer, + + do { + work_pending = false; ++ ERR_clear_error(); + + // Write to network bio as much as possible, consuming bytes/available + +@@ -1058,6 +1059,8 @@ static ssize_t process_output_ssl( pn_transport_t *transport, unsigned int layer + + do { + work_pending = false; ++ ERR_clear_error(); ++ + // first, get any pending application output, if possible + + if (!ssl->app_output_closed && ssl->out_count < ssl->out_size) { +-- +1.9.1 + diff --git a/package/qpid-proton/0004-src-ssl-openssl-add-libressl-compatibility.patch b/package/qpid-proton/0004-src-ssl-openssl-add-libressl-compatibility.patch new file mode 100644 index 00000000..f969671f --- /dev/null +++ b/package/qpid-proton/0004-src-ssl-openssl-add-libressl-compatibility.patch @@ -0,0 +1,53 @@ +From 87c44b4ebc64c15f6324ed40852224b61fbe77a7 Mon Sep 17 00:00:00 2001 +From: Matt Weber +Date: Tue, 5 Feb 2019 06:10:16 -0600 +Subject: [PATCH] src/ssl/openssl: add libressl compatibility + +Similar to https://github.com/FreeRDP/FreeRDP/issues/5049 +libressl has `#define OPENSSL_VERSION_NUMBER ` defined the same as +openssl 1.1.x which results in SSL_CTX_set_security_level() getting used. + +This patch prevents SSL_CTX_set_security_level() from being used with +libressl. + +Upstream: https://github.com/apache/qpid-proton/pull/175 + +Signed-off-by: Matthew Weber +--- + c/src/ssl/openssl.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/proton-c/src/ssl/openssl.c b/proton-c/src/ssl/openssl.c +index c2b5869..541d0ae 100644 +--- a/proton-c/src/ssl/openssl.c ++++ b/proton-c/src/ssl/openssl.c +@@ -522,7 +522,7 @@ pn_ssl_domain_t *pn_ssl_domain( pn_ssl_mode_t mode ) + // Mitigate the CRIME vulnerability + SSL_CTX_set_options(domain->ctx, SSL_OP_NO_COMPRESSION); + #endif +-#if OPENSSL_VERSION_NUMBER >= 0x10100000 ++#if OPENSSL_VERSION_NUMBER >= 0x10100000 && !defined(LIBRESSL_VERSION_NUMBER) + domain->default_seclevel = SSL_CTX_get_security_level(domain->ctx); + #endif + +@@ -709,7 +709,7 @@ int pn_ssl_domain_set_peer_authentication(pn_ssl_domain_t *domain, + case PN_SSL_VERIFY_PEER: + case PN_SSL_VERIFY_PEER_NAME: + +-#if OPENSSL_VERSION_NUMBER >= 0x10100000 ++#if OPENSSL_VERSION_NUMBER >= 0x10100000 && !defined(LIBRESSL_VERSION_NUMBER) + SSL_CTX_set_security_level(domain->ctx, domain->default_seclevel); + #endif + +@@ -749,7 +749,7 @@ int pn_ssl_domain_set_peer_authentication(pn_ssl_domain_t *domain, + break; + + case PN_SSL_ANONYMOUS_PEER: // hippie free love mode... :) +-#if OPENSSL_VERSION_NUMBER >= 0x10100000 ++#if OPENSSL_VERSION_NUMBER >= 0x10100000 && !defined(LIBRESSL_VERSION_NUMBER) + // Must use lowest OpenSSL security level to enable anonymous ciphers. + SSL_CTX_set_security_level(domain->ctx, 0); + #endif +-- +1.9.1 + diff --git a/package/qpid-proton/Config.in b/package/qpid-proton/Config.in new file mode 100644 index 00000000..b49a2afa --- /dev/null +++ b/package/qpid-proton/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_QPID_PROTON + bool "qpid-proton" + depends on !BR2_STATIC_LIBS # build a shared library + select BR2_PACKAGE_UTIL_LINUX + select BR2_PACKAGE_UTIL_LINUX_LIBUUID + help + The AMQP messaging toolkit + + Qpid Proton is a high-performance, lightweight messaging + library. It can be used in the widest range of messaging + applications, including brokers, client libraries, routers, + bridges, proxies, and more. + + https://qpid.apache.org/proton/ + +comment "qpid-proton needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/qpid-proton/qpid-proton.hash b/package/qpid-proton/qpid-proton.hash new file mode 100644 index 00000000..1ee72eef --- /dev/null +++ b/package/qpid-proton/qpid-proton.hash @@ -0,0 +1,4 @@ +# Hash from: http://www.apache.org/dist/qpid/proton/0.9.1/qpid-proton-0.9.1.tar.gz.sha +sha1 98008d90acd0d47cbd7ac1572a2bb50b452338ed qpid-proton-0.9.1.tar.gz +# Locally computed +sha256 9fade5e12873678456137b36cfa4a5983c3793836d41c011f2c2abb02ca36a66 LICENSE diff --git a/package/qpid-proton/qpid-proton.mk b/package/qpid-proton/qpid-proton.mk new file mode 100644 index 00000000..ff7d7482 --- /dev/null +++ b/package/qpid-proton/qpid-proton.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# qpid-proton +# +################################################################################ + +QPID_PROTON_VERSION = 0.9.1 +QPID_PROTON_SITE = http://apache.panu.it/qpid/proton/$(QPID_PROTON_VERSION) +QPID_PROTON_STRIP_COMPONENTS = 2 +QPID_PROTON_LICENSE = Apache-2.0 +QPID_PROTON_LICENSE_FILES = LICENSE +QPID_PROTON_CPE_ID_VENDOR = apache +QPID_PROTON_CPE_ID_PRODUCT = qpid_proton +QPID_PROTON_INSTALL_STAGING = YES +QPID_PROTON_DEPENDENCIES = \ + host-python \ + util-linux \ + $(if $(BR2_PACKAGE_OPENSSL),openssl) + +# Language bindings are enabled when host-swig tool is present in HOST_DIR. +# For now, disable all of them. +QPID_PROTON_CONF_OPTS = \ + -DBUILD_JAVA=OFF \ + -DBUILD_JAVASCRIPT=OFF \ + -DBUILD_PERL=OFF \ + -DBUILD_PHP=OFF \ + -DBUILD_PYTHON=OFF \ + -DBUILD_RUBY=OFF \ + -DENABLE_VALGRIND=OFF \ + -DENABLE_WARNING_ERROR=OFF \ + -DPYTHON_EXECUTABLE=$(HOST_DIR)/bin/python2 + +define QPID_PROTON_REMOVE_USELESS_FILES + rm -fr $(TARGET_DIR)/usr/share/proton-*/ +endef + +QPID_PROTON_POST_INSTALL_TARGET_HOOKS += QPID_PROTON_REMOVE_USELESS_FILES + +$(eval $(cmake-package)) diff --git a/package/qprint/Config.in b/package/qprint/Config.in new file mode 100644 index 00000000..edfb92a5 --- /dev/null +++ b/package/qprint/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_QPRINT + bool "qprint" + help + qprint is a program that encodes and decodes binary data in + the Quoted-Printable encoding, defined as a part of the MIME + specification in RFC 1521. This encoding allows for efficient + transfer of mostly ASCII data over transports that are only + 7-bit clean, like SMTP without 8BITMIME or BINARYMIME + extensions. It also allows the transfer of long lines of text + by wrapping them every 76 characters. + + Usually, a sophisticated MUA will take care of automatically + choosing the best encodings for an e-mail. Nevertheless, this + utility may be useful when a MTA (e.g. msmtp) is used without + a MUA, or if using this encoding for other purposes is + desired. + + https://www.fourmilab.ch/webtools/qprint/ diff --git a/package/qprint/qprint.hash b/package/qprint/qprint.hash new file mode 100644 index 00000000..0412cf84 --- /dev/null +++ b/package/qprint/qprint.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 ffa9ca1d51c871fb3b56a4bf0165418348cf080f01ff7e59cd04511b9665019c qprint-1.1.tar.gz +sha256 3bd4089942977a357fed0d3c84b6ea877000c20c7c344c2feabf4b10db9f7495 COPYING diff --git a/package/qprint/qprint.mk b/package/qprint/qprint.mk new file mode 100644 index 00000000..e34fba54 --- /dev/null +++ b/package/qprint/qprint.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# qprint +# +################################################################################ + +QPRINT_VERSION = 1.1 +QPRINT_SITE = https://www.fourmilab.ch/webtools/qprint +QPRINT_INSTALL_TARGET_OPTS = DESTDIR=$(TARGET_DIR) install-bin +QPRINT_LICENSE = Public Domain +QPRINT_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/qt-webkit-kiosk/Config.in b/package/qt-webkit-kiosk/Config.in new file mode 100644 index 00000000..80f8e7c4 --- /dev/null +++ b/package/qt-webkit-kiosk/Config.in @@ -0,0 +1,34 @@ +config BR2_PACKAGE_QT_WEBKIT_KIOSK + bool "qt-webkit-kiosk" + depends on BR2_PACKAGE_QT5 + depends on !BR2_STATIC_LIBS # qt5webkit + depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE # qt5webkit + depends on BR2_HOST_GCC_AT_LEAST_4_9 # qt5webkit -> icu + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # qt5webkit -> icu + depends on !BR2_BINFMT_FLAT # qt5webkit -> icu + depends on !BR2_MIPS_SOFT_FLOAT # qt5webkit + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_QT5BASE_GUI + select BR2_PACKAGE_QT5BASE_WIDGETS + select BR2_PACKAGE_QT5WEBKIT + select BR2_PACKAGE_QT5MULTIMEDIA + help + Simple kiosk-mode browser powered by Qt5Webkit + + https://github.com/sergey-dryabzhinsky/qt-webkit-kiosk + +if BR2_PACKAGE_QT_WEBKIT_KIOSK + +config BR2_PACKAGE_QT_WEBKIT_KIOSK_SOUNDS + bool "Install browser sound files" + help + Deploy browser sound files on target + +endif + +comment "qt-webkit-kiosk needs a toolchain w/ dynamic library, gcc >= 4.9, host gcc >= 4.9" + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || \ + !BR2_HOST_GCC_AT_LEAST_4_9 + depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE + depends on !BR2_BINFMT_FLAT + depends on !BR2_MIPS_SOFT_FLOAT diff --git a/package/qt-webkit-kiosk/qt-webkit-kiosk.hash b/package/qt-webkit-kiosk/qt-webkit-kiosk.hash new file mode 100644 index 00000000..8e983f8e --- /dev/null +++ b/package/qt-webkit-kiosk/qt-webkit-kiosk.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 5c3992cc35260d165f9a16094bd224529f012f799e0bc21317a39480cedb1fd2 qt-webkit-kiosk-a7720e50f2bd70aad99e0b465f5c4a57aca48127-br1.tar.gz +sha256 de59ec6c939f4c4def79c0a996b3bd5626895fcbd1ae108e7bddb1dac8218381 doc/lgpl.html diff --git a/package/qt-webkit-kiosk/qt-webkit-kiosk.mk b/package/qt-webkit-kiosk/qt-webkit-kiosk.mk new file mode 100644 index 00000000..cd1c21e2 --- /dev/null +++ b/package/qt-webkit-kiosk/qt-webkit-kiosk.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# qt-webkit-kiosk +# +################################################################################ + +QT_WEBKIT_KIOSK_VERSION = a7720e50f2bd70aad99e0b465f5c4a57aca48127 +QT_WEBKIT_KIOSK_SITE = https://github.com/sergey-dryabzhinsky/qt-webkit-kiosk.git +QT_WEBKIT_KIOSK_SITE_METHOD = git +QT_WEBKIT_KIOSK_DEPENDENCIES = qt5webkit qt5multimedia +QT_WEBKIT_KIOSK_LICENSE = LGPL-3.0 +QT_WEBKIT_KIOSK_LICENSE_FILES = doc/lgpl.html + +QT_WEBKIT_KIOSK_CONF_OPTS = PREFIX=/usr + +define QT_WEBKIT_KIOSK_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/src -f Makefile.qt-webkit-kiosk \ + INSTALL_ROOT=$(TARGET_DIR) \ + install_target + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + INSTALL_ROOT=$(TARGET_DIR) \ + install_config \ + $(if $(BR2_PACKAGE_QT_WEBKIT_KIOSK_SOUNDS),install_sound) +endef + +$(eval $(qmake-package)) diff --git a/package/qt5/Config.in b/package/qt5/Config.in new file mode 100644 index 00000000..0ac18fd9 --- /dev/null +++ b/package/qt5/Config.in @@ -0,0 +1,75 @@ +config BR2_PACKAGE_QT5_GL_AVAILABLE + bool + default y + depends on BR2_PACKAGE_HAS_LIBGL || BR2_PACKAGE_HAS_LIBGLES + +config BR2_PACKAGE_QT5_JSCORE_AVAILABLE + bool + default y + # Javascript engine is only available on certain architectures + depends on BR2_arm || BR2_aarch64 || BR2_i386 || BR2_x86_64 || BR2_mipsel || BR2_loongarch64 + # ARM needs BLX, so v5t+ + depends on !BR2_ARM_CPU_ARMV4 + +comment "Qt5 needs host g++ >= 5.0, and a toolchain w/ gcc >= 5.0, wchar, NPTL, C++, dynamic library" + depends on !BR2_ARM_CPU_ARMV4 + depends on !BR2_arc + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIBS || \ + !BR2_HOST_GCC_AT_LEAST_5 || !BR2_TOOLCHAIN_GCC_AT_LEAST_5 + +menuconfig BR2_PACKAGE_QT5 + bool "Qt5" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_HOST_GCC_AT_LEAST_5 # Full C++11 + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5 # C++11, GCC_BUG_57694 + depends on !BR2_ARM_CPU_ARMV4 # needs ARMv5+ + # no built-in double-conversion support + depends on !BR2_arc + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_QT5BASE + help + This option enables the Qt5 framework. Sub-options allow to + select which modules should be built. + + http://qt.io + +if BR2_PACKAGE_QT5 +source "package/qt5/qt53d/Config.in" +source "package/qt5/qt5base/Config.in" +source "package/qt5/qt5charts/Config.in" +source "package/qt5/qt5coap/Config.in" +source "package/qt5/qt5connectivity/Config.in" +source "package/qt5/qt5declarative/Config.in" +source "package/qt5/qt5enginio/Config.in" +source "package/qt5/qt5graphicaleffects/Config.in" +source "package/qt5/qt5imageformats/Config.in" +source "package/qt5/qt5knx/Config.in" +source "package/qt5/qt5location/Config.in" +source "package/qt5/qt5lottie/Config.in" +source "package/qt5/qt5mqtt/Config.in" +source "package/qt5/qt5multimedia/Config.in" +source "package/qt5/qt5quickcontrols/Config.in" +source "package/qt5/qt5quickcontrols2/Config.in" +source "package/qt5/qt5quicktimeline/Config.in" +source "package/qt5/qt5remoteobjects/Config.in" +source "package/qt5/qt5script/Config.in" +source "package/qt5/qt5scxml/Config.in" +source "package/qt5/qt5sensors/Config.in" +source "package/qt5/qt5serialbus/Config.in" +source "package/qt5/qt5serialport/Config.in" +source "package/qt5/qt5svg/Config.in" +source "package/qt5/qt5tools/Config.in" +source "package/qt5/qt5virtualkeyboard/Config.in" +source "package/qt5/qt5wayland/Config.in" +source "package/qt5/qt5webchannel/Config.in" +source "package/qt5/qt5webkit/Config.in" +source "package/qt5/qt5webkit-examples/Config.in" +source "package/qt5/qt5webengine/Config.in" +source "package/qt5/qt5websockets/Config.in" +source "package/qt5/qt5webview/Config.in" +source "package/qt5/qt5x11extras/Config.in" +source "package/qt5/qt5xmlpatterns/Config.in" +endif diff --git a/package/qt5/qt5.mk b/package/qt5/qt5.mk new file mode 100644 index 00000000..db6ccd2b --- /dev/null +++ b/package/qt5/qt5.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# qt5 +# +################################################################################ + +QT5_VERSION_MAJOR = 5.15 +QT5_VERSION = $(QT5_VERSION_MAJOR).2 +QT5_SOURCE_TARBALL_PREFIX = everywhere-src +QT5_SITE = https://download.qt.io/archive/qt/$(QT5_VERSION_MAJOR)/$(QT5_VERSION)/submodules + +include $(sort $(wildcard package/qt5/*/*.mk)) + +# The file "qt.conf" can be used to override the hard-coded paths that are +# compiled into the Qt library. We need it to make "qmake" relocatable and +# tweak the per-package install pathes +define QT5_INSTALL_QT_CONF + sed -e "s|@@HOST_DIR@@|$(HOST_DIR)|" -e "s|@@STAGING_DIR@@|$(STAGING_DIR)|" \ + $(QT5BASE_PKGDIR)/qt.conf.in > $(HOST_DIR)/bin/qt.conf +endef + +ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y) +define QT5_QT_CONF_FIXUP + $(QT5_INSTALL_QT_CONF) +endef +endif + +# Variable for other Qt applications to use +QT5_QMAKE = $(HOST_DIR)/bin/qmake -spec devices/linux-buildroot-g++ diff --git a/package/qt5/qt53d/Config.in b/package/qt5/qt53d/Config.in new file mode 100644 index 00000000..5126078d --- /dev/null +++ b/package/qt5/qt53d/Config.in @@ -0,0 +1,24 @@ +config BR2_PACKAGE_QT53D + bool "qt53d" + depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE # qt5declarative + depends on BR2_PACKAGE_QT5_GL_AVAILABLE # qt5declarative_quick + select BR2_PACKAGE_QT5BASE_GUI + select BR2_PACKAGE_QT5DECLARATIVE + select BR2_PACKAGE_QT5DECLARATIVE_QUICK + help + Qt is a cross-platform application and UI framework for + developers using C++. + + This package corresponds to the qt53d module. + + This module was in tech preview in Qt 5.6, and promoted + to a core module in Qt 5.7.0. + + Enable the assimp package to gain the assimp sceneparser + plugin. + + http://doc.qt.io/qt-5/qt3d-index.html + +comment "qt53d module needs an OpenGL-capable backend" + depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE + depends on !BR2_PACKAGE_QT5_GL_AVAILABLE diff --git a/package/qt5/qt53d/qt53d.hash b/package/qt5/qt53d/qt53d.hash new file mode 100644 index 00000000..43b2132c --- /dev/null +++ b/package/qt5/qt53d/qt53d.hash @@ -0,0 +1,7 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qt3d-everywhere-src-5.15.2.tar.xz.sha256 +sha256 03ed6a48c813c75296c19f5d721184ab168280b69d2656cf16f877d3d4c55c1d qt3d-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 edfe70e99be2a7c109d860b19204609e582720b211c50caedac729da372a1253 LICENSE.GPL +sha256 245248009fd0af1725d183248380e476c1283383909358a13686606352bf2a17 LICENSE.GPLv3 +sha256 9ae1959e86bd49b9680f78e0b49d4e52ae88a3f234d497e175e42a7e8ed59216 LICENSE.LGPLv3 diff --git a/package/qt5/qt53d/qt53d.mk b/package/qt5/qt53d/qt53d.mk new file mode 100644 index 00000000..f3eff9ed --- /dev/null +++ b/package/qt5/qt53d/qt53d.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# qt53d +# +################################################################################ + +QT53D_VERSION = $(QT5_VERSION) +QT53D_SITE = $(QT5_SITE) +QT53D_SOURCE = qt3d-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT53D_VERSION).tar.xz +QT53D_DEPENDENCIES = qt5declarative +QT53D_INSTALL_STAGING = YES + +ifeq ($(BR2_PACKAGE_ASSIMP),y) +QT53D_DEPENDENCIES += assimp +endif + +QT53D_LICENSE = GPL-2.0 or GPL-3.0 or LGPL-3.0 +QT53D_LICENSE_FILES = LICENSE.GPL LICENSE.GPLv3 LICENSE.LGPLv3 + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5base/0001-qtbase-Fix-build-error-when-using-EGL.patch b/package/qt5/qt5base/0001-qtbase-Fix-build-error-when-using-EGL.patch new file mode 100644 index 00000000..68764980 --- /dev/null +++ b/package/qt5/qt5base/0001-qtbase-Fix-build-error-when-using-EGL.patch @@ -0,0 +1,37 @@ +From c11299086b7718332e2b4fbc37ce6f6ff427c5ba Mon Sep 17 00:00:00 2001 +From: Yuqing Zhu +Date: Mon, 27 Mar 2017 15:33:35 +0800 +Subject: [PATCH] qtbase: Fix build error when using EGL +MIME-Version: 1.0 +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 8bit + +A build error was occurring due to missing EGL configuration. + +Fixed by adding the necessary ties to the EGL pkg-config. + +Task-number: QTBUG-61712 +Change-Id: I87190ea39392b4604c563cf9d89edb85068d85fc +Upstream-Status: Pending +Signed-off-by: Gaël PORTAY +--- + mkspecs/features/egl.prf | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/mkspecs/features/egl.prf b/mkspecs/features/egl.prf +index 9fa0c9e219..85d5852ba6 100644 +--- a/mkspecs/features/egl.prf ++++ b/mkspecs/features/egl.prf +@@ -1,3 +1,9 @@ ++# egl headers need a definition ++PKG_CONFIG = $$pkgConfigExecutable() ++PKGCONFIG_CFLAGS = $$system($$PKG_CONFIG --cflags egl) ++PKGCONFIG_CFLAGS = $$find(PKGCONFIG_CFLAGS, ^-D.*) ++QMAKE_CFLAGS_EGL = $$PKGCONFIG_CFLAGS ++ + INCLUDEPATH += $$QMAKE_INCDIR_EGL + LIBS_PRIVATE += $$QMAKE_LIBS_EGL + QMAKE_CFLAGS += $$QMAKE_CFLAGS_EGL +-- +2.16.1 + diff --git a/package/qt5/qt5base/0002-double-conversion-enable-for-microblaze.patch b/package/qt5/qt5base/0002-double-conversion-enable-for-microblaze.patch new file mode 100644 index 00000000..a772eb97 --- /dev/null +++ b/package/qt5/qt5base/0002-double-conversion-enable-for-microblaze.patch @@ -0,0 +1,29 @@ +From a02b5e3bb41026ca6031d01942a093e9ce54edf3 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Tue, 21 Aug 2018 21:11:40 +0200 +Subject: [PATCH] double-conversion: enable for microblaze + +Signed-off-by: Peter Seiderer +[Rebased for Qt5.12.0] +Signed-off-by: Peter Seiderer +[Rebased for Qt5.14.0] +Signed-off-by: Peter Seiderer +--- + src/3rdparty/double-conversion/include/double-conversion/utils.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/3rdparty/double-conversion/include/double-conversion/utils.h b/src/3rdparty/double-conversion/include/double-conversion/utils.h +index 70e697ca..2bb8e389 100644 +--- a/src/3rdparty/double-conversion/include/double-conversion/utils.h ++++ b/src/3rdparty/double-conversion/include/double-conversion/utils.h +@@ -102,6 +102,7 @@ int main(int argc, char** argv) { + defined(__AARCH64EL__) || defined(__aarch64__) || defined(__AARCH64EB__) || \ + defined(__riscv) || \ + defined(__or1k__) || defined(__arc__) || \ ++ defined(__microblaze__) || \ + defined(__EMSCRIPTEN__) + #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 + #elif defined(__mc68000__) || \ +-- +2.23.0 + diff --git a/package/qt5/qt5base/0003-double-conversion-enable-for-nios2.patch b/package/qt5/qt5base/0003-double-conversion-enable-for-nios2.patch new file mode 100644 index 00000000..79e276b1 --- /dev/null +++ b/package/qt5/qt5base/0003-double-conversion-enable-for-nios2.patch @@ -0,0 +1,26 @@ +From e3f63db3124caf5bde9cf688eba563f7f025662d Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Sun, 8 Mar 2020 18:08:26 +0100 +Subject: [PATCH] double-conversion: enable for nios2 + +[Upstream: https://github.com/google/double-conversion/commit/a54561be5588ac9b16d3c20760b9b554168bb8aa] +Signed-off-by: Peter Seiderer +--- + src/3rdparty/double-conversion/include/double-conversion/utils.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/3rdparty/double-conversion/include/double-conversion/utils.h b/src/3rdparty/double-conversion/include/double-conversion/utils.h +index d29de950..55ca5bf5 100644 +--- a/src/3rdparty/double-conversion/include/double-conversion/utils.h ++++ b/src/3rdparty/double-conversion/include/double-conversion/utils.h +@@ -87,6 +87,7 @@ int main(int argc, char** argv) { + defined(__ARMEL__) || defined(__avr32__) || defined(_M_ARM) || defined(_M_ARM64) || \ + defined(__hppa__) || defined(__ia64__) || \ + defined(__mips__) || \ ++ defined(__nios2__) || \ + defined(__powerpc__) || defined(__ppc__) || defined(__ppc64__) || \ + defined(_POWER) || defined(_ARCH_PPC) || defined(_ARCH_PPC64) || \ + defined(__sparc__) || defined(__sparc) || defined(__s390__) || \ +-- +2.25.1 + diff --git a/package/qt5/qt5base/0004-double-conversion-enable-for-xtensa.patch b/package/qt5/qt5base/0004-double-conversion-enable-for-xtensa.patch new file mode 100644 index 00000000..e2ead9bd --- /dev/null +++ b/package/qt5/qt5base/0004-double-conversion-enable-for-xtensa.patch @@ -0,0 +1,29 @@ +From f423f160b984c47d831b10447af046bfbd6a3ba1 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Tue, 10 Mar 2020 09:01:31 +0100 +Subject: [PATCH] double-conversion: enable for xtensa + +[Upstream: https://github.com/google/double-conversion/commit/a54561be5588ac9b16d3c20760b9b554168bb8aa] +Signed-off-by: Peter Seiderer +[Rebased for qtbase-everywhere-src-5.14.0] +Signed-off-by: Peter Seiderer +--- + .../double-conversion/include/double-conversion/utils.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/3rdparty/double-conversion/include/double-conversion/utils.h b/src/3rdparty/double-conversion/include/double-conversion/utils.h +index 89ab1a31..001ce55f 100644 +--- a/src/3rdparty/double-conversion/include/double-conversion/utils.h ++++ b/src/3rdparty/double-conversion/include/double-conversion/utils.h +@@ -103,7 +103,7 @@ int main(int argc, char** argv) { + defined(__AARCH64EL__) || defined(__aarch64__) || defined(__AARCH64EB__) || \ + defined(__riscv) || \ + defined(__or1k__) || defined(__arc__) || \ +- defined(__microblaze__) || \ ++ defined(__microblaze__) || defined(__XTENSA__) || \ + defined(__EMSCRIPTEN__) + #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 + #elif defined(__mc68000__) || \ +-- +2.26.0 + diff --git a/package/qt5/qt5base/0005-eglfs-avoid-breaking-compilation-for-obscure-EGLNativeDisplayType-types.patch b/package/qt5/qt5base/0005-eglfs-avoid-breaking-compilation-for-obscure-EGLNativeDisplayType-types.patch new file mode 100644 index 00000000..3621cdb2 --- /dev/null +++ b/package/qt5/qt5base/0005-eglfs-avoid-breaking-compilation-for-obscure-EGLNativeDisplayType-types.patch @@ -0,0 +1,63 @@ +From 0eb7058b473069a04cde60a800dfd04148c0c8b1 Mon Sep 17 00:00:00 2001 +From: Yann E. MORIN +Date: Sat, 14 Dec 2020 21:15:17 +0100 +Subject: [PATCH] plugins/eglfs/gbm: don't FTBFS when EGLNativeDisplayType is not a pointer + +On some platforms, EGLNativeDisplayType is not a pointer, but some kind +of integer, like an int (e.g. TI's SGX) or an unsigned int. In those +cases, the build breaks with: + + qeglfskmsgbmintegration.cpp: In member function ‘virtual void* QEglFSKmsGbmIntegration::createDisplay(EGLNativeDisplayType)’: + qeglfskmsgbmintegration.cpp:83:60: error: invalid conversion from ‘EGLNativeDisplayType’ {aka ‘int’} to ‘void*’ [-fpermissive] + 83 | display = getPlatformDisplay(EGL_PLATFORM_GBM_KHR, nativeDisplay, nullptr); + | ^~~~~~~~~~~~~ + | | + | EGLNativeDisplayType {aka int} + +We fix that by casting nativeDisplay to void* as expected by +getPlatformDisplay(). + +We can do that, because usually, nativeDisplay is already a pointer, and +thus this cast is a no-op. When it is not already a pointer, we either +don't care because the code path will not be taken at runtime, or the +integer really is an opaque handle to some internal, low-level memory +management, much like a void* is an pointer to an opaque memory type... + +It is to be noted, though, that in some ABIs (like x32), the size of a +nativeDisplay that is not already a pointer, might be bigger than that +of a pointer. There is not much we can do here anyway, since there would +be no way to fit that in a void* to begin with, and the build will still +fail for those situations. Those types of ABIs are far frome being +widespread, the most prominent one, x32, even being retired... + +To be noted further: a more usual solution (as suggested in QTBUG-72567 +or in Gerrit:248270) would be to first cast to a qintptr or a quintptr, +before finally casting to a void*. However, casting to either (resp.) +qintptr or quintptr first, risk the case that nativeDisplay is of the other +kind of signedness, (resp.) unsigned or signed, which would also cause +some compile-time breakage. + +Finally, if nativeDisplay is something that is not an int-like, and that +can't be cast into a void*, this would be hugely weird, so much so, that +we do not even attempt to catter for that case. + +Fixes: QTBUG-72567 +Inspired-by: https://codereview.qt-project.org/c/qt/qtbase/+/248270 +Signed-off-by: Yann E. MORIN +--- + +diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp +index d495a8d..059a580 100644 +--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp ++++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp +@@ -80,7 +80,9 @@ + } + + if (getPlatformDisplay) { +- display = getPlatformDisplay(EGL_PLATFORM_GBM_KHR, nativeDisplay, nullptr); ++ // EGLNativeDisplayType may be int on some platforms but those ++ // won't hit this path. Have to keep it compiling nonetheless. ++ display = getPlatformDisplay(EGL_PLATFORM_GBM_KHR, reinterpret_cast(nativeDisplay), nullptr); + } else { + qCDebug(qLcEglfsKmsDebug, "No eglGetPlatformDisplay for GBM, falling back to eglGetDisplay"); + display = eglGetDisplay(nativeDisplay); diff --git a/package/qt5/qt5base/0006-Fix-build-with-GCC-11-include-limits.patch b/package/qt5/qt5base/0006-Fix-build-with-GCC-11-include-limits.patch new file mode 100644 index 00000000..f014a160 --- /dev/null +++ b/package/qt5/qt5base/0006-Fix-build-with-GCC-11-include-limits.patch @@ -0,0 +1,53 @@ +From 9c56d4da2ff631a8c1c30475bd792f6c86bda53c Mon Sep 17 00:00:00 2001 +From: Thiago Macieira +Date: Mon, 18 Jan 2021 07:40:54 -0800 +Subject: [PATCH] Fix build with GCC 11: include + +Fixes: QTBUG-90395 +Pick-to: 6.0 +Change-Id: Iecc74d2000eb40dfbe7bfffd165b5dd3708b7a40 +Reviewed-by: Edward Welbourne + +[Retrieved (and backported) from: +https://github.com/qt/qtbase/commit/9c56d4da2ff631a8c1c30475bd792f6c86bda53c] +Signed-off-by: Fabrice Fontaine +--- + src/corelib/global/qendian.h | 6 ++++-- + src/corelib/global/qfloat16.h | 1 + + 2 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/src/corelib/global/qendian.h b/src/corelib/global/qendian.h +index 99b529f17cd..c874c5e47ab 100644 +--- a/src/corelib/global/qendian.h ++++ b/src/corelib/global/qendian.h +@@ -1,7 +1,7 @@ + /**************************************************************************** + ** +-** Copyright (C) 2016 The Qt Company Ltd. +-** Copyright (C) 2016 Intel Corporation. ++** Copyright (C) 2021 The Qt Company Ltd. ++** Copyright (C) 2021 Intel Corporation. + ** Contact: https://www.qt.io/licensing/ + ** + ** This file is part of the QtCore module of the Qt Toolkit. +@@ -44,6 +44,8 @@ + #include + #include + ++#include ++ + // include stdlib.h and hope that it defines __GLIBC__ for glibc-based systems + #include + #include +diff --git a/src/corelib/global/qfloat16.h b/src/corelib/global/qfloat16.h +index e9477d2ecec..a25fac28862 100644 +--- a/src/corelib/global/qfloat16.h ++++ b/src/corelib/global/qfloat16.h +@@ -44,6 +44,7 @@ + + #include + #include ++#include + #include + + #if defined(QT_COMPILER_SUPPORTS_F16C) && defined(__AVX2__) && !defined(__F16C__) diff --git a/package/qt5/qt5base/0007-mkspec-add-mips64el-support.patch b/package/qt5/qt5base/0007-mkspec-add-mips64el-support.patch new file mode 100644 index 00000000..1ac91428 --- /dev/null +++ b/package/qt5/qt5base/0007-mkspec-add-mips64el-support.patch @@ -0,0 +1,147 @@ +From 0517a372a25b356e1fe379a4cc1e39f51a06ab57 Mon Sep 17 00:00:00 2001 +From: Xiaochuan Mao +Date: Tue, 17 Aug 2021 20:33:22 -0700 +Subject: [PATCH] mkspec:add mips64el support + +--- + mkspecs/linux-mips64el-g++/qmake.conf | 25 ++++++ + mkspecs/linux-mips64el-g++/qplatformdefs.h | 95 ++++++++++++++++++++++ + 2 files changed, 120 insertions(+) + create mode 100644 mkspecs/linux-mips64el-g++/qmake.conf + create mode 100644 mkspecs/linux-mips64el-g++/qplatformdefs.h + +diff --git a/mkspecs/linux-mips64el-g++/qmake.conf b/mkspecs/linux-mips64el-g++/qmake.conf +new file mode 100644 +index 00000000..86f95514 +--- /dev/null ++++ b/mkspecs/linux-mips64el-g++/qmake.conf +@@ -0,0 +1,25 @@ ++# ++# qmake configuration for linux-g++ ++# ++ ++MAKEFILE_GENERATOR = UNIX ++CONFIG += incremental ++QMAKE_INCREMENTAL_STYLE = sublib ++ ++include(../common/linux.conf) ++include(../common/gcc-base-unix.conf) ++include(../common/g++-unix.conf) ++ ++# modifications to g++.conf ++QMAKE_CC = mips64el-linux-gcc ++QMAKE_CXX = mips64el-linux-g++ ++QMAKE_LINK = mips64el-linux-g++ ++QMAKE_LINK_SHLIB = mips64el-linux-g++ ++ ++# modifications to linux.conf ++QMAKE_AR = mips64el-linux-ar cqs ++QMAKE_OBJCOPY = mips64el-linux-objcopy ++QMAKE_NM = mips64el-linux-nm -P ++QMAKE_STRIP = mips64el-linux-strip ++ ++load(qt_config) +diff --git a/mkspecs/linux-mips64el-g++/qplatformdefs.h b/mkspecs/linux-mips64el-g++/qplatformdefs.h +new file mode 100644 +index 00000000..13523f07 +--- /dev/null ++++ b/mkspecs/linux-mips64el-g++/qplatformdefs.h +@@ -0,0 +1,95 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2016 The Qt Company Ltd. ++** Contact: https://www.qt.io/licensing/ ++** ++** This file is part of the qmake spec of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** Commercial License Usage ++** Licensees holding valid commercial Qt licenses may use this file in ++** accordance with the commercial license agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and The Qt Company. For licensing terms ++** and conditions see https://www.qt.io/terms-conditions. For further ++** information use the contact form at https://www.qt.io/contact-us. ++** ++** GNU Lesser General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 3 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL3 included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 3 requirements ++** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ++** ++** GNU General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU ++** General Public License version 2.0 or (at your option) the GNU General ++** Public license version 3 or any later version approved by the KDE Free ++** Qt Foundation. The licenses are as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ++** included in the packaging of this file. Please review the following ++** information to ensure the GNU General Public License requirements will ++** be met: https://www.gnu.org/licenses/gpl-2.0.html and ++** https://www.gnu.org/licenses/gpl-3.0.html. ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++#ifndef QPLATFORMDEFS_H ++#define QPLATFORMDEFS_H ++ ++// Get Qt defines/settings ++ ++#include "qglobal.h" ++ ++// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs ++ ++// 1) need to reset default environment if _BSD_SOURCE is defined ++// 2) need to specify POSIX thread interfaces explicitly in glibc 2.0 ++// 3) it seems older glibc need this to include the X/Open stuff ++#ifndef _GNU_SOURCE ++# define _GNU_SOURCE ++#endif ++ ++#include ++ ++ ++// We are hot - unistd.h should have turned on the specific APIs we requested ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define QT_USE_XOPEN_LFS_EXTENSIONS ++#include "../common/posix/qplatformdefs.h" ++ ++#undef QT_SOCKLEN_T ++ ++#if defined(__GLIBC__) && (__GLIBC__ < 2) ++#define QT_SOCKLEN_T int ++#else ++#define QT_SOCKLEN_T socklen_t ++#endif ++ ++#if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500) ++#define QT_SNPRINTF ::snprintf ++#define QT_VSNPRINTF ::vsnprintf ++#endif ++ ++#endif // QPLATFORMDEFS_H +-- +2.17.1 + diff --git a/package/qt5/qt5base/0008-double-conversion-enable-for-loongarch64.patch b/package/qt5/qt5base/0008-double-conversion-enable-for-loongarch64.patch new file mode 100644 index 00000000..ce1e2a32 --- /dev/null +++ b/package/qt5/qt5base/0008-double-conversion-enable-for-loongarch64.patch @@ -0,0 +1,12 @@ +diff -Naru qtbase-everywhere-src-5.15.2/src/3rdparty/double-conversion/include/double-conversion/utils.h qtbase-everywhere-src-5.15.2-new/src/3rdparty/double-conversion/include/double-conversion/utils.h +--- qtbase-everywhere-src-5.15.2/src/3rdparty/double-conversion/include/double-conversion/utils.h 2022-01-12 17:08:55.957777509 +0800 ++++ qtbase-everywhere-src-5.15.2-new/src/3rdparty/double-conversion/include/double-conversion/utils.h 2022-01-12 17:03:26.628134573 +0800 +@@ -104,7 +104,7 @@ + defined(__riscv) || \ + defined(__or1k__) || defined(__arc__) || \ + defined(__microblaze__) || defined(__XTENSA__) || \ +- defined(__EMSCRIPTEN__) ++ defined(__EMSCRIPTEN__) || defined(__loongarch64) + #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 + #elif defined(__mc68000__) || \ + defined(__pnacl__) || defined(__native_client__) diff --git a/package/qt5/qt5base/0009-port-qtbase-5.15.2-for-loongarch.patch b/package/qt5/qt5base/0009-port-qtbase-5.15.2-for-loongarch.patch new file mode 100644 index 00000000..d417d736 --- /dev/null +++ b/package/qt5/qt5base/0009-port-qtbase-5.15.2-for-loongarch.patch @@ -0,0 +1,37 @@ +diff --git a/src/corelib/global/archdetect.cpp b/src/corelib/global/archdetect.cpp +index 1d00b7f..8ca6efe 100644 +--- a/src/corelib/global/archdetect.cpp ++++ b/src/corelib/global/archdetect.cpp +@@ -59,6 +59,10 @@ + # define ARCH_PROCESSOR "x86_64" + #elif defined(Q_PROCESSOR_IA64) + # define ARCH_PROCESSOR "ia64" ++#elif defined(Q_PROCESSOR_LOONGARCH_64) ++# define ARCH_PROCESSOR "loongarch64" ++#elif defined(Q_PROCESSOR_LOONGARCH) ++# define ARCH_PROCESSOR "loongarch" + #elif defined(Q_PROCESSOR_MIPS_64) + # define ARCH_PROCESSOR "mips64" + #elif defined(Q_PROCESSOR_MIPS) +diff --git a/src/corelib/global/qprocessordetection.h b/src/corelib/global/qprocessordetection.h +index a6ead54..fd734b4 100644 +--- a/src/corelib/global/qprocessordetection.h ++++ b/src/corelib/global/qprocessordetection.h +@@ -228,6 +228,17 @@ + # define Q_PROCESSOR_WORDSIZE 8 + // Q_BYTE_ORDER not defined, use endianness auto-detection + ++/* ++ MIPS family, known revisions: I, II, III, IV, 32, 64 ++ ++ MIPS is bi-endian, use endianness auto-detection implemented below. ++*/ ++#elif defined(_loongarch) || defined(__loongarch__) ++# define Q_PROCESSOR_LOONGARCH ++# if defined(__loongarch64) ++# define Q_PROCESSOR_LOONGARCH_64 ++# define Q_PROCESSOR_WORDSIZE 8 ++# endif + /* + MIPS family, known revisions: I, II, III, IV, 32, 64 + diff --git a/package/qt5/qt5base/0010-mkspec-add-loongarch64-support.patch b/package/qt5/qt5base/0010-mkspec-add-loongarch64-support.patch new file mode 100644 index 00000000..1371abe0 --- /dev/null +++ b/package/qt5/qt5base/0010-mkspec-add-loongarch64-support.patch @@ -0,0 +1,147 @@ +From 0517a372a25b356e1fe379a4cc1e39f51a06ab57 Mon Sep 17 00:00:00 2001 +From: Xiaochuan Mao +Date: Tue, 17 Aug 2021 20:33:22 -0700 +Subject: [PATCH] mkspec:add loongarch64 support + +--- + mkspecs/linux-loongarch64-g++/qmake.conf | 25 ++++++ + mkspecs/linux-loongarch64-g++/qplatformdefs.h | 95 ++++++++++++++++++++++ + 2 files changed, 120 insertions(+) + create mode 100644 mkspecs/linux-loongarch64-g++/qmake.conf + create mode 100644 mkspecs/linux-loongarch64-g++/qplatformdefs.h + +diff --git a/mkspecs/linux-loongarch64-g++/qmake.conf b/mkspecs/linux-loongarch64-g++/qmake.conf +new file mode 100644 +index 00000000..86f95514 +--- /dev/null ++++ b/mkspecs/linux-loongarch64-g++/qmake.conf +@@ -0,0 +1,25 @@ ++# ++# qmake configuration for linux-g++ ++# ++ ++MAKEFILE_GENERATOR = UNIX ++CONFIG += incremental ++QMAKE_INCREMENTAL_STYLE = sublib ++ ++include(../common/linux.conf) ++include(../common/gcc-base-unix.conf) ++include(../common/g++-unix.conf) ++ ++# modifications to g++.conf ++QMAKE_CC = loongarch64-linux-gnu-gcc ++QMAKE_CXX = loongarch64-linux-gnu-g++ ++QMAKE_LINK = loongarch64-linux-gnu-g++ ++QMAKE_LINK_SHLIB = loongarch64-linux-gnu-g++ ++ ++# modifications to linux.conf ++QMAKE_AR = loongarch64-linux-gnu-ar cqs ++QMAKE_OBJCOPY = loongarch64-linux-gnu-objcopy ++QMAKE_NM = loongarch64-linux-gnu-nm -P ++QMAKE_STRIP = loongarch64-linux-gnu-strip ++ ++load(qt_config) +diff --git a/mkspecs/linux-loongarch64-g++/qplatformdefs.h b/mkspecs/linux-loongarch64-g++/qplatformdefs.h +new file mode 100644 +index 00000000..13523f07 +--- /dev/null ++++ b/mkspecs/linux-loongarch64-g++/qplatformdefs.h +@@ -0,0 +1,95 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2016 The Qt Company Ltd. ++** Contact: https://www.qt.io/licensing/ ++** ++** This file is part of the qmake spec of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** Commercial License Usage ++** Licensees holding valid commercial Qt licenses may use this file in ++** accordance with the commercial license agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and The Qt Company. For licensing terms ++** and conditions see https://www.qt.io/terms-conditions. For further ++** information use the contact form at https://www.qt.io/contact-us. ++** ++** GNU Lesser General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 3 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL3 included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 3 requirements ++** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ++** ++** GNU General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU ++** General Public License version 2.0 or (at your option) the GNU General ++** Public license version 3 or any later version approved by the KDE Free ++** Qt Foundation. The licenses are as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ++** included in the packaging of this file. Please review the following ++** information to ensure the GNU General Public License requirements will ++** be met: https://www.gnu.org/licenses/gpl-2.0.html and ++** https://www.gnu.org/licenses/gpl-3.0.html. ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++#ifndef QPLATFORMDEFS_H ++#define QPLATFORMDEFS_H ++ ++// Get Qt defines/settings ++ ++#include "qglobal.h" ++ ++// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs ++ ++// 1) need to reset default environment if _BSD_SOURCE is defined ++// 2) need to specify POSIX thread interfaces explicitly in glibc 2.0 ++// 3) it seems older glibc need this to include the X/Open stuff ++#ifndef _GNU_SOURCE ++# define _GNU_SOURCE ++#endif ++ ++#include ++ ++ ++// We are hot - unistd.h should have turned on the specific APIs we requested ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define QT_USE_XOPEN_LFS_EXTENSIONS ++#include "../common/posix/qplatformdefs.h" ++ ++#undef QT_SOCKLEN_T ++ ++#if defined(__GLIBC__) && (__GLIBC__ < 2) ++#define QT_SOCKLEN_T int ++#else ++#define QT_SOCKLEN_T socklen_t ++#endif ++ ++#if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500) ++#define QT_SNPRINTF ::snprintf ++#define QT_VSNPRINTF ::vsnprintf ++#endif ++ ++#endif // QPLATFORMDEFS_H +-- +2.17.1 + diff --git a/package/qt5/qt5base/Config.in b/package/qt5/qt5base/Config.in new file mode 100644 index 00000000..ee7c757c --- /dev/null +++ b/package/qt5/qt5base/Config.in @@ -0,0 +1,300 @@ +config BR2_PACKAGE_QT5BASE + bool "qt5base" + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_PCRE2 + select BR2_PACKAGE_PCRE2_16 + help + Qt is a cross-platform application and UI framework for + developers using C++. + + This package corresponds to the qt5base module, which + contains the base Qt libraries: QtCore, QtNetwork, QtGui, + QtWidgets, etc. + + http://qt.io + +if BR2_PACKAGE_QT5BASE + +config BR2_PACKAGE_QT5BASE_CUSTOM_CONF_OPTS + string "Custom configuration options" + help + Define custom qt5 configuration options which can be used to + enable or disable options not managed by buildroot. These + options are appended to the ones generated by buildroot and + passed to qt5base during configuration. + + E.g. to remove the Windows Vista style option, add the option + -no-feature-style_windowsvista. + +config BR2_PACKAGE_QT5BASE_CONFIG_FILE + string "Config file" + help + Configure options allow to set which modules are being + compiled or not in Qt, but Qt also provide a more + fine-grained mechanism to configure which features should be + enabled or disabled, through a header file. Examples of such + header files can be found in src/corelib/global/qconfig-*.h + in the Qt sources. + + This option allows to set the path of such a configuration + file, which Buildroot will give to Qt at compile time. + +config BR2_PACKAGE_QT5BASE_EXAMPLES + bool "Compile and install examples (with code)" + select BR2_PACKAGE_QT5BASE_NETWORK + select BR2_PACKAGE_QT5BASE_XML + help + If unsure, say N. + +config BR2_PACKAGE_QT5BASE_NETWORK + def_bool y + +config BR2_PACKAGE_QT5BASE_CONCURRENT + bool "concurrent module" + help + This options enables the Qt5Concurrent library. + +config BR2_PACKAGE_QT5BASE_SQL + def_bool y + +if BR2_PACKAGE_QT5BASE_SQL +config BR2_PACKAGE_QT5BASE_MYSQL + bool "MySQL Plugin" + depends on BR2_USE_MMU # mysql + select BR2_PACKAGE_MYSQL + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_READLINE + help + Build MySQL plugin + If unsure, say n. + +config BR2_PACKAGE_QT5BASE_PSQL + bool "PostgreSQL Plugin" + depends on BR2_USE_MMU # postgresql + depends on !BR2_STATIC_LIBS + depends on BR2_USE_WCHAR # postgresql + select BR2_PACKAGE_POSTGRESQL + help + Build PostgreSQL plugin + If unsure, say n. + +comment "PostgreSQL plugin needs a toolchain w/ wchar, dynamic library" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS || !BR2_USE_WCHAR + +choice + prompt "SQLite 3 support" + default BR2_PACKAGE_QT5BASE_SQLITE_NONE + help + Select SQLite support. + +config BR2_PACKAGE_QT5BASE_SQLITE_NONE + bool "No sqlite support" + help + Do not compile any kind of SQLite support. + +config BR2_PACKAGE_QT5BASE_SQLITE_QT + bool "Qt SQLite" + help + Use Qt bundled SQLite support. + +config BR2_PACKAGE_QT5BASE_SQLITE_SYSTEM + bool "System SQLite" + select BR2_PACKAGE_SQLITE + select BR2_PACKAGE_SQLITE_ENABLE_COLUMN_METADATA + help + Use system SQLite. + +endchoice + +endif + +config BR2_PACKAGE_QT5BASE_TEST + def_bool y + +config BR2_PACKAGE_QT5BASE_XML + def_bool y + +config BR2_PACKAGE_QT5BASE_GUI + bool "gui module" + select BR2_PACKAGE_FREETYPE + # At least one graphic backend must be enabled, so enable + # linuxfb if nothing is enabled. + select BR2_PACKAGE_QT5BASE_LINUXFB if \ + !BR2_PACKAGE_QT5BASE_DIRECTFB && \ + !BR2_PACKAGE_QT5BASE_XCB && \ + !BR2_PACKAGE_QT5BASE_EGLFS + help + This option enables the Qt5Gui library. + +if BR2_PACKAGE_QT5BASE_GUI + +config BR2_PACKAGE_QT5BASE_WIDGETS + bool "widgets module" + select BR2_PACKAGE_XLIB_LIBXEXT if BR2_PACKAGE_QT5BASE_XCB + help + This option enables the Qt5Widgets library. + +comment "OpenGL support needs an OpenGL-capable backend" + depends on !BR2_PACKAGE_QT5_GL_AVAILABLE + +config BR2_PACKAGE_QT5BASE_OPENGL + bool "OpenGL support" + depends on BR2_PACKAGE_QT5_GL_AVAILABLE + help + This option enables OpenGL support. + +if BR2_PACKAGE_QT5BASE_OPENGL + +choice + prompt "OpenGL API" + help + Select OpenGL API. + +config BR2_PACKAGE_QT5BASE_OPENGL_DESKTOP + bool "Desktop OpenGL" + depends on BR2_PACKAGE_HAS_LIBGL + help + Use desktop OpenGL. + +config BR2_PACKAGE_QT5BASE_OPENGL_ES2 + bool "OpenGL ES 2.0+" + depends on BR2_PACKAGE_HAS_LIBGLES + help + Use OpenGL ES 2.0 and later versions. + +endchoice + +config BR2_PACKAGE_QT5BASE_OPENGL_LIB + bool "opengl module" + select BR2_PACKAGE_QT5BASE_WIDGETS + help + This option enables the Qt5OpenGL library. This library + includes OpenGL support classes provided to ease porting + from Qt 4.x. + +endif + +config BR2_PACKAGE_QT5BASE_LINUXFB + bool "linuxfb support" + +config BR2_PACKAGE_QT5BASE_DIRECTFB + bool "directfb support" + depends on BR2_PACKAGE_DIRECTFB + +comment "directfb backend available if directfb is enabled" + depends on !BR2_PACKAGE_DIRECTFB + +config BR2_PACKAGE_QT5BASE_XCB + bool "X.org XCB support" + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBX11 + select BR2_PACKAGE_LIBXCB + select BR2_PACKAGE_XCB_UTIL_IMAGE + select BR2_PACKAGE_XCB_UTIL_KEYSYMS + select BR2_PACKAGE_XCB_UTIL_RENDERUTIL + select BR2_PACKAGE_XCB_UTIL_WM + select BR2_PACKAGE_LIBXKBCOMMON + +comment "X.org XCB backend available if X.org is enabled" + depends on !BR2_PACKAGE_XORG7 + +config BR2_PACKAGE_QT5BASE_EGLFS + bool "eglfs support" + depends on BR2_PACKAGE_HAS_LIBEGL + depends on BR2_PACKAGE_QT5_GL_AVAILABLE + select BR2_PACKAGE_QT5BASE_OPENGL + +comment "eglfs backend available if OpenGL and EGL are enabled" + depends on !BR2_PACKAGE_HAS_LIBEGL || !BR2_PACKAGE_QT5_GL_AVAILABLE + +config BR2_PACKAGE_QT5BASE_DEFAULT_QPA + string "Default graphical platform" + help + Choose the default platform abstraction to use for graphical + applications (e.g xcb, linuxfb, eglfs, ...). If this is + empty, the default for your architecture will be used + (usually this is eglfs). + + You can get a list of supported platforms by running a Qt + application with the option "-platform help" on your + target. You can choose a different platform at runtime with + the -platform option. + +config BR2_PACKAGE_QT5BASE_PRINTSUPPORT + depends on BR2_PACKAGE_QT5BASE_WIDGETS + def_bool y + +config BR2_PACKAGE_QT5BASE_FONTCONFIG + bool "fontconfig support" + select BR2_PACKAGE_FONTCONFIG + help + This option enables Fontconfig and Freetype support using + the system fontconfig and freetype2 libraries. + +config BR2_PACKAGE_QT5BASE_HARFBUZZ + bool "harfbuzz support" + select BR2_PACKAGE_HARFBUZZ if \ + BR2_TOOLCHAIN_HAS_SYNC_4 && \ + BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + help + This option enables HarfBuzz support (either system harfbuzz + if the toolchain supports __sync for 4 bytes, or the qt + provided one which avoids this dependency by using QAtomic). + +config BR2_PACKAGE_QT5BASE_GIF + bool "GIF support" + help + This compiles and installs the plugin for GIF reading support. + +config BR2_PACKAGE_QT5BASE_JPEG + bool "JPEG support" + select BR2_PACKAGE_JPEG + help + This option enables JPEG support using the system libjpeg + library. + +config BR2_PACKAGE_QT5BASE_PNG + bool "PNG support" + select BR2_PACKAGE_LIBPNG + help + This option enables PNG support using the system libpng + library. + +endif + +config BR2_PACKAGE_QT5BASE_SYSLOG + bool "syslog support" + help + Logs to the standard UNIX logging mechanism. + +config BR2_PACKAGE_QT5BASE_DBUS + bool "DBus module" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU + select BR2_PACKAGE_DBUS + help + This option enables the D-Bus module. + +config BR2_PACKAGE_QT5BASE_ICU + bool "Enable ICU support" + depends on !BR2_BINFMT_FLAT # icu + depends on BR2_HOST_GCC_AT_LEAST_4_9 # icu + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # icu + select BR2_PACKAGE_ICU + help + This option enables ICU support in Qt5. This is for example + needed for Qt5Webkit. + +comment "icu support needs a toolchain w/ gcc >= 4.9, host gcc >= 4.9" + depends on !BR2_BINFMT_FLAT + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || \ + !BR2_HOST_GCC_AT_LEAST_4_9 + +config BR2_PACKAGE_QT5BASE_TSLIB + bool "Enable Tslib support" + select BR2_PACKAGE_TSLIB + help + This options enables the Tslib plugin + +endif diff --git a/package/qt5/qt5base/qmake.conf.in b/package/qt5/qt5base/qmake.conf.in new file mode 100644 index 00000000..024c0749 --- /dev/null +++ b/package/qt5/qt5base/qmake.conf.in @@ -0,0 +1,38 @@ +# Qt5 has a mechanism to support "device" profiles, so that people can +# specify the compiler, compiler flags and so on for a specific device. + +# We leverage this mechanism in the Buildroot packaging of qt5 to +# simplify cross-compilation: we have our own "device" definition, which +# allows us to easily pass the cross-compiler paths and flags from our +# qt5.mk. + +include(../common/linux_device_pre.conf) + +# modifications to g++-unix.conf +QMAKE_CC = $${CROSS_COMPILE}gcc +QMAKE_CXX = $${CROSS_COMPILE}g++ + +# modifications to gcc-base.conf +QMAKE_CFLAGS += $${BR_COMPILER_CFLAGS} +QMAKE_CXXFLAGS += $${BR_COMPILER_CXXFLAGS} +# Remove all optimisation flags, we really only want our own. +QMAKE_CFLAGS_OPTIMIZE = +QMAKE_CFLAGS_OPTIMIZE_DEBUG = +QMAKE_CFLAGS_OPTIMIZE_FULL = +QMAKE_CFLAGS_OPTIMIZE_SIZE = +QMAKE_CFLAGS_DEBUG = +QMAKE_CXXFLAGS_DEBUG = +QMAKE_CFLAGS_RELEASE = +QMAKE_CXXFLAGS_RELEASE = +CONFIG += nostrip + +QMAKE_LIBS += -lrt -lpthread -ldl +QMAKE_CFLAGS_ISYSTEM = + +# Architecture specific configuration +include(arch.conf) + +@EGLFS_DEVICE@ + +include(../common/linux_device_post.conf) +load(qt_config) diff --git a/package/qt5/qt5base/qplatformdefs.h b/package/qt5/qt5base/qplatformdefs.h new file mode 100644 index 00000000..99e9a279 --- /dev/null +++ b/package/qt5/qt5base/qplatformdefs.h @@ -0,0 +1 @@ +#include "../../linux-g++/qplatformdefs.h" diff --git a/package/qt5/qt5base/qt.conf.in b/package/qt5/qt5base/qt.conf.in new file mode 100644 index 00000000..2215cbd4 --- /dev/null +++ b/package/qt5/qt5base/qt.conf.in @@ -0,0 +1,7 @@ +[Paths] +Prefix=/usr +HostPrefix=@@HOST_DIR@@ +Sysroot=@@STAGING_DIR@@ +Headers=/usr/include/qt5 +Plugins=/usr/lib/qt/plugins +Examples=/usr/lib/qt/examples diff --git a/package/qt5/qt5base/qt5base.hash b/package/qt5/qt5base/qt5base.hash new file mode 100644 index 00000000..a824890e --- /dev/null +++ b/package/qt5/qt5base/qt5base.hash @@ -0,0 +1,10 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtbase-everywhere-src-5.15.2.tar.xz.sha256 +sha256 909fad2591ee367993a75d7e2ea50ad4db332f05e1c38dd7a5a274e156a4e0f8 qtbase-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.GPL2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 0dbe024961f6ab5c52689cbd036c977975d0d0f6a67ff97762d96cb819dd5652 LICENSE.GPL3-EXCEPT +sha256 88ec689407cf2df9b2eb5c45952564d51ce73c129a3bdffb15c0d2d161ad7558 LICENSE.LGPLv3 +sha256 ed8742a95cb9db653a09b050e27ccff5e67ba69c14aa2c3137f2a4e1892f6c0d LICENSE.FDL +sha256 2a886915de4f296cdae5ed67064f86dba01d0c55286d86e8487f2a5caaf40216 src/3rdparty/harfbuzz-ng/COPYING diff --git a/package/qt5/qt5base/qt5base.mk b/package/qt5/qt5base/qt5base.mk new file mode 100644 index 00000000..84e9fa4e --- /dev/null +++ b/package/qt5/qt5base/qt5base.mk @@ -0,0 +1,328 @@ +################################################################################ +# +# qt5base +# +################################################################################ + +QT5BASE_VERSION = $(QT5_VERSION) +QT5BASE_SITE = $(QT5_SITE) +QT5BASE_SOURCE = qtbase-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5BASE_VERSION).tar.xz + +QT5BASE_DEPENDENCIES = host-pkgconf pcre2 zlib +QT5BASE_INSTALL_STAGING = YES + +# A few comments: +# * -no-pch to workaround the issue described at +# http://comments.gmane.org/gmane.comp.lib.qt.devel/5933. +# * -system-zlib because zlib is mandatory for Qt build, and we +# want to use the Buildroot packaged zlib +# * -system-pcre because pcre is mandatory to build Qt, and we +# want to use the one packaged in Buildroot +# * -no-feature-relocatable to work around path mismatch +# while searching qml files and buildroot BR2_ROOTFS_MERGED_USR +# feature enabled +QT5BASE_CONFIGURE_OPTS += \ + -optimized-qmake \ + -no-iconv \ + -system-zlib \ + -system-pcre \ + -no-pch \ + -shared \ + -no-feature-relocatable + +# starting from version 5.9.0, -optimize-debug is enabled by default +# for debug builds and it overrides -O* with -Og which is not what we +# want. +QT5BASE_CONFIGURE_OPTS += -no-optimize-debug + +QT5BASE_CFLAGS = $(TARGET_CFLAGS) +QT5BASE_CXXFLAGS = $(TARGET_CXXFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_90620),y) +QT5BASE_CFLAGS += -O0 +QT5BASE_CXXFLAGS += -O0 +endif + +ifeq ($(BR2_X86_CPU_HAS_SSE2),) +QT5BASE_CONFIGURE_OPTS += -no-sse2 +else ifeq ($(BR2_X86_CPU_HAS_SSE3),) +QT5BASE_CONFIGURE_OPTS += -no-sse3 +else ifeq ($(BR2_X86_CPU_HAS_SSSE3),) +QT5BASE_CONFIGURE_OPTS += -no-ssse3 +else ifeq ($(BR2_X86_CPU_HAS_SSE4),) +QT5BASE_CONFIGURE_OPTS += -no-sse4.1 +else ifeq ($(BR2_X86_CPU_HAS_SSE42),) +QT5BASE_CONFIGURE_OPTS += -no-sse4.2 +else ifeq ($(BR2_X86_CPU_HAS_AVX),) +QT5BASE_CONFIGURE_OPTS += -no-avx +else ifeq ($(BR2_X86_CPU_HAS_AVX2),) +QT5BASE_CONFIGURE_OPTS += -no-avx2 +else +# no buildroot BR2_X86_CPU_HAS_AVX512 option yet for qt configure +# option '-no-avx512' +endif + +ifeq ($(BR2_PACKAGE_LIBDRM),y) +QT5BASE_CONFIGURE_OPTS += -kms +QT5BASE_DEPENDENCIES += libdrm +else +QT5BASE_CONFIGURE_OPTS += -no-kms +endif + +# Uses libgbm from mesa3d +ifeq ($(BR2_PACKAGE_MESA3D_OPENGL_EGL),y) +QT5BASE_CONFIGURE_OPTS += -gbm +QT5BASE_DEPENDENCIES += mesa3d +else ifeq ($(BR2_PACKAGE_GCNANO_BINARIES),y) +QT5BASE_CONFIGURE_OPTS += -gbm +QT5BASE_DEPENDENCIES += gcnano-binaries +else ifeq ($(BR2_PACKAGE_TI_SGX_UM),y) +QT5BASE_CONFIGURE_OPTS += -gbm +QT5BASE_DEPENDENCIES += ti-sgx-um +else ifeq ($(BR2_PACKAGE_IMX_GPU_VIV_OUTPUT_WL),y) +QT5BASE_CONFIGURE_OPTS += -gbm +QT5BASE_DEPENDENCIES += imx-gpu-viv +else +QT5BASE_CONFIGURE_OPTS += -no-gbm +endif + +ifeq ($(BR2_ENABLE_DEBUG),y) +QT5BASE_CONFIGURE_OPTS += -debug +else +QT5BASE_CONFIGURE_OPTS += -release +endif + +QT5BASE_CONFIGURE_OPTS += -opensource -confirm-license +QT5BASE_LICENSE = GPL-2.0+ or LGPL-3.0, GPL-3.0 with exception(tools), GFDL-1.3 (docs) +QT5BASE_LICENSE_FILES = LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT LICENSE.LGPLv3 LICENSE.FDL +ifeq ($(BR2_PACKAGE_QT5BASE_EXAMPLES),y) +QT5BASE_LICENSE += , BSD-3-Clause (examples) +endif + +QT5BASE_CONFIG_FILE = $(call qstrip,$(BR2_PACKAGE_QT5BASE_CONFIG_FILE)) + +ifneq ($(QT5BASE_CONFIG_FILE),) +QT5BASE_CONFIGURE_OPTS += -qconfig buildroot +endif + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +QT5BASE_DEPENDENCIES += udev +endif + +ifeq ($(BR2_PACKAGE_CUPS), y) +QT5BASE_DEPENDENCIES += cups +QT5BASE_CONFIGURE_OPTS += -cups +else +QT5BASE_CONFIGURE_OPTS += -no-cups +endif + +# Qt5 SQL Plugins +ifeq ($(BR2_PACKAGE_QT5BASE_SQL),y) +ifeq ($(BR2_PACKAGE_QT5BASE_MYSQL),y) +QT5BASE_CONFIGURE_OPTS += -plugin-sql-mysql -mysql_config $(STAGING_DIR)/usr/bin/mysql_config +QT5BASE_DEPENDENCIES += mysql +else +QT5BASE_CONFIGURE_OPTS += -no-sql-mysql +endif + +ifeq ($(BR2_PACKAGE_QT5BASE_PSQL),y) +QT5BASE_CONFIGURE_OPTS += -plugin-sql-psql -psql_config $(STAGING_DIR)/usr/bin/pg_config +QT5BASE_DEPENDENCIES += postgresql +else +QT5BASE_CONFIGURE_OPTS += -no-sql-psql +endif + +QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_SQLITE_QT),-plugin-sql-sqlite) +QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_SQLITE_SYSTEM),-system-sqlite) +QT5BASE_DEPENDENCIES += $(if $(BR2_PACKAGE_QT5BASE_SQLITE_SYSTEM),sqlite) +QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_SQLITE_NONE),-no-sql-sqlite) +endif + +ifeq ($(BR2_PACKAGE_QT5BASE_GUI),y) +QT5BASE_CONFIGURE_OPTS += -gui -system-freetype +QT5BASE_DEPENDENCIES += freetype +else +QT5BASE_CONFIGURE_OPTS += -no-gui -no-freetype +endif + +ifeq ($(BR2_PACKAGE_QT5BASE_HARFBUZZ),y) +ifeq ($(BR2_TOOLCHAIN_HAS_SYNC_4),y) +# system harfbuzz in case __sync for 4 bytes is supported +QT5BASE_CONFIGURE_OPTS += -system-harfbuzz +QT5BASE_DEPENDENCIES += harfbuzz +else +# qt harfbuzz otherwise (using QAtomic instead) +QT5BASE_CONFIGURE_OPTS += -qt-harfbuzz +QT5BASE_LICENSE += , MIT (harfbuzz) +QT5BASE_LICENSE_FILES += src/3rdparty/harfbuzz-ng/COPYING +endif +else +QT5BASE_CONFIGURE_OPTS += -no-harfbuzz +endif + +QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_WIDGETS),-widgets,-no-widgets) +# We have to use --enable-linuxfb, otherwise Qt thinks that -linuxfb +# is to add a link against the "inuxfb" library. +QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_LINUXFB),--enable-linuxfb,-no-linuxfb) +QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_DIRECTFB),-directfb,-no-directfb) +QT5BASE_DEPENDENCIES += $(if $(BR2_PACKAGE_QT5BASE_DIRECTFB),directfb) + +ifeq ($(BR2_PACKAGE_QT5BASE_XCB),y) +QT5BASE_CONFIGURE_OPTS += -xcb +QT5BASE_CONFIGURE_OPTS += -xkbcommon + +QT5BASE_DEPENDENCIES += \ + libxcb \ + xcb-util-wm \ + xcb-util-image \ + xcb-util-keysyms \ + xcb-util-renderutil \ + xlib_libX11 \ + libxkbcommon +ifeq ($(BR2_PACKAGE_QT5BASE_WIDGETS),y) +QT5BASE_DEPENDENCIES += xlib_libXext +endif +else +QT5BASE_CONFIGURE_OPTS += -no-xcb +endif + +ifeq ($(BR2_PACKAGE_QT5BASE_OPENGL_DESKTOP),y) +QT5BASE_CONFIGURE_OPTS += -opengl desktop +QT5BASE_DEPENDENCIES += libgl +else ifeq ($(BR2_PACKAGE_QT5BASE_OPENGL_ES2),y) +QT5BASE_CONFIGURE_OPTS += -opengl es2 +QT5BASE_DEPENDENCIES += libgles +else +QT5BASE_CONFIGURE_OPTS += -no-opengl +endif + +QT5BASE_DEFAULT_QPA = $(call qstrip,$(BR2_PACKAGE_QT5BASE_DEFAULT_QPA)) +QT5BASE_CONFIGURE_OPTS += $(if $(QT5BASE_DEFAULT_QPA),-qpa $(QT5BASE_DEFAULT_QPA)) + +ifeq ($(BR2_PACKAGE_QT5BASE_EGLFS),y) +QT5BASE_CONFIGURE_OPTS += -eglfs +QT5BASE_DEPENDENCIES += libegl +else +QT5BASE_CONFIGURE_OPTS += -no-eglfs +endif + +QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_OPENSSL),-openssl,-no-openssl) +QT5BASE_DEPENDENCIES += $(if $(BR2_PACKAGE_OPENSSL),openssl) + +QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_FONTCONFIG),-fontconfig,-no-fontconfig) +QT5BASE_DEPENDENCIES += $(if $(BR2_PACKAGE_QT5BASE_FONTCONFIG),fontconfig) +QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_GIF),,-no-gif) +QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_JPEG),-system-libjpeg,-no-libjpeg) +QT5BASE_DEPENDENCIES += $(if $(BR2_PACKAGE_QT5BASE_JPEG),jpeg) +QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_PNG),-system-libpng,-no-libpng) +QT5BASE_DEPENDENCIES += $(if $(BR2_PACKAGE_QT5BASE_PNG),libpng) + +QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_DBUS),-dbus,-no-dbus) +QT5BASE_DEPENDENCIES += $(if $(BR2_PACKAGE_QT5BASE_DBUS),dbus) + +QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_TSLIB),-tslib,-no-tslib) +QT5BASE_DEPENDENCIES += $(if $(BR2_PACKAGE_QT5BASE_TSLIB),tslib) + +QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_LIBGLIB2),-glib,-no-glib) +QT5BASE_DEPENDENCIES += $(if $(BR2_PACKAGE_LIBGLIB2),libglib2) + +QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_ICU),-icu,-no-icu) +QT5BASE_DEPENDENCIES += $(if $(BR2_PACKAGE_QT5BASE_ICU),icu) + +QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_EXAMPLES),-make,-nomake) examples + +ifeq ($(BR2_PACKAGE_LIBINPUT),y) +QT5BASE_CONFIGURE_OPTS += -libinput +QT5BASE_DEPENDENCIES += libinput +else +QT5BASE_CONFIGURE_OPTS += -no-libinput +endif + +# only enable gtk support if libgtk3 X11 backend is enabled +ifeq ($(BR2_PACKAGE_LIBGTK3)$(BR2_PACKAGE_LIBGTK3_X11),yy) +QT5BASE_CONFIGURE_OPTS += -gtk +QT5BASE_DEPENDENCIES += libgtk3 +else +QT5BASE_CONFIGURE_OPTS += -no-gtk +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +QT5BASE_CONFIGURE_OPTS += -journald +QT5BASE_DEPENDENCIES += systemd +else +QT5BASE_CONFIGURE_OPTS += -no-journald +endif + +ifeq ($(BR2_PACKAGE_QT5BASE_SYSLOG),y) +QT5BASE_CONFIGURE_OPTS += -syslog +else +QT5BASE_CONFIGURE_OPTS += -no-syslog +endif + +ifeq ($(BR2_PACKAGE_IMX_GPU_VIV),y) +# use vivante backend +QT5BASE_EGLFS_DEVICE = EGLFS_DEVICE_INTEGRATION = eglfs_viv +else ifeq ($(BR2_PACKAGE_SUNXI_MALI_MAINLINE),y) +# use mali backend +QT5BASE_EGLFS_DEVICE = EGLFS_DEVICE_INTEGRATION = eglfs_mali +endif + +ifneq ($(QT5BASE_CONFIG_FILE),) +define QT5BASE_CONFIGURE_CONFIG_FILE + cp $(QT5BASE_CONFIG_FILE) $(@D)/src/corelib/global/qconfig-buildroot.h +endef +endif + +QT5BASE_ARCH_CONFIG_FILE = $(@D)/mkspecs/devices/linux-buildroot-g++/arch.conf +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +# Qt 5.8 needs atomics, which on various architectures are in -latomic +define QT5BASE_CONFIGURE_ARCH_CONFIG + printf 'LIBS += -latomic\n' >$(QT5BASE_ARCH_CONFIG_FILE) +endef +endif + +# This allows to use ccache when available +define QT5BASE_CONFIGURE_HOSTCC + $(SED) 's,^QMAKE_CC\s*=.*,QMAKE_CC = $(HOSTCC),' $(@D)/mkspecs/common/g++-base.conf + $(SED) 's,^QMAKE_CXX\s*=.*,QMAKE_CXX = $(HOSTCXX),' $(@D)/mkspecs/common/g++-base.conf +endef + +# Must be last so can override all options set by Buildroot +QT5BASE_CONFIGURE_OPTS += $(call qstrip,$(BR2_PACKAGE_QT5BASE_CUSTOM_CONF_OPTS)) + +define QT5BASE_CONFIGURE_CMDS + mkdir -p $(@D)/mkspecs/devices/linux-buildroot-g++/ + sed 's/@EGLFS_DEVICE@/$(QT5BASE_EGLFS_DEVICE)/g' \ + $(QT5BASE_PKGDIR)/qmake.conf.in > \ + $(@D)/mkspecs/devices/linux-buildroot-g++/qmake.conf + $(INSTALL) -m 0644 -D $(QT5BASE_PKGDIR)/qplatformdefs.h \ + $(@D)/mkspecs/devices/linux-buildroot-g++/qplatformdefs.h + $(QT5BASE_CONFIGURE_CONFIG_FILE) + touch $(QT5BASE_ARCH_CONFIG_FILE) + $(QT5BASE_CONFIGURE_ARCH_CONFIG) + $(QT5BASE_CONFIGURE_HOSTCC) + (cd $(@D); \ + $(TARGET_MAKE_ENV) \ + PKG_CONFIG="$(PKG_CONFIG_HOST_BINARY)" \ + MAKEFLAGS="-j$(PARALLEL_JOBS) $(MAKEFLAGS)" \ + ./configure \ + -v \ + -prefix /usr \ + -hostprefix $(HOST_DIR) \ + -headerdir /usr/include/qt5 \ + -sysroot $(STAGING_DIR) \ + -plugindir /usr/lib/qt/plugins \ + -examplesdir /usr/lib/qt/examples \ + -no-rpath \ + -nomake tests \ + -device buildroot \ + -device-option CROSS_COMPILE="$(TARGET_CROSS)" \ + -device-option BR_COMPILER_CFLAGS="$(QT5BASE_CFLAGS)" \ + -device-option BR_COMPILER_CXXFLAGS="$(QT5BASE_CXXFLAGS)" \ + $(QT5BASE_CONFIGURE_OPTS) \ + ) +endef + +QT5BASE_POST_INSTALL_STAGING_HOOKS += QT5_INSTALL_QT_CONF + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5charts/Config.in b/package/qt5/qt5charts/Config.in new file mode 100644 index 00000000..a72da65e --- /dev/null +++ b/package/qt5/qt5charts/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_QT5CHARTS + bool "qt5charts" + select BR2_PACKAGE_QT5BASE_GUI + select BR2_PACKAGE_QT5BASE_WIDGETS + help + Qt is a cross-platform application and UI framework for + developers using C++. + + Qt Charts module provides a set of easy to use chart + components. + + https://doc.qt.io/qt-5/qtcharts-index.html diff --git a/package/qt5/qt5charts/qt5charts.hash b/package/qt5/qt5charts/qt5charts.hash new file mode 100644 index 00000000..b52be714 --- /dev/null +++ b/package/qt5/qt5charts/qt5charts.hash @@ -0,0 +1,5 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtcharts-everywhere-src-5.15.2.tar.xz.sha256 +sha256 e0750e4195bd8a8b9758ab4d98d437edbe273cd3d289dd6a8f325df6d13f3d11 qtcharts-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 diff --git a/package/qt5/qt5charts/qt5charts.mk b/package/qt5/qt5charts/qt5charts.mk new file mode 100644 index 00000000..2c40ac1c --- /dev/null +++ b/package/qt5/qt5charts/qt5charts.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# qt5charts +# +################################################################################ + +QT5CHARTS_VERSION = $(QT5_VERSION) +QT5CHARTS_SITE = $(QT5_SITE) +QT5CHARTS_SOURCE = qtcharts-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5CHARTS_VERSION).tar.xz +QT5CHARTS_INSTALL_STAGING = YES + +QT5CHARTS_LICENSE = GPL-3.0 +QT5CHARTS_LICENSE_FILES = LICENSE.GPL3 + +ifeq ($(BR2_PACKAGE_QT5DECLARATIVE),y) +QT5CHARTS_DEPENDENCIES += qt5declarative +endif + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5coap/Config.in b/package/qt5/qt5coap/Config.in new file mode 100644 index 00000000..b5bed342 --- /dev/null +++ b/package/qt5/qt5coap/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_QT5COAP + bool "qt5coap" + help + Qt is a cross-platform application and UI framework for + developers using C++. + + CoAP is a protocol for IoT devices, and machine to machine + communication. The Qt CoAP module implements the client side + of CoAP defined by RFC 7252. + + https://doc.qt.io/QtCoAP/qtcoap-index.html diff --git a/package/qt5/qt5coap/qt5coap.hash b/package/qt5/qt5coap/qt5coap.hash new file mode 100644 index 00000000..9c0258f4 --- /dev/null +++ b/package/qt5/qt5coap/qt5coap.hash @@ -0,0 +1,6 @@ +# Hash locally calculated +sha256 0ad05a2305437b9b96a4322bfadaa26f043ba16845d5303e53c00c82b37b243f qt5coap-5.15.2-br1.tar.gz + +# Hashes for license files: +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 f827ad079686ba92cc94811e35492d0e8966f704008b6da9eeda0b659fb58a8d LICENSE.FDL diff --git a/package/qt5/qt5coap/qt5coap.mk b/package/qt5/qt5coap/qt5coap.mk new file mode 100644 index 00000000..24de8691 --- /dev/null +++ b/package/qt5/qt5coap/qt5coap.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# qt5coap +# +################################################################################ + +QT5COAP_VERSION = $(QT5_VERSION) +QT5COAP_SITE = https://code.qt.io/cgit/qt/qtcoap.git +QT5COAP_SITE_METHOD = git +QT5COAP_INSTALL_STAGING = YES +QT5COAP_LICENSE = GPL-3.0, GFDL-1.3 +QT5COAP_LICENSE_FILES = LICENSE.GPL3 LICENSE.FDL +QT5COAP_SYNC_QT_HEADERS = YES + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5connectivity/Config.in b/package/qt5/qt5connectivity/Config.in new file mode 100644 index 00000000..51e8978f --- /dev/null +++ b/package/qt5/qt5connectivity/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_QT5CONNECTIVITY + bool "qt5connectivity" + depends on BR2_PACKAGE_NEARD || BR2_PACKAGE_BLUEZ5_UTILS + select BR2_PACKAGE_QT5BASE_CONCURRENT + select BR2_PACKAGE_QT5BASE_DBUS + help + Qt is a cross-platform application and UI framework for + developers using C++. + + Qt Connectivity module provides support for Bluetooth/NFC + peripherials. + + http://doc.qt.io/qt-5/qtbluetooth-index.html + http://doc.qt.io/qt-5/qtnfc-index.html + +comment "qt5connectivity needs neard and/or bluez5_utils" + depends on !BR2_PACKAGE_NEARD && !BR2_PACKAGE_BLUEZ5_UTILS diff --git a/package/qt5/qt5connectivity/qt5connectivity.hash b/package/qt5/qt5connectivity/qt5connectivity.hash new file mode 100644 index 00000000..3edc2d66 --- /dev/null +++ b/package/qt5/qt5connectivity/qt5connectivity.hash @@ -0,0 +1,9 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtconnectivity-everywhere-src-5.15.2.tar.xz.sha256 +sha256 0380327871f76103e5b8c2a305988d76d352b6a982b3e7b3bc3cdc184c64bfa0 qtconnectivity-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.GPL2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 0dbe024961f6ab5c52689cbd036c977975d0d0f6a67ff97762d96cb819dd5652 LICENSE.GPL3-EXCEPT +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 LICENSE.LGPL3 +sha256 ed8742a95cb9db653a09b050e27ccff5e67ba69c14aa2c3137f2a4e1892f6c0d LICENSE.FDL diff --git a/package/qt5/qt5connectivity/qt5connectivity.mk b/package/qt5/qt5connectivity/qt5connectivity.mk new file mode 100644 index 00000000..6402b505 --- /dev/null +++ b/package/qt5/qt5connectivity/qt5connectivity.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# qt5connectivity +# +################################################################################ + +QT5CONNECTIVITY_VERSION = $(QT5_VERSION) +QT5CONNECTIVITY_SITE = $(QT5_SITE) +QT5CONNECTIVITY_SOURCE = qtconnectivity-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5CONNECTIVITY_VERSION).tar.xz +QT5CONNECTIVITY_INSTALL_STAGING = YES + +QT5CONNECTIVITY_LICENSE = GPL-2.0+ or LGPL-3.0, GPL-3.0 with exception(tools), GFDL-1.3 (docs) +QT5CONNECTIVITY_LICENSE_FILES = LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT LICENSE.LGPL3 LICENSE.FDL + +ifeq ($(BR2_PACKAGE_QT5BASE_EXAMPLES),y) +QT5CONNECTIVITY_LICENSE += , BSD-3-Clause (examples) +endif + +QT5CONNECTIVITY_DEPENDENCIES += $(if $(BR2_PACKAGE_QT5DECLARATIVE),qt5declarative) +QT5CONNECTIVITY_DEPENDENCIES += $(if $(BR2_PACKAGE_BLUEZ5_UTILS),bluez5_utils) +QT5CONNECTIVITY_DEPENDENCIES += $(if $(BR2_PACKAGE_NEARD),neard) + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5declarative/0001-qsgtexture-fix-debug-build-with-uclibc.patch b/package/qt5/qt5declarative/0001-qsgtexture-fix-debug-build-with-uclibc.patch new file mode 100644 index 00000000..b6de49e1 --- /dev/null +++ b/package/qt5/qt5declarative/0001-qsgtexture-fix-debug-build-with-uclibc.patch @@ -0,0 +1,47 @@ +From dfa9555010535003eac69788597f53d3ff44168f Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Thu, 29 Nov 2018 23:33:10 +0100 +Subject: [PATCH] qsgtexture: fix debug build with uclibc + +Debug build of gsgtexture fails on uclibc since version 5.11 and +https://github.com/qt/qtdeclarative/commit/7c507eaac3f848f92f2ebdafe8ded4a064d68351: + +scenegraph/util/qsgtexture.cpp:69:22: fatal error: execinfo.h: No such file or directory + #include + +Indeed, !defined(__UCLIBC__) has been replaced by defined(__GBLIBC__) to +fix build on musl but as a result, build fails on uclibc because uclibc +also defines __GLIBC__ (and it does not have execinfo like musl) + +This error is raised only when building in debug mode because +CAN_BACKTRACE_EXECINFO is undefined if QT_NO_DEBUG is set + +So keep defined(__GLIBC__), but put back !defined(__UCLIBC__) + +Fixes: + - http://autobuild.buildroot.org/results/6fce0ce5aea943e097532efbbc8d1e28f41e5866 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/qt/qtdeclarative/pull/4] +[Rebased for Qt5.14.0] +Signed-off-by: Peter Seiderer +--- + src/quick/scenegraph/coreapi/qsgtexture.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/quick/scenegraph/coreapi/qsgtexture.cpp b/src/quick/scenegraph/coreapi/qsgtexture.cpp +index dfbe4d3f..6a7bc79b 100644 +--- a/src/quick/scenegraph/coreapi/qsgtexture.cpp ++++ b/src/quick/scenegraph/coreapi/qsgtexture.cpp +@@ -46,7 +46,7 @@ + #include + #include + +-#if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID) && defined(__GLIBC__) ++#if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID) && defined(__GLIBC__) && !defined(__UCLIBC__) + #define CAN_BACKTRACE_EXECINFO + #endif + +-- +2.23.0 + diff --git a/package/qt5/qt5declarative/Config.in b/package/qt5/qt5declarative/Config.in new file mode 100644 index 00000000..3ba9224c --- /dev/null +++ b/package/qt5/qt5declarative/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_QT5DECLARATIVE + bool "qt5declarative" + depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE + select BR2_PACKAGE_QT5BASE_GUI + help + Qt is a cross-platform application and UI framework for + developers using C++. + + Qt Declarative module provides the Qt QML and Qt Quick + modules for developing UIs with the QML language + + http://doc.qt.io/qt-5/qtqml-index.html + http://doc.qt.io/qt-5/qtquick-index.html + +if BR2_PACKAGE_QT5DECLARATIVE + +config BR2_PACKAGE_QT5DECLARATIVE_QUICK + bool "quick module" + select BR2_PACKAGE_QT5BASE_OPENGL if BR2_PACKAGE_QT5_GL_AVAILABLE + +endif diff --git a/package/qt5/qt5declarative/qt5declarative.hash b/package/qt5/qt5declarative/qt5declarative.hash new file mode 100644 index 00000000..ab83b718 --- /dev/null +++ b/package/qt5/qt5declarative/qt5declarative.hash @@ -0,0 +1,9 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtdeclarative-everywhere-src-5.15.2.tar.xz.sha256 +sha256 c600d09716940f75d684f61c5bdaced797f623a86db1627da599027f6c635651 qtdeclarative-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.GPL2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 0dbe024961f6ab5c52689cbd036c977975d0d0f6a67ff97762d96cb819dd5652 LICENSE.GPL3-EXCEPT +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 LICENSE.LGPL3 +sha256 ed8742a95cb9db653a09b050e27ccff5e67ba69c14aa2c3137f2a4e1892f6c0d LICENSE.FDL diff --git a/package/qt5/qt5declarative/qt5declarative.mk b/package/qt5/qt5declarative/qt5declarative.mk new file mode 100644 index 00000000..3318cd24 --- /dev/null +++ b/package/qt5/qt5declarative/qt5declarative.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# qt5declarative +# +################################################################################ + +QT5DECLARATIVE_VERSION = $(QT5_VERSION) +QT5DECLARATIVE_SITE = $(QT5_SITE) +QT5DECLARATIVE_SOURCE = qtdeclarative-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5DECLARATIVE_VERSION).tar.xz +QT5DECLARATIVE_INSTALL_STAGING = YES + +QT5DECLARATIVE_LICENSE = GPL-2.0+ or LGPL-3.0, GPL-3.0 with exception(tools), GFDL-1.3 (docs) +QT5DECLARATIVE_LICENSE_FILES = LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT LICENSE.LGPL3 LICENSE.FDL + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5enginio/0001-Do-not-use-deprecated-QLinkedList.patch b/package/qt5/qt5enginio/0001-Do-not-use-deprecated-QLinkedList.patch new file mode 100644 index 00000000..0a3fd807 --- /dev/null +++ b/package/qt5/qt5enginio/0001-Do-not-use-deprecated-QLinkedList.patch @@ -0,0 +1,39 @@ +From ca81a62bb3f8ce67d564631bb8d4e11619acf430 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Fri, 3 Apr 2020 19:59:47 +0200 +Subject: [PATCH] Do not use deprecated QLinkedList +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Do not use (internally already by QT_NO_LINKED_LIST) deprecated QLinkeList, +use QList instead. + +Fixes: + + ../../include/Enginio/1.6.3/Enginio/private/../../../../../src/enginio_client/enginioclient_p.h:293:5: error: ‘QLinkedList’ does not name a type + +Signed-off-by: Peter Seiderer +--- + src/enginio_client/enginioclient_p.h | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/enginio_client/enginioclient_p.h b/src/enginio_client/enginioclient_p.h +index 6b5dc53..f3fe68e 100644 +--- a/src/enginio_client/enginioclient_p.h ++++ b/src/enginio_client/enginioclient_p.h +@@ -290,7 +290,11 @@ public: + QByteArray _backendId; + EnginioIdentity *_identity; + ++#if defined(QT_NO_LINKED_LIST) ++ QList _connections; ++#else + QLinkedList _connections; ++#endif + QVarLengthArray _identityConnections; + QUrl _serviceUrl; + QSharedPointer _networkManager; +-- +2.26.0 + diff --git a/package/qt5/qt5enginio/Config.in b/package/qt5/qt5enginio/Config.in new file mode 100644 index 00000000..d445d91d --- /dev/null +++ b/package/qt5/qt5enginio/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_QT5ENGINIO + bool "qt5enginio" + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_QT5BASE_GUI + select BR2_PACKAGE_QT5BASE_NETWORK + help + Qt is a cross-platform application and UI framework for + developers using C++. + + Enginio is a Backend-as-a-Service solution for simplifying + backend development of connected and data-driven applications. + + This package has been tagged as deprecated since version + 5.6 and not recommended for new design. + + http://doc.qt.io/archives/qt-5.5/enginio-index.html diff --git a/package/qt5/qt5enginio/qt5enginio.hash b/package/qt5/qt5enginio/qt5enginio.hash new file mode 100644 index 00000000..88496209 --- /dev/null +++ b/package/qt5/qt5enginio/qt5enginio.hash @@ -0,0 +1,9 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.6/5.6.3/submodules/qtenginio-opensource-src-1.6.3.tar.xz.mirrorlist +sha256 d907060b355512ceb7a8c3f6980e3979c20d54320b6804303b6c5e8ed42d3912 qtenginio-opensource-src-1.6.3.tar.xz + +# Hashes for license files: +sha256 245248009fd0af1725d183248380e476c1283383909358a13686606352bf2a17 LICENSE.GPLv3 +sha256 1996a36160b2158c2be264d2ddfa6148ebe0f1ececff55aca8d754a1ddcc7bb8 LICENSE.LGPLv21 +sha256 438c1f9a2b256e47dac33249f2ad6d4a9df643f1ec5312216d528a2f7ad82084 LGPL_EXCEPTION.txt +sha256 5ceb37d1c7c1d92878b82af3c0fd5558087f3d5a08a3a4d43850bad4ad265a52 LICENSE.LGPLv3 +sha256 f827ad079686ba92cc94811e35492d0e8966f704008b6da9eeda0b659fb58a8d LICENSE.FDL diff --git a/package/qt5/qt5enginio/qt5enginio.mk b/package/qt5/qt5enginio/qt5enginio.mk new file mode 100644 index 00000000..a9572db2 --- /dev/null +++ b/package/qt5/qt5enginio/qt5enginio.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# qt5enginio +# +################################################################################ + +# Qt5Enginio does not follow Qt versionning +# see https://bugreports.qt.io/browse/QTBUG-50111 +QT5ENGINIO_VERSION = 1.6.3 +QT5ENGINIO_SITE = https://download.qt.io/official_releases/qt/5.6/5.6.3/submodules +QT5ENGINIO_SOURCE = qtenginio-opensource-src-$(QT5ENGINIO_VERSION).tar.xz +QT5ENGINIO_DEPENDENCIES = openssl +QT5ENGINIO_INSTALL_STAGING = YES + +QT5ENGINIO_LICENSE = GPL-3.0 or LGPL-2.1 with exception or LGPL-3.0, GFDL-1.3 (docs) +QT5ENGINIO_LICENSE_FILES = LICENSE.GPLv3 LICENSE.LGPLv21 LGPL_EXCEPTION.txt LICENSE.LGPLv3 LICENSE.FDL +ifeq ($(BR2_PACKAGE_QT5BASE_EXAMPLES),y) +QT5ENGINIO_LICENSE += , BSD-3-Clause (examples) +endif + +ifeq ($(BR2_PACKAGE_QT5DECLARATIVE),y) +QT5ENGINIO_DEPENDENCIES += qt5declarative +endif + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5graphicaleffects/Config.in b/package/qt5/qt5graphicaleffects/Config.in new file mode 100644 index 00000000..69b7fca4 --- /dev/null +++ b/package/qt5/qt5graphicaleffects/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_QT5GRAPHICALEFFECTS + bool "qt5graphicaleffects" + depends on BR2_PACKAGE_QT5_GL_AVAILABLE + depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE + select BR2_PACKAGE_QT5DECLARATIVE + select BR2_PACKAGE_QT5DECLARATIVE_QUICK + help + Qt is a cross-platform application and UI framework for + developers using C++. + + The Qt Graphical Effects module provides a set of QML types + for adding visually impressive and configurable effects to + user interfaces. + + http://doc.qt.io/qt-5/qtgraphicaleffects-index.html + +comment "qt5graphicaleffects needs an OpenGL-capable backend" + depends on !BR2_PACKAGE_QT5_GL_AVAILABLE + depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE diff --git a/package/qt5/qt5graphicaleffects/qt5graphicaleffects.hash b/package/qt5/qt5graphicaleffects/qt5graphicaleffects.hash new file mode 100644 index 00000000..9d7a837b --- /dev/null +++ b/package/qt5/qt5graphicaleffects/qt5graphicaleffects.hash @@ -0,0 +1,9 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtgraphicaleffects-everywhere-src-5.15.2.tar.xz.sha256 +sha256 ec8d67f64967d5046410490b549c576f9b9e8b47ec68594ae84aa8870173dfe4 qtgraphicaleffects-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.GPL2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 0dbe024961f6ab5c52689cbd036c977975d0d0f6a67ff97762d96cb819dd5652 LICENSE.GPL3-EXCEPT +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 LICENSE.LGPL3 +sha256 ed8742a95cb9db653a09b050e27ccff5e67ba69c14aa2c3137f2a4e1892f6c0d LICENSE.FDL diff --git a/package/qt5/qt5graphicaleffects/qt5graphicaleffects.mk b/package/qt5/qt5graphicaleffects/qt5graphicaleffects.mk new file mode 100644 index 00000000..a9ddff45 --- /dev/null +++ b/package/qt5/qt5graphicaleffects/qt5graphicaleffects.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# qt5graphicaleffects +# +################################################################################ + +QT5GRAPHICALEFFECTS_VERSION = $(QT5_VERSION) +QT5GRAPHICALEFFECTS_SITE = $(QT5_SITE) +QT5GRAPHICALEFFECTS_SOURCE = qtgraphicaleffects-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5GRAPHICALEFFECTS_VERSION).tar.xz +QT5GRAPHICALEFFECTS_DEPENDENCIES = qt5declarative +QT5GRAPHICALEFFECTS_INSTALL_STAGING = YES + +QT5GRAPHICALEFFECTS_LICENSE = GPL-2.0+ or LGPL-3.0, GPL-3.0 with exception(tools), GFDL-1.3 (docs) +QT5GRAPHICALEFFECTS_LICENSE_FILES = LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT LICENSE.LGPL3 LICENSE.FDL + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5imageformats/Config.in b/package/qt5/qt5imageformats/Config.in new file mode 100644 index 00000000..991f22f5 --- /dev/null +++ b/package/qt5/qt5imageformats/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_QT5IMAGEFORMATS + bool "qt5imageformats" + select BR2_PACKAGE_QT5BASE_GUI + help + Qt is a cross-platform application and UI framework for + developers using C++. + + The Qt Image Formats module provides plugins for + additional image formats: TIFF, MNG, TGA, WBMP + + http://doc.qt.io/qt-5/qtimageformats-index.html diff --git a/package/qt5/qt5imageformats/qt5imageformats.hash b/package/qt5/qt5imageformats/qt5imageformats.hash new file mode 100644 index 00000000..b4281e71 --- /dev/null +++ b/package/qt5/qt5imageformats/qt5imageformats.hash @@ -0,0 +1,9 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtimageformats-everywhere-src-5.15.2.tar.xz.sha256 +sha256 bf8285c7ce04284527ab823ddc7cf48a1bb79131db3a7127342167f4814253d7 qtimageformats-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 edfe70e99be2a7c109d860b19204609e582720b211c50caedac729da372a1253 LICENSE.GPLv2 +sha256 245248009fd0af1725d183248380e476c1283383909358a13686606352bf2a17 LICENSE.GPLv3 +sha256 0dbe024961f6ab5c52689cbd036c977975d0d0f6a67ff97762d96cb819dd5652 LICENSE.GPL3-EXCEPT +sha256 5ceb37d1c7c1d92878b82af3c0fd5558087f3d5a08a3a4d43850bad4ad265a52 LICENSE.LGPLv3 +sha256 ed8742a95cb9db653a09b050e27ccff5e67ba69c14aa2c3137f2a4e1892f6c0d LICENSE.FDL diff --git a/package/qt5/qt5imageformats/qt5imageformats.mk b/package/qt5/qt5imageformats/qt5imageformats.mk new file mode 100644 index 00000000..ffb094d5 --- /dev/null +++ b/package/qt5/qt5imageformats/qt5imageformats.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# qt5imageformats +# +################################################################################ + +QT5IMAGEFORMATS_VERSION = $(QT5_VERSION) +QT5IMAGEFORMATS_SITE = $(QT5_SITE) +QT5IMAGEFORMATS_SOURCE = qtimageformats-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5IMAGEFORMATS_VERSION).tar.xz +QT5IMAGEFORMATS_INSTALL_STAGING = YES + +QT5IMAGEFORMATS_LICENSE = GPL-2.0+ or LGPL-3.0, GPL-3.0 with exception(tools), GFDL-1.3 (docs) +QT5IMAGEFORMATS_LICENSE_FILES = LICENSE.GPLv2 LICENSE.GPLv3 LICENSE.GPL3-EXCEPT LICENSE.LGPLv3 LICENSE.FDL + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5knx/Config.in b/package/qt5/qt5knx/Config.in new file mode 100644 index 00000000..991e93c8 --- /dev/null +++ b/package/qt5/qt5knx/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_QT5KNX + bool "qt5knx" + help + Qt is a cross-platform application and UI framework for + developers using C++. + + The Qt KNX module implements the client side of a connection + between a client and a KNXnet/IP server. This connection + can be used to send messages to the KNX bus and to control + the functionalities of the KNX devices. + + https://doc.qt.io/QtKNX/index.html diff --git a/package/qt5/qt5knx/qt5knx.hash b/package/qt5/qt5knx/qt5knx.hash new file mode 100644 index 00000000..031fad5e --- /dev/null +++ b/package/qt5/qt5knx/qt5knx.hash @@ -0,0 +1,6 @@ +# Hash locally calculated +sha256 932ea512aa8ceb514ac40ce1fcbebe86c306caff1a0b11320d9a36fd84bae10c qt5knx-5.15.2-br1.tar.gz + +# Hashes for license files: +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 f827ad079686ba92cc94811e35492d0e8966f704008b6da9eeda0b659fb58a8d LICENSE.FDL diff --git a/package/qt5/qt5knx/qt5knx.mk b/package/qt5/qt5knx/qt5knx.mk new file mode 100644 index 00000000..9fc12111 --- /dev/null +++ b/package/qt5/qt5knx/qt5knx.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# qt5knx +# +################################################################################ + +QT5KNX_VERSION = $(QT5_VERSION) +QT5KNX_SITE = https://code.qt.io/cgit/qt/qtknx.git +QT5KNX_SITE_METHOD = git +QT5KNX_INSTALL_STAGING = YES +QT5KNX_LICENSE = GPL-3.0 with exception +QT5KNX_LICENSE_FILES = LICENSE.GPL3 LICENSE.GPL3-EXCEPT +QT5KNX_SYNC_QT_HEADERS = YES + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5location/Config.in b/package/qt5/qt5location/Config.in new file mode 100644 index 00000000..c68deb10 --- /dev/null +++ b/package/qt5/qt5location/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_QT5LOCATION + bool "qt5location" + select BR2_PACKAGE_QT5BASE_GUI + help + Qt is a cross-platform application and UI framework for + developers using C++. + + The Qt Location API helps you create viable mapping + solutions using the data available from some of the + popular location services. + + http://doc.qt.io/qt-5/qtlocation-index.html diff --git a/package/qt5/qt5location/qt5location.hash b/package/qt5/qt5location/qt5location.hash new file mode 100644 index 00000000..0bb29330 --- /dev/null +++ b/package/qt5/qt5location/qt5location.hash @@ -0,0 +1,9 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtlocation-everywhere-src-5.15.2.tar.xz.sha256 +sha256 984fcb09e108df49a8dac35d5ce6dffc49caafd2acb1c2f8a5173a6a21f392a0 qtlocation-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.GPL2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 0dbe024961f6ab5c52689cbd036c977975d0d0f6a67ff97762d96cb819dd5652 LICENSE.GPL3-EXCEPT +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 LICENSE.LGPL3 +sha256 ed8742a95cb9db653a09b050e27ccff5e67ba69c14aa2c3137f2a4e1892f6c0d LICENSE.FDL diff --git a/package/qt5/qt5location/qt5location.mk b/package/qt5/qt5location/qt5location.mk new file mode 100644 index 00000000..ea741d0d --- /dev/null +++ b/package/qt5/qt5location/qt5location.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# qt5location +# +################################################################################ + +QT5LOCATION_VERSION = $(QT5_VERSION) +QT5LOCATION_SITE = $(QT5_SITE) +QT5LOCATION_SOURCE = qtlocation-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5LOCATION_VERSION).tar.xz +QT5LOCATION_INSTALL_STAGING = YES + +QT5LOCATION_LICENSE = GPL-2.0+ or LGPL-3.0, GPL-3.0 with exception(tools), GFDL-1.3 (docs) +QT5LOCATION_LICENSE_FILES = LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT LICENSE.LGPL3 LICENSE.FDL + +ifeq ($(BR2_PACKAGE_QT5DECLARATIVE),y) +QT5LOCATION_DEPENDENCIES += qt5declarative +endif + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5lottie/Config.in b/package/qt5/qt5lottie/Config.in new file mode 100644 index 00000000..de5f16d5 --- /dev/null +++ b/package/qt5/qt5lottie/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_QT5LOTTIE + bool "qt5lottie" + depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE + select BR2_PACKAGE_QT5DECLARATIVE + select BR2_PACKAGE_QT5DECLARATIVE_QUICK + help + Qt is a cross-platform application and UI framework for + developers using C++. + + This package corresponds to the qt5lottie module. + + https://doc.qt.io/qt-5/qtlottieanimation-index.html diff --git a/package/qt5/qt5lottie/qt5lottie.hash b/package/qt5/qt5lottie/qt5lottie.hash new file mode 100644 index 00000000..740f9072 --- /dev/null +++ b/package/qt5/qt5lottie/qt5lottie.hash @@ -0,0 +1,6 @@ +# Hash from: http://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtlottie-everywhere-src-5.15.2.tar.xz.sha256 +sha256 cec6095ab8f714e609d2ad3ea8c4fd819461ce8793adc42abe37d0f6dc432517 qtlottie-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 0dbe024961f6ab5c52689cbd036c977975d0d0f6a67ff97762d96cb819dd5652 LICENSE.GPL3-EXCEPT diff --git a/package/qt5/qt5lottie/qt5lottie.mk b/package/qt5/qt5lottie/qt5lottie.mk new file mode 100644 index 00000000..1423a629 --- /dev/null +++ b/package/qt5/qt5lottie/qt5lottie.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# qt5lottie +# +################################################################################ + +QT5LOTTIE_VERSION = $(QT5_VERSION) +QT5LOTTIE_SITE = $(QT5_SITE) +QT5LOTTIE_SOURCE = qtlottie-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5LOTTIE_VERSION).tar.xz +QT5LOTTIE_DEPENDENCIES = qt5declarative +QT5LOTTIE_INSTALL_STAGING = YES + +QT5LOTTIE_LICENSE = GPL-3.0 +QT5LOTTIE_LICENSE_FILES = LICENSE.GPL3 LICENSE.GPL3-EXCEPT + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5mqtt/Config.in b/package/qt5/qt5mqtt/Config.in new file mode 100644 index 00000000..d81575ee --- /dev/null +++ b/package/qt5/qt5mqtt/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_QT5MQTT + bool "qt5mqtt" + help + Qt is a cross-platform application and UI framework for + developers using C++. + + The Qt MQTT module provides a standard compliant + implementation of the MQTT protocol specification. It + enables applications to act as telemetry displays and + devices to publish telemetry data. The supported versions + are MQTT 3.1, MQTT 3.1.1, and MQTT 5.0. + + https://doc.qt.io/QtMQTT/index.html diff --git a/package/qt5/qt5mqtt/qt5mqtt.hash b/package/qt5/qt5mqtt/qt5mqtt.hash new file mode 100644 index 00000000..f4ea6b70 --- /dev/null +++ b/package/qt5/qt5mqtt/qt5mqtt.hash @@ -0,0 +1,6 @@ +# Hash locally calculated +sha256 38f2bc1bcbdf76d30d78c86426c85f62a6c2091c997cad4b087039f795b2b406 qt5mqtt-5.15.2-br1.tar.gz + +# Hashes for license files: +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 0dbe024961f6ab5c52689cbd036c977975d0d0f6a67ff97762d96cb819dd5652 LICENSE.GPL3-EXCEPT diff --git a/package/qt5/qt5mqtt/qt5mqtt.mk b/package/qt5/qt5mqtt/qt5mqtt.mk new file mode 100644 index 00000000..54cc1de6 --- /dev/null +++ b/package/qt5/qt5mqtt/qt5mqtt.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# qt5mqtt +# +################################################################################ + +QT5MQTT_VERSION = $(QT5_VERSION) +QT5MQTT_SITE = https://code.qt.io/cgit/qt/qtmqtt.git +QT5MQTT_SITE_METHOD = git +QT5MQTT_INSTALL_STAGING = YES +QT5MQTT_LICENSE = GPL-3.0 with exception +QT5MQTT_LICENSE_FILES = LICENSE.GPL3 LICENSE.GPL3-EXCEPT +QT5MQTT_SYNC_QT_HEADERS = YES + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5multimedia/Config.in b/package/qt5/qt5multimedia/Config.in new file mode 100644 index 00000000..dd46575d --- /dev/null +++ b/package/qt5/qt5multimedia/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_QT5MULTIMEDIA + bool "qt5multimedia" + select BR2_PACKAGE_QT5BASE_GUI + select BR2_PACKAGE_QT5BASE_NETWORK + select BR2_PACKAGE_QT5BASE_OPENGL_LIB if BR2_PACKAGE_QT5BASE_OPENGL + help + Qt is a cross-platform application and UI framework for + developers using C++. + + The Qt Multimedia module provides a rich feature set that + enables you to easily take advantage of a platform's + multimedia capabilities such as media playback and the use + of camera and radio devices. + + http://doc.qt.io/qt-5/multimediaoverview.html diff --git a/package/qt5/qt5multimedia/qt5multimedia.hash b/package/qt5/qt5multimedia/qt5multimedia.hash new file mode 100644 index 00000000..b70a4ecf --- /dev/null +++ b/package/qt5/qt5multimedia/qt5multimedia.hash @@ -0,0 +1,10 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtmultimedia-everywhere-src-5.15.2.tar.xz.sha256 +sha256 0c3758810e5131aabcf76e4965e4c18b8911af54d9edd9305d2a8278d8346df5 qtmultimedia-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.GPL2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 0dbe024961f6ab5c52689cbd036c977975d0d0f6a67ff97762d96cb819dd5652 LICENSE.GPL3-EXCEPT +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 LICENSE.LGPL3 +sha256 ed8742a95cb9db653a09b050e27ccff5e67ba69c14aa2c3137f2a4e1892f6c0d LICENSE.FDL +sha256 c1d75c15db4409bcbb182180d582f410a263dc9a631cd546b256e95f1da42165 examples/multimedia/spectrum/3rdparty/fftreal/license.txt diff --git a/package/qt5/qt5multimedia/qt5multimedia.mk b/package/qt5/qt5multimedia/qt5multimedia.mk new file mode 100644 index 00000000..39eddc3a --- /dev/null +++ b/package/qt5/qt5multimedia/qt5multimedia.mk @@ -0,0 +1,36 @@ +################################################################################ +# +# qt5multimedia +# +################################################################################ + +QT5MULTIMEDIA_VERSION = $(QT5_VERSION) +QT5MULTIMEDIA_SITE = $(QT5_SITE) +QT5MULTIMEDIA_SOURCE = qtmultimedia-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5MULTIMEDIA_VERSION).tar.xz +QT5MULTIMEDIA_INSTALL_STAGING = YES + +QT5MULTIMEDIA_LICENSE = GPL-2.0+ or LGPL-3.0, GPL-3.0 with exception(tools), GFDL-1.3 (docs) +QT5MULTIMEDIA_LICENSE_FILES = LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT LICENSE.LGPL3 LICENSE.FDL + +ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BASE),y) +QT5MULTIMEDIA_DEPENDENCIES += gst1-plugins-base +endif + +ifeq ($(BR2_PACKAGE_QT5DECLARATIVE),y) +QT5MULTIMEDIA_DEPENDENCIES += qt5declarative +endif + +ifeq ($(BR2_PACKAGE_LIBGLIB2)$(BR2_PACKAGE_PULSEAUDIO),yy) +QT5MULTIMEDIA_DEPENDENCIES += libglib2 pulseaudio +endif + +ifeq ($(BR2_PACKAGE_ALSA_LIB),y) +QT5MULTIMEDIA_DEPENDENCIES += alsa-lib +endif + +ifeq ($(BR2_PACKAGE_QT5BASE_EXAMPLES),y) +QT5MULTIMEDIA_LICENSE += , LGPL-2.1+ (examples/multimedia/spectrum/3rdparty/fftreal) +QT5MULTIMEDIA_LICENSE_FILES += examples/multimedia/spectrum/3rdparty/fftreal/license.txt +endif + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5quickcontrols/Config.in b/package/qt5/qt5quickcontrols/Config.in new file mode 100644 index 00000000..56fcaf70 --- /dev/null +++ b/package/qt5/qt5quickcontrols/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_QT5QUICKCONTROLS + bool "qt5quickcontrols" + depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE + select BR2_PACKAGE_QT5DECLARATIVE + select BR2_PACKAGE_QT5DECLARATIVE_QUICK + help + Qt is a cross-platform application and UI framework for + developers using C++. + + The Qt Quick Controls module provides a set of controls + that can be used to build complete interfaces in Qt Quick. + + http://doc.qt.io/qt-5/qtquickcontrols-index.html diff --git a/package/qt5/qt5quickcontrols/qt5quickcontrols.hash b/package/qt5/qt5quickcontrols/qt5quickcontrols.hash new file mode 100644 index 00000000..1fa0d643 --- /dev/null +++ b/package/qt5/qt5quickcontrols/qt5quickcontrols.hash @@ -0,0 +1,8 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtquickcontrols-everywhere-src-5.15.2.tar.xz.sha256 +sha256 c393fb7384b1f047f10e91a6832cf3e6a4c2a41408b8cb2d05af2283e8549fb5 qtquickcontrols-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.GPL2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 LICENSE.LGPL3 +sha256 ed8742a95cb9db653a09b050e27ccff5e67ba69c14aa2c3137f2a4e1892f6c0d LICENSE.FDL diff --git a/package/qt5/qt5quickcontrols/qt5quickcontrols.mk b/package/qt5/qt5quickcontrols/qt5quickcontrols.mk new file mode 100644 index 00000000..1ac8689d --- /dev/null +++ b/package/qt5/qt5quickcontrols/qt5quickcontrols.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# qt5quickcontrols +# +################################################################################ + +QT5QUICKCONTROLS_VERSION = $(QT5_VERSION) +QT5QUICKCONTROLS_SITE = $(QT5_SITE) +QT5QUICKCONTROLS_SOURCE = qtquickcontrols-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5QUICKCONTROLS_VERSION).tar.xz +QT5QUICKCONTROLS_DEPENDENCIES = qt5declarative +QT5QUICKCONTROLS_INSTALL_STAGING = YES + +QT5QUICKCONTROLS_LICENSE = GPL-2.0 or GPL-3.0 or LGPL-3.0, GFDL-1.3 (docs) +QT5QUICKCONTROLS_LICENSE_FILES = LICENSE.GPL2 LICENSE.GPL3 LICENSE.LGPL3 LICENSE.FDL + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5quickcontrols2/Config.in b/package/qt5/qt5quickcontrols2/Config.in new file mode 100644 index 00000000..3f81e20d --- /dev/null +++ b/package/qt5/qt5quickcontrols2/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_QT5QUICKCONTROLS2 + bool "qt5quickcontrols2" + depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE # qt5declarative/quick + select BR2_PACKAGE_QT5DECLARATIVE + select BR2_PACKAGE_QT5DECLARATIVE_QUICK + help + Qt is a cross-platform application and UI framework for + developers using C++. + + This package corresponds to the qt5quickcontrols2 module. + + This module was in tech preview in Qt 5.6, and promoted + to a core module in Qt 5.7.0. + + https://doc.qt.io/qt-5/qtquickcontrols2-index.html diff --git a/package/qt5/qt5quickcontrols2/qt5quickcontrols2.hash b/package/qt5/qt5quickcontrols2/qt5quickcontrols2.hash new file mode 100644 index 00000000..f66a1186 --- /dev/null +++ b/package/qt5/qt5quickcontrols2/qt5quickcontrols2.hash @@ -0,0 +1,7 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtquickcontrols2-everywhere-src-5.15.2.tar.xz.sha256 +sha256 671b6ce5f4b8ecc94db622d5d5fb29ef4ff92819be08e5ea55bfcab579de8919 qtquickcontrols2-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 d2cfc059acb4abd8e513cd0a73cd8489f34cbafa7bc34d5d31fb3210821cf8ca LICENSE.GPLv3 +sha256 9e63a04ce021b8bf811b30881fa51c8c3db88afeead942cd59322f2fb69c75bc LICENSE.LGPLv3 +sha256 ed8742a95cb9db653a09b050e27ccff5e67ba69c14aa2c3137f2a4e1892f6c0d LICENSE.FDL diff --git a/package/qt5/qt5quickcontrols2/qt5quickcontrols2.mk b/package/qt5/qt5quickcontrols2/qt5quickcontrols2.mk new file mode 100644 index 00000000..2f6dcd1f --- /dev/null +++ b/package/qt5/qt5quickcontrols2/qt5quickcontrols2.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# qt5quickcontrols2 +# +################################################################################ + +QT5QUICKCONTROLS2_VERSION = $(QT5_VERSION) +QT5QUICKCONTROLS2_SITE = $(QT5_SITE) +QT5QUICKCONTROLS2_SOURCE = qtquickcontrols2-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5QUICKCONTROLS2_VERSION).tar.xz +QT5QUICKCONTROLS2_DEPENDENCIES = qt5declarative +QT5QUICKCONTROLS2_INSTALL_STAGING = YES + +QT5QUICKCONTROLS2_LICENSE = GPL-3.0 or LGPL-3.0, GFDL-1.3 (docs) +QT5QUICKCONTROLS2_LICENSE_FILES = LICENSE.GPLv3 LICENSE.LGPLv3 LICENSE.FDL + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5quicktimeline/Config.in b/package/qt5/qt5quicktimeline/Config.in new file mode 100644 index 00000000..3c6fe3ef --- /dev/null +++ b/package/qt5/qt5quicktimeline/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_QT5QUICKTIMELINE + bool "qt5quicktimeline" + depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE # qt5declarative + select BR2_PACKAGE_QT5DECLARATIVE + select BR2_PACKAGE_QT5DECLARATIVE_QUICK + help + Qt is a cross-platform application and UI framework for + developers using C++. + + This package corresponds to the qt5quicktimeline module. + + https://doc.qt.io/qt-5/qtquicktimeline-index.html diff --git a/package/qt5/qt5quicktimeline/qt5quicktimeline.hash b/package/qt5/qt5quicktimeline/qt5quicktimeline.hash new file mode 100644 index 00000000..ac97fc31 --- /dev/null +++ b/package/qt5/qt5quicktimeline/qt5quicktimeline.hash @@ -0,0 +1,5 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtquicktimeline-everywhere-src-5.15.2.tar.xz.sha256 +sha256 b9c247227607437acec7c7dd18ad46179d20369c9d22bdb1e9fc128dfb832a28 qtquicktimeline-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 diff --git a/package/qt5/qt5quicktimeline/qt5quicktimeline.mk b/package/qt5/qt5quicktimeline/qt5quicktimeline.mk new file mode 100644 index 00000000..ef6927f9 --- /dev/null +++ b/package/qt5/qt5quicktimeline/qt5quicktimeline.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# qt5quicktimeline +# +################################################################################ + +QT5QUICKTIMELINE_VERSION = $(QT5_VERSION) +QT5QUICKTIMELINE_SITE = $(QT5_SITE) +QT5QUICKTIMELINE_SOURCE = qtquicktimeline-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5QUICKTIMELINE_VERSION).tar.xz +QT5QUICKTIMELINE_DEPENDENCIES = qt5declarative +QT5QUICKTIMELINE_INSTALL_STAGING = YES + +QT5QUICKTIMELINE_LICENSE = GPL-3.0, GFDL-1.3 (docs) +QT5QUICKTIMELINE_LICENSE_FILES = LICENSE.GPL3 + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5remoteobjects/Config.in b/package/qt5/qt5remoteobjects/Config.in new file mode 100644 index 00000000..9d4a40a5 --- /dev/null +++ b/package/qt5/qt5remoteobjects/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_QT5REMOTEOBJECTS + bool "qt5remoteobjects" + select BR2_PACKAGE_QT5BASE + select BR2_PACKAGE_QT5BASE_NETWORK + help + Qt is a cross-platform application and UI framework for + developers using C++. + + Qt Remote Objects (QtRO) is an Inter-Process + Communication (IPC) module developed for Qt. This + module extends Qt's existing functionalities to enable + information exchange between processes or computers, + easily. + + https://doc.qt.io/qt-5/qtremoteobjects-index.html diff --git a/package/qt5/qt5remoteobjects/qt5remoteobjects.hash b/package/qt5/qt5remoteobjects/qt5remoteobjects.hash new file mode 100644 index 00000000..30c5bfc5 --- /dev/null +++ b/package/qt5/qt5remoteobjects/qt5remoteobjects.hash @@ -0,0 +1,8 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtremoteobjects-everywhere-src-5.15.2.tar.xz.sha256 +sha256 6781b6bc90888254ea77ce812736dac00c67fa4eeb3095f5cd65e4b9c15dcfc2 qtremoteobjects-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.GPL2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 0dbe024961f6ab5c52689cbd036c977975d0d0f6a67ff97762d96cb819dd5652 LICENSE.GPL3-EXCEPT +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 LICENSE.LGPL3 diff --git a/package/qt5/qt5remoteobjects/qt5remoteobjects.mk b/package/qt5/qt5remoteobjects/qt5remoteobjects.mk new file mode 100644 index 00000000..a6b5f095 --- /dev/null +++ b/package/qt5/qt5remoteobjects/qt5remoteobjects.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# qt5remoteobjects +# +################################################################################ + +QT5REMOTEOBJECTS_VERSION = $(QT5_VERSION) +QT5REMOTEOBJECTS_SITE = $(QT5_SITE) +QT5REMOTEOBJECTS_SOURCE = qtremoteobjects-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5REMOTEOBJECTS_VERSION).tar.xz +QT5REMOTEOBJECTS_DEPENDENCIES = qt5base +QT5REMOTEOBJECTS_INSTALL_STAGING = YES +QT5REMOTEOBJECTS_LICENSE = GPL-2.0+ or LGPL-3.0, GPL-3.0 with exception (tools), GFDL-1.3 (docs) +QT5REMOTEOBJECTS_LICENSE_FILES = LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT LICENSE.LGPL3 + +ifeq ($(BR2_PACKAGE_QT5DECLARATIVE),y) +QT5REMOTEOBJECTS_DEPENDENCIES += qt5declarative +endif + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5script/0001-Detect-32-bits-armv8-a-architecture.patch b/package/qt5/qt5script/0001-Detect-32-bits-armv8-a-architecture.patch new file mode 100644 index 00000000..7e4e524d --- /dev/null +++ b/package/qt5/qt5script/0001-Detect-32-bits-armv8-a-architecture.patch @@ -0,0 +1,49 @@ +From daf2e222903bacf85f27dfb0fffc4459bbf58b77 Mon Sep 17 00:00:00 2001 +From: =?utf-8?q?Ga=C3=ABl=20PORTAY?= +Date: Sun, 10 Jun 2018 08:23:50 -0400 +Subject: [PATCH] Detect 32-bits armv8-a architecture +MIME-Version: 1.0 +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 8bit + +These toolchains define __ARM_ARCH_8A__ (for ARM architecture version) +and __arm__ (for 32-bits word-size; __aarch64__ for 64-bits). + +This commit catches this new architecture (armv8a) within a #ifdef/#endif +inside the if statement dedicated for 32-bits ARM detection. See commit +from WebKit [1] and [2]. + +Fixes: + + In file included from ../3rdparty/javascriptcore/JavaScriptCore/config.h:26, + from ../3rdparty/javascriptcore/JavaScriptCore/pcre/pcre_compile.cpp:44: + ../3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h:370:6: error: #error "Not supported ARM architecture" + # error "Not supported ARM architecture" + ^~~~~ + +[1]: https://github.com/WebKit/webkit/commit/313d9fc4bdd2f020a5d0cf834c3c61982f161ebb +[2]: https://github.com/WebKit/webkit/commit/98f0de0709786f5d9b09dfd5908266990eb909d6 + +Signed-off-by: Gaël PORTAY +--- + src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h +index 00caa6d..c4b758e 100644 +--- a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h ++++ b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h +@@ -306,6 +306,10 @@ + || defined(__ARM_ARCH_7R__) + #define WTF_ARM_ARCH_VERSION 7 + ++#elif defined(__ARM_ARCH_8__) \ ++ || defined(__ARM_ARCH_8A__) ++#define WTF_ARM_ARCH_VERSION 8 ++ + /* RVCT sets _TARGET_ARCH_ARM */ + #elif defined(__TARGET_ARCH_ARM) + #define WTF_ARM_ARCH_VERSION __TARGET_ARCH_ARM +-- +2.17.1 + diff --git a/package/qt5/qt5script/Config.in b/package/qt5/qt5script/Config.in new file mode 100644 index 00000000..1926813e --- /dev/null +++ b/package/qt5/qt5script/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_QT5SCRIPT + bool "qt5script" + depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE + help + Qt is a cross-platform application and UI framework for + developers using C++. + + Qt Script provides support for making Qt applications + scriptable. Provided for Qt 4.x compatibility. + + This package has been tagged as deprecated since version + 5.5.0 and should be replaced by Qt QML module in new + design. + + http://doc.qt.io/qt-5/qtscript-index.html diff --git a/package/qt5/qt5script/qt5script.hash b/package/qt5/qt5script/qt5script.hash new file mode 100644 index 00000000..78359804 --- /dev/null +++ b/package/qt5/qt5script/qt5script.hash @@ -0,0 +1,10 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtscript-everywhere-src-5.15.2.tar.xz.sha256 +sha256 a299715369afbd1caa4d7fa2875d442eab91adcaacafce54a36922442624673e qtscript-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.GPL2 +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 LICENSE.LGPL3 +sha256 ed8742a95cb9db653a09b050e27ccff5e67ba69c14aa2c3137f2a4e1892f6c0d LICENSE.FDL +sha256 5094ecb9c9dcd0eadc34f3c11511d9b5535063032bc150164ecd1a5d5a445547 src/3rdparty/javascriptcore/JavaScriptCore/COPYING.LIB +sha256 43b007cd3ac7b7ea5284b13e9580334028e6f42e859059605d57558f39374197 src/3rdparty/javascriptcore/JavaScriptCore/pcre/COPYING diff --git a/package/qt5/qt5script/qt5script.mk b/package/qt5/qt5script/qt5script.mk new file mode 100644 index 00000000..77254fec --- /dev/null +++ b/package/qt5/qt5script/qt5script.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# qt5script +# +################################################################################ + +QT5SCRIPT_VERSION = $(QT5_VERSION) +QT5SCRIPT_SITE = $(QT5_SITE) +QT5SCRIPT_SOURCE = qtscript-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5SCRIPT_VERSION).tar.xz +QT5SCRIPT_INSTALL_STAGING = YES + +# JavaScriptCore contains files under BSD-2-Clause, BSD-3-Clause, and LGPL-2+. +# This is linked into libQt5Script, which also contains Qt sources under +# LGPL-2.1 (only). Therefore, the library is LGPL-2.1 and BSD-3-Clause. +# libQt5ScriptTools is under the normal Qt opensource license. +QT5SCRIPT_LICENSE = LGPL-2.1, BSD-3-Clause, LGPL-3.0 or GPL-2.0+ (libQt5ScriptTools), GFDL-1.3 (docs) +# LGPL-2.1 license file is missing +QT5SCRIPT_LICENSE_FILES = LICENSE.GPL2 LICENSE.GPL3 LICENSE.LGPL3 LICENSE.FDL +# License files from JavaScriptCore +QT5SCRIPT_LICENSE_FILES += \ + src/3rdparty/javascriptcore/JavaScriptCore/COPYING.LIB \ + src/3rdparty/javascriptcore/JavaScriptCore/pcre/COPYING + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5scxml/Config.in b/package/qt5/qt5scxml/Config.in new file mode 100644 index 00000000..24fb2d9c --- /dev/null +++ b/package/qt5/qt5scxml/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_QT5SCXML + bool "qt5scxml" + depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE # qt5declarative + select BR2_PACKAGE_QT5DECLARATIVE + help + Qt is a cross-platform application and UI framework for + developers using C++. + + The Qt SCXML module provides functionality to create state + machines from SCXML files. + + https://doc.qt.io/qt-5/qtscxml-index.html diff --git a/package/qt5/qt5scxml/qt5scxml.hash b/package/qt5/qt5scxml/qt5scxml.hash new file mode 100644 index 00000000..6f816548 --- /dev/null +++ b/package/qt5/qt5scxml/qt5scxml.hash @@ -0,0 +1,7 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtscxml-everywhere-src-5.15.2.tar.xz.sha256 +sha256 60b9590b9a41c60cee7b8a8c8410ee4625f0389c1ff8d79883ec5a985638a7dc qtscxml-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 0dbe024961f6ab5c52689cbd036c977975d0d0f6a67ff97762d96cb819dd5652 LICENSE.GPL3-EXCEPT +sha256 ed8742a95cb9db653a09b050e27ccff5e67ba69c14aa2c3137f2a4e1892f6c0d LICENSE.FDL +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 LICENSE.LGPL3 diff --git a/package/qt5/qt5scxml/qt5scxml.mk b/package/qt5/qt5scxml/qt5scxml.mk new file mode 100644 index 00000000..186a2d38 --- /dev/null +++ b/package/qt5/qt5scxml/qt5scxml.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# qt5scxml +# +################################################################################ + +QT5SCXML_VERSION = $(QT5_VERSION) +QT5SCXML_SITE = $(QT5_SITE) +QT5SCXML_SOURCE = qtscxml-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5SCXML_VERSION).tar.xz +QT5SCXML_DEPENDENCIES = qt5declarative +QT5SCXML_INSTALL_STAGING = YES + +QT5SCXML_LICENSE = GPL-2.0+ or LGPL-3.0, GPL-3.0 with exception(tools), GFDL-1.3 (docs) +QT5SCXML_LICENSE_FILES = LICENSE.GPL3-EXCEPT LICENSE.LGPL3 LICENSE.FDL +ifeq ($(BR2_PACKAGE_QT5BASE_EXAMPLES),y) +QT5SCXML_LICENSE += , BSD-3-Clause (examples) +endif + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5sensors/Config.in b/package/qt5/qt5sensors/Config.in new file mode 100644 index 00000000..5e8ee653 --- /dev/null +++ b/package/qt5/qt5sensors/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_QT5SENSORS + bool "qt5sensors" + help + Qt is a cross-platform application and UI framework for + developers using C++. + + The Qt Sensors API provides access to sensor hardware + via QML and C++ interfaces. + + http://doc.qt.io/qt-5/qtsensors-index.html diff --git a/package/qt5/qt5sensors/qt5sensors.hash b/package/qt5/qt5sensors/qt5sensors.hash new file mode 100644 index 00000000..179c9833 --- /dev/null +++ b/package/qt5/qt5sensors/qt5sensors.hash @@ -0,0 +1,9 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtsensors-everywhere-src-5.15.2.tar.xz.sha256 +sha256 3f0011f9e9942cad119146b54d960438f4568a22a274cdad4fae06bb4e0e4839 qtsensors-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.GPL2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 0dbe024961f6ab5c52689cbd036c977975d0d0f6a67ff97762d96cb819dd5652 LICENSE.GPL3-EXCEPT +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 LICENSE.LGPL3 +sha256 ed8742a95cb9db653a09b050e27ccff5e67ba69c14aa2c3137f2a4e1892f6c0d LICENSE.FDL diff --git a/package/qt5/qt5sensors/qt5sensors.mk b/package/qt5/qt5sensors/qt5sensors.mk new file mode 100644 index 00000000..f928aad1 --- /dev/null +++ b/package/qt5/qt5sensors/qt5sensors.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# qt5sensors +# +################################################################################ + +QT5SENSORS_VERSION = $(QT5_VERSION) +QT5SENSORS_SITE = $(QT5_SITE) +QT5SENSORS_SOURCE = qtsensors-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5SENSORS_VERSION).tar.xz +QT5SENSORS_INSTALL_STAGING = YES +QT5SENSORS_LICENSE = GPL-2.0+ or LGPL-3.0, GPL-3.0 with exception(tools), GFDL-1.3 (docs) +QT5SENSORS_LICENSE_FILES = LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT LICENSE.LGPL3 LICENSE.FDL + +ifeq ($(BR2_PACKAGE_QT5DECLARATIVE),y) +QT5SENSORS_DEPENDENCIES += qt5declarative +endif + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5serialbus/Config.in b/package/qt5/qt5serialbus/Config.in new file mode 100644 index 00000000..bcfec29b --- /dev/null +++ b/package/qt5/qt5serialbus/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_QT5SERIALBUS + bool "qt5serialbus" + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6 # CAN FD + select BR2_PACKAGE_QT5SERIALPORT + help + Qt is a cross-platform application and UI framework for + developers using C++. + + This package corresponds to the qt5serialbus module. + + This module was in tech preview in Qt 5.6, and promoted + to a core module in Qt 5.8.0. + + http://doc.qt.io/qt-5/qtserialbus-index.html + +comment "qt5serialbus needs headers >= 3.6" + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6 diff --git a/package/qt5/qt5serialbus/qt5serialbus.hash b/package/qt5/qt5serialbus/qt5serialbus.hash new file mode 100644 index 00000000..4f05049b --- /dev/null +++ b/package/qt5/qt5serialbus/qt5serialbus.hash @@ -0,0 +1,8 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtserialbus-everywhere-src-5.15.2.tar.xz.sha256 +sha256 aeeb7e5c0d3f8503215b22e1a84c0002ca67cf63862f6e3c6ef44a67ca31bd88 qtserialbus-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 edfe70e99be2a7c109d860b19204609e582720b211c50caedac729da372a1253 LICENSE.GPLv2 +sha256 245248009fd0af1725d183248380e476c1283383909358a13686606352bf2a17 LICENSE.GPLv3 +sha256 5ceb37d1c7c1d92878b82af3c0fd5558087f3d5a08a3a4d43850bad4ad265a52 LICENSE.LGPLv3 +sha256 ed8742a95cb9db653a09b050e27ccff5e67ba69c14aa2c3137f2a4e1892f6c0d LICENSE.FDL diff --git a/package/qt5/qt5serialbus/qt5serialbus.mk b/package/qt5/qt5serialbus/qt5serialbus.mk new file mode 100644 index 00000000..412a2556 --- /dev/null +++ b/package/qt5/qt5serialbus/qt5serialbus.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# qt5serialbus +# +################################################################################ + +QT5SERIALBUS_VERSION = $(QT5_VERSION) +QT5SERIALBUS_SITE = $(QT5_SITE) +QT5SERIALBUS_SOURCE = qtserialbus-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5SERIALBUS_VERSION).tar.xz +QT5SERIALBUS_DEPENDENCIES = qt5serialport +QT5SERIALBUS_INSTALL_STAGING = YES + +QT5SERIALBUS_LICENSE = GPL-2.0 or GPL-3.0 or LGPL-3.0, GFDL-1.3 (docs) +QT5SERIALBUS_LICENSE_FILES = LICENSE.GPLv2 LICENSE.GPLv3 LICENSE.LGPLv3 LICENSE.FDL + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5serialport/Config.in b/package/qt5/qt5serialport/Config.in new file mode 100644 index 00000000..16c2eaa6 --- /dev/null +++ b/package/qt5/qt5serialport/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_QT5SERIALPORT + bool "qt5serialport" + help + Qt is a cross-platform application and UI framework for + developers using C++. + + Qt Serial Port provides the basic functionality, which + includes configuring, I/O operations, getting and setting + the control signals of the RS-232 pinouts. + + http://doc.qt.io/qt-5/qtserialport-index.html diff --git a/package/qt5/qt5serialport/qt5serialport.hash b/package/qt5/qt5serialport/qt5serialport.hash new file mode 100644 index 00000000..37bc8401 --- /dev/null +++ b/package/qt5/qt5serialport/qt5serialport.hash @@ -0,0 +1,9 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtserialport-everywhere-src-5.15.2.tar.xz.sha256 +sha256 59c559d748417306bc1b2cf2315c1e63eed011ace38ad92946af71f23e2ef79d qtserialport-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.GPL2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 0dbe024961f6ab5c52689cbd036c977975d0d0f6a67ff97762d96cb819dd5652 LICENSE.GPL3-EXCEPT +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 LICENSE.LGPL3 +sha256 ed8742a95cb9db653a09b050e27ccff5e67ba69c14aa2c3137f2a4e1892f6c0d LICENSE.FDL diff --git a/package/qt5/qt5serialport/qt5serialport.mk b/package/qt5/qt5serialport/qt5serialport.mk new file mode 100644 index 00000000..902967c7 --- /dev/null +++ b/package/qt5/qt5serialport/qt5serialport.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# qt5serialport +# +################################################################################ + +QT5SERIALPORT_VERSION = $(QT5_VERSION) +QT5SERIALPORT_SITE = $(QT5_SITE) +QT5SERIALPORT_SOURCE = qtserialport-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5SERIALPORT_VERSION).tar.xz +QT5SERIALPORT_INSTALL_STAGING = YES +QT5SERIALPORT_LICENSE = GPL-2.0+ or LGPL-3.0, GPL-3.0 with exception(tools), GFDL-1.3 (docs) +QT5SERIALPORT_LICENSE_FILES = LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT LICENSE.LGPL3 LICENSE.FDL + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5svg/Config.in b/package/qt5/qt5svg/Config.in new file mode 100644 index 00000000..e9284913 --- /dev/null +++ b/package/qt5/qt5svg/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_QT5SVG + bool "qt5svg" + select BR2_PACKAGE_QT5BASE_GUI + help + Qt is a cross-platform application and UI framework for + developers using C++. + + Qt SVG provides classes for rendering and displaying SVG + drawings in widgets and on other paint devices. + + http://doc.qt.io/qt-5/qtsvg-index.html diff --git a/package/qt5/qt5svg/qt5svg.hash b/package/qt5/qt5svg/qt5svg.hash new file mode 100644 index 00000000..7773a940 --- /dev/null +++ b/package/qt5/qt5svg/qt5svg.hash @@ -0,0 +1,8 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtsvg-everywhere-src-5.15.2.tar.xz.sha256 +sha256 8bc3c2c1bc2671e9c67d4205589a8309b57903721ad14c60ea21a5d06acb585e qtsvg-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.GPL2 +sha256 245248009fd0af1725d183248380e476c1283383909358a13686606352bf2a17 LICENSE.GPLv3 +sha256 5ceb37d1c7c1d92878b82af3c0fd5558087f3d5a08a3a4d43850bad4ad265a52 LICENSE.LGPLv3 +sha256 ed8742a95cb9db653a09b050e27ccff5e67ba69c14aa2c3137f2a4e1892f6c0d LICENSE.FDL diff --git a/package/qt5/qt5svg/qt5svg.mk b/package/qt5/qt5svg/qt5svg.mk new file mode 100644 index 00000000..d4b31c23 --- /dev/null +++ b/package/qt5/qt5svg/qt5svg.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# qt5svg +# +################################################################################ + +QT5SVG_VERSION = $(QT5_VERSION) +QT5SVG_SITE = $(QT5_SITE) +QT5SVG_SOURCE = qtsvg-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5SVG_VERSION).tar.xz +QT5SVG_INSTALL_STAGING = YES +QT5SVG_LICENSE = GPL-2.0+ or LGPL-3.0, GPL-3.0 with exception(tools), GFDL-1.3 (docs) +QT5SVG_LICENSE_FILES = LICENSE.GPL2 LICENSE.GPLv3 LICENSE.LGPLv3 LICENSE.FDL + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5tools/0001-Disable-designer-tool-fixes-configure-error.patch b/package/qt5/qt5tools/0001-Disable-designer-tool-fixes-configure-error.patch new file mode 100644 index 00000000..cf2cd94c --- /dev/null +++ b/package/qt5/qt5tools/0001-Disable-designer-tool-fixes-configure-error.patch @@ -0,0 +1,53 @@ +From 22d7a9050b04b021e33430d0f7e3c5ee80c24caa Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Tue, 17 Dec 2019 11:01:59 +0100 +Subject: [PATCH] Disable designer tool (fixes configure error). + +Fixes: + + .../build/qt5tools-5.14.0/src/designer/src/components/lib/lib.pro + Project ERROR: Multiple modules claim plugin type 'designer' (uitools, in addition to designer) + +Signed-off-by: Peter Seiderer +[Rebased for Qt5.15.0] +Signed-off-by: Peter Seiderer +[Rebased for Qt5.15.1] +Signed-off-by: Peter Seiderer +[Rebased for Qt5.15.2] +Signed-off-by: Peter Seiderer +--- + src/linguist/linguist/linguist.pro | 2 +- + src/src.pro | 5 +---- + 2 files changed, 2 insertions(+), 5 deletions(-) + +diff --git a/src/linguist/linguist/linguist.pro b/src/linguist/linguist/linguist.pro +index d083896..7d74cfc 100644 +--- a/src/linguist/linguist/linguist.pro ++++ b/src/linguist/linguist/linguist.pro +@@ -1,4 +1,4 @@ +-QT += core-private gui-private widgets uitools-private printsupport ++QT += core-private gui-private widgets printsupport + + DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII + +diff --git a/src/src.pro b/src/src.pro +index f2675c7..360de50 100644 +--- a/src/src.pro ++++ b/src/src.pro +@@ -6,12 +6,9 @@ qtHaveModule(widgets) { + } else { + QT_FOR_CONFIG += widgets + qtConfig(pushbutton):qtConfig(toolbutton) { +- SUBDIRS = designer \ +- pixeltool ++ SUBDIRS = pixeltool + + !static|contains(QT_PLUGINS, qsqlite): SUBDIRS += assistant +- +- linguist.depends = designer + } + qtHaveModule(quick):qtConfig(thread):qtConfig(toolbutton): SUBDIRS += distancefieldgenerator + } +-- +2.29.2 + diff --git a/package/qt5/qt5tools/Config.in b/package/qt5/qt5tools/Config.in new file mode 100644 index 00000000..60106c1e --- /dev/null +++ b/package/qt5/qt5tools/Config.in @@ -0,0 +1,59 @@ +config BR2_PACKAGE_QT5TOOLS + bool "qt5tools" + help + Qt is a cross-platform application and UI framework for + developers using C++. + + Qt Tools provides tools facilitate the development + and design of applications. + + http://doc.qt.io/qt-5/qtmodules.html#qt-tools + +if BR2_PACKAGE_QT5TOOLS + +config BR2_PACKAGE_QT5TOOLS_LINGUIST_TOOLS + bool "Linguist host tools (lconvert, lrelease, lupdate)" + help + This option enables the linguist host tools + lconvert, lrelease and lupdate. + +config BR2_PACKAGE_QT5TOOLS_QDOC_TOOL + bool "qdoc host tool" + # Needs llvm-config and libclang for the host, which is not + # currently supported in Buildroot, unless the target is + # already supported by llvm. + depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS # llvm, clang + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # llvm, clang + depends on BR2_TOOLCHAIN_HAS_THREADS # llvm, clang + depends on BR2_INSTALL_LIBSTDCPP # llvm, clang + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # llvm, clang + depends on !BR2_STATIC_LIBS # llvm, clang + depends on BR2_USE_WCHAR # llvm, clang + help + This option enables the qdoc host tool. + +config BR2_PACKAGE_QT5TOOLS_PIXELTOOL + bool "pixeltool" + select BR2_PACKAGE_QT5BASE_GUI + select BR2_PACKAGE_QT5BASE_WIDGETS + select BR2_PACKAGE_QT5BASE_PNG # saving png images + help + Compile and install the pixeltool program. + +config BR2_PACKAGE_QT5TOOLS_QTDIAG + bool "qtdiag" + select BR2_PACKAGE_QT5BASE_GUI + help + Compile and install the qtdiag program. + +config BR2_PACKAGE_QT5TOOLS_QTPATHS + bool "qtpaths" + help + Compile and install the qtpaths program. + +config BR2_PACKAGE_QT5TOOLS_QTPLUGININFO + bool "qtplugininfo" + help + Compile and install the qtplugininfo program. + +endif diff --git a/package/qt5/qt5tools/qt5tools.hash b/package/qt5/qt5tools/qt5tools.hash new file mode 100644 index 00000000..e52d8e6d --- /dev/null +++ b/package/qt5/qt5tools/qt5tools.hash @@ -0,0 +1,9 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qttools-everywhere-src-5.15.2.tar.xz.sha256 +sha256 c189d0ce1ff7c739db9a3ace52ac3e24cb8fd6dbf234e49f075249b38f43c1cc qttools-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.GPL2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 0dbe024961f6ab5c52689cbd036c977975d0d0f6a67ff97762d96cb819dd5652 LICENSE.GPL3-EXCEPT +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 LICENSE.LGPL3 +sha256 ed8742a95cb9db653a09b050e27ccff5e67ba69c14aa2c3137f2a4e1892f6c0d LICENSE.FDL diff --git a/package/qt5/qt5tools/qt5tools.mk b/package/qt5/qt5tools/qt5tools.mk new file mode 100644 index 00000000..0543afd8 --- /dev/null +++ b/package/qt5/qt5tools/qt5tools.mk @@ -0,0 +1,64 @@ +################################################################################ +# +# qt5tools +# +################################################################################ + +QT5TOOLS_VERSION = $(QT5_VERSION) +QT5TOOLS_SITE = $(QT5_SITE) +QT5TOOLS_SOURCE = qttools-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5TOOLS_VERSION).tar.xz + +QT5TOOLS_INSTALL_STAGING = YES + +# linguist tools compile conditionally on qtHaveModule(qmldevtools-private), +# but the condition is used only used to decide if lupdate will support +# parsing qml files (via setting QT_NO_QML define), no linking against +# target qt5 will happen +ifeq ($(BR2_PACKAGE_QT5DECLARATIVE),y) +QT5TOOLS_DEPENDENCIES += qt5declarative +endif + +QT5TOOLS_LICENSE = GPL-2.0+ or LGPL-3.0, GPL-3.0 with exception(tools), GFDL-1.3 (docs) +QT5TOOLS_LICENSE_FILES = LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT LICENSE.LGPL3 LICENSE.FDL + +QT5TOOLS_BUILD_DIRS_$(BR2_PACKAGE_QT5TOOLS_LINGUIST_TOOLS) += \ + linguist/lconvert linguist/lrelease linguist/lupdate +QT5TOOLS_INSTALL_STAGING_DIR_$(BR2_PACKAGE_QT5TOOLS_LINGUIST_TOOLS) += \ + linguist + +ifeq ($(BR2_PACKAGE_QT5TOOLS_QDOC_TOOL),y) +QT5TOOLS_BUILD_DIRS_y += qdoc +QT5TOOLS_INSTALL_STAGING_DIR_y += qdoc +QT5TOOLS_DEPENDENCIES += host-clang +endif + +QT5TOOLS_BUILD_DIRS_$(BR2_PACKAGE_QT5TOOLS_PIXELTOOL) += pixeltool +QT5TOOLS_INSTALL_TARGET_$(BR2_PACKAGE_QT5TOOLS_PIXELTOOL) += pixeltool + +QT5TOOLS_BUILD_DIRS_$(BR2_PACKAGE_QT5TOOLS_QTDIAG) += qtdiag +QT5TOOLS_INSTALL_TARGET_$(BR2_PACKAGE_QT5TOOLS_QTDIAG) += qtdiag + +QT5TOOLS_BUILD_DIRS_$(BR2_PACKAGE_QT5TOOLS_QTPATHS) += qtpaths +QT5TOOLS_INSTALL_TARGET_$(BR2_PACKAGE_QT5TOOLS_QTPATHS) += qtpaths + +QT5TOOLS_BUILD_DIRS_$(BR2_PACKAGE_QT5TOOLS_QTPLUGININFO) += qtplugininfo +QT5TOOLS_INSTALL_TARGET_$(BR2_PACKAGE_QT5TOOLS_QTPLUGININFO) += qtplugininfo + +define QT5TOOLS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) sub-src-qmake_all + $(foreach p,$(QT5TOOLS_BUILD_DIRS_y), \ + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/src/$(p)$(sep)) +endef + +# use install target to copy cmake module files +define QT5TOOLS_INSTALL_STAGING_CMDS + $(foreach p,$(QT5TOOLS_INSTALL_STAGING_DIR_y), \ + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/src/$(p) install$(sep)) +endef + +define QT5TOOLS_INSTALL_TARGET_CMDS + $(foreach p,$(QT5TOOLS_INSTALL_TARGET_y), \ + $(INSTALL) -D -m0755 $(@D)/bin/$(p) $(TARGET_DIR)/usr/bin/$(p)$(sep)) +endef + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5virtualkeyboard/Config.in b/package/qt5/qt5virtualkeyboard/Config.in new file mode 100644 index 00000000..4cac6fd2 --- /dev/null +++ b/package/qt5/qt5virtualkeyboard/Config.in @@ -0,0 +1,59 @@ +config BR2_PACKAGE_QT5VIRTUALKEYBOARD + bool "qt5virtualkeyboard" + depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE # qt5declarative + select BR2_PACKAGE_QT5DECLARATIVE + select BR2_PACKAGE_QT5DECLARATIVE_QUICK + select BR2_PACKAGE_QT5SVG + help + Qt Virtual Keyboard is a virtual keyboard framework that + consists of a C++ backend supporting custom input methods as + well as a UI frontend implemented in QML. + + https://doc.qt.io/qt-5/qtvirtualkeyboard-index.html + +if BR2_PACKAGE_QT5VIRTUALKEYBOARD + +config BR2_PACKAGE_QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS + string "language layouts" + default "en_GB" + help + The Virtual Keyboard supports the following languages: + - Arabic (ar_AR) + - Danish (da_DK) + - English (en_GB) + - Finnish (fi_FI) + - French (fr_FR) + - German (de_DE) + - Hindi (hi_IN) + - Italian (it_IT) + - Japanese (ja_JP) + - Korean (ko_KR) + - Norwegian (nb_NO) + - Persian/Farsi (fa_FA) + - Polish (pl_PL) + - Portugese (pt_PT) + - Romanian (ro_RO) + - Russian (ru_RU) + - Simplified Chinese (zh_CN) + - Traditional Chinese (zh_TW) + - Spanish (es_ES) + - Swedish (sv_SE) + + Note: the special value "all" can be used to install support + for all supported languages. + +config BR2_PACKAGE_QT5VIRTUALKEYBOARD_HANDWRITING + bool "handwriting" + help + Handwriting support, with gestures for fullscreen input. + + Lipi Toolkit (LipiTk) is an open source toolkit for online + Handwriting Recognition. + +config BR2_PACKAGE_QT5VIRTUALKEYBOARD_ARROW_KEY_NAVIGATION + bool "Arrow key navigation" + help + Allows controlling the keyboard using the arrow and return + keys. + +endif diff --git a/package/qt5/qt5virtualkeyboard/qt5virtualkeyboard.hash b/package/qt5/qt5virtualkeyboard/qt5virtualkeyboard.hash new file mode 100644 index 00000000..82f13237 --- /dev/null +++ b/package/qt5/qt5virtualkeyboard/qt5virtualkeyboard.hash @@ -0,0 +1,9 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtvirtualkeyboard-everywhere-src-5.15.2.tar.xz.sha256 +sha256 9a3193913be30f09a896e3b8c2f9696d2e9b3f88a63ae9ca8c97a2786b68cf55 qtvirtualkeyboard-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 7a45a9769d19545480a241230e6ea520b5156fac00930dcd69b6886749743d10 src/plugins/lipi-toolkit/3rdparty/lipi-toolkit/MIT_LICENSE.txt +sha256 05cc719deafd0ab083b03296bb2911de10d116953b626a7629b9ca59938038b1 src/plugins/openwnn/3rdparty/openwnn/NOTICE +sha256 b5830d96fb5a7e7e7ebcc295f352846b4b998e78fdc8f9aa68e134d2e4b39986 src/plugins/pinyin/3rdparty/pinyin/NOTICE +sha256 9400a6128693d2f25653698e695f554660c71efccc8c21af28bf143e35199db6 src/plugins/tcime/3rdparty/tcime/COPYING diff --git a/package/qt5/qt5virtualkeyboard/qt5virtualkeyboard.mk b/package/qt5/qt5virtualkeyboard/qt5virtualkeyboard.mk new file mode 100644 index 00000000..3984c986 --- /dev/null +++ b/package/qt5/qt5virtualkeyboard/qt5virtualkeyboard.mk @@ -0,0 +1,46 @@ +################################################################################ +# +# qt5virtualkeyboard +# +################################################################################ + +QT5VIRTUALKEYBOARD_VERSION = $(QT5_VERSION) +QT5VIRTUALKEYBOARD_SITE = $(QT5_SITE) +QT5VIRTUALKEYBOARD_SOURCE = qtvirtualkeyboard-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5VIRTUALKEYBOARD_VERSION).tar.xz +QT5VIRTUALKEYBOARD_DEPENDENCIES = qt5declarative qt5svg +QT5VIRTUALKEYBOARD_INSTALL_STAGING = YES + +QT5VIRTUALKEYBOARD_LICENSE = GPL-3.0 +QT5VIRTUALKEYBOARD_LICENSE_FILES = LICENSE.GPL3 + +QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS = $(call qstrip,$(BR2_PACKAGE_QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS)) +ifneq ($(strip $(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS)),) +QT5VIRTUALKEYBOARD_QMAKEFLAGS += CONFIG+="$(foreach lang,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS),lang-$(lang))" + +ifneq ($(filter ja_JP all,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS)),) +QT5VIRTUALKEYBOARD_LICENSE += , Apache-2.0 (openwnn) +QT5VIRTUALKEYBOARD_LICENSE_FILES += src/plugins/openwnn/3rdparty/openwnn/NOTICE +endif + +ifneq ($(filter zh_CN all,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS)),) +QT5VIRTUALKEYBOARD_LICENSE += , Apache-2.0 (pinyin) +QT5VIRTUALKEYBOARD_LICENSE_FILES += src/plugins/pinyin/3rdparty/pinyin/NOTICE +endif + +ifneq ($(filter zh_TW all,$(QT5VIRTUALKEYBOARD_LANGUAGE_LAYOUTS)),) +QT5VIRTUALKEYBOARD_LICENSE += , Apache-2.0 (tcime), BSD-3-Clause (tcime) +QT5VIRTUALKEYBOARD_LICENSE_FILES += src/plugins/tcime/3rdparty/tcime/COPYING +endif +endif + +ifeq ($(BR2_PACKAGE_QT5VIRTUALKEYBOARD_HANDWRITING),y) +QT5VIRTUALKEYBOARD_CONF_OPTS += CONFIG+=handwriting +QT5VIRTUALKEYBOARD_LICENSE += , MIT (lipi-toolkit) +QT5VIRTUALKEYBOARD_LICENSE_FILES += src/plugins/lipi-toolkit/3rdparty/lipi-toolkit/MIT_LICENSE.txt +endif + +ifeq ($(BR2_PACKAGE_QT5VIRTUALKEYBOARD_ARROW_KEY_NAVIGATION),y) +QT5VIRTUALKEYBOARD_CONF_OPTS += CONFIG+=arrow-key-navigation +endif + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5wayland/Config.in b/package/qt5/qt5wayland/Config.in new file mode 100644 index 00000000..0d5a1089 --- /dev/null +++ b/package/qt5/qt5wayland/Config.in @@ -0,0 +1,24 @@ +comment "qt5wayland needs an OpenGL-capable backend" + depends on !BR2_PACKAGE_QT5_GL_AVAILABLE + +config BR2_PACKAGE_QT5WAYLAND + bool "qt5wayland" + depends on BR2_PACKAGE_QT5_GL_AVAILABLE + select BR2_PACKAGE_WAYLAND + help + Qt is a cross-platform application and UI framework for + developers using C++. + + This package corresponds to the qt5wayland module. + + http://qt.io + +if BR2_PACKAGE_QT5WAYLAND + +config BR2_PACKAGE_QT5WAYLAND_COMPOSITOR + bool "Enable compositor (experimental)" + help + The compositor API is still experimental, and not built by + default. + +endif diff --git a/package/qt5/qt5wayland/qt5wayland.hash b/package/qt5/qt5wayland/qt5wayland.hash new file mode 100644 index 00000000..b17dbdd1 --- /dev/null +++ b/package/qt5/qt5wayland/qt5wayland.hash @@ -0,0 +1,9 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtwayland-everywhere-src-5.15.2.tar.xz.sha256 +sha256 193732229ff816f3aaab9a5e2f6bed71ddddbf1988ce003fe8dd84a92ce9aeb5 qtwayland-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.GPL2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 0dbe024961f6ab5c52689cbd036c977975d0d0f6a67ff97762d96cb819dd5652 LICENSE.GPL3-EXCEPT +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 LICENSE.LGPL3 +sha256 ed8742a95cb9db653a09b050e27ccff5e67ba69c14aa2c3137f2a4e1892f6c0d LICENSE.FDL diff --git a/package/qt5/qt5wayland/qt5wayland.mk b/package/qt5/qt5wayland/qt5wayland.mk new file mode 100644 index 00000000..0076bbfe --- /dev/null +++ b/package/qt5/qt5wayland/qt5wayland.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# qt5wayland +# +################################################################################ + +QT5WAYLAND_VERSION = $(QT5_VERSION) +QT5WAYLAND_SITE = $(QT5_SITE) +QT5WAYLAND_SOURCE = qtwayland-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5WAYLAND_VERSION).tar.xz +QT5WAYLAND_DEPENDENCIES = wayland +QT5WAYLAND_INSTALL_STAGING = YES + +ifeq ($(BR2_PACKAGE_QT5DECLARATIVE_QUICK),y) +QT5WAYLAND_DEPENDENCIES += qt5declarative +endif + +ifeq ($(BR2_PACKAGE_LIBXKBCOMMON),y) +QT5WAYLAND_DEPENDENCIES += libxkbcommon +endif + +QT5WAYLAND_LICENSE = GPL-2.0+ or LGPL-3.0, GPL-3.0 with exception(tools), GFDL-1.3 (docs) +QT5WAYLAND_LICENSE_FILES = LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT LICENSE.LGPL3 LICENSE.FDL + +ifeq ($(BR2_PACKAGE_QT5WAYLAND_COMPOSITOR),y) +QT5WAYLAND_CONF_OPTS += CONFIG+=wayland-compositor +endif + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5webchannel/Config.in b/package/qt5/qt5webchannel/Config.in new file mode 100644 index 00000000..436e3abb --- /dev/null +++ b/package/qt5/qt5webchannel/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_QT5WEBCHANNEL + bool "qt5webchannel" + select BR2_PACKAGE_QT5WEBSOCKETS + help + Qt is a cross-platform application and UI framework for + developers using C++. + + Qt WebChannel enables peer-to-peer communication between + a server (QML/C++ application) and a client + (HTML/JavaScript or QML application). + + http://doc.qt.io/qt-5/qtwebchannel-index.html diff --git a/package/qt5/qt5webchannel/qt5webchannel.hash b/package/qt5/qt5webchannel/qt5webchannel.hash new file mode 100644 index 00000000..47c7da33 --- /dev/null +++ b/package/qt5/qt5webchannel/qt5webchannel.hash @@ -0,0 +1,9 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtwebchannel-everywhere-src-5.15.2.tar.xz.sha256 +sha256 127fe79c43b386713f151ed7d411cd81e45e29f9c955584f29736f78c9303ec1 qtwebchannel-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.GPL2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 0dbe024961f6ab5c52689cbd036c977975d0d0f6a67ff97762d96cb819dd5652 LICENSE.GPL3-EXCEPT +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 LICENSE.LGPL3 +sha256 ed8742a95cb9db653a09b050e27ccff5e67ba69c14aa2c3137f2a4e1892f6c0d LICENSE.FDL diff --git a/package/qt5/qt5webchannel/qt5webchannel.mk b/package/qt5/qt5webchannel/qt5webchannel.mk new file mode 100644 index 00000000..176c0fd7 --- /dev/null +++ b/package/qt5/qt5webchannel/qt5webchannel.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# qt5webchannel +# +################################################################################ + +QT5WEBCHANNEL_VERSION = $(QT5_VERSION) +QT5WEBCHANNEL_SITE = $(QT5_SITE) +QT5WEBCHANNEL_SOURCE = qtwebchannel-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5WEBCHANNEL_VERSION).tar.xz +QT5WEBCHANNEL_DEPENDENCIES = qt5websockets +QT5WEBCHANNEL_INSTALL_STAGING = YES +QT5WEBCHANNEL_LICENSE = GPL-2.0+ or LGPL-3.0, GPL-3.0 with exception(tools), GFDL-1.3 (docs) +QT5WEBCHANNEL_LICENSE_FILES = LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT LICENSE.LGPL3 LICENSE.FDL + +ifeq ($(BR2_PACKAGE_QT5BASE_EXAMPLES),y) +QT5WEBCHANNEL_LICENSE += , BSD-3-Clause (examples) +endif + +ifeq ($(BR2_PACKAGE_QT5DECLARATIVE),y) +QT5WEBCHANNEL_DEPENDENCIES += qt5declarative +endif + +define QT5WEBCHANNEL_INSTALL_TARGET_JAVASCRIPT + $(INSTALL) -m 0644 -D $(@D)/examples/webchannel/shared/qwebchannel.js \ + $(TARGET_DIR)/var/www/qwebchannel.js +endef +QT5WEBCHANNEL_POST_INSTALL_TARGET_HOOKS += QT5WEBCHANNEL_INSTALL_TARGET_JAVASCRIPT + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5webengine/0001-gn.pro-don-t-link-statically-with-libstc.patch b/package/qt5/qt5webengine/0001-gn.pro-don-t-link-statically-with-libstc.patch new file mode 100644 index 00000000..dff3e6c8 --- /dev/null +++ b/package/qt5/qt5webengine/0001-gn.pro-don-t-link-statically-with-libstc.patch @@ -0,0 +1,51 @@ +From 7ae73da23ad998bd1e63ad213cf7a02e61191951 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sat, 23 May 2020 19:01:19 +0200 +Subject: [PATCH] gn.pro: don't link statically with libstc++ +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +While cross-compiling, qt5webengine is building a host tool but +want to link the libstdc++ statically. This requires to install +libstdc++-static package on the host (Fedora package name). + +Otherwise the link fail with: + + [185/185] LINK gn + FAILED: gn + /usr/bin/g++ -O3 -fdata-sections -ffunction-sections -Wl,--gc-sections -Wl,-strip-all -Wl,--as-needed -static-libstdc++ -pthread -o gn -Wl,--start-group tools/gn/gn_main.o base.a gn_lib.a -Wl,--end-group -ldl + /usr/bin/ld : unable to find -lstdc++ + [...] + Project ERROR: GN build error! + +Add --no-static-libstdc++ argument to gn.pro to link to +libstdc++.so.6 instead of libstdc++.a. + +--no-static-libstdc++ has been added by [1] but it force +linking statically by default. + +[1] https://github.com/qt/qtwebengine-chromium/commit/cfab9198a9917f42cf08b1caf84ab9b71aac1911#diff-905c8f054808213577c0a92d1b704615 + +Signed-off-by: Romain Naour +--- + src/buildtools/gn.pro | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/buildtools/gn.pro b/src/buildtools/gn.pro +index 033202e6..5dd8e241 100644 +--- a/src/buildtools/gn.pro ++++ b/src/buildtools/gn.pro +@@ -20,7 +20,8 @@ build_pass|!debug_and_release { + + gn_gen_args = --no-last-commit-position --out-path $$out_path \ + --cc \"$$which($$QMAKE_CC)\" --cxx \"$$which($$QMAKE_CXX)\" \ +- --ld \"$$which($$QMAKE_LINK)\" ++ --ld \"$$which($$QMAKE_LINK)\" \ ++ --no-static-libstdc++ + + msvc:!clang_cl: gn_gen_args += --use-lto + +-- +2.25.4 + diff --git a/package/qt5/qt5webengine/Config.in b/package/qt5/qt5webengine/Config.in new file mode 100644 index 00000000..4e923c7f --- /dev/null +++ b/package/qt5/qt5webengine/Config.in @@ -0,0 +1,98 @@ +config BR2_PACKAGE_QT5WEBENGINE_ARCH_SUPPORTS + bool + default y if BR2_aarch64 || BR2_arm || \ + BR2_i386 || BR2_x86_64 || \ + BR2_mips || BR2_mips64 + # -m32 flag is used for 32bit builds and host tools have + # limited architecture support + depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86" + depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE # qt5declarative + depends on !BR2_BINFMT_FLAT # qt5base-icu + depends on BR2_USE_MMU # libglib2, qt5base-dbus + +comment "qt5webengine needs udev /dev management and a glibc toolchain w/ gcc >= 4.9, host gcc >= 4.9, threads, wchar" + depends on BR2_PACKAGE_QT5WEBENGINE_ARCH_SUPPORTS + depends on !BR2_PACKAGE_HAS_UDEV || !BR2_TOOLCHAIN_USES_GLIBC || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || \ + !BR2_HOST_GCC_AT_LEAST_4_9 || \ + !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR + +comment "qt5webengine needs an OpenGL and EGL-capable backend" + depends on BR2_PACKAGE_QT5WEBENGINE_ARCH_SUPPORTS + depends on !BR2_PACKAGE_QT5_GL_AVAILABLE || !BR2_PACKAGE_HAS_LIBEGL + +config BR2_PACKAGE_QT5WEBENGINE + bool "qt5webengine" + depends on BR2_PACKAGE_QT5WEBENGINE_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_USES_GLIBC # execinfo.h, mallinfo + depends on BR2_HOST_GCC_AT_LEAST_4_9 # qt5base-icu + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # qt5base-icu + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2, libvpx, qt5base-dbus + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_PACKAGE_QT5_GL_AVAILABLE # qt5declarative, qt5base-eglfs + depends on BR2_PACKAGE_HAS_LIBEGL # qt5base-eglfs + depends on BR2_PACKAGE_HAS_UDEV + # v8 (a chromium 3rd-party) compiles its internal host-tools with the + # same word size as the target. For 32-bits targets, it adds the -m32 + # flag (for 64-bits, it adds the -m64 flag). + # https://github.com/v8/v8/blob/5.6.326.55/gypfiles/toolchain.gypi#L1036-L1037 + select BR2_HOSTARCH_NEEDS_IA32_COMPILER if !BR2_ARCH_IS_64 # v8/chromium + select BR2_PACKAGE_FFMPEG + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBNSS + select BR2_PACKAGE_LIBVPX + select BR2_PACKAGE_LIBXKBCOMMON + select BR2_PACKAGE_OPUS + select BR2_PACKAGE_WEBP + select BR2_PACKAGE_WEBP_DEMUX + select BR2_PACKAGE_QT5BASE_DBUS + select BR2_PACKAGE_QT5BASE_EGLFS + select BR2_PACKAGE_QT5BASE_FONTCONFIG + select BR2_PACKAGE_QT5BASE_ICU + select BR2_PACKAGE_QT5BASE_GUI + select BR2_PACKAGE_QT5BASE_WIDGETS + select BR2_PACKAGE_QT5DECLARATIVE + select BR2_PACKAGE_QT5DECLARATIVE_QUICK + select BR2_PACKAGE_QT5QUICKCONTROLS + select BR2_PACKAGE_QT5QUICKCONTROLS2 + select BR2_PACKAGE_QT5SVG if BR2_PACKAGE_QT5BASE_EXAMPLES + select BR2_PACKAGE_QT5WEBCHANNEL + select BR2_PACKAGE_XLIB_LIBXCOMPOSITE if BR2_PACKAGE_QT5BASE_XCB + select BR2_PACKAGE_XLIB_LIBXCURSOR if BR2_PACKAGE_QT5BASE_XCB + select BR2_PACKAGE_XLIB_LIBXI if BR2_PACKAGE_QT5BASE_XCB + select BR2_PACKAGE_XLIB_LIBXRANDR if BR2_PACKAGE_QT5BASE_XCB + select BR2_PACKAGE_XLIB_LIBXSCRNSAVER if BR2_PACKAGE_QT5BASE_XCB + select BR2_PACKAGE_XLIB_LIBXTST if BR2_PACKAGE_QT5BASE_XCB + help + The Qt WebEngine module provides a web browser engine that + makes it easy to embed content from the World Wide Web into + your Qt application. + + Qt WebEngine provides C++ classes and QML types for rendering + HTML, XHTML, and SVG documents, styled using Cascading Style + Sheets (CSS) and scripted with JavaScript. HTML documents can + be made fully editable by the user through the use of the + contenteditable attribute on HTML elements. + + http://doc.qt.io/qt-5/qtwebengine-index.html + +if BR2_PACKAGE_QT5WEBENGINE + +config BR2_PACKAGE_QT5WEBENGINE_PROPRIETARY_CODECS + bool "proprietary codecs" + help + Qt WebEngine supports the MPEG-4 Part 14 (MP4) file format, + which includes required proprietary audio and video codecs, + such as H.264 and MPEG layer-3 (MP3). + +config BR2_PACKAGE_QT5WEBENGINE_ALSA + bool "alsa" + select BR2_PACKAGE_ALSA_LIB + select BR2_PACKAGE_ALSA_LIB_MIXER + select BR2_PACKAGE_ALSA_LIB_RAWMIDI + select BR2_PACKAGE_ALSA_LIB_HWDEP + select BR2_PACKAGE_ALSA_LIB_SEQ + help + Enable ALSA support. + +endif diff --git a/package/qt5/qt5webengine/chromium-latest.inc b/package/qt5/qt5webengine/chromium-latest.inc new file mode 100644 index 00000000..a5fdfdc1 --- /dev/null +++ b/package/qt5/qt5webengine/chromium-latest.inc @@ -0,0 +1,1000 @@ +# (echo "QT5WEBENGINE_CHROMIUM_LICENSE_FILES = \\" ; \ +# find src/3rdparty/ -type f \ +# \( -iname 'license*' -o -iname 'copying*' -o -name 'APPLE_LICENSE' -o -name 'Copyright' -o -path '*/license_texts/*' -o -path '*/licenses/*' \) \ +# -a -not -name '*.cc' -not -name '*.py' -not -name '*.pyc' -not -name '*.h' -not -name 'LICENSE.sha1' -not -name 'licensecheck.pl*' -not -name 'license.after' -not -name 'license.before' | \ +# sort | sed 's%^\(.*\)$%\t\1 \\%') > package/qt5/qt5webengine/chromium-latest.inc +QT5WEBENGINE_CHROMIUM_LICENSE_FILES = \ + src/3rdparty/chromium/base/third_party/cityhash/COPYING \ + src/3rdparty/chromium/base/third_party/double_conversion/LICENSE \ + src/3rdparty/chromium/base/third_party/dynamic_annotations/LICENSE \ + src/3rdparty/chromium/base/third_party/icu/LICENSE \ + src/3rdparty/chromium/base/third_party/libevent/LICENSE \ + src/3rdparty/chromium/base/third_party/nspr/LICENSE \ + src/3rdparty/chromium/base/third_party/superfasthash/LICENSE \ + src/3rdparty/chromium/base/third_party/symbolize/LICENSE \ + src/3rdparty/chromium/base/third_party/valgrind/LICENSE \ + src/3rdparty/chromium/base/third_party/xdg_mime/LICENSE \ + src/3rdparty/chromium/base/third_party/xdg_user_dirs/LICENSE \ + src/3rdparty/chromium/buildtools/LICENSE \ + src/3rdparty/chromium/LICENSE \ + src/3rdparty/chromium/LICENSE.chromium_os \ + src/3rdparty/chromium/mojo/public/LICENSE \ + src/3rdparty/chromium/net/third_party/mozilla_security_manager/LICENSE \ + src/3rdparty/chromium/net/third_party/nss/LICENSE \ + src/3rdparty/chromium/net/third_party/quiche/src/LICENSE \ + src/3rdparty/chromium/net/third_party/uri_template/LICENSE \ + src/3rdparty/chromium/ppapi/LICENSE \ + src/3rdparty/chromium/third_party/abseil-cpp/LICENSE \ + src/3rdparty/chromium/third_party/angle/LICENSE \ + src/3rdparty/chromium/third_party/angle/src/common/third_party/smhasher/LICENSE \ + src/3rdparty/chromium/third_party/angle/src/common/third_party/xxhash/LICENSE \ + src/3rdparty/chromium/third_party/angle/src/third_party/compiler/LICENSE \ + src/3rdparty/chromium/third_party/angle/src/third_party/libXNVCtrl/LICENSE \ + src/3rdparty/chromium/third_party/angle/src/third_party/volk/LICENSE.md \ + src/3rdparty/chromium/third_party/angle/third_party/rapidjson/src/bin/jsonschema/LICENSE \ + src/3rdparty/chromium/third_party/angle/third_party/rapidjson/src/contrib/natvis/LICENSE \ + src/3rdparty/chromium/third_party/angle/third_party/rapidjson/src/license.txt \ + src/3rdparty/chromium/third_party/angle/third_party/vulkan-headers/src/LICENSE.txt \ + src/3rdparty/chromium/third_party/angle/third_party/vulkan-loader/src/LICENSE.txt \ + src/3rdparty/chromium/third_party/angle/third_party/vulkan-tools/src/LICENSE.txt \ + src/3rdparty/chromium/third_party/angle/tools/flex-bison/third_party/m4sugar/LICENSE \ + src/3rdparty/chromium/third_party/angle/tools/flex-bison/third_party/skeletons/LICENSE \ + src/3rdparty/chromium/third_party/angle/util/windows/third_party/StackWalker/LICENSE \ + src/3rdparty/chromium/third_party/apple_apsl/LICENSE \ + src/3rdparty/chromium/third_party/arcore-android-sdk-client/LICENSE \ + src/3rdparty/chromium/third_party/arcore-android-sdk/LICENSE \ + src/3rdparty/chromium/third_party/axe-core/LICENSE \ + src/3rdparty/chromium/third_party/bazel/LICENSE \ + src/3rdparty/chromium/third_party/blanketjs/LICENSE \ + src/3rdparty/chromium/third_party/blink/LICENSE_FOR_ABOUT_CREDITS \ + src/3rdparty/chromium/third_party/blink/renderer/core/LICENSE-APPLE \ + src/3rdparty/chromium/third_party/blink/renderer/core/LICENSE-LGPL-2 \ + src/3rdparty/chromium/third_party/blink/renderer/core/LICENSE-LGPL-2.1 \ + src/3rdparty/chromium/third_party/blink/renderer/platform/testing/data/third_party/Noto/LICENSE_OFL.txt \ + src/3rdparty/chromium/third_party/blink/renderer/platform/testing/data/third_party/Roboto/LICENSE.txt \ + src/3rdparty/chromium/third_party/blink/tools/blinkpy/third_party/wpt/wpt/LICENSE.md \ + src/3rdparty/chromium/third_party/blink/tools/blinkpy/third_party/wpt/wpt/tools/third_party/enum/enum/LICENSE \ + src/3rdparty/chromium/third_party/blink/tools/blinkpy/third_party/wpt/wpt/tools/third_party/h2/LICENSE \ + src/3rdparty/chromium/third_party/blink/tools/blinkpy/third_party/wpt/wpt/tools/third_party/hpack/LICENSE \ + src/3rdparty/chromium/third_party/blink/tools/blinkpy/third_party/wpt/wpt/tools/third_party/html5lib/LICENSE \ + src/3rdparty/chromium/third_party/blink/tools/blinkpy/third_party/wpt/wpt/tools/third_party/hyperframe/LICENSE \ + src/3rdparty/chromium/third_party/blink/tools/blinkpy/third_party/wpt/wpt/tools/third_party/six/LICENSE \ + src/3rdparty/chromium/third_party/blink/tools/blinkpy/third_party/wpt/wpt/tools/wptserve/LICENSE \ + src/3rdparty/chromium/third_party/boringssl/src/LICENSE \ + src/3rdparty/chromium/third_party/boringssl/src/third_party/fiat/LICENSE \ + src/3rdparty/chromium/third_party/boringssl/src/third_party/googletest/LICENSE \ + src/3rdparty/chromium/third_party/boringssl/src/third_party/wycheproof_testvectors/LICENSE \ + src/3rdparty/chromium/third_party/bouncycastle/LICENSE \ + src/3rdparty/chromium/third_party/breakpad/breakpad/LICENSE \ + src/3rdparty/chromium/third_party/breakpad/breakpad/src/third_party/curl/COPYING \ + src/3rdparty/chromium/third_party/breakpad/breakpad/src/third_party/libdisasm/LICENSE \ + src/3rdparty/chromium/third_party/breakpad/LICENSE \ + src/3rdparty/chromium/third_party/brotli/LICENSE \ + src/3rdparty/chromium/third_party/bspatch/LICENSE \ + src/3rdparty/chromium/third_party/byte_buddy/LICENSE \ + src/3rdparty/chromium/third_party/catapult/common/eslint/LICENSE \ + src/3rdparty/chromium/third_party/catapult/common/py_vulcanize/third_party/rcssmin/bench/LICENSE.cssmin \ + src/3rdparty/chromium/third_party/catapult/common/py_vulcanize/third_party/rcssmin/LICENSE \ + src/3rdparty/chromium/third_party/catapult/common/py_vulcanize/third_party/rjsmin/LICENSE \ + src/3rdparty/chromium/third_party/catapult/third_party/polymer/components/polymer/LICENSE.txt \ + src/3rdparty/chromium/third_party/catapult/tracing/LICENSE \ + src/3rdparty/chromium/third_party/catapult/tracing/third_party/chai/LICENSE \ + src/3rdparty/chromium/third_party/catapult/tracing/third_party/d3/LICENSE \ + src/3rdparty/chromium/third_party/catapult/tracing/third_party/devscripts/COPYING \ + src/3rdparty/chromium/third_party/catapult/tracing/third_party/gl-matrix/LICENSE.md \ + src/3rdparty/chromium/third_party/catapult/tracing/third_party/jpeg-js/LICENSE \ + src/3rdparty/chromium/third_party/catapult/tracing/third_party/jszip/LICENSE.markdown \ + src/3rdparty/chromium/third_party/catapult/tracing/third_party/mocha/LICENSE \ + src/3rdparty/chromium/third_party/catapult/tracing/third_party/pako/LICENSE \ + src/3rdparty/chromium/third_party/ced/LICENSE \ + src/3rdparty/chromium/third_party/ced/src/LICENSE \ + src/3rdparty/chromium/third_party/chaijs/LICENSE \ + src/3rdparty/chromium/third_party/checkstyle/LICENSE \ + src/3rdparty/chromium/third_party/checkstyle/LICENSE.apache20 \ + src/3rdparty/chromium/third_party/cld_3/LICENSE \ + src/3rdparty/chromium/third_party/cld_3/src/LICENSE \ + src/3rdparty/chromium/third_party/closure_compiler/compiler/COPYING \ + src/3rdparty/chromium/third_party/closure_compiler/LICENSE \ + src/3rdparty/chromium/third_party/crashpad/crashpad/LICENSE \ + src/3rdparty/chromium/third_party/crashpad/crashpad/third_party/apple_cf/APPLE_LICENSE \ + src/3rdparty/chromium/third_party/crashpad/crashpad/third_party/cpp-httplib/cpp-httplib/LICENSE \ + src/3rdparty/chromium/third_party/crashpad/crashpad/third_party/getopt/LICENSE \ + src/3rdparty/chromium/third_party/crashpad/crashpad/third_party/glibc/COPYING.LIB \ + src/3rdparty/chromium/third_party/crashpad/crashpad/third_party/xnu/APPLE_LICENSE \ + src/3rdparty/chromium/third_party/crc32c/src/LICENSE \ + src/3rdparty/chromium/third_party/cros_system_api/LICENSE \ + src/3rdparty/chromium/third_party/custom_tabs_client/LICENSE \ + src/3rdparty/chromium/third_party/d3/src/LICENSE \ + src/3rdparty/chromium/third_party/dav1d/libdav1d/COPYING \ + src/3rdparty/chromium/third_party/dav1d/LICENSE \ + src/3rdparty/chromium/third_party/dawn/LICENSE \ + src/3rdparty/chromium/third_party/decklink/LICENSE \ + src/3rdparty/chromium/third_party/devscripts/COPYING \ + src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/cm/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/cm/LICENSE_python \ + src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/cm_modes/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/dagre_layout/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/formatter_worker/acorn/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/sdk/wasm_source_map/LICENSES.deps \ + src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/third_party/fabricjs/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/third_party/lighthouse/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/third_party/lit-html/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/third_party/lit-html/package/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/third_party/wasmparser/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/abbrev/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/accepts/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/acorn-jsx/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/acorn/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/acorn-walk/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ajv/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/amdefine/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ansi-colors/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ansi-escapes/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ansi-regex/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ansi-styles/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ansi-wrap/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/anymatch/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/append-transform/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/argparse/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/array-find-index/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/arr-diff/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/arr-union/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/asap/LICENSE.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/assert/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/assign-symbols/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/astral-regex/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ast-types/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/async/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/async-limiter/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@babel/code-frame/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@babel/generator/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@babel/generator/node_modules/source-map/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@babel/helper-function-name/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@babel/helper-get-function-arity/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@babel/helper-split-export-declaration/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@babel/highlight/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@babel/parser/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@babel/template/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@babel/traverse/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@babel/types/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/balanced-match/LICENSE.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/base64-arraybuffer/LICENSE-MIT \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/base64id/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/base64-js/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/binary-extensions/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/.bin/license-checker \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/blob/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/bluebird/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/body-parser/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/body-parser/node_modules/debug/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/body-parser/node_modules/ms/license.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/brace-expansion/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/braces/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/browserify-aes/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/browserify-cipher/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/browserify-des/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/browserify-rsa/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/browserify-sign/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/browserify-zlib/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/browser-resolve/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/browser-stdout/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/buffer-from/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/buffer/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/buffer-xor/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/builtin-status-codes/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/bytes/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/callsites/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/camelcase-keys/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/camelcase/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/chai/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/chalk/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/chardet/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/check-error/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/chokidar/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/chokidar/node_modules/glob-parent/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/cipher-base/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/cli-cursor/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/cliui/LICENSE.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/cli-width/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/clone/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/code-point-at/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/color-convert/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/color-name/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/colors/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/combine-source-map/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/combine-source-map/node_modules/convert-source-map/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/combine-source-map/node_modules/source-map/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/commander/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/compare-versions/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/component-emitter/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/concat-map/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/concat-stream/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/concat-stream/node_modules/readable-stream/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/concat-stream/node_modules/safe-buffer/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/concat-stream/node_modules/string_decoder/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/connect/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/connect/node_modules/debug/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/connect/node_modules/ms/license.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/content-type/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/convert-source-map/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/convert-source-map/node_modules/safe-buffer/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/cookie/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/core-js/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/core-util-is/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/create-ecdh/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/create-hash/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/create-hmac/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/cross-spawn/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/crypto-browserify/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/currently-unhandled/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/custom-event/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/date-format/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/dateformat/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/debug/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/debuglog/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/decamelize/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/deep-eql/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/deep-is/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/default-require-extensions/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/defaults/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/define-properties/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/depd/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/dezalgo/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/diffie-hellman/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/diff/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/diff-match-patch/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/di/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/doctrine/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/doctrine/LICENSE.closure-compiler \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/doctrine/LICENSE.esprima \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/domain-browser/LICENSE.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ee-first/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/emoji-regex/LICENSE-MIT.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/encodeurl/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/end-of-stream/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/engine.io-client/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/engine.io-client/node_modules/debug/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/engine.io-client/node_modules/ms/license.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/engine.io/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/engine.io/node_modules/debug/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/engine.io/node_modules/ms/license.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/engine.io-parser/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ent/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/error-ex/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/es6-object-assign/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/es6-promise/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/es-abstract/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/escape-html/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/escape-string-regexp/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/escodegen/LICENSE.BSD \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/escodegen/node_modules/esprima/LICENSE.BSD \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/eslint/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/eslint-plugin-mocha/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/eslint-plugin-rulesdir/LICENSE.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/eslint-scope/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/eslint-utils/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/eslint-visitor-keys/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/espree/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/esprima/LICENSE.BSD \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/esquery/license.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/es-to-primitive/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/estraverse/LICENSE.BSD \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/esutils/LICENSE.BSD \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/eventemitter3/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/events/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/evp_bytestokey/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/execa/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/extend/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/extend-shallow/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/external-editor/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/extract-zip/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/extract-zip/node_modules/debug/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/extract-zip/node_modules/ms/license.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/fast-deep-equal/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/fast-json-stable-stringify/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/fast-levenshtein/LICENSE.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/fd-slicer/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/figures/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/file-entry-cache/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/fileset/LICENSE-MIT \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/fill-range/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/finalhandler/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/finalhandler/node_modules/debug/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/finalhandler/node_modules/ms/license.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/find-up/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/flat-cache/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/flat-cache/node_modules/rimraf/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/flat/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/flatted/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/follow-redirects/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/follow-redirects/node_modules/debug/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/fsevents/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/fs-extra/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/fs.realpath/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/functional-red-black-tree/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/function-bind/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/get-caller-file/LICENSE.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/get-func-name/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/get-stream/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/globals/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/glob/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/glob-parent/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/glob-parent/node_modules/is-glob/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/graceful-fs/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/handlebars/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/has-binary2/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/has-flag/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/hash-base/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/has/LICENSE-MIT \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/has-symbols/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/he/LICENSE-MIT.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/hosted-git-info/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/http-errors/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/http-errors/node_modules/inherits/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/http-proxy/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/https-browserify/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/https-proxy-agent/node_modules/debug/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/iconv-lite/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ieee754/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ignore/LICENSE-MIT \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/import-fresh/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/indent-string/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/inflight/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/inherits/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/inline-source-map/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/inline-source-map/node_modules/source-map/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/inquirer/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/inquirer/node_modules/ansi-regex/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/inquirer/node_modules/strip-ansi/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/invert-kv/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-arguments/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-arrayish/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/isbinaryfile/LICENSE.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-binary-path/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-buffer/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-callable/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-date-object/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/isexe/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-extendable/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-extglob/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-finite/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-fullwidth-code-point/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-generator-function/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-glob/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-nan/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-number/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/isobject/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-plain-object/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-promise/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-regex/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-stream/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-symbol/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul-api/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul-diff/node_modules/minimist/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul-lib-coverage/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul-lib-hook/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul-lib-instrument/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul-lib-instrument/node_modules/semver/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul-lib-report/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul-lib-report/node_modules/supports-color/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul-lib-source-maps/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul-lib-source-maps/node_modules/rimraf/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul/node_modules/async/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul/node_modules/escodegen/LICENSE.BSD \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul/node_modules/escodegen/LICENSE.source-map \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul/node_modules/esprima/LICENSE.BSD \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul/node_modules/estraverse/LICENSE.BSD \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul/node_modules/glob/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul/node_modules/has-flag/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul/node_modules/source-map/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul/node_modules/supports-color/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul-reports/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-utf8/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/jsesc/LICENSE-MIT.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/jsonfile/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/json-parse-better-errors/LICENSE.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/json-schema-traverse/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/json-stable-stringify-without-jsonify/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/json-stringify-safe/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/js-tokens/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/js-yaml/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/js-yaml/node_modules/esprima/LICENSE.BSD \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-chai/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-chrome-launcher/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-coverage-istanbul-instrumenter/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-coverage-istanbul-reporter/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-coverage/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-coverage/LICENSE-istanbul \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-coverage/node_modules/source-map/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-mocha/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-mocha/node_modules/minimist/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma/node_modules/rimraf/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-sourcemap-loader/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-typescript/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-typescript/node_modules/acorn/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-typescript/node_modules/async/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-typescript/node_modules/source-map/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-typescript/node_modules/tmp/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-typescript/node_modules/tmp/node_modules/rimraf/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/lcid/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/levn/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/license-checker/bin/license-checker \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/license-checker/lib/license-files.js \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/license-checker/lib/license.js \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/license-checker/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/license-checker/node_modules/debug/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/license-checker/node_modules/nopt/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/load-json-file/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/load-json-file/node_modules/pify/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/load-json-file/node_modules/strip-bom/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/locate-path/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/locate-path/node_modules/path-exists/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/lodash-deep/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/lodash/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/lodash.memoize/LICENSE.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/log4js/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/log-symbols/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/loud-rejection/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/lru-cache/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/make-dir/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/map-age-cleaner/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/map-obj/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/md5.js/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/media-typer/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mem/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mem/node_modules/mimic-fn/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/meow/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/meow/node_modules/minimist/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mime-db/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mime/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mime-types/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mimic-fn/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/minimalistic-assert/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/minimatch/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/minimist/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mkdirp/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mocha/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mocha/node_modules/ansi-colors/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mocha/node_modules/debug/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mocha/node_modules/diff/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mocha/node_modules/find-up/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mocha/node_modules/glob/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mocha/node_modules/ms/license.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mocha/node_modules/supports-color/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ms/license.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mute-stream/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/negotiator/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/neo-async/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/nice-try/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/nopt/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/normalize-package-data/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/normalize-package-data/node_modules/resolve/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/normalize-path/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/npm-run-path/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/number-is-nan/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/object-assign/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/object.assign/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/object.entries/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/object.getownpropertydescriptors/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/object-inspect/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/object-is/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/object-keys/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/omit-deep-lodash/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/once/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/onetime/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/on-finished/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/optimist/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/optimist/node_modules/wordwrap/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/optionator/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/os-browserify/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/osenv/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/os-homedir/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/os-locale/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/os-tmpdir/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/pad/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/pako/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/parent-module/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/parse-asn1/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/parse-json/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/parseqs/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/parseuri/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/parseurl/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/path-browserify/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/path-dirname/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/path-exists/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/path-is-absolute/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/path-key/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/path-parse/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/path-type/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/path-type/node_modules/pify/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/pathval/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/pbkdf2/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/p-defer/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/pend/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/p-finally/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/picomatch/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/pify/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/pinkie/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/pinkie-promise/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/p-is-promise/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/p-limit/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/p-locate/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/plugin-error/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/prelude-ls/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/private/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/process/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/process-nextick-args/license.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/progress/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/pseudomap/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/p-try/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/public-encrypt/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/pump/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/punycode/LICENSE-MIT.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/puppeteer/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/puppeteer/node_modules/rimraf/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/puppeteer/node_modules/ws/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/qs/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/querystring-es3/License.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/querystring/License.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ramda/LICENSE.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/randombytes/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/randomfill/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/range-parser/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/raw-body/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/readable-stream/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/readdirp/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/readdir-scoped-modules/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/read-installed/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/read-package-json/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/read-pkg/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/read-pkg-up/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/recast/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/recast/node_modules/esprima/LICENSE.BSD \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/redent/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/regexpp/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/remap-istanbul/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/repeating/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/require-directory/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/require-main-filename/LICENSE.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/requires-port/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/resolve-from/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/resolve/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/restore-cursor/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/rfdc/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/rimraf/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ripemd160/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/rollup/LICENSE.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/run-async/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/rxjs/_esm2015/LICENSE.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/rxjs/_esm5/LICENSE.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/rxjs/LICENSE.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/rxjs/src/LICENSE.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/safe-buffer/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/safer-buffer/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/semver/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/set-blocking/LICENSE.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/setimmediate/LICENSE.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/setprototypeof/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/sha.js/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/shebang-command/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/shebang-regex/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/signal-exit/LICENSE.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/slice-ansi/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/slide/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/socket.io-adapter/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/socket.io-client/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/socket.io-client/node_modules/debug/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/socket.io-client/node_modules/ms/license.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/socket.io/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/socket.io/node_modules/debug/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/socket.io/node_modules/ms/license.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/socket.io-parser/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/socket.io-parser/node_modules/debug/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/socket.io-parser/node_modules/ms/license.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/source-map/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/spdx-compare/LICENSE.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/spdx-correct/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/spdx-expression-parse/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/spdx-ranges/LICENSE.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/spdx-satisfies/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/sprintf-js/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/statuses/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/stream-browserify/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/stream-browserify/node_modules/readable-stream/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/stream-browserify/node_modules/safe-buffer/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/stream-browserify/node_modules/string_decoder/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/stream-http/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/streamroller/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/streamroller/node_modules/debug/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/string_decoder/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/string.prototype.trimleft/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/string.prototype.trimright/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/string-width/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/strip-ansi/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/strip-bom/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/strip-eof/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/strip-indent/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/strip-json-comments/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/supports-color/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/table/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/table/node_modules/ansi-regex/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/table/node_modules/string-width/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/table/node_modules/strip-ansi/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/text-table/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/through2/LICENSE.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/through/LICENSE.APACHE2 \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/through/LICENSE.MIT \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/timers-browserify/LICENSE.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/tmp/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/to-fast-properties/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/toidentifier/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/to-regex-range/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/treeify/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/trim-newlines/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/tslib/LICENSE.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/tsutils/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/tty-browserify/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/type-check/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/typedarray/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/type-detect/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/type-is/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@types/chai/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@types/color-name/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@typescript-eslint/eslint-plugin/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@typescript-eslint/eslint-plugin/node_modules/regexpp/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@typescript-eslint/experimental-utils/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@typescript-eslint/parser/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@typescript-eslint/typescript-estree/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@typescript-eslint/typescript-estree/node_modules/glob/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@typescript-eslint/typescript-estree/node_modules/semver/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/typescript/LICENSE.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@types/eslint-visitor-keys/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@types/estree/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@types/filesystem/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@types/json-schema/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@types/mocha/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@types/node/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@types/puppeteer/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/uglify-js/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ultron/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/universalify/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/unpipe/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/url/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/url/node_modules/punycode/LICENSE-MIT.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/useragent/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/util-deprecate/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/util-extend/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/util/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/utils-merge/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/validate-npm-package-license/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/vm-browserify/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/void-elements/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/wcwidth/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/which/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/which-module/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/wide-align/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/wordwrap/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/wrap-ansi/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/wrap-ansi/node_modules/ansi-regex/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/wrap-ansi/node_modules/string-width/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/wrap-ansi/node_modules/strip-ansi/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/wrappy/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/write/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ws/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ws/node_modules/safe-buffer/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/xmlhttprequest-ssl/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/xtend/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/y18n/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yallist/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/ansi-regex/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/ansi-styles/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/camelcase/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/cliui/LICENSE.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/color-convert/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/color-name/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/emoji-regex/LICENSE-MIT.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/find-up/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/is-fullwidth-code-point/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/locate-path/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/path-exists/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/p-locate/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/string-width/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/strip-ansi/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/wrap-ansi/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/yargs-parser/LICENSE.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs-parser/LICENSE.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs-parser/node_modules/camelcase/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs-unparser/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs-unparser/node_modules/camelcase/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs-unparser/node_modules/find-up/license \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs-unparser/node_modules/get-caller-file/LICENSE.md \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs-unparser/node_modules/require-main-filename/LICENSE.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs-unparser/node_modules/yargs/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs-unparser/node_modules/yargs-parser/LICENSE.txt \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yauzl/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yeast/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/scripts/closure/COPYING \ + src/3rdparty/chromium/third_party/devtools-frontend/src/third_party/axe-core/LICENSE \ + src/3rdparty/chromium/third_party/devtools-frontend/src/third_party/pyjson5/src/LICENSE \ + src/3rdparty/chromium/third_party/dom_distiller_js/LICENSE \ + src/3rdparty/chromium/third_party/dpkg-shlibdeps/LICENSE \ + src/3rdparty/chromium/third_party/emoji-segmenter/LICENSE \ + src/3rdparty/chromium/third_party/emoji-segmenter/src/LICENSE \ + src/3rdparty/chromium/third_party/espresso/LICENSE \ + src/3rdparty/chromium/third_party/expat/src/expat/COPYING \ + src/3rdparty/chromium/third_party/ffmpeg/chromium/scripts/license_texts/full_lgpl.txt \ + src/3rdparty/chromium/third_party/ffmpeg/chromium/scripts/license_texts/jpeg.txt \ + src/3rdparty/chromium/third_party/ffmpeg/chromium/scripts/license_texts/mips.txt \ + src/3rdparty/chromium/third_party/ffmpeg/chromium/scripts/license_texts/oggparse_ahlberg_rullgayrd_2005.txt \ + src/3rdparty/chromium/third_party/ffmpeg/COPYING.GPLv2 \ + src/3rdparty/chromium/third_party/ffmpeg/COPYING.GPLv3 \ + src/3rdparty/chromium/third_party/ffmpeg/COPYING.LGPLv2.1 \ + src/3rdparty/chromium/third_party/ffmpeg/COPYING.LGPLv3 \ + src/3rdparty/chromium/third_party/ffmpeg/LICENSE.md \ + src/3rdparty/chromium/third_party/flac/COPYING.FDL \ + src/3rdparty/chromium/third_party/flac/COPYING.GPL \ + src/3rdparty/chromium/third_party/flac/COPYING.LGPL \ + src/3rdparty/chromium/third_party/flac/COPYING.Xiph \ + src/3rdparty/chromium/third_party/flatbuffers/LICENSE \ + src/3rdparty/chromium/third_party/flatbuffers/src/dart/LICENSE \ + src/3rdparty/chromium/third_party/flatbuffers/src/LICENSE.txt \ + src/3rdparty/chromium/third_party/fontconfig/LICENSE \ + src/3rdparty/chromium/third_party/fontconfig/src/COPYING \ + src/3rdparty/chromium/third_party/freetype/src/docs/LICENSE.TXT \ + src/3rdparty/chromium/third_party/fuchsia-sdk/LICENSE \ + src/3rdparty/chromium/third_party/gif_player/LICENSE \ + src/3rdparty/chromium/third_party/glfw/src/LICENSE.md \ + src/3rdparty/chromium/third_party/glslang/LICENSE \ + src/3rdparty/chromium/third_party/glslang/src/LICENSE.txt \ + src/3rdparty/chromium/third_party/googletest/src/googlemock/LICENSE \ + src/3rdparty/chromium/third_party/googletest/src/googlemock/scripts/generator/LICENSE \ + src/3rdparty/chromium/third_party/googletest/src/googletest/LICENSE \ + src/3rdparty/chromium/third_party/googletest/src/LICENSE \ + src/3rdparty/chromium/third_party/google-truth/LICENSE \ + src/3rdparty/chromium/third_party/guava/LICENSE \ + src/3rdparty/chromium/third_party/gvr-android-keyboard/LICENSE \ + src/3rdparty/chromium/third_party/gvr-android-sdk/LICENSE \ + src/3rdparty/chromium/third_party/hamcrest/LICENSE \ + src/3rdparty/chromium/third_party/harfbuzz-ng/src/COPYING \ + src/3rdparty/chromium/third_party/harfbuzz-ng/src/src/ms-use/COPYING \ + src/3rdparty/chromium/third_party/hunspell/COPYING \ + src/3rdparty/chromium/third_party/hunspell/COPYING.LESSER \ + src/3rdparty/chromium/third_party/hunspell/COPYING.MPL \ + src/3rdparty/chromium/third_party/iaccessible2/LICENSE \ + src/3rdparty/chromium/third_party/iccjpeg/LICENSE \ + src/3rdparty/chromium/third_party/icu4j/LICENSE \ + src/3rdparty/chromium/third_party/icu/LICENSE \ + src/3rdparty/chromium/third_party/icu/license.html \ + src/3rdparty/chromium/third_party/icu/scripts/LICENSE \ + src/3rdparty/chromium/third_party/ijar/LICENSE \ + src/3rdparty/chromium/third_party/ink/LICENSE \ + src/3rdparty/chromium/third_party/inspector_protocol/LICENSE \ + src/3rdparty/chromium/third_party/isimpledom/LICENSE \ + src/3rdparty/chromium/third_party/jacoco/LICENSE \ + src/3rdparty/chromium/third_party/javalang/LICENSE \ + src/3rdparty/chromium/third_party/jetifier_standalone/LICENSE \ + src/3rdparty/chromium/third_party/jinja2/LICENSE \ + src/3rdparty/chromium/third_party/jsoncpp/LICENSE \ + src/3rdparty/chromium/third_party/jsoncpp/source/LICENSE \ + src/3rdparty/chromium/third_party/jstemplate/COPYING \ + src/3rdparty/chromium/third_party/khronos/LICENSE \ + src/3rdparty/chromium/third_party/leveldatabase/src/LICENSE \ + src/3rdparty/chromium/third_party/libaddressinput/LICENSE \ + src/3rdparty/chromium/third_party/libaddressinput/src/cpp/LICENSE.chromium \ + src/3rdparty/chromium/third_party/libaddressinput/src/LICENSE \ + src/3rdparty/chromium/third_party/libaom/source/libaom/LICENSE \ + src/3rdparty/chromium/third_party/libaom/source/libaom/third_party/fastfeat/LICENSE \ + src/3rdparty/chromium/third_party/libaom/source/libaom/third_party/googletest/src/googletest/LICENSE \ + src/3rdparty/chromium/third_party/libaom/source/libaom/third_party/libwebm/LICENSE.TXT \ + src/3rdparty/chromium/third_party/libaom/source/libaom/third_party/vector/LICENSE \ + src/3rdparty/chromium/third_party/libaom/source/libaom/third_party/x86inc/LICENSE \ + src/3rdparty/chromium/third_party/libcxx-pretty-printers/LICENSE \ + src/3rdparty/chromium/third_party/libgav1/src/LICENSE \ + src/3rdparty/chromium/third_party/libgifcodec/LICENSE.md \ + src/3rdparty/chromium/third_party/libipp/LICENSE \ + src/3rdparty/chromium/third_party/libjingle_xmpp/LICENSE \ + src/3rdparty/chromium/third_party/libjpeg_turbo/LICENSE.md \ + src/3rdparty/chromium/third_party/libovr/LICENSE \ + src/3rdparty/chromium/third_party/libpng/LICENSE \ + src/3rdparty/chromium/third_party/libprotobuf-mutator/src/LICENSE \ + src/3rdparty/chromium/third_party/libsecret/LICENSE \ + src/3rdparty/chromium/third_party/libsrtp/LICENSE \ + src/3rdparty/chromium/third_party/libsync/LICENSE \ + src/3rdparty/chromium/third_party/libudev/LICENSE \ + src/3rdparty/chromium/third_party/libusb/src/COPYING \ + src/3rdparty/chromium/third_party/libvpx/source/libvpx/LICENSE \ + src/3rdparty/chromium/third_party/libvpx/source/libvpx/third_party/googletest/src/LICENSE \ + src/3rdparty/chromium/third_party/libvpx/source/libvpx/third_party/libwebm/LICENSE.TXT \ + src/3rdparty/chromium/third_party/libvpx/source/libvpx/third_party/libyuv/LICENSE \ + src/3rdparty/chromium/third_party/libvpx/source/libvpx/third_party/x86inc/LICENSE \ + src/3rdparty/chromium/third_party/libwebm/source/LICENSE.TXT \ + src/3rdparty/chromium/third_party/libwebp/LICENSE \ + src/3rdparty/chromium/third_party/libxml/src/COPYING \ + src/3rdparty/chromium/third_party/libxml/src/Copyright \ + src/3rdparty/chromium/third_party/libXNVCtrl/LICENSE \ + src/3rdparty/chromium/third_party/libxslt/linux/COPYING \ + src/3rdparty/chromium/third_party/libxslt/src/Copyright \ + src/3rdparty/chromium/third_party/libyuv/LICENSE \ + src/3rdparty/chromium/third_party/lottie/LICENSE \ + src/3rdparty/chromium/third_party/lzma_sdk/LICENSE \ + src/3rdparty/chromium/third_party/mako/LICENSE \ + src/3rdparty/chromium/third_party/markupsafe/LICENSE \ + src/3rdparty/chromium/third_party/material_design_icons/LICENSE \ + src/3rdparty/chromium/third_party/mesa_headers/LICENSE \ + src/3rdparty/chromium/third_party/metrics_proto/LICENSE \ + src/3rdparty/chromium/third_party/microsoft_webauthn/LICENSE \ + src/3rdparty/chromium/third_party/minigbm/LICENSE \ + src/3rdparty/chromium/third_party/minigbm/src/LICENSE \ + src/3rdparty/chromium/third_party/minizip/src/lib/bzip2/LICENSE \ + src/3rdparty/chromium/third_party/minizip/src/LICENSE \ + src/3rdparty/chromium/third_party/mocha/LICENSE \ + src/3rdparty/chromium/third_party/mockito/LICENSE \ + src/3rdparty/chromium/third_party/modp_b64/LICENSE \ + src/3rdparty/chromium/third_party/motemplate/LICENSE \ + src/3rdparty/chromium/third_party/mozilla/LICENSE \ + src/3rdparty/chromium/third_party/nasm/LICENSE \ + src/3rdparty/chromium/third_party/netty4/LICENSE \ + src/3rdparty/chromium/third_party/netty-tcnative/LICENSE \ + src/3rdparty/chromium/third_party/node/LICENSE \ + src/3rdparty/chromium/third_party/objenesis/LICENSE \ + src/3rdparty/chromium/third_party/ocmock/License.txt \ + src/3rdparty/chromium/third_party/one_euro_filter/LICENSE \ + src/3rdparty/chromium/third_party/openh264/src/LICENSE \ + src/3rdparty/chromium/third_party/openscreen/src/LICENSE \ + src/3rdparty/chromium/third_party/openscreen/src/third_party/mozilla/LICENSE.txt \ + src/3rdparty/chromium/third_party/openvr/src/LICENSE \ + src/3rdparty/chromium/third_party/opus/src/COPYING \ + src/3rdparty/chromium/third_party/opus/src/LICENSE_PLEASE_READ.txt \ + src/3rdparty/chromium/third_party/ots/LICENSE \ + src/3rdparty/chromium/third_party/ow2_asm/LICENSE \ + src/3rdparty/chromium/third_party/pdfium/LICENSE \ + src/3rdparty/chromium/third_party/pdfium/third_party/bigint/LICENSE \ + src/3rdparty/chromium/third_party/pdfium/third_party/libpng16/LICENSE \ + src/3rdparty/chromium/third_party/pdfium/third_party/pymock/LICENSE.txt \ + src/3rdparty/chromium/third_party/perfetto/LICENSE \ + src/3rdparty/chromium/third_party/pexpect/LICENSE \ + src/3rdparty/chromium/third_party/pffft/LICENSE \ + src/3rdparty/chromium/third_party/ply/LICENSE \ + src/3rdparty/chromium/third_party/ply/license.patch \ + src/3rdparty/chromium/third_party/polymer/LICENSE.polymer \ + src/3rdparty/chromium/third_party/polymer/v1_0/components-chromium/polymer2/LICENSE.txt \ + src/3rdparty/chromium/third_party/polymer/v1_0/components-chromium/polymer/LICENSE.txt \ + src/3rdparty/chromium/third_party/polymer/v3_0/components-chromium/polymer/LICENSE.txt \ + src/3rdparty/chromium/third_party/private-join-and-compute/src/crypto/LICENSE \ + src/3rdparty/chromium/third_party/private-join-and-compute/src/LICENSE \ + src/3rdparty/chromium/third_party/private-join-and-compute/src/util/LICENSE \ + src/3rdparty/chromium/third_party/proguard/LICENSE \ + src/3rdparty/chromium/third_party/protobuf/LICENSE \ + src/3rdparty/chromium/third_party/pycoverage/LICENSE \ + src/3rdparty/chromium/third_party/pyelftools/elftools/construct/LICENSE \ + src/3rdparty/chromium/third_party/pyelftools/LICENSE \ + src/3rdparty/chromium/third_party/pyjson5/src/LICENSE \ + src/3rdparty/chromium/third_party/pymock/LICENSE.txt \ + src/3rdparty/chromium/third_party/pystache/LICENSE \ + src/3rdparty/chromium/third_party/Python-Markdown/LICENSE.md \ + src/3rdparty/chromium/third_party/pywebsocket3/src/LICENSE \ + src/3rdparty/chromium/third_party/qcms/src/COPYING \ + src/3rdparty/chromium/third_party/quic_trace/src/LICENSE \ + src/3rdparty/chromium/third_party/quic_trace/src/third_party/fonts/LICENSE \ + src/3rdparty/chromium/third_party/quic_trace/src/third_party/glew/LICENSE.txt \ + src/3rdparty/chromium/third_party/qunit/LICENSE \ + src/3rdparty/chromium/third_party/r8/LICENSE \ + src/3rdparty/chromium/third_party/re2/LICENSE \ + src/3rdparty/chromium/third_party/re2/src/LICENSE \ + src/3rdparty/chromium/third_party/requests/LICENSE \ + src/3rdparty/chromium/third_party/rnnoise/COPYING \ + src/3rdparty/chromium/third_party/robolectric/LICENSE \ + src/3rdparty/chromium/third_party/robolectric/licenses/extreme.indiana.edu.license.txt \ + src/3rdparty/chromium/third_party/robolectric/licenses/javolution.license.txt \ + src/3rdparty/chromium/third_party/robolectric/licenses/pivotal.labs.license.txt \ + src/3rdparty/chromium/third_party/s2cellid/LICENSE \ + src/3rdparty/chromium/third_party/schema_org/LICENSE \ + src/3rdparty/chromium/third_party/shaderc/src/LICENSE \ + src/3rdparty/chromium/third_party/shaderc/src/third_party/LICENSE.glslang \ + src/3rdparty/chromium/third_party/shaderc/src/third_party/LICENSE.spirv-tools \ + src/3rdparty/chromium/third_party/simplejson/LICENSE.txt \ + src/3rdparty/chromium/third_party/sinonjs/LICENSE \ + src/3rdparty/chromium/third_party/six/LICENSE \ + src/3rdparty/chromium/third_party/six/src/LICENSE \ + src/3rdparty/chromium/third_party/skia/include/third_party/skcms/LICENSE \ + src/3rdparty/chromium/third_party/skia/include/third_party/vulkan/LICENSE \ + src/3rdparty/chromium/third_party/skia/LICENSE \ + src/3rdparty/chromium/third_party/skia/modules/canvaskit/canvaskit/LICENSE \ + src/3rdparty/chromium/third_party/skia/modules/pathkit/npm-asmjs/LICENSE \ + src/3rdparty/chromium/third_party/skia/modules/pathkit/npm-wasm/LICENSE \ + src/3rdparty/chromium/third_party/skia/third_party/etc1/LICENSE \ + src/3rdparty/chromium/third_party/skia/third_party/skcms/LICENSE \ + src/3rdparty/chromium/third_party/skia/third_party/vulkanmemoryallocator/include/LICENSE.txt \ + src/3rdparty/chromium/third_party/skia/third_party/vulkanmemoryallocator/LICENSE \ + src/3rdparty/chromium/third_party/skia/third_party/wuffs/LICENSE \ + src/3rdparty/chromium/third_party/smhasher/LICENSE \ + src/3rdparty/chromium/third_party/snappy/src/COPYING \ + src/3rdparty/chromium/third_party/spirv-cross/spirv-cross/LICENSE \ + src/3rdparty/chromium/third_party/spirv-headers/LICENSE \ + src/3rdparty/chromium/third_party/spirv-headers/src/LICENSE \ + src/3rdparty/chromium/third_party/SPIRV-Tools/LICENSE \ + src/3rdparty/chromium/third_party/SPIRV-Tools/src/LICENSE \ + src/3rdparty/chromium/third_party/SPIRV-Tools/src/utils/vscode/src/lsp/LICENSE \ + src/3rdparty/chromium/third_party/sqlite4java/LICENSE \ + src/3rdparty/chromium/third_party/sqlite/LICENSE \ + src/3rdparty/chromium/third_party/sqlite/src/autoconf/tea/license.terms \ + src/3rdparty/chromium/third_party/sqlite/src/LICENSE.md \ + src/3rdparty/chromium/third_party/subresource-filter-ruleset/LICENSE \ + src/3rdparty/chromium/third_party/sudden_motion_sensor/LICENSE \ + src/3rdparty/chromium/third_party/swiftshader/LICENSE.txt \ + src/3rdparty/chromium/third_party/tcmalloc/LICENSE \ + src/3rdparty/chromium/third_party/tcmalloc/vendor/COPYING \ + src/3rdparty/chromium/third_party/test_fonts/LICENSE \ + src/3rdparty/chromium/third_party/tlslite/LICENSE \ + src/3rdparty/chromium/third_party/turbine/LICENSE \ + src/3rdparty/chromium/third_party/ub-uiautomator/LICENSE \ + src/3rdparty/chromium/third_party/unrar/LICENSE \ + src/3rdparty/chromium/third_party/unrar/src/license.txt \ + src/3rdparty/chromium/third_party/usb_ids/LICENSE \ + src/3rdparty/chromium/third_party/usrsctp/LICENSE \ + src/3rdparty/chromium/third_party/usrsctp/usrsctplib/LICENSE.md \ + src/3rdparty/chromium/third_party/v4l-utils/COPYING.libv4l \ + src/3rdparty/chromium/third_party/wds/LICENSE \ + src/3rdparty/chromium/third_party/wds/src/COPYING \ + src/3rdparty/chromium/third_party/web-animations-js/LICENSE \ + src/3rdparty/chromium/third_party/web-animations-js/sources/COPYING \ + src/3rdparty/chromium/third_party/webdriver/COPYING \ + src/3rdparty/chromium/third_party/webdriver/LICENSE \ + src/3rdparty/chromium/third_party/webgpu-cts/src/LICENSE.txt \ + src/3rdparty/chromium/third_party/webgpu-cts/src/third_party/jquery/LICENSE.txt \ + src/3rdparty/chromium/third_party/webrtc/common_audio/third_party/fft4g/LICENSE \ + src/3rdparty/chromium/third_party/webrtc/common_audio/third_party/spl_sqrt_floor/LICENSE \ + src/3rdparty/chromium/third_party/webrtc/examples/androidapp/third_party/autobanh/LICENSE \ + src/3rdparty/chromium/third_party/webrtc/examples/androidapp/third_party/autobanh/LICENSE.md \ + src/3rdparty/chromium/third_party/webrtc/examples/objc/AppRTCMobile/third_party/SocketRocket/LICENSE \ + src/3rdparty/chromium/third_party/webrtc/LICENSE \ + src/3rdparty/chromium/third_party/webrtc/license_template.txt \ + src/3rdparty/chromium/third_party/webrtc/modules/third_party/fft/LICENSE \ + src/3rdparty/chromium/third_party/webrtc/modules/third_party/g711/LICENSE \ + src/3rdparty/chromium/third_party/webrtc/modules/third_party/g722/LICENSE \ + src/3rdparty/chromium/third_party/webrtc/modules/third_party/portaudio/LICENSE \ + src/3rdparty/chromium/third_party/webrtc/rtc_base/third_party/base64/LICENSE \ + src/3rdparty/chromium/third_party/webrtc/rtc_base/third_party/sigslot/LICENSE \ + src/3rdparty/chromium/third_party/webxr_test_pages/LICENSE \ + src/3rdparty/chromium/third_party/webxr_test_pages/webxr-samples/js/cottontail/LICENSE.md \ + src/3rdparty/chromium/third_party/webxr_test_pages/webxr-samples/js/third-party/dat.gui/LICENSE \ + src/3rdparty/chromium/third_party/webxr_test_pages/webxr-samples/js/third-party/gl-matrix/LICENSE \ + src/3rdparty/chromium/third_party/webxr_test_pages/webxr-samples/LICENSE.md \ + src/3rdparty/chromium/third_party/weston/LICENSE \ + src/3rdparty/chromium/third_party/weston/src/COPYING \ + src/3rdparty/chromium/third_party/weston/src/data/COPYING \ + src/3rdparty/chromium/third_party/widevine/LICENSE \ + src/3rdparty/chromium/third_party/woff2/LICENSE \ + src/3rdparty/chromium/third_party/wuffs/LICENSE \ + src/3rdparty/chromium/third_party/wuffs/src/LICENSE \ + src/3rdparty/chromium/third_party/xdg-utils/LICENSE \ + src/3rdparty/chromium/third_party/xstream/LICENSE \ + src/3rdparty/chromium/third_party/yasm/source/patched-yasm/COPYING \ + src/3rdparty/chromium/third_party/zlib/LICENSE \ + src/3rdparty/chromium/tools/grit/third_party/six/LICENSE \ + src/3rdparty/chromium/tools/origin_trials/third_party/ed25519/LICENSE \ + src/3rdparty/chromium/tools/page_cycler/acid3/LICENSE \ + src/3rdparty/chromium/tools/win/ChromeDebug/ChromeDebug/LICENSE \ + src/3rdparty/chromium/url/third_party/mozilla/LICENSE.txt \ + src/3rdparty/chromium/v8/LICENSE \ + src/3rdparty/chromium/v8/LICENSE.fdlibm \ + src/3rdparty/chromium/v8/LICENSE.strongtalk \ + src/3rdparty/chromium/v8/LICENSE.v8 \ + src/3rdparty/chromium/v8/LICENSE.valgrind \ + src/3rdparty/chromium/v8/src/third_party/siphash/LICENSE \ + src/3rdparty/chromium/v8/src/third_party/utf8-decoder/LICENSE \ + src/3rdparty/chromium/v8/src/third_party/valgrind/LICENSE \ + src/3rdparty/chromium/v8/src/third_party/vtune/LICENSE \ + src/3rdparty/chromium/v8/third_party/colorama/LICENSE \ + src/3rdparty/chromium/v8/third_party/inspector_protocol/LICENSE \ + src/3rdparty/chromium/v8/third_party/v8/builtins/LICENSE \ + src/3rdparty/chromium/v8/third_party/wasm-api/LICENSE \ + src/3rdparty/gn/base/third_party/icu/LICENSE \ + src/3rdparty/gn/LICENSE \ + src/3rdparty/ninja/COPYING \ diff --git a/package/qt5/qt5webengine/host-pkg-config.in b/package/qt5/qt5webengine/host-pkg-config.in new file mode 100644 index 00000000..86a98064 --- /dev/null +++ b/package/qt5/qt5webengine/host-pkg-config.in @@ -0,0 +1,6 @@ +#!/bin/sh +PKG_CONFIG_SYSROOT_DIR="/" \ +PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 \ +PKG_CONFIG_ALLOW_SYSTEM_LIBS=1 \ +PKG_CONFIG_LIBDIR="@HOST_DIR@/lib/pkgconfig:@HOST_DIR@/share/pkgconfig" \ +exec @HOST_DIR@/bin/pkgconf "$@" diff --git a/package/qt5/qt5webengine/qt5webengine.hash b/package/qt5/qt5webengine/qt5webengine.hash new file mode 100644 index 00000000..6a631c0f --- /dev/null +++ b/package/qt5/qt5webengine/qt5webengine.hash @@ -0,0 +1,1007 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtwebengine-everywhere-src-5.15.2.tar.xz.sha256 +sha256 c8afca0e43d84f7bd595436fbe4d13a5bbdb81ec5104d605085d07545b6f91e0 qtwebengine-everywhere-src-5.15.2.tar.xz + +# Locally calculated +sha256 f34787ef0342c614b667186a6ec2f5d6b9d650e30142a2788a589a89743e88e9 LICENSE.Chromium +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.GPL2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 0dbe024961f6ab5c52689cbd036c977975d0d0f6a67ff97762d96cb819dd5652 LICENSE.GPL3-EXCEPT +sha256 245248009fd0af1725d183248380e476c1283383909358a13686606352bf2a17 LICENSE.GPLv3 +sha256 9ae1959e86bd49b9680f78e0b49d4e52ae88a3f234d497e175e42a7e8ed59216 LICENSE.LGPL3 + +# Locally calculated with: +# for i in $(find src/3rdparty/ -type f \( -iname 'license*' -o -iname 'copying*' -o -name 'APPLE_LICENSE' -o -name 'Copyright' -o -path '*/license_texts/*' -o -path '*/licenses/*' \) -a -not -name '*.cc' -not -name '*.py' -not -name '*.pyc' -not -name '*.h' -not -name 'LICENSE.sha1' -not -name 'licensecheck.pl*' -not -name 'license.after' -not -name 'license.before') ; do echo -n "sha256 " ; sha256sum $i ; done | sort --key=3 +sha256 3ed00dd93c75655599456c83cba2f69c6824fd53f24fc24206ba27b65057709d src/3rdparty/chromium/base/third_party/cityhash/COPYING +sha256 4af93c12062c58058378de2397dc1c92bbff9ddfb1d583a01c84127557ce97ca src/3rdparty/chromium/base/third_party/double_conversion/LICENSE +sha256 96e7ccbf8d17e319dd77c4ebd4965b64a820bbcc3142a2478fbf95af77417b6a src/3rdparty/chromium/base/third_party/dynamic_annotations/LICENSE +sha256 5d85142a5609ad177a2d7a2e7cae060b886b8b42f25c5b9803cf0cb5ee04ad2f src/3rdparty/chromium/base/third_party/icu/LICENSE +sha256 9ad1d4223b80349f3d3ab9cec92f93431b9da14a1b5d41de468ce054a28cf8aa src/3rdparty/chromium/base/third_party/libevent/LICENSE +sha256 d55a403514532af12dc2fbfb2e41900090a5dd6c7c76c8e4d9b20bcc737eac35 src/3rdparty/chromium/base/third_party/nspr/LICENSE +sha256 90b2201c340cee36b40a443f949d9eb416f0a0d204c32d350aff87fedeb67ae8 src/3rdparty/chromium/base/third_party/superfasthash/LICENSE +sha256 538edc6f52c563cf06eca1bac8dd785ff60ef5a371a950265700d5d40386db6e src/3rdparty/chromium/base/third_party/symbolize/LICENSE +sha256 79955cd80438f041387eb080f2675394e36a806b8b17eca63a4bc568d839509e src/3rdparty/chromium/base/third_party/valgrind/LICENSE +sha256 c45766baef552c59eeb1fdfbbc690e52e4cd5b135dfd325f21bdfe8ddfe28ce6 src/3rdparty/chromium/base/third_party/xdg_mime/LICENSE +sha256 18351de3d7e2dc469cc83e77d38a3e25d010251e34eb348bbd1a76275e313997 src/3rdparty/chromium/base/third_party/xdg_user_dirs/LICENSE +sha256 7a209dd1b94cabdb5ea9c6f9164b9546ffa5daaa671e7767d49510db055f5c51 src/3rdparty/chromium/buildtools/LICENSE +sha256 845022e0c1db1abb41a6ba4cd3c4b674ec290f3359d9d3c78ae558d4c0ed9308 src/3rdparty/chromium/LICENSE +sha256 212c5a071f61512786b5e5840b3d70c85e017f3f82939ad4d4a870fc48b33477 src/3rdparty/chromium/LICENSE.chromium_os +sha256 7a209dd1b94cabdb5ea9c6f9164b9546ffa5daaa671e7767d49510db055f5c51 src/3rdparty/chromium/mojo/public/LICENSE +sha256 bed70fc84f1bea2b4b144564b9a0f9a5a3bc7b0d78f6e62092aeb689cac56bdd src/3rdparty/chromium/net/third_party/mozilla_security_manager/LICENSE +sha256 a20c1a32d1f8102432360b42e932869f7c11c7cdbacf9cac554c422132af47f4 src/3rdparty/chromium/net/third_party/nss/LICENSE +sha256 845022e0c1db1abb41a6ba4cd3c4b674ec290f3359d9d3c78ae558d4c0ed9308 src/3rdparty/chromium/net/third_party/quiche/src/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/net/third_party/uri_template/LICENSE +sha256 834ee20e8fc3235722ed801bae30cc539c2775be656ff9cc2810fe674e53d5ec src/3rdparty/chromium/ppapi/LICENSE +sha256 c79a7fea0e3cac04cd43f20e7b648e5a0ff8fa5344e644b0ee09ca1162b62747 src/3rdparty/chromium/third_party/abseil-cpp/LICENSE +sha256 bf4da21bd20bcfb5b60b7ecc67fa864a79be049e21d6178076887f178dd6c71a src/3rdparty/chromium/third_party/angle/LICENSE +sha256 3f6f1b520bc53e878ccbb698ad0bacef3752a5f4e4b50a26552bd70f60b40748 src/3rdparty/chromium/third_party/angle/src/common/third_party/smhasher/LICENSE +sha256 86ec6953794503942b70fcd4f35b565d44f63f703b7037ce44dad965c4aaae91 src/3rdparty/chromium/third_party/angle/src/common/third_party/xxhash/LICENSE +sha256 a08ba10adec47027ef8078848729837b1c5a42f140718d7afd65c23f1eeec392 src/3rdparty/chromium/third_party/angle/src/third_party/compiler/LICENSE +sha256 31346421254a3e6e12687cf17f19f6357ee73a617fa7b3d3ccefdcbabe49bdd3 src/3rdparty/chromium/third_party/angle/src/third_party/libXNVCtrl/LICENSE +sha256 336f505f8d5aa73ea40b4d798dde86953e9c1f6525757f1d7f18120fea09bb1d src/3rdparty/chromium/third_party/angle/src/third_party/volk/LICENSE.md +sha256 837402bd25fad9b704265801ca3f92566a98157c1f9a7acd6f446299ba1c305a src/3rdparty/chromium/third_party/angle/third_party/rapidjson/src/bin/jsonschema/LICENSE +sha256 394faaedb93c1da8ecbd61322518834908fee64381117e01a611bf9fac20baa6 src/3rdparty/chromium/third_party/angle/third_party/rapidjson/src/contrib/natvis/LICENSE +sha256 a140e5d46fe734a1c78f1a3c3ef207871dd75648be71fdda8e309b23ab8b1f32 src/3rdparty/chromium/third_party/angle/third_party/rapidjson/src/license.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/angle/third_party/vulkan-headers/src/LICENSE.txt +sha256 43c0a37e6a0fa7ff3c843b3ec5a4fac84b712558ddac103fbd4c1649662a9ece src/3rdparty/chromium/third_party/angle/third_party/vulkan-loader/src/LICENSE.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/angle/third_party/vulkan-tools/src/LICENSE.txt +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 src/3rdparty/chromium/third_party/angle/tools/flex-bison/third_party/m4sugar/LICENSE +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 src/3rdparty/chromium/third_party/angle/tools/flex-bison/third_party/skeletons/LICENSE +sha256 bfec18debedcb337f8af53f143ccf0b1575d0b7c30deaee137f10397eca0d353 src/3rdparty/chromium/third_party/angle/util/windows/third_party/StackWalker/LICENSE +sha256 b23e682fda7310afe43505ed6041919ccff8f9e0c6799ebd7542cbcef11102e3 src/3rdparty/chromium/third_party/apple_apsl/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/arcore-android-sdk-client/LICENSE +sha256 584e795ba5833279c327245594d6dc216fc664144fa3626a0bdf136bc00af76c src/3rdparty/chromium/third_party/arcore-android-sdk/LICENSE +sha256 af175b9d96ee93c21a036152e1b905b0b95304d4ae8c2c921c7609100ba8df7e src/3rdparty/chromium/third_party/axe-core/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/bazel/LICENSE +sha256 0518cf49c09398259d54fcfff0b5fd36456162c6439886660e53627b3073ef22 src/3rdparty/chromium/third_party/blanketjs/LICENSE +sha256 a661d10f8f194b1963a75bb4d308f17b078cc064624313a556902d89705f6876 src/3rdparty/chromium/third_party/blink/LICENSE_FOR_ABOUT_CREDITS +sha256 0b5d3a7cc325942567373b0ecd757d07c132e0ebd7c97bfc63f7e1a76094edb4 src/3rdparty/chromium/third_party/blink/renderer/core/LICENSE-APPLE +sha256 7555fa34bc131a75ca56d65c40cc1ea8f9515d23e353d4c15d58573a042f7805 src/3rdparty/chromium/third_party/blink/renderer/core/LICENSE-LGPL-2 +sha256 f2b3bd09663381deb99721109d22b47af1213bb43007a8b56a06c6375c8050ce src/3rdparty/chromium/third_party/blink/renderer/core/LICENSE-LGPL-2.1 +sha256 6a73f9541c2de74158c0e7cf6b0a58ef774f5a780bf191f2d7ec9cc53efe2bf2 src/3rdparty/chromium/third_party/blink/renderer/platform/testing/data/third_party/Noto/LICENSE_OFL.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/blink/renderer/platform/testing/data/third_party/Roboto/LICENSE.txt +sha256 5a7b465d39b5e018bc40cc34162176269f7c476989cb4dbcf0ec0b81701545a7 src/3rdparty/chromium/third_party/blink/tools/blinkpy/third_party/wpt/wpt/LICENSE.md +sha256 88ec6a6c8eafa3b9757e745783938bef3f5e4d5e3c76b1db576aa3ab520e5e1d src/3rdparty/chromium/third_party/blink/tools/blinkpy/third_party/wpt/wpt/tools/third_party/enum/enum/LICENSE +sha256 663f9253e13519b82ab4a6b1caab6bed05aada70517f28cd0254be8a9fa19ed6 src/3rdparty/chromium/third_party/blink/tools/blinkpy/third_party/wpt/wpt/tools/third_party/h2/LICENSE +sha256 763a9342a04df62046c9dc748a5287934eb0a5331c6863b3ca0aee20e18cb4ed src/3rdparty/chromium/third_party/blink/tools/blinkpy/third_party/wpt/wpt/tools/third_party/hpack/LICENSE +sha256 16a39991619e92f18680932da2a9199fdf7d95df3ecaedc52ea06218aabafd6f src/3rdparty/chromium/third_party/blink/tools/blinkpy/third_party/wpt/wpt/tools/third_party/html5lib/LICENSE +sha256 763a9342a04df62046c9dc748a5287934eb0a5331c6863b3ca0aee20e18cb4ed src/3rdparty/chromium/third_party/blink/tools/blinkpy/third_party/wpt/wpt/tools/third_party/hyperframe/LICENSE +sha256 b7529b8c07171a78a8c36c3283905528e4812945d977d125eb926e8ccbf245b6 src/3rdparty/chromium/third_party/blink/tools/blinkpy/third_party/wpt/wpt/tools/third_party/six/LICENSE +sha256 df336397e09e764416fc33b555703b1cdddd3a0cfea8a013ad1cad565c8be2f5 src/3rdparty/chromium/third_party/blink/tools/blinkpy/third_party/wpt/wpt/tools/wptserve/LICENSE +sha256 60bd7c54856bf9387221bde5ab55d516d7cea15870d0fed69406bcd1c8ec7c9d src/3rdparty/chromium/third_party/boringssl/src/LICENSE +sha256 0c125a4dab5ab869473e6491db22f6c0a7f8a4de58588d03bb2b16c0c8ebd7de src/3rdparty/chromium/third_party/boringssl/src/third_party/fiat/LICENSE +sha256 9702de7e4117a8e2b20dafab11ffda58c198aede066406496bef670d40a22138 src/3rdparty/chromium/third_party/boringssl/src/third_party/googletest/LICENSE +sha256 58d1e17ffe5109a7ae296caafcadfdbe6a7d176f0bc4ab01e12a689b0499d8bd src/3rdparty/chromium/third_party/boringssl/src/third_party/wycheproof_testvectors/LICENSE +sha256 5740985669353ef52e0f320413ff68dc62b6c23a596cd78b6d6b80764f1c50ab src/3rdparty/chromium/third_party/bouncycastle/LICENSE +sha256 f9752a0a4ac5215eaa3a4f0ec29cd52563c883de5d7870525cc0bc3a21cb8e15 src/3rdparty/chromium/third_party/breakpad/breakpad/LICENSE +sha256 4d03f91b94e0db3bdc9ddaf0060dd41cc94a2096094fbc1417713a2f059658c7 src/3rdparty/chromium/third_party/breakpad/breakpad/src/third_party/curl/COPYING +sha256 d8eaba95b8d03c5912da9b5823de2c920e84a993133039a22fc8100f9edb33a1 src/3rdparty/chromium/third_party/breakpad/breakpad/src/third_party/libdisasm/LICENSE +sha256 015b2d5cedb3024339446a63963d073fa831544cf253c5ddd713fccc8d83e939 src/3rdparty/chromium/third_party/breakpad/LICENSE +sha256 3d180008e36922a4e8daec11c34c7af264fed5962d07924aea928c38e8663c94 src/3rdparty/chromium/third_party/brotli/LICENSE +sha256 98f8746a39f9a42da35df7046a15b56d0e2f4f76eefc352d67f1bf76e85360b4 src/3rdparty/chromium/third_party/bspatch/LICENSE +sha256 b5730da9a26472a405b0b1c61d3d166714d9d654ab3282e54e4a01a5f66316c3 src/3rdparty/chromium/third_party/byte_buddy/LICENSE +sha256 0154852797380b35195ecd829582f1efd00bfe244eab427a6bbf1e3f3dd57b1f src/3rdparty/chromium/third_party/catapult/common/eslint/LICENSE +sha256 65d4ed698fb5cbcd1d44c78bc6a02c5bf1da00df5395d2d6ac43bdafe6bc20dc src/3rdparty/chromium/third_party/catapult/common/py_vulcanize/third_party/rcssmin/bench/LICENSE.cssmin +sha256 c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 src/3rdparty/chromium/third_party/catapult/common/py_vulcanize/third_party/rcssmin/LICENSE +sha256 c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 src/3rdparty/chromium/third_party/catapult/common/py_vulcanize/third_party/rjsmin/LICENSE +sha256 984fb04a16a9f1e0145ffd891125dc366a01cd921f58c9b0369be400c720790d src/3rdparty/chromium/third_party/catapult/third_party/polymer/components/polymer/LICENSE.txt +sha256 f77133324f35589f9f170473456321fe76aa35b750293cb8a475e26afa8f2bac src/3rdparty/chromium/third_party/catapult/tracing/LICENSE +sha256 17afb4516438c26ee15213c5a082206340d976a68472b8eab2499d7bce4debec src/3rdparty/chromium/third_party/catapult/tracing/third_party/chai/LICENSE +sha256 1920d2326ebbad34dcbd9681b4fe4926f113aa5e7dc9a92fceb456d859ee142e src/3rdparty/chromium/third_party/catapult/tracing/third_party/d3/LICENSE +sha256 5a2ed53cc5975569e9fa146c4245eaf53377dc1a88bdcb923da6487e53cba55e src/3rdparty/chromium/third_party/catapult/tracing/third_party/devscripts/COPYING +sha256 e8b80a53d0f95a3cf0f992f8cfc6b3911a7f32f47e0e4a8d4fd66582eeae9484 src/3rdparty/chromium/third_party/catapult/tracing/third_party/gl-matrix/LICENSE.md +sha256 be3fd324066af702fad2a9ef05664ce9665495ebc1824fd7b28960802ec7891e src/3rdparty/chromium/third_party/catapult/tracing/third_party/jpeg-js/LICENSE +sha256 aae03c510d63d96de72d37ce5650fbbac63b322d09ac0ee0df50b8950329e840 src/3rdparty/chromium/third_party/catapult/tracing/third_party/jszip/LICENSE.markdown +sha256 1f194a987fa1dc60e4bcf5e04e0fc03fff8f2ee587c52136adb2cebb397250b8 src/3rdparty/chromium/third_party/catapult/tracing/third_party/mocha/LICENSE +sha256 a04665b3b2de56c66730c1f720f528175739e4104f79073614aa611da1e85539 src/3rdparty/chromium/third_party/catapult/tracing/third_party/pako/LICENSE +sha256 ef5b39dfcafe08323262e3f51a3a9de649978a55ed8ef8eef3c451f2c1e78a53 src/3rdparty/chromium/third_party/ced/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/ced/src/LICENSE +sha256 3d1d2669d0ba87069b5e202f106193c4eb0e140a2aead31dca9670a0581dd979 src/3rdparty/chromium/third_party/chaijs/LICENSE +sha256 a190dc9c8043755d90f8b0a75fa66b9e42d4af4c980bf5ddc633f0124db3cee7 src/3rdparty/chromium/third_party/checkstyle/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/checkstyle/LICENSE.apache20 +sha256 c2d13ec3b431617beb314705c0f42d17ca579eed00032ed8a13dbcd23fc9bdd5 src/3rdparty/chromium/third_party/cld_3/LICENSE +sha256 c2d13ec3b431617beb314705c0f42d17ca579eed00032ed8a13dbcd23fc9bdd5 src/3rdparty/chromium/third_party/cld_3/src/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/closure_compiler/compiler/COPYING +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/closure_compiler/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/crashpad/crashpad/LICENSE +sha256 212846e0145aa50fb3a5aef254a370311a93acf6c1e792e47e0068d64c8c3885 src/3rdparty/chromium/third_party/crashpad/crashpad/third_party/apple_cf/APPLE_LICENSE +sha256 4b45cbe16d7b71b89ae6127e26e0d90a029198ca5e958ad8e3d0b8bbed364d8b src/3rdparty/chromium/third_party/crashpad/crashpad/third_party/cpp-httplib/cpp-httplib/LICENSE +sha256 f40ee07401827b6ac9cf0aee1aaffb00e42a3f2c729f9c83f96a3daafef5d944 src/3rdparty/chromium/third_party/crashpad/crashpad/third_party/getopt/LICENSE +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 src/3rdparty/chromium/third_party/crashpad/crashpad/third_party/glibc/COPYING.LIB +sha256 e5881019d8766c1e88a5fe1dbca4ba40c78011d41fcb18f6e9f50df60182685b src/3rdparty/chromium/third_party/crashpad/crashpad/third_party/xnu/APPLE_LICENSE +sha256 a1f30b77c01e0995fa32a00119e00749e8731ee8a3c4c3549bce74083c72b0b6 src/3rdparty/chromium/third_party/crc32c/src/LICENSE +sha256 e9427cf6abc4eaeda0bcd094fca46af4067970079f426b65d5cbacb87bff6366 src/3rdparty/chromium/third_party/cros_system_api/LICENSE +sha256 09e8a9bcec8067104652c168685ab0931e7868f9c8284b66f5ae6edae5f1130b src/3rdparty/chromium/third_party/custom_tabs_client/LICENSE +sha256 7a3cb0e5055874e67db9aa2d5fe26de23204fa994ffbad198901ffe9c812a717 src/3rdparty/chromium/third_party/d3/src/LICENSE +sha256 b327887de263238deaa80c34cdd2ff3e0ba1d35db585ce14a37ce3e74ee389e9 src/3rdparty/chromium/third_party/dav1d/libdav1d/COPYING +sha256 2da4494d2a8b5c742afbb905b10621e40129284c977ac138e3081ed0d9d83aed src/3rdparty/chromium/third_party/dav1d/LICENSE +sha256 b77e952e3feaebd807d27784988b19fb60f83f9fc9a0c03e6aedbbffd5d6f8ee src/3rdparty/chromium/third_party/dawn/LICENSE +sha256 43452b94e6aa0c2d076ad25b87f580c11571689d52f3aa1a1f7bdcab31a0bd15 src/3rdparty/chromium/third_party/decklink/LICENSE +sha256 5a2ed53cc5975569e9fa146c4245eaf53377dc1a88bdcb923da6487e53cba55e src/3rdparty/chromium/third_party/devscripts/COPYING +sha256 a3f2fe2ac6b471aa80c737c5d283dd049bdc903a73835ee6d4d2cac02fdd53bf src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/cm/LICENSE +sha256 c6daa4e8737d15aa7140b4f7eb82b9d4829bd2fd27132c43e282203b9c67dfc4 src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/cm/LICENSE_python +sha256 13110d66c514a7890c4b388a353bc08fa094fe13d5ed7f3a222cc0a0caa3fd17 src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/cm_modes/LICENSE +sha256 9fea307fe830918e12b6822f943f4b59bd7715614efb68e834a141ca758bd5f2 src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/dagre_layout/LICENSE +sha256 7cdb44aabddbdd78998119d68a39c87424119b663945c79891fc1b022301824c src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/formatter_worker/acorn/LICENSE +sha256 f734f7708439c275f3599e2df7de84cd9f360bd13620a30ab376af6c9deb213b src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/sdk/wasm_source_map/LICENSES.deps +sha256 b60e9b66bf4f9ab3aa5d1d20b18410a632fd624cf4ce3aa1eb839087caf35958 src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/third_party/fabricjs/LICENSE +sha256 7ec9661a8afafab1eee3523d6f1a193eff76314a5ab10b4ce96aefd87621b0c3 src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/third_party/lighthouse/LICENSE +sha256 55efdea1a9fe503ed3cd89c2776d3d2131795defaebea421754b428333fbfba3 src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/third_party/lit-html/LICENSE +sha256 1a5ae5ab221af81b68f4f4c156c0d2e044851272c5e2e6c07d685946557878ea src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/third_party/lit-html/package/LICENSE +sha256 0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594 src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/third_party/wasmparser/LICENSE +sha256 7a209dd1b94cabdb5ea9c6f9164b9546ffa5daaa671e7767d49510db055f5c51 src/3rdparty/chromium/third_party/devtools-frontend/src/LICENSE +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/abbrev/LICENSE +sha256 71f83c4c0621102a56d9853812777b85751bce7e9726f686f5b056c1f8a4b0e6 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/accepts/LICENSE +sha256 cfa72b62b9ae173078823a3796b25c027a9071046a263beddf966df67018ce06 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/acorn-jsx/LICENSE +sha256 7cdb44aabddbdd78998119d68a39c87424119b663945c79891fc1b022301824c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/acorn/LICENSE +sha256 7cdb44aabddbdd78998119d68a39c87424119b663945c79891fc1b022301824c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/acorn-walk/LICENSE +sha256 e85e131fa4ed25538ff1f4962ced1fb6f68b079bd9164a790597a0f30b8fd030 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ajv/LICENSE +sha256 ea97081f183590d87376f5fe73b7150c79863a73167f47ed87c41e191f89eb0b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/amdefine/LICENSE +sha256 10e7818a114cf8b702a2263ad424b3cd9d34254df6039e47bb3f412000b0ae00 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ansi-colors/LICENSE +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ansi-escapes/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ansi-regex/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ansi-styles/license +sha256 0798f37cff4a3f438c071316e41f94ffe110116a313ab0fc4f8caa07218f1f0f src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ansi-wrap/LICENSE +sha256 5a3b0007c4203f10fe11b3fe8747253eb994f135e10b73e1f88ada941af09c6e src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/anymatch/LICENSE +sha256 0b61ac8491c66669491fdb328200203822b91d2a0461f5cd898fe0944ea97e41 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/append-transform/license +sha256 c8442419dc614089ea022b3da6bfc089b41a58fb7b9030d1e651f2f36189dce2 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/argparse/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/array-find-index/license +sha256 f4a48aa8354a257785aa534bab2ac5ff2c2a98cd59cdf4a637bb68ee185683f7 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/arr-diff/LICENSE +sha256 3672fb6ef1c214578dfee689643516c2685f61ab08d130517ca8ea24f383a840 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/arr-union/LICENSE +sha256 e80373b1ed0f33cecc47173b4b0c6afe0d0318b32dbd84116a1a957e3f7f43a8 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/asap/LICENSE.md +sha256 6239c6144c31e58cf925c34483606969c555574d64ffa96518ab5d7f45c75d43 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/assert/LICENSE +sha256 0798f37cff4a3f438c071316e41f94ffe110116a313ab0fc4f8caa07218f1f0f src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/assign-symbols/LICENSE +sha256 69dee148a2cc470554dfa7142e830662062394d0fe67cddd379aba90dc60d6b3 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/astral-regex/license +sha256 a374b737c41b30b1ec04c5fcc17d1b853f008f217cc43a9dbea441abd9afde70 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ast-types/LICENSE +sha256 d9fed24f132985934fca621c4dc1dfb53e03377a24d0568d424383d7eaa9c0ac src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/async/LICENSE +sha256 e5a57cdd72e279910183799153134d0e749a5664fc459c8eacbecf72532b7db3 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/async-limiter/LICENSE +sha256 117da2af0d4ce0fe1c8e19b5cff9dcd806adf973d328d27b11d4448c4ff24f76 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@babel/code-frame/LICENSE +sha256 117da2af0d4ce0fe1c8e19b5cff9dcd806adf973d328d27b11d4448c4ff24f76 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@babel/generator/LICENSE +sha256 6cb0631f71c7749763fd3dd1d5bee52dd1070ec17f2edc1710079ad070bd2fbd src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@babel/generator/node_modules/source-map/LICENSE +sha256 4e32449bd377d3dbced215dfd66dc234994c28e561aef73dbd29d6b5a1a00484 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@babel/helper-function-name/LICENSE +sha256 517913953e6a69da35bccb95c2d801f70d73e8f267cdad1a1615bfe8974ad3ad src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@babel/helper-get-function-arity/LICENSE +sha256 117da2af0d4ce0fe1c8e19b5cff9dcd806adf973d328d27b11d4448c4ff24f76 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@babel/helper-split-export-declaration/LICENSE +sha256 117da2af0d4ce0fe1c8e19b5cff9dcd806adf973d328d27b11d4448c4ff24f76 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@babel/highlight/LICENSE +sha256 2e97627cb278aa7556fb9e8817368302301a595b6c7582512b8d74c57b773652 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@babel/parser/LICENSE +sha256 117da2af0d4ce0fe1c8e19b5cff9dcd806adf973d328d27b11d4448c4ff24f76 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@babel/template/LICENSE +sha256 117da2af0d4ce0fe1c8e19b5cff9dcd806adf973d328d27b11d4448c4ff24f76 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@babel/traverse/LICENSE +sha256 117da2af0d4ce0fe1c8e19b5cff9dcd806adf973d328d27b11d4448c4ff24f76 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@babel/types/LICENSE +sha256 a1bd5deadb6a06dd74efa852c1b8b23f63b67f2214fbe9c8bd591da51da69268 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/balanced-match/LICENSE.md +sha256 f3eca6ff762533fa5a77caf954a143e48afa204668cf97dce758c45a9e006be3 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/base64-arraybuffer/LICENSE-MIT +sha256 de6059eadd0c1327f30a22663392e57d36b97b0ac9bb48f4875c8008ba823c30 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/base64id/LICENSE +sha256 5b37224c080cdcc97c871ada971c224e9926370fe74f11b539aa1cf9f3b1aca1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/base64-js/LICENSE +sha256 85fe65eefab89e2a683232b96e6f689279821a0bd3b351e9ab6a6ebd19dea567 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/binary-extensions/license +sha256 150d7707d4532d57bdb5718637ff62fff1f075921c5ffaa084df27f900bfea76 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/.bin/license-checker +sha256 7d3e0d8d5604632b94ff9aea3001153c506566cd1c6c7bb37000acdb1fb37417 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/blob/LICENSE +sha256 87092fe7ffd1e92eba5d1dd39b73a73fdb4fdd4df3474beacc3d9f6b08ece82c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/bluebird/LICENSE +sha256 23d466b1b134b415b66fa50c6526b4cf3e7b9258554da88d3abb371721e7ce68 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/body-parser/LICENSE +sha256 98c970de440dcfc77471610aec2377c9d9b0db2b3be6d1add524a586e1d7f422 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/body-parser/node_modules/debug/LICENSE +sha256 6652830c2607c722b66f1b57de15877ab8fc5dca406cc5b335afeb365d0f32c1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/body-parser/node_modules/ms/license.md +sha256 68f12f6e2c33688699249c01d8f9623c534da20aa71989c57b061b7bc1676d14 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/brace-expansion/LICENSE +sha256 e70ff771504ba41f2be55de812a017ff46433d7a250c862e38fc419159e44500 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/braces/LICENSE +sha256 82ba430b068b75a41438568e1e4ed1f96e02699c9b51735154af03e9b59d6b0d src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/browserify-aes/LICENSE +sha256 dc09aa476634db0dbae1a296f099d5bd39e27c96b876d4d20b236fa565002bb6 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/browserify-cipher/LICENSE +sha256 e54f1a2edadb1d8d3a482bcd0712acad2947337ae35e40ca34b22eb77940863f src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/browserify-des/license +sha256 672eb2c2ad92bee7ef6c894f1431a66d7e8fdd7965cfdca5aa4fc206951a7c9c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/browserify-rsa/LICENSE +sha256 a0e06d86a5a17341fa6134ee30ef18d73251cf32b8a577cdfd6aad6ad34af61d src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/browserify-sign/LICENSE +sha256 ddd770379e07bf0574dfaa4485be80a23b3248b36d09f33ec79276c09b829daf src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/browserify-zlib/LICENSE +sha256 0e91be39cb38da2972a6e0649dcd4e8a49595996b3ab4b04e72ef9ea71de9079 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/browser-resolve/LICENSE +sha256 fd595a25dd3c90492a8cc3b888aa9ae47630173181efed17f71b4c689d99d0ec src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/browser-stdout/LICENSE +sha256 14275f5c8139d02054c5259d52a88ccbba662a86af18c30f071c8d082dc6004c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/buffer-from/LICENSE +sha256 06bafa45fdad2579ba0e43b0c9b2c6290287c99c4203c300254a462b38a307f6 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/buffer/LICENSE +sha256 51ad9defd71911dbe413daf277bcb2e1077743f5ee5ae48d0a3b90a5b7486f55 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/buffer-xor/LICENSE +sha256 f057f36739d53d228a746de4440c1e0c644ecde06d6beab45337d39c9d12a393 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/builtin-status-codes/license +sha256 e3b44af066615de2ea48d18d852d0762f18c0b2efcea714fa48a6f729d405b85 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/bytes/LICENSE +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/callsites/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/camelcase-keys/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/camelcase/license +sha256 b181da80336ff9dd1043fc8be1a764d7382363433319aa872e4d2cb5ce2a3066 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/chai/LICENSE +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/chalk/license +sha256 7df1d6cf5b4112cbe277a84269e02ae631603a9a3a21b8328a34c30b8c3dd1ab src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/chardet/LICENSE +sha256 e5aee0714b6ecc416454b968d1017570ef609f20d8722ab84b07acd550b78198 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/check-error/LICENSE +sha256 db9ba183d4cbfbaf6c27db2effddbb84b46340c33ed32a066bc0b144a3ea1298 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/chokidar/LICENSE +sha256 2c46f1325bd3822a33c1e2c1e49c18d13127ac00f9c8b3b79196c7a126f73cd9 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/chokidar/node_modules/glob-parent/LICENSE +sha256 cf93ad78cfd5f3523248675aeb2a46e003367596883d4fa26a0c38d553ab0f61 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/cipher-base/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/cli-cursor/license +sha256 2dc0465729366c3a7890dfa9e972a1ba7048a26c02116fb8b419a6a1ac110149 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/cliui/LICENSE.txt +sha256 33fa5470b2195e410b075a32516b6ad27784b8a8ff74ae90cfd60c14b76e6644 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/cli-width/LICENSE +sha256 3fb0857ef0133928cf72c88dfc464e931486e88778961eedec25585e2321507f src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/clone/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/code-point-at/license +sha256 693866fc419c6f61c8570438ec00659d156ec2b4d4a4d04091711f5f11a365d4 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/color-convert/LICENSE +sha256 7357445bac398c76c0aef75a587009fe406d40de6a79789eb5b7ecbbad317ef2 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/color-name/LICENSE +sha256 77ffe84006509949525fd57df06f4a6a80ad862c5314b66ab5bb6ac4cee6280b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/colors/LICENSE +sha256 1fa6ee8bb95a81ae3d73a5bd074a3ac380ffec13697051063ca1a601921b91db src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/combine-source-map/LICENSE +sha256 1fa6ee8bb95a81ae3d73a5bd074a3ac380ffec13697051063ca1a601921b91db src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/combine-source-map/node_modules/convert-source-map/LICENSE +sha256 6cb0631f71c7749763fd3dd1d5bee52dd1070ec17f2edc1710079ad070bd2fbd src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/combine-source-map/node_modules/source-map/LICENSE +sha256 04512a63dce4d2d506ad612dc0bd7681ccf6e3655f7b6eaef7dfac8323d1ec0b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/commander/LICENSE +sha256 d682394bef4a34d279b0237feecf145abadd6ec1e41cbb094592b8cc9fc2f34b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/compare-versions/LICENSE +sha256 0f0b408b8b871d983e767528c6dc51e0ad7efaa022890c449fe2b2e1ee24dbb7 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/component-emitter/LICENSE +sha256 435a6722c786b0a56fbe7387028f1d9d3f3a2d0fb615bb8fee118727c3f59b7b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/concat-map/LICENSE +sha256 96b29c9aaa611a05349b362d48c2ffce0966fe408401a2d1a157be312c035b5f src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/concat-stream/LICENSE +sha256 ec62dc96da0099b87f4511736c87309335527fb7031639493e06c95728dc8c54 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/concat-stream/node_modules/readable-stream/LICENSE +sha256 c7cc929b57080f4b9d0c6cf57669f0463fc5b39906344dfc8d3bc43426b30eac src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/concat-stream/node_modules/safe-buffer/LICENSE +sha256 11f2aafb37d06b3ee5bdaf06e9811141d0da05263c316f3d627f45c20d43261b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/concat-stream/node_modules/string_decoder/LICENSE +sha256 9913ff70f23424d49fda2b05902cfb72f17ae1e48aaf898c349a284289a74751 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/connect/LICENSE +sha256 98c970de440dcfc77471610aec2377c9d9b0db2b3be6d1add524a586e1d7f422 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/connect/node_modules/debug/LICENSE +sha256 6652830c2607c722b66f1b57de15877ab8fc5dca406cc5b335afeb365d0f32c1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/connect/node_modules/ms/license.md +sha256 257aed98914108e91a337912727b6a802eef218248507f74b76faffaff517a38 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/content-type/LICENSE +sha256 1fa6ee8bb95a81ae3d73a5bd074a3ac380ffec13697051063ca1a601921b91db src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/convert-source-map/LICENSE +sha256 c7cc929b57080f4b9d0c6cf57669f0463fc5b39906344dfc8d3bc43426b30eac src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/convert-source-map/node_modules/safe-buffer/LICENSE +sha256 c02110eedc16c7114f1a9bdc026c65626ce1d9c7e27fd51a8e0feee8a48a6858 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/cookie/LICENSE +sha256 722e1193901ad1ed4460753dded483d68ca2ad0528c67f86f76abc46b9aa25f5 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/core-js/LICENSE +sha256 33b734d60042d0fe0c92dd1fc1e874193a1c899ec3e276a2eb935d2d0bf5b710 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/core-util-is/LICENSE +sha256 d4ad87ad0bb7d57c17ae73b46e064243b972edc3036c38c222172c9600a20b56 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/create-ecdh/LICENSE +sha256 cf93ad78cfd5f3523248675aeb2a46e003367596883d4fa26a0c38d553ab0f61 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/create-hash/LICENSE +sha256 cf93ad78cfd5f3523248675aeb2a46e003367596883d4fa26a0c38d553ab0f61 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/create-hmac/LICENSE +sha256 aaa78451b6fecd1b9c4594c796c133c0e90cad100372ff8bc6de615e9ef9adf1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/cross-spawn/LICENSE +sha256 6134c69bc22c8289252e70de3af20bd67071233459055be74d83acfcc4865e7e src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/crypto-browserify/LICENSE +sha256 0b61ac8491c66669491fdb328200203822b91d2a0461f5cd898fe0944ea97e41 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/currently-unhandled/license +sha256 53ecc31e1632c07980cb0c97dcaf3d1d20323d21194b92150987a4fecf517b3c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/custom-event/LICENSE +sha256 9660914267128b5f96a102bd7f6268c249110a39cb7c4bb7f536d856445d739c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/date-format/LICENSE +sha256 e38ad5868b1e32ab44c63da6e58b8b58604d8d1dd90c40d171f2feaa756b088b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/dateformat/LICENSE +sha256 98c970de440dcfc77471610aec2377c9d9b0db2b3be6d1add524a586e1d7f422 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/debug/LICENSE +sha256 5f9e03a50e10f262f7bd356fe323b12f461f14dae6762611285a0d7479340ae7 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/debuglog/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/decamelize/license +sha256 e5aee0714b6ecc416454b968d1017570ef609f20d8722ab84b07acd550b78198 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/deep-eql/LICENSE +sha256 f2042f3634c4136d06b5139c9c6aefb81a3a462b514548bc1845953233dfba98 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/deep-is/LICENSE +sha256 d7c67af00ef4ecd9bee06e010bb1fcd8d5f0ecb02fa1b73fe3ef030a88800d4b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/default-require-extensions/license +sha256 b568428993e6acff80c1214dcc4f7195241772d5b3d23d92ee6bf5406a102896 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/defaults/LICENSE +sha256 00d402c2bbe7c67369bd01ce2c16b8ed46ccc949a1ee2d6bb8f9606afa8c7434 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/define-properties/LICENSE +sha256 bd47ce7b88c7759630d1e2b9fcfa170a0f1fde522be09e13fb1581a79d090400 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/depd/LICENSE +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/dezalgo/LICENSE +sha256 db6109f994692150ed82cd904bb053c73b97b23678bf52047f747bfec11e1934 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/diffie-hellman/LICENSE +sha256 152f0fb43e953fcf5c56c5bfa4c834bb96b1603e4026319c613dd3e734f305cf src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/diff/LICENSE +sha256 58d1e17ffe5109a7ae296caafcadfdbe6a7d176f0bc4ab01e12a689b0499d8bd src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/diff-match-patch/LICENSE +sha256 545278991ee5f1fb4372f913ec44837cff9395175140f8f21118074330a659cb src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/di/LICENSE +sha256 5c272e206669b79ee20fa89fa8fa888d5b56186f16c55a5614753ad3412e2ae9 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/doctrine/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/doctrine/LICENSE.closure-compiler +sha256 0e74697a68cebdcd61502c30fe80ab7f9e341d995dcd452023654d57133534b1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/doctrine/LICENSE.esprima +sha256 8ffaa1b117e1c280023c8ef997a84a461133b972c8bade4579050e3e41835902 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/domain-browser/LICENSE.md +sha256 965ef284f7f4c176842ec2e87fa13e79feed777d56d7a21a5a3b38f1bb6dc288 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ee-first/LICENSE +sha256 483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/emoji-regex/LICENSE-MIT.txt +sha256 7585ea7bba616ccbbe43cb54ecb67956688c3c5641bb84f3099a652a73193afe src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/encodeurl/LICENSE +sha256 3fe8d55a98dbf260eace67c00cf9bc53edb46234e840098a0b93df3096b97fb6 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/end-of-stream/LICENSE +sha256 bb996a5665c8e18041251e833e52b590f0da5050c1878aa3e3a47f71bb16fa6d src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/engine.io-client/LICENSE +sha256 98c970de440dcfc77471610aec2377c9d9b0db2b3be6d1add524a586e1d7f422 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/engine.io-client/node_modules/debug/LICENSE +sha256 6652830c2607c722b66f1b57de15877ab8fc5dca406cc5b335afeb365d0f32c1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/engine.io-client/node_modules/ms/license.md +sha256 8e0349070612cb59fc604588974e193d8363f0a08752caf31d3f270a609d346a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/engine.io/LICENSE +sha256 98c970de440dcfc77471610aec2377c9d9b0db2b3be6d1add524a586e1d7f422 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/engine.io/node_modules/debug/LICENSE +sha256 6652830c2607c722b66f1b57de15877ab8fc5dca406cc5b335afeb365d0f32c1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/engine.io/node_modules/ms/license.md +sha256 2a190271977c2ad47c85a9e08cc05d078fe9293643061d466d2ae89ce8e5c2f1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/engine.io-parser/LICENSE +sha256 435a6722c786b0a56fbe7387028f1d9d3f3a2d0fb615bb8fee118727c3f59b7b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ent/LICENSE +sha256 92b07a2e5b0e051d37dde85042c736d6d551cfcbc0983f39d7ef903b3986bbc1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/error-ex/LICENSE +sha256 c2c31e096c312163e9a7a908a5209f335eb4c3381d6c404dd1e1b91fe65707fc src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/es6-object-assign/LICENSE +sha256 da852e222c72bc04a0a9046aac35f2e5d33775a8ea9f1d8f59b1cfd195ef9bb0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/es6-promise/LICENSE +sha256 00d402c2bbe7c67369bd01ce2c16b8ed46ccc949a1ee2d6bb8f9606afa8c7434 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/es-abstract/LICENSE +sha256 255aa557a1f55224ce522f311629c0bf20854740a67955cefd798fbd1d3d1ded src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/escape-html/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/escape-string-regexp/license +sha256 0e74697a68cebdcd61502c30fe80ab7f9e341d995dcd452023654d57133534b1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/escodegen/LICENSE.BSD +sha256 94bcb9959136723aa4fb36e1a6c4d5c662a2369978cfae344dabfb83ae619e79 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/escodegen/node_modules/esprima/LICENSE.BSD +sha256 db83f2ede67f36cfab1ea0721ea2ee97515863e9a65346881f305e430451cc91 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/eslint/LICENSE +sha256 b67ae8fe5f32d0e6164655de53075cba04bb69c23e7d11efcfed6a0fa265ef64 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/eslint-plugin-mocha/LICENSE +sha256 541c415066b6139f0fb6ad55f633abbc62f0ba6b54543f1ff00c762e76a90239 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/eslint-plugin-rulesdir/LICENSE.md +sha256 d3a724e2ed749f172ff70b62a1d0631b7d4b0ea273782365a3464d4e2d6b6dbd src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/eslint-scope/LICENSE +sha256 fcf6eabf68ca96988a6b506b4fdc6cc32535d80eb2e11c79724af5ac6f50262b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/eslint-utils/LICENSE +sha256 d8bf34ff6d190640a01e7704ad78253fc181bc128949d71273fbbaa12f33c0b4 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/eslint-visitor-keys/LICENSE +sha256 6273faa0d14a54972c0341a724010eb8cd928ee486745a9eea8cf80680ba5098 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/espree/LICENSE +sha256 94bcb9959136723aa4fb36e1a6c4d5c662a2369978cfae344dabfb83ae619e79 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/esprima/LICENSE.BSD +sha256 ac68116ae73740de4190892f334992e449a124600924ec761e64319d3aac9e6e src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/esquery/license.txt +sha256 c61652db3d2808f667b48af0a358f0d85fd07ad4a0d0b1a50882dec3b764c522 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/es-to-primitive/LICENSE +sha256 0e74697a68cebdcd61502c30fe80ab7f9e341d995dcd452023654d57133534b1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/estraverse/LICENSE.BSD +sha256 0e74697a68cebdcd61502c30fe80ab7f9e341d995dcd452023654d57133534b1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/esutils/LICENSE.BSD +sha256 3aecc12b1cb28832b5f65ab64291de96568c3f236a74d646281b4491f7bcadbf src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/eventemitter3/LICENSE +sha256 631987b7616a325a5b97566c232418481ddf7dbb5ecadefb991e791876cc2599 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/events/LICENSE +sha256 cf93ad78cfd5f3523248675aeb2a46e003367596883d4fa26a0c38d553ab0f61 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/evp_bytestokey/LICENSE +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/execa/license +sha256 97af7428f93afbab9bf79cd09254da1357161794f4255eb1b4599f04dd2d2e7c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/extend/LICENSE +sha256 9580cc528a1c38d1560a9d36e34404fe1ea9d8e6f44c596dac2a3104ef63cdab src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/extend-shallow/LICENSE +sha256 e33b7bc13a0e5ea9ed6718e12e99a5b0b60276162f0195aa7f342397f4b0155d src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/external-editor/LICENSE +sha256 77b2de947c65f3062fb347118ca198ca50898ead84a8509d8153fa65741f029b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/extract-zip/LICENSE +sha256 98c970de440dcfc77471610aec2377c9d9b0db2b3be6d1add524a586e1d7f422 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/extract-zip/node_modules/debug/LICENSE +sha256 6652830c2607c722b66f1b57de15877ab8fc5dca406cc5b335afeb365d0f32c1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/extract-zip/node_modules/ms/license.md +sha256 7bf9b2de73a6b356761c948d0e9eeb4be6c1270bd04c79cd489c1e400ffdfc1a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/fast-deep-equal/LICENSE +sha256 435a6722c786b0a56fbe7387028f1d9d3f3a2d0fb615bb8fee118727c3f59b7b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/fast-json-stable-stringify/LICENSE +sha256 942a98cb8846a6354266193f173c1354615827fbb7d67f68399599dff12c4d6a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/fast-levenshtein/LICENSE.md +sha256 176d95320d565cb034d8323797b6cd6160238f625453687f98aad2085c46c3b3 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/fd-slicer/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/figures/license +sha256 c8c8324aff32c44f9e501aac5b3b97540c26af7d6dd6af8bce5e34300596e27d src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/file-entry-cache/LICENSE +sha256 99513010b6a19894e01864cba86bf98291bef8251a302d90ab1a572d91ebacc8 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/fileset/LICENSE-MIT +sha256 35bdd8a44339719441900fb50fbefc5e2dca1ca662cbaed7a687de842c8b70f2 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/fill-range/LICENSE +sha256 24973d5320410e565ec92f18f73f12af7d97c634d414ba170d119fe3f98904c8 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/finalhandler/LICENSE +sha256 98c970de440dcfc77471610aec2377c9d9b0db2b3be6d1add524a586e1d7f422 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/finalhandler/node_modules/debug/LICENSE +sha256 6652830c2607c722b66f1b57de15877ab8fc5dca406cc5b335afeb365d0f32c1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/finalhandler/node_modules/ms/license.md +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/find-up/license +sha256 c8c8324aff32c44f9e501aac5b3b97540c26af7d6dd6af8bce5e34300596e27d src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/flat-cache/LICENSE +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/flat-cache/node_modules/rimraf/LICENSE +sha256 95a61f61553614db5421a2cefb17c22ff6b2b4b2206f5bc8913d04f72a22b033 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/flat/LICENSE +sha256 5097efeab30293dd7e26d6960b6b94f1aeca958d22f1eca3535c482a891e95a9 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/flatted/LICENSE +sha256 bfa8a54bb952ccda79f0f1889721d108f5b605babbb2b8a3705ffb52f4132eb7 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/follow-redirects/LICENSE +sha256 98c970de440dcfc77471610aec2377c9d9b0db2b3be6d1add524a586e1d7f422 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/follow-redirects/node_modules/debug/LICENSE +sha256 99de4c30f4643c00d4895d9c6ade0af4ec43d301449c191f5fbe41b53bb6a13a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/fsevents/LICENSE +sha256 1e76029602ae9b21cc4e612db2496d92febed882ba13ba745f8b3309e85f9d39 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/fs-extra/LICENSE +sha256 8465b04b67f473341171b5c9c8b2c741a4a395b3f6ed58339b3a4f4db3db7472 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/fs.realpath/LICENSE +sha256 e67aed7df22dc8031e4fcf5338fe91cb33e3817e5c58a99a2a2802eea9069791 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/functional-red-black-tree/LICENSE +sha256 773e131a7684726005a7e4688a80b4620033bc08499bc1404dd1a1eb3bca725e src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/function-bind/LICENSE +sha256 902dbb4154679fb2b8d7c33878183f45b268d01eae5e5033dddaa8852d45f213 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/get-caller-file/LICENSE.md +sha256 e5aee0714b6ecc416454b968d1017570ef609f20d8722ab84b07acd550b78198 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/get-func-name/LICENSE +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/get-stream/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/globals/license +sha256 6236fa0b88a4a0cce3dda0367979491b2052b3c8d6b1c10b3668de083e86a7f0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/glob/LICENSE +sha256 a2a19c04f527f7582fb2e58887f0a90f403732fc6accd7322287f0f5949b489e src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/glob-parent/LICENSE +sha256 3672fb6ef1c214578dfee689643516c2685f61ab08d130517ca8ea24f383a840 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/glob-parent/node_modules/is-glob/LICENSE +sha256 2fc5460f1526810979054ecd18cd01349b57f38ea56d1e920afdea34d104540c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/graceful-fs/LICENSE +sha256 8a48a335d7dcc06e3da2bea89220cfe978394b1bc84a3e628e60bc4864917915 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/handlebars/LICENSE +sha256 dc1fcc41f783463ed272ada875a7d3d1baf6c6279e5efada2c4ef2ca72db39e1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/has-binary2/LICENSE +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/has-flag/license +sha256 898f204abbbbde58c6230a31842c59aeb8040fbcffa924db28e6d0b1d7631a3a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/hash-base/LICENSE +sha256 4fe5fd7b3318def0b74f8bf8c9276403f01da628fa8888822661519d80f237d3 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/has/LICENSE-MIT +sha256 206c1adcf206dc0031b11232f5b054ec5f1662407ab1ca415247921cab2068ab src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/has-symbols/LICENSE +sha256 483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/he/LICENSE-MIT.txt +sha256 c1476ec53119cd4c8370f91f5152ac76312a29b4fae2d49b5e0e0970fe0fa5ee src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/hosted-git-info/LICENSE +sha256 dcb94ff9b1e037a847bc20589dc81a1066d041fd4c16deb18b0fa968c66cf395 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/http-errors/LICENSE +sha256 5ffe28e7ade7d8f10d85d5337a73fd793dac5c462fb9a28fbf8c5046c7fbca3b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/http-errors/node_modules/inherits/LICENSE +sha256 589850dfc0a1d39a97c592d618d5772f84aec2b11c6898e020acb985299f3bab src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/http-proxy/LICENSE +sha256 ff151c00207c908581639851dd8504ce4255be0650b2b236edec2aa90342b0cd src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/https-browserify/LICENSE +sha256 98c970de440dcfc77471610aec2377c9d9b0db2b3be6d1add524a586e1d7f422 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/https-proxy-agent/node_modules/debug/LICENSE +sha256 ac779f7314c74f232ef847ea86e714abe25cf6eeb5cc97b69451b74e2af6492d src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/iconv-lite/LICENSE +sha256 18d45466ba3253deae04667e267a91ea8de8548f18c1125264d1c9db28194cc1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ieee754/LICENSE +sha256 9c94db23dc4b1e9aaee5d195668b916afc71efed54af226b66cf0ccc4389c1c0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ignore/LICENSE-MIT +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/import-fresh/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/indent-string/license +sha256 05dc4d785ac3a488676d3ed10e901b75ad89dafcc63f8e66610fd4a39cc5c7e8 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/inflight/LICENSE +sha256 5ffe28e7ade7d8f10d85d5337a73fd793dac5c462fb9a28fbf8c5046c7fbca3b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/inherits/LICENSE +sha256 1fa6ee8bb95a81ae3d73a5bd074a3ac380ffec13697051063ca1a601921b91db src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/inline-source-map/LICENSE +sha256 6cb0631f71c7749763fd3dd1d5bee52dd1070ec17f2edc1710079ad070bd2fbd src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/inline-source-map/node_modules/source-map/LICENSE +sha256 e6c3f1bc47f97cdeef953f6c109b6392be0d059ae94659faf550e61b7a75ebc7 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/inquirer/LICENSE +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/inquirer/node_modules/ansi-regex/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/inquirer/node_modules/strip-ansi/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/invert-kv/license +sha256 dc0fe5a22d9336f345ee984f9bf56f11f22877a3aa5fd16a1db9a8ca0e23a5d1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-arguments/LICENSE +sha256 92b07a2e5b0e051d37dde85042c736d6d551cfcbc0983f39d7ef903b3986bbc1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-arrayish/LICENSE +sha256 628a0b082ba17df4f4bcb7946d41988891d2b410b25927b995c2f632a0829676 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/isbinaryfile/LICENSE.txt +sha256 85fe65eefab89e2a683232b96e6f689279821a0bd3b351e9ab6a6ebd19dea567 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-binary-path/license +sha256 c7cc929b57080f4b9d0c6cf57669f0463fc5b39906344dfc8d3bc43426b30eac src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-buffer/LICENSE +sha256 c61652db3d2808f667b48af0a358f0d85fd07ad4a0d0b1a50882dec3b764c522 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-callable/LICENSE +sha256 c61652db3d2808f667b48af0a358f0d85fd07ad4a0d0b1a50882dec3b764c522 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-date-object/LICENSE +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/isexe/LICENSE +sha256 4922620a5741e9d1bb43dde132021a982ae7c545eed1c6e00b555d6fe978005f src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-extendable/LICENSE +sha256 73b5283588baa142c5baaef5f56d3e8fdea7a30b214e8c5737e87640f882453a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-extglob/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-finite/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-fullwidth-code-point/license +sha256 dc0fe5a22d9336f345ee984f9bf56f11f22877a3aa5fd16a1db9a8ca0e23a5d1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-generator-function/LICENSE +sha256 4cd903859549d4b20b571041f96dfae1136ed079c476126268f9d7cc1b611150 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-glob/LICENSE +sha256 dc0fe5a22d9336f345ee984f9bf56f11f22877a3aa5fd16a1db9a8ca0e23a5d1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-nan/LICENSE +sha256 35bdd8a44339719441900fb50fbefc5e2dca1ca662cbaed7a687de842c8b70f2 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-number/LICENSE +sha256 0ead7e8cd8b0bc66a981ee69acaf1297ffa838cfce1b156a039bb24f997c0a27 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/isobject/LICENSE +sha256 4cd903859549d4b20b571041f96dfae1136ed079c476126268f9d7cc1b611150 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-plain-object/LICENSE +sha256 44191656d296391e0ec97e32f5385f0d02b6f2992694082d22ea04ba0f66f9e4 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-promise/LICENSE +sha256 dc0fe5a22d9336f345ee984f9bf56f11f22877a3aa5fd16a1db9a8ca0e23a5d1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-regex/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-stream/license +sha256 c61652db3d2808f667b48af0a358f0d85fd07ad4a0d0b1a50882dec3b764c522 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-symbol/LICENSE +sha256 b661867c1d66a1b71ee3a6109159874334cd5c182a80d1bcc7353b5a4c6823c6 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul-api/LICENSE +sha256 435a6722c786b0a56fbe7387028f1d9d3f3a2d0fb615bb8fee118727c3f59b7b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul-diff/node_modules/minimist/LICENSE +sha256 e09f9b52c6ce5c17ba8103cd0cbf446c33b5448b0c1d01d711b36a1f15a501ba src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul-lib-coverage/LICENSE +sha256 e09f9b52c6ce5c17ba8103cd0cbf446c33b5448b0c1d01d711b36a1f15a501ba src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul-lib-hook/LICENSE +sha256 e09f9b52c6ce5c17ba8103cd0cbf446c33b5448b0c1d01d711b36a1f15a501ba src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul-lib-instrument/LICENSE +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul-lib-instrument/node_modules/semver/LICENSE +sha256 e09f9b52c6ce5c17ba8103cd0cbf446c33b5448b0c1d01d711b36a1f15a501ba src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul-lib-report/LICENSE +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul-lib-report/node_modules/supports-color/license +sha256 b661867c1d66a1b71ee3a6109159874334cd5c182a80d1bcc7353b5a4c6823c6 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul-lib-source-maps/LICENSE +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul-lib-source-maps/node_modules/rimraf/LICENSE +sha256 d38a14ec66572a5588bba501f05eef0874e3ce929f0ddcb749c7557f4fdcb905 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul/LICENSE +sha256 4d3083ec594b158fd6adfdc6c9423ffe0746d2d93cebfb98f1a35b69da78051e src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul/node_modules/async/LICENSE +sha256 0e74697a68cebdcd61502c30fe80ab7f9e341d995dcd452023654d57133534b1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul/node_modules/escodegen/LICENSE.BSD +sha256 c9d85a24226fa4dd8c0756961de362cee34f6e9b1d19938bd480239950ad9a93 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul/node_modules/escodegen/LICENSE.source-map +sha256 4193a099a2c3ba864dd6b94f37e2fd80757d50796999d65adbca6a8c0f3a8e0a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul/node_modules/esprima/LICENSE.BSD +sha256 0e74697a68cebdcd61502c30fe80ab7f9e341d995dcd452023654d57133534b1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul/node_modules/estraverse/LICENSE.BSD +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul/node_modules/glob/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul/node_modules/has-flag/license +sha256 6cb0631f71c7749763fd3dd1d5bee52dd1070ec17f2edc1710079ad070bd2fbd src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul/node_modules/source-map/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul/node_modules/supports-color/license +sha256 e09f9b52c6ce5c17ba8103cd0cbf446c33b5448b0c1d01d711b36a1f15a501ba src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/istanbul-reports/LICENSE +sha256 f481fe414a74f72c6b37890ad65e1d0b7c3f51be175b6d3e992fdcdb66882bd4 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/is-utf8/LICENSE +sha256 483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/jsesc/LICENSE-MIT.txt +sha256 a9801fb52ba22ef808682a094da8a7a480584b7ed0dfd0d888ab543616335031 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/jsonfile/LICENSE +sha256 6cf2891dd0e66460f7d2ed83e1e3fe4b4b4c1a8c1f1f96c222a3466ad12ff197 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/json-parse-better-errors/LICENSE.md +sha256 7bf9b2de73a6b356761c948d0e9eeb4be6c1270bd04c79cd489c1e400ffdfc1a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/json-schema-traverse/LICENSE +sha256 435a6722c786b0a56fbe7387028f1d9d3f3a2d0fb615bb8fee118727c3f59b7b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/json-stable-stringify-without-jsonify/LICENSE +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/json-stringify-safe/LICENSE +sha256 2213d91c606205c71eb051a199478cdc2adde945893404d7f1421436dd6d5cc1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/js-tokens/LICENSE +sha256 a07bc24468b9654ce76a547d47a2db282d07733b715db4c73a98bd63961f9550 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/js-yaml/LICENSE +sha256 94bcb9959136723aa4fb36e1a6c4d5c662a2369978cfae344dabfb83ae619e79 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/js-yaml/node_modules/esprima/LICENSE.BSD +sha256 e3d4ed2aa50e7583730b1531034331ba9093c8bef7414234c7c9306db3858913 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-chai/LICENSE +sha256 296b9a3c5e4eb7b79a6f1dca9a27ee31e48fe5c9d48a32ec31ac924b65ff287c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-chrome-launcher/LICENSE +sha256 be13520ed43fa818f7bbe9d3a2beccaf1931421d818d35b42bdae3c127241ed3 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-coverage-istanbul-instrumenter/LICENSE +sha256 55c6f6d52a0b60393333dd4e9d385957c7e784517daa9cfbf5b09ec812811eec src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-coverage-istanbul-reporter/LICENSE +sha256 296b9a3c5e4eb7b79a6f1dca9a27ee31e48fe5c9d48a32ec31ac924b65ff287c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-coverage/LICENSE +sha256 d38a14ec66572a5588bba501f05eef0874e3ce929f0ddcb749c7557f4fdcb905 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-coverage/LICENSE-istanbul +sha256 6cb0631f71c7749763fd3dd1d5bee52dd1070ec17f2edc1710079ad070bd2fbd src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-coverage/node_modules/source-map/LICENSE +sha256 6e4e577107740b24ebd73cb813be506861d706129e502ca7160683a5cea4c129 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma/LICENSE +sha256 296b9a3c5e4eb7b79a6f1dca9a27ee31e48fe5c9d48a32ec31ac924b65ff287c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-mocha/LICENSE +sha256 435a6722c786b0a56fbe7387028f1d9d3f3a2d0fb615bb8fee118727c3f59b7b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-mocha/node_modules/minimist/LICENSE +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma/node_modules/rimraf/LICENSE +sha256 2b3adc1e55676b9443f76bdb17e42371de98a4be6abd3ae6e5f3590f6f3e4f6f src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-sourcemap-loader/LICENSE +sha256 3c50a3d2df1468f5e7b723d4c931c1c7ba6775740aa1ef9fa49586ddb7b168fd src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-typescript/LICENSE +sha256 7cdb44aabddbdd78998119d68a39c87424119b663945c79891fc1b022301824c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-typescript/node_modules/acorn/LICENSE +sha256 d9fed24f132985934fca621c4dc1dfb53e03377a24d0568d424383d7eaa9c0ac src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-typescript/node_modules/async/LICENSE +sha256 6cb0631f71c7749763fd3dd1d5bee52dd1070ec17f2edc1710079ad070bd2fbd src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-typescript/node_modules/source-map/LICENSE +sha256 162413c61e0982abe89a06bf7a02ec760dc49a7364d838bd9f01daebb5b95954 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-typescript/node_modules/tmp/LICENSE +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/karma-typescript/node_modules/tmp/node_modules/rimraf/LICENSE +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/lcid/license +sha256 b9eb082c39fe245e38793699074c394c43a722c51fce031c3c165cb92a31035c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/levn/LICENSE +sha256 150d7707d4532d57bdb5718637ff62fff1f075921c5ffaa084df27f900bfea76 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/license-checker/bin/license-checker +sha256 455629980585dfdadbdcbaf846659b65da3dd092ac9bfd10b07717a0e2f84ef5 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/license-checker/lib/license-files.js +sha256 37932d5f93a7f9e762346358ae427e703d69fdaae6e7cd67158b35eea91c9eec src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/license-checker/lib/license.js +sha256 adeb5a7f7d027ec14c3698be7a0f248978516ab39ccec4fb70689ba4753cdd67 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/license-checker/LICENSE +sha256 98c970de440dcfc77471610aec2377c9d9b0db2b3be6d1add524a586e1d7f422 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/license-checker/node_modules/debug/LICENSE +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/license-checker/node_modules/nopt/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/load-json-file/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/load-json-file/node_modules/pify/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/load-json-file/node_modules/strip-bom/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/locate-path/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/locate-path/node_modules/path-exists/license +sha256 d778ae0088806b771424967d88efb68f3adb3705c31c3b7c0a052fe2eebd5268 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/lodash-deep/LICENSE +sha256 f71e8ed126b46346494aad5486874cd8f0aafe95092ed67d2e3cb6110f939abc src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/lodash/LICENSE +sha256 90df9e2220f682e1f77e24b1c0f72d2de18b818096c957a65698e74c41a4826f src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/lodash.memoize/LICENSE.txt +sha256 66da8b277e527c270de6abc57727c58032267d161a81dbac02c3eed45fd13366 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/log4js/LICENSE +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/log-symbols/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/loud-rejection/license +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/lru-cache/LICENSE +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/make-dir/license +sha256 3d3fba5375126ff321d3a51938899d744b1189896618e0f2d088d9e1ebf2822a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/map-age-cleaner/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/map-obj/license +sha256 898f204abbbbde58c6230a31842c59aeb8040fbcffa924db28e6d0b1d7631a3a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/md5.js/LICENSE +sha256 74d8054d56d522bdaa340d3d71130cb204997d523a5292c85ac1264dd77c8d06 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/media-typer/LICENSE +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mem/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mem/node_modules/mimic-fn/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/meow/license +sha256 435a6722c786b0a56fbe7387028f1d9d3f3a2d0fb615bb8fee118727c3f59b7b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/meow/node_modules/minimist/LICENSE +sha256 965ef284f7f4c176842ec2e87fa13e79feed777d56d7a21a5a3b38f1bb6dc288 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mime-db/LICENSE +sha256 8f2658c03422c408b2b2ce4d151decc3b1a6fd3d86e5ca9433777bccdcdf75a2 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mime/LICENSE +sha256 71f83c4c0621102a56d9853812777b85751bce7e9726f686f5b056c1f8a4b0e6 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mime-types/LICENSE +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mimic-fn/license +sha256 136fee1129ea96ce18b41c26a72f5d4ba196ee41bfd73b55d0b8509cdda148e9 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/minimalistic-assert/LICENSE +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/minimatch/LICENSE +sha256 435a6722c786b0a56fbe7387028f1d9d3f3a2d0fb615bb8fee118727c3f59b7b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/minimist/LICENSE +sha256 05991c2e8f070b69ec5b656c2c12fd07cd0153dd157d39b050b82af59b319a01 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mkdirp/LICENSE +sha256 bd5663836feb58ffb7d0e6b9e62010f4c3399f2bb0a4cf6514a15d597bbdd577 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mocha/LICENSE +sha256 94e1923e52409cfd50e97988d9772c0de15f65700097e3227fec367a39e82b94 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mocha/node_modules/ansi-colors/LICENSE +sha256 98c970de440dcfc77471610aec2377c9d9b0db2b3be6d1add524a586e1d7f422 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mocha/node_modules/debug/LICENSE +sha256 152f0fb43e953fcf5c56c5bfa4c834bb96b1603e4026319c613dd3e734f305cf src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mocha/node_modules/diff/LICENSE +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mocha/node_modules/find-up/license +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mocha/node_modules/glob/LICENSE +sha256 6652830c2607c722b66f1b57de15877ab8fc5dca406cc5b335afeb365d0f32c1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mocha/node_modules/ms/license.md +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mocha/node_modules/supports-color/license +sha256 6652830c2607c722b66f1b57de15877ab8fc5dca406cc5b335afeb365d0f32c1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ms/license.md +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/mute-stream/LICENSE +sha256 553d4d20029a24e315b428a1a54a9e109eaa340f2e958a4f50a92362c2c4070b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/negotiator/LICENSE +sha256 811238ba7d85f6fe6b820703a32f92705bcf77bc352ddc3476783491c64a129a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/neo-async/LICENSE +sha256 bd220c219b05e6c22b7c23613ca926f60932d07c9fe141dd6e04b80dbc4b4e52 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/nice-try/LICENSE +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/nopt/LICENSE +sha256 d16b2b8c511d9f2bef8bbf49f0e2a94f032b6b8d181f71c83912c34c116a02e1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/normalize-package-data/LICENSE +sha256 60acd7711e6c138e6041836e32d922705254cc1568a30fdf16aa8f59bb87aeaa src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/normalize-package-data/node_modules/resolve/LICENSE +sha256 e70ff771504ba41f2be55de812a017ff46433d7a250c862e38fc419159e44500 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/normalize-path/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/npm-run-path/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/number-is-nan/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/object-assign/license +sha256 a596744eec6b05682ed972bf93937668bbc8da2caed93fbf6510389de019b5c0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/object.assign/LICENSE +sha256 c61652db3d2808f667b48af0a358f0d85fd07ad4a0d0b1a50882dec3b764c522 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/object.entries/LICENSE +sha256 c61652db3d2808f667b48af0a358f0d85fd07ad4a0d0b1a50882dec3b764c522 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/object.getownpropertydescriptors/LICENSE +sha256 435a6722c786b0a56fbe7387028f1d9d3f3a2d0fb615bb8fee118727c3f59b7b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/object-inspect/LICENSE +sha256 dc0fe5a22d9336f345ee984f9bf56f11f22877a3aa5fd16a1db9a8ca0e23a5d1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/object-is/LICENSE +sha256 5640e5cbe2e9f57f6ccfdd8dbfbeadb875495bdbcb69d2666ce3177ccd0942e4 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/object-keys/LICENSE +sha256 30792070c6ec188caccbadc5ee32c3e33fdc5e9044c2f08cb1d01213e5a01084 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/omit-deep-lodash/LICENSE +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/once/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/onetime/license +sha256 8089bcc08845ec143e5761f4a101a65b8c792a0dedbfeeb90a15560c0b77f768 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/on-finished/LICENSE +sha256 05991c2e8f070b69ec5b656c2c12fd07cd0153dd157d39b050b82af59b319a01 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/optimist/LICENSE +sha256 435a6722c786b0a56fbe7387028f1d9d3f3a2d0fb615bb8fee118727c3f59b7b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/optimist/node_modules/wordwrap/LICENSE +sha256 b9eb082c39fe245e38793699074c394c43a722c51fce031c3c165cb92a31035c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/optionator/LICENSE +sha256 d25d1d6d28c35cb6f358e2833e405c4e53fec2fa24d156323ddea5cd438d3407 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/os-browserify/LICENSE +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/osenv/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/os-homedir/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/os-locale/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/os-tmpdir/license +sha256 a6859a1cdfa7b6ebcdd52505c41bb72e747675b3e7fe0b908c0ac09280f0ba93 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/pad/LICENSE +sha256 a04665b3b2de56c66730c1f720f528175739e4104f79073614aa611da1e85539 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/pako/LICENSE +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/parent-module/license +sha256 bc5ed4eed738303bf403ec3b7e0a8e76760ef60664ad050a0ff61db23da77e66 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/parse-asn1/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/parse-json/license +sha256 a41d7b212c43bf90af534ec5d73d24a65e3a8cf17941b6d10e9398346a179698 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/parseqs/LICENSE +sha256 15c35ddf8c82a5fc84e3801db12e279b744605d6ad810e1b52ad09832fc71806 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/parseuri/LICENSE +sha256 11d017c3b9f1ee3f44caf7203035f0461d5b57e0db8ce1bc03a9af34fa7d3f6b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/parseurl/LICENSE +sha256 435a6722c786b0a56fbe7387028f1d9d3f3a2d0fb615bb8fee118727c3f59b7b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/path-browserify/LICENSE +sha256 9c791b69df62b2264d0a846786f82b00bd6943200a0b10eba66a1ba7a7785fc8 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/path-dirname/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/path-exists/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/path-is-absolute/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/path-key/license +sha256 3f4609137f65070541b9214300ea0d640af8192857de0eeb2b03403003d9228a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/path-parse/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/path-type/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/path-type/node_modules/pify/license +sha256 5d45910e7ed82fecc3e29b40a5b3a17ceb609fda19f860aa2ec180d87f4f9d4a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/pathval/LICENSE +sha256 a9667a8bf55e7f20cf894cb47774f94ebd4eb366408aafb980f1f6547bcdc10a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/pbkdf2/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/p-defer/license +sha256 7e64acffcb0d20d33f5a86949ffd4a99ae045b10c7332a9c3a58635876c16880 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/pend/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/p-finally/license +sha256 d0cd141b0c322fded5dfad1d4645bb2fedfc05b7321fe1009469638190d59ef9 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/picomatch/LICENSE +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/pify/license +sha256 6ee0feb1f6ef996ff5a68600f8cf98909cf412d39ef3cdceaefd87d636fa1b7f src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/pinkie/license +sha256 6ee0feb1f6ef996ff5a68600f8cf98909cf412d39ef3cdceaefd87d636fa1b7f src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/pinkie-promise/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/p-is-promise/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/p-limit/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/p-locate/license +sha256 f476f01d5da0d8124355eeb79b42b95d2ad2a88d229dbe02b815628760a8cb43 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/plugin-error/LICENSE +sha256 b9eb082c39fe245e38793699074c394c43a722c51fce031c3c165cb92a31035c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/prelude-ls/LICENSE +sha256 f4bbb78fa28677ad9b9c0a4b7a255e23c0b24e619c873ed66a11d47c16c88114 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/private/LICENSE +sha256 59a400d04c5078579acc27ddd6452c1bdf763f9506e01364700935fbb1a7c91b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/process/LICENSE +sha256 ecdccbcf39024f624ded480c01c0b25458e1eca8f26ecf040933865ce56d9a4f src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/process-nextick-args/license.md +sha256 d7d2a7786de7c7cfd96f920c6f12927d74e1d2a861ca4498bf465c3bc3f4c21c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/progress/LICENSE +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/pseudomap/LICENSE +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/p-try/license +sha256 db6109f994692150ed82cd904bb053c73b97b23678bf52047f747bfec11e1934 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/public-encrypt/LICENSE +sha256 3fe8d55a98dbf260eace67c00cf9bc53edb46234e840098a0b93df3096b97fb6 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/pump/LICENSE +sha256 483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/punycode/LICENSE-MIT.txt +sha256 a1e4522979cd422b42d0b464072eb7d0d218651659f56bf09f8c147384e3f105 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/puppeteer/LICENSE +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/puppeteer/node_modules/rimraf/LICENSE +sha256 3de284c8e6fa7e8437eff6f53695471e0332129a5b42a79361e17b7637de94b3 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/puppeteer/node_modules/ws/LICENSE +sha256 d2f9d2835eb09ccf673e118e4fdc372075437c1787e66c2202912fbe3e5ee9e1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/qs/LICENSE +sha256 cb72d9714ddc21e758d63f423be0caddf909d23ccbb10a2f5201a870818e4f57 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/querystring-es3/License.md +sha256 cb72d9714ddc21e758d63f423be0caddf909d23ccbb10a2f5201a870818e4f57 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/querystring/License.md +sha256 f0606775704212c0b49fb4df8193f7ec190d057551fc857d9f3aaa482b878e29 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ramda/LICENSE.txt +sha256 ddc0dd5947bd2966b9a4cfde098566b011de0acfbe7814536955636ce9e3eced src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/randombytes/LICENSE +sha256 ddc0dd5947bd2966b9a4cfde098566b011de0acfbe7814536955636ce9e3eced src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/randomfill/LICENSE +sha256 f655e6291356ec0de7a8f0e69f294961a2cea86678ec94588be1e6a492e278ab src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/range-parser/LICENSE +sha256 c8e6bca7230689d536a3bd7158f66e9c4f89f95d0748743a0370ac229e9023ad src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/raw-body/LICENSE +sha256 ec62dc96da0099b87f4511736c87309335527fb7031639493e06c95728dc8c54 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/readable-stream/LICENSE +sha256 dffec71d93f273d2af7b54c6c7e7e70b3289c632ec0d7253210ec21ac336d5ac src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/readdirp/LICENSE +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/readdir-scoped-modules/LICENSE +sha256 5ffe28e7ade7d8f10d85d5337a73fd793dac5c462fb9a28fbf8c5046c7fbca3b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/read-installed/LICENSE +sha256 69be713b3d6c33e0dba76c4d23d986d568593abca04ce47d75162af255d6a345 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/read-package-json/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/read-pkg/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/read-pkg-up/license +sha256 6ca87d1dce5b82873603e566fd83dabe8771fb169013337d4a14bb9bbf794687 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/recast/LICENSE +sha256 94bcb9959136723aa4fb36e1a6c4d5c662a2369978cfae344dabfb83ae619e79 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/recast/node_modules/esprima/LICENSE.BSD +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/redent/license +sha256 fcf6eabf68ca96988a6b506b4fdc6cc32535d80eb2e11c79724af5ac6f50262b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/regexpp/LICENSE +sha256 aac9937f6a8dbc3328d2b90ab19691333ec4931634ea808673c897e623a9efc1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/remap-istanbul/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/repeating/license +sha256 a92e52eb1fa7cd746e3827bf01d3a3589bbc8e1e51348b1da042aad165525ad1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/require-directory/LICENSE +sha256 365496ca1f56da40b23c9815fc40fa9005847b2f8f8fd1c1a4929ef25ec8cd1d src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/require-main-filename/LICENSE.txt +sha256 3b2a6a268aa815dec121d614245e03b5c68db1f044d5b525e36db7d5dc7fb9c3 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/requires-port/LICENSE +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/resolve-from/license +sha256 435a6722c786b0a56fbe7387028f1d9d3f3a2d0fb615bb8fee118727c3f59b7b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/resolve/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/restore-cursor/license +sha256 1ce941682a96c7b898ecd125d0f2e22319758ea6f3adbf498a65d649b0f3f7dd src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/rfdc/LICENSE +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/rimraf/LICENSE +sha256 4847d2fd9ed54cc006dd79f5a14fa5dd35eb8274dca511418166e195e277c05b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ripemd160/LICENSE +sha256 cc9426fe569f331f48fd3134b3a03b5bbe3fc7bd25d604be0006bd55a6134cf5 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/rollup/LICENSE.md +sha256 e5c1364118b39fa98b959138ce4aa4d0e68cfbee12d115e69730579fecb1dc1b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/run-async/LICENSE +sha256 81c407ac717813b0e3795402960e04003c7bba8ba59b621624707028531c9ade src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/rxjs/_esm2015/LICENSE.txt +sha256 81c407ac717813b0e3795402960e04003c7bba8ba59b621624707028531c9ade src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/rxjs/_esm5/LICENSE.txt +sha256 81c407ac717813b0e3795402960e04003c7bba8ba59b621624707028531c9ade src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/rxjs/LICENSE.txt +sha256 81c407ac717813b0e3795402960e04003c7bba8ba59b621624707028531c9ade src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/rxjs/src/LICENSE.txt +sha256 c7cc929b57080f4b9d0c6cf57669f0463fc5b39906344dfc8d3bc43426b30eac src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/safe-buffer/LICENSE +sha256 4bc935e71be198c67ddf3c2b5fddb195f6edc182bfc155a96a6db61b44b494b9 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/safer-buffer/LICENSE +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/semver/LICENSE +sha256 365496ca1f56da40b23c9815fc40fa9005847b2f8f8fd1c1a4929ef25ec8cd1d src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/set-blocking/LICENSE.txt +sha256 c4b4ad3a5746f1f5249a6dd90396ec519264e1bb02e01e48a6522c48a3a97cb4 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/setimmediate/LICENSE.txt +sha256 76d6d1ea0c268da37dd3c961b4fcfb23dee8417fff9e8786d4d44c585b781b69 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/setprototypeof/LICENSE +sha256 58dcf38be1438f739412b87eb70d64bf00e9976d529bb119f700d8b3167924f0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/sha.js/LICENSE +sha256 e6fdf7ac2af533b4436d99aa75df32aa78690510f7d68a3e73e8576967298d2f src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/shebang-command/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/shebang-regex/license +sha256 e05b1eaf5b5f99b7ad75cd1f38858ff9a311780b97715ead67936d60bf96aa7e src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/signal-exit/LICENSE.txt +sha256 3dc3b3d3a284d871f7f307655c90fb101d73abbf87bbddeefd2f67883353bdbc src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/slice-ansi/license +sha256 05dc4d785ac3a488676d3ed10e901b75ad89dafcc63f8e66610fd4a39cc5c7e8 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/slide/LICENSE +sha256 56b7b228fde8d638cc7f1c3d0022cf111764083ac4f803b7a50a90388dce3788 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/socket.io-adapter/LICENSE +sha256 62e2032a1e1458b1d92a62f5fc51be48e08b95062295c91a9f3bd3686809d37e src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/socket.io-client/LICENSE +sha256 98c970de440dcfc77471610aec2377c9d9b0db2b3be6d1add524a586e1d7f422 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/socket.io-client/node_modules/debug/LICENSE +sha256 6652830c2607c722b66f1b57de15877ab8fc5dca406cc5b335afeb365d0f32c1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/socket.io-client/node_modules/ms/license.md +sha256 c10d192d935165dac336ae245f9eef4c42bb37e7c6f5c5f6f7663db778122df1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/socket.io/LICENSE +sha256 98c970de440dcfc77471610aec2377c9d9b0db2b3be6d1add524a586e1d7f422 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/socket.io/node_modules/debug/LICENSE +sha256 6652830c2607c722b66f1b57de15877ab8fc5dca406cc5b335afeb365d0f32c1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/socket.io/node_modules/ms/license.md +sha256 56b7b228fde8d638cc7f1c3d0022cf111764083ac4f803b7a50a90388dce3788 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/socket.io-parser/LICENSE +sha256 98c970de440dcfc77471610aec2377c9d9b0db2b3be6d1add524a586e1d7f422 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/socket.io-parser/node_modules/debug/LICENSE +sha256 6652830c2607c722b66f1b57de15877ab8fc5dca406cc5b335afeb365d0f32c1 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/socket.io-parser/node_modules/ms/license.md +sha256 6cb0631f71c7749763fd3dd1d5bee52dd1070ec17f2edc1710079ad070bd2fbd src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/source-map/LICENSE +sha256 c5ca60a739543ef97683dfa0a94773b214c86c826c76a27b8f8e6eb38148cbce src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/spdx-compare/LICENSE.md +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/spdx-correct/LICENSE +sha256 7edb57f7065309027de249642341292a5b21410d5773cc55bba73ff9cf01060e src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/spdx-expression-parse/LICENSE +sha256 c5ca60a739543ef97683dfa0a94773b214c86c826c76a27b8f8e6eb38148cbce src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/spdx-ranges/LICENSE.md +sha256 a21ab121cef9bed38553faad40e49b27ae3d2578d07a70956664e681021c9875 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/spdx-satisfies/LICENSE +sha256 a4cdda44b5adea4731d53dcae78fb5124f8fd853e994f01e25d8c33a7daf818b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/sprintf-js/LICENSE +sha256 512cfa4d5e7a7569c7ae4dd95241cb6ae2aaf648ef9ebd080c01bd24868d26e9 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/statuses/LICENSE +sha256 ff151c00207c908581639851dd8504ce4255be0650b2b236edec2aa90342b0cd src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/stream-browserify/LICENSE +sha256 ec62dc96da0099b87f4511736c87309335527fb7031639493e06c95728dc8c54 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/stream-browserify/node_modules/readable-stream/LICENSE +sha256 c7cc929b57080f4b9d0c6cf57669f0463fc5b39906344dfc8d3bc43426b30eac src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/stream-browserify/node_modules/safe-buffer/LICENSE +sha256 11f2aafb37d06b3ee5bdaf06e9811141d0da05263c316f3d627f45c20d43261b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/stream-browserify/node_modules/string_decoder/LICENSE +sha256 a0e6357a5e8ea65827addeb383e0948a1874d2f46bc7feaf6349b7a376ed6e98 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/stream-http/LICENSE +sha256 9660914267128b5f96a102bd7f6268c249110a39cb7c4bb7f536d856445d739c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/streamroller/LICENSE +sha256 98c970de440dcfc77471610aec2377c9d9b0db2b3be6d1add524a586e1d7f422 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/streamroller/node_modules/debug/LICENSE +sha256 11f2aafb37d06b3ee5bdaf06e9811141d0da05263c316f3d627f45c20d43261b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/string_decoder/LICENSE +sha256 c61652db3d2808f667b48af0a358f0d85fd07ad4a0d0b1a50882dec3b764c522 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/string.prototype.trimleft/LICENSE +sha256 c61652db3d2808f667b48af0a358f0d85fd07ad4a0d0b1a50882dec3b764c522 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/string.prototype.trimright/LICENSE +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/string-width/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/strip-ansi/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/strip-bom/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/strip-eof/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/strip-indent/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/strip-json-comments/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/supports-color/license +sha256 37b6932865726cf59cbfb8b32a5c9fd82c834c2deba4d53aa4a6b433ae69cdda src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/table/LICENSE +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/table/node_modules/ansi-regex/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/table/node_modules/string-width/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/table/node_modules/strip-ansi/license +sha256 435a6722c786b0a56fbe7387028f1d9d3f3a2d0fb615bb8fee118727c3f59b7b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/text-table/LICENSE +sha256 faae57631e1c7d641c3b6f9b110c2a7a28c8b383d08d7796ac472c509f075850 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/through2/LICENSE.md +sha256 e8734448285a2dd773d40136ed5d5e8163a70701dd540cdc796cfca232f67d55 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/through/LICENSE.APACHE2 +sha256 d72dea1a8cdf3f4dfa2f594253d0c5b37baefc76e806f5ecb0e426393edcd505 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/through/LICENSE.MIT +sha256 d5f14c3258420dfe5a3b641a143d6e6dd90eabb5962244d937e25699c3a45ec9 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/timers-browserify/LICENSE.md +sha256 162413c61e0982abe89a06bf7a02ec760dc49a7364d838bd9f01daebb5b95954 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/tmp/LICENSE +sha256 61b82d27e63b14eabc706960aabf6caa1b27d044eb00d7908f92e68085301c3a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/to-fast-properties/license +sha256 a832d679750e49ab433626ab196350b89964b60eb0d3edd3341887c7d5f4c128 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/toidentifier/LICENSE +sha256 e7d1fee7347ffddccc5fd03327ffdb50f8c112be0d5016d62388a92c4ae6e7a9 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/to-regex-range/LICENSE +sha256 83927d1555a8e1d5ed9896991fbb2b4cdfb64f45f5e12b7446c3bff5cea538d3 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/treeify/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/trim-newlines/license +sha256 a5e9f9b1575301c7a7a03508fdaa2e05a918cc17fd21c6e898096a96d6a34f61 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/tslib/LICENSE.txt +sha256 ed0ff5ab79bc82703690fde4644e352c9ce73e9b890b87ea68b1a1fc5805792b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/tsutils/LICENSE +sha256 435a6722c786b0a56fbe7387028f1d9d3f3a2d0fb615bb8fee118727c3f59b7b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/tty-browserify/LICENSE +sha256 b9eb082c39fe245e38793699074c394c43a722c51fce031c3c165cb92a31035c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/type-check/LICENSE +sha256 26181ebee1063f3dc6766a3b6d05999a0da058f172eadf2ca5d15105ffd9735a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/typedarray/LICENSE +sha256 e5aee0714b6ecc416454b968d1017570ef609f20d8722ab84b07acd550b78198 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/type-detect/LICENSE +sha256 23d466b1b134b415b66fa50c6526b4cf3e7b9258554da88d3abb371721e7ce68 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/type-is/LICENSE +sha256 27ebda9d51f0a56b7e281ccd8230a27236dcb51c05f64b07869ecf6e965d68b0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@types/chai/LICENSE +sha256 27ebda9d51f0a56b7e281ccd8230a27236dcb51c05f64b07869ecf6e965d68b0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@types/color-name/LICENSE +sha256 5938d4fe4890c79ad14e02e643c385b25b8b6c7bbb97ab08996034b586512df5 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@typescript-eslint/eslint-plugin/LICENSE +sha256 fcf6eabf68ca96988a6b506b4fdc6cc32535d80eb2e11c79724af5ac6f50262b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@typescript-eslint/eslint-plugin/node_modules/regexpp/LICENSE +sha256 5938d4fe4890c79ad14e02e643c385b25b8b6c7bbb97ab08996034b586512df5 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@typescript-eslint/experimental-utils/LICENSE +sha256 d3a724e2ed749f172ff70b62a1d0631b7d4b0ea273782365a3464d4e2d6b6dbd src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope/LICENSE +sha256 e2fc706570305bcb7dfadb1cac951d5934ce0d7331a7a7ff1bbc254dbe1d9ef8 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@typescript-eslint/parser/LICENSE +sha256 635818d8f39384751c8a5f3f3e735022f07afb3ccdb26eb17ff8eca28428f888 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@typescript-eslint/typescript-estree/LICENSE +sha256 6236fa0b88a4a0cce3dda0367979491b2052b3c8d6b1c10b3668de083e86a7f0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@typescript-eslint/typescript-estree/node_modules/glob/LICENSE +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@typescript-eslint/typescript-estree/node_modules/semver/LICENSE +sha256 a5e9f9b1575301c7a7a03508fdaa2e05a918cc17fd21c6e898096a96d6a34f61 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/typescript/LICENSE.txt +sha256 27ebda9d51f0a56b7e281ccd8230a27236dcb51c05f64b07869ecf6e965d68b0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@types/eslint-visitor-keys/LICENSE +sha256 27ebda9d51f0a56b7e281ccd8230a27236dcb51c05f64b07869ecf6e965d68b0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@types/estree/LICENSE +sha256 27ebda9d51f0a56b7e281ccd8230a27236dcb51c05f64b07869ecf6e965d68b0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@types/filesystem/LICENSE +sha256 27ebda9d51f0a56b7e281ccd8230a27236dcb51c05f64b07869ecf6e965d68b0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@types/json-schema/LICENSE +sha256 27ebda9d51f0a56b7e281ccd8230a27236dcb51c05f64b07869ecf6e965d68b0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@types/mocha/LICENSE +sha256 27ebda9d51f0a56b7e281ccd8230a27236dcb51c05f64b07869ecf6e965d68b0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@types/node/LICENSE +sha256 27ebda9d51f0a56b7e281ccd8230a27236dcb51c05f64b07869ecf6e965d68b0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/@types/puppeteer/LICENSE +sha256 b00ae96f0815ae8fa49c09044467306e98cd89d6770c535fb596ccbd350c6ab4 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/uglify-js/LICENSE +sha256 3b2a6a268aa815dec121d614245e03b5c68db1f044d5b525e36db7d5dc7fb9c3 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ultron/LICENSE +sha256 3fda5977c0904e226190b4e21d64340c1731e2142d6fe5f3dee0090a216b8b63 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/universalify/LICENSE +sha256 1a526fbe8d8577f5a4b1c2821842b55b7c0e18862531c62ae4ce69c9b19b74b6 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/unpipe/LICENSE +sha256 97f780d3c79a42236f2b3435860f284c0ac6b958622f6bc9f1ac43fd49689b7b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/url/LICENSE +sha256 483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/url/node_modules/punycode/LICENSE-MIT.txt +sha256 1da14af109d9baaa8dee3094add5cc65a7772487dd94c8d2adfd36935b678c49 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/useragent/LICENSE +sha256 0154425673db15cdfa80ecba2c9b1f1a867f7197a006764712849bfc3a93cbb7 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/util-deprecate/LICENSE +sha256 6239c6144c31e58cf925c34483606969c555574d64ffa96518ab5d7f45c75d43 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/util-extend/LICENSE +sha256 6239c6144c31e58cf925c34483606969c555574d64ffa96518ab5d7f45c75d43 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/util/LICENSE +sha256 6e7d699cdd1e4fa837ba7718ea49841aa67201b449ea8b3f9cf274be15974a64 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/utils-merge/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/validate-npm-package-license/LICENSE +sha256 435a6722c786b0a56fbe7387028f1d9d3f3a2d0fb615bb8fee118727c3f59b7b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/vm-browserify/LICENSE +sha256 405a272eaef556691ad7dda96db3237c9544afe18725842a1a5b3ec308960222 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/void-elements/LICENSE +sha256 6294da0e0a201bbe1de254445c9d07133a9448af05e4e44d0a2364747d114368 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/wcwidth/LICENSE +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/which/LICENSE +sha256 852bf81203aa93aa89afc9f881ebb035322dc7334aaceff435c557634c94a815 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/which-module/LICENSE +sha256 0cef05dfff8b6aa7f35596984f5709f0d17c2582924a751efa471a76de7cdc11 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/wide-align/LICENSE +sha256 435a6722c786b0a56fbe7387028f1d9d3f3a2d0fb615bb8fee118727c3f59b7b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/wordwrap/LICENSE +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/wrap-ansi/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/wrap-ansi/node_modules/ansi-regex/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/wrap-ansi/node_modules/string-width/license +sha256 6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/wrap-ansi/node_modules/strip-ansi/license +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/wrappy/LICENSE +sha256 0ead7e8cd8b0bc66a981ee69acaf1297ffa838cfce1b156a039bb24f997c0a27 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/write/LICENSE +sha256 3de284c8e6fa7e8437eff6f53695471e0332129a5b42a79361e17b7637de94b3 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ws/LICENSE +sha256 c7cc929b57080f4b9d0c6cf57669f0463fc5b39906344dfc8d3bc43426b30eac src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/ws/node_modules/safe-buffer/LICENSE +sha256 a5f35901ee8b2039a7431144c23dd10bd47c1d07bcee0cd3a536421d86412214 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/xmlhttprequest-ssl/LICENSE +sha256 82e67379203d5794e7c44549847d8d64ae6904591381682360470898bd306821 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/xtend/LICENSE +sha256 2034cce3b6fafcddd642c4175e01d3ddfc332a53b9f20fdc46b1466dc89ac469 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/y18n/LICENSE +sha256 4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yallist/LICENSE +sha256 fe71524a15f30aab0f39af7165d38fc64a4269b7d2a0caffebc907355aec9c92 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/LICENSE +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/ansi-regex/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/ansi-styles/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/camelcase/license +sha256 2dc0465729366c3a7890dfa9e972a1ba7048a26c02116fb8b419a6a1ac110149 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/cliui/LICENSE.txt +sha256 693866fc419c6f61c8570438ec00659d156ec2b4d4a4d04091711f5f11a365d4 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/color-convert/LICENSE +sha256 7357445bac398c76c0aef75a587009fe406d40de6a79789eb5b7ecbbad317ef2 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/color-name/LICENSE +sha256 483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/emoji-regex/LICENSE-MIT.txt +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/find-up/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/is-fullwidth-code-point/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/locate-path/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/path-exists/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/p-locate/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/string-width/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/strip-ansi/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/wrap-ansi/license +sha256 365496ca1f56da40b23c9815fc40fa9005847b2f8f8fd1c1a4929ef25ec8cd1d src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs/node_modules/yargs-parser/LICENSE.txt +sha256 365496ca1f56da40b23c9815fc40fa9005847b2f8f8fd1c1a4929ef25ec8cd1d src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs-parser/LICENSE.txt +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs-parser/node_modules/camelcase/license +sha256 30877d17f7e38530d46b49fb375ee98ce2e8b085b3ee72d4c2888710416ef139 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs-unparser/LICENSE +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs-unparser/node_modules/camelcase/license +sha256 48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs-unparser/node_modules/find-up/license +sha256 902dbb4154679fb2b8d7c33878183f45b268d01eae5e5033dddaa8852d45f213 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs-unparser/node_modules/get-caller-file/LICENSE.md +sha256 365496ca1f56da40b23c9815fc40fa9005847b2f8f8fd1c1a4929ef25ec8cd1d src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs-unparser/node_modules/require-main-filename/LICENSE.txt +sha256 fe71524a15f30aab0f39af7165d38fc64a4269b7d2a0caffebc907355aec9c92 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs-unparser/node_modules/yargs/LICENSE +sha256 365496ca1f56da40b23c9815fc40fa9005847b2f8f8fd1c1a4929ef25ec8cd1d src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yargs-unparser/node_modules/yargs-parser/LICENSE.txt +sha256 b303783d5eb7ca50b853ffa5f145e4e7998fab339831d848f507ca6cd970577a src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yauzl/LICENSE +sha256 3b2a6a268aa815dec121d614245e03b5c68db1f044d5b525e36db7d5dc7fb9c3 src/3rdparty/chromium/third_party/devtools-frontend/src/node_modules/yeast/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/devtools-frontend/src/scripts/closure/COPYING +sha256 af175b9d96ee93c21a036152e1b905b0b95304d4ae8c2c921c7609100ba8df7e src/3rdparty/chromium/third_party/devtools-frontend/src/third_party/axe-core/LICENSE +sha256 a8ad31b1c3f40dca5a84119351b8fa8ddc868edd77fad8a8ebf6d8f2d16fa4ae src/3rdparty/chromium/third_party/devtools-frontend/src/third_party/pyjson5/src/LICENSE +sha256 4f5753ce8acf3feafc758599058746d30bda07bc0d4cc3a6a1eb8e039fdba1dc src/3rdparty/chromium/third_party/dom_distiller_js/LICENSE +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 src/3rdparty/chromium/third_party/dpkg-shlibdeps/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/emoji-segmenter/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/emoji-segmenter/src/LICENSE +sha256 9021fdb5341ebbb2eb5c771ac5cfac527790673179d3b21a42de1ab2798ec30f src/3rdparty/chromium/third_party/espresso/LICENSE +sha256 46336ab2fec900803e2f1a4253e325ac01d998efb09bc6906651f7259e636f76 src/3rdparty/chromium/third_party/expat/src/expat/COPYING +sha256 d9c904abd0ead61b3fbaef0a609285548076ff9c3f814cc1cf019c5d7150736d src/3rdparty/chromium/third_party/ffmpeg/chromium/scripts/license_texts/full_lgpl.txt +sha256 a8579e3fc40c11ab147bc299257733eb749cd455010385f7c117f70d7aef24e4 src/3rdparty/chromium/third_party/ffmpeg/chromium/scripts/license_texts/jpeg.txt +sha256 857d5f537af3aa164e7a27eda60147d34195e5781abe7b1d358d9fb01e222ae0 src/3rdparty/chromium/third_party/ffmpeg/chromium/scripts/license_texts/mips.txt +sha256 b4c85cce2b772f27d83f4562c20787057dc6949fcecc820a82c1d2e7047e89c3 src/3rdparty/chromium/third_party/ffmpeg/chromium/scripts/license_texts/oggparse_ahlberg_rullgayrd_2005.txt +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 src/3rdparty/chromium/third_party/ffmpeg/COPYING.GPLv2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 src/3rdparty/chromium/third_party/ffmpeg/COPYING.GPLv3 +sha256 b634ab5640e258563c536e658cad87080553df6f34f62269a21d554844e58bfe src/3rdparty/chromium/third_party/ffmpeg/COPYING.LGPLv2.1 +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 src/3rdparty/chromium/third_party/ffmpeg/COPYING.LGPLv3 +sha256 cb48bf09a11f5fb576cddb0431c8f5ed0a60157a9ec942adffc13907cbe083f2 src/3rdparty/chromium/third_party/ffmpeg/LICENSE.md +sha256 f45cc81b400a048b56c9edbd4c3317f7a8958463dfd55aa96f268ecfd6baa12c src/3rdparty/chromium/third_party/flac/COPYING.FDL +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 src/3rdparty/chromium/third_party/flac/COPYING.GPL +sha256 5df07007198989c622f5d41de8d703e7bef3d0e79d62e24332ee739a452af62a src/3rdparty/chromium/third_party/flac/COPYING.LGPL +sha256 946b733afbaa20a192c8dc022b4e43090e78f28fd293494d1b307f7301552c9b src/3rdparty/chromium/third_party/flac/COPYING.Xiph +sha256 7ec9661a8afafab1eee3523d6f1a193eff76314a5ab10b4ce96aefd87621b0c3 src/3rdparty/chromium/third_party/flatbuffers/LICENSE +sha256 3112ebbfc0fe10ad40a97672f5590c4292536a28cbfe3506820b15dec70b2258 src/3rdparty/chromium/third_party/flatbuffers/src/dart/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/flatbuffers/src/LICENSE.txt +sha256 fa4cd9ab005185e10cd8f7504518856c7dd36c01e766c2bac87f4fc638e9f886 src/3rdparty/chromium/third_party/fontconfig/LICENSE +sha256 fa4cd9ab005185e10cd8f7504518856c7dd36c01e766c2bac87f4fc638e9f886 src/3rdparty/chromium/third_party/fontconfig/src/COPYING +sha256 fd056de4196903a676208ef58cfddafc7d583d1f28fa2e44c309cf84a59e62fb src/3rdparty/chromium/third_party/freetype/src/docs/LICENSE.TXT +sha256 56e67061ab590046b09876a084478ea87c4ece1579deb194347096e61c2537dd src/3rdparty/chromium/third_party/fuchsia-sdk/LICENSE +sha256 c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 src/3rdparty/chromium/third_party/gif_player/LICENSE +sha256 8ea14fdc7efee7fe53c79101b97049bd547dc6686cfa05df4f0686146a561423 src/3rdparty/chromium/third_party/glfw/src/LICENSE.md +sha256 23353f4505b1c8ce4f8f72fc3b11dc74b4a8a7bf95921d93ff77f227c171a710 src/3rdparty/chromium/third_party/glslang/LICENSE +sha256 d3cbc77d99642114bc925cce51eda84b48ae4879947ac89941a2e2aa4150db76 src/3rdparty/chromium/third_party/glslang/src/LICENSE.txt +sha256 9702de7e4117a8e2b20dafab11ffda58c198aede066406496bef670d40a22138 src/3rdparty/chromium/third_party/googletest/src/googlemock/LICENSE +sha256 5e0df8c845c742e76f2f64d2d9ce1b7e74a2422fddbc577ae6a56319083de0bf src/3rdparty/chromium/third_party/googletest/src/googlemock/scripts/generator/LICENSE +sha256 9702de7e4117a8e2b20dafab11ffda58c198aede066406496bef670d40a22138 src/3rdparty/chromium/third_party/googletest/src/googletest/LICENSE +sha256 9702de7e4117a8e2b20dafab11ffda58c198aede066406496bef670d40a22138 src/3rdparty/chromium/third_party/googletest/src/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/google-truth/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/guava/LICENSE +sha256 ca382aa537f8923d6c0991fb976d184a2009eb76080313bf10dcecdc9311f0dd src/3rdparty/chromium/third_party/gvr-android-keyboard/LICENSE +sha256 f54c49d3ff865458c5d3c68c3367a1f6e0d7b3f686f8c88a6a563ef90f84ad9e src/3rdparty/chromium/third_party/gvr-android-sdk/LICENSE +sha256 96e5bbd81970983d666e702fa56f67dfd2fdaa363b8a4266e8d98847374cd7c8 src/3rdparty/chromium/third_party/hamcrest/LICENSE +sha256 beb3f017ceb41387667f78237a7cecf84defa0ed257c505894663d6a9f13211b src/3rdparty/chromium/third_party/harfbuzz-ng/src/COPYING +sha256 c2cfccb812fe482101a8f04597dfc5a9991a6b2748266c47ac91b6a5aae15383 src/3rdparty/chromium/third_party/harfbuzz-ng/src/src/ms-use/COPYING +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 src/3rdparty/chromium/third_party/hunspell/COPYING +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 src/3rdparty/chromium/third_party/hunspell/COPYING.LESSER +sha256 53692a2ed6c6a2c6ec9b32dd0b820dfae91e0a1fcdf625ca9ed0bdf8705fcc4f src/3rdparty/chromium/third_party/hunspell/COPYING.MPL +sha256 610809f1586ee4d22468f1e97c256153cea8be7a662193db70d6ca424e0f17c8 src/3rdparty/chromium/third_party/iaccessible2/LICENSE +sha256 a412a53925efc6b50800bf8519a2e033949243d5a5a8c5422bae8a5007ad09c8 src/3rdparty/chromium/third_party/iccjpeg/LICENSE +sha256 d18e75f216f177d41304f5e94c2cba7d1bf9f8f8583a0777cceb5cca0c5ad137 src/3rdparty/chromium/third_party/icu4j/LICENSE +sha256 6a18c5fac70d7860b57f5b72b4e2c9a1ba6b3d2741eef7ff9767c5379364f10d src/3rdparty/chromium/third_party/icu/LICENSE +sha256 c62d7697c03979f5056d28b338fafc7a1152820f7b379adf4a9d88cd37160f96 src/3rdparty/chromium/third_party/icu/license.html +sha256 845022e0c1db1abb41a6ba4cd3c4b674ec290f3359d9d3c78ae558d4c0ed9308 src/3rdparty/chromium/third_party/icu/scripts/LICENSE +sha256 8c6db340475136df3c1201d458fa5755698eace76e510471ecc9d857d6083dac src/3rdparty/chromium/third_party/ijar/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/ink/LICENSE +sha256 b9be92f13356083392d97da13cab8ae543c7911f44eff5289b693da8b17b9e08 src/3rdparty/chromium/third_party/inspector_protocol/LICENSE +sha256 7a92c5e7a83b5ddcc693bb84ea8bdb842308509c1758cffdfe24717609154c75 src/3rdparty/chromium/third_party/isimpledom/LICENSE +sha256 ed8d7a24769ac9d57d08769b5f8be27519dd8811d06b0995dbe8ca6714e96d08 src/3rdparty/chromium/third_party/jacoco/LICENSE +sha256 33b6816eb449962d307495946519ed78cef8743819f6f1d60e8b3d4e86c38b1c src/3rdparty/chromium/third_party/javalang/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/jetifier_standalone/LICENSE +sha256 7975c0027cfa5d08253fbb6ff4676acc38248bd5e046d0dbab3d810971e97970 src/3rdparty/chromium/third_party/jinja2/LICENSE +sha256 76c45ece83a26117f86f4e349e7df118708e061e87225328fb478ce1e8b3eb86 src/3rdparty/chromium/third_party/jsoncpp/LICENSE +sha256 95039d77a20e75b428207740d9a8f97b2dce3c89da4b21f1ad862b5997160e0a src/3rdparty/chromium/third_party/jsoncpp/source/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/jstemplate/COPYING +sha256 71a19392a0eb3255ab2055ed978bb0f93865cea84d31a3510eaffb74d8981e7f src/3rdparty/chromium/third_party/khronos/LICENSE +sha256 ccc19f1da0798ed666609b65a5b44dd8b3abe6fc08b9c0592eb76e82e174db19 src/3rdparty/chromium/third_party/leveldatabase/src/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/libaddressinput/LICENSE +sha256 c9a5bd7c8cc1267ddacdc5228c68ecd811cf6d74286e9141bc80d8af2eb1a025 src/3rdparty/chromium/third_party/libaddressinput/src/cpp/LICENSE.chromium +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/libaddressinput/src/LICENSE +sha256 4764a286d8b2faeaf42f4418e7d7a28d58fc8fd4d00a3d0a7f44b0a4099de7f2 src/3rdparty/chromium/third_party/libaom/source/libaom/LICENSE +sha256 043dcfd059386f9facd376351b2bd79325778744aa442177390cdfcca54babed src/3rdparty/chromium/third_party/libaom/source/libaom/third_party/fastfeat/LICENSE +sha256 9702de7e4117a8e2b20dafab11ffda58c198aede066406496bef670d40a22138 src/3rdparty/chromium/third_party/libaom/source/libaom/third_party/googletest/src/googletest/LICENSE +sha256 5aec868f669e384a22372a4e8a1a6cd7d44c64cd451f960ca69cc170d1e13acf src/3rdparty/chromium/third_party/libaom/source/libaom/third_party/libwebm/LICENSE.TXT +sha256 ff6c857ce2708e87701323078aef115c1872a1f80a9649f86dc899b48083bc60 src/3rdparty/chromium/third_party/libaom/source/libaom/third_party/vector/LICENSE +sha256 719d8fa235f2068e0ae6d6a7dceb0a7720d7840f0f0ebed29957989e6ded3cd8 src/3rdparty/chromium/third_party/libaom/source/libaom/third_party/x86inc/LICENSE +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 src/3rdparty/chromium/third_party/libcxx-pretty-printers/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/libgav1/src/LICENSE +sha256 d56bafdaeaa793331a29e9766b7efe66524c98533da798a57201e291863ef625 src/3rdparty/chromium/third_party/libgifcodec/LICENSE.md +sha256 37d8bfba91b745693ea58f846f2f1276229745adf532974b73c1911cfd144241 src/3rdparty/chromium/third_party/libipp/LICENSE +sha256 ab00a482b6a3902e40211b43c5d0441962ea99b6cc7c25c0f243fa270b78d482 src/3rdparty/chromium/third_party/libjingle_xmpp/LICENSE +sha256 8412238c5ad95965cf3c3197791e9dea8b5fae505d133449e33ee2fa754fe61e src/3rdparty/chromium/third_party/libjpeg_turbo/LICENSE.md +sha256 3bf128851aff9f392953276ea8ade3e41da0f40b853fde58ec21034aa91ccc31 src/3rdparty/chromium/third_party/libovr/LICENSE +sha256 bf5e22b9dce8464064ae17a48ea1133c3369ac9e1d80ef9e320e5219aa14ea9b src/3rdparty/chromium/third_party/libpng/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/libprotobuf-mutator/src/LICENSE +sha256 a1a33180d02960ab1c5de36cf20b1a2f0fe9888d83826ad263da5db52f1b183b src/3rdparty/chromium/third_party/libsecret/LICENSE +sha256 8e19d42a1eec9561f3f347253ddf2e385c55f392f025bb0fd41b88dbf38db5ae src/3rdparty/chromium/third_party/libsrtp/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/libsync/LICENSE +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 src/3rdparty/chromium/third_party/libudev/LICENSE +sha256 5df07007198989c622f5d41de8d703e7bef3d0e79d62e24332ee739a452af62a src/3rdparty/chromium/third_party/libusb/src/COPYING +sha256 8267348d5af1262c11d1a08de2f5afc77457755f1ac658627dd9acf71011d615 src/3rdparty/chromium/third_party/libvpx/source/libvpx/LICENSE +sha256 9702de7e4117a8e2b20dafab11ffda58c198aede066406496bef670d40a22138 src/3rdparty/chromium/third_party/libvpx/source/libvpx/third_party/googletest/src/LICENSE +sha256 5aec868f669e384a22372a4e8a1a6cd7d44c64cd451f960ca69cc170d1e13acf src/3rdparty/chromium/third_party/libvpx/source/libvpx/third_party/libwebm/LICENSE.TXT +sha256 2b2cc1180c7e6988328ad2033b04b80117419db9c4c584918bbb3cfec7e9364f src/3rdparty/chromium/third_party/libvpx/source/libvpx/third_party/libyuv/LICENSE +sha256 719d8fa235f2068e0ae6d6a7dceb0a7720d7840f0f0ebed29957989e6ded3cd8 src/3rdparty/chromium/third_party/libvpx/source/libvpx/third_party/x86inc/LICENSE +sha256 5aec868f669e384a22372a4e8a1a6cd7d44c64cd451f960ca69cc170d1e13acf src/3rdparty/chromium/third_party/libwebm/source/LICENSE.TXT +sha256 6de6fe48ff7b249a51ec5522d1af618dd50effc6f030fd24e17878566ad2ca5d src/3rdparty/chromium/third_party/libwebp/LICENSE +sha256 c5c63674f8a83c4d2e385d96d1c670a03cb871ba2927755467017317878574bd src/3rdparty/chromium/third_party/libxml/src/COPYING +sha256 c5c63674f8a83c4d2e385d96d1c670a03cb871ba2927755467017317878574bd src/3rdparty/chromium/third_party/libxml/src/Copyright +sha256 31346421254a3e6e12687cf17f19f6357ee73a617fa7b3d3ccefdcbabe49bdd3 src/3rdparty/chromium/third_party/libXNVCtrl/LICENSE +sha256 7e48e290b6bfccc2ec1b297023a1d77f2fd87417f71fbb9f50aabef40a851819 src/3rdparty/chromium/third_party/libxslt/linux/COPYING +sha256 7e48e290b6bfccc2ec1b297023a1d77f2fd87417f71fbb9f50aabef40a851819 src/3rdparty/chromium/third_party/libxslt/src/Copyright +sha256 2b2cc1180c7e6988328ad2033b04b80117419db9c4c584918bbb3cfec7e9364f src/3rdparty/chromium/third_party/libyuv/LICENSE +sha256 0d4077a7055ead389c4c5a9a6ac4bb8b784fc6e9e37be2caf544fcceed26cb16 src/3rdparty/chromium/third_party/lottie/LICENSE +sha256 6e3e0a978f1e136cb3efb89702f4314671581a0c70c9a52447669e00f7b129e8 src/3rdparty/chromium/third_party/lzma_sdk/LICENSE +sha256 c3b124673c93872156757a934c75b498d68eec09510e25e549d9dc2013776499 src/3rdparty/chromium/third_party/mako/LICENSE +sha256 0bbe88228fd63d20ec097f64e58d5a0a465123ae139140a18d406c60b48824b5 src/3rdparty/chromium/third_party/markupsafe/LICENSE +sha256 58d1e17ffe5109a7ae296caafcadfdbe6a7d176f0bc4ab01e12a689b0499d8bd src/3rdparty/chromium/third_party/material_design_icons/LICENSE +sha256 536284e40c611f371f6ce5d74efac37a20d993cd3af96259b9b9e20b1669ff1e src/3rdparty/chromium/third_party/mesa_headers/LICENSE +sha256 845022e0c1db1abb41a6ba4cd3c4b674ec290f3359d9d3c78ae558d4c0ed9308 src/3rdparty/chromium/third_party/metrics_proto/LICENSE +sha256 27ebda9d51f0a56b7e281ccd8230a27236dcb51c05f64b07869ecf6e965d68b0 src/3rdparty/chromium/third_party/microsoft_webauthn/LICENSE +sha256 83bb6bd9ccd2cf5230cb1807ed16258289768dc4d9cb80069a814e04415a1275 src/3rdparty/chromium/third_party/minigbm/LICENSE +sha256 8610954adbca6c6b85d8b1ae5613b44b0014e437d32fcad6683bb27541411686 src/3rdparty/chromium/third_party/minigbm/src/LICENSE +sha256 4919cfb14a73cd64fcef67b107613970cf1659a09aa675dba31314f373bc7204 src/3rdparty/chromium/third_party/minizip/src/lib/bzip2/LICENSE +sha256 87642305968765a4030fd202ff7006afa67274da7f9bde84506e51ae58ecc2b4 src/3rdparty/chromium/third_party/minizip/src/LICENSE +sha256 bd5663836feb58ffb7d0e6b9e62010f4c3399f2bb0a4cf6514a15d597bbdd577 src/3rdparty/chromium/third_party/mocha/LICENSE +sha256 380893a2f01aea5c3328b1a8b08cdc488bf236916abac3af0d1f1a5d2634c31a src/3rdparty/chromium/third_party/mockito/LICENSE +sha256 d47e8390fb0d7ad4a18f26aedd6283c7ab6b5b4fabab536ccb4db7f9f6d90c08 src/3rdparty/chromium/third_party/modp_b64/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/motemplate/LICENSE +sha256 7a92c5e7a83b5ddcc693bb84ea8bdb842308509c1758cffdfe24717609154c75 src/3rdparty/chromium/third_party/mozilla/LICENSE +sha256 1563996c52e220e15ef2418e67d39488255aa8c28c89e617074d3afe3ee329e0 src/3rdparty/chromium/third_party/nasm/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/netty4/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/netty-tcnative/LICENSE +sha256 0cd1bd4b934ffdc5e7f1bcfa9d08bd17295e5414bdca99c06b1036278b01f0b1 src/3rdparty/chromium/third_party/node/LICENSE +sha256 b5730da9a26472a405b0b1c61d3d166714d9d654ab3282e54e4a01a5f66316c3 src/3rdparty/chromium/third_party/objenesis/LICENSE +sha256 0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594 src/3rdparty/chromium/third_party/ocmock/License.txt +sha256 8bed129a6a15e631c93a624985e631eb62a55f7e072b78f4e1c3dde7c745283d src/3rdparty/chromium/third_party/one_euro_filter/LICENSE +sha256 dd5c1c9668512530fa5a96e4c29ac4033d70a7eeb0eed7a42fddb6dd794ebdbb src/3rdparty/chromium/third_party/openh264/src/LICENSE +sha256 34a5c58db7cc4d3265d14a9aa26e38067fe114311d8bec31f909d1c240e626c4 src/3rdparty/chromium/third_party/openscreen/src/LICENSE +sha256 284545e873c704952e5b1b39d457dd83a3b115a51d9f1eb5175137bd69b8fa1b src/3rdparty/chromium/third_party/openscreen/src/third_party/mozilla/LICENSE.txt +sha256 f56ff606104d4ef18e617921a75c73ad73b5a1a1d70c69590c29de16919e04ad src/3rdparty/chromium/third_party/openvr/src/LICENSE +sha256 8338ce8d922bb4416ce3dd1e5680173332435e3f0755007ac7801ccd674fe682 src/3rdparty/chromium/third_party/opus/src/COPYING +sha256 7efb4989e0cd1b256229bdf2f09300c5d14e35db0e7476bfb87fac243498273d src/3rdparty/chromium/third_party/opus/src/LICENSE_PLEASE_READ.txt +sha256 0d74de3c3cd3196a9ed1bc612cfd5f81d7509d66c4be34a50f99d61bd1ad00d4 src/3rdparty/chromium/third_party/ots/LICENSE +sha256 9dd8d2fb95ba862a5d166a167682c1c67a209acd3bf09b6fd03f76d3579729bc src/3rdparty/chromium/third_party/ow2_asm/LICENSE +sha256 76621fcfb65adfd6602b700708b74c8e20f3325b32f1a54bec83a5cf7c679f53 src/3rdparty/chromium/third_party/pdfium/LICENSE +sha256 32759d1397d8f7b9e15ece146e4038b22b90e93b4935b5a840bcef4d2ba5ea55 src/3rdparty/chromium/third_party/pdfium/third_party/bigint/LICENSE +sha256 bf5e22b9dce8464064ae17a48ea1133c3369ac9e1d80ef9e320e5219aa14ea9b src/3rdparty/chromium/third_party/pdfium/third_party/libpng16/LICENSE +sha256 c5b14f5a3814d2e57b9bb9520dcf57a2c3817b65c4f989e5c82e332c82af1038 src/3rdparty/chromium/third_party/pdfium/third_party/pymock/LICENSE.txt +sha256 e323929b7c2178e2efc9ac70e62166670274bd772f90a8d83a90300c5f60002c src/3rdparty/chromium/third_party/perfetto/LICENSE +sha256 9f98bab33648b77578d85ac0f1d1c3941a72aa6d7e65015ba181f2fe804bb85d src/3rdparty/chromium/third_party/pexpect/LICENSE +sha256 a46200592eb193853527250da098e6bb0c75424e7a2c7db8da526c4f301c3d88 src/3rdparty/chromium/third_party/pffft/LICENSE +sha256 dd4930c619afd8527591353c7d3d1c1d7f4bf62ed1cb411f4f507dbdee7738a2 src/3rdparty/chromium/third_party/ply/LICENSE +sha256 d6c873c08a8806f08fdafe1aa00ba38837f6ac29f91d6b26510614b0df2001e0 src/3rdparty/chromium/third_party/ply/license.patch +sha256 24699c6858472311aa9acc6c2b7112ff9de6e7792569158ba9e439deb0529ef6 src/3rdparty/chromium/third_party/polymer/LICENSE.polymer +sha256 a5adc2955c0dd848c97aa6afb14e0047a610f0fcfa6ce0011efad01a0e051406 src/3rdparty/chromium/third_party/polymer/v1_0/components-chromium/polymer2/LICENSE.txt +sha256 984fb04a16a9f1e0145ffd891125dc366a01cd921f58c9b0369be400c720790d src/3rdparty/chromium/third_party/polymer/v1_0/components-chromium/polymer/LICENSE.txt +sha256 a5adc2955c0dd848c97aa6afb14e0047a610f0fcfa6ce0011efad01a0e051406 src/3rdparty/chromium/third_party/polymer/v3_0/components-chromium/polymer/LICENSE.txt +sha256 58d1e17ffe5109a7ae296caafcadfdbe6a7d176f0bc4ab01e12a689b0499d8bd src/3rdparty/chromium/third_party/private-join-and-compute/src/crypto/LICENSE +sha256 58d1e17ffe5109a7ae296caafcadfdbe6a7d176f0bc4ab01e12a689b0499d8bd src/3rdparty/chromium/third_party/private-join-and-compute/src/LICENSE +sha256 58d1e17ffe5109a7ae296caafcadfdbe6a7d176f0bc4ab01e12a689b0499d8bd src/3rdparty/chromium/third_party/private-join-and-compute/src/util/LICENSE +sha256 294f58267c6f473c4ce7270bf5c8d34b2003cb43804552459654c36553431276 src/3rdparty/chromium/third_party/proguard/LICENSE +sha256 6e5e117324afd944dcf67f36cf329843bc1a92229a8cd9bb573d7a83130fea7d src/3rdparty/chromium/third_party/protobuf/LICENSE +sha256 2ab28b982a7f3150e1597befaa87e1636b9973c80aef3752597945d270c4c4e4 src/3rdparty/chromium/third_party/pycoverage/LICENSE +sha256 f8d0c347a0dcc6ebe1671640dfae8d2411b6ded892e06a6764f8208b218b2af4 src/3rdparty/chromium/third_party/pyelftools/elftools/construct/LICENSE +sha256 f8c8ccecdbb044fd6fa1a586c596a055fb2b14fb3e335d8ed282db58d80b7410 src/3rdparty/chromium/third_party/pyelftools/LICENSE +sha256 cb5e8e7e5f4a3988e1063c142c60dc2df75605f4c46515e776e3aca6df976e14 src/3rdparty/chromium/third_party/pyjson5/src/LICENSE +sha256 c5b14f5a3814d2e57b9bb9520dcf57a2c3817b65c4f989e5c82e332c82af1038 src/3rdparty/chromium/third_party/pymock/LICENSE.txt +sha256 318cea263a2fb726d767e2777771a431a3220008e6940dd5138a235a1fc498fc src/3rdparty/chromium/third_party/pystache/LICENSE +sha256 956c3b678228a216142df38d039bba56ee6509d3298e7a4b8dd5bc3eaa80fe33 src/3rdparty/chromium/third_party/Python-Markdown/LICENSE.md +sha256 5a2954f05e7fcc1bf240a3b58534f974760b5aae02438ce875c9c7fe0bdb4cf9 src/3rdparty/chromium/third_party/pywebsocket3/src/LICENSE +sha256 c903100da706172066fa1b6f02eba60f202fea63036492d2c4a01267e32aa7a8 src/3rdparty/chromium/third_party/qcms/src/COPYING +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/quic_trace/src/LICENSE +sha256 38751245389e1e23f73e6f5384b5cbe7fa972cc4410c5adc9c04b082a0b9561a src/3rdparty/chromium/third_party/quic_trace/src/third_party/fonts/LICENSE +sha256 8991cd11befec7c6a63662700f03c0cc42e864b6e77c7e70b80297c951a7f0ff src/3rdparty/chromium/third_party/quic_trace/src/third_party/glew/LICENSE.txt +sha256 f98f3db81b4dd3873d8672117e409286142cfae9b7673ab6d7aab4bae1527d20 src/3rdparty/chromium/third_party/qunit/LICENSE +sha256 68834f116f8ff545f05d14753357b620748156d60ee36b26beab4cb3f317efe4 src/3rdparty/chromium/third_party/r8/LICENSE +sha256 6040cda75d90b1738292a631d89934c411ef7ffd543c4d6a1b7edfc8edf29449 src/3rdparty/chromium/third_party/re2/LICENSE +sha256 6040cda75d90b1738292a631d89934c411ef7ffd543c4d6a1b7edfc8edf29449 src/3rdparty/chromium/third_party/re2/src/LICENSE +sha256 e479bcdfa777738226b4282bf8536cc5416a25cec3100cbe210b8be4d1e2ed84 src/3rdparty/chromium/third_party/requests/LICENSE +sha256 e2f59ff41d9d03adc3dcf3deff170f8c8cf4a6eb4a9b174762a7656d23200ffa src/3rdparty/chromium/third_party/rnnoise/COPYING +sha256 0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594 src/3rdparty/chromium/third_party/robolectric/LICENSE +sha256 19c9b910bec5a4f2c420747d1bf81e975ffdb1377ad91c5d9b1e8dd3e38f4c17 src/3rdparty/chromium/third_party/robolectric/licenses/extreme.indiana.edu.license.txt +sha256 a7436c952fa2dc0701860cf4187d1e8e8e6de6720dec0ae9e0b641bc50eebced src/3rdparty/chromium/third_party/robolectric/licenses/javolution.license.txt +sha256 5b6ac717e37db4f6d17bda7791f4ce3f99947aeb21e6e72b705aa3d1ee2de480 src/3rdparty/chromium/third_party/robolectric/licenses/pivotal.labs.license.txt +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/s2cellid/LICENSE +sha256 3f941b3b89cf7b8370ceb83cc76d2120d471b58735d8ca60238a751a48d7f72f src/3rdparty/chromium/third_party/schema_org/LICENSE +sha256 c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 src/3rdparty/chromium/third_party/shaderc/src/LICENSE +sha256 b5a00e94f058edc87e05978329b55730d8689abe61205d9018443d03de4f07da src/3rdparty/chromium/third_party/shaderc/src/third_party/LICENSE.glslang +sha256 47e20ce182bc68fab1a0cfb129b03c326aaf4f2b6b7905aa9d376d31018bd29f src/3rdparty/chromium/third_party/shaderc/src/third_party/LICENSE.spirv-tools +sha256 33c9a2fe619e1200937629f318895898ffcd1bf7d0ddd39adc382c030925e61e src/3rdparty/chromium/third_party/simplejson/LICENSE.txt +sha256 b25948e48c44312d04ffc626a9d52cae7c04539a1a8e0c1be47b7bfa0da03e1d src/3rdparty/chromium/third_party/sinonjs/LICENSE +sha256 8bb850c565aa389fdc16f3a46965ad23d82adff60f2393fc2762b63185e8e6c9 src/3rdparty/chromium/third_party/six/LICENSE +sha256 8bb850c565aa389fdc16f3a46965ad23d82adff60f2393fc2762b63185e8e6c9 src/3rdparty/chromium/third_party/six/src/LICENSE +sha256 e59bb5c5c6ba426a9ac4ba9fe667ad14c5166b12aa25be8af1d122b14fbe2e36 src/3rdparty/chromium/third_party/skia/include/third_party/skcms/LICENSE +sha256 e59bb5c5c6ba426a9ac4ba9fe667ad14c5166b12aa25be8af1d122b14fbe2e36 src/3rdparty/chromium/third_party/skia/include/third_party/vulkan/LICENSE +sha256 5f787c1dee3c56547f09ccc2906ab5f5293c4d8dd6c8654e573216c38e908dbd src/3rdparty/chromium/third_party/skia/LICENSE +sha256 d27678cba0d529e77201e2d2a053628143e986aad8f1e77f7039ad4366c8f978 src/3rdparty/chromium/third_party/skia/modules/canvaskit/canvaskit/LICENSE +sha256 d27678cba0d529e77201e2d2a053628143e986aad8f1e77f7039ad4366c8f978 src/3rdparty/chromium/third_party/skia/modules/pathkit/npm-asmjs/LICENSE +sha256 d27678cba0d529e77201e2d2a053628143e986aad8f1e77f7039ad4366c8f978 src/3rdparty/chromium/third_party/skia/modules/pathkit/npm-wasm/LICENSE +sha256 5366e97b4478f15a1e2fd7e6094337426597df28de50cd9fed3f2e7e87f1229e src/3rdparty/chromium/third_party/skia/third_party/etc1/LICENSE +sha256 e59bb5c5c6ba426a9ac4ba9fe667ad14c5166b12aa25be8af1d122b14fbe2e36 src/3rdparty/chromium/third_party/skia/third_party/skcms/LICENSE +sha256 e21477eed484b07902a861a1b18d1e4ecd3e6f22fa81e2410f0770cfb67290e8 src/3rdparty/chromium/third_party/skia/third_party/vulkanmemoryallocator/include/LICENSE.txt +sha256 d27678cba0d529e77201e2d2a053628143e986aad8f1e77f7039ad4366c8f978 src/3rdparty/chromium/third_party/skia/third_party/vulkanmemoryallocator/LICENSE +sha256 e59bb5c5c6ba426a9ac4ba9fe667ad14c5166b12aa25be8af1d122b14fbe2e36 src/3rdparty/chromium/third_party/skia/third_party/wuffs/LICENSE +sha256 3f6f1b520bc53e878ccbb698ad0bacef3752a5f4e4b50a26552bd70f60b40748 src/3rdparty/chromium/third_party/smhasher/LICENSE +sha256 55172044f7e241207117448a4d9d6ba1d0925c8ad66b5d4c08c70adfa9cc3de6 src/3rdparty/chromium/third_party/snappy/src/COPYING +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/spirv-cross/spirv-cross/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/spirv-headers/LICENSE +sha256 9b243f6f0bf44e295ff411a0f7b7642d1d0dff7cdc42507e9f7206f439e51b5a src/3rdparty/chromium/third_party/spirv-headers/src/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/SPIRV-Tools/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/SPIRV-Tools/src/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/SPIRV-Tools/src/utils/vscode/src/lsp/LICENSE +sha256 0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594 src/3rdparty/chromium/third_party/sqlite4java/LICENSE +sha256 06545a6ec25fbbff6c62f205f94a35be49e38f33bea827a8cfb07d7b82e4b083 src/3rdparty/chromium/third_party/sqlite/LICENSE +sha256 66e056b6e8687f32af30d5187611b98b12a8f46f07aaf62f43585f276e8f0ac9 src/3rdparty/chromium/third_party/sqlite/src/autoconf/tea/license.terms +sha256 9c6479123f32a1ed50d9a0af203dfe8972e65035b0cdeef436b5f8d0924517fe src/3rdparty/chromium/third_party/sqlite/src/LICENSE.md +sha256 033d0150b3bd78b36894c88fcc68da0c3f2e661d3b3485e8cc9a61b2c2bf7895 src/3rdparty/chromium/third_party/subresource-filter-ruleset/LICENSE +sha256 28113a6e9e2fd7584187c738a7c5484452a1c383307a1741bec50a73262fac08 src/3rdparty/chromium/third_party/sudden_motion_sensor/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/swiftshader/LICENSE.txt +sha256 ad4672b403488876635d2b455918f74b829d478da868ffc0c621a00fc99195f5 src/3rdparty/chromium/third_party/tcmalloc/LICENSE +sha256 81ebf38708899097aacaac9723679b3ffa17640c14cd3193c46b75197de18b2c src/3rdparty/chromium/third_party/tcmalloc/vendor/COPYING +sha256 d600ff20c150a675461dde76752e35f4cc3be6e7d8e70b8da3e775ea7e5ec4aa src/3rdparty/chromium/third_party/test_fonts/LICENSE +sha256 bb04dd22ee55fe3c24ee2a3c82bd1efdebbd965f7c178224a2977edc2457bb2f src/3rdparty/chromium/third_party/tlslite/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/turbine/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/ub-uiautomator/LICENSE +sha256 0a90947436dc17f047f8c95b64593e2cc9a2b6d4ff6618f2f0beba5a9b568c14 src/3rdparty/chromium/third_party/unrar/LICENSE +sha256 6ecc1687808b7d66b24f874755abfed7464d9751ed0001cd4e8e5d9bf397ff8a src/3rdparty/chromium/third_party/unrar/src/license.txt +sha256 6629d6edceffa9c68f4245b817137d2265fdab1e98068893420edb6689ccce9e src/3rdparty/chromium/third_party/usb_ids/LICENSE +sha256 7a4a31e05391919c05a996f09fc20ffc80c69af72cb3e69ac71b70c825fbdd1d src/3rdparty/chromium/third_party/usrsctp/LICENSE +sha256 fa53711b25af4b9a9b8dadfea3cb38166ec4b96760c8d62b284055554537d9ef src/3rdparty/chromium/third_party/usrsctp/usrsctplib/LICENSE.md +sha256 5a7f623a50e384aaf6d2ced068339ddf93d0a50d3a0ecbe86f125b07804ecc78 src/3rdparty/chromium/third_party/v4l-utils/COPYING.libv4l +sha256 376b54d4c5f4aa99421823fa4da93e3ab73096fce2400e89858632aa7da24a14 src/3rdparty/chromium/third_party/wds/LICENSE +sha256 376b54d4c5f4aa99421823fa4da93e3ab73096fce2400e89858632aa7da24a14 src/3rdparty/chromium/third_party/wds/src/COPYING +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/web-animations-js/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/web-animations-js/sources/COPYING +sha256 d51b39e7ed0391e75e0add75d1a162fdf4a0d6b49fba7635ed0ac4e16f324773 src/3rdparty/chromium/third_party/webdriver/COPYING +sha256 6d83e980b9b843cf6fe24cb94714d00f9b0cf69cb00d0e3b0bed018d49d6f24f src/3rdparty/chromium/third_party/webdriver/LICENSE +sha256 fec8eb2896784d7b9ef5bcb1c64b97156455a3c88df4fdd36538fb55c0decac4 src/3rdparty/chromium/third_party/webgpu-cts/src/LICENSE.txt +sha256 e30fbe869f1fa489901bb08888a919c5d50ddb5be6d16b9e4a2cb226263dd7db src/3rdparty/chromium/third_party/webgpu-cts/src/third_party/jquery/LICENSE.txt +sha256 25b7731b70c77ecd5f3bb19303fbaa99be18860f81d44f71da670fdcd04829db src/3rdparty/chromium/third_party/webrtc/common_audio/third_party/fft4g/LICENSE +sha256 41d791701e3e1c1073470403de7e342442d1e6a2af72681023b13a2f45f2125c src/3rdparty/chromium/third_party/webrtc/common_audio/third_party/spl_sqrt_floor/LICENSE +sha256 0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594 src/3rdparty/chromium/third_party/webrtc/examples/androidapp/third_party/autobanh/LICENSE +sha256 26d2d16d48825edf1194cb3907c5c0b7d01f9c5527eb0fefb949c51f304635e9 src/3rdparty/chromium/third_party/webrtc/examples/androidapp/third_party/autobanh/LICENSE.md +sha256 21a742dd8cceebb1d5df7c6f945c75ccf1ad4f0d4c17e404517500c1a7de86a4 src/3rdparty/chromium/third_party/webrtc/examples/objc/AppRTCMobile/third_party/SocketRocket/LICENSE +sha256 ab00a482b6a3902e40211b43c5d0441962ea99b6cc7c25c0f243fa270b78d482 src/3rdparty/chromium/third_party/webrtc/LICENSE +sha256 1f7a086c17fa2bdbe27d3eb6424a64b9bea9d7db89a4e220fef52ca24addb9e9 src/3rdparty/chromium/third_party/webrtc/license_template.txt +sha256 6fdbabd2c95c5efc6f1e46175278239afb9343120a3022ed0e0cb04267a6aeb3 src/3rdparty/chromium/third_party/webrtc/modules/third_party/fft/LICENSE +sha256 b29c8f13f91feb2dab7d6655444369fa9f29c0d7121a52dab90ff97e40343a85 src/3rdparty/chromium/third_party/webrtc/modules/third_party/g711/LICENSE +sha256 61862327fd00d6a4deb2c1276577782c2500f4fe103e072018fc369d8e37e876 src/3rdparty/chromium/third_party/webrtc/modules/third_party/g722/LICENSE +sha256 641007ea2810c4cfc10a5d1a44db33983ec1409305e953c7119cc2457ec5c536 src/3rdparty/chromium/third_party/webrtc/modules/third_party/portaudio/LICENSE +sha256 a508773ebf00f8c777a910e941e5fd0072195843e1b72a90eb8787d26d4ab1d7 src/3rdparty/chromium/third_party/webrtc/rtc_base/third_party/base64/LICENSE +sha256 905bc5ab1c66eea2669aee6cb5185488508264df6492f71ae1a6595180ff8c2b src/3rdparty/chromium/third_party/webrtc/rtc_base/third_party/sigslot/LICENSE +sha256 eb077b108bac4c81abe7410274af0930456790add09a6fe5316910e2b936c0f9 src/3rdparty/chromium/third_party/webxr_test_pages/LICENSE +sha256 eb077b108bac4c81abe7410274af0930456790add09a6fe5316910e2b936c0f9 src/3rdparty/chromium/third_party/webxr_test_pages/webxr-samples/js/cottontail/LICENSE.md +sha256 47754d3064047c300714af25258efa782e144fdf1e835bfd1edbeb7f8f4ef9e4 src/3rdparty/chromium/third_party/webxr_test_pages/webxr-samples/js/third-party/dat.gui/LICENSE +sha256 71819b5a0a080b6a3d35b3579817c2c558abcf3c92bb5abc052145a7c106573e src/3rdparty/chromium/third_party/webxr_test_pages/webxr-samples/js/third-party/gl-matrix/LICENSE +sha256 eb077b108bac4c81abe7410274af0930456790add09a6fe5316910e2b936c0f9 src/3rdparty/chromium/third_party/webxr_test_pages/webxr-samples/LICENSE.md +sha256 88d855a8e07a39df758fe9964f5d04d5c2fab39416e566e9d91588e254ca27dc src/3rdparty/chromium/third_party/weston/LICENSE +sha256 fdb65868f65d0fbdb05c2d3b779e10ce9969fa0c4b9262ba4f260e87086ab860 src/3rdparty/chromium/third_party/weston/src/COPYING +sha256 a34730970264d619f352598bf30295ad505a60fc3a493add8aa851645ce3ea47 src/3rdparty/chromium/third_party/weston/src/data/COPYING +sha256 20de375707692099b3132084695377ce5fec0aec05813dedcce094b8eda44386 src/3rdparty/chromium/third_party/widevine/LICENSE +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 src/3rdparty/chromium/third_party/woff2/LICENSE +sha256 0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594 src/3rdparty/chromium/third_party/wuffs/LICENSE +sha256 0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594 src/3rdparty/chromium/third_party/wuffs/src/LICENSE +sha256 b244f73c3d21edaf44ec253b9a7c389ec43313c417f52f8b71914b0c40d87325 src/3rdparty/chromium/third_party/xdg-utils/LICENSE +sha256 1cf71700f3403ca26f002e2dc1d1861dcb3d2af9bb9d98d529a903be9d7f06fc src/3rdparty/chromium/third_party/xstream/LICENSE +sha256 795f8d76eade6130129b680ac72ea81cb3e143467a65ea1f5f64946151d7fa20 src/3rdparty/chromium/third_party/yasm/source/patched-yasm/COPYING +sha256 942755efa272dbfbcd7afea7a38556801e36c16dcad002d572378367094a2593 src/3rdparty/chromium/third_party/zlib/LICENSE +sha256 a4c8c5abf82b36c22f8c9f8bd6229584f32eb9f7a2429dd9664dda43e63e9fda src/3rdparty/chromium/tools/grit/third_party/six/LICENSE +sha256 63f0c0039b477857e54708d9501ed91b7a46e828ac3c623bedbc318129ceb174 src/3rdparty/chromium/tools/origin_trials/third_party/ed25519/LICENSE +sha256 f5b244982699ca9fe5cc8fa8a7c08cf5dee5d3a0c8896892899e5df13316e1b7 src/3rdparty/chromium/tools/page_cycler/acid3/LICENSE +sha256 7389900fb68d920c6cb21b70702a2bc240523472a3fd091023d6135cf01d1c5c src/3rdparty/chromium/tools/win/ChromeDebug/ChromeDebug/LICENSE +sha256 284545e873c704952e5b1b39d457dd83a3b115a51d9f1eb5175137bd69b8fa1b src/3rdparty/chromium/url/third_party/mozilla/LICENSE.txt +sha256 f10a1808e442ae7dbfecf6b54ae4de84193a768770e189a67d5f397730acdbc9 src/3rdparty/chromium/v8/LICENSE +sha256 e7115e18444dae09d17f361ddc365fb1d342640fe500796209c63f7c80dfae10 src/3rdparty/chromium/v8/LICENSE.fdlibm +sha256 6a585a9f466654abc8fc0829d56b1bc987e3a073d31faa03bba37d33640a23cd src/3rdparty/chromium/v8/LICENSE.strongtalk +sha256 4af93c12062c58058378de2397dc1c92bbff9ddfb1d583a01c84127557ce97ca src/3rdparty/chromium/v8/LICENSE.v8 +sha256 cae8c00ca6e90a682c321ec11e7a5a345d0d317aa0b8f038e03ef03a18095b2f src/3rdparty/chromium/v8/LICENSE.valgrind +sha256 36ffd9dc085d529a7e60e1276d73ae5a030b020313e6c5408593a6ae2af39673 src/3rdparty/chromium/v8/src/third_party/siphash/LICENSE +sha256 3f712e5fbdfdbd5ee7d9b8c8152580220df55de47f4eba2f26c95c4de19ad096 src/3rdparty/chromium/v8/src/third_party/utf8-decoder/LICENSE +sha256 ebf25b8ce59c9e8883acd1ca75b6fc121937ca034f666c4077d2be739d2e1622 src/3rdparty/chromium/v8/src/third_party/valgrind/LICENSE +sha256 cfe7599e45f340a35b4635090382897ca1526bc49b5e1889047f0168d131c415 src/3rdparty/chromium/v8/src/third_party/vtune/LICENSE +sha256 15137d6c822e3ab097093a33c3a39a9df699f373f6438867ad534ff60762a947 src/3rdparty/chromium/v8/third_party/colorama/LICENSE +sha256 b9be92f13356083392d97da13cab8ae543c7911f44eff5289b693da8b17b9e08 src/3rdparty/chromium/v8/third_party/inspector_protocol/LICENSE +sha256 b9a6d9320b8f2693e8d41e496ce56caadacaddcca9be2a64a61749278f425cf2 src/3rdparty/chromium/v8/third_party/v8/builtins/LICENSE +sha256 c6596eb7be8581c18be736c846fb9173b69eccf6ef94c5135893ec56bd92ba08 src/3rdparty/chromium/v8/third_party/wasm-api/LICENSE +sha256 5d85142a5609ad177a2d7a2e7cae060b886b8b42f25c5b9803cf0cb5ee04ad2f src/3rdparty/gn/base/third_party/icu/LICENSE +sha256 845022e0c1db1abb41a6ba4cd3c4b674ec290f3359d9d3c78ae558d4c0ed9308 src/3rdparty/gn/LICENSE +sha256 eb7e9ab9690124c5c9f42bdc81383d886a3dede26345b6ed15bbad7caf81f7ea src/3rdparty/ninja/COPYING diff --git a/package/qt5/qt5webengine/qt5webengine.mk b/package/qt5/qt5webengine/qt5webengine.mk new file mode 100644 index 00000000..64c9c96c --- /dev/null +++ b/package/qt5/qt5webengine/qt5webengine.mk @@ -0,0 +1,66 @@ +################################################################################ +# +# qt5webengine +# +################################################################################ + +QT5WEBENGINE_VERSION = $(QT5_VERSION) +QT5WEBENGINE_SITE = $(QT5_SITE) +QT5WEBENGINE_SOURCE = qtwebengine-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5WEBENGINE_VERSION).tar.xz +QT5WEBENGINE_DEPENDENCIES = ffmpeg libglib2 libvpx libxkbcommon opus webp \ + qt5declarative qt5webchannel host-bison host-flex host-gperf \ + host-pkgconf host-python +QT5WEBENGINE_INSTALL_STAGING = YES + +include package/qt5/qt5webengine/chromium-latest.inc + +QT5WEBENGINE_LICENSE = GPL-2.0 or LGPL-3.0 or GPL-3.0 or GPL-3.0 with exception +QT5WEBENGINE_LICENSE_FILES = LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT \ + LICENSE.GPLv3 LICENSE.LGPL3 $(QT5WEBENGINE_CHROMIUM_LICENSE_FILES) + +ifeq ($(BR2_PACKAGE_QT5BASE_EXAMPLES),y) +QT5WEBENGINE_DEPENDENCIES += qt5svg +endif + +ifeq ($(BR2_PACKAGE_QT5BASE_XCB),y) +QT5WEBENGINE_DEPENDENCIES += xlib_libXScrnSaver xlib_libXcomposite \ + xlib_libXcursor xlib_libXi xlib_libXrandr xlib_libXtst +endif + +QT5WEBENGINE_DEPENDENCIES += host-libpng host-libnss libnss + +QT5WEBENGINE_CONF_OPTS += WEBENGINE_CONFIG+=use_system_ffmpeg + +ifeq ($(BR2_PACKAGE_QT5WEBENGINE_PROPRIETARY_CODECS),y) +QT5WEBENGINE_CONF_OPTS += WEBENGINE_CONFIG+=use_proprietary_codecs +endif + +ifeq ($(BR2_PACKAGE_QT5WEBENGINE_ALSA),y) +QT5WEBENGINE_DEPENDENCIES += alsa-lib +else +QT5WEBENGINE_CONF_OPTS += QT_CONFIG-=alsa +endif + +# QtWebengine's build system uses python, but only supports python2. We work +# around this by forcing python2 early in the PATH, via a python->python2 +# symlink. +QT5WEBENGINE_ENV = PATH=$(@D)/host-bin:$(BR_PATH) +define QT5WEBENGINE_PYTHON2_SYMLINK + mkdir -p $(@D)/host-bin + ln -sf $(HOST_DIR)/bin/python2 $(@D)/host-bin/python +endef +QT5WEBENGINE_PRE_CONFIGURE_HOOKS += QT5WEBENGINE_PYTHON2_SYMLINK + +QT5WEBENGINE_ENV += NINJAFLAGS="-j$(PARALLEL_JOBS)" + +define QT5WEBENGINE_CREATE_HOST_PKG_CONFIG + sed s%@HOST_DIR@%$(HOST_DIR)%g $(QT5WEBENGINE_PKGDIR)/host-pkg-config.in > $(@D)/host-bin/host-pkg-config + chmod +x $(@D)/host-bin/host-pkg-config +endef +QT5WEBENGINE_PRE_CONFIGURE_HOOKS += QT5WEBENGINE_CREATE_HOST_PKG_CONFIG +QT5WEBENGINE_ENV += GN_PKG_CONFIG_HOST=$(@D)/host-bin/host-pkg-config + +QT5WEBENGINE_CONF_ENV = $(QT5WEBENGINE_ENV) +QT5WEBENGINE_MAKE_ENV = $(QT5WEBENGINE_ENV) + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5webkit-examples/0001-Build-examples.patch b/package/qt5/qt5webkit-examples/0001-Build-examples.patch new file mode 100644 index 00000000..6303006f --- /dev/null +++ b/package/qt5/qt5webkit-examples/0001-Build-examples.patch @@ -0,0 +1,52 @@ +From 78f558df35860484711a600d155ae7a13ebf44b2 Mon Sep 17 00:00:00 2001 +From: =?utf-8?q?Ga=C3=ABl=20PORTAY?= +Date: Tue, 28 Nov 2017 23:14:42 -0500 +Subject: [PATCH 1/1] Build examples +MIME-Version: 1.0 +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 8bit + +This patch improves the qt5webkit examples build for 2 aspects: + + - Allows to build even if qt5base examples are not enabled + - Builds xmlpatterns example only if the qt5xmlpattern package + has been built + +Signed-off-by: Massimo Callegari +Signed-off-by: Gaël PORTAY +[gportay: build imageanalyzer example if concurrent module is built] +--- + examples/webkitwidgets/webkitwidgets.pro | 7 ++++--- + qtwebkit-examples.pro | 1 + + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/examples/webkitwidgets/webkitwidgets.pro b/examples/webkitwidgets/webkitwidgets.pro +index ab20df4..67f6785 100644 +--- a/examples/webkitwidgets/webkitwidgets.pro ++++ b/examples/webkitwidgets/webkitwidgets.pro +@@ -4,9 +4,10 @@ SUBDIRS += domtraversal \ + previewer \ + fancybrowser \ + simpleselector \ +- imageanalyzer \ + framecapture \ + browser \ + embedded \ +- scroller \ +- xmlpatterns ++ scroller ++ ++qtHaveModule(xmlpatterns): SUBDIRS += xmlpatterns ++qtHaveModule(concurrent): SUBDIRS += imageanalyzer +diff --git a/qtwebkit-examples.pro b/qtwebkit-examples.pro +index 3fcecf1..2ade7ff 100644 +--- a/qtwebkit-examples.pro ++++ b/qtwebkit-examples.pro +@@ -3,3 +3,4 @@ requires(qtHaveModule(webkit)) + load(qt_parts) + + SUBDIRS += doc ++SUBDIRS += examples +-- +2.15.0 + diff --git a/package/qt5/qt5webkit-examples/0002-Fix-QWebView-path.patch b/package/qt5/qt5webkit-examples/0002-Fix-QWebView-path.patch new file mode 100644 index 00000000..30aab301 --- /dev/null +++ b/package/qt5/qt5webkit-examples/0002-Fix-QWebView-path.patch @@ -0,0 +1,73 @@ +From 9fa73707216bd55dff380031a33aca701a7d9c8b Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 12 May 2019 23:29:05 +0200 +Subject: [PATCH] Fix QWebView path + +QWebView is installed under QtWebKitWidgets + +Fixes: + - http://autobuild.buildroot.org/results/68dd6f1ffed49f8e2570f7364e5e635573807d3e + +Signed-off-by: Fabrice Fontaine +--- + examples/webkitwidgets/formextractor/formextractor.ui | 2 +- + examples/webkitwidgets/previewer/previewer.ui | 2 +- + examples/webkitwidgets/simpleselector/window.ui | 2 +- + .../xmlpatterns/qobjectxmlmodel/forms/mainwindow.ui | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/examples/webkitwidgets/formextractor/formextractor.ui b/examples/webkitwidgets/formextractor/formextractor.ui +index 5c4afec..a38bdd5 100644 +--- a/examples/webkitwidgets/formextractor/formextractor.ui ++++ b/examples/webkitwidgets/formextractor/formextractor.ui +@@ -151,7 +151,7 @@ + + QWebView + QWidget +-
      QtWebKit/QWebView
      ++
      QtWebKitWidgets/QWebView
      +
      + + +diff --git a/examples/webkitwidgets/previewer/previewer.ui b/examples/webkitwidgets/previewer/previewer.ui +index d4c9992..69adb2e 100644 +--- a/examples/webkitwidgets/previewer/previewer.ui ++++ b/examples/webkitwidgets/previewer/previewer.ui +@@ -74,7 +74,7 @@ + + QWebView + QWidget +-
      QtWebKit/QWebView
      ++
      QtWebKitWidgets/QWebView
      +
      + + +diff --git a/examples/webkitwidgets/simpleselector/window.ui b/examples/webkitwidgets/simpleselector/window.ui +index aa824df..7906186 100644 +--- a/examples/webkitwidgets/simpleselector/window.ui ++++ b/examples/webkitwidgets/simpleselector/window.ui +@@ -64,7 +64,7 @@ + + QWebView + QWidget +-
      QtWebKit/QWebView
      ++
      QtWebKitWidgets/QWebView
      +
      + + +diff --git a/examples/webkitwidgets/xmlpatterns/qobjectxmlmodel/forms/mainwindow.ui b/examples/webkitwidgets/xmlpatterns/qobjectxmlmodel/forms/mainwindow.ui +index ad43284..000cae7 100644 +--- a/examples/webkitwidgets/xmlpatterns/qobjectxmlmodel/forms/mainwindow.ui ++++ b/examples/webkitwidgets/xmlpatterns/qobjectxmlmodel/forms/mainwindow.ui +@@ -188,7 +188,7 @@ p, li { white-space: pre-wrap; } + + QWebView + QWidget +-
      QtWebKit/QWebView
      ++
      QtWebKitWidgets/QWebView
      +
      + + +-- +2.20.1 + diff --git a/package/qt5/qt5webkit-examples/0003-Fix-QPainterPath-include.patch b/package/qt5/qt5webkit-examples/0003-Fix-QPainterPath-include.patch new file mode 100644 index 00000000..2d5e8fae --- /dev/null +++ b/package/qt5/qt5webkit-examples/0003-Fix-QPainterPath-include.patch @@ -0,0 +1,36 @@ +From 452123a4491b26c5b078934477bd5864f1d004e4 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Thu, 28 May 2020 20:58:26 +0200 +Subject: [PATCH] Fix QPainterPath include +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add missing QPainterPath (needed for Qt-5.15.0 compile). + +Fixes: + + searchlineedit.cpp:121:18: error: aggregate ‘QPainterPath myPath’ has incomplete type and cannot be defined + QPainterPath myPath; + ^~~~~~ + +Signed-off-by: Peter Seiderer +--- + examples/webkitwidgets/browser/searchlineedit.cpp | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/examples/webkitwidgets/browser/searchlineedit.cpp b/examples/webkitwidgets/browser/searchlineedit.cpp +index fbd73cb..7462c82 100644 +--- a/examples/webkitwidgets/browser/searchlineedit.cpp ++++ b/examples/webkitwidgets/browser/searchlineedit.cpp +@@ -34,6 +34,7 @@ + #include "searchlineedit.h" + + #include ++#include + #include + #include + #include +-- +2.26.2 + diff --git a/package/qt5/qt5webkit-examples/Config.in b/package/qt5/qt5webkit-examples/Config.in new file mode 100644 index 00000000..47bbcbaa --- /dev/null +++ b/package/qt5/qt5webkit-examples/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_QT5WEBKIT_EXAMPLES + bool "qt5webkit-examples" + depends on BR2_PACKAGE_QT5WEBKIT + help + Qt is a cross-platform application and UI framework for + developers using C++. + + This package contains examples for the qt5webkit module. + + http://qt.io diff --git a/package/qt5/qt5webkit-examples/qt5webkit-examples.hash b/package/qt5/qt5webkit-examples/qt5webkit-examples.hash new file mode 100644 index 00000000..ea64f6f1 --- /dev/null +++ b/package/qt5/qt5webkit-examples/qt5webkit-examples.hash @@ -0,0 +1,8 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.9/5.9.1/submodules/qtwebkit-examples-opensource-src-5.9.1.tar.xz.mirrorlist +sha256 e4ce4de6b468243abad2baabbe8ddfb05d25b186529bfe88cb8662fc983f54d0 qtwebkit-examples-opensource-src-5.9.1.tar.xz + +# Hashes for license files: +sha256 a3db6c7f3027aa27489c25a2fa259185cdee945780c32e01c60cbfabf4743b6c LICENSE.LGPLv21 +sha256 04505ee290cbe7b29b3766e00ff81987e84658f620cb43bd6e7bb52ee4234e1b LICENSE.LGPLv3 +sha256 6c3f3c31b93985f1b93bfbb35fb609d37281697d0efc220c9f91cf4b59eaabde LICENSE.GPLv2 +sha256 d3d9052b838761dbe00067168ed9ebc437734d53ebf71dea1c8e9f7532a5333b LICENSE.GPLv3 diff --git a/package/qt5/qt5webkit-examples/qt5webkit-examples.mk b/package/qt5/qt5webkit-examples/qt5webkit-examples.mk new file mode 100644 index 00000000..84bc2917 --- /dev/null +++ b/package/qt5/qt5webkit-examples/qt5webkit-examples.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# qt5webkit-examples +# +################################################################################ + +QT5WEBKIT_EXAMPLES_VERSION = 5.9.1 +QT5WEBKIT_EXAMPLES_SITE = https://download.qt.io/official_releases/qt/5.9/5.9.1/submodules +QT5WEBKIT_EXAMPLES_SOURCE = qtwebkit-examples-opensource-src-$(QT5WEBKIT_VERSION).tar.xz +QT5WEBKIT_EXAMPLES_DEPENDENCIES = qt5webkit + +QT5WEBKIT_EXAMPLES_LICENSE_FILES = LICENSE.LGPLv21 LICENSE.LGPLv3 LICENSE.GPLv2 LICENSE.GPLv3 + +QT5WEBKIT_EXAMPLES_LICENSE = LGPL-2.1 with exception or LGPL-3 or GPL-2 or GPL-3 +# Source files contain references to LGPL_EXCEPTION.txt but it is not included +# in the archive. + +ifeq ($(BR2_PACKAGE_QT5XMLPATTERNS),y) +QT5WEBKIT_EXAMPLES_DEPENDENCIES += qt5xmlpatterns +endif + +ifeq ($(BR2_PACKAGE_QT5DECLARATIVE),y) +QT5WEBKIT_EXAMPLES_DEPENDENCIES += qt5declarative +endif + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5webkit/0001-qtwebkit-fix-QA-issue-bad-RPATH.patch b/package/qt5/qt5webkit/0001-qtwebkit-fix-QA-issue-bad-RPATH.patch new file mode 100644 index 00000000..669c7e6a --- /dev/null +++ b/package/qt5/qt5webkit/0001-qtwebkit-fix-QA-issue-bad-RPATH.patch @@ -0,0 +1,36 @@ +From 1735a8484ef9ae336f8d607b56bda64c8af10c79 Mon Sep 17 00:00:00 2001 +From: Trevor Woerner +Date: Fri, 7 Feb 2014 04:07:17 +0100 +Subject: [PATCH] qtwebkit: fix QA issue (bad RPATH) + +Building qtwebkit causes a QA issue such that QtWebPluginProcess and +QtWebProcess contain bad RPATHs which point into the build location. This fix +adds a patch to not include the rpath.prf which causes this problem. + +Signed-off-by: Trevor Woerner +Signed-off-by: Martin Jansa + +Downloaded from: +https://github.com/meta-qt5/meta-qt5/blob/krogoth/recipes-qt/qt5/qtwebkit/ +0001-qtwebkit-fix-QA-issue-bad-RPATH.patch + +Signed-off-by: Gary Bisson +--- + Tools/qmake/mkspecs/features/unix/default_post.prf | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/Tools/qmake/mkspecs/features/unix/default_post.prf b/Tools/qmake/mkspecs/features/unix/default_post.prf +index fd66af6..ef754c3 100644 +--- a/Tools/qmake/mkspecs/features/unix/default_post.prf ++++ b/Tools/qmake/mkspecs/features/unix/default_post.prf +@@ -61,7 +61,6 @@ linux-*g++* { + } + } + +-contains(TEMPLATE, app): CONFIG += rpath + + CONFIG(debug, debug|release)|force_debug_info { + # Make ld not cache the symbol tables of input files in memory to avoid memory exhaustion during the linking phase. +-- +2.7.0 + diff --git a/package/qt5/qt5webkit/0002-Exclude-backtrace-API-for-non-glibc-libraries.patch b/package/qt5/qt5webkit/0002-Exclude-backtrace-API-for-non-glibc-libraries.patch new file mode 100644 index 00000000..a2597a54 --- /dev/null +++ b/package/qt5/qt5webkit/0002-Exclude-backtrace-API-for-non-glibc-libraries.patch @@ -0,0 +1,44 @@ +From 6c36f0ff8c1f5852c33d2b23714f9f187cc6ff26 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Fri, 5 Jun 2015 19:55:05 -0700 +Subject: [PATCH] Exclude backtrace() API for non-glibc libraries + +It was excluding musl with current checks, so lets make it such that it +considers only glibc when using backtrace API + +Signed-off-by: Khem Raj + +Downloaded from: +https://github.com/meta-qt5/meta-qt5/blob/krogoth/recipes-qt/qt5/qtwebkit/ +0003-Exclude-backtrace-API-for-non-glibc-libraries.patch + +Signed-off-by: Gary Bisson +--- + Source/WTF/wtf/Assertions.cpp | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Source/WTF/wtf/Assertions.cpp b/Source/WTF/wtf/Assertions.cpp +index 1b2091f..ba03a28 100644 +--- a/Source/WTF/wtf/Assertions.cpp ++++ b/Source/WTF/wtf/Assertions.cpp +@@ -61,7 +61,7 @@ + #include + #endif + +-#if (OS(DARWIN) || (OS(LINUX) && !defined(__UCLIBC__))) && !OS(ANDROID) ++#if (OS(DARWIN) || (OS(LINUX) && defined (__GLIBC__) && !defined(__UCLIBC__))) && !OS(ANDROID) + #include + #include + #include +@@ -245,7 +245,7 @@ void WTFReportArgumentAssertionFailure(const char* file, int line, const char* f + + void WTFGetBacktrace(void** stack, int* size) + { +-#if (OS(DARWIN) || (OS(LINUX) && !defined(__UCLIBC__))) && !OS(ANDROID) ++#if (OS(DARWIN) || (OS(LINUX) && defined(__GLIBC__) && !defined(__UCLIBC__))) && !OS(ANDROID) + *size = backtrace(stack, *size); + #elif OS(WINDOWS) && !OS(WINCE) + // The CaptureStackBackTrace function is available in XP, but it is not defined +-- +2.7.0 + diff --git a/package/qt5/qt5webkit/0003-Detect-32-bits-armv8-a-architecture.patch b/package/qt5/qt5webkit/0003-Detect-32-bits-armv8-a-architecture.patch new file mode 100644 index 00000000..9c2205dd --- /dev/null +++ b/package/qt5/qt5webkit/0003-Detect-32-bits-armv8-a-architecture.patch @@ -0,0 +1,48 @@ +From 068bf2d2d91382ea0d8ec24a142a30ea429704db Mon Sep 17 00:00:00 2001 +From: =?utf-8?q?Ga=C3=ABl=20PORTAY?= +Date: Tue, 15 Aug 2017 18:28:49 -0400 +Subject: [PATCH] Detect 32-bits armv8-a architecture +MIME-Version: 1.0 +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 8bit + +Adds WTF platform support for the 32-bits armv8-a architectures. + +Theses toolchains define __ARM_ARCH_8A__ (for ARM architecture version) +and __arm__ (for 32-bits word-size; __aarch64__ for 64-bits). + +This commit catches this new architecture (armv8a) within a #ifdef/#endif +inside the if statement dedicated for 32-bits ARM detection. + +Fixes: + + In file included from ./config.h:30:0, + from ... + ./wtf/Platform.h:323:6: error: #error "Not supported ARM architecture" + # error "Not supported ARM architecture" + ^~~~~ + +Upstream-Status: Backport [with adaptations] +Signed-off-by: Gaël PORTAY +--- + Source/WTF/wtf/Platform.h | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/Source/WTF/wtf/Platform.h b/Source/WTF/wtf/Platform.h +index 562840cf7..9cf656845 100644 +--- a/Source/WTF/wtf/Platform.h ++++ b/Source/WTF/wtf/Platform.h +@@ -243,6 +243,10 @@ + || defined(__ARM_ARCH_7S__) + #define WTF_ARM_ARCH_VERSION 7 + ++#elif defined(__ARM_ARCH_8__) \ ++ || defined(__ARM_ARCH_8A__) ++#define WTF_ARM_ARCH_VERSION 8 ++ + /* MSVC sets _M_ARM */ + #elif defined(_M_ARM) + #define WTF_ARM_ARCH_VERSION _M_ARM +-- +2.16.1 + diff --git a/package/qt5/qt5webkit/0004-Fix-installation-of-class-headers.patch b/package/qt5/qt5webkit/0004-Fix-installation-of-class-headers.patch new file mode 100644 index 00000000..92aab571 --- /dev/null +++ b/package/qt5/qt5webkit/0004-Fix-installation-of-class-headers.patch @@ -0,0 +1,49 @@ +From 7d763d441fd4fa78553a818ee75ac477eb6dbcbe Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ga=C3=ABl=20PORTAY?= +Date: Sun, 2 Feb 2020 10:48:50 +0100 +Subject: [PATCH] Fix installation of class headers +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Since Qt 5.11 (see commit [1]), the key word HEADER_CLASSES has been +removed. It has been replaced by a new variable GENERATED_HEADER_FILES. + +The class headers were not generated, this commit moves them directly to +HEADER_FILES. + +[1]: https://github.com/qt/qtbase/commit/9c4c136bc9f29bab1cc9684dfced55a92a8bbe96 + +Signed-off-by: Gaël PORTAY +[Converted to git formated patch] +Signed-off-by: Peter Seiderer +--- + include/QtWebKit/headers.pri | 3 +-- + include/QtWebKitWidgets/headers.pri | 3 +-- + 2 files changed, 2 insertions(+), 4 deletions(-) + +diff --git a/include/QtWebKit/headers.pri b/include/QtWebKit/headers.pri +index 6775f3a6..3a5c14cd 100644 +--- a/include/QtWebKit/headers.pri ++++ b/include/QtWebKit/headers.pri +@@ -1,5 +1,4 @@ +-SYNCQT.HEADER_FILES = WebKit/qt/Api/qwebdatabase.h WebKit/qt/Api/qwebelement.h WebKit/qt/Api/qwebhistory.h WebKit/qt/Api/qwebhistoryinterface.h WebKit/qt/Api/qwebkitglobal.h WebKit/qt/Api/qwebkitplatformplugin.h WebKit/qt/Api/qwebpluginfactory.h WebKit/qt/Api/qwebsecurityorigin.h WebKit/qt/Api/qwebsettings.h ../include/QtWebKit/qtwebkitversion.h ../include/QtWebKit/QtWebKit +-SYNCQT.HEADER_CLASSES = ../include/QtWebKit/QWebDatabase ../include/QtWebKit/QWebElement ../include/QtWebKit/QWebElementCollection ../include/QtWebKit/QWebHistoryItem ../include/QtWebKit/QWebHistory ../include/QtWebKit/QWebHistoryInterface ../include/QtWebKit/QWebSelectData ../include/QtWebKit/QWebSelectMethod ../include/QtWebKit/QWebNotificationData ../include/QtWebKit/QWebNotificationPresenter ../include/QtWebKit/QWebHapticFeedbackPlayer ../include/QtWebKit/QWebTouchModifier ../include/QtWebKit/QWebFullScreenVideoHandler ../include/QtWebKit/QWebSpellChecker ../include/QtWebKit/QWebKitPlatformPlugin ../include/QtWebKit/QWebPluginFactory ../include/QtWebKit/QWebSecurityOrigin ../include/QtWebKit/QWebSettings ../include/QtWebKit/QtWebKitVersion ++SYNCQT.HEADER_FILES = WebKit/qt/Api/qwebdatabase.h WebKit/qt/Api/qwebelement.h WebKit/qt/Api/qwebhistory.h WebKit/qt/Api/qwebhistoryinterface.h WebKit/qt/Api/qwebkitglobal.h WebKit/qt/Api/qwebkitplatformplugin.h WebKit/qt/Api/qwebpluginfactory.h WebKit/qt/Api/qwebsecurityorigin.h WebKit/qt/Api/qwebsettings.h ../include/QtWebKit/qtwebkitversion.h ../include/QtWebKit/QtWebKit ../include/QtWebKit/QWebDatabase ../include/QtWebKit/QWebElement ../include/QtWebKit/QWebElementCollection ../include/QtWebKit/QWebHistoryItem ../include/QtWebKit/QWebHistory ../include/QtWebKit/QWebHistoryInterface ../include/QtWebKit/QWebSelectData ../include/QtWebKit/QWebSelectMethod ../include/QtWebKit/QWebNotificationData ../include/QtWebKit/QWebNotificationPresenter ../include/QtWebKit/QWebHapticFeedbackPlayer ../include/QtWebKit/QWebTouchModifier ../include/QtWebKit/QWebFullScreenVideoHandler ../include/QtWebKit/QWebSpellChecker ../include/QtWebKit/QWebKitPlatformPlugin ../include/QtWebKit/QWebPluginFactory ../include/QtWebKit/QWebSecurityOrigin ../include/QtWebKit/QWebSettings ../include/QtWebKit/QtWebKitVersion + SYNCQT.PRIVATE_HEADER_FILES = WebKit/qt/Api/qhttpheader_p.h WebKit/qt/Api/qwebdatabase_p.h WebKit/qt/Api/qwebelement_p.h WebKit/qt/Api/qwebhistory_p.h WebKit/qt/Api/qwebplugindatabase_p.h WebKit/qt/Api/qwebscriptworld.h WebKit/qt/Api/qwebscriptworld_p.h WebKit/qt/Api/qwebsecurityorigin_p.h WebKit2/UIProcess/API/qt/qquicknetworkreply_p.h WebKit2/UIProcess/API/qt/qquicknetworkrequest_p.h WebKit2/UIProcess/API/qt/qquickurlschemedelegate_p.h WebKit2/UIProcess/API/qt/qquickwebpage_p.h WebKit2/UIProcess/API/qt/qquickwebpage_p_p.h WebKit2/UIProcess/API/qt/qquickwebview_p.h WebKit2/UIProcess/API/qt/qquickwebview_p_p.h WebKit2/UIProcess/API/qt/qtwebsecurityorigin_p.h WebKit2/UIProcess/API/qt/qwebchannelwebkittransport_p.h WebKit2/UIProcess/API/qt/qwebdownloaditem_p.h WebKit2/UIProcess/API/qt/qwebdownloaditem_p_p.h WebKit2/UIProcess/API/qt/qwebiconimageprovider_p.h WebKit2/UIProcess/API/qt/qwebkittest_p.h WebKit2/UIProcess/API/qt/qwebloadrequest_p.h WebKit2/UIProcess/API/qt/qwebnavigationhistory_p.h WebKit2/UIProcess/API/qt/qwebnavigationhistory_p_p.h WebKit2/UIProcess/API/qt/qwebnavigationrequest_p.h WebKit2/UIProcess/API/qt/qwebpermissionrequest_p.h WebKit2/UIProcess/API/qt/qwebpreferences_p.h WebKit2/UIProcess/API/qt/qwebpreferences_p_p.h WebKit2/UIProcess/API/qt/raw/qrawwebview_p.h WebKit2/UIProcess/API/qt/raw/qrawwebview_p_p.h WebKit2/UIProcess/API/qt/tests/bytearraytestdata.h WebKit2/UIProcess/API/qt/tests/testwindow.h WebKit2/UIProcess/API/qt/tests/util.h + SYNCQT.INJECTED_PRIVATE_HEADER_FILES = + SYNCQT.QPA_HEADER_FILES = +diff --git a/include/QtWebKitWidgets/headers.pri b/include/QtWebKitWidgets/headers.pri +index 9d386e29..2b8b095c 100644 +--- a/include/QtWebKitWidgets/headers.pri ++++ b/include/QtWebKitWidgets/headers.pri +@@ -1,5 +1,4 @@ +-SYNCQT.HEADER_FILES = WebKit/qt/WidgetApi/qgraphicswebview.h WebKit/qt/WidgetApi/qwebframe.h WebKit/qt/WidgetApi/qwebinspector.h WebKit/qt/WidgetApi/qwebpage.h WebKit/qt/WidgetApi/qwebview.h ../include/QtWebKitWidgets/qtwebkitwidgetsversion.h ../include/QtWebKitWidgets/QtWebKitWidgets +-SYNCQT.HEADER_CLASSES = ../include/QtWebKitWidgets/QGraphicsWebView ../include/QtWebKitWidgets/QWebHitTestResult ../include/QtWebKitWidgets/QWebFrame ../include/QtWebKitWidgets/QWebInspector ../include/QtWebKitWidgets/QWebPage ../include/QtWebKitWidgets/QWebView ../include/QtWebKitWidgets/QtWebKitWidgetsVersion ++SYNCQT.HEADER_FILES = WebKit/qt/WidgetApi/qgraphicswebview.h WebKit/qt/WidgetApi/qwebframe.h WebKit/qt/WidgetApi/qwebinspector.h WebKit/qt/WidgetApi/qwebpage.h WebKit/qt/WidgetApi/qwebview.h ../include/QtWebKitWidgets/qtwebkitwidgetsversion.h ../include/QtWebKitWidgets/QtWebKitWidgets ../include/QtWebKitWidgets/QGraphicsWebView ../include/QtWebKitWidgets/QWebHitTestResult ../include/QtWebKitWidgets/QWebFrame ../include/QtWebKitWidgets/QWebInspector ../include/QtWebKitWidgets/QWebPage ../include/QtWebKitWidgets/QWebView ../include/QtWebKitWidgets/QtWebKitWidgetsVersion + SYNCQT.PRIVATE_HEADER_FILES = WebKit/qt/WidgetApi/qwebframe_p.h WebKit/qt/WidgetApi/qwebinspector_p.h WebKit/qt/WidgetApi/qwebpage_p.h WebKit/qt/WidgetApi/qwebviewaccessible_p.h + SYNCQT.INJECTED_PRIVATE_HEADER_FILES = + SYNCQT.QPA_HEADER_FILES = +-- +2.25.0 + diff --git a/package/qt5/qt5webkit/0005-Fix-ICU-related-compile-failures.patch b/package/qt5/qt5webkit/0005-Fix-ICU-related-compile-failures.patch new file mode 100644 index 00000000..1a99eb7f --- /dev/null +++ b/package/qt5/qt5webkit/0005-Fix-ICU-related-compile-failures.patch @@ -0,0 +1,67 @@ +From 38e3436db7222ac403a405db7e0fd1d472f1704a Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Sun, 2 Feb 2020 10:51:00 +0100 +Subject: [PATCH] Fix ICU related compile failures. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The ICU macro U16_NEXT() needs a trailing semicolon. + +Fixes: + + platform/graphics/SegmentedFontData.cpp:65:9: error: expected ‘;’ before ‘if’ + dom/Document.cpp:3850:5: error: expected ‘;’ before ‘if’ + dom/Document.cpp:3855:9: error: expected ‘;’ before ‘if’ + dom/Document.cpp:3918:9: error: expected ‘;’ before ‘if’ + +Signed-off-by: Peter Seiderer +--- + Source/WebCore/dom/Document.cpp | 6 +++--- + Source/WebCore/platform/graphics/SegmentedFontData.cpp | 2 +- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/Source/WebCore/dom/Document.cpp b/Source/WebCore/dom/Document.cpp +index af63b141..26f7312b 100644 +--- a/Source/WebCore/dom/Document.cpp ++++ b/Source/WebCore/dom/Document.cpp +@@ -3846,12 +3846,12 @@ static bool isValidNameNonASCII(const UChar* characters, unsigned length) + unsigned i = 0; + + UChar32 c; +- U16_NEXT(characters, i, length, c) ++ U16_NEXT(characters, i, length, c); + if (!isValidNameStart(c)) + return false; + + while (i < length) { +- U16_NEXT(characters, i, length, c) ++ U16_NEXT(characters, i, length, c); + if (!isValidNamePart(c)) + return false; + } +@@ -3914,7 +3914,7 @@ bool Document::parseQualifiedName(const String& qualifiedName, String& prefix, S + const UChar* s = qualifiedName.characters(); + for (unsigned i = 0; i < length;) { + UChar32 c; +- U16_NEXT(s, i, length, c) ++ U16_NEXT(s, i, length, c); + if (c == ':') { + if (sawColon) { + ec = NAMESPACE_ERR; +diff --git a/Source/WebCore/platform/graphics/SegmentedFontData.cpp b/Source/WebCore/platform/graphics/SegmentedFontData.cpp +index efb20a8c..99b3e86c 100644 +--- a/Source/WebCore/platform/graphics/SegmentedFontData.cpp ++++ b/Source/WebCore/platform/graphics/SegmentedFontData.cpp +@@ -61,7 +61,7 @@ bool SegmentedFontData::containsCharacters(const UChar* characters, int length) + { + UChar32 c; + for (int i = 0; i < length; ) { +- U16_NEXT(characters, i, length, c) ++ U16_NEXT(characters, i, length, c); + if (!containsCharacter(c)) + return false; + } +-- +2.25.0 + diff --git a/package/qt5/qt5webkit/0006-configure-remove-legacy-reference-to-qtConfig-mircli.patch b/package/qt5/qt5webkit/0006-configure-remove-legacy-reference-to-qtConfig-mircli.patch new file mode 100644 index 00000000..d9b94697 --- /dev/null +++ b/package/qt5/qt5webkit/0006-configure-remove-legacy-reference-to-qtConfig-mircli.patch @@ -0,0 +1,34 @@ +From c408484e3a442ecf99d3cc61402f20c45c894b7c Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Mon, 3 Feb 2020 21:19:57 +0100 +Subject: [PATCH] configure: remove legacy reference to qtConfig(mirclient) + +The optio mirclient is removed since Qt-5.14.x (see [1]) +Fixes: + + Project ERROR: Could not find feature mirclient. + +[1] https://code.qt.io/cgit/qt/qtbase.git/commit/?id=8c73ddd8e3fb43cc22fa111b855ab1f9f5b83405 + +Signed-off-by: Peter Seiderer +--- + Tools/qmake/mkspecs/features/configure.prf | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/Tools/qmake/mkspecs/features/configure.prf b/Tools/qmake/mkspecs/features/configure.prf +index 23d99040..783f6752 100644 +--- a/Tools/qmake/mkspecs/features/configure.prf ++++ b/Tools/qmake/mkspecs/features/configure.prf +@@ -130,9 +130,6 @@ defineTest(finalizeConfigure) { + addReasonForSkippingBuild("Build not supported on Android.") + } + QT_FOR_CONFIG += gui-private +- production_build:qtConfig(mirclient) { +- addReasonForSkippingBuild("Build not supported on Ubuntu Touch.") +- } + !gnu_thin_archives:!win32-msvc2013:!mingw:qtConfig(static) { + addReasonForSkippingBuild("QtWebKit cannot be built as a static library on this platform. Check your configuration in qtbase/config.summary.") + } +-- +2.25.0 + diff --git a/package/qt5/qt5webkit/0007-Let-Bison-generate-the-header-directly-to-fix-build-.patch b/package/qt5/qt5webkit/0007-Let-Bison-generate-the-header-directly-to-fix-build-.patch new file mode 100644 index 00000000..7bb81b12 --- /dev/null +++ b/package/qt5/qt5webkit/0007-Let-Bison-generate-the-header-directly-to-fix-build-.patch @@ -0,0 +1,52 @@ +From 894a5448ee8ce0f134845c877b4c0a2a660e4ab3 Mon Sep 17 00:00:00 2001 +From: Dmitry Shachnev +Date: Tue, 4 Aug 2020 21:04:06 +0300 +Subject: [PATCH] Let Bison generate the header directly, to fix build with + Bison 3.7 + +Starting with Bison 3.7, the generated C++ file #include's the header +by default, instead of duplicating it. So we should not delete it. + +Remove the code to add #ifdef guards to the header, since Bison adds +them itself since version 2.6.3. + +[Original patch taken from +https://gitweb.gentoo.org/repo/gentoo.git/plain/dev-qt/qtwebkit/files/qtwebkit-5.212.0_pre20200309-bison-3.7.patch?id=69e618c88a9134f754264efc11aa0b1fdc028b88 +ported to qtwebkit-opensource-src-5.9.1] +Signed-off-by: Peter Seiderer +--- + Source/WebCore/css/makegrammar.pl | 21 +-------------------- + 1 file changed, 1 insertion(+), 20 deletions(-) + +diff --git a/Source/WebCore/css/makegrammar.pl b/Source/WebCore/css/makegrammar.pl +index 4e0452ed..9ef32963 100644 +--- a/Source/WebCore/css/makegrammar.pl ++++ b/Source/WebCore/css/makegrammar.pl +@@ -73,23 +73,4 @@ if ($suffix eq ".y.in") { + } + + my $fileBase = File::Spec->join($outputDir, $filename); +-system("$bison -d -p $symbolsPrefix $grammarFilePath -o $fileBase.cpp"); +- +-open HEADER, ">$fileBase.h" or die; +-print HEADER << "EOF"; +-#ifndef CSSGRAMMAR_H +-#define CSSGRAMMAR_H +-EOF +- +-open HPP, "<$fileBase.cpp.h" or open HPP, "<$fileBase.hpp" or die; +-while () { +- print HEADER; +-} +-close HPP; +- +-print HEADER "#endif\n"; +-close HEADER; +- +-unlink("$fileBase.cpp.h"); +-unlink("$fileBase.hpp"); +- ++system("$bison --defines=$fileBase.h -p $symbolsPrefix $grammarFilePath -o $fileBase.cpp"); +-- +2.28.0 + diff --git a/package/qt5/qt5webkit/0008-let-bison-generate-the-header-directly-to-fix-build-.patch b/package/qt5/qt5webkit/0008-let-bison-generate-the-header-directly-to-fix-build-.patch new file mode 100644 index 00000000..9deb2d8c --- /dev/null +++ b/package/qt5/qt5webkit/0008-let-bison-generate-the-header-directly-to-fix-build-.patch @@ -0,0 +1,31 @@ +From 8959e226fac7f73b9a40e202610bd5e12334561b Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Tue, 15 Sep 2020 19:11:18 +0200 +Subject: [PATCH] let bison generate the header directly, to fix build with + bison 3.7 + +Do the same as the patch taken from [1] for the bison call in +Source/WebCore/DerivedSources.pri to fix file generation +for bison 3.7. + +Signed-off-by: Peter Seiderer +--- + Source/WebCore/DerivedSources.pri | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Source/WebCore/DerivedSources.pri b/Source/WebCore/DerivedSources.pri +index 57a6b0f7..e9f52614 100644 +--- a/Source/WebCore/DerivedSources.pri ++++ b/Source/WebCore/DerivedSources.pri +@@ -987,7 +987,7 @@ GENERATORS += pluginsresources + # GENERATOR 11: XPATH grammar + xpathbison.output = ${QMAKE_FILE_BASE}.cpp + xpathbison.input = XPATHBISON +-xpathbison.commands = bison -d -p xpathyy ${QMAKE_FILE_NAME} -o ${QMAKE_FUNC_FILE_OUT_PATH}/${QMAKE_FILE_BASE}.tab.c && $(MOVE) ${QMAKE_FUNC_FILE_OUT_PATH}$${QMAKE_DIR_SEP}${QMAKE_FILE_BASE}.tab.c ${QMAKE_FUNC_FILE_OUT_PATH}$${QMAKE_DIR_SEP}${QMAKE_FILE_BASE}.cpp && $(MOVE) ${QMAKE_FUNC_FILE_OUT_PATH}$${QMAKE_DIR_SEP}${QMAKE_FILE_BASE}.tab.h ${QMAKE_FUNC_FILE_OUT_PATH}$${QMAKE_DIR_SEP}${QMAKE_FILE_BASE}.h ++xpathbison.commands = bison --defines=${QMAKE_FUNC_FILE_OUT_PATH}/${QMAKE_FILE_BASE}.h -p xpathyy ${QMAKE_FILE_NAME} -o ${QMAKE_FUNC_FILE_OUT_PATH}/${QMAKE_FILE_BASE}.cpp + xpathbison.depends = ${QMAKE_FILE_NAME} + GENERATORS += xpathbison + +-- +2.28.0 + diff --git a/package/qt5/qt5webkit/0009-Fix-ICU-related-compile-failures-from-capital-bool-d.patch b/package/qt5/qt5webkit/0009-Fix-ICU-related-compile-failures-from-capital-bool-d.patch new file mode 100644 index 00000000..7d941a56 --- /dev/null +++ b/package/qt5/qt5webkit/0009-Fix-ICU-related-compile-failures-from-capital-bool-d.patch @@ -0,0 +1,99 @@ +From 37ee268d9d07a8dad02c1d8db3bf96e0b30df10b Mon Sep 17 00:00:00 2001 +From: Henri Roosen +Date: Thu, 18 Mar 2021 11:53:57 +0100 +Subject: [PATCH] Fix ICU related compile failures from capital bool defines + +See ICU-21267 + +Signed-off-by: Henri Roosen +--- + .../platform/text/TextBreakIteratorICU.cpp | 16 ++++++++-------- + Source/WebCore/platform/text/TextCodecICU.cpp | 2 +- + 2 files changed, 9 insertions(+), 9 deletions(-) + +diff --git a/Source/WebCore/platform/text/TextBreakIteratorICU.cpp b/Source/WebCore/platform/text/TextBreakIteratorICU.cpp +index b4046ac9..832890a2 100644 +--- a/Source/WebCore/platform/text/TextBreakIteratorICU.cpp ++++ b/Source/WebCore/platform/text/TextBreakIteratorICU.cpp +@@ -214,12 +214,12 @@ static inline bool textInChunkOrOutOfRange(UText* text, int64_t nativeIndex, int + // Ensure chunk offset is well formed if computed offset exceeds int32_t range. + ASSERT(offset < numeric_limits::max()); + text->chunkOffset = offset < numeric_limits::max() ? static_cast(offset) : 0; +- isAccessible = TRUE; ++ isAccessible = true; + return true; + } + if (nativeIndex >= nativeLength && text->chunkNativeLimit == nativeLength) { + text->chunkOffset = text->chunkLength; +- isAccessible = FALSE; ++ isAccessible = false; + return true; + } + } else { +@@ -228,12 +228,12 @@ static inline bool textInChunkOrOutOfRange(UText* text, int64_t nativeIndex, int + // Ensure chunk offset is well formed if computed offset exceeds int32_t range. + ASSERT(offset < numeric_limits::max()); + text->chunkOffset = offset < numeric_limits::max() ? static_cast(offset) : 0; +- isAccessible = TRUE; ++ isAccessible = true; + return true; + } + if (nativeIndex <= 0 && !text->chunkNativeStart) { + text->chunkOffset = 0; +- isAccessible = FALSE; ++ isAccessible = false; + return true; + } + } +@@ -243,7 +243,7 @@ static inline bool textInChunkOrOutOfRange(UText* text, int64_t nativeIndex, int + static UBool textLatin1Access(UText* text, int64_t nativeIndex, UBool forward) + { + if (!text->context) +- return FALSE; ++ return false; + int64_t nativeLength = textNativeLength(text); + UBool isAccessible; + if (textInChunkOrOutOfRange(text, nativeIndex, nativeLength, forward, isAccessible)) +@@ -263,7 +263,7 @@ static UBool textLatin1Access(UText* text, int64_t nativeIndex, UBool forward) + ASSERT(newContext == PriorContext); + textLatin1SwitchToPriorContext(text, nativeIndex, nativeLength, forward); + } +- return TRUE; ++ return true; + } + + static const struct UTextFuncs textLatin1Funcs = { +@@ -364,7 +364,7 @@ static void textUTF16SwitchToPriorContext(UText* text, int64_t nativeIndex, int6 + static UBool textUTF16Access(UText* text, int64_t nativeIndex, UBool forward) + { + if (!text->context) +- return FALSE; ++ return false; + int64_t nativeLength = textNativeLength(text); + UBool isAccessible; + if (textInChunkOrOutOfRange(text, nativeIndex, nativeLength, forward, isAccessible)) +@@ -384,7 +384,7 @@ static UBool textUTF16Access(UText* text, int64_t nativeIndex, UBool forward) + ASSERT(newContext == PriorContext); + textUTF16SwitchToPriorContext(text, nativeIndex, nativeLength, forward); + } +- return TRUE; ++ return true; + } + + static const struct UTextFuncs textUTF16Funcs = { +diff --git a/Source/WebCore/platform/text/TextCodecICU.cpp b/Source/WebCore/platform/text/TextCodecICU.cpp +index 86d4ea17..da152edd 100644 +--- a/Source/WebCore/platform/text/TextCodecICU.cpp ++++ b/Source/WebCore/platform/text/TextCodecICU.cpp +@@ -269,7 +269,7 @@ void TextCodecICU::createICUConverter() const + m_converterICU = ucnv_open(m_canonicalConverterName, &err); + ASSERT(U_SUCCESS(err)); + if (m_converterICU) +- ucnv_setFallback(m_converterICU, TRUE); ++ ucnv_setFallback(m_converterICU, true); + } + + int TextCodecICU::decodeToBuffer(UChar* target, UChar* targetLimit, const char*& source, const char* sourceLimit, int32_t* offsets, bool flush, UErrorCode& err) +-- +2.20.1 + diff --git a/package/qt5/qt5webkit/Config.in b/package/qt5/qt5webkit/Config.in new file mode 100644 index 00000000..65f08d1c --- /dev/null +++ b/package/qt5/qt5webkit/Config.in @@ -0,0 +1,39 @@ +config BR2_PACKAGE_QT5WEBKIT + bool "qt5webkit" + depends on !BR2_STATIC_LIBS + depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE + depends on BR2_INSTALL_LIBSTDCPP # leveldb + depends on BR2_HOST_GCC_AT_LEAST_4_9 # icu + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # icu + depends on BR2_TOOLCHAIN_HAS_THREADS # leveldb + depends on !BR2_BINFMT_FLAT # icu + # assumes a FPU is available on MIPS + depends on !BR2_MIPS_SOFT_FLOAT + select BR2_PACKAGE_LEVELDB + select BR2_PACKAGE_QT5BASE_ICU + select BR2_PACKAGE_QT5BASE_GUI + select BR2_PACKAGE_SQLITE + select BR2_PACKAGE_XLIB_LIBXEXT if BR2_PACKAGE_QT5BASE_XCB + select BR2_PACKAGE_XLIB_LIBXRENDER if BR2_PACKAGE_QT5BASE_XCB + help + Qt is a cross-platform application and UI framework for + developers using C++. + + The Qt WebKit module provides the WebView API, which + allows QML applications to render regions of dynamic + web content. + + This package has been removed from the official release + packages since Qt5.6.0, but it is still available for users + to build it from source. This is useful for platforms + without GPU since the successor (QtWebEngine) requires + OpenGL support. + + http://doc.qt.io/archives/qt-5.5/qtwebkit-index.html + +comment "qt5webkit needs a toolchain w/ dynamic library, gcc >= 4.9, host gcc >= 4.9" + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || \ + !BR2_HOST_GCC_AT_LEAST_4_9 + depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE + depends on !BR2_BINFMT_FLAT + depends on !BR2_MIPS_SOFT_FLOAT diff --git a/package/qt5/qt5webkit/qt5webkit.hash b/package/qt5/qt5webkit/qt5webkit.hash new file mode 100644 index 00000000..312d5827 --- /dev/null +++ b/package/qt5/qt5webkit/qt5webkit.hash @@ -0,0 +1,7 @@ +# hash from: https://download.qt.io/official_releases/qt/5.9/5.9.1/submodules/qtwebkit-opensource-src-5.9.1.tar.xz.mirrorlist +sha256 28a560becd800a4229bfac317c2e5407cd3cc95308bc4c3ca90dba2577b052cf qtwebkit-opensource-src-5.9.1.tar.xz + +# Hashes for license files: +sha256 7555fa34bc131a75ca56d65c40cc1ea8f9515d23e353d4c15d58573a042f7805 Source/WebCore/LICENSE-LGPL-2 +sha256 f2b3bd09663381deb99721109d22b47af1213bb43007a8b56a06c6375c8050ce Source/WebCore/LICENSE-LGPL-2.1 +sha256 a3db6c7f3027aa27489c25a2fa259185cdee945780c32e01c60cbfabf4743b6c LICENSE.LGPLv21 diff --git a/package/qt5/qt5webkit/qt5webkit.mk b/package/qt5/qt5webkit/qt5webkit.mk new file mode 100644 index 00000000..dd99661b --- /dev/null +++ b/package/qt5/qt5webkit/qt5webkit.mk @@ -0,0 +1,49 @@ +################################################################################ +# +# qt5webkit +# +################################################################################ + +QT5WEBKIT_VERSION = 5.9.1 +QT5WEBKIT_SITE = https://download.qt.io/official_releases/qt/5.9/5.9.1/submodules +QT5WEBKIT_SOURCE = qtwebkit-opensource-src-$(QT5WEBKIT_VERSION).tar.xz +QT5WEBKIT_DEPENDENCIES = \ + host-bison host-flex host-gperf host-python host-ruby \ + leveldb sqlite +QT5WEBKIT_INSTALL_STAGING = YES + +QT5WEBKIT_LICENSE_FILES = Source/WebCore/LICENSE-LGPL-2 Source/WebCore/LICENSE-LGPL-2.1 + +QT5WEBKIT_LICENSE = LGPL-2.1+, BSD-3-Clause, BSD-2-Clause +# Source files contain references to LGPL_EXCEPTION.txt but it is not included +# in the archive. +QT5WEBKIT_LICENSE_FILES += LICENSE.LGPLv21 + +ifeq ($(BR2_PACKAGE_QT5BASE_XCB),y) +QT5WEBKIT_DEPENDENCIES += xlib_libXext xlib_libXrender +endif + +ifeq ($(BR2_PACKAGE_QT5DECLARATIVE),y) +QT5WEBKIT_DEPENDENCIES += qt5declarative +endif + +# QtWebkit's build system uses python, but only supports python2. We work +# around this by forcing python2 early in the PATH, via a python->python2 +# symlink. +QT5WEBKIT_CONF_ENV = PATH=$(@D)/host-bin:$(BR_PATH) +QT5WEBKIT_MAKE_ENV = PATH=$(@D)/host-bin:$(BR_PATH) +define QT5WEBKIT_PYTHON2_SYMLINK + mkdir -p $(@D)/host-bin + ln -sf $(HOST_DIR)/bin/python2 $(@D)/host-bin/python +endef +QT5WEBKIT_PRE_CONFIGURE_HOOKS += QT5WEBKIT_PYTHON2_SYMLINK + +QT5WEBKIT_CONF_OPTS = WEBKIT_CONFIG+=use_system_leveldb + +define QT5WEBKIT_INSTALL_TARGET_EXTRAS + cp -dpf $(@D)/bin/* $(TARGET_DIR)/usr/bin/ +endef + +QT5WEBKIT_POST_INSTALL_TARGET_HOOKS += QT5WEBKIT_INSTALL_TARGET_EXTRAS + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5websockets/Config.in b/package/qt5/qt5websockets/Config.in new file mode 100644 index 00000000..678fb6fa --- /dev/null +++ b/package/qt5/qt5websockets/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_QT5WEBSOCKETS + bool "qt5websockets" + select BR2_PACKAGE_QT5BASE_NETWORK + help + Qt is a cross-platform application and UI framework for + developers using C++. + + The Qt WebSockets module provides C++ and QML interfaces + that enable Qt applications to act as a server that can + process WebSocket requests, or a client that can + consume data received from the server, or both. + + http://doc.qt.io/qt-5/qtwebsockets-index.html diff --git a/package/qt5/qt5websockets/qt5websockets.hash b/package/qt5/qt5websockets/qt5websockets.hash new file mode 100644 index 00000000..29a9ebe4 --- /dev/null +++ b/package/qt5/qt5websockets/qt5websockets.hash @@ -0,0 +1,8 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtwebsockets-everywhere-src-5.15.2.tar.xz.sha256 +sha256 a0b42d85dd34ff6e2d23400e02f83d8b85bcd80e60efd1521d12d9625d4a233f qtwebsockets-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.GPL2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 0dbe024961f6ab5c52689cbd036c977975d0d0f6a67ff97762d96cb819dd5652 LICENSE.GPL3-EXCEPT +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 LICENSE.LGPL3 diff --git a/package/qt5/qt5websockets/qt5websockets.mk b/package/qt5/qt5websockets/qt5websockets.mk new file mode 100644 index 00000000..a35cdc57 --- /dev/null +++ b/package/qt5/qt5websockets/qt5websockets.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# qt5websockets +# +################################################################################ + +QT5WEBSOCKETS_VERSION = $(QT5_VERSION) +QT5WEBSOCKETS_SITE = $(QT5_SITE) +QT5WEBSOCKETS_SOURCE = qtwebsockets-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5WEBSOCKETS_VERSION).tar.xz +QT5WEBSOCKETS_INSTALL_STAGING = YES +QT5WEBSOCKETS_LICENSE = GPL-2.0+ or LGPL-3.0, GPL-3.0 with exception(tools) +QT5WEBSOCKETS_LICENSE_FILES = LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT LICENSE.LGPL3 + +ifeq ($(BR2_PACKAGE_QT5BASE_EXAMPLES),y) +QT5WEBSOCKETS_LICENSE += , BSD-3-Clause (examples) +endif + +ifeq ($(BR2_PACKAGE_QT5DECLARATIVE),y) +QT5WEBSOCKETS_DEPENDENCIES += qt5declarative +endif + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5webview/Config.in b/package/qt5/qt5webview/Config.in new file mode 100644 index 00000000..3a165c50 --- /dev/null +++ b/package/qt5/qt5webview/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_QT5WEBVIEW + bool "qt5webview" + depends on BR2_PACKAGE_QT5WEBENGINE + help + Qt is a cross-platform application and UI framework for + developers using C++. + + Qt WebView provides a way to display web content in + a QML application without necessarily including + a full web browser stack by using native APIs where + it makes sense. + + https://doc.qt.io/qt-5/qtwebview-index.html + +comment "qt5webview needs qt5webengine module" + depends on !BR2_PACKAGE_QT5WEBENGINE diff --git a/package/qt5/qt5webview/qt5webview.hash b/package/qt5/qt5webview/qt5webview.hash new file mode 100644 index 00000000..c1cee9cf --- /dev/null +++ b/package/qt5/qt5webview/qt5webview.hash @@ -0,0 +1,8 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtwebview-everywhere-src-5.15.2.tar.xz.sha256 +sha256 be9f46167e4977ead5ef5ecf883fdb812a4120f2436383583792f65557e481e7 qtwebview-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 ed8742a95cb9db653a09b050e27ccff5e67ba69c14aa2c3137f2a4e1892f6c0d LICENSE.FDL +sha256 edfe70e99be2a7c109d860b19204609e582720b211c50caedac729da372a1253 LICENSE.GPLv2 +sha256 245248009fd0af1725d183248380e476c1283383909358a13686606352bf2a17 LICENSE.GPLv3 +sha256 5ceb37d1c7c1d92878b82af3c0fd5558087f3d5a08a3a4d43850bad4ad265a52 LICENSE.LGPLv3 diff --git a/package/qt5/qt5webview/qt5webview.mk b/package/qt5/qt5webview/qt5webview.mk new file mode 100644 index 00000000..0f37f3eb --- /dev/null +++ b/package/qt5/qt5webview/qt5webview.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# qt5webview +# +################################################################################ + +QT5WEBVIEW_VERSION = $(QT5_VERSION) +QT5WEBVIEW_SITE = $(QT5_SITE) +QT5WEBVIEW_SOURCE = qtwebview-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5WEBVIEW_VERSION).tar.xz +QT5WEBVIEW_DEPENDENCIES = qt5webengine +QT5WEBVIEW_INSTALL_STAGING = YES +QT5WEBVIEW_LICENSE = GPL-2.0+ or LGPL-3.0, GPL-3.0, GFDL-1.3 (docs) +QT5WEBVIEW_LICENSE_FILES = LICENSE.GPLv2 LICENSE.GPLv3 LICENSE.LGPLv3 LICENSE.FDL + +ifeq ($(BR2_PACKAGE_QT5BASE_EXAMPLES),y) +QT5WEBVIEW_LICENSE += , BSD-3-Clause (examples) +endif + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5x11extras/Config.in b/package/qt5/qt5x11extras/Config.in new file mode 100644 index 00000000..ff4cc115 --- /dev/null +++ b/package/qt5/qt5x11extras/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_QT5X11EXTRAS + bool "qt5x11extras" + depends on BR2_PACKAGE_QT5BASE_XCB + select BR2_PACKAGE_QT5BASE_WIDGETS + help + Qt is a cross-platform application and UI framework for + developers using C++. + + Qt X11 Extras enables the Qt programmer to write + applications for the Linux/X11 platform. + + http://doc.qt.io/qt-5/qtx11extras-index.html diff --git a/package/qt5/qt5x11extras/qt5x11extras.hash b/package/qt5/qt5x11extras/qt5x11extras.hash new file mode 100644 index 00000000..08e6753f --- /dev/null +++ b/package/qt5/qt5x11extras/qt5x11extras.hash @@ -0,0 +1,9 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtx11extras-everywhere-src-5.15.2.tar.xz.sha256 +sha256 7014702ee9a644a5a93da70848ac47c18851d4f8ed622b29a72eed9282fc6e3e qtx11extras-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.GPL2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 0dbe024961f6ab5c52689cbd036c977975d0d0f6a67ff97762d96cb819dd5652 LICENSE.GPL3-EXCEPT +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 LICENSE.LGPL3 +sha256 ed8742a95cb9db653a09b050e27ccff5e67ba69c14aa2c3137f2a4e1892f6c0d LICENSE.FDL diff --git a/package/qt5/qt5x11extras/qt5x11extras.mk b/package/qt5/qt5x11extras/qt5x11extras.mk new file mode 100644 index 00000000..075d36dc --- /dev/null +++ b/package/qt5/qt5x11extras/qt5x11extras.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# qt5x11extras +# +################################################################################ + +QT5X11EXTRAS_VERSION = $(QT5_VERSION) +QT5X11EXTRAS_SITE = $(QT5_SITE) +QT5X11EXTRAS_SOURCE = qtx11extras-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5X11EXTRAS_VERSION).tar.xz +QT5X11EXTRAS_INSTALL_STAGING = YES +QT5X11EXTRAS_LICENSE = GPL-2.0+ or LGPL-3.0, GPL-3.0 with exception(tools), GFDL-1.3 (docs) +QT5X11EXTRAS_LICENSE_FILES = LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT LICENSE.LGPL3 LICENSE.FDL + +$(eval $(qmake-package)) diff --git a/package/qt5/qt5xmlpatterns/Config.in b/package/qt5/qt5xmlpatterns/Config.in new file mode 100644 index 00000000..2f3eb24f --- /dev/null +++ b/package/qt5/qt5xmlpatterns/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_QT5XMLPATTERNS + bool "qt5xmlpatterns" + help + Qt is a cross-platform application and UI framework for + developers using C++. + + The Qt XML Patterns module provides support for XPath, + XQuery, XSLT, and XML Schema validation. + + http://doc.qt.io/qt-5/qtxmlpatterns-index.html diff --git a/package/qt5/qt5xmlpatterns/qt5xmlpatterns.hash b/package/qt5/qt5xmlpatterns/qt5xmlpatterns.hash new file mode 100644 index 00000000..682e114a --- /dev/null +++ b/package/qt5/qt5xmlpatterns/qt5xmlpatterns.hash @@ -0,0 +1,9 @@ +# Hash from: https://download.qt.io/official_releases/qt/5.15/5.15.2/submodules/qtxmlpatterns-everywhere-src-5.15.2.tar.xz.sha256 +sha256 76ea2162a7c349188d7e7e4f6c77b78e8a205494c90fee3cea3487a1ae2cf2fa qtxmlpatterns-everywhere-src-5.15.2.tar.xz + +# Hashes for license files: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.GPL2 +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE.GPL3 +sha256 0dbe024961f6ab5c52689cbd036c977975d0d0f6a67ff97762d96cb819dd5652 LICENSE.GPL3-EXCEPT +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 LICENSE.LGPL3 +sha256 ed8742a95cb9db653a09b050e27ccff5e67ba69c14aa2c3137f2a4e1892f6c0d LICENSE.FDL diff --git a/package/qt5/qt5xmlpatterns/qt5xmlpatterns.mk b/package/qt5/qt5xmlpatterns/qt5xmlpatterns.mk new file mode 100644 index 00000000..68454833 --- /dev/null +++ b/package/qt5/qt5xmlpatterns/qt5xmlpatterns.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# qt5xmlpatterns +# +################################################################################ + +QT5XMLPATTERNS_VERSION = $(QT5_VERSION) +QT5XMLPATTERNS_SITE = $(QT5_SITE) +QT5XMLPATTERNS_SOURCE = qtxmlpatterns-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5XMLPATTERNS_VERSION).tar.xz +QT5XMLPATTERNS_INSTALL_STAGING = YES +QT5XMLPATTERNS_LICENSE = GPL-2.0+ or LGPL-3.0, GPL-3.0 with exception(tools), GFDL-1.3 (docs) +QT5XMLPATTERNS_LICENSE_FILES = LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT LICENSE.LGPL3 LICENSE.FDL + +ifeq ($(BR2_PACKAGE_QT5DECLARATIVE),y) +QT5XMLPATTERNS_DEPENDENCIES += qt5declarative +endif + +ifeq ($(BR2_PACKAGE_QT5BASE_EXAMPLES),y) +QT5XMLPATTERNS_LICENSE += , BSD-3-Clause (examples) +endif + +$(eval $(qmake-package)) diff --git a/package/qt5cinex/0001-Fix-execution-problem-with-Qt5.3.patch b/package/qt5cinex/0001-Fix-execution-problem-with-Qt5.3.patch new file mode 100644 index 00000000..ceae8cc8 --- /dev/null +++ b/package/qt5cinex/0001-Fix-execution-problem-with-Qt5.3.patch @@ -0,0 +1,64 @@ +From 9b045ee7988daf3bb4c7cbe1ed1b9d744820e82b Mon Sep 17 00:00:00 2001 +From: Pierre Le Magourou +Date: Mon, 15 Dec 2014 11:54:51 +0100 +Subject: [PATCH] Fix execution problem with Qt5.3. + +This patch has been inspired from Open Embedded meta-qt5. + +Signed-off-by: Pierre Le Magourou +--- + content/SettingsView.qml | 4 ++-- + content/Switch.qml | 8 ++++---- + 2 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/content/SettingsView.qml b/content/SettingsView.qml +index 7944803..a0ddcc8 100644 +--- a/content/SettingsView.qml ++++ b/content/SettingsView.qml +@@ -127,8 +127,8 @@ Item { + Switch { + text: "Do you l-o-v-e colors?" + checked: settings.showColors +- onText: "Yes" +- offText: "No!" ++ textON: "Yes" ++ textOFF: "No!" + onCheckedChanged: { + settings.showColors = checked; + } +diff --git a/content/Switch.qml b/content/Switch.qml +index 967c03f..66955fc 100644 +--- a/content/Switch.qml ++++ b/content/Switch.qml +@@ -6,8 +6,8 @@ Item { + + property alias text: textItem.text + property bool checked: false +- property string onText: "On" +- property string offText: "Off" ++ property string textON: "On" ++ property string textOFF: "Off" + + QtObject { + id: priv +@@ -120,7 +120,7 @@ Item { + color: "#000000" + font.pixelSize: 18 + font.bold: true +- text: onText ++ text: textON + } + Text { + anchors.verticalCenter: parent.verticalCenter +@@ -129,7 +129,7 @@ Item { + color: "#ffffff" + font.pixelSize: 18 + font.bold: true +- text: offText ++ text: textOFF + } + + Image { +-- +2.1.3 + diff --git a/package/qt5cinex/CinematicExperience-demo b/package/qt5cinex/CinematicExperience-demo new file mode 100755 index 00000000..919958fa --- /dev/null +++ b/package/qt5cinex/CinematicExperience-demo @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/share/Qt5/CinematicExperience/Qt5_CinematicExperience "$@" diff --git a/package/qt5cinex/Config.in b/package/qt5cinex/Config.in new file mode 100644 index 00000000..8dbf4842 --- /dev/null +++ b/package/qt5cinex/Config.in @@ -0,0 +1,34 @@ +comment "qt5cinex needs an Open(E)GL-capable backend" + depends on BR2_PACKAGE_QT5 + depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE + depends on !BR2_PACKAGE_QT5_GL_AVAILABLE || !BR2_PACKAGE_HAS_LIBEGL + +config BR2_PACKAGE_QT5CINEX + bool "qt5cinex" + depends on BR2_PACKAGE_QT5 + depends on BR2_PACKAGE_HAS_LIBEGL # qt5base-eglfs + depends on BR2_PACKAGE_QT5_GL_AVAILABLE + # No comment needed for this option, it's an architecture + # dependency. + depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE + select BR2_PACKAGE_QT5BASE_NETWORK + select BR2_PACKAGE_QT5BASE_PNG + select BR2_PACKAGE_QT5BASE_WIDGETS + select BR2_PACKAGE_QT5BASE_EGLFS + select BR2_PACKAGE_QT5GRAPHICALEFFECTS + help + This application demonstrates the power of Qt5 and few of + the new additions available in QtQuick 2.0. + + http://quitcoding.com/?page=work#cinex + +if BR2_PACKAGE_QT5CINEX + +config BR2_PACKAGE_QT5CINEX_HD + bool "High-definition version (aka RPi Edition)" + help + High definition version (1920x1080 resolution) of the + application, optimised for Raspberry PI cards. This version + can also be run on any platform supported by Qt5. + +endif diff --git a/package/qt5cinex/qt5cinex.hash b/package/qt5cinex/qt5cinex.hash new file mode 100644 index 00000000..ac62ee22 --- /dev/null +++ b/package/qt5cinex/qt5cinex.hash @@ -0,0 +1,4 @@ +# Locally computed +sha256 0dd602983ced5f7c0cfd5ad0fbfe2b0b7e3c9ff715e4ef23eef818ccc2b6c60b Qt5_CinematicExperience_rpi_1.0.tgz +sha256 0e547e0259667915a24e84ade5efdcd0c553f81786734452c2c8dbce19a19f44 Qt5_CinematicExperience_1.0.tgz +sha256 bf6206061bcffb43c82999b8845360f223ac5cb4f574219fe95543ffd6755614 README diff --git a/package/qt5cinex/qt5cinex.mk b/package/qt5cinex/qt5cinex.mk new file mode 100644 index 00000000..70038028 --- /dev/null +++ b/package/qt5cinex/qt5cinex.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# qt5cinex +# +################################################################################ + +QT5CINEX_VERSION = 1.0 +QT5CINEX_SITE = http://quitcoding.com/download + +ifeq ($(BR2_PACKAGE_QT5CINEX_HD),y) +QT5CINEX_HD = rpi_ +endif + +QT5CINEX_SOURCE = Qt5_CinematicExperience_$(QT5CINEX_HD)$(QT5CINEX_VERSION).tgz +QT5CINEX_DEPENDENCIES = qt5declarative + +QT5CINEX_LICENSE = CC-BY-3.0 +QT5CINEX_LICENSE_FILES = README + +# In addition to the Cinematic Experience itself, we also install a +# wrapper shell script to /usr/bin: the Cinematic Experience binary +# wants its resource files to be available directly under a contents/ +# sub-directory, which isn't very practical to install in /usr/bin/. +define QT5CINEX_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/Qt5_CinematicExperience \ + $(TARGET_DIR)/usr/share/Qt5/CinematicExperience/Qt5_CinematicExperience + $(INSTALL) -D -m 0664 $(@D)/Qt5_CinematicExperience.qml \ + $(TARGET_DIR)/usr/share/Qt5/CinematicExperience/Qt5_CinematicExperience.qml + cp -dpfr $(@D)/content $(TARGET_DIR)/usr/share/Qt5/CinematicExperience/content + $(INSTALL) -m 0755 -D package/qt5cinex/CinematicExperience-demo \ + $(TARGET_DIR)/usr/bin/CinematicExperience-demo +endef + +$(eval $(qmake-package)) diff --git a/package/qt_movie/Config.in b/package/qt_movie/Config.in new file mode 100644 index 00000000..090e95c2 --- /dev/null +++ b/package/qt_movie/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_QT_MOVIE + bool "qt movie demo" + default y + depends on BR2_PACKAGE_QT5 + depends on BR2_PACKAGE_QT5BASE + help + change by LSGD + Qt movie demo + will auto play run path logo.gif + install in /root/logo_player/ + name is logo_player + +config BR2_PACKAGE_QT_MOVIE_AUTOBOOT + bool "qt movie auto run agter boot" + default y + depends on BR2_PACKAGE_QT_MOVIE + help + auto run logo_player after boot + to show LSGD logo.gif + diff --git a/package/qt_movie/logo_player.service b/package/qt_movie/logo_player.service new file mode 100644 index 00000000..fd05201a --- /dev/null +++ b/package/qt_movie/logo_player.service @@ -0,0 +1,13 @@ +[Unit] +Description=driver_testcase Qt version exec +After=getty@.service + +[Service] +Type=oneshot +ExecStart=sleep 5.5 +ExecStart=cd /root/logo_player && ./logo_player -platform linuxfb +TimeoutSec=0 +RemainAfterExit=no + +[Install] +WantedBy=multi-user.target diff --git a/package/qt_movie/qt_movie.mk b/package/qt_movie/qt_movie.mk new file mode 100644 index 00000000..f26153b1 --- /dev/null +++ b/package/qt_movie/qt_movie.mk @@ -0,0 +1,52 @@ +################################################################################ +# +# qt_movie +# +################################################################################ + +QT_MOVIE_SITE = $(TOPDIR)/package/qt_movie/qt_movie.tar.gz +QT_MOVIE_SITE_METHOD = file +QT_MOVIE_CFLAGS = $(TARGET_CFLAGS) + +QT_MOVIE_DEPENDENCIES = qt5base + +define QT_MOVIE_EXTRACT_CMDS + echo $(QT_MOVIE_SITE) + tar -zxf $(QT_MOVIE_SITE) -C $(@D)/ +endef + +ifeq ($(BR2_PACKAGE_QT_MOVIE_AUTOBOOT),y) + +ifeq ($(BR2_PACKAGE_BOOT_RUN),y) +define QT_MOVIE_INSTALL_AUTO_EXEC_AFTER_BOOT_CMDS + echo "auto run in boot in /root/boot_run.sh" +endef +else +define QT_MOVIE_INSTALL_AUTO_EXEC_AFTER_BOOT_CMDS + echo "install auto boot logo_player sofeware service" && cd $(TOPDIR)/package/qt_movie/ && cp logo_player.service $(TARGET_DIR)/usr/lib/systemd/system/ && cd $(TARGET_DIR)/usr/lib/systemd/system/ && mkdir -p multi-user.target.wants && cd $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants && ln -s -f ../logo_player.service logo_player.service +endef +endif + +else +define QT_MOVIE_INSTALL_AUTO_EXEC_AFTER_BOOT_CMDS + echo "nothing to do" +endef +endif + +#$(TARGET_MAKE_ENV) $(MAKE) CC=$(TARGET_CC) AR=$(TARGET_AR) -C $(@D) + +define QT_MOVIE_BUILD_CMDS + cd $(@D) && $(HOST_DIR)/bin/qmake movie.pro && $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define QT_MOVIE_INSTALL_STAGING_CMDS + echo "nothing to do" +endef + +define QT_MOVIE_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/root/logo_player/ + cd $(@D) && cp movie $(TARGET_DIR)/root/logo_player/logo_player + cd $(@D) && cp logo.gif $(TARGET_DIR)/root/logo_player/ +endef + +$(eval $(generic-package)) diff --git a/package/qt_movie/qt_movie.tar.gz b/package/qt_movie/qt_movie.tar.gz new file mode 100644 index 00000000..99155bba Binary files /dev/null and b/package/qt_movie/qt_movie.tar.gz differ diff --git a/package/qt_music_player/Config.in b/package/qt_music_player/Config.in new file mode 100644 index 00000000..ab99ebfa --- /dev/null +++ b/package/qt_music_player/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_QT_MUSIC_PLAYER + bool "qt music player" + default y + depends on BR2_PACKAGE_QT5 + depends on BR2_PACKAGE_QT5BASE + depends on BR2_PACKAGE_QT5MULTIMEDIA + help + https://gitee.com/Singtren/qt-music-player + diff --git a/package/qt_music_player/qt_music_player.mk b/package/qt_music_player/qt_music_player.mk new file mode 100644 index 00000000..8695e630 --- /dev/null +++ b/package/qt_music_player/qt_music_player.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# qt_music_player +# +################################################################################ + +QT_MUSIC_PLAYER_SITE = $(TOPDIR)/package/qt_music_player/qt_music_player.tar.gz +QT_MUSIC_PLAYER_SITE_METHOD = file +QT_MUSIC_PLAYER_CFLAGS = $(TARGET_CFLAGS) + +QT_MUSIC_PLAYER_DEPENDENCIES = qt5base + +define QT_MUSIC_PLAYER_EXTRACT_CMDS + echo $(QT_MUSIC_PLAYER_SITE) + tar -zxf $(QT_MUSIC_PLAYER_SITE) -C $(@D)/ --strip=1 +endef + +define QT_MUSIC_PLAYER_BUILD_CMDS + cd $(@D) && $(HOST_DIR)/bin/qmake mplayer.pro && $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define QT_MUSIC_PLAYER_INSTALL_TARGET_CMDS + cd $(@D) && cp mplayer $(TARGET_DIR)/root/ +endef + +$(eval $(generic-package)) diff --git a/package/qt_music_player/qt_music_player.tar.gz b/package/qt_music_player/qt_music_player.tar.gz new file mode 100644 index 00000000..4f168f9f Binary files /dev/null and b/package/qt_music_player/qt_music_player.tar.gz differ diff --git a/package/qt_use_tslib/Config.in b/package/qt_use_tslib/Config.in new file mode 100644 index 00000000..0038efeb --- /dev/null +++ b/package/qt_use_tslib/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_QT_USE_TSLIB + bool "Qt version use tslib" + depends on BR2_PACKAGE_QT5 + depends on BR2_PACKAGE_QT5BASE + default n + help + if your Qt version need use tslib enable otherwise disable it. + if usb tslib should export QT_QPA_FB_TSLIB=1 so that tslib run better + diff --git a/package/qtperf/Config.in b/package/qtperf/Config.in new file mode 100644 index 00000000..71ed32cd --- /dev/null +++ b/package/qtperf/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_QTPERF + bool "qtperf" + default y + depends on BR2_PACKAGE_QT5 + depends on BR2_PACKAGE_QT5BASE + help + if your system contain qtperf testcase + it will build qtperf + diff --git a/package/qtperf/qtperf.mk b/package/qtperf/qtperf.mk new file mode 100644 index 00000000..5b51eb0e --- /dev/null +++ b/package/qtperf/qtperf.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# qtperf +# +################################################################################ + +QTPERF_SITE = $(TOPDIR)/package/qtperf/qtperf.tar.gz +QTPERF_SITE_METHOD = file +QTPERF_CFLAGS = $(TARGET_CFLAGS) + +QTPERF_DEPENDENCIES = qt5base + +define QTPERF_EXTRACT_CMDS + echo $(QTPERF_SITE) + tar -zxf $(QTPERF_SITE) -C $(@D)/ +endef + +#$(TARGET_MAKE_ENV) $(MAKE) CC=$(TARGET_CC) AR=$(TARGET_AR) -C $(@D) + +define QTPERF_BUILD_CMDS + cd $(@D) && $(HOST_DIR)/bin/qmake qtperf.pro && $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define QTPERF_INSTALL_STAGING_CMDS + echo "nothing to do" +endef + +define QTPERF_INSTALL_TARGET_CMDS + cd $(@D) && cp qtperf_qt5 $(TARGET_DIR)/usr/bin/ +endef + +$(eval $(generic-package)) diff --git a/package/qtperf/qtperf.tar.gz b/package/qtperf/qtperf.tar.gz new file mode 100644 index 00000000..eeb178c7 Binary files /dev/null and b/package/qtperf/qtperf.tar.gz differ diff --git a/package/quagga/0001-fix-ipctl-forwarding.patch b/package/quagga/0001-fix-ipctl-forwarding.patch new file mode 100644 index 00000000..e2e3421e --- /dev/null +++ b/package/quagga/0001-fix-ipctl-forwarding.patch @@ -0,0 +1,27 @@ +Add definitions for IPCTL_FORWARDING and IP6CTL_FORWARDING. + +Inspired from +http://svn.gnumonks.org/trunk/grouter/build/src/quagga/quagga/quagga-0.99.1-forward_sysctl-2.6.14.patch + +Signed-off-by: Thomas Petazzoni + +Index: quagga-0.99.16/zebra/ipforward_sysctl.c +=================================================================== +--- quagga-0.99.16.orig/zebra/ipforward_sysctl.c 2010-06-20 23:40:45.000000000 +0200 ++++ quagga-0.99.16/zebra/ipforward_sysctl.c 2010-06-20 23:41:37.000000000 +0200 +@@ -31,6 +31,15 @@ + + #define MIB_SIZ 4 + ++/* Fix for recent (2.6.14) kernel headers */ ++#ifndef IPCTL_FORWARDING ++#define IPCTL_FORWARDING NET_IPV4_FORWARD ++#endif ++ ++#ifndef IP6CTL_FORWARDING ++#define IP6CTL_FORWARDING NET_IPV6_FORWARDING ++#endif ++ + extern struct zebra_privs_t zserv_privs; + + /* IPv4 forwarding control MIB. */ diff --git a/package/quagga/0002-lib-prefix.h-fix-build-with-gcc-10.patch b/package/quagga/0002-lib-prefix.h-fix-build-with-gcc-10.patch new file mode 100644 index 00000000..f2fc9cc6 --- /dev/null +++ b/package/quagga/0002-lib-prefix.h-fix-build-with-gcc-10.patch @@ -0,0 +1,36 @@ +From 01bcd0f7411f86eea44247bf91b48882cae35519 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 21 Sep 2020 23:12:25 +0200 +Subject: [PATCH] lib/prefix.h: fix build with gcc 10 + +Remove __packed to fix the following build failure with gcc 10 (which +defaults to -fno-common): + + CCLD libzebra.la +/tmp/instance-1/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: .libs/sockunion.o:(.bss+0x0): multiple definition of `__packed'; .libs/vty.o:(.bss+0x6c): first defined here + +Fixes: + - http://autobuild.buildroot.org/results/82b15cff3f7b943eb93d8270790f1b8561d31d6a + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://bugzilla.quagga.net/show_bug.cgi?id=1014] +--- + lib/prefix.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/prefix.h b/lib/prefix.h +index 2cf0b20b..a5306eee 100644 +--- a/lib/prefix.h ++++ b/lib/prefix.h +@@ -44,7 +44,7 @@ + */ + struct ethaddr { + u_char octet[ETHER_ADDR_LEN]; +-} __packed; ++}; + + + /* +-- +2.28.0 + diff --git a/package/quagga/0003-Fix-build-with-gcc-10.patch b/package/quagga/0003-Fix-build-with-gcc-10.patch new file mode 100644 index 00000000..fbe85165 --- /dev/null +++ b/package/quagga/0003-Fix-build-with-gcc-10.patch @@ -0,0 +1,127 @@ +From 7a446434302d7b71211b81b3c6cd12a7b35223d1 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 6 Mar 2021 16:28:37 +0100 +Subject: [PATCH] Fix build with gcc 10 + +Fix the following build failure with gcc 10 (which defaults to +-fno-common): + + CCLD pimd +/home/buildroot/autobuild/run/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: pimd.o:(.bss+0x8): multiple definition of `qpim_static_route_list'; pim_main.o:(.bss+0x8): first defined here +/home/buildroot/autobuild/run/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: pimd.o:(.bss+0x28): multiple definition of `qpim_mroute_del_last'; pim_main.o:(.bss+0x10): first defined here + +Fixes: + - http://autobuild.buildroot.org/results/fd5ee2b52a3cfaec268fafd3ffe4c30e51465c7e + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://bugzilla.quagga.net/show_bug.cgi?id=1014] +--- + pimd/pim_version.h | 2 +- + pimd/pimd.c | 1 + + pimd/pimd.h | 66 +++++++++++++++++++++++----------------------- + 3 files changed, 35 insertions(+), 34 deletions(-) + +diff --git a/pimd/pim_version.h b/pimd/pim_version.h +index ef9f370c..891d4314 100644 +--- a/pimd/pim_version.h ++++ b/pimd/pim_version.h +@@ -25,6 +25,6 @@ + + #define PIMD_VERSION_STR "0.166" + +-const char * const PIMD_VERSION; ++extern const char * const PIMD_VERSION; + + #endif /* PIM_VERSION_H */ +diff --git a/pimd/pimd.c b/pimd/pimd.c +index 97fb2233..d7340cc0 100644 +--- a/pimd/pimd.c ++++ b/pimd/pimd.c +@@ -50,6 +50,7 @@ int64_t qpim_mroute_socket_creation = 0; /* timestamp of creat + struct thread *qpim_mroute_socket_reader = 0; + int qpim_mroute_oif_highest_vif_index = -1; + struct list *qpim_channel_oil_list = 0; ++struct in_addr qpim_all_pim_routers_addr; + int qpim_t_periodic = PIM_DEFAULT_T_PERIODIC; /* Period between Join/Prune Messages */ + struct list *qpim_upstream_list = 0; + struct zclient *qpim_zclient_update = 0; +diff --git a/pimd/pimd.h b/pimd/pimd.h +index 9a7e6058..8b3496fd 100644 +--- a/pimd/pimd.h ++++ b/pimd/pimd.h +@@ -68,39 +68,39 @@ + #define PIM_MASK_PIM_J_P (1 << 12) + #define PIM_MASK_STATIC (1 << 13) + +-const char *const PIM_ALL_SYSTEMS; +-const char *const PIM_ALL_ROUTERS; +-const char *const PIM_ALL_PIM_ROUTERS; +-const char *const PIM_ALL_IGMP_ROUTERS; +- +-struct thread_master *master; +-uint32_t qpim_debugs; +-int qpim_mroute_socket_fd; +-int64_t qpim_mroute_socket_creation; /* timestamp of creation */ +-struct thread *qpim_mroute_socket_reader; +-int qpim_mroute_oif_highest_vif_index; +-struct list *qpim_channel_oil_list; /* list of struct channel_oil */ +-struct in_addr qpim_all_pim_routers_addr; +-int qpim_t_periodic; /* Period between Join/Prune Messages */ +-struct list *qpim_upstream_list; /* list of struct pim_upstream */ +-struct zclient *qpim_zclient_update; +-struct zclient *qpim_zclient_lookup; +-struct pim_assert_metric qpim_infinite_assert_metric; +-long qpim_rpf_cache_refresh_delay_msec; +-struct thread *qpim_rpf_cache_refresher; +-int64_t qpim_rpf_cache_refresh_requests; +-int64_t qpim_rpf_cache_refresh_events; +-int64_t qpim_rpf_cache_refresh_last; +-struct in_addr qpim_inaddr_any; +-struct list *qpim_ssmpingd_list; /* list of struct ssmpingd_sock */ +-struct in_addr qpim_ssmpingd_group_addr; +-int64_t qpim_scan_oil_events; +-int64_t qpim_scan_oil_last; +-int64_t qpim_mroute_add_events; +-int64_t qpim_mroute_add_last; +-int64_t qpim_mroute_del_events; +-int64_t qpim_mroute_del_last; +-struct list *qpim_static_route_list; /* list of routes added statically */ ++extern const char *const PIM_ALL_SYSTEMS; ++extern const char *const PIM_ALL_ROUTERS; ++extern const char *const PIM_ALL_PIM_ROUTERS; ++extern const char *const PIM_ALL_IGMP_ROUTERS; ++ ++extern struct thread_master *master; ++extern uint32_t qpim_debugs; ++extern int qpim_mroute_socket_fd; ++extern int64_t qpim_mroute_socket_creation; /* timestamp of creation */ ++extern struct thread *qpim_mroute_socket_reader; ++extern int qpim_mroute_oif_highest_vif_index; ++extern struct list *qpim_channel_oil_list; /* list of struct channel_oil */ ++extern struct in_addr qpim_all_pim_routers_addr; ++extern int qpim_t_periodic; /* Period between Join/Prune Messages */ ++extern struct list *qpim_upstream_list; /* list of struct pim_upstream */ ++extern struct zclient *qpim_zclient_update; ++extern struct zclient *qpim_zclient_lookup; ++extern struct pim_assert_metric qpim_infinite_assert_metric; ++extern long qpim_rpf_cache_refresh_delay_msec; ++extern struct thread *qpim_rpf_cache_refresher; ++extern int64_t qpim_rpf_cache_refresh_requests; ++extern int64_t qpim_rpf_cache_refresh_events; ++extern int64_t qpim_rpf_cache_refresh_last; ++extern struct in_addr qpim_inaddr_any; ++extern struct list *qpim_ssmpingd_list; /* list of struct ssmpingd_sock */ ++extern struct in_addr qpim_ssmpingd_group_addr; ++extern int64_t qpim_scan_oil_events; ++extern int64_t qpim_scan_oil_last; ++extern int64_t qpim_mroute_add_events; ++extern int64_t qpim_mroute_add_last; ++extern int64_t qpim_mroute_del_events; ++extern int64_t qpim_mroute_del_last; ++extern struct list *qpim_static_route_list; /* list of routes added statically */ + + #define PIM_JP_HOLDTIME (qpim_t_periodic * 7 / 2) + +-- +2.30.0 + diff --git a/package/quagga/Config.in b/package/quagga/Config.in new file mode 100644 index 00000000..9427475d --- /dev/null +++ b/package/quagga/Config.in @@ -0,0 +1,94 @@ +config BR2_PACKAGE_QUAGGA + bool "quagga" + depends on BR2_USE_MMU # fork() + help + Routing software suite, providing implementations of OSPFv2, + OSPFv3 (IPv6), RIP v1 and v2, RIPng (IPv6) and BGPv4+. + + http://www.quagga.net/ + +if BR2_PACKAGE_QUAGGA + +config BR2_PACKAGE_QUAGGA_ZEBRA + bool "zebra daemon" + help + Build zebra daemon. + +config BR2_PACKAGE_QUAGGA_TCP_ZEBRA + bool "Use TCP sockets between zebra and protocol daemons" + depends on BR2_PACKAGE_QUAGGA_ZEBRA + help + Use a TCP socket to communicate between zebra (supervisor) + and the different protocol daemons. + + You'll want this enabled if zebra and the protocol daemon(s) + run on different hosts. + +config BR2_PACKAGE_QUAGGA_BGPD + bool "BGPv4+ protocol" + help + Build bgpd daemon. + +config BR2_PACKAGE_QUAGGA_BGP_ANNOUNCE + bool "BGP route announcement" + depends on BR2_PACKAGE_QUAGGA_BGPD + +config BR2_PACKAGE_QUAGGA_ISISD + bool "IS-IS protocol" + help + Enable isisd support in quagga. + +config BR2_PACKAGE_QUAGGA_NHRPD + bool "NHRPD protocol" + select BR2_PACKAGE_C_ARES + help + Build Next Hop Routing Protocol daemon. + +config BR2_PACKAGE_QUAGGA_OSPFD + bool "OSPFv2 protocol" + help + Build ospfd daemon. + +config BR2_PACKAGE_QUAGGA_OSPF6D + bool "OSPFv3 (IPv6) protocol" + help + Build ospf6d daemon. + +config BR2_PACKAGE_QUAGGA_RIPD + bool "RIPv2/v3 protocol" + help + Build ripd daemon. + +config BR2_PACKAGE_QUAGGA_RIPNGD + bool "RIPng (IPv6) protocol" + help + Build ripngd daemon. + +config BR2_PACKAGE_QUAGGA_PIMD + bool "PIMd protocol" + help + Provides IPv4 PIM-SSM multicast routing. + +config BR2_PACKAGE_QUAGGA_WATCHQUAGGA + bool "Build watchquagga" + help + Build and install watchquagga, a zebra/protocol daemon + supervisor. + +config BR2_PACKAGE_QUAGGA_VTYSH + bool "Build vtysh" + select BR2_PACKAGE_READLINE + help + Build and install vtysh, a vty shell for Quagga. + +config BR2_PACKAGE_QUAGGA_SNMP + bool "SNMP support" + depends on BR2_USE_MMU # net-snmp + select BR2_PACKAGE_NETSNMP + help + Make quagga information available via SNMP SMUX. + +comment "AgentX support must be enabled in net-snmp or the build will break" + depends on BR2_PACKAGE_QUAGGA_SNMP + +endif diff --git a/package/quagga/quagga.hash b/package/quagga/quagga.hash new file mode 100644 index 00000000..293cee4d --- /dev/null +++ b/package/quagga/quagga.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +sha256 e364c082c3309910e1eb7b068bf39ee298e2f2f3f31a6431a5c115193bd653d3 quagga-1.2.4.tar.gz + +# Hash for license file +sha256 b39c1bad4e51e2a3389cd25fc4addebe41a3ae7c11100795683f9330de1536e5 COPYING diff --git a/package/quagga/quagga.mk b/package/quagga/quagga.mk new file mode 100644 index 00000000..adf80850 --- /dev/null +++ b/package/quagga/quagga.mk @@ -0,0 +1,109 @@ +################################################################################ +# +# quagga +# +################################################################################ + +QUAGGA_VERSION = 1.2.4 +QUAGGA_SITE = http://download.savannah.gnu.org/releases/quagga +QUAGGA_INSTALL_STAGING = YES +QUAGGA_DEPENDENCIES = host-gawk host-pkgconf +QUAGGA_LICENSE = GPL-2.0+ +QUAGGA_LICENSE_FILES = COPYING +QUAGGA_CPE_ID_VENDOR = quagga + +# We need to override the sysconf and localstate directories so that +# quagga can create files as the quagga user without extra +# intervention +QUAGGA_CONF_OPTS = \ + --program-transform-name='' \ + --sysconfdir=/etc/quagga \ + --localstatedir=/var/run/quagga + +# quagga has its own internal copy of getopt_long. To avoid conflicts with libc's +# getopt, we need to make sure that the getopt function itself is also built. +QUAGGA_CONF_ENV = \ + CFLAGS="$(TARGET_CFLAGS) -DREALLY_NEED_PLAIN_GETOPT" + +ifeq ($(BR2_PACKAGE_LIBCAP),y) +QUAGGA_CONF_OPTS += --enable-capabilities +QUAGGA_DEPENDENCIES += libcap +else +QUAGGA_CONF_OPTS += --disable-capabilities +endif + +ifeq ($(BR2_PACKAGE_PROTOBUF_C),y) +QUAGGA_CONF_OPTS += --enable-protobuf +QUAGGA_DEPENDENCIES += protobuf-c +else +QUAGGA_CONF_OPTS += --disable-protobuf +endif + +QUAGGA_CONF_OPTS += $(if $(BR2_PACKAGE_QUAGGA_ZEBRA),--enable-zebra,--disable-zebra) +QUAGGA_CONF_OPTS += $(if $(BR2_PACKAGE_QUAGGA_BGPD),--enable-bgpd,--disable-bgpd) +QUAGGA_CONF_OPTS += $(if $(BR2_PACKAGE_QUAGGA_RIPD),--enable-ripd,--disable-ripd) +QUAGGA_CONF_OPTS += $(if $(BR2_PACKAGE_QUAGGA_RIPNGD),--enable-ripngd,--disable-ripngd) +QUAGGA_CONF_OPTS += $(if $(BR2_PACKAGE_QUAGGA_OSPFD),--enable-ospfd,--disable-ospfd --disable-ospfapi) +QUAGGA_CONF_OPTS += $(if $(BR2_PACKAGE_QUAGGA_OSPF6D),--enable-ospf6d,--disable-ospf6d) +QUAGGA_CONF_OPTS += $(if $(BR2_PACKAGE_QUAGGA_PIMD),--enable-pimd,--disable-pimd) +QUAGGA_CONF_OPTS += $(if $(BR2_PACKAGE_QUAGGA_WATCHQUAGGA),--enable-watchquagga,--disable-watchquagga) +QUAGGA_CONF_OPTS += $(if $(BR2_PACKAGE_QUAGGA_ISISD),--enable-isisd,--disable-isisd) +QUAGGA_CONF_OPTS += $(if $(BR2_PACKAGE_QUAGGA_BGP_ANNOUNCE),--enable-bgp-announce,--disable-bgp-announce) +QUAGGA_CONF_OPTS += $(if $(BR2_PACKAGE_QUAGGA_TCP_ZEBRA),--enable-tcp-zebra,--disable-tcp-zebra) + +define QUAGGA_USERS + quagga -1 quagga -1 * - - - Quagga priv drop user +endef + +# Set the permissions of /etc/quagga such that quagga (through vtysh) +# can save the configuration - set the folder recursively as the files +# need to be 600, and then set the folder (non-recursively) to 755 so +# it can used. Quagga also needs to write to the folder as it moves +# and creates, rather than overwriting. +define QUAGGA_PERMISSIONS + /etc/quagga r 600 quagga quagga - - - - - + /etc/quagga d 755 quagga quagga - - - - - +endef + +# In order for the QUAGGA_PERMISSIONS variable above to work, +# /etc/quagga has to exist. However, this package without any +# sub-option enabled will not create /etc/quagga, so let's create it +# unconditionally in a post-install hook, in case it hasn't been +# already created by the quagga installation. +define QUAGGA_CREATE_ETC_QUAGGA + mkdir -p $(TARGET_DIR)/etc/quagga +endef +QUAGGA_POST_INSTALL_TARGET_HOOKS += QUAGGA_CREATE_ETC_QUAGGA + +ifeq ($(BR2_PACKAGE_QUAGGA_NHRPD),y) +QUAGGA_CONF_OPTS += --enable-nhrpd +QUAGGA_DEPENDENCIES += c-ares +else +QUAGGA_CONF_OPTS += --disable-nhrpd +endif + +ifeq ($(BR2_PACKAGE_QUAGGA_SNMP),y) +QUAGGA_CONF_ENV += ac_cv_path_NETSNMP_CONFIG=$(STAGING_DIR)/usr/bin/net-snmp-config +QUAGGA_CONF_OPTS += --enable-snmp=agentx +QUAGGA_DEPENDENCIES += netsnmp +endif + +ifeq ($(BR2_PACKAGE_QUAGGA_VTYSH),y) +QUAGGA_CONF_OPTS += --enable-vtysh +QUAGGA_DEPENDENCIES += readline +else +QUAGGA_CONF_OPTS += --disable-vtysh +endif + +ifeq ($(BR2_TOOLCHAIN_SUPPORTS_PIE),) +QUAGGA_CONF_OPTS += --disable-pie +endif + +define QUAGGA_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/quagga/quagga_tmpfiles.conf \ + $(TARGET_DIR)/usr/lib/tmpfiles.d/quagga.conf + $(INSTALL) -D -m 644 package/quagga/quagga@.service \ + $(TARGET_DIR)/usr/lib/systemd/system/quagga@.service +endef + +$(eval $(autotools-package)) diff --git a/package/quagga/quagga@.service b/package/quagga/quagga@.service new file mode 100644 index 00000000..797af32e --- /dev/null +++ b/package/quagga/quagga@.service @@ -0,0 +1,17 @@ +[Unit] +Description=Quagga %i routing daemon +ConditionFileIsExecutable=/usr/sbin/%i +Wants=quagga@zebra.service + +[Service] +Type=simple +EnvironmentFile=/etc/default/quagga-%i +PrivateTmp=true +# Systemd doesn't like having %i in the executable path. +ExecStart=/usr/bin/env /usr/sbin/%i $OPTS -f /etc/quagga/%i.conf +ExecReload=/bin/kill -HUP $MAINPID +Restart=on-failure + +[Install] +WantedBy=multi-user.target + diff --git a/package/quagga/quagga_tmpfiles.conf b/package/quagga/quagga_tmpfiles.conf new file mode 100644 index 00000000..e16c475f --- /dev/null +++ b/package/quagga/quagga_tmpfiles.conf @@ -0,0 +1 @@ +d /var/run/quagga/ 1755 quagga quagga - diff --git a/package/quazip/Config.in b/package/quazip/Config.in new file mode 100644 index 00000000..e9802975 --- /dev/null +++ b/package/quazip/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_QUAZIP + bool "quazip" + depends on BR2_PACKAGE_QT5 + select BR2_PACKAGE_ZLIB + help + QuaZIP is a simple C++ wrapper over Gilles Vollant's + ZIP/UNZIP package that can be used to access ZIP + archives. It uses the Qt toolkit. + + http://quazip.sourceforge.net diff --git a/package/quazip/quazip.hash b/package/quazip/quazip.hash new file mode 100644 index 00000000..5eff5cfb --- /dev/null +++ b/package/quazip/quazip.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 54edce9c11371762bd4f0003c2937b5d8806a2752dd9c0fd9085e90792612ad0 quazip-1.1.tar.gz +sha256 3aab586a5bdc8ffbbf033c7106550fd3e849fd8888e33cbc9bfd30a433c4b1cb COPYING diff --git a/package/quazip/quazip.mk b/package/quazip/quazip.mk new file mode 100644 index 00000000..44645ec9 --- /dev/null +++ b/package/quazip/quazip.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# quazip +# +################################################################################ + +QUAZIP_VERSION = 1.1 +QUAZIP_SITE = $(call github,stachenov,quazip,v$(QUAZIP_VERSION)) +QUAZIP_INSTALL_STAGING = YES +QUAZIP_DEPENDENCIES = \ + zlib \ + qt5base +QUAZIP_LICENSE = LGPL-2.1 +QUAZIP_LICENSE_FILES = COPYING + +$(eval $(cmake-package)) diff --git a/package/quickjs/0001-Makefile-add-optional-link-with-libatomic.patch b/package/quickjs/0001-Makefile-add-optional-link-with-libatomic.patch new file mode 100644 index 00000000..76634a51 --- /dev/null +++ b/package/quickjs/0001-Makefile-add-optional-link-with-libatomic.patch @@ -0,0 +1,37 @@ +From 2cf2aa34d5d55a4eedb1aedd4d56d89d24870230 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Sun, 3 Jan 2021 21:11:44 +0100 +Subject: [PATCH] Makefile: allow linking with extra libraries + +With some toolchains, it is neede to link with extra libraries, for +example with -latomic, to fix: + + .../build/quickjs-2020-11-08/quickjs.c:12229: undefined reference to `__atomic_fetch_xor_1' + +Fixes: + http://autobuild.buildroot.net/results/e0766eef95a2559d51e58d1a81a9c40df84ae509 + +Signed-off-by: Peter Seiderer +[yann.morin.1998@free.fr: + - make it a generic variable, not tied to -latomic +] +Signed-off-by: Yann E. MORIN +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index e6ae827..22ad496 100644 +--- a/Makefile ++++ b/Makefile +@@ -179,6 +179,7 @@ endif + ifndef CONFIG_WIN32 + LIBS+=-ldl -lpthread + endif ++LIBS+=$(EXTRA_LIBS) + + $(OBJDIR): + mkdir -p $(OBJDIR) $(OBJDIR)/examples $(OBJDIR)/tests +-- +2.29.2 + diff --git a/package/quickjs/Config.in b/package/quickjs/Config.in new file mode 100644 index 00000000..dc466241 --- /dev/null +++ b/package/quickjs/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_QUICKJS + bool "quickjs" + depends on !BR2_nios2 # fenv.h lacks FE_{DOWN,UP}WARD on nios2 + depends on !BR2_STATIC_LIBS + # No way to check for fenv support. + depends on !BR2_TOOLCHAIN_USES_UCLIBC + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C11/stdatomic.h + depends on BR2_HOST_GCC_AT_LEAST_4_9 # C11/stdatomic.h + depends on BR2_USE_MMU # fork() + help + QuickJS is a small and embeddable Javascript engine. + It supports the ES2020 specification including modules, + asynchronous generators, proxies and BigInt. + + https://bellard.org/quickjs/ + +comment "quickjs needs a glibc or musl toolchain w/ gcc >= 4.9, host gcc >= 4.9, dynamic library" + depends on !BR2_nios2 + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS || BR2_TOOLCHAIN_USES_UCLIBC || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || !BR2_HOST_GCC_AT_LEAST_4_9 diff --git a/package/quickjs/quickjs.hash b/package/quickjs/quickjs.hash new file mode 100644 index 00000000..5dbd4575 --- /dev/null +++ b/package/quickjs/quickjs.hash @@ -0,0 +1,2 @@ +# Locally calculated +sha256 2e9d63dab390a95ed365238f21d8e9069187f7ed195782027f0ab311bb64187b quickjs-2020-11-08.tar.xz diff --git a/package/quickjs/quickjs.mk b/package/quickjs/quickjs.mk new file mode 100644 index 00000000..b85c255f --- /dev/null +++ b/package/quickjs/quickjs.mk @@ -0,0 +1,44 @@ +################################################################################ +# +# quickjs +# +################################################################################ + +QUICKJS_VERSION = 2020-11-08 +QUICKJS_SOURCE = quickjs-$(QUICKJS_VERSION).tar.xz +QUICKJS_SITE = https://bellard.org/quickjs +QUICKJS_LICENSE = MIT +QUICKJS_INSTALL_STAGING = YES + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +QUICKJS_EXTRA_LIBS += -latomic +endif + +define QUICKJS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + CROSS_PREFIX="$(TARGET_CROSS)" \ + EXTRA_LIBS="$(QUICKJS_EXTRA_LIBS)" \ + all +endef + +define QUICKJS_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + CROSS_PREFIX="$(TARGET_CROSS)" \ + EXTRA_LIBS="$(QUICKJS_EXTRA_LIBS)" \ + DESTDIR=$(STAGING_DIR) \ + STRIP=/bin/true \ + prefix=/usr \ + install +endef + +define QUICKJS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + CROSS_PREFIX="$(TARGET_CROSS)" \ + EXTRA_LIBS="$(QUICKJS_EXTRA_LIBS)" \ + DESTDIR=$(TARGET_DIR) \ + STRIP=/bin/true \ + prefix=/usr \ + install +endef + +$(eval $(generic-package)) diff --git a/package/quota/0001-quota-Use-realloc-3-instead-of-reallocarray-3.patch b/package/quota/0001-quota-Use-realloc-3-instead-of-reallocarray-3.patch new file mode 100644 index 00000000..093d7cc8 --- /dev/null +++ b/package/quota/0001-quota-Use-realloc-3-instead-of-reallocarray-3.patch @@ -0,0 +1,34 @@ +From 02b222a335527f1031cc9495d8c5ebc1bc5b1d4e Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Wed, 11 Nov 2020 15:00:47 +0100 +Subject: [PATCH] quota: Use realloc(3) instead of reallocarray(3) + +reallocarray(3) has been added to glibc relatively recently (version +2.26, from 2017) and apparently not all users run new enough glibc. Just +use realloc(3) for now since in this case there's no real risk of +overflow. + +Signed-off-by: Fabrice Fontaine +Signed-off-by: Jan Kara +[Retrieved from: +https://sourceforge.net/p/linuxquota/code/ci/02b222a335527f1031cc9495d8c5ebc1bc5b1d4e] +--- + quota.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/quota.c b/quota.c +index a6ed61f..a60de12 100644 +--- a/quota.c ++++ b/quota.c +@@ -385,7 +385,7 @@ int main(int argc, char **argv) + break; + case 259: + fscount++; +- fsnames = reallocarray(fsnames, fscount, sizeof(char *)); ++ fsnames = realloc(fsnames, fscount * sizeof(char *)); + if (!fsnames) + die(1, _("Not enough memory for filesystem names")); + fsnames[fscount - 1] = optarg; +-- +2.28.0 + diff --git a/package/quota/Config.in b/package/quota/Config.in new file mode 100644 index 00000000..051a7655 --- /dev/null +++ b/package/quota/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_QUOTA + bool "quota" + depends on BR2_USE_WCHAR + depends on BR2_USE_MMU # fork() + depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC || BR2_TOOLCHAIN_HAS_THREADS # libtirpc + select BR2_PACKAGE_LIBTIRPC if !BR2_TOOLCHAIN_HAS_NATIVE_RPC + help + Implementation of the disk quota system. + + http://sourceforge.net/projects/linuxquota/ + +comment "quota needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || \ + !(BR2_TOOLCHAIN_HAS_THREADS || BR2_TOOLCHAIN_HAS_NATIVE_RPC) diff --git a/package/quota/quota.hash b/package/quota/quota.hash new file mode 100644 index 00000000..354a3e2d --- /dev/null +++ b/package/quota/quota.hash @@ -0,0 +1,7 @@ +# From http://sourceforge.net/projects/linuxquota/files/quota-tools/4.06/ (click on info button) +md5 aef94648438832b684978d46fdf75110 quota-4.06.tar.gz +sha1 98288699cc14da42f762301c2b6731ec7c777681 quota-4.06.tar.gz + +# Locally calculated +sha256 2f3e03039f378d4f0d97acdb49daf581dcaad64d2e1ddf129495fd579fbd268d quota-4.06.tar.gz +sha256 32a5fd41e7a257f7f0373988ea8d45cebdbf376060703c242c11c000751b1203 COPYING diff --git a/package/quota/quota.mk b/package/quota/quota.mk new file mode 100644 index 00000000..12d12b12 --- /dev/null +++ b/package/quota/quota.mk @@ -0,0 +1,42 @@ +################################################################################ +# +# quota +# +################################################################################ + +QUOTA_VERSION = 4.06 +QUOTA_SITE = http://downloads.sourceforge.net/project/linuxquota/quota-tools/$(QUOTA_VERSION) +QUOTA_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) host-nfs-utils +QUOTA_LICENSE = GPL-2.0+ +QUOTA_LICENSE_FILES = COPYING +QUOTA_CPE_ID_VENDOR = jan_kara +QUOTA_CPE_ID_PRODUCT = linux_diskquota +QUOTA_CONF_ENV = LIBS="$(TARGET_NLS_LIBS)" +QUOTA_CONF_OPTS = --disable-pie + +ifeq ($(BR2_PACKAGE_DBUS)$(BR2_PACKAGE_LIBNL),yy) +QUOTA_DEPENDENCIES += host-pkgconf dbus libnl +QUOTA_CONF_OPTS += --enable-netlink +else +QUOTA_CONF_OPTS += --disable-netlink +endif + +ifeq ($(BR2_PACKAGE_E2FSPROGS),y) +QUOTA_DEPENDENCIES += host-pkgconf e2fsprogs +QUOTA_CONF_OPTS += --enable-ext2direct +else +QUOTA_CONF_OPTS += --disable-ext2direct +endif + +ifeq ($(BR2_PACKAGE_LIBTIRPC),y) +QUOTA_DEPENDENCIES += libtirpc host-pkgconf +endif + +ifeq ($(BR2_PACKAGE_OPENLDAP):$(BR2_STATIC_LIBS),y:) +QUOTA_DEPENDENCIES += openldap +QUOTA_CONF_OPTS += --enable-ldapmail +else +QUOTA_CONF_OPTS += --disable-ldapmail +endif + +$(eval $(autotools-package)) diff --git a/package/quotatool/0001-fix-missing-__P-definition-for-musl-compile.patch b/package/quotatool/0001-fix-missing-__P-definition-for-musl-compile.patch new file mode 100644 index 00000000..927e62ba --- /dev/null +++ b/package/quotatool/0001-fix-missing-__P-definition-for-musl-compile.patch @@ -0,0 +1,36 @@ +From 0e096badc901f755f3bcefabdc57091725a5a0c5 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Thu, 1 Feb 2018 23:50:43 +0100 +Subject: [PATCH] fix missing __P definition for musl compile +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Fixes: + + In file included from src/quota.h:40:0, + from src/parse.c:26: + src/linux/linux_quota.h:120:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘__P’ + long quotactl __P((int, const char *, qid_t, caddr_t)); + ^~~ + +Signed-off-by: Peter Seiderer +--- + src/linux/linux_quota.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/linux/linux_quota.h b/src/linux/linux_quota.h +index 11f9871..2b29a89 100644 +--- a/src/linux/linux_quota.h ++++ b/src/linux/linux_quota.h +@@ -14,6 +14,7 @@ + #ifndef LINUX_QUOTA_H + #define LINUX_QUOTA_H + ++#include + #include + #include "system.h" + +-- +2.16.1 + diff --git a/package/quotatool/Config.in b/package/quotatool/Config.in new file mode 100644 index 00000000..4015cef6 --- /dev/null +++ b/package/quotatool/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_QUOTATOOL + bool "quotatool" + help + Quotatool is a utility to manipulate filesystem quotas from + the commandline. + + http://quotatool.ekenberg.se/ diff --git a/package/quotatool/quotatool.hash b/package/quotatool/quotatool.hash new file mode 100644 index 00000000..45b47783 --- /dev/null +++ b/package/quotatool/quotatool.hash @@ -0,0 +1,5 @@ +# Locally computed +sha256 e53adc480d54ae873d160dc0e88d78095f95d9131e528749fd982245513ea090 quotatool-1.6.2.tar.gz + +# Hash for license files: +sha256 94686eeb98a40edc64106c6f8644068d8a08816a510a3cde75e50f1bf470564d COPYING diff --git a/package/quotatool/quotatool.mk b/package/quotatool/quotatool.mk new file mode 100644 index 00000000..7b63c013 --- /dev/null +++ b/package/quotatool/quotatool.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# quotatool +# +################################################################################ + +QUOTATOOL_VERSION = 1.6.2 +QUOTATOOL_SITE = http://quotatool.ekenberg.se +QUOTATOOL_LICENSE = GPL-2.0 +QUOTATOOL_LICENSE_FILES = COPYING + +# men="" allows to disable installing the man pages, which fails +# because the package Makefile doesn't create the appropriate +# directory. +QUOTATOOL_INSTALL_TARGET_OPTS = DESTDIR=$(TARGET_DIR) install men="" + +$(eval $(autotools-package)) diff --git a/package/qwt/Config.in b/package/qwt/Config.in new file mode 100644 index 00000000..736ccc2a --- /dev/null +++ b/package/qwt/Config.in @@ -0,0 +1,28 @@ +config BR2_PACKAGE_QWT + bool "qwt" + depends on BR2_PACKAGE_QT5 + select BR2_PACKAGE_QT5BASE_GUI + select BR2_PACKAGE_QT5BASE_WIDGETS # printsupport + select BR2_PACKAGE_QT5BASE_CONCURRENT + help + Qwt is a graphics extension to the Qt GUI application + framework. It provides a 2D plotting widget and more. + + http://qwt.sourceforge.net/ + +if BR2_PACKAGE_QWT + +config BR2_PACKAGE_QWT_SVG + bool "SVG support" + select BR2_PACKAGE_QT5SVG + +config BR2_PACKAGE_QWT_MATHML + bool "MathML support" + +config BR2_PACKAGE_QWT_OPENGL + bool "OpenGL support" + depends on BR2_PACKAGE_QT5_GL_AVAILABLE + select BR2_PACKAGE_QT5BASE_OPENGL + select BR2_PACKAGE_QT5BASE_OPENGL_LIB + +endif diff --git a/package/qwt/qwt.hash b/package/qwt/qwt.hash new file mode 100644 index 00000000..d4fd210c --- /dev/null +++ b/package/qwt/qwt.hash @@ -0,0 +1,7 @@ +# From https://sourceforge.net/projects/qwt/files/qwt/6.1.6 +md5 cc71be5d6c33c2fc19ae8082ccdd3e83 qwt-6.1.6.tar.bz2 +sha1 b1f17a86c9b1b0790a0c0067ef69fb6277efac79 qwt-6.1.6.tar.bz2 + +# Locally computed +sha256 99460d31c115ee4117b0175d885f47c2c590d784206f09815dc058fbe5ede1f6 qwt-6.1.6.tar.bz2 +sha256 d8737db330e1eeb439962e11654ab7f1aece3561d9415454a8c538643824ede6 COPYING diff --git a/package/qwt/qwt.mk b/package/qwt/qwt.mk new file mode 100644 index 00000000..9f0b7865 --- /dev/null +++ b/package/qwt/qwt.mk @@ -0,0 +1,64 @@ +################################################################################ +# +# qwt +# +################################################################################ + +QWT_VERSION = 6.1.6 +QWT_SOURCE = qwt-$(QWT_VERSION).tar.bz2 +QWT_SITE = http://downloads.sourceforge.net/project/qwt/qwt/$(QWT_VERSION) +QWT_INSTALL_STAGING = YES + +QWT_LICENSE = LGPL-2.1 with exceptions +QWT_LICENSE_FILES = COPYING + +QWT_CONFIG = 's%QWT_INSTALL_PREFIX.*/usr/local/.*%QWT_INSTALL_PREFIX = /usr%' +QWT_CONFIG += -e 's/^.*QWT_CONFIG.*QwtDesigner.*$$/\# QWT_CONFIG += QwtDesigner/' +QWT_CONFIG += -e 's%/features%/mkspecs/features%' + +ifeq ($(BR2_PACKAGE_QWT_SVG),y) +QWT_CONFIG += -e 's/^.*QWT_CONFIG.*QwtSvg.*$$/QWT_CONFIG += QwtSvg/' +QWT_DEPENDENCIES += qt5svg +else +QWT_CONFIG += -e 's/^.*QWT_CONFIG.*QwtSvg.*$$/\# QWT_CONFIG += QwtSvg/' +endif + +ifeq ($(BR2_PACKAGE_QWT_MATHML),y) +QWT_CONFIG += -e 's/^.*QWT_CONFIG.*QwtMathML.*$$/QWT_CONFIG += QwtMathML/' +else +QWT_CONFIG += -e 's/^.*QWT_CONFIG.*QwtMathML.*$$/\# QWT_CONFIG += QwtMathML/' +endif + +ifeq ($(BR2_PACKAGE_QWT_OPENGL),y) +QWT_CONFIG += -e 's/^.*QWT_CONFIG.*QwtOpenGL.*$$/QWT_CONFIG += QwtOpenGL/' +else +QWT_CONFIG += -e 's/^.*QWT_CONFIG.*QwtOpenGL.*$$/\# QWT_CONFIG += QwtOpenGL/' +endif + +ifeq ($(BR2_STATIC_LIBS),y) +QWT_CONFIG += -e 's/^.*QWT_CONFIG.*QwtDll.*$$/\# QWT_CONFIG += QwtDll/' +else +QWT_CONFIG += -e 's/^.*QWT_CONFIG.*QwtDll.*$$/QWT_CONFIG += QwtDll/' +endif + +define QWT_TWEAK_QWTCONFIG_PRI + $(SED) $(QWT_CONFIG) $(@D)/qwtconfig.pri +endef + +QWT_PRE_CONFIGURE_HOOKS += QWT_TWEAK_QWTCONFIG_PRI + +# After installation, we fixup the INSTALL_PREFIX in qwtconfig.pri so +# that when building with qmake, -L$(STAGING_DIR)/usr/lib is used and +# not -L/usr/lib. +define QWT_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install INSTALL_ROOT=$(STAGING_DIR) + $(SED) "s%QWT_INSTALL_PREFIX = .*%QWT_INSTALL_PREFIX = $(STAGING_DIR)/usr%" \ + $(STAGING_DIR)/usr/mkspecs/features/qwtconfig.pri +endef + +define QWT_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install INSTALL_ROOT=$(TARGET_DIR) + rm -Rf $(TARGET_DIR)/usr/mkspecs +endef + +$(eval $(qmake-package)) diff --git a/package/rabbitmq-c/Config.in b/package/rabbitmq-c/Config.in new file mode 100644 index 00000000..6dbd1467 --- /dev/null +++ b/package/rabbitmq-c/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_RABBITMQ_C + bool "rabbitmq-c" + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS + help + This is a C-language AMQP client library for use with v2.0+ + of the RabbitMQ broker. + + https://github.com/alanxz/rabbitmq-c + +comment "rabbitmq-c needs a toolchain w/ dynamic library, threads" + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/rabbitmq-c/rabbitmq-c.hash b/package/rabbitmq-c/rabbitmq-c.hash new file mode 100644 index 00000000..eb576265 --- /dev/null +++ b/package/rabbitmq-c/rabbitmq-c.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 6455efbaebad8891c59f274a852b75b5cc51f4d669dfc78d2ae7e6cc97fcd8c0 rabbitmq-c-0.10.0.tar.gz +sha256 94a12c906acb31a66c2c8a6c1b6e46cab52bc5694c5ada2a06d86b05d3d3f422 LICENSE-MIT diff --git a/package/rabbitmq-c/rabbitmq-c.mk b/package/rabbitmq-c/rabbitmq-c.mk new file mode 100644 index 00000000..e6ac52fd --- /dev/null +++ b/package/rabbitmq-c/rabbitmq-c.mk @@ -0,0 +1,38 @@ +################################################################################ +# +# rabbitmq-c +# +################################################################################ + +RABBITMQ_C_VERSION = 0.10.0 +RABBITMQ_C_SITE = $(call github,alanxz,rabbitmq-c,v$(RABBITMQ_C_VERSION)) +RABBITMQ_C_LICENSE = MIT +RABBITMQ_C_LICENSE_FILES = LICENSE-MIT +RABBITMQ_C_CPE_ID_VENDOR = rabbitmq-c_project +RABBITMQ_C_INSTALL_STAGING = YES +RABBITMQ_C_CONF_OPTS = \ + -DBUILD_API_DOCS=OFF \ + -DBUILD_TOOLS_DOCS=OFF + +# BUILD_SHARED_LIBS is handled in pkg-cmake.mk as it is a generic cmake variable +ifeq ($(BR2_SHARED_STATIC_LIBS),y) +RABBITMQ_C_CONF_OPTS += -DBUILD_STATIC_LIBS=ON +else ifeq ($(BR2_SHARED_LIBS),y) +RABBITMQ_C_CONF_OPTS += -DBUILD_STATIC_LIBS=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +RABBITMQ_C_CONF_OPTS += -DENABLE_SSL_SUPPORT=ON +RABBITMQ_C_DEPENDENCIES += openssl +else +RABBITMQ_C_CONF_OPTS += -DENABLE_SSL_SUPPORT=OFF +endif + +ifeq ($(BR2_PACKAGE_POPT),y) +RABBITMQ_C_CONF_OPTS += -DBUILD_TOOLS=ON +RABBITMQ_C_DEPENDENCIES += popt +else +RABBITMQ_C_CONF_OPTS += -DBUILD_TOOLS=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/rabbitmq-server/Config.in b/package/rabbitmq-server/Config.in new file mode 100644 index 00000000..b3b7639e --- /dev/null +++ b/package/rabbitmq-server/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_RABBITMQ_SERVER + bool "rabbitmq-server" + depends on BR2_PACKAGE_ERLANG + select BR2_PACKAGE_LIBXSLT + select BR2_PACKAGE_OPENSSL # Required to build Erlang's crypto and ssl + # applications + help + High-performance AMQP-compliant message broker written in + Erlang. + + http://www.rabbitmq.com + +comment "rabbitmq-server needs erlang" + depends on !BR2_PACKAGE_ERLANG diff --git a/package/rabbitmq-server/S50rabbitmq-server b/package/rabbitmq-server/S50rabbitmq-server new file mode 100644 index 00000000..35f78448 --- /dev/null +++ b/package/rabbitmq-server/S50rabbitmq-server @@ -0,0 +1,30 @@ +#!/bin/sh +# +# Start/stop rabbitmq-server +# + +INSTALLUSER=rabbitmq +RUNDIR=/var/run/rabbitmq +LOGDIR=/var/log/rabbitmq + +case "$1" in + start) + install -d -o "$INSTALLUSER" -g "$INSTALLUSER" "$RUNDIR" || exit 1 + install -d -o "$INSTALLUSER" -g "$INSTALLUSER" "$LOGDIR" || exit 1 + printf "Starting rabbitmq-server: " + su -c "/usr/sbin/rabbitmq-server -detached" - "$INSTALLUSER" 2>/dev/null + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + stop) + printf "Stopping rabbitmq-server: " + su -c "/usr/sbin/rabbitmqctl stop" - "$INSTALLUSER" + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + restart|reload) + "$0" stop || true + "$0" start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac diff --git a/package/rabbitmq-server/rabbitmq-server.hash b/package/rabbitmq-server/rabbitmq-server.hash new file mode 100644 index 00000000..693ab208 --- /dev/null +++ b/package/rabbitmq-server/rabbitmq-server.hash @@ -0,0 +1,25 @@ +# Locally computed +sha256 8c6729b985cb21bab13363b1c806cfa15845b046be9e641ab1496bd5a1eaf19d rabbitmq-server-3.8.2.tar.xz +sha256 a96b7ed2e7def9c86d84d9ca0e79e4a55fc8e6e202ac89caa4f9791ccb9cf2a3 LICENSE +sha256 acd82bfce369b066e7e612197206da4fa38b8614486658775d0b6f66ac30114a LICENSE-APACHE2 +sha256 aac73b3148f6d1d7111dbca32099f68d26c644c6813ae1e4f05f6579aa2663fe LICENSE-APACHE2-excanvas +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE-APACHE2-ExplorerCanvas +sha256 b04c8850fdf64d17233f0acbe4eb632f03bd663094233c949bdbe788858bb841 LICENSE-APL2-Stomp-Websocket +sha256 3c69f8327beaaa45d2f3d7831edf211d0f37d1d9c7754267478320697e1882e9 LICENSE-BSD-base64js +sha256 af7b5cdf5e16446c64d6e755b2a6386e38c56500ae27587edcd94c96d330ee35 LICENSE-BSD-recon +sha256 7615ea96ccddc822655cb48a9d2a5cac2f176fca7fe28131af934ce21f48cbc8 LICENSE-erlcloud +sha256 c69d6e3fc8c51730a706aba5dcd5df978cb0c7b20c7bfe788e063cbc7fc1b234 LICENSE-httpc_aws +sha256 c0e940d13f488849c27963e7d87f3fc27a2f5843cfd49148029a558251014689 LICENSE-ISC-cowboy +sha256 af399cded8f343407fb68eeb51755676e9700c65c380f073376afd8d20f428a1 LICENSE-MIT-EJS +sha256 b2614726fe57ee8267324ecfdebe6e578e5aaa5a77a7f84b9d26463c058147d1 LICENSE-MIT-EJS10 +sha256 0f26e121a7a1dab675bd8474cdc517428863036a668260033467c7278f488cd4 LICENSE-MIT-Erlware-Commons +sha256 52cb566b16d84314b92b91361ed072eaaf166e8d3dfa3d0fd3577613925f205c LICENSE-MIT-Flot +sha256 8cb9a8ff8cafd6a085fd4f086e797b719c334a621df19354dc286591003da3f5 LICENSE-MIT-jQuery +sha256 44f25d51c90aa55dd4b3ba7f3d6e9a594073fcbefe651e16e74cabd48005b476 LICENSE-MIT-jQuery164 +sha256 fc93cc7361401413887f4c1349e4b0be4bcef936eaafbcc7485038abe197c692 LICENSE-MIT-Mochi +sha256 b80081a5bb527dbe6b79f18a40f44b4ba6303e4856cadd249672c97b90e6dd7c LICENSE-MIT-Sammy +sha256 cfc50fa0d7ee02c2d71c8866ef211a4814e8c89c50b725d27e8bdf550291a9ed LICENSE-MIT-Sammy060 +sha256 c008551400c9629d5f35a4f4fb6a671cf574d41cb365ae57e3d90341e51b3bdd LICENSE-MPL +sha256 c008551400c9629d5f35a4f4fb6a671cf574d41cb365ae57e3d90341e51b3bdd LICENSE-MPL-RabbitMQ +sha256 66a3107d5ad6a058aab753eaac2047ccb2ed0e39465dd0fe5844da3e300d5172 LICENSE-MPL2 +sha256 c69d6e3fc8c51730a706aba5dcd5df978cb0c7b20c7bfe788e063cbc7fc1b234 LICENSE-rabbitmq_aws diff --git a/package/rabbitmq-server/rabbitmq-server.mk b/package/rabbitmq-server/rabbitmq-server.mk new file mode 100644 index 00000000..c5d3190d --- /dev/null +++ b/package/rabbitmq-server/rabbitmq-server.mk @@ -0,0 +1,68 @@ +################################################################################ +# +# rabbitmq-server +# +################################################################################ + +RABBITMQ_SERVER_VERSION = 3.8.2 +RABBITMQ_SERVER_SITE = https://github.com/rabbitmq/rabbitmq-server/releases/download/v$(RABBITMQ_SERVER_VERSION) +RABBITMQ_SERVER_SOURCE = rabbitmq-server-$(RABBITMQ_SERVER_VERSION).tar.xz +RABBITMQ_SERVER_LICENSE = MPL-1.1, Apache-2.0, BSD-3-Clause, BSD-2-Clause, MIT, MPL-2.0, ISC +RABBITMQ_SERVER_LICENSE_FILES = \ + LICENSE \ + LICENSE-APACHE2 \ + LICENSE-APACHE2-excanvas \ + LICENSE-APACHE2-ExplorerCanvas \ + LICENSE-APL2-Stomp-Websocket \ + LICENSE-BSD-base64js \ + LICENSE-BSD-recon \ + LICENSE-erlcloud \ + LICENSE-httpc_aws \ + LICENSE-ISC-cowboy \ + LICENSE-MIT-EJS \ + LICENSE-MIT-EJS10 \ + LICENSE-MIT-Erlware-Commons \ + LICENSE-MIT-Flot \ + LICENSE-MIT-jQuery \ + LICENSE-MIT-jQuery164 \ + LICENSE-MIT-Mochi \ + LICENSE-MIT-Sammy \ + LICENSE-MIT-Sammy060 \ + LICENSE-MPL \ + LICENSE-MPL-RabbitMQ \ + LICENSE-MPL2 \ + LICENSE-rabbitmq_aws +RABBITMQ_SERVER_CPE_ID_VENDOR = pivotal_software +RABBITMQ_SERVER_CPE_ID_PRODUCT = rabbitmq + +RABBITMQ_SERVER_DEPENDENCIES = host-elixir host-libxslt host-zip erlang libxslt +RABBITMQ_SERVER_TARGET_BINS = rabbitmq-plugins rabbitmq-server rabbitmqctl rabbitmq-env rabbitmq-defaults + +define RABBITMQ_SERVER_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define RABBITMQ_SERVER_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) PREFIX=$(TARGET_DIR)/usr -C $(@D) install + + for bin in $(RABBITMQ_SERVER_TARGET_BINS); do \ + ln -sf ../lib/erlang/lib/rabbitmq_server-$(RABBITMQ_SERVER_VERSION)/sbin/$$bin \ + $(TARGET_DIR)/usr/sbin/$$bin; \ + done +endef + +define RABBITMQ_SERVER_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0644 package/rabbitmq-server/rabbitmq-server.service \ + $(TARGET_DIR)/usr/lib/systemd/system/rabbitmq-server.service +endef + +define RABBITMQ_SERVER_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/rabbitmq-server/S50rabbitmq-server \ + $(TARGET_DIR)/etc/init.d/S50rabbitmq-server +endef + +define RABBITMQ_SERVER_USERS + rabbitmq -1 rabbitmq -1 * /var/lib/rabbitmq /bin/sh - rabbitmq-server daemon +endef + +$(eval $(generic-package)) diff --git a/package/rabbitmq-server/rabbitmq-server.service b/package/rabbitmq-server/rabbitmq-server.service new file mode 100644 index 00000000..f69b33d4 --- /dev/null +++ b/package/rabbitmq-server/rabbitmq-server.service @@ -0,0 +1,16 @@ +[Unit] +Description=RabbitMQ Messaging Server +After=syslog.target network.target + +[Service] +Type=simple +User=rabbitmq +Group=rabbitmq +Environment=HOME=/var/lib/rabbitmq +WorkingDirectory=/var/lib/rabbitmq +LogsDirectory=/var/log/rabbitmq +ExecStart=/usr/sbin/rabbitmq-server +ExecStop=/usr/sbin/rabbitmqctl stop + +[Install] +WantedBy=multi-user.target diff --git a/package/racehound/0001-Fix-module-install-path-lib-instead-of-usr-lib-prefi.patch b/package/racehound/0001-Fix-module-install-path-lib-instead-of-usr-lib-prefi.patch new file mode 100644 index 00000000..6cac55d3 --- /dev/null +++ b/package/racehound/0001-Fix-module-install-path-lib-instead-of-usr-lib-prefi.patch @@ -0,0 +1,26 @@ +From 4f8ed39ddaf17c7dd4ddbdb88e67097f00c98173 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Thu, 16 Jul 2015 23:11:25 +0200 +Subject: [PATCH] Fix module install path (/lib instead of /usr/lib prefix) + +Signed-off-by: Peter Seiderer +--- + cmake/modules/path_prefixes.cmake | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/cmake/modules/path_prefixes.cmake b/cmake/modules/path_prefixes.cmake +index 3cb1fe2..9dc50a4 100644 +--- a/cmake/modules/path_prefixes.cmake ++++ b/cmake/modules/path_prefixes.cmake +@@ -113,7 +113,7 @@ set(RH_INSTALL_PREFIX_DOC + # Set derivative prefixes + + # additional, 1 +-set(RH_INSTALL_PREFIX_KMODULE "${RH_INSTALL_PREFIX_LIB}/modules/${KBUILD_VERSION_STRING}/misc") ++set(RH_INSTALL_PREFIX_KMODULE "/lib/modules/${KBUILD_VERSION_STRING}/misc") + # Another variant + #"${RH_INSTALL_PREFIX_LIB}/modules/${KBUILD_VERSION_STRING}/extra") + # additional, 2 +-- +2.1.4 + diff --git a/package/racehound/Config.in b/package/racehound/Config.in new file mode 100644 index 00000000..d13f90ad --- /dev/null +++ b/package/racehound/Config.in @@ -0,0 +1,37 @@ +config BR2_PACKAGE_RACEHOUND + bool "racehound" + depends on BR2_LINUX_KERNEL + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR # elfutils + depends on !BR2_STATIC_LIBS # elfutils + depends on BR2_TOOLCHAIN_HAS_THREADS # elfutils + depends on BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC # elfutils + # only x86/x86_64 supported + depends on BR2_i386 || BR2_x86_64 + select BR2_PACKAGE_ELFUTILS + select BR2_LINUX_NEEDS_MODULES # not using kernel-module infra + help + RaceHound can be used to detect data races in the Linux + kernel on x86. + + RaceHound needs the following kernel configurations enabled: + - CONFIG_X86_32 or CONFIG_X86_64 + - CONFIG_MODULES + - CONFIG_MODULE_UNLOAD + - CONFIG_SYSFS + - CONFIG_DEBUG_FS + - CONFIG_KALLSYMS + - CONFIG_KALLSYMS_ALL + - CONFIG_KPROBES + + https://github.com/winnukem/racehound + +comment "racehound needs an Linux kernel >= 3.14 to be built" + depends on !BR2_LINUX_KERNEL + depends on BR2_i386 || BR2_x86_64 + +comment "racehound needs a uClibc or glibc toolchain w/ C++, wchar, dynamic library, threads" + depends on BR2_i386 || BR2_x86_64 + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || BR2_STATIC_LIBS \ + || !BR2_TOOLCHAIN_HAS_THREADS \ + || !(BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC) diff --git a/package/racehound/racehound.hash b/package/racehound/racehound.hash new file mode 100644 index 00000000..fc642430 --- /dev/null +++ b/package/racehound/racehound.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 935bc4a7c7b645dee5b905f6e97d0db3f0ac4f48e71d15f4e3982811017ac43c racehound-f09f06fcc3c77c8c5541be3ba5be80aa8148ce0c.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE diff --git a/package/racehound/racehound.mk b/package/racehound/racehound.mk new file mode 100644 index 00000000..6499e166 --- /dev/null +++ b/package/racehound/racehound.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# racehound +# +################################################################################ + +RACEHOUND_VERSION = f09f06fcc3c77c8c5541be3ba5be80aa8148ce0c +RACEHOUND_SITE = $(call github,winnukem,racehound,$(RACEHOUND_VERSION)) +RACEHOUND_LICENSE = GPL-2.0 +RACEHOUND_LICENSE_FILES = LICENSE +RACEHOUND_SUPPORTS_IN_SOURCE_BUILD = NO + +RACEHOUND_DEPENDENCIES = elfutils linux + +# override auto detection (uses host parameters, not cross compile +# ready) +RACEHOUND_CONF_OPTS += \ + -DKERNEL_VERSION_OK=YES \ + -DMODULE_BUILD_SUPPORTED=YES \ + -DKERNEL_CONFIG_OK=YES \ + -DKBUILD_BUILD_DIR=$(LINUX_DIR) \ + -DKBUILD_VERSION_STRING=$(LINUX_VERSION_PROBED) + +# cross compile environment for linux kernel module +RACEHOUND_MAKE_ENV = $(LINUX_MAKE_FLAGS) + +$(eval $(cmake-package)) diff --git a/package/radvd/50-radvd.preset b/package/radvd/50-radvd.preset new file mode 100644 index 00000000..90d0ee4b --- /dev/null +++ b/package/radvd/50-radvd.preset @@ -0,0 +1 @@ +disable radvd.service diff --git a/package/radvd/Config.in b/package/radvd/Config.in new file mode 100644 index 00000000..f1df0c3c --- /dev/null +++ b/package/radvd/Config.in @@ -0,0 +1,15 @@ +config BR2_PACKAGE_RADVD + bool "radvd" + depends on BR2_USE_MMU # fork() + help + IPv6 Router Advertisement Daemon. + + On busybox and sysvinit systems, radvd will be started only if + a /etc/radvd.conf exists. + + To enable it at build time with systemd, add /etc/radvd.conf + and a /etc/systemd/system-preset/40-radvd.preset file with + + enable radvd.service + + http://www.litech.org/radvd/ diff --git a/package/radvd/S50radvd b/package/radvd/S50radvd new file mode 100644 index 00000000..f73ce24e --- /dev/null +++ b/package/radvd/S50radvd @@ -0,0 +1,59 @@ +#!/bin/sh + +DAEMON="radvd" +PIDFILE="/var/run/$DAEMON.pid" + +RADVD_ARGS="-m syslog" + +# shellcheck source=/dev/null +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON" + +[ -f /etc/radvd.conf ] || exit 0 + +[ -f /proc/sys/net/ipv6/conf/all/forwarding ] || { + echo "Error: radvd requires IPv6 forwarding support." + exit 1 +} + +start() { + printf 'Starting %s: ' "$DAEMON" + echo "1" > /proc/sys/net/ipv6/conf/all/forwarding + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon -S -q -p "$PIDFILE" -x "/usr/sbin/$DAEMON" \ + -- $RADVD_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" -x "/usr/sbin/$DAEMON" + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +case "$1" in + start|stop) + "$1";; + restart|reload) + restart;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/radvd/radvd.hash b/package/radvd/radvd.hash new file mode 100644 index 00000000..a624db24 --- /dev/null +++ b/package/radvd/radvd.hash @@ -0,0 +1,3 @@ +# From http://www.litech.org/radvd/dist/radvd-2.19.tar.gz.sha512 +sha512 caa621fd77e34ff6858d60a41b0ee02aff967ac14f2b84c402359744f4bece5c1563419860431c328adc0385e9893ed1f2421d652247a3aa0dfc0aaad1e01233 radvd-2.19.tar.gz +sha256 40a6db00cf0b97f031eaa6c6e87157788f40ced1b88e3ea6d78779bd2a39dc80 COPYRIGHT diff --git a/package/radvd/radvd.mk b/package/radvd/radvd.mk new file mode 100644 index 00000000..bed63678 --- /dev/null +++ b/package/radvd/radvd.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# radvd +# +################################################################################ + +RADVD_VERSION = 2.19 +RADVD_SITE = http://www.litech.org/radvd/dist +RADVD_DEPENDENCIES = host-bison host-flex host-pkgconf +# We need to ignore , because radvd already includes +# , which conflicts with . +RADVD_CONF_ENV = \ + ac_cv_prog_cc_c99='-std=gnu99' \ + ac_cv_header_linux_if_arp_h=no +RADVD_LICENSE = BSD-4-Clause-like +RADVD_LICENSE_FILES = COPYRIGHT + +ifeq ($(BR2_TOOLCHAIN_HAS_SSP),y) +RADVD_CONF_OPTS += --with-stack-protector +else +RADVD_CONF_OPTS += --without-stack-protector +endif + +# We don't provide /etc/radvd.conf, so disable the service by default. +define RADVD_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0644 package/radvd/50-radvd.preset \ + $(TARGET_DIR)/usr/lib/systemd/system-preset/50-radvd.preset +endef + +define RADVD_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/radvd/S50radvd $(TARGET_DIR)/etc/init.d/S50radvd +endef + +$(eval $(autotools-package)) diff --git a/package/ramsmp/Config.in b/package/ramsmp/Config.in new file mode 100644 index 00000000..411e7de9 --- /dev/null +++ b/package/ramsmp/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_RAMSMP + bool "ramspeed/smp" + depends on BR2_USE_MMU # fork() + help + RAMspeed/SMP is a free open source command line utility to + measure cache and memory performance of multiprocessor + machines. + + http://alasir.com/software/ramspeed/ diff --git a/package/ramsmp/Makefile b/package/ramsmp/Makefile new file mode 100644 index 00000000..5cd76e09 --- /dev/null +++ b/package/ramsmp/Makefile @@ -0,0 +1,14 @@ + +all: generic + +generic: ramsmp.c fltmem.c fltmark.c intmem.c intmark.c + $(CC) $(CFLAGS) $(LDFLAGS) $^ -o ramsmp + +i386: ramsmp.c i386/*.s i386/cpuinfo/*.s + $(CC) $(CFLAGS) -DI386_ASM $(LDFLAGS) $^ -o ramsmp + +x86_64: ramsmp.c amd64/*.s + $(CC) $(CFLAGS) -DAMD64_ASM $(LDFLAGS) $^ -o ramsmp + +clean: + rm -f *.o ramsmp diff --git a/package/ramsmp/ramsmp.hash b/package/ramsmp/ramsmp.hash new file mode 100644 index 00000000..c5e29a39 --- /dev/null +++ b/package/ramsmp/ramsmp.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 39fb15493fb3c293575746d56f6ab9faaa1d876d8b1f0d8e5a4042d2ace95839 ramsmp-3.5.0.tar.gz +sha256 2c308cffbab01762f8f6b11725725a227080746ef865f2756c9c9e1591dddaad LICENCE diff --git a/package/ramsmp/ramsmp.mk b/package/ramsmp/ramsmp.mk new file mode 100644 index 00000000..6098376d --- /dev/null +++ b/package/ramsmp/ramsmp.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# ramsmp +# +################################################################################ + +RAMSMP_VERSION = 3.5.0 +RAMSMP_SITE = http://www.alasir.com/software/ramspeed +RAMSMP_ARCH = $(if $(BR2_i386),i386)$(if $(BR2_x86_64),x86_64) +RAMSMP_LICENSE = Alasir License +RAMSMP_LICENSE_FILES = LICENCE + +define RAMSMP_BUILD_CMDS + cp -f package/ramsmp/Makefile $(@D) + $(TARGET_CONFIGURE_OPTS) make -C $(@D) $(RAMSMP_ARCH) +endef + +define RAMSMP_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/ramsmp $(TARGET_DIR)/usr/bin/ramsmp +endef + +$(eval $(generic-package)) diff --git a/package/ramspeed/Config.in b/package/ramspeed/Config.in new file mode 100644 index 00000000..b236329a --- /dev/null +++ b/package/ramspeed/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_RAMSPEED + bool "ramspeed" + help + RAMspeed is a free open source command line utility + to measure cache and memory performance. + + http://alasir.com/software/ramspeed/ diff --git a/package/ramspeed/Makefile b/package/ramspeed/Makefile new file mode 100644 index 00000000..f4a4de6a --- /dev/null +++ b/package/ramspeed/Makefile @@ -0,0 +1,14 @@ + +all: generic + +generic: ramspeed.c fltmem.c fltmark.c intmem.c intmark.c + $(CC) $(CFLAGS) $(LDFLAGS) $^ -o ramspeed + +i386: ramspeed.c i386/*.s i386/cpuinfo/*.s + $(CC) $(CFLAGS) -DI386_ASM $(LDFLAGS) $^ -o ramspeed + +x86_64: ramspeed.c amd64/*.s + $(CC) $(CFLAGS) -DAMD64_ASM $(LDFLAGS) $^ -o ramspeed + +clean: + rm -f *.o ramspeed diff --git a/package/ramspeed/ramspeed.hash b/package/ramspeed/ramspeed.hash new file mode 100644 index 00000000..5a6bfe3e --- /dev/null +++ b/package/ramspeed/ramspeed.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 f84e2e42b2b6b221ef9b586f6ae63d863db4ff21858e0ce7c84622a7c9522950 ramspeed-2.6.0.tar.gz +sha256 2c308cffbab01762f8f6b11725725a227080746ef865f2756c9c9e1591dddaad LICENCE diff --git a/package/ramspeed/ramspeed.mk b/package/ramspeed/ramspeed.mk new file mode 100644 index 00000000..7dc4faae --- /dev/null +++ b/package/ramspeed/ramspeed.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# ramspeed +# +################################################################################ + +RAMSPEED_VERSION = 2.6.0 +RAMSPEED_SITE = http://www.alasir.com/software/ramspeed +RAMSPEED_ARCH = $(if $(BR2_i386),i386)$(if $(BR2_x86_64),x86_64) +RAMSPEED_LICENSE = Alasir License +RAMSPEED_LICENSE_FILES = LICENCE + +define RAMSPEED_BUILD_CMDS + cp -f package/ramspeed/Makefile $(@D) + $(TARGET_CONFIGURE_OPTS) make -C $(@D) $(RAMSPEED_ARCH) +endef + +define RAMSPEED_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/ramspeed $(TARGET_DIR)/usr/bin/ramspeed +endef + +$(eval $(generic-package)) diff --git a/package/ranger/0001-colorscheme-check-for-compiled-python-files.patch b/package/ranger/0001-colorscheme-check-for-compiled-python-files.patch new file mode 100644 index 00000000..bde3fee0 --- /dev/null +++ b/package/ranger/0001-colorscheme-check-for-compiled-python-files.patch @@ -0,0 +1,31 @@ +From 654e3116825c4d12340613196279fb13a5662113 Mon Sep 17 00:00:00 2001 +From: Thijs Vermeir +Date: Tue, 20 Oct 2015 18:13:36 +0200 +Subject: [PATCH] colorscheme: check for compiled python files + +Some systems only provide *.pyc files + +Patch accepted upstream: +https://github.com/hut/ranger/commit/d69f1ed3207c785d1a39ddd2992f6abb021b7540 + +Signed-off-by: Thijs Vermeir +--- + ranger/gui/colorscheme.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ranger/gui/colorscheme.py b/ranger/gui/colorscheme.py +index d6afcac..d2b3b2d 100644 +--- a/ranger/gui/colorscheme.py ++++ b/ranger/gui/colorscheme.py +@@ -86,7 +86,7 @@ def _colorscheme_name_to_class(signal): + usecustom = not ranger.arg.clean + + def exists(colorscheme): +- return os.path.exists(colorscheme + '.py') ++ return os.path.exists(colorscheme + '.py') or os.path.exists(colorscheme + '.pyc') + + def is_scheme(x): + try: +-- +2.6.1 + diff --git a/package/ranger/Config.in b/package/ranger/Config.in new file mode 100644 index 00000000..ee0ffecd --- /dev/null +++ b/package/ranger/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_RANGER + bool "ranger" + depends on BR2_USE_MMU # python3 + depends on BR2_USE_WCHAR # python3 + depends on BR2_TOOLCHAIN_HAS_THREADS # python3 + depends on !BR2_STATIC_LIBS # python3 + select BR2_PACKAGE_PYTHON3 if !BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON_CURSES if BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON3_CURSES if BR2_PACKAGE_PYTHON3 + help + ranger is a console file manager with VI key bindings. It + provides a minimalistic and nice curses interface with a + view on the directory hierarchy. It ships with "rifle", a + file launcher that is good at automatically finding out + which program to use for what file type. + + http://ranger.nongnu.org + +comment "ranger needs a toolchain w/ wchar, threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS diff --git a/package/ranger/ranger.hash b/package/ranger/ranger.hash new file mode 100644 index 00000000..dee088f2 --- /dev/null +++ b/package/ranger/ranger.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 94f6e342daee4445f15db5a7440a11138487c49cc25da0c473bbf1b8978f5b79 ranger-1.7.2.tar.gz +# Locally computed +sha256 fa3b40d44066b033ac8a134b792a4a4a1915aa7bc7757098e0f67080648a3271 AUTHORS diff --git a/package/ranger/ranger.mk b/package/ranger/ranger.mk new file mode 100644 index 00000000..aaca4386 --- /dev/null +++ b/package/ranger/ranger.mk @@ -0,0 +1,26 @@ +################################################################################ +# +# ranger +# +################################################################################ + +RANGER_VERSION = 1.7.2 +RANGER_SITE = http://ranger.nongnu.org +RANGER_SETUP_TYPE = distutils +RANGER_LICENSE = GPL-3.0 +RANGER_LICENSE_FILES = AUTHORS + +# The ranger script request python to be called with -O (optimize generated +# bytecode slightly; also PYTHONOPTIMIZE=x). This implicitly requires the python +# source files to be present. Therefore, the -O flag is removed when only the .pyc +# files are installed. + +define RANGER_DO_NOT_GENERATE_BYTECODE_AT_RUNTIME + $(SED) 's%/usr/bin/python -O%/usr/bin/python%g' $(@D)/scripts/ranger +endef + +ifeq ($(BR2_PACKAGE_PYTHON3_PYC_ONLY)$(BR2_PACKAGE_PYTHON_PYC_ONLY),y) +RANGER_POST_PATCH_HOOKS += RANGER_DO_NOT_GENERATE_BYTECODE_AT_RUNTIME +endif + +$(eval $(python-package)) diff --git a/package/rapidjson/Config.in b/package/rapidjson/Config.in new file mode 100644 index 00000000..abf8996a --- /dev/null +++ b/package/rapidjson/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_RAPIDJSON + bool "rapidjson" + depends on BR2_INSTALL_LIBSTDCPP + help + A fast JSON parser/generator for C++ with both SAX/DOM style + API. + + http://rapidjson.org/ + +comment "rapidjson needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/rapidjson/rapidjson.hash b/package/rapidjson/rapidjson.hash new file mode 100644 index 00000000..e8b2c4d5 --- /dev/null +++ b/package/rapidjson/rapidjson.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 bf7ced29704a1e696fbccf2a2b4ea068e7774fa37f6d7dd4039d0787f8bed98e rapidjson-1.1.0.tar.gz +sha256 a140e5d46fe734a1c78f1a3c3ef207871dd75648be71fdda8e309b23ab8b1f32 license.txt diff --git a/package/rapidjson/rapidjson.mk b/package/rapidjson/rapidjson.mk new file mode 100644 index 00000000..d3bcef7d --- /dev/null +++ b/package/rapidjson/rapidjson.mk @@ -0,0 +1,22 @@ +################################################################################ +# +# rapidjson +# +################################################################################ + +RAPIDJSON_VERSION = 1.1.0 +RAPIDJSON_SITE = $(call github,miloyip,rapidjson,v$(RAPIDJSON_VERSION)) +RAPIDJSON_LICENSE = MIT +RAPIDJSON_LICENSE_FILES = license.txt +RAPIDJSON_CPE_ID_VENDOR = tencent + +# rapidjson is a header-only C++ library +RAPIDJSON_INSTALL_TARGET = NO +RAPIDJSON_INSTALL_STAGING = YES + +RAPIDJSON_CONF_OPTS = \ + -DRAPIDJSON_BUILD_DOC=OFF \ + -DRAPIDJSON_BUILD_EXAMPLES=OFF \ + -DRAPIDJSON_BUILD_TESTS=OFF + +$(eval $(cmake-package)) diff --git a/package/rapidxml/0001-ensure-internal-print-operations-are-declared-before.patch b/package/rapidxml/0001-ensure-internal-print-operations-are-declared-before.patch new file mode 100644 index 00000000..fcf1b3cc --- /dev/null +++ b/package/rapidxml/0001-ensure-internal-print-operations-are-declared-before.patch @@ -0,0 +1,38 @@ +[PATCH] ensure internal print operations are declared before use + +Stock rapidxml-1.13 does not allow implementers of the +`rapidxml_print.hpp` header to build under GCC 4.7 (or newer) due to +compliation issues. This is a result of "Name lookup changes" introduced +in GCC 4.7 [1]. The following adds forward declarations required to +compile with GCC 4.7+. + +This issue has been mentioned upstream [2], but it has yet to be fixed +in official sources. + +[1]: https://gcc.gnu.org/gcc-4.7/porting_to.html +[2]: https://sourceforge.net/p/rapidxml/bugs/16/ + +Signed-off-by: James Knight + +Index: b/rapidxml_print.hpp +=================================================================== +--- a/rapidxml_print.hpp ++++ b/rapidxml_print.hpp +@@ -101,7 +101,16 @@ + + /////////////////////////////////////////////////////////////////////////// + // Internal printing operations +- ++ ++ template inline OutIt print_cdata_node(OutIt out, const xml_node *node, int flags, int indent); ++ template inline OutIt print_children(OutIt out, const xml_node *node, int flags, int indent); ++ template inline OutIt print_comment_node(OutIt out, const xml_node *node, int flags, int indent); ++ template inline OutIt print_data_node(OutIt out, const xml_node *node, int flags, int indent); ++ template inline OutIt print_declaration_node(OutIt out, const xml_node *node, int flags, int indent); ++ template inline OutIt print_doctype_node(OutIt out, const xml_node *node, int flags, int indent); ++ template inline OutIt print_element_node(OutIt out, const xml_node *node, int flags, int indent); ++ template inline OutIt print_pi_node(OutIt out, const xml_node *node, int flags, int indent); ++ + // Print node + template + inline OutIt print_node(OutIt out, const xml_node *node, int flags, int indent) diff --git a/package/rapidxml/Config.in b/package/rapidxml/Config.in new file mode 100644 index 00000000..76b2248e --- /dev/null +++ b/package/rapidxml/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_RAPIDXML + bool "rapidxml" + help + RapidXml is an attempt to create the fastest XML parser + possible, while retaining useability, portability and + reasonable W3C compatibility. It is an in-situ parser with + parsing speed approaching speed of strlen function executed + on the same data. + + http://sourceforge.net/projects/rapidxml/ + https://en.wikipedia.org/wiki/RapidXml diff --git a/package/rapidxml/rapidxml.hash b/package/rapidxml/rapidxml.hash new file mode 100644 index 00000000..398bc147 --- /dev/null +++ b/package/rapidxml/rapidxml.hash @@ -0,0 +1,7 @@ +# From https://sourceforge.net/projects/rapidxml/files/rapidxml/rapidxml%201.13/ +sha1 f5fd4fbc5ad7e96045313697811d65ea8089a950 rapidxml-1.13.zip +md5 7b4b42c9331c90aded23bb55dc725d6a rapidxml-1.13.zip + +# Locally calculated +sha256 c3f0b886374981bb20fabcf323d755db4be6dba42064599481da64a85f5b3571 rapidxml-1.13.zip +sha256 794bf3b2ecf5cf0c740ac6c524d66ce6284c4b1de1f983d21a242b8abbeb9720 license.txt diff --git a/package/rapidxml/rapidxml.mk b/package/rapidxml/rapidxml.mk new file mode 100644 index 00000000..ef2dd397 --- /dev/null +++ b/package/rapidxml/rapidxml.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# rapidxml +# +################################################################################ + +RAPIDXML_VERSION = 1.13 +RAPIDXML_SOURCE = rapidxml-$(RAPIDXML_VERSION).zip +RAPIDXML_SITE = http://downloads.sourceforge.net/project/rapidxml/rapidxml/rapidxml%20$(RAPIDXML_VERSION) +RAPIDXML_LICENSE = BSL-1.0 or MIT +RAPIDXML_LICENSE_FILES = license.txt + +# C++ headers only +RAPIDXML_INSTALL_TARGET = NO +RAPIDXML_INSTALL_STAGING = YES + +define RAPIDXML_EXTRACT_CMDS + $(UNZIP) -d $(@D) $(RAPIDXML_DL_DIR)/$(RAPIDXML_SOURCE) + mv $(@D)/rapidxml-$(RAPIDXML_VERSION)/* $(@D)/ + rmdir $(@D)/rapidxml-$(RAPIDXML_VERSION) +endef + +define RAPIDXML_INSTALL_STAGING_CMDS + mkdir -p $(STAGING_DIR)/usr/include/rapidxml + cp -dpfr $(@D)/*hpp $(STAGING_DIR)/usr/include/rapidxml +endef + +$(eval $(generic-package)) diff --git a/package/raptor/0001-configure.ac-remove-conditional-lib-inclusion.patch b/package/raptor/0001-configure.ac-remove-conditional-lib-inclusion.patch new file mode 100644 index 00000000..7367ad23 --- /dev/null +++ b/package/raptor/0001-configure.ac-remove-conditional-lib-inclusion.patch @@ -0,0 +1,21 @@ +Removed header Include path from the configure file as path was +from the host, which is wrong for the cross compilation. +Upstream: None + +Signed-off-by: Nitin Mendiratta + +diff --git a/configure.ac b/configure.ac +index 10ff870..27b9957 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1145,9 +1145,7 @@ have_lininn=no + have_inn_parsedate=no + + oCPPFLAGS="$CPPFLAGS" +-if test -d /usr/include/inn; then +- CPPFLAGS="$CPPFLAGS -I/usr/include/inn" +-fi ++ + AC_CHECK_HEADER(libinn.h) + CPPFLAGS="$oCPPFLAGS" + diff --git a/package/raptor/0002-Calcualte-max-nspace-declarations-correctly-for-XML-.patch b/package/raptor/0002-Calcualte-max-nspace-declarations-correctly-for-XML-.patch new file mode 100644 index 00000000..406e265c --- /dev/null +++ b/package/raptor/0002-Calcualte-max-nspace-declarations-correctly-for-XML-.patch @@ -0,0 +1,47 @@ +From 590681e546cd9aa18d57dc2ea1858cb734a3863f Mon Sep 17 00:00:00 2001 +From: Dave Beckett +Date: Sun, 16 Apr 2017 23:15:12 +0100 +Subject: [PATCH] Calcualte max nspace declarations correctly for XML writer + +(raptor_xml_writer_start_element_common): Calculate max including for +each attribute a potential name and value. + +Fixes Issues #0000617 http://bugs.librdf.org/mantis/view.php?id=617 +and #0000618 http://bugs.librdf.org/mantis/view.php?id=618 + +[Peter: fixes CVE-2017-18926, upstream: + https://github.com/dajobe/raptor/commit/590681e546cd9aa18d57dc2ea1858cb734a3863f] +Signed-off-by: Peter Korsgaard +--- + src/raptor_xml_writer.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/src/raptor_xml_writer.c b/src/raptor_xml_writer.c +index 693b9468..0d3a36a5 100644 +--- a/src/raptor_xml_writer.c ++++ b/src/raptor_xml_writer.c +@@ -181,9 +181,10 @@ raptor_xml_writer_start_element_common(raptor_xml_writer* xml_writer, + size_t nspace_declarations_count = 0; + unsigned int i; + +- /* max is 1 per element and 1 for each attribute + size of declared */ + if(nstack) { +- int nspace_max_count = element->attribute_count+1; ++ int nspace_max_count = element->attribute_count * 2; /* attr and value */ ++ if(element->name->nspace) ++ nspace_max_count++; + if(element->declared_nspaces) + nspace_max_count += raptor_sequence_size(element->declared_nspaces); + if(element->xml_language) +@@ -237,7 +238,7 @@ raptor_xml_writer_start_element_common(raptor_xml_writer* xml_writer, + } + } + +- /* Add the attribute + value */ ++ /* Add the attribute's value */ + nspace_declarations[nspace_declarations_count].declaration= + raptor_qname_format_as_xml(element->attributes[i], + &nspace_declarations[nspace_declarations_count].length); +-- +2.20.1 + diff --git a/package/raptor/Config.in b/package/raptor/Config.in new file mode 100644 index 00000000..65979a2b --- /dev/null +++ b/package/raptor/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_RAPTOR + bool "raptor" + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_LIBXSLT + help + A C library that provides a set of parsers and + serializers that generate Resource Description + Framework (RDF) triples by parsing syntaxes or + serialize the triples into a syntax. + + http://librdf.org/raptor/ diff --git a/package/raptor/raptor.hash b/package/raptor/raptor.hash new file mode 100644 index 00000000..2a54bf27 --- /dev/null +++ b/package/raptor/raptor.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 ada7f0ba54787b33485d090d3d2680533520cd4426d2f7fb4782dd4a6a1480ed raptor2-2.0.15.tar.gz +sha256 6b926a47abfb87451c436fbd4a868defec963d0232c70b806ac02d4a2a6e1968 LICENSE.txt diff --git a/package/raptor/raptor.mk b/package/raptor/raptor.mk new file mode 100644 index 00000000..6d21fad5 --- /dev/null +++ b/package/raptor/raptor.mk @@ -0,0 +1,49 @@ +################################################################################ +# +# raptor +# +################################################################################ + +RAPTOR_VERSION = 2.0.15 +RAPTOR_SOURCE = raptor2-$(RAPTOR_VERSION).tar.gz +RAPTOR_SITE = http://download.librdf.org/source +RAPTOR_DEPENDENCIES = libxml2 libxslt +RAPTOR_LICENSE = GPL-2.0+ or LGPL-2.1+ or Apache-2.0+ +RAPTOR_LICENSE_FILES = LICENSE.txt +RAPTOR_CPE_ID_VENDOR = librdf +RAPTOR_CPE_ID_PRODUCT = raptor_rdf_syntax_library +RAPTOR_INSTALL_STAGING = YES + +# Flag is added to make sure the patch is applied for the configure.ac of raptor. +RAPTOR_AUTORECONF = YES + +# 0002-Calcualte-max-nspace-declarations-correctly-for-XML-.patch +RAPTOR_IGNORE_CVES += CVE-2017-18926 + +RAPTOR_CONF_OPTS =\ + --with-xml2-config=$(STAGING_DIR)/usr/bin/xml2-config \ + --with-xslt-config=$(STAGING_DIR)/usr/bin/xslt-config + +ifeq ($(BR2_PACKAGE_LIBCURL),y) +RAPTOR_DEPENDENCIES += libcurl +RAPTOR_CONF_OPTS += --with-curl-config=$(STAGING_DIR)/usr/bin/curl-config +else +RAPTOR_CONF_OPTS += --with-curl-config=no +endif + +ifeq ($(BR2_PACKAGE_YAJL),y) +RAPTOR_DEPENDENCIES += yajl +RAPTOR_CONF_ENV += LIBS="-lm" +RAPTOR_CONF_OPTS += --with-yajl=$(STAGING_DIR)/usr +else +RAPTOR_CONF_OPTS += --with-yajl=no +endif + +ifeq ($(BR2_PACKAGE_ICU),y) +RAPTOR_DEPENDENCIES += icu +RAPTOR_CONF_OPTS += --with-icu-config=$(STAGING_DIR)/usr/bin/icu-config +else +RAPTOR_CONF_OPTS += --with-icu-config=no +endif + +$(eval $(autotools-package)) diff --git a/package/raspberrypi-usbboot/0001-Makefile-allow-passing-CFLAGS-LDFLAGS.patch b/package/raspberrypi-usbboot/0001-Makefile-allow-passing-CFLAGS-LDFLAGS.patch new file mode 100644 index 00000000..cdab6070 --- /dev/null +++ b/package/raspberrypi-usbboot/0001-Makefile-allow-passing-CFLAGS-LDFLAGS.patch @@ -0,0 +1,28 @@ +From 5b015e67af27679f4ca8f7f5f2f71020ec054b0c Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Fri, 2 Dec 2016 23:09:44 +0100 +Subject: [PATCH] Makefile: allow passing CFLAGS/LDFLAGS + +This might be needed to pass some custom CFLAGS/LDFLAGS when building +rpiboot. + +Submitted-upstream: https://github.com/raspberrypi/usbboot/pull/2 +Signed-off-by: Thomas Petazzoni +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index 3e7d1e4..d9a7220 100755 +--- a/Makefile ++++ b/Makefile +@@ -1,5 +1,5 @@ + rpiboot: main.c +- $(CC) -g -o $@ $< -lusb-1.0 ++ $(CC) -g $(CFLAGS) -o $@ $< -lusb-1.0 $(LDFLAGS) + + install: rpiboot + cp rpiboot /usr/bin +-- +2.7.4 + diff --git a/package/raspberrypi-usbboot/0002-Makefile-add-DESTDIR-support.patch b/package/raspberrypi-usbboot/0002-Makefile-add-DESTDIR-support.patch new file mode 100644 index 00000000..a757cb0e --- /dev/null +++ b/package/raspberrypi-usbboot/0002-Makefile-add-DESTDIR-support.patch @@ -0,0 +1,51 @@ +From 905bc741b189d67160b27551b8ad01459c2707a0 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Fri, 2 Dec 2016 23:10:37 +0100 +Subject: [PATCH] Makefile: add DESTDIR support + +This allows installing rpiboot outside of /usr if needed. + +Submitted-upstream: https://github.com/raspberrypi/usbboot/pull/2 +Signed-off-by: Thomas Petazzoni +[Arnout: remove /usr] +Signed-off-by: Arnout Vandecappelle (Essensium/Mind) +--- + Makefile | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +diff --git a/Makefile b/Makefile +index d9a7220..7835b7f 100755 +--- a/Makefile ++++ b/Makefile +@@ -2,18 +2,18 @@ rpiboot: main.c + $(CC) -g $(CFLAGS) -o $@ $< -lusb-1.0 $(LDFLAGS) + + install: rpiboot +- cp rpiboot /usr/bin +- mkdir -p /usr/share/rpiboot +- cp usbbootcode.bin /usr/share/rpiboot +- cp msd.elf /usr/share/rpiboot +- cp buildroot.elf /usr/share/rpiboot ++ cp rpiboot $(DESTDIR)bin ++ mkdir -p $(DESTDIR)/share/rpiboot ++ cp usbbootcode.bin $(DESTDIR)/share/rpiboot ++ cp msd.elf $(DESTDIR)/share/rpiboot ++ cp buildroot.elf $(DESTDIR)/share/rpiboot + + uninstall: +- rm -f /usr/bin/rpiboot +- rm -f /usr/share/rpiboot/usbbootcode.bin +- rm -f /usr/share/rpiboot/msd.elf +- rm -f /usr/share/rpiboot/buildroot.elf +- rmdir --ignore-fail-on-non-empty /usr/share/rpiboot/ ++ rm -f $(DESTDIR)/bin/rpiboot ++ rm -f $(DESTDIR)/share/rpiboot/usbbootcode.bin ++ rm -f $(DESTDIR)/share/rpiboot/msd.elf ++ rm -f $(DESTDIR)/share/rpiboot/buildroot.elf ++ rmdir --ignore-fail-on-non-empty $(DESTDIR)/share/rpiboot/ + + clean: + rm rpiboot +-- +2.7.4 + diff --git a/package/raspberrypi-usbboot/0003-main.c-rework-logic-to-find-def1-def2-and-def3-files.patch b/package/raspberrypi-usbboot/0003-main.c-rework-logic-to-find-def1-def2-and-def3-files.patch new file mode 100644 index 00000000..30cde49f --- /dev/null +++ b/package/raspberrypi-usbboot/0003-main.c-rework-logic-to-find-def1-def2-and-def3-files.patch @@ -0,0 +1,127 @@ +From 935894908dc24acda0acea7d211a9d80e55ecadb Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Fri, 2 Dec 2016 23:43:23 +0100 +Subject: [PATCH] main.c: rework logic to find def1, def2 and def3 files + +The current logic to find def1, def2 and def3 first tries to find them +in the local directory, and if they are not available, find them in +/usr/share. + +However, this doesn't work if rpiboot and its related files are +installed, but not in /usr. In order to address this use-case, this +commit reworks the logic to find the file path. + +A new function, getfilepath() is created. If the requested file is +available in the current directory, it is used. If not, then the path to +the file is inferred from the location of the currently running +program. I.e if we run /home/foo/sys/bin/rpiboot, then we will search +def1 in usbbootcode.bin in +/home/foo/sys/bin/../share/rpiboot/usbbootcode.bin. + +This continues to address the case of an installation in /usr, while +allowing installation in other locations as well. + +Submitted-upstream: https://github.com/raspberrypi/usbboot/pull/2 +Signed-off-by: Thomas Petazzoni +--- + main.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++------------- + 1 file changed, 48 insertions(+), 13 deletions(-) + +diff --git a/main.c b/main.c +index 1b4e042..7c571d6 100755 +--- a/main.c ++++ b/main.c +@@ -1,10 +1,12 @@ +-#include "libusb-1.0/libusb.h" ++#define _GNU_SOURCE + #include + #include + #include +- ++#include + #include + ++#include "libusb-1.0/libusb.h" ++ + int verbose = 0; + int out_ep = 1; + int in_ep = 2; +@@ -146,6 +148,37 @@ int ep_read(unsigned char *buf, int len, libusb_device_handle * usb_device) + return len; + } + ++char *getfilepath(char *filename) ++{ ++ char *progpath, *filepath, *progdir; ++ ssize_t len; ++ ++ /* If file is available locally, use it */ ++ if (access(filename, F_OK) != -1) ++ return filename; ++ ++ /* Otherwise, use the installed version */ ++ progpath = malloc(PATH_MAX); ++ len = readlink("/proc/self/exe", progpath, PATH_MAX - 1); ++ if (len == -1) ++ { ++ free(progpath); ++ return NULL; ++ } ++ ++ progpath[len] = '\0'; ++ progdir = dirname(progpath); ++ if (asprintf(&filepath, "%s/../share/rpiboot/%s", progdir, filename) < 0) ++ { ++ free(progpath); ++ return NULL; ++ } ++ ++ free(progpath); ++ ++ return filepath; ++} ++ + int main(int argc, char *argv[]) + { + int result; +@@ -157,13 +190,9 @@ int main(int argc, char *argv[]) + int last_serial = -1; + FILE *fp1, *fp2, *fp; + +- char def1_inst[] = "/usr/share/rpiboot/usbbootcode.bin"; +- char def2_inst[] = "/usr/share/rpiboot/msd.elf"; +- char def3_inst[] = "/usr/share/rpiboot/buildroot.elf"; +- +- char def1_loc[] = "./usbbootcode.bin"; +- char def2_loc[] = "./msd.elf"; +- char def3_loc[] = "./buildroot.elf"; ++ char def1_name[] = "usbbootcode.bin"; ++ char def2_name[] = "msd.elf"; ++ char def3_name[] = "buildroot.elf"; + + char *def1, *def2, *def3; + +@@ -171,10 +200,16 @@ int main(int argc, char *argv[]) + char *fatimage = NULL, *executable = NULL; + int loop = 0; + +-// if local file version exists use it else use installed +- if( access( def1_loc, F_OK ) != -1 ) { def1 = def1_loc; } else { def1 = def1_inst; } +- if( access( def2_loc, F_OK ) != -1 ) { def2 = def2_loc; } else { def2 = def2_inst; } +- if( access( def3_loc, F_OK ) != -1 ) { def3 = def3_loc; } else { def3 = def3_inst; } ++ def1 = getfilepath(def1_name); ++ def2 = getfilepath(def2_name); ++ def3 = getfilepath(def3_name); ++ ++ if (!def1 || !def2 || !def3) ++ { ++ fprintf(stderr, "One of %s, %s or %s cannot be found\n", ++ def1_name, def2_name, def3_name); ++ exit(1); ++ } + + stage1 = def1; + stage2 = def2; +-- +2.7.4 + diff --git a/package/raspberrypi-usbboot/Config.in.host b/package/raspberrypi-usbboot/Config.in.host new file mode 100644 index 00000000..b1a434f3 --- /dev/null +++ b/package/raspberrypi-usbboot/Config.in.host @@ -0,0 +1,17 @@ +config BR2_PACKAGE_HOST_RASPBERRYPI_USBBOOT + bool "host raspberrypi-usbboot" + depends on BR2_arm + depends on BR2_HOST_GCC_AT_LEAST_4_9 # host-libusb + help + This package builds and install the "rpiboot" tool for the + host machine. This tool allows to boot the Broadcom BCM + processor used in the RaspberryPi to boot over USB, and have + it expose a USB mass storage device in order to reflash the + built-in storage of the RaspberryPi (useful for the eMMC + built into the Compute module). + + https://github.com/raspberrypi/usbboot + +comment "host raspberrypi-usbboot needs a toolchain w/ host gcc >= 4.9" + depends on BR2_arm + depends on !BR2_HOST_GCC_AT_LEAST_4_9 diff --git a/package/raspberrypi-usbboot/raspberrypi-usbboot.hash b/package/raspberrypi-usbboot/raspberrypi-usbboot.hash new file mode 100644 index 00000000..94860a9d --- /dev/null +++ b/package/raspberrypi-usbboot/raspberrypi-usbboot.hash @@ -0,0 +1,2 @@ +# Locally calculated +sha256 a8893f8a10522bd58866eb34e7f0d7731c43200d585f122681f428cdef76e676 raspberrypi-usbboot-f4e3f0f9a3c64d846ba53ec3367e33a4f9a7d051.tar.gz diff --git a/package/raspberrypi-usbboot/raspberrypi-usbboot.mk b/package/raspberrypi-usbboot/raspberrypi-usbboot.mk new file mode 100644 index 00000000..70186179 --- /dev/null +++ b/package/raspberrypi-usbboot/raspberrypi-usbboot.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# raspberrypi-usbboot +# +################################################################################ + +RASPBERRYPI_USBBOOT_VERSION = f4e3f0f9a3c64d846ba53ec3367e33a4f9a7d051 +RASPBERRYPI_USBBOOT_SITE = $(call github,raspberrypi,usbboot,$(RASPBERRYPI_USBBOOT_VERSION)) + +HOST_RASPBERRYPI_USBBOOT_DEPENDENCIES = host-libusb + +define HOST_RASPBERRYPI_USBBOOT_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) $(HOST_CONFIGURE_OPTS) -C $(@D) +endef + +define HOST_RASPBERRYPI_USBBOOT_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE) $(HOST_CONFIGURE_OPTS) -C $(@D) \ + DESTDIR=$(HOST_DIR) install +endef + +$(eval $(host-generic-package)) diff --git a/package/raspi-gpio/Config.in b/package/raspi-gpio/Config.in new file mode 100644 index 00000000..32a94483 --- /dev/null +++ b/package/raspi-gpio/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_RASPI_GPIO + bool "raspi-gpio" + help + Tool to help debug / hack at the BCM283x GPIO. You can dump + the state of a GPIO or (all GPIOs). You can change a GPIO + mode and pulls (and level if set as an output). + + Beware this tool writes directly to the BCM283x GPIO + registers, ignoring anything else that may be using them + (like Linux drivers). + + https://github.com/RPi-Distro/raspi-gpio diff --git a/package/raspi-gpio/raspi-gpio.hash b/package/raspi-gpio/raspi-gpio.hash new file mode 100644 index 00000000..41d885f3 --- /dev/null +++ b/package/raspi-gpio/raspi-gpio.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 2526dcec1e5a171b13c44b1fb6f2faed5ec849f08021278e2be09bc18264a2fd raspi-gpio-4edfde183ff3ac9ed66cdc015ae25e45f3a5502d.tar.gz +sha256 6e02227e1fb942687163996678d94add7911890c50025912d0ae7ee66d256bb2 LICENSE diff --git a/package/raspi-gpio/raspi-gpio.mk b/package/raspi-gpio/raspi-gpio.mk new file mode 100644 index 00000000..d1241082 --- /dev/null +++ b/package/raspi-gpio/raspi-gpio.mk @@ -0,0 +1,12 @@ +################################################################################ +# +# raspi-gpio +# +################################################################################ + +RASPI_GPIO_VERSION = 4edfde183ff3ac9ed66cdc015ae25e45f3a5502d +RASPI_GPIO_SITE = $(call github,RPi-Distro,raspi-gpio,$(RASPI_GPIO_VERSION)) +RASPI_GPIO_LICENSE = BSD-3-Clause +RASPI_GPIO_LICENSE_FILES = LICENSE + +$(eval $(autotools-package)) diff --git a/package/ratpoison/Config.in b/package/ratpoison/Config.in new file mode 100644 index 00000000..7b724290 --- /dev/null +++ b/package/ratpoison/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_RATPOISON + bool "ratpoison" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_FONTCONFIG + select BR2_PACKAGE_LIBERATION + select BR2_PACKAGE_XLIB_LIBX11 + help + Ratpoison is a simple Window Manager. It is largely modelled + after GNU Screen and focuses on the keyboard instead of a + mouse. + + The screen can be split into non-overlapping frames. All + windows are kept maximized inside their frames to take full + advantage of your precious screen real estate. + + http://www.nongnu.org/ratpoison/ diff --git a/package/ratpoison/ratpoison.hash b/package/ratpoison/ratpoison.hash new file mode 100644 index 00000000..d003fadf --- /dev/null +++ b/package/ratpoison/ratpoison.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 d98fa4be025ecca453c407ff311ab3949f29f20d6d8abedf8f0716b85fc8d1f1 ratpoison-1.4.9.tar.xz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/ratpoison/ratpoison.mk b/package/ratpoison/ratpoison.mk new file mode 100644 index 00000000..27cca849 --- /dev/null +++ b/package/ratpoison/ratpoison.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# ratpoison +# +################################################################################ + +RATPOISON_VERSION = 1.4.9 +RATPOISON_SOURCE = ratpoison-$(RATPOISON_VERSION).tar.xz +RATPOISON_SITE = http://download.savannah.nongnu.org/releases/ratpoison +RATPOISON_LICENSE = GPL-2.0+ +RATPOISON_LICENSE_FILES = COPYING + +RATPOISON_CONF_OPTS = \ + --x-includes=$(STAGING_DIR)/usr/include/X11 \ + --x-libraries=$(STAGING_DIR)/usr/lib \ + --without-xkb \ + --without-xft + +RATPOISON_DEPENDENCIES = xlib_libX11 + +ifeq ($(BR2_PACKAGE_XLIB_LIBXRANDR),y) +RATPOISON_DEPENDENCIES += xlib_libXrandr +RATPOISON_CONF_OPTS += --with-xrandr +else +RATPOISON_CONF_OPTS += --without-xrandr +endif + +$(eval $(autotools-package)) diff --git a/package/rauc/Config.in b/package/rauc/Config.in new file mode 100644 index 00000000..676ff42b --- /dev/null +++ b/package/rauc/Config.in @@ -0,0 +1,40 @@ +config BR2_PACKAGE_RAUC + bool "rauc" + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + depends on BR2_USE_WCHAR # glib2 + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_DBUS + select BR2_PACKAGE_SQUASHFS # run-time dependency + select BR2_PACKAGE_UBOOT_TOOLS if BR2_TARGET_UBOOT # run-time dependency + select BR2_PACKAGE_UBOOT_TOOLS_FWPRINTENV if BR2_TARGET_UBOOT + help + RAUC is the Robust Auto-Update Controller developed by + Pengutronix. It supports updating embedded Linux + systems over the network or from disks and provides a + d-bus interface. + + http://rauc.io/ + +if BR2_PACKAGE_RAUC + +config BR2_PACKAGE_RAUC_NETWORK + bool "network support" + select BR2_PACKAGE_LIBCURL + help + This option enables support for updating firmware over + the network using libcurl. + +config BR2_PACKAGE_RAUC_JSON + bool "JSON output support" + select BR2_PACKAGE_JSON_GLIB + help + This option enables support for providing output in + JSON format. + +endif + +comment "rauc needs a toolchain w/ wchar, threads" + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU diff --git a/package/rauc/Config.in.host b/package/rauc/Config.in.host new file mode 100644 index 00000000..1bd9a793 --- /dev/null +++ b/package/rauc/Config.in.host @@ -0,0 +1,10 @@ +config BR2_PACKAGE_HOST_RAUC + bool "host rauc" + select BR2_PACKAGE_HOST_SQUASHFS # run-time dependency + help + RAUC is the Robust Auto-Update Controller developed by + Pengutronix. Enable this option to build the rauc + host tool which may be used to generate firmware + bundles that are handled by the target rauc service. + + http://rauc.io/ diff --git a/package/rauc/rauc.hash b/package/rauc/rauc.hash new file mode 100644 index 00000000..a0252578 --- /dev/null +++ b/package/rauc/rauc.hash @@ -0,0 +1,4 @@ +# Locally calculated, after verifying against +# https://github.com/rauc/rauc/releases/download/v1.5.1/rauc-1.5.1.tar.xz.asc +sha256 d4ea009ce702bcb083d942398ccfedec959c6bbb7adc0fd77ae9314ce11d9d91 rauc-1.5.1.tar.xz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/rauc/rauc.mk b/package/rauc/rauc.mk new file mode 100644 index 00000000..4fb3ddde --- /dev/null +++ b/package/rauc/rauc.mk @@ -0,0 +1,54 @@ +################################################################################ +# +# rauc +# +################################################################################ + +RAUC_VERSION = 1.5.1 +RAUC_SITE = https://github.com/rauc/rauc/releases/download/v$(RAUC_VERSION) +RAUC_SOURCE = rauc-$(RAUC_VERSION).tar.xz +RAUC_LICENSE = LGPL-2.1 +RAUC_LICENSE_FILES = COPYING +RAUC_CPE_ID_VENDOR = pengutronix +RAUC_DEPENDENCIES = host-pkgconf openssl libglib2 dbus + +ifeq ($(BR2_PACKAGE_RAUC_NETWORK),y) +RAUC_CONF_OPTS += --enable-network +RAUC_DEPENDENCIES += libcurl +else +RAUC_CONF_OPTS += --disable-network +endif + +ifeq ($(BR2_PACKAGE_RAUC_JSON),y) +RAUC_CONF_OPTS += --enable-json +RAUC_DEPENDENCIES += json-glib +else +RAUC_CONF_OPTS += --disable-json +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +# configure uses pkg-config --variable=systemdsystemunitdir systemd +RAUC_DEPENDENCIES += systemd +endif + +define RAUC_INSTALL_INIT_SYSTEMD + mkdir -p $(TARGET_DIR)/usr/lib/systemd/system/rauc.service.d + printf '[Install]\nWantedBy=multi-user.target\n' \ + >$(TARGET_DIR)/usr/lib/systemd/system/rauc.service.d/buildroot-enable.conf +endef + +HOST_RAUC_DEPENDENCIES = \ + host-pkgconf \ + host-openssl \ + host-libglib2 \ + host-squashfs \ + $(if $(BR2_PACKAGE_HOST_LIBP11),host-libp11) +HOST_RAUC_CONF_OPTS += \ + --disable-network \ + --disable-json \ + --disable-service \ + --without-dbuspolicydir \ + --with-systemdunitdir=no + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/rcw-smarc-sal28/Config.in b/package/rcw-smarc-sal28/Config.in new file mode 100644 index 00000000..2a46c9f8 --- /dev/null +++ b/package/rcw-smarc-sal28/Config.in @@ -0,0 +1,25 @@ +config BR2_PACKAGE_RCW_SMARC_SAL28 + bool "rcw-smarc-sal28" + help + The reset configuration word for the SMARC-sAL28 board. All + available RCWs are copied into the images output directory. + Additionally, you have to choose one default RCW which is + used for booting the board. + +if BR2_PACKAGE_RCW_SMARC_SAL28 +config BR2_PACKAGE_RCW_SMARC_SAL28_BUILD_UPDATE_SCRIPT + bool "Build RCW u-boot update script" + select BR2_PACKAGE_HOST_UBOOT_TOOLS + help + Build the RCW updater script which can be used in the + bootloader to change the installed RCW during runtime. The + update script is called update-rcw.img and will be copied + to the output directory. + +config BR2_PACKAGE_RCW_SMARC_SAL28_BOOT_VARIANT + string "RCW variant for booting" + default "3-11_q" + help + The suffix of the RCW filename without the ".bin" part. + E.g. setting this to "3-11_q" will use "sl28-3-11_q.bin". +endif diff --git a/package/rcw-smarc-sal28/rcw-smarc-sal28.hash b/package/rcw-smarc-sal28/rcw-smarc-sal28.hash new file mode 100644 index 00000000..1f9b42c0 --- /dev/null +++ b/package/rcw-smarc-sal28/rcw-smarc-sal28.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 8e53dfceeb7f15d9e890dd4f69db505727276185f7438a5034616d392ff8f223 rcw-smarc-sal28-10.tar.gz +sha256 803c65088eed36a6697ca9f03f4379bbad24e276dc8da7fef5eb4dc4008415a1 COPYING diff --git a/package/rcw-smarc-sal28/rcw-smarc-sal28.mk b/package/rcw-smarc-sal28/rcw-smarc-sal28.mk new file mode 100644 index 00000000..0dce5438 --- /dev/null +++ b/package/rcw-smarc-sal28/rcw-smarc-sal28.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# rcw-smarc-sal28 +# +################################################################################ + +RCW_SMARC_SAL28_VERSION = 10 +RCW_SMARC_SAL28_SITE = $(call github,kontron,rcw-smarc-sal28,v$(RCW_SMARC_SAL28_VERSION)) +RCW_SMARC_SAL28_LICENSE = BSD-2-Clause +RCW_SMARC_SAL28_LICENSE_FILES = COPYING +RCW_SMARC_SAL28_INSTALL_TARGET = NO +RCW_SMARC_SAL28_INSTALL_IMAGES = YES + +RCW_SMARC_SAL28_BOOT_VARIANT = $(call qstrip,$(BR2_PACKAGE_RCW_SMARC_SAL28_BOOT_VARIANT)) + +ifeq ($(BR2_PACKAGE_RCW_SMARC_SAL28_BUILD_UPDATE_SCRIPT),y) +RCW_SMARC_SAL28_DEPENDENCIES = host-uboot-tools +define RCW_SMARC_SAL28_UPDATE_SCRIPT_BUILD_CMDS + MKIMAGE=$(HOST_DIR)/bin/mkimage $(MAKE) -C $(@D)/contrib all +endef +define RCW_SMARC_SAL28_UPDATE_SCRIPT_INSTALL_CMDS + $(INSTALL) -D -m 0644 $(@D)/contrib/update-rcw.img $(BINARIES_DIR)/ +endef +endif + +define RCW_SMARC_SAL28_BUILD_CMDS + $(RCW_SMARC_SAL28_UPDATE_SCRIPT_BUILD_CMDS) +endef + +define RCW_SMARC_SAL28_INSTALL_IMAGES_CMDS + $(INSTALL) -d $(BINARIES_DIR)/rcw + $(INSTALL) -D -m 0644 $(@D)/sl28-*.bin $(BINARIES_DIR)/rcw/ + ln -sf rcw/sl28-$(RCW_SMARC_SAL28_BOOT_VARIANT).bin $(BINARIES_DIR)/rcw.bin + $(RCW_SMARC_SAL28_UPDATE_SCRIPT_INSTALL_CMDS) +endef + +$(eval $(generic-package)) diff --git a/package/rdesktop/0001-8bit-colors.patch b/package/rdesktop/0001-8bit-colors.patch new file mode 100644 index 00000000..710f8deb --- /dev/null +++ b/package/rdesktop/0001-8bit-colors.patch @@ -0,0 +1,21 @@ +diff -urpN rdesktop-1.5.0-orig/xwin.c rdesktop-1.5.0/xwin.c +--- rdesktop-1.5.0-orig/xwin.c 2007-01-17 12:01:18.000000000 +0100 ++++ rdesktop-1.5.0/xwin.c 2007-01-17 12:05:02.000000000 +0100 +@@ -1461,7 +1461,7 @@ select_visual(int screen_num) + } + + /* we use a colourmap, so the default visual should do */ +- g_owncolmap = True; ++// g_owncolmap = True; + g_visual = vmatches[0].visual; + g_depth = vmatches[0].depth; + } +@@ -1568,7 +1568,7 @@ ui_init(void) + { + g_xcolmap = + XCreateColormap(g_display, RootWindowOfScreen(g_screen), g_visual, +- AllocNone); ++ (g_depth <= 8) ? AllocAll : AllocNone); + if (g_depth <= 8) + warning("Display colour depth is %d bit: you may want to use -C for a private colourmap.\n", g_depth); + } diff --git a/package/rdesktop/Config.in b/package/rdesktop/Config.in new file mode 100644 index 00000000..d07a1d5c --- /dev/null +++ b/package/rdesktop/Config.in @@ -0,0 +1,24 @@ +config BR2_PACKAGE_RDESKTOP + bool "rdesktop" + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS # gnutls + depends on BR2_USE_WCHAR # gnutls + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_GNUTLS + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + select BR2_PACKAGE_LIBTASN1 + select BR2_PACKAGE_NETTLE + select BR2_PACKAGE_XLIB_LIBX11 + select BR2_PACKAGE_XLIB_LIBXCURSOR + select BR2_PACKAGE_XLIB_LIBXT + help + rdesktop is an open source client for Windows NT Terminal + Server and Windows 2000/2003 Terminal Services, capable of + natively speaking Remote Desktop Protocol (RDP) in order to + present the user's NT desktop. + + http://rdesktop.sf.net/ + +comment "rdesktop needs a toolchain w/ wchar, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || BR2_STATIC_LIBS diff --git a/package/rdesktop/rdesktop.hash b/package/rdesktop/rdesktop.hash new file mode 100644 index 00000000..f9715d2a --- /dev/null +++ b/package/rdesktop/rdesktop.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 473c2f312391379960efe41caad37852c59312bc8f100f9b5f26609ab5704288 rdesktop-1.9.0.tar.gz +sha256 fc82ca8b6fdb18d4e3e85cfd8ab58d1bcd3f1b29abe782895abd91d64763f8e7 COPYING diff --git a/package/rdesktop/rdesktop.mk b/package/rdesktop/rdesktop.mk new file mode 100644 index 00000000..5a1739a4 --- /dev/null +++ b/package/rdesktop/rdesktop.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# rdesktop +# +################################################################################ + +RDESKTOP_VERSION = 1.9.0 +RDESKTOP_SITE = \ + https://github.com/rdesktop/rdesktop/releases/download/v$(RDESKTOP_VERSION) +RDESKTOP_DEPENDENCIES = \ + host-pkgconf \ + gnutls \ + libtasn1 \ + nettle \ + xlib_libX11 \ + xlib_libXcursor \ + xlib_libXt \ + $(if $(BR2_PACKAGE_ALSA_LIB_PCM),alsa-lib) \ + $(if $(BR2_PACKAGE_LIBAO),libao) \ + $(if $(BR2_PACKAGE_LIBICONV),libiconv) \ + $(if $(BR2_PACKAGE_LIBSAMPLERATE),libsamplerate) \ + $(if $(BR2_PACKAGE_PULSEAUDIO),pulseaudio) \ + $(if $(BR2_PACKAGE_XLIB_LIBXRANDR),xlib_libXrandr) +RDESKTOP_CONF_OPTS = --disable-credssp +RDESKTOP_LICENSE = GPL-3.0+ +RDESKTOP_LICENSE_FILES = COPYING +RDESKTOP_CPE_ID_VENDOR = rdesktop + +ifeq ($(BR2_PACKAGE_PCSC_LITE),y) +RDESKTOP_DEPENDENCIES += pcsc-lite +else +RDESKTOP_CONF_OPTS += --disable-smartcard +endif + +$(eval $(autotools-package)) diff --git a/package/re2/Config.in b/package/re2/Config.in new file mode 100644 index 00000000..64217e8a --- /dev/null +++ b/package/re2/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_RE2 + bool "re2" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # needs C++11 + depends on BR2_TOOLCHAIN_HAS_THREADS + help + RE2 is a fast, safe, thread-friendly alternative + to backtracking regular expression engines like + those used in PCRE, Perl, and Python. + It is a C++ library. + + https://github.com/google/re2 + +comment "re2 needs a toolchain w/ C++, threads, gcc >= 4.8" + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 diff --git a/package/re2/re2.hash b/package/re2/re2.hash new file mode 100644 index 00000000..b5457a59 --- /dev/null +++ b/package/re2/re2.hash @@ -0,0 +1,3 @@ +# locally calculated +sha256 8903cc66c9d34c72e2bc91722288ebc7e3ec37787ecfef44d204b2d6281954d7 re2-2020-11-01.tar.gz +sha256 6040cda75d90b1738292a631d89934c411ef7ffd543c4d6a1b7edfc8edf29449 LICENSE diff --git a/package/re2/re2.mk b/package/re2/re2.mk new file mode 100644 index 00000000..585846d5 --- /dev/null +++ b/package/re2/re2.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# re2 +# +################################################################################ + +RE2_VERSION = 2020-11-01 +RE2_SITE = $(call github,google,re2,$(RE2_VERSION)) +RE2_LICENSE = BSD-3-Clause +RE2_LICENSE_FILES = LICENSE +RE2_INSTALL_STAGING = YES + +RE2_CONF_OPTS += -DRE2_BUILD_TESTING=OFF +HOST_RE2_CONF_OPTS += -DRE2_BUILD_TESTING=OFF -DBUILD_SHARED_LIBS=ON + +$(eval $(cmake-package)) +$(eval $(host-cmake-package)) diff --git a/package/read-edid/0001-Fix-install-file-list.patch b/package/read-edid/0001-Fix-install-file-list.patch new file mode 100644 index 00000000..622e97da --- /dev/null +++ b/package/read-edid/0001-Fix-install-file-list.patch @@ -0,0 +1,29 @@ +From 562f48bee3443bda0ac257f2b0c52a72208163e0 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Mon, 7 Dec 2015 21:20:38 +0100 +Subject: [PATCH] Fix install file list. + +Fixes: + CMake Error at cmake_install.cmake:40 (file): + file INSTALL cannot find + ".../build/read-edid-3.0.2/COPYING". + +Signed-off-by: Peter Seiderer +--- + CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 7bf4561..2b9bc86 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -13,5 +13,5 @@ endif () + add_subdirectory (parse-edid) + + INSTALL(FILES get-edid.1 DESTINATION share/man/man1) +-INSTALL(FILES AUTHORS ChangeLog COPYING README DESTINATION ++INSTALL(FILES AUTHORS ChangeLog README DESTINATION + share/doc/read-edid) +-- +2.1.4 + diff --git a/package/read-edid/0002-Fix-compiler-check.patch b/package/read-edid/0002-Fix-compiler-check.patch new file mode 100644 index 00000000..6c5f58c0 --- /dev/null +++ b/package/read-edid/0002-Fix-compiler-check.patch @@ -0,0 +1,19 @@ +Fix compiler check + +By default CMake looks for c++ which the project does not need. + +Patch by Thomas: +http://lists.busybox.net/pipermail/buildroot/2015-December/146865.html + +Signed-off-by: Bernd Kuhls + +diff -uNr read-edid-3.0.2.org/CMakeLists.txt read-edid-3.0.2/CMakeLists.txt +--- read-edid-3.0.2.org/CMakeLists.txt 2014-02-05 17:27:26.000000000 +0100 ++++ read-edid-3.0.2/CMakeLists.txt 2015-12-13 16:08:43.000000000 +0100 +@@ -1,5 +1,5 @@ + cmake_minimum_required (VERSION 2.6) +-project (read-edid) ++project (read-edid C) + + option(I2CBUILD "Build I2C get-edid implementation" ON) + option(CLASSICBUILD "Build VBE get-edid implementation" ON) diff --git a/package/read-edid/0003-fix-build-with-gcc-10.patch b/package/read-edid/0003-fix-build-with-gcc-10.patch new file mode 100644 index 00000000..713b09aa --- /dev/null +++ b/package/read-edid/0003-fix-build-with-gcc-10.patch @@ -0,0 +1,49 @@ +fix build with gcc 10 + +Define quiet as static to avoid the following build failure with gcc 10 +(which defaults to -fno-common): + +/home/naourr/work/instance-2/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/10.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: CMakeFiles/get-edid.dir/i2c.c.o:(.bss+0x0): multiple definition of `quiet'; CMakeFiles/get-edid.dir/get-edid.c.o:(.bss+0x0): first defined here + +Fixes: + - http://autobuild.buildroot.org/results/28bde8049b6610273bceae26eca407c819a37dcd + +Signed-off-by: Fabrice Fontaine +[Upstream status: sent to pyrophobicman@gmail.com] + +diff -Nura read-edid-3.0.2.orig/get-edid/classic.c read-edid-3.0.2/get-edid/classic.c +--- read-edid-3.0.2.orig/get-edid/classic.c 2020-09-25 23:25:01.928805414 +0200 ++++ read-edid-3.0.2/get-edid/classic.c 2020-09-25 23:26:37.440807301 +0200 +@@ -26,7 +26,7 @@ + #define dosmemput(buffer,length,offset) memcpy(offset,buffer,length) + + #define display(...) if (quiet == 0) { fprintf(stderr, __VA_ARGS__); } +-int quiet; ++static int quiet; + + real_ptr far_ptr_to_real_ptr( uint32 farptr ) + { +diff -Nura read-edid-3.0.2.orig/get-edid/get-edid.c read-edid-3.0.2/get-edid/get-edid.c +--- read-edid-3.0.2.orig/get-edid/get-edid.c 2020-09-25 23:25:01.928805414 +0200 ++++ read-edid-3.0.2/get-edid/get-edid.c 2020-09-25 23:28:20.740809341 +0200 +@@ -9,7 +9,7 @@ + #include + #include + +-int quiet=0; ++static int quiet=0; + int i2conly=0; //0=both, 1=i2conly, 2=classiconly + int i2cbus=-1; + int classmon=0; +diff -Nura read-edid-3.0.2.orig/get-edid/i2c.c read-edid-3.0.2/get-edid/i2c.c +--- read-edid-3.0.2.orig/get-edid/i2c.c 2020-09-25 23:25:01.928805414 +0200 ++++ read-edid-3.0.2/get-edid/i2c.c 2020-09-25 23:28:32.152809567 +0200 +@@ -15,7 +15,7 @@ + + //Ideas (but not too much actual code) taken from i2c-tools. Thanks guys. + +-int quiet; ++static int quiet; + + #define display(...) if (quiet == 0) { fprintf(stderr, __VA_ARGS__); } + diff --git a/package/read-edid/Config.in b/package/read-edid/Config.in new file mode 100644 index 00000000..c830e17f --- /dev/null +++ b/package/read-edid/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_READ_EDID + bool "read-edid" + help + Read-edid is a pair of tools for reading the EDID from a + monitor. It should work with most monitors made since 1996 + (except for newer ones with 256-byte EDID's - WiP), assuming + the video card supports the standard read commands (most + do). Read-edid is a set of two tools - get-edid, which gets + the raw edid information from the monitor, and parse-edid, + which turns the raw binary information into an + XF86Config-compatible monitor section. + + http://polypux.org/projects/read-edid/ diff --git a/package/read-edid/read-edid.hash b/package/read-edid/read-edid.hash new file mode 100644 index 00000000..d0911094 --- /dev/null +++ b/package/read-edid/read-edid.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 c7c6d8440f5b90f98e276829271ccea5b2ff5a3413df8a0f87ec09f834af186f read-edid-3.0.2.tar.gz +sha256 1f8e8a59865d73076ab0a015330bc5bde7332384281260093878a3c366b778b7 LICENSE diff --git a/package/read-edid/read-edid.mk b/package/read-edid/read-edid.mk new file mode 100644 index 00000000..3e38f503 --- /dev/null +++ b/package/read-edid/read-edid.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# read-edid +# +################################################################################ + +READ_EDID_VERSION = 3.0.2 +READ_EDID_SITE = http://www.polypux.org/projects/read-edid +READ_EDID_LICENSE = BSD-like +READ_EDID_LICENSE_FILES = LICENSE + +# disable classic get-edid support (needs libx86) +READ_EDID_CONF_OPTS += -DCLASSICBUILD=OFF + +$(eval $(cmake-package)) diff --git a/package/readline/0001-curses-link.patch b/package/readline/0001-curses-link.patch new file mode 100644 index 00000000..6afc5ba0 --- /dev/null +++ b/package/readline/0001-curses-link.patch @@ -0,0 +1,18 @@ +link readline directly to ncurses since it needs symbols from it + +upstream readline does this on purpose (no direct linking), but +it doesn't make much sense in a Linux world + +Signed-off-by: Gustavo Zacarias + +--- a/support/shobj-conf ++++ b/support/shobj-conf +@@ -42,7 +42,7 @@ + SHOBJ_LIBS= + + SHLIB_XLDFLAGS= +-SHLIB_LIBS= ++SHLIB_LIBS=-lncurses + + SHLIB_DOT='.' + SHLIB_LIBPREF='lib' diff --git a/package/readline/Config.in b/package/readline/Config.in new file mode 100644 index 00000000..fd21cfea --- /dev/null +++ b/package/readline/Config.in @@ -0,0 +1,27 @@ +config BR2_PACKAGE_READLINE + bool "readline" + select BR2_PACKAGE_NCURSES + help + The GNU Readline library provides a set of functions for use + by applications that allow users to edit command lines + as they are typed in. + + https://tiswww.case.edu/php/chet/readline/rltop.html + +config BR2_PACKAGE_READLINE_BRACKETED_PASTE + bool "Enable bracketed paste" + depends on BR2_PACKAGE_READLINE + help + Enable the "bracketed paste" feature in libreadline. + + Bracketed paste is helpful for interactive sessions when + one wants to prevent pasted text from being interpreted + as typed-in commands. However, it also causes control + characters to show up in the raw output of a (telnet) + session. This can cause issues and throw off pattern + matching if the session output is being captured for + automated processing. + + For further information on this feature and whether you + may want it, see: + https://cirw.in/blog/bracketed-paste diff --git a/package/readline/inputrc b/package/readline/inputrc new file mode 100644 index 00000000..2f1cb601 --- /dev/null +++ b/package/readline/inputrc @@ -0,0 +1,44 @@ +# /etc/inputrc - global inputrc for libreadline +# See readline(3readline) and `info readline' for more information. + +# Be 8 bit clean. +set input-meta on +set output-meta on +set bell-style visible + +# To allow the use of 8bit-characters like the german umlauts, comment out +# the line below. However this makes the meta key not work as a meta key, +# which is annoying to those which don't need to type in 8-bit characters. + +# set convert-meta off + +"\e0d": backward-word +"\e0c": forward-word +"\e[h": beginning-of-line +"\e[f": end-of-line +"\e[1~": beginning-of-line +"\e[4~": end-of-line +#"\e[5~": beginning-of-history +#"\e[6~": end-of-history +"\e[3~": delete-char +"\e[2~": quoted-insert + +# Common standard keypad and cursor +# (codes courtsey Werner Fink, ) +#"\e[1~": history-search-backward +"\e[2~": yank +"\e[3~": delete-char +#"\e[4~": set-mark +"\e[5~": history-search-backward +"\e[6~": history-search-forward +# Normal keypad and cursor of xterm +"\e[F": end-of-line +"\e[H": beginning-of-line +# Application keypad and cursor of xterm +"\eOA": previous-history +"\eOC": forward-char +"\eOB": next-history +"\eOD": backward-char +"\eOF": end-of-line +"\eOH": beginning-of-line + diff --git a/package/readline/readline.hash b/package/readline/readline.hash new file mode 100644 index 00000000..63172f11 --- /dev/null +++ b/package/readline/readline.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +sha256 f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02 readline-8.1.tar.gz + +# Hash for license file +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/readline/readline.mk b/package/readline/readline.mk new file mode 100644 index 00000000..06a96b67 --- /dev/null +++ b/package/readline/readline.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# readline +# +################################################################################ + +READLINE_VERSION = 8.1 +READLINE_SITE = $(BR2_GNU_MIRROR)/readline +READLINE_INSTALL_STAGING = YES +READLINE_DEPENDENCIES = ncurses host-autoconf +HOST_READLINE_DEPENDENCIES = host-ncurses host-autoconf +READLINE_CONF_ENV = bash_cv_func_sigsetjmp=yes \ + bash_cv_wcwidth_broken=no +READLINE_CONF_OPTS = --disable-install-examples +READLINE_LICENSE = GPL-3.0+ +READLINE_LICENSE_FILES = COPYING +READLINE_CPE_ID_VENDOR = gnu + +ifeq ($(BR2_PACKAGE_READLINE_BRACKETED_PASTE),y) +READLINE_CONF_OPTS += --enable-bracketed-paste-default +else +READLINE_CONF_OPTS += --disable-bracketed-paste-default +endif + +define READLINE_INSTALL_INPUTRC + $(INSTALL) -D -m 644 package/readline/inputrc $(TARGET_DIR)/etc/inputrc +endef +READLINE_POST_INSTALL_TARGET_HOOKS += READLINE_INSTALL_INPUTRC + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/reaver/Config.in b/package/reaver/Config.in new file mode 100644 index 00000000..c286fa8d --- /dev/null +++ b/package/reaver/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_REAVER + bool "reaver" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_LIBPCAP + help + Reaver is a tool to audit networks against brute WPS pins + attacks. It is complementary to "Aircrack-ng". + + https://code.google.com/archive/p/reaver-wps/wikis/README.wiki + https://github.com/t6x/reaver-wps-fork-t6x + +comment "reaver needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/reaver/reaver.hash b/package/reaver/reaver.hash new file mode 100644 index 00000000..780e6ac8 --- /dev/null +++ b/package/reaver/reaver.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 73189782b208d12b8dddc4f29d32e1f72b1f3609e573c9ea9510deebec394583 reaver-1.6.6.tar.gz +sha256 bb40cfd5e9ca6e8465ea3c236f3f2293e8300af1bfe87e72fabe482ae6cc995a docs/LICENSE diff --git a/package/reaver/reaver.mk b/package/reaver/reaver.mk new file mode 100644 index 00000000..2b5f8296 --- /dev/null +++ b/package/reaver/reaver.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# reaver +# +################################################################################ + +# Older repos for this project will not cross-compile easily +# while this one works right away +REAVER_VERSION = 1.6.6 +REAVER_SITE = $(call github,t6x,reaver-wps-fork-t6x,v$(REAVER_VERSION)) +REAVER_LICENSE = GPL-2.0+ +REAVER_LICENSE_FILES = docs/LICENSE + +REAVER_SUBDIR = src +REAVER_DEPENDENCIES = libpcap + +ifeq ($(BR2_STATIC_LIBS),y) +REAVER_CONF_ENV += \ + LIBS="`$(STAGING_DIR)/usr/bin/pcap-config --static --additional-libs`" \ + LDFLAGS="$(TARGET_LDFLAGS) `$(STAGING_DIR)/usr/bin/pcap-config --static --additional-libs`" +endif + +$(eval $(autotools-package)) diff --git a/package/redir/Config.in b/package/redir/Config.in new file mode 100644 index 00000000..6e51c642 --- /dev/null +++ b/package/redir/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_REDIR + bool "redir" + depends on BR2_USE_MMU # fork() + help + This is a TCP port redirector for UNIX. + + https://github.com/troglobit/redir diff --git a/package/redir/redir.hash b/package/redir/redir.hash new file mode 100644 index 00000000..8cc19f6a --- /dev/null +++ b/package/redir/redir.hash @@ -0,0 +1,4 @@ +# From https://github.com/troglobit/redir/releases/download/v3.3/redir-3.3.tar.xz.md5 +md5 b452e1ca6faded7bab9c76dd61d9d983 redir-3.3.tar.xz +# License files +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/redir/redir.mk b/package/redir/redir.mk new file mode 100644 index 00000000..ea02d43a --- /dev/null +++ b/package/redir/redir.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# redir +# +################################################################################ + +REDIR_VERSION = 3.3 +REDIR_SOURCE = redir-$(REDIR_VERSION).tar.xz +REDIR_SITE = https://github.com/troglobit/redir/releases/download/v$(REDIR_VERSION) +REDIR_LICENSE = GPL-2.0+ +REDIR_LICENSE_FILES = COPYING +REDIR_CONF_OPTS = \ + --disable-compat \ + --enable-shaper \ + --enable-ftp + +$(eval $(autotools-package)) diff --git a/package/redis/0001-uclibc.patch b/package/redis/0001-uclibc.patch new file mode 100644 index 00000000..197f43e7 --- /dev/null +++ b/package/redis/0001-uclibc.patch @@ -0,0 +1,28 @@ +redis-001-uclibc.patch: This patch fixes redis so that it can be compiled +against uclibc. Patch originates from: + + Support cross-compiling for uClibc targets + https://github.com/antirez/redis/pull/537 + Mike Steinert, mike.steinert@gmail.com + +Signed-off-by: Daniel Price +[Martin: adapt to 3.0.3] +Signed-off-by: Martin Bark +[Titouan: adapt to 5.0.4] +Signed-off-by: Titouan Christophe +[Fabrice: update for 6.0.9] +Signed-off-by: Fabrice Fontaine + +========================================================================= +diff -ur old/src/config.h new/src/config.h +--- old/src/config.h 2012-10-26 07:20:24.000000000 -0700 ++++ new/src/config.h 2012-10-31 13:41:51.206309564 -0700 +@@ -62,7 +62,7 @@ + #endif + + /* Test for backtrace() */ +-#if defined(__APPLE__) || (defined(__linux__) && defined(__GLIBC__)) || \ ++#if defined(__APPLE__) || (defined(__linux__) && defined(__GLIBC__) && !defined(__UCLIBC__)) || \ + defined(__FreeBSD__) || ((defined(__OpenBSD__) || defined(__NetBSD__)) && defined(USE_BACKTRACE))\ + || defined(__DragonFly__) + #define HAVE_BACKTRACE 1 diff --git a/package/redis/0002-largefile-conditional-define.patch b/package/redis/0002-largefile-conditional-define.patch new file mode 100644 index 00000000..747e0552 --- /dev/null +++ b/package/redis/0002-largefile-conditional-define.patch @@ -0,0 +1,32 @@ +Define _LARGEFILE_SOURCE and _FILE_OFFSET_BITS conditionally + +In order to avoid ugly warnings at compile time, only define +_LARGEFILE_SOURCE and _FILE_OFFSET_BITS if they have not already been +defined through the build command line. + +Avoids: + + In file included from redis.h:33:0, + from migrate.c:1: + fmacros.h:45:0: warning: "_LARGEFILE_SOURCE" redefined + :0:0: note: this is the location of the previous definition + +Signed-off-by: Thomas Petazzoni + +Index: redis-2.6.11/src/fmacros.h +=================================================================== +--- redis-2.6.11.orig/src/fmacros.h 2013-03-25 22:09:15.000000000 +0100 ++++ redis-2.6.11/src/fmacros.h 2013-03-25 22:09:40.000000000 +0100 +@@ -42,7 +42,12 @@ + #define _XOPEN_SOURCE + #endif + ++#ifndef _LARGEFILE_SOURCE + #define _LARGEFILE_SOURCE ++#endif ++ ++#ifndef _FILE_OFFSET_BITS + #define _FILE_OFFSET_BITS 64 ++#endif + + #endif diff --git a/package/redis/0003-redis.conf-adjust-defauts-for-buildroot.patch b/package/redis/0003-redis.conf-adjust-defauts-for-buildroot.patch new file mode 100644 index 00000000..6ad81a49 --- /dev/null +++ b/package/redis/0003-redis.conf-adjust-defauts-for-buildroot.patch @@ -0,0 +1,29 @@ +From f79d1d1bf9e6f54b67e5482602084fbff7fd9cc9 Mon Sep 17 00:00:00 2001 +From: Gustavo Zacarias +Date: Fri, 28 Oct 2016 12:50:34 -0300 +Subject: [PATCH] redis.conf: adjust defauts for buildroot + +Based on Martin Bark's patch hence archlinux package. +We just need to specify a proper db directory. + +Signed-off-by: Gustavo Zacarias +--- + redis.conf | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/redis.conf b/redis.conf +index 22e00bc..3bb0430 100644 +--- a/redis.conf ++++ b/redis.conf +@@ -244,7 +244,7 @@ dbfilename dump.rdb + # The Append Only File will also be created inside this directory. + # + # Note that you must specify a directory here, not a file name. +-dir ./ ++dir /var/lib/redis/ + + ################################# REPLICATION ################################# + +-- +2.7.3 + diff --git a/package/redis/Config.in b/package/redis/Config.in new file mode 100644 index 00000000..a2239b4a --- /dev/null +++ b/package/redis/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_REDIS + bool "redis" + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS # dlfcn.h + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # _Atomic keyword + depends on BR2_TOOLCHAIN_HAS_ATOMIC + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # pthread_setname_np() + help + Redis is an open source (BSD licensed), in-memory data + structure store, used as a database, cache and message + broker. It supports data structures such as strings, + hashes, lists, sets, sorted sets with range queries, + bitmaps, hyperloglogs, geospatial indexes with radius + queries and streams. + + http://www.redis.io + +comment "redis needs a toolchain w/ gcc>=4.9, dynamic library, nptl" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_ATOMIC + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS_NPTL \ + || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 diff --git a/package/redis/S50redis b/package/redis/S50redis new file mode 100644 index 00000000..ae2a3417 --- /dev/null +++ b/package/redis/S50redis @@ -0,0 +1,38 @@ +#!/bin/sh +# +# start redis +# + +start() { + printf "Starting redis: " + umask 077 + start-stop-daemon -S -q -c redis:redis -b \ + --exec /usr/bin/redis-server -- /etc/redis.conf + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +stop() { + printf "Stopping redis: " + /usr/bin/redis-cli shutdown + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/redis/redis.hash b/package/redis/redis.hash new file mode 100644 index 00000000..d736c094 --- /dev/null +++ b/package/redis/redis.hash @@ -0,0 +1,5 @@ +# From https://github.com/redis/redis-hashes/blob/master/README +sha256 4bc295264a95bc94423c162a9eee66135a24a51eefe5f53f18fc9bde5c3a9f74 redis-6.0.15.tar.gz + +# Locally calculated +sha256 97f0a15b7bbae580d2609dad2e11f1956ae167be296ab60f4691ab9c30ee9828 COPYING diff --git a/package/redis/redis.mk b/package/redis/redis.mk new file mode 100644 index 00000000..f66397b2 --- /dev/null +++ b/package/redis/redis.mk @@ -0,0 +1,69 @@ +################################################################################ +# +# redis +# +################################################################################ + +REDIS_VERSION = 6.0.15 +REDIS_SITE = http://download.redis.io/releases +REDIS_LICENSE = BSD-3-Clause (core); MIT and BSD family licenses (Bundled components) +REDIS_LICENSE_FILES = COPYING +REDIS_CPE_ID_VENDOR = redislabs + +define REDIS_USERS + redis -1 redis -1 * /var/lib/redis /bin/false - Redis Server +endef + +# Uses __atomic_fetch_add_4. Adding -latomic to LDFLAGS does not work, +# because LDFLAGS is used before the list of object files. We need to +# add -latomic to FINAL_LIBS to provide -latomic at the correct place +# in the linking command. +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +define REDIS_FIX_MAKEFILE + $(SED) 's/FINAL_LIBS=-lm/FINAL_LIBS=-lm -latomic/' $(@D)/src/Makefile +endef +REDIS_POST_PATCH_HOOKS = REDIS_FIX_MAKEFILE +endif + +# Redis doesn't support DESTDIR (yet, see +# https://github.com/antirez/redis/pull/609). We set PREFIX +# instead. +REDIS_BUILDOPTS = $(TARGET_CONFIGURE_OPTS) \ + PREFIX=$(TARGET_DIR)/usr MALLOC=libc + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +REDIS_DEPENDENCIES += systemd +REDIS_BUILDOPTS += USE_SYSTEMD=yes +else +REDIS_BUILDOPTS += USE_SYSTEMD=no +endif + +ifeq ($(BR2_PACKAGE_LIBOPENSSL),y) +REDIS_DEPENDENCIES += libopenssl +REDIS_BUILDOPTS += BUILD_TLS=yes +else +REDIS_BUILDOPTS += BUILD_TLS=no +endif + +define REDIS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(REDIS_BUILDOPTS) -C $(@D) +endef + +define REDIS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(REDIS_BUILDOPTS) -C $(@D) \ + LDCONFIG=true install + $(INSTALL) -D -m 0644 $(@D)/redis.conf \ + $(TARGET_DIR)/etc/redis.conf +endef + +define REDIS_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/redis/S50redis \ + $(TARGET_DIR)/etc/init.d/S50redis +endef + +define REDIS_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 0644 package/redis/redis.service \ + $(TARGET_DIR)/usr/lib/systemd/system/redis.service +endef + +$(eval $(generic-package)) diff --git a/package/redis/redis.service b/package/redis/redis.service new file mode 100644 index 00000000..2cc82a19 --- /dev/null +++ b/package/redis/redis.service @@ -0,0 +1,24 @@ +[Unit] +Description=Redis data structure server +Documentation=https://redis.io/documentation +After=network.target + +[Service] +Type=notify +User=redis +Group=redis +ExecStart=/usr/bin/redis-server --supervised systemd --daemonize no +TimeoutStartSec=5 +TimeoutStopSec=5 +CapabilityBoundingSet= +PrivateTmp=true +PrivateDevices=true +ProtectSystem=full +ProtectHome=true +NoNewPrivileges=true +RuntimeDirectory=redis +RuntimeDirectoryMode=755 +LimitNOFILE=10032 + +[Install] +WantedBy=multi-user.target diff --git a/package/refpolicy/Config.in b/package/refpolicy/Config.in new file mode 100644 index 00000000..c529b85e --- /dev/null +++ b/package/refpolicy/Config.in @@ -0,0 +1,117 @@ +config BR2_PACKAGE_REFPOLICY + bool "refpolicy" + depends on BR2_TOOLCHAIN_HAS_THREADS # libsepol + # Even though libsepol is not necessary for building, we get + # the policy version from libsepol, so we select it, and treat + # it like a runtime dependency. + select BR2_PACKAGE_LIBSEPOL + help + The SELinux Reference Policy project (refpolicy) is a + complete SELinux policy that can be used as the system + policy for a variety of systems and used as the basis for + creating other policies. Reference Policy was originally + based on the NSA example policy, but aims to accomplish many + additional goals. + + The current refpolicy does not fully support Buildroot and + needs modifications to work with the default system file + layout. These changes should be added as patches to the + refpolicy that modify a single SELinux policy. + + The refpolicy works for the most part in permissive + mode. Only the basic set of utilities are enabled in the + example policy config and some of the pathing in the + policies is not correct. Individual policies would need to + be tweaked to get everything functioning properly. + + https://github.com/TresysTechnology/refpolicy + +if BR2_PACKAGE_REFPOLICY + +choice + prompt "Refpolicy version" + default BR2_PACKAGE_REFPOLICY_UPSTREAM_VERSION + +config BR2_PACKAGE_REFPOLICY_UPSTREAM_VERSION + bool "Upstream version" + help + Use the refpolicy as provided by Buildroot. + +config BR2_PACKAGE_REFPOLICY_CUSTOM_GIT + bool "Custom git repository" + help + Allows to get the refpolicy from a custom git repository. + + The custom refpolicy must define the full policy explicitly, + and must be a fork of the original refpolicy, to have the + same build system. When this is selected, only the custom + policy definition are taken into account and all the modules + of the policy are built into the binary policy. + +endchoice + +if BR2_PACKAGE_REFPOLICY_CUSTOM_GIT + +config BR2_PACKAGE_REFPOLICY_CUSTOM_REPO_URL + string "URL of custom repository" + +config BR2_PACKAGE_REFPOLICY_CUSTOM_REPO_VERSION + string "Custom repository version" + help + Revision to use in the typical format used by Git. + E.g. a sha id, tag, branch... + +endif + +choice + prompt "SELinux default state" + default BR2_PACKAGE_REFPOLICY_POLICY_STATE_PERMISSIVE + +config BR2_PACKAGE_REFPOLICY_POLICY_STATE_ENFORCING + bool "Enforcing" + help + SELinux security policy is enforced + +config BR2_PACKAGE_REFPOLICY_POLICY_STATE_PERMISSIVE + bool "Permissive" + help + SELinux prints warnings instead of enforcing + +config BR2_PACKAGE_REFPOLICY_POLICY_STATE_DISABLED + bool "Disabled" + help + No SELinux policy is loaded +endchoice + +config BR2_PACKAGE_REFPOLICY_POLICY_STATE + string + default "permissive" if BR2_PACKAGE_REFPOLICY_POLICY_STATE_PERMISSIVE + default "enforcing" if BR2_PACKAGE_REFPOLICY_POLICY_STATE_ENFORCING + default "disabled" if BR2_PACKAGE_REFPOLICY_POLICY_STATE_DISABLED + +if BR2_PACKAGE_REFPOLICY_UPSTREAM_VERSION + +config BR2_REFPOLICY_EXTRA_MODULES_DIRS + string "Extra modules directories" + help + Specify a space-separated list of directories containing + SELinux modules that will be built into the SELinux + policy. The modules will be automatically enabled in the + policy. + + Each of those directories must contain the SELinux policy + .fc, .if and .te files directly at the top-level, with no + sub-directories. Also, you cannot have several modules with + the same name in different directories. + +config BR2_REFPOLICY_EXTRA_MODULES + string "Extra modules to enable" + help + List of extra SELinux modules to enable in the refpolicy. + +endif + +endif + +comment "refpolicy needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/refpolicy/config b/package/refpolicy/config new file mode 100644 index 00000000..087297c1 --- /dev/null +++ b/package/refpolicy/config @@ -0,0 +1,8 @@ +# This file controls the state of SELinux on the system. +# SELINUX= can take one of these three values: +# enforcing - SELinux security policy is enforced. +# permissive - SELinux prints warnings instead of enforcing. +# disabled - No SELinux policy is loaded. +SELINUX=disabled + +SELINUXTYPE=targeted diff --git a/package/refpolicy/refpolicy.hash b/package/refpolicy/refpolicy.hash new file mode 100644 index 00000000..7e258c4e --- /dev/null +++ b/package/refpolicy/refpolicy.hash @@ -0,0 +1,5 @@ +# From https://github.com/SELinuxProject/refpolicy/releases +sha256 1488f9b94060de28addbcb29fb8437ee0d75cba15e11280dd9dfa3e09986f57b refpolicy-2.20200818.tar.bz2 + +# Locally computed +sha256 204d8eff92f95aac4df6c8122bc1505f468f3a901e5a4cc08940e0ede1938994 COPYING diff --git a/package/refpolicy/refpolicy.mk b/package/refpolicy/refpolicy.mk new file mode 100644 index 00000000..1180f0d3 --- /dev/null +++ b/package/refpolicy/refpolicy.mk @@ -0,0 +1,132 @@ +################################################################################ +# +# refpolicy +# +################################################################################ + +REFPOLICY_LICENSE = GPL-2.0 +REFPOLICY_LICENSE_FILES = COPYING +REFPOLICY_CPE_ID_VENDOR = selinuxproject +REFPOLICY_INSTALL_STAGING = YES +REFPOLICY_DEPENDENCIES = \ + host-m4 \ + host-checkpolicy \ + host-policycoreutils \ + host-python3 \ + host-setools \ + host-gawk + +ifeq ($(BR2_PACKAGE_REFPOLICY_CUSTOM_GIT),y) +REFPOLICY_VERSION = $(call qstrip,$(BR2_PACKAGE_REFPOLICY_CUSTOM_REPO_VERSION)) +REFPOLICY_SITE = $(call qstrip,$(BR2_PACKAGE_REFPOLICY_CUSTOM_REPO_URL)) +REFPOLICY_SITE_METHOD = git +BR_NO_CHECK_HASH_FOR += $(REFPOLICY_SOURCE) +else +REFPOLICY_VERSION = 2.20200818 +REFPOLICY_SOURCE = refpolicy-$(REFPOLICY_VERSION).tar.bz2 +REFPOLICY_SITE = https://github.com/SELinuxProject/refpolicy/releases/download/RELEASE_2_20200818 +endif + +# Cannot use multiple threads to build the reference policy +REFPOLICY_MAKE = \ + PYTHON=$(HOST_DIR)/usr/bin/python3 \ + TEST_TOOLCHAIN=$(HOST_DIR) \ + $(TARGET_MAKE_ENV) \ + $(MAKE1) + +REFPOLICY_POLICY_VERSION = $(BR2_PACKAGE_LIBSEPOL_POLICY_VERSION) +REFPOLICY_POLICY_STATE = \ + $(call qstrip,$(BR2_PACKAGE_REFPOLICY_POLICY_STATE)) + +ifeq ($(BR2_PACKAGE_REFPOLICY_UPSTREAM_VERSION),y) + +# Allow to provide out-of-tree SELinux modules in addition to the ones +# in the refpolicy. +REFPOLICY_EXTRA_MODULES_DIRS = \ + $(strip \ + $(call qstrip,$(BR2_REFPOLICY_EXTRA_MODULES_DIRS)) \ + $(PACKAGES_SELINUX_EXTRA_MODULES_DIRS)) +$(foreach dir,$(REFPOLICY_EXTRA_MODULES_DIRS),\ + $(if $(wildcard $(dir)),,\ + $(error BR2_REFPOLICY_EXTRA_MODULES_DIRS contains nonexistent directory $(dir)))) + +REFPOLICY_MODULES = \ + application \ + authlogin \ + getty \ + init \ + libraries \ + locallogin \ + logging \ + miscfiles \ + modutils \ + mount \ + selinuxutil \ + storage \ + sysadm \ + sysnetwork \ + unconfined \ + userdomain \ + $(PACKAGES_SELINUX_MODULES) \ + $(call qstrip,$(BR2_REFPOLICY_EXTRA_MODULES)) \ + $(foreach d,$(REFPOLICY_EXTRA_MODULES_DIRS),\ + $(basename $(notdir $(wildcard $(d)/*.te)))) + +define REFPOLICY_COPY_EXTRA_MODULES + mkdir -p $(@D)/policy/modules/buildroot + rsync -au $(addsuffix /*,$(REFPOLICY_EXTRA_MODULES_DIRS)) \ + $(@D)/policy/modules/buildroot/ + if [ ! -f $(@D)/policy/modules/buildroot/metadata.xml ]; then \ + echo "Buildroot extra modules" > \ + $(@D)/policy/modules/buildroot/metadata.xml; \ + fi +endef + +# In the context of a monolithic policy enabling a piece of the policy as +# 'base' or 'module' is equivalent, so we enable them as 'base'. +define REFPOLICY_CONFIGURE_MODULES + $(SED) "s/ = module/ = no/g" $(@D)/policy/modules.conf + $(foreach m,$(sort $(REFPOLICY_MODULES)), + $(SED) "/^$(m) =/c\$(m) = base" $(@D)/policy/modules.conf + ) +endef + +endif # BR2_PACKAGE_REFPOLICY_UPSTREAM_VERSION = y + +ifeq ($(BR2_INIT_SYSTEMD),y) +define REFPOLICY_CONFIGURE_SYSTEMD + $(SED) "/SYSTEMD/c\SYSTEMD = y" $(@D)/build.conf +endef +endif + +define REFPOLICY_CONFIGURE_CMDS + $(SED) "/OUTPUT_POLICY/c\OUTPUT_POLICY = $(REFPOLICY_POLICY_VERSION)" \ + $(@D)/build.conf + $(SED) "/MONOLITHIC/c\MONOLITHIC = y" $(@D)/build.conf + $(SED) "/NAME/c\NAME = targeted" $(@D)/build.conf + $(REFPOLICY_CONFIGURE_SYSTEMD) + $(if $(REFPOLICY_EXTRA_MODULES_DIRS), \ + $(REFPOLICY_COPY_EXTRA_MODULES) + ) + $(REFPOLICY_MAKE) -C $(@D) bare conf + $(REFPOLICY_CONFIGURE_MODULES) +endef + +define REFPOLICY_BUILD_CMDS + $(REFPOLICY_MAKE) -C $(@D) policy +endef + +define REFPOLICY_INSTALL_STAGING_CMDS + $(REFPOLICY_MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) \ + install-src install-headers +endef + +define REFPOLICY_INSTALL_TARGET_CMDS + $(REFPOLICY_MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install + $(INSTALL) -m 0755 -D package/refpolicy/config \ + $(TARGET_DIR)/etc/selinux/config + $(SED) "/^SELINUX=/c\SELINUX=$(REFPOLICY_POLICY_STATE)" \ + $(TARGET_DIR)/etc/selinux/config +endef + +$(eval $(generic-package)) diff --git a/package/resiprocate/Config.in b/package/resiprocate/Config.in new file mode 100644 index 00000000..509c11ff --- /dev/null +++ b/package/resiprocate/Config.in @@ -0,0 +1,49 @@ +comment "resiprocate needs a toolchain w/ C++, threads, wchar" + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR + +config BR2_PACKAGE_RESIPROCATE + bool "resiprocate" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_WCHAR + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_C_ARES + help + reSIProcate is a framework that aims to fully implement the + SIP protocol in first class C++. It is intended for use in + other applications, such as the repro SIP proxy. + + By default this package provides the core libraries: librutil + (utilities), libresip (SIP stack/RFC compliant message + parsing) and libdum (SIP Dialog Usage Manager, a state + machine for SIP dialogs). + + https://www.resiprocate.org/ + +if BR2_PACKAGE_RESIPROCATE + +config BR2_PACKAGE_RESIPROCATE_DTLS_SUPPORT + bool "DTLS support" + select BR2_PACKAGE_OPENSSL + help + Enable DTLS support (requires OpenSSL) + +config BR2_PACKAGE_RESIPROCATE_REND + bool "resiprocate-rend" + select BR2_PACKAGE_BOOST + select BR2_PACKAGE_BOOST_SYSTEM + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_POPT + help + Rend is tool that is was created specifically to load test + gtSIP based presence servers. + +config BR2_PACKAGE_RESIPROCATE_APPS + bool "resiprocate-apps" + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_PCRE + help + Build apps clicktocall and sipdial + +endif # BR2_PACKAGE_RESIPROCATE diff --git a/package/resiprocate/resiprocate.hash b/package/resiprocate/resiprocate.hash new file mode 100644 index 00000000..03336c64 --- /dev/null +++ b/package/resiprocate/resiprocate.hash @@ -0,0 +1,4 @@ +# http://list.resiprocate.org/pipermail/resiprocate-announce/2020-May/000000.html +sha256 046826503d3c8682ae0e42101b28f903c5f988235f1ff4a98dbfb9066d0d3d49 resiprocate-1.12.0.tar.gz +# Locally Computed +sha256 16b0fd1938a10fcd145904cc2dad74500fef9d27fc15b44cf8e8f92011f94d35 COPYING diff --git a/package/resiprocate/resiprocate.mk b/package/resiprocate/resiprocate.mk new file mode 100644 index 00000000..b31712b4 --- /dev/null +++ b/package/resiprocate/resiprocate.mk @@ -0,0 +1,48 @@ +################################################################################ +# +# resiprocate +# +################################################################################ + +RESIPROCATE_VERSION = 1.12.0 +RESIPROCATE_SITE = https://www.resiprocate.org/files/pub/reSIProcate/releases +# For complete details see https://www.resiprocate.org/License +RESIPROCATE_LICENSE = VSL-1.0, BSD-3-Clause +RESIPROCATE_LICENSE_FILES = COPYING +RESIPROCATE_CPE_ID_VENDOR = resiprocate +RESIPROCATE_INSTALL_STAGING = YES + +# Utilize c-ares from buildroot instead built in ARES library +# NOTE: resiprocate doesn't support --without- syntax as it will try +# to build with package if specified +RESIPROCATE_DEPENDENCIES = c-ares +RESIPROCATE_CONF_OPTS = -with-c-ares \ + --with-sysroot="$(STAGING_DIR)" + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +RESIPROCATE_DEPENDENCIES += openssl host-pkgconf +RESIPROCATE_CONF_OPTS += --with-ssl +# Configure.ac does not include '-lz' when statically linking against openssl +RESIPROCATE_CONF_ENV += LIBS=`$(PKG_CONFIG_HOST_BINARY) --libs openssl` +endif + +ifeq ($(BR2_PACKAGE_POPT),y) +RESIPROCATE_CONF_OPTS += --with-popt +RESIPROCATE_DEPENDENCIES += popt +endif + +ifeq ($(BR2_PACKAGE_RESIPROCATE_DTLS_SUPPORT),y) +RESIPROCATE_CONF_OPTS += --with-dtls +endif + +ifeq ($(BR2_PACKAGE_RESIPROCATE_REND),y) +RESIPROCATE_CONF_OPTS += --with-rend +RESIPROCATE_DEPENDENCIES += boost +endif + +ifeq ($(BR2_PACKAGE_RESIPROCATE_APPS),y) +RESIPROCATE_CONF_OPTS += --with-apps +RESIPROCATE_DEPENDENCIES += pcre +endif + +$(eval $(autotools-package)) diff --git a/package/restclient-cpp/Config.in b/package/restclient-cpp/Config.in new file mode 100644 index 00000000..9bf22408 --- /dev/null +++ b/package/restclient-cpp/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_RESTCLIENT_CPP + bool "restclient-cpp" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11 + select BR2_PACKAGE_LIBCURL + help + restclient-cpp is a C++ client library for + making HTTP/REST requests + + http://code.mrtazz.com/restclient-cpp/ + +comment "restclient-cpp needs a toolchain w/ C++, gcc >= 4.8" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 diff --git a/package/restclient-cpp/restclient-cpp.hash b/package/restclient-cpp/restclient-cpp.hash new file mode 100644 index 00000000..96c6d6c9 --- /dev/null +++ b/package/restclient-cpp/restclient-cpp.hash @@ -0,0 +1,3 @@ +# Computed locally +sha256 d62ba618f9a938652fd53b483289e8662a99451839e59058c8beb286dfbc65ec restclient-cpp-0.5.2.tar.gz +sha256 1c2f79e825a39eb61d8919044776627f4d079ff38975410a3bde340154fc94a4 LICENSE diff --git a/package/restclient-cpp/restclient-cpp.mk b/package/restclient-cpp/restclient-cpp.mk new file mode 100644 index 00000000..826be870 --- /dev/null +++ b/package/restclient-cpp/restclient-cpp.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# restclient-cpp +# +################################################################################ + +RESTCLIENT_CPP_VERSION = 0.5.2 +RESTCLIENT_CPP_SITE = $(call github,mrtazz,restclient-cpp,$(RESTCLIENT_CPP_VERSION)) +RESTCLIENT_CPP_LICENSE = MIT +RESTCLIENT_CPP_LICENSE_FILES = LICENSE +RESTCLIENT_CPP_INSTALL_STAGING = YES + +# Source from github, no configure script provided +RESTCLIENT_CPP_AUTORECONF = YES + +RESTCLIENT_CPP_DEPENDENCIES = libcurl + +$(eval $(autotools-package)) diff --git a/package/restorecond/Config.in b/package/restorecond/Config.in new file mode 100644 index 00000000..31f85f28 --- /dev/null +++ b/package/restorecond/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_RESTORECOND + bool "restorecond" + depends on BR2_USE_MMU # libglib2 + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on !BR2_STATIC_LIBS # libselinux + select BR2_PACKAGE_DBUS + select BR2_PACKAGE_DBUS_GLIB + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBSELINUX + select BR2_PACKAGE_LIBSEPOL + help + restorecond is a daemon that watches for file creation and + then sets the default SELinux file context for that file. + + https://github.com/SELinuxProject/selinux/wiki/Releases + +comment "restorecond needs a toolchain w/ wchar, threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR || \ + BR2_STATIC_LIBS diff --git a/package/restorecond/restorecond.hash b/package/restorecond/restorecond.hash new file mode 100644 index 00000000..e30e62a8 --- /dev/null +++ b/package/restorecond/restorecond.hash @@ -0,0 +1,5 @@ +# https://github.com/SELinuxProject/selinux/wiki/Releases +sha256 82ca45099685a45d718f11f8859963c1ba83d98e510312cbf0b7dc5664c60ad0 restorecond-3.1.tar.gz + +# Hash for license file +sha256 204d8eff92f95aac4df6c8122bc1505f468f3a901e5a4cc08940e0ede1938994 COPYING diff --git a/package/restorecond/restorecond.mk b/package/restorecond/restorecond.mk new file mode 100644 index 00000000..7ab7e978 --- /dev/null +++ b/package/restorecond/restorecond.mk @@ -0,0 +1,52 @@ +################################################################################ +# +# restorecond +# +################################################################################ + +RESTORECOND_VERSION = 3.1 +RESTORECOND_SITE = https://github.com/SELinuxProject/selinux/releases/download/20200710 +RESTORECOND_LICENSE = GPL-2.0 +RESTORECOND_LICENSE_FILES = COPYING + +RESTORECOND_DEPENDENCIES = libglib2 libsepol libselinux dbus-glib + +# Undefining _FILE_OFFSET_BITS here because of a "bug" with glibc fts.h +# large file support. +# See https://bugzilla.redhat.com/show_bug.cgi?id=574992 for more information +RESTORECOND_MAKE_OPTS += \ + $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(TARGET_CFLAGS) -U_FILE_OFFSET_BITS" \ + CPPFLAGS="$(TARGET_CPPFLAGS) -U_FILE_OFFSET_BITS" \ + ARCH="$(BR2_ARCH)" + +# We need to pass DESTDIR at build time because it's used by +# restorecond build system to find headers and libraries. +define RESTORECOND_BUILD_CMDS + $(MAKE) -C $(@D) $(RESTORECOND_MAKE_OPTS) DESTDIR=$(STAGING_DIR) all +endef + +define RESTORECOND_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D $(@D)/restorecond.init \ + $(TARGET_DIR)/etc/init.d/S20restorecond +endef + +define RESTORECOND_INSTALL_INIT_SYSTEMD + $(INSTALL) -m 0644 -D $(@D)/restorecond.service \ + $(TARGET_DIR)/usr/lib/systemd/system/restorecond.service + + mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants + ln -fs ../../../../usr/lib/systemd/system/restorecond.service \ + $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/restorecond.service + + $(INSTALL) -m 0600 -D $(@D)/org.selinux.Restorecond.service \ + $(TARGET_DIR)/etc/systemd/system/org.selinux.Restorecond.service +endef + +define RESTORECOND_INSTALL_TARGET_CMDS + $(INSTALL) -m 0644 -D $(@D)/restorecond.conf $(TARGET_DIR)/etc/selinux/restorecond.conf + $(INSTALL) -m 0644 -D $(@D)/restorecond_user.conf $(TARGET_DIR)/etc/selinux/restorecond_user.conf + $(INSTALL) -m 0755 -D $(@D)/restorecond $(TARGET_DIR)/usr/sbin/restorecond +endef + +$(eval $(generic-package)) diff --git a/package/rhash/0001-configure-allow-cross-compilation.patch b/package/rhash/0001-configure-allow-cross-compilation.patch new file mode 100644 index 00000000..6a8f40f1 --- /dev/null +++ b/package/rhash/0001-configure-allow-cross-compilation.patch @@ -0,0 +1,57 @@ +From a3d0ef352529217c9c32ce1a1b1db1420798cbe5 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 10 Oct 2020 11:07:39 +0200 +Subject: [PATCH] configure: allow cross-compilation + +Some compilers are in fact a wrapper (e.g. to speed compilation with +ccache or distcc, or as a cross-compiler wrapper). Those wrappers may +not properly recognise the -v option, or may internally enforce some +flags that conflict with -v. + +Use --version as a fall-back. + +With --version. the compiler will report its executable's basename, e.g. +arm-linux-gcc not gcc. Catter for that by grepping for the compiler +family name. + +Signed-off-by: Fabrice Fontaine +[yann.morin.1998@free.fr: + - retain "$CC -v" as default, fallback to "$CC --version" +] +Signed-off-by: Yann E. MORIN +--- + configure | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/configure b/configure +index 9d72895..46491f7 100755 +--- a/configure ++++ b/configure +@@ -513,9 +513,14 @@ else + CC_TMP="$CC" + test -n "$OPT_CC" && OTHER_CC= || OTHER_CC="gcc cc" + for CC in "$CC_TMP" $OTHER_CC; do ++ cc_name_tmp= + if run_cmd "$CC -v"; then + cc_name_tmp=$($CC -v 2>&1 | tail -n 1 | cut -d ' ' -f 1) +- if test "$cc_name_tmp" = "gcc"; then ++ elif run_cmd "$CC --version"; then ++ cc_name_tmp=$($CC --version 2>&1 | head -n 1 | cut -d ' ' -f 1) ++ fi ++ if test "${cc_name_tmp}"; then ++ if echo "$cc_name_tmp" | grep -q "gcc"; then + cc_name=$cc_name_tmp + start_check "$CC version" + cc_vendor=gnu +@@ -539,7 +544,7 @@ else + finish_check "$cc_name $cc_version" + break + fi +- if $CC -v 2>&1 | grep -q "clang"; then ++ if echo "$cc_name_tmp" | grep -q "clang"; then + start_check "$CC version" + cc_vendor=clang + cc_version=$($CC -dumpversion 2>&1) +-- +2.25.1 + diff --git a/package/rhash/0002-configure-add-uclinux-target.patch b/package/rhash/0002-configure-add-uclinux-target.patch new file mode 100644 index 00000000..ca4a5564 --- /dev/null +++ b/package/rhash/0002-configure-add-uclinux-target.patch @@ -0,0 +1,36 @@ +From 683f6875313cab9643402bb1710ebabb76e7c018 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Thu, 14 Jan 2021 08:37:06 +0100 +Subject: [PATCH] configure: add uclinux target + +Fix the following build failure with +--target=arm-buildroot-uclinux-uclibcgnueabi: + +Checking for target OS ... UNKNOWN + +Error: Unknown target OS, please specify the --target option + +Fixes: + - http://autobuild.buildroot.org/results/598ca65cf0c7ecf9ceaecb75868b656570ae00d2 + +Signed-off-by: Fabrice Fontaine +--- + configure | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure b/configure +index c8e1ea7..aae4dce 100755 +--- a/configure ++++ b/configure +@@ -426,7 +426,7 @@ else + component=$1 + part=$(echo $BUILD_TARGET | cut -d '-' -f $component) + case "$(echo $part | tr '[A-Z]' '[a-z]')" in +- linux) TARGET_OS=Linux ;; ++ linux|uclinux) TARGET_OS=Linux ;; + freebsd*) TARGET_OS=FreeBSD ;; + gnu/kfreebsd) TARGET_OS=FreeBSD ;; + netbsd) TARGET_OS=NetBSD ;; +-- +2.29.2 + diff --git a/package/rhash/Config.in b/package/rhash/Config.in new file mode 100644 index 00000000..2ddcb00f --- /dev/null +++ b/package/rhash/Config.in @@ -0,0 +1,23 @@ +config BR2_PACKAGE_RHASH + bool "rhash" + help + LibRHash is a professional, portable, thread-safe C library + for computing a wide variety of hash sums, such as CRC32, + MD4, MD5, SHA1, SHA256, SHA512, SHA3, AICH, ED2K, Tiger, + DC++ TTH, BitTorrent BTIH, GOST R 34.11-94, RIPEMD-160, + HAS-160, EDON-R, Whirlpool and Snefru. + + https://github.com/rhash/RHash + +if BR2_PACKAGE_RHASH + +config BR2_PACKAGE_RHASH_BIN + bool "rhash binary" + depends on !BR2_STATIC_LIBS + help + Install rhash console utility + +comment "rhash binary needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS + +endif diff --git a/package/rhash/rhash.hash b/package/rhash/rhash.hash new file mode 100644 index 00000000..ba7bbb8a --- /dev/null +++ b/package/rhash/rhash.hash @@ -0,0 +1,5 @@ +# From https://sourceforge.net/projects/rhash/files/rhash/1.4.1/ +sha1 e1f559d060fd07bfca854c8ae3384798bd2ef266 rhash-1.4.1-src.tar.gz +# Locally calculated +sha256 430c812733e69b78f07ce30a05db69563450e41e217ae618507a4ce2e144a297 rhash-1.4.1-src.tar.gz +sha256 953e55838353335148c90b5a38a4894292680b1d4c37228ffddddbf18ce54bf5 COPYING diff --git a/package/rhash/rhash.mk b/package/rhash/rhash.mk new file mode 100644 index 00000000..92abcd29 --- /dev/null +++ b/package/rhash/rhash.mk @@ -0,0 +1,74 @@ +################################################################################ +# +# rhash +# +################################################################################ + +RHASH_VERSION = 1.4.1 +RHASH_SOURCE = rhash-$(RHASH_VERSION)-src.tar.gz +RHASH_SITE = https://sourceforge.net/projects/rhash/files/rhash/$(RHASH_VERSION) +RHASH_LICENSE = 0BSD +RHASH_LICENSE_FILES = COPYING +RHASH_CPE_ID_VENDOR = rhash_project +RHASH_INSTALL_STAGING = YES +RHASH_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) +RHASH_ADDLDFLAGS = $(TARGET_NLS_LIBS) + +ifeq ($(BR2_SYSTEM_ENABLE_NLS),y) +RHASH_CONF_OPTS += --disable-gettext +else +RHASH_CONF_OPTS += --enable-gettext +endif + +ifeq ($(BR2_PACKAGE_OPENSSL)x$(BR2_STATIC_LIBS),yx) +RHASH_CONF_OPTS += --enable-openssl +RHASH_DEPENDENCIES += openssl +else +RHASH_CONF_OPTS += --disable-openssl +endif + +define RHASH_CONFIGURE_CMDS + (cd $(@D); $(TARGET_CONFIGURE_OPTS) ./configure \ + --prefix=/usr \ + --cc=$(TARGET_CC) \ + --target=$(GNU_TARGET_NAME) \ + $(RHASH_CONF_OPTS) \ + ) +endef + +ifeq ($(BR2_SHARED_LIBS),y) +RHASH_BUILD_TARGETS = lib-shared build-shared +RHASH_INSTALL_TARGETS = install-lib-shared install-so-link +else ifeq ($(BR2_STATIC_LIBS),y) +RHASH_BUILD_TARGETS = lib-static +RHASH_INSTALL_TARGETS = install-lib-static +else +RHASH_BUILD_TARGETS = lib-static lib-shared build-shared +RHASH_INSTALL_TARGETS = install-lib-static install-lib-shared install-so-link +endif + +define RHASH_BUILD_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + $(RHASH_MAKE_OPTS) $(RHASH_BUILD_TARGETS) +endef + +define RHASH_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D)/librhash \ + DESTDIR="$(STAGING_DIR)" $(RHASH_MAKE_OPTS) $(RHASH_INSTALL_TARGETS) \ + install-lib-headers +endef + +ifeq ($(BR2_PACKAGE_RHASH_BIN),y) +define RHASH_INSTALL_TARGET_RHASH_BIN + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \ + DESTDIR="$(TARGET_DIR)" $(RHASH_MAKE_OPTS) build-install-binary +endef +endif + +define RHASH_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D)/librhash \ + DESTDIR="$(TARGET_DIR)" $(RHASH_MAKE_OPTS) $(RHASH_INSTALL_TARGETS) + $(RHASH_INSTALL_TARGET_RHASH_BIN) +endef + +$(eval $(generic-package)) diff --git a/package/riemann-c-client/Config.in b/package/riemann-c-client/Config.in new file mode 100644 index 00000000..e9982b2f --- /dev/null +++ b/package/riemann-c-client/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_RIEMANN_C_CLIENT + bool "riemann-c-client" + depends on BR2_INSTALL_LIBSTDCPP # protobuf-c + depends on BR2_TOOLCHAIN_HAS_THREADS # protobuf-c + depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86" # protobuf-c + select BR2_PACKAGE_PROTOBUF_C + help + Riemann-c-client is a C client library for the Riemann + monitoring system, providing a convenient and simple API, + high test coverage and a copyleft license, along with API + and ABI stability. + + https://github.com/algernon/riemann-c-client + +comment "riemann-c-client needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86" diff --git a/package/riemann-c-client/riemann-c-client.hash b/package/riemann-c-client/riemann-c-client.hash new file mode 100644 index 00000000..6d4d634d --- /dev/null +++ b/package/riemann-c-client/riemann-c-client.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 334874f0b9a507a8abbc7138df719cba4f28f12c02c39d5e55090b8edb86f9d2 riemann-c-client-1.10.4.tar.gz +sha256 da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768 LICENSE diff --git a/package/riemann-c-client/riemann-c-client.mk b/package/riemann-c-client/riemann-c-client.mk new file mode 100644 index 00000000..6fbb3caf --- /dev/null +++ b/package/riemann-c-client/riemann-c-client.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# riemann-c-client +# +################################################################################ + +RIEMANN_C_CLIENT_VERSION = 1.10.4 +RIEMANN_C_CLIENT_SITE = \ + $(call github,algernon,riemann-c-client,riemann-c-client-$(RIEMANN_C_CLIENT_VERSION)) +RIEMANN_C_CLIENT_LICENSE = LGPL-3.0+ +RIEMANN_C_CLIENT_LICENSE_FILES = LICENSE +RIEMANN_C_CLIENT_INSTALL_STAGING = YES +RIEMANN_C_CLIENT_MAKE = $(MAKE1) +# From git +RIEMANN_C_CLIENT_AUTORECONF = YES +RIEMANN_C_CLIENT_DEPENDENCIES = \ + host-pkgconf protobuf-c \ + $(if $(BR2_PACKAGE_GNUTLS),gnutls) \ + $(if $(BR2_PACKAGE_JSON_C),json-c) + +$(eval $(autotools-package)) diff --git a/package/rings/Config.in b/package/rings/Config.in new file mode 100644 index 00000000..d1f1efe5 --- /dev/null +++ b/package/rings/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_RINGS + bool "rings" + help + Provides a way to create new Lua states from within Lua. + + http://github.com/keplerproject/rings diff --git a/package/rings/rings.hash b/package/rings/rings.hash new file mode 100644 index 00000000..c9a758b5 --- /dev/null +++ b/package/rings/rings.hash @@ -0,0 +1,3 @@ +# computed by luarocks/buildroot +sha256 627ac55d4a420fab766e6870fcd82cb39da12fb4ec8efddc7220b188a4ad4bc3 rings-1.3.0-1.src.rock +sha256 f582a0c43737391070827ef273df0145b594b095ad2f49595701368b729e024f rings-v_1_3_0/doc/us/license.html diff --git a/package/rings/rings.mk b/package/rings/rings.mk new file mode 100644 index 00000000..92001bbf --- /dev/null +++ b/package/rings/rings.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# rings +# +################################################################################ + +RINGS_VERSION_MAJOR = 1.3.0 +RINGS_VERSION = $(RINGS_VERSION_MAJOR)-1 +RINGS_SUBDIR = rings-v_$(subst .,_,$(RINGS_VERSION_MAJOR)) +RINGS_LICENSE = MIT +RINGS_LICENSE_FILES = $(RINGS_SUBDIR)/doc/us/license.html + +$(eval $(luarocks-package)) diff --git a/package/ripgrep/Config.in b/package/ripgrep/Config.in new file mode 100644 index 00000000..0ea2902b --- /dev/null +++ b/package/ripgrep/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_RIPGREP + bool "ripgrep" + depends on BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS + select BR2_PACKAGE_HOST_RUSTC + help + ripgrep is a line-oriented search tool that + recursively searches your current directory + for a regex pattern while respecting your gitignore + rules. + + ripgrep is similar to other popular search tools like + The Silver Searcher, ack and grep. + + https://github.com/BurntSushi/ripgrep diff --git a/package/ripgrep/ripgrep.hash b/package/ripgrep/ripgrep.hash new file mode 100644 index 00000000..0841c018 --- /dev/null +++ b/package/ripgrep/ripgrep.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 7035379fce0c1e32552e8ee528b92c3d01b8d3935ea31d26c51a73287be74bb3 ripgrep-0.8.1.tar.gz +sha256 0f96a83840e146e43c0ec96a22ec1f392e0680e6c1226e6f3ba87e0740af850f LICENSE-MIT diff --git a/package/ripgrep/ripgrep.mk b/package/ripgrep/ripgrep.mk new file mode 100644 index 00000000..313f7362 --- /dev/null +++ b/package/ripgrep/ripgrep.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# ripgrep +# +################################################################################ + +RIPGREP_VERSION = 0.8.1 +RIPGREP_SITE = $(call github,burntsushi,ripgrep,$(RIPGREP_VERSION)) +RIPGREP_LICENSE = MIT +RIPGREP_LICENSE_FILES = LICENSE-MIT +RIPGREP_CPE_ID_VENDOR = ripgrep_project + +RIPGREP_DEPENDENCIES = host-rustc +RIPGREP_CARGO_ENV = CARGO_HOME=$(HOST_DIR)/share/cargo + +RIPGREP_BIN_DIR = target/$(RUSTC_TARGET_NAME)/$(RIPGREP_CARGO_BIN_SUBDIR) + +RIPGREP_CARGO_OPTS = \ + --target=$(RUSTC_TARGET_NAME) \ + --manifest-path=$(@D)/Cargo.toml + +ifeq ($(BR2_ENABLE_DEBUG),y) +RIPGREP_CARGO_BIN_SUBDIR = debug +else +RIPGREP_CARGO_OPTS += --release +RIPGREP_CARGO_BIN_SUBDIR = release +endif + +define RIPGREP_BUILD_CMDS + $(TARGET_MAKE_ENV) $(RIPGREP_CARGO_ENV) \ + cargo build $(RIPGREP_CARGO_OPTS) +endef + +define RIPGREP_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/$(RIPGREP_BIN_DIR)/rg \ + $(TARGET_DIR)/usr/bin/rg +endef + +$(eval $(generic-package)) diff --git a/package/rng-tools/Config.in b/package/rng-tools/Config.in new file mode 100644 index 00000000..67e3d418 --- /dev/null +++ b/package/rng-tools/Config.in @@ -0,0 +1,42 @@ +config BR2_PACKAGE_RNG_TOOLS + bool "rng-tools" + # pthread_setaffinity_np + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + select BR2_PACKAGE_ARGP_STANDALONE if BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_MUSL + select BR2_PACKAGE_LIBSYSFS + select BR2_PACKAGE_OPENSSL + help + Daemon to use hardware random number generators. + + http://sourceforge.net/projects/gkernel/ + +if BR2_PACKAGE_RNG_TOOLS + +config BR2_PACKAGE_RNG_TOOLS_JITTERENTROPY_LIBRARY + bool "Jitterentropy Library support" + default y + select BR2_PACKAGE_JITTERENTROPY_LIBRARY + help + Enable Jitterentropy Library support. + + The Jitter RNG provides a noise source using the CPU + execution timing jitter. It does not depend on any + system resource other than a high-resolution time stamp. + +config BR2_PACKAGE_RNG_TOOLS_NISTBEACON + bool "NIST Entropy Beacon support" + select BR2_PACKAGE_JANSSON + select BR2_PACKAGE_LIBCURL + select BR2_PACKAGE_LIBXML2 + help + Enable NIST Entropy Beacon support. + + Entropy gathered from the NIST network entropy beacon. Note + that this entropy source is disabled by default as it should + never be used for cryptographic purposes, or any use case in + which random data should be known only by a single entity. + +endif + +comment "rng-tools needs a toolchain w/ NPTL" + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL diff --git a/package/rng-tools/S21rngd b/package/rng-tools/S21rngd new file mode 100644 index 00000000..b38be5a5 --- /dev/null +++ b/package/rng-tools/S21rngd @@ -0,0 +1,48 @@ +#!/bin/sh + +NAME="rngd" +DAEMON="/usr/sbin/${NAME}" +DAEMON_ARGS="" +CFG_FILE="/etc/default/${NAME}" +PID_FILE="/var/run/${NAME}.pid" + +# Read configuration variable file if it is present +[ -r "${CFG_FILE}" ] && . "${CFG_FILE}" + +start() +{ + printf "Starting ${NAME}: " + start-stop-daemon -S -q -x "${DAEMON}" -- ${DAEMON_ARGS} + [ $? = 0 ] && echo "OK" || echo "FAIL" +} + +stop() +{ + printf "Stopping ${NAME}: " + # This daemon does not exit properly with the default TERM signal unless + # it's forced to work by something reading /dev/random. Killing it and + # removing its PID file is more straightforward. + if start-stop-daemon -K -q -s KILL -p "${PID_FILE}" -n "${NAME}"; then + rm -f "${PID_FILE}" + echo "OK" + else + echo "FAIL" + fi +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + stop + start + ;; + *) + echo "Usage: $0 {start|stop|restart|reload}" >&2 + exit 1 + ;; +esac diff --git a/package/rng-tools/rng-tools.hash b/package/rng-tools/rng-tools.hash new file mode 100644 index 00000000..de1f7261 --- /dev/null +++ b/package/rng-tools/rng-tools.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 644d8bd4e84cee29debddc7e6db72aff27e628e5a879ce310562edf50f12be41 rng-tools-6.11.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/rng-tools/rng-tools.mk b/package/rng-tools/rng-tools.mk new file mode 100644 index 00000000..dbb7353b --- /dev/null +++ b/package/rng-tools/rng-tools.mk @@ -0,0 +1,57 @@ +################################################################################ +# +# rng-tools +# +################################################################################ + +RNG_TOOLS_VERSION = 6.11 +RNG_TOOLS_SITE = $(call github,nhorman,$(RNG_TOOLS_NAME),V$(RNG_TOOLS_VERSION)) +RNG_TOOLS_LICENSE = GPL-2.0 +RNG_TOOLS_LICENSE_FILES = COPYING +RNG_TOOLS_CPE_ID_VENDOR = rng-tools_project + +RNG_TOOLS_DEPENDENCIES = libsysfs host-pkgconf openssl +# From git +RNG_TOOLS_AUTORECONF = YES + +RNG_TOOLS_CONF_OPTS = --without-pkcs11 + +# Work around for uClibc or musl toolchains which lack argp_*() +# functions. +ifeq ($(BR2_PACKAGE_ARGP_STANDALONE),y) +RNG_TOOLS_CONF_ENV += LIBS="-largp" +RNG_TOOLS_DEPENDENCIES += argp-standalone +endif + +ifeq ($(BR2_PACKAGE_LIBRTLSDR),y) +RNG_TOOLS_DEPENDENCIES += librtlsdr +RNG_TOOLS_CONF_OPTS += --with-rtlsdr +else +RNG_TOOLS_CONF_OPTS += --without-rtlsdr +endif + +ifeq ($(BR2_PACKAGE_RNG_TOOLS_JITTERENTROPY_LIBRARY),y) +RNG_TOOLS_DEPENDENCIES += jitterentropy-library +RNG_TOOLS_CONF_OPTS += --enable-jitterentropy +else +RNG_TOOLS_CONF_OPTS += --disable-jitterentropy +endif + +ifeq ($(BR2_PACKAGE_RNG_TOOLS_NISTBEACON),y) +RNG_TOOLS_DEPENDENCIES += jansson libcurl libxml2 +RNG_TOOLS_CONF_OPTS += --with-nistbeacon +else +RNG_TOOLS_CONF_OPTS += --without-nistbeacon +endif + +define RNG_TOOLS_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 package/rng-tools/S21rngd \ + $(TARGET_DIR)/etc/init.d/S21rngd +endef + +define RNG_TOOLS_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/rng-tools/rngd.service \ + $(TARGET_DIR)/usr/lib/systemd/system/rngd.service +endef + +$(eval $(autotools-package)) diff --git a/package/rng-tools/rngd.service b/package/rng-tools/rngd.service new file mode 100644 index 00000000..11386d1e --- /dev/null +++ b/package/rng-tools/rngd.service @@ -0,0 +1,9 @@ +[Unit] +Description=Hardware RNG Entropy Gatherer Daemon + +[Service] +ExecStart=/usr/sbin/rngd -f $DAEMON_ARGS +EnvironmentFile=-/etc/default/rngd + +[Install] +WantedBy=multi-user.target diff --git a/package/rocksdb/0001-build_tools-build_detect_platform-fix-C-tests.patch b/package/rocksdb/0001-build_tools-build_detect_platform-fix-C-tests.patch new file mode 100644 index 00000000..77ac9f90 --- /dev/null +++ b/package/rocksdb/0001-build_tools-build_detect_platform-fix-C-tests.patch @@ -0,0 +1,325 @@ +From 23739c6f9694d7fc436967439f170173dbb4c6b4 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 24 Feb 2020 10:22:13 +0100 +Subject: [PATCH] build_tools/build_detect_platform: fix C++ tests + +Replace -o /dev/null by -o test.o when testing for C++ features such as +-faligned-new otherwise tests will fail with some bugged binutils +(https://sourceware.org/bugzilla/show_bug.cgi?id=19526): + +output/host/bin/xtensa-buildroot-linux-uclibc-g++ -faligned-new -x c++ - -o /dev/null < +[Upstream status: https://github.com/facebook/rocksdb/pull/6479] +--- + build_tools/build_detect_platform | 66 +++++++++++++++---------------- + 1 file changed, 33 insertions(+), 33 deletions(-) + +diff --git a/build_tools/build_detect_platform b/build_tools/build_detect_platform +index 2535d8124..64a0ae76c 100755 +--- a/build_tools/build_detect_platform ++++ b/build_tools/build_detect_platform +@@ -172,7 +172,7 @@ case "$TARGET_OS" in + PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -lpthread -lrt -ldl" + if test $ROCKSDB_USE_IO_URING; then + # check for liburing +- $CXX $CFLAGS -x c++ - -luring -o /dev/null 2>/dev/null </dev/null < + int main() { + struct io_uring ring; +@@ -245,7 +245,7 @@ if [ "$CROSS_COMPILE" = "true" -o "$FBCODE_BUILD" = "true" ]; then + else + if ! test $ROCKSDB_DISABLE_FALLOCATE; then + # Test whether fallocate is available +- $CXX $CFLAGS -x c++ - -o /dev/null 2>/dev/null </dev/null < + #include + int main() { +@@ -261,7 +261,7 @@ EOF + if ! test $ROCKSDB_DISABLE_SNAPPY; then + # Test whether Snappy library is installed + # http://code.google.com/p/snappy/ +- $CXX $CFLAGS -x c++ - -o /dev/null 2>/dev/null </dev/null < + int main() {} + EOF +@@ -276,7 +276,7 @@ EOF + # Test whether gflags library is installed + # http://gflags.github.io/gflags/ + # check if the namespace is gflags +- if $CXX $CFLAGS -x c++ - -o /dev/null 2>/dev/null << EOF ++ if $CXX $CFLAGS -x c++ - -o test.o 2>/dev/null << EOF + #include + using namespace GFLAGS_NAMESPACE; + int main() {} +@@ -323,7 +323,7 @@ EOF + COMMON_FLAGS="$COMMON_FLAGS -DGFLAGS=1" + PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -lgflags" + # check if namespace is gflags +- elif $CXX $CFLAGS -x c++ - -o /dev/null 2>/dev/null << EOF ++ elif $CXX $CFLAGS -x c++ - -o test.o 2>/dev/null << EOF + #include + using namespace gflags; + int main() {} +@@ -285,7 +285,7 @@ EOF + COMMON_FLAGS="$COMMON_FLAGS -DGFLAGS=1 -DGFLAGS_NAMESPACE=gflags" + PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -lgflags" + # check if namespace is google +- elif $CXX $CFLAGS -x c++ - -o /dev/null 2>/dev/null << EOF ++ elif $CXX $CFLAGS -x c++ - -o test.o 2>/dev/null << EOF + #include + using namespace google; + int main() {} +@@ -299,7 +299,7 @@ EOF + + if ! test $ROCKSDB_DISABLE_ZLIB; then + # Test whether zlib library is installed +- $CXX $CFLAGS $COMMON_FLAGS -x c++ - -o /dev/null 2>/dev/null </dev/null < + int main() {} + EOF +@@ -312,7 +312,7 @@ EOF + + if ! test $ROCKSDB_DISABLE_BZIP; then + # Test whether bzip library is installed +- $CXX $CFLAGS $COMMON_FLAGS -x c++ - -o /dev/null 2>/dev/null </dev/null < + int main() {} + EOF +@@ -325,7 +325,7 @@ EOF + + if ! test $ROCKSDB_DISABLE_LZ4; then + # Test whether lz4 library is installed +- $CXX $CFLAGS $COMMON_FLAGS -x c++ - -o /dev/null 2>/dev/null </dev/null < + #include + int main() {} +@@ -339,7 +339,7 @@ EOF + + if ! test $ROCKSDB_DISABLE_ZSTD; then + # Test whether zstd library is installed +- $CXX $CFLAGS $COMMON_FLAGS -x c++ - -o /dev/null 2>/dev/null </dev/null < + int main() {} + EOF +@@ -352,7 +352,7 @@ EOF + + if ! test $ROCKSDB_DISABLE_NUMA; then + # Test whether numa is available +- $CXX $CFLAGS -x c++ - -o /dev/null -lnuma 2>/dev/null </dev/null < + #include + int main() {} +@@ -366,7 +366,7 @@ EOF + + if ! test $ROCKSDB_DISABLE_TBB; then + # Test whether tbb is available +- $CXX $CFLAGS $LDFLAGS -x c++ - -o /dev/null -ltbb 2>/dev/null </dev/null < + int main() {} + EOF +@@ -379,7 +379,7 @@ EOF + + if ! test $ROCKSDB_DISABLE_JEMALLOC; then + # Test whether jemalloc is available +- if echo 'int main() {}' | $CXX $CFLAGS -x c++ - -o /dev/null -ljemalloc \ ++ if echo 'int main() {}' | $CXX $CFLAGS -x c++ - -o test.o -ljemalloc \ + 2>/dev/null; then + # This will enable some preprocessor identifiers in the Makefile + JEMALLOC=1 +@@ -400,7 +400,7 @@ EOF + fi + if ! test $JEMALLOC && ! test $ROCKSDB_DISABLE_TCMALLOC; then + # jemalloc is not available. Let's try tcmalloc +- if echo 'int main() {}' | $CXX $CFLAGS -x c++ - -o /dev/null \ ++ if echo 'int main() {}' | $CXX $CFLAGS -x c++ - -o test.o \ + -ltcmalloc 2>/dev/null; then + PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -ltcmalloc" + JAVA_LDFLAGS="$JAVA_LDFLAGS -ltcmalloc" +@@ -409,7 +409,7 @@ EOF + + if ! test $ROCKSDB_DISABLE_MALLOC_USABLE_SIZE; then + # Test whether malloc_usable_size is available +- $CXX $CFLAGS -x c++ - -o /dev/null 2>/dev/null </dev/null < + int main() { + size_t res = malloc_usable_size(0); +@@ -424,7 +424,7 @@ EOF + + if ! test $ROCKSDB_DISABLE_MEMKIND; then + # Test whether memkind library is installed +- $CXX $CFLAGS $COMMON_FLAGS -lmemkind -x c++ - -o /dev/null 2>/dev/null </dev/null < + int main() { + memkind_malloc(MEMKIND_DAX_KMEM, 1024); +@@ -486,7 +486,7 @@ EOF + + if ! test $ROCKSDB_DISABLE_PTHREAD_MUTEX_ADAPTIVE_NP; then + # Test whether PTHREAD_MUTEX_ADAPTIVE_NP mutex type is available +- $CXX $CFLAGS -x c++ - -o /dev/null 2>/dev/null </dev/null < + int main() { + int x = PTHREAD_MUTEX_ADAPTIVE_NP; +@@ -439,7 +439,7 @@ EOF + + if ! test $ROCKSDB_DISABLE_BACKTRACE; then + # Test whether backtrace is available +- $CXX $CFLAGS -x c++ - -o /dev/null 2>/dev/null </dev/null < + int main() { + void* frames[1]; +@@ -451,7 +451,7 @@ EOF + COMMON_FLAGS="$COMMON_FLAGS -DROCKSDB_BACKTRACE" + else + # Test whether execinfo library is installed +- $CXX $CFLAGS -lexecinfo -x c++ - -o /dev/null 2>/dev/null </dev/null < + int main() { + void* frames[1]; +@@ -468,7 +468,7 @@ EOF + + if ! test $ROCKSDB_DISABLE_PG; then + # Test if -pg is supported +- $CXX $CFLAGS -pg -x c++ - -o /dev/null 2>/dev/null </dev/null </dev/null </dev/null < + int main() { + int fd = open("/dev/null", 0); +@@ -494,7 +494,7 @@ EOF + + if ! test $ROCKSDB_DISABLE_SCHED_GETCPU; then + # Test whether sched_getcpu is supported +- $CXX $CFLAGS -x c++ - -o /dev/null 2>/dev/null </dev/null < + int main() { + int cpuid = sched_getcpu(); +@@ -508,7 +508,7 @@ EOF + + if ! test $ROCKSDB_DISABLE_AUXV_GETAUXVAL; then + # Test whether getauxval is supported +- $CXX $CFLAGS -x c++ - -o /dev/null 2>/dev/null </dev/null < + int main() { + uint64_t auxv = getauxval(AT_HWCAP); +@@ -522,7 +522,7 @@ EOF + + if ! test $ROCKSDB_DISABLE_ALIGNED_NEW; then + # Test whether c++17 aligned-new is supported +- $CXX $PLATFORM_CXXFLAGS -faligned-new -x c++ - -o /dev/null 2>/dev/null </dev/null </dev/null </dev/null </dev/null </dev/null < + #include + int main() { +@@ -617,7 +617,7 @@ elif test "$USE_SSE"; then + echo "warning: USE_SSE specified but compiler could not use SSE intrinsics, disabling" >&2 + fi + +-$CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS $TRY_PCLMUL -x c++ - -o /dev/null 2>/dev/null </dev/null < + #include + int main() { +@@ -634,7 +634,7 @@ elif test "$USE_SSE"; then + echo "warning: USE_SSE specified but compiler could not use PCLMUL intrinsics, disabling" >&2 + fi + +-$CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS $TRY_AVX2 -x c++ - -o /dev/null 2>/dev/null </dev/null < + #include + int main() { +@@ -649,7 +649,7 @@ elif test "$USE_SSE"; then + echo "warning: USE_SSE specified but compiler could not use AVX2 intrinsics, disabling" >&2 + fi + +-$CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS $TRY_BMI -x c++ - -o /dev/null 2>/dev/null </dev/null < + #include + int main(int argc, char *argv[]) { +@@ -739,7 +739,7 @@ elif test "$USE_SSE"; then + echo "warning: USE_SSE specified but compiler could not use BMI intrinsics, disabling" >&2 + fi + +-$CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS $TRY_LZCNT -x c++ - -o /dev/null 2>/dev/null </dev/null < + #include + int main(int argc, char *argv[]) { +@@ -753,7 +753,7 @@ elif test "$USE_SSE"; then + echo "warning: USE_SSE specified but compiler could not use LZCNT intrinsics, disabling" >&2 + fi + +-$CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS -x c++ - -o /dev/null 2>/dev/null </dev/null < + int main() { + uint64_t a = 0xffffFFFFffffFFFF; +@@ -666,7 +666,7 @@ fi + # succeed because the cross-compiler flags are added by the Makefile, not this + # script. + if [ "$PLATFORM" != IOS ]; then +- $CXX $COMMON_FLAGS -x c++ - -o /dev/null 2>/dev/null </dev/null </dev/null ++ $CXX $COMMON_FLAGS $PLATFORM_SHARED_LDFLAGS test_dl.o -o test.o 2>/dev/null + if [ "$?" = 0 ]; then + EXEC_LDFLAGS+="-ldl" + rm -f test_dl.o +-- +2.25.0 + diff --git a/package/rocksdb/0002-POWER7-8-compatiblity-fix-CRC32-C-implementation.patch b/package/rocksdb/0002-POWER7-8-compatiblity-fix-CRC32-C-implementation.patch new file mode 100644 index 00000000..bb7a2bed --- /dev/null +++ b/package/rocksdb/0002-POWER7-8-compatiblity-fix-CRC32-C-implementation.patch @@ -0,0 +1,3787 @@ +From 7eab5c3bf8449673de7bf0d3446a669694f71f1a Mon Sep 17 00:00:00 2001 +From: Daniel Black +Date: Thu, 16 Apr 2020 12:23:02 +1000 +Subject: [PATCH] POWER7/8 compatiblity fix + CRC32 C implementation + +When running on a POWER7/8, the compiler will successfully +report being able to compile for POWER9 compatibility. It will +however fail to run due to POWER9+ only instructions being used. + +To preserve the goals of ensuring an optimization for the +local hardware, -mcpu=native is used, but only if we don't +already have C{,XX}_FLAGS with cpu/arch/tune set. PORTABLE +flag that was added for x86 is reused to ensure that the minimum +viable cpu is selected, POWER7 if compiling on big endian and +POWER8 if on little endian. + +This ensures that if a binary distributor compiles on a +POWER9, and aims to support POWER8 packages, then hopefully +they will have the correct C{,XX}_FLAGS, and as such, will +not result in a broken package on POWER8. + +Fixes: 8fc20ac468b266a53083175025375985ec04b796 + +We also replace POWER crc32c with C implementation. +The presence of clang compile failures on POWER due to +missing ppc-asm.h prompted the replacement of the ASM +CRC32 implementation with the C implementation. + +We include this when the compile flags enable it to be build. +For example on POWER7 the optimized crc32 will be built, +however it won't be used because of the runtime detection. +If the executable is moved to a POWER8 big endian it will +work correctly. + +https://github.com/antonblanchard/crc32-vpmsum/blob/master/vec_crc32.c +is used with only small include path change with the local copyright header +maintained. + +util/crc32c.cc removes arch_ppc_crc32 which was only ever +used in a local context. Also incorporated significant advice from +tchaikov in #2869. Replace all compile time checks with runtime checks. + +Corrects getauxval detection from 8bbd76edbf by including the header from the +right directory. + +[Retrieved (and slightly updated for 6.13.3) from: +https://github.com/facebook/rocksdb/pull/7079/commits/7eab5c3bf8449673de7bf0d3446a669694f71f1a] +Signed-off-by: Fabrice Fontaine +--- + CMakeLists.txt | 59 +- + Makefile | 35 +- + src.mk | 11 +- + util/crc32c.cc | 63 +- + util/crc32c_ppc.c | 94 -- + util/crc32c_ppc.cc | 662 +++++++++++++ + util/crc32c_ppc.h | 19 - + util/crc32c_ppc_asm.S | 752 -------------- + util/crc32c_ppc_clang_workaround.h | 85 ++ + util/crc32c_ppc_constants.h | 1457 +++++++++++++++++----------- + util/crc32c_test.cc | 3 + + 11 files changed, 1684 insertions(+), 1556 deletions(-) + delete mode 100644 util/crc32c_ppc.c + create mode 100644 util/crc32c_ppc.cc + delete mode 100644 util/crc32c_ppc.h + delete mode 100644 util/crc32c_ppc_asm.S + create mode 100644 util/crc32c_ppc_clang_workaround.h + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 91647d83bb..5adf0cf3a5 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -39,7 +39,7 @@ include(ReadVersion) + get_rocksdb_version(rocksdb_VERSION) + project(rocksdb + VERSION ${rocksdb_VERSION} +- LANGUAGES CXX C ASM) ++ LANGUAGES CXX C) + + if(POLICY CMP0042) + cmake_policy(SET CMP0042 NEW) +@@ -223,26 +223,6 @@ else() + endif() + + include(CheckCCompilerFlag) +-if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64") +- CHECK_C_COMPILER_FLAG("-mcpu=power9" HAS_POWER9) +- if(HAS_POWER9) +- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mcpu=power9 -mtune=power9") +- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=power9 -mtune=power9") +- else() +- CHECK_C_COMPILER_FLAG("-mcpu=power8" HAS_POWER8) +- if(HAS_POWER8) +- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mcpu=power8 -mtune=power8") +- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=power8 -mtune=power8") +- endif(HAS_POWER8) +- endif(HAS_POWER9) +- CHECK_C_COMPILER_FLAG("-maltivec" HAS_ALTIVEC) +- if(HAS_ALTIVEC) +- message(STATUS " HAS_ALTIVEC yes") +- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maltivec") +- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maltivec") +- endif(HAS_ALTIVEC) +-endif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64") +- + if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64") + CHECK_C_COMPILER_FLAG("-march=armv8-a+crc+crypto" HAS_ARMV8_CRC) + if(HAS_ARMV8_CRC) +@@ -260,21 +240,40 @@ if(PORTABLE) + if(FORCE_SSE42 AND NOT MSVC) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2 -mpclmul") + endif() ++ if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64") ++ if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64le") ++ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=power8") ++ else() ++ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=power7") ++ endif() ++ endif() + else() + if(MSVC) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2") + else() +- if(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64" AND NOT HAS_ARMV8_CRC) +- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native") ++ if(NOT CMAKE_CXX_FLAGS MATCHES "m(cpu|tune|arch)") ++ if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64") ++ # Power doesn't have a march option - https://gcc.gnu.org/onlinedocs/gcc/RS_002f6000-and-PowerPC-Options.html ++ # -mcpu activates all available options ++ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=native") ++ else() ++ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native") ++ endif() + endif() + endif() + endif() + +-include(CheckCXXSourceCompiles) ++if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64") ++ include(CheckCXXCompilerFlag) ++ SET(POWER_CRC32_FLAGS "-mcrypto -mpower8-vector -maltivec -mvsx") ++ CHECK_CXX_COMPILER_FLAG("${POWER_CRC32_FLAGS}" HAS_POWER_CRC32_FLAGS) ++endif() ++ + if(NOT MSVC) + set(CMAKE_REQUIRED_FLAGS "-msse4.2 -mpclmul") + endif() + ++include(CheckCXXSourceCompiles) + CHECK_CXX_SOURCE_COMPILES(" + #include + #include +@@ -525,7 +524,7 @@ if(HAVE_SCHED_GETCPU) + add_definitions(-DROCKSDB_SCHED_GETCPU_PRESENT) + endif() + +-check_cxx_symbol_exists(getauxval auvx.h HAVE_AUXV_GETAUXVAL) ++check_cxx_symbol_exists(getauxval sys/auxv.h HAVE_AUXV_GETAUXVAL) + if(HAVE_AUXV_GETAUXVAL) + add_definitions(-DROCKSDB_AUXV_GETAUXVAL_PRESENT) + endif() +@@ -796,11 +795,13 @@ if(HAVE_SSE42 AND NOT MSVC) + PROPERTIES COMPILE_FLAGS "-msse4.2 -mpclmul") + endif() + +-if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64") ++if(HAS_POWER_CRC32_FLAGS) + list(APPEND SOURCES +- util/crc32c_ppc.c +- util/crc32c_ppc_asm.S) +-endif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64") ++ util/crc32c_ppc.cc) ++ set_source_files_properties( ++ util/crc32c_ppc.cc ++ PROPERTIES COMPILE_FLAGS "${POWER_CRC32_FLAGS}") ++endif() + + if(HAS_ARMV8_CRC) + list(APPEND SOURCES +diff --git a/Makefile b/Makefile +index a19d2ff964..7da8f71085 100644 +--- a/Makefile ++++ b/Makefile +@@ -144,16 +144,9 @@ OPT += -momit-leaf-frame-pointer + endif + endif + +-ifeq (,$(shell $(CXX) -fsyntax-only -maltivec -xc /dev/null 2>&1)) +-CXXFLAGS += -DHAS_ALTIVEC +-CFLAGS += -DHAS_ALTIVEC +-HAS_ALTIVEC=1 +-endif +- +-ifeq (,$(shell $(CXX) -fsyntax-only -mcpu=power8 -xc /dev/null 2>&1)) +-CXXFLAGS += -DHAVE_POWER8 +-CFLAGS += -DHAVE_POWER8 +-HAVE_POWER8=1 ++ifeq (,$(shell $(CXX) -fsyntax-only -mcrypto -mpower8-vector -maltivec -mvsx -xc /dev/null 2>&1)) ++POWER_CRC32_FLAGS=-mcrypto -mpower8-vector -maltivec -mvsx ++HAVE_POWER_CRC32_FLAGS=1 + endif + + ifeq (,$(shell $(CXX) -fsyntax-only -march=armv8-a+crc+crypto -xc /dev/null 2>&1)) +@@ -461,10 +454,6 @@ endif + + OBJ_DIR?=. + LIB_OBJECTS = $(patsubst %.cc, $(OBJ_DIR)/%.o, $(LIB_SOURCES)) +-ifeq ($(HAVE_POWER8),1) +-LIB_OBJECTS += $(patsubst %.c, $(OBJ_DIR)/%.o, $(LIB_SOURCES_C)) +-LIB_OBJECTS += $(patsubst %.S, $(OBJ_DIR)/%.o, $(LIB_SOURCES_ASM)) +-endif + + ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1) + LIB_OBJECTS += $(patsubst %.cpp, $(OBJ_DIR)/%.o, $(FOLLY_SOURCES)) +@@ -2254,13 +2242,12 @@ IOSVERSION=$(shell defaults read $(PLATFORMSROOT)/iPhoneOS.platform/version CFBu + lipo ios-x86/$@ ios-arm/$@ -create -output $@ + + else +-ifeq ($(HAVE_POWER8),1) +-$(OBJ_DIR)/util/crc32c_ppc.o: util/crc32c_ppc.c +- $(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@ ++ifeq ($(HAVE_POWER_CRC32_FLAGS),1) ++$(OBJ_DIR)/util/crc32c_ppc.o: util/crc32c_ppc.cc ++ $(AM_V_CC)$(CC) $(CFLAGS) $(POWER_CRC32_FLAGS) -c $< -o $@ + +-$(OBJ_DIR)/util/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S +- $(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@ + endif ++ + $(OBJ_DIR)/%.o: %.cc + $(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) -c $< -o $@ $(COVERAGEFLAGS) + +diff --git a/src.mk b/src.mk +index c4fec346e4..0f6a19a17c 100644 +--- a/src.mk ++++ b/src.mk +@@ -255,14 +255,9 @@ LIB_SOURCES +=\ + util/crc32c_arm64.cc + endif + +-ifeq (,$(shell $(CXX) -fsyntax-only -maltivec -xc /dev/null 2>&1)) +-LIB_SOURCES_ASM =\ +- util/crc32c_ppc_asm.S +-LIB_SOURCES_C = \ +- util/crc32c_ppc.c +-else +-LIB_SOURCES_ASM = +-LIB_SOURCES_C = ++ifeq ($(HAVE_POWER_CRC32_FLAGS),1) ++LIB_SOURCES += \ ++ util/crc32c_ppc.cc + endif + + TOOL_LIB_SOURCES = \ +diff --git a/util/crc32c.cc b/util/crc32c.cc +index a709e9b1ce..b24a4f0e0f 100644 +--- a/util/crc32c.cc ++++ b/util/crc32c.cc +@@ -20,15 +20,13 @@ + + #include "util/crc32c_arm64.h" + +-#ifdef __powerpc64__ +-#include "util/crc32c_ppc.h" +-#include "util/crc32c_ppc_constants.h" +- +-#if __linux__ + #ifdef ROCKSDB_AUXV_GETAUXVAL_PRESENT + #include + #endif + ++#ifdef __powerpc64__ ++extern uint32_t crc32c_ppc(uint32_t crc, unsigned char const* buffer, ++ unsigned long len); + #ifndef PPC_FEATURE2_VEC_CRYPTO + #define PPC_FEATURE2_VEC_CRYPTO 0x02000000 + #endif +@@ -37,19 +35,11 @@ + #define AT_HWCAP2 26 + #endif + +-#endif /* __linux__ */ +- + #endif + + namespace ROCKSDB_NAMESPACE { + namespace crc32c { + +-#if defined(HAVE_POWER8) && defined(HAS_ALTIVEC) +-#ifdef __powerpc64__ +-static int arch_ppc_crc32 = 0; +-#endif /* __powerpc64__ */ +-#endif +- + static const uint32_t table0_[256] = { + 0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4, + 0xc79a971f, 0x35f1141c, 0x26a1e7e8, 0xd4ca64eb, +@@ -342,6 +332,7 @@ static inline void Slow_CRC32(uint64_t* l, uint8_t const **p) { + table0_[c >> 24]; + } + ++#if !defined(HAVE_ARM64_CRC) && !defined(__powerpc64__) + static inline void Fast_CRC32(uint64_t* l, uint8_t const **p) { + #ifndef HAVE_SSE42 + Slow_CRC32(l, p); +@@ -355,6 +346,7 @@ static inline void Fast_CRC32(uint64_t* l, uint8_t const **p) { + *p += 4; + #endif + } ++#endif + + template + uint32_t ExtendImpl(uint32_t crc, const char* buf, size_t size) { +@@ -400,10 +392,8 @@ uint32_t ExtendImpl(uint32_t crc, const char* buf, size_t size) { + return static_cast(l ^ 0xffffffffu); + } + +-// Detect if ARM64 CRC or not. +-#ifndef HAVE_ARM64_CRC ++#if !defined(HAVE_ARM64_CRC) && !defined(__powerpc64__) + // Detect if SS42 or not. +-#ifndef HAVE_POWER8 + + static bool isSSE42() { + #ifndef HAVE_SSE42 +@@ -439,36 +429,22 @@ static bool isPCLMULQDQ() { + #endif + } + +-#endif // HAVE_POWER8 +-#endif // HAVE_ARM64_CRC ++#endif // !__power64__ && !HAVE_ARM64_CRC + + typedef uint32_t (*Function)(uint32_t, const char*, size_t); + +-#if defined(HAVE_POWER8) && defined(HAS_ALTIVEC) ++#if defined(__powerpc64__) + uint32_t ExtendPPCImpl(uint32_t crc, const char *buf, size_t size) { + return crc32c_ppc(crc, (const unsigned char *)buf, size); + } + +-#if __linux__ +-static int arch_ppc_probe(void) { +- arch_ppc_crc32 = 0; +- +-#if defined(__powerpc64__) && defined(ROCKSDB_AUXV_GETAUXVAL_PRESENT) +- if (getauxval(AT_HWCAP2) & PPC_FEATURE2_VEC_CRYPTO) arch_ppc_crc32 = 1; +-#endif /* __powerpc64__ */ +- +- return arch_ppc_crc32; +-} +-#endif // __linux__ +- + static bool isAltiVec() { +- if (arch_ppc_probe()) { +- return true; +- } else { +- return false; +- } +-} ++#if defined(__linux__) && defined(ROCKSDB_AUXV_GETAUXVAL_PRESENT) ++ if (getauxval(AT_HWCAP2) & PPC_FEATURE2_VEC_CRYPTO) return true; + #endif ++ return false; ++} ++#endif // __power64__: + + #if defined(__linux__) && defined(HAVE_ARM64_CRC) + uint32_t ExtendARMImpl(uint32_t crc, const char *buf, size_t size) { +@@ -480,16 +456,9 @@ std::string IsFastCrc32Supported() { + bool has_fast_crc = false; + std::string fast_zero_msg; + std::string arch; +-#ifdef HAVE_POWER8 +-#ifdef HAS_ALTIVEC +- if (arch_ppc_probe()) { +- has_fast_crc = true; +- arch = "PPC"; +- } +-#else +- has_fast_crc = false; ++#ifdef __powerpc64__ ++ has_fast_crc = isAltiVec(); + arch = "PPC"; +-#endif + #elif defined(__linux__) && defined(HAVE_ARM64_CRC) + if (crc32c_runtime_check()) { + has_fast_crc = true; +@@ -1220,7 +1189,7 @@ uint32_t crc32c_3way(uint32_t crc, const char* buf, size_t len) { + #endif //HAVE_SSE42 && HAVE_PCLMUL + + static inline Function Choose_Extend() { +-#ifdef HAVE_POWER8 ++#ifdef __powerpc64__ + return isAltiVec() ? ExtendPPCImpl : ExtendImpl; + #elif defined(__linux__) && defined(HAVE_ARM64_CRC) + if(crc32c_runtime_check()) { +diff --git a/util/crc32c_ppc.c b/util/crc32c_ppc.c +deleted file mode 100644 +index 888a4943ea..0000000000 +--- a/util/crc32c_ppc.c ++++ /dev/null +@@ -1,94 +0,0 @@ +-// Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. +-// Copyright (c) 2017 International Business Machines Corp. +-// All rights reserved. +-// This source code is licensed under both the GPLv2 (found in the +-// COPYING file in the root directory) and Apache 2.0 License +-// (found in the LICENSE.Apache file in the root directory). +- +-#define CRC_TABLE +-#include +-#include +-#include +-#include "util/crc32c_ppc_constants.h" +- +-#define VMX_ALIGN 16 +-#define VMX_ALIGN_MASK (VMX_ALIGN - 1) +- +-#ifdef REFLECT +-static unsigned int crc32_align(unsigned int crc, unsigned char const *p, +- unsigned long len) { +- while (len--) crc = crc_table[(crc ^ *p++) & 0xff] ^ (crc >> 8); +- return crc; +-} +-#endif +- +-#ifdef HAVE_POWER8 +-unsigned int __crc32_vpmsum(unsigned int crc, unsigned char const *p, +- unsigned long len); +- +-static uint32_t crc32_vpmsum(uint32_t crc, unsigned char const *data, +- unsigned len) { +- unsigned int prealign; +- unsigned int tail; +- +-#ifdef CRC_XOR +- crc ^= 0xffffffff; +-#endif +- +- if (len < VMX_ALIGN + VMX_ALIGN_MASK) { +- crc = crc32_align(crc, data, (unsigned long)len); +- goto out; +- } +- +- if ((unsigned long)data & VMX_ALIGN_MASK) { +- prealign = VMX_ALIGN - ((unsigned long)data & VMX_ALIGN_MASK); +- crc = crc32_align(crc, data, prealign); +- len -= prealign; +- data += prealign; +- } +- +- crc = __crc32_vpmsum(crc, data, (unsigned long)len & ~VMX_ALIGN_MASK); +- +- tail = len & VMX_ALIGN_MASK; +- if (tail) { +- data += len & ~VMX_ALIGN_MASK; +- crc = crc32_align(crc, data, tail); +- } +- +-out: +-#ifdef CRC_XOR +- crc ^= 0xffffffff; +-#endif +- +- return crc; +-} +- +-/* This wrapper function works around the fact that crc32_vpmsum +- * does not gracefully handle the case where the data pointer is NULL. There +- * may be room for performance improvement here. +- */ +-uint32_t crc32c_ppc(uint32_t crc, unsigned char const *data, unsigned len) { +- unsigned char *buf2; +- +- if (!data) { +- buf2 = (unsigned char *)malloc(len); +- bzero(buf2, len); +- crc = crc32_vpmsum(crc, buf2, len); +- free(buf2); +- } else { +- crc = crc32_vpmsum(crc, data, (unsigned long)len); +- } +- return crc; +-} +- +-#else /* HAVE_POWER8 */ +- +-/* This symbol has to exist on non-ppc architectures (and on legacy +- * ppc systems using power7 or below) in order to compile properly +- * there, even though it won't be called. +- */ +-uint32_t crc32c_ppc(uint32_t crc, unsigned char const *data, unsigned len) { +- return 0; +-} +- +-#endif /* HAVE_POWER8 */ +diff --git a/util/crc32c_ppc.cc b/util/crc32c_ppc.cc +new file mode 100644 +index 0000000000..44487eb80b +--- /dev/null ++++ b/util/crc32c_ppc.cc +@@ -0,0 +1,662 @@ ++/* ++ * Calculate the checksum of data that is 16 byte aligned and a multiple of ++ * 16 bytes. ++ * ++ * The first step is to reduce it to 1024 bits. We do this in 8 parallel ++ * chunks in order to mask the latency of the vpmsum instructions. If we ++ * have more than 32 kB of data to checksum we repeat this step multiple ++ * times, passing in the previous 1024 bits. ++ * ++ * The next step is to reduce the 1024 bits to 64 bits. This step adds ++ * 32 bits of 0s to the end - this matches what a CRC does. We just ++ * calculate constants that land the data in this 32 bits. ++ * ++ * We then use fixed point Barrett reduction to compute a mod n over GF(2) ++ * for n = CRC using POWER8 instructions. We use x = 32. ++ * ++ * http://en.wikipedia.org/wiki/Barrett_reduction ++ * ++ * This code uses gcc vector builtins instead using assembly directly. ++ * ++ * Copyright (C) 2017 Rogerio Alves , IBM ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of either: ++ * ++ * a) 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, or ++ * b) the Apache License, Version 2.0 ++ */ ++ ++#include ++ ++#define POWER8_INTRINSICS ++#define CRC_TABLE ++ ++#include "crc32c_ppc_constants.h" ++ ++#define VMX_ALIGN 16 ++#define VMX_ALIGN_MASK (VMX_ALIGN - 1) ++ ++#ifdef REFLECT ++static unsigned int crc32_align(unsigned int crc, const unsigned char *p, ++ unsigned long len) { ++ while (len--) crc = crc_table[(crc ^ *p++) & 0xff] ^ (crc >> 8); ++ return crc; ++} ++#else ++static unsigned int crc32_align(unsigned int crc, const unsigned char *p, ++ unsigned long len) { ++ while (len--) crc = crc_table[((crc >> 24) ^ *p++) & 0xff] ^ (crc << 8); ++ return crc; ++} ++#endif ++ ++static unsigned int __attribute__((aligned(32))) ++__crc32_vpmsum(unsigned int crc, const void *p, unsigned long len); ++ ++#ifndef CRC32_FUNCTION ++#define CRC32_FUNCTION crc32c_ppc ++#endif ++ ++unsigned int CRC32_FUNCTION(unsigned int crc, const unsigned char *p, ++ unsigned long len) { ++ unsigned int prealign; ++ unsigned int tail; ++ ++#ifdef CRC_XOR ++ crc ^= 0xffffffff; ++#endif ++ ++ if (len < VMX_ALIGN + VMX_ALIGN_MASK) { ++ crc = crc32_align(crc, p, len); ++ goto out; ++ } ++ ++ if ((unsigned long)p & VMX_ALIGN_MASK) { ++ prealign = VMX_ALIGN - ((unsigned long)p & VMX_ALIGN_MASK); ++ crc = crc32_align(crc, p, prealign); ++ len -= prealign; ++ p += prealign; ++ } ++ ++ crc = __crc32_vpmsum(crc, p, len & ~VMX_ALIGN_MASK); ++ ++ tail = len & VMX_ALIGN_MASK; ++ if (tail) { ++ p += len & ~VMX_ALIGN_MASK; ++ crc = crc32_align(crc, p, tail); ++ } ++ ++out: ++#ifdef CRC_XOR ++ crc ^= 0xffffffff; ++#endif ++ ++ return crc; ++} ++ ++#if defined(__clang__) ++#include "crc32c_ppc_clang_workaround.h" ++#else ++#define __builtin_pack_vector(a, b) __builtin_pack_vector_int128((a), (b)) ++#define __builtin_unpack_vector_0(a) \ ++ __builtin_unpack_vector_int128((vector __int128_t)(a), 0) ++#define __builtin_unpack_vector_1(a) \ ++ __builtin_unpack_vector_int128((vector __int128_t)(a), 1) ++#endif ++ ++/* When we have a load-store in a single-dispatch group and address overlap ++ * such that foward is not allowed (load-hit-store) the group must be flushed. ++ * A group ending NOP prevents the flush. ++ */ ++#define GROUP_ENDING_NOP asm("ori 2,2,0" ::: "memory") ++ ++#if defined(__BIG_ENDIAN__) && defined(REFLECT) ++#define BYTESWAP_DATA ++#elif defined(__LITTLE_ENDIAN__) && !defined(REFLECT) ++#define BYTESWAP_DATA ++#endif ++ ++#ifdef BYTESWAP_DATA ++#define VEC_PERM(vr, va, vb, vc) \ ++ vr = vec_perm(va, vb, (__vector unsigned char)vc) ++#if defined(__LITTLE_ENDIAN__) ++/* Byte reverse permute constant LE. */ ++static const __vector unsigned long long vperm_const ++ __attribute__((aligned(16))) = {0x08090A0B0C0D0E0FUL, 0x0001020304050607UL}; ++#else ++static const __vector unsigned long long vperm_const ++ __attribute__((aligned(16))) = {0x0F0E0D0C0B0A0908UL, 0X0706050403020100UL}; ++#endif ++#else ++#define VEC_PERM(vr, va, vb, vc) ++#endif ++ ++static unsigned int __attribute__((aligned(32))) ++__crc32_vpmsum(unsigned int crc, const void *p, unsigned long len) { ++ const __vector unsigned long long vzero = {0, 0}; ++ const __vector unsigned long long vones = {0xffffffffffffffffUL, ++ 0xffffffffffffffffUL}; ++ ++#ifdef REFLECT ++ const __vector unsigned long long vmask_32bit = ++ (__vector unsigned long long)vec_sld((__vector unsigned char)vzero, ++ (__vector unsigned char)vones, 4); ++#endif ++ ++ const __vector unsigned long long vmask_64bit = ++ (__vector unsigned long long)vec_sld((__vector unsigned char)vzero, ++ (__vector unsigned char)vones, 8); ++ ++ __vector unsigned long long vcrc; ++ ++ __vector unsigned long long vconst1, vconst2; ++ ++ /* vdata0-vdata7 will contain our data (p). */ ++ __vector unsigned long long vdata0, vdata1, vdata2, vdata3, vdata4, vdata5, ++ vdata6, vdata7; ++ ++ /* v0-v7 will contain our checksums */ ++ __vector unsigned long long v0 = {0, 0}; ++ __vector unsigned long long v1 = {0, 0}; ++ __vector unsigned long long v2 = {0, 0}; ++ __vector unsigned long long v3 = {0, 0}; ++ __vector unsigned long long v4 = {0, 0}; ++ __vector unsigned long long v5 = {0, 0}; ++ __vector unsigned long long v6 = {0, 0}; ++ __vector unsigned long long v7 = {0, 0}; ++ ++ /* Vector auxiliary variables. */ ++ __vector unsigned long long va0, va1, va2, va3, va4, va5, va6, va7; ++ ++ unsigned int result = 0; ++ unsigned int offset; /* Constant table offset. */ ++ ++ unsigned long i; /* Counter. */ ++ unsigned long chunks; ++ ++ unsigned long block_size; ++ int next_block = 0; ++ ++ /* Align by 128 bits. The last 128 bit block will be processed at end. */ ++ unsigned long length = len & 0xFFFFFFFFFFFFFF80UL; ++ ++#ifdef REFLECT ++ vcrc = (__vector unsigned long long)__builtin_pack_vector(0UL, crc); ++#else ++ vcrc = (__vector unsigned long long)__builtin_pack_vector(crc, 0UL); ++ ++ /* Shift into top 32 bits */ ++ vcrc = (__vector unsigned long long)vec_sld((__vector unsigned char)vcrc, ++ (__vector unsigned char)vzero, 4); ++#endif ++ ++ /* Short version. */ ++ if (len < 256) { ++ /* Calculate where in the constant table we need to start. */ ++ offset = 256 - len; ++ ++ vconst1 = vec_ld(offset, vcrc_short_const); ++ vdata0 = vec_ld(0, (__vector unsigned long long *)p); ++ VEC_PERM(vdata0, vdata0, vconst1, vperm_const); ++ ++ /* xor initial value*/ ++ vdata0 = vec_xor(vdata0, vcrc); ++ ++ vdata0 = (__vector unsigned long long)__builtin_crypto_vpmsumw( ++ (__vector unsigned int)vdata0, (__vector unsigned int)vconst1); ++ v0 = vec_xor(v0, vdata0); ++ ++ for (i = 16; i < len; i += 16) { ++ vconst1 = vec_ld(offset + i, vcrc_short_const); ++ vdata0 = vec_ld(i, (__vector unsigned long long *)p); ++ VEC_PERM(vdata0, vdata0, vconst1, vperm_const); ++ vdata0 = (__vector unsigned long long)__builtin_crypto_vpmsumw( ++ (__vector unsigned int)vdata0, (__vector unsigned int)vconst1); ++ v0 = vec_xor(v0, vdata0); ++ } ++ } else { ++ /* Load initial values. */ ++ vdata0 = vec_ld(0, (__vector unsigned long long *)p); ++ vdata1 = vec_ld(16, (__vector unsigned long long *)p); ++ ++ VEC_PERM(vdata0, vdata0, vdata0, vperm_const); ++ VEC_PERM(vdata1, vdata1, vdata1, vperm_const); ++ ++ vdata2 = vec_ld(32, (__vector unsigned long long *)p); ++ vdata3 = vec_ld(48, (__vector unsigned long long *)p); ++ ++ VEC_PERM(vdata2, vdata2, vdata2, vperm_const); ++ VEC_PERM(vdata3, vdata3, vdata3, vperm_const); ++ ++ vdata4 = vec_ld(64, (__vector unsigned long long *)p); ++ vdata5 = vec_ld(80, (__vector unsigned long long *)p); ++ ++ VEC_PERM(vdata4, vdata4, vdata4, vperm_const); ++ VEC_PERM(vdata5, vdata5, vdata5, vperm_const); ++ ++ vdata6 = vec_ld(96, (__vector unsigned long long *)p); ++ vdata7 = vec_ld(112, (__vector unsigned long long *)p); ++ ++ VEC_PERM(vdata6, vdata6, vdata6, vperm_const); ++ VEC_PERM(vdata7, vdata7, vdata7, vperm_const); ++ ++ /* xor in initial value */ ++ vdata0 = vec_xor(vdata0, vcrc); ++ ++ p = (char *)p + 128; ++ ++ do { ++ /* Checksum in blocks of MAX_SIZE. */ ++ block_size = length; ++ if (block_size > MAX_SIZE) { ++ block_size = MAX_SIZE; ++ } ++ ++ length = length - block_size; ++ ++ /* ++ * Work out the offset into the constants table to start at. Each ++ * constant is 16 bytes, and it is used against 128 bytes of input ++ * data - 128 / 16 = 8 ++ */ ++ offset = (MAX_SIZE / 8) - (block_size / 8); ++ /* We reduce our final 128 bytes in a separate step */ ++ chunks = (block_size / 128) - 1; ++ ++ vconst1 = vec_ld(offset, vcrc_const); ++ ++ va0 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata0, ++ (__vector unsigned long long)vconst1); ++ va1 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata1, ++ (__vector unsigned long long)vconst1); ++ va2 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata2, ++ (__vector unsigned long long)vconst1); ++ va3 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata3, ++ (__vector unsigned long long)vconst1); ++ va4 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata4, ++ (__vector unsigned long long)vconst1); ++ va5 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata5, ++ (__vector unsigned long long)vconst1); ++ va6 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata6, ++ (__vector unsigned long long)vconst1); ++ va7 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata7, ++ (__vector unsigned long long)vconst1); ++ ++ if (chunks > 1) { ++ offset += 16; ++ vconst2 = vec_ld(offset, vcrc_const); ++ GROUP_ENDING_NOP; ++ ++ vdata0 = vec_ld(0, (__vector unsigned long long *)p); ++ VEC_PERM(vdata0, vdata0, vdata0, vperm_const); ++ ++ vdata1 = vec_ld(16, (__vector unsigned long long *)p); ++ VEC_PERM(vdata1, vdata1, vdata1, vperm_const); ++ ++ vdata2 = vec_ld(32, (__vector unsigned long long *)p); ++ VEC_PERM(vdata2, vdata2, vdata2, vperm_const); ++ ++ vdata3 = vec_ld(48, (__vector unsigned long long *)p); ++ VEC_PERM(vdata3, vdata3, vdata3, vperm_const); ++ ++ vdata4 = vec_ld(64, (__vector unsigned long long *)p); ++ VEC_PERM(vdata4, vdata4, vdata4, vperm_const); ++ ++ vdata5 = vec_ld(80, (__vector unsigned long long *)p); ++ VEC_PERM(vdata5, vdata5, vdata5, vperm_const); ++ ++ vdata6 = vec_ld(96, (__vector unsigned long long *)p); ++ VEC_PERM(vdata6, vdata6, vdata6, vperm_const); ++ ++ vdata7 = vec_ld(112, (__vector unsigned long long *)p); ++ VEC_PERM(vdata7, vdata7, vdata7, vperm_const); ++ ++ p = (char *)p + 128; ++ ++ /* ++ * main loop. We modulo schedule it such that it takes three ++ * iterations to complete - first iteration load, second ++ * iteration vpmsum, third iteration xor. ++ */ ++ for (i = 0; i < chunks - 2; i++) { ++ vconst1 = vec_ld(offset, vcrc_const); ++ offset += 16; ++ GROUP_ENDING_NOP; ++ ++ v0 = vec_xor(v0, va0); ++ va0 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata0, ++ (__vector unsigned long long)vconst2); ++ vdata0 = vec_ld(0, (__vector unsigned long long *)p); ++ VEC_PERM(vdata0, vdata0, vdata0, vperm_const); ++ GROUP_ENDING_NOP; ++ ++ v1 = vec_xor(v1, va1); ++ va1 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata1, ++ (__vector unsigned long long)vconst2); ++ vdata1 = vec_ld(16, (__vector unsigned long long *)p); ++ VEC_PERM(vdata1, vdata1, vdata1, vperm_const); ++ GROUP_ENDING_NOP; ++ ++ v2 = vec_xor(v2, va2); ++ va2 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata2, ++ (__vector unsigned long long)vconst2); ++ vdata2 = vec_ld(32, (__vector unsigned long long *)p); ++ VEC_PERM(vdata2, vdata2, vdata2, vperm_const); ++ GROUP_ENDING_NOP; ++ ++ v3 = vec_xor(v3, va3); ++ va3 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata3, ++ (__vector unsigned long long)vconst2); ++ vdata3 = vec_ld(48, (__vector unsigned long long *)p); ++ VEC_PERM(vdata3, vdata3, vdata3, vperm_const); ++ ++ vconst2 = vec_ld(offset, vcrc_const); ++ GROUP_ENDING_NOP; ++ ++ v4 = vec_xor(v4, va4); ++ va4 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata4, ++ (__vector unsigned long long)vconst1); ++ vdata4 = vec_ld(64, (__vector unsigned long long *)p); ++ VEC_PERM(vdata4, vdata4, vdata4, vperm_const); ++ GROUP_ENDING_NOP; ++ ++ v5 = vec_xor(v5, va5); ++ va5 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata5, ++ (__vector unsigned long long)vconst1); ++ vdata5 = vec_ld(80, (__vector unsigned long long *)p); ++ VEC_PERM(vdata5, vdata5, vdata5, vperm_const); ++ GROUP_ENDING_NOP; ++ ++ v6 = vec_xor(v6, va6); ++ va6 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata6, ++ (__vector unsigned long long)vconst1); ++ vdata6 = vec_ld(96, (__vector unsigned long long *)p); ++ VEC_PERM(vdata6, vdata6, vdata6, vperm_const); ++ GROUP_ENDING_NOP; ++ ++ v7 = vec_xor(v7, va7); ++ va7 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata7, ++ (__vector unsigned long long)vconst1); ++ vdata7 = vec_ld(112, (__vector unsigned long long *)p); ++ VEC_PERM(vdata7, vdata7, vdata7, vperm_const); ++ ++ p = (char *)p + 128; ++ } ++ ++ /* First cool down*/ ++ vconst1 = vec_ld(offset, vcrc_const); ++ offset += 16; ++ ++ v0 = vec_xor(v0, va0); ++ va0 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata0, ++ (__vector unsigned long long)vconst1); ++ GROUP_ENDING_NOP; ++ ++ v1 = vec_xor(v1, va1); ++ va1 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata1, ++ (__vector unsigned long long)vconst1); ++ GROUP_ENDING_NOP; ++ ++ v2 = vec_xor(v2, va2); ++ va2 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata2, ++ (__vector unsigned long long)vconst1); ++ GROUP_ENDING_NOP; ++ ++ v3 = vec_xor(v3, va3); ++ va3 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata3, ++ (__vector unsigned long long)vconst1); ++ GROUP_ENDING_NOP; ++ ++ v4 = vec_xor(v4, va4); ++ va4 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata4, ++ (__vector unsigned long long)vconst1); ++ GROUP_ENDING_NOP; ++ ++ v5 = vec_xor(v5, va5); ++ va5 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata5, ++ (__vector unsigned long long)vconst1); ++ GROUP_ENDING_NOP; ++ ++ v6 = vec_xor(v6, va6); ++ va6 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata6, ++ (__vector unsigned long long)vconst1); ++ GROUP_ENDING_NOP; ++ ++ v7 = vec_xor(v7, va7); ++ va7 = __builtin_crypto_vpmsumd((__vector unsigned long long)vdata7, ++ (__vector unsigned long long)vconst1); ++ } /* else */ ++ ++ /* Second cool down. */ ++ v0 = vec_xor(v0, va0); ++ v1 = vec_xor(v1, va1); ++ v2 = vec_xor(v2, va2); ++ v3 = vec_xor(v3, va3); ++ v4 = vec_xor(v4, va4); ++ v5 = vec_xor(v5, va5); ++ v6 = vec_xor(v6, va6); ++ v7 = vec_xor(v7, va7); ++ ++#ifdef REFLECT ++ /* ++ * vpmsumd produces a 96 bit result in the least significant bits ++ * of the register. Since we are bit reflected we have to shift it ++ * left 32 bits so it occupies the least significant bits in the ++ * bit reflected domain. ++ */ ++ v0 = (__vector unsigned long long)vec_sld( ++ (__vector unsigned char)v0, (__vector unsigned char)vzero, 4); ++ v1 = (__vector unsigned long long)vec_sld( ++ (__vector unsigned char)v1, (__vector unsigned char)vzero, 4); ++ v2 = (__vector unsigned long long)vec_sld( ++ (__vector unsigned char)v2, (__vector unsigned char)vzero, 4); ++ v3 = (__vector unsigned long long)vec_sld( ++ (__vector unsigned char)v3, (__vector unsigned char)vzero, 4); ++ v4 = (__vector unsigned long long)vec_sld( ++ (__vector unsigned char)v4, (__vector unsigned char)vzero, 4); ++ v5 = (__vector unsigned long long)vec_sld( ++ (__vector unsigned char)v5, (__vector unsigned char)vzero, 4); ++ v6 = (__vector unsigned long long)vec_sld( ++ (__vector unsigned char)v6, (__vector unsigned char)vzero, 4); ++ v7 = (__vector unsigned long long)vec_sld( ++ (__vector unsigned char)v7, (__vector unsigned char)vzero, 4); ++#endif ++ ++ /* xor with the last 1024 bits. */ ++ va0 = vec_ld(0, (__vector unsigned long long *)p); ++ VEC_PERM(va0, va0, va0, vperm_const); ++ ++ va1 = vec_ld(16, (__vector unsigned long long *)p); ++ VEC_PERM(va1, va1, va1, vperm_const); ++ ++ va2 = vec_ld(32, (__vector unsigned long long *)p); ++ VEC_PERM(va2, va2, va2, vperm_const); ++ ++ va3 = vec_ld(48, (__vector unsigned long long *)p); ++ VEC_PERM(va3, va3, va3, vperm_const); ++ ++ va4 = vec_ld(64, (__vector unsigned long long *)p); ++ VEC_PERM(va4, va4, va4, vperm_const); ++ ++ va5 = vec_ld(80, (__vector unsigned long long *)p); ++ VEC_PERM(va5, va5, va5, vperm_const); ++ ++ va6 = vec_ld(96, (__vector unsigned long long *)p); ++ VEC_PERM(va6, va6, va6, vperm_const); ++ ++ va7 = vec_ld(112, (__vector unsigned long long *)p); ++ VEC_PERM(va7, va7, va7, vperm_const); ++ ++ p = (char *)p + 128; ++ ++ vdata0 = vec_xor(v0, va0); ++ vdata1 = vec_xor(v1, va1); ++ vdata2 = vec_xor(v2, va2); ++ vdata3 = vec_xor(v3, va3); ++ vdata4 = vec_xor(v4, va4); ++ vdata5 = vec_xor(v5, va5); ++ vdata6 = vec_xor(v6, va6); ++ vdata7 = vec_xor(v7, va7); ++ ++ /* Check if we have more blocks to process */ ++ next_block = 0; ++ if (length != 0) { ++ next_block = 1; ++ ++ /* zero v0-v7 */ ++ v0 = vec_xor(v0, v0); ++ v1 = vec_xor(v1, v1); ++ v2 = vec_xor(v2, v2); ++ v3 = vec_xor(v3, v3); ++ v4 = vec_xor(v4, v4); ++ v5 = vec_xor(v5, v5); ++ v6 = vec_xor(v6, v6); ++ v7 = vec_xor(v7, v7); ++ } ++ length = length + 128; ++ ++ } while (next_block); ++ ++ /* Calculate how many bytes we have left. */ ++ length = (len & 127); ++ ++ /* Calculate where in (short) constant table we need to start. */ ++ offset = 128 - length; ++ ++ v0 = vec_ld(offset, vcrc_short_const); ++ v1 = vec_ld(offset + 16, vcrc_short_const); ++ v2 = vec_ld(offset + 32, vcrc_short_const); ++ v3 = vec_ld(offset + 48, vcrc_short_const); ++ v4 = vec_ld(offset + 64, vcrc_short_const); ++ v5 = vec_ld(offset + 80, vcrc_short_const); ++ v6 = vec_ld(offset + 96, vcrc_short_const); ++ v7 = vec_ld(offset + 112, vcrc_short_const); ++ ++ offset += 128; ++ ++ v0 = (__vector unsigned long long)__builtin_crypto_vpmsumw( ++ (__vector unsigned int)vdata0, (__vector unsigned int)v0); ++ v1 = (__vector unsigned long long)__builtin_crypto_vpmsumw( ++ (__vector unsigned int)vdata1, (__vector unsigned int)v1); ++ v2 = (__vector unsigned long long)__builtin_crypto_vpmsumw( ++ (__vector unsigned int)vdata2, (__vector unsigned int)v2); ++ v3 = (__vector unsigned long long)__builtin_crypto_vpmsumw( ++ (__vector unsigned int)vdata3, (__vector unsigned int)v3); ++ v4 = (__vector unsigned long long)__builtin_crypto_vpmsumw( ++ (__vector unsigned int)vdata4, (__vector unsigned int)v4); ++ v5 = (__vector unsigned long long)__builtin_crypto_vpmsumw( ++ (__vector unsigned int)vdata5, (__vector unsigned int)v5); ++ v6 = (__vector unsigned long long)__builtin_crypto_vpmsumw( ++ (__vector unsigned int)vdata6, (__vector unsigned int)v6); ++ v7 = (__vector unsigned long long)__builtin_crypto_vpmsumw( ++ (__vector unsigned int)vdata7, (__vector unsigned int)v7); ++ ++ /* Now reduce the tail (0-112 bytes). */ ++ for (i = 0; i < length; i += 16) { ++ vdata0 = vec_ld(i, (__vector unsigned long long *)p); ++ VEC_PERM(vdata0, vdata0, vdata0, vperm_const); ++ va0 = vec_ld(offset + i, vcrc_short_const); ++ va0 = (__vector unsigned long long)__builtin_crypto_vpmsumw( ++ (__vector unsigned int)vdata0, (__vector unsigned int)va0); ++ v0 = vec_xor(v0, va0); ++ } ++ ++ /* xor all parallel chunks together. */ ++ v0 = vec_xor(v0, v1); ++ v2 = vec_xor(v2, v3); ++ v4 = vec_xor(v4, v5); ++ v6 = vec_xor(v6, v7); ++ ++ v0 = vec_xor(v0, v2); ++ v4 = vec_xor(v4, v6); ++ ++ v0 = vec_xor(v0, v4); ++ } ++ ++ /* Barrett Reduction */ ++ vconst1 = vec_ld(0, v_Barrett_const); ++ vconst2 = vec_ld(16, v_Barrett_const); ++ ++ v1 = (__vector unsigned long long)vec_sld((__vector unsigned char)v0, ++ (__vector unsigned char)v0, 8); ++ v0 = vec_xor(v1, v0); ++ ++#ifdef REFLECT ++ /* shift left one bit */ ++ __vector unsigned char vsht_splat = vec_splat_u8(1); ++ v0 = (__vector unsigned long long)vec_sll((__vector unsigned char)v0, ++ vsht_splat); ++#endif ++ ++ v0 = vec_and(v0, vmask_64bit); ++ ++#ifndef REFLECT ++ ++ /* ++ * Now for the actual algorithm. The idea is to calculate q, ++ * the multiple of our polynomial that we need to subtract. By ++ * doing the computation 2x bits higher (ie 64 bits) and shifting the ++ * result back down 2x bits, we round down to the nearest multiple. ++ */ ++ ++ /* ma */ ++ v1 = __builtin_crypto_vpmsumd((__vector unsigned long long)v0, ++ (__vector unsigned long long)vconst1); ++ /* q = floor(ma/(2^64)) */ ++ v1 = (__vector unsigned long long)vec_sld((__vector unsigned char)vzero, ++ (__vector unsigned char)v1, 8); ++ /* qn */ ++ v1 = __builtin_crypto_vpmsumd((__vector unsigned long long)v1, ++ (__vector unsigned long long)vconst2); ++ /* a - qn, subtraction is xor in GF(2) */ ++ v0 = vec_xor(v0, v1); ++ /* ++ * Get the result into r3. We need to shift it left 8 bytes: ++ * V0 [ 0 1 2 X ] ++ * V0 [ 0 X 2 3 ] ++ */ ++ result = __builtin_unpack_vector_1(v0); ++#else ++ ++ /* ++ * The reflected version of Barrett reduction. Instead of bit ++ * reflecting our data (which is expensive to do), we bit reflect our ++ * constants and our algorithm, which means the intermediate data in ++ * our vector registers goes from 0-63 instead of 63-0. We can reflect ++ * the algorithm because we don't carry in mod 2 arithmetic. ++ */ ++ ++ /* bottom 32 bits of a */ ++ v1 = vec_and(v0, vmask_32bit); ++ ++ /* ma */ ++ v1 = __builtin_crypto_vpmsumd((__vector unsigned long long)v1, ++ (__vector unsigned long long)vconst1); ++ ++ /* bottom 32bits of ma */ ++ v1 = vec_and(v1, vmask_32bit); ++ /* qn */ ++ v1 = __builtin_crypto_vpmsumd((__vector unsigned long long)v1, ++ (__vector unsigned long long)vconst2); ++ /* a - qn, subtraction is xor in GF(2) */ ++ v0 = vec_xor(v0, v1); ++ ++ /* ++ * Since we are bit reflected, the result (ie the low 32 bits) is in ++ * the high 32 bits. We just need to shift it left 4 bytes ++ * V0 [ 0 1 X 3 ] ++ * V0 [ 0 X 2 3 ] ++ */ ++ ++ /* shift result into top 64 bits of */ ++ v0 = (__vector unsigned long long)vec_sld((__vector unsigned char)v0, ++ (__vector unsigned char)vzero, 4); ++ ++ result = __builtin_unpack_vector_0(v0); ++#endif ++ ++ return result; ++} +diff --git a/util/crc32c_ppc.h b/util/crc32c_ppc.h +deleted file mode 100644 +index c359061c61..0000000000 +--- a/util/crc32c_ppc.h ++++ /dev/null +@@ -1,19 +0,0 @@ +-// Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. +-// Copyright (c) 2017 International Business Machines Corp. +-// All rights reserved. +-// This source code is licensed under both the GPLv2 (found in the +-// COPYING file in the root directory) and Apache 2.0 License +-// (found in the LICENSE.Apache file in the root directory). +- +-#pragma once +- +-#ifdef __cplusplus +-extern "C" { +-#endif +- +-extern uint32_t crc32c_ppc(uint32_t crc, unsigned char const *buffer, +- unsigned len); +- +-#ifdef __cplusplus +-} +-#endif +diff --git a/util/crc32c_ppc_asm.S b/util/crc32c_ppc_asm.S +deleted file mode 100644 +index a317bf96b8..0000000000 +--- a/util/crc32c_ppc_asm.S ++++ /dev/null +@@ -1,752 +0,0 @@ +-// Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. +-// Copyright (c) 2015 Anton Blanchard , IBM +-// Copyright (c) 2017 International Business Machines Corp. +-// All rights reserved. +-// This source code is licensed under both the GPLv2 (found in the +-// COPYING file in the root directory) and Apache 2.0 License +-// (found in the LICENSE.Apache file in the root directory). +- +-#include +-#include "ppc-opcode.h" +- +-#undef toc +- +-#ifndef r1 +-#define r1 1 +-#endif +- +-#ifndef r2 +-#define r2 2 +-#endif +- +- .section .rodata +-.balign 16 +- +-.byteswap_constant: +- /* byte reverse permute constant */ +- .octa 0x0F0E0D0C0B0A09080706050403020100 +- +-#define __ASSEMBLY__ +-#include "crc32c_ppc_constants.h" +- +- .text +- +-#if defined(__BIG_ENDIAN__) && defined(REFLECT) +-#define BYTESWAP_DATA +-#elif defined(__LITTLE_ENDIAN__) && !defined(REFLECT) +-#define BYTESWAP_DATA +-#else +-#undef BYTESWAP_DATA +-#endif +- +-#define off16 r25 +-#define off32 r26 +-#define off48 r27 +-#define off64 r28 +-#define off80 r29 +-#define off96 r30 +-#define off112 r31 +- +-#define const1 v24 +-#define const2 v25 +- +-#define byteswap v26 +-#define mask_32bit v27 +-#define mask_64bit v28 +-#define zeroes v29 +- +-#ifdef BYTESWAP_DATA +-#define VPERM(A, B, C, D) vperm A, B, C, D +-#else +-#define VPERM(A, B, C, D) +-#endif +- +-/* unsigned int __crc32_vpmsum(unsigned int crc, void *p, unsigned long len) */ +-FUNC_START(__crc32_vpmsum) +- std r31,-8(r1) +- std r30,-16(r1) +- std r29,-24(r1) +- std r28,-32(r1) +- std r27,-40(r1) +- std r26,-48(r1) +- std r25,-56(r1) +- +- li off16,16 +- li off32,32 +- li off48,48 +- li off64,64 +- li off80,80 +- li off96,96 +- li off112,112 +- li r0,0 +- +- /* Enough room for saving 10 non volatile VMX registers */ +- subi r6,r1,56+10*16 +- subi r7,r1,56+2*16 +- +- stvx v20,0,r6 +- stvx v21,off16,r6 +- stvx v22,off32,r6 +- stvx v23,off48,r6 +- stvx v24,off64,r6 +- stvx v25,off80,r6 +- stvx v26,off96,r6 +- stvx v27,off112,r6 +- stvx v28,0,r7 +- stvx v29,off16,r7 +- +- mr r10,r3 +- +- vxor zeroes,zeroes,zeroes +- vspltisw v0,-1 +- +- vsldoi mask_32bit,zeroes,v0,4 +- vsldoi mask_64bit,zeroes,v0,8 +- +- /* Get the initial value into v8 */ +- vxor v8,v8,v8 +- MTVRD(v8, r3) +-#ifdef REFLECT +- vsldoi v8,zeroes,v8,8 /* shift into bottom 32 bits */ +-#else +- vsldoi v8,v8,zeroes,4 /* shift into top 32 bits */ +-#endif +- +-#ifdef BYTESWAP_DATA +- addis r3,r2,.byteswap_constant@toc@ha +- addi r3,r3,.byteswap_constant@toc@l +- +- lvx byteswap,0,r3 +- addi r3,r3,16 +-#endif +- +- cmpdi r5,256 +- blt .Lshort +- +- rldicr r6,r5,0,56 +- +- /* Checksum in blocks of MAX_SIZE */ +-1: lis r7,MAX_SIZE@h +- ori r7,r7,MAX_SIZE@l +- mr r9,r7 +- cmpd r6,r7 +- bgt 2f +- mr r7,r6 +-2: subf r6,r7,r6 +- +- /* our main loop does 128 bytes at a time */ +- srdi r7,r7,7 +- +- /* +- * Work out the offset into the constants table to start at. Each +- * constant is 16 bytes, and it is used against 128 bytes of input +- * data - 128 / 16 = 8 +- */ +- sldi r8,r7,4 +- srdi r9,r9,3 +- subf r8,r8,r9 +- +- /* We reduce our final 128 bytes in a separate step */ +- addi r7,r7,-1 +- mtctr r7 +- +- addis r3,r2,.constants@toc@ha +- addi r3,r3,.constants@toc@l +- +- /* Find the start of our constants */ +- add r3,r3,r8 +- +- /* zero v0-v7 which will contain our checksums */ +- vxor v0,v0,v0 +- vxor v1,v1,v1 +- vxor v2,v2,v2 +- vxor v3,v3,v3 +- vxor v4,v4,v4 +- vxor v5,v5,v5 +- vxor v6,v6,v6 +- vxor v7,v7,v7 +- +- lvx const1,0,r3 +- +- /* +- * If we are looping back to consume more data we use the values +- * already in v16-v23. +- */ +- cmpdi r0,1 +- beq 2f +- +- /* First warm up pass */ +- lvx v16,0,r4 +- lvx v17,off16,r4 +- VPERM(v16,v16,v16,byteswap) +- VPERM(v17,v17,v17,byteswap) +- lvx v18,off32,r4 +- lvx v19,off48,r4 +- VPERM(v18,v18,v18,byteswap) +- VPERM(v19,v19,v19,byteswap) +- lvx v20,off64,r4 +- lvx v21,off80,r4 +- VPERM(v20,v20,v20,byteswap) +- VPERM(v21,v21,v21,byteswap) +- lvx v22,off96,r4 +- lvx v23,off112,r4 +- VPERM(v22,v22,v22,byteswap) +- VPERM(v23,v23,v23,byteswap) +- addi r4,r4,8*16 +- +- /* xor in initial value */ +- vxor v16,v16,v8 +- +-2: bdz .Lfirst_warm_up_done +- +- addi r3,r3,16 +- lvx const2,0,r3 +- +- /* Second warm up pass */ +- VPMSUMD(v8,v16,const1) +- lvx v16,0,r4 +- VPERM(v16,v16,v16,byteswap) +- ori r2,r2,0 +- +- VPMSUMD(v9,v17,const1) +- lvx v17,off16,r4 +- VPERM(v17,v17,v17,byteswap) +- ori r2,r2,0 +- +- VPMSUMD(v10,v18,const1) +- lvx v18,off32,r4 +- VPERM(v18,v18,v18,byteswap) +- ori r2,r2,0 +- +- VPMSUMD(v11,v19,const1) +- lvx v19,off48,r4 +- VPERM(v19,v19,v19,byteswap) +- ori r2,r2,0 +- +- VPMSUMD(v12,v20,const1) +- lvx v20,off64,r4 +- VPERM(v20,v20,v20,byteswap) +- ori r2,r2,0 +- +- VPMSUMD(v13,v21,const1) +- lvx v21,off80,r4 +- VPERM(v21,v21,v21,byteswap) +- ori r2,r2,0 +- +- VPMSUMD(v14,v22,const1) +- lvx v22,off96,r4 +- VPERM(v22,v22,v22,byteswap) +- ori r2,r2,0 +- +- VPMSUMD(v15,v23,const1) +- lvx v23,off112,r4 +- VPERM(v23,v23,v23,byteswap) +- +- addi r4,r4,8*16 +- +- bdz .Lfirst_cool_down +- +- /* +- * main loop. We modulo schedule it such that it takes three iterations +- * to complete - first iteration load, second iteration vpmsum, third +- * iteration xor. +- */ +- .balign 16 +-4: lvx const1,0,r3 +- addi r3,r3,16 +- ori r2,r2,0 +- +- vxor v0,v0,v8 +- VPMSUMD(v8,v16,const2) +- lvx v16,0,r4 +- VPERM(v16,v16,v16,byteswap) +- ori r2,r2,0 +- +- vxor v1,v1,v9 +- VPMSUMD(v9,v17,const2) +- lvx v17,off16,r4 +- VPERM(v17,v17,v17,byteswap) +- ori r2,r2,0 +- +- vxor v2,v2,v10 +- VPMSUMD(v10,v18,const2) +- lvx v18,off32,r4 +- VPERM(v18,v18,v18,byteswap) +- ori r2,r2,0 +- +- vxor v3,v3,v11 +- VPMSUMD(v11,v19,const2) +- lvx v19,off48,r4 +- VPERM(v19,v19,v19,byteswap) +- lvx const2,0,r3 +- ori r2,r2,0 +- +- vxor v4,v4,v12 +- VPMSUMD(v12,v20,const1) +- lvx v20,off64,r4 +- VPERM(v20,v20,v20,byteswap) +- ori r2,r2,0 +- +- vxor v5,v5,v13 +- VPMSUMD(v13,v21,const1) +- lvx v21,off80,r4 +- VPERM(v21,v21,v21,byteswap) +- ori r2,r2,0 +- +- vxor v6,v6,v14 +- VPMSUMD(v14,v22,const1) +- lvx v22,off96,r4 +- VPERM(v22,v22,v22,byteswap) +- ori r2,r2,0 +- +- vxor v7,v7,v15 +- VPMSUMD(v15,v23,const1) +- lvx v23,off112,r4 +- VPERM(v23,v23,v23,byteswap) +- +- addi r4,r4,8*16 +- +- bdnz 4b +- +-.Lfirst_cool_down: +- /* First cool down pass */ +- lvx const1,0,r3 +- addi r3,r3,16 +- +- vxor v0,v0,v8 +- VPMSUMD(v8,v16,const1) +- ori r2,r2,0 +- +- vxor v1,v1,v9 +- VPMSUMD(v9,v17,const1) +- ori r2,r2,0 +- +- vxor v2,v2,v10 +- VPMSUMD(v10,v18,const1) +- ori r2,r2,0 +- +- vxor v3,v3,v11 +- VPMSUMD(v11,v19,const1) +- ori r2,r2,0 +- +- vxor v4,v4,v12 +- VPMSUMD(v12,v20,const1) +- ori r2,r2,0 +- +- vxor v5,v5,v13 +- VPMSUMD(v13,v21,const1) +- ori r2,r2,0 +- +- vxor v6,v6,v14 +- VPMSUMD(v14,v22,const1) +- ori r2,r2,0 +- +- vxor v7,v7,v15 +- VPMSUMD(v15,v23,const1) +- ori r2,r2,0 +- +-.Lsecond_cool_down: +- /* Second cool down pass */ +- vxor v0,v0,v8 +- vxor v1,v1,v9 +- vxor v2,v2,v10 +- vxor v3,v3,v11 +- vxor v4,v4,v12 +- vxor v5,v5,v13 +- vxor v6,v6,v14 +- vxor v7,v7,v15 +- +-#ifdef REFLECT +- /* +- * vpmsumd produces a 96 bit result in the least significant bits +- * of the register. Since we are bit reflected we have to shift it +- * left 32 bits so it occupies the least significant bits in the +- * bit reflected domain. +- */ +- vsldoi v0,v0,zeroes,4 +- vsldoi v1,v1,zeroes,4 +- vsldoi v2,v2,zeroes,4 +- vsldoi v3,v3,zeroes,4 +- vsldoi v4,v4,zeroes,4 +- vsldoi v5,v5,zeroes,4 +- vsldoi v6,v6,zeroes,4 +- vsldoi v7,v7,zeroes,4 +-#endif +- +- /* xor with last 1024 bits */ +- lvx v8,0,r4 +- lvx v9,off16,r4 +- VPERM(v8,v8,v8,byteswap) +- VPERM(v9,v9,v9,byteswap) +- lvx v10,off32,r4 +- lvx v11,off48,r4 +- VPERM(v10,v10,v10,byteswap) +- VPERM(v11,v11,v11,byteswap) +- lvx v12,off64,r4 +- lvx v13,off80,r4 +- VPERM(v12,v12,v12,byteswap) +- VPERM(v13,v13,v13,byteswap) +- lvx v14,off96,r4 +- lvx v15,off112,r4 +- VPERM(v14,v14,v14,byteswap) +- VPERM(v15,v15,v15,byteswap) +- +- addi r4,r4,8*16 +- +- vxor v16,v0,v8 +- vxor v17,v1,v9 +- vxor v18,v2,v10 +- vxor v19,v3,v11 +- vxor v20,v4,v12 +- vxor v21,v5,v13 +- vxor v22,v6,v14 +- vxor v23,v7,v15 +- +- li r0,1 +- cmpdi r6,0 +- addi r6,r6,128 +- bne 1b +- +- /* Work out how many bytes we have left */ +- andi. r5,r5,127 +- +- /* Calculate where in the constant table we need to start */ +- subfic r6,r5,128 +- add r3,r3,r6 +- +- /* How many 16 byte chunks are in the tail */ +- srdi r7,r5,4 +- mtctr r7 +- +- /* +- * Reduce the previously calculated 1024 bits to 64 bits, shifting +- * 32 bits to include the trailing 32 bits of zeros +- */ +- lvx v0,0,r3 +- lvx v1,off16,r3 +- lvx v2,off32,r3 +- lvx v3,off48,r3 +- lvx v4,off64,r3 +- lvx v5,off80,r3 +- lvx v6,off96,r3 +- lvx v7,off112,r3 +- addi r3,r3,8*16 +- +- VPMSUMW(v0,v16,v0) +- VPMSUMW(v1,v17,v1) +- VPMSUMW(v2,v18,v2) +- VPMSUMW(v3,v19,v3) +- VPMSUMW(v4,v20,v4) +- VPMSUMW(v5,v21,v5) +- VPMSUMW(v6,v22,v6) +- VPMSUMW(v7,v23,v7) +- +- /* Now reduce the tail (0 - 112 bytes) */ +- cmpdi r7,0 +- beq 1f +- +- lvx v16,0,r4 +- lvx v17,0,r3 +- VPERM(v16,v16,v16,byteswap) +- VPMSUMW(v16,v16,v17) +- vxor v0,v0,v16 +- bdz 1f +- +- lvx v16,off16,r4 +- lvx v17,off16,r3 +- VPERM(v16,v16,v16,byteswap) +- VPMSUMW(v16,v16,v17) +- vxor v0,v0,v16 +- bdz 1f +- +- lvx v16,off32,r4 +- lvx v17,off32,r3 +- VPERM(v16,v16,v16,byteswap) +- VPMSUMW(v16,v16,v17) +- vxor v0,v0,v16 +- bdz 1f +- +- lvx v16,off48,r4 +- lvx v17,off48,r3 +- VPERM(v16,v16,v16,byteswap) +- VPMSUMW(v16,v16,v17) +- vxor v0,v0,v16 +- bdz 1f +- +- lvx v16,off64,r4 +- lvx v17,off64,r3 +- VPERM(v16,v16,v16,byteswap) +- VPMSUMW(v16,v16,v17) +- vxor v0,v0,v16 +- bdz 1f +- +- lvx v16,off80,r4 +- lvx v17,off80,r3 +- VPERM(v16,v16,v16,byteswap) +- VPMSUMW(v16,v16,v17) +- vxor v0,v0,v16 +- bdz 1f +- +- lvx v16,off96,r4 +- lvx v17,off96,r3 +- VPERM(v16,v16,v16,byteswap) +- VPMSUMW(v16,v16,v17) +- vxor v0,v0,v16 +- +- /* Now xor all the parallel chunks together */ +-1: vxor v0,v0,v1 +- vxor v2,v2,v3 +- vxor v4,v4,v5 +- vxor v6,v6,v7 +- +- vxor v0,v0,v2 +- vxor v4,v4,v6 +- +- vxor v0,v0,v4 +- +-.Lbarrett_reduction: +- /* Barrett constants */ +- addis r3,r2,.barrett_constants@toc@ha +- addi r3,r3,.barrett_constants@toc@l +- +- lvx const1,0,r3 +- lvx const2,off16,r3 +- +- vsldoi v1,v0,v0,8 +- vxor v0,v0,v1 /* xor two 64 bit results together */ +- +-#ifdef REFLECT +- /* shift left one bit */ +- vspltisb v1,1 +- vsl v0,v0,v1 +-#endif +- +- vand v0,v0,mask_64bit +- +-#ifndef REFLECT +- /* +- * Now for the Barrett reduction algorithm. The idea is to calculate q, +- * the multiple of our polynomial that we need to subtract. By +- * doing the computation 2x bits higher (ie 64 bits) and shifting the +- * result back down 2x bits, we round down to the nearest multiple. +- */ +- VPMSUMD(v1,v0,const1) /* ma */ +- vsldoi v1,zeroes,v1,8 /* q = floor(ma/(2^64)) */ +- VPMSUMD(v1,v1,const2) /* qn */ +- vxor v0,v0,v1 /* a - qn, subtraction is xor in GF(2) */ +- +- /* +- * Get the result into r3. We need to shift it left 8 bytes: +- * V0 [ 0 1 2 X ] +- * V0 [ 0 X 2 3 ] +- */ +- vsldoi v0,v0,zeroes,8 /* shift result into top 64 bits */ +-#else +- /* +- * The reflected version of Barrett reduction. Instead of bit +- * reflecting our data (which is expensive to do), we bit reflect our +- * constants and our algorithm, which means the intermediate data in +- * our vector registers goes from 0-63 instead of 63-0. We can reflect +- * the algorithm because we don't carry in mod 2 arithmetic. +- */ +- vand v1,v0,mask_32bit /* bottom 32 bits of a */ +- VPMSUMD(v1,v1,const1) /* ma */ +- vand v1,v1,mask_32bit /* bottom 32bits of ma */ +- VPMSUMD(v1,v1,const2) /* qn */ +- vxor v0,v0,v1 /* a - qn, subtraction is xor in GF(2) */ +- +- /* +- * Since we are bit reflected, the result (ie the low 32 bits) is in +- * the high 32 bits. We just need to shift it left 4 bytes +- * V0 [ 0 1 X 3 ] +- * V0 [ 0 X 2 3 ] +- */ +- vsldoi v0,v0,zeroes,4 /* shift result into top 64 bits of */ +-#endif +- +- /* Get it into r3 */ +- MFVRD(r3, v0) +- +-.Lout: +- subi r6,r1,56+10*16 +- subi r7,r1,56+2*16 +- +- lvx v20,0,r6 +- lvx v21,off16,r6 +- lvx v22,off32,r6 +- lvx v23,off48,r6 +- lvx v24,off64,r6 +- lvx v25,off80,r6 +- lvx v26,off96,r6 +- lvx v27,off112,r6 +- lvx v28,0,r7 +- lvx v29,off16,r7 +- +- ld r31,-8(r1) +- ld r30,-16(r1) +- ld r29,-24(r1) +- ld r28,-32(r1) +- ld r27,-40(r1) +- ld r26,-48(r1) +- ld r25,-56(r1) +- +- blr +- +-.Lfirst_warm_up_done: +- lvx const1,0,r3 +- addi r3,r3,16 +- +- VPMSUMD(v8,v16,const1) +- VPMSUMD(v9,v17,const1) +- VPMSUMD(v10,v18,const1) +- VPMSUMD(v11,v19,const1) +- VPMSUMD(v12,v20,const1) +- VPMSUMD(v13,v21,const1) +- VPMSUMD(v14,v22,const1) +- VPMSUMD(v15,v23,const1) +- +- b .Lsecond_cool_down +- +-.Lshort: +- cmpdi r5,0 +- beq .Lzero +- +- addis r3,r2,.short_constants@toc@ha +- addi r3,r3,.short_constants@toc@l +- +- /* Calculate where in the constant table we need to start */ +- subfic r6,r5,256 +- add r3,r3,r6 +- +- /* How many 16 byte chunks? */ +- srdi r7,r5,4 +- mtctr r7 +- +- vxor v19,v19,v19 +- vxor v20,v20,v20 +- +- lvx v0,0,r4 +- lvx v16,0,r3 +- VPERM(v0,v0,v16,byteswap) +- vxor v0,v0,v8 /* xor in initial value */ +- VPMSUMW(v0,v0,v16) +- bdz .Lv0 +- +- lvx v1,off16,r4 +- lvx v17,off16,r3 +- VPERM(v1,v1,v17,byteswap) +- VPMSUMW(v1,v1,v17) +- bdz .Lv1 +- +- lvx v2,off32,r4 +- lvx v16,off32,r3 +- VPERM(v2,v2,v16,byteswap) +- VPMSUMW(v2,v2,v16) +- bdz .Lv2 +- +- lvx v3,off48,r4 +- lvx v17,off48,r3 +- VPERM(v3,v3,v17,byteswap) +- VPMSUMW(v3,v3,v17) +- bdz .Lv3 +- +- lvx v4,off64,r4 +- lvx v16,off64,r3 +- VPERM(v4,v4,v16,byteswap) +- VPMSUMW(v4,v4,v16) +- bdz .Lv4 +- +- lvx v5,off80,r4 +- lvx v17,off80,r3 +- VPERM(v5,v5,v17,byteswap) +- VPMSUMW(v5,v5,v17) +- bdz .Lv5 +- +- lvx v6,off96,r4 +- lvx v16,off96,r3 +- VPERM(v6,v6,v16,byteswap) +- VPMSUMW(v6,v6,v16) +- bdz .Lv6 +- +- lvx v7,off112,r4 +- lvx v17,off112,r3 +- VPERM(v7,v7,v17,byteswap) +- VPMSUMW(v7,v7,v17) +- bdz .Lv7 +- +- addi r3,r3,128 +- addi r4,r4,128 +- +- lvx v8,0,r4 +- lvx v16,0,r3 +- VPERM(v8,v8,v16,byteswap) +- VPMSUMW(v8,v8,v16) +- bdz .Lv8 +- +- lvx v9,off16,r4 +- lvx v17,off16,r3 +- VPERM(v9,v9,v17,byteswap) +- VPMSUMW(v9,v9,v17) +- bdz .Lv9 +- +- lvx v10,off32,r4 +- lvx v16,off32,r3 +- VPERM(v10,v10,v16,byteswap) +- VPMSUMW(v10,v10,v16) +- bdz .Lv10 +- +- lvx v11,off48,r4 +- lvx v17,off48,r3 +- VPERM(v11,v11,v17,byteswap) +- VPMSUMW(v11,v11,v17) +- bdz .Lv11 +- +- lvx v12,off64,r4 +- lvx v16,off64,r3 +- VPERM(v12,v12,v16,byteswap) +- VPMSUMW(v12,v12,v16) +- bdz .Lv12 +- +- lvx v13,off80,r4 +- lvx v17,off80,r3 +- VPERM(v13,v13,v17,byteswap) +- VPMSUMW(v13,v13,v17) +- bdz .Lv13 +- +- lvx v14,off96,r4 +- lvx v16,off96,r3 +- VPERM(v14,v14,v16,byteswap) +- VPMSUMW(v14,v14,v16) +- bdz .Lv14 +- +- lvx v15,off112,r4 +- lvx v17,off112,r3 +- VPERM(v15,v15,v17,byteswap) +- VPMSUMW(v15,v15,v17) +- +-.Lv15: vxor v19,v19,v15 +-.Lv14: vxor v20,v20,v14 +-.Lv13: vxor v19,v19,v13 +-.Lv12: vxor v20,v20,v12 +-.Lv11: vxor v19,v19,v11 +-.Lv10: vxor v20,v20,v10 +-.Lv9: vxor v19,v19,v9 +-.Lv8: vxor v20,v20,v8 +-.Lv7: vxor v19,v19,v7 +-.Lv6: vxor v20,v20,v6 +-.Lv5: vxor v19,v19,v5 +-.Lv4: vxor v20,v20,v4 +-.Lv3: vxor v19,v19,v3 +-.Lv2: vxor v20,v20,v2 +-.Lv1: vxor v19,v19,v1 +-.Lv0: vxor v20,v20,v0 +- +- vxor v0,v19,v20 +- +- b .Lbarrett_reduction +- +-.Lzero: +- mr r3,r10 +- b .Lout +- +-FUNC_END(__crc32_vpmsum) +diff --git a/util/crc32c_ppc_clang_workaround.h b/util/crc32c_ppc_clang_workaround.h +new file mode 100644 +index 0000000000..110cb31782 +--- /dev/null ++++ b/util/crc32c_ppc_clang_workaround.h +@@ -0,0 +1,85 @@ ++// Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. ++// Copyright (C) 2015, 2017 International Business Machines Corp. ++// All rights reserved. ++// This source code is licensed under both the GPLv2 (found in the ++// COPYING file in the root directory) and Apache 2.0 License ++// (found in the LICENSE.Apache file in the root directory). ++#ifndef CLANG_WORKAROUND_H ++#define CLANG_WORKAROUND_H ++ ++/* ++ * These stubs fix clang incompatibilities with GCC builtins. ++ */ ++ ++#ifndef __builtin_crypto_vpmsumw ++#define __builtin_crypto_vpmsumw __builtin_crypto_vpmsumb ++#endif ++#ifndef __builtin_crypto_vpmsumd ++#define __builtin_crypto_vpmsumd __builtin_crypto_vpmsumb ++#endif ++ ++static inline __vector unsigned long long __attribute__((overloadable)) ++vec_ld(int __a, const __vector unsigned long long* __b) { ++ return (__vector unsigned long long)__builtin_altivec_lvx(__a, __b); ++} ++ ++/* ++ * GCC __builtin_pack_vector_int128 returns a vector __int128_t but Clang ++ * does not recognize this type. On GCC this builtin is translated to a ++ * xxpermdi instruction that only moves the registers __a, __b instead generates ++ * a load. ++ * ++ * Clang has vec_xxpermdi intrinsics. It was implemented in 4.0.0. ++ */ ++static inline __vector unsigned long long __builtin_pack_vector( ++ unsigned long __a, unsigned long __b) { ++#if defined(__BIG_ENDIAN__) ++ __vector unsigned long long __v = {__a, __b}; ++#else ++ __vector unsigned long long __v = {__b, __a}; ++#endif ++ return __v; ++} ++ ++/* ++ * Clang 7 changed the behavior of vec_xxpermdi in order to provide the same ++ * behavior of GCC. That means code adapted to Clang >= 7 does not work on ++ * Clang <= 6. So, fallback to __builtin_unpack_vector() on Clang <= 6. ++ */ ++#if !defined vec_xxpermdi || __clang_major__ <= 6 ++ ++static inline unsigned long __builtin_unpack_vector( ++ __vector unsigned long long __v, int __o) { ++ return __v[__o]; ++} ++ ++#if defined(__BIG_ENDIAN__) ++#define __builtin_unpack_vector_0(a) __builtin_unpack_vector((a), 0) ++#define __builtin_unpack_vector_1(a) __builtin_unpack_vector((a), 1) ++#else ++#define __builtin_unpack_vector_0(a) __builtin_unpack_vector((a), 1) ++#define __builtin_unpack_vector_1(a) __builtin_unpack_vector((a), 0) ++#endif ++ ++#else ++ ++static inline unsigned long __builtin_unpack_vector_0( ++ __vector unsigned long long __v) { ++#if defined(__BIG_ENDIAN__) ++ return vec_xxpermdi(__v, __v, 0x0)[0]; ++#else ++ return vec_xxpermdi(__v, __v, 0x3)[0]; ++#endif ++} ++ ++static inline unsigned long __builtin_unpack_vector_1( ++ __vector unsigned long long __v) { ++#if defined(__BIG_ENDIAN__) ++ return vec_xxpermdi(__v, __v, 0x3)[0]; ++#else ++ return vec_xxpermdi(__v, __v, 0x0)[0]; ++#endif ++} ++#endif /* vec_xxpermdi */ ++ ++#endif +diff --git a/util/crc32c_ppc_constants.h b/util/crc32c_ppc_constants.h +index f6494cd01c..14df7ccda5 100644 +--- a/util/crc32c_ppc_constants.h ++++ b/util/crc32c_ppc_constants.h +@@ -5,13 +5,21 @@ + // COPYING file in the root directory) and Apache 2.0 License + // (found in the LICENSE.Apache file in the root directory). + +-#pragma once ++/* ++* ++* THIS FILE IS GENERATED WITH ++./crc32_constants -r -x 0x1edc6f41 ++ ++* This is from https://github.com/antonblanchard/crc32-vpmsum/ ++* DO NOT MODIFY IT MANUALLY! ++* ++*/ + + #define CRC 0x1edc6f41 +-#define REFLECT + #define CRC_XOR ++#define REFLECT ++#define MAX_SIZE 32768 + +-#ifndef __ASSEMBLY__ + #ifdef CRC_TABLE + static const unsigned int crc_table[] = { + 0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4, 0xc79a971f, 0x35f1141c, +@@ -59,842 +67,1125 @@ static const unsigned int crc_table[] = { + 0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351, + }; + +-#endif ++#endif /* CRC_TABLE */ ++#ifdef POWER8_INTRINSICS + +-#else +-#define MAX_SIZE 32768 +-.constants : ++/* Constants */ + +- /* Reduce 262144 kbits to 1024 bits */ ++/* Reduce 262144 kbits to 1024 bits */ ++static const __vector unsigned long long vcrc_const[255] ++ __attribute__((aligned(16))) = { ++#ifdef __LITTLE_ENDIAN__ + /* x^261120 mod p(x)` << 1, x^261184 mod p(x)` << 1 */ +- .octa 0x00000000b6ca9e20000000009c37c408 +- ++ {0x000000009c37c408, 0x00000000b6ca9e20}, + /* x^260096 mod p(x)` << 1, x^260160 mod p(x)` << 1 */ +- .octa 0x00000000350249a800000001b51df26c +- ++ {0x00000001b51df26c, 0x00000000350249a8}, + /* x^259072 mod p(x)` << 1, x^259136 mod p(x)` << 1 */ +- .octa 0x00000001862dac54000000000724b9d0 +- ++ {0x000000000724b9d0, 0x00000001862dac54}, + /* x^258048 mod p(x)` << 1, x^258112 mod p(x)` << 1 */ +- .octa 0x00000001d87fb48c00000001c00532fe +- ++ {0x00000001c00532fe, 0x00000001d87fb48c}, + /* x^257024 mod p(x)` << 1, x^257088 mod p(x)` << 1 */ +- .octa 0x00000001f39b699e00000000f05a9362 +- ++ {0x00000000f05a9362, 0x00000001f39b699e}, + /* x^256000 mod p(x)` << 1, x^256064 mod p(x)` << 1 */ +- .octa 0x0000000101da11b400000001e1007970 +- ++ {0x00000001e1007970, 0x0000000101da11b4}, + /* x^254976 mod p(x)` << 1, x^255040 mod p(x)` << 1 */ +- .octa 0x00000001cab571e000000000a57366ee +- ++ {0x00000000a57366ee, 0x00000001cab571e0}, + /* x^253952 mod p(x)` << 1, x^254016 mod p(x)` << 1 */ +- .octa 0x00000000c7020cfe0000000192011284 +- ++ {0x0000000192011284, 0x00000000c7020cfe}, + /* x^252928 mod p(x)` << 1, x^252992 mod p(x)` << 1 */ +- .octa 0x00000000cdaed1ae0000000162716d9a +- ++ {0x0000000162716d9a, 0x00000000cdaed1ae}, + /* x^251904 mod p(x)` << 1, x^251968 mod p(x)` << 1 */ +- .octa 0x00000001e804effc00000000cd97ecde +- ++ {0x00000000cd97ecde, 0x00000001e804effc}, + /* x^250880 mod p(x)` << 1, x^250944 mod p(x)` << 1 */ +- .octa 0x0000000077c3ea3a0000000058812bc0 +- ++ {0x0000000058812bc0, 0x0000000077c3ea3a}, + /* x^249856 mod p(x)` << 1, x^249920 mod p(x)` << 1 */ +- .octa 0x0000000068df31b40000000088b8c12e +- ++ {0x0000000088b8c12e, 0x0000000068df31b4}, + /* x^248832 mod p(x)` << 1, x^248896 mod p(x)` << 1 */ +- .octa 0x00000000b059b6c200000001230b234c +- ++ {0x00000001230b234c, 0x00000000b059b6c2}, + /* x^247808 mod p(x)` << 1, x^247872 mod p(x)` << 1 */ +- .octa 0x0000000145fb8ed800000001120b416e +- ++ {0x00000001120b416e, 0x0000000145fb8ed8}, + /* x^246784 mod p(x)` << 1, x^246848 mod p(x)` << 1 */ +- .octa 0x00000000cbc0916800000001974aecb0 +- ++ {0x00000001974aecb0, 0x00000000cbc09168}, + /* x^245760 mod p(x)` << 1, x^245824 mod p(x)` << 1 */ +- .octa 0x000000005ceeedc2000000008ee3f226 +- ++ {0x000000008ee3f226, 0x000000005ceeedc2}, + /* x^244736 mod p(x)` << 1, x^244800 mod p(x)` << 1 */ +- .octa 0x0000000047d74e8600000001089aba9a +- ++ {0x00000001089aba9a, 0x0000000047d74e86}, + /* x^243712 mod p(x)` << 1, x^243776 mod p(x)` << 1 */ +- .octa 0x00000001407e9e220000000065113872 +- ++ {0x0000000065113872, 0x00000001407e9e22}, + /* x^242688 mod p(x)` << 1, x^242752 mod p(x)` << 1 */ +- .octa 0x00000001da967bda000000005c07ec10 +- ++ {0x000000005c07ec10, 0x00000001da967bda}, + /* x^241664 mod p(x)` << 1, x^241728 mod p(x)` << 1 */ +- .octa 0x000000006c8983680000000187590924 +- ++ {0x0000000187590924, 0x000000006c898368}, + /* x^240640 mod p(x)` << 1, x^240704 mod p(x)` << 1 */ +- .octa 0x00000000f2d14c9800000000e35da7c6 +- ++ {0x00000000e35da7c6, 0x00000000f2d14c98}, + /* x^239616 mod p(x)` << 1, x^239680 mod p(x)` << 1 */ +- .octa 0x00000001993c6ad4000000000415855a +- ++ {0x000000000415855a, 0x00000001993c6ad4}, + /* x^238592 mod p(x)` << 1, x^238656 mod p(x)` << 1 */ +- .octa 0x000000014683d1ac0000000073617758 +- ++ {0x0000000073617758, 0x000000014683d1ac}, + /* x^237568 mod p(x)` << 1, x^237632 mod p(x)` << 1 */ +- .octa 0x00000001a7c93e6c0000000176021d28 +- ++ {0x0000000176021d28, 0x00000001a7c93e6c}, + /* x^236544 mod p(x)` << 1, x^236608 mod p(x)` << 1 */ +- .octa 0x000000010211e90a00000001c358fd0a +- ++ {0x00000001c358fd0a, 0x000000010211e90a}, + /* x^235520 mod p(x)` << 1, x^235584 mod p(x)` << 1 */ +- .octa 0x000000001119403e00000001ff7a2c18 +- ++ {0x00000001ff7a2c18, 0x000000001119403e}, + /* x^234496 mod p(x)` << 1, x^234560 mod p(x)` << 1 */ +- .octa 0x000000001c3261aa00000000f2d9f7e4 +- ++ {0x00000000f2d9f7e4, 0x000000001c3261aa}, + /* x^233472 mod p(x)` << 1, x^233536 mod p(x)` << 1 */ +- .octa 0x000000014e37a634000000016cf1f9c8 +- ++ {0x000000016cf1f9c8, 0x000000014e37a634}, + /* x^232448 mod p(x)` << 1, x^232512 mod p(x)` << 1 */ +- .octa 0x0000000073786c0c000000010af9279a +- ++ {0x000000010af9279a, 0x0000000073786c0c}, + /* x^231424 mod p(x)` << 1, x^231488 mod p(x)` << 1 */ +- .octa 0x000000011dc037f80000000004f101e8 +- ++ {0x0000000004f101e8, 0x000000011dc037f8}, + /* x^230400 mod p(x)` << 1, x^230464 mod p(x)` << 1 */ +- .octa 0x0000000031433dfc0000000070bcf184 +- ++ {0x0000000070bcf184, 0x0000000031433dfc}, + /* x^229376 mod p(x)` << 1, x^229440 mod p(x)` << 1 */ +- .octa 0x000000009cde8348000000000a8de642 +- ++ {0x000000000a8de642, 0x000000009cde8348}, + /* x^228352 mod p(x)` << 1, x^228416 mod p(x)` << 1 */ +- .octa 0x0000000038d3c2a60000000062ea130c +- ++ {0x0000000062ea130c, 0x0000000038d3c2a6}, + /* x^227328 mod p(x)` << 1, x^227392 mod p(x)` << 1 */ +- .octa 0x000000011b25f26000000001eb31cbb2 +- ++ {0x00000001eb31cbb2, 0x000000011b25f260}, + /* x^226304 mod p(x)` << 1, x^226368 mod p(x)` << 1 */ +- .octa 0x000000001629e6f00000000170783448 +- ++ {0x0000000170783448, 0x000000001629e6f0}, + /* x^225280 mod p(x)` << 1, x^225344 mod p(x)` << 1 */ +- .octa 0x0000000160838b4c00000001a684b4c6 +- ++ {0x00000001a684b4c6, 0x0000000160838b4c}, + /* x^224256 mod p(x)` << 1, x^224320 mod p(x)` << 1 */ +- .octa 0x000000007a44011c00000000253ca5b4 +- ++ {0x00000000253ca5b4, 0x000000007a44011c}, + /* x^223232 mod p(x)` << 1, x^223296 mod p(x)` << 1 */ +- .octa 0x00000000226f417a0000000057b4b1e2 +- ++ {0x0000000057b4b1e2, 0x00000000226f417a}, + /* x^222208 mod p(x)` << 1, x^222272 mod p(x)` << 1 */ +- .octa 0x0000000045eb2eb400000000b6bd084c +- ++ {0x00000000b6bd084c, 0x0000000045eb2eb4}, + /* x^221184 mod p(x)` << 1, x^221248 mod p(x)` << 1 */ +- .octa 0x000000014459d70c0000000123c2d592 +- ++ {0x0000000123c2d592, 0x000000014459d70c}, + /* x^220160 mod p(x)` << 1, x^220224 mod p(x)` << 1 */ +- .octa 0x00000001d406ed8200000000159dafce +- ++ {0x00000000159dafce, 0x00000001d406ed82}, + /* x^219136 mod p(x)` << 1, x^219200 mod p(x)` << 1 */ +- .octa 0x0000000160c8e1a80000000127e1a64e +- ++ {0x0000000127e1a64e, 0x0000000160c8e1a8}, + /* x^218112 mod p(x)` << 1, x^218176 mod p(x)` << 1 */ +- .octa 0x0000000027ba80980000000056860754 +- ++ {0x0000000056860754, 0x0000000027ba8098}, + /* x^217088 mod p(x)` << 1, x^217152 mod p(x)` << 1 */ +- .octa 0x000000006d92d01800000001e661aae8 +- ++ {0x00000001e661aae8, 0x000000006d92d018}, + /* x^216064 mod p(x)` << 1, x^216128 mod p(x)` << 1 */ +- .octa 0x000000012ed7e3f200000000f82c6166 +- ++ {0x00000000f82c6166, 0x000000012ed7e3f2}, + /* x^215040 mod p(x)` << 1, x^215104 mod p(x)` << 1 */ +- .octa 0x000000002dc8778800000000c4f9c7ae +- ++ {0x00000000c4f9c7ae, 0x000000002dc87788}, + /* x^214016 mod p(x)` << 1, x^214080 mod p(x)` << 1 */ +- .octa 0x0000000018240bb80000000074203d20 +- ++ {0x0000000074203d20, 0x0000000018240bb8}, + /* x^212992 mod p(x)` << 1, x^213056 mod p(x)` << 1 */ +- .octa 0x000000001ad381580000000198173052 +- ++ {0x0000000198173052, 0x000000001ad38158}, + /* x^211968 mod p(x)` << 1, x^212032 mod p(x)` << 1 */ +- .octa 0x00000001396b78f200000001ce8aba54 +- ++ {0x00000001ce8aba54, 0x00000001396b78f2}, + /* x^210944 mod p(x)` << 1, x^211008 mod p(x)` << 1 */ +- .octa 0x000000011a68133400000001850d5d94 +- ++ {0x00000001850d5d94, 0x000000011a681334}, + /* x^209920 mod p(x)` << 1, x^209984 mod p(x)` << 1 */ +- .octa 0x000000012104732e00000001d609239c +- ++ {0x00000001d609239c, 0x000000012104732e}, + /* x^208896 mod p(x)` << 1, x^208960 mod p(x)` << 1 */ +- .octa 0x00000000a140d90c000000001595f048 +- ++ {0x000000001595f048, 0x00000000a140d90c}, + /* x^207872 mod p(x)` << 1, x^207936 mod p(x)` << 1 */ +- .octa 0x00000001b7215eda0000000042ccee08 +- ++ {0x0000000042ccee08, 0x00000001b7215eda}, + /* x^206848 mod p(x)` << 1, x^206912 mod p(x)` << 1 */ +- .octa 0x00000001aaf1df3c000000010a389d74 +- ++ {0x000000010a389d74, 0x00000001aaf1df3c}, + /* x^205824 mod p(x)` << 1, x^205888 mod p(x)` << 1 */ +- .octa 0x0000000029d15b8a000000012a840da6 +- ++ {0x000000012a840da6, 0x0000000029d15b8a}, + /* x^204800 mod p(x)` << 1, x^204864 mod p(x)` << 1 */ +- .octa 0x00000000f1a96922000000001d181c0c +- ++ {0x000000001d181c0c, 0x00000000f1a96922}, + /* x^203776 mod p(x)` << 1, x^203840 mod p(x)` << 1 */ +- .octa 0x00000001ac80d03c0000000068b7d1f6 +- ++ {0x0000000068b7d1f6, 0x00000001ac80d03c}, + /* x^202752 mod p(x)` << 1, x^202816 mod p(x)` << 1 */ +- .octa 0x000000000f11d56a000000005b0f14fc +- ++ {0x000000005b0f14fc, 0x000000000f11d56a}, + /* x^201728 mod p(x)` << 1, x^201792 mod p(x)` << 1 */ +- .octa 0x00000001f1c022a20000000179e9e730 +- ++ {0x0000000179e9e730, 0x00000001f1c022a2}, + /* x^200704 mod p(x)` << 1, x^200768 mod p(x)` << 1 */ +- .octa 0x0000000173d00ae200000001ce1368d6 +- ++ {0x00000001ce1368d6, 0x0000000173d00ae2}, + /* x^199680 mod p(x)` << 1, x^199744 mod p(x)` << 1 */ +- .octa 0x00000001d4ffe4ac0000000112c3a84c +- ++ {0x0000000112c3a84c, 0x00000001d4ffe4ac}, + /* x^198656 mod p(x)` << 1, x^198720 mod p(x)` << 1 */ +- .octa 0x000000016edc5ae400000000de940fee +- ++ {0x00000000de940fee, 0x000000016edc5ae4}, + /* x^197632 mod p(x)` << 1, x^197696 mod p(x)` << 1 */ +- .octa 0x00000001f1a0214000000000fe896b7e +- ++ {0x00000000fe896b7e, 0x00000001f1a02140}, + /* x^196608 mod p(x)` << 1, x^196672 mod p(x)` << 1 */ +- .octa 0x00000000ca0b28a000000001f797431c +- ++ {0x00000001f797431c, 0x00000000ca0b28a0}, + /* x^195584 mod p(x)` << 1, x^195648 mod p(x)` << 1 */ +- .octa 0x00000001928e30a20000000053e989ba +- ++ {0x0000000053e989ba, 0x00000001928e30a2}, + /* x^194560 mod p(x)` << 1, x^194624 mod p(x)` << 1 */ +- .octa 0x0000000097b1b002000000003920cd16 +- ++ {0x000000003920cd16, 0x0000000097b1b002}, + /* x^193536 mod p(x)` << 1, x^193600 mod p(x)` << 1 */ +- .octa 0x00000000b15bf90600000001e6f579b8 +- ++ {0x00000001e6f579b8, 0x00000000b15bf906}, + /* x^192512 mod p(x)` << 1, x^192576 mod p(x)` << 1 */ +- .octa 0x00000000411c5d52000000007493cb0a +- ++ {0x000000007493cb0a, 0x00000000411c5d52}, + /* x^191488 mod p(x)` << 1, x^191552 mod p(x)` << 1 */ +- .octa 0x00000001c36f330000000001bdd376d8 +- ++ {0x00000001bdd376d8, 0x00000001c36f3300}, + /* x^190464 mod p(x)` << 1, x^190528 mod p(x)` << 1 */ +- .octa 0x00000001119227e0000000016badfee6 +- ++ {0x000000016badfee6, 0x00000001119227e0}, + /* x^189440 mod p(x)` << 1, x^189504 mod p(x)` << 1 */ +- .octa 0x00000000114d47020000000071de5c58 +- ++ {0x0000000071de5c58, 0x00000000114d4702}, + /* x^188416 mod p(x)` << 1, x^188480 mod p(x)` << 1 */ +- .octa 0x00000000458b5b9800000000453f317c +- ++ {0x00000000453f317c, 0x00000000458b5b98}, + /* x^187392 mod p(x)` << 1, x^187456 mod p(x)` << 1 */ +- .octa 0x000000012e31fb8e0000000121675cce +- ++ {0x0000000121675cce, 0x000000012e31fb8e}, + /* x^186368 mod p(x)` << 1, x^186432 mod p(x)` << 1 */ +- .octa 0x000000005cf619d800000001f409ee92 +- ++ {0x00000001f409ee92, 0x000000005cf619d8}, + /* x^185344 mod p(x)` << 1, x^185408 mod p(x)` << 1 */ +- .octa 0x0000000063f4d8b200000000f36b9c88 +- ++ {0x00000000f36b9c88, 0x0000000063f4d8b2}, + /* x^184320 mod p(x)` << 1, x^184384 mod p(x)` << 1 */ +- .octa 0x000000004138dc8a0000000036b398f4 +- ++ {0x0000000036b398f4, 0x000000004138dc8a}, + /* x^183296 mod p(x)` << 1, x^183360 mod p(x)` << 1 */ +- .octa 0x00000001d29ee8e000000001748f9adc +- ++ {0x00000001748f9adc, 0x00000001d29ee8e0}, + /* x^182272 mod p(x)` << 1, x^182336 mod p(x)` << 1 */ +- .octa 0x000000006a08ace800000001be94ec00 +- ++ {0x00000001be94ec00, 0x000000006a08ace8}, + /* x^181248 mod p(x)` << 1, x^181312 mod p(x)` << 1 */ +- .octa 0x0000000127d4201000000000b74370d6 +- ++ {0x00000000b74370d6, 0x0000000127d42010}, + /* x^180224 mod p(x)` << 1, x^180288 mod p(x)` << 1 */ +- .octa 0x0000000019d76b6200000001174d0b98 +- ++ {0x00000001174d0b98, 0x0000000019d76b62}, + /* x^179200 mod p(x)` << 1, x^179264 mod p(x)` << 1 */ +- .octa 0x00000001b1471f6e00000000befc06a4 +- ++ {0x00000000befc06a4, 0x00000001b1471f6e}, + /* x^178176 mod p(x)` << 1, x^178240 mod p(x)` << 1 */ +- .octa 0x00000001f64c19cc00000001ae125288 +- ++ {0x00000001ae125288, 0x00000001f64c19cc}, + /* x^177152 mod p(x)` << 1, x^177216 mod p(x)` << 1 */ +- .octa 0x00000000003c0ea00000000095c19b34 +- ++ {0x0000000095c19b34, 0x00000000003c0ea0}, + /* x^176128 mod p(x)` << 1, x^176192 mod p(x)` << 1 */ +- .octa 0x000000014d73abf600000001a78496f2 +- ++ {0x00000001a78496f2, 0x000000014d73abf6}, + /* x^175104 mod p(x)` << 1, x^175168 mod p(x)` << 1 */ +- .octa 0x00000001620eb84400000001ac5390a0 +- ++ {0x00000001ac5390a0, 0x00000001620eb844}, + /* x^174080 mod p(x)` << 1, x^174144 mod p(x)` << 1 */ +- .octa 0x0000000147655048000000002a80ed6e +- ++ {0x000000002a80ed6e, 0x0000000147655048}, + /* x^173056 mod p(x)` << 1, x^173120 mod p(x)` << 1 */ +- .octa 0x0000000067b5077e00000001fa9b0128 +- ++ {0x00000001fa9b0128, 0x0000000067b5077e}, + /* x^172032 mod p(x)` << 1, x^172096 mod p(x)` << 1 */ +- .octa 0x0000000010ffe20600000001ea94929e +- ++ {0x00000001ea94929e, 0x0000000010ffe206}, + /* x^171008 mod p(x)` << 1, x^171072 mod p(x)` << 1 */ +- .octa 0x000000000fee8f1e0000000125f4305c +- ++ {0x0000000125f4305c, 0x000000000fee8f1e}, + /* x^169984 mod p(x)` << 1, x^170048 mod p(x)` << 1 */ +- .octa 0x00000001da26fbae00000001471e2002 +- ++ {0x00000001471e2002, 0x00000001da26fbae}, + /* x^168960 mod p(x)` << 1, x^169024 mod p(x)` << 1 */ +- .octa 0x00000001b3a8bd880000000132d2253a +- ++ {0x0000000132d2253a, 0x00000001b3a8bd88}, + /* x^167936 mod p(x)` << 1, x^168000 mod p(x)` << 1 */ +- .octa 0x00000000e8f3898e00000000f26b3592 +- ++ {0x00000000f26b3592, 0x00000000e8f3898e}, + /* x^166912 mod p(x)` << 1, x^166976 mod p(x)` << 1 */ +- .octa 0x00000000b0d0d28c00000000bc8b67b0 +- ++ {0x00000000bc8b67b0, 0x00000000b0d0d28c}, + /* x^165888 mod p(x)` << 1, x^165952 mod p(x)` << 1 */ +- .octa 0x0000000030f2a798000000013a826ef2 +- ++ {0x000000013a826ef2, 0x0000000030f2a798}, + /* x^164864 mod p(x)` << 1, x^164928 mod p(x)` << 1 */ +- .octa 0x000000000fba10020000000081482c84 +- ++ {0x0000000081482c84, 0x000000000fba1002}, + /* x^163840 mod p(x)` << 1, x^163904 mod p(x)` << 1 */ +- .octa 0x00000000bdb9bd7200000000e77307c2 +- ++ {0x00000000e77307c2, 0x00000000bdb9bd72}, + /* x^162816 mod p(x)` << 1, x^162880 mod p(x)` << 1 */ +- .octa 0x0000000075d3bf5a00000000d4a07ec8 +- ++ {0x00000000d4a07ec8, 0x0000000075d3bf5a}, + /* x^161792 mod p(x)` << 1, x^161856 mod p(x)` << 1 */ +- .octa 0x00000000ef1f98a00000000017102100 +- ++ {0x0000000017102100, 0x00000000ef1f98a0}, + /* x^160768 mod p(x)` << 1, x^160832 mod p(x)` << 1 */ +- .octa 0x00000000689c760200000000db406486 +- ++ {0x00000000db406486, 0x00000000689c7602}, + /* x^159744 mod p(x)` << 1, x^159808 mod p(x)` << 1 */ +- .octa 0x000000016d5fa5fe0000000192db7f88 +- ++ {0x0000000192db7f88, 0x000000016d5fa5fe}, + /* x^158720 mod p(x)` << 1, x^158784 mod p(x)` << 1 */ +- .octa 0x00000001d0d2b9ca000000018bf67b1e +- ++ {0x000000018bf67b1e, 0x00000001d0d2b9ca}, + /* x^157696 mod p(x)` << 1, x^157760 mod p(x)` << 1 */ +- .octa 0x0000000041e7b470000000007c09163e +- ++ {0x000000007c09163e, 0x0000000041e7b470}, + /* x^156672 mod p(x)` << 1, x^156736 mod p(x)` << 1 */ +- .octa 0x00000001cbb6495e000000000adac060 +- ++ {0x000000000adac060, 0x00000001cbb6495e}, + /* x^155648 mod p(x)` << 1, x^155712 mod p(x)` << 1 */ +- .octa 0x000000010052a0b000000000bd8316ae +- ++ {0x00000000bd8316ae, 0x000000010052a0b0}, + /* x^154624 mod p(x)` << 1, x^154688 mod p(x)` << 1 */ +- .octa 0x00000001d8effb5c000000019f09ab54 +- ++ {0x000000019f09ab54, 0x00000001d8effb5c}, + /* x^153600 mod p(x)` << 1, x^153664 mod p(x)` << 1 */ +- .octa 0x00000001d969853c0000000125155542 +- ++ {0x0000000125155542, 0x00000001d969853c}, + /* x^152576 mod p(x)` << 1, x^152640 mod p(x)` << 1 */ +- .octa 0x00000000523ccce2000000018fdb5882 +- ++ {0x000000018fdb5882, 0x00000000523ccce2}, + /* x^151552 mod p(x)` << 1, x^151616 mod p(x)` << 1 */ +- .octa 0x000000001e2436bc00000000e794b3f4 +- ++ {0x00000000e794b3f4, 0x000000001e2436bc}, + /* x^150528 mod p(x)` << 1, x^150592 mod p(x)` << 1 */ +- .octa 0x00000000ddd1c3a2000000016f9bb022 +- ++ {0x000000016f9bb022, 0x00000000ddd1c3a2}, + /* x^149504 mod p(x)` << 1, x^149568 mod p(x)` << 1 */ +- .octa 0x0000000019fcfe3800000000290c9978 +- ++ {0x00000000290c9978, 0x0000000019fcfe38}, + /* x^148480 mod p(x)` << 1, x^148544 mod p(x)` << 1 */ +- .octa 0x00000001ce95db640000000083c0f350 +- ++ {0x0000000083c0f350, 0x00000001ce95db64}, + /* x^147456 mod p(x)` << 1, x^147520 mod p(x)` << 1 */ +- .octa 0x00000000af5828060000000173ea6628 +- ++ {0x0000000173ea6628, 0x00000000af582806}, + /* x^146432 mod p(x)` << 1, x^146496 mod p(x)` << 1 */ +- .octa 0x00000001006388f600000001c8b4e00a +- ++ {0x00000001c8b4e00a, 0x00000001006388f6}, + /* x^145408 mod p(x)` << 1, x^145472 mod p(x)` << 1 */ +- .octa 0x0000000179eca00a00000000de95d6aa +- ++ {0x00000000de95d6aa, 0x0000000179eca00a}, + /* x^144384 mod p(x)` << 1, x^144448 mod p(x)` << 1 */ +- .octa 0x0000000122410a6a000000010b7f7248 +- ++ {0x000000010b7f7248, 0x0000000122410a6a}, + /* x^143360 mod p(x)` << 1, x^143424 mod p(x)` << 1 */ +- .octa 0x000000004288e87c00000001326e3a06 +- ++ {0x00000001326e3a06, 0x000000004288e87c}, + /* x^142336 mod p(x)` << 1, x^142400 mod p(x)` << 1 */ +- .octa 0x000000016c5490da00000000bb62c2e6 +- ++ {0x00000000bb62c2e6, 0x000000016c5490da}, + /* x^141312 mod p(x)` << 1, x^141376 mod p(x)` << 1 */ +- .octa 0x00000000d1c71f6e0000000156a4b2c2 +- ++ {0x0000000156a4b2c2, 0x00000000d1c71f6e}, + /* x^140288 mod p(x)` << 1, x^140352 mod p(x)` << 1 */ +- .octa 0x00000001b4ce08a6000000011dfe763a +- ++ {0x000000011dfe763a, 0x00000001b4ce08a6}, + /* x^139264 mod p(x)` << 1, x^139328 mod p(x)` << 1 */ +- .octa 0x00000001466ba60c000000007bcca8e2 +- ++ {0x000000007bcca8e2, 0x00000001466ba60c}, + /* x^138240 mod p(x)` << 1, x^138304 mod p(x)` << 1 */ +- .octa 0x00000001f6c488a40000000186118faa +- ++ {0x0000000186118faa, 0x00000001f6c488a4}, + /* x^137216 mod p(x)` << 1, x^137280 mod p(x)` << 1 */ +- .octa 0x000000013bfb06820000000111a65a88 +- ++ {0x0000000111a65a88, 0x000000013bfb0682}, + /* x^136192 mod p(x)` << 1, x^136256 mod p(x)` << 1 */ +- .octa 0x00000000690e9e54000000003565e1c4 +- ++ {0x000000003565e1c4, 0x00000000690e9e54}, + /* x^135168 mod p(x)` << 1, x^135232 mod p(x)` << 1 */ +- .octa 0x00000000281346b6000000012ed02a82 +- ++ {0x000000012ed02a82, 0x00000000281346b6}, + /* x^134144 mod p(x)` << 1, x^134208 mod p(x)` << 1 */ +- .octa 0x000000015646402400000000c486ecfc +- ++ {0x00000000c486ecfc, 0x0000000156464024}, + /* x^133120 mod p(x)` << 1, x^133184 mod p(x)` << 1 */ +- .octa 0x000000016063a8dc0000000001b951b2 +- ++ {0x0000000001b951b2, 0x000000016063a8dc}, + /* x^132096 mod p(x)` << 1, x^132160 mod p(x)` << 1 */ +- .octa 0x0000000116a663620000000048143916 +- ++ {0x0000000048143916, 0x0000000116a66362}, + /* x^131072 mod p(x)` << 1, x^131136 mod p(x)` << 1 */ +- .octa 0x000000017e8aa4d200000001dc2ae124 +- ++ {0x00000001dc2ae124, 0x000000017e8aa4d2}, + /* x^130048 mod p(x)` << 1, x^130112 mod p(x)` << 1 */ +- .octa 0x00000001728eb10c00000001416c58d6 +- ++ {0x00000001416c58d6, 0x00000001728eb10c}, + /* x^129024 mod p(x)` << 1, x^129088 mod p(x)` << 1 */ +- .octa 0x00000001b08fd7fa00000000a479744a +- ++ {0x00000000a479744a, 0x00000001b08fd7fa}, + /* x^128000 mod p(x)` << 1, x^128064 mod p(x)` << 1 */ +- .octa 0x00000001092a16e80000000096ca3a26 +- ++ {0x0000000096ca3a26, 0x00000001092a16e8}, + /* x^126976 mod p(x)` << 1, x^127040 mod p(x)` << 1 */ +- .octa 0x00000000a505637c00000000ff223d4e +- ++ {0x00000000ff223d4e, 0x00000000a505637c}, + /* x^125952 mod p(x)` << 1, x^126016 mod p(x)` << 1 */ +- .octa 0x00000000d94869b2000000010e84da42 +- ++ {0x000000010e84da42, 0x00000000d94869b2}, + /* x^124928 mod p(x)` << 1, x^124992 mod p(x)` << 1 */ +- .octa 0x00000001c8b203ae00000001b61ba3d0 +- ++ {0x00000001b61ba3d0, 0x00000001c8b203ae}, + /* x^123904 mod p(x)` << 1, x^123968 mod p(x)` << 1 */ +- .octa 0x000000005704aea000000000680f2de8 +- ++ {0x00000000680f2de8, 0x000000005704aea0}, + /* x^122880 mod p(x)` << 1, x^122944 mod p(x)` << 1 */ +- .octa 0x000000012e295fa2000000008772a9a8 +- ++ {0x000000008772a9a8, 0x000000012e295fa2}, + /* x^121856 mod p(x)` << 1, x^121920 mod p(x)` << 1 */ +- .octa 0x000000011d0908bc0000000155f295bc +- ++ {0x0000000155f295bc, 0x000000011d0908bc}, + /* x^120832 mod p(x)` << 1, x^120896 mod p(x)` << 1 */ +- .octa 0x0000000193ed97ea00000000595f9282 +- ++ {0x00000000595f9282, 0x0000000193ed97ea}, + /* x^119808 mod p(x)` << 1, x^119872 mod p(x)` << 1 */ +- .octa 0x000000013a0f1c520000000164b1c25a +- ++ {0x0000000164b1c25a, 0x000000013a0f1c52}, + /* x^118784 mod p(x)` << 1, x^118848 mod p(x)` << 1 */ +- .octa 0x000000010c2c40c000000000fbd67c50 +- ++ {0x00000000fbd67c50, 0x000000010c2c40c0}, + /* x^117760 mod p(x)` << 1, x^117824 mod p(x)` << 1 */ +- .octa 0x00000000ff6fac3e0000000096076268 +- ++ {0x0000000096076268, 0x00000000ff6fac3e}, + /* x^116736 mod p(x)` << 1, x^116800 mod p(x)` << 1 */ +- .octa 0x000000017b3609c000000001d288e4cc +- ++ {0x00000001d288e4cc, 0x000000017b3609c0}, + /* x^115712 mod p(x)` << 1, x^115776 mod p(x)` << 1 */ +- .octa 0x0000000088c8c92200000001eaac1bdc +- ++ {0x00000001eaac1bdc, 0x0000000088c8c922}, + /* x^114688 mod p(x)` << 1, x^114752 mod p(x)` << 1 */ +- .octa 0x00000001751baae600000001f1ea39e2 +- ++ {0x00000001f1ea39e2, 0x00000001751baae6}, + /* x^113664 mod p(x)` << 1, x^113728 mod p(x)` << 1 */ +- .octa 0x000000010795297200000001eb6506fc +- ++ {0x00000001eb6506fc, 0x0000000107952972}, + /* x^112640 mod p(x)` << 1, x^112704 mod p(x)` << 1 */ +- .octa 0x0000000162b00abe000000010f806ffe +- ++ {0x000000010f806ffe, 0x0000000162b00abe}, + /* x^111616 mod p(x)` << 1, x^111680 mod p(x)` << 1 */ +- .octa 0x000000000d7b404c000000010408481e +- ++ {0x000000010408481e, 0x000000000d7b404c}, + /* x^110592 mod p(x)` << 1, x^110656 mod p(x)` << 1 */ +- .octa 0x00000000763b13d40000000188260534 +- ++ {0x0000000188260534, 0x00000000763b13d4}, + /* x^109568 mod p(x)` << 1, x^109632 mod p(x)` << 1 */ +- .octa 0x00000000f6dc22d80000000058fc73e0 +- ++ {0x0000000058fc73e0, 0x00000000f6dc22d8}, + /* x^108544 mod p(x)` << 1, x^108608 mod p(x)` << 1 */ +- .octa 0x000000007daae06000000000391c59b8 +- ++ {0x00000000391c59b8, 0x000000007daae060}, + /* x^107520 mod p(x)` << 1, x^107584 mod p(x)` << 1 */ +- .octa 0x000000013359ab7c000000018b638400 +- ++ {0x000000018b638400, 0x000000013359ab7c}, + /* x^106496 mod p(x)` << 1, x^106560 mod p(x)` << 1 */ +- .octa 0x000000008add438a000000011738f5c4 +- ++ {0x000000011738f5c4, 0x000000008add438a}, + /* x^105472 mod p(x)` << 1, x^105536 mod p(x)` << 1 */ +- .octa 0x00000001edbefdea000000008cf7c6da +- ++ {0x000000008cf7c6da, 0x00000001edbefdea}, + /* x^104448 mod p(x)` << 1, x^104512 mod p(x)` << 1 */ +- .octa 0x000000004104e0f800000001ef97fb16 +- ++ {0x00000001ef97fb16, 0x000000004104e0f8}, + /* x^103424 mod p(x)` << 1, x^103488 mod p(x)` << 1 */ +- .octa 0x00000000b48a82220000000102130e20 +- ++ {0x0000000102130e20, 0x00000000b48a8222}, + /* x^102400 mod p(x)` << 1, x^102464 mod p(x)` << 1 */ +- .octa 0x00000001bcb4684400000000db968898 +- ++ {0x00000000db968898, 0x00000001bcb46844}, + /* x^101376 mod p(x)` << 1, x^101440 mod p(x)` << 1 */ +- .octa 0x000000013293ce0a00000000b5047b5e +- ++ {0x00000000b5047b5e, 0x000000013293ce0a}, + /* x^100352 mod p(x)` << 1, x^100416 mod p(x)` << 1 */ +- .octa 0x00000001710d0844000000010b90fdb2 +- ++ {0x000000010b90fdb2, 0x00000001710d0844}, + /* x^99328 mod p(x)` << 1, x^99392 mod p(x)` << 1 */ +- .octa 0x0000000117907f6e000000004834a32e +- ++ {0x000000004834a32e, 0x0000000117907f6e}, + /* x^98304 mod p(x)` << 1, x^98368 mod p(x)` << 1 */ +- .octa 0x0000000087ddf93e0000000059c8f2b0 +- ++ {0x0000000059c8f2b0, 0x0000000087ddf93e}, + /* x^97280 mod p(x)` << 1, x^97344 mod p(x)` << 1 */ +- .octa 0x000000005970e9b00000000122cec508 +- ++ {0x0000000122cec508, 0x000000005970e9b0}, + /* x^96256 mod p(x)` << 1, x^96320 mod p(x)` << 1 */ +- .octa 0x0000000185b2b7d0000000000a330cda +- ++ {0x000000000a330cda, 0x0000000185b2b7d0}, + /* x^95232 mod p(x)` << 1, x^95296 mod p(x)` << 1 */ +- .octa 0x00000001dcee0efc000000014a47148c +- ++ {0x000000014a47148c, 0x00000001dcee0efc}, + /* x^94208 mod p(x)` << 1, x^94272 mod p(x)` << 1 */ +- .octa 0x0000000030da27220000000042c61cb8 +- ++ {0x0000000042c61cb8, 0x0000000030da2722}, + /* x^93184 mod p(x)` << 1, x^93248 mod p(x)` << 1 */ +- .octa 0x000000012f925a180000000012fe6960 +- ++ {0x0000000012fe6960, 0x000000012f925a18}, + /* x^92160 mod p(x)` << 1, x^92224 mod p(x)` << 1 */ +- .octa 0x00000000dd2e357c00000000dbda2c20 +- ++ {0x00000000dbda2c20, 0x00000000dd2e357c}, + /* x^91136 mod p(x)` << 1, x^91200 mod p(x)` << 1 */ +- .octa 0x00000000071c80de000000011122410c +- ++ {0x000000011122410c, 0x00000000071c80de}, + /* x^90112 mod p(x)` << 1, x^90176 mod p(x)` << 1 */ +- .octa 0x000000011513140a00000000977b2070 +- ++ {0x00000000977b2070, 0x000000011513140a}, + /* x^89088 mod p(x)` << 1, x^89152 mod p(x)` << 1 */ +- .octa 0x00000001df876e8e000000014050438e +- ++ {0x000000014050438e, 0x00000001df876e8e}, + /* x^88064 mod p(x)` << 1, x^88128 mod p(x)` << 1 */ +- .octa 0x000000015f81d6ce0000000147c840e8 +- ++ {0x0000000147c840e8, 0x000000015f81d6ce}, + /* x^87040 mod p(x)` << 1, x^87104 mod p(x)` << 1 */ +- .octa 0x000000019dd94dbe00000001cc7c88ce +- ++ {0x00000001cc7c88ce, 0x000000019dd94dbe}, + /* x^86016 mod p(x)` << 1, x^86080 mod p(x)` << 1 */ +- .octa 0x00000001373d206e00000001476b35a4 +- ++ {0x00000001476b35a4, 0x00000001373d206e}, + /* x^84992 mod p(x)` << 1, x^85056 mod p(x)` << 1 */ +- .octa 0x00000000668ccade000000013d52d508 +- ++ {0x000000013d52d508, 0x00000000668ccade}, + /* x^83968 mod p(x)` << 1, x^84032 mod p(x)` << 1 */ +- .octa 0x00000001b192d268000000008e4be32e +- ++ {0x000000008e4be32e, 0x00000001b192d268}, + /* x^82944 mod p(x)` << 1, x^83008 mod p(x)` << 1 */ +- .octa 0x00000000e30f3a7800000000024120fe +- ++ {0x00000000024120fe, 0x00000000e30f3a78}, + /* x^81920 mod p(x)` << 1, x^81984 mod p(x)` << 1 */ +- .octa 0x000000010ef1f7bc00000000ddecddb4 +- ++ {0x00000000ddecddb4, 0x000000010ef1f7bc}, + /* x^80896 mod p(x)` << 1, x^80960 mod p(x)` << 1 */ +- .octa 0x00000001f5ac738000000000d4d403bc +- ++ {0x00000000d4d403bc, 0x00000001f5ac7380}, + /* x^79872 mod p(x)` << 1, x^79936 mod p(x)` << 1 */ +- .octa 0x000000011822ea7000000001734b89aa +- ++ {0x00000001734b89aa, 0x000000011822ea70}, + /* x^78848 mod p(x)` << 1, x^78912 mod p(x)` << 1 */ +- .octa 0x00000000c3a33848000000010e7a58d6 +- ++ {0x000000010e7a58d6, 0x00000000c3a33848}, + /* x^77824 mod p(x)` << 1, x^77888 mod p(x)` << 1 */ +- .octa 0x00000001bd151c2400000001f9f04e9c +- ++ {0x00000001f9f04e9c, 0x00000001bd151c24}, + /* x^76800 mod p(x)` << 1, x^76864 mod p(x)` << 1 */ +- .octa 0x0000000056002d7600000000b692225e +- ++ {0x00000000b692225e, 0x0000000056002d76}, + /* x^75776 mod p(x)` << 1, x^75840 mod p(x)` << 1 */ +- .octa 0x000000014657c4f4000000019b8d3f3e +- ++ {0x000000019b8d3f3e, 0x000000014657c4f4}, + /* x^74752 mod p(x)` << 1, x^74816 mod p(x)` << 1 */ +- .octa 0x0000000113742d7c00000001a874f11e +- ++ {0x00000001a874f11e, 0x0000000113742d7c}, + /* x^73728 mod p(x)` << 1, x^73792 mod p(x)` << 1 */ +- .octa 0x000000019c5920ba000000010d5a4254 +- ++ {0x000000010d5a4254, 0x000000019c5920ba}, + /* x^72704 mod p(x)` << 1, x^72768 mod p(x)` << 1 */ +- .octa 0x000000005216d2d600000000bbb2f5d6 +- ++ {0x00000000bbb2f5d6, 0x000000005216d2d6}, + /* x^71680 mod p(x)` << 1, x^71744 mod p(x)` << 1 */ +- .octa 0x0000000136f5ad8a0000000179cc0e36 +- ++ {0x0000000179cc0e36, 0x0000000136f5ad8a}, + /* x^70656 mod p(x)` << 1, x^70720 mod p(x)` << 1 */ +- .octa 0x000000018b07beb600000001dca1da4a +- ++ {0x00000001dca1da4a, 0x000000018b07beb6}, + /* x^69632 mod p(x)` << 1, x^69696 mod p(x)` << 1 */ +- .octa 0x00000000db1e93b000000000feb1a192 +- ++ {0x00000000feb1a192, 0x00000000db1e93b0}, + /* x^68608 mod p(x)` << 1, x^68672 mod p(x)` << 1 */ +- .octa 0x000000000b96fa3a00000000d1eeedd6 +- ++ {0x00000000d1eeedd6, 0x000000000b96fa3a}, + /* x^67584 mod p(x)` << 1, x^67648 mod p(x)` << 1 */ +- .octa 0x00000001d9968af0000000008fad9bb4 +- ++ {0x000000008fad9bb4, 0x00000001d9968af0}, + /* x^66560 mod p(x)` << 1, x^66624 mod p(x)` << 1 */ +- .octa 0x000000000e4a77a200000001884938e4 +- ++ {0x00000001884938e4, 0x000000000e4a77a2}, + /* x^65536 mod p(x)` << 1, x^65600 mod p(x)` << 1 */ +- .octa 0x00000000508c2ac800000001bc2e9bc0 +- ++ {0x00000001bc2e9bc0, 0x00000000508c2ac8}, + /* x^64512 mod p(x)` << 1, x^64576 mod p(x)` << 1 */ +- .octa 0x0000000021572a8000000001f9658a68 +- ++ {0x00000001f9658a68, 0x0000000021572a80}, + /* x^63488 mod p(x)` << 1, x^63552 mod p(x)` << 1 */ +- .octa 0x00000001b859daf2000000001b9224fc +- ++ {0x000000001b9224fc, 0x00000001b859daf2}, + /* x^62464 mod p(x)` << 1, x^62528 mod p(x)` << 1 */ +- .octa 0x000000016f7884740000000055b2fb84 +- ++ {0x0000000055b2fb84, 0x000000016f788474}, + /* x^61440 mod p(x)` << 1, x^61504 mod p(x)` << 1 */ +- .octa 0x00000001b438810e000000018b090348 +- ++ {0x000000018b090348, 0x00000001b438810e}, + /* x^60416 mod p(x)` << 1, x^60480 mod p(x)` << 1 */ +- .octa 0x0000000095ddc6f2000000011ccbd5ea +- ++ {0x000000011ccbd5ea, 0x0000000095ddc6f2}, + /* x^59392 mod p(x)` << 1, x^59456 mod p(x)` << 1 */ +- .octa 0x00000001d977c20c0000000007ae47f8 +- ++ {0x0000000007ae47f8, 0x00000001d977c20c}, + /* x^58368 mod p(x)` << 1, x^58432 mod p(x)` << 1 */ +- .octa 0x00000000ebedb99a0000000172acbec0 +- ++ {0x0000000172acbec0, 0x00000000ebedb99a}, + /* x^57344 mod p(x)` << 1, x^57408 mod p(x)` << 1 */ +- .octa 0x00000001df9e9e9200000001c6e3ff20 +- ++ {0x00000001c6e3ff20, 0x00000001df9e9e92}, + /* x^56320 mod p(x)` << 1, x^56384 mod p(x)` << 1 */ +- .octa 0x00000001a4a3f95200000000e1b38744 +- ++ {0x00000000e1b38744, 0x00000001a4a3f952}, + /* x^55296 mod p(x)` << 1, x^55360 mod p(x)` << 1 */ +- .octa 0x00000000e2f5122000000000791585b2 +- ++ {0x00000000791585b2, 0x00000000e2f51220}, + /* x^54272 mod p(x)` << 1, x^54336 mod p(x)` << 1 */ +- .octa 0x000000004aa01f3e00000000ac53b894 +- ++ {0x00000000ac53b894, 0x000000004aa01f3e}, + /* x^53248 mod p(x)` << 1, x^53312 mod p(x)` << 1 */ +- .octa 0x00000000b3e90a5800000001ed5f2cf4 +- ++ {0x00000001ed5f2cf4, 0x00000000b3e90a58}, + /* x^52224 mod p(x)` << 1, x^52288 mod p(x)` << 1 */ +- .octa 0x000000000c9ca2aa00000001df48b2e0 +- ++ {0x00000001df48b2e0, 0x000000000c9ca2aa}, + /* x^51200 mod p(x)` << 1, x^51264 mod p(x)` << 1 */ +- .octa 0x000000015168231600000000049c1c62 +- ++ {0x00000000049c1c62, 0x0000000151682316}, + /* x^50176 mod p(x)` << 1, x^50240 mod p(x)` << 1 */ +- .octa 0x0000000036fce78c000000017c460c12 +- ++ {0x000000017c460c12, 0x0000000036fce78c}, + /* x^49152 mod p(x)` << 1, x^49216 mod p(x)` << 1 */ +- .octa 0x000000009037dc10000000015be4da7e +- ++ {0x000000015be4da7e, 0x000000009037dc10}, + /* x^48128 mod p(x)` << 1, x^48192 mod p(x)` << 1 */ +- .octa 0x00000000d3298582000000010f38f668 +- ++ {0x000000010f38f668, 0x00000000d3298582}, + /* x^47104 mod p(x)` << 1, x^47168 mod p(x)` << 1 */ +- .octa 0x00000001b42e8ad60000000039f40a00 +- ++ {0x0000000039f40a00, 0x00000001b42e8ad6}, + /* x^46080 mod p(x)` << 1, x^46144 mod p(x)` << 1 */ +- .octa 0x00000000142a983800000000bd4c10c4 +- ++ {0x00000000bd4c10c4, 0x00000000142a9838}, + /* x^45056 mod p(x)` << 1, x^45120 mod p(x)` << 1 */ +- .octa 0x0000000109c7f1900000000042db1d98 +- ++ {0x0000000042db1d98, 0x0000000109c7f190}, + /* x^44032 mod p(x)` << 1, x^44096 mod p(x)` << 1 */ +- .octa 0x0000000056ff931000000001c905bae6 +- ++ {0x00000001c905bae6, 0x0000000056ff9310}, + /* x^43008 mod p(x)` << 1, x^43072 mod p(x)` << 1 */ +- .octa 0x00000001594513aa00000000069d40ea +- ++ {0x00000000069d40ea, 0x00000001594513aa}, + /* x^41984 mod p(x)` << 1, x^42048 mod p(x)` << 1 */ +- .octa 0x00000001e3b5b1e8000000008e4fbad0 +- ++ {0x000000008e4fbad0, 0x00000001e3b5b1e8}, + /* x^40960 mod p(x)` << 1, x^41024 mod p(x)` << 1 */ +- .octa 0x000000011dd5fc080000000047bedd46 +- ++ {0x0000000047bedd46, 0x000000011dd5fc08}, + /* x^39936 mod p(x)` << 1, x^40000 mod p(x)` << 1 */ +- .octa 0x00000001675f0cc20000000026396bf8 +- ++ {0x0000000026396bf8, 0x00000001675f0cc2}, + /* x^38912 mod p(x)` << 1, x^38976 mod p(x)` << 1 */ +- .octa 0x00000000d1c8dd4400000000379beb92 +- ++ {0x00000000379beb92, 0x00000000d1c8dd44}, + /* x^37888 mod p(x)` << 1, x^37952 mod p(x)` << 1 */ +- .octa 0x0000000115ebd3d8000000000abae54a +- ++ {0x000000000abae54a, 0x0000000115ebd3d8}, + /* x^36864 mod p(x)` << 1, x^36928 mod p(x)` << 1 */ +- .octa 0x00000001ecbd0dac0000000007e6a128 +- ++ {0x0000000007e6a128, 0x00000001ecbd0dac}, + /* x^35840 mod p(x)` << 1, x^35904 mod p(x)` << 1 */ +- .octa 0x00000000cdf67af2000000000ade29d2 +- ++ {0x000000000ade29d2, 0x00000000cdf67af2}, + /* x^34816 mod p(x)` << 1, x^34880 mod p(x)` << 1 */ +- .octa 0x000000004c01ff4c00000000f974c45c +- ++ {0x00000000f974c45c, 0x000000004c01ff4c}, + /* x^33792 mod p(x)` << 1, x^33856 mod p(x)` << 1 */ +- .octa 0x00000000f2d8657e00000000e77ac60a +- ++ {0x00000000e77ac60a, 0x00000000f2d8657e}, + /* x^32768 mod p(x)` << 1, x^32832 mod p(x)` << 1 */ +- .octa 0x000000006bae74c40000000145895816 +- ++ {0x0000000145895816, 0x000000006bae74c4}, + /* x^31744 mod p(x)` << 1, x^31808 mod p(x)` << 1 */ +- .octa 0x0000000152af8aa00000000038e362be +- ++ {0x0000000038e362be, 0x0000000152af8aa0}, + /* x^30720 mod p(x)` << 1, x^30784 mod p(x)` << 1 */ +- .octa 0x0000000004663802000000007f991a64 +- ++ {0x000000007f991a64, 0x0000000004663802}, + /* x^29696 mod p(x)` << 1, x^29760 mod p(x)` << 1 */ +- .octa 0x00000001ab2f5afc00000000fa366d3a +- ++ {0x00000000fa366d3a, 0x00000001ab2f5afc}, + /* x^28672 mod p(x)` << 1, x^28736 mod p(x)` << 1 */ +- .octa 0x0000000074a4ebd400000001a2bb34f0 +- ++ {0x00000001a2bb34f0, 0x0000000074a4ebd4}, + /* x^27648 mod p(x)` << 1, x^27712 mod p(x)` << 1 */ +- .octa 0x00000001d7ab3a4c0000000028a9981e +- ++ {0x0000000028a9981e, 0x00000001d7ab3a4c}, + /* x^26624 mod p(x)` << 1, x^26688 mod p(x)` << 1 */ +- .octa 0x00000001a8da60c600000001dbc672be +- ++ {0x00000001dbc672be, 0x00000001a8da60c6}, + /* x^25600 mod p(x)` << 1, x^25664 mod p(x)` << 1 */ +- .octa 0x000000013cf6382000000000b04d77f6 +- ++ {0x00000000b04d77f6, 0x000000013cf63820}, + /* x^24576 mod p(x)` << 1, x^24640 mod p(x)` << 1 */ +- .octa 0x00000000bec12e1e0000000124400d96 +- ++ {0x0000000124400d96, 0x00000000bec12e1e}, + /* x^23552 mod p(x)` << 1, x^23616 mod p(x)` << 1 */ +- .octa 0x00000001c6368010000000014ca4b414 +- ++ {0x000000014ca4b414, 0x00000001c6368010}, + /* x^22528 mod p(x)` << 1, x^22592 mod p(x)` << 1 */ +- .octa 0x00000001e6e78758000000012fe2c938 +- ++ {0x000000012fe2c938, 0x00000001e6e78758}, + /* x^21504 mod p(x)` << 1, x^21568 mod p(x)` << 1 */ +- .octa 0x000000008d7f2b3c00000001faed01e6 +- ++ {0x00000001faed01e6, 0x000000008d7f2b3c}, + /* x^20480 mod p(x)` << 1, x^20544 mod p(x)` << 1 */ +- .octa 0x000000016b4a156e000000007e80ecfe +- ++ {0x000000007e80ecfe, 0x000000016b4a156e}, + /* x^19456 mod p(x)` << 1, x^19520 mod p(x)` << 1 */ +- .octa 0x00000001c63cfeb60000000098daee94 +- ++ {0x0000000098daee94, 0x00000001c63cfeb6}, + /* x^18432 mod p(x)` << 1, x^18496 mod p(x)` << 1 */ +- .octa 0x000000015f902670000000010a04edea +- ++ {0x000000010a04edea, 0x000000015f902670}, + /* x^17408 mod p(x)` << 1, x^17472 mod p(x)` << 1 */ +- .octa 0x00000001cd5de11e00000001c00b4524 +- ++ {0x00000001c00b4524, 0x00000001cd5de11e}, + /* x^16384 mod p(x)` << 1, x^16448 mod p(x)` << 1 */ +- .octa 0x000000001acaec540000000170296550 +- ++ {0x0000000170296550, 0x000000001acaec54}, + /* x^15360 mod p(x)` << 1, x^15424 mod p(x)` << 1 */ +- .octa 0x000000002bd0ca780000000181afaa48 +- ++ {0x0000000181afaa48, 0x000000002bd0ca78}, + /* x^14336 mod p(x)` << 1, x^14400 mod p(x)` << 1 */ +- .octa 0x0000000032d63d5c0000000185a31ffa +- ++ {0x0000000185a31ffa, 0x0000000032d63d5c}, + /* x^13312 mod p(x)` << 1, x^13376 mod p(x)` << 1 */ +- .octa 0x000000001c6d4e4c000000002469f608 +- ++ {0x000000002469f608, 0x000000001c6d4e4c}, + /* x^12288 mod p(x)` << 1, x^12352 mod p(x)` << 1 */ +- .octa 0x0000000106a60b92000000006980102a +- ++ {0x000000006980102a, 0x0000000106a60b92}, + /* x^11264 mod p(x)` << 1, x^11328 mod p(x)` << 1 */ +- .octa 0x00000000d3855e120000000111ea9ca8 +- ++ {0x0000000111ea9ca8, 0x00000000d3855e12}, + /* x^10240 mod p(x)` << 1, x^10304 mod p(x)` << 1 */ +- .octa 0x00000000e312563600000001bd1d29ce +- ++ {0x00000001bd1d29ce, 0x00000000e3125636}, + /* x^9216 mod p(x)` << 1, x^9280 mod p(x)` << 1 */ +- .octa 0x000000009e8f7ea400000001b34b9580 +- ++ {0x00000001b34b9580, 0x000000009e8f7ea4}, + /* x^8192 mod p(x)` << 1, x^8256 mod p(x)` << 1 */ +- .octa 0x00000001c82e562c000000003076054e +- ++ {0x000000003076054e, 0x00000001c82e562c}, + /* x^7168 mod p(x)` << 1, x^7232 mod p(x)` << 1 */ +- .octa 0x00000000ca9f09ce000000012a608ea4 +- ++ {0x000000012a608ea4, 0x00000000ca9f09ce}, + /* x^6144 mod p(x)` << 1, x^6208 mod p(x)` << 1 */ +- .octa 0x00000000c63764e600000000784d05fe +- ++ {0x00000000784d05fe, 0x00000000c63764e6}, + /* x^5120 mod p(x)` << 1, x^5184 mod p(x)` << 1 */ +- .octa 0x0000000168d2e49e000000016ef0d82a +- ++ {0x000000016ef0d82a, 0x0000000168d2e49e}, + /* x^4096 mod p(x)` << 1, x^4160 mod p(x)` << 1 */ +- .octa 0x00000000e986c1480000000075bda454 +- ++ {0x0000000075bda454, 0x00000000e986c148}, + /* x^3072 mod p(x)` << 1, x^3136 mod p(x)` << 1 */ +- .octa 0x00000000cfb65894000000003dc0a1c4 +- ++ {0x000000003dc0a1c4, 0x00000000cfb65894}, + /* x^2048 mod p(x)` << 1, x^2112 mod p(x)` << 1 */ +- .octa 0x0000000111cadee400000000e9a5d8be +- ++ {0x00000000e9a5d8be, 0x0000000111cadee4}, + /* x^1024 mod p(x)` << 1, x^1088 mod p(x)` << 1 */ +- .octa 0x0000000171fb63ce00000001609bc4b4 +- +- .short_constants : +- +- /* Reduce final 1024-2048 bits to 64 bits, shifting 32 bits to include +- the trailing 32 bits of zeros */ +- /* x^1952 mod p(x)`, x^1984 mod p(x)`, x^2016 mod p(x)`, x^2048 mod +- p(x)` */ +- .octa 0x7fec2963e5bf80485cf015c388e56f72 +- +- /* x^1824 mod p(x)`, x^1856 mod p(x)`, x^1888 mod p(x)`, x^1920 mod +- p(x)` */ +- .octa 0x38e888d4844752a9963a18920246e2e6 +- +- /* x^1696 mod p(x)`, x^1728 mod p(x)`, x^1760 mod p(x)`, x^1792 mod +- p(x)` */ +- .octa 0x42316c00730206ad419a441956993a31 +- +- /* x^1568 mod p(x)`, x^1600 mod p(x)`, x^1632 mod p(x)`, x^1664 mod +- p(x)` */ +- .octa 0x543d5c543e65ddf9924752ba2b830011 +- +- /* x^1440 mod p(x)`, x^1472 mod p(x)`, x^1504 mod p(x)`, x^1536 mod +- p(x)` */ +- .octa 0x78e87aaf56767c9255bd7f9518e4a304 +- +- /* x^1312 mod p(x)`, x^1344 mod p(x)`, x^1376 mod p(x)`, x^1408 mod +- p(x)` */ +- .octa 0x8f68fcec1903da7f6d76739fe0553f1e +- +- /* x^1184 mod p(x)`, x^1216 mod p(x)`, x^1248 mod p(x)`, x^1280 mod +- p(x)` */ +- .octa 0x3f4840246791d588c133722b1fe0b5c3 +- +- /* x^1056 mod p(x)`, x^1088 mod p(x)`, x^1120 mod p(x)`, x^1152 mod +- p(x)` */ +- .octa 0x34c96751b04de25a64b67ee0e55ef1f3 +- +- /* x^928 mod p(x)`, x^960 mod p(x)`, x^992 mod p(x)`, x^1024 mod p(x)` +- */ +- .octa 0x156c8e180b4a395b069db049b8fdb1e7 +- +- /* x^800 mod p(x)`, x^832 mod p(x)`, x^864 mod p(x)`, x^896 mod p(x)` */ +- .octa 0xe0b99ccbe661f7bea11bfaf3c9e90b9e +- +- /* x^672 mod p(x)`, x^704 mod p(x)`, x^736 mod p(x)`, x^768 mod p(x)` */ +- .octa 0x041d37768cd75659817cdc5119b29a35 +- +- /* x^544 mod p(x)`, x^576 mod p(x)`, x^608 mod p(x)`, x^640 mod p(x)` */ +- .octa 0x3a0777818cfaa9651ce9d94b36c41f1c +- +- /* x^416 mod p(x)`, x^448 mod p(x)`, x^480 mod p(x)`, x^512 mod p(x)` */ +- .octa 0x0e148e8252377a554f256efcb82be955 +- +- /* x^288 mod p(x)`, x^320 mod p(x)`, x^352 mod p(x)`, x^384 mod p(x)` */ +- .octa 0x9c25531d19e65ddeec1631edb2dea967 +- +- /* x^160 mod p(x)`, x^192 mod p(x)`, x^224 mod p(x)`, x^256 mod p(x)` */ +- .octa 0x790606ff9957c0a65d27e147510ac59a ++ {0x00000001609bc4b4, 0x0000000171fb63ce} ++#else /* __LITTLE_ENDIAN__ */ ++ /* x^261120 mod p(x)` << 1, x^261184 mod p(x)` << 1 */ ++ {0x00000000b6ca9e20, 0x000000009c37c408}, ++ /* x^260096 mod p(x)` << 1, x^260160 mod p(x)` << 1 */ ++ {0x00000000350249a8, 0x00000001b51df26c}, ++ /* x^259072 mod p(x)` << 1, x^259136 mod p(x)` << 1 */ ++ {0x00000001862dac54, 0x000000000724b9d0}, ++ /* x^258048 mod p(x)` << 1, x^258112 mod p(x)` << 1 */ ++ {0x00000001d87fb48c, 0x00000001c00532fe}, ++ /* x^257024 mod p(x)` << 1, x^257088 mod p(x)` << 1 */ ++ {0x00000001f39b699e, 0x00000000f05a9362}, ++ /* x^256000 mod p(x)` << 1, x^256064 mod p(x)` << 1 */ ++ {0x0000000101da11b4, 0x00000001e1007970}, ++ /* x^254976 mod p(x)` << 1, x^255040 mod p(x)` << 1 */ ++ {0x00000001cab571e0, 0x00000000a57366ee}, ++ /* x^253952 mod p(x)` << 1, x^254016 mod p(x)` << 1 */ ++ {0x00000000c7020cfe, 0x0000000192011284}, ++ /* x^252928 mod p(x)` << 1, x^252992 mod p(x)` << 1 */ ++ {0x00000000cdaed1ae, 0x0000000162716d9a}, ++ /* x^251904 mod p(x)` << 1, x^251968 mod p(x)` << 1 */ ++ {0x00000001e804effc, 0x00000000cd97ecde}, ++ /* x^250880 mod p(x)` << 1, x^250944 mod p(x)` << 1 */ ++ {0x0000000077c3ea3a, 0x0000000058812bc0}, ++ /* x^249856 mod p(x)` << 1, x^249920 mod p(x)` << 1 */ ++ {0x0000000068df31b4, 0x0000000088b8c12e}, ++ /* x^248832 mod p(x)` << 1, x^248896 mod p(x)` << 1 */ ++ {0x00000000b059b6c2, 0x00000001230b234c}, ++ /* x^247808 mod p(x)` << 1, x^247872 mod p(x)` << 1 */ ++ {0x0000000145fb8ed8, 0x00000001120b416e}, ++ /* x^246784 mod p(x)` << 1, x^246848 mod p(x)` << 1 */ ++ {0x00000000cbc09168, 0x00000001974aecb0}, ++ /* x^245760 mod p(x)` << 1, x^245824 mod p(x)` << 1 */ ++ {0x000000005ceeedc2, 0x000000008ee3f226}, ++ /* x^244736 mod p(x)` << 1, x^244800 mod p(x)` << 1 */ ++ {0x0000000047d74e86, 0x00000001089aba9a}, ++ /* x^243712 mod p(x)` << 1, x^243776 mod p(x)` << 1 */ ++ {0x00000001407e9e22, 0x0000000065113872}, ++ /* x^242688 mod p(x)` << 1, x^242752 mod p(x)` << 1 */ ++ {0x00000001da967bda, 0x000000005c07ec10}, ++ /* x^241664 mod p(x)` << 1, x^241728 mod p(x)` << 1 */ ++ {0x000000006c898368, 0x0000000187590924}, ++ /* x^240640 mod p(x)` << 1, x^240704 mod p(x)` << 1 */ ++ {0x00000000f2d14c98, 0x00000000e35da7c6}, ++ /* x^239616 mod p(x)` << 1, x^239680 mod p(x)` << 1 */ ++ {0x00000001993c6ad4, 0x000000000415855a}, ++ /* x^238592 mod p(x)` << 1, x^238656 mod p(x)` << 1 */ ++ {0x000000014683d1ac, 0x0000000073617758}, ++ /* x^237568 mod p(x)` << 1, x^237632 mod p(x)` << 1 */ ++ {0x00000001a7c93e6c, 0x0000000176021d28}, ++ /* x^236544 mod p(x)` << 1, x^236608 mod p(x)` << 1 */ ++ {0x000000010211e90a, 0x00000001c358fd0a}, ++ /* x^235520 mod p(x)` << 1, x^235584 mod p(x)` << 1 */ ++ {0x000000001119403e, 0x00000001ff7a2c18}, ++ /* x^234496 mod p(x)` << 1, x^234560 mod p(x)` << 1 */ ++ {0x000000001c3261aa, 0x00000000f2d9f7e4}, ++ /* x^233472 mod p(x)` << 1, x^233536 mod p(x)` << 1 */ ++ {0x000000014e37a634, 0x000000016cf1f9c8}, ++ /* x^232448 mod p(x)` << 1, x^232512 mod p(x)` << 1 */ ++ {0x0000000073786c0c, 0x000000010af9279a}, ++ /* x^231424 mod p(x)` << 1, x^231488 mod p(x)` << 1 */ ++ {0x000000011dc037f8, 0x0000000004f101e8}, ++ /* x^230400 mod p(x)` << 1, x^230464 mod p(x)` << 1 */ ++ {0x0000000031433dfc, 0x0000000070bcf184}, ++ /* x^229376 mod p(x)` << 1, x^229440 mod p(x)` << 1 */ ++ {0x000000009cde8348, 0x000000000a8de642}, ++ /* x^228352 mod p(x)` << 1, x^228416 mod p(x)` << 1 */ ++ {0x0000000038d3c2a6, 0x0000000062ea130c}, ++ /* x^227328 mod p(x)` << 1, x^227392 mod p(x)` << 1 */ ++ {0x000000011b25f260, 0x00000001eb31cbb2}, ++ /* x^226304 mod p(x)` << 1, x^226368 mod p(x)` << 1 */ ++ {0x000000001629e6f0, 0x0000000170783448}, ++ /* x^225280 mod p(x)` << 1, x^225344 mod p(x)` << 1 */ ++ {0x0000000160838b4c, 0x00000001a684b4c6}, ++ /* x^224256 mod p(x)` << 1, x^224320 mod p(x)` << 1 */ ++ {0x000000007a44011c, 0x00000000253ca5b4}, ++ /* x^223232 mod p(x)` << 1, x^223296 mod p(x)` << 1 */ ++ {0x00000000226f417a, 0x0000000057b4b1e2}, ++ /* x^222208 mod p(x)` << 1, x^222272 mod p(x)` << 1 */ ++ {0x0000000045eb2eb4, 0x00000000b6bd084c}, ++ /* x^221184 mod p(x)` << 1, x^221248 mod p(x)` << 1 */ ++ {0x000000014459d70c, 0x0000000123c2d592}, ++ /* x^220160 mod p(x)` << 1, x^220224 mod p(x)` << 1 */ ++ {0x00000001d406ed82, 0x00000000159dafce}, ++ /* x^219136 mod p(x)` << 1, x^219200 mod p(x)` << 1 */ ++ {0x0000000160c8e1a8, 0x0000000127e1a64e}, ++ /* x^218112 mod p(x)` << 1, x^218176 mod p(x)` << 1 */ ++ {0x0000000027ba8098, 0x0000000056860754}, ++ /* x^217088 mod p(x)` << 1, x^217152 mod p(x)` << 1 */ ++ {0x000000006d92d018, 0x00000001e661aae8}, ++ /* x^216064 mod p(x)` << 1, x^216128 mod p(x)` << 1 */ ++ {0x000000012ed7e3f2, 0x00000000f82c6166}, ++ /* x^215040 mod p(x)` << 1, x^215104 mod p(x)` << 1 */ ++ {0x000000002dc87788, 0x00000000c4f9c7ae}, ++ /* x^214016 mod p(x)` << 1, x^214080 mod p(x)` << 1 */ ++ {0x0000000018240bb8, 0x0000000074203d20}, ++ /* x^212992 mod p(x)` << 1, x^213056 mod p(x)` << 1 */ ++ {0x000000001ad38158, 0x0000000198173052}, ++ /* x^211968 mod p(x)` << 1, x^212032 mod p(x)` << 1 */ ++ {0x00000001396b78f2, 0x00000001ce8aba54}, ++ /* x^210944 mod p(x)` << 1, x^211008 mod p(x)` << 1 */ ++ {0x000000011a681334, 0x00000001850d5d94}, ++ /* x^209920 mod p(x)` << 1, x^209984 mod p(x)` << 1 */ ++ {0x000000012104732e, 0x00000001d609239c}, ++ /* x^208896 mod p(x)` << 1, x^208960 mod p(x)` << 1 */ ++ {0x00000000a140d90c, 0x000000001595f048}, ++ /* x^207872 mod p(x)` << 1, x^207936 mod p(x)` << 1 */ ++ {0x00000001b7215eda, 0x0000000042ccee08}, ++ /* x^206848 mod p(x)` << 1, x^206912 mod p(x)` << 1 */ ++ {0x00000001aaf1df3c, 0x000000010a389d74}, ++ /* x^205824 mod p(x)` << 1, x^205888 mod p(x)` << 1 */ ++ {0x0000000029d15b8a, 0x000000012a840da6}, ++ /* x^204800 mod p(x)` << 1, x^204864 mod p(x)` << 1 */ ++ {0x00000000f1a96922, 0x000000001d181c0c}, ++ /* x^203776 mod p(x)` << 1, x^203840 mod p(x)` << 1 */ ++ {0x00000001ac80d03c, 0x0000000068b7d1f6}, ++ /* x^202752 mod p(x)` << 1, x^202816 mod p(x)` << 1 */ ++ {0x000000000f11d56a, 0x000000005b0f14fc}, ++ /* x^201728 mod p(x)` << 1, x^201792 mod p(x)` << 1 */ ++ {0x00000001f1c022a2, 0x0000000179e9e730}, ++ /* x^200704 mod p(x)` << 1, x^200768 mod p(x)` << 1 */ ++ {0x0000000173d00ae2, 0x00000001ce1368d6}, ++ /* x^199680 mod p(x)` << 1, x^199744 mod p(x)` << 1 */ ++ {0x00000001d4ffe4ac, 0x0000000112c3a84c}, ++ /* x^198656 mod p(x)` << 1, x^198720 mod p(x)` << 1 */ ++ {0x000000016edc5ae4, 0x00000000de940fee}, ++ /* x^197632 mod p(x)` << 1, x^197696 mod p(x)` << 1 */ ++ {0x00000001f1a02140, 0x00000000fe896b7e}, ++ /* x^196608 mod p(x)` << 1, x^196672 mod p(x)` << 1 */ ++ {0x00000000ca0b28a0, 0x00000001f797431c}, ++ /* x^195584 mod p(x)` << 1, x^195648 mod p(x)` << 1 */ ++ {0x00000001928e30a2, 0x0000000053e989ba}, ++ /* x^194560 mod p(x)` << 1, x^194624 mod p(x)` << 1 */ ++ {0x0000000097b1b002, 0x000000003920cd16}, ++ /* x^193536 mod p(x)` << 1, x^193600 mod p(x)` << 1 */ ++ {0x00000000b15bf906, 0x00000001e6f579b8}, ++ /* x^192512 mod p(x)` << 1, x^192576 mod p(x)` << 1 */ ++ {0x00000000411c5d52, 0x000000007493cb0a}, ++ /* x^191488 mod p(x)` << 1, x^191552 mod p(x)` << 1 */ ++ {0x00000001c36f3300, 0x00000001bdd376d8}, ++ /* x^190464 mod p(x)` << 1, x^190528 mod p(x)` << 1 */ ++ {0x00000001119227e0, 0x000000016badfee6}, ++ /* x^189440 mod p(x)` << 1, x^189504 mod p(x)` << 1 */ ++ {0x00000000114d4702, 0x0000000071de5c58}, ++ /* x^188416 mod p(x)` << 1, x^188480 mod p(x)` << 1 */ ++ {0x00000000458b5b98, 0x00000000453f317c}, ++ /* x^187392 mod p(x)` << 1, x^187456 mod p(x)` << 1 */ ++ {0x000000012e31fb8e, 0x0000000121675cce}, ++ /* x^186368 mod p(x)` << 1, x^186432 mod p(x)` << 1 */ ++ {0x000000005cf619d8, 0x00000001f409ee92}, ++ /* x^185344 mod p(x)` << 1, x^185408 mod p(x)` << 1 */ ++ {0x0000000063f4d8b2, 0x00000000f36b9c88}, ++ /* x^184320 mod p(x)` << 1, x^184384 mod p(x)` << 1 */ ++ {0x000000004138dc8a, 0x0000000036b398f4}, ++ /* x^183296 mod p(x)` << 1, x^183360 mod p(x)` << 1 */ ++ {0x00000001d29ee8e0, 0x00000001748f9adc}, ++ /* x^182272 mod p(x)` << 1, x^182336 mod p(x)` << 1 */ ++ {0x000000006a08ace8, 0x00000001be94ec00}, ++ /* x^181248 mod p(x)` << 1, x^181312 mod p(x)` << 1 */ ++ {0x0000000127d42010, 0x00000000b74370d6}, ++ /* x^180224 mod p(x)` << 1, x^180288 mod p(x)` << 1 */ ++ {0x0000000019d76b62, 0x00000001174d0b98}, ++ /* x^179200 mod p(x)` << 1, x^179264 mod p(x)` << 1 */ ++ {0x00000001b1471f6e, 0x00000000befc06a4}, ++ /* x^178176 mod p(x)` << 1, x^178240 mod p(x)` << 1 */ ++ {0x00000001f64c19cc, 0x00000001ae125288}, ++ /* x^177152 mod p(x)` << 1, x^177216 mod p(x)` << 1 */ ++ {0x00000000003c0ea0, 0x0000000095c19b34}, ++ /* x^176128 mod p(x)` << 1, x^176192 mod p(x)` << 1 */ ++ {0x000000014d73abf6, 0x00000001a78496f2}, ++ /* x^175104 mod p(x)` << 1, x^175168 mod p(x)` << 1 */ ++ {0x00000001620eb844, 0x00000001ac5390a0}, ++ /* x^174080 mod p(x)` << 1, x^174144 mod p(x)` << 1 */ ++ {0x0000000147655048, 0x000000002a80ed6e}, ++ /* x^173056 mod p(x)` << 1, x^173120 mod p(x)` << 1 */ ++ {0x0000000067b5077e, 0x00000001fa9b0128}, ++ /* x^172032 mod p(x)` << 1, x^172096 mod p(x)` << 1 */ ++ {0x0000000010ffe206, 0x00000001ea94929e}, ++ /* x^171008 mod p(x)` << 1, x^171072 mod p(x)` << 1 */ ++ {0x000000000fee8f1e, 0x0000000125f4305c}, ++ /* x^169984 mod p(x)` << 1, x^170048 mod p(x)` << 1 */ ++ {0x00000001da26fbae, 0x00000001471e2002}, ++ /* x^168960 mod p(x)` << 1, x^169024 mod p(x)` << 1 */ ++ {0x00000001b3a8bd88, 0x0000000132d2253a}, ++ /* x^167936 mod p(x)` << 1, x^168000 mod p(x)` << 1 */ ++ {0x00000000e8f3898e, 0x00000000f26b3592}, ++ /* x^166912 mod p(x)` << 1, x^166976 mod p(x)` << 1 */ ++ {0x00000000b0d0d28c, 0x00000000bc8b67b0}, ++ /* x^165888 mod p(x)` << 1, x^165952 mod p(x)` << 1 */ ++ {0x0000000030f2a798, 0x000000013a826ef2}, ++ /* x^164864 mod p(x)` << 1, x^164928 mod p(x)` << 1 */ ++ {0x000000000fba1002, 0x0000000081482c84}, ++ /* x^163840 mod p(x)` << 1, x^163904 mod p(x)` << 1 */ ++ {0x00000000bdb9bd72, 0x00000000e77307c2}, ++ /* x^162816 mod p(x)` << 1, x^162880 mod p(x)` << 1 */ ++ {0x0000000075d3bf5a, 0x00000000d4a07ec8}, ++ /* x^161792 mod p(x)` << 1, x^161856 mod p(x)` << 1 */ ++ {0x00000000ef1f98a0, 0x0000000017102100}, ++ /* x^160768 mod p(x)` << 1, x^160832 mod p(x)` << 1 */ ++ {0x00000000689c7602, 0x00000000db406486}, ++ /* x^159744 mod p(x)` << 1, x^159808 mod p(x)` << 1 */ ++ {0x000000016d5fa5fe, 0x0000000192db7f88}, ++ /* x^158720 mod p(x)` << 1, x^158784 mod p(x)` << 1 */ ++ {0x00000001d0d2b9ca, 0x000000018bf67b1e}, ++ /* x^157696 mod p(x)` << 1, x^157760 mod p(x)` << 1 */ ++ {0x0000000041e7b470, 0x000000007c09163e}, ++ /* x^156672 mod p(x)` << 1, x^156736 mod p(x)` << 1 */ ++ {0x00000001cbb6495e, 0x000000000adac060}, ++ /* x^155648 mod p(x)` << 1, x^155712 mod p(x)` << 1 */ ++ {0x000000010052a0b0, 0x00000000bd8316ae}, ++ /* x^154624 mod p(x)` << 1, x^154688 mod p(x)` << 1 */ ++ {0x00000001d8effb5c, 0x000000019f09ab54}, ++ /* x^153600 mod p(x)` << 1, x^153664 mod p(x)` << 1 */ ++ {0x00000001d969853c, 0x0000000125155542}, ++ /* x^152576 mod p(x)` << 1, x^152640 mod p(x)` << 1 */ ++ {0x00000000523ccce2, 0x000000018fdb5882}, ++ /* x^151552 mod p(x)` << 1, x^151616 mod p(x)` << 1 */ ++ {0x000000001e2436bc, 0x00000000e794b3f4}, ++ /* x^150528 mod p(x)` << 1, x^150592 mod p(x)` << 1 */ ++ {0x00000000ddd1c3a2, 0x000000016f9bb022}, ++ /* x^149504 mod p(x)` << 1, x^149568 mod p(x)` << 1 */ ++ {0x0000000019fcfe38, 0x00000000290c9978}, ++ /* x^148480 mod p(x)` << 1, x^148544 mod p(x)` << 1 */ ++ {0x00000001ce95db64, 0x0000000083c0f350}, ++ /* x^147456 mod p(x)` << 1, x^147520 mod p(x)` << 1 */ ++ {0x00000000af582806, 0x0000000173ea6628}, ++ /* x^146432 mod p(x)` << 1, x^146496 mod p(x)` << 1 */ ++ {0x00000001006388f6, 0x00000001c8b4e00a}, ++ /* x^145408 mod p(x)` << 1, x^145472 mod p(x)` << 1 */ ++ {0x0000000179eca00a, 0x00000000de95d6aa}, ++ /* x^144384 mod p(x)` << 1, x^144448 mod p(x)` << 1 */ ++ {0x0000000122410a6a, 0x000000010b7f7248}, ++ /* x^143360 mod p(x)` << 1, x^143424 mod p(x)` << 1 */ ++ {0x000000004288e87c, 0x00000001326e3a06}, ++ /* x^142336 mod p(x)` << 1, x^142400 mod p(x)` << 1 */ ++ {0x000000016c5490da, 0x00000000bb62c2e6}, ++ /* x^141312 mod p(x)` << 1, x^141376 mod p(x)` << 1 */ ++ {0x00000000d1c71f6e, 0x0000000156a4b2c2}, ++ /* x^140288 mod p(x)` << 1, x^140352 mod p(x)` << 1 */ ++ {0x00000001b4ce08a6, 0x000000011dfe763a}, ++ /* x^139264 mod p(x)` << 1, x^139328 mod p(x)` << 1 */ ++ {0x00000001466ba60c, 0x000000007bcca8e2}, ++ /* x^138240 mod p(x)` << 1, x^138304 mod p(x)` << 1 */ ++ {0x00000001f6c488a4, 0x0000000186118faa}, ++ /* x^137216 mod p(x)` << 1, x^137280 mod p(x)` << 1 */ ++ {0x000000013bfb0682, 0x0000000111a65a88}, ++ /* x^136192 mod p(x)` << 1, x^136256 mod p(x)` << 1 */ ++ {0x00000000690e9e54, 0x000000003565e1c4}, ++ /* x^135168 mod p(x)` << 1, x^135232 mod p(x)` << 1 */ ++ {0x00000000281346b6, 0x000000012ed02a82}, ++ /* x^134144 mod p(x)` << 1, x^134208 mod p(x)` << 1 */ ++ {0x0000000156464024, 0x00000000c486ecfc}, ++ /* x^133120 mod p(x)` << 1, x^133184 mod p(x)` << 1 */ ++ {0x000000016063a8dc, 0x0000000001b951b2}, ++ /* x^132096 mod p(x)` << 1, x^132160 mod p(x)` << 1 */ ++ {0x0000000116a66362, 0x0000000048143916}, ++ /* x^131072 mod p(x)` << 1, x^131136 mod p(x)` << 1 */ ++ {0x000000017e8aa4d2, 0x00000001dc2ae124}, ++ /* x^130048 mod p(x)` << 1, x^130112 mod p(x)` << 1 */ ++ {0x00000001728eb10c, 0x00000001416c58d6}, ++ /* x^129024 mod p(x)` << 1, x^129088 mod p(x)` << 1 */ ++ {0x00000001b08fd7fa, 0x00000000a479744a}, ++ /* x^128000 mod p(x)` << 1, x^128064 mod p(x)` << 1 */ ++ {0x00000001092a16e8, 0x0000000096ca3a26}, ++ /* x^126976 mod p(x)` << 1, x^127040 mod p(x)` << 1 */ ++ {0x00000000a505637c, 0x00000000ff223d4e}, ++ /* x^125952 mod p(x)` << 1, x^126016 mod p(x)` << 1 */ ++ {0x00000000d94869b2, 0x000000010e84da42}, ++ /* x^124928 mod p(x)` << 1, x^124992 mod p(x)` << 1 */ ++ {0x00000001c8b203ae, 0x00000001b61ba3d0}, ++ /* x^123904 mod p(x)` << 1, x^123968 mod p(x)` << 1 */ ++ {0x000000005704aea0, 0x00000000680f2de8}, ++ /* x^122880 mod p(x)` << 1, x^122944 mod p(x)` << 1 */ ++ {0x000000012e295fa2, 0x000000008772a9a8}, ++ /* x^121856 mod p(x)` << 1, x^121920 mod p(x)` << 1 */ ++ {0x000000011d0908bc, 0x0000000155f295bc}, ++ /* x^120832 mod p(x)` << 1, x^120896 mod p(x)` << 1 */ ++ {0x0000000193ed97ea, 0x00000000595f9282}, ++ /* x^119808 mod p(x)` << 1, x^119872 mod p(x)` << 1 */ ++ {0x000000013a0f1c52, 0x0000000164b1c25a}, ++ /* x^118784 mod p(x)` << 1, x^118848 mod p(x)` << 1 */ ++ {0x000000010c2c40c0, 0x00000000fbd67c50}, ++ /* x^117760 mod p(x)` << 1, x^117824 mod p(x)` << 1 */ ++ {0x00000000ff6fac3e, 0x0000000096076268}, ++ /* x^116736 mod p(x)` << 1, x^116800 mod p(x)` << 1 */ ++ {0x000000017b3609c0, 0x00000001d288e4cc}, ++ /* x^115712 mod p(x)` << 1, x^115776 mod p(x)` << 1 */ ++ {0x0000000088c8c922, 0x00000001eaac1bdc}, ++ /* x^114688 mod p(x)` << 1, x^114752 mod p(x)` << 1 */ ++ {0x00000001751baae6, 0x00000001f1ea39e2}, ++ /* x^113664 mod p(x)` << 1, x^113728 mod p(x)` << 1 */ ++ {0x0000000107952972, 0x00000001eb6506fc}, ++ /* x^112640 mod p(x)` << 1, x^112704 mod p(x)` << 1 */ ++ {0x0000000162b00abe, 0x000000010f806ffe}, ++ /* x^111616 mod p(x)` << 1, x^111680 mod p(x)` << 1 */ ++ {0x000000000d7b404c, 0x000000010408481e}, ++ /* x^110592 mod p(x)` << 1, x^110656 mod p(x)` << 1 */ ++ {0x00000000763b13d4, 0x0000000188260534}, ++ /* x^109568 mod p(x)` << 1, x^109632 mod p(x)` << 1 */ ++ {0x00000000f6dc22d8, 0x0000000058fc73e0}, ++ /* x^108544 mod p(x)` << 1, x^108608 mod p(x)` << 1 */ ++ {0x000000007daae060, 0x00000000391c59b8}, ++ /* x^107520 mod p(x)` << 1, x^107584 mod p(x)` << 1 */ ++ {0x000000013359ab7c, 0x000000018b638400}, ++ /* x^106496 mod p(x)` << 1, x^106560 mod p(x)` << 1 */ ++ {0x000000008add438a, 0x000000011738f5c4}, ++ /* x^105472 mod p(x)` << 1, x^105536 mod p(x)` << 1 */ ++ {0x00000001edbefdea, 0x000000008cf7c6da}, ++ /* x^104448 mod p(x)` << 1, x^104512 mod p(x)` << 1 */ ++ {0x000000004104e0f8, 0x00000001ef97fb16}, ++ /* x^103424 mod p(x)` << 1, x^103488 mod p(x)` << 1 */ ++ {0x00000000b48a8222, 0x0000000102130e20}, ++ /* x^102400 mod p(x)` << 1, x^102464 mod p(x)` << 1 */ ++ {0x00000001bcb46844, 0x00000000db968898}, ++ /* x^101376 mod p(x)` << 1, x^101440 mod p(x)` << 1 */ ++ {0x000000013293ce0a, 0x00000000b5047b5e}, ++ /* x^100352 mod p(x)` << 1, x^100416 mod p(x)` << 1 */ ++ {0x00000001710d0844, 0x000000010b90fdb2}, ++ /* x^99328 mod p(x)` << 1, x^99392 mod p(x)` << 1 */ ++ {0x0000000117907f6e, 0x000000004834a32e}, ++ /* x^98304 mod p(x)` << 1, x^98368 mod p(x)` << 1 */ ++ {0x0000000087ddf93e, 0x0000000059c8f2b0}, ++ /* x^97280 mod p(x)` << 1, x^97344 mod p(x)` << 1 */ ++ {0x000000005970e9b0, 0x0000000122cec508}, ++ /* x^96256 mod p(x)` << 1, x^96320 mod p(x)` << 1 */ ++ {0x0000000185b2b7d0, 0x000000000a330cda}, ++ /* x^95232 mod p(x)` << 1, x^95296 mod p(x)` << 1 */ ++ {0x00000001dcee0efc, 0x000000014a47148c}, ++ /* x^94208 mod p(x)` << 1, x^94272 mod p(x)` << 1 */ ++ {0x0000000030da2722, 0x0000000042c61cb8}, ++ /* x^93184 mod p(x)` << 1, x^93248 mod p(x)` << 1 */ ++ {0x000000012f925a18, 0x0000000012fe6960}, ++ /* x^92160 mod p(x)` << 1, x^92224 mod p(x)` << 1 */ ++ {0x00000000dd2e357c, 0x00000000dbda2c20}, ++ /* x^91136 mod p(x)` << 1, x^91200 mod p(x)` << 1 */ ++ {0x00000000071c80de, 0x000000011122410c}, ++ /* x^90112 mod p(x)` << 1, x^90176 mod p(x)` << 1 */ ++ {0x000000011513140a, 0x00000000977b2070}, ++ /* x^89088 mod p(x)` << 1, x^89152 mod p(x)` << 1 */ ++ {0x00000001df876e8e, 0x000000014050438e}, ++ /* x^88064 mod p(x)` << 1, x^88128 mod p(x)` << 1 */ ++ {0x000000015f81d6ce, 0x0000000147c840e8}, ++ /* x^87040 mod p(x)` << 1, x^87104 mod p(x)` << 1 */ ++ {0x000000019dd94dbe, 0x00000001cc7c88ce}, ++ /* x^86016 mod p(x)` << 1, x^86080 mod p(x)` << 1 */ ++ {0x00000001373d206e, 0x00000001476b35a4}, ++ /* x^84992 mod p(x)` << 1, x^85056 mod p(x)` << 1 */ ++ {0x00000000668ccade, 0x000000013d52d508}, ++ /* x^83968 mod p(x)` << 1, x^84032 mod p(x)` << 1 */ ++ {0x00000001b192d268, 0x000000008e4be32e}, ++ /* x^82944 mod p(x)` << 1, x^83008 mod p(x)` << 1 */ ++ {0x00000000e30f3a78, 0x00000000024120fe}, ++ /* x^81920 mod p(x)` << 1, x^81984 mod p(x)` << 1 */ ++ {0x000000010ef1f7bc, 0x00000000ddecddb4}, ++ /* x^80896 mod p(x)` << 1, x^80960 mod p(x)` << 1 */ ++ {0x00000001f5ac7380, 0x00000000d4d403bc}, ++ /* x^79872 mod p(x)` << 1, x^79936 mod p(x)` << 1 */ ++ {0x000000011822ea70, 0x00000001734b89aa}, ++ /* x^78848 mod p(x)` << 1, x^78912 mod p(x)` << 1 */ ++ {0x00000000c3a33848, 0x000000010e7a58d6}, ++ /* x^77824 mod p(x)` << 1, x^77888 mod p(x)` << 1 */ ++ {0x00000001bd151c24, 0x00000001f9f04e9c}, ++ /* x^76800 mod p(x)` << 1, x^76864 mod p(x)` << 1 */ ++ {0x0000000056002d76, 0x00000000b692225e}, ++ /* x^75776 mod p(x)` << 1, x^75840 mod p(x)` << 1 */ ++ {0x000000014657c4f4, 0x000000019b8d3f3e}, ++ /* x^74752 mod p(x)` << 1, x^74816 mod p(x)` << 1 */ ++ {0x0000000113742d7c, 0x00000001a874f11e}, ++ /* x^73728 mod p(x)` << 1, x^73792 mod p(x)` << 1 */ ++ {0x000000019c5920ba, 0x000000010d5a4254}, ++ /* x^72704 mod p(x)` << 1, x^72768 mod p(x)` << 1 */ ++ {0x000000005216d2d6, 0x00000000bbb2f5d6}, ++ /* x^71680 mod p(x)` << 1, x^71744 mod p(x)` << 1 */ ++ {0x0000000136f5ad8a, 0x0000000179cc0e36}, ++ /* x^70656 mod p(x)` << 1, x^70720 mod p(x)` << 1 */ ++ {0x000000018b07beb6, 0x00000001dca1da4a}, ++ /* x^69632 mod p(x)` << 1, x^69696 mod p(x)` << 1 */ ++ {0x00000000db1e93b0, 0x00000000feb1a192}, ++ /* x^68608 mod p(x)` << 1, x^68672 mod p(x)` << 1 */ ++ {0x000000000b96fa3a, 0x00000000d1eeedd6}, ++ /* x^67584 mod p(x)` << 1, x^67648 mod p(x)` << 1 */ ++ {0x00000001d9968af0, 0x000000008fad9bb4}, ++ /* x^66560 mod p(x)` << 1, x^66624 mod p(x)` << 1 */ ++ {0x000000000e4a77a2, 0x00000001884938e4}, ++ /* x^65536 mod p(x)` << 1, x^65600 mod p(x)` << 1 */ ++ {0x00000000508c2ac8, 0x00000001bc2e9bc0}, ++ /* x^64512 mod p(x)` << 1, x^64576 mod p(x)` << 1 */ ++ {0x0000000021572a80, 0x00000001f9658a68}, ++ /* x^63488 mod p(x)` << 1, x^63552 mod p(x)` << 1 */ ++ {0x00000001b859daf2, 0x000000001b9224fc}, ++ /* x^62464 mod p(x)` << 1, x^62528 mod p(x)` << 1 */ ++ {0x000000016f788474, 0x0000000055b2fb84}, ++ /* x^61440 mod p(x)` << 1, x^61504 mod p(x)` << 1 */ ++ {0x00000001b438810e, 0x000000018b090348}, ++ /* x^60416 mod p(x)` << 1, x^60480 mod p(x)` << 1 */ ++ {0x0000000095ddc6f2, 0x000000011ccbd5ea}, ++ /* x^59392 mod p(x)` << 1, x^59456 mod p(x)` << 1 */ ++ {0x00000001d977c20c, 0x0000000007ae47f8}, ++ /* x^58368 mod p(x)` << 1, x^58432 mod p(x)` << 1 */ ++ {0x00000000ebedb99a, 0x0000000172acbec0}, ++ /* x^57344 mod p(x)` << 1, x^57408 mod p(x)` << 1 */ ++ {0x00000001df9e9e92, 0x00000001c6e3ff20}, ++ /* x^56320 mod p(x)` << 1, x^56384 mod p(x)` << 1 */ ++ {0x00000001a4a3f952, 0x00000000e1b38744}, ++ /* x^55296 mod p(x)` << 1, x^55360 mod p(x)` << 1 */ ++ {0x00000000e2f51220, 0x00000000791585b2}, ++ /* x^54272 mod p(x)` << 1, x^54336 mod p(x)` << 1 */ ++ {0x000000004aa01f3e, 0x00000000ac53b894}, ++ /* x^53248 mod p(x)` << 1, x^53312 mod p(x)` << 1 */ ++ {0x00000000b3e90a58, 0x00000001ed5f2cf4}, ++ /* x^52224 mod p(x)` << 1, x^52288 mod p(x)` << 1 */ ++ {0x000000000c9ca2aa, 0x00000001df48b2e0}, ++ /* x^51200 mod p(x)` << 1, x^51264 mod p(x)` << 1 */ ++ {0x0000000151682316, 0x00000000049c1c62}, ++ /* x^50176 mod p(x)` << 1, x^50240 mod p(x)` << 1 */ ++ {0x0000000036fce78c, 0x000000017c460c12}, ++ /* x^49152 mod p(x)` << 1, x^49216 mod p(x)` << 1 */ ++ {0x000000009037dc10, 0x000000015be4da7e}, ++ /* x^48128 mod p(x)` << 1, x^48192 mod p(x)` << 1 */ ++ {0x00000000d3298582, 0x000000010f38f668}, ++ /* x^47104 mod p(x)` << 1, x^47168 mod p(x)` << 1 */ ++ {0x00000001b42e8ad6, 0x0000000039f40a00}, ++ /* x^46080 mod p(x)` << 1, x^46144 mod p(x)` << 1 */ ++ {0x00000000142a9838, 0x00000000bd4c10c4}, ++ /* x^45056 mod p(x)` << 1, x^45120 mod p(x)` << 1 */ ++ {0x0000000109c7f190, 0x0000000042db1d98}, ++ /* x^44032 mod p(x)` << 1, x^44096 mod p(x)` << 1 */ ++ {0x0000000056ff9310, 0x00000001c905bae6}, ++ /* x^43008 mod p(x)` << 1, x^43072 mod p(x)` << 1 */ ++ {0x00000001594513aa, 0x00000000069d40ea}, ++ /* x^41984 mod p(x)` << 1, x^42048 mod p(x)` << 1 */ ++ {0x00000001e3b5b1e8, 0x000000008e4fbad0}, ++ /* x^40960 mod p(x)` << 1, x^41024 mod p(x)` << 1 */ ++ {0x000000011dd5fc08, 0x0000000047bedd46}, ++ /* x^39936 mod p(x)` << 1, x^40000 mod p(x)` << 1 */ ++ {0x00000001675f0cc2, 0x0000000026396bf8}, ++ /* x^38912 mod p(x)` << 1, x^38976 mod p(x)` << 1 */ ++ {0x00000000d1c8dd44, 0x00000000379beb92}, ++ /* x^37888 mod p(x)` << 1, x^37952 mod p(x)` << 1 */ ++ {0x0000000115ebd3d8, 0x000000000abae54a}, ++ /* x^36864 mod p(x)` << 1, x^36928 mod p(x)` << 1 */ ++ {0x00000001ecbd0dac, 0x0000000007e6a128}, ++ /* x^35840 mod p(x)` << 1, x^35904 mod p(x)` << 1 */ ++ {0x00000000cdf67af2, 0x000000000ade29d2}, ++ /* x^34816 mod p(x)` << 1, x^34880 mod p(x)` << 1 */ ++ {0x000000004c01ff4c, 0x00000000f974c45c}, ++ /* x^33792 mod p(x)` << 1, x^33856 mod p(x)` << 1 */ ++ {0x00000000f2d8657e, 0x00000000e77ac60a}, ++ /* x^32768 mod p(x)` << 1, x^32832 mod p(x)` << 1 */ ++ {0x000000006bae74c4, 0x0000000145895816}, ++ /* x^31744 mod p(x)` << 1, x^31808 mod p(x)` << 1 */ ++ {0x0000000152af8aa0, 0x0000000038e362be}, ++ /* x^30720 mod p(x)` << 1, x^30784 mod p(x)` << 1 */ ++ {0x0000000004663802, 0x000000007f991a64}, ++ /* x^29696 mod p(x)` << 1, x^29760 mod p(x)` << 1 */ ++ {0x00000001ab2f5afc, 0x00000000fa366d3a}, ++ /* x^28672 mod p(x)` << 1, x^28736 mod p(x)` << 1 */ ++ {0x0000000074a4ebd4, 0x00000001a2bb34f0}, ++ /* x^27648 mod p(x)` << 1, x^27712 mod p(x)` << 1 */ ++ {0x00000001d7ab3a4c, 0x0000000028a9981e}, ++ /* x^26624 mod p(x)` << 1, x^26688 mod p(x)` << 1 */ ++ {0x00000001a8da60c6, 0x00000001dbc672be}, ++ /* x^25600 mod p(x)` << 1, x^25664 mod p(x)` << 1 */ ++ {0x000000013cf63820, 0x00000000b04d77f6}, ++ /* x^24576 mod p(x)` << 1, x^24640 mod p(x)` << 1 */ ++ {0x00000000bec12e1e, 0x0000000124400d96}, ++ /* x^23552 mod p(x)` << 1, x^23616 mod p(x)` << 1 */ ++ {0x00000001c6368010, 0x000000014ca4b414}, ++ /* x^22528 mod p(x)` << 1, x^22592 mod p(x)` << 1 */ ++ {0x00000001e6e78758, 0x000000012fe2c938}, ++ /* x^21504 mod p(x)` << 1, x^21568 mod p(x)` << 1 */ ++ {0x000000008d7f2b3c, 0x00000001faed01e6}, ++ /* x^20480 mod p(x)` << 1, x^20544 mod p(x)` << 1 */ ++ {0x000000016b4a156e, 0x000000007e80ecfe}, ++ /* x^19456 mod p(x)` << 1, x^19520 mod p(x)` << 1 */ ++ {0x00000001c63cfeb6, 0x0000000098daee94}, ++ /* x^18432 mod p(x)` << 1, x^18496 mod p(x)` << 1 */ ++ {0x000000015f902670, 0x000000010a04edea}, ++ /* x^17408 mod p(x)` << 1, x^17472 mod p(x)` << 1 */ ++ {0x00000001cd5de11e, 0x00000001c00b4524}, ++ /* x^16384 mod p(x)` << 1, x^16448 mod p(x)` << 1 */ ++ {0x000000001acaec54, 0x0000000170296550}, ++ /* x^15360 mod p(x)` << 1, x^15424 mod p(x)` << 1 */ ++ {0x000000002bd0ca78, 0x0000000181afaa48}, ++ /* x^14336 mod p(x)` << 1, x^14400 mod p(x)` << 1 */ ++ {0x0000000032d63d5c, 0x0000000185a31ffa}, ++ /* x^13312 mod p(x)` << 1, x^13376 mod p(x)` << 1 */ ++ {0x000000001c6d4e4c, 0x000000002469f608}, ++ /* x^12288 mod p(x)` << 1, x^12352 mod p(x)` << 1 */ ++ {0x0000000106a60b92, 0x000000006980102a}, ++ /* x^11264 mod p(x)` << 1, x^11328 mod p(x)` << 1 */ ++ {0x00000000d3855e12, 0x0000000111ea9ca8}, ++ /* x^10240 mod p(x)` << 1, x^10304 mod p(x)` << 1 */ ++ {0x00000000e3125636, 0x00000001bd1d29ce}, ++ /* x^9216 mod p(x)` << 1, x^9280 mod p(x)` << 1 */ ++ {0x000000009e8f7ea4, 0x00000001b34b9580}, ++ /* x^8192 mod p(x)` << 1, x^8256 mod p(x)` << 1 */ ++ {0x00000001c82e562c, 0x000000003076054e}, ++ /* x^7168 mod p(x)` << 1, x^7232 mod p(x)` << 1 */ ++ {0x00000000ca9f09ce, 0x000000012a608ea4}, ++ /* x^6144 mod p(x)` << 1, x^6208 mod p(x)` << 1 */ ++ {0x00000000c63764e6, 0x00000000784d05fe}, ++ /* x^5120 mod p(x)` << 1, x^5184 mod p(x)` << 1 */ ++ {0x0000000168d2e49e, 0x000000016ef0d82a}, ++ /* x^4096 mod p(x)` << 1, x^4160 mod p(x)` << 1 */ ++ {0x00000000e986c148, 0x0000000075bda454}, ++ /* x^3072 mod p(x)` << 1, x^3136 mod p(x)` << 1 */ ++ {0x00000000cfb65894, 0x000000003dc0a1c4}, ++ /* x^2048 mod p(x)` << 1, x^2112 mod p(x)` << 1 */ ++ {0x0000000111cadee4, 0x00000000e9a5d8be}, ++ /* x^1024 mod p(x)` << 1, x^1088 mod p(x)` << 1 */ ++ {0x0000000171fb63ce, 0x00000001609bc4b4} ++#endif /* __LITTLE_ENDIAN__ */ ++}; + +- /* x^32 mod p(x)`, x^64 mod p(x)`, x^96 mod p(x)`, x^128 mod p(x)` */ +- .octa 0x82f63b786ea2d55ca66805eb18b8ea18 ++/* Reduce final 1024-2048 bits to 64 bits, shifting 32 bits to include the ++ * trailing 32 bits of zeros */ ++ ++static const __vector unsigned long long vcrc_short_const[16] __attribute__(( ++ aligned(16))) = { ++#ifdef __LITTLE_ENDIAN__ ++ /* x^1952 mod p(x) , x^1984 mod p(x) , x^2016 mod p(x) , x^2048 mod p(x) */ ++ {0x5cf015c388e56f72, 0x7fec2963e5bf8048}, ++ /* x^1824 mod p(x) , x^1856 mod p(x) , x^1888 mod p(x) , x^1920 mod p(x) */ ++ {0x963a18920246e2e6, 0x38e888d4844752a9}, ++ /* x^1696 mod p(x) , x^1728 mod p(x) , x^1760 mod p(x) , x^1792 mod p(x) */ ++ {0x419a441956993a31, 0x42316c00730206ad}, ++ /* x^1568 mod p(x) , x^1600 mod p(x) , x^1632 mod p(x) , x^1664 mod p(x) */ ++ {0x924752ba2b830011, 0x543d5c543e65ddf9}, ++ /* x^1440 mod p(x) , x^1472 mod p(x) , x^1504 mod p(x) , x^1536 mod p(x) */ ++ {0x55bd7f9518e4a304, 0x78e87aaf56767c92}, ++ /* x^1312 mod p(x) , x^1344 mod p(x) , x^1376 mod p(x) , x^1408 mod p(x) */ ++ {0x6d76739fe0553f1e, 0x8f68fcec1903da7f}, ++ /* x^1184 mod p(x) , x^1216 mod p(x) , x^1248 mod p(x) , x^1280 mod p(x) */ ++ {0xc133722b1fe0b5c3, 0x3f4840246791d588}, ++ /* x^1056 mod p(x) , x^1088 mod p(x) , x^1120 mod p(x) , x^1152 mod p(x) */ ++ {0x64b67ee0e55ef1f3, 0x34c96751b04de25a}, ++ /* x^928 mod p(x) , x^960 mod p(x) , x^992 mod p(x) , x^1024 mod p(x) */ ++ {0x069db049b8fdb1e7, 0x156c8e180b4a395b}, ++ /* x^800 mod p(x) , x^832 mod p(x) , x^864 mod p(x) , x^896 mod p(x) */ ++ {0xa11bfaf3c9e90b9e, 0xe0b99ccbe661f7be}, ++ /* x^672 mod p(x) , x^704 mod p(x) , x^736 mod p(x) , x^768 mod p(x) */ ++ {0x817cdc5119b29a35, 0x041d37768cd75659}, ++ /* x^544 mod p(x) , x^576 mod p(x) , x^608 mod p(x) , x^640 mod p(x) */ ++ {0x1ce9d94b36c41f1c, 0x3a0777818cfaa965}, ++ /* x^416 mod p(x) , x^448 mod p(x) , x^480 mod p(x) , x^512 mod p(x) */ ++ {0x4f256efcb82be955, 0x0e148e8252377a55}, ++ /* x^288 mod p(x) , x^320 mod p(x) , x^352 mod p(x) , x^384 mod p(x) */ ++ {0xec1631edb2dea967, 0x9c25531d19e65dde}, ++ /* x^160 mod p(x) , x^192 mod p(x) , x^224 mod p(x) , x^256 mod p(x) */ ++ {0x5d27e147510ac59a, 0x790606ff9957c0a6}, ++ /* x^32 mod p(x) , x^64 mod p(x) , x^96 mod p(x) , x^128 mod p(x) */ ++ {0xa66805eb18b8ea18, 0x82f63b786ea2d55c} ++#else /* __LITTLE_ENDIAN__ */ ++ /* x^1952 mod p(x) , x^1984 mod p(x) , x^2016 mod p(x) , x^2048 mod p(x) */ ++ {0x7fec2963e5bf8048, 0x5cf015c388e56f72}, ++ /* x^1824 mod p(x) , x^1856 mod p(x) , x^1888 mod p(x) , x^1920 mod p(x) */ ++ {0x38e888d4844752a9, 0x963a18920246e2e6}, ++ /* x^1696 mod p(x) , x^1728 mod p(x) , x^1760 mod p(x) , x^1792 mod p(x) */ ++ {0x42316c00730206ad, 0x419a441956993a31}, ++ /* x^1568 mod p(x) , x^1600 mod p(x) , x^1632 mod p(x) , x^1664 mod p(x) */ ++ {0x543d5c543e65ddf9, 0x924752ba2b830011}, ++ /* x^1440 mod p(x) , x^1472 mod p(x) , x^1504 mod p(x) , x^1536 mod p(x) */ ++ {0x78e87aaf56767c92, 0x55bd7f9518e4a304}, ++ /* x^1312 mod p(x) , x^1344 mod p(x) , x^1376 mod p(x) , x^1408 mod p(x) */ ++ {0x8f68fcec1903da7f, 0x6d76739fe0553f1e}, ++ /* x^1184 mod p(x) , x^1216 mod p(x) , x^1248 mod p(x) , x^1280 mod p(x) */ ++ {0x3f4840246791d588, 0xc133722b1fe0b5c3}, ++ /* x^1056 mod p(x) , x^1088 mod p(x) , x^1120 mod p(x) , x^1152 mod p(x) */ ++ {0x34c96751b04de25a, 0x64b67ee0e55ef1f3}, ++ /* x^928 mod p(x) , x^960 mod p(x) , x^992 mod p(x) , x^1024 mod p(x) */ ++ {0x156c8e180b4a395b, 0x069db049b8fdb1e7}, ++ /* x^800 mod p(x) , x^832 mod p(x) , x^864 mod p(x) , x^896 mod p(x) */ ++ {0xe0b99ccbe661f7be, 0xa11bfaf3c9e90b9e}, ++ /* x^672 mod p(x) , x^704 mod p(x) , x^736 mod p(x) , x^768 mod p(x) */ ++ {0x041d37768cd75659, 0x817cdc5119b29a35}, ++ /* x^544 mod p(x) , x^576 mod p(x) , x^608 mod p(x) , x^640 mod p(x) */ ++ {0x3a0777818cfaa965, 0x1ce9d94b36c41f1c}, ++ /* x^416 mod p(x) , x^448 mod p(x) , x^480 mod p(x) , x^512 mod p(x) */ ++ {0x0e148e8252377a55, 0x4f256efcb82be955}, ++ /* x^288 mod p(x) , x^320 mod p(x) , x^352 mod p(x) , x^384 mod p(x) */ ++ {0x9c25531d19e65dde, 0xec1631edb2dea967}, ++ /* x^160 mod p(x) , x^192 mod p(x) , x^224 mod p(x) , x^256 mod p(x) */ ++ {0x790606ff9957c0a6, 0x5d27e147510ac59a}, ++ /* x^32 mod p(x) , x^64 mod p(x) , x^96 mod p(x) , x^128 mod p(x) */ ++ {0x82f63b786ea2d55c, 0xa66805eb18b8ea18} ++#endif /* __LITTLE_ENDIAN__ */ ++}; + +- .barrett_constants : +- /* 33 bit reflected Barrett constant m - (4^32)/n */ +- .octa 0x000000000000000000000000dea713f1 /* x^64 div p(x)` */ +- /* 33 bit reflected Barrett constant n */ +- .octa 0x00000000000000000000000105ec76f1 +-#endif ++/* Barrett constants */ ++/* 33 bit reflected Barrett constant m - (4^32)/n */ ++ ++static const __vector unsigned long long v_Barrett_const[2] ++ __attribute__((aligned(16))) = { ++/* x^64 div p(x) */ ++#ifdef __LITTLE_ENDIAN__ ++ {0x00000000dea713f1, 0x0000000000000000}, ++ {0x0000000105ec76f1, 0x0000000000000000} ++#else /* __LITTLE_ENDIAN__ */ ++ {0x0000000000000000, 0x00000000dea713f1}, ++ {0x0000000000000000, 0x0000000105ec76f1} ++#endif /* __LITTLE_ENDIAN__ */ ++}; ++#endif /* POWER8_INTRINSICS */ +diff --git a/util/crc32c_test.cc b/util/crc32c_test.cc +index 3e4f7396e7..546c6a4401 100644 +--- a/util/crc32c_test.cc ++++ b/util/crc32c_test.cc +@@ -108,6 +108,9 @@ TEST(CRC, StandardResults) { + EXPECT_EQ(~expected.crc32c, result); + } + ++ // NULL buffer ++ EXPECT_EQ((uint32_t)0, Value(NULL, 0)); ++ + // Test 2: stitching two computations + for (auto expected : expectedResults) { + size_t partialLength = expected.length / 2; diff --git a/package/rocksdb/Config.in b/package/rocksdb/Config.in new file mode 100644 index 00000000..c55170c1 --- /dev/null +++ b/package/rocksdb/Config.in @@ -0,0 +1,26 @@ +config BR2_PACKAGE_ROCKSDB + bool "rocksdb" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11 + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_WCHAR + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # std::future + help + The RocksDB library provides a persistent key value store. + Keys and values are arbitrary byte arrays. The keys are + ordered within the key value store according to a + user-specified comparator function. + + The library is maintained by the Facebook Database Engineering + Team, and is based on LevelDB, by Sanjay Ghemawat and Jeff + Dean at Google. + + http://rocksdb.org + +comment "rocksdb needs a toolchain w/ C++, threads, wchar, gcc >= 4.8" + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + +comment "rocksdb needs a toolchain not affected by GCC bug 64735" + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735 diff --git a/package/rocksdb/rocksdb.hash b/package/rocksdb/rocksdb.hash new file mode 100644 index 00000000..35c4a702 --- /dev/null +++ b/package/rocksdb/rocksdb.hash @@ -0,0 +1,8 @@ +# Locally computed: +sha256 b86741983c5842716128efc2eecc1a2f3bc86ba5125cf3111fb58d26fb195ff0 rocksdb-6.13.3.tar.gz + +# Hash for license files: +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE.Apache +sha256 b568f1f37a5a1d37a3e981e7c8b7fc4856ca33b2ca0a45bc8e847aaaf7afe485 LICENSE.leveldb +sha256 5791f5e0a4569112a97183581a8550e18db9fdf666479485fb98be10489ed5ca README.md diff --git a/package/rocksdb/rocksdb.mk b/package/rocksdb/rocksdb.mk new file mode 100644 index 00000000..3b858313 --- /dev/null +++ b/package/rocksdb/rocksdb.mk @@ -0,0 +1,107 @@ +################################################################################ +# +# rocksdb +# +################################################################################ + +ROCKSDB_VERSION = 6.13.3 +ROCKSDB_SITE = $(call github,facebook,rocksdb,v$(ROCKSDB_VERSION)) +ROCKSDB_LICENSE = GPL-2.0 or Apache-2.0 +ROCKSDB_LICENSE_FILES = COPYING LICENSE.Apache LICENSE.leveldb README.md +ROCKSDB_INSTALL_STAGING = YES + +ROCKSDB_MAKE_OPTS = \ + PORTABLE=1 \ + PREFIX=/usr + +# Internal error, aborting at dwarf2cfi.c:2802 in connect_traces +# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58864 +ifeq ($(BR2_m68k_cf),y) +ROCKSDB_EXTRA_CXXFLAGS += -fno-defer-pop +endif + +ifeq ($(BR2_PACKAGE_BZIP2),y) +ROCKSDB_DEPENDENCIES += bzip2 +ROCKSDB_MAKE_OPTS += ROCKSDB_DISABLE_BZ2=0 +else +ROCKSDB_MAKE_OPTS += ROCKSDB_DISABLE_BZ2=1 +endif + +ifeq ($(BR2_PACKAGE_GFLAGS),y) +ROCKSDB_DEPENDENCIES += gflags +ROCKSDB_MAKE_OPTS += ROCKSDB_DISABLE_GFLAGS=0 +else +ROCKSDB_MAKE_OPTS += ROCKSDB_DISABLE_GFLAGS=1 +endif + +ifeq ($(BR2_PACKAGE_JEMALLOC),y) +ROCKSDB_DEPENDENCIES += jemalloc +ROCKSDB_MAKE_OPTS += ROCKSDB_DISABLE_JEMALLOC=0 +else +ROCKSDB_MAKE_OPTS += ROCKSDB_DISABLE_JEMALLOC=1 +endif + +ifeq ($(BR2_PACKAGE_LZ4),y) +ROCKSDB_DEPENDENCIES += lz4 +ROCKSDB_MAKE_OPTS += ROCKSDB_DISABLE_LZ4=0 +else +ROCKSDB_MAKE_OPTS += ROCKSDB_DISABLE_LZ4=1 +endif + +ifeq ($(BR2_PACKAGE_SNAPPY),y) +ROCKSDB_DEPENDENCIES += snappy +ROCKSDB_MAKE_OPTS += ROCKSDB_DISABLE_SNAPPY=0 +else +ROCKSDB_MAKE_OPTS += ROCKSDB_DISABLE_SNAPPY=1 +endif + +ifeq ($(BR2_PACKAGE_ZLIB),y) +ROCKSDB_DEPENDENCIES += zlib +ROCKSDB_MAKE_OPTS += ROCKSDB_DISABLE_ZLIB=0 +else +ROCKSDB_MAKE_OPTS += ROCKSDB_DISABLE_ZLIB=1 +endif + +ifeq ($(BR2_PACKAGE_ZSTD),y) +ROCKSDB_DEPENDENCIES += zstd +ROCKSDB_MAKE_OPTS += ROCKSDB_DISABLE_ZSTD=0 +else +ROCKSDB_MAKE_OPTS += ROCKSDB_DISABLE_ZSTD=1 +endif + +ifeq ($(BR2_GCC_ENABLE_LTO),y) +ROCKSDB_MAKE_OPTS += USE_LTO=1 +else +ROCKSDB_MAKE_OPTS += USE_LTO=0 +endif + +ifeq ($(BR2_STATIC_LIBS),y) +ROCKSDB_BUILD_TARGETS += static_lib +ROCKSDB_INSTALL_TARGETS += install-static +ROCKSDB_EXTRA_CXXFLAGS += -DROCKSDB_NO_DYNAMIC_EXTENSION +else ifeq ($(BR2_SHARED_LIBS),y) +ROCKSDB_BUILD_TARGETS += shared_lib +ROCKSDB_INSTALL_TARGETS += install-shared +else ifeq ($(BR2_SHARED_STATIC_LIBS),y) +ROCKSDB_BUILD_TARGETS += shared_lib static_lib +ROCKSDB_INSTALL_TARGETS += install-shared install-static +endif + +ROCKSDB_MAKE_OPTS += EXTRA_CXXFLAGS="$(ROCKSDB_EXTRA_CXXFLAGS)" + +define ROCKSDB_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) $(ROCKSDB_MAKE_OPTS) -C $(@D) \ + $(ROCKSDB_BUILD_TARGETS) +endef + +define ROCKSDB_INSTALL_STAGING_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) $(ROCKSDB_MAKE_OPTS) -C $(@D) \ + DESTDIR=$(STAGING_DIR) $(ROCKSDB_INSTALL_TARGETS) +endef + +define ROCKSDB_INSTALL_TARGET_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) $(ROCKSDB_MAKE_OPTS) -C $(@D) \ + DESTDIR=$(TARGET_DIR) $(ROCKSDB_INSTALL_TARGETS) +endef + +$(eval $(generic-package)) diff --git a/package/rp-pppoe/0001-krn-plugin.patch b/package/rp-pppoe/0001-krn-plugin.patch new file mode 100644 index 00000000..c386e85f --- /dev/null +++ b/package/rp-pppoe/0001-krn-plugin.patch @@ -0,0 +1,27 @@ +[Fabrice: update patch for 3.14] +Signed-off-by: Fabrice Fontaine +diff -Nura rp-pppoe-3.11.orig/src/configure rp-pppoe-3.11/src/configure +--- rp-pppoe-3.11.orig/src/configure 2012-08-21 10:01:10.536440032 -0300 ++++ rp-pppoe-3.11/src/configure 2012-08-21 10:01:45.353442397 -0300 +@@ -4517,7 +4517,7 @@ + modprobe pppoe > /dev/null 2>&1 + fi + if test "$cross_compiling" = yes; then : +- ac_cv_linux_kernel_pppoe=no; echo "cross-compiling, default: " ++ ac_cv_linux_kernel_pppoe=yes; echo "cross-compiling, default: " + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ +diff -Nura rp-pppoe-3.11.orig/src/pppoe-server.c rp-pppoe-3.11/src/pppoe-server.c +--- rp-pppoe-3.11.orig/src/pppoe-server.c 2012-08-21 10:01:10.535440032 -0300 ++++ rp-pppoe-3.11/src/pppoe-server.c 2012-08-21 10:02:02.597443569 -0300 +@@ -20,6 +20,9 @@ + + #include "config.h" + ++/* Patched hack to make this cross compile */ ++#define HAVE_LINUX_KERNEL_PPPOE 1 ++ + #if defined(HAVE_NETPACKET_PACKET_H) || defined(HAVE_LINUX_IF_PACKET_H) + #define _POSIX_SOURCE 1 /* For sigaction defines */ + #endif diff --git a/package/rp-pppoe/Config.in b/package/rp-pppoe/Config.in new file mode 100644 index 00000000..12f981d8 --- /dev/null +++ b/package/rp-pppoe/Config.in @@ -0,0 +1,19 @@ +comment "rp-pppoe needs a uClibc or glibc toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS || BR2_TOOLCHAIN_USES_MUSL + depends on BR2_USE_MMU + +config BR2_PACKAGE_RP_PPPOE + bool "rp-pppoe" + depends on !BR2_STATIC_LIBS + depends on !BR2_TOOLCHAIN_USES_MUSL # pppd + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_PPPD + help + An implementation of the Point-to-point protocol over + Ethernet. Has userspace client and server deamons. You + likely only need this package if you are implementing the + pppoe server that will service other pppoe client + devices. Otherwise the normal client functionality already + exists in the pppd package (and kernel). + + https://dianne.skoll.ca/projects/rp-pppoe/ diff --git a/package/rp-pppoe/rp-pppoe.hash b/package/rp-pppoe/rp-pppoe.hash new file mode 100644 index 00000000..806bab1b --- /dev/null +++ b/package/rp-pppoe/rp-pppoe.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 7825232f64ab4d618ef074d62d145ae43d6edc91b9a718c6130a4742bac40e2a rp-pppoe-3.14.tar.gz +# Locally computed +sha256 464006ba771074f4022db14f58a29a0b447b6fdde9529cf0331be396b6279162 doc/LICENSE diff --git a/package/rp-pppoe/rp-pppoe.mk b/package/rp-pppoe/rp-pppoe.mk new file mode 100644 index 00000000..ce85da11 --- /dev/null +++ b/package/rp-pppoe/rp-pppoe.mk @@ -0,0 +1,43 @@ +################################################################################ +# +# rp-pppoe +# +################################################################################ + +RP_PPPOE_VERSION = 3.14 +RP_PPPOE_SITE = https://dianne.skoll.ca/projects/rp-pppoe/download +RP_PPPOE_LICENSE = GPL-2.0 +RP_PPPOE_LICENSE_FILES = doc/LICENSE +RP_PPPOE_CPE_ID_VENDOR = rp-pppoe_project + +RP_PPPOE_DEPENDENCIES = pppd +RP_PPPOE_SUBDIR = src +RP_PPPOE_TARGET_FILES = pppoe pppoe-server pppoe-relay pppoe-sniff +RP_PPPOE_TARGET_SCRIPTS = pppoe-connect pppoe-init pppoe-setup pppoe-start \ + pppoe-status pppoe-stop +RP_PPPOE_MAKE_OPTS = PLUGIN_DIR=/usr/lib/pppd/$(PPPD_VERSION) +RP_PPPOE_CONF_OPTS = --disable-debugging + +# The pppd, echo, setsid and id paths must be the ones on the +# target. Indeed, the result of these checks is used to replace +# variables in scripts that are installed in the target. +RP_PPPOE_CONF_ENV = \ + rpppoe_cv_pack_bitfields=normal \ + ac_cv_path_PPPD=/usr/sbin/pppd \ + ac_cv_path_ECHO=/bin/echo \ + ac_cv_path_SETSID=/usr/bin/setsid \ + ac_cv_path_ID=/usr/bin/id \ + PPPD_H=$(PPPD_DIR)/pppd/pppd.h + +define RP_PPPOE_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0644 $(@D)/configs/pppoe.conf \ + $(TARGET_DIR)/etc/ppp/pppoe.conf + for ff in $(RP_PPPOE_TARGET_FILES); do \ + $(INSTALL) -m 0755 $(@D)/src/$$ff $(TARGET_DIR)/usr/sbin/$$ff || exit 1; \ + done + for ff in $(RP_PPPOE_TARGET_SCRIPTS); do \ + $(INSTALL) -m 0755 $(@D)/scripts/$$ff $(TARGET_DIR)/usr/sbin/$$ff || exit 1; \ + done +endef + +$(eval $(autotools-package)) diff --git a/package/rpcbind/0001-Remove-yellow-pages-support.patch b/package/rpcbind/0001-Remove-yellow-pages-support.patch new file mode 100644 index 00000000..314e32e9 --- /dev/null +++ b/package/rpcbind/0001-Remove-yellow-pages-support.patch @@ -0,0 +1,56 @@ +From 226b9c57ff403b407dbf1ff8a615da455a4cbd23 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sat, 10 Nov 2012 22:03:43 +0100 +Subject: [PATCH] Remove yellow pages support + +This support requires yellow pages support in libtirpc, which isn't +available. As most Buildroot users are most likely never going to need +such feature, get rid of it. + +Signed-off-by: Thomas Petazzoni +--- + src/security.c | 18 ------------------ + 1 file changed, 18 deletions(-) + +diff --git a/src/security.c b/src/security.c +index 0c9453f..abc81bb 100644 +--- a/src/security.c ++++ b/src/security.c +@@ -24,9 +24,6 @@ + #include + #include + #include +-#include +-#include +-#include + #else + # define MOUNTPROC_MNT 1 + # define MOUNTPROC_UMNT 3 +@@ -325,24 +322,9 @@ check_callit(SVCXPRT *xprt, struct r_rmtcall_args *args, int versnum /*__unused* + args->rmt_proc != MOUNTPROC_UMNT) + break; + goto deny; +- case YPBINDPROG: +- if (args->rmt_proc != YPBINDPROC_SETDOM) +- break; +- /* FALLTHROUGH */ +- case YPPASSWDPROG: + case NFS_PROGRAM: + case RQUOTAPROG: + goto deny; +- case YPPROG: +- switch (args->rmt_proc) { +- case YPPROC_ALL: +- case YPPROC_MATCH: +- case YPPROC_FIRST: +- case YPPROC_NEXT: +- goto deny; +- default: +- break; +- } + default: + break; + } +-- +2.4.5 + diff --git a/package/rpcbind/Config.in b/package/rpcbind/Config.in new file mode 100644 index 00000000..9cde7bba --- /dev/null +++ b/package/rpcbind/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_RPCBIND + bool "rpcbind" + # We really need libtirpc and can't work with the native RPC + # implementation of toolchains. + depends on BR2_TOOLCHAIN_HAS_THREADS # libtirpc + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBTIRPC + help + The rpcbind utility is a server that converts RPC program + numbers into universal addresses. + + https://sourceforge.net/projects/rpcbind/ + +comment "rpcbind needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU diff --git a/package/rpcbind/S30rpcbind b/package/rpcbind/S30rpcbind new file mode 100644 index 00000000..b224322e --- /dev/null +++ b/package/rpcbind/S30rpcbind @@ -0,0 +1,38 @@ +#!/bin/sh +# +# Starts rpcbind. +# + +start() { + printf "Starting rpcbind: " + umask 077 + start-stop-daemon -S -q -p /var/run/rpcbind.pid --exec /usr/sbin/rpcbind + echo "OK" +} +stop() { + printf "Stopping rpcbind daemon: " + start-stop-daemon -K -q -p /var/run/rpcbind.pid + echo "OK" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? + diff --git a/package/rpcbind/rpcbind.hash b/package/rpcbind/rpcbind.hash new file mode 100644 index 00000000..1960b86c --- /dev/null +++ b/package/rpcbind/rpcbind.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 2ce360683963b35c19c43f0ee2c7f18aa5b81ef41c3fdbd15ffcb00b8bffda7a rpcbind-1.2.5.tar.bz2 +sha256 2b9477d2f4ab277b29702958f0058546edc120aae4b5fb8b8d1a9652104e1ba3 COPYING diff --git a/package/rpcbind/rpcbind.mk b/package/rpcbind/rpcbind.mk new file mode 100644 index 00000000..25916f0b --- /dev/null +++ b/package/rpcbind/rpcbind.mk @@ -0,0 +1,38 @@ +################################################################################ +# +# rpcbind +# +################################################################################ + +RPCBIND_VERSION = 1.2.5 +RPCBIND_SITE = http://downloads.sourceforge.net/project/rpcbind/rpcbind/$(RPCBIND_VERSION) +RPCBIND_SOURCE = rpcbind-$(RPCBIND_VERSION).tar.bz2 +RPCBIND_LICENSE = BSD-3-Clause +RPCBIND_LICENSE_FILES = COPYING +RPCBIND_CPE_ID_VENDOR = rpcbind_project + +RPCBIND_CONF_ENV += \ + CFLAGS="$(TARGET_CFLAGS) `$(PKG_CONFIG_HOST_BINARY) --cflags libtirpc`" +RPCBIND_DEPENDENCIES += libtirpc host-pkgconf +RPCBIND_CONF_OPTS += --with-rpcuser=root + +ifeq ($(BR2_INIT_SYSTEMD),y) +RPCBIND_CONF_OPTS += --with-systemdsystemunitdir=/usr/lib/systemd/system +RPCBIND_DEPENDENCIES += systemd +else +RPCBIND_CONF_OPTS += --with-systemdsystemunitdir=no +endif + +define RPCBIND_INSTALL_INIT_SYSTEMD + $(INSTALL) -m 0644 -D package/rpcbind/rpcbind.service \ + $(TARGET_DIR)/usr/lib/systemd/system/rpcbind.service + $(INSTALL) -m 0644 -D package/rpcbind/rpcbind.socket \ + $(TARGET_DIR)/usr/lib/systemd/system/rpcbind.socket +endef + +define RPCBIND_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/rpcbind/S30rpcbind \ + $(TARGET_DIR)/etc/init.d/S30rpcbind +endef + +$(eval $(autotools-package)) diff --git a/package/rpcbind/rpcbind.service b/package/rpcbind/rpcbind.service new file mode 100644 index 00000000..e41931df --- /dev/null +++ b/package/rpcbind/rpcbind.service @@ -0,0 +1,10 @@ +[Unit] +Description=RPC bind service +Requires=rpcbind.socket + +[Service] +Type=forking +ExecStart=/usr/sbin/rpcbind + +[Install] +Also=rpcbind.socket diff --git a/package/rpcbind/rpcbind.socket b/package/rpcbind/rpcbind.socket new file mode 100644 index 00000000..d63c1d97 --- /dev/null +++ b/package/rpcbind/rpcbind.socket @@ -0,0 +1,8 @@ +[Unit] +Description=RPCbind Server Activation Socket + +[Socket] +ListenStream=/var/run/rpcbind.sock + +[Install] +WantedBy=sockets.target diff --git a/package/rpi-bt-firmware/Config.in b/package/rpi-bt-firmware/Config.in new file mode 100644 index 00000000..45643d6a --- /dev/null +++ b/package/rpi-bt-firmware/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_RPI_BT_FIRMWARE + bool "rpi-bt-firmware" + depends on BR2_arm || BR2_aarch64 + help + Raspberry Pi 3 and Zero W Broadcom BCM43438 Bluetooth module + firmware. Raspberry Pi 3 Model B+ Broadcom BCM4345C0 + Bluetooth module firmware. + + https://github.com/LibreELEC/brcmfmac_sdio-firmware-rpi diff --git a/package/rpi-bt-firmware/rpi-bt-firmware.hash b/package/rpi-bt-firmware/rpi-bt-firmware.hash new file mode 100644 index 00000000..543c7374 --- /dev/null +++ b/package/rpi-bt-firmware/rpi-bt-firmware.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 cf806f6bdba0f803b90bc210f524a6ac37bac7ad19306c61474bb2dc59875e87 rpi-bt-firmware-9c0ffe9a7f0753b36ed88f7981905a989d940ea9.tar.gz +sha256 b16056fc91b82a0e3e8de8f86c2dac98201aa9dc3cbd33e8d38f1b087fcec30d LICENCE.broadcom_bcm43xx diff --git a/package/rpi-bt-firmware/rpi-bt-firmware.mk b/package/rpi-bt-firmware/rpi-bt-firmware.mk new file mode 100644 index 00000000..02754c0b --- /dev/null +++ b/package/rpi-bt-firmware/rpi-bt-firmware.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# rpi-bt-firmware +# +################################################################################ + +RPI_BT_FIRMWARE_VERSION = 9c0ffe9a7f0753b36ed88f7981905a989d940ea9 +RPI_BT_FIRMWARE_SITE = $(call github,LibreELEC,brcmfmac_sdio-firmware-rpi,$(RPI_BT_FIRMWARE_VERSION)) +RPI_BT_FIRMWARE_LICENSE = PROPRIETARY +RPI_BT_FIRMWARE_LICENSE_FILES = LICENCE.broadcom_bcm43xx + +define RPI_BT_FIRMWARE_INSTALL_TARGET_CMDS + $(INSTALL) -d $(TARGET_DIR)/lib/firmware/brcm + $(INSTALL) -m 0644 $(@D)/firmware/brcm/*.hcd $(TARGET_DIR)/lib/firmware/brcm +endef + +$(eval $(generic-package)) diff --git a/package/rpi-firmware/Config.in b/package/rpi-firmware/Config.in new file mode 100644 index 00000000..f5a25c56 --- /dev/null +++ b/package/rpi-firmware/Config.in @@ -0,0 +1,109 @@ +config BR2_PACKAGE_RPI_FIRMWARE + bool "rpi-firmware" + depends on BR2_arm || BR2_aarch64 + help + RaspberryPi Firmware + + Pre-compiled binaries of the current bootloader and GPU + firmware + + https://github.com/raspberrypi/firmware + +if BR2_PACKAGE_RPI_FIRMWARE + +choice + bool "rpi variant" + help + The Raspberry Pi 4 introduced a slightly different naming + convention and set of boot files. This option controls which + format to use. + +config BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI + bool "rpi 0/1/2/3" + help + The default set of files, for versions pre-4 + +config BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4 + bool "rpi 4" + help + The Raspberry Pi 4 files +endchoice + +choice + bool "Firmware to boot" + default BR2_PACKAGE_RPI_FIRMWARE_DEFAULT + help + There are three different firmware files: + - the default firmware, that enables standard GPU + features; + - the extended firmware, that enables additional GPU + features (eg. more audio/video codecs); + - the cut-down firmware, for emergency situations, with + only features required to boot a Linux kernel. + +config BR2_PACKAGE_RPI_FIRMWARE_DEFAULT + bool "default" + help + The default firmware, that enables standard GPU features. + +config BR2_PACKAGE_RPI_FIRMWARE_X + bool "extended ('x', more codecs)" + help + The extended firmware, that enables additional GPU features + (eg. more audio/video codecs). + +config BR2_PACKAGE_RPI_FIRMWARE_CD + bool "cut-down ('cd', emergency)" + help + The cut-down firmware, for emergency situations, with only + features required to boot a Linux kernel. + +endchoice + +config BR2_PACKAGE_RPI_FIRMWARE_BOOT + string + default "" if BR2_PACKAGE_RPI_FIRMWARE_DEFAULT && BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI + default "4" if BR2_PACKAGE_RPI_FIRMWARE_DEFAULT && BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4 + default "_x" if BR2_PACKAGE_RPI_FIRMWARE_X && BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI + default "4x" if BR2_PACKAGE_RPI_FIRMWARE_X && BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4 + default "_cd" if BR2_PACKAGE_RPI_FIRMWARE_CD && BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI + default "4cd" if BR2_PACKAGE_RPI_FIRMWARE_CD && BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4 + +config BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTBS + bool "Install Device Tree Blobs (DTBs)" + default y + depends on !BR2_LINUX_KERNEL_DTS_SUPPORT + help + If you are using a Linux kernel <= 3.18, you should say 'y' + here. + + If you are using a Linux kernel >= 3.19, you should say 'n' + here, and enable BR2_LINUX_KERNEL_DTS_SUPPORT to let the + kernel build the DTB. + +config BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS + bool "Install DTB overlays" + default y + depends on BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTBS \ + || BR2_LINUX_KERNEL_DTS_SUPPORT + select BR2_LINUX_KERNEL_DTB_OVERLAY_SUPPORT \ + if BR2_LINUX_KERNEL_DTS_SUPPORT + help + Say 'y' here if you need to load one or more of the DTB + overlays, to support HATs (Hardware Attached on Top, add-on + modules). + +config BR2_PACKAGE_RPI_FIRMWARE_INSTALL_VCDBG + bool "vcdbg" + depends on BR2_arm # prebuilt arm binary, rpi-userland + depends on BR2_TOOLCHAIN_USES_GLIBC + depends on BR2_INSTALL_LIBSTDCPP # rpi-userland + select BR2_PACKAGE_RPI_USERLAND + help + Install vcdbg, to help debug communication with the GPU. + +comment "vcdbg needs a glibc toolchain w/ C++" + depends on BR2_arm + depends on !BR2_TOOLCHAIN_USES_GLIBC || !BR2_INSTALL_LIBSTDCPP + +endif # BR2_PACKAGE_RPI_FIRMWARE diff --git a/package/rpi-firmware/cmdline.txt b/package/rpi-firmware/cmdline.txt new file mode 100644 index 00000000..155a5469 --- /dev/null +++ b/package/rpi-firmware/cmdline.txt @@ -0,0 +1 @@ +root=/dev/mmcblk0p2 rootwait console=tty1 console=ttyAMA0,115200 diff --git a/package/rpi-firmware/config.txt b/package/rpi-firmware/config.txt new file mode 100644 index 00000000..4a92a4dd --- /dev/null +++ b/package/rpi-firmware/config.txt @@ -0,0 +1,25 @@ +# Please note that this is only a sample, we recommend you to change it to fit +# your needs. +# You should override this file using a post-build script. +# See http://buildroot.org/manual.html#rootfs-custom +# and http://elinux.org/RPiconfig for a description of config.txt syntax + +# We always use the same names, the real used variant is selected by +# BR2_PACKAGE_RPI_FIRMWARE_{DEFAULT,X,CD} choice +start_file=start.elf +fixup_file=fixup.dat + +kernel=zImage + +# To use an external initramfs file +#initramfs rootfs.cpio.gz + +# Disable overscan assuming the display supports displaying the full resolution +# If the text shown on the screen disappears off the edge, comment this out +disable_overscan=1 + +# How much memory in MB to assign to the GPU on Pi models having +# 256, 512 or 1024 MB total memory +gpu_mem_256=100 +gpu_mem_512=100 +gpu_mem_1024=100 diff --git a/package/rpi-firmware/rpi-firmware.hash b/package/rpi-firmware/rpi-firmware.hash new file mode 100644 index 00000000..691b2002 --- /dev/null +++ b/package/rpi-firmware/rpi-firmware.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 ae4e317681995e0f7becd7900ae667cba394e3a0b7ca93a267f3303df7284697 rpi-firmware-d016a6eb01c8c7326a89cb42809fed2a21525de5.tar.gz +sha256 c7283ff51f863d93a275c66e3b4cb08021a5dd4d8c1e7acc47d872fbe52d3d6b boot/LICENCE.broadcom diff --git a/package/rpi-firmware/rpi-firmware.mk b/package/rpi-firmware/rpi-firmware.mk new file mode 100644 index 00000000..f3d28ef8 --- /dev/null +++ b/package/rpi-firmware/rpi-firmware.mk @@ -0,0 +1,61 @@ +################################################################################ +# +# rpi-firmware +# +################################################################################ + +RPI_FIRMWARE_VERSION = d016a6eb01c8c7326a89cb42809fed2a21525de5 +RPI_FIRMWARE_SITE = $(call github,raspberrypi,firmware,$(RPI_FIRMWARE_VERSION)) +RPI_FIRMWARE_LICENSE = BSD-3-Clause +RPI_FIRMWARE_LICENSE_FILES = boot/LICENCE.broadcom +RPI_FIRMWARE_INSTALL_IMAGES = YES + +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTBS),y) +define RPI_FIRMWARE_INSTALL_DTB + $(foreach dtb,$(wildcard $(@D)/boot/*.dtb), \ + $(INSTALL) -D -m 0644 $(dtb) $(BINARIES_DIR)/rpi-firmware/$(notdir $(dtb)) + ) +endef +endif + +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS),y) +define RPI_FIRMWARE_INSTALL_DTB_OVERLAYS + for ovldtb in $(@D)/boot/overlays/*.dtbo; do \ + $(INSTALL) -D -m 0644 $${ovldtb} $(BINARIES_DIR)/rpi-firmware/overlays/$${ovldtb##*/} || exit 1; \ + done +endef +else +# Still create the directory, so a genimage.cfg can include it independently of +# whether _INSTALL_DTB_OVERLAYS is selected or not. +define RPI_FIRMWARE_INSTALL_DTB_OVERLAYS + $(INSTALL) -d $(BINARIES_DIR)/rpi-firmware/overlays +endef +endif + +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_INSTALL_VCDBG),y) +define RPI_FIRMWARE_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0700 $(@D)/$(if BR2_ARM_EABIHF,hardfp/)opt/vc/bin/vcdbg \ + $(TARGET_DIR)/usr/sbin/vcdbg + $(INSTALL) -D -m 0644 $(@D)/$(if BR2_ARM_EABIHF,hardfp/)opt/vc/lib/libelftoolchain.so \ + $(TARGET_DIR)/usr/lib/libelftoolchain.so +endef +endif # INSTALL_VCDBG + +ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI),y) +# bootcode.bin is not used on rpi4, because it has been replaced by boot code in the onboard EEPROM +define RPI_FIRMWARE_INSTALL_BOOTCODE_BIN + $(INSTALL) -D -m 0644 $(@D)/boot/bootcode.bin $(BINARIES_DIR)/rpi-firmware/bootcode.bin +endef +endif + +define RPI_FIRMWARE_INSTALL_IMAGES_CMDS + $(INSTALL) -D -m 0644 package/rpi-firmware/config.txt $(BINARIES_DIR)/rpi-firmware/config.txt + $(INSTALL) -D -m 0644 package/rpi-firmware/cmdline.txt $(BINARIES_DIR)/rpi-firmware/cmdline.txt + $(INSTALL) -D -m 0644 $(@D)/boot/start$(BR2_PACKAGE_RPI_FIRMWARE_BOOT).elf $(BINARIES_DIR)/rpi-firmware/start.elf + $(INSTALL) -D -m 0644 $(@D)/boot/fixup$(BR2_PACKAGE_RPI_FIRMWARE_BOOT).dat $(BINARIES_DIR)/rpi-firmware/fixup.dat + $(RPI_FIRMWARE_INSTALL_BOOTCODE_BIN) + $(RPI_FIRMWARE_INSTALL_DTB) + $(RPI_FIRMWARE_INSTALL_DTB_OVERLAYS) +endef + +$(eval $(generic-package)) diff --git a/package/rpi-userland/0001-Add-.pc-files-for-the-OpenGLESv2-EGL-and-bcm_host-li.patch b/package/rpi-userland/0001-Add-.pc-files-for-the-OpenGLESv2-EGL-and-bcm_host-li.patch new file mode 100644 index 00000000..fb873371 --- /dev/null +++ b/package/rpi-userland/0001-Add-.pc-files-for-the-OpenGLESv2-EGL-and-bcm_host-li.patch @@ -0,0 +1,107 @@ +From 4824be8986c2b6ef0b0bd2b32bc99c4ba6406640 Mon Sep 17 00:00:00 2001 +From: "Yann E. MORIN" +Date: Sat, 24 Jan 2015 19:44:14 +0100 +Subject: [PATCH] Add .pc files for the OpenGLESv2, EGL and bcm_host libraries + +Those pkg-config files make it easier for Qt5 to find those libraries +and the appropriate link flags. + +Signed-off-by: Thomas Petazzoni +Signed-off-by: "Yann E. MORIN" + +[Rebased for rpi-userland-a1b89e91f393c7134b4cdc36431f863bb3333163] +Signed-off-by: Peter Seiderer +--- + host_applications/linux/libs/bcm_host/CMakeLists.txt | 4 ++++ + host_applications/linux/libs/bcm_host/bcm_host.pc.in | 10 ++++++++++ + interface/khronos/CMakeLists.txt | 8 ++++++++ + interface/khronos/egl/egl.pc.in | 11 +++++++++++ + interface/khronos/glxx/glesv2.pc.in | 10 ++++++++++ + 5 files changed, 43 insertions(+) + create mode 100644 host_applications/linux/libs/bcm_host/bcm_host.pc.in + create mode 100644 interface/khronos/egl/egl.pc.in + create mode 100644 interface/khronos/glxx/glesv2.pc.in + +diff --git a/host_applications/linux/libs/bcm_host/CMakeLists.txt b/host_applications/linux/libs/bcm_host/CMakeLists.txt +index 1edf50a..1f29ead 100644 +--- a/host_applications/linux/libs/bcm_host/CMakeLists.txt ++++ b/host_applications/linux/libs/bcm_host/CMakeLists.txt +@@ -20,3 +20,7 @@ target_link_libraries(bcm_host vcos vchostif) + + install(TARGETS bcm_host DESTINATION lib) + ++configure_file("${CMAKE_CURRENT_SOURCE_DIR}/bcm_host.pc.in" ++ "${CMAKE_CURRENT_BINARY_DIR}/bcm_host.pc" @ONLY) ++install(FILES "${CMAKE_CURRENT_BINARY_DIR}/bcm_host.pc" ++ DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig") +diff --git a/host_applications/linux/libs/bcm_host/bcm_host.pc.in b/host_applications/linux/libs/bcm_host/bcm_host.pc.in +new file mode 100644 +index 0000000..d40d350 +--- /dev/null ++++ b/host_applications/linux/libs/bcm_host/bcm_host.pc.in +@@ -0,0 +1,10 @@ ++prefix=/usr ++exec_prefix=${prefix} ++libdir=${exec_prefix}/lib ++includedir=${prefix}/include ++ ++Name: bcm_host ++Description: Broadcom VideoCore host API library ++Version: 1 ++Libs: -L${libdir} -lbcm_host -lvcos -lvchiq_arm ++Cflags: -I${includedir} -I${includedir}/interface/vmcs_host/linux -I${includedir}/interface/vcos/pthreads -DUSE_VCHIQ_ARM +diff --git a/interface/khronos/CMakeLists.txt b/interface/khronos/CMakeLists.txt +index 4231af4..2844ebd 100644 +--- a/interface/khronos/CMakeLists.txt ++++ b/interface/khronos/CMakeLists.txt +@@ -74,6 +74,14 @@ target_link_libraries(OpenVG EGL) + + install(TARGETS EGL GLESv2 OpenVG WFC khrn_client DESTINATION lib) + install(TARGETS EGL_static GLESv2_static khrn_static DESTINATION lib) ++configure_file("${CMAKE_CURRENT_SOURCE_DIR}/egl/egl.pc.in" ++ "${CMAKE_CURRENT_BINARY_DIR}/egl/egl.pc" @ONLY) ++install(FILES "${CMAKE_CURRENT_BINARY_DIR}/egl/egl.pc" ++ DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig") ++configure_file("${CMAKE_CURRENT_SOURCE_DIR}/glxx/glesv2.pc.in" ++ "${CMAKE_CURRENT_BINARY_DIR}/glxx/glesv2.pc" @ONLY) ++install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glxx/glesv2.pc" ++ DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig") + + # recommended names to use to avoid conflicts with mesa libs + add_library(brcmEGL ${SHARED} ${EGL_SOURCE}) +diff --git a/interface/khronos/egl/egl.pc.in b/interface/khronos/egl/egl.pc.in +new file mode 100644 +index 0000000..5868706 +--- /dev/null ++++ b/interface/khronos/egl/egl.pc.in +@@ -0,0 +1,11 @@ ++prefix=@CMAKE_INSTALL_PREFIX@ ++exec_prefix=${prefix} ++libdir=${exec_prefix}/lib ++includedir=${prefix}/include ++ ++Name: egl ++Description: RasberryPi implementation of EGL ++Version: 10 ++Libs: -L${libdir} -lEGL -lGLESv2 -lbcm_host -lvchostif ++Cflags: -I${includedir}/ -I${includedir}/interface/vcos/pthreads/ \ ++ -I${includedir}/interface/vmcs_host/linux/ +diff --git a/interface/khronos/glxx/glesv2.pc.in b/interface/khronos/glxx/glesv2.pc.in +new file mode 100644 +index 0000000..2f58eed +--- /dev/null ++++ b/interface/khronos/glxx/glesv2.pc.in +@@ -0,0 +1,10 @@ ++prefix=@CMAKE_INSTALL_PREFIX@ ++exec_prefix=${prefix} ++libdir=${exec_prefix}/lib ++includedir=${prefix}/include ++ ++Name: glesv2 ++Description: RasberryPi implementation of OpenGL ESv2 ++Version: 2.0 ++Libs: -L${libdir} -lGLESv2 ++Cflags: -I${includedir}/ +-- +2.8.1 + diff --git a/package/rpi-userland/0002-interface-remove-faulty-assert-to-make-weston-happy-.patch b/package/rpi-userland/0002-interface-remove-faulty-assert-to-make-weston-happy-.patch new file mode 100644 index 00000000..0e9dede5 --- /dev/null +++ b/package/rpi-userland/0002-interface-remove-faulty-assert-to-make-weston-happy-.patch @@ -0,0 +1,35 @@ +From a126ee5a3235792abb58daffd9d4b3e1012f675b Mon Sep 17 00:00:00 2001 +From: "Yann E. MORIN" +Date: Sat, 24 Jan 2015 22:07:19 +0100 +Subject: [PATCH] interface: remove faulty assert() to make weston happy at + runtime + +This was removed after a discussion on IRC with the weston guys +('daniels' on irc.freenode.net/#wayland). + +Upstream status: no, will be pushed by weston guys later. +If not, I'll do it. + +Signed-off-by: "Yann E. MORIN" + +[Rebased for rpi-userland-a1b89e91f393c7134b4cdc36431f863bb3333163] +Signed-off-by: Peter Seiderer +--- + interface/vmcs_host/vc_vchi_dispmanx.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/interface/vmcs_host/vc_vchi_dispmanx.c b/interface/vmcs_host/vc_vchi_dispmanx.c +index 133e86d..0c7873c 100755 +--- a/interface/vmcs_host/vc_vchi_dispmanx.c ++++ b/interface/vmcs_host/vc_vchi_dispmanx.c +@@ -1306,7 +1306,6 @@ static void *dispmanx_notify_func( void *arg ) { + // Decrement the use count - the corresponding "use" is in vc_dispmanx_update_submit. + vchi_service_release(dispmanx_client.notify_handle[0]); + if (dispmanx_client.update_callback ) { +- vcos_assert( dispmanx_client.pending_update_handle == handle); + dispmanx_client.update_callback(handle, dispmanx_client.update_callback_param); + } + } else { +-- +2.8.1 + diff --git a/package/rpi-userland/0003-Disable-Werror-everywhere.patch b/package/rpi-userland/0003-Disable-Werror-everywhere.patch new file mode 100644 index 00000000..27c8acdd --- /dev/null +++ b/package/rpi-userland/0003-Disable-Werror-everywhere.patch @@ -0,0 +1,165 @@ +From cc9ac86bcff79697d354cc51d3a984fd0f362868 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Thu, 22 Sep 2016 22:59:11 +0200 +Subject: [PATCH] Disable Werror everywhere + +With gcc-5.1, some constructs that were previously accepted (but wrong) +are now considered warnings, and thus -Werror makes them errors. + +Ditch -Werror altoghether. + +Signed-off-by: "Yann E. MORIN" + +[Rebased for rpi-userland-a1b89e91f393c7134b4cdc36431f863bb3333163] +Signed-off-by: Peter Seiderer + +[Rebased for rpi-userland-8f0abfb07b96e7ee85f46e59d895014ec5e25f5e] +Signed-off-by: Peter Seiderer + +[Rebased for rpi-userland-5070cb7fc150fc98f1ed64a7739c3356970d9f76] +Signed-off-by: Peter Seiderer +--- + host_applications/android/apps/vidtex/CMakeLists.txt | 2 +- + host_applications/linux/apps/gencmd/CMakeLists.txt | 2 +- + host_applications/linux/apps/raspicam/CMakeLists.txt | 2 +- + host_applications/linux/apps/smem/CMakeLists.txt | 2 +- + host_applications/linux/libs/bcm_host/CMakeLists.txt | 2 +- + host_applications/linux/libs/sm/CMakeLists.txt | 2 +- + interface/mmal/CMakeLists.txt | 2 +- + interface/vcos/CMakeLists.txt | 2 +- + interface/vcos/pthreads/CMakeLists.txt | 2 +- + interface/vmcs_host/CMakeLists.txt | 2 +- + 10 files changed, 10 insertions(+), 10 deletions(-) + +diff --git a/host_applications/android/apps/vidtex/CMakeLists.txt b/host_applications/android/apps/vidtex/CMakeLists.txt +index 6d66d69..06a3192 100644 +--- a/host_applications/android/apps/vidtex/CMakeLists.txt ++++ b/host_applications/android/apps/vidtex/CMakeLists.txt +@@ -1,6 +1,6 @@ + cmake_minimum_required(VERSION 2.8) + +-SET(COMPILE_DEFINITIONS -Werror -Wall) ++SET(COMPILE_DEFINITIONS -Wall) + + # Set --no-as-needed to stop the linker discarding mmal_vc_client + # as it can't see that the constructor registers a load of functionality +diff --git a/host_applications/linux/apps/gencmd/CMakeLists.txt b/host_applications/linux/apps/gencmd/CMakeLists.txt +index f95d1a1..034bf20 100644 +--- a/host_applications/linux/apps/gencmd/CMakeLists.txt ++++ b/host_applications/linux/apps/gencmd/CMakeLists.txt +@@ -4,7 +4,7 @@ if (WIN32) + set(VCOS_PLATFORM win32) + else () + set(VCOS_PLATFORM pthreads) +- add_definitions(-Wall -Werror) ++ add_definitions(-Wall ) + endif () + + include_directories( ../../../.. +diff --git a/host_applications/linux/apps/raspicam/CMakeLists.txt b/host_applications/linux/apps/raspicam/CMakeLists.txt +index f7db21e..b94bdc3 100644 +--- a/host_applications/linux/apps/raspicam/CMakeLists.txt ++++ b/host_applications/linux/apps/raspicam/CMakeLists.txt +@@ -1,7 +1,7 @@ + + # raspistill/raspivid/raspiyuv + +-SET(COMPILE_DEFINITIONS -Werror) ++SET(COMPILE_DEFINITIONS ) + + # Set --no-as-needed to stop the linker discarding mmal_vc_client + # as it can't see that the constructor registers a load of functionality +diff --git a/host_applications/linux/apps/smem/CMakeLists.txt b/host_applications/linux/apps/smem/CMakeLists.txt +index 0fa8328..f0d1e77 100644 +--- a/host_applications/linux/apps/smem/CMakeLists.txt ++++ b/host_applications/linux/apps/smem/CMakeLists.txt +@@ -4,7 +4,7 @@ get_filename_component (VIDEOCORE_ROOT ../../../.. ABSOLUTE) + include (${VIDEOCORE_ROOT}/makefiles/cmake/global_settings.cmake) + + if (NOT WIN32) +- add_definitions(-Wall -Werror) ++ add_definitions(-Wall ) + endif () + + include_directories ( +diff --git a/host_applications/linux/libs/bcm_host/CMakeLists.txt b/host_applications/linux/libs/bcm_host/CMakeLists.txt +index 2154e53..c23779b 100644 +--- a/host_applications/linux/libs/bcm_host/CMakeLists.txt ++++ b/host_applications/linux/libs/bcm_host/CMakeLists.txt +@@ -3,7 +3,7 @@ if (WIN32) + set(VCOS_PLATFORM win32) + else () + set(VCOS_PLATFORM pthreads) +- add_definitions(-Wall -Werror) ++ add_definitions(-Wall ) + endif () + + # set this as we want all the source of vchostif to be available in libbcm_host +diff --git a/host_applications/linux/libs/sm/CMakeLists.txt b/host_applications/linux/libs/sm/CMakeLists.txt +index 5ce5aca..02aea7c 100644 +--- a/host_applications/linux/libs/sm/CMakeLists.txt ++++ b/host_applications/linux/libs/sm/CMakeLists.txt +@@ -3,7 +3,7 @@ if (WIN32) + set(VCOS_PLATFORM win32) + else () + set(VCOS_PLATFORM pthreads) +- add_definitions(-Wall -Werror) ++ add_definitions(-Wall ) + endif () + + include_directories( ../../../.. +diff --git a/interface/mmal/CMakeLists.txt b/interface/mmal/CMakeLists.txt +index 46f149d..06273dc 100644 +--- a/interface/mmal/CMakeLists.txt ++++ b/interface/mmal/CMakeLists.txt +@@ -3,7 +3,7 @@ if (NOT DEFINED LIBRARY_TYPE) + set(LIBRARY_TYPE SHARED) + endif (NOT DEFINED LIBRARY_TYPE) + +-add_definitions(-Wall -Werror) ++add_definitions(-Wall ) + + add_library(mmal SHARED util/mmal_util.c) + +diff --git a/interface/vcos/CMakeLists.txt b/interface/vcos/CMakeLists.txt +index 23a8d72..988b104 100644 +--- a/interface/vcos/CMakeLists.txt ++++ b/interface/vcos/CMakeLists.txt +@@ -43,7 +43,7 @@ foreach (header ${HEADERS}) + endforeach () + + if (CMAKE_COMPILER_IS_GNUCC) +- add_definitions (-ggdb -Werror -Wall) ++ add_definitions (-ggdb -Wall) + endif () + + if (CMAKE_COMPILER_2005) +diff --git a/interface/vcos/pthreads/CMakeLists.txt b/interface/vcos/pthreads/CMakeLists.txt +index 1d81ca3..b35cd8e 100644 +--- a/interface/vcos/pthreads/CMakeLists.txt ++++ b/interface/vcos/pthreads/CMakeLists.txt +@@ -1,7 +1,7 @@ + # MSVC5 does not fully support C99, enabling declaration-after-statement + # warnings allows a common MSVC5 build error to be detected in Linux builds. + if (CMAKE_COMPILER_IS_GNUCC) +- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -Wdeclaration-after-statement") ++ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wdeclaration-after-statement") + add_definitions (-D_GNU_SOURCE) + endif () + +diff --git a/interface/vmcs_host/CMakeLists.txt b/interface/vmcs_host/CMakeLists.txt +index a157db1..dc384ca 100755 +--- a/interface/vmcs_host/CMakeLists.txt ++++ b/interface/vmcs_host/CMakeLists.txt +@@ -2,7 +2,7 @@ + # interface/vmcs_host + + # not working in release build +-# add_definitions(-Werror) ++# add_definitions() + + # vc_vchi_gencmd.c has a type-punning problem in vc_gencmd_read_response + add_definitions(-fno-strict-aliasing) +-- +2.23.0 + diff --git a/package/rpi-userland/0004-host-applications-disable-missing-applications.patch b/package/rpi-userland/0004-host-applications-disable-missing-applications.patch new file mode 100644 index 00000000..08039123 --- /dev/null +++ b/package/rpi-userland/0004-host-applications-disable-missing-applications.patch @@ -0,0 +1,34 @@ +From c8d2c332da2a03ed80d62628bbf54187a66f49b6 Mon Sep 17 00:00:00 2001 +From: "Yann E. MORIN" +Date: Fri, 24 Jul 2015 20:20:33 +0200 +Subject: [PATCH] host-applications: disable missing applications + +Those applications are missing from the public rpi-firmware package, so +do not even try to build them. + +Signed-off-by: "Yann E. MORIN" + +[Rebased for rpi-userland-a1b89e91f393c7134b4cdc36431f863bb3333163] +Signed-off-by: Peter Seiderer +--- + host_applications/linux/CMakeLists.txt | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/host_applications/linux/CMakeLists.txt b/host_applications/linux/CMakeLists.txt +index 5a648e7..83bb66e 100644 +--- a/host_applications/linux/CMakeLists.txt ++++ b/host_applications/linux/CMakeLists.txt +@@ -12,10 +12,7 @@ add_subdirectory(apps/dtoverlay) + add_subdirectory(apps/dtmerge) + + if(ALL_APPS) +- add_subdirectory(apps/vcdbg) +- add_subdirectory(libs/elftoolchain) + # add_subdirectory(apps/smct) +- add_subdirectory(apps/edid_parser) + add_subdirectory(apps/hello_pi) + endif() + +-- +2.8.1 + diff --git a/package/rpi-userland/0005-dtmerge-add-missing-include-for-va_list.patch b/package/rpi-userland/0005-dtmerge-add-missing-include-for-va_list.patch new file mode 100644 index 00000000..f028f67b --- /dev/null +++ b/package/rpi-userland/0005-dtmerge-add-missing-include-for-va_list.patch @@ -0,0 +1,34 @@ +From 1ffed0e8601afb7e65545bd545772edd0fccc404 Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Sat, 23 Apr 2016 17:48:13 +0200 +Subject: [PATCH] dtmerge: add missing include for va_list +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Fixes compile error with uclibc-1.0.14: + + In file included from rpi-userland-52eca998aa43f278314579dba4798a3fe1da46c3/host_applications/linux/apps/dtmerge/dtmerge.c:32:0: + rpi-userland-52eca998aa43f278314579dba4798a3fe1da46c3/helpers/dtoverlay/dtoverlay.h:65:54: error: unknown type name ‘va_list’ + const char *fmt, va_list args); + +Signed-off-by: Peter Seiderer +--- + host_applications/linux/apps/dtmerge/dtmerge.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/host_applications/linux/apps/dtmerge/dtmerge.c b/host_applications/linux/apps/dtmerge/dtmerge.c +index 9243da1..2ac8d39 100644 +--- a/host_applications/linux/apps/dtmerge/dtmerge.c ++++ b/host_applications/linux/apps/dtmerge/dtmerge.c +@@ -28,6 +28,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + #include + #include + #include ++#include + + #include "dtoverlay.h" + +-- +2.8.1 + diff --git a/package/rpi-userland/Config.in b/package/rpi-userland/Config.in new file mode 100644 index 00000000..342faf26 --- /dev/null +++ b/package/rpi-userland/Config.in @@ -0,0 +1,45 @@ +config BR2_PACKAGE_RPI_USERLAND + bool "rpi-userland" + depends on BR2_arm + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_HAS_LIBEGL + select BR2_PACKAGE_HAS_LIBGLES + select BR2_PACKAGE_HAS_LIBOPENVG + select BR2_PACKAGE_HAS_LIBOPENMAX + help + Raspberry Pi Userland contains the necessary library to use + the VideoCore driver. + + Includes source for the ARM side code to interface to: EGL, + mmal, GLESv2, vcos, openmaxil, vchiq_arm, bcm_host, WFC, + OpenVG. + + https://github.com/raspberrypi/userland/ + +if BR2_PACKAGE_RPI_USERLAND + +config BR2_PACKAGE_PROVIDES_LIBEGL + default "rpi-userland" + +config BR2_PACKAGE_PROVIDES_LIBGLES + default "rpi-userland" + +config BR2_PACKAGE_PROVIDES_LIBOPENVG + default "rpi-userland" + +config BR2_PACKAGE_PROVIDES_LIBOPENMAX + default "rpi-userland" + +config BR2_PACKAGE_RPI_USERLAND_HELLO + bool "hello_pi examples" + help + Install the hello-pi examples to test the HW (GPU, camera...) + +endif + +comment "rpi-userland needs a toolchain w/ C++, threads, dynamic library" + depends on BR2_arm + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS diff --git a/package/rpi-userland/rpi-userland.hash b/package/rpi-userland/rpi-userland.hash new file mode 100644 index 00000000..63b1bb0f --- /dev/null +++ b/package/rpi-userland/rpi-userland.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 b23fc0849d282a8ba27b821cb8f63fa2ebc2ae8aa3cba0664ce3809ea814507b rpi-userland-093b30bbc2fd083d68cc3ee07e6e555c6e592d11.tar.gz +sha256 bee6f1249175683d8610651706e1aa7dffcbfd3f9c4c05bc1e5ab34f313c2db5 LICENCE diff --git a/package/rpi-userland/rpi-userland.mk b/package/rpi-userland/rpi-userland.mk new file mode 100644 index 00000000..0118da56 --- /dev/null +++ b/package/rpi-userland/rpi-userland.mk @@ -0,0 +1,45 @@ +################################################################################ +# +# rpi-userland +# +################################################################################ + +RPI_USERLAND_VERSION = 093b30bbc2fd083d68cc3ee07e6e555c6e592d11 +RPI_USERLAND_SITE = $(call github,raspberrypi,userland,$(RPI_USERLAND_VERSION)) +RPI_USERLAND_LICENSE = BSD-3-Clause +RPI_USERLAND_LICENSE_FILES = LICENCE +RPI_USERLAND_INSTALL_STAGING = YES +RPI_USERLAND_CONF_OPTS = -DVMCS_INSTALL_PREFIX=/usr + +RPI_USERLAND_PROVIDES = libegl libgles libopenmax libopenvg + +ifeq ($(BR2_PACKAGE_RPI_USERLAND_HELLO),y) + +RPI_USERLAND_CONF_OPTS += -DALL_APPS=ON + +define RPI_USERLAND_EXTRA_LIBS_TARGET + $(INSTALL) -m 0644 -D \ + $(@D)/build/lib/libilclient.so \ + $(TARGET_DIR)/usr/lib/libilclient.so +endef +RPI_USERLAND_POST_INSTALL_TARGET_HOOKS += RPI_USERLAND_EXTRA_LIBS_TARGET + +define RPI_USERLAND_EXTRA_LIBS_STAGING + $(INSTALL) -m 0644 -D \ + $(@D)/build/lib/libilclient.so \ + $(STAGING_DIR)/usr/lib/libilclient.so +endef +RPI_USERLAND_POST_INSTALL_STAGING_HOOKS += RPI_USERLAND_EXTRA_LIBS_STAGING + +else + +RPI_USERLAND_CONF_OPTS += -DALL_APPS=OFF + +endif # BR2_PACKAGE_RPI_USERLAND_HELLO + +define RPI_USERLAND_POST_TARGET_CLEANUP + rm -Rf $(TARGET_DIR)/usr/src +endef +RPI_USERLAND_POST_INSTALL_TARGET_HOOKS += RPI_USERLAND_POST_TARGET_CLEANUP + +$(eval $(cmake-package)) diff --git a/package/rpi-wifi-firmware/Config.in b/package/rpi-wifi-firmware/Config.in new file mode 100644 index 00000000..7e81b286 --- /dev/null +++ b/package/rpi-wifi-firmware/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_RPI_WIFI_FIRMWARE + bool "rpi-wifi-firmware" + depends on BR2_arm || BR2_aarch64 + depends on !BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM43XXX + help + Raspberry Pi 3 and Zero W Broadcom BCM43430 wifi module + NVRAM data. Raspberry Pi 3 Model B+ Broadcom BCM43455 + wifi module NVRAM data. + + https://github.com/LibreELEC/brcmfmac_sdio-firmware-rpi + +comment "rpi-wifi-firmware conflicts with linux-firmware Broadcom BRCM bcm43xx" + depends on BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM43XXX diff --git a/package/rpi-wifi-firmware/rpi-wifi-firmware.hash b/package/rpi-wifi-firmware/rpi-wifi-firmware.hash new file mode 100644 index 00000000..71e323e8 --- /dev/null +++ b/package/rpi-wifi-firmware/rpi-wifi-firmware.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 cf806f6bdba0f803b90bc210f524a6ac37bac7ad19306c61474bb2dc59875e87 rpi-wifi-firmware-9c0ffe9a7f0753b36ed88f7981905a989d940ea9.tar.gz +sha256 b16056fc91b82a0e3e8de8f86c2dac98201aa9dc3cbd33e8d38f1b087fcec30d LICENCE.broadcom_bcm43xx diff --git a/package/rpi-wifi-firmware/rpi-wifi-firmware.mk b/package/rpi-wifi-firmware/rpi-wifi-firmware.mk new file mode 100644 index 00000000..24ba5941 --- /dev/null +++ b/package/rpi-wifi-firmware/rpi-wifi-firmware.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# rpi-wifi-firmware +# +################################################################################ + +RPI_WIFI_FIRMWARE_VERSION = 9c0ffe9a7f0753b36ed88f7981905a989d940ea9 +RPI_WIFI_FIRMWARE_SITE = $(call github,LibreELEC,brcmfmac_sdio-firmware-rpi,$(RPI_WIFI_FIRMWARE_VERSION)) +RPI_WIFI_FIRMWARE_LICENSE = PROPRIETARY +RPI_WIFI_FIRMWARE_LICENSE_FILES = LICENCE.broadcom_bcm43xx + +define RPI_WIFI_FIRMWARE_INSTALL_TARGET_CMDS + $(INSTALL) -d $(TARGET_DIR)/lib/firmware/brcm + $(INSTALL) -m 0644 $(@D)/firmware/brcm/brcmfmac* $(TARGET_DIR)/lib/firmware/brcm +endef + +$(eval $(generic-package)) diff --git a/package/rpm/Config.in b/package/rpm/Config.in new file mode 100644 index 00000000..ac979fdb --- /dev/null +++ b/package/rpm/Config.in @@ -0,0 +1,19 @@ +comment "rpm needs a toolchain w/ dynamic library and threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + depends on BR2_USE_MMU + +config BR2_PACKAGE_RPM + bool "rpm" + depends on !BR2_STATIC_LIBS # dlfcn.h + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_BEECRYPT if !BR2_PACKAGE_LIBGCRYPT && !BR2_PACKAGE_LIBNSS && !BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_FILE + select BR2_PACKAGE_POPT + select BR2_PACKAGE_ZLIB + help + The RPM Package Manager (RPM). + + http://www.rpm.org/ diff --git a/package/rpm/rpm.hash b/package/rpm/rpm.hash new file mode 100644 index 00000000..9389f829 --- /dev/null +++ b/package/rpm/rpm.hash @@ -0,0 +1,5 @@ +# From https://rpm.org/wiki/Releases/4.16.1.3.html +sha256 513dc7f972b6e7ccfc9fc7f9c01d5310cc56ee853892e4314fa2cad71478e21d rpm-4.16.1.3.tar.bz2 + +# Hash for license file +sha256 171d94d9f1641316bff7f157a903237dc69cdb5fca405fed8c832c76ed8370f9 COPYING diff --git a/package/rpm/rpm.mk b/package/rpm/rpm.mk new file mode 100644 index 00000000..0d8c14a0 --- /dev/null +++ b/package/rpm/rpm.mk @@ -0,0 +1,119 @@ +################################################################################ +# +# rpm +# +################################################################################ + +RPM_VERSION_MAJOR = 4.16 +RPM_VERSION = $(RPM_VERSION_MAJOR).1.3 +RPM_SOURCE = rpm-$(RPM_VERSION).tar.bz2 +RPM_SITE = http://ftp.rpm.org/releases/rpm-$(RPM_VERSION_MAJOR).x +RPM_DEPENDENCIES = \ + host-pkgconf \ + $(if $(BR2_PACKAGE_BZIP2),bzip2) \ + $(if $(BR2_PACKAGE_ELFUTILS),elfutils) \ + file \ + popt \ + $(if $(BR2_PACKAGE_XZ),xz) \ + zlib \ + $(TARGET_NLS_DEPENDENCIES) +RPM_LICENSE = GPL-2.0 or LGPL-2.0 (library only) +RPM_LICENSE_FILES = COPYING +RPM_CPE_ID_VENDOR = rpm + +# Don't set --{dis,en}-openmp as upstream wants to abort the build if +# --enable-openmp is provided and OpenMP is < 4.5: +# https://github.com/rpm-software-management/rpm/pull/1433 +RPM_CONF_OPTS = \ + --disable-python \ + --disable-rpath \ + --with-external-db \ + --with-gnu-ld \ + --without-hackingdocs \ + --without-lua + +ifeq ($(BR2_PACKAGE_ACL),y) +RPM_DEPENDENCIES += acl +RPM_CONF_OPTS += --with-acl +else +RPM_CONF_OPTS += --without-acl +endif + +ifeq ($(BR2_PACKAGE_BERKELEYDB),y) +RPM_DEPENDENCIES += berkeleydb +RPM_CONF_OPTS += --enable-bdb +else +RPM_CONF_OPTS += --disable-bdb +endif + +ifeq ($(BR2_PACKAGE_DBUS),y) +RPM_DEPENDENCIES += dbus +RPM_CONF_OPTS += --enable-plugins +else +RPM_CONF_OPTS += --disable-plugins +endif + +ifeq ($(BR2_PACKAGE_LIBCAP),y) +RPM_DEPENDENCIES += libcap +RPM_CONF_OPTS += --with-cap +else +RPM_CONF_OPTS += --without-cap +endif + +ifeq ($(BR2_PACKAGE_LIBGCRYPT),y) +RPM_DEPENDENCIES += libgcrypt +RPM_CONF_OPTS += --with-crypto=libgcrypt +else ifeq ($(BR2_PACKAGE_LIBNSS),y) +RPM_DEPENDENCIES += libnss +RPM_CONF_OPTS += --with-crypto=nss +RPM_CFLAGS += -I$(STAGING_DIR)/usr/include/nss -I$(STAGING_DIR)/usr/include/nspr +else ifeq ($(BR2_PACKAGE_BEECRYPT),y) +RPM_DEPENDENCIES += beecrypt +RPM_CONF_OPTS += --with-crypto=beecrypt +RPM_CFLAGS += -I$(STAGING_DIR)/usr/include/beecrypt +else +RPM_DEPENDENCIES += openssl +RPM_CONF_OPTS += --with-crypto=openssl +endif + +ifeq ($(BR2_PACKAGE_GETTEXT_PROVIDES_LIBINTL),y) +RPM_CONF_OPTS += --with-libintl-prefix=$(STAGING_DIR)/usr +else +RPM_CONF_OPTS += --without-libintl-prefix +endif + +ifeq ($(BR2_PACKAGE_LIBARCHIVE),y) +RPM_DEPENDENCIES += libarchive +RPM_CONF_OPTS += --with-archive +else +RPM_CONF_OPTS += --without-archive +endif + +ifeq ($(BR2_PACKAGE_LIBSELINUX),y) +RPM_DEPENDENCIES += libselinux +RPM_CONF_OPTS += --with-selinux +else +RPM_CONF_OPTS += --without-selinux +endif + +ifeq ($(BR2_PACKAGE_SQLITE),y) +RPM_DEPENDENCIES += sqlite +RPM_CONF_OPTS += --enable-sqlite +else +RPM_CONF_OPTS += --disable-sqlite +endif + +ifeq ($(BR2_PACKAGE_ZSTD),y) +RPM_DEPENDENCIES += zstd +RPM_CONF_OPTS += --enable-zstd +else +RPM_CONF_OPTS += --disable-zstd +endif + +# ac_cv_prog_cc_c99: RPM uses non-standard GCC extensions (ex. `asm`). +RPM_CONF_ENV = \ + ac_cv_prog_cc_c99='-std=gnu99' \ + CFLAGS="$(TARGET_CFLAGS) $(RPM_CFLAGS)" \ + LIBS=$(TARGET_NLS_LIBS) + +$(eval $(autotools-package)) diff --git a/package/rrdtool/Config.in b/package/rrdtool/Config.in new file mode 100644 index 00000000..54513531 --- /dev/null +++ b/package/rrdtool/Config.in @@ -0,0 +1,40 @@ +config BR2_PACKAGE_RRDTOOL + bool "rrdtool" + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + select BR2_PACKAGE_LIBGLIB2 + help + RRDtool is the OpenSource industry standard, high performance + data logging and graphing system for time series data. + + http://oss.oetiker.ch/rrdtool/ + +if BR2_PACKAGE_RRDTOOL + +config BR2_PACKAGE_RRDTOOL_RRDGRAPH + bool "rrd_graph" + default y + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # pango -> harfbuzz + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # pango -> harfbuzz + depends on BR2_INSTALL_LIBSTDCPP # freetype support from pango + select BR2_PACKAGE_CAIRO + select BR2_PACKAGE_CAIRO_PDF + select BR2_PACKAGE_CAIRO_PNG + select BR2_PACKAGE_CAIRO_PS + select BR2_PACKAGE_CAIRO_SVG + select BR2_PACKAGE_PANGO + help + This enables the graphing capabilities ('rrdgraph'). + Without this it will only act as a database backend. + +comment "rrd_graph support needs a toolchain w/ C++, gcc >= 4.8" + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + +endif + +comment "rrdtool needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/rrdtool/rrdtool.hash b/package/rrdtool/rrdtool.hash new file mode 100644 index 00000000..6418c25a --- /dev/null +++ b/package/rrdtool/rrdtool.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 a199faeb7eff7cafc46fac253e682d833d08932f3db93a550a4a5af180ca58db rrdtool-1.7.2.tar.gz +sha256 ab6b4646e9e01f1ec287c29c351c886c4cb7f945c11efc0a1be9f6e5e6cc5320 COPYRIGHT +sha256 d8c320ffc0030d1b096ae4732b50d2b811cf95e9a9b7377c1127b2563e0a0388 LICENSE diff --git a/package/rrdtool/rrdtool.mk b/package/rrdtool/rrdtool.mk new file mode 100644 index 00000000..2731b7b3 --- /dev/null +++ b/package/rrdtool/rrdtool.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# rrdtool +# +################################################################################ + +RRDTOOL_VERSION = 1.7.2 +RRDTOOL_SITE = http://oss.oetiker.ch/rrdtool/pub +RRDTOOL_LICENSE = GPL-2.0+ with FLOSS license exceptions as explained in COPYRIGHT +RRDTOOL_LICENSE_FILES = COPYRIGHT LICENSE +RRDTOOL_DEPENDENCIES = host-pkgconf libglib2 $(TARGET_NLS_DEPENDENCIES) +# autoreconf needed to avoid link failure due to missing -lintl, +# gettextize needed as a consequence of autoreconf +RRDTOOL_AUTORECONF = YES +RRDTOOL_GETTEXTIZE = YES +RRDTOOL_INSTALL_STAGING = YES +RRDTOOL_CONF_OPTS = \ + --disable-examples \ + --disable-libdbi \ + --disable-librados \ + --disable-libwrap \ + --disable-lua \ + --disable-perl \ + --disable-python \ + --disable-ruby \ + --disable-tcl + +ifeq ($(BR2_PACKAGE_RRDTOOL_RRDGRAPH),y) +RRDTOOL_DEPENDENCIES += cairo pango +else +RRDTOOL_CONF_OPTS += --disable-rrd_graph +endif + +ifeq ($(BR2_PACKAGE_LIBXML2),y) +RRDTOOL_DEPENDENCIES += libxml2 +else +RRDTOOL_CONF_OPTS += --disable-rrd_restore +endif + +$(eval $(autotools-package)) diff --git a/package/rs485conf/Config.in b/package/rs485conf/Config.in new file mode 100644 index 00000000..ff0b7432 --- /dev/null +++ b/package/rs485conf/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_RS485CONF + bool "rs485conf" + help + rs485conf is intended to be used on embedded boards with RS485 + interface. It can show as well as modify RS485 configuration + parameters of TTY device with easy to use command line + options. + + https://github.com/mniestroj/rs485conf diff --git a/package/rs485conf/rs485conf.hash b/package/rs485conf/rs485conf.hash new file mode 100644 index 00000000..315f90a3 --- /dev/null +++ b/package/rs485conf/rs485conf.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 f163f81cd50aae6fa39cbb4f6408a3699da7a87a56649c4b96d6f168c9be6a7d rs485conf-5c8d00cf70950fab3454549b81dea843d844492a.tar.gz +sha256 3e5c80d50879a9572ac9e463215a942490a67b56dfd8a3e27004d7c62e0493c8 LICENSE diff --git a/package/rs485conf/rs485conf.mk b/package/rs485conf/rs485conf.mk new file mode 100644 index 00000000..9d1b7642 --- /dev/null +++ b/package/rs485conf/rs485conf.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# rs485conf +# +################################################################################ + +RS485CONF_VERSION = 5c8d00cf70950fab3454549b81dea843d844492a +RS485CONF_SITE = $(call github,mniestroj,rs485conf,$(RS485CONF_VERSION)) +RS485CONF_LICENSE = BSD-3-Clause +RS485CONF_LICENSE_FILES = LICENSE + +define RS485CONF_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) +endef + +define RS485CONF_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) PREFIX="$(TARGET_DIR)/usr" -C $(@D) install +endef + +$(eval $(generic-package)) diff --git a/package/rsh-redone/Config.in b/package/rsh-redone/Config.in new file mode 100644 index 00000000..53ff2bea --- /dev/null +++ b/package/rsh-redone/Config.in @@ -0,0 +1,42 @@ +config BR2_PACKAGE_RSH_REDONE + bool "rsh-redone" + help + Rsh-redone is a reimplementation of the remote shell clients + and servers. It is written from the ground up to avoid the + bugs found in the standard clients and servers. It also + fully supports IPv6. + + http://packages.debian.org/source/sid/rsh-redone + +if BR2_PACKAGE_RSH_REDONE + +config BR2_PACKAGE_RSH_REDONE_RLOGIN + bool "rlogin" + +config BR2_PACKAGE_RSH_REDONE_RLOGIND + bool "rlogind" + depends on !BR2_STATIC_LIBS + depends on BR2_ENABLE_LOCALE && BR2_USE_WCHAR + depends on !BR2_TOOLCHAIN_USES_MUSL + depends on BR2_USE_MMU # linux-pam + select BR2_PACKAGE_LINUX_PAM + +comment "rlogind needs a uClibc or glibc toolchain w/ wchar, locale, dynamic library" + depends on !(BR2_ENABLE_LOCALE && BR2_USE_WCHAR) \ + || BR2_STATIC_LIBS || BR2_TOOLCHAIN_USES_MUSL + +config BR2_PACKAGE_RSH_REDONE_RSH + bool "rsh" + +config BR2_PACKAGE_RSH_REDONE_RSHD + bool "rshd" + depends on BR2_ENABLE_LOCALE && BR2_USE_WCHAR + depends on !BR2_STATIC_LIBS + depends on BR2_USE_MMU # linux-pam + select BR2_PACKAGE_LINUX_PAM + +comment "rshd needs a toolchain w/ wchar, locale, dynamic library" + depends on !(BR2_ENABLE_LOCALE && BR2_USE_WCHAR) \ + || BR2_STATIC_LIBS + +endif diff --git a/package/rsh-redone/rsh-redone.hash b/package/rsh-redone/rsh-redone.hash new file mode 100644 index 00000000..559ed42d --- /dev/null +++ b/package/rsh-redone/rsh-redone.hash @@ -0,0 +1,4 @@ +# From http://snapshot.debian.org/archive/debian/20141023T043132Z/pool/main/r/rsh-redone/rsh-redone_85-2.dsc +sha256 55ac8ee2acacbc3490f073e3922c0cde46ffe4ea3c593e05c48fed4c1e1a8811 rsh-redone_85.orig.tar.gz +# Locally computed +sha256 92c3a6a0efe5347c282081c6f67aebfec0f33b880c9efb87eb5232dcdd748369 rsh.c diff --git a/package/rsh-redone/rsh-redone.mk b/package/rsh-redone/rsh-redone.mk new file mode 100644 index 00000000..f63da648 --- /dev/null +++ b/package/rsh-redone/rsh-redone.mk @@ -0,0 +1,38 @@ +################################################################################ +# +# rsh-redone +# +################################################################################ + +RSH_REDONE_VERSION = 85 +RSH_REDONE_SOURCE = rsh-redone_$(RSH_REDONE_VERSION).orig.tar.gz +RSH_REDONE_SITE = http://snapshot.debian.org/archive/debian/20141023T043132Z/pool/main/r/rsh-redone +RSH_REDONE_LICENSE = GPL-2.0 +RSH_REDONE_LICENSE_FILES = rsh.c + +RSH_REDONE_BINS-y = +RSH_REDONE_BINS-$(BR2_PACKAGE_RSH_REDONE_RLOGIN) += rlogin +RSH_REDONE_BINS-$(BR2_PACKAGE_RSH_REDONE_RSH) += rsh +RSH_REDONE_SBINS-y = +RSH_REDONE_SBINS-$(BR2_PACKAGE_RSH_REDONE_RLOGIND) += in.rlogind +RSH_REDONE_SBINS-$(BR2_PACKAGE_RSH_REDONE_RSHD) += in.rshd + +RSH_REDONE_MAKE_FLAGS = \ + BIN="$(RSH_REDONE_BINS-y)" SBIN="$(RSH_REDONE_SBINS-y)" + +ifneq ($(BR2_PACKAGE_RSH_REDONE_RSHD)$(BR2_PACKAGE_RSH_REDONE_RLOGIND),) +RSH_REDONE_DEPENDENCIES = linux-pam +endif + +define RSH_REDONE_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) $(RSH_REDONE_MAKE_FLAGS) +endef + +define RSH_REDONE_INSTALL_TARGET_CMDS + $(if $(RSH_REDONE_BINS-y)$(RSH_REDONE_SBINS-y), + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(RSH_REDONE_MAKE_FLAGS) DESTDIR=$(TARGET_DIR) \ + $(if $(RSH_REDONE_BINS-y),install-bin) \ + $(if $(RSH_REDONE_SBINS-y),install-sbin)) +endef + +$(eval $(generic-package)) diff --git a/package/rsync/Config.in b/package/rsync/Config.in new file mode 100644 index 00000000..b952974e --- /dev/null +++ b/package/rsync/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_RSYNC + bool "rsync" + # fork() + depends on BR2_USE_MMU + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_POPT + help + File transfer program to keep remote files in sync. + + http://rsync.samba.org/ diff --git a/package/rsync/rsync.hash b/package/rsync/rsync.hash new file mode 100644 index 00000000..2da62a18 --- /dev/null +++ b/package/rsync/rsync.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +# https://download.samba.org/pub/rsync/src/rsync-3.1.3.tar.gz.asc +sha256 55cc554efec5fdaad70de921cd5a5eeb6c29a95524c715f3bbf849235b0800c0 rsync-3.1.3.tar.gz +# Locally calculated +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/rsync/rsync.mk b/package/rsync/rsync.mk new file mode 100644 index 00000000..db26ebd9 --- /dev/null +++ b/package/rsync/rsync.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# rsync +# +################################################################################ + +RSYNC_VERSION = 3.1.3 +RSYNC_SITE = http://rsync.samba.org/ftp/rsync/src +RSYNC_LICENSE = GPL-3.0+ +RSYNC_LICENSE_FILES = COPYING +RSYNC_CPE_ID_VENDOR = samba +RSYNC_DEPENDENCIES = zlib popt +RSYNC_CONF_OPTS = \ + --with-included-zlib=no \ + --with-included-popt=no + +ifeq ($(BR2_PACKAGE_ACL),y) +RSYNC_DEPENDENCIES += acl +else +RSYNC_CONF_OPTS += --disable-acl-support +endif + +$(eval $(autotools-package)) diff --git a/package/rsyslog/Config.in b/package/rsyslog/Config.in new file mode 100644 index 00000000..8c024e69 --- /dev/null +++ b/package/rsyslog/Config.in @@ -0,0 +1,25 @@ +config BR2_PACKAGE_RSYSLOG + bool "rsyslog" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS # modules + depends on !BR2_TOOLCHAIN_USES_MUSL # GLOB_BRACE + # Propagate the exact same dependency from libfastjson, + # even though rsyslog already depends on threads for itself: + depends on BR2_TOOLCHAIN_HAS_SYNC_4 || BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_LIBESTR + select BR2_PACKAGE_LIBLOGGING + select BR2_PACKAGE_LIBFASTJSON + help + Rsyslog is a powerful and flexible syslog implementation + + http://www.rsyslog.com + +comment "rsyslog needs a uClibc or glibc toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS \ + || BR2_TOOLCHAIN_USES_MUSL + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS diff --git a/package/rsyslog/S01rsyslogd b/package/rsyslog/S01rsyslogd new file mode 100644 index 00000000..78421876 --- /dev/null +++ b/package/rsyslog/S01rsyslogd @@ -0,0 +1,53 @@ +#!/bin/sh + +DAEMON="rsyslogd" +PIDFILE="/var/run/$DAEMON.pid" + +RSYSLOGD_ARGS="" + +# shellcheck source=/dev/null +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON" + +start() { + printf 'Starting %s: ' "$DAEMON" + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon -S -q -p "$PIDFILE" -x "/usr/sbin/$DAEMON" \ + -- $RSYSLOGD_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +case "$1" in + start|stop|restart) + "$1";; + reload) + # Restart, since there is no true "reload" feature (does not + # reconfigure/restart on SIGHUP, just closes all open files). + restart;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/rsyslog/rsyslog.hash b/package/rsyslog/rsyslog.hash new file mode 100644 index 00000000..f4040984 --- /dev/null +++ b/package/rsyslog/rsyslog.hash @@ -0,0 +1,7 @@ +# From http://www.rsyslog.com/downloads/download-v8-stable/ +sha256 19b232f765c4ba7a35b91ef1f5f9af775f6ff78ef56bb7737a2ce79ccbb32b98 rsyslog-8.2010.0.tar.gz + +# Locally calculated +sha256 054b3a047d9232376a46b87356b19b0c0c2924cb5e6911ab96a01fc4b515f083 COPYING +sha256 8743ad560dea1229d4f46cd603e10874db41a27f3c74f64e958ef123f3943fab COPYING.ASL20 +sha256 4038442ca5bde8ffd243cfc235cb4455e7d618d47558ea3d8284733f71d904ed COPYING.LESSER diff --git a/package/rsyslog/rsyslog.mk b/package/rsyslog/rsyslog.mk new file mode 100644 index 00000000..36766e8b --- /dev/null +++ b/package/rsyslog/rsyslog.mk @@ -0,0 +1,114 @@ +################################################################################ +# +# rsyslog +# +################################################################################ + +RSYSLOG_VERSION = 8.2010.0 +RSYSLOG_SITE = http://rsyslog.com/files/download/rsyslog +RSYSLOG_LICENSE = GPL-3.0, LGPL-3.0, Apache-2.0 +RSYSLOG_LICENSE_FILES = COPYING COPYING.LESSER COPYING.ASL20 +RSYSLOG_CPE_ID_VENDOR = rsyslog +# rsyslog uses weak permissions for generating log files. +# Ignoring this CVE as Buildroot normally doesn't have local users and a build +# could customize the rsyslog.conf to be more restrictive ($FileCreateMode 0640) +RSYSLOG_IGNORE_CVES += CVE-2015-3243 +RSYSLOG_DEPENDENCIES = zlib libestr liblogging libfastjson host-pkgconf +RSYSLOG_CONF_ENV = ac_cv_prog_cc_c99='-std=c99' +RSYSLOG_PLUGINS = imdiag imfile impstats imptcp \ + mmanon mmaudit mmfields mmjsonparse mmpstrucdata mmsequence mmutf8fix \ + mail omprog omruleset omstdout omuxsock \ + pmaixforwardedfrom pmciscoios pmcisconames pmlastmsg pmsnare + +ifeq ($(BR2_PACKAGE_LIBRELP),y) +RSYSLOG_DEPENDENCIES += librelp +RSYSLOG_PLUGINS += relp +endif + +RSYSLOG_CONF_OPTS = --disable-generate-man-pages \ + $(foreach x,$(call qstrip,$(RSYSLOG_PLUGINS)),--enable-$(x)) + +# Disable items requiring libcurl +RSYSLOG_CONF_OPTS += --disable-elasticsearch \ + --disable-clickhouse \ + --disable-omhttp \ + --disable-fmhttp \ + --disable-imdocker \ + --disable-imhttp \ + --disable-impcap \ + --disable-omhttpfs \ + --disable-mmkubernetes + +ifeq ($(BR2_PACKAGE_GNUTLS),y) +RSYSLOG_DEPENDENCIES += gnutls +RSYSLOG_CONF_OPTS += --enable-gnutls +else +RSYSLOG_CONF_OPTS += --disable-gnutls +endif + +ifeq ($(BR2_PACKAGE_LIBEE),y) +RSYSLOG_DEPENDENCIES += libee +endif + +ifeq ($(BR2_PACKAGE_LIBGCRYPT),y) +RSYSLOG_DEPENDENCIES += libgcrypt +RSYSLOG_CONF_ENV += LIBGCRYPT_CONFIG=$(STAGING_DIR)/usr/bin/libgcrypt-config +RSYSLOG_CONF_OPTS += --enable-libgcrypt +else +RSYSLOG_CONF_OPTS += --disable-libgcrypt +endif + +ifeq ($(BR2_PACKAGE_MYSQL),y) +RSYSLOG_DEPENDENCIES += mysql +RSYSLOG_CONF_OPTS += --enable-mysql +RSYSLOG_CONF_ENV += ac_cv_prog_MYSQL_CONFIG=$(STAGING_DIR)/usr/bin/mysql_config +else +RSYSLOG_CONF_OPTS += --disable-mysql +endif + +ifeq ($(BR2_PACKAGE_POSTGRESQL),y) +RSYSLOG_DEPENDENCIES += postgresql +RSYSLOG_CONF_OPTS += --enable-pgsql +RSYSLOG_CONF_ENV += ac_cv_prog_PG_CONFIG=$(STAGING_DIR)/usr/bin/pg_config +else +RSYSLOG_CONF_OPTS += --disable-pgsql +endif + +ifeq ($(BR2_PACKAGE_UTIL_LINUX_LIBUUID),y) +RSYSLOG_DEPENDENCIES += util-linux +RSYSLOG_CONF_OPTS += --enable-uuid +else +RSYSLOG_CONF_OPTS += --disable-uuid +endif + +ifeq ($(BR2_INIT_SYSTEMD),y) +RSYSLOG_CONF_OPTS += \ + --enable-imjournal \ + --enable-omjournal \ + --with-systemdsystemunitdir=/usr/lib/systemd/system +RSYSLOG_DEPENDENCIES += systemd +else +RSYSLOG_CONF_OPTS += \ + --disable-imjournal \ + --disable-omjournal +endif + +define RSYSLOG_INSTALL_INIT_SYSTEMD + $(INSTALL) -m 0755 -D package/rsyslog/rsyslog.service \ + $(TARGET_DIR)/usr/lib/systemd/system/rsyslog.service +endef + +define RSYSLOG_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/rsyslog/S01rsyslogd \ + $(TARGET_DIR)/etc/init.d/S01rsyslogd +endef + +define RSYSLOG_INSTALL_CONF + $(INSTALL) -m 0644 -D $(@D)/platform/redhat/rsyslog.conf \ + $(TARGET_DIR)/etc/rsyslog.conf + mkdir -p $(TARGET_DIR)/etc/rsyslog.d +endef + +RSYSLOG_POST_INSTALL_TARGET_HOOKS += RSYSLOG_INSTALL_CONF + +$(eval $(autotools-package)) diff --git a/package/rsyslog/rsyslog.service b/package/rsyslog/rsyslog.service new file mode 100644 index 00000000..40c7c220 --- /dev/null +++ b/package/rsyslog/rsyslog.service @@ -0,0 +1,19 @@ +[Unit] +Description=System Logging Service +Requires=syslog.socket +Documentation=man:rsyslogd(8) +Documentation=https://www.rsyslog.com/doc/ + +[Service] +Type=notify +ExecStart=/usr/sbin/rsyslogd -n -iNONE +StandardOutput=null +Restart=on-failure + +# Increase the default a bit in order to allow many simultaneous +# files to be monitored, we might need a lot of fds. +LimitNOFILE=16384 + +[Install] +WantedBy=multi-user.target +Alias=syslog.service diff --git a/package/rt-tests/Config.in b/package/rt-tests/Config.in new file mode 100644 index 00000000..477fa288 --- /dev/null +++ b/package/rt-tests/Config.in @@ -0,0 +1,35 @@ +config BR2_PACKAGE_RT_TESTS + bool "rt-tests" + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14 # deadline scheduler syscall + depends on BR2_USE_MMU # fork(), numactl + depends on !BR2_STATIC_LIBS # dlopen + depends on !BR2_TOOLCHAIN_USES_MUSL # cyclictest + select BR2_PACKAGE_NUMACTL + help + Set of utilities for testing the real-time behaviour of a + Linux system. + + All tools are simple C programs with no dependencies, except + the hwlatdetect utility, which is a Python script and + therefore requires the Python interpreter. It will only be + installed if a Python interpreter has been selected in the + Buildroot configuration. + + Note that this package requires a toolchain built with the + NPTL implementation of the pthread API (this is always the + case with glibc toolchains, but may not necessarily be the + case with uClibc toolchains, since the thread implementation + is configurable). + + https://wiki.linuxfoundation.org/realtime/documentation/howto/tools/rt-tests + +comment "rt-tests may not work on MIPS with an external uClibc toolchain" + depends on BR2_PACKAGE_RT_TESTS + depends on BR2_TOOLCHAIN_EXTERNAL_UCLIBC + depends on BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el + +comment "rt-tests needs a uClibc or glibc toolchain w/ NPTL, headers >= 3.14, dynamic library" + depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIBS \ + || BR2_TOOLCHAIN_USES_MUSL || !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14 + depends on BR2_USE_MMU diff --git a/package/rt-tests/rt-tests.hash b/package/rt-tests/rt-tests.hash new file mode 100644 index 00000000..3d0aa5c5 --- /dev/null +++ b/package/rt-tests/rt-tests.hash @@ -0,0 +1,5 @@ +# From https://mirrors.edge.kernel.org/pub/linux/utils/rt-tests/sha256sums.asc +sha256 3740ad97b164a1cd77d9ee32bba23a4a0b2495a76468bcf40ff60b55c2a3a709 rt-tests-1.10.tar.xz +sha256 b5e7959bcb5c703b2743030751af975ea4e04962e29fc1118f4b605987585735 rt-tests-2.3.tar.xz +# locally computed hash +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING diff --git a/package/rt-tests/rt-tests.mk b/package/rt-tests/rt-tests.mk new file mode 100644 index 00000000..056a4a67 --- /dev/null +++ b/package/rt-tests/rt-tests.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# rt-tests +# +################################################################################ + +RT_TESTS_SITE = $(BR2_KERNEL_MIRROR)/linux/utils/rt-tests +RT_TESTS_SOURCE = rt-tests-$(RT_TESTS_VERSION).tar.xz +RT_TESTS_VERSION = 2.3 +RT_TESTS_LICENSE = GPL-2.0+ +RT_TESTS_LICENSE_FILES = COPYING + +RT_TESTS_DEPENDENCIES = numactl +RT_TESTS_CPE_ID_VENDOR = kernel + +define RT_TESTS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + CC="$(TARGET_CC)" \ + CFLAGS="$(TARGET_CFLAGS)" \ + prefix=/usr +endef + +define RT_TESTS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \ + DESTDIR="$(TARGET_DIR)" \ + prefix=/usr \ + PYLIB="$(if $(BR2_PACKAGE_PYTHON3),/usr/lib/python$(PYTHON3_VERSION_MAJOR)/site-packages/)" \ + install +endef + +$(eval $(generic-package)) diff --git a/package/rtai/Config.in b/package/rtai/Config.in new file mode 100644 index 00000000..14b18548 --- /dev/null +++ b/package/rtai/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_RTAI + bool "rtai" + depends on BR2_LINUX_KERNEL_EXT_RTAI + select BR2_LINUX_NEEDS_MODULES # not using kernel-module infra + help + RTAI - the RealTime Application Interface for Linux. + + http://www.rtai.org diff --git a/package/rtai/rtai.hash b/package/rtai/rtai.hash new file mode 100644 index 00000000..f0afafbd --- /dev/null +++ b/package/rtai/rtai.hash @@ -0,0 +1,2 @@ +# Locally computed +sha256 13669da744a0ba411bdb8e47fa47b6e19171646ae42c8dbb2735d12e555fb1a3 rtai-4.0.1.tar.bz2 diff --git a/package/rtai/rtai.mk b/package/rtai/rtai.mk new file mode 100644 index 00000000..90f2cc4c --- /dev/null +++ b/package/rtai/rtai.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# rtai +# +################################################################################ + +RTAI_VERSION = 4.0.1 +RTAI_SOURCE = rtai-$(RTAI_VERSION).tar.bz2 +RTAI_SITE = https://www.rtai.org/userfiles/downloads/RTAI +RTAI_INSTALL_STAGING = YES + +# The _CONFIG_SCRIPTS cannot apply here to the specificities of rtai-config +define RTAI_POST_PATCH_FIXUP + $(SED) 's%^staging=.*%staging=$(STAGING_DIR)%' $(STAGING_DIR)/usr/bin/rtai-config +endef + +RTAI_POST_INSTALL_STAGING_HOOKS += RTAI_POST_PATCH_FIXUP + +RTAI_DEPENDENCIES = linux + +RTAI_CONF_OPTS = \ + --includedir=/usr/include/rtai \ + --with-linux-dir=$(LINUX_DIR) \ + --disable-leds \ + --enable-usi \ + --enable-align-priority \ + --disable-rtailab \ + --with-module-dir=/lib/modules/$(LINUX_VERSION_PROBED)/rtai + +RTAI_MAKE = $(MAKE1) + +$(eval $(autotools-package)) diff --git a/package/rtc-tools/Config.in b/package/rtc-tools/Config.in new file mode 100644 index 00000000..78f5c060 --- /dev/null +++ b/package/rtc-tools/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_RTC_TOOLS + bool "rtc-tools" + help + This package provide a set of user-space tools that can be + used to manipulate Real Time Clock Devices. + + https://git.kernel.org/pub/scm/linux/kernel/git/abelloni/rtc-tools.git/ diff --git a/package/rtc-tools/rtc-tools.hash b/package/rtc-tools/rtc-tools.hash new file mode 100644 index 00000000..a14dcb3e --- /dev/null +++ b/package/rtc-tools/rtc-tools.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 8614e140b04da3dbb787760bdb0fe2ac5fe8907f5d3e9a74c6713e3d17fc3650 rtc-tools-33ef4aa1c92b0c92a351284d93d1ac5570de9cc7-br1.tar.gz +sha256 7ae50a5344af14d6231aff6814632a220b3127da4099aea2c6070fd79c407c1a COPYING diff --git a/package/rtc-tools/rtc-tools.mk b/package/rtc-tools/rtc-tools.mk new file mode 100644 index 00000000..2ef850a8 --- /dev/null +++ b/package/rtc-tools/rtc-tools.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# rtc-tools +# +################################################################################ + +RTC_TOOLS_VERSION = 33ef4aa1c92b0c92a351284d93d1ac5570de9cc7 +RTC_TOOLS_SITE = git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/rtc-tools.git +RTC_TOOLS_LICENSE = GPL-2.0 +RTC_TOOLS_LICENSE_FILES = COPYING + +RTC_TOOLS_BINARIES = rtc rtc-range + +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +RTC_TOOLS_BINARIES += rtc-sync +endif + +define RTC_TOOLS_BUILD_CMDS + $(foreach bin,$(RTC_TOOLS_BINARIES),\ + $(TARGET_CC) $(TARGET_CFLAGS) -o $(@D)/$(bin) $(@D)/$(bin).c + ) +endef + +define RTC_TOOLS_INSTALL_TARGET_CMDS + $(foreach bin,$(RTC_TOOLS_BINARIES),\ + $(INSTALL) -D -m 0755 $(@D)/$(bin) $(TARGET_DIR)/usr/bin/$(bin) + ) +endef + +$(eval $(generic-package)) diff --git a/package/rtl8188eu/Config.in b/package/rtl8188eu/Config.in new file mode 100644 index 00000000..9263802e --- /dev/null +++ b/package/rtl8188eu/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_RTL8188EU + bool "rtl8188eu" + depends on BR2_LINUX_KERNEL + help + A standalone driver for the RTL8188EU USB Wi-Fi adapter. + This is needed only for Linux kernels before 3.12. + Since 3.12, there is a (staging) driver in mainline, with a + similar codebase. + + Make sure your target kernel has the CONFIG_WIRELESS_EXT + config option enabled. + + Note: this package needs a firmware loading mechanism to load + the binary blob for the chip to work. + + https://github.com/lwfinger/rtl8188eu + +comment "rtl8188eu needs a Linux kernel to be built" + depends on !BR2_LINUX_KERNEL diff --git a/package/rtl8188eu/rtl8188eu.hash b/package/rtl8188eu/rtl8188eu.hash new file mode 100644 index 00000000..37767f5d --- /dev/null +++ b/package/rtl8188eu/rtl8188eu.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 b2b06c842bccd730d68a26b1c1b5a24f18373401e907147bf5e775fa42a36bbb rtl8188eu-60cb0b5a3cfc95e3f2e6fc294a28d987096b0559.tar.gz +sha256 af8067302947c01fd9eee72befa54c7e3ef8a48fecde7fd71277f2290b2bf0f7 COPYING diff --git a/package/rtl8188eu/rtl8188eu.mk b/package/rtl8188eu/rtl8188eu.mk new file mode 100644 index 00000000..b2066080 --- /dev/null +++ b/package/rtl8188eu/rtl8188eu.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# rtl8188eu +# +################################################################################ + +RTL8188EU_VERSION = 60cb0b5a3cfc95e3f2e6fc294a28d987096b0559 +RTL8188EU_SITE = $(call github,lwfinger,rtl8188eu,$(RTL8188EU_VERSION)) +RTL8188EU_LICENSE = GPL-2.0, proprietary (rtl8188eufw.bin firmware blob) +RTL8188EU_LICENSE_FILES = COPYING +RTL8188EU_MODULE_MAKE_OPTS = CONFIG_RTL8188EU=m + +define RTL8188EU_INSTALL_FIRMWARE + $(INSTALL) -D -m 644 $(@D)/rtl8188eufw.bin \ + $(TARGET_DIR)/lib/firmware/rtlwifi/rtl8188eufw.bin +endef +RTL8188EU_POST_INSTALL_TARGET_HOOKS += RTL8188EU_INSTALL_FIRMWARE + +$(eval $(kernel-module)) +$(eval $(generic-package)) diff --git a/package/rtl8189fs/Config.in b/package/rtl8189fs/Config.in new file mode 100644 index 00000000..ae69b792 --- /dev/null +++ b/package/rtl8189fs/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_RTL8189FS + bool "rtl8189fs" + depends on BR2_LINUX_KERNEL + help + Wireless driver rtl8189fs. + + https://github.com/jwrdegoede/rtl8189ES_linux.git + +comment "rtl8189fs needs a Linux kernel to be built" + depends on !BR2_LINUX_KERNEL diff --git a/package/rtl8189fs/rtl8189fs.hash b/package/rtl8189fs/rtl8189fs.hash new file mode 100644 index 00000000..f1524a6f --- /dev/null +++ b/package/rtl8189fs/rtl8189fs.hash @@ -0,0 +1,2 @@ +# Locally calculated +sha256 f3f8bcc1e75f095350f12c36f7b8af88eebf3913d4bc921083489f1758cb5068 rtl8189fs-54bd6808e38f213126e7d6447ae9d80c656179f3.tar.gz diff --git a/package/rtl8189fs/rtl8189fs.mk b/package/rtl8189fs/rtl8189fs.mk new file mode 100644 index 00000000..39122bc7 --- /dev/null +++ b/package/rtl8189fs/rtl8189fs.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# rtl8189fs +# +################################################################################ + +RTL8189FS_VERSION = 54bd6808e38f213126e7d6447ae9d80c656179f3 +RTL8189FS_SITE = $(call github,jwrdegoede,rtl8189ES_linux,$(RTL8189FS_VERSION)) +RTL8189FS_LICENSE = GPL-2.0 + +RTL8189FS_MODULE_MAKE_OPTS = \ + CONFIG_RTL8189FS=m \ + KVER=$(LINUX_VERSION_PROBED) \ + KSRC=$(LINUX_DIR) + +$(eval $(kernel-module)) +$(eval $(generic-package)) diff --git a/package/rtl8723bs/0001-rtl8723bs-add-debug-level-modparam.patch b/package/rtl8723bs/0001-rtl8723bs-add-debug-level-modparam.patch new file mode 100644 index 00000000..0443c1f9 --- /dev/null +++ b/package/rtl8723bs/0001-rtl8723bs-add-debug-level-modparam.patch @@ -0,0 +1,41 @@ +From 9f70428f506ac9d5af325004c01c59c62669d7eb Mon Sep 17 00:00:00 2001 +From: Jason Abele +Date: Sat, 15 Aug 2015 18:20:54 -0700 +Subject: [PATCH] rtl8723bs: add debug level modparam + +For ease of controlling debug printk verbosity, add a module parameter +which sets debug level at module load. + +Signed-off-by: Jason Abele +[Fixed to apply on current version] +Signed-off-by: Ariel D'Alessandro +--- + os_dep/os_intfs.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/os_dep/os_intfs.c b/os_dep/os_intfs.c +index b30c2a0..eeb8946 100644 +--- a/os_dep/os_intfs.c ++++ b/os_dep/os_intfs.c +@@ -231,6 +231,10 @@ module_param(rtw_decrypt_phy_file, int, 0644); + MODULE_PARM_DESC(rtw_decrypt_phy_file,"Enable Decrypt PHY File"); + #endif + ++int rtw_debug_level = _drv_err_; ++module_param(rtw_debug_level, int, 0644); ++MODULE_PARM_DESC(rtw_debug_level,"Set Driver Debug Verbosity"); ++ + int _netdev_open(struct net_device *pnetdev); + int netdev_open (struct net_device *pnetdev); + static int netdev_close (struct net_device *pnetdev); +@@ -347,6 +351,7 @@ static uint loadparam(struct adapter *padapter, _nic_hdl pnetdev) + registry_par->qos_opt_enable = (u8)rtw_qos_opt_enable; + + registry_par->hiq_filter = (u8)rtw_hiq_filter; ++ GlobalDebugLevel = rtw_debug_level; + return status; + } + +-- +2.8.3 + diff --git a/package/rtl8723bs/Config.in b/package/rtl8723bs/Config.in new file mode 100644 index 00000000..3d5dea40 --- /dev/null +++ b/package/rtl8723bs/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_RTL8723BS + bool "rtl8723bs" + depends on BR2_LINUX_KERNEL + help + rtl8723bs wifi driver + + https://github.com/hadess/rtl8723bs + +comment "rtl8723bs needs a Linux kernel to be built" + depends on !BR2_LINUX_KERNEL diff --git a/package/rtl8723bs/rtl8723bs.mk b/package/rtl8723bs/rtl8723bs.mk new file mode 100644 index 00000000..4c6303c2 --- /dev/null +++ b/package/rtl8723bs/rtl8723bs.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# rtl8723bs +# +################################################################################ + +RTL8723BS_VERSION = 11ab92d8ccd71c80f0102828366b14ef6b676fb2 +RTL8723BS_SITE = $(call github,hadess,rtl8723bs,$(RTL8723BS_VERSION)) +RTL8723BS_LICENSE = GPL-2.0, proprietary (*.bin firmware blobs) + +RTL8723BS_MODULE_MAKE_OPTS = \ + CONFIG_RTL8723BS=m \ + KVER=$(LINUX_VERSION_PROBED) \ + KSRC=$(LINUX_DIR) + +RTL8723BS_BINS = rtl8723bs_ap_wowlan.bin rtl8723bs_wowlan.bin \ + rtl8723bs_bt.bin rtl8723bs_nic.bin + +define RTL8723BS_INSTALL_FIRMWARE + $(foreach bin, $(RTL8723BS_BINS), \ + $(INSTALL) -D -m 644 $(@D)/$(bin) $(TARGET_DIR)/lib/firmware/rtlwifi/$(bin) + ) +endef +RTL8723BS_POST_INSTALL_TARGET_HOOKS += RTL8723BS_INSTALL_FIRMWARE + +$(eval $(kernel-module)) +$(eval $(generic-package)) diff --git a/package/rtl8723bu/Config.in b/package/rtl8723bu/Config.in new file mode 100644 index 00000000..266a794a --- /dev/null +++ b/package/rtl8723bu/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_RTL8723BU + bool "rtl8723bu" + depends on BR2_LINUX_KERNEL + help + rtl8723bu wifi driver + + https://github.com/lwfinger/rtl8723bu + +comment "rtl8723bu needs a Linux kernel to be built" + depends on !BR2_LINUX_KERNEL diff --git a/package/rtl8723bu/rtl8723bu.hash b/package/rtl8723bu/rtl8723bu.hash new file mode 100644 index 00000000..04bc776a --- /dev/null +++ b/package/rtl8723bu/rtl8723bu.hash @@ -0,0 +1,2 @@ +# Locally computed +sha256 4c7314dccebda1e55ec8dcf0d5ca8915c2490d17a9f56923f25e6e0e945c10cc rtl8723bu-9ce1c38439f4f574bb7adaf33949835c25536a28.tar.gz diff --git a/package/rtl8723bu/rtl8723bu.mk b/package/rtl8723bu/rtl8723bu.mk new file mode 100644 index 00000000..c35fad58 --- /dev/null +++ b/package/rtl8723bu/rtl8723bu.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# rtl8723bu +# +################################################################################ + +RTL8723BU_VERSION = 9ce1c38439f4f574bb7adaf33949835c25536a28 +RTL8723BU_SITE = $(call github,lwfinger,rtl8723bu,$(RTL8723BU_VERSION)) +RTL8723BU_LICENSE = GPL-2.0, proprietary (*.bin firmware blobs) + +RTL8723BU_MODULE_MAKE_OPTS = \ + KVER=$(LINUX_VERSION_PROBED) \ + KSRC=$(LINUX_DIR) + +define RTL8723BU_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 644 $(@D)/rtl8723b_fw.bin $(TARGET_DIR)/lib/firmware/rtlwifi/rtl8723b_fw.bin +endef + +$(eval $(kernel-module)) +$(eval $(generic-package)) diff --git a/package/rtl8821au/0001-Fix-implicit-fallthrough-comments-for-kernel-5.3.patch b/package/rtl8821au/0001-Fix-implicit-fallthrough-comments-for-kernel-5.3.patch new file mode 100644 index 00000000..00e801b6 --- /dev/null +++ b/package/rtl8821au/0001-Fix-implicit-fallthrough-comments-for-kernel-5.3.patch @@ -0,0 +1,29 @@ +From 99f1e8bd7172ddf9613db3531a8b37921ed73351 Mon Sep 17 00:00:00 2001 +From: Jesper Skov +Date: Fri, 25 Oct 2019 10:05:41 +0200 +Subject: [PATCH] Fix implicit fallthrough comments for kernel 5.3 + +[Upstream: https://github.com/abperiasamy/rtl8812AU_8821AU_linux/commit/e8a30a4c5a80efbbd5b1dbfe11b22916df4492f9.patch] +Signed-off-by: Peter Seiderer +Signed-off-by: Christian Stewart +--- + core/rtw_mlme_ext.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/core/rtw_mlme_ext.c b/core/rtw_mlme_ext.c +index 24565ea..380f507 100644 +--- a/core/rtw_mlme_ext.c ++++ b/core/rtw_mlme_ext.c +@@ -758,7 +758,9 @@ void mgt_dispatcher(_adapter *padapter, union recv_frame *precv_frame) + else + ptable->func = &OnAuthClient; + //pass through ++ //fallthrough + case WIFI_ASSOCREQ: ++ //fallthrough + case WIFI_REASSOCREQ: + _mgt_dispatcher(padapter, ptable, precv_frame); + #ifdef CONFIG_HOSTAPD_MLME +-- +2.28.0 + diff --git a/package/rtl8821au/0002-Fix-kernel-5.3-driver-crashes-from-aircrack-ng-rtl88.patch b/package/rtl8821au/0002-Fix-kernel-5.3-driver-crashes-from-aircrack-ng-rtl88.patch new file mode 100644 index 00000000..213ea806 --- /dev/null +++ b/package/rtl8821au/0002-Fix-kernel-5.3-driver-crashes-from-aircrack-ng-rtl88.patch @@ -0,0 +1,169 @@ +From cde2dbf6e94e00fcf198422b03de01d3090675d9 Mon Sep 17 00:00:00 2001 +From: Jesper Skov +Date: Fri, 25 Oct 2019 10:10:29 +0200 +Subject: [PATCH] Fix kernel 5.3 driver crashes, from aircrack-ng/rtl8812au#421 + +[Upstream: https://github.com/abperiasamy/rtl8812AU_8821AU_linux/commit/822b485d36d6f72304a219c3be228f40968b542b.patch] +Signed-off-by: Peter Seiderer +Signed-off-by: Christian Stewart +--- + os_dep/linux/rtw_cfgvendor.c | 45 ++++++++++++++++++++++++++++++++++++ + 1 file changed, 45 insertions(+) + +diff --git a/os_dep/linux/rtw_cfgvendor.c b/os_dep/linux/rtw_cfgvendor.c +index e7ba90a..81fc8af 100644 +--- a/os_dep/linux/rtw_cfgvendor.c ++++ b/os_dep/linux/rtw_cfgvendor.c +@@ -1173,6 +1173,9 @@ static const struct wiphy_vendor_command rtw_vendor_cmds [] = { + .subcmd = BRCM_VENDOR_SCMD_PRIV_STR + }, + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,3,0) ++ .policy = VENDOR_CMD_RAW_DATA, ++#endif + .doit = wl_cfgvendor_priv_string_handler + }, + #if defined(GSCAN_SUPPORT) && 0 +@@ -1182,6 +1185,9 @@ static const struct wiphy_vendor_command rtw_vendor_cmds [] = { + .subcmd = GSCAN_SUBCMD_GET_CAPABILITIES + }, + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,3,0) ++ .policy = VENDOR_CMD_RAW_DATA, ++#endif + .doit = wl_cfgvendor_gscan_get_capabilities + }, + { +@@ -1190,6 +1196,9 @@ static const struct wiphy_vendor_command rtw_vendor_cmds [] = { + .subcmd = GSCAN_SUBCMD_SET_CONFIG + }, + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,3,0) ++ .policy = VENDOR_CMD_RAW_DATA, ++#endif + .doit = wl_cfgvendor_set_scan_cfg + }, + { +@@ -1198,6 +1207,9 @@ static const struct wiphy_vendor_command rtw_vendor_cmds [] = { + .subcmd = GSCAN_SUBCMD_SET_SCAN_CONFIG + }, + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,3,0) ++ .policy = VENDOR_CMD_RAW_DATA, ++#endif + .doit = wl_cfgvendor_set_batch_scan_cfg + }, + { +@@ -1206,6 +1218,9 @@ static const struct wiphy_vendor_command rtw_vendor_cmds [] = { + .subcmd = GSCAN_SUBCMD_ENABLE_GSCAN + }, + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,3,0) ++ .policy = VENDOR_CMD_RAW_DATA, ++#endif + .doit = wl_cfgvendor_initiate_gscan + }, + { +@@ -1214,6 +1229,9 @@ static const struct wiphy_vendor_command rtw_vendor_cmds [] = { + .subcmd = GSCAN_SUBCMD_ENABLE_FULL_SCAN_RESULTS + }, + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,3,0) ++ .policy = VENDOR_CMD_RAW_DATA, ++#endif + .doit = wl_cfgvendor_enable_full_scan_result + }, + { +@@ -1222,6 +1240,9 @@ static const struct wiphy_vendor_command rtw_vendor_cmds [] = { + .subcmd = GSCAN_SUBCMD_SET_HOTLIST + }, + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,3,0) ++ .policy = VENDOR_CMD_RAW_DATA, ++#endif + .doit = wl_cfgvendor_hotlist_cfg + }, + { +@@ -1230,6 +1251,9 @@ static const struct wiphy_vendor_command rtw_vendor_cmds [] = { + .subcmd = GSCAN_SUBCMD_SET_SIGNIFICANT_CHANGE_CONFIG + }, + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,3,0) ++ .policy = VENDOR_CMD_RAW_DATA, ++#endif + .doit = wl_cfgvendor_significant_change_cfg + }, + { +@@ -1238,6 +1262,9 @@ static const struct wiphy_vendor_command rtw_vendor_cmds [] = { + .subcmd = GSCAN_SUBCMD_GET_SCAN_RESULTS + }, + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,3,0) ++ .policy = VENDOR_CMD_RAW_DATA, ++#endif + .doit = wl_cfgvendor_gscan_get_batch_results + }, + { +@@ -1246,6 +1273,9 @@ static const struct wiphy_vendor_command rtw_vendor_cmds [] = { + .subcmd = GSCAN_SUBCMD_GET_CHANNEL_LIST + }, + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,3,0) ++ .policy = VENDOR_CMD_RAW_DATA, ++#endif + .doit = wl_cfgvendor_gscan_get_channel_list + }, + #endif /* GSCAN_SUPPORT */ +@@ -1256,6 +1286,9 @@ static const struct wiphy_vendor_command rtw_vendor_cmds [] = { + .subcmd = RTT_SUBCMD_SET_CONFIG + }, + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,3,0) ++ .policy = VENDOR_CMD_RAW_DATA, ++#endif + .doit = wl_cfgvendor_rtt_set_config + }, + { +@@ -1264,6 +1297,9 @@ static const struct wiphy_vendor_command rtw_vendor_cmds [] = { + .subcmd = RTT_SUBCMD_CANCEL_CONFIG + }, + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,3,0) ++ .policy = VENDOR_CMD_RAW_DATA, ++#endif + .doit = wl_cfgvendor_rtt_cancel_config + }, + { +@@ -1272,6 +1308,9 @@ static const struct wiphy_vendor_command rtw_vendor_cmds [] = { + .subcmd = RTT_SUBCMD_GETCAPABILITY + }, + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,3,0) ++ .policy = VENDOR_CMD_RAW_DATA, ++#endif + .doit = wl_cfgvendor_rtt_get_capability + }, + #endif /* RTT_SUPPORT */ +@@ -1281,6 +1320,9 @@ static const struct wiphy_vendor_command rtw_vendor_cmds [] = { + .subcmd = ANDR_WIFI_SUBCMD_GET_FEATURE_SET + }, + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,3,0) ++ .policy = VENDOR_CMD_RAW_DATA, ++#endif + .doit = rtw_cfgvendor_get_feature_set + }, + { +@@ -1289,6 +1331,9 @@ static const struct wiphy_vendor_command rtw_vendor_cmds [] = { + .subcmd = ANDR_WIFI_SUBCMD_GET_FEATURE_SET_MATRIX + }, + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV, ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,3,0) ++ .policy = VENDOR_CMD_RAW_DATA, ++#endif + .doit = rtw_cfgvendor_get_feature_set_matrix + } + }; +-- +2.28.0 + diff --git a/package/rtl8821au/0003-Fix-using-sprintf-for-extending-string-which-causes-.patch b/package/rtl8821au/0003-Fix-using-sprintf-for-extending-string-which-causes-.patch new file mode 100644 index 00000000..2c4b595c --- /dev/null +++ b/package/rtl8821au/0003-Fix-using-sprintf-for-extending-string-which-causes-.patch @@ -0,0 +1,339 @@ +From 5b6641978e8fa68bca05d224a61f8513b010eda8 Mon Sep 17 00:00:00 2001 +From: Coleman +Date: Fri, 17 Jul 2020 08:53:00 +0800 +Subject: [PATCH] Fix using sprintf for extending string, which causes + undefined behavior + +[Upstream: https://github.com/abperiasamy/rtl8812AU_8821AU_linux/commit/be57045a0933d64e958878696883e9cf998e1bf3.patch] +Signed-off-by: Coleman +Signed-off-by: Christian Stewart +--- + core/rtw_mp.c | 2 +- + os_dep/linux/ioctl_linux.c | 108 ++++++++++++++++++------------------- + 2 files changed, 55 insertions(+), 55 deletions(-) + +diff --git a/core/rtw_mp.c b/core/rtw_mp.c +index c2e400d..989bb3e 100644 +--- a/core/rtw_mp.c ++++ b/core/rtw_mp.c +@@ -1871,7 +1871,7 @@ u32 mp_query_psd(PADAPTER pAdapter, u8 *data) + } else { + psd_data = rtw_GetPSDData(pAdapter, i); + } +- sprintf(data, "%s%x ", data, psd_data); ++ sprintf(data + strlen(data), "%x ", psd_data); + i++; + } + +diff --git a/os_dep/linux/ioctl_linux.c b/os_dep/linux/ioctl_linux.c +index c74a153..9543fa3 100644 +--- a/os_dep/linux/ioctl_linux.c ++++ b/os_dep/linux/ioctl_linux.c +@@ -9080,19 +9080,19 @@ static int rtw_mp_efuse_get(struct net_device *dev, + sprintf(extra, "\n"); + for (i = 0; i < EFUSE_MAP_SIZE; i += 16) { + // DBG_871X("0x%02x\t", i); +- sprintf(extra, "%s0x%02x\t", extra, i); ++ sprintf(extra + strlen(extra), "0x%02x\t", i); + for (j=0; j<8; j++) { + // DBG_871X("%02X ", data[i+j]); +- sprintf(extra, "%s%02X ", extra, PROMContent[i+j]); ++ sprintf(extra + strlen(extra), "%02X ", PROMContent[i+j]); + } + // DBG_871X("\t"); +- sprintf(extra, "%s\t", extra); ++ sprintf(extra + strlen(extra), "\t"); + for (; j<16; j++) { + // DBG_871X("%02X ", data[i+j]); +- sprintf(extra, "%s%02X ", extra, PROMContent[i+j]); ++ sprintf(extra + strlen(extra), "%02X ", PROMContent[i+j]); + } + // DBG_871X("\n"); +- sprintf(extra,"%s\n",extra); ++ sprintf(extra + strlen(extra), "\n"); + } + // DBG_871X("\n"); + } else if (strcmp(tmp[0], "realmap") == 0) { +@@ -9107,19 +9107,19 @@ static int rtw_mp_efuse_get(struct net_device *dev, + sprintf(extra, "\n"); + for (i = 0; i < EFUSE_MAP_SIZE; i += 16) { + // DBG_871X("0x%02x\t", i); +- sprintf(extra, "%s0x%02x\t", extra, i); ++ sprintf(extra + strlen(extra), "0x%02x\t", i); + for (j=0; j<8; j++) { + // DBG_871X("%02X ", data[i+j]); +- sprintf(extra, "%s%02X ", extra, pEfuseHal->fakeEfuseInitMap[i+j]); ++ sprintf(extra + strlen(extra), "%02X ", pEfuseHal->fakeEfuseInitMap[i+j]); + } + // DBG_871X("\t"); +- sprintf(extra, "%s\t", extra); ++ sprintf(extra + strlen(extra), "\t"); + for (; j<16; j++) { + // DBG_871X("%02X ", data[i+j]); +- sprintf(extra, "%s%02X ", extra, pEfuseHal->fakeEfuseInitMap[i+j]); ++ sprintf(extra + strlen(extra), "%02X ", pEfuseHal->fakeEfuseInitMap[i+j]); + } + // DBG_871X("\n"); +- sprintf(extra,"%s\n",extra); ++ sprintf(extra + strlen(extra), "\n"); + } + // DBG_871X("\n"); + } else if (strcmp(tmp[0], "rmap") == 0) { +@@ -9158,7 +9158,7 @@ static int rtw_mp_efuse_get(struct net_device *dev, + *extra = 0; + for (i=0; iBTEfuseInitMap[i+j]); +- sprintf(extra, "%s%02X ", extra, pEfuseHal->BTEfuseInitMap[i+j]); ++ sprintf(extra + strlen(extra), "%02X ", pEfuseHal->BTEfuseInitMap[i+j]); + } + // DBG_871X("\t"); +- sprintf(extra,"%s\t",extra); ++ sprintf(extra + strlen(extra), "\t"); + for (; j<16; j++) { + // DBG_871X("%02X ", pEfuseHal->BTEfuseInitMap[i+j]); +- sprintf(extra, "%s%02X ", extra, pEfuseHal->BTEfuseInitMap[i+j]); ++ sprintf(extra + strlen(extra), "%02X ", pEfuseHal->BTEfuseInitMap[i+j]); + } + // DBG_871X("\n"); +- sprintf(extra, "%s\n", extra); ++ sprintf(extra + strlen(extra), "\n"); + } + // DBG_871X("\n"); + } else if (strcmp(tmp[0],"btbmap") == 0) { +@@ -9384,19 +9384,19 @@ static int rtw_mp_efuse_get(struct net_device *dev, + sprintf(extra, "\n"); + for (i=512; i<1024 ; i+=16) { + // DBG_871X("0x%03x\t", i); +- sprintf(extra, "%s0x%03x\t", extra, i); ++ sprintf(extra + strlen(extra), "0x%03x\t", i); + for (j=0; j<8; j++) { + // DBG_871X("%02X ", data[i+j]); +- sprintf(extra, "%s%02X ", extra, pEfuseHal->BTEfuseInitMap[i+j]); ++ sprintf(extra + strlen(extra), "%02X ", pEfuseHal->BTEfuseInitMap[i+j]); + } + // DBG_871X("\t"); +- sprintf(extra,"%s\t",extra); ++ sprintf(extra + strlen(extra), "\t"); + for (; j<16; j++) { + // DBG_871X("%02X ", data[i+j]); +- sprintf(extra, "%s%02X ", extra, pEfuseHal->BTEfuseInitMap[i+j]); ++ sprintf(extra + strlen(extra), "%02X ", pEfuseHal->BTEfuseInitMap[i+j]); + } + // DBG_871X("\n"); +- sprintf(extra, "%s\n", extra); ++ sprintf(extra + strlen(extra), "\n"); + } + // DBG_871X("\n"); + } else if (strcmp(tmp[0],"btrmap") == 0) { +@@ -9436,7 +9436,7 @@ static int rtw_mp_efuse_get(struct net_device *dev, + // DBG_871X("%s: bt efuse data={", __FUNCTION__); + for (i=0; ifakeBTEfuseModifiedMap[i+j]); +- sprintf(extra, "%s%02X ", extra, pEfuseHal->fakeBTEfuseModifiedMap[i+j]); ++ sprintf(extra + strlen(extra), "%02X ", pEfuseHal->fakeBTEfuseModifiedMap[i+j]); + } + // DBG_871X("\t"); +- sprintf(extra, "%s\t", extra); ++ sprintf(extra + strlen(extra), "\t"); + for (; j<16; j++) { + // DBG_871X("%02X ", pEfuseHal->fakeBTEfuseModifiedMap[i+j]); +- sprintf(extra, "%s%02X ", extra, pEfuseHal->fakeBTEfuseModifiedMap[i+j]); ++ sprintf(extra + strlen(extra), "%02X ", pEfuseHal->fakeBTEfuseModifiedMap[i+j]); + } + // DBG_871X("\n"); +- sprintf(extra, "%s\n", extra); ++ sprintf(extra + strlen(extra), "\n"); + } + // DBG_871X("\n"); + } else if (strcmp(tmp[0],"btbfake") == 0) { +@@ -9465,19 +9465,19 @@ static int rtw_mp_efuse_get(struct net_device *dev, + sprintf(extra, "\n"); + for (i=512; i<1024; i+=16) { + // DBG_871X("0x%03x\t", i); +- sprintf(extra, "%s0x%03x\t", extra, i); ++ sprintf(extra + strlen(extra), "0x%03x\t", i); + for (j=0; j<8; j++) { + // DBG_871X("%02X ", pEfuseHal->fakeBTEfuseModifiedMap[i+j]); +- sprintf(extra, "%s%02X ", extra, pEfuseHal->fakeBTEfuseModifiedMap[i+j]); ++ sprintf(extra + strlen(extra), "%02X ", pEfuseHal->fakeBTEfuseModifiedMap[i+j]); + } + // DBG_871X("\t"); +- sprintf(extra, "%s\t", extra); ++ sprintf(extra + strlen(extra), "\t"); + for (; j<16; j++) { + // DBG_871X("%02X ", pEfuseHal->fakeBTEfuseModifiedMap[i+j]); +- sprintf(extra, "%s%02X ", extra, pEfuseHal->fakeBTEfuseModifiedMap[i+j]); ++ sprintf(extra + strlen(extra), "%02X ", pEfuseHal->fakeBTEfuseModifiedMap[i+j]); + } + // DBG_871X("\n"); +- sprintf(extra, "%s\n", extra); ++ sprintf(extra + strlen(extra), "\n"); + } + // DBG_871X("\n"); + } else if (strcmp(tmp[0],"wlrfkmap")== 0) { +@@ -9485,19 +9485,19 @@ static int rtw_mp_efuse_get(struct net_device *dev, + sprintf(extra, "\n"); + for (i=0; ifakeEfuseModifiedMap[i+j]); +- sprintf(extra, "%s%02X ", extra, pEfuseHal->fakeEfuseModifiedMap[i+j]); ++ sprintf(extra + strlen(extra), "%02X ", pEfuseHal->fakeEfuseModifiedMap[i+j]); + } + // DBG_871X("\t"); +- sprintf(extra, "%s\t", extra); ++ sprintf(extra + strlen(extra), "\t"); + for (; j<16; j++) { + // DBG_871X("%02X ", pEfuseHal->fakeEfuseModifiedMap[i+j]); +- sprintf(extra, "%s %02X", extra, pEfuseHal->fakeEfuseModifiedMap[i+j]); ++ sprintf(extra + strlen(extra), " %02X", pEfuseHal->fakeEfuseModifiedMap[i+j]); + } + // DBG_871X("\n"); +- sprintf(extra, "%s\n", extra); ++ sprintf(extra + strlen(extra), "\n"); + } + // DBG_871X("\n"); + +@@ -9523,7 +9523,7 @@ static int rtw_mp_efuse_get(struct net_device *dev, + *extra = 0; + for (i=0; ifakeEfuseModifiedMap[addr+i]); +- sprintf(extra, "%s0x%02X ", extra, pEfuseHal->fakeEfuseModifiedMap[addr+i]); ++ sprintf(extra + strlen(extra), "0x%02X ", pEfuseHal->fakeEfuseModifiedMap[addr+i]); + } + } else if (strcmp(tmp[0],"btrfkrmap")== 0) { + if ((tmp[1]==NULL) || (tmp[2]==NULL)) { +@@ -9547,7 +9547,7 @@ static int rtw_mp_efuse_get(struct net_device *dev, + *extra = 0; + for (i=0; ifakeBTEfuseModifiedMap[addr+i]); +- sprintf(extra, "%s0x%02X ", extra, pEfuseHal->fakeBTEfuseModifiedMap[addr+i]); ++ sprintf(extra + strlen(extra), "0x%02X ", pEfuseHal->fakeBTEfuseModifiedMap[addr+i]); + } + } else { + sprintf(extra, "Command not found!"); +@@ -10409,7 +10409,7 @@ static int rtw_mp_read_reg(struct net_device *dev, + pnext++; + if ( *pnext != '\0' ) { + strtout = simple_strtoul (pnext , &ptmp, 16); +- sprintf( extra, "%s %d" ,extra ,strtout ); ++ sprintf(extra + strlen(extra), " %d" ,strtout ); + } else { + break; + } +@@ -10443,7 +10443,7 @@ static int rtw_mp_read_reg(struct net_device *dev, + pnext++; + if ( *pnext != '\0' ) { + strtout = simple_strtoul (pnext , &ptmp, 16); +- sprintf( extra, "%s %d" ,extra ,strtout ); ++ sprintf(extra + strlen(extra), " %d" ,strtout ); + } else { + break; + } +@@ -10566,7 +10566,7 @@ static int rtw_mp_read_rf(struct net_device *dev, + pnext++; + if ( *pnext != '\0' ) { + strtou = simple_strtoul (pnext , &ptmp, 16); +- sprintf( extra, "%s %d" ,extra ,strtou ); ++ sprintf(extra + strlen(extra), " %d" ,strtou ); + } else { + break; + } +@@ -12155,14 +12155,14 @@ todo: + goto exit; + + #ifdef CONFIG_RTL8723A +- sprintf(extra, "%s %d ", extra, (pMptCtx->mptOutBuf[i]& 0x3f)); ++ sprintf(extra + strlen(extra), " %d ", (pMptCtx->mptOutBuf[i]& 0x3f)); + #else +- sprintf(extra, "%s %d ", extra, (pMptCtx->mptOutBuf[i]& 0x1f)); ++ sprintf(extra + strlen(extra), " %d ", (pMptCtx->mptOutBuf[i]& 0x1f)); + #endif + } + } else { + for (i=4; imptOutLen; i++) { +- sprintf(extra, "%s 0x%x ", extra, pMptCtx->mptOutBuf[i]); ++ sprintf(extra + strlen(extra), " 0x%x ", pMptCtx->mptOutBuf[i]); + } + } + +-- +2.28.0 + diff --git a/package/rtl8821au/0004-rename-sha256_state-to-rtl_sha256_state-to-avoid-nam.patch b/package/rtl8821au/0004-rename-sha256_state-to-rtl_sha256_state-to-avoid-nam.patch new file mode 100644 index 00000000..41cee2b2 --- /dev/null +++ b/package/rtl8821au/0004-rename-sha256_state-to-rtl_sha256_state-to-avoid-nam.patch @@ -0,0 +1,79 @@ +From 19aee91e45788d594615a9be58fa5d0879ec816a Mon Sep 17 00:00:00 2001 +From: youcai +Date: Tue, 18 Aug 2020 00:43:16 +0800 +Subject: [PATCH] rename sha256_state to rtl_sha256_state to avoid name + conflict with crypto + +[Upstream: https://github.com/abperiasamy/rtl8812AU_8821AU_linux/pull/338/commits/af6f6c1578f16145478326a939bb7593bbcdb4e7.patch] +Signed-off-by: Coleman +Signed-off-by: Christian Stewart +--- + core/rtw_security.c | 10 +++++----- + include/rtw_security.h | 2 +- + 2 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/core/rtw_security.c b/core/rtw_security.c +index d54e6af..de2d91f 100644 +--- a/core/rtw_security.c ++++ b/core/rtw_security.c +@@ -2200,7 +2200,7 @@ BIP_exit: + + #ifndef PLATFORM_FREEBSD + /* compress 512-bits */ +-static int sha256_compress(struct sha256_state *md, unsigned char *buf) ++static int sha256_compress(struct rtl_sha256_state *md, unsigned char *buf) + { + u32 S[8], W[64], t0, t1; + u32 t; +@@ -2249,7 +2249,7 @@ static int sha256_compress(struct sha256_state *md, unsigned char *buf) + } + + /* Initialize the hash state */ +-static void sha256_init(struct sha256_state *md) ++static void sha256_init(struct rtl_sha256_state *md) + { + md->curlen = 0; + md->length = 0; +@@ -2270,7 +2270,7 @@ static void sha256_init(struct sha256_state *md) + @param inlen The length of the data (octets) + @return CRYPT_OK if successful + */ +-static int sha256_process(struct sha256_state *md, unsigned char *in, ++static int sha256_process(struct rtl_sha256_state *md, unsigned char *in, + unsigned long inlen) + { + unsigned long n; +@@ -2311,7 +2311,7 @@ static int sha256_process(struct sha256_state *md, unsigned char *in, + @param out [out] The destination of the hash (32 bytes) + @return CRYPT_OK if successful + */ +-static int sha256_done(struct sha256_state *md, unsigned char *out) ++static int sha256_done(struct rtl_sha256_state *md, unsigned char *out) + { + int i; + +@@ -2363,7 +2363,7 @@ static int sha256_done(struct sha256_state *md, unsigned char *out) + static int sha256_vector(size_t num_elem, u8 *addr[], size_t *len, + u8 *mac) + { +- struct sha256_state ctx; ++ struct rtl_sha256_state ctx; + size_t i; + + sha256_init(&ctx); +diff --git a/include/rtw_security.h b/include/rtw_security.h +index d41014e..98feb69 100644 +--- a/include/rtw_security.h ++++ b/include/rtw_security.h +@@ -233,7 +233,7 @@ struct security_priv { + #endif /* DBG_SW_SEC_CNT */ + }; + +-struct sha256_state { ++struct rtl_sha256_state { + u64 length; + u32 state[8], curlen; + u8 buf[64]; +-- +2.28.0 + diff --git a/package/rtl8821au/0005-disable-rtw_mgmt_frame_register-on-kernel-5.8.0.patch b/package/rtl8821au/0005-disable-rtw_mgmt_frame_register-on-kernel-5.8.0.patch new file mode 100644 index 00000000..6d09153b --- /dev/null +++ b/package/rtl8821au/0005-disable-rtw_mgmt_frame_register-on-kernel-5.8.0.patch @@ -0,0 +1,47 @@ +From 9421b0763e5f20babb2c0fd437979a71fbac1739 Mon Sep 17 00:00:00 2001 +From: Christian Stewart +Date: Tue, 8 Sep 2020 22:46:45 -0700 +Subject: [PATCH] disable rtw_mgmt_frame_register on kernel 5.8.0 + +rtl8812au: fix build for kernel 5.8 + +[Source: https://github.com/lwfinger/rtl8812au/commit/ec1591b90dd323185717fa42887f96444cca5921.patch] +Signed-off-by: Larry Finger +Signed-off-by: Christian Stewart +--- + os_dep/linux/ioctl_cfg80211.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/os_dep/linux/ioctl_cfg80211.c b/os_dep/linux/ioctl_cfg80211.c +index 019daf9..13238cb 100644 +--- a/os_dep/linux/ioctl_cfg80211.c ++++ b/os_dep/linux/ioctl_cfg80211.c +@@ -5177,6 +5177,7 @@ exit: + return ret; + } + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0) + static void cfg80211_rtw_mgmt_frame_register(struct wiphy *wiphy, + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0)) + struct wireless_dev *wdev, +@@ -5205,6 +5206,7 @@ static void cfg80211_rtw_mgmt_frame_register(struct wiphy *wiphy, + exit: + return; + } ++#endif + + #if defined(CONFIG_TDLS) && (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) + static int cfg80211_rtw_tdls_mgmt(struct wiphy *wiphy, +@@ -6021,7 +6023,9 @@ static struct cfg80211_ops rtw_cfg80211_ops = { + + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE) + .mgmt_tx = cfg80211_rtw_mgmt_tx, ++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0) + .mgmt_frame_register = cfg80211_rtw_mgmt_frame_register, ++#endif + #elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,34) && LINUX_VERSION_CODE<=KERNEL_VERSION(2,6,35)) + .action = cfg80211_rtw_mgmt_tx, + #endif +-- +2.28.0 + diff --git a/package/rtl8821au/0006-rtw_proc-convert-file_operations-to-proc_ops-for-5.6.patch b/package/rtl8821au/0006-rtw_proc-convert-file_operations-to-proc_ops-for-5.6.patch new file mode 100644 index 00000000..30595ec6 --- /dev/null +++ b/package/rtl8821au/0006-rtw_proc-convert-file_operations-to-proc_ops-for-5.6.patch @@ -0,0 +1,110 @@ +From e0ed05200e6e4b86e26e092dc1f16fc8fc1e2b67 Mon Sep 17 00:00:00 2001 +From: Christian Stewart +Date: Tue, 8 Sep 2020 23:08:39 -0700 +Subject: [PATCH] rtw_proc: convert file_operations to proc_ops for 5.6.x + compat + +Signed-off-by: Christian Stewart +[Fix < 5.6.x compile - missing semicolon] +Signed-off-by: Peter Seiderer +--- + os_dep/linux/rtw_proc.c | 40 ++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 38 insertions(+), 2 deletions(-) + +diff --git a/os_dep/linux/rtw_proc.c b/os_dep/linux/rtw_proc.c +index 048080a..6295f66 100644 +--- a/os_dep/linux/rtw_proc.c ++++ b/os_dep/linux/rtw_proc.c +@@ -65,9 +65,15 @@ inline struct proc_dir_entry *rtw_proc_create_dir(const char *name, struct proc_ + } + + inline struct proc_dir_entry *rtw_proc_create_entry(const char *name, struct proc_dir_entry *parent, +- const struct file_operations *fops, void * data) ++ #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 6, 0)) ++ const struct file_operations *fops, ++ #else ++ const struct proc_ops *fops, ++ #endif ++ void * data ++ ) + { +- struct proc_dir_entry *entry; ++ struct proc_dir_entry *entry; + + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)) + entry = proc_create_data(name, S_IFREG|S_IRUGO|S_IWUGO, parent, fops, data); +@@ -167,6 +173,7 @@ static ssize_t rtw_drv_proc_write(struct file *file, const char __user *buffer, + return -EROFS; + } + ++#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 6, 0)) + static const struct file_operations rtw_drv_proc_fops = { + .owner = THIS_MODULE, + .open = rtw_drv_proc_open, +@@ -175,6 +182,15 @@ static const struct file_operations rtw_drv_proc_fops = { + .release = single_release, + .write = rtw_drv_proc_write, + }; ++#else ++static const struct proc_ops rtw_drv_proc_fops = { ++ .proc_open = rtw_drv_proc_open, ++ .proc_read = seq_read, ++ .proc_lseek = seq_lseek, ++ .proc_release = seq_release, ++ .proc_write = rtw_drv_proc_write, ++}; ++#endif + + int rtw_drv_proc_init(void) + { +@@ -776,6 +792,7 @@ static ssize_t rtw_adapter_proc_write(struct file *file, const char __user *buff + return -EROFS; + } + ++#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 6, 0)) + static const struct file_operations rtw_adapter_proc_fops = { + .owner = THIS_MODULE, + .open = rtw_adapter_proc_open, +@@ -784,6 +801,15 @@ static const struct file_operations rtw_adapter_proc_fops = { + .release = single_release, + .write = rtw_adapter_proc_write, + }; ++#else ++static const struct proc_ops rtw_adapter_proc_fops = { ++ .proc_open = rtw_adapter_proc_open, ++ .proc_read = seq_read, ++ .proc_lseek = seq_lseek, ++ .proc_release = single_release, ++ .proc_write = rtw_adapter_proc_write, ++}; ++#endif + + int proc_get_odm_dbg_comp(struct seq_file *m, void *v) + { +@@ -1030,6 +1056,7 @@ static ssize_t rtw_odm_proc_write(struct file *file, const char __user *buffer, + return -EROFS; + } + ++#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 6, 0)) + static const struct file_operations rtw_odm_proc_fops = { + .owner = THIS_MODULE, + .open = rtw_odm_proc_open, +@@ -1038,6 +1065,15 @@ static const struct file_operations rtw_odm_proc_fops = { + .release = single_release, + .write = rtw_odm_proc_write, + }; ++#else ++static const struct proc_ops rtw_odm_proc_fops = { ++ .proc_open = rtw_odm_proc_open, ++ .proc_read = seq_read, ++ .proc_lseek = seq_lseek, ++ .proc_release = single_release, ++ .proc_write = rtw_odm_proc_write, ++}; ++#endif + + struct proc_dir_entry *rtw_odm_proc_init(struct net_device *dev) + { +-- +2.29.0 + diff --git a/package/rtl8821au/Config.in b/package/rtl8821au/Config.in new file mode 100644 index 00000000..87c191b2 --- /dev/null +++ b/package/rtl8821au/Config.in @@ -0,0 +1,10 @@ +comment "rtl8821au needs a Linux kernel to be built" + depends on !BR2_LINUX_KERNEL + +config BR2_PACKAGE_RTL8821AU + bool "rtl8821au" + depends on BR2_LINUX_KERNEL + help + rtl8821au wifi driver + + https://github.com/abperiasamy/rtl8812AU_8821AU_linux diff --git a/package/rtl8821au/rtl8821au.hash b/package/rtl8821au/rtl8821au.hash new file mode 100644 index 00000000..de84332f --- /dev/null +++ b/package/rtl8821au/rtl8821au.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 9c8e127dcf2b4d87df546f7f51afdbca0a0561cdba9bcc2689722e1090c46204 rtl8821au-4235b0ec7d7220a6364586d8e25b1e8cb99c36f1.tar.gz +sha256 6d66dec8f6c253a1af2ffd858167c722b1ce3218215446172c81355d0a49e7fc LICENSE diff --git a/package/rtl8821au/rtl8821au.mk b/package/rtl8821au/rtl8821au.mk new file mode 100644 index 00000000..5f4ba3eb --- /dev/null +++ b/package/rtl8821au/rtl8821au.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# rtl8821au +# +################################################################################ + +RTL8821AU_VERSION = 4235b0ec7d7220a6364586d8e25b1e8cb99c36f1 +RTL8821AU_SITE = $(call github,abperiasamy,rtl8812AU_8821AU_linux,$(RTL8821AU_VERSION)) +RTL8821AU_LICENSE = GPL-2.0 +RTL8821AU_LICENSE_FILES = LICENSE + +RTL8821AU_MODULE_MAKE_OPTS = \ + CONFIG_RTL8812AU_8821AU=m \ + KVER=$(LINUX_VERSION_PROBED) \ + USER_EXTRA_CFLAGS="-DCONFIG_$(call qstrip,$(BR2_ENDIAN))_ENDIAN \ + -Wno-error" + +$(eval $(kernel-module)) +$(eval $(generic-package)) diff --git a/package/rtmpdump/0001-include-limits.h.patch b/package/rtmpdump/0001-include-limits.h.patch new file mode 100644 index 00000000..172a9630 --- /dev/null +++ b/package/rtmpdump/0001-include-limits.h.patch @@ -0,0 +1,39 @@ +From b9d010d2c07e07eeffa510f14ff833ecb10dc0c8 Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Mon, 24 Jun 2019 21:11:33 +0200 +Subject: [PATCH] include + +Needed after +https://repo.or.cz/rtmpdump.git/commitdiff/c5f04a58fc2aeea6296ca7c44ee4734c18401aa3 + +to fix + +rtmp.c: In function 'HTTP_read': +rtmp.c:4459:26: error: 'INT_MAX' undeclared (first use in this function); did you mean 'INT8_MAX'? + +reported by buildroot autobuilders: +http://autobuild.buildroot.net/?reason=rtmpdump-c5f04a58fc2aeea6296ca7c44ee4734c18401aa3 + +Patch sent upstream by e-mail to author of +https://repo.or.cz/rtmpdump.git/patch/c5f04a58fc2aeea6296ca7c44ee4734c18401aa3 + +Signed-off-by: Bernd Kuhls +--- + librtmp/rtmp.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/librtmp/rtmp.h b/librtmp/rtmp.h +index 6d7dd89..48d4fc3 100644 +--- a/librtmp/rtmp.h ++++ b/librtmp/rtmp.h +@@ -32,6 +32,7 @@ + #include + #include + #include ++#include + + #include "amf.h" + +-- +2.20.1 + diff --git a/package/rtmpdump/Config.in b/package/rtmpdump/Config.in new file mode 100644 index 00000000..5e9c5084 --- /dev/null +++ b/package/rtmpdump/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_RTMPDUMP + bool "librtmp" + select BR2_PACKAGE_ZLIB + help + rtmpdump - RTMPDump Real-Time Messaging Protocol API + Only librtmp is installed by this package. + + http://rtmpdump.mplayerhq.hu diff --git a/package/rtmpdump/rtmpdump.hash b/package/rtmpdump/rtmpdump.hash new file mode 100644 index 00000000..54dbbc35 --- /dev/null +++ b/package/rtmpdump/rtmpdump.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 e362202d94b92632b17abc7ef909afc56de06a2cb40e308edfad901d799bbd9c rtmpdump-c5f04a58fc2aeea6296ca7c44ee4734c18401aa3-br1.tar.gz +sha256 03fe7ca91cc28e99b4003d5b3bd4ce3b084d4c475fdf9975cf0e7fdf4dc739cd librtmp/COPYING diff --git a/package/rtmpdump/rtmpdump.mk b/package/rtmpdump/rtmpdump.mk new file mode 100644 index 00000000..db79a796 --- /dev/null +++ b/package/rtmpdump/rtmpdump.mk @@ -0,0 +1,54 @@ +################################################################################ +# +# rtmpdump +# +################################################################################ + +RTMPDUMP_VERSION = c5f04a58fc2aeea6296ca7c44ee4734c18401aa3 +RTMPDUMP_SITE = git://git.ffmpeg.org/rtmpdump +RTMPDUMP_INSTALL_STAGING = YES +# Note that rtmpdump is GPL-2.0 but librtmp has its own license and since we only +# care about librtmp, it's LGPL-2.1+ +RTMPDUMP_LICENSE = LGPL-2.1+ +RTMPDUMP_LICENSE_FILES = librtmp/COPYING +RTMPDUMP_CPE_ID_VENDOR = rtmpdump_project +RTMPDUMP_DEPENDENCIES = zlib + +ifeq ($(BR2_PACKAGE_GNUTLS),y) +RTMPDUMP_DEPENDENCIES += gnutls +RTMPDUMP_CRYPTO = GNUTLS +else +# no crypto +RTMPDUMP_CRYPTO = +endif + +RTMPDUMP_CFLAGS = $(TARGET_CFLAGS) + +ifneq ($(BR2_STATIC_LIBS),y) +RTMPDUMP_CFLAGS += -fPIC +else +RTMPDUMP_SHARED = "SHARED=" +endif + +RTMPDUMP_MAKE_FLAGS = \ + CRYPTO=$(RTMPDUMP_CRYPTO) \ + prefix=/usr \ + $(RTMPDUMP_SHARED) + +define RTMPDUMP_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(RTMPDUMP_MAKE_FLAGS) \ + XCFLAGS="$(RTMPDUMP_CFLAGS)" \ + XLDFLAGS="$(TARGET_LDFLAGS)" \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + -C $(@D)/librtmp +endef + +define RTMPDUMP_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/librtmp install DESTDIR=$(STAGING_DIR) $(RTMPDUMP_MAKE_FLAGS) +endef + +define RTMPDUMP_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/librtmp install DESTDIR=$(TARGET_DIR) $(RTMPDUMP_MAKE_FLAGS) +endef + +$(eval $(generic-package)) diff --git a/package/rtorrent/Config.in b/package/rtorrent/Config.in new file mode 100644 index 00000000..6bbcaaf5 --- /dev/null +++ b/package/rtorrent/Config.in @@ -0,0 +1,23 @@ +config BR2_PACKAGE_RTORRENT + bool "rtorrent" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + # gcc < 4.9 cause an "internal compiler error" + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + depends on BR2_TOOLCHAIN_HAS_SYNC_1 && BR2_TOOLCHAIN_HAS_SYNC_4 + select BR2_PACKAGE_LIBCURL + select BR2_PACKAGE_LIBTORRENT + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_OPENSSL + help + BitTorrent Client using libtorrent + + https://github.com/rakshasa/rtorrent + +comment "rtorrent needs a toolchain w/ C++, threads, wchar, gcc >= 4.9" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_1 && BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !(BR2_INSTALL_LIBSTDCPP && BR2_USE_WCHAR && \ + BR2_TOOLCHAIN_HAS_THREADS && BR2_TOOLCHAIN_GCC_AT_LEAST_4_9) diff --git a/package/rtorrent/rtorrent.hash b/package/rtorrent/rtorrent.hash new file mode 100644 index 00000000..a20e6378 --- /dev/null +++ b/package/rtorrent/rtorrent.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 9edf0304bf142215d3bc85a0771446b6a72d0ad8218efbe184b41e4c9c7542af rtorrent-0.9.8.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/rtorrent/rtorrent.mk b/package/rtorrent/rtorrent.mk new file mode 100644 index 00000000..bc3afe80 --- /dev/null +++ b/package/rtorrent/rtorrent.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# rtorrent +# +################################################################################ + +RTORRENT_VERSION = 0.9.8 +RTORRENT_SITE = http://rtorrent.net/downloads +RTORRENT_DEPENDENCIES = host-pkgconf libcurl libtorrent ncurses +RTORRENT_LICENSE = GPL-2.0 +RTORRENT_LICENSE_FILES = COPYING + +$(eval $(autotools-package)) diff --git a/package/rtptools/Config.in b/package/rtptools/Config.in new file mode 100644 index 00000000..80bbb7a7 --- /dev/null +++ b/package/rtptools/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_RTPTOOLS + bool "rtptools" + help + The rtptools distribution consists of a number of small + applications that can be used for processing RTP data. + + http://www.cs.columbia.edu/irt/software/rtptools/ diff --git a/package/rtptools/rtptools.hash b/package/rtptools/rtptools.hash new file mode 100644 index 00000000..11c8c2ab --- /dev/null +++ b/package/rtptools/rtptools.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 2c76b2a423fb943820c91194372133a44cbdc456ebf69c51616ec50eeb068c28 rtptools-1.22.tar.gz +sha256 f864592065e232c0b444ae9682a7a1a2c6aafe96712999f794bec24d4441a6a9 LICENSE diff --git a/package/rtptools/rtptools.mk b/package/rtptools/rtptools.mk new file mode 100644 index 00000000..2148b759 --- /dev/null +++ b/package/rtptools/rtptools.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# rtptools +# +################################################################################ + +RTPTOOLS_VERSION = 1.22 +RTPTOOLS_SITE = http://www.cs.columbia.edu/irt/software/rtptools/download +RTPTOOLS_LICENSE = BSD-3-Clause +RTPTOOLS_LICENSE_FILES = LICENSE +RTPTOOLS_CONF_ENV = ac_cv_prog_FOUND_CLANG=no + +$(eval $(autotools-package)) diff --git a/package/rtty/Config.in b/package/rtty/Config.in new file mode 100644 index 00000000..198d4657 --- /dev/null +++ b/package/rtty/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_RTTY + bool "rtty" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBEV + help + Access your device's terminal from anywhere via the web. + + https://github.com/zhaojh329/rtty diff --git a/package/rtty/rtty.hash b/package/rtty/rtty.hash new file mode 100644 index 00000000..283a5d1d --- /dev/null +++ b/package/rtty/rtty.hash @@ -0,0 +1,2 @@ +sha256 4c60eacd7a653988a1907284de2ecf360c74f55ef9e21c40b9ebd87af6570908 rtty-7.3.2.tar.gz +sha256 99efed4bbc0b62f96f999ef23399e38234fb91651af734fd389a52b033a85b55 LICENSE diff --git a/package/rtty/rtty.mk b/package/rtty/rtty.mk new file mode 100644 index 00000000..dc914452 --- /dev/null +++ b/package/rtty/rtty.mk @@ -0,0 +1,38 @@ +################################################################################ +# +# rtty +# +################################################################################ + +RTTY_VERSION = 7.3.2 +RTTY_SITE = https://github.com/zhaojh329/rtty/releases/download/v$(RTTY_VERSION) +RTTY_LICENSE = MIT +RTTY_LICENSE_FILES = LICENSE +RTTY_DEPENDENCIES = libev + +ifeq ($(BR2_PACKAGE_MBEDTLS),y) +RTTY_DEPENDENCIES += mbedtls +RTTY_CONF_OPTS += \ + -DRTTY_SSL_SUPPORT=ON \ + -DRTTY_USE_MBEDTLS=ON \ + -DRTTY_USE_OPENSSL=OFF \ + -DRTTY_USE_WOLFSSL=OFF +else ifeq ($(BR2_PACKAGE_OPENSSL),y) +RTTY_DEPENDENCIES += host-pkgconf openssl +RTTY_CONF_OPTS += \ + -DRTTY_SSL_SUPPORT=ON \ + -DRTTY_USE_MBEDTLS=OFF \ + -DRTTY_USE_OPENSSL=ON \ + -DRTTY_USE_WOLFSSL=OFF +else ifeq ($(BR2_PACKAGE_WOLFSSL),y) +RTTY_DEPENDENCIES += wolfssl +RTTY_CONF_OPTS += \ + -DRTTY_SSL_SUPPORT=ON \ + -DRTTY_USE_MBEDTLS=OFF \ + -DRTTY_USE_OPENSSL=OFF \ + -DRTTY_USE_WOLFSSL=ON +else +RTTY_CONF_OPTS += -DRTTY_SSL_SUPPORT=OFF +endif + +$(eval $(cmake-package)) diff --git a/package/rubix/0001-dont-use-legacy-functions.patch b/package/rubix/0001-dont-use-legacy-functions.patch new file mode 100644 index 00000000..9c34aee6 --- /dev/null +++ b/package/rubix/0001-dont-use-legacy-functions.patch @@ -0,0 +1,18 @@ +Use strstr() instead of index(), since index() is a legacy function +and it may not be available in uClibc, depending on the configuration. + +Signed-off-by: Thomas Petazzoni + +Index: rubix-1.0.5/cube.c +=================================================================== +--- rubix-1.0.5.orig/cube.c 2010-02-14 14:19:05.000000000 +0100 ++++ rubix-1.0.5/cube.c 2010-02-14 14:19:14.000000000 +0100 +@@ -257,7 +257,7 @@ + if (i==-1) goto finish; + if (buffer[0]=='%') goto new_section; + buffer[0]=toupper(buffer[0]); +- ptr = index(buffer, '='); ++ ptr = strstr(buffer, '='); + if (ptr) { + ++ptr; + while (isspace(*ptr)) ++ptr; diff --git a/package/rubix/0002-misc-fixes.patch b/package/rubix/0002-misc-fixes.patch new file mode 100644 index 00000000..3ce6dad2 --- /dev/null +++ b/package/rubix/0002-misc-fixes.patch @@ -0,0 +1,135 @@ +diff -Nrup rubix-1.0.5/fillpoly.c rubix-1.0.5-avr32/fillpoly.c +--- rubix-1.0.5/fillpoly.c 2003-10-12 15:41:43.000000000 -0400 ++++ rubix-1.0.5-avr32/fillpoly.c 2008-02-29 12:39:51.000000000 -0500 +@@ -435,7 +435,7 @@ void fill_lines(device *d, int thecol) + ); + #endif + } +- } else if (d->depth==16) { /* here 16bpp */ ++ } else if ((d->depth==16) | (d->depth==15)) { /* here 16bpp */ + register int i; + #ifndef PC_ARCHI + register int j; +diff -Nrup rubix-1.0.5/line.c rubix-1.0.5-avr32/line.c +--- rubix-1.0.5/line.c 2003-10-12 14:15:19.000000000 -0400 ++++ rubix-1.0.5-avr32/line.c 2008-02-29 12:39:51.000000000 -0500 +@@ -1317,7 +1317,7 @@ void drawline(device *d, line *l) + #endif + if (d->depth==8) + drawline8(d, l); +- else if (d->depth==16) ++ else if ((d->depth==16) | (d->depth==15)) + drawline16(d, l); + else if (d->depth==24) + drawline24(d, l); +diff -Nrup rubix-1.0.5/Makefile rubix-1.0.5-avr32/Makefile +--- rubix-1.0.5/Makefile 2003-12-04 14:27:58.000000000 -0500 ++++ rubix-1.0.5-avr32/Makefile 2008-02-29 12:58:30.000000000 -0500 +@@ -11,21 +11,17 @@ + # Customize to fit your needs (especially if it does not work for now). + + LANGUAGE=ENGLISH +-GAMESDIR=/usr/games + + #architecture=-DPC_ARCHI + + # For Solaris + #EXTRALIBS=-lsocket + +-CC=gcc + CFLAGS=-Wall -O3 -fomit-frame-pointer -ffast-math \ + -DGAMESDIR="\"$(GAMESDIR)\"" \ + -D$(LANGUAGE) $(architecture) + + #CFLAGS=-Wall -g -ffast-math -Iplayer $(architecture) +-XINC=-I/usr/X11R6/include +-XLIB=-L/usr/X11R6/lib -lX11 + + #the following should not be changed. + +@@ -37,7 +33,7 @@ rubix : $(OBJ) + + install : + mkdir -p $(GAMESDIR) +- install -c -s rubix $(GAMESDIR) ++ install -c rubix $(GAMESDIR) + + clean : + rm -f *.o *~ core *.bak *.dat gmon.out +diff -Nrup rubix-1.0.5/screen.c rubix-1.0.5-avr32/screen.c +--- rubix-1.0.5/screen.c 2004-04-26 04:26:05.000000000 -0400 ++++ rubix-1.0.5-avr32/screen.c 2008-02-29 12:39:51.000000000 -0500 +@@ -80,11 +80,17 @@ void error_statement(SCREEN *s) + + int reset_data_buffers(SCREEN *s) + { ++ int temp; + + if (s->im) + XDestroyImage(s->im); ++ if (s->depth == 15) { ++ temp=16; ++ } else { ++ temp=s->depth; ++ } + +- s->buffer=(char *)malloc(((SCREEN_X+7)/8)*SCREEN_Y*s->depth); ++ s->buffer=(char *)malloc(((SCREEN_X+7)/8)*SCREEN_Y*temp); + + if (!s->buffer) { + error_statement(s); +@@ -106,7 +112,7 @@ int reset_data_buffers(SCREEN *s) + */ + /* Sed - december 2003 - no it has to be 8 */ + s->im=XCreateImage(s->d, DefaultVisual(s->d, DefaultScreen(s->d)), +- s->depth==32?24:s->depth, ZPixmap, ++ s->depth, ZPixmap, + 0, s->buffer, SCREEN_X, SCREEN_Y, 8, 0); + + if (!s->im) { +@@ -139,8 +145,8 @@ int init_screen(SCREEN *s) + + s->depth=DefaultDepth(s->d, DefaultScreen(s->d)); + +- if (s->depth!=8 && s->depth!=16 && s->depth!=24) { +- fprintf(stderr, "screen depth not supported (only 8, 16 and 24bpp (which means 32bpp too) handled\n"); ++ if (s->depth!=8 && s->depth!=15 && s->depth!=16 && s->depth!=24) { ++ fprintf(stderr, "screen depth not supported (only 8, 15, 16 and 24bpp (which means 32bpp too) handled\n"); + XCloseDisplay(s->d); + s->d=(Display *)0; + return -1; +@@ -182,10 +188,10 @@ int init_screen(SCREEN *s) + + /* let's create and map our window */ + s->w=XCreateWindow(s->d, DefaultRootWindow(s->d), 0, 0, +- SCREEN_X, SCREEN_Y, 3, s->depth==32?24:s->depth, ++ SCREEN_X, SCREEN_Y, 3, s->depth, + CopyFromParent, CopyFromParent, 0, NULL); + s->h=XCreateWindow(s->d, DefaultRootWindow(s->d), 0, 0, +- HELP_X, HELP_Y, 3, s->depth==32?24:s->depth, ++ HELP_X, HELP_Y, 3, s->depth, + CopyFromParent, CopyFromParent, 0, NULL); + + xch.res_name = "rubix"; +@@ -946,13 +952,18 @@ void close_screen(SCREEN *s) + void clear_screen(SCREEN *s) + { + /* fill s->im with pixel[10], avoid XPutPixel which is rather slow... */ +- int i, w, dw; ++ int i, w, dw, temp; ++ if (s->depth == 15) { ++ temp = 16; ++ } else { ++ temp = s->depth; ++ } + w = (SCREEN_X+7)/8; +- dw = s->depth/8; ++ dw = temp/8; + XPutPixel(s->im, 0, 0, pixel[10]); + for (i=1; i<8*w; i++) + memcpy(s->buffer + i*dw, s->buffer, dw); +- w = w * s->depth; ++ w = w * temp; + for (i=1; ibuffer + i*w, s->buffer, w); + } diff --git a/package/rubix/Config.in b/package/rubix/Config.in new file mode 100644 index 00000000..e814a95f --- /dev/null +++ b/package/rubix/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_RUBIX + bool "rubix" + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBX11 + help + A 3D rubiks cube game for X + + http://sed.free.fr/rubix diff --git a/package/rubix/rubix.hash b/package/rubix/rubix.hash new file mode 100644 index 00000000..3992110c --- /dev/null +++ b/package/rubix/rubix.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 ccff4c98373f76c6bab751f5f5a60df7ad8691c79b56157e4aba2dd76f501a87 rubix-1.0.6.tar.bz2 +sha256 429d04118c02bc92d834c430601f8c0c8df1ab27e3617ec73ad3f66c5953475d LICENCE diff --git a/package/rubix/rubix.mk b/package/rubix/rubix.mk new file mode 100644 index 00000000..937339f5 --- /dev/null +++ b/package/rubix/rubix.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# rubix +# +################################################################################ + +RUBIX_VERSION = 1.0.6 +RUBIX_SOURCE = rubix-$(RUBIX_VERSION).tar.bz2 +RUBIX_SITE = http://sed.free.fr/rubix +RUBIX_LICENSE = Public Domain +RUBIX_LICENSE_FILES = LICENCE +RUBIX_DEPENDENCIES = xlib_libX11 + +RUBIX_MAKE_OPTS = \ + CC="$(TARGET_CC)" \ + XINC="-I$(STAGING_DIR)/usr/include/X11" \ + XLIB="-L$(STAGING_DIR)/usr/lib -lX11" + +RUBIX_INSTALL_TARGET_OPTS = GAMESDIR=$(TARGET_DIR)/usr/games install + +define RUBIX_BUILD_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) $(RUBIX_MAKE_OPTS) rubix +endef + +define RUBIX_INSTALL_TARGET_CMDS + $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) $(RUBIX_MAKE_OPTS) \ + $(RUBIX_INSTALL_TARGET_OPTS) +endef + +$(eval $(generic-package)) diff --git a/package/ruby/0001-fix-default-coroutine-selection.patch b/package/ruby/0001-fix-default-coroutine-selection.patch new file mode 100644 index 00000000..79dbd692 --- /dev/null +++ b/package/ruby/0001-fix-default-coroutine-selection.patch @@ -0,0 +1,35 @@ +fixed default coroutine selection for musl/uclibc + +https://github.com/ruby/ruby/pull/3567/commits/b570e7de87aaad8c903176d835e8124127f627b3 + +Signed-off-by: Waldemar Brodkorb + +diff -Nur ruby-2.7.1.orig/configure.ac ruby-2.7.1/configure.ac +--- ruby-2.7.1.orig/configure.ac 2020-03-31 12:44:55.000000000 +0200 ++++ ruby-2.7.1/configure.ac 2020-10-01 00:03:53.130462286 +0200 +@@ -2344,8 +2344,12 @@ + rb_cv_coroutine=copy + ], + [*], [ +- rb_cv_coroutine=ucontext ++ AC_CHECK_FUNCS([getcontext swapcontext makecontext], ++ [rb_cv_coroutine=ucontext], ++ [rb_cv_coroutine=copy; break] ++ ) + ] ++ + ) + AC_MSG_RESULT(${rb_cv_coroutine}) + ]) +diff -Nur ruby-2.7.1.orig/coroutine/copy/Context.c ruby-2.7.1/coroutine/copy/Context.c +--- ruby-2.7.1.orig/coroutine/copy/Context.c 2020-03-31 12:44:55.000000000 +0200 ++++ ruby-2.7.1/coroutine/copy/Context.c 2020-10-01 00:04:59.414670705 +0200 +@@ -5,6 +5,8 @@ + * Copyright, 2019, by Samuel Williams. All rights reserved. + */ + ++#include ++ + #include "Context.h" + + // http://gcc.gnu.org/onlinedocs/gcc/Alternate-Keywords.html diff --git a/package/ruby/Config.in b/package/ruby/Config.in new file mode 100644 index 00000000..141db901 --- /dev/null +++ b/package/ruby/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_RUBY + bool "ruby" + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + help + Object Oriented Scripting Language. + + http://www.ruby-lang.org/ + +comment "ruby needs a toolchain w/ wchar, threads, dynamic library" + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS diff --git a/package/ruby/ruby.hash b/package/ruby/ruby.hash new file mode 100644 index 00000000..cba48418 --- /dev/null +++ b/package/ruby/ruby.hash @@ -0,0 +1,6 @@ +# https://www.ruby-lang.org/en/news/2021/07/07/ruby-2-7-4-released/ +sha256 2a80824e0ad6100826b69b9890bf55cfc4cf2b61a1e1330fccbcb30c46cef8d7 ruby-2.7.4.tar.xz +# License files, Locally calculated +sha256 b09ca195d2de08f0aacfa8793d0af62d7681c304b3ef714b75813721823295a6 LEGAL +sha256 967586d538a28955ec2541910cf63c5ac345fcdea94bfb1f1705a1f6eb36bcbb COPYING +sha256 a5e3042dacb53eebda91f3b1caefbfec8307711df8c4ed1ed20e4e97c43307a4 BSDL diff --git a/package/ruby/ruby.mk b/package/ruby/ruby.mk new file mode 100644 index 00000000..24449eac --- /dev/null +++ b/package/ruby/ruby.mk @@ -0,0 +1,88 @@ +################################################################################ +# +# ruby +# +################################################################################ + +RUBY_VERSION_MAJOR = 2.7 +RUBY_VERSION = $(RUBY_VERSION_MAJOR).4 +RUBY_VERSION_EXT = 2.7.0 +RUBY_SITE = http://cache.ruby-lang.org/pub/ruby/$(RUBY_VERSION_MAJOR) +RUBY_SOURCE = ruby-$(RUBY_VERSION).tar.xz +RUBY_DEPENDENCIES = host-pkgconf host-ruby +HOST_RUBY_DEPENDENCIES = host-pkgconf host-openssl +RUBY_MAKE_ENV = $(TARGET_MAKE_ENV) +RUBY_CONF_OPTS = --disable-install-doc --disable-rpath --disable-rubygems +HOST_RUBY_CONF_OPTS = \ + --disable-install-doc \ + --with-out-ext=curses,readline \ + --without-gmp +RUBY_LICENSE = Ruby or BSD-2-Clause, BSD-3-Clause, others +RUBY_LICENSE_FILES = LEGAL COPYING BSDL +RUBY_CPE_ID_VENDOR = ruby-lang +# 0001-fix-default-coroutine-selection.patch +RUBY_AUTORECONF = YES + +ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y) +# On uClibc, finite, isinf and isnan are not directly implemented as +# functions. Instead math.h #define's these to __finite, __isinf and +# __isnan, confusing the Ruby configure script. Tell it that they +# really are available. +RUBY_CONF_ENV += \ + ac_cv_func_finite=yes \ + ac_cv_func_isinf=yes \ + ac_cv_func_isnan=yes +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_SSP),) +RUBY_CONF_ENV += stack_protector=no +endif + +# Force optionals to build before we do +ifeq ($(BR2_PACKAGE_BERKELEYDB),y) +RUBY_DEPENDENCIES += berkeleydb +endif +ifeq ($(BR2_PACKAGE_LIBFFI),y) +RUBY_DEPENDENCIES += libffi +else +# Disable fiddle to avoid a build failure with bundled-libffi on MIPS +RUBY_CONF_OPTS += --with-out-ext=fiddle +endif +ifeq ($(BR2_PACKAGE_GDBM),y) +RUBY_DEPENDENCIES += gdbm +endif +ifeq ($(BR2_PACKAGE_LIBYAML),y) +RUBY_DEPENDENCIES += libyaml +endif +ifeq ($(BR2_PACKAGE_NCURSES),y) +RUBY_DEPENDENCIES += ncurses +endif +ifeq ($(BR2_PACKAGE_OPENSSL),y) +RUBY_DEPENDENCIES += openssl +endif +ifeq ($(BR2_PACKAGE_READLINE),y) +RUBY_DEPENDENCIES += readline +endif +ifeq ($(BR2_PACKAGE_ZLIB),y) +RUBY_DEPENDENCIES += zlib +endif +ifeq ($(BR2_PACKAGE_GMP),y) +RUBY_DEPENDENCIES += gmp +RUBY_CONF_OPTS += --with-gmp +else +RUBY_CONF_OPTS += --without-gmp +endif + +# Remove rubygems and friends, as they need extensions that aren't +# built and a target compiler. +RUBY_EXTENSIONS_REMOVE = rake* rdoc* rubygems* +define RUBY_REMOVE_RUBYGEMS + rm -f $(addprefix $(TARGET_DIR)/usr/bin/, gem rdoc ri rake) + rm -rf $(TARGET_DIR)/usr/lib/ruby/gems + rm -rf $(addprefix $(TARGET_DIR)/usr/lib/ruby/$(RUBY_VERSION_EXT)/, \ + $(RUBY_EXTENSIONS_REMOVE)) +endef +RUBY_POST_INSTALL_TARGET_HOOKS += RUBY_REMOVE_RUBYGEMS + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/runc/Config.in b/package/runc/Config.in new file mode 100644 index 00000000..f181ee33 --- /dev/null +++ b/package/runc/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_RUNC + bool "runc" + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_TOOLCHAIN_USES_UCLIBC # no fexecve + help + runC is a CLI tool for spawning and running containers + according to the OCP specification. + + https://github.com/opencontainers/runc + +comment "runc needs a glibc or musl toolchain w/ threads" + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS && \ + BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_TOOLCHAN_USES_UCLIBC diff --git a/package/runc/runc.hash b/package/runc/runc.hash new file mode 100644 index 00000000..598bd306 --- /dev/null +++ b/package/runc/runc.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 02dac7f1a0dcfe55dd9820df787adedf030060870354915e7bba86f8487ce93c runc-1.0.0-rc95.tar.gz +sha256 552a739c3b25792263f731542238b92f6f8d07e9a488eae27e6c4690038a8243 LICENSE diff --git a/package/runc/runc.mk b/package/runc/runc.mk new file mode 100644 index 00000000..62b9f09b --- /dev/null +++ b/package/runc/runc.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# runc +# +################################################################################ + +RUNC_VERSION_MAJOR = 1.0.0 +RUNC_VERSION_MINOR = rc95 +RUNC_VERSION = $(RUNC_VERSION_MAJOR)-$(RUNC_VERSION_MINOR) +RUNC_SITE = $(call github,opencontainers,runc,v$(RUNC_VERSION)) +RUNC_LICENSE = Apache-2.0 +RUNC_LICENSE_FILES = LICENSE +RUNC_CPE_ID_VENDOR = linuxfoundation +RUNC_CPE_ID_VERSION = $(RUNC_VERSION_MAJOR) +RUNC_CPE_ID_UPDATE = $(RUNC_VERSION_MINOR) + +RUNC_LDFLAGS = -X main.version=$(RUNC_VERSION) +RUNC_TAGS = cgo static_build + +ifeq ($(BR2_PACKAGE_LIBAPPARMOR),y) +RUNC_DEPENDENCIES += libapparmor +RUNC_TAGS += apparmor +endif + +ifeq ($(BR2_PACKAGE_LIBSECCOMP),y) +RUNC_TAGS += seccomp +RUNC_DEPENDENCIES += libseccomp host-pkgconf +endif + +$(eval $(golang-package)) diff --git a/package/rust-bin/rust-bin.hash b/package/rust-bin/rust-bin.hash new file mode 100644 index 00000000..0800dcca --- /dev/null +++ b/package/rust-bin/rust-bin.hash @@ -0,0 +1,51 @@ +# From https://static.rust-lang.org/dist/rust-1.52.0-i686-unknown-linux-gnu.tar.xz.sha256 +# Verified using https://static.rust-lang.org/dist/rust-1.52.0-i686-unknown-linux-gnu.tar.xz.asc +sha256 b0f504d3dcd744988a1a69716bbf6e2dac872c55e546748ceab8ff1d4fd2da5c rust-1.52.0-i686-unknown-linux-gnu.tar.xz +# From https://static.rust-lang.org/dist/rust-1.52.0-x86_64-unknown-linux-gnu.tar.xz.sha256 +# Verified using https://static.rust-lang.org/dist/rust-1.52.0-x86_64-unknown-linux-gnu.tar.xz.asc +sha256 d440cb932bbaaf43b600bd47b2dd4a05bc669a74d88addeeb943d694638d8e6e rust-1.52.0-x86_64-unknown-linux-gnu.tar.xz +# From https://static.rust-lang.org/dist/rust-std-1.52.0-aarch64-unknown-linux-gnu.tar.xz.sha256 +# Verified using https://static.rust-lang.org/dist/rust-std-1.52.0-aarch64-unknown-linux-gnu.tar.xz.asc +sha256 3720d98988302bc1f676cef2ea3b2a641404cbbe2d47d0f28f8954658586aa12 rust-std-1.52.0-aarch64-unknown-linux-gnu.tar.xz +# From https://static.rust-lang.org/dist/rust-std-1.52.0-arm-unknown-linux-gnueabi.tar.xz.sha256 +# Verified using https://static.rust-lang.org/dist/rust-std-1.52.0-arm-unknown-linux-gnueabi.tar.xz.asc +sha256 593ec073c273028f60cf49d6084ee1809e075682f3e65f9cc86067f84f71d5f7 rust-std-1.52.0-arm-unknown-linux-gnueabi.tar.xz +# From https://static.rust-lang.org/dist/rust-std-1.52.0-arm-unknown-linux-gnueabihf.tar.xz.sha256 +# Verified using https://static.rust-lang.org/dist/rust-std-1.52.0-arm-unknown-linux-gnueabihf.tar.xz.asc +sha256 c251bf48962ff8f96e3572cecee12b1b3286477e66cb9c42c1fbe0118d6bdaf5 rust-std-1.52.0-arm-unknown-linux-gnueabihf.tar.xz +# From https://static.rust-lang.org/dist/rust-std-1.52.0-armv7-unknown-linux-gnueabihf.tar.xz.sha256 +# Verified using https://static.rust-lang.org/dist/rust-std-1.52.0-armv7-unknown-linux-gnueabihf.tar.xz.asc +sha256 c28c6870b9717c6c2e2015a6a5581ccb130f9d393db8166da4513680fe03d4ea rust-std-1.52.0-armv7-unknown-linux-gnueabihf.tar.xz +# From https://static.rust-lang.org/dist/rust-std-1.52.0-i586-unknown-linux-gnu.tar.xz.sha256 +# Verified using https://static.rust-lang.org/dist/rust-std-1.52.0-i586-unknown-linux-gnu.tar.xz.asc +sha256 f4d094e1cd73372f1565473b072e22278afeb2b728a178e6e9f1c813a9b76c23 rust-std-1.52.0-i586-unknown-linux-gnu.tar.xz +# From https://static.rust-lang.org/dist/rust-std-1.52.0-i686-unknown-linux-gnu.tar.xz.sha256 +# Verified using https://static.rust-lang.org/dist/rust-std-1.52.0-i686-unknown-linux-gnu.tar.xz.asc +sha256 54749b579a8426dd46afe67feb3c206b0b129e59873a443dcd93ed51232a37d6 rust-std-1.52.0-i686-unknown-linux-gnu.tar.xz +# From https://static.rust-lang.org/dist/rust-std-1.52.0-mips-unknown-linux-gnu.tar.xz.sha256 +# Verified using https://static.rust-lang.org/dist/rust-std-1.52.0-mips-unknown-linux-gnu.tar.xz.asc +sha256 51492598343e5490c620fd04a16c3f41e2fe9f52232dc67fc1bc937233a2e85d rust-std-1.52.0-mips-unknown-linux-gnu.tar.xz +# From https://static.rust-lang.org/dist/rust-std-1.52.0-mips64-unknown-linux-gnuabi64.tar.xz.sha256 +# Verified using https://static.rust-lang.org/dist/rust-std-1.52.0-mips64-unknown-linux-gnuabi64.tar.xz.asc +sha256 8db8fac92466389629055d590ca06b7ef1c82621f05cba709413f2ce2c3c5407 rust-std-1.52.0-mips64-unknown-linux-gnuabi64.tar.xz +# From https://static.rust-lang.org/dist/rust-std-1.52.0-mips64el-unknown-linux-gnuabi64.tar.xz.sha256 +# Verified using https://static.rust-lang.org/dist/rust-std-1.52.0-mips64el-unknown-linux-gnuabi64.tar.xz.asc +sha256 824391b79c9b28be7a18feab1adb0eed1a9459667e93572fc8b343985ca965ba rust-std-1.52.0-mips64el-unknown-linux-gnuabi64.tar.xz +# From https://static.rust-lang.org/dist/rust-std-1.52.0-mipsel-unknown-linux-gnu.tar.xz.sha256 +# Verified using https://static.rust-lang.org/dist/rust-std-1.52.0-mipsel-unknown-linux-gnu.tar.xz.asc +sha256 a6de773dfcdc8cac832ac6c356e2c0ecfd94fd7f7242aac82f8922f5bd1639e9 rust-std-1.52.0-mipsel-unknown-linux-gnu.tar.xz +# From https://static.rust-lang.org/dist/rust-std-1.52.0-powerpc-unknown-linux-gnu.tar.xz.sha256 +# Verified using https://static.rust-lang.org/dist/rust-std-1.52.0-powerpc-unknown-linux-gnu.tar.xz.asc +sha256 2ad7e17bcb8f632eb4206294ab977bbe1b7562009a3ca84a8d753ff454b1ee07 rust-std-1.52.0-powerpc-unknown-linux-gnu.tar.xz +# From https://static.rust-lang.org/dist/rust-std-1.52.0-powerpc64-unknown-linux-gnu.tar.xz.sha256 +# Verified using https://static.rust-lang.org/dist/rust-std-1.52.0-powerpc64-unknown-linux-gnu.tar.xz.asc +sha256 a792384afe034322b4b430049f57ed5e5fe9efbcf74c13c3edaf04062392727a rust-std-1.52.0-powerpc64-unknown-linux-gnu.tar.xz +# From https://static.rust-lang.org/dist/rust-std-1.52.0-powerpc64le-unknown-linux-gnu.tar.xz.sha256 +# Verified using https://static.rust-lang.org/dist/rust-std-1.52.0-powerpc64le-unknown-linux-gnu.tar.xz.asc +sha256 af5256a5f1cb189415b0d6b3e349312bbe8a78331a817c8da79ccfe9a07c0aed rust-std-1.52.0-powerpc64le-unknown-linux-gnu.tar.xz +# From https://static.rust-lang.org/dist/rust-std-1.52.0-x86_64-unknown-linux-gnu.tar.xz.sha256 +# Verified using https://static.rust-lang.org/dist/rust-std-1.52.0-x86_64-unknown-linux-gnu.tar.xz.asc +sha256 dcdc0083facd6484527494ee5b8f72e040a095ab346bb658ce176be573d5c9b4 rust-std-1.52.0-x86_64-unknown-linux-gnu.tar.xz +# Locally generated +sha256 62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a LICENSE-APACHE +sha256 23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3 LICENSE-MIT diff --git a/package/rust-bin/rust-bin.mk b/package/rust-bin/rust-bin.mk new file mode 100644 index 00000000..71cd8361 --- /dev/null +++ b/package/rust-bin/rust-bin.mk @@ -0,0 +1,62 @@ +################################################################################ +# +# rust-bin +# +################################################################################ + +RUST_BIN_VERSION = 1.52.0 +RUST_BIN_SITE = https://static.rust-lang.org/dist +RUST_BIN_LICENSE = Apache-2.0 or MIT +RUST_BIN_LICENSE_FILES = LICENSE-APACHE LICENSE-MIT + +HOST_RUST_BIN_PROVIDES = host-rustc + +HOST_RUST_BIN_SOURCE = rust-$(RUST_BIN_VERSION)-$(RUSTC_HOST_NAME).tar.xz + +ifeq ($(BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS),y) +HOST_RUST_BIN_EXTRA_DOWNLOADS += rust-std-$(RUST_BIN_VERSION)-$(RUSTC_TARGET_NAME).tar.xz +endif + +HOST_RUST_BIN_LIBSTD_HOST_PREFIX = rust-std-$(RUSTC_HOST_NAME) + +define HOST_RUST_BIN_LIBSTD_EXTRACT + mkdir -p $(@D)/std + $(foreach f,$(HOST_RUST_BIN_EXTRA_DOWNLOADS), \ + $(call suitable-extractor,$(f)) $(HOST_RUST_BIN_DL_DIR)/$(f) | \ + $(TAR) -C $(@D)/std $(TAR_OPTIONS) - + ) + mkdir -p $(@D)/rustc/lib/rustlib/$(RUSTC_HOST_NAME)/lib + cd $(@D)/rustc/lib/rustlib/$(RUSTC_HOST_NAME)/lib; \ + ln -sf ../../../../../$(HOST_RUST_BIN_LIBSTD_HOST_PREFIX)/lib/rustlib/$(RUSTC_HOST_NAME)/lib/* . +endef + +HOST_RUST_BIN_POST_EXTRACT_HOOKS += HOST_RUST_BIN_LIBSTD_EXTRACT + +HOST_RUST_BIN_INSTALL_COMMON_OPTS = \ + --prefix=$(HOST_DIR) \ + --disable-ldconfig + +HOST_RUST_BIN_INSTALL_OPTS = \ + $(HOST_RUST_BIN_INSTALL_COMMON_OPTS) \ + --components=rustc,cargo,rust-std-$(RUSTC_HOST_NAME) + +define HOST_RUST_BIN_INSTALL_RUSTC + (cd $(@D); \ + ./install.sh $(HOST_RUST_BIN_INSTALL_OPTS)) +endef + +ifeq ($(BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS),y) +define HOST_RUST_BIN_INSTALL_LIBSTD_TARGET + (cd $(@D)/std/rust-std-$(RUST_BIN_VERSION)-$(RUSTC_TARGET_NAME); \ + ./install.sh $(HOST_RUST_BIN_INSTALL_COMMON_OPTS)) +endef +endif + +define HOST_RUST_BIN_INSTALL_CMDS + $(HOST_RUST_BIN_INSTALL_RUSTC) + $(HOST_RUST_BIN_INSTALL_LIBSTD_TARGET) +endef + +HOST_RUST_BIN_POST_INSTALL_HOOKS += HOST_RUST_INSTALL_CARGO_CONFIG + +$(eval $(host-generic-package)) diff --git a/package/rust/rust.hash b/package/rust/rust.hash new file mode 100644 index 00000000..faf2db5c --- /dev/null +++ b/package/rust/rust.hash @@ -0,0 +1,6 @@ +# From https://static.rust-lang.org/dist/rustc-1.52.0-src.tar.xz.sha256 +# Verified using https://static.rust-lang.org/dist/rustc-1.52.0-src.tar.xz.asc +sha256 2393e923087f3f8f98190eb0743f1b4a8956a35274ae5d3c0fae6e43238c6af8 rustc-1.52.0-src.tar.xz +# Locally generated +sha256 62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a LICENSE-APACHE +sha256 23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3 LICENSE-MIT diff --git a/package/rust/rust.mk b/package/rust/rust.mk new file mode 100644 index 00000000..66a0c0c8 --- /dev/null +++ b/package/rust/rust.mk @@ -0,0 +1,82 @@ +################################################################################ +# +# rust +# +################################################################################ + +RUST_VERSION = 1.52.0 +RUST_SOURCE = rustc-$(RUST_VERSION)-src.tar.xz +RUST_SITE = https://static.rust-lang.org/dist +RUST_LICENSE = Apache-2.0 or MIT +RUST_LICENSE_FILES = LICENSE-APACHE LICENSE-MIT + +HOST_RUST_PROVIDES = host-rustc + +HOST_RUST_DEPENDENCIES = \ + toolchain \ + host-rust-bin \ + host-openssl \ + $(BR2_CMAKE_HOST_DEPENDENCY) + +ifeq ($(BR2_PACKAGE_PYTHON3),y) +HOST_RUST_PYTHON_VERSION = $(PYTHON3_VERSION_MAJOR) +HOST_RUST_DEPENDENCIES += host-python3 +else +HOST_RUST_PYTHON_VERSION = $(PYTHON_VERSION_MAJOR) +HOST_RUST_DEPENDENCIES += host-python +endif + +HOST_RUST_VERBOSITY = $(if $(VERBOSE),2,0) + +# Some vendor crates contain Cargo.toml.orig files. The associated +# .cargo-checksum.json file will contain a checksum for Cargo.toml.orig but +# support/scripts/apply-patches.sh will delete them. This will cause the build +# to fail, as Cargo will not be able to find the file and verify the checksum. +# So, remove all Cargo.toml.orig entries from the affected .cargo-checksum.json +# files +define HOST_RUST_EXCLUDE_ORIG_FILES + for file in $$(find $(@D) -name '*.orig'); do \ + crate=$$(dirname $${file}); \ + fn=$${crate}/.cargo-checksum.json; \ + sed -i -e 's/"Cargo.toml.orig":"[a-z0-9]\+",//g' $${fn}; \ + done +endef + +HOST_RUST_POST_EXTRACT_HOOKS += HOST_RUST_EXCLUDE_ORIG_FILES + +define HOST_RUST_CONFIGURE_CMDS + ( \ + echo '[build]'; \ + echo 'target = ["$(RUSTC_TARGET_NAME)"]'; \ + echo 'cargo = "$(HOST_RUST_BIN_DIR)/cargo/bin/cargo"'; \ + echo 'rustc = "$(HOST_RUST_BIN_DIR)/rustc/bin/rustc"'; \ + echo 'python = "$(HOST_DIR)/bin/python$(HOST_RUST_PYTHON_VERSION)"'; \ + echo 'submodules = false'; \ + echo 'vendor = true'; \ + echo 'extended = true'; \ + echo 'tools = ["cargo"]'; \ + echo 'compiler-docs = false'; \ + echo 'docs = false'; \ + echo 'verbose = $(HOST_RUST_VERBOSITY)'; \ + echo '[install]'; \ + echo 'prefix = "$(HOST_DIR)"'; \ + echo 'sysconfdir = "$(HOST_DIR)/etc"'; \ + echo '[rust]'; \ + echo 'channel = "stable"'; \ + echo '[target.$(RUSTC_TARGET_NAME)]'; \ + echo 'cc = "$(TARGET_CROSS)gcc"'; \ + echo '[llvm]'; \ + echo 'ninja = false'; \ + ) > $(@D)/config.toml +endef + +define HOST_RUST_BUILD_CMDS + cd $(@D); $(HOST_MAKE_ENV) $(HOST_DIR)/bin/python$(HOST_RUST_PYTHON_VERSION) x.py build +endef + +define HOST_RUST_INSTALL_CMDS + cd $(@D); $(HOST_MAKE_ENV) $(HOST_DIR)/bin/python$(HOST_RUST_PYTHON_VERSION) x.py dist + cd $(@D); $(HOST_MAKE_ENV) $(HOST_DIR)/bin/python$(HOST_RUST_PYTHON_VERSION) x.py install +endef + +$(eval $(host-generic-package)) diff --git a/package/rustc/Config.in.host b/package/rustc/Config.in.host new file mode 100644 index 00000000..1df25ae3 --- /dev/null +++ b/package/rustc/Config.in.host @@ -0,0 +1,81 @@ +# All host rust packages should depend on this option +config BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS + bool + default y if BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86" + +# All target rust packages should depend on this option +config BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS + bool + # The pre-built Rust standard library is only available for the + # following architectures/ABIs, and is built against glibc. + default y if BR2_i386 + default y if BR2_x86_64 + default y if BR2_aarch64 + default y if BR2_arm && !BR2_ARM_CPU_ARMV4 && !BR2_ARM_CPU_ARMV5 \ + && !(BR2_ARM_CPU_ARMV7A && BR2_ARM_EABI) + default y if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le + default y if (BR2_mips || BR2_mipsel) && !BR2_MIPS_CPU_MIPS32R6 + default y if (BR2_mips64 || BR2_mips64el) && !BR2_MIPS_CPU_MIPS64R6 \ + && BR2_MIPS_NABI64 + depends on BR2_TOOLCHAIN_USES_GLIBC + depends on BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS + +config BR2_PACKAGE_HOST_RUSTC_ARCH + string + default "armv7" if BR2_ARM_CPU_ARMV7A + default BR2_ARCH if !BR2_ARM_CPU_ARMV7A + +config BR2_PACKAGE_HOST_RUSTC_ABI + string + default "eabi" if BR2_ARM_EABI + default "eabihf" if BR2_ARM_EABIHF + default "abi64" if BR2_MIPS_NABI64 + +config BR2_PACKAGE_HOST_RUSTC + bool "host rustc" + depends on BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS + help + Compiler for the Rust language + + http://www.rust-lang.org + +if BR2_PACKAGE_HOST_RUSTC + +choice + prompt "Rust compiler variant" + default BR2_PACKAGE_HOST_RUST_BIN + help + Select a Rust compiler + +config BR2_PACKAGE_HOST_RUST + bool "host rust" + # RUSTC_TARGET_NAME must be set for building host-rust + # otherwise config.toml is broken. + depends on BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS + # triggers ICE on trunc_int_for_mode, at explow.c:56 + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5 || !BR2_aarch64 + help + This package will build the compiler for the host as well as + two flavors of the standard library: one for the host, another + for the target. Both are installed in the host directory. + +comment "host-rust needs a toolchain w/ gcc >= 5" + depends on BR2_aarch64 + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_5 + +config BR2_PACKAGE_HOST_RUST_BIN + bool "host rust (pre-built)" + help + This package will install pre-built versions of the compiler + for the host and the Rust standard library for the target. + +endchoice + +endif + +config BR2_PACKAGE_PROVIDES_HOST_RUSTC + string + default "host-rust" if BR2_PACKAGE_HOST_RUST + # Default to host-rust-bin as long as host arch supports it + default "host-rust-bin" if !BR2_PACKAGE_HOST_RUST + depends on BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS diff --git a/package/rustc/cargo-config.in b/package/rustc/cargo-config.in new file mode 100644 index 00000000..47fad026 --- /dev/null +++ b/package/rustc/cargo-config.in @@ -0,0 +1,2 @@ +[target.@RUSTC_TARGET_NAME@] +linker = "@CROSS_PREFIX@gcc" diff --git a/package/rustc/rustc.mk b/package/rustc/rustc.mk new file mode 100644 index 00000000..35ffc361 --- /dev/null +++ b/package/rustc/rustc.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# rustc +# +################################################################################ + +RUSTC_ARCH = $(call qstrip,$(BR2_PACKAGE_HOST_RUSTC_ARCH)) +RUSTC_ABI = $(call qstrip,$(BR2_PACKAGE_HOST_RUSTC_ABI)) + +ifeq ($(BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS),y) +RUSTC_TARGET_NAME = $(RUSTC_ARCH)-unknown-linux-gnu$(RUSTC_ABI) +endif + +ifeq ($(HOSTARCH),x86) +RUSTC_HOST_ARCH = i686 +else +RUSTC_HOST_ARCH = $(HOSTARCH) +endif + +RUSTC_HOST_NAME = $(RUSTC_HOST_ARCH)-unknown-linux-gnu + +$(eval $(host-virtual-package)) + +ifeq ($(BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS),y) +define RUSTC_INSTALL_CARGO_CONFIG + mkdir -p $(HOST_DIR)/share/cargo + sed -e 's/@RUSTC_TARGET_NAME@/$(RUSTC_TARGET_NAME)/' \ + -e 's/@CROSS_PREFIX@/$(notdir $(TARGET_CROSS))/' \ + package/rustc/cargo-config.in \ + > $(HOST_DIR)/share/cargo/config +endef +# check-package disable TypoInPackageVariable - TOOLCHAIN intended +TOOLCHAIN_POST_INSTALL_STAGING_HOOKS += RUSTC_INSTALL_CARGO_CONFIG +endif diff --git a/package/rygel/Config.in b/package/rygel/Config.in new file mode 100644 index 00000000..86d6a38e --- /dev/null +++ b/package/rygel/Config.in @@ -0,0 +1,51 @@ +config BR2_PACKAGE_RYGEL + bool "rygel" + depends on BR2_USE_WCHAR # gupnp-av + depends on BR2_TOOLCHAIN_HAS_THREADS # gupnp-av + depends on BR2_USE_MMU # gupnp-av + select BR2_PACKAGE_GUPNP_AV + select BR2_PACKAGE_LIBGEE + select BR2_PACKAGE_LIBMEDIAART + select BR2_PACKAGE_SQLITE + help + Rygel is a home media solution (UPnP AV MediaServer) that + allows you to easily share audio, video and pictures to other + devices. + + Additionally, media player software may use Rygel to become a + MediaRenderer that may be controlled remotely by a UPnP or + DLNA Controller. + + Rygel achieves interoperability with other devices in the + market by trying to conform to the very strict requirements of + DLNA and by converting media on-the-fly to formats that client + devices can handle. + + Most Rygel functionality is implemented through a plug-in + mechanism. + + https://wiki.gnome.org/Projects/Rygel + +if BR2_PACKAGE_RYGEL + +choice + prompt "media engine" + default BR2_PACKAGE_RYGEL_MEDIA_ENGINE_SIMPLE + +config BR2_PACKAGE_RYGEL_MEDIA_ENGINE_SIMPLE + bool "simple" + +config BR2_PACKAGE_RYGEL_MEDIA_ENGINE_GSTREAMER1 + bool "gstreamer1" + select BR2_PACKAGE_GDK_PIXBUF + select BR2_PACKAGE_GUPNP_DLNA + select BR2_PACKAGE_GSTREAMER1 + select BR2_PACKAGE_GST1_PLUGINS_BASE + +endchoice + +comment "rygel needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS + +endif # BR2_PACKAGE_RYGEL diff --git a/package/rygel/S99rygel b/package/rygel/S99rygel new file mode 100644 index 00000000..ee832e9b --- /dev/null +++ b/package/rygel/S99rygel @@ -0,0 +1,37 @@ +#!/bin/sh + +NAME=rygel +PIDFILE=/var/run/$NAME.pid +DAEMON=/usr/bin/$NAME + +start() { + printf "Starting $NAME: " + start-stop-daemon -S -q -m -b -p $PIDFILE --exec $DAEMON + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +stop() { + printf "Stopping $NAME: " + start-stop-daemon -K -q -p $PIDFILE + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac + +exit $? diff --git a/package/rygel/rygel.hash b/package/rygel/rygel.hash new file mode 100644 index 00000000..33b44aec --- /dev/null +++ b/package/rygel/rygel.hash @@ -0,0 +1,6 @@ +# Hash from: http://ftp.gnome.org/pub/gnome/sources/rygel/0.38/rygel-0.38.3.sha256sum: +sha256 08c21a577f7bdad26446a75ffa32778b26842c3b1188165f0b19818559747d00 rygel-0.38.3.tar.xz + +# Locally calculated +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING +sha256 c7d881be8ae01162510e982a32001446c6d6d18a9cecc89cc41a28bd215a0262 COPYING.logo diff --git a/package/rygel/rygel.mk b/package/rygel/rygel.mk new file mode 100644 index 00000000..21c8ebee --- /dev/null +++ b/package/rygel/rygel.mk @@ -0,0 +1,78 @@ +################################################################################ +# +# rygel +# +################################################################################ + +RYGEL_VERSION_MAJOR = 0.38 +RYGEL_VERSION = $(RYGEL_VERSION_MAJOR).3 +RYGEL_SOURCE = rygel-$(RYGEL_VERSION).tar.xz +RYGEL_SITE = http://ftp.gnome.org/pub/gnome/sources/rygel/$(RYGEL_VERSION_MAJOR) +RYGEL_LICENSE = LGPL-2.1+, CC-BY-SA-3.0 (logo) +RYGEL_LICENSE_FILES = COPYING COPYING.logo +RYGEL_DEPENDENCIES = \ + gupnp-av \ + libgee \ + libmediaart \ + sqlite \ + $(TARGET_NLS_DEPENDENCIES) +RYGEL_INSTALL_STAGING = YES + +RYGEL_CONF_ENV = LIBS=$(TARGET_NLS_LIBS) +RYGEL_CONF_OPTS += \ + --disable-apidocs \ + --disable-coverage \ + --disable-example-plugins \ + --enable-external-plugin \ + --enable-lms-plugin \ + --enable-mpris-plugin \ + --enable-ruih-plugin \ + --disable-tracker-plugin + +ifeq ($(BR2_PACKAGE_GDK_PIXBUF),y) +RYGEL_DEPENDENCIES += gdk-pixbuf +endif + +ifeq ($(BR2_PACKAGE_GOBJECT_INTROSPECTION),y) +RYGEL_CONF_OPTS += --enable-introspection +RYGEL_DEPENDENCIES += gobject-introspection +else +RYGEL_CONF_OPTS += --disable-introspection +endif + +ifeq ($(BR2_PACKAGE_RYGEL_MEDIA_ENGINE_GSTREAMER1),y) +RYGEL_CONF_OPTS += \ + --with-media-engine=gstreamer \ + --enable-playbin-plugin \ + --enable-media_export-plugin \ + --enable-gst-launch-plugin +RYGEL_DEPENDENCIES += \ + gupnp-dlna \ + gst1-plugins-base \ + gstreamer1 +else ifeq ($(BR2_PACKAGE_RYGEL_MEDIA_ENGINE_SIMPLE),y) +RYGEL_CONF_OPTS += \ + --with-media-engine=simple \ + --disable-playbin-plugin \ + --disable-media_export-plugin \ + --disable-gst-launch-plugin +endif + +ifeq ($(BR2_PACKAGE_LIBGTK3_X11),y) +RYGEL_CONF_OPTS += --with-ui +RYGEL_DEPENDENCIES += libgtk3 +else +RYGEL_CONF_OPTS += --without-ui +endif + +define RYGEL_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/rygel/S99rygel \ + $(TARGET_DIR)/etc/init.d/S99rygel +endef + +define RYGEL_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 package/rygel/rygel.service \ + $(TARGET_DIR)/usr/lib/systemd/system/rygel.service +endef + +$(eval $(autotools-package)) diff --git a/package/rygel/rygel.service b/package/rygel/rygel.service new file mode 100644 index 00000000..6ae8ee72 --- /dev/null +++ b/package/rygel/rygel.service @@ -0,0 +1,10 @@ +[Unit] +Description=Rygel DLNA server +After=network.target + +[Service] +ExecStart=/usr/bin/rygel +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/package/s390-tools/0001-zkey-ekmfweb-fix-linking-of-libekmfweb.patch b/package/s390-tools/0001-zkey-ekmfweb-fix-linking-of-libekmfweb.patch new file mode 100644 index 00000000..76a642af --- /dev/null +++ b/package/s390-tools/0001-zkey-ekmfweb-fix-linking-of-libekmfweb.patch @@ -0,0 +1,53 @@ +From a4e6f7239d8cee37e58eac974482d6deefa8a137 Mon Sep 17 00:00:00 2001 +From: Alexander Egorenkov +Date: Thu, 5 Nov 2020 17:42:58 +0100 +Subject: [PATCH 1/1] zkey/ekmfweb: fix linking of libekmfweb + +Use -L compiler's parameter instead of the environment variable +LIBRARY_PATH. + +Fixes the following problem on buildroot: + +buildroot/qemu-s390x/host/bin/s390x-linux-gcc -shared -Wl,--version-script=zkey-ekmfweb.map -Wl,-z,defs,-Bsymbolic -Wl,-soname,zkey-ekmfweb.so.1 zkey-ekmfweb.o properties.o pkey.o cca.o ep11.o utils.o ../..//libutil/libutil.a -lekmfweb -ldl -lcrypto -o zkey-ekmfweb.so +buildroot/qemu-s390x/host/bin/s390x-linux-gcc -I ../../include -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -I ../include -std=gnu99 -Wno-unused-parameter -Wno-missing-field-initializers -DS390_TOOLS_RELEASE=2.15.1-build-20201105 -DS390_TOOLS_LIBDIR=/lib/s390-tools -DS390_TOOLS_DATADIR=/usr/share/s390-tools -DS390_TOOLS_SYSCONFDIR=/etc -DS390_TOOLS_BINDIR=/sbin -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_GNU_SOURCE -c udev_ccwgroup.c -o udev_ccwgroup.o +buildroot/qemu-s390x/host/bin/s390x-linux-gcc -I ../../include -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -I ../include -std=gnu99 -Wno-unused-parameter -Wno-missing-field-initializers -DS390_TOOLS_RELEASE=2.15.1-build-20201105 -DS390_TOOLS_LIBDIR=/lib/s390-tools -DS390_TOOLS_DATADIR=/usr/share/s390-tools -DS390_TOOLS_SYSCONFDIR=/etc -DS390_TOOLS_BINDIR=/sbin -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_GNU_SOURCE -c iscsi.c -o iscsi.o +buildroot/qemu-s390x/host/bin/s390x-linux-gcc -I ../../include -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -I ../include -std=gnu99 -Wno-unused-parameter -Wno-missing-field-initializers -DS390_TOOLS_RELEASE=2.15.1-build-20201105 -DS390_TOOLS_LIBDIR=/lib/s390-tools -DS390_TOOLS_DATADIR=/usr/share/s390-tools -DS390_TOOLS_SYSCONFDIR=/etc -DS390_TOOLS_BINDIR=/sbin -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_GNU_SOURCE -c dasd.c -o dasd.o +buildroot/qemu-s390x/host/opt/ext-toolchain/bin/../lib/gcc/s390x-buildroot-linux-gnu/9.3.0/../../../../s390x-buildroot-linux-gnu/bin/ld: cannot find -lekmfweb +collect2: error: ld returned 1 exit status +make[4]: *** [Makefile:36: zkey-ekmfweb.so] Error 1 +make[3]: *** [Makefile:128: ekmfweb] Error 2 +buildroot/qemu-s390x/host/bin/s390x-linux-gcc -I ../../include -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -I ../include -std=gnu99 -Wno-unused-parameter -Wno-missing-field-initializers -DS390_TOOLS_RELEASE=2.15.1-build-20201105 -DS390_TOOLS_LIBDIR=/lib/s390-tools -DS390_TOOLS_DATADIR=/usr/share/s390-tools -DS390_TOOLS_SYSCONFDIR=/etc -DS390_TOOLS_BINDIR=/sbin -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_GNU_SOURCE -c zfcp.c -o zfcp.o +make[2]: *** [Makefile:43: zkey] Error 2 +make[2]: *** Waiting for unfinished jobs.... + +Signed-off-by: Alexander Egorenkov +Acked-by: Ingo Franzki +--- + zkey/ekmfweb/Makefile | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/zkey/ekmfweb/Makefile b/zkey/ekmfweb/Makefile +index 79a16cb5..1a3a4977 100644 +--- a/zkey/ekmfweb/Makefile ++++ b/zkey/ekmfweb/Makefile +@@ -7,8 +7,6 @@ all: zkey-ekmfweb.so + + libs = $(rootdir)/libutil/libutil.a + +-export LIBRARY_PATH = $(rootdir)/libekmfweb:$LIBRARY_PATH +- + zkey-ekmfweb.o: zkey-ekmfweb.c zkey-ekmfweb.h ../kms-plugin.h \ + ../cca.h ../utils.h ../pkey.h ../properties.h \ + $(rootdir)include/ekmfweb/ekmfweb.h libekmfweb.dep +@@ -29,7 +27,7 @@ utils.o: ../utils.c ../utils.h ../pkey.h ../cca.h ../ep11.h + $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -fPIC -c $< -o $@ + + zkey-ekmfweb.so: ALL_CFLAGS += -fPIC +-zkey-ekmfweb.so: LDLIBS = -lekmfweb -ldl -lcrypto ++zkey-ekmfweb.so: LDLIBS = -L$(rootdir)/libekmfweb -lekmfweb -ldl -lcrypto + zkey-ekmfweb.so: ALL_LDFLAGS += -shared -Wl,--version-script=zkey-ekmfweb.map \ + -Wl,-z,defs,-Bsymbolic -Wl,-soname,zkey-ekmfweb.so.$(VERM) + zkey-ekmfweb.so: zkey-ekmfweb.o properties.o pkey.o cca.o ep11.o utils.o $(libs) +-- +2.26.2 + diff --git a/package/s390-tools/0002-osasnmpd-Makefile-fix-cross-compilation.patch b/package/s390-tools/0002-osasnmpd-Makefile-fix-cross-compilation.patch new file mode 100644 index 00000000..8e3d1399 --- /dev/null +++ b/package/s390-tools/0002-osasnmpd-Makefile-fix-cross-compilation.patch @@ -0,0 +1,41 @@ +From d7faa31a871d14ab02b290bdf2b2fa085766d2ac Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Fri, 27 Nov 2020 23:43:15 +0100 +Subject: [PATCH] osasnmpd/Makefile: fix cross-compilation + +Fix the following build failure by allowing the user to provide +NET_SNMP_CONFIG: + +/bin/sh: net-snmp-config: command not found +/home/buildroot/autobuild/run/instance-2/output-1/host/lib/gcc/s390x-buildroot-linux-gnu/9.3.0/../../../../s390x-buildroot-linux-gnu/bin/ld: osasnmpd.o: in function `main': +osasnmpd.c:(.text.startup+0xcc): undefined reference to `snmp_log_perror' + +Fixes: + - http://autobuild.buildroot.org/results/00796f2ebd5fb0e08ac7a05a9ee566f2bc4bd1c3 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://github.com/ibm-s390-tools/s390-tools/pull/99] +--- + osasnmpd/Makefile | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/osasnmpd/Makefile b/osasnmpd/Makefile +index 15496b2..8ce0932 100644 +--- a/osasnmpd/Makefile ++++ b/osasnmpd/Makefile +@@ -1,9 +1,10 @@ + include ../common.mak +-LDLIBS = `net-snmp-config --agent-libs` ++NET_SNMP_CONFIG = net-snmp-config ++LDLIBS = `$(NET_SNMP_CONFIG) --agent-libs` + # On some Linux systems `net-snmp-config --agent-libs` introduces -pie, + # therefore add -fPIC to prevent link failures. + ALL_CFLAGS += -fPIC +-ALL_CFLAGS += `net-snmp-config --cflags` ++ALL_CFLAGS += `$(NET_SNMP_CONFIG) --cflags` + + OBJS = ibmOSAMib.o ibmOSAMibUtil.o osasnmpd.o + +-- +2.29.2 + diff --git a/package/s390-tools/Config.in b/package/s390-tools/Config.in new file mode 100644 index 00000000..4aede4e2 --- /dev/null +++ b/package/s390-tools/Config.in @@ -0,0 +1,14 @@ +comment "s390-tools needs a glibc toolchain w/ C++, wchar, dynamic library" + depends on BR2_s390x + depends on !BR2_TOOLCHAIN_USES_GLIBC || !BR2_INSTALL_LIBSTDCPP + +config BR2_PACKAGE_S390_TOOLS + bool "s390-tools" + depends on BR2_s390x + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_USES_GLIBC + select BR2_PACKAGE_ZLIB + help + Tools for use with the s390 Linux kernel and device drivers. + + https://github.com/ibm-s390-tools/s390-tools diff --git a/package/s390-tools/s390-tools.hash b/package/s390-tools/s390-tools.hash new file mode 100644 index 00000000..1de2399e --- /dev/null +++ b/package/s390-tools/s390-tools.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 8dc1180031018756ccd5acf6c26c4175bcac79e512e8a2ea8569fdf5d3f9bd6c s390-tools-2.15.1.tar.gz +sha256 cca17a9a944ebec769adee4aebd805c912c357785ff2705a99ffe68563021f75 LICENSE diff --git a/package/s390-tools/s390-tools.mk b/package/s390-tools/s390-tools.mk new file mode 100644 index 00000000..535caf20 --- /dev/null +++ b/package/s390-tools/s390-tools.mk @@ -0,0 +1,98 @@ +################################################################################ +# +# s390-tools +# +################################################################################ + +S390_TOOLS_VERSION = 2.15.1 +S390_TOOLS_SITE = $(call github,ibm-s390-tools,s390-tools,v$(S390_TOOLS_VERSION)) +S390_TOOLS_LICENSE = MIT +S390_TOOLS_LICENSE_FILES = LICENSE +S390_TOOLS_DEPENDENCIES = zlib + +S390_TOOLS_MAKE_OPTS = \ + ARCH=$(BR2_ARCH) \ + CFLAGS="$(TARGET_CFLAGS) -D_GNU_SOURCE" \ + LINK="$(TARGET_CC)" \ + LINKXX="$(TARGET_CXX)" + +ifeq ($(BR2_PACKAGE_LIBCURL),y) +S390_TOOLS_DEPENDENCIES += libcurl +S390_TOOLS_MAKE_OPTS += \ + HAVE_CURL=1 \ + HAVE_LIBCURL=1 +else +S390_TOOLS_MAKE_OPTS += \ + HAVE_CURL=0 \ + HAVE_LIBCURL=0 +endif + +ifeq ($(BR2_PACKAGE_JSON_C),y) +S390_TOOLS_DEPENDENCIES += json-c +S390_TOOLS_MAKE_OPTS += HAVE_JSONC=1 +else +S390_TOOLS_MAKE_OPTS += HAVE_JSONC=0 +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +S390_TOOLS_DEPENDENCIES += openssl +S390_TOOLS_MAKE_OPTS += HAVE_OPENSSL=1 +else +S390_TOOLS_MAKE_OPTS += HAVE_OPENSSL=0 +endif + +ifeq ($(BR2_PACKAGE_CRYPTSETUP),y) +S390_TOOLS_DEPENDENCIES += cryptsetup +S390_TOOLS_MAKE_OPTS += HAVE_CRYPTSETUP2=1 +else +S390_TOOLS_MAKE_OPTS += HAVE_CRYPTSETUP2=0 +endif + +ifeq ($(BR2_PACKAGE_LIBGLIB2),y) +S390_TOOLS_DEPENDENCIES += libglib2 +S390_TOOLS_MAKE_OPTS += HAVE_GLIB2=1 +else +S390_TOOLS_MAKE_OPTS += HAVE_GLIB2=0 +endif + +ifeq ($(BR2_PACKAGE_NCURSES),y) +S390_TOOLS_DEPENDENCIES += ncurses +S390_TOOLS_MAKE_OPTS += HAVE_NCURSES=1 +else +S390_TOOLS_MAKE_OPTS += HAVE_NCURSES=0 +endif + +ifeq ($(BR2_PACKAGE_LIBPFM4),y) +S390_TOOLS_DEPENDENCIES += libpfm4 +S390_TOOLS_MAKE_OPTS += HAVE_PFM=1 +else +S390_TOOLS_MAKE_OPTS += HAVE_PFM=0 +endif + +ifeq ($(BR2_PACKAGE_LIBFUSE),y) +S390_TOOLS_DEPENDENCIES += libfuse +S390_TOOLS_MAKE_OPTS += HAVE_FUSE=1 +else +S390_TOOLS_MAKE_OPTS += HAVE_FUSE=0 +endif + +ifeq ($(BR2_PACKAGE_NETSNMP),y) +S390_TOOLS_DEPENDENCIES += netsnmp +S390_TOOLS_MAKE_OPTS += \ + NET_SNMP_CONFIG=$(STAGING_DIR)/usr/bin/net-snmp-config \ + HAVE_SNMP=1 +else +S390_TOOLS_MAKE_OPTS += HAVE_SNMP=0 +endif + +define S390_TOOLS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) \ + $(S390_TOOLS_MAKE_OPTS) +endef + +define S390_TOOLS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) install \ + $(S390_TOOLS_MAKE_OPTS) DESTDIR="$(TARGET_DIR)" +endef + +$(eval $(generic-package)) diff --git a/package/s6-dns/Config.in b/package/s6-dns/Config.in new file mode 100644 index 00000000..e982fdad --- /dev/null +++ b/package/s6-dns/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_S6_DNS + bool "s6-dns" + depends on BR2_USE_MMU # skalibs + select BR2_PACKAGE_SKALIBS + help + s6-dns is a suite of DNS client programs and libraries for + Unix systems, as an alternative to the BIND, djbdns or other + DNS clients. + + http://skarnet.org/software/s6-dns/ diff --git a/package/s6-dns/s6-dns.hash b/package/s6-dns/s6-dns.hash new file mode 100644 index 00000000..5ee12ae2 --- /dev/null +++ b/package/s6-dns/s6-dns.hash @@ -0,0 +1,3 @@ +# Locally generated +sha256 415e3e8a8baaa39b3eac57eef8b3023d63bcdb33d9f9b03bcb298fd940589132 s6-dns-2.3.1.1.tar.gz +sha256 d8e17a6418d26867c13801810903a1f78beac8cfe8f92c2a85afe59f3c3fc48c COPYING diff --git a/package/s6-dns/s6-dns.mk b/package/s6-dns/s6-dns.mk new file mode 100644 index 00000000..7384f072 --- /dev/null +++ b/package/s6-dns/s6-dns.mk @@ -0,0 +1,45 @@ +################################################################################ +# +# s6-dns +# +################################################################################ + +S6_DNS_VERSION = 2.3.1.1 +S6_DNS_SITE = http://skarnet.org/software/s6-dns +S6_DNS_LICENSE = ISC +S6_DNS_LICENSE_FILES = COPYING +S6_DNS_INSTALL_STAGING = YES +S6_DNS_DEPENDENCIES = skalibs + +S6_DNS_CONF_OPTS = \ + --prefix=/usr \ + --with-sysdeps=$(STAGING_DIR)/usr/lib/skalibs/sysdeps \ + --with-include=$(STAGING_DIR)/usr/include \ + --with-dynlib=$(STAGING_DIR)/usr/lib \ + --with-lib=$(STAGING_DIR)/usr/lib/skalibs \ + $(if $(BR2_STATIC_LIBS),,--disable-allstatic) \ + $(SHARED_STATIC_LIBS_OPTS) + +define S6_DNS_CONFIGURE_CMDS + (cd $(@D); $(TARGET_CONFIGURE_OPTS) ./configure $(S6_DNS_CONF_OPTS)) +endef + +define S6_DNS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define S6_DNS_REMOVE_STATIC_LIB_DIR + rm -rf $(TARGET_DIR)/usr/lib/s6-dns +endef + +S6_DNS_POST_INSTALL_TARGET_HOOKS += S6_DNS_REMOVE_STATIC_LIB_DIR + +define S6_DNS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +define S6_DNS_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/s6-linux-init/Config.in b/package/s6-linux-init/Config.in new file mode 100644 index 00000000..b56b861f --- /dev/null +++ b/package/s6-linux-init/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_S6_LINUX_INIT + bool "s6-linux-init" + depends on BR2_USE_MMU # s6 + select BR2_PACKAGE_S6 + select BR2_PACKAGE_S6_LINUX_UTILS + select BR2_PACKAGE_S6_PORTABLE_UTILS + help + s6-linux-init is a set of minimalistic tools to create a + s6-based init system, including a /sbin/init binary, on a + Linux kernel. + + http://skarnet.org/software/s6-linux-init/ diff --git a/package/s6-linux-init/s6-linux-init.hash b/package/s6-linux-init/s6-linux-init.hash new file mode 100644 index 00000000..bc2f7072 --- /dev/null +++ b/package/s6-linux-init/s6-linux-init.hash @@ -0,0 +1,3 @@ +# Locally generated +sha256 216af5589c2bc5dbdea6b6c94d55575c12e31f57b2e0fde5c534a840aeed02fb s6-linux-init-1.0.3.1.tar.gz +sha256 487e89990a571700bcdf7c0cbbde2859446f79e85e8b59791adab98fff6b1889 COPYING diff --git a/package/s6-linux-init/s6-linux-init.mk b/package/s6-linux-init/s6-linux-init.mk new file mode 100644 index 00000000..71c727de --- /dev/null +++ b/package/s6-linux-init/s6-linux-init.mk @@ -0,0 +1,36 @@ +################################################################################ +# +# s6-linux-init +# +################################################################################ + +S6_LINUX_INIT_VERSION = 1.0.3.1 +S6_LINUX_INIT_SITE = http://skarnet.org/software/s6-linux-init +S6_LINUX_INIT_LICENSE = ISC +S6_LINUX_INIT_LICENSE_FILES = COPYING +S6_LINUX_INIT_DEPENDENCIES = s6 s6-linux-utils s6-portable-utils + +S6_LINUX_INIT_CONF_OPTS = \ + --prefix=/usr \ + --with-sysdeps=$(STAGING_DIR)/usr/lib/skalibs/sysdeps \ + --with-include=$(STAGING_DIR)/usr/include \ + --with-dynlib=$(STAGING_DIR)/usr/lib \ + --with-lib=$(STAGING_DIR)/usr/lib/execline \ + --with-lib=$(STAGING_DIR)/usr/lib/s6 \ + --with-lib=$(STAGING_DIR)/usr/lib/skalibs \ + $(if $(BR2_STATIC_LIBS),,--disable-allstatic) \ + $(SHARED_STATIC_LIBS_OPTS) + +define S6_LINUX_INIT_CONFIGURE_CMDS + (cd $(@D); $(TARGET_CONFIGURE_OPTS) ./configure $(S6_LINUX_INIT_CONF_OPTS)) +endef + +define S6_LINUX_INIT_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define S6_LINUX_INIT_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/s6-linux-utils/Config.in b/package/s6-linux-utils/Config.in new file mode 100644 index 00000000..43e6bb91 --- /dev/null +++ b/package/s6-linux-utils/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_S6_LINUX_UTILS + bool "s6-linux-utils" + depends on BR2_USE_MMU # skalibs + select BR2_PACKAGE_SKALIBS + help + s6-linux-utils is a set of minimalistic Linux-specific + system utilities. + + http://skarnet.org/software/s6-linux-utils/ diff --git a/package/s6-linux-utils/s6-linux-utils.hash b/package/s6-linux-utils/s6-linux-utils.hash new file mode 100644 index 00000000..638b6b81 --- /dev/null +++ b/package/s6-linux-utils/s6-linux-utils.hash @@ -0,0 +1,3 @@ +# Locally generated +sha256 25f61961f3247b9a833536ebd1e19f3b024fa095fce30f93d82fdfd4e015dc02 s6-linux-utils-2.5.1.1.tar.gz +sha256 d8e17a6418d26867c13801810903a1f78beac8cfe8f92c2a85afe59f3c3fc48c COPYING diff --git a/package/s6-linux-utils/s6-linux-utils.mk b/package/s6-linux-utils/s6-linux-utils.mk new file mode 100644 index 00000000..926ec523 --- /dev/null +++ b/package/s6-linux-utils/s6-linux-utils.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# s6-linux-utils +# +################################################################################ + +S6_LINUX_UTILS_VERSION = 2.5.1.1 +S6_LINUX_UTILS_SITE = http://skarnet.org/software/s6-linux-utils +S6_LINUX_UTILS_LICENSE = ISC +S6_LINUX_UTILS_LICENSE_FILES = COPYING +S6_LINUX_UTILS_DEPENDENCIES = skalibs + +S6_LINUX_UTILS_CONF_OPTS = \ + --prefix=/usr \ + --with-sysdeps=$(STAGING_DIR)/usr/lib/skalibs/sysdeps \ + --with-include=$(STAGING_DIR)/usr/include \ + --with-dynlib=$(STAGING_DIR)/usr/lib \ + --with-lib=$(STAGING_DIR)/usr/lib/skalibs \ + $(if $(BR2_STATIC_LIBS),,--disable-allstatic) \ + $(SHARED_STATIC_LIBS_OPTS) + +define S6_LINUX_UTILS_CONFIGURE_CMDS + (cd $(@D); $(TARGET_CONFIGURE_OPTS) ./configure $(S6_LINUX_UTILS_CONF_OPTS)) +endef + +define S6_LINUX_UTILS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define S6_LINUX_UTILS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/s6-networking/Config.in b/package/s6-networking/Config.in new file mode 100644 index 00000000..bdf58476 --- /dev/null +++ b/package/s6-networking/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_S6_NETWORKING + bool "s6-networking" + depends on BR2_USE_MMU # s6 + select BR2_PACKAGE_S6_DNS + select BR2_PACKAGE_S6 + help + s6-networking is a suite of small networking utilities for + Unix systems. It includes command-line client and server + management, TCP access control, privilege escalation across + UNIX domain sockets, IDENT protocol management and clock + synchronization. + + http://skarnet.org/software/s6-networking/ diff --git a/package/s6-networking/s6-networking.hash b/package/s6-networking/s6-networking.hash new file mode 100644 index 00000000..41ceda0c --- /dev/null +++ b/package/s6-networking/s6-networking.hash @@ -0,0 +1,3 @@ +# Locally generated +sha256 9d411b5f742529be8e14da0a21635fcc304a4d7ac05fe0e45cf2355e5e3cf188 s6-networking-2.3.1.1.tar.gz +sha256 d8e17a6418d26867c13801810903a1f78beac8cfe8f92c2a85afe59f3c3fc48c COPYING diff --git a/package/s6-networking/s6-networking.mk b/package/s6-networking/s6-networking.mk new file mode 100644 index 00000000..c23445b9 --- /dev/null +++ b/package/s6-networking/s6-networking.mk @@ -0,0 +1,53 @@ +################################################################################ +# +# s6-networking +# +################################################################################ + +S6_NETWORKING_VERSION = 2.3.1.1 +S6_NETWORKING_SITE = http://skarnet.org/software/s6-networking +S6_NETWORKING_LICENSE = ISC +S6_NETWORKING_LICENSE_FILES = COPYING +S6_NETWORKING_INSTALL_STAGING = YES +S6_NETWORKING_DEPENDENCIES = s6-dns s6 + +S6_NETWORKING_CONF_OPTS = \ + --prefix=/usr \ + --with-sysdeps=$(STAGING_DIR)/usr/lib/skalibs/sysdeps \ + --with-include=$(STAGING_DIR)/usr/include \ + --with-dynlib=$(STAGING_DIR)/usr/lib \ + --with-lib=$(STAGING_DIR)/usr/lib/execline \ + --with-lib=$(STAGING_DIR)/usr/lib/s6 \ + --with-lib=$(STAGING_DIR)/usr/lib/s6-dns \ + --with-lib=$(STAGING_DIR)/usr/lib/skalibs \ + $(if $(BR2_STATIC_LIBS),,--disable-allstatic) \ + $(SHARED_STATIC_LIBS_OPTS) + +ifeq ($(BR2_PACKAGE_LIBRESSL),y) +S6_NETWORKING_CONF_OPTS += --enable-ssl=libressl +S6_NETWORKING_DEPENDENCIES += libressl +endif + +define S6_NETWORKING_CONFIGURE_CMDS + (cd $(@D); $(TARGET_CONFIGURE_OPTS) ./configure $(S6_NETWORKING_CONF_OPTS)) +endef + +define S6_NETWORKING_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define S6_NETWORKING_REMOVE_STATIC_LIB_DIR + rm -rf $(TARGET_DIR)/usr/lib/s6-networking +endef + +S6_NETWORKING_POST_INSTALL_TARGET_HOOKS += S6_NETWORKING_REMOVE_STATIC_LIB_DIR + +define S6_NETWORKING_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +define S6_NETWORKING_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/s6-portable-utils/Config.in b/package/s6-portable-utils/Config.in new file mode 100644 index 00000000..8521ecfa --- /dev/null +++ b/package/s6-portable-utils/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_S6_PORTABLE_UTILS + bool "s6-portable-utils" + depends on BR2_USE_MMU # skalibs + select BR2_PACKAGE_SKALIBS + help + s6-portable-utils is a set of tiny general Unix utilities, + often performing well-known tasks such as cut and grep, but + optimized for simplicity and small size. They were designed + for embedded systems and other constrained environments, but + they work everywhere. + + http://skarnet.org/software/s6-portable-utils/ diff --git a/package/s6-portable-utils/s6-portable-utils.hash b/package/s6-portable-utils/s6-portable-utils.hash new file mode 100644 index 00000000..83823b34 --- /dev/null +++ b/package/s6-portable-utils/s6-portable-utils.hash @@ -0,0 +1,3 @@ +# Locally generated +sha256 1e473224350c6ebedd7adf162b68303e2e0a32ca2e99d7afee7573d9e78f931c s6-portable-utils-2.2.2.1.tar.gz +sha256 d8e17a6418d26867c13801810903a1f78beac8cfe8f92c2a85afe59f3c3fc48c COPYING diff --git a/package/s6-portable-utils/s6-portable-utils.mk b/package/s6-portable-utils/s6-portable-utils.mk new file mode 100644 index 00000000..8b60bf43 --- /dev/null +++ b/package/s6-portable-utils/s6-portable-utils.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# s6-portable-utils +# +################################################################################ + +S6_PORTABLE_UTILS_VERSION = 2.2.2.1 +S6_PORTABLE_UTILS_SITE = http://skarnet.org/software/s6-portable-utils +S6_PORTABLE_UTILS_LICENSE = ISC +S6_PORTABLE_UTILS_LICENSE_FILES = COPYING +S6_PORTABLE_UTILS_DEPENDENCIES = skalibs + +S6_PORTABLE_UTILS_CONF_OPTS = \ + --prefix=/usr \ + --with-sysdeps=$(STAGING_DIR)/usr/lib/skalibs/sysdeps \ + --with-include=$(STAGING_DIR)/usr/include \ + --with-dynlib=$(STAGING_DIR)/usr/lib \ + --with-lib=$(STAGING_DIR)/usr/lib/skalibs \ + $(if $(BR2_STATIC_LIBS),,--disable-allstatic) \ + $(SHARED_STATIC_LIBS_OPTS) + +define S6_PORTABLE_UTILS_CONFIGURE_CMDS + (cd $(@D); $(TARGET_CONFIGURE_OPTS) ./configure $(S6_PORTABLE_UTILS_CONF_OPTS)) +endef + +define S6_PORTABLE_UTILS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define S6_PORTABLE_UTILS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/s6-rc/Config.in b/package/s6-rc/Config.in new file mode 100644 index 00000000..39a924ea --- /dev/null +++ b/package/s6-rc/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_S6_RC + bool "s6-rc" + depends on BR2_USE_MMU # s6 + select BR2_PACKAGE_S6 + help + s6-rc is a service manager for s6-based systems, i.e. a + suite of programs that can start and stop services, both + long-running daemons and one-time initialization scripts, in + the proper order according to a dependency tree. + + http://skarnet.org/software/s6-rc/ diff --git a/package/s6-rc/Config.in.host b/package/s6-rc/Config.in.host new file mode 100644 index 00000000..f250b9fb --- /dev/null +++ b/package/s6-rc/Config.in.host @@ -0,0 +1,8 @@ +config BR2_PACKAGE_HOST_S6_RC + bool "host s6-rc" + depends on BR2_PACKAGE_S6_RC + help + This package provides the host variant of the s6-rc tools, + required to build the s6-rc service database offline. + + http://skarnet.org/software/s6-rc/ diff --git a/package/s6-rc/s6-rc.hash b/package/s6-rc/s6-rc.hash new file mode 100644 index 00000000..918dc0fd --- /dev/null +++ b/package/s6-rc/s6-rc.hash @@ -0,0 +1,3 @@ +# Locally generated +sha256 257e2c428336c2b57cd17b65382bc55592759acc65e053e23ad646444f28af52 s6-rc-0.5.1.1.tar.gz +sha256 487e89990a571700bcdf7c0cbbde2859446f79e85e8b59791adab98fff6b1889 COPYING diff --git a/package/s6-rc/s6-rc.mk b/package/s6-rc/s6-rc.mk new file mode 100644 index 00000000..30443413 --- /dev/null +++ b/package/s6-rc/s6-rc.mk @@ -0,0 +1,73 @@ +################################################################################ +# +# s6-rc +# +################################################################################ + +S6_RC_VERSION = 0.5.1.1 +S6_RC_SITE = http://skarnet.org/software/s6-rc +S6_RC_LICENSE = ISC +S6_RC_LICENSE_FILES = COPYING +S6_RC_INSTALL_STAGING = YES +S6_RC_DEPENDENCIES = s6 + +S6_RC_CONF_OPTS = \ + --prefix=/usr \ + --with-sysdeps=$(STAGING_DIR)/usr/lib/skalibs/sysdeps \ + --with-include=$(STAGING_DIR)/usr/include \ + --with-dynlib=$(STAGING_DIR)/usr/lib \ + --with-lib=$(STAGING_DIR)/usr/lib/execline \ + --with-lib=$(STAGING_DIR)/usr/lib/s6 \ + --with-lib=$(STAGING_DIR)/usr/lib/skalibs \ + $(if $(BR2_STATIC_LIBS),,--disable-allstatic) \ + $(SHARED_STATIC_LIBS_OPTS) + +define S6_RC_CONFIGURE_CMDS + (cd $(@D); $(TARGET_CONFIGURE_OPTS) ./configure $(S6_RC_CONF_OPTS)) +endef + +define S6_RC_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define S6_RC_REMOVE_STATIC_LIB_DIR + rm -rf $(TARGET_DIR)/usr/lib/s6-rc +endef + +S6_RC_POST_INSTALL_TARGET_HOOKS += S6_RC_REMOVE_STATIC_LIB_DIR + +define S6_RC_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +define S6_RC_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install +endef + +HOST_S6_RC_DEPENDENCIES = host-s6 + +HOST_S6_RC_CONF_OPTS = \ + --prefix=$(HOST_DIR) \ + --libexecdir=/usr/libexec \ + --with-sysdeps=$(HOST_DIR)/lib/skalibs/sysdeps \ + --with-include=$(HOST_DIR)/include \ + --with-dynlib=$(HOST_DIR)/lib \ + --disable-static \ + --enable-shared \ + --disable-allstatic + +define HOST_S6_RC_CONFIGURE_CMDS + (cd $(@D); $(HOST_CONFIGURE_OPTS) ./configure $(HOST_S6_RC_CONF_OPTS)) +endef + +define HOST_S6_RC_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define HOST_S6_RC_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) install-dynlib install-bin + rm -f $(HOST_DIR)/bin/s6-rc-dryrun +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/s6/Config.in b/package/s6/Config.in new file mode 100644 index 00000000..043380f4 --- /dev/null +++ b/package/s6/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_S6 + bool "s6" + depends on BR2_USE_MMU # execline + select BR2_PACKAGE_EXECLINE + help + s6 is a small suite of programs for UNIX, designed to allow + process supervision (a.k.a service supervision), in the line + of daemontools and runit, as well as various operations on + processes and daemons. + + http://skarnet.org/software/s6/ diff --git a/package/s6/s6.hash b/package/s6/s6.hash new file mode 100644 index 00000000..9b355351 --- /dev/null +++ b/package/s6/s6.hash @@ -0,0 +1,3 @@ +# Locally generated +sha256 e0cdbaf26e3ba1c41ecc0a8d1f45fb78194f96109b55cabeb849528b7e966c57 s6-2.9.0.1.tar.gz +sha256 d8e17a6418d26867c13801810903a1f78beac8cfe8f92c2a85afe59f3c3fc48c COPYING diff --git a/package/s6/s6.mk b/package/s6/s6.mk new file mode 100644 index 00000000..ec140738 --- /dev/null +++ b/package/s6/s6.mk @@ -0,0 +1,70 @@ +################################################################################ +# +# s6 +# +################################################################################ + +S6_VERSION = 2.9.0.1 +S6_SITE = http://skarnet.org/software/s6 +S6_LICENSE = ISC +S6_LICENSE_FILES = COPYING +S6_INSTALL_STAGING = YES +S6_DEPENDENCIES = execline + +S6_CONF_OPTS = \ + --prefix=/usr \ + --with-sysdeps=$(STAGING_DIR)/usr/lib/skalibs/sysdeps \ + --with-include=$(STAGING_DIR)/usr/include \ + --with-dynlib=$(STAGING_DIR)/usr/lib \ + --with-lib=$(STAGING_DIR)/usr/lib/execline \ + --with-lib=$(STAGING_DIR)/usr/lib/skalibs \ + $(if $(BR2_STATIC_LIBS),,--disable-allstatic) \ + $(SHARED_STATIC_LIBS_OPTS) + +define S6_CONFIGURE_CMDS + (cd $(@D); $(TARGET_CONFIGURE_OPTS) ./configure $(S6_CONF_OPTS)) +endef + +define S6_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define S6_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +define S6_REMOVE_STATIC_LIB_DIR + rm -rf $(TARGET_DIR)/usr/lib/s6 +endef + +S6_POST_INSTALL_TARGET_HOOKS += S6_REMOVE_STATIC_LIB_DIR + +define S6_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install +endef + +HOST_S6_DEPENDENCIES = host-execline + +HOST_S6_CONF_OPTS = \ + --prefix=$(HOST_DIR) \ + --with-sysdeps=$(HOST_DIR)/lib/skalibs/sysdeps \ + --with-include=$(HOST_DIR)/include \ + --with-dynlib=$(HOST_DIR)/lib \ + --disable-static \ + --enable-shared \ + --disable-allstatic + +define HOST_S6_CONFIGURE_CMDS + (cd $(@D); $(HOST_CONFIGURE_OPTS) ./configure $(HOST_S6_CONF_OPTS)) +endef + +define HOST_S6_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define HOST_S6_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) install-dynlib install-include +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/safeclib/Config.in b/package/safeclib/Config.in new file mode 100644 index 00000000..5117c49d --- /dev/null +++ b/package/safeclib/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_SAFECLIB + bool "safeclib" + help + safec fork with all C11 Annex K functions + + This library implements the secure C11 Annex K functions on + top of most libc implementations, which are missing from them. + + https://rurban.github.io/safeclib/ diff --git a/package/safeclib/safeclib.hash b/package/safeclib/safeclib.hash new file mode 100644 index 00000000..7e1c6794 --- /dev/null +++ b/package/safeclib/safeclib.hash @@ -0,0 +1,5 @@ +# From https://github.com/rurban/safeclib/releases/tag/v08112019 +sha256 bc2f25875522c50a3a5901981020d906db0b6a7d365619b8d72412c126be3923 libsafec-08112019.0-gad76c7.tar.bz2 + +# Hash for license file +sha256 c33e77efd5781e3d59a2bb648c82d2a615035ef0d24cf58880380e3af906510b COPYING diff --git a/package/safeclib/safeclib.mk b/package/safeclib/safeclib.mk new file mode 100644 index 00000000..3af8fbb1 --- /dev/null +++ b/package/safeclib/safeclib.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# safeclib +# +################################################################################ + +SAFECLIB_VERSION = 08112019 +SAFECLIB_SITE = \ + https://github.com/rurban/safeclib/releases/download/v$(SAFECLIB_VERSION) +SAFECLIB_SOURCE = libsafec-$(SAFECLIB_VERSION).0-gad76c7.tar.bz2 +SAFECLIB_LICENSE = MIT +SAFECLIB_LICENSE_FILES = COPYING +SAFECLIB_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/sam-ba/Config.in.host b/package/sam-ba/Config.in.host new file mode 100644 index 00000000..2236b5f4 --- /dev/null +++ b/package/sam-ba/Config.in.host @@ -0,0 +1,10 @@ +config BR2_PACKAGE_HOST_SAM_BA + bool "host sam-ba" + depends on BR2_HOSTARCH = "x86_64" + select BR2_HOSTARCH_NEEDS_IA32_LIBS + help + Atmel SAM-BA software provides an open set of tools for + programming the Atmel SAM3, SAM7 and SAM9 ARM-based + microcontrollers. + + http://www.at91.com/linux4sam/bin/view/Linux4SAM/SoftwareTools diff --git a/package/sam-ba/sam-ba.hash b/package/sam-ba/sam-ba.hash new file mode 100644 index 00000000..1bc14f3f --- /dev/null +++ b/package/sam-ba/sam-ba.hash @@ -0,0 +1,3 @@ +# sha256 locally computed +sha256 dc32c49688bbfab5aa687042caae5f611fe3d9e722098a561f8f5d2fbc57249d sam-ba_3.3.1-linux_x86_64.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 LICENSE.txt diff --git a/package/sam-ba/sam-ba.mk b/package/sam-ba/sam-ba.mk new file mode 100644 index 00000000..3082d491 --- /dev/null +++ b/package/sam-ba/sam-ba.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# sam-ba +# +################################################################################ + +SAM_BA_VERSION = 3.3.1 +SAM_BA_SITE = https://github.com/atmelcorp/sam-ba/releases/download/v$(SAM_BA_VERSION) +SAM_BA_SOURCE = sam-ba_$(SAM_BA_VERSION)-linux_x86_64.tar.gz +SAM_BA_LICENSE = GPLv2 +SAM_BA_LICENSE_FILES = LICENSE.txt + +# Since it's a prebuilt application and it does not conform to the +# usual Unix hierarchy, we install it in $(HOST_DIR)/opt/sam-ba and +# then create a symbolic link from $(HOST_DIR)/bin to the +# application binary, for easier usage. + +define HOST_SAM_BA_INSTALL_CMDS + mkdir -p $(HOST_DIR)/opt/sam-ba/ + cp -a $(@D)/* $(HOST_DIR)/opt/sam-ba/ + mkdir -p $(HOST_DIR)/bin/ + ln -sf ../opt/sam-ba/sam-ba $(HOST_DIR)/bin/sam-ba +endef + +$(eval $(host-generic-package)) diff --git a/package/samba4/0001-libreplace-disable-libbsd-support.patch b/package/samba4/0001-libreplace-disable-libbsd-support.patch new file mode 100644 index 00000000..79216860 --- /dev/null +++ b/package/samba4/0001-libreplace-disable-libbsd-support.patch @@ -0,0 +1,46 @@ +From 4df82c9e03b68dc1621fe4c9ac6a29ae3e64e07e Mon Sep 17 00:00:00 2001 +From: Gustavo Zacarias +Date: Wed, 7 Sep 2016 23:03:43 -0300 +Subject: [PATCH] libreplace: disable libbsd support + +Disable libbsd support, samba4 uses a global config.h for its own +codebase and that of heimdal (when building with builtin). +This causes redefinition conflicts for link(2) when both standard +unistd.h and bsd/unistd.h get included. + +Signed-off-by: Gustavo Zacarias +[Bernd: rebased for versions 4.7.3, 4.8.0, 4.8.5 & 4.11.13] +Signed-off-by: Bernd Kuhls +--- + lib/replace/wscript | 15 --------------- + 1 file changed, 15 deletions(-) + +diff --git a/lib/replace/wscript b/lib/replace/wscript +index 240d730cbee..c6d8df43c74 100644 +--- a/lib/replace/wscript ++++ b/lib/replace/wscript +@@ -406,21 +406,6 @@ def configure(conf): + + strlcpy_in_bsd = False + +- # libbsd on some platforms provides strlcpy and strlcat +- if not conf.CHECK_FUNCS('strlcpy strlcat'): +- if conf.CHECK_FUNCS_IN('strlcpy strlcat', 'bsd', headers='bsd/string.h', +- checklibc=True): +- strlcpy_in_bsd = True +- if not conf.CHECK_FUNCS('getpeereid'): +- conf.CHECK_FUNCS_IN('getpeereid', 'bsd', headers='sys/types.h bsd/unistd.h') +- if not conf.CHECK_FUNCS_IN('setproctitle', 'setproctitle', headers='setproctitle.h'): +- conf.CHECK_FUNCS_IN('setproctitle', 'bsd', headers='sys/types.h bsd/unistd.h') +- if not conf.CHECK_FUNCS('setproctitle_init'): +- conf.CHECK_FUNCS_IN('setproctitle_init', 'bsd', headers='sys/types.h bsd/unistd.h') +- +- if not conf.CHECK_FUNCS('closefrom'): +- conf.CHECK_FUNCS_IN('closefrom', 'bsd', headers='bsd/unistd.h') +- + conf.CHECK_CODE(''' + struct ucred cred; + socklen_t cred_len; +-- +2.20.1 + diff --git a/package/samba4/0002-build-find-pre-built-heimdal-build-tools-in-case-of-.patch b/package/samba4/0002-build-find-pre-built-heimdal-build-tools-in-case-of-.patch new file mode 100644 index 00000000..b8636958 --- /dev/null +++ b/package/samba4/0002-build-find-pre-built-heimdal-build-tools-in-case-of-.patch @@ -0,0 +1,87 @@ +From e002d2ef2688d5433d2bd03aa4d77a0ec5ac4e63 Mon Sep 17 00:00:00 2001 +From: Uri Simchoni +Date: Sun, 20 Oct 2019 00:03:14 +0300 +Subject: [PATCH] build: find pre-built heimdal build tools in case of embedded + heimdal + +This patch fixes the case of finding asn1_compile and compile_et for +building embedded heimdal, by setting +--bundled-libraries='!asn1_compile,!compile_et' as configure flags. + +The Heimdal build tools compile_et and asn1_compile are needed *only* +if we use the embedded heimdal (otherwise we don't build heimdal and +use headers that have been generated by those tools elsewhere). + +For cross-compilation with embedded heimdal, it is vital to use host build +tools, and so asn1_compile and compile_et must be supplied and not +built. One way of doing this would be to set the COMPILE_ET and +ASN1_COMPILE env vars to the location of supplied binaries. Another way, +which is more commonly used, is to exclude asn1_compile and compile_et +from bundled packages via the switch +-bundled-libraries='!asn1_compile,!compile_et'. When this is done, +the build script searches the path for those tools and sets the +ASN1_COMPILE and COMPILE_ET vars accordingly. (this is admittedly +kind of a round-about way of doing things but this has become the +de-facto standard amongst embedded distro builders). + +In commit 8061983d4882f3ba3f12da71443b035d7b672eec, this process of +finding the binaris has been moved to be carried out only in the +system heimdal case. As explained above, we only need these tools, +and hence the check, in bundled mode. + +BUG: https://bugzilla.samba.org/show_bug.cgi?id=14164 + +Signed-off-by: Uri Simchoni +Signed-off-by: Bernd Kuhls +[Bernd: rebased for version 4.11.13] +--- + wscript_configure_embedded_heimdal | 11 +++++++++++ + wscript_configure_system_heimdal | 11 ----------- + 2 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/wscript_configure_embedded_heimdal b/wscript_configure_embedded_heimdal +index 8c55ae2a938..4fdae8062c5 100644 +--- a/wscript_configure_embedded_heimdal ++++ b/wscript_configure_embedded_heimdal +@@ -1 +1,12 @@ + conf.RECURSE('source4/heimdal_build') ++ ++def check_system_heimdal_binary(name): ++ if conf.LIB_MAY_BE_BUNDLED(name): ++ return False ++ if not conf.find_program(name, var=name.upper()): ++ return False ++ conf.define('USING_SYSTEM_%s' % name.upper(), 1) ++ return True ++ ++check_system_heimdal_binary("compile_et") ++check_system_heimdal_binary("asn1_compile") +diff --git a/wscript_configure_system_heimdal b/wscript_configure_system_heimdal +index 0ff6dad2f55..f77c177442f 100644 +--- a/wscript_configure_system_heimdal ++++ b/wscript_configure_system_heimdal +@@ -37,14 +37,6 @@ def check_system_heimdal_lib(name, functions='', headers='', onlyif=None): + conf.define('USING_SYSTEM_%s' % name.upper(), 1) + return True + +-def check_system_heimdal_binary(name): +- if conf.LIB_MAY_BE_BUNDLED(name): +- return False +- if not conf.find_program(name, var=name.upper()): +- return False +- conf.define('USING_SYSTEM_%s' % name.upper(), 1) +- return True +- + check_system_heimdal_lib("com_err", "com_right_r com_err", "com_err.h") + + if check_system_heimdal_lib("roken", "rk_socket_set_reuseaddr", "roken.h"): +@@ -96,7 +96,4 @@ + #if conf.CHECK_BUNDLED_SYSTEM('tommath', checkfunctions='mp_init', headers='tommath.h'): + # conf.define('USING_SYSTEM_TOMMATH', 1) + +-check_system_heimdal_binary("compile_et") +-check_system_heimdal_binary("asn1_compile") +- + conf.define('USING_SYSTEM_KRB5', 1) +-- +2.20.1 diff --git a/package/samba4/0003-Fix-unistd.h-include.patch b/package/samba4/0003-Fix-unistd.h-include.patch new file mode 100644 index 00000000..f01b899a --- /dev/null +++ b/package/samba4/0003-Fix-unistd.h-include.patch @@ -0,0 +1,38 @@ +From 85c33f89df8607ace0707e1360ff0f79f3e8f5f3 Mon Sep 17 00:00:00 2001 +From: Andy Walsh +Date: Wed, 6 Nov 2019 19:28:30 +0100 +Subject: [PATCH] Fix unistd.h include + +Fixes build error + +source4/heimdal/lib/asn1/asn1_err.c:47:23: error: 'link' redeclared as different kind of symbol + static struct et_list link = { 0, 0 }; + +Downloaded from +https://github.com/Andy2244/openwrt-extra/blob/samba-4.10/samba4/patches/006-samba-4-10-musl_rm_unistd_incl.patch + +Upstream bug report: https://bugzilla.samba.org/show_bug.cgi?id=13856 + +Signed-off-by: Bernd Kuhls +--- + lib/replace/replace.h | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/lib/replace/replace.h b/lib/replace/replace.h +index 1658465866e..e6768c4ae51 100644 +--- a/lib/replace/replace.h ++++ b/lib/replace/replace.h +@@ -168,10 +168,6 @@ + #include + #endif + +-#ifdef HAVE_UNISTD_H +-#include +-#endif +- + #ifdef HAVE_STRING_H + #include + #endif +-- +2.20.1 + diff --git a/package/samba4/0004-ldap_message_test.c-include-stdint.h-before-cmoka.h.patch b/package/samba4/0004-ldap_message_test.c-include-stdint.h-before-cmoka.h.patch new file mode 100644 index 00000000..e63f43c2 --- /dev/null +++ b/package/samba4/0004-ldap_message_test.c-include-stdint.h-before-cmoka.h.patch @@ -0,0 +1,40 @@ +From b2ea5dc3639d68b878c6534f4992da446dbbf2d4 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sat, 16 May 2020 18:15:38 +0200 +Subject: [PATCH] ldap_message_test.c: include stdint.h before cmoka.h + +This fix the following build failure on uclibc: + +In file included from /home/giuliobenetti/autobuild/run/instance-1/output-1/host/opt/ext-toolchain/lib/gcc/mips64el-buildroot-linux-uclibc/5.5.0/include/stdint.h:9:0, + from /home/giuliobenetti/autobuild/run/instance-1/output-1/host/mips64el-buildroot-linux-uclibc/sysroot/usr/include/inttypes.h:27, + from ../../lib/replace/../replace/replace.h:64, + from ../../source4/include/includes.h:23, + from ../../libcli/ldap/tests/ldap_message_test.c:41: +/home/giuliobenetti/autobuild/run/instance-1/output-1/host/mips64el-buildroot-linux-uclibc/sysroot/usr/include/stdint.h:122:27: error: conflicting types for 'uintptr_t' + typedef unsigned long int uintptr_t; + ^ + +Fixes: + - http://autobuild.buildroot.org/results/09e84d15efe755bdefa9f8c6b8355c49ddbc2f65 + +Signed-off-by: Fabrice Fontaine +[Upstream status: not sent yet] +--- + libcli/ldap/tests/ldap_message_test.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/libcli/ldap/tests/ldap_message_test.c b/libcli/ldap/tests/ldap_message_test.c +index c5aacd4bc6b..51331e5c600 100644 +--- a/libcli/ldap/tests/ldap_message_test.c ++++ b/libcli/ldap/tests/ldap_message_test.c +@@ -34,6 +34,7 @@ + */ + #include + #include ++#include + #include + #include + +-- +2.26.2 + diff --git a/package/samba4/0005-dcesrv_core-fix-build.patch b/package/samba4/0005-dcesrv_core-fix-build.patch new file mode 100644 index 00000000..75835acd --- /dev/null +++ b/package/samba4/0005-dcesrv_core-fix-build.patch @@ -0,0 +1,56 @@ +From 44bccdf7d158ae93ba9a5515038aac2a5ac4fd85 Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Sat, 27 Mar 2021 17:17:34 +0100 +Subject: [PATCH] dcesrv_core: fix build +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Move include of system/network.h to avoid a build error: + +In file included from ../../lib/replace/system/network.h:35, + from ../../librpc/rpc/dcesrv_core.c:2658: +usr/include/unistd.h: At top level: +usr/include/unistd.h:675:16: error: conflicting types for ‘geteuid’ + 675 | extern __uid_t geteuid (void) __THROW; + +Patch sent upstream: +https://gitlab.com/samba-team/samba/-/merge_requests/1871 + +Signed-off-by: Bernd Kuhls +--- + librpc/rpc/dcesrv_core.c | 11 +---------- + 1 file changed, 1 insertion(+), 10 deletions(-) + +diff --git a/librpc/rpc/dcesrv_core.c b/librpc/rpc/dcesrv_core.c +index 70e0245532e..e761329d157 100644 +--- a/librpc/rpc/dcesrv_core.c ++++ b/librpc/rpc/dcesrv_core.c +@@ -32,6 +32,7 @@ + #include "lib/tsocket/tsocket.h" + #include "librpc/gen_ndr/ndr_dcerpc.h" + #include "lib/util/tevent_ntstatus.h" ++#include "system/network.h" + + + #undef DBGC_CLASS +@@ -2633,16 +2634,6 @@ _PUBLIC_ void dcesrv_cleanup_broken_connections(struct dcesrv_context *dce_ctx) + } + } + +-/* We need this include to be able to compile on some plateforms +- * (ie. freebsd 7.2) as it seems that is not included +- * correctly. +- * It has to be that deep because otherwise we have a conflict on +- * const struct dcesrv_interface declaration. +- * This is mostly due to socket_wrapper defining #define bind swrap_bind +- * which conflict with the bind used before. +- */ +-#include "system/network.h" +- + struct dcesrv_sock_reply_state { + struct dcesrv_connection *dce_conn; + struct dcesrv_call_state *call; +-- +2.29.2 + diff --git a/package/samba4/Config.in b/package/samba4/Config.in new file mode 100644 index 00000000..e114a7e1 --- /dev/null +++ b/package/samba4/Config.in @@ -0,0 +1,57 @@ +comment "samba4 needs a uClibc or glibc toolchain w/ wchar, dynamic library, NPTL" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_USE_WCHAR || BR2_TOOLCHAIN_USES_MUSL \ + || BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_USE_MMU + +config BR2_PACKAGE_SAMBA4 + bool "samba4" + depends on BR2_USE_MMU # fork() + depends on BR2_USE_WCHAR # python + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # python -> libffi + depends on !BR2_STATIC_LIBS # cmocka, python, gnutls + depends on !BR2_nios2 # binary too large, relocations don't fit + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_TOOLCHAIN_USES_MUSL + select BR2_PACKAGE_CMOCKA + select BR2_PACKAGE_E2FSPROGS + select BR2_PACKAGE_GNUTLS + select BR2_PACKAGE_LIBTIRPC if !BR2_TOOLCHAIN_HAS_NATIVE_RPC + select BR2_PACKAGE_POPT + select BR2_PACKAGE_ZLIB + help + Provides secure, stable and fast file and print services + for all clients using the SMB/CIFS protocol, such as all + versions of DOS, Windows, OS/2, Linux and many others. + + http://www.samba.org/ + +if BR2_PACKAGE_SAMBA4 + +config BR2_PACKAGE_SAMBA4_AD_DC + bool "AD DC" + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_JANSSON + select BR2_PACKAGE_PYTHON_DNSPYTHON + select BR2_PACKAGE_PYTHON_MARKDOWN + select BR2_PACKAGE_SAMBA4_ADS + help + Enable Active Directory Domain Controller functionality. + +comment "AD DC depends on python3" + depends on !BR2_PACKAGE_PYTHON3 + +config BR2_PACKAGE_SAMBA4_ADS + bool "ADS" + select BR2_PACKAGE_OPENLDAP + help + Enable Active Directory member Server functionality. + +config BR2_PACKAGE_SAMBA4_SMBTORTURE + bool "smbtorture" + help + Install the smbtorture test suite. + It's normally used for validation and stress testing. + Approximately +5 MB of stripped uncompressed target space. + +endif diff --git a/package/samba4/S91smb b/package/samba4/S91smb new file mode 100644 index 00000000..c8c5fc86 --- /dev/null +++ b/package/samba4/S91smb @@ -0,0 +1,56 @@ +#!/bin/sh + +[ -f /etc/samba/smb.conf ] || exit 0 + +mkdir -p /var/log/samba + +start() { + printf "Starting SMB services: " + smbd -D + [ $? = 0 ] && echo "OK" || echo "FAIL" + + printf "Starting NMB services: " + nmbd -D + [ $? = 0 ] && echo "OK" || echo "FAIL" +} + +stop() { + printf "Shutting down SMB services: " + kill -9 `pidof smbd` + [ $? = 0 ] && echo "OK" || echo "FAIL" + + printf "Shutting down NMB services: " + kill -9 `pidof nmbd` + [ $? = 0 ] && echo "OK" || echo "FAIL" +} + +restart() { + stop + start +} + +reload() { + printf "Reloading smb.conf file: " + kill -HUP `pidof smbd` + [ $? = 0 ] && echo "OK" || echo "FAIL" +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + restart + ;; + reload) + reload + ;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac + +exit $? diff --git a/package/samba4/samba4-cache.txt b/package/samba4/samba4-cache.txt new file mode 100644 index 00000000..75d0343d --- /dev/null +++ b/package/samba4/samba4-cache.txt @@ -0,0 +1,45 @@ +Checking simple C program: OK +rpath library support: OK +-Wl,--version-script support: OK +Checking getconf LFS_CFLAGS: NO +Checking for large file support without additional flags: OK +Checking for -D_LARGE_FILES: OK +Checking correct behavior of strtoll: NO +Checking for working strptime: OK +Checking for C99 vsnprintf: OK +Checking for HAVE_SHARED_MMAP: OK +Checking for HAVE_MREMAP: OK +Checking for HAVE_INCOHERENT_MMAP: NO +Checking for HAVE_SECURE_MKSTEMP: OK +Checking for HAVE_IFACE_GETIFADDRS: OK +Checking for kernel change notify support: OK +Checking for Linux kernel oplocks: OK +Checking for kernel share modes: OK +Checking if can we convert from CP850 to UCS-2LE: OK +Checking if can we convert from UTF-8 to UCS-2LE: OK +Checking whether we can use Linux thread-specific credentials with 32-bit system calls: OK +Checking whether we can use Linux thread-specific credentials: OK +Checking whether setreuid is available: OK +Checking whether setresuid is available: OK +Checking whether seteuid is available: OK +Checking whether fcntl locking is available: OK +Checking whether fcntl lock supports open file description locks: OK +Checking for the maximum value of the 'time_t' type: OK +Checking whether the realpath function allows a NULL argument: OK +Checking whether POSIX capabilities are available: OK +Checking for ftruncate extend: OK +vfs_fileid checking for statfs() and struct statfs.f_fsid: OK +getcwd takes a NULL argument: OK +Checking uname sysname type: "Linux" +Checking uname release type: "3.0.0" +Checking uname version type: "#1 Tue Nov 1 12:34:56 UTC 2013" +Checking value of NSIG: "65" +Checking value of _NSIG: "65" +Checking value of SIGRTMAX: "64" +Checking value of SIGRTMIN: "34" +Checking errno of iconv for illegal multibyte sequence: "0" +checking for clnt_create(): OK +Checking for a 64-bit host to support lmdb: NO +Checking value of GNUTLS_CIPHER_AES_128_CFB8: 29 +Checking value of GNUTLS_MAC_AES_CMAC_128: 203 +Checking whether fcntl supports flags to send direct I/O availability signals: OK diff --git a/package/samba4/samba4.hash b/package/samba4/samba4.hash new file mode 100644 index 00000000..5ae3e2f2 --- /dev/null +++ b/package/samba4/samba4.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +# https://download.samba.org/pub/samba/stable/samba-4.14.6.tar.asc +sha256 86760692dd74a04705c0f6d11b31965a477265a50e79eb15838184476146f4b0 samba-4.14.6.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/samba4/samba4.mk b/package/samba4/samba4.mk new file mode 100644 index 00000000..ffb582e1 --- /dev/null +++ b/package/samba4/samba4.mk @@ -0,0 +1,197 @@ +################################################################################ +# +# samba4 +# +################################################################################ + +SAMBA4_VERSION = 4.14.6 +SAMBA4_SITE = https://download.samba.org/pub/samba/stable +SAMBA4_SOURCE = samba-$(SAMBA4_VERSION).tar.gz +SAMBA4_INSTALL_STAGING = YES +SAMBA4_LICENSE = GPL-3.0+ +SAMBA4_LICENSE_FILES = COPYING +SAMBA4_CPE_ID_VENDOR = samba +SAMBA4_CPE_ID_PRODUCT = samba +SAMBA4_DEPENDENCIES = \ + host-e2fsprogs host-flex host-heimdal host-nfs-utils \ + host-perl host-perl-parse-yapp host-python3 \ + cmocka e2fsprogs gnutls popt zlib \ + $(if $(BR2_PACKAGE_LIBAIO),libaio) \ + $(if $(BR2_PACKAGE_LIBCAP),libcap) \ + $(if $(BR2_PACKAGE_READLINE),readline) \ + $(TARGET_NLS_DEPENDENCIES) +SAMBA4_CFLAGS = $(TARGET_CFLAGS) +SAMBA4_LDFLAGS = $(TARGET_LDFLAGS) $(TARGET_NLS_LIBS) +SAMBA4_CONF_ENV = \ + CFLAGS="$(SAMBA4_CFLAGS)" \ + LDFLAGS="$(SAMBA4_LDFLAGS)" \ + XSLTPROC=false \ + WAF_NO_PREFORK=1 + +SAMBA4_PYTHON = PYTHON="$(HOST_DIR)/bin/python3" +ifeq ($(BR2_PACKAGE_PYTHON3),y) +SAMBA4_PYTHON += PYTHON_CONFIG="$(STAGING_DIR)/usr/bin/python3-config" +SAMBA4_DEPENDENCIES += python3 +else +SAMBA4_CONF_OPTS += --disable-python +endif + +ifeq ($(BR2_PACKAGE_LIBTIRPC),y) +SAMBA4_CFLAGS += `$(PKG_CONFIG_HOST_BINARY) --cflags libtirpc` +SAMBA4_LDFLAGS += `$(PKG_CONFIG_HOST_BINARY) --libs libtirpc` +SAMBA4_DEPENDENCIES += libtirpc host-pkgconf +endif + +ifeq ($(BR2_PACKAGE_ACL),y) +SAMBA4_CONF_OPTS += --with-acl-support +SAMBA4_DEPENDENCIES += acl +else +SAMBA4_CONF_OPTS += --without-acl-support +endif + +ifeq ($(BR2_PACKAGE_CUPS),y) +SAMBA4_CONF_ENV += CUPS_CONFIG="$(STAGING_DIR)/usr/bin/cups-config" +SAMBA4_CONF_OPTS += --enable-cups +SAMBA4_DEPENDENCIES += cups +else +SAMBA4_CONF_OPTS += --disable-cups +endif + +ifeq ($(BR2_PACKAGE_DBUS),y) +SAMBA4_DEPENDENCIES += dbus +SAMBA4_SHARED_MODULES += vfs_snapper +else +SAMBA4_SHARED_MODULES += !vfs_snapper +endif + +ifeq ($(BR2_PACKAGE_DBUS)$(BR2_PACKAGE_AVAHI_DAEMON),yy) +SAMBA4_CONF_OPTS += --enable-avahi +SAMBA4_DEPENDENCIES += avahi +else +SAMBA4_CONF_OPTS += --disable-avahi +endif + +ifeq ($(BR2_PACKAGE_GAMIN),y) +SAMBA4_CONF_OPTS += --with-fam +SAMBA4_DEPENDENCIES += gamin +else +SAMBA4_CONF_OPTS += --without-fam +endif + +ifeq ($(BR2_PACKAGE_LIBARCHIVE),y) +SAMBA4_CONF_OPTS += --with-libarchive +SAMBA4_DEPENDENCIES += libarchive +else +SAMBA4_CONF_OPTS += --without-libarchive +endif + +ifeq ($(BR2_PACKAGE_NCURSES),y) +SAMBA4_CONF_ENV += NCURSES_CONFIG="$(STAGING_DIR)/usr/bin/$(NCURSES_CONFIG_SCRIPTS)" +SAMBA4_DEPENDENCIES += ncurses +else +SAMBA4_CONF_OPTS += --without-regedit +endif + +# The ctdb tests (cluster) need bash and take up some space +# They're normally intended for debugging so remove them +define SAMBA4_REMOVE_CTDB_TESTS + rm -rf $(TARGET_DIR)/usr/lib/ctdb-tests + rm -rf $(TARGET_DIR)/usr/share/ctdb-tests + rm -f $(TARGET_DIR)/usr/bin/ctdb_run_*tests +endef +SAMBA4_POST_INSTALL_TARGET_HOOKS += SAMBA4_REMOVE_CTDB_TESTS + +define SAMBA4_CONFIGURE_CMDS + $(INSTALL) -m 0644 package/samba4/samba4-cache.txt $(@D)/cache.txt; + echo 'Checking whether fcntl supports setting/geting hints: $(if $(BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_13),OK,NO)' >>$(@D)/cache.txt; + echo 'Checking uname machine type: $(BR2_ARCH)' >>$(@D)/cache.txt; + (cd $(@D); \ + $(SAMBA4_PYTHON) \ + python_LDFLAGS="" \ + python_LIBDIR="" \ + PERL="$(HOST_DIR)/bin/perl" \ + $(TARGET_CONFIGURE_OPTS) \ + $(SAMBA4_CONF_ENV) \ + ./buildtools/bin/waf configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --with-libiconv=$(STAGING_DIR)/usr \ + --enable-fhs \ + --cross-compile \ + --cross-answers=$(@D)/cache.txt \ + --hostcc=gcc \ + --disable-rpath \ + --disable-rpath-install \ + --disable-iprint \ + --without-pam \ + --without-dmapi \ + --without-gpgme \ + --without-ldb-lmdb \ + --disable-glusterfs \ + --with-cluster-support \ + --bundled-libraries='!asn1_compile,!compile_et' \ + --with-shared-modules=$(subst $(space),$(comma),$(strip $(SAMBA4_SHARED_MODULES))) \ + $(SAMBA4_CONF_OPTS) \ + ) +endef + +define SAMBA4_BUILD_CMDS + $(TARGET_MAKE_ENV) $(SAMBA4_PYTHON) $(MAKE) -C $(@D) +endef + +define SAMBA4_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(SAMBA4_PYTHON) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install +endef + +define SAMBA4_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(SAMBA4_PYTHON) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install +endef + +ifeq ($(BR2_PACKAGE_SAMBA4_AD_DC),y) +# host-python-dnspython and host-python-markdown are not strictly +# needed on the host, but on the target. however, samba's configure +# tests for their availability on the host. +SAMBA4_DEPENDENCIES += \ + jansson \ + host-python-dnspython \ + host-python-markdown \ + python-dnspython \ + python-markdown +else +SAMBA4_CONF_OPTS += --without-ad-dc --without-json +endif + +ifeq ($(BR2_PACKAGE_SAMBA4_ADS),y) +SAMBA4_CONF_OPTS += --with-ads --with-ldap +SAMBA4_DEPENDENCIES += openldap +SAMBA4_SHARED_MODULES += idmap_ad +else +SAMBA4_CONF_OPTS += --without-ads --without-ldap +SAMBA4_SHARED_MODULES += !idmap_ad +endif + +ifeq ($(BR2_PACKAGE_SAMBA4_SMBTORTURE),) +define SAMBA4_REMOVE_SMBTORTURE + rm -f $(TARGET_DIR)/usr/bin/smbtorture +endef +SAMBA4_POST_INSTALL_TARGET_HOOKS += SAMBA4_REMOVE_SMBTORTURE +endif + +define SAMBA4_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/samba4/S91smb \ + $(TARGET_DIR)/etc/init.d/S91smb +endef + +ifeq ($(BR2_INIT_SYSTEMD),y) +SAMBA4_CONF_OPTS += --systemd-install-services +SAMBA4_DEPENDENCIES += systemd +endif + +define SAMBA4_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 $(@D)/packaging/systemd/samba.conf.tmp \ + $(TARGET_DIR)/usr/lib/tmpfiles.d/samba.conf + printf "d /var/log/samba 755 root root\n" >>$(TARGET_DIR)/usr/lib/tmpfiles.d/samba.conf +endef + +$(eval $(generic-package)) diff --git a/package/sane-backends/0001-sane_backend-add-missing-config.h.patch b/package/sane-backends/0001-sane_backend-add-missing-config.h.patch new file mode 100644 index 00000000..8e56b028 --- /dev/null +++ b/package/sane-backends/0001-sane_backend-add-missing-config.h.patch @@ -0,0 +1,49 @@ +From 13aadf79659dd238b618c8be7c1de44960bd5d50 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Fri, 11 Nov 2016 22:20:03 +0100 +Subject: [PATCH] sane_backend: add missing config.h + +We should include config.h from sanei_backend.h in order to use the +correct if/else HAVE_FOO. + +For some reason with Glibc or uClibc there is no problem but with musl +we have the following weird issue: + +In file included from epsonds.h:41:0, + from epsonds-jpeg.c:18: +../include/sane/sanei_backend.h:99:33: error: expected ';', identifier or '(' before 'int' + # define sigset_t int + ^ +../include/sane/sanei_backend.h:99:33: warning: useless type name in empty declaration + +That's because HAVE_SIGPROCMASK is not defined although it's correctly +detected by the configure script. + +$ grep config.log +config.log:#define HAVE_SIGPROCMASK 1 + +So, include config.h to avoid to redefine sigset_t. + +Fixes: +http://autobuild.buildroot.net/results/9f1/9f1f1cb727b5c5407e69172280a3dee880e55cdf + +Signed-off-by: Romain Naour +--- + include/sane/sanei_backend.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/include/sane/sanei_backend.h b/include/sane/sanei_backend.h +index 1b5afe2..2a96532 100644 +--- a/include/sane/sanei_backend.h ++++ b/include/sane/sanei_backend.h +@@ -8,6 +8,7 @@ + * @sa sanei.h sanei_thread.h + */ + ++#include "../include/sane/config.h" + + /* + * Compiler related options +-- +2.5.5 + diff --git a/package/sane-backends/Config.in b/package/sane-backends/Config.in new file mode 100644 index 00000000..48ae9f79 --- /dev/null +++ b/package/sane-backends/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_SANE_BACKENDS + bool "sane-backends" + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS + help + SANE - Scanner Access Now Easy + + http://www.sane-project.org + + Backends are included automatically based on the libraries + that have been selected: libusb, jpeg, tiff, avahi (with + dbus and libglib2), and netsnmp. + +comment "sane-backends needs a toolchain w/ dynamic library" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS diff --git a/package/sane-backends/sane-backends.hash b/package/sane-backends/sane-backends.hash new file mode 100644 index 00000000..09652c99 --- /dev/null +++ b/package/sane-backends/sane-backends.hash @@ -0,0 +1,5 @@ +# From https://gitlab.com/sane-project/backends/tags/RELEASE_1_0_27 +sha256 293747bf37275c424ebb2c833f8588601a60b2f9653945d5a3194875355e36c9 sane-backends-1.0.27.tar.gz + +# Hash for license file +sha256 dcc100d4161cc0b7177545ab6e47216f84857cda3843847c792a25289852dcaa COPYING diff --git a/package/sane-backends/sane-backends.mk b/package/sane-backends/sane-backends.mk new file mode 100644 index 00000000..3c93ceaa --- /dev/null +++ b/package/sane-backends/sane-backends.mk @@ -0,0 +1,74 @@ +################################################################################ +# +# sane-backends +# +################################################################################ + +SANE_BACKENDS_VERSION = 1.0.27 +SANE_BACKENDS_SITE = \ + https://gitlab.com/sane-project/backends/uploads/a3ba9fff29253a94e84074917bff581a +SANE_BACKENDS_CONFIG_SCRIPTS = sane-config +SANE_BACKENDS_LICENSE = GPL-2.0+ +SANE_BACKENDS_LICENSE_FILES = COPYING +SANE_BACKENDS_CPE_ID_VENDOR = sane-backends_project +SANE_BACKENDS_INSTALL_STAGING = YES + +SANE_BACKENDS_CONF_OPTS = \ + $(if $(BR2_TOOLCHAIN_HAS_THREADS),--enable-pthread,--disable-pthread) + +ifeq ($(BR2_INIT_SYSTEMD),y) +SANE_BACKENDS_CONF_OPTS += --with-systemd +SANE_BACKENDS_DEPENDENCIES += systemd +else +SANE_BACKENDS_CONF_OPTS += --without-systemd +endif + +ifeq ($(BR2_PACKAGE_LIBUSB),y) +SANE_BACKENDS_DEPENDENCIES += libusb +SANE_BACKENDS_CONF_OPTS += --with-usb +else +SANE_BACKENDS_CONF_OPTS += --without-usb +endif + +ifeq ($(BR2_PACKAGE_JPEG),y) +SANE_BACKENDS_DEPENDENCIES += jpeg +endif + +ifeq ($(BR2_PACKAGE_TIFF),y) +SANE_BACKENDS_DEPENDENCIES += tiff +endif + +ifeq ($(BR2_PACKAGE_LIBV4L),y) +SANE_BACKENDS_DEPENDENCIES += libv4l +endif + +ifeq ($(BR2_PACKAGE_AVAHI)$(BR2_PACKAGE_DBUS)$(BR2_PACKAGE_LIBGLIB2),yyy) +SANE_BACKENDS_DEPENDENCIES += avahi +SANE_BACKENDS_CONF_OPTS += --enable-avahi +endif + +ifeq ($(BR2_PACKAGE_NETSNMP),y) +SANE_BACKENDS_CONF_ENV += ac_cv_path_SNMP_CONFIG_PATH=$(STAGING_DIR)/usr/bin/net-snmp-config +SANE_BACKENDS_DEPENDENCIES += netsnmp +else +SANE_BACKENDS_CONF_OPTS += --without-snmp +endif + +define SANE_BACKENDS_DISABLE_DOCS + $(SED) 's/ doc//' $(@D)/Makefile +endef + +SANE_BACKENDS_POST_CONFIGURE_HOOKS += SANE_BACKENDS_DISABLE_DOCS + +define SANE_BACKENDS_USERS + saned -1 saned -1 * /etc/sane.d - - Saned User +endef + +define SANE_BACKENDS_INSTALL_INIT_SYSTEMD + $(INSTALL) -m 0644 -D package/sane-backends/saned.socket \ + $(TARGET_DIR)/usr/lib/systemd/system/saned.socket + $(INSTALL) -m 0644 -D package/sane-backends/saned@.service \ + $(TARGET_DIR)/usr/lib/systemd/system/saned@.service +endef + +$(eval $(autotools-package)) diff --git a/package/sane-backends/saned.socket b/package/sane-backends/saned.socket new file mode 100644 index 00000000..1aa19e70 --- /dev/null +++ b/package/sane-backends/saned.socket @@ -0,0 +1,10 @@ +[Unit] +Description=saned incoming socket + +[Socket] +ListenStream=6566 +Accept=yes +MaxConnections=1 + +[Install] +WantedBy=sockets.target diff --git a/package/sane-backends/saned@.service b/package/sane-backends/saned@.service new file mode 100644 index 00000000..1905dbf5 --- /dev/null +++ b/package/sane-backends/saned@.service @@ -0,0 +1,18 @@ +[Unit] +Description=Scanner Service +Requires=saned.socket + +[Service] +ExecStart=/usr/sbin/saned +User=saned +Group=saned +StandardInput=null +StandardOutput=syslog +StandardError=syslog +Environment=SANE_CONFIG_DIR=/etc/sane.d +# If you need to debug your configuration uncomment the next line and +# change it as appropriate to set the desired debug options +# Environment=SANE_DEBUG_DLL=255 SANE_DEBUG_BJNP=5 + +[Install] +Also=saned.socket diff --git a/package/sbc/Config.in b/package/sbc/Config.in new file mode 100644 index 00000000..f1dbc0ec --- /dev/null +++ b/package/sbc/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_SBC + bool "sbc" + select BR2_PACKAGE_LIBSNDFILE + help + An audio codec to connect bluetooth high quality audio + devices like headphones or loudspeakers. + + http://www.bluez.org/ diff --git a/package/sbc/sbc.hash b/package/sbc/sbc.hash new file mode 100644 index 00000000..d703f234 --- /dev/null +++ b/package/sbc/sbc.hash @@ -0,0 +1,6 @@ +# From https://www.kernel.org/pub/linux/bluetooth/sha256sums.asc +sha256 518bf46e6bb3dc808a95e1eabad26fdebe8a099c1e781c27ed7fca6c2f4a54c9 sbc-1.4.tar.xz + +# sha256 locally computed +sha256 b499eddebda05a8859e32b820a64577d91f1de2b52efa2a1575a2cb4000bc259 COPYING +sha256 ec60b993835e2c6b79e6d9226345f4e614e686eb57dc13b6420c15a33a8996e5 COPYING.LIB diff --git a/package/sbc/sbc.mk b/package/sbc/sbc.mk new file mode 100644 index 00000000..73e4aceb --- /dev/null +++ b/package/sbc/sbc.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# sbc +# +################################################################################ + +SBC_VERSION = 1.4 +SBC_SOURCE = sbc-$(SBC_VERSION).tar.xz +SBC_SITE = $(BR2_KERNEL_MIRROR)/linux/bluetooth +SBC_INSTALL_STAGING = YES +SBC_DEPENDENCIES = libsndfile host-pkgconf +SBC_LICENSE = GPL-2.0+ (programs), LGPL-2.1+ (library) +SBC_LICENSE_FILES = COPYING COPYING.LIB + +$(eval $(autotools-package)) diff --git a/package/sconeserver/Config.in b/package/sconeserver/Config.in new file mode 100644 index 00000000..d46ba85f --- /dev/null +++ b/package/sconeserver/Config.in @@ -0,0 +1,88 @@ +menuconfig BR2_PACKAGE_SCONESERVER + bool "sconeserver" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on !BR2_STATIC_LIBS # dlopen() + select BR2_PACKAGE_ZLIB + help + Sconeserver is a modular, object-orientated and extremely + versatile network server framework for GNU/Linux and + UNIX-like platforms. + + http://www.sconemad.com/sconeserver/ + +if BR2_PACKAGE_SCONESERVER + +comment "Sconeserver modules" + +config BR2_PACKAGE_SCONESERVER_EXAMPLES + bool "examples" + help + Example modules for Sconeserver + +config BR2_PACKAGE_SCONESERVER_HTTP_SCONESITE + bool "http::sconesite" + select BR2_PACKAGE_LIBXML2 + help + http::sconesite module for Sconeserver + +config BR2_PACKAGE_SCONESERVER_MYSQL + bool "mysql" + depends on BR2_USE_MMU # mysql + select BR2_PACKAGE_MYSQL + help + MySQL module for Sconeserver + +config BR2_PACKAGE_SCONESERVER_BLUETOOTH + bool "bluetooth" + depends on BR2_USE_WCHAR # bluez5_utils -> libglib2 + depends on BR2_USE_MMU # bluez5_utils -> dbus + depends on BR2_TOOLCHAIN_HAS_THREADS # bluez5_utils -> dbus, libglib2 + depends on !BR2_STATIC_LIBS # bluez5_utils + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4 # bluez5_utils + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # bluez5_utils + select BR2_PACKAGE_BLUEZ5_UTILS + help + Bluetooth module for Sconeserver + +comment "bluetooth support needs a toolchain w/ wchar, threads, dynamic library, headers >= 3.4" + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4 + +config BR2_PACKAGE_SCONESERVER_RSS + bool "rss" + select BR2_PACKAGE_LIBXML2 + help + RSS module for Sconeserver + +config BR2_PACKAGE_SCONESERVER_LOCATION + bool "location" + depends on BR2_USE_MMU # gpsd + depends on BR2_TOOLCHAIN_HAS_THREADS # gpsd + depends on !BR2_STATIC_LIBS # gpsd + select BR2_PACKAGE_GPSD + help + Location module for Sconeserver + +comment "location support needs a toolchain w/ theads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBRARY + +config BR2_PACKAGE_SCONESERVER_MATHS + bool "maths" + select BR2_PACKAGE_MPFR + help + Mathematics module for Sconeserver + +config BR2_PACKAGE_SCONESERVER_TESTBUILDER + bool "testbuilder" + help + Testbuilder module for Sconeserver + +endif # BR2_PACKAGE_SCONESERVER + +comment "sconeserver needs a toolchain with dynamic library, C++, NPTL" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS_NPTL \ + || BR2_STATIC_LIBS diff --git a/package/sconeserver/sconeserver.hash b/package/sconeserver/sconeserver.hash new file mode 100644 index 00000000..e1ff4486 --- /dev/null +++ b/package/sconeserver/sconeserver.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 dfdbbcd29c089eeb341dd3bbd434cca97fefaa97f94c91525e5953d3ab0a2d9a sconeserver-6b932d7d8dbb700b830205e7111e469cefff490c.tar.gz +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING diff --git a/package/sconeserver/sconeserver.mk b/package/sconeserver/sconeserver.mk new file mode 100644 index 00000000..17407c29 --- /dev/null +++ b/package/sconeserver/sconeserver.mk @@ -0,0 +1,98 @@ +################################################################################ +# +# sconeserver +# +################################################################################ + +SCONESERVER_VERSION = 6b932d7d8dbb700b830205e7111e469cefff490c +SCONESERVER_SITE = $(call github,sconemad,sconeserver,$(SCONESERVER_VERSION)) +SCONESERVER_LICENSE = GPL-2.0+ +SCONESERVER_LICENSE_FILES = COPYING +# fetching from Git, we need to generate the configure script +SCONESERVER_AUTORECONF = YES +SCONESERVER_DEPENDENCIES = \ + host-pkgconf \ + $(if $(BR2_PACKAGE_PCRE),pcre) \ + zlib +# disable image as it fails to build with ImageMagick +# disable markdown module because its git submodule cmark +# https://github.com/sconemad/sconeserver/tree/master/markdown +# has no cross-compile support provided by the sconeserver build system +SCONESERVER_CONF_OPTS += \ + --with-ip \ + --with-local \ + --with-ip6 \ + --without-image \ + --without-markdown + +# Sconeserver configure script fails to find the libxml2 headers. +ifeq ($(BR2_PACKAGE_LIBXML2),y) +SCONESERVER_CONF_OPTS += \ + --with-xml2-config="$(STAGING_DIR)/usr/bin/xml2-config" +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +SCONESERVER_DEPENDENCIES += openssl +SCONESERVER_CONF_OPTS += --with-ssl +else +SCONESERVER_CONF_OPTS += --without-ssl +endif + +ifeq ($(BR2_PACKAGE_SCONESERVER_EXAMPLES),y) +SCONESERVER_CONF_OPTS += --with-examples +else +SCONESERVER_CONF_OPTS += --without-examples +endif + +ifeq ($(BR2_PACKAGE_SCONESERVER_HTTP_SCONESITE),y) +SCONESERVER_DEPENDENCIES += libxml2 +SCONESERVER_CONF_OPTS += --with-sconesite +else +SCONESERVER_CONF_OPTS += --without-sconesite +endif + +ifeq ($(BR2_PACKAGE_SCONESERVER_MYSQL),y) +SCONESERVER_DEPENDENCIES += mysql +SCONESERVER_CONF_OPTS += \ + --with-mysql \ + --with-mysql_config="$(STAGING_DIR)/usr/bin/mysql_config" \ + LDFLAGS="$(TARGET_LDFLAGS) -L$(STAGING_DIR)/usr/lib/mysql" +else +SCONESERVER_CONF_OPTS += --without-mysql +endif + +ifeq ($(BR2_PACKAGE_SCONESERVER_BLUETOOTH),y) +SCONESERVER_DEPENDENCIES += bluez5_utils +SCONESERVER_CONF_OPTS += --with-bluetooth +else +SCONESERVER_CONF_OPTS += --without-bluetooth +endif + +ifeq ($(BR2_PACKAGE_SCONESERVER_RSS),y) +SCONESERVER_DEPENDENCIES += libxml2 +SCONESERVER_CONF_OPTS += --with-rss +else +SCONESERVER_CONF_OPTS += --without-rss +endif + +ifeq ($(BR2_PACKAGE_SCONESERVER_LOCATION),y) +SCONESERVER_DEPENDENCIES += gpsd +SCONESERVER_CONF_OPTS += --with-location +else +SCONESERVER_CONF_OPTS += --without-location +endif + +ifeq ($(BR2_PACKAGE_SCONESERVER_MATHS),y) +SCONESERVER_DEPENDENCIES += mpfr +SCONESERVER_CONF_OPTS += --with-maths +else +SCONESERVER_CONF_OPTS += --without-maths +endif + +ifeq ($(BR2_PACKAGE_SCONESERVER_TESTBUILDER),y) +SCONESERVER_CONF_OPTS += --with-testbuilder +else +SCONESERVER_CONF_OPTS += --without-testbuilder +endif + +$(eval $(autotools-package)) diff --git a/package/scons/scons.hash b/package/scons/scons.hash new file mode 100644 index 00000000..a72fbaee --- /dev/null +++ b/package/scons/scons.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 7801f3f62f654528e272df780be10c0e9337e897650b62ddcee9f39fde13f8fb scons-3.1.2.tar.gz +sha256 72ed889165fb28378cadac14552be4a959f1ebab6b148abb5dd2b49712c3c6f6 LICENSE.txt diff --git a/package/scons/scons.mk b/package/scons/scons.mk new file mode 100644 index 00000000..da2ccceb --- /dev/null +++ b/package/scons/scons.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# scons +# +################################################################################ + +SCONS_VERSION = 3.1.2 +SCONS_SITE = http://downloads.sourceforge.net/project/scons/scons/$(SCONS_VERSION) +SCONS_LICENSE = MIT +SCONS_LICENSE_FILES = LICENSE.txt +SCONS_SETUP_TYPE = distutils + +HOST_SCONS_INSTALL_OPTS = \ + --install-lib=$(HOST_DIR)/lib/scons-$(SCONS_VERSION) + +$(eval $(host-python-package)) + +# variables used by other packages +SCONS = $(HOST_DIR)/bin/scons $(if $(QUIET),-s) diff --git a/package/screen/0001-no-memcpy-fallback.patch b/package/screen/0001-no-memcpy-fallback.patch new file mode 100644 index 00000000..21379071 --- /dev/null +++ b/package/screen/0001-no-memcpy-fallback.patch @@ -0,0 +1,126 @@ +From: Maarten ter Huurne +Date: Sat, 13 Sep 2014 11:37:59 +0200 +Subject: Do not use memcpy as an alternative for bcopy/memmove + +The configure script runs a small test program to check whether +memcpy can handle overlapping memory areas. However, it is not valid +to conclude that if a single case of overlapping memory is handled +correctly, all cases will be handled correctly. + +Since screen already has its own bcopy implementation as a fallback +for the case that bcopy and memmove are unusable, removing the memcpy +option should not break any systems. + +Signed-off-by: Maarten ter Huurne +[Ricardo: rebase on top of 4.3.1] +Signed-off-by: Ricardo Martincoski +[Bernd: rebase on top of 4.7.0] +Signed-off-by: Bernd Kuhls +--- + acconfig.h | 3 +-- + configure.ac | 18 +----------------- + os.h | 8 ++------ + osdef.h.in | 10 +--------- + 4 files changed, 5 insertions(+), 34 deletions(-) + +diff --git a/acconfig.h b/acconfig.h +index 2e46985..9b0b9d4 100644 +--- a/acconfig.h ++++ b/acconfig.h +@@ -476,7 +476,7 @@ + #undef GETTTYENT + + /* +- * Define USEBCOPY if the bcopy/memcpy from your system's C library ++ * Define USEBCOPY if the bcopy from your system's C library + * supports the overlapping of source and destination blocks. When + * undefined, screen uses its own (probably slower) version of bcopy(). + * +@@ -487,7 +487,6 @@ + * Their memove fails the test in the configure script. Sigh. (Juergen) + */ + #undef USEBCOPY +-#undef USEMEMCPY + #undef USEMEMMOVE + + /* +diff --git a/configure.ac b/configure.ac +index 27690a6..b8e3bec 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1145,7 +1145,7 @@ AC_TRY_LINK(,[getttyent();], AC_DEFINE(GETTTYENT)) + AC_CHECKING(fdwalk) + AC_TRY_LINK([#include ], [fdwalk(NULL, NULL);],AC_DEFINE(HAVE_FDWALK)) + +-AC_CHECKING(whether memcpy/memmove/bcopy handles overlapping arguments) ++AC_CHECKING(whether memmove/bcopy handles overlapping arguments) + AC_TRY_RUN([ + main() { + char buf[10]; +@@ -1175,22 +1175,6 @@ main() { + exit(0); /* libc version works properly. */ + }], AC_DEFINE(USEMEMMOVE)) + +- +-AC_TRY_RUN([ +-#define bcopy(s,d,l) memcpy(d,s,l) +-main() { +- char buf[10]; +- strcpy(buf, "abcdefghi"); +- bcopy(buf, buf + 2, 3); +- if (strncmp(buf, "ababcf", 6)) +- exit(1); +- strcpy(buf, "abcdefghi"); +- bcopy(buf + 2, buf, 3); +- if (strncmp(buf, "cdedef", 6)) +- exit(1); +- exit(0); /* libc version works properly. */ +-}], AC_DEFINE(USEMEMCPY),,:) +- + AC_SYS_LONG_FILE_NAMES + + AC_MSG_CHECKING(for vsprintf) +diff --git a/os.h b/os.h +index e827ac9..0b41fb9 100644 +--- a/os.h ++++ b/os.h +@@ -142,12 +142,8 @@ extern int errno; + # ifdef USEMEMMOVE + # define bcopy(s,d,len) memmove(d,s,len) + # else +-# ifdef USEMEMCPY +-# define bcopy(s,d,len) memcpy(d,s,len) +-# else +-# define NEED_OWN_BCOPY +-# define bcopy xbcopy +-# endif ++# define NEED_OWN_BCOPY ++# define bcopy xbcopy + # endif + #endif + +diff --git a/osdef.h.in b/osdef.h.in +index 8687b60..e4057a0 100644 +--- a/osdef.h.in ++++ b/osdef.h.in +@@ -58,16 +58,8 @@ extern int bcmp __P((char *, char *, int)); + extern int killpg __P((int, int)); + #endif + +-#ifndef USEBCOPY +-# ifdef USEMEMCPY +-extern void memcpy __P((char *, char *, int)); +-# else +-# ifdef USEMEMMOVE ++#if defined(USEMEMMOVE) && !defined(USEBCOPY) + extern void memmove __P((char *, char *, int)); +-# else +-extern void bcopy __P((char *, char *, int)); +-# endif +-# endif + #else + extern void bcopy __P((char *, char *, int)); + #endif +-- +1.8.4.5 + diff --git a/package/screen/0002-install-no-backup-binary.patch b/package/screen/0002-install-no-backup-binary.patch new file mode 100644 index 00000000..7842662b --- /dev/null +++ b/package/screen/0002-install-no-backup-binary.patch @@ -0,0 +1,41 @@ +From: Maarten ter Huurne +Date: Sun, 14 Sep 2014 23:58:34 +0200 +Subject: Do not create backup of old installed binary + +This is a rather unusual feature that packagers will not expect. + +Signed-off-by: Maarten ter Huurne +[baruch: update for 4.6.2] +Signed-off-by: Baruch Siach +--- + Makefile.in | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/Makefile.in b/Makefile.in +index 187a69b..65549e9 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -83,12 +83,9 @@ screen: $(OFILES) + $(OPTIONS) $(CFLAGS) $< + + install_bin: .version screen installdirs +- -if [ -f $(DESTDIR)$(bindir)/$(SCREEN) ] && [ ! -f $(DESTDIR)$(bindir)/$(SCREEN).old ]; \ +- then mv $(DESTDIR)$(bindir)/$(SCREEN) $(DESTDIR)$(bindir)/$(SCREEN).old; fi + $(INSTALL_PROGRAM) screen $(DESTDIR)$(bindir)/$(SCREEN) + -chown root $(DESTDIR)$(bindir)/$(SCREEN) && chmod 4755 $(DESTDIR)$(bindir)/$(SCREEN) + # This doesn't work if $(bindir)/screen is a symlink +- -if [ -f $(DESTDIR)$(bindir)/screen ] && [ ! -f $(DESTDIR)$(bindir)/screen.old ]; then mv $(DESTDIR)$(bindir)/screen $(DESTDIR)$(bindir)/screen.old; fi + rm -f $(DESTDIR)$(bindir)/screen + (cd $(DESTDIR)$(bindir) && ln -f -s $(SCREEN) screen) + cp $(srcdir)/utf8encodings/?? $(DESTDIR)$(SCREENENCODINGS) +@@ -113,7 +110,6 @@ installdirs: + uninstall: .version + rm -f $(DESTDIR)$(bindir)/$(SCREEN) + rm -f $(DESTDIR)$(bindir)/screen +- -mv $(DESTDIR)$(bindir)/screen.old $(DESTDIR)$(bindir)/screen + rm -f $(DESTDIR)$(ETCSCREENRC) + cd doc; $(MAKE) uninstall + +-- +1.8.4.5 + diff --git a/package/screen/0003-install-always-chmod.patch b/package/screen/0003-install-always-chmod.patch new file mode 100644 index 00000000..0aa7690b --- /dev/null +++ b/package/screen/0003-install-always-chmod.patch @@ -0,0 +1,29 @@ +From: Maarten ter Huurne +Date: Mon, 15 Sep 2014 00:03:05 +0200 +Subject: Change binary permission flags even if chown fails + +Typically when creating a package, the build is not run as root, so +the chown will fail. But the chmod can still be done. + +Signed-off-by: Maarten ter Huurne +--- + Makefile.in | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/Makefile.in b/Makefile.in +index 65549e9..3c12fdb 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -84,7 +84,8 @@ screen: $(OFILES) + + install_bin: .version screen + $(INSTALL_PROGRAM) screen $(DESTDIR)$(bindir)/$(SCREEN) +- -chown root $(DESTDIR)$(bindir)/$(SCREEN) && chmod 4755 $(DESTDIR)$(bindir)/$(SCREEN) ++ -chown root $(DESTDIR)$(bindir)/$(SCREEN) ++ -chmod 4755 $(DESTDIR)$(bindir)/$(SCREEN) + # This doesn't work if $(bindir)/screen is a symlink + rm -f $(DESTDIR)$(bindir)/screen + (cd $(DESTDIR)$(bindir) && ln -f -s $(SCREEN) screen) +-- +1.8.4.5 + diff --git a/package/screen/0004-install-nonversioned-binary.patch b/package/screen/0004-install-nonversioned-binary.patch new file mode 100644 index 00000000..ecbbd651 --- /dev/null +++ b/package/screen/0004-install-nonversioned-binary.patch @@ -0,0 +1,31 @@ +From: Maarten ter Huurne +Date: Mon, 15 Sep 2014 00:06:20 +0200 +Subject: Support overriding SCREEN to get a non-versioned binary + +If a packager runs "make install SCREEN=screen", do not create +"screen" as a symlink to itself. + +Signed-off-by: Maarten ter Huurne +--- + Makefile.in | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/Makefile.in b/Makefile.in +index 3c12fdb..860f351 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -86,9 +86,11 @@ install_bin: .version screen + $(INSTALL_PROGRAM) screen $(DESTDIR)$(bindir)/$(SCREEN) + -chown root $(DESTDIR)$(bindir)/$(SCREEN) + -chmod 4755 $(DESTDIR)$(bindir)/$(SCREEN) ++ifneq (${SCREEN},screen) + # This doesn't work if $(bindir)/screen is a symlink + rm -f $(DESTDIR)$(bindir)/screen + (cd $(DESTDIR)$(bindir) && ln -f -s $(SCREEN) screen) ++endif + cp $(srcdir)/utf8encodings/?? $(DESTDIR)$(SCREENENCODINGS) + + ############################################################################### +-- +1.8.4.5 + diff --git a/package/screen/0005-rename-sched_h.patch b/package/screen/0005-rename-sched_h.patch new file mode 100644 index 00000000..9b29b76e --- /dev/null +++ b/package/screen/0005-rename-sched_h.patch @@ -0,0 +1,142 @@ +From: Maarten ter Huurne +Date: Mon, 15 Sep 2014 00:24:41 +0200 +Subject: Renamed sched.h to eventqueue.h + +There is a system header that got shadowed by "sched.h". +While Screen itself doesn't include , other system headers +might include it indirectly. This broke the build when using uClibc +with pthread support. + +Signed-off-by: Maarten ter Huurne +--- + eventqueue.h | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ + sched.h | 48 ------------------------------------------------ + screen.h | 2 +- + 3 files changed, 49 insertions(+), 49 deletions(-) + create mode 100644 eventqueue.h + delete mode 100644 sched.h + +diff --git a/eventqueue.h b/eventqueue.h +new file mode 100644 +index 0000000..fdc3fc4 +--- /dev/null ++++ b/eventqueue.h +@@ -0,0 +1,48 @@ ++/* Copyright (c) 2008, 2009 ++ * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) ++ * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) ++ * Micah Cowan (micah@cowan.name) ++ * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) ++ * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 ++ * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) ++ * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) ++ * Copyright (c) 1987 Oliver Laumann ++ * ++ * 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 3, 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 (see the file COPYING); if not, see ++ * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., ++ * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA ++ * ++ **************************************************************** ++ * $Id$ GNU ++ */ ++ ++struct event ++{ ++ struct event *next; ++ void (*handler) __P((struct event *, char *)); ++ char *data; ++ int fd; ++ int type; ++ int pri; ++ struct timeval timeout; ++ int queued; /* in evs queue */ ++ int active; /* in fdset */ ++ int *condpos; /* only active if condpos - condneg > 0 */ ++ int *condneg; ++}; ++ ++#define EV_TIMEOUT 0 ++#define EV_READ 1 ++#define EV_WRITE 2 ++#define EV_ALWAYS 3 +diff --git a/sched.h b/sched.h +deleted file mode 100644 +index fdc3fc4..0000000 +--- a/sched.h ++++ /dev/null +@@ -1,48 +0,0 @@ +-/* Copyright (c) 2008, 2009 +- * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) +- * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) +- * Micah Cowan (micah@cowan.name) +- * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) +- * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 +- * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) +- * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) +- * Copyright (c) 1987 Oliver Laumann +- * +- * 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 3, 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 (see the file COPYING); if not, see +- * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., +- * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +- * +- **************************************************************** +- * $Id$ GNU +- */ +- +-struct event +-{ +- struct event *next; +- void (*handler) __P((struct event *, char *)); +- char *data; +- int fd; +- int type; +- int pri; +- struct timeval timeout; +- int queued; /* in evs queue */ +- int active; /* in fdset */ +- int *condpos; /* only active if condpos - condneg > 0 */ +- int *condneg; +-}; +- +-#define EV_TIMEOUT 0 +-#define EV_READ 1 +-#define EV_WRITE 2 +-#define EV_ALWAYS 3 +diff --git a/screen.h b/screen.h +index 603ca3f..34238c8 100644 +--- a/screen.h ++++ b/screen.h +@@ -43,7 +43,7 @@ + #include "osdef.h" + + #include "ansi.h" +-#include "sched.h" ++#include "eventqueue.h" + #include "acls.h" + #include "comm.h" + #include "layer.h" +-- +1.8.4.5 + diff --git a/package/screen/0006-comm-h-now-depends-on-term-h.patch b/package/screen/0006-comm-h-now-depends-on-term-h.patch new file mode 100644 index 00000000..6ff6f3da --- /dev/null +++ b/package/screen/0006-comm-h-now-depends-on-term-h.patch @@ -0,0 +1,28 @@ +From 39c5f1c76f1fcef4b5958bf828a63f53426b6984 Mon Sep 17 00:00:00 2001 +From: Mike Gerwitz +Date: Tue, 24 Dec 2013 22:16:31 -0500 +Subject: comm.h now depends on term.h + +Signed-off-by: Fabrice Fontaine +[Patch retrieved and updated from: +http://git.savannah.gnu.org/cgit/screen.git/commit/?id=39c5f1c] +--- + src/Makefile.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile.in b/Makefile.in +index e791e79..d4f7c0b 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -113,7 +113,7 @@ term.h: term.c term.sh + + kmapdef.c: term.h + +-comm.h: comm.c comm.sh config.h ++comm.h: comm.c comm.sh config.h term.h + AWK=$(AWK) CC="$(CC) $(CFLAGS)" srcdir=${srcdir} sh $(srcdir)/comm.sh + + docs: +-- +cgit v1.0-41-gc330 + diff --git a/package/screen/0007-comm.h-needed-for-list_-display-generic-.o.patch b/package/screen/0007-comm.h-needed-for-list_-display-generic-.o.patch new file mode 100644 index 00000000..f406a1af --- /dev/null +++ b/package/screen/0007-comm.h-needed-for-list_-display-generic-.o.patch @@ -0,0 +1,35 @@ +From b719314d201a3e9e1e57c65746a468c47bfc847f Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Wed, 3 Oct 2018 22:29:32 +0200 +Subject: [PATCH] comm.h needed for list_{display,generic}.o + +comm.h is needed to build list_display.o and list_generic.o otherwise +parallel builds will sometimes fail + +Fixes: + - http://autobuild.buildroot.org/results/43105f14857dbe72d8878fc7b3db67f7bdca93cc + - http://autobuild.buildroot.org/results/47f4ecbec1355285633df287fc9c4e7cccde9378 + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://savannah.gnu.org/bugs/index.php?54776] +--- + Makefile.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Makefile.in b/Makefile.in +index af5938b..e6d5247 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -265,7 +265,7 @@ braille.h + viewport.o: layout.h viewport.h canvas.h viewport.c config.h screen.h os.h osdef.h ansi.h acls.h \ + comm.h layer.h term.h image.h display.h window.h extern.h \ + braille.h +-list_generic.o: list_generic.h list_generic.c layer.h screen.h osdef.h +-list_display.o: list_generic.h list_display.c layer.h screen.h osdef.h ++list_generic.o: list_generic.h list_generic.c layer.h screen.h osdef.h comm.h ++list_display.o: list_generic.h list_display.c layer.h screen.h osdef.h comm.h + list_window.o: list_generic.h list_window.c window.h layer.h screen.h osdef.h comm.h + +-- +2.17.1 + diff --git a/package/screen/0008_CVE-2021-26937.patch b/package/screen/0008_CVE-2021-26937.patch new file mode 100644 index 00000000..df7efa02 --- /dev/null +++ b/package/screen/0008_CVE-2021-26937.patch @@ -0,0 +1,68 @@ +Description: [CVE-2021-26937] Fix out of bounds array access +Author: Michael Schröder +Bug-Debian: https://bugs.debian.org/982435 +Bug: https://savannah.gnu.org/bugs/?60030 +Bug: https://lists.gnu.org/archive/html/screen-devel/2021-02/msg00000.html +Bug-OSS-Security: https://www.openwall.com/lists/oss-security/2021/02/09/3 +Origin: https://lists.gnu.org/archive/html/screen-devel/2021-02/msg00010.html + +Downloaded from Debian: +https://sources.debian.org/data/main/s/screen/4.8.0-5/debian/patches/99_CVE-2021-26937.patch + +Signed-off-by: Peter Korsgaard +--- a/encoding.c ++++ b/encoding.c +@@ -43,7 +43,7 @@ + # ifdef UTF8 + static int recode_char __P((int, int, int)); + static int recode_char_to_encoding __P((int, int)); +-static void comb_tofront __P((int, int)); ++static void comb_tofront __P((int)); + # ifdef DW_CHARS + static int recode_char_dw __P((int, int *, int, int)); + static int recode_char_dw_to_encoding __P((int, int *, int)); +@@ -1263,6 +1263,8 @@ + {0x30000, 0x3FFFD}, + }; + ++ if (c >= 0xdf00 && c <= 0xdfff) ++ return 1; /* dw combining sequence */ + return ((bisearch(c, wide, sizeof(wide) / sizeof(struct interval) - 1)) || + (cjkwidth && + bisearch(c, ambiguous, +@@ -1330,11 +1332,12 @@ + } + + static void +-comb_tofront(root, i) +-int root, i; ++comb_tofront(i) ++int i; + { + for (;;) + { ++ int root = i >= 0x700 ? 0x801 : 0x800; + debug1("bring to front: %x\n", i); + combchars[combchars[i]->prev]->next = combchars[i]->next; + combchars[combchars[i]->next]->prev = combchars[i]->prev; +@@ -1396,9 +1399,9 @@ + { + /* full, recycle old entry */ + if (c1 >= 0xd800 && c1 < 0xe000) +- comb_tofront(root, c1 - 0xd800); ++ comb_tofront(c1 - 0xd800); + i = combchars[root]->prev; +- if (c1 == i + 0xd800) ++ if (i == 0x800 || i == 0x801 || c1 == i + 0xd800) + { + /* completely full, can't recycle */ + debug("utf8_handle_comp: completely full!\n"); +@@ -1422,7 +1425,7 @@ + mc->font = (i >> 8) + 0xd8; + mc->fontx = 0; + debug3("combinig char %x %x -> %x\n", c1, c, i + 0xd800); +- comb_tofront(root, i); ++ comb_tofront(i); + } + + #else /* !UTF8 */ diff --git a/package/screen/Config.in b/package/screen/Config.in new file mode 100644 index 00000000..ee4c04ca --- /dev/null +++ b/package/screen/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_SCREEN + bool "screen" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_NCURSES + help + Screen is a full-screen window manager that multiplexes a + physical terminal between several processes, typically + interactive shells. Each virtual terminal provides the + functions of the DEC VT100 terminal and, in addition, + several control functions from the ANSI X3.64 (ISO 6429) and + ISO 2022 standards (e.g., insert/delete line and support for + multiple character sets). + + http://www.gnu.org/software/screen/ diff --git a/package/screen/screen.hash b/package/screen/screen.hash new file mode 100644 index 00000000..ca74ba89 --- /dev/null +++ b/package/screen/screen.hash @@ -0,0 +1,5 @@ +# Locally calculated after checking pgp signature +# https://ftp.gnu.org/gnu/screen/screen-4.8.0.tar.gz.sig +sha256 6e11b13d8489925fde25dfb0935bf6ed71f9eb47eff233a181e078fde5655aa1 screen-4.8.0.tar.gz +# Locally calculated +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/screen/screen.mk b/package/screen/screen.mk new file mode 100644 index 00000000..f75f92cb --- /dev/null +++ b/package/screen/screen.mk @@ -0,0 +1,41 @@ +################################################################################ +# +# screen +# +################################################################################ + +SCREEN_VERSION = 4.8.0 +SCREEN_SITE = $(BR2_GNU_MIRROR)/screen +SCREEN_LICENSE = GPL-3.0+ +SCREEN_LICENSE_FILES = COPYING +SCREEN_CPE_ID_VENDOR = gnu +SCREEN_DEPENDENCIES = ncurses +SCREEN_AUTORECONF = YES +SCREEN_CONF_ENV = CFLAGS="$(TARGET_CFLAGS)" +SCREEN_CONF_OPTS = --enable-colors256 +SCREEN_INSTALL_TARGET_OPTS = DESTDIR=$(TARGET_DIR) SCREEN=screen install_bin + +# 0008_CVE-2021-26937.patch +SCREEN_IGNORE_CVES += CVE-2021-26937 + +ifeq ($(BR2_PACKAGE_LINUX_PAM),y) +SCREEN_DEPENDENCIES += linux-pam +SCREEN_CONF_OPTS += --enable-pam +else +SCREEN_CONF_OPTS += --disable-pam +endif + +define SCREEN_INSTALL_SCREENRC + $(INSTALL) -m 0755 -D $(@D)/etc/screenrc $(TARGET_DIR)/etc/screenrc +endef +SCREEN_POST_INSTALL_TARGET_HOOKS += SCREEN_INSTALL_SCREENRC + +# Add /usr/bin/screen to /etc/shells otherwise some login tools like dropbear +# can reject the user connection. See man shells. +define SCREEN_ADD_SCREEN_TO_SHELLS + grep -qsE '^/usr/bin/screen$$' $(TARGET_DIR)/etc/shells \ + || echo "/usr/bin/screen" >> $(TARGET_DIR)/etc/shells +endef +SCREEN_TARGET_FINALIZE_HOOKS += SCREEN_ADD_SCREEN_TO_SHELLS + +$(eval $(autotools-package)) diff --git a/package/screenfetch/Config.in b/package/screenfetch/Config.in new file mode 100644 index 00000000..c0e7100f --- /dev/null +++ b/package/screenfetch/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_SCREENFETCH + bool "screenfetch" + depends on BR2_USE_MMU # bash + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS # bash + select BR2_PACKAGE_BASH # runtime dependency + help + screenFetch is a bash script to display distro info. + + https://github.com/KittyKatt/screenFetch diff --git a/package/screenfetch/screenfetch.hash b/package/screenfetch/screenfetch.hash new file mode 100644 index 00000000..4f16c616 --- /dev/null +++ b/package/screenfetch/screenfetch.hash @@ -0,0 +1,2 @@ +sha256 aa97dcd2a8576ae18de6c16c19744aae1573a3da7541af4b98a91930a30a3178 screenfetch-3.9.1.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/screenfetch/screenfetch.mk b/package/screenfetch/screenfetch.mk new file mode 100644 index 00000000..d1315d24 --- /dev/null +++ b/package/screenfetch/screenfetch.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# screenfetch +# +################################################################################ + +SCREENFETCH_VERSION = 3.9.1 +SCREENFETCH_SITE = $(call github,KittyKatt,screenFetch,v$(SCREENFETCH_VERSION)) +SCREENFETCH_LICENSE = GPL-3.0+ +SCREENFETCH_LICENSE_FILES = COPYING + +define SCREENFETCH_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/screenfetch-dev \ + $(TARGET_DIR)/usr/bin/screenfetch +endef + +$(eval $(generic-package)) diff --git a/package/scrub/0001-configure-ac-make-sure-m4-macros-are-included-in-the-build.patch b/package/scrub/0001-configure-ac-make-sure-m4-macros-are-included-in-the-build.patch new file mode 100644 index 00000000..d8729b4a --- /dev/null +++ b/package/scrub/0001-configure-ac-make-sure-m4-macros-are-included-in-the-build.patch @@ -0,0 +1,45 @@ +From 11d30916dd9c11a26c7c8a0f6db9e6ebca301594 Mon Sep 17 00:00:00 2001 +From: Samuel Martin +Date: Mon, 18 Jan 2016 21:45:23 +0100 +Subject: [PATCH] configure.ac: make sure m4 macros are included in the build + +This change prevents the following error to occur when calling +autoreconf: + + >>> scrub 2.6.1 Autoreconfiguring + cd /work/build/scrub/build/scrub-2.6.1/ && PATH="/work/build/scrub/host/bin:/work/build/scrub/host/sbin:/work/build/scrub/host/usr/bin:/work/build/scrub/host/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/sbin:/usr/sbin" AR="/usr/bin/ar" AS="/usr/bin/as" LD="/usr/bin/ld" NM="/usr/bin/nm" CC="/usr/bin/gcc" GCC="/usr/bin/gcc" CXX="/usr/bin/g++" CPP="/usr/bin/cpp" OBJCOPY="/usr/bin/objcopy" RANLIB="/usr/bin/ranlib" CPPFLAGS="-I/work/build/scrub/host/usr/include" CFLAGS="-O2 -I/work/build/scrub/host/usr/include" CXXFLAGS="-O2 -I/work/build/scrub/host/usr/include" LDFLAGS="-L/work/build/scrub/host/lib -L/work/build/scrub/host/usr/lib -Wl,-rpath,/work/build/scrub/host/usr/lib" PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 PKG_CONFIG_ALLOW_SYSTEM_LIBS=1 PKG_CONFIG="/work/build/scrub/host/usr/bin/pkg-config" PKG_CONFIG_SYSROOT_DIR="/" PKG_CONFIG_LIBDIR="/work/build/scrub/host/usr/lib/pkgconfig:/work/build/scrub/host/usr/share/pkgconfig" INTLTOOL_PERL=/usr/bin/perl ACLOCAL="/work/build/scrub/host/usr/bin/aclocal -I /work/build/scrub/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/share/aclocal" AUTOCONF="/work/build/scrub/host/usr/bin/autoconf" AUTOHEADER="/work/build/scrub/host/usr/bin/autoheader" AUTOMAKE="/work/build/scrub/host/usr/bin/automake" AUTOPOINT=/bin/true /work/build/scrub/host/usr/bin/autoreconf -f -i -I "/work/build/scrub/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/share/aclocal" -I "/work/build/scrub/host/usr/share/aclocal" + libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, 'config'. + libtoolize: copying file 'config/ltmain.sh' + libtoolize: Consider adding 'AC_CONFIG_MACRO_DIRS([m4])' to configure.ac, + libtoolize: and rerunning libtoolize and aclocal. + libtoolize: Consider adding '-I m4' to ACLOCAL_AMFLAGS in Makefile.am. + configure.ac:10: error possibly undefined macro: X_AC_META + If this token and others are legitimate, please use m4_pattern_allow. + See the Autoconf documentation. + configure.ac:11: error possibly undefined macro: X_AC_EXPAND_INSTALL_DIRS + configure.ac:51: error possibly undefined macro: AC_PKGCONFIG + configure.ac:70: error possibly undefined macro: X_AC_CHECK_PTHREADS + autoreconf: /work/build/scrub/host/usr/bin/autoconf failed with exit status: 1 + package/pkg-generic.mk:185: recipe for target '/work/build/scrub/build/scrub-2.6.1/.stamp_configured' failed + make: *** [/work/build/scrub/build/scrub-2.6.1/.stamp_configured] Error 1 + make: Leaving directory '/work/repos/buildroot' + +Signed-off-by: Samuel Martin +[Upstream commit: https://github.com/chaos/scrub/commit/11d30916dd9c11a26c7c8a0f6db9e6ebca301594] +Signed-off-by: Thomas Petazzoni +--- + configure.ac | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/configure.ac b/configure.ac +index 3d71289..07eaf33 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -7,6 +7,7 @@ AC_INIT(m4_esyscmd([awk '/Name:/ {printf "%s",$2; exit}' META]), + AC_CONFIG_AUX_DIR([config]) + AC_CONFIG_SRCDIR([NEWS]) + AC_CANONICAL_SYSTEM ++AC_CONFIG_MACRO_DIR([config]) + X_AC_META + X_AC_EXPAND_INSTALL_DIRS + diff --git a/package/scrub/Config.in b/package/scrub/Config.in new file mode 100644 index 00000000..84bcc296 --- /dev/null +++ b/package/scrub/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_SCRUB + bool "scrub" + help + Scrub iteratively writes patterns on files or disk devices + to make retrieving the data more difficult. + + https://github.com/chaos/scrub/ diff --git a/package/scrub/scrub.hash b/package/scrub/scrub.hash new file mode 100644 index 00000000..4cb8189c --- /dev/null +++ b/package/scrub/scrub.hash @@ -0,0 +1,5 @@ +# Locally computed +sha256 838b061b2e1932b342fb9695c5579cdff5d2d72506cb41d6d8032eba18aed969 scrub-2.6.1.tar.gz +# License files, locally calculated +sha256 204d8eff92f95aac4df6c8122bc1505f468f3a901e5a4cc08940e0ede1938994 COPYING +sha256 f76abbfb80cde1036cb553cdecb08bb846a48e33c91ef56c0f494172fd407f33 DISCLAIMER diff --git a/package/scrub/scrub.mk b/package/scrub/scrub.mk new file mode 100644 index 00000000..ace19d5b --- /dev/null +++ b/package/scrub/scrub.mk @@ -0,0 +1,16 @@ +################################################################################ +# +# scrub +# +################################################################################ + +SCRUB_VERSION = 2.6.1 +SCRUB_SITE = $(call github,chaos,scrub,$(SCRUB_VERSION)) +SCRUB_LICENSE = GPL-2.0+ +SCRUB_LICENSE_FILES = COPYING DISCLAIMER + +# Fetching from the git repo, no configure/Makefile generated, and patching +# configure.ac +SCRUB_AUTORECONF = YES + +$(eval $(autotools-package)) diff --git a/package/scrypt/Config.in b/package/scrypt/Config.in new file mode 100644 index 00000000..e6d1ac1a --- /dev/null +++ b/package/scrypt/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_SCRYPT + bool "scrypt" + select BR2_PACKAGE_OPENSSL + help + A password-based key derivation function specifically + designed to make it costly to perform large-scale custom + hardware attacks by requiring large amounts of memory. + + http://www.tarsnap.com/scrypt.html diff --git a/package/scrypt/scrypt.hash b/package/scrypt/scrypt.hash new file mode 100644 index 00000000..4004b897 --- /dev/null +++ b/package/scrypt/scrypt.hash @@ -0,0 +1,4 @@ +# From http://www.tarsnap.com/scrypt/scrypt-sigs-1.3.1.asc +sha256 df2f23197c9589963267f85f9c5307ecf2b35a98b83a551bf1b1fb7a4d06d4c2 scrypt-1.3.1.tgz +# Locally computed +sha256 1fb4da0e9000287414066a238f378528d5652f89b72b4a1d6b89fdd20031b22d COPYRIGHT diff --git a/package/scrypt/scrypt.mk b/package/scrypt/scrypt.mk new file mode 100644 index 00000000..fb305faf --- /dev/null +++ b/package/scrypt/scrypt.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# scrypt +# +################################################################################ + +SCRYPT_VERSION = 1.3.1 +SCRYPT_SOURCE = scrypt-$(SCRYPT_VERSION).tgz +SCRYPT_SITE = http://www.tarsnap.com/scrypt +SCRYPT_LICENSE = BSD-2-Clause +SCRYPT_LICENSE_FILES = COPYRIGHT +SCRYPT_DEPENDENCIES = openssl +SCRYPT_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/sdbusplus/Config.in b/package/sdbusplus/Config.in new file mode 100644 index 00000000..c66203c4 --- /dev/null +++ b/package/sdbusplus/Config.in @@ -0,0 +1,16 @@ +config BR2_PACKAGE_SDBUSPLUS + bool "sdbusplus" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_SYSTEMD + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_7 # C++17 + help + A C++ library for sd-bus with a bindings and doc generator. + + This will build the target library. See the host package for + the bindings and documentation generation program. + + https://github.com/openbmc/sdbusplus + +comment "sdbusplus needs systemd and a toolchain w/ C++, gcc >= 7" + depends on !BR2_PACKAGE_SYSTEMD || !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_7 diff --git a/package/sdbusplus/Config.in.host b/package/sdbusplus/Config.in.host new file mode 100644 index 00000000..2b1d1ce3 --- /dev/null +++ b/package/sdbusplus/Config.in.host @@ -0,0 +1,10 @@ +config BR2_PACKAGE_HOST_SDBUSPLUS + bool "host-sdbusplus" + select BR2_PACKAGE_HOST_PKGCONF + help + A C++ library for sd-bus with a bindings and doc generator. + + This will build the Python host side generation tool for + bindings and documentation. + + https://github.com/openbmc/sdbusplus diff --git a/package/sdbusplus/sdbusplus.hash b/package/sdbusplus/sdbusplus.hash new file mode 100644 index 00000000..b21d2ddd --- /dev/null +++ b/package/sdbusplus/sdbusplus.hash @@ -0,0 +1,5 @@ +# Locally calculated +sha256 c67b8f3d9b74fd0d70eb6eec3b2ec2d496d0f169deedf6fc07dbff2c2f275d2b sdbusplus-4212292bcf136d04b38ba5116aa568b0fa312798.tar.gz + +# License file, locally calculated +sha256 b40930bbcf80744c86c46a12bc9da056641d722716c378f5659b9e555ef833e1 LICENSE diff --git a/package/sdbusplus/sdbusplus.mk b/package/sdbusplus/sdbusplus.mk new file mode 100644 index 00000000..f4e25808 --- /dev/null +++ b/package/sdbusplus/sdbusplus.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# sdbusplus +# +################################################################################ + +SDBUSPLUS_VERSION = 4212292bcf136d04b38ba5116aa568b0fa312798 +SDBUSPLUS_SITE = $(call github,openbmc,sdbusplus,$(SDBUSPLUS_VERSION)) +SDBUSPLUS_DEPENDENCIES = host-autoconf-archive host-pkgconf systemd +HOST_SDBUSPLUS_DEPENDENCIES = \ + host-autoconf-archive \ + host-pkgconf \ + $(if $(BR2_PACKAGE_PYTHON3),host-python3,host-python) \ + host-python-inflection \ + host-python-mako \ + host-python-pyyaml +SDBUSPLUS_CONF_OPTS = --disable-sdbuspp +HOST_SDBUSPLUS_CONF_OPTS = --disable-libsdbusplus +SDBUSPLUS_AUTORECONF = YES +SDBUSPLUS_AUTORECONF_OPTS = --include=$(HOST_DIR)/share/autoconf-archive +SDBUSPLUS_INSTALL_STAGING = YES +SDBUSPLUS_LICENSE = Apache-2.0 +SDBUSPLUS_LICENSE_FILES = LICENSE + +# Autoreconf is missing the m4/ directory, which might actually be missing +# iff it was the first argument, but unfortunately we are overriding the +# first include directory above. Thus we need that hook here. +define SDBUSPLUS_CREATE_M4 + mkdir -p $(@D)/m4 +endef +SDBUSPLUS_POST_PATCH_HOOKS += SDBUSPLUS_CREATE_M4 +HOST_SDBUSPLUS_POST_PATCH_HOOKS += SDBUSPLUS_CREATE_M4 + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/sdl/0001-use-correct-directfb-config.patch b/package/sdl/0001-use-correct-directfb-config.patch new file mode 100644 index 00000000..ef671a1d --- /dev/null +++ b/package/sdl/0001-use-correct-directfb-config.patch @@ -0,0 +1,25 @@ +[PATCH] configure.in: use correct directfb-config in version check + +The configure script has just checked for the correct directfb-config +script, so also use it for the version check instead of whatever +might be in the path. + +Signed-off-by: Peter Korsgaard +--- + configure.in | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +Index: SDL-1.2.15/configure.in +=================================================================== +--- SDL-1.2.15.orig/configure.in ++++ SDL-1.2.15/configure.in +@@ -1276,7 +1276,7 @@ + else + set -- `echo $DIRECTFB_REQUIRED_VERSION | sed 's/\./ /g'` + NEED_VERSION=`expr $1 \* 10000 + $2 \* 100 + $3` +- set -- `directfb-config --version | sed 's/\./ /g'` ++ set -- `$DIRECTFBCONFIG --version | sed 's/\./ /g'` + HAVE_VERSION=`expr $1 \* 10000 + $2 \* 100 + $3` + if test $HAVE_VERSION -ge $NEED_VERSION; then + DIRECTFB_CFLAGS=`$DIRECTFBCONFIG --cflags` + diff --git a/package/sdl/0002-fix-compilation-with-libx11.patch b/package/sdl/0002-fix-compilation-with-libx11.patch new file mode 100644 index 00000000..27f24488 --- /dev/null +++ b/package/sdl/0002-fix-compilation-with-libx11.patch @@ -0,0 +1,60 @@ +sdl: Fix compilation with libX11 >= 1.5.99.902 +Signed-off-by: Vicente Olivert Riera + +# HG changeset patch +# User Azamat H. Hackimov +# Date 1370184533 -21600 +# Node ID 91ad7b43317a6387e115ecdf63a49137f47e42c8 +# Parent f7fd5c3951b9ed922fdf696f7182e71b58a13268 +Fix compilation with libX11 >= 1.5.99.902. + +These changes fixes bug #1769 for SDL 1.2 +(http://bugzilla.libsdl.org/show_bug.cgi?id=1769). + +diff -r f7fd5c3951b9 -r 91ad7b43317a configure.in +--- a/configure.in Wed Apr 17 00:56:53 2013 -0700 ++++ b/configure.in Sun Jun 02 20:48:53 2013 +0600 +@@ -1169,6 +1169,17 @@ + if test x$definitely_enable_video_x11_xrandr = xyes; then + AC_DEFINE(SDL_VIDEO_DRIVER_X11_XRANDR) + fi ++ AC_MSG_CHECKING(for const parameter to _XData32) ++ have_const_param_xdata32=no ++ AC_TRY_COMPILE([ ++ #include ++ extern int _XData32(Display *dpy,register _Xconst long *data,unsigned len); ++ ],[ ++ ],[ ++ have_const_param_xdata32=yes ++ AC_DEFINE(SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32) ++ ]) ++ AC_MSG_RESULT($have_const_param_xdata32) + fi + fi + } +diff -r f7fd5c3951b9 -r 91ad7b43317a include/SDL_config.h.in +--- a/include/SDL_config.h.in Wed Apr 17 00:56:53 2013 -0700 ++++ b/include/SDL_config.h.in Sun Jun 02 20:48:53 2013 +0600 +@@ -283,6 +283,7 @@ + #undef SDL_VIDEO_DRIVER_WINDIB + #undef SDL_VIDEO_DRIVER_WSCONS + #undef SDL_VIDEO_DRIVER_X11 ++#undef SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32 + #undef SDL_VIDEO_DRIVER_X11_DGAMOUSE + #undef SDL_VIDEO_DRIVER_X11_DYNAMIC + #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT +diff -r f7fd5c3951b9 -r 91ad7b43317a src/video/x11/SDL_x11sym.h +--- a/src/video/x11/SDL_x11sym.h Wed Apr 17 00:56:53 2013 -0700 ++++ b/src/video/x11/SDL_x11sym.h Sun Jun 02 20:48:53 2013 +0600 +@@ -165,7 +165,11 @@ + */ + #ifdef LONG64 + SDL_X11_MODULE(IO_32BIT) ++#if SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32 ++SDL_X11_SYM(int,_XData32,(Display *dpy,register _Xconst long *data,unsigned len),(dpy,data,len),return) ++#else + SDL_X11_SYM(int,_XData32,(Display *dpy,register long *data,unsigned len),(dpy,data,len),return) ++#endif + SDL_X11_SYM(void,_XRead32,(Display *dpy,register long *data,long len),(dpy,data,len),) + #endif + diff --git a/package/sdl/Config.in b/package/sdl/Config.in new file mode 100644 index 00000000..9f1e34de --- /dev/null +++ b/package/sdl/Config.in @@ -0,0 +1,26 @@ +config BR2_PACKAGE_SDL + bool "SDL" + help + Simple DirectMedia Layer - SDL is a library that allows + programs portable low level access to a video framebuffer, + audio output, mouse, and keyboard. + + http://www.libsdl.org/ + +if BR2_PACKAGE_SDL + +config BR2_PACKAGE_SDL_FBCON + bool "SDL framebuffer console video driver" + default y + +config BR2_PACKAGE_SDL_DIRECTFB + bool "SDL DirectFB video driver" + depends on BR2_PACKAGE_DIRECTFB + +config BR2_PACKAGE_SDL_X11 + bool "SDL X11 video driver" + depends on BR2_PACKAGE_XORG7 + select BR2_PACKAGE_XLIB_LIBX11 + select BR2_PACKAGE_XLIB_LIBXEXT + +endif diff --git a/package/sdl/sdl.hash b/package/sdl/sdl.hash new file mode 100644 index 00000000..2c46975d --- /dev/null +++ b/package/sdl/sdl.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking pgp signature +sha256 d6d316a793e5e348155f0dd93b979798933fb98aa1edebcc108829d6474aad00 SDL-1.2.15.tar.gz +# Locally computed +sha256 bb117c0fbd7f57f64170b690285d7df07c2371b578e3b3cd3aa2e1155ef461a0 COPYING diff --git a/package/sdl/sdl.mk b/package/sdl/sdl.mk new file mode 100644 index 00000000..7389cd3e --- /dev/null +++ b/package/sdl/sdl.mk @@ -0,0 +1,98 @@ +################################################################################ +# +# sdl +# +################################################################################ + +SDL_VERSION = 1.2.15 +SDL_SOURCE = SDL-$(SDL_VERSION).tar.gz +SDL_SITE = http://www.libsdl.org/release +SDL_LICENSE = LGPL-2.1+ +SDL_LICENSE_FILES = COPYING +SDL_CPE_ID_VENDOR = libsdl +SDL_CPE_ID_PRODUCT = simple_directmedia_layer +SDL_INSTALL_STAGING = YES + +# we're patching configure.in, but package cannot autoreconf with our version of +# autotools, so we have to do it manually instead of setting SDL_AUTORECONF = YES +define SDL_RUN_AUTOGEN + cd $(@D) && PATH=$(BR_PATH) ./autogen.sh +endef + +SDL_PRE_CONFIGURE_HOOKS += SDL_RUN_AUTOGEN +HOST_SDL_PRE_CONFIGURE_HOOKS += SDL_RUN_AUTOGEN + +SDL_DEPENDENCIES += host-automake host-autoconf host-libtool +HOST_SDL_DEPENDENCIES += host-automake host-autoconf host-libtool + +SDL_CONF_OPTS += --enable-video-qtopia=no + +ifeq ($(BR2_PACKAGE_SDL_FBCON),y) +SDL_CONF_OPTS += --enable-video-fbcon=yes +else +SDL_CONF_OPTS += --enable-video-fbcon=no +endif + +ifeq ($(BR2_PACKAGE_SDL_DIRECTFB),y) +SDL_DEPENDENCIES += directfb +SDL_CONF_OPTS += --enable-video-directfb=yes +SDL_CONF_ENV = ac_cv_path_DIRECTFBCONFIG=$(STAGING_DIR)/usr/bin/directfb-config +else +SDL_CONF_OPTS += --enable-video-directfb=no +endif + +ifeq ($(BR2_PACKAGE_SDL_X11),y) +SDL_CONF_OPTS += --enable-video-x11=yes +SDL_DEPENDENCIES += \ + xlib_libX11 xlib_libXext \ + $(if $(BR2_PACKAGE_XLIB_LIBXRENDER), xlib_libXrender) \ + $(if $(BR2_PACKAGE_XLIB_LIBXRANDR), xlib_libXrandr) +else +SDL_CONF_OPTS += --enable-video-x11=no +endif + +ifneq ($(BR2_USE_MMU),y) +SDL_CONF_OPTS += --enable-dga=no +endif + +# overwrite autodection (prevents confusion with host libpth version) +ifeq ($(BR2_PACKAGE_LIBPTHSEM_COMPAT),y) +SDL_CONF_OPTS += --enable-pth +SDL_CONF_ENV += ac_cv_path_PTH_CONFIG=$(STAGING_DIR)/usr/bin/pth-config +SDL_DEPENDENCIES += libpthsem +else +SDL_CONF_OPTS += --disable-pth +endif + +ifeq ($(BR2_PACKAGE_TSLIB),y) +SDL_DEPENDENCIES += tslib +endif + +ifeq ($(BR2_PACKAGE_ALSA_LIB),y) +SDL_DEPENDENCIES += alsa-lib +endif + +ifeq ($(BR2_PACKAGE_MESA3D),y) +SDL_DEPENDENCIES += mesa3d +endif + +SDL_CONF_OPTS += \ + --disable-rpath \ + --enable-pulseaudio=no \ + --disable-arts \ + --disable-esd \ + --disable-nasm \ + --disable-video-ps3 + +HOST_SDL_CONF_OPTS += \ + --enable-pulseaudio=no \ + --enable-video-x11=no \ + --disable-arts \ + --disable-esd \ + --disable-nasm \ + --disable-video-ps3 + +SDL_CONFIG_SCRIPTS = sdl-config + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/sdl2/0001-src-video-kmsdrm-SDL_kmsdrmvideo.c-fix-build.patch b/package/sdl2/0001-src-video-kmsdrm-SDL_kmsdrmvideo.c-fix-build.patch new file mode 100644 index 00000000..47a13300 --- /dev/null +++ b/package/sdl2/0001-src-video-kmsdrm-SDL_kmsdrmvideo.c-fix-build.patch @@ -0,0 +1,39 @@ +From d265b1ee94aa4faf5fa405f14cc731a25d7a00ab Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Tue, 24 Mar 2020 14:11:14 +0100 +Subject: [PATCH] src/video/kmsdrm/SDL_kmsdrmvideo.c: fix build + +Build is broken without EGL since version 2.0.12 and +https://hg.libsdl.org/SDL/rev/9761858bd6a3: + +/home/giuliobenetti/autobuild/run/instance-1/output-1/build/sdl2-2.0.12/src/video/kmsdrm/SDL_kmsdrmvideo.c: In function 'KMSDRM_CreateSurfaces': +/home/giuliobenetti/autobuild/run/instance-1/output-1/build/sdl2-2.0.12/src/video/kmsdrm/SDL_kmsdrmvideo.c:394:5: error: unknown type name 'EGLContext' + EGLContext egl_context; + ^ + +Fixes: + - http://autobuild.buildroot.org/results/fafd20a01591032662f9ca025fcea3478239cf3c + +Signed-off-by: Fabrice Fontaine + +[Upstream: https://hg.libsdl.org/SDL/rev/389ce8cfa2a3] + + +Fixes: + - Update patch to version 2.0.14 + +Signed-off-by: Michael Fischer + +diff -purN a/src/video/kmsdrm/SDL_kmsdrmvideo.c b/src/video/kmsdrm/SDL_kmsdrmvideo.c +--- a/src/video/kmsdrm/SDL_kmsdrmvideo.c 2021-01-08 09:56:44.028217792 +0100 ++++ b/src/video/kmsdrm/SDL_kmsdrmvideo.c 2021-01-08 09:55:52.295932111 +0100 +@@ -1407,7 +1407,9 @@ KMSDRM_CreateSurfaces(_THIS, SDL_Window + uint32_t surface_flags = GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING; + uint32_t width, height; + ++#if SDL_VIDEO_OPENGL_EGL + EGLContext egl_context; ++#endif + + int ret = 0; + diff --git a/package/sdl2/Config.in b/package/sdl2/Config.in new file mode 100644 index 00000000..f29b3c7c --- /dev/null +++ b/package/sdl2/Config.in @@ -0,0 +1,60 @@ +config BR2_PACKAGE_SDL2 + bool "sdl2" + depends on !BR2_STATIC_LIBS + help + Simple DirectMedia Layer 2 - SDL2 is a library that allows + programs portable low level access to a video framebuffer, + audio output, mouse, and keyboard. It is not compatible with + SDL1. + + http://www.libsdl.org/ + +if BR2_PACKAGE_SDL2 + +config BR2_PACKAGE_SDL2_DIRECTFB + bool "DirectFB video driver" + depends on BR2_PACKAGE_DIRECTFB + +comment "DirectFB video driver needs directfb" + depends on !BR2_PACKAGE_DIRECTFB + +config BR2_PACKAGE_SDL2_X11 + bool "X11 video driver" + depends on BR2_PACKAGE_XORG7 + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_XLIB_LIBX11 + select BR2_PACKAGE_XLIB_LIBXEXT + +comment "X11 video driver needs X.org" + depends on !BR2_PACKAGE_XORG7 + depends on BR2_USE_MMU + +config BR2_PACKAGE_SDL2_KMSDRM + bool "KMS/DRM video driver" + depends on BR2_PACKAGE_LIBDRM + +comment "KMS/DRM video driver needs libdrm" + depends on !BR2_PACKAGE_LIBDRM + +config BR2_PACKAGE_SDL2_OPENGL + bool "OpenGL (GLX)" + depends on BR2_PACKAGE_HAS_LIBGL + depends on BR2_PACKAGE_XORG7 + depends on BR2_USE_MMU # X11 video driver + select BR2_PACKAGE_SDL2_X11 + +comment "OpenGL support needs X11 and an OpenGL provider" + depends on BR2_USE_MMU + depends on !BR2_PACKAGE_HAS_LIBGL || !BR2_PACKAGE_XORG7 + +config BR2_PACKAGE_SDL2_OPENGLES + bool "OpenGL ES" + depends on BR2_PACKAGE_HAS_LIBGLES + +comment "OpenGL ES support needs an OpenGL ES provider" + depends on !BR2_PACKAGE_HAS_LIBGLES + +endif + +comment "sdl2 needs a toolchain w/ dynamic library" + depends on BR2_STATIC_LIBS diff --git a/package/sdl2/sdl2.hash b/package/sdl2/sdl2.hash new file mode 100644 index 00000000..6b818fb0 --- /dev/null +++ b/package/sdl2/sdl2.hash @@ -0,0 +1,4 @@ +# Locally calculated after checking http://www.libsdl.org/release/SDL2-2.0.14.tar.gz.sig +sha256 d8215b571a581be1332d2106f8036fcb03d12a70bae01e20f424976d275432bc SDL2-2.0.14.tar.gz +# Locally calculated +sha256 ae4df3759a726538607b84c00ab8f8a5567d9f38ad5397486eb9b5c5f626caef COPYING.txt diff --git a/package/sdl2/sdl2.mk b/package/sdl2/sdl2.mk new file mode 100644 index 00000000..a2e426e5 --- /dev/null +++ b/package/sdl2/sdl2.mk @@ -0,0 +1,159 @@ +################################################################################ +# +# sdl2 +# +################################################################################ + +SDL2_VERSION = 2.0.14 +SDL2_SOURCE = SDL2-$(SDL2_VERSION).tar.gz +SDL2_SITE = http://www.libsdl.org/release +SDL2_LICENSE = Zlib +SDL2_LICENSE_FILES = COPYING.txt +SDL2_CPE_ID_VENDOR = libsdl +SDL2_CPE_ID_PRODUCT = simple_directmedia_layer +SDL2_INSTALL_STAGING = YES +SDL2_CONFIG_SCRIPTS = sdl2-config + +SDL2_CONF_OPTS += \ + --disable-rpath \ + --disable-arts \ + --disable-esd \ + --disable-dbus \ + --disable-pulseaudio \ + --disable-video-wayland + +# We are using autotools build system for sdl2, so the sdl2-config.cmake +# include path are not resolved like for sdl2-config script. +# Remove sdl2-config.cmake file and avoid unsafe include path if this +# file is used by a cmake based package. +# https://bugzilla.libsdl.org/show_bug.cgi?id=4597 +define SDL2_REMOVE_SDL2_CONFIG_CMAKE + rm -rf $(STAGING_DIR)/usr/lib/cmake/SDL2 +endef +SDL2_POST_INSTALL_STAGING_HOOKS += SDL2_REMOVE_SDL2_CONFIG_CMAKE + +# We must enable static build to get compilation successful. +SDL2_CONF_OPTS += --enable-static + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +SDL2_DEPENDENCIES += udev +SDL2_CONF_OPTS += --enable-libudev +else +SDL2_CONF_OPTS += --disable-libudev +endif + +ifeq ($(BR2_X86_CPU_HAS_SSE),y) +SDL2_CONF_OPTS += --enable-sse +else +SDL2_CONF_OPTS += --disable-sse +endif + +ifeq ($(BR2_X86_CPU_HAS_3DNOW),y) +SDL2_CONF_OPTS += --enable-3dnow +else +SDL2_CONF_OPTS += --disable-3dnow +endif + +ifeq ($(BR2_PACKAGE_SDL2_DIRECTFB),y) +SDL2_DEPENDENCIES += directfb +SDL2_CONF_OPTS += --enable-video-directfb +SDL2_CONF_ENV = ac_cv_path_DIRECTFBCONFIG=$(STAGING_DIR)/usr/bin/directfb-config +else +SDL2_CONF_OPTS += --disable-video-directfb +endif + +ifeq ($(BR2_PACKAGE_SDL2_OPENGLES)$(BR2_PACKAGE_RPI_USERLAND),yy) +SDL2_DEPENDENCIES += rpi-userland +SDL2_CONF_OPTS += --enable-video-rpi +else +SDL2_CONF_OPTS += --disable-video-rpi +endif + +# x-includes and x-libraries must be set for cross-compiling +# By default x_includes and x_libraries contains unsafe paths. +# (/usr/X11R6/include and /usr/X11R6/lib) +ifeq ($(BR2_PACKAGE_SDL2_X11),y) +SDL2_DEPENDENCIES += xlib_libX11 xlib_libXext + +# X11/extensions/shape.h is provided by libXext. +SDL2_CONF_OPTS += --enable-video-x11 \ + --with-x=$(STAGING_DIR) \ + --x-includes=$(STAGING_DIR)/usr/include \ + --x-libraries=$(STAGING_DIR)/usr/lib \ + --enable-video-x11-xshape + +ifeq ($(BR2_PACKAGE_XLIB_LIBXCURSOR),y) +SDL2_DEPENDENCIES += xlib_libXcursor +SDL2_CONF_OPTS += --enable-video-x11-xcursor +else +SDL2_CONF_OPTS += --disable-video-x11-xcursor +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXINERAMA),y) +SDL2_DEPENDENCIES += xlib_libXinerama +SDL2_CONF_OPTS += --enable-video-x11-xinerama +else +SDL2_CONF_OPTS += --disable-video-x11-xinerama +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXI),y) +SDL2_DEPENDENCIES += xlib_libXi +SDL2_CONF_OPTS += --enable-video-x11-xinput +else +SDL2_CONF_OPTS += --disable-video-x11-xinput +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXRANDR),y) +SDL2_DEPENDENCIES += xlib_libXrandr +SDL2_CONF_OPTS += --enable-video-x11-xrandr +else +SDL2_CONF_OPTS += --disable-video-x11-xrandr +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXSCRNSAVER),y) +SDL2_DEPENDENCIES += xlib_libXScrnSaver +SDL2_CONF_OPTS += --enable-video-x11-scrnsaver +else +SDL2_CONF_OPTS += --disable-video-x11-scrnsaver +endif + +ifeq ($(BR2_PACKAGE_XLIB_LIBXXF86VM),y) +SDL2_DEPENDENCIES += xlib_libXxf86vm +SDL2_CONF_OPTS += --enable-video-x11-vm +else +SDL2_CONF_OPTS += --disable-video-x11-vm +endif + +else +SDL2_CONF_OPTS += --disable-video-x11 --without-x +endif + +ifeq ($(BR2_PACKAGE_SDL2_OPENGL),y) +SDL2_CONF_OPTS += --enable-video-opengl +SDL2_DEPENDENCIES += libgl +else +SDL2_CONF_OPTS += --disable-video-opengl +endif + +ifeq ($(BR2_PACKAGE_SDL2_OPENGLES),y) +SDL2_CONF_OPTS += --enable-video-opengles +SDL2_DEPENDENCIES += libgles +else +SDL2_CONF_OPTS += --disable-video-opengles +endif + +ifeq ($(BR2_PACKAGE_ALSA_LIB),y) +SDL2_DEPENDENCIES += alsa-lib +SDL2_CONF_OPTS += --enable-alsa +else +SDL2_CONF_OPTS += --disable-alsa +endif + +ifeq ($(BR2_PACKAGE_SDL2_KMSDRM),y) +SDL2_DEPENDENCIES += libdrm +SDL2_CONF_OPTS += --enable-video-kmsdrm +else +SDL2_CONF_OPTS += --disable-video-kmsdrm +endif + +$(eval $(autotools-package)) diff --git a/package/sdl2_gfx/Config.in b/package/sdl2_gfx/Config.in new file mode 100644 index 00000000..f5dafc56 --- /dev/null +++ b/package/sdl2_gfx/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_SDL2_GFX + bool "sdl2_gfx" + depends on BR2_PACKAGE_SDL2 + help + The SDL2_gfx library is an extension to the SDL2 library + which provides basic antialiased drawing routines such as + lines, circles or polygons, an interpolating rotozoomer for + SDL surfaces, framerate control and MMX image filters. + + http://www.ferzkopp.net/wordpress/2016/01/02/sdl_gfx-sdl2_gfx diff --git a/package/sdl2_gfx/sdl2_gfx.hash b/package/sdl2_gfx/sdl2_gfx.hash new file mode 100644 index 00000000..190c997d --- /dev/null +++ b/package/sdl2_gfx/sdl2_gfx.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 63e0e01addedc9df2f85b93a248f06e8a04affa014a835c2ea34bfe34e576262 SDL2_gfx-1.0.4.tar.gz +sha256 ec9036525fe1adde787041cce6c4b7fbb262863c238bb9051037e29a57e27bfc COPYING +sha256 18e6fad60b809b0e30bd2576a0d33c179ca2ac694504a849d05b6579e3c481dd SDL2_framerate.h diff --git a/package/sdl2_gfx/sdl2_gfx.mk b/package/sdl2_gfx/sdl2_gfx.mk new file mode 100644 index 00000000..6817391b --- /dev/null +++ b/package/sdl2_gfx/sdl2_gfx.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# sdl2_gfx +# +################################################################################ + +SDL2_GFX_VERSION = 1.0.4 +SDL2_GFX_SOURCE = SDL2_gfx-$(SDL2_GFX_VERSION).tar.gz +SDL2_GFX_SITE = http://www.ferzkopp.net/Software/SDL2_gfx +SDL2_GFX_LICENSE = Zlib +SDL2_GFX_LICENSE_FILES = COPYING SDL2_framerate.h +SDL2_GFX_INSTALL_STAGING = YES +SDL2_GFX_DEPENDENCIES = sdl2 host-pkgconf +SDL2_GFX_CONF_OPTS = --disable-sdltest +# configure/Makefile.in not up-to-date, causing aclocal to be used at +# build time if we don't autoreconf. +SDL2_GFX_AUTORECONF = YES + +# Even though x86_64 processors support MMX, the MMX-specific assembly +# code in sdl2_gfx is IA32 specific, and does not build for x86_64. +ifeq ($(BR2_i386)$(BR2_X86_CPU_HAS_MMX),yy) +SDL2_GFX_CONF_OPTS += --enable-mmx +else +SDL2_GFX_CONF_OPTS += --disable-mmx +endif + +$(eval $(autotools-package)) diff --git a/package/sdl2_image/Config.in b/package/sdl2_image/Config.in new file mode 100644 index 00000000..9b4a3835 --- /dev/null +++ b/package/sdl2_image/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_SDL2_IMAGE + bool "sdl2_image" + depends on BR2_PACKAGE_SDL2 + help + SDL2_image is an image file loading library. It loads images + as SDL surfaces, and supports the following formats: BMP, + GIF, JPEG, LBM, PCX, PNG, PNM, TGA, TIFF, XCF, XPM, XV. + + http://www.libsdl.org/projects/SDL_image/ diff --git a/package/sdl2_image/sdl2_image.hash b/package/sdl2_image/sdl2_image.hash new file mode 100644 index 00000000..621a9202 --- /dev/null +++ b/package/sdl2_image/sdl2_image.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 bdd5f6e026682f7d7e1be0b6051b209da2f402a2dd8bd1c4bd9c25ad263108d0 SDL2_image-2.0.5.tar.gz +sha256 45079362e2230154205413a6940544ca94e3479ccf76205c71c4f542a6815d25 COPYING.txt diff --git a/package/sdl2_image/sdl2_image.mk b/package/sdl2_image/sdl2_image.mk new file mode 100644 index 00000000..13de7b12 --- /dev/null +++ b/package/sdl2_image/sdl2_image.mk @@ -0,0 +1,60 @@ +################################################################################ +# +# sdl2_image +# +################################################################################ + +SDL2_IMAGE_VERSION = 2.0.5 +SDL2_IMAGE_SOURCE = SDL2_image-$(SDL2_IMAGE_VERSION).tar.gz +SDL2_IMAGE_SITE = http://www.libsdl.org/projects/SDL_image/release +SDL2_IMAGE_INSTALL_STAGING = YES +SDL2_IMAGE_LICENSE = Zlib +SDL2_IMAGE_LICENSE_FILES = COPYING.txt +SDL2_IMAGE_CPE_ID_VENDOR = libsdl +SDL2_IMAGE_CPE_ID_PRODUCT = sdl_image + +# Unconditionally enable support for image formats that don't require +# any dependency. +SDL2_IMAGE_CONF_OPTS = \ + --disable-sdltest \ + --enable-bmp \ + --enable-gif \ + --enable-lbm \ + --enable-pcx \ + --enable-pnm \ + --enable-tga \ + --enable-xcf \ + --enable-xpm \ + --enable-xv + +SDL2_IMAGE_DEPENDENCIES = sdl2 host-pkgconf + +ifeq ($(BR2_PACKAGE_JPEG),y) +SDL2_IMAGE_CONF_OPTS += --enable-jpg +SDL2_IMAGE_DEPENDENCIES += jpeg +else +SDL2_IMAGE_CONF_OPTS += --disable-jpg +endif + +ifeq ($(BR2_PACKAGE_LIBPNG),y) +SDL2_IMAGE_CONF_OPTS += --enable-png +SDL2_IMAGE_DEPENDENCIES += libpng +else +SDL2_IMAGE_CONF_OPTS += --disable-png +endif + +ifeq ($(BR2_PACKAGE_TIFF),y) +SDL2_IMAGE_CONF_OPTS += --enable-tif +SDL2_IMAGE_DEPENDENCIES += tiff +else +SDL2_IMAGE_CONF_OPTS += --disable-tif +endif + +ifeq ($(BR2_PACKAGE_WEBP),y) +SDL2_IMAGE_CONF_OPTS += --enable-webp +SDL2_IMAGE_DEPENDENCIES += webp +else +SDL2_IMAGE_CONF_OPTS += --disable-webp +endif + +$(eval $(autotools-package)) diff --git a/package/sdl2_mixer/Config.in b/package/sdl2_mixer/Config.in new file mode 100644 index 00000000..8e1cf585 --- /dev/null +++ b/package/sdl2_mixer/Config.in @@ -0,0 +1,11 @@ +config BR2_PACKAGE_SDL2_MIXER + bool "sdl2_mixer" + depends on BR2_PACKAGE_SDL2 + help + SDL_mixer is a sample multi-channel audio mixer library. It + supports any number of simultaneously playing channels of 16 + bit stereo audio, plus a single channel of music, mixed by + the popular FLAC, MikMod MOD, Timidity MIDI, Ogg Vorbis, and + SMPEG MP3 libraries. + + http://www.libsdl.org/projects/SDL_mixer/ diff --git a/package/sdl2_mixer/sdl2_mixer.hash b/package/sdl2_mixer/sdl2_mixer.hash new file mode 100644 index 00000000..f3bab151 --- /dev/null +++ b/package/sdl2_mixer/sdl2_mixer.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 b4cf5a382c061cd75081cf246c2aa2f9df8db04bdda8dcdc6b6cca55bede2419 SDL2_mixer-2.0.4.tar.gz +sha256 113727180e7956cb9718b03b41da85b63ea54743a33047071a623bf672895a10 COPYING.txt diff --git a/package/sdl2_mixer/sdl2_mixer.mk b/package/sdl2_mixer/sdl2_mixer.mk new file mode 100644 index 00000000..f349b8ca --- /dev/null +++ b/package/sdl2_mixer/sdl2_mixer.mk @@ -0,0 +1,52 @@ +################################################################################ +# +# sdl2_mixer +# +################################################################################ + +SDL2_MIXER_VERSION = 2.0.4 +SDL2_MIXER_SOURCE = SDL2_mixer-$(SDL2_MIXER_VERSION).tar.gz +SDL2_MIXER_SITE = http://www.libsdl.org/projects/SDL_mixer/release +SDL2_MIXER_LICENSE = Zlib +SDL2_MIXER_LICENSE_FILES = COPYING.txt +SDL2_MIXER_INSTALL_STAGING = YES +SDL2_MIXER_DEPENDENCIES = sdl2 host-pkgconf + +SDL2_MIXER_CONF_OPTS = --disable-music-mp3 + +ifeq ($(BR2_PACKAGE_FLAC),y) +SDL2_MIXER_CONF_OPTS += --enable-music-flac +SDL2_MIXER_DEPENDENCIES += flac +else +SDL2_MIXER_CONF_OPTS += --disable-music-flac +endif + +ifeq ($(BR2_PACKAGE_FLUIDSYNTH),y) +SDL2_MIXER_CONF_OPTS += --enable-music-midi-fluidsynth +SDL2_MIXER_DEPENDENCIES += fluidsynth +else +SDL2_MIXER_CONF_OPTS += --disable-music-midi-fluidsynth +endif + +ifeq ($(BR2_PACKAGE_LIBMODPLUG),y) +SDL2_MIXER_CONF_OPTS += --enable-music-mod-modplug +SDL2_MIXER_DEPENDENCIES += libmodplug +else +SDL2_MIXER_CONF_OPTS += --disable-music-mod-modplug +endif + +ifeq ($(BR2_PACKAGE_OPUSFILE),y) +SDL2_MIXER_CONF_OPTS += --enable-music-opus +SDL2_MIXER_DEPENDENCIES += opusfile +else +SDL2_MIXER_CONF_OPTS += --disable-music-opus +endif + +ifeq ($(BR2_PACKAGE_TREMOR),y) +SDL2_MIXER_CONF_OPTS += --enable-music-ogg-tremor +SDL2_MIXER_DEPENDENCIES += tremor +else +SDL2_MIXER_CONF_OPTS += --disable-music-ogg-tremor +endif + +$(eval $(autotools-package)) diff --git a/package/sdl2_net/Config.in b/package/sdl2_net/Config.in new file mode 100644 index 00000000..d5e749f5 --- /dev/null +++ b/package/sdl2_net/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_SDL2_NET + bool "sdl2_net" + depends on BR2_PACKAGE_SDL2 + help + This is a small sample cross-platform networking library, + with a sample chat client and server application. The chat + client uses the GUIlib GUI framework library. + + http://www.libsdl.org/projects/SDL_net/ diff --git a/package/sdl2_net/sdl2_net.hash b/package/sdl2_net/sdl2_net.hash new file mode 100644 index 00000000..a58e3c96 --- /dev/null +++ b/package/sdl2_net/sdl2_net.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 15ce8a7e5a23dafe8177c8df6e6c79b6749a03fff1e8196742d3571657609d21 SDL2_net-2.0.1.tar.gz +sha256 f09845a238245402a8b8388db6634d8a5b2c3e1dc098f16f9d8c74a276ef4594 COPYING.txt diff --git a/package/sdl2_net/sdl2_net.mk b/package/sdl2_net/sdl2_net.mk new file mode 100644 index 00000000..93bf3a2e --- /dev/null +++ b/package/sdl2_net/sdl2_net.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# sdl2_net +# +################################################################################ + +SDL2_NET_VERSION = 2.0.1 +SDL2_NET_SOURCE = SDL2_net-$(SDL2_NET_VERSION).tar.gz +SDL2_NET_SITE = http://www.libsdl.org/projects/SDL_net/release +SDL2_NET_LICENSE = Zlib +SDL2_NET_LICENSE_FILES = COPYING.txt +SDL2_NET_INSTALL_STAGING = YES +SDL2_NET_DEPENDENCIES = sdl2 host-pkgconf + +$(eval $(autotools-package)) diff --git a/package/sdl2_ttf/Config.in b/package/sdl2_ttf/Config.in new file mode 100644 index 00000000..fc870a71 --- /dev/null +++ b/package/sdl2_ttf/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_SDL2_TTF + bool "sdl2_ttf" + depends on BR2_PACKAGE_SDL2 + select BR2_PACKAGE_FREETYPE + help + SDL2_ttf is a sample TrueType font library. It allows you to + use TrueType fonts in your SDL2 applications. + + http://www.libsdl.org/projects/SDL_ttf/ diff --git a/package/sdl2_ttf/sdl2_ttf.hash b/package/sdl2_ttf/sdl2_ttf.hash new file mode 100644 index 00000000..16459e4a --- /dev/null +++ b/package/sdl2_ttf/sdl2_ttf.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 a9eceb1ad88c1f1545cd7bd28e7cbc0b2c14191d40238f531a15b01b1b22cd33 SDL2_ttf-2.0.15.tar.gz +sha256 f6370809c9f644760920d9945c5be07aed17664975f2e4741013d4d9a2ec696f COPYING.txt diff --git a/package/sdl2_ttf/sdl2_ttf.mk b/package/sdl2_ttf/sdl2_ttf.mk new file mode 100644 index 00000000..326cb993 --- /dev/null +++ b/package/sdl2_ttf/sdl2_ttf.mk @@ -0,0 +1,31 @@ +################################################################################ +# +# sdl2_ttf +# +################################################################################ + +SDL2_TTF_VERSION = 2.0.15 +SDL2_TTF_SOURCE = SDL2_ttf-$(SDL2_TTF_VERSION).tar.gz +SDL2_TTF_SITE = http://www.libsdl.org/projects/SDL_ttf/release +SDL2_TTF_LICENSE = Zlib +SDL2_TTF_LICENSE_FILES = COPYING.txt +SDL2_TTF_INSTALL_STAGING = YES +SDL2_TTF_DEPENDENCIES = sdl2 freetype host-pkgconf + +SDL2_TTF_CONF_ENV = \ + FREETYPE_CONFIG=$(STAGING_DIR)/usr/bin/freetype-config + +# x-includes and x-libraries must be set for cross-compiling +# By default x_includes and x_libraries contains unsafe paths. +# (/usr/include and /usr/lib) +ifeq ($(BR2_PACKAGE_SDL2_X11),y) +SDL2_TTF_CONF_OPTS += \ + --with-x \ + --x-includes=$(STAGING_DIR)/usr/include \ + --x-libraries=$(STAGING_DIR)/usr/lib +else +SDL2_TTF_CONF_OPTS += \ + --without-x +endif + +$(eval $(autotools-package)) diff --git a/package/sdl_gfx/Config.in b/package/sdl_gfx/Config.in new file mode 100644 index 00000000..b5d5cac5 --- /dev/null +++ b/package/sdl_gfx/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_SDL_GFX + bool "SDL_gfx" + depends on BR2_PACKAGE_SDL + help + The SDL_gfx library is an extension to the SDL library which + provides basic antialiased drawing routines such as lines, + circles or polygons, an interpolating rotozoomer for SDL + surfaces, framerate control and MMX image filters. + + http://cms.ferzkopp.net/index.php/software/13-sdl-gfx diff --git a/package/sdl_gfx/sdl_gfx.hash b/package/sdl_gfx/sdl_gfx.hash new file mode 100644 index 00000000..afd46536 --- /dev/null +++ b/package/sdl_gfx/sdl_gfx.hash @@ -0,0 +1,6 @@ +# From http://sourceforge.net/projects/sdlgfx/files/ +md5 fcc3c4f2d1b4943409bf7e67dd65d03a SDL_gfx-2.0.23.tar.gz +sha1 aae60e7fed539f3f8a0a0bd6da3bbcf625642596 SDL_gfx-2.0.23.tar.gz +# Locally computed +sha256 4f5df842266c59b2d7e6ef35b53d7f37b13795d93baf3ed211f502c216f7bc89 COPYING +sha256 5f3bc98e0bd2de83279bd62868d4bc0c2b4f811ab828b036d36a4a6d1cd5672d LICENSE diff --git a/package/sdl_gfx/sdl_gfx.mk b/package/sdl_gfx/sdl_gfx.mk new file mode 100644 index 00000000..e7420de1 --- /dev/null +++ b/package/sdl_gfx/sdl_gfx.mk @@ -0,0 +1,28 @@ +################################################################################ +# +# sdl_gfx +# +################################################################################ + +SDL_GFX_VERSION_MAJOR = 2.0 +SDL_GFX_VERSION = $(SDL_GFX_VERSION_MAJOR).23 +SDL_GFX_SOURCE = SDL_gfx-$(SDL_GFX_VERSION).tar.gz +SDL_GFX_SITE = http://www.ferzkopp.net/Software/SDL_gfx-$(SDL_GFX_VERSION_MAJOR) +SDL_GFX_LICENSE = Zlib +SDL_GFX_LICENSE_FILES = COPYING LICENSE +SDL_GFX_INSTALL_STAGING = YES +SDL_GFX_DEPENDENCIES = sdl +SDL_GFX_CONF_OPTS = \ + --with-sdl-prefix=$(STAGING_DIR)/usr \ + --disable-sdltest \ + --enable-static + +# Even though x86_64 processors support MMX, the MMX-specific assembly +# code in sdl_gfx is IA32 specific, and does not build for x86_64. +ifeq ($(BR2_i386)$(BR2_X86_CPU_HAS_MMX),yy) +SDL_GFX_CONF_OPTS += --enable-mmx +else +SDL_GFX_CONF_OPTS += --disable-mmx +endif + +$(eval $(autotools-package)) diff --git a/package/sdl_image/Config.in b/package/sdl_image/Config.in new file mode 100644 index 00000000..c719d441 --- /dev/null +++ b/package/sdl_image/Config.in @@ -0,0 +1,57 @@ +menuconfig BR2_PACKAGE_SDL_IMAGE + bool "SDL_image" + depends on BR2_PACKAGE_SDL + help + SDL_image is an image file loading library. It loads images + as SDL surfaces, and supports the following formats: + BMP, GIF, JPEG, LBM, PCX, PNG, PNM, TGA, TIFF, XCF, XPM, XV. + + http://www.libsdl.org/projects/SDL_image/ + +if BR2_PACKAGE_SDL_IMAGE + +config BR2_PACKAGE_SDL_IMAGE_BMP + bool "BMP support" + default y + +config BR2_PACKAGE_SDL_IMAGE_GIF + bool "GIF support" + +config BR2_PACKAGE_SDL_IMAGE_JPEG + bool "JPEG support" + select BR2_PACKAGE_JPEG + +config BR2_PACKAGE_SDL_IMAGE_LBM + bool "LBM support" + +config BR2_PACKAGE_SDL_IMAGE_PCX + bool "PCX support" + +config BR2_PACKAGE_SDL_IMAGE_PNG + bool "PNG support" + select BR2_PACKAGE_LIBPNG + +config BR2_PACKAGE_SDL_IMAGE_PNM + bool "PNM support" + +config BR2_PACKAGE_SDL_IMAGE_TARGA + bool "TARGA support" + +config BR2_PACKAGE_SDL_IMAGE_TIFF + bool "TIFF support" + select BR2_PACKAGE_TIFF + +config BR2_PACKAGE_SDL_IMAGE_WEBP + bool "WEBP support" + select BR2_PACKAGE_WEBP + +config BR2_PACKAGE_SDL_IMAGE_XCF + bool "XCF support" + +config BR2_PACKAGE_SDL_IMAGE_XPM + bool "XPM support" + +config BR2_PACKAGE_SDL_IMAGE_XV + bool "XV support" + +endif diff --git a/package/sdl_image/sdl_image.hash b/package/sdl_image/sdl_image.hash new file mode 100644 index 00000000..90e3040a --- /dev/null +++ b/package/sdl_image/sdl_image.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 0b90722984561004de84847744d566809dbb9daf732a9e503b91a1b5a84e5699 SDL_image-1.2.12.tar.gz +sha256 653649692218d56e5807bdc5b72f51aa6067bc44d30b757e18c03b32bcaf98da COPYING diff --git a/package/sdl_image/sdl_image.mk b/package/sdl_image/sdl_image.mk new file mode 100644 index 00000000..9ff9206b --- /dev/null +++ b/package/sdl_image/sdl_image.mk @@ -0,0 +1,57 @@ +################################################################################ +# +# sdl_image +# +################################################################################ + +SDL_IMAGE_VERSION = 1.2.12 +SDL_IMAGE_SOURCE = SDL_image-$(SDL_IMAGE_VERSION).tar.gz +SDL_IMAGE_SITE = http://www.libsdl.org/projects/SDL_image/release +SDL_IMAGE_INSTALL_STAGING = YES +SDL_IMAGE_LICENSE = Zlib +SDL_IMAGE_LICENSE_FILES = COPYING +SDL_IMAGE_CPE_ID_VENDOR = libsdl + +SDL_IMAGE_CONF_OPTS = \ + --with-sdl-prefix=$(STAGING_DIR)/usr \ + --with-sdl-exec-prefix=$(STAGING_DIR)/usr \ + --disable-sdltest \ + --disable-static \ + --disable-jpg-shared \ + --disable-png-shared \ + --disable-tif-shared \ + --disable-webp-shared \ + --enable-bmp=$(if $(BR2_PACKAGE_SDL_IMAGE_BMP),yes,no) \ + --enable-gif=$(if $(BR2_PACKAGE_SDL_IMAGE_GIF),yes,no) \ + --enable-jpg=$(if $(BR2_PACKAGE_SDL_IMAGE_JPEG),yes,no) \ + --enable-lbm=$(if $(BR2_PACKAGE_SDL_IMAGE_LBM),yes,no) \ + --enable-pcx=$(if $(BR2_PACKAGE_SDL_IMAGE_PCX),yes,no) \ + --enable-png=$(if $(BR2_PACKAGE_SDL_IMAGE_PNG),yes,no) \ + --enable-pnm=$(if $(BR2_PACKAGE_SDL_IMAGE_PNM),yes,no) \ + --enable-tga=$(if $(BR2_PACKAGE_SDL_IMAGE_TARGA),yes,no) \ + --enable-tif=$(if $(BR2_PACKAGE_SDL_IMAGE_TIFF),yes,no) \ + --enable-webp=$(if $(BR2_PACKAGE_SDL_IMAGE_WEBP),yes,no) \ + --enable-xcf=$(if $(BR2_PACKAGE_SDL_IMAGE_XCF),yes,no) \ + --enable-xpm=$(if $(BR2_PACKAGE_SDL_IMAGE_XPM),yes,no) \ + --enable-xv=$(if $(BR2_PACKAGE_SDL_IMAGE_XV),yes,no) + +SDL_IMAGE_DEPENDENCIES = sdl \ + $(if $(BR2_PACKAGE_SDL_IMAGE_JPEG),jpeg) \ + $(if $(BR2_PACKAGE_SDL_IMAGE_PNG),libpng) \ + $(if $(BR2_PACKAGE_SDL_IMAGE_TIFF),tiff) \ + $(if $(BR2_PACKAGE_SDL_IMAGE_WEBP),webp) + +HOST_SDL_IMAGE_CONF_OPTS = \ + --with-sdl-prefix=$(HOST_DIR) \ + --with-sdl-exec-prefix=$(HOST_DIR) \ + --disable-sdltest \ + --disable-static \ + --disable-jpg-shared \ + --disable-png-shared \ + --disable-tif-shared \ + --disable-webp-shared + +HOST_SDL_IMAGE_DEPENDENCIES = host-libjpeg host-libpng host-sdl + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/sdl_mixer/0001-Add-Libs.private-field-to-pkg-config-file.patch b/package/sdl_mixer/0001-Add-Libs.private-field-to-pkg-config-file.patch new file mode 100644 index 00000000..e0e85710 --- /dev/null +++ b/package/sdl_mixer/0001-Add-Libs.private-field-to-pkg-config-file.patch @@ -0,0 +1,64 @@ +From abf3a1b9c9cdacb574c2b9cdbf3f2a5e18c39ab9 Mon Sep 17 00:00:00 2001 +From: Rodrigo Rebello +Date: Mon, 29 Feb 2016 22:53:49 -0300 +Subject: [PATCH 1/1] Add 'Libs.private' field to pkg-config file + +In order to support static linking, SDL_mixer.pc should include a +'Libs.private' field listing all the libraries that SDL_mixer requires. + +This patch adds such a field and also modifies configure.in so that +EXTRA_LDFLAGS (which is now also used as the value of 'Libs.private') +no longer includes SDL_LIBS. This is done so as to prevent libraries +required by SDL from being listed twice when 'pkg-config --libs --static +SDL_mixer' is run (they're already shown because of the 'Requires: sdl' +line in SDL_mixer.pc). Makefile.in is also adjusted accordingly. + +Upstream status: submitted +https://bugzilla.libsdl.org/show_bug.cgi?id=3278 + +Signed-off-by: Rodrigo Rebello +--- + Makefile.in | 2 +- + SDL_mixer.pc.in | 1 + + configure.in | 1 - + 3 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Makefile.in b/Makefile.in +index 3d10565..ce4efd4 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -63,7 +63,7 @@ $(objects): + .PHONY: all install install-hdrs install-lib install-bin uninstall uninstall-hdrs uninstall-lib uninstall-bin clean distclean dist + + $(objects)/$(TARGET): $(OBJECTS) $(VERSION_OBJECTS) +- $(LIBTOOL) --mode=link $(CC) -o $@ $(OBJECTS) $(VERSION_OBJECTS) $(LDFLAGS) $(EXTRA_LDFLAGS) $(LT_LDFLAGS) ++ $(LIBTOOL) --mode=link $(CC) -o $@ $(OBJECTS) $(VERSION_OBJECTS) $(LDFLAGS) $(SDL_LIBS) $(EXTRA_LDFLAGS) $(LT_LDFLAGS) + + $(objects)/playwave$(EXE): $(objects)/playwave.lo $(objects)/$(TARGET) + $(LIBTOOL) --mode=link $(CC) -o $@ $(objects)/playwave.lo $(SDL_CFLAGS) $(SDL_LIBS) $(objects)/$(TARGET) +diff --git a/SDL_mixer.pc.in b/SDL_mixer.pc.in +index 1c4965d..d793521 100644 +--- a/SDL_mixer.pc.in ++++ b/SDL_mixer.pc.in +@@ -8,5 +8,6 @@ Description: mixer library for Simple DirectMedia Layer + Version: @VERSION@ + Requires: sdl >= @SDL_VERSION@ + Libs: -L${libdir} -lSDL_mixer ++Libs.private: @EXTRA_LDFLAGS@ + Cflags: -I${includedir}/SDL + +diff --git a/configure.in b/configure.in +index 2272b29..442eca6 100644 +--- a/configure.in ++++ b/configure.in +@@ -202,7 +202,6 @@ AM_PATH_SDL($SDL_VERSION, + AC_MSG_ERROR([*** SDL version $SDL_VERSION not found!]) + ) + EXTRA_CFLAGS="$EXTRA_CFLAGS $SDL_CFLAGS" +-EXTRA_LDFLAGS="$EXTRA_LDFLAGS $SDL_LIBS" + + dnl Check for math library + AC_CHECK_LIB(m, pow, [LIBM="-lm"]) +-- +2.1.4 + diff --git a/package/sdl_mixer/0002-add-LDFLAGS-while-linking.patch b/package/sdl_mixer/0002-add-LDFLAGS-while-linking.patch new file mode 100644 index 00000000..41446607 --- /dev/null +++ b/package/sdl_mixer/0002-add-LDFLAGS-while-linking.patch @@ -0,0 +1,29 @@ +Pass LDFLAGS while creating binaries. + +Fixes following linking error with uClibc-ng: +br/output/host/usr/lib/gcc/powerpc-buildroot-linux-uclibc/5.4.0/libgcc.a(unwind-dw2-fde-dip.o): In function `_Unwind_Find_FDE': +br/output/build/host-gcc-final-5.4.0/build/powerpc-buildroot-linux-uclibc/libgcc/../../../libgcc/unwind-dw2-fde-dip.c:465: undefined reference to `dl_iterate_phdr' +collect2: error: ld returned 1 exit status + +Since uClibc-ng 1.0.18 a circular dependency between libc and libgcc +exist, when static linking is used. It can be resolved by the compiler +when -static is correctly passed in the linking step. + +Signed-off-by: Waldemar Brodkorb + +diff -Nur SDL_mixer-1.2.12.orig/Makefile.in SDL_mixer-1.2.12/Makefile.in +--- SDL_mixer-1.2.12.orig/Makefile.in 2012-01-15 23:01:04.000000000 +0100 ++++ SDL_mixer-1.2.12/Makefile.in 2016-12-07 08:29:22.479786596 +0100 +@@ -66,10 +66,10 @@ + $(LIBTOOL) --mode=link $(CC) -o $@ $(OBJECTS) $(VERSION_OBJECTS) $(LDFLAGS) $(EXTRA_LDFLAGS) $(LT_LDFLAGS) + + $(objects)/playwave$(EXE): $(objects)/playwave.lo $(objects)/$(TARGET) +- $(LIBTOOL) --mode=link $(CC) -o $@ $(objects)/playwave.lo $(SDL_CFLAGS) $(SDL_LIBS) $(objects)/$(TARGET) ++ $(LIBTOOL) --mode=link $(CC) -o $@ $(objects)/playwave.lo $(SDL_CFLAGS) $(SDL_LIBS) $(LDFLAGS) $(objects)/$(TARGET) + + $(objects)/playmus$(EXE): $(objects)/playmus.lo $(objects)/$(TARGET) +- $(LIBTOOL) --mode=link $(CC) -o $@ $(objects)/playmus.lo $(SDL_CFLAGS) $(SDL_LIBS) $(objects)/$(TARGET) ++ $(LIBTOOL) --mode=link $(CC) -o $@ $(objects)/playmus.lo $(SDL_CFLAGS) $(SDL_LIBS) $(LDFLAGS) $(objects)/$(TARGET) + + install: all install-hdrs install-lib #install-bin + install-hdrs: diff --git a/package/sdl_mixer/0003-Fix-include-of-modplug.h.patch b/package/sdl_mixer/0003-Fix-include-of-modplug.h.patch new file mode 100644 index 00000000..841cef4e --- /dev/null +++ b/package/sdl_mixer/0003-Fix-include-of-modplug.h.patch @@ -0,0 +1,33 @@ +From fb8e7c535a88838cc8ae364cd2a099df6316d3b0 Mon Sep 17 00:00:00 2001 +From: Paul Cercueil +Date: Tue, 30 Apr 2019 23:12:15 +0200 +Subject: [PATCH] Fix include of modplug.h + +The include path should be , since the library +doesn't provide any specific include path in its pkg-config file. + +This patch was obtained from this bug report: +https://bugzilla.libsdl.org/show_bug.cgi?id=4893 + +Signed-off-by: Paul Cercueil + +--- + music_modplug.h | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/music_modplug.h b/music_modplug.h +index 92cbafd..49abbb0 100644 +--- a/music_modplug.h ++++ b/music_modplug.h +@@ -1,6 +1,7 @@ + #ifdef MODPLUG_MUSIC + +-#include "modplug.h" ++#include ++ + #include "SDL_rwops.h" + #include "SDL_audio.h" + #include "SDL_mixer.h" +-- +2.21.0.593.g511ec345e18 + diff --git a/package/sdl_mixer/0004-configure__set_macro_directory.patch b/package/sdl_mixer/0004-configure__set_macro_directory.patch new file mode 100644 index 00000000..5b47f0e8 --- /dev/null +++ b/package/sdl_mixer/0004-configure__set_macro_directory.patch @@ -0,0 +1,34 @@ +# HG changeset patch +# User "Yann E. MORIN" +# Date 1581183281 -3600 +# Sat Feb 08 18:34:41 2020 +0100 +# Node ID 753a1f394620056c35790a571ff5f7c248445943 +# Parent eb5f08bf9994bf5164ca68015f2e030c2c9dddcd +configure: set macro directory + +Setting the macro directory in configure.in, rather than specifying it +on the command line, ensures that it is properly searched in the correct +order, and that autoreconf properly updates our macros with the newer +system ones, if any. + +Fixes: + http://autobuild.buildroot.org/results/63a/63ae0bddb3c4436efe967c318e299047f496c5a5/build-end.log + + libtool: Version mismatch error. This is libtool 2.4.6, but the + libtool: definition of this LT_INIT comes from libtool 2.2.6. + libtool: You should recreate aclocal.m4 with macros from libtool 2.4.6 + libtool: and run autoconf again. + +Signed-off-by: Yann E. MORIN + +diff --git a/configure.in b/configure.in +--- a/configure.in ++++ b/configure.in +@@ -1,6 +1,7 @@ + dnl Process this file with autoconf to produce a configure script. + AC_INIT(README) + AC_CONFIG_AUX_DIR(build-scripts) ++AC_CONFIG_MACRO_DIR([acinclude]) + + dnl Set various version strings - taken gratefully from the GTk sources + diff --git a/package/sdl_mixer/Config.in b/package/sdl_mixer/Config.in new file mode 100644 index 00000000..a886b7c1 --- /dev/null +++ b/package/sdl_mixer/Config.in @@ -0,0 +1,21 @@ +config BR2_PACKAGE_SDL_MIXER + bool "SDL_mixer" + depends on BR2_PACKAGE_SDL + help + SDL_mixer is a sample multi-channel audio mixer library. + It supports any number of simultaneously playing channels of + 16 bit stereo audio, plus a single channel of music, mixed + by the popular MikMod MOD, Timidity MIDI, Ogg Vorbis, and + SMPEG MP3 libraries. + + http://www.libsdl.org/projects/SDL_mixer/ + +if BR2_PACKAGE_SDL_MIXER + +config BR2_PACKAGE_SDL_MIXER_MIDI_TIMIDITY + bool "MIDI support with built-in Timidity synth" + help + Support MIDI audio using the built-in synth based on Timidity. + You will need MIDI instruments installed in the filesystem. + +endif diff --git a/package/sdl_mixer/sdl_mixer.hash b/package/sdl_mixer/sdl_mixer.hash new file mode 100644 index 00000000..5d7e7836 --- /dev/null +++ b/package/sdl_mixer/sdl_mixer.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 1644308279a975799049e4826af2cfc787cad2abb11aa14562e402521f86992a SDL_mixer-1.2.12.tar.gz +sha256 bc4c3bc32b311044d81c32b5e5402a6bc971a3b235850bb63445ec14bb6fe59e COPYING diff --git a/package/sdl_mixer/sdl_mixer.mk b/package/sdl_mixer/sdl_mixer.mk new file mode 100644 index 00000000..9636c228 --- /dev/null +++ b/package/sdl_mixer/sdl_mixer.mk @@ -0,0 +1,72 @@ +################################################################################ +# +# sdl_mixer +# +################################################################################ + +SDL_MIXER_VERSION = 1.2.12 +SDL_MIXER_SOURCE = SDL_mixer-$(SDL_MIXER_VERSION).tar.gz +SDL_MIXER_SITE = http://www.libsdl.org/projects/SDL_mixer/release +SDL_MIXER_LICENSE = Zlib +SDL_MIXER_LICENSE_FILES = COPYING + +# Package does not build in parallel due to improper make rules +SDL_MIXER_MAKE = $(MAKE1) + +SDL_MIXER_INSTALL_STAGING = YES +SDL_MIXER_DEPENDENCIES = sdl + +# We're patching configure.in, so we need to autoreconf +SDL_MIXER_AUTORECONF = YES + +SDL_MIXER_CONF_OPTS = \ + --without-x \ + --with-sdl-prefix=$(STAGING_DIR)/usr \ + --disable-music-mod \ + --disable-music-mp3 \ + --disable-music-flac # configure script fails when cross compiling + +ifeq ($(BR2_PACKAGE_FLUIDSYNTH),y) +SDL_MIXER_DEPENDENCIES += fluidsynth +SDL_MIXER_CONF_OPTS += \ + --enable-music-midi \ + --enable-music-fluidsynth-midi +SDL_MIXER_HAS_MIDI = YES +endif + +ifeq ($(BR2_PACKAGE_SDL_MIXER_MIDI_TIMIDITY),y) +SDL_MIXER_CONF_OPTS += \ + --enable-music-midi \ + --enable-music-timidity-midi +SDL_MIXER_HAS_MIDI = YES +endif + +ifneq ($(SDL_MIXER_HAS_MIDI),YES) +SDL_MIXER_CONF_OPTS += --disable-music-midi +endif + +ifeq ($(BR2_PACKAGE_LIBMAD),y) +SDL_MIXER_CONF_OPTS += --enable-music-mp3-mad-gpl +SDL_MIXER_DEPENDENCIES += libmad +else +SDL_MIXER_CONF_OPTS += --disable-music-mp3-mad-gpl +endif + +ifeq ($(BR2_PACKAGE_LIBMODPLUG),y) +SDL_MIXER_CONF_OPTS += --enable-music-mod-modplug +SDL_MIXER_DEPENDENCIES += host-pkgconf libmodplug +else +SDL_MIXER_CONF_OPTS += --disable-music-mod-modplug +endif + +ifeq ($(BR2_PACKAGE_TREMOR),y) +SDL_MIXER_CONF_OPTS += --enable-music-ogg-tremor +SDL_MIXER_DEPENDENCIES += tremor +else ifeq ($(BR2_PACKAGE_LIBVORBIS),y) +SDL_MIXER_CONF_OPTS += --enable-music-ogg +SDL_MIXER_DEPENDENCIES += libvorbis +else +SDL_MIXER_CONF_OPTS += --disable-music-ogg +endif + +$(eval $(autotools-package)) diff --git a/package/sdl_net/Config.in b/package/sdl_net/Config.in new file mode 100644 index 00000000..2d9cbe1c --- /dev/null +++ b/package/sdl_net/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_SDL_NET + bool "SDL_net" + depends on BR2_PACKAGE_SDL + help + SDL_net is a small, low-level, cross-platform network + library, that can be used with the Simple DirectMedia Layer + library (SDL). + + http://www.libsdl.org/projects/SDL_net/ diff --git a/package/sdl_net/sdl_net.hash b/package/sdl_net/sdl_net.hash new file mode 100644 index 00000000..4f2e1ae7 --- /dev/null +++ b/package/sdl_net/sdl_net.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 5f4a7a8bb884f793c278ac3f3713be41980c5eedccecff0260411347714facb4 SDL_net-1.2.8.tar.gz +sha256 e542f822a6cd82deccf82cf0f50192917b0158d725a6bc6348ab1ccdd890ecbe COPYING diff --git a/package/sdl_net/sdl_net.mk b/package/sdl_net/sdl_net.mk new file mode 100644 index 00000000..c7e409a1 --- /dev/null +++ b/package/sdl_net/sdl_net.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# sdl_net +# +################################################################################ + +SDL_NET_VERSION = 1.2.8 +SDL_NET_SITE = http://www.libsdl.org/projects/SDL_net/release +SDL_NET_SOURCE = SDL_net-$(SDL_NET_VERSION).tar.gz +SDL_NET_LICENSE = Zlib +SDL_NET_LICENSE_FILES = COPYING + +SDL_NET_CONF_OPTS = \ + --with-sdl-prefix=$(STAGING_DIR)/usr \ + --with-sdl-exec-prefix=$(STAGING_DIR)/usr + +SDL_NET_INSTALL_STAGING = YES + +SDL_NET_DEPENDENCIES = sdl + +$(eval $(autotools-package)) diff --git a/package/sdl_sound/0001-fix-constness.patch b/package/sdl_sound/0001-fix-constness.patch new file mode 100644 index 00000000..1f27a071 --- /dev/null +++ b/package/sdl_sound/0001-fix-constness.patch @@ -0,0 +1,16 @@ +decoders/speex: fix constness of speex mode + +Signed-off-by: "Yann E. MORIN" + +diff -durN sdl_sound-1.0.3.orig/decoders/speex.c sdl_sound-1.0.3/decoders/speex.c +--- sdl_sound-1.0.3.orig/decoders/speex.c 2014-11-17 19:40:09.543553556 +0100 ++++ sdl_sound-1.0.3/decoders/speex.c 2014-11-17 19:40:37.119864580 +0100 +@@ -124,7 +124,7 @@ + + static int process_header(speex_t *speex, Sound_Sample *sample) + { +- SpeexMode *mode; ++ const SpeexMode * mode; + SpeexHeader *hptr; + SpeexHeader header; + int enh_enabled = SPEEX_USE_PERCEPTUAL_ENHANCER; diff --git a/package/sdl_sound/0002-remove-werror.patch b/package/sdl_sound/0002-remove-werror.patch new file mode 100644 index 00000000..c08bbdb8 --- /dev/null +++ b/package/sdl_sound/0002-remove-werror.patch @@ -0,0 +1,29 @@ +Do not add -Werror when --enable-debug is used + +Using -Werror causes some problems due to warnings in the SDL_sound +code, so let's disable it. + +We patch configure directly, because: + + 1/ configure.in doesn't autoreconf properly out of the box. + + 2/ the length of the configure or configure.in patch would be exactly + the same (one line), or maybe more for the configure.in patch if + we want the package to autoreconf properly + + 3/ the patch will never go upstream, because upstream is dead. + +Signed-off-by: Thomas Petazzoni + +Index: b/configure +=================================================================== +--- a/configure ++++ b/configure +@@ -19561,7 +19561,6 @@ + else + CFLAGS="-O0" + fi +- CFLAGS="$CFLAGS -Werror" + + cat >>confdefs.h <<\_ACEOF + #define DEBUG 1 diff --git a/package/sdl_sound/0003-renamed-physfs-export.patch b/package/sdl_sound/0003-renamed-physfs-export.patch new file mode 100644 index 00000000..3aeded32 --- /dev/null +++ b/package/sdl_sound/0003-renamed-physfs-export.patch @@ -0,0 +1,32 @@ +This patch is taken from the Arch Linux User Repository, see: +https://aur.archlinux.org/packages/sdl_sound-patched-hg/ + +Signed-off-by: Sam Bobroff + +diff -ru SDL_sound.orig/playsound/physfsrwops.h SDL_sound/playsound/physfsrwops.h +--- SDL_sound.orig/playsound/physfsrwops.h 2014-01-11 06:28:35.494936000 +0100 ++++ SDL_sound/playsound/physfsrwops.h 2014-01-11 06:31:38.315675483 +0100 +@@ -29,6 +29,11 @@ + extern "C" { + #endif + ++/* renamed in physfs dev, add alias */ ++#ifdef PHYSFS_DECL ++#define __EXPORT__ PHYSFS_DECL ++#endif ++ + /** + * Open a platform-independent filename for reading, and make it accessible + * via an SDL_RWops structure. The file will be closed in PhysicsFS when the +@@ -77,6 +82,11 @@ + */ + __EXPORT__ SDL_RWops *PHYSFSRWOPS_makeRWops(PHYSFS_file *handle); + ++/* renamed in physfs dev, remove alias */ ++#ifdef PHYSFS_DECL ++#undef __EXPORT__ ++#endif ++ + #ifdef __cplusplus + } + #endif diff --git a/package/sdl_sound/Config.in b/package/sdl_sound/Config.in new file mode 100644 index 00000000..6da19853 --- /dev/null +++ b/package/sdl_sound/Config.in @@ -0,0 +1,23 @@ +config BR2_PACKAGE_SDL_SOUND + bool "SDL_sound" + depends on BR2_PACKAGE_SDL + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + help + SDL_sound is a library that handles the decoding of several + popular sound file formats, such as .WAV and .MP3. + It is meant to make the programmer's sound playback tasks + simpler. The programmer gives SDL_sound a filename, or feeds + it data directly from one of many sources, and then reads the + decoded waveform data back at her leisure. + + http://icculus.org/SDL_sound/ + +if BR2_PACKAGE_SDL_SOUND + +config BR2_PACKAGE_SDL_SOUND_PLAYSOUND + bool "install playsound tool" + help + Enable this option to install the playsound/playsound_simple + tools to target. + +endif diff --git a/package/sdl_sound/sdl_sound.hash b/package/sdl_sound/sdl_sound.hash new file mode 100644 index 00000000..1ea76b0b --- /dev/null +++ b/package/sdl_sound/sdl_sound.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 3999fd0bbb485289a52be14b2f68b571cb84e380cc43387eadf778f64c79e6df SDL_sound-1.0.3.tar.gz +sha256 2a781dd2f8c5435c59cfa3b79dfea1c1d7df676ed318ecc802139f76ac345d07 COPYING diff --git a/package/sdl_sound/sdl_sound.mk b/package/sdl_sound/sdl_sound.mk new file mode 100644 index 00000000..c6028e79 --- /dev/null +++ b/package/sdl_sound/sdl_sound.mk @@ -0,0 +1,74 @@ +################################################################################ +# +# sdl_sound +# +################################################################################ + +SDL_SOUND_VERSION = 1.0.3 +SDL_SOUND_SOURCE = SDL_sound-$(SDL_SOUND_VERSION).tar.gz +SDL_SOUND_SITE = http://icculus.org/SDL_sound/downloads +SDL_SOUND_LICENSE = LGPL-2.1+ +SDL_SOUND_LICENSE_FILES = COPYING +SDL_SOUND_INSTALL_STAGING = YES +SDL_SOUND_DEPENDENCIES = sdl +SDL_SOUND_CONF_OPTS = \ + --with-sdl-prefix=$(STAGING_DIR)/usr \ + --with-sdl-exec-prefix=$(STAGING_DIR)/usr \ + --disable-sdltest \ + --enable-static + +ifneq ($(BR2_ENABLE_LOCALE),y) +SDL_SOUND_DEPENDENCIES += libiconv +endif + +# optional dependencies +ifeq ($(BR2_PACKAGE_FLAC)$(BR2_PACKAGE_LIBOGG),yy) +SDL_SOUND_CONF_OPTS += --enable-flac +SDL_SOUND_DEPENDENCIES += flac libogg +else +SDL_SOUND_CONF_OPTS += --disable-flac +endif + +ifeq ($(BR2_PACKAGE_LIBMODPLUG),y) +SDL_SOUND_CONF_OPTS += --enable-modplug +SDL_SOUND_DEPENDENCIES += libmodplug +else +SDL_SOUND_CONF_OPTS += --disable-modplug +endif + +ifeq ($(BR2_PACKAGE_LIBVORBIS),y) +SDL_SOUND_CONF_OPTS += --enable-ogg +SDL_SOUND_DEPENDENCIES += libvorbis +else +SDL_SOUND_CONF_OPTS += --disable-ogg +endif + +ifeq ($(BR2_PACKAGE_SPEEX),y) +SDL_SOUND_CONF_OPTS += --enable-speex +SDL_SOUND_DEPENDENCIES += speex +else +SDL_SOUND_CONF_OPTS += --disable-speex +endif + +ifeq ($(BR2_PACKAGE_PHYSFS),y) +SDL_SOUND_CONF_OPTS += --enable-physfs +SDL_SOUND_DEPENDENCIES += physfs +else +SDL_SOUND_CONF_OPTS += --disable-physfs +endif + +ifeq ($(BR2_X86_CPU_HAS_MMX),y) +SDL_SOUND_CONF_OPTS += --enable-mmx +else +SDL_SOUND_CONF_OPTS += --disable-mmx +endif + +define SDL_SOUND_REMOVE_PLAYSOUND + rm $(addprefix $(TARGET_DIR)/usr/bin/,playsound playsound_simple) +endef + +ifneq ($(BR2_PACKAGE_SDL_SOUND_PLAYSOUND),y) +SDL_SOUND_POST_INSTALL_TARGET_HOOKS += SDL_SOUND_REMOVE_PLAYSOUND +endif + +$(eval $(autotools-package)) diff --git a/package/sdl_ttf/Config.in b/package/sdl_ttf/Config.in new file mode 100644 index 00000000..efc92e5a --- /dev/null +++ b/package/sdl_ttf/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_SDL_TTF + bool "SDL_TTF" + depends on BR2_PACKAGE_SDL + select BR2_PACKAGE_FREETYPE + help + SDL_ttf is a sample TrueType font library. It allows you to + use TrueType fonts in your SDL applications. + + http://www.libsdl.org/projects/SDL_ttf/ diff --git a/package/sdl_ttf/sdl_ttf.hash b/package/sdl_ttf/sdl_ttf.hash new file mode 100644 index 00000000..97416c18 --- /dev/null +++ b/package/sdl_ttf/sdl_ttf.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 f7bf5f6a4a21542a6ce5440dc0d81f3a26d029ee689e1fade62925b1e6667bd9 de50cffd41e6.tar.gz +sha256 b609721d3d4ac67facaf86f068c8b311b6c5f6cef89b6d84268aa38b7867ab7b COPYING diff --git a/package/sdl_ttf/sdl_ttf.mk b/package/sdl_ttf/sdl_ttf.mk new file mode 100644 index 00000000..9ac12ef5 --- /dev/null +++ b/package/sdl_ttf/sdl_ttf.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# sdl_ttf +# +################################################################################ + +# There is unlikely to be a new SDL_ttf release for the foreseeable future: +# https://bugzilla.libsdl.org/show_bug.cgi?id=5344#c1 +# +# The unreleased version from HEAD as of 2020-11-09 has several bugfixes +# and DPI scaling support: +# https://hg.libsdl.org/SDL_ttf/rev/7dbd7cd826d6 +# +# DPI scaling is used for rendering on HiDPI displays and displays +# with non-square pixels. +SDL_TTF_VERSION = de50cffd41e6 +SDL_TTF_SOURCE = $(SDL_TTF_VERSION).tar.gz +SDL_TTF_SITE = https://hg.libsdl.org/SDL_ttf/archive +SDL_TTF_LICENSE = Zlib +SDL_TTF_LICENSE_FILES = COPYING + +SDL_TTF_INSTALL_STAGING = YES +SDL_TTF_DEPENDENCIES = sdl freetype +SDL_TTF_CONF_OPTS = \ + --without-x \ + --with-freetype-prefix=$(STAGING_DIR)/usr \ + --with-sdl-prefix=$(STAGING_DIR)/usr + +SDL_TTF_MAKE_OPTS = INCLUDES="-I$(STAGING_DIR)/usr/include/SDL" LDFLAGS="-L$(STAGING_DIR)/usr/lib" +$(eval $(autotools-package)) diff --git a/package/sdparm/Config.in b/package/sdparm/Config.in new file mode 100644 index 00000000..cec0f840 --- /dev/null +++ b/package/sdparm/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_SDPARM + bool "sdparm" + help + Utility to accesses SCSI device parameters. + + http://sg.danny.cz/sg/sdparm.html diff --git a/package/sdparm/sdparm.hash b/package/sdparm/sdparm.hash new file mode 100644 index 00000000..22d6b5b8 --- /dev/null +++ b/package/sdparm/sdparm.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 7dc9e148cef22744e00809dad21b59ac544e3615001bc1b2399978f73e1d58ca sdparm-1.10.tar.xz +sha256 4f98444e14adb18a94a65c3ded5f0dad42d382c6a2288b593a2d5bd5ecc4f46d COPYING diff --git a/package/sdparm/sdparm.mk b/package/sdparm/sdparm.mk new file mode 100644 index 00000000..b9fac518 --- /dev/null +++ b/package/sdparm/sdparm.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# sdparm +# +################################################################################ + +SDPARM_VERSION = 1.10 +SDPARM_SOURCE = sdparm-$(SDPARM_VERSION).tar.xz +SDPARM_SITE = http://sg.danny.cz/sg/p +SDPARM_LICENSE = BSD-3-Clause +SDPARM_LICENSE_FILES = COPYING + +ifeq ($(BR2_PACKAGE_SG3_UTILS),y) +SDPARM_DEPENDENCIES += sg3_utils +else +SDPARM_CONF_OPTS += --disable-libsgutils +endif + +$(eval $(autotools-package)) diff --git a/package/sed/Config.in b/package/sed/Config.in new file mode 100644 index 00000000..b8d182aa --- /dev/null +++ b/package/sed/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_SED + bool "sed" + depends on BR2_USE_WCHAR + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + help + sed (stream editor) is a non-interactive command-line text + editor. + + https://www.gnu.org/software/sed/ + +comment "sed needs a toolchain w/ wchar" + depends on !BR2_USE_WCHAR + depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS diff --git a/package/sed/sed.hash b/package/sed/sed.hash new file mode 100644 index 00000000..bb481285 --- /dev/null +++ b/package/sed/sed.hash @@ -0,0 +1,6 @@ +# Locally calculated after checking pgp signature +# https://ftp.gnu.org/gnu/sed/sed-4.8.tar.xz.sig +# with the key 155D3FC500C834486D1EEA677FD9FCCB000BEEEE +sha256 f79b0cfea71b37a8eeec8490db6c5f7ae7719c35587f21edb0617f370eeff633 sed-4.8.tar.xz +# Locally calculated +sha256 e79e9c8a0c85d735ff98185918ec94ed7d175efc377012787aebcf3b80f0d90b COPYING diff --git a/package/sed/sed.mk b/package/sed/sed.mk new file mode 100644 index 00000000..64fb2035 --- /dev/null +++ b/package/sed/sed.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# sed +# +################################################################################ + +SED_VERSION = 4.8 +SED_SOURCE = sed-$(SED_VERSION).tar.xz +SED_SITE = $(BR2_GNU_MIRROR)/sed +SED_LICENSE = GPL-3.0 +SED_LICENSE_FILES = COPYING +SED_CPE_ID_VENDOR = gnu + +SED_CONF_OPTS = \ + --bindir=/bin \ + --libdir=/lib \ + --libexecdir=/usr/lib \ + --sysconfdir=/etc \ + --datadir=/usr/share \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info \ + --include=$(STAGING_DIR)/usr/include + +$(eval $(autotools-package)) diff --git a/package/sedutil/0001-Common-log.h-time-2-needs-time.h.patch b/package/sedutil/0001-Common-log.h-time-2-needs-time.h.patch new file mode 100644 index 00000000..9cf74b67 --- /dev/null +++ b/package/sedutil/0001-Common-log.h-time-2-needs-time.h.patch @@ -0,0 +1,37 @@ +From a7a48e1cda997afbfcdd985c594c3ec0516b6279 Mon Sep 17 00:00:00 2001 +From: Peter Korsgaard +Date: Tue, 25 Sep 2018 22:49:58 +0200 +Subject: [PATCH] Common/log.h: time(2) needs +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Otherwise the build fails with: + +In file included from ./linux/os.h:28:0, + from Common/DtaOptions.cpp:20: +./Common/log.h: In function ‘std::__cxx11::string NowTime()’: +./Common/log.h:349:12: error: ‘time’ was not declared in this scope + time(&t); + +Upstream-status: https://github.com/Drive-Trust-Alliance/sedutil/pull/250 +Signed-off-by: Peter Korsgaard +--- + Common/log.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/Common/log.h b/Common/log.h +index 8c08c40..2b718ad 100644 +--- a/Common/log.h ++++ b/Common/log.h +@@ -341,6 +341,7 @@ inline std::string NowTime() { + + #else + ++#include + #include + + inline std::string NowTime() { +-- +2.11.0 + diff --git a/package/sedutil/Config.in b/package/sedutil/Config.in new file mode 100644 index 00000000..f3452b60 --- /dev/null +++ b/package/sedutil/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_SEDUTIL_ARCH_SUPPORTS + bool + # no big endian support + default y if BR2_arcle || BR2_arm || BR2_aarch64 || BR2_csky \ + || BR2_i386 || BR2_microblazeel || BR2_mipsel \ + || BR2_mips64el || BR2_nios2 || BR2_powerpc64le \ + || BR2_sh4 || BR2_sh4a || BR2_x86_64 \ + || BR2_XTENSA_LITTLE_ENDIAN + +config BR2_PACKAGE_SEDUTIL + bool "sedutil" + depends on BR2_PACKAGE_SEDUTIL_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12 # linux/nvme.h + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11 + depends on !BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS # 4.4.1 headers + depends on BR2_INSTALL_LIBSTDCPP + help + The Drive Trust Alliance Self Encrypting Drive Utility, + allowing configuration the SEDs that comply with the + TCG OPAL 2.00 standard. + + https://github.com/Drive-Trust-Alliance/sedutil + +comment "sedutil needs a toolchain w/ C++, gcc >= 4.8, headers >= 3.12" + depends on BR2_PACKAGE_SEDUTIL_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 || \ + !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12 diff --git a/package/sedutil/sedutil.hash b/package/sedutil/sedutil.hash new file mode 100644 index 00000000..9db10113 --- /dev/null +++ b/package/sedutil/sedutil.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 9259466b4f73af276153c5245834a56f48f8721ea7263611b5d5e8326bc43d9e sedutil-1.15.1.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 Common/LICENSE.txt diff --git a/package/sedutil/sedutil.mk b/package/sedutil/sedutil.mk new file mode 100644 index 00000000..c80e4344 --- /dev/null +++ b/package/sedutil/sedutil.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# sedutil +# +################################################################################ + +SEDUTIL_VERSION = 1.15.1 +SEDUTIL_SITE = $(call github,Drive-Trust-Alliance,sedutil,$(SEDUTIL_VERSION)) +SEDUTIL_LICENSE = GPL-3.0+ +SEDUTIL_LICENSE_FILES = Common/LICENSE.txt +# Fetched from Github with no configure script +SEDUTIL_AUTORECONF = YES + +# Calls git to figure out version info +define SEDUTIL_SET_VERSION + echo '#define GIT_VERSION "$(SEDUTIL_VERSION)"' > $(@D)/linux/Version.h +endef +SEDUTIL_POST_CONFIGURE_HOOKS += SEDUTIL_SET_VERSION + +$(eval $(autotools-package)) diff --git a/package/selinux-python/Config.in b/package/selinux-python/Config.in new file mode 100644 index 00000000..0f1c2817 --- /dev/null +++ b/package/selinux-python/Config.in @@ -0,0 +1,48 @@ +config BR2_PACKAGE_SELINUX_PYTHON + bool "selinux-python" + depends on !BR2_PACKAGE_PYTHON + depends on BR2_USE_MMU + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + select BR2_PACKAGE_PYTHON3 + help + A set of SELinux tools written in python that help with + managing a system with SELinux enabled. If no packages are + selected nothing will actually be built. + + https://github.com/SELinuxProject/selinux/wiki + +if BR2_PACKAGE_SELINUX_PYTHON + +config BR2_PACKAGE_SELINUX_PYTHON_AUDIT2ALLOW + bool "audit2allow" + select BR2_PACKAGE_CHECKPOLICY + select BR2_PACKAGE_SELINUX_PYTHON_SEPOLGEN + select BR2_PACKAGE_SEMODULE_UTILS + help + This module installs two programs: + + audit2allow - Generate SELinux policy allow/dontaudit rules + from logs of denied operations. + + audit2why - translates SELinux audit messages into a + description of why the access was denied (audit2allow -w) + +config BR2_PACKAGE_SELINUX_PYTHON_SEPOLGEN + bool "sepolgen" + select BR2_PACKAGE_SEMODULE_UTILS + help + This package contains a Python module that allows you to + generate an initial SELinux policy module template. + +endif + +comment "selinux-python needs python3" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_PYTHON + +comment "selinux-python packages needs a toolchain w/ wchar, threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS diff --git a/package/selinux-python/selinux-python.hash b/package/selinux-python/selinux-python.hash new file mode 100644 index 00000000..f896168f --- /dev/null +++ b/package/selinux-python/selinux-python.hash @@ -0,0 +1,5 @@ +# https://github.com/SELinuxProject/selinux/wiki/Releases +sha256 f4d0a1a030bc291a6af498b26e0676b745075dd289a8ba16cdec86c3ea8f2f02 selinux-python-3.1.tar.gz + +# Hash for license file +sha256 204d8eff92f95aac4df6c8122bc1505f468f3a901e5a4cc08940e0ede1938994 COPYING diff --git a/package/selinux-python/selinux-python.mk b/package/selinux-python/selinux-python.mk new file mode 100644 index 00000000..3b1e15bd --- /dev/null +++ b/package/selinux-python/selinux-python.mk @@ -0,0 +1,42 @@ +################################################################################ +# +# selinux-python +# +################################################################################ + +SELINUX_PYTHON_VERSION = 3.1 +SELINUX_PYTHON_SITE = https://github.com/SELinuxProject/selinux/releases/download/20200710 +SELINUX_PYTHON_LICENSE = GPL-2.0 +SELINUX_PYTHON_LICENSE_FILES = COPYING +SELINUX_PYTHON_DEPENDENCIES = python3 + +SELINUX_PYTHON_MAKE_OPTS += \ + $(TARGET_CONFIGURE_OPTS) \ + ARCH="$(BR2_ARCH)" \ + LIBDIR="$(STAGING_DIR)/usr/lib" \ + PYTHONLIBDIR="usr/lib/python$(PYTHON3_VERSION_MAJOR)" + +ifeq ($(BR2_PACKAGE_SELINUX_PYTHON_AUDIT2ALLOW),y) +SELINUX_PYTHON_DEPENDENCIES += checkpolicy +SELINUX_PYTHON_MAKE_DIRS += audit2allow +endif + +ifeq ($(BR2_PACKAGE_SELINUX_PYTHON_SEPOLGEN),y) +SELINUX_PYTHON_MAKE_DIRS += sepolgen/src/sepolgen +endif + +define SELINUX_PYTHON_BUILD_CMDS + $(foreach d,$(SELINUX_PYTHON_MAKE_DIRS), + $(MAKE) -C $(@D)/$(d) $(SELINUX_PYTHON_MAKE_OPTS) \ + all + ) +endef + +define SELINUX_PYTHON_INSTALL_TARGET_CMDS + $(foreach d,$(SELINUX_PYTHON_MAKE_DIRS), + $(MAKE) -C $(@D)/$(d) $(SELINUX_PYTHON_MAKE_OPTS) \ + DESTDIR=$(TARGET_DIR) install + ) +endef + +$(eval $(generic-package)) diff --git a/package/semodule-utils/Config.in b/package/semodule-utils/Config.in new file mode 100644 index 00000000..38e043dc --- /dev/null +++ b/package/semodule-utils/Config.in @@ -0,0 +1,19 @@ +config BR2_PACKAGE_SEMODULE_UTILS + bool "semodule-utils" + depends on BR2_TOOLCHAIN_HAS_THREADS # libsepol + select BR2_PACKAGE_LIBSEPOL + help + semodule-utils is a package that contains tools for handling + selinux modules. + + The package will install the following utilities: + * semodule_deps - Show the dependencies between SELinux + policy packages. + * semodule_expand - Expand a SELinux policy module package. + * semodule_link - Link SELinux policy module packages together + * semodule_package - Create a SELinux policy module package. + + https://github.com/SELinuxProject/selinux/wiki/Releases + +comment "semodule-utils needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/semodule-utils/semodule-utils.hash b/package/semodule-utils/semodule-utils.hash new file mode 100644 index 00000000..d015205d --- /dev/null +++ b/package/semodule-utils/semodule-utils.hash @@ -0,0 +1,5 @@ +# https://github.com/SELinuxProject/selinux/wiki/Releases +sha256 0cc37f9cec751d9c2abb5f2b228b060567e973cb47c19b53b8a4a7378baaa853 semodule-utils-3.1.tar.gz + +# Hash for license file +sha256 204d8eff92f95aac4df6c8122bc1505f468f3a901e5a4cc08940e0ede1938994 COPYING diff --git a/package/semodule-utils/semodule-utils.mk b/package/semodule-utils/semodule-utils.mk new file mode 100644 index 00000000..c89f28d6 --- /dev/null +++ b/package/semodule-utils/semodule-utils.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# semodule-utils +# +################################################################################ + +SEMODULE_UTILS_VERSION = 3.1 +SEMODULE_UTILS_SITE = https://github.com/SELinuxProject/selinux/releases/download/20200710 +SEMODULE_UTILS_LICENSE = GPL-2.0 +SEMODULE_UTILS_LICENSE_FILES = COPYING +SEMODULE_UTILS_DEPENDENCIES = libsepol + +SEMODULE_UTILS_MAKE_OPTS += \ + $(TARGET_CONFIGURE_OPTS) \ + LIBSEPOLA=$(STAGING_DIR)/usr/lib/libsepol.a + +# We need to pass DESTDIR at build time because it's used by +# semodule-utils build system to find headers and libraries. +define SEMODULE_UTILS_BUILD_CMDS + $(MAKE) -C $(@D) $(SEMODULE_UTILS_MAKE_OPTS) DESTDIR=$(STAGING_DIR) all +endef + +define SEMODULE_UTILS_INSTALL_TARGET_CMDS + $(MAKE) -C $(@D) $(SEMODULE_UTILS_MAKE_OPTS) DESTDIR=$(TARGET_DIR) install +endef + +$(eval $(generic-package)) diff --git a/package/sentry-cli/Config.in.host b/package/sentry-cli/Config.in.host new file mode 100644 index 00000000..31240153 --- /dev/null +++ b/package/sentry-cli/Config.in.host @@ -0,0 +1,10 @@ +config BR2_PACKAGE_HOST_SENTRY_CLI + bool "host sentry-cli" + depends on BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS + select BR2_PACKAGE_HOST_RUSTC + help + Official Sentry command line interface + + For managing debug information files and source maps. + + https://docs.sentry.io/cli/ diff --git a/package/sentry-cli/sentry-cli.hash b/package/sentry-cli/sentry-cli.hash new file mode 100644 index 00000000..3b0733a2 --- /dev/null +++ b/package/sentry-cli/sentry-cli.hash @@ -0,0 +1,3 @@ +# locally calculated +sha256 5d0f7acf6a139d1c1716b9a8ff76c8bfaab09104ba663c957bb9a5dba2ffbabd sentry-cli-1.57.0.tar.gz +sha256 9503def7b54ceb6e3cd182fd59bc05d3a30d7eae481e65aaba4b495133c83c14 LICENSE diff --git a/package/sentry-cli/sentry-cli.mk b/package/sentry-cli/sentry-cli.mk new file mode 100644 index 00000000..7e53f160 --- /dev/null +++ b/package/sentry-cli/sentry-cli.mk @@ -0,0 +1,32 @@ +################################################################################ +# +# sentry-cli +# +################################################################################ + +SENTRY_CLI_VERSION = 1.57.0 +SENTRY_CLI_SITE = $(call github,getsentry,sentry-cli,$(SENTRY_CLI_VERSION)) +SENTRY_CLI_LICENSE = BSD-3-clause +SENTRY_CLI_LICENSE_FILES = LICENSE + +HOST_SENTRY_CLI_DEPENDENCIES = host-rustc host-zlib + +HOST_SENTRY_CLI_CARGO_ENV = \ + CARGO_HOME=$(HOST_DIR)/share/cargo \ + RUSTFLAGS="$(addprefix -C link-args=,$(HOST_LDFLAGS))" + +HOST_SENTRY_CLI_CARGO_OPTS = \ + --release \ + --manifest-path=$(@D)/Cargo.toml + +define HOST_SENTRY_CLI_BUILD_CMDS + $(HOST_MAKE_ENV) $(HOST_SENTRY_CLI_CARGO_ENV) \ + cargo build $(HOST_SENTRY_CLI_CARGO_OPTS) +endef + +define HOST_SENTRY_CLI_INSTALL_CMDS + $(INSTALL) -D -m 0755 $(@D)/target/release/sentry-cli \ + $(HOST_DIR)/bin/sentry-cli +endef + +$(eval $(host-generic-package)) diff --git a/package/sentry-native/0001-sentry.h-include-ucontext.h.patch b/package/sentry-native/0001-sentry.h-include-ucontext.h.patch new file mode 100644 index 00000000..108f3892 --- /dev/null +++ b/package/sentry-native/0001-sentry.h-include-ucontext.h.patch @@ -0,0 +1,27 @@ +From 6a3b7b28f34c91c72d8b849903d93de2997b82f1 Mon Sep 17 00:00:00 2001 +From: Joseph Kogut +Date: Tue, 8 Sep 2020 11:40:01 -0700 +Subject: [PATCH] sentry.h: include ucontext.h + +This is included by signal.h in newer versions of glibc, but results +in an unknown type name error in older versions. + +Signed-off-by: Joseph Kogut +--- + include/sentry.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/include/sentry.h b/include/sentry.h +index 25754d9..a55cc00 100644 +--- a/include/sentry.h ++++ b/include/sentry.h +@@ -78,6 +78,7 @@ extern "C" { + # include + #else + # include ++# include + #endif + + /** +-- +2.28.0 diff --git a/package/sentry-native/Config.in b/package/sentry-native/Config.in new file mode 100644 index 00000000..7a3cbd36 --- /dev/null +++ b/package/sentry-native/Config.in @@ -0,0 +1,28 @@ +config BR2_PACKAGE_SENTRY_NATIVE + bool "sentry-native" + depends on BR2_INSTALL_LIBSTDCPP # google-breakpad + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # google-breakpad + depends on BR2_USE_WCHAR # google-breakpad + depends on BR2_TOOLCHAIN_HAS_THREADS # google-breakpad + # google-breakpad is restricted to glibc or uClibc, but + # sentry-native needs , so it restricts further to + # just glibc. + depends on BR2_TOOLCHAIN_USES_GLIBC + depends on BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS # google-breakpad + depends on BR2_PACKAGE_HOST_GOOGLE_BREAKPAD_ARCH_SUPPORTS # google-breakpad + select BR2_PACKAGE_GOOGLE_BREAKPAD + select BR2_PACKAGE_LIBCURL + help + The Sentry Native SDK is an error and crash + reporting client for native applications, + optimized for C and C++. + + https://github.com/getsentry/sentry-native + +comment "sentry-native needs a glibc toolchain with w/ wchar, thread, C++, gcc >= 4.8" + depends on BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GOOGLE_BREAKPAD_ARCH_SUPPORTS + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_HAS_THREADS || \ + !BR2_TOOLCHAIN_USES_GLIBC || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 diff --git a/package/sentry-native/sentry-native.hash b/package/sentry-native/sentry-native.hash new file mode 100644 index 00000000..dffc7aec --- /dev/null +++ b/package/sentry-native/sentry-native.hash @@ -0,0 +1,3 @@ +# locally calculated +sha256 a7d04fe9b9175c30a58ce20ae23b510595045a66884a447dd21ff2d0c749751b sentry-native-0.4.1.tar.gz +sha256 5ef07a3d95f1f779c1597c0fbaecbb7ba242128ff0587ed1e3214c7ac6154523 LICENSE diff --git a/package/sentry-native/sentry-native.mk b/package/sentry-native/sentry-native.mk new file mode 100644 index 00000000..f0743889 --- /dev/null +++ b/package/sentry-native/sentry-native.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# sentry-native +# +################################################################################ + +SENTRY_NATIVE_VERSION = 0.4.1 +SENTRY_NATIVE_SITE = $(call github,getsentry,sentry-native,$(SENTRY_NATIVE_VERSION)) +SENTRY_NATIVE_LICENSE = MIT +SENTRY_NATIVE_LICENSE_FILES = LICENSE +SENTRY_NATIVE_DEPENDENCIES = libcurl google-breakpad +SENTRY_NATIVE_INSTALL_STAGING = YES + +# Use the built system breakpad client instead of bundling +SENTRY_NATIVE_CONF_OPTS += -DSENTRY_BREAKPAD_SYSTEM=ON + +$(eval $(cmake-package)) diff --git a/package/ser2net/Config.in b/package/ser2net/Config.in new file mode 100644 index 00000000..3d110b70 --- /dev/null +++ b/package/ser2net/Config.in @@ -0,0 +1,10 @@ +config BR2_PACKAGE_SER2NET + bool "ser2net" + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_GENSIO + select BR2_PACKAGE_LIBYAML + help + Ser2net provides a way for a user to connect from a network + connection to a serial port. + + http://ser2net.sourceforge.net diff --git a/package/ser2net/S50ser2net b/package/ser2net/S50ser2net new file mode 100644 index 00000000..1b178c18 --- /dev/null +++ b/package/ser2net/S50ser2net @@ -0,0 +1,43 @@ +#!/bin/sh +# +# Startup script for ser2net +# + +start() { + printf "Starting ser2net: " + if [ ! -f /etc/ser2net.conf ] && [ ! -f /etc/ser2net/ser2net.yaml ] ; then + echo "no configuration file" + exit 1 + fi + + start-stop-daemon -S -q --exec /usr/sbin/ser2net -- -P /var/run/ser2net.pid + [ $? = 0 ] && echo "OK" || echo "FAIL" +} + +stop() { + printf "Shutting down ser2net: " + start-stop-daemon -K -q -p /var/run/ser2net.pid + [ $? = 0 ] && echo "OK" || echo "FAIL" +} + +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + restart + ;; + *) + echo "Usage: ser2net {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/ser2net/ser2net.hash b/package/ser2net/ser2net.hash new file mode 100644 index 00000000..32783213 --- /dev/null +++ b/package/ser2net/ser2net.hash @@ -0,0 +1,6 @@ +# From https://sourceforge.net/projects/ser2net/files/ser2net/ +md5 ee74b7db3bdca09c18a4d0a5ef060c9c ser2net-4.3.2.tar.gz +sha1 196e954be4086d322ec9312c018cd2155ee601b8 ser2net-4.3.2.tar.gz +# Locally computed: +sha256 39d93bbaf53ae23c85ceef918b176b89c20b417c95c1797a5554f441334c42bf ser2net-4.3.2.tar.gz +sha256 501f3108e6c03e5a0a5585ebaaa369171aead5319cd0a7a4dc1f66211c1f09f1 COPYING diff --git a/package/ser2net/ser2net.mk b/package/ser2net/ser2net.mk new file mode 100644 index 00000000..bf743239 --- /dev/null +++ b/package/ser2net/ser2net.mk @@ -0,0 +1,29 @@ +################################################################################ +# +# ser2net +# +################################################################################ + +SER2NET_VERSION = 4.3.2 +SER2NET_SITE = https://downloads.sourceforge.net/project/ser2net/ser2net +SER2NET_LICENSE = GPL-2.0+ +SER2NET_LICENSE_FILES = COPYING +SER2NET_DEPENDENCIES = gensio libyaml + +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +SER2NET_CONF_OPTS += --with-pthreads +else +SER2NET_CONF_OPTS += --without-pthreads +endif + +# fix gensio detection with openssl enabled +ifeq ($(BR2_PACKAGE_OPENSSL),y) +SER2NET_CONF_ENV += LIBS="`$(PKG_CONFIG_HOST_BINARY) --libs openssl`" +endif + +define SER2NET_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 package/ser2net/S50ser2net \ + $(TARGET_DIR)/etc/init.d/S50ser2net +endef + +$(eval $(autotools-package)) diff --git a/package/setools/0001-remove-werror-flag-from-setup.patch b/package/setools/0001-remove-werror-flag-from-setup.patch new file mode 100644 index 00000000..0ab40066 --- /dev/null +++ b/package/setools/0001-remove-werror-flag-from-setup.patch @@ -0,0 +1,31 @@ +From 8ab5a49247d870d92a8287db6134877ebf7a4379 Mon Sep 17 00:00:00 2001 +From: Adam Duskett +Date: Thu, 12 Oct 2017 22:04:58 -0400 +Subject: [PATCH] remove werror flag from setup + +Compilers older than gcc6 will generate uninitialized variable warnings which +will cause compiling to fail. + +Signed-off-by: Antoine Tenart +[Refreshed for 4.3.0] +Signed-off-by: Adam Duskett +--- + setup.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/setup.py b/setup.py +index 457c83049ca5..4dcb30196abf 100644 +--- a/setup.py ++++ b/setup.py +@@ -106,7 +106,7 @@ ext_py_mods = [Extension('setools.policyrep', ['setools/policyrep.pyx'], + libraries=['selinux', 'sepol'], + library_dirs=lib_dirs, + define_macros=macros, +- extra_compile_args=['-Werror', '-Wextra', ++ extra_compile_args=['-Wextra', + '-Waggregate-return', + '-Wfloat-equal', + '-Wformat', '-Wformat=2', +-- +2.26.2 + diff --git a/package/setools/0002-Do-not-export-use-setools.InfoFlowAnalysis-and-setoo.patch b/package/setools/0002-Do-not-export-use-setools.InfoFlowAnalysis-and-setoo.patch new file mode 100644 index 00000000..f9519a07 --- /dev/null +++ b/package/setools/0002-Do-not-export-use-setools.InfoFlowAnalysis-and-setoo.patch @@ -0,0 +1,144 @@ +From ae84e5ef59bb24d5b8fd17e6756952f42c2d5c36 Mon Sep 17 00:00:00 2001 +From: rpm-build +Date: Thu, 23 Feb 2017 08:17:07 +0100 +Subject: [PATCH] Do not export/use setools.InfoFlowAnalysis and + setools.DomainTransitionAnalysis + +dta and infoflow modules require networkx which brings lot of dependencies. +These dependencies are not necessary for setools module itself as it's +used in policycoreutils. + +Therefore it's better to use setools.infoflow.InfoFlowAnalysis and +setools.dta.DomainTransitionAnalysis and let the package containing +sedta and seinfoflow to require python3-networkx + +Signed-off-by: Antoine Tenart +[Refreshed for 4.3.0] +Signed-off-by: Adam Duskett +--- + sedta | 3 ++- + seinfoflow | 5 +++-- + setools/__init__.py | 4 ++-- + setoolsgui/apol/dta.py | 2 +- + setoolsgui/apol/infoflow.py | 2 +- + tests/dta.py | 2 +- + tests/infoflow.py | 2 +- + 7 files changed, 11 insertions(+), 9 deletions(-) + +diff --git a/sedta b/sedta +index 60861ca630a5..0056172a55e5 100755 +--- a/sedta ++++ b/sedta +@@ -23,6 +23,7 @@ import logging + import signal + + import setools ++import setools.dta + + + def print_transition(trans): +@@ -114,7 +115,7 @@ else: + + try: + p = setools.SELinuxPolicy(args.policy) +- g = setools.DomainTransitionAnalysis(p, reverse=args.reverse, exclude=args.exclude) ++ g = setools.dta.DomainTransitionAnalysis(p, reverse=args.reverse, exclude=args.exclude) + + if args.shortest_path or args.all_paths: + if args.shortest_path: +diff --git a/seinfoflow b/seinfoflow +index f10c39de4d8e..fe733bbd0787 100755 +--- a/seinfoflow ++++ b/seinfoflow +@@ -18,6 +18,7 @@ + # + + import setools ++import setools.infoflow + import argparse + import sys + import logging +@@ -101,8 +102,8 @@ elif args.booleans is not None: + try: + p = setools.SELinuxPolicy(args.policy) + m = setools.PermissionMap(args.map) +- g = setools.InfoFlowAnalysis(p, m, min_weight=args.min_weight, exclude=args.exclude, +- booleans=booleans) ++ g = setools.infoflow.InfoFlowAnalysis(p, m, min_weight=args.min_weight, exclude=args.exclude, ++ booleans=booleans) + + if args.shortest_path or args.all_paths: + if args.shortest_path: +diff --git a/setools/__init__.py b/setools/__init__.py +index 26fa5aa34a19..9e9058a6bf90 100644 +--- a/setools/__init__.py ++++ b/setools/__init__.py +@@ -75,11 +75,11 @@ from .pcideviceconquery import PcideviceconQuery + from .devicetreeconquery import DevicetreeconQuery + + # Information Flow Analysis +-from .infoflow import InfoFlowAnalysis ++# from .infoflow import InfoFlowAnalysis + from .permmap import PermissionMap + + # Domain Transition Analysis +-from .dta import DomainTransitionAnalysis ++# from .dta import DomainTransitionAnalysis + + # Policy difference + from .diff import PolicyDifference +diff --git a/setoolsgui/apol/dta.py b/setoolsgui/apol/dta.py +index 4608b9dbf34e..2cde44c142e9 100644 +--- a/setoolsgui/apol/dta.py ++++ b/setoolsgui/apol/dta.py +@@ -23,7 +23,7 @@ from PyQt5.QtCore import pyqtSignal, Qt, QStringListModel, QThread + from PyQt5.QtGui import QPalette, QTextCursor + from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog, \ + QTreeWidgetItem +-from setools import DomainTransitionAnalysis ++from setools.dta import DomainTransitionAnalysis + + from ..logtosignal import LogHandlerToSignal + from .analysistab import AnalysisTab +diff --git a/setoolsgui/apol/infoflow.py b/setoolsgui/apol/infoflow.py +index 7bca299d23fc..7fee2778f35f 100644 +--- a/setoolsgui/apol/infoflow.py ++++ b/setoolsgui/apol/infoflow.py +@@ -26,7 +26,7 @@ from PyQt5.QtCore import pyqtSignal, Qt, QStringListModel, QThread + from PyQt5.QtGui import QPalette, QTextCursor + from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog, \ + QTreeWidgetItem +-from setools import InfoFlowAnalysis ++from setools.infoflow import InfoFlowAnalysis + from setools.exception import UnmappedClass, UnmappedPermission + + from ..logtosignal import LogHandlerToSignal +diff --git a/tests/dta.py b/tests/dta.py +index a0cc9381469c..177e6fb0b961 100644 +--- a/tests/dta.py ++++ b/tests/dta.py +@@ -18,7 +18,7 @@ + import os + import unittest + +-from setools import DomainTransitionAnalysis ++from setools.dta import DomainTransitionAnalysis + from setools import TERuletype as TERT + from setools.exception import InvalidType + from setools.policyrep import Type +diff --git a/tests/infoflow.py b/tests/infoflow.py +index aa0e44a7e4f8..fca2848aeca5 100644 +--- a/tests/infoflow.py ++++ b/tests/infoflow.py +@@ -18,7 +18,7 @@ + import os + import unittest + +-from setools import InfoFlowAnalysis ++from setools.infoflow import InfoFlowAnalysis + from setools import TERuletype as TERT + from setools.exception import InvalidType + from setools.permmap import PermissionMap +-- +2.26.2 + diff --git a/package/setools/Config.in b/package/setools/Config.in new file mode 100644 index 00000000..3ab7f559 --- /dev/null +++ b/package/setools/Config.in @@ -0,0 +1,29 @@ +config BR2_PACKAGE_SETOOLS + bool "setools" + depends on !BR2_STATIC_LIBS + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_WCHAR + depends on BR2_USE_MMU + depends on BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_NETWORKX # runtime + select BR2_PACKAGE_PYTHON_SETUPTOOLS + select BR2_PACKAGE_LIBSELINUX + help + SETools is an open source project designed to facilitate + SELinux policy analysis. The primary tools are: + * apol - analyze a SELinux policy. (requires python-qt5) + * sediff - semantic policy difference tool for SELinux. + * sedta - Perform domain transition analyses + * seinfoflow - information flow analysis for SELinux + * sesearch - Search rules (allow, type_transition, etc.) + + https://github.com/SELinuxProject/setools/ + +comment "setools needs a toolchain w/ threads, wchar, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS || \ + !BR2_USE_WCHAR + +comment "setools needs python3" + depends on BR2_USE_MMU + depends on !BR2_PACKAGE_PYTHON3 diff --git a/package/setools/setools.hash b/package/setools/setools.hash new file mode 100644 index 00000000..689b20a3 --- /dev/null +++ b/package/setools/setools.hash @@ -0,0 +1,5 @@ +# Locally computed +sha256 da2c1d23edd24c4aa17d01d78e86c9e5fb5bf3aa38c71d5d63f41c750f6ef26c setools-4.3.0.tar.gz +sha256 2f7547e10f76a382c24c053595f38a5cc6dda9347f508f254ca490e0046a9624 COPYING +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING.GPL +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LGPL diff --git a/package/setools/setools.mk b/package/setools/setools.mk new file mode 100644 index 00000000..a07b1367 --- /dev/null +++ b/package/setools/setools.mk @@ -0,0 +1,52 @@ +################################################################################ +# +# setools +# +################################################################################ + +SETOOLS_VERSION = 4.3.0 +SETOOLS_SITE = $(call github,SELinuxProject,setools,$(SETOOLS_VERSION)) +SETOOLS_DEPENDENCIES = libselinux libsepol python-setuptools host-bison host-flex host-python-cython host-swig +SETOOLS_INSTALL_STAGING = YES +SETOOLS_LICENSE = GPL-2.0+, LGPL-2.1+ +SETOOLS_LICENSE_FILES = COPYING COPYING.GPL COPYING.LGPL +SETOOLS_CPE_ID_VENDOR = selinuxproject +SETOOLS_SETUP_TYPE = setuptools +HOST_SETOOLS_DEPENDENCIES = host-python3-cython host-libselinux host-libsepol host-python-networkx +HOST_SETOOLS_NEEDS_HOST_PYTHON = python3 + +define SETOOLS_FIX_SETUP + # By default, setup.py will look for libsepol.a in the host machines + # /usr/lib directory. This needs to be changed to the staging directory. + $(SED) "s@lib_dirs =.*@lib_dirs = ['$(STAGING_DIR)/usr/lib']@g" \ + $(@D)/setup.py +endef +SETOOLS_POST_PATCH_HOOKS += SETOOLS_FIX_SETUP + +define HOST_SETOOLS_FIX_SETUP + # By default, setup.py will look for libsepol.a in the host machines + # /usr/lib directory. This needs to be changed to the host directory. + $(SED) "s@lib_dirs =.*@lib_dirs = ['$(HOST_DIR)/lib']@g" \ + $(@D)/setup.py +endef +HOST_SETOOLS_POST_PATCH_HOOKS += HOST_SETOOLS_FIX_SETUP + +# apol requires pyqt5. However, the setools installation +# process will install apol even if pyqt5 is missing. +# Remove these scripts from the target it pyqt5 is not selected. +ifeq ($(BR2_PACKAGE_PYTHON_PYQT5),) +define SETOOLS_REMOVE_QT_SCRIPTS + $(RM) $(TARGET_DIR)/usr/bin/apol + $(RM) -r $(TARGET_DIR)/lib/python$(PYTHON3_VERSION_MAJOR)/site-packages/setoolsgui/ +endef +SETOOLS_POST_INSTALL_TARGET_HOOKS += SETOOLS_REMOVE_QT_SCRIPTS +endif + +# pyqt5 is not a host-package, remove apol from the host directory. +define HOST_SETOOLS_REMOVE_BROKEN_SCRIPTS + $(RM) $(HOST_DIR)/bin/apol +endef +HOST_SETOOLS_POST_INSTALL_HOOKS += HOST_SETOOLS_REMOVE_BROKEN_SCRIPTS + +$(eval $(python-package)) +$(eval $(host-python-package)) diff --git a/package/setserial/0001-build-system-fix.patch b/package/setserial/0001-build-system-fix.patch new file mode 100644 index 00000000..eec7993d --- /dev/null +++ b/package/setserial/0001-build-system-fix.patch @@ -0,0 +1,28 @@ +Install the setserial program in /usr/bin instead of /bin, and make +sure that the directories (especially the manpages directory) are +created before installing files to them. This is similar to what +automake does. + +Signed-off-by: Thomas Petazzoni +--- + Makefile.in | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +Index: setserial-2.17/Makefile.in +=================================================================== +--- setserial-2.17.orig/Makefile.in ++++ setserial-2.17/Makefile.in +@@ -26,9 +26,10 @@ setserial.cat: setserial.8 + nroff -man setserial.8 > setserial.cat + + install: setserial setserial.8 +- $(INSTALL_PROGRAM) setserial $(DESTDIR)/bin +- $(STRIP) $(DESTDIR)/bin/setserial +- $(INSTALL_DATA) setserial.8 $(DESTDIR)/usr/man/man8 ++ mkdir -p $(DESTDIR)/usr/bin ++ $(INSTALL_PROGRAM) setserial $(DESTDIR)/usr/bin ++ mkdir -p $(DESTDIR)/usr/share/man/man8 ++ $(INSTALL_DATA) setserial.8 $(DESTDIR)/usr/share/man/man8 + + clean: + $(RM) setserial setserial.o setserial.cat *~ diff --git a/package/setserial/0002-tiocghayesesp-build-fix.patch b/package/setserial/0002-tiocghayesesp-build-fix.patch new file mode 100644 index 00000000..176a0c9e --- /dev/null +++ b/package/setserial/0002-tiocghayesesp-build-fix.patch @@ -0,0 +1,28 @@ +[PATCH] setserial: fix build with 2.6.33+ kernel headers + +linux/hayesesp.h got removed in 2.6.33, but some archs (like x86) still +define the TIOCGHAYESESP ioctl, breaking the build. + +It's very unlikely to be of interest anymore, so just undef it. + +Signed-off-by: Peter Korsgaard +--- + setserial.c | 5 +++++ + 1 file changed, 5 insertions(+) + +Index: setserial-2.17/setserial.c +=================================================================== +--- setserial-2.17.orig/setserial.c ++++ setserial-2.17/setserial.c +@@ -24,6 +24,11 @@ + #endif + #include + ++/* linux/hayesesp.h got removed in 2.6.33 but some archs (like x86) ++ still define TIOCGHAYESESP. It's very unlikely to be of interest ++ anymore, so just undef it */ ++#undef TIOCGHAYESESP ++ + #include "version.h" + + static char version_str[] = "setserial version " SETSERIAL_VERSION ", " diff --git a/package/setserial/Config.in b/package/setserial/Config.in new file mode 100644 index 00000000..1182cb06 --- /dev/null +++ b/package/setserial/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_SETSERIAL + bool "setserial" + # Uses fork() + depends on BR2_USE_MMU + help + Setserial : configuration of serial ports + + http://setserial.sourceforge.net/ diff --git a/package/setserial/setserial.hash b/package/setserial/setserial.hash new file mode 100644 index 00000000..991d2860 --- /dev/null +++ b/package/setserial/setserial.hash @@ -0,0 +1,5 @@ +# From http://snapshot.debian.org/archive/debian/20141023T043132Z/pool/main/s/setserial/setserial_2.17-45.3.dsc +sha256 7e4487d320ac31558563424189435d396ddf77953bb23111a17a3d1487b5794a setserial_2.17.orig.tar.gz +sha256 33db87e8a86cf12b7c97efca9e056865e71358e8cfeb3931118b2647ce1eecc6 setserial_2.17-45.3.diff.gz +# Locally computed +sha256 1d7e810ed28daf370def626dfd4c502f2f77d2b678f1ac72e2ba675dd6f9af0d debian/copyright diff --git a/package/setserial/setserial.mk b/package/setserial/setserial.mk new file mode 100644 index 00000000..66ca59d7 --- /dev/null +++ b/package/setserial/setserial.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# setserial +# +################################################################################ + +SETSERIAL_VERSION = 2.17 +SETSERIAL_PATCH = setserial_2.17-45.3.diff.gz +SETSERIAL_SOURCE = setserial_$(SETSERIAL_VERSION).orig.tar.gz +SETSERIAL_SITE = http://snapshot.debian.org/archive/debian/20141023T043132Z/pool/main/s/setserial +SETSERIAL_LICENSE = GPL-2.0 +SETSERIAL_LICENSE_FILES = debian/copyright +# make all also builds setserial.cat which needs nroff +SETSERIAL_MAKE_OPTS = setserial + +define SETSERIAL_APPLY_DEBIAN_PATCHES + # Touching gorhack.h is needed for the Debian patch 18 to work + if [ -d $(@D)/debian/patches ]; then \ + touch $(@D)/gorhack.h; \ + rm $(@D)/debian/patches/01_makefile.dpatch; \ + $(APPLY_PATCHES) $(@D) $(@D)/debian/patches *.dpatch; \ + fi +endef + +SETSERIAL_POST_PATCH_HOOKS += SETSERIAL_APPLY_DEBIAN_PATCHES + +$(eval $(autotools-package)) diff --git a/package/sg3_utils/0001-support-uclinux-as-a-linux.patch b/package/sg3_utils/0001-support-uclinux-as-a-linux.patch new file mode 100644 index 00000000..d9106cd9 --- /dev/null +++ b/package/sg3_utils/0001-support-uclinux-as-a-linux.patch @@ -0,0 +1,16 @@ +Recognise uclinux as a linux + +Signed-off-by: "Yann E. MORIN" + +diff -durN sg3_utils-1.42.orig/configure.ac sg3_utils-1.42/configure.ac +--- sg3_utils-1.42.orig/configure.ac 2015-10-21 01:10:59.000000000 +0200 ++++ sg3_utils-1.42/configure.ac 2016-08-14 19:30:37.841766149 +0200 +@@ -71,7 +71,7 @@ + + # Define platform-specific symbol. + AM_CONDITIONAL(OS_FREEBSD, [echo $host_os | grep 'freebsd' > /dev/null]) +-AM_CONDITIONAL(OS_LINUX, [echo $host_os | grep '^linux' > /dev/null]) ++AM_CONDITIONAL(OS_LINUX, [echo $host_os | grep -E '^(uc)?linux' > /dev/null]) + AM_CONDITIONAL(OS_OSF, [echo $host_os | grep '^osf' > /dev/null]) + AM_CONDITIONAL(OS_SOLARIS, [echo $host_os | grep '^solaris' > /dev/null]) + AM_CONDITIONAL(OS_WIN32_MINGW, [echo $host_os | grep '^mingw' > /dev/null]) diff --git a/package/sg3_utils/Config.in b/package/sg3_utils/Config.in new file mode 100644 index 00000000..f4db4b9b --- /dev/null +++ b/package/sg3_utils/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_SG3_UTILS + bool "sg3-utils" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Low level utilities for devices that use a SCSI command set. + This option install only libsgutils2 library not programs. + + http://sg.danny.cz/sg/sg3_utils.html + +if BR2_PACKAGE_SG3_UTILS + +config BR2_PACKAGE_SG3_UTILS_PROGS + bool "install programs" + +endif + +comment "sg3-utils needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/sg3_utils/sg3_utils.hash b/package/sg3_utils/sg3_utils.hash new file mode 100644 index 00000000..d6c7f03a --- /dev/null +++ b/package/sg3_utils/sg3_utils.hash @@ -0,0 +1,6 @@ +# Locally calculated from download (no sig, hash) +sha256 c7dab547dc37381fa50e482d9da680fe64b88cfe0e3d79b61e478de14f58b2ee sg3_utils-1.45.tar.xz + +# Hash for license files +sha256 d516b8b337a77e3d4c65dffe708ca7fb25b1cb4ec77ec362cf11ed659b9250bc COPYING +sha256 8ddd1d82f2be2f5cbd5b5c3b5c2ee94a90d2ca7112958448da74dd78384fd96a BSD_LICENSE diff --git a/package/sg3_utils/sg3_utils.mk b/package/sg3_utils/sg3_utils.mk new file mode 100644 index 00000000..11b3691f --- /dev/null +++ b/package/sg3_utils/sg3_utils.mk @@ -0,0 +1,59 @@ +################################################################################ +# +# sg3_utils +# +################################################################################ + +SG3_UTILS_VERSION = 1.45 +SG3_UTILS_SOURCE = sg3_utils-$(SG3_UTILS_VERSION).tar.xz +SG3_UTILS_SITE = http://sg.danny.cz/sg/p +SG3_UTILS_LICENSE = BSD-2-Clause (library) +# Some utils progs are GPL-2.0+ licensed while others are BSD-3-Clause +ifeq ($(BR2_PACKAGE_SG3_UTILS_PROGS),y) +SG3_UTILS_LICENSE += , GPL-2.0+ (programs), BSD-2-Clause (programs) +endif +SG3_UTILS_LICENSE_FILES = COPYING BSD_LICENSE + +# Patching configure.ac/Makefile.am +SG3_UTILS_AUTORECONF = YES + +# install the libsgutils2 library +SG3_UTILS_INSTALL_STAGING = YES + +# Uses __atomic_fetch_add_4 +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +SG3_UTILS_CONF_ENV += LIBS="-latomic" +endif + +ifeq ($(BR2_PACKAGE_SG3_UTILS_PROGS),) +define SG3_UTILS_REMOVE_PROGS + for prog in \ + compare_and_write copy_results dd decode_sense \ + emc_trespass format get_config \ + get_lba_status ident inq logs luns map26 \ + map sgm_dd modes opcodes sgp_dd persist prevent \ + raw rbuf rdac read readcap read_block_limits \ + read_attr read_buffer read_long reassign referrals \ + rep_zones requests reset reset_wp rmsn rtpg safte sanitize \ + sat_identify sat_phy_event sat_read_gplog sat_set_features \ + scan senddiag ses ses_microcode start stpg sync test_rwbuf \ + timestamp turs unmap verify vpd write_buffer write_long \ + write_same write_verify wr_mode xcopy zone; do \ + $(RM) $(TARGET_DIR)/usr/bin/sg_$${prog} ; \ + done + for prog in \ + logging_level mandat readcap ready satl start stop \ + temperature; do \ + $(RM) $(TARGET_DIR)/usr/bin/scsi_$${prog} ; \ + done + for prog in \ + sginfo sgm_dd sgp_dd; do \ + $(RM) $(TARGET_DIR)/usr/bin/$${prog}; \ + done +endef + +SG3_UTILS_POST_INSTALL_TARGET_HOOKS += SG3_UTILS_REMOVE_PROGS +endif + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/shadowsocks-libev/0001-configure.ac-use-pkg-config-to-find-netfilter_conntr.patch b/package/shadowsocks-libev/0001-configure.ac-use-pkg-config-to-find-netfilter_conntr.patch new file mode 100644 index 00000000..781d3c0e --- /dev/null +++ b/package/shadowsocks-libev/0001-configure.ac-use-pkg-config-to-find-netfilter_conntr.patch @@ -0,0 +1,62 @@ +From b3c61360a93b7f08fc9c33526056211408301ea9 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Mon, 23 Nov 2020 21:16:38 +0100 +Subject: [PATCH] configure.ac: use pkg-config to find netfilter_conntrack + +Use pkg-config to retrieve the dependencies of netfilter_conntrack +and avoid the following build failure when building statically: + +configure:13096: /data/buildroot-test/instance-1/output-1/host/bin/x86_64-linux-gcc -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -static -I/data/buildroot-test/instance-1/output-1/host/x86_64-buildroot-linux-uclibc/sysroot/usr/include -DPCRE_STATIC -pthread -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -static -L/data/buildroot-test/instance-1/output-1/host/x86_64-buildroot-linux-uclibc/sysroot/usr/lib conftest.c -lnetfilter_conntrack -lnfnetlink -lev -lcares -lsodium -lmbedcrypto -lpcre >&5 +/data/buildroot-test/instance-1/output-1/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-uclibc/8.3.0/../../../../x86_64-buildroot-linux-uclibc/bin/ld: /data/buildroot-test/instance-1/output-1/host/x86_64-buildroot-linux-uclibc/sysroot/usr/lib/libnetfilter_conntrack.a(api.o): in function `nfct_fill_hdr.constprop.4': +api.c:(.text+0x3f): undefined reference to `mnl_nlmsg_put_header' + +Fixes: + - http://autobuild.buildroot.org/results/6cad497a7ab941a0ee3fd7007defc81e30cdcbe0 + +Signed-off-by: Fabrice Fontaine +[Upstream status: +https://github.com/shadowsocks/shadowsocks-libev/pull/2773] +--- + configure.ac | 5 +++-- + src/Makefile.am | 2 +- + 2 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 9787bc2..207c041 100755 +--- a/configure.ac ++++ b/configure.ac +@@ -252,7 +252,8 @@ AC_ARG_ENABLE(connmarktos, + if test x"$enable_connmarktos" = "xyes" ; then + AC_MSG_NOTICE([Linux Netfilter Conntrack support requested by --enable-connmarktos: ${enable_connmarktos}]) + if test "x$enable_connmarktos" != "xno"; then +- AC_SEARCH_LIBS([nfct_query], [netfilter_conntrack],,[ ++ PKG_CHECK_MODULES([NETFILTER_CONNTRACK], [libnetfilter_conntrack],, ++ [AC_SEARCH_LIBS([nfct_query], [netfilter_conntrack],,[ + if test x"$enable_connmarktos" = "xyes"; then + AC_MSG_ERROR([--enable-connmarktos specified but libnetfilter-conntrack library not found]) + fi +@@ -262,7 +263,7 @@ if test x"$enable_connmarktos" = "xyes" ; then + if test x"$enable_connmarktos" = "xyes"; then + AC_MSG_ERROR([--enable-connmarktos specified but libnetfilter-conntrack headers not found]) + fi +- with_netfilter_conntrack=no]) ++ with_netfilter_conntrack=no])]) + # If nothing is broken; enable the libraries usage. + if test "x$with_netfilter_conntrack" != "xno"; then + with_netfilter_conntrack=yes +diff --git a/src/Makefile.am b/src/Makefile.am +index c261ed0..b81ced7 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -9,7 +9,7 @@ AM_CFLAGS += -I$(top_srcdir)/libcork/include + endif + AM_CFLAGS += $(LIBPCRE_CFLAGS) + +-SS_COMMON_LIBS = $(INET_NTOP_LIB) $(LIBPCRE_LIBS) ++SS_COMMON_LIBS = $(INET_NTOP_LIB) $(LIBPCRE_LIBS) $(NETFILTER_CONNTRACK_LIBS) + if !USE_SYSTEM_SHARED_LIB + SS_COMMON_LIBS += $(top_builddir)/libbloom/libbloom.la \ + $(top_builddir)/libipset/libipset.la \ +-- +2.29.2 + diff --git a/package/shadowsocks-libev/Config.in b/package/shadowsocks-libev/Config.in new file mode 100644 index 00000000..fefb27bc --- /dev/null +++ b/package/shadowsocks-libev/Config.in @@ -0,0 +1,34 @@ +config BR2_PACKAGE_SHADOWSOCKS_LIBEV + bool "shadowsocks-libev" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 # for libcork + depends on BR2_TOOLCHAIN_HAS_SYNC_8 || !BR2_ARCH_IS_64 # for libcork + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_C_ARES + select BR2_PACKAGE_LIBEV + select BR2_PACKAGE_LIBSODIUM + select BR2_PACKAGE_MBEDTLS + select BR2_PACKAGE_PCRE + help + Shadowsocks-libev is a lightweight secured SOCKS5 proxy for + embedded devices and low-end boxes. + + https://github.com/shadowsocks/shadowsocks-libev + +config BR2_PACKAGE_SHADOWSOCKS_LIBEV_CONNMARKTOS + bool "connmarktos support in ss-server" + depends on BR2_PACKAGE_SHADOWSOCKS_LIBEV + select BR2_PACKAGE_LIBNETFILTER_CONNTRACK + help + Build ss-server with the connmark to TOS feature. + + This feature requires advanced tc, iptables and conntrack + rules to perform QoS on the server side. + + If unsure, don't enable this option + +comment "shadowsocks-libev needs a toolchain w/ threads" + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_TOOLCHAIN_HAS_SYNC_8 || !BR2_ARCH_IS_64 + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/shadowsocks-libev/shadowsocks-libev.hash b/package/shadowsocks-libev/shadowsocks-libev.hash new file mode 100644 index 00000000..4f1d6d2f --- /dev/null +++ b/package/shadowsocks-libev/shadowsocks-libev.hash @@ -0,0 +1,7 @@ +# Locally computed +sha256 cfc8eded35360f4b67e18dc447b0c00cddb29cc57a3cec48b135e5fb87433488 shadowsocks-libev-3.3.5.tar.gz + +# License files, locally calculated +sha256 736883f97d44dbec288bb82819f18f4f86d02ae3192f6a9abefa00db76bace41 COPYING +sha256 c41a4bc2c4c43e4daa3051e77e31b2d5c8500498afaeac6d831d55a4bb8de3fb libbloom/LICENSE +sha256 4fa2ada54f8c0410ec243265378242ffe862386d5ac517f8dd30a1911d25ae93 libcork/COPYING diff --git a/package/shadowsocks-libev/shadowsocks-libev.mk b/package/shadowsocks-libev/shadowsocks-libev.mk new file mode 100644 index 00000000..c76983ce --- /dev/null +++ b/package/shadowsocks-libev/shadowsocks-libev.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# shadowsocks-libev +# +################################################################################ + +SHADOWSOCKS_LIBEV_VERSION = 3.3.5 +SHADOWSOCKS_LIBEV_SITE = https://github.com/shadowsocks/shadowsocks-libev/releases/download/v$(SHADOWSOCKS_LIBEV_VERSION) +SHADOWSOCKS_LIBEV_LICENSE = GPL-3.0+, BSD-2-Clause (libbloom), BSD-3-Clause (libcork, libipset) +SHADOWSOCKS_LIBEV_LICENSE_FILES = COPYING libbloom/LICENSE libcork/COPYING +SHADOWSOCKS_LIBEV_CPE_ID_VENDOR = shadowsocks +SHADOWSOCKS_LIBEV_DEPENDENCIES = host-pkgconf c-ares libev libsodium mbedtls pcre +SHADOWSOCKS_LIBEV_INSTALL_STAGING = YES +# We're patching configure.ac +SHADOWSOCKS_LIBEV_AUTORECONF = YES +SHADOWSOCKS_LIBEV_CONF_OPTS = \ + --with-pcre=$(STAGING_DIR)/usr \ + --disable-ssp + +ifeq ($(BR2_PACKAGE_SHADOWSOCKS_LIBEV_CONNMARKTOS),y) +SHADOWSOCKS_LIBEV_DEPENDENCIES += libnetfilter_conntrack +SHADOWSOCKS_LIBEV_CONF_OPTS += --enable-connmarktos +else +SHADOWSOCKS_LIBEV_CONF_OPTS += --disable-connmarktos +endif + +$(eval $(autotools-package)) diff --git a/package/shairport-sync/Config.in b/package/shairport-sync/Config.in new file mode 100644 index 00000000..528767ba --- /dev/null +++ b/package/shairport-sync/Config.in @@ -0,0 +1,76 @@ +config BR2_PACKAGE_SHAIRPORT_SYNC + bool "shairport-sync" + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_INSTALL_LIBSTDCPP + select BR2_PACKAGE_ALSA_LIB + select BR2_PACKAGE_ALSA_LIB_MIXER + select BR2_PACKAGE_LIBCONFIG + select BR2_PACKAGE_OPENSSL if !BR2_PACKAGE_MBEDTLS + select BR2_PACKAGE_POPT + help + Shairport Sync emulates an AirPort Express for the purpose + of streaming audio from iTunes, iPods, iPhones, iPads and + AppleTVs. Audio played by a Shairport Sync-powered device + stays in synchrony with the source and thus with other + devices that are playing the same source + synchronously. Thus, for example, synchronised multi-room + audio is possible without difficulty. + + https://github.com/mikebrady/shairport-sync + +if BR2_PACKAGE_SHAIRPORT_SYNC + +config BR2_PACKAGE_SHAIRPORT_SYNC_CONVOLUTION + bool "convolution support" + select BR2_PACKAGE_LIBSNDFILE + help + Enable audio DSP convolution support. + +config BR2_PACKAGE_SHAIRPORT_SYNC_DBUS + bool "dbus support" + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + depends on BR2_USE_MMU # libglib2 + select BR2_PACKAGE_LIBGLIB2 + help + Enable support for support for the MPRIS and native + Shairport Sync D-Bus interface. + +comment "shairport-sync dbus support needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_SHAIRPORT_SYNC_LIBSOXR + bool "libsoxr support" + select BR2_PACKAGE_LIBSOXR + help + Enable support for libsoxr, the SoX Resampler library. + + Briefly, Shairport Sync keeps in step with the audio source + by deleting or inserting frames of audio into the stream as + needed. This "interpolation" is normally inaudible, but it + can be heard in some circumstances. Libsoxr allows this + interpolation to be done much more smoothly and subtly. + +config BR2_PACKAGE_SHAIRPORT_SYNC_MQTT + bool "mqtt support" + depends on BR2_USE_MMU # avahi + depends on BR2_TOOLCHAIN_HAS_THREADS # avahi + depends on !BR2_STATIC_LIBS # avahi + select BR2_PACKAGE_AVAHI + select BR2_PACKAGE_AVAHI_DAEMON + select BR2_PACKAGE_DBUS + select BR2_PACKAGE_MOSQUITTO + help + Enable support for the MQTT, the Message Queuing Telemetry + Transport protocol. + +comment "shairport-sync mqtt support needs a toolchain w/ dynamic library, threads" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS + +endif + +comment "shairport-sync needs a toolchain w/ C++, NPTL" + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS_NPTL diff --git a/package/shairport-sync/S99shairport-sync b/package/shairport-sync/S99shairport-sync new file mode 100644 index 00000000..80b2fddb --- /dev/null +++ b/package/shairport-sync/S99shairport-sync @@ -0,0 +1,27 @@ +#! /bin/sh + +# Additional options that are passed to Shairport Sync +OPTIONS="-d" + +case "$1" in + start) + printf "Starting shairport-sync: " + start-stop-daemon -S -q --exec /usr/bin/shairport-sync -- $OPTIONS + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + stop) + printf "Stopping shairport-sync: " + start-stop-daemon -K -q --exec /usr/bin/shairport-sync \ + -p /var/run/shairport-sync/shairport-sync.pid + [ $? = 0 ] && echo "OK" || echo "FAIL" + ;; + restart) + $0 stop + sleep 1 + $0 start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 + ;; +esac diff --git a/package/shairport-sync/shairport-sync.hash b/package/shairport-sync/shairport-sync.hash new file mode 100644 index 00000000..c451edb9 --- /dev/null +++ b/package/shairport-sync/shairport-sync.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 7f8d4ecec53f2f681a962467bf09205568fc936c8c31a9ee07b1bd72d3d95b12 shairport-sync-3.3.7.tar.gz +sha256 1daaa904985807b7f9f2fa91f6b19f3faadf8df4e813f7451a691f89a6965e3f LICENSES diff --git a/package/shairport-sync/shairport-sync.mk b/package/shairport-sync/shairport-sync.mk new file mode 100644 index 00000000..1a02186d --- /dev/null +++ b/package/shairport-sync/shairport-sync.mk @@ -0,0 +1,86 @@ +################################################################################ +# +# shairport-sync +# +################################################################################ + +SHAIRPORT_SYNC_VERSION = 3.3.7 +SHAIRPORT_SYNC_SITE = $(call github,mikebrady,shairport-sync,$(SHAIRPORT_SYNC_VERSION)) + +SHAIRPORT_SYNC_LICENSE = MIT, BSD-3-Clause +SHAIRPORT_SYNC_LICENSE_FILES = LICENSES +SHAIRPORT_SYNC_DEPENDENCIES = alsa-lib libconfig popt host-pkgconf + +# git clone, no configure +SHAIRPORT_SYNC_AUTORECONF = YES + +SHAIRPORT_SYNC_CONF_OPTS = --with-alsa \ + --with-metadata \ + --with-pipe \ + --with-stdout + +SHAIRPORT_SYNC_CONF_ENV += LIBS="$(SHAIRPORT_SYNC_CONF_LIBS)" + +# Avahi or tinysvcmdns (shaiport-sync bundles its own version of tinysvcmdns). +# Avahi support needs libavahi-client, which is built by avahi if avahi-daemon +# and dbus is selected. Since there is no BR2_PACKAGE_LIBAVAHI_CLIENT config +# option yet, use the avahi-daemon and dbus congig symbols to check for +# libavahi-client. +ifeq ($(BR2_PACKAGE_AVAHI_DAEMON)$(BR2_PACKAGE_DBUS),yy) +SHAIRPORT_SYNC_DEPENDENCIES += avahi +SHAIRPORT_SYNC_CONF_OPTS += --with-avahi +else +SHAIRPORT_SYNC_CONF_OPTS += --with-tinysvcmdns +endif + +ifeq ($(BR2_PACKAGE_LIBDAEMON),y) +SHAIRPORT_SYNC_DEPENDENCIES += libdaemon +SHAIRPORT_SYNC_CONF_OPTS += --with-libdaemon +endif + +# OpenSSL or mbedTLS +ifeq ($(BR2_PACKAGE_OPENSSL),y) +SHAIRPORT_SYNC_DEPENDENCIES += openssl +SHAIRPORT_SYNC_CONF_OPTS += --with-ssl=openssl +else +SHAIRPORT_SYNC_DEPENDENCIES += mbedtls +SHAIRPORT_SYNC_CONF_OPTS += --with-ssl=mbedtls +SHAIRPORT_SYNC_CONF_LIBS += -lmbedx509 -lmbedcrypto +ifeq ($(BR2_PACKAGE_MBEDTLS_COMPRESSION),y) +SHAIRPORT_SYNC_CONF_LIBS += -lz +endif +endif + +ifeq ($(BR2_PACKAGE_SHAIRPORT_SYNC_CONVOLUTION),y) +SHAIRPORT_SYNC_DEPENDENCIES += libsndfile +SHAIRPORT_SYNC_CONF_OPTS += --with-convolution +endif + +ifeq ($(BR2_PACKAGE_SHAIRPORT_SYNC_DBUS),y) +SHAIRPORT_SYNC_DEPENDENCIES += libglib2 +SHAIRPORT_SYNC_CONF_OPTS += --with-dbus-interface --with-mpris-interface +endif + +ifeq ($(BR2_PACKAGE_SHAIRPORT_SYNC_LIBSOXR),y) +SHAIRPORT_SYNC_DEPENDENCIES += libsoxr +SHAIRPORT_SYNC_CONF_OPTS += --with-soxr +endif + +ifeq ($(BR2_PACKAGE_SHAIRPORT_SYNC_MQTT),y) +SHAIRPORT_SYNC_DEPENDENCIES += avahi dbus mosquitto +SHAIRPORT_SYNC_CONF_OPTS += --with-mqtt-client +endif + +define SHAIRPORT_SYNC_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/shairport-sync \ + $(TARGET_DIR)/usr/bin/shairport-sync + $(INSTALL) -D -m 0644 $(@D)/scripts/shairport-sync.conf \ + $(TARGET_DIR)/etc/shairport-sync.conf +endef + +define SHAIRPORT_SYNC_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/shairport-sync/S99shairport-sync \ + $(TARGET_DIR)/etc/init.d/S99shairport-sync +endef + +$(eval $(autotools-package)) diff --git a/package/shapelib/Config.in b/package/shapelib/Config.in new file mode 100644 index 00000000..7c7b9c76 --- /dev/null +++ b/package/shapelib/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_SHAPELIB + bool "shapelib" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + help + The Shapefile C Library provides the ability to write simple + C programs for reading, writing and updating (to a limited + extent) ESRI Shapefiles, and the associated attribute file + (.dbf). + + http://shapelib.maptools.org/ + +comment "shapelib needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/shapelib/shapelib.hash b/package/shapelib/shapelib.hash new file mode 100644 index 00000000..d1f6fa97 --- /dev/null +++ b/package/shapelib/shapelib.hash @@ -0,0 +1,4 @@ +# Locally computed +sha256 1fc0a480982caef9e7b9423070b47750ba34cd0ba82668f2e638fab1d07adae1 shapelib-1.5.0.tar.gz +sha256 7eb803a70990017a1c4e38a8342d7413c5dfeec3ed1ac407e15ae2c274e560ff COPYING +sha256 a638278f7f1cb7d0cdc73b47a6c87261b882e356a8e79922e90d44d7ef1dd2c7 web/license.html diff --git a/package/shapelib/shapelib.mk b/package/shapelib/shapelib.mk new file mode 100644 index 00000000..bedd15dc --- /dev/null +++ b/package/shapelib/shapelib.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# shapelib +# +################################################################################ + +SHAPELIB_VERSION = 1.5.0 +SHAPELIB_SITE = http://download.osgeo.org/shapelib +SHAPELIB_LICENSE = MIT or LGPL-2.0 +SHAPELIB_LICENSE_FILES = web/license.html COPYING +SHAPELIB_INSTALL_STAGING = YES + +$(eval $(autotools-package)) diff --git a/package/shared-mime-info/0001-Remove-incorrect-dependency-from-install-data-hook.patch b/package/shared-mime-info/0001-Remove-incorrect-dependency-from-install-data-hook.patch new file mode 100644 index 00000000..4fe7f521 --- /dev/null +++ b/package/shared-mime-info/0001-Remove-incorrect-dependency-from-install-data-hook.patch @@ -0,0 +1,47 @@ +From 3bcb00e27ab09c433fdfecace0d48a6a7ed55ea8 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Fri, 22 Apr 2016 23:14:32 +0200 +Subject: [PATCH] Remove incorrect dependency from install-data-hook + +Having install-binPROGRAMS as a dependency of install-data-hook is not +correct, as it causes the installation of programs to be executed +twice, and those two installations are racing with each other, causing +random installation failures. + +In addition, this dependency is not needed: the install-data-hook +calls the update-mime-database program in one of two ways: + + - When cross-compiling, using the program pointed by + UPDATE_MIME_DATABASE, which is already built, and is not installed + by install-binPROGRAMS. + + - When compiling natively, suing the update-mime-database from the + build directory, so there is no need to depend on + install-binPROGRAMS. + +This patch is similar to the patch used by the Yocto Project at +http://git.yoctoproject.org/cgit.cgi/poky/plain/meta/recipes-support/shared-mime-info/shared-mime-info/install-data-hook.patch. + +Signed-off-by: Thomas Petazzoni +[Upstream status: +https://gitlab.freedesktop.org/xdg/shared-mime-info/merge_requests/18] +--- + Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index 6fc4f73..c318dc3 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -52,7 +52,7 @@ else + update_mime_database="$(top_builddir)/update-mime-database$(EXEEXT)" + endif + +-install-data-hook: install-binPROGRAMS ++install-data-hook: + if ENABLE_UPDATE_MIMEDB + $(update_mime_database) -V "$(DESTDIR)$(datadir)/mime" + endif +-- +2.6.4 + diff --git a/package/shared-mime-info/Config.in b/package/shared-mime-info/Config.in new file mode 100644 index 00000000..514044be --- /dev/null +++ b/package/shared-mime-info/Config.in @@ -0,0 +1,17 @@ +config BR2_PACKAGE_SHARED_MIME_INFO + bool "shared-mime-info" + depends on BR2_USE_WCHAR # glib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # glib2 + depends on BR2_USE_MMU # glib2 + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBXML2 + help + The shared-mime-info package contains the core + database of common types and the update-mime-database + command used to extend it. + + https://freedesktop.org/wiki/Software/shared-mime-info/ + +comment "shared-mime-info needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/shared-mime-info/shared-mime-info.hash b/package/shared-mime-info/shared-mime-info.hash new file mode 100644 index 00000000..b86499cd --- /dev/null +++ b/package/shared-mime-info/shared-mime-info.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 18b2f0fe07ed0d6f81951a5fd5ece44de9c8aeb4dc5bb20d4f595f6cc6bd403e shared-mime-info-1.12.tar.xz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/shared-mime-info/shared-mime-info.mk b/package/shared-mime-info/shared-mime-info.mk new file mode 100644 index 00000000..9932bd2d --- /dev/null +++ b/package/shared-mime-info/shared-mime-info.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# shared-mime-info +# +################################################################################ + +SHARED_MIME_INFO_VERSION = 1.12 +SHARED_MIME_INFO_SOURCE = shared-mime-info-$(SHARED_MIME_INFO_VERSION).tar.xz +SHARED_MIME_INFO_SITE = \ + https://gitlab.freedesktop.org/xdg/shared-mime-info/uploads/80c7f1afbcad2769f38aeb9ba6317a51 +SHARED_MIME_INFO_INSTALL_STAGING = YES +# 0001-Remove-incorrect-dependency-from-install-data-hook.patch +SHARED_MIME_INFO_AUTORECONF = YES +SHARED_MIME_INFO_CONF_ENV = XMLLINT=$(HOST_DIR)/bin/xmllint +SHARED_MIME_INFO_DEPENDENCIES = host-shared-mime-info libxml2 libglib2 +SHARED_MIME_INFO_CONF_OPTS = \ + --disable-update-mimedb \ + --disable-default-make-check +HOST_SHARED_MIME_INFO_CONF_OPTS = \ + --disable-update-mimedb \ + --disable-default-make-check +SHARED_MIME_INFO_LICENSE = GPL-2.0 +SHARED_MIME_INFO_LICENSE_FILES = COPYING + +HOST_SHARED_MIME_INFO_DEPENDENCIES = \ + host-pkgconf host-intltool host-libxml2 host-libglib2 + +define SHARED_MIME_INFO_INSTALL_TARGET_CMDS + $(HOST_MAKE_ENV) $(SHARED_MIME_INFO_HOST_BINARY) $(STAGING_DIR)/usr/share/mime + $(INSTALL) -D $(STAGING_DIR)/usr/share/mime/mime.cache $(TARGET_DIR)/usr/share/mime/mime.cache +endef + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) + +# shared-mime-info for the host +SHARED_MIME_INFO_HOST_BINARY = $(HOST_DIR)/bin/update-mime-database diff --git a/package/shellinabox/0001-Makefile-disable-always-building-statically.patch b/package/shellinabox/0001-Makefile-disable-always-building-statically.patch new file mode 100644 index 00000000..2f2097e0 --- /dev/null +++ b/package/shellinabox/0001-Makefile-disable-always-building-statically.patch @@ -0,0 +1,26 @@ +From c060e6f06a81ffa400266a6d0bfc58511265a16f Mon Sep 17 00:00:00 2001 +From: Olivier Singla +Date: Thu, 4 Aug 2016 21:23:41 +0200 +Subject: [PATCH] Makefile: disable always building statically + +Signed-off-by: Olivier Singla +--- + Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index 7b8e7ab..5c4c71e 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -126,7 +126,7 @@ BUILT_SOURCES = shellinabox/beep.h \ + + shellinaboxd_LDADD = liblogging.la \ + libhttp.la +-shellinaboxd_LDFLAGS = -static ++shellinaboxd_LDFLAGS = + ## Added this for compatibility with older versions of autoconf/automake + docdir = ${datadir}/doc/${PACKAGE} + +-- +2.7.4 + diff --git a/package/shellinabox/0002-CVE-2018-16789-fix-for-broken-multipart-form-data.patch b/package/shellinabox/0002-CVE-2018-16789-fix-for-broken-multipart-form-data.patch new file mode 100644 index 00000000..4b15f419 --- /dev/null +++ b/package/shellinabox/0002-CVE-2018-16789-fix-for-broken-multipart-form-data.patch @@ -0,0 +1,26 @@ +From 7f47efe1717c381f86566fabe0b1ced8cb98fe8f Mon Sep 17 00:00:00 2001 +From: irsl +Date: Fri, 26 Oct 2018 11:51:15 +0200 +Subject: [PATCH] fix for broken multipart/form-data + +Malformed multipart/form-data payload results in infinite loop and thus denial of service +[Upstream status: https://github.com/shellinabox/shellinabox/pull/446] +Signed-off-by: Fabrice Fontaine +--- + libhttp/url.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/libhttp/url.c b/libhttp/url.c +index ed29475..4177871 100644 +--- a/libhttp/url.c ++++ b/libhttp/url.c +@@ -312,6 +312,9 @@ static void urlParsePostBody(struct URL *url, + } + } + } ++ } else { ++ warn("[http] broken multipart/form-data!"); ++ break; + } + } + if (lastPart) { diff --git a/package/shellinabox/Config.in b/package/shellinabox/Config.in new file mode 100644 index 00000000..63a298dc --- /dev/null +++ b/package/shellinabox/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_SHELLINABOX + bool "shellinabox" + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS # dlfcn.h + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_ZLIB + help + Shell In A Box implements a web server that can export + arbitrary command line tools to a web based terminal + emulator. This emulator is accessible to any JavaScript and + CSS enabled web browser and does not require any additional + browser plugins. + + https://github.com/shellinabox/shellinabox + +comment "shellinabox needs a toolchain w/ dynamic library" + depends on BR2_USE_MMU + depends on BR2_STATIC_LIBS diff --git a/package/shellinabox/shellinabox.hash b/package/shellinabox/shellinabox.hash new file mode 100644 index 00000000..634aa734 --- /dev/null +++ b/package/shellinabox/shellinabox.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 27a5ec6c3439f87aee238c47cc56e7357a6249e5ca9ed0f044f0057ef389d81e shellinabox-2.20.tar.gz +sha256 04ef60ab9b83cde6f0862ea18474454477efb34c52ebce1f8d8260a398a39362 COPYING +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 GPL-2 diff --git a/package/shellinabox/shellinabox.mk b/package/shellinabox/shellinabox.mk new file mode 100644 index 00000000..58c16681 --- /dev/null +++ b/package/shellinabox/shellinabox.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# shellinabox +# +################################################################################ + +SHELLINABOX_VERSION = 2.20 +SHELLINABOX_SITE = $(call github,shellinabox,shellinabox,v$(SHELLINABOX_VERSION)) +SHELLINABOX_LICENSE = GPL-2.0 with OpenSSL exception +SHELLINABOX_LICENSE_FILES = COPYING GPL-2 +SHELLINABOX_CPE_ID_VENDOR = shellinabox_project + +# 0002-CVE-2018-16789-fix-for-broken-multipart-form-data.patch +SHELLINABOX_IGNORE_CVES += CVE-2018-16789 + +# Fetching from Github, and patching Makefile.am, so we need to autoreconf +SHELLINABOX_AUTORECONF = YES + +# The OpenSSL support is supposed to be optional, but in practice, +# with OpenSSL disabled, it fails to build. See +# https://github.com/shellinabox/shellinabox/issues/385. +SHELLINABOX_DEPENDENCIES = zlib openssl +SHELLINABOX_CONF_OPTS = \ + --disable-runtime-loading \ + --enable-ssl + +# musl's implementation of utmpx is a dummy one, and some aspects of +# it cause build failures in shellinabox +ifeq ($(BR2_TOOLCHAIN_USES_MUSL),y) +SHELLINABOX_CONF_OPTS += --disable-utmp +endif + +$(eval $(autotools-package)) diff --git a/package/sigrok-cli/Config.in b/package/sigrok-cli/Config.in new file mode 100644 index 00000000..df1cd95b --- /dev/null +++ b/package/sigrok-cli/Config.in @@ -0,0 +1,23 @@ +config BR2_PACKAGE_SIGROK_CLI + bool "sigrok-cli" + # libsigrok->libglib2: + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU + # libsigrok->libzip + depends on !BR2_STATIC_LIBS + # libsigrok + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 + depends on BR2_ENABLE_LOCALE + select BR2_PACKAGE_LIBSIGROK + help + Sigrok-cli is a command-line frontend for the sigrok + software suite. + + http://sigrok.org/wiki/Sigrok-cli + +comment "sigrok-cli needs a toolchain w/ locale, wchar, threads, dynamic library, gcc >= 4.7" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS \ + || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 || BR2_STATIC_LIBS \ + || !BR2_ENABLE_LOCALE diff --git a/package/sigrok-cli/sigrok-cli.hash b/package/sigrok-cli/sigrok-cli.hash new file mode 100644 index 00000000..3231bf82 --- /dev/null +++ b/package/sigrok-cli/sigrok-cli.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 f52413429f47d457c333db0fd068416ab7a3f9e35ca76de8624dc5ac6fb07797 sigrok-cli-0.7.1.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING diff --git a/package/sigrok-cli/sigrok-cli.mk b/package/sigrok-cli/sigrok-cli.mk new file mode 100644 index 00000000..3d1e1878 --- /dev/null +++ b/package/sigrok-cli/sigrok-cli.mk @@ -0,0 +1,20 @@ +################################################################################ +# +# sigrok-cli +# +################################################################################ + +SIGROK_CLI_VERSION = 0.7.1 +SIGROK_CLI_SITE = http://sigrok.org/download/source/sigrok-cli +SIGROK_CLI_LICENSE = GPL-3.0+ +SIGROK_CLI_LICENSE_FILES = COPYING +SIGROK_CLI_DEPENDENCIES = host-pkgconf libsigrok + +ifeq ($(BR2_PACKAGE_LIBSIGROKDECODE),y) +SIGROK_CLI_CONF_OPTS += --with-libsigrokdecode +SIGROK_CLI_DEPENDENCIES += libsigrokdecode +else +SIGROK_CLI_CONF_OPTS += --with-libsigrokdecode=NO +endif + +$(eval $(autotools-package)) diff --git a/package/sispmctl/0001-src-schedule.c-fix-build-with-gcc-4.8.patch b/package/sispmctl/0001-src-schedule.c-fix-build-with-gcc-4.8.patch new file mode 100644 index 00000000..69dc31e3 --- /dev/null +++ b/package/sispmctl/0001-src-schedule.c-fix-build-with-gcc-4.8.patch @@ -0,0 +1,56 @@ +From 3ccbb67c71aa13b9a37a58363d37a18b8fdbf300 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Thu, 29 Oct 2020 13:36:00 +0100 +Subject: [PATCH] src/schedule.c: fix build with gcc 4.8 + +Fix the following build failure with gcc 4.8: + +schedule.c:19:2: error: 'for' loop initial declarations are only allowed in C99 mode + for (int i = 0; i < 4; ++i) { + ^ +schedule.c:19:2: note: use option -std=c99 or -std=gnu99 to compile your code +schedule.c: In function 'pms2_read_block': +schedule.c:39:2: error: 'for' loop initial declarations are only allowed in C99 mode + for (int i = 0; i < 4; ++i) { + ^ + +Fixes: + - http://autobuild.buildroot.org/results/079f1454121d38a83c49529c0f6cc8ed61fd5abb + +Signed-off-by: Fabrice Fontaine +[Upstream status: +https://sourceforge.net/p/sispmctl/git/merge-requests/1] +--- + src/schedule.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/src/schedule.c b/src/schedule.c +index 4dd908d..1725421 100644 +--- a/src/schedule.c ++++ b/src/schedule.c +@@ -15,8 +15,9 @@ + static unsigned char + *pms2_write_block(uint8_t action, uint32_t time, unsigned char *ptr) + { ++ int i; + *ptr++ = action; +- for (int i = 0; i < 4; ++i) { ++ for (i = 0; i < 4; ++i) { + *ptr++ = (uint8_t)time; + time >>= 8; + } +@@ -34,9 +35,10 @@ static unsigned char + static const unsigned char + *pms2_read_block(uint8_t *action, uint32_t *time, const unsigned char *ptr) + { ++ int i; + *action = *ptr++; + *time = 0; +- for (int i = 0; i < 4; ++i) { ++ for (i = 0; i < 4; ++i) { + *time >>= 8; + *time += (uint32_t)*ptr++ << 24; + } +-- +2.28.0 + diff --git a/package/sispmctl/Config.in b/package/sispmctl/Config.in new file mode 100644 index 00000000..b08116e8 --- /dev/null +++ b/package/sispmctl/Config.in @@ -0,0 +1,20 @@ +config BR2_PACKAGE_SISPMCTL + bool "sispmctl" + depends on BR2_TOOLCHAIN_HAS_THREADS # libusb + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb + depends on BR2_USE_WCHAR + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_LIBUSB_COMPAT + help + sispmctl is an application enabling the use of the GEMBIRD + SiS-PM and mSiS(sispm) USB-controlled power-outlet device + under Linux. Note that the device is also sold under + different Names, i.e. as "IntelliPlug" in Germany. + + http://sispmctl.sourceforge.net/ + +comment "sispmctl needs a toolchain w/ threads, wchar, gcc >= 4.9" + depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 + depends on BR2_USE_MMU diff --git a/package/sispmctl/sispmctl.hash b/package/sispmctl/sispmctl.hash new file mode 100644 index 00000000..95129cec --- /dev/null +++ b/package/sispmctl/sispmctl.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 0f8391f7e95cbf1fb96a68686a1dcf1e16747b050ae1b8ff90653c99976068db sispmctl-4.8.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/sispmctl/sispmctl.mk b/package/sispmctl/sispmctl.mk new file mode 100644 index 00000000..3e4252a8 --- /dev/null +++ b/package/sispmctl/sispmctl.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# sispmctl +# +################################################################################ + +SISPMCTL_VERSION = 4.8 +SISPMCTL_SITE = http://downloads.sourceforge.net/project/sispmctl/sispmctl/sispmctl-$(SISPMCTL_VERSION) +SISPMCTL_LICENSE = GPL-2.0+ +SISPMCTL_LICENSE_FILES = COPYING +SISPMCTL_DEPENDENCIES = libusb-compat + +SISPMCTL_CONF_OPTS = --enable-webless + +$(eval $(autotools-package)) diff --git a/package/skalibs/0001-Make-linker-use-dummy-file-when-testing-libs.patch b/package/skalibs/0001-Make-linker-use-dummy-file-when-testing-libs.patch new file mode 100644 index 00000000..17376210 --- /dev/null +++ b/package/skalibs/0001-Make-linker-use-dummy-file-when-testing-libs.patch @@ -0,0 +1,44 @@ +From ca69c0d48e65acadccfe65e3adf16c34a744627b Mon Sep 17 00:00:00 2001 +From: Eric Le Bihan +Date: Tue, 10 Oct 2017 19:51:34 +0200 +Subject: [PATCH] Make linker use dummy file when testing libs + +For some architectures, like Xtensa or HPPA, ld from binutils requires +the output file to be a regular file, as mentioned in a bug report on +the mailing list [1]. + +So, use a dummy file as output file for ld in trylibs(), instead of +/dev/null. + +[1] https://sourceware.org/bugzilla/show_bug.cgi?id=19526 + +Signed-off-by: Eric Le Bihan +--- + configure | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/configure b/configure +index 54d755b..64a061a 100755 +--- a/configure ++++ b/configure +@@ -230,7 +230,7 @@ trylibs () { + echo "Checking whether system has $2..." >&3 + shift 2 + if $CC_AUTO $CPPFLAGS_AUTO $CPPFLAGS $CPPFLAGS_POST $CFLAGS_AUTO $CFLAGS $CFLAGS_POST -c -o try$name.o src/sysdeps/try$name.c 2>/dev/null ; then +- until $CC_AUTO $CFLAGS_AUTO $CFLAGS $CFLAGS_POST $LDFLAGS_AUTO $LDFLAGS $LDFLAGS_POST -o /dev/null try$name.o $args 2>/dev/null ; do ++ until $CC_AUTO $CPPFLAGS_AUTO $CPPFLAGS $CPPFLAGS_POST $CFLAGS_AUTO $CFLAGS $CFLAGS_POST -o try$name try$name.o $args 2>/dev/null ; do + if test -z "$*" ; then + rm -f try$name.o + echo +@@ -246,7 +246,7 @@ trylibs () { + else + echo " ... yes, with$args" >&3 + fi +- rm -f try$name.o ++ rm -f try$name.o try$name + return 0 + else + echo +-- +2.17.2 + diff --git a/package/skalibs/Config.in b/package/skalibs/Config.in new file mode 100644 index 00000000..7802ae30 --- /dev/null +++ b/package/skalibs/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_SKALIBS + bool "skalibs" + depends on BR2_USE_MMU # fork() + help + skalibs is a package centralizing the FOSS C development + files used for building all software at skarnet.org: + it contains essentially general-purpose libraries. + + http://skarnet.org/software/skalibs/ diff --git a/package/skalibs/skalibs.hash b/package/skalibs/skalibs.hash new file mode 100644 index 00000000..6736dd84 --- /dev/null +++ b/package/skalibs/skalibs.hash @@ -0,0 +1,3 @@ +# Locally generated +sha256 250b99b53dd413172db944b31c1b930aa145ac79fe6c5d7e6869ef804228c539 skalibs-2.9.2.1.tar.gz +sha256 5443ac67e8d74ac614ced7bc64211ce90ccedb7778a68bfe9e68a8b234c9503e COPYING diff --git a/package/skalibs/skalibs.mk b/package/skalibs/skalibs.mk new file mode 100644 index 00000000..1c73f26f --- /dev/null +++ b/package/skalibs/skalibs.mk @@ -0,0 +1,55 @@ +################################################################################ +# +# skalibs +# +################################################################################ + +SKALIBS_VERSION = 2.9.2.1 +SKALIBS_SITE = http://skarnet.org/software/skalibs +SKALIBS_LICENSE = ISC +SKALIBS_LICENSE_FILES = COPYING +SKALIBS_INSTALL_STAGING = YES + +SKALIBS_CONF_OPTS = \ + --prefix=/usr \ + --with-default-path=/sbin:/usr/sbin:/bin:/usr/bin \ + --with-sysdep-devurandom=yes \ + $(SHARED_STATIC_LIBS_OPTS) + +define SKALIBS_CONFIGURE_CMDS + (cd $(@D); $(TARGET_CONFIGURE_OPTS) ./configure $(SKALIBS_CONF_OPTS)) +endef + +define SKALIBS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define SKALIBS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install + rm -rf $(TARGET_DIR)/usr/lib/skalibs +endef + +define SKALIBS_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install +endef + +HOST_SKALIBS_CONF_OPTS = \ + --prefix=$(HOST_DIR) \ + --disable-static \ + --enable-shared \ + --disable-allstatic + +define HOST_SKALIBS_CONFIGURE_CMDS + (cd $(@D); $(HOST_CONFIGURE_OPTS) ./configure $(HOST_SKALIBS_CONF_OPTS)) +endef + +define HOST_SKALIBS_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define HOST_SKALIBS_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) install +endef + +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/skeleton-custom/Config.in b/package/skeleton-custom/Config.in new file mode 100644 index 00000000..601c3b24 --- /dev/null +++ b/package/skeleton-custom/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_SKELETON_CUSTOM + bool + select BR2_PACKAGE_HAS_SKELETON + +config BR2_PACKAGE_PROVIDES_SKELETON + default "skeleton-custom" if BR2_PACKAGE_SKELETON_CUSTOM diff --git a/package/skeleton-custom/skeleton-custom.mk b/package/skeleton-custom/skeleton-custom.mk new file mode 100644 index 00000000..b05c834b --- /dev/null +++ b/package/skeleton-custom/skeleton-custom.mk @@ -0,0 +1,61 @@ +################################################################################ +# +# skeleton-custom +# +################################################################################ + +# The skeleton can't depend on the toolchain, since all packages depends on the +# skeleton and the toolchain is a target package, as is skeleton. +# Hence, skeleton would depends on the toolchain and the toolchain would depend +# on skeleton. +SKELETON_CUSTOM_ADD_TOOLCHAIN_DEPENDENCY = NO +SKELETON_CUSTOM_ADD_SKELETON_DEPENDENCY = NO + +SKELETON_CUSTOM_PROVIDES = skeleton + +SKELETON_CUSTOM_INSTALL_STAGING = YES + +SKELETON_CUSTOM_PATH = $(call qstrip,$(BR2_ROOTFS_SKELETON_CUSTOM_PATH)) + +ifeq ($(BR2_PACKAGE_SKELETON_CUSTOM)$(BR_BUILDING),yy) +ifeq ($(SKELETON_CUSTOM_PATH),) +$(error No path specified for the custom skeleton) +endif +endif + +# For a merged /usr, ensure that /lib, /bin and /sbin and their /usr +# counterparts are appropriately setup as symlinks ones to the others. +ifeq ($(BR2_ROOTFS_MERGED_USR),y) +SKELETON_CUSTOM_NOT_MERGED_USR_DIRS = \ + $(shell support/scripts/check-merged-usr.sh $(SKELETON_CUSTOM_PATH)) +endif # merged /usr + +ifeq ($(BR2_PACKAGE_SKELETON_CUSTOM)$(BR_BUILDING),yy) +ifneq ($(SKELETON_CUSTOM_NOT_MERGED_USR_DIRS),) +$(error The custom skeleton in $(SKELETON_CUSTOM_PATH) is not \ + using a merged /usr for the following directories: \ + $(SKELETON_CUSTOM_NOT_MERGED_USR_DIRS)) +endif +endif + +# The target-dir-warning file and the lib{32,64} symlinks are the only +# things we customise in the custom skeleton. +define SKELETON_CUSTOM_INSTALL_TARGET_CMDS + $(call SYSTEM_RSYNC,$(SKELETON_CUSTOM_PATH),$(TARGET_DIR)) + $(call SYSTEM_USR_SYMLINKS_OR_DIRS,$(TARGET_DIR)) + $(call SYSTEM_LIB_SYMLINK,$(TARGET_DIR)) + $(INSTALL) -m 0644 support/misc/target-dir-warning.txt \ + $(TARGET_DIR_WARNING_FILE) +endef + +# For the staging dir, we don't really care what we install, but we +# need the /lib and /usr/lib appropriately setup. Since we ensure, +# above, that they are correct in the skeleton, we can simply copy the +# skeleton to staging. +define SKELETON_CUSTOM_INSTALL_STAGING_CMDS + $(call SYSTEM_RSYNC,$(SKELETON_CUSTOM_PATH),$(STAGING_DIR)) + $(call SYSTEM_USR_SYMLINKS_OR_DIRS,$(STAGING_DIR)) + $(call SYSTEM_LIB_SYMLINK,$(STAGING_DIR)) +endef + +$(eval $(generic-package)) diff --git a/package/skeleton-init-common/Config.in b/package/skeleton-init-common/Config.in new file mode 100644 index 00000000..0fd95de8 --- /dev/null +++ b/package/skeleton-init-common/Config.in @@ -0,0 +1,2 @@ +config BR2_PACKAGE_SKELETON_INIT_COMMON + bool diff --git a/package/skeleton-init-common/skeleton-init-common.mk b/package/skeleton-init-common/skeleton-init-common.mk new file mode 100644 index 00000000..4a67f51c --- /dev/null +++ b/package/skeleton-init-common/skeleton-init-common.mk @@ -0,0 +1,105 @@ +################################################################################ +# +# skeleton-init-common +# +################################################################################ + +# The skeleton can't depend on the toolchain, since all packages depends on the +# skeleton and the toolchain is a target package, as is skeleton. +# Hence, skeleton would depends on the toolchain and the toolchain would depend +# on skeleton. +SKELETON_INIT_COMMON_ADD_TOOLCHAIN_DEPENDENCY = NO +SKELETON_INIT_COMMON_ADD_SKELETON_DEPENDENCY = NO + +# The skeleton also handles the merged /usr case in the sysroot +SKELETON_INIT_COMMON_INSTALL_STAGING = YES + +SKELETON_INIT_COMMON_PATH = system/skeleton + +define SKELETON_INIT_COMMON_INSTALL_TARGET_CMDS + $(call SYSTEM_RSYNC,$(SKELETON_INIT_COMMON_PATH),$(TARGET_DIR)) + $(call SYSTEM_USR_SYMLINKS_OR_DIRS,$(TARGET_DIR)) + $(call SYSTEM_LIB_SYMLINK,$(TARGET_DIR)) + $(SED) 's,@PATH@,$(BR2_SYSTEM_DEFAULT_PATH),' $(TARGET_DIR)/etc/profile + $(INSTALL) -m 0644 support/misc/target-dir-warning.txt \ + $(TARGET_DIR_WARNING_FILE) +endef + +# We don't care much about what goes in staging, as long as it is +# correctly setup for merged/non-merged /usr. The simplest is to +# fill it in with the content of the skeleton. +define SKELETON_INIT_COMMON_INSTALL_STAGING_CMDS + $(call SYSTEM_RSYNC,$(SKELETON_INIT_COMMON_PATH),$(STAGING_DIR)) + $(call SYSTEM_USR_SYMLINKS_OR_DIRS,$(STAGING_DIR)) + $(call SYSTEM_LIB_SYMLINK,$(STAGING_DIR)) + $(INSTALL) -d -m 0755 $(STAGING_DIR)/usr/include +endef + +SKELETON_INIT_COMMON_HOSTNAME = $(call qstrip,$(BR2_TARGET_GENERIC_HOSTNAME)) +SKELETON_INIT_COMMON_ISSUE = $(call qstrip,$(BR2_TARGET_GENERIC_ISSUE)) +SKELETON_INIT_COMMON_ROOT_PASSWD = $(call qstrip,$(BR2_TARGET_GENERIC_ROOT_PASSWD)) +SKELETON_INIT_COMMON_PASSWD_METHOD = $(call qstrip,$(BR2_TARGET_GENERIC_PASSWD_METHOD)) +SKELETON_INIT_COMMON_BIN_SH = $(call qstrip,$(BR2_SYSTEM_BIN_SH)) + +ifneq ($(SKELETON_INIT_COMMON_HOSTNAME),) +SKELETON_INIT_COMMON_HOSTS_LINE = $(SKELETON_INIT_COMMON_HOSTNAME) +SKELETON_INIT_COMMON_SHORT_HOSTNAME = $(firstword $(subst ., ,$(SKELETON_INIT_COMMON_HOSTNAME))) +ifneq ($(SKELETON_INIT_COMMON_HOSTNAME),$(SKELETON_INIT_COMMON_SHORT_HOSTNAME)) +SKELETON_INIT_COMMON_HOSTS_LINE += $(SKELETON_INIT_COMMON_SHORT_HOSTNAME) +endif +define SKELETON_INIT_COMMON_SET_HOSTNAME + mkdir -p $(TARGET_DIR)/etc + echo "$(SKELETON_INIT_COMMON_HOSTNAME)" > $(TARGET_DIR)/etc/hostname + $(SED) '$$a \127.0.1.1\t$(SKELETON_INIT_COMMON_HOSTS_LINE)' \ + -e '/^127.0.1.1/d' $(TARGET_DIR)/etc/hosts +endef +SKELETON_INIT_COMMON_TARGET_FINALIZE_HOOKS += SKELETON_INIT_COMMON_SET_HOSTNAME +endif + +ifneq ($(SKELETON_INIT_COMMON_ISSUE),) +define SKELETON_INIT_COMMON_SET_ISSUE + mkdir -p $(TARGET_DIR)/etc + echo "$(SKELETON_INIT_COMMON_ISSUE)" > $(TARGET_DIR)/etc/issue +endef +SKELETON_INIT_COMMON_TARGET_FINALIZE_HOOKS += SKELETON_INIT_COMMON_SET_ISSUE +endif + +ifeq ($(BR2_TARGET_ENABLE_ROOT_LOGIN),y) +ifneq ($(filter $$1$$% $$5$$% $$6$$%,$(SKELETON_INIT_COMMON_ROOT_PASSWD)),) +SKELETON_INIT_COMMON_ROOT_PASSWORD = '$(SKELETON_INIT_COMMON_ROOT_PASSWD)' +else ifneq ($(SKELETON_INIT_COMMON_ROOT_PASSWD),) +# This variable will only be evaluated in the finalize stage, so we can +# be sure that host-mkpasswd will have already been built by that time. +SKELETON_INIT_COMMON_ROOT_PASSWORD = "`$(MKPASSWD) -m "$(SKELETON_INIT_COMMON_PASSWD_METHOD)" "$(SKELETON_INIT_COMMON_ROOT_PASSWD)"`" +endif +else # !BR2_TARGET_ENABLE_ROOT_LOGIN +SKELETON_INIT_COMMON_ROOT_PASSWORD = "*" +endif +define SKELETON_INIT_COMMON_SET_ROOT_PASSWD + $(SED) s,^root:[^:]*:,root:$(SKELETON_INIT_COMMON_ROOT_PASSWORD):, $(TARGET_DIR)/etc/shadow +endef +SKELETON_INIT_COMMON_TARGET_FINALIZE_HOOKS += SKELETON_INIT_COMMON_SET_ROOT_PASSWD + +ifeq ($(BR2_SYSTEM_BIN_SH_NONE),y) +define SKELETON_INIT_COMMON_SET_BIN_SH + rm -f $(TARGET_DIR)/bin/sh +endef +else +# Add /bin/sh to /etc/shells otherwise some login tools like dropbear +# can reject the user connection. See man shells. +define SKELETON_INIT_COMMON_ADD_SH_TO_SHELLS + grep -qsE '^/bin/sh$$' $(TARGET_DIR)/etc/shells \ + || echo "/bin/sh" >> $(TARGET_DIR)/etc/shells +endef +SKELETON_INIT_COMMON_TARGET_FINALIZE_HOOKS += SKELETON_INIT_COMMON_ADD_SH_TO_SHELLS +ifneq ($(SKELETON_INIT_COMMON_BIN_SH),) +define SKELETON_INIT_COMMON_SET_BIN_SH + ln -sf $(SKELETON_INIT_COMMON_BIN_SH) $(TARGET_DIR)/bin/sh + $(SED) '/^root:/s,[^/]*$$,$(SKELETON_INIT_COMMON_BIN_SH),' \ + $(TARGET_DIR)/etc/passwd +endef +endif +endif +SKELETON_INIT_COMMON_TARGET_FINALIZE_HOOKS += SKELETON_INIT_COMMON_SET_BIN_SH + +$(eval $(generic-package)) diff --git a/package/skeleton-init-none/Config.in b/package/skeleton-init-none/Config.in new file mode 100644 index 00000000..449bf661 --- /dev/null +++ b/package/skeleton-init-none/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_SKELETON_INIT_NONE + bool + select BR2_PACKAGE_HAS_SKELETON + select BR2_PACKAGE_SKELETON_INIT_COMMON + +config BR2_PACKAGE_PROVIDES_SKELETON + default "skeleton-init-none" if BR2_PACKAGE_SKELETON_INIT_NONE diff --git a/package/skeleton-init-none/skeleton-init-none.mk b/package/skeleton-init-none/skeleton-init-none.mk new file mode 100644 index 00000000..8181aa03 --- /dev/null +++ b/package/skeleton-init-none/skeleton-init-none.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# skeleton-init-none +# +################################################################################ + +# The skeleton can't depend on the toolchain, since all packages depends on the +# skeleton and the toolchain is a target package, as is skeleton. +# Hence, skeleton would depends on the toolchain and the toolchain would depend +# on skeleton. +SKELETON_INIT_NONE_ADD_TOOLCHAIN_DEPENDENCY = NO +SKELETON_INIT_NONE_ADD_SKELETON_DEPENDENCY = NO + +SKELETON_INIT_NONE_DEPENDENCIES = skeleton-init-common + +SKELETON_INIT_NONE_PROVIDES = skeleton + +$(eval $(generic-package)) diff --git a/package/skeleton-init-openrc/Config.in b/package/skeleton-init-openrc/Config.in new file mode 100644 index 00000000..8f4dd17e --- /dev/null +++ b/package/skeleton-init-openrc/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_SKELETON_INIT_OPENRC + bool + select BR2_PACKAGE_HAS_SKELETON + select BR2_PACKAGE_SKELETON_INIT_COMMON + +config BR2_PACKAGE_PROVIDES_SKELETON + default "skeleton-init-openrc" if BR2_PACKAGE_SKELETON_INIT_OPENRC diff --git a/package/skeleton-init-openrc/skeleton-init-openrc.mk b/package/skeleton-init-openrc/skeleton-init-openrc.mk new file mode 100644 index 00000000..b0538ad0 --- /dev/null +++ b/package/skeleton-init-openrc/skeleton-init-openrc.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# skeleton-init-openrc +# +################################################################################ + +# The skeleton can't depend on the toolchain, since all packages depends on the +# skeleton and the toolchain is a target package, as is skeleton. +# Hence, skeleton would depends on the toolchain and the toolchain would depend +# on skeleton. +SKELETON_INIT_OPENRC_ADD_TOOLCHAIN_DEPENDENCY = NO +SKELETON_INIT_OPENRC_ADD_SKELETON_DEPENDENCY = NO + +SKELETON_INIT_OPENRC_DEPENDENCIES = skeleton-init-common + +SKELETON_INIT_OPENRC_PROVIDES = skeleton + +ifeq ($(BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW),y) +# Comment /dev/root entry in fstab. When openrc does not find fstab entry for +# "/", it will try to remount "/" as "rw". +define SKELETON_INIT_OPENRC_ROOT_RO_OR_RW + $(SED) '\:^/dev/root[[:blank:]]:s/^/# /' $(TARGET_DIR)/etc/fstab +endef +else +# Uncomment /dev/root entry in fstab which has "ro" option so openrc notices +# it and doesn't remount root to rw. +define SKELETON_INIT_OPENRC_ROOT_RO_OR_RW + $(SED) '\:^#[[:blank:]]*/dev/root[[:blank:]]:s/^# //' $(TARGET_DIR)/etc/fstab +endef +endif # BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW + +define SKELETON_INIT_OPENRC_INSTALL_TARGET_CMDS + $(call SYSTEM_RSYNC,$(SKELETON_INIT_OPENRC_PKGDIR)/skeleton,$(TARGET_DIR)) + $(SKELETON_INIT_OPENRC_ROOT_RO_OR_RW) +endef + +$(eval $(generic-package)) diff --git a/package/skeleton-init-openrc/skeleton/dev/log b/package/skeleton-init-openrc/skeleton/dev/log new file mode 120000 index 00000000..d96b3b1c --- /dev/null +++ b/package/skeleton-init-openrc/skeleton/dev/log @@ -0,0 +1 @@ +../tmp/log \ No newline at end of file diff --git a/package/skeleton-init-openrc/skeleton/etc/conf.d/.empty b/package/skeleton-init-openrc/skeleton/etc/conf.d/.empty new file mode 100644 index 00000000..e69de29b diff --git a/package/skeleton-init-openrc/skeleton/etc/fstab b/package/skeleton-init-openrc/skeleton/etc/fstab new file mode 100644 index 00000000..21cf49ba --- /dev/null +++ b/package/skeleton-init-openrc/skeleton/etc/fstab @@ -0,0 +1,4 @@ +# +/dev/root / ext2 ro,noauto 0 0 +tmpfs /tmp tmpfs mode=1777 0 0 +tmpfs /run tmpfs mode=0755,nosuid,nodev 0 0 diff --git a/package/skeleton-init-openrc/skeleton/etc/runlevels/default/.empty b/package/skeleton-init-openrc/skeleton/etc/runlevels/default/.empty new file mode 100644 index 00000000..e69de29b diff --git a/package/skeleton-init-openrc/skeleton/etc/runlevels/default/sysv-rcs b/package/skeleton-init-openrc/skeleton/etc/runlevels/default/sysv-rcs new file mode 120000 index 00000000..ef5e0082 --- /dev/null +++ b/package/skeleton-init-openrc/skeleton/etc/runlevels/default/sysv-rcs @@ -0,0 +1 @@ +/etc/init.d/sysv-rcs \ No newline at end of file diff --git a/package/skeleton-init-openrc/skeleton/var/cache b/package/skeleton-init-openrc/skeleton/var/cache new file mode 120000 index 00000000..1431b0e4 --- /dev/null +++ b/package/skeleton-init-openrc/skeleton/var/cache @@ -0,0 +1 @@ +../tmp \ No newline at end of file diff --git a/package/skeleton-init-openrc/skeleton/var/lib/misc b/package/skeleton-init-openrc/skeleton/var/lib/misc new file mode 120000 index 00000000..f1fde8c1 --- /dev/null +++ b/package/skeleton-init-openrc/skeleton/var/lib/misc @@ -0,0 +1 @@ +../../tmp \ No newline at end of file diff --git a/package/skeleton-init-openrc/skeleton/var/lock b/package/skeleton-init-openrc/skeleton/var/lock new file mode 120000 index 00000000..1431b0e4 --- /dev/null +++ b/package/skeleton-init-openrc/skeleton/var/lock @@ -0,0 +1 @@ +../tmp \ No newline at end of file diff --git a/package/skeleton-init-openrc/skeleton/var/log b/package/skeleton-init-openrc/skeleton/var/log new file mode 120000 index 00000000..1431b0e4 --- /dev/null +++ b/package/skeleton-init-openrc/skeleton/var/log @@ -0,0 +1 @@ +../tmp \ No newline at end of file diff --git a/package/skeleton-init-openrc/skeleton/var/run b/package/skeleton-init-openrc/skeleton/var/run new file mode 120000 index 00000000..84ba55b9 --- /dev/null +++ b/package/skeleton-init-openrc/skeleton/var/run @@ -0,0 +1 @@ +../run \ No newline at end of file diff --git a/package/skeleton-init-openrc/skeleton/var/spool b/package/skeleton-init-openrc/skeleton/var/spool new file mode 120000 index 00000000..1431b0e4 --- /dev/null +++ b/package/skeleton-init-openrc/skeleton/var/spool @@ -0,0 +1 @@ +../tmp \ No newline at end of file diff --git a/package/skeleton-init-openrc/skeleton/var/tmp b/package/skeleton-init-openrc/skeleton/var/tmp new file mode 120000 index 00000000..1431b0e4 --- /dev/null +++ b/package/skeleton-init-openrc/skeleton/var/tmp @@ -0,0 +1 @@ +../tmp \ No newline at end of file diff --git a/package/skeleton-init-systemd/Config.in b/package/skeleton-init-systemd/Config.in new file mode 100644 index 00000000..59b21d15 --- /dev/null +++ b/package/skeleton-init-systemd/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_SKELETON_INIT_SYSTEMD + bool + select BR2_PACKAGE_HAS_SKELETON + select BR2_PACKAGE_SKELETON_INIT_COMMON + +config BR2_PACKAGE_PROVIDES_SKELETON + default "skeleton-init-systemd" if BR2_PACKAGE_SKELETON_INIT_SYSTEMD diff --git a/package/skeleton-init-systemd/skeleton-init-systemd.mk b/package/skeleton-init-systemd/skeleton-init-systemd.mk new file mode 100644 index 00000000..5d6b716f --- /dev/null +++ b/package/skeleton-init-systemd/skeleton-init-systemd.mk @@ -0,0 +1,68 @@ +################################################################################ +# +# skeleton-init-systemd +# +################################################################################ + +# The skeleton can't depend on the toolchain, since all packages depends on the +# skeleton and the toolchain is a target package, as is skeleton. +# Hence, skeleton would depends on the toolchain and the toolchain would depend +# on skeleton. +SKELETON_INIT_SYSTEMD_ADD_TOOLCHAIN_DEPENDENCY = NO +SKELETON_INIT_SYSTEMD_ADD_SKELETON_DEPENDENCY = NO + +SKELETON_INIT_SYSTEMD_DEPENDENCIES = skeleton-init-common + +SKELETON_INIT_SYSTEMD_PROVIDES = skeleton + +ifeq ($(BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW),y) + +define SKELETON_INIT_SYSTEMD_ROOT_RO_OR_RW + echo "/dev/root / auto rw 0 1" >$(TARGET_DIR)/etc/fstab +endef + +else + +# On a R/O rootfs, /var is a tmpfs filesystem. So, at build time, we +# redirect /var to the "factory settings" location. Just before the +# filesystem gets created, the /var symlink will be replaced with +# a real (but empty) directory, and the "factory files" will be copied +# back there by the tmpfiles.d mechanism. +define SKELETON_INIT_SYSTEMD_ROOT_RO_OR_RW + mkdir -p $(TARGET_DIR)/etc/systemd/tmpfiles.d + echo "/dev/root / auto ro 0 1" >$(TARGET_DIR)/etc/fstab + echo "tmpfs /var tmpfs mode=1777 0 0" >>$(TARGET_DIR)/etc/fstab +endef + +define SKELETON_INIT_SYSTEMD_PRE_ROOTFS_VAR + rm -rf $(TARGET_DIR)/usr/share/factory/var + mv $(TARGET_DIR)/var $(TARGET_DIR)/usr/share/factory/var + mkdir -p $(TARGET_DIR)/var + for i in $(TARGET_DIR)/usr/share/factory/var/* \ + $(TARGET_DIR)/usr/share/factory/var/lib/* \ + $(TARGET_DIR)/usr/share/factory/var/lib/systemd/*; do \ + [ -e "$${i}" ] || continue; \ + j="$${i#$(TARGET_DIR)/usr/share/factory}"; \ + if [ -L "$${i}" ]; then \ + printf "L+! %s - - - - %s\n" \ + "$${j}" "../usr/share/factory/$${j}" \ + || exit 1; \ + else \ + printf "C! %s - - - -\n" "$${j}" \ + || exit 1; \ + fi; \ + done >$(TARGET_DIR)/etc/tmpfiles.d/var-factory.conf +endef +SKELETON_INIT_SYSTEMD_ROOTFS_PRE_CMD_HOOKS += SKELETON_INIT_SYSTEMD_PRE_ROOTFS_VAR + +endif + +define SKELETON_INIT_SYSTEMD_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)/home + mkdir -p $(TARGET_DIR)/srv + mkdir -p $(TARGET_DIR)/var + ln -s ../run $(TARGET_DIR)/var/run + $(SKELETON_INIT_SYSTEMD_ROOT_RO_OR_RW) +endef + +$(eval $(generic-package)) diff --git a/package/skeleton-init-sysv/Config.in b/package/skeleton-init-sysv/Config.in new file mode 100644 index 00000000..6f645f9e --- /dev/null +++ b/package/skeleton-init-sysv/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_SKELETON_INIT_SYSV + bool + select BR2_PACKAGE_HAS_SKELETON + select BR2_PACKAGE_SKELETON_INIT_COMMON + +config BR2_PACKAGE_PROVIDES_SKELETON + default "skeleton-init-sysv" if BR2_PACKAGE_SKELETON_INIT_SYSV diff --git a/package/skeleton-init-sysv/skeleton-init-sysv.mk b/package/skeleton-init-sysv/skeleton-init-sysv.mk new file mode 100644 index 00000000..009dc100 --- /dev/null +++ b/package/skeleton-init-sysv/skeleton-init-sysv.mk @@ -0,0 +1,33 @@ +################################################################################ +# +# skeleton-init-sysv +# +################################################################################ + +# The skeleton can't depend on the toolchain, since all packages depends on the +# skeleton and the toolchain is a target package, as is skeleton. +# Hence, skeleton would depends on the toolchain and the toolchain would depend +# on skeleton. +SKELETON_INIT_SYSV_ADD_TOOLCHAIN_DEPENDENCY = NO +SKELETON_INIT_SYSV_ADD_SKELETON_DEPENDENCY = NO + +SKELETON_INIT_SYSV_DEPENDENCIES = skeleton-init-common + +SKELETON_INIT_SYSV_PROVIDES = skeleton + +define SKELETON_INIT_SYSV_INSTALL_TARGET_CMDS + $(call SYSTEM_RSYNC,$(SKELETON_INIT_SYSV_PKGDIR)/skeleton,$(TARGET_DIR)) +endef + +# enable/disable swapon/off calls depending on availability of the commands +define SKELETON_INIT_SYSV_SWAPON_SWAPOFF_INITTAB + if [ -x $(TARGET_DIR)/sbin/swapon -a -x $(TARGET_DIR)/sbin/swapoff ]; then \ + $(SED) '/^#.*\/sbin\/swap/s/^#\+[[:blank:]]*//' $(TARGET_DIR)/etc/inittab; \ + else \ + $(SED) '/^[^#].*\/sbin\/swap/s/^/#/' $(TARGET_DIR)/etc/inittab; \ + fi +endef + +SKELETON_INIT_SYSV_TARGET_FINALIZE_HOOKS += SKELETON_INIT_SYSV_SWAPON_SWAPOFF_INITTAB + +$(eval $(generic-package)) diff --git a/package/skeleton-init-sysv/skeleton/dev/log b/package/skeleton-init-sysv/skeleton/dev/log new file mode 120000 index 00000000..d96b3b1c --- /dev/null +++ b/package/skeleton-init-sysv/skeleton/dev/log @@ -0,0 +1 @@ +../tmp/log \ No newline at end of file diff --git a/package/skeleton-init-sysv/skeleton/dev/pts/.empty b/package/skeleton-init-sysv/skeleton/dev/pts/.empty new file mode 100644 index 00000000..e69de29b diff --git a/package/skeleton-init-sysv/skeleton/dev/shm/.empty b/package/skeleton-init-sysv/skeleton/dev/shm/.empty new file mode 100644 index 00000000..e69de29b diff --git a/package/skeleton-init-sysv/skeleton/etc/fstab b/package/skeleton-init-sysv/skeleton/etc/fstab new file mode 100644 index 00000000..169054b7 --- /dev/null +++ b/package/skeleton-init-sysv/skeleton/etc/fstab @@ -0,0 +1,8 @@ +# +/dev/root / ext2 rw,noauto 0 1 +proc /proc proc defaults 0 0 +devpts /dev/pts devpts defaults,gid=5,mode=620,ptmxmode=0666 0 0 +tmpfs /dev/shm tmpfs mode=0777 0 0 +tmpfs /tmp tmpfs mode=1777 0 0 +tmpfs /run tmpfs mode=0755,nosuid,nodev 0 0 +sysfs /sys sysfs defaults 0 0 diff --git a/package/skeleton-init-sysv/skeleton/var/cache b/package/skeleton-init-sysv/skeleton/var/cache new file mode 120000 index 00000000..1431b0e4 --- /dev/null +++ b/package/skeleton-init-sysv/skeleton/var/cache @@ -0,0 +1 @@ +../tmp \ No newline at end of file diff --git a/package/skeleton-init-sysv/skeleton/var/lib/misc b/package/skeleton-init-sysv/skeleton/var/lib/misc new file mode 120000 index 00000000..f1fde8c1 --- /dev/null +++ b/package/skeleton-init-sysv/skeleton/var/lib/misc @@ -0,0 +1 @@ +../../tmp \ No newline at end of file diff --git a/package/skeleton-init-sysv/skeleton/var/lock b/package/skeleton-init-sysv/skeleton/var/lock new file mode 120000 index 00000000..1431b0e4 --- /dev/null +++ b/package/skeleton-init-sysv/skeleton/var/lock @@ -0,0 +1 @@ +../tmp \ No newline at end of file diff --git a/package/skeleton-init-sysv/skeleton/var/log b/package/skeleton-init-sysv/skeleton/var/log new file mode 120000 index 00000000..1431b0e4 --- /dev/null +++ b/package/skeleton-init-sysv/skeleton/var/log @@ -0,0 +1 @@ +../tmp \ No newline at end of file diff --git a/package/skeleton-init-sysv/skeleton/var/run b/package/skeleton-init-sysv/skeleton/var/run new file mode 120000 index 00000000..84ba55b9 --- /dev/null +++ b/package/skeleton-init-sysv/skeleton/var/run @@ -0,0 +1 @@ +../run \ No newline at end of file diff --git a/package/skeleton-init-sysv/skeleton/var/spool b/package/skeleton-init-sysv/skeleton/var/spool new file mode 120000 index 00000000..1431b0e4 --- /dev/null +++ b/package/skeleton-init-sysv/skeleton/var/spool @@ -0,0 +1 @@ +../tmp \ No newline at end of file diff --git a/package/skeleton-init-sysv/skeleton/var/tmp b/package/skeleton-init-sysv/skeleton/var/tmp new file mode 120000 index 00000000..1431b0e4 --- /dev/null +++ b/package/skeleton-init-sysv/skeleton/var/tmp @@ -0,0 +1 @@ +../tmp \ No newline at end of file diff --git a/package/skeleton/Config.in b/package/skeleton/Config.in new file mode 100644 index 00000000..efaa1e13 --- /dev/null +++ b/package/skeleton/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_SKELETON + bool + default y + +config BR2_PACKAGE_HAS_SKELETON + bool + +config BR2_PACKAGE_PROVIDES_SKELETON + string diff --git a/package/skeleton/skeleton.mk b/package/skeleton/skeleton.mk new file mode 100644 index 00000000..9d97f02f --- /dev/null +++ b/package/skeleton/skeleton.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# skeleton +# +################################################################################ + +# The skeleton can't depend on the toolchain, since all packages depends on the +# skeleton and the toolchain is a target package, as is skeleton. +# Hence, skeleton would depends on the toolchain and the toolchain would depend +# on skeleton. +SKELETON_ADD_TOOLCHAIN_DEPENDENCY = NO +SKELETON_ADD_SKELETON_DEPENDENCY = NO + +# We create a compatibility symlink in case a post-build script still +# uses $(HOST_DIR)/usr +define HOST_SKELETON_INSTALL_CMDS + $(Q)ln -snf . $(HOST_DIR)/usr + $(Q)mkdir -p $(HOST_DIR)/lib + $(Q)mkdir -p $(HOST_DIR)/include + $(Q)case $(HOSTARCH) in \ + (*64) ln -snf lib $(HOST_DIR)/lib64;; \ + (*) ln -snf lib $(HOST_DIR)/lib32;; \ + esac +endef + +$(eval $(virtual-package)) +$(eval $(host-generic-package)) diff --git a/package/sl/Config.in b/package/sl/Config.in new file mode 100644 index 00000000..7abe7056 --- /dev/null +++ b/package/sl/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_SL + bool "sl" + select BR2_PACKAGE_NCURSES + help + SL (Steam Locomotive) runs across your terminal when you + type "sl" as you meant to type "ls". It's just a joke + command, and not useful at all. + + https://github.com/mtoyoda/sl diff --git a/package/sl/sl.hash b/package/sl/sl.hash new file mode 100644 index 00000000..908b1bd9 --- /dev/null +++ b/package/sl/sl.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 1e5996757f879c81f202a18ad8e982195cf51c41727d3fea4af01fdcbbb5563a sl-5.02.tar.gz +sha256 72c7d262e2c9ddf019edc90af852a01a410338efff4e75e1c005b77ada4be7c4 LICENSE diff --git a/package/sl/sl.mk b/package/sl/sl.mk new file mode 100644 index 00000000..bb28b2a4 --- /dev/null +++ b/package/sl/sl.mk @@ -0,0 +1,21 @@ +################################################################################ +# +# sl +# +################################################################################ + +SL_VERSION = 5.02 +SL_SITE = $(call github,mtoyoda,sl,$(SL_VERSION)) +SL_LICENSE = Custom +SL_LICENSE_FILES = LICENSE +SL_DEPENDENCIES = ncurses + +define SL_BUILD_CMDS + $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) +endef + +define SL_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/sl $(TARGET_DIR)/usr/bin/sl +endef + +$(eval $(generic-package)) diff --git a/package/slang/0001-slsh-libs.patch b/package/slang/0001-slsh-libs.patch new file mode 100644 index 00000000..211cb4a0 --- /dev/null +++ b/package/slang/0001-slsh-libs.patch @@ -0,0 +1,19 @@ +Link against sources instead of installation paths that aren't DESTDIRed. +Patch taken from gentoo portage, upstream status unknown, author +probably Diego Pettenò. + +Signed-off-by: Gustavo Zacarias +[Bernd: rebased against 2.3.1a] +Signed-off-by: Bernd Kuhls + +--- a/slsh/Makefile.in ++++ b/slsh/Makefile.in +@@ -92,7 +92,7 @@ + $(OBJDIR)/slsh_exe: $(OBJDIR)/slsh.o $(OBJDIR)/readline.o + $(CC) $(CFLAGS) $(OBJDIR)/slsh.o $(OBJDIR)/readline.o -o $(OBJDIR)/slsh_exe $(LDFLAGS) $(DLINK_FLAGS) $(SRC_LIBS) + $(OBJDIR)/slsh: $(OBJDIR)/slsh.o $(OBJDIR)/readline.o +- $(CC) $(CFLAGS) $(OBJDIR)/slsh.o $(OBJDIR)/readline.o -o $(OBJDIR)/slsh $(LDFLAGS) $(DLINK_FLAGS) $(INST_LIBS) ++ $(CC) $(CFLAGS) $(OBJDIR)/slsh.o $(OBJDIR)/readline.o -o $(OBJDIR)/slsh $(LDFLAGS) $(DLINK_FLAGS) $(SRC_LIBS) + $(OBJDIR)/slsh.o: $(OBJDIR_TSTAMP) slsh.c slsh.h config.h Makefile + cd $(OBJDIR) && $(CC) $(SLANG_SRCINC) $(CFLAGS) -c $(DEFS) $(SRCDIR)/slsh.c + $(OBJDIR)/readline.o: $(OBJDIR_TSTAMP) readline.c slsh.h config.h Makefile diff --git a/package/slang/Config.in b/package/slang/Config.in new file mode 100644 index 00000000..a500ff5b --- /dev/null +++ b/package/slang/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_SLANG + bool "slang" + depends on BR2_USE_MMU # fork() + help + Multi-platform console display library. + + http://www.jedsoft.org/slang/index.html diff --git a/package/slang/slang.hash b/package/slang/slang.hash new file mode 100644 index 00000000..faa34c82 --- /dev/null +++ b/package/slang/slang.hash @@ -0,0 +1,6 @@ +# sha1 from http://www.jedsoft.org/releases/slang/, sha256 locally computed +sha1 bbf7f2dcc14e7c7fca40868fd4b411a2bd9e2655 slang-2.3.2.tar.bz2 +sha256 fc9e3b0fc4f67c3c1f6d43c90c16a5c42d117b8e28457c5b46831b8b5d3ae31a slang-2.3.2.tar.bz2 + +# License file, locally computed +sha256 ff05a90962e7773f8bdc47b2a9585130526039102759b524c1dffbd57cfe469b COPYING diff --git a/package/slang/slang.mk b/package/slang/slang.mk new file mode 100644 index 00000000..44a01480 --- /dev/null +++ b/package/slang/slang.mk @@ -0,0 +1,63 @@ +################################################################################ +# +# slang +# +################################################################################ + +SLANG_VERSION = 2.3.2 +SLANG_SOURCE = slang-$(SLANG_VERSION).tar.bz2 +SLANG_SITE = http://www.jedsoft.org/releases/slang +SLANG_LICENSE = GPL-2.0+ +SLANG_LICENSE_FILES = COPYING +SLANG_INSTALL_STAGING = YES +SLANG_CONF_OPTS = --with-onig=no +SLANG_MAKE = $(MAKE1) + +# Racy and we don't have/do libtermcap +define SLANG_DISABLE_TERMCAP + $(SED) '/^TERMCAP=/s:=.*:=:' $(@D)/configure +endef +SLANG_POST_PATCH_HOOKS += SLANG_DISABLE_TERMCAP + +# Absolute path hell, sigh... +ifeq ($(BR2_PACKAGE_LIBPNG),y) +SLANG_CONF_OPTS += --with-png=$(STAGING_DIR)/usr +SLANG_DEPENDENCIES += libpng +else +SLANG_CONF_OPTS += --with-png=no +endif +ifeq ($(BR2_PACKAGE_PCRE),y) +SLANG_CONF_OPTS += --with-pcre=$(STAGING_DIR)/usr +SLANG_DEPENDENCIES += pcre +else +SLANG_CONF_OPTS += --with-pcre=no +endif +ifeq ($(BR2_PACKAGE_ZLIB),y) +SLANG_CONF_OPTS += --with-z=$(STAGING_DIR)/usr +SLANG_DEPENDENCIES += zlib +else +SLANG_CONF_OPTS += --with-z=no +endif + +ifeq ($(BR2_PACKAGE_NCURSES),y) +SLANG_DEPENDENCIES += ncurses +SLANG_CONF_ENV += ac_cv_path_nc5config=$(STAGING_DIR)/usr/bin/$(NCURSES_CONFIG_SCRIPTS) +else +SLANG_CONF_OPTS += ac_cv_path_nc5config=no +endif + +ifeq ($(BR2_PACKAGE_READLINE),y) +SLANG_CONF_OPTS += --with-readline=gnu +SLANG_DEPENDENCIES += readline +ifeq ($(BR2_STATIC_LIBS),y) +SLANG_CONF_ENV += LIBS="`$(STAGING_DIR)/usr/bin/$(NCURSES_CONFIG_SCRIPTS) --libs`" +endif +endif + +ifeq ($(BR2_STATIC_LIBS),y) +SLANG_MAKE_OPTS = static +SLANG_INSTALL_STAGING_OPTS = DESTDIR=$(STAGING_DIR) install-static +SLANG_INSTALL_TARGET_OPTS = DESTDIR=$(TARGET_DIR) install-static +endif + +$(eval $(autotools-package)) diff --git a/package/slirp/Config.in b/package/slirp/Config.in new file mode 100644 index 00000000..38fd5277 --- /dev/null +++ b/package/slirp/Config.in @@ -0,0 +1,28 @@ +config BR2_PACKAGE_SLIRP + bool "slirp" + depends on BR2_USE_MMU # libglib2 + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + select BR2_PACKAGE_LIBGLIB2 + help + libslirp is a user-mode networking library used by virtual + machines, containers or various tools. + + https://gitlab.freedesktop.org/slirp/libslirp/ + + NOTE: + This package has some history of a unique kind: + - originally developped as 'slirp' by Danny Gasparovski, and + seemingly abandonned (developper /disapeared/) + - then re-maintained at sourceforge by "Kelly", up to some + time around 2009: http://slirp.sourceforge.net/ + - during that period, QEMU (Fabrice BELLARD) forked the code + and included it in QEMU + - and it was imported from this breed by the Spice project + around May 2009 which archived it in 2012 + - So we switched to + https://gitlab.freedesktop.org/slirp/libslirp + +comment "slirp needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/slirp/slirp.hash b/package/slirp/slirp.hash new file mode 100644 index 00000000..326b2ad2 --- /dev/null +++ b/package/slirp/slirp.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 b8a22ac4d601ba16122a67827c0f4361785d4d283f21ff8ed48d4aa1e7693477 libslirp-4.6.1.tar.xz +sha256 b28aecf4796a6a22054167f0a976de13d9db335669d37afd2dc7ea4c335e1e13 COPYRIGHT diff --git a/package/slirp/slirp.mk b/package/slirp/slirp.mk new file mode 100644 index 00000000..43d2c520 --- /dev/null +++ b/package/slirp/slirp.mk @@ -0,0 +1,17 @@ +################################################################################ +# +# slirp +# +################################################################################ + +SLIRP_VERSION = 4.6.1 +SLIRP_SOURCE = libslirp-$(SLIRP_VERSION).tar.xz +SLIRP_SITE = https://gitlab.freedesktop.org/slirp/libslirp/uploads/83b199ea6fcdfc0c243dfde8546ee4c9 +SLIRP_LICENSE = BSD-3-Clause +SLIRP_LICENSE_FILES = COPYRIGHT +SLIRP_CPE_ID_VENDOR = libslirp_project +SLIRP_CPE_ID_PRODUCT = libslirp +SLIRP_INSTALL_STAGING = YES +SLIRP_DEPENDENCIES = libglib2 + +$(eval $(meson-package)) diff --git a/package/smack/Config.in b/package/smack/Config.in new file mode 100644 index 00000000..3e88f8d0 --- /dev/null +++ b/package/smack/Config.in @@ -0,0 +1,35 @@ +config BR2_PACKAGE_SMACK + bool "smack" + depends on !BR2_STATIC_LIBS # dlfcn.h + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0 + help + User space programs and libraries for SMACK. + + SMACK stands for Simplified Mandatory Access Control Kernel. + It is a Linux Security Module which provides a Mandatory + Access Control mechanism, aimed towards simplicity. + + This package provides a library which allows applications to + work with SMACK and tools to load/unload rules from the + kernel, as well as query the policy. + + SMACK requires the following kernel options to be enabled: + + - CONFIG_SECURITY + - CONFIG_SECURITY_SMACK + - CONFIG_SECURITY_NETWORK + + These options will be automatically enabled by Buildroot if + it is responsible for building the kernel. Otherwise, if you + are building your kernel outside of Buildroot, make sure + these options are enabled. + + To activate SMACK, do not forget to add "security=smack" to + your kernel command line. + + https://github.com/smack-team/smack + +comment "smack needs a toolchain w/ dynamic library, threads, headers >= 3.0" + depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0 \ + || !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/smack/smack.hash b/package/smack/smack.hash new file mode 100644 index 00000000..a753f93f --- /dev/null +++ b/package/smack/smack.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 1a607da3b1a661dc76b7a5b8571f4a2d56b4d61d78376088d19f2d8637dc6822 smack-1.3.1.tar.gz +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING diff --git a/package/smack/smack.mk b/package/smack/smack.mk new file mode 100644 index 00000000..b7b656e6 --- /dev/null +++ b/package/smack/smack.mk @@ -0,0 +1,23 @@ +################################################################################ +# +# smack +# +################################################################################ + +SMACK_VERSION = 1.3.1 +SMACK_SITE = $(call github,smack-team,smack,v$(SMACK_VERSION)) +SMACK_LICENSE = LGPL-2.1 +SMACK_LICENSE_FILES = COPYING +SMACK_INSTALL_STAGING = YES +SMACK_DEPENDENCIES = host-pkgconf + +# Sources from GitHub, no configure script included. +SMACK_AUTORECONF = YES + +define SMAKE_LINUX_CONFIG_FIXUPS + $(call KCONFIG_ENABLE_OPT,CONFIG_SECURITY) + $(call KCONFIG_ENABLE_OPT,CONFIG_SECURITY_SMACK) + $(call KCONFIG_ENABLE_OPT,CONFIG_SECURITY_NETWORK) +endef + +$(eval $(autotools-package)) diff --git a/package/smartmontools/0001-configure.ac-fix-stack-protector-detection.patch b/package/smartmontools/0001-configure.ac-fix-stack-protector-detection.patch new file mode 100644 index 00000000..63f51fc9 --- /dev/null +++ b/package/smartmontools/0001-configure.ac-fix-stack-protector-detection.patch @@ -0,0 +1,38 @@ +From 6bd18b0b7b4d916e474ba84707eb784a643b3e71 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine +Date: Sun, 23 Feb 2020 16:23:20 +0100 +Subject: [PATCH] configure.ac: fix stack-protector detection + +Use AC_LINK_IFELSE instead of AC_COMPILE_IFELSE to check for +stack-protector availability as some compilers could missed the needed +library (-lssp or -lssp_nonshared) at linking step: + +/home/giuliobenetti/autobuild/run/instance-3/output-1/host/bin/x86_64-linux-g++ -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -Wall -W -Wformat=2 -fstack-protector-strong -o smartctl smartctl.o atacmdnames.o atacmds.o ataidentify.o ataprint.o dev_ata_cmd_set.o dev_intelliprop.o dev_interface.o dev_jmb39x_raid.o json.o knowndrives.o nvmecmds.o nvmeprint.o scsicmds.o scsiata.o scsinvme.o scsiprint.o utility.o os_linux.o cciss.o dev_areca.o -lselinux +/home/giuliobenetti/autobuild/run/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-uclibc/8.3.0/../../../../x86_64-buildroot-linux-uclibc/bin/ld: cannot find -lssp_nonshared +/home/giuliobenetti/autobuild/run/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-uclibc/8.3.0/../../../../x86_64-buildroot-linux-uclibc/bin/ld: cannot find -lssp + +Fixes: + - http://autobuild.buildroot.org/results/0de9f2a69fa2a39164211299f8a429d2fec6935a + +Signed-off-by: Fabrice Fontaine +[Upstream status: https://www.smartmontools.org/ticket/1302] +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 87470d8a..ccb457e1 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -770,7 +770,7 @@ if test "$GXX" = "yes"; then + AC_MSG_CHECKING([whether $CXX supports $option]) + save_CXXFLAGS=$CXXFLAGS + CXXFLAGS="$CXXFLAGS $option" +- AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [res=yes], [res=no; CXXFLAGS=$save_CXXFLAGS]) ++ AC_LINK_IFELSE([AC_LANG_PROGRAM()], [res=yes], [res=no; CXXFLAGS=$save_CXXFLAGS]) + AC_MSG_RESULT([$res]) + done + else +-- +2.25.0 + diff --git a/package/smartmontools/Config.in b/package/smartmontools/Config.in new file mode 100644 index 00000000..92e0037a --- /dev/null +++ b/package/smartmontools/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_SMARTMONTOOLS + bool "smartmontools" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_MMU # fork() + help + Control and monitor storage systems using S.M.A.R.T. + + http://smartmontools.sourceforge.net/ + +comment "smartmontools needs a toolchain w/ C++" + depends on BR2_USE_MMU + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/smartmontools/smartmontools.hash b/package/smartmontools/smartmontools.hash new file mode 100644 index 00000000..bec007aa --- /dev/null +++ b/package/smartmontools/smartmontools.hash @@ -0,0 +1,7 @@ +# From http://sourceforge.net/projects/smartmontools/files/smartmontools/7.1/ +md5 430cd5f64caa4524018b536e5ecd9c29 smartmontools-7.1.tar.gz +sha1 207dc2b50cab1c6fba7bc248665fbbe3189374e1 smartmontools-7.1.tar.gz + +# Locally computed +sha256 3f734d2c99deb1e4af62b25d944c6252de70ca64d766c4c7294545a2e659b846 smartmontools-7.1.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/smartmontools/smartmontools.mk b/package/smartmontools/smartmontools.mk new file mode 100644 index 00000000..1f4448cb --- /dev/null +++ b/package/smartmontools/smartmontools.mk @@ -0,0 +1,36 @@ +################################################################################ +# +# smartmontools +# +################################################################################ + +SMARTMONTOOLS_VERSION = 7.1 +SMARTMONTOOLS_SITE = http://downloads.sourceforge.net/project/smartmontools/smartmontools/$(SMARTMONTOOLS_VERSION) +SMARTMONTOOLS_LICENSE = GPL-2.0+ +SMARTMONTOOLS_LICENSE_FILES = COPYING +SMARTMONTOOLS_CPE_ID_VENDOR = smartmontools +# We're patching configure.ac +SMARTMONTOOLS_AUTORECONF = YES + +ifeq ($(BR2_PACKAGE_LIBCAP_NG),y) +SMARTMONTOOLS_CONF_OPTS += --with-libcap-ng +SMARTMONTOOLS_DEPENDENCIES += libcap-ng +else +SMARTMONTOOLS_CONF_OPTS += --without-libcap-ng +endif + +ifeq ($(BR2_PACKAGE_LIBSELINUX),y) +SMARTMONTOOLS_CONF_OPTS += --with-selinux +SMARTMONTOOLS_DEPENDENCIES += libselinux +else +SMARTMONTOOLS_CONF_OPTS += --without-selinux +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +SMARTMONTOOLS_CONF_OPTS += --with-libsystemd +SMARTMONTOOLS_DEPENDENCIES += systemd +else +SMARTMONTOOLS_CONF_OPTS += --without-libsystemd +endif + +$(eval $(autotools-package)) diff --git a/package/smcroute/Config.in b/package/smcroute/Config.in new file mode 100644 index 00000000..0d0f5f7a --- /dev/null +++ b/package/smcroute/Config.in @@ -0,0 +1,12 @@ +config BR2_PACKAGE_SMCROUTE + bool "smcroute" + depends on BR2_USE_MMU # fork() + help + SMCRoute is a command line tool to manipulate the multicast + routes of a UNIX kernel. It supports both IPv4 and IPv6 + multicast routing. SMCRoute can be used as an alternative to + dynamic multicast routers like mrouted or pimd in setups + where static multicast routes should be maintained and/or no + proper IGMP or MLD signaling exists. + + https://github.com/troglobit/smcroute diff --git a/package/smcroute/smcroute.hash b/package/smcroute/smcroute.hash new file mode 100644 index 00000000..f79ce167 --- /dev/null +++ b/package/smcroute/smcroute.hash @@ -0,0 +1,5 @@ +# Locally generated +sha256 431be94c46646767f69c85fee445277b7e765a55177d3ee29522416cfe2cc067 smcroute-2.4.4.tar.xz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING +# From https://github.com/troglobit/smcroute/releases/download/2.4.4/smcroute-2.4.4.tar.xz.md5 +md5 a1dc8c54c684e8c8de139444f73a0ba3 smcroute-2.4.4.tar.xz diff --git a/package/smcroute/smcroute.mk b/package/smcroute/smcroute.mk new file mode 100644 index 00000000..0db0e084 --- /dev/null +++ b/package/smcroute/smcroute.mk @@ -0,0 +1,25 @@ +################################################################################ +# +# smcroute +# +################################################################################ + +SMCROUTE_VERSION = 2.4.4 +SMCROUTE_SOURCE = smcroute-$(SMCROUTE_VERSION).tar.xz +SMCROUTE_SITE = https://github.com/troglobit/smcroute/releases/download/$(SMCROUTE_VERSION) +SMCROUTE_LICENSE = GPL-2.0+ +SMCROUTE_LICENSE_FILES = COPYING +SMCROUTE_CPE_ID_VENDOR = troglobit + +SMCROUTE_CONF_OPTS = ac_cv_func_setpgrp_void=yes +#BUG:The package Makefile uses CC?= even though the package is autotools based +SMCROUTE_MAKE_ENV = $(TARGET_CONFIGURE_OPTS) + +ifeq ($(BR2_PACKAGE_LIBCAP),y) +SMCROUTE_DEPENDENCIES = libcap +SMCROUTE_CONF_OPTS += --with-libcap +else +SMCROUTE_CONF_OPTS += --without-libcap +endif + +$(eval $(autotools-package)) diff --git a/package/smstools3/0001-fix-Makefile.patch b/package/smstools3/0001-fix-Makefile.patch new file mode 100644 index 00000000..338a53e7 --- /dev/null +++ b/package/smstools3/0001-fix-Makefile.patch @@ -0,0 +1,31 @@ +Makefile: fix rules + +In a Makefile, recipes should follow rules, there can not be variable +definitions in-between. + +Although make-3.81 is happy about it, make-4.0 (and probably 3.82 too) +do whine loudly. + +Signed-off-by: "Yann E. MORIN" +[Fabrice: update for 3.1.21] +Signed-off-by: Fabrice Fontaine + +diff -durN smstools3-3.1.15.orig/src/Makefile smstools3-3.1.15/src/Makefile +--- smstools3-3.1.15.orig/src/Makefile 2010-09-21 13:29:14.000000000 +0200 ++++ smstools3-3.1.15/src/Makefile 2014-09-01 22:27:02.719939329 +0200 +@@ -39,14 +39,13 @@ + + all: smsd + +-smsd: smsd.c extras.o locking.o cfgfile.o logging.o alarm.o smsd_cfg.o charset.o stats.o blacklist.o whitelist.o modeminit.o pdu.o charshift.o +- + ifneq (,$(findstring SOLARIS,$(CFLAGS))) + ifeq (,$(findstring DISABLE_INET_SOCKET,$(CFLAGS))) + override LFLAGS += -lsocket -lnsl + endif + endif + ++smsd: smsd.c extras.o locking.o cfgfile.o logging.o alarm.o smsd_cfg.o charset.o stats.o blacklist.o whitelist.o modeminit.o pdu.o charshift.o + ifneq (,$(findstring NOSTATS,$(CFLAGS))) + $(CC) $(CFLAGS) -o $@ $^ $(LFLAGS) + else diff --git a/package/smstools3/0002-fix-build-with-gcc-10.x.patch b/package/smstools3/0002-fix-build-with-gcc-10.x.patch new file mode 100644 index 00000000..3242c140 --- /dev/null +++ b/package/smstools3/0002-fix-build-with-gcc-10.x.patch @@ -0,0 +1,753 @@ +Description: fix of FTBFS with gcc10 +Author: Thorsten Alteholz + +Fetch from: + +Signed-off-by: Michael Fischer + +Index: smstools/src/smsd_cfg.h +=================================================================== +--- smstools.orig/src/smsd_cfg.h 2020-08-05 19:02:50.536596441 +0000 ++++ smstools/src/smsd_cfg.h 2020-08-05 19:33:22.915005150 +0000 +@@ -126,17 +126,17 @@ + #define ALPHABET_UNKNOWN 4 + #define ALPHABET_DEFAULT 0 + +-char process_title[32]; // smsd for main task, NOTIFIER or CHILD, name of a modem for other tasks. +-int process_id; // -1 for main task, all modems have numbers starting with 0. ++extern char process_title[32]; // smsd for main task, NOTIFIER or CHILD, name of a modem for other tasks. ++extern int process_id; // -1 for main task, all modems have numbers starting with 0. + // This is the same as device, can be used like devices[process_id] if IS_MODEM_PROCESS. + +-time_t process_start_time; ++extern time_t process_start_time; + +-int modem_handle; // Handle for modem. ++extern int modem_handle; // Handle for modem. + +-int put_command_timeouts; +-unsigned long long put_command_sent; // 3.1.16beta. +-char tmpdir[PATH_MAX]; // 3.1.16beta. ++extern int put_command_timeouts; ++extern unsigned long long put_command_sent; // 3.1.16beta. ++extern char tmpdir[PATH_MAX]; // 3.1.16beta. + + typedef struct + { +@@ -284,204 +284,204 @@ + + // NOTE for regular run intervals: effective value is at least delaytime. + +-char configfile[PATH_MAX]; // Path to config file +-char d_spool[PATH_MAX]; // Spool directory +-char d_failed[PATH_MAX]; // Failed spool directory +-char d_failed_copy[PATH_MAX]; // 3.1.17. +-char d_incoming[PATH_MAX]; // Incoming spool directory +-char d_incoming_copy[PATH_MAX]; // 3.1.16beta2. +-char d_report[PATH_MAX]; // Incoming report spool directory +-char d_report_copy[PATH_MAX]; // 3.1.17. +-char d_phonecalls[PATH_MAX]; // Incoming phonecalls data directory +-char d_saved[PATH_MAX]; // Directory for smsd's internal use, concatenation storage files etc. +-char d_sent[PATH_MAX]; // Sent spool directory +-char d_sent_copy[PATH_MAX]; // 3.1.17. +-char d_checked[PATH_MAX]; // Spool directory for checked messages (only used when no provider queues used) +-char eventhandler[PATH_MAX]; // Global event handler program or script +-char alarmhandler[PATH_MAX]; // Global alarm handler program or script +-char checkhandler[PATH_MAX]; // Handler that checks if the sms file is valid. +-int alarmlevel; // Alarm Level (9=highest). Verbosity of alarm handler. +-char logfile[PATH_MAX]; // Name or Handle of Log File +-int loglevel; // Log Level (9=highest). Verbosity of log file. +-_queue queues[NUMBER_OF_MODEMS]; // Queues +-_device devices[NUMBER_OF_MODEMS]; // Modem devices +-int delaytime; // sleep-time after workless +-int delaytime_mainprocess; // sleep-time after workless, main process. If -1, delaytime is used. +-int blocktime; // sleep-time after multiple errors +-int blockafter; // Block modem after n errors +-int errorsleeptime; // sleep-time after each error +-int autosplit; // Splitting of large text messages 0=no, 1=yes 2=number with text, 3=number with UDH +-int receive_before_send; // if 1 smsd tries to receive one message before sending +-int store_received_pdu; // 0=no, 1=unsupported pdu's only, 2=unsupported and 8bit/unicode, 3=all +-int store_sent_pdu; // 0=no, 1=failed pdu's only, 2=failed and 8bit/unicode, 3=all +-int validity_period; // Validity period for messages. +-int decode_unicode_text; // 1 if unicode text is decoded internally. +-int internal_combine; // 1 if multipart message is combined internally. +-int internal_combine_binary; // 1 if multipart binary message is combined internally. Defaults to internal_combine. +-int keep_filename; // 0 if unique filename is created to each directory when a message file is moved. +-int store_original_filename; // 1 if an original filename is saved to message file when it's moved from +- // outgoing directory to spooler. Works together with keep_filename. +-int date_filename; // 1 or 2 if YYYYMMDD is included to the filename of incoming message. +-char regular_run[PATH_MAX]; // Script/program which is run regularly. +-int regular_run_interval; // Number of seconds between running a regular_run script/progdam. +-char admin_to[SIZE_TO]; // Destination number for administrative messages. +-int filename_preview; // Number of chars of message text to concatenate to filename. +-int incoming_utf8; // 1 if incoming files are saved using UTF-8 character set. +-int outgoing_utf8; // 1 if outgoing files are automatically converted from UTF-8 to ISO and GSM. +-int log_charconv; // 1 if character set conversion is logged. +-int log_single_lines; // 1 if linefeeds are removed from the modem response to be logged. +-int executable_check; // 0 if eventhandler and other executables are NOT checked during the startup checking. +-int keep_messages; // For testing purposes: messages are not deleted and smsd stops after first run. +-char priviledged_numbers[SIZE_PRIVILEDGED_NUMBERS]; // Priviledged numbers in incoming messages. +-int ic_purge_hours; // If internal_combine is used, concatenation storage is checked every ic_purge_interval minutes +-int ic_purge_minutes; // and if there is message parts older than defined, they are handled or deleted. +-int ic_purge_read; // 1 = message parts are stored as single messages. 0 = parts are just deleted. +-int ic_purge_interval; // +-char shell[PATH_MAX]; // Shell used to run eventhandler, defaults to /bin/sh +-char adminmessage_device[32]; // Name of device used to send administrative messages of mainspooler. +-int smart_logging; // 1 = if loglevel is less than 7, degug log is written is there has been any errors. +-int status_signal_quality; // 1 = signal quality is written to status file. +-int status_include_counters; // 1 = succeeded, failed and received counters are included in the status line. +-int status_include_uptime; // 3.1.16beta: 1 = include started & uptime line in the status file. +-int hangup_incoming_call; // 1 = if detected unexpected input contains RING and we want to end call. +-int max_continuous_sending; // Defines when sending is breaked to do check/do other tasks. Time in minutes. +-int voicecall_hangup_ath; // If ATH is used instead of AT+CHUP. ++extern char configfile[PATH_MAX]; // Path to config file ++extern char d_spool[PATH_MAX]; // Spool directory ++extern char d_failed[PATH_MAX]; // Failed spool directory ++extern char d_failed_copy[PATH_MAX]; // 3.1.17. ++extern char d_incoming[PATH_MAX]; // Incoming spool directory ++extern char d_incoming_copy[PATH_MAX]; // 3.1.16beta2. ++extern char d_report[PATH_MAX]; // Incoming report spool directory ++extern char d_report_copy[PATH_MAX]; // 3.1.17. ++extern char d_phonecalls[PATH_MAX]; // Incoming phonecalls data directory ++extern char d_saved[PATH_MAX]; // Directory for smsd's internal use, concatenation storage files etc. ++extern char d_sent[PATH_MAX]; // Sent spool directory ++extern char d_sent_copy[PATH_MAX]; // 3.1.17. ++extern char d_checked[PATH_MAX]; // Spool directory for checked messages (only used when no provider queues used) ++extern char eventhandler[PATH_MAX]; // Global event handler program or script ++extern char alarmhandler[PATH_MAX]; // Global alarm handler program or script ++extern char checkhandler[PATH_MAX]; // Handler that checks if the sms file is valid. ++extern int alarmlevel; // Alarm Level (9=highest). Verbosity of alarm handler. ++extern char logfile[PATH_MAX]; // Name or Handle of Log File ++extern int loglevel; // Log Level (9=highest). Verbosity of log file. ++extern _queue queues[NUMBER_OF_MODEMS]; // Queues ++extern _device devices[NUMBER_OF_MODEMS]; // Modem devices ++extern int delaytime; // sleep-time after workless ++extern int delaytime_mainprocess; // sleep-time after workless, main process. If -1, delaytime is used. ++extern int blocktime; // sleep-time after multiple errors ++extern int blockafter; // Block modem after n errors ++extern int errorsleeptime; // sleep-time after each error ++extern int autosplit; // Splitting of large text messages 0=no, 1=yes 2=number with text, 3=number with UDH ++extern int receive_before_send; // if 1 smsd tries to receive one message before sending ++extern int store_received_pdu; // 0=no, 1=unsupported pdu's only, 2=unsupported and 8bit/unicode, 3=all ++extern int store_sent_pdu; // 0=no, 1=failed pdu's only, 2=failed and 8bit/unicode, 3=all ++extern int validity_period; // Validity period for messages. ++extern int decode_unicode_text; // 1 if unicode text is decoded internally. ++extern int internal_combine; // 1 if multipart message is combined internally. ++extern int internal_combine_binary; // 1 if multipart binary message is combined internally. Defaults to internal_combine. ++extern int keep_filename; // 0 if unique filename is created to each directory when a message file is moved. ++extern int store_original_filename; // 1 if an original filename is saved to message file when it's moved from ++// outgoing directory to spooler. Works together with keep_filename. ++extern int date_filename; // 1 or 2 if YYYYMMDD is included to the filename of incoming message. ++extern char regular_run[PATH_MAX]; // Script/program which is run regularly. ++extern int regular_run_interval; // Number of seconds between running a regular_run script/progdam. ++extern char admin_to[SIZE_TO]; // Destination number for administrative messages. ++extern int filename_preview; // Number of chars of message text to concatenate to filename. ++extern int incoming_utf8; // 1 if incoming files are saved using UTF-8 character set. ++extern int outgoing_utf8; // 1 if outgoing files are automatically converted from UTF-8 to ISO and GSM. ++extern int log_charconv; // 1 if character set conversion is logged. ++extern int log_single_lines; // 1 if linefeeds are removed from the modem response to be logged. ++extern int executable_check; // 0 if eventhandler and other executables are NOT checked during the startup checking. ++extern int keep_messages; // For testing purposes: messages are not deleted and smsd stops after first run. ++extern char priviledged_numbers[SIZE_PRIVILEDGED_NUMBERS]; // Priviledged numbers in incoming messages. ++extern int ic_purge_hours; // If internal_combine is used, concatenation storage is checked every ic_purge_interval minutes ++extern int ic_purge_minutes; // and if there is message parts older than defined, they are handled or deleted. ++extern int ic_purge_read; // 1 = message parts are stored as single messages. 0 = parts are just deleted. ++extern int ic_purge_interval; // ++extern char shell[PATH_MAX]; // Shell used to run eventhandler, defaults to /bin/sh ++extern char adminmessage_device[32]; // Name of device used to send administrative messages of mainspooler. ++extern int smart_logging; // 1 = if loglevel is less than 7, degug log is written is there has been any errors. ++extern int status_signal_quality; // 1 = signal quality is written to status file. ++extern int status_include_counters; // 1 = succeeded, failed and received counters are included in the status line. ++extern int status_include_uptime; // 3.1.16beta: 1 = include started & uptime line in the status file. ++extern int hangup_incoming_call; // 1 = if detected unexpected input contains RING and we want to end call. ++extern int max_continuous_sending; // Defines when sending is breaked to do check/do other tasks. Time in minutes. ++extern int voicecall_hangup_ath; // If ATH is used instead of AT+CHUP. + + // 3.1.5: +-int trust_outgoing; // 1 = it's _sure_ that files are created by rename AND permissions are correct. Speeds up spooling. ++extern int trust_outgoing; // 1 = it's _sure_ that files are created by rename AND permissions are correct. Speeds up spooling. + + // 3.1.5: +-int ignore_outgoing_priority; // 1 = Priority: high header is not checked. Speeds up spooling. ++extern int ignore_outgoing_priority; // 1 = Priority: high header is not checked. Speeds up spooling. + + // 3.1.7: +-int ignore_exec_output; // 1 = stdout and stderr of eventhandlers is _not_ checked. ++extern int ignore_exec_output; // 1 = stdout and stderr of eventhandlers is _not_ checked. + + // 3.1.7: +-mode_t conf_umask; // File mode creation mask for smsd and modem processes. ++extern mode_t conf_umask; // File mode creation mask for smsd and modem processes. + + // 3.1.7: +-int trim_text; // 1 = trailing whitespaces are removed from text: ++extern int trim_text; // 1 = trailing whitespaces are removed from text: + + // 3.1.7: +-int use_linux_ps_trick; // 1 = change argv[0] to "smsd: MAINPROCESS", "smsd: GSM1" etc. ++extern int use_linux_ps_trick; // 1 = change argv[0] to "smsd: MAINPROCESS", "smsd: GSM1" etc. + + // 3.1.7: +-int log_unmodified; ++extern int log_unmodified; + + // 3.1.7: +-char suspend_filename[PATH_MAX]; ++extern char suspend_filename[PATH_MAX]; + + // 3.1.9: +-int spool_directory_order; ++extern int spool_directory_order; + + // 3.1.9: 1 if read_from_modem is logged. +-int log_read_from_modem; ++extern int log_read_from_modem; + + // 3.1.16beta2: log_read_timing for performance tuning. +-int log_read_timing; ++extern int log_read_timing; + + // 3.1.16beta: +-int log_response_time; ++extern int log_response_time; + + // 3.1.16beta2: +-int default_alphabet; ++extern int default_alphabet; + + // 3.1.17: Child process for the mainprocess: +-char mainprocess_child[PATH_MAX]; +-char mainprocess_child_args[PATH_MAX]; ++extern char mainprocess_child[PATH_MAX]; ++extern char mainprocess_child_args[PATH_MAX]; + + // 3.1.17: Notifier for the mainprocess: +-int mainprocess_notifier; ++extern int mainprocess_notifier; + + // 3.1.17: If *_copy was made, evenhandler can use it instead of original file: +-int eventhandler_use_copy; ++extern int eventhandler_use_copy; + + // 3.1.17: This defines how long to sleep while looping: +-int sleeptime_mainprocess; ++extern int sleeptime_mainprocess; + + // 3.1.17: Defines how often PID is checked to detect if another smsd is running: +-int check_pid_interval; ++extern int check_pid_interval; + + // 3.1.18: start script/program for mainprocess: +-char mainprocess_start[PATH_MAX]; +-char mainprocess_start_args[PATH_MAX]; ++extern char mainprocess_start[PATH_MAX]; ++extern char mainprocess_start_args[PATH_MAX]; + +-int message_count; // Counter for sent messages. Multipart message is one message. ++extern int message_count; // Counter for sent messages. Multipart message is one message. + +-volatile sig_atomic_t break_workless_delay; // To break the delay when SIGCONT is received. +-volatile sig_atomic_t terminate; // To terminate when SIGTERM is received. ++extern volatile sig_atomic_t break_workless_delay; // To break the delay when SIGCONT is received. ++extern volatile sig_atomic_t terminate; // To terminate when SIGTERM is received. + +-char username[65]; // user and group name which are used to run. +-char groupname[65]; // (max length is just a guess) ++extern char username[65]; // user and group name which are used to run. ++extern char groupname[65]; // (max length is just a guess) + +-char infofile[PATH_MAX]; // Hepler file for stopping the smsd smoothly. +-char pidfile[PATH_MAX]; // File where a process id is stored. ++extern char infofile[PATH_MAX]; // Hepler file for stopping the smsd smoothly. ++extern char pidfile[PATH_MAX]; // File where a process id is stored. + + // Command line arguments: +-char arg_username[65]; +-char arg_groupname[65]; +-char arg_infofile[PATH_MAX]; +-char arg_pidfile[PATH_MAX]; +-char arg_logfile[PATH_MAX]; +-int arg_terminal; ++extern char arg_username[65]; ++extern char arg_groupname[65]; ++extern char arg_infofile[PATH_MAX]; ++extern char arg_pidfile[PATH_MAX]; ++extern char arg_logfile[PATH_MAX]; ++extern int arg_terminal; + // 3.1.7: +-char arg_7bit_packed[512]; +-int do_encode_decode_arg_7bit_packed; ++extern char arg_7bit_packed[512]; ++extern int do_encode_decode_arg_7bit_packed; + +-int terminal; // 1 if smsd is communicating with terminal. +-pid_t device_pids[NUMBER_OF_MODEMS]; // Pid's of modem processes. +-char run_info[PATH_MAX]; // Information about external script/program execution. ++extern int terminal; // 1 if smsd is communicating with terminal. ++extern pid_t device_pids[NUMBER_OF_MODEMS]; // Pid's of modem processes. ++extern char run_info[PATH_MAX]; // Information about external script/program execution. + +-char communicate[32]; // Device name for terminal communication mode. ++extern char communicate[32]; // Device name for terminal communication mode. + +-char international_prefixes[PATH_MAX +1]; +-char national_prefixes[PATH_MAX +1]; ++extern char international_prefixes[PATH_MAX +1]; ++extern char national_prefixes[PATH_MAX +1]; + + // Storage for startup errors: +-char *startup_err_str; +-int startup_err_count; ++extern char *startup_err_str; ++extern int startup_err_count; + + // Storage for PDU's: +-char *incoming_pdu_store; +-char *outgoing_pdu_store; +-char *routed_pdu_store; ++extern char *incoming_pdu_store; ++extern char *outgoing_pdu_store; ++extern char *routed_pdu_store; + + // Storage for getfile errors: +-char *getfile_err_store; ++extern char *getfile_err_store; + + // Text buffer for error messages: +-char tb[SIZE_TB]; ++extern char tb[SIZE_TB]; + + // Buffer for SIM memory checking: +-char *check_memory_buffer; +-size_t check_memory_buffer_size; ++extern char *check_memory_buffer; ++extern size_t check_memory_buffer_size; + +-int os_cygwin; // 1 if we are on Cygwin. ++extern int os_cygwin; // 1 if we are on Cygwin. + +-char language_file[PATH_MAX]; // File name of translated headers. +-char yes_chars[SIZE_HEADER]; // Characters which mean "yes" in the yesno() question. +-char no_chars[SIZE_HEADER]; // See details inside read_translation() function. +-char yes_word[SIZE_HEADER]; // "yes" printed as an output. +-char no_word[SIZE_HEADER]; // "no" +-char datetime_format[SIZE_HEADER]; // strftime format string for time stamps (not inside status reports). +-char logtime_format[SIZE_HEADER]; // 3.1.7: strftime format string for logging time stamps +-char date_filename_format[SIZE_HEADER]; // 3.1.7: strftime format string for date_filename +-int translate_incoming; // 0 if incoming message headers are NOT transtaled. ++extern char language_file[PATH_MAX]; // File name of translated headers. ++extern char yes_chars[SIZE_HEADER]; // Characters which mean "yes" in the yesno() question. ++extern char no_chars[SIZE_HEADER]; // See details inside read_translation() function. ++extern char yes_word[SIZE_HEADER]; // "yes" printed as an output. ++extern char no_word[SIZE_HEADER]; // "no" ++extern char datetime_format[SIZE_HEADER]; // strftime format string for time stamps (not inside status reports). ++extern char logtime_format[SIZE_HEADER]; // 3.1.7: strftime format string for logging time stamps ++extern char date_filename_format[SIZE_HEADER]; // 3.1.7: strftime format string for date_filename ++extern int translate_incoming; // 0 if incoming message headers are NOT transtaled. + + // 3.1.14: +-int logtime_us; +-int logtime_ms; ++extern int logtime_us; ++extern int logtime_ms; + + // 3.1.14: +-int shell_test; ++extern int shell_test; + + // Next two are for debugging purposes: +-int enable_smsd_debug; +-char smsd_debug[SIZE_SMSD_DEBUG]; // Header of an outgoing message file. ++extern int enable_smsd_debug; ++extern char smsd_debug[SIZE_SMSD_DEBUG]; // Header of an outgoing message file. + + // 3.1.20: Alt keys in communication mode: + #define COMMUNICATE_A_KEY_COUNT 10 +-char communicate_a_keys[COMMUNICATE_A_KEY_COUNT][256]; ++extern char communicate_a_keys[COMMUNICATE_A_KEY_COUNT][256]; + + /* initialize all variable with default values */ + +Index: smstools/src/smsd_cfg.c +=================================================================== +--- smstools.orig/src/smsd_cfg.c 2020-07-27 19:00:41.616207603 +0000 ++++ smstools/src/smsd_cfg.c 2020-08-05 19:17:41.595712888 +0000 +@@ -38,6 +38,221 @@ + #include "modeminit.h" + #include "charshift.h" + ++ ++/* global variables */ ++char process_title[32]; // smsd for main task, NOTIFIER or CHILD, name of a modem for other tasks. ++int process_id; // -1 for main task, all modems have numbers starting with 0. ++ // This is the same as device, can be used like devices[process_id] if IS_MODEM_PROCESS. ++ ++time_t process_start_time; ++ ++int modem_handle; // Handle for modem. ++ ++int put_command_timeouts; ++unsigned long long put_command_sent; // 3.1.16beta. ++char tmpdir[PATH_MAX]; // 3.1.16beta. ++ ++// NOTE for regular run intervals: effective value is at least delaytime. ++ ++char configfile[PATH_MAX]; // Path to config file ++char d_spool[PATH_MAX]; // Spool directory ++char d_failed[PATH_MAX]; // Failed spool directory ++char d_failed_copy[PATH_MAX]; // 3.1.17. ++char d_incoming[PATH_MAX]; // Incoming spool directory ++char d_incoming_copy[PATH_MAX]; // 3.1.16beta2. ++char d_report[PATH_MAX]; // Incoming report spool directory ++char d_report_copy[PATH_MAX]; // 3.1.17. ++char d_phonecalls[PATH_MAX]; // Incoming phonecalls data directory ++char d_saved[PATH_MAX]; // Directory for smsd's internal use, concatenation storage files etc. ++char d_sent[PATH_MAX]; // Sent spool directory ++char d_sent_copy[PATH_MAX]; // 3.1.17. ++char d_checked[PATH_MAX]; // Spool directory for checked messages (only used when no provider queues used) ++char eventhandler[PATH_MAX]; // Global event handler program or script ++char alarmhandler[PATH_MAX]; // Global alarm handler program or script ++char checkhandler[PATH_MAX]; // Handler that checks if the sms file is valid. ++int alarmlevel; // Alarm Level (9=highest). Verbosity of alarm handler. ++char logfile[PATH_MAX]; // Name or Handle of Log File ++int loglevel; // Log Level (9=highest). Verbosity of log file. ++_queue queues[NUMBER_OF_MODEMS]; // Queues ++_device devices[NUMBER_OF_MODEMS]; // Modem devices ++int delaytime; // sleep-time after workless ++int delaytime_mainprocess; // sleep-time after workless, main process. If -1, delaytime is used. ++int blocktime; // sleep-time after multiple errors ++int blockafter; // Block modem after n errors ++int errorsleeptime; // sleep-time after each error ++int autosplit; // Splitting of large text messages 0=no, 1=yes 2=number with text, 3=number with UDH ++int receive_before_send; // if 1 smsd tries to receive one message before sending ++int store_received_pdu; // 0=no, 1=unsupported pdu's only, 2=unsupported and 8bit/unicode, 3=all ++int store_sent_pdu; // 0=no, 1=failed pdu's only, 2=failed and 8bit/unicode, 3=all ++int validity_period; // Validity period for messages. ++int decode_unicode_text; // 1 if unicode text is decoded internally. ++int internal_combine; // 1 if multipart message is combined internally. ++int internal_combine_binary; // 1 if multipart binary message is combined internally. Defaults to internal_combine. ++int keep_filename; // 0 if unique filename is created to each directory when a message file is moved. ++int store_original_filename; // 1 if an original filename is saved to message file when it's moved from ++ // outgoing directory to spooler. Works together with keep_filename. ++int date_filename; // 1 or 2 if YYYYMMDD is included to the filename of incoming message. ++char regular_run[PATH_MAX]; // Script/program which is run regularly. ++int regular_run_interval; // Number of seconds between running a regular_run script/progdam. ++char admin_to[SIZE_TO]; // Destination number for administrative messages. ++int filename_preview; // Number of chars of message text to concatenate to filename. ++int incoming_utf8; // 1 if incoming files are saved using UTF-8 character set. ++int outgoing_utf8; // 1 if outgoing files are automatically converted from UTF-8 to ISO and GSM. ++int log_charconv; // 1 if character set conversion is logged. ++int log_single_lines; // 1 if linefeeds are removed from the modem response to be logged. ++int executable_check; // 0 if eventhandler and other executables are NOT checked during the startup checking. ++int keep_messages; // For testing purposes: messages are not deleted and smsd stops after first run. ++char priviledged_numbers[SIZE_PRIVILEDGED_NUMBERS]; // Priviledged numbers in incoming messages. ++int ic_purge_hours; // If internal_combine is used, concatenation storage is checked every ic_purge_interval minutes ++int ic_purge_minutes; // and if there is message parts older than defined, they are handled or deleted. ++int ic_purge_read; // 1 = message parts are stored as single messages. 0 = parts are just deleted. ++int ic_purge_interval; // ++char shell[PATH_MAX]; // Shell used to run eventhandler, defaults to /bin/sh ++char adminmessage_device[32]; // Name of device used to send administrative messages of mainspooler. ++int smart_logging; // 1 = if loglevel is less than 7, degug log is written is there has been any errors. ++int status_signal_quality; // 1 = signal quality is written to status file. ++int status_include_counters; // 1 = succeeded, failed and received counters are included in the status line. ++int status_include_uptime; // 3.1.16beta: 1 = include started & uptime line in the status file. ++int hangup_incoming_call; // 1 = if detected unexpected input contains RING and we want to end call. ++int max_continuous_sending; // Defines when sending is breaked to do check/do other tasks. Time in minutes. ++int voicecall_hangup_ath; // If ATH is used instead of AT+CHUP. ++ ++// 3.1.5: ++int trust_outgoing; // 1 = it's _sure_ that files are created by rename AND permissions are correct. Speeds up spooling. ++ ++// 3.1.5: ++int ignore_outgoing_priority; // 1 = Priority: high header is not checked. Speeds up spooling. ++ ++// 3.1.7: ++int ignore_exec_output; // 1 = stdout and stderr of eventhandlers is _not_ checked. ++ ++// 3.1.7: ++mode_t conf_umask; // File mode creation mask for smsd and modem processes. ++ ++// 3.1.7: ++int trim_text; // 1 = trailing whitespaces are removed from text: ++ ++// 3.1.7: ++int use_linux_ps_trick; // 1 = change argv[0] to "smsd: MAINPROCESS", "smsd: GSM1" etc. ++ ++// 3.1.7: ++int log_unmodified; ++ ++// 3.1.7: ++char suspend_filename[PATH_MAX]; ++ ++// 3.1.9: ++int spool_directory_order; ++ ++// 3.1.9: 1 if read_from_modem is logged. ++int log_read_from_modem; ++ ++// 3.1.16beta2: log_read_timing for performance tuning. ++int log_read_timing; ++ ++// 3.1.16beta: ++int log_response_time; ++ ++// 3.1.16beta2: ++int default_alphabet; ++ ++// 3.1.17: Child process for the mainprocess: ++char mainprocess_child[PATH_MAX]; ++char mainprocess_child_args[PATH_MAX]; ++ ++// 3.1.17: Notifier for the mainprocess: ++int mainprocess_notifier; ++ ++// 3.1.17: If *_copy was made, evenhandler can use it instead of original file: ++int eventhandler_use_copy; ++ ++// 3.1.17: This defines how long to sleep while looping: ++int sleeptime_mainprocess; ++ ++// 3.1.17: Defines how often PID is checked to detect if another smsd is running: ++int check_pid_interval; ++ ++// 3.1.18: start script/program for mainprocess: ++char mainprocess_start[PATH_MAX]; ++char mainprocess_start_args[PATH_MAX]; ++ ++int message_count; // Counter for sent messages. Multipart message is one message. ++ ++volatile sig_atomic_t break_workless_delay; // To break the delay when SIGCONT is received. ++volatile sig_atomic_t terminate; // To terminate when SIGTERM is received. ++ ++char username[65]; // user and group name which are used to run. ++char groupname[65]; // (max length is just a guess) ++ ++char infofile[PATH_MAX]; // Hepler file for stopping the smsd smoothly. ++char pidfile[PATH_MAX]; // File where a process id is stored. ++ ++// Command line arguments: ++char arg_username[65]; ++char arg_groupname[65]; ++char arg_infofile[PATH_MAX]; ++char arg_pidfile[PATH_MAX]; ++char arg_logfile[PATH_MAX]; ++int arg_terminal; ++// 3.1.7: ++char arg_7bit_packed[512]; ++int do_encode_decode_arg_7bit_packed; ++ ++int terminal; // 1 if smsd is communicating with terminal. ++pid_t device_pids[NUMBER_OF_MODEMS]; // Pid's of modem processes. ++char run_info[PATH_MAX]; // Information about external script/program execution. ++ ++char communicate[32]; // Device name for terminal communication mode. ++ ++char international_prefixes[PATH_MAX +1]; ++char national_prefixes[PATH_MAX +1]; ++ ++// Storage for startup errors: ++char *startup_err_str; ++int startup_err_count; ++ ++// Storage for PDU's: ++char *incoming_pdu_store; ++char *outgoing_pdu_store; ++char *routed_pdu_store; ++ ++// Storage for getfile errors: ++char *getfile_err_store; ++ ++// Text buffer for error messages: ++char tb[SIZE_TB]; ++ ++// Buffer for SIM memory checking: ++char *check_memory_buffer; ++size_t check_memory_buffer_size; ++ ++int os_cygwin; // 1 if we are on Cygwin. ++ ++char language_file[PATH_MAX]; // File name of translated headers. ++char yes_chars[SIZE_HEADER]; // Characters which mean "yes" in the yesno() question. ++char no_chars[SIZE_HEADER]; // See details inside read_translation() function. ++char yes_word[SIZE_HEADER]; // "yes" printed as an output. ++char no_word[SIZE_HEADER]; // "no" ++char datetime_format[SIZE_HEADER]; // strftime format string for time stamps (not inside status reports). ++char logtime_format[SIZE_HEADER]; // 3.1.7: strftime format string for logging time stamps ++char date_filename_format[SIZE_HEADER]; // 3.1.7: strftime format string for date_filename ++int translate_incoming; // 0 if incoming message headers are NOT transtaled. ++ ++// 3.1.14: ++int logtime_us; ++int logtime_ms; ++ ++// 3.1.14: ++int shell_test; ++ ++// Next two are for debugging purposes: ++int enable_smsd_debug; ++char smsd_debug[SIZE_SMSD_DEBUG]; // Header of an outgoing message file. ++ ++// 3.1.20: Alt keys in communication mode: ++#define COMMUNICATE_A_KEY_COUNT 10 ++char communicate_a_keys[COMMUNICATE_A_KEY_COUNT][256]; ++ + char *msg_dir = "%s directory %s cannot be opened."; + char *msg_file = "%s directory %s is not writable."; + char *msg_not_executable = "is not executable for smsd."; +Index: smstools/src/logging.c +=================================================================== +--- smstools.orig/src/logging.c 2020-07-27 19:00:41.612207583 +0000 ++++ smstools/src/logging.c 2020-08-05 19:27:38.373800111 +0000 +@@ -25,6 +25,16 @@ + #include "smsd_cfg.h" + #include "stats.h" + ++ ++// 3.1.16beta2: Moved logch() and prch() from charset.c to logging.c: ++char logch_buffer[8192]; ++ ++char prch(char ch); ++ ++// 3.1.16beta: changed type: ++//int trouble_logging_started; ++time_t trouble_logging_started; ++ + int Filehandle = -1; + int Level; + int SavedLevel; +Index: smstools/src/logging.h +=================================================================== +--- smstools.orig/src/logging.h 2020-07-27 19:00:41.612207583 +0000 ++++ smstools/src/logging.h 2020-08-05 19:27:52.077848035 +0000 +@@ -18,7 +18,7 @@ + #include + + // 3.1.16beta2: Moved logch() and prch() from charset.c to logging.c: +-char logch_buffer[8192]; ++extern char logch_buffer[8192]; + + #ifdef __GNUC__ + void logch(char* format, ...) __attribute__ ((format(printf, 1, 2))); +@@ -26,11 +26,11 @@ + void logch(char* format, ...); + #endif + +-char prch(char ch); ++extern char prch(char ch); + + // 3.1.16beta: changed type: + //int trouble_logging_started; +-time_t trouble_logging_started; ++extern time_t trouble_logging_started; + + int change_loglevel(int new_level); + void restore_loglevel(); +Index: smstools/src/stats.c +=================================================================== +--- smstools.orig/src/stats.c 2020-07-27 19:00:41.616207603 +0000 ++++ smstools/src/stats.c 2020-08-05 19:28:58.094078936 +0000 +@@ -29,6 +29,20 @@ + #include + #endif + ++ ++_stats* statistics[NUMBER_OF_MODEMS]; // Statistic data (shared memory!) ++int rejected_counter; // Statistic counter, rejected SM, number does not fit into any queue ++time_t start_time; // Start time of smsd, allows statistic functions ++int printstatus; // if 1 smsd outputs status on stdout ++time_t last_stats; // time when the last stats file was created ++char d_stats[PATH_MAX]; // path to statistic files ++int stats_interval; // time between statistic files in seconds. ++int stats_no_zeroes; // Suppress files that contain only zeroes ++int status_interval; // time between updating status file in seconds ++ ++char *shared_buffer; ++ ++ + char newstatus[NUMBER_OF_MODEMS +1] = {0}; + char oldstatus[NUMBER_OF_MODEMS +1] = {0}; + +Index: smstools/src/stats.h +=================================================================== +--- smstools.orig/src/stats.h 2020-07-27 19:00:41.616207603 +0000 ++++ smstools/src/stats.h 2020-08-05 19:29:14.750137182 +0000 +@@ -33,17 +33,17 @@ + int ber; + } _stats; + +-_stats* statistics[NUMBER_OF_MODEMS]; // Statistic data (shared memory!) +-int rejected_counter; // Statistic counter, rejected SM, number does not fit into any queue +-time_t start_time; // Start time of smsd, allows statistic functions +-int printstatus; // if 1 smsd outputs status on stdout +-time_t last_stats; // time when the last stats file was created +-char d_stats[PATH_MAX]; // path to statistic files +-int stats_interval; // time between statistic files in seconds. +-int stats_no_zeroes; // Suppress files that contain only zeroes +-int status_interval; // time between updating status file in seconds ++extern _stats* statistics[NUMBER_OF_MODEMS]; // Statistic data (shared memory!) ++extern int rejected_counter; // Statistic counter, rejected SM, number does not fit into any queue ++extern time_t start_time; // Start time of smsd, allows statistic functions ++extern int printstatus; // if 1 smsd outputs status on stdout ++extern time_t last_stats; // time when the last stats file was created ++extern char d_stats[PATH_MAX]; // path to statistic files ++extern int stats_interval; // time between statistic files in seconds. ++extern int stats_no_zeroes; // Suppress files that contain only zeroes ++extern int status_interval; // time between updating status file in seconds + +-char *shared_buffer; ++extern char *shared_buffer; + + /* Creates shared memory variables for statistic data */ + +Index: smstools/src/blacklist.c +=================================================================== +--- smstools.orig/src/blacklist.c 2020-07-27 19:00:41.612207583 +0000 ++++ smstools/src/blacklist.c 2020-08-05 19:34:13.903183463 +0000 +@@ -23,6 +23,8 @@ + #include "alarm.h" + #include "smsd_cfg.h" + ++char blacklist[256]; // Filename of the black-list ++ + int inblacklist(char* msisdn) + { + FILE* file; +Index: smstools/src/blacklist.h +=================================================================== +--- smstools.orig/src/blacklist.h 2020-07-27 19:00:41.612207583 +0000 ++++ smstools/src/blacklist.h 2020-08-05 19:34:04.903151994 +0000 +@@ -15,7 +15,7 @@ + #ifndef BLACK_H + #define BLACK_H + +-char blacklist[256]; // Filename of the black-list ++extern char blacklist[256]; // Filename of the black-list + + int inblacklist(char* msisdn); + +Index: smstools/src/whitelist.c +=================================================================== +--- smstools.orig/src/whitelist.c 2020-07-27 19:00:41.616207603 +0000 ++++ smstools/src/whitelist.c 2020-08-05 19:39:23.436266057 +0000 +@@ -23,6 +23,8 @@ + #include "alarm.h" + #include "smsd_cfg.h" + ++char whitelist[256]; // Filename of the white-list ++ + /* Used with >= 3.1x */ + int inwhitelist_q(char* msisdn, char *queuename) + { +Index: smstools/src/whitelist.h +=================================================================== +--- smstools.orig/src/whitelist.h 2020-07-27 19:00:41.616207603 +0000 ++++ smstools/src/whitelist.h 2020-08-05 19:34:29.959239624 +0000 +@@ -15,7 +15,7 @@ + #ifndef WHITE_H + #define WHITE_H + +-char whitelist[256]; // Filename of the white-list ++extern char whitelist[256]; // Filename of the white-list + + /* Used with >= 3.1x */ + int inwhitelist_q(char* msisdn, char *queuename); diff --git a/package/smstools3/Config.in b/package/smstools3/Config.in new file mode 100644 index 00000000..dca3996e --- /dev/null +++ b/package/smstools3/Config.in @@ -0,0 +1,27 @@ +config BR2_PACKAGE_SMSTOOLS3 + bool "smstools3" + depends on BR2_USE_MMU # fork() + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + help + The SMS Server Tools 3 is a SMS Gateway software which can + send and receive short messages through GSM modems and + mobile phones. + + http://smstools3.kekekasvi.com/ + +if BR2_PACKAGE_SMSTOOLS3 + +config BR2_PACKAGE_SMSTOOLS3_NB_MODEMS + int "Number of modems to support" + default 1 + help + To reduce memory footprint of SMS Server Tools, you can + specify the exact number of modems connected to your + board. By default only 1 modem is used. + +endif + +comment "smstools3 needs a toolchain w/ wchar, threads" + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU diff --git a/package/smstools3/S50smsd b/package/smstools3/S50smsd new file mode 100644 index 00000000..cd781508 --- /dev/null +++ b/package/smstools3/S50smsd @@ -0,0 +1,43 @@ +#!/bin/sh +# +# Starts the SMS Server Tools 3 +# + +NAME=smsd +DAEMON=/usr/bin/$NAME +PIDFILE=/var/run/$NAME.pid +SPOOL=/var/spool/sms + +start() +{ + printf "Starting $NAME: " + mkdir -p $SPOOL/outgoing + mkdir -p $SPOOL/incoming + mkdir -p $SPOOL/checked + start-stop-daemon -S -q -p $PIDFILE --exec $DAEMON -- -c /etc/smsd.conf && echo "OK" || echo "Failed" +} + +stop() +{ + printf "Stopping $NAME: " + start-stop-daemon -K -q -p $PIDFILE && echo "OK" || echo "Failed" + rm -f $PIDFILE +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + stop + start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/smstools3/smstools3.hash b/package/smstools3/smstools3.hash new file mode 100644 index 00000000..27eda2af --- /dev/null +++ b/package/smstools3/smstools3.hash @@ -0,0 +1,7 @@ +# From http://smstools3.kekekasvi.com/packages/ +md5 6a9f038fb38a49cc3a4f8f14a88fb8af smstools-3.1.21.tar.gz +sha256 a26ba4c02b16f6cf13177bffca6c9230dc5fefaeba8e3030cd4e4905f6a92084 smstools3-3.1.21.tar.gz + +# Hash for license files +sha256 884d8f0377259f291432f4fa31d5a9720eefa0e0d797652ae686b6325a434624 doc/license.html +sha256 786b4da4dd900cad87a7dc17769458607bdeae575d62e6e98ad7144e9225f8d3 LICENSE diff --git a/package/smstools3/smstools3.mk b/package/smstools3/smstools3.mk new file mode 100644 index 00000000..87d189ba --- /dev/null +++ b/package/smstools3/smstools3.mk @@ -0,0 +1,34 @@ +################################################################################ +# +# smstools3 +# +################################################################################ + +SMSTOOLS3_VERSION = 3.1.21 +SMSTOOLS3_SITE = http://smstools3.kekekasvi.com/packages +SMSTOOLS3_LICENSE = GPL-2.0+ +SMSTOOLS3_LICENSE_FILES = doc/license.html LICENSE + +SMSTOOLS3_CFLAGS = $(TARGET_CFLAGS) +SMSTOOLS3_CFLAGS += -D NUMBER_OF_MODEMS=$(BR2_PACKAGE_SMSTOOLS3_NB_MODEMS) +SMSTOOLS3_CFLAGS += -D NOSTATS + +define SMSTOOLS3_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) CC="$(TARGET_CC)" CFLAGS="$(SMSTOOLS3_CFLAGS)" -C $(@D) +endef + +define SMSTOOLS3_INSTALL_INIT_SYSV + $(INSTALL) -m 0755 -D package/smstools3/S50smsd \ + $(TARGET_DIR)/etc/init.d/S50smsd +endef + +define SMSTOOLS3_INSTALL_TARGET_CMDS + $(INSTALL) -m 0755 -D $(@D)/src/smsd \ + $(TARGET_DIR)/usr/bin/smsd + $(INSTALL) -m 0755 -D $(@D)/scripts/sendsms \ + $(TARGET_DIR)/usr/bin/sendsms + $(INSTALL) -m 0644 -D $(@D)/examples/smsd.conf.easy \ + $(TARGET_DIR)/etc/smsd.conf +endef + +$(eval $(generic-package)) diff --git a/package/snappy/Config.in b/package/snappy/Config.in new file mode 100644 index 00000000..1bd3d6ec --- /dev/null +++ b/package/snappy/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_SNAPPY + bool "snappy" + depends on BR2_INSTALL_LIBSTDCPP + help + Snappy is a compression/decompression library. It does not + aim for maximum compression, or compatibility with any other + compression library; instead, it aims for very high speeds + and reasonable compression. + + http://google.github.io/snappy/ + +comment "snappy needs a toolchain w/ C++" + depends on !BR2_INSTALL_LIBSTDCPP diff --git a/package/snappy/snappy.hash b/package/snappy/snappy.hash new file mode 100644 index 00000000..c08c5b7f --- /dev/null +++ b/package/snappy/snappy.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 16b677f07832a612b0836178db7f374e414f94657c138e6993cbfc5dcc58651f snappy-1.1.8.tar.gz +sha256 55172044f7e241207117448a4d9d6ba1d0925c8ad66b5d4c08c70adfa9cc3de6 COPYING diff --git a/package/snappy/snappy.mk b/package/snappy/snappy.mk new file mode 100644 index 00000000..e1fa28fb --- /dev/null +++ b/package/snappy/snappy.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# snappy +# +################################################################################ + +SNAPPY_VERSION = 1.1.8 +SNAPPY_SITE = $(call github,google,snappy,$(SNAPPY_VERSION)) +SNAPPY_LICENSE = BSD-3-Clause +SNAPPY_LICENSE_FILES = COPYING +SNAPPY_CPE_ID_VENDOR = google +SNAPPY_INSTALL_STAGING = YES +SNAPPY_CONF_OPTS = -DSNAPPY_BUILD_TESTS=OFF + +$(eval $(cmake-package)) diff --git a/package/sngrep/Config.in b/package/sngrep/Config.in new file mode 100644 index 00000000..4d0d80c1 --- /dev/null +++ b/package/sngrep/Config.in @@ -0,0 +1,14 @@ +comment "sngrep needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_SNGREP + bool "sngrep" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_LIBPCAP + help + sngrep is a tool for displaying SIP calls message flows from + terminal. It supports live capture to display realtime SIP + packets and can also be used as PCAP viewer. + + https://github.com/irontec/sngrep diff --git a/package/sngrep/sngrep.hash b/package/sngrep/sngrep.hash new file mode 100644 index 00000000..33fa91ef --- /dev/null +++ b/package/sngrep/sngrep.hash @@ -0,0 +1,6 @@ +# From https://github.com/irontec/sngrep/releases/download/v1.4.7/sngrep-1.4.7.tar.gz.md5sum +md5 78fe753e24f36ddaf627bc2b734f45ba sngrep-1.4.7.tar.gz + +# Locally computed +sha256 3c96aadd8b8c6b7adb5552d6fb4234f2000f15109b0f6c5feb632c81306cc49b sngrep-1.4.7.tar.gz +sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 LICENSE diff --git a/package/sngrep/sngrep.mk b/package/sngrep/sngrep.mk new file mode 100644 index 00000000..841a7bb9 --- /dev/null +++ b/package/sngrep/sngrep.mk @@ -0,0 +1,39 @@ +################################################################################ +# +# sngrep +# +################################################################################ + +SNGREP_VERSION = 1.4.7 +SNGREP_SITE = $(call github,irontec,sngrep,v$(SNGREP_VERSION)) +SNGREP_LICENSE = GPL-3.0+ +SNGREP_LICENSE_FILES = LICENSE +SNGREP_AUTORECONF = YES +SNGREP_DEPENDENCIES = libpcap ncurses host-pkgconf + +SNGREP_CONF_ENV += \ + $(if $(BR2_STATIC_LIBS),LIBS="`$(STAGING_DIR)/usr/bin/pcap-config --static --libs`") + +SNGREP_CONF_OPTS += --disable-unicode + +# openssl and gnutls can't be enabled at the same time. +ifeq ($(BR2_PACKAGE_OPENSSL),y) +SNGREP_DEPENDENCIES += openssl +SNGREP_CONF_OPTS += --with-openssl --without-gnutls +# gnutls support also requires libgcrypt +else ifeq ($(BR2_PACKAGE_GNUTLS)$(BR2_PACKAGE_LIBGCRYPT),yy) +SNGREP_CONF_ENV += LIBGCRYPT_CONFIG=$(STAGING_DIR)/usr/bin/libgcrypt-config +SNGREP_DEPENDENCIES += gnutls libgcrypt +SNGREP_CONF_OPTS += --with-gnutls --without-openssl +else +SNGREP_CONF_OPTS += --without-gnutls --without-openssl +endif + +ifeq ($(BR2_PACKAGE_PCRE),y) +SNGREP_DEPENDENCIES += pcre +SNGREP_CONF_OPTS += --with-pcre +else +SNGREP_CONF_OPTS += --without-pcre +endif + +$(eval $(autotools-package)) diff --git a/package/snmpclitools/Config.in b/package/snmpclitools/Config.in new file mode 100644 index 00000000..00bf5994 --- /dev/null +++ b/package/snmpclitools/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_SNMPCLITOOLS + bool "snmpclitools" + depends on BR2_PACKAGE_PYTHON || BR2_PACKAGE_PYTHON3 + select BR2_PACKAGE_PYTHON_PYSMI # runtime + select BR2_PACKAGE_PYTHON_PYSNMP # runtime + help + SNMP command-line tools. + + https://github.com/etingof/snmpclitools diff --git a/package/snmpclitools/snmpclitools.hash b/package/snmpclitools/snmpclitools.hash new file mode 100644 index 00000000..4dcbdcb6 --- /dev/null +++ b/package/snmpclitools/snmpclitools.hash @@ -0,0 +1,5 @@ +# md5, sha256 from https://pypi.org/pypi/snmpclitools/json +md5 132b100f5e7b80715e6c1d424e89687c snmpclitools-0.6.4.tar.gz +sha256 820c45de419bf355c845a96610a395ec18a15176ac0362d388da7740266ea1ac snmpclitools-0.6.4.tar.gz +# Locally computed sha256 checksums +sha256 ed5561a0f5b75e93aa026c1b9fdef58e7ccbf6b2e9a2458be732afc288209d23 PKG-INFO diff --git a/package/snmpclitools/snmpclitools.mk b/package/snmpclitools/snmpclitools.mk new file mode 100644 index 00000000..a4a90e5b --- /dev/null +++ b/package/snmpclitools/snmpclitools.mk @@ -0,0 +1,13 @@ +################################################################################ +# +# snmpclitools +# +################################################################################ + +SNMPCLITOOLS_VERSION = 0.6.4 +SNMPCLITOOLS_SITE = https://files.pythonhosted.org/packages/03/2a/8488828e92a82c5416e33fba6089283162937b0f73e5b15205fb6ec3bbea +SNMPCLITOOLS_SETUP_TYPE = setuptools +SNMPCLITOOLS_LICENSE = BSD-2-Clause +SNMPCLITOOLS_LICENSE_FILES = PKG-INFO + +$(eval $(python-package)) diff --git a/package/snmppp/Config.in b/package/snmppp/Config.in new file mode 100644 index 00000000..de1a09ca --- /dev/null +++ b/package/snmppp/Config.in @@ -0,0 +1,36 @@ +config BR2_PACKAGE_SNMPPP + bool "snmp++" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on !BR2_STATIC_LIBS + help + SNMP++v3.x is a C++ API which supports SNMP v1, v2c, and v3. + + http://www.agentpp.com/snmp_pp3_x/snmp_pp3_x.html + +if BR2_PACKAGE_SNMPPP + +config BR2_PACKAGE_SNMPPP_LOGGING + bool "enable logging" + help + Enable logging output for SNMP++. + According to the SNMP++ documentation, disabling logging + "increases performance drastically and minimizes memory + consumption". + +config BR2_PACKAGE_SNMPPP_SNMPV3 + bool "enable SNMPv3" + default y + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11 + select BR2_PACKAGE_OPENSSL + help + Enable optional support for SNMP++. This selects OpenSSL. + +comment "SNMPv3 needs a toolchain w/ gcc >= 4.8" + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + +endif + +comment "snmp++ needs a toolchain w/ threads, C++, dynamic library" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \ + BR2_STATIC_LIBS diff --git a/package/snmppp/snmppp.hash b/package/snmppp/snmppp.hash new file mode 100644 index 00000000..2dcf836f --- /dev/null +++ b/package/snmppp/snmppp.hash @@ -0,0 +1,3 @@ +# Locally computed: +sha256 a3eb75e2310c315d9b2c2094154c7cd9b46684adb80a4b36b8957dcc09af4041 snmp++-3.4.2.tar.gz +sha256 f6fd4321c7eb6e51a272f91f964aea7f53039bb2b55f690d5a9d042f3a5d79b9 src/v3.cpp diff --git a/package/snmppp/snmppp.mk b/package/snmppp/snmppp.mk new file mode 100644 index 00000000..601e28e2 --- /dev/null +++ b/package/snmppp/snmppp.mk @@ -0,0 +1,24 @@ +################################################################################ +# +# snmppp +# +################################################################################ + +SNMPPP_VERSION = 3.4.2 +SNMPPP_SOURCE = snmp++-$(SNMPPP_VERSION).tar.gz +SNMPPP_SITE = http://www.agentpp.com/download +SNMPPP_DEPENDENCIES = host-pkgconf +SNMPPP_INSTALL_STAGING = YES +SNMPPP_CONF_OPTS = $(if $(BR2_PACKAGE_SNMPPP_LOGGING),--enable-logging,--disable-logging) +SNMPPP_LICENSE = SNMP++ +SNMPPP_LICENSE_FILES = src/v3.cpp + +ifeq ($(BR2_PACKAGE_SNMPPP_SNMPV3),y) +SNMPPP_CONF_ENV += CXXFLAGS="$(TARGET_CXXFLAGS) -std=c++11" +SNMPPP_CONF_OPTS += --enable-snmpv3 +SNMPPP_DEPENDENCIES += openssl +else +SNMPPP_CONF_OPTS += --disable-snmpv3 +endif + +$(eval $(autotools-package)) diff --git a/package/snort/0001-configure.in-Avoid-path-poisoning-with-libpcap.patch b/package/snort/0001-configure.in-Avoid-path-poisoning-with-libpcap.patch new file mode 100644 index 00000000..286b6f58 --- /dev/null +++ b/package/snort/0001-configure.in-Avoid-path-poisoning-with-libpcap.patch @@ -0,0 +1,35 @@ +From 732459ca3423799ae3386df3de3f5d6ea2af1b95 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sun, 1 Apr 2018 15:18:51 +0200 +Subject: [PATCH] configure.in: Avoid path poisoning with libpcap + +Prevent usage of unsafe libpcap header path when cross compiling. + +Signed-off-by: Romain Naour +Cc: Sergio Prado +--- +From http://patchwork.ozlabs.org/patch/860363/ +--- + configure.in | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/configure.in b/configure.in +index 4b3a5db..1e940b1 100644 +--- a/configure.in ++++ b/configure.in +@@ -70,8 +70,10 @@ case "$host" in + *-linux*) + linux="yes" + AC_DEFINE([LINUX],[1],[Define if Linux]) +- AC_SUBST(extra_incl) +- extra_incl="-I/usr/include/pcap" ++ if test -z "x$with_libpcap_includes"; then ++ AC_SUBST(extra_incl) ++ extra_incl="-I/usr/include/pcap" ++ fi + ;; + *-hpux10*|*-hpux11*) + AC_DEFINE([HPUX],[1],[Define if HP-UX 10 or 11]) +-- +2.14.3 + diff --git a/package/snort/0002-configure.in-Allow-to-override-the-INADDR_NONE-check.patch b/package/snort/0002-configure.in-Allow-to-override-the-INADDR_NONE-check.patch new file mode 100644 index 00000000..65751542 --- /dev/null +++ b/package/snort/0002-configure.in-Allow-to-override-the-INADDR_NONE-check.patch @@ -0,0 +1,44 @@ +From a6817677a42d1294f1a3ce7b9f46b10ec557ddfa Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sun, 1 Apr 2018 15:23:59 +0200 +Subject: [PATCH] configure.in: Allow to override the INADDR_NONE check + +Prevent configure script from trying to run programs in a cross +compilation environment to check if INADDR_NONE is defined. + +In the context of Buildroot, INADDR_NONE is always defined. +The snort package will set have_inaddr_none=yes in +SNORT_CONF_ENV. + +Signed-off-by: Romain Naour +Cc: Sergio Prado +--- + configure.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/configure.in b/configure.in +index 1e940b1..938409f 100644 +--- a/configure.in ++++ b/configure.in +@@ -284,8 +284,8 @@ AC_CHECK_TYPES([int8_t,int16_t,int32_t,int64_t]) + AC_CHECK_TYPES([boolean]) + + # In case INADDR_NONE is not defined (like on Solaris) ++AC_CACHE_CHECK([for INADDR_NONE], [have_inaddr_none], [ + have_inaddr_none="no" +-AC_MSG_CHECKING([for INADDR_NONE]) + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[ +@@ -298,7 +298,7 @@ AC_RUN_IFELSE( + return 0; + ]])], + [have_inaddr_none="yes"], +-[have_inaddr_none="no"]) ++[have_inaddr_none="no"])]) + AC_MSG_RESULT($have_inaddr_none) + if test "x$have_inaddr_none" = "xno"; then + AC_DEFINE([INADDR_NONE],[-1],[For INADDR_NONE definition]) +-- +2.14.3 + diff --git a/package/snort/0003-configure.in-convert-AC_RUN_IFELSE-to-AC_CHECK_MEMBE.patch b/package/snort/0003-configure.in-convert-AC_RUN_IFELSE-to-AC_CHECK_MEMBE.patch new file mode 100644 index 00000000..059190ff --- /dev/null +++ b/package/snort/0003-configure.in-convert-AC_RUN_IFELSE-to-AC_CHECK_MEMBE.patch @@ -0,0 +1,239 @@ +From 1ef6bdaeb0463a208a14e5d90646ce337df738fc Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sun, 1 Apr 2018 15:38:55 +0200 +Subject: [PATCH] configure.in: convert AC_RUN_IFELSE to AC_CHECK_MEMBERS + +With AC_CHECK_MEMBERS, we don't need to compile and run a test program +to check if a daq structure element is defined. + +Also check DAQ_Data_Channel_Params_t with params.flags + +typedef struct _DAQ_Data_Channel_Params_t +{ + unsigned flags; /* DAQ_DATA_CHANNEL_* flags*/ + unsigned timeout_ms;/* timeout of the data channel in milliseconds */ + unsigned length; /* [Future] length of the data associated with the data channel */ + uint8_t* data; /* [Future] opaque data blob to return with the data channel */ +} DAQ_Data_Channel_Params_t; + +https://github.com/Xiche/libdaq/blob/master/api/daq_common.h + +Signed-off-by: Romain Naour +Cc: Sergio Prado +--- + configure.in | 143 +++++++++++++++++------------------------------------------ + 1 file changed, 41 insertions(+), 102 deletions(-) + +diff --git a/configure.in b/configure.in +index 938409f..571322b 100644 +--- a/configure.in ++++ b/configure.in +@@ -718,17 +718,11 @@ fi + AC_CHECK_FUNCS([daq_hup_apply] [daq_acquire_with_meta] [daq_dp_add_dc]) + + AC_MSG_CHECKING([for daq real addresses]) +-AC_RUN_IFELSE( +-[AC_LANG_PROGRAM( +-[[ +-#include +-]], +-[[ +- DAQ_PktHdr_t hdr; +- hdr.n_real_dPort = 0; +-]])], +-[have_daq_real_addresses="yes"], +-[have_daq_real_addresses="no"]) ++ ++AC_CHECK_MEMBERS([DAQ_PktHdr_t hdr.n_real_dPort], ++ [have_daq_real_addresses="yes"], ++ [have_daq_real_addresses="no"], ++ [[#include ]]) + AC_MSG_RESULT($have_daq_real_addresses) + if test "x$have_daq_real_addresses" = "xyes"; then + AC_DEFINE([HAVE_DAQ_REAL_ADDRESSES],[1], +@@ -756,17 +750,11 @@ if test "x$ac_cv_func_daq_dp_add_dc" = "xyes"; then + fi + + AC_MSG_CHECKING([for daq address space ID]) +-AC_RUN_IFELSE( +-[AC_LANG_PROGRAM( +-[[ +-#include +-]], +-[[ +- DAQ_PktHdr_t hdr; +- hdr.address_space_id = 0; +-]])], +-[have_daq_address_space_id="yes"], +-[have_daq_address_space_id="no"]) ++ ++AC_CHECK_MEMBERS([DAQ_PktHdr_t hdr.address_space_id], ++ [have_daq_address_space_id="yes"], ++ [have_daq_address_space_id="no"], ++ [[#include ]]) + AC_MSG_RESULT($have_daq_address_space_id) + if test "x$have_daq_address_space_id" = "xyes"; then + AC_DEFINE([HAVE_DAQ_ADDRESS_SPACE_ID],[1], +@@ -774,17 +762,10 @@ if test "x$have_daq_address_space_id" = "xyes"; then + fi + + AC_MSG_CHECKING([for daq flow ID]) +-AC_RUN_IFELSE( +-[AC_LANG_PROGRAM( +-[[ +-#include +-]], +-[[ +- DAQ_PktHdr_t hdr; +- hdr.flow_id = 0; +-]])], +-[have_daq_flow_id="yes"], +-[have_daq_flow_id="no"]) ++AC_CHECK_MEMBERS([DAQ_PktHdr_t hdr.flow_id], ++ [have_daq_flow_id="yes"], ++ [have_daq_flow_id="no"], ++ [[#include ]]) + AC_MSG_RESULT($have_daq_flow_id) + if test "x$have_daq_flow_id" = "xyes"; then + AC_DEFINE([HAVE_DAQ_FLOW_ID],[1], +@@ -792,19 +773,10 @@ if test "x$have_daq_flow_id" = "xyes"; then + fi + + AC_MSG_CHECKING([for daq extended flow modifiers]) +-AC_RUN_IFELSE( +-[AC_LANG_PROGRAM( +-[[ +-#include +-]], +-[[ +- DAQ_ModFlow_t mod; +- mod.type = 0; +- mod.length = 0; +- mod.value = NULL; +-]])], +-[have_daq_ext_modflow="yes"], +-[have_daq_ext_modflow="no"]) ++AC_CHECK_MEMBERS([DAQ_ModFlow_t mod.type, DAQ_ModFlow_t mod.length, DAQ_ModFlow_t mod.value], ++ [have_daq_ext_modflow="yes"], ++ [have_daq_ext_modflow="no"], ++ [[#include ]]) + AC_MSG_RESULT($have_daq_ext_modflow) + if test "x$have_daq_ext_modflow" = "xyes"; then + CCONFIGFLAGS="${CCONFIGFLAGS} -DHAVE_DAQ_EXT_MODFLOW" +@@ -813,19 +785,11 @@ if test "x$have_daq_ext_modflow" = "xyes"; then + fi + + AC_MSG_CHECKING([for daq query flow]) +-AC_RUN_IFELSE( +-[AC_LANG_PROGRAM( +-[[ +-#include +-]], +-[[ +- DAQ_QueryFlow_t mod; +- mod.type = 0; +- mod.length = 0; +- mod.value = NULL; +-]])], +-[have_daq_queryflow="yes"], +-[have_daq_queryflow="no"]) ++ ++AC_CHECK_MEMBERS([DAQ_QueryFlow_t mod.type, DAQ_QueryFlow_t mod.length, DAQ_QueryFlow_t mod.value], ++ [have_daq_queryflow="yes"], ++ [have_daq_queryflow="no"], ++ [[#include ]]) + AC_MSG_RESULT($have_daq_queryflow) + if test "x$have_daq_queryflow" = "xyes"; then + CCONFIGFLAGS="${CCONFIGFLAGS} -DHAVE_DAQ_QUERYFLOW" +@@ -834,16 +798,11 @@ if test "x$have_daq_queryflow" = "xyes"; then + fi + + AC_MSG_CHECKING([for daq data channel flags]) +-AC_RUN_IFELSE( +-[AC_LANG_PROGRAM( +-[[ +-#include +-]], +-[[ +- DAQ_Data_Channel_Params_t params; +-]])], +-[have_daq_data_channel_flags="yes"], +-[have_daq_data_channel_flags="no"]) ++ ++AC_CHECK_MEMBERS([DAQ_Data_Channel_Params_t params.flags], ++ [have_daq_data_channel_flags="yes"], ++ [have_daq_data_channel_flags="no"], ++ [[#include ]]) + AC_MSG_RESULT($have_daq_data_channel_flags) + if test "x$have_daq_data_channel_flags" = "xyes"; then + CCONFIGFLAGS="${CCONFIGFLAGS} -DHAVE_DAQ_DATA_CHANNEL_PARAMS" +@@ -852,17 +811,10 @@ if test "x$have_daq_data_channel_flags" = "xyes"; then + fi + + AC_MSG_CHECKING([for separate IP versions on pinhole endpoints]) +-AC_RUN_IFELSE( +-[AC_LANG_PROGRAM( +-[[ +-#include +-]], +-[[ +- DAQ_DP_key_t dpKey; +- dpKey.src_af = 0; +-]])], +-[have_daq_data_channel_separate_ip_versions="yes"], +-[have_daq_data_channel_separate_ip_versions="no"]) ++AC_CHECK_MEMBERS([DAQ_DP_key_t dpKey.src_af], ++ [have_daq_data_channel_separate_ip_versions="yes"], ++ [have_daq_data_channel_separate_ip_versions="no"], ++ [[#include ]]) + AC_MSG_RESULT($have_daq_data_channel_separate_ip_versions) + if test "x$have_daq_data_channel_separate_ip_versions" = "xyes"; then + CCONFIGFLAGS="${CCONFIGFLAGS} -DHAVE_DAQ_DATA_CHANNEL_SEPARATE_IP_VERSIONS" +@@ -889,17 +841,10 @@ if test "x$have_daq_verdict_retry" = "xyes"; then + fi + + AC_MSG_CHECKING([for daq packet trace]) +-AC_RUN_IFELSE( +-[AC_LANG_PROGRAM( +-[[ +-#include +-]], +-[[ +- DAQ_PktHdr_t hdr; +- hdr.flags = DAQ_PKT_FLAG_TRACE_ENABLED; +-]])], +-[have_daq_packet_trace="yes"], +-[have_daq_packet_trace="no"]) ++AC_CHECK_MEMBERS([DAQ_PktHdr_t hdr.flags], ++ [have_daq_packet_trace="yes"], ++ [have_daq_packet_trace="no"], ++ [[#include ]]) + AC_MSG_RESULT($have_daq_packet_trace) + if test "x$have_daq_packet_trace" = "xyes"; then + AC_DEFINE([HAVE_DAQ_PKT_TRACE],[1], +@@ -909,17 +854,11 @@ else + fi + + AC_MSG_CHECKING([for daq verdict reason]) +-AC_RUN_IFELSE( +-[AC_LANG_PROGRAM( +-[[ +-#include +-]], +-[[ +- DAQ_ModFlow_t fl; +- fl.type = DAQ_MODFLOW_TYPE_VER_REASON; +-]])], +-[have_daq_verdict_reason="yes"], +-[have_daq_verdict_reason="no"]) ++ ++AC_CHECK_MEMBERS([DAQ_ModFlow_t fl.type], ++ [have_daq_verdict_reason="yes"], ++ [have_daq_verdict_reason="no"], ++ [[#include ]]) + AC_MSG_RESULT($have_daq_verdict_reason) + if test "x$have_daq_verdict_reason" = "xyes"; then + AC_DEFINE([HAVE_DAQ_VERDICT_REASON],[1], +-- +2.14.3 + diff --git a/package/snort/0004-configure.in-convert-AC_RUN_IFELSE-to-AC_COMPILE_IFE.patch b/package/snort/0004-configure.in-convert-AC_RUN_IFELSE-to-AC_COMPILE_IFE.patch new file mode 100644 index 00000000..9c5e611b --- /dev/null +++ b/package/snort/0004-configure.in-convert-AC_RUN_IFELSE-to-AC_COMPILE_IFE.patch @@ -0,0 +1,48 @@ +From 075b5cf8d3940ed2c39fb37c1e14a652e4a6f2fc Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sun, 1 Apr 2018 16:21:31 +0200 +Subject: [PATCH] configure.in: convert AC_RUN_IFELSE to AC_COMPILE_IFELSE + +Prevent configure script from trying to run programs in a cross +compilation environment. + +Signed-off-by: Romain Naour +Cc: Sergio Prado +--- + configure.in | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/configure.in b/configure.in +index 571322b..e489037 100644 +--- a/configure.in ++++ b/configure.in +@@ -431,7 +431,7 @@ if test "x$LPCAP" = "xno"; then + fi + + AC_MSG_CHECKING([for pcap_lex_destroy]) +-AC_RUN_IFELSE( ++AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ + #include +@@ -823,7 +823,7 @@ if test "x$have_daq_data_channel_separate_ip_versions" = "xyes"; then + fi + + AC_MSG_CHECKING([for DAQ_VERDICT_RETRY]) +-AC_RUN_IFELSE( ++AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ + #include +@@ -886,7 +886,7 @@ if eval "echo $host_cpu|grep -i sparc >/dev/null"; then + OLD_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -mcpu=v9 " + AC_MSG_CHECKING([for sparc %time register]) +- AC_RUN_IFELSE( ++ AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[]], + [[ +-- +2.14.3 + diff --git a/package/snort/0005-fix-sparc.patch b/package/snort/0005-fix-sparc.patch new file mode 100644 index 00000000..14792d2c --- /dev/null +++ b/package/snort/0005-fix-sparc.patch @@ -0,0 +1,28 @@ +When checking if the architecture supports the %time register +instruction, do not force -mcpu to v9 while doing so. Otherwise it's +like "let's see if this v9 instruction exists when I force the compiler +to think I'm using v9", which is non-sensical. + +Signed-off-by: Fabrice Fontaine + +diff -Naurp ./snort-2.9.11.1-orig/configure.in snort-2.9.11.1/configure.in +--- ./snort-2.9.11.1-orig/configure.in 2018-05-10 12:20:19.253510678 +0200 ++++ snort-2.9.11.1/configure.in 2018-05-10 12:40:18.547584998 +0200 +@@ -942,8 +942,6 @@ fi + + # check for sparc %time register + if eval "echo $host_cpu|grep -i sparc >/dev/null"; then +- OLD_CFLAGS="$CFLAGS" +- CFLAGS="$CFLAGS -mcpu=v9 " + AC_MSG_CHECKING([for sparc %time register]) + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( +@@ -957,8 +955,6 @@ if eval "echo $host_cpu|grep -i sparc >/ + AC_MSG_RESULT($sparcv9) + if test "x$sparcv9" = "xyes"; then + AC_DEFINE([SPARCV9],[1],[For sparc v9 with %time register]) +- else +- CFLAGS="$OLD_CFLAGS" + fi + fi + diff --git a/package/snort/0006-Fix-compile-error-when-building-against-uclibc-or-mu.patch b/package/snort/0006-Fix-compile-error-when-building-against-uclibc-or-mu.patch new file mode 100644 index 00000000..ce9d5526 --- /dev/null +++ b/package/snort/0006-Fix-compile-error-when-building-against-uclibc-or-mu.patch @@ -0,0 +1,34 @@ +From dc2f54097da3cd493b8f4d06a14ef40be484d24f Mon Sep 17 00:00:00 2001 +From: Sergio Prado +Date: Thu, 21 Feb 2019 15:02:08 -0300 +Subject: [PATCH] Fix compile error when building against uclibc or musl + +The build fails when dereferencing the rpcent structure with uclibc or musl C libraries. + +../../../src/dynamic-preprocessors/appid/service_plugins/service_rpc.c:241:20: +error: dereferencing pointer to incomplete type ‘struct rpcent’ + if (rpc->r_name) + +That's because rpc.h should be included when using these C libraries. + +Signed-off-by: Sergio Prado +--- + src/dynamic-preprocessors/appid/service_plugins/service_rpc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/dynamic-preprocessors/appid/service_plugins/service_rpc.c b/src/dynamic-preprocessors/appid/service_plugins/service_rpc.c +index 81bc8a5db8ab..2e45246083a8 100644 +--- a/src/dynamic-preprocessors/appid/service_plugins/service_rpc.c ++++ b/src/dynamic-preprocessors/appid/service_plugins/service_rpc.c +@@ -32,7 +32,7 @@ + #include "flow.h" + #include "service_api.h" + +-#if defined(FREEBSD) || defined(OPENBSD) ++#if defined(FREEBSD) || defined(OPENBSD) || (defined(LINUX) && defined(__UCLIBC__) && !defined(__UCLIBC_HAS_RPC__) || !defined(__GLIBC__)) + #include "rpc/rpc.h" + #endif + +-- +2.7.4 + diff --git a/package/snort/0007-Fix-error-when-building-on-a-Fedora-host-machine.patch b/package/snort/0007-Fix-error-when-building-on-a-Fedora-host-machine.patch new file mode 100644 index 00000000..afe9672a --- /dev/null +++ b/package/snort/0007-Fix-error-when-building-on-a-Fedora-host-machine.patch @@ -0,0 +1,51 @@ +From eae97632157b73f0ca7c099232617b2777d0fa54 Mon Sep 17 00:00:00 2001 +From: Sergio Prado +Date: Sat, 21 Dec 2019 12:00:42 -0300 +Subject: [PATCH] Fix error when building on a Fedora host machine. + +Remove the code that adds unsafe header/library path when +cross-compiling on a Fedora host machine. + +Signed-off-by: Sergio Prado +--- + configure.in | 24 ------------------------ + 1 file changed, 24 deletions(-) + +diff --git a/configure.in b/configure.in +index e6586f399898..fb35d4d7e3e3 100644 +--- a/configure.in ++++ b/configure.in +@@ -957,30 +957,6 @@ if test "x$enable_dlclose" = "xno"; then + AC_DEFINE([DISABLE_DLCLOSE_FOR_VALGRIND_TESTING],[1],[Don't close opened shared objects for valgrind leak testing of dynamic libraries]) + fi + +-################################################## +-# Fedora 28+ does not have inbuilt SunRPC support# +-# in glibc and is separately availble in tirpc # +-# package. Make sure we've got the library and # +-# link it # +-################################################## +- +-if test -f /etc/fedora-release ; then +- DISTRO_VERSION=$(awk '{ print $3 }' /etc/fedora-release) +- if test $DISTRO_VERSION -ge 28 ; then +- TIRPC="" +- AC_CHECK_LIB(tirpc,bindresvport,, TIRPC="no") +- echo "$TIRPC" +- if test "x$TIRPC" = "xno"; then +- echo +- echo " ERROR! tirpc not found, get it by running " +- echo " yum install libtirpc-devel " +- exit +- fi +- LIBS="${LIBS} -ltirpc" +- extra_incl="-I/usr/include/tirpc" +- fi +-fi +- + Z_LIB="" + AC_CHECK_HEADERS(zlib.h,, Z_LIB="no") + if test "x$Z_LIB" = "xno"; then +-- +2.17.1 + diff --git a/package/snort/Config.in b/package/snort/Config.in new file mode 100644 index 00000000..fc74efcf --- /dev/null +++ b/package/snort/Config.in @@ -0,0 +1,27 @@ +config BR2_PACKAGE_SNORT + bool "snort" + depends on BR2_USE_WCHAR + depends on BR2_USE_MMU # fork() + depends on !BR2_STATIC_LIBS # daq + depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC || BR2_TOOLCHAIN_HAS_THREADS # libtirpc + select BR2_PACKAGE_LIBDNET + select BR2_PACKAGE_LIBPCAP + select BR2_PACKAGE_DAQ + select BR2_PACKAGE_PCRE + select BR2_PACKAGE_LIBTIRPC if !BR2_TOOLCHAIN_HAS_NATIVE_RPC + select BR2_PACKAGE_ZLIB + help + Snort is a free and open source network intrusion + prevention system (IPS) and network intrusion detection + system (IDS). It can perform protocol analysis, content + searching/matching, and can be used to detect a variety + of attacks and probes, such as buffer overflows, stealth + port scans, CGI attacks, SMB probes, OS fingerprinting + attempts, and much more. + + https://www.snort.org + +comment "snort needs a toolchain w/ wchar, threads, dynamic library" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || BR2_STATIC_LIBS || \ + !(BR2_TOOLCHAIN_HAS_THREADS || BR2_TOOLCHAIN_HAS_NATIVE_RPC) diff --git a/package/snort/snort.hash b/package/snort/snort.hash new file mode 100644 index 00000000..115a8398 --- /dev/null +++ b/package/snort/snort.hash @@ -0,0 +1,9 @@ +# From https://www.snort.org/downloads/snort/md5s +md5 006d6b0d71c6c7bd23eac74670f5b4e6 snort-2.9.17.1.tar.gz + +# Locally computed: +sha256 303d3d5dc5affecfeaad3a331d3163f901d48d960fdd6598cb55c6d1591eed82 snort-2.9.17.1.tar.gz + +# Hash for license files: +sha256 f98260a6d3e5ef4ede8a2a6b698e5ac91d64c09243f7171e1c5b17b920a835c7 LICENSE +sha256 3f1cbfb20bb2c608e1a474421880d08b8cba6abb00ab7736d22c481d71656a6d COPYING diff --git a/package/snort/snort.mk b/package/snort/snort.mk new file mode 100644 index 00000000..3df29411 --- /dev/null +++ b/package/snort/snort.mk @@ -0,0 +1,48 @@ +################################################################################ +# +# snort +# +################################################################################ + +SNORT_VERSION = 2.9.17.1 +SNORT_SITE = https://www.snort.org/downloads/snort +SNORT_LICENSE = GPL-2.0 +SNORT_LICENSE_FILES = LICENSE COPYING +SNORT_CPE_ID_VENDOR = snort + +SNORT_DEPENDENCIES = libpcap libdnet daq pcre zlib host-pkgconf + +# patching configure.in +SNORT_AUTORECONF = YES + +SNORT_CONF_OPTS = \ + --with-libpcre-includes=$(STAGING_DIR)/usr/include \ + --with-libpcre-libraries=$(STAGING_DIR)/usr/lib \ + --with-libpcap-includes=$(STAGING_DIR)/usr/include/pcap \ + --disable-static-daq + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_85180),y) +SNORT_CFLAGS += -O0 +endif + +ifeq ($(BR2_PACKAGE_LIBTIRPC),y) +SNORT_DEPENDENCIES += libtirpc +SNORT_CFLAGS += `$(PKG_CONFIG_HOST_BINARY) --cflags libtirpc` +SNORT_LIBS += `$(PKG_CONFIG_HOST_BINARY) --libs libtirpc` +endif + +# luajit and openssl should be enabled to build with +# OpenAppID support +ifeq ($(BR2_PACKAGE_LUAJIT)$(BR2_PACKAGE_OPENSSL),yy) +SNORT_DEPENDENCIES += luajit openssl +SNORT_CONF_OPTS += --enable-open-appid +else +SNORT_CONF_OPTS += --disable-open-appid +endif + +SNORT_CONF_ENV = \ + CFLAGS="$(TARGET_CFLAGS) $(SNORT_CFLAGS)" \ + LIBS="$(SNORT_LIBS)" \ + have_inaddr_none=yes + +$(eval $(autotools-package)) diff --git a/package/socat/0001-no-documentation.patch b/package/socat/0001-no-documentation.patch new file mode 100644 index 00000000..ce088dfa --- /dev/null +++ b/package/socat/0001-no-documentation.patch @@ -0,0 +1,37 @@ +socat: disable documentation build/installation + +The documentation generation process requires a special yold2man +program, for which we don't have a package in Buildroot. Since we +generally don't care much about documentation of packages, just adjust +the package Makefile.in to not build/install its documentation. + +Signed-off-by: Thomas Petazzoni + +Index: b/Makefile.in +=================================================================== +--- a/Makefile.in ++++ b/Makefile.in +@@ -93,7 +93,7 @@ + Config/Makefile.Cygwin-1-5-25 Config/config.Cygwin-1-5-25.h \ + Config/Makefile.MacOSX-10-5 Config/config.MacOSX-10-5.h + +-all: progs doc ++all: progs + + scmclean: gitclean + +@@ -136,13 +136,11 @@ + strip: progs + strip $(PROGS) + +-install: progs $(srcdir)/doc/socat.1 ++install: progs + mkdir -p $(DESTDIR)$(BINDEST) + $(INSTALL) -m 755 socat $(DESTDIR)$(BINDEST) + $(INSTALL) -m 755 procan $(DESTDIR)$(BINDEST) + $(INSTALL) -m 755 filan $(DESTDIR)$(BINDEST) +- mkdir -p $(DESTDIR)$(MANDEST)/man1 +- $(INSTALL) -m 644 $(srcdir)/doc/socat.1 $(DESTDIR)$(MANDEST)/man1/ + + uninstall: + rm -f $(DESTDIR)$(BINDEST)/socat diff --git a/package/socat/0002-compat-set-NETDB_INTERNAL.patch b/package/socat/0002-compat-set-NETDB_INTERNAL.patch new file mode 100644 index 00000000..da31073b --- /dev/null +++ b/package/socat/0002-compat-set-NETDB_INTERNAL.patch @@ -0,0 +1,35 @@ +From e7804d1750652e39c7a5803d360b29b2637a695f Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Sun, 28 Aug 2016 21:04:01 +0200 +Subject: [PATCH] compat: set NETDB_INTERNAL + +Musl doesn't provide NETDB_INTERNAL which is defined in resolv/netdb.h +in Glibc [1]. + +Set NETDB_INTERNAL to -1 locally if not already defined. +Based on [2]. + +[1] https://sourceware.org/git/?p=glibc.git;a=blob;f=resolv/netdb.h;h=3aba530932c7a62a4f23e3193e9186da677f552b;hb=fdfc9260b61d3d72541f18104d24c7bcb0ce5ca2#l74 +[2] http://git.alpinelinux.org/cgit/aports/tree/main/socat/netdb-internal.patch?id=5a45173b50892cb634197c30b3506ebff98d3b7d + +Signed-off-by: Romain Naour +--- + compat.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/compat.h b/compat.h +index 19a929f..4f5ee6d 100644 +--- a/compat.h ++++ b/compat.h +@@ -666,6 +666,8 @@ typedef int sig_atomic_t; + + #if !defined(NETDB_INTERNAL) && defined(h_NETDB_INTERNAL) + # define NETDB_INTERNAL h_NETDB_INTERNAL ++#elif !defined(NETDB_INTERNAL) ++# define NETDB_INTERNAL (-1) + #endif + + #ifndef INET_ADDRSTRLEN +-- +2.5.5 + diff --git a/package/socat/Config.in b/package/socat/Config.in new file mode 100644 index 00000000..af456ab7 --- /dev/null +++ b/package/socat/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_SOCAT + bool "socat" + depends on BR2_USE_MMU # fork() + help + Multipurpose socket relay program. + + http://www.dest-unreach.org/socat/ diff --git a/package/socat/socat.hash b/package/socat/socat.hash new file mode 100644 index 00000000..5a4c5204 --- /dev/null +++ b/package/socat/socat.hash @@ -0,0 +1,8 @@ +# From http://www.dest-unreach.org/socat/download.md5sum +md5 36cad050ecf4981ab044c3fbd75c643f socat-1.7.4.1.tar.bz2 +# From http://www.dest-unreach.org/socat/download.sha256sum +sha256 3faca25614e89123dff5045680549ecef519d02e331aaf3c4f5a8f6837c675e9 socat-1.7.4.1.tar.bz2 +# Locally calculated +sha256 b1ebebbce145027f4268211f36d121b083aeeabdc1736eb144b8afd8e86ce8da README +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING +sha256 fd9e48ca316a5032069b9521f4f4b4d9b1c60365012bae1e62286bcd5bd2e761 COPYING.OpenSSL diff --git a/package/socat/socat.mk b/package/socat/socat.mk new file mode 100644 index 00000000..61c98525 --- /dev/null +++ b/package/socat/socat.mk @@ -0,0 +1,46 @@ +################################################################################ +# +# socat +# +################################################################################ + +SOCAT_VERSION = 1.7.4.1 +SOCAT_SOURCE = socat-$(SOCAT_VERSION).tar.bz2 +SOCAT_SITE = http://www.dest-unreach.org/socat/download +SOCAT_LICENSE = GPL-2.0 with OpenSSL exception +SOCAT_LICENSE_FILES = README COPYING COPYING.OpenSSL +SOCAT_CPE_ID_VENDOR = dest-unreach + +ifeq ($(BR2_powerpc)$(BR2_powerpc64)$(BR2_powerpc64le),y) +SOCAT_CONF_ENV += \ + sc_cv_sys_crdly_shift=12 \ + sc_cv_sys_tabdly_shift=10 \ + sc_cv_sys_csize_shift=8 +else +SOCAT_CONF_ENV += \ + sc_cv_sys_crdly_shift=9 \ + sc_cv_sys_tabdly_shift=11 \ + sc_cv_sys_csize_shift=4 +endif + +# We need to run autoconf to regenerate the configure script, since we patch +# configure.in and Makefile.in. However, the package only uses autoconf and not +# automake, so we can't use the normal autoreconf logic. + +SOCAT_DEPENDENCIES = host-autoconf +# incompatibile license (GPL-3.0+) +SOCAT_CONF_OPTS = --disable-readline + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +SOCAT_DEPENDENCIES += openssl +else +SOCAT_CONF_OPTS += --disable-openssl +endif + +define SOCAT_RUN_AUTOCONF + (cd $(@D); $(AUTOCONF)) +endef + +SOCAT_PRE_CONFIGURE_HOOKS += SOCAT_RUN_AUTOCONF + +$(eval $(autotools-package)) diff --git a/package/socketcand/0001-Fix-GCC10-build-failure.patch b/package/socketcand/0001-Fix-GCC10-build-failure.patch new file mode 100644 index 00000000..057cd406 --- /dev/null +++ b/package/socketcand/0001-Fix-GCC10-build-failure.patch @@ -0,0 +1,113 @@ +From ae0af080058a576d62c72ffc011d644d0b4dcb98 Mon Sep 17 00:00:00 2001 +From: Yegor Yefremov +Date: Tue, 7 Jul 2020 19:39:41 +0200 +Subject: [PATCH] Fix GCC10 build failure (#17) + +GCC10 breaks on multiple definitions: + +ld: /tmp/ccFiGYO7.o:(.bss+0x114): multiple definition of `tv'; /tmp/cc7f6J5h.o:(.bss+0x80): first defined here + +Change the scope of the related variables. + +Signed-off-by: Yegor Yefremov + +[Retrieved from: +https://github.com/linux-can/socketcand/commit/ae0af080058a576d62c72ffc011d644d0b4dcb98] +Signed-off-by: Fabrice Fontaine +--- + socketcand.c | 3 ++- + state_bcm.c | 4 ++-- + state_isotp.c | 2 +- + state_raw.c | 2 +- + 4 files changed, 6 insertions(+), 5 deletions(-) + +diff --git a/socketcand.c b/socketcand.c +index 8d84754..6125be9 100644 +--- a/socketcand.c ++++ b/socketcand.c +@@ -102,7 +102,6 @@ socklen_t unaddrlen; + struct sockaddr_un remote_unaddr; + socklen_t remote_unaddrlen; + char* interface_string; +-struct ifreq ifr, ifr_brd; + + int state_changed(char *buf, int current_state) + { +@@ -666,6 +665,8 @@ int receive_command(int socket, char *buffer) { + } + + void determine_adress() { ++ struct ifreq ifr, ifr_brd; ++ + int probe_socket = socket(AF_INET, SOCK_DGRAM, 0); + + if(probe_socket < 0) { +diff --git a/state_bcm.c b/state_bcm.c +index cfaa8ed..05a5f7c 100644 +--- a/state_bcm.c ++++ b/state_bcm.c +@@ -28,8 +28,6 @@ + #define RXLEN 128 + + int sc = -1; +-fd_set readfds; +-struct timeval tv; + + void state_bcm() { + int i, j, ret; +@@ -38,6 +36,7 @@ void state_bcm() { + struct ifreq ifr; + char rxmsg[RXLEN]; + char buf[MAXLEN]; ++ fd_set readfds; + + struct { + struct bcm_msg_head msg_head; +@@ -91,6 +90,7 @@ void state_bcm() { + } + + if (FD_ISSET(sc, &readfds)) { ++ struct timeval tv; + + ret = recvfrom(sc, &msg, sizeof(msg), 0, + (struct sockaddr*)&caddr, &caddrlen); +diff --git a/state_isotp.c b/state_isotp.c +index 5c671f9..e1b944b 100644 +--- a/state_isotp.c ++++ b/state_isotp.c +@@ -25,7 +25,6 @@ + #include + + int si = -1; +-fd_set readfds; + + void state_isotp() { + int i, items, ret; +@@ -39,6 +38,7 @@ void state_isotp() { + char buf[MAXLEN]; /* inet commands to can */ + unsigned char isobuf[ISOTPLEN+1]; /* binary buffer for isotp socket */ + unsigned char tmp; ++ fd_set readfds; + + while(previous_state != STATE_ISOTP) { + +diff --git a/state_raw.c b/state_raw.c +index e83e6ec..2c49975 100644 +--- a/state_raw.c ++++ b/state_raw.c +@@ -25,7 +25,6 @@ + int raw_socket; + struct ifreq ifr; + struct sockaddr_can addr; +-fd_set readfds; + struct msghdr msg; + struct can_frame frame; + struct iovec iov; +@@ -36,6 +35,7 @@ struct cmsghdr *cmsg; + void state_raw() { + char buf[MAXLEN]; + int i, ret, items; ++ fd_set readfds; + + if(previous_state != STATE_RAW) { + diff --git a/package/socketcand/Config.in b/package/socketcand/Config.in new file mode 100644 index 00000000..7d663251 --- /dev/null +++ b/package/socketcand/Config.in @@ -0,0 +1,13 @@ +config BR2_PACKAGE_SOCKETCAND + bool "socketcand" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + help + Socketcand is a daemon that provides access to CAN interfaces + on a machine via a network interface. + + https://github.com/dschanoeh/socketcand + +comment "socketcand needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/socketcand/socketcand.hash b/package/socketcand/socketcand.hash new file mode 100644 index 00000000..71393989 --- /dev/null +++ b/package/socketcand/socketcand.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 3c5cc7af4ff707ac344e62d2e37a74b59aeccd14b88e837cc142c52b69d64a39 socketcand-69e2201222f015a1abe7a58ecf61325012cd91b1.tar.gz +sha256 18bda0db4e3c56cefdb1b9b01b7eada7764c0746f6321378c30d78f5ee81cfee socketcand.c diff --git a/package/socketcand/socketcand.mk b/package/socketcand/socketcand.mk new file mode 100644 index 00000000..b11aa3c9 --- /dev/null +++ b/package/socketcand/socketcand.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# socketcand +# +################################################################################ + +SOCKETCAND_VERSION = 69e2201222f015a1abe7a58ecf61325012cd91b1 +SOCKETCAND_SITE = $(call github,linux-can,socketcand,$(SOCKETCAND_VERSION)) +SOCKETCAND_AUTORECONF = YES +SOCKETCAND_LICENSE = BSD-3-Clause or GPL-2.0 +SOCKETCAND_LICENSE_FILES = socketcand.c + +ifeq ($(BR2_PACKAGE_LIBCONFIG),y) +SOCKETCAND_DEPENDENCIES = libconfig +else +SOCKETCAND_CONF_OPTS = --without-config +endif + +$(eval $(autotools-package)) diff --git a/package/sofia-sip/0001-soa_tag.h-reintroduce-soatag_local_sdp_str_ref.patch b/package/sofia-sip/0001-soa_tag.h-reintroduce-soatag_local_sdp_str_ref.patch new file mode 100644 index 00000000..57c0bfe2 --- /dev/null +++ b/package/sofia-sip/0001-soa_tag.h-reintroduce-soatag_local_sdp_str_ref.patch @@ -0,0 +1,30 @@ +From bcd0f17fd83f2dfe570a3ab17249a5c7290b27f2 Mon Sep 17 00:00:00 2001 +From: Pekka Pessi +Date: Thu, 24 Mar 2011 14:45:21 +0200 +Subject: [PATCH] soa_tag.h: reintroduce soatag_local_sdp_str_ref + +Thanks to Erik Habicht for spotting it + +Signed-off-by: Bernd Kuhls +[rebased for sofia-sip 1.13.1-d10a3d268c, patch sent upstream + https://github.com/freeswitch/sofia-sip/pull/23] +--- + libsofia-sip-ua/soa/sofia-sip/soa_tag.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/libsofia-sip-ua/soa/sofia-sip/soa_tag.h b/libsofia-sip-ua/soa/sofia-sip/soa_tag.h +index 723ca02..d9448d6 100644 +--- a/libsofia-sip-ua/soa/sofia-sip/soa_tag.h ++++ b/libsofia-sip-ua/soa/sofia-sip/soa_tag.h +@@ -130,7 +130,7 @@ SOFIAPUBVAR tag_typedef_t soatag_local_sdp_ref; + SOFIAPUBVAR tag_typedef_t soatag_local_sdp_str; + #define SOATAG_LOCAL_SDP_STR_REF(x) \ + soatag_local_sdp_str_ref, tag_str_vr(&(x)) +-SOFIAPUBVAR tag_typedef_t soatag_session_sdp_str_ref; ++SOFIAPUBVAR tag_typedef_t soatag_local_sdp_str_ref; + + #define SOATAG_AF(x) soatag_af, tag_int_v((x)) + SOFIAPUBVAR tag_typedef_t soatag_af; +-- +1.7.7 + diff --git a/package/sofia-sip/0002-sofia-sip-fix-s2tcase.c.patch b/package/sofia-sip/0002-sofia-sip-fix-s2tcase.c.patch new file mode 100644 index 00000000..a2cc4128 --- /dev/null +++ b/package/sofia-sip/0002-sofia-sip-fix-s2tcase.c.patch @@ -0,0 +1,38 @@ +From d66a2e55daf223737c07c59b1be45a2d91212ef6 Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Sun, 26 Jul 2020 13:47:16 +0200 +Subject: [PATCH] [sofia-sip] fix s2tcase.c + +Fixes build error with recent libcheck: +https://github.com/freeswitch/sofia-sip/issues/22 + +Signed-off-by: Bernd Kuhls +--- + s2check/s2tcase.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/libs/sofia-sip/s2check/s2tcase.c b/libs/sofia-sip/s2check/s2tcase.c +index 382aaa3ad7..d67694c2ce 100644 +--- a/s2check/s2tcase.c ++++ b/s2check/s2tcase.c +@@ -57,7 +57,7 @@ void s2_tcase_add_test(TCase *tc, TFun tf, char const *name, + if (strcmp(*patterns, "*")) { + printf("%s: selected\n", name); + } +- _tcase_add_test(tc, tf, name, signo, 0, start, end); ++ _tcase_add_test(tc, tf, name, signo, start, end); + return; + } + } +@@ -67,7 +67,7 @@ void s2_tcase_add_test(TCase *tc, TFun tf, char const *name, + if (strcmp(*patterns, "*")) { + printf("%s: selected\n", name); + } +- _tcase_add_test(tc, tf, name, signo, 0, start, end); ++ _tcase_add_test(tc, tf, name, signo, start, end); + return; + } + } +-- +2.27.0 + diff --git a/package/sofia-sip/Config.in b/package/sofia-sip/Config.in new file mode 100644 index 00000000..2ad19408 --- /dev/null +++ b/package/sofia-sip/Config.in @@ -0,0 +1,14 @@ +config BR2_PACKAGE_SOFIA_SIP + bool "sofia-sip" + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Sofia-SIP is an open-source SIP User-Agent library, + compliant with the IETF RFC3261 specification (see the + feature table). It can be used as a building block for SIP + client software for uses such as VoIP, IM, and many other + real-time and person-to-person communication services. + + https://github.com/freeswitch/sofia-sip + +comment "sofia-sip needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/sofia-sip/sofia-sip.hash b/package/sofia-sip/sofia-sip.hash new file mode 100644 index 00000000..99b315e2 --- /dev/null +++ b/package/sofia-sip/sofia-sip.hash @@ -0,0 +1,4 @@ +# Locally computed +sha256 4cf0de1aaa1e1737db5a8fe4104021a8e60a148a4534f92b5affdd9782e404aa sofia-sip-1.13.1-d10a3d268c.tar.gz +sha256 e1c0890440efe31b6cd2ee2abf895eb917c787799f079133f5809414d90d5d60 COPYING +sha256 b402ae58cf355b33be8fa023f704a039e3d41ecaccd2bbcda43ca31d703e4556 COPYRIGHTS diff --git a/package/sofia-sip/sofia-sip.mk b/package/sofia-sip/sofia-sip.mk new file mode 100644 index 00000000..ef1b35fa --- /dev/null +++ b/package/sofia-sip/sofia-sip.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# sofia-sip +# +################################################################################ + +SOFIA_SIP_VERSION = 1.13.1-d10a3d268c +SOFIA_SIP_SITE = https://files.freeswitch.org/downloads/libs +SOFIA_SIP_INSTALL_STAGING = YES +SOFIA_SIP_DEPENDENCIES = host-pkgconf +SOFIA_SIP_LICENSE = LGPL-2.1+ +SOFIA_SIP_LICENSE_FILES = COPYING COPYRIGHTS +SOFIA_SIP_CONF_OPTS = --with-doxygen=no + +ifeq ($(BR2_PACKAGE_LIBGLIB2),y) +SOFIA_SIP_CONF_OPTS += --with-glib +SOFIA_SIP_DEPENDENCIES += libglib2 +else +SOFIA_SIP_CONF_OPTS += --without-glib +endif + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +SOFIA_SIP_CONF_OPTS += \ + --enable-nth \ + --with-openssl=pkg-config +SOFIA_SIP_DEPENDENCIES += openssl +else +SOFIA_SIP_CONF_OPTS += \ + --disable-nth \ + --without-openssl +endif + +ifeq ($(BR2_ENABLE_DEBUG),y) +SOFIA_SIP_CONF_OPTS += --enable-ndebug +endif + +$(eval $(autotools-package)) diff --git a/package/softether/0001-Create-autotools-plumbing-for-SoftEther.patch b/package/softether/0001-Create-autotools-plumbing-for-SoftEther.patch new file mode 100644 index 00000000..92c2885a --- /dev/null +++ b/package/softether/0001-Create-autotools-plumbing-for-SoftEther.patch @@ -0,0 +1,2107 @@ +From c5e5d7e93c6f3302adf5821c29c4efdb7630e418 Mon Sep 17 00:00:00 2001 +From: Darik Horn +Date: Sat, 12 Apr 2014 17:46:04 -0400 +Subject: [PATCH] Create autotools plumbing for SoftEther. + +Add autoconf and automake capabilities to SoftEther so that it can be built +like this: + + # autoreconf --force --install + # ./configure + # make install DESTDIR=/tmp/softether + +All standard configure parameters are supported, plus: + + # ./configure --enable-debug + +Autotools support makes porting, cross compiling, and optimization much easier. + +These GNU autoconf-archive components are used for dependency checking: + + * ax_check_openssl.m4 + * ax_check_zlib.m4 + * ax_lib_readline.m4 + * ax_pthread.m4 + * ax_with_curses.m4 + +NB: http://www.gnu.org/software/autoconf-archive/ + +[Upstream commit: https://github.com/dajhorn/SoftEtherVPN/commit/c5e5d7e93c6f3302adf5821c29c4efdb7630e418] +Signed-off-by: Thomas Petazzoni +[Fabrice: update for 4.30-9700-beta] +Signed-off-by: Fabrice Fontaine +--- + Makefile.am | 21 ++ + autotools/ax_check_openssl.m4 | 124 ++++++++++ + autotools/ax_check_zlib.m4 | 142 +++++++++++ + autotools/ax_lib_readline.m4 | 107 +++++++++ + autotools/ax_pthread.m4 | 332 ++++++++++++++++++++++++++ + autotools/ax_with_curses.m4 | 518 +++++++++++++++++++++++++++++++++++++++++ + autotools/softether.am | 39 ++++ + configure.ac | 96 ++++++++ + configure => manual_configure | 0 + src/Cedar/Makefile.am | 82 +++++++ + src/Makefile.am | 26 +++ + src/Mayaqua/Makefile.am | 43 ++++ + src/bin/hamcore/Makefile.am | 29 +++ + src/hamcorebuilder/Makefile.am | 29 +++ + src/vpnbridge/Makefile.am | 29 +++ + src/vpnclient/Makefile.am | 29 +++ + src/vpncmd/Makefile.am | 29 +++ + src/vpnserver/Makefile.am | 29 +++ + 18 files changed, 1704 insertions(+) + create mode 100644 Makefile.am + create mode 100644 autotools/ax_check_openssl.m4 + create mode 100644 autotools/ax_check_zlib.m4 + create mode 100644 autotools/ax_lib_readline.m4 + create mode 100644 autotools/ax_pthread.m4 + create mode 100644 autotools/ax_with_curses.m4 + create mode 100644 autotools/softether.am + create mode 100644 configure.ac + rename configure => manual_configure (100%) + create mode 100644 src/Cedar/Makefile.am + create mode 100644 src/Makefile.am + create mode 100644 src/Mayaqua/Makefile.am + create mode 100644 src/bin/hamcore/Makefile.am + create mode 100644 src/hamcorebuilder/Makefile.am + create mode 100644 src/vpnbridge/Makefile.am + create mode 100644 src/vpnclient/Makefile.am + create mode 100644 src/vpncmd/Makefile.am + create mode 100644 src/vpnserver/Makefile.am + +diff --git a/Makefile.am b/Makefile.am +new file mode 100644 +index 00000000..aa73b2ba +--- /dev/null ++++ b/Makefile.am +@@ -0,0 +1,21 @@ ++# Copyright 2014 Darik Horn ++# ++# This file is part of SoftEther. ++# ++# SoftEther 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. ++# ++# SoftEther 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 ++# SoftEther. If not, see . ++ ++ ++ACLOCAL_AMFLAGS = -I autotools ++include $(top_srcdir)/autotools/softether.am ++SUBDIRS = src +diff --git a/autotools/ax_check_openssl.m4 b/autotools/ax_check_openssl.m4 +new file mode 100644 +index 00000000..a87c5a6b +--- /dev/null ++++ b/autotools/ax_check_openssl.m4 +@@ -0,0 +1,124 @@ ++# =========================================================================== ++# http://www.gnu.org/software/autoconf-archive/ax_check_openssl.html ++# =========================================================================== ++# ++# SYNOPSIS ++# ++# AX_CHECK_OPENSSL([action-if-found[, action-if-not-found]]) ++# ++# DESCRIPTION ++# ++# Look for OpenSSL in a number of default spots, or in a user-selected ++# spot (via --with-openssl). Sets ++# ++# OPENSSL_INCLUDES to the include directives required ++# OPENSSL_LIBS to the -l directives required ++# OPENSSL_LDFLAGS to the -L or -R flags required ++# ++# and calls ACTION-IF-FOUND or ACTION-IF-NOT-FOUND appropriately ++# ++# This macro sets OPENSSL_INCLUDES such that source files should use the ++# openssl/ directory in include directives: ++# ++# #include ++# ++# LICENSE ++# ++# Copyright (c) 2009,2010 Zmanda Inc. ++# Copyright (c) 2009,2010 Dustin J. Mitchell ++# ++# Copying and distribution of this file, with or without modification, are ++# permitted in any medium without royalty provided the copyright notice ++# and this notice are preserved. This file is offered as-is, without any ++# warranty. ++ ++#serial 8 ++ ++AU_ALIAS([CHECK_SSL], [AX_CHECK_OPENSSL]) ++AC_DEFUN([AX_CHECK_OPENSSL], [ ++ found=false ++ AC_ARG_WITH([openssl], ++ [AS_HELP_STRING([--with-openssl=DIR], ++ [root of the OpenSSL directory])], ++ [ ++ case "$withval" in ++ "" | y | ye | yes | n | no) ++ AC_MSG_ERROR([Invalid --with-openssl value]) ++ ;; ++ *) ssldirs="$withval" ++ ;; ++ esac ++ ], [ ++ # if pkg-config is installed and openssl has installed a .pc file, ++ # then use that information and don't search ssldirs ++ AC_PATH_PROG([PKG_CONFIG], [pkg-config]) ++ if test x"$PKG_CONFIG" != x""; then ++ OPENSSL_LDFLAGS=`$PKG_CONFIG openssl --libs-only-L 2>/dev/null` ++ if test $? = 0; then ++ OPENSSL_LIBS=`$PKG_CONFIG openssl --libs-only-l 2>/dev/null` ++ OPENSSL_INCLUDES=`$PKG_CONFIG openssl --cflags-only-I 2>/dev/null` ++ found=true ++ fi ++ fi ++ ++ # no such luck; use some default ssldirs ++ if ! $found; then ++ ssldirs="/usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /usr" ++ fi ++ ] ++ ) ++ ++ ++ # note that we #include , so the OpenSSL headers have to be in ++ # an 'openssl' subdirectory ++ ++ if ! $found; then ++ OPENSSL_INCLUDES= ++ for ssldir in $ssldirs; do ++ AC_MSG_CHECKING([for openssl/ssl.h in $ssldir]) ++ if test -f "$ssldir/include/openssl/ssl.h"; then ++ OPENSSL_INCLUDES="-I$ssldir/include" ++ OPENSSL_LDFLAGS="-L$ssldir/lib" ++ OPENSSL_LIBS="-lssl -lcrypto" ++ found=true ++ AC_MSG_RESULT([yes]) ++ break ++ else ++ AC_MSG_RESULT([no]) ++ fi ++ done ++ ++ # if the file wasn't found, well, go ahead and try the link anyway -- maybe ++ # it will just work! ++ fi ++ ++ # try the preprocessor and linker with our new flags, ++ # being careful not to pollute the global LIBS, LDFLAGS, and CPPFLAGS ++ ++ AC_MSG_CHECKING([whether compiling and linking against OpenSSL works]) ++ echo "Trying link with OPENSSL_LDFLAGS=$OPENSSL_LDFLAGS;" \ ++ "OPENSSL_LIBS=$OPENSSL_LIBS; OPENSSL_INCLUDES=$OPENSSL_INCLUDES" >&AS_MESSAGE_LOG_FD ++ ++ save_LIBS="$LIBS" ++ save_LDFLAGS="$LDFLAGS" ++ save_CPPFLAGS="$CPPFLAGS" ++ LDFLAGS="$LDFLAGS $OPENSSL_LDFLAGS" ++ LIBS="$OPENSSL_LIBS $LIBS" ++ CPPFLAGS="$OPENSSL_INCLUDES $CPPFLAGS" ++ AC_LINK_IFELSE( ++ [AC_LANG_PROGRAM([#include ], [SSL_new(NULL)])], ++ [ ++ AC_MSG_RESULT([yes]) ++ $1 ++ ], [ ++ AC_MSG_RESULT([no]) ++ $2 ++ ]) ++ CPPFLAGS="$save_CPPFLAGS" ++ LDFLAGS="$save_LDFLAGS" ++ LIBS="$save_LIBS" ++ ++ AC_SUBST([OPENSSL_INCLUDES]) ++ AC_SUBST([OPENSSL_LIBS]) ++ AC_SUBST([OPENSSL_LDFLAGS]) ++]) +diff --git a/autotools/ax_check_zlib.m4 b/autotools/ax_check_zlib.m4 +new file mode 100644 +index 00000000..ae5705f6 +--- /dev/null ++++ b/autotools/ax_check_zlib.m4 +@@ -0,0 +1,142 @@ ++# =========================================================================== ++# http://www.gnu.org/software/autoconf-archive/ax_check_zlib.html ++# =========================================================================== ++# ++# SYNOPSIS ++# ++# AX_CHECK_ZLIB([action-if-found], [action-if-not-found]) ++# ++# DESCRIPTION ++# ++# This macro searches for an installed zlib library. If nothing was ++# specified when calling configure, it searches first in /usr/local and ++# then in /usr, /opt/local and /sw. If the --with-zlib=DIR is specified, ++# it will try to find it in DIR/include/zlib.h and DIR/lib/libz.a. If ++# --without-zlib is specified, the library is not searched at all. ++# ++# If either the header file (zlib.h) or the library (libz) is not found, ++# shell commands 'action-if-not-found' is run. If 'action-if-not-found' is ++# not specified, the configuration exits on error, asking for a valid zlib ++# installation directory or --without-zlib. ++# ++# If both header file and library are found, shell commands ++# 'action-if-found' is run. If 'action-if-found' is not specified, the ++# default action appends '-I${ZLIB_HOME}/include' to CPFLAGS, appends ++# '-L$ZLIB_HOME}/lib' to LDFLAGS, prepends '-lz' to LIBS, and calls ++# AC_DEFINE(HAVE_LIBZ). You should use autoheader to include a definition ++# for this symbol in a config.h file. Sample usage in a C/C++ source is as ++# follows: ++# ++# #ifdef HAVE_LIBZ ++# #include ++# #endif /* HAVE_LIBZ */ ++# ++# LICENSE ++# ++# Copyright (c) 2008 Loic Dachary ++# Copyright (c) 2010 Bastien Chevreux ++# ++# 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, see . ++# ++# As a special exception, the respective Autoconf Macro's copyright owner ++# gives unlimited permission to copy, distribute and modify the configure ++# scripts that are the output of Autoconf when processing the Macro. You ++# need not follow the terms of the GNU General Public License when using ++# or distributing such scripts, even though portions of the text of the ++# Macro appear in them. The GNU General Public License (GPL) does govern ++# all other use of the material that constitutes the Autoconf Macro. ++# ++# This special exception to the GPL applies to versions of the Autoconf ++# Macro released by the Autoconf Archive. When you make and distribute a ++# modified version of the Autoconf Macro, you may extend this special ++# exception to the GPL to apply to your modified version as well. ++ ++#serial 14 ++ ++AU_ALIAS([CHECK_ZLIB], [AX_CHECK_ZLIB]) ++AC_DEFUN([AX_CHECK_ZLIB], ++# ++# Handle user hints ++# ++[AC_MSG_CHECKING(if zlib is wanted) ++zlib_places="/usr/local /usr /opt/local /sw" ++AC_ARG_WITH([zlib], ++[ --with-zlib=DIR root directory path of zlib installation @<:@defaults to ++ /usr/local or /usr if not found in /usr/local@:>@ ++ --without-zlib to disable zlib usage completely], ++[if test "$withval" != no ; then ++ AC_MSG_RESULT(yes) ++ if test -d "$withval" ++ then ++ zlib_places="$withval $zlib_places" ++ else ++ AC_MSG_WARN([Sorry, $withval does not exist, checking usual places]) ++ fi ++else ++ zlib_places= ++ AC_MSG_RESULT(no) ++fi], ++[AC_MSG_RESULT(yes)]) ++ ++# ++# Locate zlib, if wanted ++# ++if test -n "${zlib_places}" ++then ++ # check the user supplied or any other more or less 'standard' place: ++ # Most UNIX systems : /usr/local and /usr ++ # MacPorts / Fink on OSX : /opt/local respectively /sw ++ for ZLIB_HOME in ${zlib_places} ; do ++ if test -f "${ZLIB_HOME}/include/zlib.h"; then break; fi ++ ZLIB_HOME="" ++ done ++ ++ ZLIB_OLD_LDFLAGS=$LDFLAGS ++ ZLIB_OLD_CPPFLAGS=$CPPFLAGS ++ if test -n "${ZLIB_HOME}"; then ++ LDFLAGS="$LDFLAGS -L${ZLIB_HOME}/lib" ++ CPPFLAGS="$CPPFLAGS -I${ZLIB_HOME}/include" ++ fi ++ AC_LANG_SAVE ++ AC_LANG_C ++ AC_CHECK_LIB([z], [inflateEnd], [zlib_cv_libz=yes], [zlib_cv_libz=no]) ++ AC_CHECK_HEADER([zlib.h], [zlib_cv_zlib_h=yes], [zlib_cv_zlib_h=no]) ++ AC_LANG_RESTORE ++ if test "$zlib_cv_libz" = "yes" && test "$zlib_cv_zlib_h" = "yes" ++ then ++ # ++ # If both library and header were found, action-if-found ++ # ++ m4_ifblank([$1],[ ++ CPPFLAGS="$CPPFLAGS -I${ZLIB_HOME}/include" ++ LDFLAGS="$LDFLAGS -L${ZLIB_HOME}/lib" ++ LIBS="-lz $LIBS" ++ AC_DEFINE([HAVE_LIBZ], [1], ++ [Define to 1 if you have `z' library (-lz)]) ++ ],[ ++ # Restore variables ++ LDFLAGS="$ZLIB_OLD_LDFLAGS" ++ CPPFLAGS="$ZLIB_OLD_CPPFLAGS" ++ $1 ++ ]) ++ else ++ # ++ # If either header or library was not found, action-if-not-found ++ # ++ m4_default([$2],[ ++ AC_MSG_ERROR([either specify a valid zlib installation with --with-zlib=DIR or disable zlib usage with --without-zlib]) ++ ]) ++ fi ++fi ++]) +diff --git a/autotools/ax_lib_readline.m4 b/autotools/ax_lib_readline.m4 +new file mode 100644 +index 00000000..056f25c2 +--- /dev/null ++++ b/autotools/ax_lib_readline.m4 +@@ -0,0 +1,107 @@ ++# =========================================================================== ++# http://www.gnu.org/software/autoconf-archive/ax_lib_readline.html ++# =========================================================================== ++# ++# SYNOPSIS ++# ++# AX_LIB_READLINE ++# ++# DESCRIPTION ++# ++# Searches for a readline compatible library. If found, defines ++# `HAVE_LIBREADLINE'. If the found library has the `add_history' function, ++# sets also `HAVE_READLINE_HISTORY'. Also checks for the locations of the ++# necessary include files and sets `HAVE_READLINE_H' or ++# `HAVE_READLINE_READLINE_H' and `HAVE_READLINE_HISTORY_H' or ++# 'HAVE_HISTORY_H' if the corresponding include files exists. ++# ++# The libraries that may be readline compatible are `libedit', ++# `libeditline' and `libreadline'. Sometimes we need to link a termcap ++# library for readline to work, this macro tests these cases too by trying ++# to link with `libtermcap', `libcurses' or `libncurses' before giving up. ++# ++# Here is an example of how to use the information provided by this macro ++# to perform the necessary includes or declarations in a C file: ++# ++# #ifdef HAVE_LIBREADLINE ++# # if defined(HAVE_READLINE_READLINE_H) ++# # include ++# # elif defined(HAVE_READLINE_H) ++# # include ++# # else /* !defined(HAVE_READLINE_H) */ ++# extern char *readline (); ++# # endif /* !defined(HAVE_READLINE_H) */ ++# char *cmdline = NULL; ++# #else /* !defined(HAVE_READLINE_READLINE_H) */ ++# /* no readline */ ++# #endif /* HAVE_LIBREADLINE */ ++# ++# #ifdef HAVE_READLINE_HISTORY ++# # if defined(HAVE_READLINE_HISTORY_H) ++# # include ++# # elif defined(HAVE_HISTORY_H) ++# # include ++# # else /* !defined(HAVE_HISTORY_H) */ ++# extern void add_history (); ++# extern int write_history (); ++# extern int read_history (); ++# # endif /* defined(HAVE_READLINE_HISTORY_H) */ ++# /* no history */ ++# #endif /* HAVE_READLINE_HISTORY */ ++# ++# LICENSE ++# ++# Copyright (c) 2008 Ville Laurikari ++# ++# Copying and distribution of this file, with or without modification, are ++# permitted in any medium without royalty provided the copyright notice ++# and this notice are preserved. This file is offered as-is, without any ++# warranty. ++ ++#serial 6 ++ ++AU_ALIAS([VL_LIB_READLINE], [AX_LIB_READLINE]) ++AC_DEFUN([AX_LIB_READLINE], [ ++ AC_CACHE_CHECK([for a readline compatible library], ++ ax_cv_lib_readline, [ ++ ORIG_LIBS="$LIBS" ++ for readline_lib in readline edit editline; do ++ for termcap_lib in "" termcap curses ncurses; do ++ if test -z "$termcap_lib"; then ++ TRY_LIB="-l$readline_lib" ++ else ++ TRY_LIB="-l$readline_lib -l$termcap_lib" ++ fi ++ LIBS="$ORIG_LIBS $TRY_LIB" ++ AC_TRY_LINK_FUNC(readline, ax_cv_lib_readline="$TRY_LIB") ++ if test -n "$ax_cv_lib_readline"; then ++ break ++ fi ++ done ++ if test -n "$ax_cv_lib_readline"; then ++ break ++ fi ++ done ++ if test -z "$ax_cv_lib_readline"; then ++ ax_cv_lib_readline="no" ++ fi ++ LIBS="$ORIG_LIBS" ++ ]) ++ ++ if test "$ax_cv_lib_readline" != "no"; then ++ LIBS="$LIBS $ax_cv_lib_readline" ++ AC_DEFINE(HAVE_LIBREADLINE, 1, ++ [Define if you have a readline compatible library]) ++ AC_CHECK_HEADERS(readline.h readline/readline.h) ++ AC_CACHE_CHECK([whether readline supports history], ++ ax_cv_lib_readline_history, [ ++ ax_cv_lib_readline_history="no" ++ AC_TRY_LINK_FUNC(add_history, ax_cv_lib_readline_history="yes") ++ ]) ++ if test "$ax_cv_lib_readline_history" = "yes"; then ++ AC_DEFINE(HAVE_READLINE_HISTORY, 1, ++ [Define if your readline library has \`add_history']) ++ AC_CHECK_HEADERS(history.h readline/history.h) ++ fi ++ fi ++])dnl +diff --git a/autotools/ax_pthread.m4 b/autotools/ax_pthread.m4 +new file mode 100644 +index 00000000..d383ad5c +--- /dev/null ++++ b/autotools/ax_pthread.m4 +@@ -0,0 +1,332 @@ ++# =========================================================================== ++# http://www.gnu.org/software/autoconf-archive/ax_pthread.html ++# =========================================================================== ++# ++# SYNOPSIS ++# ++# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) ++# ++# DESCRIPTION ++# ++# This macro figures out how to build C programs using POSIX threads. It ++# sets the PTHREAD_LIBS output variable to the threads library and linker ++# flags, and the PTHREAD_CFLAGS output variable to any special C compiler ++# flags that are needed. (The user can also force certain compiler ++# flags/libs to be tested by setting these environment variables.) ++# ++# Also sets PTHREAD_CC to any special C compiler that is needed for ++# multi-threaded programs (defaults to the value of CC otherwise). (This ++# is necessary on AIX to use the special cc_r compiler alias.) ++# ++# NOTE: You are assumed to not only compile your program with these flags, ++# but also link it with them as well. e.g. you should link with ++# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS ++# ++# If you are only building threads programs, you may wish to use these ++# variables in your default LIBS, CFLAGS, and CC: ++# ++# LIBS="$PTHREAD_LIBS $LIBS" ++# CFLAGS="$CFLAGS $PTHREAD_CFLAGS" ++# CC="$PTHREAD_CC" ++# ++# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant ++# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name ++# (e.g. PTHREAD_CREATE_UNDETACHED on AIX). ++# ++# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the ++# PTHREAD_PRIO_INHERIT symbol is defined when compiling with ++# PTHREAD_CFLAGS. ++# ++# ACTION-IF-FOUND is a list of shell commands to run if a threads library ++# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it ++# is not found. If ACTION-IF-FOUND is not specified, the default action ++# will define HAVE_PTHREAD. ++# ++# Please let the authors know if this macro fails on any platform, or if ++# you have any other suggestions or comments. This macro was based on work ++# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help ++# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by ++# Alejandro Forero Cuervo to the autoconf macro repository. We are also ++# grateful for the helpful feedback of numerous users. ++# ++# Updated for Autoconf 2.68 by Daniel Richard G. ++# ++# LICENSE ++# ++# Copyright (c) 2008 Steven G. Johnson ++# Copyright (c) 2011 Daniel Richard G. ++# ++# 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 3 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, see . ++# ++# As a special exception, the respective Autoconf Macro's copyright owner ++# gives unlimited permission to copy, distribute and modify the configure ++# scripts that are the output of Autoconf when processing the Macro. You ++# need not follow the terms of the GNU General Public License when using ++# or distributing such scripts, even though portions of the text of the ++# Macro appear in them. The GNU General Public License (GPL) does govern ++# all other use of the material that constitutes the Autoconf Macro. ++# ++# This special exception to the GPL applies to versions of the Autoconf ++# Macro released by the Autoconf Archive. When you make and distribute a ++# modified version of the Autoconf Macro, you may extend this special ++# exception to the GPL to apply to your modified version as well. ++ ++#serial 21 ++ ++AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) ++AC_DEFUN([AX_PTHREAD], [ ++AC_REQUIRE([AC_CANONICAL_HOST]) ++AC_LANG_PUSH([C]) ++ax_pthread_ok=no ++ ++# We used to check for pthread.h first, but this fails if pthread.h ++# requires special compiler flags (e.g. on True64 or Sequent). ++# It gets checked for in the link test anyway. ++ ++# First of all, check if the user has set any of the PTHREAD_LIBS, ++# etcetera environment variables, and if threads linking works using ++# them: ++if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then ++ save_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS $PTHREAD_CFLAGS" ++ save_LIBS="$LIBS" ++ LIBS="$PTHREAD_LIBS $LIBS" ++ AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) ++ AC_TRY_LINK_FUNC([pthread_join], [ax_pthread_ok=yes]) ++ AC_MSG_RESULT([$ax_pthread_ok]) ++ if test x"$ax_pthread_ok" = xno; then ++ PTHREAD_LIBS="" ++ PTHREAD_CFLAGS="" ++ fi ++ LIBS="$save_LIBS" ++ CFLAGS="$save_CFLAGS" ++fi ++ ++# We must check for the threads library under a number of different ++# names; the ordering is very important because some systems ++# (e.g. DEC) have both -lpthread and -lpthreads, where one of the ++# libraries is broken (non-POSIX). ++ ++# Create a list of thread flags to try. Items starting with a "-" are ++# C compiler flags, and other items are library names, except for "none" ++# which indicates that we try without any flags at all, and "pthread-config" ++# which is a program returning the flags for the Pth emulation library. ++ ++ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" ++ ++# The ordering *is* (sometimes) important. Some notes on the ++# individual items follow: ++ ++# pthreads: AIX (must check this before -lpthread) ++# none: in case threads are in libc; should be tried before -Kthread and ++# other compiler flags to prevent continual compiler warnings ++# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) ++# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) ++# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) ++# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) ++# -pthreads: Solaris/gcc ++# -mthreads: Mingw32/gcc, Lynx/gcc ++# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it ++# doesn't hurt to check since this sometimes defines pthreads too; ++# also defines -D_REENTRANT) ++# ... -mt is also the pthreads flag for HP/aCC ++# pthread: Linux, etcetera ++# --thread-safe: KAI C++ ++# pthread-config: use pthread-config program (for GNU Pth library) ++ ++case ${host_os} in ++ solaris*) ++ ++ # On Solaris (at least, for some versions), libc contains stubbed ++ # (non-functional) versions of the pthreads routines, so link-based ++ # tests will erroneously succeed. (We need to link with -pthreads/-mt/ ++ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather ++ # a function called by this macro, so we could check for that, but ++ # who knows whether they'll stub that too in a future libc.) So, ++ # we'll just look for -pthreads and -lpthread first: ++ ++ ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" ++ ;; ++ ++ darwin*) ++ ax_pthread_flags="-pthread $ax_pthread_flags" ++ ;; ++esac ++ ++# Clang doesn't consider unrecognized options an error unless we specify ++# -Werror. We throw in some extra Clang-specific options to ensure that ++# this doesn't happen for GCC, which also accepts -Werror. ++ ++AC_MSG_CHECKING([if compiler needs -Werror to reject unknown flags]) ++save_CFLAGS="$CFLAGS" ++ax_pthread_extra_flags="-Werror" ++CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument" ++AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo(void);],[foo()])], ++ [AC_MSG_RESULT([yes])], ++ [ax_pthread_extra_flags= ++ AC_MSG_RESULT([no])]) ++CFLAGS="$save_CFLAGS" ++ ++if test x"$ax_pthread_ok" = xno; then ++for flag in $ax_pthread_flags; do ++ ++ case $flag in ++ none) ++ AC_MSG_CHECKING([whether pthreads work without any flags]) ++ ;; ++ ++ -*) ++ AC_MSG_CHECKING([whether pthreads work with $flag]) ++ PTHREAD_CFLAGS="$flag" ++ ;; ++ ++ pthread-config) ++ AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) ++ if test x"$ax_pthread_config" = xno; then continue; fi ++ PTHREAD_CFLAGS="`pthread-config --cflags`" ++ PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ++ ;; ++ ++ *) ++ AC_MSG_CHECKING([for the pthreads library -l$flag]) ++ PTHREAD_LIBS="-l$flag" ++ ;; ++ esac ++ ++ save_LIBS="$LIBS" ++ save_CFLAGS="$CFLAGS" ++ LIBS="$PTHREAD_LIBS $LIBS" ++ CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags" ++ ++ # Check for various functions. We must include pthread.h, ++ # since some functions may be macros. (On the Sequent, we ++ # need a special flag -Kthread to make this header compile.) ++ # We check for pthread_join because it is in -lpthread on IRIX ++ # while pthread_create is in libc. We check for pthread_attr_init ++ # due to DEC craziness with -lpthreads. We check for ++ # pthread_cleanup_push because it is one of the few pthread ++ # functions on Solaris that doesn't have a non-functional libc stub. ++ # We try pthread_create on general principles. ++ AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ++ static void routine(void *a) { a = 0; } ++ static void *start_routine(void *a) { return a; }], ++ [pthread_t th; pthread_attr_t attr; ++ pthread_create(&th, 0, start_routine, 0); ++ pthread_join(th, 0); ++ pthread_attr_init(&attr); ++ pthread_cleanup_push(routine, 0); ++ pthread_cleanup_pop(0) /* ; */])], ++ [ax_pthread_ok=yes], ++ []) ++ ++ LIBS="$save_LIBS" ++ CFLAGS="$save_CFLAGS" ++ ++ AC_MSG_RESULT([$ax_pthread_ok]) ++ if test "x$ax_pthread_ok" = xyes; then ++ break; ++ fi ++ ++ PTHREAD_LIBS="" ++ PTHREAD_CFLAGS="" ++done ++fi ++ ++# Various other checks: ++if test "x$ax_pthread_ok" = xyes; then ++ save_LIBS="$LIBS" ++ LIBS="$PTHREAD_LIBS $LIBS" ++ save_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS $PTHREAD_CFLAGS" ++ ++ # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. ++ AC_MSG_CHECKING([for joinable pthread attribute]) ++ attr_name=unknown ++ for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do ++ AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], ++ [int attr = $attr; return attr /* ; */])], ++ [attr_name=$attr; break], ++ []) ++ done ++ AC_MSG_RESULT([$attr_name]) ++ if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then ++ AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$attr_name], ++ [Define to necessary symbol if this constant ++ uses a non-standard name on your system.]) ++ fi ++ ++ AC_MSG_CHECKING([if more special flags are required for pthreads]) ++ flag=no ++ case ${host_os} in ++ aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";; ++ osf* | hpux*) flag="-D_REENTRANT";; ++ solaris*) ++ if test "$GCC" = "yes"; then ++ flag="-D_REENTRANT" ++ else ++ # TODO: What about Clang on Solaris? ++ flag="-mt -D_REENTRANT" ++ fi ++ ;; ++ esac ++ AC_MSG_RESULT([$flag]) ++ if test "x$flag" != xno; then ++ PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" ++ fi ++ ++ AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], ++ [ax_cv_PTHREAD_PRIO_INHERIT], [ ++ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], ++ [[int i = PTHREAD_PRIO_INHERIT;]])], ++ [ax_cv_PTHREAD_PRIO_INHERIT=yes], ++ [ax_cv_PTHREAD_PRIO_INHERIT=no]) ++ ]) ++ AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"], ++ [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])]) ++ ++ LIBS="$save_LIBS" ++ CFLAGS="$save_CFLAGS" ++ ++ # More AIX lossage: compile with *_r variant ++ if test "x$GCC" != xyes; then ++ case $host_os in ++ aix*) ++ AS_CASE(["x/$CC"], ++ [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], ++ [#handle absolute path differently from PATH based program lookup ++ AS_CASE(["x$CC"], ++ [x/*], ++ [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])], ++ [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])]) ++ ;; ++ esac ++ fi ++fi ++ ++test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" ++ ++AC_SUBST([PTHREAD_LIBS]) ++AC_SUBST([PTHREAD_CFLAGS]) ++AC_SUBST([PTHREAD_CC]) ++ ++# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: ++if test x"$ax_pthread_ok" = xyes; then ++ ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1]) ++ : ++else ++ ax_pthread_ok=no ++ $2 ++fi ++AC_LANG_POP ++])dnl AX_PTHREAD +diff --git a/autotools/ax_with_curses.m4 b/autotools/ax_with_curses.m4 +new file mode 100644 +index 00000000..e4cbd31b +--- /dev/null ++++ b/autotools/ax_with_curses.m4 +@@ -0,0 +1,518 @@ ++# =========================================================================== ++# http://www.gnu.org/software/autoconf-archive/ax_with_curses.html ++# =========================================================================== ++# ++# SYNOPSIS ++# ++# AX_WITH_CURSES ++# ++# DESCRIPTION ++# ++# This macro checks whether a SysV or X/Open-compatible Curses library is ++# present, along with the associated header file. The NcursesW ++# (wide-character) library is searched for first, followed by Ncurses, ++# then the system-default plain Curses. The first library found is the ++# one returned. ++# ++# The following options are understood: --with-ncursesw, --with-ncurses, ++# --without-ncursesw, --without-ncurses. The "--with" options force the ++# macro to use that particular library, terminating with an error if not ++# found. The "--without" options simply skip the check for that library. ++# The effect on the search pattern is: ++# ++# (no options) - NcursesW, Ncurses, Curses ++# --with-ncurses --with-ncursesw - NcursesW only [*] ++# --without-ncurses --with-ncursesw - NcursesW only [*] ++# --with-ncursesw - NcursesW only [*] ++# --with-ncurses --without-ncursesw - Ncurses only [*] ++# --with-ncurses - NcursesW, Ncurses [**] ++# --without-ncurses --without-ncursesw - Curses only ++# --without-ncursesw - Ncurses, Curses ++# --without-ncurses - NcursesW, Curses ++# ++# [*] If the library is not found, abort the configure script. ++# ++# [**] If the second library (Ncurses) is not found, abort configure. ++# ++# The following preprocessor symbols may be defined by this macro if the ++# appropriate conditions are met: ++# ++# HAVE_CURSES - if any SysV or X/Open Curses library found ++# HAVE_CURSES_ENHANCED - if library supports X/Open Enhanced functions ++# HAVE_CURSES_COLOR - if library supports color (enhanced functions) ++# HAVE_CURSES_OBSOLETE - if library supports certain obsolete features ++# HAVE_NCURSESW - if NcursesW (wide char) library is to be used ++# HAVE_NCURSES - if the Ncurses library is to be used ++# ++# HAVE_CURSES_H - if is present and should be used ++# HAVE_NCURSESW_H - if should be used ++# HAVE_NCURSES_H - if should be used ++# HAVE_NCURSESW_CURSES_H - if should be used ++# HAVE_NCURSES_CURSES_H - if should be used ++# ++# (These preprocessor symbols are discussed later in this document.) ++# ++# The following output variable is defined by this macro; it is precious ++# and may be overridden on the ./configure command line: ++# ++# CURSES_LIB - library to add to xxx_LDADD ++# ++# The library listed in CURSES_LIB is NOT added to LIBS by default. You ++# need to add CURSES_LIB to the appropriate xxx_LDADD line in your ++# Makefile.am. For example: ++# ++# prog_LDADD = @CURSES_LIB@ ++# ++# If CURSES_LIB is set on the configure command line (such as by running ++# "./configure CURSES_LIB=-lmycurses"), then the only header searched for ++# is . The user may use the CPPFLAGS precious variable to ++# override the standard #include search path. If the user needs to ++# specify an alternative path for a library (such as for a non-standard ++# NcurseW), the user should use the LDFLAGS variable. ++# ++# The following shell variables may be defined by this macro: ++# ++# ax_cv_curses - set to "yes" if any Curses library found ++# ax_cv_curses_enhanced - set to "yes" if Enhanced functions present ++# ax_cv_curses_color - set to "yes" if color functions present ++# ax_cv_curses_obsolete - set to "yes" if obsolete features present ++# ++# ax_cv_ncursesw - set to "yes" if NcursesW library found ++# ax_cv_ncurses - set to "yes" if Ncurses library found ++# ax_cv_plaincurses - set to "yes" if plain Curses library found ++# ax_cv_curses_which - set to "ncursesw", "ncurses", "plaincurses" or "no" ++# ++# These variables can be used in your configure.ac to determine the level ++# of support you need from the Curses library. For example, if you must ++# have either Ncurses or NcursesW, you could include: ++# ++# AX_WITH_CURSES ++# if test "x$ax_cv_ncursesw" != xyes && test "x$ax_cv_ncurses" != xyes; then ++# AC_MSG_ERROR([requires either NcursesW or Ncurses library]) ++# fi ++# ++# If any Curses library will do (but one must be present and must support ++# color), you could use: ++# ++# AX_WITH_CURSES ++# if test "x$ax_cv_curses" != xyes || test "x$ax_cv_curses_color" != xyes; then ++# AC_MSG_ERROR([requires an X/Open-compatible Curses library with color]) ++# fi ++# ++# Certain preprocessor symbols and shell variables defined by this macro ++# can be used to determine various features of the Curses library. In ++# particular, HAVE_CURSES and ax_cv_curses are defined if the Curses ++# library found conforms to the traditional SysV and/or X/Open Base Curses ++# definition. Any working Curses library conforms to this level. ++# ++# HAVE_CURSES_ENHANCED and ax_cv_curses_enhanced are defined if the ++# library supports the X/Open Enhanced Curses definition. In particular, ++# the wide-character types attr_t, cchar_t and wint_t, the functions ++# wattr_set() and wget_wch() and the macros WA_NORMAL and _XOPEN_CURSES ++# are checked. The Ncurses library does NOT conform to this definition, ++# although NcursesW does. ++# ++# HAVE_CURSES_COLOR and ax_cv_curses_color are defined if the library ++# supports color functions and macros such as COLOR_PAIR, A_COLOR, ++# COLOR_WHITE, COLOR_RED and init_pair(). These are NOT part of the ++# X/Open Base Curses definition, but are part of the Enhanced set of ++# functions. The Ncurses library DOES support these functions, as does ++# NcursesW. ++# ++# HAVE_CURSES_OBSOLETE and ax_cv_curses_obsolete are defined if the ++# library supports certain features present in SysV and BSD Curses but not ++# defined in the X/Open definition. In particular, the functions ++# getattrs(), getcurx() and getmaxx() are checked. ++# ++# To use the HAVE_xxx_H preprocessor symbols, insert the following into ++# your system.h (or equivalent) header file: ++# ++# #if defined HAVE_NCURSESW_CURSES_H ++# # include ++# #elif defined HAVE_NCURSESW_H ++# # include ++# #elif defined HAVE_NCURSES_CURSES_H ++# # include ++# #elif defined HAVE_NCURSES_H ++# # include ++# #elif defined HAVE_CURSES_H ++# # include ++# #else ++# # error "SysV or X/Open-compatible Curses header file required" ++# #endif ++# ++# For previous users of this macro: you should not need to change anything ++# in your configure.ac or Makefile.am, as the previous (serial 10) ++# semantics are still valid. However, you should update your system.h (or ++# equivalent) header file to the fragment shown above. You are encouraged ++# also to make use of the extended functionality provided by this version ++# of AX_WITH_CURSES, as well as in the additional macros ++# AX_WITH_CURSES_PANEL, AX_WITH_CURSES_MENU and AX_WITH_CURSES_FORM. ++# ++# LICENSE ++# ++# Copyright (c) 2009 Mark Pulford ++# Copyright (c) 2009 Damian Pietras ++# Copyright (c) 2012 Reuben Thomas ++# Copyright (c) 2011 John Zaitseff ++# ++# 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 3 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, see . ++# ++# As a special exception, the respective Autoconf Macro's copyright owner ++# gives unlimited permission to copy, distribute and modify the configure ++# scripts that are the output of Autoconf when processing the Macro. You ++# need not follow the terms of the GNU General Public License when using ++# or distributing such scripts, even though portions of the text of the ++# Macro appear in them. The GNU General Public License (GPL) does govern ++# all other use of the material that constitutes the Autoconf Macro. ++# ++# This special exception to the GPL applies to versions of the Autoconf ++# Macro released by the Autoconf Archive. When you make and distribute a ++# modified version of the Autoconf Macro, you may extend this special ++# exception to the GPL to apply to your modified version as well. ++ ++#serial 15 ++ ++AU_ALIAS([MP_WITH_CURSES], [AX_WITH_CURSES]) ++AC_DEFUN([AX_WITH_CURSES], [ ++ AC_ARG_VAR([CURSES_LIB], [linker library for Curses, e.g. -lcurses]) ++ AC_ARG_WITH([ncurses], [AS_HELP_STRING([--with-ncurses], ++ [force the use of Ncurses or NcursesW])], ++ [], [with_ncurses=check]) ++ AC_ARG_WITH([ncursesw], [AS_HELP_STRING([--without-ncursesw], ++ [do not use NcursesW (wide character support)])], ++ [], [with_ncursesw=check]) ++ ++ ax_saved_LIBS=$LIBS ++ AS_IF([test "x$with_ncurses" = xyes || test "x$with_ncursesw" = xyes], ++ [ax_with_plaincurses=no], [ax_with_plaincurses=check]) ++ ++ ax_cv_curses_which=no ++ ++ # Test for NcursesW ++ ++ AS_IF([test "x$CURSES_LIB" = x && test "x$with_ncursesw" != xno], [ ++ LIBS="$ax_saved_LIBS -lncursesw" ++ ++ AC_CACHE_CHECK([for NcursesW wide-character library], [ax_cv_ncursesw], [ ++ AC_LINK_IFELSE([AC_LANG_CALL([], [initscr])], ++ [ax_cv_ncursesw=yes], [ax_cv_ncursesw=no]) ++ ]) ++ AS_IF([test "x$ax_cv_ncursesw" = xno && test "x$with_ncursesw" = xyes], [ ++ AC_MSG_ERROR([--with-ncursesw specified but could not find NcursesW library]) ++ ]) ++ ++ AS_IF([test "x$ax_cv_ncursesw" = xyes], [ ++ ax_cv_curses=yes ++ ax_cv_curses_which=ncursesw ++ CURSES_LIB="-lncursesw" ++ AC_DEFINE([HAVE_NCURSESW], [1], [Define to 1 if the NcursesW library is present]) ++ AC_DEFINE([HAVE_CURSES], [1], [Define to 1 if a SysV or X/Open compatible Curses library is present]) ++ ++ AC_CACHE_CHECK([for working ncursesw/curses.h], [ax_cv_header_ncursesw_curses_h], [ ++ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ ++ @%:@define _XOPEN_SOURCE_EXTENDED 1 ++ @%:@include ++ ]], [[ ++ chtype a = A_BOLD; ++ int b = KEY_LEFT; ++ chtype c = COLOR_PAIR(1) & A_COLOR; ++ attr_t d = WA_NORMAL; ++ cchar_t e; ++ wint_t f; ++ int g = getattrs(stdscr); ++ int h = getcurx(stdscr) + getmaxx(stdscr); ++ initscr(); ++ init_pair(1, COLOR_WHITE, COLOR_RED); ++ wattr_set(stdscr, d, 0, NULL); ++ wget_wch(stdscr, &f); ++ ]])], ++ [ax_cv_header_ncursesw_curses_h=yes], ++ [ax_cv_header_ncursesw_curses_h=no]) ++ ]) ++ AS_IF([test "x$ax_cv_header_ncursesw_curses_h" = xyes], [ ++ ax_cv_curses_enhanced=yes ++ ax_cv_curses_color=yes ++ ax_cv_curses_obsolete=yes ++ AC_DEFINE([HAVE_CURSES_ENHANCED], [1], [Define to 1 if library supports X/Open Enhanced functions]) ++ AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) ++ AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) ++ AC_DEFINE([HAVE_NCURSESW_CURSES_H], [1], [Define to 1 if is present]) ++ ]) ++ ++ AC_CACHE_CHECK([for working ncursesw.h], [ax_cv_header_ncursesw_h], [ ++ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ ++ @%:@define _XOPEN_SOURCE_EXTENDED 1 ++ @%:@include ++ ]], [[ ++ chtype a = A_BOLD; ++ int b = KEY_LEFT; ++ chtype c = COLOR_PAIR(1) & A_COLOR; ++ attr_t d = WA_NORMAL; ++ cchar_t e; ++ wint_t f; ++ int g = getattrs(stdscr); ++ int h = getcurx(stdscr) + getmaxx(stdscr); ++ initscr(); ++ init_pair(1, COLOR_WHITE, COLOR_RED); ++ wattr_set(stdscr, d, 0, NULL); ++ wget_wch(stdscr, &f); ++ ]])], ++ [ax_cv_header_ncursesw_h=yes], ++ [ax_cv_header_ncursesw_h=no]) ++ ]) ++ AS_IF([test "x$ax_cv_header_ncursesw_h" = xyes], [ ++ ax_cv_curses_enhanced=yes ++ ax_cv_curses_color=yes ++ ax_cv_curses_obsolete=yes ++ AC_DEFINE([HAVE_CURSES_ENHANCED], [1], [Define to 1 if library supports X/Open Enhanced functions]) ++ AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) ++ AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) ++ AC_DEFINE([HAVE_NCURSESW_H], [1], [Define to 1 if is present]) ++ ]) ++ ++ AC_CACHE_CHECK([for working ncurses.h], [ax_cv_header_ncurses_h_with_ncursesw], [ ++ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ ++ @%:@define _XOPEN_SOURCE_EXTENDED 1 ++ @%:@include ++ ]], [[ ++ chtype a = A_BOLD; ++ int b = KEY_LEFT; ++ chtype c = COLOR_PAIR(1) & A_COLOR; ++ attr_t d = WA_NORMAL; ++ cchar_t e; ++ wint_t f; ++ int g = getattrs(stdscr); ++ int h = getcurx(stdscr) + getmaxx(stdscr); ++ initscr(); ++ init_pair(1, COLOR_WHITE, COLOR_RED); ++ wattr_set(stdscr, d, 0, NULL); ++ wget_wch(stdscr, &f); ++ ]])], ++ [ax_cv_header_ncurses_h_with_ncursesw=yes], ++ [ax_cv_header_ncurses_h_with_ncursesw=no]) ++ ]) ++ AS_IF([test "x$ax_cv_header_ncurses_h_with_ncursesw" = xyes], [ ++ ax_cv_curses_enhanced=yes ++ ax_cv_curses_color=yes ++ ax_cv_curses_obsolete=yes ++ AC_DEFINE([HAVE_CURSES_ENHANCED], [1], [Define to 1 if library supports X/Open Enhanced functions]) ++ AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) ++ AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) ++ AC_DEFINE([HAVE_NCURSES_H], [1], [Define to 1 if is present]) ++ ]) ++ ++ AS_IF([test "x$ax_cv_header_ncursesw_curses_h" = xno && test "x$ax_cv_header_ncursesw_h" = xno && test "x$ax_cv_header_ncurses_h_with_ncursesw" = xno], [ ++ AC_MSG_WARN([could not find a working ncursesw/curses.h, ncursesw.h or ncurses.h]) ++ ]) ++ ]) ++ ]) ++ ++ # Test for Ncurses ++ ++ AS_IF([test "x$CURSES_LIB" = x && test "x$with_ncurses" != xno && test "x$ax_cv_curses_which" = xno], [ ++ LIBS="$ax_saved_LIBS -lncurses" ++ ++ AC_CACHE_CHECK([for Ncurses library], [ax_cv_ncurses], [ ++ AC_LINK_IFELSE([AC_LANG_CALL([], [initscr])], ++ [ax_cv_ncurses=yes], [ax_cv_ncurses=no]) ++ ]) ++ AS_IF([test "x$ax_cv_ncurses" = xno && test "x$with_ncurses" = xyes], [ ++ AC_MSG_ERROR([--with-ncurses specified but could not find Ncurses library]) ++ ]) ++ ++ AS_IF([test "x$ax_cv_ncurses" = xyes], [ ++ ax_cv_curses=yes ++ ax_cv_curses_which=ncurses ++ CURSES_LIB="-lncurses" ++ AC_DEFINE([HAVE_NCURSES], [1], [Define to 1 if the Ncurses library is present]) ++ AC_DEFINE([HAVE_CURSES], [1], [Define to 1 if a SysV or X/Open compatible Curses library is present]) ++ ++ AC_CACHE_CHECK([for working ncurses/curses.h], [ax_cv_header_ncurses_curses_h], [ ++ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ ++ @%:@include ++ ]], [[ ++ chtype a = A_BOLD; ++ int b = KEY_LEFT; ++ chtype c = COLOR_PAIR(1) & A_COLOR; ++ int g = getattrs(stdscr); ++ int h = getcurx(stdscr) + getmaxx(stdscr); ++ initscr(); ++ init_pair(1, COLOR_WHITE, COLOR_RED); ++ ]])], ++ [ax_cv_header_ncurses_curses_h=yes], ++ [ax_cv_header_ncurses_curses_h=no]) ++ ]) ++ AS_IF([test "x$ax_cv_header_ncurses_curses_h" = xyes], [ ++ ax_cv_curses_color=yes ++ ax_cv_curses_obsolete=yes ++ AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) ++ AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) ++ AC_DEFINE([HAVE_NCURSES_CURSES_H], [1], [Define to 1 if is present]) ++ ]) ++ ++ AC_CACHE_CHECK([for working ncurses.h], [ax_cv_header_ncurses_h], [ ++ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ ++ @%:@include ++ ]], [[ ++ chtype a = A_BOLD; ++ int b = KEY_LEFT; ++ chtype c = COLOR_PAIR(1) & A_COLOR; ++ int g = getattrs(stdscr); ++ int h = getcurx(stdscr) + getmaxx(stdscr); ++ initscr(); ++ init_pair(1, COLOR_WHITE, COLOR_RED); ++ ]])], ++ [ax_cv_header_ncurses_h=yes], ++ [ax_cv_header_ncurses_h=no]) ++ ]) ++ AS_IF([test "x$ax_cv_header_ncurses_h" = xyes], [ ++ ax_cv_curses_color=yes ++ ax_cv_curses_obsolete=yes ++ AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) ++ AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) ++ AC_DEFINE([HAVE_NCURSES_H], [1], [Define to 1 if is present]) ++ ]) ++ ++ AS_IF([test "x$ax_cv_header_ncurses_curses_h" = xno && test "x$ax_cv_header_ncurses_h" = xno], [ ++ AC_MSG_WARN([could not find a working ncurses/curses.h or ncurses.h]) ++ ]) ++ ]) ++ ]) ++ ++ # Test for plain Curses (or if CURSES_LIB was set by user) ++ ++ AS_IF([test "x$with_plaincurses" != xno && test "x$ax_cv_curses_which" = xno], [ ++ AS_IF([test "x$CURSES_LIB" != x], [ ++ LIBS="$ax_saved_LIBS $CURSES_LIB" ++ ], [ ++ LIBS="$ax_saved_LIBS -lcurses" ++ ]) ++ ++ AC_CACHE_CHECK([for Curses library], [ax_cv_plaincurses], [ ++ AC_LINK_IFELSE([AC_LANG_CALL([], [initscr])], ++ [ax_cv_plaincurses=yes], [ax_cv_plaincurses=no]) ++ ]) ++ ++ AS_IF([test "x$ax_cv_plaincurses" = xyes], [ ++ ax_cv_curses=yes ++ ax_cv_curses_which=plaincurses ++ AS_IF([test "x$CURSES_LIB" = x], [ ++ CURSES_LIB="-lcurses" ++ ]) ++ AC_DEFINE([HAVE_CURSES], [1], [Define to 1 if a SysV or X/Open compatible Curses library is present]) ++ ++ # Check for base conformance (and header file) ++ ++ AC_CACHE_CHECK([for working curses.h], [ax_cv_header_curses_h], [ ++ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ ++ @%:@include ++ ]], [[ ++ chtype a = A_BOLD; ++ int b = KEY_LEFT; ++ initscr(); ++ ]])], ++ [ax_cv_header_curses_h=yes], ++ [ax_cv_header_curses_h=no]) ++ ]) ++ AS_IF([test "x$ax_cv_header_curses_h" = xyes], [ ++ AC_DEFINE([HAVE_CURSES_H], [1], [Define to 1 if is present]) ++ ++ # Check for X/Open Enhanced conformance ++ ++ AC_CACHE_CHECK([for X/Open Enhanced Curses conformance], [ax_cv_plaincurses_enhanced], [ ++ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ ++ @%:@define _XOPEN_SOURCE_EXTENDED 1 ++ @%:@include ++ @%:@ifndef _XOPEN_CURSES ++ @%:@error "this Curses library is not enhanced" ++ "this Curses library is not enhanced" ++ @%:@endif ++ ]], [[ ++ chtype a = A_BOLD; ++ int b = KEY_LEFT; ++ chtype c = COLOR_PAIR(1) & A_COLOR; ++ attr_t d = WA_NORMAL; ++ cchar_t e; ++ wint_t f; ++ initscr(); ++ init_pair(1, COLOR_WHITE, COLOR_RED); ++ wattr_set(stdscr, d, 0, NULL); ++ wget_wch(stdscr, &f); ++ ]])], ++ [ax_cv_plaincurses_enhanced=yes], ++ [ax_cv_plaincurses_enhanced=no]) ++ ]) ++ AS_IF([test "x$ax_cv_plaincurses_enhanced" = xyes], [ ++ ax_cv_curses_enhanced=yes ++ ax_cv_curses_color=yes ++ AC_DEFINE([HAVE_CURSES_ENHANCED], [1], [Define to 1 if library supports X/Open Enhanced functions]) ++ AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) ++ ]) ++ ++ # Check for color functions ++ ++ AC_CACHE_CHECK([for Curses color functions], [ax_cv_plaincurses_color], [ ++ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ ++ @%:@define _XOPEN_SOURCE_EXTENDED 1 ++ @%:@include ++ ]], [[ ++ chtype a = A_BOLD; ++ int b = KEY_LEFT; ++ chtype c = COLOR_PAIR(1) & A_COLOR; ++ initscr(); ++ init_pair(1, COLOR_WHITE, COLOR_RED); ++ ]])], ++ [ax_cv_plaincurses_color=yes], ++ [ax_cv_plaincurses_color=no]) ++ ]) ++ AS_IF([test "x$ax_cv_plaincurses_color" = xyes], [ ++ ax_cv_curses_color=yes ++ AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) ++ ]) ++ ++ # Check for obsolete functions ++ ++ AC_CACHE_CHECK([for obsolete Curses functions], [ax_cv_plaincurses_obsolete], [ ++ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ ++ @%:@include ++ ]], [[ ++ chtype a = A_BOLD; ++ int b = KEY_LEFT; ++ int g = getattrs(stdscr); ++ int h = getcurx(stdscr) + getmaxx(stdscr); ++ initscr(); ++ ]])], ++ [ax_cv_plaincurses_obsolete=yes], ++ [ax_cv_plaincurses_obsolete=no]) ++ ]) ++ AS_IF([test "x$ax_cv_plaincurses_obsolete" = xyes], [ ++ ax_cv_curses_obsolete=yes ++ AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) ++ ]) ++ ]) ++ ++ AS_IF([test "x$ax_cv_header_curses_h" = xno], [ ++ AC_MSG_WARN([could not find a working curses.h]) ++ ]) ++ ]) ++ ]) ++ ++ AS_IF([test "x$ax_cv_curses" != xyes], [ax_cv_curses=no]) ++ AS_IF([test "x$ax_cv_curses_enhanced" != xyes], [ax_cv_curses_enhanced=no]) ++ AS_IF([test "x$ax_cv_curses_color" != xyes], [ax_cv_curses_color=no]) ++ AS_IF([test "x$ax_cv_curses_obsolete" != xyes], [ax_cv_curses_obsolete=no]) ++ ++ LIBS=$ax_saved_LIBS ++])dnl +diff --git a/autotools/softether.am b/autotools/softether.am +new file mode 100644 +index 00000000..e5e91eeb +--- /dev/null ++++ b/autotools/softether.am +@@ -0,0 +1,39 @@ ++# Copyright 2014 Darik Horn ++# ++# This file is part of SoftEther. ++# ++# SoftEther 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. ++# ++# SoftEther 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 ++# SoftEther. If not, see . ++ ++ ++if CONFIGURE_ENABLE_DEBUG ++DEBUG_CFLAGS = -g -D_DEBUG -DDEBUG ++else ++DEBUG_CFLAGS = -DNDEBUG -DVPN_SPEED ++endif ++ ++AM_CFLAGS = \ ++ $(DEBUG_CFLAGS) \ ++ -I$(top_srcdir)/src \ ++ -I$(top_srcdir)/src/Mayaqua \ ++ -I$(top_srcdir)/src/Cedar \ ++ -DUNIX \ ++ -DUNIX_LINUX \ ++ -D_REENTRANT \ ++ -DREENTRANT \ ++ -D_THREAD_SAFE \ ++ -D_THREADSAFE \ ++ -DTHREAD_SAFE \ ++ -DTHREADSAFE \ ++ -D_FILE_OFFSET_BITS=64 \ ++ -fsigned-char +diff --git a/configure.ac b/configure.ac +new file mode 100644 +index 00000000..4a3fc2ba +--- /dev/null ++++ b/configure.ac +@@ -0,0 +1,96 @@ ++# Copyright 2014 Darik Horn ++# ++# This file is part of SoftEther. ++# ++# SoftEther 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. ++# ++# SoftEther 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 ++# SoftEther. If not, see . ++ ++ ++AC_INIT([SoftEther], [1], [http://www.vpnusers.com/], [softether], [http://www.softether.org/]) ++AC_CONFIG_AUX_DIR([autotools]) ++AC_CONFIG_MACRO_DIR([autotools]) ++AM_INIT_AUTOMAKE([foreign -Wall -Werror]) ++AM_PROG_AR ++AC_PROG_CC ++AC_PROG_LIBTOOL ++AC_CONFIG_HEADERS([softether_config.h]) ++AC_CONFIG_FILES([ ++ Makefile ++ src/Makefile ++ src/Mayaqua/Makefile ++ src/Cedar/Makefile ++ src/hamcorebuilder/Makefile ++ src/bin/hamcore/Makefile ++ src/vpnserver/Makefile ++ src/vpnclient/Makefile ++ src/vpnbridge/Makefile ++ src/vpncmd/Makefile ++]) ++ ++ ++AC_ARG_ENABLE( ++ [debug], ++ AS_HELP_STRING([--enable-debug], [build SoftEther with debugging features]), ++ [debug=yes] ++) ++AM_CONDITIONAL([CONFIGURE_ENABLE_DEBUG], [test _"$debug" = _yes]) ++ ++ ++AX_PTHREAD([ ++ AC_SUBST(PTHREAD_CC) ++ AC_SUBST(PTHREAD_CFLAGS) ++ AC_SUBST(PTHREAD_LIBS) ++],[ ++ AC_MSG_ERROR([pthread capabilities not found]) ++]) ++ ++CC="$PTHREAD_CC" ++CFLAGS="$CFLAGS $PTHREAD_CFLAGS" ++LIBS="$PTHREAD_LIBS $LIBS" ++ ++ ++AX_CHECK_OPENSSL([ ++ AC_SUBST(OPENSSL_LIBS) ++ AC_SUBST(OPENSSL_LDFLAGS) ++],[ ++ AC_MSG_ERROR([openssl not found]) ++]) ++ ++LIBS="$LIBS $OPENSSL_LIBS" ++LDFLAGS="$LDFLAGS $OPENSSL_LDFLAGS" ++ ++ ++# This macro automatically updates build variables. ++AX_CHECK_ZLIB(, AC_MSG_ERROR([zlib not found])) ++ ++ ++AX_WITH_CURSES ++if test "_$ax_cv_curses" != _yes ++then ++ AC_MSG_ERROR([libcurses, libncurses, or libncursesw not found]) ++else ++ AC_SUBST(CURSES_LIB) ++ LIBS="$LIBS $CURSES_LIB" ++fi ++ ++ ++AX_LIB_READLINE ++if test "_$ax_cv_lib_readline" = _no ++then ++ AC_MSG_ERROR([libreadline not found]) ++else ++ : This macro automatically updates build variables. ++fi ++ ++ ++AC_OUTPUT +--- a/configure 2017-07-16 04:53:31.000000000 +0200 ++++ b/configure 1970-01-01 01:00:00.000000000 +0100 +@@ -1,112 +0,0 @@ +-#!/bin/sh +- +-echo '---------------------------------------------------------------------' +-echo 'SoftEther VPN for Unix' +-echo +-echo 'Copyright (c) Daiyuu Nobori.' +-echo 'Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.' +-echo 'Copyright (c) SoftEther Corporation.' +-echo 'Copyright (c) all contributors on SoftEther VPN project in GitHub.' +-echo +-echo 'License: The Apache License, Version 2.0' +-echo +-echo 'Read and understand README.TXT, LICENSE.TXT and WARNING.TXT before use.' +-echo '---------------------------------------------------------------------' +-echo +- +-echo 'Welcome to the corner-cutting configure script !' +-echo +- +-OS="" +-case "`uname -s`" in +-Linux) +- OS="linux" +- ;; +-FreeBSD) +- OS="freebsd" +- ;; +-SunOS) +- OS="solaris" +- ;; +-Darwin) +- OS="macos" +- ;; +-OpenBSD) +- OS="openbsd" +- ;; +-*) +- echo 'Select your operating system below:' +- echo ' 1: Linux' +- echo ' 2: FreeBSD' +- echo ' 3: Solaris' +- echo ' 4: Mac OS X' +- echo ' 5: OpenBSD' +- echo +- echo -n 'Which is your operating system (1 - 5) ? : ' +- read TMP +- echo +- if test "$TMP" = "1" +- then +- OS="linux" +- fi +- if test "$TMP" = "2" +- then +- OS="freebsd" +- fi +- if test "$TMP" = "3" +- then +- OS="solaris" +- fi +- if test "$TMP" = "4" +- then +- OS="macos" +- fi +- if test "$TMP" = "5" +- then +- OS="openbsd" +- fi +- +- if test "$OS" = "" +- then +- echo "Wrong number." +- exit 1 +- fi +- ;; +-esac +- +-CPU="" +-case "`uname -m`" in +-x86_64|amd64|aarch64|arm64|armv8*|mips64|ppc64|sparc64|alpha|ia64) +- CPU=64bit +- ;; +-i?86|x86pc|i86pc|armv4*|armv5*|armv6*|armv7*) +- CPU=32bit +- ;; +-*) +- echo 'Select your CPU bits below:' +- echo ' 1: 32-bit' +- echo ' 2: 64-bit' +- echo +- echo -n 'Which is the type of your CPU (1 - 2) ? : ' +- read TMP +- echo +- if test "$TMP" = "1" +- then +- CPU="32bit" +- fi +- if test "$TMP" = "2" +- then +- CPU="64bit" +- fi +- +- if test "$CPU" = "" +- then +- echo "Wrong number." +- exit 1 +- fi +- ;; +-esac +- +-cp src/makefiles/${OS}_${CPU}.mak Makefile +- +-echo "The Makefile is generated. Run 'make' to build SoftEther VPN." +--- a/manual_configure 1970-01-01 01:00:00.000000000 +0100 ++++ b/manual_configure 2017-07-16 04:53:31.000000000 +0200 +@@ -0,0 +1,112 @@ ++#!/bin/sh ++ ++echo '---------------------------------------------------------------------' ++echo 'SoftEther VPN for Unix' ++echo ++echo 'Copyright (c) SoftEther VPN Project at University of Tsukuba, Japan.' ++echo 'Copyright (c) Daiyuu Nobori. All Rights Reserved.' ++echo ++echo 'This program is free software; you can redistribute it and/or' ++echo 'modify it under the terms of the GNU General Public License' ++echo 'version 2 as published by the Free Software Foundation.' ++echo ++echo 'Read and understand README.TXT, LICENSE.TXT and WARNING.TXT before use.' ++echo '---------------------------------------------------------------------' ++echo ++ ++echo 'Welcome to the corner-cutting configure script !' ++echo ++ ++OS="" ++case "`uname -s`" in ++Linux) ++ OS="linux" ++ ;; ++FreeBSD) ++ OS="freebsd" ++ ;; ++SunOS) ++ OS="solaris" ++ ;; ++Darwin) ++ OS="macos" ++ ;; ++OpenBSD) ++ OS="openbsd" ++ ;; ++*) ++ echo 'Select your operating system below:' ++ echo ' 1: Linux' ++ echo ' 2: FreeBSD' ++ echo ' 3: Solaris' ++ echo ' 4: Mac OS X' ++ echo ' 5: OpenBSD' ++ echo ++ echo -n 'Which is your operating system (1 - 5) ? : ' ++ read TMP ++ echo ++ if test "$TMP" = "1" ++ then ++ OS="linux" ++ fi ++ if test "$TMP" = "2" ++ then ++ OS="freebsd" ++ fi ++ if test "$TMP" = "3" ++ then ++ OS="solaris" ++ fi ++ if test "$TMP" = "4" ++ then ++ OS="macos" ++ fi ++ if test "$TMP" = "5" ++ then ++ OS="openbsd" ++ fi ++ ++ if test "$OS" = "" ++ then ++ echo "Wrong number." ++ exit 1 ++ fi ++ ;; ++esac ++ ++CPU="" ++case "`uname -m`" in ++x86_64|amd64|aarch64|arm64|armv8*|mips64|ppc64|sparc64|alpha|ia64) ++ CPU=64bit ++ ;; ++i?86|x86pc|i86pc|armv4*|armv5*|armv6*|armv7*) ++ CPU=32bit ++ ;; ++*) ++ echo 'Select your CPU bits below:' ++ echo ' 1: 32-bit' ++ echo ' 2: 64-bit' ++ echo ++ echo -n 'Which is the type of your CPU (1 - 2) ? : ' ++ read TMP ++ echo ++ if test "$TMP" = "1" ++ then ++ CPU="32bit" ++ fi ++ if test "$TMP" = "2" ++ then ++ CPU="64bit" ++ fi ++ ++ if test "$CPU" = "" ++ then ++ echo "Wrong number." ++ exit 1 ++ fi ++ ;; ++esac ++ ++cp src/makefiles/${OS}_${CPU}.mak Makefile ++ ++echo "The Makefile is generated. Run 'make' to build SoftEther VPN." +diff --git a/src/Cedar/Makefile.am b/src/Cedar/Makefile.am +new file mode 100644 +index 00000000..5346537d +--- /dev/null ++++ b/src/Cedar/Makefile.am +@@ -0,0 +1,82 @@ ++# Copyright 2014 Darik Horn ++# ++# This file is part of SoftEther. ++# ++# SoftEther 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. ++# ++# SoftEther 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 ++# SoftEther. If not, see . ++ ++ ++include $(top_srcdir)/autotools/softether.am ++ ++noinst_LTLIBRARIES = libcedar.la ++ ++libcedar_la_SOURCES = \ ++ Account.c \ ++ Admin.c \ ++ AzureClient.c \ ++ AzureServer.c \ ++ Bridge.c \ ++ BridgeUnix.c \ ++ BridgeWin32.c \ ++ Cedar.c \ ++ CedarPch.c \ ++ Client.c \ ++ CM.c \ ++ Command.c \ ++ Connection.c \ ++ Console.c \ ++ Database.c \ ++ DDNS.c \ ++ EM.c \ ++ EtherLog.c \ ++ Hub.c \ ++ Interop_OpenVPN.c \ ++ Interop_SSTP.c \ ++ IPsec.c \ ++ IPsec_EtherIP.c \ ++ IPsec_IKE.c \ ++ IPsec_IkePacket.c \ ++ IPsec_IPC.c \ ++ IPsec_L2TP.c \ ++ IPsec_PPP.c \ ++ IPsec_Win7.c \ ++ Layer3.c \ ++ Link.c \ ++ Listener.c \ ++ Logging.c \ ++ Nat.c \ ++ NativeStack.c \ ++ NM.c \ ++ NullLan.c \ ++ Protocol.c \ ++ Radius.c \ ++ Remote.c \ ++ Sam.c \ ++ SecureInfo.c \ ++ SecureNAT.c \ ++ SeLowUser.c \ ++ Server.c \ ++ Session.c \ ++ SM.c \ ++ SW.c \ ++ UdpAccel.c \ ++ UT.c \ ++ VG.c \ ++ Virtual.c \ ++ VLan.c \ ++ VLanUnix.c \ ++ VLanWin32.c \ ++ WaterMark.c \ ++ WebUI.c \ ++ WinUi.c \ ++ Wpc.c +diff --git a/src/Makefile.am b/src/Makefile.am +new file mode 100644 +index 00000000..dc745426 +--- /dev/null ++++ b/src/Makefile.am +@@ -0,0 +1,26 @@ ++# Copyright 2014 Darik Horn ++# ++# This file is part of SoftEther. ++# ++# SoftEther 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. ++# ++# SoftEther 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 ++# SoftEther. If not, see . ++ ++ ++# These components are built as libtool convenience libraries. ++SUBDIRS = Mayaqua Cedar ++ ++# This is a nodist helper. ++SUBDIRS += hamcorebuilder ++ ++# These are final build products. ++SUBDIRS += bin/hamcore vpnserver vpnclient vpnbridge vpncmd +diff --git a/src/Mayaqua/Makefile.am b/src/Mayaqua/Makefile.am +new file mode 100644 +index 00000000..6b8dc1a6 +--- /dev/null ++++ b/src/Mayaqua/Makefile.am +@@ -0,0 +1,43 @@ ++# Copyright 2014 Darik Horn ++# ++# This file is part of SoftEther. ++# ++# SoftEther 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. ++# ++# SoftEther 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 ++# SoftEther. If not, see . ++ ++ ++include $(top_srcdir)/autotools/softether.am ++ ++noinst_LTLIBRARIES = libmayaqua.la ++ ++libmayaqua_la_SOURCES = \ ++ Cfg.c \ ++ Encrypt.c \ ++ FileIO.c \ ++ Internat.c \ ++ Kernel.c \ ++ Mayaqua.c \ ++ Memory.c \ ++ Microsoft.c \ ++ Network.c \ ++ Object.c \ ++ OS.c \ ++ Pack.c \ ++ Secure.c \ ++ Str.c \ ++ Table.c \ ++ TcpIp.c \ ++ Tick64.c \ ++ Tracking.c \ ++ Unix.c \ ++ Win32.c +diff --git a/src/bin/hamcore/Makefile.am b/src/bin/hamcore/Makefile.am +new file mode 100644 +index 00000000..37b0291e +--- /dev/null ++++ b/src/bin/hamcore/Makefile.am +@@ -0,0 +1,29 @@ ++# Copyright 2014 Darik Horn ++# ++# This file is part of SoftEther. ++# ++# SoftEther 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. ++# ++# SoftEther 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 ++# SoftEther. If not, see . ++ ++ ++include $(top_srcdir)/autotools/softether.am ++ ++# This is required to use a custom build rule with -Wall and -Werror enabled. ++AUTOMAKE_OPTIONS = -Wno-override ++EXEEXT = ++HAMCOREBUILDER = $(top_builddir)/src/hamcorebuilder/hamcorebuilder ++ ++sbin_PROGRAMS = hamcore.se2 ++ ++hamcore.se2$(EXEEXT): $(HAMCOREBUILDER) ++ $(HAMCOREBUILDER) $(top_srcdir)/src/bin/hamcore $@ +diff --git a/src/hamcorebuilder/Makefile.am b/src/hamcorebuilder/Makefile.am +new file mode 100644 +index 00000000..a22429f0 +--- /dev/null ++++ b/src/hamcorebuilder/Makefile.am +@@ -0,0 +1,29 @@ ++# Copyright 2014 Darik Horn ++# ++# This file is part of SoftEther. ++# ++# SoftEther 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. ++# ++# SoftEther 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 ++# SoftEther. If not, see . ++ ++ ++include $(top_srcdir)/autotools/softether.am ++ ++noinst_PROGRAMS = \ ++ hamcorebuilder ++ ++hamcorebuilder_SOURCES = \ ++ hamcorebuilder.c ++ ++hamcorebuilder_LDADD = \ ++ $(top_builddir)/src/Mayaqua/libmayaqua.la \ ++ $(top_builddir)/src/Cedar/libcedar.la +diff --git a/src/vpnbridge/Makefile.am b/src/vpnbridge/Makefile.am +new file mode 100644 +index 00000000..35fe043d +--- /dev/null ++++ b/src/vpnbridge/Makefile.am +@@ -0,0 +1,29 @@ ++# Copyright 2014 Darik Horn ++# ++# This file is part of SoftEther. ++# ++# SoftEther 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. ++# ++# SoftEther 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 ++# SoftEther. If not, see . ++ ++ ++include $(top_srcdir)/autotools/softether.am ++ ++sbin_PROGRAMS = \ ++ vpnbridge ++ ++vpnbridge_SOURCES = \ ++ vpnbridge.c ++ ++vpnbridge_LDADD = \ ++ $(top_builddir)/src/Mayaqua/libmayaqua.la \ ++ $(top_builddir)/src/Cedar/libcedar.la +diff --git a/src/vpnclient/Makefile.am b/src/vpnclient/Makefile.am +new file mode 100644 +index 00000000..1aa55330 +--- /dev/null ++++ b/src/vpnclient/Makefile.am +@@ -0,0 +1,29 @@ ++# Copyright 2014 Darik Horn ++# ++# This file is part of SoftEther. ++# ++# SoftEther 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. ++# ++# SoftEther 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 ++# SoftEther. If not, see . ++ ++ ++include $(top_srcdir)/autotools/softether.am ++ ++sbin_PROGRAMS = \ ++ vpnclient ++ ++vpnclient_SOURCES = \ ++ vpncsvc.c ++ ++vpnclient_LDADD = \ ++ $(top_builddir)/src/Mayaqua/libmayaqua.la \ ++ $(top_builddir)/src/Cedar/libcedar.la +diff --git a/src/vpncmd/Makefile.am b/src/vpncmd/Makefile.am +new file mode 100644 +index 00000000..d8042aa2 +--- /dev/null ++++ b/src/vpncmd/Makefile.am +@@ -0,0 +1,29 @@ ++# Copyright 2014 Darik Horn ++# ++# This file is part of SoftEther. ++# ++# SoftEther 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. ++# ++# SoftEther 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 ++# SoftEther. If not, see . ++ ++ ++include $(top_srcdir)/autotools/softether.am ++ ++sbin_PROGRAMS = \ ++ vpncmd ++ ++vpncmd_SOURCES = \ ++ vpncmd.c ++ ++vpncmd_LDADD = \ ++ $(top_builddir)/src/Mayaqua/libmayaqua.la \ ++ $(top_builddir)/src/Cedar/libcedar.la +diff --git a/src/vpnserver/Makefile.am b/src/vpnserver/Makefile.am +new file mode 100644 +index 00000000..c1c33570 +--- /dev/null ++++ b/src/vpnserver/Makefile.am +@@ -0,0 +1,29 @@ ++# Copyright 2014 Darik Horn ++# ++# This file is part of SoftEther. ++# ++# SoftEther 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. ++# ++# SoftEther 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 ++# SoftEther. If not, see . ++ ++ ++include $(top_srcdir)/autotools/softether.am ++ ++sbin_PROGRAMS = \ ++ vpnserver ++ ++vpnserver_SOURCES = \ ++ vpnserver.c ++ ++vpnserver_LDADD = \ ++ $(top_builddir)/src/Mayaqua/libmayaqua.la \ ++ $(top_builddir)/src/Cedar/libcedar.la diff --git a/package/softether/0002-Create-libsoftether.so-and-dynamically-link.patch b/package/softether/0002-Create-libsoftether.so-and-dynamically-link.patch new file mode 100644 index 00000000..1fdf1187 --- /dev/null +++ b/package/softether/0002-Create-libsoftether.so-and-dynamically-link.patch @@ -0,0 +1,133 @@ +From 75625af541fd128f51079d0ffe5ef24645b8f421 Mon Sep 17 00:00:00 2001 +From: Darik Horn +Date: Sun, 13 Apr 2014 12:51:15 -0400 +Subject: [PATCH] Create libsoftether.so and dynamically link the userland. + +Sharing object code between vpnbridge, vpnclient, vpnserver, and vpncmd +reduces the binary size of SoftEther by 85% and its administrative memory +footprint by 50%. + +[Upstream commit https://github.com/dajhorn/SoftEtherVPN/commit/75625af541fd128f51079d0ffe5ef24645b8f421] +Signed-off-by: Thomas Petazzoni +--- + configure.ac | 1 + + src/Makefile.am | 7 +++++-- + src/libsoftether/Makefile.am | 34 ++++++++++++++++++++++++++++++++++ + src/vpnbridge/Makefile.am | 3 +-- + src/vpnclient/Makefile.am | 3 +-- + src/vpncmd/Makefile.am | 3 +-- + src/vpnserver/Makefile.am | 3 +-- + 7 files changed, 44 insertions(+), 10 deletions(-) + create mode 100644 src/libsoftether/Makefile.am + +diff --git a/configure.ac b/configure.ac +index 4a3fc2ba..94639c44 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -30,6 +30,7 @@ AC_CONFIG_FILES([ + src/Mayaqua/Makefile + src/Cedar/Makefile + src/hamcorebuilder/Makefile ++ src/libsoftether/Makefile + src/bin/hamcore/Makefile + src/vpnserver/Makefile + src/vpnclient/Makefile +diff --git a/src/Makefile.am b/src/Makefile.am +index dc745426..1d041d47 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -22,5 +22,8 @@ SUBDIRS = Mayaqua Cedar + # This is a nodist helper. + SUBDIRS += hamcorebuilder + +-# These are final build products. +-SUBDIRS += bin/hamcore vpnserver vpnclient vpnbridge vpncmd ++# These are shared components. ++SUBDIRS += libsoftether bin/hamcore ++ ++# These are the final build products. ++SUBDIRS += vpnserver vpnclient vpnbridge vpncmd +diff --git a/src/libsoftether/Makefile.am b/src/libsoftether/Makefile.am +new file mode 100644 +index 00000000..601920d9 +--- /dev/null ++++ b/src/libsoftether/Makefile.am +@@ -0,0 +1,34 @@ ++# Copyright 2014 Darik Horn ++# ++# This file is part of SoftEther. ++# ++# SoftEther 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. ++# ++# SoftEther 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 ++# SoftEther. If not, see . ++ ++ ++include $(top_srcdir)/autotools/softether.am ++ ++lib_LTLIBRARIES = \ ++ libsoftether.la ++ ++libsoftether_la_SOURCES = ++ ++libsoftether_la_LDFLAGS = \ ++ -avoid-version ++ ++libsoftether_la_LIBTOOLFLAGS = \ ++ --tag=disable-static ++ ++libsoftether_la_LIBADD = \ ++ $(top_builddir)/src/Mayaqua/libmayaqua.la \ ++ $(top_builddir)/src/Cedar/libcedar.la +diff --git a/src/vpnbridge/Makefile.am b/src/vpnbridge/Makefile.am +index 35fe043d..fb91dd2d 100644 +--- a/src/vpnbridge/Makefile.am ++++ b/src/vpnbridge/Makefile.am +@@ -25,5 +25,4 @@ vpnbridge_SOURCES = \ + vpnbridge.c + + vpnbridge_LDADD = \ +- $(top_builddir)/src/Mayaqua/libmayaqua.la \ +- $(top_builddir)/src/Cedar/libcedar.la ++ $(top_builddir)/src/libsoftether/libsoftether.la +diff --git a/src/vpnclient/Makefile.am b/src/vpnclient/Makefile.am +index 1aa55330..c225c416 100644 +--- a/src/vpnclient/Makefile.am ++++ b/src/vpnclient/Makefile.am +@@ -25,5 +25,4 @@ vpnclient_SOURCES = \ + vpncsvc.c + + vpnclient_LDADD = \ +- $(top_builddir)/src/Mayaqua/libmayaqua.la \ +- $(top_builddir)/src/Cedar/libcedar.la ++ $(top_builddir)/src/libsoftether/libsoftether.la +diff --git a/src/vpncmd/Makefile.am b/src/vpncmd/Makefile.am +index d8042aa2..271affb0 100644 +--- a/src/vpncmd/Makefile.am ++++ b/src/vpncmd/Makefile.am +@@ -25,5 +25,4 @@ vpncmd_SOURCES = \ + vpncmd.c + + vpncmd_LDADD = \ +- $(top_builddir)/src/Mayaqua/libmayaqua.la \ +- $(top_builddir)/src/Cedar/libcedar.la ++ $(top_builddir)/src/libsoftether/libsoftether.la +diff --git a/src/vpnserver/Makefile.am b/src/vpnserver/Makefile.am +index c1c33570..1f7b7f98 100644 +--- a/src/vpnserver/Makefile.am ++++ b/src/vpnserver/Makefile.am +@@ -25,5 +25,4 @@ vpnserver_SOURCES = \ + vpnserver.c + + vpnserver_LDADD = \ +- $(top_builddir)/src/Mayaqua/libmayaqua.la \ +- $(top_builddir)/src/Cedar/libcedar.la ++ $(top_builddir)/src/libsoftether/libsoftether.la diff --git a/package/softether/0003-use-fhs-install-directories.patch b/package/softether/0003-use-fhs-install-directories.patch new file mode 100644 index 00000000..ba00d9b6 --- /dev/null +++ b/package/softether/0003-use-fhs-install-directories.patch @@ -0,0 +1,307 @@ +From b9420c3bfc2a8b9d35d0c8e5f6849007c2bc21fa Mon Sep 17 00:00:00 2001 +From: Darik Horn +Date: Mon, 14 Apr 2014 13:22:24 -0400 +Subject: [PATCH] Use FHS installation directories. + +Install to `/usr/sbin`, `/usr/lib`, and `/var/lib` according to the Linux +filesystem hierarchy standard if SoftEther is built through autotools. + +In a managed installation, the FHS stipulates that the application must +accomodate a read-only installation path. This requires a new `GetStateDir` +function that substitues `GetExeDir` in some parts of the code. + +Taken from Github at +https://github.com/dajhorn/SoftEtherVPN/commit/b9420c3bfc2a8b9d35d0c8e5f6849007c2bc21fa. + +Signed-off-by: Bernd Kuhls +Signed-off-by: Thomas Petazzoni + +[Updated for 4.28 build 9669 beta - src/Mayaqua/Encrypt.c dropped IsXRevoked() +Signed-off-by: Matthew Weber +--- + autotools/softether.am | 1 + + src/Cedar/Admin.c | 2 +- + src/Cedar/Command.c | 6 +++++- + src/Cedar/Logging.c | 2 +- + src/Cedar/Server.c | 4 ++-- + src/Mayaqua/FileIO.c | 39 ++++++++++++++++++++++++++++++++++++--- + src/Mayaqua/FileIO.h | 2 ++ + src/Mayaqua/Mayaqua.c | 4 ++++ + src/Mayaqua/Table.c | 6 +++++- + src/Mayaqua/Unix.c | 6 +++--- + src/bin/hamcore/Makefile.am | 8 ++++++-- + 11 files changed, 66 insertions(+), 14 deletions(-) + +Index: b/autotools/softether.am +=================================================================== +--- a/autotools/softether.am ++++ b/autotools/softether.am +@@ -27,6 +27,7 @@ + -I$(top_srcdir)/src \ + -I$(top_srcdir)/src/Mayaqua \ + -I$(top_srcdir)/src/Cedar \ ++ -DSTATE_DIR='"@localstatedir@/lib/softether"' \ + -DUNIX \ + -DUNIX_LINUX \ + -D_REENTRANT \ +Index: b/src/Cedar/Admin.c +=================================================================== +--- a/src/Cedar/Admin.c ++++ b/src/Cedar/Admin.c +@@ -10334,7 +10334,7 @@ + + Zero(t, sizeof(RPC_READ_LOG_FILE)); + +- GetExeDir(exe_dir, sizeof(exe_dir)); ++ GetStateDir(exe_dir, sizeof(exe_dir)); + Format(full_path, sizeof(full_path), "%s/%s", exe_dir, filepath); + + // Read file +Index: b/src/Cedar/Command.c +=================================================================== +--- a/src/Cedar/Command.c ++++ b/src/Cedar/Command.c +@@ -527,7 +527,7 @@ + UINT i; + + GetExeName(exe, sizeof(exe)); +- GetExeDir(exe_dir, sizeof(exe_dir)); ++ GetStateDir(exe_dir, sizeof(exe_dir)); + + ok = false; + dirs = EnumDir(exe_dir); +@@ -552,7 +552,11 @@ + UCHAR *buf; + IO *io; + #ifndef OS_WIN32 ++#ifdef STATE_DIR ++ wchar_t *filename = L"" STATE_DIR L"/vpn_checker_tmp"; ++#else + wchar_t *filename = L"/tmp/vpn_checker_tmp"; ++#endif + #else // OS_WIN32 + wchar_t filename[MAX_PATH]; + CombinePathW(filename, sizeof(filename), MsGetMyTempDirW(), L"vpn_checker_tmp"); +Index: b/src/Cedar/Logging.c +=================================================================== +--- a/src/Cedar/Logging.c ++++ b/src/Cedar/Logging.c +@@ -508,7 +508,7 @@ + + e = ZeroMalloc(sizeof(ERASER)); + +- GetExeDir(dir, sizeof(dir)); ++ GetStateDir(dir, sizeof(dir)); + + e->Log = log; + e->MinFreeSpace = min_size; +Index: b/src/Cedar/Server.c +=================================================================== +--- a/src/Cedar/Server.c ++++ b/src/Cedar/Server.c +@@ -1060,7 +1060,7 @@ + hubname = NULL; + } + +- GetExeDir(exe_dir, sizeof(exe_dir)); ++ GetStateDir(exe_dir, sizeof(exe_dir)); + + // Enumerate in the server_log + if (hubname == NULL) +@@ -1134,7 +1134,7 @@ + return; + } + +- GetExeDir(exe_dir, sizeof(exe_dir)); ++ GetStateDir(exe_dir, sizeof(exe_dir)); + Format(dir_full_path, sizeof(dir_full_path), "%s/%s", exe_dir, dirname); + + dir = EnumDir(dir_full_path); +Index: b/src/Mayaqua/FileIO.c +=================================================================== +--- a/src/Mayaqua/FileIO.c ++++ b/src/Mayaqua/FileIO.c +@@ -122,8 +122,14 @@ + #include + #include + ++#ifdef STATE_DIR ++static char exe_file_name[MAX_SIZE] = STATE_DIR "/a.out"; ++static wchar_t exe_file_name_w[MAX_SIZE] = L"" STATE_DIR L"/a.out"; ++#else + static char exe_file_name[MAX_SIZE] = "/tmp/a.out"; + static wchar_t exe_file_name_w[MAX_SIZE] = L"/tmp/a.out"; ++#endif ++ + static LIST *hamcore = NULL; + static IO *hamcore_io = NULL; + +@@ -1038,7 +1044,7 @@ + } + + // If the file exist in hamcore/ directory on the local disk, read it +- GetExeDirW(exe_dir, sizeof(exe_dir)); ++ GetStateDirW(exe_dir, sizeof(exe_dir)); + + UniFormat(tmp, sizeof(tmp), L"%s/%S/%S", exe_dir, HAMCORE_DIR_NAME, filename); + +@@ -1154,7 +1160,7 @@ + return; + } + +- GetExeDirW(exe_dir, sizeof(exe_dir)); ++ GetStateDirW(exe_dir, sizeof(exe_dir)); + UniFormat(tmp, sizeof(tmp), L"%s/%S", exe_dir, HAMCORE_FILE_NAME); + + UniFormat(tmp2, sizeof(tmp2), L"%s/%S", exe_dir, HAMCORE_FILE_NAME_2); +@@ -1438,6 +1444,33 @@ + GetDirNameFromFilePathW(name, size, exe_file_name_w); + } + ++void GetStateDir(char *name, UINT size) ++{ ++ // Validate arguments ++ if (name == NULL) ++ { ++ return; ++ } ++#ifdef STATE_DIR ++ StrCpy(name, size, STATE_DIR); ++#else ++ GetExeDir(name, size) ++#endif ++} ++void GetStateDirW(wchar_t *name, UINT size) ++{ ++ // Validate arguments ++ if (name == NULL) ++ { ++ return; ++ } ++#ifdef STATE_DIR ++ UniStrCpy(name, size, L"" STATE_DIR L""); ++#else ++ GetExeDirW(name, size) ++#endif ++} ++ + // Get the EXE file name + void GetExeName(char *name, UINT size) + { +@@ -2389,7 +2422,7 @@ + else + { + wchar_t dir[MAX_SIZE]; +- GetExeDirW(dir, sizeof(dir)); ++ GetStateDirW(dir, sizeof(dir)); + ConbinePathW(dst, size, dir, &src[1]); + } + } +Index: b/src/Mayaqua/FileIO.h +=================================================================== +--- a/src/Mayaqua/FileIO.h ++++ b/src/Mayaqua/FileIO.h +@@ -349,6 +349,8 @@ + void GetExeNameW(wchar_t *name, UINT size); + void GetExeDir(char *name, UINT size); + void GetExeDirW(wchar_t *name, UINT size); ++void GetStateDir(char *name, UINT size); ++void GetStateDirW(wchar_t *name, UINT size); + void BuildHamcore(char *dst_filename, char *src_dir, bool unix_only); + int CompareHamcore(void *p1, void *p2); + void InitHamcore(); +Index: b/src/Mayaqua/Mayaqua.c +=================================================================== +--- a/src/Mayaqua/Mayaqua.c ++++ b/src/Mayaqua/Mayaqua.c +@@ -611,7 +611,11 @@ + _exit(0); + } + ++#ifndef STATE_DIR ++ // This check causes hamcorebuilder to fail in an unprivileged ++ // environment, and is unnecessary for a managed installation. + CheckUnixTempDir(); ++#endif + + // Initialization of Probe + InitProbe(); +Index: b/src/Mayaqua/Table.c +=================================================================== +--- a/src/Mayaqua/Table.c ++++ b/src/Mayaqua/Table.c +@@ -1191,7 +1191,7 @@ + return; + } + +- GetExeDirW(exe, sizeof(exe)); ++ GetStateDirW(exe, sizeof(exe)); + UniStrCpy(hashtemp, sizeof(hashtemp), strfilename); + BinToStrW(tmp, sizeof(tmp), filehash, MD5_SIZE); + UniStrCat(hashtemp, sizeof(hashtemp), tmp); +@@ -1204,7 +1204,11 @@ + UniStrLower(tmp); + + #ifndef OS_WIN32 ++#ifdef STATE_DIR ++ UniStrCpy(exe, sizeof(exe), L"" STATE_DIR L""); ++#else + UniStrCpy(exe, sizeof(exe), L"/tmp"); ++#endif + #else // OS_WIN32 + StrToUni(exe, sizeof(exe), MsGetTempDir()); + #endif // OS_WIN32 +Index: b/src/Mayaqua/Unix.c +=================================================================== +--- a/src/Mayaqua/Unix.c ++++ b/src/Mayaqua/Unix.c +@@ -928,7 +928,7 @@ + StrCpy(tmp, sizeof(tmp), instance_name); + } + +- GetExeDir(dir, sizeof(dir)); ++ GetStateDir(dir, sizeof(dir)); + + // File name generation + Format(name, sizeof(name), "%s/.%s", dir, tmp); +@@ -2260,7 +2260,7 @@ + return; + } + +- GetExeDir(dir, sizeof(dir)); ++ GetStateDir(dir, sizeof(dir)); + + GetExeName(exe_name, sizeof(exe_name)); + StrCat(exe_name, sizeof(exe_name), ":pid_hash"); +@@ -2305,7 +2305,7 @@ + return; + } + +- GetExeDir(dir, sizeof(dir)); ++ GetStateDir(dir, sizeof(dir)); + + GetExeName(exe_name, sizeof(exe_name)); + StrCat(exe_name, sizeof(exe_name), ":pid_hash"); +Index: b/src/bin/hamcore/Makefile.am +=================================================================== +--- a/src/bin/hamcore/Makefile.am ++++ b/src/bin/hamcore/Makefile.am +@@ -18,12 +18,16 @@ + + include $(top_srcdir)/autotools/softether.am + +-# This is required to use a custom build rule with -Wall and -Werror enabled. ++# An empty EXEEXT required for overrides with -Wall and -Werror enabled. + AUTOMAKE_OPTIONS = -Wno-override + EXEEXT = ++ + HAMCOREBUILDER = $(top_builddir)/src/hamcorebuilder/hamcorebuilder + +-sbin_PROGRAMS = hamcore.se2 ++noinst_PROGRAMS = hamcore.se2 + + hamcore.se2$(EXEEXT): $(HAMCOREBUILDER) + $(HAMCOREBUILDER) $(top_srcdir)/src/bin/hamcore $@ ++ ++install-exec-local: hamcore.se2$(EXEEXT) ++ $(INSTALL_DATA) -D hamcore.se2$(EXEEXT) $(DESTDIR)$(localstatedir)/lib/softether/hamcore.se2 diff --git a/package/softether/0004-create-non-forking-softetherd-for-upstart-and-systemd.patch b/package/softether/0004-create-non-forking-softetherd-for-upstart-and-systemd.patch new file mode 100644 index 00000000..72913b0b --- /dev/null +++ b/package/softether/0004-create-non-forking-softetherd-for-upstart-and-systemd.patch @@ -0,0 +1,218 @@ +From 64dd780905ae339a0a57e4aba541799016816a1a Mon Sep 17 00:00:00 2001 +From: Darik Horn +Date: Fri, 3 Oct 2014 13:30:24 -0400 +Subject: [PATCH] Create a non-forking softetherd for upstart and systemd. + +Implement a daemon that expects to be invoked by a new-style init like upstart +or systemd as: + + /usr/sbin/softetherd [vpnbridge|vpnclient|vpnserver] + +Alternatively, if the command line argument is empty, then use the +`SOFTETHER_MODE` environment variable instead. + +Conflicts: + src/bin/hamcore/strtable_en.stb + +Taken from Github at +https://github.com/dajhorn/SoftEtherVPN/commit/64dd780905ae339a0a57e4aba541799016816a1a. + +Signed-off-by: Bernd Kuhls +Signed-off-by: Thomas Petazzoni +--- + configure.ac | 1 + + src/Makefile.am | 3 ++ + src/bin/hamcore/strtable_en.stb | 1 + + src/softetherd/Makefile.am | 28 ++++++++++ + src/softetherd/softetherd.c | 114 ++++++++++++++++++++++++++++++++++++++++ + 5 files changed, 147 insertions(+) + create mode 100644 src/softetherd/Makefile.am + create mode 100644 src/softetherd/softetherd.c + +Index: b/configure.ac +=================================================================== +--- a/configure.ac ++++ b/configure.ac +@@ -36,6 +36,7 @@ + src/vpnclient/Makefile + src/vpnbridge/Makefile + src/vpncmd/Makefile ++ src/softetherd/Makefile + ]) + + +Index: b/src/Makefile.am +=================================================================== +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -27,3 +27,6 @@ + + # These are the final build products. + SUBDIRS += vpnserver vpnclient vpnbridge vpncmd ++ ++# This is a daemon for upstart and systemd. ++SUBDIRS += softetherd +Index: b/src/bin/hamcore/strtable_en.stb +=================================================================== +--- a/src/bin/hamcore/strtable_en.stb ++++ b/src/bin/hamcore/strtable_en.stb +@@ -1062,6 +1062,7 @@ + + + # Concerning services (UNIX) ++UNIX_DAEMON_HELP SoftEther VPN non-forking daemon for upstart and systemd.\nCommand Usage:\n %S vpnbridge - Enable bridging features.\n %S vpnclient - Enable client features.\n %S vpnserver - Enable all features.\nThe parameter can be set in the SOFTETHER_MODE environment variable.\n\n + UNIX_SVC_HELP %S service program\nCopyright (c) SoftEther VPN Project. All Rights Reserved.\n\n%S command usage:\n %S start - Start the %S service.\n %S stop - Stop the %S service if the service has been already started.\n\n + UNIX_SVC_STARTED The %S service has been started.\n + UNIX_SVC_STOPPING Stopping the %S service ...\n +Index: b/src/softetherd/Makefile.am +=================================================================== +--- /dev/null ++++ b/src/softetherd/Makefile.am +@@ -0,0 +1,28 @@ ++# Copyright 2014 Darik Horn ++# ++# This file is part of SoftEther. ++# ++# SoftEther 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. ++# ++# SoftEther 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 ++# SoftEther. If not, see . ++ ++ ++include $(top_srcdir)/autotools/softether.am ++ ++sbin_PROGRAMS = \ ++ softetherd ++ ++softetherd_SOURCES = \ ++ softetherd.c ++ ++softetherd_LDADD = \ ++ $(top_builddir)/src/libsoftether/libsoftether.la +Index: b/src/softetherd/softetherd.c +=================================================================== +--- /dev/null ++++ b/src/softetherd/softetherd.c +@@ -0,0 +1,114 @@ ++// SoftEther VPN daemon for upstart and systemd. ++// ++// Copyright 2014 Darik Horn ++// ++// This file is part of SoftEther. ++// ++// SoftEther 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. ++// ++// SoftEther 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 ++// SoftEther. If not, see . ++ ++ ++#include ++ ++#define VPN_EXE ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++void DaemonUsage(char *name) ++{ ++ UniPrint(_UU("UNIX_DAEMON_HELP"), name, name, name); ++} ++ ++ ++void DaemonStartProcess() ++{ ++ // This environment variable is exported by upstart. ++ char *upstart_job = getenv("UPSTART_JOB"); ++ ++ InitCedar(); ++ StInit(); ++ StStartServer(false); ++ ++ // Notify upstart that softetherd is ready. ++ if (upstart_job != NULL) ++ { ++ unsetenv("UPSTART_JOB"); ++ raise(SIGSTOP); ++ } ++} ++ ++ ++void DaemonStopProcess() ++{ ++ StStopServer(); ++ StFree(); ++ FreeCedar(); ++} ++ ++ ++int main(int argc, char *argv[]) ++{ ++ // This environment variable is sourced and exported by the init process from /etc/default/softether. ++ char *softether_mode = getenv("SOFTETHER_MODE"); ++ ++ InitMayaqua(false, false, argc, argv); ++ ++ // Check for an explicit invocation. (eg: "/usr/sbin/softetherd vpnserver") ++ if (argc >= 2) ++ { ++ if (StrCmpi(argv[1], "vpnbridge") == 0 ++ || StrCmpi(argv[1], "vpnclient") == 0 ++ || StrCmpi(argv[1], "vpnserver") == 0) ++ { ++ UnixExecService(argv[1], DaemonStartProcess, DaemonStopProcess); ++ FreeMayaqua(); ++ return 0; ++ } ++ ++ // Exit status codes 150..199 are reserved for the application by the LSB. ++ fprintf(stderr, "Error: Unrecognized parameter: %s\n", argv[1]); ++ fflush(stderr); ++ FreeMayaqua(); ++ return 150; ++ } ++ ++ // Alternatively, use the environment variable. ++ if (softether_mode != NULL) ++ { ++ if (StrCmpi(softether_mode, "vpnbridge") == 0 ++ || StrCmpi(softether_mode, "vpnclient") == 0 ++ || StrCmpi(softether_mode, "vpnserver") == 0) ++ { ++ UnixExecService(softether_mode, DaemonStartProcess, DaemonStopProcess); ++ FreeMayaqua(); ++ return 0; ++ } ++ ++ // Exit status codes 150..199 are reserved for the application by the LSB. ++ fprintf(stderr, "Error: Unrecognized environment variable: SOFTETHER_MODE=%s\n", softether_mode); ++ fflush(stderr); ++ FreeMayaqua(); ++ return 151; ++ } ++ ++ DaemonUsage(argv[0]); ++ FreeMayaqua(); ++ return 3; ++} diff --git a/package/softether/0005-change-GetExeDir-to-GetStateDir-in-Cedar-and-Mayaqua.patch b/package/softether/0005-change-GetExeDir-to-GetStateDir-in-Cedar-and-Mayaqua.patch new file mode 100644 index 00000000..6cb4e728 --- /dev/null +++ b/package/softether/0005-change-GetExeDir-to-GetStateDir-in-Cedar-and-Mayaqua.patch @@ -0,0 +1,90 @@ +From d68db9f2cee975aad5e07b44485615f3d842ab45 Mon Sep 17 00:00:00 2001 +From: Darik Horn +Date: Fri, 11 Jul 2014 16:17:18 -0400 +Subject: [PATCH] Change GetExeDir to GetStateDir in Cedar and Mayaqua. + +Resolve this AppArmor error by ensuring that certificate files files are +written into /var/lib/softether instead of the current working directory: + + Profile: /usr/sbin/softetherd + Operation: mkdir + Name: /usr/sbin/chain_certs + Denied: c + Logfile: /var/log/kern.log + + type=1400 audit: apparmor="DENIED" operation="mkdir" profile="/usr/sbin/softetherd" name="/usr/sbin/chain_certs/" pid=36448 comm="softetherd" requested_mask="c" denied_mask="c" fsuid=0 ouid=0 + +Taken from Github +https://github.com/dajhorn/SoftEtherVPN/commit/d68db9f2cee975aad5e07b44485615f3d842ab45. + +Signed-off-by: Bernd Kuhls +Signed-off-by: Thomas Petazzoni +--- + src/Cedar/Protocol.c | 12 ++++++------ + src/Mayaqua/Network.c | 6 +++--- + 2 files changed, 9 insertions(+), 9 deletions(-) + +Index: b/src/Cedar/Protocol.c +=================================================================== +--- a/src/Cedar/Protocol.c ++++ b/src/Cedar/Protocol.c +@@ -161,10 +161,10 @@ + UINT i; + DIRLIST *dir; + wchar_t dirname[MAX_SIZE]; +- wchar_t exedir[MAX_SIZE]; ++ wchar_t statedir[MAX_SIZE]; + +- GetExeDirW(exedir, sizeof(exedir)); +- CombinePathW(dirname, sizeof(dirname), exedir, L"chain_certs"); ++ GetStateDirW(statedir, sizeof(statedir)); ++ CombinePathW(dirname, sizeof(dirname), statedir, L"chain_certs"); + MakeDirExW(dirname); + + if (auto_save) +@@ -461,7 +461,7 @@ + void AddAllChainCertsToCertList(LIST *o) + { + wchar_t dirname[MAX_SIZE]; +- wchar_t exedir[MAX_SIZE]; ++ wchar_t statedir[MAX_SIZE]; + DIRLIST *dir; + // Validate arguments + if (o == NULL) +@@ -469,9 +469,9 @@ + return; + } + +- GetExeDirW(exedir, sizeof(exedir)); ++ GetStateDirW(statedir, sizeof(statedir)); + +- CombinePathW(dirname, sizeof(dirname), exedir, L"chain_certs"); ++ CombinePathW(dirname, sizeof(dirname), statedir, L"chain_certs"); + + MakeDirExW(dirname); + +Index: b/src/Mayaqua/Network.c +=================================================================== +--- a/src/Mayaqua/Network.c ++++ b/src/Mayaqua/Network.c +@@ -12588,7 +12588,7 @@ + void AddChainSslCertOnDirectory(struct ssl_ctx_st *ctx) + { + wchar_t dirname[MAX_SIZE]; +- wchar_t exedir[MAX_SIZE]; ++ wchar_t statedir[MAX_SIZE]; + wchar_t txtname[MAX_SIZE]; + DIRLIST *dir; + LIST *o; +@@ -12602,9 +12602,9 @@ + + o = NewListFast(NULL); + +- GetExeDirW(exedir, sizeof(exedir)); ++ GetStateDirW(statedir, sizeof(statedir)); + +- CombinePathW(dirname, sizeof(dirname), exedir, L"chain_certs"); ++ CombinePathW(dirname, sizeof(dirname), statedir, L"chain_certs"); + + MakeDirExW(dirname); + diff --git a/package/softether/0006-cross-compile.patch b/package/softether/0006-cross-compile.patch new file mode 100644 index 00000000..0b31eca6 --- /dev/null +++ b/package/softether/0006-cross-compile.patch @@ -0,0 +1,30 @@ +Host version of hamcorebuilder is needed during cross-compile + +Signed-off-by: Bernd Kuhls + +diff -uNr SoftEtherVPN-16b713b98da8dba29f0f845d5a8c36d6f7c34824.org/src/bin/hamcore/Makefile.am SoftEtherVPN-16b713b98da8dba29f0f845d5a8c36d6f7c34824/src/bin/hamcore/Makefile.am +--- SoftEtherVPN-16b713b98da8dba29f0f845d5a8c36d6f7c34824.org/src/bin/hamcore/Makefile.am 2014-09-27 12:56:53.108725793 +0200 ++++ SoftEtherVPN-16b713b98da8dba29f0f845d5a8c36d6f7c34824/src/bin/hamcore/Makefile.am 2014-09-27 12:57:50.280009025 +0200 +@@ -26,8 +26,8 @@ + + noinst_PROGRAMS = hamcore.se2 + +-hamcore.se2$(EXEEXT): $(HAMCOREBUILDER) +- $(HAMCOREBUILDER) $(top_srcdir)/src/bin/hamcore $@ ++hamcore.se2$(EXEEXT): ++ hamcorebuilder $(top_srcdir)/src/bin/hamcore $@ + + install-exec-local: hamcore.se2$(EXEEXT) + $(INSTALL_DATA) -D hamcore.se2$(EXEEXT) $(DESTDIR)$(localstatedir)/lib/softether/hamcore.se2 +diff -uNr SoftEtherVPN-16b713b98da8dba29f0f845d5a8c36d6f7c34824.org/src/Makefile.am SoftEtherVPN-16b713b98da8dba29f0f845d5a8c36d6f7c34824/src/Makefile.am +--- SoftEtherVPN-16b713b98da8dba29f0f845d5a8c36d6f7c34824.org/src/Makefile.am 2014-09-27 12:56:53.136726809 +0200 ++++ SoftEtherVPN-16b713b98da8dba29f0f845d5a8c36d6f7c34824/src/Makefile.am 2014-09-27 12:58:12.959723109 +0200 +@@ -20,7 +20,7 @@ + SUBDIRS = Mayaqua Cedar + + # This is a nodist helper. +-SUBDIRS += hamcorebuilder ++# SUBDIRS += hamcorebuilder + + # These are shared components. + SUBDIRS += libsoftether bin/hamcore diff --git a/package/softether/0007-iconv.patch b/package/softether/0007-iconv.patch new file mode 100644 index 00000000..09d7777e --- /dev/null +++ b/package/softether/0007-iconv.patch @@ -0,0 +1,28 @@ +Fix linking with libiconv + +Inspired by https://github.com/el1n/OpenWRT-package-softether/blob/4cb1cd9073a76edf34c512e587069626e02e2404/patches/120-fix-iconv-headers-common.patch + +Signed-off-by: Bernd Kuhls + +Index: b/src/Mayaqua/Mayaqua.h +=================================================================== +--- a/src/Mayaqua/Mayaqua.h ++++ b/src/Mayaqua/Mayaqua.h +@@ -282,17 +282,7 @@ + #include + #endif // MAYAQUA_SUPPORTS_GETIFADDRS + +-#ifdef UNIX_LINUX +-typedef void *iconv_t; +-iconv_t iconv_open (__const char *__tocode, __const char *__fromcode); +-size_t iconv (iconv_t __cd, char **__restrict __inbuf, +- size_t *__restrict __inbytesleft, +- char **__restrict __outbuf, +- size_t *__restrict __outbytesleft); +-int iconv_close (iconv_t __cd); +-#else // UNIX_LINUX + #include +-#endif // UNIX_LINUX + + + diff --git a/package/softether/0008-librt.patch b/package/softether/0008-librt.patch new file mode 100644 index 00000000..661c960a --- /dev/null +++ b/package/softether/0008-librt.patch @@ -0,0 +1,33 @@ +Downloaded from +https://github.com/dajhorn/SoftEtherVPN/commit/9a8538a6f2287fe8bebd0a7185de408e31e5a7df + +Fixes +http://autobuild.buildroot.net/results/48f/48f778a891e0bf6a60ed2e4bec057c338ec25ec9/ +and many others + +Signed-off-by: Bernd Kuhls + + +From 9a8538a6f2287fe8bebd0a7185de408e31e5a7df Mon Sep 17 00:00:00 2001 +From: Darik Horn +Date: Thu, 5 Jun 2014 21:02:02 -0400 +Subject: [PATCH] Add an explicit autoconf check for librt. + +The realtime extensions library is not automatically linked on Debian ARM +platforms, so do an AC_CHECK_LIB for it in the configuration macro. +--- + configure.ac | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/configure.ac b/configure.ac +index 165623a..6f85393 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -60,6 +60,7 @@ CC="$PTHREAD_CC" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + ++AC_CHECK_LIB([rt],[clock_gettime]) + + AX_CHECK_OPENSSL([ + AC_SUBST(OPENSSL_LIBS) diff --git a/package/softether/0009-uclibc-ai-addrconfig.patch b/package/softether/0009-uclibc-ai-addrconfig.patch new file mode 100644 index 00000000..7d8f1c67 --- /dev/null +++ b/package/softether/0009-uclibc-ai-addrconfig.patch @@ -0,0 +1,27 @@ +Only enable getifaddrs support when available + +On uClibc, the ifaddrs.h support is optional. While the default +Buildroot uClibc configuration has it enabled, some external +toolchains may not. Therefore this patch detects that and adjusts +softether usage of ifaddrs accordingly. + +Based on an initial patch from Bernd Kuhls. + +Signed-off-by: Thomas Petazzoni + +Index: b/src/Mayaqua/Mayaqua.h +=================================================================== +--- a/src/Mayaqua/Mayaqua.h ++++ b/src/Mayaqua/Mayaqua.h +@@ -235,9 +235,11 @@ + #ifdef OS_UNIX + #ifndef UNIX_SOLARIS + #ifndef CPU_SH4 ++#if !defined(__UCLIBC__) || defined(__UCLIBC_SUPPORT_AI_ADDRCONFIG__) + // Getifaddrs system call is supported on UNIX other than Solaris. + // However, it is not supported also by the Linux on SH4 CPU + #define MAYAQUA_SUPPORTS_GETIFADDRS ++#endif // !UCLIBC || UCLIBC_SUPPORT_AI_ADDRCONFIG + #endif // CPU_SH4 + #endif // UNIX_SOLARIS + #endif // OS_UNIX diff --git a/package/softether/Config.in b/package/softether/Config.in new file mode 100644 index 00000000..01104b5d --- /dev/null +++ b/package/softether/Config.in @@ -0,0 +1,32 @@ +config BR2_PACKAGE_SOFTETHER + bool "softether" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + depends on BR2_USE_WCHAR + depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS + select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_OPENSSL_FORCE_LIBOPENSSL + select BR2_PACKAGE_READLINE + help + The SoftEther Server is a fully integrated implementation of + the SSTP, L2TP, L2TPv3, OpenVPN, and IPSec virtual private + networking protocols on Linux and several other + platforms. It is generally compatible with other + implementations by Apple, Cisco, Juniper, Microsoft, et al. + + Convenient Layer-2 and Layer-3 bridging capabilities can + connect several branch offices into a single broadcast or + routing domain, even behind a NAT or without a static IPv4 + address. + + In addition to supporting most VPN protocols, the SoftEther + Client can penetrate hardened firewalls and captured + gateways through HTTPS, DNS, and ICMP exfiltration. + + http://www.softether.org + +comment "softether needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS + depends on !(BR2_USE_WCHAR && BR2_TOOLCHAIN_HAS_THREADS) diff --git a/package/softether/softether.hash b/package/softether/softether.hash new file mode 100644 index 00000000..01bdc629 --- /dev/null +++ b/package/softether/softether.hash @@ -0,0 +1,3 @@ +# Locally computed +sha256 f579fa938f6d5d0622f23b3c163b3de5dc171e30175e44511bf269b3bb9fb1fc softether-4.30-9700-beta.tar.gz +sha256 5da6241ddb987c4543bf1cbba6b40a3cd3ecb624dbd4a63daf04440911656bde LICENSE diff --git a/package/softether/softether.mk b/package/softether/softether.mk new file mode 100644 index 00000000..2dbe7edb --- /dev/null +++ b/package/softether/softether.mk @@ -0,0 +1,37 @@ +################################################################################ +# +# softether +# +################################################################################ + +SOFTETHER_VERSION = 4.30-9700-beta +SOFTETHER_SITE = $(call github,SoftEtherVPN,SoftEtherVPN_stable,v$(SOFTETHER_VERSION)) +SOFTETHER_LICENSE = Apache-2.0 +SOFTETHER_LICENSE_FILES = LICENSE +SOFTETHER_DEPENDENCIES = host-pkgconf host-softether libopenssl readline +SOFTETHER_AUTORECONF = YES + +ifeq ($(BR2_ENABLE_LOCALE),) +SOFTETHER_DEPENDENCIES += libiconv +SOFTETHER_CONF_ENV = LIBS+=" -liconv" +endif + +SOFTETHER_CONF_OPTS = --with-zlib="$(STAGING_DIR)/usr" + +# host-libiconv does not exist, therefore we need this extra line +HOST_SOFTETHER_DEPENDENCIES = host-pkgconf host-libopenssl host-readline + +# target build creates the file hamcore.se2 which needs the host variant of +# hamcorebuilder, for details see http://www.vpnusers.com/viewtopic.php?p=5426 +define HOST_SOFTETHER_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D)/src/Mayaqua + $(HOST_MAKE_ENV) $(MAKE) -C $(@D)/src/Cedar + $(HOST_MAKE_ENV) $(MAKE) -C $(@D)/src/hamcorebuilder +endef + +define HOST_SOFTETHER_INSTALL_CMDS + $(INSTALL) -m 0755 $(@D)/src/hamcorebuilder/hamcorebuilder $(HOST_DIR)/bin/hamcorebuilder +endef + +$(eval $(autotools-package)) +$(eval $(host-autotools-package)) diff --git a/package/solarus/0001-cmake-remove-Werror.patch b/package/solarus/0001-cmake-remove-Werror.patch new file mode 100644 index 00000000..533ac91c --- /dev/null +++ b/package/solarus/0001-cmake-remove-Werror.patch @@ -0,0 +1,26 @@ +From 5f372ba3502369c6501c77650a761300d26f64c0 Mon Sep 17 00:00:00 2001 +From: Romain Naour +Date: Thu, 22 Jun 2017 00:19:56 +0200 +Subject: [PATCH] cmake: remove Werror + +Signed-off-by: Romain Naour +--- + cmake/AddCompilationFlags.cmake | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/cmake/AddCompilationFlags.cmake b/cmake/AddCompilationFlags.cmake +index 2c105db7f..cb5c5719a 100644 +--- a/cmake/AddCompilationFlags.cmake ++++ b/cmake/AddCompilationFlags.cmake +@@ -25,7 +25,7 @@ endif() + set(CMAKE_CXX_FLAGS_RELEASE "-Wno-error -Wall -Wextra -Wno-unknown-pragmas -Wno-fatal-errors ${CMAKE_CXX_FLAGS_RELEASE} -O3") + + # Be more pedantic in debug mode for developers. +-set(CMAKE_CXX_FLAGS_DEBUG "-Werror -Wall -Wextra -Wno-error=deprecated-declarations -pedantic ${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG") ++set(CMAKE_CXX_FLAGS_DEBUG "-Wno-error -Wall -Wextra -Wno-error=deprecated-declarations -pedantic ${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG") + if(CMAKE_COMPILER_IS_GNUCXX) + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wsuggest-override") + endif() +-- +2.14.5 + diff --git a/package/solarus/Config.in b/package/solarus/Config.in new file mode 100644 index 00000000..b0f4121f --- /dev/null +++ b/package/solarus/Config.in @@ -0,0 +1,33 @@ +config BR2_PACKAGE_SOLARUS + bool "solarus" + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_LUAINTERPRETER_ABI_VERSION_5_1 + depends on BR2_PACKAGE_OPENAL_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # openal + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # openal + depends on !BR2_STATIC_LIBS # SDL2 + depends on BR2_PACKAGE_HAS_LIBGL + select BR2_PACKAGE_GLM + select BR2_PACKAGE_LIBMODPLUG + select BR2_PACKAGE_LIBOGG + select BR2_PACKAGE_LIBPNG # runtime + select BR2_PACKAGE_LIBVORBIS + select BR2_PACKAGE_OPENAL + select BR2_PACKAGE_PHYSFS + select BR2_PACKAGE_SDL2 + select BR2_PACKAGE_SDL2_IMAGE + select BR2_PACKAGE_SDL2_TTF + help + Solarus is an open-source Zelda-like 2D game engine written + in C++. It can run games scripted in Lua. This engine is used + by our Zelda fangames. Solarus is licensed under GPL v3. + + http://www.solarus-games.org + https://github.com/solarus-games/solarus + +comment "solarus needs OpenGL and a toolchain w/ C++, gcc >= 4.9, NPTL, dynamic library, and luajit or lua 5.1" + depends on !BR2_PACKAGE_LUAINTERPRETER_ABI_VERSION_5_1 + depends on BR2_PACKAGE_OPENAL_ARCH_SUPPORTS + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 \ + || !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIBS \ + || !BR2_PACKAGE_HAS_LIBGL diff --git a/package/solarus/solarus.hash b/package/solarus/solarus.hash new file mode 100644 index 00000000..8400bfd1 --- /dev/null +++ b/package/solarus/solarus.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 b2e00a7df8953903ba022a8f392038e86f675cee714da19cf9a5f8535c42f349 solarus-v1.6.4.tar.bz2 + +sha256 309875d925041d909bc705473d6c4b7905272aea15c1c2389088c26c161bae1f license.txt diff --git a/package/solarus/solarus.mk b/package/solarus/solarus.mk new file mode 100644 index 00000000..92e849ef --- /dev/null +++ b/package/solarus/solarus.mk @@ -0,0 +1,35 @@ +################################################################################ +# +# solarus +# +################################################################################ + +SOLARUS_VERSION = 1.6.4 +SOLARUS_SITE = \ + https://gitlab.com/solarus-games/solarus/-/archive/v$(SOLARUS_VERSION) +SOLARUS_SOURCE = solarus-v$(SOLARUS_VERSION).tar.bz2 + +SOLARUS_LICENSE = GPL-3.0 (code), CC-BY-SA-4.0 (Solarus logos and icons), \ + CC-BY-SA-3.0 (GUI icons) +SOLARUS_LICENSE_FILES = license.txt + +# Install libsolarus.so +SOLARUS_INSTALL_STAGING = YES + +SOLARUS_DEPENDENCIES = glm libgl libmodplug libogg libvorbis openal physfs \ + sdl2 sdl2_image sdl2_ttf + +# Disable launcher GUI (requires Qt5) +SOLARUS_CONF_OPTS = \ + -DSOLARUS_GUI=OFF \ + -DSOLARUS_TESTS=OFF + +ifeq ($(BR2_PACKAGE_LUAJIT),y) +SOLARUS_CONF_OPTS += -DSOLARUS_USE_LUAJIT=ON +SOLARUS_DEPENDENCIES += luajit +else +SOLARUS_CONF_OPTS += -DSOLARUS_USE_LUAJIT=OFF +SOLARUS_DEPENDENCIES += lua +endif + +$(eval $(cmake-package)) diff --git a/package/sound-theme-borealis/Config.in b/package/sound-theme-borealis/Config.in new file mode 100644 index 00000000..fcc109fe --- /dev/null +++ b/package/sound-theme-borealis/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_SOUND_THEME_BOREALIS + bool "sound-theme-borealis" + help + Borealis sound theme. + + http://kde-look.org/content/show.php?content=12584 diff --git a/package/sound-theme-borealis/sound-theme-borealis.hash b/package/sound-theme-borealis/sound-theme-borealis.hash new file mode 100644 index 00000000..7a4d3e13 --- /dev/null +++ b/package/sound-theme-borealis/sound-theme-borealis.hash @@ -0,0 +1,2 @@ +# Locally calculated +sha256 dd80a9c6317de29d42786ba7d95b114b64d06ec6c0c17dd18df853a5c668e727 Borealis_sound_theme_ogg-0.9a.tar.bz2 diff --git a/package/sound-theme-borealis/sound-theme-borealis.mk b/package/sound-theme-borealis/sound-theme-borealis.mk new file mode 100644 index 00000000..9242837b --- /dev/null +++ b/package/sound-theme-borealis/sound-theme-borealis.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# sound-theme-borealis +# +################################################################################ + +SOUND_THEME_BOREALIS_VERSION = 0.9a +SOUND_THEME_BOREALIS_SITE = http://ico.bukvic.net/Linux/Borealis_soundtheme +SOUND_THEME_BOREALIS_SOURCE = \ + Borealis_sound_theme_ogg-$(SOUND_THEME_BOREALIS_VERSION).tar.bz2 + +define SOUND_THEME_BOREALIS_INSTALL_TARGET_CMDS + for f in $(@D)/*.ogg ; do \ + $(INSTALL) -D -m 0644 $$f $(TARGET_DIR)/usr/share/sounds/borealis/stereo/`basename $$f` || exit 1; \ + done +endef + +$(eval $(generic-package)) diff --git a/package/sound-theme-freedesktop/Config.in b/package/sound-theme-freedesktop/Config.in new file mode 100644 index 00000000..8b48015f --- /dev/null +++ b/package/sound-theme-freedesktop/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_SOUND_THEME_FREEDESKTOP + bool "sound-theme-freedesktop" + help + Default theme for the XDG Sound Theme Specification. + + http://freedesktop.org/wiki/Specifications/sound-theme-spec diff --git a/package/sound-theme-freedesktop/sound-theme-freedesktop.hash b/package/sound-theme-freedesktop/sound-theme-freedesktop.hash new file mode 100644 index 00000000..cde02ca3 --- /dev/null +++ b/package/sound-theme-freedesktop/sound-theme-freedesktop.hash @@ -0,0 +1,2 @@ +# Locally calculated +sha256 e6595afb02b76099ef6df42c2ac7c4f9680c21c3f26b2a7ca0943d1fdbbd9aef sound-theme-freedesktop-0.7.tar.bz2 diff --git a/package/sound-theme-freedesktop/sound-theme-freedesktop.mk b/package/sound-theme-freedesktop/sound-theme-freedesktop.mk new file mode 100644 index 00000000..ea4c8536 --- /dev/null +++ b/package/sound-theme-freedesktop/sound-theme-freedesktop.mk @@ -0,0 +1,14 @@ +################################################################################ +# +# sound-theme-freedesktop +# +################################################################################ + +SOUND_THEME_FREEDESKTOP_VERSION = 0.7 +SOUND_THEME_FREEDESKTOP_SITE = \ + http://people.freedesktop.org/~mccann/dist +SOUND_THEME_FREEDESKTOP_SOURCE = \ + sound-theme-freedesktop-$(SOUND_THEME_FREEDESKTOP_VERSION).tar.bz2 +SOUND_THEME_FREEDESKTOP_DEPENDENCIES = host-intltool + +$(eval $(autotools-package)) diff --git a/package/sourcehanserif/Config.in b/package/sourcehanserif/Config.in new file mode 100644 index 00000000..f7569655 --- /dev/null +++ b/package/sourcehanserif/Config.in @@ -0,0 +1,27 @@ +config BR2_PACKAGE_SOURCEHANSERIF + bool "source han serif" + help + "SiYuanSongTi" is a Song-Ti Style (sans-serif) Chinese fonts + +config BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR + bool "source han serif CN regular" + depends on BR2_PACKAGE_SOURCEHANSERIF + help + select CN regular version SiYuanSongTi + file size 13M + +config BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR_SMALL + bool "source han serif CN regular small version" + depends on BR2_PACKAGE_SOURCEHANSERIF + help + sub ori file "CN regular" + 13M -> 2.6M + +config BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR_INSTALL_PATH + string "install path" + depends on BR2_PACKAGE_SOURCEHANSERIF + default "/usr/share/fonts" + help + select install path + default is /usr/share/fonts + diff --git a/package/sourcehanserif/sourcehanserif.mk b/package/sourcehanserif/sourcehanserif.mk new file mode 100644 index 00000000..bfba3575 --- /dev/null +++ b/package/sourcehanserif/sourcehanserif.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# wqy-zenhei +# +################################################################################ + +SOURCEHANSERIF_SITE = $(TOPDIR)/package/sourcehanserif/sourcehanserif.tar.gz +SOURCEHANSERIF_SITE_METHOD = file + +ifeq ($(strip $(BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR_INSTALL_PATH)),"") + SOURCEHANSERIF_INSTALL_PATH = "/usr/share/fonts" +else + SOURCEHANSERIF_INSTALL_PATH = $(BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR_INSTALL_PATH) +endif + +define SOURCEHANSERIF_EXTRACT_CMDS + tar -zxf $(SOURCEHANSERIF_SITE) -C $(@D)/ +endef + +ifeq ($(BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR),y) +define SOURCEHANSERIF_INSTALL_CN_REGULAR_CMD + $(INSTALL) -D -m 0644 $(@D)/SourceHanSerifCN-Regular.ttf \ + $(TARGET_DIR)$(SOURCEHANSERIF_INSTALL_PATH)/SourceHanSerifCN-Regular.ttf +endef +endif + +ifeq ($(BR2_PACKAGE_SOURCEHANSERIF_CN_REGULAR_SMALL),y) +define SOURCEHANSERIF_INSTALL_CN_REGULAR_CMD + $(INSTALL) -D -m 0644 $(@D)/SourceHanSerifCN-Regular-small.ttf \ + $(TARGET_DIR)$(SOURCEHANSERIF_INSTALL_PATH)/SourceHanSerifCN-Regular.ttf + +endef +endif + +define SOURCEHANSERIF_INSTALL_TARGET_CMDS + mkdir -p $(TARGET_DIR)$(SOURCEHANSERIF_INSTALL_PATH) + $(SOURCEHANSERIF_INSTALL_CN_REGULAR_CMD) +endef + +$(eval $(generic-package)) diff --git a/package/sourcehanserif/sourcehanserif.tar.gz b/package/sourcehanserif/sourcehanserif.tar.gz new file mode 100644 index 00000000..cef0a62b Binary files /dev/null and b/package/sourcehanserif/sourcehanserif.tar.gz differ